diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..e762a54 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,3 @@ +Claude Code is a Beta research preview per our [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms). If Customer chooses to send us feedback about Claude Code, such as transcripts of Customer Claude Code usage, Anthropic may use that feedback to debug related issues or to improve Claude Code’s functionality (e.g., to reduce the risk of similar bugs occurring in the future). Anthropic will not train models using feedback from Claude Code. + +© Anthropic PBC. All rights reserved. Use is subject to Anthropic's [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms). diff --git a/README.md b/README.md index 6278185..6c63d9f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,55 @@ -# claude-code +# Claude Code (Research Preview) -Extracted from the source maps of the @anthropic-ai/claude-code package +![](https://img.shields.io/badge/Node.js-18%2B-brightgreen?style=flat-square) +Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands. + +Some of its key capabilities include: + +- Edit files and fix bugs across your codebase +- Answer questions about your code's architecture and logic +- Execute and fix tests, lint, and other commands +- Search through git history, resolve merge conflicts, and create commits and PRs + +**Learn more in the [official documentation](https://docs.anthropic.com/en/docs/agents/claude-code/introduction)**. + +## Get started + +
    +
  1. + Run the following command in your terminal:
    + npm install -g @anthropic-ai/claude-code +
  2. +
  3. + Navigate to your project directory and run claude +
  4. +
  5. + Complete the one-time OAuth process with your Anthropic Console account. +
  6. +
+ +### Research Preview + +We're launching Claude Code as a beta product in research preview to learn directly from developers about their experiences collaborating with AI agents. Our aim is to learn more about how developers prefer to collaborate with AI tools, which development workflows benefit most from working with the agent, and how we can make the agent experience more intuitive. + +This is an early version of the product experience, and it's likely to evolve as we learn more about developer preferences. Claude Code is an early look into what's possible with agentic coding, and we know there are areas to improve. We plan to enhance tool execution reliability, support for long-running commands, terminal rendering, and Claude's self-knowledge of its capabilities -- as well as many other product experiences -- over the coming weeks. + +### Reporting Bugs + +We welcome feedback during this beta period. Use the `/bug` command to report issues directly within Claude Code, or file a [GitHub issue](https://github.com/anthropics/claude-code/issues). + +### Data collection, usage, and retention + +When you use Claude Code, we collect feedback, which includes usage data (such as code acceptance or rejections), associated conversation data, and user feedback submitted via the `/bug` command. + +#### How we use your data + +We may use feedback to improve our products and services, but we will not train generative models using your feedback from Claude Code. Given their potentially sensitive nature, we store user feedback transcripts for only 30 days. + +If you choose to send us feedback about Claude Code, such as transcripts of your usage, Anthropic may use that feedback to debug related issues and improve Claude Code's functionality (e.g., to reduce the risk of similar bugs occurring in the future). + +### Privacy safeguards + +We have implemented several safeguards to protect your data, including limited retention periods for sensitive information, restricted access to user session data, and clear policies against using feedback for model training. + +For full details, please review our [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms) and [Privacy Policy](https://www.anthropic.com/legal/privacy). diff --git a/cli.mjs b/cli.mjs new file mode 100755 index 0000000..ab00995 --- /dev/null +++ b/cli.mjs @@ -0,0 +1,1401 @@ +#!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps + +// Claude Code is a Beta product per Anthropic's Commercial Terms of Service. +// By using Claude Code, you agree that all code acceptance or rejection decisions you make, +// and the associated conversations in context, constitute Feedback under Anthropic's Commercial Terms, +// and may be used to improve Anthropic's products, including training models. +// You are responsible for reviewing any code suggestions before use. + +// (c) Anthropic PBC. All rights reserved. Use is subject to Anthropic's Commercial Terms of Service (https://www.anthropic.com/legal/commercial-terms). + +// Version: 0.2.8 + +import{createRequire as wU2}from"node:module";var GU2=Object.create;var{getPrototypeOf:ZU2,defineProperty:ie,getOwnPropertyNames:CU2}=Object;var WU2=Object.prototype.hasOwnProperty;var J1=(I,d,G)=>{G=I!=null?GU2(ZU2(I)):{};let Z=d||!I||!I.__esModule?ie(G,"default",{value:I,enumerable:!0}):G;for(let C of CU2(I))if(!WU2.call(Z,C))ie(Z,C,{get:()=>I[C],enumerable:!0});return Z};var Y=(I,d)=>()=>(d||I((d={exports:{}}).exports,d),d.exports);var Kv=(I,d)=>{for(var G in d)ie(I,G,{get:d[G],enumerable:!0,configurable:!0,set:(Z)=>d[G]=()=>Z})};var Gw=(I,d)=>()=>(I&&(d=I(I=0)),d);var B1=wU2(import.meta.url);var xG=Y((Iz1)=>{Object.defineProperty(Iz1,"__esModule",{value:!0});var oN1=Object.prototype.toString;function BU2(I){switch(oN1.call(I)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return IO(I,Error)}}function GN(I,d){return oN1.call(I)===`[object ${d}]`}function AU2(I){return GN(I,"ErrorEvent")}function VU2(I){return GN(I,"DOMError")}function XU2(I){return GN(I,"DOMException")}function YU2(I){return GN(I,"String")}function eN1(I){return typeof I==="object"&&I!==null&&"__sentry_template_string__"in I&&"__sentry_template_values__"in I}function _U2(I){return I===null||eN1(I)||typeof I!=="object"&&typeof I!=="function"}function tN1(I){return GN(I,"Object")}function DU2(I){return typeof Event!=="undefined"&&IO(I,Event)}function HU2(I){return typeof Element!=="undefined"&&IO(I,Element)}function FU2(I){return GN(I,"RegExp")}function gU2(I){return Boolean(I&&I.then&&typeof I.then==="function")}function JU2(I){return tN1(I)&&"nativeEvent"in I&&"preventDefault"in I&&"stopPropagation"in I}function KU2(I){return typeof I==="number"&&I!==I}function IO(I,d){try{return I instanceof d}catch(G){return!1}}function NU2(I){return!!(typeof I==="object"&&I!==null&&(I.__isVue||I._isVue))}Iz1.isDOMError=VU2;Iz1.isDOMException=XU2;Iz1.isElement=HU2;Iz1.isError=BU2;Iz1.isErrorEvent=AU2;Iz1.isEvent=DU2;Iz1.isInstanceOf=IO;Iz1.isNaN=KU2;Iz1.isParameterizedString=eN1;Iz1.isPlainObject=tN1;Iz1.isPrimitive=_U2;Iz1.isRegExp=FU2;Iz1.isString=YU2;Iz1.isSyntheticEvent=JU2;Iz1.isThenable=gU2;Iz1.isVueViewModel=NU2});var Nv=Y((Gz1)=>{Object.defineProperty(Gz1,"__esModule",{value:!0});var dO=xG();function OU2(I,d=0){if(typeof I!=="string"||d===0)return I;return I.length<=d?I:`${I.slice(0,d)}...`}function mU2(I,d){let G=I,Z=G.length;if(Z<=150)return G;if(d>Z)d=Z;let C=Math.max(d-60,0);if(C<5)C=0;let W=Math.min(C+140,Z);if(W>Z-5)W=Z;if(W===Z)C=Math.max(W-140,0);if(G=G.slice(C,W),C>0)G=`'{snip} ${G}`;if(Wdz1(I,Z,G))}Gz1.isMatchingPattern=dz1;Gz1.safeJoin=lU2;Gz1.snipLine=mU2;Gz1.stringMatchesSomePattern=bU2;Gz1.truncate=OU2});var wz1=Y((Wz1)=>{Object.defineProperty(Wz1,"__esModule",{value:!0});var ne=xG(),pU2=Nv();function iU2(I,d,G=250,Z,C,W,w){if(!W.exception||!W.exception.values||!w||!ne.isInstanceOf(w.originalException,Error))return;let B=W.exception.values.length>0?W.exception.values[W.exception.values.length-1]:void 0;if(B)W.exception.values=nU2(re(I,d,C,w.originalException,Z,W.exception.values,B,0),G)}function re(I,d,G,Z,C,W,w,B){if(W.length>=G+1)return W;let A=[...W];if(ne.isInstanceOf(Z[C],Error)){Zz1(w,B);let V=I(d,Z[C]),X=A.length;Cz1(V,C,X,B),A=re(I,d,G,Z[C],C,[V,...A],V,X)}if(Array.isArray(Z.errors))Z.errors.forEach((V,X)=>{if(ne.isInstanceOf(V,Error)){Zz1(w,B);let _=I(d,V),F=A.length;Cz1(_,`errors[${X}]`,F,B),A=re(I,d,G,V,C,[_,...A],_,F)}});return A}function Zz1(I,d){I.mechanism=I.mechanism||{type:"generic",handled:!0},I.mechanism={...I.mechanism,...I.type==="AggregateError"&&{is_exception_group:!0},exception_id:d}}function Cz1(I,d,G,Z){I.mechanism=I.mechanism||{type:"generic",handled:!0},I.mechanism={...I.mechanism,type:"chained",source:d,exception_id:G,parent_id:Z}}function nU2(I,d){return I.map((G)=>{if(G.value)G.value=pU2.truncate(G.value,d);return G})}Wz1.applyAggregateErrorsToEvent=iU2});var K7=Y((Bz1)=>{Object.defineProperty(Bz1,"__esModule",{value:!0});function GO(I){return I&&I.Math==Math?I:void 0}var ae=typeof globalThis=="object"&&GO(globalThis)||typeof window=="object"&&GO(window)||typeof self=="object"&&GO(self)||typeof global=="object"&&GO(global)||function(){return this}()||{};function aU2(){return ae}function sU2(I,d,G){let Z=G||ae,C=Z.__SENTRY__=Z.__SENTRY__||{};return C[I]||(C[I]=d())}Bz1.GLOBAL_OBJ=ae;Bz1.getGlobalObject=aU2;Bz1.getGlobalSingleton=sU2});var se=Y((Az1)=>{Object.defineProperty(Az1,"__esModule",{value:!0});var Iv2=xG(),dv2=K7(),ZN=dv2.getGlobalObject(),Gv2=80;function Zv2(I,d={}){if(!I)return"";try{let G=I,Z=5,C=[],W=0,w=0,B=" > ",A=B.length,V,X=Array.isArray(d)?d:d.keyAttrs,_=!Array.isArray(d)&&d.maxStringLength||Gv2;while(G&&W++1&&w+C.length*A+V.length>=_)break;C.push(V),w+=V.length,G=G.parentNode}return C.reverse().join(B)}catch(G){return""}}function Cv2(I,d){let G=I,Z=[],C,W,w,B,A;if(!G||!G.tagName)return"";if(ZN.HTMLElement){if(G instanceof HTMLElement&&G.dataset&&G.dataset.sentryComponent)return G.dataset.sentryComponent}Z.push(G.tagName.toLowerCase());let V=d&&d.length?d.filter((_)=>G.getAttribute(_)).map((_)=>[_,G.getAttribute(_)]):null;if(V&&V.length)V.forEach((_)=>{Z.push(`[${_[0]}="${_[1]}"]`)});else{if(G.id)Z.push(`#${G.id}`);if(C=G.className,C&&Iv2.isString(C)){W=C.split(/\s+/);for(A=0;A{Object.defineProperty(Vz1,"__esModule",{value:!0});var _v2=typeof __SENTRY_DEBUG__==="undefined"||__SENTRY_DEBUG__;Vz1.DEBUG_BUILD=_v2});var DC=Y((Yz1)=>{Object.defineProperty(Yz1,"__esModule",{value:!0});var Hv2=Zw(),oe=K7(),Fv2="Sentry Logger ",ee=["debug","info","warn","error","log","assert","trace"],te={};function Xz1(I){if(!("console"in oe.GLOBAL_OBJ))return I();let d=oe.GLOBAL_OBJ.console,G={},Z=Object.keys(te);Z.forEach((C)=>{let W=te[C];G[C]=d[C],d[C]=W});try{return I()}finally{Z.forEach((C)=>{d[C]=G[C]})}}function gv2(){let I=!1,d={enable:()=>{I=!0},disable:()=>{I=!1},isEnabled:()=>I};if(Hv2.DEBUG_BUILD)ee.forEach((G)=>{d[G]=(...Z)=>{if(I)Xz1(()=>{oe.GLOBAL_OBJ.console[G](`${Fv2}[${G}]:`,...Z)})}});else ee.forEach((G)=>{d[G]=()=>{return}});return d}var Jv2=gv2();Yz1.CONSOLE_LEVELS=ee;Yz1.consoleSandbox=Xz1;Yz1.logger=Jv2;Yz1.originalConsoleMethods=te});var It=Y((Hz1)=>{Object.defineProperty(Hz1,"__esModule",{value:!0});var fv2=Zw(),zv=DC(),qv2=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function Rv2(I){return I==="http"||I==="https"}function Uv2(I,d=!1){let{host:G,path:Z,pass:C,port:W,projectId:w,protocol:B,publicKey:A}=I;return`${B}://${A}${d&&C?`:${C}`:""}@${G}${W?`:${W}`:""}/${Z?`${Z}/`:Z}${w}`}function _z1(I){let d=qv2.exec(I);if(!d){zv.consoleSandbox(()=>{console.error(`Invalid Sentry Dsn: ${I}`)});return}let[G,Z,C="",W,w="",B]=d.slice(1),A="",V=B,X=V.split("/");if(X.length>1)A=X.slice(0,-1).join("/"),V=X.pop();if(V){let _=V.match(/^\d+/);if(_)V=_[0]}return Dz1({host:W,pass:C,path:A,projectId:V,port:w,protocol:G,publicKey:Z})}function Dz1(I){return{protocol:I.protocol,publicKey:I.publicKey||"",pass:I.pass||"",host:I.host,port:I.port||"",path:I.path||"",projectId:I.projectId}}function vv2(I){if(!fv2.DEBUG_BUILD)return!0;let{port:d,projectId:G,protocol:Z}=I;if(["protocol","publicKey","host","projectId"].find((w)=>{if(!I[w])return zv.logger.error(`Invalid Sentry Dsn: ${w} missing`),!0;return!1}))return!1;if(!G.match(/^\d+$/))return zv.logger.error(`Invalid Sentry Dsn: Invalid projectId ${G}`),!1;if(!Rv2(Z))return zv.logger.error(`Invalid Sentry Dsn: Invalid protocol ${Z}`),!1;if(d&&isNaN(parseInt(d,10)))return zv.logger.error(`Invalid Sentry Dsn: Invalid port ${d}`),!1;return!0}function Ev2(I){let d=typeof I==="string"?_z1(I):Dz1(I);if(!d||!vv2(d))return;return d}Hz1.dsnFromString=_z1;Hz1.dsnToString=Uv2;Hz1.makeDsn=Ev2});var dt=Y((gz1)=>{Object.defineProperty(gz1,"__esModule",{value:!0});class Fz1 extends Error{constructor(I,d="warn"){super(I);this.message=I,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=d}}gz1.SentryError=Fz1});var cG=Y((qz1)=>{Object.defineProperty(qz1,"__esModule",{value:!0});var Pv2=se(),$v2=Zw(),CN=xG(),uv2=DC(),Jz1=Nv();function Tv2(I,d,G){if(!(d in I))return;let Z=I[d],C=G(Z);if(typeof C==="function")Qz1(C,Z);I[d]=C}function zz1(I,d,G){try{Object.defineProperty(I,d,{value:G,writable:!0,configurable:!0})}catch(Z){$v2.DEBUG_BUILD&&uv2.logger.log(`Failed to add non-enumerable property "${d}" to object`,I)}}function Qz1(I,d){try{let G=d.prototype||{};I.prototype=d.prototype=G,zz1(I,"__sentry_original__",d)}catch(G){}}function Ov2(I){return I.__sentry_original__}function mv2(I){return Object.keys(I).map((d)=>`${encodeURIComponent(d)}=${encodeURIComponent(I[d])}`).join("&")}function fz1(I){if(CN.isError(I))return{message:I.message,name:I.name,stack:I.stack,...Nz1(I)};else if(CN.isEvent(I)){let d={type:I.type,target:Kz1(I.target),currentTarget:Kz1(I.currentTarget),...Nz1(I)};if(typeof CustomEvent!=="undefined"&&CN.isInstanceOf(I,CustomEvent))d.detail=I.detail;return d}else return I}function Kz1(I){try{return CN.isElement(I)?Pv2.htmlTreeAsString(I):Object.prototype.toString.call(I)}catch(d){return""}}function Nz1(I){if(typeof I==="object"&&I!==null){let d={};for(let G in I)if(Object.prototype.hasOwnProperty.call(I,G))d[G]=I[G];return d}else return{}}function lv2(I,d=40){let G=Object.keys(fz1(I));if(G.sort(),!G.length)return"[object has no keys]";if(G[0].length>=d)return Jz1.truncate(G[0],d);for(let Z=G.length;Z>0;Z--){let C=G.slice(0,Z).join(", ");if(C.length>d)continue;if(Z===G.length)return C;return Jz1.truncate(C,d)}return""}function bv2(I){return Gt(I,new Map)}function Gt(I,d){if(hv2(I)){let G=d.get(I);if(G!==void 0)return G;let Z={};d.set(I,Z);for(let C of Object.keys(I))if(typeof I[C]!=="undefined")Z[C]=Gt(I[C],d);return Z}if(Array.isArray(I)){let G=d.get(I);if(G!==void 0)return G;let Z=[];return d.set(I,Z),I.forEach((C)=>{Z.push(Gt(C,d))}),Z}return I}function hv2(I){if(!CN.isPlainObject(I))return!1;try{let d=Object.getPrototypeOf(I).constructor.name;return!d||d==="Object"}catch(d){return!0}}function jv2(I){let d;switch(!0){case(I===void 0||I===null):d=new String(I);break;case(typeof I==="symbol"||typeof I==="bigint"):d=Object(I);break;case CN.isPrimitive(I):d=new I.constructor(I);break;default:d=I;break}return d}qz1.addNonEnumerableProperty=zz1;qz1.convertToPlainObject=fz1;qz1.dropUndefinedKeys=bv2;qz1.extractExceptionKeysForMessage=lv2;qz1.fill=Tv2;qz1.getOriginalFunction=Ov2;qz1.markFunctionWrapped=Qz1;qz1.objectify=jv2;qz1.urlEncode=mv2});var ZO=Y((Uz1)=>{Object.defineProperty(Uz1,"__esModule",{value:!0});function Rz1(I,d=!1){return!(d||I&&!I.startsWith("/")&&!I.match(/^[A-Z]:/)&&!I.startsWith(".")&&!I.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&I!==void 0&&!I.includes("node_modules/")}function ov2(I){let d=/^\s*[-]{4,}$/,G=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/;return(Z)=>{let C=Z.match(G);if(C){let W,w,B,A,V;if(C[1]){B=C[1];let F=B.lastIndexOf(".");if(B[F-1]===".")F--;if(F>0){W=B.slice(0,F),w=B.slice(F+1);let g=W.indexOf(".Module");if(g>0)B=B.slice(g+1),W=W.slice(0,g)}A=void 0}if(w)A=W,V=w;if(w==="")V=void 0,B=void 0;if(B===void 0)V=V||"",B=A?`${A}.${V}`:V;let X=C[2]&&C[2].startsWith("file://")?C[2].slice(7):C[2],_=C[5]==="native";if(X&&X.match(/\/[A-Z]:/))X=X.slice(1);if(!X&&C[5]&&!_)X=C[5];return{filename:X,module:I?I(X):void 0,function:B,lineno:parseInt(C[3],10)||void 0,colno:parseInt(C[4],10)||void 0,in_app:Rz1(X,_)}}if(Z.match(d))return{filename:Z};return}}Uz1.filenameIsInApp=Rz1;Uz1.node=ov2});var CO=Y((Pz1)=>{Object.defineProperty(Pz1,"__esModule",{value:!0});var Mz1=ZO(),Sz1=50,vz1=/\(error: (.*)\)/,Ez1=/captureMessage|captureException/;function Lz1(...I){let d=I.sort((G,Z)=>G[0]-Z[0]).map((G)=>G[1]);return(G,Z=0)=>{let C=[],W=G.split(` +`);for(let w=Z;w1024)continue;let A=vz1.test(B)?B.replace(vz1,"$1"):B;if(A.match(/\S*Error: /))continue;for(let V of d){let X=V(A);if(X){C.push(X);break}}if(C.length>=Sz1)break}return yz1(C)}}function IE2(I){if(Array.isArray(I))return Lz1(...I);return I}function yz1(I){if(!I.length)return[];let d=Array.from(I);if(/sentryWrapped/.test(d[d.length-1].function||""))d.pop();if(d.reverse(),Ez1.test(d[d.length-1].function||"")){if(d.pop(),Ez1.test(d[d.length-1].function||""))d.pop()}return d.slice(0,Sz1).map((G)=>({...G,filename:G.filename||d[d.length-1].filename,function:G.function||"?"}))}var Zt="";function dE2(I){try{if(!I||typeof I!=="function")return Zt;return I.name||Zt}catch(d){return Zt}}function GE2(I){return[90,Mz1.node(I)]}Pz1.filenameIsInApp=Mz1.filenameIsInApp;Pz1.createStackParser=Lz1;Pz1.getFunctionName=dE2;Pz1.nodeStackLineParser=GE2;Pz1.stackParserFromStackParserOptions=IE2;Pz1.stripSentryFramesAndReverse=yz1});var zA=Y((uz1)=>{Object.defineProperty(uz1,"__esModule",{value:!0});var VE2=Zw(),XE2=DC(),YE2=CO(),WN={},$z1={};function _E2(I,d){WN[I]=WN[I]||[],WN[I].push(d)}function DE2(){Object.keys(WN).forEach((I)=>{WN[I]=void 0})}function HE2(I,d){if(!$z1[I])d(),$z1[I]=!0}function FE2(I,d){let G=I&&WN[I];if(!G)return;for(let Z of G)try{Z(d)}catch(C){VE2.DEBUG_BUILD&&XE2.logger.error(`Error while triggering instrumentation handler. +Type: ${I} +Name: ${YE2.getFunctionName(Z)} +Error:`,C)}}uz1.addHandler=_E2;uz1.maybeInstrument=HE2;uz1.resetInstrumentationHandlers=DE2;uz1.triggerHandlers=FE2});var wt=Y((Tz1)=>{Object.defineProperty(Tz1,"__esModule",{value:!0});var Ct=DC(),zE2=cG(),WO=K7(),Wt=zA();function QE2(I){Wt.addHandler("console",I),Wt.maybeInstrument("console",fE2)}function fE2(){if(!("console"in WO.GLOBAL_OBJ))return;Ct.CONSOLE_LEVELS.forEach(function(I){if(!(I in WO.GLOBAL_OBJ.console))return;zE2.fill(WO.GLOBAL_OBJ.console,I,function(d){return Ct.originalConsoleMethods[I]=d,function(...G){let Z={args:G,level:I};Wt.triggerHandlers("console",Z);let C=Ct.originalConsoleMethods[I];C&&C.apply(WO.GLOBAL_OBJ.console,G)}})})}Tz1.addConsoleInstrumentationHandler=QE2});var Qv=Y((mz1)=>{Object.defineProperty(mz1,"__esModule",{value:!0});var RE2=cG(),Bt=Nv(),UE2=K7();function vE2(){let I=UE2.GLOBAL_OBJ,d=I.crypto||I.msCrypto,G=()=>Math.random()*16;try{if(d&&d.randomUUID)return d.randomUUID().replace(/-/g,"");if(d&&d.getRandomValues)G=()=>{let Z=new Uint8Array(1);return d.getRandomValues(Z),Z[0]}}catch(Z){}return([1e7]+1000+4000+8000+100000000000).replace(/[018]/g,(Z)=>(Z^(G()&15)>>Z/4).toString(16))}function Oz1(I){return I.exception&&I.exception.values?I.exception.values[0]:void 0}function EE2(I){let{message:d,event_id:G}=I;if(d)return d;let Z=Oz1(I);if(Z){if(Z.type&&Z.value)return`${Z.type}: ${Z.value}`;return Z.type||Z.value||G||""}return G||""}function ME2(I,d,G){let Z=I.exception=I.exception||{},C=Z.values=Z.values||[],W=C[0]=C[0]||{};if(!W.value)W.value=d||"";if(!W.type)W.type=G||"Error"}function SE2(I,d){let G=Oz1(I);if(!G)return;let Z={type:"generic",handled:!0},C=G.mechanism;if(G.mechanism={...Z,...C,...d},d&&"data"in d){let W={...C&&C.data,...d.data};G.mechanism.data=W}}var LE2=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;function yE2(I){let d=I.match(LE2)||[],G=parseInt(d[1],10),Z=parseInt(d[2],10),C=parseInt(d[3],10);return{buildmetadata:d[5],major:isNaN(G)?void 0:G,minor:isNaN(Z)?void 0:Z,patch:isNaN(C)?void 0:C,prerelease:d[4]}}function PE2(I,d,G=5){if(d.lineno===void 0)return;let Z=I.length,C=Math.max(Math.min(Z-1,d.lineno-1),0);d.pre_context=I.slice(Math.max(0,C-G),C).map((W)=>Bt.snipLine(W,0)),d.context_line=Bt.snipLine(I[Math.min(Z-1,C)],d.colno||0),d.post_context=I.slice(Math.min(C+1,Z),C+1+G).map((W)=>Bt.snipLine(W,0))}function $E2(I){if(I&&I.__sentry_captured__)return!0;try{RE2.addNonEnumerableProperty(I,"__sentry_captured__",!0)}catch(d){}return!1}function uE2(I){return Array.isArray(I)?I:[I]}mz1.addContextToFrame=PE2;mz1.addExceptionMechanism=SE2;mz1.addExceptionTypeValue=ME2;mz1.arrayify=uE2;mz1.checkOrSetAlreadyCaught=$E2;mz1.getEventDescription=EE2;mz1.parseSemver=yE2;mz1.uuid4=vE2});var Yt=Y((jz1)=>{Object.defineProperty(jz1,"__esModule",{value:!0});var xE2=Qv(),wO=cG(),cE2=K7(),At=zA(),wN=cE2.GLOBAL_OBJ,pE2=1000,lz1,Vt,Xt;function iE2(I){At.addHandler("dom",I),At.maybeInstrument("dom",hz1)}function hz1(){if(!wN.document)return;let I=At.triggerHandlers.bind(null,"dom"),d=bz1(I,!0);wN.document.addEventListener("click",d,!1),wN.document.addEventListener("keypress",d,!1),["EventTarget","Node"].forEach((G)=>{let Z=wN[G]&&wN[G].prototype;if(!Z||!Z.hasOwnProperty||!Z.hasOwnProperty("addEventListener"))return;wO.fill(Z,"addEventListener",function(C){return function(W,w,B){if(W==="click"||W=="keypress")try{let A=this,V=A.__sentry_instrumentation_handlers__=A.__sentry_instrumentation_handlers__||{},X=V[W]=V[W]||{refCount:0};if(!X.handler){let _=bz1(I);X.handler=_,C.call(this,W,_,B)}X.refCount++}catch(A){}return C.call(this,W,w,B)}}),wO.fill(Z,"removeEventListener",function(C){return function(W,w,B){if(W==="click"||W=="keypress")try{let A=this,V=A.__sentry_instrumentation_handlers__||{},X=V[W];if(X){if(X.refCount--,X.refCount<=0)C.call(this,W,X.handler,B),X.handler=void 0,delete V[W];if(Object.keys(V).length===0)delete A.__sentry_instrumentation_handlers__}}catch(A){}return C.call(this,W,w,B)}})})}function nE2(I){if(I.type!==Vt)return!1;try{if(!I.target||I.target._sentryId!==Xt)return!1}catch(d){}return!0}function rE2(I,d){if(I!=="keypress")return!1;if(!d||!d.tagName)return!0;if(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable)return!1;return!0}function bz1(I,d=!1){return(G)=>{if(!G||G._sentryCaptured)return;let Z=aE2(G);if(rE2(G.type,Z))return;if(wO.addNonEnumerableProperty(G,"_sentryCaptured",!0),Z&&!Z._sentryId)wO.addNonEnumerableProperty(Z,"_sentryId",xE2.uuid4());let C=G.type==="keypress"?"input":G.type;if(!nE2(G))I({event:G,name:C,global:d}),Vt=G.type,Xt=Z?Z._sentryId:void 0;clearTimeout(lz1),lz1=wN.setTimeout(()=>{Xt=void 0,Vt=void 0},pE2)}}function aE2(I){try{return I.target}catch(d){return null}}jz1.addClickKeypressInstrumentationHandler=iE2;jz1.instrumentDOM=hz1});var Ht=Y((kz1)=>{Object.defineProperty(kz1,"__esModule",{value:!0});var eE2=Zw(),tE2=DC(),IM2=K7(),BO=IM2.getGlobalObject();function dM2(){try{return new ErrorEvent(""),!0}catch(I){return!1}}function GM2(){try{return new DOMError(""),!0}catch(I){return!1}}function ZM2(){try{return new DOMException(""),!0}catch(I){return!1}}function Dt(){if(!("fetch"in BO))return!1;try{return new Request("http://www.example.com"),!0}catch(I){return!1}}function _t(I){return I&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(I.toString())}function CM2(){if(typeof EdgeRuntime==="string")return!0;if(!Dt())return!1;if(_t(BO.fetch))return!0;let I=!1,d=BO.document;if(d&&typeof d.createElement==="function")try{let G=d.createElement("iframe");if(G.hidden=!0,d.head.appendChild(G),G.contentWindow&&G.contentWindow.fetch)I=_t(G.contentWindow.fetch);d.head.removeChild(G)}catch(G){eE2.DEBUG_BUILD&&tE2.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",G)}return I}function WM2(){return"ReportingObserver"in BO}function wM2(){if(!Dt())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch(I){return!1}}kz1.isNativeFetch=_t;kz1.supportsDOMError=GM2;kz1.supportsDOMException=ZM2;kz1.supportsErrorEvent=dM2;kz1.supportsFetch=Dt;kz1.supportsNativeFetch=CM2;kz1.supportsReferrerPolicy=wM2;kz1.supportsReportingObserver=WM2});var gt=Y((iz1)=>{Object.defineProperty(iz1,"__esModule",{value:!0});var FM2=cG(),gM2=Ht(),xz1=K7(),fv=zA();function JM2(I){fv.addHandler("fetch",I),fv.maybeInstrument("fetch",KM2)}function KM2(){if(!gM2.supportsNativeFetch())return;FM2.fill(xz1.GLOBAL_OBJ,"fetch",function(I){return function(...d){let{method:G,url:Z}=pz1(d),C={args:d,fetchData:{method:G,url:Z},startTimestamp:Date.now()};return fv.triggerHandlers("fetch",{...C}),I.apply(xz1.GLOBAL_OBJ,d).then((W)=>{let w={...C,endTimestamp:Date.now(),response:W};return fv.triggerHandlers("fetch",w),W},(W)=>{let w={...C,endTimestamp:Date.now(),error:W};throw fv.triggerHandlers("fetch",w),W})}})}function Ft(I,d){return!!I&&typeof I==="object"&&!!I[d]}function cz1(I){if(typeof I==="string")return I;if(!I)return"";if(Ft(I,"url"))return I.url;if(I.toString)return I.toString();return""}function pz1(I){if(I.length===0)return{method:"GET",url:""};if(I.length===2){let[G,Z]=I;return{url:cz1(G),method:Ft(Z,"method")?String(Z.method).toUpperCase():"GET"}}let d=I[0];return{url:cz1(d),method:Ft(d,"method")?String(d.method).toUpperCase():"GET"}}iz1.addFetchInstrumentationHandler=JM2;iz1.parseFetchArgs=pz1});var Nt=Y((nz1)=>{Object.defineProperty(nz1,"__esModule",{value:!0});var Jt=K7(),Kt=zA(),AO=null;function QM2(I){Kt.addHandler("error",I),Kt.maybeInstrument("error",fM2)}function fM2(){AO=Jt.GLOBAL_OBJ.onerror,Jt.GLOBAL_OBJ.onerror=function(I,d,G,Z,C){let W={column:Z,error:C,line:G,msg:I,url:d};if(Kt.triggerHandlers("error",W),AO&&!AO.__SENTRY_LOADER__)return AO.apply(this,arguments);return!1},Jt.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__=!0}nz1.addGlobalErrorInstrumentationHandler=QM2});var ft=Y((rz1)=>{Object.defineProperty(rz1,"__esModule",{value:!0});var zt=K7(),Qt=zA(),VO=null;function RM2(I){Qt.addHandler("unhandledrejection",I),Qt.maybeInstrument("unhandledrejection",UM2)}function UM2(){VO=zt.GLOBAL_OBJ.onunhandledrejection,zt.GLOBAL_OBJ.onunhandledrejection=function(I){let d=I;if(Qt.triggerHandlers("unhandledrejection",d),VO&&!VO.__SENTRY_LOADER__)return VO.apply(this,arguments);return!0},zt.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}rz1.addGlobalUnhandledRejectionInstrumentationHandler=RM2});var qt=Y((az1)=>{Object.defineProperty(az1,"__esModule",{value:!0});var EM2=K7(),XO=EM2.getGlobalObject();function MM2(){let I=XO.chrome,d=I&&I.app&&I.app.runtime,G="history"in XO&&!!XO.history.pushState&&!!XO.history.replaceState;return!d&&G}az1.supportsHistory=MM2});var Rt=Y((oz1)=>{Object.defineProperty(oz1,"__esModule",{value:!0});var sz1=cG();Zw();DC();var LM2=K7(),yM2=qt(),_O=zA(),qv=LM2.GLOBAL_OBJ,YO;function PM2(I){_O.addHandler("history",I),_O.maybeInstrument("history",$M2)}function $M2(){if(!yM2.supportsHistory())return;let I=qv.onpopstate;qv.onpopstate=function(...G){let Z=qv.location.href,C=YO;YO=Z;let W={from:C,to:Z};if(_O.triggerHandlers("history",W),I)try{return I.apply(this,G)}catch(w){}};function d(G){return function(...Z){let C=Z.length>2?Z[2]:void 0;if(C){let W=YO,w=String(C);YO=w;let B={from:W,to:w};_O.triggerHandlers("history",B)}return G.apply(this,Z)}}sz1.fill(qv.history,"pushState",d),sz1.fill(qv.history,"replaceState",d)}oz1.addHistoryInstrumentationHandler=PM2});var Ut=Y((tz1)=>{Object.defineProperty(tz1,"__esModule",{value:!0});var HO=xG(),DO=cG(),TM2=K7(),FO=zA(),OM2=TM2.GLOBAL_OBJ,Rv="__sentry_xhr_v3__";function mM2(I){FO.addHandler("xhr",I),FO.maybeInstrument("xhr",ez1)}function ez1(){if(!OM2.XMLHttpRequest)return;let I=XMLHttpRequest.prototype;DO.fill(I,"open",function(d){return function(...G){let Z=Date.now(),C=HO.isString(G[0])?G[0].toUpperCase():void 0,W=lM2(G[1]);if(!C||!W)return d.apply(this,G);if(this[Rv]={method:C,url:W,request_headers:{}},C==="POST"&&W.match(/sentry_key/))this.__sentry_own_request__=!0;let w=()=>{let B=this[Rv];if(!B)return;if(this.readyState===4){try{B.status_code=this.status}catch(V){}let A={args:[C,W],endTimestamp:Date.now(),startTimestamp:Z,xhr:this};FO.triggerHandlers("xhr",A)}};if("onreadystatechange"in this&&typeof this.onreadystatechange==="function")DO.fill(this,"onreadystatechange",function(B){return function(...A){return w(),B.apply(this,A)}});else this.addEventListener("readystatechange",w);return DO.fill(this,"setRequestHeader",function(B){return function(...A){let[V,X]=A,_=this[Rv];if(_&&HO.isString(V)&&HO.isString(X))_.request_headers[V.toLowerCase()]=X;return B.apply(this,A)}}),d.apply(this,G)}}),DO.fill(I,"send",function(d){return function(...G){let Z=this[Rv];if(!Z)return d.apply(this,G);if(G[0]!==void 0)Z.body=G[0];let C={args:[Z.method,Z.url],startTimestamp:Date.now(),xhr:this};return FO.triggerHandlers("xhr",C),d.apply(this,G)}})}function lM2(I){if(HO.isString(I))return I;try{return I.toString()}catch(d){}return}tz1.SENTRY_XHR_DATA_KEY=Rv;tz1.addXhrInstrumentationHandler=mM2;tz1.instrumentXHR=ez1});var BQ1=Y((wQ1)=>{Object.defineProperty(wQ1,"__esModule",{value:!0});var kM2=Zw(),xM2=DC(),IQ1=wt(),dQ1=Yt(),GQ1=gt(),ZQ1=Nt(),CQ1=ft(),WQ1=Rt(),vt=Ut();function cM2(I,d){switch(I){case"console":return IQ1.addConsoleInstrumentationHandler(d);case"dom":return dQ1.addClickKeypressInstrumentationHandler(d);case"xhr":return vt.addXhrInstrumentationHandler(d);case"fetch":return GQ1.addFetchInstrumentationHandler(d);case"history":return WQ1.addHistoryInstrumentationHandler(d);case"error":return ZQ1.addGlobalErrorInstrumentationHandler(d);case"unhandledrejection":return CQ1.addGlobalUnhandledRejectionInstrumentationHandler(d);default:kM2.DEBUG_BUILD&&xM2.logger.warn("unknown instrumentation type:",I)}}wQ1.addConsoleInstrumentationHandler=IQ1.addConsoleInstrumentationHandler;wQ1.addClickKeypressInstrumentationHandler=dQ1.addClickKeypressInstrumentationHandler;wQ1.addFetchInstrumentationHandler=GQ1.addFetchInstrumentationHandler;wQ1.addGlobalErrorInstrumentationHandler=ZQ1.addGlobalErrorInstrumentationHandler;wQ1.addGlobalUnhandledRejectionInstrumentationHandler=CQ1.addGlobalUnhandledRejectionInstrumentationHandler;wQ1.addHistoryInstrumentationHandler=WQ1.addHistoryInstrumentationHandler;wQ1.SENTRY_XHR_DATA_KEY=vt.SENTRY_XHR_DATA_KEY;wQ1.addXhrInstrumentationHandler=vt.addXhrInstrumentationHandler;wQ1.addInstrumentationHandler=cM2});var Et=Y((AQ1)=>{Object.defineProperty(AQ1,"__esModule",{value:!0});function IS2(){return typeof __SENTRY_BROWSER_BUNDLE__!=="undefined"&&!!__SENTRY_BROWSER_BUNDLE__}function dS2(){return"npm"}AQ1.getSDKSource=dS2;AQ1.isBrowserBundle=IS2});var Mt=Y((VQ1,JO)=>{Object.defineProperty(VQ1,"__esModule",{value:!0});var CS2=Et();function WS2(){return!CS2.isBrowserBundle()&&Object.prototype.toString.call(typeof process!=="undefined"?process:0)==="[object process]"}function gO(I,d){return I.require(d)}function wS2(I){let d;try{d=gO(JO,I)}catch(G){}try{let{cwd:G}=gO(JO,"process");d=gO(JO,`${G()}/node_modules/${I}`)}catch(G){}return d}VQ1.dynamicRequire=gO;VQ1.isNodeEnv=WS2;VQ1.loadModule=wS2});var _Q1=Y((YQ1)=>{Object.defineProperty(YQ1,"__esModule",{value:!0});var XS2=Mt(),XQ1=K7();function YS2(){return typeof window!=="undefined"&&(!XS2.isNodeEnv()||_S2())}function _S2(){return XQ1.GLOBAL_OBJ.process!==void 0&&XQ1.GLOBAL_OBJ.process.type==="renderer"}YQ1.isBrowser=YS2});var St=Y((DQ1)=>{Object.defineProperty(DQ1,"__esModule",{value:!0});function HS2(){let I=typeof WeakSet==="function",d=I?new WeakSet:[];function G(C){if(I){if(d.has(C))return!0;return d.add(C),!1}for(let W=0;W{Object.defineProperty(gQ1,"__esModule",{value:!0});var Lt=xG(),gS2=St(),JS2=cG(),KS2=CO();function HQ1(I,d=100,G=1/0){try{return KO("",I,d,G)}catch(Z){return{ERROR:`**non-serializable** (${Z})`}}}function FQ1(I,d=3,G=102400){let Z=HQ1(I,d);if(fS2(Z)>G)return FQ1(I,d-1,G);return Z}function KO(I,d,G=1/0,Z=1/0,C=gS2.memoBuilder()){let[W,w]=C;if(d==null||["number","boolean","string"].includes(typeof d)&&!Lt.isNaN(d))return d;let B=NS2(I,d);if(!B.startsWith("[object "))return B;if(d.__sentry_skip_normalization__)return d;let A=typeof d.__sentry_override_normalization_depth__==="number"?d.__sentry_override_normalization_depth__:G;if(A===0)return B.replace("object ","");if(W(d))return"[Circular ~]";let V=d;if(V&&typeof V.toJSON==="function")try{let g=V.toJSON();return KO("",g,A-1,Z,C)}catch(g){}let X=Array.isArray(d)?[]:{},_=0,F=JS2.convertToPlainObject(d);for(let g in F){if(!Object.prototype.hasOwnProperty.call(F,g))continue;if(_>=Z){X[g]="[MaxProperties ~]";break}let J=F[g];X[g]=KO(g,J,A-1,Z,C),_++}return w(d),X}function NS2(I,d){try{if(I==="domain"&&d&&typeof d==="object"&&d._events)return"[Domain]";if(I==="domainEmitter")return"[DomainEmitter]";if(typeof global!=="undefined"&&d===global)return"[Global]";if(typeof window!=="undefined"&&d===window)return"[Window]";if(typeof document!=="undefined"&&d===document)return"[Document]";if(Lt.isVueViewModel(d))return"[VueViewModel]";if(Lt.isSyntheticEvent(d))return"[SyntheticEvent]";if(typeof d==="number"&&d!==d)return"[NaN]";if(typeof d==="function")return`[Function: ${KS2.getFunctionName(d)}]`;if(typeof d==="symbol")return`[${String(d)}]`;if(typeof d==="bigint")return`[BigInt: ${String(d)}]`;let G=zS2(d);if(/^HTML(\w*)Element$/.test(G))return`[HTMLElement: ${G}]`;return`[object ${G}]`}catch(G){return`**non-serializable** (${G})`}}function zS2(I){let d=Object.getPrototypeOf(I);return d?d.constructor.name:"null prototype"}function QS2(I){return~-encodeURI(I).split(/%..|./).length}function fS2(I){return QS2(JSON.stringify(I))}function qS2(I,d){let G=d.replace(/\\/g,"/").replace(/[|\\{}()[\]^$+*?.]/g,"\\$&"),Z=I;try{Z=decodeURI(I)}catch(C){}return Z.replace(/\\/g,"/").replace(/webpack:\/?/g,"").replace(new RegExp(`(file://)?/*${G}/*`,"ig"),"app:///")}gQ1.normalize=HQ1;gQ1.normalizeToSize=FQ1;gQ1.normalizeUrlToBase=qS2;gQ1.walk=KO});var qQ1=Y((fQ1)=>{Object.defineProperty(fQ1,"__esModule",{value:!0});function KQ1(I,d){let G=0;for(let Z=I.length-1;Z>=0;Z--){let C=I[Z];if(C===".")I.splice(Z,1);else if(C==="..")I.splice(Z,1),G++;else if(G)I.splice(Z,1),G--}if(d)for(;G--;G)I.unshift("..");return I}var MS2=/^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/;function NQ1(I){let d=I.length>1024?`${I.slice(-1024)}`:I,G=MS2.exec(d);return G?G.slice(1):[]}function yt(...I){let d="",G=!1;for(let Z=I.length-1;Z>=-1&&!G;Z--){let C=Z>=0?I[Z]:"/";if(!C)continue;d=`${C}/${d}`,G=C.charAt(0)==="/"}return d=KQ1(d.split("/").filter((Z)=>!!Z),!G).join("/"),(G?"/":"")+d||"."}function JQ1(I){let d=0;for(;d=0;G--)if(I[G]!=="")break;if(d>G)return[];return I.slice(d,G-d+1)}function SS2(I,d){I=yt(I).slice(1),d=yt(d).slice(1);let G=JQ1(I.split("/")),Z=JQ1(d.split("/")),C=Math.min(G.length,Z.length),W=C;for(let B=0;B!!C),!d).join("/");if(!Z&&!d)Z=".";if(Z&&G)Z+="/";return(d?"/":"")+Z}function QQ1(I){return I.charAt(0)==="/"}function LS2(...I){return zQ1(I.join("/"))}function yS2(I){let d=NQ1(I),G=d[0],Z=d[1];if(!G&&!Z)return".";if(Z)Z=Z.slice(0,Z.length-1);return G+Z}function PS2(I,d){let G=NQ1(I)[2];if(d&&G.slice(d.length*-1)===d)G=G.slice(0,G.length-d.length);return G}fQ1.basename=PS2;fQ1.dirname=yS2;fQ1.isAbsolute=QQ1;fQ1.join=LS2;fQ1.normalizePath=zQ1;fQ1.relative=SS2;fQ1.resolve=yt});var Pt=Y((RQ1)=>{Object.defineProperty(RQ1,"__esModule",{value:!0});var hS2=xG(),QA;(function(I){I[I.PENDING=0]="PENDING";let G=1;I[I.RESOLVED=G]="RESOLVED";let Z=2;I[I.REJECTED=Z]="REJECTED"})(QA||(QA={}));function jS2(I){return new Cw((d)=>{d(I)})}function kS2(I){return new Cw((d,G)=>{G(I)})}class Cw{constructor(I){Cw.prototype.__init.call(this),Cw.prototype.__init2.call(this),Cw.prototype.__init3.call(this),Cw.prototype.__init4.call(this),this._state=QA.PENDING,this._handlers=[];try{I(this._resolve,this._reject)}catch(d){this._reject(d)}}then(I,d){return new Cw((G,Z)=>{this._handlers.push([!1,(C)=>{if(!I)G(C);else try{G(I(C))}catch(W){Z(W)}},(C)=>{if(!d)Z(C);else try{G(d(C))}catch(W){Z(W)}}]),this._executeHandlers()})}catch(I){return this.then((d)=>d,I)}finally(I){return new Cw((d,G)=>{let Z,C;return this.then((W)=>{if(C=!1,Z=W,I)I()},(W)=>{if(C=!0,Z=W,I)I()}).then(()=>{if(C){G(Z);return}d(Z)})})}__init(){this._resolve=(I)=>{this._setResult(QA.RESOLVED,I)}}__init2(){this._reject=(I)=>{this._setResult(QA.REJECTED,I)}}__init3(){this._setResult=(I,d)=>{if(this._state!==QA.PENDING)return;if(hS2.isThenable(d)){d.then(this._resolve,this._reject);return}this._state=I,this._value=d,this._executeHandlers()}}__init4(){this._executeHandlers=()=>{if(this._state===QA.PENDING)return;let I=this._handlers.slice();this._handlers=[],I.forEach((d)=>{if(d[0])return;if(this._state===QA.RESOLVED)d[1](this._value);if(this._state===QA.REJECTED)d[2](this._value);d[0]=!0})}}}RQ1.SyncPromise=Cw;RQ1.rejectedSyncPromise=kS2;RQ1.resolvedSyncPromise=jS2});var vQ1=Y((UQ1)=>{Object.defineProperty(UQ1,"__esModule",{value:!0});var iS2=dt(),$t=Pt();function nS2(I){let d=[];function G(){return I===void 0||d.lengthZ(B)).then(null,()=>Z(B).then(null,()=>{})),B}function W(w){return new $t.SyncPromise((B,A)=>{let V=d.length;if(!V)return B(!0);let X=setTimeout(()=>{if(w&&w>0)B(!1)},w);d.forEach((_)=>{$t.resolvedSyncPromise(_).then(()=>{if(!--V)clearTimeout(X),B(!0)},A)})})}return{$:d,add:C,drain:W}}UQ1.makePromiseBuffer=nS2});var MQ1=Y((EQ1)=>{Object.defineProperty(EQ1,"__esModule",{value:!0});function aS2(I){let d={},G=0;while(G{Object.defineProperty(SQ1,"__esModule",{value:!0});function oS2(I){if(!I)return{};let d=I.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!d)return{};let G=d[6]||"",Z=d[8]||"";return{host:d[4],path:d[5],protocol:d[2],search:G,hash:Z,relative:d[5]+G+Z}}function eS2(I){return I.split(/[\?#]/,1)[0]}function tS2(I){return I.split(/\\?\//).filter((d)=>d.length>0&&d!==",").length}function IL2(I){let{protocol:d,host:G,path:Z}=I,C=G&&G.replace(/^.*@/,"[filtered]:[filtered]@").replace(/(:80)$/,"").replace(/(:443)$/,"")||"";return`${d?`${d}://`:""}${C}${Z}`}SQ1.getNumberOfUrlSegments=tS2;SQ1.getSanitizedUrlString=IL2;SQ1.parseUrl=oS2;SQ1.stripUrlQueryAndFragment=eS2});var TQ1=Y((uQ1)=>{Object.defineProperty(uQ1,"__esModule",{value:!0});var WL2=MQ1(),wL2=Zw(),LQ1=xG(),BL2=DC(),AL2=Uv(),VL2=ut(),XL2={ip:!1,request:!0,transaction:!0,user:!0},YL2=["cookies","data","headers","method","query_string","url"],yQ1=["id","username","email"];function _L2(I,d,G){if(!I)return;if(!I.metadata.source||I.metadata.source==="url"){let[Z,C]=NO(d,{path:!0,method:!0});I.updateName(Z),I.setMetadata({source:C})}if(I.setAttribute("url",d.originalUrl||d.url),d.baseUrl)I.setAttribute("baseUrl",d.baseUrl);I.setData("query",PQ1(d,G))}function NO(I,d={}){let G=I.method&&I.method.toUpperCase(),Z="",C="url";if(d.customRoute||I.route)Z=d.customRoute||`${I.baseUrl||""}${I.route&&I.route.path}`,C="route";else if(I.originalUrl||I.url)Z=VL2.stripUrlQueryAndFragment(I.originalUrl||I.url||"");let W="";if(d.method&&G)W+=G;if(d.method&&d.path)W+=" ";if(d.path&&Z)W+=Z;return[W,C]}function DL2(I,d){switch(d){case"path":return NO(I,{path:!0})[0];case"handler":return I.route&&I.route.stack&&I.route.stack[0]&&I.route.stack[0].name||"";case"methodPath":default:{let G=I._reconstructedRoute?I._reconstructedRoute:void 0;return NO(I,{path:!0,method:!0,customRoute:G})[0]}}}function HL2(I,d){let G={};return(Array.isArray(d)?d:yQ1).forEach((C)=>{if(I&&C in I)G[C]=I[C]}),G}function Tt(I,d){let{include:G=YL2,deps:Z}=d||{},C={},W=I.headers||{},w=I.method,B=W.host||I.hostname||I.host||"",A=I.protocol==="https"||I.socket&&I.socket.encrypted?"https":"http",V=I.originalUrl||I.url||"",X=V.startsWith(A)?V:`${A}://${B}${V}`;return G.forEach((_)=>{switch(_){case"headers":{if(C.headers=W,!G.includes("cookies"))delete C.headers.cookie;break}case"method":{C.method=w;break}case"url":{C.url=X;break}case"cookies":{C.cookies=I.cookies||W.cookie&&WL2.parseCookie(W.cookie)||{};break}case"query_string":{C.query_string=PQ1(I,Z);break}case"data":{if(w==="GET"||w==="HEAD")break;if(I.body!==void 0)C.data=LQ1.isString(I.body)?I.body:JSON.stringify(AL2.normalize(I.body));break}default:if({}.hasOwnProperty.call(I,_))C[_]=I[_]}}),C}function FL2(I,d,G){let Z={...XL2,...G&&G.include};if(Z.request){let C=Array.isArray(Z.request)?Tt(d,{include:Z.request,deps:G&&G.deps}):Tt(d,{deps:G&&G.deps});I.request={...I.request,...C}}if(Z.user){let C=d.user&&LQ1.isPlainObject(d.user)?HL2(d.user,Z.user):{};if(Object.keys(C).length)I.user={...I.user,...C}}if(Z.ip){let C=d.ip||d.socket&&d.socket.remoteAddress;if(C)I.user={...I.user,ip_address:C}}if(Z.transaction&&!I.transaction)I.transaction=DL2(d,Z.transaction);return I}function PQ1(I,d){let G=I.originalUrl||I.url||"";if(!G)return;if(G.startsWith("/"))G=`http://dogs.are.great${G}`;try{return I.query||typeof URL!=="undefined"&&new URL(G).search.slice(1)||d&&d.url&&d.url.parse(G).query||void 0}catch(Z){return}}function $Q1(I){let d={};try{I.forEach((G,Z)=>{if(typeof G==="string")d[Z]=G})}catch(G){wL2.DEBUG_BUILD&&BL2.logger.warn("Sentry failed extracting headers from a request object. If you see this, please file an issue.")}return d}function gL2(I){let d=$Q1(I.headers);return{method:I.method,url:I.url,headers:d}}uQ1.DEFAULT_USER_INCLUDES=yQ1;uQ1.addRequestDataToEvent=FL2;uQ1.addRequestDataToTransaction=_L2;uQ1.extractPathForTransaction=NO;uQ1.extractRequestData=Tt;uQ1.winterCGHeadersToDict=$Q1;uQ1.winterCGRequestToRequestData=gL2});var bQ1=Y((lQ1)=>{Object.defineProperty(lQ1,"__esModule",{value:!0});var OQ1=["fatal","error","warning","log","info","debug"];function RL2(I){return mQ1(I)}function mQ1(I){return I==="warn"?"warning":OQ1.includes(I)?I:"log"}lQ1.severityFromString=RL2;lQ1.severityLevelFromString=mQ1;lQ1.validSeverityLevels=OQ1});var Ot=Y((cQ1)=>{Object.defineProperty(cQ1,"__esModule",{value:!0});var hQ1=K7(),jQ1=1000;function kQ1(){return Date.now()/jQ1}function ML2(){let{performance:I}=hQ1.GLOBAL_OBJ;if(!I||!I.now)return kQ1;let d=Date.now()-I.now(),G=I.timeOrigin==null?d:I.timeOrigin;return()=>{return(G+I.now())/jQ1}}var xQ1=ML2(),SL2=xQ1;cQ1._browserPerformanceTimeOriginMode=void 0;var LL2=(()=>{let{performance:I}=hQ1.GLOBAL_OBJ;if(!I||!I.now){cQ1._browserPerformanceTimeOriginMode="none";return}let d=3600000,G=I.now(),Z=Date.now(),C=I.timeOrigin?Math.abs(I.timeOrigin+G-Z):d,W=C{Object.defineProperty(rQ1,"__esModule",{value:!0});var TL2=Zw(),OL2=xG(),mL2=DC(),lL2="baggage",mt="sentry-",iQ1=/^sentry-/,nQ1=8192;function bL2(I){if(!OL2.isString(I)&&!Array.isArray(I))return;let d={};if(Array.isArray(I))d=I.reduce((Z,C)=>{let W=pQ1(C);for(let w of Object.keys(W))Z[w]=W[w];return Z},{});else{if(!I)return;d=pQ1(I)}let G=Object.entries(d).reduce((Z,[C,W])=>{if(C.match(iQ1)){let w=C.slice(mt.length);Z[w]=W}return Z},{});if(Object.keys(G).length>0)return G;else return}function hL2(I){if(!I)return;let d=Object.entries(I).reduce((G,[Z,C])=>{if(C)G[`${mt}${Z}`]=C;return G},{});return jL2(d)}function pQ1(I){return I.split(",").map((d)=>d.split("=").map((G)=>decodeURIComponent(G.trim()))).reduce((d,[G,Z])=>{return d[G]=Z,d},{})}function jL2(I){if(Object.keys(I).length===0)return;return Object.entries(I).reduce((d,[G,Z],C)=>{let W=`${encodeURIComponent(G)}=${encodeURIComponent(Z)}`,w=C===0?W:`${d},${W}`;if(w.length>nQ1)return TL2.DEBUG_BUILD&&mL2.logger.warn(`Not adding key: ${G} with val: ${Z} to baggage header due to exceeding baggage size limits.`),d;else return w},"")}rQ1.BAGGAGE_HEADER_NAME=lL2;rQ1.MAX_BAGGAGE_STRING_LENGTH=nQ1;rQ1.SENTRY_BAGGAGE_KEY_PREFIX=mt;rQ1.SENTRY_BAGGAGE_KEY_PREFIX_REGEX=iQ1;rQ1.baggageHeaderToDynamicSamplingContext=bL2;rQ1.dynamicSamplingContextToSentryBaggageHeader=hL2});var eQ1=Y((oQ1)=>{Object.defineProperty(oQ1,"__esModule",{value:!0});var aQ1=lt(),pG=Qv(),sQ1=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function bt(I){if(!I)return;let d=I.match(sQ1);if(!d)return;let G;if(d[3]==="1")G=!0;else if(d[3]==="0")G=!1;return{traceId:d[1],parentSampled:G,parentSpanId:d[2]}}function rL2(I,d){let G=bt(I),Z=aQ1.baggageHeaderToDynamicSamplingContext(d),{traceId:C,parentSpanId:W,parentSampled:w}=G||{};if(!G)return{traceparentData:G,dynamicSamplingContext:void 0,propagationContext:{traceId:C||pG.uuid4(),spanId:pG.uuid4().substring(16)}};else return{traceparentData:G,dynamicSamplingContext:Z||{},propagationContext:{traceId:C||pG.uuid4(),parentSpanId:W||pG.uuid4().substring(16),spanId:pG.uuid4().substring(16),sampled:w,dsc:Z||{}}}}function aL2(I,d){let G=bt(I),Z=aQ1.baggageHeaderToDynamicSamplingContext(d),{traceId:C,parentSpanId:W,parentSampled:w}=G||{};if(!G)return{traceId:C||pG.uuid4(),spanId:pG.uuid4().substring(16)};else return{traceId:C||pG.uuid4(),parentSpanId:W||pG.uuid4().substring(16),spanId:pG.uuid4().substring(16),sampled:w,dsc:Z||{}}}function sL2(I=pG.uuid4(),d=pG.uuid4().substring(16),G){let Z="";if(G!==void 0)Z=G?"-1":"-0";return`${I}-${d}${Z}`}oQ1.TRACEPARENT_REGEXP=sQ1;oQ1.extractTraceparentData=bt;oQ1.generateSentryTraceHeader=sL2;oQ1.propagationContextFromHeaders=aL2;oQ1.tracingContextFromHeaders=rL2});var jt=Y((df1)=>{Object.defineProperty(df1,"__esModule",{value:!0});var Gy2=It(),Zy2=Uv(),tQ1=cG();function Cy2(I,d=[]){return[I,d]}function Wy2(I,d){let[G,Z]=I;return[G,[...Z,d]]}function If1(I,d){let G=I[1];for(let Z of G){let C=Z[0].type;if(d(Z,C))return!0}return!1}function wy2(I,d){return If1(I,(G,Z)=>d.includes(Z))}function ht(I,d){return(d||new TextEncoder).encode(I)}function By2(I,d){let[G,Z]=I,C=JSON.stringify(G);function W(w){if(typeof C==="string")C=typeof w==="string"?C+w:[ht(C,d),w];else C.push(typeof w==="string"?ht(w,d):w)}for(let w of Z){let[B,A]=w;if(W(` +${JSON.stringify(B)} +`),typeof A==="string"||A instanceof Uint8Array)W(A);else{let V;try{V=JSON.stringify(A)}catch(X){V=JSON.stringify(Zy2.normalize(A))}W(V)}}return typeof C==="string"?C:Ay2(C)}function Ay2(I){let d=I.reduce((C,W)=>C+W.length,0),G=new Uint8Array(d),Z=0;for(let C of I)G.set(C,Z),Z+=C.length;return G}function Vy2(I,d,G){let Z=typeof I==="string"?d.encode(I):I;function C(A){let V=Z.subarray(0,A);return Z=Z.subarray(A+1),V}function W(){let A=Z.indexOf(10);if(A<0)A=Z.length;return JSON.parse(G.decode(C(A)))}let w=W(),B=[];while(Z.length){let A=W(),V=typeof A.length==="number"?A.length:void 0;B.push([A,V?C(V):W()])}return[w,B]}function Xy2(I,d){let G=typeof I.data==="string"?ht(I.data,d):I.data;return[tQ1.dropUndefinedKeys({type:"attachment",length:G.length,filename:I.filename,content_type:I.contentType,attachment_type:I.attachmentType}),G]}var Yy2={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",span:"span",statsd:"metric_bucket"};function _y2(I){return Yy2[I]}function Dy2(I){if(!I||!I.sdk)return;let{name:d,version:G}=I.sdk;return{name:d,version:G}}function Hy2(I,d,G,Z){let C=I.sdkProcessingMetadata&&I.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:I.event_id,sent_at:new Date().toISOString(),...d&&{sdk:d},...!!G&&Z&&{dsn:Gy2.dsnToString(Z)},...C&&{trace:tQ1.dropUndefinedKeys({...C})}}}df1.addItemToEnvelope=Wy2;df1.createAttachmentEnvelopeItem=Xy2;df1.createEnvelope=Cy2;df1.createEventEnvelopeHeaders=Hy2;df1.envelopeContainsItemType=wy2;df1.envelopeItemTypeToDataCategory=_y2;df1.forEachEnvelopeItem=If1;df1.getSdkMetadataForEnvelopeHeader=Dy2;df1.parseEnvelope=Vy2;df1.serializeEnvelope=By2});var Zf1=Y((Gf1)=>{Object.defineProperty(Gf1,"__esModule",{value:!0});var Uy2=jt(),vy2=Ot();function Ey2(I,d,G){let Z=[{type:"client_report"},{timestamp:G||vy2.dateTimestampInSeconds(),discarded_events:I}];return Uy2.createEnvelope(d?{dsn:d}:{},[Z])}Gf1.createClientReportEnvelope=Ey2});var Af1=Y((Bf1)=>{Object.defineProperty(Bf1,"__esModule",{value:!0});var Cf1=60000;function Wf1(I,d=Date.now()){let G=parseInt(`${I}`,10);if(!isNaN(G))return G*1000;let Z=Date.parse(`${I}`);if(!isNaN(Z))return Z-d;return Cf1}function wf1(I,d){return I[d]||I.all||0}function Sy2(I,d,G=Date.now()){return wf1(I,d)>G}function Ly2(I,{statusCode:d,headers:G},Z=Date.now()){let C={...I},W=G&&G["x-sentry-rate-limits"],w=G&&G["retry-after"];if(W)for(let B of W.trim().split(",")){let[A,V,,,X]=B.split(":",5),_=parseInt(A,10),F=(!isNaN(_)?_:60)*1000;if(!V)C.all=Z+F;else for(let g of V.split(";"))if(g==="metric_bucket"){if(!X||X.split(";").includes("custom"))C[g]=Z+F}else C[g]=Z+F}else if(w)C.all=Z+Wf1(w,Z);else if(d===429)C.all=Z+60000;return C}Bf1.DEFAULT_RETRY_AFTER=Cf1;Bf1.disabledUntil=wf1;Bf1.isRateLimited=Sy2;Bf1.parseRetryAfterHeader=Wf1;Bf1.updateRateLimits=Ly2});var _f1=Y((Yf1)=>{Object.defineProperty(Yf1,"__esModule",{value:!0});function Vf1(I,d,G){let Z=d.match(/([a-z_]+)\.(.*)/i);if(Z===null)I[d]=G;else{let C=I[Z[1]];Vf1(C,Z[2],G)}}function Oy2(I,d,G={}){return Array.isArray(d)?Xf1(I,d,G):my2(I,d,G)}function Xf1(I,d,G){let Z=d.find((C)=>C.name===I.name);if(Z){for(let[C,W]of Object.entries(G))Vf1(Z,C,W);return d}return[...d,I]}function my2(I,d,G){return(C)=>{let W=d(C);if(I.allowExclusionByUser){if(!W.find((B)=>B.name===I.name))return W}return Xf1(I,W,G)}}Yf1.addOrUpdateIntegration=Oy2});var Hf1=Y((Df1)=>{Object.defineProperty(Df1,"__esModule",{value:!0});function by2(I){let d=[],G={};return{add(Z,C){while(d.length>=I){let W=d.shift();if(W!==void 0)delete G[W]}if(G[Z])this.delete(Z);d.push(Z),G[Z]=C},clear(){G={},d=[]},get(Z){return G[Z]},size(){return d.length},delete(Z){if(!G[Z])return!1;delete G[Z];for(let C=0;C{Object.defineProperty(Jf1,"__esModule",{value:!0});var kt=xG(),Ff1=Qv(),jy2=Uv(),ky2=cG();function xt(I,d){return I(d.stack||"",1)}function gf1(I,d){let G={type:d.name||d.constructor.name,value:d.message},Z=xt(I,d);if(Z.length)G.stacktrace={frames:Z};return G}function xy2(I){if("name"in I&&typeof I.name==="string"){let d=`'${I.name}' captured as exception`;if("message"in I&&typeof I.message==="string")d+=` with message '${I.message}'`;return d}else if("message"in I&&typeof I.message==="string")return I.message;else return`Object captured as exception with keys: ${ky2.extractExceptionKeysForMessage(I)}`}function cy2(I,d,G,Z){let C=typeof I==="function"?I().getClient():I,W=G,B=Z&&Z.data&&Z.data.mechanism||{handled:!0,type:"generic"},A;if(!kt.isError(G)){if(kt.isPlainObject(G)){let X=C&&C.getOptions().normalizeDepth;A={["__serialized__"]:jy2.normalizeToSize(G,X)};let _=xy2(G);W=Z&&Z.syntheticException||new Error(_),W.message=_}else W=Z&&Z.syntheticException||new Error(G),W.message=G;B.synthetic=!0}let V={exception:{values:[gf1(d,W)]}};if(A)V.extra=A;return Ff1.addExceptionTypeValue(V,void 0,void 0),Ff1.addExceptionMechanism(V,B),{...V,event_id:Z&&Z.event_id}}function py2(I,d,G="info",Z,C){let W={event_id:Z&&Z.event_id,level:G};if(C&&Z&&Z.syntheticException){let w=xt(I,Z.syntheticException);if(w.length)W.exception={values:[{value:d,stacktrace:{frames:w}}]}}if(kt.isParameterizedString(d)){let{__sentry_template_string__:w,__sentry_template_values__:B}=d;return W.logentry={message:w,params:B},W}return W.message=d,W}Jf1.eventFromMessage=py2;Jf1.eventFromUnknownInput=cy2;Jf1.exceptionFromError=gf1;Jf1.parseStackFrames=xt});var zf1=Y((Nf1)=>{Object.defineProperty(Nf1,"__esModule",{value:!0});var sy2=cG(),oy2=ZO();function ey2(I,d,G,Z){let C=I(),W=!1,w=!0;return setInterval(()=>{let B=C.getTimeMs();if(W===!1&&B>d+G){if(W=!0,w)Z()}if(B{C.reset()},enabled:(B)=>{w=B}}}function ty2(I,d,G){let Z=d?d.replace(/^file:\/\//,""):void 0,C=I.location.columnNumber?I.location.columnNumber+1:void 0,W=I.location.lineNumber?I.location.lineNumber+1:void 0;return sy2.dropUndefinedKeys({filename:Z,module:G(Z),function:I.functionName||"?",colno:C,lineno:W,in_app:Z?oy2.filenameIsInApp(Z):void 0})}Nf1.callFrameToStackFrame=ty2;Nf1.watchdogTimer=ey2});var qf1=Y((ff1)=>{Object.defineProperty(ff1,"__esModule",{value:!0});class Qf1{constructor(I){this._maxSize=I,this._cache=new Map}get size(){return this._cache.size}get(I){let d=this._cache.get(I);if(d===void 0)return;return this._cache.delete(I),this._cache.set(I,d),d}set(I,d){if(this._cache.size>=this._maxSize)this._cache.delete(this._cache.keys().next().value);this._cache.set(I,d)}remove(I){let d=this._cache.get(I);if(d)this._cache.delete(I);return d}clear(){this._cache.clear()}keys(){return Array.from(this._cache.keys())}values(){let I=[];return this._cache.forEach((d)=>I.push(d)),I}}ff1.LRUMap=Qf1});var ct=Y((Rf1)=>{Object.defineProperty(Rf1,"__esModule",{value:!0});function ZP2(I,d){return I!=null?I:d()}Rf1._nullishCoalesce=ZP2});var vf1=Y((Uf1)=>{Object.defineProperty(Uf1,"__esModule",{value:!0});var WP2=ct();async function wP2(I,d){return WP2._nullishCoalesce(I,d)}Uf1._asyncNullishCoalesce=wP2});var pt=Y((Ef1)=>{Object.defineProperty(Ef1,"__esModule",{value:!0});async function AP2(I){let d=void 0,G=I[0],Z=1;while(ZG.call(d,...w)),d=void 0}return G}Ef1._asyncOptionalChain=AP2});var Sf1=Y((Mf1)=>{Object.defineProperty(Mf1,"__esModule",{value:!0});var XP2=pt();async function YP2(I){let d=await XP2._asyncOptionalChain(I);return d==null?!0:d}Mf1._asyncOptionalChainDelete=YP2});var it=Y((Lf1)=>{Object.defineProperty(Lf1,"__esModule",{value:!0});function DP2(I){let d=void 0,G=I[0],Z=1;while(ZG.call(d,...w)),d=void 0}return G}Lf1._optionalChain=DP2});var Pf1=Y((yf1)=>{Object.defineProperty(yf1,"__esModule",{value:!0});var FP2=it();function gP2(I){let d=FP2._optionalChain(I);return d==null?!0:d}yf1._optionalChainDelete=gP2});var uf1=Y(($f1)=>{Object.defineProperty($f1,"__esModule",{value:!0});function KP2(I){return I.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}$f1.escapeStringForRegex=KP2});var V0=Y((et)=>{Object.defineProperty(et,"__esModule",{value:!0});var zP2=wz1(),zO=se(),nt=It(),QP2=dt(),rt=K7(),fP2=BQ1(),N7=xG(),qP2=_Q1(),QO=DC(),RP2=St(),xX=Qv(),at=Mt(),fO=Uv(),fA=cG(),YF=qQ1(),UP2=vQ1(),_F=TQ1(),st=bQ1(),Ev=CO(),Mv=Nv(),cX=Ht(),ot=Pt(),Sv=Ot(),Lv=eQ1(),Tf1=Et(),Ww=jt(),vP2=Zf1(),yv=Af1(),BN=lt(),qO=ut(),EP2=_f1(),MP2=Hf1(),RO=Kf1(),Of1=zf1(),SP2=qf1(),LP2=vf1(),yP2=pt(),PP2=Sf1(),$P2=ct(),uP2=it(),TP2=Pf1(),OP2=wt(),mP2=Yt(),mf1=Ut(),lP2=gt(),bP2=Rt(),hP2=Nt(),jP2=ft(),kP2=zA(),xP2=ZO(),cP2=uf1(),pP2=qt();et.applyAggregateErrorsToEvent=zP2.applyAggregateErrorsToEvent;et.getComponentName=zO.getComponentName;et.getDomElement=zO.getDomElement;et.getLocationHref=zO.getLocationHref;et.htmlTreeAsString=zO.htmlTreeAsString;et.dsnFromString=nt.dsnFromString;et.dsnToString=nt.dsnToString;et.makeDsn=nt.makeDsn;et.SentryError=QP2.SentryError;et.GLOBAL_OBJ=rt.GLOBAL_OBJ;et.getGlobalObject=rt.getGlobalObject;et.getGlobalSingleton=rt.getGlobalSingleton;et.addInstrumentationHandler=fP2.addInstrumentationHandler;et.isDOMError=N7.isDOMError;et.isDOMException=N7.isDOMException;et.isElement=N7.isElement;et.isError=N7.isError;et.isErrorEvent=N7.isErrorEvent;et.isEvent=N7.isEvent;et.isInstanceOf=N7.isInstanceOf;et.isNaN=N7.isNaN;et.isParameterizedString=N7.isParameterizedString;et.isPlainObject=N7.isPlainObject;et.isPrimitive=N7.isPrimitive;et.isRegExp=N7.isRegExp;et.isString=N7.isString;et.isSyntheticEvent=N7.isSyntheticEvent;et.isThenable=N7.isThenable;et.isVueViewModel=N7.isVueViewModel;et.isBrowser=qP2.isBrowser;et.CONSOLE_LEVELS=QO.CONSOLE_LEVELS;et.consoleSandbox=QO.consoleSandbox;et.logger=QO.logger;et.originalConsoleMethods=QO.originalConsoleMethods;et.memoBuilder=RP2.memoBuilder;et.addContextToFrame=xX.addContextToFrame;et.addExceptionMechanism=xX.addExceptionMechanism;et.addExceptionTypeValue=xX.addExceptionTypeValue;et.arrayify=xX.arrayify;et.checkOrSetAlreadyCaught=xX.checkOrSetAlreadyCaught;et.getEventDescription=xX.getEventDescription;et.parseSemver=xX.parseSemver;et.uuid4=xX.uuid4;et.dynamicRequire=at.dynamicRequire;et.isNodeEnv=at.isNodeEnv;et.loadModule=at.loadModule;et.normalize=fO.normalize;et.normalizeToSize=fO.normalizeToSize;et.normalizeUrlToBase=fO.normalizeUrlToBase;et.walk=fO.walk;et.addNonEnumerableProperty=fA.addNonEnumerableProperty;et.convertToPlainObject=fA.convertToPlainObject;et.dropUndefinedKeys=fA.dropUndefinedKeys;et.extractExceptionKeysForMessage=fA.extractExceptionKeysForMessage;et.fill=fA.fill;et.getOriginalFunction=fA.getOriginalFunction;et.markFunctionWrapped=fA.markFunctionWrapped;et.objectify=fA.objectify;et.urlEncode=fA.urlEncode;et.basename=YF.basename;et.dirname=YF.dirname;et.isAbsolute=YF.isAbsolute;et.join=YF.join;et.normalizePath=YF.normalizePath;et.relative=YF.relative;et.resolve=YF.resolve;et.makePromiseBuffer=UP2.makePromiseBuffer;et.DEFAULT_USER_INCLUDES=_F.DEFAULT_USER_INCLUDES;et.addRequestDataToEvent=_F.addRequestDataToEvent;et.addRequestDataToTransaction=_F.addRequestDataToTransaction;et.extractPathForTransaction=_F.extractPathForTransaction;et.extractRequestData=_F.extractRequestData;et.winterCGHeadersToDict=_F.winterCGHeadersToDict;et.winterCGRequestToRequestData=_F.winterCGRequestToRequestData;et.severityFromString=st.severityFromString;et.severityLevelFromString=st.severityLevelFromString;et.validSeverityLevels=st.validSeverityLevels;et.createStackParser=Ev.createStackParser;et.getFunctionName=Ev.getFunctionName;et.nodeStackLineParser=Ev.nodeStackLineParser;et.stackParserFromStackParserOptions=Ev.stackParserFromStackParserOptions;et.stripSentryFramesAndReverse=Ev.stripSentryFramesAndReverse;et.isMatchingPattern=Mv.isMatchingPattern;et.safeJoin=Mv.safeJoin;et.snipLine=Mv.snipLine;et.stringMatchesSomePattern=Mv.stringMatchesSomePattern;et.truncate=Mv.truncate;et.isNativeFetch=cX.isNativeFetch;et.supportsDOMError=cX.supportsDOMError;et.supportsDOMException=cX.supportsDOMException;et.supportsErrorEvent=cX.supportsErrorEvent;et.supportsFetch=cX.supportsFetch;et.supportsNativeFetch=cX.supportsNativeFetch;et.supportsReferrerPolicy=cX.supportsReferrerPolicy;et.supportsReportingObserver=cX.supportsReportingObserver;et.SyncPromise=ot.SyncPromise;et.rejectedSyncPromise=ot.rejectedSyncPromise;et.resolvedSyncPromise=ot.resolvedSyncPromise;Object.defineProperty(et,"_browserPerformanceTimeOriginMode",{enumerable:!0,get:()=>Sv._browserPerformanceTimeOriginMode});et.browserPerformanceTimeOrigin=Sv.browserPerformanceTimeOrigin;et.dateTimestampInSeconds=Sv.dateTimestampInSeconds;et.timestampInSeconds=Sv.timestampInSeconds;et.timestampWithMs=Sv.timestampWithMs;et.TRACEPARENT_REGEXP=Lv.TRACEPARENT_REGEXP;et.extractTraceparentData=Lv.extractTraceparentData;et.generateSentryTraceHeader=Lv.generateSentryTraceHeader;et.propagationContextFromHeaders=Lv.propagationContextFromHeaders;et.tracingContextFromHeaders=Lv.tracingContextFromHeaders;et.getSDKSource=Tf1.getSDKSource;et.isBrowserBundle=Tf1.isBrowserBundle;et.addItemToEnvelope=Ww.addItemToEnvelope;et.createAttachmentEnvelopeItem=Ww.createAttachmentEnvelopeItem;et.createEnvelope=Ww.createEnvelope;et.createEventEnvelopeHeaders=Ww.createEventEnvelopeHeaders;et.envelopeContainsItemType=Ww.envelopeContainsItemType;et.envelopeItemTypeToDataCategory=Ww.envelopeItemTypeToDataCategory;et.forEachEnvelopeItem=Ww.forEachEnvelopeItem;et.getSdkMetadataForEnvelopeHeader=Ww.getSdkMetadataForEnvelopeHeader;et.parseEnvelope=Ww.parseEnvelope;et.serializeEnvelope=Ww.serializeEnvelope;et.createClientReportEnvelope=vP2.createClientReportEnvelope;et.DEFAULT_RETRY_AFTER=yv.DEFAULT_RETRY_AFTER;et.disabledUntil=yv.disabledUntil;et.isRateLimited=yv.isRateLimited;et.parseRetryAfterHeader=yv.parseRetryAfterHeader;et.updateRateLimits=yv.updateRateLimits;et.BAGGAGE_HEADER_NAME=BN.BAGGAGE_HEADER_NAME;et.MAX_BAGGAGE_STRING_LENGTH=BN.MAX_BAGGAGE_STRING_LENGTH;et.SENTRY_BAGGAGE_KEY_PREFIX=BN.SENTRY_BAGGAGE_KEY_PREFIX;et.SENTRY_BAGGAGE_KEY_PREFIX_REGEX=BN.SENTRY_BAGGAGE_KEY_PREFIX_REGEX;et.baggageHeaderToDynamicSamplingContext=BN.baggageHeaderToDynamicSamplingContext;et.dynamicSamplingContextToSentryBaggageHeader=BN.dynamicSamplingContextToSentryBaggageHeader;et.getNumberOfUrlSegments=qO.getNumberOfUrlSegments;et.getSanitizedUrlString=qO.getSanitizedUrlString;et.parseUrl=qO.parseUrl;et.stripUrlQueryAndFragment=qO.stripUrlQueryAndFragment;et.addOrUpdateIntegration=EP2.addOrUpdateIntegration;et.makeFifoCache=MP2.makeFifoCache;et.eventFromMessage=RO.eventFromMessage;et.eventFromUnknownInput=RO.eventFromUnknownInput;et.exceptionFromError=RO.exceptionFromError;et.parseStackFrames=RO.parseStackFrames;et.callFrameToStackFrame=Of1.callFrameToStackFrame;et.watchdogTimer=Of1.watchdogTimer;et.LRUMap=SP2.LRUMap;et._asyncNullishCoalesce=LP2._asyncNullishCoalesce;et._asyncOptionalChain=yP2._asyncOptionalChain;et._asyncOptionalChainDelete=PP2._asyncOptionalChainDelete;et._nullishCoalesce=$P2._nullishCoalesce;et._optionalChain=uP2._optionalChain;et._optionalChainDelete=TP2._optionalChainDelete;et.addConsoleInstrumentationHandler=OP2.addConsoleInstrumentationHandler;et.addClickKeypressInstrumentationHandler=mP2.addClickKeypressInstrumentationHandler;et.SENTRY_XHR_DATA_KEY=mf1.SENTRY_XHR_DATA_KEY;et.addXhrInstrumentationHandler=mf1.addXhrInstrumentationHandler;et.addFetchInstrumentationHandler=lP2.addFetchInstrumentationHandler;et.addHistoryInstrumentationHandler=bP2.addHistoryInstrumentationHandler;et.addGlobalErrorInstrumentationHandler=hP2.addGlobalErrorInstrumentationHandler;et.addGlobalUnhandledRejectionInstrumentationHandler=jP2.addGlobalUnhandledRejectionInstrumentationHandler;et.resetInstrumentationHandlers=kP2.resetInstrumentationHandlers;et.filenameIsInApp=xP2.filenameIsInApp;et.escapeStringForRegex=cP2.escapeStringForRegex;et.supportsHistory=pP2.supportsHistory});var F6=Y((lf1)=>{Object.defineProperty(lf1,"__esModule",{value:!0});var iT2=typeof __SENTRY_DEBUG__==="undefined"||__SENTRY_DEBUG__;lf1.DEBUG_BUILD=iT2});var AN=Y((bf1)=>{Object.defineProperty(bf1,"__esModule",{value:!0});var rT2="production";bf1.DEFAULT_ENVIRONMENT=rT2});var Pv=Y((jf1)=>{Object.defineProperty(jf1,"__esModule",{value:!0});var UO=V0(),sT2=F6();function hf1(){return UO.getGlobalSingleton("globalEventProcessors",()=>[])}function oT2(I){hf1().push(I)}function tt(I,d,G,Z=0){return new UO.SyncPromise((C,W)=>{let w=I[Z];if(d===null||typeof w!=="function")C(d);else{let B=w({...d},G);if(sT2.DEBUG_BUILD&&w.id&&B===null&&UO.logger.log(`Event processor "${w.id}" dropped event`),UO.isThenable(B))B.then((A)=>tt(I,A,G,Z+1).then(C)).then(null,W);else tt(I,B,G,Z+1).then(C).then(null,W)}})}jf1.addGlobalEventProcessor=oT2;jf1.getGlobalEventProcessors=hf1;jf1.notifyEventProcessors=tt});var VN=Y((kf1)=>{Object.defineProperty(kf1,"__esModule",{value:!0});var $v=V0();function dO2(I){let d=$v.timestampInSeconds(),G={sid:$v.uuid4(),init:!0,timestamp:d,started:d,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>ZO2(G)};if(I)I11(G,I);return G}function I11(I,d={}){if(d.user){if(!I.ipAddress&&d.user.ip_address)I.ipAddress=d.user.ip_address;if(!I.did&&!d.did)I.did=d.user.id||d.user.email||d.user.username}if(I.timestamp=d.timestamp||$v.timestampInSeconds(),d.abnormal_mechanism)I.abnormal_mechanism=d.abnormal_mechanism;if(d.ignoreDuration)I.ignoreDuration=d.ignoreDuration;if(d.sid)I.sid=d.sid.length===32?d.sid:$v.uuid4();if(d.init!==void 0)I.init=d.init;if(!I.did&&d.did)I.did=`${d.did}`;if(typeof d.started==="number")I.started=d.started;if(I.ignoreDuration)I.duration=void 0;else if(typeof d.duration==="number")I.duration=d.duration;else{let G=I.timestamp-I.started;I.duration=G>=0?G:0}if(d.release)I.release=d.release;if(d.environment)I.environment=d.environment;if(!I.ipAddress&&d.ipAddress)I.ipAddress=d.ipAddress;if(!I.userAgent&&d.userAgent)I.userAgent=d.userAgent;if(typeof d.errors==="number")I.errors=d.errors;if(d.status)I.status=d.status}function GO2(I,d){let G={};if(d)G={status:d};else if(I.status==="ok")G={status:"exited"};I11(I,G)}function ZO2(I){return $v.dropUndefinedKeys({sid:`${I.sid}`,init:I.init,started:new Date(I.started*1000).toISOString(),timestamp:new Date(I.timestamp*1000).toISOString(),status:I.status,errors:I.errors,did:typeof I.did==="number"||typeof I.did==="string"?`${I.did}`:void 0,duration:I.duration,abnormal_mechanism:I.abnormal_mechanism,attrs:{release:I.release,environment:I.environment,ip_address:I.ipAddress,user_agent:I.userAgent}})}kf1.closeSession=GO2;kf1.makeSession=dO2;kf1.updateSession=I11});var kI=Y((nf1)=>{Object.defineProperty(nf1,"__esModule",{value:!0});var d11=V0(),BO2=0,cf1=1;function AO2(I){let{spanId:d,traceId:G}=I.spanContext(),{data:Z,op:C,parent_span_id:W,status:w,tags:B,origin:A}=pf1(I);return d11.dropUndefinedKeys({data:Z,op:C,parent_span_id:W,span_id:d,status:w,tags:B,trace_id:G,origin:A})}function VO2(I){let{traceId:d,spanId:G}=I.spanContext(),Z=if1(I);return d11.generateSentryTraceHeader(d,G,Z)}function XO2(I){if(typeof I==="number")return xf1(I);if(Array.isArray(I))return I[0]+I[1]/1e9;if(I instanceof Date)return xf1(I.getTime());return d11.timestampInSeconds()}function xf1(I){return I>9999999999?I/1000:I}function pf1(I){if(YO2(I))return I.getSpanJSON();if(typeof I.toJSON==="function")return I.toJSON();return{}}function YO2(I){return typeof I.getSpanJSON==="function"}function if1(I){let{traceFlags:d}=I.spanContext();return Boolean(d&cf1)}nf1.TRACE_FLAG_NONE=BO2;nf1.TRACE_FLAG_SAMPLED=cf1;nf1.spanIsSampled=if1;nf1.spanTimeInputToSeconds=XO2;nf1.spanToJSON=pf1;nf1.spanToTraceContext=AO2;nf1.spanToTraceHeader=VO2});var vO=Y((ef1)=>{Object.defineProperty(ef1,"__esModule",{value:!0});var jd=V0(),NO2=AN(),rf1=Pv(),Z11=MO(),G11=EO(),zO2=kI();function QO2(I,d,G,Z,C,W){let{normalizeDepth:w=3,normalizeMaxBreadth:B=1000}=I,A={...d,event_id:d.event_id||G.event_id||jd.uuid4(),timestamp:d.timestamp||jd.dateTimestampInSeconds()},V=G.integrations||I.integrations.map((Q)=>Q.name);if(fO2(A,I),qO2(A,V),d.type===void 0)sf1(A,I.stackParser);let X=UO2(Z,G.captureContext);if(G.mechanism)jd.addExceptionMechanism(A,G.mechanism);let _=C&&C.getEventProcessors?C.getEventProcessors():[],F=Z11.getGlobalScope().getScopeData();if(W){let Q=W.getScopeData();G11.mergeScopeData(F,Q)}if(X){let Q=X.getScopeData();G11.mergeScopeData(F,Q)}let g=[...G.attachments||[],...F.attachments];if(g.length)G.attachments=g;G11.applyScopeDataToEvent(A,F);let J=[..._,...rf1.getGlobalEventProcessors(),...F.eventProcessors];return rf1.notifyEventProcessors(J,A,G).then((Q)=>{if(Q)of1(Q);if(typeof w==="number"&&w>0)return RO2(Q,w,B);return Q})}function fO2(I,d){let{environment:G,release:Z,dist:C,maxValueLength:W=250}=d;if(!("environment"in I))I.environment="environment"in d?G:NO2.DEFAULT_ENVIRONMENT;if(I.release===void 0&&Z!==void 0)I.release=Z;if(I.dist===void 0&&C!==void 0)I.dist=C;if(I.message)I.message=jd.truncate(I.message,W);let w=I.exception&&I.exception.values&&I.exception.values[0];if(w&&w.value)w.value=jd.truncate(w.value,W);let B=I.request;if(B&&B.url)B.url=jd.truncate(B.url,W)}var af1=new WeakMap;function sf1(I,d){let G=jd.GLOBAL_OBJ._sentryDebugIds;if(!G)return;let Z,C=af1.get(d);if(C)Z=C;else Z=new Map,af1.set(d,Z);let W=Object.keys(G).reduce((w,B)=>{let A,V=Z.get(B);if(V)A=V;else A=d(B),Z.set(B,A);for(let X=A.length-1;X>=0;X--){let _=A[X];if(_.filename){w[_.filename]=G[B];break}}return w},{});try{I.exception.values.forEach((w)=>{w.stacktrace.frames.forEach((B)=>{if(B.filename)B.debug_id=W[B.filename]})})}catch(w){}}function of1(I){let d={};try{I.exception.values.forEach((Z)=>{Z.stacktrace.frames.forEach((C)=>{if(C.debug_id){if(C.abs_path)d[C.abs_path]=C.debug_id;else if(C.filename)d[C.filename]=C.debug_id;delete C.debug_id}})})}catch(Z){}if(Object.keys(d).length===0)return;I.debug_meta=I.debug_meta||{},I.debug_meta.images=I.debug_meta.images||[];let G=I.debug_meta.images;Object.keys(d).forEach((Z)=>{G.push({type:"sourcemap",code_file:Z,debug_id:d[Z]})})}function qO2(I,d){if(d.length>0)I.sdk=I.sdk||{},I.sdk.integrations=[...I.sdk.integrations||[],...d]}function RO2(I,d,G){if(!I)return null;let Z={...I,...I.breadcrumbs&&{breadcrumbs:I.breadcrumbs.map((C)=>({...C,...C.data&&{data:jd.normalize(C.data,d,G)}}))},...I.user&&{user:jd.normalize(I.user,d,G)},...I.contexts&&{contexts:jd.normalize(I.contexts,d,G)},...I.extra&&{extra:jd.normalize(I.extra,d,G)}};if(I.contexts&&I.contexts.trace&&Z.contexts){if(Z.contexts.trace=I.contexts.trace,I.contexts.trace.data)Z.contexts.trace.data=jd.normalize(I.contexts.trace.data,d,G)}if(I.spans)Z.spans=I.spans.map((C)=>{let W=zO2.spanToJSON(C).data;if(W)C.data=jd.normalize(W,d,G);return C});return Z}function UO2(I,d){if(!d)return I;let G=I?I.clone():new Z11.Scope;return G.update(d),G}function vO2(I){if(!I)return;if(EO2(I))return{captureContext:I};if(SO2(I))return{captureContext:I};return I}function EO2(I){return I instanceof Z11.Scope||typeof I==="function"}var MO2=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function SO2(I){return Object.keys(I).some((d)=>MO2.includes(d))}ef1.applyDebugIds=sf1;ef1.applyDebugMeta=of1;ef1.parseEventHintOrCaptureContext=vO2;ef1.prepareEvent=QO2});var iG=Y((dq1)=>{Object.defineProperty(dq1,"__esModule",{value:!0});var qA=V0(),uO2=AN(),SO=F6(),I6=ww(),C11=VN(),TO2=vO();function OO2(I,d){return I6.getCurrentHub().captureException(I,TO2.parseEventHintOrCaptureContext(d))}function mO2(I,d){let G=typeof d==="string"?d:void 0,Z=typeof d!=="string"?{captureContext:d}:void 0;return I6.getCurrentHub().captureMessage(I,G,Z)}function lO2(I,d){return I6.getCurrentHub().captureEvent(I,d)}function bO2(I){I6.getCurrentHub().configureScope(I)}function hO2(I,d){I6.getCurrentHub().addBreadcrumb(I,d)}function jO2(I,d){I6.getCurrentHub().setContext(I,d)}function kO2(I){I6.getCurrentHub().setExtras(I)}function xO2(I,d){I6.getCurrentHub().setExtra(I,d)}function cO2(I){I6.getCurrentHub().setTags(I)}function pO2(I,d){I6.getCurrentHub().setTag(I,d)}function iO2(I){I6.getCurrentHub().setUser(I)}function tf1(...I){let d=I6.getCurrentHub();if(I.length===2){let[G,Z]=I;if(!G)return d.withScope(Z);return d.withScope(()=>{return d.getStackTop().scope=G,Z(G)})}return d.withScope(I[0])}function nO2(I){return I6.runWithAsyncContext(()=>{return I(I6.getIsolationScope())})}function rO2(I,d){return tf1((G)=>{return G.setSpan(I),d(G)})}function aO2(I,d){return I6.getCurrentHub().startTransaction({...I},d)}function W11(I,d){let G=uv(),Z=DF();if(!Z)SO.DEBUG_BUILD&&qA.logger.warn("Cannot capture check-in. No client defined.");else if(!Z.captureCheckIn)SO.DEBUG_BUILD&&qA.logger.warn("Cannot capture check-in. Client does not support sending check-ins.");else return Z.captureCheckIn(I,d,G);return qA.uuid4()}function sO2(I,d,G){let Z=W11({monitorSlug:I,status:"in_progress"},G),C=qA.timestampInSeconds();function W(B){W11({monitorSlug:I,status:B,checkInId:Z,duration:qA.timestampInSeconds()-C})}let w;try{w=d()}catch(B){throw W("error"),B}if(qA.isThenable(w))Promise.resolve(w).then(()=>{W("ok")},()=>{W("error")});else W("ok");return w}async function oO2(I){let d=DF();if(d)return d.flush(I);return SO.DEBUG_BUILD&&qA.logger.warn("Cannot flush events. No client defined."),Promise.resolve(!1)}async function eO2(I){let d=DF();if(d)return d.close(I);return SO.DEBUG_BUILD&&qA.logger.warn("Cannot flush events and disable SDK. No client defined."),Promise.resolve(!1)}function tO2(){return I6.getCurrentHub().lastEventId()}function DF(){return I6.getCurrentHub().getClient()}function Im2(){return!!DF()}function uv(){return I6.getCurrentHub().getScope()}function dm2(I){let d=DF(),G=I6.getIsolationScope(),Z=uv(),{release:C,environment:W=uO2.DEFAULT_ENVIRONMENT}=d&&d.getOptions()||{},{userAgent:w}=qA.GLOBAL_OBJ.navigator||{},B=C11.makeSession({release:C,environment:W,user:Z.getUser()||G.getUser(),...w&&{userAgent:w},...I}),A=G.getSession();if(A&&A.status==="ok")C11.updateSession(A,{status:"exited"});return w11(),G.setSession(B),Z.setSession(B),B}function w11(){let I=I6.getIsolationScope(),d=uv(),G=d.getSession()||I.getSession();if(G)C11.closeSession(G);Iq1(),I.setSession(),d.setSession()}function Iq1(){let I=I6.getIsolationScope(),d=uv(),G=DF(),Z=d.getSession()||I.getSession();if(Z&&G&&G.captureSession)G.captureSession(Z)}function Gm2(I=!1){if(I){w11();return}Iq1()}dq1.addBreadcrumb=hO2;dq1.captureCheckIn=W11;dq1.captureEvent=lO2;dq1.captureException=OO2;dq1.captureMessage=mO2;dq1.captureSession=Gm2;dq1.close=eO2;dq1.configureScope=bO2;dq1.endSession=w11;dq1.flush=oO2;dq1.getClient=DF;dq1.getCurrentScope=uv;dq1.isInitialized=Im2;dq1.lastEventId=tO2;dq1.setContext=jO2;dq1.setExtra=xO2;dq1.setExtras=kO2;dq1.setTag=pO2;dq1.setTags=cO2;dq1.setUser=iO2;dq1.startSession=dm2;dq1.startTransaction=aO2;dq1.withActiveSpan=rO2;dq1.withIsolationScope=nO2;dq1.withMonitor=sO2;dq1.withScope=tf1});var XN=Y((Gq1)=>{Object.defineProperty(Gq1,"__esModule",{value:!0});function Sm2(I){return I.transaction}Gq1.getRootSpan=Sm2});var HF=Y((Wq1)=>{Object.defineProperty(Wq1,"__esModule",{value:!0});var ym2=V0(),Pm2=AN(),Zq1=iG(),$m2=XN(),B11=kI();function Cq1(I,d,G){let Z=d.getOptions(),{publicKey:C}=d.getDsn()||{},{segment:W}=G&&G.getUser()||{},w=ym2.dropUndefinedKeys({environment:Z.environment||Pm2.DEFAULT_ENVIRONMENT,release:Z.release,user_segment:W,public_key:C,trace_id:I});return d.emit&&d.emit("createDsc",w),w}function um2(I){let d=Zq1.getClient();if(!d)return{};let G=Cq1(B11.spanToJSON(I).trace_id||"",d,Zq1.getCurrentScope()),Z=$m2.getRootSpan(I);if(!Z)return G;let C=Z&&Z._frozenDynamicSamplingContext;if(C)return C;let{sampleRate:W,source:w}=Z.metadata;if(W!=null)G.sample_rate=`${W}`;let B=B11.spanToJSON(Z);if(w&&w!=="url")G.transaction=B.description;return G.sampled=String(B11.spanIsSampled(Z)),d.emit&&d.emit("createDsc",G),G}Wq1.getDynamicSamplingContextFromClient=Cq1;Wq1.getDynamicSamplingContextFromSpan=um2});var EO=Y((Bq1)=>{Object.defineProperty(Bq1,"__esModule",{value:!0});var Tv=V0(),mm2=HF(),lm2=XN(),wq1=kI();function bm2(I,d){let{fingerprint:G,span:Z,breadcrumbs:C,sdkProcessingMetadata:W}=d;if(jm2(I,d),Z)cm2(I,Z);pm2(I,G),km2(I,C),xm2(I,W)}function hm2(I,d){let{extra:G,tags:Z,user:C,contexts:W,level:w,sdkProcessingMetadata:B,breadcrumbs:A,fingerprint:V,eventProcessors:X,attachments:_,propagationContext:F,transactionName:g,span:J}=d;if(YN(I,"extra",G),YN(I,"tags",Z),YN(I,"user",C),YN(I,"contexts",W),YN(I,"sdkProcessingMetadata",B),w)I.level=w;if(g)I.transactionName=g;if(J)I.span=J;if(A.length)I.breadcrumbs=[...I.breadcrumbs,...A];if(V.length)I.fingerprint=[...I.fingerprint,...V];if(X.length)I.eventProcessors=[...I.eventProcessors,...X];if(_.length)I.attachments=[...I.attachments,..._];I.propagationContext={...I.propagationContext,...F}}function YN(I,d,G){if(G&&Object.keys(G).length){I[d]={...I[d]};for(let Z in G)if(Object.prototype.hasOwnProperty.call(G,Z))I[d][Z]=G[Z]}}function jm2(I,d){let{extra:G,tags:Z,user:C,contexts:W,level:w,transactionName:B}=d,A=Tv.dropUndefinedKeys(G);if(A&&Object.keys(A).length)I.extra={...A,...I.extra};let V=Tv.dropUndefinedKeys(Z);if(V&&Object.keys(V).length)I.tags={...V,...I.tags};let X=Tv.dropUndefinedKeys(C);if(X&&Object.keys(X).length)I.user={...X,...I.user};let _=Tv.dropUndefinedKeys(W);if(_&&Object.keys(_).length)I.contexts={..._,...I.contexts};if(w)I.level=w;if(B)I.transaction=B}function km2(I,d){let G=[...I.breadcrumbs||[],...d];I.breadcrumbs=G.length?G:void 0}function xm2(I,d){I.sdkProcessingMetadata={...I.sdkProcessingMetadata,...d}}function cm2(I,d){I.contexts={trace:wq1.spanToTraceContext(d),...I.contexts};let G=lm2.getRootSpan(d);if(G){I.sdkProcessingMetadata={dynamicSamplingContext:mm2.getDynamicSamplingContextFromSpan(d),...I.sdkProcessingMetadata};let Z=wq1.spanToJSON(G).description;if(Z)I.tags={transaction:Z,...I.tags}}}function pm2(I,d){if(I.fingerprint=I.fingerprint?Tv.arrayify(I.fingerprint):[],d)I.fingerprint=I.fingerprint.concat(d);if(I.fingerprint&&!I.fingerprint.length)delete I.fingerprint}Bq1.applyScopeDataToEvent=bm2;Bq1.mergeAndOverwriteScopeData=YN;Bq1.mergeScopeData=hm2});var MO=Y((Xq1)=>{Object.defineProperty(Xq1,"__esModule",{value:!0});var Bw=V0(),Aq1=Pv(),am2=VN(),sm2=EO(),om2=100,LO;class _N{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=Vq1()}static clone(I){return I?I.clone():new _N}clone(){let I=new _N;return I._breadcrumbs=[...this._breadcrumbs],I._tags={...this._tags},I._extra={...this._extra},I._contexts={...this._contexts},I._user=this._user,I._level=this._level,I._span=this._span,I._session=this._session,I._transactionName=this._transactionName,I._fingerprint=this._fingerprint,I._eventProcessors=[...this._eventProcessors],I._requestSession=this._requestSession,I._attachments=[...this._attachments],I._sdkProcessingMetadata={...this._sdkProcessingMetadata},I._propagationContext={...this._propagationContext},I._client=this._client,I}setClient(I){this._client=I}getClient(){return this._client}addScopeListener(I){this._scopeListeners.push(I)}addEventProcessor(I){return this._eventProcessors.push(I),this}setUser(I){if(this._user=I||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this._session)am2.updateSession(this._session,{user:I});return this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(I){return this._requestSession=I,this}setTags(I){return this._tags={...this._tags,...I},this._notifyScopeListeners(),this}setTag(I,d){return this._tags={...this._tags,[I]:d},this._notifyScopeListeners(),this}setExtras(I){return this._extra={...this._extra,...I},this._notifyScopeListeners(),this}setExtra(I,d){return this._extra={...this._extra,[I]:d},this._notifyScopeListeners(),this}setFingerprint(I){return this._fingerprint=I,this._notifyScopeListeners(),this}setLevel(I){return this._level=I,this._notifyScopeListeners(),this}setTransactionName(I){return this._transactionName=I,this._notifyScopeListeners(),this}setContext(I,d){if(d===null)delete this._contexts[I];else this._contexts[I]=d;return this._notifyScopeListeners(),this}setSpan(I){return this._span=I,this._notifyScopeListeners(),this}getSpan(){return this._span}getTransaction(){let I=this._span;return I&&I.transaction}setSession(I){if(!I)delete this._session;else this._session=I;return this._notifyScopeListeners(),this}getSession(){return this._session}update(I){if(!I)return this;let d=typeof I==="function"?I(this):I;if(d instanceof _N){let G=d.getScopeData();if(this._tags={...this._tags,...G.tags},this._extra={...this._extra,...G.extra},this._contexts={...this._contexts,...G.contexts},G.user&&Object.keys(G.user).length)this._user=G.user;if(G.level)this._level=G.level;if(G.fingerprint.length)this._fingerprint=G.fingerprint;if(d.getRequestSession())this._requestSession=d.getRequestSession();if(G.propagationContext)this._propagationContext=G.propagationContext}else if(Bw.isPlainObject(d)){let G=I;if(this._tags={...this._tags,...G.tags},this._extra={...this._extra,...G.extra},this._contexts={...this._contexts,...G.contexts},G.user)this._user=G.user;if(G.level)this._level=G.level;if(G.fingerprint)this._fingerprint=G.fingerprint;if(G.requestSession)this._requestSession=G.requestSession;if(G.propagationContext)this._propagationContext=G.propagationContext}return this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this._attachments=[],this._propagationContext=Vq1(),this}addBreadcrumb(I,d){let G=typeof d==="number"?d:om2;if(G<=0)return this;let Z={timestamp:Bw.dateTimestampInSeconds(),...I},C=this._breadcrumbs;return C.push(Z),this._breadcrumbs=C.length>G?C.slice(-G):C,this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(I){return this._attachments.push(I),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this._attachments=[],this}getScopeData(){let{_breadcrumbs:I,_attachments:d,_contexts:G,_tags:Z,_extra:C,_user:W,_level:w,_fingerprint:B,_eventProcessors:A,_propagationContext:V,_sdkProcessingMetadata:X,_transactionName:_,_span:F}=this;return{breadcrumbs:I,attachments:d,contexts:G,tags:Z,extra:C,user:W,level:w,fingerprint:B||[],eventProcessors:A,propagationContext:V,sdkProcessingMetadata:X,transactionName:_,span:F}}applyToEvent(I,d={},G=[]){sm2.applyScopeDataToEvent(I,this.getScopeData());let Z=[...G,...Aq1.getGlobalEventProcessors(),...this._eventProcessors];return Aq1.notifyEventProcessors(Z,I,d)}setSDKProcessingMetadata(I){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...I},this}setPropagationContext(I){return this._propagationContext=I,this}getPropagationContext(){return this._propagationContext}captureException(I,d){let G=d&&d.event_id?d.event_id:Bw.uuid4();if(!this._client)return Bw.logger.warn("No client configured on scope - will not capture exception!"),G;let Z=new Error("Sentry syntheticException");return this._client.captureException(I,{originalException:I,syntheticException:Z,...d,event_id:G},this),G}captureMessage(I,d,G){let Z=G&&G.event_id?G.event_id:Bw.uuid4();if(!this._client)return Bw.logger.warn("No client configured on scope - will not capture message!"),Z;let C=new Error(I);return this._client.captureMessage(I,d,{originalException:I,syntheticException:C,...G,event_id:Z},this),Z}captureEvent(I,d){let G=d&&d.event_id?d.event_id:Bw.uuid4();if(!this._client)return Bw.logger.warn("No client configured on scope - will not capture event!"),G;return this._client.captureEvent(I,{...d,event_id:G},this),G}_notifyScopeListeners(){if(!this._notifyingListeners)this._notifyingListeners=!0,this._scopeListeners.forEach((I)=>{I(this)}),this._notifyingListeners=!1}}function em2(){if(!LO)LO=new _N;return LO}function tm2(I){LO=I}function Vq1(){return{traceId:Bw.uuid4(),spanId:Bw.uuid4().substring(16)}}Xq1.Scope=_N;Xq1.getGlobalScope=em2;Xq1.setGlobalScope=tm2});var yO=Y((Yq1)=>{Object.defineProperty(Yq1,"__esModule",{value:!0});var Zl2="7.120.0";Yq1.SDK_VERSION=Zl2});var ww=Y((gq1)=>{Object.defineProperty(gq1,"__esModule",{value:!0});var s7=V0(),Wl2=AN(),A11=F6(),_q1=MO(),V11=VN(),wl2=yO(),PO=parseFloat(wl2.SDK_VERSION),Bl2=100;class mv{constructor(I,d,G,Z=PO){this._version=Z;let C;if(!d)C=new _q1.Scope,C.setClient(I);else C=d;let W;if(!G)W=new _q1.Scope,W.setClient(I);else W=G;if(this._stack=[{scope:C}],I)this.bindClient(I);this._isolationScope=W}isOlderThan(I){return this._version{return this.popScope(),Z},(Z)=>{throw this.popScope(),Z});return this.popScope(),G}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStack(){return this._stack}getStackTop(){return this._stack[this._stack.length-1]}captureException(I,d){let G=this._lastEventId=d&&d.event_id?d.event_id:s7.uuid4(),Z=new Error("Sentry syntheticException");return this.getScope().captureException(I,{originalException:I,syntheticException:Z,...d,event_id:G}),G}captureMessage(I,d,G){let Z=this._lastEventId=G&&G.event_id?G.event_id:s7.uuid4(),C=new Error(I);return this.getScope().captureMessage(I,d,{originalException:I,syntheticException:C,...G,event_id:Z}),Z}captureEvent(I,d){let G=d&&d.event_id?d.event_id:s7.uuid4();if(!I.type)this._lastEventId=G;return this.getScope().captureEvent(I,{...d,event_id:G}),G}lastEventId(){return this._lastEventId}addBreadcrumb(I,d){let{scope:G,client:Z}=this.getStackTop();if(!Z)return;let{beforeBreadcrumb:C=null,maxBreadcrumbs:W=Bl2}=Z.getOptions&&Z.getOptions()||{};if(W<=0)return;let B={timestamp:s7.dateTimestampInSeconds(),...I},A=C?s7.consoleSandbox(()=>C(B,d)):B;if(A===null)return;if(Z.emit)Z.emit("beforeAddBreadcrumb",A,d);G.addBreadcrumb(A,W)}setUser(I){this.getScope().setUser(I),this.getIsolationScope().setUser(I)}setTags(I){this.getScope().setTags(I),this.getIsolationScope().setTags(I)}setExtras(I){this.getScope().setExtras(I),this.getIsolationScope().setExtras(I)}setTag(I,d){this.getScope().setTag(I,d),this.getIsolationScope().setTag(I,d)}setExtra(I,d){this.getScope().setExtra(I,d),this.getIsolationScope().setExtra(I,d)}setContext(I,d){this.getScope().setContext(I,d),this.getIsolationScope().setContext(I,d)}configureScope(I){let{scope:d,client:G}=this.getStackTop();if(G)I(d)}run(I){let d=X11(this);try{I(this)}finally{X11(d)}}getIntegration(I){let d=this.getClient();if(!d)return null;try{return d.getIntegration(I)}catch(G){return A11.DEBUG_BUILD&&s7.logger.warn(`Cannot retrieve integration ${I.id} from the current Hub`),null}}startTransaction(I,d){let G=this._callExtensionMethod("startTransaction",I,d);if(A11.DEBUG_BUILD&&!G)if(!this.getClient())s7.logger.warn("Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'");else s7.logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init': +Sentry.addTracingExtensions(); +Sentry.init({...}); +`);return G}traceHeaders(){return this._callExtensionMethod("traceHeaders")}captureSession(I=!1){if(I)return this.endSession();this._sendSessionUpdate()}endSession(){let d=this.getStackTop().scope,G=d.getSession();if(G)V11.closeSession(G);this._sendSessionUpdate(),d.setSession()}startSession(I){let{scope:d,client:G}=this.getStackTop(),{release:Z,environment:C=Wl2.DEFAULT_ENVIRONMENT}=G&&G.getOptions()||{},{userAgent:W}=s7.GLOBAL_OBJ.navigator||{},w=V11.makeSession({release:Z,environment:C,user:d.getUser(),...W&&{userAgent:W},...I}),B=d.getSession&&d.getSession();if(B&&B.status==="ok")V11.updateSession(B,{status:"exited"});return this.endSession(),d.setSession(w),w}shouldSendDefaultPii(){let I=this.getClient(),d=I&&I.getOptions();return Boolean(d&&d.sendDefaultPii)}_sendSessionUpdate(){let{scope:I,client:d}=this.getStackTop(),G=I.getSession();if(G&&d&&d.captureSession)d.captureSession(G)}_callExtensionMethod(I,...d){let Z=FF().__SENTRY__;if(Z&&Z.extensions&&typeof Z.extensions[I]==="function")return Z.extensions[I].apply(this,d);A11.DEBUG_BUILD&&s7.logger.warn(`Extension method ${I} couldn't be found, doing nothing.`)}}function FF(){return s7.GLOBAL_OBJ.__SENTRY__=s7.GLOBAL_OBJ.__SENTRY__||{extensions:{},hub:void 0},s7.GLOBAL_OBJ}function X11(I){let d=FF(),G=Ov(d);return $O(d,I),G}function Dq1(){let I=FF();if(I.__SENTRY__&&I.__SENTRY__.acs){let d=I.__SENTRY__.acs.getCurrentHub();if(d)return d}return Hq1(I)}function Al2(){return Dq1().getIsolationScope()}function Hq1(I=FF()){if(!Fq1(I)||Ov(I).isOlderThan(PO))$O(I,new mv);return Ov(I)}function Vl2(I,d=Hq1()){if(!Fq1(I)||Ov(I).isOlderThan(PO)){let G=d.getClient(),Z=d.getScope(),C=d.getIsolationScope();$O(I,new mv(G,Z.clone(),C.clone()))}}function Xl2(I){let d=FF();d.__SENTRY__=d.__SENTRY__||{},d.__SENTRY__.acs=I}function Yl2(I,d={}){let G=FF();if(G.__SENTRY__&&G.__SENTRY__.acs)return G.__SENTRY__.acs.runWithAsyncContext(I,d);return I()}function Fq1(I){return!!(I&&I.__SENTRY__&&I.__SENTRY__.hub)}function Ov(I){return s7.getGlobalSingleton("hub",()=>new mv,I)}function $O(I,d){if(!I)return!1;let G=I.__SENTRY__=I.__SENTRY__||{};return G.hub=d,!0}gq1.API_VERSION=PO;gq1.Hub=mv;gq1.ensureHubOnCarrier=Vl2;gq1.getCurrentHub=Dq1;gq1.getHubFromCarrier=Ov;gq1.getIsolationScope=Al2;gq1.getMainCarrier=FF;gq1.makeMain=X11;gq1.runWithAsyncContext=Yl2;gq1.setAsyncContextStrategy=Xl2;gq1.setHubOnCarrier=$O});var uO=Y((Kq1)=>{Object.defineProperty(Kq1,"__esModule",{value:!0});var Jq1=V0(),ql2=ww();function Rl2(I){return(I||ql2.getCurrentHub()).getScope().getTransaction()}var Ul2=Jq1.extractTraceparentData;Kq1.stripUrlQueryAndFragment=Jq1.stripUrlQueryAndFragment;Kq1.extractTraceparentData=Ul2;Kq1.getActiveTransaction=Rl2});var TO=Y((zq1)=>{Object.defineProperty(zq1,"__esModule",{value:!0});var Y11=V0(),Sl2=F6(),Ll2=uO(),Nq1=!1;function yl2(){if(Nq1)return;Nq1=!0,Y11.addGlobalErrorInstrumentationHandler(_11),Y11.addGlobalUnhandledRejectionInstrumentationHandler(_11)}function _11(){let I=Ll2.getActiveTransaction();if(I)Sl2.DEBUG_BUILD&&Y11.logger.log("[Tracing] Transaction: internal_error -> Global error occured"),I.setStatus("internal_error")}_11.tag="sentry_tracingErrorCallback";zq1.registerErrorInstrumentation=yl2});var DN=Y((Qq1)=>{Object.defineProperty(Qq1,"__esModule",{value:!0});Qq1.SpanStatus=void 0;(function(I){I.Ok="ok";let G="deadline_exceeded";I.DeadlineExceeded=G;let Z="unauthenticated";I.Unauthenticated=Z;let C="permission_denied";I.PermissionDenied=C;let W="not_found";I.NotFound=W;let w="resource_exhausted";I.ResourceExhausted=w;let B="invalid_argument";I.InvalidArgument=B;let A="unimplemented";I.Unimplemented=A;let V="unavailable";I.Unavailable=V;let X="internal_error";I.InternalError=X;let _="unknown_error";I.UnknownError=_;let F="cancelled";I.Cancelled=F;let g="already_exists";I.AlreadyExists=g;let J="failed_precondition";I.FailedPrecondition=J;let K="aborted";I.Aborted=K;let Q="out_of_range";I.OutOfRange=Q;let E="data_loss";I.DataLoss=E})(Qq1.SpanStatus||(Qq1.SpanStatus={}));function H11(I){if(I<400&&I>=100)return"ok";if(I>=400&&I<500)switch(I){case 401:return"unauthenticated";case 403:return"permission_denied";case 404:return"not_found";case 409:return"already_exists";case 413:return"failed_precondition";case 429:return"resource_exhausted";default:return"invalid_argument"}if(I>=500&&I<600)switch(I){case 501:return"unimplemented";case 503:return"unavailable";case 504:return"deadline_exceeded";default:return"internal_error"}return"unknown_error"}var $l2=H11;function ul2(I,d){I.setTag("http.status_code",String(d)),I.setData("http.response.status_code",d);let G=H11(d);if(G!=="unknown_error")I.setStatus(G)}Qq1.getSpanStatusFromHttpCode=H11;Qq1.setHttpStatus=ul2;Qq1.spanStatusfromHttpCode=$l2});var F11=Y((fq1)=>{Object.defineProperty(fq1,"__esModule",{value:!0});var ll2=V0();function bl2(I,d,G=()=>{}){let Z;try{Z=I()}catch(C){throw d(C),G(),C}return hl2(Z,d,G)}function hl2(I,d,G){if(ll2.isThenable(I))return I.then((Z)=>{return G(),Z},(Z)=>{throw d(Z),G(),Z});return G(),I}fq1.handleCallbackErrors=bl2});var OO=Y((qq1)=>{Object.defineProperty(qq1,"__esModule",{value:!0});var kl2=iG();function xl2(I){if(typeof __SENTRY_TRACING__==="boolean"&&!__SENTRY_TRACING__)return!1;let d=kl2.getClient(),G=I||d&&d.getOptions();return!!G&&(G.enableTracing||("tracesSampleRate"in G)||("tracesSampler"in G))}qq1.hasTracingEnabled=xl2});var hO=Y((Sq1)=>{Object.defineProperty(Sq1,"__esModule",{value:!0});var lv=V0(),pl2=F6(),pX=ww(),mO=kI();TO();DN();var il2=HF(),HN=iG(),g11=F11(),Rq1=OO();function nl2(I,d,G=()=>{},Z=()=>{}){let C=pX.getCurrentHub(),W=HN.getCurrentScope(),w=W.getSpan(),B=bO(I),A=lO(C,{parentSpan:w,spanContext:B,forceTransaction:!1,scope:W});return W.setSpan(A),g11.handleCallbackErrors(()=>d(A),(V)=>{A&&A.setStatus("internal_error"),G(V,A)},()=>{A&&A.end(),W.setSpan(w),Z()})}function Uq1(I,d){let G=bO(I);return pX.runWithAsyncContext(()=>{return HN.withScope(I.scope,(Z)=>{let C=pX.getCurrentHub(),W=Z.getSpan(),B=I.onlyIfParent&&!W?void 0:lO(C,{parentSpan:W,spanContext:G,forceTransaction:I.forceTransaction,scope:Z});return g11.handleCallbackErrors(()=>d(B),()=>{if(B){let{status:A}=mO.spanToJSON(B);if(!A||A==="ok")B.setStatus("internal_error")}},()=>B&&B.end())})})}var rl2=Uq1;function al2(I,d){let G=bO(I);return pX.runWithAsyncContext(()=>{return HN.withScope(I.scope,(Z)=>{let C=pX.getCurrentHub(),W=Z.getSpan(),B=I.onlyIfParent&&!W?void 0:lO(C,{parentSpan:W,spanContext:G,forceTransaction:I.forceTransaction,scope:Z});function A(){B&&B.end()}return g11.handleCallbackErrors(()=>d(B,A),()=>{if(B&&B.isRecording()){let{status:V}=mO.spanToJSON(B);if(!V||V==="ok")B.setStatus("internal_error")}})})})}function sl2(I){if(!Rq1.hasTracingEnabled())return;let d=bO(I),G=pX.getCurrentHub(),Z=I.scope?I.scope.getSpan():vq1();if(I.onlyIfParent&&!Z)return;let w=(I.scope||HN.getCurrentScope()).clone();return lO(G,{parentSpan:Z,spanContext:d,forceTransaction:I.forceTransaction,scope:w})}function vq1(){return HN.getCurrentScope().getSpan()}var ol2=({sentryTrace:I,baggage:d},G)=>{let Z=HN.getCurrentScope(),{traceparentData:C,dynamicSamplingContext:W,propagationContext:w}=lv.tracingContextFromHeaders(I,d);if(Z.setPropagationContext(w),pl2.DEBUG_BUILD&&C)lv.logger.log(`[Tracing] Continuing trace ${C.traceId}.`);let B={...C,metadata:lv.dropUndefinedKeys({dynamicSamplingContext:W})};if(!G)return B;return pX.runWithAsyncContext(()=>{return G(B)})};function lO(I,{parentSpan:d,spanContext:G,forceTransaction:Z,scope:C}){if(!Rq1.hasTracingEnabled())return;let W=pX.getIsolationScope(),w;if(d&&!Z)w=d.startChild(G);else if(d){let B=il2.getDynamicSamplingContextFromSpan(d),{traceId:A,spanId:V}=d.spanContext(),X=mO.spanIsSampled(d);w=I.startTransaction({traceId:A,parentSpanId:V,parentSampled:X,...G,metadata:{dynamicSamplingContext:B,...G.metadata}})}else{let{traceId:B,dsc:A,parentSpanId:V,sampled:X}={...W.getPropagationContext(),...C.getPropagationContext()};w=I.startTransaction({traceId:B,parentSpanId:V,parentSampled:X,...G,metadata:{dynamicSamplingContext:A,...G.metadata}})}return C.setSpan(w),el2(w,C,W),w}function bO(I){if(I.startTime){let d={...I};return d.startTimestamp=mO.spanTimeInputToSeconds(I.startTime),delete d.startTime,d}return I}var Eq1="_sentryScope",Mq1="_sentryIsolationScope";function el2(I,d,G){if(I)lv.addNonEnumerableProperty(I,Mq1,G),lv.addNonEnumerableProperty(I,Eq1,d)}function tl2(I){return{scope:I[Eq1],isolationScope:I[Mq1]}}Sq1.continueTrace=ol2;Sq1.getActiveSpan=vq1;Sq1.getCapturedScopesOnSpan=tl2;Sq1.startActiveSpan=rl2;Sq1.startInactiveSpan=sl2;Sq1.startSpan=Uq1;Sq1.startSpanManual=al2;Sq1.trace=nl2});var hv=Y((yq1)=>{Object.defineProperty(yq1,"__esModule",{value:!0});var Ab2=V0();F6();TO();DN();var Vb2=hO(),bv;function Lq1(I){return bv?bv.get(I):void 0}function Xb2(I){let d=Lq1(I);if(!d)return;let G={};for(let[,[Z,C]]of d){if(!G[Z])G[Z]=[];G[Z].push(Ab2.dropUndefinedKeys(C))}return G}function Yb2(I,d,G,Z,C,W){let w=Vb2.getActiveSpan();if(w){let B=Lq1(w)||new Map,A=`${I}:${d}@${Z}`,V=B.get(W);if(V){let[,X]=V;B.set(W,[A,{min:Math.min(X.min,G),max:Math.max(X.max,G),count:X.count+=1,sum:X.sum+=G,tags:X.tags}])}else B.set(W,[A,{min:G,max:G,count:1,sum:G,tags:C}]);if(!bv)bv=new WeakMap;bv.set(w,B)}}yq1.getMetricSummaryJsonForSpan=Xb2;yq1.updateMetricSummaryOnActiveSpan=Yb2});var jv=Y((Pq1)=>{Object.defineProperty(Pq1,"__esModule",{value:!0});var Hb2="sentry.source",Fb2="sentry.sample_rate",gb2="sentry.op",Jb2="sentry.origin",Kb2="profile_id";Pq1.SEMANTIC_ATTRIBUTE_PROFILE_ID=Kb2;Pq1.SEMANTIC_ATTRIBUTE_SENTRY_OP=gb2;Pq1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=Jb2;Pq1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=Fb2;Pq1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=Hb2});var jO=Y((Oq1)=>{Object.defineProperty(Oq1,"__esModule",{value:!0});var gF=V0(),$q1=F6(),Rb2=hv(),RA=jv(),uq1=XN(),FN=kI(),Ub2=DN();class Tq1{constructor(I=1000){this._maxlen=I,this.spans=[]}add(I){if(this.spans.length>this._maxlen)I.spanRecorder=void 0;else this.spans.push(I)}}class J11{constructor(I={}){if(this._traceId=I.traceId||gF.uuid4(),this._spanId=I.spanId||gF.uuid4().substring(16),this._startTime=I.startTimestamp||gF.timestampInSeconds(),this.tags=I.tags?{...I.tags}:{},this.data=I.data?{...I.data}:{},this.instrumenter=I.instrumenter||"sentry",this._attributes={},this.setAttributes({[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:I.origin||"manual",[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP]:I.op,...I.attributes}),this._name=I.name||I.description,I.parentSpanId)this._parentSpanId=I.parentSpanId;if("sampled"in I)this._sampled=I.sampled;if(I.status)this._status=I.status;if(I.endTimestamp)this._endTime=I.endTimestamp;if(I.exclusiveTime!==void 0)this._exclusiveTime=I.exclusiveTime;this._measurements=I.measurements?{...I.measurements}:{}}get name(){return this._name||""}set name(I){this.updateName(I)}get description(){return this._name}set description(I){this._name=I}get traceId(){return this._traceId}set traceId(I){this._traceId=I}get spanId(){return this._spanId}set spanId(I){this._spanId=I}set parentSpanId(I){this._parentSpanId=I}get parentSpanId(){return this._parentSpanId}get sampled(){return this._sampled}set sampled(I){this._sampled=I}get attributes(){return this._attributes}set attributes(I){this._attributes=I}get startTimestamp(){return this._startTime}set startTimestamp(I){this._startTime=I}get endTimestamp(){return this._endTime}set endTimestamp(I){this._endTime=I}get status(){return this._status}set status(I){this._status=I}get op(){return this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP]}set op(I){this.setAttribute(RA.SEMANTIC_ATTRIBUTE_SENTRY_OP,I)}get origin(){return this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]}set origin(I){this.setAttribute(RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,I)}spanContext(){let{_spanId:I,_traceId:d,_sampled:G}=this;return{spanId:I,traceId:d,traceFlags:G?FN.TRACE_FLAG_SAMPLED:FN.TRACE_FLAG_NONE}}startChild(I){let d=new J11({...I,parentSpanId:this._spanId,sampled:this._sampled,traceId:this._traceId});if(d.spanRecorder=this.spanRecorder,d.spanRecorder)d.spanRecorder.add(d);let G=uq1.getRootSpan(this);if(d.transaction=G,$q1.DEBUG_BUILD&&G){let Z=I&&I.op||"< unknown op >",C=FN.spanToJSON(d).description||"< unknown name >",W=G.spanContext().spanId,w=`[Tracing] Starting '${Z}' span on transaction '${C}' (${W}).`;gF.logger.log(w),this._logMessage=w}return d}setTag(I,d){return this.tags={...this.tags,[I]:d},this}setData(I,d){return this.data={...this.data,[I]:d},this}setAttribute(I,d){if(d===void 0)delete this._attributes[I];else this._attributes[I]=d}setAttributes(I){Object.keys(I).forEach((d)=>this.setAttribute(d,I[d]))}setStatus(I){return this._status=I,this}setHttpStatus(I){return Ub2.setHttpStatus(this,I),this}setName(I){this.updateName(I)}updateName(I){return this._name=I,this}isSuccess(){return this._status==="ok"}finish(I){return this.end(I)}end(I){if(this._endTime)return;let d=uq1.getRootSpan(this);if($q1.DEBUG_BUILD&&d&&d.spanContext().spanId!==this._spanId){let G=this._logMessage;if(G)gF.logger.log(G.replace("Starting","Finishing"))}this._endTime=FN.spanTimeInputToSeconds(I)}toTraceparent(){return FN.spanToTraceHeader(this)}toContext(){return gF.dropUndefinedKeys({data:this._getData(),description:this._name,endTimestamp:this._endTime,op:this.op,parentSpanId:this._parentSpanId,sampled:this._sampled,spanId:this._spanId,startTimestamp:this._startTime,status:this._status,tags:this.tags,traceId:this._traceId})}updateWithContext(I){return this.data=I.data||{},this._name=I.name||I.description,this._endTime=I.endTimestamp,this.op=I.op,this._parentSpanId=I.parentSpanId,this._sampled=I.sampled,this._spanId=I.spanId||this._spanId,this._startTime=I.startTimestamp||this._startTime,this._status=I.status,this.tags=I.tags||{},this._traceId=I.traceId||this._traceId,this}getTraceContext(){return FN.spanToTraceContext(this)}getSpanJSON(){return gF.dropUndefinedKeys({data:this._getData(),description:this._name,op:this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP],parent_span_id:this._parentSpanId,span_id:this._spanId,start_timestamp:this._startTime,status:this._status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this._endTime,trace_id:this._traceId,origin:this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN],_metrics_summary:Rb2.getMetricSummaryJsonForSpan(this),profile_id:this._attributes[RA.SEMANTIC_ATTRIBUTE_PROFILE_ID],exclusive_time:this._exclusiveTime,measurements:Object.keys(this._measurements).length>0?this._measurements:void 0})}isRecording(){return!this._endTime&&!!this._sampled}toJSON(){return this.getSpanJSON()}_getData(){let{data:I,_attributes:d}=this,G=Object.keys(I).length>0,Z=Object.keys(d).length>0;if(!G&&!Z)return;if(G&&Z)return{...I,...d};return G?I:d}}Oq1.Span=J11;Oq1.SpanRecorder=Tq1});var cO=Y((hq1)=>{Object.defineProperty(hq1,"__esModule",{value:!0});var gN=V0(),kO=F6(),Mb2=ww(),Sb2=hv(),kv=jv(),xO=kI(),mq1=HF(),lq1=jO(),Lb2=hO();class bq1 extends lq1.Span{constructor(I,d){super(I);this._contexts={},this._hub=d||Mb2.getCurrentHub(),this._name=I.name||"",this._metadata={...I.metadata},this._trimEnd=I.trimEnd,this.transaction=this;let G=this._metadata.dynamicSamplingContext;if(G)this._frozenDynamicSamplingContext={...G}}get name(){return this._name}set name(I){this.setName(I)}get metadata(){return{source:"custom",spanMetadata:{},...this._metadata,...this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]&&{source:this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]},...this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]&&{sampleRate:this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]}}}set metadata(I){this._metadata=I}setName(I,d="custom"){this._name=I,this.setAttribute(kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,d)}updateName(I){return this._name=I,this}initSpanRecorder(I=1000){if(!this.spanRecorder)this.spanRecorder=new lq1.SpanRecorder(I);this.spanRecorder.add(this)}setContext(I,d){if(d===null)delete this._contexts[I];else this._contexts[I]=d}setMeasurement(I,d,G=""){this._measurements[I]={value:d,unit:G}}setMetadata(I){this._metadata={...this._metadata,...I}}end(I){let d=xO.spanTimeInputToSeconds(I),G=this._finishTransaction(d);if(!G)return;return this._hub.captureEvent(G)}toContext(){let I=super.toContext();return gN.dropUndefinedKeys({...I,name:this._name,trimEnd:this._trimEnd})}updateWithContext(I){return super.updateWithContext(I),this._name=I.name||"",this._trimEnd=I.trimEnd,this}getDynamicSamplingContext(){return mq1.getDynamicSamplingContextFromSpan(this)}setHub(I){this._hub=I}getProfileId(){if(this._contexts!==void 0&&this._contexts.profile!==void 0)return this._contexts.profile.profile_id;return}_finishTransaction(I){if(this._endTime!==void 0)return;if(!this._name)kO.DEBUG_BUILD&&gN.logger.warn("Transaction has no name, falling back to ``."),this._name="";super.end(I);let d=this._hub.getClient();if(d&&d.emit)d.emit("finishTransaction",this);if(this._sampled!==!0){if(kO.DEBUG_BUILD&&gN.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),d)d.recordDroppedEvent("sample_rate","transaction");return}let G=this.spanRecorder?this.spanRecorder.spans.filter((V)=>V!==this&&xO.spanToJSON(V).timestamp):[];if(this._trimEnd&&G.length>0){let V=G.map((X)=>xO.spanToJSON(X).timestamp).filter(Boolean);this._endTime=V.reduce((X,_)=>{return X>_?X:_})}let{scope:Z,isolationScope:C}=Lb2.getCapturedScopesOnSpan(this),{metadata:W}=this,{source:w}=W,B={contexts:{...this._contexts,trace:xO.spanToTraceContext(this)},spans:G,start_timestamp:this._startTime,tags:this.tags,timestamp:this._endTime,transaction:this._name,type:"transaction",sdkProcessingMetadata:{...W,capturedSpanScope:Z,capturedSpanIsolationScope:C,...gN.dropUndefinedKeys({dynamicSamplingContext:mq1.getDynamicSamplingContextFromSpan(this)})},_metrics_summary:Sb2.getMetricSummaryJsonForSpan(this),...w&&{transaction_info:{source:w}}};if(Object.keys(this._measurements).length>0)kO.DEBUG_BUILD&&gN.logger.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),B.measurements=this._measurements;return kO.DEBUG_BUILD&&gN.logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`),B}}hq1.Transaction=bq1});var N11=Y((kq1)=>{Object.defineProperty(kq1,"__esModule",{value:!0});var z7=V0(),xI=F6(),pO=kI(),Pb2=jO(),$b2=cO(),iO={idleTimeout:1000,finalTimeout:30000,heartbeatInterval:5000},ub2="finishReason",JN=["heartbeatFailed","idleTimeout","documentHidden","finalTimeout","externalFinish","cancelled"];class K11 extends Pb2.SpanRecorder{constructor(I,d,G,Z){super(Z);this._pushActivity=I,this._popActivity=d,this.transactionSpanId=G}add(I){if(I.spanContext().spanId!==this.transactionSpanId){let d=I.end;if(I.end=(...G)=>{return this._popActivity(I.spanContext().spanId),d.apply(I,G)},pO.spanToJSON(I).timestamp===void 0)this._pushActivity(I.spanContext().spanId)}super.add(I)}}class jq1 extends $b2.Transaction{constructor(I,d,G=iO.idleTimeout,Z=iO.finalTimeout,C=iO.heartbeatInterval,W=!1,w=!1){super(I,d);if(this._idleHub=d,this._idleTimeout=G,this._finalTimeout=Z,this._heartbeatInterval=C,this._onScope=W,this.activities={},this._heartbeatCounter=0,this._finished=!1,this._idleTimeoutCanceledPermanently=!1,this._beforeFinishCallbacks=[],this._finishReason=JN[4],this._autoFinishAllowed=!w,W)xI.DEBUG_BUILD&&z7.logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`),d.getScope().setSpan(this);if(!w)this._restartIdleTimeout();setTimeout(()=>{if(!this._finished)this.setStatus("deadline_exceeded"),this._finishReason=JN[3],this.end()},this._finalTimeout)}end(I){let d=pO.spanTimeInputToSeconds(I);if(this._finished=!0,this.activities={},this.op==="ui.action.click")this.setAttribute(ub2,this._finishReason);if(this.spanRecorder){xI.DEBUG_BUILD&&z7.logger.log("[Tracing] finishing IdleTransaction",new Date(d*1000).toISOString(),this.op);for(let G of this._beforeFinishCallbacks)G(this,d);this.spanRecorder.spans=this.spanRecorder.spans.filter((G)=>{if(G.spanContext().spanId===this.spanContext().spanId)return!0;if(!pO.spanToJSON(G).timestamp)G.setStatus("cancelled"),G.end(d),xI.DEBUG_BUILD&&z7.logger.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(G,void 0,2));let{start_timestamp:Z,timestamp:C}=pO.spanToJSON(G),W=Z&&Z{if(this._finished)return;this._pushActivity(Z)},G=(Z)=>{if(this._finished)return;this._popActivity(Z)};this.spanRecorder=new K11(d,G,this.spanContext().spanId,I),xI.DEBUG_BUILD&&z7.logger.log("Starting heartbeat"),this._pingHeartbeat()}this.spanRecorder.add(this)}cancelIdleTimeout(I,{restartOnChildSpanChange:d}={restartOnChildSpanChange:!0}){if(this._idleTimeoutCanceledPermanently=d===!1,this._idleTimeoutID){if(clearTimeout(this._idleTimeoutID),this._idleTimeoutID=void 0,Object.keys(this.activities).length===0&&this._idleTimeoutCanceledPermanently)this._finishReason=JN[5],this.end(I)}}setFinishReason(I){this._finishReason=I}sendAutoFinishSignal(){if(!this._autoFinishAllowed)xI.DEBUG_BUILD&&z7.logger.log("[Tracing] Received finish signal for idle transaction."),this._restartIdleTimeout(),this._autoFinishAllowed=!0}_restartIdleTimeout(I){this.cancelIdleTimeout(),this._idleTimeoutID=setTimeout(()=>{if(!this._finished&&Object.keys(this.activities).length===0)this._finishReason=JN[1],this.end(I)},this._idleTimeout)}_pushActivity(I){this.cancelIdleTimeout(void 0,{restartOnChildSpanChange:!this._idleTimeoutCanceledPermanently}),xI.DEBUG_BUILD&&z7.logger.log(`[Tracing] pushActivity: ${I}`),this.activities[I]=!0,xI.DEBUG_BUILD&&z7.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)}_popActivity(I){if(this.activities[I])xI.DEBUG_BUILD&&z7.logger.log(`[Tracing] popActivity ${I}`),delete this.activities[I],xI.DEBUG_BUILD&&z7.logger.log("[Tracing] new activities count",Object.keys(this.activities).length);if(Object.keys(this.activities).length===0){let d=z7.timestampInSeconds();if(this._idleTimeoutCanceledPermanently){if(this._autoFinishAllowed)this._finishReason=JN[5],this.end(d)}else this._restartIdleTimeout(d+this._idleTimeout/1000)}}_beat(){if(this._finished)return;let I=Object.keys(this.activities).join("");if(I===this._prevHeartbeatString)this._heartbeatCounter++;else this._heartbeatCounter=1;if(this._prevHeartbeatString=I,this._heartbeatCounter>=3){if(this._autoFinishAllowed)xI.DEBUG_BUILD&&z7.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus("deadline_exceeded"),this._finishReason=JN[0],this.end()}else this._pingHeartbeat()}_pingHeartbeat(){xI.DEBUG_BUILD&&z7.logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`),setTimeout(()=>{this._beat()},this._heartbeatInterval)}}kq1.IdleTransaction=jq1;kq1.IdleTransactionSpanRecorder=K11;kq1.TRACING_DEFAULTS=iO});var z11=Y((cq1)=>{Object.defineProperty(cq1,"__esModule",{value:!0});var JF=V0(),KN=F6(),nO=jv(),lb2=OO(),bb2=kI();function hb2(I,d,G){if(!lb2.hasTracingEnabled(d))return I.sampled=!1,I;if(I.sampled!==void 0)return I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(I.sampled)),I;let Z;if(typeof d.tracesSampler==="function")Z=d.tracesSampler(G),I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(Z));else if(G.parentSampled!==void 0)Z=G.parentSampled;else if(typeof d.tracesSampleRate!=="undefined")Z=d.tracesSampleRate,I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(Z));else Z=1,I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Z);if(!xq1(Z))return KN.DEBUG_BUILD&&JF.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."),I.sampled=!1,I;if(!Z)return KN.DEBUG_BUILD&&JF.logger.log(`[Tracing] Discarding transaction because ${typeof d.tracesSampler==="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0"}`),I.sampled=!1,I;if(I.sampled=Math.random()1)return KN.DEBUG_BUILD&&JF.logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${I}.`),!1;return!0}cq1.isValidSampleRate=xq1;cq1.sampleTransaction=hb2});var Q11=Y((iq1)=>{Object.defineProperty(iq1,"__esModule",{value:!0});var xb2=V0(),cb2=F6(),pb2=ww(),ib2=kI(),nb2=TO(),rb2=N11(),pq1=z11(),ab2=cO();function sb2(){let d=this.getScope().getSpan();return d?{"sentry-trace":ib2.spanToTraceHeader(d)}:{}}function ob2(I,d){let G=this.getClient(),Z=G&&G.getOptions()||{},C=Z.instrumenter||"sentry",W=I.instrumenter||"sentry";if(C!==W)cb2.DEBUG_BUILD&&xb2.logger.error(`A transaction was started with instrumenter=\`${W}\`, but the SDK is configured with the \`${C}\` instrumenter. +The transaction will not be sampled. Please use the ${C} instrumentation to start transactions.`),I.sampled=!1;let w=new ab2.Transaction(I,this);if(w=pq1.sampleTransaction(w,Z,{name:I.name,parentSampled:I.parentSampled,transactionContext:I,attributes:{...I.data,...I.attributes},...d}),w.isRecording())w.initSpanRecorder(Z._experiments&&Z._experiments.maxSpans);if(G&&G.emit)G.emit("startTransaction",w);return w}function eb2(I,d,G,Z,C,W,w,B=!1){let A=I.getClient(),V=A&&A.getOptions()||{},X=new rb2.IdleTransaction(d,I,G,Z,w,C,B);if(X=pq1.sampleTransaction(X,V,{name:d.name,parentSampled:d.parentSampled,transactionContext:d,attributes:{...d.data,...d.attributes},...W}),X.isRecording())X.initSpanRecorder(V._experiments&&V._experiments.maxSpans);if(A&&A.emit)A.emit("startTransaction",X);return X}function tb2(){let I=pb2.getMainCarrier();if(!I.__SENTRY__)return;if(I.__SENTRY__.extensions=I.__SENTRY__.extensions||{},!I.__SENTRY__.extensions.startTransaction)I.__SENTRY__.extensions.startTransaction=ob2;if(!I.__SENTRY__.extensions.traceHeaders)I.__SENTRY__.extensions.traceHeaders=sb2;nb2.registerErrorInstrumentation()}iq1.addTracingExtensions=tb2;iq1.startIdleTransaction=eb2});var rq1=Y((nq1)=>{Object.defineProperty(nq1,"__esModule",{value:!0});var Gh2=uO();function Zh2(I,d,G){let Z=Gh2.getActiveTransaction();if(Z)Z.setMeasurement(I,d,G)}nq1.setMeasurement=Zh2});var f11=Y((aq1)=>{Object.defineProperty(aq1,"__esModule",{value:!0});var NN=V0();function Wh2(I,d){if(!d)return I;return I.sdk=I.sdk||{},I.sdk.name=I.sdk.name||d.name,I.sdk.version=I.sdk.version||d.version,I.sdk.integrations=[...I.sdk.integrations||[],...d.integrations||[]],I.sdk.packages=[...I.sdk.packages||[],...d.packages||[]],I}function wh2(I,d,G,Z){let C=NN.getSdkMetadataForEnvelopeHeader(G),W={sent_at:new Date().toISOString(),...C&&{sdk:C},...!!Z&&d&&{dsn:NN.dsnToString(d)}},w="aggregates"in I?[{type:"sessions"},I]:[{type:"session"},I.toJSON()];return NN.createEnvelope(W,[w])}function Bh2(I,d,G,Z){let C=NN.getSdkMetadataForEnvelopeHeader(G),W=I.type&&I.type!=="replay_event"?I.type:"event";Wh2(I,G&&G.sdk);let w=NN.createEventEnvelopeHeaders(I,C,Z,d);delete I.sdkProcessingMetadata;let B=[{type:W},I];return NN.createEnvelope(w,[B])}aq1.createEventEnvelope=Bh2;aq1.createSessionEnvelope=wh2});var q11=Y((oq1)=>{Object.defineProperty(oq1,"__esModule",{value:!0});var Xh2=V0(),Yh2=iG();class sq1{constructor(I,d){if(this._client=I,this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._intervalId=setInterval(()=>this.flush(),this.flushTimeout*1000),this._intervalId.unref)this._intervalId.unref();this._sessionAttrs=d}flush(){let I=this.getSessionAggregates();if(I.aggregates.length===0)return;this._pendingAggregates={},this._client.sendSession(I)}getSessionAggregates(){let I=Object.keys(this._pendingAggregates).map((G)=>{return this._pendingAggregates[parseInt(G)]}),d={attrs:this._sessionAttrs,aggregates:I};return Xh2.dropUndefinedKeys(d)}close(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()}incrementSessionStatusCount(){if(!this._isEnabled)return;let I=Yh2.getCurrentScope(),d=I.getRequestSession();if(d&&d.status)this._incrementSessionStatusCount(d.status,new Date),I.setRequestSession(void 0)}_incrementSessionStatusCount(I,d){let G=new Date(d).setSeconds(0,0);this._pendingAggregates[G]=this._pendingAggregates[G]||{};let Z=this._pendingAggregates[G];if(!Z.started)Z.started=new Date(G).toISOString();switch(I){case"errored":return Z.errored=(Z.errored||0)+1,Z.errored;case"ok":return Z.exited=(Z.exited||0)+1,Z.exited;default:return Z.crashed=(Z.crashed||0)+1,Z.crashed}}}oq1.SessionFlusher=sq1});var rO=Y((tq1)=>{Object.defineProperty(tq1,"__esModule",{value:!0});var R11=V0(),Dh2="7";function eq1(I){let d=I.protocol?`${I.protocol}:`:"",G=I.port?`:${I.port}`:"";return`${d}//${I.host}${G}${I.path?`/${I.path}`:""}/api/`}function Hh2(I){return`${eq1(I)}${I.projectId}/envelope/`}function Fh2(I,d){return R11.urlEncode({sentry_key:I.publicKey,sentry_version:Dh2,...d&&{sentry_client:`${d.name}/${d.version}`}})}function gh2(I,d={}){let G=typeof d==="string"?d:d.tunnel,Z=typeof d==="string"||!d._metadata?void 0:d._metadata.sdk;return G?G:`${Hh2(I)}?${Fh2(I,Z)}`}function Jh2(I,d){let G=R11.makeDsn(I);if(!G)return"";let Z=`${eq1(G)}embed/error-page/`,C=`dsn=${R11.dsnToString(G)}`;for(let W in d){if(W==="dsn")continue;if(W==="onClose")continue;if(W==="user"){let w=d.user;if(!w)continue;if(w.name)C+=`&name=${encodeURIComponent(w.name)}`;if(w.email)C+=`&email=${encodeURIComponent(w.email)}`}else C+=`&${encodeURIComponent(W)}=${encodeURIComponent(d[W])}`}return`${Z}?${C}`}tq1.getEnvelopeEndpointWithUrlEncodedAuth=gh2;tq1.getReportDialogEndpoint=Jh2});var UA=Y((dR1)=>{Object.defineProperty(dR1,"__esModule",{value:!0});var aO=V0(),U11=F6(),zh2=Pv(),Qh2=iG(),fh2=ww(),v11=[];function qh2(I){let d={};return I.forEach((G)=>{let{name:Z}=G,C=d[Z];if(C&&!C.isDefaultInstance&&G.isDefaultInstance)return;d[Z]=G}),Object.keys(d).map((G)=>d[G])}function Rh2(I){let d=I.defaultIntegrations||[],G=I.integrations;d.forEach((w)=>{w.isDefaultInstance=!0});let Z;if(Array.isArray(G))Z=[...d,...G];else if(typeof G==="function")Z=aO.arrayify(G(d));else Z=d;let C=qh2(Z),W=Mh2(C,(w)=>w.name==="Debug");if(W!==-1){let[w]=C.splice(W,1);C.push(w)}return C}function Uh2(I,d){let G={};return d.forEach((Z)=>{if(Z)IR1(I,Z,G)}),G}function vh2(I,d){for(let G of d)if(G&&G.afterAllSetup)G.afterAllSetup(I)}function IR1(I,d,G){if(G[d.name]){U11.DEBUG_BUILD&&aO.logger.log(`Integration skipped because it was already installed: ${d.name}`);return}if(G[d.name]=d,v11.indexOf(d.name)===-1)d.setupOnce(zh2.addGlobalEventProcessor,fh2.getCurrentHub),v11.push(d.name);if(d.setup&&typeof d.setup==="function")d.setup(I);if(I.on&&typeof d.preprocessEvent==="function"){let Z=d.preprocessEvent.bind(d);I.on("preprocessEvent",(C,W)=>Z(C,W,I))}if(I.addEventProcessor&&typeof d.processEvent==="function"){let Z=d.processEvent.bind(d),C=Object.assign((W,w)=>Z(W,w,I),{id:d.name});I.addEventProcessor(C)}U11.DEBUG_BUILD&&aO.logger.log(`Integration installed: ${d.name}`)}function Eh2(I){let d=Qh2.getClient();if(!d||!d.addIntegration){U11.DEBUG_BUILD&&aO.logger.warn(`Cannot add integration "${I.name}" because no SDK Client is available.`);return}d.addIntegration(I)}function Mh2(I,d){for(let G=0;G{Object.defineProperty(GR1,"__esModule",{value:!0});var bh2=V0();function hh2(I,d,G,Z){let C=Object.entries(bh2.dropUndefinedKeys(Z)).sort((W,w)=>W[0].localeCompare(w[0]));return`${I}${d}${G}${C}`}function jh2(I){let d=0;for(let G=0;G>>0}function kh2(I){let d="";for(let G of I){let Z=Object.entries(G.tags),C=Z.length>0?`|#${Z.map(([W,w])=>`${W}:${w}`).join(",")}`:"";d+=`${G.name}@${G.unit}:${G.metric}|${G.metricType}${C}|T${G.timestamp} +`}return d}function xh2(I){return I.replace(/[^\w]+/gi,"_")}function ch2(I){return I.replace(/[^\w\-.]+/gi,"_")}function ph2(I){return I.replace(/[^\w\-./]+/gi,"")}var ih2=[[` +`,"\\n"],["\r","\\r"],["\t","\\t"],["\\","\\\\"],["|","\\u{7c}"],[",","\\u{2c}"]];function nh2(I){for(let[d,G]of ih2)if(I===d)return G;return I}function rh2(I){return[...I].reduce((d,G)=>d+nh2(G),"")}function ah2(I){let d={};for(let G in I)if(Object.prototype.hasOwnProperty.call(I,G)){let Z=ph2(G);d[Z]=rh2(String(I[G]))}return d}GR1.getBucketKey=hh2;GR1.sanitizeMetricKey=ch2;GR1.sanitizeTags=ah2;GR1.sanitizeUnit=xh2;GR1.serializeMetricBuckets=kh2;GR1.simpleHash=jh2});var WR1=Y((CR1)=>{Object.defineProperty(CR1,"__esModule",{value:!0});var ZR1=V0(),Gj2=xv();function Zj2(I,d,G,Z){let C={sent_at:new Date().toISOString()};if(G&&G.sdk)C.sdk={name:G.sdk.name,version:G.sdk.version};if(!!Z&&d)C.dsn=ZR1.dsnToString(d);let W=Cj2(I);return ZR1.createEnvelope(C,[W])}function Cj2(I){let d=Gj2.serializeMetricBuckets(I);return[{type:"statsd",length:d.length},d]}CR1.createMetricEnvelope=Zj2});var E11=Y((_R1)=>{Object.defineProperty(_R1,"__esModule",{value:!0});var v5=V0(),wj2=rO(),Aw=F6(),wR1=f11(),Bj2=iG(),Aj2=ww(),sO=UA(),Vj2=WR1(),BR1=VN(),Xj2=HF(),Yj2=vO(),AR1="Not capturing exception because it's already been captured.";class VR1{constructor(I){if(this._options=I,this._integrations={},this._integrationsInitialized=!1,this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],I.dsn)this._dsn=v5.makeDsn(I.dsn);else Aw.DEBUG_BUILD&&v5.logger.warn("No DSN provided, client will not send events.");if(this._dsn){let d=wj2.getEnvelopeEndpointWithUrlEncodedAuth(this._dsn,I);this._transport=I.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...I.transportOptions,url:d})}}captureException(I,d,G){if(v5.checkOrSetAlreadyCaught(I)){Aw.DEBUG_BUILD&&v5.logger.log(AR1);return}let Z=d&&d.event_id;return this._process(this.eventFromException(I,d).then((C)=>this._captureEvent(C,d,G)).then((C)=>{Z=C})),Z}captureMessage(I,d,G,Z){let C=G&&G.event_id,W=v5.isParameterizedString(I)?I:String(I),w=v5.isPrimitive(I)?this.eventFromMessage(W,d,G):this.eventFromException(I,G);return this._process(w.then((B)=>this._captureEvent(B,G,Z)).then((B)=>{C=B})),C}captureEvent(I,d,G){if(d&&d.originalException&&v5.checkOrSetAlreadyCaught(d.originalException)){Aw.DEBUG_BUILD&&v5.logger.log(AR1);return}let Z=d&&d.event_id,W=(I.sdkProcessingMetadata||{}).capturedSpanScope;return this._process(this._captureEvent(I,d,W||G).then((w)=>{Z=w})),Z}captureSession(I){if(typeof I.release!=="string")Aw.DEBUG_BUILD&&v5.logger.warn("Discarded session because of missing or non-string release");else this.sendSession(I),BR1.updateSession(I,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}flush(I){let d=this._transport;if(d){if(this.metricsAggregator)this.metricsAggregator.flush();return this._isClientDoneProcessing(I).then((G)=>{return d.flush(I).then((Z)=>G&&Z)})}else return v5.resolvedSyncPromise(!0)}close(I){return this.flush(I).then((d)=>{if(this.getOptions().enabled=!1,this.metricsAggregator)this.metricsAggregator.close();return d})}getEventProcessors(){return this._eventProcessors}addEventProcessor(I){this._eventProcessors.push(I)}setupIntegrations(I){if(I&&!this._integrationsInitialized||this._isEnabled()&&!this._integrationsInitialized)this._setupIntegrations()}init(){if(this._isEnabled())this._setupIntegrations()}getIntegrationById(I){return this.getIntegrationByName(I)}getIntegrationByName(I){return this._integrations[I]}getIntegration(I){try{return this._integrations[I.id]||null}catch(d){return Aw.DEBUG_BUILD&&v5.logger.warn(`Cannot retrieve integration ${I.id} from the current Client`),null}}addIntegration(I){let d=this._integrations[I.name];if(sO.setupIntegration(this,I,this._integrations),!d)sO.afterSetupIntegrations(this,[I])}sendEvent(I,d={}){this.emit("beforeSendEvent",I,d);let G=wR1.createEventEnvelope(I,this._dsn,this._options._metadata,this._options.tunnel);for(let C of d.attachments||[])G=v5.addItemToEnvelope(G,v5.createAttachmentEnvelopeItem(C,this._options.transportOptions&&this._options.transportOptions.textEncoder));let Z=this._sendEnvelope(G);if(Z)Z.then((C)=>this.emit("afterSendEvent",I,C),null)}sendSession(I){let d=wR1.createSessionEnvelope(I,this._dsn,this._options._metadata,this._options.tunnel);this._sendEnvelope(d)}recordDroppedEvent(I,d,G){if(this._options.sendClientReports){let Z=typeof G==="number"?G:1,C=`${I}:${d}`;Aw.DEBUG_BUILD&&v5.logger.log(`Recording outcome: "${C}"${Z>1?` (${Z} times)`:""}`),this._outcomes[C]=(this._outcomes[C]||0)+Z}}captureAggregateMetrics(I){Aw.DEBUG_BUILD&&v5.logger.log(`Flushing aggregated metrics, number of metrics: ${I.length}`);let d=Vj2.createMetricEnvelope(I,this._dsn,this._options._metadata,this._options.tunnel);this._sendEnvelope(d)}on(I,d){if(!this._hooks[I])this._hooks[I]=[];this._hooks[I].push(d)}emit(I,...d){if(this._hooks[I])this._hooks[I].forEach((G)=>G(...d))}_setupIntegrations(){let{integrations:I}=this._options;this._integrations=sO.setupIntegrations(this,I),sO.afterSetupIntegrations(this,I),this._integrationsInitialized=!0}_updateSessionFromEvent(I,d){let G=!1,Z=!1,C=d.exception&&d.exception.values;if(C){Z=!0;for(let B of C){let A=B.mechanism;if(A&&A.handled===!1){G=!0;break}}}let W=I.status==="ok";if(W&&I.errors===0||W&&G)BR1.updateSession(I,{...G&&{status:"crashed"},errors:I.errors||Number(Z||G)}),this.captureSession(I)}_isClientDoneProcessing(I){return new v5.SyncPromise((d)=>{let G=0,Z=1,C=setInterval(()=>{if(this._numProcessing==0)clearInterval(C),d(!0);else if(G+=Z,I&&G>=I)clearInterval(C),d(!1)},Z)})}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(I,d,G,Z=Aj2.getIsolationScope()){let C=this.getOptions(),W=Object.keys(this._integrations);if(!d.integrations&&W.length>0)d.integrations=W;return this.emit("preprocessEvent",I,d),Yj2.prepareEvent(C,I,d,G,this,Z).then((w)=>{if(w===null)return w;let B={...Z.getPropagationContext(),...G?G.getPropagationContext():void 0};if(!(w.contexts&&w.contexts.trace)&&B){let{traceId:V,spanId:X,parentSpanId:_,dsc:F}=B;w.contexts={trace:{trace_id:V,span_id:X,parent_span_id:_},...w.contexts};let g=F?F:Xj2.getDynamicSamplingContextFromClient(V,this,G);w.sdkProcessingMetadata={dynamicSamplingContext:g,...w.sdkProcessingMetadata}}return w})}_captureEvent(I,d={},G){return this._processEvent(I,d,G).then((Z)=>{return Z.event_id},(Z)=>{if(Aw.DEBUG_BUILD){let C=Z;if(C.logLevel==="log")v5.logger.log(C.message);else v5.logger.warn(C)}return})}_processEvent(I,d,G){let Z=this.getOptions(),{sampleRate:C}=Z,W=YR1(I),w=XR1(I),B=I.type||"error",A=`before send for type \`${B}\``;if(w&&typeof C==="number"&&Math.random()>C)return this.recordDroppedEvent("sample_rate","error",I),v5.rejectedSyncPromise(new v5.SentryError(`Discarding event because it's not included in the random sample (sampling rate = ${C})`,"log"));let V=B==="replay_event"?"replay":B,_=(I.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this._prepareEvent(I,d,G,_).then((F)=>{if(F===null)throw this.recordDroppedEvent("event_processor",V,I),new v5.SentryError("An event processor returned `null`, will not send event.","log");if(d.data&&d.data.__sentry__===!0)return F;let J=Dj2(Z,F,d);return _j2(J,A)}).then((F)=>{if(F===null){if(this.recordDroppedEvent("before_send",V,I),W){let Q=1+(I.spans||[]).length;this.recordDroppedEvent("before_send","span",Q)}throw new v5.SentryError(`${A} returned \`null\`, will not send event.`,"log")}let g=G&&G.getSession();if(!W&&g)this._updateSessionFromEvent(g,F);if(W){let K=F.sdkProcessingMetadata&&F.sdkProcessingMetadata.spanCountBeforeProcessing||0,Q=F.spans?F.spans.length:0,E=K-Q;if(E>0)this.recordDroppedEvent("before_send","span",E)}let J=F.transaction_info;if(W&&J&&F.transaction!==I.transaction)F.transaction_info={...J,source:"custom"};return this.sendEvent(F,d),F}).then(null,(F)=>{if(F instanceof v5.SentryError)throw F;throw this.captureException(F,{data:{__sentry__:!0},originalException:F}),new v5.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${F}`)})}_process(I){this._numProcessing++,I.then((d)=>{return this._numProcessing--,d},(d)=>{return this._numProcessing--,d})}_sendEnvelope(I){if(this.emit("beforeEnvelope",I),this._isEnabled()&&this._transport)return this._transport.send(I).then(null,(d)=>{Aw.DEBUG_BUILD&&v5.logger.error("Error while sending event:",d)});else Aw.DEBUG_BUILD&&v5.logger.error("Transport disabled")}_clearOutcomes(){let I=this._outcomes;return this._outcomes={},Object.keys(I).map((d)=>{let[G,Z]=d.split(":");return{reason:G,category:Z,quantity:I[d]}})}}function _j2(I,d){let G=`${d} must return \`null\` or a valid event.`;if(v5.isThenable(I))return I.then((Z)=>{if(!v5.isPlainObject(Z)&&Z!==null)throw new v5.SentryError(G);return Z},(Z)=>{throw new v5.SentryError(`${d} rejected with ${Z}`)});else if(!v5.isPlainObject(I)&&I!==null)throw new v5.SentryError(G);return I}function Dj2(I,d,G){let{beforeSend:Z,beforeSendTransaction:C}=I;if(XR1(d)&&Z)return Z(d,G);if(YR1(d)&&C){if(d.spans){let W=d.spans.length;d.sdkProcessingMetadata={...d.sdkProcessingMetadata,spanCountBeforeProcessing:W}}return C(d,G)}return d}function XR1(I){return I.type===void 0}function YR1(I){return I.type==="transaction"}function Hj2(I){let d=Bj2.getClient();if(!d||!d.addEventProcessor)return;d.addEventProcessor(I)}_R1.BaseClient=VR1;_R1.addEventProcessor=Hj2});var S11=Y((DR1)=>{Object.defineProperty(DR1,"__esModule",{value:!0});var M11=V0();function Jj2(I,d,G,Z,C){let W={sent_at:new Date().toISOString()};if(G&&G.sdk)W.sdk={name:G.sdk.name,version:G.sdk.version};if(!!Z&&!!C)W.dsn=M11.dsnToString(C);if(d)W.trace=M11.dropUndefinedKeys(d);let w=Kj2(I);return M11.createEnvelope(W,[w])}function Kj2(I){return[{type:"check_in"},I]}DR1.createCheckInEnvelope=Jj2});var cv=Y((HR1)=>{Object.defineProperty(HR1,"__esModule",{value:!0});var zj2="c",Qj2="g",fj2="s",qj2="d",Rj2=5000,Uj2=1e4,vj2=1e4;HR1.COUNTER_METRIC_TYPE=zj2;HR1.DEFAULT_BROWSER_FLUSH_INTERVAL=Rj2;HR1.DEFAULT_FLUSH_INTERVAL=Uj2;HR1.DISTRIBUTION_METRIC_TYPE=qj2;HR1.GAUGE_METRIC_TYPE=Qj2;HR1.MAX_WEIGHT=vj2;HR1.SET_METRIC_TYPE=fj2});var u11=Y((FR1)=>{Object.defineProperty(FR1,"__esModule",{value:!0});var oO=cv(),uj2=xv();class L11{constructor(I){this._value=I}get weight(){return 1}add(I){this._value+=I}toString(){return`${this._value}`}}class y11{constructor(I){this._last=I,this._min=I,this._max=I,this._sum=I,this._count=1}get weight(){return 5}add(I){if(this._last=I,Ithis._max)this._max=I;this._sum+=I,this._count++}toString(){return`${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`}}class P11{constructor(I){this._value=[I]}get weight(){return this._value.length}add(I){this._value.push(I)}toString(){return this._value.join(":")}}class $11{constructor(I){this.first=I,this._value=new Set([I])}get weight(){return this._value.size}add(I){this._value.add(I)}toString(){return Array.from(this._value).map((I)=>typeof I==="string"?uj2.simpleHash(I):I).join(":")}}var Tj2={[oO.COUNTER_METRIC_TYPE]:L11,[oO.GAUGE_METRIC_TYPE]:y11,[oO.DISTRIBUTION_METRIC_TYPE]:P11,[oO.SET_METRIC_TYPE]:$11};FR1.CounterMetric=L11;FR1.DistributionMetric=P11;FR1.GaugeMetric=y11;FR1.METRIC_MAP=Tj2;FR1.SetMetric=$11});var NR1=Y((KR1)=>{Object.defineProperty(KR1,"__esModule",{value:!0});var gR1=V0(),pv=cv(),jj2=u11(),kj2=hv(),eO=xv();class JR1{constructor(I){if(this._client=I,this._buckets=new Map,this._bucketsTotalWeight=0,this._interval=setInterval(()=>this._flush(),pv.DEFAULT_FLUSH_INTERVAL),this._interval.unref)this._interval.unref();this._flushShift=Math.floor(Math.random()*pv.DEFAULT_FLUSH_INTERVAL/1000),this._forceFlush=!1}add(I,d,G,Z="none",C={},W=gR1.timestampInSeconds()){let w=Math.floor(W),B=eO.sanitizeMetricKey(d),A=eO.sanitizeTags(C),V=eO.sanitizeUnit(Z),X=eO.getBucketKey(I,B,V,A),_=this._buckets.get(X),F=_&&I===pv.SET_METRIC_TYPE?_.metric.weight:0;if(_){if(_.metric.add(G),_.timestamp=pv.MAX_WEIGHT)this.flush()}flush(){this._forceFlush=!0,this._flush()}close(){this._forceFlush=!0,clearInterval(this._interval),this._flush()}_flush(){if(this._forceFlush){this._forceFlush=!1,this._bucketsTotalWeight=0,this._captureMetrics(this._buckets),this._buckets.clear();return}let I=Math.floor(gR1.timestampInSeconds())-pv.DEFAULT_FLUSH_INTERVAL/1000-this._flushShift,d=new Map;for(let[G,Z]of this._buckets)if(Z.timestamp<=I)d.set(G,Z),this._bucketsTotalWeight-=Z.metric.weight;for(let[G]of d)this._buckets.delete(G);this._captureMetrics(d)}_captureMetrics(I){if(I.size>0&&this._client.captureAggregateMetrics){let d=Array.from(I).map(([,G])=>G);this._client.captureAggregateMetrics(d)}}}KR1.MetricsAggregator=JR1});var qR1=Y((fR1)=>{Object.defineProperty(fR1,"__esModule",{value:!0});var vA=V0(),cj2=E11(),pj2=S11(),tO=F6(),ij2=iG(),nj2=NR1(),rj2=q11(),aj2=Q11(),sj2=kI(),oj2=XN();DN();var zR1=HF();class QR1 extends cj2.BaseClient{constructor(I){aj2.addTracingExtensions();super(I);if(I._experiments&&I._experiments.metricsAggregator)this.metricsAggregator=new nj2.MetricsAggregator(this)}eventFromException(I,d){return vA.resolvedSyncPromise(vA.eventFromUnknownInput(ij2.getClient(),this._options.stackParser,I,d))}eventFromMessage(I,d="info",G){return vA.resolvedSyncPromise(vA.eventFromMessage(this._options.stackParser,I,d,G,this._options.attachStacktrace))}captureException(I,d,G){if(this._options.autoSessionTracking&&this._sessionFlusher&&G){let Z=G.getRequestSession();if(Z&&Z.status==="ok")Z.status="errored"}return super.captureException(I,d,G)}captureEvent(I,d,G){if(this._options.autoSessionTracking&&this._sessionFlusher&&G){if((I.type||"exception")==="exception"&&I.exception&&I.exception.values&&I.exception.values.length>0){let W=G.getRequestSession();if(W&&W.status==="ok")W.status="errored"}}return super.captureEvent(I,d,G)}close(I){if(this._sessionFlusher)this._sessionFlusher.close();return super.close(I)}initSessionFlusher(){let{release:I,environment:d}=this._options;if(!I)tO.DEBUG_BUILD&&vA.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!");else this._sessionFlusher=new rj2.SessionFlusher(this,{release:I,environment:d})}captureCheckIn(I,d,G){let Z="checkInId"in I&&I.checkInId?I.checkInId:vA.uuid4();if(!this._isEnabled())return tO.DEBUG_BUILD&&vA.logger.warn("SDK not enabled, will not capture checkin."),Z;let C=this.getOptions(),{release:W,environment:w,tunnel:B}=C,A={check_in_id:Z,monitor_slug:I.monitorSlug,status:I.status,release:W,environment:w};if("duration"in I)A.duration=I.duration;if(d)A.monitor_config={schedule:d.schedule,checkin_margin:d.checkinMargin,max_runtime:d.maxRuntime,timezone:d.timezone};let[V,X]=this._getTraceInfoFromScope(G);if(X)A.contexts={trace:X};let _=pj2.createCheckInEnvelope(A,V,this.getSdkMetadata(),B,this.getDsn());return tO.DEBUG_BUILD&&vA.logger.info("Sending checkin:",I.monitorSlug,I.status),this._sendEnvelope(_),Z}_captureRequestSession(){if(!this._sessionFlusher)tO.DEBUG_BUILD&&vA.logger.warn("Discarded request mode session because autoSessionTracking option was disabled");else this._sessionFlusher.incrementSessionStatusCount()}_prepareEvent(I,d,G,Z){if(this._options.platform)I.platform=I.platform||this._options.platform;if(this._options.runtime)I.contexts={...I.contexts,runtime:(I.contexts||{}).runtime||this._options.runtime};if(this._options.serverName)I.server_name=I.server_name||this._options.serverName;return super._prepareEvent(I,d,G,Z)}_getTraceInfoFromScope(I){if(!I)return[void 0,void 0];let d=I.getSpan();if(d)return[oj2.getRootSpan(d)?zR1.getDynamicSamplingContextFromSpan(d):void 0,sj2.spanToTraceContext(d)];let{traceId:G,spanId:Z,parentSpanId:C,dsc:W}=I.getPropagationContext(),w={trace_id:G,span_id:Z,parent_span_id:C};if(W)return[W,w];return[zR1.getDynamicSamplingContextFromClient(G,this,I),w]}}fR1.ServerRuntimeClient=QR1});var ER1=Y((vR1)=>{Object.defineProperty(vR1,"__esModule",{value:!0});var RR1=V0(),tj2=F6(),Ik2=iG(),dk2=ww();function Gk2(I,d){if(d.debug===!0)if(tj2.DEBUG_BUILD)RR1.logger.enable();else RR1.consoleSandbox(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")});Ik2.getCurrentScope().update(d.initialScope);let Z=new I(d);UR1(Z),Zk2(Z)}function UR1(I){let G=dk2.getCurrentHub().getStackTop();G.client=I,G.scope.setClient(I)}function Zk2(I){if(I.init)I.init();else if(I.setupIntegrations)I.setupIntegrations()}vR1.initAndBind=Gk2;vR1.setCurrentClient=UR1});var PR1=Y((yR1)=>{Object.defineProperty(yR1,"__esModule",{value:!0});var cI=V0(),MR1=F6(),LR1=30;function wk2(I,d,G=cI.makePromiseBuffer(I.bufferSize||LR1)){let Z={},C=(w)=>G.drain(w);function W(w){let B=[];if(cI.forEachEnvelopeItem(w,(_,F)=>{let g=cI.envelopeItemTypeToDataCategory(F);if(cI.isRateLimited(Z,g)){let J=SR1(_,F);I.recordDroppedEvent("ratelimit_backoff",g,J)}else B.push(_)}),B.length===0)return cI.resolvedSyncPromise();let A=cI.createEnvelope(w[0],B),V=(_)=>{cI.forEachEnvelopeItem(A,(F,g)=>{let J=SR1(F,g);I.recordDroppedEvent(_,cI.envelopeItemTypeToDataCategory(g),J)})},X=()=>d({body:cI.serializeEnvelope(A,I.textEncoder)}).then((_)=>{if(_.statusCode!==void 0&&(_.statusCode<200||_.statusCode>=300))MR1.DEBUG_BUILD&&cI.logger.warn(`Sentry responded with status code ${_.statusCode} to sent event.`);return Z=cI.updateRateLimits(Z,_),_},(_)=>{throw V("network_error"),_});return G.add(X).then((_)=>_,(_)=>{if(_ instanceof cI.SentryError)return MR1.DEBUG_BUILD&&cI.logger.error("Skipped sending event because buffer is full."),V("queue_overflow"),cI.resolvedSyncPromise();else throw _})}return W.__sentry__baseTransport__=!0,{send:W,flush:C}}function SR1(I,d){if(d!=="event"&&d!=="transaction")return;return Array.isArray(I)?I[1]:void 0}yR1.DEFAULT_TRANSPORT_BUFFER_SIZE=LR1;yR1.createTransport=wk2});var TR1=Y((uR1)=>{Object.defineProperty(uR1,"__esModule",{value:!0});var O11=V0(),Vk2=F6(),$R1=100,m11=5000,Xk2=3600000;function T11(I,d){Vk2.DEBUG_BUILD&&O11.logger.info(`[Offline]: ${I}`,d)}function Yk2(I){return(d)=>{let G=I(d),Z=d.createStore?d.createStore(d):void 0,C=m11,W;function w(X,_,F){if(O11.envelopeContainsItemType(X,["replay_event","replay_recording","client_report"]))return!1;if(d.shouldStore)return d.shouldStore(X,_,F);return!0}function B(X){if(!Z)return;if(W)clearTimeout(W);if(W=setTimeout(async()=>{W=void 0;let _=await Z.pop();if(_)T11("Attempting to send previously queued event"),V(_).catch((F)=>{T11("Failed to retry sending",F)})},X),typeof W!=="number"&&W.unref)W.unref()}function A(){if(W)return;B(C),C=Math.min(C*2,Xk2)}async function V(X){try{let _=await G.send(X),F=$R1;if(_){if(_.headers&&_.headers["retry-after"])F=O11.parseRetryAfterHeader(_.headers["retry-after"]);else if((_.statusCode||0)>=400)return _}return B(F),C=m11,_}catch(_){if(Z&&await w(X,_,C))return await Z.insert(X),A(),T11("Error sending. Event queued",_),{};else throw _}}if(d.flushAtStartup)A();return{send:V,flush:(X)=>G.flush(X)}}}uR1.MIN_DELAY=$R1;uR1.START_DELAY=m11;uR1.makeOfflineTransport=Yk2});var mR1=Y((OR1)=>{Object.defineProperty(OR1,"__esModule",{value:!0});var l11=V0(),Fk2=rO();function b11(I,d){let G;return l11.forEachEnvelopeItem(I,(Z,C)=>{if(d.includes(C))G=Array.isArray(Z)?Z[1]:void 0;return!!G}),G}function gk2(I,d){return(G)=>{let Z=I(G);return{...Z,send:async(C)=>{let W=b11(C,["event","transaction","profile","replay_event"]);if(W)W.release=d;return Z.send(C)}}}}function Jk2(I,d){return l11.createEnvelope(d?{...I[0],dsn:d}:I[0],I[1])}function Kk2(I,d){return(G)=>{let Z=I(G),C=new Map;function W(A,V){let X=V?`${A}:${V}`:A,_=C.get(X);if(!_){let F=l11.dsnFromString(A);if(!F)return;let g=Fk2.getEnvelopeEndpointWithUrlEncodedAuth(F,G.tunnel);_=V?gk2(I,V)({...G,url:g}):I({...G,url:g}),C.set(X,_)}return[A,_]}async function w(A){function V(F){let g=F&&F.length?F:["event"];return b11(A,g)}let X=d({envelope:A,getEvent:V}).map((F)=>{if(typeof F==="string")return W(F,void 0);else return W(F.dsn,F.release)}).filter((F)=>!!F);if(X.length===0)X.push(["",Z]);return(await Promise.all(X.map(([F,g])=>g.send(Jk2(A,F)))))[0]}async function B(A){let V=[await Z.flush(A)];for(let[,X]of C)V.push(await X.flush(A));return V.every((X)=>X)}return{send:w,flush:B}}}OR1.eventFromEnvelope=b11;OR1.makeMultiplexedTransport=Kk2});var hR1=Y((bR1)=>{Object.defineProperty(bR1,"__esModule",{value:!0});var lR1=V0();function Qk2(I,d){let G={sent_at:new Date().toISOString()};if(d)G.dsn=lR1.dsnToString(d);let Z=I.map(fk2);return lR1.createEnvelope(G,Z)}function fk2(I){return[{type:"span"},I]}bR1.createSpanEnvelope=Qk2});var xR1=Y((kR1)=>{Object.defineProperty(kR1,"__esModule",{value:!0});function Rk2(I,d){let G=d&&Ek2(d)?d.getClient():d,Z=G&&G.getDsn(),C=G&&G.getOptions().tunnel;return vk2(I,Z)||Uk2(I,C)}function Uk2(I,d){if(!d)return!1;return jR1(I)===jR1(d)}function vk2(I,d){return d?I.includes(d.host):!1}function jR1(I){return I[I.length-1]==="/"?I.slice(0,-1):I}function Ek2(I){return I.getClient!==void 0}kR1.isSentryRequestUrl=Rk2});var pR1=Y((cR1)=>{Object.defineProperty(cR1,"__esModule",{value:!0});function Sk2(I,...d){let G=new String(String.raw(I,...d));return G.__sentry_template_string__=I.join("\x00").replace(/%/g,"%%").replace(/\0/g,"%s"),G.__sentry_template_values__=d,G}cR1.parameterize=Sk2});var rR1=Y((nR1)=>{Object.defineProperty(nR1,"__esModule",{value:!0});var iR1=yO();function yk2(I,d,G=[d],Z="npm"){let C=I._metadata||{};if(!C.sdk)C.sdk={name:`sentry.javascript.${d}`,packages:G.map((W)=>({name:`${Z}:@sentry/${W}`,version:iR1.SDK_VERSION})),version:iR1.SDK_VERSION};I._metadata=C}nR1.applySdkMetadata=yk2});var tR1=Y((eR1)=>{Object.defineProperty(eR1,"__esModule",{value:!0});var h11=V0(),sR1=new Map,aR1=new Set;function $k2(I){if(!h11.GLOBAL_OBJ._sentryModuleMetadata)return;for(let d of Object.keys(h11.GLOBAL_OBJ._sentryModuleMetadata)){let G=h11.GLOBAL_OBJ._sentryModuleMetadata[d];if(aR1.has(d))continue;aR1.add(d);let Z=I(d);for(let C of Z.reverse())if(C.filename){sR1.set(C.filename,G);break}}}function oR1(I,d){return $k2(I),sR1.get(d)}function uk2(I,d){try{d.exception.values.forEach((G)=>{if(!G.stacktrace)return;for(let Z of G.stacktrace.frames||[]){if(!Z.filename)continue;let C=oR1(I,Z.filename);if(C)Z.module_metadata=C}})}catch(G){}}function Tk2(I){try{I.exception.values.forEach((d)=>{if(!d.stacktrace)return;for(let G of d.stacktrace.frames||[])delete G.module_metadata})}catch(d){}}eR1.addMetadataToStackFrames=uk2;eR1.getMetadataForUrl=oR1;eR1.stripMetadataFromStackFrames=Tk2});var WU1=Y((CU1)=>{Object.defineProperty(CU1,"__esModule",{value:!0});var bk2=V0(),dU1=UA(),IU1=tR1(),GU1="ModuleMetadata",hk2=()=>{return{name:GU1,setupOnce(){},setup(I){if(typeof I.on!=="function")return;I.on("beforeEnvelope",(d)=>{bk2.forEachEnvelopeItem(d,(G,Z)=>{if(Z==="event"){let C=Array.isArray(G)?G[1]:void 0;if(C)IU1.stripMetadataFromStackFrames(C),G[1]=C}})})},processEvent(I,d,G){let Z=G.getOptions().stackParser;return IU1.addMetadataToStackFrames(Z,I),I}}},ZU1=dU1.defineIntegration(hk2),jk2=dU1.convertIntegrationFnToClass(GU1,ZU1);CU1.ModuleMetadata=jk2;CU1.moduleMetadataIntegration=ZU1});var YU1=Y((XU1)=>{Object.defineProperty(XU1,"__esModule",{value:!0});var wU1=V0(),BU1=UA(),ck2=kI(),j11={include:{cookies:!0,data:!0,headers:!0,ip:!1,query_string:!0,url:!0,user:{id:!0,username:!0,email:!0}},transactionNamingScheme:"methodPath"},AU1="RequestData",pk2=(I={})=>{let d=wU1.addRequestDataToEvent,G={...j11,...I,include:{method:!0,...j11.include,...I.include,user:I.include&&typeof I.include.user==="boolean"?I.include.user:{...j11.include.user,...(I.include||{}).user}}};return{name:AU1,setupOnce(){},processEvent(Z,C,W){let{transactionNamingScheme:w}=G,{sdkProcessingMetadata:B={}}=Z,A=B.request;if(!A)return Z;let V=B.requestDataOptionsFromExpressHandler||B.requestDataOptionsFromGCPWrapper||nk2(G),X=d(Z,A,V);if(Z.type==="transaction"||w==="handler")return X;let F=A._sentryTransaction;if(F){let g=ck2.spanToJSON(F).description||"",J=rk2(W)==="sentry.javascript.nextjs"?g.startsWith("/api"):w!=="path",[K]=wU1.extractPathForTransaction(A,{path:!0,method:J,customRoute:g});X.transaction=K}return X}}},VU1=BU1.defineIntegration(pk2),ik2=BU1.convertIntegrationFnToClass(AU1,VU1);function nk2(I){let{transactionNamingScheme:d,include:{ip:G,user:Z,...C}}=I,W=[];for(let[B,A]of Object.entries(C))if(A)W.push(B);let w;if(Z===void 0)w=!0;else if(typeof Z==="boolean")w=Z;else{let B=[];for(let[A,V]of Object.entries(Z))if(V)B.push(A);w=B}return{include:{ip:G,user:w,request:W.length!==0?W:void 0,transaction:d}}}function rk2(I){try{return I.getOptions()._metadata.sdk.name}catch(d){return}}XU1.RequestData=ik2;XU1.requestDataIntegration=VU1});var k11=Y((FU1)=>{Object.defineProperty(FU1,"__esModule",{value:!0});var W8=V0(),KF=F6(),_U1=UA(),ok2=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/],ek2=[/^.*\/healthcheck$/,/^.*\/healthy$/,/^.*\/live$/,/^.*\/ready$/,/^.*\/heartbeat$/,/^.*\/health$/,/^.*\/healthz$/],DU1="InboundFilters",tk2=(I={})=>{return{name:DU1,setupOnce(){},processEvent(d,G,Z){let C=Z.getOptions(),W=dx2(I,C);return Gx2(d,W)?null:d}}},HU1=_U1.defineIntegration(tk2),Ix2=_U1.convertIntegrationFnToClass(DU1,HU1);function dx2(I={},d={}){return{allowUrls:[...I.allowUrls||[],...d.allowUrls||[]],denyUrls:[...I.denyUrls||[],...d.denyUrls||[]],ignoreErrors:[...I.ignoreErrors||[],...d.ignoreErrors||[],...I.disableErrorDefaults?[]:ok2],ignoreTransactions:[...I.ignoreTransactions||[],...d.ignoreTransactions||[],...I.disableTransactionDefaults?[]:ek2],ignoreInternal:I.ignoreInternal!==void 0?I.ignoreInternal:!0}}function Gx2(I,d){if(d.ignoreInternal&&Ax2(I))return KF.DEBUG_BUILD&&W8.logger.warn(`Event dropped due to being internal Sentry Error. +Event: ${W8.getEventDescription(I)}`),!0;if(Zx2(I,d.ignoreErrors))return KF.DEBUG_BUILD&&W8.logger.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${W8.getEventDescription(I)}`),!0;if(Cx2(I,d.ignoreTransactions))return KF.DEBUG_BUILD&&W8.logger.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${W8.getEventDescription(I)}`),!0;if(Wx2(I,d.denyUrls))return KF.DEBUG_BUILD&&W8.logger.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${W8.getEventDescription(I)}. +Url: ${Im(I)}`),!0;if(!wx2(I,d.allowUrls))return KF.DEBUG_BUILD&&W8.logger.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${W8.getEventDescription(I)}. +Url: ${Im(I)}`),!0;return!1}function Zx2(I,d){if(I.type||!d||!d.length)return!1;return Bx2(I).some((G)=>W8.stringMatchesSomePattern(G,d))}function Cx2(I,d){if(I.type!=="transaction"||!d||!d.length)return!1;let G=I.transaction;return G?W8.stringMatchesSomePattern(G,d):!1}function Wx2(I,d){if(!d||!d.length)return!1;let G=Im(I);return!G?!1:W8.stringMatchesSomePattern(G,d)}function wx2(I,d){if(!d||!d.length)return!0;let G=Im(I);return!G?!0:W8.stringMatchesSomePattern(G,d)}function Bx2(I){let d=[];if(I.message)d.push(I.message);let G;try{G=I.exception.values[I.exception.values.length-1]}catch(Z){}if(G){if(G.value){if(d.push(G.value),G.type)d.push(`${G.type}: ${G.value}`)}}if(KF.DEBUG_BUILD&&d.length===0)W8.logger.error(`Could not extract message for event ${W8.getEventDescription(I)}`);return d}function Ax2(I){try{return I.exception.values[0].type==="SentryError"}catch(d){}return!1}function Vx2(I=[]){for(let d=I.length-1;d>=0;d--){let G=I[d];if(G&&G.filename!==""&&G.filename!=="[native code]")return G.filename||null}return null}function Im(I){try{let d;try{d=I.exception.values[0].stacktrace.frames}catch(G){}return d?Vx2(d):null}catch(d){return KF.DEBUG_BUILD&&W8.logger.error(`Cannot extract url for event ${W8.getEventDescription(I)}`),null}}FU1.InboundFilters=Ix2;FU1.inboundFiltersIntegration=HU1});var x11=Y((QU1)=>{Object.defineProperty(QU1,"__esModule",{value:!0});var _x2=V0(),Dx2=iG(),KU1=UA(),gU1,NU1="FunctionToString",JU1=new WeakMap,Hx2=()=>{return{name:NU1,setupOnce(){gU1=Function.prototype.toString;try{Function.prototype.toString=function(...I){let d=_x2.getOriginalFunction(this),G=JU1.has(Dx2.getClient())&&d!==void 0?d:this;return gU1.apply(G,I)}}catch(I){}},setup(I){JU1.set(I,!0)}}},zU1=KU1.defineIntegration(Hx2),Fx2=KU1.convertIntegrationFnToClass(NU1,zU1);QU1.FunctionToString=Fx2;QU1.functionToStringIntegration=zU1});var c11=Y((vU1)=>{Object.defineProperty(vU1,"__esModule",{value:!0});var fU1=V0(),qU1=UA(),Kx2="cause",Nx2=5,RU1="LinkedErrors",zx2=(I={})=>{let d=I.limit||Nx2,G=I.key||Kx2;return{name:RU1,setupOnce(){},preprocessEvent(Z,C,W){let w=W.getOptions();fU1.applyAggregateErrorsToEvent(fU1.exceptionFromError,w.stackParser,w.maxValueLength,G,d,Z,C)}}},UU1=qU1.defineIntegration(zx2),Qx2=qU1.convertIntegrationFnToClass(RU1,UU1);vU1.LinkedErrors=Qx2;vU1.linkedErrorsIntegration=UU1});var MU1=Y((EU1)=>{Object.defineProperty(EU1,"__esModule",{value:!0});var Rx2=x11(),Ux2=k11(),vx2=c11();EU1.FunctionToString=Rx2.FunctionToString;EU1.InboundFilters=Ux2.InboundFilters;EU1.LinkedErrors=vx2.LinkedErrors});var PU1=Y((yU1)=>{Object.defineProperty(yU1,"__esModule",{value:!0});var Lx2=V0(),SU1=cv(),yx2=u11(),Px2=hv(),dm=xv();class LU1{constructor(I){this._client=I,this._buckets=new Map,this._interval=setInterval(()=>this.flush(),SU1.DEFAULT_BROWSER_FLUSH_INTERVAL)}add(I,d,G,Z="none",C={},W=Lx2.timestampInSeconds()){let w=Math.floor(W),B=dm.sanitizeMetricKey(d),A=dm.sanitizeTags(C),V=dm.sanitizeUnit(Z),X=dm.getBucketKey(I,B,V,A),_=this._buckets.get(X),F=_&&I===SU1.SET_METRIC_TYPE?_.metric.weight:0;if(_){if(_.metric.add(G),_.timestampd);this._client.captureAggregateMetrics(I)}this._buckets.clear()}close(){clearInterval(this._interval),this.flush()}}yU1.BrowserMetricsAggregator=LU1});var mU1=Y((OU1)=>{Object.defineProperty(OU1,"__esModule",{value:!0});var $U1=UA(),ux2=PU1(),uU1="MetricsAggregator",Tx2=()=>{return{name:uU1,setupOnce(){},setup(I){I.metricsAggregator=new ux2.BrowserMetricsAggregator(I)}}},TU1=$U1.defineIntegration(Tx2),Ox2=$U1.convertIntegrationFnToClass(uU1,TU1);OU1.MetricsAggregator=Ox2;OU1.metricsAggregatorIntegration=TU1});var nU1=Y((iU1)=>{Object.defineProperty(iU1,"__esModule",{value:!0});var lU1=V0(),bU1=F6(),hU1=iG(),bx2=kI(),Gm=cv(),jU1=mU1();function Zm(I,d,G,Z={}){let C=hU1.getClient(),W=hU1.getCurrentScope();if(C){if(!C.metricsAggregator){bU1.DEBUG_BUILD&&lU1.logger.warn("No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs");return}let{unit:w,tags:B,timestamp:A}=Z,{release:V,environment:X}=C.getOptions(),_=W.getTransaction(),F={};if(V)F.release=V;if(X)F.environment=X;if(_)F.transaction=bx2.spanToJSON(_).description||"";bU1.DEBUG_BUILD&&lU1.logger.log(`Adding value of ${G} to ${I} metric ${d}`),C.metricsAggregator.add(I,d,G,w,{...F,...B},A)}}function kU1(I,d=1,G){Zm(Gm.COUNTER_METRIC_TYPE,I,d,G)}function xU1(I,d,G){Zm(Gm.DISTRIBUTION_METRIC_TYPE,I,d,G)}function cU1(I,d,G){Zm(Gm.SET_METRIC_TYPE,I,d,G)}function pU1(I,d,G){Zm(Gm.GAUGE_METRIC_TYPE,I,d,G)}var hx2={increment:kU1,distribution:xU1,set:cU1,gauge:pU1,MetricsAggregator:jU1.MetricsAggregator,metricsAggregatorIntegration:jU1.metricsAggregatorIntegration};iU1.distribution=xU1;iU1.gauge=pU1;iU1.increment=kU1;iU1.metrics=hx2;iU1.set=cU1});var V4=Y((n11)=>{Object.defineProperty(n11,"__esModule",{value:!0});var rU1=Q11(),aU1=N11(),ix2=jO(),nx2=cO(),sU1=uO(),Cm=DN(),NF=hO(),oU1=HF(),rx2=rq1(),ax2=z11(),iv=jv(),eU1=f11(),L9=iG(),Vw=ww(),p11=VN(),sx2=q11(),i11=MO(),tU1=Pv(),Iv1=rO(),dv1=E11(),ox2=qR1(),Gv1=ER1(),ex2=PR1(),tx2=TR1(),Ic2=mR1(),dc2=yO(),Wm=UA(),Zv1=EO(),Gc2=vO(),Zc2=S11(),Cc2=hR1(),Wc2=OO(),wc2=xR1(),Bc2=F11(),Ac2=pR1(),wm=kI(),Vc2=XN(),Xc2=rR1(),Yc2=AN(),Cv1=WU1(),Wv1=YU1(),wv1=k11(),Bv1=x11(),Av1=c11(),_c2=MU1(),Dc2=nU1(),Hc2=_c2;n11.addTracingExtensions=rU1.addTracingExtensions;n11.startIdleTransaction=rU1.startIdleTransaction;n11.IdleTransaction=aU1.IdleTransaction;n11.TRACING_DEFAULTS=aU1.TRACING_DEFAULTS;n11.Span=ix2.Span;n11.Transaction=nx2.Transaction;n11.extractTraceparentData=sU1.extractTraceparentData;n11.getActiveTransaction=sU1.getActiveTransaction;Object.defineProperty(n11,"SpanStatus",{enumerable:!0,get:()=>Cm.SpanStatus});n11.getSpanStatusFromHttpCode=Cm.getSpanStatusFromHttpCode;n11.setHttpStatus=Cm.setHttpStatus;n11.spanStatusfromHttpCode=Cm.spanStatusfromHttpCode;n11.continueTrace=NF.continueTrace;n11.getActiveSpan=NF.getActiveSpan;n11.startActiveSpan=NF.startActiveSpan;n11.startInactiveSpan=NF.startInactiveSpan;n11.startSpan=NF.startSpan;n11.startSpanManual=NF.startSpanManual;n11.trace=NF.trace;n11.getDynamicSamplingContextFromClient=oU1.getDynamicSamplingContextFromClient;n11.getDynamicSamplingContextFromSpan=oU1.getDynamicSamplingContextFromSpan;n11.setMeasurement=rx2.setMeasurement;n11.isValidSampleRate=ax2.isValidSampleRate;n11.SEMANTIC_ATTRIBUTE_PROFILE_ID=iv.SEMANTIC_ATTRIBUTE_PROFILE_ID;n11.SEMANTIC_ATTRIBUTE_SENTRY_OP=iv.SEMANTIC_ATTRIBUTE_SENTRY_OP;n11.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=iv.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN;n11.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=iv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE;n11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=iv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE;n11.createEventEnvelope=eU1.createEventEnvelope;n11.createSessionEnvelope=eU1.createSessionEnvelope;n11.addBreadcrumb=L9.addBreadcrumb;n11.captureCheckIn=L9.captureCheckIn;n11.captureEvent=L9.captureEvent;n11.captureException=L9.captureException;n11.captureMessage=L9.captureMessage;n11.captureSession=L9.captureSession;n11.close=L9.close;n11.configureScope=L9.configureScope;n11.endSession=L9.endSession;n11.flush=L9.flush;n11.getClient=L9.getClient;n11.getCurrentScope=L9.getCurrentScope;n11.isInitialized=L9.isInitialized;n11.lastEventId=L9.lastEventId;n11.setContext=L9.setContext;n11.setExtra=L9.setExtra;n11.setExtras=L9.setExtras;n11.setTag=L9.setTag;n11.setTags=L9.setTags;n11.setUser=L9.setUser;n11.startSession=L9.startSession;n11.startTransaction=L9.startTransaction;n11.withActiveSpan=L9.withActiveSpan;n11.withIsolationScope=L9.withIsolationScope;n11.withMonitor=L9.withMonitor;n11.withScope=L9.withScope;n11.Hub=Vw.Hub;n11.ensureHubOnCarrier=Vw.ensureHubOnCarrier;n11.getCurrentHub=Vw.getCurrentHub;n11.getHubFromCarrier=Vw.getHubFromCarrier;n11.getIsolationScope=Vw.getIsolationScope;n11.getMainCarrier=Vw.getMainCarrier;n11.makeMain=Vw.makeMain;n11.runWithAsyncContext=Vw.runWithAsyncContext;n11.setAsyncContextStrategy=Vw.setAsyncContextStrategy;n11.setHubOnCarrier=Vw.setHubOnCarrier;n11.closeSession=p11.closeSession;n11.makeSession=p11.makeSession;n11.updateSession=p11.updateSession;n11.SessionFlusher=sx2.SessionFlusher;n11.Scope=i11.Scope;n11.getGlobalScope=i11.getGlobalScope;n11.setGlobalScope=i11.setGlobalScope;n11.addGlobalEventProcessor=tU1.addGlobalEventProcessor;n11.notifyEventProcessors=tU1.notifyEventProcessors;n11.getEnvelopeEndpointWithUrlEncodedAuth=Iv1.getEnvelopeEndpointWithUrlEncodedAuth;n11.getReportDialogEndpoint=Iv1.getReportDialogEndpoint;n11.BaseClient=dv1.BaseClient;n11.addEventProcessor=dv1.addEventProcessor;n11.ServerRuntimeClient=ox2.ServerRuntimeClient;n11.initAndBind=Gv1.initAndBind;n11.setCurrentClient=Gv1.setCurrentClient;n11.createTransport=ex2.createTransport;n11.makeOfflineTransport=tx2.makeOfflineTransport;n11.makeMultiplexedTransport=Ic2.makeMultiplexedTransport;n11.SDK_VERSION=dc2.SDK_VERSION;n11.addIntegration=Wm.addIntegration;n11.convertIntegrationFnToClass=Wm.convertIntegrationFnToClass;n11.defineIntegration=Wm.defineIntegration;n11.getIntegrationsToSetup=Wm.getIntegrationsToSetup;n11.applyScopeDataToEvent=Zv1.applyScopeDataToEvent;n11.mergeScopeData=Zv1.mergeScopeData;n11.prepareEvent=Gc2.prepareEvent;n11.createCheckInEnvelope=Zc2.createCheckInEnvelope;n11.createSpanEnvelope=Cc2.createSpanEnvelope;n11.hasTracingEnabled=Wc2.hasTracingEnabled;n11.isSentryRequestUrl=wc2.isSentryRequestUrl;n11.handleCallbackErrors=Bc2.handleCallbackErrors;n11.parameterize=Ac2.parameterize;n11.spanIsSampled=wm.spanIsSampled;n11.spanToJSON=wm.spanToJSON;n11.spanToTraceContext=wm.spanToTraceContext;n11.spanToTraceHeader=wm.spanToTraceHeader;n11.getRootSpan=Vc2.getRootSpan;n11.applySdkMetadata=Xc2.applySdkMetadata;n11.DEFAULT_ENVIRONMENT=Yc2.DEFAULT_ENVIRONMENT;n11.ModuleMetadata=Cv1.ModuleMetadata;n11.moduleMetadataIntegration=Cv1.moduleMetadataIntegration;n11.RequestData=Wv1.RequestData;n11.requestDataIntegration=Wv1.requestDataIntegration;n11.InboundFilters=wv1.InboundFilters;n11.inboundFiltersIntegration=wv1.inboundFiltersIntegration;n11.FunctionToString=Bv1.FunctionToString;n11.functionToStringIntegration=Bv1.functionToStringIntegration;n11.LinkedErrors=Av1.LinkedErrors;n11.linkedErrorsIntegration=Av1.linkedErrorsIntegration;n11.metrics=Dc2.metrics;n11.Integrations=Hc2});var pI=Y((Vv1)=>{Object.defineProperty(Vv1,"__esModule",{value:!0});var Ri2=typeof __SENTRY_DEBUG__==="undefined"||__SENTRY_DEBUG__;Vv1.DEBUG_BUILD=Ri2});var iX=Y((Yv1)=>{var{_optionalChain:Xv1}=V0();Object.defineProperty(Yv1,"__esModule",{value:!0});function vi2(I){let d=Xv1([I,"call",(Z)=>Z(),"access",(Z)=>Z.getClient,"call",(Z)=>Z(),"optionalAccess",(Z)=>Z.getOptions,"call",(Z)=>Z()]);return(Xv1([d,"optionalAccess",(Z)=>Z.instrumenter])||"sentry")!=="sentry"}Yv1.shouldDisableAutoInstrumentation=vi2});var gv1=Y((Fv1)=>{var{_optionalChain:Xw}=V0();Object.defineProperty(Fv1,"__esModule",{value:!0});var r11=V4(),iI=V0(),Bm=pI(),Mi2=iX();class Am{static __initStatic(){this.id="Express"}constructor(I={}){this.name=Am.id,this._router=I.router||I.app,this._methods=(Array.isArray(I.methods)?I.methods:[]).concat("use")}setupOnce(I,d){if(!this._router){Bm.DEBUG_BUILD&&iI.logger.error("ExpressIntegration is missing an Express instance");return}if(Mi2.shouldDisableAutoInstrumentation(d)){Bm.DEBUG_BUILD&&iI.logger.log("Express Integration is skipped because of instrumenter configuration.");return}yi2(this._router,this._methods),Pi2(this._router)}}Am.__initStatic();function _v1(I,d){let G=I.length;switch(G){case 2:return function(Z,C){let W=C.__sentry_transaction;if(W){let w=W.startChild({description:I.name,op:`middleware.express.${d}`,origin:"auto.middleware.express"});C.once("finish",()=>{w.end()})}return I.call(this,Z,C)};case 3:return function(Z,C,W){let w=C.__sentry_transaction,B=Xw([w,"optionalAccess",(A)=>A.startChild,"call",(A)=>A({description:I.name,op:`middleware.express.${d}`,origin:"auto.middleware.express"})]);I.call(this,Z,C,function(...A){Xw([B,"optionalAccess",(V)=>V.end,"call",(V)=>V()]),W.call(this,...A)})};case 4:return function(Z,C,W,w){let B=W.__sentry_transaction,A=Xw([B,"optionalAccess",(V)=>V.startChild,"call",(V)=>V({description:I.name,op:`middleware.express.${d}`,origin:"auto.middleware.express"})]);I.call(this,Z,C,W,function(...V){Xw([A,"optionalAccess",(X)=>X.end,"call",(X)=>X()]),w.call(this,...V)})};default:throw new Error(`Express middleware takes 2-4 arguments. Got: ${G}`)}}function Si2(I,d){return I.map((G)=>{if(typeof G==="function")return _v1(G,d);if(Array.isArray(G))return G.map((Z)=>{if(typeof Z==="function")return _v1(Z,d);return Z});return G})}function Li2(I,d){let G=I[d];return I[d]=function(...Z){return G.call(this,...Si2(Z,d))},I}function yi2(I,d=[]){d.forEach((G)=>Li2(I,G))}function Pi2(I){let d="settings"in I;if(d&&I._router===void 0&&I.lazyrouter)I.lazyrouter();let G=d?I._router:I;if(!G){Bm.DEBUG_BUILD&&iI.logger.debug("Cannot instrument router for URL Parameterization (did not find a valid router)."),Bm.DEBUG_BUILD&&iI.logger.debug("Routing instrumentation is currently only supported in Express 4.");return}let Z=Object.getPrototypeOf(G),C=Z.process_params;Z.process_params=function W(w,B,A,V,X){if(!A._reconstructedRoute)A._reconstructedRoute="";let{layerRoutePath:_,isRegex:F,isArray:g,numExtraSegments:J}=$i2(w);if(_||F||g)A._hasParameters=!0;let K;if(_)K=_;else K=Hv1(A.originalUrl,A._reconstructedRoute,w.path)||"";let Q=K.split("/").filter((P)=>P.length>0&&(F||g||!P.includes("*"))).join("/");if(Q&&Q.length>0)A._reconstructedRoute+=`/${Q}${F?"/":""}`;let E=iI.getNumberOfUrlSegments(iI.stripUrlQueryAndFragment(A.originalUrl||""))+J,S=iI.getNumberOfUrlSegments(A._reconstructedRoute);if(E===S){if(!A._hasParameters){if(A._reconstructedRoute!==A.originalUrl)A._reconstructedRoute=A.originalUrl?iI.stripUrlQueryAndFragment(A.originalUrl):A.originalUrl}let P=V.__sentry_transaction,$=P&&r11.spanToJSON(P).data||{};if(P&&$[r11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]!=="custom"){let h=A._reconstructedRoute||"/",[O,T]=iI.extractPathForTransaction(A,{path:!0,method:!0,customRoute:h});P.updateName(O),P.setAttribute(r11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,T)}}return C.call(this,w,B,A,V,X)}}var Dv1=(I,d,G)=>{if(!I||!d||!G||Object.keys(G).length===0||!Xw([G,"access",(V)=>V[0],"optionalAccess",(V)=>V.offset]))return;let Z=G.sort((V,X)=>V.offset-X.offset),W=new RegExp(d,`${d.flags}d`).exec(I);if(!W||!W.indices)return;let[,...w]=W.indices;if(w.length!==Z.length)return;let B=I,A=0;return w.forEach((V,X)=>{if(V){let[_,F]=V,g=B.substring(0,_-A),J=`:${Z[X].name}`,K=B.substring(F-A);B=g+J+K,A=A+(F-_-J.length)}}),B};function $i2(I){let d=Xw([I,"access",(w)=>w.route,"optionalAccess",(w)=>w.path]),G=iI.isRegExp(d),Z=Array.isArray(d);if(!d){let[w]=iI.GLOBAL_OBJ.process.versions.node.split(".").map(Number);if(w>=16)d=Dv1(I.path,I.regexp,I.keys)}if(!d)return{isRegex:G,isArray:Z,numExtraSegments:0};let C=Z?Math.max(ui2(d)-iI.getNumberOfUrlSegments(I.path||""),0):0;return{layerRoutePath:Ti2(Z,d),isRegex:G,isArray:Z,numExtraSegments:C}}function ui2(I){return I.reduce((d,G)=>{return d+iI.getNumberOfUrlSegments(G.toString())},0)}function Ti2(I,d){if(I)return d.map((G)=>G.toString()).join(",");return d&&d.toString()}function Hv1(I,d,G){let Z=iI.stripUrlQueryAndFragment(I||""),C=Xw([Z,"optionalAccess",(A)=>A.split,"call",(A)=>A("/"),"access",(A)=>A.filter,"call",(A)=>A((V)=>!!V)]),W=0,w=Xw([d,"optionalAccess",(A)=>A.split,"call",(A)=>A("/"),"access",(A)=>A.filter,"call",(A)=>A((V)=>!!V),"access",(A)=>A.length])||0;return Xw([G,"optionalAccess",(A)=>A.split,"call",(A)=>A("/"),"access",(A)=>A.filter,"call",(A)=>A((V)=>{if(Xw([C,"optionalAccess",(X)=>X[w+W]])===V)return W+=1,!0;return!1}),"access",(A)=>A.join,"call",(A)=>A("/")])}Fv1.Express=Am;Fv1.extractOriginalRoute=Dv1;Fv1.preventDuplicateSegments=Hv1});var Kv1=Y((Jv1)=>{var{_optionalChain:zN}=V0();Object.defineProperty(Jv1,"__esModule",{value:!0});var QN=V0(),a11=pI(),bi2=iX();class Vm{static __initStatic(){this.id="Postgres"}constructor(I={}){this.name=Vm.id,this._usePgNative=!!I.usePgNative,this._module=I.module}loadDependency(){return this._module=this._module||QN.loadModule("pg")}setupOnce(I,d){if(bi2.shouldDisableAutoInstrumentation(d)){a11.DEBUG_BUILD&&QN.logger.log("Postgres Integration is skipped because of instrumenter configuration.");return}let G=this.loadDependency();if(!G){a11.DEBUG_BUILD&&QN.logger.error("Postgres Integration was unable to require `pg` package.");return}let Z=this._usePgNative?zN([G,"access",(C)=>C.native,"optionalAccess",(C)=>C.Client]):G.Client;if(!Z){a11.DEBUG_BUILD&&QN.logger.error("Postgres Integration was unable to access 'pg-native' bindings.");return}QN.fill(Z.prototype,"query",function(C){return function(W,w,B){let V=d().getScope().getSpan(),X={"db.system":"postgresql"};try{if(this.database)X["db.name"]=this.database;if(this.host)X["server.address"]=this.host;if(this.port)X["server.port"]=this.port;if(this.user)X["db.user"]=this.user}catch(g){}let _=zN([V,"optionalAccess",(g)=>g.startChild,"call",(g)=>g({description:typeof W==="string"?W:W.text,op:"db",origin:"auto.db.postgres",data:X})]);if(typeof B==="function")return C.call(this,W,w,function(g,J){zN([_,"optionalAccess",(K)=>K.end,"call",(K)=>K()]),B(g,J)});if(typeof w==="function")return C.call(this,W,function(g,J){zN([_,"optionalAccess",(K)=>K.end,"call",(K)=>K()]),w(g,J)});let F=typeof w!=="undefined"?C.call(this,W,w):C.call(this,W);if(QN.isThenable(F))return F.then((g)=>{return zN([_,"optionalAccess",(J)=>J.end,"call",(J)=>J()]),g});return zN([_,"optionalAccess",(g)=>g.end,"call",(g)=>g()]),F}})}}Vm.__initStatic();Jv1.Postgres=Vm});var zv1=Y((Nv1)=>{var{_optionalChain:ji2}=V0();Object.defineProperty(Nv1,"__esModule",{value:!0});var nv=V0(),s11=pI(),ki2=iX();class Xm{static __initStatic(){this.id="Mysql"}constructor(){this.name=Xm.id}loadDependency(){return this._module=this._module||nv.loadModule("mysql/lib/Connection.js")}setupOnce(I,d){if(ki2.shouldDisableAutoInstrumentation(d)){s11.DEBUG_BUILD&&nv.logger.log("Mysql Integration is skipped because of instrumenter configuration.");return}let G=this.loadDependency();if(!G){s11.DEBUG_BUILD&&nv.logger.error("Mysql Integration was unable to require `mysql` package.");return}let Z=void 0;try{G.prototype.connect=new Proxy(G.prototype.connect,{apply(w,B,A){if(!Z)Z=B.config;return w.apply(B,A)}})}catch(w){s11.DEBUG_BUILD&&nv.logger.error("Mysql Integration was unable to instrument `mysql` config.")}function C(){if(!Z)return{};return{"server.address":Z.host,"server.port":Z.port,"db.user":Z.user}}function W(w){if(!w)return;let B=C();Object.keys(B).forEach((A)=>{w.setAttribute(A,B[A])}),w.end()}nv.fill(G,"createQuery",function(w){return function(B,A,V){let _=d().getScope().getSpan(),F=ji2([_,"optionalAccess",(J)=>J.startChild,"call",(J)=>J({description:typeof B==="string"?B:B.sql,op:"db",origin:"auto.db.mysql",data:{"db.system":"mysql"}})]);if(typeof V==="function")return w.call(this,B,A,function(J,K,Q){W(F),V(J,K,Q)});if(typeof A==="function")return w.call(this,B,function(J,K,Q){W(F),A(J,K,Q)});let g=w.call(this,B,A);return g.on("end",()=>{W(F)}),g}})}}Xm.__initStatic();Nv1.Mysql=Xm});var qv1=Y((fv1)=>{var{_optionalChain:nX}=V0();Object.defineProperty(fv1,"__esModule",{value:!0});var rv=V0(),Qv1=pI(),ci2=iX(),pi2=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],ii2={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]};function ni2(I){return I&&typeof I==="object"&&I.once&&typeof I.once==="function"}class Ym{static __initStatic(){this.id="Mongo"}constructor(I={}){this.name=Ym.id,this._operations=Array.isArray(I.operations)?I.operations:pi2,this._describeOperations="describeOperations"in I?I.describeOperations:!0,this._useMongoose=!!I.useMongoose}loadDependency(){let I=this._useMongoose?"mongoose":"mongodb";return this._module=this._module||rv.loadModule(I)}setupOnce(I,d){if(ci2.shouldDisableAutoInstrumentation(d)){Qv1.DEBUG_BUILD&&rv.logger.log("Mongo Integration is skipped because of instrumenter configuration.");return}let G=this.loadDependency();if(!G){let Z=this._useMongoose?"mongoose":"mongodb";Qv1.DEBUG_BUILD&&rv.logger.error(`Mongo Integration was unable to require \`${Z}\` package.`);return}this._instrumentOperations(G.Collection,this._operations,d)}_instrumentOperations(I,d,G){d.forEach((Z)=>this._patchOperation(I,Z,G))}_patchOperation(I,d,G){if(!(d in I.prototype))return;let Z=this._getSpanContextFromOperationArguments.bind(this);rv.fill(I.prototype,d,function(C){return function(...W){let w=W[W.length-1],B=G(),A=B.getScope(),V=B.getClient(),X=A.getSpan(),_=nX([V,"optionalAccess",(g)=>g.getOptions,"call",(g)=>g(),"access",(g)=>g.sendDefaultPii]);if(typeof w!=="function"||d==="mapReduce"&&W.length===2){let g=nX([X,"optionalAccess",(K)=>K.startChild,"call",(K)=>K(Z(this,d,W,_))]),J=C.call(this,...W);if(rv.isThenable(J))return J.then((K)=>{return nX([g,"optionalAccess",(Q)=>Q.end,"call",(Q)=>Q()]),K});else if(ni2(J)){let K=J;try{K.once("close",()=>{nX([g,"optionalAccess",(Q)=>Q.end,"call",(Q)=>Q()])})}catch(Q){nX([g,"optionalAccess",(E)=>E.end,"call",(E)=>E()])}return K}else return nX([g,"optionalAccess",(K)=>K.end,"call",(K)=>K()]),J}let F=nX([X,"optionalAccess",(g)=>g.startChild,"call",(g)=>g(Z(this,d,W.slice(0,-1)))]);return C.call(this,...W.slice(0,-1),function(g,J){nX([F,"optionalAccess",(K)=>K.end,"call",(K)=>K()]),w(g,J)})}})}_getSpanContextFromOperationArguments(I,d,G,Z=!1){let C={"db.system":"mongodb","db.name":I.dbName,"db.operation":d,"db.mongodb.collection":I.collectionName},W={op:"db",origin:"auto.db.mongo",description:d,data:C},w=ii2[d],B=Array.isArray(this._describeOperations)?this._describeOperations.includes(d):this._describeOperations;if(!w||!B||!Z)return W;try{if(d==="mapReduce"){let[A,V]=G;C[w[0]]=typeof A==="string"?A:A.name||"",C[w[1]]=typeof V==="string"?V:V.name||""}else for(let A=0;A{Object.defineProperty(Uv1,"__esModule",{value:!0});var o11=V4(),Rv1=V0(),ai2=pI(),si2=iX();function oi2(I){return!!I&&!!I.$use}class _m{static __initStatic(){this.id="Prisma"}constructor(I={}){if(this.name=_m.id,oi2(I.client)&&!I.client._sentryInstrumented){Rv1.addNonEnumerableProperty(I.client,"_sentryInstrumented",!0);let d={};try{let G=I.client._engineConfig;if(G){let{activeProvider:Z,clientVersion:C}=G;if(Z)d["db.system"]=Z;if(C)d["db.prisma.version"]=C}}catch(G){}I.client.$use((G,Z)=>{if(si2.shouldDisableAutoInstrumentation(o11.getCurrentHub))return Z(G);let{action:C,model:W}=G;return o11.startSpan({name:W?`${W} ${C}`:C,onlyIfParent:!0,op:"db.prisma",attributes:{[o11.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:"auto.db.prisma"},data:{...d,"db.operation":C}},()=>Z(G))})}else ai2.DEBUG_BUILD&&Rv1.logger.warn("Unsupported Prisma client provided to PrismaIntegration. Provided client:",I.client)}setupOnce(){}}_m.__initStatic();Uv1.Prisma=_m});var Sv1=Y((Mv1)=>{var{_optionalChain:fN}=V0();Object.defineProperty(Mv1,"__esModule",{value:!0});var av=V0(),Ev1=pI(),ti2=iX();class Dm{static __initStatic(){this.id="GraphQL"}constructor(){this.name=Dm.id}loadDependency(){return this._module=this._module||av.loadModule("graphql/execution/execute.js")}setupOnce(I,d){if(ti2.shouldDisableAutoInstrumentation(d)){Ev1.DEBUG_BUILD&&av.logger.log("GraphQL Integration is skipped because of instrumenter configuration.");return}let G=this.loadDependency();if(!G){Ev1.DEBUG_BUILD&&av.logger.error("GraphQL Integration was unable to require graphql/execution package.");return}av.fill(G,"execute",function(Z){return function(...C){let W=d().getScope(),w=W.getSpan(),B=fN([w,"optionalAccess",(V)=>V.startChild,"call",(V)=>V({description:"execute",op:"graphql.execute",origin:"auto.graphql.graphql"})]);fN([W,"optionalAccess",(V)=>V.setSpan,"call",(V)=>V(B)]);let A=Z.call(this,...C);if(av.isThenable(A))return A.then((V)=>{return fN([B,"optionalAccess",(X)=>X.end,"call",(X)=>X()]),fN([W,"optionalAccess",(X)=>X.setSpan,"call",(X)=>X(w)]),V});return fN([B,"optionalAccess",(V)=>V.end,"call",(V)=>V()]),fN([W,"optionalAccess",(V)=>V.setSpan,"call",(V)=>V(w)]),A}})}}Dm.__initStatic();Mv1.GraphQL=Dm});var Pv1=Y((yv1)=>{var{_optionalChain:e11}=V0();Object.defineProperty(yv1,"__esModule",{value:!0});var Q7=V0(),Hm=pI(),dn2=iX();class Fm{static __initStatic(){this.id="Apollo"}constructor(I={useNestjs:!1}){this.name=Fm.id,this._useNest=!!I.useNestjs}loadDependency(){if(this._useNest)this._module=this._module||Q7.loadModule("@nestjs/graphql");else this._module=this._module||Q7.loadModule("apollo-server-core");return this._module}setupOnce(I,d){if(dn2.shouldDisableAutoInstrumentation(d)){Hm.DEBUG_BUILD&&Q7.logger.log("Apollo Integration is skipped because of instrumenter configuration.");return}if(this._useNest){let G=this.loadDependency();if(!G){Hm.DEBUG_BUILD&&Q7.logger.error("Apollo-NestJS Integration was unable to require @nestjs/graphql package.");return}Q7.fill(G.GraphQLFactory.prototype,"mergeWithSchema",function(Z){return function(...C){return Q7.fill(this.resolversExplorerService,"explore",function(W){return function(){let w=Q7.arrayify(W.call(this));return Lv1(w,d)}}),Z.call(this,...C)}})}else{let G=this.loadDependency();if(!G){Hm.DEBUG_BUILD&&Q7.logger.error("Apollo Integration was unable to require apollo-server-core package.");return}Q7.fill(G.ApolloServerBase.prototype,"constructSchema",function(Z){return function(){if(!this.config.resolvers){if(Hm.DEBUG_BUILD){if(this.config.schema)Q7.logger.warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead."),Q7.logger.warn();else if(this.config.modules)Q7.logger.warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property.");Q7.logger.error("Skipping tracing as no resolvers found on the `ApolloServer` instance.")}return Z.call(this)}let C=Q7.arrayify(this.config.resolvers);return this.config.resolvers=Lv1(C,d),Z.call(this)}})}}}Fm.__initStatic();function Lv1(I,d){return I.map((G)=>{return Object.keys(G).forEach((Z)=>{Object.keys(G[Z]).forEach((C)=>{if(typeof G[Z][C]!=="function")return;Gn2(G,Z,C,d)})}),G})}function Gn2(I,d,G,Z){Q7.fill(I[d],G,function(C){return function(...W){let B=Z().getScope().getSpan(),A=e11([B,"optionalAccess",(X)=>X.startChild,"call",(X)=>X({description:`${d}.${G}`,op:"graphql.resolve",origin:"auto.graphql.apollo"})]),V=C.call(this,...W);if(Q7.isThenable(V))return V.then((X)=>{return e11([A,"optionalAccess",(_)=>_.end,"call",(_)=>_()]),X});return e11([A,"optionalAccess",(X)=>X.end,"call",(X)=>X()]),V}})}yv1.Apollo=Fm});var uv1=Y(($v1,rX)=>{Object.defineProperty($v1,"__esModule",{value:!0});var zF=V0(),Cn2=[()=>{return new(zF.dynamicRequire(rX,"./apollo")).Apollo},()=>{return new(zF.dynamicRequire(rX,"./apollo")).Apollo({useNestjs:!0})},()=>{return new(zF.dynamicRequire(rX,"./graphql")).GraphQL},()=>{return new(zF.dynamicRequire(rX,"./mongo")).Mongo},()=>{return new(zF.dynamicRequire(rX,"./mongo")).Mongo({mongoose:!0})},()=>{return new(zF.dynamicRequire(rX,"./mysql")).Mysql},()=>{return new(zF.dynamicRequire(rX,"./postgres")).Postgres}];$v1.lazyLoadedNodePerformanceMonitoringIntegrations=Cn2});var kd=Y((Tv1)=>{Object.defineProperty(Tv1,"__esModule",{value:!0});var wn2=V0(),Bn2=wn2.GLOBAL_OBJ;Tv1.WINDOW=Bn2});var I01=Y((bv1)=>{Object.defineProperty(bv1,"__esModule",{value:!0});var Ov1=V4(),mv1=V0(),lv1=pI(),t11=kd();function Vn2(){if(t11.WINDOW.document)t11.WINDOW.document.addEventListener("visibilitychange",()=>{let I=Ov1.getActiveTransaction();if(t11.WINDOW.document.hidden&&I){let{op:G,status:Z}=Ov1.spanToJSON(I);if(lv1.DEBUG_BUILD&&mv1.logger.log(`[Tracing] Transaction: cancelled -> since tab moved to the background, op: ${G}`),!Z)I.setStatus("cancelled");I.setTag("visibilitychange","document.hidden"),I.end()}});else lv1.DEBUG_BUILD&&mv1.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document")}bv1.registerBackgroundTabDetection=Vn2});var qN=Y((hv1)=>{Object.defineProperty(hv1,"__esModule",{value:!0});var Yn2=(I,d,G)=>{let Z,C;return(W)=>{if(d.value>=0){if(W||G){if(C=d.value-(Z||0),C||Z===void 0)Z=d.value,d.delta=C,I(d)}}}};hv1.bindReporter=Yn2});var kv1=Y((jv1)=>{Object.defineProperty(jv1,"__esModule",{value:!0});var Dn2=()=>{return`v3-${Date.now()}-${Math.floor(Math.random()*8999999999999)+1000000000000}`};jv1.generateUniqueID=Dn2});var ov=Y((xv1)=>{Object.defineProperty(xv1,"__esModule",{value:!0});var sv=kd(),Fn2=()=>{let I=sv.WINDOW.performance.timing,d=sv.WINDOW.performance.navigation.type,G={entryType:"navigation",startTime:0,type:d==2?"back_forward":d===1?"reload":"navigate"};for(let Z in I)if(Z!=="navigationStart"&&Z!=="toJSON")G[Z]=Math.max(I[Z]-I.navigationStart,0);return G},gn2=()=>{if(sv.WINDOW.__WEB_VITALS_POLYFILL__)return sv.WINDOW.performance&&(performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]||Fn2());else return sv.WINDOW.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]};xv1.getNavigationEntry=gn2});var gm=Y((cv1)=>{Object.defineProperty(cv1,"__esModule",{value:!0});var Kn2=ov(),Nn2=()=>{let I=Kn2.getNavigationEntry();return I&&I.activationStart||0};cv1.getActivationStart=Nn2});var RN=Y((iv1)=>{Object.defineProperty(iv1,"__esModule",{value:!0});var pv1=kd(),Qn2=kv1(),fn2=gm(),qn2=ov(),Rn2=(I,d)=>{let G=qn2.getNavigationEntry(),Z="navigate";if(G)if(pv1.WINDOW.document&&pv1.WINDOW.document.prerendering||fn2.getActivationStart()>0)Z="prerender";else Z=G.type.replace(/_/g,"-");return{name:I,value:typeof d==="undefined"?-1:d,rating:"good",delta:0,entries:[],id:Qn2.generateUniqueID(),navigationType:Z}};iv1.initMetric=Rn2});var QF=Y((nv1)=>{Object.defineProperty(nv1,"__esModule",{value:!0});var vn2=(I,d,G)=>{try{if(PerformanceObserver.supportedEntryTypes.includes(I)){let Z=new PerformanceObserver((C)=>{d(C.getEntries())});return Z.observe(Object.assign({type:I,buffered:!0},G||{})),Z}}catch(Z){}return};nv1.observe=vn2});var UN=Y((av1)=>{Object.defineProperty(av1,"__esModule",{value:!0});var rv1=kd(),Mn2=(I,d)=>{let G=(Z)=>{if(Z.type==="pagehide"||rv1.WINDOW.document.visibilityState==="hidden"){if(I(Z),d)removeEventListener("visibilitychange",G,!0),removeEventListener("pagehide",G,!0)}};if(rv1.WINDOW.document)addEventListener("visibilitychange",G,!0),addEventListener("pagehide",G,!0)};av1.onHidden=Mn2});var ov1=Y((sv1)=>{Object.defineProperty(sv1,"__esModule",{value:!0});var Ln2=qN(),yn2=RN(),Pn2=QF(),$n2=UN(),un2=(I,d={})=>{let G=yn2.initMetric("CLS",0),Z,C=0,W=[],w=(A)=>{A.forEach((V)=>{if(!V.hadRecentInput){let X=W[0],_=W[W.length-1];if(C&&W.length!==0&&V.startTime-_.startTime<1000&&V.startTime-X.startTime<5000)C+=V.value,W.push(V);else C=V.value,W=[V];if(C>G.value){if(G.value=C,G.entries=W,Z)Z()}}})},B=Pn2.observe("layout-shift",w);if(B){Z=Ln2.bindReporter(I,G,d.reportAllChanges);let A=()=>{w(B.takeRecords()),Z(!0)};return $n2.onHidden(A),A}return};sv1.onCLS=un2});var Nm=Y((ev1)=>{Object.defineProperty(ev1,"__esModule",{value:!0});var Jm=kd(),On2=UN(),Km=-1,mn2=()=>{if(Jm.WINDOW.document&&Jm.WINDOW.document.visibilityState)Km=Jm.WINDOW.document.visibilityState==="hidden"&&!Jm.WINDOW.document.prerendering?0:1/0},ln2=()=>{On2.onHidden(({timeStamp:I})=>{Km=I},!0)},bn2=()=>{if(Km<0)mn2(),ln2();return{get firstHiddenTime(){return Km}}};ev1.getVisibilityWatcher=bn2});var IE1=Y((tv1)=>{Object.defineProperty(tv1,"__esModule",{value:!0});var jn2=qN(),kn2=Nm(),xn2=RN(),cn2=QF(),pn2=UN(),in2=(I)=>{let d=kn2.getVisibilityWatcher(),G=xn2.initMetric("FID"),Z,C=(B)=>{if(B.startTime{B.forEach(C)},w=cn2.observe("first-input",W);if(Z=jn2.bindReporter(I,G),w)pn2.onHidden(()=>{W(w.takeRecords()),w.disconnect()},!0)};tv1.onFID=in2});var ZE1=Y((GE1)=>{Object.defineProperty(GE1,"__esModule",{value:!0});var rn2=QF(),dE1=0,d01=1/0,zm=0,an2=(I)=>{I.forEach((d)=>{if(d.interactionId)d01=Math.min(d01,d.interactionId),zm=Math.max(zm,d.interactionId),dE1=zm?(zm-d01)/7+1:0})},G01,sn2=()=>{return G01?dE1:performance.interactionCount||0},on2=()=>{if("interactionCount"in performance||G01)return;G01=rn2.observe("event",an2,{type:"event",buffered:!0,durationThreshold:0})};GE1.getInteractionCount=sn2;GE1.initInteractionCountPolyfill=on2});var VE1=Y((AE1)=>{Object.defineProperty(AE1,"__esModule",{value:!0});var Ir2=qN(),dr2=RN(),Gr2=QF(),Zr2=UN(),wE1=ZE1(),BE1=()=>{return wE1.getInteractionCount()},CE1=10,EA=[],Z01={},WE1=(I)=>{let d=EA[EA.length-1],G=Z01[I.interactionId];if(G||EA.lengthd.latency){if(G)G.entries.push(I),G.latency=Math.max(G.latency,I.duration);else{let Z={id:I.interactionId,latency:I.duration,entries:[I]};Z01[Z.id]=Z,EA.push(Z)}EA.sort((Z,C)=>C.latency-Z.latency),EA.splice(CE1).forEach((Z)=>{delete Z01[Z.id]})}},Cr2=()=>{let I=Math.min(EA.length-1,Math.floor(BE1()/50));return EA[I]},Wr2=(I,d)=>{d=d||{},wE1.initInteractionCountPolyfill();let G=dr2.initMetric("INP"),Z,C=(w)=>{w.forEach((A)=>{if(A.interactionId)WE1(A);if(A.entryType==="first-input"){if(!EA.some((X)=>{return X.entries.some((_)=>{return A.duration===_.duration&&A.startTime===_.startTime})}))WE1(A)}});let B=Cr2();if(B&&B.latency!==G.value)G.value=B.latency,G.entries=B.entries,Z()},W=Gr2.observe("event",C,{durationThreshold:d.durationThreshold||40});if(Z=Ir2.bindReporter(I,G,d.reportAllChanges),W)W.observe({type:"first-input",buffered:!0}),Zr2.onHidden(()=>{if(C(W.takeRecords()),G.value<0&&BE1()>0)G.value=0,G.entries=[];Z(!0)})};AE1.onINP=Wr2});var _E1=Y((YE1)=>{Object.defineProperty(YE1,"__esModule",{value:!0});var Br2=kd(),Ar2=qN(),Vr2=gm(),Xr2=Nm(),Yr2=RN(),_r2=QF(),Dr2=UN(),XE1={},Hr2=(I)=>{let d=Xr2.getVisibilityWatcher(),G=Yr2.initMetric("LCP"),Z,C=(w)=>{let B=w[w.length-1];if(B){let A=Math.max(B.startTime-Vr2.getActivationStart(),0);if(A{if(!XE1[G.id])C(W.takeRecords()),W.disconnect(),XE1[G.id]=!0,Z(!0)};return["keydown","click"].forEach((B)=>{if(Br2.WINDOW.document)addEventListener(B,w,{once:!0,capture:!0})}),Dr2.onHidden(w,!0),w}return};YE1.onLCP=Hr2});var HE1=Y((DE1)=>{Object.defineProperty(DE1,"__esModule",{value:!0});var C01=kd(),gr2=qN(),Jr2=gm(),Kr2=ov(),Nr2=RN(),W01=(I)=>{if(!C01.WINDOW.document)return;if(C01.WINDOW.document.prerendering)addEventListener("prerenderingchange",()=>W01(I),!0);else if(C01.WINDOW.document.readyState!=="complete")addEventListener("load",()=>W01(I),!0);else setTimeout(I,0)},zr2=(I,d)=>{d=d||{};let G=Nr2.initMetric("TTFB"),Z=gr2.bindReporter(I,G,d.reportAllChanges);W01(()=>{let C=Kr2.getNavigationEntry();if(C){if(G.value=Math.max(C.responseStart-Jr2.getActivationStart(),0),G.value<0||G.value>performance.now())return;G.entries=[C],Z(!0)}})};DE1.onTTFB=zr2});var EN=Y((qE1)=>{Object.defineProperty(qE1,"__esModule",{value:!0});var FE1=V0(),fr2=pI(),qr2=ov1(),Rr2=IE1(),Ur2=VE1(),vr2=_E1(),Er2=QF(),Mr2=HE1(),ev={},Qm={},gE1,JE1,KE1,NE1,zE1;function Sr2(I,d=!1){return tv("cls",I,Tr2,gE1,d)}function Lr2(I,d=!1){return tv("lcp",I,mr2,KE1,d)}function yr2(I){return tv("ttfb",I,lr2,NE1)}function Pr2(I){return tv("fid",I,Or2,JE1)}function $r2(I){return tv("inp",I,br2,zE1)}function ur2(I,d){if(QE1(I,d),!Qm[I])hr2(I),Qm[I]=!0;return fE1(I,d)}function vN(I,d){let G=ev[I];if(!G||!G.length)return;for(let Z of G)try{Z(d)}catch(C){fr2.DEBUG_BUILD&&FE1.logger.error(`Error while triggering instrumentation handler. +Type: ${I} +Name: ${FE1.getFunctionName(Z)} +Error:`,C)}}function Tr2(){return qr2.onCLS((I)=>{vN("cls",{metric:I}),gE1=I},{reportAllChanges:!0})}function Or2(){return Rr2.onFID((I)=>{vN("fid",{metric:I}),JE1=I})}function mr2(){return vr2.onLCP((I)=>{vN("lcp",{metric:I}),KE1=I})}function lr2(){return Mr2.onTTFB((I)=>{vN("ttfb",{metric:I}),NE1=I})}function br2(){return Ur2.onINP((I)=>{vN("inp",{metric:I}),zE1=I})}function tv(I,d,G,Z,C=!1){QE1(I,d);let W;if(!Qm[I])W=G(),Qm[I]=!0;if(Z)d({metric:Z});return fE1(I,d,C?W:void 0)}function hr2(I){let d={};if(I==="event")d.durationThreshold=0;Er2.observe(I,(G)=>{vN(I,{entries:G})},d)}function QE1(I,d){ev[I]=ev[I]||[],ev[I].push(d)}function fE1(I,d,G){return()=>{if(G)G();let Z=ev[I];if(!Z)return;let C=Z.indexOf(d);if(C!==-1)Z.splice(C,1)}}qE1.addClsInstrumentationHandler=Sr2;qE1.addFidInstrumentationHandler=Pr2;qE1.addInpInstrumentationHandler=$r2;qE1.addLcpInstrumentationHandler=Lr2;qE1.addPerformanceInstrumentationHandler=ur2;qE1.addTtfbInstrumentationHandler=yr2});var UE1=Y((RE1)=>{Object.defineProperty(RE1,"__esModule",{value:!0});function nr2(I){return typeof I==="number"&&isFinite(I)}function rr2(I,{startTimestamp:d,...G}){if(d&&I.startTimestamp>d)I.startTimestamp=d;return I.startChild({startTimestamp:d,...G})}RE1._startChild=rr2;RE1.isMeasurementValue=nr2});var A01=Y((LE1)=>{Object.defineProperty(LE1,"__esModule",{value:!0});var MA=V4(),N9=V0(),xd=pI(),fF=EN(),SA=kd(),or2=Nm(),LA=UE1(),er2=ov(),tr2=2147483647;function x6(I){return I/1000}function B01(){return SA.WINDOW&&SA.WINDOW.addEventListener&&SA.WINDOW.performance}var vE1=0,T3={},Yw,IE;function Ia2(){let I=B01();if(I&&N9.browserPerformanceTimeOrigin){if(I.mark)SA.WINDOW.performance.mark("sentry-tracing-init");let d=wa2(),G=Ca2(),Z=Wa2(),C=Ba2();return()=>{d(),G(),Z(),C()}}return()=>{return}}function da2(){fF.addPerformanceInstrumentationHandler("longtask",({entries:I})=>{for(let d of I){let G=MA.getActiveTransaction();if(!G)return;let Z=x6(N9.browserPerformanceTimeOrigin+d.startTime),C=x6(d.duration);G.startChild({description:"Main UI thread blocked",op:"ui.long-task",origin:"auto.ui.browser.metrics",startTimestamp:Z,endTimestamp:Z+C})}})}function Ga2(){fF.addPerformanceInstrumentationHandler("event",({entries:I})=>{for(let d of I){let G=MA.getActiveTransaction();if(!G)return;if(d.name==="click"){let Z=x6(N9.browserPerformanceTimeOrigin+d.startTime),C=x6(d.duration),W={description:N9.htmlTreeAsString(d.target),op:`ui.interaction.${d.name}`,origin:"auto.ui.browser.metrics",startTimestamp:Z,endTimestamp:Z+C},w=N9.getComponentName(d.target);if(w)W.attributes={"ui.component_name":w};G.startChild(W)}}})}function Za2(I,d){if(B01()&&N9.browserPerformanceTimeOrigin){let Z=Aa2(I,d);return()=>{Z()}}return()=>{return}}function Ca2(){return fF.addClsInstrumentationHandler(({metric:I})=>{let d=I.entries[I.entries.length-1];if(!d)return;xd.DEBUG_BUILD&&N9.logger.log("[Measurements] Adding CLS"),T3.cls={value:I.value,unit:""},IE=d},!0)}function Wa2(){return fF.addLcpInstrumentationHandler(({metric:I})=>{let d=I.entries[I.entries.length-1];if(!d)return;xd.DEBUG_BUILD&&N9.logger.log("[Measurements] Adding LCP"),T3.lcp={value:I.value,unit:"millisecond"},Yw=d},!0)}function wa2(){return fF.addFidInstrumentationHandler(({metric:I})=>{let d=I.entries[I.entries.length-1];if(!d)return;let G=x6(N9.browserPerformanceTimeOrigin),Z=x6(d.startTime);xd.DEBUG_BUILD&&N9.logger.log("[Measurements] Adding FID"),T3.fid={value:I.value,unit:"millisecond"},T3["mark.fid"]={value:G+Z,unit:"second"}})}function Ba2(){return fF.addTtfbInstrumentationHandler(({metric:I})=>{if(!I.entries[I.entries.length-1])return;xd.DEBUG_BUILD&&N9.logger.log("[Measurements] Adding TTFB"),T3.ttfb={value:I.value,unit:"millisecond"}})}var EE1={click:"click",pointerdown:"click",pointerup:"click",mousedown:"click",mouseup:"click",touchstart:"click",touchend:"click",mouseover:"hover",mouseout:"hover",mouseenter:"hover",mouseleave:"hover",pointerover:"hover",pointerout:"hover",pointerenter:"hover",pointerleave:"hover",dragstart:"drag",dragend:"drag",drag:"drag",dragenter:"drag",dragleave:"drag",dragover:"drag",drop:"drag",keydown:"press",keyup:"press",keypress:"press",input:"press"};function Aa2(I,d){return fF.addInpInstrumentationHandler(({metric:G})=>{if(G.value===void 0)return;let Z=G.entries.find((P)=>P.duration===G.value&&EE1[P.name]!==void 0),C=MA.getClient();if(!Z||!C)return;let W=EE1[Z.name],w=C.getOptions(),B=x6(N9.browserPerformanceTimeOrigin+Z.startTime),A=x6(G.value),V=Z.interactionId!==void 0?I[Z.interactionId]:void 0;if(V===void 0)return;let{routeName:X,parentContext:_,activeTransaction:F,user:g,replayId:J}=V,K=g!==void 0?g.email||g.id||g.ip_address:void 0,Q=F!==void 0?F.getProfileId():void 0,E=new MA.Span({startTimestamp:B,endTimestamp:B+A,op:`ui.interaction.${W}`,name:N9.htmlTreeAsString(Z.target),attributes:{release:w.release,environment:w.environment,transaction:X,...K!==void 0&&K!==""?{user:K}:{},...Q!==void 0?{profile_id:Q}:{},...J!==void 0?{replay_id:J}:{}},exclusiveTime:G.value,measurements:{inp:{value:G.value,unit:"millisecond"}}}),S=Fa2(_,w,d);if(!S)return;if(Math.random(){xd.DEBUG_BUILD&&N9.logger.error("Error while sending interaction:",h)});return}})}function Va2(I){let d=B01();if(!d||!SA.WINDOW.performance.getEntries||!N9.browserPerformanceTimeOrigin)return;xd.DEBUG_BUILD&&N9.logger.log("[Tracing] Adding & adjusting spans using Performance API");let G=x6(N9.browserPerformanceTimeOrigin),Z=d.getEntries(),{op:C,start_timestamp:W}=MA.spanToJSON(I);if(Z.slice(vE1).forEach((w)=>{let B=x6(w.startTime),A=x6(w.duration);if(I.op==="navigation"&&W&&G+B{if(!T3[B]||!W||G>=W)return;let A=T3[B].value,V=G+x6(A),X=Math.abs((V-W)*1000),_=X-A;xd.DEBUG_BUILD&&N9.logger.log(`[Measurements] Normalized ${B} from ${A} to ${X} (${_})`),T3[B].value=X});let w=T3["mark.fid"];if(w&&T3.fid)LA._startChild(I,{description:"first input delay",endTimestamp:w.value+x6(T3.fid.value),op:"ui.action",origin:"auto.ui.browser.metrics",startTimestamp:w.value}),delete T3["mark.fid"];if(!("fcp"in T3))delete T3.cls;Object.keys(T3).forEach((B)=>{MA.setMeasurement(B,T3[B].value,T3[B].unit)}),Da2(I)}Yw=void 0,IE=void 0,T3={}}function ME1(I,d,G,Z,C){let W=C+G,w=W+Z;return LA._startChild(I,{description:d.name,endTimestamp:w,op:d.entryType,origin:"auto.resource.browser.metrics",startTimestamp:W}),W}function Xa2(I,d,G){["unloadEvent","redirect","domContentLoadedEvent","loadEvent","connect"].forEach((Z)=>{fm(I,d,Z,G)}),fm(I,d,"secureConnection",G,"TLS/SSL","connectEnd"),fm(I,d,"fetch",G,"cache","domainLookupStart"),fm(I,d,"domainLookup",G,"DNS"),Ya2(I,d,G)}function fm(I,d,G,Z,C,W){let w=W?d[W]:d[`${G}End`],B=d[`${G}Start`];if(!B||!w)return;LA._startChild(I,{op:"browser",origin:"auto.browser.browser.metrics",description:C||G,startTimestamp:Z+x6(B),endTimestamp:Z+x6(w)})}function Ya2(I,d,G){if(d.responseEnd)LA._startChild(I,{op:"browser",origin:"auto.browser.browser.metrics",description:"request",startTimestamp:G+x6(d.requestStart),endTimestamp:G+x6(d.responseEnd)}),LA._startChild(I,{op:"browser",origin:"auto.browser.browser.metrics",description:"response",startTimestamp:G+x6(d.responseStart),endTimestamp:G+x6(d.responseEnd)})}function SE1(I,d,G,Z,C,W){if(d.initiatorType==="xmlhttprequest"||d.initiatorType==="fetch")return;let w=N9.parseUrl(G),B={};if(w01(B,d,"transferSize","http.response_transfer_size"),w01(B,d,"encodedBodySize","http.response_content_length"),w01(B,d,"decodedBodySize","http.decoded_response_content_length"),"renderBlockingStatus"in d)B["resource.render_blocking_status"]=d.renderBlockingStatus;if(w.protocol)B["url.scheme"]=w.protocol.split(":").pop();if(w.host)B["server.address"]=w.host;B["url.same_origin"]=G.includes(SA.WINDOW.location.origin);let A=W+Z,V=A+C;LA._startChild(I,{description:G.replace(SA.WINDOW.location.origin,""),endTimestamp:V,op:d.initiatorType?`resource.${d.initiatorType}`:"resource.other",origin:"auto.resource.browser.metrics",startTimestamp:A,data:B})}function _a2(I){let d=SA.WINDOW.navigator;if(!d)return;let G=d.connection;if(G){if(G.effectiveType)I.setTag("effectiveConnectionType",G.effectiveType);if(G.type)I.setTag("connectionType",G.type);if(LA.isMeasurementValue(G.rtt))T3["connection.rtt"]={value:G.rtt,unit:"millisecond"}}if(LA.isMeasurementValue(d.deviceMemory))I.setTag("deviceMemory",`${d.deviceMemory} GB`);if(LA.isMeasurementValue(d.hardwareConcurrency))I.setTag("hardwareConcurrency",String(d.hardwareConcurrency))}function Da2(I){if(Yw){if(xd.DEBUG_BUILD&&N9.logger.log("[Measurements] Adding LCP Data"),Yw.element)I.setTag("lcp.element",N9.htmlTreeAsString(Yw.element));if(Yw.id)I.setTag("lcp.id",Yw.id);if(Yw.url)I.setTag("lcp.url",Yw.url.trim().slice(0,200));I.setTag("lcp.size",Yw.size)}if(IE&&IE.sources)xd.DEBUG_BUILD&&N9.logger.log("[Measurements] Adding CLS Data"),IE.sources.forEach((d,G)=>I.setTag(`cls.source.${G+1}`,N9.htmlTreeAsString(d.node)))}function w01(I,d,G,Z){let C=d[G];if(C!=null&&C{Object.defineProperty(PE1,"__esModule",{value:!0});var _w=V4(),qF=V0();function qa2(I,d,G,Z,C="auto.http.browser"){if(!_w.hasTracingEnabled()||!I.fetchData)return;let W=d(I.fetchData.url);if(I.endTimestamp&&W){let g=I.fetchData.__span;if(!g)return;let J=Z[g];if(J)Ua2(J,I),delete Z[g];return}let w=_w.getCurrentScope(),B=_w.getClient(),{method:A,url:V}=I.fetchData,X=Ra2(V),_=X?qF.parseUrl(X).host:void 0,F=W?_w.startInactiveSpan({name:`${A} ${V}`,onlyIfParent:!0,attributes:{url:V,type:"fetch","http.method":A,"http.url":X,"server.address":_,[_w.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:C},op:"http.client"}):void 0;if(F)I.fetchData.__span=F.spanContext().spanId,Z[F.spanContext().spanId]=F;if(G(I.fetchData.url)&&B){let g=I.args[0];I.args[1]=I.args[1]||{};let J=I.args[1];J.headers=yE1(g,B,w,J,F)}return F}function yE1(I,d,G,Z,C){let W=C||G.getSpan(),w=_w.getIsolationScope(),{traceId:B,spanId:A,sampled:V,dsc:X}={...w.getPropagationContext(),...G.getPropagationContext()},_=W?_w.spanToTraceHeader(W):qF.generateSentryTraceHeader(B,A,V),F=qF.dynamicSamplingContextToSentryBaggageHeader(X||(W?_w.getDynamicSamplingContextFromSpan(W):_w.getDynamicSamplingContextFromClient(B,d,G))),g=Z.headers||(typeof Request!=="undefined"&&qF.isInstanceOf(I,Request)?I.headers:void 0);if(!g)return{"sentry-trace":_,baggage:F};else if(typeof Headers!=="undefined"&&qF.isInstanceOf(g,Headers)){let J=new Headers(g);if(J.append("sentry-trace",_),F)J.append(qF.BAGGAGE_HEADER_NAME,F);return J}else if(Array.isArray(g)){let J=[...g,["sentry-trace",_]];if(F)J.push([qF.BAGGAGE_HEADER_NAME,F]);return J}else{let J="baggage"in g?g.baggage:void 0,K=[];if(Array.isArray(J))K.push(...J);else if(J)K.push(J);if(F)K.push(F);return{...g,"sentry-trace":_,baggage:K.length>0?K.join(","):void 0}}}function Ra2(I){try{return new URL(I).href}catch(d){return}}function Ua2(I,d){if(d.response){_w.setHttpStatus(I,d.response.status);let G=d.response&&d.response.headers&&d.response.headers.get("content-length");if(G){let Z=parseInt(G);if(Z>0)I.setAttribute("http.response_content_length",Z)}}else if(d.error)I.setStatus("internal_error");I.end()}PE1.addTracingHeadersToFetchRequest=yE1;PE1.instrumentFetchRequest=qa2});var Rm=Y((lE1)=>{Object.defineProperty(lE1,"__esModule",{value:!0});var HC=V4(),FC=V0(),Ma2=V01(),Sa2=EN(),La2=kd(),qm=["localhost",/^\/(?!\/)/],X01={traceFetch:!0,traceXHR:!0,enableHTTPTimings:!0,tracingOrigins:qm,tracePropagationTargets:qm};function ya2(I){let{traceFetch:d,traceXHR:G,tracePropagationTargets:Z,tracingOrigins:C,shouldCreateSpanForRequest:W,enableHTTPTimings:w}={traceFetch:X01.traceFetch,traceXHR:X01.traceXHR,...I},B=typeof W==="function"?W:(X)=>!0,A=(X)=>TE1(X,Z||C),V={};if(d)FC.addFetchInstrumentationHandler((X)=>{let _=Ma2.instrumentFetchRequest(X,B,A,V);if(_){let F=mE1(X.fetchData.url),g=F?FC.parseUrl(F).host:void 0;_.setAttributes({"http.url":F,"server.address":g})}if(w&&_)$E1(_)});if(G)FC.addXhrInstrumentationHandler((X)=>{let _=OE1(X,B,A,V);if(w&&_)$E1(_)})}function Pa2(I){return I.entryType==="resource"&&"initiatorType"in I&&typeof I.nextHopProtocol==="string"&&(I.initiatorType==="fetch"||I.initiatorType==="xmlhttprequest")}function $E1(I){let{url:d}=HC.spanToJSON(I).data||{};if(!d||typeof d!=="string")return;let G=Sa2.addPerformanceInstrumentationHandler("resource",({entries:Z})=>{Z.forEach((C)=>{if(Pa2(C)&&C.name.endsWith(d))$a2(C).forEach((w)=>I.setAttribute(...w)),setTimeout(G)})})}function uE1(I){let d="unknown",G="unknown",Z="";for(let C of I){if(C==="/"){[d,G]=I.split("/");break}if(!isNaN(Number(C))){d=Z==="h"?"http":Z,G=I.split(Z)[1];break}Z+=C}if(Z===I)d=Z;return{name:d,version:G}}function Dw(I=0){return((FC.browserPerformanceTimeOrigin||performance.timeOrigin)+I)/1000}function $a2(I){let{name:d,version:G}=uE1(I.nextHopProtocol),Z=[];if(Z.push(["network.protocol.version",G],["network.protocol.name",d]),!FC.browserPerformanceTimeOrigin)return Z;return[...Z,["http.request.redirect_start",Dw(I.redirectStart)],["http.request.fetch_start",Dw(I.fetchStart)],["http.request.domain_lookup_start",Dw(I.domainLookupStart)],["http.request.domain_lookup_end",Dw(I.domainLookupEnd)],["http.request.connect_start",Dw(I.connectStart)],["http.request.secure_connection_start",Dw(I.secureConnectionStart)],["http.request.connection_end",Dw(I.connectEnd)],["http.request.request_start",Dw(I.requestStart)],["http.request.response_start",Dw(I.responseStart)],["http.request.response_end",Dw(I.responseEnd)]]}function TE1(I,d){return FC.stringMatchesSomePattern(I,d||qm)}function OE1(I,d,G,Z){let C=I.xhr,W=C&&C[FC.SENTRY_XHR_DATA_KEY];if(!HC.hasTracingEnabled()||!C||C.__sentry_own_request__||!W)return;let w=d(W.url);if(I.endTimestamp&&w){let g=C.__sentry_xhr_span_id__;if(!g)return;let J=Z[g];if(J&&W.status_code!==void 0)HC.setHttpStatus(J,W.status_code),J.end(),delete Z[g];return}let B=HC.getCurrentScope(),A=HC.getIsolationScope(),V=mE1(W.url),X=V?FC.parseUrl(V).host:void 0,_=w?HC.startInactiveSpan({name:`${W.method} ${W.url}`,onlyIfParent:!0,attributes:{type:"xhr","http.method":W.method,"http.url":V,url:W.url,"server.address":X,[HC.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:"auto.http.browser"},op:"http.client"}):void 0;if(_)C.__sentry_xhr_span_id__=_.spanContext().spanId,Z[C.__sentry_xhr_span_id__]=_;let F=HC.getClient();if(C.setRequestHeader&&G(W.url)&&F){let{traceId:g,spanId:J,sampled:K,dsc:Q}={...A.getPropagationContext(),...B.getPropagationContext()},E=_?HC.spanToTraceHeader(_):FC.generateSentryTraceHeader(g,J,K),S=FC.dynamicSamplingContextToSentryBaggageHeader(Q||(_?HC.getDynamicSamplingContextFromSpan(_):HC.getDynamicSamplingContextFromClient(g,F,B)));ua2(C,E,S)}return _}function ua2(I,d,G){try{if(I.setRequestHeader("sentry-trace",d),G)I.setRequestHeader(FC.BAGGAGE_HEADER_NAME,G)}catch(Z){}}function mE1(I){try{return new URL(I,La2.WINDOW.location.origin).href}catch(d){return}}lE1.DEFAULT_TRACE_PROPAGATION_TARGETS=qm;lE1.defaultRequestInstrumentationOptions=X01;lE1.extractNetworkProtocol=uE1;lE1.instrumentOutgoingRequests=ya2;lE1.shouldAttachHeaders=TE1;lE1.xhrCallback=OE1});var jE1=Y((hE1)=>{Object.defineProperty(hE1,"__esModule",{value:!0});var dE=V0(),bE1=pI(),GE=kd();function ja2(I,d=!0,G=!0){if(!GE.WINDOW||!GE.WINDOW.location){bE1.DEBUG_BUILD&&dE.logger.warn("Could not initialize routing instrumentation due to invalid location");return}let Z=GE.WINDOW.location.href,C;if(d)C=I({name:GE.WINDOW.location.pathname,startTimestamp:dE.browserPerformanceTimeOrigin?dE.browserPerformanceTimeOrigin/1000:void 0,op:"pageload",origin:"auto.pageload.browser",metadata:{source:"url"}});if(G)dE.addHistoryInstrumentationHandler(({to:W,from:w})=>{if(w===void 0&&Z&&Z.indexOf(W)!==-1){Z=void 0;return}if(w!==W){if(Z=void 0,C)bE1.DEBUG_BUILD&&dE.logger.log(`[Tracing] Finishing current transaction with op: ${C.op}`),C.end();C=I({name:GE.WINDOW.location.pathname,op:"navigation",origin:"auto.navigation.browser",metadata:{source:"url"}})}})}hE1.instrumentRoutingWithDefaults=ja2});var rE1=Y((nE1)=>{Object.defineProperty(nE1,"__esModule",{value:!0});var gC=V4(),yA=V0(),aX=pI(),xa2=I01(),kE1=EN(),ZE=A01(),cE1=Rm(),ca2=jE1(),RF=kd(),pE1="BrowserTracing",pa2={...gC.TRACING_DEFAULTS,markBackgroundTransactions:!0,routingInstrumentation:ca2.instrumentRoutingWithDefaults,startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0,enableLongTask:!0,enableInp:!1,interactionsSampleRate:1,_experiments:{},...cE1.defaultRequestInstrumentationOptions},xE1=10;class iE1{constructor(I){if(this.name=pE1,this._hasSetTracePropagationTargets=!1,gC.addTracingExtensions(),aX.DEBUG_BUILD)this._hasSetTracePropagationTargets=!!(I&&(I.tracePropagationTargets||I.tracingOrigins));if(this.options={...pa2,...I},this.options._experiments.enableLongTask!==void 0)this.options.enableLongTask=this.options._experiments.enableLongTask;if(I&&!I.tracePropagationTargets&&I.tracingOrigins)this.options.tracePropagationTargets=I.tracingOrigins;if(this._collectWebVitals=ZE.startTrackingWebVitals(),this._interactionIdToRouteNameMapping={},this.options.enableInp)ZE.startTrackingINP(this._interactionIdToRouteNameMapping,this.options.interactionsSampleRate);if(this.options.enableLongTask)ZE.startTrackingLongTasks();if(this.options._experiments.enableInteractions)ZE.startTrackingInteractions();this._latestRoute={name:void 0,context:void 0}}setupOnce(I,d){this._getCurrentHub=d;let Z=d().getClient(),C=Z&&Z.getOptions(),{routingInstrumentation:W,startTransactionOnLocationChange:w,startTransactionOnPageLoad:B,markBackgroundTransactions:A,traceFetch:V,traceXHR:X,shouldCreateSpanForRequest:_,enableHTTPTimings:F,_experiments:g}=this.options,J=C&&C.tracePropagationTargets,K=J||this.options.tracePropagationTargets;if(aX.DEBUG_BUILD&&this._hasSetTracePropagationTargets&&J)yA.logger.warn("[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.");if(W((Q)=>{let E=this._createRouteTransaction(Q);return this.options._experiments.onStartRouteTransaction&&this.options._experiments.onStartRouteTransaction(E,Q,d),E},B,w),A)xa2.registerBackgroundTabDetection();if(g.enableInteractions)this._registerInteractionListener();if(this.options.enableInp)this._registerInpInteractionListener();cE1.instrumentOutgoingRequests({traceFetch:V,traceXHR:X,tracePropagationTargets:K,shouldCreateSpanForRequest:_,enableHTTPTimings:F})}_createRouteTransaction(I){if(!this._getCurrentHub){aX.DEBUG_BUILD&&yA.logger.warn(`[Tracing] Did not create ${I.op} transaction because _getCurrentHub is invalid.`);return}let d=this._getCurrentHub(),{beforeNavigate:G,idleTimeout:Z,finalTimeout:C,heartbeatInterval:W}=this.options,w=I.op==="pageload",B;if(w){let F=w?Y01("sentry-trace"):"",g=w?Y01("baggage"):void 0,{traceId:J,dsc:K,parentSpanId:Q,sampled:E}=yA.propagationContextFromHeaders(F,g);B={traceId:J,parentSpanId:Q,parentSampled:E,...I,metadata:{...I.metadata,dynamicSamplingContext:K},trimEnd:!0}}else B={trimEnd:!0,...I};let A=typeof G==="function"?G(B):B,V=A===void 0?{...B,sampled:!1}:A;if(V.metadata=V.name!==B.name?{...V.metadata,source:"custom"}:V.metadata,this._latestRoute.name=V.name,this._latestRoute.context=V,V.sampled===!1)aX.DEBUG_BUILD&&yA.logger.log(`[Tracing] Will not send ${V.op} transaction because of beforeNavigate.`);aX.DEBUG_BUILD&&yA.logger.log(`[Tracing] Starting ${V.op} transaction on scope`);let{location:X}=RF.WINDOW,_=gC.startIdleTransaction(d,V,Z,C,!0,{location:X},W,w);if(w){if(RF.WINDOW.document){if(RF.WINDOW.document.addEventListener("readystatechange",()=>{if(["interactive","complete"].includes(RF.WINDOW.document.readyState))_.sendAutoFinishSignal()}),["interactive","complete"].includes(RF.WINDOW.document.readyState))_.sendAutoFinishSignal()}}return _.registerBeforeFinishCallback((F)=>{this._collectWebVitals(),ZE.addPerformanceEntries(F)}),_}_registerInteractionListener(){let I,d=()=>{let{idleTimeout:G,finalTimeout:Z,heartbeatInterval:C}=this.options,W="ui.action.click",w=gC.getActiveTransaction();if(w&&w.op&&["navigation","pageload"].includes(w.op)){aX.DEBUG_BUILD&&yA.logger.warn("[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress.");return}if(I)I.setFinishReason("interactionInterrupted"),I.end(),I=void 0;if(!this._getCurrentHub){aX.DEBUG_BUILD&&yA.logger.warn("[Tracing] Did not create ui.action.click transaction because _getCurrentHub is invalid.");return}if(!this._latestRoute.name){aX.DEBUG_BUILD&&yA.logger.warn("[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.");return}let B=this._getCurrentHub(),{location:A}=RF.WINDOW,V={name:this._latestRoute.name,op:"ui.action.click",trimEnd:!0,data:{[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:this._latestRoute.context?ia2(this._latestRoute.context):"url"}};I=gC.startIdleTransaction(B,V,G,Z,!0,{location:A},C)};["click"].forEach((G)=>{if(RF.WINDOW.document)addEventListener(G,d,{once:!1,capture:!0})})}_registerInpInteractionListener(){let I=({entries:d})=>{let G=gC.getClient(),Z=G!==void 0&&G.getIntegrationByName!==void 0?G.getIntegrationByName("Replay"):void 0,C=Z!==void 0?Z.getReplayId():void 0,W=gC.getActiveTransaction(),w=gC.getCurrentScope(),B=w!==void 0?w.getUser():void 0;d.forEach((A)=>{if(na2(A)){let V=A.interactionId;if(V===void 0)return;let X=this._interactionIdToRouteNameMapping[V],_=A.duration,F=A.startTime,g=Object.keys(this._interactionIdToRouteNameMapping),J=g.length>0?g.reduce((K,Q)=>{return this._interactionIdToRouteNameMapping[K].durationthis._interactionIdToRouteNameMapping[Q]).some((Q)=>{return Q.duration===_&&Q.startTime===F}))return}if(!V)return;if(X)X.duration=Math.max(X.duration,_);else if(g.lengththis._interactionIdToRouteNameMapping[J].duration){let K=this._latestRoute.name,Q=this._latestRoute.context;if(K&&Q){if(J&&Object.keys(this._interactionIdToRouteNameMapping).length>=xE1)delete this._interactionIdToRouteNameMapping[J];this._interactionIdToRouteNameMapping[V]={routeName:K,duration:_,parentContext:Q,user:B,activeTransaction:W,replayId:C,startTime:F}}}}})};kE1.addPerformanceInstrumentationHandler("event",I),kE1.addPerformanceInstrumentationHandler("first-input",I)}}function Y01(I){let d=yA.getDomElement(`meta[name=${I}]`);return d?d.getAttribute("content"):void 0}function ia2(I){let d=I.attributes&&I.attributes[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],G=I.data&&I.data[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],Z=I.metadata&&I.metadata.source;return d||G||Z}function na2(I){return"duration"in I}nE1.BROWSER_TRACING_INTEGRATION_ID=pE1;nE1.BrowserTracing=iE1;nE1.getMetaContent=Y01});var GM1=Y((dM1)=>{Object.defineProperty(dM1,"__esModule",{value:!0});var d6=V4(),nG=V0(),sX=pI(),oa2=I01(),aE1=EN(),CE=A01(),oE1=Rm(),cd=kd(),eE1="BrowserTracing",ea2={...d6.TRACING_DEFAULTS,instrumentNavigation:!0,instrumentPageLoad:!0,markBackgroundSpan:!0,enableLongTask:!0,enableInp:!1,interactionsSampleRate:1,_experiments:{},...oE1.defaultRequestInstrumentationOptions},ta2=(I={})=>{let d=sX.DEBUG_BUILD?!!(I.tracePropagationTargets||I.tracingOrigins):!1;if(d6.addTracingExtensions(),!I.tracePropagationTargets&&I.tracingOrigins)I.tracePropagationTargets=I.tracingOrigins;let G={...ea2,...I},Z=CE.startTrackingWebVitals(),C={};if(G.enableInp)CE.startTrackingINP(C,G.interactionsSampleRate);if(G.enableLongTask)CE.startTrackingLongTasks();if(G._experiments.enableInteractions)CE.startTrackingInteractions();let W={name:void 0,context:void 0};function w(B){let A=d6.getCurrentHub(),{beforeStartSpan:V,idleTimeout:X,finalTimeout:_,heartbeatInterval:F}=G,g=B.op==="pageload",J;if(g){let S=g?_01("sentry-trace"):"",P=g?_01("baggage"):void 0,{traceId:$,dsc:h,parentSpanId:O,sampled:T}=nG.propagationContextFromHeaders(S,P);J={traceId:$,parentSpanId:O,parentSampled:T,...B,metadata:{...B.metadata,dynamicSamplingContext:h},trimEnd:!0}}else J={trimEnd:!0,...B};let K=V?V(J):J;if(K.metadata=K.name!==J.name?{...K.metadata,source:"custom"}:K.metadata,W.name=K.name,W.context=K,K.sampled===!1)sX.DEBUG_BUILD&&nG.logger.log(`[Tracing] Will not send ${K.op} transaction because of beforeNavigate.`);sX.DEBUG_BUILD&&nG.logger.log(`[Tracing] Starting ${K.op} transaction on scope`);let{location:Q}=cd.WINDOW,E=d6.startIdleTransaction(A,K,X,_,!0,{location:Q},F,g);if(g&&cd.WINDOW.document){if(cd.WINDOW.document.addEventListener("readystatechange",()=>{if(["interactive","complete"].includes(cd.WINDOW.document.readyState))E.sendAutoFinishSignal()}),["interactive","complete"].includes(cd.WINDOW.document.readyState))E.sendAutoFinishSignal()}return E.registerBeforeFinishCallback((S)=>{Z(),CE.addPerformanceEntries(S)}),E}return{name:eE1,setupOnce:()=>{},afterAllSetup(B){let A=B.getOptions(),{markBackgroundSpan:V,traceFetch:X,traceXHR:_,shouldCreateSpanForRequest:F,enableHTTPTimings:g,_experiments:J}=G,K=A&&A.tracePropagationTargets,Q=K||G.tracePropagationTargets;if(sX.DEBUG_BUILD&&d&&K)nG.logger.warn("[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.");let E,S=cd.WINDOW.location&&cd.WINDOW.location.href;if(B.on)B.on("startNavigationSpan",(P)=>{if(E)sX.DEBUG_BUILD&&nG.logger.log(`[Tracing] Finishing current transaction with op: ${d6.spanToJSON(E).op}`),E.end();E=w({op:"navigation",...P})}),B.on("startPageLoadSpan",(P)=>{if(E)sX.DEBUG_BUILD&&nG.logger.log(`[Tracing] Finishing current transaction with op: ${d6.spanToJSON(E).op}`),E.end();E=w({op:"pageload",...P})});if(G.instrumentPageLoad&&B.emit&&cd.WINDOW.location){let P={name:cd.WINDOW.location.pathname,startTimestamp:nG.browserPerformanceTimeOrigin?nG.browserPerformanceTimeOrigin/1000:void 0,origin:"auto.pageload.browser",attributes:{[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:"url"}};tE1(B,P)}if(G.instrumentNavigation&&B.emit&&cd.WINDOW.location)nG.addHistoryInstrumentationHandler(({to:P,from:$})=>{if($===void 0&&S&&S.indexOf(P)!==-1){S=void 0;return}if($!==P){S=void 0;let h={name:cd.WINDOW.location.pathname,origin:"auto.navigation.browser",attributes:{[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:"url"}};IM1(B,h)}});if(V)oa2.registerBackgroundTabDetection();if(J.enableInteractions)Is2(G,W);if(G.enableInp)Gs2(C,W);oE1.instrumentOutgoingRequests({traceFetch:X,traceXHR:_,tracePropagationTargets:Q,shouldCreateSpanForRequest:F,enableHTTPTimings:g})},options:G}};function tE1(I,d){if(!I.emit)return;I.emit("startPageLoadSpan",d);let G=d6.getActiveSpan();return(G&&d6.spanToJSON(G).op)==="pageload"?G:void 0}function IM1(I,d){if(!I.emit)return;I.emit("startNavigationSpan",d);let G=d6.getActiveSpan();return(G&&d6.spanToJSON(G).op)==="navigation"?G:void 0}function _01(I){let d=nG.getDomElement(`meta[name=${I}]`);return d?d.getAttribute("content"):void 0}function Is2(I,d){let G,Z=()=>{let{idleTimeout:C,finalTimeout:W,heartbeatInterval:w}=I,B="ui.action.click",A=d6.getActiveTransaction();if(A&&A.op&&["navigation","pageload"].includes(A.op)){sX.DEBUG_BUILD&&nG.logger.warn("[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress.");return}if(G)G.setFinishReason("interactionInterrupted"),G.end(),G=void 0;if(!d.name){sX.DEBUG_BUILD&&nG.logger.warn("[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.");return}let{location:V}=cd.WINDOW,X={name:d.name,op:"ui.action.click",trimEnd:!0,data:{[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:d.context?Zs2(d.context):"url"}};G=d6.startIdleTransaction(d6.getCurrentHub(),X,C,W,!0,{location:V},w)};["click"].forEach((C)=>{if(cd.WINDOW.document)addEventListener(C,Z,{once:!1,capture:!0})})}function ds2(I){return"duration"in I}var sE1=10;function Gs2(I,d){let G=({entries:Z})=>{let C=d6.getClient(),W=C!==void 0&&C.getIntegrationByName!==void 0?C.getIntegrationByName("Replay"):void 0,w=W!==void 0?W.getReplayId():void 0,B=d6.getActiveTransaction(),A=d6.getCurrentScope(),V=A!==void 0?A.getUser():void 0;Z.forEach((X)=>{if(ds2(X)){let _=X.interactionId;if(_===void 0)return;let F=I[_],g=X.duration,J=X.startTime,K=Object.keys(I),Q=K.length>0?K.reduce((E,S)=>{return I[E].durationI[S]).some((S)=>{return S.duration===g&&S.startTime===J}))return}if(!_)return;if(F)F.duration=Math.max(F.duration,g);else if(K.lengthI[Q].duration){let{name:E,context:S}=d;if(E&&S){if(Q&&Object.keys(I).length>=sE1)delete I[Q];I[_]={routeName:E,duration:g,parentContext:S,user:V,activeTransaction:B,replayId:w,startTime:J}}}}})};aE1.addPerformanceInstrumentationHandler("event",G),aE1.addPerformanceInstrumentationHandler("first-input",G)}function Zs2(I){let d=I.attributes&&I.attributes[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],G=I.data&&I.data[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],Z=I.metadata&&I.metadata.source;return d||G||Z}dM1.BROWSER_TRACING_INTEGRATION_ID=eE1;dM1.browserTracingIntegration=ta2;dM1.getMetaContent=_01;dM1.startBrowserTracingNavigationSpan=IM1;dM1.startBrowserTracingPageLoadSpan=tE1});var WM1=Y((CM1,WE)=>{Object.defineProperty(CM1,"__esModule",{value:!0});var ZM1=V4(),MN=V0();function Vs2(){let I=ZM1.getMainCarrier();if(!I.__SENTRY__)return;let d={mongodb(){return new(MN.dynamicRequire(WE,"./node/integrations/mongo")).Mongo},mongoose(){return new(MN.dynamicRequire(WE,"./node/integrations/mongo")).Mongo},mysql(){return new(MN.dynamicRequire(WE,"./node/integrations/mysql")).Mysql},pg(){return new(MN.dynamicRequire(WE,"./node/integrations/postgres")).Postgres}},G=Object.keys(d).filter((Z)=>!!MN.loadModule(Z)).map((Z)=>{try{return d[Z]()}catch(C){return}}).filter((Z)=>Z);if(G.length>0)I.__SENTRY__.integrations=[...I.__SENTRY__.integrations||[],...G]}function Xs2(){if(ZM1.addTracingExtensions(),MN.isNodeEnv())Vs2()}CM1.addExtensionMethods=Xs2});var H01=Y((XM1)=>{Object.defineProperty(XM1,"__esModule",{value:!0});var PA=V4(),wM1=V0(),_s2=gv1(),Ds2=Kv1(),Hs2=zv1(),Fs2=qv1(),gs2=vv1(),Js2=Sv1(),Ks2=Pv1(),Ns2=uv1(),BM1=rE1(),D01=GM1(),AM1=Rm(),Um=EN(),VM1=V01(),zs2=WM1();XM1.IdleTransaction=PA.IdleTransaction;XM1.Span=PA.Span;XM1.SpanStatus=PA.SpanStatus;XM1.Transaction=PA.Transaction;XM1.extractTraceparentData=PA.extractTraceparentData;XM1.getActiveTransaction=PA.getActiveTransaction;XM1.hasTracingEnabled=PA.hasTracingEnabled;XM1.spanStatusfromHttpCode=PA.spanStatusfromHttpCode;XM1.startIdleTransaction=PA.startIdleTransaction;XM1.TRACEPARENT_REGEXP=wM1.TRACEPARENT_REGEXP;XM1.stripUrlQueryAndFragment=wM1.stripUrlQueryAndFragment;XM1.Express=_s2.Express;XM1.Postgres=Ds2.Postgres;XM1.Mysql=Hs2.Mysql;XM1.Mongo=Fs2.Mongo;XM1.Prisma=gs2.Prisma;XM1.GraphQL=Js2.GraphQL;XM1.Apollo=Ks2.Apollo;XM1.lazyLoadedNodePerformanceMonitoringIntegrations=Ns2.lazyLoadedNodePerformanceMonitoringIntegrations;XM1.BROWSER_TRACING_INTEGRATION_ID=BM1.BROWSER_TRACING_INTEGRATION_ID;XM1.BrowserTracing=BM1.BrowserTracing;XM1.browserTracingIntegration=D01.browserTracingIntegration;XM1.startBrowserTracingNavigationSpan=D01.startBrowserTracingNavigationSpan;XM1.startBrowserTracingPageLoadSpan=D01.startBrowserTracingPageLoadSpan;XM1.defaultRequestInstrumentationOptions=AM1.defaultRequestInstrumentationOptions;XM1.instrumentOutgoingRequests=AM1.instrumentOutgoingRequests;XM1.addClsInstrumentationHandler=Um.addClsInstrumentationHandler;XM1.addFidInstrumentationHandler=Um.addFidInstrumentationHandler;XM1.addLcpInstrumentationHandler=Um.addLcpInstrumentationHandler;XM1.addPerformanceInstrumentationHandler=Um.addPerformanceInstrumentationHandler;XM1.addTracingHeadersToFetchRequest=VM1.addTracingHeadersToFetchRequest;XM1.instrumentFetchRequest=VM1.instrumentFetchRequest;XM1.addExtensionMethods=zs2.addExtensionMethods});var _M1=Y((YM1)=>{Object.defineProperty(YM1,"__esModule",{value:!0});var Io2=H01(),do2=V0();function Go2(){let I=Io2.lazyLoadedNodePerformanceMonitoringIntegrations.map((d)=>{try{return d()}catch(G){return}}).filter((d)=>!!d);if(I.length===0)do2.logger.warn("Performance monitoring integrations could not be automatically loaded.");return I.filter((d)=>!!d.loadDependency())}YM1.autoDiscoverNodePerformanceMonitoringIntegrations=Go2});var F01=Y((FM1)=>{Object.defineProperty(FM1,"__esModule",{value:!0});var Co2=B1("os"),Wo2=B1("util"),DM1=V4();class HM1 extends DM1.ServerRuntimeClient{constructor(I){DM1.applySdkMetadata(I,"node"),I.transportOptions={textEncoder:new Wo2.TextEncoder,...I.transportOptions};let d={...I,platform:"node",runtime:{name:"node",version:global.process.version},serverName:I.serverName||global.process.env.SENTRY_NAME||Co2.hostname()};super(d)}}FM1.NodeClient=HM1});var zM1=Y((NM1)=>{var{_nullishCoalesce:gM1}=V0();Object.defineProperty(NM1,"__esModule",{value:!0});var JM1=B1("http");B1("https");var Hw=Symbol("AgentBaseInternalState");class KM1 extends JM1.Agent{constructor(I){super(I);this[Hw]={}}isSecureEndpoint(I){if(I){if(typeof I.secureEndpoint==="boolean")return I.secureEndpoint;if(typeof I.protocol==="string")return I.protocol==="https:"}let{stack:d}=new Error;if(typeof d!=="string")return!1;return d.split(` +`).some((G)=>G.indexOf("(https.js:")!==-1||G.indexOf("node:https:")!==-1)}createSocket(I,d,G){let Z={...d,secureEndpoint:this.isSecureEndpoint(d)};Promise.resolve().then(()=>this.connect(I,Z)).then((C)=>{if(C instanceof JM1.Agent)return C.addRequest(I,Z);this[Hw].currentSocket=C,super.createSocket(I,d,G)},G)}createConnection(){let I=this[Hw].currentSocket;if(this[Hw].currentSocket=void 0,!I)throw new Error("No socket was returned in the `connect()` function");return I}get defaultPort(){return gM1(this[Hw].defaultPort,()=>this.protocol==="https:"?443:80)}set defaultPort(I){if(this[Hw])this[Hw].defaultPort=I}get protocol(){return gM1(this[Hw].protocol,()=>this.isSecureEndpoint()?"https:":"http:")}set protocol(I){if(this[Hw])this[Hw].protocol=I}}NM1.Agent=KM1});var fM1=Y((QM1)=>{Object.defineProperty(QM1,"__esModule",{value:!0});var Ao2=V0();function vm(...I){Ao2.logger.log("[https-proxy-agent:parse-proxy-response]",...I)}function Vo2(I){return new Promise((d,G)=>{let Z=0,C=[];function W(){let X=I.read();if(X)V(X);else I.once("readable",W)}function w(){I.removeListener("end",B),I.removeListener("error",A),I.removeListener("readable",W)}function B(){w(),vm("onend"),G(new Error("Proxy connection ended before receiving CONNECT response"))}function A(X){w(),vm("onerror %o",X),G(X)}function V(X){C.push(X),Z+=X.length;let _=Buffer.concat(C,Z),F=_.indexOf(`\r +\r +`);if(F===-1){vm("have not received end of HTTP headers yet..."),W();return}let g=_.slice(0,F).toString("ascii").split(`\r +`),J=g.shift();if(!J)return I.destroy(),G(new Error("No header received from proxy CONNECT response"));let K=J.split(" "),Q=+K[1],E=K.slice(2).join(" "),S={};for(let P of g){if(!P)continue;let $=P.indexOf(":");if($===-1)return I.destroy(),G(new Error(`Invalid header from proxy CONNECT response: "${P}"`));let h=P.slice(0,$).toLowerCase(),O=P.slice($+1).trimStart(),T=S[h];if(typeof T==="string")S[h]=[T,O];else if(Array.isArray(T))T.push(O);else S[h]=O}vm("got proxy server response: %o %o",J,S),w(),d({connect:{statusCode:Q,statusText:E,headers:S},buffered:_})}I.on("error",A),I.on("end",B),W()})}QM1.parseProxyResponse=Vo2});var vM1=Y((UM1)=>{var{_nullishCoalesce:Yo2,_optionalChain:_o2}=V0();Object.defineProperty(UM1,"__esModule",{value:!0});var wE=B1("net"),qM1=B1("tls"),Do2=B1("url"),Ho2=V0(),Fo2=zM1(),go2=fM1();function BE(...I){Ho2.logger.log("[https-proxy-agent]",...I)}class g01 extends Fo2.Agent{static __initStatic(){this.protocols=["http","https"]}constructor(I,d){super(d);this.options={},this.proxy=typeof I==="string"?new Do2.URL(I):I,this.proxyHeaders=Yo2(_o2([d,"optionalAccess",(C)=>C.headers]),()=>({})),BE("Creating new HttpsProxyAgent instance: %o",this.proxy.href);let G=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,""),Z=this.proxy.port?parseInt(this.proxy.port,10):this.proxy.protocol==="https:"?443:80;this.connectOpts={ALPNProtocols:["http/1.1"],...d?RM1(d,"headers"):null,host:G,port:Z}}async connect(I,d){let{proxy:G}=this;if(!d.host)throw new TypeError('No "host" provided');let Z;if(G.protocol==="https:"){BE("Creating `tls.Socket`: %o",this.connectOpts);let _=this.connectOpts.servername||this.connectOpts.host;Z=qM1.connect({...this.connectOpts,servername:_&&wE.isIP(_)?void 0:_})}else BE("Creating `net.Socket`: %o",this.connectOpts),Z=wE.connect(this.connectOpts);let C=typeof this.proxyHeaders==="function"?this.proxyHeaders():{...this.proxyHeaders},W=wE.isIPv6(d.host)?`[${d.host}]`:d.host,w=`CONNECT ${W}:${d.port} HTTP/1.1\r +`;if(G.username||G.password){let _=`${decodeURIComponent(G.username)}:${decodeURIComponent(G.password)}`;C["Proxy-Authorization"]=`Basic ${Buffer.from(_).toString("base64")}`}if(C.Host=`${W}:${d.port}`,!C["Proxy-Connection"])C["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close";for(let _ of Object.keys(C))w+=`${_}: ${C[_]}\r +`;let B=go2.parseProxyResponse(Z);Z.write(`${w}\r +`);let{connect:A,buffered:V}=await B;if(I.emit("proxyConnect",A),this.emit("proxyConnect",A,I),A.statusCode===200){if(I.once("socket",Jo2),d.secureEndpoint){BE("Upgrading socket connection to TLS");let _=d.servername||d.host;return qM1.connect({...RM1(d,"host","path","port"),socket:Z,servername:wE.isIP(_)?void 0:_})}return Z}Z.destroy();let X=new wE.Socket({writable:!1});return X.readable=!0,I.once("socket",(_)=>{BE("Replaying proxy buffer for failed request"),_.push(V),_.push(null)}),X}}g01.__initStatic();function Jo2(I){I.resume()}function RM1(I,...d){let G={},Z;for(Z in I)if(!d.includes(Z))G[Z]=I[Z];return G}UM1.HttpsProxyAgent=g01});var K01=Y((SM1)=>{var{_nullishCoalesce:J01}=V0();Object.defineProperty(SM1,"__esModule",{value:!0});var No2=B1("http"),zo2=B1("https"),Qo2=B1("stream"),MM1=B1("url"),fo2=B1("zlib"),EM1=V4(),qo2=V0(),Ro2=vM1(),Uo2=32768;function vo2(I){return new Qo2.Readable({read(){this.push(I),this.push(null)}})}function Eo2(I){let d;try{d=new MM1.URL(I.url)}catch(A){return qo2.consoleSandbox(()=>{console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.")}),EM1.createTransport(I,()=>Promise.resolve({}))}let G=d.protocol==="https:",Z=Mo2(d,I.proxy||(G?process.env.https_proxy:void 0)||process.env.http_proxy),C=G?zo2:No2,W=I.keepAlive===void 0?!1:I.keepAlive,w=Z?new Ro2.HttpsProxyAgent(Z):new C.Agent({keepAlive:W,maxSockets:30,timeout:2000}),B=So2(I,J01(I.httpModule,()=>C),w);return EM1.createTransport(I,B)}function Mo2(I,d){let{no_proxy:G}=process.env;if(G&&G.split(",").some((C)=>I.host.endsWith(C)||I.hostname.endsWith(C)))return;else return d}function So2(I,d,G){let{hostname:Z,pathname:C,port:W,protocol:w,search:B}=new MM1.URL(I.url);return function A(V){return new Promise((X,_)=>{let F=vo2(V.body),g={...I.headers};if(V.body.length>Uo2)g["content-encoding"]="gzip",F=F.pipe(fo2.createGzip());let J=d.request({method:"POST",agent:G,headers:g,hostname:Z,path:`${C}${B}`,port:W,protocol:w,ca:I.caCerts},(K)=>{K.on("data",()=>{}),K.on("end",()=>{}),K.setEncoding("utf8");let Q=J01(K.headers["retry-after"],()=>null),E=J01(K.headers["x-sentry-rate-limits"],()=>null);X({statusCode:K.statusCode,headers:{"retry-after":Q,"x-sentry-rate-limits":Array.isArray(E)?E[0]:E}})});J.on("error",_),F.pipe(J)})}}SM1.makeNodeTransport=Eo2});var UF=Y((LM1)=>{Object.defineProperty(LM1,"__esModule",{value:!0});var yo2=V0(),Po2=yo2.parseSemver(process.versions.node);LM1.NODE_VERSION=Po2});var uM1=Y(($M1)=>{var{_optionalChain:uo2}=V0();Object.defineProperty($M1,"__esModule",{value:!0});var yM1=B1("domain"),vF=V4();function PM1(){return yM1.active}function To2(){let I=PM1();if(!I)return;return vF.ensureHubOnCarrier(I),vF.getHubFromCarrier(I)}function Oo2(I){let d={};return vF.ensureHubOnCarrier(d,I),vF.getHubFromCarrier(d)}function mo2(I,d){let G=PM1();if(G&&uo2([d,"optionalAccess",(w)=>w.reuseExisting]))return I();let Z=yM1.create(),C=G?vF.getHubFromCarrier(G):void 0,W=Oo2(C);return vF.setHubOnCarrier(Z,W),Z.bind(()=>{return I()})()}function lo2(){vF.setAsyncContextStrategy({getCurrentHub:To2,runWithAsyncContext:mo2})}$M1.setDomainAsyncContextStrategy=lo2});var OM1=Y((TM1)=>{var{_optionalChain:ho2}=V0();Object.defineProperty(TM1,"__esModule",{value:!0});var N01=V4(),jo2=B1("async_hooks"),Em;function ko2(){if(!Em)Em=new jo2.AsyncLocalStorage;function I(){return Em.getStore()}function d(Z){let C={};return N01.ensureHubOnCarrier(C,Z),N01.getHubFromCarrier(C)}function G(Z,C){let W=I();if(W&&ho2([C,"optionalAccess",(B)=>B.reuseExisting]))return Z();let w=d(W);return Em.run(w,()=>{return Z()})}N01.setAsyncContextStrategy({getCurrentHub:I,runWithAsyncContext:G})}TM1.setHooksAsyncContextStrategy=ko2});var lM1=Y((mM1)=>{Object.defineProperty(mM1,"__esModule",{value:!0});var co2=UF(),po2=uM1(),io2=OM1();function no2(){if(co2.NODE_VERSION.major>=14)io2.setHooksAsyncContextStrategy();else po2.setDomainAsyncContextStrategy()}mM1.setNodeAsyncContextStrategy=no2});var Sm=Y((kM1)=>{Object.defineProperty(kM1,"__esModule",{value:!0});var ao2=B1("util"),Mm=V4(),bM1=V0(),hM1="Console",so2=()=>{return{name:hM1,setupOnce(){},setup(I){bM1.addConsoleInstrumentationHandler(({args:d,level:G})=>{if(Mm.getClient()!==I)return;Mm.addBreadcrumb({category:"console",level:bM1.severityLevelFromString(G),message:ao2.format.apply(void 0,d)},{input:[...d],level:G})})}}},jM1=Mm.defineIntegration(so2),oo2=Mm.convertIntegrationFnToClass(hM1,jM1);kM1.Console=oo2;kM1.consoleIntegration=jM1});var Lm=Y((eM1)=>{var{_optionalChain:EF}=V0();Object.defineProperty(eM1,"__esModule",{value:!0});var Ie2=B1("child_process"),cM1=B1("fs"),rG=B1("os"),de2=B1("path"),pM1=B1("util"),iM1=V4(),nM1=pM1.promisify(cM1.readFile),rM1=pM1.promisify(cM1.readdir),aM1="Context",Ge2=(I={})=>{let d,G={app:!0,os:!0,device:!0,culture:!0,cloudResource:!0,...I};async function Z(W){if(d===void 0)d=C();let w=Ce2(await d);return W.contexts={...W.contexts,app:{...w.app,...EF([W,"access",(B)=>B.contexts,"optionalAccess",(B)=>B.app])},os:{...w.os,...EF([W,"access",(B)=>B.contexts,"optionalAccess",(B)=>B.os])},device:{...w.device,...EF([W,"access",(B)=>B.contexts,"optionalAccess",(B)=>B.device])},culture:{...w.culture,...EF([W,"access",(B)=>B.contexts,"optionalAccess",(B)=>B.culture])},cloud_resource:{...w.cloud_resource,...EF([W,"access",(B)=>B.contexts,"optionalAccess",(B)=>B.cloud_resource])}},W}async function C(){let W={};if(G.os)W.os=await We2();if(G.app)W.app=Be2();if(G.device)W.device=oM1(G.device);if(G.culture){let w=we2();if(w)W.culture=w}if(G.cloudResource)W.cloud_resource=De2();return W}return{name:aM1,setupOnce(){},processEvent(W){return Z(W)}}},sM1=iM1.defineIntegration(Ge2),Ze2=iM1.convertIntegrationFnToClass(aM1,sM1);function Ce2(I){if(EF([I,"optionalAccess",(d)=>d.app,"optionalAccess",(d)=>d.app_memory]))I.app.app_memory=process.memoryUsage().rss;if(EF([I,"optionalAccess",(d)=>d.device,"optionalAccess",(d)=>d.free_memory]))I.device.free_memory=rG.freemem();return I}async function We2(){let I=rG.platform();switch(I){case"darwin":return Ye2();case"linux":return _e2();default:return{name:Ae2[I]||I,version:rG.release()}}}function we2(){try{if(typeof process.versions.icu!=="string")return;let I=new Date(900000000);if(new Intl.DateTimeFormat("es",{month:"long"}).format(I)==="enero"){let G=Intl.DateTimeFormat().resolvedOptions();return{locale:G.locale,timezone:G.timeZone}}}catch(I){}return}function Be2(){let I=process.memoryUsage().rss;return{app_start_time:new Date(Date.now()-process.uptime()*1000).toISOString(),app_memory:I}}function oM1(I){let d={},G;try{G=rG.uptime&&rG.uptime()}catch(Z){}if(typeof G==="number")d.boot_time=new Date(Date.now()-G*1000).toISOString();if(d.arch=rG.arch(),I===!0||I.memory)d.memory_size=rG.totalmem(),d.free_memory=rG.freemem();if(I===!0||I.cpu){let Z=rG.cpus();if(Z&&Z.length){let C=Z[0];d.processor_count=Z.length,d.cpu_description=C.model,d.processor_frequency=C.speed}}return d}var Ae2={aix:"IBM AIX",freebsd:"FreeBSD",openbsd:"OpenBSD",sunos:"SunOS",win32:"Windows"},Ve2=[{name:"fedora-release",distros:["Fedora"]},{name:"redhat-release",distros:["Red Hat Linux","Centos"]},{name:"redhat_version",distros:["Red Hat Linux"]},{name:"SuSE-release",distros:["SUSE Linux"]},{name:"lsb-release",distros:["Ubuntu Linux","Arch Linux"]},{name:"debian_version",distros:["Debian"]},{name:"debian_release",distros:["Debian"]},{name:"arch-release",distros:["Arch Linux"]},{name:"gentoo-release",distros:["Gentoo Linux"]},{name:"novell-release",distros:["SUSE Linux"]},{name:"alpine-release",distros:["Alpine Linux"]}],Xe2={alpine:(I)=>I,arch:(I)=>Fw(/distrib_release=(.*)/,I),centos:(I)=>Fw(/release ([^ ]+)/,I),debian:(I)=>I,fedora:(I)=>Fw(/release (..)/,I),mint:(I)=>Fw(/distrib_release=(.*)/,I),red:(I)=>Fw(/release ([^ ]+)/,I),suse:(I)=>Fw(/VERSION = (.*)\n/,I),ubuntu:(I)=>Fw(/distrib_release=(.*)/,I)};function Fw(I,d){let G=I.exec(d);return G?G[1]:void 0}async function Ye2(){let I={kernel_version:rG.release(),name:"Mac OS X",version:`10.${Number(rG.release().split(".")[0])-4}`};try{let d=await new Promise((G,Z)=>{Ie2.execFile("/usr/bin/sw_vers",(C,W)=>{if(C){Z(C);return}G(W)})});I.name=Fw(/^ProductName:\s+(.*)$/m,d),I.version=Fw(/^ProductVersion:\s+(.*)$/m,d),I.build=Fw(/^BuildVersion:\s+(.*)$/m,d)}catch(d){}return I}function xM1(I){return I.split(" ")[0].toLowerCase()}async function _e2(){let I={kernel_version:rG.release(),name:"Linux"};try{let d=await rM1("/etc"),G=Ve2.find((B)=>d.includes(B.name));if(!G)return I;let Z=de2.join("/etc",G.name),C=(await nM1(Z,{encoding:"utf-8"})).toLowerCase(),{distros:W}=G;I.name=W.find((B)=>C.indexOf(xM1(B))>=0)||W[0];let w=xM1(I.name);I.version=Xe2[w](C)}catch(d){}return I}function De2(){if(process.env.VERCEL)return{"cloud.provider":"vercel","cloud.region":process.env.VERCEL_REGION};else if(process.env.AWS_REGION)return{"cloud.provider":"aws","cloud.region":process.env.AWS_REGION,"cloud.platform":process.env.AWS_EXECUTION_ENV};else if(process.env.GCP_PROJECT)return{"cloud.provider":"gcp"};else if(process.env.ALIYUN_REGION_ID)return{"cloud.provider":"alibaba_cloud","cloud.region":process.env.ALIYUN_REGION_ID};else if(process.env.WEBSITE_SITE_NAME&&process.env.REGION_NAME)return{"cloud.provider":"azure","cloud.region":process.env.REGION_NAME};else if(process.env.IBM_CLOUD_REGION)return{"cloud.provider":"ibm_cloud","cloud.region":process.env.IBM_CLOUD_REGION};else if(process.env.TENCENTCLOUD_REGION)return{"cloud.provider":"tencent_cloud","cloud.region":process.env.TENCENTCLOUD_REGION,"cloud.account.id":process.env.TENCENTCLOUD_APPID,"cloud.availability_zone":process.env.TENCENTCLOUD_ZONE};else if(process.env.NETLIFY)return{"cloud.provider":"netlify"};else if(process.env.FLY_REGION)return{"cloud.provider":"fly.io","cloud.region":process.env.FLY_REGION};else if(process.env.DYNO)return{"cloud.provider":"heroku"};else return}eM1.Context=Ze2;eM1.getDeviceContext=oM1;eM1.nodeContextIntegration=sM1;eM1.readDirAsync=rM1;eM1.readFileAsync=nM1});var Pm=Y((ZS1)=>{var{_optionalChain:z01}=V0();Object.defineProperty(ZS1,"__esModule",{value:!0});var Ne2=B1("fs"),tM1=V4(),IS1=V0(),ym=new IS1.LRUMap(100),ze2=7,dS1="ContextLines";function Qe2(I){return new Promise((d,G)=>{Ne2.readFile(I,"utf8",(Z,C)=>{if(Z)G(Z);else d(C)})})}var fe2=(I={})=>{let d=I.frameContextLines!==void 0?I.frameContextLines:ze2;return{name:dS1,setupOnce(){},processEvent(G){return Re2(G,d)}}},GS1=tM1.defineIntegration(fe2),qe2=tM1.convertIntegrationFnToClass(dS1,GS1);async function Re2(I,d){let G={},Z=[];if(d>0&&z01([I,"access",(C)=>C.exception,"optionalAccess",(C)=>C.values]))for(let C of I.exception.values){if(!z01([C,"access",(W)=>W.stacktrace,"optionalAccess",(W)=>W.frames]))continue;for(let W=C.stacktrace.frames.length-1;W>=0;W--){let w=C.stacktrace.frames[W];if(w.filename&&!G[w.filename]&&!ym.get(w.filename))Z.push(ve2(w.filename)),G[w.filename]=1}}if(Z.length>0)await Promise.all(Z);if(d>0&&z01([I,"access",(C)=>C.exception,"optionalAccess",(C)=>C.values])){for(let C of I.exception.values)if(C.stacktrace&&C.stacktrace.frames)await Ue2(C.stacktrace.frames,d)}return I}function Ue2(I,d){for(let G of I)if(G.filename&&G.context_line===void 0){let Z=ym.get(G.filename);if(Z)try{IS1.addContextToFrame(Z,G,d)}catch(C){}}}async function ve2(I){let d=ym.get(I);if(d===null)return null;if(d!==void 0)return d;let G=null;try{G=(await Qe2(I)).split(` +`)}catch(Z){}return ym.set(I,G),G}ZS1.ContextLines=qe2;ZS1.contextLinesIntegration=GS1});var AE=Y((CS1)=>{Object.defineProperty(CS1,"__esModule",{value:!0});var Se2=typeof __SENTRY_DEBUG__==="undefined"||__SENTRY_DEBUG__;CS1.DEBUG_BUILD=Se2});var AS1=Y((BS1)=>{var{_optionalChain:gw}=V0();Object.defineProperty(BS1,"__esModule",{value:!0});var Q01=B1("url"),ye2=UF();function Pe2(I){let{protocol:d,hostname:G,port:Z}=wS1(I),C=I.path?I.path:"/";return`${d}//${G}${Z}${C}`}function WS1(I){let{protocol:d,hostname:G,port:Z}=wS1(I),C=I.pathname||"/",W=I.auth?$e2(I.auth):"";return`${d}//${W}${G}${Z}${C}`}function $e2(I){let[d,G]=I.split(":");return`${d?"[Filtered]":""}:${G?"[Filtered]":""}@`}function ue2(I,d,G){if(!I)return I;let[Z,C]=I.split(" ");if(d.host&&!d.protocol)d.protocol=gw([G,"optionalAccess",(W)=>W.agent,"optionalAccess",(W)=>W.protocol]),C=WS1(d);if(gw([C,"optionalAccess",(W)=>W.startsWith,"call",(W)=>W("///")]))C=C.slice(2);return`${Z} ${C}`}function f01(I){let d={protocol:I.protocol,hostname:typeof I.hostname==="string"&&I.hostname.startsWith("[")?I.hostname.slice(1,-1):I.hostname,hash:I.hash,search:I.search,pathname:I.pathname,path:`${I.pathname||""}${I.search||""}`,href:I.href};if(I.port!=="")d.port=Number(I.port);if(I.username||I.password)d.auth=`${I.username}:${I.password}`;return d}function Te2(I,d){let G,Z;if(typeof d[d.length-1]==="function")G=d.pop();if(typeof d[0]==="string")Z=f01(new Q01.URL(d[0]));else if(d[0]instanceof Q01.URL)Z=f01(d[0]);else{Z=d[0];try{let C=new Q01.URL(Z.path||"",`${Z.protocol||"http:"}//${Z.hostname}`);Z={pathname:C.pathname,search:C.search,hash:C.hash,...Z}}catch(C){}}if(d.length===2)Z={...Z,...d[1]};if(Z.protocol===void 0)if(ye2.NODE_VERSION.major>8)Z.protocol=gw([gw([I,"optionalAccess",(C)=>C.globalAgent]),"optionalAccess",(C)=>C.protocol])||gw([Z.agent,"optionalAccess",(C)=>C.protocol])||gw([Z._defaultAgent,"optionalAccess",(C)=>C.protocol]);else Z.protocol=gw([Z.agent,"optionalAccess",(C)=>C.protocol])||gw([Z._defaultAgent,"optionalAccess",(C)=>C.protocol])||gw([gw([I,"optionalAccess",(C)=>C.globalAgent]),"optionalAccess",(C)=>C.protocol]);if(G)return[Z,G];else return[Z]}function wS1(I){let d=I.protocol||"",G=I.hostname||I.host||"",Z=!I.port||I.port===80||I.port===443||/^(.*):(\d+)$/.test(G)?"":`:${I.port}`;return{protocol:d,hostname:G,port:Z}}BS1.cleanSpanDescription=ue2;BS1.extractRawUrl=Pe2;BS1.extractUrl=WS1;BS1.normalizeRequestArgs=Te2;BS1.urlToOptions=f01});var $m=Y((_S1)=>{var{_optionalChain:SN}=V0();Object.defineProperty(_S1,"__esModule",{value:!0});var f7=V4(),pd=V0(),q01=AE(),je2=UF(),VE=AS1(),ke2=(I={})=>{let{breadcrumbs:d,tracing:G,shouldCreateSpanForRequest:Z}=I,C={breadcrumbs:d,tracing:G===!1?!1:pd.dropUndefinedKeys({enableIfHasTracingEnabled:G===!0?void 0:!0,shouldCreateSpanForRequest:Z})};return new MF(C)},xe2=f7.defineIntegration(ke2);class MF{static __initStatic(){this.id="Http"}__init(){this.name=MF.id}constructor(I={}){MF.prototype.__init.call(this),this._breadcrumbs=typeof I.breadcrumbs==="undefined"?!0:I.breadcrumbs,this._tracing=!I.tracing?void 0:I.tracing===!0?{}:I.tracing}setupOnce(I,d){let G=SN([d,"call",(A)=>A(),"access",(A)=>A.getClient,"call",(A)=>A(),"optionalAccess",(A)=>A.getOptions,"call",(A)=>A()]),Z=XS1(this._tracing,G);if(!this._breadcrumbs&&!Z)return;if(G&&G.instrumenter!=="sentry"){q01.DEBUG_BUILD&&pd.logger.log("HTTP Integration is skipped because of instrumenter configuration.");return}let C=YS1(Z,this._tracing,G),W=SN([G,"optionalAccess",(A)=>A.tracePropagationTargets])||SN([this,"access",(A)=>A._tracing,"optionalAccess",(A)=>A.tracePropagationTargets]),w=B1("http"),B=VS1(w,this._breadcrumbs,C,W);if(pd.fill(w,"get",B),pd.fill(w,"request",B),je2.NODE_VERSION.major>8){let A=B1("https"),V=VS1(A,this._breadcrumbs,C,W);pd.fill(A,"get",V),pd.fill(A,"request",V)}}}MF.__initStatic();function VS1(I,d,G,Z){let C=new pd.LRUMap(100),W=new pd.LRUMap(100),w=(V)=>{if(G===void 0)return!0;let X=C.get(V);if(X!==void 0)return X;let _=G(V);return C.set(V,_),_},B=(V)=>{if(Z===void 0)return!0;let X=W.get(V);if(X!==void 0)return X;let _=pd.stringMatchesSomePattern(V,Z);return W.set(V,_),_};function A(V,X,_,F){if(!f7.getCurrentHub().getIntegration(MF))return;f7.addBreadcrumb({category:"http",data:{status_code:F&&F.statusCode,...X},type:"http"},{event:V,request:_,response:F})}return function V(X){return function _(...F){let g=VE.normalizeRequestArgs(I,F),J=g[0],K=VE.extractRawUrl(J),Q=VE.extractUrl(J),E=f7.getClient();if(f7.isSentryRequestUrl(Q,E))return X.apply(I,g);let S=f7.getCurrentScope(),P=f7.getIsolationScope(),$=f7.getActiveSpan(),h=pe2(Q,J),O=w(K)?SN([$,"optionalAccess",(T)=>T.startChild,"call",(T)=>T({op:"http.client",origin:"auto.http.node.http",description:`${h["http.method"]} ${h.url}`,data:h})]):void 0;if(E&&B(K)){let{traceId:T,spanId:V1,sampled:c,dsc:c1}={...P.getPropagationContext(),...S.getPropagationContext()},o1=O?f7.spanToTraceHeader(O):pd.generateSentryTraceHeader(T,V1,c),a1=pd.dynamicSamplingContextToSentryBaggageHeader(c1||(O?f7.getDynamicSamplingContextFromSpan(O):f7.getDynamicSamplingContextFromClient(T,E,S)));ce2(J,Q,o1,a1)}else q01.DEBUG_BUILD&&pd.logger.log(`[Tracing] Not adding sentry-trace header to outgoing request (${Q}) due to mismatching tracePropagationTargets option.`);return X.apply(I,g).once("response",function(T){let V1=this;if(d)A("response",h,V1,T);if(O){if(T.statusCode)f7.setHttpStatus(O,T.statusCode);O.updateName(VE.cleanSpanDescription(f7.spanToJSON(O).description||"",J,V1)||""),O.end()}}).once("error",function(){let T=this;if(d)A("error",h,T);if(O)f7.setHttpStatus(O,500),O.updateName(VE.cleanSpanDescription(f7.spanToJSON(O).description||"",J,T)||""),O.end()})}}}function ce2(I,d,G,Z){if((I.headers||{})["sentry-trace"])return;q01.DEBUG_BUILD&&pd.logger.log(`[Tracing] Adding sentry-trace header ${G} to outgoing request to "${d}": `),I.headers={...I.headers,"sentry-trace":G,...Z&&Z.length>0&&{baggage:ie2(I,Z)}}}function pe2(I,d){let G=d.method||"GET",Z={url:I,"http.method":G};if(d.hash)Z["http.fragment"]=d.hash.substring(1);if(d.search)Z["http.query"]=d.search.substring(1);return Z}function ie2(I,d){if(!I.headers||!I.headers.baggage)return d;else if(!d)return I.headers.baggage;else if(Array.isArray(I.headers.baggage))return[...I.headers.baggage,d];return[I.headers.baggage,d]}function XS1(I,d){return I===void 0?!1:I.enableIfHasTracingEnabled?f7.hasTracingEnabled(d):!0}function YS1(I,d,G){return I?SN([d,"optionalAccess",(C)=>C.shouldCreateSpanForRequest])||SN([G,"optionalAccess",(C)=>C.shouldCreateSpanForRequest]):()=>!1}_S1.Http=MF;_S1._getShouldCreateSpanForRequest=YS1;_S1._shouldCreateSpans=XS1;_S1.httpIntegration=xe2});var FS1=Y((HS1)=>{Object.defineProperty(HS1,"__esModule",{value:!0});function oe2(I,d,G){let Z=0,C=5,W=0;return setInterval(()=>{if(W===0){if(Z>I){if(C*=2,G(C),C>86400)C=86400;W=C}}else if(W-=1,W===0)d();Z=0},1000).unref(),()=>{Z+=1}}function R01(I){return I!==void 0&&(I.length===0||I==="?"||I==="")}function ee2(I,d){return I===d||R01(I)&&R01(d)}function DS1(I){if(I===void 0)return;return I.slice(-10).reduce((d,G)=>`${d},${G.function},${G.lineno},${G.colno}`,"")}function te2(I,d){if(d===void 0)return;return DS1(I(d,1))}HS1.createRateLimiter=oe2;HS1.functionNamesMatch=ee2;HS1.hashFrames=DS1;HS1.hashFromStack=te2;HS1.isAnonymous=R01});var zS1=Y((NS1)=>{var{_optionalChain:O3}=V0();Object.defineProperty(NS1,"__esModule",{value:!0});var U01=V4(),um=V0(),Wt2=UF(),Tm=FS1();function v01(I){let d=[],G=!1;function Z(w){if(d=[],G)return;G=!0,I(w)}d.push(Z);function C(w){d.push(w)}function W(w){let B=d.pop()||Z;try{B(w)}catch(A){Z(w)}}return{add:C,next:W}}class gS1{constructor(){let{Session:I}=B1("inspector");this._session=new I}configureAndConnect(I,d){this._session.connect(),this._session.on("Debugger.paused",(G)=>{I(G,()=>{this._session.post("Debugger.resume")})}),this._session.post("Debugger.enable"),this._session.post("Debugger.setPauseOnExceptions",{state:d?"all":"uncaught"})}setPauseOnExceptions(I){this._session.post("Debugger.setPauseOnExceptions",{state:I?"all":"uncaught"})}getLocalVariables(I,d){this._getProperties(I,(G)=>{let{add:Z,next:C}=v01(d);for(let W of G)if(O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.objectId])&&O3([W,"optionalAccess",(w)=>w.value,"access",(w)=>w.className])==="Array"){let w=W.value.objectId;Z((B)=>this._unrollArray(w,W.name,B,C))}else if(O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.objectId])&&O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.className])==="Object"){let w=W.value.objectId;Z((B)=>this._unrollObject(w,W.name,B,C))}else if(O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.value])!=null||O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.description])!=null)Z((w)=>this._unrollOther(W,w,C));C({})})}_getProperties(I,d){this._session.post("Runtime.getProperties",{objectId:I,ownProperties:!0},(G,Z)=>{if(G)d([]);else d(Z.result)})}_unrollArray(I,d,G,Z){this._getProperties(I,(C)=>{G[d]=C.filter((W)=>W.name!=="length"&&!isNaN(parseInt(W.name,10))).sort((W,w)=>parseInt(W.name,10)-parseInt(w.name,10)).map((W)=>O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.value])),Z(G)})}_unrollObject(I,d,G,Z){this._getProperties(I,(C)=>{G[d]=C.map((W)=>[W.name,O3([W,"optionalAccess",(w)=>w.value,"optionalAccess",(w)=>w.value])]).reduce((W,[w,B])=>{return W[w]=B,W},{}),Z(G)})}_unrollOther(I,d,G){if(O3([I,"optionalAccess",(Z)=>Z.value,"optionalAccess",(Z)=>Z.value])!=null)d[I.name]=I.value.value;else if(O3([I,"optionalAccess",(Z)=>Z.value,"optionalAccess",(Z)=>Z.description])!=null&&O3([I,"optionalAccess",(Z)=>Z.value,"optionalAccess",(Z)=>Z.type])!=="function")d[I.name]=`<${I.value.description}>`;G(d)}}function wt2(){try{return new gS1}catch(I){return}}var JS1="LocalVariables",Bt2=(I={},d=wt2())=>{let G=new um.LRUMap(20),Z,C=!1;function W(A,{params:{reason:V,data:X,callFrames:_}},F){if(V!=="exception"&&V!=="promiseRejection"){F();return}O3([Z,"optionalCall",(Q)=>Q()]);let g=Tm.hashFromStack(A,O3([X,"optionalAccess",(Q)=>Q.description]));if(g==null){F();return}let{add:J,next:K}=v01((Q)=>{G.set(g,Q),F()});for(let Q=0;QO.type==="local"),h=P.className==="global"||!P.className?S:`${P.className}.${S}`;if(O3([$,"optionalAccess",(O)=>O.object,"access",(O)=>O.objectId])===void 0)J((O)=>{O[Q]={function:h},K(O)});else{let O=$.object.objectId;J((T)=>O3([d,"optionalAccess",(V1)=>V1.getLocalVariables,"call",(V1)=>V1(O,(c)=>{T[Q]={function:h,vars:c},K(T)})]))}}K([])}function w(A){let V=Tm.hashFrames(O3([A,"optionalAccess",(F)=>F.stacktrace,"optionalAccess",(F)=>F.frames]));if(V===void 0)return;let X=G.remove(V);if(X===void 0)return;let _=(O3([A,"access",(F)=>F.stacktrace,"optionalAccess",(F)=>F.frames])||[]).filter((F)=>F.function!=="new Promise");for(let F=0;F<_.length;F++){let g=_.length-F-1;if(!_[g]||!X[F])break;if(X[F].vars===void 0||_[g].in_app===!1||!Tm.functionNamesMatch(_[g].function,X[F].function))continue;_[g].vars=X[F].vars}}function B(A){for(let V of O3([A,"optionalAccess",(X)=>X.exception,"optionalAccess",(X)=>X.values])||[])w(V);return A}return{name:JS1,setupOnce(){let A=U01.getClient(),V=O3([A,"optionalAccess",(X)=>X.getOptions,"call",(X)=>X()]);if(d&&O3([V,"optionalAccess",(X)=>X.includeLocalVariables])){if(Wt2.NODE_VERSION.major<18){um.logger.log("The `LocalVariables` integration is only supported on Node >= v18.");return}let _=I.captureAllExceptions!==!1;if(d.configureAndConnect((F,g)=>W(V.stackParser,F,g),_),_){let F=I.maxExceptionsPerSecond||50;Z=Tm.createRateLimiter(F,()=>{um.logger.log("Local variables rate-limit lifted."),O3([d,"optionalAccess",(g)=>g.setPauseOnExceptions,"call",(g)=>g(!0)])},(g)=>{um.logger.log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${g} seconds.`),O3([d,"optionalAccess",(J)=>J.setPauseOnExceptions,"call",(J)=>J(!1)])})}C=!0}},processEvent(A){if(C)return B(A);return A},_getCachedFramesCount(){return G.size},_getFirstCachedFrame(){return G.values()[0]}}},KS1=U01.defineIntegration(Bt2),At2=U01.convertIntegrationFnToClass(JS1,KS1);NS1.LocalVariablesSync=At2;NS1.createCallbackList=v01;NS1.localVariablesSyncIntegration=KS1});var Om=Y((fS1)=>{Object.defineProperty(fS1,"__esModule",{value:!0});var QS1=zS1(),_t2=QS1.LocalVariablesSync,Dt2=QS1.localVariablesSyncIntegration;fS1.LocalVariables=_t2;fS1.localVariablesIntegration=Dt2});var mm=Y((MS1)=>{Object.defineProperty(MS1,"__esModule",{value:!0});var qS1=B1("fs"),RS1=B1("path"),US1=V4(),E01,vS1="Modules";function gt2(){try{return B1.cache?Object.keys(B1.cache):[]}catch(I){return[]}}function Jt2(){let I=B1.main&&B1.main.paths||[],d=gt2(),G={},Z={};return d.forEach((C)=>{let W=C,w=()=>{let B=W;if(W=RS1.dirname(B),!W||B===W||Z[B])return;if(I.indexOf(W)<0)return w();let A=RS1.join(B,"package.json");if(Z[B]=!0,!qS1.existsSync(A))return w();try{let V=JSON.parse(qS1.readFileSync(A,"utf8"));G[V.name]=V.version}catch(V){}};w()}),G}function Kt2(){if(!E01)E01=Jt2();return E01}var Nt2=()=>{return{name:vS1,setupOnce(){},processEvent(I){return I.modules={...I.modules,...Kt2()},I}}},ES1=US1.defineIntegration(Nt2),zt2=US1.convertIntegrationFnToClass(vS1,ES1);MS1.Modules=zt2;MS1.modulesIntegration=ES1});var S01=Y((SS1)=>{Object.defineProperty(SS1,"__esModule",{value:!0});var qt2=V4(),lm=V0(),M01=AE(),Rt2=2000;function Ut2(I){lm.consoleSandbox(()=>{console.error(I)});let d=qt2.getClient();if(d===void 0)M01.DEBUG_BUILD&&lm.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1);let G=d.getOptions(),Z=G&&G.shutdownTimeout&&G.shutdownTimeout>0&&G.shutdownTimeout||Rt2;d.close(Z).then((C)=>{if(!C)M01.DEBUG_BUILD&&lm.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!");global.process.exit(1)},(C)=>{M01.DEBUG_BUILD&&lm.logger.error(C)})}SS1.logAndExitProcess=Ut2});var hm=Y((uS1)=>{Object.defineProperty(uS1,"__esModule",{value:!0});var bm=V4(),Et2=V0(),Mt2=AE(),LS1=S01(),yS1="OnUncaughtException",St2=(I={})=>{let d={exitEvenIfOtherHandlersAreRegistered:!0,...I};return{name:yS1,setupOnce(){},setup(G){global.process.on("uncaughtException",$S1(G,d))}}},PS1=bm.defineIntegration(St2),Lt2=bm.convertIntegrationFnToClass(yS1,PS1);function $S1(I,d){let Z=!1,C=!1,W=!1,w,B=I.getOptions();return Object.assign((A)=>{let V=LS1.logAndExitProcess;if(d.onFatalError)V=d.onFatalError;else if(B.onFatalError)V=B.onFatalError;let _=global.process.listeners("uncaughtException").reduce((g,J)=>{if(J.name==="domainUncaughtExceptionClear"||J.tag&&J.tag==="sentry_tracingErrorCallback"||J._errorHandler)return g;else return g+1},0)===0,F=d.exitEvenIfOtherHandlersAreRegistered||_;if(!Z){if(w=A,Z=!0,bm.getClient()===I)bm.captureException(A,{originalException:A,captureContext:{level:"fatal"},mechanism:{handled:!1,type:"onuncaughtexception"}});if(!W&&F)W=!0,V(A)}else if(F){if(W)Mt2.DEBUG_BUILD&&Et2.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),LS1.logAndExitProcess(A);else if(!C)C=!0,setTimeout(()=>{if(!W)W=!0,V(w,A)},2000)}},{_errorHandler:!0})}uS1.OnUncaughtException=Lt2;uS1.makeErrorHandler=$S1;uS1.onUncaughtExceptionIntegration=PS1});var km=Y((bS1)=>{Object.defineProperty(bS1,"__esModule",{value:!0});var jm=V4(),TS1=V0(),ut2=S01(),OS1="OnUnhandledRejection",Tt2=(I={})=>{let d=I.mode||"warn";return{name:OS1,setupOnce(){},setup(G){global.process.on("unhandledRejection",lS1(G,{mode:d}))}}},mS1=jm.defineIntegration(Tt2),Ot2=jm.convertIntegrationFnToClass(OS1,mS1);function lS1(I,d){return function G(Z,C){if(jm.getClient()!==I)return;jm.captureException(Z,{originalException:C,captureContext:{extra:{unhandledPromiseRejection:!0}},mechanism:{handled:!1,type:"onunhandledrejection"}}),mt2(Z,d)}}function mt2(I,d){let G="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";if(d.mode==="warn")TS1.consoleSandbox(()=>{console.warn(G),console.error(I&&I.stack?I.stack:I)});else if(d.mode==="strict")TS1.consoleSandbox(()=>{console.warn(G)}),ut2.logAndExitProcess(I)}bS1.OnUnhandledRejection=Ot2;bS1.makeUnhandledPromiseHandler=lS1;bS1.onUnhandledRejectionIntegration=mS1});var xm=Y((cS1)=>{Object.defineProperty(cS1,"__esModule",{value:!0});var jt2=B1("http"),kt2=B1("url"),hS1=V4(),LN=V0(),jS1="Spotlight",xt2=(I={})=>{let d={sidecarUrl:I.sidecarUrl||"http://localhost:8969/stream"};return{name:jS1,setupOnce(){},setup(G){if(typeof process==="object"&&process.env)LN.logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?");pt2(G,d)}}},kS1=hS1.defineIntegration(xt2),ct2=hS1.convertIntegrationFnToClass(jS1,kS1);function pt2(I,d){let G=it2(d.sidecarUrl);if(!G)return;let Z=0;if(typeof I.on!=="function"){LN.logger.warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)");return}I.on("beforeEnvelope",(C)=>{if(Z>3){LN.logger.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests");return}let W=LN.serializeEnvelope(C),B=xS1()({method:"POST",path:G.pathname,hostname:G.hostname,port:G.port,headers:{"Content-Type":"application/x-sentry-envelope"}},(A)=>{A.on("data",()=>{}),A.on("end",()=>{}),A.setEncoding("utf8")});B.on("error",()=>{Z++,LN.logger.warn("[Spotlight] Failed to send envelope to Spotlight Sidecar")}),B.write(W),B.end()})}function it2(I){try{return new kt2.URL(`${I}`)}catch(d){LN.logger.warn(`[Spotlight] Invalid sidecar URL: ${I}`);return}}function xS1(){let{request:I}=jt2;if(nt2(I))return I.__sentry_original__;return I}function nt2(I){return"__sentry_original__"in I}cS1.Spotlight=ct2;cS1.getNativeHttpRequest=xS1;cS1.spotlightIntegration=kS1});var pm=Y((pS1)=>{var{_optionalChain:cm}=V0();Object.defineProperty(pS1,"__esModule",{value:!0});var g6=V4(),SF=V0(),ot2=UF();pS1.ChannelName=void 0;(function(I){I.RequestCreate="undici:request:create";let G="undici:request:headers";I.RequestEnd=G;let Z="undici:request:error";I.RequestError=Z})(pS1.ChannelName||(pS1.ChannelName={}));var et2=(I)=>{return new nI(I)},tt2=g6.defineIntegration(et2);class nI{static __initStatic(){this.id="Undici"}__init(){this.name=nI.id}__init2(){this._createSpanUrlMap=new SF.LRUMap(100)}__init3(){this._headersUrlMap=new SF.LRUMap(100)}constructor(I={}){nI.prototype.__init.call(this),nI.prototype.__init2.call(this),nI.prototype.__init3.call(this),nI.prototype.__init4.call(this),nI.prototype.__init5.call(this),nI.prototype.__init6.call(this),this._options={breadcrumbs:I.breadcrumbs===void 0?!0:I.breadcrumbs,tracing:I.tracing,shouldCreateSpanForRequest:I.shouldCreateSpanForRequest}}setupOnce(I){if(ot2.NODE_VERSION.major<16)return;let d;try{d=B1("diagnostics_channel")}catch(G){}if(!d||!d.subscribe)return;d.subscribe(pS1.ChannelName.RequestCreate,this._onRequestCreate),d.subscribe(pS1.ChannelName.RequestEnd,this._onRequestEnd),d.subscribe(pS1.ChannelName.RequestError,this._onRequestError)}_shouldCreateSpan(I){if(this._options.tracing===!1||this._options.tracing===void 0&&!g6.hasTracingEnabled())return!1;if(this._options.shouldCreateSpanForRequest===void 0)return!0;let d=this._createSpanUrlMap.get(I);if(d!==void 0)return d;let G=this._options.shouldCreateSpanForRequest(I);return this._createSpanUrlMap.set(I,G),G}__init4(){this._onRequestCreate=(I)=>{if(!cm([g6.getClient,"call",(X)=>X(),"optionalAccess",(X)=>X.getIntegration,"call",(X)=>X(nI)]))return;let{request:d}=I,G=d.origin?d.origin.toString()+d.path:d.path,Z=g6.getClient();if(!Z)return;if(g6.isSentryRequestUrl(G,Z)||d.__sentry_span__!==void 0)return;let C=Z.getOptions(),W=g6.getCurrentScope(),w=g6.getIsolationScope(),B=g6.getActiveSpan(),A=this._shouldCreateSpan(G)?d14(B,d,G):void 0;if(A)d.__sentry_span__=A;if(((X)=>{if(C.tracePropagationTargets===void 0)return!0;let _=this._headersUrlMap.get(X);if(_!==void 0)return _;let F=SF.stringMatchesSomePattern(X,C.tracePropagationTargets);return this._headersUrlMap.set(X,F),F})(G)){let{traceId:X,spanId:_,sampled:F,dsc:g}={...w.getPropagationContext(),...W.getPropagationContext()},J=A?g6.spanToTraceHeader(A):SF.generateSentryTraceHeader(X,_,F),K=SF.dynamicSamplingContextToSentryBaggageHeader(g||(A?g6.getDynamicSamplingContextFromSpan(A):g6.getDynamicSamplingContextFromClient(X,Z,W)));I14(d,J,K)}}}__init5(){this._onRequestEnd=(I)=>{if(!cm([g6.getClient,"call",(W)=>W(),"optionalAccess",(W)=>W.getIntegration,"call",(W)=>W(nI)]))return;let{request:d,response:G}=I,Z=d.origin?d.origin.toString()+d.path:d.path;if(g6.isSentryRequestUrl(Z,g6.getClient()))return;let C=d.__sentry_span__;if(C)g6.setHttpStatus(C,G.statusCode),C.end();if(this._options.breadcrumbs)g6.addBreadcrumb({category:"http",data:{method:d.method,status_code:G.statusCode,url:Z},type:"http"},{event:"response",request:d,response:G})}}__init6(){this._onRequestError=(I)=>{if(!cm([g6.getClient,"call",(C)=>C(),"optionalAccess",(C)=>C.getIntegration,"call",(C)=>C(nI)]))return;let{request:d}=I,G=d.origin?d.origin.toString()+d.path:d.path;if(g6.isSentryRequestUrl(G,g6.getClient()))return;let Z=d.__sentry_span__;if(Z)Z.setStatus("internal_error"),Z.end();if(this._options.breadcrumbs)g6.addBreadcrumb({category:"http",data:{method:d.method,url:G},level:"error",type:"http"},{event:"error",request:d})}}}nI.__initStatic();function I14(I,d,G){let Z;if(Array.isArray(I.headers))Z=I.headers.some((C)=>C==="sentry-trace");else Z=I.headers.split(`\r +`).some((W)=>W.startsWith("sentry-trace:"));if(Z)return;if(I.addHeader("sentry-trace",d),G)I.addHeader("baggage",G)}function d14(I,d,G){let Z=SF.parseUrl(G),C=d.method||"GET",W={"http.method":C};if(Z.search)W["http.query"]=Z.search;if(Z.hash)W["http.fragment"]=Z.hash;return cm([I,"optionalAccess",(w)=>w.startChild,"call",(w)=>w({op:"http.client",origin:"auto.http.node.undici",description:`${C} ${SF.getSanitizedUrlString(Z)}`,data:W})])}pS1.Undici=nI;pS1.nativeNodeFetchintegration=tt2});var L01=Y((rS1)=>{Object.defineProperty(rS1,"__esModule",{value:!0});var iS1=B1("path"),C14=V0();function nS1(I){return I.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function W14(I=process.argv[1]?C14.dirname(process.argv[1]):process.cwd(),d=iS1.sep==="\\"){let G=d?nS1(I):I;return(Z)=>{if(!Z)return;let C=d?nS1(Z):Z,{dir:W,base:w,ext:B}=iS1.posix.parse(C);if(B===".js"||B===".mjs"||B===".cjs")w=w.slice(0,B.length*-1);if(!W)W=".";let A=W.lastIndexOf("/node_modules");if(A>-1)return`${W.slice(A+14).replace(/\//g,".")}:${w}`;if(W.startsWith(G)){let V=W.slice(G.length+1).replace(/\//g,".");if(V)V+=":";return V+=w,V}return w}}rS1.createGetModuleFromFilename=W14});var y01=Y((tS1)=>{var{_optionalChain:B14}=V0();Object.defineProperty(tS1,"__esModule",{value:!0});var aG=V4(),LF=V0(),A14=lM1(),V14=F01(),X14=Sm(),Y14=Lm(),_14=Pm(),D14=$m(),H14=Om(),F14=mm(),g14=hm(),J14=km(),K14=xm(),N14=pm(),z14=L01(),Q14=K01(),aS1=[aG.inboundFiltersIntegration(),aG.functionToStringIntegration(),aG.linkedErrorsIntegration(),aG.requestDataIntegration(),X14.consoleIntegration(),D14.httpIntegration(),N14.nativeNodeFetchintegration(),g14.onUncaughtExceptionIntegration(),J14.onUnhandledRejectionIntegration(),_14.contextLinesIntegration(),H14.localVariablesIntegration(),Y14.nodeContextIntegration(),F14.modulesIntegration()];function sS1(I){let d=aG.getMainCarrier(),G=B14([d,"access",(Z)=>Z.__SENTRY__,"optionalAccess",(Z)=>Z.integrations])||[];return[...aS1,...G]}function f14(I={}){if(A14.setNodeAsyncContextStrategy(),I.defaultIntegrations===void 0)I.defaultIntegrations=sS1();if(I.dsn===void 0&&process.env.SENTRY_DSN)I.dsn=process.env.SENTRY_DSN;let d=process.env.SENTRY_TRACES_SAMPLE_RATE;if(I.tracesSampleRate===void 0&&d){let Z=parseFloat(d);if(isFinite(Z))I.tracesSampleRate=Z}if(I.release===void 0){let Z=oS1();if(Z!==void 0)I.release=Z;else I.autoSessionTracking=!1}if(I.environment===void 0&&process.env.SENTRY_ENVIRONMENT)I.environment=process.env.SENTRY_ENVIRONMENT;if(I.autoSessionTracking===void 0&&I.dsn!==void 0)I.autoSessionTracking=!0;if(I.instrumenter===void 0)I.instrumenter="sentry";let G={...I,stackParser:LF.stackParserFromStackParserOptions(I.stackParser||eS1),integrations:aG.getIntegrationsToSetup(I),transport:I.transport||Q14.makeNodeTransport};if(aG.initAndBind(I.clientClass||V14.NodeClient,G),I.autoSessionTracking)R14();if(U14(),I.spotlight){let Z=aG.getClient();if(Z&&Z.addIntegration){let C=Z.getOptions().integrations;for(let W of C)Z.addIntegration(W);Z.addIntegration(K14.spotlightIntegration({sidecarUrl:typeof I.spotlight==="string"?I.spotlight:void 0}))}}}function q14(I){if(I===void 0)return!1;let d=I&&I.getOptions();if(d&&d.autoSessionTracking!==void 0)return d.autoSessionTracking;return!1}function oS1(I){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;if(LF.GLOBAL_OBJ.SENTRY_RELEASE&&LF.GLOBAL_OBJ.SENTRY_RELEASE.id)return LF.GLOBAL_OBJ.SENTRY_RELEASE.id;return process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||I}var eS1=LF.createStackParser(LF.nodeStackLineParser(z14.createGetModuleFromFilename()));function R14(){aG.startSession(),process.on("beforeExit",()=>{let I=aG.getIsolationScope().getSession();if(I&&!["exited","crashed"].includes(I.status))aG.endSession()})}function U14(){let I=(process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase();if(!["false","n","no","off","0"].includes(I)){let d=process.env.SENTRY_TRACE,G=process.env.SENTRY_BAGGAGE,Z=LF.propagationContextFromHeaders(d,G);aG.getCurrentScope().setPropagationContext(Z)}}tS1.defaultIntegrations=aS1;tS1.defaultStackParser=eS1;tS1.getDefaultIntegrations=sS1;tS1.getSentryRelease=oS1;tS1.init=f14;tS1.isAutoSessionTrackingEnabled=q14});var dL1=Y((IL1)=>{Object.defineProperty(IL1,"__esModule",{value:!0});var im=B1("fs"),P01=B1("path");function P14(I){let d=P01.resolve(I);if(!im.existsSync(d))throw new Error(`Cannot read contents of ${d}. Directory does not exist.`);if(!im.statSync(d).isDirectory())throw new Error(`Cannot read contents of ${d}, because it is not a directory.`);let G=(Z)=>{return im.readdirSync(Z).reduce((C,W)=>{let w=P01.join(Z,W);if(im.statSync(w).isDirectory())return C.concat(G(w));return C.push(w),C},[])};return G(d).map((Z)=>P01.relative(d,Z))}IL1.deepReadDirSync=P14});var GL1=Y((u14)=>{/*! @sentry/node 7.120.0 (611282e) | https://github.com/getsentry/sentry-javascript */u14.base64WorkerScript="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8qKgogKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBjb250YWluZWQgaW4gdGhlIGdsb2JhbCBgX19TRU5UUllfX2Agb2JqZWN0LgogKgogKiBJZiB0aGUgc2luZ2xldG9uIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiBgX19TRU5UUllfX2AsIGl0IHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gZmFjdG9yeQogKiBmdW5jdGlvbiBhbmQgYWRkZWQgdG8gdGhlIGBfX1NFTlRSWV9fYCBvYmplY3QuCiAqCiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGdsb2JhbCBzaW5nbGV0b24gb24gX19TRU5UUllfXwogKiBAcGFyYW0gY3JlYXRvciBjcmVhdG9yIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBzaW5nbGV0b24gaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIGBfX1NFTlRSWV9fYAogKiBAcGFyYW0gb2JqIChPcHRpb25hbCkgVGhlIGdsb2JhbCBvYmplY3Qgb24gd2hpY2ggdG8gbG9vayBmb3IgYF9fU0VOVFJZX19gLCBpZiBub3QgYEdMT0JBTF9PQkpgJ3MgcmV0dXJuIHZhbHVlCiAqIEByZXR1cm5zIHRoZSBzaW5nbGV0b24KICovCmZ1bmN0aW9uIGdldEdsb2JhbFNpbmdsZXRvbihuYW1lLCBjcmVhdG9yLCBvYmopIHsKICBjb25zdCBnYmwgPSAob2JqIHx8IEdMT0JBTF9PQkopIDsKICBjb25zdCBfX1NFTlRSWV9fID0gKGdibC5fX1NFTlRSWV9fID0gZ2JsLl9fU0VOVFJZX18gfHwge30pOwogIGNvbnN0IHNpbmdsZXRvbiA9IF9fU0VOVFJZX19bbmFtZV0gfHwgKF9fU0VOVFJZX19bbmFtZV0gPSBjcmVhdG9yKCkpOwogIHJldHVybiBzaW5nbGV0b247Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGlzIGFscmVhZHkgYW4gYXJyYXksIGFuZCBpZiBpdCBpc24ndCwgd3JhcHMgaXQgaW4gb25lLgogKgogKiBAcGFyYW0gbWF5YmVBcnJheSBJbnB1dCB0byB0dXJuIGludG8gYW4gYXJyYXksIGlmIG5lY2Vzc2FyeQogKiBAcmV0dXJucyBUaGUgaW5wdXQsIGlmIGFscmVhZHkgYW4gYXJyYXksIG9yIGFuIGFycmF5IHdpdGggdGhlIGlucHV0IGFzIHRoZSBvbmx5IGVsZW1lbnQsIGlmIG5vdAogKi8KZnVuY3Rpb24gYXJyYXlpZnkobWF5YmVBcnJheSkgewogIHJldHVybiBBcnJheS5pc0FycmF5KG1heWJlQXJyYXkpID8gbWF5YmVBcnJheSA6IFttYXliZUFycmF5XTsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovCi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8KCi8qKgogKiBIZWxwZXIgdG8gZGVjeWNsZSBqc29uIG9iamVjdHMKICovCmZ1bmN0aW9uIG1lbW9CdWlsZGVyKCkgewogIGNvbnN0IGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJzsKICBjb25zdCBpbm5lciA9IGhhc1dlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogW107CiAgZnVuY3Rpb24gbWVtb2l6ZShvYmopIHsKICAgIGlmIChoYXNXZWFrU2V0KSB7CiAgICAgIGlmIChpbm5lci5oYXMob2JqKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlubmVyLmFkZChvYmopOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2YKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdmFsdWUgPSBpbm5lcltpXTsKICAgICAgaWYgKHZhbHVlID09PSBvYmopIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaW5uZXIucHVzaChvYmopOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaW5uZXIuZGVsZXRlKG9iaik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGlubmVyW2ldID09PSBvYmopIHsKICAgICAgICAgIGlubmVyLnNwbGljZShpLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gW21lbW9pemUsIHVubWVtb2l6ZV07Cn0KCi8qKgogKiBSZWN1cnNpdmVseSBub3JtYWxpemVzIHRoZSBnaXZlbiBvYmplY3QuCiAqCiAqIC0gQ3JlYXRlcyBhIGNvcHkgdG8gcHJldmVudCBvcmlnaW5hbCBpbnB1dCBtdXRhdGlvbgogKiAtIFNraXBzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMKICogLSBXaGVuIHN0cmluZ2lmeWluZywgY2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWQKICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIChgdW5kZWZpbmVkYC9gTmFOYC9mdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXQKICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL2NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zCiAqIC0gVGFrZXMgY2FyZSBvZiBgRXJyb3JgIG9iamVjdCBzZXJpYWxpemF0aW9uCiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgZGVwdGggb2YgZmluYWwgb3V0cHV0CiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICoKICogQHBhcmFtIGlucHV0IFRoZSBvYmplY3QgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGRlcHRoIFRoZSBtYXggZGVwdGggdG8gd2hpY2ggdG8gbm9ybWFsaXplIHRoZSBvYmplY3QuIChBbnl0aGluZyBkZWVwZXIgc3RyaW5naWZpZWQgd2hvbGUuKQogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBUaGUgbWF4IG51bWJlciBvZiBlbGVtZW50cyBvciBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgYXJyYXkgb3IKICogb2JqZWN0IGluIHRoZSBub3JtYWxsaXplZCBvdXRwdXQuCiAqIEByZXR1cm5zIEEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBvYmplY3QsIG9yIGAiKipub24tc2VyaWFsaXphYmxlKioiYCBpZiBhbnkgZXJyb3JzIGFyZSB0aHJvd24gZHVyaW5nIG5vcm1hbGl6YXRpb24uCiAqLwovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQpmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoID0gMTAwLCBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5KSB7CiAgdHJ5IHsKICAgIC8vIHNpbmNlIHdlJ3JlIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwsIHdlIGRvbid0IHByb3ZpZGUgYSBrZXkKICAgIHJldHVybiB2aXNpdCgnJywgaW5wdXQsIGRlcHRoLCBtYXhQcm9wZXJ0aWVzKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiB7IEVSUk9SOiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgIH07CiAgfQp9CgovKioKICogVmlzaXRzIGEgbm9kZSB0byBwZXJmb3JtIG5vcm1hbGl6YXRpb24gb24gaXQKICoKICogQHBhcmFtIGtleSBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG5vZGUKICogQHBhcmFtIHZhbHVlIFRoZSBub2RlIHRvIGJlIHZpc2l0ZWQKICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aAogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5CiAqIEBwYXJhbSBtZW1vIE9wdGlvbmFsIE1lbW8gY2xhc3MgaGFuZGxpbmcgZGVjeWNsaW5nCiAqLwpmdW5jdGlvbiB2aXNpdCgKICBrZXksCiAgdmFsdWUsCiAgZGVwdGggPSArSW5maW5pdHksCiAgbWF4UHJvcGVydGllcyA9ICtJbmZpbml0eSwKICBtZW1vID0gbWVtb0J1aWxkZXIoKSwKKSB7CiAgY29uc3QgW21lbW9pemUsIHVubWVtb2l6ZV0gPSBtZW1vOwoKICAvLyBHZXQgdGhlIHNpbXBsZSBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdAogIGlmICgKICAgIHZhbHVlID09IG51bGwgfHwgLy8gdGhpcyBtYXRjaGVzIG51bGwgYW5kIHVuZGVmaW5lZCAtPiBlcWVxIG5vdCBlcWVxZXEKICAgIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgJiYgIWlzTmFOJDEodmFsdWUpKQogICkgewogICAgcmV0dXJuIHZhbHVlIDsKICB9CgogIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5VmFsdWUoa2V5LCB2YWx1ZSk7CgogIC8vIEFueXRoaW5nIHdlIGNvdWxkIHBvdGVudGlhbGx5IGRpZyBpbnRvIG1vcmUgKG9iamVjdHMgb3IgYXJyYXlzKSB3aWxsIGhhdmUgY29tZSBiYWNrIGFzIGAiW29iamVjdCBYWFhYXSJgLgogIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQsIHNvIGlmIHdlIGRvbid0IHNlZSB0aGF0IHBhdHRlcm4sIHdlJ3JlIGRvbmUuCiAgaWYgKCFzdHJpbmdpZmllZC5zdGFydHNXaXRoKCdbb2JqZWN0ICcpKSB7CiAgICByZXR1cm4gc3RyaW5naWZpZWQ7CiAgfQoKICAvLyBGcm9tIGhlcmUgb24sIHdlIGNhbiBhc3NlcnQgdGhhdCBgdmFsdWVgIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCgogIC8vIERvIG5vdCBub3JtYWxpemUgb2JqZWN0cyB0aGF0IHdlIGtub3cgaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gQXMgYSBnZW5lcmFsIHJ1bGUsIHRoZQogIC8vICJfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyIgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgdXNlZCBzcGFyaW5nbHkgYW5kIG9ubHkgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIG9iamVjdHMgdGhhdAogIC8vIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCiAgaWYgKCh2YWx1ZSApWydfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyddKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgLy8gV2UgY2FuIHNldCBgX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fYCBvbiBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgZnJvbSB0aGVyZQogIC8vIFdlIGtlZXAgYSBjZXJ0YWluIGFtb3VudCBvZiBkZXB0aC4KICAvLyBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgZS5nLiB3ZSB1c2UgaXQgZm9yIHRoZSByZWR1eCBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgd2UgZ2V0IGEgY2VydGFpbiBhbW91bnQgb2Ygc3RhdGUuCiAgY29uc3QgcmVtYWluaW5nRGVwdGggPQogICAgdHlwZW9mICh2YWx1ZSApWydfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX18nXSA9PT0gJ251bWJlcicKICAgICAgPyAoKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddICkKICAgICAgOiBkZXB0aDsKCiAgLy8gV2UncmUgYWxzbyBkb25lIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBkZXB0aAogIGlmIChyZW1haW5pbmdEZXB0aCA9PT0gMCkgewogICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGBzZXJpYWxpemVkYCBpcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBgIltvYmplY3QgWFhYWF0iYC4gQ2xlYW4gaXQgdXAgc28gaXQncyBqdXN0IGAiW1hYWFhdImAuCiAgICByZXR1cm4gc3RyaW5naWZpZWQucmVwbGFjZSgnb2JqZWN0ICcsICcnKTsKICB9CgogIC8vIElmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlLiBJZiBub3QsIG5vdGUgdGhhdCB3ZSdyZSBzZWVpbmcgaXQgbm93LgogIGlmIChtZW1vaXplKHZhbHVlKSkgewogICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nOwogIH0KCiAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZCwgd2UgY2FsbCBpdCB0byBleHRyYWN0IG1vcmUgaW5mb3JtYXRpb24KICBjb25zdCB2YWx1ZVdpdGhUb0pTT04gPSB2YWx1ZSA7CiAgaWYgKHZhbHVlV2l0aFRvSlNPTiAmJiB0eXBlb2YgdmFsdWVXaXRoVG9KU09OLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgdHJ5IHsKICAgICAgY29uc3QganNvblZhbHVlID0gdmFsdWVXaXRoVG9KU09OLnRvSlNPTigpOwogICAgICAvLyBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGAudG9KU09OKClgIGluIGNhc2UgaXQgaGFzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICAgICAgcmV0dXJuIHZpc2l0KCcnLCBqc29uVmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgLy8gcGFzcyAoVGhlIGJ1aWx0LWluIGB0b0pTT05gIGZhaWxlZCwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gZG8gaXQgb3Vyc2VsdmVzKQogICAgfQogIH0KCiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGVpdGhlciBoYXZlIGFuIG9iamVjdCBvciBhbiBhcnJheSwgd2UgaGF2ZW4ndCBzZWVuIGl0IGJlZm9yZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIHJlY3Vyc2UKICAvLyBiZWNhdXNlIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIG1heCBkZXB0aC4gQ3JlYXRlIGFuIGFjY3VtdWxhdG9yIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2YgdmlzaXRpbmcgZWFjaAogIC8vIHByb3BlcnR5L2VudHJ5LCBhbmQga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdlIGFkZCB0byBpdC4KICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSkgOwogIGxldCBudW1BZGRlZCA9IDA7CgogIC8vIEJlZm9yZSB3ZSBiZWdpbiwgY29udmVydGBFcnJvcmAgYW5kYEV2ZW50YCBpbnN0YW5jZXMgaW50byBwbGFpbiBvYmplY3RzLCBzaW5jZSBzb21lIG9mIGVhY2ggb2YgdGhlaXIgcmVsZXZhbnQKICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tZW51bWVyYWJsZSBhbmQgb3RoZXJ3aXNlIHdvdWxkIGdldCBtaXNzZWQuCiAgY29uc3QgdmlzaXRhYmxlID0gY29udmVydFRvUGxhaW5PYmplY3QodmFsdWUgKTsKCiAgZm9yIChjb25zdCB2aXNpdEtleSBpbiB2aXNpdGFibGUpIHsKICAgIC8vIEF2b2lkIGl0ZXJhdGluZyBvdmVyIGZpZWxkcyBpbiB0aGUgcHJvdG90eXBlIGlmIHRoZXkndmUgc29tZWhvdyBiZWVuIGV4cG9zZWQgdG8gZW51bWVyYXRpb24uCiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aXNpdGFibGUsIHZpc2l0S2V5KSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAobnVtQWRkZWQgPj0gbWF4UHJvcGVydGllcykgewogICAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9ICdbTWF4UHJvcGVydGllcyB+XSc7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IHZpc2l0IGFsbCB0aGUgY2hpbGQgbm9kZXMKICAgIGNvbnN0IHZpc2l0VmFsdWUgPSB2aXNpdGFibGVbdmlzaXRLZXldOwogICAgbm9ybWFsaXplZFt2aXNpdEtleV0gPSB2aXNpdCh2aXNpdEtleSwgdmlzaXRWYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKCiAgICBudW1BZGRlZCsrOwogIH0KCiAgLy8gT25jZSB3ZSd2ZSB2aXNpdGVkIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlCiAgdW5tZW1vaXplKHZhbHVlKTsKCiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlcwogIHJldHVybiBub3JtYWxpemVkOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovCi8qKgogKiBTdHJpbmdpZnkgdGhlIGdpdmVuIHZhbHVlLiBIYW5kbGVzIHZhcmlvdXMga25vd24gc3BlY2lhbCB2YWx1ZXMgYW5kIHR5cGVzLgogKgogKiBOb3QgbWVhbnQgdG8gYmUgdXNlZCBvbiBzaW1wbGUgcHJpbWl0aXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGl0IHdpbGwsIGZvciBleGFtcGxlLCB0dXJuCiAqIHRoZSBudW1iZXIgMTIzMSBpbnRvICJbT2JqZWN0IE51bWJlcl0iLCBub3Igb24gYG51bGxgLCBhcyBpdCB3aWxsIHRocm93LgogKgogKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeQogKiBAcmV0dXJucyBBIHN0cmluZ2lmaWVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB2YWx1ZQogKi8KZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUoCiAga2V5LAogIC8vIHRoaXMgdHlwZSBpcyBhIHRpbnkgYml0IG9mIGEgY2hlYXQsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lcyBoYW5kbGUgTmFOICh3aGljaCBpcyB0ZWNobmljYWxseSBhIG51bWJlciksIGJ1dCBmb3IKICAvLyBvdXIgaW50ZXJuYWwgdXNlLCBpdCdsbCBkbwogIHZhbHVlLAopIHsKICB0cnkgewogICAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgKS5fZXZlbnRzKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbl0nOwogICAgfQoKICAgIGlmIChrZXkgPT09ICdkb21haW5FbWl0dGVyJykgewogICAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7CiAgICB9CgogICAgLy8gSXQncyBzYWZlIHRvIHVzZSBgZ2xvYmFsYCwgYHdpbmRvd2AsIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3QKICAgIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgoKICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZ2xvYmFsKSB7CiAgICAgIHJldHVybiAnW0dsb2JhbF0nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gd2luZG93KSB7CiAgICAgIHJldHVybiAnW1dpbmRvd10nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBkb2N1bWVudCkgewogICAgICByZXR1cm4gJ1tEb2N1bWVudF0nOwogICAgfQoKICAgIGlmIChpc1Z1ZVZpZXdNb2RlbCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuICdbVnVlVmlld01vZGVsXSc7CiAgICB9CgogICAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3kKICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tTeW50aGV0aWNFdmVudF0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkgewogICAgICByZXR1cm4gJ1tOYU5dJzsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBgW0Z1bmN0aW9uOiAke2dldEZ1bmN0aW9uTmFtZSh2YWx1ZSl9XWA7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHsKICAgICAgcmV0dXJuIGBbJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIHN0cmluZ2lmaWVkIEJpZ0ludHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gcmVndWxhciBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGxhYmVsIHRoZW0gdG8gYXZvaWQgY29uZnVzaW9uCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgewogICAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDsKICAgIH0KCiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBrbm9ja2VkIG91dCBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgYW5kIHRoZSBwcmltaXRpdmVzLCBhbGwgd2UgaGF2ZSBsZWZ0IGFyZSBvYmplY3RzLiBTaW1wbHkgY2FzdGluZwogICAgLy8gdGhlbSB0byBzdHJpbmdzIG1lYW5zIHRoYXQgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2hpY2ggaGF2ZW4ndCBkZWZpbmVkIHRoZWlyIGB0b1N0cmluZ1RhZ2Agd2lsbCBqdXN0IGNvbWUgb3V0IGFzCiAgICAvLyBgIltvYmplY3QgT2JqZWN0XSJgLiBJZiB3ZSBpbnN0ZWFkIGxvb2sgYXQgdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzKSwKICAgIC8vIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBvbmx5IHBsYWluIG9iamVjdHMgY29tZSBvdXQgdGhhdCB3YXkuCiAgICBjb25zdCBvYmpOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKTsKCiAgICAvLyBIYW5kbGUgSFRNTCBFbGVtZW50cwogICAgaWYgKC9eSFRNTChcdyopRWxlbWVudCQvLnRlc3Qob2JqTmFtZSkpIHsKICAgICAgcmV0dXJuIGBbSFRNTEVsZW1lbnQ6ICR7b2JqTmFtZX1dYDsKICAgIH0KCiAgICByZXR1cm4gYFtvYmplY3QgJHtvYmpOYW1lfV1gOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWA7CiAgfQp9Ci8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqLwoKZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKCiAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogJ251bGwgcHJvdG90eXBlJzsKfQoKLyoqCiAqIE5vcm1hbGl6ZXMgVVJMcyBpbiBleGNlcHRpb25zIGFuZCBzdGFja3RyYWNlcyB0byBhIGJhc2UgcGF0aCBzbyBTZW50cnkgY2FuIGZpbmdlcnByaW50CiAqIGFjcm9zcyBwbGF0Zm9ybXMgYW5kIHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGJhc2VQYXRoIFRoZSBhcHBsaWNhdGlvbiBiYXNlIHBhdGguCiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC4KICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVVybFRvQmFzZSh1cmwsIGJhc2VQYXRoKSB7CiAgY29uc3QgZXNjYXBlZEJhc2UgPSBiYXNlUGF0aAogICAgLy8gQmFja3NsYXNoIHRvIGZvcndhcmQKICAgIC5yZXBsYWNlKC9cXC9nLCAnLycpCiAgICAvLyBFc2NhcGUgUmVnRXhwIHNwZWNpYWwgY2hhcmFjdGVycwogICAgLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCAnXFwkJicpOwoKICBsZXQgbmV3VXJsID0gdXJsOwogIHRyeSB7CiAgICBuZXdVcmwgPSBkZWNvZGVVUkkodXJsKTsKICB9IGNhdGNoIChfT28pIHsKICAgIC8vIFNvbWV0aW1lIHRoaXMgYnJlYWtzCiAgfQogIHJldHVybiAoCiAgICBuZXdVcmwKICAgICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgICAgLnJlcGxhY2UoL3dlYnBhY2s6XC8/L2csICcnKSAvLyBSZW1vdmUgaW50ZXJtZWRpYXRlIGJhc2UgcGF0aAogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNlbnRyeS1pbnRlcm5hbC9zZGsvbm8tcmVnZXhwLWNvbnN0cnVjdG9yCiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZXNjYXBlZEJhc2V9LypgLCAnaWcnKSwgJ2FwcDovLy8nKQogICk7Cn0KCi8vIFNsaWdodGx5IG1vZGlmaWVkIChubyBJRTggc3VwcG9ydCwgRVM2KSBhbmQgdHJhbnNjcmliZWQgdG8gVHlwZVNjcmlwdAoKLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb24KLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy4KY29uc3Qgc3BsaXRQYXRoUmUgPSAvXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87Ci8qKiBKU0RvYyAqLwpmdW5jdGlvbiBzcGxpdFBhdGgoZmlsZW5hbWUpIHsKICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvcwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC84NzM3I2Rpc2N1c3Npb25fcjEyODU3MTkxNzIKICBjb25zdCB0cnVuY2F0ZWQgPSBmaWxlbmFtZS5sZW5ndGggPiAxMDI0ID8gYDx0cnVuY2F0ZWQ+JHtmaWxlbmFtZS5zbGljZSgtMTAyNCl9YCA6IGZpbGVuYW1lOwogIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpOwogIHJldHVybiBwYXJ0cyA/IHBhcnRzLnNsaWNlKDEpIDogW107Cn0KCi8qKiBKU0RvYyAqLwpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsKICBjb25zdCByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCk7CiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTsKICBsZXQgZGlyID0gcmVzdWx0WzFdOwoKICBpZiAoIXJvb3QgJiYgIWRpcikgewogICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyCiAgICByZXR1cm4gJy4nOwogIH0KCiAgaWYgKGRpcikgewogICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2gKICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7CiAgfQoKICByZXR1cm4gcm9vdCArIGRpcjsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovCgovKiogU3luY1Byb21pc2UgaW50ZXJuYWwgc3RhdGVzICovCnZhciBTdGF0ZXM7IChmdW5jdGlvbiAoU3RhdGVzKSB7CiAgLyoqIFBlbmRpbmcgKi8KICBjb25zdCBQRU5ESU5HID0gMDsgU3RhdGVzW1N0YXRlc1siUEVORElORyJdID0gUEVORElOR10gPSAiUEVORElORyI7CiAgLyoqIFJlc29sdmVkIC8gT0sgKi8KICBjb25zdCBSRVNPTFZFRCA9IDE7IFN0YXRlc1tTdGF0ZXNbIlJFU09MVkVEIl0gPSBSRVNPTFZFRF0gPSAiUkVTT0xWRUQiOwogIC8qKiBSZWplY3RlZCAvIEVycm9yICovCiAgY29uc3QgUkVKRUNURUQgPSAyOyBTdGF0ZXNbU3RhdGVzWyJSRUpFQ1RFRCJdID0gUkVKRUNURURdID0gIlJFSkVDVEVEIjsKfSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpOwoKLy8gT3ZlcmxvYWRzIHNvIHdlIGNhbiBjYWxsIHJlc29sdmVkU3luY1Byb21pc2Ugd2l0aG91dCBhcmd1bWVudHMgYW5kIGdlbmVyaWMgYXJndW1lbnQKCi8qKgogKiBDcmVhdGVzIGEgcmVzb2x2ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVzb2x2ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZXNvbHZlZFN5bmNQcm9taXNlKHZhbHVlKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHsKICAgIHJlc29sdmUodmFsdWUpOwogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHN5bmMgcHJvbWlzZS4KICoKICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZWplY3QgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVqZWN0ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZWplY3RlZFN5bmNQcm9taXNlKHJlYXNvbikgewogIHJldHVybiBuZXcgU3luY1Byb21pc2UoKF8sIHJlamVjdCkgPT4gewogICAgcmVqZWN0KHJlYXNvbik7CiAgfSk7Cn0KCi8qKgogKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2UKICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5CiAqLwpjbGFzcyBTeW5jUHJvbWlzZSB7CgogICBjb25zdHJ1Y3RvcigKICAgIGV4ZWN1dG9yLAogICkge1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTsKICAgIHRoaXMuX3N0YXRlID0gU3RhdGVzLlBFTkRJTkc7CiAgICB0aGlzLl9oYW5kbGVycyA9IFtdOwoKICAgIHRyeSB7CiAgICAgIGV4ZWN1dG9yKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuX3JlamVjdChlKTsKICAgIH0KICB9CgogIC8qKiBKU0RvYyAqLwogICB0aGVuKAogICAgb25mdWxmaWxsZWQsCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goWwogICAgICAgIGZhbHNlLAogICAgICAgIHJlc3VsdCA9PiB7CiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7CiAgICAgICAgICAgIC8vIFRPRE86IMKvXF8o44OEKV8vwq8KICAgICAgICAgICAgLy8gVE9ETzogRklYTUUKICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVhc29uID0+IHsKICAgICAgICAgIGlmICghb25yZWplY3RlZCkgewogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgXSk7CiAgICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogICAgfSk7CiAgfQoKICAvKiogSlNEb2MgKi8KICAgY2F0Y2goCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIHRoaXMudGhlbih2YWwgPT4gdmFsLCBvbnJlamVjdGVkKTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBmaW5hbGx5KG9uZmluYWxseSkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCB2YWw7CiAgICAgIGxldCBpc1JlamVjdGVkOwoKICAgICAgcmV0dXJuIHRoaXMudGhlbigKICAgICAgICB2YWx1ZSA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gZmFsc2U7CiAgICAgICAgICB2YWwgPSB2YWx1ZTsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7CiAgICAgICAgICB2YWwgPSByZWFzb247CiAgICAgICAgICBpZiAob25maW5hbGx5KSB7CiAgICAgICAgICAgIG9uZmluYWxseSgpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHsKICAgICAgICAgIHJlamVjdCh2YWwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzb2x2ZSh2YWwgKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0KCkge3RoaXMuX3Jlc29sdmUgPSAodmFsdWUpID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQyKCkge3RoaXMuX3JlamVjdCA9IChyZWFzb24pID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVKRUNURUQsIHJlYXNvbik7CiAgfTt9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0MygpIHt0aGlzLl9zZXRSZXN1bHQgPSAoc3RhdGUsIHZhbHVlKSA9PiB7CiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHsKICAgICAgdm9pZCAodmFsdWUgKS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOwogICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKCiAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQ0KCkge3RoaXMuX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHsKICAgICAgaWYgKGhhbmRsZXJbMF0pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7CiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcwogICAgICAgIGhhbmRsZXJbMV0odGhpcy5fdmFsdWUgKTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHsKICAgICAgICBoYW5kbGVyWzJdKHRoaXMuX3ZhbHVlKTsKICAgICAgfQoKICAgICAgaGFuZGxlclswXSA9IHRydWU7CiAgICB9KTsKICB9O30KfQoKLyoqCiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdAogKiBAcGFyYW0gbGltaXQgbWF4IG51bWJlciBvZiBwcm9taXNlcyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlcgogKi8KZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHsKICBjb25zdCBidWZmZXIgPSBbXTsKCiAgZnVuY3Rpb24gaXNSZWFkeSgpIHsKICAgIHJldHVybiBsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlci5sZW5ndGggPCBsaW1pdDsKICB9CgogIC8qKgogICAqIFJlbW92ZSBhIHByb21pc2UgZnJvbSB0aGUgcXVldWUuCiAgICoKICAgKiBAcGFyYW0gdGFzayBDYW4gYmUgYW55IFByb21pc2VMaWtlPFQ+CiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLgogICAqLwogIGZ1bmN0aW9uIHJlbW92ZSh0YXNrKSB7CiAgICByZXR1cm4gYnVmZmVyLnNwbGljZShidWZmZXIuaW5kZXhPZih0YXNrKSwgMSlbMF07CiAgfQoKICAvKioKICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuCiAgICoKICAgKiBAcGFyYW0gdGFza1Byb2R1Y2VyIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGFueSBQcm9taXNlTGlrZTxUPjsgSW4gcHJldmlvdXMgdmVyc2lvbnMgdGhpcyB1c2VkIHRvIGJlIGB0YXNrOgogICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yCiAgICogICAgICAgIGZ1bmN0aW9ucyB0aGVyZWZvcmUgcmFuIGltbWVkaWF0ZWx5LiBUaHVzLCBldmVuIGlmIHRoZSBidWZmZXIgd2FzIGZ1bGwsIHRoZSBhY3Rpb24gc3RpbGwgaGFwcGVuZWQuIEJ5CiAgICogICAgICAgIHJlcXVpcmluZyB0aGUgcHJvbWlzZSB0byBiZSB3cmFwcGVkIGluIGEgZnVuY3Rpb24sIHdlIGNhbiBkZWZlciBwcm9taXNlIGNyZWF0aW9uIHVudGlsIGFmdGVyIHRoZSBidWZmZXIKICAgKiAgICAgICAgbGltaXQgY2hlY2suCiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikgewogICAgaWYgKCFpc1JlYWR5KCkpIHsKICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UobmV3IFNlbnRyeUVycm9yKCdOb3QgYWRkaW5nIFByb21pc2UgYmVjYXVzZSBidWZmZXIgbGltaXQgd2FzIHJlYWNoZWQuJykpOwogICAgfQoKICAgIC8vIHN0YXJ0IHRoZSB0YXNrIGFuZCBhZGQgaXRzIHByb21pc2UgdG8gdGhlIHF1ZXVlCiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7CiAgICBpZiAoYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7CiAgICAgIGJ1ZmZlci5wdXNoKHRhc2spOwogICAgfQogICAgdm9pZCB0YXNrCiAgICAgIC50aGVuKCgpID0+IHJlbW92ZSh0YXNrKSkKICAgICAgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgCiAgICAgIC8vIHJhdGhlciB0aGFuIGBQcm9taXNlYC4gYFByb21pc2VMaWtlYCBkb2Vzbid0IGhhdmUgYSBgLmNhdGNoYCBtZXRob2QsIG1ha2luZyBpdHMgcG9seWZpbGwgc21hbGxlci4gKEVTNSBkaWRuJ3QKICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKQogICAgICAudGhlbihudWxsLCAoKSA9PgogICAgICAgIHJlbW92ZSh0YXNrKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGByZW1vdmUoKWAgc3RhcnRzIGEgbmV3IHByb21pc2UgY2hhaW4uCiAgICAgICAgfSksCiAgICAgICk7CiAgICByZXR1cm4gdGFzazsKICB9CgogIC8qKgogICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KICAgKgogICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvcgogICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0bwogICAqIGB0cnVlYC4KICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmQKICAgKiBgZmFsc2VgIG90aGVyd2lzZQogICAqLwogIGZ1bmN0aW9uIGRyYWluKHRpbWVvdXQpIHsKICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgY291bnRlciA9IGJ1ZmZlci5sZW5ndGg7CgogICAgICBpZiAoIWNvdW50ZXIpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTsKICAgICAgfQoKICAgICAgLy8gd2FpdCBmb3IgYHRpbWVvdXRgIG1zIGFuZCB0aGVuIHJlc29sdmUgdG8gYGZhbHNlYCAoaWYgbm90IGNhbmNlbGxlZCBmaXJzdCkKICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHsKICAgICAgICAgIHJlc29sdmUoZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwgdGltZW91dCk7CgogICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYAogICAgICBidWZmZXIuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICB2b2lkIHJlc29sdmVkU3luY1Byb21pc2UoaXRlbSkudGhlbigoKSA9PiB7CiAgICAgICAgICBpZiAoIS0tY291bnRlcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTsKICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LCByZWplY3QpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgcmV0dXJuIHsKICAgICQ6IGJ1ZmZlciwKICAgIGFkZCwKICAgIGRyYWluLAogIH07Cn0KCmNvbnN0IE9ORV9TRUNPTkRfSU5fTVMgPSAxMDAwOwoKLyoqCiAqIEEgcGFydGlhbCBkZWZpbml0aW9uIG9mIHRoZSBbUGVyZm9ybWFuY2UgV2ViIEFQSV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlfQogKiBmb3IgYWNjZXNzaW5nIGEgaGlnaC1yZXNvbHV0aW9uIG1vbm90b25pYyBjbG9jay4KICovCgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS4KICoKICogVE9ETyh2OCk6IFJldHVybiB0eXBlIHNob3VsZCBiZSByb3VuZGVkLgogKi8KZnVuY3Rpb24gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpIHsKICByZXR1cm4gRGF0ZS5ub3coKSAvIE9ORV9TRUNPTkRfSU5fTVM7Cn0KCi8qKgogKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdAogKiBzdXBwb3J0IHRoZSBBUEkuCiAqCiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy4KICovCmZ1bmN0aW9uIGNyZWF0ZVVuaXhUaW1lc3RhbXBJblNlY29uZHNGdW5jKCkgewogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIGRhdGVUaW1lc3RhbXBJblNlY29uZHM7CiAgfQoKICAvLyBTb21lIGJyb3dzZXIgYW5kIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGEgdGltZU9yaWdpbiwgc28gd2UgZmFsbGJhY2sgdG8KICAvLyB1c2luZyBEYXRlLm5vdygpIHRvIGNvbXB1dGUgdGhlIHN0YXJ0aW5nIHRpbWUuCiAgY29uc3QgYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luID0gRGF0ZS5ub3coKSAtIHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IHRpbWVPcmlnaW4gPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09IHVuZGVmaW5lZCA/IGFwcHJveFN0YXJ0aW5nVGltZU9yaWdpbiA6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CgogIC8vIHBlcmZvcm1hbmNlLm5vdygpIGlzIGEgbW9ub3RvbmljIGNsb2NrLCB3aGljaCBtZWFucyBpdCBzdGFydHMgYXQgMCB3aGVuIHRoZSBwcm9jZXNzIGJlZ2lucy4gVG8gZ2V0IHRoZSBjdXJyZW50CiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC4KICAvLwogIC8vIFRPRE86IFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1vbm90b25pYyBjbG9jayB0aGF0IHBvd2VycyBwZXJmb3JtYW5jZS5ub3coKSBkcmlmdHMgZnJvbSB0aGUKICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZAogIC8vIGNvcnJlY3QgZm9yIHRoaXMuCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTMKICAvLyBTZWU6IGh0dHBzOi8vZGV2LnRvL25vYW1yL3doZW4tYS1taWxsaXNlY29uZC1pcy1ub3QtYS1taWxsaXNlY29uZC0zaDYKICByZXR1cm4gKCkgPT4gewogICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUzsKICB9Owp9CgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIGVpdGhlciB0aGUgUGVyZm9ybWFuY2Ugb3IgRGF0ZSBBUElzLCBkZXBlbmRpbmcgb24gdGhlCiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLgogKgogKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMKICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlCiAqIHNrZXcgY2FuIGdyb3cgdG8gYXJiaXRyYXJ5IGFtb3VudHMgbGlrZSBkYXlzLCB3ZWVrcyBvciBtb250aHMuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLgogKi8KY29uc3QgdGltZXN0YW1wSW5TZWNvbmRzID0gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKTsKCi8qKgogKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlCiAqIHBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUuCiAqLwooKCkgPT4gewogIC8vIFVuZm9ydHVuYXRlbHkgYnJvd3NlcnMgbWF5IHJlcG9ydCBhbiBpbmFjY3VyYXRlIHRpbWUgb3JpZ2luIGRhdGEsIHRocm91Z2ggZWl0aGVyIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gb3IKICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luCiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLgoKICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBHTE9CQUxfT0JKIDsKICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQoKICBjb25zdCB0aHJlc2hvbGQgPSAzNjAwICogMTAwMDsKICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpOwoKICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWQKICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luCiAgICA/IE1hdGguYWJzKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpCiAgICA6IHRocmVzaG9sZDsKICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDsKCiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy4KICAvLyBBbHNvIGFzIG9mIHdyaXRpbmcsIHBlcmZvcm1hbmNlLnRpbWluZyBpcyBub3QgYXZhaWxhYmxlIGluIFdlYiBXb3JrZXJzIGluIG1haW5zdHJlYW0gYnJvd3NlcnMsIHNvIGl0IGlzIG5vdCBhbHdheXMKICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUKICAvLyBEYXRlIEFQSS4KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDsKICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJzsKICAvLyBpZiBuYXZpZ2F0aW9uU3RhcnQgaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDsKICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7CgogIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7CiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW4KICAgIGlmICh0aW1lT3JpZ2luRGVsdGEgPD0gbmF2aWdhdGlvblN0YXJ0RGVsdGEpIHsKICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0OwogICAgfQogIH0KICByZXR1cm4gZGF0ZU5vdzsKfSkoKTsKCi8qKgogKiBDcmVhdGVzIGFuIGVudmVsb3BlLgogKiBNYWtlIHN1cmUgdG8gYWx3YXlzIGV4cGxpY2l0bHkgcHJvdmlkZSB0aGUgZ2VuZXJpYyB0byB0aGlzIGZ1bmN0aW9uCiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LgogKi8KZnVuY3Rpb24gY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgaXRlbXMgPSBbXSkgewogIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDsKfQoKLyoqCiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuCiAqIChUaGlzIGZ1bmN0aW9uIHdhcyBtb3N0bHkgY3JlYXRlZCBiZWNhdXNlIHdvcmtpbmcgd2l0aCBlbnZlbG9wZSB0eXBlcyBpcyBwYWluZnVsIGF0IHRoZSBtb21lbnQpCiAqCiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuCiAqLwpmdW5jdGlvbiBmb3JFYWNoRW52ZWxvcGVJdGVtKAogIGVudmVsb3BlLAogIGNhbGxiYWNrLAopIHsKICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07CgogIGZvciAoY29uc3QgZW52ZWxvcGVJdGVtIG9mIGVudmVsb3BlSXRlbXMpIHsKICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTsKICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVudmVsb3BlSXRlbSwgZW52ZWxvcGVJdGVtVHlwZSk7CgogICAgaWYgKHJlc3VsdCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEVuY29kZSBhIHN0cmluZyB0byBVVEY4LgogKi8KZnVuY3Rpb24gZW5jb2RlVVRGOChpbnB1dCwgdGV4dEVuY29kZXIpIHsKICBjb25zdCB1dGY4ID0gdGV4dEVuY29kZXIgfHwgbmV3IFRleHRFbmNvZGVyKCk7CiAgcmV0dXJuIHV0ZjguZW5jb2RlKGlucHV0KTsKfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYW4gZW52ZWxvcGUuCiAqLwpmdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSwgdGV4dEVuY29kZXIpIHsKICBjb25zdCBbZW52SGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7CgogIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGEKICBsZXQgcGFydHMgPSBKU09OLnN0cmluZ2lmeShlbnZIZWFkZXJzKTsKCiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHsKICAgIGlmICh0eXBlb2YgcGFydHMgPT09ICdzdHJpbmcnKSB7CiAgICAgIHBhcnRzID0gdHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gcGFydHMgKyBuZXh0IDogW2VuY29kZVVURjgocGFydHMsIHRleHRFbmNvZGVyKSwgbmV4dF07CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5wdXNoKHR5cGVvZiBuZXh0ID09PSAnc3RyaW5nJyA/IGVuY29kZVVURjgobmV4dCwgdGV4dEVuY29kZXIpIDogbmV4dCk7CiAgICB9CiAgfQoKICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgIGNvbnN0IFtpdGVtSGVhZGVycywgcGF5bG9hZF0gPSBpdGVtOwoKICAgIGFwcGVuZChgXG4ke0pTT04uc3RyaW5naWZ5KGl0ZW1IZWFkZXJzKX1cbmApOwoKICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgfHwgcGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgYXBwZW5kKHBheWxvYWQpOwogICAgfSBlbHNlIHsKICAgICAgbGV0IHN0cmluZ2lmaWVkUGF5bG9hZDsKICAgICAgdHJ5IHsKICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIEluIGNhc2UsIGRlc3BpdGUgYWxsIG91ciBlZmZvcnRzIHRvIGtlZXAgYHBheWxvYWRgIGNpcmN1bGFyLWRlcGVuZGVuY3ktZnJlZSwgYEpTT04uc3RyaW5pZnkoKWAgc3RpbGwKICAgICAgICAvLyBmYWlscywgd2UgdHJ5IGFnYWluIGFmdGVyIG5vcm1hbGl6aW5nIGl0IGFnYWluIHdpdGggaW5maW5pdGUgbm9ybWFsaXphdGlvbiBkZXB0aC4gVGhpcyBvZiBjb3Vyc2UgaGFzIGEKICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3QgYnV0IGluIHRoaXMgY2FzZSBhIHBlcmZvcm1hbmNlIGhpdCBpcyBiZXR0ZXIgdGhhbiB0aHJvd2luZy4KICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemUocGF5bG9hZCkpOwogICAgICB9CiAgICAgIGFwcGVuZChzdHJpbmdpZmllZFBheWxvYWQpOwogICAgfQogIH0KCiAgcmV0dXJuIHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycgPyBwYXJ0cyA6IGNvbmNhdEJ1ZmZlcnMocGFydHMpOwp9CgpmdW5jdGlvbiBjb25jYXRCdWZmZXJzKGJ1ZmZlcnMpIHsKICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7CgogIGNvbnN0IG1lcmdlZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICBtZXJnZWQuc2V0KGJ1ZmZlciwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoOwogIH0KCiAgcmV0dXJuIG1lcmdlZDsKfQoKY29uc3QgSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQID0gewogIHNlc3Npb246ICdzZXNzaW9uJywKICBzZXNzaW9uczogJ3Nlc3Npb24nLAogIGF0dGFjaG1lbnQ6ICdhdHRhY2htZW50JywKICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJywKICBldmVudDogJ2Vycm9yJywKICBjbGllbnRfcmVwb3J0OiAnaW50ZXJuYWwnLAogIHVzZXJfcmVwb3J0OiAnZGVmYXVsdCcsCiAgcHJvZmlsZTogJ3Byb2ZpbGUnLAogIHJlcGxheV9ldmVudDogJ3JlcGxheScsCiAgcmVwbGF5X3JlY29yZGluZzogJ3JlcGxheScsCiAgY2hlY2tfaW46ICdtb25pdG9yJywKICBmZWVkYmFjazogJ2ZlZWRiYWNrJywKICBzcGFuOiAnc3BhbicsCiAgc3RhdHNkOiAnbWV0cmljX2J1Y2tldCcsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gdGhlIG1ldGFkYXRhIG9yIGFuIGV2ZW50cyAqLwpmdW5jdGlvbiBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhT3JFdmVudCkgewogIGlmICghbWV0YWRhdGFPckV2ZW50IHx8ICFtZXRhZGF0YU9yRXZlbnQuc2RrKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkazsKICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07Cn0KCi8qKgogKiBDcmVhdGVzIGV2ZW50IGVudmVsb3BlIGhlYWRlcnMsIGJhc2VkIG9uIGV2ZW50LCBzZGsgaW5mbyBhbmQgdHVubmVsCiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5CiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycygKICBldmVudCwKICBzZGtJbmZvLAogIHR1bm5lbCwKICBkc24sCikgewogIGNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgJiYgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7CiAgcmV0dXJuIHsKICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCAsCiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgICAuLi4oZHluYW1pY1NhbXBsaW5nQ29udGV4dCAmJiB7CiAgICAgIHRyYWNlOiBkcm9wVW5kZWZpbmVkS2V5cyh7IC4uLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQgfSksCiAgICB9KSwKICB9Owp9CgovLyBJbnRlbnRpb25hbGx5IGtlZXBpbmcgdGhlIGtleSBicm9hZCwgYXMgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB3aGF0IHJhdGUgbGltaXQgaGVhZGVycyBnZXQgcmV0dXJuZWQgZnJvbSBiYWNrZW5kCgpjb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzCgovKioKICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlCiAqIEBwYXJhbSBoZWFkZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mICdSZXRyeS1BZnRlcicgaGVhZGVyCiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcAogKgogKi8KZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVySGVhZGVyKGhlYWRlciwgbm93ID0gRGF0ZS5ub3coKSkgewogIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTsKICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkgewogICAgcmV0dXJuIGhlYWRlckRlbGF5ICogMTAwMDsKICB9CgogIGNvbnN0IGhlYWRlckRhdGUgPSBEYXRlLnBhcnNlKGAke2hlYWRlcn1gKTsKICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7CiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdzsKICB9CgogIHJldHVybiBERUZBVUxUX1JFVFJZX0FGVEVSOwp9CgovKioKICogR2V0cyB0aGUgdGltZSB0aGF0IHRoZSBnaXZlbiBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBmb3IgcmF0ZSBsaW1pdGluZy4KICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsCiAqIHRoYXQgdGltZSBpcyByZXR1cm5lZC4KICoKICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuCiAqLwpmdW5jdGlvbiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSB7CiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkgewogIHJldHVybiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSA+IG5vdzsKfQoKLyoqCiAqIFVwZGF0ZSByYXRlbGltaXRzIGZyb20gaW5jb21pbmcgaGVhZGVycy4KICoKICogQHJldHVybiB0aGUgdXBkYXRlZCBSYXRlTGltaXRzIG9iamVjdC4KICovCmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoCiAgbGltaXRzLAogIHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9LAogIG5vdyA9IERhdGUubm93KCksCikgewogIGNvbnN0IHVwZGF0ZWRSYXRlTGltaXRzID0gewogICAgLi4ubGltaXRzLAogIH07CgogIC8vICJUaGUgbmFtZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIKICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXQKICBjb25zdCByYXRlTGltaXRIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ107CiAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXTsKCiAgaWYgKHJhdGVMaW1pdEhlYWRlcikgewogICAgLyoqCiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPGhlYWRlcj4sPGhlYWRlcj4sLi4KICAgICAqIHdoZXJlIGVhY2ggPGhlYWRlcj4gaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPgogICAgICogd2hlcmUKICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+IGlzIGEgZGVsYXkgaW4gc2Vjb25kcwogICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICAgICAgPGNhdGVnb3J5Pjs8Y2F0ZWdvcnk+Oy4uLgogICAgICogICAgIDxzY29wZT4gaXMgd2hhdCdzIGJlaW5nIGxpbWl0ZWQgKG9yZywgcHJvamVjdCwgb3Iga2V5KSAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgIm9yZ19xdW90YSIgLSBpZ25vcmVkIGJ5IFNESwogICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC4KICAgICAqICAgICAgICAgT25seSBwcmVzZW50IGlmIHJhdGUgbGltaXQgYXBwbGllcyB0byB0aGUgbWV0cmljX2J1Y2tldCBkYXRhIGNhdGVnb3J5LgogICAgICovCiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkgewogICAgICBjb25zdCBbcmV0cnlBZnRlciwgY2F0ZWdvcmllcywgLCAsIG5hbWVzcGFjZXNdID0gbGltaXQuc3BsaXQoJzonLCA1KTsKICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyLCAxMCk7CiAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHQKICAgICAgaWYgKCFjYXRlZ29yaWVzKSB7CiAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgZGVsYXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzLnNwbGl0KCc7JykpIHsKICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ21ldHJpY19idWNrZXQnKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50IHdoZW4gY2F0ZWdvcnkgPT09ICdtZXRyaWNfYnVja2V0JwogICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMgfHwgbmFtZXNwYWNlcy5zcGxpdCgnOycpLmluY2x1ZGVzKCdjdXN0b20nKSkgewogICAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSAncHJvZHVjdGlvbic7CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuCiAqIEBkZXByZWNhdGVkIEdsb2JhbCBldmVudCBwcm9jZXNzb3JzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICovCmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpIHsKICByZXR1cm4gZ2V0R2xvYmFsU2luZ2xldG9uKCdnbG9iYWxFdmVudFByb2Nlc3NvcnMnLCAoKSA9PiBbXSk7Cn0KCi8qKgogKiBQcm9jZXNzIGFuIGFycmF5IG9mIGV2ZW50IHByb2Nlc3NvcnMsIHJldHVybmluZyB0aGUgcHJvY2Vzc2VkIGV2ZW50IChvciBgbnVsbGAgaWYgdGhlIGV2ZW50IHdhcyBkcm9wcGVkKS4KICovCmZ1bmN0aW9uIG5vdGlmeUV2ZW50UHJvY2Vzc29ycygKICBwcm9jZXNzb3JzLAogIGV2ZW50LAogIGhpbnQsCiAgaW5kZXggPSAwLAopIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdOwogICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHsKICAgICAgcmVzb2x2ZShldmVudCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSA7CgogICAgICBERUJVR19CVUlMRCAmJiBwcm9jZXNzb3IuaWQgJiYgcmVzdWx0ID09PSBudWxsICYmIGxvZ2dlci5sb2coYEV2ZW50IHByb2Nlc3NvciAiJHtwcm9jZXNzb3IuaWR9IiBkcm9wcGVkIGV2ZW50YCk7CgogICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7CiAgICAgICAgdm9pZCByZXN1bHQKICAgICAgICAgIC50aGVuKGZpbmFsID0+IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpKQogICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2b2lkIG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSkKICAgICAgICAgIC50aGVuKHJlc29sdmUpCiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIENsb3NlcyBhIHNlc3Npb24gYnkgc2V0dGluZyBpdHMgc3RhdHVzIGFuZCB1cGRhdGluZyB0aGUgc2Vzc2lvbiBvYmplY3Qgd2l0aCBpdC4KICogSW50ZXJuYWxseSBjYWxscyBgdXBkYXRlU2Vzc2lvbmAgdG8gdXBkYXRlIHRoZSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIHBhc3NlZCBzZXNzaW9uIChAc2VlIHVwZGF0ZVNlc3Npb24gZm9yIGV4cGxhbmF0aW9uKS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCBvYmplY3QgdG8gYmUgY2xvc2VkCiAqIEBwYXJhbSBzdGF0dXMgdGhlIGBTZXNzaW9uU3RhdHVzYCB3aXRoIHdoaWNoIHRoZSBzZXNzaW9uIHdhcyBjbG9zZWQuIElmIHlvdSBkb24ndCBwYXNzIGEgc3RhdHVzLAogKiAgICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBwcmV2aW91c2x5IHNldCBzdGF0dXMsIHVubGVzcyBpdCB3YXMgYCdvaydgIGluIHdoaWNoIGNhc2UKICogICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIGAnZXhpdGVkJ2AuCiAqLwpmdW5jdGlvbiBjbG9zZVNlc3Npb24oc2Vzc2lvbiwgc3RhdHVzKSB7CiAgbGV0IGNvbnRleHQgPSB7fTsKICBpZiAoc3RhdHVzKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXMgfTsKICB9IGVsc2UgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXM6ICdleGl0ZWQnIH07CiAgfQoKICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIGNvbnRleHQpOwp9CgovKioKICogU2VyaWFsaXplcyBhIHBhc3NlZCBzZXNzaW9uIG9iamVjdCB0byBhIEpTT04gb2JqZWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3RydWN0dXJlLgogKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTZW50cnkgYmFja2VuZCByZXF1aXJlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzY2hlbWEgb2YgYSBzZXNzaW9uCiAqIHRoYW4gdGhlIG9uZSB0aGUgSlMgU0RLcyB1c2UgaW50ZXJuYWxseS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIHNlc3Npb24gdG8gYmUgY29udmVydGVkCiAqCiAqIEByZXR1cm5zIGEgSlNPTiBvYmplY3Qgb2YgdGhlIHBhc3NlZCBzZXNzaW9uCiAqLwpmdW5jdGlvbiBzZXNzaW9uVG9KU09OKHNlc3Npb24pIHsKICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoewogICAgc2lkOiBgJHtzZXNzaW9uLnNpZH1gLAogICAgaW5pdDogc2Vzc2lvbi5pbml0LAogICAgLy8gTWFrZSBzdXJlIHRoYXQgc2VjIGlzIGNvbnZlcnRlZCB0byBtcyBmb3IgZGF0ZSBjb25zdHJ1Y3RvcgogICAgc3RhcnRlZDogbmV3IERhdGUoc2Vzc2lvbi5zdGFydGVkICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHRpbWVzdGFtcDogbmV3IERhdGUoc2Vzc2lvbi50aW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLAogICAgc3RhdHVzOiBzZXNzaW9uLnN0YXR1cywKICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMsCiAgICBkaWQ6IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlc3Npb24uZGlkID09PSAnc3RyaW5nJyA/IGAke3Nlc3Npb24uZGlkfWAgOiB1bmRlZmluZWQsCiAgICBkdXJhdGlvbjogc2Vzc2lvbi5kdXJhdGlvbiwKICAgIGFibm9ybWFsX21lY2hhbmlzbTogc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20sCiAgICBhdHRyczogewogICAgICByZWxlYXNlOiBzZXNzaW9uLnJlbGVhc2UsCiAgICAgIGVudmlyb25tZW50OiBzZXNzaW9uLmVudmlyb25tZW50LAogICAgICBpcF9hZGRyZXNzOiBzZXNzaW9uLmlwQWRkcmVzcywKICAgICAgdXNlcl9hZ2VudDogc2Vzc2lvbi51c2VyQWdlbnQsCiAgICB9LAogIH0pOwp9Cgpjb25zdCBUUkFDRV9GTEFHX1NBTVBMRUQgPSAweDE7CgovKioKICogQ29udmVydCBhIHNwYW4gdG8gYSB0cmFjZSBjb250ZXh0LCB3aGljaCBjYW4gYmUgc2VudCBhcyB0aGUgYHRyYWNlYCBjb250ZXh0IGluIGFuIGV2ZW50LgogKi8KZnVuY3Rpb24gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIHsKICBjb25zdCB7IHNwYW5JZDogc3Bhbl9pZCwgdHJhY2VJZDogdHJhY2VfaWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICBjb25zdCB7IGRhdGEsIG9wLCBwYXJlbnRfc3Bhbl9pZCwgc3RhdHVzLCB0YWdzLCBvcmlnaW4gfSA9IHNwYW5Ub0pTT04oc3Bhbik7CgogIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBkYXRhLAogICAgb3AsCiAgICBwYXJlbnRfc3Bhbl9pZCwKICAgIHNwYW5faWQsCiAgICBzdGF0dXMsCiAgICB0YWdzLAogICAgdHJhY2VfaWQsCiAgICBvcmlnaW4sCiAgfSk7Cn0KCi8qKgogKiBDb252ZXJ0IGEgc3BhbiB0byBhIEpTT04gcmVwcmVzZW50YXRpb24uCiAqIE5vdGUgdGhhdCBhbGwgZmllbGRzIHJldHVybmVkIGhlcmUgYXJlIG9wdGlvbmFsIGFuZCBuZWVkIHRvIGJlIGd1YXJkZWQgYWdhaW5zdC4KICoKICogTm90ZTogQmVjYXVzZSBvZiB0aGlzLCB3ZSBjdXJyZW50bHkgaGF2ZSBhIGNpcmN1bGFyIHR5cGUgZGVwZW5kZW5jeSAod2hpY2ggd2Ugb3B0ZWQgb3V0IG9mIGluIHBhY2thZ2UuanNvbikuCiAqIFRoaXMgaXMgbm90IGF2b2lkYWJsZSBhcyB3ZSBuZWVkIGBzcGFuVG9KU09OYCBpbiBgc3BhblV0aWxzLnRzYCwgd2hpY2ggaW4gdHVybiBpcyBuZWVkZWQgYnkgYHNwYW4udHNgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICogQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLgogKiBUT0RPIHY4OiBXaGVuIHdlIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBzdHVmZiBmcm9tIGBzcGFuLnRzYCwgd2UgY2FuIHJlbW92ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBhZ2Fpbi4KICovCmZ1bmN0aW9uIHNwYW5Ub0pTT04oc3BhbikgewogIGlmIChzcGFuSXNTcGFuQ2xhc3Moc3BhbikpIHsKICAgIHJldHVybiBzcGFuLmdldFNwYW5KU09OKCk7CiAgfQoKICAvLyBGYWxsYmFjazogV2UgYWxzbyBjaGVjayBmb3IgYC50b0pTT04oKWAgaGVyZS4uLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGlmICh0eXBlb2Ygc3Bhbi50b0pTT04gPT09ICdmdW5jdGlvbicpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgcmV0dXJuIHNwYW4udG9KU09OKCk7CiAgfQoKICByZXR1cm4ge307Cn0KCi8qKgogKiBTYWRseSwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hlY2tzIHdlIGNhbm5vdCBhY3R1YWxseSBpbXBvcnQgdGhlIFNwYW4gY2xhc3MgaGVyZSBhbmQgY2hlY2sgZm9yIGluc3RhbmNlb2YuCiAqIDooIFNvIGluc3RlYWQgd2UgYXBwcm94aW1hdGUgdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgdGhlIGBnZXRTcGFuSlNPTmAgbWV0aG9kLgogKi8KZnVuY3Rpb24gc3BhbklzU3BhbkNsYXNzKHNwYW4pIHsKICByZXR1cm4gdHlwZW9mIChzcGFuICkuZ2V0U3BhbkpTT04gPT09ICdmdW5jdGlvbic7Cn0KCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgYSBzcGFuIGlzIHNhbXBsZWQuCiAqIEluIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQganVzdCB1c2UgYHNwYW4uaXNSZWNvcmRpbmcoKWAgaW5zdGVhZC4KICogSG93ZXZlciwgdGhpcyBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWMsIGFzIGl0IGFsc28gcmV0dXJucyBmYWxzZSBpZiB0aGUgc3BhbiBpcyBmaW5pc2hlZC4KICogU28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIHVzZSB0aGlzIG1ldGhvZC4KICovCmZ1bmN0aW9uIHNwYW5Jc1NhbXBsZWQoc3BhbikgewogIC8vIFdlIGFsaWduIG91ciB0cmFjZSBmbGFncyB3aXRoIHRoZSBvbmVzIE9wZW5UZWxlbWV0cnkgdXNlCiAgLy8gU28gd2UgYWxzbyBjaGVjayBmb3Igc2FtcGxlZCB0aGUgc2FtZSB3YXkgdGhleSBkby4KICBjb25zdCB7IHRyYWNlRmxhZ3MgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZQogIHJldHVybiBCb29sZWFuKHRyYWNlRmxhZ3MgJiBUUkFDRV9GTEFHX1NBTVBMRUQpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNsaWVudC4KICovCmZ1bmN0aW9uIGdldENsaWVudCgpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjb3BlLgogKi8KZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkgewogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIHJvb3Qgc3BhbiBvZiBhIGdpdmVuIHNwYW4uCiAqCiAqIEFzIGxvbmcgYXMgd2UgdXNlIGBUcmFuc2FjdGlvbmBzIGludGVybmFsbHksIHRoZSByZXR1cm5lZCByb290IHNwYW4KICogd2lsbCBiZSBhIGBUcmFuc2FjdGlvbmAgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICoKICogSWYgdGhlIGdpdmVuIHNwYW4gaGFzIG5vIHJvb3Qgc3BhbiBvciB0cmFuc2FjdGlvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBnZXRSb290U3BhbihzcGFuKSB7CiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdGhpcyBjaGVjayBhbmQganVzdCByZXR1cm4gc3BhbgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBzcGFuLnRyYW5zYWN0aW9uOwp9CgovKioKICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgY2xpZW50LgogKgogKiBEaXNwYXRjaGVzIHRoZSBgY3JlYXRlRHNjYCBsaWZlY3ljbGUgaG9vayBhcyBhIHNpZGUgZWZmZWN0LgogKi8KZnVuY3Rpb24gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoCiAgdHJhY2VfaWQsCiAgY2xpZW50LAogIHNjb3BlLAopIHsKICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTsKCiAgY29uc3QgeyBwdWJsaWNLZXk6IHB1YmxpY19rZXkgfSA9IGNsaWVudC5nZXREc24oKSB8fCB7fTsKICAvLyBUT0RPKHY4KTogUmVtb3ZlIHNlZ21lbnQgZnJvbSBVc2VyCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgY29uc3QgeyBzZWdtZW50OiB1c2VyX3NlZ21lbnQgfSA9IChzY29wZSAmJiBzY29wZS5nZXRVc2VyKCkpIHx8IHt9OwoKICBjb25zdCBkc2MgPSBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBERUZBVUxUX0VOVklST05NRU5ULAogICAgcmVsZWFzZTogb3B0aW9ucy5yZWxlYXNlLAogICAgdXNlcl9zZWdtZW50LAogICAgcHVibGljX2tleSwKICAgIHRyYWNlX2lkLAogIH0pIDsKCiAgY2xpZW50LmVtaXQgJiYgY2xpZW50LmVtaXQoJ2NyZWF0ZURzYycsIGRzYyk7CgogIHJldHVybiBkc2M7Cn0KCi8qKgogKiBBIFNwYW4gd2l0aCBhIGZyb3plbiBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQuCiAqLwoKLyoqCiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIHNwYW4gKGFuZCBjbGllbnQgYW5kIHNjb3BlKQogKgogKiBAcGFyYW0gc3BhbiB0aGUgc3BhbiBmcm9tIHdoaWNoIGEgZmV3IHZhbHVlcyBsaWtlIHRoZSByb290IHNwYW4gbmFtZSBhbmQgc2FtcGxlIHJhdGUgYXJlIGV4dHJhY3RlZC4KICoKICogQHJldHVybnMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQKICovCmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSB7CiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7CiAgaWYgKCFjbGllbnQpIHsKICAgIHJldHVybiB7fTsKICB9CgogIC8vIHBhc3NpbmcgZW1pdD1mYWxzZSBoZXJlIHRvIG9ubHkgZW1pdCBsYXRlciBvbmNlIHRoZSBEU0MgaXMgYWN0dWFsbHkgcG9wdWxhdGVkCiAgY29uc3QgZHNjID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoc3BhblRvSlNPTihzcGFuKS50cmFjZV9pZCB8fCAnJywgY2xpZW50LCBnZXRDdXJyZW50U2NvcGUoKSk7CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIGNvbnN0IHR4biA9IGdldFJvb3RTcGFuKHNwYW4pIDsKICBpZiAoIXR4bikgewogICAgcmV0dXJuIGRzYzsKICB9CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIC8vIEZvciBub3cgd2UgbmVlZCB0byBhdm9pZCBicmVha2luZyB1c2VycyB3aG8gZGlyZWN0bHkgY3JlYXRlZCBhIHR4biB3aXRoIGEgRFNDLCB3aGVyZSB0aGlzIGZpZWxkIGlzIHN0aWxsIHNldC4KICAvLyBAc2VlIFRyYW5zYWN0aW9uIGNsYXNzIGNvbnN0cnVjdG9yCiAgY29uc3QgdjdGcm96ZW5Ec2MgPSB0eG4gJiYgdHhuLl9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0OwogIGlmICh2N0Zyb3plbkRzYykgewogICAgcmV0dXJuIHY3RnJvemVuRHNjOwogIH0KCiAgLy8gVE9ETyAodjgpOiBSZXBsYWNlIHR4bi5tZXRhZGF0YSB3aXRoIHR4bi5hdHRyaWJ1dGVzW10KICAvLyBXZSBjYW4ndCBkbyB0aGlzIHlldCBiZWNhdXNlIGF0dHJpYnV0ZXMgYXJlbid0IGFsd2F5cyBzZXQgeWV0LgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IHsgc2FtcGxlUmF0ZTogbWF5YmVTYW1wbGVSYXRlLCBzb3VyY2UgfSA9IHR4bi5tZXRhZGF0YTsKICBpZiAobWF5YmVTYW1wbGVSYXRlICE9IG51bGwpIHsKICAgIGRzYy5zYW1wbGVfcmF0ZSA9IGAke21heWJlU2FtcGxlUmF0ZX1gOwogIH0KCiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgdHJhbnNhY3Rpb24gbmFtZSBpbiB0aGUgRFNDIGlmIHRoZSBzb3VyY2UgaXMgInVybCIgYmVjYXVzZSBVUkxzIG1pZ2h0IGNvbnRhaW4gUElJCiAgY29uc3QganNvblNwYW4gPSBzcGFuVG9KU09OKHR4bik7CgogIC8vIGFmdGVyIEpTT04gY29udmVyc2lvbiwgdHhuLm5hbWUgYmVjb21lcyBqc29uU3Bhbi5kZXNjcmlwdGlvbgogIGlmIChzb3VyY2UgJiYgc291cmNlICE9PSAndXJsJykgewogICAgZHNjLnRyYW5zYWN0aW9uID0ganNvblNwYW4uZGVzY3JpcHRpb247CiAgfQoKICBkc2Muc2FtcGxlZCA9IFN0cmluZyhzcGFuSXNTYW1wbGVkKHR4bikpOwoKICBjbGllbnQuZW1pdCAmJiBjbGllbnQuZW1pdCgnY3JlYXRlRHNjJywgZHNjKTsKCiAgcmV0dXJuIGRzYzsKfQoKLyoqCiAqIEFwcGxpZXMgZGF0YSBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgYW5kIHJ1bnMgYWxsIGV2ZW50IHByb2Nlc3NvcnMgb24gaXQuCiAqLwpmdW5jdGlvbiBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7IGZpbmdlcnByaW50LCBzcGFuLCBicmVhZGNydW1icywgc2RrUHJvY2Vzc2luZ01ldGFkYXRhIH0gPSBkYXRhOwoKICAvLyBBcHBseSBnZW5lcmFsIGRhdGEKICBhcHBseURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKTsKCiAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5CiAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGluawogIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC4KICBpZiAoc3BhbikgewogICAgYXBwbHlTcGFuVG9FdmVudChldmVudCwgc3Bhbik7CiAgfQoKICBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpOwogIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7CiAgYXBwbHlTZGtNZXRhZGF0YVRvRXZlbnQoZXZlbnQsIHNka1Byb2Nlc3NpbmdNZXRhZGF0YSk7Cn0KCmZ1bmN0aW9uIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7CiAgICBleHRyYSwKICAgIHRhZ3MsCiAgICB1c2VyLAogICAgY29udGV4dHMsCiAgICBsZXZlbCwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdHJhbnNhY3Rpb25OYW1lLAogIH0gPSBkYXRhOwoKICBjb25zdCBjbGVhbmVkRXh0cmEgPSBkcm9wVW5kZWZpbmVkS2V5cyhleHRyYSk7CiAgaWYgKGNsZWFuZWRFeHRyYSAmJiBPYmplY3Qua2V5cyhjbGVhbmVkRXh0cmEpLmxlbmd0aCkgewogICAgZXZlbnQuZXh0cmEgPSB7IC4uLmNsZWFuZWRFeHRyYSwgLi4uZXZlbnQuZXh0cmEgfTsKICB9CgogIGNvbnN0IGNsZWFuZWRUYWdzID0gZHJvcFVuZGVmaW5lZEtleXModGFncyk7CiAgaWYgKGNsZWFuZWRUYWdzICYmIE9iamVjdC5rZXlzKGNsZWFuZWRUYWdzKS5sZW5ndGgpIHsKICAgIGV2ZW50LnRhZ3MgPSB7IC4uLmNsZWFuZWRUYWdzLCAuLi5ldmVudC50YWdzIH07CiAgfQoKICBjb25zdCBjbGVhbmVkVXNlciA9IGRyb3BVbmRlZmluZWRLZXlzKHVzZXIpOwogIGlmIChjbGVhbmVkVXNlciAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVXNlcikubGVuZ3RoKSB7CiAgICBldmVudC51c2VyID0geyAuLi5jbGVhbmVkVXNlciwgLi4uZXZlbnQudXNlciB9OwogIH0KCiAgY29uc3QgY2xlYW5lZENvbnRleHRzID0gZHJvcFVuZGVmaW5lZEtleXMoY29udGV4dHMpOwogIGlmIChjbGVhbmVkQ29udGV4dHMgJiYgT2JqZWN0LmtleXMoY2xlYW5lZENvbnRleHRzKS5sZW5ndGgpIHsKICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi5jbGVhbmVkQ29udGV4dHMsIC4uLmV2ZW50LmNvbnRleHRzIH07CiAgfQoKICBpZiAobGV2ZWwpIHsKICAgIGV2ZW50LmxldmVsID0gbGV2ZWw7CiAgfQoKICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7CiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTsKICB9Cn0KCmZ1bmN0aW9uIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icykgewogIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWJzID0gWy4uLihldmVudC5icmVhZGNydW1icyB8fCBbXSksIC4uLmJyZWFkY3J1bWJzXTsKICBldmVudC5icmVhZGNydW1icyA9IG1lcmdlZEJyZWFkY3J1bWJzLmxlbmd0aCA/IG1lcmdlZEJyZWFkY3J1bWJzIDogdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBhcHBseVNka01ldGFkYXRhVG9FdmVudChldmVudCwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhKSB7CiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgLi4uZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogICAgLi4uc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogIH07Cn0KCmZ1bmN0aW9uIGFwcGx5U3BhblRvRXZlbnQoZXZlbnQsIHNwYW4pIHsKICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHNwYW5Ub1RyYWNlQ29udGV4dChzcGFuKSwgLi4uZXZlbnQuY29udGV4dHMgfTsKICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKHNwYW4pOwogIGlmIChyb290U3BhbikgewogICAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksCiAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgIH07CiAgICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSBzcGFuVG9KU09OKHJvb3RTcGFuKS5kZXNjcmlwdGlvbjsKICAgIGlmICh0cmFuc2FjdGlvbk5hbWUpIHsKICAgICAgZXZlbnQudGFncyA9IHsgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZSwgLi4uZXZlbnQudGFncyB9OwogICAgfQogIH0KfQoKLyoqCiAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLAogKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50CiAqLwpmdW5jdGlvbiBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpIHsKICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2UKICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50ID8gYXJyYXlpZnkoZXZlbnQuZmluZ2VycHJpbnQpIDogW107CgogIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50CiAgaWYgKGZpbmdlcnByaW50KSB7CiAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50LmNvbmNhdChmaW5nZXJwcmludCk7CiAgfQoKICAvLyBJZiB3ZSBoYXZlIG5vIGRhdGEgYXQgYWxsLCByZW1vdmUgZW1wdHkgYXJyYXkgZGVmYXVsdAogIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7CiAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7CiAgfQp9CgovKioKICogRGVmYXVsdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuCiAqLwpjb25zdCBERUZBVUxUX01BWF9CUkVBRENSVU1CUyA9IDEwMDsKCi8qKgogKiBIb2xkcyBhZGRpdGlvbmFsIGV2ZW50IGluZm9ybWF0aW9uLiB7QGxpbmsgU2NvcGUuYXBwbHlUb0V2ZW50fSB3aWxsIGJlCiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuCiAqLwpjbGFzcyBTY29wZSAgewogIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovCgogIC8qKiBDYWxsYmFjayBmb3IgY2xpZW50IHRvIHJlY2VpdmUgc2NvcGUgY2hhbmdlcy4gKi8KCiAgLyoqIENhbGxiYWNrIGxpc3QgdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB7QGxpbmsgYXBwbHlUb0V2ZW50fS4gKi8KCiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqLwoKICAvKiogVXNlciAqLwoKICAvKiogVGFncyAqLwoKICAvKiogRXh0cmEgKi8KCiAgLyoqIENvbnRleHRzICovCgogIC8qKiBBdHRhY2htZW50cyAqLwoKICAvKiogUHJvcGFnYXRpb24gQ29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAqLwoKICAvKioKICAgKiBBIHBsYWNlIHRvIHN0YXNoIGRhdGEgd2hpY2ggaXMgbmVlZGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIFNESydzIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgYnV0IHdoaWNoIHNob3VsZG4ndCBnZXQKICAgKiBzZW50IHRvIFNlbnRyeQogICAqLwoKICAvKiogRmluZ2VycHJpbnQgKi8KCiAgLyoqIFNldmVyaXR5ICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCgogIC8qKgogICAqIFRyYW5zYWN0aW9uIE5hbWUKICAgKi8KCiAgLyoqIFNwYW4gKi8KCiAgLyoqIFNlc3Npb24gKi8KCiAgLyoqIFJlcXVlc3QgTW9kZSBTZXNzaW9uIFN0YXR1cyAqLwoKICAvKiogVGhlIGNsaWVudCBvbiB0aGlzIHNjb3BlICovCgogIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLgoKICAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzID0gW107CiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMgPSBbXTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107CiAgICB0aGlzLl9hdHRhY2htZW50cyA9IFtdOwogICAgdGhpcy5fdXNlciA9IHt9OwogICAgdGhpcy5fdGFncyA9IHt9OwogICAgdGhpcy5fZXh0cmEgPSB7fTsKICAgIHRoaXMuX2NvbnRleHRzID0ge307CiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgfQoKICAvKioKICAgKiBJbmhlcml0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzY29wZS5jbG9uZSgpYCBhbmQgYG5ldyBTY29wZSgpYCBpbnN0ZWFkLgogICAqLwogICBzdGF0aWMgY2xvbmUoc2NvcGUpIHsKICAgIHJldHVybiBzY29wZSA/IHNjb3BlLmNsb25lKCkgOiBuZXcgU2NvcGUoKTsKICB9CgogIC8qKgogICAqIENsb25lIHRoaXMgc2NvcGUgaW5zdGFuY2UuCiAgICovCiAgIGNsb25lKCkgewogICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi50aGlzLl9icmVhZGNydW1ic107CiAgICBuZXdTY29wZS5fdGFncyA9IHsgLi4udGhpcy5fdGFncyB9OwogICAgbmV3U2NvcGUuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSB9OwogICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cyB9OwogICAgbmV3U2NvcGUuX3VzZXIgPSB0aGlzLl91c2VyOwogICAgbmV3U2NvcGUuX2xldmVsID0gdGhpcy5fbGV2ZWw7CiAgICBuZXdTY29wZS5fc3BhbiA9IHRoaXMuX3NwYW47CiAgICBuZXdTY29wZS5fc2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb247CiAgICBuZXdTY29wZS5fdHJhbnNhY3Rpb25OYW1lID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lOwogICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQ7CiAgICBuZXdTY29wZS5fZXZlbnRQcm9jZXNzb3JzID0gWy4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc107CiAgICBuZXdTY29wZS5fcmVxdWVzdFNlc3Npb24gPSB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjsKICAgIG5ld1Njb3BlLl9hdHRhY2htZW50cyA9IFsuLi50aGlzLl9hdHRhY2htZW50c107CiAgICBuZXdTY29wZS5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0geyAuLi50aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfTsKICAgIG5ld1Njb3BlLl9wcm9wYWdhdGlvbkNvbnRleHQgPSB7IC4uLnRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCB9OwogICAgbmV3U2NvcGUuX2NsaWVudCA9IHRoaXMuX2NsaWVudDsKCiAgICByZXR1cm4gbmV3U2NvcGU7CiAgfQoKICAvKiogVXBkYXRlIHRoZSBjbGllbnQgb24gdGhlIHNjb3BlLiAqLwogICBzZXRDbGllbnQoY2xpZW50KSB7CiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGNsaWVudCBhc3NpZ25lZCB0byB0aGlzIHNjb3BlLgogICAqCiAgICogSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICovCiAgIGdldENsaWVudCgpIHsKICAgIHJldHVybiB0aGlzLl9jbGllbnQ7CiAgfQoKICAvKioKICAgKiBBZGQgaW50ZXJuYWwgb24gY2hhbmdlIGxpc3RlbmVyLiBVc2VkIGZvciBzdWIgU0RLcyB0aGF0IG5lZWQgdG8gc3RvcmUgdGhlIHNjb3BlLgogICAqIEBoaWRkZW4KICAgKi8KICAgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjaykgewogICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykgewogICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRVc2VyKHVzZXIpIHsKICAgIC8vIElmIG51bGwgaXMgcGFzc2VkIHdlIHdhbnQgdG8gdW5zZXQgZXZlcnl0aGluZywgYnV0IHN0aWxsIGRlZmluZSBrZXlzLAogICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLgogICAgdGhpcy5fdXNlciA9IHVzZXIgfHwgewogICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICBpZDogdW5kZWZpbmVkLAogICAgICBpcF9hZGRyZXNzOiB1bmRlZmluZWQsCiAgICAgIHNlZ21lbnQ6IHVuZGVmaW5lZCwKICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCwKICAgIH07CgogICAgaWYgKHRoaXMuX3Nlc3Npb24pIHsKICAgICAgdXBkYXRlU2Vzc2lvbih0aGlzLl9zZXNzaW9uLCB7IHVzZXIgfSk7CiAgICB9CgogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0VXNlcigpIHsKICAgIHJldHVybiB0aGlzLl91c2VyOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UmVxdWVzdFNlc3Npb24oKSB7CiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRSZXF1ZXN0U2Vzc2lvbihyZXF1ZXN0U2Vzc2lvbikgewogICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSByZXF1ZXN0U2Vzc2lvbjsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgc2V0VGFncyh0YWdzKSB7CiAgICB0aGlzLl90YWdzID0gewogICAgICAuLi50aGlzLl90YWdzLAogICAgICAuLi50YWdzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldFRhZyhrZXksIHZhbHVlKSB7CiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIHRoaXMuX2V4dHJhID0gewogICAgICAuLi50aGlzLl9leHRyYSwKICAgICAgLi4uZXh0cmFzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludCkgewogICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldExldmVsKAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICApIHsKICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy4KICAgKi8KICAgc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUpIHsKICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRDb250ZXh0KGtleSwgY29udGV4dCkgewogICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZQogICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2NvbnRleHRzW2tleV0gPSBjb250ZXh0OwogICAgfQoKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFNldHMgdGhlIFNwYW4gb24gdGhlIHNjb3BlLgogICAqIEBwYXJhbSBzcGFuIFNwYW4KICAgKiBAZGVwcmVjYXRlZCBJbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGFuIG9uIGEgc2NvcGUsIHVzZSBgc3RhcnRTcGFuKClgL2BzdGFydFNwYW5NYW51YWwoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0U3BhbihzcGFuKSB7CiAgICB0aGlzLl9zcGFuID0gc3BhbjsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBTcGFuYCBpZiB0aGVyZSBpcyBvbmUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRBY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNwYW4oKSB7CiAgICByZXR1cm4gdGhpcy5fc3BhbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBUcmFuc2FjdGlvbmAgYXR0YWNoZWQgdG8gdGhlIHNjb3BlIChpZiB0aGVyZSBpcyBvbmUpLgogICAqIEBkZXByZWNhdGVkIFlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHRyYW5zYWN0aW9uLCBidXQganVzdCB1c2UgYHN0YXJ0U3BhbigpYCBBUElzIGluc3RlYWQuCiAgICovCiAgIGdldFRyYW5zYWN0aW9uKCkgewogICAgLy8gT2Z0ZW4sIHRoaXMgc3BhbiAoaWYgaXQgZXhpc3RzIGF0IGFsbCkgd2lsbCBiZSBhIHRyYW5zYWN0aW9uLCBidXQgaXQncyBub3QgZ3VhcmFudGVlZCB0byBiZS4gUmVnYXJkbGVzcywgaXQgd2lsbAogICAgLy8gaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnRseS1hY3RpdmUgdHJhbnNhY3Rpb24uCiAgICBjb25zdCBzcGFuID0gdGhpcy5fc3BhbjsKICAgIC8vIENhbm5vdCByZXBsYWNlIHdpdGggZ2V0Um9vdFNwYW4gYmVjYXVzZSBnZXRSb290U3BhbiByZXR1cm5zIGEgc3Bhbiwgbm90IGEgdHJhbnNhY3Rpb24KICAgIC8vIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBhbnl3YXkuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHJldHVybiBzcGFuICYmIHNwYW4udHJhbnNhY3Rpb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRTZXNzaW9uKHNlc3Npb24pIHsKICAgIGlmICghc2Vzc2lvbikgewogICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uOwogICAgfQogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0U2Vzc2lvbigpIHsKICAgIHJldHVybiB0aGlzLl9zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgdXBkYXRlKGNhcHR1cmVDb250ZXh0KSB7CiAgICBpZiAoIWNhcHR1cmVDb250ZXh0KSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IHNjb3BlVG9NZXJnZSA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGNhcHR1cmVDb250ZXh0KHRoaXMpIDogY2FwdHVyZUNvbnRleHQ7CgogICAgaWYgKHNjb3BlVG9NZXJnZSBpbnN0YW5jZW9mIFNjb3BlKSB7CiAgICAgIGNvbnN0IHNjb3BlRGF0YSA9IHNjb3BlVG9NZXJnZS5nZXRTY29wZURhdGEoKTsKCiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlRGF0YS50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVEYXRhLmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVEYXRhLmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZURhdGEudXNlciAmJiBPYmplY3Qua2V5cyhzY29wZURhdGEudXNlcikubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlRGF0YS51c2VyOwogICAgICB9CiAgICAgIGlmIChzY29wZURhdGEubGV2ZWwpIHsKICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlRGF0YS5sZXZlbDsKICAgICAgfQogICAgICBpZiAoc2NvcGVEYXRhLmZpbmdlcnByaW50Lmxlbmd0aCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVEYXRhLmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZVRvTWVyZ2UuZ2V0UmVxdWVzdFNlc3Npb24oKSkgewogICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVUb01lcmdlLmdldFJlcXVlc3RTZXNzaW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlRGF0YS5wcm9wYWdhdGlvbkNvbnRleHQpIHsKICAgICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZURhdGEucHJvcGFnYXRpb25Db250ZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc2NvcGVUb01lcmdlKSkgewogICAgICBjb25zdCBzY29wZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCA7CiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlQ29udGV4dC50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVDb250ZXh0LmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVDb250ZXh0LmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZUNvbnRleHQudXNlcikgewogICAgICAgIHRoaXMuX3VzZXIgPSBzY29wZUNvbnRleHQudXNlcjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LmxldmVsKSB7CiAgICAgICAgdGhpcy5fbGV2ZWwgPSBzY29wZUNvbnRleHQubGV2ZWw7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlQ29udGV4dC5maW5nZXJwcmludCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVDb250ZXh0LmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHsKICAgICAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LnByb3BhZ2F0aW9uQ29udGV4dCkgewogICAgICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IHNjb3BlQ29udGV4dC5wcm9wYWdhdGlvbkNvbnRleHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGNsZWFyKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX3RhZ3MgPSB7fTsKICAgIHRoaXMuX2V4dHJhID0ge307CiAgICB0aGlzLl91c2VyID0ge307CiAgICB0aGlzLl9jb250ZXh0cyA9IHt9OwogICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl90cmFuc2FjdGlvbk5hbWUgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9maW5nZXJwcmludCA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkOwogICAgdGhpcy5fc3BhbiA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3Nlc3Npb24gPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHsKICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBtYXhCcmVhZGNydW1icyA6IERFRkFVTFRfTUFYX0JSRUFEQ1JVTUJTOwoKICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVycwogICAgaWYgKG1heENydW1icyA8PSAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7CiAgICAgIHRpbWVzdGFtcDogZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLAogICAgICAuLi5icmVhZGNydW1iLAogICAgfTsKCiAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuX2JyZWFkY3J1bWJzOwogICAgYnJlYWRjcnVtYnMucHVzaChtZXJnZWRCcmVhZGNydW1iKTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMubGVuZ3RoID4gbWF4Q3J1bWJzID8gYnJlYWRjcnVtYnMuc2xpY2UoLW1heENydW1icykgOiBicmVhZGNydW1iczsKCiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0TGFzdEJyZWFkY3J1bWIoKSB7CiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnNbdGhpcy5fYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV07CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBjbGVhckJyZWFkY3J1bWJzKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCkgewogICAgdGhpcy5fYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdldFNjb3BlRGF0YSgpYCBpbnN0ZWFkLgogICAqLwogICBnZXRBdHRhY2htZW50cygpIHsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNjb3BlRGF0YSgpOwoKICAgIHJldHVybiBkYXRhLmF0dGFjaG1lbnRzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgY2xlYXJBdHRhY2htZW50cygpIHsKICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKiBAaW5oZXJpdERvYyAqLwogICBnZXRTY29wZURhdGEoKSB7CiAgICBjb25zdCB7CiAgICAgIF9icmVhZGNydW1icywKICAgICAgX2F0dGFjaG1lbnRzLAogICAgICBfY29udGV4dHMsCiAgICAgIF90YWdzLAogICAgICBfZXh0cmEsCiAgICAgIF91c2VyLAogICAgICBfbGV2ZWwsCiAgICAgIF9maW5nZXJwcmludCwKICAgICAgX2V2ZW50UHJvY2Vzc29ycywKICAgICAgX3Byb3BhZ2F0aW9uQ29udGV4dCwKICAgICAgX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgICAgX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgX3NwYW4sCiAgICB9ID0gdGhpczsKCiAgICByZXR1cm4gewogICAgICBicmVhZGNydW1iczogX2JyZWFkY3J1bWJzLAogICAgICBhdHRhY2htZW50czogX2F0dGFjaG1lbnRzLAogICAgICBjb250ZXh0czogX2NvbnRleHRzLAogICAgICB0YWdzOiBfdGFncywKICAgICAgZXh0cmE6IF9leHRyYSwKICAgICAgdXNlcjogX3VzZXIsCiAgICAgIGxldmVsOiBfbGV2ZWwsCiAgICAgIGZpbmdlcnByaW50OiBfZmluZ2VycHJpbnQgfHwgW10sCiAgICAgIGV2ZW50UHJvY2Vzc29yczogX2V2ZW50UHJvY2Vzc29ycywKICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiBfcHJvcGFnYXRpb25Db250ZXh0LAogICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IF9zZGtQcm9jZXNzaW5nTWV0YWRhdGEsCiAgICAgIHRyYW5zYWN0aW9uTmFtZTogX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgc3BhbjogX3NwYW4sCiAgICB9OwogIH0KCiAgLyoqCiAgICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC4KICAgKgogICAqIEBwYXJhbSBldmVudCBFdmVudAogICAqIEBwYXJhbSBoaW50IE9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiwgZm9yIHVzZSBieSB0aGUgZXZlbnQgcHJvY2Vzc29ycy4KICAgKiBAaGlkZGVuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhcHBseVNjb3BlRGF0YVRvRXZlbnQoKWAgZGlyZWN0bHkKICAgKi8KICAgYXBwbHlUb0V2ZW50KAogICAgZXZlbnQsCiAgICBoaW50ID0ge30sCiAgICBhZGRpdGlvbmFsRXZlbnRQcm9jZXNzb3JzID0gW10sCiAgKSB7CiAgICBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIHRoaXMuZ2V0U2NvcGVEYXRhKCkpOwoKICAgIC8vIFRPRE8gKHY4KTogVXBkYXRlIHRoaXMgb3JkZXIgdG8gYmU6IEdsb2JhbCA+IENsaWVudCA+IFNjb3BlCiAgICBjb25zdCBldmVudFByb2Nlc3NvcnMgPSBbCiAgICAgIC4uLmFkZGl0aW9uYWxFdmVudFByb2Nlc3NvcnMsCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwKICAgICAgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzLAogICAgXTsKCiAgICByZXR1cm4gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKGV2ZW50UHJvY2Vzc29ycywgZXZlbnQsIGhpbnQpOwogIH0KCiAgLyoqCiAgICogQWRkIGRhdGEgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nIGJ1dCB3b24ndCBnZXQgc2VudCB0byBTZW50cnkKICAgKi8KICAgc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKG5ld0RhdGEpIHsKICAgIHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHsgLi4udGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCAuLi5uZXdEYXRhIH07CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkgewogICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gY29udGV4dDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkgewogICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYW4gZXhjZXB0aW9uIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIHRvIGNhcHR1cmUuCiAgICogQHBhcmFtIGhpbnQgT3B0aW5hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuCiAgICogQHJldHVybnMgdGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuCiAgICovCiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CgogICAgaWYgKCF0aGlzLl9jbGllbnQpIHsKICAgICAgbG9nZ2VyLndhcm4oJ05vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBleGNlcHRpb24hJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpOwoKICAgIHRoaXMuX2NsaWVudC5jYXB0dXJlRXhjZXB0aW9uKAogICAgICBleGNlcHRpb24sCiAgICAgIHsKICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLAogICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgICAuLi5oaW50LAogICAgICAgIGV2ZW50X2lkOiBldmVudElkLAogICAgICB9LAogICAgICB0aGlzLAogICAgKTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYSBtZXNzYWdlIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gY2FwdHVyZS4KICAgKiBAcGFyYW0gbGV2ZWwgQW4gb3B0aW9uYWwgc2V2ZXJpdHkgbGV2ZWwgdG8gcmVwb3J0IHRoZSBtZXNzYWdlIHdpdGguCiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LgogICAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIG1lc3NhZ2UhJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTsKCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZU1lc3NhZ2UoCiAgICAgIG1lc3NhZ2UsCiAgICAgIGxldmVsLAogICAgICB7CiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLAogICAgICAgIC4uLmhpbnQsCiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICAgIH0sCiAgICAgIHRoaXMsCiAgICApOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGZvciB0aGlzIHNjb3BlIGFuZCBzZW5kcyBpdCB0byBTZW50cnkuCiAgICoKICAgKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBldmVudCB0byBjYXB0dXJlLgogICAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC4KICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LgogICAqLwogICBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpOwogICAgICByZXR1cm4gZXZlbnRJZDsKICAgIH0KCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0sIHRoaXMpOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzZXQgY2FsbC4KICAgKi8KICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkgewogICAgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzCiAgICAvLyBJZiB0aGlzIGNoZWNrIGlzIG5vdCBoZXJlIHdlJ2xsIHByb2R1Y2UgZW5kbGVzcyByZWN1cnNpb24gd2hlbiBzb21ldGhpbmcgaXMgZG9uZSB3aXRoIHRoZSBzY29wZQogICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay4KICAgIGlmICghdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzKSB7CiAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IHRydWU7CiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4gewogICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgICB9KTsKICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpIHsKICByZXR1cm4gewogICAgdHJhY2VJZDogdXVpZDQoKSwKICAgIHNwYW5JZDogdXVpZDQoKS5zdWJzdHJpbmcoMTYpLAogIH07Cn0KCmNvbnN0IFNES19WRVJTSU9OID0gJzcuMTIwLjAnOwoKLyoqCiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuCiAqCiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3JlYXNlZCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJmYWNlCiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLgogKgogKiBAaGlkZGVuCiAqLwpjb25zdCBBUElfVkVSU0lPTiA9IHBhcnNlRmxvYXQoU0RLX1ZFUlNJT04pOwoKLyoqCiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlbgogKiB3aXRoIHtAbGluayBPcHRpb25zLm1heEJyZWFkY3J1bWJzfS4KICovCmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7CgovKioKICogQGRlcHJlY2F0ZWQgVGhlIGBIdWJgIGNsYXNzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDggb2YgdGhlIFNESyBpbiBmYXZvdXIgb2YgYFNjb3BlYCBhbmQgYENsaWVudGAgb2JqZWN0cy4KICoKICogSWYgeW91IHByZXZpb3VzbHkgdXNlZCB0aGUgYEh1YmAgY2xhc3MgZGlyZWN0bHksIHJlcGxhY2UgaXQgd2l0aCBgU2NvcGVgIGFuZCBgQ2xpZW50YCBvYmplY3RzLiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNdWx0aXBsZSBTZW50cnkgSW5zdGFuY2VzXShodHRwczovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2Jlc3QtcHJhY3RpY2VzL211bHRpcGxlLXNlbnRyeS1pbnN0YW5jZXMvKQogKiAtIFtCcm93c2VyIEV4dGVuc2lvbnNdKGh0dHBzOi8vZG9jcy5zZW50cnkuaW8vcGxhdGZvcm1zL2phdmFzY3JpcHQvYmVzdC1wcmFjdGljZXMvYnJvd3Nlci1leHRlbnNpb25zLykKICoKICogU29tZSBvZiBvdXIgQVBJcyBhcmUgdHlwZWQgd2l0aCB0aGUgSHViIGNsYXNzIGluc3RlYWQgb2YgdGhlIGludGVyZmFjZSAoZS5nLiBgZ2V0Q3VycmVudEh1YmApLiBNb3N0IG9mIHRoZW0gYXJlIGRlcHJlY2F0ZWQKICogdGhlbXNlbHZlcyBhbmQgd2lsbCBhbHNvIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA4LiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNaWdyYXRpb24gR3VpZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvYmxvYi9kZXZlbG9wL01JR1JBVElPTi5tZCNkZXByZWNhdGUtaHViKQogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmNsYXNzIEh1YiAgewogIC8qKiBJcyBhIHtAbGluayBMYXllcn1bXSBjb250YWluaW5nIHRoZSBjbGllbnQgYW5kIHNjb3BlICovCgogIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi8KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGUKICAgKiBpbnRlcm5hbCBzdGFjayBvbiBjcmVhdGlvbi4KICAgKgogICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gc2NvcGUgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LgogICAqCiAgICogQGRlcHJlY2F0ZWQgSW5zdGFudGlhdGlvbiBvZiBIdWIgb2JqZWN0cyBpcyBkZXByZWNhdGVkIGFuZCB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gOCBvZiB0aGUgU0RLLgogICAqCiAgICogSWYgeW91IGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEh1YiBmb3IgbXVsdGktY2xpZW50IHVzZSBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgaHViID0gbmV3IEh1YigpOwogICAqIGh1Yi5iaW5kQ2xpZW50KGNsaWVudCk7CiAgICogbWFrZU1haW4oaHViKQogICAqIGBgYAogICAqCiAgICogaW5zdGVhZCBpbml0aWFsaXplIHRoZSBjbGllbnQgYXMgZm9sbG93czoKICAgKgogICAqIGBgYAogICAqIC8vIE5FVwogICAqIFNlbnRyeS53aXRoSXNvbGF0aW9uU2NvcGUoKCkgPT4gewogICAqICAgIFNlbnRyeS5zZXRDdXJyZW50Q2xpZW50KGNsaWVudCk7CiAgICogICAgY2xpZW50LmluaXQoKTsKICAgKiB9KTsKICAgKiBgYGAKICAgKgogICAqIElmIHlvdSBhcmUgdXNpbmcgdGhlIEh1YiB0byBjYXB0dXJlIGV2ZW50cyBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoY2xpZW50KTsKICAgKiBodWIuY2FwdHVyZUV4Y2VwdGlvbigpCiAgICogYGBgCiAgICoKICAgKiBpbnN0ZWFkIGNhcHR1cmUgaXNvbGF0ZWQgZXZlbnRzIGFzIGZvbGxvd3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyBORVcKICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICogY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgKiBzY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgKiBzY29wZS5jYXB0dXJlRXhjZXB0aW9uKCk7CiAgICogYGBgCiAgICovCiAgIGNvbnN0cnVjdG9yKAogICAgY2xpZW50LAogICAgc2NvcGUsCiAgICBpc29sYXRpb25TY29wZSwKICAgICAgX3ZlcnNpb24gPSBBUElfVkVSU0lPTiwKICApIHt0aGlzLl92ZXJzaW9uID0gX3ZlcnNpb247CiAgICBsZXQgYXNzaWduZWRTY29wZTsKICAgIGlmICghc2NvcGUpIHsKICAgICAgYXNzaWduZWRTY29wZSA9IG5ldyBTY29wZSgpOwogICAgICBhc3NpZ25lZFNjb3BlLnNldENsaWVudChjbGllbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWduZWRTY29wZSA9IHNjb3BlOwogICAgfQoKICAgIGxldCBhc3NpZ25lZElzb2xhdGlvblNjb3BlOwogICAgaWYgKCFpc29sYXRpb25TY29wZSkgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gbmV3IFNjb3BlKCk7CiAgICAgIGFzc2lnbmVkSXNvbGF0aW9uU2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7CiAgICB9IGVsc2UgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gaXNvbGF0aW9uU2NvcGU7CiAgICB9CgogICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTsKCiAgICBpZiAoY2xpZW50KSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTsKICAgIH0KCiAgICB0aGlzLl9pc29sYXRpb25TY29wZSA9IGFzc2lnbmVkSXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdGhpcyBodWIncyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIHZlcnNpb24uCiAgICoKICAgKiBAcGFyYW0gdmVyc2lvbiBBIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUgdG8uCiAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIG5ld2VyOyBvdGhlcndpc2UgZmFsc2UuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgaXNPbGRlclRoYW4odmVyc2lvbikgewogICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uOwogIH0KCiAgLyoqCiAgICogVGhpcyBiaW5kcyB0aGUgZ2l2ZW4gY2xpZW50IHRvIHRoZSBjdXJyZW50IHNjb3BlLgogICAqIEBwYXJhbSBjbGllbnQgQW4gU0RLIGNsaWVudCAoY2xpZW50KSBpbnN0YW5jZS4KICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgaW5pdEFuZEJpbmQoKWAgZGlyZWN0bHksIG9yIGBzZXRDdXJyZW50Q2xpZW50KClgIGFuZC9vciBgY2xpZW50LmluaXQoKWAgaW5zdGVhZC4KICAgKi8KICAgYmluZENsaWVudChjbGllbnQpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgdG9wLmNsaWVudCA9IGNsaWVudDsKICAgIHRvcC5zY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKGNsaWVudCAmJiBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpOwogICAgfQogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwdXNoU2NvcGUoKSB7CiAgICAvLyBXZSB3YW50IHRvIGNsb25lIHRoZSBjb250ZW50IG9mIHByZXYgc2NvcGUKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCkuY2xvbmUoKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTdGFjaygpLnB1c2goewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY2xpZW50OiB0aGlzLmdldENsaWVudCgpLAogICAgICBzY29wZSwKICAgIH0pOwogICAgcmV0dXJuIHNjb3BlOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwb3BTY29wZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gISF0aGlzLmdldFN0YWNrKCkucG9wKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkud2l0aFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIHdpdGhTY29wZShjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBzY29wZSA9IHRoaXMucHVzaFNjb3BlKCk7CgogICAgbGV0IG1heWJlUHJvbWlzZVJlc3VsdDsKICAgIHRyeSB7CiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpc1RoZW5hYmxlIHJldHVybnMgdGhlIHdyb25nIHR5cGUKICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdC50aGVuKAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfSwKICAgICAgICBlID0+IHsKICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAgICAgdGhpcy5wb3BTY29wZSgpOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9LAogICAgICApOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5wb3BTY29wZSgpOwogICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDbGllbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0Q2xpZW50KCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudCA7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLgogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0Q3VycmVudFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNjb3BlKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlOwogIH0KCiAgLyoqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0SXNvbGF0aW9uU2NvcGUoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0SXNvbGF0aW9uU2NvcGUoKSB7CiAgICByZXR1cm4gdGhpcy5faXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBzdGFjayBmb3IgZG9tYWlucyBvciB0aGUgcHJvY2Vzcy4KICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgZ2V0U3RhY2soKSB7CiAgICByZXR1cm4gdGhpcy5fc3RhY2s7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHNjb3BlIGxheWVyIGluIHRoZSBvcmRlciBkb21haW4gPiBsb2NhbCA+IHByb2Nlc3MuCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGdldFN0YWNrVG9wKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aCAtIDFdOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKSk7CiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCB7CiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgIGBTZW50cnkuY2FwdHVyZU1lc3NhZ2UoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UoCiAgICBtZXNzYWdlLAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICAgIGhpbnQsCiAgKSB7CiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCkpOwogICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIHsKICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5jYXB0dXJlRXZlbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CiAgICBpZiAoIWV2ZW50LnR5cGUpIHsKICAgICAgdGhpcy5fbGFzdEV2ZW50SWQgPSBldmVudElkOwogICAgfQogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0pOwogICAgcmV0dXJuIGV2ZW50SWQ7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGxhc3RFdmVudElkKCkgewogICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgaW5zdGVhZC4KICAgKi8KICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCBoaW50KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwoKICAgIGlmICghY2xpZW50KSByZXR1cm47CgogICAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPQogICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHJldHVybjsKCiAgICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCk7CiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTsKICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWIKICAgICAgPyAoY29uc29sZVNhbmRib3goKCkgPT4gYmVmb3JlQnJlYWRjcnVtYihtZXJnZWRCcmVhZGNydW1iLCBoaW50KSkgKQogICAgICA6IG1lcmdlZEJyZWFkY3J1bWI7CgogICAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChjbGllbnQuZW1pdCkgewogICAgICBjbGllbnQuZW1pdCgnYmVmb3JlQWRkQnJlYWRjcnVtYicsIGZpbmFsQnJlYWRjcnVtYiwgaGludCk7CiAgICB9CgogICAgLy8gVE9ETyh2OCk6IEkga25vdyB0aGlzIGNvbW1lbnQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgYmVjYXVzZSB0aGUgaHViIHdpbGwgYmUgZGVwcmVjYXRlZCBidXQgSSBzdGlsbCB3YW50ZWQgdG8KICAgIC8vIHdyaXRlIGl0IGRvd24uIEluIHRoZW9yeSwgd2Ugd291bGQgaGF2ZSB0byBhZGQgdGhlIGJyZWFkY3J1bWJzIHRvIHRoZSBpc29sYXRpb24gc2NvcGUgaGVyZSwgaG93ZXZlciwgdGhhdCB3b3VsZAogICAgLy8gZHVwbGljYXRlIGFsbCBvZiB0aGUgYnJlYWRjcnVtYnMuIFRoZXJlIHdhcyB0aGUgcG9zc2liaWxpdHkgb2YgYWRkaW5nIGJyZWFkY3J1bWJzIHRvIGJvdGgsIHRoZSBpc29sYXRpb24gc2NvcGUKICAgIC8vIGFuZCB0aGUgbm9ybWFsIHNjb3BlLCBhbmQgZGVkdXBsaWNhdGluZyBpdCBkb3duIHRoZSBsaW5lIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBIb3dldmVyLCB0aGF0IHdvdWxkCiAgICAvLyBoYXZlIGJlZW4gdmVyeSBmcmFnaWxlLCBiZWNhdXNlIHRoZSBicmVhZGNydW1iIG9iamVjdHMgd291bGQgaGF2ZSBuZWVkZWQgdG8ga2VlcCB0aGVpciBpZGVudGl0eSBhbGwgdGhyb3VnaG91dAogICAgLy8gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuCiAgICAvLyBJbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCB0aGUgdG9wIGxldmVsIGBTZW50cnkuYWRkQnJlYWRjcnVtYigpYCBzaG91bGQgT05MWSB3cml0ZSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgoKICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFVzZXIoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VXNlcih1c2VyKSB7CiAgICAvLyBUT0RPKHY4KTogVGhlIHRvcCBsZXZlbCBgU2VudHJ5LnNldFVzZXIoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldFVzZXIodXNlcik7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRVc2VyKHVzZXIpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWdzKClgIGluc3RlYWQuCiAgICovCiAgIHNldFRhZ3ModGFncykgewogICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRUYWdzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWdzKHRhZ3MpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0VGFncyh0YWdzKTsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0RXh0cmFzKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmFzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRFeHRyYXMoZXh0cmFzKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhcyhleHRyYXMpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWcoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VGFnKGtleSwgdmFsdWUpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0VGFnKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldEV4dHJhKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmEoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldEV4dHJhKGtleSwgZXh0cmEpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldENvbnRleHQoKWAgaW5zdGVhZC4KICAgKi8KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0Q29udGV4dCgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRTY29wZSgpYCBkaXJlY3RseS4KICAgKi8KICAgY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CiAgICBpZiAoY2xpZW50KSB7CiAgICAgIGNhbGxiYWNrKHNjb3BlKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgIHJ1bihjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBvbGRIdWIgPSBtYWtlTWFpbih0aGlzKTsKICAgIHRyeSB7CiAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIG1ha2VNYWluKG9sZEh1Yik7CiAgICB9CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmdldENsaWVudCgpLmdldEludGVncmF0aW9uQnlOYW1lKClgIGluc3RlYWQuCiAgICovCiAgIGdldEludGVncmF0aW9uKGludGVncmF0aW9uKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KCk7CiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgcmV0dXJuIGNsaWVudC5nZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7CiAgICB9IGNhdGNoIChfb08pIHsKICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IEh1YmApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uCiAgICoKICAgKiBBIHRyZWUgc3RydWN0dXJlIGNhbiBiZSBidWlsdCBieSBhZGRpbmcgY2hpbGQgc3BhbnMgdG8gdGhlIHRyYW5zYWN0aW9uLCBhbmQgY2hpbGQgc3BhbnMgdG8gb3RoZXIgc3BhbnMuIFRvIHN0YXJ0IGEKICAgKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuCiAgICoKICAgKiBFdmVyeSBjaGlsZCBzcGFuIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgb3RoZXJ3aXNlIHRoZSB1bmZpbmlzaGVkIHNwYW5zIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5lbmQoKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzCiAgICogZmluaXNoZWQgY2hpbGQgc3BhbnMgd2lsbCBiZSBzZW50IHRvIFNlbnRyeS4KICAgKgogICAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLgogICAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50CiAgICogZGVmYXVsdCB2YWx1ZXMpLiBTZWUge0BsaW5rIE9wdGlvbnMudHJhY2VzU2FtcGxlcn0uCiAgICoKICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZAogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW4oKWAsIGBzdGFydFNwYW5NYW51YWwoKWAgb3IgYHN0YXJ0SW5hY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSB7CiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFRyYW5zYWN0aW9uJywgY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KTsKCiAgICBpZiAoREVCVUdfQlVJTEQgJiYgIXJlc3VsdCkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTsKICAgICAgaWYgKCFjbGllbnQpIHsKICAgICAgICBsb2dnZXIud2FybigKICAgICAgICAgICJUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaXMgbWlzc2luZy4gWW91IHNob3VsZCAnaW5pdCcgdGhlIFNESyBiZWZvcmUgY2FsbGluZyAnc3RhcnRUcmFuc2FjdGlvbiciLAogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLndhcm4oYFRyYWNpbmcgZXh0ZW5zaW9uICdzdGFydFRyYW5zYWN0aW9uJyBoYXMgbm90IGJlZW4gYWRkZWQuIENhbGwgJ2FkZFRyYWNpbmdFeHRlbnNpb25zJyBiZWZvcmUgY2FsbGluZyAnaW5pdCc6ClNlbnRyeS5hZGRUcmFjaW5nRXh0ZW5zaW9ucygpOwpTZW50cnkuaW5pdCh7Li4ufSk7CmApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUhlYWRlcigpYCBpbnN0ZWFkLgogICAqLwogICB0cmFjZUhlYWRlcnMoKSB7CiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZCgndHJhY2VIZWFkZXJzJyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIHRvcCBsZXZlbCBgY2FwdHVyZVNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb24gPSBmYWxzZSkgewogICAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGUKICAgIGlmIChlbmRTZXNzaW9uKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICByZXR1cm4gdGhpcy5lbmRTZXNzaW9uKCk7CiAgICB9CgogICAgLy8gb25seSBzZW5kIHRoZSB1cGRhdGUKICAgIHRoaXMuX3NlbmRTZXNzaW9uVXBkYXRlKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSB0b3AgbGV2ZWwgYGVuZFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGVuZFNlc3Npb24oKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3Qgc2NvcGUgPSBsYXllci5zY29wZTsKICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoc2Vzc2lvbikgewogICAgICBjbG9zZVNlc3Npb24oc2Vzc2lvbik7CiAgICB9CiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpOwoKICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbigpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBzdGFydFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0U2Vzc2lvbihjb250ZXh0KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCA9IERFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGsKICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSBHTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTsKCiAgICBjb25zdCBzZXNzaW9uID0gbWFrZVNlc3Npb24oewogICAgICByZWxlYXNlLAogICAgICBlbnZpcm9ubWVudCwKICAgICAgdXNlcjogc2NvcGUuZ2V0VXNlcigpLAogICAgICAuLi4odXNlckFnZW50ICYmIHsgdXNlckFnZW50IH0pLAogICAgICAuLi5jb250ZXh0LAogICAgfSk7CgogICAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmUKICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICAgIHVwZGF0ZVNlc3Npb24oY3VycmVudFNlc3Npb24sIHsgc3RhdHVzOiAnZXhpdGVkJyB9KTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5lbmRTZXNzaW9uKCk7CgogICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTsKCiAgICByZXR1cm4gc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgaWYgZGVmYXVsdCBQSUkgc2hvdWxkIGJlIHNlbnQgdG8gU2VudHJ5IGFuZCBwcm9wYWdhdGVkIGluIG91cmdvaW5nIHJlcXVlc3RzCiAgICogd2hlbiBUcmFjaW5nIGlzIHVzZWQuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wLWxldmVsIGBnZXRDbGllbnQoKS5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWlgIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24KICAgKiBvbmx5IHVubmVjZXNzYXJpbHkgaW5jcmVhc2VkIEFQSSBzdXJmYWNlIGJ1dCBvbmx5IHdyYXBwZWQgYWNjZXNzaW5nIHRoZSBvcHRpb24uCiAgICovCiAgIHNob3VsZFNlbmREZWZhdWx0UGlpKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpOwogICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpOwogICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnNlbmREZWZhdWx0UGlpKTsKICB9CgogIC8qKgogICAqIFNlbmRzIHRoZSBjdXJyZW50IFNlc3Npb24gb24gdGhlIHNjb3BlCiAgICovCiAgIF9zZW5kU2Vzc2lvblVwZGF0ZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CgogICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24oKTsKICAgIGlmIChzZXNzaW9uICYmIGNsaWVudCAmJiBjbGllbnQuY2FwdHVyZVNlc3Npb24pIHsKICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbHMgZ2xvYmFsIGV4dGVuc2lvbiBtZXRob2QgYW5kIGJpbmRpbmcgY3VycmVudCBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb24gY2FsbAogICAqLwogIC8vIEB0cy1leHBlY3QtZXJyb3IgRnVuY3Rpb24gbGFja3MgZW5kaW5nIHJldHVybiBzdGF0ZW1lbnQgYW5kIHJldHVybiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgJ3VuZGVmaW5lZCcuIHRzKDIzNjYpCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgX2NhbGxFeHRlbnNpb25NZXRob2QobWV0aG9kLCAuLi5hcmdzKSB7CiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTsKICAgIGNvbnN0IHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXzsKICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIud2FybihgRXh0ZW5zaW9uIG1ldGhvZCAke21ldGhvZH0gY291bGRuJ3QgYmUgZm91bmQsIGRvaW5nIG5vdGhpbmcuYCk7CiAgfQp9CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuCiAqCiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsCiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVjawogKiBhdCB0aGUgY2FsbC1zaXRlLiBXZSBhbHdheXMgYWNjZXNzIHRoZSBjYXJyaWVyIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgc28gd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGBfX1NFTlRSWV9fYCBpcyB0aGVyZS4KICoqLwpmdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHsKICBHTE9CQUxfT0JKLl9fU0VOVFJZX18gPSBHTE9CQUxfT0JKLl9fU0VOVFJZX18gfHwgewogICAgZXh0ZW5zaW9uczoge30sCiAgICBodWI6IHVuZGVmaW5lZCwKICB9OwogIHJldHVybiBHTE9CQUxfT0JKOwp9CgovKioKICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdAogKgogKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YgogKgogKiBAZGVwcmVjYXRlZCBVc2UgYHNldEN1cnJlbnRDbGllbnQoKWAgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBtYWtlTWFpbihodWIpIHsKICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7CiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpOwogIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgaHViKTsKICByZXR1cm4gb2xkSHViOwp9CgovKioKICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuCiAqCiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlCiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi4KICogT3RoZXJ3aXNlLCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgaHViIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmVzcGVjdGl2ZSByZXBsYWNlbWVudCBtZXRob2QgZGlyZWN0bHkgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRDdXJyZW50SHViKCkgewogIC8vIEdldCBtYWluIGNhcnJpZXIgKGdsb2JhbCBmb3IgZXZlcnkgZW52aXJvbm1lbnQpCiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpOwoKICBpZiAocmVnaXN0cnkuX19TRU5UUllfXyAmJiByZWdpc3RyeS5fX1NFTlRSWV9fLmFjcykgewogICAgY29uc3QgaHViID0gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MuZ2V0Q3VycmVudEh1YigpOwoKICAgIGlmIChodWIpIHsKICAgICAgcmV0dXJuIGh1YjsKICAgIH0KICB9CgogIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3QKICByZXR1cm4gZ2V0R2xvYmFsSHViKHJlZ2lzdHJ5KTsKfQoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmZ1bmN0aW9uIGdldEdsb2JhbEh1YihyZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCkpIHsKICAvLyBJZiB0aGVyZSdzIG5vIGh1Yiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmUKCiAgaWYgKAogICAgIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKQogICkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIG5ldyBIdWIoKSk7CiAgfQoKICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0CiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTsKfQoKLyoqCiAqIFRoaXMgd2lsbCB0ZWxsIHdoZXRoZXIgYSBjYXJyaWVyIGhhcyBhIGh1YiBvbiBpdCBvciBub3QKICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqLwpmdW5jdGlvbiBoYXNIdWJPbkNhcnJpZXIoY2FycmllcikgewogIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcge0BsaW5rIEh1Yn0gYW5kIGFkZCB0byB0aGUgcGFzc2VkIG9iamVjdCBvbgogKiBfX1NFTlRSWV9fLmh1Yi4KICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqIEBoaWRkZW4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKSB7CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignaHViJywgKCkgPT4gbmV3IEh1YigpLCBjYXJyaWVyKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlCiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdAogKiBAcGFyYW0gaHViIEh1YgogKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBzZXRIdWJPbkNhcnJpZXIoY2FycmllciwgaHViKSB7CiAgaWYgKCFjYXJyaWVyKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgX19TRU5UUllfXyA9IChjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge30pOwogIF9fU0VOVFJZX18uaHViID0gaHViOwogIHJldHVybiB0cnVlOwp9CgovKioKICogQXBwbHkgU2RrSW5mbyAobmFtZSwgdmVyc2lvbiwgcGFja2FnZXMsIGludGVncmF0aW9ucykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQga2V5LgogKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LgogKiovCmZ1bmN0aW9uIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBzZGtJbmZvKSB7CiAgaWYgKCFzZGtJbmZvKSB7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTsKICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTsKICBldmVudC5zZGsudmVyc2lvbiA9IGV2ZW50LnNkay52ZXJzaW9uIHx8IHNka0luZm8udmVyc2lvbjsKICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07CiAgZXZlbnQuc2RrLnBhY2thZ2VzID0gWy4uLihldmVudC5zZGsucGFja2FnZXMgfHwgW10pLCAuLi4oc2RrSW5mby5wYWNrYWdlcyB8fCBbXSldOwogIHJldHVybiBldmVudDsKfQoKLyoqIENyZWF0ZXMgYW4gZW52ZWxvcGUgZnJvbSBhIFNlc3Npb24gKi8KZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKAogIHNlc3Npb24sCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IHsKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICB9OwoKICBjb25zdCBlbnZlbG9wZUl0ZW0gPQogICAgJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24gPyBbeyB0eXBlOiAnc2Vzc2lvbnMnIH0sIHNlc3Npb25dIDogW3sgdHlwZTogJ3Nlc3Npb24nIH0sIHNlc3Npb24udG9KU09OKCldOwoKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZW52ZWxvcGVJdGVtXSk7Cn0KCi8qKgogKiBDcmVhdGUgYW4gRW52ZWxvcGUgZnJvbSBhbiBldmVudC4KICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGUoCiAgZXZlbnQsCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwoKICAvKgogICAgTm90ZTogRHVlIHRvIFRTLCBldmVudC50eXBlIG1heSBiZSBgcmVwbGF5X2V2ZW50YCwgdGhlb3JldGljYWxseS4KICAgIEluIHByYWN0aWNlLCB3ZSBuZXZlciBjYWxsIGBjcmVhdGVFdmVudEVudmVsb3BlYCB3aXRoIGByZXBsYXlfZXZlbnRgIHR5cGUsCiAgICBhbmQgd2UnZCBoYXZlIHRvIGFkanV0IGEgbG9vb3Qgb2YgdHlwZXMgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHkuCiAgICBXZSB3YW50IHRvIGF2b2lkIGNhc3RpbmcgdGhpcyBhcm91bmQsIGFzIHRoYXQgY291bGQgbGVhZCB0byBidWdzIChlLmcuIHdoZW4gd2UgYWRkIGFub3RoZXIgdHlwZSkKICAgIFNvIHRoZSBzYWZlIGNob2ljZSBpcyB0byByZWFsbHkgZ3VhcmQgYWdhaW5zdCB0aGUgcmVwbGF5X2V2ZW50IHR5cGUgaGVyZS4KICAqLwogIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gJ3JlcGxheV9ldmVudCcgPyBldmVudC50eXBlIDogJ2V2ZW50JzsKCiAgZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIG1ldGFkYXRhICYmIG1ldGFkYXRhLnNkayk7CgogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKGV2ZW50LCBzZGtJbmZvLCB0dW5uZWwsIGRzbik7CgogIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG8KICAvLyBzZW50cnkuIChOb3RlOiBPdXIgdXNlIG9mIHRoaXMgcHJvcGVydHkgY29tZXMgYW5kIGdvZXMgd2l0aCB3aGF0ZXZlciB3ZSBtaWdodCBiZSBkZWJ1Z2dpbmcsIHdoYXRldmVyIGhhY2tzIHdlIG1heQogIC8vIGhhdmUgdGVtcG9yYXJpbHkgYWRkZWQsIGV0Yy4gRXZlbiBpZiB3ZSBkb24ndCBoYXBwZW4gdG8gYmUgdXNpbmcgaXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBsZXQncyBub3QgZ2V0IHJpZAogIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLikKICBkZWxldGUgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhOwoKICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdOwogIHJldHVybiBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZUhlYWRlcnMsIFtldmVudEl0ZW1dKTsKfQoKY29uc3QgU0VOVFJZX0FQSV9WRVJTSU9OID0gJzcnOwoKLyoqIFJldHVybnMgdGhlIHByZWZpeCB0byBjb25zdHJ1Y3QgU2VudHJ5IGluZ2VzdGlvbiBBUEkgZW5kcG9pbnRzLiAqLwpmdW5jdGlvbiBnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKSB7CiAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJzsKICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnOwogIHJldHVybiBgJHtwcm90b2NvbH0vLyR7ZHNuLmhvc3R9JHtwb3J0fSR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvYDsKfQoKLyoqIFJldHVybnMgdGhlIGluZ2VzdCBBUEkgZW5kcG9pbnQgZm9yIHRhcmdldC4gKi8KZnVuY3Rpb24gX2dldEluZ2VzdEVuZHBvaW50KGRzbikgewogIHJldHVybiBgJHtnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKX0ke2Rzbi5wcm9qZWN0SWR9L2VudmVsb3BlL2A7Cn0KCi8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqLwpmdW5jdGlvbiBfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKSB7CiAgcmV0dXJuIHVybEVuY29kZSh7CiAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWUKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuCiAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LAogICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTiwKICAgIC4uLihzZGtJbmZvICYmIHsgc2VudHJ5X2NsaWVudDogYCR7c2RrSW5mby5uYW1lfS8ke3Nka0luZm8udmVyc2lvbn1gIH0pLAogIH0pOwp9CgovKioKICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZW5kcG9pbnQgVVJMIHdpdGggYXV0aCBpbiB0aGUgcXVlcnkgc3RyaW5nLgogKgogKiBTZW5kaW5nIGF1dGggYXMgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGFuZCBub3QgYXMgY3VzdG9tIEhUVFAgaGVhZGVycyBhdm9pZHMgQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMuCiAqLwpmdW5jdGlvbiBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKAogIGRzbiwKICAvLyBUT0RPICh2OCk6IFJlbW92ZSBgdHVubmVsT3JPcHRpb25zYCBpbiBmYXZvciBvZiBgb3B0aW9uc2AsIGFuZCB1c2UgdGhlIHN1YnN0aXR1dGUgY29kZSBiZWxvdwogIC8vIG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7fSBhcyBDbGllbnRPcHRpb25zLAogIHR1bm5lbE9yT3B0aW9ucyA9IHt9ICwKKSB7CiAgLy8gVE9ETyAodjgpOiBVc2UgdGhpcyBjb2RlIGluc3RlYWQKICAvLyBjb25zdCB7IHR1bm5lbCwgX21ldGFkYXRhID0ge30gfSA9IG9wdGlvbnM7CiAgLy8gcmV0dXJuIHR1bm5lbCA/IHR1bm5lbCA6IGAke19nZXRJbmdlc3RFbmRwb2ludChkc24pfT8ke19lbmNvZGVkQXV0aChkc24sIF9tZXRhZGF0YS5zZGspfWA7CgogIGNvbnN0IHR1bm5lbCA9IHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gdHVubmVsT3JPcHRpb25zIDogdHVubmVsT3JPcHRpb25zLnR1bm5lbDsKICBjb25zdCBzZGtJbmZvID0KICAgIHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnIHx8ICF0dW5uZWxPck9wdGlvbnMuX21ldGFkYXRhID8gdW5kZWZpbmVkIDogdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YS5zZGs7CgogIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKX1gOwp9Cgpjb25zdCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSA9IDMwOwoKLyoqCiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBTZW50cnkgYFRyYW5zcG9ydGAKICoKICogQHBhcmFtIG9wdGlvbnMKICogQHBhcmFtIG1ha2VSZXF1ZXN0CiAqLwpmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoCiAgb3B0aW9ucywKICBtYWtlUmVxdWVzdCwKICBidWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcigKICAgIG9wdGlvbnMuYnVmZmVyU2l6ZSB8fCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSwKICApLAopIHsKICBsZXQgcmF0ZUxpbWl0cyA9IHt9OwogIGNvbnN0IGZsdXNoID0gKHRpbWVvdXQpID0+IGJ1ZmZlci5kcmFpbih0aW1lb3V0KTsKCiAgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSkgewogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zID0gW107CgogICAgLy8gRHJvcCByYXRlIGxpbWl0ZWQgaXRlbXMgZnJvbSBlbnZlbG9wZQogICAgZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHsKICAgICAgY29uc3QgZGF0YUNhdGVnb3J5ID0gZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpOwogICAgICBpZiAoaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCBkYXRhQ2F0ZWdvcnkpKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudCgncmF0ZWxpbWl0X2JhY2tvZmYnLCBkYXRhQ2F0ZWdvcnksIGV2ZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWx0ZXJlZEVudmVsb3BlSXRlbXMucHVzaChpdGVtKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gU2tpcCBzZW5kaW5nIGlmIGVudmVsb3BlIGlzIGVtcHR5IGFmdGVyIGZpbHRlcmluZyBvdXQgcmF0ZSBsaW1pdGVkIGV2ZW50cwogICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgIH0KCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZSA9IGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlWzBdLCBmaWx0ZXJlZEVudmVsb3BlSXRlbXMgKTsKCiAgICAvLyBDcmVhdGVzIGNsaWVudCByZXBvcnQgZm9yIGVhY2ggaXRlbSBpbiBhbiBlbnZlbG9wZQogICAgY29uc3QgcmVjb3JkRW52ZWxvcGVMb3NzID0gKHJlYXNvbikgPT4gewogICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudChyZWFzb24sIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSwgZXZlbnQpOwogICAgICB9KTsKICAgIH07CgogICAgY29uc3QgcmVxdWVzdFRhc2sgPSAoKSA9PgogICAgICBtYWtlUmVxdWVzdCh7IGJvZHk6IHNlcmlhbGl6ZUVudmVsb3BlKGZpbHRlcmVkRW52ZWxvcGUsIG9wdGlvbnMudGV4dEVuY29kZXIpIH0pLnRoZW4oCiAgICAgICAgcmVzcG9uc2UgPT4gewogICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBvbiBOT0sgcmVzcG9uc2VzLCBidXQgd2Ugd2FudCB0byBhdCBsZWFzdCBsb2cgdGhlbQogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkpIHsKICAgICAgICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9IHRvIHNlbnQgZXZlbnQuYCk7CiAgICAgICAgICB9CgogICAgICAgICAgcmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHMocmF0ZUxpbWl0cywgcmVzcG9uc2UpOwogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgIH0sCiAgICAgICAgZXJyb3IgPT4gewogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCduZXR3b3JrX2Vycm9yJyk7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9LAogICAgICApOwoKICAgIHJldHVybiBidWZmZXIuYWRkKHJlcXVlc3RUYXNrKS50aGVuKAogICAgICByZXN1bHQgPT4gcmVzdWx0LAogICAgICBlcnJvciA9PiB7CiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VudHJ5RXJyb3IpIHsKICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci5lcnJvcignU2tpcHBlZCBzZW5kaW5nIGV2ZW50IGJlY2F1c2UgYnVmZmVyIGlzIGZ1bGwuJyk7CiAgICAgICAgICByZWNvcmRFbnZlbG9wZUxvc3MoJ3F1ZXVlX292ZXJmbG93Jyk7CiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0sCiAgICApOwogIH0KCiAgLy8gV2UgdXNlIHRoaXMgdG8gaWRlbnRpZmlmeSBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZSBiYXNlIHRyYW5zcG9ydAogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYWdhaW4gYXMgd2UnbGwgbm8gbG9uZ2VyIG5lZWQgaXQKICBzZW5kLl9fc2VudHJ5X19iYXNlVHJhbnNwb3J0X18gPSB0cnVlOwoKICByZXR1cm4gewogICAgc2VuZCwKICAgIGZsdXNoLAogIH07Cn0KCmZ1bmN0aW9uIGdldEV2ZW50Rm9yRW52ZWxvcGVJdGVtKGl0ZW0sIHR5cGUpIHsKICBpZiAodHlwZSAhPT0gJ2V2ZW50JyAmJiB0eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyAoaXRlbSApWzFdIDogdW5kZWZpbmVkOwp9CgovKiogbm9ybWFsaXplcyBXaW5kb3dzIHBhdGhzICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgpIHsKICByZXR1cm4gcGF0aAogICAgLnJlcGxhY2UoL15bQS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4CiAgICAucmVwbGFjZSgvXFwvZywgJy8nKTsgLy8gcmVwbGFjZSBhbGwgYFxgIGluc3RhbmNlcyB3aXRoIGAvYAp9CgovKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgbW9kdWxlIG5hbWUgZnJvbSBhIGZpbGVuYW1lICovCmZ1bmN0aW9uIGNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZSgKICBiYXNlUGF0aCA9IHByb2Nlc3MuYXJndlsxXSA/IGRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6IHByb2Nlc3MuY3dkKCksCiAgaXNXaW5kb3dzID0gc2VwID09PSAnXFwnLAopIHsKICBjb25zdCBub3JtYWxpemVkQmFzZSA9IGlzV2luZG93cyA/IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGJhc2VQYXRoKSA6IGJhc2VQYXRoOwoKICByZXR1cm4gKGZpbGVuYW1lKSA9PiB7CiAgICBpZiAoIWZpbGVuYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChmaWxlbmFtZSkgOiBmaWxlbmFtZTsKCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0CiAgICBsZXQgeyBkaXIsIGJhc2U6IGZpbGUsIGV4dCB9ID0gcG9zaXgucGFyc2Uobm9ybWFsaXplZEZpbGVuYW1lKTsKCiAgICBpZiAoZXh0ID09PSAnLmpzJyB8fCBleHQgPT09ICcubWpzJyB8fCBleHQgPT09ICcuY2pzJykgewogICAgICBmaWxlID0gZmlsZS5zbGljZSgwLCBleHQubGVuZ3RoICogLTEpOwogICAgfQoKICAgIGlmICghZGlyKSB7CiAgICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlcgogICAgICBkaXIgPSAnLic7CiAgICB9CgogICAgY29uc3QgbiA9IGRpci5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcycpOwogICAgaWYgKG4gPiAtMSkgewogICAgICByZXR1cm4gYCR7ZGlyLnNsaWNlKG4gKyAxNCkucmVwbGFjZSgvXC8vZywgJy4nKX06JHtmaWxlfWA7CiAgICB9CgogICAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZQogICAgLy8gVG8gYmUgYSBwYXJ0IG9mIG1haW4gbW9kdWxlLCBpdCBoYXMgdG8gc2hhcmUgdGhlIHNhbWUgYmFzZQogICAgaWYgKGRpci5zdGFydHNXaXRoKG5vcm1hbGl6ZWRCYXNlKSkgewogICAgICBsZXQgbW9kdWxlTmFtZSA9IGRpci5zbGljZShub3JtYWxpemVkQmFzZS5sZW5ndGggKyAxKS5yZXBsYWNlKC9cLy9nLCAnLicpOwoKICAgICAgaWYgKG1vZHVsZU5hbWUpIHsKICAgICAgICBtb2R1bGVOYW1lICs9ICc6JzsKICAgICAgfQogICAgICBtb2R1bGVOYW1lICs9IGZpbGU7CgogICAgICByZXR1cm4gbW9kdWxlTmFtZTsKICAgIH0KCiAgICByZXR1cm4gZmlsZTsKICB9Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDIobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfS8qKgogKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3Byb3h5LWFnZW50cy90cmVlL2IxMzMyOTVmZDE2ZjY0NzU1NzhiNmIxNWJkOWI0ZTMzZWNiMGQwYjcKICogV2l0aCB0aGUgZm9sbG93aW5nIGxpY2VuY2U6CiAqCiAqIChUaGUgTUlUIExpY2Vuc2UpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMyBOYXRoYW4gUmFqbGljaCA8bmF0aGFuQHRvb3RhbGxuYXRlLm5ldD4qCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOioKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuKgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwoKY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTsKCmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7CgogIC8vIFNldCBieSBgaHR0cC5BZ2VudGAgLSBtaXNzaW5nIGZyb20gYEB0eXBlcy9ub2RlYAoKICBjb25zdHJ1Y3RvcihvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXNbSU5URVJOQUxdID0ge307CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuCiAgICovCiAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzCiAgICAgIC8vIG1lYW5zIHRoYXQgYSBwYXJlbnQgYEFnZW50YCBpcyAicGFzc2luZyB0aHJvdWdoIiB0byB0aGlzIGluc3RhbmNlLgogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnMgKS5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7CiAgICAgIH0KCiAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGBzZWN1cmVgIGVuZHBvaW50LCBjaGVjayBpZiBgcHJvdG9jb2xgIHByb3BlcnR5IGlzCiAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkwKICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvY29sID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JzsKICAgICAgfQogICAgfQoKICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG8KICAgIC8vIGNoZWNraW5nIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgY3VycmVudCBjYWxsIHN0YWNrLCBhbmQgdHJ5IHRvCiAgICAvLyBkZXRlY3QgdGhlICJodHRwcyIgbW9kdWxlLgogICAgY29uc3QgeyBzdGFjayB9ID0gbmV3IEVycm9yKCk7CiAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN0YWNrLnNwbGl0KCdcbicpLnNvbWUobCA9PiBsLmluZGV4T2YoJyhodHRwcy5qczonKSAhPT0gLTEgfHwgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7CiAgfQoKICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikgewogICAgY29uc3QgY29ubmVjdE9wdHMgPSB7CiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksCiAgICB9OwogICAgUHJvbWlzZS5yZXNvbHZlKCkKICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKQogICAgICAudGhlbihzb2NrZXQgPT4gewogICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYAogICAgICAgICAgcmV0dXJuIHNvY2tldC5hZGRSZXF1ZXN0KHJlcSwgY29ubmVjdE9wdHMpOwogICAgICAgIH0KICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0OwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGNyZWF0ZVNvY2tldCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7CiAgICAgIH0sIGNiKTsKICB9CgogIGNyZWF0ZUNvbm5lY3Rpb24oKSB7CiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0OwogICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDsKICAgIGlmICghc29ja2V0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTsKICAgIH0KICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBnZXQgZGVmYXVsdFBvcnQoKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0LCAoKSA9PiAoICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSkpOwogIH0KCiAgc2V0IGRlZmF1bHRQb3J0KHYpIHsKICAgIGlmICh0aGlzW0lOVEVSTkFMXSkgewogICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7CiAgICB9CiAgfQoKICBnZXQgcHJvdG9jb2woKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLnByb3RvY29sLCAoKSA9PiAoICh0aGlzLmlzU2VjdXJlRW5kcG9pbnQoKSA/ICdodHRwczonIDogJ2h0dHA6JykpKTsKICB9CgogIHNldCBwcm90b2NvbCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2OwogICAgfQogIH0KfQoKZnVuY3Rpb24gZGVidWckMSguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXScsIC4uLmFyZ3MpOwp9CgpmdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXQKICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuICIyMDAiCiAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSAiZGF0YSIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGUKICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLgogICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwOwogICAgY29uc3QgYnVmZmVycyA9IFtdOwoKICAgIGZ1bmN0aW9uIHJlYWQoKSB7CiAgICAgIGNvbnN0IGIgPSBzb2NrZXQucmVhZCgpOwogICAgICBpZiAoYikgb25kYXRhKGIpOwogICAgICBlbHNlIHNvY2tldC5vbmNlKCdyZWFkYWJsZScsIHJlYWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVuZCgpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVuZCcpOwogICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVycm9yKGVycikgewogICAgICBjbGVhbnVwKCk7CiAgICAgIGRlYnVnJDEoJ29uZXJyb3IgJW8nLCBlcnIpOwogICAgICByZWplY3QoZXJyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmRhdGEoYikgewogICAgICBidWZmZXJzLnB1c2goYik7CiAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7CgogICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7CiAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xyXG5cclxuJyk7CgogICAgICBpZiAoZW5kT2ZIZWFkZXJzID09PSAtMSkgewogICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nCiAgICAgICAgZGVidWckMSgnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTsKICAgICAgICByZWFkKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkLnNsaWNlKDAsIGVuZE9mSGVhZGVycykudG9TdHJpbmcoJ2FzY2lpJykuc3BsaXQoJ1xyXG4nKTsKICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTsKICAgICAgaWYgKCFmaXJzdExpbmUpIHsKICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlJykpOwogICAgICB9CiAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7CiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSArZmlyc3RMaW5lUGFydHNbMV07CiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7CiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTsKICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVyUGFydHMpIHsKICAgICAgICBpZiAoIWhlYWRlcikgY29udGludWU7CiAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7CiAgICAgICAgaWYgKGZpcnN0Q29sb24gPT09IC0xKSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogIiR7aGVhZGVyfSJgKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZSgwLCBmaXJzdENvbG9uKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnNsaWNlKGZpcnN0Q29sb24gKyAxKS50cmltU3RhcnQoKTsKICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldOwogICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7CiAgICAgICAgICBjdXJyZW50LnB1c2godmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidWckMSgnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpOwogICAgICBjbGVhbnVwKCk7CiAgICAgIHJlc29sdmUoewogICAgICAgIGNvbm5lY3Q6IHsKICAgICAgICAgIHN0YXR1c0NvZGUsCiAgICAgICAgICBzdGF0dXNUZXh0LAogICAgICAgICAgaGVhZGVycywKICAgICAgICB9LAogICAgICAgIGJ1ZmZlcmVkLAogICAgICB9KTsKICAgIH0KCiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7CiAgICBzb2NrZXQub24oJ2VuZCcsIG9uZW5kKTsKCiAgICByZWFkKCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIF9udWxsaXNoQ29hbGVzY2UkMShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9IGZ1bmN0aW9uIF9vcHRpb25hbENoYWluJDEob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KCmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHsKICBsb2dnZXIubG9nKCdbaHR0cHMtcHJveHktYWdlbnRdJywgLi4uYXJncyk7Cn0KCi8qKgogKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG8KICogdGhlIHNwZWNpZmllZCAiSFRUUChzKSBwcm94eSBzZXJ2ZXIiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLgogKgogKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlCiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciwKICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlCiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuCiAqCiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2UKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICovCmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIEFnZW50IHsKICBzdGF0aWMgX19pbml0U3RhdGljKCkge3RoaXMucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107IH0KCiAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHsKICAgIHN1cGVyKG9wdHMpOwogICAgdGhpcy5vcHRpb25zID0ge307CiAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyBVUkwocHJveHkpIDogcHJveHk7CiAgICB0aGlzLnByb3h5SGVhZGVycyA9IF9udWxsaXNoQ29hbGVzY2UkMShfb3B0aW9uYWxDaGFpbiQxKFtvcHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5oZWFkZXJzXSksICgpID0+ICgge30pKTsKICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7CgogICAgLy8gVHJpbSBvZmYgdGhlIGJyYWNrZXRzIGZyb20gSVB2NiBhZGRyZXNzZXMKICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cW3xcXSQvZywgJycpOwogICAgY29uc3QgcG9ydCA9IHRoaXMucHJveHkucG9ydCA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDsKICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7CiAgICAgIC8vIEF0dGVtcHQgdG8gbmVnb3RpYXRlIGh0dHAvMS4xIGZvciBwcm94eSBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBodHRwLzIKICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLAogICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLAogICAgICBob3N0LAogICAgICBwb3J0LAogICAgfTsKICB9CgogIC8qKgogICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhCiAgICogbmV3IEhUVFAgcmVxdWVzdC4KICAgKi8KICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykgewogICAgY29uc3QgeyBwcm94eSB9ID0gdGhpczsKCiAgICBpZiAoIW9wdHMuaG9zdCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyAiaG9zdCIgcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLgogICAgbGV0IHNvY2tldDsKICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHsKICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTsKICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7CiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHsKICAgICAgICAuLi50aGlzLmNvbm5lY3RPcHRzLAogICAgICAgIHNlcnZlcm5hbWU6IHNlcnZlcm5hbWUgJiYgbmV0LmlzSVAoc2VydmVybmFtZSkgPyB1bmRlZmluZWQgOiBzZXJ2ZXJuYW1lLAogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpOwogICAgfQoKICAgIGNvbnN0IGhlYWRlcnMgPQogICAgICB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbicgPyB0aGlzLnByb3h5SGVhZGVycygpIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9OwogICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7CiAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXHJcbmA7CgogICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkgewogICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gOwogICAgfQoKICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7CgogICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHsKICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmUgPyAnS2VlcC1BbGl2ZScgOiAnY2xvc2UnOwogICAgfQogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7CiAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cclxuYDsKICAgIH0KCiAgICBjb25zdCBwcm94eVJlc3BvbnNlUHJvbWlzZSA9IHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpOwoKICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxyXG5gKTsKCiAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTsKICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQKICAgIC8vIEB0cy1pZ25vcmUgTm90IEV2ZW50RW1pdHRlciBpbiBOb2RlIHR5cGVzCiAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7CgogICAgaWYgKGNvbm5lY3Quc3RhdHVzQ29kZSA9PT0gMjAwKSB7CiAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpOwoKICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHsKICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGUKICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uCiAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTsKICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDsKICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3QoewogICAgICAgICAgLi4ub21pdChvcHRzLCAnaG9zdCcsICdwYXRoJywgJ3BvcnQnKSwKICAgICAgICAgIHNvY2tldCwKICAgICAgICAgIHNlcnZlcm5hbWU6IG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICAvLyBTb21lIG90aGVyIHN0YXR1cyBjb2RlIHRoYXQncyBub3QgMjAwLi4uIG5lZWQgdG8gcmUtcGxheSB0aGUgSFRUUAogICAgLy8gaGVhZGVyICJkYXRhIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzCiAgICAvLyBhdHRhY2hlZCBzbyB0aGF0IHRoZSBub2RlIGNvcmUgYGh0dHBgIGNhbiBwYXJzZSBhbmQgaGFuZGxlIHRoZQogICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuCgogICAgLy8gQ2xvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCwgYW5kIGEgbmV3ICJmYWtlIiBzb2NrZXQgaXMgcmV0dXJuZWQKICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3QKICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyCiAgICAvLyBzZW5zaXRpdmUgZGF0YSkuCiAgICAvLwogICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDIKICAgIHNvY2tldC5kZXN0cm95KCk7CgogICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pOwogICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7CgogICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgInNvY2tldCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cy4KICAgIHJlcS5vbmNlKCdzb2NrZXQnLCAocykgPT4gewogICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTsKICAgICAgLy8gUmVwbGF5IHRoZSAiYnVmZmVyZWQiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdAogICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvcgogICAgICAvLyB0aGUgdXNlci4KICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTsKICAgICAgcy5wdXNoKG51bGwpOwogICAgfSk7CgogICAgcmV0dXJuIGZha2VTb2NrZXQ7CiAgfQp9IEh0dHBzUHJveHlBZ2VudC5fX2luaXRTdGF0aWMoKTsKCmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHsKICBzb2NrZXQucmVzdW1lKCk7Cn0KCmZ1bmN0aW9uIG9taXQoCiAgb2JqLAogIC4uLmtleXMKKQoKIHsKICBjb25zdCByZXQgPSB7fQoKOwogIGxldCBrZXk7CiAgZm9yIChrZXkgaW4gb2JqKSB7CiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkgewogICAgICByZXRba2V5XSA9IG9ialtrZXldOwogICAgfQogIH0KICByZXR1cm4gcmV0Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0KLy8gRXN0aW1hdGVkIG1heGltdW0gc2l6ZSBmb3IgcmVhc29uYWJsZSBzdGFuZGFsb25lIGV2ZW50CmNvbnN0IEdaSVBfVEhSRVNIT0xEID0gMTAyNCAqIDMyOwoKLyoqCiAqIEdldHMgYSBzdHJlYW0gZnJvbSBhIFVpbnQ4QXJyYXkgb3Igc3RyaW5nCiAqIFJlYWRhYmxlLmZyb20gaXMgaWRlYWwgYnV0IHdhcyBhZGRlZCBpbiBub2RlLmpzIHYxMi4zLjAgYW5kIHYxMC4xNy4wCiAqLwpmdW5jdGlvbiBzdHJlYW1Gcm9tQm9keShib2R5KSB7CiAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7CiAgICByZWFkKCkgewogICAgICB0aGlzLnB1c2goYm9keSk7CiAgICAgIHRoaXMucHVzaChudWxsKTsKICAgIH0sCiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgVHJhbnNwb3J0IHRoYXQgdXNlcyBuYXRpdmUgdGhlIG5hdGl2ZSAnaHR0cCcgYW5kICdodHRwcycgbW9kdWxlcyB0byBzZW5kIGV2ZW50cyB0byBTZW50cnkuCiAqLwpmdW5jdGlvbiBtYWtlTm9kZVRyYW5zcG9ydChvcHRpb25zKSB7CiAgbGV0IHVybFNlZ21lbnRzOwoKICB0cnkgewogICAgdXJsU2VnbWVudHMgPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAnW0BzZW50cnkvbm9kZV06IEludmFsaWQgZHNuIG9yIHR1bm5lbCBvcHRpb24sIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cy4gVGhlIHR1bm5lbCBvcHRpb24gbXVzdCBiZSBhIGZ1bGwgVVJMIHdoZW4gdXNlZC4nLAogICAgICApOwogICAgfSk7CiAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkpOwogIH0KCiAgY29uc3QgaXNIdHRwcyA9IHVybFNlZ21lbnRzLnByb3RvY29sID09PSAnaHR0cHM6JzsKCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHAgPT4gYG9wdGlvbnMucHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHBzID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwc19wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eWAKICBjb25zdCBwcm94eSA9IGFwcGx5Tm9Qcm94eU9wdGlvbigKICAgIHVybFNlZ21lbnRzLAogICAgb3B0aW9ucy5wcm94eSB8fCAoaXNIdHRwcyA/IHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5IDogdW5kZWZpbmVkKSB8fCBwcm9jZXNzLmVudi5odHRwX3Byb3h5LAogICk7CgogIGNvbnN0IG5hdGl2ZUh0dHBNb2R1bGUgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwOwogIGNvbnN0IGtlZXBBbGl2ZSA9IG9wdGlvbnMua2VlcEFsaXZlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMua2VlcEFsaXZlOwoKICAvLyBUT0RPKHY3KTogRXZhbHVhdGUgaWYgd2UgY2FuIHNldCBrZWVwQWxpdmUgdG8gdHJ1ZS4gVGhpcyB3b3VsZCBpbnZvbHZlIHRlc3RpbmcgZm9yIG1lbW9yeSBsZWFrcyBpbiBvbGRlciBub2RlCiAgLy8gdmVyc2lvbnMoPj0gOCkgYXMgdGhleSBoYWQgbWVtb3J5IGxlYWtzIHdoZW4gdXNpbmcgaXQ6ICMyNTU1CiAgY29uc3QgYWdlbnQgPSBwcm94eQogICAgPyAobmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSkgKQogICAgOiBuZXcgbmF0aXZlSHR0cE1vZHVsZS5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0czogMzAsIHRpbWVvdXQ6IDIwMDAgfSk7CgogIGNvbnN0IHJlcXVlc3RFeGVjdXRvciA9IGNyZWF0ZVJlcXVlc3RFeGVjdXRvcihvcHRpb25zLCBfbnVsbGlzaENvYWxlc2NlKG9wdGlvbnMuaHR0cE1vZHVsZSwgKCkgPT4gKCBuYXRpdmVIdHRwTW9kdWxlKSksIGFnZW50KTsKICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsIHJlcXVlc3RFeGVjdXRvcik7Cn0KCi8qKgogKiBIb25vcnMgdGhlIGBub19wcm94eWAgZW52IHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdG8gYWxsb3cgZm9yIGhvc3RzIGV4Y2x1c2lvbi4KICoKICogQHBhcmFtIHRyYW5zcG9ydFVybCBUaGUgVVJMIHRoZSB0cmFuc3BvcnQgaW50ZW5kcyB0byBzZW5kIGV2ZW50cyB0by4KICogQHBhcmFtIHByb3h5IFRoZSBjbGllbnQgY29uZmlndXJlZCBwcm94eS4KICogQHJldHVybnMgQSBwcm94eSB0aGUgdHJhbnNwb3J0IHNob3VsZCB1c2UuCiAqLwpmdW5jdGlvbiBhcHBseU5vUHJveHlPcHRpb24odHJhbnNwb3J0VXJsU2VnbWVudHMsIHByb3h5KSB7CiAgY29uc3QgeyBub19wcm94eSB9ID0gcHJvY2Vzcy5lbnY7CgogIGNvbnN0IHVybElzRXhlbXB0RnJvbVByb3h5ID0KICAgIG5vX3Byb3h5ICYmCiAgICBub19wcm94eQogICAgICAuc3BsaXQoJywnKQogICAgICAuc29tZSgKICAgICAgICBleGVtcHRpb24gPT4gdHJhbnNwb3J0VXJsU2VnbWVudHMuaG9zdC5lbmRzV2l0aChleGVtcHRpb24pIHx8IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3RuYW1lLmVuZHNXaXRoKGV4ZW1wdGlvbiksCiAgICAgICk7CgogIGlmICh1cmxJc0V4ZW1wdEZyb21Qcm94eSkgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9IGVsc2UgewogICAgcmV0dXJuIHByb3h5OwogIH0KfQoKLyoqCiAqIENyZWF0ZXMgYSBSZXF1ZXN0RXhlY3V0b3IgdG8gYmUgdXNlZCB3aXRoIGBjcmVhdGVUcmFuc3BvcnRgLgogKi8KZnVuY3Rpb24gY3JlYXRlUmVxdWVzdEV4ZWN1dG9yKAogIG9wdGlvbnMsCiAgaHR0cE1vZHVsZSwKICBhZ2VudCwKKSB7CiAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUsIHBvcnQsIHByb3RvY29sLCBzZWFyY2ggfSA9IG5ldyBVUkwob3B0aW9ucy51cmwpOwogIHJldHVybiBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgYm9keSA9IHN0cmVhbUZyb21Cb2R5KHJlcXVlc3QuYm9keSk7CgogICAgICBjb25zdCBoZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMgfTsKCiAgICAgIGlmIChyZXF1ZXN0LmJvZHkubGVuZ3RoID4gR1pJUF9USFJFU0hPTEQpIHsKICAgICAgICBoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPSAnZ3ppcCc7CiAgICAgICAgYm9keSA9IGJvZHkucGlwZShjcmVhdGVHemlwKCkpOwogICAgICB9CgogICAgICBjb25zdCByZXEgPSBodHRwTW9kdWxlLnJlcXVlc3QoCiAgICAgICAgewogICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICBhZ2VudCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgICBob3N0bmFtZSwKICAgICAgICAgIHBhdGg6IGAke3BhdGhuYW1lfSR7c2VhcmNofWAsCiAgICAgICAgICBwb3J0LAogICAgICAgICAgcHJvdG9jb2wsCiAgICAgICAgICBjYTogb3B0aW9ucy5jYUNlcnRzLAogICAgICAgIH0sCiAgICAgICAgcmVzID0+IHsKICAgICAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTsKCiAgICAgICAgICAvLyAiS2V5LXZhbHVlIHBhaXJzIG9mIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzLiBIZWFkZXIgbmFtZXMgYXJlIGxvd2VyLWNhc2VkLiIKICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzCiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgKCkgPT4gKCBudWxsKSk7CiAgICAgICAgICBjb25zdCByYXRlTGltaXRzSGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXSwgKCkgPT4gKCBudWxsKSk7CgogICAgICAgICAgcmVzb2x2ZSh7CiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmV0cnlBZnRlckhlYWRlciwKICAgICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiBBcnJheS5pc0FycmF5KHJhdGVMaW1pdHNIZWFkZXIpID8gcmF0ZUxpbWl0c0hlYWRlclswXSA6IHJhdGVMaW1pdHNIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwoKICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7CiAgICAgIGJvZHkucGlwZShyZXEpOwogICAgfSk7CiAgfTsKfQoKZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KY29uc3Qgb3B0aW9ucyA9IHdvcmtlckRhdGE7CmxldCBzZXNzaW9uOwpsZXQgaGFzU2VudEFuckV2ZW50ID0gZmFsc2U7CgpmdW5jdGlvbiBsb2cobXNnKSB7CiAgaWYgKG9wdGlvbnMuZGVidWcpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICBjb25zb2xlLmxvZyhgW0FOUiBXb3JrZXJdICR7bXNnfWApOwogIH0KfQoKY29uc3QgdXJsID0gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aChvcHRpb25zLmRzbik7CmNvbnN0IHRyYW5zcG9ydCA9IG1ha2VOb2RlVHJhbnNwb3J0KHsKICB1cmwsCiAgcmVjb3JkRHJvcHBlZEV2ZW50OiAoKSA9PiB7CiAgICAvLwogIH0sCn0pOwoKYXN5bmMgZnVuY3Rpb24gc2VuZEFibm9ybWFsU2Vzc2lvbigpIHsKICAvLyBvZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHNlc3Npb24gcGFzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLCBzZW5kIGl0IGFzIGFibm9ybWFsCiAgaWYgKHNlc3Npb24pIHsKICAgIGxvZygnU2VuZGluZyBhYm5vcm1hbCBzZXNzaW9uJyk7CiAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHsgc3RhdHVzOiAnYWJub3JtYWwnLCBhYm5vcm1hbF9tZWNoYW5pc206ICdhbnJfZm9yZWdyb3VuZCcgfSk7CgogICAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVTZXNzaW9uRW52ZWxvcGUoc2Vzc2lvbiwgb3B0aW9ucy5kc24sIG9wdGlvbnMuc2RrTWV0YWRhdGEpOwogICAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogICAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogICAgYXdhaXQgdHJhbnNwb3J0LnNlbmQoZW52ZWxvcGUpOwoKICAgIHRyeSB7CiAgICAgIC8vIE5vdGlmeSB0aGUgbWFpbiBwcm9jZXNzIHRoYXQgdGhlIHNlc3Npb24gaGFzIGVuZGVkIHNvIHRoZSBzZXNzaW9uIGNhbiBiZSBjbGVhcmVkIGZyb20gdGhlIHNjb3BlCiAgICAgIF9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5wb3N0TWVzc2FnZSwgJ2NhbGwnLCBfMyA9PiBfMygnc2Vzc2lvbi1lbmRlZCcpXSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vIGlnbm9yZQogICAgfQogIH0KfQoKbG9nKCdTdGFydGVkJyk7CgpmdW5jdGlvbiBwcmVwYXJlU3RhY2tGcmFtZXMoc3RhY2tGcmFtZXMpIHsKICBpZiAoIXN0YWNrRnJhbWVzKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgLy8gU3RyaXAgU2VudHJ5IGZyYW1lcyBhbmQgcmV2ZXJzZSB0aGUgc3RhY2sgZnJhbWVzIHNvIHRoZXkgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyCiAgY29uc3Qgc3RyaXBwZWRGcmFtZXMgPSBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2Uoc3RhY2tGcmFtZXMpOwoKICAvLyBJZiB3ZSBoYXZlIGFuIGFwcCByb290IHBhdGgsIHJld3JpdGUgdGhlIGZpbGVuYW1lcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgYXBwIHJvb3QKICBpZiAob3B0aW9ucy5hcHBSb290UGF0aCkgewogICAgZm9yIChjb25zdCBmcmFtZSBvZiBzdHJpcHBlZEZyYW1lcykgewogICAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGZyYW1lLmZpbGVuYW1lID0gbm9ybWFsaXplVXJsVG9CYXNlKGZyYW1lLmZpbGVuYW1lLCBvcHRpb25zLmFwcFJvb3RQYXRoKTsKICAgIH0KICB9CgogIHJldHVybiBzdHJpcHBlZEZyYW1lczsKfQoKZnVuY3Rpb24gYXBwbHlTY29wZVRvRXZlbnQoZXZlbnQsIHNjb3BlKSB7CiAgYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBzY29wZSk7CgogIGlmICghX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzQgPT4gXzQuY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF81ID0+IF81LnRyYWNlXSkpIHsKICAgIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBwYXJlbnRTcGFuSWQgfSA9IHNjb3BlLnByb3BhZ2F0aW9uQ29udGV4dDsKICAgIGV2ZW50LmNvbnRleHRzID0gewogICAgICB0cmFjZTogewogICAgICAgIHRyYWNlX2lkOiB0cmFjZUlkLAogICAgICAgIHNwYW5faWQ6IHNwYW5JZCwKICAgICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLAogICAgICB9LAogICAgICAuLi5ldmVudC5jb250ZXh0cywKICAgIH07CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBzZW5kQW5yRXZlbnQoZnJhbWVzLCBzY29wZSkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogb3B0aW9ucy5jb250ZXh0cywKICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSwKICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LAogICAgZGlzdDogb3B0aW9ucy5kaXN0LAogICAgcGxhdGZvcm06ICdub2RlJywKICAgIGxldmVsOiAnZXJyb3InLAogICAgZXhjZXB0aW9uOiB7CiAgICAgIHZhbHVlczogWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICdBcHBsaWNhdGlvbk5vdFJlc3BvbmRpbmcnLAogICAgICAgICAgdmFsdWU6IGBBcHBsaWNhdGlvbiBOb3QgUmVzcG9uZGluZyBmb3IgYXQgbGVhc3QgJHtvcHRpb25zLmFuclRocmVzaG9sZH0gbXNgLAogICAgICAgICAgc3RhY2t0cmFjZTogeyBmcmFtZXM6IHByZXBhcmVTdGFja0ZyYW1lcyhmcmFtZXMpIH0sCiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFVJIGRvZXNuJ3Qgc2F5ICdDcmFzaGVkIGluJyBmb3IgdGhlIHN0YWNrIHRyYWNlCiAgICAgICAgICBtZWNoYW5pc206IHsgdHlwZTogJ0FOUicgfSwKICAgICAgICB9LAogICAgICBdLAogICAgfSwKICAgIHRhZ3M6IG9wdGlvbnMuc3RhdGljVGFncywKICB9OwoKICBpZiAoc2NvcGUpIHsKICAgIGFwcGx5U2NvcGVUb0V2ZW50KGV2ZW50LCBzY29wZSk7CiAgfQoKICBjb25zdCBlbnZlbG9wZSA9IGNyZWF0ZUV2ZW50RW52ZWxvcGUoZXZlbnQsIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAvLyBMb2cgdGhlIGVudmVsb3BlIHRvIGFpZCBpbiB0ZXN0aW5nCiAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKICBhd2FpdCB0cmFuc3BvcnQuZmx1c2goMjAwMCk7CgogIC8vIERlbGF5IGZvciA1IHNlY29uZHMgc28gdGhhdCBzdGRpbyBjYW4gZmx1c2ggaW4gdGhlIG1haW4gZXZlbnQgbG9vcCBldmVyIHJlc3RhcnRzLgogIC8vIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBsb2dnaW5nL2RlYnVnZ2luZyBpc3N1ZXMuCiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBwcm9jZXNzLmV4aXQoMCk7CiAgfSwgNTAwMCk7Cn0KCmxldCBkZWJ1Z2dlclBhdXNlOwoKaWYgKG9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UpIHsKICBsb2coJ0Nvbm5lY3RpbmcgdG8gZGVidWdnZXInKTsKCiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCkgOwogIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICBsb2coJ0Nvbm5lY3RlZCB0byBkZWJ1Z2dlcicpOwoKICAvLyBDb2xsZWN0IHNjcmlwdElkIC0+IHVybCBtYXAgc28gd2UgY2FuIGxvb2sgdXAgdGhlIGZpbGVuYW1lcyBsYXRlcgogIGNvbnN0IHNjcmlwdHMgPSBuZXcgTWFwKCk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnNjcmlwdFBhcnNlZCcsIGV2ZW50ID0+IHsKICAgIHNjcmlwdHMuc2V0KGV2ZW50LnBhcmFtcy5zY3JpcHRJZCwgZXZlbnQucGFyYW1zLnVybCk7CiAgfSk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIGV2ZW50ID0+IHsKICAgIGlmIChldmVudC5wYXJhbXMucmVhc29uICE9PSAnb3RoZXInKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2coJ0RlYnVnZ2VyIHBhdXNlZCcpOwoKICAgICAgLy8gY29weSB0aGUgZnJhbWVzCiAgICAgIGNvbnN0IGNhbGxGcmFtZXMgPSBbLi4uZXZlbnQucGFyYW1zLmNhbGxGcmFtZXNdOwoKICAgICAgY29uc3QgZ2V0TW9kdWxlTmFtZSA9IG9wdGlvbnMuYXBwUm9vdFBhdGggPyBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUob3B0aW9ucy5hcHBSb290UGF0aCkgOiAoKSA9PiB1bmRlZmluZWQ7CiAgICAgIGNvbnN0IHN0YWNrRnJhbWVzID0gY2FsbEZyYW1lcy5tYXAoZnJhbWUgPT4KICAgICAgICBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoZnJhbWUsIHNjcmlwdHMuZ2V0KGZyYW1lLmxvY2F0aW9uLnNjcmlwdElkKSwgZ2V0TW9kdWxlTmFtZSksCiAgICAgICk7CgogICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBpbiB0aGUgY3VycmVudGx5IHBhdXNlZCBjb250ZXh0CiAgICAgIHNlc3Npb24ucG9zdCgKICAgICAgICAnUnVudGltZS5ldmFsdWF0ZScsCiAgICAgICAgewogICAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2UgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50IHNjb3BlCiAgICAgICAgICBleHByZXNzaW9uOiAnZ2xvYmFsLl9fU0VOVFJZX0dFVF9TQ09QRVNfXygpOycsCiAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIHRoZSBkZWJ1Z2dlciBpZiB0aGlzIGNhdXNlcyBhbiBlcnJvcgogICAgICAgICAgc2lsZW50OiB0cnVlLAogICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSByZXN1bHQgdG8ganNvbiBvdGhlcndpc2Ugb25seSBwcmltaXRpdmVzIGFyZSBzdXBwb3J0ZWQKICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsCiAgICAgICAgfSwKICAgICAgICAoZXJyLCBwYXJhbSkgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBsb2coYEVycm9yIGV4ZWN1dGluZyBzY3JpcHQ6ICcke2Vyci5tZXNzYWdlfSdgKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBzY29wZXMgPSBwYXJhbSAmJiBwYXJhbS5yZXN1bHQgPyAocGFyYW0ucmVzdWx0LnZhbHVlICkgOiB1bmRlZmluZWQ7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIHNlbmRBbnJFdmVudChzdGFja0ZyYW1lcywgc2NvcGVzKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQuJyk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLnJlc3VtZScpOwogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLmRpc2FibGUnKTsKICAgICAgdGhyb3cgZTsKICAgIH0KICB9KTsKCiAgZGVidWdnZXJQYXVzZSA9ICgpID0+IHsKICAgIHRyeSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZW5hYmxlJywgKCkgPT4gewogICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucGF1c2UnKTsKICAgICAgfSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vCiAgICB9CiAgfTsKfQoKZnVuY3Rpb24gY3JlYXRlSHJUaW1lcigpIHsKICAvLyBUT0RPICh2OCk6IFdlIGNhbiB1c2UgcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgYWZ0ZXIgd2UgZHJvcCBub2RlIHY4CiAgbGV0IGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKCiAgcmV0dXJuIHsKICAgIGdldFRpbWVNczogKCkgPT4gewogICAgICBjb25zdCBbc2Vjb25kcywgbmFub1NlY29uZHNdID0gcHJvY2Vzcy5ocnRpbWUobGFzdFBvbGwpOwogICAgICByZXR1cm4gTWF0aC5mbG9vcihzZWNvbmRzICogMWUzICsgbmFub1NlY29uZHMgLyAxZTYpOwogICAgfSwKICAgIHJlc2V0OiAoKSA9PiB7CiAgICAgIGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKICAgIH0sCiAgfTsKfQoKZnVuY3Rpb24gd2F0Y2hkb2dUaW1lb3V0KCkgewogIGxvZygnV2F0Y2hkb2cgdGltZW91dCcpOwoKICBpZiAoZGVidWdnZXJQYXVzZSkgewogICAgbG9nKCdQYXVzaW5nIGRlYnVnZ2VyIHRvIGNhcHR1cmUgc3RhY2sgdHJhY2UnKTsKICAgIGRlYnVnZ2VyUGF1c2UoKTsKICB9IGVsc2UgewogICAgbG9nKCdDYXB0dXJpbmcgZXZlbnQgd2l0aG91dCBhIHN0YWNrIHRyYWNlJyk7CiAgICBzZW5kQW5yRXZlbnQoKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQgb24gd2F0Y2hkb2cgdGltZW91dC4nKTsKICAgIH0pOwogIH0KfQoKY29uc3QgeyBwb2xsIH0gPSB3YXRjaGRvZ1RpbWVyKGNyZWF0ZUhyVGltZXIsIG9wdGlvbnMucG9sbEludGVydmFsLCBvcHRpb25zLmFuclRocmVzaG9sZCwgd2F0Y2hkb2dUaW1lb3V0KTsKCl9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi5vbiwgJ2NhbGwnLCBfNyA9PiBfNygnbWVzc2FnZScsIChtc2cpID0+IHsKICBpZiAobXNnLnNlc3Npb24pIHsKICAgIHNlc3Npb24gPSBtYWtlU2Vzc2lvbihtc2cuc2Vzc2lvbik7CiAgfQoKICBwb2xsKCk7Cn0pXSk7"});var rm=Y((wL1,BL1)=>{var{_optionalChain:O14,_optionalChainDelete:ZL1}=V0();Object.defineProperty(wL1,"__esModule",{value:!0});var m14=B1("url"),$A=V4(),nm=V0(),$01=UF(),l14=GL1(),b14=50,h14=5000;function u01(I,...d){nm.logger.log(`[ANR] ${I}`,...d)}function j14(){return nm.GLOBAL_OBJ}function k14(){let I=$A.getGlobalScope().getScopeData();return $A.mergeScopeData(I,$A.getIsolationScope().getScopeData()),$A.mergeScopeData(I,$A.getCurrentScope().getScopeData()),I.attachments=[],I.eventProcessors=[],I}function x14(){return nm.dynamicRequire(BL1,"worker_threads")}async function c14(I){let d={message:"ANR"},G={};for(let Z of I.getEventProcessors()){if(d===null)break;d=await Z(d,G)}return O14([d,"optionalAccess",(Z)=>Z.contexts])||{}}var CL1="Anr",p14=(I={})=>{if($01.NODE_VERSION.major<16||$01.NODE_VERSION.major===16&&$01.NODE_VERSION.minor<17)throw new Error("ANR detection requires Node 16.17.0 or later");let d,G,Z=j14();return Z.__SENTRY_GET_SCOPES__=k14,{name:CL1,setupOnce(){},startWorker:()=>{if(d)return;if(G)d=n14(G,I)},stopWorker:()=>{if(d)d.then((C)=>{C(),d=void 0})},setup(C){G=C,setImmediate(()=>this.startWorker())}}},WL1=$A.defineIntegration(p14),i14=$A.convertIntegrationFnToClass(CL1,WL1);async function n14(I,d){let G=I.getDsn();if(!G)return()=>{};let Z=await c14(I);ZL1([Z,"access",(X)=>X.app,"optionalAccess",(X)=>delete X.app_memory]),ZL1([Z,"access",(X)=>X.device,"optionalAccess",(X)=>delete X.free_memory]);let C=I.getOptions(),W=I.getSdkMetadata()||{};if(W.sdk)W.sdk.integrations=C.integrations.map((X)=>X.name);let w={debug:nm.logger.isEnabled(),dsn:G,environment:C.environment||"production",release:C.release,dist:C.dist,sdkMetadata:W,appRootPath:d.appRootPath,pollInterval:d.pollInterval||b14,anrThreshold:d.anrThreshold||h14,captureStackTrace:!!d.captureStackTrace,staticTags:d.staticTags||{},contexts:Z};if(w.captureStackTrace){let X=B1("inspector");if(!X.url())X.open(0)}let{Worker:B}=x14(),A=new B(new m14.URL(`data:application/javascript;base64,${l14.base64WorkerScript}`),{workerData:w});process.on("exit",()=>{A.terminate()});let V=setInterval(()=>{try{let X=$A.getCurrentScope().getSession(),_=X?{...X,toJSON:void 0}:void 0;A.postMessage({session:_})}catch(X){}},w.pollInterval);return V.unref(),A.on("message",(X)=>{if(X==="session-ended")u01("ANR event sent from ANR worker. Clearing session in this thread."),$A.getCurrentScope().setSession(void 0)}),A.once("error",(X)=>{clearInterval(V),u01("ANR worker error",X)}),A.once("exit",(X)=>{clearInterval(V),u01("ANR worker exit",X)}),A.unref(),()=>{A.terminate(),clearInterval(V)}}wL1.Anr=i14;wL1.anrIntegration=WL1});var VL1=Y((AL1)=>{Object.defineProperty(AL1,"__esModule",{value:!0});var s14=V4(),o14=rm();function e14(I){let d=s14.getClient();return new o14.Anr(I).setup(d),Promise.resolve()}AL1.enableAnrDetection=e14});var T01=Y((_L1)=>{var{_optionalChain:XL1}=V0();Object.defineProperty(_L1,"__esModule",{value:!0});var PN=V4(),YL1=V0();function I04(I={}){return function({path:d,type:G,next:Z,rawInput:C}){let W=XL1([PN.getClient,"call",(V)=>V(),"optionalAccess",(V)=>V.getOptions,"call",(V)=>V()]),w=PN.getCurrentScope().getTransaction();if(w){w.updateName(`trpc/${d}`),w.setAttribute(PN.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),w.op="rpc.server";let V={procedure_type:G};if(I.attachRpcInput!==void 0?I.attachRpcInput:XL1([W,"optionalAccess",(X)=>X.sendDefaultPii]))V.input=YL1.normalize(C);w.setContext("trpc",V)}function B(V){if(!V.ok)PN.captureException(V.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}let A;try{A=Z()}catch(V){throw PN.captureException(V,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),V}if(YL1.isThenable(A))Promise.resolve(A).then((V)=>{B(V)},(V)=>{PN.captureException(V,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})});else B(A);return A}}_L1.trpcMiddleware=I04});var FL1=Y((HL1)=>{Object.defineProperty(HL1,"__esModule",{value:!0});var DL1=V0();function G04(I,d){return DL1.extractRequestData(I,{include:d})}function Z04(I,d,G={}){return DL1.addRequestDataToEvent(I,d,{include:G})}HL1.extractRequestData=G04;HL1.parseRequest=Z04});var KL1=Y((JL1)=>{var{_optionalChain:am}=V0();Object.defineProperty(JL1,"__esModule",{value:!0});var w8=V4(),$N=V0(),w04=AE(),sm=y01(),B04=T01(),gL1=FL1();function A04(){return function I(d,G,Z){let C=am([w8.getClient,"call",(X)=>X(),"optionalAccess",(X)=>X.getOptions,"call",(X)=>X()]);if(!C||C.instrumenter!=="sentry"||am([d,"access",(X)=>X.method,"optionalAccess",(X)=>X.toUpperCase,"call",(X)=>X()])==="OPTIONS"||am([d,"access",(X)=>X.method,"optionalAccess",(X)=>X.toUpperCase,"call",(X)=>X()])==="HEAD")return Z();let W=d.headers&&$N.isString(d.headers["sentry-trace"])?d.headers["sentry-trace"]:void 0,w=am([d,"access",(X)=>X.headers,"optionalAccess",(X)=>X.baggage]);if(!w8.hasTracingEnabled(C))return Z();let[B,A]=$N.extractPathForTransaction(d,{path:!0,method:!0}),V=w8.continueTrace({sentryTrace:W,baggage:w},(X)=>w8.startTransaction({name:B,op:"http.server",origin:"auto.http.node.tracingHandler",...X,data:{[w8.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:A},metadata:{...X.metadata,request:d}},{request:$N.extractRequestData(d)}));w8.getCurrentScope().setSpan(V),G.__sentry_transaction=V,G.once("finish",()=>{setImmediate(()=>{$N.addRequestDataToTransaction(V,d),w8.setHttpStatus(V,G.statusCode),V.end()})}),Z()}}function V04(I={}){let d;if("include"in I)d={include:I.include};else{let{ip:G,request:Z,transaction:C,user:W}=I;if(G||Z||C||W)d={include:$N.dropUndefinedKeys({ip:G,request:Z,transaction:C,user:W})}}return d}function X04(I){let d=V04(I),G=w8.getClient();if(G&&sm.isAutoSessionTrackingEnabled(G)){G.initSessionFlusher();let Z=w8.getCurrentScope();if(Z.getSession())Z.setSession()}return function Z(C,W,w){if(I&&I.flushTimeout&&I.flushTimeout>0){let B=W.end;W.end=function(A,V,X){w8.flush(I.flushTimeout).then(()=>{B.call(this,A,V,X)}).then(null,(_)=>{w04.DEBUG_BUILD&&$N.logger.error(_),B.call(this,A,V,X)})}}w8.runWithAsyncContext(()=>{let B=w8.getCurrentScope();B.setSDKProcessingMetadata({request:C,requestDataOptionsFromExpressHandler:d});let A=w8.getClient();if(sm.isAutoSessionTrackingEnabled(A))B.setRequestSession({status:"ok"});W.once("finish",()=>{let V=w8.getClient();if(sm.isAutoSessionTrackingEnabled(V))setImmediate(()=>{if(V&&V._captureRequestSession)V._captureRequestSession()})}),w()})}}function Y04(I){let d=I.status||I.statusCode||I.status_code||I.output&&I.output.statusCode;return d?parseInt(d,10):500}function _04(I){return Y04(I)>=500}function D04(I){return function d(G,Z,C,W){if((I&&I.shouldHandleError||_04)(G)){w8.withScope((B)=>{B.setSDKProcessingMetadata({request:Z});let A=C.__sentry_transaction;if(A&&!w8.getActiveSpan())B.setSpan(A);let V=w8.getClient();if(V&&sm.isAutoSessionTrackingEnabled(V)){if(V._sessionFlusher!==void 0){let F=B.getRequestSession();if(F&&F.status!==void 0)F.status="crashed"}}let X=w8.captureException(G,{mechanism:{type:"middleware",handled:!1}});C.sentry=X,W(G)});return}W(G)}}var H04=B04.trpcMiddleware;JL1.extractRequestData=gL1.extractRequestData;JL1.parseRequest=gL1.parseRequest;JL1.errorHandler=D04;JL1.requestHandler=X04;JL1.tracingHandler=A04;JL1.trpcMiddleware=H04});var O01=Y((UL1)=>{Object.defineProperty(UL1,"__esModule",{value:!0});var rI=V4(),zL1=V0();function NL1(I){return I&&I.statusCode!==void 0}function Q04(I){return I&&I.error!==void 0}function f04(I){rI.captureException(I,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}var QL1={name:"SentryHapiErrorPlugin",version:rI.SDK_VERSION,register:async function(I){I.events.on("request",(G,Z)=>{let C=rI.getActiveTransaction();if(Q04(Z))f04(Z.error);if(C)C.setStatus("internal_error"),C.end()})}},fL1={name:"SentryHapiTracingPlugin",version:rI.SDK_VERSION,register:async function(I){let d=I;d.ext("onPreHandler",(G,Z)=>{let C=rI.continueTrace({sentryTrace:G.headers["sentry-trace"]||void 0,baggage:G.headers.baggage||void 0},(W)=>{return rI.startTransaction({...W,op:"hapi.request",name:G.route.path,description:`${G.route.method} ${G.path}`})});return rI.getCurrentScope().setSpan(C),Z.continue}),d.ext("onPreResponse",(G,Z)=>{let C=rI.getActiveTransaction();if(G.response&&NL1(G.response)&&C){let W=G.response;W.header("sentry-trace",rI.spanToTraceHeader(C));let w=zL1.dynamicSamplingContextToSentryBaggageHeader(rI.getDynamicSamplingContextFromSpan(C));if(w)W.header("baggage",w)}return Z.continue}),d.ext("onPostHandler",(G,Z)=>{let C=rI.getActiveTransaction();if(C){if(G.response&&NL1(G.response))rI.setHttpStatus(C,G.response.statusCode);C.end()}return Z.continue})}},qL1="Hapi",q04=(I={})=>{let d=I.server;return{name:qL1,setupOnce(){if(!d)return;zL1.fill(d,"start",(G)=>{return async function(){return await this.register(fL1),await this.register(QL1),G.apply(this)}})}}},RL1=rI.defineIntegration(q04),R04=rI.convertIntegrationFnToClass(qL1,RL1);UL1.Hapi=R04;UL1.hapiErrorPlugin=QL1;UL1.hapiIntegration=RL1;UL1.hapiTracingPlugin=fL1});var EL1=Y((vL1)=>{Object.defineProperty(vL1,"__esModule",{value:!0});var S04=Sm(),L04=$m(),y04=hm(),P04=km(),$04=mm(),u04=Pm(),T04=Lm(),O04=V4(),m04=Om(),l04=pm(),b04=xm(),h04=rm(),j04=O01();vL1.Console=S04.Console;vL1.Http=L04.Http;vL1.OnUncaughtException=y04.OnUncaughtException;vL1.OnUnhandledRejection=P04.OnUnhandledRejection;vL1.Modules=$04.Modules;vL1.ContextLines=u04.ContextLines;vL1.Context=T04.Context;vL1.RequestData=O04.RequestData;vL1.LocalVariables=m04.LocalVariables;vL1.Undici=l04.Undici;vL1.Spotlight=b04.Spotlight;vL1.Anr=h04.Anr;vL1.Hapi=j04.Hapi});var SL1=Y((ML1)=>{Object.defineProperty(ML1,"__esModule",{value:!0});var yF=H01();ML1.Apollo=yF.Apollo;ML1.Express=yF.Express;ML1.GraphQL=yF.GraphQL;ML1.Mongo=yF.Mongo;ML1.Mysql=yF.Mysql;ML1.Postgres=yF.Postgres;ML1.Prisma=yF.Prisma});var $L1=Y((PL1)=>{Object.defineProperty(PL1,"__esModule",{value:!0});var PF=V4(),$F=V0(),LL1="CaptureConsole",A24=(I={})=>{let d=I.levels||$F.CONSOLE_LEVELS;return{name:LL1,setupOnce(){},setup(G){if(!("console"in $F.GLOBAL_OBJ))return;$F.addConsoleInstrumentationHandler(({args:Z,level:C})=>{if(PF.getClient()!==G||!d.includes(C))return;X24(Z,C)})}}},yL1=PF.defineIntegration(A24),V24=PF.convertIntegrationFnToClass(LL1,yL1);function X24(I,d){let G={level:$F.severityLevelFromString(d),extra:{arguments:I}};PF.withScope((Z)=>{if(Z.addEventProcessor((w)=>{return w.logger="console",$F.addExceptionMechanism(w,{handled:!1,type:"console"}),w}),d==="assert"&&I[0]===!1){let w=`Assertion failed: ${$F.safeJoin(I.slice(1)," ")||"console.assert"}`;Z.setExtra("arguments",I.slice(1)),PF.captureMessage(w,G);return}let C=I.find((w)=>w instanceof Error);if(d==="error"&&C){PF.captureException(C,G);return}let W=$F.safeJoin(I," ");PF.captureMessage(W,G)})}PL1.CaptureConsole=V24;PL1.captureConsoleIntegration=yL1});var lL1=Y((mL1)=>{Object.defineProperty(mL1,"__esModule",{value:!0});var uL1=V4(),D24=V0(),TL1="Debug",H24=(I={})=>{let d={debugger:!1,stringify:!1,...I};return{name:TL1,setupOnce(){},setup(G){if(!G.on)return;G.on("beforeSendEvent",(Z,C)=>{if(d.debugger)debugger;D24.consoleSandbox(()=>{if(d.stringify){if(console.log(JSON.stringify(Z,null,2)),C&&Object.keys(C).length)console.log(JSON.stringify(C,null,2))}else if(console.log(Z),C&&Object.keys(C).length)console.log(C)})})}}},OL1=uL1.defineIntegration(H24),F24=uL1.convertIntegrationFnToClass(TL1,OL1);mL1.Debug=F24;mL1.debugIntegration=OL1});var XE=Y((bL1)=>{Object.defineProperty(bL1,"__esModule",{value:!0});var K24=typeof __SENTRY_DEBUG__==="undefined"||__SENTRY_DEBUG__;bL1.DEBUG_BUILD=K24});var aL1=Y((rL1)=>{Object.defineProperty(rL1,"__esModule",{value:!0});var kL1=V4(),z24=V0(),Q24=XE(),xL1="Dedupe",f24=()=>{let I;return{name:xL1,setupOnce(){},processEvent(d){if(d.type)return d;try{if(pL1(d,I))return Q24.DEBUG_BUILD&&z24.logger.warn("Event dropped due to being a duplicate of previously captured event."),null}catch(G){}return I=d}}},cL1=kL1.defineIntegration(f24),q24=kL1.convertIntegrationFnToClass(xL1,cL1);function pL1(I,d){if(!d)return!1;if(R24(I,d))return!0;if(U24(I,d))return!0;return!1}function R24(I,d){let G=I.message,Z=d.message;if(!G&&!Z)return!1;if(G&&!Z||!G&&Z)return!1;if(G!==Z)return!1;if(!nL1(I,d))return!1;if(!iL1(I,d))return!1;return!0}function U24(I,d){let G=hL1(d),Z=hL1(I);if(!G||!Z)return!1;if(G.type!==Z.type||G.value!==Z.value)return!1;if(!nL1(I,d))return!1;if(!iL1(I,d))return!1;return!0}function iL1(I,d){let G=jL1(I),Z=jL1(d);if(!G&&!Z)return!0;if(G&&!Z||!G&&Z)return!1;if(G=G,Z=Z,Z.length!==G.length)return!1;for(let C=0;C{Object.defineProperty(tL1,"__esModule",{value:!0});var sL1=V4(),oX=V0(),S24=XE(),oL1="ExtraErrorData",L24=(I={})=>{let d=I.depth||3,G=I.captureErrorCause||!1;return{name:oL1,setupOnce(){},processEvent(Z,C){return P24(Z,C,d,G)}}},eL1=sL1.defineIntegration(L24),y24=sL1.convertIntegrationFnToClass(oL1,eL1);function P24(I,d={},G,Z){if(!d.originalException||!oX.isError(d.originalException))return I;let C=d.originalException.name||d.originalException.constructor.name,W=$24(d.originalException,Z);if(W){let w={...I.contexts},B=oX.normalize(W,G);if(oX.isPlainObject(B))oX.addNonEnumerableProperty(B,"__sentry_skip_normalization__",!0),w[C]=B;return{...I,contexts:w}}return I}function $24(I,d){try{let G=["name","message","stack","line","column","fileName","lineNumber","columnNumber","toJSON"],Z={};for(let C of Object.keys(I)){if(G.indexOf(C)!==-1)continue;let W=I[C];Z[C]=oX.isError(W)?W.toString():W}if(d&&I.cause!==void 0)Z.cause=oX.isError(I.cause)?I.cause.toString():I.cause;if(typeof I.toJSON==="function"){let C=I.toJSON();for(let W of Object.keys(C)){let w=C[W];Z[W]=oX.isError(w)?w.toString():w}}return Z}catch(G){S24.DEBUG_BUILD&&oX.logger.error("Unable to extract extra data from the Error object:",G)}return null}tL1.ExtraErrorData=y24;tL1.extraErrorDataIntegration=eL1});var Gy1=Y((dy1,m01)=>{/*! + localForage -- Offline Storage, Improved + Version 1.10.0 + https://localforage.github.io/localForage + (c) 2013-2017 Mozilla, Apache License 2.0 +*/(function(I){if(typeof dy1==="object"&&typeof m01!=="undefined")m01.exports=I();else if(typeof define==="function"&&define.amd)define([],I);else{var d;if(typeof window!=="undefined")d=window;else if(typeof global!=="undefined")d=global;else if(typeof self!=="undefined")d=self;else d=this;d.localforage=I()}})(function(){var I,d,G;return function Z(C,W,w){function B(X,_){if(!W[X]){if(!C[X]){var F=B1;if(!_&&F)return F(X,!0);if(A)return A(X,!0);var g=new Error("Cannot find module '"+X+"'");throw g.code="MODULE_NOT_FOUND",g}var J=W[X]={exports:{}};C[X][0].call(J.exports,function(K){var Q=C[X][1][K];return B(Q?Q:K)},J,J.exports,Z,C,W,w)}return W[X].exports}var A=B1;for(var V=0;V=43)}}).catch(function(){return!1})}function c(l){if(typeof S==="boolean")return F.resolve(S);return V1(l).then(function(_1){return S=_1,S})}function c1(l){var _1=P[l.name],I1={};if(I1.promise=new F(function(v1,y1){I1.resolve=v1,I1.reject=y1}),_1.deferredOperations.push(I1),!_1.dbReady)_1.dbReady=I1.promise;else _1.dbReady=_1.dbReady.then(function(){return I1.promise})}function o1(l){var _1=P[l.name],I1=_1.deferredOperations.pop();if(I1)return I1.resolve(),I1.promise}function a1(l,_1){var I1=P[l.name],v1=I1.deferredOperations.pop();if(v1)return v1.reject(_1),v1.promise}function f1(l,_1){return new F(function(I1,v1){if(P[l.name]=P[l.name]||e(),l.db)if(_1)c1(l),l.db.close();else return I1(l.db);var y1=[l.name];if(_1)y1.push(l.version);var E1=V.open.apply(V,y1);if(_1)E1.onupgradeneeded=function(Z0){var Q0=E1.result;try{if(Q0.createObjectStore(l.storeName),Z0.oldVersion<=1)Q0.createObjectStore(E)}catch(N0){if(N0.name==="ConstraintError")console.warn('The database "'+l.name+'" has been upgraded from version '+Z0.oldVersion+" to version "+Z0.newVersion+', but the storage "'+l.storeName+'" already exists.');else throw N0}};E1.onerror=function(Z0){Z0.preventDefault(),v1(E1.error)},E1.onsuccess=function(){var Z0=E1.result;Z0.onversionchange=function(Q0){Q0.target.close()},I1(Z0),o1(l)}})}function r(l){return f1(l,!1)}function A1(l){return f1(l,!0)}function m1(l,_1){if(!l.db)return!0;var I1=!l.db.objectStoreNames.contains(l.storeName),v1=l.versionl.db.version;if(v1){if(l.version!==_1)console.warn('The database "'+l.name+`" can't be downgraded from version `+l.db.version+" to version "+l.version+".");l.version=l.db.version}if(y1||I1){if(I1){var E1=l.db.version+1;if(E1>l.version)l.version=E1}return!0}return!1}function T1(l){return new F(function(_1,I1){var v1=new FileReader;v1.onerror=I1,v1.onloadend=function(y1){var E1=btoa(y1.target.result||"");_1({__local_forage_encoded_blob:!0,data:E1,type:l.type})},v1.readAsBinaryString(l)})}function e1(l){var _1=T(atob(l.data));return _([_1],{type:l.type})}function F0(l){return l&&l.__local_forage_encoded_blob}function P0(l){var _1=this,I1=_1._initReady().then(function(){var v1=P[_1._dbInfo.name];if(v1&&v1.dbReady)return v1.dbReady});return J(I1,l,l),I1}function B0(l){c1(l);var _1=P[l.name],I1=_1.forages;for(var v1=0;v10&&(!l.db||E1.name==="InvalidStateError"||E1.name==="NotFoundError"))return F.resolve().then(function(){if(!l.db||E1.name==="NotFoundError"&&!l.db.objectStoreNames.contains(l.storeName)&&l.version<=l.db.version){if(l.db)l.version=l.db.version+1;return A1(l)}}).then(function(){return B0(l).then(function(){a0(l,_1,I1,v1-1)})}).catch(I1);I1(E1)}}function e(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function G0(l){var _1=this,I1={db:null};if(l)for(var v1 in l)I1[v1]=l[v1];var y1=P[I1.name];if(!y1)y1=e(),P[I1.name]=y1;if(y1.forages.push(_1),!_1._initReady)_1._initReady=_1.ready,_1.ready=P0;var E1=[];function Z0(){return F.resolve()}for(var Q0=0;Q0>4,h0[y1++]=(Z0&15)<<4|Q0>>2,h0[y1++]=(Q0&3)<<6|N0&63;return $0}function _5(l){var _1=new Uint8Array(l),I1="",v1;for(v1=0;v1<_1.length;v1+=3)I1+=K1[_1[v1]>>2],I1+=K1[(_1[v1]&3)<<4|_1[v1+1]>>4],I1+=K1[(_1[v1+1]&15)<<2|_1[v1+2]>>6],I1+=K1[_1[v1+2]&63];if(_1.length%3===2)I1=I1.substring(0,I1.length-1)+"=";else if(_1.length%3===1)I1=I1.substring(0,I1.length-2)+"==";return I1}function D5(l,_1){var I1="";if(l)I1=B4.call(l);if(l&&(I1==="[object ArrayBuffer]"||l.buffer&&B4.call(l.buffer)==="[object ArrayBuffer]")){var v1,y1=j;if(l instanceof ArrayBuffer)v1=l,y1+=U1;else if(v1=l.buffer,I1==="[object Int8Array]")y1+=D0;else if(I1==="[object Uint8Array]")y1+=O0;else if(I1==="[object Uint8ClampedArray]")y1+=k0;else if(I1==="[object Int16Array]")y1+=i0;else if(I1==="[object Uint16Array]")y1+=P2;else if(I1==="[object Int32Array]")y1+=s0;else if(I1==="[object Uint32Array]")y1+=a5;else if(I1==="[object Float32Array]")y1+=n0;else if(I1==="[object Float64Array]")y1+=B2;else _1(new Error("Failed to get type for BinaryArray"));_1(y1+_5(v1))}else if(I1==="[object Blob]"){var E1=new FileReader;E1.onload=function(){var Z0=R1+l.type+"~"+_5(this.result);_1(j+L1+Z0)},E1.readAsArrayBuffer(l)}else try{_1(JSON.stringify(l))}catch(Z0){console.error("Couldn't convert value into a JSON string: ",l),_1(null,Z0)}}function tZ(l){if(l.substring(0,W1)!==j)return JSON.parse(l);var _1=l.substring(A2),I1=l.substring(W1,A2),v1;if(I1===L1&&h1.test(_1)){var y1=_1.match(h1);v1=y1[1],_1=_1.substring(y1[0].length)}var E1=A4(_1);switch(I1){case U1:return E1;case L1:return _([E1],{type:v1});case D0:return new Int8Array(E1);case O0:return new Uint8Array(E1);case k0:return new Uint8ClampedArray(E1);case i0:return new Int16Array(E1);case P2:return new Uint16Array(E1);case s0:return new Int32Array(E1);case a5:return new Uint32Array(E1);case n0:return new Float32Array(E1);case B2:return new Float64Array(E1);default:throw new Error("Unkown type: "+I1)}}var T6={serialize:D5,deserialize:tZ,stringToBuffer:A4,bufferToString:_5};function pB(l,_1,I1,v1){l.executeSql("CREATE TABLE IF NOT EXISTS "+_1.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],I1,v1)}function iB(l){var _1=this,I1={db:null};if(l)for(var v1 in l)I1[v1]=typeof l[v1]!=="string"?l[v1].toString():l[v1];var y1=new F(function(E1,Z0){try{I1.db=openDatabase(I1.name,String(I1.version),I1.description,I1.size)}catch(Q0){return Z0(Q0)}I1.db.transaction(function(Q0){pB(Q0,I1,function(){_1._dbInfo=I1,E1()},function(N0,$0){Z0($0)})},Z0)});return I1.serializer=T6,y1}function X3(l,_1,I1,v1,y1,E1){l.executeSql(I1,v1,y1,function(Z0,Q0){if(Q0.code===Q0.SYNTAX_ERR)Z0.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[_1.storeName],function(N0,$0){if(!$0.rows.length)pB(N0,_1,function(){N0.executeSql(I1,v1,y1,E1)},E1);else E1(N0,Q0)},E1);else E1(Z0,Q0)},E1)}function Nd(l,_1){var I1=this;l=K(l);var v1=new F(function(y1,E1){I1.ready().then(function(){var Z0=I1._dbInfo;Z0.db.transaction(function(Q0){X3(Q0,Z0,"SELECT * FROM "+Z0.storeName+" WHERE key = ? LIMIT 1",[l],function(N0,$0){var h0=$0.rows.length?$0.rows.item(0).value:null;if(h0)h0=Z0.serializer.deserialize(h0);y1(h0)},function(N0,$0){E1($0)})})}).catch(E1)});return g(v1,_1),v1}function IC(l,_1){var I1=this,v1=new F(function(y1,E1){I1.ready().then(function(){var Z0=I1._dbInfo;Z0.db.transaction(function(Q0){X3(Q0,Z0,"SELECT * FROM "+Z0.storeName,[],function(N0,$0){var h0=$0.rows,g2=h0.length;for(var F4=0;F40){Z0(Y3.apply(y1,[l,N0,I1,v1-1]));return}Q0(F4)}})})}).catch(Q0)});return g(E1,I1),E1}function zd(l,_1,I1){return Y3.apply(this,[l,_1,I1,1])}function Qd(l,_1){var I1=this;l=K(l);var v1=new F(function(y1,E1){I1.ready().then(function(){var Z0=I1._dbInfo;Z0.db.transaction(function(Q0){X3(Q0,Z0,"DELETE FROM "+Z0.storeName+" WHERE key = ?",[l],function(){y1()},function(N0,$0){E1($0)})})}).catch(E1)});return g(v1,_1),v1}function QG(l){var _1=this,I1=new F(function(v1,y1){_1.ready().then(function(){var E1=_1._dbInfo;E1.db.transaction(function(Z0){X3(Z0,E1,"DELETE FROM "+E1.storeName,[],function(){v1()},function(Q0,N0){y1(N0)})})}).catch(y1)});return g(I1,l),I1}function fG(l){var _1=this,I1=new F(function(v1,y1){_1.ready().then(function(){var E1=_1._dbInfo;E1.db.transaction(function(Z0){X3(Z0,E1,"SELECT COUNT(key) as c FROM "+E1.storeName,[],function(Q0,N0){var $0=N0.rows.item(0).c;v1($0)},function(Q0,N0){y1(N0)})})}).catch(y1)});return g(I1,l),I1}function X7(l,_1){var I1=this,v1=new F(function(y1,E1){I1.ready().then(function(){var Z0=I1._dbInfo;Z0.db.transaction(function(Q0){X3(Q0,Z0,"SELECT key FROM "+Z0.storeName+" WHERE id = ? LIMIT 1",[l+1],function(N0,$0){var h0=$0.rows.length?$0.rows.item(0).key:null;y1(h0)},function(N0,$0){E1($0)})})}).catch(E1)});return g(v1,_1),v1}function vI(l){var _1=this,I1=new F(function(v1,y1){_1.ready().then(function(){var E1=_1._dbInfo;E1.db.transaction(function(Z0){X3(Z0,E1,"SELECT key FROM "+E1.storeName,[],function(Q0,N0){var $0=[];for(var h0=0;h0 '__WebKitDatabaseInfoTable__'",[],function(y1,E1){var Z0=[];for(var Q0=0;Q00}function $W(l){var _1=this,I1={};if(l)for(var v1 in l)I1[v1]=l[v1];if(I1.keyPrefix=qd(l,_1._defaultConfig),!PW())return F.reject();return _1._dbInfo=I1,I1.serializer=T6,F.resolve()}function v8(l){var _1=this,I1=_1.ready().then(function(){var v1=_1._dbInfo.keyPrefix;for(var y1=localStorage.length-1;y1>=0;y1--){var E1=localStorage.key(y1);if(E1.indexOf(v1)===0)localStorage.removeItem(E1)}});return g(I1,l),I1}function qG(l,_1){var I1=this;l=K(l);var v1=I1.ready().then(function(){var y1=I1._dbInfo,E1=localStorage.getItem(y1.keyPrefix+l);if(E1)E1=y1.serializer.deserialize(E1);return E1});return g(v1,_1),v1}function aB(l,_1){var I1=this,v1=I1.ready().then(function(){var y1=I1._dbInfo,E1=y1.keyPrefix,Z0=E1.length,Q0=localStorage.length,N0=1;for(var $0=0;$0=0;Z0--){var Q0=localStorage.key(Z0);if(Q0.indexOf(E1)===0)localStorage.removeItem(Q0)}});return g(y1,_1),y1}var OW={_driver:"localStorageWrapper",_initStorage:$W,_support:nB(),iterate:aB,getItem:qG,setItem:Ud,removeItem:TW,clear:v8,length:sB,key:uW,keys:Rd,dropInstance:_7},d1=function l(_1,I1){return _1===I1||typeof _1==="number"&&typeof I1==="number"&&isNaN(_1)&&isNaN(I1)},o=function l(_1,I1){var v1=_1.length,y1=0;while(y1{Object.defineProperty(Zy1,"__esModule",{value:!0});var Jw=V0(),O24=Gy1(),uF=XE(),eX=Jw.GLOBAL_OBJ;class YE{static __initStatic(){this.id="Offline"}constructor(I={}){this.name=YE.id,this.maxStoredEvents=I.maxStoredEvents||30,this.offlineEventStore=O24.createInstance({name:"sentry/offlineEventStore"})}setupOnce(I,d){if(this.hub=d(),"addEventListener"in eX)eX.addEventListener("online",()=>{this._sendEvents().catch(()=>{uF.DEBUG_BUILD&&Jw.logger.warn("could not send cached events")})});let G=(Z)=>{if(this.hub&&this.hub.getIntegration(YE)){if("navigator"in eX&&"onLine"in eX.navigator&&!eX.navigator.onLine)return uF.DEBUG_BUILD&&Jw.logger.log("Event dropped due to being a offline - caching instead"),this._cacheEvent(Z).then((C)=>this._enforceMaxEvents()).catch((C)=>{uF.DEBUG_BUILD&&Jw.logger.warn("could not cache event while offline")}),null}return Z};if(G.id=this.name,I(G),"navigator"in eX&&"onLine"in eX.navigator&&eX.navigator.onLine)this._sendEvents().catch(()=>{uF.DEBUG_BUILD&&Jw.logger.warn("could not send cached events")})}async _cacheEvent(I){return this.offlineEventStore.setItem(Jw.uuid4(),Jw.normalize(I))}async _enforceMaxEvents(){let I=[];return this.offlineEventStore.iterate((d,G,Z)=>{I.push({cacheKey:G,event:d})}).then(()=>this._purgeEvents(I.sort((d,G)=>(G.event.timestamp||0)-(d.event.timestamp||0)).slice(this.maxStoredEventsd.cacheKey))).catch((d)=>{uF.DEBUG_BUILD&&Jw.logger.warn("could not enforce max events")})}async _purgeEvent(I){return this.offlineEventStore.removeItem(I)}async _purgeEvents(I){return Promise.all(I.map((d)=>this._purgeEvent(d))).then()}async _sendEvents(){return this.offlineEventStore.iterate((I,d,G)=>{if(this.hub)this.hub.captureEvent(I),this._purgeEvent(d).catch((Z)=>{uF.DEBUG_BUILD&&Jw.logger.warn("could not purge event from cache")});else uF.DEBUG_BUILD&&Jw.logger.warn("no hub found - could not send cached event")})}}YE.__initStatic();Zy1.Offline=YE});var Xy1=Y((Vy1)=>{Object.defineProperty(Vy1,"__esModule",{value:!0});var _E=V4(),wy1=V0(),l24=wy1.GLOBAL_OBJ,By1="ReportingObserver",Wy1=new WeakMap,b24=(I={})=>{let d=I.types||["crash","deprecation","intervention"];function G(Z){if(!Wy1.has(_E.getClient()))return;for(let C of Z)_E.withScope((W)=>{W.setExtra("url",C.url);let w=`ReportingObserver [${C.type}]`,B="No details available";if(C.body){let A={};for(let V in C.body)A[V]=C.body[V];if(W.setExtra("body",A),C.type==="crash"){let V=C.body;B=[V.crashId||"",V.reason||""].join(" ").trim()||B}else B=C.body.message||B}_E.captureMessage(`${w}: ${B}`)})}return{name:By1,setupOnce(){if(!wy1.supportsReportingObserver())return;new l24.ReportingObserver(G,{buffered:!0,types:d}).observe()},setup(Z){Wy1.set(Z,!0)}}},Ay1=_E.defineIntegration(b24),h24=_E.convertIntegrationFnToClass(By1,Ay1);Vy1.ReportingObserver=h24;Vy1.reportingObserverIntegration=Ay1});var gy1=Y((Fy1)=>{Object.defineProperty(Fy1,"__esModule",{value:!0});var _y1=V4(),Yy1=V0(),Dy1="RewriteFrames",x24=(I={})=>{let d=I.root,G=I.prefix||"app:///",Z=I.iteratee||((w)=>{if(!w.filename)return w;let B=/^[a-zA-Z]:\\/.test(w.filename)||w.filename.includes("\\")&&!w.filename.includes("/"),A=/^\//.test(w.filename);if(B||A){let V=B?w.filename.replace(/^[a-zA-Z]:/,"").replace(/\\/g,"/"):w.filename,X=d?Yy1.relative(d,V):Yy1.basename(V);w.filename=`${G}${X}`}return w});function C(w){try{return{...w,exception:{...w.exception,values:w.exception.values.map((B)=>({...B,...B.stacktrace&&{stacktrace:W(B.stacktrace)}}))}}}catch(B){return w}}function W(w){return{...w,frames:w&&w.frames&&w.frames.map((B)=>Z(B))}}return{name:Dy1,setupOnce(){},processEvent(w){let B=w;if(w.exception&&Array.isArray(w.exception.values))B=C(B);return B}}},Hy1=_y1.defineIntegration(x24),c24=_y1.convertIntegrationFnToClass(Dy1,Hy1);Fy1.RewriteFrames=c24;Fy1.rewriteFramesIntegration=Hy1});var Qy1=Y((zy1)=>{Object.defineProperty(zy1,"__esModule",{value:!0});var Jy1=V4(),Ky1="SessionTiming",n24=()=>{let I=Date.now();return{name:Ky1,setupOnce(){},processEvent(d){let G=Date.now();return{...d,extra:{...d.extra,["session:start"]:I,["session:duration"]:G-I,["session:end"]:G}}}}},Ny1=Jy1.defineIntegration(n24),r24=Jy1.convertIntegrationFnToClass(Ky1,Ny1);zy1.SessionTiming=r24;zy1.sessionTimingIntegration=Ny1});var Ry1=Y((qy1)=>{Object.defineProperty(qy1,"__esModule",{value:!0});var o24=V4(),fy1="Transaction",e24=()=>{return{name:fy1,setupOnce(){},processEvent(I){let d=I44(I);for(let G=d.length-1;G>=0;G--){let Z=d[G];if(Z.in_app===!0){I.transaction=d44(Z);break}}return I}}},t24=o24.convertIntegrationFnToClass(fy1,e24);function I44(I){let d=I.exception&&I.exception.values&&I.exception.values[0];return d&&d.stacktrace&&d.stacktrace.frames||[]}function d44(I){return I.module||I.function?`${I.module||"?"}/${I.function||"?"}`:""}qy1.Transaction=t24});var Py1=Y((yy1)=>{Object.defineProperty(yy1,"__esModule",{value:!0});var uA=V4(),Kw=V0(),om=XE(),Uy1="HttpClient",Z44=(I={})=>{let d={failedRequestStatusCodes:[[500,599]],failedRequestTargets:[/.*/],...I};return{name:Uy1,setupOnce(){},setup(G){_44(G,d),D44(G,d)}}},vy1=uA.defineIntegration(Z44),C44=uA.convertIntegrationFnToClass(Uy1,vy1);function W44(I,d,G,Z){if(My1(I,G.status,G.url)){let C=H44(d,Z),W,w,B,A;if(Ly1())[{headers:W,cookies:B},{headers:w,cookies:A}]=[{cookieHeader:"Cookie",obj:C},{cookieHeader:"Set-Cookie",obj:G}].map(({cookieHeader:X,obj:_})=>{let F=A44(_.headers),g;try{let J=F[X]||F[X.toLowerCase()]||void 0;if(J)g=Ey1(J)}catch(J){om.DEBUG_BUILD&&Kw.logger.log(`Could not extract cookies from header ${X}`)}return{headers:F,cookies:g}});let V=Sy1({url:C.url,method:C.method,status:G.status,requestHeaders:W,responseHeaders:w,requestCookies:B,responseCookies:A});uA.captureEvent(V)}}function w44(I,d,G,Z){if(My1(I,d.status,d.responseURL)){let C,W,w;if(Ly1()){try{let A=d.getResponseHeader("Set-Cookie")||d.getResponseHeader("set-cookie")||void 0;if(A)W=Ey1(A)}catch(A){om.DEBUG_BUILD&&Kw.logger.log("Could not extract cookies from response headers")}try{w=V44(d)}catch(A){om.DEBUG_BUILD&&Kw.logger.log("Could not extract headers from response")}C=Z}let B=Sy1({url:d.responseURL,method:G,status:d.status,requestHeaders:C,responseHeaders:w,responseCookies:W});uA.captureEvent(B)}}function B44(I){if(I){let d=I["Content-Length"]||I["content-length"];if(d)return parseInt(d,10)}return}function Ey1(I){return I.split("; ").reduce((d,G)=>{let[Z,C]=G.split("=");return d[Z]=C,d},{})}function A44(I){let d={};return I.forEach((G,Z)=>{d[Z]=G}),d}function V44(I){let d=I.getAllResponseHeaders();if(!d)return{};return d.split(`\r +`).reduce((G,Z)=>{let[C,W]=Z.split(": ");return G[C]=W,G},{})}function X44(I,d){return I.some((G)=>{if(typeof G==="string")return d.includes(G);return G.test(d)})}function Y44(I,d){return I.some((G)=>{if(typeof G==="number")return G===d;return d>=G[0]&&d<=G[1]})}function _44(I,d){if(!Kw.supportsNativeFetch())return;Kw.addFetchInstrumentationHandler((G)=>{if(uA.getClient()!==I)return;let{response:Z,args:C}=G,[W,w]=C;if(!Z)return;W44(d,W,Z,w)})}function D44(I,d){if(!("XMLHttpRequest"in Kw.GLOBAL_OBJ))return;Kw.addXhrInstrumentationHandler((G)=>{if(uA.getClient()!==I)return;let Z=G.xhr,C=Z[Kw.SENTRY_XHR_DATA_KEY];if(!C)return;let{method:W,request_headers:w}=C;try{w44(d,Z,W,w)}catch(B){om.DEBUG_BUILD&&Kw.logger.warn("Error while extracting response event form XHR response",B)}})}function My1(I,d,G){return Y44(I.failedRequestStatusCodes,d)&&X44(I.failedRequestTargets,G)&&!uA.isSentryRequestUrl(G,uA.getClient())}function Sy1(I){let d=`HTTP Client Error with status code: ${I.status}`,G={message:d,exception:{values:[{type:"Error",value:d}]},request:{url:I.url,method:I.method,headers:I.requestHeaders,cookies:I.requestCookies},contexts:{response:{status_code:I.status,headers:I.responseHeaders,cookies:I.responseCookies,body_size:B44(I.responseHeaders)}}};return Kw.addExceptionMechanism(G,{type:"http.client",handled:!1}),G}function H44(I,d){if(!d&&I instanceof Request)return I;if(I instanceof Request&&I.bodyUsed)return I;return new Request(I,d)}function Ly1(){let I=uA.getClient();return I?Boolean(I.getOptions().sendDefaultPii):!1}yy1.HttpClient=C44;yy1.httpClientIntegration=vy1});var ly1=Y((my1)=>{Object.defineProperty(my1,"__esModule",{value:!0});var $y1=V4(),b01=V0(),l01=b01.GLOBAL_OBJ,J44=7,uy1="ContextLines",K44=(I={})=>{let d=I.frameContextLines!=null?I.frameContextLines:J44;return{name:uy1,setupOnce(){},processEvent(G){return z44(G,d)}}},Ty1=$y1.defineIntegration(K44),N44=$y1.convertIntegrationFnToClass(uy1,Ty1);function z44(I,d){let G=l01.document,Z=l01.location&&b01.stripUrlQueryAndFragment(l01.location.href);if(!G||!Z)return I;let C=I.exception&&I.exception.values;if(!C||!C.length)return I;let W=G.documentElement.innerHTML;if(!W)return I;let w=["","",...W.split(` +`),""];return C.forEach((B)=>{let A=B.stacktrace;if(A&&A.frames)A.frames=A.frames.map((V)=>Oy1(V,w,Z,d))}),I}function Oy1(I,d,G,Z){if(I.filename!==G||!I.lineno||!d.length)return I;return b01.addContextToFrame(d,I,Z),I}my1.ContextLines=N44;my1.applySourceContextToFrame=Oy1;my1.contextLinesIntegration=Ty1});var ay1=Y((ry1)=>{Object.defineProperty(ry1,"__esModule",{value:!0});var by1=$L1(),hy1=lL1(),jy1=aL1(),ky1=Iy1(),R44=Cy1(),xy1=Xy1(),cy1=gy1(),py1=Qy1(),U44=Ry1(),iy1=Py1(),ny1=ly1();ry1.CaptureConsole=by1.CaptureConsole;ry1.captureConsoleIntegration=by1.captureConsoleIntegration;ry1.Debug=hy1.Debug;ry1.debugIntegration=hy1.debugIntegration;ry1.Dedupe=jy1.Dedupe;ry1.dedupeIntegration=jy1.dedupeIntegration;ry1.ExtraErrorData=ky1.ExtraErrorData;ry1.extraErrorDataIntegration=ky1.extraErrorDataIntegration;ry1.Offline=R44.Offline;ry1.ReportingObserver=xy1.ReportingObserver;ry1.reportingObserverIntegration=xy1.reportingObserverIntegration;ry1.RewriteFrames=cy1.RewriteFrames;ry1.rewriteFramesIntegration=cy1.rewriteFramesIntegration;ry1.SessionTiming=py1.SessionTiming;ry1.sessionTimingIntegration=py1.sessionTimingIntegration;ry1.Transaction=U44.Transaction;ry1.HttpClient=iy1.HttpClient;ry1.httpClientIntegration=iy1.httpClientIntegration;ry1.ContextLines=ny1.ContextLines;ry1.contextLinesIntegration=ny1.contextLinesIntegration});var em=Y((sy1)=>{Object.defineProperty(sy1,"__esModule",{value:!0});var i44=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function n44(I){return i44.reduce((d,[G,Z])=>d.replace(new RegExp(G,"gi"),Z),I)}sy1.replaceCronNames=n44});var dP1=Y((IP1)=>{Object.defineProperty(IP1,"__esModule",{value:!0});var oy1=V4(),ey1=em(),ty1="Automatic instrumentation of CronJob only supports crontab string";function a44(I,d){let G=!1;return new Proxy(I,{construct(Z,C){let[W,w,B,A,V,...X]=C;if(typeof W!=="string")throw new Error(ty1);if(G)throw new Error(`A job named '${d}' has already been scheduled`);G=!0;let _=ey1.replaceCronNames(W);function F(g,J){return oy1.withMonitor(d,()=>{return w(g,J)},{schedule:{type:"crontab",value:_},timezone:V||void 0})}return new Z(W,F,B,A,V,...X)},get(Z,C){if(C==="from")return(W)=>{let{cronTime:w,onTick:B,timeZone:A}=W;if(typeof w!=="string")throw new Error(ty1);if(G)throw new Error(`A job named '${d}' has already been scheduled`);G=!0;let V=ey1.replaceCronNames(w);return W.onTick=(X,_)=>{return oy1.withMonitor(d,()=>{return B(X,_)},{schedule:{type:"crontab",value:V},timezone:A||void 0})},Z.from(W)};else return Z[C]}})}IP1.instrumentCron=a44});var CP1=Y((ZP1)=>{var{_optionalChain:GP1}=V0();Object.defineProperty(ZP1,"__esModule",{value:!0});var o44=V4(),e44=em();function t44(I){return new Proxy(I,{get(d,G){if(G==="schedule"&&d.schedule)return new Proxy(d.schedule,{apply(Z,C,W){let[w,,B]=W;if(!GP1([B,"optionalAccess",(A)=>A.name]))throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return o44.withMonitor(B.name,()=>{return Z.apply(C,W)},{schedule:{type:"crontab",value:e44.replaceCronNames(w)},timezone:GP1([B,"optionalAccess",(A)=>A.timezone])})}});else return d[G]}})}ZP1.instrumentNodeCron=t44});var wP1=Y((WP1)=>{Object.defineProperty(WP1,"__esModule",{value:!0});var d54=V4(),G54=em();function Z54(I){return new Proxy(I,{get(d,G){if(G==="scheduleJob")return new Proxy(d.scheduleJob,{apply(Z,C,W){let[w,B]=W;if(typeof w!=="string"||typeof B!=="string")throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");let A=w,V=B;return d54.withMonitor(A,()=>{return Z.apply(C,W)},{schedule:{type:"crontab",value:G54.replaceCronNames(V)}})}});return d[G]}})}WP1.instrumentNodeSchedule=Z54});var _P1=Y((YP1)=>{Object.defineProperty(YP1,"__esModule",{value:!0});var Q2=V4(),W54=_M1(),w54=F01(),B54=K01(),DE=y01(),h01=V0(),A54=dL1(),BP1=L01(),V54=VL1(),X54=KL1(),Y54=EL1(),_54=SL1(),tX=ay1(),D54=Sm(),H54=hm(),F54=km(),g54=mm(),J54=Pm(),K54=Lm(),N54=Om(),z54=xm(),Q54=rm(),AP1=O01(),VP1=pm(),XP1=$m(),f54=T01(),q54=dP1(),R54=CP1(),U54=wP1(),v54=BP1.createGetModuleFromFilename(),E54={...Q2.Integrations,...Y54,..._54},M54={instrumentCron:q54.instrumentCron,instrumentNodeCron:R54.instrumentNodeCron,instrumentNodeSchedule:U54.instrumentNodeSchedule};YP1.Hub=Q2.Hub;YP1.SDK_VERSION=Q2.SDK_VERSION;YP1.SEMANTIC_ATTRIBUTE_SENTRY_OP=Q2.SEMANTIC_ATTRIBUTE_SENTRY_OP;YP1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=Q2.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN;YP1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=Q2.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE;YP1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=Q2.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE;YP1.Scope=Q2.Scope;YP1.addBreadcrumb=Q2.addBreadcrumb;YP1.addEventProcessor=Q2.addEventProcessor;YP1.addGlobalEventProcessor=Q2.addGlobalEventProcessor;YP1.addIntegration=Q2.addIntegration;YP1.captureCheckIn=Q2.captureCheckIn;YP1.captureEvent=Q2.captureEvent;YP1.captureException=Q2.captureException;YP1.captureMessage=Q2.captureMessage;YP1.captureSession=Q2.captureSession;YP1.close=Q2.close;YP1.configureScope=Q2.configureScope;YP1.continueTrace=Q2.continueTrace;YP1.createTransport=Q2.createTransport;YP1.endSession=Q2.endSession;YP1.extractTraceparentData=Q2.extractTraceparentData;YP1.flush=Q2.flush;YP1.functionToStringIntegration=Q2.functionToStringIntegration;YP1.getActiveSpan=Q2.getActiveSpan;YP1.getActiveTransaction=Q2.getActiveTransaction;YP1.getClient=Q2.getClient;YP1.getCurrentHub=Q2.getCurrentHub;YP1.getCurrentScope=Q2.getCurrentScope;YP1.getGlobalScope=Q2.getGlobalScope;YP1.getHubFromCarrier=Q2.getHubFromCarrier;YP1.getIsolationScope=Q2.getIsolationScope;YP1.getSpanStatusFromHttpCode=Q2.getSpanStatusFromHttpCode;YP1.inboundFiltersIntegration=Q2.inboundFiltersIntegration;YP1.isInitialized=Q2.isInitialized;YP1.lastEventId=Q2.lastEventId;YP1.linkedErrorsIntegration=Q2.linkedErrorsIntegration;YP1.makeMain=Q2.makeMain;YP1.metrics=Q2.metrics;YP1.parameterize=Q2.parameterize;YP1.requestDataIntegration=Q2.requestDataIntegration;YP1.runWithAsyncContext=Q2.runWithAsyncContext;YP1.setContext=Q2.setContext;YP1.setCurrentClient=Q2.setCurrentClient;YP1.setExtra=Q2.setExtra;YP1.setExtras=Q2.setExtras;YP1.setHttpStatus=Q2.setHttpStatus;YP1.setMeasurement=Q2.setMeasurement;YP1.setTag=Q2.setTag;YP1.setTags=Q2.setTags;YP1.setUser=Q2.setUser;YP1.spanStatusfromHttpCode=Q2.spanStatusfromHttpCode;YP1.startActiveSpan=Q2.startActiveSpan;YP1.startInactiveSpan=Q2.startInactiveSpan;YP1.startSession=Q2.startSession;YP1.startSpan=Q2.startSpan;YP1.startSpanManual=Q2.startSpanManual;YP1.startTransaction=Q2.startTransaction;YP1.trace=Q2.trace;YP1.withActiveSpan=Q2.withActiveSpan;YP1.withIsolationScope=Q2.withIsolationScope;YP1.withMonitor=Q2.withMonitor;YP1.withScope=Q2.withScope;YP1.autoDiscoverNodePerformanceMonitoringIntegrations=W54.autoDiscoverNodePerformanceMonitoringIntegrations;YP1.NodeClient=w54.NodeClient;YP1.makeNodeTransport=B54.makeNodeTransport;YP1.defaultIntegrations=DE.defaultIntegrations;YP1.defaultStackParser=DE.defaultStackParser;YP1.getDefaultIntegrations=DE.getDefaultIntegrations;YP1.getSentryRelease=DE.getSentryRelease;YP1.init=DE.init;YP1.DEFAULT_USER_INCLUDES=h01.DEFAULT_USER_INCLUDES;YP1.addRequestDataToEvent=h01.addRequestDataToEvent;YP1.extractRequestData=h01.extractRequestData;YP1.deepReadDirSync=A54.deepReadDirSync;YP1.createGetModuleFromFilename=BP1.createGetModuleFromFilename;YP1.enableAnrDetection=V54.enableAnrDetection;YP1.Handlers=X54;YP1.captureConsoleIntegration=tX.captureConsoleIntegration;YP1.debugIntegration=tX.debugIntegration;YP1.dedupeIntegration=tX.dedupeIntegration;YP1.extraErrorDataIntegration=tX.extraErrorDataIntegration;YP1.httpClientIntegration=tX.httpClientIntegration;YP1.reportingObserverIntegration=tX.reportingObserverIntegration;YP1.rewriteFramesIntegration=tX.rewriteFramesIntegration;YP1.sessionTimingIntegration=tX.sessionTimingIntegration;YP1.consoleIntegration=D54.consoleIntegration;YP1.onUncaughtExceptionIntegration=H54.onUncaughtExceptionIntegration;YP1.onUnhandledRejectionIntegration=F54.onUnhandledRejectionIntegration;YP1.modulesIntegration=g54.modulesIntegration;YP1.contextLinesIntegration=J54.contextLinesIntegration;YP1.nodeContextIntegration=K54.nodeContextIntegration;YP1.localVariablesIntegration=N54.localVariablesIntegration;YP1.spotlightIntegration=z54.spotlightIntegration;YP1.anrIntegration=Q54.anrIntegration;YP1.hapiErrorPlugin=AP1.hapiErrorPlugin;YP1.hapiIntegration=AP1.hapiIntegration;YP1.Undici=VP1.Undici;YP1.nativeNodeFetchintegration=VP1.nativeNodeFetchintegration;YP1.Http=XP1.Http;YP1.httpIntegration=XP1.httpIntegration;YP1.trpcMiddleware=f54.trpcMiddleware;YP1.Integrations=E54;YP1.cron=M54;YP1.getModuleFromFilename=v54});var bu1=Y((yq9,lu1)=>{lu1.exports=function I(d){return d.map(function(G){if(G&&typeof G==="object")return G.op.replace(/(.)/g,"\\$1");if(/["\s]/.test(G)&&!/'/.test(G))return"'"+G.replace(/(['\\])/g,"\\$1")+"'";if(/["'\s]/.test(G))return'"'+G.replace(/(["\\$`!])/g,"\\$1")+'"';return String(G).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")}).join(" ")}});var iu1=Y((Pq9,pu1)=>{var cu1="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",hu1=new RegExp("^"+cu1+"$"),ju1="|&;()<> \\t",xG4='"((\\\\"|[^"])*?)"',cG4="'((\\\\'|[^'])*?)'",pG4=/^#$/,ku1="'",xu1='"',o01="$",lF="",iG4=4294967296;for(e01=0;e01<4;e01++)lF+=(iG4*Math.random()).toString(16);var e01,nG4=new RegExp("^"+lF);function rG4(I,d){var G=d.lastIndex,Z=[],C;while(C=d.exec(I))if(Z.push(C),d.lastIndex===C.index)d.lastIndex+=1;return d.lastIndex=G,Z}function aG4(I,d,G){var Z=typeof I==="function"?I(G):I[G];if(typeof Z==="undefined"&&G!="")Z="";else if(typeof Z==="undefined")Z="$";if(typeof Z==="object")return d+lF+JSON.stringify(Z)+lF;return d+Z}function sG4(I,d,G){if(!G)G={};var Z=G.escape||"\\",C="(\\"+Z+`['"`+ju1+`]|[^\\s'"`+ju1+"])+",W=new RegExp(["("+cu1+")","("+C+"|"+xG4+"|"+cG4+")+"].join("|"),"g"),w=rG4(I,W);if(w.length===0)return[];if(!d)d={};var B=!1;return w.map(function(A){var V=A[0];if(!V||B)return;if(hu1.test(V))return{op:V};var X=!1,_=!1,F="",g=!1,J;function K(){J+=1;var S,P,$=V.charAt(J);if($==="{"){if(J+=1,V.charAt(J)==="}")throw new Error("Bad substitution: "+V.slice(J-2,J+1));if(S=V.indexOf("}",J),S<0)throw new Error("Bad substitution: "+V.slice(J));P=V.slice(J,S),J=S}else if(/[*@#?$!_-]/.test($))P=$,J+=1;else{var h=V.slice(J);if(S=h.match(/[^\w\d_]/),!S)P=h,J=V.length;else P=h.slice(0,S.index),J+=S.index-1}return aG4(d,"",P)}for(J=0;J{oG4.quote=bu1();oG4.parse=iu1()});var u1=Y((qZ4)=>{var NE=Symbol.for("react.element"),AZ4=Symbol.for("react.portal"),VZ4=Symbol.for("react.fragment"),XZ4=Symbol.for("react.strict_mode"),YZ4=Symbol.for("react.profiler"),_Z4=Symbol.for("react.provider"),DZ4=Symbol.for("react.context"),HZ4=Symbol.for("react.forward_ref"),FZ4=Symbol.for("react.suspense"),gZ4=Symbol.for("react.memo"),JZ4=Symbol.for("react.lazy"),tu1=Symbol.iterator;function KZ4(I){if(I===null||typeof I!=="object")return null;return I=tu1&&I[tu1]||I["@@iterator"],typeof I==="function"?I:null}var GT1={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ZT1=Object.assign,CT1={};function Bz(I,d,G){this.props=I,this.context=d,this.refs=CT1,this.updater=G||GT1}Bz.prototype.isReactComponent={};Bz.prototype.setState=function(I,d){if(typeof I!=="object"&&typeof I!=="function"&&I!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,I,d,"setState")};Bz.prototype.forceUpdate=function(I){this.updater.enqueueForceUpdate(this,I,"forceUpdate")};function WT1(){}WT1.prototype=Bz.prototype;function A21(I,d,G){this.props=I,this.context=d,this.refs=CT1,this.updater=G||GT1}var V21=A21.prototype=new WT1;V21.constructor=A21;ZT1(V21,Bz.prototype);V21.isPureReactComponent=!0;var IT1=Array.isArray,wT1=Object.prototype.hasOwnProperty,X21={current:null},BT1={key:!0,ref:!0,__self:!0,__source:!0};function AT1(I,d,G){var Z,C={},W=null,w=null;if(d!=null)for(Z in d.ref!==void 0&&(w=d.ref),d.key!==void 0&&(W=""+d.key),d)wT1.call(d,Z)&&!BT1.hasOwnProperty(Z)&&(C[Z]=d[Z]);var B=arguments.length-2;if(B===1)C.children=G;else if(1{Object.defineProperty(QT1,"__esModule",{value:!0});QT1.Log=QT1.LogLevel=void 0;var QC4=" DEBUG ",fC4=" INFO ",qC4=" WARN ",RC4=" ERROR ";function pl(I){return I.unshift("[Statsig]"),I}QT1.LogLevel={None:0,Error:1,Warn:2,Info:3,Debug:4};class bF{static info(...I){if(bF.level>=QT1.LogLevel.Info)console.info(fC4,...pl(I))}static debug(...I){if(bF.level>=QT1.LogLevel.Debug)console.debug(QC4,...pl(I))}static warn(...I){if(bF.level>=QT1.LogLevel.Warn)console.warn(qC4,...pl(I))}static error(...I){if(bF.level>=QT1.LogLevel.Error)console.error(RC4,...pl(I))}}QT1.Log=bF;bF.level=QT1.LogLevel.Warn});var hF=Y((vT1)=>{var g21,J21,K21;Object.defineProperty(vT1,"__esModule",{value:!0});vT1._getInstance=vT1._getStatsigGlobalFlag=vT1._getStatsigGlobal=void 0;var UC4=q7(),vC4=()=>{return __STATSIG__?__STATSIG__:il};vT1._getStatsigGlobal=vC4;var EC4=(I)=>{return vT1._getStatsigGlobal()[I]};vT1._getStatsigGlobalFlag=EC4;var MC4=(I)=>{let d=vT1._getStatsigGlobal();if(!I){if(d.instances&&Object.keys(d.instances).length>1)UC4.Log.warn("Call made to Statsig global instance without an SDK key but there is more than one client instance. If you are using mulitple clients, please specify the SDK key.");return d.firstInstance}return d.instances&&d.instances[I]};vT1._getInstance=MC4;var Yz="__STATSIG__",qT1=typeof window!=="undefined"?window:{},RT1=typeof global!=="undefined"?global:{},UT1=typeof globalThis!=="undefined"?globalThis:{},il=(K21=(J21=(g21=qT1[Yz])!==null&&g21!==void 0?g21:RT1[Yz])!==null&&J21!==void 0?J21:UT1[Yz])!==null&&K21!==void 0?K21:{instance:vT1._getInstance};qT1[Yz]=il;RT1[Yz]=il;UT1[Yz]=il});var rl=Y((ET1)=>{Object.defineProperty(ET1,"__esModule",{value:!0});ET1.Diagnostics=void 0;var nl=new Map,Q21="start",f21="end",LC4="statsig::diagnostics";ET1.Diagnostics={_getMarkers:(I)=>{return nl.get(I)},_markInitOverallStart:(I)=>{Dz(I,_z({},Q21,"overall"))},_markInitOverallEnd:(I,d,G)=>{Dz(I,_z({success:d,error:d?void 0:{name:"InitializeError",message:"Failed to initialize"},evaluationDetails:G},f21,"overall"))},_markInitNetworkReqStart:(I,d)=>{Dz(I,_z(d,Q21,"initialize","network_request"))},_markInitNetworkReqEnd:(I,d)=>{Dz(I,_z(d,f21,"initialize","network_request"))},_markInitProcessStart:(I)=>{Dz(I,_z({},Q21,"initialize","process"))},_markInitProcessEnd:(I,d)=>{Dz(I,_z(d,f21,"initialize","process"))},_clearMarkers:(I)=>{nl.delete(I)},_formatError(I){if(!(I&&typeof I==="object"))return;return{code:q21(I,"code"),name:q21(I,"name"),message:q21(I,"message")}},_getDiagnosticsData(I,d,G,Z){var C;return{success:(I===null||I===void 0?void 0:I.ok)===!0,statusCode:I===null||I===void 0?void 0:I.status,sdkRegion:(C=I===null||I===void 0?void 0:I.headers)===null||C===void 0?void 0:C.get("x-statsig-region"),isDelta:G.includes('"is_delta":true')===!0?!0:void 0,attempt:d,error:ET1.Diagnostics._formatError(Z)}},_enqueueDiagnosticsEvent(I,d,G,Z){let C=ET1.Diagnostics._getMarkers(G);if(C==null||C.length<=0)return-1;let W=C[C.length-1].timestamp-C[0].timestamp;ET1.Diagnostics._clearMarkers(G);let w=yC4(I,{context:"initialize",markers:C.slice(),statsigOptions:Z});return d.enqueue(w),W}};function _z(I,d,G,Z){return Object.assign({key:G,action:d,step:Z,timestamp:Date.now()},I)}function yC4(I,d){return{eventName:LC4,user:I,value:null,metadata:d,time:Date.now()}}function Dz(I,d){var G;let Z=(G=nl.get(I))!==null&&G!==void 0?G:[];Z.push(d),nl.set(I,Z)}function q21(I,d){if(d in I)return I[d];return}});var al=Y((MT1)=>{Object.defineProperty(MT1,"__esModule",{value:!0});MT1._isTypeMatch=MT1._typeOf=void 0;function PC4(I){return Array.isArray(I)?"array":typeof I}MT1._typeOf=PC4;function $C4(I,d){let G=(Z)=>Array.isArray(Z)?"array":typeof Z;return G(I)===G(d)}MT1._isTypeMatch=$C4});var Hz=Y((LT1)=>{Object.defineProperty(LT1,"__esModule",{value:!0});LT1._getSortedObject=LT1._DJB2Object=LT1._DJB2=void 0;var TC4=al(),OC4=(I)=>{let d=0;for(let G=0;G>>0)};LT1._DJB2=OC4;var mC4=(I,d)=>{return LT1._DJB2(JSON.stringify(LT1._getSortedObject(I,d)))};LT1._DJB2Object=mC4;var lC4=(I,d)=>{if(I==null)return null;let G=Object.keys(I).sort(),Z={};return G.forEach((C)=>{let W=I[C];if(d===0||TC4._typeOf(W)!=="object"){Z[C]=W;return}Z[C]=LT1._getSortedObject(W,d!=null?d-1:d)}),Z};LT1._getSortedObject=lC4});var qE=Y((uT1)=>{Object.defineProperty(uT1,"__esModule",{value:!0});uT1._getStorageKey=uT1._getUserStorageKey=void 0;var PT1=Hz();function $T1(I,d,G){var Z;if(G)return G(I,d);let C=d&&d.customIDs?d.customIDs:{},W=[`uid:${(Z=d===null||d===void 0?void 0:d.userID)!==null&&Z!==void 0?Z:""}`,`cids:${Object.keys(C).sort((w,B)=>w.localeCompare(B)).map((w)=>`${w}-${C[w]}`).join(",")}`,`k:${I}`];return PT1._DJB2(W.join("|"))}uT1._getUserStorageKey=$T1;function hC4(I,d,G){if(d)return $T1(I,d,G);return PT1._DJB2(`k:${I}`)}uT1._getStorageKey=hC4});var RE=Y((OT1)=>{Object.defineProperty(OT1,"__esModule",{value:!0});OT1.NetworkParam=OT1.NetworkDefault=OT1.Endpoint=void 0;OT1.Endpoint={_initialize:"initialize",_rgstr:"rgstr",_download_config_specs:"download_config_specs"};OT1.NetworkDefault={[OT1.Endpoint._rgstr]:"https://prodregistryv2.org/v1",[OT1.Endpoint._initialize]:"https://featureassets.org/v1",[OT1.Endpoint._download_config_specs]:"https://api.statsigcdn.com/v1"};OT1.NetworkParam={EventCount:"ec",SdkKey:"k",SdkType:"st",SdkVersion:"sv",Time:"t",SessionID:"sid",StatsigEncoded:"se",IsGzipped:"gz"}});var jF=Y((lT1)=>{Object.defineProperty(lT1,"__esModule",{value:!0});lT1._getCurrentPageUrlSafe=lT1._addDocumentEventListenerSafe=lT1._addWindowEventListenerSafe=lT1._isServerEnv=lT1._getDocumentSafe=lT1._getWindowSafe=void 0;var xC4=()=>{return typeof window!=="undefined"?window:null};lT1._getWindowSafe=xC4;var cC4=()=>{var I;let d=lT1._getWindowSafe();return(I=d===null||d===void 0?void 0:d.document)!==null&&I!==void 0?I:null};lT1._getDocumentSafe=cC4;var pC4=()=>{if(lT1._getDocumentSafe()!==null)return!1;let I=typeof process!=="undefined"&&process.versions!=null&&process.versions.node!=null;return typeof EdgeRuntime==="string"||I};lT1._isServerEnv=pC4;var iC4=(I,d)=>{let G=lT1._getWindowSafe();if(typeof(G===null||G===void 0?void 0:G.addEventListener)==="function")G.addEventListener(I,d)};lT1._addWindowEventListenerSafe=iC4;var nC4=(I,d)=>{let G=lT1._getDocumentSafe();if(typeof(G===null||G===void 0?void 0:G.addEventListener)==="function")G.addEventListener(I,d)};lT1._addDocumentEventListenerSafe=nC4;var rC4=()=>{var I;try{return(I=lT1._getWindowSafe())===null||I===void 0?void 0:I.location.href.split(/[?#]/)[0]}catch(d){return}};lT1._getCurrentPageUrlSafe=rC4});var v21=Y((xT1)=>{Object.defineProperty(xT1,"__esModule",{value:!0});xT1._createLayerParameterExposure=xT1._createConfigExposure=xT1._createGateExposure=xT1._isExposureEvent=void 0;var hT1="statsig::config_exposure",jT1="statsig::gate_exposure",kT1="statsig::layer_exposure",U21=(I,d,G,Z,C)=>{if(G.bootstrapMetadata)Z.bootstrapMetadata=G.bootstrapMetadata;return{eventName:I,user:d,value:null,metadata:GW4(G,Z),secondaryExposures:C,time:Date.now()}},eC4=({eventName:I})=>{return I===jT1||I===hT1||I===kT1};xT1._isExposureEvent=eC4;var tC4=(I,d)=>{var G,Z,C;let W={gate:d.name,gateValue:String(d.value),ruleID:d.ruleID};if(((G=d.__evaluation)===null||G===void 0?void 0:G.version)!=null)W.configVersion=d.__evaluation.version;return U21(jT1,I,d.details,W,(C=(Z=d.__evaluation)===null||Z===void 0?void 0:Z.secondary_exposures)!==null&&C!==void 0?C:[])};xT1._createGateExposure=tC4;var IW4=(I,d)=>{var G,Z,C,W;let w={config:d.name,ruleID:d.ruleID};if(((G=d.__evaluation)===null||G===void 0?void 0:G.version)!=null)w.configVersion=d.__evaluation.version;if(((Z=d.__evaluation)===null||Z===void 0?void 0:Z.passed)!=null)w.rulePassed=String(d.__evaluation.passed);return U21(hT1,I,d.details,w,(W=(C=d.__evaluation)===null||C===void 0?void 0:C.secondary_exposures)!==null&&W!==void 0?W:[])};xT1._createConfigExposure=IW4;var dW4=(I,d,G)=>{var Z,C,W,w;let B=d.__evaluation,A=((Z=B===null||B===void 0?void 0:B.explicit_parameters)===null||Z===void 0?void 0:Z.includes(G))===!0,V="",X=(C=B===null||B===void 0?void 0:B.undelegated_secondary_exposures)!==null&&C!==void 0?C:[];if(A)V=(W=B.allocated_experiment_name)!==null&&W!==void 0?W:"",X=B.secondary_exposures;let _={config:d.name,parameterName:G,ruleID:d.ruleID,allocatedExperiment:V,isExplicitParameter:String(A)};if(((w=d.__evaluation)===null||w===void 0?void 0:w.version)!=null)_.configVersion=d.__evaluation.version;return U21(kT1,I,d.details,_,X)};xT1._createLayerParameterExposure=dW4;var GW4=(I,d)=>{if(d.reason=I.reason,I.lcut)d.lcut=String(I.lcut);if(I.receivedAt)d.receivedAt=String(I.receivedAt);return d}});var bA=Y((pT1)=>{Object.defineProperty(pT1,"__esModule",{value:!0});pT1._setObjectInStorage=pT1._getObjectFromStorage=pT1.Storage=void 0;var wW4=q7(),BW4=jF(),UE={},M21={isReady:()=>!0,isReadyResolver:()=>null,getProviderName:()=>"InMemory",getItem:(I)=>UE[I]?UE[I]:null,setItem:(I,d)=>{UE[I]=d},removeItem:(I)=>{delete UE[I]},getAllKeys:()=>Object.keys(UE)},tl=null;try{let I=BW4._getWindowSafe();if(I&&I.localStorage&&typeof I.localStorage.getItem==="function")tl={isReady:()=>!0,isReadyResolver:()=>null,getProviderName:()=>"LocalStorage",getItem:(d)=>I.localStorage.getItem(d),setItem:(d,G)=>I.localStorage.setItem(d,G),removeItem:(d)=>I.localStorage.removeItem(d),getAllKeys:()=>Object.keys(I.localStorage)}}catch(I){wW4.Log.warn("Failed to setup localStorageProvider.")}var E21=tl!==null&&tl!==void 0?tl:M21,Qw=E21;function AW4(I){try{return I()}catch(d){if(d instanceof Error&&d.name==="SecurityError")return pT1.Storage._setProvider(M21),null;throw d}}pT1.Storage={isReady:()=>Qw.isReady(),isReadyResolver:()=>Qw.isReadyResolver(),getProviderName:()=>Qw.getProviderName(),getItem:(I)=>AW4(()=>Qw.getItem(I)),setItem:(I,d)=>Qw.setItem(I,d),removeItem:(I)=>Qw.removeItem(I),getAllKeys:()=>Qw.getAllKeys(),_setProvider:(I)=>{E21=I,Qw=I},_setDisabled:(I)=>{if(I)Qw=M21;else Qw=E21}};function VW4(I){let d=pT1.Storage.getItem(I);return JSON.parse(d!==null&&d!==void 0?d:"null")}pT1._getObjectFromStorage=VW4;function XW4(I,d){pT1.Storage.setItem(I,JSON.stringify(d))}pT1._setObjectInStorage=XW4});var S21=Y((rT1)=>{Object.defineProperty(rT1,"__esModule",{value:!0});rT1.UrlConfiguration=void 0;var db=RE(),_W4={[db.Endpoint._initialize]:"i",[db.Endpoint._rgstr]:"e",[db.Endpoint._download_config_specs]:"d"};class nT1{constructor(I,d,G,Z){if(this.customUrl=null,this.fallbackUrls=null,this.endpoint=I,this.endpointDnsKey=_W4[I],d)this.customUrl=d;if(!d&&G)this.customUrl=G.endsWith("/")?`${G}${I}`:`${G}/${I}`;if(Z)this.fallbackUrls=Z;let C=db.NetworkDefault[I];this.defaultUrl=`${C}/${I}`}getUrl(){var I;return(I=this.customUrl)!==null&&I!==void 0?I:this.defaultUrl}}rT1.UrlConfiguration=nT1});var Cb=Y((oT1)=>{Object.defineProperty(oT1,"__esModule",{value:!0});oT1._notifyVisibilityChanged=oT1._subscribeToVisiblityChanged=oT1._isUnloading=oT1._isCurrentlyVisible=void 0;var Gb=jF(),Zb="foreground",y21="background",sT1=[],L21=Zb,P21=!1,DW4=()=>{return L21===Zb};oT1._isCurrentlyVisible=DW4;var HW4=()=>P21;oT1._isUnloading=HW4;var FW4=(I)=>{sT1.unshift(I)};oT1._subscribeToVisiblityChanged=FW4;var gW4=(I)=>{if(I===L21)return;L21=I,sT1.forEach((d)=>d(I))};oT1._notifyVisibilityChanged=gW4;Gb._addWindowEventListenerSafe("focus",()=>{P21=!1,oT1._notifyVisibilityChanged(Zb)});Gb._addWindowEventListenerSafe("blur",()=>oT1._notifyVisibilityChanged(y21));Gb._addWindowEventListenerSafe("beforeunload",()=>{P21=!0,oT1._notifyVisibilityChanged(y21)});Gb._addDocumentEventListenerSafe("visibilitychange",()=>{oT1._notifyVisibilityChanged(document.visibilityState==="visible"?Zb:y21)})});var u21=Y((Kz)=>{var gz=Kz&&Kz.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(Kz,"__esModule",{value:!0});Kz.EventLogger=void 0;var zW4=qE(),QW4=Hz(),vE=q7(),eT1=RE(),$21=jF(),fW4=v21(),Jz=bA(),qW4=S21(),tT1=Cb(),RW4=100,UW4=1e4,vW4=1000,EW4=600000,MW4=500,IO1=200,EE={},Wb={Startup:"startup",GainedFocus:"gained_focus"};class kF{static _safeFlushAndForget(I){var d;(d=EE[I])===null||d===void 0||d.flush().catch(()=>{})}static _safeRetryFailedLogs(I){var d;(d=EE[I])===null||d===void 0||d._retryFailedLogs(Wb.GainedFocus)}constructor(I,d,G,Z){var C;this._sdkKey=I,this._emitter=d,this._network=G,this._options=Z,this._queue=[],this._lastExposureTimeMap={},this._nonExposedChecks={},this._hasRunQuickFlush=!1,this._creationTime=Date.now(),this._isLoggingDisabled=(Z===null||Z===void 0?void 0:Z.disableLogging)===!0,this._maxQueueSize=(C=Z===null||Z===void 0?void 0:Z.loggingBufferMaxSize)!==null&&C!==void 0?C:RW4;let W=Z===null||Z===void 0?void 0:Z.networkConfig;this._logEventUrlConfig=new qW4.UrlConfiguration(eT1.Endpoint._rgstr,W===null||W===void 0?void 0:W.logEventUrl,W===null||W===void 0?void 0:W.api,W===null||W===void 0?void 0:W.logEventFallbackUrls)}setLoggingDisabled(I){this._isLoggingDisabled=I}enqueue(I){if(!this._shouldLogEvent(I))return;if(this._normalizeAndAppendEvent(I),this._quickFlushIfNeeded(),this._queue.length>this._maxQueueSize)kF._safeFlushAndForget(this._sdkKey)}incrementNonExposureCount(I){var d;let G=(d=this._nonExposedChecks[I])!==null&&d!==void 0?d:0;this._nonExposedChecks[I]=G+1}reset(){this._lastExposureTimeMap={}}start(){if($21._isServerEnv())return;EE[this._sdkKey]=this,tT1._subscribeToVisiblityChanged((I)=>{if(I==="background")kF._safeFlushAndForget(this._sdkKey);else if(I==="foreground")kF._safeRetryFailedLogs(this._sdkKey)}),this._retryFailedLogs(Wb.Startup),this._startBackgroundFlushInterval()}stop(){return gz(this,void 0,void 0,function*(){if(this._flushIntervalId)clearInterval(this._flushIntervalId),this._flushIntervalId=null;delete EE[this._sdkKey],yield this.flush()})}flush(){return gz(this,void 0,void 0,function*(){if(this._appendAndResetNonExposedChecks(),this._queue.length===0)return;let I=this._queue;this._queue=[],yield this._sendEvents(I)})}_quickFlushIfNeeded(){if(this._hasRunQuickFlush)return;if(this._hasRunQuickFlush=!0,Date.now()-this._creationTime>IO1)return;setTimeout(()=>kF._safeFlushAndForget(this._sdkKey),IO1)}_shouldLogEvent(I){if($21._isServerEnv())return!1;if(!fW4._isExposureEvent(I))return!0;let d=I.user?I.user:{statsigEnvironment:void 0},G=zW4._getUserStorageKey(this._sdkKey,d),Z=I.metadata?I.metadata:{},C=[I.eventName,G,Z.gate,Z.config,Z.ruleID,Z.allocatedExperiment,Z.parameterName,String(Z.isExplicitParameter),Z.reason].join("|"),W=this._lastExposureTimeMap[C],w=Date.now();if(W&&w-WvW4)this._lastExposureTimeMap={};return this._lastExposureTimeMap[C]=w,!0}_sendEvents(I){var d,G;return gz(this,void 0,void 0,function*(){if(this._isLoggingDisabled)return this._saveFailedLogsToStorage(I),!1;try{let C=tT1._isUnloading()&&this._network.isBeaconSupported()&&((G=(d=this._options)===null||d===void 0?void 0:d.networkConfig)===null||G===void 0?void 0:G.networkOverrideFunc)==null;if(this._emitter({name:"pre_logs_flushed",events:I}),(C?yield this._sendEventsViaBeacon(I):yield this._sendEventsViaPost(I)).success)return this._emitter({name:"logs_flushed",events:I}),!0;else return vE.Log.warn("Failed to flush events."),this._saveFailedLogsToStorage(I),!1}catch(Z){return vE.Log.warn("Failed to flush events."),!1}})}_sendEventsViaPost(I){var d;return gz(this,void 0,void 0,function*(){let G=yield this._network.post(this._getRequestData(I)),Z=(d=G===null||G===void 0?void 0:G.code)!==null&&d!==void 0?d:-1;return{success:Z>=200&&Z<300}})}_sendEventsViaBeacon(I){return gz(this,void 0,void 0,function*(){return{success:yield this._network.beacon(this._getRequestData(I))}})}_getRequestData(I){return{sdkKey:this._sdkKey,data:{events:I},urlConfig:this._logEventUrlConfig,retries:3,isCompressable:!0,params:{[eT1.NetworkParam.EventCount]:String(I.length)}}}_saveFailedLogsToStorage(I){while(I.length>MW4)I.shift();let d=this._getStorageKey();try{Jz._setObjectInStorage(d,I)}catch(G){vE.Log.warn("Unable to save failed logs to storage")}}_retryFailedLogs(I){let d=this._getStorageKey();(()=>gz(this,void 0,void 0,function*(){if(!Jz.Storage.isReady())yield Jz.Storage.isReadyResolver();let G=Jz._getObjectFromStorage(d);if(!G)return;if(I===Wb.Startup)Jz.Storage.removeItem(d);if((yield this._sendEvents(G))&&I===Wb.GainedFocus)Jz.Storage.removeItem(d)}))().catch(()=>{vE.Log.warn("Failed to flush stored logs")})}_getStorageKey(){return`statsig.failed_logs.${QW4._DJB2(this._sdkKey)}`}_normalizeAndAppendEvent(I){if(I.user)I.user=Object.assign({},I.user),delete I.user.privateAttributes;let d={},G=this._getCurrentPageUrl();if(G)d.statsigMetadata={currentPage:G};let Z=Object.assign(Object.assign({},I),d);vE.Log.debug("Enqueued Event:",Z),this._queue.push(Z)}_appendAndResetNonExposedChecks(){if(Object.keys(this._nonExposedChecks).length===0)return;this._normalizeAndAppendEvent({eventName:"statsig::non_exposed_checks",user:null,time:Date.now(),metadata:{checks:Object.assign({},this._nonExposedChecks)}}),this._nonExposedChecks={}}_getCurrentPageUrl(){var I;if(((I=this._options)===null||I===void 0?void 0:I.includeCurrentPageUrlWithEvents)===!1)return;return $21._getCurrentPageUrlSafe()}_startBackgroundFlushInterval(){var I,d;let G=(d=(I=this._options)===null||I===void 0?void 0:I.loggingIntervalMs)!==null&&d!==void 0?d:UW4,Z=setInterval(()=>{let C=EE[this._sdkKey];if(!C||C._flushIntervalId!==Z)clearInterval(Z);else kF._safeFlushAndForget(this._sdkKey)},G);this._flushIntervalId=Z}}Kz.EventLogger=kF});var ME=Y((dO1)=>{Object.defineProperty(dO1,"__esModule",{value:!0});dO1.StatsigMetadataProvider=dO1.SDK_VERSION=void 0;dO1.SDK_VERSION="3.12.0";var T21={sdkVersion:dO1.SDK_VERSION,sdkType:"js-mono"};dO1.StatsigMetadataProvider={get:()=>T21,add:(I)=>{T21=Object.assign(Object.assign({},T21),I)}}});var WO1=Y((CO1)=>{Object.defineProperty(CO1,"__esModule",{value:!0})});var wb=Y((wO1)=>{Object.defineProperty(wO1,"__esModule",{value:!0});wO1.getUUID=void 0;function SW4(){if(typeof crypto!=="undefined"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();let I=new Date().getTime(),d=typeof performance!=="undefined"&&performance.now&&performance.now()*1000||0;return`xxxxxxxx-xxxx-4xxx-${"89ab"[Math.floor(Math.random()*4)]}xxx-xxxxxxxxxxxx`.replace(/[xy]/g,(Z)=>{let C=Math.random()*16;if(I>0)C=(I+C)%16|0,I=Math.floor(I/16);else C=(d+C)%16|0,d=Math.floor(d/16);return(Z==="x"?C:C&7|8).toString(16)})}wO1.getUUID=SW4});var Ab=Y((YO1)=>{Object.defineProperty(YO1,"__esModule",{value:!0});YO1.StableID=void 0;var LW4=qE(),yW4=q7(),VO1=bA(),PW4=wb(),Bb={};YO1.StableID={get:(I)=>{if(Bb[I]==null){let d=$W4(I);if(d==null)d=PW4.getUUID(),AO1(d,I);Bb[I]=d}return Bb[I]},setOverride:(I,d)=>{Bb[d]=I,AO1(I,d)}};function XO1(I){return`statsig.stable_id.${LW4._getStorageKey(I)}`}function AO1(I,d){let G=XO1(d);try{VO1._setObjectInStorage(G,I)}catch(Z){yW4.Log.warn("Failed to save StableID")}}function $W4(I){let d=XO1(I);return VO1._getObjectFromStorage(d)}});var O21=Y((DO1)=>{Object.defineProperty(DO1,"__esModule",{value:!0});DO1._getFullUserHash=DO1._normalizeUser=void 0;var uW4=Hz(),TW4=q7();function OW4(I,d,G){try{let Z=JSON.parse(JSON.stringify(I));if(d!=null&&d.environment!=null)Z.statsigEnvironment=d.environment;else if(G!=null)Z.statsigEnvironment={tier:G};return Z}catch(Z){return TW4.Log.error("Failed to JSON.stringify user"),{statsigEnvironment:void 0}}}DO1._normalizeUser=OW4;function mW4(I){return I?uW4._DJB2Object(I):null}DO1._getFullUserHash=mW4});var m21=Y((FO1)=>{Object.defineProperty(FO1,"__esModule",{value:!0});FO1._typedJsonParse=void 0;var bW4=q7();function hW4(I,d,G){try{let Z=JSON.parse(I);if(Z&&typeof Z==="object"&&d in Z)return Z}catch(Z){}return bW4.Log.error(`Failed to parse ${G}`),null}FO1._typedJsonParse=hW4});var fO1=Y((FY)=>{var l21=FY&&FY.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(FY,"__esModule",{value:!0});FY._makeDataAdapterResult=FY.DataAdapterCore=void 0;var Vb=q7(),jW4=Ab(),Xb=O21(),HY=bA(),JO1=m21(),KO1=10;class NO1{constructor(I,d){this._adapterName=I,this._cacheSuffix=d,this._options=null,this._sdkKey=null,this._lastModifiedStoreKey=`statsig.last_modified_time.${d}`,this._inMemoryCache=new zO1}attach(I,d){this._sdkKey=I,this._options=d}getDataSync(I){let d=I&&Xb._normalizeUser(I,this._options),G=this._getCacheKey(d),Z=this._inMemoryCache.get(G,d);if(Z)return Z;let C=this._loadFromCache(G);if(C)return this._inMemoryCache.add(G,C),this._inMemoryCache.get(G,d);return null}setData(I,d){let G=d&&Xb._normalizeUser(d,this._options),Z=this._getCacheKey(G);this._inMemoryCache.add(Z,Yb("Bootstrap",I,null,G))}_getDataAsyncImpl(I,d,G){return l21(this,void 0,void 0,function*(){if(!HY.Storage.isReady())yield HY.Storage.isReadyResolver();let Z=I!==null&&I!==void 0?I:this.getDataSync(d),C=[this._fetchAndPrepFromNetwork(Z,d,G)];if(G===null||G===void 0?void 0:G.timeoutMs)C.push(new Promise((W)=>setTimeout(W,G.timeoutMs)).then(()=>{return Vb.Log.debug("Fetching latest value timed out"),null}));return yield Promise.race(C)})}_prefetchDataImpl(I,d){return l21(this,void 0,void 0,function*(){let G=I&&Xb._normalizeUser(I,this._options),Z=this._getCacheKey(G),C=yield this._getDataAsyncImpl(null,G,d);if(C)this._inMemoryCache.add(Z,Object.assign(Object.assign({},C),{source:"Prefetch"}))})}_fetchAndPrepFromNetwork(I,d,G){return l21(this,void 0,void 0,function*(){let Z=null;if(I&&this._isCachedResultValidFor204(I,d))Z=I.data;let C=yield this._fetchFromNetwork(Z,d,G);if(!C)return Vb.Log.debug("No response returned for latest value"),null;let W=JO1._typedJsonParse(C,"has_updates","Response"),w=this._getSdkKey(),B=jW4.StableID.get(w),A=null;if((W===null||W===void 0?void 0:W.has_updates)===!0)A=Yb("Network",C,B,d);else if(Z&&(W===null||W===void 0?void 0:W.has_updates)===!1)A=Yb("NetworkNotModified",Z,B,d);else return null;let V=this._getCacheKey(d);return this._inMemoryCache.add(V,A),this._writeToCache(V,A),A})}_getSdkKey(){if(this._sdkKey!=null)return this._sdkKey;return Vb.Log.error(`${this._adapterName} is not attached to a Client`),""}_loadFromCache(I){var d;let G=(d=HY.Storage.getItem)===null||d===void 0?void 0:d.call(HY.Storage,I);if(G==null)return null;let Z=JO1._typedJsonParse(G,"source","Cached Result");return Z?Object.assign(Object.assign({},Z),{source:"Cache"}):null}_writeToCache(I,d){HY.Storage.setItem(I,JSON.stringify(d)),this._runLocalStorageCacheEviction(I)}_runLocalStorageCacheEviction(I){var d;let G=(d=HY._getObjectFromStorage(this._lastModifiedStoreKey))!==null&&d!==void 0?d:{};G[I]=Date.now();let Z=QO1(G,KO1);if(Z)delete G[Z],HY.Storage.removeItem(Z);HY._setObjectInStorage(this._lastModifiedStoreKey,G)}}FY.DataAdapterCore=NO1;function Yb(I,d,G,Z){return{source:I,data:d,receivedAt:Date.now(),stableID:G,fullUserHash:Xb._getFullUserHash(Z)}}FY._makeDataAdapterResult=Yb;class zO1{constructor(){this._data={}}get(I,d){var G;let Z=this._data[I],C=Z===null||Z===void 0?void 0:Z.stableID,W=(G=d===null||d===void 0?void 0:d.customIDs)===null||G===void 0?void 0:G.stableID;if(W&&C&&W!==C)return Vb.Log.warn("'StatsigUser.customIDs.stableID' mismatch"),null;return Z}add(I,d){let G=QO1(this._data,KO1-1);if(G)delete this._data[G];this._data[I]=d}merge(I){this._data=Object.assign(Object.assign({},this._data),I)}}function QO1(I,d){let G=Object.keys(I);if(G.length<=d)return null;return G.reduce((Z,C)=>{let W=I[Z],w=I[C];if(typeof W==="object"&&typeof w==="object")return w.receivedAt{Object.defineProperty(qO1,"__esModule",{value:!0})});var _b=Y((vO1)=>{Object.defineProperty(vO1,"__esModule",{value:!0});vO1.SDKType=void 0;var UO1={},Nz;vO1.SDKType={_get:(I)=>{var d;return((d=UO1[I])!==null&&d!==void 0?d:"js-mono")+(Nz!==null&&Nz!==void 0?Nz:"")},_setClientType(I,d){UO1[I]=d},_setBindingType(I){if(!Nz||Nz==="-react")Nz="-"+I}}});var b21=Y((hA)=>{var kW4=hA&&hA.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(hA,"__esModule",{value:!0});hA.ErrorBoundary=hA.EXCEPTION_ENDPOINT=void 0;var xW4=q7(),cW4=_b(),pW4=ME();hA.EXCEPTION_ENDPOINT="https://statsigapi.net/v1/sdk_exception";var SO1="[Statsig] UnknownError";class LO1{constructor(I,d,G,Z){this._sdkKey=I,this._options=d,this._emitter=G,this._lastSeenError=Z,this._seen=new Set}wrap(I){try{let d=I;nW4(d).forEach((G)=>{let Z=d[G];if("$EB"in Z)return;d[G]=(...C)=>{return this._capture(G,()=>Z.apply(I,C))},d[G].$EB=!0})}catch(d){this._onError("eb:wrap",d)}}logError(I,d){this._onError(I,d)}getLastSeenErrorAndReset(){let I=this._lastSeenError;return this._lastSeenError=void 0,I!==null&&I!==void 0?I:null}attachErrorIfNoneExists(I){if(this._lastSeenError)return;this._lastSeenError=MO1(I)}_capture(I,d){try{let G=d();if(G&&G instanceof Promise)return G.catch((Z)=>this._onError(I,Z));return G}catch(G){return this._onError(I,G),null}}_onError(I,d){try{xW4.Log.warn(`Caught error in ${I}`,{error:d}),(()=>kW4(this,void 0,void 0,function*(){var Z,C,W,w,B,A,V;let X=d?d:Error(SO1),_=X instanceof Error,F=_?X.name:"No Name",g=MO1(X);if(this._lastSeenError=g,this._seen.has(F))return;if(this._seen.add(F),(C=(Z=this._options)===null||Z===void 0?void 0:Z.networkConfig)===null||C===void 0?void 0:C.preventAllNetworkTraffic){(W=this._emitter)===null||W===void 0||W.call(this,{name:"error",error:d,tag:I});return}let J=cW4.SDKType._get(this._sdkKey),K=pW4.StatsigMetadataProvider.get(),Q=_?X.stack:iW4(X),E=JSON.stringify(Object.assign({tag:I,exception:F,info:Q},Object.assign(Object.assign({},K),{sdkType:J})));yield((A=(B=(w=this._options)===null||w===void 0?void 0:w.networkConfig)===null||B===void 0?void 0:B.networkOverrideFunc)!==null&&A!==void 0?A:fetch)(hA.EXCEPTION_ENDPOINT,{method:"POST",headers:{"STATSIG-API-KEY":this._sdkKey,"STATSIG-SDK-TYPE":String(J),"STATSIG-SDK-VERSION":String(K.sdkVersion),"Content-Type":"application/json"},body:E}),(V=this._emitter)===null||V===void 0||V.call(this,{name:"error",error:d,tag:I})}))().then(()=>{}).catch(()=>{})}catch(G){}}}hA.ErrorBoundary=LO1;function MO1(I){if(I instanceof Error)return I;else if(typeof I==="string")return new Error(I);else return new Error("An unknown error occurred.")}function iW4(I){try{return JSON.stringify(I)}catch(d){return SO1}}function nW4(I){let d=new Set,G=Object.getPrototypeOf(I);while(G&&G!==Object.prototype)Object.getOwnPropertyNames(G).filter((Z)=>typeof(G===null||G===void 0?void 0:G[Z])==="function").forEach((Z)=>d.add(Z)),G=Object.getPrototypeOf(G);return Array.from(d)}});var PO1=Y((yO1)=>{Object.defineProperty(yO1,"__esModule",{value:!0})});var uO1=Y(($O1)=>{Object.defineProperty($O1,"__esModule",{value:!0})});var OO1=Y((TO1)=>{Object.defineProperty(TO1,"__esModule",{value:!0})});var h21=Y((mO1)=>{Object.defineProperty(mO1,"__esModule",{value:!0});mO1.createMemoKey=mO1.MemoPrefix=void 0;mO1.MemoPrefix={_gate:"g",_dynamicConfig:"c",_experiment:"e",_layer:"l",_paramStore:"p"};var rW4=new Set([]),aW4=new Set(["userPersistedValues"]);function sW4(I,d,G){let Z=`${I}|${d}`;if(!G)return Z;for(let C of Object.keys(G)){if(aW4.has(C))return;if(rW4.has(C))Z+=`|${C}=true`;else Z+=`|${C}=${G[C]}`}return Z}mO1.createMemoKey=sW4});var bO1=Y((zz)=>{var eW4=zz&&zz.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(zz,"__esModule",{value:!0});zz._fetchTxtRecords=void 0;var tW4=new Uint8Array([0,0,1,0,0,1,0,0,0,0,0,0,13,102,101,97,116,117,114,101,97,115,115,101,116,115,3,111,114,103,0,0,16,0,1]),Iw4="https://cloudflare-dns.com/dns-query",dw4=["i","e","d"],Gw4=200;function Zw4(I){return eW4(this,void 0,void 0,function*(){let d=yield I(Iw4,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:tW4});if(!d.ok){let C=new Error("Failed to fetch TXT records from DNS");throw C.name="DnsTxtFetchError",C}let G=yield d.arrayBuffer(),Z=new Uint8Array(G);return Cw4(Z)})}zz._fetchTxtRecords=Zw4;function Cw4(I){let d=I.findIndex((Z,C)=>C{var hO1=gY&&gY.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(gY,"__esModule",{value:!0});gY._isDomainFailure=gY.NetworkFallbackResolver=void 0;var Ww4=bO1(),ww4=Hz(),Bw4=q7(),k21=bA(),jO1=604800000,Aw4=14400000;class xO1{constructor(I){var d;this._fallbackInfo=null,this._errorBoundary=null,this._dnsQueryCooldowns={},this._networkOverrideFunc=(d=I.networkConfig)===null||d===void 0?void 0:d.networkOverrideFunc}setErrorBoundary(I){this._errorBoundary=I}tryBumpExpiryTime(I,d){var G;let Z=(G=this._fallbackInfo)===null||G===void 0?void 0:G[d.endpoint];if(!Z)return;Z.expiryTime=Date.now()+jO1,j21(I,Object.assign(Object.assign({},this._fallbackInfo),{[d.endpoint]:Z}))}getActiveFallbackUrl(I,d){var G,Z;let C=this._fallbackInfo;if(C==null)C=(G=Vw4(I))!==null&&G!==void 0?G:{},this._fallbackInfo=C;let W=C[d.endpoint];if(!W||Date.now()>((Z=W.expiryTime)!==null&&Z!==void 0?Z:0))return delete C[d.endpoint],this._fallbackInfo=C,j21(I,this._fallbackInfo),null;if(W.url)return W.url;return null}getFallbackFromProvided(I){let d=kO1(I);if(d)return I.replace(d,"");return null}tryFetchUpdatedFallbackInfo(I,d,G,Z){var C,W;return hO1(this,void 0,void 0,function*(){try{if(!cO1(G,Z))return!1;let B=d.customUrl==null&&d.fallbackUrls==null?yield this._tryFetchFallbackUrlsFromNetwork(d):d.fallbackUrls,A=this._pickNewFallbackUrl((C=this._fallbackInfo)===null||C===void 0?void 0:C[d.endpoint],B);if(!A)return!1;return this._updateFallbackInfoWithNewUrl(I,d.endpoint,A),!0}catch(w){return(W=this._errorBoundary)===null||W===void 0||W.logError("tryFetchUpdatedFallbackInfo",w),!1}})}_updateFallbackInfoWithNewUrl(I,d,G){var Z,C,W;let w={url:G,expiryTime:Date.now()+jO1,previous:[]},B=(Z=this._fallbackInfo)===null||Z===void 0?void 0:Z[d];if(B)w.previous.push(...B.previous);if(w.previous.length>10)w.previous=[];let A=(W=(C=this._fallbackInfo)===null||C===void 0?void 0:C[d])===null||W===void 0?void 0:W.url;if(A!=null)w.previous.push(A);this._fallbackInfo=Object.assign(Object.assign({},this._fallbackInfo),{[d]:w}),j21(I,this._fallbackInfo)}_tryFetchFallbackUrlsFromNetwork(I){var d;return hO1(this,void 0,void 0,function*(){let G=this._dnsQueryCooldowns[I.endpoint];if(G&&Date.now()1){let A=B[1];if(A.endsWith("/"))A=A.slice(0,-1);Z.push(`https://${A}${W}`)}}return Z})}_pickNewFallbackUrl(I,d){var G;if(d==null)return null;let Z=new Set((G=I===null||I===void 0?void 0:I.previous)!==null&&G!==void 0?G:[]),C=I===null||I===void 0?void 0:I.url,W=null;for(let w of d){let B=w.endsWith("/")?w.slice(0,-1):w;if(!Z.has(w)&&B!==C){W=B;break}}return W}}gY.NetworkFallbackResolver=xO1;function cO1(I,d){var G;let Z=(G=I===null||I===void 0?void 0:I.toLowerCase())!==null&&G!==void 0?G:"";return d||Z.includes("uncaught exception")||Z.includes("failed to fetch")||Z.includes("networkerror when attempting to fetch resource")}gY._isDomainFailure=cO1;function pO1(I){return`statsig.network_fallback.${ww4._DJB2(I)}`}function j21(I,d){let G=pO1(I);if(!d||Object.keys(d).length===0){k21.Storage.removeItem(G);return}k21.Storage.setItem(G,JSON.stringify(d))}function Vw4(I){let d=pO1(I),G=k21.Storage.getItem(d);if(!G)return null;try{return JSON.parse(G)}catch(Z){return Bw4.Log.error("Failed to parse FallbackInfo"),null}}function kO1(I){try{return new URL(I).pathname}catch(d){return null}}});var Hb=Y((tO1)=>{Object.defineProperty(tO1,"__esModule",{value:!0});tO1.StatsigSession=tO1.SessionID=void 0;var Xw4=qE(),Yw4=q7(),rO1=bA(),aO1=wb(),sO1=1800000,oO1=14400000,Db={};tO1.SessionID={get:(I)=>{return tO1.StatsigSession.get(I).data.sessionID}};tO1.StatsigSession={get:(I)=>{if(Db[I]==null)Db[I]=_w4(I);let d=Db[I];return Hw4(d)},overrideInitialSessionID:(I,d)=>{Db[d]=Dw4(I,d)}};function _w4(I){let d=Kw4(I),G=Date.now();if(!d)d={sessionID:aO1.getUUID(),startTime:G,lastUpdate:G};return{data:d,sdkKey:I}}function Dw4(I,d){let G=Date.now();return{data:{sessionID:I,startTime:G,lastUpdate:G},sdkKey:d}}function Hw4(I){let d=Date.now(),G=I.data;if(Fw4(G)||gw4(G))G.sessionID=aO1.getUUID(),G.startTime=d;G.lastUpdate=d,Jw4(G,I.sdkKey),clearTimeout(I.idleTimeoutID),clearTimeout(I.ageTimeoutID);let Z=d-G.startTime,C=I.sdkKey;return I.idleTimeoutID=nO1(C,sO1),I.ageTimeoutID=nO1(C,oO1-Z),I}function nO1(I,d){return setTimeout(()=>{let G=__STATSIG__===null||__STATSIG__===void 0?void 0:__STATSIG__.instance(I);if(G)G.$emt({name:"session_expired"})},d)}function Fw4({lastUpdate:I}){return Date.now()-I>sO1}function gw4({startTime:I}){return Date.now()-I>oO1}function eO1(I){return`statsig.session_id.${Xw4._getStorageKey(I)}`}function Jw4(I,d){let G=eO1(d);try{rO1._setObjectInStorage(G,I)}catch(Z){Yw4.Log.warn("Failed to save SessionID")}}function Kw4(I){let d=eO1(I);return rO1._getObjectFromStorage(d)}});var c21=Y((Im1)=>{Object.defineProperty(Im1,"__esModule",{value:!0});Im1.ErrorTag=void 0;Im1.ErrorTag={NetworkError:"NetworkError"}});var Vm1=Y((fz)=>{var Qz=fz&&fz.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(fz,"__esModule",{value:!0});fz.NetworkCore=void 0;hF();var zw4=hF(),p21=rl(),Fb=q7(),fw=RE(),Qw4=iO1(),Gm1=_b(),fw4=jF(),Zm1=Hb(),qw4=Ab(),Rw4=c21(),Cm1=ME(),Uw4=Cb(),vw4=1e4,Ew4=500,Mw4=30000,Sw4=1000,Bm1=50,Lw4=Bm1/Sw4,yw4=new Set([408,500,502,503,504,522,524,599]);class Am1{constructor(I,d){if(this._emitter=d,this._errorBoundary=null,this._timeout=vw4,this._netConfig={},this._options={},this._leakyBucket={},this._lastUsedInitUrl=null,I)this._options=I;if(this._options.networkConfig)this._netConfig=this._options.networkConfig;if(this._netConfig.networkTimeoutMs)this._timeout=this._netConfig.networkTimeoutMs;this._fallbackResolver=new Qw4.NetworkFallbackResolver(this._options)}setErrorBoundary(I){this._errorBoundary=I,this._errorBoundary.wrap(this),this._errorBoundary.wrap(this._fallbackResolver),this._fallbackResolver.setErrorBoundary(I)}isBeaconSupported(){return typeof navigator!=="undefined"&&typeof navigator.sendBeacon==="function"}getLastUsedInitUrlAndReset(){let I=this._lastUsedInitUrl;return this._lastUsedInitUrl=null,I}beacon(I){return Qz(this,void 0,void 0,function*(){if(!Wm1(I))return!1;let d=this._getInternalRequestArgs("POST",I),G=yield this._getPopulatedBody(d,I.data),Z=yield this._getPopulatedURL(d),C=navigator;return C.sendBeacon.bind(C)(Z,G)})}post(I){return Qz(this,void 0,void 0,function*(){let d=this._getInternalRequestArgs("POST",I);if(d.body=yield this._getPopulatedBody(d,I.data),I.isStatsigEncodable)d.body=this._attemptToEncodeString(d,d.body);return this._sendRequest(d)})}get(I){let d=this._getInternalRequestArgs("GET",I);return this._sendRequest(d)}_sendRequest(I){var d,G,Z,C;return Qz(this,void 0,void 0,function*(){if(!Wm1(I))return null;if(this._netConfig.preventAllNetworkTraffic)return null;let{method:W,body:w,retries:B,attempt:A}=I,V=I.urlConfig.endpoint;if(this._isRateLimited(V))return Fb.Log.warn(`Request to ${V} was blocked because you are making requests too frequently.`),null;let X=A!==null&&A!==void 0?A:1,_=typeof AbortController!=="undefined"?new AbortController:null,F=setTimeout(()=>{_===null||_===void 0||_.abort(`Timeout of ${this._timeout}ms expired.`)},this._timeout),g=yield this._getPopulatedURL(I),J=null,K=Uw4._isUnloading();try{let Q={method:W,body:w,headers:Object.assign({},I.headers),signal:_===null||_===void 0?void 0:_.signal,priority:I.priority,keepalive:K};uw4(I,X);let E=this._leakyBucket[V];if(E)E.lastRequestTime=Date.now(),this._leakyBucket[V]=E;if(J=yield((d=this._netConfig.networkOverrideFunc)!==null&&d!==void 0?d:fetch)(g,Q),clearTimeout(F),!J.ok){let $=yield J.text().catch(()=>"No Text"),h=new Error(`NetworkError: ${g} ${$}`);throw h.name="NetworkError",h}let P=yield J.text();return wm1(I,J,X,P),this._fallbackResolver.tryBumpExpiryTime(I.sdkKey,I.urlConfig),{body:P,code:J.status}}catch(Q){let E=Pw4(_,Q),S=$w4(_);if(wm1(I,J,X,"",Q),yield this._fallbackResolver.tryFetchUpdatedFallbackInfo(I.sdkKey,I.urlConfig,E,S))I.fallbackUrl=this._fallbackResolver.getActiveFallbackUrl(I.sdkKey,I.urlConfig);if(!B||X>B||!yw4.has((G=J===null||J===void 0?void 0:J.status)!==null&&G!==void 0?G:500)){(Z=this._emitter)===null||Z===void 0||Z.call(this,{name:"error",error:Q,tag:Rw4.ErrorTag.NetworkError,requestArgs:I});let $=`A networking error occurred during ${W} request to ${g}.`;return Fb.Log.error($,E,Q),(C=this._errorBoundary)===null||C===void 0||C.attachErrorIfNoneExists($),null}return yield Tw4(X),this._sendRequest(Object.assign(Object.assign({},I),{retries:B,attempt:X+1}))}})}_isRateLimited(I){var d;let G=Date.now(),Z=(d=this._leakyBucket[I])!==null&&d!==void 0?d:{count:0,lastRequestTime:G},C=G-Z.lastRequestTime,W=Math.floor(C*Lw4);if(Z.count=Math.max(0,Z.count-W),Z.count>=Bm1)return!0;return Z.count+=1,Z.lastRequestTime=G,this._leakyBucket[I]=Z,!1}_getPopulatedURL(I){var d;return Qz(this,void 0,void 0,function*(){let G=(d=I.fallbackUrl)!==null&&d!==void 0?d:I.urlConfig.getUrl();if(I.urlConfig.endpoint===fw.Endpoint._initialize||I.urlConfig.endpoint===fw.Endpoint._download_config_specs)this._lastUsedInitUrl=G;let Z=Object.assign({[fw.NetworkParam.SdkKey]:I.sdkKey,[fw.NetworkParam.SdkType]:Gm1.SDKType._get(I.sdkKey),[fw.NetworkParam.SdkVersion]:Cm1.SDK_VERSION,[fw.NetworkParam.Time]:String(Date.now()),[fw.NetworkParam.SessionID]:Zm1.SessionID.get(I.sdkKey)},I.params),C=Object.keys(Z).map((W)=>{return`${encodeURIComponent(W)}=${encodeURIComponent(Z[W])}`}).join("&");return`${G}${C?`?${C}`:""}`})}_getPopulatedBody(I,d){return Qz(this,void 0,void 0,function*(){let{sdkKey:G,fallbackUrl:Z}=I,C=qw4.StableID.get(G),W=Zm1.SessionID.get(G),w=Gm1.SDKType._get(G);return JSON.stringify(Object.assign(Object.assign({},d),{statsigMetadata:Object.assign(Object.assign({},Cm1.StatsigMetadataProvider.get()),{stableID:C,sessionID:W,sdkType:w,fallbackUrl:Z})}))})}_attemptToEncodeString(I,d){var G,Z;let C=fw4._getWindowSafe();if(this._options.disableStatsigEncoding||zw4._getStatsigGlobalFlag("no-encode")!=null||!(C===null||C===void 0?void 0:C.btoa))return d;try{let W=(G=C.btoa(d).split("").reverse().join(""))!==null&&G!==void 0?G:d;return I.params=Object.assign(Object.assign({},(Z=I.params)!==null&&Z!==void 0?Z:{}),{[fw.NetworkParam.StatsigEncoded]:"1"}),W}catch(W){return Fb.Log.warn(`Request encoding failed for ${I.urlConfig.getUrl()}`),d}}_getInternalRequestArgs(I,d){let G=this._fallbackResolver.getActiveFallbackUrl(d.sdkKey,d.urlConfig);return Object.assign(Object.assign({},d),{method:I,fallbackUrl:G})}}fz.NetworkCore=Am1;var Wm1=(I)=>{if(!I.sdkKey)return Fb.Log.warn("Unable to make request without an SDK key"),!1;return!0};function Pw4(I,d){if((I===null||I===void 0?void 0:I.signal.aborted)&&typeof I.signal.reason==="string")return I.signal.reason;if(typeof d==="string")return d;if(d instanceof Error)return`${d.name}: ${d.message}`;return"Unknown Error"}function $w4(I){return(I===null||I===void 0?void 0:I.signal.aborted)&&typeof I.signal.reason==="string"&&I.signal.reason.includes("Timeout")||!1}function uw4(I,d){if(I.urlConfig.endpoint!==fw.Endpoint._initialize)return;p21.Diagnostics._markInitNetworkReqStart(I.sdkKey,{attempt:d})}function wm1(I,d,G,Z,C){if(I.urlConfig.endpoint!==fw.Endpoint._initialize)return;p21.Diagnostics._markInitNetworkReqEnd(I.sdkKey,p21.Diagnostics._getDiagnosticsData(d,G,Z,C))}function Tw4(I){return Qz(this,void 0,void 0,function*(){yield new Promise((d)=>setTimeout(d,Math.min(Ew4*(I*I),Mw4)))})}});var Ym1=Y((Xm1)=>{Object.defineProperty(Xm1,"__esModule",{value:!0})});var Dm1=Y((_m1)=>{Object.defineProperty(_m1,"__esModule",{value:!0})});var Fm1=Y((qz)=>{var Ow4=qz&&qz.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(qz,"__esModule",{value:!0});qz.StatsigClientBase=void 0;hF();var mw4=hF(),lw4=b21(),bw4=u21(),i21=q7(),hw4=h21(),jw4=jF(),kw4=Hb(),gb=bA(),xw4=3000;class Hm1{constructor(I,d,G,Z){var C;this.loadingStatus="Uninitialized",this._initializePromise=null,this._listeners={};let W=this.$emt.bind(this);(Z===null||Z===void 0?void 0:Z.logLevel)!=null&&(i21.Log.level=Z.logLevel),(Z===null||Z===void 0?void 0:Z.disableStorage)&&gb.Storage._setDisabled(!0),(Z===null||Z===void 0?void 0:Z.initialSessionID)&&kw4.StatsigSession.overrideInitialSessionID(Z.initialSessionID,I),(Z===null||Z===void 0?void 0:Z.storageProvider)&&gb.Storage._setProvider(Z.storageProvider),this._sdkKey=I,this._options=Z!==null&&Z!==void 0?Z:{},this._memoCache={},this.overrideAdapter=(C=Z===null||Z===void 0?void 0:Z.overrideAdapter)!==null&&C!==void 0?C:null,this._logger=new bw4.EventLogger(I,W,G,Z),this._errorBoundary=new lw4.ErrorBoundary(I,Z,W),this._errorBoundary.wrap(this),this._errorBoundary.wrap(d),this._errorBoundary.wrap(this._logger),G.setErrorBoundary(this._errorBoundary),this.dataAdapter=d,this.dataAdapter.attach(I,Z),this.storageProvider=gb.Storage,this._primeReadyRipcord(),cw4(I,this)}updateRuntimeOptions(I){if(I.disableLogging!=null)this._options.disableLogging=I.disableLogging,this._logger.setLoggingDisabled(I.disableLogging);if(I.disableStorage!=null)this._options.disableStorage=I.disableStorage,gb.Storage._setDisabled(I.disableStorage)}flush(){return this._logger.flush()}shutdown(){return Ow4(this,void 0,void 0,function*(){this.$emt({name:"pre_shutdown"}),this._setStatus("Uninitialized",null),this._initializePromise=null,yield this._logger.stop()})}on(I,d){if(!this._listeners[I])this._listeners[I]=[];this._listeners[I].push(d)}off(I,d){if(this._listeners[I]){let G=this._listeners[I].indexOf(d);if(G!==-1)this._listeners[I].splice(G,1)}}$on(I,d){d.__isInternal=!0,this.on(I,d)}$emt(I){var d;let G=(Z)=>{try{Z(I)}catch(C){if(Z.__isInternal===!0){this._errorBoundary.logError(`__emit:${I.name}`,C);return}i21.Log.error("An error occurred in a StatsigClientEvent listener. This is not an issue with Statsig.",I)}};if(this._listeners[I.name])this._listeners[I.name].forEach((Z)=>G(Z));(d=this._listeners["*"])===null||d===void 0||d.forEach(G)}_setStatus(I,d){this.loadingStatus=I,this._memoCache={},this.$emt({name:"values_updated",status:I,values:d})}_enqueueExposure(I,d,G){if((G===null||G===void 0?void 0:G.disableExposureLog)===!0){this._logger.incrementNonExposureCount(I);return}this._logger.enqueue(d)}_memoize(I,d){return(G,Z)=>{if(this._options.disableEvaluationMemoization)return d(G,Z);let C=hw4.createMemoKey(I,G,Z);if(!C)return d(G,Z);if(!(C in this._memoCache)){if(Object.keys(this._memoCache).length>=xw4)this._memoCache={};this._memoCache[C]=d(G,Z)}return this._memoCache[C]}}}qz.StatsigClientBase=Hm1;function cw4(I,d){var G;if(jw4._isServerEnv())return;let Z=mw4._getStatsigGlobal(),C=(G=Z.instances)!==null&&G!==void 0?G:{},W=d;if(C[I]!=null)i21.Log.warn("Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys.");if(C[I]=W,!Z.firstInstance)Z.firstInstance=W;Z.instances=C,__STATSIG__=Z}});var Km1=Y((gm1)=>{Object.defineProperty(gm1,"__esModule",{value:!0});gm1.DataAdapterCachePrefix=void 0;gm1.DataAdapterCachePrefix="statsig.cached"});var zm1=Y((Nm1)=>{Object.defineProperty(Nm1,"__esModule",{value:!0})});var fm1=Y((Qm1)=>{Object.defineProperty(Qm1,"__esModule",{value:!0})});var vm1=Y((Rm1)=>{Object.defineProperty(Rm1,"__esModule",{value:!0});Rm1._makeTypedGet=Rm1._mergeOverride=Rm1._makeLayer=Rm1._makeExperiment=Rm1._makeDynamicConfig=Rm1._makeFeatureGate=void 0;var pw4=q7(),iw4=al(),nw4="default";function n21(I,d,G,Z){var C;return{name:I,details:d,ruleID:(C=G===null||G===void 0?void 0:G.rule_id)!==null&&C!==void 0?C:nw4,__evaluation:G,value:Z}}function rw4(I,d,G){return n21(I,d,G,(G===null||G===void 0?void 0:G.value)===!0)}Rm1._makeFeatureGate=rw4;function qm1(I,d,G){var Z;let C=(Z=G===null||G===void 0?void 0:G.value)!==null&&Z!==void 0?Z:{};return Object.assign(Object.assign({},n21(I,d,G,C)),{get:Jb(I,G===null||G===void 0?void 0:G.value)})}Rm1._makeDynamicConfig=qm1;function aw4(I,d,G){var Z;let C=qm1(I,d,G);return Object.assign(Object.assign({},C),{groupName:(Z=G===null||G===void 0?void 0:G.group_name)!==null&&Z!==void 0?Z:null})}Rm1._makeExperiment=aw4;function sw4(I,d,G,Z){var C,W;return Object.assign(Object.assign({},n21(I,d,G,void 0)),{get:Jb(I,G===null||G===void 0?void 0:G.value,Z),groupName:(C=G===null||G===void 0?void 0:G.group_name)!==null&&C!==void 0?C:null,__value:(W=G===null||G===void 0?void 0:G.value)!==null&&W!==void 0?W:{}})}Rm1._makeLayer=sw4;function ow4(I,d,G,Z){return Object.assign(Object.assign(Object.assign({},I),d),{get:Jb(I.name,G,Z)})}Rm1._mergeOverride=ow4;function Jb(I,d,G){return(Z,C)=>{var W;let w=(W=d===null||d===void 0?void 0:d[Z])!==null&&W!==void 0?W:null;if(w==null)return C!==null&&C!==void 0?C:null;if(C!=null&&!iw4._isTypeMatch(w,C))return pw4.Log.warn(`Parameter type mismatch. '${I}.${Z}' was found to be type '${typeof w}' but fallback/return type is '${typeof C}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`),C!==null&&C!==void 0?C:null;return G===null||G===void 0||G(Z),w}}Rm1._makeTypedGet=Jb});var Mm1=Y((Em1)=>{Object.defineProperty(Em1,"__esModule",{value:!0})});var ym1=Y((Sm1)=>{Object.defineProperty(Sm1,"__esModule",{value:!0});Sm1.UPDATE_DETAIL_ERROR_MESSAGES=Sm1.createUpdateDetails=void 0;var ZB4=(I,d,G,Z,C,W)=>{return{duration:G,source:d,success:I,error:Z,sourceUrl:C,warnings:W}};Sm1.createUpdateDetails=ZB4;Sm1.UPDATE_DETAIL_ERROR_MESSAGES={NO_NETWORK_DATA:"No data was returned from the network. This may be due to a network timeout if a timeout value was specified in the options or ad blocker error."}});var Tm1=Y(($m1)=>{Object.defineProperty($m1,"__esModule",{value:!0});$m1.SDKFlags=void 0;var Pm1={};$m1.SDKFlags={setFlags:(I,d)=>{Pm1[I]=d},get:(I,d)=>{var G,Z;return(Z=(G=Pm1[I])===null||G===void 0?void 0:G[d])!==null&&Z!==void 0?Z:!1}}});var JY=Y((n2)=>{var WB4=n2&&n2.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),l4=n2&&n2.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))WB4(d,I,G)};Object.defineProperty(n2,"__esModule",{value:!0});n2.Storage=n2.Log=n2.EventLogger=n2.Diagnostics=void 0;hF();var wB4=rl();Object.defineProperty(n2,"Diagnostics",{enumerable:!0,get:function(){return wB4.Diagnostics}});var BB4=u21();Object.defineProperty(n2,"EventLogger",{enumerable:!0,get:function(){return BB4.EventLogger}});var Om1=q7();Object.defineProperty(n2,"Log",{enumerable:!0,get:function(){return Om1.Log}});var AB4=ME(),VB4=bA();Object.defineProperty(n2,"Storage",{enumerable:!0,get:function(){return VB4.Storage}});l4(hF(),n2);l4(qE(),n2);l4(WO1(),n2);l4(fO1(),n2);l4(rl(),n2);l4(RO1(),n2);l4(b21(),n2);l4(PO1(),n2);l4(uO1(),n2);l4(Hz(),n2);l4(OO1(),n2);l4(q7(),n2);l4(h21(),n2);l4(RE(),n2);l4(Vm1(),n2);l4(Ym1(),n2);l4(Dm1(),n2);l4(jF(),n2);l4(_b(),n2);l4(Hb(),n2);l4(Ab(),n2);l4(Fm1(),n2);l4(c21(),n2);l4(Km1(),n2);l4(v21(),n2);l4(ME(),n2);l4(zm1(),n2);l4(fm1(),n2);l4(vm1(),n2);l4(Mm1(),n2);l4(O21(),n2);l4(bA(),n2);l4(m21(),n2);l4(al(),n2);l4(S21(),n2);l4(wb(),n2);l4(Cb(),n2);l4(ym1(),n2);l4(Tm1(),n2);__STATSIG__=Object.assign(Object.assign({},__STATSIG__!==null&&__STATSIG__!==void 0?__STATSIG__:{}),{Log:Om1.Log,SDK_VERSION:AB4.SDK_VERSION})});var bm1=Y((lm1)=>{Object.defineProperty(lm1,"__esModule",{value:!0});var KY=JY();class mm1{constructor(I){this._sdkKey=I,this._rawValues=null,this._values=null,this._source="Uninitialized",this._lcut=0,this._receivedAt=0,this._bootstrapMetadata=null,this._warnings=new Set}reset(){this._values=null,this._rawValues=null,this._source="Loading",this._lcut=0,this._receivedAt=0,this._bootstrapMetadata=null}finalize(){if(this._values)return;this._source="NoValues"}getValues(){return this._rawValues?KY._typedJsonParse(this._rawValues,"has_updates","EvaluationStoreValues"):null}setValues(I,d){if(!I)return!1;let G=KY._typedJsonParse(I.data,"has_updates","EvaluationResponse");if(G==null)return!1;if(this._source=I.source,(G===null||G===void 0?void 0:G.has_updates)!==!0)return!0;if(this._rawValues=I.data,this._lcut=G.time,this._receivedAt=I.receivedAt,this._values=G,this._bootstrapMetadata=this._extractBootstrapMetadata(I.source,G),I.source&&G.user)this._setWarningState(d,G);if(G.sdk_flags)KY.SDKFlags.setFlags(this._sdkKey,G.sdk_flags);else KY.SDKFlags.setFlags(this._sdkKey,{});return!0}getWarnings(){if(this._warnings.size===0)return;return Array.from(this._warnings)}getGate(I){var d;return this._getDetailedStoreResult((d=this._values)===null||d===void 0?void 0:d.feature_gates,I)}getConfig(I){var d;return this._getDetailedStoreResult((d=this._values)===null||d===void 0?void 0:d.dynamic_configs,I)}getLayer(I){var d;return this._getDetailedStoreResult((d=this._values)===null||d===void 0?void 0:d.layer_configs,I)}getParamStore(I){var d;return this._getDetailedStoreResult((d=this._values)===null||d===void 0?void 0:d.param_stores,I)}getSource(){return this._source}_extractBootstrapMetadata(I,d){if(I!=="Bootstrap")return null;let G={};if(d.user)G.user=d.user;if(d.sdkInfo)G.generatorSDKInfo=d.sdkInfo;return G.lcut=d.time,G}_getDetailedStoreResult(I,d){let G=null;if(I)G=I[d]?I[d]:I[KY._DJB2(d)];return{result:G,details:this._getDetails(G==null)}}_setWarningState(I,d){var G;let Z=KY.StableID.get(this._sdkKey);if(((G=I.customIDs)===null||G===void 0?void 0:G.stableID)!==Z){this._warnings.add("StableIDMismatch");return}if("user"in d){let C=d.user;if(KY._getFullUserHash(I)!==KY._getFullUserHash(C))this._warnings.add("PartialUserMatch")}}getCurrentSourceDetails(){if(this._source==="Uninitialized"||this._source==="NoValues")return{reason:this._source};let I={reason:this._source,lcut:this._lcut,receivedAt:this._receivedAt};if(this._warnings.size>0)I.warnings=Array.from(this._warnings);return I}_getDetails(I){var d,G;let Z=this.getCurrentSourceDetails(),C=Z.reason,W=(d=Z.warnings)!==null&&d!==void 0?d:[];if(this._source==="Bootstrap"&&W.length>0)C=C+W[0];if(C!=="Uninitialized"&&C!=="NoValues")C=`${C}:${I?"Unrecognized":"Recognized"}`;let w=this._source==="Bootstrap"?(G=this._bootstrapMetadata)!==null&&G!==void 0?G:void 0:void 0;if(w)Z.bootstrapMetadata=w;return Object.assign(Object.assign({},Z),{reason:C})}}lm1.default=mm1});var xm1=Y((jm1)=>{Object.defineProperty(jm1,"__esModule",{value:!0});jm1._resolveDeltasResponse=void 0;var hm1=JY(),YB4=2;function _B4(I,d){let G=hm1._typedJsonParse(d,"checksum","DeltasEvaluationResponse");if(!G)return{hadBadDeltaChecksum:!0};let Z=DB4(I,G),C=HB4(Z),W=hm1._DJB2Object({feature_gates:C.feature_gates,dynamic_configs:C.dynamic_configs,layer_configs:C.layer_configs},YB4);if(W!==G.checksumV2)return{hadBadDeltaChecksum:!0,badChecksum:W,badMergedConfigs:C,badFullResponse:G.deltas_full_response};return JSON.stringify(C)}jm1._resolveDeltasResponse=_B4;function DB4(I,d){return Object.assign(Object.assign(Object.assign({},I),d),{feature_gates:Object.assign(Object.assign({},I.feature_gates),d.feature_gates),layer_configs:Object.assign(Object.assign({},I.layer_configs),d.layer_configs),dynamic_configs:Object.assign(Object.assign({},I.dynamic_configs),d.dynamic_configs)})}function HB4(I){let d=I;return r21(I.deleted_gates,d.feature_gates),delete d.deleted_gates,r21(I.deleted_configs,d.dynamic_configs),delete d.deleted_configs,r21(I.deleted_layers,d.layer_configs),delete d.deleted_layers,d}function r21(I,d){I===null||I===void 0||I.forEach((G)=>{delete d[G]})}});var a21=Y((SE)=>{var cm1=SE&&SE.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(SE,"__esModule",{value:!0});var Kb=JY(),FB4=xm1();class pm1 extends Kb.NetworkCore{constructor(I,d){super(I,d);let G=I===null||I===void 0?void 0:I.networkConfig;this._initializeUrlConfig=new Kb.UrlConfiguration(Kb.Endpoint._initialize,G===null||G===void 0?void 0:G.initializeUrl,G===null||G===void 0?void 0:G.api,G===null||G===void 0?void 0:G.initializeFallbackUrls)}fetchEvaluations(I,d,G,Z){return cm1(this,void 0,void 0,function*(){let C=d?Kb._typedJsonParse(d,"has_updates","InitializeResponse"):null,W={user:Z,hash:"djb2",deltasResponseRequested:!1,full_checksum:null};if(C===null||C===void 0?void 0:C.has_updates)W=Object.assign(Object.assign({},W),{sinceTime:C.time,previousDerivedFields:"derived_fields"in C?C.derived_fields:{},deltasResponseRequested:!0,full_checksum:C.full_checksum});return this._fetchEvaluations(I,C,W,G)})}_fetchEvaluations(I,d,G,Z){var C,W;return cm1(this,void 0,void 0,function*(){let w=yield this.post({sdkKey:I,urlConfig:this._initializeUrlConfig,data:G,retries:2,isStatsigEncodable:!0,priority:Z});if((w===null||w===void 0?void 0:w.code)===204)return'{"has_updates": false}';if((w===null||w===void 0?void 0:w.code)!==200)return(C=w===null||w===void 0?void 0:w.body)!==null&&C!==void 0?C:null;if((d===null||d===void 0?void 0:d.has_updates)!==!0||((W=w.body)===null||W===void 0?void 0:W.includes('"is_delta":true'))!==!0||G.deltasResponseRequested!==!0)return w.body;let B=FB4._resolveDeltasResponse(d,w.body);if(typeof B==="string")return B;return this._fetchEvaluations(I,d,Object.assign(Object.assign(Object.assign({},G),B),{deltasResponseRequested:!1}),Z)})}}SE.default=pm1});var am1=Y((nm1)=>{Object.defineProperty(nm1,"__esModule",{value:!0});nm1._makeParamStoreGetter=void 0;var im1=JY(),Nb={disableExposureLog:!0};function zb(I){return I==null||I.disableExposureLog===!1}function s21(I,d){return d!=null&&!im1._isTypeMatch(I,d)}function gB4(I,d){return I.value}function JB4(I,d,G){if(I.getFeatureGate(d.gate_name,zb(G)?void 0:Nb).value)return d.pass_value;return d.fail_value}function KB4(I,d,G,Z){let W=I.getDynamicConfig(d.config_name,Nb).get(d.param_name);if(s21(W,G))return G;if(zb(Z))I.getDynamicConfig(d.config_name);return W}function NB4(I,d,G,Z){let W=I.getExperiment(d.experiment_name,Nb).get(d.param_name);if(s21(W,G))return G;if(zb(Z))I.getExperiment(d.experiment_name);return W}function zB4(I,d,G,Z){let W=I.getLayer(d.layer_name,Nb).get(d.param_name);if(s21(W,G))return G;if(zb(Z))I.getLayer(d.layer_name).get(d.param_name);return W}function QB4(I,d,G){return(Z,C)=>{if(d==null)return C;let W=d[Z];if(W==null||C!=null&&im1._typeOf(C)!==W.param_type)return C;switch(W.ref_type){case"static":return gB4(W,G);case"gate":return JB4(I,W,G);case"dynamic_config":return KB4(I,W,C,G);case"experiment":return NB4(I,W,C,G);case"layer":return zB4(I,W,C,G);default:return C}}}nm1._makeParamStoreGetter=QB4});var om1=Y((Rz)=>{var fB4=Rz&&Rz.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(Rz,"__esModule",{value:!0});Rz.StatsigEvaluationsDataAdapter=void 0;var xF=JY(),qB4=a21();class sm1 extends xF.DataAdapterCore{constructor(){super("EvaluationsDataAdapter","evaluations");this._network=null,this._options=null}attach(I,d){super.attach(I,d),this._network=new qB4.default(d!==null&&d!==void 0?d:{})}getDataAsync(I,d,G){return this._getDataAsyncImpl(I,xF._normalizeUser(d,this._options),G)}prefetchData(I,d){return this._prefetchDataImpl(I,d)}setData(I){let d=xF._typedJsonParse(I,"has_updates","data");if(d&&"user"in d)super.setData(I,d.user);else xF.Log.error("StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.")}setDataLegacy(I,d){super.setData(I,d)}_fetchFromNetwork(I,d,G){var Z;return fB4(this,void 0,void 0,function*(){let C=yield(Z=this._network)===null||Z===void 0?void 0:Z.fetchEvaluations(this._getSdkKey(),I,G===null||G===void 0?void 0:G.priority,d);return C!==null&&C!==void 0?C:null})}_getCacheKey(I){var d;let G=xF._getStorageKey(this._getSdkKey(),I,(d=this._options)===null||d===void 0?void 0:d.customUserCacheKeyFunc);return`${xF.DataAdapterCachePrefix}.${this._cacheSuffix}.${G}`}_isCachedResultValidFor204(I,d){return I.fullUserHash!=null&&I.fullUserHash===xF._getFullUserHash(d)}}Rz.StatsigEvaluationsDataAdapter=sm1});var em1=Y((LE)=>{var o21=LE&&LE.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})};Object.defineProperty(LE,"__esModule",{value:!0});var a4=JY(),RB4=bm1(),UB4=a21(),vB4=am1(),EB4=om1();class Qb extends a4.StatsigClientBase{static instance(I){let d=a4._getStatsigGlobal().instance(I);if(d instanceof Qb)return d;return a4.Log.warn(a4._isServerEnv()?"StatsigClient.instance is not supported in server environments":"Unable to find StatsigClient instance"),new Qb(I!==null&&I!==void 0?I:"",{})}constructor(I,d,G=null){var Z,C;a4.SDKType._setClientType(I,"javascript-client");let W=new UB4.default(G,(B)=>{this.$emt(B)});super(I,(Z=G===null||G===void 0?void 0:G.dataAdapter)!==null&&Z!==void 0?Z:new EB4.StatsigEvaluationsDataAdapter,W,G);this.getFeatureGate=this._memoize(a4.MemoPrefix._gate,this._getFeatureGateImpl.bind(this)),this.getDynamicConfig=this._memoize(a4.MemoPrefix._dynamicConfig,this._getDynamicConfigImpl.bind(this)),this.getExperiment=this._memoize(a4.MemoPrefix._experiment,this._getExperimentImpl.bind(this)),this.getLayer=this._memoize(a4.MemoPrefix._layer,this._getLayerImpl.bind(this)),this.getParameterStore=this._memoize(a4.MemoPrefix._paramStore,this._getParameterStoreImpl.bind(this)),this._store=new RB4.default(I),this._network=W,this._user=this._configureUser(d,G);let w=(C=G===null||G===void 0?void 0:G.plugins)!==null&&C!==void 0?C:[];for(let B of w)B.bind(this)}initializeSync(I){var d;if(this.loadingStatus!=="Uninitialized")return a4.createUpdateDetails(!0,this._store.getSource(),-1,null,null,["MultipleInitializations",...(d=this._store.getWarnings())!==null&&d!==void 0?d:[]]);return this._logger.start(),this.updateUserSync(this._user,I)}initializeAsync(I){return o21(this,void 0,void 0,function*(){if(this._initializePromise)return this._initializePromise;return this._initializePromise=this._initializeAsyncImpl(I),this._initializePromise})}updateUserSync(I,d){var G;let Z=performance.now(),C=[...(G=this._store.getWarnings())!==null&&G!==void 0?G:[]];this._resetForUser(I);let W=this.dataAdapter.getDataSync(this._user);if(W==null)C.push("NoCachedValues");this._store.setValues(W,this._user),this._finalizeUpdate(W);let w=d===null||d===void 0?void 0:d.disableBackgroundCacheRefresh;if(w===!0||w==null&&(W===null||W===void 0?void 0:W.source)==="Bootstrap")return a4.createUpdateDetails(!0,this._store.getSource(),performance.now()-Z,this._errorBoundary.getLastSeenErrorAndReset(),this._network.getLastUsedInitUrlAndReset(),C);return this._runPostUpdate(W!==null&&W!==void 0?W:null,this._user),a4.createUpdateDetails(!0,this._store.getSource(),performance.now()-Z,this._errorBoundary.getLastSeenErrorAndReset(),this._network.getLastUsedInitUrlAndReset(),C)}updateUserAsync(I,d){return o21(this,void 0,void 0,function*(){this._resetForUser(I);let G=this._user;a4.Diagnostics._markInitOverallStart(this._sdkKey);let Z=this.dataAdapter.getDataSync(G);if(this._store.setValues(Z,this._user),this._setStatus("Loading",Z),Z=yield this.dataAdapter.getDataAsync(Z,G,d),G!==this._user)return a4.createUpdateDetails(!1,this._store.getSource(),-1,new Error("User changed during update"),this._network.getLastUsedInitUrlAndReset());let C=!1;if(Z!=null)a4.Diagnostics._markInitProcessStart(this._sdkKey),C=this._store.setValues(Z,this._user),a4.Diagnostics._markInitProcessEnd(this._sdkKey,{success:C});if(this._finalizeUpdate(Z),!C)this._errorBoundary.attachErrorIfNoneExists(a4.UPDATE_DETAIL_ERROR_MESSAGES.NO_NETWORK_DATA),this.$emt({name:"initialization_failure"});a4.Diagnostics._markInitOverallEnd(this._sdkKey,C,this._store.getCurrentSourceDetails());let W=a4.Diagnostics._enqueueDiagnosticsEvent(this._user,this._logger,this._sdkKey,this._options);return a4.createUpdateDetails(C,this._store.getSource(),W,this._errorBoundary.getLastSeenErrorAndReset(),this._network.getLastUsedInitUrlAndReset(),this._store.getWarnings())})}getContext(){return{sdkKey:this._sdkKey,options:this._options,values:this._store.getValues(),user:JSON.parse(JSON.stringify(this._user)),errorBoundary:this._errorBoundary,session:a4.StatsigSession.get(this._sdkKey),stableID:a4.StableID.get(this._sdkKey)}}checkGate(I,d){return this.getFeatureGate(I,d).value}logEvent(I,d,G){let Z=typeof I==="string"?{eventName:I,value:d,metadata:G}:I;this._logger.enqueue(Object.assign(Object.assign({},Z),{user:this._user,time:Date.now()}))}_primeReadyRipcord(){this.$on("error",()=>{this.loadingStatus==="Loading"&&this._finalizeUpdate(null)})}_initializeAsyncImpl(I){return o21(this,void 0,void 0,function*(){if(!a4.Storage.isReady())yield a4.Storage.isReadyResolver();return this._logger.start(),this.updateUserAsync(this._user,I)})}_finalizeUpdate(I){this._store.finalize(),this._setStatus("Ready",I)}_runPostUpdate(I,d){this.dataAdapter.getDataAsync(I,d,{priority:"low"}).catch((G)=>{a4.Log.error("An error occurred after update.",G)})}_resetForUser(I){this._logger.reset(),this._store.reset(),this._user=this._configureUser(I,this._options)}_configureUser(I,d){var G;let Z=a4._normalizeUser(I,d),C=(G=Z.customIDs)===null||G===void 0?void 0:G.stableID;if(C)a4.StableID.setOverride(C,this._sdkKey);return Z}_getFeatureGateImpl(I,d){var G,Z;let{result:C,details:W}=this._store.getGate(I),w=a4._makeFeatureGate(I,W,C),B=(Z=(G=this.overrideAdapter)===null||G===void 0?void 0:G.getGateOverride)===null||Z===void 0?void 0:Z.call(G,w,this._user,d),A=B!==null&&B!==void 0?B:w;return this._enqueueExposure(I,a4._createGateExposure(this._user,A),d),this.$emt({name:"gate_evaluation",gate:A}),A}_getDynamicConfigImpl(I,d){var G,Z;let{result:C,details:W}=this._store.getConfig(I),w=a4._makeDynamicConfig(I,W,C),B=(Z=(G=this.overrideAdapter)===null||G===void 0?void 0:G.getDynamicConfigOverride)===null||Z===void 0?void 0:Z.call(G,w,this._user,d),A=B!==null&&B!==void 0?B:w;return this._enqueueExposure(I,a4._createConfigExposure(this._user,A),d),this.$emt({name:"dynamic_config_evaluation",dynamicConfig:A}),A}_getExperimentImpl(I,d){var G,Z;let{result:C,details:W}=this._store.getConfig(I),w=a4._makeExperiment(I,W,C),B=(Z=(G=this.overrideAdapter)===null||G===void 0?void 0:G.getExperimentOverride)===null||Z===void 0?void 0:Z.call(G,w,this._user,d),A=B!==null&&B!==void 0?B:w;return this._enqueueExposure(I,a4._createConfigExposure(this._user,A),d),this.$emt({name:"experiment_evaluation",experiment:A}),A}_getLayerImpl(I,d){var G,Z,C;let{result:W,details:w}=this._store.getLayer(I),B=a4._makeLayer(I,w,W),A=(Z=(G=this.overrideAdapter)===null||G===void 0?void 0:G.getLayerOverride)===null||Z===void 0?void 0:Z.call(G,B,this._user,d);if(d===null||d===void 0?void 0:d.disableExposureLog)this._logger.incrementNonExposureCount(I);let V=a4._mergeOverride(B,A,(C=A===null||A===void 0?void 0:A.__value)!==null&&C!==void 0?C:B.__value,(X)=>{if(d===null||d===void 0?void 0:d.disableExposureLog)return;this._enqueueExposure(I,a4._createLayerParameterExposure(this._user,V,X),d)});return this.$emt({name:"layer_evaluation",layer:V}),V}_getParameterStoreImpl(I,d){let{result:G,details:Z}=this._store.getParamStore(I);return this._logger.incrementNonExposureCount(I),{name:I,details:Z,__configuration:G,get:vB4._makeParamStoreGetter(this,G,d)}}}LE.default=Qb});var Il1=Y((qw)=>{var MB4=qw&&qw.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),SB4=qw&&qw.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))MB4(d,I,G)};Object.defineProperty(qw,"__esModule",{value:!0});qw.StatsigClient=void 0;var tm1=em1();qw.StatsigClient=tm1.default;SB4(JY(),qw);__STATSIG__=Object.assign(Object.assign({},__STATSIG__!==null&&__STATSIG__!==void 0?__STATSIG__:{}),{StatsigClient:tm1.default});qw.default=__STATSIG__});var ll1=Y((Pv9,ml1)=>{var m3={};ml1.exports=m3;function Ol1(I){return I<0?-1:1}function DA4(I){if(I%1===0.5&&(I&1)===0)return Math.floor(I);else return Math.round(I)}function zY(I,d){if(!d.unsigned)--I;let G=d.unsigned?0:-Math.pow(2,I),Z=Math.pow(2,I)-1,C=d.moduloBitLength?Math.pow(2,d.moduloBitLength):Math.pow(2,I),W=d.moduloBitLength?Math.pow(2,d.moduloBitLength-1):Math.pow(2,I-1);return function(w,B){if(!B)B={};let A=+w;if(B.enforceRange){if(!Number.isFinite(A))throw new TypeError("Argument is not a finite number");if(A=Ol1(A)*Math.floor(Math.abs(A)),AZ)throw new TypeError("Argument is not in byte range");return A}if(!isNaN(A)&&B.clamp){if(A=DA4(A),AZ)A=Z;return A}if(!Number.isFinite(A)||A===0)return 0;if(A=Ol1(A)*Math.floor(Math.abs(A)),A=A%C,!d.unsigned&&A>=W)return A-C;else if(d.unsigned){if(A<0)A+=C;else if(A===-0)return 0}return A}}m3.void=function(){return};m3.boolean=function(I){return!!I};m3.byte=zY(8,{unsigned:!1});m3.octet=zY(8,{unsigned:!0});m3.short=zY(16,{unsigned:!1});m3["unsigned short"]=zY(16,{unsigned:!0});m3.long=zY(32,{unsigned:!1});m3["unsigned long"]=zY(32,{unsigned:!0});m3["long long"]=zY(32,{unsigned:!1,moduloBitLength:64});m3["unsigned long long"]=zY(32,{unsigned:!0,moduloBitLength:64});m3.double=function(I){let d=+I;if(!Number.isFinite(d))throw new TypeError("Argument is not a finite floating-point value");return d};m3["unrestricted double"]=function(I){let d=+I;if(isNaN(d))throw new TypeError("Argument is NaN");return d};m3.float=m3.double;m3["unrestricted float"]=m3["unrestricted double"];m3.DOMString=function(I,d){if(!d)d={};if(d.treatNullAsEmptyString&&I===null)return"";return String(I)};m3.ByteString=function(I,d){let G=String(I),Z=void 0;for(let C=0;(Z=G.codePointAt(C))!==void 0;++C)if(Z>255)throw new TypeError("Argument is not a valid bytestring");return G};m3.USVString=function(I){let d=String(I),G=d.length,Z=[];for(let C=0;C57343)Z.push(String.fromCodePoint(W));else if(56320<=W&&W<=57343)Z.push(String.fromCodePoint(65533));else if(C===G-1)Z.push(String.fromCodePoint(65533));else{let w=d.charCodeAt(C+1);if(56320<=w&&w<=57343){let B=W&1023,A=w&1023;Z.push(String.fromCodePoint(65536+1024*B+A)),++C}else Z.push(String.fromCodePoint(65533))}}return Z.join("")};m3.Date=function(I,d){if(!(I instanceof Date))throw new TypeError("Argument is not a Date object");if(isNaN(I))return;return I};m3.RegExp=function(I,d){if(!(I instanceof RegExp))I=new RegExp(I);return I}});var jl1=Y((HA4,QY)=>{HA4.mixin=function I(d,G){let Z=Object.getOwnPropertyNames(G);for(let C=0;C{KA4.exports=[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]});var rl1=Y((qA4,Ob)=>{var cl1=B1("punycode"),xl1=kl1(),Lz={TRANSITIONAL:0,NONTRANSITIONAL:1};function pl1(I){return I.split("\x00").map(function(d){return d.normalize("NFC")}).join("\x00")}function il1(I){var d=0,G=xl1.length-1;while(d<=G){var Z=Math.floor((d+G)/2),C=xl1[Z];if(C[0][0]<=I&&C[0][1]>=I)return C;else if(C[0][0]>I)G=Z-1;else d=Z+1}return null}var NA4=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function nl1(I){return I.replace(NA4,"_").length}function zA4(I,d,G){var Z=!1,C="",W=nl1(I);for(var w=0;w253||w.length===0)C.error=!0;for(var B=0;B63||W.length===0){C.error=!0;break}}if(C.error)return null;return W.join(".")};qA4.toUnicode=function(I,d){var G=Tb(I,d,Lz.NONTRANSITIONAL);return{domain:G.string,error:G.error}};qA4.PROCESSING_OPTIONS=Lz});var Ew=Y((eA4,nd)=>{var yz=B1("punycode"),al1=rl1(),Ib1={ftp:21,file:null,gopher:70,http:80,https:443,ws:80,wss:443},s4=Symbol("failure");function sl1(I){return yz.ucs2.decode(I).length}function ol1(I,d){let G=I[d];return isNaN(G)?void 0:String.fromCodePoint(G)}function mE(I){return I>=48&&I<=57}function lE(I){return I>=65&&I<=90||I>=97&&I<=122}function EA4(I){return lE(I)||mE(I)}function QC(I){return mE(I)||I>=65&&I<=70||I>=97&&I<=102}function el1(I){return I==="."||I.toLowerCase()==="%2e"}function MA4(I){return I=I.toLowerCase(),I===".."||I==="%2e."||I===".%2e"||I==="%2e%2e"}function SA4(I,d){return lE(I)&&(d===58||d===124)}function db1(I){return I.length===2&&lE(I.codePointAt(0))&&(I[1]===":"||I[1]==="|")}function LA4(I){return I.length===2&&lE(I.codePointAt(0))&&I[1]===":"}function yA4(I){return I.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/)!==-1}function PA4(I){return I.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/)!==-1}function V41(I){return Ib1[I]!==void 0}function c6(I){return V41(I.scheme)}function $A4(I){return Ib1[I]}function Gb1(I){let d=I.toString(16).toUpperCase();if(d.length===1)d="0"+d;return"%"+d}function uA4(I){let d=new Buffer(I),G="";for(let Z=0;Z126}var OA4=new Set([32,34,35,60,62,63,96,123,125]);function Zb1(I){return mb(I)||OA4.has(I)}var mA4=new Set([47,58,59,61,64,91,92,93,94,124]);function Y41(I){return Zb1(I)||mA4.has(I)}function iF(I,d){let G=String.fromCodePoint(I);if(d(I))return uA4(G);return G}function lA4(I){let d=10;if(I.length>=2&&I.charAt(0)==="0"&&I.charAt(1).toLowerCase()==="x")I=I.substring(2),d=16;else if(I.length>=2&&I.charAt(0)==="0")I=I.substring(1),d=8;if(I==="")return 0;if((d===10?/[^0-9]/:d===16?/[^0-9A-Fa-f]/:/[^0-7]/).test(I))return s4;return parseInt(I,d)}function bA4(I){let d=I.split(".");if(d[d.length-1]===""){if(d.length>1)d.pop()}if(d.length>4)return I;let G=[];for(let W of d){if(W==="")return I;let w=lA4(W);if(w===s4)return I;G.push(w)}for(let W=0;W255)return s4;if(G[G.length-1]>=Math.pow(256,5-G.length))return s4;let Z=G.pop(),C=0;for(let W of G)Z+=W*Math.pow(256,3-C),++C;return Z}function hA4(I){let d="",G=I;for(let Z=1;Z<=4;++Z){if(d=String(G%256)+d,Z!==4)d="."+d;G=Math.floor(G/256)}return d}function jA4(I){let d=[0,0,0,0,0,0,0,0],G=0,Z=null,C=0;if(I=yz.ucs2.decode(I),I[C]===58){if(I[C+1]!==58)return s4;C+=2,++G,Z=G}while(C6)return s4;let B=0;while(I[C]!==void 0){let A=null;if(B>0)if(I[C]===46&&B<4)++C;else return s4;if(!mE(I[C]))return s4;while(mE(I[C])){let V=parseInt(ol1(I,C));if(A===null)A=V;else if(A===0)return s4;else A=A*10+V;if(A>255)return s4;++C}if(d[G]=d[G]*256+A,++B,B===2||B===4)++G}if(B!==4)return s4;break}else if(I[C]===58){if(++C,I[C]===void 0)return s4}else if(I[C]!==void 0)return s4;d[G]=W,++G}if(Z!==null){let W=G-Z;G=7;while(G!==0&&W>0){let w=d[Z+W-1];d[Z+W-1]=d[G],d[G]=w,--G,--W}}else if(Z===null&&G!==8)return s4;return d}function kA4(I){let d="",Z=cA4(I).idx,C=!1;for(let W=0;W<=7;++W){if(C&&I[W]===0)continue;else if(C)C=!1;if(Z===W){d+=W===0?"::":":",C=!0;continue}if(d+=I[W].toString(16),W!==7)d+=":"}return d}function X41(I,d){if(I[0]==="["){if(I[I.length-1]!=="]")return s4;return jA4(I.substring(1,I.length-1))}if(!d)return xA4(I);let G=TA4(I),Z=al1.toASCII(G,!1,al1.PROCESSING_OPTIONS.NONTRANSITIONAL,!1);if(Z===null)return s4;if(yA4(Z))return s4;let C=bA4(Z);if(typeof C==="number"||C===s4)return C;return Z}function xA4(I){if(PA4(I))return s4;let d="",G=yz.ucs2.decode(I);for(let Z=0;ZG)d=Z,G=C;Z=null,C=0}else{if(Z===null)Z=W;++C}if(C>G)d=Z,G=C;return{idx:d,len:G}}function _41(I){if(typeof I==="number")return hA4(I);if(I instanceof Array)return"["+kA4(I)+"]";return I}function pA4(I){return I.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g,"")}function iA4(I){return I.replace(/\u0009|\u000A|\u000D/g,"")}function Cb1(I){let d=I.path;if(d.length===0)return;if(I.scheme==="file"&&d.length===1&&rA4(d[0]))return;d.pop()}function Wb1(I){return I.username!==""||I.password!==""}function nA4(I){return I.host===null||I.host===""||I.cannotBeABaseURL||I.scheme==="file"}function rA4(I){return/^[A-Za-z]:$/.test(I)}function l3(I,d,G,Z,C){if(this.pointer=0,this.input=I,this.base=d||null,this.encodingOverride=G||"utf-8",this.stateOverride=C,this.url=Z,this.failure=!1,this.parseError=!1,!this.url){this.url={scheme:"",username:"",password:"",host:null,port:null,path:[],query:null,fragment:null,cannotBeABaseURL:!1};let w=pA4(this.input);if(w!==this.input)this.parseError=!0;this.input=w}let W=iA4(this.input);if(W!==this.input)this.parseError=!0;this.input=W,this.state=C||"scheme start",this.buffer="",this.atFlag=!1,this.arrFlag=!1,this.passwordTokenSeenFlag=!1,this.input=yz.ucs2.decode(this.input);for(;this.pointer<=this.input.length;++this.pointer){let w=this.input[this.pointer],B=isNaN(w)?void 0:String.fromCodePoint(w),A=this["parse "+this.state](w,B);if(!A)break;else if(A===s4){this.failure=!0;break}}}l3.prototype["parse scheme start"]=function I(d,G){if(lE(d))this.buffer+=G.toLowerCase(),this.state="scheme";else if(!this.stateOverride)this.state="no scheme",--this.pointer;else return this.parseError=!0,s4;return!0};l3.prototype["parse scheme"]=function I(d,G){if(EA4(d)||d===43||d===45||d===46)this.buffer+=G.toLowerCase();else if(d===58){if(this.stateOverride){if(c6(this.url)&&!V41(this.buffer))return!1;if(!c6(this.url)&&V41(this.buffer))return!1;if((Wb1(this.url)||this.url.port!==null)&&this.buffer==="file")return!1;if(this.url.scheme==="file"&&(this.url.host===""||this.url.host===null))return!1}if(this.url.scheme=this.buffer,this.buffer="",this.stateOverride)return!1;if(this.url.scheme==="file"){if(this.input[this.pointer+1]!==47||this.input[this.pointer+2]!==47)this.parseError=!0;this.state="file"}else if(c6(this.url)&&this.base!==null&&this.base.scheme===this.url.scheme)this.state="special relative or authority";else if(c6(this.url))this.state="special authority slashes";else if(this.input[this.pointer+1]===47)this.state="path or authority",++this.pointer;else this.url.cannotBeABaseURL=!0,this.url.path.push(""),this.state="cannot-be-a-base-URL path"}else if(!this.stateOverride)this.buffer="",this.state="no scheme",this.pointer=-1;else return this.parseError=!0,s4;return!0};l3.prototype["parse no scheme"]=function I(d){if(this.base===null||this.base.cannotBeABaseURL&&d!==35)return s4;else if(this.base.cannotBeABaseURL&&d===35)this.url.scheme=this.base.scheme,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.url.cannotBeABaseURL=!0,this.state="fragment";else if(this.base.scheme==="file")this.state="file",--this.pointer;else this.state="relative",--this.pointer;return!0};l3.prototype["parse special relative or authority"]=function I(d){if(d===47&&this.input[this.pointer+1]===47)this.state="special authority ignore slashes",++this.pointer;else this.parseError=!0,this.state="relative",--this.pointer;return!0};l3.prototype["parse path or authority"]=function I(d){if(d===47)this.state="authority";else this.state="path",--this.pointer;return!0};l3.prototype["parse relative"]=function I(d){if(this.url.scheme=this.base.scheme,isNaN(d))this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query=this.base.query;else if(d===47)this.state="relative slash";else if(d===63)this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query="",this.state="query";else if(d===35)this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.state="fragment";else if(c6(this.url)&&d===92)this.parseError=!0,this.state="relative slash";else this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(0,this.base.path.length-1),this.state="path",--this.pointer;return!0};l3.prototype["parse relative slash"]=function I(d){if(c6(this.url)&&(d===47||d===92)){if(d===92)this.parseError=!0;this.state="special authority ignore slashes"}else if(d===47)this.state="authority";else this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.state="path",--this.pointer;return!0};l3.prototype["parse special authority slashes"]=function I(d){if(d===47&&this.input[this.pointer+1]===47)this.state="special authority ignore slashes",++this.pointer;else this.parseError=!0,this.state="special authority ignore slashes",--this.pointer;return!0};l3.prototype["parse special authority ignore slashes"]=function I(d){if(d!==47&&d!==92)this.state="authority",--this.pointer;else this.parseError=!0;return!0};l3.prototype["parse authority"]=function I(d,G){if(d===64){if(this.parseError=!0,this.atFlag)this.buffer="%40"+this.buffer;this.atFlag=!0;let Z=sl1(this.buffer);for(let C=0;CMath.pow(2,16)-1)return this.parseError=!0,s4;this.url.port=Z===$A4(this.url.scheme)?null:Z,this.buffer=""}if(this.stateOverride)return!1;this.state="path start",--this.pointer}else return this.parseError=!0,s4;return!0};var aA4=new Set([47,92,63,35]);l3.prototype["parse file"]=function I(d){if(this.url.scheme="file",d===47||d===92){if(d===92)this.parseError=!0;this.state="file slash"}else if(this.base!==null&&this.base.scheme==="file")if(isNaN(d))this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query=this.base.query;else if(d===63)this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query="",this.state="query";else if(d===35)this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.state="fragment";else{if(this.input.length-this.pointer-1===0||!SA4(d,this.input[this.pointer+1])||this.input.length-this.pointer-1>=2&&!aA4.has(this.input[this.pointer+2]))this.url.host=this.base.host,this.url.path=this.base.path.slice(),Cb1(this.url);else this.parseError=!0;this.state="path",--this.pointer}else this.state="path",--this.pointer;return!0};l3.prototype["parse file slash"]=function I(d){if(d===47||d===92){if(d===92)this.parseError=!0;this.state="file host"}else{if(this.base!==null&&this.base.scheme==="file")if(LA4(this.base.path[0]))this.url.path.push(this.base.path[0]);else this.url.host=this.base.host;this.state="path",--this.pointer}return!0};l3.prototype["parse file host"]=function I(d,G){if(isNaN(d)||d===47||d===92||d===63||d===35)if(--this.pointer,!this.stateOverride&&db1(this.buffer))this.parseError=!0,this.state="path";else if(this.buffer===""){if(this.url.host="",this.stateOverride)return!1;this.state="path start"}else{let Z=X41(this.buffer,c6(this.url));if(Z===s4)return s4;if(Z==="localhost")Z="";if(this.url.host=Z,this.stateOverride)return!1;this.buffer="",this.state="path start"}else this.buffer+=G;return!0};l3.prototype["parse path start"]=function I(d){if(c6(this.url)){if(d===92)this.parseError=!0;if(this.state="path",d!==47&&d!==92)--this.pointer}else if(!this.stateOverride&&d===63)this.url.query="",this.state="query";else if(!this.stateOverride&&d===35)this.url.fragment="",this.state="fragment";else if(d!==void 0){if(this.state="path",d!==47)--this.pointer}return!0};l3.prototype["parse path"]=function I(d){if(isNaN(d)||d===47||c6(this.url)&&d===92||!this.stateOverride&&(d===63||d===35)){if(c6(this.url)&&d===92)this.parseError=!0;if(MA4(this.buffer)){if(Cb1(this.url),d!==47&&!(c6(this.url)&&d===92))this.url.path.push("")}else if(el1(this.buffer)&&d!==47&&!(c6(this.url)&&d===92))this.url.path.push("");else if(!el1(this.buffer)){if(this.url.scheme==="file"&&this.url.path.length===0&&db1(this.buffer)){if(this.url.host!==""&&this.url.host!==null)this.parseError=!0,this.url.host="";this.buffer=this.buffer[0]+":"}this.url.path.push(this.buffer)}if(this.buffer="",this.url.scheme==="file"&&(d===void 0||d===63||d===35))while(this.url.path.length>1&&this.url.path[0]==="")this.parseError=!0,this.url.path.shift();if(d===63)this.url.query="",this.state="query";if(d===35)this.url.fragment="",this.state="fragment"}else{if(d===37&&(!QC(this.input[this.pointer+1])||!QC(this.input[this.pointer+2])))this.parseError=!0;this.buffer+=iF(d,Zb1)}return!0};l3.prototype["parse cannot-be-a-base-URL path"]=function I(d){if(d===63)this.url.query="",this.state="query";else if(d===35)this.url.fragment="",this.state="fragment";else{if(!isNaN(d)&&d!==37)this.parseError=!0;if(d===37&&(!QC(this.input[this.pointer+1])||!QC(this.input[this.pointer+2])))this.parseError=!0;if(!isNaN(d))this.url.path[0]=this.url.path[0]+iF(d,mb)}return!0};l3.prototype["parse query"]=function I(d,G){if(isNaN(d)||!this.stateOverride&&d===35){if(!c6(this.url)||this.url.scheme==="ws"||this.url.scheme==="wss")this.encodingOverride="utf-8";let Z=new Buffer(this.buffer);for(let C=0;C126||Z[C]===34||Z[C]===35||Z[C]===60||Z[C]===62)this.url.query+=Gb1(Z[C]);else this.url.query+=String.fromCodePoint(Z[C]);if(this.buffer="",d===35)this.url.fragment="",this.state="fragment"}else{if(d===37&&(!QC(this.input[this.pointer+1])||!QC(this.input[this.pointer+2])))this.parseError=!0;this.buffer+=G}return!0};l3.prototype["parse fragment"]=function I(d){if(isNaN(d));else if(d===0)this.parseError=!0;else{if(d===37&&(!QC(this.input[this.pointer+1])||!QC(this.input[this.pointer+2])))this.parseError=!0;this.url.fragment+=iF(d,mb)}return!0};function sA4(I,d){let G=I.scheme+":";if(I.host!==null){if(G+="//",I.username!==""||I.password!==""){if(G+=I.username,I.password!=="")G+=":"+I.password;G+="@"}if(G+=_41(I.host),I.port!==null)G+=":"+I.port}else if(I.host===null&&I.scheme==="file")G+="//";if(I.cannotBeABaseURL)G+=I.path[0];else for(let Z of I.path)G+="/"+Z;if(I.query!==null)G+="?"+I.query;if(!d&&I.fragment!==null)G+="#"+I.fragment;return G}function oA4(I){let d=I.scheme+"://";if(d+=_41(I.host),I.port!==null)d+=":"+I.port;return d}eA4.serializeURL=sA4;eA4.serializeURLOrigin=function(I){switch(I.scheme){case"blob":try{return eA4.serializeURLOrigin(eA4.parseURL(I.path[0]))}catch(d){return"null"}case"ftp":case"gopher":case"http":case"https":case"ws":case"wss":return oA4({scheme:I.scheme,host:I.host,port:I.port});case"file":return"file://";default:return"null"}};eA4.basicURLParse=function(I,d){if(d===void 0)d={};let G=new l3(I,d.baseURL,d.encodingOverride,d.url,d.stateOverride);if(G.failure)return"failure";return G.url};eA4.setTheUsername=function(I,d){I.username="";let G=yz.ucs2.decode(d);for(let Z=0;Z{var b3=Ew();wV4.implementation=class I{constructor(d){let G=d[0],Z=d[1],C=null;if(Z!==void 0){if(C=b3.basicURLParse(Z),C==="failure")throw new TypeError("Invalid base URL")}let W=b3.basicURLParse(G,{baseURL:C});if(W==="failure")throw new TypeError("Invalid URL");this._url=W}get href(){return b3.serializeURL(this._url)}set href(d){let G=b3.basicURLParse(d);if(G==="failure")throw new TypeError("Invalid URL");this._url=G}get origin(){return b3.serializeURLOrigin(this._url)}get protocol(){return this._url.scheme+":"}set protocol(d){b3.basicURLParse(d+":",{url:this._url,stateOverride:"scheme start"})}get username(){return this._url.username}set username(d){if(b3.cannotHaveAUsernamePasswordPort(this._url))return;b3.setTheUsername(this._url,d)}get password(){return this._url.password}set password(d){if(b3.cannotHaveAUsernamePasswordPort(this._url))return;b3.setThePassword(this._url,d)}get host(){let d=this._url;if(d.host===null)return"";if(d.port===null)return b3.serializeHost(d.host);return b3.serializeHost(d.host)+":"+b3.serializeInteger(d.port)}set host(d){if(this._url.cannotBeABaseURL)return;b3.basicURLParse(d,{url:this._url,stateOverride:"host"})}get hostname(){if(this._url.host===null)return"";return b3.serializeHost(this._url.host)}set hostname(d){if(this._url.cannotBeABaseURL)return;b3.basicURLParse(d,{url:this._url,stateOverride:"hostname"})}get port(){if(this._url.port===null)return"";return b3.serializeInteger(this._url.port)}set port(d){if(b3.cannotHaveAUsernamePasswordPort(this._url))return;if(d==="")this._url.port=null;else b3.basicURLParse(d,{url:this._url,stateOverride:"port"})}get pathname(){if(this._url.cannotBeABaseURL)return this._url.path[0];if(this._url.path.length===0)return"";return"/"+this._url.path.join("/")}set pathname(d){if(this._url.cannotBeABaseURL)return;this._url.path=[],b3.basicURLParse(d,{url:this._url,stateOverride:"path start"})}get search(){if(this._url.query===null||this._url.query==="")return"";return"?"+this._url.query}set search(d){let G=this._url;if(d===""){G.query=null;return}let Z=d[0]==="?"?d.substring(1):d;G.query="",b3.basicURLParse(Z,{url:G,stateOverride:"query"})}get hash(){if(this._url.fragment===null||this._url.fragment==="")return"";return"#"+this._url.fragment}set hash(d){if(d===""){this._url.fragment=null;return}let G=d[0]==="#"?d.substring(1):d;this._url.fragment="",b3.basicURLParse(G,{url:this._url,stateOverride:"fragment"})}toJSON(){return this.href}}});var Xb1=Y((Tv9,bE)=>{var IZ=ll1(),Vb1=jl1(),Ab1=Bb1(),z9=Vb1.implSymbol;function A8(I){if(!this||this[z9]||!(this instanceof A8))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");if(arguments.length<1)throw new TypeError("Failed to construct 'URL': 1 argument required, but only "+arguments.length+" present.");let d=[];for(let G=0;G{VV4.URL=Xb1().interface;VV4.serializeURL=Ew().serializeURL;VV4.serializeURLOrigin=Ew().serializeURLOrigin;VV4.basicURLParse=Ew().basicURLParse;VV4.setTheUsername=Ew().setTheUsername;VV4.setThePassword=Ew().setThePassword;VV4.serializeHost=Ew().serializeHost;VV4.serializeInteger=Ew().serializeInteger;VV4.parseURL=Ew().parseURL});var f41=Y((qC,fb1)=>{Object.defineProperty(qC,"__esModule",{value:!0});function Oz(I){return I&&typeof I==="object"&&"default"in I?I.default:I}var fC=Oz(B1("stream")),Fb1=Oz(B1("http")),bb=Oz(B1("url")),gb1=Oz(Yb1()),NV4=Oz(B1("https")),nF=Oz(B1("zlib")),zV4=fC.Readable,kA=Symbol("buffer"),D41=Symbol("type");class uz{constructor(){this[D41]="";let I=arguments[0],d=arguments[1],G=[],Z=0;if(I){let W=I,w=Number(W.length);for(let B=0;B{throw new Error("Cannot require module "+"encoding");})().convert}catch(I){}var cA=Symbol("Body internals"),_b1=fC.PassThrough;function V8(I){var d=this,G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Z=G.size;let C=Z===void 0?0:Z;var W=G.timeout;let w=W===void 0?0:W;if(I==null)I=null;else if(Jb1(I))I=Buffer.from(I.toString());else if(kE(I));else if(Buffer.isBuffer(I));else if(Object.prototype.toString.call(I)==="[object ArrayBuffer]")I=Buffer.from(I);else if(ArrayBuffer.isView(I))I=Buffer.from(I.buffer,I.byteOffset,I.byteLength);else if(I instanceof fC);else I=Buffer.from(String(I));if(this[cA]={body:I,disturbed:!1,error:null},this.size=C,this.timeout=w,I instanceof fC)I.on("error",function(B){let A=B.name==="AbortError"?B:new l8(`Invalid response body while trying to fetch ${d.url}: ${B.message}`,"system",B);d[cA].error=A})}V8.prototype={get body(){return this[cA].body},get bodyUsed(){return this[cA].disturbed},arrayBuffer(){return Pz.call(this).then(function(I){return I.buffer.slice(I.byteOffset,I.byteOffset+I.byteLength)})},blob(){let I=this.headers&&this.headers.get("content-type")||"";return Pz.call(this).then(function(d){return Object.assign(new uz([],{type:I.toLowerCase()}),{[kA]:d})})},json(){var I=this;return Pz.call(this).then(function(d){try{return JSON.parse(d.toString())}catch(G){return V8.Promise.reject(new l8(`invalid json response body at ${I.url} reason: ${G.message}`,"invalid-json"))}})},text(){return Pz.call(this).then(function(I){return I.toString()})},buffer(){return Pz.call(this)},textConverted(){var I=this;return Pz.call(this).then(function(d){return QV4(d,I.headers)})}};Object.defineProperties(V8.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});V8.mixIn=function(I){for(let d of Object.getOwnPropertyNames(V8.prototype))if(!(d in I)){let G=Object.getOwnPropertyDescriptor(V8.prototype,d);Object.defineProperty(I,d,G)}};function Pz(){var I=this;if(this[cA].disturbed)return V8.Promise.reject(new TypeError(`body used already for: ${this.url}`));if(this[cA].disturbed=!0,this[cA].error)return V8.Promise.reject(this[cA].error);let d=this.body;if(d===null)return V8.Promise.resolve(Buffer.alloc(0));if(kE(d))d=d.stream();if(Buffer.isBuffer(d))return V8.Promise.resolve(d);if(!(d instanceof fC))return V8.Promise.resolve(Buffer.alloc(0));let G=[],Z=0,C=!1;return new V8.Promise(function(W,w){let B;if(I.timeout)B=setTimeout(function(){C=!0,w(new l8(`Response timeout while trying to fetch ${I.url} (over ${I.timeout}ms)`,"body-timeout"))},I.timeout);d.on("error",function(A){if(A.name==="AbortError")C=!0,w(A);else w(new l8(`Invalid response body while trying to fetch ${I.url}: ${A.message}`,"system",A))}),d.on("data",function(A){if(C||A===null)return;if(I.size&&Z+A.length>I.size){C=!0,w(new l8(`content size at ${I.url} over limit: ${I.size}`,"max-size"));return}Z+=A.length,G.push(A)}),d.on("end",function(){if(C)return;clearTimeout(B);try{W(Buffer.concat(G,Z))}catch(A){w(new l8(`Could not create Buffer from response body for ${I.url}: ${A.message}`,"system",A))}})})}function QV4(I,d){if(typeof J41!=="function")throw new Error("The package `encoding` must be installed to use the textConverted() function");let G=d.get("content-type"),Z="utf-8",C,W;if(G)C=/charset=([^;]*)/i.exec(G);if(W=I.slice(0,1024).toString(),!C&&W)C=/0&&arguments[0]!==void 0?arguments[0]:void 0;if(this[G6]=Object.create(null),I instanceof GZ){let d=I.raw(),G=Object.keys(d);for(let Z of G)for(let C of d[Z])this.append(Z,C);return}if(I==null);else if(typeof I==="object"){let d=I[Symbol.iterator];if(d!=null){if(typeof d!=="function")throw new TypeError("Header pairs must be iterable");let G=[];for(let Z of I){if(typeof Z!=="object"||typeof Z[Symbol.iterator]!=="function")throw new TypeError("Each header pair must be iterable");G.push(Array.from(Z))}for(let Z of G){if(Z.length!==2)throw new TypeError("Each header pair must be a name/value tuple");this.append(Z[0],Z[1])}}else for(let G of Object.keys(I)){let Z=I[G];this.append(G,Z)}}else throw new TypeError("Provided initializer must be an object")}get(I){I=`${I}`,hE(I);let d=$z(this[G6],I);if(d===void 0)return null;return this[G6][d].join(", ")}forEach(I){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,G=N41(this),Z=0;while(Z1&&arguments[1]!==void 0?arguments[1]:"key+value";return Object.keys(I[G6]).sort().map(d==="key"?function(Z){return Z.toLowerCase()}:d==="value"?function(Z){return I[G6][Z].join(", ")}:function(Z){return[Z.toLowerCase(),I[G6][Z].join(", ")]})}var z41=Symbol("internal");function H41(I,d){let G=Object.create(Q41);return G[z41]={target:I,kind:d,index:0},G}var Q41=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==Q41)throw new TypeError("Value of `this` is not a HeadersIterator");var I=this[z41];let{target:d,kind:G,index:Z}=I,C=N41(d,G),W=C.length;if(Z>=W)return{value:void 0,done:!0};return this[z41].index=Z+1,{value:C[Z],done:!1}}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(Q41,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});function qV4(I){let d=Object.assign({__proto__:null},I[G6]),G=$z(I[G6],"Host");if(G!==void 0)d[G]=d[G][0];return d}function RV4(I){let d=new GZ;for(let G of Object.keys(I)){if(Qb1.test(G))continue;if(Array.isArray(I[G]))for(let Z of I[G]){if(K41.test(Z))continue;if(d[G6][G]===void 0)d[G6][G]=[Z];else d[G6][G].push(Z)}else if(!K41.test(I[G]))d[G6][G]=[I[G]]}return d}var fY=Symbol("Response internals"),UV4=Fb1.STATUS_CODES;class dZ{constructor(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};V8.call(this,I,d);let G=d.status||200,Z=new GZ(d.headers);if(I!=null&&!Z.has("Content-Type")){let C=Nb1(I);if(C)Z.append("Content-Type",C)}this[fY]={url:d.url,status:G,statusText:d.statusText||UV4[G],headers:Z,counter:d.counter}}get url(){return this[fY].url||""}get status(){return this[fY].status}get ok(){return this[fY].status>=200&&this[fY].status<300}get redirected(){return this[fY].counter>0}get statusText(){return this[fY].statusText}get headers(){return this[fY].headers}clone(){return new dZ(Kb1(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}V8.mixIn(dZ.prototype);Object.defineProperties(dZ.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});Object.defineProperty(dZ.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});var xA=Symbol("Request internals"),vV4=bb.URL||gb1.URL,EV4=bb.parse,MV4=bb.format;function F41(I){if(/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(I))I=new vV4(I).toString();return EV4(I)}var SV4="destroy"in fC.Readable.prototype;function lb(I){return typeof I==="object"&&typeof I[xA]==="object"}function LV4(I){let d=I&&typeof I==="object"&&Object.getPrototypeOf(I);return!!(d&&d.constructor.name==="AbortSignal")}class RY{constructor(I){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},G;if(!lb(I)){if(I&&I.href)G=F41(I.href);else G=F41(`${I}`);I={}}else G=F41(I.url);let Z=d.method||I.method||"GET";if(Z=Z.toUpperCase(),(d.body!=null||lb(I)&&I.body!==null)&&(Z==="GET"||Z==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let C=d.body!=null?d.body:lb(I)&&I.body!==null?Kb1(I):null;V8.call(this,C,{timeout:d.timeout||I.timeout||0,size:d.size||I.size||0});let W=new GZ(d.headers||I.headers||{});if(C!=null&&!W.has("Content-Type")){let B=Nb1(C);if(B)W.append("Content-Type",B)}let w=lb(I)?I.signal:null;if("signal"in d)w=d.signal;if(w!=null&&!LV4(w))throw new TypeError("Expected signal to be an instanceof AbortSignal");this[xA]={method:Z,redirect:d.redirect||I.redirect||"follow",headers:W,parsedURL:G,signal:w},this.follow=d.follow!==void 0?d.follow:I.follow!==void 0?I.follow:20,this.compress=d.compress!==void 0?d.compress:I.compress!==void 0?I.compress:!0,this.counter=d.counter||I.counter||0,this.agent=d.agent||I.agent}get method(){return this[xA].method}get url(){return MV4(this[xA].parsedURL)}get headers(){return this[xA].headers}get redirect(){return this[xA].redirect}get signal(){return this[xA].signal}clone(){return new RY(this)}}V8.mixIn(RY.prototype);Object.defineProperty(RY.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(RY.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}});function yV4(I){let d=I[xA].parsedURL,G=new GZ(I[xA].headers);if(!G.has("Accept"))G.set("Accept","*/*");if(!d.protocol||!d.hostname)throw new TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(d.protocol))throw new TypeError("Only HTTP(S) protocols are supported");if(I.signal&&I.body instanceof fC.Readable&&!SV4)throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let Z=null;if(I.body==null&&/^(POST|PUT)$/i.test(I.method))Z="0";if(I.body!=null){let W=zb1(I);if(typeof W==="number")Z=String(W)}if(Z)G.set("Content-Length",Z);if(!G.has("User-Agent"))G.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)");if(I.compress&&!G.has("Accept-Encoding"))G.set("Accept-Encoding","gzip,deflate");let C=I.agent;if(typeof C==="function")C=C(d);return Object.assign({},d,{method:I.method,headers:qV4(G),agent:C})}function Tz(I){Error.call(this,I),this.type="aborted",this.message=I,Error.captureStackTrace(this,this.constructor)}Tz.prototype=Object.create(Error.prototype);Tz.prototype.constructor=Tz;Tz.prototype.name="AbortError";var jE=bb.URL||gb1.URL,Hb1=fC.PassThrough,PV4=function I(d,G){let Z=new jE(G).hostname,C=new jE(d).hostname;return Z===C||Z[Z.length-C.length-1]==="."&&Z.endsWith(C)},$V4=function I(d,G){let Z=new jE(G).protocol,C=new jE(d).protocol;return Z===C};function qY(I,d){if(!qY.Promise)throw new Error("native promise missing, set fetch.Promise to your favorite alternative");return V8.Promise=qY.Promise,new qY.Promise(function(G,Z){let C=new RY(I,d),W=yV4(C),w=(W.protocol==="https:"?NV4:Fb1).request,B=C.signal,A=null,V=function J(){let K=new Tz("The user aborted a request.");if(Z(K),C.body&&C.body instanceof fC.Readable)g41(C.body,K);if(!A||!A.body)return;A.body.emit("error",K)};if(B&&B.aborted){V();return}let X=function J(){V(),g()},_=w(W),F;if(B)B.addEventListener("abort",X);function g(){if(_.abort(),B)B.removeEventListener("abort",X);clearTimeout(F)}if(C.timeout)_.once("socket",function(J){F=setTimeout(function(){Z(new l8(`network timeout at: ${C.url}`,"request-timeout")),g()},C.timeout)});if(_.on("error",function(J){if(Z(new l8(`request to ${C.url} failed, reason: ${J.message}`,"system",J)),A&&A.body)g41(A.body,J);g()}),uV4(_,function(J){if(B&&B.aborted)return;if(A&&A.body)g41(A.body,J)}),parseInt(process.version.substring(1))<14)_.on("socket",function(J){J.addListener("close",function(K){let Q=J.listenerCount("data")>0;if(A&&Q&&!K&&!(B&&B.aborted)){let E=new Error("Premature close");E.code="ERR_STREAM_PREMATURE_CLOSE",A.body.emit("error",E)}})});_.on("response",function(J){clearTimeout(F);let K=RV4(J.headers);if(qY.isRedirect(J.statusCode)){let $=K.get("Location"),h=null;try{h=$===null?null:new jE($,C.url).toString()}catch(O){if(C.redirect!=="manual"){Z(new l8(`uri requested responds with an invalid redirect URL: ${$}`,"invalid-redirect")),g();return}}switch(C.redirect){case"error":Z(new l8(`uri requested responds with a redirect, redirect mode is set to error: ${C.url}`,"no-redirect")),g();return;case"manual":if(h!==null)try{K.set("Location",h)}catch(T){Z(T)}break;case"follow":if(h===null)break;if(C.counter>=C.follow){Z(new l8(`maximum redirect reached at: ${C.url}`,"max-redirect")),g();return}let O={headers:new GZ(C.headers),follow:C.follow,counter:C.counter+1,agent:C.agent,compress:C.compress,method:C.method,body:C.body,signal:C.signal,timeout:C.timeout,size:C.size};if(!PV4(C.url,h)||!$V4(C.url,h))for(let T of["authorization","www-authenticate","cookie","cookie2"])O.headers.delete(T);if(J.statusCode!==303&&C.body&&zb1(C)===null){Z(new l8("Cannot follow redirect with body being a readable stream","unsupported-redirect")),g();return}if(J.statusCode===303||(J.statusCode===301||J.statusCode===302)&&C.method==="POST")O.method="GET",O.body=void 0,O.headers.delete("content-length");G(qY(new RY(h,O))),g();return}}J.once("end",function(){if(B)B.removeEventListener("abort",X)});let Q=J.pipe(new Hb1),E={url:C.url,status:J.statusCode,statusText:J.statusMessage,headers:K,size:C.size,timeout:C.timeout,counter:C.counter},S=K.get("Content-Encoding");if(!C.compress||C.method==="HEAD"||S===null||J.statusCode===204||J.statusCode===304){A=new dZ(Q,E),G(A);return}let P={flush:nF.Z_SYNC_FLUSH,finishFlush:nF.Z_SYNC_FLUSH};if(S=="gzip"||S=="x-gzip"){Q=Q.pipe(nF.createGunzip(P)),A=new dZ(Q,E),G(A);return}if(S=="deflate"||S=="x-deflate"){let $=J.pipe(new Hb1);$.once("data",function(h){if((h[0]&15)===8)Q=Q.pipe(nF.createInflate());else Q=Q.pipe(nF.createInflateRaw());A=new dZ(Q,E),G(A)}),$.on("end",function(){if(!A)A=new dZ(Q,E),G(A)});return}if(S=="br"&&typeof nF.createBrotliDecompress==="function"){Q=Q.pipe(nF.createBrotliDecompress()),A=new dZ(Q,E),G(A);return}A=new dZ(Q,E),G(A)}),fV4(_,C)})}function uV4(I,d){let G;I.on("socket",function(Z){G=Z}),I.on("response",function(Z){let C=Z.headers;if(C["transfer-encoding"]==="chunked"&&!C["content-length"])Z.once("close",function(W){if(G&&G.listenerCount("data")>0&&!W){let B=new Error("Premature close");B.code="ERR_STREAM_PREMATURE_CLOSE",d(B)}})})}function g41(I,d){if(I.destroy)I.destroy(d);else I.emit("error",d),I.end()}qY.isRedirect=function(I){return I===301||I===302||I===303||I===307||I===308};qY.Promise=global.Promise;fb1.exports=qC=qY;Object.defineProperty(qC,"__esModule",{value:!0});qC.default=qC;qC.Headers=GZ;qC.Request=RY;qC.Response=dZ;qC.FetchError=l8;qC.AbortError=Tz});function nb1(){}function U7(I){return typeof I=="object"&&I!==null||typeof I=="function"}function M5(I,d){try{Object.defineProperty(I,"name",{value:d,configurable:!0})}catch(G){}}function II(I){return new T41(I)}function P5(I){return OV4(I)}function Z4(I){return mV4(I)}function iA(I,d,G){return TV4.call(I,d,G)}function R7(I,d,G){iA(iA(I,d,G),void 0,rb1)}function qb1(I,d){R7(I,d)}function Rb1(I,d){R7(I,void 0,d)}function RC(I,d,G){return iA(I,d,G)}function hz(I){iA(I,void 0,rb1)}function Xh(I,d,G){if(typeof I!="function")throw new TypeError("Argument is not a function");return Function.prototype.apply.call(I,d,G)}function dg(I,d,G){try{return P5(Xh(I,d,G))}catch(Z){return Z4(Z)}}class rd{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(I){let d=this._back,G=d;d._elements.length===16383&&(G={_elements:[],_next:void 0}),d._elements.push(I),G!==d&&(this._back=G,d._next=G),++this._size}shift(){let I=this._front,d=I,G=this._cursor,Z=G+1,C=I._elements,W=C[G];return Z===16384&&(d=I._next,Z=0),--this._size,this._cursor=Z,I!==d&&(this._front=d),C[G]=void 0,W}forEach(I){let d=this._cursor,G=this._front,Z=G._elements;for(;!(d===Z.length&&G._next===void 0||d===Z.length&&(G=G._next,Z=G._elements,d=0,Z.length===0));)I(Z[d]),++d}peek(){let I=this._front,d=this._cursor;return I._elements[d]}}function ob1(I,d){I._ownerReadableStream=d,d._reader=I,d._state==="readable"?M41(I):d._state==="closed"?function(G){M41(G),dh1(G)}(I):Ih1(I,d._storedError)}function eb1(I,d){return yh1(I._ownerReadableStream,d)}function tb1(I){let d=I._ownerReadableStream;d._state==="readable"?b41(I,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(G,Z){Ih1(G,Z)}(I,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),d._readableStreamController[l41](),d._reader=void 0,I._ownerReadableStream=void 0}function jz(I){return new TypeError("Cannot "+I+" a stream using a released reader")}function M41(I){I._closedPromise=II((d,G)=>{I._closedPromise_resolve=d,I._closedPromise_reject=G})}function Ih1(I,d){M41(I),b41(I,d)}function b41(I,d){I._closedPromise_reject!==void 0&&(hz(I._closedPromise),I._closedPromise_reject(d),I._closedPromise_resolve=void 0,I._closedPromise_reject=void 0)}function dh1(I){I._closedPromise_resolve!==void 0&&(I._closedPromise_resolve(void 0),I._closedPromise_resolve=void 0,I._closedPromise_reject=void 0)}function nA(I,d){if(I!==void 0&&(typeof(G=I)!="object"&&typeof G!="function"))throw new TypeError(`${d} is not an object.`);var G}function UC(I,d){if(typeof I!="function")throw new TypeError(`${d} is not a function.`)}function Gh1(I,d){if(!function(G){return typeof G=="object"&&G!==null||typeof G=="function"}(I))throw new TypeError(`${d} is not an object.`)}function rA(I,d,G){if(I===void 0)throw new TypeError(`Parameter ${d} is required in '${G}'.`)}function S41(I,d,G){if(I===void 0)throw new TypeError(`${d} is required in '${G}'.`)}function h41(I){return Number(I)}function vb1(I){return I===0?0:I}function Zh1(I,d){let G=Number.MAX_SAFE_INTEGER,Z=Number(I);if(Z=vb1(Z),!Ub1(Z))throw new TypeError(`${d} is not a finite number`);if(Z=function(C){return vb1(lV4(C))}(Z),Z<0||Z>G)throw new TypeError(`${d} is outside the accepted range of 0 to ${G}, inclusive`);return Ub1(Z)&&Z!==0?Z:0}function pE(I){if(!U7(I))return!1;if(typeof I.getReader!="function")return!1;try{return typeof I.locked=="boolean"}catch(d){return!1}}function Ch1(I){if(!U7(I))return!1;if(typeof I.getWriter!="function")return!1;try{return typeof I.locked=="boolean"}catch(d){return!1}}function Wh1(I,d){if(!tF(I))throw new TypeError(`${d} is not a ReadableStream.`)}function wh1(I,d){I._reader._readRequests.push(d)}function j41(I,d,G){let Z=I._reader._readRequests.shift();G?Z._closeSteps():Z._chunkSteps(d)}function Yh(I){return I._reader._readRequests.length}function Bh1(I){let d=I._reader;return d!==void 0&&!!oF(d)}class UY{constructor(I){if(rA(I,1,"ReadableStreamDefaultReader"),Wh1(I,"First parameter"),xz(I))throw new TypeError("This stream has already been locked for exclusive reading by another reader");ob1(this,I),this._readRequests=new rd}get closed(){return oF(this)?this._closedPromise:Z4(hb("closed"))}cancel(I){return oF(this)?this._ownerReadableStream===void 0?Z4(jz("cancel")):eb1(this,I):Z4(hb("cancel"))}read(){if(!oF(this))return Z4(hb("read"));if(this._ownerReadableStream===void 0)return Z4(jz("read from"));let I,d,G=II((Z,C)=>{I=Z,d=C});return function(Z,C){let W=Z._ownerReadableStream;W._disturbed=!0,W._state==="closed"?C._closeSteps():W._state==="errored"?C._errorSteps(W._storedError):W._readableStreamController[m41](C)}(this,{_chunkSteps:(Z)=>I({value:Z,done:!1}),_closeSteps:()=>I({value:void 0,done:!0}),_errorSteps:(Z)=>d(Z)}),G}releaseLock(){if(!oF(this))throw hb("releaseLock");this._ownerReadableStream!==void 0&&function(I){tb1(I);let d=new TypeError("Reader was released");Ah1(I,d)}(this)}}function oF(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_readRequests")&&I instanceof UY)}function Ah1(I,d){let G=I._readRequests;I._readRequests=new rd,G.forEach((Z)=>{Z._errorSteps(d)})}function hb(I){return new TypeError(`ReadableStreamDefaultReader.prototype.${I} can only be used on a ReadableStreamDefaultReader`)}class k41{constructor(I,d){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=I,this._preventCancel=d}next(){let I=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?RC(this._ongoingPromise,I,I):I(),this._ongoingPromise}return(I){let d=()=>this._returnSteps(I);return this._ongoingPromise?RC(this._ongoingPromise,d,d):d()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});let I=this._reader;return I===void 0?Z4(jz("iterate")):iA(I.read(),(d)=>{var G;return this._ongoingPromise=void 0,d.done&&(this._isFinished=!0,(G=this._reader)===null||G===void 0||G.releaseLock(),this._reader=void 0),d},(d)=>{var G;throw this._ongoingPromise=void 0,this._isFinished=!0,(G=this._reader)===null||G===void 0||G.releaseLock(),this._reader=void 0,d})}_returnSteps(I){if(this._isFinished)return Promise.resolve({value:I,done:!0});this._isFinished=!0;let d=this._reader;if(d===void 0)return Z4(jz("finish iterating"));if(this._reader=void 0,!this._preventCancel){let G=d.cancel(I);return d.releaseLock(),RC(G,()=>({value:I,done:!0}))}return d.releaseLock(),P5({value:I,done:!0})}}function Eb1(I){if(!U7(I))return!1;if(!Object.prototype.hasOwnProperty.call(I,"_asyncIteratorImpl"))return!1;try{return I._asyncIteratorImpl instanceof k41}catch(d){return!1}}function Mb1(I){return new TypeError(`ReadableStreamAsyncIterator.${I} can only be used on a ReadableSteamAsyncIterator`)}function Yh1(I,d,G,Z,C){new Uint8Array(I).set(new Uint8Array(G,Z,C),d)}function Sb1(I){let d=function(G,Z,C){if(G.slice)return G.slice(Z,C);let W=C-Z,w=new ArrayBuffer(W);return Yh1(w,0,G,Z,W),w}(I.buffer,I.byteOffset,I.byteOffset+I.byteLength);return new Uint8Array(d)}function L41(I){let d=I._queue.shift();return I._queueTotalSize-=d.size,I._queueTotalSize<0&&(I._queueTotalSize=0),d.value}function x41(I,d,G){if(typeof(Z=G)!="number"||Xh1(Z)||Z<0||G===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var Z;I._queue.push({value:d,size:G}),I._queueTotalSize+=G}function PY(I){I._queue=new rd,I._queueTotalSize=0}class eF{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!q41(this))throw R41("view");return this._view}respond(I){if(!q41(this))throw R41("respond");if(rA(I,1,"respond"),I=Zh1(I,"First parameter"),this._associatedReadableByteStreamController===void 0)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,function(d,G){let Z=d._pendingPullIntos.peek();if(d._controlledReadableByteStream._state==="closed"){if(G!==0)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(G===0)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(Z.bytesFilled+G>Z.byteLength)throw new RangeError("bytesWritten out of range")}Z.buffer=Z.buffer,Lb1(d,G)}(this._associatedReadableByteStreamController,I)}respondWithNewView(I){if(!q41(this))throw R41("respondWithNewView");if(rA(I,1,"respondWithNewView"),!ArrayBuffer.isView(I))throw new TypeError("You can only respond with array buffer views");if(this._associatedReadableByteStreamController===void 0)throw new TypeError("This BYOB request has been invalidated");I.buffer,function(d,G){let Z=d._pendingPullIntos.peek();if(d._controlledReadableByteStream._state==="closed"){if(G.byteLength!==0)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(G.byteLength===0)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(Z.byteOffset+Z.bytesFilled!==G.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(Z.bufferByteLength!==G.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(Z.bytesFilled+G.byteLength>Z.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");let C=G.byteLength;Z.buffer=G.buffer,Lb1(d,C)}(this._associatedReadableByteStreamController,I)}}function mz(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_controlledReadableByteStream")&&I instanceof vY)}function q41(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_associatedReadableByteStreamController")&&I instanceof eF)}function Ig(I){if(!function(G){let Z=G._controlledReadableByteStream;if(Z._state!=="readable")return!1;if(G._closeRequested)return!1;if(!G._started)return!1;if(Bh1(Z)&&Yh(Z)>0)return!0;if(p41(Z)&&zh1(Z)>0)return!0;if(Nh1(G)>0)return!0;return!1}(I))return;if(I._pulling)return void(I._pullAgain=!0);I._pulling=!0,R7(I._pullAlgorithm(),()=>(I._pulling=!1,I._pullAgain&&(I._pullAgain=!1,Ig(I)),null),(G)=>(kz(I,G),null))}function _h1(I){c41(I),I._pendingPullIntos=new rd}function y41(I,d){let G=!1;I._state==="closed"&&(G=!0);let Z=Dh1(d);d.readerType==="default"?j41(I,Z,G):function(C,W,w){let B=C._reader._readIntoRequests.shift();w?B._closeSteps(W):B._chunkSteps(W)}(I,Z,G)}function Dh1(I){let{bytesFilled:d,elementSize:G}=I;return new I.viewConstructor(I.buffer,I.byteOffset,d/G)}function ab(I,d,G,Z){I._queue.push({buffer:d,byteOffset:G,byteLength:Z}),I._queueTotalSize+=Z}function Hh1(I,d,G,Z){let C;try{C=d.slice(G,G+Z)}catch(W){throw kz(I,W),W}ab(I,C,0,Z)}function Fh1(I,d){d.bytesFilled>0&&Hh1(I,d.buffer,d.byteOffset,d.bytesFilled),bz(I)}function gh1(I,d){let G=d.elementSize,Z=d.bytesFilled-d.bytesFilled%G,C=Math.min(I._queueTotalSize,d.byteLength-d.bytesFilled),W=d.bytesFilled+C,w=W-W%G,B=C,A=!1;w>Z&&(B=w-d.bytesFilled,A=!0);let V=I._queue;for(;B>0;){let X=V.peek(),_=Math.min(B,X.byteLength),F=d.byteOffset+d.bytesFilled;Yh1(d.buffer,F,X.buffer,X.byteOffset,_),X.byteLength===_?V.shift():(X.byteOffset+=_,X.byteLength-=_),I._queueTotalSize-=_,Jh1(I,_,d),B-=_}return A}function Jh1(I,d,G){G.bytesFilled+=d}function Kh1(I){I._queueTotalSize===0&&I._closeRequested?(tb(I),oE(I._controlledReadableByteStream)):Ig(I)}function c41(I){I._byobRequest!==null&&(I._byobRequest._associatedReadableByteStreamController=void 0,I._byobRequest._view=null,I._byobRequest=null)}function P41(I){for(;I._pendingPullIntos.length>0;){if(I._queueTotalSize===0)return;let d=I._pendingPullIntos.peek();gh1(I,d)&&(bz(I),y41(I._controlledReadableByteStream,d))}}function Lb1(I,d){let G=I._pendingPullIntos.peek();c41(I),I._controlledReadableByteStream._state==="closed"?function(Z,C){C.readerType==="none"&&bz(Z);let W=Z._controlledReadableByteStream;if(p41(W))for(;zh1(W)>0;)y41(W,bz(Z))}(I,G):function(Z,C,W){if(Jh1(0,C,W),W.readerType==="none")return Fh1(Z,W),void P41(Z);if(W.bytesFilled0){let B=W.byteOffset+W.bytesFilled;Hh1(Z,W.buffer,B-w,w)}W.bytesFilled-=w,y41(Z._controlledReadableByteStream,W),P41(Z)}(I,d,G),Ig(I)}function bz(I){return I._pendingPullIntos.shift()}function tb(I){I._pullAlgorithm=void 0,I._cancelAlgorithm=void 0}function kz(I,d){let G=I._controlledReadableByteStream;G._state==="readable"&&(_h1(I),PY(I),tb(I),Ph1(G,d))}function yb1(I,d){let G=I._queue.shift();I._queueTotalSize-=G.byteLength,Kh1(I);let Z=new Uint8Array(G.buffer,G.byteOffset,G.byteLength);d._chunkSteps(Z)}function Nh1(I){let d=I._controlledReadableByteStream._state;return d==="errored"?null:d==="closed"?0:I._strategyHWM-I._queueTotalSize}function bV4(I,d,G){let Z=Object.create(vY.prototype),C,W,w;C=d.start!==void 0?()=>d.start(Z):()=>{},W=d.pull!==void 0?()=>d.pull(Z):()=>P5(void 0),w=d.cancel!==void 0?(A)=>d.cancel(A):()=>P5(void 0);let B=d.autoAllocateChunkSize;if(B===0)throw new TypeError("autoAllocateChunkSize must be greater than 0");(function(A,V,X,_,F,g,J){V._controlledReadableByteStream=A,V._pullAgain=!1,V._pulling=!1,V._byobRequest=null,V._queue=V._queueTotalSize=void 0,PY(V),V._closeRequested=!1,V._started=!1,V._strategyHWM=g,V._pullAlgorithm=_,V._cancelAlgorithm=F,V._autoAllocateChunkSize=J,V._pendingPullIntos=new rd,A._readableStreamController=V,R7(P5(X()),()=>(V._started=!0,Ig(V),null),(K)=>(kz(V,K),null))})(I,Z,C,W,w,G,B)}function R41(I){return new TypeError(`ReadableStreamBYOBRequest.prototype.${I} can only be used on a ReadableStreamBYOBRequest`)}function xE(I){return new TypeError(`ReadableByteStreamController.prototype.${I} can only be used on a ReadableByteStreamController`)}function Pb1(I,d){I._reader._readIntoRequests.push(d)}function zh1(I){return I._reader._readIntoRequests.length}function p41(I){let d=I._reader;return d!==void 0&&!!lz(d)}class EY{constructor(I){if(rA(I,1,"ReadableStreamBYOBReader"),Wh1(I,"First parameter"),xz(I))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!mz(I._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");ob1(this,I),this._readIntoRequests=new rd}get closed(){return lz(this)?this._closedPromise:Z4(jb("closed"))}cancel(I){return lz(this)?this._ownerReadableStream===void 0?Z4(jz("cancel")):eb1(this,I):Z4(jb("cancel"))}read(I){if(!lz(this))return Z4(jb("read"));if(!ArrayBuffer.isView(I))return Z4(new TypeError("view must be an array buffer view"));if(I.byteLength===0)return Z4(new TypeError("view must have non-zero byteLength"));if(I.buffer.byteLength===0)return Z4(new TypeError("view's buffer must have non-zero byteLength"));if(I.buffer,this._ownerReadableStream===void 0)return Z4(jz("read from"));let d,G,Z=II((C,W)=>{d=C,G=W});return function(C,W,w){let B=C._ownerReadableStream;B._disturbed=!0,B._state==="errored"?w._errorSteps(B._storedError):function(A,V,X){let _=A._controlledReadableByteStream,F=1;V.constructor!==DataView&&(F=V.constructor.BYTES_PER_ELEMENT);let{constructor:g,buffer:J}=V,K={buffer:J,bufferByteLength:J.byteLength,byteOffset:V.byteOffset,byteLength:V.byteLength,bytesFilled:0,elementSize:F,viewConstructor:g,readerType:"byob"};if(A._pendingPullIntos.length>0)return A._pendingPullIntos.push(K),void Pb1(_,X);if(_._state!=="closed"){if(A._queueTotalSize>0){if(gh1(A,K)){let Q=Dh1(K);return Kh1(A),void X._chunkSteps(Q)}if(A._closeRequested){let Q=new TypeError("Insufficient bytes to fill elements in the given buffer");return kz(A,Q),void X._errorSteps(Q)}}A._pendingPullIntos.push(K),Pb1(_,X),Ig(A)}else{let Q=new g(K.buffer,K.byteOffset,0);X._closeSteps(Q)}}(B._readableStreamController,W,w)}(this,I,{_chunkSteps:(C)=>d({value:C,done:!1}),_closeSteps:(C)=>d({value:C,done:!0}),_errorSteps:(C)=>G(C)}),Z}releaseLock(){if(!lz(this))throw jb("releaseLock");this._ownerReadableStream!==void 0&&function(I){tb1(I);let d=new TypeError("Reader was released");Qh1(I,d)}(this)}}function lz(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_readIntoRequests")&&I instanceof EY)}function Qh1(I,d){let G=I._readIntoRequests;I._readIntoRequests=new rd,G.forEach((Z)=>{Z._errorSteps(d)})}function jb(I){return new TypeError(`ReadableStreamBYOBReader.prototype.${I} can only be used on a ReadableStreamBYOBReader`)}function aE(I,d){let{highWaterMark:G}=I;if(G===void 0)return d;if(Xh1(G)||G<0)throw new RangeError("Invalid highWaterMark");return G}function Ih(I){let{size:d}=I;return d||(()=>1)}function dh(I,d){nA(I,d);let G=I==null?void 0:I.highWaterMark,Z=I==null?void 0:I.size;return{highWaterMark:G===void 0?void 0:h41(G),size:Z===void 0?void 0:hV4(Z,`${d} has member 'size' that`)}}function hV4(I,d){return UC(I,d),(G)=>h41(I(G))}function jV4(I,d,G){return UC(I,G),(Z)=>dg(I,d,[Z])}function kV4(I,d,G){return UC(I,G),()=>dg(I,d,[])}function xV4(I,d,G){return UC(I,G),(Z)=>Xh(I,d,[Z])}function cV4(I,d,G){return UC(I,G),(Z,C)=>dg(I,d,[Z,C])}class MY{constructor(I={},d={}){I===void 0?I=null:Gh1(I,"First parameter");let G=dh(d,"Second parameter"),Z=function(w,B){nA(w,B);let A=w==null?void 0:w.abort,V=w==null?void 0:w.close,X=w==null?void 0:w.start,_=w==null?void 0:w.type,F=w==null?void 0:w.write;return{abort:A===void 0?void 0:jV4(A,w,`${B} has member 'abort' that`),close:V===void 0?void 0:kV4(V,w,`${B} has member 'close' that`),start:X===void 0?void 0:xV4(X,w,`${B} has member 'start' that`),write:F===void 0?void 0:cV4(F,w,`${B} has member 'write' that`),type:_}}(I,"First parameter");var C;if((C=this)._state="writable",C._storedError=void 0,C._writer=void 0,C._writableStreamController=void 0,C._writeRequests=new rd,C._inFlightWriteRequest=void 0,C._closeRequest=void 0,C._inFlightCloseRequest=void 0,C._pendingAbortRequest=void 0,C._backpressure=!1,Z.type!==void 0)throw new RangeError("Invalid type is specified");let W=Ih(G);(function(w,B,A,V){let X=Object.create(sE.prototype),_,F,g,J;_=B.start!==void 0?()=>B.start(X):()=>{},F=B.write!==void 0?(K)=>B.write(K,X):()=>P5(void 0),g=B.close!==void 0?()=>B.close():()=>P5(void 0),J=B.abort!==void 0?(K)=>B.abort(K):()=>P5(void 0),function(K,Q,E,S,P,$,h,O){Q._controlledWritableStream=K,K._writableStreamController=Q,Q._queue=void 0,Q._queueTotalSize=void 0,PY(Q),Q._abortReason=void 0,Q._abortController=function(){if(pV4)return new AbortController}(),Q._started=!1,Q._strategySizeAlgorithm=O,Q._strategyHWM=h,Q._writeAlgorithm=S,Q._closeAlgorithm=P,Q._abortAlgorithm=$;let T=a41(Q);r41(K,T);let V1=E();R7(P5(V1),()=>(Q._started=!0,_h(Q),null),(c)=>(Q._started=!0,$41(K,c),null))}(w,X,_,F,g,J,A,V)})(this,Z,aE(G,1),W)}get locked(){if(!Mw(this))throw xb("locked");return sb(this)}abort(I){return Mw(this)?sb(this)?Z4(new TypeError("Cannot abort a stream that already has a writer")):fh1(this,I):Z4(xb("abort"))}close(){return Mw(this)?sb(this)?Z4(new TypeError("Cannot close a stream that already has a writer")):yY(this)?Z4(new TypeError("Cannot close an already-closing stream")):qh1(this):Z4(xb("close"))}getWriter(){if(!Mw(this))throw xb("getWriter");return new pA(this)}}function Mw(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_writableStreamController")&&I instanceof MY)}function sb(I){return I._writer!==void 0}function fh1(I,d){var G;if(I._state==="closed"||I._state==="errored")return P5(void 0);I._writableStreamController._abortReason=d,(G=I._writableStreamController._abortController)===null||G===void 0||G.abort(d);let Z=I._state;if(Z==="closed"||Z==="errored")return P5(void 0);if(I._pendingAbortRequest!==void 0)return I._pendingAbortRequest._promise;let C=!1;Z==="erroring"&&(C=!0,d=void 0);let W=II((w,B)=>{I._pendingAbortRequest={_promise:void 0,_resolve:w,_reject:B,_reason:d,_wasAlreadyErroring:C}});return I._pendingAbortRequest._promise=W,C||i41(I,d),W}function qh1(I){let d=I._state;if(d==="closed"||d==="errored")return Z4(new TypeError(`The stream (in ${d} state) is not in the writable state and cannot be closed`));let G=II((W,w)=>{let B={_resolve:W,_reject:w};I._closeRequest=B}),Z=I._writer;var C;return Z!==void 0&&I._backpressure&&d==="writable"&&o41(Z),x41(C=I._writableStreamController,Uh1,0),_h(C),G}function $41(I,d){I._state!=="writable"?n41(I):i41(I,d)}function i41(I,d){let G=I._writableStreamController;I._state="erroring",I._storedError=d;let Z=I._writer;Z!==void 0&&Rh1(Z,d),!function(C){if(C._inFlightWriteRequest===void 0&&C._inFlightCloseRequest===void 0)return!1;return!0}(I)&&G._started&&n41(I)}function n41(I){I._state="errored",I._writableStreamController[sb1]();let d=I._storedError;if(I._writeRequests.forEach((Z)=>{Z._reject(d)}),I._writeRequests=new rd,I._pendingAbortRequest===void 0)return void kb(I);let G=I._pendingAbortRequest;if(I._pendingAbortRequest=void 0,G._wasAlreadyErroring)return G._reject(d),void kb(I);R7(I._writableStreamController[ab1](G._reason),()=>(G._resolve(),kb(I),null),(Z)=>(G._reject(Z),kb(I),null))}function yY(I){return I._closeRequest!==void 0||I._inFlightCloseRequest!==void 0}function kb(I){I._closeRequest!==void 0&&(I._closeRequest._reject(I._storedError),I._closeRequest=void 0);let d=I._writer;d!==void 0&&s41(d,I._storedError)}function r41(I,d){let G=I._writer;G!==void 0&&d!==I._backpressure&&(d?function(Z){Dh(Z)}(G):o41(G)),I._backpressure=d}class pA{constructor(I){if(rA(I,1,"WritableStreamDefaultWriter"),function(Z,C){if(!Mw(Z))throw new TypeError(`${C} is not a WritableStream.`)}(I,"First parameter"),sb(I))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=I,I._writer=this;let d=I._state;if(d==="writable")!yY(I)&&I._backpressure?Dh(this):Tb1(this),ob(this);else if(d==="erroring")u41(this,I._storedError),ob(this);else if(d==="closed")Tb1(this),ob(G=this),Mh1(G);else{let Z=I._storedError;u41(this,Z),ub1(this,Z)}var G}get closed(){return rF(this)?this._closedPromise:Z4(aF("closed"))}get desiredSize(){if(!rF(this))throw aF("desiredSize");if(this._ownerWritableStream===void 0)throw cE("desiredSize");return function(I){let d=I._ownerWritableStream,G=d._state;if(G==="errored"||G==="erroring")return null;if(G==="closed")return 0;return vh1(d._writableStreamController)}(this)}get ready(){return rF(this)?this._readyPromise:Z4(aF("ready"))}abort(I){return rF(this)?this._ownerWritableStream===void 0?Z4(cE("abort")):function(d,G){return fh1(d._ownerWritableStream,G)}(this,I):Z4(aF("abort"))}close(){if(!rF(this))return Z4(aF("close"));let I=this._ownerWritableStream;return I===void 0?Z4(cE("close")):yY(I)?Z4(new TypeError("Cannot close an already-closing stream")):qh1(this._ownerWritableStream)}releaseLock(){if(!rF(this))throw aF("releaseLock");this._ownerWritableStream!==void 0&&function(I){let d=I._ownerWritableStream,G=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");Rh1(I,G),function(Z,C){Z._closedPromiseState==="pending"?s41(Z,C):function(W,w){ub1(W,w)}(Z,C)}(I,G),d._writer=void 0,I._ownerWritableStream=void 0}(this)}write(I){return rF(this)?this._ownerWritableStream===void 0?Z4(cE("write to")):function(d,G){let Z=d._ownerWritableStream,C=Z._writableStreamController,W=function(A,V){try{return A._strategySizeAlgorithm(V)}catch(X){return $b1(A,X),1}}(C,G);if(Z!==d._ownerWritableStream)return Z4(cE("write to"));let w=Z._state;if(w==="errored")return Z4(Z._storedError);if(yY(Z)||w==="closed")return Z4(new TypeError("The stream is closing or closed and cannot be written to"));if(w==="erroring")return Z4(Z._storedError);let B=function(A){return II((V,X)=>{let _={_resolve:V,_reject:X};A._writeRequests.push(_)})}(Z);return function(A,V,X){try{x41(A,V,X)}catch(F){return void $b1(A,F)}let _=A._controlledWritableStream;if(!yY(_)&&_._state==="writable")r41(_,a41(A));_h(A)}(C,G,W),B}(this,I):Z4(aF("write"))}}function rF(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_ownerWritableStream")&&I instanceof pA)}function Rh1(I,d){I._readyPromiseState==="pending"?Sh1(I,d):function(G,Z){u41(G,Z)}(I,d)}function U41(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_controlledWritableStream")&&I instanceof sE)}function Gh(I){I._writeAlgorithm=void 0,I._closeAlgorithm=void 0,I._abortAlgorithm=void 0,I._strategySizeAlgorithm=void 0}function vh1(I){return I._strategyHWM-I._queueTotalSize}function _h(I){let d=I._controlledWritableStream;if(!I._started)return;if(d._inFlightWriteRequest!==void 0)return;if(d._state==="erroring")return void n41(d);if(I._queue.length===0)return;let G=I._queue.peek().value;G===Uh1?function(Z){let C=Z._controlledWritableStream;(function(w){w._inFlightCloseRequest=w._closeRequest,w._closeRequest=void 0})(C),L41(Z);let W=Z._closeAlgorithm();Gh(Z),R7(W,()=>(function(w){w._inFlightCloseRequest._resolve(void 0),w._inFlightCloseRequest=void 0,w._state==="erroring"&&(w._storedError=void 0,w._pendingAbortRequest!==void 0&&(w._pendingAbortRequest._resolve(),w._pendingAbortRequest=void 0)),w._state="closed";let B=w._writer;B!==void 0&&Mh1(B)}(C),null),(w)=>(function(B,A){B._inFlightCloseRequest._reject(A),B._inFlightCloseRequest=void 0,B._pendingAbortRequest!==void 0&&(B._pendingAbortRequest._reject(A),B._pendingAbortRequest=void 0),$41(B,A)}(C,w),null))}(I):function(Z,C){let W=Z._controlledWritableStream;(function(w){w._inFlightWriteRequest=w._writeRequests.shift()})(W),R7(Z._writeAlgorithm(C),()=>{(function(B){B._inFlightWriteRequest._resolve(void 0),B._inFlightWriteRequest=void 0})(W);let w=W._state;if(L41(Z),!yY(W)&&w==="writable"){let B=a41(Z);r41(W,B)}return _h(Z),null},(w)=>(W._state==="writable"&&Gh(Z),function(B,A){B._inFlightWriteRequest._reject(A),B._inFlightWriteRequest=void 0,$41(B,A)}(W,w),null))}(I,G)}function $b1(I,d){I._controlledWritableStream._state==="writable"&&Eh1(I,d)}function a41(I){return vh1(I)<=0}function Eh1(I,d){let G=I._controlledWritableStream;Gh(I),i41(G,d)}function xb(I){return new TypeError(`WritableStream.prototype.${I} can only be used on a WritableStream`)}function v41(I){return new TypeError(`WritableStreamDefaultController.prototype.${I} can only be used on a WritableStreamDefaultController`)}function aF(I){return new TypeError(`WritableStreamDefaultWriter.prototype.${I} can only be used on a WritableStreamDefaultWriter`)}function cE(I){return new TypeError("Cannot "+I+" a stream using a released writer")}function ob(I){I._closedPromise=II((d,G)=>{I._closedPromise_resolve=d,I._closedPromise_reject=G,I._closedPromiseState="pending"})}function ub1(I,d){ob(I),s41(I,d)}function s41(I,d){I._closedPromise_reject!==void 0&&(hz(I._closedPromise),I._closedPromise_reject(d),I._closedPromise_resolve=void 0,I._closedPromise_reject=void 0,I._closedPromiseState="rejected")}function Mh1(I){I._closedPromise_resolve!==void 0&&(I._closedPromise_resolve(void 0),I._closedPromise_resolve=void 0,I._closedPromise_reject=void 0,I._closedPromiseState="resolved")}function Dh(I){I._readyPromise=II((d,G)=>{I._readyPromise_resolve=d,I._readyPromise_reject=G}),I._readyPromiseState="pending"}function u41(I,d){Dh(I),Sh1(I,d)}function Tb1(I){Dh(I),o41(I)}function Sh1(I,d){I._readyPromise_reject!==void 0&&(hz(I._readyPromise),I._readyPromise_reject(d),I._readyPromise_resolve=void 0,I._readyPromise_reject=void 0,I._readyPromiseState="rejected")}function o41(I){I._readyPromise_resolve!==void 0&&(I._readyPromise_resolve(void 0),I._readyPromise_resolve=void 0,I._readyPromise_reject=void 0,I._readyPromiseState="fulfilled")}function mb1(I,d,G,Z,C,W){let w=I.getReader(),B=d.getWriter();tF(I)&&(I._disturbed=!0);let A,V,X,_=!1,F=!1,g="readable",J="writable",K=!1,Q=!1,E=II((P)=>{X=P}),S=Promise.resolve(void 0);return II((P,$)=>{let h;function O(){if(_)return;let f1=II((r,A1)=>{(function m1(T1){T1?r():iA(function(){if(_)return P5(!0);return iA(B.ready,()=>iA(w.read(),(e1)=>!!e1.done||(S=B.write(e1.value),hz(S),!1)))}(),m1,A1)})(!1)});hz(f1)}function T(){return g="closed",G?o1():c1(()=>(Mw(d)&&(K=yY(d),J=d._state),K||J==="closed"?P5(void 0):J==="erroring"||J==="errored"?Z4(V):(K=!0,B.close())),!1,void 0),null}function V1(f1){return _||(g="errored",A=f1,Z?o1(!0,f1):c1(()=>B.abort(f1),!0,f1)),null}function c(f1){return F||(J="errored",V=f1,C?o1(!0,f1):c1(()=>w.cancel(f1),!0,f1)),null}if(W!==void 0&&(h=()=>{let f1=W.reason!==void 0?W.reason:new iV4("Aborted","AbortError"),r=[];Z||r.push(()=>J==="writable"?B.abort(f1):P5(void 0)),C||r.push(()=>g==="readable"?w.cancel(f1):P5(void 0)),c1(()=>Promise.all(r.map((A1)=>A1())),!0,f1)},W.aborted?h():W.addEventListener("abort",h)),tF(I)&&(g=I._state,A=I._storedError),Mw(d)&&(J=d._state,V=d._storedError,K=yY(d)),tF(I)&&Mw(d)&&(Q=!0,X()),g==="errored")V1(A);else if(J==="erroring"||J==="errored")c(V);else if(g==="closed")T();else if(K||J==="closed"){let f1=new TypeError("the destination writable stream closed before all data could be piped to it");C?o1(!0,f1):c1(()=>w.cancel(f1),!0,f1)}function c1(f1,r,A1){function m1(){return J!=="writable"||K?T1():qb1(function(){let e1;return P5(function F0(){if(e1!==S)return e1=S,RC(S,F0,F0)}())}(),T1),null}function T1(){return f1?R7(f1(),()=>a1(r,A1),(e1)=>a1(!0,e1)):a1(r,A1),null}_||(_=!0,Q?m1():qb1(E,m1))}function o1(f1,r){c1(void 0,f1,r)}function a1(f1,r){return F=!0,B.releaseLock(),w.releaseLock(),W!==void 0&&W.removeEventListener("abort",h),f1?$(r):P(void 0),null}_||(R7(w.closed,T,V1),R7(B.closed,function(){return F||(J="closed"),null},c)),Q?O():rb(()=>{Q=!0,X(),O()})})}function nV4(I,d){return function(G){try{return G.getReader({mode:"byob"}).releaseLock(),!0}catch(Z){return!1}}(I)?function(G){let Z,C,W,w,B,A=G.getReader(),V=!1,X=!1,_=!1,F=!1,g=!1,J=!1,K=II((c)=>{B=c});function Q(c){Rb1(c.closed,(c1)=>(c!==A||(W.error(c1),w.error(c1),g&&J||B(void 0)),null))}function E(){V&&(A.releaseLock(),A=G.getReader(),Q(A),V=!1),R7(A.read(),(c)=>{var c1,o1;if(_=!1,F=!1,c.done)return g||W.close(),J||w.close(),(c1=W.byobRequest)===null||c1===void 0||c1.respond(0),(o1=w.byobRequest)===null||o1===void 0||o1.respond(0),g&&J||B(void 0),null;let a1=c.value,f1=a1,r=a1;if(!g&&!J)try{r=Sb1(a1)}catch(A1){return W.error(A1),w.error(A1),B(A.cancel(A1)),null}return g||W.enqueue(f1),J||w.enqueue(r),X=!1,_?P():F&&$(),null},()=>(X=!1,null))}function S(c,c1){V||(A.releaseLock(),A=G.getReader({mode:"byob"}),Q(A),V=!0);let o1=c1?w:W,a1=c1?W:w;R7(A.read(c),(f1)=>{var r;_=!1,F=!1;let A1=c1?J:g,m1=c1?g:J;if(f1.done){A1||o1.close(),m1||a1.close();let e1=f1.value;return e1!==void 0&&(A1||o1.byobRequest.respondWithNewView(e1),m1||(r=a1.byobRequest)===null||r===void 0||r.respond(0)),A1&&m1||B(void 0),null}let T1=f1.value;if(m1)A1||o1.byobRequest.respondWithNewView(T1);else{let e1;try{e1=Sb1(T1)}catch(F0){return o1.error(F0),a1.error(F0),B(A.cancel(F0)),null}A1||o1.byobRequest.respondWithNewView(T1),a1.enqueue(e1)}return X=!1,_?P():F&&$(),null},()=>(X=!1,null))}function P(){if(X)return _=!0,P5(void 0);X=!0;let c=W.byobRequest;return c===null?E():S(c.view,!1),P5(void 0)}function $(){if(X)return F=!0,P5(void 0);X=!0;let c=w.byobRequest;return c===null?E():S(c.view,!0),P5(void 0)}function h(c){if(g=!0,Z=c,J){let c1=[Z,C],o1=A.cancel(c1);B(o1)}return K}function O(c){if(J=!0,C=c,g){let c1=[Z,C],o1=A.cancel(c1);B(o1)}return K}let T=new p6({type:"bytes",start(c){W=c},pull:P,cancel:h}),V1=new p6({type:"bytes",start(c){w=c},pull:$,cancel:O});return Q(A),[T,V1]}(I):function(G,Z){let C=G.getReader(),W,w,B,A,V,X=!1,_=!1,F=!1,g=!1,J=II(($)=>{V=$});function K(){return X?(_=!0,P5(void 0)):(X=!0,R7(C.read(),($)=>{if(_=!1,$.done)return F||B.close(),g||A.close(),F&&g||V(void 0),null;let h=$.value,O=h,T=h;return F||B.enqueue(O),g||A.enqueue(T),X=!1,_&&K(),null},()=>(X=!1,null)),P5(void 0))}function Q($){if(F=!0,W=$,g){let h=[W,w],O=C.cancel(h);V(O)}return J}function E($){if(g=!0,w=$,F){let h=[W,w],O=C.cancel(h);V(O)}return J}let S=new p6({start($){B=$},pull:K,cancel:Q}),P=new p6({start($){A=$},pull:K,cancel:E});return Rb1(C.closed,($)=>(B.error($),A.error($),F&&g||V(void 0),null)),[S,P]}(I)}function cb(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_controlledReadableStream")&&I instanceof SY)}function nE(I){if(!function(G){let Z=G._controlledReadableStream;if(!iE(G))return!1;if(!G._started)return!1;if(xz(Z)&&Yh(Z)>0)return!0;if(Lh1(G)>0)return!0;return!1}(I))return;if(I._pulling)return void(I._pullAgain=!0);I._pulling=!0,R7(I._pullAlgorithm(),()=>(I._pulling=!1,I._pullAgain&&(I._pullAgain=!1,nE(I)),null),(G)=>(rE(I,G),null))}function eb(I){I._pullAlgorithm=void 0,I._cancelAlgorithm=void 0,I._strategySizeAlgorithm=void 0}function rE(I,d){let G=I._controlledReadableStream;G._state==="readable"&&(PY(I),eb(I),Ph1(G,d))}function Lh1(I){let d=I._controlledReadableStream._state;return d==="errored"?null:d==="closed"?0:I._strategyHWM-I._queueTotalSize}function iE(I){return!I._closeRequested&&I._controlledReadableStream._state==="readable"}function rV4(I,d,G,Z){let C=Object.create(SY.prototype),W,w,B;W=d.start!==void 0?()=>d.start(C):()=>{},w=d.pull!==void 0?()=>d.pull(C):()=>P5(void 0),B=d.cancel!==void 0?(A)=>d.cancel(A):()=>P5(void 0),function(A,V,X,_,F,g,J){V._controlledReadableStream=A,V._queue=void 0,V._queueTotalSize=void 0,PY(V),V._started=!1,V._closeRequested=!1,V._pullAgain=!1,V._pulling=!1,V._strategySizeAlgorithm=J,V._strategyHWM=g,V._pullAlgorithm=_,V._cancelAlgorithm=F,A._readableStreamController=V,R7(P5(X()),()=>(V._started=!0,nE(V),null),(K)=>(rE(V,K),null))}(I,C,W,w,B,G,Z)}function pb(I){return new TypeError(`ReadableStreamDefaultController.prototype.${I} can only be used on a ReadableStreamDefaultController`)}function aV4(I,d,G){return UC(I,G),(Z)=>dg(I,d,[Z])}function sV4(I,d,G){return UC(I,G),(Z)=>dg(I,d,[Z])}function oV4(I,d,G){return UC(I,G),(Z)=>Xh(I,d,[Z])}function eV4(I,d){if((I=`${I}`)!=="bytes")throw new TypeError(`${d} '${I}' is not a valid enumeration value for ReadableStreamType`);return I}function tV4(I,d){if((I=`${I}`)!=="byob")throw new TypeError(`${d} '${I}' is not a valid enumeration value for ReadableStreamReaderMode`);return I}function lb1(I,d){nA(I,d);let G=I==null?void 0:I.preventAbort,Z=I==null?void 0:I.preventCancel,C=I==null?void 0:I.preventClose,W=I==null?void 0:I.signal;return W!==void 0&&function(w,B){if(!function(A){if(typeof A!="object"||A===null)return!1;try{return typeof A.aborted=="boolean"}catch(V){return!1}}(w))throw new TypeError(`${B} is not an AbortSignal.`)}(W,`${d} has member 'signal' that`),{preventAbort:Boolean(G),preventCancel:Boolean(Z),preventClose:Boolean(C),signal:W}}function IX4(I,d){nA(I,d);let G=I==null?void 0:I.readable;S41(G,"readable","ReadableWritablePair"),function(C,W){if(!pE(C))throw new TypeError(`${W} is not a ReadableStream.`)}(G,`${d} has member 'readable' that`);let Z=I==null?void 0:I.writable;return S41(Z,"writable","ReadableWritablePair"),function(C,W){if(!Ch1(C))throw new TypeError(`${W} is not a WritableStream.`)}(Z,`${d} has member 'writable' that`),{readable:G,writable:Z}}class p6{constructor(I={},d={}){I===void 0?I=null:Gh1(I,"First parameter");let G=dh(d,"Second parameter"),Z=function(W,w){nA(W,w);let B=W,A=B==null?void 0:B.autoAllocateChunkSize,V=B==null?void 0:B.cancel,X=B==null?void 0:B.pull,_=B==null?void 0:B.start,F=B==null?void 0:B.type;return{autoAllocateChunkSize:A===void 0?void 0:Zh1(A,`${w} has member 'autoAllocateChunkSize' that`),cancel:V===void 0?void 0:aV4(V,B,`${w} has member 'cancel' that`),pull:X===void 0?void 0:sV4(X,B,`${w} has member 'pull' that`),start:_===void 0?void 0:oV4(_,B,`${w} has member 'start' that`),type:F===void 0?void 0:eV4(F,`${w} has member 'type' that`)}}(I,"First parameter");var C;if((C=this)._state="readable",C._reader=void 0,C._storedError=void 0,C._disturbed=!1,Z.type==="bytes"){if(G.size!==void 0)throw new RangeError("The strategy for a byte stream cannot have a size function");bV4(this,Z,aE(G,0))}else{let W=Ih(G);rV4(this,Z,aE(G,1),W)}}get locked(){if(!tF(this))throw sF("locked");return xz(this)}cancel(I){return tF(this)?xz(this)?Z4(new TypeError("Cannot cancel a stream that already has a reader")):yh1(this,I):Z4(sF("cancel"))}getReader(I){if(!tF(this))throw sF("getReader");return function(d,G){nA(d,G);let Z=d==null?void 0:d.mode;return{mode:Z===void 0?void 0:tV4(Z,`${G} has member 'mode' that`)}}(I,"First parameter").mode===void 0?new UY(this):function(d){return new EY(d)}(this)}pipeThrough(I,d={}){if(!pE(this))throw sF("pipeThrough");rA(I,1,"pipeThrough");let G=IX4(I,"First parameter"),Z=lb1(d,"Second parameter");if(this.locked)throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(G.writable.locked)throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return hz(mb1(this,G.writable,Z.preventClose,Z.preventAbort,Z.preventCancel,Z.signal)),G.readable}pipeTo(I,d={}){if(!pE(this))return Z4(sF("pipeTo"));if(I===void 0)return Z4("Parameter 1 is required in 'pipeTo'.");if(!Ch1(I))return Z4(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let G;try{G=lb1(d,"Second parameter")}catch(Z){return Z4(Z)}return this.locked?Z4(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):I.locked?Z4(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):mb1(this,I,G.preventClose,G.preventAbort,G.preventCancel,G.signal)}tee(){if(!pE(this))throw sF("tee");if(this.locked)throw new TypeError("Cannot tee a stream that already has a reader");return nV4(this)}values(I){if(!pE(this))throw sF("values");return function(d,G){let Z=d.getReader(),C=new k41(Z,G),W=Object.create(Vh1);return W._asyncIteratorImpl=C,W}(this,function(d,G){nA(d,G);let Z=d==null?void 0:d.preventCancel;return{preventCancel:Boolean(Z)}}(I,"First parameter").preventCancel)}}function tF(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_readableStreamController")&&I instanceof p6)}function xz(I){return I._reader!==void 0}function yh1(I,d){if(I._disturbed=!0,I._state==="closed")return P5(void 0);if(I._state==="errored")return Z4(I._storedError);oE(I);let G=I._reader;if(G!==void 0&&lz(G)){let Z=G._readIntoRequests;G._readIntoRequests=new rd,Z.forEach((C)=>{C._closeSteps(void 0)})}return RC(I._readableStreamController[O41](d),nb1)}function oE(I){I._state="closed";let d=I._reader;if(d!==void 0&&(dh1(d),oF(d))){let G=d._readRequests;d._readRequests=new rd,G.forEach((Z)=>{Z._closeSteps()})}}function Ph1(I,d){I._state="errored",I._storedError=d;let G=I._reader;G!==void 0&&(b41(G,d),oF(G)?Ah1(G,d):Qh1(G,d))}function sF(I){return new TypeError(`ReadableStream.prototype.${I} can only be used on a ReadableStream`)}function $h1(I,d){nA(I,d);let G=I==null?void 0:I.highWaterMark;return S41(G,"highWaterMark","QueuingStrategyInit"),{highWaterMark:h41(G)}}class Zh{constructor(I){rA(I,1,"ByteLengthQueuingStrategy"),I=$h1(I,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=I.highWaterMark}get highWaterMark(){if(!hb1(this))throw bb1("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!hb1(this))throw bb1("size");return uh1}}function bb1(I){return new TypeError(`ByteLengthQueuingStrategy.prototype.${I} can only be used on a ByteLengthQueuingStrategy`)}function hb1(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_byteLengthQueuingStrategyHighWaterMark")&&I instanceof Zh)}class Ch{constructor(I){rA(I,1,"CountQueuingStrategy"),I=$h1(I,"First parameter"),this._countQueuingStrategyHighWaterMark=I.highWaterMark}get highWaterMark(){if(!kb1(this))throw jb1("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!kb1(this))throw jb1("size");return Th1}}function jb1(I){return new TypeError(`CountQueuingStrategy.prototype.${I} can only be used on a CountQueuingStrategy`)}function kb1(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_countQueuingStrategyHighWaterMark")&&I instanceof Ch)}function dX4(I,d,G){return UC(I,G),(Z)=>dg(I,d,[Z])}function GX4(I,d,G){return UC(I,G),(Z)=>Xh(I,d,[Z])}function ZX4(I,d,G){return UC(I,G),(Z,C)=>dg(I,d,[Z,C])}class Wh{constructor(I={},d={},G={}){I===void 0&&(I=null);let Z=dh(d,"Second parameter"),C=dh(G,"Third parameter"),W=function(_,F){nA(_,F);let g=_==null?void 0:_.flush,J=_==null?void 0:_.readableType,K=_==null?void 0:_.start,Q=_==null?void 0:_.transform,E=_==null?void 0:_.writableType;return{flush:g===void 0?void 0:dX4(g,_,`${F} has member 'flush' that`),readableType:J,start:K===void 0?void 0:GX4(K,_,`${F} has member 'start' that`),transform:Q===void 0?void 0:ZX4(Q,_,`${F} has member 'transform' that`),writableType:E}}(I,"First parameter");if(W.readableType!==void 0)throw new RangeError("Invalid readableType specified");if(W.writableType!==void 0)throw new RangeError("Invalid writableType specified");let w=aE(C,0),B=Ih(C),A=aE(Z,1),V=Ih(Z),X;(function(_,F,g,J,K,Q){function E(){return F}function S(T){return function(V1,c){let c1=V1._transformStreamController;if(V1._backpressure)return RC(V1._backpressureChangePromise,()=>{if((Mw(V1._writable)?V1._writable._state:V1._writableState)==="erroring")throw Mw(V1._writable)?V1._writable._storedError:V1._writableStoredError;return cb1(c1,c)});return cb1(c1,c)}(_,T)}function P(T){return function(V1,c){return wh(V1,c),P5(void 0)}(_,T)}function $(){return function(T){let V1=T._transformStreamController,c=V1._flushAlgorithm();return Oh1(V1),RC(c,()=>{if(T._readableState==="errored")throw T._readableStoredError;Ah(T)&&lh1(T)},(c1)=>{throw wh(T,c1),T._readableStoredError})}(_)}function h(){return function(T){return Bh(T,!1),T._backpressureChangePromise}(_)}function O(T){return Hh(_,T),P5(void 0)}_._writableState="writable",_._writableStoredError=void 0,_._writableHasInFlightOperation=!1,_._writableStarted=!1,_._writable=function(T,V1,c,c1,o1,a1,f1){return new MY({start(r){T._writableController=r;try{let A1=r.signal;A1!==void 0&&A1.addEventListener("abort",()=>{T._writableState==="writable"&&(T._writableState="erroring",A1.reason&&(T._writableStoredError=A1.reason))})}catch(A1){}return RC(V1(),()=>(T._writableStarted=!0,ib1(T),null),(A1)=>{throw T._writableStarted=!0,E41(T,A1),A1})},write:(r)=>(function(A1){A1._writableHasInFlightOperation=!0}(T),RC(c(r),()=>(function(A1){A1._writableHasInFlightOperation=!1}(T),ib1(T),null),(A1)=>{throw function(m1,T1){m1._writableHasInFlightOperation=!1,E41(m1,T1)}(T,A1),A1})),close:()=>(function(r){r._writableHasInFlightOperation=!0}(T),RC(c1(),()=>(function(r){r._writableHasInFlightOperation=!1,r._writableState==="erroring"&&(r._writableStoredError=void 0),r._writableState="closed"}(T),null),(r)=>{throw function(A1,m1){A1._writableHasInFlightOperation=!1,A1._writableState,E41(A1,m1)}(T,r),r})),abort:(r)=>(T._writableState="errored",T._writableStoredError=r,o1(r))},{highWaterMark:a1,size:f1})}(_,E,S,$,P,g,J),_._readableState="readable",_._readableStoredError=void 0,_._readableCloseRequested=!1,_._readablePulling=!1,_._readable=function(T,V1,c,c1,o1,a1){return new p6({start:(f1)=>(T._readableController=f1,V1().catch((r)=>{Vh(T,r)})),pull:()=>(T._readablePulling=!0,c().catch((f1)=>{Vh(T,f1)})),cancel:(f1)=>(T._readableState="closed",c1(f1))},{highWaterMark:o1,size:a1})}(_,E,h,O,K,Q),_._backpressure=void 0,_._backpressureChangePromise=void 0,_._backpressureChangePromise_resolve=void 0,Bh(_,!0),_._transformStreamController=void 0})(this,II((_)=>{X=_}),A,V,w,B),function(_,F){let g=Object.create(LY.prototype),J,K;J=F.transform!==void 0?(Q)=>F.transform(Q,g):(Q)=>{try{return mh1(g,Q),P5(void 0)}catch(E){return Z4(E)}},K=F.flush!==void 0?()=>F.flush(g):()=>P5(void 0),function(Q,E,S,P){E._controlledTransformStream=Q,Q._transformStreamController=E,E._transformAlgorithm=S,E._flushAlgorithm=P}(_,g,J,K)}(this,W),W.start!==void 0?X(W.start(this._transformStreamController)):X(void 0)}get readable(){if(!xb1(this))throw pb1("readable");return this._readable}get writable(){if(!xb1(this))throw pb1("writable");return this._writable}}function xb1(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_transformStreamController")&&I instanceof Wh)}function wh(I,d){Vh(I,d),Hh(I,d)}function Hh(I,d){Oh1(I._transformStreamController),function(G,Z){G._writableController.error(Z),G._writableState==="writable"&&hh1(G,Z)}(I,d),I._backpressure&&Bh(I,!1)}function Bh(I,d){I._backpressureChangePromise!==void 0&&I._backpressureChangePromise_resolve(),I._backpressureChangePromise=II((G)=>{I._backpressureChangePromise_resolve=G}),I._backpressure=d}class LY{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!ib(this))throw nb("desiredSize");return bh1(this._controlledTransformStream)}enqueue(I){if(!ib(this))throw nb("enqueue");mh1(this,I)}error(I){if(!ib(this))throw nb("error");var d;d=I,wh(this._controlledTransformStream,d)}terminate(){if(!ib(this))throw nb("terminate");(function(I){let d=I._controlledTransformStream;Ah(d)&&lh1(d);let G=new TypeError("TransformStream terminated");Hh(d,G)})(this)}}function ib(I){return!!U7(I)&&(!!Object.prototype.hasOwnProperty.call(I,"_controlledTransformStream")&&I instanceof LY)}function Oh1(I){I._transformAlgorithm=void 0,I._flushAlgorithm=void 0}function mh1(I,d){let G=I._controlledTransformStream;if(!Ah(G))throw new TypeError("Readable side is not in a state that permits enqueue");try{(function(C,W){C._readablePulling=!1;try{C._readableController.enqueue(W)}catch(w){throw Vh(C,w),w}})(G,d)}catch(C){throw Hh(G,C),G._readableStoredError}(function(C){return!function(W){if(!Ah(W))return!1;if(W._readablePulling)return!0;if(bh1(W)>0)return!0;return!1}(C)})(G)!==G._backpressure&&Bh(G,!0)}function cb1(I,d){return RC(I._transformAlgorithm(d),void 0,(G)=>{throw wh(I._controlledTransformStream,G),G})}function nb(I){return new TypeError(`TransformStreamDefaultController.prototype.${I} can only be used on a TransformStreamDefaultController`)}function pb1(I){return new TypeError(`TransformStream.prototype.${I} can only be used on a TransformStream`)}function Ah(I){return!I._readableCloseRequested&&I._readableState==="readable"}function lh1(I){I._readableState="closed",I._readableCloseRequested=!0,I._readableController.close()}function Vh(I,d){I._readableState==="readable"&&(I._readableState="errored",I._readableStoredError=d),I._readableController.error(d)}function bh1(I){return I._readableController.desiredSize}function E41(I,d){I._writableState!=="writable"?e41(I):hh1(I,d)}function hh1(I,d){I._writableState="erroring",I._writableStoredError=d,!function(G){return G._writableHasInFlightOperation}(I)&&I._writableStarted&&e41(I)}function e41(I){I._writableState="errored"}function ib1(I){I._writableState==="erroring"&&e41(I)}var W5,rb1,T41,TV4,OV4,mV4,rb=(I)=>{if(typeof queueMicrotask=="function")rb=queueMicrotask;else{let d=P5(void 0);rb=(G)=>iA(d,G)}return rb(I)},ab1,sb1,O41,m41,l41,Ub1,lV4,Vh1,Xh1,vY,pV4,Uh1,sE,Ob1,iV4,SY,uh1=(I)=>I.byteLength,Th1=()=>1;var jh1=Gw(()=>{W5=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol:(I)=>`Symbol(${I})`;rb1=nb1;T41=Promise,TV4=Promise.prototype.then,OV4=Promise.resolve.bind(T41),mV4=Promise.reject.bind(T41);ab1=W5("[[AbortSteps]]"),sb1=W5("[[ErrorSteps]]"),O41=W5("[[CancelSteps]]"),m41=W5("[[PullSteps]]"),l41=W5("[[ReleaseSteps]]");Ub1=Number.isFinite||function(I){return typeof I=="number"&&isFinite(I)},lV4=Math.trunc||function(I){return I<0?Math.ceil(I):Math.floor(I)};Object.defineProperties(UY.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),M5(UY.prototype.cancel,"cancel"),M5(UY.prototype.read,"read"),M5(UY.prototype.releaseLock,"releaseLock"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(UY.prototype,W5.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0});Vh1={next(){return Eb1(this)?this._asyncIteratorImpl.next():Z4(Mb1("next"))},return(I){return Eb1(this)?this._asyncIteratorImpl.return(I):Z4(Mb1("return"))}};typeof W5.asyncIterator=="symbol"&&Object.defineProperty(Vh1,W5.asyncIterator,{value(){return this},writable:!0,configurable:!0});Xh1=Number.isNaN||function(I){return I!=I};Object.defineProperties(eF.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),M5(eF.prototype.respond,"respond"),M5(eF.prototype.respondWithNewView,"respondWithNewView"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(eF.prototype,W5.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});vY=class vY{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!mz(this))throw xE("byobRequest");return function(I){if(I._byobRequest===null&&I._pendingPullIntos.length>0){let d=I._pendingPullIntos.peek(),G=new Uint8Array(d.buffer,d.byteOffset+d.bytesFilled,d.byteLength-d.bytesFilled),Z=Object.create(eF.prototype);(function(C,W,w){C._associatedReadableByteStreamController=W,C._view=w})(Z,I,G),I._byobRequest=Z}return I._byobRequest}(this)}get desiredSize(){if(!mz(this))throw xE("desiredSize");return Nh1(this)}close(){if(!mz(this))throw xE("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");let I=this._controlledReadableByteStream._state;if(I!=="readable")throw new TypeError(`The stream (in ${I} state) is not in the readable state and cannot be closed`);(function(d){let G=d._controlledReadableByteStream;if(d._closeRequested||G._state!=="readable")return;if(d._queueTotalSize>0)return void(d._closeRequested=!0);if(d._pendingPullIntos.length>0){if(d._pendingPullIntos.peek().bytesFilled>0){let Z=new TypeError("Insufficient bytes to fill elements in the given buffer");throw kz(d,Z),Z}}tb(d),oE(G)})(this)}enqueue(I){if(!mz(this))throw xE("enqueue");if(rA(I,1,"enqueue"),!ArrayBuffer.isView(I))throw new TypeError("chunk must be an array buffer view");if(I.byteLength===0)throw new TypeError("chunk must have non-zero byteLength");if(I.buffer.byteLength===0)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");let d=this._controlledReadableByteStream._state;if(d!=="readable")throw new TypeError(`The stream (in ${d} state) is not in the readable state and cannot be enqueued to`);(function(G,Z){let C=G._controlledReadableByteStream;if(G._closeRequested||C._state!=="readable")return;let{buffer:W,byteOffset:w,byteLength:B}=Z,A=W;if(G._pendingPullIntos.length>0){let V=G._pendingPullIntos.peek();V.buffer,c41(G),V.buffer=V.buffer,V.readerType==="none"&&Fh1(G,V)}if(Bh1(C))if(function(V){let X=V._controlledReadableByteStream._reader;for(;X._readRequests.length>0;){if(V._queueTotalSize===0)return;yb1(V,X._readRequests.shift())}}(G),Yh(C)===0)ab(G,A,w,B);else G._pendingPullIntos.length>0&&bz(G),j41(C,new Uint8Array(A,w,B),!1);else p41(C)?(ab(G,A,w,B),P41(G)):ab(G,A,w,B);Ig(G)})(this,I)}error(I){if(!mz(this))throw xE("error");kz(this,I)}[O41](I){_h1(this),PY(this);let d=this._cancelAlgorithm(I);return tb(this),d}[m41](I){let d=this._controlledReadableByteStream;if(this._queueTotalSize>0)return void yb1(this,I);let G=this._autoAllocateChunkSize;if(G!==void 0){let Z;try{Z=new ArrayBuffer(G)}catch(W){return void I._errorSteps(W)}let C={buffer:Z,bufferByteLength:G,byteOffset:0,byteLength:G,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(C)}wh1(d,I),Ig(this)}[l41](){if(this._pendingPullIntos.length>0){let I=this._pendingPullIntos.peek();I.readerType="none",this._pendingPullIntos=new rd,this._pendingPullIntos.push(I)}}};Object.defineProperties(vY.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),M5(vY.prototype.close,"close"),M5(vY.prototype.enqueue,"enqueue"),M5(vY.prototype.error,"error"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(vY.prototype,W5.toStringTag,{value:"ReadableByteStreamController",configurable:!0});Object.defineProperties(EY.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),M5(EY.prototype.cancel,"cancel"),M5(EY.prototype.read,"read"),M5(EY.prototype.releaseLock,"releaseLock"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(EY.prototype,W5.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});pV4=typeof AbortController=="function";Object.defineProperties(MY.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),M5(MY.prototype.abort,"abort"),M5(MY.prototype.close,"close"),M5(MY.prototype.getWriter,"getWriter"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(MY.prototype,W5.toStringTag,{value:"WritableStream",configurable:!0});Object.defineProperties(pA.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),M5(pA.prototype.abort,"abort"),M5(pA.prototype.close,"close"),M5(pA.prototype.releaseLock,"releaseLock"),M5(pA.prototype.write,"write"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(pA.prototype,W5.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});Uh1={};sE=class sE{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!U41(this))throw v41("abortReason");return this._abortReason}get signal(){if(!U41(this))throw v41("signal");if(this._abortController===void 0)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(I){if(!U41(this))throw v41("error");this._controlledWritableStream._state==="writable"&&Eh1(this,I)}[ab1](I){let d=this._abortAlgorithm(I);return Gh(this),d}[sb1](){PY(this)}};Object.defineProperties(sE.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),typeof W5.toStringTag=="symbol"&&Object.defineProperty(sE.prototype,W5.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});Ob1=typeof DOMException!="undefined"?DOMException:void 0,iV4=function(I){if(typeof I!="function"&&typeof I!="object")return!1;try{return new I,!0}catch(d){return!1}}(Ob1)?Ob1:function(){let I=function(d,G){this.message=d||"",this.name=G||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return I.prototype=Object.create(Error.prototype),Object.defineProperty(I.prototype,"constructor",{value:I,writable:!0,configurable:!0}),I}();SY=class SY{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!cb(this))throw pb("desiredSize");return Lh1(this)}close(){if(!cb(this))throw pb("close");if(!iE(this))throw new TypeError("The stream is not in a state that permits close");(function(I){if(!iE(I))return;let d=I._controlledReadableStream;I._closeRequested=!0,I._queue.length===0&&(eb(I),oE(d))})(this)}enqueue(I){if(!cb(this))throw pb("enqueue");if(!iE(this))throw new TypeError("The stream is not in a state that permits enqueue");return function(d,G){if(!iE(d))return;let Z=d._controlledReadableStream;if(xz(Z)&&Yh(Z)>0)j41(Z,G,!1);else{let C;try{C=d._strategySizeAlgorithm(G)}catch(W){throw rE(d,W),W}try{x41(d,G,C)}catch(W){throw rE(d,W),W}}nE(d)}(this,I)}error(I){if(!cb(this))throw pb("error");rE(this,I)}[O41](I){PY(this);let d=this._cancelAlgorithm(I);return eb(this),d}[m41](I){let d=this._controlledReadableStream;if(this._queue.length>0){let G=L41(this);this._closeRequested&&this._queue.length===0?(eb(this),oE(d)):nE(this),I._chunkSteps(G)}else wh1(d,I),nE(this)}[l41](){}};Object.defineProperties(SY.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),M5(SY.prototype.close,"close"),M5(SY.prototype.enqueue,"enqueue"),M5(SY.prototype.error,"error"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(SY.prototype,W5.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});Object.defineProperties(p6.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),M5(p6.prototype.cancel,"cancel"),M5(p6.prototype.getReader,"getReader"),M5(p6.prototype.pipeThrough,"pipeThrough"),M5(p6.prototype.pipeTo,"pipeTo"),M5(p6.prototype.tee,"tee"),M5(p6.prototype.values,"values"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(p6.prototype,W5.toStringTag,{value:"ReadableStream",configurable:!0}),typeof W5.asyncIterator=="symbol"&&Object.defineProperty(p6.prototype,W5.asyncIterator,{value:p6.prototype.values,writable:!0,configurable:!0});M5(uh1,"size");Object.defineProperties(Zh.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),typeof W5.toStringTag=="symbol"&&Object.defineProperty(Zh.prototype,W5.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});M5(Th1,"size");Object.defineProperties(Ch.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),typeof W5.toStringTag=="symbol"&&Object.defineProperty(Ch.prototype,W5.toStringTag,{value:"CountQueuingStrategy",configurable:!0});Object.defineProperties(Wh.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),typeof W5.toStringTag=="symbol"&&Object.defineProperty(Wh.prototype,W5.toStringTag,{value:"TransformStream",configurable:!0});Object.defineProperties(LY.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),M5(LY.prototype.enqueue,"enqueue"),M5(LY.prototype.error,"error"),M5(LY.prototype.terminate,"terminate"),typeof W5.toStringTag=="symbol"&&Object.defineProperty(LY.prototype,W5.toStringTag,{value:"TransformStreamDefaultController",configurable:!0})});var Z6=(I)=>typeof I==="function";async function*WX4(I){let d=I.byteOffset+I.byteLength,G=I.byteOffset;while(G!==d){let Z=Math.min(d-G,kh1),C=I.buffer.slice(G,G+Z);G+=C.byteLength,yield new Uint8Array(C)}}async function*wX4(I){let d=0;while(d!==I.size){let Z=await I.slice(d,Math.min(I.size,d+kh1)).arrayBuffer();d+=Z.byteLength,yield new Uint8Array(Z)}}async function*Fh(I,d=!1){for(let G of I)if(ArrayBuffer.isView(G))if(d)yield*WX4(G);else yield G;else if(Z6(G.stream))yield*G.stream();else yield*wX4(G)}function*xh1(I,d,G=0,Z){Z!==null&&Z!==void 0||(Z=d);let C=G<0?Math.max(d+G,0):Math.min(G,d),W=Z<0?Math.max(d+Z,0):Math.min(Z,d),w=Math.max(W-C,0),B=0;for(let A of I){if(B>=w)break;let V=ArrayBuffer.isView(A)?A.byteLength:A.size;if(C&&V<=C)C-=V,W-=V;else{let X;if(ArrayBuffer.isView(A))X=A.subarray(C,Math.min(V,W)),B+=X.byteLength;else X=A.slice(C,Math.min(V,W)),B+=X.size;W-=V,C=0,yield X}}}var kh1=65536;var ch1=Gw(()=>{/*! Based on fetch-blob. MIT License. Jimmy Wärting & David Frank */});var $Y=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},ph1=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},Gg,gh,eE,vC;var t41=Gw(()=>{jh1();ch1();/*! Based on fetch-blob. MIT License. Jimmy Wärting & David Frank */vC=class vC{constructor(I=[],d={}){if(Gg.set(this,[]),gh.set(this,""),eE.set(this,0),d!==null&&d!==void 0||(d={}),typeof I!=="object"||I===null)throw new TypeError("Failed to construct 'Blob': The provided value cannot be converted to a sequence.");if(!Z6(I[Symbol.iterator]))throw new TypeError("Failed to construct 'Blob': The object must have a callable @@iterator property.");if(typeof d!=="object"&&!Z6(d))throw new TypeError("Failed to construct 'Blob': parameter 2 cannot convert to dictionary.");let G=new TextEncoder;for(let C of I){let W;if(ArrayBuffer.isView(C))W=new Uint8Array(C.buffer.slice(C.byteOffset,C.byteOffset+C.byteLength));else if(C instanceof ArrayBuffer)W=new Uint8Array(C.slice(0));else if(C instanceof vC)W=C;else W=G.encode(String(C));ph1(this,eE,$Y(this,eE,"f")+(ArrayBuffer.isView(W)?W.byteLength:W.size),"f"),$Y(this,Gg,"f").push(W)}let Z=d.type===void 0?"":String(d.type);ph1(this,gh,/^[\x20-\x7E]*$/.test(Z)?Z:"","f")}static[(Gg=new WeakMap,gh=new WeakMap,eE=new WeakMap,Symbol.hasInstance)](I){return Boolean(I&&typeof I==="object"&&Z6(I.constructor)&&(Z6(I.stream)||Z6(I.arrayBuffer))&&/^(Blob|File)$/.test(I[Symbol.toStringTag]))}get type(){return $Y(this,gh,"f")}get size(){return $Y(this,eE,"f")}slice(I,d,G){return new vC(xh1($Y(this,Gg,"f"),this.size,I,d),{type:G})}async text(){let I=new TextDecoder,d="";for await(let G of Fh($Y(this,Gg,"f")))d+=I.decode(G,{stream:!0});return d+=I.decode(),d}async arrayBuffer(){let I=new Uint8Array(this.size),d=0;for await(let G of Fh($Y(this,Gg,"f")))I.set(G,d),d+=G.length;return I.buffer}stream(){let I=Fh($Y(this,Gg,"f"),!0);return new p6({async pull(d){let{value:G,done:Z}=await I.next();if(Z)return queueMicrotask(()=>d.close());d.enqueue(G)},async cancel(){await I.return()}})}get[Symbol.toStringTag](){return"Blob"}};Object.defineProperties(vC.prototype,{type:{enumerable:!0},size:{enumerable:!0},slice:{enumerable:!0},stream:{enumerable:!0},text:{enumerable:!0},arrayBuffer:{enumerable:!0}})});var ih1=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},nh1=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},Jh,Kh,Sw;var Nh=Gw(()=>{t41();Sw=class Sw extends vC{constructor(I,d,G={}){super(I,G);if(Jh.set(this,void 0),Kh.set(this,0),arguments.length<2)throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`);ih1(this,Jh,String(d),"f");let Z=G.lastModified===void 0?Date.now():Number(G.lastModified);if(!Number.isNaN(Z))ih1(this,Kh,Z,"f")}static[(Jh=new WeakMap,Kh=new WeakMap,Symbol.hasInstance)](I){return I instanceof vC&&I[Symbol.toStringTag]==="File"&&typeof I.name==="string"}get name(){return nh1(this,Jh,"f")}get lastModified(){return nh1(this,Kh,"f")}get webkitRelativePath(){return""}get[Symbol.toStringTag](){return"File"}}});var I51=(I)=>I instanceof Sw;var d51=Gw(()=>{Nh()});var C51=Y((BE9,sh1)=>{var cz=1000,pz=cz*60,iz=pz*60,Zg=iz*24,VX4=Zg*7,XX4=Zg*365.25;sh1.exports=function(I,d){d=d||{};var G=typeof I;if(G==="string"&&I.length>0)return YX4(I);else if(G==="number"&&isFinite(I))return d.long?DX4(I):_X4(I);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(I))};function YX4(I){if(I=String(I),I.length>100)return;var d=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(I);if(!d)return;var G=parseFloat(d[1]),Z=(d[2]||"ms").toLowerCase();switch(Z){case"years":case"year":case"yrs":case"yr":case"y":return G*XX4;case"weeks":case"week":case"w":return G*VX4;case"days":case"day":case"d":return G*Zg;case"hours":case"hour":case"hrs":case"hr":case"h":return G*iz;case"minutes":case"minute":case"mins":case"min":case"m":return G*pz;case"seconds":case"second":case"secs":case"sec":case"s":return G*cz;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return G;default:return}}function _X4(I){var d=Math.abs(I);if(d>=Zg)return Math.round(I/Zg)+"d";if(d>=iz)return Math.round(I/iz)+"h";if(d>=pz)return Math.round(I/pz)+"m";if(d>=cz)return Math.round(I/cz)+"s";return I+"ms"}function DX4(I){var d=Math.abs(I);if(d>=Zg)return Qh(I,d,Zg,"day");if(d>=iz)return Qh(I,d,iz,"hour");if(d>=pz)return Qh(I,d,pz,"minute");if(d>=cz)return Qh(I,d,cz,"second");return I+" ms"}function Qh(I,d,G,Z){var C=d>=G*1.5;return Math.round(I/G)+" "+Z+(C?"s":"")}});var eh1=Y((AE9,oh1)=>{/*! + * humanize-ms - index.js + * Copyright(c) 2014 dead_horse + * MIT Licensed + */var HX4=B1("util"),FX4=C51();oh1.exports=function(I){if(typeof I==="number")return I;var d=FX4(I);if(d===void 0){var G=new Error(HX4.format("humanize-ms(%j) result undefined",I));console.warn(G.stack)}return d}});var fh=Y((VE9,th1)=>{th1.exports={CURRENT_ID:Symbol("agentkeepalive#currentId"),CREATE_ID:Symbol("agentkeepalive#createId"),INIT_SOCKET:Symbol("agentkeepalive#initSocket"),CREATE_HTTPS_CONNECTION:Symbol("agentkeepalive#createHttpsConnection"),SOCKET_CREATED_TIME:Symbol("agentkeepalive#socketCreatedTime"),SOCKET_NAME:Symbol("agentkeepalive#socketName"),SOCKET_REQUEST_COUNT:Symbol("agentkeepalive#socketRequestCount"),SOCKET_REQUEST_FINISHED_COUNT:Symbol("agentkeepalive#socketRequestFinishedCount")}});var V51=Y((XE9,Cj1)=>{var gX4=B1("http").Agent,W51=eh1(),dI=B1("util").debuglog("agentkeepalive"),{INIT_SOCKET:Ij1,CURRENT_ID:qh,CREATE_ID:dj1,SOCKET_CREATED_TIME:Gj1,SOCKET_NAME:oI,SOCKET_REQUEST_COUNT:ZZ,SOCKET_REQUEST_FINISHED_COUNT:Pw}=fh(),A51=1,w51=parseInt(process.version.split(".",1)[0].substring(1));if(w51>=11&&w51<=12)A51=2;else if(w51>=13)A51=3;function tE(I){console.log("[agentkeepalive:deprecated] %s",I)}class Zj1 extends gX4{constructor(I){if(I=I||{},I.keepAlive=I.keepAlive!==!1,I.freeSocketTimeout===void 0)I.freeSocketTimeout=4000;if(I.keepAliveTimeout)tE("options.keepAliveTimeout is deprecated, please use options.freeSocketTimeout instead"),I.freeSocketTimeout=I.keepAliveTimeout,delete I.keepAliveTimeout;if(I.freeSocketKeepAliveTimeout)tE("options.freeSocketKeepAliveTimeout is deprecated, please use options.freeSocketTimeout instead"),I.freeSocketTimeout=I.freeSocketKeepAliveTimeout,delete I.freeSocketKeepAliveTimeout;if(I.timeout===void 0)I.timeout=Math.max(I.freeSocketTimeout*2,8000);I.timeout=W51(I.timeout),I.freeSocketTimeout=W51(I.freeSocketTimeout),I.socketActiveTTL=I.socketActiveTTL?W51(I.socketActiveTTL):0;super(I);this[qh]=0,this.createSocketCount=0,this.createSocketCountLastCheck=0,this.createSocketErrorCount=0,this.createSocketErrorCountLastCheck=0,this.closeSocketCount=0,this.closeSocketCountLastCheck=0,this.errorSocketCount=0,this.errorSocketCountLastCheck=0,this.requestCount=0,this.requestCountLastCheck=0,this.timeoutSocketCount=0,this.timeoutSocketCountLastCheck=0,this.on("free",(d)=>{let G=this.calcSocketTimeout(d);if(G>0&&d.timeout!==G)d.setTimeout(G)})}get freeSocketKeepAliveTimeout(){return tE("agent.freeSocketKeepAliveTimeout is deprecated, please use agent.options.freeSocketTimeout instead"),this.options.freeSocketTimeout}get timeout(){return tE("agent.timeout is deprecated, please use agent.options.timeout instead"),this.options.timeout}get socketActiveTTL(){return tE("agent.socketActiveTTL is deprecated, please use agent.options.socketActiveTTL instead"),this.options.socketActiveTTL}calcSocketTimeout(I){let d=this.options.freeSocketTimeout,G=this.options.socketActiveTTL;if(G){let Z=Date.now()-I[Gj1],C=G-Z;if(C<=0)return C;if(d&&C{if(G)return;if(G=!0,W)return this.createSocketErrorCount++,d(W);this[Ij1](w,I),d(W,w)},C=super.createConnection(I,Z);if(C)Z(null,C);return C}get statusChanged(){let I=this.createSocketCount!==this.createSocketCountLastCheck||this.createSocketErrorCount!==this.createSocketErrorCountLastCheck||this.closeSocketCount!==this.closeSocketCountLastCheck||this.errorSocketCount!==this.errorSocketCountLastCheck||this.timeoutSocketCount!==this.timeoutSocketCountLastCheck||this.requestCount!==this.requestCountLastCheck;if(I)this.createSocketCountLastCheck=this.createSocketCount,this.createSocketErrorCountLastCheck=this.createSocketErrorCount,this.closeSocketCountLastCheck=this.closeSocketCount,this.errorSocketCountLastCheck=this.errorSocketCount,this.timeoutSocketCountLastCheck=this.timeoutSocketCount,this.requestCountLastCheck=this.requestCount;return I}getCurrentStatus(){return{createSocketCount:this.createSocketCount,createSocketErrorCount:this.createSocketErrorCount,closeSocketCount:this.closeSocketCount,errorSocketCount:this.errorSocketCount,timeoutSocketCount:this.timeoutSocketCount,requestCount:this.requestCount,freeSockets:B51(this.freeSockets),sockets:B51(this.sockets),requests:B51(this.requests)}}}function IM(I){return I.timeout||I._idleTimeout}function JX4(I,d,G){dI("%s create, timeout %sms",d[oI],IM(d));function Z(){if(!d._httpMessage&&d[ZZ]===1)return;d[Pw]++,I.requestCount++,dI("%s(requests: %s, finished: %s) free",d[oI],d[ZZ],d[Pw]);let A=I.getName(G);if(d.writable&&I.requests[A]&&I.requests[A].length)d[ZZ]++,dI("%s(requests: %s, finished: %s) will be reuse on agent free event",d[oI],d[ZZ],d[Pw])}d.on("free",Z);function C(A){dI("%s(requests: %s, finished: %s) close, isError: %s",d[oI],d[ZZ],d[Pw],A),I.closeSocketCount++}d.on("close",C);function W(){let A=d.listeners("timeout").length,V=IM(d),X=d._httpMessage,_=X&&X.listeners("timeout").length||0;if(dI("%s(requests: %s, finished: %s) timeout after %sms, listeners %s, defaultTimeoutListenerCount %s, hasHttpRequest %s, HttpRequest timeoutListenerCount %s",d[oI],d[ZZ],d[Pw],V,A,A51,!!X,_),dI.enabled)dI("timeout listeners: %s",d.listeners("timeout").map((g)=>g.name).join(", "));I.timeoutSocketCount++;let F=I.getName(G);if(I.freeSockets[F]&&I.freeSockets[F].indexOf(d)!==-1)d.destroy(),I.removeSocket(d,G),dI("%s is free, destroy quietly",d[oI]);else if(_===0){let g=new Error("Socket timeout");g.code="ERR_SOCKET_TIMEOUT",g.timeout=V,d.destroy(g),I.removeSocket(d,G),dI("%s destroy with timeout error",d[oI])}}d.on("timeout",W);function w(A){let V=d.listeners("error").length;if(dI("%s(requests: %s, finished: %s) error: %s, listenerCount: %s",d[oI],d[ZZ],d[Pw],A,V),I.errorSocketCount++,V===1)dI("%s emit uncaught error event",d[oI]),d.removeListener("error",w),d.emit("error",A)}d.on("error",w);function B(){dI("%s(requests: %s, finished: %s) agentRemove",d[oI],d[ZZ],d[Pw]),d.removeListener("close",C),d.removeListener("error",w),d.removeListener("free",Z),d.removeListener("timeout",W),d.removeListener("agentRemove",B)}d.on("agentRemove",B)}Cj1.exports=Zj1;function B51(I){let d={};for(let G in I)d[G]=I[G].length;return d}});var Bj1=Y((YE9,wj1)=>{var X51=B1("https").Agent,KX4=V51(),{INIT_SOCKET:NX4,CREATE_HTTPS_CONNECTION:Wj1}=fh();class Rh extends KX4{constructor(I){super(I);if(this.defaultPort=443,this.protocol="https:",this.maxCachedSessions=this.options.maxCachedSessions,this.maxCachedSessions===void 0)this.maxCachedSessions=100;this._sessionCache={map:{},list:[]}}createConnection(I,d){let G=this[Wj1](I,d);return this[NX4](G,I),G}}Rh.prototype[Wj1]=X51.prototype.createConnection;["getName","_getSession","_cacheSession","_evictSession"].forEach(function(I){if(typeof X51.prototype[I]==="function")Rh.prototype[I]=X51.prototype[I]});wj1.exports=Rh});var Aj1=Y((_E9,Uh)=>{Uh.exports=V51();Uh.exports.HttpsAgent=Bj1();Uh.exports.constants=fh()});var Nj1=Y((Kj1,GM)=>{Object.defineProperty(Kj1,"__esModule",{value:!0});var Hj1=new WeakMap,Y51=new WeakMap;function j9(I){let d=Hj1.get(I);return console.assert(d!=null,"'this' is expected an Event object, but got",I),d}function Vj1(I){if(I.passiveListener!=null){if(typeof console!=="undefined"&&typeof console.error==="function")console.error("Unable to preventDefault inside passive event listener invocation.",I.passiveListener);return}if(!I.event.cancelable)return;if(I.canceled=!0,typeof I.event.preventDefault==="function")I.event.preventDefault()}function nz(I,d){Hj1.set(this,{eventTarget:I,event:d,eventPhase:2,currentTarget:I,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:d.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0});let G=Object.keys(d);for(let Z=0;Z0){let I=new Array(arguments.length);for(let d=0;d{Object.defineProperty(fj1,"__esModule",{value:!0});var D51=Nj1();class Cg extends D51.EventTarget{constructor(){super();throw new TypeError("AbortSignal cannot be constructed directly")}get aborted(){let I=Mh.get(this);if(typeof I!=="boolean")throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this===null?"null":typeof this}`);return I}}D51.defineEventAttribute(Cg.prototype,"abort");function LX4(){let I=Object.create(Cg.prototype);return D51.EventTarget.call(I),Mh.set(I,!1),I}function yX4(I){if(Mh.get(I)!==!1)return;Mh.set(I,!0),I.dispatchEvent({type:"abort"})}var Mh=new WeakMap;Object.defineProperties(Cg.prototype,{aborted:{enumerable:!0}});if(typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol")Object.defineProperty(Cg.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortSignal"});class Wg{constructor(){Qj1.set(this,LX4())}get signal(){return zj1(this)}abort(){yX4(zj1(this))}}var Qj1=new WeakMap;function zj1(I){let d=Qj1.get(I);if(d==null)throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${I===null?"null":typeof I}`);return d}Object.defineProperties(Wg.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}});if(typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol")Object.defineProperty(Wg.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortController"});fj1.AbortController=Wg;fj1.AbortSignal=Cg;fj1.default=Wg;ZM.exports=Wg;ZM.exports.AbortController=ZM.exports.default=Wg;ZM.exports.AbortSignal=Cg});var Ej1=Y((LE9,vj1)=>{/*! node-domexception. MIT License. Jimmy Wärting */if(!globalThis.DOMException)try{let{MessageChannel:I}=B1("worker_threads"),d=new I().port1,G=new ArrayBuffer;d.postMessage(G,[G,G])}catch(I){I.constructor.name==="DOMException"&&(globalThis.DOMException=I.constructor)}vj1.exports=globalThis.DOMException});function xX4(I){if(kX4(I)!=="object")return!1;let d=Object.getPrototypeOf(I);if(d===null||d===void 0)return!0;return(d.constructor&&d.constructor.toString())===Object.toString()}var kX4=(I)=>Object.prototype.toString.call(I).slice(8,-1).toLowerCase(),Mj1;var Sj1=Gw(()=>{Mj1=xX4});var uj1={};Kv(uj1,{isFile:()=>I51,fileFromPathSync:()=>rX4,fileFromPath:()=>aX4});import{statSync as cX4,createReadStream as pX4,promises as yj1}from"fs";import{basename as iX4}from"path";function $j1(I,{mtimeMs:d,size:G},Z,C={}){let W;if(Mj1(Z))[C,W]=[Z,void 0];else W=Z;let w=new z51({path:I,size:G,lastModified:d});if(!W)W=w.name;return new Sw([w],W,{...C,lastModified:w.lastModified})}function rX4(I,d,G={}){let Z=cX4(I);return $j1(I,Z,d,G)}async function aX4(I,d,G){let Z=await yj1.stat(I);return $j1(I,Z,d,G)}var Pj1,Lj1=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},rz=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},Ag,VM,nX4="The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.",z51;var Tj1=Gw(()=>{Pj1=J1(Ej1(),1);Nh();Sj1();d51();z51=class z51{constructor(I){Ag.set(this,void 0),VM.set(this,void 0),Lj1(this,Ag,I.path,"f"),Lj1(this,VM,I.start||0,"f"),this.name=iX4(rz(this,Ag,"f")),this.size=I.size,this.lastModified=I.lastModified}slice(I,d){return new z51({path:rz(this,Ag,"f"),lastModified:this.lastModified,size:d-I,start:I})}async*stream(){let{mtimeMs:I}=await yj1.stat(rz(this,Ag,"f"));if(I>this.lastModified)throw new Pj1.default(nX4,"NotReadableError");if(this.size)yield*pX4(rz(this,Ag,"f"),{start:rz(this,VM,"f"),end:rz(this,VM,"f")+this.size-1})}get[(Ag=new WeakMap,VM=new WeakMap,Symbol.toStringTag)](){return"File"}}});var pj1=Y((QM9,Th)=>{Th.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];if(process.platform!=="win32")Th.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")Th.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var sj1=Y((fM9,ez)=>{var t9=global.process,Xg=function(I){return I&&typeof I==="object"&&typeof I.removeListener==="function"&&typeof I.emit==="function"&&typeof I.reallyExit==="function"&&typeof I.listeners==="function"&&typeof I.kill==="function"&&typeof I.pid==="number"&&typeof I.on==="function"};if(!Xg(t9))ez.exports=function(){return function(){}};else{if(ij1=B1("assert"),sz=pj1(),nj1=/^win/i.test(t9.platform),HM=B1("events"),typeof HM!=="function")HM=HM.EventEmitter;if(t9.__signal_exit_emitter__)X8=t9.__signal_exit_emitter__;else X8=t9.__signal_exit_emitter__=new HM,X8.count=0,X8.emitted={};if(!X8.infinite)X8.setMaxListeners(1/0),X8.infinite=!0;ez.exports=function(I,d){if(!Xg(global.process))return function(){};if(ij1.equal(typeof I,"function","a callback must be provided for exit handler"),oz===!1)v51();var G="exit";if(d&&d.alwaysLast)G="afterexit";var Z=function(){if(X8.removeListener(G,I),X8.listeners("exit").length===0&&X8.listeners("afterexit").length===0)Oh()};return X8.on(G,I),Z},Oh=function I(){if(!oz||!Xg(global.process))return;oz=!1,sz.forEach(function(d){try{t9.removeListener(d,mh[d])}catch(G){}}),t9.emit=lh,t9.reallyExit=E51,X8.count-=1},ez.exports.unload=Oh,Yg=function I(d,G,Z){if(X8.emitted[d])return;X8.emitted[d]=!0,X8.emit(d,G,Z)},mh={},sz.forEach(function(I){mh[I]=function d(){if(!Xg(global.process))return;var G=t9.listeners(I);if(G.length===X8.count){if(Oh(),Yg("exit",null,I),Yg("afterexit",null,I),nj1&&I==="SIGHUP")I="SIGINT";t9.kill(t9.pid,I)}}}),ez.exports.signals=function(){return sz},oz=!1,v51=function I(){if(oz||!Xg(global.process))return;oz=!0,X8.count+=1,sz=sz.filter(function(d){try{return t9.on(d,mh[d]),!0}catch(G){return!1}}),t9.emit=aj1,t9.reallyExit=rj1},ez.exports.load=v51,E51=t9.reallyExit,rj1=function I(d){if(!Xg(global.process))return;t9.exitCode=d||0,Yg("exit",t9.exitCode,null),Yg("afterexit",t9.exitCode,null),E51.call(t9,t9.exitCode)},lh=t9.emit,aj1=function I(d,G){if(d==="exit"&&Xg(global.process)){if(G!==void 0)t9.exitCode=G;var Z=lh.apply(this,arguments);return Yg("exit",t9.exitCode,null),Yg("afterexit",t9.exitCode,null),Z}else return lh.apply(this,arguments)}}var ij1,sz,nj1,HM,X8,Oh,Yg,mh,oz,v51,E51,rj1,lh,aj1});var Vk1=Y((TY4)=>{function P51(I,d){var G=I.length;I.push(d);I:for(;0>>1,C=I[Z];if(0>>1;Zbh(B,G))Abh(V,B)?(I[Z]=V,I[A]=G,Z=A):(I[Z]=B,I[w]=G,Z=w);else if(Abh(V,G))I[Z]=V,I[A]=G,Z=A;else break I}}return d}function bh(I,d){var G=I.sortIndex-d.sortIndex;return G!==0?G:I.id-d.id}if(typeof performance==="object"&&typeof performance.now==="function")Ik1=performance,TY4.unstable_now=function(){return Ik1.now()};else S51=Date,dk1=S51.now(),TY4.unstable_now=function(){return S51.now()-dk1};var Ik1,S51,dk1,$w=[],mY=[],uY4=1,CZ=null,v7=3,kh=!1,_g=!1,gM=!1,Ck1=typeof setTimeout==="function"?setTimeout:null,Wk1=typeof clearTimeout==="function"?clearTimeout:null,Gk1=typeof setImmediate!=="undefined"?setImmediate:null;typeof navigator!=="undefined"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function $51(I){for(var d=MC(mY);d!==null;){if(d.callback===null)jh(mY);else if(d.startTime<=I)jh(mY),d.sortIndex=d.expirationTime,P51($w,d);else break;d=MC(mY)}}function u51(I){if(gM=!1,$51(I),!_g)if(MC($w)!==null)_g=!0,O51(T51);else{var d=MC(mY);d!==null&&m51(u51,d.startTime-I)}}function T51(I,d){_g=!1,gM&&(gM=!1,Wk1(JM),JM=-1),kh=!0;var G=v7;try{$51(d);for(CZ=MC($w);CZ!==null&&(!(CZ.expirationTime>d)||I&&!Ak1());){var Z=CZ.callback;if(typeof Z==="function"){CZ.callback=null,v7=CZ.priorityLevel;var C=Z(CZ.expirationTime<=d);d=TY4.unstable_now(),typeof C==="function"?CZ.callback=C:CZ===MC($w)&&jh($w),$51(d)}else jh($w);CZ=MC($w)}if(CZ!==null)var W=!0;else{var w=MC(mY);w!==null&&m51(u51,w.startTime-d),W=!1}return W}finally{CZ=null,v7=G,kh=!1}}var xh=!1,hh=null,JM=-1,wk1=5,Bk1=-1;function Ak1(){return TY4.unstable_now()-Bk1I||125Z?(I.sortIndex=G,P51(mY,I),MC($w)===null&&I===MC(mY)&&(gM?(Wk1(JM),JM=-1):gM=!0,m51(u51,G-Z))):(I.sortIndex=C,P51($w,I),_g||kh||(_g=!0,O51(T51))),I};TY4.unstable_shouldYield=Ak1;TY4.unstable_wrapCallback=function(I){var d=v7;return function(){var G=v7;v7=d;try{return I.apply(this,arguments)}finally{v7=G}}}});var Yk1=Y((vM9,Xk1)=>{var l51=J1(u1(),1),i6=J1(Vk1(),1);Xk1.exports=function I(d){var G={},Z=Object.assign;function C(D){for(var H="https://reactjs.org/docs/error-decoder.html?invariant="+D,z=1;z$1||M[t]!==y[$1]){var t1=` +`+M[t].replace(" at new "," at ");return D.displayName&&t1.includes("")&&(t1=t1.replace("",D.displayName)),t1}while(1<=t&&0<=$1);break}}}finally{p1=!1,Error.prepareStackTrace=z}return(D=D?D.displayName||D.name:"")?S1(D):""}var s1=Object.prototype.hasOwnProperty,U0=[],w0=-1;function J0(D){return{current:D}}function W0(D){0>w0||(D.current=U0[w0],U0[w0]=null,w0--)}function g0(D,H){w0++,U0[w0]=D.current,D.current=H}var c2={},L2=J0(c2),R2=J0(!1),l=c2;function _1(D,H){var z=D.type.contextTypes;if(!z)return c2;var q=D.stateNode;if(q&&q.__reactInternalMemoizedUnmaskedChildContext===H)return q.__reactInternalMemoizedMaskedChildContext;var M={},y;for(y in z)M[y]=H[y];return q&&(D=D.stateNode,D.__reactInternalMemoizedUnmaskedChildContext=H,D.__reactInternalMemoizedMaskedChildContext=M),M}function I1(D){return D=D.childContextTypes,D!==null&&D!==void 0}function v1(){W0(R2),W0(L2)}function y1(D,H,z){if(L2.current!==c2)throw Error(C(168));g0(L2,H),g0(R2,z)}function E1(D,H,z){var q=D.stateNode;if(H=H.childContextTypes,typeof q.getChildContext!=="function")return z;q=q.getChildContext();for(var M in q)if(!(M in H))throw Error(C(108,O(D)||"Unknown",M));return Z({},z,q)}function Z0(D){return D=(D=D.stateNode)&&D.__reactInternalMemoizedMergedChildContext||c2,l=L2.current,g0(L2,D),g0(R2,R2.current),!0}function Q0(D,H,z){var q=D.stateNode;if(!q)throw Error(C(169));z?(D=E1(D,H,l),q.__reactInternalMemoizedMergedChildContext=D,W0(R2),W0(L2),g0(L2,D)):W0(R2),g0(R2,z)}var N0=Math.clz32?Math.clz32:g2,$0=Math.log,h0=Math.LN2;function g2(D){return D>>>=0,D===0?32:31-($0(D)/h0|0)|0}var F4=64,x4=4194304;function c4(D){switch(D&-D){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return D&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return D&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return D}}function W9(D,H){var z=D.pendingLanes;if(z===0)return 0;var q=0,M=D.suspendedLanes,y=D.pingedLanes,t=z&268435455;if(t!==0){var $1=t&~M;$1!==0?q=c4($1):(y&=t,y!==0&&(q=c4(y)))}else t=z&~M,t!==0?q=c4(t):y!==0&&(q=c4(y));if(q===0)return 0;if(H!==0&&H!==q&&(H&M)===0&&(M=q&-q,y=H&-H,M>=y||M===16&&(y&4194240)!==0))return H;if((q&4)!==0&&(q|=z&16),H=D.entangledLanes,H!==0)for(D=D.entanglements,H&=q;0z;z++)H.push(D);return H}function RG(D,H,z){D.pendingLanes|=H,H!==536870912&&(D.suspendedLanes=0,D.pingedLanes=0),D=D.eventTimes,H=31-N0(H),D[H]=z}function HK(D,H){var z=D.pendingLanes&~H;D.pendingLanes=H,D.suspendedLanes=0,D.pingedLanes=0,D.expiredLanes&=H,D.mutableReadLanes&=H,D.entangledLanes&=H,H=D.entanglements;var q=D.eventTimes;for(D=D.expirationTimes;0>=t,M-=t,SI=1<<32-N0(H)+M|z<X1?(q1=x,x=null):q1=x.sibling;var P1=Z2(f,x,v[X1],m);if(P1===null){x===null&&(x=q1);break}D&&x&&P1.alternate===null&&H(f,x),U=y(P1,U,X1),w1===null?C1=P1:w1.sibling=P1,w1=P1,x=q1}if(X1===v.length)return z(f,x),K9&&lW(f,X1),C1;if(x===null){for(;X1X1?(q1=x,x=null):q1=x.sibling;var b1=Z2(f,x,P1.value,m);if(b1===null){x===null&&(x=q1);break}D&&x&&b1.alternate===null&&H(f,x),U=y(b1,U,X1),w1===null?C1=b1:w1.sibling=b1,w1=b1,x=q1}if(P1.done)return z(f,x),K9&&lW(f,X1),C1;if(x===null){for(;!P1.done;X1++,P1=v.next())P1=l2(f,P1.value,m),P1!==null&&(U=y(P1,U,X1),w1===null?C1=P1:w1.sibling=P1,w1=P1);return K9&&lW(f,X1),C1}for(x=q(f,x);!P1.done;X1++,P1=v.next())P1=L5(x,f,X1,P1.value,m),P1!==null&&(D&&P1.alternate!==null&&x.delete(P1.key===null?X1:P1.key),U=y(P1,U,X1),w1===null?C1=P1:w1.sibling=P1,w1=P1);return D&&x.forEach(function(f0){return H(f,f0)}),K9&&lW(f,X1),C1}function R(f,U,v,m){if(typeof v==="object"&&v!==null&&v.type===A&&v.key===null&&(v=v.props.children),typeof v==="object"&&v!==null){switch(v.$$typeof){case w:I:{for(var C1=v.key,w1=U;w1!==null;){if(w1.key===C1){if(C1=v.type,C1===A){if(w1.tag===7){z(f,w1.sibling),U=M(w1,v.props.children),U.return=f,f=U;break I}}else if(w1.elementType===C1||typeof C1==="object"&&C1!==null&&C1.$$typeof===E&&We(C1)===w1.type){z(f,w1.sibling),U=M(w1,v.props),U.ref=LH(f,w1,v),U.return=f,f=U;break I}z(f,w1);break}else H(f,w1);w1=w1.sibling}v.type===A?(U=hI(v.props.children,f.mode,m,v.key),U.return=f,f=U):(m=wF(v.type,v.key,v.props,null,f.mode,m),m.ref=LH(f,U,v),m.return=f,f=m)}return t(f);case B:I:{for(w1=v.key;U!==null;){if(U.key===w1)if(U.tag===4&&U.stateNode.containerInfo===v.containerInfo&&U.stateNode.implementation===v.implementation){z(f,U.sibling),U=M(U,v.children||[]),U.return=f,f=U;break I}else{z(f,U);break}else H(f,U);U=U.sibling}U=DA(v,f.mode,m),U.return=f,f=U}return t(f);case E:return w1=v._init,R(f,U,w1(v._payload),m)}if(f1(v))return j5(f,U,v,m);if($(v))return N(f,U,v,m);QU(f,v)}return typeof v==="string"&&v!==""||typeof v==="number"?(v=""+v,U!==null&&U.tag===6?(z(f,U.sibling),U=M(U,v),U.return=f,f=U):(z(f,U),U=_A(v,f.mode,m),U.return=f,f=U),t(f)):z(f,U)}return R}var M8=we(!0),yH=we(!1),ZA=J0(null),CA=null,WA=null,QK=null;function wA(){QK=WA=CA=null}function yI(D,H,z){E0?(g0(ZA,H._currentValue),H._currentValue=z):(g0(ZA,H._currentValue2),H._currentValue2=z)}function z5(D){var H=ZA.current;W0(ZA),E0?D._currentValue=H:D._currentValue2=H}function fU(D,H,z){for(;D!==null;){var q=D.alternate;if((D.childLanes&H)!==H?(D.childLanes|=H,q!==null&&(q.childLanes|=H)):q!==null&&(q.childLanes&H)!==H&&(q.childLanes|=H),D===z)break;D=D.return}}function BA(D,H){CA=D,QK=WA=null,D=D.dependencies,D!==null&&D.firstContext!==null&&((D.lanes&H)!==0&&(y8=!0),D.firstContext=null)}function PI(D){var H=E0?D._currentValue:D._currentValue2;if(QK!==D)if(D={context:D,memoizedValue:H,next:null},WA===null){if(CA===null)throw Error(C(308));WA=D,CA.dependencies={lanes:0,firstContext:D}}else WA=WA.next=D;return H}var S8=null;function H5(D){S8===null?S8=[D]:S8.push(D)}function PH(D,H,z,q){var M=H.interleaved;return M===null?(z.next=z,H5(H)):(z.next=M.next,M.next=z),H.interleaved=z,n7(D,q)}function n7(D,H){D.lanes|=H;var z=D.alternate;z!==null&&(z.lanes|=H),z=D;for(D=D.return;D!==null;)D.childLanes|=H,z=D.alternate,z!==null&&(z.childLanes|=H),z=D,D=D.return;return z.tag===3?z.stateNode:null}var $I=!1;function dT(D){D.updateQueue={baseState:D.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Be(D,H){D=D.updateQueue,H.updateQueue===D&&(H.updateQueue={baseState:D.baseState,firstBaseUpdate:D.firstBaseUpdate,lastBaseUpdate:D.lastBaseUpdate,shared:D.shared,effects:D.effects})}function SG(D,H){return{eventTime:D,lane:H,tag:0,payload:null,callback:null,next:null}}function bW(D,H,z){var q=D.updateQueue;if(q===null)return null;if(q=q.shared,(E4&2)!==0){var M=q.pending;return M===null?H.next=H:(H.next=M.next,M.next=H),q.pending=H,n7(D,z)}return M=q.interleaved,M===null?(H.next=H,H5(q)):(H.next=M.next,M.next=H),q.interleaved=H,n7(D,z)}function fK(D,H,z){if(H=H.updateQueue,H!==null&&(H=H.shared,(z&4194240)!==0)){var q=H.lanes;q&=D.pendingLanes,z|=q,H.lanes=z,Ed(D,z)}}function wC(D,H){var{updateQueue:z,alternate:q}=D;if(q!==null&&(q=q.updateQueue,z===q)){var M=null,y=null;if(z=z.firstBaseUpdate,z!==null){do{var t={eventTime:z.eventTime,lane:z.lane,tag:z.tag,payload:z.payload,callback:z.callback,next:null};y===null?M=y=t:y=y.next=t,z=z.next}while(z!==null);y===null?M=y=H:y=y.next=H}else M=y=H;z={baseState:q.baseState,firstBaseUpdate:M,lastBaseUpdate:y,shared:q.shared,effects:q.effects},D.updateQueue=z;return}D=z.lastBaseUpdate,D===null?z.firstBaseUpdate=H:D.next=H,z.lastBaseUpdate=H}function $H(D,H,z,q){var M=D.updateQueue;$I=!1;var{firstBaseUpdate:y,lastBaseUpdate:t}=M,$1=M.shared.pending;if($1!==null){M.shared.pending=null;var t1=$1,m0=t1.next;t1.next=null,t===null?y=m0:t.next=m0,t=t1;var J2=D.alternate;J2!==null&&(J2=J2.updateQueue,$1=J2.lastBaseUpdate,$1!==t&&($1===null?J2.firstBaseUpdate=m0:$1.next=m0,J2.lastBaseUpdate=t1))}if(y!==null){var l2=M.baseState;t=0,J2=m0=t1=null,$1=y;do{var{lane:Z2,eventTime:L5}=$1;if((q&Z2)===Z2){J2!==null&&(J2=J2.next={eventTime:L5,lane:0,tag:$1.tag,payload:$1.payload,callback:$1.callback,next:null});I:{var j5=D,N=$1;switch(Z2=H,L5=z,N.tag){case 1:if(j5=N.payload,typeof j5==="function"){l2=j5.call(L5,l2,Z2);break I}l2=j5;break I;case 3:j5.flags=j5.flags&-65537|128;case 0:if(j5=N.payload,Z2=typeof j5==="function"?j5.call(L5,l2,Z2):j5,Z2===null||Z2===void 0)break I;l2=Z({},l2,Z2);break I;case 2:$I=!0}}$1.callback!==null&&$1.lane!==0&&(D.flags|=64,Z2=M.effects,Z2===null?M.effects=[$1]:Z2.push($1))}else L5={eventTime:L5,lane:Z2,tag:$1.tag,payload:$1.payload,callback:$1.callback,next:null},J2===null?(m0=J2=L5,t1=l2):J2=J2.next=L5,t|=Z2;if($1=$1.next,$1===null)if($1=M.shared.pending,$1===null)break;else Z2=$1,$1=Z2.next,Z2.next=null,M.lastBaseUpdate=Z2,M.shared.pending=null}while(1);if(J2===null&&(t1=l2),M.baseState=t1,M.firstBaseUpdate=m0,M.lastBaseUpdate=J2,H=M.shared.interleaved,H!==null){M=H;do t|=M.lane,M=M.next;while(M!==H)}else y===null&&(M.shared.lanes=0);XA|=t,D.lanes=t,D.memoizedState=l2}}function GT(D,H,z){if(D=H.effects,H.effects=null,D!==null)for(H=0;Hz?z:4,D(!0);var q=RU.transition;RU.transition={};try{D(!1),H()}finally{$4=z,RU.transition=q}}function EU(){return ud().memoizedState}function fN1(D,H,z){var q=rW(D);if(z={lane:q,action:z,hasEagerState:!1,eagerState:null,next:null},Je(D))DT(H,z);else if(z=PH(D,H,z,q),z!==null){var M=G8();e3(z,D,q,M),HT(z,H,q)}}function ge(D,H,z){var q=rW(D),M={lane:q,action:z,hasEagerState:!1,eagerState:null,next:null};if(Je(D))DT(H,M);else{var y=D.alternate;if(D.lanes===0&&(y===null||y.lanes===0)&&(y=H.lastRenderedReducer,y!==null))try{var t=H.lastRenderedState,$1=y(t,z);if(M.hasEagerState=!0,M.eagerState=$1,Sd($1,t)){var t1=H.interleaved;t1===null?(M.next=M,H5(H)):(M.next=t1.next,t1.next=M),H.interleaved=M;return}}catch(m0){}finally{}z=PH(D,H,M,q),z!==null&&(M=G8(),e3(z,D,q,M),HT(z,H,q))}}function Je(D){var H=D.alternate;return D===O9||H!==null&&H===O9}function DT(D,H){$d=lH=!0;var z=D.pending;z===null?H.next=H:(H.next=z.next,z.next=H),D.pending=H}function HT(D,H,z){if((z&4194240)!==0){var q=H.lanes;q&=D.pendingLanes,z|=q,H.lanes=z,Ed(D,z)}}var SK={readContext:PI,useCallback:V6,useContext:V6,useEffect:V6,useImperativeHandle:V6,useInsertionEffect:V6,useLayoutEffect:V6,useMemo:V6,useReducer:V6,useRef:V6,useState:V6,useDebugValue:V6,useDeferredValue:V6,useTransition:V6,useMutableSource:V6,useSyncExternalStore:V6,useId:V6,unstable_isNewReconciler:!1},Ke={readContext:PI,useCallback:function(D,H){return TI().memoizedState=[D,H===void 0?null:H],D},useContext:PI,useEffect:vK,useImperativeHandle:function(D,H,z){return z=z!==null&&z!==void 0?z.concat([D]):null,kH(4194308,4,EK.bind(null,H,D),z)},useLayoutEffect:function(D,H){return kH(4194308,4,D,H)},useInsertionEffect:function(D,H){return kH(4,2,D,H)},useMemo:function(D,H){var z=TI();return H=H===void 0?null:H,D=D(),z.memoizedState=[D,H],D},useReducer:function(D,H,z){var q=TI();return H=z!==void 0?z(H):H,q.memoizedState=q.baseState=H,D={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:D,lastRenderedState:H},q.queue=D,D=D.dispatch=fN1.bind(null,O9,D),[q.memoizedState,D]},useRef:function(D){var H=TI();return D={current:D},H.memoizedState=D},useState:VT,useDebugValue:_T,useDeferredValue:function(D){return TI().memoizedState=D},useTransition:function(){var D=VT(!1),H=D[0];return D=QN1.bind(null,D[1]),TI().memoizedState=D,[H,D]},useMutableSource:function(){},useSyncExternalStore:function(D,H,z){var q=O9,M=TI();if(K9){if(z===void 0)throw Error(C(407));z=z()}else{if(z=H(),o3===null)throw Error(C(349));(kW&30)!==0||Ae(q,H,z)}M.memoizedState=z;var y={value:z,getSnapshot:H};return M.queue=y,vK(Xe.bind(null,q,y,D),[D]),q.flags|=2048,UK(9,Ve.bind(null,q,y,z,H),void 0,null),z},useId:function(){var D=TI(),H=o3.identifierPrefix;if(K9){var z=MG,q=SI;z=(q&~(1<<32-N0(q)-1)).toString(32)+z,H=":"+H+"R"+z,z=bH++,0oU&&(H.flags|=128,q=!0,cW(M,!1),H.lanes=4194304)}else{if(!q)if(D=Pd(y),D!==null){if(H.flags|=128,q=!0,D=D.updateQueue,D!==null&&(H.updateQueue=D,H.flags|=4),cW(M,!0),M.tail===null&&M.tailMode==="hidden"&&!y.alternate&&!K9)return m6(H),null}else 2*n9()-M.renderingStartTime>oU&&z!==1073741824&&(H.flags|=128,q=!0,cW(M,!1),H.lanes=4194304);M.isBackwards?(y.sibling=H.child,H.child=y):(D=M.last,D!==null?D.sibling=y:H.child=y,M.last=y)}if(M.tail!==null)return H=M.tail,M.rendering=H,M.tail=H.sibling,M.renderingStartTime=n9(),H.sibling=null,D=T9.current,g0(T9,q?D&1|2:D&1),H;return m6(H),null;case 22:case 23:return uX(),z=H.memoizedState!==null,D!==null&&D.memoizedState!==null!==z&&(H.flags|=8192),z&&(H.mode&1)!==0?(mI&1073741824)!==0&&(m6(H),k&&H.subtreeFlags&6&&(H.flags|=8192)):m6(H),null;case 24:return null;case 25:return null}throw Error(C(156,H.tag))}function vT(D,H){switch(zK(H),H.tag){case 1:return I1(H.type)&&v1(),D=H.flags,D&65536?(H.flags=D&-65537|128,H):null;case 3:return jW(),W0(R2),W0(L2),mH(),D=H.flags,(D&65536)!==0&&(D&128)===0?(H.flags=D&-65537|128,H):null;case 5:return qU(H),null;case 13:if(W0(T9),D=H.memoizedState,D!==null&&D.dehydrated!==null){if(H.alternate===null)throw Error(C(340));GA()}return D=H.flags,D&65536?(H.flags=D&-65537|128,H):null;case 19:return W0(T9),null;case 4:return jW(),null;case 10:return z5(H.type._context),null;case 22:case 23:return uX(),null;case 24:return null;default:return null}}var oH=!1,I8=!1,qN1=typeof WeakSet==="function"?WeakSet:Set,D2=null;function MX(D,H){var z=D.ref;if(z!==null)if(typeof z==="function")try{z(null)}catch(q){s5(D,H,q)}else z.current=null}function bU(D,H,z){try{z()}catch(q){s5(D,H,q)}}var hU=!1;function jU(D,H){T1(D.containerInfo);for(D2=H;D2!==null;)if(D=D2,H=D.child,(D.subtreeFlags&1028)!==0&&H!==null)H.return=D,D2=H;else for(;D2!==null;){D=D2;try{var z=D.alternate;if((D.flags&1024)!==0)switch(D.tag){case 0:case 11:case 15:break;case 1:if(z!==null){var{memoizedProps:q,memoizedState:M}=z,y=D.stateNode,t=y.getSnapshotBeforeUpdate(D.elementType===D.type?q:Td(D.type,q),M);y.__reactInternalSnapshotBeforeUpdate=t}break;case 3:k&&iB(D.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(C(163))}}catch($1){s5(D,D.return,$1)}if(H=D.sibling,H!==null){H.return=D.return,D2=H;break}D2=D.return}return z=hU,hU=!1,z}function eH(D,H,z){var q=H.updateQueue;if(q=q!==null?q.lastEffect:null,q!==null){var M=q=q.next;do{if((M.tag&D)===D){var y=M.destroy;M.destroy=void 0,y!==void 0&&bU(H,z,y)}M=M.next}while(M!==q)}}function tH(D,H){if(H=H.updateQueue,H=H!==null?H.lastEffect:null,H!==null){var z=H=H.next;do{if((z.tag&D)===D){var q=z.create;z.destroy=q()}z=z.next}while(z!==H)}}function kU(D){var H=D.ref;if(H!==null){var z=D.stateNode;switch(D.tag){case 5:D=r(z);break;default:D=z}typeof H==="function"?H(D):H.current=D}}function ET(D){var H=D.alternate;H!==null&&(D.alternate=null,ET(H)),D.child=null,D.deletions=null,D.sibling=null,D.tag===5&&(H=D.stateNode,H!==null&&O1(H)),D.stateNode=null,D.return=null,D.dependencies=null,D.memoizedProps=null,D.memoizedState=null,D.pendingProps=null,D.stateNode=null,D.updateQueue=null}function MT(D){return D.tag===5||D.tag===3||D.tag===4}function uK(D){I:for(;;){for(;D.sibling===null;){if(D.return===null||MT(D.return))return null;D=D.return}D.sibling.return=D.return;for(D=D.sibling;D.tag!==5&&D.tag!==6&&D.tag!==18;){if(D.flags&2)continue I;if(D.child===null||D.tag===4)continue I;else D.child.return=D,D=D.child}if(!(D.flags&2))return D.stateNode}}function xU(D,H,z){var q=D.tag;if(q===5||q===6)D=D.stateNode,H?A2(z,D,H):s0(z,D);else if(q!==4&&(D=D.child,D!==null))for(xU(D,H,z),D=D.sibling;D!==null;)xU(D,H,z),D=D.sibling}function cU(D,H,z){var q=D.tag;if(q===5||q===6)D=D.stateNode,H?B2(z,D,H):i0(z,D);else if(q!==4&&(D=D.child,D!==null))for(cU(D,H,z),D=D.sibling;D!==null;)cU(D,H,z),D=D.sibling}var l6=null,P8=!1;function OI(D,H,z){for(z=z.child;z!==null;)IF(D,H,z),z=z.sibling}function IF(D,H,z){if(vG&&typeof vG.onCommitFiberUnmount==="function")try{vG.onCommitFiberUnmount(gK,z)}catch($1){}switch(z.tag){case 5:I8||MX(z,H);case 6:if(k){var q=l6,M=P8;l6=null,OI(D,H,z),l6=q,P8=M,l6!==null&&(P8?A4(l6,z.stateNode):B4(l6,z.stateNode))}else OI(D,H,z);break;case 18:k&&l6!==null&&(P8?Ud(l6,z.stateNode):TW(l6,z.stateNode));break;case 4:k?(q=l6,M=P8,l6=z.stateNode.containerInfo,P8=!0,OI(D,H,z),l6=q,P8=M):(a&&(q=z.stateNode.containerInfo,M=Nd(q),zd(q,M)),OI(D,H,z));break;case 0:case 11:case 14:case 15:if(!I8&&(q=z.updateQueue,q!==null&&(q=q.lastEffect,q!==null))){M=q=q.next;do{var y=M,t=y.destroy;y=y.tag,t!==void 0&&((y&2)!==0?bU(z,H,t):(y&4)!==0&&bU(z,H,t)),M=M.next}while(M!==q)}OI(D,H,z);break;case 1:if(!I8&&(MX(z,H),q=z.stateNode,typeof q.componentWillUnmount==="function"))try{q.props=z.memoizedProps,q.state=z.memoizedState,q.componentWillUnmount()}catch($1){s5(z,H,$1)}OI(D,H,z);break;case 21:OI(D,H,z);break;case 22:z.mode&1?(I8=(q=I8)||z.memoizedState!==null,OI(D,H,z),I8=q):OI(D,H,z);break;default:OI(D,H,z)}}function pW(D){var H=D.updateQueue;if(H!==null){D.updateQueue=null;var z=D.stateNode;z===null&&(z=D.stateNode=new qN1),H.forEach(function(q){var M=Se.bind(null,D,q);z.has(q)||(z.add(q),q.then(M,M))})}}function Od(D,H){var z=H.deletions;if(z!==null)for(var q=0;q";case mK:return":has("+(nU(D)||"")+")";case lK:return'[role="'+D.value+'"]';case SX:return'"'+D.value+'"';case dF:return'[data-testname="'+D.value+'"]';default:throw Error(C(365))}}function PT(D,H){var z=[];D=[D,0];for(var q=0;qM&&(M=t),q&=~y}if(q=M,q=n9()-q,q=(120>q?120:480>q?480:1080>q?1080:1920>q?1920:3000>q?3000:4320>q?4320:1960*Ue(q/1960))-q,10D?16:D,PG===null)var q=!1;else{if(D=PG,PG=null,kK=0,(E4&6)!==0)throw Error(C(331));var M=E4;E4|=4;for(D2=D.current;D2!==null;){var y=D2,t=y.child;if((D2.flags&16)!==0){var $1=y.deletions;if($1!==null){for(var t1=0;t1<$1.length;t1++){var m0=$1[t1];for(D2=m0;D2!==null;){var J2=D2;switch(J2.tag){case 0:case 11:case 15:eH(8,J2,y)}var l2=J2.child;if(l2!==null)l2.return=J2,D2=l2;else for(;D2!==null;){J2=D2;var{sibling:Z2,return:L5}=J2;if(ET(J2),J2===m0){D2=null;break}if(Z2!==null){Z2.return=L5,D2=Z2;break}D2=L5}}}var j5=y.alternate;if(j5!==null){var N=j5.child;if(N!==null){j5.child=null;do{var R=N.sibling;N.sibling=null,N=R}while(N!==null)}}D2=y}}if((y.subtreeFlags&2064)!==0&&t!==null)t.return=y,D2=t;else I:for(;D2!==null;){if(y=D2,(y.flags&2048)!==0)switch(y.tag){case 0:case 11:case 15:eH(9,y,y.return)}var f=y.sibling;if(f!==null){f.return=y.return,D2=f;break I}D2=y.return}}var U=D.current;for(D2=U;D2!==null;){t=D2;var v=t.child;if((t.subtreeFlags&2064)!==0&&v!==null)v.return=t,D2=v;else I:for(t=U;D2!==null;){if($1=D2,($1.flags&2048)!==0)try{switch($1.tag){case 0:case 11:case 15:tH(9,$1)}}catch(C1){s5($1,$1.return,C1)}if($1===t){D2=null;break I}var m=$1.sibling;if(m!==null){m.return=$1.return,D2=m;break I}D2=$1.return}}if(E4=M,Ld(),vG&&typeof vG.onPostCommitFiberRoot==="function")try{vG.onPostCommitFiberRoot(gK,D)}catch(C1){}q=!0}return q}finally{$4=z,F5.transition=H}}return!1}function lT(D,H,z){H=AA(z,H),H=zT(D,H,1),D=bW(D,H,1),H=G8(),D!==null&&(RG(D,1,H),F7(D,H))}function s5(D,H,z){if(D.tag===3)lT(D,D,z);else for(;H!==null;){if(H.tag===3){lT(H,D,z);break}else if(H.tag===1){var q=H.stateNode;if(typeof H.type.getDerivedStateFromError==="function"||typeof q.componentDidCatch==="function"&&(nW===null||!nW.has(q))){D=AA(z,D),D=fe(H,D,1),H=bW(H,D,1),D=G8(),H!==null&&(RG(H,1,D),F7(H,D));break}}H=H.return}}function Zv(D,H,z){var q=D.pingCache;q!==null&&q.delete(H),H=G8(),D.pingedLanes|=D.suspendedLanes&z,o3===D&&(X6&z)===z&&(R5===4||R5===3&&(X6&130023424)===X6&&500>n9()-sU?YA(D,0):aU|=z),F7(D,H)}function bT(D,H){H===0&&((D.mode&1)===0?H=1:(H=x4,x4<<=1,(x4&130023424)===0&&(x4=4194304)));var z=G8();D=n7(D,H),D!==null&&(RG(D,H,z),F7(D,z))}function Me(D){var H=D.memoizedState,z=0;H!==null&&(z=H.retryLane),bT(D,z)}function Se(D,H){var z=0;switch(D.tag){case 13:var{stateNode:q,memoizedState:M}=D;M!==null&&(z=M.retryLane);break;case 19:q=D.stateNode;break;default:throw Error(C(314))}q!==null&&q.delete(H),bT(D,z)}var Le=function(D,H,z){if(D!==null)if(D.memoizedProps!==H.pendingProps||R2.current)y8=!0;else{if((D.lanes&z)===0&&(H.flags&128)===0)return y8=!1,RT(D,H,z);y8=(D.flags&131072)!==0?!0:!1}else y8=!1,K9&&(H.flags&1048576)!==0&&ou(H,NK,H.index);switch(H.lanes=0,H.tag){case 2:var q=H.type;aH(D,H),D=H.pendingProps;var M=_1(H,L2.current);BA(H,z),M=jH(null,H,q,D,M,z);var y=vU();return H.flags|=1,typeof M==="object"&&M!==null&&typeof M.render==="function"&&M.$$typeof===void 0?(H.tag=1,H.memoizedState=null,H.updateQueue=null,I1(q)?(y=!0,Z0(H)):y=!1,H.memoizedState=M.state!==null&&M.state!==void 0?M.state:null,dT(H),M.updater=iH,H.stateNode=M,M._reactInternals=H,gT(H,q,D,z),H=TU(null,H,q,!0,y,z)):(H.tag=0,K9&&y&&EH(H),t6(null,H,M,z),H=H.child),H;case 16:q=H.elementType;I:{switch(aH(D,H),D=H.pendingProps,M=q._init,q=M(q._payload),H.type=q,M=H.tag=hT(q),D=Td(q,D),M){case 0:H=LK(null,H,q,D,z);break I;case 1:H=fT(null,H,q,D,z);break I;case 11:H=LU(null,H,q,D,z);break I;case 14:H=yU(null,H,q,Td(q.type,D),z);break I}throw Error(C(306,q,""))}return H;case 0:return q=H.type,M=H.pendingProps,M=H.elementType===q?M:Td(q,M),LK(D,H,q,M,z);case 1:return q=H.type,M=H.pendingProps,M=H.elementType===q?M:Td(q,M),fT(D,H,q,M,z);case 3:I:{if(UX(H),D===null)throw Error(C(387));q=H.pendingProps,y=H.memoizedState,M=y.element,Be(D,H),$H(H,q,null,z);var t=H.memoizedState;if(q=t.element,Z1&&y.isDehydrated)if(y={element:q,isDehydrated:!1,cache:t.cache,pendingSuspenseBoundaries:t.pendingSuspenseBoundaries,transitions:t.transitions},H.updateQueue.baseState=y,H.memoizedState=y,H.flags&256){M=AA(Error(C(423)),H),H=yK(D,H,q,z,M);break I}else if(q!==M){M=AA(Error(C(424)),H),H=yK(D,H,q,z,M);break I}else for(Z1&&(LI=PW(H.stateNode.containerInfo),O6=H,K9=!0,yd=null,MH=!1),z=yH(H,null,q,z),H.child=z;z;)z.flags=z.flags&-3|4096,z=z.sibling;else{if(GA(),q===M){H=BC(D,H,z);break I}t6(D,H,q,z)}H=H.child}return H;case 5:return ZT(H),D===null&&tu(H),q=H.type,M=H.pendingProps,y=D!==null?D.memoizedProps:null,t=M.children,e(q,M)?t=null:y!==null&&e(q,y)&&(H.flags|=32),uU(D,H),t6(D,H,t,z),H.child;case 6:return D===null&&tu(H),null;case 13:return qe(D,H,z);case 4:return qK(H,H.stateNode.containerInfo),q=H.pendingProps,D===null?H.child=M8(H,null,q,z):t6(D,H,q,z),H.child;case 11:return q=H.type,M=H.pendingProps,M=H.elementType===q?M:Td(q,M),LU(D,H,q,M,z);case 7:return t6(D,H,H.pendingProps,z),H.child;case 8:return t6(D,H,H.pendingProps.children,z),H.child;case 12:return t6(D,H,H.pendingProps.children,z),H.child;case 10:I:{if(q=H.type._context,M=H.pendingProps,y=H.memoizedProps,t=M.value,yI(H,q,t),y!==null)if(Sd(y.value,t)){if(y.children===M.children&&!R2.current){H=BC(D,H,z);break I}}else for(y=H.child,y!==null&&(y.return=H);y!==null;){var $1=y.dependencies;if($1!==null){t=y.child;for(var t1=$1.firstContext;t1!==null;){if(t1.context===q){if(y.tag===1){t1=SG(-1,z&-z),t1.tag=2;var m0=y.updateQueue;if(m0!==null){m0=m0.shared;var J2=m0.pending;J2===null?t1.next=t1:(t1.next=J2.next,J2.next=t1),m0.pending=t1}}y.lanes|=z,t1=y.alternate,t1!==null&&(t1.lanes|=z),fU(y.return,z,H),$1.lanes|=z;break}t1=t1.next}}else if(y.tag===10)t=y.type===H.type?null:y.child;else if(y.tag===18){if(t=y.return,t===null)throw Error(C(341));t.lanes|=z,$1=t.alternate,$1!==null&&($1.lanes|=z),fU(t,z,H),t=y.sibling}else t=y.child;if(t!==null)t.return=y;else for(t=y;t!==null;){if(t===H){t=null;break}if(y=t.sibling,y!==null){y.return=t.return,t=y;break}t=t.return}y=t}t6(D,H,M.children,z),H=H.child}return H;case 9:return M=H.type,q=H.pendingProps.children,BA(H,z),M=PI(M),q=q(M),H.flags|=1,t6(D,H,q,z),H.child;case 14:return q=H.type,M=Td(q,H.pendingProps),M=Td(q.type,M),yU(D,H,q,M,z);case 15:return PU(D,H,H.type,H.pendingProps,z);case 17:return q=H.type,M=H.pendingProps,M=H.elementType===q?M:Td(q,M),aH(D,H),H.tag=1,I1(q)?(D=!0,Z0(H)):D=!1,BA(H,z),ze(H,q,M),gT(H,q,M,z),TU(null,H,q,!0,D,z);case 19:return mU(D,H,z);case 22:return $U(D,H,z)}throw Error(C(156,H.tag))};function cK(D,H){return E8(D,H)}function ye(D,H,z,q){this.tag=D,this.key=z,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=H,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=q,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function bI(D,H,z,q){return new ye(D,H,z,q)}function Cv(D){return D=D.prototype,!(!D||!D.isReactComponent)}function hT(D){if(typeof D==="function")return Cv(D)?1:0;if(D!==void 0&&D!==null){if(D=D.$$typeof,D===g)return 11;if(D===Q)return 14}return 2}function Z8(D,H){var z=D.alternate;return z===null?(z=bI(D.tag,H,D.key,D.mode),z.elementType=D.elementType,z.type=D.type,z.stateNode=D.stateNode,z.alternate=D,D.alternate=z):(z.pendingProps=H,z.type=D.type,z.flags=0,z.subtreeFlags=0,z.deletions=null),z.flags=D.flags&14680064,z.childLanes=D.childLanes,z.lanes=D.lanes,z.child=D.child,z.memoizedProps=D.memoizedProps,z.memoizedState=D.memoizedState,z.updateQueue=D.updateQueue,H=D.dependencies,z.dependencies=H===null?null:{lanes:H.lanes,firstContext:H.firstContext},z.sibling=D.sibling,z.index=D.index,z.ref=D.ref,z}function wF(D,H,z,q,M,y){var t=2;if(q=D,typeof D==="function")Cv(D)&&(t=1);else if(typeof D==="string")t=5;else I:switch(D){case A:return hI(z.children,M,y,H);case V:t=8,M|=8;break;case X:return D=bI(12,z,H,M|2),D.elementType=X,D.lanes=y,D;case J:return D=bI(13,z,H,M),D.elementType=J,D.lanes=y,D;case K:return D=bI(19,z,H,M),D.elementType=K,D.lanes=y,D;case S:return pK(z,M,y,H);default:if(typeof D==="object"&&D!==null)switch(D.$$typeof){case _:t=10;break I;case F:t=9;break I;case g:t=11;break I;case Q:t=14;break I;case E:t=16,q=null;break I}throw Error(C(130,D==null?D:typeof D,""))}return H=bI(t,z,H,M),H.elementType=D,H.type=q,H.lanes=y,H}function hI(D,H,z,q){return D=bI(7,D,q,H),D.lanes=z,D}function pK(D,H,z,q){return D=bI(22,D,q,H),D.elementType=S,D.lanes=z,D.stateNode={isHidden:!1},D}function _A(D,H,z){return D=bI(6,D,null,H),D.lanes=z,D}function DA(D,H,z){return H=bI(4,D.children!==null?D.children:[],D.key,H),H.lanes=z,H.stateNode={containerInfo:D.containerInfo,pendingChildren:null,implementation:D.implementation},H}function uG(D,H,z,q,M){this.tag=H,this.containerInfo=D,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=i1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=qX(0),this.expirationTimes=qX(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=qX(0),this.identifierPrefix=q,this.onRecoverableError=M,Z1&&(this.mutableSourceEagerHydrationData=null)}function OX(D,H,z,q,M,y,t,$1,t1){return D=new uG(D,H,z,$1,t1),H===1?(H=1,y===!0&&(H|=8)):H=0,y=bI(3,null,null,H),D.current=y,y.stateNode=D,y.memoizedState={element:q,isDehydrated:z,cache:null,transitions:null,pendingSuspenseBoundaries:null},dT(y),D}function jT(D){if(!D)return c2;D=D._reactInternals;I:{if(T(D)!==D||D.tag!==1)throw Error(C(170));var H=D;do{switch(H.tag){case 3:H=H.stateNode.context;break I;case 1:if(I1(H.type)){H=H.stateNode.__reactInternalMemoizedMergedChildContext;break I}}H=H.return}while(H!==null);throw Error(C(171))}if(D.tag===1){var z=D.type;if(I1(z))return E1(D,z,H)}return H}function kT(D){var H=D._reactInternals;if(H===void 0){if(typeof D.render==="function")throw Error(C(188));throw D=Object.keys(D).join(","),Error(C(268,D))}return D=c1(H),D===null?null:D.stateNode}function xT(D,H){if(D=D.memoizedState,D!==null&&D.dehydrated!==null){var z=D.retryLane;D.retryLane=z!==0&&z=m0&&y>=l2&&M<=J2&&t<=Z2){D.splice(H,1);break}else if(!(q!==m0||z.width!==t1.width||Z2t)){l2>y&&(t1.height+=l2-y,t1.y=y),Z2M)){m0>q&&(t1.width+=m0-q,t1.x=q),J2z&&(z=t)),t ")+` + +No matching component was found for: + `)+D.join(" > ")}return null},G.getPublicRootInstance=function(D){if(D=D.current,!D.child)return null;switch(D.child.tag){case 5:return r(D.child.stateNode);default:return D.child.stateNode}},G.injectIntoDevTools=function(D){if(D={bundleType:D.bundleType,version:D.version,rendererPackageName:D.rendererPackageName,rendererConfig:D.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:W.ReactCurrentDispatcher,findHostInstanceByFiber:mX,findFiberByHostInstance:D.findFiberByHostInstance||iK,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__==="undefined")D=!1;else{var H=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(H.isDisabled||!H.supportsFiber)D=!0;else{try{gK=H.inject(D),vG=H}catch(z){}D=H.checkDCE?!0:!1}}return D},G.isAlreadyRendering=function(){return!1},G.observeVisibleRects=function(D,H,z,q){if(!h1)throw Error(C(363));D=rU(D,H);var M=k0(D,z,q).disconnect;return{disconnect:function(){M()}}},G.registerMutableSourceForHydration=function(D,H){var z=H._getVersion;z=z(H._source),D.mutableSourceEagerHydrationData==null?D.mutableSourceEagerHydrationData=[H,z]:D.mutableSourceEagerHydrationData.push(H,z)},G.runWithPriority=function(D,H){var z=$4;try{return $4=D,H()}finally{$4=z}},G.shouldError=function(){return null},G.shouldSuspend=function(){return!1},G.updateContainer=function(D,H,z,q){var M=H.current,y=G8(),t=rW(M);return z=jT(z),H.context===null?H.context=z:H.pendingContext=z,H=SG(y,t),H.payload={element:D},q=q===void 0?null:q,q!==null&&(H.callback=q),D=bW(M,H,t),D!==null&&(e3(D,M,t,y),fK(D,M,t)),t},G}});var ok1=Y((pM9,sk1)=>{sk1.exports=()=>{return/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g}});var gx1=Y((fS9,Fx1)=>{var{Duplex:L_4}=B1("stream");function Dx1(I){I.emit("close")}function y_4(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function Hx1(I){if(this.removeListener("error",Hx1),this.destroy(),this.listenerCount("error")===0)this.emit("error",I)}function P_4(I,d){let G=!0,Z=new L_4({...d,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return I.on("message",function C(W,w){let B=!w&&Z._readableState.objectMode?W.toString():W;if(!Z.push(B))I.pause()}),I.once("error",function C(W){if(Z.destroyed)return;G=!1,Z.destroy(W)}),I.once("close",function C(){if(Z.destroyed)return;Z.push(null)}),Z._destroy=function(C,W){if(I.readyState===I.CLOSED){W(C),process.nextTick(Dx1,Z);return}let w=!1;if(I.once("error",function B(A){w=!0,W(A)}),I.once("close",function B(){if(!w)W(C);process.nextTick(Dx1,Z)}),G)I.terminate()},Z._final=function(C){if(I.readyState===I.CONNECTING){I.once("open",function W(){Z._final(C)});return}if(I._socket===null)return;if(I._socket._writableState.finished){if(C(),Z._readableState.endEmitted)Z.destroy()}else I._socket.once("finish",function W(){C()}),I.close()},Z._read=function(){if(I.isPaused)I.resume()},Z._write=function(C,W,w){if(I.readyState===I.CONNECTING){I.once("open",function B(){Z._write(C,W,w)});return}I.send(C,w)},Z.on("end",y_4),Z.on("error",Hx1),Z}Fx1.exports=P_4});var sA=Y((qS9,Nx1)=>{var Jx1=["nodebuffer","arraybuffer","fragments"],Kx1=typeof Blob!=="undefined";if(Kx1)Jx1.push("blob");Nx1.exports={BINARY_TYPES:Jx1,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Kx1,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var SM=Y((RS9,Rj)=>{var{EMPTY_BUFFER:$_4}=sA(),a51=Buffer[Symbol.species];function u_4(I,d){if(I.length===0)return $_4;if(I.length===1)return I[0];let G=Buffer.allocUnsafe(d),Z=0;for(let C=0;C{throw new Error("Cannot require module "+"bufferutil");})();Rj.exports.mask=function(d,G,Z,C,W){if(W<48)zx1(d,G,Z,C,W);else I.mask(d,G,Z,C,W)},Rj.exports.unmask=function(d,G){if(d.length<32)Qx1(d,G);else I.unmask(d,G)}}catch(I){}});var Ux1=Y((US9,Rx1)=>{var fx1=Symbol("kDone"),o51=Symbol("kRun");class qx1{constructor(I){this[fx1]=()=>{this.pending--,this[o51]()},this.concurrency=I||1/0,this.jobs=[],this.pending=0}add(I){this.jobs.push(I),this[o51]()}[o51](){if(this.pending===this.concurrency)return;if(this.jobs.length){let I=this.jobs.shift();this.pending++,I(this[fx1])}}}Rx1.exports=qx1});var PM=Y((vS9,Lx1)=>{var LM=B1("zlib"),vx1=SM(),O_4=Ux1(),{kStatusCode:Ex1}=sA(),m_4=Buffer[Symbol.species],l_4=Buffer.from([0,0,255,255]),Ej=Symbol("permessage-deflate"),oA=Symbol("total-length"),yM=Symbol("callback"),jY=Symbol("buffers"),vj=Symbol("error"),Uj;class Mx1{constructor(I,d,G){if(this._maxPayload=G|0,this._options=I||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!d,this._deflate=null,this._inflate=null,this.params=null,!Uj){let Z=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Uj=new O_4(Z)}}static get extensionName(){return"permessage-deflate"}offer(){let I={};if(this._options.serverNoContextTakeover)I.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)I.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)I.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)I.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)I.client_max_window_bits=!0;return I}accept(I){return I=this.normalizeParams(I),this.params=this._isServer?this.acceptAsServer(I):this.acceptAsClient(I),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let I=this._deflate[yM];if(this._deflate.close(),this._deflate=null,I)I(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(I){let d=this._options,G=I.find((Z)=>{if(d.serverNoContextTakeover===!1&&Z.server_no_context_takeover||Z.server_max_window_bits&&(d.serverMaxWindowBits===!1||typeof d.serverMaxWindowBits==="number"&&d.serverMaxWindowBits>Z.server_max_window_bits)||typeof d.clientMaxWindowBits==="number"&&!Z.client_max_window_bits)return!1;return!0});if(!G)throw new Error("None of the extension offers can be accepted");if(d.serverNoContextTakeover)G.server_no_context_takeover=!0;if(d.clientNoContextTakeover)G.client_no_context_takeover=!0;if(typeof d.serverMaxWindowBits==="number")G.server_max_window_bits=d.serverMaxWindowBits;if(typeof d.clientMaxWindowBits==="number")G.client_max_window_bits=d.clientMaxWindowBits;else if(G.client_max_window_bits===!0||d.clientMaxWindowBits===!1)delete G.client_max_window_bits;return G}acceptAsClient(I){let d=I[0];if(this._options.clientNoContextTakeover===!1&&d.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!d.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")d.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&d.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return d}normalizeParams(I){return I.forEach((d)=>{Object.keys(d).forEach((G)=>{let Z=d[G];if(Z.length>1)throw new Error(`Parameter "${G}" must have only a single value`);if(Z=Z[0],G==="client_max_window_bits"){if(Z!==!0){let C=+Z;if(!Number.isInteger(C)||C<8||C>15)throw new TypeError(`Invalid value for parameter "${G}": ${Z}`);Z=C}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${G}": ${Z}`)}else if(G==="server_max_window_bits"){let C=+Z;if(!Number.isInteger(C)||C<8||C>15)throw new TypeError(`Invalid value for parameter "${G}": ${Z}`);Z=C}else if(G==="client_no_context_takeover"||G==="server_no_context_takeover"){if(Z!==!0)throw new TypeError(`Invalid value for parameter "${G}": ${Z}`)}else throw new Error(`Unknown parameter "${G}"`);d[G]=Z})}),I}decompress(I,d,G){Uj.add((Z)=>{this._decompress(I,d,(C,W)=>{Z(),G(C,W)})})}compress(I,d,G){Uj.add((Z)=>{this._compress(I,d,(C,W)=>{Z(),G(C,W)})})}_decompress(I,d,G){let Z=this._isServer?"client":"server";if(!this._inflate){let C=`${Z}_max_window_bits`,W=typeof this.params[C]!=="number"?LM.Z_DEFAULT_WINDOWBITS:this.params[C];this._inflate=LM.createInflateRaw({...this._options.zlibInflateOptions,windowBits:W}),this._inflate[Ej]=this,this._inflate[oA]=0,this._inflate[jY]=[],this._inflate.on("error",h_4),this._inflate.on("data",Sx1)}if(this._inflate[yM]=G,this._inflate.write(I),d)this._inflate.write(l_4);this._inflate.flush(()=>{let C=this._inflate[vj];if(C){this._inflate.close(),this._inflate=null,G(C);return}let W=vx1.concat(this._inflate[jY],this._inflate[oA]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[oA]=0,this._inflate[jY]=[],d&&this.params[`${Z}_no_context_takeover`])this._inflate.reset();G(null,W)})}_compress(I,d,G){let Z=this._isServer?"server":"client";if(!this._deflate){let C=`${Z}_max_window_bits`,W=typeof this.params[C]!=="number"?LM.Z_DEFAULT_WINDOWBITS:this.params[C];this._deflate=LM.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:W}),this._deflate[oA]=0,this._deflate[jY]=[],this._deflate.on("data",b_4)}this._deflate[yM]=G,this._deflate.write(I),this._deflate.flush(LM.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let C=vx1.concat(this._deflate[jY],this._deflate[oA]);if(d)C=new m_4(C.buffer,C.byteOffset,C.length-4);if(this._deflate[yM]=null,this._deflate[oA]=0,this._deflate[jY]=[],d&&this.params[`${Z}_no_context_takeover`])this._deflate.reset();G(null,C)})}}Lx1.exports=Mx1;function b_4(I){this[jY].push(I),this[oA]+=I.length}function Sx1(I){if(this[oA]+=I.length,this[Ej]._maxPayload<1||this[oA]<=this[Ej]._maxPayload){this[jY].push(I);return}this[vj]=new RangeError("Max payload size exceeded"),this[vj].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[vj][Ex1]=1009,this.removeListener("data",Sx1),this.reset()}function h_4(I){this[Ej]._inflate=null,I[Ex1]=1007,this[yM](I)}});var GQ=Y((ES9,Mj)=>{var{isUtf8:yx1}=B1("buffer"),{hasBlob:j_4}=sA(),k_4=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function x_4(I){return I>=1000&&I<=1014&&I!==1004&&I!==1005&&I!==1006||I>=3000&&I<=4999}function e51(I){let d=I.length,G=0;while(G=d||(I[G+1]&192)!==128||(I[G+2]&192)!==128||I[G]===224&&(I[G+1]&224)===128||I[G]===237&&(I[G+1]&224)===160)return!1;G+=3}else if((I[G]&248)===240){if(G+3>=d||(I[G+1]&192)!==128||(I[G+2]&192)!==128||(I[G+3]&192)!==128||I[G]===240&&(I[G+1]&240)===128||I[G]===244&&I[G+1]>143||I[G]>244)return!1;G+=4}else return!1;return!0}function c_4(I){return j_4&&typeof I==="object"&&typeof I.arrayBuffer==="function"&&typeof I.type==="string"&&typeof I.stream==="function"&&(I[Symbol.toStringTag]==="Blob"||I[Symbol.toStringTag]==="File")}Mj.exports={isBlob:c_4,isValidStatusCode:x_4,isValidUTF8:e51,tokenChars:k_4};if(yx1)Mj.exports.isValidUTF8=function(I){return I.length<24?e51(I):yx1(I)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let I=(()=>{throw new Error("Cannot require module "+"utf-8-validate");})();Mj.exports.isValidUTF8=function(d){return d.length<32?e51(d):I(d)}}catch(I){}});var I91=Y((MS9,Ox1)=>{var{Writable:p_4}=B1("stream"),Px1=PM(),{BINARY_TYPES:i_4,EMPTY_BUFFER:$x1,kStatusCode:n_4,kWebSocket:r_4}=sA(),{concat:t51,toArrayBuffer:a_4,unmask:s_4}=SM(),{isValidStatusCode:o_4,isValidUTF8:ux1}=GQ(),Sj=Buffer[Symbol.species];class Tx1 extends p_4{constructor(I={}){super();this._allowSynchronousEvents=I.allowSynchronousEvents!==void 0?I.allowSynchronousEvents:!0,this._binaryType=I.binaryType||i_4[0],this._extensions=I.extensions||{},this._isServer=!!I.isServer,this._maxPayload=I.maxPayload|0,this._skipUTF8Validation=!!I.skipUTF8Validation,this[r_4]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(I,d,G){if(this._opcode===8&&this._state==0)return G();this._bufferedBytes+=I.length,this._buffers.push(I),this.startLoop(G)}consume(I){if(this._bufferedBytes-=I,I===this._buffers[0].length)return this._buffers.shift();if(I=G.length)d.set(this._buffers.shift(),Z);else d.set(new Uint8Array(G.buffer,G.byteOffset,I),Z),this._buffers[0]=new Sj(G.buffer,G.byteOffset+I,G.length-I);I-=G.length}while(I>0);return d}startLoop(I){this._loop=!0;do switch(this._state){case 0:this.getInfo(I);break;case 1:this.getPayloadLength16(I);break;case 2:this.getPayloadLength64(I);break;case 3:this.getMask();break;case 4:this.getData(I);break;case 5:case 6:this._loop=!1;return}while(this._loop);if(!this._errored)I()}getInfo(I){if(this._bufferedBytes<2){this._loop=!1;return}let d=this.consume(2);if((d[0]&48)!==0){let Z=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");I(Z);return}let G=(d[0]&64)===64;if(G&&!this._extensions[Px1.extensionName]){let Z=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");I(Z);return}if(this._fin=(d[0]&128)===128,this._opcode=d[0]&15,this._payloadLength=d[1]&127,this._opcode===0){if(G){let Z=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");I(Z);return}if(!this._fragmented){let Z=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");I(Z);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let Z=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");I(Z);return}this._compressed=G}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let Z=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");I(Z);return}if(G){let Z=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");I(Z);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let Z=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");I(Z);return}}else{let Z=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");I(Z);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(d[1]&128)===128,this._isServer){if(!this._masked){let Z=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");I(Z);return}}else if(this._masked){let Z=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");I(Z);return}if(this._payloadLength===126)this._state=1;else if(this._payloadLength===127)this._state=2;else this.haveLength(I)}getPayloadLength16(I){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(I)}getPayloadLength64(I){if(this._bufferedBytes<8){this._loop=!1;return}let d=this.consume(8),G=d.readUInt32BE(0);if(G>Math.pow(2,21)-1){let Z=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");I(Z);return}this._payloadLength=G*Math.pow(2,32)+d.readUInt32BE(4),this.haveLength(I)}haveLength(I){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let d=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");I(d);return}}if(this._masked)this._state=3;else this._state=4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(I){let d=$x1;if(this._payloadLength){if(this._bufferedBytes7){this.controlMessage(d,I);return}if(this._compressed){this._state=5,this.decompress(d,I);return}if(d.length)this._messageLength=this._totalPayloadLength,this._fragments.push(d);this.dataMessage(I)}decompress(I,d){this._extensions[Px1.extensionName].decompress(I,this._fin,(Z,C)=>{if(Z)return d(Z);if(C.length){if(this._messageLength+=C.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let W=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");d(W);return}this._fragments.push(C)}if(this.dataMessage(d),this._state===0)this.startLoop(d)})}dataMessage(I){if(!this._fin){this._state=0;return}let d=this._messageLength,G=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let Z;if(this._binaryType==="nodebuffer")Z=t51(G,d);else if(this._binaryType==="arraybuffer")Z=a_4(t51(G,d));else if(this._binaryType==="blob")Z=new Blob(G);else Z=G;if(this._allowSynchronousEvents)this.emit("message",Z,!0),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",Z,!0),this._state=0,this.startLoop(I)})}else{let Z=t51(G,d);if(!this._skipUTF8Validation&&!ux1(Z)){let C=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");I(C);return}if(this._state===5||this._allowSynchronousEvents)this.emit("message",Z,!1),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",Z,!1),this._state=0,this.startLoop(I)})}}controlMessage(I,d){if(this._opcode===8){if(I.length===0)this._loop=!1,this.emit("conclude",1005,$x1),this.end();else{let G=I.readUInt16BE(0);if(!o_4(G)){let C=this.createError(RangeError,`invalid status code ${G}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");d(C);return}let Z=new Sj(I.buffer,I.byteOffset+2,I.length-2);if(!this._skipUTF8Validation&&!ux1(Z)){let C=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");d(C);return}this._loop=!1,this.emit("conclude",G,Z),this.end()}this._state=0;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",I),this._state=0;else this._state=6,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",I),this._state=0,this.startLoop(d)})}createError(I,d,G,Z,C){this._loop=!1,this._errored=!0;let W=new I(G?`Invalid WebSocket frame: ${d}`:d);return Error.captureStackTrace(W,this.createError),W.code=C,W[n_4]=Z,W}}Ox1.exports=Tx1});var G91=Y((LS9,bx1)=>{var{Duplex:SS9}=B1("stream"),{randomFillSync:e_4}=B1("crypto"),mx1=PM(),{EMPTY_BUFFER:t_4,kWebSocket:ID4,NOOP:dD4}=sA(),{isBlob:ZQ,isValidStatusCode:GD4}=GQ(),{mask:lx1,toBuffer:Dg}=SM(),WZ=Symbol("kByteLength"),ZD4=Buffer.alloc(4),Hg,CQ=8192,SC=0,CD4=1,WD4=2;class kY{constructor(I,d,G){if(this._extensions=d||{},G)this._generateMask=G,this._maskBuffer=Buffer.alloc(4);this._socket=I,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=SC,this.onerror=dD4,this[ID4]=void 0}static frame(I,d){let G,Z=!1,C=2,W=!1;if(d.mask){if(G=d.maskBuffer||ZD4,d.generateMask)d.generateMask(G);else{if(CQ===8192){if(Hg===void 0)Hg=Buffer.alloc(8192);e_4(Hg,0,8192),CQ=0}G[0]=Hg[CQ++],G[1]=Hg[CQ++],G[2]=Hg[CQ++],G[3]=Hg[CQ++]}W=(G[0]|G[1]|G[2]|G[3])===0,C=6}let w;if(typeof I==="string")if((!d.mask||W)&&d[WZ]!==void 0)w=d[WZ];else I=Buffer.from(I),w=I.length;else w=I.length,Z=d.mask&&d.readOnly&&!W;let B=w;if(w>=65536)C+=8,B=127;else if(w>125)C+=2,B=126;let A=Buffer.allocUnsafe(Z?w+C:C);if(A[0]=d.fin?d.opcode|128:d.opcode,d.rsv1)A[0]|=64;if(A[1]=B,B===126)A.writeUInt16BE(w,2);else if(B===127)A[2]=A[3]=0,A.writeUIntBE(w,4,6);if(!d.mask)return[A,I];if(A[1]|=128,A[C-4]=G[0],A[C-3]=G[1],A[C-2]=G[2],A[C-1]=G[3],W)return[A,I];if(Z)return lx1(I,G,A,C,w),[A];return lx1(I,G,I,0,w),[A,I]}close(I,d,G,Z){let C;if(I===void 0)C=t_4;else if(typeof I!=="number"||!GD4(I))throw new TypeError("First argument must be a valid error code number");else if(d===void 0||!d.length)C=Buffer.allocUnsafe(2),C.writeUInt16BE(I,0);else{let w=Buffer.byteLength(d);if(w>123)throw new RangeError("The message must not be greater than 123 bytes");if(C=Buffer.allocUnsafe(2+w),C.writeUInt16BE(I,0),typeof d==="string")C.write(d,2);else C.set(d,2)}let W={[WZ]:C.length,fin:!0,generateMask:this._generateMask,mask:G,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==SC)this.enqueue([this.dispatch,C,!1,W,Z]);else this.sendFrame(kY.frame(C,W),Z)}ping(I,d,G){let Z,C;if(typeof I==="string")Z=Buffer.byteLength(I),C=!1;else if(ZQ(I))Z=I.size,C=!1;else I=Dg(I),Z=I.length,C=Dg.readOnly;if(Z>125)throw new RangeError("The data size must not be greater than 125 bytes");let W={[WZ]:Z,fin:!0,generateMask:this._generateMask,mask:d,maskBuffer:this._maskBuffer,opcode:9,readOnly:C,rsv1:!1};if(ZQ(I))if(this._state!==SC)this.enqueue([this.getBlobData,I,!1,W,G]);else this.getBlobData(I,!1,W,G);else if(this._state!==SC)this.enqueue([this.dispatch,I,!1,W,G]);else this.sendFrame(kY.frame(I,W),G)}pong(I,d,G){let Z,C;if(typeof I==="string")Z=Buffer.byteLength(I),C=!1;else if(ZQ(I))Z=I.size,C=!1;else I=Dg(I),Z=I.length,C=Dg.readOnly;if(Z>125)throw new RangeError("The data size must not be greater than 125 bytes");let W={[WZ]:Z,fin:!0,generateMask:this._generateMask,mask:d,maskBuffer:this._maskBuffer,opcode:10,readOnly:C,rsv1:!1};if(ZQ(I))if(this._state!==SC)this.enqueue([this.getBlobData,I,!1,W,G]);else this.getBlobData(I,!1,W,G);else if(this._state!==SC)this.enqueue([this.dispatch,I,!1,W,G]);else this.sendFrame(kY.frame(I,W),G)}send(I,d,G){let Z=this._extensions[mx1.extensionName],C=d.binary?2:1,W=d.compress,w,B;if(typeof I==="string")w=Buffer.byteLength(I),B=!1;else if(ZQ(I))w=I.size,B=!1;else I=Dg(I),w=I.length,B=Dg.readOnly;if(this._firstFragment){if(this._firstFragment=!1,W&&Z&&Z.params[Z._isServer?"server_no_context_takeover":"client_no_context_takeover"])W=w>=Z._threshold;this._compress=W}else W=!1,C=0;if(d.fin)this._firstFragment=!0;let A={[WZ]:w,fin:d.fin,generateMask:this._generateMask,mask:d.mask,maskBuffer:this._maskBuffer,opcode:C,readOnly:B,rsv1:W};if(ZQ(I))if(this._state!==SC)this.enqueue([this.getBlobData,I,this._compress,A,G]);else this.getBlobData(I,this._compress,A,G);else if(this._state!==SC)this.enqueue([this.dispatch,I,this._compress,A,G]);else this.dispatch(I,this._compress,A,G)}getBlobData(I,d,G,Z){this._bufferedBytes+=G[WZ],this._state=WD4,I.arrayBuffer().then((C)=>{if(this._socket.destroyed){let w=new Error("The socket was closed while the blob was being read");process.nextTick(d91,this,w,Z);return}this._bufferedBytes-=G[WZ];let W=Dg(C);if(!d)this._state=SC,this.sendFrame(kY.frame(W,G),Z),this.dequeue();else this.dispatch(W,d,G,Z)}).catch((C)=>{process.nextTick(wD4,this,C,Z)})}dispatch(I,d,G,Z){if(!d){this.sendFrame(kY.frame(I,G),Z);return}let C=this._extensions[mx1.extensionName];this._bufferedBytes+=G[WZ],this._state=CD4,C.compress(I,G.fin,(W,w)=>{if(this._socket.destroyed){let B=new Error("The socket was closed while data was being compressed");d91(this,B,Z);return}this._bufferedBytes-=G[WZ],this._state=SC,G.readOnly=!1,this.sendFrame(kY.frame(w,G),Z),this.dequeue()})}dequeue(){while(this._state===SC&&this._queue.length){let I=this._queue.shift();this._bufferedBytes-=I[3][WZ],Reflect.apply(I[0],this,I.slice(1))}}enqueue(I){this._bufferedBytes+=I[3][WZ],this._queue.push(I)}sendFrame(I,d){if(I.length===2)this._socket.cork(),this._socket.write(I[0]),this._socket.write(I[1],d),this._socket.uncork();else this._socket.write(I[0],d)}}bx1.exports=kY;function d91(I,d,G){if(typeof G==="function")G(d);for(let Z=0;Z{var{kForOnEventAttribute:$M,kListener:Z91}=sA(),hx1=Symbol("kCode"),jx1=Symbol("kData"),kx1=Symbol("kError"),xx1=Symbol("kMessage"),cx1=Symbol("kReason"),WQ=Symbol("kTarget"),px1=Symbol("kType"),ix1=Symbol("kWasClean");class xY{constructor(I){this[WQ]=null,this[px1]=I}get target(){return this[WQ]}get type(){return this[px1]}}Object.defineProperty(xY.prototype,"target",{enumerable:!0});Object.defineProperty(xY.prototype,"type",{enumerable:!0});class wQ extends xY{constructor(I,d={}){super(I);this[hx1]=d.code===void 0?0:d.code,this[cx1]=d.reason===void 0?"":d.reason,this[ix1]=d.wasClean===void 0?!1:d.wasClean}get code(){return this[hx1]}get reason(){return this[cx1]}get wasClean(){return this[ix1]}}Object.defineProperty(wQ.prototype,"code",{enumerable:!0});Object.defineProperty(wQ.prototype,"reason",{enumerable:!0});Object.defineProperty(wQ.prototype,"wasClean",{enumerable:!0});class uM extends xY{constructor(I,d={}){super(I);this[kx1]=d.error===void 0?null:d.error,this[xx1]=d.message===void 0?"":d.message}get error(){return this[kx1]}get message(){return this[xx1]}}Object.defineProperty(uM.prototype,"error",{enumerable:!0});Object.defineProperty(uM.prototype,"message",{enumerable:!0});class yj extends xY{constructor(I,d={}){super(I);this[jx1]=d.data===void 0?null:d.data}get data(){return this[jx1]}}Object.defineProperty(yj.prototype,"data",{enumerable:!0});var BD4={addEventListener(I,d,G={}){for(let C of this.listeners(I))if(!G[$M]&&C[Z91]===d&&!C[$M])return;let Z;if(I==="message")Z=function C(W,w){let B=new yj("message",{data:w?W:W.toString()});B[WQ]=this,Lj(d,this,B)};else if(I==="close")Z=function C(W,w){let B=new wQ("close",{code:W,reason:w.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});B[WQ]=this,Lj(d,this,B)};else if(I==="error")Z=function C(W){let w=new uM("error",{error:W,message:W.message});w[WQ]=this,Lj(d,this,w)};else if(I==="open")Z=function C(){let W=new xY("open");W[WQ]=this,Lj(d,this,W)};else return;if(Z[$M]=!!G[$M],Z[Z91]=d,G.once)this.once(I,Z);else this.on(I,Z)},removeEventListener(I,d){for(let G of this.listeners(I))if(G[Z91]===d&&!G[$M]){this.removeListener(I,G);break}}};nx1.exports={CloseEvent:wQ,ErrorEvent:uM,Event:xY,EventTarget:BD4,MessageEvent:yj};function Lj(I,d,G){if(typeof I==="object"&&I.handleEvent)I.handleEvent.call(I,G);else I.call(d,G)}});var C91=Y((PS9,ax1)=>{var{tokenChars:TM}=GQ();function mw(I,d,G){if(I[d]===void 0)I[d]=[G];else I[d].push(G)}function AD4(I){let d=Object.create(null),G=Object.create(null),Z=!1,C=!1,W=!1,w,B,A=-1,V=-1,X=-1,_=0;for(;_{let G=I[d];if(!Array.isArray(G))G=[G];return G.map((Z)=>{return[d].concat(Object.keys(Z).map((C)=>{let W=Z[C];if(!Array.isArray(W))W=[W];return W.map((w)=>w===!0?C:`${C}=${w}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}ax1.exports={format:VD4,parse:AD4}});var V91=Y((TS9,Bc1)=>{var XD4=B1("events"),YD4=B1("https"),_D4=B1("http"),ex1=B1("net"),DD4=B1("tls"),{randomBytes:HD4,createHash:FD4}=B1("crypto"),{Duplex:$S9,Readable:uS9}=B1("stream"),{URL:W91}=B1("url"),cY=PM(),gD4=I91(),JD4=G91(),{isBlob:KD4}=GQ(),{BINARY_TYPES:sx1,EMPTY_BUFFER:Pj,GUID:ND4,kForOnEventAttribute:w91,kListener:zD4,kStatusCode:QD4,kWebSocket:Y8,NOOP:tx1}=sA(),{EventTarget:{addEventListener:fD4,removeEventListener:qD4}}=rx1(),{format:RD4,parse:UD4}=C91(),{toBuffer:vD4}=SM(),Ic1=Symbol("kAborted"),B91=[8,13],eA=["CONNECTING","OPEN","CLOSING","CLOSED"],ED4=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class f4 extends XD4{constructor(I,d,G){super();if(this._binaryType=sx1[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Pj,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=f4.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,I!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,d===void 0)d=[];else if(!Array.isArray(d))if(typeof d==="object"&&d!==null)G=d,d=[];else d=[d];dc1(this,I,d,G)}else this._autoPong=G.autoPong,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(I){if(!sx1.includes(I))return;if(this._binaryType=I,this._receiver)this._receiver._binaryType=I}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(I,d,G){let Z=new gD4({allowSynchronousEvents:G.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:G.maxPayload,skipUTF8Validation:G.skipUTF8Validation}),C=new JD4(I,this._extensions,G.generateMask);if(this._receiver=Z,this._sender=C,this._socket=I,Z[Y8]=this,C[Y8]=this,I[Y8]=this,Z.on("conclude",LD4),Z.on("drain",yD4),Z.on("error",PD4),Z.on("message",$D4),Z.on("ping",uD4),Z.on("pong",TD4),C.onerror=OD4,I.setTimeout)I.setTimeout(0);if(I.setNoDelay)I.setNoDelay();if(d.length>0)I.unshift(d);I.on("close",Cc1),I.on("data",uj),I.on("end",Wc1),I.on("error",wc1),this._readyState=f4.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=f4.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[cY.extensionName])this._extensions[cY.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=f4.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(I,d){if(this.readyState===f4.CLOSED)return;if(this.readyState===f4.CONNECTING){ad(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===f4.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=f4.CLOSING,this._sender.close(I,d,!this._isServer,(G)=>{if(G)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Zc1(this)}pause(){if(this.readyState===f4.CONNECTING||this.readyState===f4.CLOSED)return;this._paused=!0,this._socket.pause()}ping(I,d,G){if(this.readyState===f4.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof I==="function")G=I,I=d=void 0;else if(typeof d==="function")G=d,d=void 0;if(typeof I==="number")I=I.toString();if(this.readyState!==f4.OPEN){A91(this,I,G);return}if(d===void 0)d=!this._isServer;this._sender.ping(I||Pj,d,G)}pong(I,d,G){if(this.readyState===f4.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof I==="function")G=I,I=d=void 0;else if(typeof d==="function")G=d,d=void 0;if(typeof I==="number")I=I.toString();if(this.readyState!==f4.OPEN){A91(this,I,G);return}if(d===void 0)d=!this._isServer;this._sender.pong(I||Pj,d,G)}resume(){if(this.readyState===f4.CONNECTING||this.readyState===f4.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(I,d,G){if(this.readyState===f4.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof d==="function")G=d,d={};if(typeof I==="number")I=I.toString();if(this.readyState!==f4.OPEN){A91(this,I,G);return}let Z={binary:typeof I!=="string",mask:!this._isServer,compress:!0,fin:!0,...d};if(!this._extensions[cY.extensionName])Z.compress=!1;this._sender.send(I||Pj,Z,G)}terminate(){if(this.readyState===f4.CLOSED)return;if(this.readyState===f4.CONNECTING){ad(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=f4.CLOSING,this._socket.destroy()}}Object.defineProperty(f4,"CONNECTING",{enumerable:!0,value:eA.indexOf("CONNECTING")});Object.defineProperty(f4.prototype,"CONNECTING",{enumerable:!0,value:eA.indexOf("CONNECTING")});Object.defineProperty(f4,"OPEN",{enumerable:!0,value:eA.indexOf("OPEN")});Object.defineProperty(f4.prototype,"OPEN",{enumerable:!0,value:eA.indexOf("OPEN")});Object.defineProperty(f4,"CLOSING",{enumerable:!0,value:eA.indexOf("CLOSING")});Object.defineProperty(f4.prototype,"CLOSING",{enumerable:!0,value:eA.indexOf("CLOSING")});Object.defineProperty(f4,"CLOSED",{enumerable:!0,value:eA.indexOf("CLOSED")});Object.defineProperty(f4.prototype,"CLOSED",{enumerable:!0,value:eA.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((I)=>{Object.defineProperty(f4.prototype,I,{enumerable:!0})});["open","error","close","message"].forEach((I)=>{Object.defineProperty(f4.prototype,`on${I}`,{enumerable:!0,get(){for(let d of this.listeners(I))if(d[w91])return d[zD4];return null},set(d){for(let G of this.listeners(I))if(G[w91]){this.removeListener(I,G);break}if(typeof d!=="function")return;this.addEventListener(I,d,{[w91]:!0})}})});f4.prototype.addEventListener=fD4;f4.prototype.removeEventListener=qD4;Bc1.exports=f4;function dc1(I,d,G,Z){let C={allowSynchronousEvents:!0,autoPong:!0,protocolVersion:B91[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...Z,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(I._autoPong=C.autoPong,!B91.includes(C.protocolVersion))throw new RangeError(`Unsupported protocol version: ${C.protocolVersion} (supported versions: ${B91.join(", ")})`);let W;if(d instanceof W91)W=d;else try{W=new W91(d)}catch(K){throw new SyntaxError(`Invalid URL: ${d}`)}if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";I._url=W.href;let w=W.protocol==="wss:",B=W.protocol==="ws+unix:",A;if(W.protocol!=="ws:"&&!w&&!B)A=`The URL's protocol must be one of "ws:", "wss:", "http:", "https", or "ws+unix:"`;else if(B&&!W.pathname)A="The URL's pathname is empty";else if(W.hash)A="The URL contains a fragment identifier";if(A){let K=new SyntaxError(A);if(I._redirects===0)throw K;else{$j(I,K);return}}let V=w?443:80,X=HD4(16).toString("base64"),_=w?YD4.request:_D4.request,F=new Set,g;if(C.createConnection=C.createConnection||(w?SD4:MD4),C.defaultPort=C.defaultPort||V,C.port=W.port||V,C.host=W.hostname.startsWith("[")?W.hostname.slice(1,-1):W.hostname,C.headers={...C.headers,"Sec-WebSocket-Version":C.protocolVersion,"Sec-WebSocket-Key":X,Connection:"Upgrade",Upgrade:"websocket"},C.path=W.pathname+W.search,C.timeout=C.handshakeTimeout,C.perMessageDeflate)g=new cY(C.perMessageDeflate!==!0?C.perMessageDeflate:{},!1,C.maxPayload),C.headers["Sec-WebSocket-Extensions"]=RD4({[cY.extensionName]:g.offer()});if(G.length){for(let K of G){if(typeof K!=="string"||!ED4.test(K)||F.has(K))throw new SyntaxError("An invalid or duplicated subprotocol was specified");F.add(K)}C.headers["Sec-WebSocket-Protocol"]=G.join(",")}if(C.origin)if(C.protocolVersion<13)C.headers["Sec-WebSocket-Origin"]=C.origin;else C.headers.Origin=C.origin;if(W.username||W.password)C.auth=`${W.username}:${W.password}`;if(B){let K=C.path.split(":");C.socketPath=K[0],C.path=K[1]}let J;if(C.followRedirects){if(I._redirects===0){I._originalIpc=B,I._originalSecure=w,I._originalHostOrSocketPath=B?C.socketPath:W.host;let K=Z&&Z.headers;if(Z={...Z,headers:{}},K)for(let[Q,E]of Object.entries(K))Z.headers[Q.toLowerCase()]=E}else if(I.listenerCount("redirect")===0){let K=B?I._originalIpc?C.socketPath===I._originalHostOrSocketPath:!1:I._originalIpc?!1:W.host===I._originalHostOrSocketPath;if(!K||I._originalSecure&&!w){if(delete C.headers.authorization,delete C.headers.cookie,!K)delete C.headers.host;C.auth=void 0}}if(C.auth&&!Z.headers.authorization)Z.headers.authorization="Basic "+Buffer.from(C.auth).toString("base64");if(J=I._req=_(C),I._redirects)I.emit("redirect",I.url,J)}else J=I._req=_(C);if(C.timeout)J.on("timeout",()=>{ad(I,J,"Opening handshake has timed out")});if(J.on("error",(K)=>{if(J===null||J[Ic1])return;J=I._req=null,$j(I,K)}),J.on("response",(K)=>{let Q=K.headers.location,E=K.statusCode;if(Q&&C.followRedirects&&E>=300&&E<400){if(++I._redirects>C.maxRedirects){ad(I,J,"Maximum redirects exceeded");return}J.abort();let S;try{S=new W91(Q,d)}catch(P){let $=new SyntaxError(`Invalid URL: ${Q}`);$j(I,$);return}dc1(I,S,G,Z)}else if(!I.emit("unexpected-response",J,K))ad(I,J,`Unexpected server response: ${K.statusCode}`)}),J.on("upgrade",(K,Q,E)=>{if(I.emit("upgrade",K),I.readyState!==f4.CONNECTING)return;J=I._req=null;let S=K.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){ad(I,Q,"Invalid Upgrade header");return}let P=FD4("sha1").update(X+ND4).digest("base64");if(K.headers["sec-websocket-accept"]!==P){ad(I,Q,"Invalid Sec-WebSocket-Accept header");return}let $=K.headers["sec-websocket-protocol"],h;if($!==void 0){if(!F.size)h="Server sent a subprotocol but none was requested";else if(!F.has($))h="Server sent an invalid subprotocol"}else if(F.size)h="Server sent no subprotocol";if(h){ad(I,Q,h);return}if($)I._protocol=$;let O=K.headers["sec-websocket-extensions"];if(O!==void 0){if(!g){ad(I,Q,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let T;try{T=UD4(O)}catch(c){ad(I,Q,"Invalid Sec-WebSocket-Extensions header");return}let V1=Object.keys(T);if(V1.length!==1||V1[0]!==cY.extensionName){ad(I,Q,"Server indicated an extension that was not requested");return}try{g.accept(T[cY.extensionName])}catch(c){ad(I,Q,"Invalid Sec-WebSocket-Extensions header");return}I._extensions[cY.extensionName]=g}I.setSocket(Q,E,{allowSynchronousEvents:C.allowSynchronousEvents,generateMask:C.generateMask,maxPayload:C.maxPayload,skipUTF8Validation:C.skipUTF8Validation})}),C.finishRequest)C.finishRequest(J,I);else J.end()}function $j(I,d){I._readyState=f4.CLOSING,I._errorEmitted=!0,I.emit("error",d),I.emitClose()}function MD4(I){return I.path=I.socketPath,ex1.connect(I)}function SD4(I){if(I.path=void 0,!I.servername&&I.servername!=="")I.servername=ex1.isIP(I.host)?"":I.host;return DD4.connect(I)}function ad(I,d,G){I._readyState=f4.CLOSING;let Z=new Error(G);if(Error.captureStackTrace(Z,ad),d.setHeader){if(d[Ic1]=!0,d.abort(),d.socket&&!d.socket.destroyed)d.socket.destroy();process.nextTick($j,I,Z)}else d.destroy(Z),d.once("error",I.emit.bind(I,"error")),d.once("close",I.emitClose.bind(I))}function A91(I,d,G){if(d){let Z=KD4(d)?d.size:vD4(d).length;if(I._socket)I._sender._bufferedBytes+=Z;else I._bufferedAmount+=Z}if(G){let Z=new Error(`WebSocket is not open: readyState ${I.readyState} (${eA[I.readyState]})`);process.nextTick(G,Z)}}function LD4(I,d){let G=this[Y8];if(G._closeFrameReceived=!0,G._closeMessage=d,G._closeCode=I,G._socket[Y8]===void 0)return;if(G._socket.removeListener("data",uj),process.nextTick(Gc1,G._socket),I===1005)G.close();else G.close(I,d)}function yD4(){let I=this[Y8];if(!I.isPaused)I._socket.resume()}function PD4(I){let d=this[Y8];if(d._socket[Y8]!==void 0)d._socket.removeListener("data",uj),process.nextTick(Gc1,d._socket),d.close(I[QD4]);if(!d._errorEmitted)d._errorEmitted=!0,d.emit("error",I)}function ox1(){this[Y8].emitClose()}function $D4(I,d){this[Y8].emit("message",I,d)}function uD4(I){let d=this[Y8];if(d._autoPong)d.pong(I,!this._isServer,tx1);d.emit("ping",I)}function TD4(I){this[Y8].emit("pong",I)}function Gc1(I){I.resume()}function OD4(I){let d=this[Y8];if(d.readyState===f4.CLOSED)return;if(d.readyState===f4.OPEN)d._readyState=f4.CLOSING,Zc1(d);if(this._socket.end(),!d._errorEmitted)d._errorEmitted=!0,d.emit("error",I)}function Zc1(I){I._closeTimer=setTimeout(I._socket.destroy.bind(I._socket),30000)}function Cc1(){let I=this[Y8];this.removeListener("close",Cc1),this.removeListener("data",uj),this.removeListener("end",Wc1),I._readyState=f4.CLOSING;let d;if(!this._readableState.endEmitted&&!I._closeFrameReceived&&!I._receiver._writableState.errorEmitted&&(d=I._socket.read())!==null)I._receiver.write(d);if(I._receiver.end(),this[Y8]=void 0,clearTimeout(I._closeTimer),I._receiver._writableState.finished||I._receiver._writableState.errorEmitted)I.emitClose();else I._receiver.on("error",ox1),I._receiver.on("finish",ox1)}function uj(I){if(!this[Y8]._receiver.write(I))this.pause()}function Wc1(){let I=this[Y8];I._readyState=f4.CLOSING,I._receiver.end(),this.end()}function wc1(){let I=this[Y8];if(this.removeListener("error",wc1),this.on("error",tx1),I)I._readyState=f4.CLOSING,this.destroy()}});var Vc1=Y((OS9,Ac1)=>{var{tokenChars:mD4}=GQ();function lD4(I){let d=new Set,G=-1,Z=-1,C=0;for(C;C{var bD4=B1("events"),Tj=B1("http"),{Duplex:mS9}=B1("stream"),{createHash:hD4}=B1("crypto"),Xc1=C91(),Fg=PM(),jD4=Vc1(),kD4=V91(),{GUID:xD4,kWebSocket:cD4}=sA(),pD4=/^[+/0-9A-Za-z]{22}==$/;class _c1 extends bD4{constructor(I,d){super();if(I={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:kD4,...I},I.port==null&&!I.server&&!I.noServer||I.port!=null&&(I.server||I.noServer)||I.server&&I.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(I.port!=null)this._server=Tj.createServer((G,Z)=>{let C=Tj.STATUS_CODES[426];Z.writeHead(426,{"Content-Length":C.length,"Content-Type":"text/plain"}),Z.end(C)}),this._server.listen(I.port,I.host,I.backlog,d);else if(I.server)this._server=I.server;if(this._server){let G=this.emit.bind(this,"connection");this._removeListeners=iD4(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(Z,C,W)=>{this.handleUpgrade(Z,C,W,G)}})}if(I.perMessageDeflate===!0)I.perMessageDeflate={};if(I.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=I,this._state=0}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(I){if(this._state===2){if(I)this.once("close",()=>{I(new Error("The server is not running"))});process.nextTick(OM,this);return}if(I)this.once("close",I);if(this._state===1)return;if(this._state=1,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(OM,this);else this._shouldEmitClose=!0;else process.nextTick(OM,this)}else{let d=this._server;this._removeListeners(),this._removeListeners=this._server=null,d.close(()=>{OM(this)})}}shouldHandle(I){if(this.options.path){let d=I.url.indexOf("?");if((d!==-1?I.url.slice(0,d):I.url)!==this.options.path)return!1}return!0}handleUpgrade(I,d,G,Z){d.on("error",Yc1);let C=I.headers["sec-websocket-key"],W=I.headers.upgrade,w=+I.headers["sec-websocket-version"];if(I.method!=="GET"){gg(this,I,d,405,"Invalid HTTP method");return}if(W===void 0||W.toLowerCase()!=="websocket"){gg(this,I,d,400,"Invalid Upgrade header");return}if(C===void 0||!pD4.test(C)){gg(this,I,d,400,"Missing or invalid Sec-WebSocket-Key header");return}if(w!==8&&w!==13){gg(this,I,d,400,"Missing or invalid Sec-WebSocket-Version header");return}if(!this.shouldHandle(I)){mM(d,400);return}let B=I.headers["sec-websocket-protocol"],A=new Set;if(B!==void 0)try{A=jD4.parse(B)}catch(_){gg(this,I,d,400,"Invalid Sec-WebSocket-Protocol header");return}let V=I.headers["sec-websocket-extensions"],X={};if(this.options.perMessageDeflate&&V!==void 0){let _=new Fg(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let F=Xc1.parse(V);if(F[Fg.extensionName])_.accept(F[Fg.extensionName]),X[Fg.extensionName]=_}catch(F){gg(this,I,d,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let _={origin:I.headers[`${w===8?"sec-websocket-origin":"origin"}`],secure:!!(I.socket.authorized||I.socket.encrypted),req:I};if(this.options.verifyClient.length===2){this.options.verifyClient(_,(F,g,J,K)=>{if(!F)return mM(d,g||401,J,K);this.completeUpgrade(X,C,A,I,d,G,Z)});return}if(!this.options.verifyClient(_))return mM(d,401)}this.completeUpgrade(X,C,A,I,d,G,Z)}completeUpgrade(I,d,G,Z,C,W,w){if(!C.readable||!C.writable)return C.destroy();if(C[cD4])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return mM(C,503);let A=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${hD4("sha1").update(d+xD4).digest("base64")}`],V=new this.options.WebSocket(null,void 0,this.options);if(G.size){let X=this.options.handleProtocols?this.options.handleProtocols(G,Z):G.values().next().value;if(X)A.push(`Sec-WebSocket-Protocol: ${X}`),V._protocol=X}if(I[Fg.extensionName]){let X=I[Fg.extensionName].params,_=Xc1.format({[Fg.extensionName]:[X]});A.push(`Sec-WebSocket-Extensions: ${_}`),V._extensions=I}if(this.emit("headers",A,Z),C.write(A.concat(`\r +`).join(`\r +`)),C.removeListener("error",Yc1),V.setSocket(C,W,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(V),V.on("close",()=>{if(this.clients.delete(V),this._shouldEmitClose&&!this.clients.size)process.nextTick(OM,this)});w(V,Z)}}Dc1.exports=_c1;function iD4(I,d){for(let G of Object.keys(d))I.on(G,d[G]);return function G(){for(let Z of Object.keys(d))I.removeListener(Z,d[Z])}}function OM(I){I._state=2,I.emit("close")}function Yc1(){this.destroy()}function mM(I,d,G,Z){G=G||Tj.STATUS_CODES[d],Z={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(G),...Z},I.once("finish",I.destroy),I.end(`HTTP/1.1 ${d} ${Tj.STATUS_CODES[d]}\r +`+Object.keys(Z).map((C)=>`${C}: ${Z[C]}`).join(`\r +`)+`\r +\r +`+G)}function gg(I,d,G,Z,C){if(I.listenerCount("wsClientError")){let W=new Error(C);Error.captureStackTrace(W,gg),I.emit("wsClientError",W,G,d)}else mM(G,Z,C)}});var nD4,rD4,aD4,Fc1,sD4,gc1;var Jc1=Gw(()=>{nD4=J1(gx1(),1),rD4=J1(I91(),1),aD4=J1(G91(),1),Fc1=J1(V91(),1),sD4=J1(Hc1(),1),gc1=Fc1.default});var Oj;var Kc1=Gw(()=>{Jc1();Oj=global;Oj.WebSocket||=gc1;Oj.window||=global;Oj.self||=global;Oj.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var Nc1=Y((mj,X91)=>{(function I(d,G){if(typeof mj==="object"&&typeof X91==="object")X91.exports=G();else if(typeof define==="function"&&define.amd)define([],G);else if(typeof mj==="object")mj.ReactDevToolsBackend=G();else d.ReactDevToolsBackend=G()})(self,()=>{return(()=>{var I={602:(C,W,w)=>{var B;function A(f1){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")A=function r(A1){return typeof A1};else A=function r(A1){return A1&&typeof Symbol==="function"&&A1.constructor===Symbol&&A1!==Symbol.prototype?"symbol":typeof A1};return A(f1)}var V=w(206),X=w(189),_=Object.assign,F=X.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,g=[],J=null;function K(){if(J===null){var f1=new Map;try{S.useContext({_currentValue:null}),S.useState(null),S.useReducer(function(T1){return T1},null),S.useRef(null),typeof S.useCacheRefresh==="function"&&S.useCacheRefresh(),S.useLayoutEffect(function(){}),S.useInsertionEffect(function(){}),S.useEffect(function(){}),S.useImperativeHandle(void 0,function(){return null}),S.useDebugValue(null),S.useCallback(function(){}),S.useMemo(function(){return null}),typeof S.useMemoCache==="function"&&S.useMemoCache(0)}finally{var r=g;g=[]}for(var A1=0;A1i1;i1++)if(j1=O(H1,e,i1),j1!==-1){h=i1,e=j1;break I}e=-1}}I:{if(H1=G0,j1=K().get(a0.primitive),j1!==void 0){for(i1=0;i1e-H1?null:G0.slice(H1,e-1),G0!==null){if(e=0,T1!==null){for(;ee;T1--)e1=P0.pop()}for(T1=G0.length-e-1;1<=T1;T1--)e=[],H1=G0[T1],(j1=G0[T1-1].functionName)?(i1=j1.lastIndexOf("."),i1===-1&&(i1=0),j1.slice(i1,i1+3)==="use"&&(i1+=3),j1=j1.slice(i1)):j1="",j1={id:null,isStateEditable:!1,name:j1,value:void 0,subHooks:e},A1&&(j1.hookSource={lineNumber:H1.lineNumber,columnNumber:H1.columnNumber,functionName:H1.functionName,fileName:H1.fileName}),e1.push(j1),P0.push(e1),e1=e;T1=G0}e=a0.primitive,a0={id:e==="Context"||e==="DebugValue"?null:F0++,isStateEditable:e==="Reducer"||e==="State",name:e,value:a0.value,subHooks:[]},A1&&(e={lineNumber:null,functionName:null,fileName:null,columnNumber:null},G0&&1<=G0.length&&(G0=G0[0],e.lineNumber=G0.lineNumber,e.functionName=G0.functionName,e.fileName=G0.fileName,e.columnNumber=G0.columnNumber),a0.hookSource=e),e1.push(a0)}return c(m1,null),m1}function c(f1,r){for(var A1=[],m1=0;m1{C.exports=w(602)},9:(C,W)=>{var w;function B(c){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")B=function c1(o1){return typeof o1};else B=function c1(o1){return o1&&typeof Symbol==="function"&&o1.constructor===Symbol&&o1!==Symbol.prototype?"symbol":typeof o1};return B(c)}var A=Symbol.for("react.element"),V=Symbol.for("react.portal"),X=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),F=Symbol.for("react.profiler"),g=Symbol.for("react.provider"),J=Symbol.for("react.context"),K=Symbol.for("react.server_context"),Q=Symbol.for("react.forward_ref"),E=Symbol.for("react.suspense"),S=Symbol.for("react.suspense_list"),P=Symbol.for("react.memo"),$=Symbol.for("react.lazy"),h=Symbol.for("react.offscreen"),O=Symbol.for("react.cache"),T=Symbol.for("react.client.reference");function V1(c){if(B(c)==="object"&&c!==null){var c1=c.$$typeof;switch(c1){case A:switch(c=c.type,c){case X:case F:case _:case E:case S:return c;default:switch(c=c&&c.$$typeof,c){case K:case J:case Q:case $:case P:case g:return c;default:return c1}}case V:return c1}}}W.ContextConsumer=J,W.ContextProvider=g,w=A,W.ForwardRef=Q,W.Fragment=X,W.Lazy=$,W.Memo=P,W.Portal=V,W.Profiler=F,W.StrictMode=_,W.Suspense=E,w=S,w=function(){return!1},w=function(){return!1},w=function(c){return V1(c)===J},w=function(c){return V1(c)===g},W.isElement=function(c){return B(c)==="object"&&c!==null&&c.$$typeof===A},w=function(c){return V1(c)===Q},w=function(c){return V1(c)===X},w=function(c){return V1(c)===$},w=function(c){return V1(c)===P},w=function(c){return V1(c)===V},w=function(c){return V1(c)===F},w=function(c){return V1(c)===_},w=function(c){return V1(c)===E},w=function(c){return V1(c)===S},w=function(c){return typeof c==="string"||typeof c==="function"||c===X||c===F||c===_||c===E||c===S||c===h||c===O||B(c)==="object"&&c!==null&&(c.$$typeof===$||c.$$typeof===P||c.$$typeof===g||c.$$typeof===J||c.$$typeof===Q||c.$$typeof===T||c.getModuleId!==void 0)?!0:!1},W.typeOf=V1},550:(C,W,w)=>{C.exports=w(9)},978:(C,W)=>{function w(j){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")w=function W1(U1){return typeof U1};else w=function W1(U1){return U1&&typeof Symbol==="function"&&U1.constructor===Symbol&&U1!==Symbol.prototype?"symbol":typeof U1};return w(j)}var B=Symbol.for("react.element"),A=Symbol.for("react.portal"),V=Symbol.for("react.fragment"),X=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),F=Symbol.for("react.provider"),g=Symbol.for("react.context"),J=Symbol.for("react.server_context"),K=Symbol.for("react.forward_ref"),Q=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),S=Symbol.for("react.memo"),P=Symbol.for("react.lazy"),$=Symbol.for("react.debug_trace_mode"),h=Symbol.for("react.offscreen"),O=Symbol.for("react.cache"),T=Symbol.for("react.default_value"),V1=Symbol.for("react.postpone"),c=Symbol.iterator;function c1(j){if(j===null||w(j)!=="object")return null;return j=c&&j[c]||j["@@iterator"],typeof j==="function"?j:null}var o1={isMounted:function j(){return!1},enqueueForceUpdate:function j(){},enqueueReplaceState:function j(){},enqueueSetState:function j(){}},a1=Object.assign,f1={};function r(j,W1,U1){this.props=j,this.context=W1,this.refs=f1,this.updater=U1||o1}r.prototype.isReactComponent={},r.prototype.setState=function(j,W1){if(w(j)!=="object"&&typeof j!=="function"&&j!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,j,W1,"setState")},r.prototype.forceUpdate=function(j){this.updater.enqueueForceUpdate(this,j,"forceUpdate")};function A1(){}A1.prototype=r.prototype;function m1(j,W1,U1){this.props=j,this.context=W1,this.refs=f1,this.updater=U1||o1}var T1=m1.prototype=new A1;T1.constructor=m1,a1(T1,r.prototype),T1.isPureReactComponent=!0;var e1=Array.isArray,F0=Object.prototype.hasOwnProperty,P0={current:null},B0={key:!0,ref:!0,__self:!0,__source:!0};function a0(j,W1,U1){var L1,D0={},O0=null,k0=null;if(W1!=null)for(L1 in W1.ref!==void 0&&(k0=W1.ref),W1.key!==void 0&&(O0=""+W1.key),W1)F0.call(W1,L1)&&!B0.hasOwnProperty(L1)&&(D0[L1]=W1[L1]);var i0=arguments.length-2;if(i0===1)D0.children=U1;else if(1{C.exports=w(978)},206:function(C,W,w){var B,A,V;function X(_){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")X=function F(g){return typeof g};else X=function F(g){return g&&typeof Symbol==="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g};return X(_)}(function(_,F){A=[w(430)],B=F,V=typeof B==="function"?B.apply(W,A):B,V!==void 0&&(C.exports=V)})(this,function _(F){var g=/(^|@)\S+:\d+/,J=/^\s*at .*(\S+:\d+|\(native\))/m,K=/^(eval@)?(\[native code])?$/;return{parse:function Q(E){if(typeof E.stacktrace!=="undefined"||typeof E["opera#sourceloc"]!=="undefined")return this.parseOpera(E);else if(E.stack&&E.stack.match(J))return this.parseV8OrIE(E);else if(E.stack)return this.parseFFOrSafari(E);else throw new Error("Cannot parse given Error object")},extractLocation:function Q(E){if(E.indexOf(":")===-1)return[E];var S=/(.+?)(?::(\d+))?(?::(\d+))?$/,P=S.exec(E.replace(/[()]/g,""));return[P[1],P[2]||void 0,P[3]||void 0]},parseV8OrIE:function Q(E){var S=E.stack.split(` +`).filter(function(P){return!!P.match(J)},this);return S.map(function(P){if(P.indexOf("(eval ")>-1)P=P.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,"");var $=P.replace(/^\s+/,"").replace(/\(eval code/g,"("),h=$.match(/ (\((.+):(\d+):(\d+)\)$)/);$=h?$.replace(h[0],""):$;var O=$.split(/\s+/).slice(1),T=this.extractLocation(h?h[1]:O.pop()),V1=O.join(" ")||void 0,c=["eval",""].indexOf(T[0])>-1?void 0:T[0];return new F({functionName:V1,fileName:c,lineNumber:T[1],columnNumber:T[2],source:P})},this)},parseFFOrSafari:function Q(E){var S=E.stack.split(` +`).filter(function(P){return!P.match(K)},this);return S.map(function(P){if(P.indexOf(" > eval")>-1)P=P.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1");if(P.indexOf("@")===-1&&P.indexOf(":")===-1)return new F({functionName:P});else{var $=/((.*".+"[^@]*)?[^@]*)(?:@)/,h=P.match($),O=h&&h[1]?h[1]:void 0,T=this.extractLocation(P.replace($,""));return new F({functionName:O,fileName:T[0],lineNumber:T[1],columnNumber:T[2],source:P})}},this)},parseOpera:function Q(E){if(!E.stacktrace||E.message.indexOf(` +`)>-1&&E.message.split(` +`).length>E.stacktrace.split(` +`).length)return this.parseOpera9(E);else if(!E.stack)return this.parseOpera10(E);else return this.parseOpera11(E)},parseOpera9:function Q(E){var S=/Line (\d+).*script (?:in )?(\S+)/i,P=E.message.split(` +`),$=[];for(var h=2,O=P.length;h/,"$2").replace(/\([^)]*\)/g,"")||void 0,V1;if(O.match(/\(([^)]*)\)/))V1=O.replace(/^[^(]+\(([^)]*)\)$/,"$1");var c=V1===void 0||V1==="[arguments not available]"?void 0:V1.split(",");return new F({functionName:T,args:c,fileName:h[0],lineNumber:h[1],columnNumber:h[2],source:P})},this)}}})},172:(C)=>{function W(a1){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")W=function f1(r){return typeof r};else W=function f1(r){return r&&typeof Symbol==="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r};return W(a1)}var w="Expected a function",B=NaN,A="[object Symbol]",V=/^\s+|\s+$/g,X=/^[-+]0x[0-9a-f]+$/i,_=/^0b[01]+$/i,F=/^0o[0-7]+$/i,g=parseInt,J=(typeof global==="undefined"?"undefined":W(global))=="object"&&global&&global.Object===Object&&global,K=(typeof self==="undefined"?"undefined":W(self))=="object"&&self&&self.Object===Object&&self,Q=J||K||Function("return this")(),E=Object.prototype,S=E.toString,P=Math.max,$=Math.min,h=function a1(){return Q.Date.now()};function O(a1,f1,r){var A1,m1,T1,e1,F0,P0,B0=0,a0=!1,e=!1,G0=!0;if(typeof a1!="function")throw new TypeError(w);if(f1=o1(f1)||0,V1(r))a0=!!r.leading,e="maxWait"in r,T1=e?P(o1(r.maxWait)||0,f1):T1,G0="trailing"in r?!!r.trailing:G0;function H1(F1){var O1=A1,K1=m1;return A1=m1=void 0,B0=F1,e1=a1.apply(K1,O1),e1}function j1(F1){return B0=F1,F0=setTimeout(k,f1),a0?H1(F1):e1}function i1(F1){var O1=F1-P0,K1=F1-B0,R1=f1-O1;return e?$(R1,T1-K1):R1}function E0(F1){var O1=F1-P0,K1=F1-B0;return P0===void 0||O1>=f1||O1<0||e&&K1>=T1}function k(){var F1=h();if(E0(F1))return a(F1);F0=setTimeout(k,i1(F1))}function a(F1){if(F0=void 0,G0&&A1)return H1(F1);return A1=m1=void 0,e1}function Z1(){if(F0!==void 0)clearTimeout(F0);B0=0,A1=P0=m1=F0=void 0}function Q1(){return F0===void 0?e1:a(h())}function N1(){var F1=h(),O1=E0(F1);if(A1=arguments,m1=this,P0=F1,O1){if(F0===void 0)return j1(P0);if(e)return F0=setTimeout(k,f1),H1(P0)}if(F0===void 0)F0=setTimeout(k,f1);return e1}return N1.cancel=Z1,N1.flush=Q1,N1}function T(a1,f1,r){var A1=!0,m1=!0;if(typeof a1!="function")throw new TypeError(w);if(V1(r))A1="leading"in r?!!r.leading:A1,m1="trailing"in r?!!r.trailing:m1;return O(a1,f1,{leading:A1,maxWait:f1,trailing:m1})}function V1(a1){var f1=W(a1);return!!a1&&(f1=="object"||f1=="function")}function c(a1){return!!a1&&W(a1)=="object"}function c1(a1){return W(a1)=="symbol"||c(a1)&&S.call(a1)==A}function o1(a1){if(typeof a1=="number")return a1;if(c1(a1))return B;if(V1(a1)){var f1=typeof a1.valueOf=="function"?a1.valueOf():a1;a1=V1(f1)?f1+"":f1}if(typeof a1!="string")return a1===0?a1:+a1;a1=a1.replace(V,"");var r=_.test(a1);return r||F.test(a1)?g(a1.slice(2),r?2:8):X.test(a1)?B:+a1}C.exports=T},730:(C,W,w)=>{var B=w(169);C.exports=T;var A=w(307),V=w(82),X=w(695),_=typeof Symbol==="function"&&B.env._nodeLRUCacheForceNoSymbol!=="1",F;if(_)F=function r(A1){return Symbol(A1)};else F=function r(A1){return"_"+A1};var g=F("max"),J=F("length"),K=F("lengthCalculator"),Q=F("allowStale"),E=F("maxAge"),S=F("dispose"),P=F("noDisposeOnSet"),$=F("lruList"),h=F("cache");function O(){return 1}function T(r){if(!(this instanceof T))return new T(r);if(typeof r==="number")r={max:r};if(!r)r={};var A1=this[g]=r.max;if(!A1||typeof A1!=="number"||A1<=0)this[g]=1/0;var m1=r.length||O;if(typeof m1!=="function")m1=O;this[K]=m1,this[Q]=r.stale||!1,this[E]=r.maxAge||0,this[S]=r.dispose,this[P]=r.noDisposeOnSet||!1,this.reset()}Object.defineProperty(T.prototype,"max",{set:function r(A1){if(!A1||typeof A1!=="number"||A1<=0)A1=1/0;this[g]=A1,o1(this)},get:function r(){return this[g]},enumerable:!0}),Object.defineProperty(T.prototype,"allowStale",{set:function r(A1){this[Q]=!!A1},get:function r(){return this[Q]},enumerable:!0}),Object.defineProperty(T.prototype,"maxAge",{set:function r(A1){if(!A1||typeof A1!=="number"||A1<0)A1=0;this[E]=A1,o1(this)},get:function r(){return this[E]},enumerable:!0}),Object.defineProperty(T.prototype,"lengthCalculator",{set:function r(A1){if(typeof A1!=="function")A1=O;if(A1!==this[K])this[K]=A1,this[J]=0,this[$].forEach(function(m1){m1.length=this[K](m1.value,m1.key),this[J]+=m1.length},this);o1(this)},get:function r(){return this[K]},enumerable:!0}),Object.defineProperty(T.prototype,"length",{get:function r(){return this[J]},enumerable:!0}),Object.defineProperty(T.prototype,"itemCount",{get:function r(){return this[$].length},enumerable:!0}),T.prototype.rforEach=function(r,A1){A1=A1||this;for(var m1=this[$].tail;m1!==null;){var T1=m1.prev;V1(this,r,m1,A1),m1=T1}};function V1(r,A1,m1,T1){var e1=m1.value;if(c1(r,e1)){if(a1(r,m1),!r[Q])e1=void 0}if(e1)A1.call(T1,e1.value,e1.key,r)}T.prototype.forEach=function(r,A1){A1=A1||this;for(var m1=this[$].head;m1!==null;){var T1=m1.next;V1(this,r,m1,A1),m1=T1}},T.prototype.keys=function(){return this[$].toArray().map(function(r){return r.key},this)},T.prototype.values=function(){return this[$].toArray().map(function(r){return r.value},this)},T.prototype.reset=function(){if(this[S]&&this[$]&&this[$].length)this[$].forEach(function(r){this[S](r.key,r.value)},this);this[h]=new A,this[$]=new X,this[J]=0},T.prototype.dump=function(){return this[$].map(function(r){if(!c1(this,r))return{k:r.key,v:r.value,e:r.now+(r.maxAge||0)}},this).toArray().filter(function(r){return r})},T.prototype.dumpLru=function(){return this[$]},T.prototype.inspect=function(r,A1){var m1="LRUCache {",T1=!1,e1=this[Q];if(e1)m1+=` + allowStale: true`,T1=!0;var F0=this[g];if(F0&&F0!==1/0){if(T1)m1+=",";m1+=` + max: `+V.inspect(F0,A1),T1=!0}var P0=this[E];if(P0){if(T1)m1+=",";m1+=` + maxAge: `+V.inspect(P0,A1),T1=!0}var B0=this[K];if(B0&&B0!==O){if(T1)m1+=",";m1+=` + length: `+V.inspect(this[J],A1),T1=!0}var a0=!1;if(this[$].forEach(function(e){if(a0)m1+=`, + `;else{if(T1)m1+=`, +`;a0=!0,m1+=` + `}var G0=V.inspect(e.key).split(` +`).join(` + `),H1={value:e.value};if(e.maxAge!==P0)H1.maxAge=e.maxAge;if(B0!==O)H1.length=e.length;if(c1(this,e))H1.stale=!0;H1=V.inspect(H1,A1).split(` +`).join(` + `),m1+=G0+" => "+H1}),a0||T1)m1+=` +`;return m1+="}",m1},T.prototype.set=function(r,A1,m1){m1=m1||this[E];var T1=m1?Date.now():0,e1=this[K](A1,r);if(this[h].has(r)){if(e1>this[g])return a1(this,this[h].get(r)),!1;var F0=this[h].get(r),P0=F0.value;if(this[S]){if(!this[P])this[S](r,P0.value)}return P0.now=T1,P0.maxAge=m1,P0.value=A1,this[J]+=e1-P0.length,P0.length=e1,this.get(r),o1(this),!0}var B0=new f1(r,A1,e1,T1,m1);if(B0.length>this[g]){if(this[S])this[S](r,A1);return!1}return this[J]+=B0.length,this[$].unshift(B0),this[h].set(r,this[$].head),o1(this),!0},T.prototype.has=function(r){if(!this[h].has(r))return!1;var A1=this[h].get(r).value;if(c1(this,A1))return!1;return!0},T.prototype.get=function(r){return c(this,r,!0)},T.prototype.peek=function(r){return c(this,r,!1)},T.prototype.pop=function(){var r=this[$].tail;if(!r)return null;return a1(this,r),r.value},T.prototype.del=function(r){a1(this,this[h].get(r))},T.prototype.load=function(r){this.reset();var A1=Date.now();for(var m1=r.length-1;m1>=0;m1--){var T1=r[m1],e1=T1.e||0;if(e1===0)this.set(T1.k,T1.v);else{var F0=e1-A1;if(F0>0)this.set(T1.k,T1.v,F0)}}},T.prototype.prune=function(){var r=this;this[h].forEach(function(A1,m1){c(r,m1,!1)})};function c(r,A1,m1){var T1=r[h].get(A1);if(T1){var e1=T1.value;if(c1(r,e1)){if(a1(r,T1),!r[Q])e1=void 0}else if(m1)r[$].unshiftNode(T1);if(e1)e1=e1.value}return e1}function c1(r,A1){if(!A1||!A1.maxAge&&!r[E])return!1;var m1=!1,T1=Date.now()-A1.now;if(A1.maxAge)m1=T1>A1.maxAge;else m1=r[E]&&T1>r[E];return m1}function o1(r){if(r[J]>r[g])for(var A1=r[$].tail;r[J]>r[g]&&A1!==null;){var m1=A1.prev;a1(r,A1),A1=m1}}function a1(r,A1){if(A1){var m1=A1.value;if(r[S])r[S](m1.key,m1.value);r[J]-=m1.length,r[h].delete(m1.key),r[$].removeNode(A1)}}function f1(r,A1,m1,T1,e1){this.key=r,this.value=A1,this.length=m1,this.now=T1,this.maxAge=e1||0}},169:(C)=>{var W=C.exports={},w,B;function A(){throw new Error("setTimeout has not been defined")}function V(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function")w=setTimeout;else w=A}catch($){w=A}try{if(typeof clearTimeout==="function")B=clearTimeout;else B=V}catch($){B=V}})();function X($){if(w===setTimeout)return setTimeout($,0);if((w===A||!w)&&setTimeout)return w=setTimeout,setTimeout($,0);try{return w($,0)}catch(h){try{return w.call(null,$,0)}catch(O){return w.call(this,$,0)}}}function _($){if(B===clearTimeout)return clearTimeout($);if((B===V||!B)&&clearTimeout)return B=clearTimeout,clearTimeout($);try{return B($)}catch(h){try{return B.call(null,$)}catch(O){return B.call(this,$)}}}var F=[],g=!1,J,K=-1;function Q(){if(!g||!J)return;if(g=!1,J.length)F=J.concat(F);else K=-1;if(F.length)E()}function E(){if(g)return;var $=X(Q);g=!0;var h=F.length;while(h){J=F,F=[];while(++K1)for(var O=1;O{var B=w(169);if(B.env.npm_package_name==="pseudomap"&&B.env.npm_lifecycle_script==="test")B.env.TEST_PSEUDOMAP="true";if(typeof Map==="function"&&!B.env.TEST_PSEUDOMAP)C.exports=Map;else C.exports=w(761)},761:(C)=>{var W=Object.prototype.hasOwnProperty;C.exports=w;function w(_){if(!(this instanceof w))throw new TypeError("Constructor PseudoMap requires 'new'");if(this.clear(),_)if(_ instanceof w||typeof Map==="function"&&_ instanceof Map)_.forEach(function(F,g){this.set(g,F)},this);else if(Array.isArray(_))_.forEach(function(F){this.set(F[0],F[1])},this);else throw new TypeError("invalid argument")}w.prototype.forEach=function(_,F){F=F||this,Object.keys(this._data).forEach(function(g){if(g!=="size")_.call(F,this._data[g].value,this._data[g].key)},this)},w.prototype.has=function(_){return!!V(this._data,_)},w.prototype.get=function(_){var F=V(this._data,_);return F&&F.value},w.prototype.set=function(_,F){X(this._data,_,F)},w.prototype.delete=function(_){var F=V(this._data,_);if(F)delete this._data[F._index],this._data.size--},w.prototype.clear=function(){var _=Object.create(null);_.size=0,Object.defineProperty(this,"_data",{value:_,enumerable:!1,configurable:!0,writable:!1})},Object.defineProperty(w.prototype,"size",{get:function _(){return this._data.size},set:function _(F){},enumerable:!0,configurable:!0}),w.prototype.values=w.prototype.keys=w.prototype.entries=function(){throw new Error("iterators are not implemented in this version")};function B(_,F){return _===F||_!==_&&F!==F}function A(_,F,g){this.key=_,this.value=F,this._index=g}function V(_,F){for(var g=0,J="_"+F,K=J;W.call(_,K);K=J+g++)if(B(_[K].key,F))return _[K]}function X(_,F,g){for(var J=0,K="_"+F,Q=K;W.call(_,Q);Q=K+J++)if(B(_[Q].key,F)){_[Q].value=g;return}_.size++,_[Q]=new A(F,g,Q)}},430:function(C,W){var w,B,A;function V(X){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")V=function _(F){return typeof F};else V=function _(F){return F&&typeof Symbol==="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F};return V(X)}(function(X,_){B=[],w=_,A=typeof w==="function"?w.apply(W,B):w,A!==void 0&&(C.exports=A)})(this,function(){function X(O){return!isNaN(parseFloat(O))&&isFinite(O)}function _(O){return O.charAt(0).toUpperCase()+O.substring(1)}function F(O){return function(){return this[O]}}var g=["isConstructor","isEval","isNative","isToplevel"],J=["columnNumber","lineNumber"],K=["fileName","functionName","source"],Q=["args"],E=g.concat(J,K,Q);function S(O){if(!O)return;for(var T=0;T{if(typeof Object.create==="function")C.exports=function W(w,B){w.super_=B,w.prototype=Object.create(B.prototype,{constructor:{value:w,enumerable:!1,writable:!0,configurable:!0}})};else C.exports=function W(w,B){w.super_=B;var A=function V(){};A.prototype=B.prototype,w.prototype=new A,w.prototype.constructor=w}},715:(C)=>{function W(w){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")W=function B(A){return typeof A};else W=function B(A){return A&&typeof Symbol==="function"&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A};return W(w)}C.exports=function w(B){return B&&W(B)==="object"&&typeof B.copy==="function"&&typeof B.fill==="function"&&typeof B.readUInt8==="function"}},82:(C,W,w)=>{var B=w(169);function A(H1){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")A=function j1(i1){return typeof i1};else A=function j1(i1){return i1&&typeof Symbol==="function"&&i1.constructor===Symbol&&i1!==Symbol.prototype?"symbol":typeof i1};return A(H1)}var V=/%[sdj%]/g;W.format=function(H1){if(!o1(H1)){var j1=[];for(var i1=0;i1=k)return Q1;switch(Q1){case"%s":return String(E0[i1++]);case"%d":return Number(E0[i1++]);case"%j":try{return JSON.stringify(E0[i1++])}catch(N1){return"[Circular]"}default:return Q1}});for(var Z1=E0[i1];i1=3)i1.depth=arguments[2];if(arguments.length>=4)i1.colors=arguments[3];if(T(j1))i1.showHidden=j1;else if(j1)W._extend(i1,j1);if(f1(i1.showHidden))i1.showHidden=!1;if(f1(i1.depth))i1.depth=2;if(f1(i1.colors))i1.colors=!1;if(f1(i1.customInspect))i1.customInspect=!0;if(i1.colors)i1.stylize=g;return Q(i1,H1,i1.depth)}W.inspect=F,F.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},F.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function g(H1,j1){var i1=F.styles[j1];if(i1)return"\x1B["+F.colors[i1][0]+"m"+H1+"\x1B["+F.colors[i1][1]+"m";else return H1}function J(H1,j1){return H1}function K(H1){var j1={};return H1.forEach(function(i1,E0){j1[i1]=!0}),j1}function Q(H1,j1,i1){if(H1.customInspect&&j1&&e1(j1.inspect)&&j1.inspect!==W.inspect&&!(j1.constructor&&j1.constructor.prototype===j1)){var E0=j1.inspect(i1,H1);if(!o1(E0))E0=Q(H1,E0,i1);return E0}var k=E(H1,j1);if(k)return k;var a=Object.keys(j1),Z1=K(a);if(H1.showHidden)a=Object.getOwnPropertyNames(j1);if(T1(j1)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return S(j1);if(a.length===0){if(e1(j1)){var Q1=j1.name?": "+j1.name:"";return H1.stylize("[Function"+Q1+"]","special")}if(r(j1))return H1.stylize(RegExp.prototype.toString.call(j1),"regexp");if(m1(j1))return H1.stylize(Date.prototype.toString.call(j1),"date");if(T1(j1))return S(j1)}var N1="",F1=!1,O1=["{","}"];if(O(j1))F1=!0,O1=["[","]"];if(e1(j1)){var K1=j1.name?": "+j1.name:"";N1=" [Function"+K1+"]"}if(r(j1))N1=" "+RegExp.prototype.toString.call(j1);if(m1(j1))N1=" "+Date.prototype.toUTCString.call(j1);if(T1(j1))N1=" "+S(j1);if(a.length===0&&(!F1||j1.length==0))return O1[0]+N1+O1[1];if(i1<0)if(r(j1))return H1.stylize(RegExp.prototype.toString.call(j1),"regexp");else return H1.stylize("[Object]","special");H1.seen.push(j1);var R1;if(F1)R1=P(H1,j1,i1,Z1,a);else R1=a.map(function(h1){return $(H1,j1,i1,Z1,h1,F1)});return H1.seen.pop(),h(R1,N1,O1)}function E(H1,j1){if(f1(j1))return H1.stylize("undefined","undefined");if(o1(j1)){var i1="'"+JSON.stringify(j1).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return H1.stylize(i1,"string")}if(c1(j1))return H1.stylize(""+j1,"number");if(T(j1))return H1.stylize(""+j1,"boolean");if(V1(j1))return H1.stylize("null","null")}function S(H1){return"["+Error.prototype.toString.call(H1)+"]"}function P(H1,j1,i1,E0,k){var a=[];for(var Z1=0,Q1=j1.length;Z1-1)if(a)Q1=Q1.split(` +`).map(function(F1){return" "+F1}).join(` +`).substr(2);else Q1=` +`+Q1.split(` +`).map(function(F1){return" "+F1}).join(` +`)}else Q1=H1.stylize("[Circular]","special");if(f1(Z1)){if(a&&k.match(/^\d+$/))return Q1;if(Z1=JSON.stringify(""+k),Z1.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/))Z1=Z1.substr(1,Z1.length-2),Z1=H1.stylize(Z1,"name");else Z1=Z1.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),Z1=H1.stylize(Z1,"string")}return Z1+": "+Q1}function h(H1,j1,i1){var E0=0,k=H1.reduce(function(a,Z1){if(E0++,Z1.indexOf(` +`)>=0)E0++;return a+Z1.replace(/\u001b\[\d\d?m/g,"").length+1},0);if(k>60)return i1[0]+(j1===""?"":j1+` + `)+" "+H1.join(`, + `)+" "+i1[1];return i1[0]+j1+" "+H1.join(", ")+" "+i1[1]}function O(H1){return Array.isArray(H1)}W.isArray=O;function T(H1){return typeof H1==="boolean"}W.isBoolean=T;function V1(H1){return H1===null}W.isNull=V1;function c(H1){return H1==null}W.isNullOrUndefined=c;function c1(H1){return typeof H1==="number"}W.isNumber=c1;function o1(H1){return typeof H1==="string"}W.isString=o1;function a1(H1){return A(H1)==="symbol"}W.isSymbol=a1;function f1(H1){return H1===void 0}W.isUndefined=f1;function r(H1){return A1(H1)&&P0(H1)==="[object RegExp]"}W.isRegExp=r;function A1(H1){return A(H1)==="object"&&H1!==null}W.isObject=A1;function m1(H1){return A1(H1)&&P0(H1)==="[object Date]"}W.isDate=m1;function T1(H1){return A1(H1)&&(P0(H1)==="[object Error]"||H1 instanceof Error)}W.isError=T1;function e1(H1){return typeof H1==="function"}W.isFunction=e1;function F0(H1){return H1===null||typeof H1==="boolean"||typeof H1==="number"||typeof H1==="string"||A(H1)==="symbol"||typeof H1==="undefined"}W.isPrimitive=F0,W.isBuffer=w(715);function P0(H1){return Object.prototype.toString.call(H1)}function B0(H1){return H1<10?"0"+H1.toString(10):H1.toString(10)}var a0=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function e(){var H1=new Date,j1=[B0(H1.getHours()),B0(H1.getMinutes()),B0(H1.getSeconds())].join(":");return[H1.getDate(),a0[H1.getMonth()],j1].join(" ")}W.log=function(){console.log("%s - %s",e(),W.format.apply(W,arguments))},W.inherits=w(718),W._extend=function(H1,j1){if(!j1||!A1(j1))return H1;var i1=Object.keys(j1),E0=i1.length;while(E0--)H1[i1[E0]]=j1[i1[E0]];return H1};function G0(H1,j1){return Object.prototype.hasOwnProperty.call(H1,j1)}},695:(C)=>{C.exports=W,W.Node=A,W.create=W;function W(V){var X=this;if(!(X instanceof W))X=new W;if(X.tail=null,X.head=null,X.length=0,V&&typeof V.forEach==="function")V.forEach(function(g){X.push(g)});else if(arguments.length>0)for(var _=0,F=arguments.length;_1)_=X;else if(this.head)F=this.head.next,_=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var g=0;F!==null;g++)_=V(_,F.value,g),F=F.next;return _},W.prototype.reduceReverse=function(V,X){var _,F=this.tail;if(arguments.length>1)_=X;else if(this.tail)F=this.tail.prev,_=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var g=this.length-1;F!==null;g--)_=V(_,F.value,g),F=F.prev;return _},W.prototype.toArray=function(){var V=new Array(this.length);for(var X=0,_=this.head;_!==null;X++)V[X]=_.value,_=_.next;return V},W.prototype.toArrayReverse=function(){var V=new Array(this.length);for(var X=0,_=this.tail;_!==null;X++)V[X]=_.value,_=_.prev;return V},W.prototype.slice=function(V,X){if(X=X||this.length,X<0)X+=this.length;if(V=V||0,V<0)V+=this.length;var _=new W;if(Xthis.length)X=this.length;for(var F=0,g=this.head;g!==null&&Fthis.length)X=this.length;for(var F=this.length,g=this.tail;g!==null&&F>X;F--)g=g.prev;for(;g!==null&&F>V;F--,g=g.prev)_.push(g.value);return _},W.prototype.reverse=function(){var V=this.head,X=this.tail;for(var _=V;_!==null;_=_.prev){var F=_.prev;_.prev=_.next,_.next=F}return this.head=X,this.tail=V,this};function w(V,X){if(V.tail=new A(X,V.tail,null,V),!V.head)V.head=V.tail;V.length++}function B(V,X){if(V.head=new A(X,null,V.head,V),!V.tail)V.tail=V.head;V.length++}function A(V,X,_,F){if(!(this instanceof A))return new A(V,X,_,F);if(this.list=F,this.value=V,X)X.next=this,this.prev=X;else this.prev=null;if(_)_.prev=this,this.next=_;else this.next=null}}},d={};function G(C){var W=d[C];if(W!==void 0)return W.exports;var w=d[C]={exports:{}};return I[C].call(w.exports,w,w.exports,G),w.exports}(()=>{G.n=(C)=>{var W=C&&C.__esModule?()=>C.default:()=>C;return G.d(W,{a:W}),W}})(),(()=>{G.d=(C,W)=>{for(var w in W)if(G.o(W,w)&&!G.o(C,w))Object.defineProperty(C,w,{enumerable:!0,get:W[w]})}})(),(()=>{G.o=(C,W)=>Object.prototype.hasOwnProperty.call(C,W)})(),(()=>{G.r=(C)=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag)Object.defineProperty(C,Symbol.toStringTag,{value:"Module"});Object.defineProperty(C,"__esModule",{value:!0})}})();var Z={};return(()=>{G.r(Z),G.d(Z,{connectToDevTools:()=>j5});function C(N,R){if(!(N instanceof R))throw new TypeError("Cannot call a class as a function")}function W(N,R){for(var f=0;f1?v-1:0),C1=1;C1=0)v.splice(m,1)}}}]),N}(),V=G(172),X=G.n(V),_="fmkadmapgofadopljbjfkapdkoienihi",F="dnjnjgbfilfphmojnmhliehogmojhclc",g="ikiahnapldjmdmpkmfhjdjilojjhgcbf",J=!1,K=!1,Q=1,E=2,S=3,P=4,$=5,h=6,O=7,T=1,V1=2,c="React::DevTools::defaultTab",c1="React::DevTools::componentFilters",o1="React::DevTools::lastSelection",a1="React::DevTools::openInEditorUrl",f1="React::DevTools::openInEditorUrlPreset",r="React::DevTools::parseHookNames",A1="React::DevTools::recordChangeDescriptions",m1="React::DevTools::reloadAndProfile",T1="React::DevTools::breakOnConsoleErrors",e1="React::DevTools::theme",F0="React::DevTools::appendComponentStack",P0="React::DevTools::showInlineWarningsAndErrors",B0="React::DevTools::traceUpdatesEnabled",a0="React::DevTools::hideConsoleLogsInStrictMode",e="React::DevTools::supportsProfiling",G0=5;function H1(N){try{return localStorage.getItem(N)}catch(R){return null}}function j1(N){try{localStorage.removeItem(N)}catch(R){}}function i1(N,R){try{return localStorage.setItem(N,R)}catch(f){}}function E0(N){try{return sessionStorage.getItem(N)}catch(R){return null}}function k(N){try{sessionStorage.removeItem(N)}catch(R){}}function a(N,R){try{return sessionStorage.setItem(N,R)}catch(f){}}var Z1=function N(R,f){return R===f};function Q1(N){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Z1,f=void 0,U=[],v=void 0,m=!1,C1=function x(X1,q1){return R(X1,U[q1])},w1=function x(){for(var X1=arguments.length,q1=Array(X1),P1=0;P1m.length){var C1=this.rects.pop();C1.remove()}if(m.length===0)return;while(this.rects.lengthR.left+R.width)w1=R.left+R.width-v-m;return C1+="px",w1+="px",{style:{top:C1,left:w1}}}function s0(N,R,f){L1(f.style,{borderTopWidth:N[R+"Top"]+"px",borderLeftWidth:N[R+"Left"]+"px",borderRightWidth:N[R+"Right"]+"px",borderBottomWidth:N[R+"Bottom"]+"px",borderStyle:"solid"})}var P2={background:"rgba(120, 170, 210, 0.7)",padding:"rgba(77, 200, 0, 0.3)",margin:"rgba(255, 155, 0, 0.3)",border:"rgba(255, 200, 50, 0.3)"},a5=2000,n0=null,B2=null;function A2(N){if(window.document==null){N.emit("hideNativeHighlight");return}if(n0=null,B2!==null)B2.remove(),B2=null}function B4(N,R,f,U){if(window.document==null){if(N!=null&&N[0]!=null)f.emit("showNativeHighlight",N[0]);return}if(n0!==null)clearTimeout(n0);if(N==null)return;if(B2===null)B2=new k0(f);if(B2.inspect(N,R),U)n0=setTimeout(function(){return A2(f)},a5)}var A4=new Set;function _5(N,R){N.addListener("clearNativeElementHighlight",C1),N.addListener("highlightNativeElement",w1),N.addListener("shutdown",v),N.addListener("startInspectingNative",f),N.addListener("stopInspectingNative",v);function f(){U(window)}function U(x0){if(x0&&typeof x0.addEventListener==="function")x0.addEventListener("click",x,!0),x0.addEventListener("mousedown",X1,!0),x0.addEventListener("mouseover",X1,!0),x0.addEventListener("mouseup",X1,!0),x0.addEventListener("pointerdown",q1,!0),x0.addEventListener("pointermove",b1,!0),x0.addEventListener("pointerup",f0,!0);else R.emit("startInspectingNative")}function v(){A2(R),m(window),A4.forEach(function(x0){try{m(x0.contentWindow)}catch(b2){}}),A4=new Set}function m(x0){if(x0&&typeof x0.removeEventListener==="function")x0.removeEventListener("click",x,!0),x0.removeEventListener("mousedown",X1,!0),x0.removeEventListener("mouseover",X1,!0),x0.removeEventListener("mouseup",X1,!0),x0.removeEventListener("pointerdown",q1,!0),x0.removeEventListener("pointermove",b1,!0),x0.removeEventListener("pointerup",f0,!0);else R.emit("stopInspectingNative")}function C1(){A2(R)}function w1(x0){var{displayName:b2,hideAfterTimeout:R4,id:U5,openNativeElementsPanel:V2,rendererID:g5,scrollIntoView:o5}=x0,Z5=R.rendererInterfaces[g5];if(Z5==null){console.warn('Invalid renderer id "'.concat(g5,'" for element "').concat(U5,'"')),A2(R);return}if(!Z5.hasFiberWithId(U5)){A2(R);return}var w9=Z5.findNativeNodesForFiberID(U5);if(w9!=null&&w9[0]!=null){var e5=w9[0];if(o5&&typeof e5.scrollIntoView==="function")e5.scrollIntoView({block:"nearest",inline:"nearest"});if(B4(w9,b2,R,R4),V2)window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$0=e5,N.send("syncSelectionToNativeElementsPanel")}else A2(R)}function x(x0){x0.preventDefault(),x0.stopPropagation(),v(),N.send("stopInspectingNative",!0)}function X1(x0){x0.preventDefault(),x0.stopPropagation()}function q1(x0){x0.preventDefault(),x0.stopPropagation(),e0(U2(x0))}var P1=null;function b1(x0){x0.preventDefault(),x0.stopPropagation();var b2=U2(x0);if(P1===b2)return;if(P1=b2,b2.tagName==="IFRAME"){var R4=b2;try{if(!A4.has(R4)){var U5=R4.contentWindow;U(U5),A4.add(R4)}}catch(V2){}}B4([b2],null,R,!1),e0(b2)}function f0(x0){x0.preventDefault(),x0.stopPropagation()}var e0=X()(Q1(function(x0){var b2=R.getIDForNode(x0);if(b2!==null)N.send("selectFiber",b2)}),200,{leading:!1});function U2(x0){if(x0.composed)return x0.composedPath()[0];return x0.target}}var D5="#f0f0f0",tZ=["#37afa9","#63b19e","#80b393","#97b488","#abb67d","#beb771","#cfb965","#dfba57","#efbb49","#febc38"],T6=null;function pB(N,R){if(window.document==null){var f=[];iB(N,function(m,C1,w1){f.push({node:w1,color:C1})}),R.emit("drawTraceUpdates",f);return}if(T6===null)IC();var U=T6;U.width=window.innerWidth,U.height=window.innerHeight;var v=U.getContext("2d");v.clearRect(0,0,U.width,U.height),iB(N,function(m,C1){if(m!==null)X3(v,m,C1)})}function iB(N,R){N.forEach(function(f,U){var{count:v,rect:m}=f,C1=Math.min(tZ.length-1,v-1),w1=tZ[C1];R(m,w1,U)})}function X3(N,R,f){var{height:U,left:v,top:m,width:C1}=R;N.lineWidth=1,N.strokeStyle=D5,N.strokeRect(v-1,m-1,C1+2,U+2),N.lineWidth=1,N.strokeStyle=D5,N.strokeRect(v+1,m+1,C1-1,U-1),N.strokeStyle=f,N.setLineDash([0]),N.lineWidth=1,N.strokeRect(v,m,C1-1,U-1),N.setLineDash([0])}function Nd(N){if(window.document==null){N.emit("disableTraceUpdates");return}if(T6!==null){if(T6.parentNode!=null)T6.parentNode.removeChild(T6);T6=null}}function IC(){T6=window.document.createElement("canvas"),T6.style.cssText=` + xx-background-color: red; + xx-opacity: 0.5; + bottom: 0; + left: 0; + pointer-events: none; + position: fixed; + right: 0; + top: 0; + z-index: 1000000000; + `;var N=window.document.documentElement;N.insertBefore(T6,N.firstChild)}function Y3(N){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")Y3=function R(f){return typeof f};else Y3=function R(f){return f&&typeof Symbol==="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};return Y3(N)}var zd=250,Qd=3000,QG=250,fG=(typeof performance==="undefined"?"undefined":Y3(performance))==="object"&&typeof performance.now==="function"?function(){return performance.now()}:function(){return Date.now()},X7=new Map,vI=null,i7=null,fd=!1,Y7=null;function nB(N){vI=N,vI.addListener("traceUpdates",rB)}function qd(N){if(fd=N,!fd){if(X7.clear(),i7!==null)cancelAnimationFrame(i7),i7=null;if(Y7!==null)clearTimeout(Y7),Y7=null;Nd(vI)}}function rB(N){if(!fd)return;if(N.forEach(function(R){var f=X7.get(R),U=fG(),v=f!=null?f.lastMeasuredAt:0,m=f!=null?f.rect:null;if(m===null||v+QGN.length)R=N.length;for(var f=0,U=new Array(R);f=~^]+)/),v=U?U[1]:"=";if(v!=="^"&&v!=="~")return OW(R,f,v);var m=S1(R),C1=qG(m,5),w1=C1[0],x=C1[1],X1=C1[2],q1=C1[4],P1=S1(f),b1=qG(P1,5),f0=b1[0],e0=b1[1],U2=b1[2],x0=b1[4],b2=[w1,x,X1],R4=[f0,e0!==null&&e0!==void 0?e0:"x",U2!==null&&U2!==void 0?U2:"x"];if(x0){if(!q1)return!1;if(w0(b2,R4)!==0)return!1;if(w0(q1.split("."),x0.split("."))===-1)return!1}var U5=R4.findIndex(function(g5){return g5!=="0"})+1,V2=v==="~"?2:U5>1?U5:1;if(w0(b2.slice(0,V2),R4.slice(0,V2))!==0)return!1;if(w0(b2.slice(V2),R4.slice(V2))===-1)return!1;return!0},o=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,S1=function N(R){if(typeof R!=="string")throw new TypeError("Invalid argument expected string");var f=R.match(o);if(!f)throw new Error("Invalid argument not valid semver ('".concat(R,"' received)"));return f.shift(),f},p1=function N(R){return R==="*"||R==="x"||R==="X"},l1=function N(R){var f=parseInt(R,10);return isNaN(f)?R:f},s1=function N(R,f){return v8(R)!==v8(f)?[String(R),String(f)]:[R,f]},U0=function N(R,f){if(p1(R)||p1(f))return 0;var U=s1(l1(R),l1(f)),v=qG(U,2),m=v[0],C1=v[1];if(m>C1)return 1;if(m":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},W0=Object.keys(J0),g0=function N(R){if(typeof R!=="string")throw new TypeError("Invalid operator type, expected string but got ".concat(v8(R)));if(W0.indexOf(R)===-1)throw new Error("Invalid operator, expected one of ".concat(W0.join("|")))},c2=G(730),L2=G.n(c2),R2=G(550);function l(N){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")l=function R(f){return typeof f};else l=function R(f){return f&&typeof Symbol==="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};return l(N)}var _1=Symbol.for("react.element"),I1=Symbol.for("react.portal"),v1=Symbol.for("react.fragment"),y1=Symbol.for("react.strict_mode"),E1=Symbol.for("react.profiler"),Z0=Symbol.for("react.provider"),Q0=Symbol.for("react.context"),N0=Symbol.for("react.server_context"),$0=Symbol.for("react.forward_ref"),h0=Symbol.for("react.suspense"),g2=Symbol.for("react.suspense_list"),F4=Symbol.for("react.memo"),x4=Symbol.for("react.lazy"),c4=Symbol.for("react.scope"),W9=Symbol.for("react.debug_trace_mode"),u9=Symbol.for("react.offscreen"),e6=Symbol.for("react.legacy_hidden"),vd=Symbol.for("react.cache"),dC=Symbol.for("react.tracing_marker"),qX=Symbol.for("react.default_value"),RG=Symbol.for("react.memo_cache_sentinel"),HK=Symbol.for("react.postpone"),Ed=Symbol.iterator,$4="@@iterator";function oB(N){if(N===null||l(N)!=="object")return null;var R=Ed&&N[Ed]||N[$4];if(typeof R==="function")return R;return null}var E8=1,eB=2,UG=5,tB=6,n9=7,mW=8,Md=9,JU=10,FK=11,gK=12,vG=13,Ze=14,au=1,Sd=2,GC=3,JK=4,KU=1,su=Array.isArray;let EG=su;var Ld=G(169);function ZC(N){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol")ZC=function R(f){return typeof f};else ZC=function R(f){return f&&typeof Symbol==="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};return ZC(N)}function IA(N){return MI(N)||EI(N)||NK(N)||KK()}function KK(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function NK(N,R){if(!N)return;if(typeof N==="string")return CC(N,R);var f=Object.prototype.toString.call(N).slice(8,-1);if(f==="Object"&&N.constructor)f=N.constructor.name;if(f==="Map"||f==="Set")return Array.from(N);if(f==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f))return CC(N,R)}function EI(N){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(N))return Array.from(N)}function MI(N){if(Array.isArray(N))return CC(N)}function CC(N,R){if(R==null||R>N.length)R=N.length;for(var f=0,U=new Array(R);fR.toString())return 1;else if(R.toString()>N.toString())return-1;else return 0}function EH(N){var R=new Set,f=N,U=function v(){var m=[].concat(IA(Object.keys(f)),IA(Object.getOwnPropertySymbols(f))),C1=Object.getOwnPropertyDescriptors(f);m.forEach(function(w1){if(C1[w1].enumerable)R.add(w1)}),f=Object.getPrototypeOf(f)};while(f!=null)U();return R}function zK(N,R,f,U){var v=N.displayName;return v||"".concat(f,"(").concat(O6(R,U),")")}function O6(N){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",f=MG.get(N);if(f!=null)return f;var U=R;if(typeof N.displayName==="string")U=N.displayName;else if(typeof N.name==="string"&&N.name!=="")U=N.name;return MG.set(N,U),U}var LI=0;function K9(){return++LI}function MH(N){var R="";for(var f=0;f=0){var U=N.match(/[^()]+/g);if(U!=null)N=U.pop(),f=U}break;default:break}return[N,f]}function we(N,R){for(var f in N)if(!(f in R))return!0;for(var U in R)if(N[U]!==R[U])return!0;return!1}function M8(N,R){return R.reduce(function(f,U){if(f){if(SI.call(f,U))return f[U];if(typeof f[Symbol.iterator]==="function")return Array.from(f)[U]}return null},N)}function yH(N,R){var f=R.length,U=R[f-1];if(N!=null){var v=M8(N,R.slice(0,f-1));if(v)if(EG(v))v.splice(U,1);else delete v[U]}}function ZA(N,R,f){var U=R.length;if(N!=null){var v=M8(N,R.slice(0,U-1));if(v){var m=R[U-1],C1=f[U-1];if(v[C1]=v[m],EG(v))v.splice(m,1);else delete v[m]}}}function CA(N,R,f){var U=R.length,v=R[U-1];if(N!=null){var m=M8(N,R.slice(0,U-1));if(m)m[v]=f}}function WA(N){if(N===null)return"null";else if(N===void 0)return"undefined";if(R2.isElement(N))return"react_element";if(typeof HTMLElement!=="undefined"&&N instanceof HTMLElement)return"html_element";var R=ZC(N);switch(R){case"bigint":return"bigint";case"boolean":return"boolean";case"function":return"function";case"number":if(Number.isNaN(N))return"nan";else if(!Number.isFinite(N))return"infinity";else return"number";case"object":if(EG(N))return"array";else if(ArrayBuffer.isView(N))return SI.call(N.constructor,"BYTES_PER_ELEMENT")?"typed_array":"data_view";else if(N.constructor&&N.constructor.name==="ArrayBuffer")return"array_buffer";else if(typeof N[Symbol.iterator]==="function"){var f=N[Symbol.iterator]();if(!f);else return f===N?"opaque_iterator":"iterator"}else if(N.constructor&&N.constructor.name==="RegExp")return"regexp";else{var U=Object.prototype.toString.call(N);if(U==="[object Date]")return"date";else if(U==="[object HTMLAllCollection]")return"html_all_collection"}if(!fU(N))return"class_instance";return"object";case"string":return"string";case"symbol":return"symbol";case"undefined":if(Object.prototype.toString.call(N)==="[object HTMLAllCollection]")return"html_all_collection";return"undefined";default:return"unknown"}}function QK(N){var R=R2.typeOf(N);switch(R){case R2.ContextConsumer:return"ContextConsumer";case R2.ContextProvider:return"ContextProvider";case R2.ForwardRef:return"ForwardRef";case R2.Fragment:return"Fragment";case R2.Lazy:return"Lazy";case R2.Memo:return"Memo";case R2.Portal:return"Portal";case R2.Profiler:return"Profiler";case R2.StrictMode:return"StrictMode";case R2.Suspense:return"Suspense";case g2:return"SuspenseList";case dC:return"TracingMarker";default:var f=N.type;if(typeof f==="string")return f;else if(typeof f==="function")return O6(f,"Anonymous");else if(f!=null)return"NotImplementedInDevtools";else return"Element"}}var wA=50;function yI(N){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:wA;if(N.length>R)return N.slice(0,R)+"…";else return N}function z5(N,R){if(N!=null&&SI.call(N,H5.type))return R?N[H5.preview_long]:N[H5.preview_short];var f=WA(N);switch(f){case"html_element":return"<".concat(yI(N.tagName.toLowerCase())," />");case"function":return yI("ƒ ".concat(typeof N.name==="function"?"":N.name,"() {}"));case"string":return'"'.concat(N,'"');case"bigint":return yI(N.toString()+"n");case"regexp":return yI(N.toString());case"symbol":return yI(N.toString());case"react_element":return"<".concat(yI(QK(N)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(N.byteLength,")");case"data_view":return"DataView(".concat(N.buffer.byteLength,")");case"array":if(R){var U="";for(var v=0;v0)U+=", ";if(U+=z5(N[v],!1),U.length>wA)break}return"[".concat(yI(U),"]")}else{var m=SI.call(N,H5.size)?N[H5.size]:N.length;return"Array(".concat(m,")")}case"typed_array":var C1="".concat(N.constructor.name,"(").concat(N.length,")");if(R){var w1="";for(var x=0;x0)w1+=", ";if(w1+=N[x],w1.length>wA)break}return"".concat(C1," [").concat(yI(w1),"]")}else return C1;case"iterator":var X1=N.constructor.name;if(R){var q1=Array.from(N),P1="";for(var b1=0;b10)P1+=", ";if(EG(f0)){var e0=z5(f0[0],!0),U2=z5(f0[1],!1);P1+="".concat(e0," => ").concat(U2)}else P1+=z5(f0,!1);if(P1.length>wA)break}return"".concat(X1,"(").concat(N.size,") {").concat(yI(P1),"}")}else return"".concat(X1,"(").concat(N.size,")");case"opaque_iterator":return N[Symbol.toStringTag];case"date":return N.toString();case"class_instance":return N.constructor.name;case"object":if(R){var x0=Array.from(EH(N)).sort(ou),b2="";for(var R4=0;R40)b2+=", ";if(b2+="".concat(U5.toString(),": ").concat(z5(N[U5],!1)),b2.length>wA)break}return"{".concat(yI(b2),"}")}else return"{…}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return N;default:try{return yI(String(N))}catch(V2){return"unserializable"}}}var fU=function N(R){var f=Object.getPrototypeOf(R);if(!f)return!0;var U=Object.getPrototypeOf(f);return!U};function BA(N,R){var f=Object.keys(N);if(Object.getOwnPropertySymbols){var U=Object.getOwnPropertySymbols(N);if(R)U=U.filter(function(v){return Object.getOwnPropertyDescriptor(N,v).enumerable});f.push.apply(f,U)}return f}function PI(N){for(var R=1;R5&&arguments[5]!==void 0?arguments[5]:0,C1=WA(N),w1;switch(C1){case"html_element":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N.tagName,type:C1};case"function":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:typeof N.name==="function"||!N.name?"function":N.name,type:C1};case"string":if(w1=v(U),w1)return N;else return N.length<=500?N:N.slice(0,500)+"...";case"bigint":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N.toString(),type:C1};case"symbol":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N.toString(),type:C1};case"react_element":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:QK(N)||"Unknown",type:C1};case"array_buffer":case"data_view":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:C1==="data_view"?"DataView":"ArrayBuffer",size:N.byteLength,type:C1};case"array":if(w1=v(U),m>=PH&&!w1)return n7(C1,!0,N,R,U);return N.map(function(P1,b1){return $I(P1,R,f,U.concat([b1]),v,w1?1:m+1)});case"html_all_collection":case"typed_array":case"iterator":if(w1=v(U),m>=PH&&!w1)return n7(C1,!0,N,R,U);else{var x={unserializable:!0,type:C1,readonly:!0,size:C1==="typed_array"?N.length:void 0,preview_short:z5(N,!1),preview_long:z5(N,!0),name:!N.constructor||N.constructor.name==="Object"?"":N.constructor.name};return Array.from(N).forEach(function(P1,b1){return x[b1]=$I(P1,R,f,U.concat([b1]),v,w1?1:m+1)}),f.push(U),x}case"opaque_iterator":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N[Symbol.toStringTag],type:C1};case"date":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N.toString(),type:C1};case"regexp":return R.push(U),{inspectable:!1,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N.toString(),type:C1};case"object":if(w1=v(U),m>=PH&&!w1)return n7(C1,!0,N,R,U);else{var X1={};return EH(N).forEach(function(P1){var b1=P1.toString();X1[b1]=$I(N[P1],R,f,U.concat([b1]),v,w1?1:m+1)}),X1}case"class_instance":if(w1=v(U),m>=PH&&!w1)return n7(C1,!0,N,R,U);var q1={unserializable:!0,type:C1,readonly:!0,preview_short:z5(N,!1),preview_long:z5(N,!0),name:N.constructor.name};return EH(N).forEach(function(P1){var b1=P1.toString();q1[b1]=$I(N[P1],R,f,U.concat([b1]),v,w1?1:m+1)}),f.push(U),q1;case"infinity":case"nan":case"undefined":return R.push(U),{type:C1};default:return N}}function dT(N,R,f,U){var v=getInObject(N,f);if(v!=null){if(!v[H5.unserializable])delete v[H5.inspectable],delete v[H5.inspected],delete v[H5.name],delete v[H5.preview_long],delete v[H5.preview_short],delete v[H5.readonly],delete v[H5.size],delete v[H5.type]}if(U!==null&&R.unserializable.length>0){var m=R.unserializable[0],C1=m.length===f.length;for(var w1=0;w1N.length)R=N.length;for(var f=0,U=new Array(R);f2&&arguments[2]!==void 0?arguments[2]:[];if(N!==null){var U=[],v=[],m=$I(N,U,v,f,R);return{data:m,cleaned:U,unserializable:v}}else return null}function OH(N,R){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,U=R[f],v=wC(N)?N.slice():jW({},N);if(f+1===R.length)if(wC(v))v.splice(U,1);else delete v[U];else v[U]=OH(N[U],R,f+1);return v}function mH(N,R,f){var U=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,v=R[U],m=wC(N)?N.slice():jW({},N);if(U+1===R.length){var C1=f[U];if(m[C1]=m[v],wC(m))m.splice(v,1);else delete m[v]}else m[v]=mH(N[v],R,f,U+1);return m}function RX(N,R,f){var U=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if(U>=R.length)return f;var v=R[U],m=wC(N)?N.slice():jW({},N);return m[v]=RX(N[v],R,f,U+1),m}function RU(N){var R=null,f=null,U=N.current;if(U!=null){var v=U.stateNode;if(v!=null)R=v.effectDuration!=null?v.effectDuration:null,f=v.passiveEffectDuration!=null?v.passiveEffectDuration:null}return{effectDuration:R,passiveEffectDuration:f}}function kW(N){if(N===void 0)return"undefined";var R=new Set;return JSON.stringify(N,function(f,U){if(D7(U)==="object"&&U!==null){if(R.has(U))return;R.add(U)}if(typeof U==="bigint")return U.toString()+"n";return U},2)}function O9(N,R){if(N===void 0||N===null||N.length===0||typeof N[0]==="string"&&N[0].match(/([^%]|^)(%c)/g)||R===void 0)return N;var f=/([^%]|^)((%%)*)(%([oOdisf]))/g;if(typeof N[0]==="string"&&N[0].match(f))return["%c".concat(N[0]),R].concat($H(N.slice(1)));else{var U=N.reduce(function(v,m,C1){if(C1>0)v+=" ";switch(D7(m)){case"string":case"boolean":case"symbol":return v+="%s";case"number":var w1=Number.isInteger(m)?"%i":"%f";return v+=w1;default:return v+="%o"}},"%c");return[U,R].concat($H(N))}}function P3(N){for(var R=arguments.length,f=new Array(R>1?R-1:0),U=1;U0&&arguments[0]!==void 0?arguments[0]:"",R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return Ud(N,R)===1}function $d(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return Ud(N,R)>-1}var bH=G(987),UU=60111,V6="Symbol(react.concurrent_mode)",hH=60110,jH="Symbol(react.context)",vU="Symbol(react.server_context)",TI="Symbol(react.async_mode)",ud=60103,RK="Symbol(react.element)",CT=60129,WT="Symbol(react.debug_trace_mode)",wT=60112,BT="Symbol(react.forward_ref)",Ae=60107,Ve="Symbol(react.fragment)",Xe=60116,Ye="Symbol(react.lazy)",AT=60115,VT="Symbol(react.memo)",UK=60106,_e="Symbol(react.portal)",kH=60114,xH="Symbol(react.profiler)",vK=60109,cH="Symbol(react.provider)",XT=60119,YT="Symbol(react.scope)",EK=60108,MK="Symbol(react.strict_mode)",_T=60113,De="Symbol(react.suspense)",He=60120,Fe="Symbol(react.suspense_list)",QN1="Symbol(react.server_context.defaultValue)",EU=!1,fN1=!1,ge=!1,Je=!1;function DT(N,R){return N===R&&(N!==0||1/N===1/R)||N!==N&&R!==R}var HT=typeof Object.is==="function"?Object.is:DT;let SK=HT;var Ke=Object.prototype.hasOwnProperty;let Ne=Ke;var MU=new Map;function Td(N){var R=new Set,f={};return pH(N,R,f),{sources:Array.from(R).sort(),resolvedStyles:f}}function pH(N,R,f){if(N==null)return;if(EG(N))N.forEach(function(U){if(U==null)return;if(EG(U))pH(U,R,f);else iH(U,R,f)});else iH(N,R,f);f=Object.fromEntries(Object.entries(f).sort())}function iH(N,R,f){var U=Object.keys(N);U.forEach(function(v){var m=N[v];if(typeof m==="string")if(v===m)R.add(v);else{var C1=FT(m);if(C1!=null)f[v]=C1}else{var w1={};f[v]=w1,pH([m],R,w1)}})}function FT(N){if(MU.has(N))return MU.get(N);for(var R=0;R=1&&P1>=0&&x[q1]!==X1[P1])P1--;for(;q1>=1&&P1>=0;q1--,P1--)if(x[q1]!==X1[P1]){if(q1!==1||P1!==1)do if(q1--,P1--,P1<0||x[q1]!==X1[P1]){var b1=` +`+x[q1].replace(" at new "," at ");return b1}while(q1>=1&&P1>=0);break}}}finally{rH=!1,Error.prepareStackTrace=m,f.current=C1,TU()}var f0=N?N.displayName||N.name:"",e0=f0?LG(f0):"";return e0}function Re(N,R,f){return vX(N,!0,f)}function PK(N,R,f){return vX(N,!1,f)}function OU(N){var R=N.prototype;return!!(R&&R.isReactComponent)}function mU(N,R,f){return"";switch(N){case SUSPENSE_NUMBER:case SUSPENSE_SYMBOL_STRING:return LG("Suspense",R);case SUSPENSE_LIST_NUMBER:case SUSPENSE_LIST_SYMBOL_STRING:return LG("SuspenseList",R)}if(UX(N)==="object")switch(N.$$typeof){case FORWARD_REF_NUMBER:case FORWARD_REF_SYMBOL_STRING:return PK(N.render,R,f);case MEMO_NUMBER:case MEMO_SYMBOL_STRING:return mU(N.type,R,f);case LAZY_NUMBER:case LAZY_SYMBOL_STRING:{var U=N,v=U._payload,m=U._init;try{return mU(m(v),R,f)}catch(C1){}}}}function aH(N,R,f){var{HostComponent:U,LazyComponent:v,SuspenseComponent:m,SuspenseListComponent:C1,FunctionComponent:w1,IndeterminateComponent:x,SimpleMemoComponent:X1,ForwardRef:q1,ClassComponent:P1}=N,b1=null;switch(R.tag){case U:return LG(R.type,b1);case v:return LG("Lazy",b1);case m:return LG("Suspense",b1);case C1:return LG("SuspenseList",b1);case w1:case x:case X1:return PK(R.type,b1,f);case q1:return PK(R.type.render,b1,f);case P1:return Re(R.type,b1,f);default:return""}}function BC(N,R,f){try{var U="",v=R;do U+=aH(N,v,f),v=v.return;while(v);return U}catch(m){return` +Error generating stack: `+m.message+` +`+m.stack}}function RT(N,R){return $K(N)||sH(N,R)||UT(N,R)||yG()}function yG(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function UT(N,R){if(!N)return;if(typeof N==="string")return EX(N,R);var f=Object.prototype.toString.call(N).slice(8,-1);if(f==="Object"&&N.constructor)f=N.constructor.name;if(f==="Map"||f==="Set")return Array.from(N);if(f==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f))return EX(N,R)}function EX(N,R){if(R==null||R>N.length)R=N.length;for(var f=0,U=new Array(R);f0){var C5=X1[X1.length-1];O4=C5.type==="render-idle"?C5.depth:C5.depth+1}var D3=b2(S2),S9={type:C2,batchUID:w1,depth:O4,lanes:D3,timestamp:e0(),duration:0};if(X1.push(S9),q1){var C8=q1,g7=C8.batchUIDToMeasuresMap,h6=C8.laneToReactMeasureMap,bd=g7.get(w1);if(bd!=null)bd.push(S9);else g7.set(w1,[S9]);D3.forEach(function(FA){if(bd=h6.get(FA),bd)bd.push(S9)})}}function o5(C2){var S2=e0();if(X1.length===0){console.error('Unexpected type "%s" completed at %sms while currentReactMeasuresStack is empty.',C2,S2);return}var O4=X1.pop();if(O4.type!==C2)console.error('Unexpected type "%s" completed at %sms before "%s" completed.',C2,S2,O4.type);if(O4.duration=S2-O4.timestamp,q1)q1.duration=e0()+lU}function Z5(C2){if(b1)g5("commit",C2),f0=!0;if(L4)V2("--commit-start-".concat(C2)),U5()}function w9(){if(b1)o5("commit"),o5("render-idle");if(L4)V2("--commit-stop")}function e5(C2){if(b1||L4){var S2=R(C2)||"Unknown";if(b1){if(b1)x={componentName:S2,duration:0,timestamp:e0(),type:"render",warning:null}}if(L4)V2("--component-render-start-".concat(S2))}}function t3(){if(b1){if(x){if(q1)q1.componentMeasures.push(x);x.duration=e0()-x.timestamp,x=null}}if(L4)V2("--component-render-stop")}function J4(C2){if(b1||L4){var S2=R(C2)||"Unknown";if(b1){if(b1)x={componentName:S2,duration:0,timestamp:e0(),type:"layout-effect-mount",warning:null}}if(L4)V2("--component-layout-effect-mount-start-".concat(S2))}}function Y6(){if(b1){if(x){if(q1)q1.componentMeasures.push(x);x.duration=e0()-x.timestamp,x=null}}if(L4)V2("--component-layout-effect-mount-stop")}function _3(C2){if(b1||L4){var S2=R(C2)||"Unknown";if(b1){if(b1)x={componentName:S2,duration:0,timestamp:e0(),type:"layout-effect-unmount",warning:null}}if(L4)V2("--component-layout-effect-unmount-start-".concat(S2))}}function r9(){if(b1){if(x){if(q1)q1.componentMeasures.push(x);x.duration=e0()-x.timestamp,x=null}}if(L4)V2("--component-layout-effect-unmount-stop")}function G4(C2){if(b1||L4){var S2=R(C2)||"Unknown";if(b1){if(b1)x={componentName:S2,duration:0,timestamp:e0(),type:"passive-effect-mount",warning:null}}if(L4)V2("--component-passive-effect-mount-start-".concat(S2))}}function t5(){if(b1){if(x){if(q1)q1.componentMeasures.push(x);x.duration=e0()-x.timestamp,x=null}}if(L4)V2("--component-passive-effect-mount-stop")}function _6(C2){if(b1||L4){var S2=R(C2)||"Unknown";if(b1){if(b1)x={componentName:S2,duration:0,timestamp:e0(),type:"passive-effect-unmount",warning:null}}if(L4)V2("--component-passive-effect-unmount-start-".concat(S2))}}function u8(){if(b1){if(x){if(q1)q1.componentMeasures.push(x);x.duration=e0()-x.timestamp,x=null}}if(L4)V2("--component-passive-effect-unmount-stop")}function o0(C2,S2,O4){if(b1||L4){var C5=R(C2)||"Unknown",D3=C2.alternate===null?"mount":"update",S9="";if(S2!==null&&xW(S2)==="object"&&typeof S2.message==="string")S9=S2.message;else if(typeof S2==="string")S9=S2;if(b1){if(q1)q1.thrownErrors.push({componentName:C5,message:S9,phase:D3,timestamp:e0(),type:"thrown-error"})}if(L4)V2("--error-".concat(C5,"-").concat(D3,"-").concat(S9))}}var f2=typeof WeakMap==="function"?WeakMap:Map,O2=new f2,M9=0;function $3(C2){if(!O2.has(C2))O2.set(C2,M9++);return O2.get(C2)}function a9(C2,S2,O4){if(b1||L4){var C5=O2.has(S2)?"resuspend":"suspend",D3=$3(S2),S9=R(C2)||"Unknown",C8=C2.alternate===null?"mount":"update",g7=S2.displayName||"",h6=null;if(b1){if(h6={componentName:S9,depth:0,duration:0,id:"".concat(D3),phase:C8,promiseName:g7,resolution:"unresolved",timestamp:e0(),type:"suspense",warning:null},q1)q1.suspenseEvents.push(h6)}if(L4)V2("--suspense-".concat(C5,"-").concat(D3,"-").concat(S9,"-").concat(C8,"-").concat(O4,"-").concat(g7));S2.then(function(){if(h6)h6.duration=e0()-h6.timestamp,h6.resolution="resolved";if(L4)V2("--suspense-resolved-".concat(D3,"-").concat(S9))},function(){if(h6)h6.duration=e0()-h6.timestamp,h6.resolution="rejected";if(L4)V2("--suspense-rejected-".concat(D3,"-").concat(S9))})}}function u3(C2){if(b1)g5("layout-effects",C2);if(L4)V2("--layout-effects-start-".concat(C2))}function b6(){if(b1)o5("layout-effects");if(L4)V2("--layout-effects-stop")}function HA(C2){if(b1)g5("passive-effects",C2);if(L4)V2("--passive-effects-start-".concat(C2))}function ld(){if(b1)o5("passive-effects");if(L4)V2("--passive-effects-stop")}function oW(C2){if(b1){if(f0)f0=!1,w1++;if(X1.length===0||X1[X1.length-1].type!=="render-idle")g5("render-idle",C2);g5("render",C2)}if(L4)V2("--render-start-".concat(C2))}function eW(){if(b1)o5("render");if(L4)V2("--render-yield")}function VC(){if(b1)o5("render");if(L4)V2("--render-stop")}function XC(C2){if(b1){if(q1)q1.schedulingEvents.push({lanes:b2(C2),timestamp:e0(),type:"schedule-render",warning:null})}if(L4)V2("--schedule-render-".concat(C2))}function lX(C2,S2){if(b1||L4){var O4=R(C2)||"Unknown";if(b1){if(q1)q1.schedulingEvents.push({componentName:O4,lanes:b2(S2),timestamp:e0(),type:"schedule-force-update",warning:null})}if(L4)V2("--schedule-forced-update-".concat(S2,"-").concat(O4))}}function tW(C2){var S2=[],O4=C2;while(O4!==null)S2.push(O4),O4=O4.return;return S2}function Wv(C2,S2){if(b1||L4){var O4=R(C2)||"Unknown";if(b1){if(q1){var C5={componentName:O4,lanes:b2(S2),timestamp:e0(),type:"schedule-state-update",warning:null};P1.set(C5,tW(C2)),q1.schedulingEvents.push(C5)}}if(L4)V2("--schedule-state-update-".concat(S2,"-").concat(O4))}}function wv(C2){if(b1!==C2)if(b1=C2,b1){var S2=new Map;if(L4){var O4=U2();if(O4)for(var C5=0;C5=0)continue;if(!Object.prototype.propertyIsEnumerable.call(N,U))continue;f[U]=N[U]}}return f}function bU(N,R){if(N==null)return{};var f={},U=Object.keys(N),v,m;for(m=0;m=0)continue;f[v]=N[v]}return f}function hU(N,R){var f=Object.keys(N);if(Object.getOwnPropertySymbols){var U=Object.getOwnPropertySymbols(N);if(R)U=U.filter(function(v){return Object.getOwnPropertyDescriptor(N,v).enumerable});f.push.apply(f,U)}return f}function jU(N){for(var R=1;R=N.length)return{done:!0};return{done:!1,value:N[U++]}},e:function x(X1){throw X1},f:v}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m=!0,C1=!1,w1;return{s:function x(){f=N[Symbol.iterator]()},n:function x(){var X1=f.next();return m=X1.done,X1},e:function x(X1){C1=!0,w1=X1},f:function x(){try{if(!m&&f.return!=null)f.return()}finally{if(C1)throw w1}}}}function OI(N,R){if(!N)return;if(typeof N==="string")return IF(N,R);var f=Object.prototype.toString.call(N).slice(8,-1);if(f==="Object"&&N.constructor)f=N.constructor.name;if(f==="Map"||f==="Set")return Array.from(N);if(f==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f))return IF(N,R)}function IF(N,R){if(R==null||R>N.length)R=N.length;for(var f=0,U=new Array(R);f3&&arguments[3]!==void 0?arguments[3]:"";if(J){var A0=Y1.tag+":"+(C1(Y1)||"null"),M0=lG(Y1)||"",m2=D1?D1.tag+":"+(C1(D1)||"null"):"",p2=D1?lG(D1)||"":"";console.groupCollapsed("[renderer] %c".concat(n," %c").concat(A0," (").concat(M0,") %c").concat(D1?"".concat(m2," (").concat(p2,")"):""," %c").concat(k1),"color: red; font-weight: bold;","color: blue;","color: purple;","color: black;"),console.log(new Error().stack.split(` +`).slice(1).join(` +`)),console.groupEnd()}},u0=new Set,z2=new Set,U4=new Set,m4=!1,y5=new Set;function D6(b){U4.clear(),u0.clear(),z2.clear(),b.forEach(function(n){if(!n.isEnabled)return;switch(n.type){case Sd:if(n.isValid&&n.value!=="")u0.add(new RegExp(n.value,"i"));break;case au:U4.add(n.value);break;case GC:if(n.isValid&&n.value!=="")z2.add(new RegExp(n.value,"i"));break;case JK:u0.add(new RegExp("\\("));break;default:console.warn('Invalid component filter type "'.concat(n.type,'"'));break}})}if(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null)D6(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__);else D6(SH());function T8(b){if(hG)throw Error("Cannot modify filter preferences while profiling");N.getFiberRoots(R).forEach(function(n){H6=Iw(n.current),I9(h),XF(n),H6=-1}),D6(b),tK.clear(),N.getFiberRoots(R).forEach(function(n){H6=Iw(n.current),sT(H6,n.current),YC(n.current,null,!1,!1),XF(n),H6=-1}),_R2(),XF()}function TG(b){var{_debugSource:n,tag:Y1,type:D1,key:k1}=b;switch(Y1){case e0:return!0;case g5:case Z5:case t3:case Y6:return!0;case R4:return!1;case x0:return k1===null;default:var A0=w1(D1);switch(A0){case UU:case V6:case TI:case EK:case MK:return!0;default:break}}var M0=j6(b);if(U4.has(M0))return!0;if(u0.size>0){var m2=C1(b);if(m2!=null){var p2=P8(u0),$2;try{for(p2.s();!($2=p2.n()).done;){var i2=$2.value;if(i2.test(m2))return!0}}catch(jI){p2.e(jI)}finally{p2.f()}}}if(n!=null&&z2.size>0){var r4=n.fileName,k6=P8(z2),m9;try{for(k6.s();!(m9=k6.n()).done;){var J7=m9.value;if(J7.test(r4))return!0}}catch(jI){k6.e(jI)}finally{k6.f()}}return!1}function j6(b){var{type:n,tag:Y1}=b;switch(Y1){case b1:case w9:return E8;case b2:case e5:return UG;case U2:return tB;case R4:return FK;case o5:case U5:case V2:return n9;case g5:case Z5:case x0:return Md;case J4:case _3:return mW;case r9:return gK;case G4:return vG;case t5:return Ze;default:var D1=w1(n);switch(D1){case UU:case V6:case TI:return Md;case vK:case cH:return eB;case hH:case jH:return eB;case EK:case MK:return Md;case kH:case xH:return JU;default:return Md}}}var OG=new Map,AF=new Map,H6=-1;function Iw(b){var n=null;if(H7.has(b))n=H7.get(b);else{var Y1=b.alternate;if(Y1!==null&&H7.has(Y1))n=H7.get(Y1)}var D1=!1;if(n===null)D1=!0,n=K9();var k1=n;if(!H7.has(b))H7.set(b,k1),d8.set(k1,b);var A0=b.alternate;if(A0!==null){if(!H7.has(A0))H7.set(A0,k1)}if(J){if(D1)q0("getOrGenerateFiberID()",b,b.return,"Generated a new UID")}return k1}function mG(b){var n=lG(b);if(n!==null)return n;throw Error('Could not find ID for Fiber "'.concat(C1(b)||"",'"'))}function lG(b){if(H7.has(b))return H7.get(b);else{var n=b.alternate;if(n!==null&&H7.has(n))return H7.get(n)}return null}function WR2(b){if(J)q0("untrackFiberID()",b,b.return,"schedule after delay");Bv.add(b);var n=b.alternate;if(n!==null)Bv.add(n);if(Av===null)Av=setTimeout(RN1,1000)}var Bv=new Set,Av=null;function RN1(){if(Av!==null)clearTimeout(Av),Av=null;Bv.forEach(function(b){var n=lG(b);if(n!==null)d8.delete(n),FA(n),bX(n);H7.delete(b);var Y1=b.alternate;if(Y1!==null)H7.delete(Y1);if(_C.has(n)){if(_C.delete(n),_C.size===0&&XC!=null)XC(cN1)}}),Bv.clear()}function wR2(b,n){switch(j6(n)){case E8:case UG:case mW:case tB:if(b===null)return{context:null,didHooksChange:!1,isFirstMount:!0,props:null,state:null};else{var Y1={context:BR2(n),didHooksChange:!1,isFirstMount:!1,props:Pe(b.memoizedProps,n.memoizedProps),state:Pe(b.memoizedState,n.memoizedState)},D1=XR2(b.memoizedState,n.memoizedState);return Y1.hooks=D1,Y1.didHooksChange=D1!==null&&D1.length>0,Y1}default:return null}}function UN1(b){switch(j6(b)){case E8:case tB:case UG:case mW:if(oK!==null){var n=mG(b),Y1=vN1(b);if(Y1!==null)oK.set(n,Y1)}break;default:break}}var nK={};function vN1(b){var n=nK,Y1=nK;switch(j6(b)){case E8:var D1=b.stateNode;if(D1!=null){if(D1.constructor&&D1.constructor.contextType!=null)Y1=D1.context;else if(n=D1.context,n&&Object.keys(n).length===0)n=nK}return[n,Y1];case tB:case UG:case mW:var k1=b.dependencies;if(k1&&k1.firstContext)Y1=k1.firstContext;return[n,Y1];default:return null}}function EN1(b){var n=lG(b);if(n!==null){UN1(b);var Y1=b.child;while(Y1!==null)EN1(Y1),Y1=Y1.sibling}}function BR2(b){if(oK!==null){var n=mG(b),Y1=oK.has(n)?oK.get(n):null,D1=vN1(b);if(Y1==null||D1==null)return null;var k1=tH(Y1,2),A0=k1[0],M0=k1[1],m2=tH(D1,2),p2=m2[0],$2=m2[1];switch(j6(b)){case E8:if(Y1&&D1){if(p2!==nK)return Pe(A0,p2);else if($2!==nK)return M0!==$2}break;case tB:case UG:case mW:if($2!==nK){var i2=M0,r4=$2;while(i2&&r4){if(!SK(i2.memoizedValue,r4.memoizedValue))return!0;i2=i2.next,r4=r4.next}return!1}break;default:break}}return null}function AR2(b){var n=b.queue;if(!n)return!1;var Y1=Ne.bind(n);if(Y1("pending"))return!0;return Y1("value")&&Y1("getSnapshot")&&typeof n.getSnapshot==="function"}function VR2(b,n){var Y1=b.memoizedState,D1=n.memoizedState;if(AR2(b))return Y1!==D1;return!1}function XR2(b,n){if(b==null||n==null)return null;var Y1=[],D1=0;if(n.hasOwnProperty("baseState")&&n.hasOwnProperty("memoizedState")&&n.hasOwnProperty("next")&&n.hasOwnProperty("queue"))while(n!==null){if(VR2(b,n))Y1.push(D1);n=n.next,b=b.next,D1++}return Y1}function Pe(b,n){if(b==null||n==null)return null;if(n.hasOwnProperty("baseState")&&n.hasOwnProperty("memoizedState")&&n.hasOwnProperty("next")&&n.hasOwnProperty("queue"))return null;var Y1=new Set([].concat(uK(Object.keys(b)),uK(Object.keys(n)))),D1=[],k1=P8(Y1),A0;try{for(k1.s();!(A0=k1.n()).done;){var M0=A0.value;if(b[M0]!==n[M0])D1.push(M0)}}catch(m2){k1.e(m2)}finally{k1.f()}return D1}function $e(b,n){switch(n.tag){case b1:case b2:case f0:case J4:case _3:case U2:var Y1=1;return(Od(n)&Y1)===Y1;default:return b.memoizedProps!==n.memoizedProps||b.memoizedState!==n.memoizedState||b.ref!==n.ref}}var bG=[],rK=[],VF=[],cT=[],Vv=new Map,pT=0,aK=null;function I9(b){bG.push(b)}function iT(){if(hG){if(dw!=null&&dw.durations.length>0)return!1}return bG.length===0&&rK.length===0&&VF.length===0&&aK===null}function MN1(b){if(iT())return;if(cT!==null)cT.push(b);else N.emit("operations",b)}var Xv=null;function SN1(){if(Xv!==null)clearTimeout(Xv),Xv=null}function YR2(){SN1(),Xv=setTimeout(function(){if(Xv=null,bG.length>0)return;if(ue(),iT())return;var b=new Array(3+bG.length);b[0]=R,b[1]=H6,b[2]=0;for(var n=0;n0?2+n:0)+bG.length),D1=0;if(Y1[D1++]=R,Y1[D1++]=H6,Y1[D1++]=pT,Vv.forEach(function(m2,p2){var $2=m2.encodedString,i2=$2.length;Y1[D1++]=i2;for(var r4=0;r40){Y1[D1++]=E,Y1[D1++]=n;for(var k1=rK.length-1;k1>=0;k1--)Y1[D1++]=rK[k1];for(var A0=0;A00)b.forEach(function(n){N.emit("operations",n)});else{if(hX!==null)jX=!0;N.getFiberRoots(R).forEach(function(n){if(H6=Iw(n.current),sT(H6,n.current),hG&&me(n))dw={changeDescriptions:Hv?new Map:null,durations:[],commitTime:TK()-he,maxActualDuration:0,priorityLevel:null,updaters:TN1(n),effectDuration:null,passiveEffectDuration:null};YC(n.current,null,!1,!1),XF(n),H6=-1})}}function TN1(b){return b.memoizedUpdaters!=null?Array.from(b.memoizedUpdaters).filter(function(n){return lG(n)!==null}).map(nT):null}function JR2(b){if(!Bv.has(b))Te(b,!1)}function KR2(b){if(hG&&me(b)){if(dw!==null){var n=RU(b),Y1=n.effectDuration,D1=n.passiveEffectDuration;dw.effectDuration=Y1,dw.passiveEffectDuration=D1}}}function NR2(b,n){var Y1=b.current,D1=Y1.alternate;if(RN1(),H6=Iw(Y1),hX!==null)jX=!0;if(m4)y5.clear();var k1=me(b);if(hG&&k1)dw={changeDescriptions:Hv?new Map:null,durations:[],commitTime:TK()-he,maxActualDuration:0,priorityLevel:n==null?null:aR2(n),updaters:TN1(b),effectDuration:null,passiveEffectDuration:null};if(D1){var A0=D1.memoizedState!=null&&D1.memoizedState.element!=null&&D1.memoizedState.isDehydrated!==!0,M0=Y1.memoizedState!=null&&Y1.memoizedState.element!=null&&Y1.memoizedState.isDehydrated!==!0;if(!A0&&M0)sT(H6,Y1),YC(Y1,null,!1,!1);else if(A0&&M0)Oe(Y1,D1,null,!1);else if(A0&&!M0)iR2(H6),Te(Y1,!1)}else sT(H6,Y1),YC(Y1,null,!1,!1);if(hG&&k1){if(!iT()){var m2=Fv.get(H6);if(m2!=null)m2.push(dw);else Fv.set(H6,[dw])}}if(XF(b),m4)N.emit("traceUpdates",y5);H6=-1}function ON1(b){var n=[],Y1=gA(b);if(!Y1)return n;var D1=Y1;while(!0){if(D1.tag===o5||D1.tag===Z5)n.push(D1);else if(D1.child){D1.child.return=D1,D1=D1.child;continue}if(D1===Y1)return n;while(!D1.sibling){if(!D1.return||D1.return===Y1)return n;D1=D1.return}D1.sibling.return=D1.return,D1=D1.sibling}return n}function mN1(b){try{var n=gA(b);if(n===null)return null;var Y1=ON1(b);return Y1.map(function(D1){return D1.stateNode}).filter(Boolean)}catch(D1){return null}}function zR2(b){var n=d8.get(b);return n!=null?C1(n):null}function QR2(b){return f.findFiberByHostInstance(b)}function fR2(b){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,Y1=f.findFiberByHostInstance(b);if(Y1!=null){if(n)while(Y1!==null&&TG(Y1))Y1=Y1.return;return mG(Y1)}return null}function lN1(b){if(bN1(b)!==b)throw new Error("Unable to find node on an unmounted component.")}function bN1(b){var n=b,Y1=b;if(!b.alternate){var D1=n;do{n=D1;var k1=2,A0=4096;if((n.flags&(k1|A0))!==0)Y1=n.return;D1=n.return}while(D1)}else while(n.return)n=n.return;if(n.tag===R4)return Y1;return null}function gA(b){var n=d8.get(b);if(n==null)return console.warn('Could not find Fiber with id "'.concat(b,'"')),null;var Y1=n.alternate;if(!Y1){var D1=bN1(n);if(D1===null)throw new Error("Unable to find node on an unmounted component.");if(D1!==n)return null;return n}var k1=n,A0=Y1;while(!0){var M0=k1.return;if(M0===null)break;var m2=M0.alternate;if(m2===null){var p2=M0.return;if(p2!==null){k1=A0=p2;continue}break}if(M0.child===m2.child){var $2=M0.child;while($2){if($2===k1)return lN1(M0),n;if($2===A0)return lN1(M0),Y1;$2=$2.sibling}throw new Error("Unable to find node on an unmounted component.")}if(k1.return!==A0.return)k1=M0,A0=m2;else{var i2=!1,r4=M0.child;while(r4){if(r4===k1){i2=!0,k1=M0,A0=m2;break}if(r4===A0){i2=!0,A0=M0,k1=m2;break}r4=r4.sibling}if(!i2){r4=m2.child;while(r4){if(r4===k1){i2=!0,k1=m2,A0=M0;break}if(r4===A0){i2=!0,A0=m2,k1=M0;break}r4=r4.sibling}if(!i2)throw new Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(k1.alternate!==A0)throw new Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(k1.tag!==R4)throw new Error("Unable to find node on an unmounted component.");if(k1.stateNode.current===k1)return n;return Y1}function qR2(b,n){if(_v(b))window.$attribute=M8(r7,n)}function RR2(b){var n=d8.get(b);if(n==null){console.warn('Could not find Fiber with id "'.concat(b,'"'));return}var{elementType:Y1,tag:D1,type:k1}=n;switch(D1){case b1:case w9:case e5:case b2:U.$type=k1;break;case U2:U.$type=k1.render;break;case J4:case _3:U.$type=Y1!=null&&Y1.type!=null?Y1.type:k1;break;default:U.$type=null;break}}function nT(b){return{displayName:C1(b)||"Anonymous",id:mG(b),key:b.key,type:j6(b)}}function UR2(b){var n=gA(b);if(n==null)return null;var Y1=n._debugOwner,D1=[nT(n)];if(Y1){var k1=Y1;while(k1!==null)D1.unshift(nT(k1)),k1=k1._debugOwner||null}return D1}function vR2(b){var n=null,Y1=null,D1=gA(b);if(D1!==null){if(n=D1.stateNode,D1.memoizedProps!==null)Y1=D1.memoizedProps.style}return{instance:n,style:Y1}}function hN1(b){var{tag:n,type:Y1}=b;switch(n){case b1:case w9:var D1=b.stateNode;return typeof Y1.getDerivedStateFromError==="function"||D1!==null&&typeof D1.componentDidCatch==="function";default:return!1}}function jN1(b){var n=b.return;while(n!==null){if(hN1(n))return lG(n);n=n.return}return null}function kN1(b){var n=gA(b);if(n==null)return null;var{_debugOwner:Y1,_debugSource:D1,stateNode:k1,key:A0,memoizedProps:M0,memoizedState:m2,dependencies:p2,tag:$2,type:i2}=n,r4=j6(n),k6=($2===b2||$2===_3||$2===U2)&&(!!m2||!!p2),m9=!k6&&$2!==P1,J7=w1(i2),jI=!1,a7=null;if($2===b1||$2===b2||$2===w9||$2===e5||$2===J4||$2===U2||$2===_3){if(jI=!0,k1&&k1.context!=null){var IN=r4===E8&&!(i2.contextTypes||i2.contextType);if(!IN)a7=k1.context}}else if(J7===hH||J7===jH){var jG=i2._context||i2;a7=jG._currentValue||null;var hd=n.return;while(hd!==null){var kX=hd.type,dN=w1(kX);if(dN===vK||dN===cH){var Jv=kX._context||kX.context;if(Jv===jG){a7=hd.memoizedProps.value;break}}hd=hd.return}}var KA=!1;if(a7!==null)KA=!!i2.contextTypes,a7={value:a7};var NA=null;if(Y1){NA=[];var kG=Y1;while(kG!==null)NA.push(nT(kG)),kG=kG._debugOwner||null}var oT=$2===r9&&m2!==null,nN1=null;if(k6){var ke={};for(var xe in console)try{ke[xe]=console[xe],console[xe]=function(){}}catch(dU2){}try{nN1=bH.inspectHooksOfFiber(n,f.currentDispatcherRef,!0)}finally{for(var rN1 in ke)try{console[rN1]=ke[rN1]}catch(dU2){}}}var aN1=null,eT=n;while(eT.return!==null)eT=eT.return;var ce=eT.stateNode;if(ce!=null&&ce._debugRootType!==null)aN1=ce._debugRootType;var eR2=C8.get(b)||new Map,tR2=g7.get(b)||new Map,pe=!1,tT;if(hN1(n)){var IU2=128;pe=(n.flags&IU2)!==0||_C.get(b)===!0,tT=pe?b:jN1(n)}else tT=jN1(n);var sN1={stylex:null};if(ge){if(M0!=null&&M0.hasOwnProperty("xstyle"))sN1.stylex=Td(M0.xstyle)}return{id:b,canEditHooks:typeof u3==="function",canEditFunctionProps:typeof ld==="function",canEditHooksAndDeletePaths:typeof b6==="function",canEditHooksAndRenamePaths:typeof HA==="function",canEditFunctionPropsDeletePaths:typeof oW==="function",canEditFunctionPropsRenamePaths:typeof eW==="function",canToggleError:Wv&&tT!=null,isErrored:pe,targetErrorBoundaryID:tT,canToggleSuspense:wv&&(!oT||eK.has(b)),canViewSource:jI,hasLegacyContext:KA,key:A0!=null?A0:null,displayName:C1(n),type:r4,context:a7,hooks:nN1,props:M0,state:m9?m2:null,errors:Array.from(eR2.entries()),warnings:Array.from(tR2.entries()),owners:NA,source:D1||null,rootType:aN1,rendererPackageName:f.rendererPackageName,rendererVersion:f.version,plugins:sN1}}var r7=null,Yv=!1,rT={};function _v(b){return r7!==null&&r7.id===b}function ER2(b){return _v(b)&&!Yv}function MR2(b){var n=rT;b.forEach(function(Y1){if(!n[Y1])n[Y1]={};n=n[Y1]})}function Dv(b,n){return function Y1(D1){switch(n){case"hooks":if(D1.length===1)return!0;if(D1[D1.length-2]==="hookSource"&&D1[D1.length-1]==="fileName")return!0;if(D1[D1.length-1]==="subHooks"||D1[D1.length-2]==="subHooks")return!0;break;default:break}var k1=b===null?rT:rT[b];if(!k1)return!1;for(var A0=0;A0"),"color: var(--dom-tag-name-color); font-weight: normal;");if(n.props!==null)console.log("Props:",n.props);if(n.state!==null)console.log("State:",n.state);if(n.hooks!==null)console.log("Hooks:",n.hooks);var D1=mN1(b);if(D1!==null)console.log("Nodes:",D1);if(n.source!==null)console.log("Location:",n.source);if(window.chrome||/firefox/i.test(navigator.userAgent))console.log("Right-click any value to save it as a global variable for further inspection.");if(Y1)console.groupEnd()}function uR2(b,n,Y1,D1){var k1=gA(n);if(k1!==null){var A0=k1.stateNode;switch(b){case"context":switch(D1=D1.slice(1),k1.tag){case b1:if(D1.length===0);else yH(A0.context,D1);A0.forceUpdate();break;case b2:break}break;case"hooks":if(typeof b6==="function")b6(k1,Y1,D1);break;case"props":if(A0===null){if(typeof oW==="function")oW(k1,D1)}else k1.pendingProps=OH(A0.props,D1),A0.forceUpdate();break;case"state":yH(A0.state,D1),A0.forceUpdate();break}}}function TR2(b,n,Y1,D1,k1){var A0=gA(n);if(A0!==null){var M0=A0.stateNode;switch(b){case"context":switch(D1=D1.slice(1),k1=k1.slice(1),A0.tag){case b1:if(D1.length===0);else ZA(M0.context,D1,k1);M0.forceUpdate();break;case b2:break}break;case"hooks":if(typeof HA==="function")HA(A0,Y1,D1,k1);break;case"props":if(M0===null){if(typeof eW==="function")eW(A0,D1,k1)}else A0.pendingProps=mH(M0.props,D1,k1),M0.forceUpdate();break;case"state":ZA(M0.state,D1,k1),M0.forceUpdate();break}}}function OR2(b,n,Y1,D1,k1){var A0=gA(n);if(A0!==null){var M0=A0.stateNode;switch(b){case"context":switch(D1=D1.slice(1),A0.tag){case b1:if(D1.length===0)M0.context=k1;else CA(M0.context,D1,k1);M0.forceUpdate();break;case b2:break}break;case"hooks":if(typeof u3==="function")u3(A0,Y1,D1,k1);break;case"props":switch(A0.tag){case b1:A0.pendingProps=RX(M0.props,D1,k1),M0.forceUpdate();break;default:if(typeof ld==="function")ld(A0,D1,k1);break}break;case"state":switch(A0.tag){case b1:CA(M0.state,D1,k1),M0.forceUpdate();break}break}}}var dw=null,sK=null,oK=null,le=null,be=null,hG=!1,he=0,Hv=!1,Fv=null;function mR2(){var b=[];if(Fv===null)throw Error("getProfilingData() called before any profiling data was recorded");Fv.forEach(function(p2,$2){var i2=[],r4=[],k6=sK!==null&&sK.get($2)||"Unknown";if(le!=null)le.forEach(function(m9,J7){if(be!=null&&be.get(J7)===$2)r4.push([J7,m9])});p2.forEach(function(m9,J7){var{changeDescriptions:jI,durations:a7,effectDuration:IN,maxActualDuration:jG,passiveEffectDuration:hd,priorityLevel:kX,commitTime:dN,updaters:Jv}=m9,KA=[],NA=[];for(var kG=0;kG1)tK.set(Y1,D1-1);else tK.delete(Y1);aT.delete(b)}function je(b){var n=null,Y1=null,D1=b.child;for(var k1=0;k1<3;k1++){if(D1===null)break;var A0=C1(D1);if(A0!==null){if(typeof D1.type==="function")n=A0;else if(Y1===null)Y1=A0}if(n!==null)break;D1=D1.child}return n||Y1||"Anonymous"}function iN1(b){var n=b.key,Y1=C1(b),D1=b.index;switch(b.tag){case R4:var k1=mG(b),A0=aT.get(k1);if(A0===void 0)throw new Error("Expected mounted root to have known pseudo key.");Y1=A0;break;case o5:Y1=b.type;break;default:break}return{displayName:Y1,key:n,index:D1}}function nR2(b){var n=d8.get(b);if(n==null)return null;var Y1=[];while(n!==null)Y1.push(iN1(n)),n=n.return;return Y1.reverse(),Y1}function rR2(){if(hX===null)return null;if(JA===null)return null;var b=JA;while(b!==null&&TG(b))b=b.return;if(b===null)return null;return{id:mG(b),isFullMatch:gv===hX.length-1}}var aR2=function b(n){if(n==null)return"Unknown";switch(n){case _6:return"Immediate";case u8:return"User-Blocking";case o0:return"Normal";case f2:return"Low";case O2:return"Idle";case M9:default:return"Unknown"}};function sR2(b){m4=b}function oR2(b){return d8.has(b)}return{cleanup:FR2,clearErrorsAndWarnings:h6,clearErrorsForFiberID:FA,clearWarningsForFiberID:bX,getSerializedElementValueByPath:yR2,deletePath:uR2,findNativeNodesForFiberID:mN1,flushInitialOperations:gR2,getBestMatchForTrackedPath:rR2,getDisplayNameForFiberID:zR2,getFiberForNative:QR2,getFiberIDForNative:fR2,getInstanceAndStyle:vR2,getOwnersList:UR2,getPathForElement:nR2,getProfilingData:mR2,handleCommitFiberRoot:NR2,handleCommitFiberUnmount:JR2,handlePostCommitFiberRoot:KR2,hasFiberWithId:oR2,inspectElement:PR2,logElementToConsole:$R2,patchConsoleForStrictMode:aU,prepareViewAttributeSource:qR2,prepareViewElementSource:RR2,overrideError:hR2,overrideSuspense:xR2,overrideValueAtPath:OR2,renamePath:TR2,renderer:f,setTraceUpdatesEnabled:sR2,setTrackedPath:pN1,startProfiling:xN1,stopProfiling:lR2,storeAsGlobal:LR2,unpatchConsoleForStrictMode:CF,updateComponentFilters:T8}}function LT(N){return mK(N)||OK(N)||dF(N)||yT()}function yT(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function OK(N){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(N))return Array.from(N)}function mK(N){if(Array.isArray(N))return SX(N)}function lK(N,R){var f;if(typeof Symbol==="undefined"||N[Symbol.iterator]==null){if(Array.isArray(N)||(f=dF(N))||R&&N&&typeof N.length==="number"){if(f)N=f;var U=0,v=function x(){};return{s:v,n:function x(){if(U>=N.length)return{done:!0};return{done:!1,value:N[U++]}},e:function x(X1){throw X1},f:v}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m=!0,C1=!1,w1;return{s:function x(){f=N[Symbol.iterator]()},n:function x(){var X1=f.next();return m=X1.done,X1},e:function x(X1){C1=!0,w1=X1},f:function x(){try{if(!m&&f.return!=null)f.return()}finally{if(C1)throw w1}}}}function dF(N,R){if(!N)return;if(typeof N==="string")return SX(N,R);var f=Object.prototype.toString.call(N).slice(8,-1);if(f==="Object"&&N.constructor)f=N.constructor.name;if(f==="Map"||f==="Set")return Array.from(N);if(f==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f))return SX(N,R)}function SX(N,R){if(R==null||R>N.length)R=N.length;for(var f=0,U=new Array(R);f=2&&rU.test(N[0])&&N[1]==="color: ".concat(ZF(R)||"")}function ZF(N){switch(N){case"warn":return R5.browserTheme==="light"?"rgba(250, 180, 50, 0.75)":"rgba(250, 180, 50, 0.5)";case"error":return R5.browserTheme==="light"?"rgba(250, 123, 130, 0.75)":"rgba(250, 123, 130, 0.5)";case"log":default:return R5.browserTheme==="light"?"rgba(125, 125, 125, 0.75)":"rgba(125, 125, 125, 0.5)"}}var bK=new Map,F5=console,E4={};for(var o3 in console)E4[o3]=console[o3];var E9=null,X6=!1;try{X6=global===void 0}catch(N){}function mI(N){F5=N,E4={};for(var R in F5)E4[R]=console[R]}function VA(N,R){var{currentDispatcherRef:f,getCurrentFiber:U,findFiberByHostInstance:v,version:m}=N;if(typeof v!=="function")return;if(f!=null&&typeof U==="function"){var C1=md(m),w1=C1.ReactTypeOfWork;bK.set(N,{currentDispatcherRef:f,getCurrentFiber:U,workTagMap:w1,onErrorOrWarning:R})}}var R5={appendComponentStack:!1,breakOnConsoleErrors:!1,showInlineWarningsAndErrors:!1,hideConsoleLogsInStrictMode:!1,browserTheme:"dark"};function LX(N){var{appendComponentStack:R,breakOnConsoleErrors:f,showInlineWarningsAndErrors:U,hideConsoleLogsInStrictMode:v,browserTheme:m}=N;if(R5.appendComponentStack=R,R5.breakOnConsoleErrors=f,R5.showInlineWarningsAndErrors=U,R5.hideConsoleLogsInStrictMode=v,R5.browserTheme=m,R||f||U){if(E9!==null)return;var C1={};E9=function w1(){for(var x in C1)try{F5[x]=C1[x]}catch(X1){}},GF.forEach(function(w1){try{var x=C1[w1]=F5[w1].__REACT_DEVTOOLS_ORIGINAL_METHOD__?F5[w1].__REACT_DEVTOOLS_ORIGINAL_METHOD__:F5[w1],X1=function q1(){var P1=!1;for(var b1=arguments.length,f0=new Array(b1),e0=0;e00?f0[f0.length-1]:null,x0=typeof U2==="string"&&PT(U2);P1=!x0}}var b2=R5.showInlineWarningsAndErrors&&(w1==="error"||w1==="warn"),R4=lK(bK.values()),U5;try{for(R4.s();!(U5=R4.n()).done;){var V2=U5.value,g5=V2.currentDispatcherRef,o5=V2.getCurrentFiber,Z5=V2.onErrorOrWarning,w9=V2.workTagMap,e5=o5();if(e5!=null)try{if(b2){if(typeof Z5==="function")Z5(e5,w1,f0.slice())}if(P1){var t3=BC(w9,e5,g5);if(t3!=="")if(Ue(f0,w1))f0[0]="".concat(f0[0]," %s"),f0.push(t3);else f0.push(t3)}}catch(J4){setTimeout(function(){throw J4},0)}finally{break}}}catch(J4){R4.e(J4)}finally{R4.f()}if(R5.breakOnConsoleErrors)debugger;x.apply(void 0,f0)};X1.__REACT_DEVTOOLS_ORIGINAL_METHOD__=x,x.__REACT_DEVTOOLS_OVERRIDE_METHOD__=X1,F5[w1]=X1}catch(q1){}})}else XA()}function XA(){if(E9!==null)E9(),E9=null}var iW=null;function aU(){if(EU){var N=["error","group","groupCollapsed","info","log","trace","warn"];if(iW!==null)return;var R={};iW=function f(){for(var U in R)try{F5[U]=R[U]}catch(v){}},N.forEach(function(f){try{var U=R[f]=F5[f].__REACT_DEVTOOLS_STRICT_MODE_ORIGINAL_METHOD__?F5[f].__REACT_DEVTOOLS_STRICT_MODE_ORIGINAL_METHOD__:F5[f],v=function m(){if(!R5.hideConsoleLogsInStrictMode){for(var C1=arguments.length,w1=new Array(C1),x=0;xN.length)R=N.length;for(var f=0,U=new Array(R);f1?m-1:0),w1=1;w11?U-1:0),m=1;mN.length)R=N.length;for(var f=0,U=new Array(R);f0)return"development";return"production"}var f2=Function.prototype.toString;if(o0.Mount&&o0.Mount._renderNewRootComponent){var O2=f2.call(o0.Mount._renderNewRootComponent);if(O2.indexOf("function")!==0)return"production";if(O2.indexOf("storedMeasure")!==-1)return"development";if(O2.indexOf("should be a pure function")!==-1){if(O2.indexOf("NODE_ENV")!==-1)return"development";if(O2.indexOf("development")!==-1)return"development";if(O2.indexOf("true")!==-1)return"development";if(O2.indexOf("nextElement")!==-1||O2.indexOf("nextComponent")!==-1)return"unminified";else return"development"}if(O2.indexOf("nextElement")!==-1||O2.indexOf("nextComponent")!==-1)return"unminified";return"outdated"}}catch(M9){}return"production"}function C1(o0){try{var f2=Function.prototype.toString,O2=f2.call(o0);if(O2.indexOf("^_^")>-1)f0=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")})}catch(M9){}}function w1(o0,f2){if(o0===void 0||o0===null||o0.length===0||typeof o0[0]==="string"&&o0[0].match(/([^%]|^)(%c)/g)||f2===void 0)return o0;var O2=/([^%]|^)((%%)*)(%([oOdisf]))/g;if(typeof o0[0]==="string"&&o0[0].match(O2))return["%c".concat(o0[0]),f2].concat(Zv(o0.slice(1)));else{var M9=o0.reduce(function($3,a9,u3){if(u3>0)$3+=" ";switch(s5(a9)){case"string":case"boolean":case"symbol":return $3+="%s";case"number":var b6=Number.isInteger(a9)?"%i":"%f";return $3+=b6;default:return $3+="%o"}},"%c");return[M9,f2].concat(Zv(o0))}}var x=null;function X1(o0){var{hideConsoleLogsInStrictMode:f2,browserTheme:O2}=o0,M9=["error","group","groupCollapsed","info","log","trace","warn"];if(x!==null)return;var $3={};x=function a9(){for(var u3 in $3)try{R[u3]=$3[u3]}catch(b6){}},M9.forEach(function(a9){try{var u3=$3[a9]=R[a9].__REACT_DEVTOOLS_STRICT_MODE_ORIGINAL_METHOD__?R[a9].__REACT_DEVTOOLS_STRICT_MODE_ORIGINAL_METHOD__:R[a9],b6=function HA(){if(!f2){var ld;switch(a9){case"warn":ld=O2==="light"?"rgba(250, 180, 50, 0.75)":"rgba(250, 180, 50, 0.5)";break;case"error":ld=O2==="light"?"rgba(250, 123, 130, 0.75)":"rgba(250, 123, 130, 0.5)";break;case"log":default:ld=O2==="light"?"rgba(125, 125, 125, 0.75)":"rgba(125, 125, 125, 0.5)";break}if(ld){for(var oW=arguments.length,eW=new Array(oW),VC=0;VC1?f2[1]:null;return O2}function t3(){return w9}function J4(o0){var f2=e5(o0);if(f2!==null)Z5.push(f2)}function Y6(o0){if(Z5.length>0){var f2=Z5.pop(),O2=e5(o0);if(O2!==null)w9.push([f2,O2])}}var _3={},r9=new Map,G4={},t5=new Map,_6=new Map,u8={rendererInterfaces:r9,listeners:G4,backends:_6,renderers:t5,emit:b2,getFiberRoots:R4,inject:b1,on:U2,off:x0,sub:e0,supportsFiber:!0,checkDCE:C1,onCommitFiberUnmount:U5,onCommitFiberRoot:V2,onPostCommitFiberRoot:g5,setStrictMode:o5,getInternalModuleRanges:t3,registerInternalModuleStart:J4,registerInternalModuleStop:Y6};return Object.defineProperty(N,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function o0(){return u8}}),u8}function bI(N,R,f){var U=N[R];return N[R]=function(v){return f.call(this,U,arguments)},U}function Cv(N,R){var f={};for(var U in R)f[U]=bI(N,U,R[U]);return f}function hT(N,R){for(var f in R)N[f]=R[f]}function Z8(N){if(typeof N.forceUpdate==="function")N.forceUpdate();else if(N.updater!=null&&typeof N.updater.enqueueForceUpdate==="function")N.updater.enqueueForceUpdate(this,function(){},"forceUpdate")}function wF(N,R){var f=Object.keys(N);if(Object.getOwnPropertySymbols){var U=Object.getOwnPropertySymbols(N);if(R)U=U.filter(function(v){return Object.getOwnPropertyDescriptor(N,v).enumerable});f.push.apply(f,U)}return f}function hI(N){for(var R=1;R0?f0[f0.length-1]:0;x0(u0,U4,m4),f0.push(U4),C1.set(u0,P1(z2._topLevelWrapper));try{var y5=z0.apply(this,q0);return f0.pop(),y5}catch(T8){throw f0=[],T8}finally{if(f0.length===0){var D6=C1.get(u0);if(D6===void 0)throw new Error("Expected to find root ID.");t3(D6)}}},performUpdateIfNecessary:function H0(z0,q0){var u0=q0[0];if(uG(u0)===Md)return z0.apply(this,q0);var z2=P1(u0);f0.push(z2);var U4=OX(u0);try{var m4=z0.apply(this,q0),y5=OX(u0);if(!b1(U4,y5))b2(u0,z2,y5);return f0.pop(),m4}catch(T8){throw f0=[],T8}finally{if(f0.length===0){var D6=C1.get(u0);if(D6===void 0)throw new Error("Expected to find root ID.");t3(D6)}}},receiveComponent:function H0(z0,q0){var u0=q0[0];if(uG(u0)===Md)return z0.apply(this,q0);var z2=P1(u0);f0.push(z2);var U4=OX(u0);try{var m4=z0.apply(this,q0),y5=OX(u0);if(!b1(U4,y5))b2(u0,z2,y5);return f0.pop(),m4}catch(T8){throw f0=[],T8}finally{if(f0.length===0){var D6=C1.get(u0);if(D6===void 0)throw new Error("Expected to find root ID.");t3(D6)}}},unmountComponent:function H0(z0,q0){var u0=q0[0];if(uG(u0)===Md)return z0.apply(this,q0);var z2=P1(u0);f0.push(z2);try{var U4=z0.apply(this,q0);return f0.pop(),R4(u0,z2),U4}catch(y5){throw f0=[],y5}finally{if(f0.length===0){var m4=C1.get(u0);if(m4===void 0)throw new Error("Expected to find root ID.");t3(m4)}}}});function U2(){if(e0!==null)if(f.Component)hT(f.Component.Mixin,e0);else hT(f.Reconciler,e0);e0=null}function x0(H0,z0,q0){var u0=q0===0;if(J)console.log("%crecordMount()","color: green; font-weight: bold;",z0,DA(H0).displayName);if(u0){var z2=H0._currentElement!=null&&H0._currentElement._owner!=null;J4(Q),J4(z0),J4(FK),J4(0),J4(0),J4(0),J4(z2?1:0)}else{var U4=uG(H0),m4=DA(H0),y5=m4.displayName,D6=m4.key,T8=H0._currentElement!=null&&H0._currentElement._owner!=null?P1(H0._currentElement._owner):0,TG=Y6(y5),j6=Y6(D6);J4(Q),J4(z0),J4(U4),J4(q0),J4(T8),J4(TG),J4(j6)}}function b2(H0,z0,q0){J4(S),J4(z0);var u0=q0.map(P1);J4(u0.length);for(var z2=0;z20?2+z0:0)+g5.length),u0=0;if(q0[u0++]=R,q0[u0++]=H0,q0[u0++]=w9,o5.forEach(function(m4,y5){q0[u0++]=y5.length;var D6=NU(y5);for(var T8=0;T80){q0[u0++]=E,q0[u0++]=z0;for(var z2=0;z2"),"color: var(--dom-tag-name-color); font-weight: normal;");if(z0.props!==null)console.log("Props:",z0.props);if(z0.state!==null)console.log("State:",z0.state);if(z0.context!==null)console.log("Context:",z0.context);var u0=x(H0);if(u0!==null)console.log("Node:",u0);if(window.chrome||/firefox/i.test(navigator.userAgent))console.log("Right-click any value to save it as a global variable for further inspection.");if(q0)console.groupEnd()}function a9(H0,z0){var q0=M9(H0);if(q0!==null)window.$attribute=M8(q0,z0)}function u3(H0){var z0=v.get(H0);if(z0==null){console.warn('Could not find instance with id "'.concat(H0,'"'));return}var q0=z0._currentElement;if(q0==null){console.warn('Could not find element with id "'.concat(H0,'"'));return}U.$type=q0.type}function b6(H0,z0,q0,u0){var z2=v.get(z0);if(z2!=null){var U4=z2._instance;if(U4!=null)switch(H0){case"context":yH(U4.context,u0),Z8(U4);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var m4=z2._currentElement;z2._currentElement=hI(hI({},m4),{},{props:OH(m4.props,u0)}),Z8(U4);break;case"state":yH(U4.state,u0),Z8(U4);break}}}function HA(H0,z0,q0,u0,z2){var U4=v.get(z0);if(U4!=null){var m4=U4._instance;if(m4!=null)switch(H0){case"context":ZA(m4.context,u0,z2),Z8(m4);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var y5=U4._currentElement;U4._currentElement=hI(hI({},y5),{},{props:mH(y5.props,u0,z2)}),Z8(m4);break;case"state":ZA(m4.state,u0,z2),Z8(m4);break}}}function ld(H0,z0,q0,u0,z2){var U4=v.get(z0);if(U4!=null){var m4=U4._instance;if(m4!=null)switch(H0){case"context":CA(m4.context,u0,z2),Z8(m4);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var y5=U4._currentElement;U4._currentElement=hI(hI({},y5),{},{props:RX(y5.props,u0,z2)}),Z8(m4);break;case"state":CA(m4.state,u0,z2),Z8(m4);break}}}var oW=function H0(){throw new Error("getProfilingData not supported by this renderer")},eW=function H0(){throw new Error("handleCommitFiberRoot not supported by this renderer")},VC=function H0(){throw new Error("handleCommitFiberUnmount not supported by this renderer")},XC=function H0(){throw new Error("handlePostCommitFiberRoot not supported by this renderer")},lX=function H0(){throw new Error("overrideError not supported by this renderer")},tW=function H0(){throw new Error("overrideSuspense not supported by this renderer")},Wv=function H0(){},wv=function H0(){};function C2(){return null}function S2(H0){return null}function O4(H0){}function C5(H0){}function D3(H0){}function S9(H0){return null}function C8(){}function g7(H0){}function h6(H0){}function bd(){}function FA(){}function bX(H0){return v.has(H0)}return{clearErrorsAndWarnings:C8,clearErrorsForFiberID:g7,clearWarningsForFiberID:h6,cleanup:U2,getSerializedElementValueByPath:f2,deletePath:b6,flushInitialOperations:V2,getBestMatchForTrackedPath:C2,getDisplayNameForFiberID:q1,getFiberForNative:X1,getFiberIDForNative:w1,getInstanceAndStyle:_6,findNativeNodesForFiberID:function H0(z0){var q0=x(z0);return q0==null?null:[q0]},getOwnersList:S9,getPathForElement:S2,getProfilingData:oW,handleCommitFiberRoot:eW,handleCommitFiberUnmount:VC,handlePostCommitFiberRoot:XC,hasFiberWithId:bX,inspectElement:O2,logElementToConsole:$3,overrideError:lX,overrideSuspense:tW,overrideValueAtPath:ld,renamePath:HA,patchConsoleForStrictMode:bd,prepareViewAttributeSource:a9,prepareViewElementSource:u3,renderer:f,setTraceUpdatesEnabled:C5,setTrackedPath:D3,startProfiling:Wv,stopProfiling:wv,storeAsGlobal:o0,unpatchConsoleForStrictMode:FA,updateComponentFilters:O4}}function kT(N){return!T9(N)}function xT(N,R,f){if(N==null)return function(){};var U=[N.sub("renderer-attached",function(C1){var{id:w1,renderer:x,rendererInterface:X1}=C1;R.setRendererInterface(w1,X1),X1.flushInitialOperations()}),N.sub("unsupported-renderer-version",function(C1){R.onUnsupportedRenderer(C1)}),N.sub("fastRefreshScheduled",R.onFastRefreshScheduled),N.sub("operations",R.onHookOperations),N.sub("traceUpdates",R.onTraceUpdates)],v=function C1(w1,x){if(!kT(x.reconcilerVersion||x.version))return;var X1=N.rendererInterfaces.get(w1);if(X1==null){if(typeof x.findFiberByHostInstance==="function")X1=ST(N,w1,x,f);else if(x.ComponentTree)X1=jT(N,w1,x,f);if(X1!=null)N.rendererInterfaces.set(w1,X1)}if(X1!=null)N.emit("renderer-attached",{id:w1,renderer:x,rendererInterface:X1});else N.emit("unsupported-renderer-version",w1)};N.renderers.forEach(function(C1,w1){v(w1,C1)}),U.push(N.sub("renderer",function(C1){var{id:w1,renderer:x}=C1;v(w1,x)})),N.emit("react-devtools",R),N.reactDevtoolsAgent=R;var m=function C1(){U.forEach(function(w1){return w1()}),N.rendererInterfaces.forEach(function(w1){w1.cleanup()}),N.reactDevtoolsAgent=null};return R.addListener("shutdown",m),U.push(function(){R.removeListener("shutdown",m)}),function(){U.forEach(function(C1){return C1()})}}function BF(N,R){var f=!1,U={bottom:0,left:0,right:0,top:0},v=R[N];if(v!=null){for(var m=0,C1=Object.keys(U);m1?f-1:0),v=1;v=0)g5.splice(_6,1)}},send:function G4(t5,_6,u8){if(Z5.readyState===Z5.OPEN){if(J)L5("wall.send()",t5,_6);Z5.send(JSON.stringify({event:t5,payload:_6}))}else{if(J)L5("wall.send()","Shutting down bridge because of closed WebSocket connection");if(V2!==null)V2.shutdown();U5()}}}),V2.addListener("updateComponentFilters",function(G4){Z2=G4}),x0!=null&&V2!=null)V2.addListener("updateConsolePatchSettings",function(G4){return J2(x0,G4)});if(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null)V2.send("overrideComponentFilters",Z2);var J4=new lT(V2);if(J4.addListener("shutdown",function(){l2.emit("shutdown")}),xT(l2,J4,window),P1!=null||l2.resolveRNStyle!=null)D(V2,J4,P1||l2.resolveRNStyle,v||l2.nativeStyleEditorValidAttributes||null);else{var Y6,_3,r9=function G4(){if(V2!==null)D(V2,J4,Y6,_3)};if(!l2.hasOwnProperty("resolveRNStyle"))Object.defineProperty(l2,"resolveRNStyle",{enumerable:!1,get:function G4(){return Y6},set:function G4(t5){Y6=t5,r9()}});if(!l2.hasOwnProperty("nativeStyleEditorValidAttributes"))Object.defineProperty(l2,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function G4(){return _3},set:function G4(t5){_3=t5,r9()}})}};function w9(){if(J)L5("WebSocket.onclose");if(V2!==null)V2.emit("shutdown");U5()}function e5(){if(J)L5("WebSocket.onerror");U5()}function t3(J4){var Y6;try{if(typeof J4.data==="string"){if(Y6=JSON.parse(J4.data),J)L5("WebSocket.onmessage",Y6)}else throw Error()}catch(_3){console.error("[React DevTools] Failed to parse JSON: "+J4.data);return}g5.forEach(function(_3){try{_3(Y6)}catch(r9){throw console.log("[React DevTools] Error calling listener",Y6),console.log("error:",r9),r9}})}}})(),Z})()})});var oD4={};var zc1;var Qc1=Gw(()=>{Kc1();zc1=J1(Nc1(),1);zc1.default.connectToDevTools()});var vc1=Y((aS9,IH4)=>{IH4.exports={single:{topLeft:"┌",top:"─",topRight:"┐",right:"│",bottomRight:"┘",bottom:"─",bottomLeft:"└",left:"│"},double:{topLeft:"╔",top:"═",topRight:"╗",right:"║",bottomRight:"╝",bottom:"═",bottomLeft:"╚",left:"║"},round:{topLeft:"╭",top:"─",topRight:"╮",right:"│",bottomRight:"╯",bottom:"─",bottomLeft:"╰",left:"│"},bold:{topLeft:"┏",top:"━",topRight:"┓",right:"┃",bottomRight:"┛",bottom:"━",bottomLeft:"┗",left:"┃"},singleDouble:{topLeft:"╓",top:"─",topRight:"╖",right:"║",bottomRight:"╜",bottom:"─",bottomLeft:"╙",left:"║"},doubleSingle:{topLeft:"╒",top:"═",topRight:"╕",right:"│",bottomRight:"╛",bottom:"═",bottomLeft:"╘",left:"│"},classic:{topLeft:"+",top:"-",topRight:"+",right:"|",bottomRight:"+",bottom:"-",bottomLeft:"+",left:"|"},arrow:{topLeft:"↘",top:"↓",topRight:"↙",right:"←",bottomRight:"↖",bottom:"↑",bottomLeft:"↗",left:"→"}}});var Mc1=Y((sS9,_91)=>{var Ec1=vc1();_91.exports=Ec1;_91.exports.default=Ec1});var jc1=Y((iL9,f91)=>{var hc1=(I,d)=>{for(let G of Reflect.ownKeys(d))Object.defineProperty(I,G,Object.getOwnPropertyDescriptor(d,G));return I};f91.exports=hc1;f91.exports.default=hc1});var xc1=Y((nL9,xj)=>{var zH4=jc1(),kj=new WeakMap,kc1=(I,d={})=>{if(typeof I!=="function")throw new TypeError("Expected a function");let G,Z=0,C=I.displayName||I.name||"",W=function(...w){if(kj.set(W,++Z),Z===1)G=I.apply(this,w),I=null;else if(d.throw===!0)throw new Error(`Function \`${C}\` can only be called once`);return G};return zH4(W,I),kj.set(W,Z),W};xj.exports=kc1;xj.exports.default=kc1;xj.exports.callCount=(I)=>{if(!kj.has(I))throw new Error(`The given function \`${I.name}\` is not wrapped by the \`onetime\` package`);return kj.get(I)}});var cc1=Y((rL9,cj)=>{cj.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];if(process.platform!=="win32")cj.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")cj.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var ac1=Y((aL9,VQ)=>{var G3=global.process,Kg=function(I){return I&&typeof I==="object"&&typeof I.removeListener==="function"&&typeof I.emit==="function"&&typeof I.reallyExit==="function"&&typeof I.listeners==="function"&&typeof I.kill==="function"&&typeof I.pid==="number"&&typeof I.on==="function"};if(!Kg(G3))VQ.exports=function(){return function(){}};else{if(pc1=B1("assert"),BQ=cc1(),ic1=/^win/i.test(G3.platform),hM=B1("events"),typeof hM!=="function")hM=hM.EventEmitter;if(G3.__signal_exit_emitter__)_8=G3.__signal_exit_emitter__;else _8=G3.__signal_exit_emitter__=new hM,_8.count=0,_8.emitted={};if(!_8.infinite)_8.setMaxListeners(1/0),_8.infinite=!0;VQ.exports=function(I,d){if(!Kg(global.process))return function(){};if(pc1.equal(typeof I,"function","a callback must be provided for exit handler"),AQ===!1)q91();var G="exit";if(d&&d.alwaysLast)G="afterexit";var Z=function(){if(_8.removeListener(G,I),_8.listeners("exit").length===0&&_8.listeners("afterexit").length===0)pj()};return _8.on(G,I),Z},pj=function I(){if(!AQ||!Kg(global.process))return;AQ=!1,BQ.forEach(function(d){try{G3.removeListener(d,ij[d])}catch(G){}}),G3.emit=nj,G3.reallyExit=R91,_8.count-=1},VQ.exports.unload=pj,Ng=function I(d,G,Z){if(_8.emitted[d])return;_8.emitted[d]=!0,_8.emit(d,G,Z)},ij={},BQ.forEach(function(I){ij[I]=function d(){if(!Kg(global.process))return;var G=G3.listeners(I);if(G.length===_8.count){if(pj(),Ng("exit",null,I),Ng("afterexit",null,I),ic1&&I==="SIGHUP")I="SIGINT";G3.kill(G3.pid,I)}}}),VQ.exports.signals=function(){return BQ},AQ=!1,q91=function I(){if(AQ||!Kg(global.process))return;AQ=!0,_8.count+=1,BQ=BQ.filter(function(d){try{return G3.on(d,ij[d]),!0}catch(G){return!1}}),G3.emit=rc1,G3.reallyExit=nc1},VQ.exports.load=q91,R91=G3.reallyExit,nc1=function I(d){if(!Kg(global.process))return;G3.exitCode=d||0,Ng("exit",G3.exitCode,null),Ng("afterexit",G3.exitCode,null),R91.call(G3,G3.exitCode)},nj=G3.emit,rc1=function I(d,G){if(d==="exit"&&Kg(global.process)){if(G!==void 0)G3.exitCode=G;var Z=nj.apply(this,arguments);return Ng("exit",G3.exitCode,null),Ng("afterexit",G3.exitCode,null),Z}else return nj.apply(this,arguments)}}var pc1,BQ,ic1,hM,_8,pj,Ng,ij,AQ,q91,R91,nc1,nj,rc1});var _p1=Y((Hy9,Yp1)=>{var LH4=/[|\\{}()[\]^$+*?.-]/g;Yp1.exports=(I)=>{if(typeof I!=="string")throw new TypeError("Expected a string");return I.replace(LH4,"\\$&")}});var gp1=Y((Fy9,Fp1)=>{var yH4=_p1(),PH4=typeof process==="object"&&process&&typeof process.cwd==="function"?process.cwd():".",Hp1=[].concat(B1("module").builtinModules,"bootstrap_node","node").map((I)=>new RegExp(`(?:\\((?:node:)?${I}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${I}(?:\\.js)?:\\d+:\\d+$)`));Hp1.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);class M91{constructor(I){if(I={ignoredPackages:[],...I},"internals"in I===!1)I.internals=M91.nodeInternals();if("cwd"in I===!1)I.cwd=PH4;this._cwd=I.cwd.replace(/\\/g,"/"),this._internals=[].concat(I.internals,$H4(I.ignoredPackages)),this._wrapCallSite=I.wrapCallSite||!1}static nodeInternals(){return[...Hp1]}clean(I,d=0){if(d=" ".repeat(d),!Array.isArray(I))I=I.split(` +`);if(!/^\s*at /.test(I[0])&&/^\s*at /.test(I[1]))I=I.slice(1);let G=!1,Z=null,C=[];return I.forEach((W)=>{if(W=W.replace(/\\/g,"/"),this._internals.some((B)=>B.test(W)))return;let w=/^\s*at /.test(W);if(G)W=W.trimEnd().replace(/^(\s+)at /,"$1");else if(W=W.trim(),w)W=W.slice(3);if(W=W.replace(`${this._cwd}/`,""),W)if(w){if(Z)C.push(Z),Z=null;C.push(W)}else G=!0,Z=W}),C.map((W)=>`${d}${W} +`).join("")}captureString(I,d=this.captureString){if(typeof I==="function")d=I,I=1/0;let{stackTraceLimit:G}=Error;if(I)Error.stackTraceLimit=I;let Z={};Error.captureStackTrace(Z,d);let{stack:C}=Z;return Error.stackTraceLimit=G,this.clean(C)}capture(I,d=this.capture){if(typeof I==="function")d=I,I=1/0;let{prepareStackTrace:G,stackTraceLimit:Z}=Error;if(Error.prepareStackTrace=(w,B)=>{if(this._wrapCallSite)return B.map(this._wrapCallSite);return B},I)Error.stackTraceLimit=I;let C={};Error.captureStackTrace(C,d);let{stack:W}=C;return Object.assign(Error,{prepareStackTrace:G,stackTraceLimit:Z}),W}at(I=this.at){let[d]=this.capture(1,I);if(!d)return{};let G={line:d.getLineNumber(),column:d.getColumnNumber()};if(Dp1(G,d.getFileName(),this._cwd),d.isConstructor())Object.defineProperty(G,"constructor",{value:!0,configurable:!0});if(d.isEval())G.evalOrigin=d.getEvalOrigin();if(d.isNative())G.native=!0;let Z;try{Z=d.getTypeName()}catch(w){}if(Z&&Z!=="Object"&&Z!=="[object Object]")G.type=Z;let C=d.getFunctionName();if(C)G.function=C;let W=d.getMethodName();if(W&&C!==W)G.method=W;return G}parseLine(I){let d=I&&I.match(uH4);if(!d)return null;let G=d[1]==="new",Z=d[2],C=d[3],W=d[4],w=Number(d[5]),B=Number(d[6]),A=d[7],V=d[8],X=d[9],_=d[10]==="native",F=d[11]===")",g,J={};if(V)J.line=Number(V);if(X)J.column=Number(X);if(F&&A){let K=0;for(let Q=A.length-1;Q>0;Q--)if(A.charAt(Q)===")")K++;else if(A.charAt(Q)==="("&&A.charAt(Q-1)===" "){if(K--,K===-1&&A.charAt(Q-1)===" "){let E=A.slice(0,Q-1);A=A.slice(Q+1),Z+=` (${E}`;break}}}if(Z){let K=Z.match(TH4);if(K)Z=K[1],g=K[2]}if(Dp1(J,A,this._cwd),G)Object.defineProperty(J,"constructor",{value:!0,configurable:!0});if(C)J.evalOrigin=C,J.evalLine=w,J.evalColumn=B,J.evalFile=W&&W.replace(/\\/g,"/");if(_)J.native=!0;if(Z)J.function=Z;if(g&&Z!==g)J.method=g;return J}}function Dp1(I,d,G){if(d){if(d=d.replace(/\\/g,"/"),d.startsWith(`${G}/`))d=d.slice(G.length+1);I.file=d}}function $H4(I){if(I.length===0)return[];let d=I.map((G)=>yH4(G));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${d.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var uH4=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),TH4=/^(.*?) \[as (.*?)\]$/;Fp1.exports=M91});var Tp1=Y((aP9,up1)=>{var VF4=function I(d){return XF4(d)&&!YF4(d)};function XF4(I){return!!I&&typeof I==="object"}function YF4(I){var d=Object.prototype.toString.call(I);return d==="[object RegExp]"||d==="[object Date]"||HF4(I)}var _F4=typeof Symbol==="function"&&Symbol.for,DF4=_F4?Symbol.for("react.element"):60103;function HF4(I){return I.$$typeof===DF4}function FF4(I){return Array.isArray(I)?[]:{}}function jM(I,d){return d.clone!==!1&&d.isMergeableObject(I)?HQ(FF4(I),I,d):I}function gF4(I,d,G){return I.concat(d).map(function(Z){return jM(Z,G)})}function JF4(I,d){if(!d.customMerge)return HQ;var G=d.customMerge(I);return typeof G==="function"?G:HQ}function KF4(I){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(I).filter(function(d){return Object.propertyIsEnumerable.call(I,d)}):[]}function Pp1(I){return Object.keys(I).concat(KF4(I))}function $p1(I,d){try{return d in I}catch(G){return!1}}function NF4(I,d){return $p1(I,d)&&!(Object.hasOwnProperty.call(I,d)&&Object.propertyIsEnumerable.call(I,d))}function zF4(I,d,G){var Z={};if(G.isMergeableObject(I))Pp1(I).forEach(function(C){Z[C]=jM(I[C],G)});return Pp1(d).forEach(function(C){if(NF4(I,C))return;if($p1(I,C)&&G.isMergeableObject(d[C]))Z[C]=JF4(C,G)(I[C],d[C],G);else Z[C]=jM(d[C],G)}),Z}function HQ(I,d,G){G=G||{},G.arrayMerge=G.arrayMerge||gF4,G.isMergeableObject=G.isMergeableObject||VF4,G.cloneUnlessOtherwiseSpecified=jM;var Z=Array.isArray(d),C=Array.isArray(I),W=Z===C;if(!W)return jM(d,G);else if(Z)return G.arrayMerge(I,d,G);else return zF4(I,d,G)}HQ.all=function I(d,G){if(!Array.isArray(d))throw new Error("first argument should be an array");return d.reduce(function(Z,C){return HQ(Z,C,G)},{})};var QF4=HQ;up1.exports=QF4});var Fk=Y((X4,Fi1)=>{X4=Fi1.exports=u4;var c5;if(typeof process==="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG))c5=function(){var I=Array.prototype.slice.call(arguments,0);I.unshift("SEMVER"),console.log.apply(console,I)};else c5=function(){};X4.SEMVER_SPEC_VERSION="2.0.0";var nM=256,Yk=Number.MAX_SAFE_INTEGER||9007199254740991,b91=16,Jg4=nM-6,QQ=X4.re=[],x5=X4.safeRe=[],K0=X4.src=[],d0=X4.tokens={},Di1=0;function i4(I){d0[I]=Di1++}var j91="[a-zA-Z0-9-]",h91=[["\\s",1],["\\d",nM],[j91,Jg4]];function aM(I){for(var d=0;d)?=?)";i4("XRANGEIDENTIFIERLOOSE");K0[d0.XRANGEIDENTIFIERLOOSE]=K0[d0.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*";i4("XRANGEIDENTIFIER");K0[d0.XRANGEIDENTIFIER]=K0[d0.NUMERICIDENTIFIER]+"|x|X|\\*";i4("XRANGEPLAIN");K0[d0.XRANGEPLAIN]="[v=\\s]*("+K0[d0.XRANGEIDENTIFIER]+")(?:\\.("+K0[d0.XRANGEIDENTIFIER]+")(?:\\.("+K0[d0.XRANGEIDENTIFIER]+")(?:"+K0[d0.PRERELEASE]+")?"+K0[d0.BUILD]+"?)?)?";i4("XRANGEPLAINLOOSE");K0[d0.XRANGEPLAINLOOSE]="[v=\\s]*("+K0[d0.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+K0[d0.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+K0[d0.XRANGEIDENTIFIERLOOSE]+")(?:"+K0[d0.PRERELEASELOOSE]+")?"+K0[d0.BUILD]+"?)?)?";i4("XRANGE");K0[d0.XRANGE]="^"+K0[d0.GTLT]+"\\s*"+K0[d0.XRANGEPLAIN]+"$";i4("XRANGELOOSE");K0[d0.XRANGELOOSE]="^"+K0[d0.GTLT]+"\\s*"+K0[d0.XRANGEPLAINLOOSE]+"$";i4("COERCE");K0[d0.COERCE]="(^|[^\\d])(\\d{1,"+b91+"})(?:\\.(\\d{1,"+b91+"}))?(?:\\.(\\d{1,"+b91+"}))?(?:$|[^\\d])";i4("COERCERTL");QQ[d0.COERCERTL]=new RegExp(K0[d0.COERCE],"g");x5[d0.COERCERTL]=new RegExp(aM(K0[d0.COERCE]),"g");i4("LONETILDE");K0[d0.LONETILDE]="(?:~>?)";i4("TILDETRIM");K0[d0.TILDETRIM]="(\\s*)"+K0[d0.LONETILDE]+"\\s+";QQ[d0.TILDETRIM]=new RegExp(K0[d0.TILDETRIM],"g");x5[d0.TILDETRIM]=new RegExp(aM(K0[d0.TILDETRIM]),"g");var Kg4="$1~";i4("TILDE");K0[d0.TILDE]="^"+K0[d0.LONETILDE]+K0[d0.XRANGEPLAIN]+"$";i4("TILDELOOSE");K0[d0.TILDELOOSE]="^"+K0[d0.LONETILDE]+K0[d0.XRANGEPLAINLOOSE]+"$";i4("LONECARET");K0[d0.LONECARET]="(?:\\^)";i4("CARETTRIM");K0[d0.CARETTRIM]="(\\s*)"+K0[d0.LONECARET]+"\\s+";QQ[d0.CARETTRIM]=new RegExp(K0[d0.CARETTRIM],"g");x5[d0.CARETTRIM]=new RegExp(aM(K0[d0.CARETTRIM]),"g");var Ng4="$1^";i4("CARET");K0[d0.CARET]="^"+K0[d0.LONECARET]+K0[d0.XRANGEPLAIN]+"$";i4("CARETLOOSE");K0[d0.CARETLOOSE]="^"+K0[d0.LONECARET]+K0[d0.XRANGEPLAINLOOSE]+"$";i4("COMPARATORLOOSE");K0[d0.COMPARATORLOOSE]="^"+K0[d0.GTLT]+"\\s*("+K0[d0.LOOSEPLAIN]+")$|^$";i4("COMPARATOR");K0[d0.COMPARATOR]="^"+K0[d0.GTLT]+"\\s*("+K0[d0.FULLPLAIN]+")$|^$";i4("COMPARATORTRIM");K0[d0.COMPARATORTRIM]="(\\s*)"+K0[d0.GTLT]+"\\s*("+K0[d0.LOOSEPLAIN]+"|"+K0[d0.XRANGEPLAIN]+")";QQ[d0.COMPARATORTRIM]=new RegExp(K0[d0.COMPARATORTRIM],"g");x5[d0.COMPARATORTRIM]=new RegExp(aM(K0[d0.COMPARATORTRIM]),"g");var zg4="$1$2$3";i4("HYPHENRANGE");K0[d0.HYPHENRANGE]="^\\s*("+K0[d0.XRANGEPLAIN]+")\\s+-\\s+("+K0[d0.XRANGEPLAIN]+")\\s*$";i4("HYPHENRANGELOOSE");K0[d0.HYPHENRANGELOOSE]="^\\s*("+K0[d0.XRANGEPLAINLOOSE]+")\\s+-\\s+("+K0[d0.XRANGEPLAINLOOSE]+")\\s*$";i4("STAR");K0[d0.STAR]="(<|>)?=?\\s*\\*";for(lw=0;lwnM)return null;var G=d.loose?x5[d0.LOOSE]:x5[d0.FULL];if(!G.test(I))return null;try{return new u4(I,d)}catch(Z){return null}}X4.valid=Qg4;function Qg4(I,d){var G=Qg(I,d);return G?G.version:null}X4.clean=fg4;function fg4(I,d){var G=Qg(I.trim().replace(/^[=v]+/,""),d);return G?G.version:null}X4.SemVer=u4;function u4(I,d){if(!d||typeof d!=="object")d={loose:!!d,includePrerelease:!1};if(I instanceof u4)if(I.loose===d.loose)return I;else I=I.version;else if(typeof I!=="string")throw new TypeError("Invalid Version: "+I);if(I.length>nM)throw new TypeError("version is longer than "+nM+" characters");if(!(this instanceof u4))return new u4(I,d);c5("SemVer",I,d),this.options=d,this.loose=!!d.loose;var G=I.trim().match(d.loose?x5[d0.LOOSE]:x5[d0.FULL]);if(!G)throw new TypeError("Invalid Version: "+I);if(this.raw=I,this.major=+G[1],this.minor=+G[2],this.patch=+G[3],this.major>Yk||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Yk||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Yk||this.patch<0)throw new TypeError("Invalid patch version");if(!G[4])this.prerelease=[];else this.prerelease=G[4].split(".").map(function(Z){if(/^[0-9]+$/.test(Z)){var C=+Z;if(C>=0&&C=0)if(typeof this.prerelease[G]==="number")this.prerelease[G]++,G=-2;if(G===-1)this.prerelease.push(0)}if(d)if(this.prerelease[0]===d){if(isNaN(this.prerelease[1]))this.prerelease=[d,0]}else this.prerelease=[d,0];break;default:throw new Error("invalid increment argument: "+I)}return this.format(),this.raw=this.version,this};X4.inc=qg4;function qg4(I,d,G,Z){if(typeof G==="string")Z=G,G=void 0;try{return new u4(I,G).inc(d,Z).version}catch(C){return null}}X4.diff=Rg4;function Rg4(I,d){if(k91(I,d))return null;else{var G=Qg(I),Z=Qg(d),C="";if(G.prerelease.length||Z.prerelease.length){C="pre";var W="prerelease"}for(var w in G)if(w==="major"||w==="minor"||w==="patch"){if(G[w]!==Z[w])return C+w}return W}}X4.compareIdentifiers=zg;var Yi1=/^[0-9]+$/;function zg(I,d){var G=Yi1.test(I),Z=Yi1.test(d);if(G&&Z)I=+I,d=+d;return I===d?0:G&&!Z?-1:Z&&!G?1:I0}X4.lt=_k;function _k(I,d,G){return GV(I,d,G)<0}X4.eq=k91;function k91(I,d,G){return GV(I,d,G)===0}X4.neq=Hi1;function Hi1(I,d,G){return GV(I,d,G)!==0}X4.gte=x91;function x91(I,d,G){return GV(I,d,G)>=0}X4.lte=c91;function c91(I,d,G){return GV(I,d,G)<=0}X4.cmp=Dk;function Dk(I,d,G,Z){switch(d){case"===":if(typeof I==="object")I=I.version;if(typeof G==="object")G=G.version;return I===G;case"!==":if(typeof I==="object")I=I.version;if(typeof G==="object")G=G.version;return I!==G;case"":case"=":case"==":return k91(I,G,Z);case"!=":return Hi1(I,G,Z);case">":return rM(I,G,Z);case">=":return x91(I,G,Z);case"<":return _k(I,G,Z);case"<=":return c91(I,G,Z);default:throw new TypeError("Invalid operator: "+d)}}X4.Comparator=AZ;function AZ(I,d){if(!d||typeof d!=="object")d={loose:!!d,includePrerelease:!1};if(I instanceof AZ)if(I.loose===!!d.loose)return I;else I=I.value;if(!(this instanceof AZ))return new AZ(I,d);if(I=I.trim().split(/\s+/).join(" "),c5("comparator",I,d),this.options=d,this.loose=!!d.loose,this.parse(I),this.semver===fQ)this.value="";else this.value=this.operator+this.semver.version;c5("comp",this)}var fQ={};AZ.prototype.parse=function(I){var d=this.options.loose?x5[d0.COMPARATORLOOSE]:x5[d0.COMPARATOR],G=I.match(d);if(!G)throw new TypeError("Invalid comparator: "+I);if(this.operator=G[1]!==void 0?G[1]:"",this.operator==="=")this.operator="";if(!G[2])this.semver=fQ;else this.semver=new u4(G[2],this.options.loose)};AZ.prototype.toString=function(){return this.value};AZ.prototype.test=function(I){if(c5("Comparator.test",I,this.options.loose),this.semver===fQ||I===fQ)return!0;if(typeof I==="string")try{I=new u4(I,this.options)}catch(d){return!1}return Dk(I,this.operator,this.semver,this.options)};AZ.prototype.intersects=function(I,d){if(!(I instanceof AZ))throw new TypeError("a Comparator is required");if(!d||typeof d!=="object")d={loose:!!d,includePrerelease:!1};var G;if(this.operator===""){if(this.value==="")return!0;return G=new J3(I.value,d),Hk(this.value,G,d)}else if(I.operator===""){if(I.value==="")return!0;return G=new J3(this.value,d),Hk(I.semver,G,d)}var Z=(this.operator===">="||this.operator===">")&&(I.operator===">="||I.operator===">"),C=(this.operator==="<="||this.operator==="<")&&(I.operator==="<="||I.operator==="<"),W=this.semver.version===I.semver.version,w=(this.operator===">="||this.operator==="<=")&&(I.operator===">="||I.operator==="<="),B=Dk(this.semver,"<",I.semver,d)&&((this.operator===">="||this.operator===">")&&(I.operator==="<="||I.operator==="<")),A=Dk(this.semver,">",I.semver,d)&&((this.operator==="<="||this.operator==="<")&&(I.operator===">="||I.operator===">"));return Z||C||W&&w||B||A};X4.Range=J3;function J3(I,d){if(!d||typeof d!=="object")d={loose:!!d,includePrerelease:!1};if(I instanceof J3)if(I.loose===!!d.loose&&I.includePrerelease===!!d.includePrerelease)return I;else return new J3(I.raw,d);if(I instanceof AZ)return new J3(I.value,d);if(!(this instanceof J3))return new J3(I,d);if(this.options=d,this.loose=!!d.loose,this.includePrerelease=!!d.includePrerelease,this.raw=I.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(function(G){return this.parseRange(G.trim())},this).filter(function(G){return G.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+this.raw);this.format()}J3.prototype.format=function(){return this.range=this.set.map(function(I){return I.join(" ").trim()}).join("||").trim(),this.range};J3.prototype.toString=function(){return this.range};J3.prototype.parseRange=function(I){var d=this.options.loose,G=d?x5[d0.HYPHENRANGELOOSE]:x5[d0.HYPHENRANGE];I=I.replace(G,xg4),c5("hyphen replace",I),I=I.replace(x5[d0.COMPARATORTRIM],zg4),c5("comparator trim",I,x5[d0.COMPARATORTRIM]),I=I.replace(x5[d0.TILDETRIM],Kg4),I=I.replace(x5[d0.CARETTRIM],Ng4),I=I.split(/\s+/).join(" ");var Z=d?x5[d0.COMPARATORLOOSE]:x5[d0.COMPARATOR],C=I.split(" ").map(function(W){return Tg4(W,this.options)},this).join(" ").split(/\s+/);if(this.options.loose)C=C.filter(function(W){return!!W.match(Z)});return C=C.map(function(W){return new AZ(W,this.options)},this),C};J3.prototype.intersects=function(I,d){if(!(I instanceof J3))throw new TypeError("a Range is required");return this.set.some(function(G){return _i1(G,d)&&I.set.some(function(Z){return _i1(Z,d)&&G.every(function(C){return Z.every(function(W){return C.intersects(W,d)})})})})};function _i1(I,d){var G=!0,Z=I.slice(),C=Z.pop();while(G&&Z.length)G=Z.every(function(W){return C.intersects(W,d)}),C=Z.pop();return G}X4.toComparators=ug4;function ug4(I,d){return new J3(I,d).set.map(function(G){return G.map(function(Z){return Z.value}).join(" ").trim().split(" ")})}function Tg4(I,d){return c5("comp",I,d),I=lg4(I,d),c5("caret",I),I=Og4(I,d),c5("tildes",I),I=hg4(I,d),c5("xrange",I),I=kg4(I,d),c5("stars",I),I}function GI(I){return!I||I.toLowerCase()==="x"||I==="*"}function Og4(I,d){return I.trim().split(/\s+/).map(function(G){return mg4(G,d)}).join(" ")}function mg4(I,d){var G=d.loose?x5[d0.TILDELOOSE]:x5[d0.TILDE];return I.replace(G,function(Z,C,W,w,B){c5("tilde",I,Z,C,W,w,B);var A;if(GI(C))A="";else if(GI(W))A=">="+C+".0.0 <"+(+C+1)+".0.0";else if(GI(w))A=">="+C+"."+W+".0 <"+C+"."+(+W+1)+".0";else if(B)c5("replaceTilde pr",B),A=">="+C+"."+W+"."+w+"-"+B+" <"+C+"."+(+W+1)+".0";else A=">="+C+"."+W+"."+w+" <"+C+"."+(+W+1)+".0";return c5("tilde return",A),A})}function lg4(I,d){return I.trim().split(/\s+/).map(function(G){return bg4(G,d)}).join(" ")}function bg4(I,d){c5("caret",I,d);var G=d.loose?x5[d0.CARETLOOSE]:x5[d0.CARET];return I.replace(G,function(Z,C,W,w,B){c5("caret",I,Z,C,W,w,B);var A;if(GI(C))A="";else if(GI(W))A=">="+C+".0.0 <"+(+C+1)+".0.0";else if(GI(w))if(C==="0")A=">="+C+"."+W+".0 <"+C+"."+(+W+1)+".0";else A=">="+C+"."+W+".0 <"+(+C+1)+".0.0";else if(B)if(c5("replaceCaret pr",B),C==="0")if(W==="0")A=">="+C+"."+W+"."+w+"-"+B+" <"+C+"."+W+"."+(+w+1);else A=">="+C+"."+W+"."+w+"-"+B+" <"+C+"."+(+W+1)+".0";else A=">="+C+"."+W+"."+w+"-"+B+" <"+(+C+1)+".0.0";else if(c5("no pr"),C==="0")if(W==="0")A=">="+C+"."+W+"."+w+" <"+C+"."+W+"."+(+w+1);else A=">="+C+"."+W+"."+w+" <"+C+"."+(+W+1)+".0";else A=">="+C+"."+W+"."+w+" <"+(+C+1)+".0.0";return c5("caret return",A),A})}function hg4(I,d){return c5("replaceXRanges",I,d),I.split(/\s+/).map(function(G){return jg4(G,d)}).join(" ")}function jg4(I,d){I=I.trim();var G=d.loose?x5[d0.XRANGELOOSE]:x5[d0.XRANGE];return I.replace(G,function(Z,C,W,w,B,A){c5("xRange",I,Z,C,W,w,B,A);var V=GI(W),X=V||GI(w),_=X||GI(B),F=_;if(C==="="&&F)C="";if(A=d.includePrerelease?"-0":"",V)if(C===">"||C==="<")Z="<0.0.0-0";else Z="*";else if(C&&F){if(X)w=0;if(B=0,C===">")if(C=">=",X)W=+W+1,w=0,B=0;else w=+w+1,B=0;else if(C==="<=")if(C="<",X)W=+W+1;else w=+w+1;Z=C+W+"."+w+"."+B+A}else if(X)Z=">="+W+".0.0"+A+" <"+(+W+1)+".0.0"+A;else if(_)Z=">="+W+"."+w+".0"+A+" <"+W+"."+(+w+1)+".0"+A;return c5("xRange return",Z),Z})}function kg4(I,d){return c5("replaceStars",I,d),I.trim().replace(x5[d0.STAR],"")}function xg4(I,d,G,Z,C,W,w,B,A,V,X,_,F){if(GI(G))d="";else if(GI(Z))d=">="+G+".0.0";else if(GI(C))d=">="+G+"."+Z+".0";else d=">="+d;if(GI(A))B="";else if(GI(V))B="<"+(+A+1)+".0.0";else if(GI(X))B="<"+A+"."+(+V+1)+".0";else if(_)B="<="+A+"."+V+"."+X+"-"+_;else B="<="+B;return(d+" "+B).trim()}J3.prototype.test=function(I){if(!I)return!1;if(typeof I==="string")try{I=new u4(I,this.options)}catch(G){return!1}for(var d=0;d0){var C=I[Z].semver;if(C.major===d.major&&C.minor===d.minor&&C.patch===d.patch)return!0}}return!1}return!0}X4.satisfies=Hk;function Hk(I,d,G){try{d=new J3(d,G)}catch(Z){return!1}return d.test(I)}X4.maxSatisfying=pg4;function pg4(I,d,G){var Z=null,C=null;try{var W=new J3(d,G)}catch(w){return null}return I.forEach(function(w){if(W.test(w)){if(!Z||C.compare(w)===-1)Z=w,C=new u4(Z,G)}}),Z}X4.minSatisfying=ig4;function ig4(I,d,G){var Z=null,C=null;try{var W=new J3(d,G)}catch(w){return null}return I.forEach(function(w){if(W.test(w)){if(!Z||C.compare(w)===1)Z=w,C=new u4(Z,G)}}),Z}X4.minVersion=ng4;function ng4(I,d){I=new J3(I,d);var G=new u4("0.0.0");if(I.test(G))return G;if(G=new u4("0.0.0-0"),I.test(G))return G;G=null;for(var Z=0;Z":if(w.prerelease.length===0)w.patch++;else w.prerelease.push(0);w.raw=w.format();case"":case">=":if(!G||rM(G,w))G=w;break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+W.operator)}})}if(G&&I.test(G))return G;return null}X4.validRange=rg4;function rg4(I,d){try{return new J3(I,d).range||"*"}catch(G){return null}}X4.ltr=ag4;function ag4(I,d,G){return p91(I,d,"<",G)}X4.gtr=sg4;function sg4(I,d,G){return p91(I,d,">",G)}X4.outside=p91;function p91(I,d,G,Z){I=new u4(I,Z),d=new J3(d,Z);var C,W,w,B,A;switch(G){case">":C=rM,W=c91,w=_k,B=">",A=">=";break;case"<":C=_k,W=x91,w=rM,B="<",A="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Hk(I,d,Z))return!1;for(var V=0;V=0.0.0");if(_=_||g,F=F||g,C(g.semver,_.semver,Z))_=g;else if(w(g.semver,F.semver,Z))F=g}),_.operator===B||_.operator===A)return!1;if((!F.operator||F.operator===B)&&W(I,F.semver))return!1;else if(F.operator===A&&w(I,F.semver))return!1}return!0}X4.prerelease=og4;function og4(I,d){var G=Qg(I,d);return G&&G.prerelease.length?G.prerelease:null}X4.intersects=eg4;function eg4(I,d,G){return I=new J3(I,G),d=new J3(d,G),I.intersects(d)}X4.coerce=tg4;function tg4(I,d){if(I instanceof u4)return I;if(typeof I==="number")I=String(I);if(typeof I!=="string")return null;d=d||{};var G=null;if(!d.rtl)G=I.match(x5[d0.COERCE]);else{var Z;while((Z=x5[d0.COERCERTL].exec(I))&&(!G||G.index+G[0].length!==I.length)){if(!G||Z.index+Z[0].length!==G.index+G[0].length)G=Z;x5[d0.COERCERTL].lastIndex=Z.index+Z[1].length+Z[2].length}x5[d0.COERCERTL].lastIndex=-1}if(G===null)return null;return Qg(G[2]+"."+(G[3]||"0")+"."+(G[4]||"0"),d)}});var zi1=Y((cO9,Ni1)=>{Ni1.exports=Ji1;function Ji1(I,d,G){if(I instanceof RegExp)I=gi1(I,G);if(d instanceof RegExp)d=gi1(d,G);var Z=Ki1(I,d,G);return Z&&{start:Z[0],end:Z[1],pre:G.slice(0,Z[0]),body:G.slice(Z[0]+I.length,Z[1]),post:G.slice(Z[1]+d.length)}}function gi1(I,d){var G=d.match(I);return G?G[0]:null}Ji1.range=Ki1;function Ki1(I,d,G){var Z,C,W,w,B,A=G.indexOf(I),V=G.indexOf(d,A+1),X=A;if(A>=0&&V>0){if(I===d)return[A,V];Z=[],W=G.length;while(X>=0&&!B){if(X==A)Z.push(X),A=G.indexOf(I,X+1);else if(Z.length==1)B=[Z.pop(),V];else{if(C=Z.pop(),C=0?A:V}if(Z.length)B=[W,w]}return B}});var Mi1=Y((pO9,Ei1)=>{var Qi1=zi1();Ei1.exports=GJ4;var fi1="\x00SLASH"+Math.random()+"\x00",qi1="\x00OPEN"+Math.random()+"\x00",n91="\x00CLOSE"+Math.random()+"\x00",Ri1="\x00COMMA"+Math.random()+"\x00",Ui1="\x00PERIOD"+Math.random()+"\x00";function i91(I){return parseInt(I,10)==I?parseInt(I,10):I.charCodeAt(0)}function IJ4(I){return I.split("\\\\").join(fi1).split("\\{").join(qi1).split("\\}").join(n91).split("\\,").join(Ri1).split("\\.").join(Ui1)}function dJ4(I){return I.split(fi1).join("\\").split(qi1).join("{").split(n91).join("}").split(Ri1).join(",").split(Ui1).join(".")}function vi1(I){if(!I)return[""];var d=[],G=Qi1("{","}",I);if(!G)return I.split(",");var{pre:Z,body:C,post:W}=G,w=Z.split(",");w[w.length-1]+="{"+C+"}";var B=vi1(W);if(W.length)w[w.length-1]+=B.shift(),w.push.apply(w,B);return d.push.apply(d,w),d}function GJ4(I){if(!I)return[];if(I.substr(0,2)==="{}")I="\\{\\}"+I.substr(2);return sM(IJ4(I),!0).map(dJ4)}function ZJ4(I){return"{"+I+"}"}function CJ4(I){return/^-?0\d/.test(I)}function WJ4(I,d){return I<=d}function wJ4(I,d){return I>=d}function sM(I,d){var G=[],Z=Qi1("{","}",I);if(!Z)return[I];var C=Z.pre,W=Z.post.length?sM(Z.post,!1):[""];if(/\$$/.test(Z.pre))for(var w=0;w=0;if(!X&&!_){if(Z.post.match(/,.*\}/))return I=Z.pre+"{"+Z.body+n91+Z.post,sM(I);return[I]}var F;if(X)F=Z.body.split(/\.\./);else if(F=vi1(Z.body),F.length===1){if(F=sM(F[0],!1).map(ZJ4),F.length===1)return W.map(function(c1){return Z.pre+F[0]+c1})}var g;if(X){var J=i91(F[0]),K=i91(F[1]),Q=Math.max(F[0].length,F[1].length),E=F.length==3?Math.abs(i91(F[2])):1,S=WJ4,P=K0){var V1=new Array(T+1).join("0");if(h<0)O="-"+V1+O.slice(1);else O=V1+O}}g.push(O)}}else{g=[];for(var c=0;c{Object.defineProperty(Jn1,"__esModule",{value:!0});Jn1.isFunction=void 0;function EK4(I){return typeof I==="function"}Jn1.isFunction=EK4});var rY=Y((Nn1)=>{Object.defineProperty(Nn1,"__esModule",{value:!0});Nn1.createErrorClass=void 0;function MK4(I){var d=function(Z){Error.call(Z),Z.stack=new Error().stack},G=I(d);return G.prototype=Object.create(Error.prototype),G.prototype.constructor=G,G}Nn1.createErrorClass=MK4});var Y31=Y((Qn1)=>{Object.defineProperty(Qn1,"__esModule",{value:!0});Qn1.UnsubscriptionError=void 0;var SK4=rY();Qn1.UnsubscriptionError=SK4.createErrorClass(function(I){return function d(G){I(this),this.message=G?G.length+` errors occurred during unsubscription: +`+G.map(function(Z,C){return C+1+") "+Z.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=G}})});var wV=Y((qn1)=>{Object.defineProperty(qn1,"__esModule",{value:!0});qn1.arrRemove=void 0;function LK4(I,d){if(I){var G=I.indexOf(d);0<=G&&I.splice(G,1)}}qn1.arrRemove=LK4});var od=Y((eI)=>{var Un1=eI&&eI.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")},vn1=eI&&eI.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},En1=eI&&eI.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(Ln1,"__esModule",{value:!0});Ln1.config=void 0;Ln1.config={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}});var H31=Y((kw)=>{var Pn1=kw&&kw.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},$n1=kw&&kw.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(un1,"__esModule",{value:!0});un1.reportUnhandledError=void 0;var PK4=SQ(),$K4=H31();function uK4(I){$K4.timeoutProvider.setTimeout(function(){var d=PK4.config.onUnhandledError;if(d)d(I);else throw I})}un1.reportUnhandledError=uK4});var k8=Y((On1)=>{Object.defineProperty(On1,"__esModule",{value:!0});On1.noop=void 0;function TK4(){}On1.noop=TK4});var hn1=Y((ln1)=>{Object.defineProperty(ln1,"__esModule",{value:!0});ln1.createNotification=ln1.nextNotification=ln1.errorNotification=ln1.COMPLETE_NOTIFICATION=void 0;ln1.COMPLETE_NOTIFICATION=function(){return uk("C",void 0,void 0)}();function OK4(I){return uk("E",void 0,I)}ln1.errorNotification=OK4;function mK4(I){return uk("N",I,void 0)}ln1.nextNotification=mK4;function uk(I,d,G){return{kind:I,value:d,error:G}}ln1.createNotification=uk});var Tk=Y((kn1)=>{Object.defineProperty(kn1,"__esModule",{value:!0});kn1.captureError=kn1.errorContext=void 0;var jn1=SQ(),Ug=null;function jK4(I){if(jn1.config.useDeprecatedSynchronousErrorHandling){var d=!Ug;if(d)Ug={errorThrown:!1,error:null};if(I(),d){var G=Ug,Z=G.errorThrown,C=G.error;if(Ug=null,Z)throw C}}else I()}kn1.errorContext=jK4;function kK4(I){if(jn1.config.useDeprecatedSynchronousErrorHandling&&Ug)Ug.errorThrown=!0,Ug.error=I}kn1.captureError=kK4});var LQ=Y((uC)=>{var in1=uC&&uC.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(uC,"__esModule",{value:!0});uC.EMPTY_OBSERVER=uC.SafeSubscriber=uC.Subscriber=void 0;var cK4=d9(),cn1=od(),N31=SQ(),pK4=F31(),pn1=k8(),g31=hn1(),iK4=H31(),nK4=Tk(),nn1=function(I){in1(d,I);function d(G){var Z=I.call(this)||this;if(Z.isStopped=!1,G){if(Z.destination=G,cn1.isSubscription(G))G.add(Z)}else Z.destination=uC.EMPTY_OBSERVER;return Z}return d.create=function(G,Z,C){return new rn1(G,Z,C)},d.prototype.next=function(G){if(this.isStopped)K31(g31.nextNotification(G),this);else this._next(G)},d.prototype.error=function(G){if(this.isStopped)K31(g31.errorNotification(G),this);else this.isStopped=!0,this._error(G)},d.prototype.complete=function(){if(this.isStopped)K31(g31.COMPLETE_NOTIFICATION,this);else this.isStopped=!0,this._complete()},d.prototype.unsubscribe=function(){if(!this.closed)this.isStopped=!0,I.prototype.unsubscribe.call(this),this.destination=null},d.prototype._next=function(G){this.destination.next(G)},d.prototype._error=function(G){try{this.destination.error(G)}finally{this.unsubscribe()}},d.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},d}(cn1.Subscription);uC.Subscriber=nn1;var rK4=Function.prototype.bind;function J31(I,d){return rK4.call(I,d)}var aK4=function(){function I(d){this.partialObserver=d}return I.prototype.next=function(d){var G=this.partialObserver;if(G.next)try{G.next(d)}catch(Z){Ok(Z)}},I.prototype.error=function(d){var G=this.partialObserver;if(G.error)try{G.error(d)}catch(Z){Ok(Z)}else Ok(d)},I.prototype.complete=function(){var d=this.partialObserver;if(d.complete)try{d.complete()}catch(G){Ok(G)}},I}(),rn1=function(I){in1(d,I);function d(G,Z,C){var W=I.call(this)||this,w;if(cK4.isFunction(G)||!G)w={next:G!==null&&G!==void 0?G:void 0,error:Z!==null&&Z!==void 0?Z:void 0,complete:C!==null&&C!==void 0?C:void 0};else{var B;if(W&&N31.config.useDeprecatedNextContext)B=Object.create(G),B.unsubscribe=function(){return W.unsubscribe()},w={next:G.next&&J31(G.next,B),error:G.error&&J31(G.error,B),complete:G.complete&&J31(G.complete,B)};else w=G}return W.destination=new aK4(w),W}return d}(nn1);uC.SafeSubscriber=rn1;function Ok(I){if(N31.config.useDeprecatedSynchronousErrorHandling)nK4.captureError(I);else pK4.reportUnhandledError(I)}function sK4(I){throw I}function K31(I,d){var G=N31.config.onStoppedNotification;G&&iK4.timeoutProvider.setTimeout(function(){return G(I,d)})}uC.EMPTY_OBSERVER={closed:!0,next:pn1.noop,error:sK4,complete:pn1.noop}});var DS=Y((an1)=>{Object.defineProperty(an1,"__esModule",{value:!0});an1.observable=void 0;an1.observable=function(){return typeof Symbol==="function"&&Symbol.observable||"@@observable"}()});var x8=Y((on1)=>{Object.defineProperty(on1,"__esModule",{value:!0});on1.identity=void 0;function oK4(I){return I}on1.identity=oK4});var HS=Y((Ir1)=>{Object.defineProperty(Ir1,"__esModule",{value:!0});Ir1.pipeFromArray=Ir1.pipe=void 0;var eK4=x8();function tK4(){var I=[];for(var d=0;d{Object.defineProperty(Zr1,"__esModule",{value:!0});Zr1.Observable=void 0;var Q31=LQ(),dN4=od(),GN4=DS(),ZN4=HS(),CN4=SQ(),z31=d9(),WN4=Tk(),wN4=function(){function I(d){if(d)this._subscribe=d}return I.prototype.lift=function(d){var G=new I;return G.source=this,G.operator=d,G},I.prototype.subscribe=function(d,G,Z){var C=this,W=AN4(d)?d:new Q31.SafeSubscriber(d,G,Z);return WN4.errorContext(function(){var w=C,B=w.operator,A=w.source;W.add(B?B.call(W,A):A?C._subscribe(W):C._trySubscribe(W))}),W},I.prototype._trySubscribe=function(d){try{return this._subscribe(d)}catch(G){d.error(G)}},I.prototype.forEach=function(d,G){var Z=this;return G=Gr1(G),new G(function(C,W){var w=new Q31.SafeSubscriber({next:function(B){try{d(B)}catch(A){W(A),w.unsubscribe()}},error:W,complete:C});Z.subscribe(w)})},I.prototype._subscribe=function(d){var G;return(G=this.source)===null||G===void 0?void 0:G.subscribe(d)},I.prototype[GN4.observable]=function(){return this},I.prototype.pipe=function(){var d=[];for(var G=0;G{Object.defineProperty(wr1,"__esModule",{value:!0});wr1.operate=wr1.hasLift=void 0;var VN4=d9();function Wr1(I){return VN4.isFunction(I===null||I===void 0?void 0:I.lift)}wr1.hasLift=Wr1;function XN4(I){return function(d){if(Wr1(d))return d.lift(function(G){try{return I(G,this)}catch(Z){this.error(Z)}});throw new TypeError("Unable to lift unknown Observable type")}}wr1.operate=XN4});var E2=Y((aY)=>{var _N4=aY&&aY.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(aY,"__esModule",{value:!0});aY.OperatorSubscriber=aY.createOperatorSubscriber=void 0;var DN4=LQ();function HN4(I,d,G,Z,C){return new Ar1(I,d,G,Z,C)}aY.createOperatorSubscriber=HN4;var Ar1=function(I){_N4(d,I);function d(G,Z,C,W,w,B){var A=I.call(this,G)||this;return A.onFinalize=w,A.shouldUnsubscribe=B,A._next=Z?function(V){try{Z(V)}catch(X){G.error(X)}}:I.prototype._next,A._error=W?function(V){try{W(V)}catch(X){G.error(X)}finally{this.unsubscribe()}}:I.prototype._error,A._complete=C?function(){try{C()}catch(V){G.error(V)}finally{this.unsubscribe()}}:I.prototype._complete,A}return d.prototype.unsubscribe=function(){var G;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var Z=this.closed;I.prototype.unsubscribe.call(this),!Z&&((G=this.onFinalize)===null||G===void 0||G.call(this))}},d}(DN4.Subscriber);aY.OperatorSubscriber=Ar1});var mk=Y((Vr1)=>{Object.defineProperty(Vr1,"__esModule",{value:!0});Vr1.refCount=void 0;var FN4=X2(),gN4=E2();function JN4(){return FN4.operate(function(I,d){var G=null;I._refCount++;var Z=gN4.createOperatorSubscriber(d,void 0,void 0,void 0,function(){if(!I||I._refCount<=0||0<--I._refCount){G=null;return}var C=I._connection,W=G;if(G=null,C&&(!W||C===W))C.unsubscribe();d.unsubscribe()});if(I.subscribe(Z),!Z.closed)G=I.connect()})}Vr1.refCount=JN4});var FS=Y((yQ)=>{var KN4=yQ&&yQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(yQ,"__esModule",{value:!0});yQ.ConnectableObservable=void 0;var NN4=B9(),Yr1=od(),zN4=mk(),QN4=E2(),fN4=X2(),qN4=function(I){KN4(d,I);function d(G,Z){var C=I.call(this)||this;if(C.source=G,C.subjectFactory=Z,C._subject=null,C._refCount=0,C._connection=null,fN4.hasLift(G))C.lift=G.lift;return C}return d.prototype._subscribe=function(G){return this.getSubject().subscribe(G)},d.prototype.getSubject=function(){var G=this._subject;if(!G||G.isStopped)this._subject=this.subjectFactory();return this._subject},d.prototype._teardown=function(){this._refCount=0;var G=this._connection;this._subject=this._connection=null,G===null||G===void 0||G.unsubscribe()},d.prototype.connect=function(){var G=this,Z=this._connection;if(!Z){Z=this._connection=new Yr1.Subscription;var C=this.getSubject();if(Z.add(this.source.subscribe(QN4.createOperatorSubscriber(C,void 0,function(){G._teardown(),C.complete()},function(W){G._teardown(),C.error(W)},function(){return G._teardown()}))),Z.closed)this._connection=null,Z=Yr1.Subscription.EMPTY}return Z},d.prototype.refCount=function(){return zN4.refCount()(this)},d}(NN4.Observable);yQ.ConnectableObservable=qN4});var Dr1=Y((_r1)=>{Object.defineProperty(_r1,"__esModule",{value:!0});_r1.performanceTimestampProvider=void 0;_r1.performanceTimestampProvider={now:function(){return(_r1.performanceTimestampProvider.delegate||performance).now()},delegate:void 0}});var q31=Y((TC)=>{var Hr1=TC&&TC.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},Fr1=TC&&TC.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(Kr1,"__esModule",{value:!0});Kr1.animationFrames=void 0;var UN4=B9(),vN4=Dr1(),gr1=q31();function EN4(I){return I?Jr1(I):MN4}Kr1.animationFrames=EN4;function Jr1(I){return new UN4.Observable(function(d){var G=I||vN4.performanceTimestampProvider,Z=G.now(),C=0,W=function(){if(!d.closed)C=gr1.animationFrameProvider.requestAnimationFrame(function(w){C=0;var B=G.now();d.next({timestamp:I?B:w,elapsed:B-Z}),W()})};return W(),function(){if(C)gr1.animationFrameProvider.cancelAnimationFrame(C)}})}var MN4=Jr1()});var R31=Y((Qr1)=>{Object.defineProperty(Qr1,"__esModule",{value:!0});Qr1.ObjectUnsubscribedError=void 0;var SN4=rY();Qr1.ObjectUnsubscribedError=SN4.createErrorClass(function(I){return function d(){I(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}})});var c8=Y((xw)=>{var Rr1=xw&&xw.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}(),LN4=xw&&xw.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(xw,"__esModule",{value:!0});xw.AnonymousSubject=xw.Subject=void 0;var qr1=B9(),v31=od(),yN4=R31(),PN4=wV(),U31=Tk(),Ur1=function(I){Rr1(d,I);function d(){var G=I.call(this)||this;return G.closed=!1,G.currentObservers=null,G.observers=[],G.isStopped=!1,G.hasError=!1,G.thrownError=null,G}return d.prototype.lift=function(G){var Z=new E31(this,this);return Z.operator=G,Z},d.prototype._throwIfClosed=function(){if(this.closed)throw new yN4.ObjectUnsubscribedError},d.prototype.next=function(G){var Z=this;U31.errorContext(function(){var C,W;if(Z._throwIfClosed(),!Z.isStopped){if(!Z.currentObservers)Z.currentObservers=Array.from(Z.observers);try{for(var w=LN4(Z.currentObservers),B=w.next();!B.done;B=w.next()){var A=B.value;A.next(G)}}catch(V){C={error:V}}finally{try{if(B&&!B.done&&(W=w.return))W.call(w)}finally{if(C)throw C.error}}}})},d.prototype.error=function(G){var Z=this;U31.errorContext(function(){if(Z._throwIfClosed(),!Z.isStopped){Z.hasError=Z.isStopped=!0,Z.thrownError=G;var C=Z.observers;while(C.length)C.shift().error(G)}})},d.prototype.complete=function(){var G=this;U31.errorContext(function(){if(G._throwIfClosed(),!G.isStopped){G.isStopped=!0;var Z=G.observers;while(Z.length)Z.shift().complete()}})},d.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(d.prototype,"observed",{get:function(){var G;return((G=this.observers)===null||G===void 0?void 0:G.length)>0},enumerable:!1,configurable:!0}),d.prototype._trySubscribe=function(G){return this._throwIfClosed(),I.prototype._trySubscribe.call(this,G)},d.prototype._subscribe=function(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)},d.prototype._innerSubscribe=function(G){var Z=this,C=this,W=C.hasError,w=C.isStopped,B=C.observers;if(W||w)return v31.EMPTY_SUBSCRIPTION;return this.currentObservers=null,B.push(G),new v31.Subscription(function(){Z.currentObservers=null,PN4.arrRemove(B,G)})},d.prototype._checkFinalizedStatuses=function(G){var Z=this,C=Z.hasError,W=Z.thrownError,w=Z.isStopped;if(C)G.error(W);else if(w)G.complete()},d.prototype.asObservable=function(){var G=new qr1.Observable;return G.source=this,G},d.create=function(G,Z){return new E31(G,Z)},d}(qr1.Observable);xw.Subject=Ur1;var E31=function(I){Rr1(d,I);function d(G,Z){var C=I.call(this)||this;return C.destination=G,C.source=Z,C}return d.prototype.next=function(G){var Z,C;(C=(Z=this.destination)===null||Z===void 0?void 0:Z.next)===null||C===void 0||C.call(Z,G)},d.prototype.error=function(G){var Z,C;(C=(Z=this.destination)===null||Z===void 0?void 0:Z.error)===null||C===void 0||C.call(Z,G)},d.prototype.complete=function(){var G,Z;(Z=(G=this.destination)===null||G===void 0?void 0:G.complete)===null||Z===void 0||Z.call(G)},d.prototype._subscribe=function(G){var Z,C;return(C=(Z=this.source)===null||Z===void 0?void 0:Z.subscribe(G))!==null&&C!==void 0?C:v31.EMPTY_SUBSCRIPTION},d}(Ur1);xw.AnonymousSubject=E31});var M31=Y((PQ)=>{var $N4=PQ&&PQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(PQ,"__esModule",{value:!0});PQ.BehaviorSubject=void 0;var uN4=c8(),TN4=function(I){$N4(d,I);function d(G){var Z=I.call(this)||this;return Z._value=G,Z}return Object.defineProperty(d.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),d.prototype._subscribe=function(G){var Z=I.prototype._subscribe.call(this,G);return!Z.closed&&G.next(this._value),Z},d.prototype.getValue=function(){var G=this,Z=G.hasError,C=G.thrownError,W=G._value;if(Z)throw C;return this._throwIfClosed(),W},d.prototype.next=function(G){I.prototype.next.call(this,this._value=G)},d}(uN4.Subject);PQ.BehaviorSubject=TN4});var lk=Y((vr1)=>{Object.defineProperty(vr1,"__esModule",{value:!0});vr1.dateTimestampProvider=void 0;vr1.dateTimestampProvider={now:function(){return(vr1.dateTimestampProvider.delegate||Date).now()},delegate:void 0}});var bk=Y(($Q)=>{var ON4=$Q&&$Q.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty($Q,"__esModule",{value:!0});$Q.ReplaySubject=void 0;var mN4=c8(),lN4=lk(),bN4=function(I){ON4(d,I);function d(G,Z,C){if(G===void 0)G=1/0;if(Z===void 0)Z=1/0;if(C===void 0)C=lN4.dateTimestampProvider;var W=I.call(this)||this;return W._bufferSize=G,W._windowTime=Z,W._timestampProvider=C,W._buffer=[],W._infiniteTimeWindow=!0,W._infiniteTimeWindow=Z===1/0,W._bufferSize=Math.max(1,G),W._windowTime=Math.max(1,Z),W}return d.prototype.next=function(G){var Z=this,C=Z.isStopped,W=Z._buffer,w=Z._infiniteTimeWindow,B=Z._timestampProvider,A=Z._windowTime;if(!C)W.push(G),!w&&W.push(B.now()+A);this._trimBuffer(),I.prototype.next.call(this,G)},d.prototype._subscribe=function(G){this._throwIfClosed(),this._trimBuffer();var Z=this._innerSubscribe(G),C=this,W=C._infiniteTimeWindow,w=C._buffer,B=w.slice();for(var A=0;A{var hN4=uQ&&uQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(uQ,"__esModule",{value:!0});uQ.AsyncSubject=void 0;var jN4=c8(),kN4=function(I){hN4(d,I);function d(){var G=I!==null&&I.apply(this,arguments)||this;return G._value=null,G._hasValue=!1,G._isComplete=!1,G}return d.prototype._checkFinalizedStatuses=function(G){var Z=this,C=Z.hasError,W=Z._hasValue,w=Z._value,B=Z.thrownError,A=Z.isStopped,V=Z._isComplete;if(C)G.error(B);else if(A||V)W&&G.next(w),G.complete()},d.prototype.next=function(G){if(!this.isStopped)this._value=G,this._hasValue=!0},d.prototype.complete=function(){var G=this,Z=G._hasValue,C=G._value,W=G._isComplete;if(!W)this._isComplete=!0,Z&&I.prototype.next.call(this,C),I.prototype.complete.call(this)},d}(jN4.Subject);uQ.AsyncSubject=kN4});var Er1=Y((TQ)=>{var xN4=TQ&&TQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(TQ,"__esModule",{value:!0});TQ.Action=void 0;var cN4=od(),pN4=function(I){xN4(d,I);function d(G,Z){return I.call(this)||this}return d.prototype.schedule=function(G,Z){if(Z===void 0)Z=0;return this},d}(cN4.Subscription);TQ.Action=pN4});var Lr1=Y((cw)=>{var Mr1=cw&&cw.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},Sr1=cw&&cw.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var iN4=OQ&&OQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(OQ,"__esModule",{value:!0});OQ.AsyncAction=void 0;var nN4=Er1(),yr1=Lr1(),rN4=wV(),aN4=function(I){iN4(d,I);function d(G,Z){var C=I.call(this,G,Z)||this;return C.scheduler=G,C.work=Z,C.pending=!1,C}return d.prototype.schedule=function(G,Z){var C;if(Z===void 0)Z=0;if(this.closed)return this;this.state=G;var W=this.id,w=this.scheduler;if(W!=null)this.id=this.recycleAsyncId(w,W,Z);return this.pending=!0,this.delay=Z,this.id=(C=this.id)!==null&&C!==void 0?C:this.requestAsyncId(w,this.id,Z),this},d.prototype.requestAsyncId=function(G,Z,C){if(C===void 0)C=0;return yr1.intervalProvider.setInterval(G.flush.bind(G,this),C)},d.prototype.recycleAsyncId=function(G,Z,C){if(C===void 0)C=0;if(C!=null&&this.delay===C&&this.pending===!1)return Z;if(Z!=null)yr1.intervalProvider.clearInterval(Z);return},d.prototype.execute=function(G,Z){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var C=this._execute(G,Z);if(C)return C;else if(this.pending===!1&&this.id!=null)this.id=this.recycleAsyncId(this.scheduler,this.id,null)},d.prototype._execute=function(G,Z){var C=!1,W;try{this.work(G)}catch(w){C=!0,W=w?w:new Error("Scheduled action threw falsy error")}if(C)return this.unsubscribe(),W},d.prototype.unsubscribe=function(){if(!this.closed){var G=this,Z=G.id,C=G.scheduler,W=C.actions;if(this.work=this.state=this.scheduler=null,this.pending=!1,rN4.arrRemove(W,this),Z!=null)this.id=this.recycleAsyncId(C,Z,null);this.delay=null,I.prototype.unsubscribe.call(this)}},d}(nN4.Action);OQ.AsyncAction=aN4});var Tr1=Y(($r1)=>{Object.defineProperty($r1,"__esModule",{value:!0});$r1.TestTools=$r1.Immediate=void 0;var sN4=1,L31,jk={};function Pr1(I){if(I in jk)return delete jk[I],!0;return!1}$r1.Immediate={setImmediate:function(I){var d=sN4++;if(jk[d]=!0,!L31)L31=Promise.resolve();return L31.then(function(){return Pr1(d)&&I()}),d},clearImmediate:function(I){Pr1(I)}};$r1.TestTools={pending:function(){return Object.keys(jk).length}}});var mr1=Y((pw)=>{var eN4=pw&&pw.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},tN4=pw&&pw.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var Gz4=lQ&&lQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(lQ,"__esModule",{value:!0});lQ.AsapAction=void 0;var Zz4=mQ(),lr1=mr1(),Cz4=function(I){Gz4(d,I);function d(G,Z){var C=I.call(this,G,Z)||this;return C.scheduler=G,C.work=Z,C}return d.prototype.requestAsyncId=function(G,Z,C){if(C===void 0)C=0;if(C!==null&&C>0)return I.prototype.requestAsyncId.call(this,G,Z,C);return G.actions.push(this),G._scheduled||(G._scheduled=lr1.immediateProvider.setImmediate(G.flush.bind(G,void 0)))},d.prototype.recycleAsyncId=function(G,Z,C){var W;if(C===void 0)C=0;if(C!=null?C>0:this.delay>0)return I.prototype.recycleAsyncId.call(this,G,Z,C);var w=G.actions;if(Z!=null&&((W=w[w.length-1])===null||W===void 0?void 0:W.id)!==Z){if(lr1.immediateProvider.clearImmediate(Z),G._scheduled===Z)G._scheduled=void 0}return},d}(Zz4.AsyncAction);lQ.AsapAction=Cz4});var y31=Y((hr1)=>{Object.defineProperty(hr1,"__esModule",{value:!0});hr1.Scheduler=void 0;var Wz4=lk(),wz4=function(){function I(d,G){if(G===void 0)G=I.now;this.schedulerActionCtor=d,this.now=G}return I.prototype.schedule=function(d,G,Z){if(G===void 0)G=0;return new this.schedulerActionCtor(this,d).schedule(Z,G)},I.now=Wz4.dateTimestampProvider.now,I}();hr1.Scheduler=wz4});var hQ=Y((bQ)=>{var Bz4=bQ&&bQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(bQ,"__esModule",{value:!0});bQ.AsyncScheduler=void 0;var kr1=y31(),Az4=function(I){Bz4(d,I);function d(G,Z){if(Z===void 0)Z=kr1.Scheduler.now;var C=I.call(this,G,Z)||this;return C.actions=[],C._active=!1,C}return d.prototype.flush=function(G){var Z=this.actions;if(this._active){Z.push(G);return}var C;this._active=!0;do if(C=G.execute(G.state,G.delay))break;while(G=Z.shift());if(this._active=!1,C){while(G=Z.shift())G.unsubscribe();throw C}},d}(kr1.Scheduler);bQ.AsyncScheduler=Az4});var xr1=Y((jQ)=>{var Vz4=jQ&&jQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(jQ,"__esModule",{value:!0});jQ.AsapScheduler=void 0;var Xz4=hQ(),Yz4=function(I){Vz4(d,I);function d(){return I!==null&&I.apply(this,arguments)||this}return d.prototype.flush=function(G){this._active=!0;var Z=this._scheduled;this._scheduled=void 0;var C=this.actions,W;G=G||C.shift();do if(W=G.execute(G.state,G.delay))break;while((G=C[0])&&G.id===Z&&C.shift());if(this._active=!1,W){while((G=C[0])&&G.id===Z&&C.shift())G.unsubscribe();throw W}},d}(Xz4.AsyncScheduler);jQ.AsapScheduler=Yz4});var nr1=Y((cr1)=>{Object.defineProperty(cr1,"__esModule",{value:!0});cr1.asap=cr1.asapScheduler=void 0;var _z4=br1(),Dz4=xr1();cr1.asapScheduler=new Dz4.AsapScheduler(_z4.AsapAction);cr1.asap=cr1.asapScheduler});var tI=Y((rr1)=>{Object.defineProperty(rr1,"__esModule",{value:!0});rr1.async=rr1.asyncScheduler=void 0;var Hz4=mQ(),Fz4=hQ();rr1.asyncScheduler=new Fz4.AsyncScheduler(Hz4.AsyncAction);rr1.async=rr1.asyncScheduler});var or1=Y((kQ)=>{var gz4=kQ&&kQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(kQ,"__esModule",{value:!0});kQ.QueueAction=void 0;var Jz4=mQ(),Kz4=function(I){gz4(d,I);function d(G,Z){var C=I.call(this,G,Z)||this;return C.scheduler=G,C.work=Z,C}return d.prototype.schedule=function(G,Z){if(Z===void 0)Z=0;if(Z>0)return I.prototype.schedule.call(this,G,Z);return this.delay=Z,this.state=G,this.scheduler.flush(this),this},d.prototype.execute=function(G,Z){return Z>0||this.closed?I.prototype.execute.call(this,G,Z):this._execute(G,Z)},d.prototype.requestAsyncId=function(G,Z,C){if(C===void 0)C=0;if(C!=null&&C>0||C==null&&this.delay>0)return I.prototype.requestAsyncId.call(this,G,Z,C);return G.flush(this),0},d}(Jz4.AsyncAction);kQ.QueueAction=Kz4});var er1=Y((xQ)=>{var Nz4=xQ&&xQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(xQ,"__esModule",{value:!0});xQ.QueueScheduler=void 0;var zz4=hQ(),Qz4=function(I){Nz4(d,I);function d(){return I!==null&&I.apply(this,arguments)||this}return d}(zz4.AsyncScheduler);xQ.QueueScheduler=Qz4});var Ga1=Y((tr1)=>{Object.defineProperty(tr1,"__esModule",{value:!0});tr1.queue=tr1.queueScheduler=void 0;var fz4=or1(),qz4=er1();tr1.queueScheduler=new qz4.QueueScheduler(fz4.QueueAction);tr1.queue=tr1.queueScheduler});var Ca1=Y((cQ)=>{var Rz4=cQ&&cQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(cQ,"__esModule",{value:!0});cQ.AnimationFrameAction=void 0;var Uz4=mQ(),Za1=q31(),vz4=function(I){Rz4(d,I);function d(G,Z){var C=I.call(this,G,Z)||this;return C.scheduler=G,C.work=Z,C}return d.prototype.requestAsyncId=function(G,Z,C){if(C===void 0)C=0;if(C!==null&&C>0)return I.prototype.requestAsyncId.call(this,G,Z,C);return G.actions.push(this),G._scheduled||(G._scheduled=Za1.animationFrameProvider.requestAnimationFrame(function(){return G.flush(void 0)}))},d.prototype.recycleAsyncId=function(G,Z,C){var W;if(C===void 0)C=0;if(C!=null?C>0:this.delay>0)return I.prototype.recycleAsyncId.call(this,G,Z,C);var w=G.actions;if(Z!=null&&((W=w[w.length-1])===null||W===void 0?void 0:W.id)!==Z)Za1.animationFrameProvider.cancelAnimationFrame(Z),G._scheduled=void 0;return},d}(Uz4.AsyncAction);cQ.AnimationFrameAction=vz4});var Wa1=Y((pQ)=>{var Ez4=pQ&&pQ.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(pQ,"__esModule",{value:!0});pQ.AnimationFrameScheduler=void 0;var Mz4=hQ(),Sz4=function(I){Ez4(d,I);function d(){return I!==null&&I.apply(this,arguments)||this}return d.prototype.flush=function(G){this._active=!0;var Z=this._scheduled;this._scheduled=void 0;var C=this.actions,W;G=G||C.shift();do if(W=G.execute(G.state,G.delay))break;while((G=C[0])&&G.id===Z&&C.shift());if(this._active=!1,W){while((G=C[0])&&G.id===Z&&C.shift())G.unsubscribe();throw W}},d}(Mz4.AsyncScheduler);pQ.AnimationFrameScheduler=Sz4});var Va1=Y((wa1)=>{Object.defineProperty(wa1,"__esModule",{value:!0});wa1.animationFrame=wa1.animationFrameScheduler=void 0;var Lz4=Ca1(),yz4=Wa1();wa1.animationFrameScheduler=new yz4.AnimationFrameScheduler(Lz4.AnimationFrameAction);wa1.animationFrame=wa1.animationFrameScheduler});var _a1=Y((sY)=>{var Xa1=sY&&sY.__extends||function(){var I=function(d,G){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,C){Z.__proto__=C}||function(Z,C){for(var W in C)if(Object.prototype.hasOwnProperty.call(C,W))Z[W]=C[W]},I(d,G)};return function(d,G){if(typeof G!=="function"&&G!==null)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");I(d,G);function Z(){this.constructor=d}d.prototype=G===null?Object.create(G):(Z.prototype=G.prototype,new Z)}}();Object.defineProperty(sY,"__esModule",{value:!0});sY.VirtualAction=sY.VirtualTimeScheduler=void 0;var Pz4=mQ(),$z4=od(),uz4=hQ(),Tz4=function(I){Xa1(d,I);function d(G,Z){if(G===void 0)G=Ya1;if(Z===void 0)Z=1/0;var C=I.call(this,G,function(){return C.frame})||this;return C.maxFrames=Z,C.frame=0,C.index=-1,C}return d.prototype.flush=function(){var G=this,Z=G.actions,C=G.maxFrames,W,w;while((w=Z[0])&&w.delay<=C)if(Z.shift(),this.frame=w.delay,W=w.execute(w.state,w.delay))break;if(W){while(w=Z.shift())w.unsubscribe();throw W}},d.frameTimeFactor=10,d}(uz4.AsyncScheduler);sY.VirtualTimeScheduler=Tz4;var Ya1=function(I){Xa1(d,I);function d(G,Z,C){if(C===void 0)C=G.index+=1;var W=I.call(this,G,Z)||this;return W.scheduler=G,W.work=Z,W.index=C,W.active=!0,W.index=G.index=C,W}return d.prototype.schedule=function(G,Z){if(Z===void 0)Z=0;if(Number.isFinite(Z)){if(!this.id)return I.prototype.schedule.call(this,G,Z);this.active=!1;var C=new d(this.scheduler,this.work);return this.add(C),C.schedule(G,Z)}else return $z4.Subscription.EMPTY},d.prototype.requestAsyncId=function(G,Z,C){if(C===void 0)C=0;this.delay=G.frame+C;var W=G.actions;return W.push(this),W.sort(d.sortActions),1},d.prototype.recycleAsyncId=function(G,Z,C){if(C===void 0)C=0;return},d.prototype._execute=function(G,Z){if(this.active===!0)return I.prototype._execute.call(this,G,Z)},d.sortActions=function(G,Z){if(G.delay===Z.delay)if(G.index===Z.index)return 0;else if(G.index>Z.index)return 1;else return-1;else if(G.delay>Z.delay)return 1;else return-1},d}(Pz4.AsyncAction);sY.VirtualAction=Ya1});var OC=Y((Ha1)=>{Object.defineProperty(Ha1,"__esModule",{value:!0});Ha1.empty=Ha1.EMPTY=void 0;var Da1=B9();Ha1.EMPTY=new Da1.Observable(function(I){return I.complete()});function Oz4(I){return I?mz4(I):Ha1.EMPTY}Ha1.empty=Oz4;function mz4(I){return new Da1.Observable(function(d){return I.schedule(function(){return d.complete()})})}});var gS=Y((Ja1)=>{Object.defineProperty(Ja1,"__esModule",{value:!0});Ja1.isScheduler=void 0;var lz4=d9();function bz4(I){return I&&lz4.isFunction(I.schedule)}Ja1.isScheduler=bz4});var Id=Y((Na1)=>{Object.defineProperty(Na1,"__esModule",{value:!0});Na1.popNumber=Na1.popScheduler=Na1.popResultSelector=void 0;var hz4=d9(),jz4=gS();function P31(I){return I[I.length-1]}function kz4(I){return hz4.isFunction(P31(I))?I.pop():void 0}Na1.popResultSelector=kz4;function xz4(I){return jz4.isScheduler(P31(I))?I.pop():void 0}Na1.popScheduler=xz4;function cz4(I,d){return typeof P31(I)==="number"?I.pop():d}Na1.popNumber=cz4});var kk=Y((Qa1)=>{Object.defineProperty(Qa1,"__esModule",{value:!0});Qa1.isArrayLike=void 0;Qa1.isArrayLike=function(I){return I&&typeof I.length==="number"&&typeof I!=="function"}});var $31=Y((qa1)=>{Object.defineProperty(qa1,"__esModule",{value:!0});qa1.isPromise=void 0;var nz4=d9();function rz4(I){return nz4.isFunction(I===null||I===void 0?void 0:I.then)}qa1.isPromise=rz4});var u31=Y((Ua1)=>{Object.defineProperty(Ua1,"__esModule",{value:!0});Ua1.isInteropObservable=void 0;var az4=DS(),sz4=d9();function oz4(I){return sz4.isFunction(I[az4.observable])}Ua1.isInteropObservable=oz4});var T31=Y((Ea1)=>{Object.defineProperty(Ea1,"__esModule",{value:!0});Ea1.isAsyncIterable=void 0;var ez4=d9();function tz4(I){return Symbol.asyncIterator&&ez4.isFunction(I===null||I===void 0?void 0:I[Symbol.asyncIterator])}Ea1.isAsyncIterable=tz4});var O31=Y((Sa1)=>{Object.defineProperty(Sa1,"__esModule",{value:!0});Sa1.createInvalidObservableTypeError=void 0;function IQ4(I){return new TypeError("You provided "+(I!==null&&typeof I==="object"?"an invalid object":"'"+I+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}Sa1.createInvalidObservableTypeError=IQ4});var m31=Y((Pa1)=>{Object.defineProperty(Pa1,"__esModule",{value:!0});Pa1.iterator=Pa1.getSymbolIterator=void 0;function ya1(){if(typeof Symbol!=="function"||!Symbol.iterator)return"@@iterator";return Symbol.iterator}Pa1.getSymbolIterator=ya1;Pa1.iterator=ya1()});var l31=Y((ua1)=>{Object.defineProperty(ua1,"__esModule",{value:!0});ua1.isIterable=void 0;var GQ4=m31(),ZQ4=d9();function CQ4(I){return ZQ4.isFunction(I===null||I===void 0?void 0:I[GQ4.iterator])}ua1.isIterable=CQ4});var xk=Y((DZ)=>{var WQ4=DZ&&DZ.__generator||function(I,d){var G={label:0,sent:function(){if(W[0]&1)throw W[1];return W[1]},trys:[],ops:[]},Z,C,W,w;return w={next:B(0),throw:B(1),return:B(2)},typeof Symbol==="function"&&(w[Symbol.iterator]=function(){return this}),w;function B(V){return function(X){return A([V,X])}}function A(V){if(Z)throw new TypeError("Generator is already executing.");while(G)try{if(Z=1,C&&(W=V[0]&2?C.return:V[0]?C.throw||((W=C.return)&&W.call(C),0):C.next)&&!(W=W.call(C,V[1])).done)return W;if(C=0,W)V=[V[0]&2,W.value];switch(V[0]){case 0:case 1:W=V;break;case 4:return G.label++,{value:V[1],done:!1};case 5:G.label++,C=V[1],V=[0];continue;case 7:V=G.ops.pop(),G.trys.pop();continue;default:if((W=G.trys,!(W=W.length>0&&W[W.length-1]))&&(V[0]===6||V[0]===2)){G=0;continue}if(V[0]===3&&(!W||V[1]>W[0]&&V[1]1||B(F,g)})}}function B(F,g){try{A(Z[F](g))}catch(J){_(W[0][3],J)}}function A(F){F.value instanceof iQ?Promise.resolve(F.value.v).then(V,X):_(W[0][2],F)}function V(F){B("next",F)}function X(F){B("throw",F)}function _(F,g){if(F(g),W.shift(),W.length)B(W[0][0],W[0][1])}};Object.defineProperty(DZ,"__esModule",{value:!0});DZ.isReadableStreamLike=DZ.readableStreamLikeToAsyncGenerator=void 0;var BQ4=d9();function AQ4(I){return wQ4(this,arguments,function d(){var G,Z,C,W;return WQ4(this,function(w){switch(w.label){case 0:G=I.getReader(),w.label=1;case 1:w.trys.push([1,,9,10]),w.label=2;case 2:return[4,iQ(G.read())];case 3:if(Z=w.sent(),C=Z.value,W=Z.done,!W)return[3,5];return[4,iQ(void 0)];case 4:return[2,w.sent()];case 5:return[4,iQ(C)];case 6:return[4,w.sent()];case 7:return w.sent(),[3,2];case 8:return[3,10];case 9:return G.releaseLock(),[7];case 10:return[2]}})})}DZ.readableStreamLikeToAsyncGenerator=AQ4;function VQ4(I){return BQ4.isFunction(I===null||I===void 0?void 0:I.getReader)}DZ.isReadableStreamLike=VQ4});var M4=Y((Z3)=>{var XQ4=Z3&&Z3.__awaiter||function(I,d,G,Z){function C(W){return W instanceof G?W:new G(function(w){w(W)})}return new(G||(G=Promise))(function(W,w){function B(X){try{V(Z.next(X))}catch(_){w(_)}}function A(X){try{V(Z.throw(X))}catch(_){w(_)}}function V(X){X.done?W(X.value):C(X.value).then(B,A)}V((Z=Z.apply(I,d||[])).next())})},YQ4=Z3&&Z3.__generator||function(I,d){var G={label:0,sent:function(){if(W[0]&1)throw W[1];return W[1]},trys:[],ops:[]},Z,C,W,w;return w={next:B(0),throw:B(1),return:B(2)},typeof Symbol==="function"&&(w[Symbol.iterator]=function(){return this}),w;function B(V){return function(X){return A([V,X])}}function A(V){if(Z)throw new TypeError("Generator is already executing.");while(G)try{if(Z=1,C&&(W=V[0]&2?C.return:V[0]?C.throw||((W=C.return)&&W.call(C),0):C.next)&&!(W=W.call(C,V[1])).done)return W;if(C=0,W)V=[V[0]&2,W.value];switch(V[0]){case 0:case 1:W=V;break;case 4:return G.label++,{value:V[1],done:!1};case 5:G.label++,C=V[1],V=[0];continue;case 7:V=G.ops.pop(),G.trys.pop();continue;default:if((W=G.trys,!(W=W.length>0&&W[W.length-1]))&&(V[0]===6||V[0]===2)){G=0;continue}if(V[0]===3&&(!W||V[1]>W[0]&&V[1]=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(Z3,"__esModule",{value:!0});Z3.fromReadableStreamLike=Z3.fromAsyncIterable=Z3.fromIterable=Z3.fromPromise=Z3.fromArrayLike=Z3.fromInteropObservable=Z3.innerFrom=void 0;var DQ4=kk(),HQ4=$31(),nQ=B9(),FQ4=u31(),gQ4=T31(),JQ4=O31(),KQ4=l31(),Oa1=xk(),NQ4=d9(),zQ4=F31(),QQ4=DS();function fQ4(I){if(I instanceof nQ.Observable)return I;if(I!=null){if(FQ4.isInteropObservable(I))return ma1(I);if(DQ4.isArrayLike(I))return la1(I);if(HQ4.isPromise(I))return ba1(I);if(gQ4.isAsyncIterable(I))return h31(I);if(KQ4.isIterable(I))return ha1(I);if(Oa1.isReadableStreamLike(I))return ja1(I)}throw JQ4.createInvalidObservableTypeError(I)}Z3.innerFrom=fQ4;function ma1(I){return new nQ.Observable(function(d){var G=I[QQ4.observable]();if(NQ4.isFunction(G.subscribe))return G.subscribe(d);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}Z3.fromInteropObservable=ma1;function la1(I){return new nQ.Observable(function(d){for(var G=0;G{Object.defineProperty(ka1,"__esModule",{value:!0});ka1.executeSchedule=void 0;function RQ4(I,d,G,Z,C){if(Z===void 0)Z=0;if(C===void 0)C=!1;var W=d.schedule(function(){if(G(),C)I.add(this.schedule(null,Z));else this.unsubscribe()},Z);if(I.add(W),!C)return W}ka1.executeSchedule=RQ4});var rQ=Y((ca1)=>{Object.defineProperty(ca1,"__esModule",{value:!0});ca1.observeOn=void 0;var j31=BV(),UQ4=X2(),vQ4=E2();function EQ4(I,d){if(d===void 0)d=0;return UQ4.operate(function(G,Z){G.subscribe(vQ4.createOperatorSubscriber(Z,function(C){return j31.executeSchedule(Z,I,function(){return Z.next(C)},d)},function(){return j31.executeSchedule(Z,I,function(){return Z.complete()},d)},function(C){return j31.executeSchedule(Z,I,function(){return Z.error(C)},d)}))})}ca1.observeOn=EQ4});var aQ=Y((ia1)=>{Object.defineProperty(ia1,"__esModule",{value:!0});ia1.subscribeOn=void 0;var MQ4=X2();function SQ4(I,d){if(d===void 0)d=0;return MQ4.operate(function(G,Z){Z.add(I.schedule(function(){return G.subscribe(Z)},d))})}ia1.subscribeOn=SQ4});var sa1=Y((ra1)=>{Object.defineProperty(ra1,"__esModule",{value:!0});ra1.scheduleObservable=void 0;var LQ4=M4(),yQ4=rQ(),PQ4=aQ();function $Q4(I,d){return LQ4.innerFrom(I).pipe(PQ4.subscribeOn(d),yQ4.observeOn(d))}ra1.scheduleObservable=$Q4});var ta1=Y((oa1)=>{Object.defineProperty(oa1,"__esModule",{value:!0});oa1.schedulePromise=void 0;var uQ4=M4(),TQ4=rQ(),OQ4=aQ();function mQ4(I,d){return uQ4.innerFrom(I).pipe(OQ4.subscribeOn(d),TQ4.observeOn(d))}oa1.schedulePromise=mQ4});var Gs1=Y((Is1)=>{Object.defineProperty(Is1,"__esModule",{value:!0});Is1.scheduleArray=void 0;var lQ4=B9();function bQ4(I,d){return new lQ4.Observable(function(G){var Z=0;return d.schedule(function(){if(Z===I.length)G.complete();else if(G.next(I[Z++]),!G.closed)this.schedule()})})}Is1.scheduleArray=bQ4});var k31=Y((Cs1)=>{Object.defineProperty(Cs1,"__esModule",{value:!0});Cs1.scheduleIterable=void 0;var hQ4=B9(),jQ4=m31(),kQ4=d9(),Zs1=BV();function xQ4(I,d){return new hQ4.Observable(function(G){var Z;return Zs1.executeSchedule(G,d,function(){Z=I[jQ4.iterator](),Zs1.executeSchedule(G,d,function(){var C,W,w;try{C=Z.next(),W=C.value,w=C.done}catch(B){G.error(B);return}if(w)G.complete();else G.next(W)},0,!0)}),function(){return kQ4.isFunction(Z===null||Z===void 0?void 0:Z.return)&&Z.return()}})}Cs1.scheduleIterable=xQ4});var x31=Y((Bs1)=>{Object.defineProperty(Bs1,"__esModule",{value:!0});Bs1.scheduleAsyncIterable=void 0;var cQ4=B9(),ws1=BV();function pQ4(I,d){if(!I)throw new Error("Iterable cannot be null");return new cQ4.Observable(function(G){ws1.executeSchedule(G,d,function(){var Z=I[Symbol.asyncIterator]();ws1.executeSchedule(G,d,function(){Z.next().then(function(C){if(C.done)G.complete();else G.next(C.value)})},0,!0)})})}Bs1.scheduleAsyncIterable=pQ4});var Ys1=Y((Vs1)=>{Object.defineProperty(Vs1,"__esModule",{value:!0});Vs1.scheduleReadableStreamLike=void 0;var iQ4=x31(),nQ4=xk();function rQ4(I,d){return iQ4.scheduleAsyncIterable(nQ4.readableStreamLikeToAsyncGenerator(I),d)}Vs1.scheduleReadableStreamLike=rQ4});var c31=Y((_s1)=>{Object.defineProperty(_s1,"__esModule",{value:!0});_s1.scheduled=void 0;var aQ4=sa1(),sQ4=ta1(),oQ4=Gs1(),eQ4=k31(),tQ4=x31(),If4=u31(),df4=$31(),Gf4=kk(),Zf4=l31(),Cf4=T31(),Wf4=O31(),wf4=xk(),Bf4=Ys1();function Af4(I,d){if(I!=null){if(If4.isInteropObservable(I))return aQ4.scheduleObservable(I,d);if(Gf4.isArrayLike(I))return oQ4.scheduleArray(I,d);if(df4.isPromise(I))return sQ4.schedulePromise(I,d);if(Cf4.isAsyncIterable(I))return tQ4.scheduleAsyncIterable(I,d);if(Zf4.isIterable(I))return eQ4.scheduleIterable(I,d);if(wf4.isReadableStreamLike(I))return Bf4.scheduleReadableStreamLike(I,d)}throw Wf4.createInvalidObservableTypeError(I)}_s1.scheduled=Af4});var AV=Y((Hs1)=>{Object.defineProperty(Hs1,"__esModule",{value:!0});Hs1.from=void 0;var Vf4=c31(),Xf4=M4();function Yf4(I,d){return d?Vf4.scheduled(I,d):Xf4.innerFrom(I)}Hs1.from=Yf4});var ck=Y((gs1)=>{Object.defineProperty(gs1,"__esModule",{value:!0});gs1.of=void 0;var _f4=Id(),Df4=AV();function Hf4(){var I=[];for(var d=0;d{Object.defineProperty(Ks1,"__esModule",{value:!0});Ks1.throwError=void 0;var Ff4=B9(),gf4=d9();function Jf4(I,d){var G=gf4.isFunction(I)?I:function(){return I},Z=function(C){return C.error(G())};return new Ff4.Observable(d?function(C){return d.schedule(Z,0,C)}:Z)}Ks1.throwError=Jf4});var pk=Y((fs1)=>{Object.defineProperty(fs1,"__esModule",{value:!0});fs1.observeNotification=fs1.Notification=fs1.NotificationKind=void 0;var Kf4=OC(),Nf4=ck(),zf4=p31(),Qf4=d9(),ff4;(function(I){I.NEXT="N",I.ERROR="E",I.COMPLETE="C"})(ff4=fs1.NotificationKind||(fs1.NotificationKind={}));var qf4=function(){function I(d,G,Z){this.kind=d,this.value=G,this.error=Z,this.hasValue=d==="N"}return I.prototype.observe=function(d){return Qs1(this,d)},I.prototype.do=function(d,G,Z){var C=this,W=C.kind,w=C.value,B=C.error;return W==="N"?d===null||d===void 0?void 0:d(w):W==="E"?G===null||G===void 0?void 0:G(B):Z===null||Z===void 0?void 0:Z()},I.prototype.accept=function(d,G,Z){var C;return Qf4.isFunction((C=d)===null||C===void 0?void 0:C.next)?this.observe(d):this.do(d,G,Z)},I.prototype.toObservable=function(){var d=this,G=d.kind,Z=d.value,C=d.error,W=G==="N"?Nf4.of(Z):G==="E"?zf4.throwError(function(){return C}):G==="C"?Kf4.EMPTY:0;if(!W)throw new TypeError("Unexpected notification kind "+G);return W},I.createNext=function(d){return new I("N",d)},I.createError=function(d){return new I("E",void 0,d)},I.createComplete=function(){return I.completeNotification},I.completeNotification=new I("C"),I}();fs1.Notification=qf4;function Qs1(I,d){var G,Z,C,W=I,w=W.kind,B=W.value,A=W.error;if(typeof w!=="string")throw new TypeError('Invalid notification, missing "kind"');w==="N"?(G=d.next)===null||G===void 0||G.call(d,B):w==="E"?(Z=d.error)===null||Z===void 0||Z.call(d,A):(C=d.complete)===null||C===void 0||C.call(d)}fs1.observeNotification=Qs1});var Es1=Y((Us1)=>{Object.defineProperty(Us1,"__esModule",{value:!0});Us1.isObservable=void 0;var Uf4=B9(),Rs1=d9();function vf4(I){return!!I&&(I instanceof Uf4.Observable||Rs1.isFunction(I.lift)&&Rs1.isFunction(I.subscribe))}Us1.isObservable=vf4});var oY=Y((Ms1)=>{Object.defineProperty(Ms1,"__esModule",{value:!0});Ms1.EmptyError=void 0;var Ef4=rY();Ms1.EmptyError=Ef4.createErrorClass(function(I){return function d(){I(this),this.name="EmptyError",this.message="no elements in sequence"}})});var Ps1=Y((Ls1)=>{Object.defineProperty(Ls1,"__esModule",{value:!0});Ls1.lastValueFrom=void 0;var Mf4=oY();function Sf4(I,d){var G=typeof d==="object";return new Promise(function(Z,C){var W=!1,w;I.subscribe({next:function(B){w=B,W=!0},error:C,complete:function(){if(W)Z(w);else if(G)Z(d.defaultValue);else C(new Mf4.EmptyError)}})})}Ls1.lastValueFrom=Sf4});var Ts1=Y(($s1)=>{Object.defineProperty($s1,"__esModule",{value:!0});$s1.firstValueFrom=void 0;var Lf4=oY(),yf4=LQ();function Pf4(I,d){var G=typeof d==="object";return new Promise(function(Z,C){var W=new yf4.SafeSubscriber({next:function(w){Z(w),W.unsubscribe()},error:C,complete:function(){if(G)Z(d.defaultValue);else C(new Lf4.EmptyError)}});I.subscribe(W)})}$s1.firstValueFrom=Pf4});var i31=Y((Os1)=>{Object.defineProperty(Os1,"__esModule",{value:!0});Os1.ArgumentOutOfRangeError=void 0;var $f4=rY();Os1.ArgumentOutOfRangeError=$f4.createErrorClass(function(I){return function d(){I(this),this.name="ArgumentOutOfRangeError",this.message="argument out of range"}})});var n31=Y((ls1)=>{Object.defineProperty(ls1,"__esModule",{value:!0});ls1.NotFoundError=void 0;var uf4=rY();ls1.NotFoundError=uf4.createErrorClass(function(I){return function d(G){I(this),this.name="NotFoundError",this.message=G}})});var r31=Y((hs1)=>{Object.defineProperty(hs1,"__esModule",{value:!0});hs1.SequenceError=void 0;var Tf4=rY();hs1.SequenceError=Tf4.createErrorClass(function(I){return function d(G){I(this),this.name="SequenceError",this.message=G}})});var ik=Y((ks1)=>{Object.defineProperty(ks1,"__esModule",{value:!0});ks1.isValidDate=void 0;function Of4(I){return I instanceof Date&&!isNaN(I)}ks1.isValidDate=Of4});var JS=Y((cs1)=>{Object.defineProperty(cs1,"__esModule",{value:!0});cs1.timeout=cs1.TimeoutError=void 0;var mf4=tI(),lf4=ik(),bf4=X2(),hf4=M4(),jf4=rY(),kf4=E2(),xf4=BV();cs1.TimeoutError=jf4.createErrorClass(function(I){return function d(G){if(G===void 0)G=null;I(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=G}});function cf4(I,d){var G=lf4.isValidDate(I)?{first:I}:typeof I==="number"?{each:I}:I,Z=G.first,C=G.each,W=G.with,w=W===void 0?pf4:W,B=G.scheduler,A=B===void 0?d!==null&&d!==void 0?d:mf4.asyncScheduler:B,V=G.meta,X=V===void 0?null:V;if(Z==null&&C==null)throw new TypeError("No timeout provided.");return bf4.operate(function(_,F){var g,J,K=null,Q=0,E=function(S){J=xf4.executeSchedule(F,A,function(){try{g.unsubscribe(),hf4.innerFrom(w({meta:X,lastValue:K,seen:Q})).subscribe(F)}catch(P){F.error(P)}},S)};g=_.subscribe(kf4.createOperatorSubscriber(F,function(S){J===null||J===void 0||J.unsubscribe(),Q++,F.next(K=S),C>0&&E(C)},void 0,void 0,function(){if(!(J===null||J===void 0?void 0:J.closed))J===null||J===void 0||J.unsubscribe();K=null})),!Q&&E(Z!=null?typeof Z==="number"?Z:+Z-A.now():C)})}cs1.timeout=cf4;function pf4(I){throw new cs1.TimeoutError(I)}});var VV=Y((ns1)=>{Object.defineProperty(ns1,"__esModule",{value:!0});ns1.map=void 0;var if4=X2(),nf4=E2();function rf4(I,d){return if4.operate(function(G,Z){var C=0;G.subscribe(nf4.createOperatorSubscriber(Z,function(W){Z.next(I.call(d,W,C++))}))})}ns1.map=rf4});var tY=Y((eY)=>{var af4=eY&&eY.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},sf4=eY&&eY.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var dq4=I_&&I_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},as1=I_&&I_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(ss1,"__esModule",{value:!0});ss1.bindCallback=void 0;var Aq4=s31();function Vq4(I,d,G){return Aq4.bindCallbackInternals(!1,I,d,G)}ss1.bindCallback=Vq4});var do1=Y((ts1)=>{Object.defineProperty(ts1,"__esModule",{value:!0});ts1.bindNodeCallback=void 0;var Xq4=s31();function Yq4(I,d,G){return Xq4.bindCallbackInternals(!0,I,d,G)}ts1.bindNodeCallback=Yq4});var o31=Y((Go1)=>{Object.defineProperty(Go1,"__esModule",{value:!0});Go1.argsArgArrayOrObject=void 0;var _q4=Array.isArray,Dq4=Object.getPrototypeOf,Hq4=Object.prototype,Fq4=Object.keys;function gq4(I){if(I.length===1){var d=I[0];if(_q4(d))return{args:d,keys:null};if(Jq4(d)){var G=Fq4(d);return{args:G.map(function(Z){return d[Z]}),keys:G}}}return{args:I,keys:null}}Go1.argsArgArrayOrObject=gq4;function Jq4(I){return I&&typeof I==="object"&&Dq4(I)===Hq4}});var e31=Y((Co1)=>{Object.defineProperty(Co1,"__esModule",{value:!0});Co1.createObject=void 0;function Kq4(I,d){return I.reduce(function(G,Z,C){return G[Z]=d[C],G},{})}Co1.createObject=Kq4});var nk=Y((Yo1)=>{Object.defineProperty(Yo1,"__esModule",{value:!0});Yo1.combineLatestInit=Yo1.combineLatest=void 0;var Nq4=B9(),zq4=o31(),Ao1=AV(),Vo1=x8(),Qq4=tY(),wo1=Id(),fq4=e31(),qq4=E2(),Rq4=BV();function Uq4(){var I=[];for(var d=0;d{Object.defineProperty(Ho1,"__esModule",{value:!0});Ho1.mergeInternals=void 0;var Eq4=M4(),Mq4=BV(),Do1=E2();function Sq4(I,d,G,Z,C,W,w,B){var A=[],V=0,X=0,_=!1,F=function(){if(_&&!A.length&&!V)d.complete()},g=function(K){return V{Object.defineProperty(Jo1,"__esModule",{value:!0});Jo1.mergeMap=void 0;var Lq4=VV(),yq4=M4(),Pq4=X2(),$q4=rk(),uq4=d9();function go1(I,d,G){if(G===void 0)G=1/0;if(uq4.isFunction(d))return go1(function(Z,C){return Lq4.map(function(W,w){return d(Z,W,C,w)})(yq4.innerFrom(I(Z,C)))},G);else if(typeof d==="number")G=d;return Pq4.operate(function(Z,C){return $q4.mergeInternals(Z,C,I,G)})}Jo1.mergeMap=go1});var sQ=Y((No1)=>{Object.defineProperty(No1,"__esModule",{value:!0});No1.mergeAll=void 0;var Tq4=iw(),Oq4=x8();function mq4(I){if(I===void 0)I=1/0;return Tq4.mergeMap(Oq4.identity,I)}No1.mergeAll=mq4});var KS=Y((Qo1)=>{Object.defineProperty(Qo1,"__esModule",{value:!0});Qo1.concatAll=void 0;var lq4=sQ();function bq4(){return lq4.mergeAll(1)}Qo1.concatAll=bq4});var NS=Y((qo1)=>{Object.defineProperty(qo1,"__esModule",{value:!0});qo1.concat=void 0;var hq4=KS(),jq4=Id(),kq4=AV();function xq4(){var I=[];for(var d=0;d{Object.defineProperty(Uo1,"__esModule",{value:!0});Uo1.defer=void 0;var cq4=B9(),pq4=M4();function iq4(I){return new cq4.Observable(function(d){pq4.innerFrom(I()).subscribe(d)})}Uo1.defer=iq4});var So1=Y((Eo1)=>{Object.defineProperty(Eo1,"__esModule",{value:!0});Eo1.connectable=void 0;var nq4=c8(),rq4=B9(),aq4=zS(),sq4={connector:function(){return new nq4.Subject},resetOnDisconnect:!0};function oq4(I,d){if(d===void 0)d=sq4;var G=null,Z=d.connector,C=d.resetOnDisconnect,W=C===void 0?!0:C,w=Z(),B=new rq4.Observable(function(A){return w.subscribe(A)});return B.connect=function(){if(!G||G.closed){if(G=aq4.defer(function(){return I}).subscribe(w),W)G.add(function(){return w=Z()})}return G},B}Eo1.connectable=oq4});var Po1=Y((Lo1)=>{Object.defineProperty(Lo1,"__esModule",{value:!0});Lo1.forkJoin=void 0;var eq4=B9(),tq4=o31(),IR4=M4(),dR4=Id(),GR4=E2(),ZR4=tY(),CR4=e31();function WR4(){var I=[];for(var d=0;d{var wR4=oQ&&oQ.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W};Object.defineProperty(oQ,"__esModule",{value:!0});oQ.fromEvent=void 0;var BR4=M4(),AR4=B9(),VR4=iw(),XR4=kk(),vg=d9(),YR4=tY(),_R4=["addListener","removeListener"],DR4=["addEventListener","removeEventListener"],HR4=["on","off"];function t31(I,d,G,Z){if(vg.isFunction(G))Z=G,G=void 0;if(Z)return t31(I,d,G).pipe(YR4.mapOneOrManyArgs(Z));var C=wR4(JR4(I)?DR4.map(function(B){return function(A){return I[B](d,A,G)}}):FR4(I)?_R4.map($o1(I,d)):gR4(I)?HR4.map($o1(I,d)):[],2),W=C[0],w=C[1];if(!W){if(XR4.isArrayLike(I))return VR4.mergeMap(function(B){return t31(B,d,G)})(BR4.innerFrom(I))}if(!W)throw new TypeError("Invalid event target");return new AR4.Observable(function(B){var A=function(){var V=[];for(var X=0;X{Object.defineProperty(Oo1,"__esModule",{value:!0});Oo1.fromEventPattern=void 0;var KR4=B9(),NR4=d9(),zR4=tY();function To1(I,d,G){if(G)return To1(I,d).pipe(zR4.mapOneOrManyArgs(G));return new KR4.Observable(function(Z){var C=function(){var w=[];for(var B=0;B{var QR4=eQ&&eQ.__generator||function(I,d){var G={label:0,sent:function(){if(W[0]&1)throw W[1];return W[1]},trys:[],ops:[]},Z,C,W,w;return w={next:B(0),throw:B(1),return:B(2)},typeof Symbol==="function"&&(w[Symbol.iterator]=function(){return this}),w;function B(V){return function(X){return A([V,X])}}function A(V){if(Z)throw new TypeError("Generator is already executing.");while(G)try{if(Z=1,C&&(W=V[0]&2?C.return:V[0]?C.throw||((W=C.return)&&W.call(C),0):C.next)&&!(W=W.call(C,V[1])).done)return W;if(C=0,W)V=[V[0]&2,W.value];switch(V[0]){case 0:case 1:W=V;break;case 4:return G.label++,{value:V[1],done:!1};case 5:G.label++,C=V[1],V=[0];continue;case 7:V=G.ops.pop(),G.trys.pop();continue;default:if((W=G.trys,!(W=W.length>0&&W[W.length-1]))&&(V[0]===6||V[0]===2)){G=0;continue}if(V[0]===3&&(!W||V[1]>W[0]&&V[1]{Object.defineProperty(jo1,"__esModule",{value:!0});jo1.iif=void 0;var vR4=zS();function ER4(I,d,G){return vR4.defer(function(){return I()?d:G})}jo1.iif=ER4});var d_=Y((co1)=>{Object.defineProperty(co1,"__esModule",{value:!0});co1.timer=void 0;var MR4=B9(),SR4=tI(),LR4=gS(),yR4=ik();function PR4(I,d,G){if(I===void 0)I=0;if(G===void 0)G=SR4.async;var Z=-1;if(d!=null)if(LR4.isScheduler(d))G=d;else Z=d;return new MR4.Observable(function(C){var W=yR4.isValidDate(I)?+I-G.now():I;if(W<0)W=0;var w=0;return G.schedule(function(){if(!C.closed)if(C.next(w++),0<=Z)this.schedule(void 0,Z);else C.complete()},W)})}co1.timer=PR4});var I61=Y((io1)=>{Object.defineProperty(io1,"__esModule",{value:!0});io1.interval=void 0;var $R4=tI(),uR4=d_();function TR4(I,d){if(I===void 0)I=0;if(d===void 0)d=$R4.asyncScheduler;if(I<0)I=0;return uR4.timer(I,I,d)}io1.interval=TR4});var oo1=Y((ao1)=>{Object.defineProperty(ao1,"__esModule",{value:!0});ao1.merge=void 0;var OR4=sQ(),mR4=M4(),lR4=OC(),ro1=Id(),bR4=AV();function hR4(){var I=[];for(var d=0;d{Object.defineProperty(eo1,"__esModule",{value:!0});eo1.never=eo1.NEVER=void 0;var jR4=B9(),kR4=k8();eo1.NEVER=new jR4.Observable(kR4.noop);function xR4(){return eo1.NEVER}eo1.never=xR4});var G_=Y((de1)=>{Object.defineProperty(de1,"__esModule",{value:!0});de1.argsOrArgArray=void 0;var cR4=Array.isArray;function pR4(I){return I.length===1&&cR4(I[0])?I[0]:I}de1.argsOrArgArray=pR4});var G61=Y((Ce1)=>{Object.defineProperty(Ce1,"__esModule",{value:!0});Ce1.onErrorResumeNext=void 0;var iR4=B9(),nR4=G_(),rR4=E2(),Ze1=k8(),aR4=M4();function sR4(){var I=[];for(var d=0;d{Object.defineProperty(we1,"__esModule",{value:!0});we1.pairs=void 0;var oR4=AV();function eR4(I,d){return oR4.from(Object.entries(I),d)}we1.pairs=eR4});var Z61=Y((Ve1)=>{Object.defineProperty(Ve1,"__esModule",{value:!0});Ve1.not=void 0;function tR4(I,d){return function(G,Z){return!I.call(d,G,Z)}}Ve1.not=tR4});var XV=Y((Ye1)=>{Object.defineProperty(Ye1,"__esModule",{value:!0});Ye1.filter=void 0;var IU4=X2(),dU4=E2();function GU4(I,d){return IU4.operate(function(G,Z){var C=0;G.subscribe(dU4.createOperatorSubscriber(Z,function(W){return I.call(d,W,C++)&&Z.next(W)}))})}Ye1.filter=GU4});var Je1=Y((Fe1)=>{Object.defineProperty(Fe1,"__esModule",{value:!0});Fe1.partition=void 0;var ZU4=Z61(),De1=XV(),He1=M4();function CU4(I,d,G){return[De1.filter(d,G)(He1.innerFrom(I)),De1.filter(ZU4.not(d,G))(He1.innerFrom(I))]}Fe1.partition=CU4});var C61=Y((ze1)=>{Object.defineProperty(ze1,"__esModule",{value:!0});ze1.raceInit=ze1.race=void 0;var WU4=B9(),Ke1=M4(),wU4=G_(),BU4=E2();function AU4(){var I=[];for(var d=0;d{Object.defineProperty(fe1,"__esModule",{value:!0});fe1.range=void 0;var XU4=B9(),YU4=OC();function _U4(I,d,G){if(d==null)d=I,I=0;if(d<=0)return YU4.EMPTY;var Z=d+I;return new XU4.Observable(G?function(C){var W=I;return G.schedule(function(){if(W{Object.defineProperty(Ue1,"__esModule",{value:!0});Ue1.using=void 0;var DU4=B9(),HU4=M4(),FU4=OC();function gU4(I,d){return new DU4.Observable(function(G){var Z=I(),C=d(Z),W=C?HU4.innerFrom(C):FU4.EMPTY;return W.subscribe(G),function(){if(Z)Z.unsubscribe()}})}Ue1.using=gU4});var ak=Y((Z_)=>{var JU4=Z_&&Z_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},KU4=Z_&&Z_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(Me1,"__esModule",{value:!0})});var sk=Y((ye1)=>{Object.defineProperty(ye1,"__esModule",{value:!0});ye1.audit=void 0;var vU4=X2(),EU4=M4(),Le1=E2();function MU4(I){return vU4.operate(function(d,G){var Z=!1,C=null,W=null,w=!1,B=function(){if(W===null||W===void 0||W.unsubscribe(),W=null,Z){Z=!1;var V=C;C=null,G.next(V)}w&&G.complete()},A=function(){W=null,w&&G.complete()};d.subscribe(Le1.createOperatorSubscriber(G,function(V){if(Z=!0,C=V,!W)EU4.innerFrom(I(V)).subscribe(W=Le1.createOperatorSubscriber(G,B,A))},function(){w=!0,(!Z||!W||W.closed)&&G.complete()}))})}ye1.audit=MU4});var W61=Y(($e1)=>{Object.defineProperty($e1,"__esModule",{value:!0});$e1.auditTime=void 0;var SU4=tI(),LU4=sk(),yU4=d_();function PU4(I,d){if(d===void 0)d=SU4.asyncScheduler;return LU4.audit(function(){return yU4.timer(I,d)})}$e1.auditTime=PU4});var w61=Y((Oe1)=>{Object.defineProperty(Oe1,"__esModule",{value:!0});Oe1.buffer=void 0;var $U4=X2(),uU4=k8(),Te1=E2(),TU4=M4();function OU4(I){return $U4.operate(function(d,G){var Z=[];return d.subscribe(Te1.createOperatorSubscriber(G,function(C){return Z.push(C)},function(){G.next(Z),G.complete()})),TU4.innerFrom(I).subscribe(Te1.createOperatorSubscriber(G,function(){var C=Z;Z=[],G.next(C)},uU4.noop)),function(){Z=null}})}Oe1.buffer=OU4});var A61=Y((tQ)=>{var B61=tQ&&tQ.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(tQ,"__esModule",{value:!0});tQ.bufferCount=void 0;var mU4=X2(),lU4=E2(),bU4=wV();function hU4(I,d){if(d===void 0)d=null;return d=d!==null&&d!==void 0?d:I,mU4.operate(function(G,Z){var C=[],W=0;G.subscribe(lU4.createOperatorSubscriber(Z,function(w){var B,A,V,X,_=null;if(W++%d===0)C.push([]);try{for(var F=B61(C),g=F.next();!g.done;g=F.next()){var J=g.value;if(J.push(w),I<=J.length)_=_!==null&&_!==void 0?_:[],_.push(J)}}catch(E){B={error:E}}finally{try{if(g&&!g.done&&(A=F.return))A.call(F)}finally{if(B)throw B.error}}if(_)try{for(var K=B61(_),Q=K.next();!Q.done;Q=K.next()){var J=Q.value;bU4.arrRemove(C,J),Z.next(J)}}catch(E){V={error:E}}finally{try{if(Q&&!Q.done&&(X=K.return))X.call(K)}finally{if(V)throw V.error}}},function(){var w,B;try{for(var A=B61(C),V=A.next();!V.done;V=A.next()){var X=V.value;Z.next(X)}}catch(_){w={error:_}}finally{try{if(V&&!V.done&&(B=A.return))B.call(A)}finally{if(w)throw w.error}}Z.complete()},void 0,function(){C=null}))})}tQ.bufferCount=hU4});var V61=Y((If)=>{var jU4=If&&If.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(If,"__esModule",{value:!0});If.bufferTime=void 0;var kU4=od(),xU4=X2(),cU4=E2(),pU4=wV(),iU4=tI(),nU4=Id(),le1=BV();function rU4(I){var d,G,Z=[];for(var C=1;C=0)le1.executeSchedule(V,W,g,w,!0);else _=!0;g();var J=cU4.createOperatorSubscriber(V,function(K){var Q,E,S=X.slice();try{for(var P=jU4(S),$=P.next();!$.done;$=P.next()){var h=$.value,O=h.buffer;O.push(K),B<=O.length&&F(h)}}catch(T){Q={error:T}}finally{try{if($&&!$.done&&(E=P.return))E.call(P)}finally{if(Q)throw Q.error}}},function(){while(X===null||X===void 0?void 0:X.length)V.next(X.shift().buffer);J===null||J===void 0||J.unsubscribe(),V.complete(),V.unsubscribe()},void 0,function(){return X=null});A.subscribe(J)})}If.bufferTime=rU4});var Y61=Y((df)=>{var aU4=df&&df.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(df,"__esModule",{value:!0});df.bufferToggle=void 0;var sU4=od(),oU4=X2(),be1=M4(),X61=E2(),he1=k8(),eU4=wV();function tU4(I,d){return oU4.operate(function(G,Z){var C=[];be1.innerFrom(I).subscribe(X61.createOperatorSubscriber(Z,function(W){var w=[];C.push(w);var B=new sU4.Subscription,A=function(){eU4.arrRemove(C,w),Z.next(w),B.unsubscribe()};B.add(be1.innerFrom(d(W)).subscribe(X61.createOperatorSubscriber(Z,A,he1.noop)))},he1.noop)),G.subscribe(X61.createOperatorSubscriber(Z,function(W){var w,B;try{for(var A=aU4(C),V=A.next();!V.done;V=A.next()){var X=V.value;X.push(W)}}catch(_){w={error:_}}finally{try{if(V&&!V.done&&(B=A.return))B.call(A)}finally{if(w)throw w.error}}},function(){while(C.length>0)Z.next(C.shift());Z.complete()}))})}df.bufferToggle=tU4});var _61=Y((ke1)=>{Object.defineProperty(ke1,"__esModule",{value:!0});ke1.bufferWhen=void 0;var Iv4=X2(),dv4=k8(),je1=E2(),Gv4=M4();function Zv4(I){return Iv4.operate(function(d,G){var Z=null,C=null,W=function(){C===null||C===void 0||C.unsubscribe();var w=Z;Z=[],w&&G.next(w),Gv4.innerFrom(I()).subscribe(C=je1.createOperatorSubscriber(G,W,dv4.noop))};W(),d.subscribe(je1.createOperatorSubscriber(G,function(w){return Z===null||Z===void 0?void 0:Z.push(w)},function(){Z&&G.next(Z),G.complete()},void 0,function(){return Z=C=null}))})}ke1.bufferWhen=Zv4});var D61=Y((pe1)=>{Object.defineProperty(pe1,"__esModule",{value:!0});pe1.catchError=void 0;var Cv4=M4(),Wv4=E2(),wv4=X2();function ce1(I){return wv4.operate(function(d,G){var Z=null,C=!1,W;if(Z=d.subscribe(Wv4.createOperatorSubscriber(G,void 0,void 0,function(w){if(W=Cv4.innerFrom(I(w,ce1(I)(d))),Z)Z.unsubscribe(),Z=null,W.subscribe(G);else C=!0})),C)Z.unsubscribe(),Z=null,W.subscribe(G)})}pe1.catchError=ce1});var H61=Y((ne1)=>{Object.defineProperty(ne1,"__esModule",{value:!0});ne1.scanInternals=void 0;var Bv4=E2();function Av4(I,d,G,Z,C){return function(W,w){var B=G,A=d,V=0;W.subscribe(Bv4.createOperatorSubscriber(w,function(X){var _=V++;A=B?I(A,X,_):(B=!0,X),Z&&w.next(A)},C&&function(){B&&w.next(A),w.complete()}))}}ne1.scanInternals=Av4});var Eg=Y((ae1)=>{Object.defineProperty(ae1,"__esModule",{value:!0});ae1.reduce=void 0;var Vv4=H61(),Xv4=X2();function Yv4(I,d){return Xv4.operate(Vv4.scanInternals(I,d,arguments.length>=2,!1,!0))}ae1.reduce=Yv4});var ok=Y((oe1)=>{Object.defineProperty(oe1,"__esModule",{value:!0});oe1.toArray=void 0;var _v4=Eg(),Dv4=X2(),Hv4=function(I,d){return I.push(d),I};function Fv4(){return Dv4.operate(function(I,d){_v4.reduce(Hv4,[])(I).subscribe(d)})}oe1.toArray=Fv4});var F61=Y((te1)=>{Object.defineProperty(te1,"__esModule",{value:!0});te1.joinAllInternals=void 0;var gv4=x8(),Jv4=tY(),Kv4=HS(),Nv4=iw(),zv4=ok();function Qv4(I,d){return Kv4.pipe(zv4.toArray(),Nv4.mergeMap(function(G){return I(G)}),d?Jv4.mapOneOrManyArgs(d):gv4.identity)}te1.joinAllInternals=Qv4});var ek=Y((dt1)=>{Object.defineProperty(dt1,"__esModule",{value:!0});dt1.combineLatestAll=void 0;var fv4=nk(),qv4=F61();function Rv4(I){return qv4.joinAllInternals(fv4.combineLatest,I)}dt1.combineLatestAll=Rv4});var g61=Y((Zt1)=>{Object.defineProperty(Zt1,"__esModule",{value:!0});Zt1.combineAll=void 0;var Uv4=ek();Zt1.combineAll=Uv4.combineLatestAll});var J61=Y((C_)=>{var Wt1=C_&&C_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},wt1=C_&&C_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var Pv4=W_&&W_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},$v4=W_&&W_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(Vt1,"__esModule",{value:!0});Vt1.concatMap=void 0;var At1=iw(),Ov4=d9();function mv4(I,d){return Ov4.isFunction(d)?At1.mergeMap(I,d,1):At1.mergeMap(I,1)}Vt1.concatMap=mv4});var N61=Y((_t1)=>{Object.defineProperty(_t1,"__esModule",{value:!0});_t1.concatMapTo=void 0;var Yt1=tk(),lv4=d9();function bv4(I,d){return lv4.isFunction(d)?Yt1.concatMap(function(){return I},d):Yt1.concatMap(function(){return I})}_t1.concatMapTo=bv4});var z61=Y((w_)=>{var hv4=w_&&w_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},jv4=w_&&w_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var nv4=B_&&B_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},rv4=B_&&B_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(Ht1,"__esModule",{value:!0});Ht1.fromSubscribable=void 0;var ov4=B9();function ev4(I){return new ov4.Observable(function(d){return I.subscribe(d)})}Ht1.fromSubscribable=ev4});var QS=Y((Jt1)=>{Object.defineProperty(Jt1,"__esModule",{value:!0});Jt1.connect=void 0;var tv4=c8(),IE4=M4(),dE4=X2(),GE4=gt1(),ZE4={connector:function(){return new tv4.Subject}};function CE4(I,d){if(d===void 0)d=ZE4;var G=d.connector;return dE4.operate(function(Z,C){var W=G();IE4.innerFrom(I(GE4.fromSubscribable(W))).subscribe(C),C.add(Z.subscribe(W))})}Jt1.connect=CE4});var f61=Y((Nt1)=>{Object.defineProperty(Nt1,"__esModule",{value:!0});Nt1.count=void 0;var WE4=Eg();function wE4(I){return WE4.reduce(function(d,G,Z){return!I||I(G,Z)?d+1:d},0)}Nt1.count=wE4});var q61=Y((ft1)=>{Object.defineProperty(ft1,"__esModule",{value:!0});ft1.debounce=void 0;var BE4=X2(),AE4=k8(),Qt1=E2(),VE4=M4();function XE4(I){return BE4.operate(function(d,G){var Z=!1,C=null,W=null,w=function(){if(W===null||W===void 0||W.unsubscribe(),W=null,Z){Z=!1;var B=C;C=null,G.next(B)}};d.subscribe(Qt1.createOperatorSubscriber(G,function(B){W===null||W===void 0||W.unsubscribe(),Z=!0,C=B,W=Qt1.createOperatorSubscriber(G,w,AE4.noop),VE4.innerFrom(I(B)).subscribe(W)},function(){w(),G.complete()},void 0,function(){C=W=null}))})}ft1.debounce=XE4});var R61=Y((Rt1)=>{Object.defineProperty(Rt1,"__esModule",{value:!0});Rt1.debounceTime=void 0;var YE4=tI(),_E4=X2(),DE4=E2();function HE4(I,d){if(d===void 0)d=YE4.asyncScheduler;return _E4.operate(function(G,Z){var C=null,W=null,w=null,B=function(){if(C){C.unsubscribe(),C=null;var V=W;W=null,Z.next(V)}};function A(){var V=w+I,X=d.now();if(X{Object.defineProperty(vt1,"__esModule",{value:!0});vt1.defaultIfEmpty=void 0;var FE4=X2(),gE4=E2();function JE4(I){return FE4.operate(function(d,G){var Z=!1;d.subscribe(gE4.createOperatorSubscriber(G,function(C){Z=!0,G.next(C)},function(){if(!Z)G.next(I);G.complete()}))})}vt1.defaultIfEmpty=JE4});var Zf=Y((Mt1)=>{Object.defineProperty(Mt1,"__esModule",{value:!0});Mt1.take=void 0;var KE4=OC(),NE4=X2(),zE4=E2();function QE4(I){return I<=0?function(){return KE4.EMPTY}:NE4.operate(function(d,G){var Z=0;d.subscribe(zE4.createOperatorSubscriber(G,function(C){if(++Z<=I){if(G.next(C),I<=Z)G.complete()}}))})}Mt1.take=QE4});var Ix=Y((Lt1)=>{Object.defineProperty(Lt1,"__esModule",{value:!0});Lt1.ignoreElements=void 0;var fE4=X2(),qE4=E2(),RE4=k8();function UE4(){return fE4.operate(function(I,d){I.subscribe(qE4.createOperatorSubscriber(d,RE4.noop))})}Lt1.ignoreElements=UE4});var dx=Y((Pt1)=>{Object.defineProperty(Pt1,"__esModule",{value:!0});Pt1.mapTo=void 0;var vE4=VV();function EE4(I){return vE4.map(function(){return I})}Pt1.mapTo=EE4});var Gx=Y((Ot1)=>{Object.defineProperty(Ot1,"__esModule",{value:!0});Ot1.delayWhen=void 0;var ME4=NS(),ut1=Zf(),SE4=Ix(),LE4=dx(),yE4=iw(),PE4=M4();function Tt1(I,d){if(d)return function(G){return ME4.concat(d.pipe(ut1.take(1),SE4.ignoreElements()),G.pipe(Tt1(I)))};return yE4.mergeMap(function(G,Z){return PE4.innerFrom(I(G,Z)).pipe(ut1.take(1),LE4.mapTo(G))})}Ot1.delayWhen=Tt1});var U61=Y((lt1)=>{Object.defineProperty(lt1,"__esModule",{value:!0});lt1.delay=void 0;var $E4=tI(),uE4=Gx(),TE4=d_();function OE4(I,d){if(d===void 0)d=$E4.asyncScheduler;var G=TE4.timer(I,d);return uE4.delayWhen(function(){return G})}lt1.delay=OE4});var v61=Y((ht1)=>{Object.defineProperty(ht1,"__esModule",{value:!0});ht1.dematerialize=void 0;var mE4=pk(),lE4=X2(),bE4=E2();function hE4(){return lE4.operate(function(I,d){I.subscribe(bE4.createOperatorSubscriber(d,function(G){return mE4.observeNotification(G,d)}))})}ht1.dematerialize=hE4});var E61=Y((xt1)=>{Object.defineProperty(xt1,"__esModule",{value:!0});xt1.distinct=void 0;var jE4=X2(),kt1=E2(),kE4=k8(),xE4=M4();function cE4(I,d){return jE4.operate(function(G,Z){var C=new Set;G.subscribe(kt1.createOperatorSubscriber(Z,function(W){var w=I?I(W):W;if(!C.has(w))C.add(w),Z.next(W)})),d&&xE4.innerFrom(d).subscribe(kt1.createOperatorSubscriber(Z,function(){return C.clear()},kE4.noop))})}xt1.distinct=cE4});var Zx=Y((pt1)=>{Object.defineProperty(pt1,"__esModule",{value:!0});pt1.distinctUntilChanged=void 0;var pE4=x8(),iE4=X2(),nE4=E2();function rE4(I,d){if(d===void 0)d=pE4.identity;return I=I!==null&&I!==void 0?I:aE4,iE4.operate(function(G,Z){var C,W=!0;G.subscribe(nE4.createOperatorSubscriber(Z,function(w){var B=d(w);if(W||!I(C,B))W=!1,C=B,Z.next(w)}))})}pt1.distinctUntilChanged=rE4;function aE4(I,d){return I===d}});var M61=Y((nt1)=>{Object.defineProperty(nt1,"__esModule",{value:!0});nt1.distinctUntilKeyChanged=void 0;var sE4=Zx();function oE4(I,d){return sE4.distinctUntilChanged(function(G,Z){return d?d(G[I],Z[I]):G[I]===Z[I]})}nt1.distinctUntilKeyChanged=oE4});var Cf=Y((at1)=>{Object.defineProperty(at1,"__esModule",{value:!0});at1.throwIfEmpty=void 0;var eE4=oY(),tE4=X2(),IM4=E2();function dM4(I){if(I===void 0)I=GM4;return tE4.operate(function(d,G){var Z=!1;d.subscribe(IM4.createOperatorSubscriber(G,function(C){Z=!0,G.next(C)},function(){return Z?G.complete():G.error(I())}))})}at1.throwIfEmpty=dM4;function GM4(){return new eE4.EmptyError}});var S61=Y((et1)=>{Object.defineProperty(et1,"__esModule",{value:!0});et1.elementAt=void 0;var ot1=i31(),ZM4=XV(),CM4=Cf(),WM4=Gf(),wM4=Zf();function BM4(I,d){if(I<0)throw new ot1.ArgumentOutOfRangeError;var G=arguments.length>=2;return function(Z){return Z.pipe(ZM4.filter(function(C,W){return W===I}),wM4.take(1),G?WM4.defaultIfEmpty(d):CM4.throwIfEmpty(function(){return new ot1.ArgumentOutOfRangeError}))}}et1.elementAt=BM4});var L61=Y((A_)=>{var AM4=A_&&A_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},VM4=A_&&A_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(I10,"__esModule",{value:!0});I10.every=void 0;var DM4=X2(),HM4=E2();function FM4(I,d){return DM4.operate(function(G,Z){var C=0;G.subscribe(HM4.createOperatorSubscriber(Z,function(W){if(!I.call(d,W,C++,G))Z.next(!1),Z.complete()},function(){Z.next(!0),Z.complete()}))})}I10.every=FM4});var Cx=Y((W10)=>{Object.defineProperty(W10,"__esModule",{value:!0});W10.exhaustMap=void 0;var gM4=VV(),G10=M4(),JM4=X2(),Z10=E2();function C10(I,d){if(d)return function(G){return G.pipe(C10(function(Z,C){return G10.innerFrom(I(Z,C)).pipe(gM4.map(function(W,w){return d(Z,W,C,w)}))}))};return JM4.operate(function(G,Z){var C=0,W=null,w=!1;G.subscribe(Z10.createOperatorSubscriber(Z,function(B){if(!W)W=Z10.createOperatorSubscriber(Z,void 0,function(){W=null,w&&Z.complete()}),G10.innerFrom(I(B,C++)).subscribe(W)},function(){w=!0,!W&&Z.complete()}))})}W10.exhaustMap=C10});var Wx=Y((B10)=>{Object.defineProperty(B10,"__esModule",{value:!0});B10.exhaustAll=void 0;var KM4=Cx(),NM4=x8();function zM4(){return KM4.exhaustMap(NM4.identity)}B10.exhaustAll=zM4});var P61=Y((V10)=>{Object.defineProperty(V10,"__esModule",{value:!0});V10.exhaust=void 0;var QM4=Wx();V10.exhaust=QM4.exhaustAll});var $61=Y((Y10)=>{Object.defineProperty(Y10,"__esModule",{value:!0});Y10.expand=void 0;var fM4=X2(),qM4=rk();function RM4(I,d,G){if(d===void 0)d=1/0;return d=(d||0)<1?1/0:d,fM4.operate(function(Z,C){return qM4.mergeInternals(Z,C,I,d,void 0,!0,G)})}Y10.expand=RM4});var u61=Y((D10)=>{Object.defineProperty(D10,"__esModule",{value:!0});D10.finalize=void 0;var UM4=X2();function vM4(I){return UM4.operate(function(d,G){try{d.subscribe(G)}finally{G.add(I)}})}D10.finalize=vM4});var wx=Y((g10)=>{Object.defineProperty(g10,"__esModule",{value:!0});g10.createFind=g10.find=void 0;var EM4=X2(),MM4=E2();function SM4(I,d){return EM4.operate(F10(I,d,"value"))}g10.find=SM4;function F10(I,d,G){var Z=G==="index";return function(C,W){var w=0;C.subscribe(MM4.createOperatorSubscriber(W,function(B){var A=w++;if(I.call(d,B,A,C))W.next(Z?A:B),W.complete()},function(){W.next(Z?-1:void 0),W.complete()}))}}g10.createFind=F10});var T61=Y((K10)=>{Object.defineProperty(K10,"__esModule",{value:!0});K10.findIndex=void 0;var yM4=X2(),PM4=wx();function $M4(I,d){return yM4.operate(PM4.createFind(I,d,"index"))}K10.findIndex=$M4});var O61=Y((z10)=>{Object.defineProperty(z10,"__esModule",{value:!0});z10.first=void 0;var uM4=oY(),TM4=XV(),OM4=Zf(),mM4=Gf(),lM4=Cf(),bM4=x8();function hM4(I,d){var G=arguments.length>=2;return function(Z){return Z.pipe(I?TM4.filter(function(C,W){return I(C,W,Z)}):bM4.identity,OM4.take(1),G?mM4.defaultIfEmpty(d):lM4.throwIfEmpty(function(){return new uM4.EmptyError}))}}z10.first=hM4});var m61=Y((q10)=>{Object.defineProperty(q10,"__esModule",{value:!0});q10.groupBy=void 0;var jM4=B9(),kM4=M4(),xM4=c8(),cM4=X2(),f10=E2();function pM4(I,d,G,Z){return cM4.operate(function(C,W){var w;if(!d||typeof d==="function")w=d;else G=d.duration,w=d.element,Z=d.connector;var B=new Map,A=function(J){B.forEach(J),J(W)},V=function(J){return A(function(K){return K.error(J)})},X=0,_=!1,F=new f10.OperatorSubscriber(W,function(J){try{var K=I(J),Q=B.get(K);if(!Q){B.set(K,Q=Z?Z():new xM4.Subject);var E=g(K,Q);if(W.next(E),G){var S=f10.createOperatorSubscriber(Q,function(){Q.complete(),S===null||S===void 0||S.unsubscribe()},void 0,void 0,function(){return B.delete(K)});F.add(kM4.innerFrom(G(E)).subscribe(S))}}Q.next(w?w(J):J)}catch(P){V(P)}},function(){return A(function(J){return J.complete()})},V,function(){return B.clear()},function(){return _=!0,X===0});C.subscribe(F);function g(J,K){var Q=new jM4.Observable(function(E){X++;var S=K.subscribe(E);return function(){S.unsubscribe(),--X===0&&_&&F.unsubscribe()}});return Q.key=J,Q}})}q10.groupBy=pM4});var l61=Y((U10)=>{Object.defineProperty(U10,"__esModule",{value:!0});U10.isEmpty=void 0;var iM4=X2(),nM4=E2();function rM4(){return iM4.operate(function(I,d){I.subscribe(nM4.createOperatorSubscriber(d,function(){d.next(!1),d.complete()},function(){d.next(!0),d.complete()}))})}U10.isEmpty=rM4});var Bx=Y((Wf)=>{var aM4=Wf&&Wf.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(Wf,"__esModule",{value:!0});Wf.takeLast=void 0;var sM4=OC(),oM4=X2(),eM4=E2();function tM4(I){return I<=0?function(){return sM4.EMPTY}:oM4.operate(function(d,G){var Z=[];d.subscribe(eM4.createOperatorSubscriber(G,function(C){Z.push(C),I{Object.defineProperty(E10,"__esModule",{value:!0});E10.last=void 0;var IS4=oY(),dS4=XV(),GS4=Bx(),ZS4=Cf(),CS4=Gf(),WS4=x8();function wS4(I,d){var G=arguments.length>=2;return function(Z){return Z.pipe(I?dS4.filter(function(C,W){return I(C,W,Z)}):WS4.identity,GS4.takeLast(1),G?CS4.defaultIfEmpty(d):ZS4.throwIfEmpty(function(){return new IS4.EmptyError}))}}E10.last=wS4});var j61=Y((S10)=>{Object.defineProperty(S10,"__esModule",{value:!0});S10.materialize=void 0;var h61=pk(),BS4=X2(),AS4=E2();function VS4(){return BS4.operate(function(I,d){I.subscribe(AS4.createOperatorSubscriber(d,function(G){d.next(h61.Notification.createNext(G))},function(){d.next(h61.Notification.createComplete()),d.complete()},function(G){d.next(h61.Notification.createError(G)),d.complete()}))})}S10.materialize=VS4});var k61=Y((y10)=>{Object.defineProperty(y10,"__esModule",{value:!0});y10.max=void 0;var XS4=Eg(),YS4=d9();function _S4(I){return XS4.reduce(YS4.isFunction(I)?function(d,G){return I(d,G)>0?d:G}:function(d,G){return d>G?d:G})}y10.max=_S4});var x61=Y(($10)=>{Object.defineProperty($10,"__esModule",{value:!0});$10.flatMap=void 0;var DS4=iw();$10.flatMap=DS4.mergeMap});var c61=Y((O10)=>{Object.defineProperty(O10,"__esModule",{value:!0});O10.mergeMapTo=void 0;var T10=iw(),HS4=d9();function FS4(I,d,G){if(G===void 0)G=1/0;if(HS4.isFunction(d))return T10.mergeMap(function(){return I},d,G);if(typeof d==="number")G=d;return T10.mergeMap(function(){return I},G)}O10.mergeMapTo=FS4});var p61=Y((l10)=>{Object.defineProperty(l10,"__esModule",{value:!0});l10.mergeScan=void 0;var gS4=X2(),JS4=rk();function KS4(I,d,G){if(G===void 0)G=1/0;return gS4.operate(function(Z,C){var W=d;return JS4.mergeInternals(Z,C,function(w,B){return I(W,w,B)},G,function(w){W=w},!1,void 0,function(){return W=null})})}l10.mergeScan=KS4});var i61=Y((V_)=>{var NS4=V_&&V_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},zS4=V_&&V_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var vS4=X_&&X_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},ES4=X_&&X_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(j10,"__esModule",{value:!0});j10.min=void 0;var LS4=Eg(),yS4=d9();function PS4(I){return LS4.reduce(yS4.isFunction(I)?function(d,G){return I(d,G)<0?d:G}:function(d,G){return d{Object.defineProperty(c10,"__esModule",{value:!0});c10.multicast=void 0;var $S4=FS(),x10=d9(),uS4=QS();function TS4(I,d){var G=x10.isFunction(I)?I:function(){return I};if(x10.isFunction(d))return uS4.connect(d,{connector:G});return function(Z){return new $S4.ConnectableObservable(Z,G)}}c10.multicast=TS4});var a61=Y((nw)=>{var OS4=nw&&nw.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},mS4=nw&&nw.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(n10,"__esModule",{value:!0});n10.pairwise=void 0;var hS4=X2(),jS4=E2();function kS4(){return hS4.operate(function(I,d){var G,Z=!1;I.subscribe(jS4.createOperatorSubscriber(d,function(C){var W=G;G=C,Z&&d.next([W,C]),Z=!0}))})}n10.pairwise=kS4});var o61=Y((a10)=>{Object.defineProperty(a10,"__esModule",{value:!0});a10.pluck=void 0;var xS4=VV();function cS4(){var I=[];for(var d=0;d{Object.defineProperty(o10,"__esModule",{value:!0});o10.publish=void 0;var pS4=c8(),iS4=fS(),nS4=QS();function rS4(I){return I?function(d){return nS4.connect(I)(d)}:function(d){return iS4.multicast(new pS4.Subject)(d)}}o10.publish=rS4});var t61=Y((t10)=>{Object.defineProperty(t10,"__esModule",{value:!0});t10.publishBehavior=void 0;var aS4=M31(),sS4=FS();function oS4(I){return function(d){var G=new aS4.BehaviorSubject(I);return new sS4.ConnectableObservable(d,function(){return G})}}t10.publishBehavior=oS4});var I81=Y((d00)=>{Object.defineProperty(d00,"__esModule",{value:!0});d00.publishLast=void 0;var eS4=hk(),tS4=FS();function IL4(){return function(I){var d=new eS4.AsyncSubject;return new tS4.ConnectableObservable(I,function(){return d})}}d00.publishLast=IL4});var d81=Y((C00)=>{Object.defineProperty(C00,"__esModule",{value:!0});C00.publishReplay=void 0;var dL4=bk(),GL4=fS(),Z00=d9();function ZL4(I,d,G,Z){if(G&&!Z00.isFunction(G))Z=G;var C=Z00.isFunction(G)?G:void 0;return function(W){return GL4.multicast(new dL4.ReplaySubject(I,d,Z),C)(W)}}C00.publishReplay=ZL4});var Ax=Y((Y_)=>{var CL4=Y_&&Y_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},WL4=Y_&&Y_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(B00,"__esModule",{value:!0});B00.repeat=void 0;var XL4=OC(),YL4=X2(),w00=E2(),_L4=M4(),DL4=d_();function HL4(I){var d,G=1/0,Z;if(I!=null)if(typeof I==="object")d=I.count,G=d===void 0?1/0:d,Z=I.delay;else G=I;return G<=0?function(){return XL4.EMPTY}:YL4.operate(function(C,W){var w=0,B,A=function(){if(B===null||B===void 0||B.unsubscribe(),B=null,Z!=null){var X=typeof Z==="number"?DL4.timer(Z):_L4.innerFrom(Z(w)),_=w00.createOperatorSubscriber(W,function(){_.unsubscribe(),V()});X.subscribe(_)}else V()},V=function(){var X=!1;if(B=C.subscribe(w00.createOperatorSubscriber(W,void 0,function(){if(++w{Object.defineProperty(X00,"__esModule",{value:!0});X00.repeatWhen=void 0;var FL4=M4(),gL4=c8(),JL4=X2(),V00=E2();function KL4(I){return JL4.operate(function(d,G){var Z,C=!1,W,w=!1,B=!1,A=function(){return B&&w&&(G.complete(),!0)},V=function(){if(!W)W=new gL4.Subject,FL4.innerFrom(I(W)).subscribe(V00.createOperatorSubscriber(G,function(){if(Z)X();else C=!0},function(){w=!0,A()}));return W},X=function(){if(B=!1,Z=d.subscribe(V00.createOperatorSubscriber(G,void 0,function(){B=!0,!A()&&V().next()})),C)Z.unsubscribe(),Z=null,C=!1,X()};X()})}X00.repeatWhen=KL4});var C81=Y((D00)=>{Object.defineProperty(D00,"__esModule",{value:!0});D00.retry=void 0;var NL4=X2(),_00=E2(),zL4=x8(),QL4=d_(),fL4=M4();function qL4(I){if(I===void 0)I=1/0;var d;if(I&&typeof I==="object")d=I;else d={count:I};var G=d.count,Z=G===void 0?1/0:G,C=d.delay,W=d.resetOnSuccess,w=W===void 0?!1:W;return Z<=0?zL4.identity:NL4.operate(function(B,A){var V=0,X,_=function(){var F=!1;if(X=B.subscribe(_00.createOperatorSubscriber(A,function(g){if(w)V=0;A.next(g)},void 0,function(g){if(V++{Object.defineProperty(g00,"__esModule",{value:!0});g00.retryWhen=void 0;var RL4=M4(),UL4=c8(),vL4=X2(),F00=E2();function EL4(I){return vL4.operate(function(d,G){var Z,C=!1,W,w=function(){if(Z=d.subscribe(F00.createOperatorSubscriber(G,void 0,void 0,function(B){if(!W)W=new UL4.Subject,RL4.innerFrom(I(W)).subscribe(F00.createOperatorSubscriber(G,function(){return Z?w():C=!0}));if(W)W.next(B)})),C)Z.unsubscribe(),Z=null,C=!1,w()};w()})}g00.retryWhen=EL4});var Vx=Y((N00)=>{Object.defineProperty(N00,"__esModule",{value:!0});N00.sample=void 0;var ML4=M4(),SL4=X2(),LL4=k8(),K00=E2();function yL4(I){return SL4.operate(function(d,G){var Z=!1,C=null;d.subscribe(K00.createOperatorSubscriber(G,function(W){Z=!0,C=W})),ML4.innerFrom(I).subscribe(K00.createOperatorSubscriber(G,function(){if(Z){Z=!1;var W=C;C=null,G.next(W)}},LL4.noop))})}N00.sample=yL4});var w81=Y((Q00)=>{Object.defineProperty(Q00,"__esModule",{value:!0});Q00.sampleTime=void 0;var PL4=tI(),$L4=Vx(),uL4=I61();function TL4(I,d){if(d===void 0)d=PL4.asyncScheduler;return $L4.sample(uL4.interval(I,d))}Q00.sampleTime=TL4});var B81=Y((q00)=>{Object.defineProperty(q00,"__esModule",{value:!0});q00.scan=void 0;var OL4=X2(),mL4=H61();function lL4(I,d){return OL4.operate(mL4.scanInternals(I,d,arguments.length>=2,!0))}q00.scan=lL4});var A81=Y((v00)=>{Object.defineProperty(v00,"__esModule",{value:!0});v00.sequenceEqual=void 0;var bL4=X2(),hL4=E2(),jL4=M4();function kL4(I,d){if(d===void 0)d=function(G,Z){return G===Z};return bL4.operate(function(G,Z){var C=U00(),W=U00(),w=function(A){Z.next(A),Z.complete()},B=function(A,V){var X=hL4.createOperatorSubscriber(Z,function(_){var{buffer:F,complete:g}=V;if(F.length===0)g?w(!1):A.buffer.push(_);else!d(_,F.shift())&&w(!1)},function(){A.complete=!0;var{complete:_,buffer:F}=V;_&&w(F.length===0),X===null||X===void 0||X.unsubscribe()});return X};G.subscribe(B(C,W)),jL4.innerFrom(I).subscribe(B(W,C))})}v00.sequenceEqual=kL4;function U00(){return{buffer:[],complete:!1}}});var Xx=Y((__)=>{var xL4=__&&__.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},cL4=__&&__.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G0)X=new S00.SafeSubscriber({next:function(O){return h.next(O)},error:function(O){K=!0,Q(),_=V81(E,C,O),h.error(O)},complete:function(){J=!0,Q(),_=V81(E,w),h.complete()}}),M00.innerFrom(P).subscribe(X)})(V)}}__.share=nL4;function V81(I,d){var G=[];for(var Z=2;Z{Object.defineProperty(L00,"__esModule",{value:!0});L00.shareReplay=void 0;var rL4=bk(),aL4=Xx();function sL4(I,d,G){var Z,C,W,w,B=!1;if(I&&typeof I==="object")Z=I.bufferSize,w=Z===void 0?1/0:Z,C=I.windowTime,d=C===void 0?1/0:C,W=I.refCount,B=W===void 0?!1:W,G=I.scheduler;else w=I!==null&&I!==void 0?I:1/0;return aL4.share({connector:function(){return new rL4.ReplaySubject(w,d,G)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:B})}L00.shareReplay=sL4});var Y81=Y((P00)=>{Object.defineProperty(P00,"__esModule",{value:!0});P00.single=void 0;var oL4=oY(),eL4=r31(),tL4=n31(),Iy4=X2(),dy4=E2();function Gy4(I){return Iy4.operate(function(d,G){var Z=!1,C,W=!1,w=0;d.subscribe(dy4.createOperatorSubscriber(G,function(B){if(W=!0,!I||I(B,w++,d))Z&&G.error(new eL4.SequenceError("Too many matching values")),Z=!0,C=B},function(){if(Z)G.next(C),G.complete();else G.error(W?new tL4.NotFoundError("No matching values"):new oL4.EmptyError)}))})}P00.single=Gy4});var _81=Y((u00)=>{Object.defineProperty(u00,"__esModule",{value:!0});u00.skip=void 0;var Zy4=XV();function Cy4(I){return Zy4.filter(function(d,G){return I<=G})}u00.skip=Cy4});var D81=Y((O00)=>{Object.defineProperty(O00,"__esModule",{value:!0});O00.skipLast=void 0;var Wy4=x8(),wy4=X2(),By4=E2();function Ay4(I){return I<=0?Wy4.identity:wy4.operate(function(d,G){var Z=new Array(I),C=0;return d.subscribe(By4.createOperatorSubscriber(G,function(W){var w=C++;if(w{Object.defineProperty(b00,"__esModule",{value:!0});b00.skipUntil=void 0;var Vy4=X2(),l00=E2(),Xy4=M4(),Yy4=k8();function _y4(I){return Vy4.operate(function(d,G){var Z=!1,C=l00.createOperatorSubscriber(G,function(){C===null||C===void 0||C.unsubscribe(),Z=!0},Yy4.noop);Xy4.innerFrom(I).subscribe(C),d.subscribe(l00.createOperatorSubscriber(G,function(W){return Z&&G.next(W)}))})}b00.skipUntil=_y4});var F81=Y((j00)=>{Object.defineProperty(j00,"__esModule",{value:!0});j00.skipWhile=void 0;var Dy4=X2(),Hy4=E2();function Fy4(I){return Dy4.operate(function(d,G){var Z=!1,C=0;d.subscribe(Hy4.createOperatorSubscriber(G,function(W){return(Z||(Z=!I(W,C++)))&&G.next(W)}))})}j00.skipWhile=Fy4});var g81=Y((c00)=>{Object.defineProperty(c00,"__esModule",{value:!0});c00.startWith=void 0;var x00=NS(),gy4=Id(),Jy4=X2();function Ky4(){var I=[];for(var d=0;d{Object.defineProperty(n00,"__esModule",{value:!0});n00.switchMap=void 0;var Ny4=M4(),zy4=X2(),i00=E2();function Qy4(I,d){return zy4.operate(function(G,Z){var C=null,W=0,w=!1,B=function(){return w&&!C&&Z.complete()};G.subscribe(i00.createOperatorSubscriber(Z,function(A){C===null||C===void 0||C.unsubscribe();var V=0,X=W++;Ny4.innerFrom(I(A,X)).subscribe(C=i00.createOperatorSubscriber(Z,function(_){return Z.next(d?d(A,_,X,V++):_)},function(){C=null,B()}))},function(){w=!0,B()}))})}n00.switchMap=Qy4});var J81=Y((a00)=>{Object.defineProperty(a00,"__esModule",{value:!0});a00.switchAll=void 0;var fy4=wf(),qy4=x8();function Ry4(){return fy4.switchMap(qy4.identity)}a00.switchAll=Ry4});var K81=Y((e00)=>{Object.defineProperty(e00,"__esModule",{value:!0});e00.switchMapTo=void 0;var o00=wf(),Uy4=d9();function vy4(I,d){return Uy4.isFunction(d)?o00.switchMap(function(){return I},d):o00.switchMap(function(){return I})}e00.switchMapTo=vy4});var N81=Y((I20)=>{Object.defineProperty(I20,"__esModule",{value:!0});I20.switchScan=void 0;var Ey4=wf(),My4=X2();function Sy4(I,d){return My4.operate(function(G,Z){var C=d;return Ey4.switchMap(function(W,w){return I(C,W,w)},function(W,w){return C=w,w})(G).subscribe(Z),function(){C=null}})}I20.switchScan=Sy4});var z81=Y((G20)=>{Object.defineProperty(G20,"__esModule",{value:!0});G20.takeUntil=void 0;var Ly4=X2(),yy4=E2(),Py4=M4(),$y4=k8();function uy4(I){return Ly4.operate(function(d,G){Py4.innerFrom(I).subscribe(yy4.createOperatorSubscriber(G,function(){return G.complete()},$y4.noop)),!G.closed&&d.subscribe(G)})}G20.takeUntil=uy4});var Q81=Y((C20)=>{Object.defineProperty(C20,"__esModule",{value:!0});C20.takeWhile=void 0;var Ty4=X2(),Oy4=E2();function my4(I,d){if(d===void 0)d=!1;return Ty4.operate(function(G,Z){var C=0;G.subscribe(Oy4.createOperatorSubscriber(Z,function(W){var w=I(W,C++);(w||d)&&Z.next(W),!w&&Z.complete()}))})}C20.takeWhile=my4});var f81=Y((w20)=>{Object.defineProperty(w20,"__esModule",{value:!0});w20.tap=void 0;var ly4=d9(),by4=X2(),hy4=E2(),jy4=x8();function ky4(I,d,G){var Z=ly4.isFunction(I)||d||G?{next:I,error:d,complete:G}:I;return Z?by4.operate(function(C,W){var w;(w=Z.subscribe)===null||w===void 0||w.call(Z);var B=!0;C.subscribe(hy4.createOperatorSubscriber(W,function(A){var V;(V=Z.next)===null||V===void 0||V.call(Z,A),W.next(A)},function(){var A;B=!1,(A=Z.complete)===null||A===void 0||A.call(Z),W.complete()},function(A){var V;B=!1,(V=Z.error)===null||V===void 0||V.call(Z,A),W.error(A)},function(){var A,V;if(B)(A=Z.unsubscribe)===null||A===void 0||A.call(Z);(V=Z.finalize)===null||V===void 0||V.call(Z)}))}):jy4.identity}w20.tap=ky4});var Yx=Y((V20)=>{Object.defineProperty(V20,"__esModule",{value:!0});V20.throttle=void 0;var xy4=X2(),A20=E2(),cy4=M4();function py4(I,d){return xy4.operate(function(G,Z){var C=d!==null&&d!==void 0?d:{},W=C.leading,w=W===void 0?!0:W,B=C.trailing,A=B===void 0?!1:B,V=!1,X=null,_=null,F=!1,g=function(){if(_===null||_===void 0||_.unsubscribe(),_=null,A)Q(),F&&Z.complete()},J=function(){_=null,F&&Z.complete()},K=function(E){return _=cy4.innerFrom(I(E)).subscribe(A20.createOperatorSubscriber(Z,g,J))},Q=function(){if(V){V=!1;var E=X;X=null,Z.next(E),!F&&K(E)}};G.subscribe(A20.createOperatorSubscriber(Z,function(E){V=!0,X=E,!(_&&!_.closed)&&(w?Q():K(E))},function(){F=!0,!(A&&V&&_&&!_.closed)&&Z.complete()}))})}V20.throttle=py4});var q81=Y((Y20)=>{Object.defineProperty(Y20,"__esModule",{value:!0});Y20.throttleTime=void 0;var iy4=tI(),ny4=Yx(),ry4=d_();function ay4(I,d,G){if(d===void 0)d=iy4.asyncScheduler;var Z=ry4.timer(I,d);return ny4.throttle(function(){return Z},G)}Y20.throttleTime=ay4});var R81=Y((H20)=>{Object.defineProperty(H20,"__esModule",{value:!0});H20.TimeInterval=H20.timeInterval=void 0;var sy4=tI(),oy4=X2(),ey4=E2();function ty4(I){if(I===void 0)I=sy4.asyncScheduler;return oy4.operate(function(d,G){var Z=I.now();d.subscribe(ey4.createOperatorSubscriber(G,function(C){var W=I.now(),w=W-Z;Z=W,G.next(new D20(C,w))}))})}H20.timeInterval=ty4;var D20=function(){function I(d,G){this.value=d,this.interval=G}return I}();H20.TimeInterval=D20});var U81=Y((g20)=>{Object.defineProperty(g20,"__esModule",{value:!0});g20.timeoutWith=void 0;var dP4=tI(),GP4=ik(),ZP4=JS();function CP4(I,d,G){var Z,C,W;if(G=G!==null&&G!==void 0?G:dP4.async,GP4.isValidDate(I))Z=I;else if(typeof I==="number")C=I;if(d)W=function(){return d};else throw new TypeError("No observable provided to switch to");if(Z==null&&C==null)throw new TypeError("No timeout provided.");return ZP4.timeout({first:Z,each:C,scheduler:G,with:W})}g20.timeoutWith=CP4});var v81=Y((K20)=>{Object.defineProperty(K20,"__esModule",{value:!0});K20.timestamp=void 0;var WP4=lk(),wP4=VV();function BP4(I){if(I===void 0)I=WP4.dateTimestampProvider;return wP4.map(function(d){return{value:d,timestamp:I.now()}})}K20.timestamp=BP4});var E81=Y((f20)=>{Object.defineProperty(f20,"__esModule",{value:!0});f20.window=void 0;var z20=c8(),AP4=X2(),Q20=E2(),VP4=k8(),XP4=M4();function YP4(I){return AP4.operate(function(d,G){var Z=new z20.Subject;G.next(Z.asObservable());var C=function(W){Z.error(W),G.error(W)};return d.subscribe(Q20.createOperatorSubscriber(G,function(W){return Z===null||Z===void 0?void 0:Z.next(W)},function(){Z.complete(),G.complete()},C)),XP4.innerFrom(I).subscribe(Q20.createOperatorSubscriber(G,function(){Z.complete(),G.next(Z=new z20.Subject)},VP4.noop,C)),function(){Z===null||Z===void 0||Z.unsubscribe(),Z=null}})}f20.window=YP4});var M81=Y((Bf)=>{var _P4=Bf&&Bf.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(Bf,"__esModule",{value:!0});Bf.windowCount=void 0;var R20=c8(),DP4=X2(),HP4=E2();function FP4(I,d){if(d===void 0)d=0;var G=d>0?d:I;return DP4.operate(function(Z,C){var W=[new R20.Subject],w=[],B=0;C.next(W[0].asObservable()),Z.subscribe(HP4.createOperatorSubscriber(C,function(A){var V,X;try{for(var _=_P4(W),F=_.next();!F.done;F=_.next()){var g=F.value;g.next(A)}}catch(Q){V={error:Q}}finally{try{if(F&&!F.done&&(X=_.return))X.call(_)}finally{if(V)throw V.error}}var J=B-I+1;if(J>=0&&J%G===0)W.shift().complete();if(++B%G===0){var K=new R20.Subject;W.push(K),C.next(K.asObservable())}},function(){while(W.length>0)W.shift().complete();C.complete()},function(A){while(W.length>0)W.shift().error(A);C.error(A)},function(){w=null,W=null}))})}Bf.windowCount=FP4});var S81=Y((v20)=>{Object.defineProperty(v20,"__esModule",{value:!0});v20.windowTime=void 0;var gP4=c8(),JP4=tI(),KP4=od(),NP4=X2(),zP4=E2(),QP4=wV(),fP4=Id(),U20=BV();function qP4(I){var d,G,Z=[];for(var C=1;C=0)U20.executeSchedule(V,W,g,w,!0);else _=!0;g();var J=function(Q){return X.slice().forEach(Q)},K=function(Q){J(function(E){var S=E.window;return Q(S)}),Q(V),V.unsubscribe()};return A.subscribe(zP4.createOperatorSubscriber(V,function(Q){J(function(E){E.window.next(Q),B<=++E.seen&&F(E)})},function(){return K(function(Q){return Q.complete()})},function(Q){return K(function(E){return E.error(Q)})})),function(){X=null}})}v20.windowTime=qP4});var y81=Y((Af)=>{var RP4=Af&&Af.__values||function(I){var d=typeof Symbol==="function"&&Symbol.iterator,G=d&&I[d],Z=0;if(G)return G.call(I);if(I&&typeof I.length==="number")return{next:function(){if(I&&Z>=I.length)I=void 0;return{value:I&&I[Z++],done:!I}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(Af,"__esModule",{value:!0});Af.windowToggle=void 0;var UP4=c8(),vP4=od(),EP4=X2(),M20=M4(),L81=E2(),S20=k8(),MP4=wV();function SP4(I,d){return EP4.operate(function(G,Z){var C=[],W=function(w){while(0{Object.defineProperty(y20,"__esModule",{value:!0});y20.windowWhen=void 0;var LP4=c8(),yP4=X2(),L20=E2(),PP4=M4();function $P4(I){return yP4.operate(function(d,G){var Z,C,W=function(B){Z.error(B),G.error(B)},w=function(){C===null||C===void 0||C.unsubscribe(),Z===null||Z===void 0||Z.complete(),Z=new LP4.Subject,G.next(Z.asObservable());var B;try{B=PP4.innerFrom(I())}catch(A){W(A);return}B.subscribe(C=L20.createOperatorSubscriber(G,w,w,W))};w(),d.subscribe(L20.createOperatorSubscriber(G,function(B){return Z.next(B)},function(){Z.complete(),G.complete()},W,function(){C===null||C===void 0||C.unsubscribe(),Z=null}))})}y20.windowWhen=$P4});var $81=Y((D_)=>{var $20=D_&&D_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},u20=D_&&D_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(O20,"__esModule",{value:!0});O20.zipAll=void 0;var hP4=ak(),jP4=F61();function kP4(I){return jP4.joinAllInternals(hP4.zip,I)}O20.zipAll=kP4});var T81=Y((H_)=>{var xP4=H_&&H_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},cP4=H_&&H_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var rP4=F_&&F_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},aP4=F_&&F_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{var eP4=i&&i.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;Object.defineProperty(I,Z,{enumerable:!0,get:function(){return d[G]}})}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),tP4=i&&i.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))eP4(d,I,G)};Object.defineProperty(i,"__esModule",{value:!0});i.interval=i.iif=i.generate=i.fromEventPattern=i.fromEvent=i.from=i.forkJoin=i.empty=i.defer=i.connectable=i.concat=i.combineLatest=i.bindNodeCallback=i.bindCallback=i.UnsubscriptionError=i.TimeoutError=i.SequenceError=i.ObjectUnsubscribedError=i.NotFoundError=i.EmptyError=i.ArgumentOutOfRangeError=i.firstValueFrom=i.lastValueFrom=i.isObservable=i.identity=i.noop=i.pipe=i.NotificationKind=i.Notification=i.Subscriber=i.Subscription=i.Scheduler=i.VirtualAction=i.VirtualTimeScheduler=i.animationFrameScheduler=i.animationFrame=i.queueScheduler=i.queue=i.asyncScheduler=i.async=i.asapScheduler=i.asap=i.AsyncSubject=i.ReplaySubject=i.BehaviorSubject=i.Subject=i.animationFrames=i.observable=i.ConnectableObservable=i.Observable=void 0;i.filter=i.expand=i.exhaustMap=i.exhaustAll=i.exhaust=i.every=i.endWith=i.elementAt=i.distinctUntilKeyChanged=i.distinctUntilChanged=i.distinct=i.dematerialize=i.delayWhen=i.delay=i.defaultIfEmpty=i.debounceTime=i.debounce=i.count=i.connect=i.concatWith=i.concatMapTo=i.concatMap=i.concatAll=i.combineLatestWith=i.combineLatestAll=i.combineAll=i.catchError=i.bufferWhen=i.bufferToggle=i.bufferTime=i.bufferCount=i.buffer=i.auditTime=i.audit=i.config=i.NEVER=i.EMPTY=i.scheduled=i.zip=i.using=i.timer=i.throwError=i.range=i.race=i.partition=i.pairs=i.onErrorResumeNext=i.of=i.never=i.merge=void 0;i.switchMap=i.switchAll=i.subscribeOn=i.startWith=i.skipWhile=i.skipUntil=i.skipLast=i.skip=i.single=i.shareReplay=i.share=i.sequenceEqual=i.scan=i.sampleTime=i.sample=i.refCount=i.retryWhen=i.retry=i.repeatWhen=i.repeat=i.reduce=i.raceWith=i.publishReplay=i.publishLast=i.publishBehavior=i.publish=i.pluck=i.pairwise=i.onErrorResumeNextWith=i.observeOn=i.multicast=i.min=i.mergeWith=i.mergeScan=i.mergeMapTo=i.mergeMap=i.flatMap=i.mergeAll=i.max=i.materialize=i.mapTo=i.map=i.last=i.isEmpty=i.ignoreElements=i.groupBy=i.first=i.findIndex=i.find=i.finalize=void 0;i.zipWith=i.zipAll=i.withLatestFrom=i.windowWhen=i.windowToggle=i.windowTime=i.windowCount=i.window=i.toArray=i.timestamp=i.timeoutWith=i.timeout=i.timeInterval=i.throwIfEmpty=i.throttleTime=i.throttle=i.tap=i.takeWhile=i.takeUntil=i.takeLast=i.take=i.switchScan=i.switchMapTo=void 0;var I$4=B9();Object.defineProperty(i,"Observable",{enumerable:!0,get:function(){return I$4.Observable}});var d$4=FS();Object.defineProperty(i,"ConnectableObservable",{enumerable:!0,get:function(){return d$4.ConnectableObservable}});var G$4=DS();Object.defineProperty(i,"observable",{enumerable:!0,get:function(){return G$4.observable}});var Z$4=zr1();Object.defineProperty(i,"animationFrames",{enumerable:!0,get:function(){return Z$4.animationFrames}});var C$4=c8();Object.defineProperty(i,"Subject",{enumerable:!0,get:function(){return C$4.Subject}});var W$4=M31();Object.defineProperty(i,"BehaviorSubject",{enumerable:!0,get:function(){return W$4.BehaviorSubject}});var w$4=bk();Object.defineProperty(i,"ReplaySubject",{enumerable:!0,get:function(){return w$4.ReplaySubject}});var B$4=hk();Object.defineProperty(i,"AsyncSubject",{enumerable:!0,get:function(){return B$4.AsyncSubject}});var l20=nr1();Object.defineProperty(i,"asap",{enumerable:!0,get:function(){return l20.asap}});Object.defineProperty(i,"asapScheduler",{enumerable:!0,get:function(){return l20.asapScheduler}});var b20=tI();Object.defineProperty(i,"async",{enumerable:!0,get:function(){return b20.async}});Object.defineProperty(i,"asyncScheduler",{enumerable:!0,get:function(){return b20.asyncScheduler}});var h20=Ga1();Object.defineProperty(i,"queue",{enumerable:!0,get:function(){return h20.queue}});Object.defineProperty(i,"queueScheduler",{enumerable:!0,get:function(){return h20.queueScheduler}});var j20=Va1();Object.defineProperty(i,"animationFrame",{enumerable:!0,get:function(){return j20.animationFrame}});Object.defineProperty(i,"animationFrameScheduler",{enumerable:!0,get:function(){return j20.animationFrameScheduler}});var k20=_a1();Object.defineProperty(i,"VirtualTimeScheduler",{enumerable:!0,get:function(){return k20.VirtualTimeScheduler}});Object.defineProperty(i,"VirtualAction",{enumerable:!0,get:function(){return k20.VirtualAction}});var A$4=y31();Object.defineProperty(i,"Scheduler",{enumerable:!0,get:function(){return A$4.Scheduler}});var V$4=od();Object.defineProperty(i,"Subscription",{enumerable:!0,get:function(){return V$4.Subscription}});var X$4=LQ();Object.defineProperty(i,"Subscriber",{enumerable:!0,get:function(){return X$4.Subscriber}});var x20=pk();Object.defineProperty(i,"Notification",{enumerable:!0,get:function(){return x20.Notification}});Object.defineProperty(i,"NotificationKind",{enumerable:!0,get:function(){return x20.NotificationKind}});var Y$4=HS();Object.defineProperty(i,"pipe",{enumerable:!0,get:function(){return Y$4.pipe}});var _$4=k8();Object.defineProperty(i,"noop",{enumerable:!0,get:function(){return _$4.noop}});var D$4=x8();Object.defineProperty(i,"identity",{enumerable:!0,get:function(){return D$4.identity}});var H$4=Es1();Object.defineProperty(i,"isObservable",{enumerable:!0,get:function(){return H$4.isObservable}});var F$4=Ps1();Object.defineProperty(i,"lastValueFrom",{enumerable:!0,get:function(){return F$4.lastValueFrom}});var g$4=Ts1();Object.defineProperty(i,"firstValueFrom",{enumerable:!0,get:function(){return g$4.firstValueFrom}});var J$4=i31();Object.defineProperty(i,"ArgumentOutOfRangeError",{enumerable:!0,get:function(){return J$4.ArgumentOutOfRangeError}});var K$4=oY();Object.defineProperty(i,"EmptyError",{enumerable:!0,get:function(){return K$4.EmptyError}});var N$4=n31();Object.defineProperty(i,"NotFoundError",{enumerable:!0,get:function(){return N$4.NotFoundError}});var z$4=R31();Object.defineProperty(i,"ObjectUnsubscribedError",{enumerable:!0,get:function(){return z$4.ObjectUnsubscribedError}});var Q$4=r31();Object.defineProperty(i,"SequenceError",{enumerable:!0,get:function(){return Q$4.SequenceError}});var f$4=JS();Object.defineProperty(i,"TimeoutError",{enumerable:!0,get:function(){return f$4.TimeoutError}});var q$4=Y31();Object.defineProperty(i,"UnsubscriptionError",{enumerable:!0,get:function(){return q$4.UnsubscriptionError}});var R$4=es1();Object.defineProperty(i,"bindCallback",{enumerable:!0,get:function(){return R$4.bindCallback}});var U$4=do1();Object.defineProperty(i,"bindNodeCallback",{enumerable:!0,get:function(){return U$4.bindNodeCallback}});var v$4=nk();Object.defineProperty(i,"combineLatest",{enumerable:!0,get:function(){return v$4.combineLatest}});var E$4=NS();Object.defineProperty(i,"concat",{enumerable:!0,get:function(){return E$4.concat}});var M$4=So1();Object.defineProperty(i,"connectable",{enumerable:!0,get:function(){return M$4.connectable}});var S$4=zS();Object.defineProperty(i,"defer",{enumerable:!0,get:function(){return S$4.defer}});var L$4=OC();Object.defineProperty(i,"empty",{enumerable:!0,get:function(){return L$4.empty}});var y$4=Po1();Object.defineProperty(i,"forkJoin",{enumerable:!0,get:function(){return y$4.forkJoin}});var P$4=AV();Object.defineProperty(i,"from",{enumerable:!0,get:function(){return P$4.from}});var $$4=uo1();Object.defineProperty(i,"fromEvent",{enumerable:!0,get:function(){return $$4.fromEvent}});var u$4=lo1();Object.defineProperty(i,"fromEventPattern",{enumerable:!0,get:function(){return u$4.fromEventPattern}});var T$4=ho1();Object.defineProperty(i,"generate",{enumerable:!0,get:function(){return T$4.generate}});var O$4=xo1();Object.defineProperty(i,"iif",{enumerable:!0,get:function(){return O$4.iif}});var m$4=I61();Object.defineProperty(i,"interval",{enumerable:!0,get:function(){return m$4.interval}});var l$4=oo1();Object.defineProperty(i,"merge",{enumerable:!0,get:function(){return l$4.merge}});var b$4=d61();Object.defineProperty(i,"never",{enumerable:!0,get:function(){return b$4.never}});var h$4=ck();Object.defineProperty(i,"of",{enumerable:!0,get:function(){return h$4.of}});var j$4=G61();Object.defineProperty(i,"onErrorResumeNext",{enumerable:!0,get:function(){return j$4.onErrorResumeNext}});var k$4=Ae1();Object.defineProperty(i,"pairs",{enumerable:!0,get:function(){return k$4.pairs}});var x$4=Je1();Object.defineProperty(i,"partition",{enumerable:!0,get:function(){return x$4.partition}});var c$4=C61();Object.defineProperty(i,"race",{enumerable:!0,get:function(){return c$4.race}});var p$4=Re1();Object.defineProperty(i,"range",{enumerable:!0,get:function(){return p$4.range}});var i$4=p31();Object.defineProperty(i,"throwError",{enumerable:!0,get:function(){return i$4.throwError}});var n$4=d_();Object.defineProperty(i,"timer",{enumerable:!0,get:function(){return n$4.timer}});var r$4=Ee1();Object.defineProperty(i,"using",{enumerable:!0,get:function(){return r$4.using}});var a$4=ak();Object.defineProperty(i,"zip",{enumerable:!0,get:function(){return a$4.zip}});var s$4=c31();Object.defineProperty(i,"scheduled",{enumerable:!0,get:function(){return s$4.scheduled}});var o$4=OC();Object.defineProperty(i,"EMPTY",{enumerable:!0,get:function(){return o$4.EMPTY}});var e$4=d61();Object.defineProperty(i,"NEVER",{enumerable:!0,get:function(){return e$4.NEVER}});tP4(Se1(),i);var t$4=SQ();Object.defineProperty(i,"config",{enumerable:!0,get:function(){return t$4.config}});var Iu4=sk();Object.defineProperty(i,"audit",{enumerable:!0,get:function(){return Iu4.audit}});var du4=W61();Object.defineProperty(i,"auditTime",{enumerable:!0,get:function(){return du4.auditTime}});var Gu4=w61();Object.defineProperty(i,"buffer",{enumerable:!0,get:function(){return Gu4.buffer}});var Zu4=A61();Object.defineProperty(i,"bufferCount",{enumerable:!0,get:function(){return Zu4.bufferCount}});var Cu4=V61();Object.defineProperty(i,"bufferTime",{enumerable:!0,get:function(){return Cu4.bufferTime}});var Wu4=Y61();Object.defineProperty(i,"bufferToggle",{enumerable:!0,get:function(){return Wu4.bufferToggle}});var wu4=_61();Object.defineProperty(i,"bufferWhen",{enumerable:!0,get:function(){return wu4.bufferWhen}});var Bu4=D61();Object.defineProperty(i,"catchError",{enumerable:!0,get:function(){return Bu4.catchError}});var Au4=g61();Object.defineProperty(i,"combineAll",{enumerable:!0,get:function(){return Au4.combineAll}});var Vu4=ek();Object.defineProperty(i,"combineLatestAll",{enumerable:!0,get:function(){return Vu4.combineLatestAll}});var Xu4=K61();Object.defineProperty(i,"combineLatestWith",{enumerable:!0,get:function(){return Xu4.combineLatestWith}});var Yu4=KS();Object.defineProperty(i,"concatAll",{enumerable:!0,get:function(){return Yu4.concatAll}});var _u4=tk();Object.defineProperty(i,"concatMap",{enumerable:!0,get:function(){return _u4.concatMap}});var Du4=N61();Object.defineProperty(i,"concatMapTo",{enumerable:!0,get:function(){return Du4.concatMapTo}});var Hu4=Q61();Object.defineProperty(i,"concatWith",{enumerable:!0,get:function(){return Hu4.concatWith}});var Fu4=QS();Object.defineProperty(i,"connect",{enumerable:!0,get:function(){return Fu4.connect}});var gu4=f61();Object.defineProperty(i,"count",{enumerable:!0,get:function(){return gu4.count}});var Ju4=q61();Object.defineProperty(i,"debounce",{enumerable:!0,get:function(){return Ju4.debounce}});var Ku4=R61();Object.defineProperty(i,"debounceTime",{enumerable:!0,get:function(){return Ku4.debounceTime}});var Nu4=Gf();Object.defineProperty(i,"defaultIfEmpty",{enumerable:!0,get:function(){return Nu4.defaultIfEmpty}});var zu4=U61();Object.defineProperty(i,"delay",{enumerable:!0,get:function(){return zu4.delay}});var Qu4=Gx();Object.defineProperty(i,"delayWhen",{enumerable:!0,get:function(){return Qu4.delayWhen}});var fu4=v61();Object.defineProperty(i,"dematerialize",{enumerable:!0,get:function(){return fu4.dematerialize}});var qu4=E61();Object.defineProperty(i,"distinct",{enumerable:!0,get:function(){return qu4.distinct}});var Ru4=Zx();Object.defineProperty(i,"distinctUntilChanged",{enumerable:!0,get:function(){return Ru4.distinctUntilChanged}});var Uu4=M61();Object.defineProperty(i,"distinctUntilKeyChanged",{enumerable:!0,get:function(){return Uu4.distinctUntilKeyChanged}});var vu4=S61();Object.defineProperty(i,"elementAt",{enumerable:!0,get:function(){return vu4.elementAt}});var Eu4=L61();Object.defineProperty(i,"endWith",{enumerable:!0,get:function(){return Eu4.endWith}});var Mu4=y61();Object.defineProperty(i,"every",{enumerable:!0,get:function(){return Mu4.every}});var Su4=P61();Object.defineProperty(i,"exhaust",{enumerable:!0,get:function(){return Su4.exhaust}});var Lu4=Wx();Object.defineProperty(i,"exhaustAll",{enumerable:!0,get:function(){return Lu4.exhaustAll}});var yu4=Cx();Object.defineProperty(i,"exhaustMap",{enumerable:!0,get:function(){return yu4.exhaustMap}});var Pu4=$61();Object.defineProperty(i,"expand",{enumerable:!0,get:function(){return Pu4.expand}});var $u4=XV();Object.defineProperty(i,"filter",{enumerable:!0,get:function(){return $u4.filter}});var uu4=u61();Object.defineProperty(i,"finalize",{enumerable:!0,get:function(){return uu4.finalize}});var Tu4=wx();Object.defineProperty(i,"find",{enumerable:!0,get:function(){return Tu4.find}});var Ou4=T61();Object.defineProperty(i,"findIndex",{enumerable:!0,get:function(){return Ou4.findIndex}});var mu4=O61();Object.defineProperty(i,"first",{enumerable:!0,get:function(){return mu4.first}});var lu4=m61();Object.defineProperty(i,"groupBy",{enumerable:!0,get:function(){return lu4.groupBy}});var bu4=Ix();Object.defineProperty(i,"ignoreElements",{enumerable:!0,get:function(){return bu4.ignoreElements}});var hu4=l61();Object.defineProperty(i,"isEmpty",{enumerable:!0,get:function(){return hu4.isEmpty}});var ju4=b61();Object.defineProperty(i,"last",{enumerable:!0,get:function(){return ju4.last}});var ku4=VV();Object.defineProperty(i,"map",{enumerable:!0,get:function(){return ku4.map}});var xu4=dx();Object.defineProperty(i,"mapTo",{enumerable:!0,get:function(){return xu4.mapTo}});var cu4=j61();Object.defineProperty(i,"materialize",{enumerable:!0,get:function(){return cu4.materialize}});var pu4=k61();Object.defineProperty(i,"max",{enumerable:!0,get:function(){return pu4.max}});var iu4=sQ();Object.defineProperty(i,"mergeAll",{enumerable:!0,get:function(){return iu4.mergeAll}});var nu4=x61();Object.defineProperty(i,"flatMap",{enumerable:!0,get:function(){return nu4.flatMap}});var ru4=iw();Object.defineProperty(i,"mergeMap",{enumerable:!0,get:function(){return ru4.mergeMap}});var au4=c61();Object.defineProperty(i,"mergeMapTo",{enumerable:!0,get:function(){return au4.mergeMapTo}});var su4=p61();Object.defineProperty(i,"mergeScan",{enumerable:!0,get:function(){return su4.mergeScan}});var ou4=n61();Object.defineProperty(i,"mergeWith",{enumerable:!0,get:function(){return ou4.mergeWith}});var eu4=r61();Object.defineProperty(i,"min",{enumerable:!0,get:function(){return eu4.min}});var tu4=fS();Object.defineProperty(i,"multicast",{enumerable:!0,get:function(){return tu4.multicast}});var IT4=rQ();Object.defineProperty(i,"observeOn",{enumerable:!0,get:function(){return IT4.observeOn}});var dT4=a61();Object.defineProperty(i,"onErrorResumeNextWith",{enumerable:!0,get:function(){return dT4.onErrorResumeNextWith}});var GT4=s61();Object.defineProperty(i,"pairwise",{enumerable:!0,get:function(){return GT4.pairwise}});var ZT4=o61();Object.defineProperty(i,"pluck",{enumerable:!0,get:function(){return ZT4.pluck}});var CT4=e61();Object.defineProperty(i,"publish",{enumerable:!0,get:function(){return CT4.publish}});var WT4=t61();Object.defineProperty(i,"publishBehavior",{enumerable:!0,get:function(){return WT4.publishBehavior}});var wT4=I81();Object.defineProperty(i,"publishLast",{enumerable:!0,get:function(){return wT4.publishLast}});var BT4=d81();Object.defineProperty(i,"publishReplay",{enumerable:!0,get:function(){return BT4.publishReplay}});var AT4=Ax();Object.defineProperty(i,"raceWith",{enumerable:!0,get:function(){return AT4.raceWith}});var VT4=Eg();Object.defineProperty(i,"reduce",{enumerable:!0,get:function(){return VT4.reduce}});var XT4=G81();Object.defineProperty(i,"repeat",{enumerable:!0,get:function(){return XT4.repeat}});var YT4=Z81();Object.defineProperty(i,"repeatWhen",{enumerable:!0,get:function(){return YT4.repeatWhen}});var _T4=C81();Object.defineProperty(i,"retry",{enumerable:!0,get:function(){return _T4.retry}});var DT4=W81();Object.defineProperty(i,"retryWhen",{enumerable:!0,get:function(){return DT4.retryWhen}});var HT4=mk();Object.defineProperty(i,"refCount",{enumerable:!0,get:function(){return HT4.refCount}});var FT4=Vx();Object.defineProperty(i,"sample",{enumerable:!0,get:function(){return FT4.sample}});var gT4=w81();Object.defineProperty(i,"sampleTime",{enumerable:!0,get:function(){return gT4.sampleTime}});var JT4=B81();Object.defineProperty(i,"scan",{enumerable:!0,get:function(){return JT4.scan}});var KT4=A81();Object.defineProperty(i,"sequenceEqual",{enumerable:!0,get:function(){return KT4.sequenceEqual}});var NT4=Xx();Object.defineProperty(i,"share",{enumerable:!0,get:function(){return NT4.share}});var zT4=X81();Object.defineProperty(i,"shareReplay",{enumerable:!0,get:function(){return zT4.shareReplay}});var QT4=Y81();Object.defineProperty(i,"single",{enumerable:!0,get:function(){return QT4.single}});var fT4=_81();Object.defineProperty(i,"skip",{enumerable:!0,get:function(){return fT4.skip}});var qT4=D81();Object.defineProperty(i,"skipLast",{enumerable:!0,get:function(){return qT4.skipLast}});var RT4=H81();Object.defineProperty(i,"skipUntil",{enumerable:!0,get:function(){return RT4.skipUntil}});var UT4=F81();Object.defineProperty(i,"skipWhile",{enumerable:!0,get:function(){return UT4.skipWhile}});var vT4=g81();Object.defineProperty(i,"startWith",{enumerable:!0,get:function(){return vT4.startWith}});var ET4=aQ();Object.defineProperty(i,"subscribeOn",{enumerable:!0,get:function(){return ET4.subscribeOn}});var MT4=J81();Object.defineProperty(i,"switchAll",{enumerable:!0,get:function(){return MT4.switchAll}});var ST4=wf();Object.defineProperty(i,"switchMap",{enumerable:!0,get:function(){return ST4.switchMap}});var LT4=K81();Object.defineProperty(i,"switchMapTo",{enumerable:!0,get:function(){return LT4.switchMapTo}});var yT4=N81();Object.defineProperty(i,"switchScan",{enumerable:!0,get:function(){return yT4.switchScan}});var PT4=Zf();Object.defineProperty(i,"take",{enumerable:!0,get:function(){return PT4.take}});var $T4=Bx();Object.defineProperty(i,"takeLast",{enumerable:!0,get:function(){return $T4.takeLast}});var uT4=z81();Object.defineProperty(i,"takeUntil",{enumerable:!0,get:function(){return uT4.takeUntil}});var TT4=Q81();Object.defineProperty(i,"takeWhile",{enumerable:!0,get:function(){return TT4.takeWhile}});var OT4=f81();Object.defineProperty(i,"tap",{enumerable:!0,get:function(){return OT4.tap}});var mT4=Yx();Object.defineProperty(i,"throttle",{enumerable:!0,get:function(){return mT4.throttle}});var lT4=q81();Object.defineProperty(i,"throttleTime",{enumerable:!0,get:function(){return lT4.throttleTime}});var bT4=Cf();Object.defineProperty(i,"throwIfEmpty",{enumerable:!0,get:function(){return bT4.throwIfEmpty}});var hT4=R81();Object.defineProperty(i,"timeInterval",{enumerable:!0,get:function(){return hT4.timeInterval}});var jT4=JS();Object.defineProperty(i,"timeout",{enumerable:!0,get:function(){return jT4.timeout}});var kT4=U81();Object.defineProperty(i,"timeoutWith",{enumerable:!0,get:function(){return kT4.timeoutWith}});var xT4=v81();Object.defineProperty(i,"timestamp",{enumerable:!0,get:function(){return xT4.timestamp}});var cT4=ok();Object.defineProperty(i,"toArray",{enumerable:!0,get:function(){return cT4.toArray}});var pT4=E81();Object.defineProperty(i,"window",{enumerable:!0,get:function(){return pT4.window}});var iT4=M81();Object.defineProperty(i,"windowCount",{enumerable:!0,get:function(){return iT4.windowCount}});var nT4=S81();Object.defineProperty(i,"windowTime",{enumerable:!0,get:function(){return nT4.windowTime}});var rT4=y81();Object.defineProperty(i,"windowToggle",{enumerable:!0,get:function(){return rT4.windowToggle}});var aT4=P81();Object.defineProperty(i,"windowWhen",{enumerable:!0,get:function(){return aT4.windowWhen}});var sT4=$81();Object.defineProperty(i,"withLatestFrom",{enumerable:!0,get:function(){return sT4.withLatestFrom}});var oT4=u81();Object.defineProperty(i,"zipAll",{enumerable:!0,get:function(){return oT4.zipAll}});var eT4=O81();Object.defineProperty(i,"zipWith",{enumerable:!0,get:function(){return eT4.zipWith}})});var r20=Y((i20)=>{Object.defineProperty(i20,"__esModule",{value:!0});i20.partition=void 0;var tT4=Z61(),p20=XV();function IO4(I,d){return function(G){return[p20.filter(I,d)(G),p20.filter(tT4.not(I,d))(G)]}}i20.partition=IO4});var a20=Y((g_)=>{var dO4=g_&&g_.__read||function(I,d){var G=typeof Symbol==="function"&&I[Symbol.iterator];if(!G)return I;var Z=G.call(I),C,W=[],w;try{while((d===void 0||d-- >0)&&!(C=Z.next()).done)W.push(C.value)}catch(B){w={error:B}}finally{try{if(C&&!C.done&&(G=Z.return))G.call(Z)}finally{if(w)throw w.error}}return W},GO4=g_&&g_.__spreadArray||function(I,d){for(var G=0,Z=d.length,C=I.length;G{Object.defineProperty(Y0,"__esModule",{value:!0});Y0.mergeAll=Y0.merge=Y0.max=Y0.materialize=Y0.mapTo=Y0.map=Y0.last=Y0.isEmpty=Y0.ignoreElements=Y0.groupBy=Y0.first=Y0.findIndex=Y0.find=Y0.finalize=Y0.filter=Y0.expand=Y0.exhaustMap=Y0.exhaustAll=Y0.exhaust=Y0.every=Y0.endWith=Y0.elementAt=Y0.distinctUntilKeyChanged=Y0.distinctUntilChanged=Y0.distinct=Y0.dematerialize=Y0.delayWhen=Y0.delay=Y0.defaultIfEmpty=Y0.debounceTime=Y0.debounce=Y0.count=Y0.connect=Y0.concatWith=Y0.concatMapTo=Y0.concatMap=Y0.concatAll=Y0.concat=Y0.combineLatestWith=Y0.combineLatest=Y0.combineLatestAll=Y0.combineAll=Y0.catchError=Y0.bufferWhen=Y0.bufferToggle=Y0.bufferTime=Y0.bufferCount=Y0.buffer=Y0.auditTime=Y0.audit=void 0;Y0.timeInterval=Y0.throwIfEmpty=Y0.throttleTime=Y0.throttle=Y0.tap=Y0.takeWhile=Y0.takeUntil=Y0.takeLast=Y0.take=Y0.switchScan=Y0.switchMapTo=Y0.switchMap=Y0.switchAll=Y0.subscribeOn=Y0.startWith=Y0.skipWhile=Y0.skipUntil=Y0.skipLast=Y0.skip=Y0.single=Y0.shareReplay=Y0.share=Y0.sequenceEqual=Y0.scan=Y0.sampleTime=Y0.sample=Y0.refCount=Y0.retryWhen=Y0.retry=Y0.repeatWhen=Y0.repeat=Y0.reduce=Y0.raceWith=Y0.race=Y0.publishReplay=Y0.publishLast=Y0.publishBehavior=Y0.publish=Y0.pluck=Y0.partition=Y0.pairwise=Y0.onErrorResumeNext=Y0.observeOn=Y0.multicast=Y0.min=Y0.mergeWith=Y0.mergeScan=Y0.mergeMapTo=Y0.mergeMap=Y0.flatMap=void 0;Y0.zipWith=Y0.zipAll=Y0.zip=Y0.withLatestFrom=Y0.windowWhen=Y0.windowToggle=Y0.windowTime=Y0.windowCount=Y0.window=Y0.toArray=Y0.timestamp=Y0.timeoutWith=Y0.timeout=void 0;var wO4=sk();Object.defineProperty(Y0,"audit",{enumerable:!0,get:function(){return wO4.audit}});var BO4=W61();Object.defineProperty(Y0,"auditTime",{enumerable:!0,get:function(){return BO4.auditTime}});var AO4=w61();Object.defineProperty(Y0,"buffer",{enumerable:!0,get:function(){return AO4.buffer}});var VO4=A61();Object.defineProperty(Y0,"bufferCount",{enumerable:!0,get:function(){return VO4.bufferCount}});var XO4=V61();Object.defineProperty(Y0,"bufferTime",{enumerable:!0,get:function(){return XO4.bufferTime}});var YO4=Y61();Object.defineProperty(Y0,"bufferToggle",{enumerable:!0,get:function(){return YO4.bufferToggle}});var _O4=_61();Object.defineProperty(Y0,"bufferWhen",{enumerable:!0,get:function(){return _O4.bufferWhen}});var DO4=D61();Object.defineProperty(Y0,"catchError",{enumerable:!0,get:function(){return DO4.catchError}});var HO4=g61();Object.defineProperty(Y0,"combineAll",{enumerable:!0,get:function(){return HO4.combineAll}});var FO4=ek();Object.defineProperty(Y0,"combineLatestAll",{enumerable:!0,get:function(){return FO4.combineLatestAll}});var gO4=J61();Object.defineProperty(Y0,"combineLatest",{enumerable:!0,get:function(){return gO4.combineLatest}});var JO4=K61();Object.defineProperty(Y0,"combineLatestWith",{enumerable:!0,get:function(){return JO4.combineLatestWith}});var KO4=z61();Object.defineProperty(Y0,"concat",{enumerable:!0,get:function(){return KO4.concat}});var NO4=KS();Object.defineProperty(Y0,"concatAll",{enumerable:!0,get:function(){return NO4.concatAll}});var zO4=tk();Object.defineProperty(Y0,"concatMap",{enumerable:!0,get:function(){return zO4.concatMap}});var QO4=N61();Object.defineProperty(Y0,"concatMapTo",{enumerable:!0,get:function(){return QO4.concatMapTo}});var fO4=Q61();Object.defineProperty(Y0,"concatWith",{enumerable:!0,get:function(){return fO4.concatWith}});var qO4=QS();Object.defineProperty(Y0,"connect",{enumerable:!0,get:function(){return qO4.connect}});var RO4=f61();Object.defineProperty(Y0,"count",{enumerable:!0,get:function(){return RO4.count}});var UO4=q61();Object.defineProperty(Y0,"debounce",{enumerable:!0,get:function(){return UO4.debounce}});var vO4=R61();Object.defineProperty(Y0,"debounceTime",{enumerable:!0,get:function(){return vO4.debounceTime}});var EO4=Gf();Object.defineProperty(Y0,"defaultIfEmpty",{enumerable:!0,get:function(){return EO4.defaultIfEmpty}});var MO4=U61();Object.defineProperty(Y0,"delay",{enumerable:!0,get:function(){return MO4.delay}});var SO4=Gx();Object.defineProperty(Y0,"delayWhen",{enumerable:!0,get:function(){return SO4.delayWhen}});var LO4=v61();Object.defineProperty(Y0,"dematerialize",{enumerable:!0,get:function(){return LO4.dematerialize}});var yO4=E61();Object.defineProperty(Y0,"distinct",{enumerable:!0,get:function(){return yO4.distinct}});var PO4=Zx();Object.defineProperty(Y0,"distinctUntilChanged",{enumerable:!0,get:function(){return PO4.distinctUntilChanged}});var $O4=M61();Object.defineProperty(Y0,"distinctUntilKeyChanged",{enumerable:!0,get:function(){return $O4.distinctUntilKeyChanged}});var uO4=S61();Object.defineProperty(Y0,"elementAt",{enumerable:!0,get:function(){return uO4.elementAt}});var TO4=L61();Object.defineProperty(Y0,"endWith",{enumerable:!0,get:function(){return TO4.endWith}});var OO4=y61();Object.defineProperty(Y0,"every",{enumerable:!0,get:function(){return OO4.every}});var mO4=P61();Object.defineProperty(Y0,"exhaust",{enumerable:!0,get:function(){return mO4.exhaust}});var lO4=Wx();Object.defineProperty(Y0,"exhaustAll",{enumerable:!0,get:function(){return lO4.exhaustAll}});var bO4=Cx();Object.defineProperty(Y0,"exhaustMap",{enumerable:!0,get:function(){return bO4.exhaustMap}});var hO4=$61();Object.defineProperty(Y0,"expand",{enumerable:!0,get:function(){return hO4.expand}});var jO4=XV();Object.defineProperty(Y0,"filter",{enumerable:!0,get:function(){return jO4.filter}});var kO4=u61();Object.defineProperty(Y0,"finalize",{enumerable:!0,get:function(){return kO4.finalize}});var xO4=wx();Object.defineProperty(Y0,"find",{enumerable:!0,get:function(){return xO4.find}});var cO4=T61();Object.defineProperty(Y0,"findIndex",{enumerable:!0,get:function(){return cO4.findIndex}});var pO4=O61();Object.defineProperty(Y0,"first",{enumerable:!0,get:function(){return pO4.first}});var iO4=m61();Object.defineProperty(Y0,"groupBy",{enumerable:!0,get:function(){return iO4.groupBy}});var nO4=Ix();Object.defineProperty(Y0,"ignoreElements",{enumerable:!0,get:function(){return nO4.ignoreElements}});var rO4=l61();Object.defineProperty(Y0,"isEmpty",{enumerable:!0,get:function(){return rO4.isEmpty}});var aO4=b61();Object.defineProperty(Y0,"last",{enumerable:!0,get:function(){return aO4.last}});var sO4=VV();Object.defineProperty(Y0,"map",{enumerable:!0,get:function(){return sO4.map}});var oO4=dx();Object.defineProperty(Y0,"mapTo",{enumerable:!0,get:function(){return oO4.mapTo}});var eO4=j61();Object.defineProperty(Y0,"materialize",{enumerable:!0,get:function(){return eO4.materialize}});var tO4=k61();Object.defineProperty(Y0,"max",{enumerable:!0,get:function(){return tO4.max}});var Im4=i61();Object.defineProperty(Y0,"merge",{enumerable:!0,get:function(){return Im4.merge}});var dm4=sQ();Object.defineProperty(Y0,"mergeAll",{enumerable:!0,get:function(){return dm4.mergeAll}});var Gm4=x61();Object.defineProperty(Y0,"flatMap",{enumerable:!0,get:function(){return Gm4.flatMap}});var Zm4=iw();Object.defineProperty(Y0,"mergeMap",{enumerable:!0,get:function(){return Zm4.mergeMap}});var Cm4=c61();Object.defineProperty(Y0,"mergeMapTo",{enumerable:!0,get:function(){return Cm4.mergeMapTo}});var Wm4=p61();Object.defineProperty(Y0,"mergeScan",{enumerable:!0,get:function(){return Wm4.mergeScan}});var wm4=n61();Object.defineProperty(Y0,"mergeWith",{enumerable:!0,get:function(){return wm4.mergeWith}});var Bm4=r61();Object.defineProperty(Y0,"min",{enumerable:!0,get:function(){return Bm4.min}});var Am4=fS();Object.defineProperty(Y0,"multicast",{enumerable:!0,get:function(){return Am4.multicast}});var Vm4=rQ();Object.defineProperty(Y0,"observeOn",{enumerable:!0,get:function(){return Vm4.observeOn}});var Xm4=a61();Object.defineProperty(Y0,"onErrorResumeNext",{enumerable:!0,get:function(){return Xm4.onErrorResumeNext}});var Ym4=s61();Object.defineProperty(Y0,"pairwise",{enumerable:!0,get:function(){return Ym4.pairwise}});var _m4=r20();Object.defineProperty(Y0,"partition",{enumerable:!0,get:function(){return _m4.partition}});var Dm4=o61();Object.defineProperty(Y0,"pluck",{enumerable:!0,get:function(){return Dm4.pluck}});var Hm4=e61();Object.defineProperty(Y0,"publish",{enumerable:!0,get:function(){return Hm4.publish}});var Fm4=t61();Object.defineProperty(Y0,"publishBehavior",{enumerable:!0,get:function(){return Fm4.publishBehavior}});var gm4=I81();Object.defineProperty(Y0,"publishLast",{enumerable:!0,get:function(){return gm4.publishLast}});var Jm4=d81();Object.defineProperty(Y0,"publishReplay",{enumerable:!0,get:function(){return Jm4.publishReplay}});var Km4=a20();Object.defineProperty(Y0,"race",{enumerable:!0,get:function(){return Km4.race}});var Nm4=Ax();Object.defineProperty(Y0,"raceWith",{enumerable:!0,get:function(){return Nm4.raceWith}});var zm4=Eg();Object.defineProperty(Y0,"reduce",{enumerable:!0,get:function(){return zm4.reduce}});var Qm4=G81();Object.defineProperty(Y0,"repeat",{enumerable:!0,get:function(){return Qm4.repeat}});var fm4=Z81();Object.defineProperty(Y0,"repeatWhen",{enumerable:!0,get:function(){return fm4.repeatWhen}});var qm4=C81();Object.defineProperty(Y0,"retry",{enumerable:!0,get:function(){return qm4.retry}});var Rm4=W81();Object.defineProperty(Y0,"retryWhen",{enumerable:!0,get:function(){return Rm4.retryWhen}});var Um4=mk();Object.defineProperty(Y0,"refCount",{enumerable:!0,get:function(){return Um4.refCount}});var vm4=Vx();Object.defineProperty(Y0,"sample",{enumerable:!0,get:function(){return vm4.sample}});var Em4=w81();Object.defineProperty(Y0,"sampleTime",{enumerable:!0,get:function(){return Em4.sampleTime}});var Mm4=B81();Object.defineProperty(Y0,"scan",{enumerable:!0,get:function(){return Mm4.scan}});var Sm4=A81();Object.defineProperty(Y0,"sequenceEqual",{enumerable:!0,get:function(){return Sm4.sequenceEqual}});var Lm4=Xx();Object.defineProperty(Y0,"share",{enumerable:!0,get:function(){return Lm4.share}});var ym4=X81();Object.defineProperty(Y0,"shareReplay",{enumerable:!0,get:function(){return ym4.shareReplay}});var Pm4=Y81();Object.defineProperty(Y0,"single",{enumerable:!0,get:function(){return Pm4.single}});var $m4=_81();Object.defineProperty(Y0,"skip",{enumerable:!0,get:function(){return $m4.skip}});var um4=D81();Object.defineProperty(Y0,"skipLast",{enumerable:!0,get:function(){return um4.skipLast}});var Tm4=H81();Object.defineProperty(Y0,"skipUntil",{enumerable:!0,get:function(){return Tm4.skipUntil}});var Om4=F81();Object.defineProperty(Y0,"skipWhile",{enumerable:!0,get:function(){return Om4.skipWhile}});var mm4=g81();Object.defineProperty(Y0,"startWith",{enumerable:!0,get:function(){return mm4.startWith}});var lm4=aQ();Object.defineProperty(Y0,"subscribeOn",{enumerable:!0,get:function(){return lm4.subscribeOn}});var bm4=J81();Object.defineProperty(Y0,"switchAll",{enumerable:!0,get:function(){return bm4.switchAll}});var hm4=wf();Object.defineProperty(Y0,"switchMap",{enumerable:!0,get:function(){return hm4.switchMap}});var jm4=K81();Object.defineProperty(Y0,"switchMapTo",{enumerable:!0,get:function(){return jm4.switchMapTo}});var km4=N81();Object.defineProperty(Y0,"switchScan",{enumerable:!0,get:function(){return km4.switchScan}});var xm4=Zf();Object.defineProperty(Y0,"take",{enumerable:!0,get:function(){return xm4.take}});var cm4=Bx();Object.defineProperty(Y0,"takeLast",{enumerable:!0,get:function(){return cm4.takeLast}});var pm4=z81();Object.defineProperty(Y0,"takeUntil",{enumerable:!0,get:function(){return pm4.takeUntil}});var im4=Q81();Object.defineProperty(Y0,"takeWhile",{enumerable:!0,get:function(){return im4.takeWhile}});var nm4=f81();Object.defineProperty(Y0,"tap",{enumerable:!0,get:function(){return nm4.tap}});var rm4=Yx();Object.defineProperty(Y0,"throttle",{enumerable:!0,get:function(){return rm4.throttle}});var am4=q81();Object.defineProperty(Y0,"throttleTime",{enumerable:!0,get:function(){return am4.throttleTime}});var sm4=Cf();Object.defineProperty(Y0,"throwIfEmpty",{enumerable:!0,get:function(){return sm4.throwIfEmpty}});var om4=R81();Object.defineProperty(Y0,"timeInterval",{enumerable:!0,get:function(){return om4.timeInterval}});var em4=JS();Object.defineProperty(Y0,"timeout",{enumerable:!0,get:function(){return em4.timeout}});var tm4=U81();Object.defineProperty(Y0,"timeoutWith",{enumerable:!0,get:function(){return tm4.timeoutWith}});var Il4=v81();Object.defineProperty(Y0,"timestamp",{enumerable:!0,get:function(){return Il4.timestamp}});var dl4=ok();Object.defineProperty(Y0,"toArray",{enumerable:!0,get:function(){return dl4.toArray}});var Gl4=E81();Object.defineProperty(Y0,"window",{enumerable:!0,get:function(){return Gl4.window}});var Zl4=M81();Object.defineProperty(Y0,"windowCount",{enumerable:!0,get:function(){return Zl4.windowCount}});var Cl4=S81();Object.defineProperty(Y0,"windowTime",{enumerable:!0,get:function(){return Cl4.windowTime}});var Wl4=y81();Object.defineProperty(Y0,"windowToggle",{enumerable:!0,get:function(){return Wl4.windowToggle}});var wl4=P81();Object.defineProperty(Y0,"windowWhen",{enumerable:!0,get:function(){return wl4.windowWhen}});var Bl4=$81();Object.defineProperty(Y0,"withLatestFrom",{enumerable:!0,get:function(){return Bl4.withLatestFrom}});var Al4=T81();Object.defineProperty(Y0,"zip",{enumerable:!0,get:function(){return Al4.zip}});var Vl4=u81();Object.defineProperty(Y0,"zipAll",{enumerable:!0,get:function(){return Vl4.zipAll}});var Xl4=O81();Object.defineProperty(Y0,"zipWith",{enumerable:!0,get:function(){return Xl4.zipWith}})});var m81=Y((wc9,o20)=>{function Hl4(I){G.debug=G,G.default=G,G.coerce=A,G.disable=w,G.enable=C,G.enabled=B,G.humanize=C51(),G.destroy=V,Object.keys(I).forEach((X)=>{G[X]=I[X]}),G.names=[],G.skips=[],G.formatters={};function d(X){let _=0;for(let F=0;F{if(O==="%%")return"%";$++;let V1=G.formatters[T];if(typeof V1==="function"){let c=Q[$];O=V1.call(E,c),Q.splice($,1),$--}return O}),G.formatArgs.call(E,Q),(E.log||G.log).apply(E,Q)}if(K.namespace=X,K.useColors=G.useColors(),K.color=G.selectColor(X),K.extend=Z,K.destroy=G.destroy,Object.defineProperty(K,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(F!==null)return F;if(g!==G.namespaces)g=G.namespaces,J=G.enabled(X);return J},set:(Q)=>{F=Q}}),typeof G.init==="function")G.init(K);return K}function Z(X,_){let F=G(this.namespace+(typeof _==="undefined"?":":_)+X);return F.log=this.log,F}function C(X){G.save(X),G.namespaces=X,G.names=[],G.skips=[];let _=(typeof X==="string"?X:"").trim().replace(" ",",").split(",").filter(Boolean);for(let F of _)if(F[0]==="-")G.skips.push(F.slice(1));else G.names.push(F)}function W(X,_){let F=0,g=0,J=-1,K=0;while(F"-"+_)].join(",");return G.enable(""),X}function B(X){for(let _ of G.skips)if(W(X,_))return!1;for(let _ of G.names)if(W(X,_))return!0;return!1}function A(X){if(X instanceof Error)return X.stack||X.message;return X}function V(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return G.enable(G.load()),G}o20.exports=Hl4});var t20=Y((e20,Dx)=>{e20.formatArgs=gl4;e20.save=Jl4;e20.load=Kl4;e20.useColors=Fl4;e20.storage=Nl4();e20.destroy=(()=>{let I=!1;return()=>{if(!I)I=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();e20.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Fl4(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let I;return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&(I=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(I[1],10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function gl4(I){if(I[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+I[0]+(this.useColors?"%c ":" ")+"+"+Dx.exports.humanize(this.diff),!this.useColors)return;let d="color: "+this.color;I.splice(1,0,d,"color: inherit");let G=0,Z=0;I[0].replace(/%[a-zA-Z%]/g,(C)=>{if(C==="%%")return;if(G++,C==="%c")Z=G}),I.splice(Z,0,d)}e20.log=console.debug||console.log||(()=>{});function Jl4(I){try{if(I)e20.storage.setItem("debug",I);else e20.storage.removeItem("debug")}catch(d){}}function Kl4(){let I;try{I=e20.storage.getItem("debug")}catch(d){}if(!I&&typeof process!=="undefined"&&"env"in process)I=process.env.DEBUG;return I}function Nl4(){try{return localStorage}catch(I){}}Dx.exports=m81()(e20);var{formatters:zl4}=Dx.exports;zl4.j=function(I){try{return JSON.stringify(I)}catch(d){return"[UnexpectedJSONParseError]: "+d.message}}});var l81=Y((Ac9,I40)=>{I40.exports=(I,d=process.argv)=>{let G=I.startsWith("-")?"":I.length===1?"-":"--",Z=d.indexOf(G+I),C=d.indexOf("--");return Z!==-1&&(C===-1||Z{var Ml4=B1("os"),d40=B1("tty"),HZ=l81(),{env:g8}=process,J_;if(HZ("no-color")||HZ("no-colors")||HZ("color=false")||HZ("color=never"))J_=0;else if(HZ("color")||HZ("colors")||HZ("color=true")||HZ("color=always"))J_=1;if("FORCE_COLOR"in g8)if(g8.FORCE_COLOR==="true")J_=1;else if(g8.FORCE_COLOR==="false")J_=0;else J_=g8.FORCE_COLOR.length===0?1:Math.min(parseInt(g8.FORCE_COLOR,10),3);function b81(I){if(I===0)return!1;return{level:I,hasBasic:!0,has256:I>=2,has16m:I>=3}}function h81(I,d){if(J_===0)return 0;if(HZ("color=16m")||HZ("color=full")||HZ("color=truecolor"))return 3;if(HZ("color=256"))return 2;if(I&&!d&&J_===void 0)return 0;let G=J_||0;if(g8.TERM==="dumb")return G;if(process.platform==="win32"){let Z=Ml4.release().split(".");if(Number(Z[0])>=10&&Number(Z[2])>=10586)return Number(Z[2])>=14931?3:2;return 1}if("CI"in g8){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((Z)=>(Z in g8))||g8.CI_NAME==="codeship")return 1;return G}if("TEAMCITY_VERSION"in g8)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(g8.TEAMCITY_VERSION)?1:0;if(g8.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in g8){let Z=parseInt((g8.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(g8.TERM_PROGRAM){case"iTerm.app":return Z>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(g8.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(g8.TERM))return 1;if("COLORTERM"in g8)return 1;return G}function Sl4(I){let d=h81(I,I&&I.isTTY);return b81(d)}G40.exports={supportsColor:Sl4,stdout:b81(h81(!0,d40.isatty(1))),stderr:b81(h81(!0,d40.isatty(2)))}});var w40=Y((C40,gx)=>{var Ll4=B1("tty"),Fx=B1("util");C40.init=ml4;C40.log=ul4;C40.formatArgs=Pl4;C40.save=Tl4;C40.load=Ol4;C40.useColors=yl4;C40.destroy=Fx.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");C40.colors=[6,2,3,4,5,1];try{let I=Hx();if(I&&(I.stderr||I).level>=2)C40.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch(I){}C40.inspectOpts=Object.keys(process.env).filter((I)=>{return/^debug_/i.test(I)}).reduce((I,d)=>{let G=d.substring(6).toLowerCase().replace(/_([a-z])/g,(C,W)=>{return W.toUpperCase()}),Z=process.env[d];if(/^(yes|on|true|enabled)$/i.test(Z))Z=!0;else if(/^(no|off|false|disabled)$/i.test(Z))Z=!1;else if(Z==="null")Z=null;else Z=Number(Z);return I[G]=Z,I},{});function yl4(){return"colors"in C40.inspectOpts?Boolean(C40.inspectOpts.colors):Ll4.isatty(process.stderr.fd)}function Pl4(I){let{namespace:d,useColors:G}=this;if(G){let Z=this.color,C="\x1B[3"+(Z<8?Z:"8;5;"+Z),W=` ${C};1m${d} \x1B[0m`;I[0]=W+I[0].split(` +`).join(` +`+W),I.push(C+"m+"+gx.exports.humanize(this.diff)+"\x1B[0m")}else I[0]=$l4()+d+" "+I[0]}function $l4(){if(C40.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function ul4(...I){return process.stderr.write(Fx.formatWithOptions(C40.inspectOpts,...I)+` +`)}function Tl4(I){if(I)process.env.DEBUG=I;else delete process.env.DEBUG}function Ol4(){return process.env.DEBUG}function ml4(I){I.inspectOpts={};let d=Object.keys(C40.inspectOpts);for(let G=0;Gd.trim()).join(" ")};Z40.O=function(I){return this.inspectOpts.colors=this.useColors,Fx.inspect(I,this.inspectOpts)}});var qS=Y((Yc9,j81)=>{if(typeof process==="undefined"||process.type==="renderer"||!1||process.__nwjs)j81.exports=t20();else j81.exports=w40()});var D40=Y((ed)=>{var __dirname="/Users/boris/code/claude-cli/node_modules/spawn-rx/lib/src",FZ=ed&&ed.__assign||function(){return FZ=Object.assign||function(I){for(var d,G=1,Z=arguments.length;G>")}C.next({source:P,text:h})}},K=new K_.Subscription;if(G.stdin)if(g.stdin)K.add(G.stdin.subscribe({next:function(P){return g.stdin.write(P)},error:C.error.bind(C),complete:function(){return g.stdin.end()}}));else C.error(new Error("opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required"));var Q=null,E=null,S=!1;if(g.stdout)E=new K_.AsyncSubject,g.stdout.on("data",J("stdout")),g.stdout.on("close",function(){E.next(!0),E.complete()});else E=K_.of(!0);if(g.stderr)Q=new K_.AsyncSubject,g.stderr.on("data",J("stderr")),g.stderr.on("close",function(){Q.next(!0),Q.complete()});else Q=K_.of(!0);return g.on("error",function(P){S=!0,C.error(P)}),g.on("close",function(P){S=!0;var $=K_.merge(E,Q).pipe(B40.reduce(function(h){return h},!0));if(P===0)$.subscribe(function(){return C.complete()});else $.subscribe(function(){var h=new Error("Failed with exit code: ".concat(P));h.exitCode=P,h.code=P,C.error(h)})}),K.add(new K_.Subscription(function(){if(S)return;if(Vf("Killing process: ".concat(_," ").concat(F.join())),G.jobber)nl4.connect("\\\\.\\pipe\\jobber-".concat(g.pid)),setTimeout(function(){return g.kill()},5000);else g.kill()})),K});return G.split?Z:Z.pipe(B40.map(function(C){return C===null||C===void 0?void 0:C.text}))}function Y40(I){return new Promise(function(d,G){var Z="";I.subscribe({next:function(C){return Z+=C},error:function(C){var W=new Error("".concat(Z,` +`).concat(C.message));if("exitCode"in C)W.exitCode=C.exitCode,W.code=C.exitCode;G(W)},complete:function(){return d(Z)}})})}function _40(I){return new Promise(function(d,G){var Z="",C="";I.subscribe({next:function(W){return W.source==="stdout"?Z+=W.text:C+=W.text},error:function(W){var w=new Error("".concat(Z,` +`).concat(W.message));if("exitCode"in W)w.exitCode=W.exitCode,w.code=W.exitCode,w.stdout=Z,w.stderr=C;G(w)},complete:function(){return d([Z,C])}})})}function sl4(I,d,G){if(G===null||G===void 0?void 0:G.split)return _40(k81(I,d,FZ(FZ({},G!==null&&G!==void 0?G:{}),{split:!0})));else return Y40(k81(I,d,FZ(FZ({},G!==null&&G!==void 0?G:{}),{split:!1})))}function ol4(I,d,G){if(G===null||G===void 0?void 0:G.split)return _40(vS(I,d,FZ(FZ({},G!==null&&G!==void 0?G:{}),{split:!0})));else return Y40(vS(I,d,FZ(FZ({},G!==null&&G!==void 0?G:{}),{split:!1})))}});var k40=Y((Wp9,j40)=>{var fb4="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";j40.exports=fb4});var i40=Y((wp9,p40)=>{var qb4=k40();function x40(){}function c40(){}c40.resetWarningCache=x40;p40.exports=function(){function I(Z,C,W,w,B,A){if(A===qb4)return;var V=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw V.name="Invariant Violation",V}I.isRequired=I;function d(){return I}var G={array:I,bigint:I,bool:I,func:I,number:I,object:I,string:I,symbol:I,any:I,arrayOf:d,element:I,elementType:I,instanceOf:d,node:I,objectOf:d,oneOf:d,oneOfType:d,shape:d,exact:d,checkPropTypes:c40,resetWarningCache:x40};return G.PropTypes=G,G}});var r40=Y((Vp9,n40)=>{n40.exports=i40()();var Bp9,Ap9});var t40=Y((Yp9,e40)=>{var Rb4=Hx(),Hf=l81();function o40(I){if(/^\d{3,4}$/.test(I)){let G=/(\d{1,2})(\d{2})/.exec(I);return{major:0,minor:parseInt(G[1],10),patch:parseInt(G[2],10)}}let d=(I||"").split(".").map((G)=>parseInt(G,10));return{major:d[0],minor:d[1],patch:d[2]}}function a81(I){let{env:d}=process;if("FORCE_HYPERLINK"in d)return!(d.FORCE_HYPERLINK.length>0&&parseInt(d.FORCE_HYPERLINK,10)===0);if(Hf("no-hyperlink")||Hf("no-hyperlinks")||Hf("hyperlink=false")||Hf("hyperlink=never"))return!1;if(Hf("hyperlink=true")||Hf("hyperlink=always"))return!0;if("NETLIFY"in d)return!0;if(!Rb4.supportsColor(I))return!1;if(I&&!I.isTTY)return!1;if(process.platform==="win32")return!1;if("CI"in d)return!1;if("TEAMCITY_VERSION"in d)return!1;if("TERM_PROGRAM"in d){let G=o40(d.TERM_PROGRAM_VERSION);switch(d.TERM_PROGRAM){case"iTerm.app":if(G.major===3)return G.minor>=1;return G.major>3;case"WezTerm":return G.major>=20200620;case"vscode":return G.major>1||G.major===1&&G.minor>=72}}if("VTE_VERSION"in d){if(d.VTE_VERSION==="0.50.0")return!1;let G=o40(d.VTE_VERSION);return G.major>0||G.minor>=50}return!1}e40.exports={supportsHyperlink:a81,stdout:a81(process.stdout),stderr:a81(process.stderr)}});var p50=Y((Qn9,c50)=>{var{defineProperty:xx,getOwnPropertyDescriptor:Wh4,getOwnPropertyNames:wh4}=Object,Bh4=Object.prototype.hasOwnProperty,cx=(I,d)=>xx(I,"name",{value:d,configurable:!0}),Ah4=(I,d)=>{for(var G in d)xx(I,G,{get:d[G],enumerable:!0})},Vh4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of wh4(d))if(!Bh4.call(I,C)&&C!==G)xx(I,C,{get:()=>d[C],enumerable:!(Z=Wh4(d,C))||Z.enumerable})}return I},Xh4=(I)=>Vh4(xx({},"__esModule",{value:!0}),I),O50={};Ah4(O50,{AlgorithmId:()=>h50,EndpointURLScheme:()=>b50,FieldPosition:()=>j50,HttpApiKeyAuthLocation:()=>l50,HttpAuthLocation:()=>m50,IniSectionType:()=>k50,RequestHandlerProtocol:()=>x50,SMITHY_CONTEXT_KEY:()=>Fh4,getDefaultClientConfiguration:()=>Dh4,resolveDefaultRuntimeConfig:()=>Hh4});c50.exports=Xh4(O50);var m50=((I)=>{return I.HEADER="header",I.QUERY="query",I})(m50||{}),l50=((I)=>{return I.HEADER="header",I.QUERY="query",I})(l50||{}),b50=((I)=>{return I.HTTP="http",I.HTTPS="https",I})(b50||{}),h50=((I)=>{return I.MD5="md5",I.CRC32="crc32",I.CRC32C="crc32c",I.SHA1="sha1",I.SHA256="sha256",I})(h50||{}),Yh4=cx((I)=>{let d=[];if(I.sha256!==void 0)d.push({algorithmId:()=>"sha256",checksumConstructor:()=>I.sha256});if(I.md5!=null)d.push({algorithmId:()=>"md5",checksumConstructor:()=>I.md5});return{_checksumAlgorithms:d,addChecksumAlgorithm(G){this._checksumAlgorithms.push(G)},checksumAlgorithms(){return this._checksumAlgorithms}}},"getChecksumConfiguration"),_h4=cx((I)=>{let d={};return I.checksumAlgorithms().forEach((G)=>{d[G.algorithmId()]=G.checksumConstructor()}),d},"resolveChecksumRuntimeConfig"),Dh4=cx((I)=>{return{...Yh4(I)}},"getDefaultClientConfiguration"),Hh4=cx((I)=>{return{..._h4(I)}},"resolveDefaultRuntimeConfig"),j50=((I)=>{return I[I.HEADER=0]="HEADER",I[I.TRAILER=1]="TRAILER",I})(j50||{}),Fh4="__smithy_context",k50=((I)=>{return I.PROFILE="profile",I.SSO_SESSION="sso-session",I.SERVICES="services",I})(k50||{}),x50=((I)=>{return I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0",I})(x50||{})});var s50=Y((fn9,a50)=>{var{defineProperty:px,getOwnPropertyDescriptor:gh4,getOwnPropertyNames:Jh4}=Object,Kh4=Object.prototype.hasOwnProperty,n50=(I,d)=>px(I,"name",{value:d,configurable:!0}),Nh4=(I,d)=>{for(var G in d)px(I,G,{get:d[G],enumerable:!0})},zh4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Jh4(d))if(!Kh4.call(I,C)&&C!==G)px(I,C,{get:()=>d[C],enumerable:!(Z=gh4(d,C))||Z.enumerable})}return I},Qh4=(I)=>zh4(px({},"__esModule",{value:!0}),I),r50={};Nh4(r50,{getSmithyContext:()=>fh4,normalizeProvider:()=>qh4});a50.exports=Qh4(r50);var i50=p50(),fh4=n50((I)=>I[i50.SMITHY_CONTEXT_KEY]||(I[i50.SMITHY_CONTEXT_KEY]={}),"getSmithyContext"),qh4=n50((I)=>{if(typeof I==="function")return I;let d=Promise.resolve(I);return()=>d},"normalizeProvider")});var z71=Y((qn9,e50)=>{var{defineProperty:ix,getOwnPropertyDescriptor:Rh4,getOwnPropertyNames:Uh4}=Object,vh4=Object.prototype.hasOwnProperty,Eh4=(I,d)=>ix(I,"name",{value:d,configurable:!0}),Mh4=(I,d)=>{for(var G in d)ix(I,G,{get:d[G],enumerable:!0})},Sh4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Uh4(d))if(!vh4.call(I,C)&&C!==G)ix(I,C,{get:()=>d[C],enumerable:!(Z=Rh4(d,C))||Z.enumerable})}return I},Lh4=(I)=>Sh4(ix({},"__esModule",{value:!0}),I),o50={};Mh4(o50,{isArrayBuffer:()=>yh4});e50.exports=Lh4(o50);var yh4=Eh4((I)=>typeof ArrayBuffer==="function"&&I instanceof ArrayBuffer||Object.prototype.toString.call(I)==="[object ArrayBuffer]","isArrayBuffer")});var G90=Y((Rn9,d90)=>{var{defineProperty:nx,getOwnPropertyDescriptor:Ph4,getOwnPropertyNames:$h4}=Object,uh4=Object.prototype.hasOwnProperty,t50=(I,d)=>nx(I,"name",{value:d,configurable:!0}),Th4=(I,d)=>{for(var G in d)nx(I,G,{get:d[G],enumerable:!0})},Oh4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of $h4(d))if(!uh4.call(I,C)&&C!==G)nx(I,C,{get:()=>d[C],enumerable:!(Z=Ph4(d,C))||Z.enumerable})}return I},mh4=(I)=>Oh4(nx({},"__esModule",{value:!0}),I),I90={};Th4(I90,{fromArrayBuffer:()=>bh4,fromString:()=>hh4});d90.exports=mh4(I90);var lh4=z71(),Q71=B1("buffer"),bh4=t50((I,d=0,G=I.byteLength-d)=>{if(!lh4.isArrayBuffer(I))throw new TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof I} (${I})`);return Q71.Buffer.from(I,d,G)},"fromArrayBuffer"),hh4=t50((I,d)=>{if(typeof I!=="string")throw new TypeError(`The "input" argument must be of type string. Received type ${typeof I} (${I})`);return d?Q71.Buffer.from(I,d):Q71.Buffer.from(I)},"fromString")});var WL=Y((Un9,w90)=>{var{defineProperty:rx,getOwnPropertyDescriptor:jh4,getOwnPropertyNames:kh4}=Object,xh4=Object.prototype.hasOwnProperty,f71=(I,d)=>rx(I,"name",{value:d,configurable:!0}),ch4=(I,d)=>{for(var G in d)rx(I,G,{get:d[G],enumerable:!0})},ph4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of kh4(d))if(!xh4.call(I,C)&&C!==G)rx(I,C,{get:()=>d[C],enumerable:!(Z=jh4(d,C))||Z.enumerable})}return I},ih4=(I)=>ph4(rx({},"__esModule",{value:!0}),I),Z90={};ch4(Z90,{fromUtf8:()=>W90,toUint8Array:()=>nh4,toUtf8:()=>rh4});w90.exports=ih4(Z90);var C90=G90(),W90=f71((I)=>{let d=C90.fromString(I,"utf8");return new Uint8Array(d.buffer,d.byteOffset,d.byteLength/Uint8Array.BYTES_PER_ELEMENT)},"fromUtf8"),nh4=f71((I)=>{if(typeof I==="string")return W90(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(I)},"toUint8Array"),rh4=f71((I)=>{if(typeof I==="string")return I;if(typeof I!=="object"||typeof I.byteOffset!=="number"||typeof I.byteLength!=="number")throw new Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return C90.fromArrayBuffer(I.buffer,I.byteOffset,I.byteLength).toString("utf8")},"toUtf8")});var D90=Y((vn9,_90)=>{var{defineProperty:ax,getOwnPropertyDescriptor:ah4,getOwnPropertyNames:sh4}=Object,oh4=Object.prototype.hasOwnProperty,B90=(I,d)=>ax(I,"name",{value:d,configurable:!0}),eh4=(I,d)=>{for(var G in d)ax(I,G,{get:d[G],enumerable:!0})},th4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of sh4(d))if(!oh4.call(I,C)&&C!==G)ax(I,C,{get:()=>d[C],enumerable:!(Z=ah4(d,C))||Z.enumerable})}return I},Ij4=(I)=>th4(ax({},"__esModule",{value:!0}),I),A90={};eh4(A90,{fromHex:()=>X90,toHex:()=>Y90});_90.exports=Ij4(A90);var V90={},q71={};for(let I=0;I<256;I++){let d=I.toString(16).toLowerCase();if(d.length===1)d=`0${d}`;V90[I]=d,q71[d]=I}function X90(I){if(I.length%2!==0)throw new Error("Hex encoded strings must have an even number length");let d=new Uint8Array(I.length/2);for(let G=0;G{var{defineProperty:sx,getOwnPropertyDescriptor:dj4,getOwnPropertyNames:Gj4}=Object,Zj4=Object.prototype.hasOwnProperty,R71=(I,d)=>sx(I,"name",{value:d,configurable:!0}),Cj4=(I,d)=>{for(var G in d)sx(I,G,{get:d[G],enumerable:!0})},Wj4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Gj4(d))if(!Zj4.call(I,C)&&C!==G)sx(I,C,{get:()=>d[C],enumerable:!(Z=dj4(d,C))||Z.enumerable})}return I},wj4=(I)=>Wj4(sx({},"__esModule",{value:!0}),I),H90={};Cj4(H90,{escapeUri:()=>F90,escapeUriPath:()=>Aj4});g90.exports=wj4(H90);var F90=R71((I)=>encodeURIComponent(I).replace(/[!'()*]/g,Bj4),"escapeUri"),Bj4=R71((I)=>`%${I.charCodeAt(0).toString(16).toUpperCase()}`,"hexEncode"),Aj4=R71((I)=>I.split("/").map(F90).join("/"),"escapeUriPath")});var m90=Y((Mn9,O90)=>{var{defineProperty:dc,getOwnPropertyDescriptor:Vj4,getOwnPropertyNames:Xj4}=Object,Yj4=Object.prototype.hasOwnProperty,f6=(I,d)=>dc(I,"name",{value:d,configurable:!0}),_j4=(I,d)=>{for(var G in d)dc(I,G,{get:d[G],enumerable:!0})},Dj4=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Xj4(d))if(!Yj4.call(I,C)&&C!==G)dc(I,C,{get:()=>d[C],enumerable:!(Z=Vj4(d,C))||Z.enumerable})}return I},Hj4=(I)=>Dj4(dc({},"__esModule",{value:!0}),I),f90={};_j4(f90,{SignatureV4:()=>jj4,clearCredentialCache:()=>yj4,createScope:()=>tx,getCanonicalHeaders:()=>M71,getCanonicalQuery:()=>L90,getPayloadHash:()=>Ic,getSigningKey:()=>S90,moveHeadersToQuery:()=>u90,prepareRequest:()=>L71});O90.exports=Hj4(f90);var K90=s50(),U71=WL(),Fj4="X-Amz-Algorithm",gj4="X-Amz-Credential",q90="X-Amz-Date",Jj4="X-Amz-SignedHeaders",Kj4="X-Amz-Expires",R90="X-Amz-Signature",U90="X-Amz-Security-Token",v90="authorization",E90=q90.toLowerCase(),Nj4="date",zj4=[v90,E90,Nj4],Qj4=R90.toLowerCase(),E71="x-amz-content-sha256",fj4=U90.toLowerCase(),qj4={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0},Rj4=/^proxy-/,Uj4=/^sec-/,v71="AWS4-HMAC-SHA256",vj4="AWS4-HMAC-SHA256-PAYLOAD",Ej4="UNSIGNED-PAYLOAD",Mj4=50,M90="aws4_request",Sj4=604800,E_=D90(),Lj4=WL(),vf={},ex=[],tx=f6((I,d,G)=>`${I}/${d}/${G}/${M90}`,"createScope"),S90=f6(async(I,d,G,Z,C)=>{let W=await N90(I,d.secretAccessKey,d.accessKeyId),w=`${G}:${Z}:${C}:${E_.toHex(W)}:${d.sessionToken}`;if(w in vf)return vf[w];ex.push(w);while(ex.length>Mj4)delete vf[ex.shift()];let B=`AWS4${d.secretAccessKey}`;for(let A of[G,Z,C,M90])B=await N90(I,B,A);return vf[w]=B},"getSigningKey"),yj4=f6(()=>{ex.length=0,Object.keys(vf).forEach((I)=>{delete vf[I]})},"clearCredentialCache"),N90=f6((I,d,G)=>{let Z=new I(d);return Z.update(Lj4.toUint8Array(G)),Z.digest()},"hmac"),M71=f6(({headers:I},d,G)=>{let Z={};for(let C of Object.keys(I).sort()){if(I[C]==null)continue;let W=C.toLowerCase();if(W in qj4||(d==null?void 0:d.has(W))||Rj4.test(W)||Uj4.test(W)){if(!G||G&&!G.has(W))continue}Z[W]=I[C].trim().replace(/\s+/g," ")}return Z},"getCanonicalHeaders"),wL=J90(),L90=f6(({query:I={}})=>{let d=[],G={};for(let Z of Object.keys(I).sort()){if(Z.toLowerCase()===Qj4)continue;d.push(Z);let C=I[Z];if(typeof C==="string")G[Z]=`${wL.escapeUri(Z)}=${wL.escapeUri(C)}`;else if(Array.isArray(C))G[Z]=C.slice(0).reduce((W,w)=>W.concat([`${wL.escapeUri(Z)}=${wL.escapeUri(w)}`]),[]).sort().join("&")}return d.map((Z)=>G[Z]).filter((Z)=>Z).join("&")},"getCanonicalQuery"),Pj4=z71(),$j4=WL(),Ic=f6(async({headers:I,body:d},G)=>{for(let Z of Object.keys(I))if(Z.toLowerCase()===E71)return I[Z];if(d==null)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";else if(typeof d==="string"||ArrayBuffer.isView(d)||Pj4.isArrayBuffer(d)){let Z=new G;return Z.update($j4.toUint8Array(d)),E_.toHex(await Z.digest())}return Ej4},"getPayloadHash"),z90=WL(),y90=class I{format(d){let G=[];for(let W of Object.keys(d)){let w=z90.fromUtf8(W);G.push(Uint8Array.from([w.byteLength]),w,this.formatHeaderValue(d[W]))}let Z=new Uint8Array(G.reduce((W,w)=>W+w.byteLength,0)),C=0;for(let W of G)Z.set(W,C),C+=W.byteLength;return Z}formatHeaderValue(d){switch(d.type){case"boolean":return Uint8Array.from([d.value?0:1]);case"byte":return Uint8Array.from([2,d.value]);case"short":let G=new DataView(new ArrayBuffer(3));return G.setUint8(0,3),G.setInt16(1,d.value,!1),new Uint8Array(G.buffer);case"integer":let Z=new DataView(new ArrayBuffer(5));return Z.setUint8(0,4),Z.setInt32(1,d.value,!1),new Uint8Array(Z.buffer);case"long":let C=new Uint8Array(9);return C[0]=5,C.set(d.value.bytes,1),C;case"binary":let W=new DataView(new ArrayBuffer(3+d.value.byteLength));W.setUint8(0,6),W.setUint16(1,d.value.byteLength,!1);let w=new Uint8Array(W.buffer);return w.set(d.value,3),w;case"string":let B=z90.fromUtf8(d.value),A=new DataView(new ArrayBuffer(3+B.byteLength));A.setUint8(0,7),A.setUint16(1,B.byteLength,!1);let V=new Uint8Array(A.buffer);return V.set(B,3),V;case"timestamp":let X=new Uint8Array(9);return X[0]=8,X.set(Oj4.fromNumber(d.value.valueOf()).bytes,1),X;case"uuid":if(!Tj4.test(d.value))throw new Error(`Invalid UUID received: ${d.value}`);let _=new Uint8Array(17);return _[0]=9,_.set(E_.fromHex(d.value.replace(/\-/g,"")),1),_}}};f6(y90,"HeaderFormatter");var uj4=y90,Tj4=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/,P90=class I{constructor(d){if(this.bytes=d,d.byteLength!==8)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(d){if(d>9223372036854776000||d<-9223372036854776000)throw new Error(`${d} is too large (or, if negative, too small) to represent as an Int64`);let G=new Uint8Array(8);for(let Z=7,C=Math.abs(Math.round(d));Z>-1&&C>0;Z--,C/=256)G[Z]=C;if(d<0)S71(G);return new I(G)}valueOf(){let d=this.bytes.slice(0),G=d[0]&128;if(G)S71(d);return parseInt(E_.toHex(d),16)*(G?-1:1)}toString(){return String(this.valueOf())}};f6(P90,"Int64");var Oj4=P90;function S71(I){for(let d=0;d<8;d++)I[d]^=255;for(let d=7;d>-1;d--)if(I[d]++,I[d]!==0)break}f6(S71,"negate");var mj4=f6((I,d)=>{I=I.toLowerCase();for(let G of Object.keys(d))if(I===G.toLowerCase())return!0;return!1},"hasHeader"),$90=f6(({headers:I,query:d,...G})=>({...G,headers:{...I},query:d?lj4(d):void 0}),"cloneRequest"),lj4=f6((I)=>Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{}),"cloneQuery"),u90=f6((I,d={})=>{var G;let{headers:Z,query:C={}}=typeof I.clone==="function"?I.clone():$90(I);for(let W of Object.keys(Z)){let w=W.toLowerCase();if(w.slice(0,6)==="x-amz-"&&!((G=d.unhoistableHeaders)==null?void 0:G.has(w)))C[W]=Z[W],delete Z[W]}return{...I,headers:Z,query:C}},"moveHeadersToQuery"),L71=f6((I)=>{I=typeof I.clone==="function"?I.clone():$90(I);for(let d of Object.keys(I.headers))if(zj4.indexOf(d.toLowerCase())>-1)delete I.headers[d];return I},"prepareRequest"),bj4=f6((I)=>hj4(I).toISOString().replace(/\.\d{3}Z$/,"Z"),"iso8601"),hj4=f6((I)=>{if(typeof I==="number")return new Date(I*1000);if(typeof I==="string"){if(Number(I))return new Date(Number(I)*1000);return new Date(I)}return I},"toDate"),T90=class I{constructor({applyChecksum:d,credentials:G,region:Z,service:C,sha256:W,uriEscapePath:w=!0}){this.headerFormatter=new uj4,this.service=C,this.sha256=W,this.uriEscapePath=w,this.applyChecksum=typeof d==="boolean"?d:!0,this.regionProvider=K90.normalizeProvider(Z),this.credentialProvider=K90.normalizeProvider(G)}async presign(d,G={}){let{signingDate:Z=new Date,expiresIn:C=3600,unsignableHeaders:W,unhoistableHeaders:w,signableHeaders:B,signingRegion:A,signingService:V}=G,X=await this.credentialProvider();this.validateResolvedCredentials(X);let _=A??await this.regionProvider(),{longDate:F,shortDate:g}=ox(Z);if(C>Sj4)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");let J=tx(g,_,V??this.service),K=u90(L71(d),{unhoistableHeaders:w});if(X.sessionToken)K.query[U90]=X.sessionToken;K.query[Fj4]=v71,K.query[gj4]=`${X.accessKeyId}/${J}`,K.query[q90]=F,K.query[Kj4]=C.toString(10);let Q=M71(K,W,B);return K.query[Jj4]=Q90(Q),K.query[R90]=await this.getSignature(F,J,this.getSigningKey(X,_,g,V),this.createCanonicalRequest(K,Q,await Ic(d,this.sha256))),K}async sign(d,G){if(typeof d==="string")return this.signString(d,G);else if(d.headers&&d.payload)return this.signEvent(d,G);else if(d.message)return this.signMessage(d,G);else return this.signRequest(d,G)}async signEvent({headers:d,payload:G},{signingDate:Z=new Date,priorSignature:C,signingRegion:W,signingService:w}){let B=W??await this.regionProvider(),{shortDate:A,longDate:V}=ox(Z),X=tx(A,B,w??this.service),_=await Ic({headers:{},body:G},this.sha256),F=new this.sha256;F.update(d);let g=E_.toHex(await F.digest()),J=[vj4,V,X,C,g,_].join(` +`);return this.signString(J,{signingDate:Z,signingRegion:B,signingService:w})}async signMessage(d,{signingDate:G=new Date,signingRegion:Z,signingService:C}){return this.signEvent({headers:this.headerFormatter.format(d.message.headers),payload:d.message.body},{signingDate:G,signingRegion:Z,signingService:C,priorSignature:d.priorSignature}).then((w)=>{return{message:d.message,signature:w}})}async signString(d,{signingDate:G=new Date,signingRegion:Z,signingService:C}={}){let W=await this.credentialProvider();this.validateResolvedCredentials(W);let w=Z??await this.regionProvider(),{shortDate:B}=ox(G),A=new this.sha256(await this.getSigningKey(W,w,B,C));return A.update(U71.toUint8Array(d)),E_.toHex(await A.digest())}async signRequest(d,{signingDate:G=new Date,signableHeaders:Z,unsignableHeaders:C,signingRegion:W,signingService:w}={}){let B=await this.credentialProvider();this.validateResolvedCredentials(B);let A=W??await this.regionProvider(),V=L71(d),{longDate:X,shortDate:_}=ox(G),F=tx(_,A,w??this.service);if(V.headers[E90]=X,B.sessionToken)V.headers[fj4]=B.sessionToken;let g=await Ic(V,this.sha256);if(!mj4(E71,V.headers)&&this.applyChecksum)V.headers[E71]=g;let J=M71(V,C,Z),K=await this.getSignature(X,F,this.getSigningKey(B,A,_,w),this.createCanonicalRequest(V,J,g));return V.headers[v90]=`${v71} Credential=${B.accessKeyId}/${F}, SignedHeaders=${Q90(J)}, Signature=${K}`,V}createCanonicalRequest(d,G,Z){let C=Object.keys(G).sort();return`${d.method} +${this.getCanonicalPath(d)} +${L90(d)} +${C.map((W)=>`${W}:${G[W]}`).join(` +`)} + +${C.join(";")} +${Z}`}async createStringToSign(d,G,Z){let C=new this.sha256;C.update(U71.toUint8Array(Z));let W=await C.digest();return`${v71} +${d} +${G} +${E_.toHex(W)}`}getCanonicalPath({path:d}){if(this.uriEscapePath){let G=[];for(let W of d.split("/")){if((W==null?void 0:W.length)===0)continue;if(W===".")continue;if(W==="..")G.pop();else G.push(W)}let Z=`${(d==null?void 0:d.startsWith("/"))?"/":""}${G.join("/")}${G.length>0&&(d==null?void 0:d.endsWith("/"))?"/":""}`;return wL.escapeUri(Z).replace(/%2F/g,"/")}return d}async getSignature(d,G,Z,C){let W=await this.createStringToSign(d,G,C),w=new this.sha256(await Z);return w.update(U71.toUint8Array(W)),E_.toHex(await w.digest())}getSigningKey(d,G,Z,C){return S90(this.sha256,d,Z,G,C||this.service)}validateResolvedCredentials(d){if(typeof d!=="object"||typeof d.accessKeyId!=="string"||typeof d.secretAccessKey!=="string")throw new Error("Resolved credential object is not valid")}};f6(T90,"SignatureV4");var jj4=T90,ox=f6((I)=>{let d=bj4(I).replace(/[\-:]/g,"");return{longDate:d,shortDate:d.slice(0,8)}},"formatDate"),Q90=f6((I)=>Object.keys(I).sort().join(";"),"getCanonicalHeaderList")});var x1=Y((Sn9,Cc)=>{var l90,b90,h90,j90,k90,x90,c90,p90,i90,n90,r90,a90,s90,Gc,y71,o90,e90,t90,Ef,I30,d30,G30,Z30,C30,W30,w30,B30,A30,Zc,V30,X30,Y30;(function(I){var d=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd)define("tslib",["exports"],function(Z){I(G(d,G(Z)))});else if(typeof Cc==="object"&&typeof Sn9==="object")I(G(d,G(Sn9)));else I(G(d));function G(Z,C){if(Z!==d)if(typeof Object.create==="function")Object.defineProperty(Z,"__esModule",{value:!0});else Z.__esModule=!0;return function(W,w){return Z[W]=C?C(W,w):w}}})(function(I){var d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(W,w){W.__proto__=w}||function(W,w){for(var B in w)if(Object.prototype.hasOwnProperty.call(w,B))W[B]=w[B]};l90=function(W,w){if(typeof w!=="function"&&w!==null)throw new TypeError("Class extends value "+String(w)+" is not a constructor or null");d(W,w);function B(){this.constructor=W}W.prototype=w===null?Object.create(w):(B.prototype=w.prototype,new B)},b90=Object.assign||function(W){for(var w,B=1,A=arguments.length;B=0;F--)if(_=W[F])X=(V<3?_(X):V>3?_(w,B,X):_(w,B))||X;return V>3&&X&&Object.defineProperty(w,B,X),X},k90=function(W,w){return function(B,A){w(B,A,W)}},x90=function(W,w,B,A,V,X){function _(O){if(O!==void 0&&typeof O!=="function")throw new TypeError("Function expected");return O}var F=A.kind,g=F==="getter"?"get":F==="setter"?"set":"value",J=!w&&W?A.static?W:W.prototype:null,K=w||(J?Object.getOwnPropertyDescriptor(J,A.name):{}),Q,E=!1;for(var S=B.length-1;S>=0;S--){var P={};for(var $ in A)P[$]=$==="access"?{}:A[$];for(var $ in A.access)P.access[$]=A.access[$];P.addInitializer=function(O){if(E)throw new TypeError("Cannot add initializers after decoration has completed");X.push(_(O||null))};var h=B[S](F==="accessor"?{get:K.get,set:K.set}:K[g],P);if(F==="accessor"){if(h===void 0)continue;if(h===null||typeof h!=="object")throw new TypeError("Object expected");if(Q=_(h.get))K.get=Q;if(Q=_(h.set))K.set=Q;if(Q=_(h.init))V.unshift(Q)}else if(Q=_(h))if(F==="field")V.unshift(Q);else K[g]=Q}if(J)Object.defineProperty(J,A.name,K);E=!0},c90=function(W,w,B){var A=arguments.length>2;for(var V=0;V0&&X[X.length-1]))&&(J[0]===6||J[0]===2)){B=0;continue}if(J[0]===3&&(!X||J[1]>X[0]&&J[1]=W.length)W=void 0;return{value:W&&W[A++],done:!W}}};throw new TypeError(w?"Object is not iterable.":"Symbol.iterator is not defined.")},y71=function(W,w){var B=typeof Symbol==="function"&&W[Symbol.iterator];if(!B)return W;var A=B.call(W),V,X=[],_;try{while((w===void 0||w-- >0)&&!(V=A.next()).done)X.push(V.value)}catch(F){_={error:F}}finally{try{if(V&&!V.done&&(B=A.return))B.call(A)}finally{if(_)throw _.error}}return X},o90=function(){for(var W=[],w=0;w1||g(S,$)})},P)V[S]=P(V[S])}}function g(S,P){try{J(A[S](P))}catch($){E(X[0][3],$)}}function J(S){S.value instanceof Ef?Promise.resolve(S.value.v).then(K,Q):E(X[0][2],S)}function K(S){g("next",S)}function Q(S){g("throw",S)}function E(S,P){if(S(P),X.shift(),X.length)g(X[0][0],X[0][1])}},d30=function(W){var w,B;return w={},A("next"),A("throw",function(V){throw V}),A("return"),w[Symbol.iterator]=function(){return this},w;function A(V,X){w[V]=W[V]?function(_){return(B=!B)?{value:Ef(W[V](_)),done:!1}:X?X(_):_}:X}},G30=function(W){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var w=W[Symbol.asyncIterator],B;return w?w.call(W):(W=typeof Gc==="function"?Gc(W):W[Symbol.iterator](),B={},A("next"),A("throw"),A("return"),B[Symbol.asyncIterator]=function(){return this},B);function A(X){B[X]=W[X]&&function(_){return new Promise(function(F,g){_=W[X](_),V(F,g,_.done,_.value)})}}function V(X,_,F,g){Promise.resolve(g).then(function(J){X({value:J,done:F})},_)}},Z30=function(W,w){if(Object.defineProperty)Object.defineProperty(W,"raw",{value:w});else W.raw=w;return W};var G=Object.create?function(W,w){Object.defineProperty(W,"default",{enumerable:!0,value:w})}:function(W,w){W.default=w},Z=function(W){return Z=Object.getOwnPropertyNames||function(w){var B=[];for(var A in w)if(Object.prototype.hasOwnProperty.call(w,A))B[B.length]=A;return B},Z(W)};C30=function(W){if(W&&W.__esModule)return W;var w={};if(W!=null){for(var B=Z(W),A=0;A{Object.defineProperty(D30,"__esModule",{value:!0});D30.booleanSelector=D30.SelectorType=void 0;var kj4;(function(I){I.ENV="env",I.CONFIG="shared config entry"})(kj4=D30.SelectorType||(D30.SelectorType={}));var xj4=(I,d,G)=>{if(!(d in I))return;if(I[d]==="true")return!0;if(I[d]==="false")return!1;throw new Error(`Cannot load ${G} "${d}". Expected "true" or "false", got ${I[d]}.`)};D30.booleanSelector=xj4});var $71=Y((P71)=>{Object.defineProperty(P71,"__esModule",{value:!0});var cj4=x1();cj4.__exportStar(F30(),P71)});var z30=Y((g30)=>{Object.defineProperty(g30,"__esModule",{value:!0});g30.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS=g30.DEFAULT_USE_DUALSTACK_ENDPOINT=g30.CONFIG_USE_DUALSTACK_ENDPOINT=g30.ENV_USE_DUALSTACK_ENDPOINT=void 0;var Wc=$71();g30.ENV_USE_DUALSTACK_ENDPOINT="AWS_USE_DUALSTACK_ENDPOINT";g30.CONFIG_USE_DUALSTACK_ENDPOINT="use_dualstack_endpoint";g30.DEFAULT_USE_DUALSTACK_ENDPOINT=!1;g30.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS={environmentVariableSelector:(I)=>Wc.booleanSelector(I,g30.ENV_USE_DUALSTACK_ENDPOINT,Wc.SelectorType.ENV),configFileSelector:(I)=>Wc.booleanSelector(I,g30.CONFIG_USE_DUALSTACK_ENDPOINT,Wc.SelectorType.CONFIG),default:!1}});var U30=Y((Q30)=>{Object.defineProperty(Q30,"__esModule",{value:!0});Q30.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS=Q30.DEFAULT_USE_FIPS_ENDPOINT=Q30.CONFIG_USE_FIPS_ENDPOINT=Q30.ENV_USE_FIPS_ENDPOINT=void 0;var wc=$71();Q30.ENV_USE_FIPS_ENDPOINT="AWS_USE_FIPS_ENDPOINT";Q30.CONFIG_USE_FIPS_ENDPOINT="use_fips_endpoint";Q30.DEFAULT_USE_FIPS_ENDPOINT=!1;Q30.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS={environmentVariableSelector:(I)=>wc.booleanSelector(I,Q30.ENV_USE_FIPS_ENDPOINT,wc.SelectorType.ENV),configFileSelector:(I)=>wc.booleanSelector(I,Q30.CONFIG_USE_FIPS_ENDPOINT,wc.SelectorType.CONFIG),default:!1}});var M30=Y((v30)=>{Object.defineProperty(v30,"__esModule",{value:!0});v30.normalizeProvider=void 0;var nj4=(I)=>{if(typeof I==="function")return I;let d=Promise.resolve(I);return()=>d};v30.normalizeProvider=nj4});var M_=Y((u71)=>{Object.defineProperty(u71,"__esModule",{value:!0});var rj4=x1();rj4.__exportStar(M30(),u71)});var P30=Y((L30)=>{Object.defineProperty(L30,"__esModule",{value:!0});L30.resolveCustomEndpointsConfig=void 0;var S30=M_(),aj4=(I)=>{var d,G;let{endpoint:Z,urlParser:C}=I;return{...I,tls:(d=I.tls)!==null&&d!==void 0?d:!0,endpoint:S30.normalizeProvider(typeof Z==="string"?C(Z):Z),isCustomEndpoint:!0,useDualstackEndpoint:S30.normalizeProvider((G=I.useDualstackEndpoint)!==null&&G!==void 0?G:!1)}};L30.resolveCustomEndpointsConfig=aj4});var T30=Y(($30)=>{Object.defineProperty($30,"__esModule",{value:!0});$30.getEndpointFromRegion=void 0;var sj4=async(I)=>{var d;let{tls:G=!0}=I,Z=await I.region();if(!new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/).test(Z))throw new Error("Invalid region in client config");let W=await I.useDualstackEndpoint(),w=await I.useFipsEndpoint(),{hostname:B}=(d=await I.regionInfoProvider(Z,{useDualstackEndpoint:W,useFipsEndpoint:w}))!==null&&d!==void 0?d:{};if(!B)throw new Error("Cannot resolve hostname from client config");return I.urlParser(`${G?"https:":"http:"}//${B}`)};$30.getEndpointFromRegion=sj4});var b30=Y((m30)=>{Object.defineProperty(m30,"__esModule",{value:!0});m30.resolveEndpointsConfig=void 0;var O30=M_(),oj4=T30(),ej4=(I)=>{var d,G;let Z=O30.normalizeProvider((d=I.useDualstackEndpoint)!==null&&d!==void 0?d:!1),{endpoint:C,useFipsEndpoint:W,urlParser:w}=I;return{...I,tls:(G=I.tls)!==null&&G!==void 0?G:!0,endpoint:C?O30.normalizeProvider(typeof C==="string"?w(C):C):()=>oj4.getEndpointFromRegion({...I,useDualstackEndpoint:Z,useFipsEndpoint:W}),isCustomEndpoint:!!C,useDualstackEndpoint:Z}};m30.resolveEndpointsConfig=ej4});var h30=Y((Mf)=>{Object.defineProperty(Mf,"__esModule",{value:!0});var Bc=x1();Bc.__exportStar(z30(),Mf);Bc.__exportStar(U30(),Mf);Bc.__exportStar(P30(),Mf);Bc.__exportStar(b30(),Mf)});var p30=Y((j30)=>{Object.defineProperty(j30,"__esModule",{value:!0});j30.NODE_REGION_CONFIG_FILE_OPTIONS=j30.NODE_REGION_CONFIG_OPTIONS=j30.REGION_INI_NAME=j30.REGION_ENV_NAME=void 0;j30.REGION_ENV_NAME="AWS_REGION";j30.REGION_INI_NAME="region";j30.NODE_REGION_CONFIG_OPTIONS={environmentVariableSelector:(I)=>I[j30.REGION_ENV_NAME],configFileSelector:(I)=>I[j30.REGION_INI_NAME],default:()=>{throw new Error("Region is missing")}};j30.NODE_REGION_CONFIG_FILE_OPTIONS={preferredFile:"credentials"}});var T71=Y((i30)=>{Object.defineProperty(i30,"__esModule",{value:!0});i30.isFipsRegion=void 0;var Ik4=(I)=>typeof I==="string"&&(I.startsWith("fips-")||I.endsWith("-fips"));i30.isFipsRegion=Ik4});var s30=Y((r30)=>{Object.defineProperty(r30,"__esModule",{value:!0});r30.getRealRegion=void 0;var dk4=T71(),Gk4=(I)=>dk4.isFipsRegion(I)?["fips-aws-global","aws-fips"].includes(I)?"us-east-1":I.replace(/fips-(dkr-|prod-)?|-fips/,""):I;r30.getRealRegion=Gk4});var I60=Y((e30)=>{Object.defineProperty(e30,"__esModule",{value:!0});e30.resolveRegionConfig=void 0;var o30=s30(),Zk4=T71(),Ck4=(I)=>{let{region:d,useFipsEndpoint:G}=I;if(!d)throw new Error("Region is missing");return{...I,region:async()=>{if(typeof d==="string")return o30.getRealRegion(d);let Z=await d();return o30.getRealRegion(Z)},useFipsEndpoint:async()=>{let Z=typeof d==="string"?d:await d();if(Zk4.isFipsRegion(Z))return!0;return typeof G!=="function"?Promise.resolve(!!G):G()}}};e30.resolveRegionConfig=Ck4});var G60=Y((Ac)=>{Object.defineProperty(Ac,"__esModule",{value:!0});var d60=x1();d60.__exportStar(p30(),Ac);d60.__exportStar(I60(),Ac)});var C60=Y((Z60)=>{Object.defineProperty(Z60,"__esModule",{value:!0})});var w60=Y((W60)=>{Object.defineProperty(W60,"__esModule",{value:!0})});var V60=Y((B60)=>{Object.defineProperty(B60,"__esModule",{value:!0});B60.getHostnameFromVariants=void 0;var Wk4=(I=[],{useFipsEndpoint:d,useDualstackEndpoint:G})=>{var Z;return(Z=I.find(({tags:C})=>d===C.includes("fips")&&G===C.includes("dualstack")))===null||Z===void 0?void 0:Z.hostname};B60.getHostnameFromVariants=Wk4});var _60=Y((X60)=>{Object.defineProperty(X60,"__esModule",{value:!0});X60.getResolvedHostname=void 0;var wk4=(I,{regionHostname:d,partitionHostname:G})=>d?d:G?G.replace("{region}",I):void 0;X60.getResolvedHostname=wk4});var F60=Y((D60)=>{Object.defineProperty(D60,"__esModule",{value:!0});D60.getResolvedPartition=void 0;var Bk4=(I,{partitionHash:d})=>{var G;return(G=Object.keys(d||{}).find((Z)=>d[Z].regions.includes(I)))!==null&&G!==void 0?G:"aws"};D60.getResolvedPartition=Bk4});var K60=Y((g60)=>{Object.defineProperty(g60,"__esModule",{value:!0});g60.getResolvedSigningRegion=void 0;var Ak4=(I,{signingRegion:d,regionRegex:G,useFipsEndpoint:Z})=>{if(d)return d;else if(Z){let C=G.replace("\\\\","\\").replace(/^\^/g,"\\.").replace(/\$$/g,"\\."),W=I.match(C);if(W)return W[0].slice(1,-1)}};g60.getResolvedSigningRegion=Ak4});var f60=Y((z60)=>{Object.defineProperty(z60,"__esModule",{value:!0});z60.getRegionInfo=void 0;var N60=V60(),Vk4=_60(),Xk4=F60(),Yk4=K60(),_k4=(I,{useFipsEndpoint:d=!1,useDualstackEndpoint:G=!1,signingService:Z,regionHash:C,partitionHash:W})=>{var w,B,A,V,X,_;let F=Xk4.getResolvedPartition(I,{partitionHash:W}),g=I in C?I:(B=(w=W[F])===null||w===void 0?void 0:w.endpoint)!==null&&B!==void 0?B:I,J={useFipsEndpoint:d,useDualstackEndpoint:G},K=N60.getHostnameFromVariants((A=C[g])===null||A===void 0?void 0:A.variants,J),Q=N60.getHostnameFromVariants((V=W[F])===null||V===void 0?void 0:V.variants,J),E=Vk4.getResolvedHostname(g,{regionHostname:K,partitionHostname:Q});if(E===void 0)throw new Error(`Endpoint resolution failed for: ${{resolvedRegion:g,useFipsEndpoint:d,useDualstackEndpoint:G}}`);let S=Yk4.getResolvedSigningRegion(E,{signingRegion:(X=C[g])===null||X===void 0?void 0:X.signingRegion,regionRegex:W[F].regionRegex,useFipsEndpoint:d});return{partition:F,signingService:Z,hostname:E,...S&&{signingRegion:S},...((_=C[g])===null||_===void 0?void 0:_.signingService)&&{signingService:C[g].signingService}}};z60.getRegionInfo=_k4});var q60=Y((BL)=>{Object.defineProperty(BL,"__esModule",{value:!0});var O71=x1();O71.__exportStar(C60(),BL);O71.__exportStar(w60(),BL);O71.__exportStar(f60(),BL)});var Cd=Y((AL)=>{Object.defineProperty(AL,"__esModule",{value:!0});var m71=x1();m71.__exportStar(h30(),AL);m71.__exportStar(G60(),AL);m71.__exportStar(q60(),AL)});var b71=Y((R60)=>{Object.defineProperty(R60,"__esModule",{value:!0});R60.FieldPosition=void 0;var Dk4;(function(I){I[I.HEADER=0]="HEADER",I[I.TRAILER=1]="TRAILER"})(Dk4=R60.FieldPosition||(R60.FieldPosition={}))});var M60=Y((v60)=>{Object.defineProperty(v60,"__esModule",{value:!0});v60.Field=void 0;var Hk4=b71();class U60{constructor({name:I,kind:d=Hk4.FieldPosition.HEADER,values:G=[]}){this.name=I,this.kind=d,this.values=G}add(I){this.values.push(I)}set(I){this.values=I}remove(I){this.values=this.values.filter((d)=>d!==I)}toString(){return this.values.map((I)=>I.includes(",")||I.includes(" ")?`"${I}"`:I).join(", ")}get(){return this.values}}v60.Field=U60});var P60=Y((L60)=>{Object.defineProperty(L60,"__esModule",{value:!0});L60.Fields=void 0;class S60{constructor({fields:I=[],encoding:d="utf-8"}){this.entries={},I.forEach(this.setField.bind(this)),this.encoding=d}setField(I){this.entries[I.name.toLowerCase()]=I}getField(I){return this.entries[I.toLowerCase()]}removeField(I){delete this.entries[I.toLowerCase()]}getByType(I){return Object.values(this.entries).filter((d)=>d.kind===I)}}L60.Fields=S60});var u60=Y(($60)=>{Object.defineProperty($60,"__esModule",{value:!0})});var m60=Y((T60)=>{Object.defineProperty(T60,"__esModule",{value:!0});T60.HttpRequest=void 0;class h71{constructor(I){this.method=I.method||"GET",this.hostname=I.hostname||"localhost",this.port=I.port,this.query=I.query||{},this.headers=I.headers||{},this.body=I.body,this.protocol=I.protocol?I.protocol.slice(-1)!==":"?`${I.protocol}:`:I.protocol:"https:",this.path=I.path?I.path.charAt(0)!=="/"?`/${I.path}`:I.path:"/"}static isInstance(I){if(!I)return!1;let d=I;return"method"in d&&"protocol"in d&&"hostname"in d&&"path"in d&&typeof d.query==="object"&&typeof d.headers==="object"}clone(){let I=new h71({...this,headers:{...this.headers}});if(I.query)I.query=Fk4(I.query);return I}}T60.HttpRequest=h71;function Fk4(I){return Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{})}});var j60=Y((b60)=>{Object.defineProperty(b60,"__esModule",{value:!0});b60.HttpResponse=void 0;class l60{constructor(I){this.statusCode=I.statusCode,this.headers=I.headers||{},this.body=I.body}static isInstance(I){if(!I)return!1;let d=I;return typeof d.statusCode==="number"&&typeof d.headers==="object"}}b60.HttpResponse=l60});var c60=Y((k60)=>{Object.defineProperty(k60,"__esModule",{value:!0});k60.isValidHostname=void 0;function gk4(I){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(I)}k60.isValidHostname=gk4});var J8=Y((HV)=>{Object.defineProperty(HV,"__esModule",{value:!0});var hg=x1();hg.__exportStar(M60(),HV);hg.__exportStar(b71(),HV);hg.__exportStar(P60(),HV);hg.__exportStar(u60(),HV);hg.__exportStar(m60(),HV);hg.__exportStar(j60(),HV);hg.__exportStar(c60(),HV)});var jg=Y((n60)=>{Object.defineProperty(n60,"__esModule",{value:!0});n60.getContentLengthPlugin=n60.contentLengthMiddlewareOptions=n60.contentLengthMiddleware=void 0;var Jk4=J8(),p60="content-length";function i60(I){return(d)=>async(G)=>{let Z=G.request;if(Jk4.HttpRequest.isInstance(Z)){let{body:C,headers:W}=Z;if(C&&Object.keys(W).map((w)=>w.toLowerCase()).indexOf(p60)===-1)try{let w=I(C);Z.headers={...Z.headers,[p60]:String(w)}}catch(w){}}return d({...G,request:Z})}}n60.contentLengthMiddleware=i60;n60.contentLengthMiddlewareOptions={step:"build",tags:["SET_CONTENT_LENGTH","CONTENT_LENGTH"],name:"contentLengthMiddleware",override:!0};var Kk4=(I)=>({applyToStack:(d)=>{d.add(i60(I.bodyLengthChecker),n60.contentLengthMiddlewareOptions)}});n60.getContentLengthPlugin=Kk4});var e60=Y((s60)=>{Object.defineProperty(s60,"__esModule",{value:!0});s60.isArnBucketName=s60.isDnsCompatibleBucketName=s60.S3_HOSTNAME_PATTERN=s60.DOT_PATTERN=s60.resolveParamsForS3=void 0;var zk4=async(I)=>{let d=(I===null||I===void 0?void 0:I.Bucket)||"";if(typeof I.Bucket==="string")I.Bucket=d.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?"));if(s60.isArnBucketName(d)){if(I.ForcePathStyle===!0)throw new Error("Path-style addressing cannot be used with ARN buckets")}else if(!s60.isDnsCompatibleBucketName(d)||d.indexOf(".")!==-1&&!String(I.Endpoint).startsWith("http:")||d.toLowerCase()!==d||d.length<3)I.ForcePathStyle=!0;if(I.DisableMultiRegionAccessPoints)I.disableMultiRegionAccessPoints=!0,I.DisableMRAP=!0;return I};s60.resolveParamsForS3=zk4;var Qk4=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/,fk4=/(\d+\.){3}\d+/,qk4=/\.\./;s60.DOT_PATTERN=/\./;s60.S3_HOSTNAME_PATTERN=/^(.+\.)?s3(-fips)?(\.dualstack)?[.-]([a-z0-9-]+)\./;var Rk4=(I)=>Qk4.test(I)&&!fk4.test(I)&&!qk4.test(I);s60.isDnsCompatibleBucketName=Rk4;var Uk4=(I)=>{let[d,G,Z,C,W,w]=I.split(":"),B=d==="arn"&&I.split(":").length>=6,A=[d,G,Z,W,w].filter(Boolean).length===5;if(B&&!A)throw new Error(`Invalid ARN: ${I} was an invalid ARN.`);return d==="arn"&&!!G&&!!Z&&!!W&&!!w};s60.isArnBucketName=Uk4});var t60=Y((k71)=>{Object.defineProperty(k71,"__esModule",{value:!0});var Sk4=x1();Sk4.__exportStar(e60(),k71)});var G80=Y((I80)=>{Object.defineProperty(I80,"__esModule",{value:!0});I80.createConfigValueProvider=void 0;var Lk4=(I,d,G)=>{let Z=async()=>{var C;let W=(C=G[I])!==null&&C!==void 0?C:G[d];if(typeof W==="function")return W();return W};if(I==="endpoint"||d==="endpoint")return async()=>{let C=await Z();if(C&&typeof C==="object"){if("url"in C)return C.url.href;if("hostname"in C){let{protocol:W,hostname:w,port:B,path:A}=C;return`${W}//${w}${B?":"+B:""}${A}`}}return C};return Z};I80.createConfigValueProvider=Lk4});var c71=Y((Z80)=>{Object.defineProperty(Z80,"__esModule",{value:!0});Z80.resolveParams=Z80.getEndpointFromInstructions=void 0;var yk4=t60(),Pk4=G80(),$k4=async(I,d,G,Z)=>{let C=await Z80.resolveParams(I,d,G);if(typeof G.endpointProvider!=="function")throw new Error("config.endpointProvider is not set.");return G.endpointProvider(C,Z)};Z80.getEndpointFromInstructions=$k4;var uk4=async(I,d,G)=>{var Z;let C={},W=((Z=d===null||d===void 0?void 0:d.getEndpointParameterInstructions)===null||Z===void 0?void 0:Z.call(d))||{};for(let[w,B]of Object.entries(W))switch(B.type){case"staticContextParams":C[w]=B.value;break;case"contextParams":C[w]=I[B.name];break;case"clientContextParams":case"builtInParams":C[w]=await Pk4.createConfigValueProvider(B.name,w,G)();break;default:throw new Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(B))}if(Object.keys(W).length===0)Object.assign(C,G);if(String(G.serviceId).toLowerCase()==="s3")await yk4.resolveParamsForS3(C);return C};Z80.resolveParams=uk4});var w80=Y((C80)=>{Object.defineProperty(C80,"__esModule",{value:!0});C80.parseQueryString=void 0;function Ok4(I){let d={};if(I=I.replace(/^\?/,""),I)for(let G of I.split("&")){let[Z,C=null]=G.split("=");if(Z=decodeURIComponent(Z),C)C=decodeURIComponent(C);if(!(Z in d))d[Z]=C;else if(Array.isArray(d[Z]))d[Z].push(C);else d[Z]=[d[Z],C]}return d}C80.parseQueryString=Ok4});var FV=Y((B80)=>{Object.defineProperty(B80,"__esModule",{value:!0});B80.parseUrl=void 0;var mk4=w80(),lk4=(I)=>{if(typeof I==="string")return B80.parseUrl(new URL(I));let{hostname:d,pathname:G,port:Z,protocol:C,search:W}=I,w;if(W)w=mk4.parseQueryString(W);return{hostname:d,port:Z?parseInt(Z):void 0,protocol:C,path:G,query:w}};B80.parseUrl=lk4});var i71=Y((V80)=>{Object.defineProperty(V80,"__esModule",{value:!0});V80.toEndpointV1=void 0;var A80=FV(),bk4=(I)=>{if(typeof I==="object"){if("url"in I)return A80.parseUrl(I.url);return I}return A80.parseUrl(I)};V80.toEndpointV1=bk4});var _80=Y((Vc)=>{Object.defineProperty(Vc,"__esModule",{value:!0});var Y80=x1();Y80.__exportStar(c71(),Vc);Y80.__exportStar(i71(),Vc)});var n71=Y((D80)=>{Object.defineProperty(D80,"__esModule",{value:!0});D80.endpointMiddleware=void 0;var hk4=c71(),jk4=({config:I,instructions:d})=>{return(G,Z)=>async(C)=>{var W,w;let B=await hk4.getEndpointFromInstructions(C.input,{getEndpointParameterInstructions(){return d}},{...I},Z);Z.endpointV2=B,Z.authSchemes=(W=B.properties)===null||W===void 0?void 0:W.authSchemes;let A=(w=Z.authSchemes)===null||w===void 0?void 0:w[0];if(A)Z.signing_region=A.signingRegion,Z.signing_service=A.signingName;return G({...C})}};D80.endpointMiddleware=jk4});var r71=Y((F80)=>{Object.defineProperty(F80,"__esModule",{value:!0});F80.deserializerMiddleware=void 0;var kk4=(I,d)=>(G,Z)=>async(C)=>{let{response:W}=await G(C);try{let w=await d(W,I);return{response:W,output:w}}catch(w){if(Object.defineProperty(w,"$response",{value:W}),!("$metadata"in w))w.message+=` + Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;throw w}};F80.deserializerMiddleware=kk4});var a71=Y((J80)=>{Object.defineProperty(J80,"__esModule",{value:!0});J80.serializerMiddleware=void 0;var xk4=(I,d)=>(G,Z)=>async(C)=>{var W;let w=((W=Z.endpointV2)===null||W===void 0?void 0:W.url)&&I.urlParser?async()=>I.urlParser(Z.endpointV2.url):I.endpoint;if(!w)throw new Error("No valid endpoint provider available.");let B=await d(C.input,{...I,endpoint:w});return G({...C,request:B})};J80.serializerMiddleware=xk4});var q80=Y((N80)=>{Object.defineProperty(N80,"__esModule",{value:!0});N80.getSerdePlugin=N80.serializerMiddlewareOption=N80.deserializerMiddlewareOption=void 0;var ck4=r71(),pk4=a71();N80.deserializerMiddlewareOption={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0};N80.serializerMiddlewareOption={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0};function ik4(I,d,G){return{applyToStack:(Z)=>{Z.add(ck4.deserializerMiddleware(I,G),N80.deserializerMiddlewareOption),Z.add(pk4.serializerMiddleware(I,d),N80.serializerMiddlewareOption)}}}N80.getSerdePlugin=ik4});var r2=Y((VL)=>{Object.defineProperty(VL,"__esModule",{value:!0});var s71=x1();s71.__exportStar(r71(),VL);s71.__exportStar(q80(),VL);s71.__exportStar(a71(),VL)});var E80=Y((R80)=>{Object.defineProperty(R80,"__esModule",{value:!0});R80.getEndpointPlugin=R80.endpointMiddlewareOptions=void 0;var nk4=r2(),rk4=n71();R80.endpointMiddlewareOptions={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:nk4.serializerMiddlewareOption.name};var ak4=(I,d)=>({applyToStack:(G)=>{G.addRelativeTo(rk4.endpointMiddleware({config:I,instructions:d}),R80.endpointMiddlewareOptions)}});R80.getEndpointPlugin=ak4});var L80=Y((M80)=>{Object.defineProperty(M80,"__esModule",{value:!0});M80.resolveEndpointConfig=void 0;var o71=M_(),sk4=i71(),ok4=(I)=>{var d,G,Z;let C=(d=I.tls)!==null&&d!==void 0?d:!0,{endpoint:W}=I,w=W!=null?async()=>sk4.toEndpointV1(await o71.normalizeProvider(W)()):void 0;return{...I,endpoint:w,tls:C,isCustomEndpoint:!!W,useDualstackEndpoint:o71.normalizeProvider((G=I.useDualstackEndpoint)!==null&&G!==void 0?G:!1),useFipsEndpoint:o71.normalizeProvider((Z=I.useFipsEndpoint)!==null&&Z!==void 0?Z:!1)}};M80.resolveEndpointConfig=ok4});var P80=Y((y80)=>{Object.defineProperty(y80,"__esModule",{value:!0})});var u2=Y((kg)=>{Object.defineProperty(kg,"__esModule",{value:!0});var XL=x1();XL.__exportStar(_80(),kg);XL.__exportStar(n71(),kg);XL.__exportStar(E80(),kg);XL.__exportStar(L80(),kg);XL.__exportStar(P80(),kg)});var Xc=Y(($80)=>{Object.defineProperty($80,"__esModule",{value:!0});$80.getHostHeaderPlugin=$80.hostHeaderMiddlewareOptions=$80.hostHeaderMiddleware=$80.resolveHostHeaderConfig=void 0;var ek4=J8();function tk4(I){return I}$80.resolveHostHeaderConfig=tk4;var Ix4=(I)=>(d)=>async(G)=>{if(!ek4.HttpRequest.isInstance(G.request))return d(G);let{request:Z}=G,{handlerProtocol:C=""}=I.requestHandler.metadata||{};if(C.indexOf("h2")>=0&&!Z.headers[":authority"])delete Z.headers.host,Z.headers[":authority"]="";else if(!Z.headers.host){let W=Z.hostname;if(Z.port!=null)W+=`:${Z.port}`;Z.headers.host=W}return d(G)};$80.hostHeaderMiddleware=Ix4;$80.hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};var dx4=(I)=>({applyToStack:(d)=>{d.add($80.hostHeaderMiddleware(I),$80.hostHeaderMiddlewareOptions)}});$80.getHostHeaderPlugin=dx4});var j80=Y((m80)=>{Object.defineProperty(m80,"__esModule",{value:!0});m80.getLoggerPlugin=m80.loggerMiddlewareOptions=m80.loggerMiddleware=void 0;var Zx4=()=>(I,d)=>async(G)=>{var Z,C;try{let W=await I(G),{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X,overrideOutputFilterSensitiveLog:_}=V,F=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog,g=_!==null&&_!==void 0?_:d.outputFilterSensitiveLog,{$metadata:J,...K}=W.output;return(Z=A===null||A===void 0?void 0:A.info)===null||Z===void 0||Z.call(A,{clientName:w,commandName:B,input:F(G.input),output:g(K),metadata:J}),W}catch(W){let{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X}=V,_=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog;throw(C=A===null||A===void 0?void 0:A.error)===null||C===void 0||C.call(A,{clientName:w,commandName:B,input:_(G.input),error:W,metadata:W.$metadata}),W}};m80.loggerMiddleware=Zx4;m80.loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};var Cx4=(I)=>({applyToStack:(d)=>{d.add(m80.loggerMiddleware(),m80.loggerMiddlewareOptions)}});m80.getLoggerPlugin=Cx4});var Yc=Y((e71)=>{Object.defineProperty(e71,"__esModule",{value:!0});var Wx4=x1();Wx4.__exportStar(j80(),e71)});var _c=Y((x80)=>{Object.defineProperty(x80,"__esModule",{value:!0});x80.getRecursionDetectionPlugin=x80.addRecursionDetectionMiddlewareOptions=x80.recursionDetectionMiddleware=void 0;var wx4=J8(),k80="X-Amzn-Trace-Id",Bx4="AWS_LAMBDA_FUNCTION_NAME",Ax4="_X_AMZN_TRACE_ID",Vx4=(I)=>(d)=>async(G)=>{let{request:Z}=G;if(!wx4.HttpRequest.isInstance(Z)||I.runtime!=="node"||Z.headers.hasOwnProperty(k80))return d(G);let C=process.env[Bx4],W=process.env[Ax4],w=(B)=>typeof B==="string"&&B.length>0;if(w(C)&&w(W))Z.headers[k80]=W;return d({...G,request:Z})};x80.recursionDetectionMiddleware=Vx4;x80.addRecursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};var Xx4=(I)=>({applyToStack:(d)=>{d.add(x80.recursionDetectionMiddleware(I),x80.addRecursionDetectionMiddlewareOptions)}});x80.getRecursionDetectionPlugin=Xx4});var Dc=Y((a80)=>{Object.defineProperty(a80,"__esModule",{value:!0});a80.DEFAULT_RETRY_MODE=a80.DEFAULT_MAX_ATTEMPTS=a80.RETRY_MODES=void 0;var r80;(function(I){I.STANDARD="standard",I.ADAPTIVE="adaptive"})(r80=a80.RETRY_MODES||(a80.RETRY_MODES={}));a80.DEFAULT_MAX_ATTEMPTS=3;a80.DEFAULT_RETRY_MODE=r80.STANDARD});var t80=Y((o80)=>{Object.defineProperty(o80,"__esModule",{value:!0});o80.NODEJS_TIMEOUT_ERROR_CODES=o80.TRANSIENT_ERROR_STATUS_CODES=o80.TRANSIENT_ERROR_CODES=o80.THROTTLING_ERROR_CODES=o80.CLOCK_SKEW_ERROR_CODES=void 0;o80.CLOCK_SKEW_ERROR_CODES=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"];o80.THROTTLING_ERROR_CODES=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"];o80.TRANSIENT_ERROR_CODES=["AbortError","TimeoutError","RequestTimeout","RequestTimeoutException"];o80.TRANSIENT_ERROR_STATUS_CODES=[500,502,503,504];o80.NODEJS_TIMEOUT_ERROR_CODES=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"]});var _L=Y((I70)=>{Object.defineProperty(I70,"__esModule",{value:!0});I70.isServerError=I70.isTransientError=I70.isThrottlingError=I70.isClockSkewError=I70.isRetryableByTrait=void 0;var YL=t80(),gx4=(I)=>I.$retryable!==void 0;I70.isRetryableByTrait=gx4;var Jx4=(I)=>YL.CLOCK_SKEW_ERROR_CODES.includes(I.name);I70.isClockSkewError=Jx4;var Kx4=(I)=>{var d,G;return((d=I.$metadata)===null||d===void 0?void 0:d.httpStatusCode)===429||YL.THROTTLING_ERROR_CODES.includes(I.name)||((G=I.$retryable)===null||G===void 0?void 0:G.throttling)==!0};I70.isThrottlingError=Kx4;var Nx4=(I)=>{var d;return YL.TRANSIENT_ERROR_CODES.includes(I.name)||YL.NODEJS_TIMEOUT_ERROR_CODES.includes((I===null||I===void 0?void 0:I.code)||"")||YL.TRANSIENT_ERROR_STATUS_CODES.includes(((d=I.$metadata)===null||d===void 0?void 0:d.httpStatusCode)||0)};I70.isTransientError=Nx4;var zx4=(I)=>{var d;if(((d=I.$metadata)===null||d===void 0?void 0:d.httpStatusCode)!==void 0){let G=I.$metadata.httpStatusCode;if(500<=G&&G<=599&&!I70.isTransientError(I))return!0;return!1}return!1};I70.isServerError=zx4});var t71=Y((C70)=>{Object.defineProperty(C70,"__esModule",{value:!0});C70.DefaultRateLimiter=void 0;var Rx4=_L();class Z70{constructor(I){var d,G,Z,C,W;this.currentCapacity=0,this.enabled=!1,this.lastMaxRate=0,this.measuredTxRate=0,this.requestCount=0,this.lastTimestamp=0,this.timeWindow=0,this.beta=(d=I===null||I===void 0?void 0:I.beta)!==null&&d!==void 0?d:0.7,this.minCapacity=(G=I===null||I===void 0?void 0:I.minCapacity)!==null&&G!==void 0?G:1,this.minFillRate=(Z=I===null||I===void 0?void 0:I.minFillRate)!==null&&Z!==void 0?Z:0.5,this.scaleConstant=(C=I===null||I===void 0?void 0:I.scaleConstant)!==null&&C!==void 0?C:0.4,this.smooth=(W=I===null||I===void 0?void 0:I.smooth)!==null&&W!==void 0?W:0.8;let w=this.getCurrentTimeInSeconds();this.lastThrottleTime=w,this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}getCurrentTimeInSeconds(){return Date.now()/1000}async getSendToken(){return this.acquireTokenBucket(1)}async acquireTokenBucket(I){if(!this.enabled)return;if(this.refillTokenBucket(),I>this.currentCapacity){let d=(I-this.currentCapacity)/this.fillRate*1000;await new Promise((G)=>setTimeout(G,d))}this.currentCapacity=this.currentCapacity-I}refillTokenBucket(){let I=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=I;return}let d=(I-this.lastTimestamp)*this.fillRate;this.currentCapacity=Math.min(this.maxCapacity,this.currentCapacity+d),this.lastTimestamp=I}updateClientSendingRate(I){let d;if(this.updateMeasuredRate(),Rx4.isThrottlingError(I)){let Z=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=Z,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),d=this.cubicThrottle(Z),this.enableTokenBucket()}else this.calculateTimeWindow(),d=this.cubicSuccess(this.getCurrentTimeInSeconds());let G=Math.min(d,2*this.measuredTxRate);this.updateTokenBucketRate(G)}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(I){return this.getPrecise(I*this.beta)}cubicSuccess(I){return this.getPrecise(this.scaleConstant*Math.pow(I-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(I){this.refillTokenBucket(),this.fillRate=Math.max(I,this.minFillRate),this.maxCapacity=Math.max(I,this.minCapacity),this.currentCapacity=Math.min(this.currentCapacity,this.maxCapacity)}updateMeasuredRate(){let I=this.getCurrentTimeInSeconds(),d=Math.floor(I*2)/2;if(this.requestCount++,d>this.lastTxRateBucket){let G=this.requestCount/(d-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=d}}getPrecise(I){return parseFloat(I.toFixed(8))}}C70.DefaultRateLimiter=Z70});var Sf=Y((w70)=>{Object.defineProperty(w70,"__esModule",{value:!0});w70.REQUEST_HEADER=w70.INVOCATION_ID_HEADER=w70.NO_RETRY_INCREMENT=w70.TIMEOUT_RETRY_COST=w70.RETRY_COST=w70.INITIAL_RETRY_TOKENS=w70.THROTTLING_RETRY_DELAY_BASE=w70.MAXIMUM_RETRY_DELAY=w70.DEFAULT_RETRY_DELAY_BASE=void 0;w70.DEFAULT_RETRY_DELAY_BASE=100;w70.MAXIMUM_RETRY_DELAY=20000;w70.THROTTLING_RETRY_DELAY_BASE=500;w70.INITIAL_RETRY_TOKENS=500;w70.RETRY_COST=5;w70.TIMEOUT_RETRY_COST=10;w70.NO_RETRY_INCREMENT=1;w70.INVOCATION_ID_HEADER="amz-sdk-invocation-id";w70.REQUEST_HEADER="amz-sdk-request"});var Y70=Y((V70)=>{Object.defineProperty(V70,"__esModule",{value:!0});V70.getDefaultRetryBackoffStrategy=void 0;var A70=Sf(),$x4=()=>{let I=A70.DEFAULT_RETRY_DELAY_BASE;return{computeNextBackoffDelay:(Z)=>{return Math.floor(Math.min(A70.MAXIMUM_RETRY_DELAY,Math.random()*2**Z*I))},setDelayBase:(Z)=>{I=Z}}};V70.getDefaultRetryBackoffStrategy=$x4});var H70=Y((_70)=>{Object.defineProperty(_70,"__esModule",{value:!0});_70.createDefaultRetryToken=void 0;var ux4=Sf(),Tx4=({retryDelay:I,retryCount:d,retryCost:G})=>{return{getRetryCount:()=>d,getRetryDelay:()=>Math.min(ux4.MAXIMUM_RETRY_DELAY,I),getRetryCost:()=>G}};_70.createDefaultRetryToken=Tx4});var Hc=Y((J70)=>{Object.defineProperty(J70,"__esModule",{value:!0});J70.StandardRetryStrategy=void 0;var II1=Dc(),S_=Sf(),Ox4=Y70(),F70=H70();class g70{constructor(I){this.maxAttempts=I,this.mode=II1.RETRY_MODES.STANDARD,this.capacity=S_.INITIAL_RETRY_TOKENS,this.retryBackoffStrategy=Ox4.getDefaultRetryBackoffStrategy(),this.maxAttemptsProvider=typeof I==="function"?I:async()=>I}async acquireInitialRetryToken(I){return F70.createDefaultRetryToken({retryDelay:S_.DEFAULT_RETRY_DELAY_BASE,retryCount:0})}async refreshRetryTokenForRetry(I,d){let G=await this.getMaxAttempts();if(this.shouldRetry(I,d,G)){let Z=d.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?S_.THROTTLING_RETRY_DELAY_BASE:S_.DEFAULT_RETRY_DELAY_BASE);let C=this.retryBackoffStrategy.computeNextBackoffDelay(I.getRetryCount()),W=d.retryAfterHint?Math.max(d.retryAfterHint.getTime()-Date.now()||0,C):C,w=this.getCapacityCost(Z);return this.capacity-=w,F70.createDefaultRetryToken({retryDelay:W,retryCount:I.getRetryCount()+1,retryCost:w})}throw new Error("No retry token available")}recordSuccess(I){var d;this.capacity=Math.max(S_.INITIAL_RETRY_TOKENS,this.capacity+((d=I.getRetryCost())!==null&&d!==void 0?d:S_.NO_RETRY_INCREMENT))}getCapacity(){return this.capacity}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(I){return console.warn(`Max attempts provider could not resolve. Using default of ${II1.DEFAULT_MAX_ATTEMPTS}`),II1.DEFAULT_MAX_ATTEMPTS}}shouldRetry(I,d,G){return I.getRetryCount()=this.getCapacityCost(d.errorType)&&this.isRetryableError(d.errorType)}getCapacityCost(I){return I==="TRANSIENT"?S_.TIMEOUT_RETRY_COST:S_.RETRY_COST}isRetryableError(I){return I==="THROTTLING"||I==="TRANSIENT"}}J70.StandardRetryStrategy=g70});var f70=Y((z70)=>{Object.defineProperty(z70,"__esModule",{value:!0});z70.AdaptiveRetryStrategy=void 0;var mx4=Dc(),lx4=t71(),bx4=Hc();class N70{constructor(I,d){this.maxAttemptsProvider=I,this.mode=mx4.RETRY_MODES.ADAPTIVE;let{rateLimiter:G}=d!==null&&d!==void 0?d:{};this.rateLimiter=G!==null&&G!==void 0?G:new lx4.DefaultRateLimiter,this.standardRetryStrategy=new bx4.StandardRetryStrategy(I)}async acquireInitialRetryToken(I){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(I)}async refreshRetryTokenForRetry(I,d){return this.rateLimiter.updateClientSendingRate(d),this.standardRetryStrategy.refreshRetryTokenForRetry(I,d)}recordSuccess(I){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(I)}}z70.AdaptiveRetryStrategy=N70});var v70=Y((R70)=>{Object.defineProperty(R70,"__esModule",{value:!0});R70.ConfiguredRetryStrategy=void 0;var hx4=Sf(),jx4=Hc();class q70 extends jx4.StandardRetryStrategy{constructor(I,d=hx4.DEFAULT_RETRY_DELAY_BASE){super(typeof I==="function"?I:async()=>I);if(typeof d==="number")this.computeNextBackoffDelay=()=>d;else this.computeNextBackoffDelay=d}async refreshRetryTokenForRetry(I,d){let G=await super.refreshRetryTokenForRetry(I,d);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}R70.ConfiguredRetryStrategy=q70});var M70=Y((E70)=>{Object.defineProperty(E70,"__esModule",{value:!0})});var Wd=Y((gV)=>{Object.defineProperty(gV,"__esModule",{value:!0});var xg=x1();xg.__exportStar(f70(),gV);xg.__exportStar(v70(),gV);xg.__exportStar(t71(),gV);xg.__exportStar(Hc(),gV);xg.__exportStar(Dc(),gV);xg.__exportStar(Sf(),gV);xg.__exportStar(M70(),gV)});var dI1=Y((S70)=>{Object.defineProperty(S70,"__esModule",{value:!0});S70.default=cx4;var kx4=xx4(B1("crypto"));function xx4(I){return I&&I.__esModule?I:{default:I}}var gc=new Uint8Array(256),Fc=gc.length;function cx4(){if(Fc>gc.length-16)kx4.default.randomFillSync(gc),Fc=0;return gc.slice(Fc,Fc+=16)}});var P70=Y((L70)=>{Object.defineProperty(L70,"__esModule",{value:!0});L70.default=void 0;var ix4=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;L70.default=ix4});var DL=Y(($70)=>{Object.defineProperty($70,"__esModule",{value:!0});$70.default=void 0;var nx4=rx4(P70());function rx4(I){return I&&I.__esModule?I:{default:I}}function ax4(I){return typeof I==="string"&&nx4.default.test(I)}var sx4=ax4;$70.default=sx4});var HL=Y((T70)=>{Object.defineProperty(T70,"__esModule",{value:!0});T70.default=void 0;var ox4=ex4(DL());function ex4(I){return I&&I.__esModule?I:{default:I}}var n8=[];for(let I=0;I<256;++I)n8.push((I+256).toString(16).substr(1));function tx4(I,d=0){let G=(n8[I[d+0]]+n8[I[d+1]]+n8[I[d+2]]+n8[I[d+3]]+"-"+n8[I[d+4]]+n8[I[d+5]]+"-"+n8[I[d+6]]+n8[I[d+7]]+"-"+n8[I[d+8]]+n8[I[d+9]]+"-"+n8[I[d+10]]+n8[I[d+11]]+n8[I[d+12]]+n8[I[d+13]]+n8[I[d+14]]+n8[I[d+15]]).toLowerCase();if(!ox4.default(G))throw TypeError("Stringified UUID is invalid");return G}var Ic4=tx4;T70.default=Ic4});var j70=Y((b70)=>{Object.defineProperty(b70,"__esModule",{value:!0});b70.default=void 0;var dc4=l70(dI1()),Gc4=l70(HL());function l70(I){return I&&I.__esModule?I:{default:I}}var m70,GI1,ZI1=0,CI1=0;function Zc4(I,d,G){let Z=d&&G||0,C=d||new Array(16);I=I||{};let W=I.node||m70,w=I.clockseq!==void 0?I.clockseq:GI1;if(W==null||w==null){let F=I.random||(I.rng||dc4.default)();if(W==null)W=m70=[F[0]|1,F[1],F[2],F[3],F[4],F[5]];if(w==null)w=GI1=(F[6]<<8|F[7])&16383}let B=I.msecs!==void 0?I.msecs:Date.now(),A=I.nsecs!==void 0?I.nsecs:CI1+1,V=B-ZI1+(A-CI1)/1e4;if(V<0&&I.clockseq===void 0)w=w+1&16383;if((V<0||B>ZI1)&&I.nsecs===void 0)A=0;if(A>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");ZI1=B,CI1=A,GI1=w,B+=12219292800000;let X=((B&268435455)*1e4+A)%4294967296;C[Z++]=X>>>24&255,C[Z++]=X>>>16&255,C[Z++]=X>>>8&255,C[Z++]=X&255;let _=B/4294967296*1e4&268435455;C[Z++]=_>>>8&255,C[Z++]=_&255,C[Z++]=_>>>24&15|16,C[Z++]=_>>>16&255,C[Z++]=w>>>8|128,C[Z++]=w&255;for(let F=0;F<6;++F)C[Z+F]=W[F];return d||Gc4.default(C)}var Cc4=Zc4;b70.default=Cc4});var WI1=Y((k70)=>{Object.defineProperty(k70,"__esModule",{value:!0});k70.default=void 0;var Wc4=wc4(DL());function wc4(I){return I&&I.__esModule?I:{default:I}}function Bc4(I){if(!Wc4.default(I))throw TypeError("Invalid UUID");let d,G=new Uint8Array(16);return G[0]=(d=parseInt(I.slice(0,8),16))>>>24,G[1]=d>>>16&255,G[2]=d>>>8&255,G[3]=d&255,G[4]=(d=parseInt(I.slice(9,13),16))>>>8,G[5]=d&255,G[6]=(d=parseInt(I.slice(14,18),16))>>>8,G[7]=d&255,G[8]=(d=parseInt(I.slice(19,23),16))>>>8,G[9]=d&255,G[10]=(d=parseInt(I.slice(24,36),16))/1099511627776&255,G[11]=d/4294967296&255,G[12]=d>>>24&255,G[13]=d>>>16&255,G[14]=d>>>8&255,G[15]=d&255,G}var Ac4=Bc4;k70.default=Ac4});var wI1=Y((n70)=>{Object.defineProperty(n70,"__esModule",{value:!0});n70.default=_c4;n70.URL=n70.DNS=void 0;var Vc4=c70(HL()),Xc4=c70(WI1());function c70(I){return I&&I.__esModule?I:{default:I}}function Yc4(I){I=unescape(encodeURIComponent(I));let d=[];for(let G=0;G{Object.defineProperty(a70,"__esModule",{value:!0});a70.default=void 0;var Fc4=gc4(B1("crypto"));function gc4(I){return I&&I.__esModule?I:{default:I}}function Jc4(I){if(Array.isArray(I))I=Buffer.from(I);else if(typeof I==="string")I=Buffer.from(I,"utf8");return Fc4.default.createHash("md5").update(I).digest()}var Kc4=Jc4;a70.default=Kc4});var dI0=Y((t70)=>{Object.defineProperty(t70,"__esModule",{value:!0});t70.default=void 0;var Nc4=e70(wI1()),zc4=e70(o70());function e70(I){return I&&I.__esModule?I:{default:I}}var Qc4=Nc4.default("v3",48,zc4.default),fc4=Qc4;t70.default=fc4});var WI0=Y((ZI0)=>{Object.defineProperty(ZI0,"__esModule",{value:!0});ZI0.default=void 0;var qc4=GI0(dI1()),Rc4=GI0(HL());function GI0(I){return I&&I.__esModule?I:{default:I}}function Uc4(I,d,G){I=I||{};let Z=I.random||(I.rng||qc4.default)();if(Z[6]=Z[6]&15|64,Z[8]=Z[8]&63|128,d){G=G||0;for(let C=0;C<16;++C)d[G+C]=Z[C];return d}return Rc4.default(Z)}var vc4=Uc4;ZI0.default=vc4});var AI0=Y((wI0)=>{Object.defineProperty(wI0,"__esModule",{value:!0});wI0.default=void 0;var Ec4=Mc4(B1("crypto"));function Mc4(I){return I&&I.__esModule?I:{default:I}}function Sc4(I){if(Array.isArray(I))I=Buffer.from(I);else if(typeof I==="string")I=Buffer.from(I,"utf8");return Ec4.default.createHash("sha1").update(I).digest()}var Lc4=Sc4;wI0.default=Lc4});var _I0=Y((XI0)=>{Object.defineProperty(XI0,"__esModule",{value:!0});XI0.default=void 0;var yc4=VI0(wI1()),Pc4=VI0(AI0());function VI0(I){return I&&I.__esModule?I:{default:I}}var $c4=yc4.default("v5",80,Pc4.default),uc4=$c4;XI0.default=uc4});var FI0=Y((DI0)=>{Object.defineProperty(DI0,"__esModule",{value:!0});DI0.default=void 0;var Tc4="00000000-0000-0000-0000-000000000000";DI0.default=Tc4});var KI0=Y((gI0)=>{Object.defineProperty(gI0,"__esModule",{value:!0});gI0.default=void 0;var Oc4=mc4(DL());function mc4(I){return I&&I.__esModule?I:{default:I}}function lc4(I){if(!Oc4.default(I))throw TypeError("Invalid UUID");return parseInt(I.substr(14,1),16)}var bc4=lc4;gI0.default=bc4});var BI1=Y((bC)=>{Object.defineProperty(bC,"__esModule",{value:!0});Object.defineProperty(bC,"v1",{enumerable:!0,get:function(){return hc4.default}});Object.defineProperty(bC,"v3",{enumerable:!0,get:function(){return jc4.default}});Object.defineProperty(bC,"v4",{enumerable:!0,get:function(){return kc4.default}});Object.defineProperty(bC,"v5",{enumerable:!0,get:function(){return xc4.default}});Object.defineProperty(bC,"NIL",{enumerable:!0,get:function(){return cc4.default}});Object.defineProperty(bC,"version",{enumerable:!0,get:function(){return pc4.default}});Object.defineProperty(bC,"validate",{enumerable:!0,get:function(){return ic4.default}});Object.defineProperty(bC,"stringify",{enumerable:!0,get:function(){return nc4.default}});Object.defineProperty(bC,"parse",{enumerable:!0,get:function(){return rc4.default}});var hc4=JV(j70()),jc4=JV(dI0()),kc4=JV(WI0()),xc4=JV(_I0()),cc4=JV(FI0()),pc4=JV(KI0()),ic4=JV(DL()),nc4=JV(HL()),rc4=JV(WI1());function JV(I){return I&&I.__esModule?I:{default:I}}});var QI0=Y((NI0)=>{Object.defineProperty(NI0,"__esModule",{value:!0});NI0.getDefaultRetryQuota=void 0;var AI1=Wd(),ac4=(I,d)=>{var G,Z,C;let W=I,w=(G=d===null||d===void 0?void 0:d.noRetryIncrement)!==null&&G!==void 0?G:AI1.NO_RETRY_INCREMENT,B=(Z=d===null||d===void 0?void 0:d.retryCost)!==null&&Z!==void 0?Z:AI1.RETRY_COST,A=(C=d===null||d===void 0?void 0:d.timeoutRetryCost)!==null&&C!==void 0?C:AI1.TIMEOUT_RETRY_COST,V=I,X=(J)=>J.name==="TimeoutError"?A:B,_=(J)=>X(J)<=V;return Object.freeze({hasRetryTokens:_,retrieveRetryTokens:(J)=>{if(!_(J))throw new Error("No retry token available");let K=X(J);return V-=K,K},releaseRetryTokens:(J)=>{V+=J!==null&&J!==void 0?J:w,V=Math.min(V,W)}})};NI0.getDefaultRetryQuota=ac4});var VI1=Y((fI0)=>{Object.defineProperty(fI0,"__esModule",{value:!0});fI0.defaultDelayDecider=void 0;var sc4=Wd(),oc4=(I,d)=>Math.floor(Math.min(sc4.MAXIMUM_RETRY_DELAY,Math.random()*2**d*I));fI0.defaultDelayDecider=oc4});var XI1=Y((RI0)=>{Object.defineProperty(RI0,"__esModule",{value:!0});RI0.defaultRetryDecider=void 0;var Jc=_L(),ec4=(I)=>{if(!I)return!1;return Jc.isRetryableByTrait(I)||Jc.isClockSkewError(I)||Jc.isThrottlingError(I)||Jc.isTransientError(I)};RI0.defaultRetryDecider=ec4});var YI1=Y((vI0)=>{Object.defineProperty(vI0,"__esModule",{value:!0});vI0.asSdkError=void 0;var tc4=(I)=>{if(I instanceof Error)return I;if(I instanceof Object)return Object.assign(new Error,I);if(typeof I==="string")return new Error(I);return new Error(`AWS SDK error wrapper for ${I}`)};vI0.asSdkError=tc4});var DI1=Y((SI0)=>{Object.defineProperty(SI0,"__esModule",{value:!0});SI0.StandardRetryStrategy=void 0;var _I1=J8(),Ip4=_L(),cg=Wd(),dp4=BI1(),Gp4=QI0(),Zp4=VI1(),Cp4=XI1(),Wp4=YI1();class MI0{constructor(I,d){var G,Z,C;this.maxAttemptsProvider=I,this.mode=cg.RETRY_MODES.STANDARD,this.retryDecider=(G=d===null||d===void 0?void 0:d.retryDecider)!==null&&G!==void 0?G:Cp4.defaultRetryDecider,this.delayDecider=(Z=d===null||d===void 0?void 0:d.delayDecider)!==null&&Z!==void 0?Z:Zp4.defaultDelayDecider,this.retryQuota=(C=d===null||d===void 0?void 0:d.retryQuota)!==null&&C!==void 0?C:Gp4.getDefaultRetryQuota(cg.INITIAL_RETRY_TOKENS)}shouldRetry(I,d,G){return dsetTimeout(g,F));continue}if(!V.$metadata)V.$metadata={};throw V.$metadata.attempts=C,V.$metadata.totalRetryDelay=W,V}}}SI0.StandardRetryStrategy=MI0;var wp4=(I)=>{if(!_I1.HttpResponse.isInstance(I))return;let d=Object.keys(I.headers).find((W)=>W.toLowerCase()==="retry-after");if(!d)return;let G=I.headers[d],Z=Number(G);if(!Number.isNaN(Z))return Z*1000;return new Date(G).getTime()-Date.now()}});var TI0=Y(($I0)=>{Object.defineProperty($I0,"__esModule",{value:!0});$I0.AdaptiveRetryStrategy=void 0;var yI0=Wd(),Bp4=DI1();class PI0 extends Bp4.StandardRetryStrategy{constructor(I,d){let{rateLimiter:G,...Z}=d!==null&&d!==void 0?d:{};super(I,Z);this.rateLimiter=G!==null&&G!==void 0?G:new yI0.DefaultRateLimiter,this.mode=yI0.RETRY_MODES.ADAPTIVE}async retry(I,d){return super.retry(I,d,{beforeRequest:async()=>{return this.rateLimiter.getSendToken()},afterRequest:(G)=>{this.rateLimiter.updateClientSendingRate(G)}})}}$I0.AdaptiveRetryStrategy=PI0});var jI0=Y((mI0)=>{Object.defineProperty(mI0,"__esModule",{value:!0});mI0.NODE_RETRY_MODE_CONFIG_OPTIONS=mI0.CONFIG_RETRY_MODE=mI0.ENV_RETRY_MODE=mI0.resolveRetryConfig=mI0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS=mI0.CONFIG_MAX_ATTEMPTS=mI0.ENV_MAX_ATTEMPTS=void 0;var OI0=M_(),Lf=Wd();mI0.ENV_MAX_ATTEMPTS="AWS_MAX_ATTEMPTS";mI0.CONFIG_MAX_ATTEMPTS="max_attempts";mI0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS={environmentVariableSelector:(I)=>{let d=I[mI0.ENV_MAX_ATTEMPTS];if(!d)return;let G=parseInt(d);if(Number.isNaN(G))throw new Error(`Environment variable ${mI0.ENV_MAX_ATTEMPTS} mast be a number, got "${d}"`);return G},configFileSelector:(I)=>{let d=I[mI0.CONFIG_MAX_ATTEMPTS];if(!d)return;let G=parseInt(d);if(Number.isNaN(G))throw new Error(`Shared config file entry ${mI0.CONFIG_MAX_ATTEMPTS} mast be a number, got "${d}"`);return G},default:Lf.DEFAULT_MAX_ATTEMPTS};var Ap4=(I)=>{var d;let{retryStrategy:G}=I,Z=OI0.normalizeProvider((d=I.maxAttempts)!==null&&d!==void 0?d:Lf.DEFAULT_MAX_ATTEMPTS);return{...I,maxAttempts:Z,retryStrategy:async()=>{if(G)return G;if(await OI0.normalizeProvider(I.retryMode)()===Lf.RETRY_MODES.ADAPTIVE)return new Lf.AdaptiveRetryStrategy(Z);return new Lf.StandardRetryStrategy(Z)}}};mI0.resolveRetryConfig=Ap4;mI0.ENV_RETRY_MODE="AWS_RETRY_MODE";mI0.CONFIG_RETRY_MODE="retry_mode";mI0.NODE_RETRY_MODE_CONFIG_OPTIONS={environmentVariableSelector:(I)=>I[mI0.ENV_RETRY_MODE],configFileSelector:(I)=>I[mI0.CONFIG_RETRY_MODE],default:Lf.DEFAULT_RETRY_MODE}});var nI0=Y((xI0)=>{Object.defineProperty(xI0,"__esModule",{value:!0});xI0.getOmitRetryHeadersPlugin=xI0.omitRetryHeadersMiddlewareOptions=xI0.omitRetryHeadersMiddleware=void 0;var Yp4=J8(),kI0=Wd(),_p4=()=>(I)=>async(d)=>{let{request:G}=d;if(Yp4.HttpRequest.isInstance(G))delete G.headers[kI0.INVOCATION_ID_HEADER],delete G.headers[kI0.REQUEST_HEADER];return I(d)};xI0.omitRetryHeadersMiddleware=_p4;xI0.omitRetryHeadersMiddlewareOptions={name:"omitRetryHeadersMiddleware",tags:["RETRY","HEADERS","OMIT_RETRY_HEADERS"],relation:"before",toMiddleware:"awsAuthMiddleware",override:!0};var Dp4=(I)=>({applyToStack:(d)=>{d.addRelativeTo(xI0.omitRetryHeadersMiddleware(),xI0.omitRetryHeadersMiddlewareOptions)}});xI0.getOmitRetryHeadersPlugin=Dp4});var eI0=Y((aI0)=>{Object.defineProperty(aI0,"__esModule",{value:!0});aI0.getRetryAfterHint=aI0.getRetryPlugin=aI0.retryMiddlewareOptions=aI0.retryMiddleware=void 0;var JI1=J8(),gI1=_L(),rI0=Wd(),Hp4=BI1(),Fp4=YI1(),gp4=(I)=>(d,G)=>async(Z)=>{let C=await I.retryStrategy(),W=await I.maxAttempts();if(Jp4(C)){C=C;let w=await C.acquireInitialRetryToken(G.partition_id),B=new Error,A=0,V=0,{request:X}=Z;if(JI1.HttpRequest.isInstance(X))X.headers[rI0.INVOCATION_ID_HEADER]=Hp4.v4();while(!0)try{if(JI1.HttpRequest.isInstance(X))X.headers[rI0.REQUEST_HEADER]=`attempt=${A+1}; max=${W}`;let{response:_,output:F}=await d(Z);return C.recordSuccess(w),F.$metadata.attempts=A+1,F.$metadata.totalRetryDelay=V,{response:_,output:F}}catch(_){let F=Kp4(_);B=Fp4.asSdkError(_);try{w=await C.refreshRetryTokenForRetry(w,F)}catch(J){if(!B.$metadata)B.$metadata={};throw B.$metadata.attempts=A+1,B.$metadata.totalRetryDelay=V,B}A=w.getRetryCount();let g=w.getRetryDelay();V+=g,await new Promise((J)=>setTimeout(J,g))}}else{if(C=C,C===null||C===void 0?void 0:C.mode)G.userAgent=[...G.userAgent||[],["cfg/retry-mode",C.mode]];return C.retry(d,Z)}};aI0.retryMiddleware=gp4;var Jp4=(I)=>typeof I.acquireInitialRetryToken!=="undefined"&&typeof I.refreshRetryTokenForRetry!=="undefined"&&typeof I.recordSuccess!=="undefined",Kp4=(I)=>{let d={errorType:Np4(I)},G=aI0.getRetryAfterHint(I.$response);if(G)d.retryAfterHint=G;return d},Np4=(I)=>{if(gI1.isThrottlingError(I))return"THROTTLING";if(gI1.isTransientError(I))return"TRANSIENT";if(gI1.isServerError(I))return"SERVER_ERROR";return"CLIENT_ERROR"};aI0.retryMiddlewareOptions={name:"retryMiddleware",tags:["RETRY"],step:"finalizeRequest",priority:"high",override:!0};var zp4=(I)=>({applyToStack:(d)=>{d.add(aI0.retryMiddleware(I),aI0.retryMiddlewareOptions)}});aI0.getRetryPlugin=zp4;var Qp4=(I)=>{if(!JI1.HttpResponse.isInstance(I))return;let d=Object.keys(I.headers).find((W)=>W.toLowerCase()==="retry-after");if(!d)return;let G=I.headers[d],Z=Number(G);if(!Number.isNaN(Z))return new Date(Z*1000);return new Date(G)};aI0.getRetryAfterHint=Qp4});var dG=Y((KV)=>{Object.defineProperty(KV,"__esModule",{value:!0});var pg=x1();pg.__exportStar(TI0(),KV);pg.__exportStar(DI1(),KV);pg.__exportStar(jI0(),KV);pg.__exportStar(VI1(),KV);pg.__exportStar(nI0(),KV);pg.__exportStar(XI1(),KV);pg.__exportStar(eI0(),KV)});var FL=Y((tI0)=>{Object.defineProperty(tI0,"__esModule",{value:!0});tI0.ProviderError=void 0;class NI1 extends Error{constructor(I,d=!0){super(I);this.tryNextLink=d,this.name="ProviderError",Object.setPrototypeOf(this,NI1.prototype)}static from(I,d=!0){return Object.assign(new this(I.message,d),I)}}tI0.ProviderError=NI1});var Zd0=Y((dd0)=>{Object.defineProperty(dd0,"__esModule",{value:!0});dd0.CredentialsProviderError=void 0;var qp4=FL();class zI1 extends qp4.ProviderError{constructor(I,d=!0){super(I,d);this.tryNextLink=d,this.name="CredentialsProviderError",Object.setPrototypeOf(this,zI1.prototype)}}dd0.CredentialsProviderError=zI1});var wd0=Y((Cd0)=>{Object.defineProperty(Cd0,"__esModule",{value:!0});Cd0.TokenProviderError=void 0;var Rp4=FL();class QI1 extends Rp4.ProviderError{constructor(I,d=!0){super(I,d);this.tryNextLink=d,this.name="TokenProviderError",Object.setPrototypeOf(this,QI1.prototype)}}Cd0.TokenProviderError=QI1});var Vd0=Y((Bd0)=>{Object.defineProperty(Bd0,"__esModule",{value:!0});Bd0.chain=void 0;var Up4=FL();function vp4(...I){return()=>{let d=Promise.reject(new Up4.ProviderError("No providers in chain"));for(let G of I)d=d.catch((Z)=>{if(Z===null||Z===void 0?void 0:Z.tryNextLink)return G();throw Z});return d}}Bd0.chain=vp4});var _d0=Y((Xd0)=>{Object.defineProperty(Xd0,"__esModule",{value:!0});Xd0.fromStatic=void 0;var Ep4=(I)=>()=>Promise.resolve(I);Xd0.fromStatic=Ep4});var Fd0=Y((Dd0)=>{Object.defineProperty(Dd0,"__esModule",{value:!0});Dd0.memoize=void 0;var Mp4=(I,d,G)=>{let Z,C,W,w=!1,B=async()=>{if(!C)C=I();try{Z=await C,W=!0,w=!1}finally{C=void 0}return Z};if(d===void 0)return async(A)=>{if(!W||(A===null||A===void 0?void 0:A.forceRefresh))Z=await B();return Z};return async(A)=>{if(!W||(A===null||A===void 0?void 0:A.forceRefresh))Z=await B();if(w)return Z;if(G&&!G(Z))return w=!0,Z;if(d(Z))return await B(),Z;return Z}};Dd0.memoize=Mp4});var W4=Y((L_)=>{Object.defineProperty(L_,"__esModule",{value:!0});var yf=x1();yf.__exportStar(Zd0(),L_);yf.__exportStar(FL(),L_);yf.__exportStar(wd0(),L_);yf.__exportStar(Vd0(),L_);yf.__exportStar(_d0(),L_);yf.__exportStar(Fd0(),L_)});var Kc=Y((Jd0)=>{Object.defineProperty(Jd0,"__esModule",{value:!0});Jd0.toHex=Jd0.fromHex=void 0;var gd0={},fI1={};for(let I=0;I<256;I++){let d=I.toString(16).toLowerCase();if(d.length===1)d=`0${d}`;gd0[I]=d,fI1[d]=I}function Sp4(I){if(I.length%2!==0)throw new Error("Hex encoded strings must have an even number length");let d=new Uint8Array(I.length/2);for(let G=0;G{Object.defineProperty(Nd0,"__esModule",{value:!0});Nd0.isArrayBuffer=void 0;var Pp4=(I)=>typeof ArrayBuffer==="function"&&I instanceof ArrayBuffer||Object.prototype.toString.call(I)==="[object ArrayBuffer]";Nd0.isArrayBuffer=Pp4});var Pf=Y((Qd0)=>{Object.defineProperty(Qd0,"__esModule",{value:!0});Qd0.fromString=Qd0.fromArrayBuffer=void 0;var $p4=qI1(),RI1=B1("buffer"),up4=(I,d=0,G=I.byteLength-d)=>{if(!$p4.isArrayBuffer(I))throw new TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof I} (${I})`);return RI1.Buffer.from(I,d,G)};Qd0.fromArrayBuffer=up4;var Tp4=(I,d)=>{if(typeof I!=="string")throw new TypeError(`The "input" argument must be of type string. Received type ${typeof I} (${I})`);return d?RI1.Buffer.from(I,d):RI1.Buffer.from(I)};Qd0.fromString=Tp4});var UI1=Y((qd0)=>{Object.defineProperty(qd0,"__esModule",{value:!0});qd0.fromUtf8=void 0;var mp4=Pf(),lp4=(I)=>{let d=mp4.fromString(I,"utf8");return new Uint8Array(d.buffer,d.byteOffset,d.byteLength/Uint8Array.BYTES_PER_ELEMENT)};qd0.fromUtf8=lp4});var Ed0=Y((Ud0)=>{Object.defineProperty(Ud0,"__esModule",{value:!0});Ud0.toUint8Array=void 0;var bp4=UI1(),hp4=(I)=>{if(typeof I==="string")return bp4.fromUtf8(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(I)};Ud0.toUint8Array=hp4});var Ld0=Y((Md0)=>{Object.defineProperty(Md0,"__esModule",{value:!0});Md0.toUtf8=void 0;var jp4=Pf(),kp4=(I)=>jp4.fromArrayBuffer(I.buffer,I.byteOffset,I.byteLength).toString("utf8");Md0.toUtf8=kp4});var hC=Y((gL)=>{Object.defineProperty(gL,"__esModule",{value:!0});var vI1=x1();vI1.__exportStar(UI1(),gL);vI1.__exportStar(Ed0(),gL);vI1.__exportStar(Ld0(),gL)});var ig=Y((yd0)=>{Object.defineProperty(yd0,"__esModule",{value:!0});yd0.MAX_PRESIGNED_TTL=yd0.KEY_TYPE_IDENTIFIER=yd0.MAX_CACHE_SIZE=yd0.UNSIGNED_PAYLOAD=yd0.EVENT_ALGORITHM_IDENTIFIER=yd0.ALGORITHM_IDENTIFIER_V4A=yd0.ALGORITHM_IDENTIFIER=yd0.UNSIGNABLE_PATTERNS=yd0.SEC_HEADER_PATTERN=yd0.PROXY_HEADER_PATTERN=yd0.ALWAYS_UNSIGNABLE_HEADERS=yd0.HOST_HEADER=yd0.TOKEN_HEADER=yd0.SHA256_HEADER=yd0.SIGNATURE_HEADER=yd0.GENERATED_HEADERS=yd0.DATE_HEADER=yd0.AMZ_DATE_HEADER=yd0.AUTH_HEADER=yd0.REGION_SET_PARAM=yd0.TOKEN_QUERY_PARAM=yd0.SIGNATURE_QUERY_PARAM=yd0.EXPIRES_QUERY_PARAM=yd0.SIGNED_HEADERS_QUERY_PARAM=yd0.AMZ_DATE_QUERY_PARAM=yd0.CREDENTIAL_QUERY_PARAM=yd0.ALGORITHM_QUERY_PARAM=void 0;yd0.ALGORITHM_QUERY_PARAM="X-Amz-Algorithm";yd0.CREDENTIAL_QUERY_PARAM="X-Amz-Credential";yd0.AMZ_DATE_QUERY_PARAM="X-Amz-Date";yd0.SIGNED_HEADERS_QUERY_PARAM="X-Amz-SignedHeaders";yd0.EXPIRES_QUERY_PARAM="X-Amz-Expires";yd0.SIGNATURE_QUERY_PARAM="X-Amz-Signature";yd0.TOKEN_QUERY_PARAM="X-Amz-Security-Token";yd0.REGION_SET_PARAM="X-Amz-Region-Set";yd0.AUTH_HEADER="authorization";yd0.AMZ_DATE_HEADER=yd0.AMZ_DATE_QUERY_PARAM.toLowerCase();yd0.DATE_HEADER="date";yd0.GENERATED_HEADERS=[yd0.AUTH_HEADER,yd0.AMZ_DATE_HEADER,yd0.DATE_HEADER];yd0.SIGNATURE_HEADER=yd0.SIGNATURE_QUERY_PARAM.toLowerCase();yd0.SHA256_HEADER="x-amz-content-sha256";yd0.TOKEN_HEADER=yd0.TOKEN_QUERY_PARAM.toLowerCase();yd0.HOST_HEADER="host";yd0.ALWAYS_UNSIGNABLE_HEADERS={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0};yd0.PROXY_HEADER_PATTERN=/^proxy-/;yd0.SEC_HEADER_PATTERN=/^sec-/;yd0.UNSIGNABLE_PATTERNS=[/^proxy-/i,/^sec-/i];yd0.ALGORITHM_IDENTIFIER="AWS4-HMAC-SHA256";yd0.ALGORITHM_IDENTIFIER_V4A="AWS4-ECDSA-P256-SHA256";yd0.EVENT_ALGORITHM_IDENTIFIER="AWS4-HMAC-SHA256-PAYLOAD";yd0.UNSIGNED_PAYLOAD="UNSIGNED-PAYLOAD";yd0.MAX_CACHE_SIZE=50;yd0.KEY_TYPE_IDENTIFIER="aws4_request";yd0.MAX_PRESIGNED_TTL=604800});var MI1=Y((hd0)=>{Object.defineProperty(hd0,"__esModule",{value:!0});hd0.clearCredentialCache=hd0.getSigningKey=hd0.createScope=void 0;var Vi4=Kc(),Xi4=hC(),EI1=ig(),$f={},Nc=[],Yi4=(I,d,G)=>`${I}/${d}/${G}/${EI1.KEY_TYPE_IDENTIFIER}`;hd0.createScope=Yi4;var _i4=async(I,d,G,Z,C)=>{let W=await bd0(I,d.secretAccessKey,d.accessKeyId),w=`${G}:${Z}:${C}:${Vi4.toHex(W)}:${d.sessionToken}`;if(w in $f)return $f[w];Nc.push(w);while(Nc.length>EI1.MAX_CACHE_SIZE)delete $f[Nc.shift()];let B=`AWS4${d.secretAccessKey}`;for(let A of[G,Z,C,EI1.KEY_TYPE_IDENTIFIER])B=await bd0(I,B,A);return $f[w]=B};hd0.getSigningKey=_i4;var Di4=()=>{Nc.length=0,Object.keys($f).forEach((I)=>{delete $f[I]})};hd0.clearCredentialCache=Di4;var bd0=(I,d,G)=>{let Z=new I(d);return Z.update(Xi4.toUint8Array(G)),Z.digest()}});var LI1=Y((kd0)=>{Object.defineProperty(kd0,"__esModule",{value:!0});kd0.getCanonicalHeaders=void 0;var SI1=ig(),gi4=({headers:I},d,G)=>{let Z={};for(let C of Object.keys(I).sort()){if(I[C]==null)continue;let W=C.toLowerCase();if(W in SI1.ALWAYS_UNSIGNABLE_HEADERS||(d===null||d===void 0?void 0:d.has(W))||SI1.PROXY_HEADER_PATTERN.test(W)||SI1.SEC_HEADER_PATTERN.test(W)){if(!G||G&&!G.has(W))continue}Z[W]=I[C].trim().replace(/\s+/g," ")}return Z};kd0.getCanonicalHeaders=gi4});var yI1=Y((cd0)=>{Object.defineProperty(cd0,"__esModule",{value:!0});cd0.escapeUri=void 0;var Ji4=(I)=>encodeURIComponent(I).replace(/[!'()*]/g,Ki4);cd0.escapeUri=Ji4;var Ki4=(I)=>`%${I.charCodeAt(0).toString(16).toUpperCase()}`});var rd0=Y((id0)=>{Object.defineProperty(id0,"__esModule",{value:!0});id0.escapeUriPath=void 0;var Ni4=yI1(),zi4=(I)=>I.split("/").map(Ni4.escapeUri).join("/");id0.escapeUriPath=zi4});var PI1=Y((zc)=>{Object.defineProperty(zc,"__esModule",{value:!0});var ad0=x1();ad0.__exportStar(yI1(),zc);ad0.__exportStar(rd0(),zc)});var $I1=Y((sd0)=>{Object.defineProperty(sd0,"__esModule",{value:!0});sd0.getCanonicalQuery=void 0;var Qc=PI1(),Qi4=ig(),fi4=({query:I={}})=>{let d=[],G={};for(let Z of Object.keys(I).sort()){if(Z.toLowerCase()===Qi4.SIGNATURE_HEADER)continue;d.push(Z);let C=I[Z];if(typeof C==="string")G[Z]=`${Qc.escapeUri(Z)}=${Qc.escapeUri(C)}`;else if(Array.isArray(C))G[Z]=C.slice(0).sort().reduce((W,w)=>W.concat([`${Qc.escapeUri(Z)}=${Qc.escapeUri(w)}`]),[]).join("&")}return d.map((Z)=>G[Z]).filter((Z)=>Z).join("&")};sd0.getCanonicalQuery=fi4});var uI1=Y((td0)=>{Object.defineProperty(td0,"__esModule",{value:!0});td0.getPayloadHash=void 0;var qi4=qI1(),Ri4=Kc(),Ui4=hC(),ed0=ig(),vi4=async({headers:I,body:d},G)=>{for(let Z of Object.keys(I))if(Z.toLowerCase()===ed0.SHA256_HEADER)return I[Z];if(d==null)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";else if(typeof d==="string"||ArrayBuffer.isView(d)||qi4.isArrayBuffer(d)){let Z=new G;return Z.update(Ui4.toUint8Array(d)),Ri4.toHex(await Z.digest())}return ed0.UNSIGNED_PAYLOAD};td0.getPayloadHash=vi4});var ZG0=Y((dG0)=>{Object.defineProperty(dG0,"__esModule",{value:!0});dG0.deleteHeader=dG0.getHeaderValue=dG0.hasHeader=void 0;var Ei4=(I,d)=>{I=I.toLowerCase();for(let G of Object.keys(d))if(I===G.toLowerCase())return!0;return!1};dG0.hasHeader=Ei4;var Mi4=(I,d)=>{I=I.toLowerCase();for(let G of Object.keys(d))if(I===G.toLowerCase())return d[G];return};dG0.getHeaderValue=Mi4;var Si4=(I,d)=>{I=I.toLowerCase();for(let G of Object.keys(d))if(I===G.toLowerCase())delete d[G]};dG0.deleteHeader=Si4});var OI1=Y((CG0)=>{Object.defineProperty(CG0,"__esModule",{value:!0});CG0.cloneQuery=CG0.cloneRequest=void 0;var Pi4=({headers:I,query:d,...G})=>({...G,headers:{...I},query:d?CG0.cloneQuery(d):void 0});CG0.cloneRequest=Pi4;var $i4=(I)=>Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{});CG0.cloneQuery=$i4});var mI1=Y((WG0)=>{Object.defineProperty(WG0,"__esModule",{value:!0});WG0.moveHeadersToQuery=void 0;var Ti4=OI1(),Oi4=(I,d={})=>{var G;let{headers:Z,query:C={}}=typeof I.clone==="function"?I.clone():Ti4.cloneRequest(I);for(let W of Object.keys(Z)){let w=W.toLowerCase();if(w.slice(0,6)==="x-amz-"&&!((G=d.unhoistableHeaders)===null||G===void 0?void 0:G.has(w)))C[W]=Z[W],delete Z[W]}return{...I,headers:Z,query:C}};WG0.moveHeadersToQuery=Oi4});var lI1=Y((BG0)=>{Object.defineProperty(BG0,"__esModule",{value:!0});BG0.prepareRequest=void 0;var mi4=OI1(),li4=ig(),bi4=(I)=>{I=typeof I.clone==="function"?I.clone():mi4.cloneRequest(I);for(let d of Object.keys(I.headers))if(li4.GENERATED_HEADERS.indexOf(d.toLowerCase())>-1)delete I.headers[d];return I};BG0.prepareRequest=bi4});var XG0=Y((VG0)=>{Object.defineProperty(VG0,"__esModule",{value:!0});VG0.toDate=VG0.iso8601=void 0;var hi4=(I)=>VG0.toDate(I).toISOString().replace(/\.\d{3}Z$/,"Z");VG0.iso8601=hi4;var ji4=(I)=>{if(typeof I==="number")return new Date(I*1000);if(typeof I==="string"){if(Number(I))return new Date(Number(I)*1000);return new Date(I)}return I};VG0.toDate=ji4});var KG0=Y((gG0)=>{Object.defineProperty(gG0,"__esModule",{value:!0});gG0.SignatureV4=void 0;var fc=Kc(),YG0=M_(),hI1=hC(),r8=ig(),qc=MI1(),_G0=LI1(),xi4=$I1(),jI1=uI1(),ci4=ZG0(),pi4=mI1(),DG0=lI1(),ii4=XG0();class FG0{constructor({applyChecksum:I,credentials:d,region:G,service:Z,sha256:C,uriEscapePath:W=!0}){this.service=Z,this.sha256=C,this.uriEscapePath=W,this.applyChecksum=typeof I==="boolean"?I:!0,this.regionProvider=YG0.normalizeProvider(G),this.credentialProvider=YG0.normalizeProvider(d)}async presign(I,d={}){let{signingDate:G=new Date,expiresIn:Z=3600,unsignableHeaders:C,unhoistableHeaders:W,signableHeaders:w,signingRegion:B,signingService:A}=d,V=await this.credentialProvider();this.validateResolvedCredentials(V);let X=B!==null&&B!==void 0?B:await this.regionProvider(),{longDate:_,shortDate:F}=Rc(G);if(Z>r8.MAX_PRESIGNED_TTL)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");let g=qc.createScope(F,X,A!==null&&A!==void 0?A:this.service),J=pi4.moveHeadersToQuery(DG0.prepareRequest(I),{unhoistableHeaders:W});if(V.sessionToken)J.query[r8.TOKEN_QUERY_PARAM]=V.sessionToken;J.query[r8.ALGORITHM_QUERY_PARAM]=r8.ALGORITHM_IDENTIFIER,J.query[r8.CREDENTIAL_QUERY_PARAM]=`${V.accessKeyId}/${g}`,J.query[r8.AMZ_DATE_QUERY_PARAM]=_,J.query[r8.EXPIRES_QUERY_PARAM]=Z.toString(10);let K=_G0.getCanonicalHeaders(J,C,w);return J.query[r8.SIGNED_HEADERS_QUERY_PARAM]=HG0(K),J.query[r8.SIGNATURE_QUERY_PARAM]=await this.getSignature(_,g,this.getSigningKey(V,X,F,A),this.createCanonicalRequest(J,K,await jI1.getPayloadHash(I,this.sha256))),J}async sign(I,d){if(typeof I==="string")return this.signString(I,d);else if(I.headers&&I.payload)return this.signEvent(I,d);else return this.signRequest(I,d)}async signEvent({headers:I,payload:d},{signingDate:G=new Date,priorSignature:Z,signingRegion:C,signingService:W}){let w=C!==null&&C!==void 0?C:await this.regionProvider(),{shortDate:B,longDate:A}=Rc(G),V=qc.createScope(B,w,W!==null&&W!==void 0?W:this.service),X=await jI1.getPayloadHash({headers:{},body:d},this.sha256),_=new this.sha256;_.update(I);let F=fc.toHex(await _.digest()),g=[r8.EVENT_ALGORITHM_IDENTIFIER,A,V,Z,F,X].join(` +`);return this.signString(g,{signingDate:G,signingRegion:w,signingService:W})}async signString(I,{signingDate:d=new Date,signingRegion:G,signingService:Z}={}){let C=await this.credentialProvider();this.validateResolvedCredentials(C);let W=G!==null&&G!==void 0?G:await this.regionProvider(),{shortDate:w}=Rc(d),B=new this.sha256(await this.getSigningKey(C,W,w,Z));return B.update(hI1.toUint8Array(I)),fc.toHex(await B.digest())}async signRequest(I,{signingDate:d=new Date,signableHeaders:G,unsignableHeaders:Z,signingRegion:C,signingService:W}={}){let w=await this.credentialProvider();this.validateResolvedCredentials(w);let B=C!==null&&C!==void 0?C:await this.regionProvider(),A=DG0.prepareRequest(I),{longDate:V,shortDate:X}=Rc(d),_=qc.createScope(X,B,W!==null&&W!==void 0?W:this.service);if(A.headers[r8.AMZ_DATE_HEADER]=V,w.sessionToken)A.headers[r8.TOKEN_HEADER]=w.sessionToken;let F=await jI1.getPayloadHash(A,this.sha256);if(!ci4.hasHeader(r8.SHA256_HEADER,A.headers)&&this.applyChecksum)A.headers[r8.SHA256_HEADER]=F;let g=_G0.getCanonicalHeaders(A,Z,G),J=await this.getSignature(V,_,this.getSigningKey(w,B,X,W),this.createCanonicalRequest(A,g,F));return A.headers[r8.AUTH_HEADER]=`${r8.ALGORITHM_IDENTIFIER} Credential=${w.accessKeyId}/${_}, SignedHeaders=${HG0(g)}, Signature=${J}`,A}createCanonicalRequest(I,d,G){let Z=Object.keys(d).sort();return`${I.method} +${this.getCanonicalPath(I)} +${xi4.getCanonicalQuery(I)} +${Z.map((C)=>`${C}:${d[C]}`).join(` +`)} + +${Z.join(";")} +${G}`}async createStringToSign(I,d,G){let Z=new this.sha256;Z.update(hI1.toUint8Array(G));let C=await Z.digest();return`${r8.ALGORITHM_IDENTIFIER} +${I} +${d} +${fc.toHex(C)}`}getCanonicalPath({path:I}){if(this.uriEscapePath){let d=[];for(let C of I.split("/")){if((C===null||C===void 0?void 0:C.length)===0)continue;if(C===".")continue;if(C==="..")d.pop();else d.push(C)}let G=`${(I===null||I===void 0?void 0:I.startsWith("/"))?"/":""}${d.join("/")}${d.length>0&&(I===null||I===void 0?void 0:I.endsWith("/"))?"/":""}`;return encodeURIComponent(G).replace(/%2F/g,"/")}return I}async getSignature(I,d,G,Z){let C=await this.createStringToSign(I,d,Z),W=new this.sha256(await G);return W.update(hI1.toUint8Array(C)),fc.toHex(await W.digest())}getSigningKey(I,d,G,Z){return qc.getSigningKey(this.sha256,I,G,d,Z||this.service)}validateResolvedCredentials(I){if(typeof I!=="object"||typeof I.accessKeyId!=="string"||typeof I.secretAccessKey!=="string")throw new Error("Resolved credential object is not valid")}}gG0.SignatureV4=FG0;var Rc=(I)=>{let d=ii4.iso8601(I).replace(/[\-:]/g,"");return{longDate:d,shortDate:d.slice(0,8)}},HG0=(I)=>Object.keys(I).sort().join(";")});var kI1=Y((NV)=>{Object.defineProperty(NV,"__esModule",{value:!0});NV.prepareRequest=NV.moveHeadersToQuery=NV.getPayloadHash=NV.getCanonicalQuery=NV.getCanonicalHeaders=void 0;var NG0=x1();NG0.__exportStar(KG0(),NV);var ni4=LI1();Object.defineProperty(NV,"getCanonicalHeaders",{enumerable:!0,get:function(){return ni4.getCanonicalHeaders}});var ri4=$I1();Object.defineProperty(NV,"getCanonicalQuery",{enumerable:!0,get:function(){return ri4.getCanonicalQuery}});var ai4=uI1();Object.defineProperty(NV,"getPayloadHash",{enumerable:!0,get:function(){return ai4.getPayloadHash}});var si4=mI1();Object.defineProperty(NV,"moveHeadersToQuery",{enumerable:!0,get:function(){return si4.moveHeadersToQuery}});var oi4=lI1();Object.defineProperty(NV,"prepareRequest",{enumerable:!0,get:function(){return oi4.prepareRequest}});NG0.__exportStar(MI1(),NV)});var qG0=Y((QG0)=>{Object.defineProperty(QG0,"__esModule",{value:!0});QG0.resolveSigV4AuthConfig=QG0.resolveAwsAuthConfig=void 0;var ti4=W4(),xI1=kI1(),uf=M_(),In4=300000,dn4=(I)=>{let d=I.credentials?zG0(I.credentials):I.credentialDefaultProvider(I),{signingEscapePath:G=!0,systemClockOffset:Z=I.systemClockOffset||0,sha256:C}=I,W;if(I.signer)W=uf.normalizeProvider(I.signer);else if(I.regionInfoProvider)W=()=>uf.normalizeProvider(I.region)().then(async(w)=>[await I.regionInfoProvider(w,{useFipsEndpoint:await I.useFipsEndpoint(),useDualstackEndpoint:await I.useDualstackEndpoint()})||{},w]).then(([w,B])=>{let{signingRegion:A,signingService:V}=w;I.signingRegion=I.signingRegion||A||B,I.signingName=I.signingName||V||I.serviceId;let X={...I,credentials:d,region:I.signingRegion,service:I.signingName,sha256:C,uriEscapePath:G};return new(I.signerConstructor||xI1.SignatureV4)(X)});else W=async(w)=>{w=Object.assign({},{name:"sigv4",signingName:I.signingName||I.defaultSigningName,signingRegion:await uf.normalizeProvider(I.region)(),properties:{}},w);let{signingRegion:B,signingName:A}=w;I.signingRegion=I.signingRegion||B,I.signingName=I.signingName||A||I.serviceId;let V={...I,credentials:d,region:I.signingRegion,service:I.signingName,sha256:C,uriEscapePath:G};return new(I.signerConstructor||xI1.SignatureV4)(V)};return{...I,systemClockOffset:Z,signingEscapePath:G,credentials:d,signer:W}};QG0.resolveAwsAuthConfig=dn4;var Gn4=(I)=>{let d=I.credentials?zG0(I.credentials):I.credentialDefaultProvider(I),{signingEscapePath:G=!0,systemClockOffset:Z=I.systemClockOffset||0,sha256:C}=I,W;if(I.signer)W=uf.normalizeProvider(I.signer);else W=uf.normalizeProvider(new xI1.SignatureV4({credentials:d,region:I.region,service:I.signingName,sha256:C,uriEscapePath:G}));return{...I,systemClockOffset:Z,signingEscapePath:G,credentials:d,signer:W}};QG0.resolveSigV4AuthConfig=Gn4;var zG0=(I)=>{if(typeof I==="function")return ti4.memoize(I,(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()d.expiration!==void 0);return uf.normalizeProvider(I)}});var cI1=Y((RG0)=>{Object.defineProperty(RG0,"__esModule",{value:!0});RG0.getSkewCorrectedDate=void 0;var Cn4=(I)=>new Date(Date.now()+I);RG0.getSkewCorrectedDate=Cn4});var MG0=Y((vG0)=>{Object.defineProperty(vG0,"__esModule",{value:!0});vG0.isClockSkewed=void 0;var Wn4=cI1(),wn4=(I,d)=>Math.abs(Wn4.getSkewCorrectedDate(d).getTime()-I)>=300000;vG0.isClockSkewed=wn4});var yG0=Y((SG0)=>{Object.defineProperty(SG0,"__esModule",{value:!0});SG0.getUpdatedSystemClockOffset=void 0;var Bn4=MG0(),An4=(I,d)=>{let G=Date.parse(I);if(Bn4.isClockSkewed(G,d))return G-Date.now();return d};SG0.getUpdatedSystemClockOffset=An4});var hG0=Y((TG0)=>{Object.defineProperty(TG0,"__esModule",{value:!0});TG0.getSigV4AuthPlugin=TG0.getAwsAuthPlugin=TG0.awsAuthMiddlewareOptions=TG0.awsAuthMiddleware=void 0;var uG0=J8(),Vn4=cI1(),PG0=yG0(),Xn4=(I)=>(d,G)=>async function(Z){var C,W,w,B;if(!uG0.HttpRequest.isInstance(Z.request))return d(Z);let A=(w=(W=(C=G.endpointV2)===null||C===void 0?void 0:C.properties)===null||W===void 0?void 0:W.authSchemes)===null||w===void 0?void 0:w[0],V=(A===null||A===void 0?void 0:A.name)==="sigv4a"?(B=A===null||A===void 0?void 0:A.signingRegionSet)===null||B===void 0?void 0:B.join(","):void 0,X=await I.signer(A),_=await d({...Z,request:await X.sign(Z.request,{signingDate:Vn4.getSkewCorrectedDate(I.systemClockOffset),signingRegion:V||G.signing_region,signingService:G.signing_service})}).catch((g)=>{var J;let K=(J=g.ServerTime)!==null&&J!==void 0?J:$G0(g.$response);if(K)I.systemClockOffset=PG0.getUpdatedSystemClockOffset(K,I.systemClockOffset);throw g}),F=$G0(_.response);if(F)I.systemClockOffset=PG0.getUpdatedSystemClockOffset(F,I.systemClockOffset);return _};TG0.awsAuthMiddleware=Xn4;var $G0=(I)=>{var d,G,Z;return uG0.HttpResponse.isInstance(I)?(G=(d=I.headers)===null||d===void 0?void 0:d.date)!==null&&G!==void 0?G:(Z=I.headers)===null||Z===void 0?void 0:Z.Date:void 0};TG0.awsAuthMiddlewareOptions={name:"awsAuthMiddleware",tags:["SIGNATURE","AWSAUTH"],relation:"after",toMiddleware:"retryMiddleware",override:!0};var Yn4=(I)=>({applyToStack:(d)=>{d.addRelativeTo(TG0.awsAuthMiddleware(I),TG0.awsAuthMiddlewareOptions)}});TG0.getAwsAuthPlugin=Yn4;TG0.getSigV4AuthPlugin=TG0.getAwsAuthPlugin});var A9=Y((Uc)=>{Object.defineProperty(Uc,"__esModule",{value:!0});var jG0=x1();jG0.__exportStar(qG0(),Uc);jG0.__exportStar(hG0(),Uc)});var cG0=Y((kG0)=>{Object.defineProperty(kG0,"__esModule",{value:!0});kG0.resolveUserAgentConfig=void 0;function _n4(I){return{...I,customUserAgent:typeof I.customUserAgent==="string"?[[I.customUserAgent]]:I.customUserAgent}}kG0.resolveUserAgentConfig=_n4});var pG0=Y((ta9,Dn4)=>{Dn4.exports={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"aws-global":{description:"AWS Standard global region"},"ca-central-1":{description:"Canada (Central)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"AWS China global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"AWS GovCloud (US) global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"c2s.ic.gov",name:"aws-iso",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"AWS ISO (US) global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"sc2s.sgov.gov",name:"aws-iso-b",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"AWS ISOB (US) global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"cloud.adc-e.uk",name:"aws-iso-e",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{}}],version:"1.1"}});var pI1=Y((aG0)=>{Object.defineProperty(aG0,"__esModule",{value:!0});aG0.getUserAgentPrefix=aG0.useDefaultPartitionInfo=aG0.setPartitionInfo=aG0.partition=void 0;var Hn4=x1(),iG0=Hn4.__importDefault(pG0()),nG0=iG0.default,rG0="",Fn4=(I)=>{let{partitions:d}=nG0;for(let Z of d){let{regions:C,outputs:W}=Z;for(let[w,B]of Object.entries(C))if(w===I)return{...W,...B}}for(let Z of d){let{regionRegex:C,outputs:W}=Z;if(new RegExp(C).test(I))return{...W}}let G=d.find((Z)=>Z.id==="aws");if(!G)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...G.outputs}};aG0.partition=Fn4;var gn4=(I,d="")=>{nG0=I,rG0=d};aG0.setPartitionInfo=gn4;var Jn4=()=>{aG0.setPartitionInfo(iG0.default,"")};aG0.useDefaultPartitionInfo=Jn4;var Kn4=()=>rG0;aG0.getUserAgentPrefix=Kn4});var IZ0=Y((eG0)=>{Object.defineProperty(eG0,"__esModule",{value:!0});eG0.debugId=void 0;eG0.debugId="endpoints"});var ZZ0=Y((dZ0)=>{Object.defineProperty(dZ0,"__esModule",{value:!0});dZ0.toDebugString=void 0;function iI1(I){if(typeof I!=="object"||I==null)return I;if("ref"in I)return`$${iI1(I.ref)}`;if("fn"in I)return`${I.fn}(${(I.argv||[]).map(iI1).join(", ")})`;return JSON.stringify(I,null,2)}dZ0.toDebugString=iI1});var JL=Y((vc)=>{Object.defineProperty(vc,"__esModule",{value:!0});var CZ0=x1();CZ0.__exportStar(IZ0(),vc);CZ0.__exportStar(ZZ0(),vc)});var AZ0=Y((wZ0)=>{Object.defineProperty(wZ0,"__esModule",{value:!0});wZ0.EndpointError=void 0;class WZ0 extends Error{constructor(I){super(I);this.name="EndpointError"}}wZ0.EndpointError=WZ0});var XZ0=Y((VZ0)=>{Object.defineProperty(VZ0,"__esModule",{value:!0})});var _Z0=Y((YZ0)=>{Object.defineProperty(YZ0,"__esModule",{value:!0})});var HZ0=Y((DZ0)=>{Object.defineProperty(DZ0,"__esModule",{value:!0})});var gZ0=Y((FZ0)=>{Object.defineProperty(FZ0,"__esModule",{value:!0})});var KZ0=Y((JZ0)=>{Object.defineProperty(JZ0,"__esModule",{value:!0})});var zZ=Y((y_)=>{Object.defineProperty(y_,"__esModule",{value:!0});var Tf=x1();Tf.__exportStar(AZ0(),y_);Tf.__exportStar(XZ0(),y_);Tf.__exportStar(_Z0(),y_);Tf.__exportStar(HZ0(),y_);Tf.__exportStar(gZ0(),y_);Tf.__exportStar(KZ0(),y_)});var nI1=Y((NZ0)=>{Object.defineProperty(NZ0,"__esModule",{value:!0});NZ0.isIpAddress=void 0;var Qn4=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$"),fn4=(I)=>Qn4.test(I)||I.startsWith("[")&&I.endsWith("]");NZ0.isIpAddress=fn4});var aI1=Y((QZ0)=>{Object.defineProperty(QZ0,"__esModule",{value:!0});QZ0.isValidHostLabel=void 0;var qn4=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$"),Rn4=(I,d=!1)=>{if(!d)return qn4.test(I);let G=I.split(".");for(let Z of G)if(!QZ0.isValidHostLabel(Z))return!1;return!0};QZ0.isValidHostLabel=Rn4});var qZ0=Y((fZ0)=>{Object.defineProperty(fZ0,"__esModule",{value:!0});fZ0.isVirtualHostableS3Bucket=void 0;var Un4=nI1(),vn4=aI1(),En4=(I,d=!1)=>{if(d){for(let G of I.split("."))if(!fZ0.isVirtualHostableS3Bucket(G))return!1;return!0}if(!vn4.isValidHostLabel(I))return!1;if(I.length<3||I.length>63)return!1;if(I!==I.toLowerCase())return!1;if(Un4.isIpAddress(I))return!1;return!0};fZ0.isVirtualHostableS3Bucket=En4});var vZ0=Y((RZ0)=>{Object.defineProperty(RZ0,"__esModule",{value:!0});RZ0.parseArn=void 0;var Mn4=(I)=>{let d=I.split(":");if(d.length<6)return null;let[G,Z,C,W,w,...B]=d;if(G!=="arn"||Z===""||C===""||B[0]==="")return null;return{partition:Z,service:C,region:W,accountId:w,resourceId:B[0].includes("/")?B[0].split("/"):B}};RZ0.parseArn=Mn4});var EZ0=Y((KL)=>{Object.defineProperty(KL,"__esModule",{value:!0});var oI1=x1();oI1.__exportStar(qZ0(),KL);oI1.__exportStar(vZ0(),KL);oI1.__exportStar(pI1(),KL)});var LZ0=Y((MZ0)=>{Object.defineProperty(MZ0,"__esModule",{value:!0});MZ0.booleanEquals=void 0;var Sn4=(I,d)=>I===d;MZ0.booleanEquals=Sn4});var uZ0=Y((PZ0)=>{Object.defineProperty(PZ0,"__esModule",{value:!0});PZ0.getAttrPathList=void 0;var yZ0=zZ(),Ln4=(I)=>{let d=I.split("."),G=[];for(let Z of d){let C=Z.indexOf("[");if(C!==-1){if(Z.indexOf("]")!==Z.length-1)throw new yZ0.EndpointError(`Path: '${I}' does not end with ']'`);let W=Z.slice(C+1,-1);if(Number.isNaN(parseInt(W)))throw new yZ0.EndpointError(`Invalid array index: '${W}' in path: '${I}'`);if(C!==0)G.push(Z.slice(0,C));G.push(W)}else G.push(Z)}return G};PZ0.getAttrPathList=Ln4});var mZ0=Y((TZ0)=>{Object.defineProperty(TZ0,"__esModule",{value:!0});TZ0.getAttr=void 0;var yn4=zZ(),Pn4=uZ0(),$n4=(I,d)=>Pn4.getAttrPathList(d).reduce((G,Z)=>{if(typeof G!=="object")throw new yn4.EndpointError(`Index '${Z}' in '${d}' not found in '${JSON.stringify(I)}'`);else if(Array.isArray(G))return G[parseInt(Z)];return G[Z]},I);TZ0.getAttr=$n4});var hZ0=Y((lZ0)=>{Object.defineProperty(lZ0,"__esModule",{value:!0});lZ0.isSet=void 0;var un4=(I)=>I!=null;lZ0.isSet=un4});var xZ0=Y((jZ0)=>{Object.defineProperty(jZ0,"__esModule",{value:!0});jZ0.not=void 0;var Tn4=(I)=>!I;jZ0.not=Tn4});var pZ0=Y((cZ0)=>{Object.defineProperty(cZ0,"__esModule",{value:!0})});var nZ0=Y((iZ0)=>{Object.defineProperty(iZ0,"__esModule",{value:!0});iZ0.HttpAuthLocation=void 0;var On4;(function(I){I.HEADER="header",I.QUERY="query"})(On4=iZ0.HttpAuthLocation||(iZ0.HttpAuthLocation={}))});var aZ0=Y((rZ0)=>{Object.defineProperty(rZ0,"__esModule",{value:!0})});var oZ0=Y((sZ0)=>{Object.defineProperty(sZ0,"__esModule",{value:!0})});var tZ0=Y((eZ0)=>{Object.defineProperty(eZ0,"__esModule",{value:!0})});var dC0=Y((IC0)=>{Object.defineProperty(IC0,"__esModule",{value:!0})});var ZC0=Y((GC0)=>{Object.defineProperty(GC0,"__esModule",{value:!0})});var WC0=Y((CC0)=>{Object.defineProperty(CC0,"__esModule",{value:!0})});var wC0=Y((NL)=>{Object.defineProperty(NL,"__esModule",{value:!0});var tI1=x1();tI1.__exportStar(dC0(),NL);tI1.__exportStar(ZC0(),NL);tI1.__exportStar(WC0(),NL)});var AC0=Y((BC0)=>{Object.defineProperty(BC0,"__esModule",{value:!0})});var XC0=Y((VC0)=>{Object.defineProperty(VC0,"__esModule",{value:!0})});var _C0=Y((YC0)=>{Object.defineProperty(YC0,"__esModule",{value:!0});YC0.HostAddressType=void 0;var mn4;(function(I){I.AAAA="AAAA",I.A="A"})(mn4=YC0.HostAddressType||(YC0.HostAddressType={}))});var HC0=Y((DC0)=>{Object.defineProperty(DC0,"__esModule",{value:!0});DC0.EndpointURLScheme=void 0;var ln4;(function(I){I.HTTP="http",I.HTTPS="https"})(ln4=DC0.EndpointURLScheme||(DC0.EndpointURLScheme={}))});var gC0=Y((FC0)=>{Object.defineProperty(FC0,"__esModule",{value:!0})});var KC0=Y((JC0)=>{Object.defineProperty(JC0,"__esModule",{value:!0})});var zC0=Y((NC0)=>{Object.defineProperty(NC0,"__esModule",{value:!0})});var fC0=Y((QC0)=>{Object.defineProperty(QC0,"__esModule",{value:!0})});var RC0=Y((qC0)=>{Object.defineProperty(qC0,"__esModule",{value:!0})});var vC0=Y((UC0)=>{Object.defineProperty(UC0,"__esModule",{value:!0})});var MC0=Y((EC0)=>{Object.defineProperty(EC0,"__esModule",{value:!0})});var SC0=Y((ng)=>{Object.defineProperty(ng,"__esModule",{value:!0});var zL=x1();zL.__exportStar(zC0(),ng);zL.__exportStar(fC0(),ng);zL.__exportStar(RC0(),ng);zL.__exportStar(vC0(),ng);zL.__exportStar(MC0(),ng)});var yC0=Y((LC0)=>{Object.defineProperty(LC0,"__esModule",{value:!0})});var $C0=Y((PC0)=>{Object.defineProperty(PC0,"__esModule",{value:!0})});var TC0=Y((uC0)=>{Object.defineProperty(uC0,"__esModule",{value:!0})});var mC0=Y((OC0)=>{Object.defineProperty(OC0,"__esModule",{value:!0})});var bC0=Y((lC0)=>{Object.defineProperty(lC0,"__esModule",{value:!0})});var jC0=Y((hC0)=>{Object.defineProperty(hC0,"__esModule",{value:!0})});var xC0=Y((kC0)=>{Object.defineProperty(kC0,"__esModule",{value:!0})});var pC0=Y((cC0)=>{Object.defineProperty(cC0,"__esModule",{value:!0})});var nC0=Y((iC0)=>{Object.defineProperty(iC0,"__esModule",{value:!0})});var aC0=Y((rC0)=>{Object.defineProperty(rC0,"__esModule",{value:!0})});var oC0=Y((sC0)=>{Object.defineProperty(sC0,"__esModule",{value:!0})});var tC0=Y((eC0)=>{Object.defineProperty(eC0,"__esModule",{value:!0})});var dW0=Y((IW0)=>{Object.defineProperty(IW0,"__esModule",{value:!0});IW0.RequestHandlerProtocol=void 0;var bn4;(function(I){I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0"})(bn4=IW0.RequestHandlerProtocol||(IW0.RequestHandlerProtocol={}))});var ZW0=Y((GW0)=>{Object.defineProperty(GW0,"__esModule",{value:!0})});var WW0=Y((CW0)=>{Object.defineProperty(CW0,"__esModule",{value:!0})});var wW0=Y((p5)=>{Object.defineProperty(p5,"__esModule",{value:!0});var V9=x1();V9.__exportStar(pZ0(),p5);V9.__exportStar(nZ0(),p5);V9.__exportStar(aZ0(),p5);V9.__exportStar(oZ0(),p5);V9.__exportStar(tZ0(),p5);V9.__exportStar(wC0(),p5);V9.__exportStar(AC0(),p5);V9.__exportStar(XC0(),p5);V9.__exportStar(_C0(),p5);V9.__exportStar(HC0(),p5);V9.__exportStar(gC0(),p5);V9.__exportStar(KC0(),p5);V9.__exportStar(SC0(),p5);V9.__exportStar(yC0(),p5);V9.__exportStar($C0(),p5);V9.__exportStar(TC0(),p5);V9.__exportStar(mC0(),p5);V9.__exportStar(bC0(),p5);V9.__exportStar(jC0(),p5);V9.__exportStar(xC0(),p5);V9.__exportStar(pC0(),p5);V9.__exportStar(nC0(),p5);V9.__exportStar(aC0(),p5);V9.__exportStar(oC0(),p5);V9.__exportStar(tC0(),p5);V9.__exportStar(dW0(),p5);V9.__exportStar(ZW0(),p5);V9.__exportStar(WW0(),p5)});var VW0=Y((BW0)=>{Object.defineProperty(BW0,"__esModule",{value:!0});BW0.parseURL=void 0;var Cd1=wW0(),hn4=nI1(),Zd1={[Cd1.EndpointURLScheme.HTTP]:80,[Cd1.EndpointURLScheme.HTTPS]:443},jn4=(I)=>{let d=(()=>{try{if(I instanceof URL)return I;if(typeof I==="object"&&"hostname"in I){let{hostname:F,port:g,protocol:J="",path:K="",query:Q={}}=I,E=new URL(`${J}//${F}${g?`:${g}`:""}${K}`);return E.search=Object.entries(Q).map(([S,P])=>`${S}=${P}`).join("&"),E}return new URL(I)}catch(F){return null}})();if(!d)return console.error(`Unable to parse ${JSON.stringify(I)} as a whatwg URL.`),null;let G=d.href,{host:Z,hostname:C,pathname:W,protocol:w,search:B}=d;if(B)return null;let A=w.slice(0,-1);if(!Object.values(Cd1.EndpointURLScheme).includes(A))return null;let V=hn4.isIpAddress(C),X=G.includes(`${Z}:${Zd1[A]}`)||typeof I==="string"&&I.includes(`${Z}:${Zd1[A]}`),_=`${Z}${X?`:${Zd1[A]}`:""}`;return{scheme:A,authority:_,path:W,normalizedPath:W.endsWith("/")?W:`${W}/`,isIp:V}};BW0.parseURL=jn4});var _W0=Y((XW0)=>{Object.defineProperty(XW0,"__esModule",{value:!0});XW0.stringEquals=void 0;var kn4=(I,d)=>I===d;XW0.stringEquals=kn4});var FW0=Y((DW0)=>{Object.defineProperty(DW0,"__esModule",{value:!0});DW0.substring=void 0;var xn4=(I,d,G,Z)=>{if(d>=G||I.length{Object.defineProperty(gW0,"__esModule",{value:!0});gW0.uriEncode=void 0;var cn4=(I)=>encodeURIComponent(I).replace(/[!*'()]/g,(d)=>`%${d.charCodeAt(0).toString(16).toUpperCase()}`);gW0.uriEncode=cn4});var Wd1=Y((jC)=>{Object.defineProperty(jC,"__esModule",{value:!0});jC.aws=void 0;var aw=x1();jC.aws=aw.__importStar(EZ0());aw.__exportStar(LZ0(),jC);aw.__exportStar(mZ0(),jC);aw.__exportStar(hZ0(),jC);aw.__exportStar(aI1(),jC);aw.__exportStar(xZ0(),jC);aw.__exportStar(VW0(),jC);aw.__exportStar(_W0(),jC);aw.__exportStar(FW0(),jC);aw.__exportStar(KW0(),jC)});var wd1=Y((zW0)=>{Object.defineProperty(zW0,"__esModule",{value:!0});zW0.evaluateTemplate=void 0;var pn4=Wd1(),in4=(I,d)=>{let G=[],Z={...d.endpointParams,...d.referenceRecord},C=0;while(C{Object.defineProperty(fW0,"__esModule",{value:!0});fW0.getReferenceValue=void 0;var nn4=({ref:I},d)=>{return{...d.endpointParams,...d.referenceRecord}[I]};fW0.getReferenceValue=nn4});var QL=Y((UW0)=>{Object.defineProperty(UW0,"__esModule",{value:!0});UW0.evaluateExpression=void 0;var rn4=zZ(),an4=Bd1(),sn4=wd1(),on4=RW0(),en4=(I,d,G)=>{if(typeof I==="string")return sn4.evaluateTemplate(I,G);else if(I.fn)return an4.callFunction(I,G);else if(I.ref)return on4.getReferenceValue(I,G);throw new rn4.EndpointError(`'${d}': ${String(I)} is not a string, function or reference.`)};UW0.evaluateExpression=en4});var Bd1=Y((EW0)=>{Object.defineProperty(EW0,"__esModule",{value:!0});EW0.callFunction=void 0;var tn4=x1(),Ir4=tn4.__importStar(Wd1()),dr4=QL(),Gr4=({fn:I,argv:d},G)=>{let Z=d.map((C)=>["boolean","number"].includes(typeof C)?C:dr4.evaluateExpression(C,"arg",G));return I.split(".").reduce((C,W)=>C[W],Ir4)(...Z)};EW0.callFunction=Gr4});var yW0=Y((SW0)=>{Object.defineProperty(SW0,"__esModule",{value:!0});SW0.evaluateCondition=void 0;var Ad1=JL(),Zr4=zZ(),Cr4=Bd1(),Wr4=({assign:I,...d},G)=>{var Z,C;if(I&&I in G.referenceRecord)throw new Zr4.EndpointError(`'${I}' is already defined in Reference Record.`);let W=Cr4.callFunction(d,G);return(C=(Z=G.logger)===null||Z===void 0?void 0:Z.debug)===null||C===void 0||C.call(Z,Ad1.debugId,`evaluateCondition: ${Ad1.toDebugString(d)} = ${Ad1.toDebugString(W)}`),{result:W===""?!0:!!W,...I!=null&&{toAssign:{name:I,value:W}}}};SW0.evaluateCondition=Wr4});var Ec=Y(($W0)=>{Object.defineProperty($W0,"__esModule",{value:!0});$W0.evaluateConditions=void 0;var PW0=JL(),wr4=yW0(),Br4=(I=[],d)=>{var G,Z;let C={};for(let W of I){let{result:w,toAssign:B}=wr4.evaluateCondition(W,{...d,referenceRecord:{...d.referenceRecord,...C}});if(!w)return{result:w};if(B)C[B.name]=B.value,(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,PW0.debugId,`assign: ${B.name} := ${PW0.toDebugString(B.value)}`)}return{result:!0,referenceRecord:C}};$W0.evaluateConditions=Br4});var mW0=Y((TW0)=>{Object.defineProperty(TW0,"__esModule",{value:!0});TW0.getEndpointHeaders=void 0;var Ar4=zZ(),Vr4=QL(),Xr4=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:C.map((W)=>{let w=Vr4.evaluateExpression(W,"Header value entry",d);if(typeof w!=="string")throw new Ar4.EndpointError(`Header '${Z}' value '${w}' is not a string`);return w})}),{});TW0.getEndpointHeaders=Xr4});var hW0=Y((bW0)=>{Object.defineProperty(bW0,"__esModule",{value:!0});bW0.getEndpointProperty=void 0;var lW0=zZ(),Yr4=wd1(),_r4=Xd1(),Dr4=(I,d)=>{if(Array.isArray(I))return I.map((G)=>bW0.getEndpointProperty(G,d));switch(typeof I){case"string":return Yr4.evaluateTemplate(I,d);case"object":if(I===null)throw new lW0.EndpointError(`Unexpected endpoint property: ${I}`);return _r4.getEndpointProperties(I,d);case"boolean":return I;default:throw new lW0.EndpointError(`Unexpected endpoint property type: ${typeof I}`)}};bW0.getEndpointProperty=Dr4});var Xd1=Y((jW0)=>{Object.defineProperty(jW0,"__esModule",{value:!0});jW0.getEndpointProperties=void 0;var Hr4=hW0(),Fr4=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:Hr4.getEndpointProperty(C,d)}),{});jW0.getEndpointProperties=Fr4});var pW0=Y((xW0)=>{Object.defineProperty(xW0,"__esModule",{value:!0});xW0.getEndpointUrl=void 0;var gr4=zZ(),Jr4=QL(),Kr4=(I,d)=>{let G=Jr4.evaluateExpression(I,"Endpoint URL",d);if(typeof G==="string")try{return new URL(G)}catch(Z){throw console.error(`Failed to construct URL with ${G}`,Z),Z}throw new gr4.EndpointError(`Endpoint URL must be a string, got ${typeof G}`)};xW0.getEndpointUrl=Kr4});var aW0=Y((nW0)=>{Object.defineProperty(nW0,"__esModule",{value:!0});nW0.evaluateEndpointRule=void 0;var iW0=JL(),Nr4=Ec(),zr4=mW0(),Qr4=Xd1(),fr4=pW0(),qr4=(I,d)=>{var G,Z;let{conditions:C,endpoint:W}=I,{result:w,referenceRecord:B}=Nr4.evaluateConditions(C,d);if(!w)return;let A={...d,referenceRecord:{...d.referenceRecord,...B}},{url:V,properties:X,headers:_}=W;return(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,iW0.debugId,`Resolving endpoint from template: ${iW0.toDebugString(W)}`),{..._!=null&&{headers:zr4.getEndpointHeaders(_,A)},...X!=null&&{properties:Qr4.getEndpointProperties(X,A)},url:fr4.getEndpointUrl(V,A)}};nW0.evaluateEndpointRule=qr4});var eW0=Y((sW0)=>{Object.defineProperty(sW0,"__esModule",{value:!0});sW0.evaluateErrorRule=void 0;var Rr4=zZ(),Ur4=Ec(),vr4=QL(),Er4=(I,d)=>{let{conditions:G,error:Z}=I,{result:C,referenceRecord:W}=Ur4.evaluateConditions(G,d);if(!C)return;throw new Rr4.EndpointError(vr4.evaluateExpression(Z,"Error",{...d,referenceRecord:{...d.referenceRecord,...W}}))};sW0.evaluateErrorRule=Er4});var dw0=Y((tW0)=>{Object.defineProperty(tW0,"__esModule",{value:!0});tW0.evaluateTreeRule=void 0;var Mr4=Ec(),Sr4=Yd1(),Lr4=(I,d)=>{let{conditions:G,rules:Z}=I,{result:C,referenceRecord:W}=Mr4.evaluateConditions(G,d);if(!C)return;return Sr4.evaluateRules(Z,{...d,referenceRecord:{...d.referenceRecord,...W}})};tW0.evaluateTreeRule=Lr4});var Yd1=Y((Zw0)=>{Object.defineProperty(Zw0,"__esModule",{value:!0});Zw0.evaluateRules=void 0;var Gw0=zZ(),yr4=aW0(),Pr4=eW0(),$r4=dw0(),ur4=(I,d)=>{for(let G of I)if(G.type==="endpoint"){let Z=yr4.evaluateEndpointRule(G,d);if(Z)return Z}else if(G.type==="error")Pr4.evaluateErrorRule(G,d);else if(G.type==="tree"){let Z=$r4.evaluateTreeRule(G,d);if(Z)return Z}else throw new Gw0.EndpointError(`Unknown endpoint rule: ${G}`);throw new Gw0.EndpointError("Rules evaluation failed")};Zw0.evaluateRules=ur4});var Ww0=Y((_d1)=>{Object.defineProperty(_d1,"__esModule",{value:!0});var Tr4=x1();Tr4.__exportStar(Yd1(),_d1)});var Aw0=Y((ww0)=>{Object.defineProperty(ww0,"__esModule",{value:!0});ww0.resolveEndpoint=void 0;var Mc=JL(),Or4=zZ(),mr4=Ww0(),lr4=(I,d)=>{var G,Z,C,W,w,B;let{endpointParams:A,logger:V}=d,{parameters:X,rules:_}=I;(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,`${Mc.debugId} Initial EndpointParams: ${Mc.toDebugString(A)}`);let F=Object.entries(X).filter(([,K])=>K.default!=null).map(([K,Q])=>[K,Q.default]);if(F.length>0)for(let[K,Q]of F)A[K]=(C=A[K])!==null&&C!==void 0?C:Q;let g=Object.entries(X).filter(([,K])=>K.required).map(([K])=>K);for(let K of g)if(A[K]==null)throw new Or4.EndpointError(`Missing required parameter: '${K}'`);let J=mr4.evaluateRules(_,{endpointParams:A,logger:V,referenceRecord:{}});if((W=d.endpointParams)===null||W===void 0?void 0:W.Endpoint)try{let K=new URL(d.endpointParams.Endpoint),{protocol:Q,port:E}=K;J.url.protocol=Q,J.url.port=E}catch(K){}return(B=(w=d.logger)===null||w===void 0?void 0:w.debug)===null||B===void 0||B.call(w,`${Mc.debugId} Resolved endpoint: ${Mc.toDebugString(J)}`),J};ww0.resolveEndpoint=lr4});var qL=Y((fL)=>{Object.defineProperty(fL,"__esModule",{value:!0});var Dd1=x1();Dd1.__exportStar(pI1(),fL);Dd1.__exportStar(Aw0(),fL);Dd1.__exportStar(zZ(),fL)});var Yw0=Y((Vw0)=>{Object.defineProperty(Vw0,"__esModule",{value:!0});Vw0.UA_ESCAPE_REGEX=Vw0.SPACE=Vw0.X_AMZ_USER_AGENT=Vw0.USER_AGENT=void 0;Vw0.USER_AGENT="user-agent";Vw0.X_AMZ_USER_AGENT="x-amz-user-agent";Vw0.SPACE=" ";Vw0.UA_ESCAPE_REGEX=/[^\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g});var gw0=Y((_w0)=>{Object.defineProperty(_w0,"__esModule",{value:!0});_w0.getUserAgentPlugin=_w0.getUserAgentMiddlewareOptions=_w0.userAgentMiddleware=void 0;var kr4=J8(),xr4=qL(),P_=Yw0(),cr4=(I)=>(d,G)=>async(Z)=>{var C,W;let{request:w}=Z;if(!kr4.HttpRequest.isInstance(w))return d(Z);let{headers:B}=w,A=((C=G===null||G===void 0?void 0:G.userAgent)===null||C===void 0?void 0:C.map(Hd1))||[],V=(await I.defaultUserAgentProvider()).map(Hd1),X=((W=I===null||I===void 0?void 0:I.customUserAgent)===null||W===void 0?void 0:W.map(Hd1))||[],_=xr4.getUserAgentPrefix(),F=(_?[_]:[]).concat([...V,...A,...X]).join(P_.SPACE),g=[...V.filter((J)=>J.startsWith("aws-sdk-")),...X].join(P_.SPACE);if(I.runtime!=="browser"){if(g)B[P_.X_AMZ_USER_AGENT]=B[P_.X_AMZ_USER_AGENT]?`${B[P_.USER_AGENT]} ${g}`:g;B[P_.USER_AGENT]=F}else B[P_.X_AMZ_USER_AGENT]=F;return d({...Z,request:w})};_w0.userAgentMiddleware=cr4;var Hd1=([I,d])=>{let G=I.indexOf("/"),Z=I.substring(0,G),C=I.substring(G+1);if(Z==="api")C=C.toLowerCase();return[Z,C,d].filter((W)=>W&&W.length>0).map((W)=>W===null||W===void 0?void 0:W.replace(P_.UA_ESCAPE_REGEX,"_")).join("/")};_w0.getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};var pr4=(I)=>({applyToStack:(d)=>{d.add(_w0.userAgentMiddleware(I),_w0.getUserAgentMiddlewareOptions)}});_w0.getUserAgentPlugin=pr4});var Lc=Y((Sc)=>{Object.defineProperty(Sc,"__esModule",{value:!0});var Jw0=x1();Jw0.__exportStar(cG0(),Sc);Jw0.__exportStar(gw0(),Sc)});var Qw0=Y((Nw0)=>{Object.defineProperty(Nw0,"__esModule",{value:!0});Nw0.NoOpLogger=void 0;class Kw0{trace(){}debug(){}info(){}warn(){}error(){}}Nw0.NoOpLogger=Kw0});var Uw0=Y((Rw0)=>{Object.defineProperty(Rw0,"__esModule",{value:!0});Rw0.constructStack=void 0;var ir4=()=>{let I=[],d=[],G=new Set,Z=(X)=>X.sort((_,F)=>fw0[F.step]-fw0[_.step]||qw0[F.priority||"normal"]-qw0[_.priority||"normal"]),C=(X)=>{let _=!1,F=(g)=>{if(g.name&&g.name===X)return _=!0,G.delete(X),!1;return!0};return I=I.filter(F),d=d.filter(F),_},W=(X)=>{let _=!1,F=(g)=>{if(g.middleware===X){if(_=!0,g.name)G.delete(g.name);return!1}return!0};return I=I.filter(F),d=d.filter(F),_},w=(X)=>{return I.forEach((_)=>{X.add(_.middleware,{..._})}),d.forEach((_)=>{X.addRelativeTo(_.middleware,{..._})}),X},B=(X)=>{let _=[];return X.before.forEach((F)=>{if(F.before.length===0&&F.after.length===0)_.push(F);else _.push(...B(F))}),_.push(X),X.after.reverse().forEach((F)=>{if(F.before.length===0&&F.after.length===0)_.push(F);else _.push(...B(F))}),_},A=(X=!1)=>{let _=[],F=[],g={};return I.forEach((K)=>{let Q={...K,before:[],after:[]};if(Q.name)g[Q.name]=Q;_.push(Q)}),d.forEach((K)=>{let Q={...K,before:[],after:[]};if(Q.name)g[Q.name]=Q;F.push(Q)}),F.forEach((K)=>{if(K.toMiddleware){let Q=g[K.toMiddleware];if(Q===void 0){if(X)return;throw new Error(`${K.toMiddleware} is not found when adding ${K.name||"anonymous"} middleware ${K.relation} ${K.toMiddleware}`)}if(K.relation==="after")Q.after.push(K);if(K.relation==="before")Q.before.push(K)}}),Z(_).map(B).reduce((K,Q)=>{return K.push(...Q),K},[])},V={add:(X,_={})=>{let{name:F,override:g}=_,J={step:"initialize",priority:"normal",middleware:X,..._};if(F){if(G.has(F)){if(!g)throw new Error(`Duplicate middleware name '${F}'`);let K=I.findIndex((E)=>E.name===F),Q=I[K];if(Q.step!==J.step||Q.priority!==J.priority)throw new Error(`"${F}" middleware with ${Q.priority} priority in ${Q.step} step cannot be overridden by same-name middleware with ${J.priority} priority in ${J.step} step.`);I.splice(K,1)}G.add(F)}I.push(J)},addRelativeTo:(X,_)=>{let{name:F,override:g}=_,J={middleware:X,..._};if(F){if(G.has(F)){if(!g)throw new Error(`Duplicate middleware name '${F}'`);let K=d.findIndex((E)=>E.name===F),Q=d[K];if(Q.toMiddleware!==J.toMiddleware||Q.relation!==J.relation)throw new Error(`"${F}" middleware ${Q.relation} "${Q.toMiddleware}" middleware cannot be overridden by same-name middleware ${J.relation} "${J.toMiddleware}" middleware.`);d.splice(K,1)}G.add(F)}d.push(J)},clone:()=>w(Rw0.constructStack()),use:(X)=>{X.applyToStack(V)},remove:(X)=>{if(typeof X==="string")return C(X);else return W(X)},removeByTag:(X)=>{let _=!1,F=(g)=>{let{tags:J,name:K}=g;if(J&&J.includes(X)){if(K)G.delete(K);return _=!0,!1}return!0};return I=I.filter(F),d=d.filter(F),_},concat:(X)=>{let _=w(Rw0.constructStack());return _.use(X),_},applyToStack:w,identify:()=>{return A(!0).map((X)=>{return X.name+": "+(X.tags||[]).join(",")})},resolve:(X,_)=>{for(let F of A().map((g)=>g.middleware).reverse())X=F(X,_);return X}};return V};Rw0.constructStack=ir4;var fw0={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1},qw0={high:3,normal:2,low:1}});var gd1=Y((Fd1)=>{Object.defineProperty(Fd1,"__esModule",{value:!0});var nr4=x1();nr4.__exportStar(Uw0(),Fd1)});var Sw0=Y((Ew0)=>{Object.defineProperty(Ew0,"__esModule",{value:!0});Ew0.Client=void 0;var rr4=gd1();class vw0{constructor(I){this.middlewareStack=rr4.constructStack(),this.config=I}send(I,d,G){let Z=typeof d!=="function"?d:void 0,C=typeof d==="function"?d:G,W=I.resolveMiddleware(this.middlewareStack,this.config,Z);if(C)W(I).then((w)=>C(null,w.output),(w)=>C(w)).catch(()=>{});else return W(I).then((w)=>w.output)}destroy(){if(this.config.requestHandler.destroy)this.config.requestHandler.destroy()}}Ew0.Client=vw0});var $w0=Y((yw0)=>{Object.defineProperty(yw0,"__esModule",{value:!0});yw0.Command=void 0;var ar4=gd1();class Lw0{constructor(){this.middlewareStack=ar4.constructStack()}}yw0.Command=Lw0});var Ow0=Y((uw0)=>{Object.defineProperty(uw0,"__esModule",{value:!0});uw0.SENSITIVE_STRING=void 0;uw0.SENSITIVE_STRING="***SensitiveInformation***"});var bw0=Y((mw0)=>{Object.defineProperty(mw0,"__esModule",{value:!0});mw0.createAggregatedClient=void 0;var sr4=(I,d)=>{for(let G of Object.keys(I)){let Z=I[G],C=async function(w,B,A){let V=new Z(w);if(typeof B==="function")this.send(V,B);else if(typeof A==="function"){if(typeof B!=="object")throw new Error(`Expected http options but got ${typeof B}`);this.send(V,B||{},A)}else return this.send(V,B)},W=(G[0].toLowerCase()+G.slice(1)).replace(/Command$/,"");d.prototype[W]=C}};mw0.createAggregatedClient=sr4});var fd1=Y((jw0)=>{Object.defineProperty(jw0,"__esModule",{value:!0});jw0.logger=jw0.strictParseByte=jw0.strictParseShort=jw0.strictParseInt32=jw0.strictParseInt=jw0.strictParseLong=jw0.limitedParseFloat32=jw0.limitedParseFloat=jw0.handleFloat=jw0.limitedParseDouble=jw0.strictParseFloat32=jw0.strictParseFloat=jw0.strictParseDouble=jw0.expectUnion=jw0.expectString=jw0.expectObject=jw0.expectNonNull=jw0.expectByte=jw0.expectShort=jw0.expectInt32=jw0.expectInt=jw0.expectLong=jw0.expectFloat32=jw0.expectNumber=jw0.expectBoolean=jw0.parseBoolean=void 0;var or4=(I)=>{switch(I){case"true":return!0;case"false":return!1;default:throw new Error(`Unable to parse boolean value "${I}"`)}};jw0.parseBoolean=or4;var er4=(I)=>{if(I===null||I===void 0)return;if(typeof I==="number"){if(I===0||I===1)jw0.logger.warn(Pc(`Expected boolean, got ${typeof I}: ${I}`));if(I===0)return!1;if(I===1)return!0}if(typeof I==="string"){let d=I.toLowerCase();if(d==="false"||d==="true")jw0.logger.warn(Pc(`Expected boolean, got ${typeof I}: ${I}`));if(d==="false")return!1;if(d==="true")return!0}if(typeof I==="boolean")return I;throw new TypeError(`Expected boolean, got ${typeof I}: ${I}`)};jw0.expectBoolean=er4;var tr4=(I)=>{if(I===null||I===void 0)return;if(typeof I==="string"){let d=parseFloat(I);if(!Number.isNaN(d)){if(String(d)!==String(I))jw0.logger.warn(Pc(`Expected number but observed string: ${I}`));return d}}if(typeof I==="number")return I;throw new TypeError(`Expected number, got ${typeof I}: ${I}`)};jw0.expectNumber=tr4;var Ia4=Math.ceil(340282346638528860000000000000000000000),da4=(I)=>{let d=jw0.expectNumber(I);if(d!==void 0&&!Number.isNaN(d)&&d!==1/0&&d!==-1/0){if(Math.abs(d)>Ia4)throw new TypeError(`Expected 32-bit float, got ${I}`)}return d};jw0.expectFloat32=da4;var Ga4=(I)=>{if(I===null||I===void 0)return;if(Number.isInteger(I)&&!Number.isNaN(I))return I;throw new TypeError(`Expected integer, got ${typeof I}: ${I}`)};jw0.expectLong=Ga4;jw0.expectInt=jw0.expectLong;var Za4=(I)=>zd1(I,32);jw0.expectInt32=Za4;var Ca4=(I)=>zd1(I,16);jw0.expectShort=Ca4;var Wa4=(I)=>zd1(I,8);jw0.expectByte=Wa4;var zd1=(I,d)=>{let G=jw0.expectLong(I);if(G!==void 0&&wa4(G,d)!==G)throw new TypeError(`Expected ${d}-bit integer, got ${I}`);return G},wa4=(I,d)=>{switch(d){case 32:return Int32Array.of(I)[0];case 16:return Int16Array.of(I)[0];case 8:return Int8Array.of(I)[0]}},Ba4=(I,d)=>{if(I===null||I===void 0){if(d)throw new TypeError(`Expected a non-null value for ${d}`);throw new TypeError("Expected a non-null value")}return I};jw0.expectNonNull=Ba4;var Aa4=(I)=>{if(I===null||I===void 0)return;if(typeof I==="object"&&!Array.isArray(I))return I;let d=Array.isArray(I)?"array":typeof I;throw new TypeError(`Expected object, got ${d}: ${I}`)};jw0.expectObject=Aa4;var Va4=(I)=>{if(I===null||I===void 0)return;if(typeof I==="string")return I;if(["boolean","number","bigint"].includes(typeof I))return jw0.logger.warn(Pc(`Expected string, got ${typeof I}: ${I}`)),String(I);throw new TypeError(`Expected string, got ${typeof I}: ${I}`)};jw0.expectString=Va4;var Xa4=(I)=>{if(I===null||I===void 0)return;let d=jw0.expectObject(I),G=Object.entries(d).filter(([,Z])=>Z!=null).map(([Z])=>Z);if(G.length===0)throw new TypeError("Unions must have exactly one non-null member. None were found.");if(G.length>1)throw new TypeError(`Unions must have exactly one non-null member. Keys ${G} were not null.`);return d};jw0.expectUnion=Xa4;var Ya4=(I)=>{if(typeof I=="string")return jw0.expectNumber(mf(I));return jw0.expectNumber(I)};jw0.strictParseDouble=Ya4;jw0.strictParseFloat=jw0.strictParseDouble;var _a4=(I)=>{if(typeof I=="string")return jw0.expectFloat32(mf(I));return jw0.expectFloat32(I)};jw0.strictParseFloat32=_a4;var Da4=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,mf=(I)=>{let d=I.match(Da4);if(d===null||d[0].length!==I.length)throw new TypeError("Expected real number, got implicit NaN");return parseFloat(I)},Ha4=(I)=>{if(typeof I=="string")return hw0(I);return jw0.expectNumber(I)};jw0.limitedParseDouble=Ha4;jw0.handleFloat=jw0.limitedParseDouble;jw0.limitedParseFloat=jw0.limitedParseDouble;var Fa4=(I)=>{if(typeof I=="string")return hw0(I);return jw0.expectFloat32(I)};jw0.limitedParseFloat32=Fa4;var hw0=(I)=>{switch(I){case"NaN":return NaN;case"Infinity":return 1/0;case"-Infinity":return-1/0;default:throw new Error(`Unable to parse float value: ${I}`)}},ga4=(I)=>{if(typeof I==="string")return jw0.expectLong(mf(I));return jw0.expectLong(I)};jw0.strictParseLong=ga4;jw0.strictParseInt=jw0.strictParseLong;var Ja4=(I)=>{if(typeof I==="string")return jw0.expectInt32(mf(I));return jw0.expectInt32(I)};jw0.strictParseInt32=Ja4;var Ka4=(I)=>{if(typeof I==="string")return jw0.expectShort(mf(I));return jw0.expectShort(I)};jw0.strictParseShort=Ka4;var Na4=(I)=>{if(typeof I==="string")return jw0.expectByte(mf(I));return jw0.expectByte(I)};jw0.strictParseByte=Na4;var Pc=(I)=>{return String(new TypeError(I).stack||I).split(` +`).slice(0,5).filter((d)=>!d.includes("stackTraceWarning")).join(` +`)};jw0.logger={warn:console.warn}});var nw0=Y((pw0)=>{Object.defineProperty(pw0,"__esModule",{value:!0});pw0.parseEpochTimestamp=pw0.parseRfc7231DateTime=pw0.parseRfc3339DateTimeWithOffset=pw0.parseRfc3339DateTime=pw0.dateToUtcString=void 0;var $_=fd1(),Ta4=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Rd1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function Oa4(I){let d=I.getUTCFullYear(),G=I.getUTCMonth(),Z=I.getUTCDay(),C=I.getUTCDate(),W=I.getUTCHours(),w=I.getUTCMinutes(),B=I.getUTCSeconds(),A=C<10?`0${C}`:`${C}`,V=W<10?`0${W}`:`${W}`,X=w<10?`0${w}`:`${w}`,_=B<10?`0${B}`:`${B}`;return`${Ta4[Z]}, ${A} ${Rd1[G]} ${d} ${V}:${X}:${_} GMT`}pw0.dateToUtcString=Oa4;var ma4=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/),la4=(I)=>{if(I===null||I===void 0)return;if(typeof I!=="string")throw new TypeError("RFC-3339 date-times must be expressed as strings");let d=ma4.exec(I);if(!d)throw new TypeError("Invalid RFC-3339 date-time value");let[G,Z,C,W,w,B,A,V]=d,X=$_.strictParseShort(lf(Z)),_=sw(C,"month",1,12),F=sw(W,"day",1,31);return vL(X,_,F,{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V})};pw0.parseRfc3339DateTime=la4;var ba4=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/),ha4=(I)=>{if(I===null||I===void 0)return;if(typeof I!=="string")throw new TypeError("RFC-3339 date-times must be expressed as strings");let d=ba4.exec(I);if(!d)throw new TypeError("Invalid RFC-3339 date-time value");let[G,Z,C,W,w,B,A,V,X]=d,_=$_.strictParseShort(lf(Z)),F=sw(C,"month",1,12),g=sw(W,"day",1,31),J=vL(_,F,g,{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V});if(X.toUpperCase()!="Z")J.setTime(J.getTime()-ta4(X));return J};pw0.parseRfc3339DateTimeWithOffset=ha4;var ja4=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),ka4=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),xa4=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/),ca4=(I)=>{if(I===null||I===void 0)return;if(typeof I!=="string")throw new TypeError("RFC-7231 date-times must be expressed as strings");let d=ja4.exec(I);if(d){let[G,Z,C,W,w,B,A,V]=d;return vL($_.strictParseShort(lf(W)),qd1(C),sw(Z,"day",1,31),{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V})}if(d=ka4.exec(I),d){let[G,Z,C,W,w,B,A,V]=d;return ra4(vL(ia4(W),qd1(C),sw(Z,"day",1,31),{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V}))}if(d=xa4.exec(I),d){let[G,Z,C,W,w,B,A,V]=d;return vL($_.strictParseShort(lf(V)),qd1(Z),sw(C.trimLeft(),"day",1,31),{hours:W,minutes:w,seconds:B,fractionalMilliseconds:A})}throw new TypeError("Invalid RFC-7231 date-time value")};pw0.parseRfc7231DateTime=ca4;var pa4=(I)=>{if(I===null||I===void 0)return;let d;if(typeof I==="number")d=I;else if(typeof I==="string")d=$_.strictParseDouble(I);else throw new TypeError("Epoch timestamps must be expressed as floating point numbers or their string representation");if(Number.isNaN(d)||d===1/0||d===-1/0)throw new TypeError("Epoch timestamps must be valid, non-Infinite, non-NaN numerics");return new Date(Math.round(d*1000))};pw0.parseEpochTimestamp=pa4;var vL=(I,d,G,Z)=>{let C=d-1;return sa4(I,C,G),new Date(Date.UTC(I,C,G,sw(Z.hours,"hour",0,23),sw(Z.minutes,"minute",0,59),sw(Z.seconds,"seconds",0,60),ea4(Z.fractionalMilliseconds)))},ia4=(I)=>{let d=new Date().getUTCFullYear(),G=Math.floor(d/100)*100+$_.strictParseShort(lf(I));if(G{if(I.getTime()-new Date().getTime()>na4)return new Date(Date.UTC(I.getUTCFullYear()-100,I.getUTCMonth(),I.getUTCDate(),I.getUTCHours(),I.getUTCMinutes(),I.getUTCSeconds(),I.getUTCMilliseconds()));return I},qd1=(I)=>{let d=Rd1.indexOf(I);if(d<0)throw new TypeError(`Invalid month: ${I}`);return d+1},aa4=[31,28,31,30,31,30,31,31,30,31,30,31],sa4=(I,d,G)=>{let Z=aa4[d];if(d===1&&oa4(I))Z=29;if(G>Z)throw new TypeError(`Invalid day for ${Rd1[d]} in ${I}: ${G}`)},oa4=(I)=>{return I%4===0&&(I%100!==0||I%400===0)},sw=(I,d,G,Z)=>{let C=$_.strictParseByte(lf(I));if(CZ)throw new TypeError(`${d} must be between ${G} and ${Z}, inclusive`);return C},ea4=(I)=>{if(I===null||I===void 0)return 0;return $_.strictParseFloat32("0."+I)*1000},ta4=(I)=>{let d=I[0],G=1;if(d=="+")G=1;else if(d=="-")G=-1;else throw new TypeError(`Offset direction, ${d}, must be "+" or "-"`);let Z=Number(I.substring(1,3)),C=Number(I.substring(4,6));return G*(Z*60+C)*60*1000},lf=(I)=>{let d=0;while(d{Object.defineProperty(rw0,"__esModule",{value:!0});rw0.decorateServiceException=rw0.ServiceException=void 0;class Ud1 extends Error{constructor(I){super(I.message);Object.setPrototypeOf(this,Ud1.prototype),this.name=I.name,this.$fault=I.$fault,this.$metadata=I.$metadata}}rw0.ServiceException=Ud1;var Cs4=(I,d={})=>{Object.entries(d).filter(([,Z])=>Z!==void 0).forEach(([Z,C])=>{if(I[Z]==null||I[Z]==="")I[Z]=C});let G=I.message||I.Message||"UnknownError";return I.message=G,delete I.Message,I};rw0.decorateServiceException=Cs4});var tw0=Y((sw0)=>{Object.defineProperty(sw0,"__esModule",{value:!0});sw0.withBaseException=sw0.throwDefaultError=void 0;var ws4=vd1(),Bs4=({output:I,parsedBody:d,exceptionCtor:G,errorCode:Z})=>{let C=Vs4(I),W=C.httpStatusCode?C.httpStatusCode+"":void 0,w=new G({name:(d===null||d===void 0?void 0:d.code)||(d===null||d===void 0?void 0:d.Code)||Z||W||"UnknownError",$fault:"client",$metadata:C});throw ws4.decorateServiceException(w,d)};sw0.throwDefaultError=Bs4;var As4=(I)=>{return({output:d,parsedBody:G,errorCode:Z})=>{sw0.throwDefaultError({output:d,parsedBody:G,exceptionCtor:I,errorCode:Z})}};sw0.withBaseException=As4;var Vs4=(I)=>{var d,G;return{httpStatusCode:I.statusCode,requestId:(G=(d=I.headers["x-amzn-requestid"])!==null&&d!==void 0?d:I.headers["x-amzn-request-id"])!==null&&G!==void 0?G:I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}}});var GB0=Y((IB0)=>{Object.defineProperty(IB0,"__esModule",{value:!0});IB0.loadConfigsForDefaultMode=void 0;var Xs4=(I)=>{switch(I){case"standard":return{retryMode:"standard",connectionTimeout:3100};case"in-region":return{retryMode:"standard",connectionTimeout:1100};case"cross-region":return{retryMode:"standard",connectionTimeout:3100};case"mobile":return{retryMode:"standard",connectionTimeout:30000};default:return{}}};IB0.loadConfigsForDefaultMode=Xs4});var wB0=Y((CB0)=>{Object.defineProperty(CB0,"__esModule",{value:!0});CB0.emitWarningIfUnsupportedVersion=void 0;var ZB0=!1,Ys4=(I)=>{if(I&&!ZB0&&parseInt(I.substring(1,I.indexOf(".")))<14)ZB0=!0};CB0.emitWarningIfUnsupportedVersion=Ys4});var Ed1=Y((BB0)=>{Object.defineProperty(BB0,"__esModule",{value:!0});BB0.extendedEncodeURIComponent=void 0;function _s4(I){return encodeURIComponent(I).replace(/[!'()*]/g,function(d){return"%"+d.charCodeAt(0).toString(16).toUpperCase()})}BB0.extendedEncodeURIComponent=_s4});var YB0=Y((VB0)=>{Object.defineProperty(VB0,"__esModule",{value:!0});VB0.getArrayIfSingleItem=void 0;var Ds4=(I)=>Array.isArray(I)?I:[I];VB0.getArrayIfSingleItem=Ds4});var DB0=Y((_B0)=>{Object.defineProperty(_B0,"__esModule",{value:!0});_B0.getValueFromTextNode=void 0;var Hs4=(I)=>{for(let G in I)if(I.hasOwnProperty(G)&&I[G]["#text"]!==void 0)I[G]=I[G]["#text"];else if(typeof I[G]==="object"&&I[G]!==null)I[G]=_B0.getValueFromTextNode(I[G]);return I};_B0.getValueFromTextNode=Hs4});var gB0=Y((HB0)=>{Object.defineProperty(HB0,"__esModule",{value:!0});HB0.LazyJsonString=HB0.StringWrapper=void 0;var Fs4=function(){let I=Object.getPrototypeOf(this).constructor,G=new(Function.bind.apply(String,[null,...arguments]));return Object.setPrototypeOf(G,I.prototype),G};HB0.StringWrapper=Fs4;HB0.StringWrapper.prototype=Object.create(String.prototype,{constructor:{value:HB0.StringWrapper,enumerable:!1,writable:!0,configurable:!0}});Object.setPrototypeOf(HB0.StringWrapper,String);class EL extends HB0.StringWrapper{deserializeJSON(){return JSON.parse(super.toString())}toJSON(){return super.toString()}static fromObject(I){if(I instanceof EL)return I;else if(I instanceof String||typeof I==="string")return new EL(I);return new EL(JSON.stringify(I))}}HB0.LazyJsonString=EL});var QB0=Y((NB0)=>{Object.defineProperty(NB0,"__esModule",{value:!0});NB0.take=NB0.convertMap=NB0.map=void 0;function JB0(I,d,G){let Z,C,W;if(typeof d==="undefined"&&typeof G==="undefined")Z={},W=I;else if(Z=I,typeof d==="function")return C=d,W=G,Ks4(Z,C,W);else W=d;for(let w of Object.keys(W)){if(!Array.isArray(W[w])){Z[w]=W[w];continue}KB0(Z,null,W,w)}return Z}NB0.map=JB0;var gs4=(I)=>{let d={};for(let[G,Z]of Object.entries(I||{}))d[G]=[,Z];return d};NB0.convertMap=gs4;var Js4=(I,d)=>{let G={};for(let Z in d)KB0(G,I,d,Z);return G};NB0.take=Js4;var Ks4=(I,d,G)=>{return JB0(I,Object.entries(G).reduce((Z,[C,W])=>{if(Array.isArray(W))Z[C]=W;else if(typeof W==="function")Z[C]=[d,W()];else Z[C]=[d,W];return Z},{}))},KB0=(I,d,G,Z)=>{if(d!==null){let w=G[Z];if(typeof w==="function")w=[,w];let[B=Ns4,A=zs4,V=Z]=w;if(typeof B==="function"&&B(d[V])||typeof B!=="function"&&!!B)I[Z]=A(d[V]);return}let[C,W]=G[Z];if(typeof W==="function"){let w,B=C===void 0&&(w=W())!=null,A=typeof C==="function"&&!!C(void 0)||typeof C!=="function"&&!!C;if(B)I[Z]=w;else if(A)I[Z]=W()}else{let w=C===void 0&&W!=null,B=typeof C==="function"&&!!C(W)||typeof C!=="function"&&!!C;if(w||B)I[Z]=W}},Ns4=(I)=>I!=null,zs4=(I)=>I});var UB0=Y((qB0)=>{Object.defineProperty(qB0,"__esModule",{value:!0});qB0.resolvedPath=void 0;var fB0=Ed1(),qs4=(I,d,G,Z,C,W)=>{if(d!=null&&d[G]!==void 0){let w=Z();if(w.length<=0)throw new Error("Empty value provided for input HTTP label: "+G+".");I=I.replace(C,W?w.split("/").map((B)=>fB0.extendedEncodeURIComponent(B)).join("/"):fB0.extendedEncodeURIComponent(w))}else throw new Error("No value provided for input HTTP label: "+G+".");return I};qB0.resolvedPath=qs4});var MB0=Y((vB0)=>{Object.defineProperty(vB0,"__esModule",{value:!0});vB0.serializeFloat=void 0;var Rs4=(I)=>{if(I!==I)return"NaN";switch(I){case 1/0:return"Infinity";case-1/0:return"-Infinity";default:return I}};vB0.serializeFloat=Rs4});var LB0=Y((SB0)=>{Object.defineProperty(SB0,"__esModule",{value:!0});SB0._json=void 0;var Us4=(I)=>{if(I==null)return{};if(Array.isArray(I))return I.filter((d)=>d!=null);if(typeof I==="object"){let d={};for(let G of Object.keys(I)){if(I[G]==null)continue;d[G]=SB0._json(I[G])}return d}return I};SB0._json=Us4});var $B0=Y((yB0)=>{Object.defineProperty(yB0,"__esModule",{value:!0});yB0.splitEvery=void 0;function vs4(I,d,G){if(G<=0||!Number.isInteger(G))throw new Error("Invalid number of delimiters ("+G+") for splitEvery.");let Z=I.split(d);if(G===1)return Z;let C=[],W="";for(let w=0;w{Object.defineProperty(h3,"__esModule",{value:!0});var q6=x1();q6.__exportStar(Qw0(),h3);q6.__exportStar(Sw0(),h3);q6.__exportStar($w0(),h3);q6.__exportStar(Ow0(),h3);q6.__exportStar(bw0(),h3);q6.__exportStar(nw0(),h3);q6.__exportStar(tw0(),h3);q6.__exportStar(GB0(),h3);q6.__exportStar(wB0(),h3);q6.__exportStar(vd1(),h3);q6.__exportStar(Ed1(),h3);q6.__exportStar(YB0(),h3);q6.__exportStar(DB0(),h3);q6.__exportStar(gB0(),h3);q6.__exportStar(QB0(),h3);q6.__exportStar(fd1(),h3);q6.__exportStar(UB0(),h3);q6.__exportStar(MB0(),h3);q6.__exportStar(LB0(),h3);q6.__exportStar($B0(),h3)});var OB0=Y((uB0)=>{Object.defineProperty(uB0,"__esModule",{value:!0});uB0.resolveClientEndpointParameters=void 0;var Es4=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,defaultSigningName:"cognito-identity"}};uB0.resolveClientEndpointParameters=Es4});var mB0=Y((to9,Ms4)=>{Ms4.exports={name:"@aws-sdk/client-cognito-identity",description:"AWS SDK for JavaScript Cognito Identity Client for Node.js, Browser and React Native",version:"3.341.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo cognito-identity","test:e2e":"ts-mocha test/**/*.ispec.ts && karma start karma.conf.js"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/client-sts":"3.341.0","@aws-sdk/config-resolver":"3.341.0","@aws-sdk/credential-provider-node":"3.341.0","@aws-sdk/fetch-http-handler":"3.341.0","@aws-sdk/hash-node":"3.341.0","@aws-sdk/invalid-dependency":"3.341.0","@aws-sdk/middleware-content-length":"3.341.0","@aws-sdk/middleware-endpoint":"3.341.0","@aws-sdk/middleware-host-header":"3.341.0","@aws-sdk/middleware-logger":"3.341.0","@aws-sdk/middleware-recursion-detection":"3.341.0","@aws-sdk/middleware-retry":"3.341.0","@aws-sdk/middleware-serde":"3.341.0","@aws-sdk/middleware-signing":"3.341.0","@aws-sdk/middleware-stack":"3.341.0","@aws-sdk/middleware-user-agent":"3.341.0","@aws-sdk/node-config-provider":"3.341.0","@aws-sdk/node-http-handler":"3.341.0","@aws-sdk/smithy-client":"3.341.0","@aws-sdk/types":"3.341.0","@aws-sdk/url-parser":"3.341.0","@aws-sdk/util-base64":"3.310.0","@aws-sdk/util-body-length-browser":"3.310.0","@aws-sdk/util-body-length-node":"3.310.0","@aws-sdk/util-defaults-mode-browser":"3.341.0","@aws-sdk/util-defaults-mode-node":"3.341.0","@aws-sdk/util-endpoints":"3.341.0","@aws-sdk/util-retry":"3.341.0","@aws-sdk/util-user-agent-browser":"3.341.0","@aws-sdk/util-user-agent-node":"3.341.0","@aws-sdk/util-utf8":"3.310.0","@smithy/protocol-http":"^1.0.1","@smithy/types":"^1.0.0",tslib:"^2.5.0"},devDependencies:{"@aws-sdk/client-iam":"3.341.0","@aws-sdk/service-client-documentation-generator":"3.310.0","@tsconfig/node14":"1.0.3","@types/chai":"^4.2.11","@types/mocha":"^8.0.4","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-cognito-identity",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-cognito-identity"}}});var hB0=Y((lB0)=>{Object.defineProperty(lB0,"__esModule",{value:!0});lB0.resolveStsAuthConfig=void 0;var Ss4=A9(),Ls4=(I,{stsClientCtor:d})=>Ss4.resolveAwsAuthConfig({...I,stsClientCtor:d});lB0.resolveStsAuthConfig=Ls4});var xB0=Y((jB0)=>{Object.defineProperty(jB0,"__esModule",{value:!0});jB0.resolveClientEndpointParameters=void 0;var ys4=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,useGlobalEndpoint:I.useGlobalEndpoint??!1,defaultSigningName:"sts"}};jB0.resolveClientEndpointParameters=ys4});var cB0=Y((Ge9,Ps4)=>{Ps4.exports={name:"@aws-sdk/client-sts",description:"AWS SDK for JavaScript Sts Client for Node.js, Browser and React Native",version:"3.341.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sts",test:"yarn test:unit","test:unit":"jest"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/config-resolver":"3.341.0","@aws-sdk/credential-provider-node":"3.341.0","@aws-sdk/fetch-http-handler":"3.341.0","@aws-sdk/hash-node":"3.341.0","@aws-sdk/invalid-dependency":"3.341.0","@aws-sdk/middleware-content-length":"3.341.0","@aws-sdk/middleware-endpoint":"3.341.0","@aws-sdk/middleware-host-header":"3.341.0","@aws-sdk/middleware-logger":"3.341.0","@aws-sdk/middleware-recursion-detection":"3.341.0","@aws-sdk/middleware-retry":"3.341.0","@aws-sdk/middleware-sdk-sts":"3.341.0","@aws-sdk/middleware-serde":"3.341.0","@aws-sdk/middleware-signing":"3.341.0","@aws-sdk/middleware-stack":"3.341.0","@aws-sdk/middleware-user-agent":"3.341.0","@aws-sdk/node-config-provider":"3.341.0","@aws-sdk/node-http-handler":"3.341.0","@aws-sdk/smithy-client":"3.341.0","@aws-sdk/types":"3.341.0","@aws-sdk/url-parser":"3.341.0","@aws-sdk/util-base64":"3.310.0","@aws-sdk/util-body-length-browser":"3.310.0","@aws-sdk/util-body-length-node":"3.310.0","@aws-sdk/util-defaults-mode-browser":"3.341.0","@aws-sdk/util-defaults-mode-node":"3.341.0","@aws-sdk/util-endpoints":"3.341.0","@aws-sdk/util-retry":"3.341.0","@aws-sdk/util-user-agent-browser":"3.341.0","@aws-sdk/util-user-agent-node":"3.341.0","@aws-sdk/util-utf8":"3.310.0","@smithy/protocol-http":"^1.0.1","@smithy/types":"^1.0.0","fast-xml-parser":"4.1.2",tslib:"^2.5.0"},devDependencies:{"@aws-sdk/service-client-documentation-generator":"3.310.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sts",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sts"}}});var uc=Y((yd1)=>{Object.defineProperty(yd1,"__esModule",{value:!0});yd1.STSServiceException=yd1.__ServiceException=void 0;var pB0=v0();Object.defineProperty(yd1,"__ServiceException",{enumerable:!0,get:function(){return pB0.ServiceException}});class Ld1 extends pB0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,Ld1.prototype)}}yd1.STSServiceException=Ld1});var T_=Y((nB0)=>{Object.defineProperty(nB0,"__esModule",{value:!0});nB0.GetSessionTokenResponseFilterSensitiveLog=nB0.GetFederationTokenResponseFilterSensitiveLog=nB0.AssumeRoleWithWebIdentityResponseFilterSensitiveLog=nB0.AssumeRoleWithWebIdentityRequestFilterSensitiveLog=nB0.AssumeRoleWithSAMLResponseFilterSensitiveLog=nB0.AssumeRoleWithSAMLRequestFilterSensitiveLog=nB0.AssumeRoleResponseFilterSensitiveLog=nB0.CredentialsFilterSensitiveLog=nB0.InvalidAuthorizationMessageException=nB0.IDPCommunicationErrorException=nB0.InvalidIdentityTokenException=nB0.IDPRejectedClaimException=nB0.RegionDisabledException=nB0.PackedPolicyTooLargeException=nB0.MalformedPolicyDocumentException=nB0.ExpiredTokenException=void 0;var Pd1=v0(),u_=uc();class $d1 extends u_.STSServiceException{constructor(I){super({name:"ExpiredTokenException",$fault:"client",...I});this.name="ExpiredTokenException",this.$fault="client",Object.setPrototypeOf(this,$d1.prototype)}}nB0.ExpiredTokenException=$d1;class ud1 extends u_.STSServiceException{constructor(I){super({name:"MalformedPolicyDocumentException",$fault:"client",...I});this.name="MalformedPolicyDocumentException",this.$fault="client",Object.setPrototypeOf(this,ud1.prototype)}}nB0.MalformedPolicyDocumentException=ud1;class Td1 extends u_.STSServiceException{constructor(I){super({name:"PackedPolicyTooLargeException",$fault:"client",...I});this.name="PackedPolicyTooLargeException",this.$fault="client",Object.setPrototypeOf(this,Td1.prototype)}}nB0.PackedPolicyTooLargeException=Td1;class Od1 extends u_.STSServiceException{constructor(I){super({name:"RegionDisabledException",$fault:"client",...I});this.name="RegionDisabledException",this.$fault="client",Object.setPrototypeOf(this,Od1.prototype)}}nB0.RegionDisabledException=Od1;class md1 extends u_.STSServiceException{constructor(I){super({name:"IDPRejectedClaimException",$fault:"client",...I});this.name="IDPRejectedClaimException",this.$fault="client",Object.setPrototypeOf(this,md1.prototype)}}nB0.IDPRejectedClaimException=md1;class ld1 extends u_.STSServiceException{constructor(I){super({name:"InvalidIdentityTokenException",$fault:"client",...I});this.name="InvalidIdentityTokenException",this.$fault="client",Object.setPrototypeOf(this,ld1.prototype)}}nB0.InvalidIdentityTokenException=ld1;class bd1 extends u_.STSServiceException{constructor(I){super({name:"IDPCommunicationErrorException",$fault:"client",...I});this.name="IDPCommunicationErrorException",this.$fault="client",Object.setPrototypeOf(this,bd1.prototype)}}nB0.IDPCommunicationErrorException=bd1;class hd1 extends u_.STSServiceException{constructor(I){super({name:"InvalidAuthorizationMessageException",$fault:"client",...I});this.name="InvalidAuthorizationMessageException",this.$fault="client",Object.setPrototypeOf(this,hd1.prototype)}}nB0.InvalidAuthorizationMessageException=hd1;var $s4=(I)=>({...I,...I.SecretAccessKey&&{SecretAccessKey:Pd1.SENSITIVE_STRING}});nB0.CredentialsFilterSensitiveLog=$s4;var us4=(I)=>({...I,...I.Credentials&&{Credentials:nB0.CredentialsFilterSensitiveLog(I.Credentials)}});nB0.AssumeRoleResponseFilterSensitiveLog=us4;var Ts4=(I)=>({...I,...I.SAMLAssertion&&{SAMLAssertion:Pd1.SENSITIVE_STRING}});nB0.AssumeRoleWithSAMLRequestFilterSensitiveLog=Ts4;var Os4=(I)=>({...I,...I.Credentials&&{Credentials:nB0.CredentialsFilterSensitiveLog(I.Credentials)}});nB0.AssumeRoleWithSAMLResponseFilterSensitiveLog=Os4;var ms4=(I)=>({...I,...I.WebIdentityToken&&{WebIdentityToken:Pd1.SENSITIVE_STRING}});nB0.AssumeRoleWithWebIdentityRequestFilterSensitiveLog=ms4;var ls4=(I)=>({...I,...I.Credentials&&{Credentials:nB0.CredentialsFilterSensitiveLog(I.Credentials)}});nB0.AssumeRoleWithWebIdentityResponseFilterSensitiveLog=ls4;var bs4=(I)=>({...I,...I.Credentials&&{Credentials:nB0.CredentialsFilterSensitiveLog(I.Credentials)}});nB0.GetFederationTokenResponseFilterSensitiveLog=bs4;var hs4=(I)=>({...I,...I.Credentials&&{Credentials:nB0.CredentialsFilterSensitiveLog(I.Credentials)}});nB0.GetSessionTokenResponseFilterSensitiveLog=hs4});var sB0=Y((aB0)=>{Object.defineProperty(aB0,"__esModule",{value:!0})});var eB0=Y((oB0)=>{Object.defineProperty(oB0,"__esModule",{value:!0});oB0.HttpAuthLocation=void 0;var do4;(function(I){I.HEADER="header",I.QUERY="query"})(do4=oB0.HttpAuthLocation||(oB0.HttpAuthLocation={}))});var IA0=Y((tB0)=>{Object.defineProperty(tB0,"__esModule",{value:!0})});var GA0=Y((dA0)=>{Object.defineProperty(dA0,"__esModule",{value:!0})});var CA0=Y((ZA0)=>{Object.defineProperty(ZA0,"__esModule",{value:!0})});var wA0=Y((WA0)=>{Object.defineProperty(WA0,"__esModule",{value:!0})});var AA0=Y((BA0)=>{Object.defineProperty(BA0,"__esModule",{value:!0})});var XA0=Y((VA0)=>{Object.defineProperty(VA0,"__esModule",{value:!0})});var _A0=Y((YA0)=>{Object.defineProperty(YA0,"__esModule",{value:!0})});var DA0=Y((SL)=>{Object.defineProperty(SL,"__esModule",{value:!0});var kd1=x1();kd1.__exportStar(AA0(),SL);kd1.__exportStar(XA0(),SL);kd1.__exportStar(_A0(),SL)});var FA0=Y((HA0)=>{Object.defineProperty(HA0,"__esModule",{value:!0})});var JA0=Y((gA0)=>{Object.defineProperty(gA0,"__esModule",{value:!0})});var NA0=Y((KA0)=>{Object.defineProperty(KA0,"__esModule",{value:!0});KA0.EndpointURLScheme=void 0;var Go4;(function(I){I.HTTP="http",I.HTTPS="https"})(Go4=KA0.EndpointURLScheme||(KA0.EndpointURLScheme={}))});var QA0=Y((zA0)=>{Object.defineProperty(zA0,"__esModule",{value:!0})});var qA0=Y((fA0)=>{Object.defineProperty(fA0,"__esModule",{value:!0})});var UA0=Y((RA0)=>{Object.defineProperty(RA0,"__esModule",{value:!0})});var EA0=Y((vA0)=>{Object.defineProperty(vA0,"__esModule",{value:!0})});var SA0=Y((MA0)=>{Object.defineProperty(MA0,"__esModule",{value:!0})});var LA0=Y((rg)=>{Object.defineProperty(rg,"__esModule",{value:!0});var LL=x1();LL.__exportStar(QA0(),rg);LL.__exportStar(qA0(),rg);LL.__exportStar(UA0(),rg);LL.__exportStar(EA0(),rg);LL.__exportStar(SA0(),rg)});var PA0=Y((yA0)=>{Object.defineProperty(yA0,"__esModule",{value:!0})});var uA0=Y(($A0)=>{Object.defineProperty($A0,"__esModule",{value:!0});$A0.FieldPosition=void 0;var Zo4;(function(I){I[I.HEADER=0]="HEADER",I[I.TRAILER=1]="TRAILER"})(Zo4=$A0.FieldPosition||($A0.FieldPosition={}))});var OA0=Y((TA0)=>{Object.defineProperty(TA0,"__esModule",{value:!0})});var lA0=Y((mA0)=>{Object.defineProperty(mA0,"__esModule",{value:!0})});var hA0=Y((Tc)=>{Object.defineProperty(Tc,"__esModule",{value:!0});var bA0=x1();bA0.__exportStar(OA0(),Tc);bA0.__exportStar(lA0(),Tc)});var kA0=Y((jA0)=>{Object.defineProperty(jA0,"__esModule",{value:!0})});var cA0=Y((xA0)=>{Object.defineProperty(xA0,"__esModule",{value:!0})});var iA0=Y((pA0)=>{Object.defineProperty(pA0,"__esModule",{value:!0})});var rA0=Y((nA0)=>{Object.defineProperty(nA0,"__esModule",{value:!0})});var sA0=Y((aA0)=>{Object.defineProperty(aA0,"__esModule",{value:!0})});var eA0=Y((oA0)=>{Object.defineProperty(oA0,"__esModule",{value:!0})});var IV0=Y((tA0)=>{Object.defineProperty(tA0,"__esModule",{value:!0})});var GV0=Y((dV0)=>{Object.defineProperty(dV0,"__esModule",{value:!0})});var CV0=Y((ZV0)=>{Object.defineProperty(ZV0,"__esModule",{value:!0})});var wV0=Y((WV0)=>{Object.defineProperty(WV0,"__esModule",{value:!0})});var AV0=Y((BV0)=>{Object.defineProperty(BV0,"__esModule",{value:!0})});var XV0=Y((VV0)=>{Object.defineProperty(VV0,"__esModule",{value:!0})});var _V0=Y((YV0)=>{Object.defineProperty(YV0,"__esModule",{value:!0})});var HV0=Y((DV0)=>{Object.defineProperty(DV0,"__esModule",{value:!0});DV0.RequestHandlerProtocol=void 0;var Co4;(function(I){I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0"})(Co4=DV0.RequestHandlerProtocol||(DV0.RequestHandlerProtocol={}))});var gV0=Y((FV0)=>{Object.defineProperty(FV0,"__esModule",{value:!0})});var KV0=Y((JV0)=>{Object.defineProperty(JV0,"__esModule",{value:!0})});var zV0=Y((NV0)=>{Object.defineProperty(NV0,"__esModule",{value:!0})});var fV0=Y((QV0)=>{Object.defineProperty(QV0,"__esModule",{value:!0})});var RV0=Y((qV0)=>{Object.defineProperty(qV0,"__esModule",{value:!0})});var UV0=Y((B5)=>{Object.defineProperty(B5,"__esModule",{value:!0});var Q5=x1();Q5.__exportStar(sB0(),B5);Q5.__exportStar(eB0(),B5);Q5.__exportStar(IA0(),B5);Q5.__exportStar(GA0(),B5);Q5.__exportStar(CA0(),B5);Q5.__exportStar(wA0(),B5);Q5.__exportStar(DA0(),B5);Q5.__exportStar(FA0(),B5);Q5.__exportStar(JA0(),B5);Q5.__exportStar(NA0(),B5);Q5.__exportStar(LA0(),B5);Q5.__exportStar(PA0(),B5);Q5.__exportStar(uA0(),B5);Q5.__exportStar(hA0(),B5);Q5.__exportStar(kA0(),B5);Q5.__exportStar(cA0(),B5);Q5.__exportStar(iA0(),B5);Q5.__exportStar(rA0(),B5);Q5.__exportStar(sA0(),B5);Q5.__exportStar(eA0(),B5);Q5.__exportStar(IV0(),B5);Q5.__exportStar(GV0(),B5);Q5.__exportStar(CV0(),B5);Q5.__exportStar(wV0(),B5);Q5.__exportStar(AV0(),B5);Q5.__exportStar(XV0(),B5);Q5.__exportStar(_V0(),B5);Q5.__exportStar(HV0(),B5);Q5.__exportStar(gV0(),B5);Q5.__exportStar(KV0(),B5);Q5.__exportStar(zV0(),B5);Q5.__exportStar(fV0(),B5);Q5.__exportStar(RV0(),B5)});var SV0=Y((EV0)=>{Object.defineProperty(EV0,"__esModule",{value:!0});EV0.Field=void 0;var Wo4=UV0();class vV0{constructor({name:I,kind:d=Wo4.FieldPosition.HEADER,values:G=[]}){this.name=I,this.kind=d,this.values=G}add(I){this.values.push(I)}set(I){this.values=I}remove(I){this.values=this.values.filter((d)=>d!==I)}toString(){return this.values.map((I)=>I.includes(",")||I.includes(" ")?`"${I}"`:I).join(", ")}get(){return this.values}}EV0.Field=vV0});var $V0=Y((yV0)=>{Object.defineProperty(yV0,"__esModule",{value:!0});yV0.Fields=void 0;class LV0{constructor({fields:I=[],encoding:d="utf-8"}){this.entries={},I.forEach(this.setField.bind(this)),this.encoding=d}setField(I){this.entries[I.name.toLowerCase()]=I}getField(I){return this.entries[I.toLowerCase()]}removeField(I){delete this.entries[I.toLowerCase()]}getByType(I){return Object.values(this.entries).filter((d)=>d.kind===I)}}yV0.Fields=LV0});var TV0=Y((uV0)=>{Object.defineProperty(uV0,"__esModule",{value:!0})});var lV0=Y((OV0)=>{Object.defineProperty(OV0,"__esModule",{value:!0});OV0.HttpRequest=void 0;class id1{constructor(I){this.method=I.method||"GET",this.hostname=I.hostname||"localhost",this.port=I.port,this.query=I.query||{},this.headers=I.headers||{},this.body=I.body,this.protocol=I.protocol?I.protocol.slice(-1)!==":"?`${I.protocol}:`:I.protocol:"https:",this.path=I.path?I.path.charAt(0)!=="/"?`/${I.path}`:I.path:"/",this.username=I.username,this.password=I.password,this.fragment=I.fragment}static isInstance(I){if(!I)return!1;let d=I;return"method"in d&&"protocol"in d&&"hostname"in d&&"path"in d&&typeof d.query==="object"&&typeof d.headers==="object"}clone(){let I=new id1({...this,headers:{...this.headers}});if(I.query)I.query=wo4(I.query);return I}}OV0.HttpRequest=id1;function wo4(I){return Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{})}});var kV0=Y((hV0)=>{Object.defineProperty(hV0,"__esModule",{value:!0});hV0.HttpResponse=void 0;class bV0{constructor(I){this.statusCode=I.statusCode,this.reason=I.reason,this.headers=I.headers||{},this.body=I.body}static isInstance(I){if(!I)return!1;let d=I;return typeof d.statusCode==="number"&&typeof d.headers==="object"}}hV0.HttpResponse=bV0});var pV0=Y((xV0)=>{Object.defineProperty(xV0,"__esModule",{value:!0});xV0.isValidHostname=void 0;function Bo4(I){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(I)}xV0.isValidHostname=Bo4});var nV0=Y((iV0)=>{Object.defineProperty(iV0,"__esModule",{value:!0})});var Oc=Y((zV)=>{Object.defineProperty(zV,"__esModule",{value:!0});var ag=x1();ag.__exportStar(SV0(),zV);ag.__exportStar($V0(),zV);ag.__exportStar(TV0(),zV);ag.__exportStar(lV0(),zV);ag.__exportStar(kV0(),zV);ag.__exportStar(pV0(),zV);ag.__exportStar(nV0(),zV)});var nd1=Y((_o4)=>{var Ao4=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",rV0="[:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]["+Ao4+"]*",Vo4=new RegExp("^"+rV0+"$"),Xo4=function(I,d){let G=[],Z=d.exec(I);while(Z){let C=[];C.startIndex=d.lastIndex-Z[0].length;let W=Z.length;for(let w=0;w{var rd1=nd1(),No4={allowBooleanAttributes:!1,unpairedTags:[]};Mo4.validate=function(I,d){d=Object.assign({},No4,d);let G=[],Z=!1,C=!1;if(I[0]==="\uFEFF")I=I.substr(1);for(let W=0;W"&&I[W]!==" "&&I[W]!=="\t"&&I[W]!==` +`&&I[W]!=="\r";W++)A+=I[W];if(A=A.trim(),A[A.length-1]==="/")A=A.substring(0,A.length-1),W--;if(!Eo4(A)){let _;if(A.trim().length===0)_="Invalid space after '<'.";else _="Tag '"+A+"' is an invalid name.";return R6("InvalidTag",_,wd(I,W))}let V=fo4(I,W);if(V===!1)return R6("InvalidAttr","Attributes for '"+A+"' have open quote.",wd(I,W));let X=V.value;if(W=V.index,X[X.length-1]==="/"){let _=W-X.length;X=X.substring(0,X.length-1);let F=tV0(X,d);if(F===!0)Z=!0;else return R6(F.err.code,F.err.msg,wd(I,_+F.err.line))}else if(B)if(!V.tagClosed)return R6("InvalidTag","Closing tag '"+A+"' doesn't have proper closing.",wd(I,W));else if(X.trim().length>0)return R6("InvalidTag","Closing tag '"+A+"' can't have attributes or invalid starting.",wd(I,w));else{let _=G.pop();if(A!==_.tagName){let F=wd(I,_.tagStartPos);return R6("InvalidTag","Expected closing tag '"+_.tagName+"' (opened in line "+F.line+", col "+F.col+") instead of closing tag '"+A+"'.",wd(I,w))}if(G.length==0)C=!0}else{let _=tV0(X,d);if(_!==!0)return R6(_.err.code,_.err.msg,wd(I,W-X.length+_.err.line));if(C===!0)return R6("InvalidXml","Multiple possible root nodes found.",wd(I,W));else if(d.unpairedTags.indexOf(A)!==-1);else G.push({tagName:A,tagStartPos:w});Z=!0}for(W++;W0)return R6("InvalidXml","Invalid '"+JSON.stringify(G.map((W)=>W.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1});return!0};function sV0(I){return I===" "||I==="\t"||I===` +`||I==="\r"}function oV0(I,d){let G=d;for(;d5&&Z==="xml")return R6("InvalidXml","XML declaration allowed only at the start of the document.",wd(I,d));else if(I[d]=="?"&&I[d+1]==">"){d++;break}else continue}return d}function eV0(I,d){if(I.length>d+5&&I[d+1]==="-"&&I[d+2]==="-"){for(d+=3;d"){d+=2;break}}else if(I.length>d+8&&I[d+1]==="D"&&I[d+2]==="O"&&I[d+3]==="C"&&I[d+4]==="T"&&I[d+5]==="Y"&&I[d+6]==="P"&&I[d+7]==="E"){let G=1;for(d+=8;d"){if(G--,G===0)break}}else if(I.length>d+9&&I[d+1]==="["&&I[d+2]==="C"&&I[d+3]==="D"&&I[d+4]==="A"&&I[d+5]==="T"&&I[d+6]==="A"&&I[d+7]==="["){for(d+=8;d"){d+=2;break}}return d}var zo4='"',Qo4="'";function fo4(I,d){let G="",Z="",C=!1;for(;d"){if(Z===""){C=!0;break}}G+=I[d]}if(Z!=="")return!1;return{value:G,index:d,tagClosed:C}}var qo4=new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`,"g");function tV0(I,d){let G=rd1.getAllMatches(I,qo4),Z={};for(let C=0;C{var IX0={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(I,d){return d},attributeValueProcessor:function(I,d){return d},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1},Lo4=function(I){return Object.assign({},IX0,I)};yo4.buildOptions=Lo4;yo4.defaultOptions=IX0});var CX0=Y((Bt9,ZX0)=>{class GX0{constructor(I){this.tagname=I,this.child=[],this[":@"]={}}add(I,d){if(I==="__proto__")I="#__proto__";this.child.push({[I]:d})}addChild(I){if(I.tagname==="__proto__")I.tagname="#__proto__";if(I[":@"]&&Object.keys(I[":@"]).length>0)this.child.push({[I.tagname]:I.child,[":@"]:I[":@"]});else this.child.push({[I.tagname]:I.child})}}ZX0.exports=GX0});var wX0=Y((At9,WX0)=>{function uo4(I,d){let G={};if(I[d+3]==="O"&&I[d+4]==="C"&&I[d+5]==="T"&&I[d+6]==="Y"&&I[d+7]==="P"&&I[d+8]==="E"){d=d+9;let Z=1,C=!1,W=!1,w=!1,B="";for(;d"){if(w){if(I[d-1]==="-"&&I[d-2]==="-")w=!1,Z--}else{if(W)Oo4(B,G),W=!1;Z--}if(Z===0)break}else if(I[d]==="[")C=!0;else B+=I[d];if(Z!==0)throw new Error("Unclosed DOCTYPE")}else throw new Error("Invalid Tag instead of DOCTYPE");return{entities:G,i:d}}var To4=RegExp(`^\\s([a-zA-z0-0]+)[ ](['"])([^&]+)\\2`);function Oo4(I,d){let G=To4.exec(I);if(G)d[G[1]]={regx:RegExp(`&${G[1]};`,"g"),val:G[3]}}WX0.exports=uo4});var mc=Y((Vt9,BX0)=>{var mo4=/^[-+]?0x[a-fA-F0-9]+$/,lo4=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;if(!Number.parseInt&&window.parseInt)Number.parseInt=window.parseInt;if(!Number.parseFloat&&window.parseFloat)Number.parseFloat=window.parseFloat;var bo4={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};function ho4(I,d={}){if(d=Object.assign({},bo4,d),!I||typeof I!=="string")return I;let G=I.trim();if(d.skipLike!==void 0&&d.skipLike.test(G))return I;else if(d.hex&&mo4.test(G))return Number.parseInt(G,16);else{let Z=lo4.exec(G);if(Z){let C=Z[1],W=Z[2],w=jo4(Z[3]),B=Z[4]||Z[6];if(!d.leadingZeros&&W.length>0&&C&&G[2]!==".")return I;else if(!d.leadingZeros&&W.length>0&&!C&&G[1]!==".")return I;else{let A=Number(G),V=""+A;if(V.search(/[eE]/)!==-1)if(d.eNotation)return A;else return I;else if(B)if(d.eNotation)return A;else return I;else if(G.indexOf(".")!==-1)if(V==="0"&&w==="")return A;else if(V===w)return A;else if(C&&V==="-"+w)return A;else return I;if(W)if(w===V)return A;else if(C+w===V)return A;else return I;if(G===V)return A;else if(G===C+V)return A;return I}}else return I}}function jo4(I){if(I&&I.indexOf(".")!==-1){if(I=I.replace(/0+$/,""),I===".")I="0";else if(I[0]===".")I="0"+I;else if(I[I.length-1]===".")I=I.substr(0,I.length-1);return I}return I}BX0.exports=ho4});var XX0=Y((Yt9,VX0)=>{var ed1=nd1(),PL=CX0(),ko4=wX0(),xo4=mc(),Xt9="<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,ed1.nameRegexp);class AX0{constructor(I){this.options=I,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"}},this.addExternalEntities=co4,this.parseXml=ao4,this.parseTextData=po4,this.resolveNameSpace=io4,this.buildAttributesMap=ro4,this.isItStopNode=eo4,this.replaceEntitiesValue=so4,this.readStopNodeData=Ie4,this.saveTextToParentTag=oo4}}function co4(I){let d=Object.keys(I);for(let G=0;G0){if(!w)I=this.replaceEntitiesValue(I);let B=this.options.tagValueProcessor(d,I,G,C,W);if(B===null||B===void 0)return I;else if(typeof B!==typeof I||B!==I)return B;else if(this.options.trimValues)return od1(I,this.options.parseTagValue,this.options.numberParseOptions);else if(I.trim()===I)return od1(I,this.options.parseTagValue,this.options.numberParseOptions);else return I}}}function io4(I){if(this.options.removeNSPrefix){let d=I.split(":"),G=I.charAt(0)==="/"?"/":"";if(d[0]==="xmlns")return"";if(d.length===2)I=G+d[1]}return I}var no4=new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`,"gm");function ro4(I,d){if(!this.options.ignoreAttributes&&typeof I==="string"){let G=ed1.getAllMatches(I,no4),Z=G.length,C={};for(let W=0;W",W,"Closing Tag is not closed."),A=I.substring(W+2,B).trim();if(this.options.removeNSPrefix){let V=A.indexOf(":");if(V!==-1)A=A.substr(V+1)}if(this.options.transformTagName)A=this.options.transformTagName(A);if(G)Z=this.saveTextToParentTag(Z,G,C);C=C.substr(0,C.lastIndexOf(".")),G=this.tagsNodeStack.pop(),Z="",W=B}else if(I[W+1]==="?"){let B=sd1(I,W,!1,"?>");if(!B)throw new Error("Pi Tag is not closed.");if(Z=this.saveTextToParentTag(Z,G,C),this.options.ignoreDeclaration&&B.tagName==="?xml"||this.options.ignorePiTags);else{let A=new PL(B.tagName);if(A.add(this.options.textNodeName,""),B.tagName!==B.tagExp&&B.attrExpPresent)A[":@"]=this.buildAttributesMap(B.tagExp,C);G.addChild(A)}W=B.closeIndex+1}else if(I.substr(W+1,3)==="!--"){let B=sg(I,"-->",W+4,"Comment is not closed.");if(this.options.commentPropName){let A=I.substring(W+4,B-2);Z=this.saveTextToParentTag(Z,G,C),G.add(this.options.commentPropName,[{[this.options.textNodeName]:A}])}W=B}else if(I.substr(W+1,2)==="!D"){let B=ko4(I,W);this.docTypeEntities=B.entities,W=B.i}else if(I.substr(W+1,2)==="!["){let B=sg(I,"]]>",W,"CDATA is not closed.")-2,A=I.substring(W+9,B);if(Z=this.saveTextToParentTag(Z,G,C),this.options.cdataPropName)G.add(this.options.cdataPropName,[{[this.options.textNodeName]:A}]);else{let V=this.parseTextData(A,G.tagname,C,!0,!1,!0);if(V==null)V="";G.add(this.options.textNodeName,V)}W=B+2}else{let B=sd1(I,W,this.options.removeNSPrefix),A=B.tagName,V=B.tagExp,X=B.attrExpPresent,_=B.closeIndex;if(this.options.transformTagName)A=this.options.transformTagName(A);if(G&&Z){if(G.tagname!=="!xml")Z=this.saveTextToParentTag(Z,G,C,!1)}if(A!==d.tagname)C+=C?"."+A:A;let F=G;if(F&&this.options.unpairedTags.indexOf(F.tagname)!==-1)G=this.tagsNodeStack.pop();if(this.isItStopNode(this.options.stopNodes,C,A)){let g="";if(V.length>0&&V.lastIndexOf("/")===V.length-1)W=B.closeIndex;else if(this.options.unpairedTags.indexOf(A)!==-1)W=B.closeIndex;else{let K=this.readStopNodeData(I,A,_+1);if(!K)throw new Error(`Unexpected end of ${A}`);W=K.i,g=K.tagContent}let J=new PL(A);if(A!==V&&X)J[":@"]=this.buildAttributesMap(V,C);if(g)g=this.parseTextData(g,A,C,!0,X,!0,!0);C=C.substr(0,C.lastIndexOf(".")),J.add(this.options.textNodeName,g),G.addChild(J)}else{if(V.length>0&&V.lastIndexOf("/")===V.length-1){if(A[A.length-1]==="/")A=A.substr(0,A.length-1),V=A;else V=V.substr(0,V.length-1);if(this.options.transformTagName)A=this.options.transformTagName(A);let g=new PL(A);if(A!==V&&X)g[":@"]=this.buildAttributesMap(V,C);C=C.substr(0,C.lastIndexOf(".")),G.addChild(g)}else{let g=new PL(A);if(this.tagsNodeStack.push(G),A!==V&&X)g[":@"]=this.buildAttributesMap(V,C);G.addChild(g),G=g}Z="",W=_}}else Z+=I[W];return d.child},so4=function(I){if(this.options.processEntities){for(let d in this.docTypeEntities){let G=this.docTypeEntities[d];I=I.replace(G.regx,G.val)}for(let d in this.lastEntities){let G=this.lastEntities[d];I=I.replace(G.regex,G.val)}if(this.options.htmlEntities)for(let d in this.htmlEntities){let G=this.htmlEntities[d];I=I.replace(G.regex,G.val)}I=I.replace(this.ampEntity.regex,this.ampEntity.val)}return I};function oo4(I,d,G,Z){if(I){if(Z===void 0)Z=Object.keys(d.child).length===0;if(I=this.parseTextData(I,d.tagname,G,!1,d[":@"]?Object.keys(d[":@"]).length!==0:!1,Z),I!==void 0&&I!=="")d.add(this.options.textNodeName,I);I=""}return I}function eo4(I,d,G){let Z="*."+G;for(let C in I){let W=I[C];if(Z===W||d===W)return!0}return!1}function to4(I,d,G=">"){let Z,C="";for(let W=d;W",G,`${d} is not closed`);if(I.substring(G+2,W).trim()===d){if(C--,C===0)return{tagContent:I.substring(Z,G),i:W}}G=W}else if(I[G+1]==="?")G=sg(I,"?>",G+1,"StopNode is not closed.");else if(I.substr(G+1,3)==="!--")G=sg(I,"-->",G+3,"StopNode is not closed.");else if(I.substr(G+1,2)==="![")G=sg(I,"]]>",G,"StopNode is not closed.")-2;else{let W=sd1(I,G,">");if(W){if((W&&W.tagName)===d&&W.tagExp[W.tagExp.length-1]!=="/")C++;G=W.closeIndex}}}function od1(I,d,G){if(d&&typeof I==="string"){let Z=I.trim();if(Z==="true")return!0;else if(Z==="false")return!1;else return xo4(I,G)}else if(ed1.isExist(I))return I;else return""}VX0.exports=AX0});var _X0=Y((We4)=>{function de4(I,d){return YX0(I,d)}function YX0(I,d,G){let Z,C={};for(let W=0;W0)C[d.textNodeName]=Z}else if(Z!==void 0)C[d.textNodeName]=Z;return C}function Ge4(I){let d=Object.keys(I);for(let G=0;G{var{buildOptions:Be4}=dX0(),Ae4=XX0(),{prettify:Ve4}=_X0(),Xe4=ad1();class DX0{constructor(I){this.externalEntities={},this.options=Be4(I)}parse(I,d){if(typeof I==="string");else if(I.toString)I=I.toString();else throw new Error("XML data is accepted in String or Bytes[] form.");if(d){if(d===!0)d={};let C=Xe4.validate(I,d);if(C!==!0)throw Error(`${C.err.msg}:${C.err.line}:${C.err.col}`)}let G=new Ae4(this.options);G.addExternalEntities(this.externalEntities);let Z=G.parseXml(I);if(this.options.preserveOrder||Z===void 0)return Z;else return Ve4(Z,this.options)}addEntity(I,d){if(d.indexOf("&")!==-1)throw new Error("Entity value can't have '&'");else if(I.indexOf("&")!==-1||I.indexOf(";")!==-1)throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '");else if(d==="&")throw new Error("An entity with value '&' is not permitted");else this.externalEntities[I]=d}}HX0.exports=DX0});var zX0=Y((Ht9,NX0)=>{function Ye4(I,d){let G="";if(d.format&&d.indentBy.length>0)G=` +`;return JX0(I,d,"",G)}function JX0(I,d,G,Z){let C="",W=!1;for(let w=0;w`,W=!1;continue}else if(A===d.commentPropName){C+=Z+``,W=!0;continue}else if(A[0]==="?"){let J=gX0(B[":@"],d),K=A==="?xml"?"":Z,Q=B[A][0][d.textNodeName];Q=Q.length!==0?" "+Q:"",C+=K+`<${A}${Q}${J}?>`,W=!0;continue}let X=Z;if(X!=="")X+=d.indentBy;let _=gX0(B[":@"],d),F=Z+`<${A}${_}`,g=JX0(B[A],d,V,X);if(d.unpairedTags.indexOf(A)!==-1)if(d.suppressUnpairedNode)C+=F+">";else C+=F+"/>";else if((!g||g.length===0)&&d.suppressEmptyNode)C+=F+"/>";else if(g&&g.endsWith(">"))C+=F+`>${g}${Z}`;else{if(C+=F+">",g&&Z!==""&&(g.includes("/>")||g.includes("`}W=!0}return C}function _e4(I){let d=Object.keys(I);for(let G=0;G0&&d.processEntities)for(let G=0;G{var He4=zX0(),Fe4={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(I,d){return d},attributeValueProcessor:function(I,d){return d},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[]};function O_(I){if(this.options=Object.assign({},Fe4,I),this.options.ignoreAttributes||this.options.attributesGroupName)this.isAttribute=function(){return!1};else this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Ke4;if(this.processTextOrObjNode=ge4,this.options.format)this.indentate=Je4,this.tagEndChar=`> +`,this.newLine=` +`;else this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""}O_.prototype.build=function(I){if(this.options.preserveOrder)return He4(I,this.options);else{if(Array.isArray(I)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1)I={[this.options.arrayNodeName]:I};return this.j2x(I,0).val}};O_.prototype.j2x=function(I,d){let G="",Z="";for(let C in I)if(typeof I[C]==="undefined");else if(I[C]===null)if(C[0]==="?")Z+=this.indentate(d)+"<"+C+"?"+this.tagEndChar;else Z+=this.indentate(d)+"<"+C+"/"+this.tagEndChar;else if(I[C]instanceof Date)Z+=this.buildTextValNode(I[C],C,"",d);else if(typeof I[C]!=="object"){let W=this.isAttribute(C);if(W)G+=this.buildAttrPairStr(W,""+I[C]);else if(C===this.options.textNodeName){let w=this.options.tagValueProcessor(C,""+I[C]);Z+=this.replaceEntitiesValue(w)}else Z+=this.buildTextValNode(I[C],C,"",d)}else if(Array.isArray(I[C])){let W=I[C].length;for(let w=0;w"+I+C;else if(this.options.commentPropName!==!1&&d===this.options.commentPropName&&W.length===0)return this.indentate(Z)+``+this.newLine;else return this.indentate(Z)+"<"+d+G+W+this.tagEndChar+I+this.indentate(Z)+C}};O_.prototype.closeTag=function(I){let d="";if(this.options.unpairedTags.indexOf(I)!==-1){if(!this.options.suppressUnpairedNode)d="/"}else if(this.options.suppressEmptyNode)d="/";else d=`>`+this.newLine;else if(this.options.commentPropName!==!1&&d===this.options.commentPropName)return this.indentate(Z)+``+this.newLine;else if(d[0]==="?")return this.indentate(Z)+"<"+d+G+"?"+this.tagEndChar;else{let C=this.options.tagValueProcessor(d,I);if(C=this.replaceEntitiesValue(C),C==="")return this.indentate(Z)+"<"+d+G+this.closeTag(d)+this.tagEndChar;else return this.indentate(Z)+"<"+d+G+">"+C+"0&&this.options.processEntities)for(let d=0;d{var Ne4=ad1(),ze4=FX0(),Qe4=fX0();qX0.exports={XMLParser:ze4,XMLValidator:Ne4,XMLBuilder:Qe4}});var fV=Y((MX0)=>{Object.defineProperty(MX0,"__esModule",{value:!0});MX0.de_GetSessionTokenCommand=MX0.de_GetFederationTokenCommand=MX0.de_GetCallerIdentityCommand=MX0.de_GetAccessKeyInfoCommand=MX0.de_DecodeAuthorizationMessageCommand=MX0.de_AssumeRoleWithWebIdentityCommand=MX0.de_AssumeRoleWithSAMLCommand=MX0.de_AssumeRoleCommand=MX0.se_GetSessionTokenCommand=MX0.se_GetFederationTokenCommand=MX0.se_GetCallerIdentityCommand=MX0.se_GetAccessKeyInfoCommand=MX0.se_DecodeAuthorizationMessageCommand=MX0.se_AssumeRoleWithWebIdentityCommand=MX0.se_AssumeRoleWithSAMLCommand=MX0.se_AssumeRoleCommand=void 0;var e2=v0(),fe4=Oc(),qe4=RX0(),m_=T_(),Re4=uc(),Ue4=async(I,d)=>{let G=h_,Z;return Z=k_({...oe4(I,d),Action:"AssumeRole",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_AssumeRoleCommand=Ue4;var ve4=async(I,d)=>{let G=h_,Z;return Z=k_({...ee4(I,d),Action:"AssumeRoleWithSAML",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_AssumeRoleWithSAMLCommand=ve4;var Ee4=async(I,d)=>{let G=h_,Z;return Z=k_({...te4(I,d),Action:"AssumeRoleWithWebIdentity",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_AssumeRoleWithWebIdentityCommand=Ee4;var Me4=async(I,d)=>{let G=h_,Z;return Z=k_({...It4(I,d),Action:"DecodeAuthorizationMessage",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_DecodeAuthorizationMessageCommand=Me4;var Se4=async(I,d)=>{let G=h_,Z;return Z=k_({...dt4(I,d),Action:"GetAccessKeyInfo",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_GetAccessKeyInfoCommand=Se4;var Le4=async(I,d)=>{let G=h_,Z;return Z=k_({...Gt4(I,d),Action:"GetCallerIdentity",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_GetCallerIdentityCommand=Le4;var ye4=async(I,d)=>{let G=h_,Z;return Z=k_({...Zt4(I,d),Action:"GetFederationToken",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_GetFederationTokenCommand=ye4;var Pe4=async(I,d)=>{let G=h_,Z;return Z=k_({...Ct4(I,d),Action:"GetSessionToken",Version:"2011-06-15"}),b_(d,G,"/",void 0,Z)};MX0.se_GetSessionTokenCommand=Pe4;var $e4=async(I,d)=>{if(I.statusCode>=300)return ue4(I,d);let G=await QV(I.body,d),Z={};return Z=At4(G.AssumeRoleResult,d),{$metadata:y7(I),...Z}};MX0.de_AssumeRoleCommand=$e4;var ue4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await td1(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await lc(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await bc(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await $L(G,d);default:let C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})}},Te4=async(I,d)=>{if(I.statusCode>=300)return Oe4(I,d);let G=await QV(I.body,d),Z={};return Z=Vt4(G.AssumeRoleWithSAMLResult,d),{$metadata:y7(I),...Z}};MX0.de_AssumeRoleWithSAMLCommand=Te4;var Oe4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await td1(G,d);case"IDPRejectedClaim":case"com.amazonaws.sts#IDPRejectedClaimException":throw await UX0(G,d);case"InvalidIdentityToken":case"com.amazonaws.sts#InvalidIdentityTokenException":throw await vX0(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await lc(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await bc(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await $L(G,d);default:let C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})}},me4=async(I,d)=>{if(I.statusCode>=300)return le4(I,d);let G=await QV(I.body,d),Z={};return Z=Xt4(G.AssumeRoleWithWebIdentityResult,d),{$metadata:y7(I),...Z}};MX0.de_AssumeRoleWithWebIdentityCommand=me4;var le4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await td1(G,d);case"IDPCommunicationError":case"com.amazonaws.sts#IDPCommunicationErrorException":throw await ae4(G,d);case"IDPRejectedClaim":case"com.amazonaws.sts#IDPRejectedClaimException":throw await UX0(G,d);case"InvalidIdentityToken":case"com.amazonaws.sts#InvalidIdentityTokenException":throw await vX0(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await lc(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await bc(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await $L(G,d);default:let C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})}},be4=async(I,d)=>{if(I.statusCode>=300)return he4(I,d);let G=await QV(I.body,d),Z={};return Z=Yt4(G.DecodeAuthorizationMessageResult,d),{$metadata:y7(I),...Z}};MX0.de_DecodeAuthorizationMessageCommand=be4;var he4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body);switch(Z){case"InvalidAuthorizationMessageException":case"com.amazonaws.sts#InvalidAuthorizationMessageException":throw await se4(G,d);default:let C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})}},je4=async(I,d)=>{if(I.statusCode>=300)return ke4(I,d);let G=await QV(I.body,d),Z={};return Z=Ht4(G.GetAccessKeyInfoResult,d),{$metadata:y7(I),...Z}};MX0.de_GetAccessKeyInfoCommand=je4;var ke4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body),C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})},xe4=async(I,d)=>{if(I.statusCode>=300)return ce4(I,d);let G=await QV(I.body,d),Z={};return Z=Ft4(G.GetCallerIdentityResult,d),{$metadata:y7(I),...Z}};MX0.de_GetCallerIdentityCommand=xe4;var ce4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body),C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})},pe4=async(I,d)=>{if(I.statusCode>=300)return ie4(I,d);let G=await QV(I.body,d),Z={};return Z=gt4(G.GetFederationTokenResult,d),{$metadata:y7(I),...Z}};MX0.de_GetFederationTokenCommand=pe4;var ie4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body);switch(Z){case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await lc(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await bc(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await $L(G,d);default:let C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})}},ne4=async(I,d)=>{if(I.statusCode>=300)return re4(I,d);let G=await QV(I.body,d),Z={};return Z=Jt4(G.GetSessionTokenResult,d),{$metadata:y7(I),...Z}};MX0.de_GetSessionTokenCommand=ne4;var re4=async(I,d)=>{let G={...I,body:await j_(I.body,d)},Z=x_(I,G.body);switch(Z){case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await $L(G,d);default:let C=G.body;return l_({output:I,parsedBody:C.Error,errorCode:Z})}},td1=async(I,d)=>{let G=I.body,Z=_t4(G.Error,d),C=new m_.ExpiredTokenException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},ae4=async(I,d)=>{let G=I.body,Z=Kt4(G.Error,d),C=new m_.IDPCommunicationErrorException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},UX0=async(I,d)=>{let G=I.body,Z=Nt4(G.Error,d),C=new m_.IDPRejectedClaimException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},se4=async(I,d)=>{let G=I.body,Z=zt4(G.Error,d),C=new m_.InvalidAuthorizationMessageException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},vX0=async(I,d)=>{let G=I.body,Z=Qt4(G.Error,d),C=new m_.InvalidIdentityTokenException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},lc=async(I,d)=>{let G=I.body,Z=ft4(G.Error,d),C=new m_.MalformedPolicyDocumentException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},bc=async(I,d)=>{let G=I.body,Z=qt4(G.Error,d),C=new m_.PackedPolicyTooLargeException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},$L=async(I,d)=>{let G=I.body,Z=Rt4(G.Error,d),C=new m_.RegionDisabledException({$metadata:y7(I),...Z});return e2.decorateServiceException(C,G)},oe4=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.RoleSessionName!=null)G.RoleSessionName=I.RoleSessionName;if(I.PolicyArns!=null){let Z=hc(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.Tags!=null){let Z=EX0(I.Tags,d);if(I.Tags?.length===0)G.Tags=[];Object.entries(Z).forEach(([C,W])=>{let w=`Tags.${C}`;G[w]=W})}if(I.TransitiveTagKeys!=null){let Z=Bt4(I.TransitiveTagKeys,d);if(I.TransitiveTagKeys?.length===0)G.TransitiveTagKeys=[];Object.entries(Z).forEach(([C,W])=>{let w=`TransitiveTagKeys.${C}`;G[w]=W})}if(I.ExternalId!=null)G.ExternalId=I.ExternalId;if(I.SerialNumber!=null)G.SerialNumber=I.SerialNumber;if(I.TokenCode!=null)G.TokenCode=I.TokenCode;if(I.SourceIdentity!=null)G.SourceIdentity=I.SourceIdentity;return G},ee4=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.PrincipalArn!=null)G.PrincipalArn=I.PrincipalArn;if(I.SAMLAssertion!=null)G.SAMLAssertion=I.SAMLAssertion;if(I.PolicyArns!=null){let Z=hc(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;return G},te4=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.RoleSessionName!=null)G.RoleSessionName=I.RoleSessionName;if(I.WebIdentityToken!=null)G.WebIdentityToken=I.WebIdentityToken;if(I.ProviderId!=null)G.ProviderId=I.ProviderId;if(I.PolicyArns!=null){let Z=hc(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;return G},It4=(I,d)=>{let G={};if(I.EncodedMessage!=null)G.EncodedMessage=I.EncodedMessage;return G},dt4=(I,d)=>{let G={};if(I.AccessKeyId!=null)G.AccessKeyId=I.AccessKeyId;return G},Gt4=(I,d)=>{return{}},Zt4=(I,d)=>{let G={};if(I.Name!=null)G.Name=I.Name;if(I.Policy!=null)G.Policy=I.Policy;if(I.PolicyArns!=null){let Z=hc(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.Tags!=null){let Z=EX0(I.Tags,d);if(I.Tags?.length===0)G.Tags=[];Object.entries(Z).forEach(([C,W])=>{let w=`Tags.${C}`;G[w]=W})}return G},Ct4=(I,d)=>{let G={};if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.SerialNumber!=null)G.SerialNumber=I.SerialNumber;if(I.TokenCode!=null)G.TokenCode=I.TokenCode;return G},hc=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=Wt4(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},Wt4=(I,d)=>{let G={};if(I.arn!=null)G.arn=I.arn;return G},wt4=(I,d)=>{let G={};if(I.Key!=null)G.Key=I.Key;if(I.Value!=null)G.Value=I.Value;return G},Bt4=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;G[`member.${Z}`]=C,Z++}return G},EX0=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=wt4(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},IG1=(I,d)=>{let G={};if(I.AssumedRoleId!==void 0)G.AssumedRoleId=e2.expectString(I.AssumedRoleId);if(I.Arn!==void 0)G.Arn=e2.expectString(I.Arn);return G},At4=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=uL(I.Credentials,d);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=IG1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=e2.strictParseInt32(I.PackedPolicySize);if(I.SourceIdentity!==void 0)G.SourceIdentity=e2.expectString(I.SourceIdentity);return G},Vt4=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=uL(I.Credentials,d);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=IG1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=e2.strictParseInt32(I.PackedPolicySize);if(I.Subject!==void 0)G.Subject=e2.expectString(I.Subject);if(I.SubjectType!==void 0)G.SubjectType=e2.expectString(I.SubjectType);if(I.Issuer!==void 0)G.Issuer=e2.expectString(I.Issuer);if(I.Audience!==void 0)G.Audience=e2.expectString(I.Audience);if(I.NameQualifier!==void 0)G.NameQualifier=e2.expectString(I.NameQualifier);if(I.SourceIdentity!==void 0)G.SourceIdentity=e2.expectString(I.SourceIdentity);return G},Xt4=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=uL(I.Credentials,d);if(I.SubjectFromWebIdentityToken!==void 0)G.SubjectFromWebIdentityToken=e2.expectString(I.SubjectFromWebIdentityToken);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=IG1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=e2.strictParseInt32(I.PackedPolicySize);if(I.Provider!==void 0)G.Provider=e2.expectString(I.Provider);if(I.Audience!==void 0)G.Audience=e2.expectString(I.Audience);if(I.SourceIdentity!==void 0)G.SourceIdentity=e2.expectString(I.SourceIdentity);return G},uL=(I,d)=>{let G={};if(I.AccessKeyId!==void 0)G.AccessKeyId=e2.expectString(I.AccessKeyId);if(I.SecretAccessKey!==void 0)G.SecretAccessKey=e2.expectString(I.SecretAccessKey);if(I.SessionToken!==void 0)G.SessionToken=e2.expectString(I.SessionToken);if(I.Expiration!==void 0)G.Expiration=e2.expectNonNull(e2.parseRfc3339DateTimeWithOffset(I.Expiration));return G},Yt4=(I,d)=>{let G={};if(I.DecodedMessage!==void 0)G.DecodedMessage=e2.expectString(I.DecodedMessage);return G},_t4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},Dt4=(I,d)=>{let G={};if(I.FederatedUserId!==void 0)G.FederatedUserId=e2.expectString(I.FederatedUserId);if(I.Arn!==void 0)G.Arn=e2.expectString(I.Arn);return G},Ht4=(I,d)=>{let G={};if(I.Account!==void 0)G.Account=e2.expectString(I.Account);return G},Ft4=(I,d)=>{let G={};if(I.UserId!==void 0)G.UserId=e2.expectString(I.UserId);if(I.Account!==void 0)G.Account=e2.expectString(I.Account);if(I.Arn!==void 0)G.Arn=e2.expectString(I.Arn);return G},gt4=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=uL(I.Credentials,d);if(I.FederatedUser!==void 0)G.FederatedUser=Dt4(I.FederatedUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=e2.strictParseInt32(I.PackedPolicySize);return G},Jt4=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=uL(I.Credentials,d);return G},Kt4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},Nt4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},zt4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},Qt4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},ft4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},qt4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},Rt4=(I,d)=>{let G={};if(I.message!==void 0)G.message=e2.expectString(I.message);return G},y7=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),Ut4=(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return Promise.resolve(I);return d.streamCollector(I)||Promise.resolve(new Uint8Array)},vt4=(I,d)=>Ut4(I,d).then((G)=>d.utf8Encoder(G)),l_=e2.withBaseException(Re4.STSServiceException),b_=async(I,d,G,Z,C)=>{let{hostname:W,protocol:w="https",port:B,path:A}=await I.endpoint(),V={protocol:w,hostname:W,port:B,method:"POST",path:A.endsWith("/")?A.slice(0,-1)+G:A+G,headers:d};if(Z!==void 0)V.hostname=Z;if(C!==void 0)V.body=C;return new fe4.HttpRequest(V)},h_={"content-type":"application/x-www-form-urlencoded"},QV=(I,d)=>vt4(I,d).then((G)=>{if(G.length){let Z=new qe4.XMLParser({attributeNamePrefix:"",htmlEntities:!0,ignoreAttributes:!1,ignoreDeclaration:!0,parseTagValue:!1,trimValues:!1,tagValueProcessor:(A,V)=>V.trim()===""&&V.includes(` +`)?"":void 0});Z.addEntity("#xD","\r"),Z.addEntity("#10",` +`);let C=Z.parse(G),W="#text",w=Object.keys(C)[0],B=C[w];if(B[W])B[w]=B[W],delete B[W];return e2.getValueFromTextNode(B)}return{}}),j_=async(I,d)=>{let G=await QV(I,d);if(G.Error)G.Error.message=G.Error.message??G.Error.Message;return G},k_=(I)=>Object.entries(I).map(([d,G])=>e2.extendedEncodeURIComponent(d)+"="+e2.extendedEncodeURIComponent(G)).join("&"),x_=(I,d)=>{if(d.Error?.Code!==void 0)return d.Error.Code;if(I.statusCode==404)return"NotFound"}});var jc=Y((GG1)=>{Object.defineProperty(GG1,"__esModule",{value:!0});GG1.AssumeRoleCommand=GG1.$Command=void 0;var kt4=u2(),xt4=r2(),ct4=A9(),yX0=v0();Object.defineProperty(GG1,"$Command",{enumerable:!0,get:function(){return yX0.Command}});var pt4=T_(),LX0=fV();class dG1 extends yX0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(xt4.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(kt4.getEndpointPlugin(d,dG1.getEndpointParameterInstructions())),this.middlewareStack.use(ct4.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:pt4.AssumeRoleResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return LX0.se_AssumeRoleCommand(I,d)}deserialize(I,d){return LX0.de_AssumeRoleCommand(I,d)}}GG1.AssumeRoleCommand=dG1});var kc=Y((CG1)=>{Object.defineProperty(CG1,"__esModule",{value:!0});CG1.AssumeRoleWithWebIdentityCommand=CG1.$Command=void 0;var it4=u2(),nt4=r2(),TX0=v0();Object.defineProperty(CG1,"$Command",{enumerable:!0,get:function(){return TX0.Command}});var $X0=T_(),uX0=fV();class ZG1 extends TX0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(nt4.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(it4.getEndpointPlugin(d,ZG1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleWithWebIdentityCommand",inputFilterSensitiveLog:$X0.AssumeRoleWithWebIdentityRequestFilterSensitiveLog,outputFilterSensitiveLog:$X0.AssumeRoleWithWebIdentityResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return uX0.se_AssumeRoleWithWebIdentityCommand(I,d)}deserialize(I,d){return uX0.de_AssumeRoleWithWebIdentityCommand(I,d)}}CG1.AssumeRoleWithWebIdentityCommand=ZG1});var WG1=Y((bX0)=>{Object.defineProperty(bX0,"__esModule",{value:!0});bX0.decorateDefaultCredentialProvider=bX0.getDefaultRoleAssumerWithWebIdentity=bX0.getDefaultRoleAssumer=void 0;var rt4=jc(),at4=kc(),mX0="us-east-1",lX0=(I)=>{if(typeof I!=="function")return I===void 0?mX0:I;return async()=>{try{return await I()}catch(d){return mX0}}},st4=(I,d)=>{let G,Z;return async(C,W)=>{if(Z=C,!G){let{logger:B,region:A,requestHandler:V}=I;G=new d({logger:B,credentialDefaultProvider:()=>async()=>Z,region:lX0(A||I.region),...V?{requestHandler:V}:{}})}let{Credentials:w}=await G.send(new rt4.AssumeRoleCommand(W));if(!w||!w.AccessKeyId||!w.SecretAccessKey)throw new Error(`Invalid response from STS.assumeRole call with role ${W.RoleArn}`);return{accessKeyId:w.AccessKeyId,secretAccessKey:w.SecretAccessKey,sessionToken:w.SessionToken,expiration:w.Expiration}}};bX0.getDefaultRoleAssumer=st4;var ot4=(I,d)=>{let G;return async(Z)=>{if(!G){let{logger:W,region:w,requestHandler:B}=I;G=new d({logger:W,region:lX0(w||I.region),...B?{requestHandler:B}:{}})}let{Credentials:C}=await G.send(new at4.AssumeRoleWithWebIdentityCommand(Z));if(!C||!C.AccessKeyId||!C.SecretAccessKey)throw new Error(`Invalid response from STS.assumeRoleWithWebIdentity call with role ${Z.RoleArn}`);return{accessKeyId:C.AccessKeyId,secretAccessKey:C.SecretAccessKey,sessionToken:C.SessionToken,expiration:C.Expiration}}};bX0.getDefaultRoleAssumerWithWebIdentity=ot4;var et4=(I)=>(d)=>I({roleAssumer:bX0.getDefaultRoleAssumer(d,d.stsClientCtor),roleAssumerWithWebIdentity:bX0.getDefaultRoleAssumerWithWebIdentity(d,d.stsClientCtor),...d});bX0.decorateDefaultCredentialProvider=et4});var aX0=Y((xX0)=>{Object.defineProperty(xX0,"__esModule",{value:!0});xX0.fromEnv=xX0.ENV_EXPIRATION=xX0.ENV_SESSION=xX0.ENV_SECRET=xX0.ENV_KEY=void 0;var tt4=W4();xX0.ENV_KEY="AWS_ACCESS_KEY_ID";xX0.ENV_SECRET="AWS_SECRET_ACCESS_KEY";xX0.ENV_SESSION="AWS_SESSION_TOKEN";xX0.ENV_EXPIRATION="AWS_CREDENTIAL_EXPIRATION";var I15=()=>async()=>{let I=process.env[xX0.ENV_KEY],d=process.env[xX0.ENV_SECRET],G=process.env[xX0.ENV_SESSION],Z=process.env[xX0.ENV_EXPIRATION];if(I&&d)return{accessKeyId:I,secretAccessKey:d,...G&&{sessionToken:G},...Z&&{expiration:new Date(Z)}};throw new tt4.CredentialsProviderError("Unable to find environment variable credentials.")};xX0.fromEnv=I15});var BG1=Y((wG1)=>{Object.defineProperty(wG1,"__esModule",{value:!0});var d15=x1();d15.__exportStar(aX0(),wG1)});var TL=Y((sX0)=>{Object.defineProperty(sX0,"__esModule",{value:!0});sX0.getHomeDir=void 0;var G15=B1("os"),Z15=B1("path"),C15=()=>{let{HOME:I,USERPROFILE:d,HOMEPATH:G,HOMEDRIVE:Z=`C:${Z15.sep}`}=process.env;if(I)return I;if(d)return d;if(G)return`${Z}${G}`;return G15.homedir()};sX0.getHomeDir=C15});var GY0=Y((eX0)=>{Object.defineProperty(eX0,"__esModule",{value:!0});eX0.getProfileName=eX0.DEFAULT_PROFILE=eX0.ENV_PROFILE=void 0;eX0.ENV_PROFILE="AWS_PROFILE";eX0.DEFAULT_PROFILE="default";var W15=(I)=>I.profile||process.env[eX0.ENV_PROFILE]||eX0.DEFAULT_PROFILE;eX0.getProfileName=W15});var AG1=Y((ZY0)=>{Object.defineProperty(ZY0,"__esModule",{value:!0});ZY0.getSSOTokenFilepath=void 0;var w15=B1("crypto"),B15=B1("path"),A15=TL(),V15=(I)=>{let G=w15.createHash("sha1").update(I).digest("hex");return B15.join(A15.getHomeDir(),".aws","sso","cache",`${G}.json`)};ZY0.getSSOTokenFilepath=V15});var BY0=Y((WY0)=>{Object.defineProperty(WY0,"__esModule",{value:!0});WY0.getSSOTokenFromFile=void 0;var X15=B1("fs"),Y15=AG1(),{readFile:_15}=X15.promises,D15=async(I)=>{let d=Y15.getSSOTokenFilepath(I),G=await _15(d,"utf8");return JSON.parse(G)};WY0.getSSOTokenFromFile=D15});var VG1=Y((AY0)=>{Object.defineProperty(AY0,"__esModule",{value:!0});AY0.getConfigFilepath=AY0.ENV_CONFIG_PATH=void 0;var H15=B1("path"),F15=TL();AY0.ENV_CONFIG_PATH="AWS_CONFIG_FILE";var g15=()=>process.env[AY0.ENV_CONFIG_PATH]||H15.join(F15.getHomeDir(),".aws","config");AY0.getConfigFilepath=g15});var HY0=Y((YY0)=>{Object.defineProperty(YY0,"__esModule",{value:!0});YY0.getCredentialsFilepath=YY0.ENV_CREDENTIALS_PATH=void 0;var J15=B1("path"),K15=TL();YY0.ENV_CREDENTIALS_PATH="AWS_SHARED_CREDENTIALS_FILE";var N15=()=>process.env[YY0.ENV_CREDENTIALS_PATH]||J15.join(K15.getHomeDir(),".aws","credentials");YY0.getCredentialsFilepath=N15});var KY0=Y((gY0)=>{Object.defineProperty(gY0,"__esModule",{value:!0});gY0.getProfileData=void 0;var FY0=/^profile\s(["'])?([^\1]+)\1$/,z15=(I)=>Object.entries(I).filter(([d])=>FY0.test(d)).reduce((d,[G,Z])=>({...d,[FY0.exec(G)[2]]:Z}),{...I.default&&{default:I.default}});gY0.getProfileData=z15});var XG1=Y((NY0)=>{Object.defineProperty(NY0,"__esModule",{value:!0});NY0.parseIni=void 0;var Q15=["__proto__","profile __proto__"],f15=(I)=>{let d={},G;for(let Z of I.split(/\r?\n/))if(Z=Z.split(/(^|\s)[;#]/)[0].trim(),Z[0]==="["&&Z[Z.length-1]==="]"){if(G=Z.substring(1,Z.length-1),Q15.includes(G))throw new Error(`Found invalid profile name "${G}"`)}else if(G){let W=Z.indexOf("="),w=0,B=Z.length-1;if(W!==-1&&W!==0&&W!==B){let[V,X]=[Z.substring(0,W).trim(),Z.substring(W+1).trim()];d[G]=d[G]||{},d[G][V]=X}}return d};NY0.parseIni=f15});var _G1=Y((QY0)=>{Object.defineProperty(QY0,"__esModule",{value:!0});QY0.slurpFile=void 0;var q15=B1("fs"),{readFile:R15}=q15.promises,YG1={},U15=(I,d)=>{if(!YG1[I]||(d===null||d===void 0?void 0:d.ignoreCache))YG1[I]=R15(I,"utf8");return YG1[I]};QY0.slurpFile=U15});var DG1=Y((vY0)=>{Object.defineProperty(vY0,"__esModule",{value:!0});vY0.loadSharedConfigFiles=void 0;var v15=VG1(),E15=HY0(),M15=KY0(),qY0=XG1(),RY0=_G1(),UY0=()=>({}),S15=async(I={})=>{let{filepath:d=E15.getCredentialsFilepath(),configFilepath:G=v15.getConfigFilepath()}=I,Z=await Promise.all([RY0.slurpFile(G,{ignoreCache:I.ignoreCache}).then(qY0.parseIni).then(M15.getProfileData).catch(UY0),RY0.slurpFile(d,{ignoreCache:I.ignoreCache}).then(qY0.parseIni).catch(UY0)]);return{configFile:Z[0],credentialsFile:Z[1]}};vY0.loadSharedConfigFiles=S15});var yY0=Y((SY0)=>{Object.defineProperty(SY0,"__esModule",{value:!0});SY0.getSsoSessionData=void 0;var MY0=/^sso-session\s(["'])?([^\1]+)\1$/,L15=(I)=>Object.entries(I).filter(([d])=>MY0.test(d)).reduce((d,[G,Z])=>({...d,[MY0.exec(G)[2]]:Z}),{});SY0.getSsoSessionData=L15});var uY0=Y((PY0)=>{Object.defineProperty(PY0,"__esModule",{value:!0});PY0.loadSsoSessionData=void 0;var y15=VG1(),P15=yY0(),$15=XG1(),u15=_G1(),T15=()=>({}),O15=async(I={})=>{var d;return u15.slurpFile((d=I.configFilepath)!==null&&d!==void 0?d:y15.getConfigFilepath()).then($15.parseIni).then(P15.getSsoSessionData).catch(T15)};PY0.loadSsoSessionData=O15});var mY0=Y((TY0)=>{Object.defineProperty(TY0,"__esModule",{value:!0});TY0.mergeConfigFiles=void 0;var m15=(...I)=>{let d={};for(let G of I)for(let[Z,C]of Object.entries(G))if(d[Z]!==void 0)Object.assign(d[Z],C);else d[Z]=C;return d};TY0.mergeConfigFiles=m15});var hY0=Y((lY0)=>{Object.defineProperty(lY0,"__esModule",{value:!0});lY0.parseKnownFiles=void 0;var l15=DG1(),b15=mY0(),h15=async(I)=>{let d=await l15.loadSharedConfigFiles(I);return b15.mergeConfigFiles(d.configFile,d.credentialsFile)};lY0.parseKnownFiles=h15});var kY0=Y((jY0)=>{Object.defineProperty(jY0,"__esModule",{value:!0})});var K8=Y((ow)=>{Object.defineProperty(ow,"__esModule",{value:!0});var c_=x1();c_.__exportStar(TL(),ow);c_.__exportStar(GY0(),ow);c_.__exportStar(AG1(),ow);c_.__exportStar(BY0(),ow);c_.__exportStar(DG1(),ow);c_.__exportStar(uY0(),ow);c_.__exportStar(hY0(),ow);c_.__exportStar(kY0(),ow)});var xc=Y((xY0)=>{Object.defineProperty(xY0,"__esModule",{value:!0});xY0.httpRequest=void 0;var HG1=W4(),j15=B1("buffer"),k15=B1("http");function x15(I){return new Promise((d,G)=>{var Z;let C=k15.request({method:"GET",...I,hostname:(Z=I.hostname)===null||Z===void 0?void 0:Z.replace(/^\[(.+)\]$/,"$1")});C.on("error",(W)=>{G(Object.assign(new HG1.ProviderError("Unable to connect to instance metadata service"),W)),C.destroy()}),C.on("timeout",()=>{G(new HG1.ProviderError("TimeoutError from instance metadata service")),C.destroy()}),C.on("response",(W)=>{let{statusCode:w=400}=W;if(w<200||300<=w)G(Object.assign(new HG1.ProviderError("Error response received from instance metadata service"),{statusCode:w})),C.destroy();let B=[];W.on("data",(A)=>{B.push(A)}),W.on("end",()=>{d(j15.Buffer.concat(B)),C.destroy()})}),C.end()})}xY0.httpRequest=x15});var FG1=Y((pY0)=>{Object.defineProperty(pY0,"__esModule",{value:!0});pY0.fromImdsCredentials=pY0.isImdsCredentials=void 0;var c15=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.AccessKeyId==="string"&&typeof I.SecretAccessKey==="string"&&typeof I.Token==="string"&&typeof I.Expiration==="string";pY0.isImdsCredentials=c15;var p15=(I)=>({accessKeyId:I.AccessKeyId,secretAccessKey:I.SecretAccessKey,sessionToken:I.Token,expiration:new Date(I.Expiration)});pY0.fromImdsCredentials=p15});var cc=Y((nY0)=>{Object.defineProperty(nY0,"__esModule",{value:!0});nY0.providerConfigFromInit=nY0.DEFAULT_MAX_RETRIES=nY0.DEFAULT_TIMEOUT=void 0;nY0.DEFAULT_TIMEOUT=1000;nY0.DEFAULT_MAX_RETRIES=0;var n15=({maxRetries:I=nY0.DEFAULT_MAX_RETRIES,timeout:d=nY0.DEFAULT_TIMEOUT})=>({maxRetries:I,timeout:d});nY0.providerConfigFromInit=n15});var gG1=Y((oY0)=>{Object.defineProperty(oY0,"__esModule",{value:!0});oY0.retry=void 0;var r15=(I,d)=>{let G=I();for(let Z=0;Z{Object.defineProperty(I_0,"__esModule",{value:!0});I_0.fromContainerMetadata=I_0.ENV_CMDS_AUTH_TOKEN=I_0.ENV_CMDS_RELATIVE_URI=I_0.ENV_CMDS_FULL_URI=void 0;var pc=W4(),a15=B1("url"),s15=xc(),tY0=FG1(),o15=cc(),e15=gG1();I_0.ENV_CMDS_FULL_URI="AWS_CONTAINER_CREDENTIALS_FULL_URI";I_0.ENV_CMDS_RELATIVE_URI="AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";I_0.ENV_CMDS_AUTH_TOKEN="AWS_CONTAINER_AUTHORIZATION_TOKEN";var t15=(I={})=>{let{timeout:d,maxRetries:G}=o15.providerConfigFromInit(I);return()=>e15.retry(async()=>{let Z=await C05(),C=JSON.parse(await I05(d,Z));if(!tY0.isImdsCredentials(C))throw new pc.CredentialsProviderError("Invalid response received from instance metadata service.");return tY0.fromImdsCredentials(C)},G)};I_0.fromContainerMetadata=t15;var I05=async(I,d)=>{if(process.env[I_0.ENV_CMDS_AUTH_TOKEN])d.headers={...d.headers,Authorization:process.env[I_0.ENV_CMDS_AUTH_TOKEN]};return(await s15.httpRequest({...d,timeout:I})).toString()},d05="169.254.170.2",G05={localhost:!0,"127.0.0.1":!0},Z05={"http:":!0,"https:":!0},C05=async()=>{if(process.env[I_0.ENV_CMDS_RELATIVE_URI])return{hostname:d05,path:process.env[I_0.ENV_CMDS_RELATIVE_URI]};if(process.env[I_0.ENV_CMDS_FULL_URI]){let I=a15.parse(process.env[I_0.ENV_CMDS_FULL_URI]);if(!I.hostname||!(I.hostname in G05))throw new pc.CredentialsProviderError(`${I.hostname} is not a valid container metadata service hostname`,!1);if(!I.protocol||!(I.protocol in Z05))throw new pc.CredentialsProviderError(`${I.protocol} is not a valid container metadata service protocol`,!1);return{...I,port:I.port?parseInt(I.port,10):void 0}}throw new pc.CredentialsProviderError(`The container metadata credential provider cannot be used unless the ${I_0.ENV_CMDS_RELATIVE_URI} or ${I_0.ENV_CMDS_FULL_URI} environment variable is set`,!1)}});var W_0=Y((Z_0)=>{Object.defineProperty(Z_0,"__esModule",{value:!0});Z_0.fromEnv=void 0;var W05=W4(),w05=(I)=>async()=>{try{let d=I(process.env);if(d===void 0)throw new Error;return d}catch(d){throw new W05.CredentialsProviderError(d.message||`Cannot load config from environment variables with getter: ${I}`)}};Z_0.fromEnv=w05});var V_0=Y((B_0)=>{Object.defineProperty(B_0,"__esModule",{value:!0});B_0.fromSharedConfigFiles=void 0;var B05=W4(),w_0=K8(),A05=(I,{preferredFile:d="config",...G}={})=>async()=>{let Z=w_0.getProfileName(G),{configFile:C,credentialsFile:W}=await w_0.loadSharedConfigFiles(G),w=W[Z]||{},B=C[Z]||{},A=d==="config"?{...w,...B}:{...B,...w};try{let V=I(A);if(V===void 0)throw new Error;return V}catch(V){throw new B05.CredentialsProviderError(V.message||`Cannot load config for profile ${Z} in SDK configuration files with getter: ${I}`)}};B_0.fromSharedConfigFiles=A05});var __0=Y((X_0)=>{Object.defineProperty(X_0,"__esModule",{value:!0});X_0.fromStatic=void 0;var V05=W4(),X05=(I)=>typeof I==="function",Y05=(I)=>X05(I)?async()=>await I():V05.fromStatic(I);X_0.fromStatic=Y05});var g_0=Y((H_0)=>{Object.defineProperty(H_0,"__esModule",{value:!0});H_0.loadConfig=void 0;var D_0=W4(),_05=W_0(),D05=V_0(),H05=__0(),F05=({environmentVariableSelector:I,configFileSelector:d,default:G},Z={})=>D_0.memoize(D_0.chain(_05.fromEnv(I),D05.fromSharedConfigFiles(d,Z),H05.fromStatic(G)));H_0.loadConfig=F05});var QZ=Y((KG1)=>{Object.defineProperty(KG1,"__esModule",{value:!0});var g05=x1();g05.__exportStar(g_0(),KG1)});var K_0=Y((J_0)=>{Object.defineProperty(J_0,"__esModule",{value:!0});J_0.Endpoint=void 0;var J05;(function(I){I.IPv4="http://169.254.169.254",I.IPv6="http://[fd00:ec2::254]"})(J05=J_0.Endpoint||(J_0.Endpoint={}))});var q_0=Y((N_0)=>{Object.defineProperty(N_0,"__esModule",{value:!0});N_0.ENDPOINT_CONFIG_OPTIONS=N_0.CONFIG_ENDPOINT_NAME=N_0.ENV_ENDPOINT_NAME=void 0;N_0.ENV_ENDPOINT_NAME="AWS_EC2_METADATA_SERVICE_ENDPOINT";N_0.CONFIG_ENDPOINT_NAME="ec2_metadata_service_endpoint";N_0.ENDPOINT_CONFIG_OPTIONS={environmentVariableSelector:(I)=>I[N_0.ENV_ENDPOINT_NAME],configFileSelector:(I)=>I[N_0.CONFIG_ENDPOINT_NAME],default:void 0}});var QG1=Y((R_0)=>{Object.defineProperty(R_0,"__esModule",{value:!0});R_0.EndpointMode=void 0;var K05;(function(I){I.IPv4="IPv4",I.IPv6="IPv6"})(K05=R_0.EndpointMode||(R_0.EndpointMode={}))});var S_0=Y((U_0)=>{Object.defineProperty(U_0,"__esModule",{value:!0});U_0.ENDPOINT_MODE_CONFIG_OPTIONS=U_0.CONFIG_ENDPOINT_MODE_NAME=U_0.ENV_ENDPOINT_MODE_NAME=void 0;var N05=QG1();U_0.ENV_ENDPOINT_MODE_NAME="AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE";U_0.CONFIG_ENDPOINT_MODE_NAME="ec2_metadata_service_endpoint_mode";U_0.ENDPOINT_MODE_CONFIG_OPTIONS={environmentVariableSelector:(I)=>I[U_0.ENV_ENDPOINT_MODE_NAME],configFileSelector:(I)=>I[U_0.CONFIG_ENDPOINT_MODE_NAME],default:N05.EndpointMode.IPv4}});var qG1=Y((P_0)=>{Object.defineProperty(P_0,"__esModule",{value:!0});P_0.getInstanceMetadataEndpoint=void 0;var y_0=QZ(),z05=FV(),L_0=K_0(),Q05=q_0(),fG1=QG1(),f05=S_0(),q05=async()=>z05.parseUrl(await R05()||await U05());P_0.getInstanceMetadataEndpoint=q05;var R05=async()=>y_0.loadConfig(Q05.ENDPOINT_CONFIG_OPTIONS)(),U05=async()=>{let I=await y_0.loadConfig(f05.ENDPOINT_MODE_CONFIG_OPTIONS)();switch(I){case fG1.EndpointMode.IPv4:return L_0.Endpoint.IPv4;case fG1.EndpointMode.IPv6:return L_0.Endpoint.IPv6;default:throw new Error(`Unsupported endpoint mode: ${I}. Select from ${Object.values(fG1.EndpointMode)}`)}}});var O_0=Y((u_0)=>{Object.defineProperty(u_0,"__esModule",{value:!0});u_0.getExtendedInstanceMetadataCredentials=void 0;var v05=300,E05=300,M05="https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html",S05=(I,d)=>{var G;let Z=v05+Math.floor(Math.random()*E05),C=new Date(Date.now()+Z*1000);d.warn("Attempting credential expiration extension due to a credential service availability issue. A refresh of these credentials will be attempted after ${new Date(newExpiration)}.\nFor more information, please visit: "+M05);let W=(G=I.originalExpiration)!==null&&G!==void 0?G:I.expiration;return{...I,...W?{originalExpiration:W}:{},expiration:C}};u_0.getExtendedInstanceMetadataCredentials=S05});var h_0=Y((l_0)=>{Object.defineProperty(l_0,"__esModule",{value:!0});l_0.staticStabilityProvider=void 0;var m_0=O_0(),L05=(I,d={})=>{let G=(d===null||d===void 0?void 0:d.logger)||console,Z;return async()=>{let C;try{if(C=await I(),C.expiration&&C.expiration.getTime(){Object.defineProperty(c_0,"__esModule",{value:!0});c_0.fromInstanceMetadata=void 0;var y05=W4(),RG1=xc(),j_0=FG1(),P05=cc(),k_0=gG1(),$05=qG1(),u05=h_0(),x_0="/latest/meta-data/iam/security-credentials/",T05="/latest/api/token",O05=(I={})=>u05.staticStabilityProvider(m05(I),{logger:I.logger});c_0.fromInstanceMetadata=O05;var m05=(I)=>{let d=!1,{timeout:G,maxRetries:Z}=P05.providerConfigFromInit(I),C=async(W,w)=>{let B=(await k_0.retry(async()=>{let A;try{A=await b05(w)}catch(V){if(V.statusCode===401)d=!1;throw V}return A},W)).trim();return k_0.retry(async()=>{let A;try{A=await h05(B,w)}catch(V){if(V.statusCode===401)d=!1;throw V}return A},W)};return async()=>{let W=await $05.getInstanceMetadataEndpoint();if(d)return C(Z,{...W,timeout:G});else{let w;try{w=(await l05({...W,timeout:G})).toString()}catch(B){if((B===null||B===void 0?void 0:B.statusCode)===400)throw Object.assign(B,{message:"EC2 Metadata token request returned error"});else if(B.message==="TimeoutError"||[403,404,405].includes(B.statusCode))d=!0;return C(Z,{...W,timeout:G})}return C(Z,{...W,headers:{"x-aws-ec2-metadata-token":w},timeout:G})}}},l05=async(I)=>RG1.httpRequest({...I,path:T05,method:"PUT",headers:{"x-aws-ec2-metadata-token-ttl-seconds":"21600"}}),b05=async(I)=>(await RG1.httpRequest({...I,path:x_0})).toString(),h05=async(I,d)=>{let G=JSON.parse((await RG1.httpRequest({...d,path:x_0+I})).toString());if(!j_0.isImdsCredentials(G))throw new y05.CredentialsProviderError("Invalid response received from instance metadata service.");return j_0.fromImdsCredentials(G)}});var r_0=Y((n_0)=>{Object.defineProperty(n_0,"__esModule",{value:!0})});var i_=Y((p_)=>{Object.defineProperty(p_,"__esModule",{value:!0});p_.getInstanceMetadataEndpoint=p_.httpRequest=void 0;var rc=x1();rc.__exportStar(G_0(),p_);rc.__exportStar(i_0(),p_);rc.__exportStar(cc(),p_);rc.__exportStar(r_0(),p_);var j05=xc();Object.defineProperty(p_,"httpRequest",{enumerable:!0,get:function(){return j05.httpRequest}});var k05=qG1();Object.defineProperty(p_,"getInstanceMetadataEndpoint",{enumerable:!0,get:function(){return k05.getInstanceMetadataEndpoint}})});var e_0=Y((s_0)=>{Object.defineProperty(s_0,"__esModule",{value:!0});s_0.resolveCredentialSource=void 0;var c05=BG1(),a_0=i_(),p05=W4(),i05=(I,d)=>{let G={EcsContainer:a_0.fromContainerMetadata,Ec2InstanceMetadata:a_0.fromInstanceMetadata,Environment:c05.fromEnv};if(I in G)return G[I]();else throw new p05.CredentialsProviderError(`Unsupported credential source in profile ${d}. Got ${I}, expected EcsContainer or Ec2InstanceMetadata or Environment.`)};s_0.resolveCredentialSource=i05});var dD0=Y((t_0)=>{Object.defineProperty(t_0,"__esModule",{value:!0});t_0.resolveAssumeRoleCredentials=t_0.isAssumeRoleProfile=void 0;var UG1=W4(),n05=K8(),r05=e_0(),a05=vG1(),s05=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.role_arn==="string"&&["undefined","string"].indexOf(typeof I.role_session_name)>-1&&["undefined","string"].indexOf(typeof I.external_id)>-1&&["undefined","string"].indexOf(typeof I.mfa_serial)>-1&&(o05(I)||e05(I));t_0.isAssumeRoleProfile=s05;var o05=(I)=>typeof I.source_profile==="string"&&typeof I.credential_source==="undefined",e05=(I)=>typeof I.credential_source==="string"&&typeof I.source_profile==="undefined",t05=async(I,d,G,Z={})=>{let C=d[I];if(!G.roleAssumer)throw new UG1.CredentialsProviderError(`Profile ${I} requires a role to be assumed, but no role assumption callback was provided.`,!1);let{source_profile:W}=C;if(W&&W in Z)throw new UG1.CredentialsProviderError(`Detected a cycle attempting to resolve credentials for profile ${n05.getProfileName(G)}. Profiles visited: `+Object.keys(Z).join(", "),!1);let w=W?a05.resolveProfileData(W,d,G,{...Z,[W]:!0}):r05.resolveCredentialSource(C.credential_source,I)(),B={RoleArn:C.role_arn,RoleSessionName:C.role_session_name||`aws-sdk-js-${Date.now()}`,ExternalId:C.external_id},{mfa_serial:A}=C;if(A){if(!G.mfaCodeProvider)throw new UG1.CredentialsProviderError(`Profile ${I} requires multi-factor authentication, but no MFA code callback was provided.`,!1);B.SerialNumber=A,B.TokenCode=await G.mfaCodeProvider(A)}let V=await w;return G.roleAssumer(V,B)};t_0.resolveAssumeRoleCredentials=t05});var CD0=Y((GD0)=>{Object.defineProperty(GD0,"__esModule",{value:!0});GD0.getValidatedProcessCredentials=void 0;var d25=(I,d)=>{if(d.Version!==1)throw Error(`Profile ${I} credential_process did not return Version 1.`);if(d.AccessKeyId===void 0||d.SecretAccessKey===void 0)throw Error(`Profile ${I} credential_process returned invalid credentials.`);if(d.Expiration){let G=new Date;if(new Date(d.Expiration){Object.defineProperty(WD0,"__esModule",{value:!0});WD0.resolveProcessCredentials=void 0;var EG1=W4(),G25=B1("child_process"),Z25=B1("util"),C25=CD0(),W25=async(I,d)=>{let G=d[I];if(d[I]){let Z=G.credential_process;if(Z!==void 0){let C=Z25.promisify(G25.exec);try{let{stdout:W}=await C(Z),w;try{w=JSON.parse(W.trim())}catch(B){throw Error(`Profile ${I} credential_process returned invalid JSON.`)}return C25.getValidatedProcessCredentials(I,w)}catch(W){throw new EG1.CredentialsProviderError(W.message)}}else throw new EG1.CredentialsProviderError(`Profile ${I} did not contain credential_process.`)}else throw new EG1.CredentialsProviderError(`Profile ${I} could not be found in shared credentials file.`)};WD0.resolveProcessCredentials=W25});var YD0=Y((VD0)=>{Object.defineProperty(VD0,"__esModule",{value:!0});VD0.fromProcess=void 0;var AD0=K8(),w25=BD0(),B25=(I={})=>async()=>{let d=await AD0.parseKnownFiles(I);return w25.resolveProcessCredentials(AD0.getProfileName(I),d)};VD0.fromProcess=B25});var SG1=Y((MG1)=>{Object.defineProperty(MG1,"__esModule",{value:!0});var A25=x1();A25.__exportStar(YD0(),MG1)});var HD0=Y((_D0)=>{Object.defineProperty(_D0,"__esModule",{value:!0});_D0.resolveProcessCredentials=_D0.isProcessProfile=void 0;var V25=SG1(),X25=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.credential_process==="string";_D0.isProcessProfile=X25;var Y25=async(I,d)=>V25.fromProcess({...I,profile:d})();_D0.resolveProcessCredentials=Y25});var LG1=Y((FD0)=>{Object.defineProperty(FD0,"__esModule",{value:!0});FD0.isSsoProfile=void 0;var D25=(I)=>I&&(typeof I.sso_start_url==="string"||typeof I.sso_account_id==="string"||typeof I.sso_session==="string"||typeof I.sso_region==="string"||typeof I.sso_role_name==="string");FD0.isSsoProfile=D25});var ND0=Y((JD0)=>{Object.defineProperty(JD0,"__esModule",{value:!0});JD0.resolveClientEndpointParameters=void 0;var H25=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,defaultSigningName:"awsssoportal"}};JD0.resolveClientEndpointParameters=H25});var zD0=Y((J13,F25)=>{F25.exports={name:"@aws-sdk/client-sso",description:"AWS SDK for JavaScript Sso Client for Node.js, Browser and React Native",version:"3.341.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sso"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/config-resolver":"3.341.0","@aws-sdk/fetch-http-handler":"3.341.0","@aws-sdk/hash-node":"3.341.0","@aws-sdk/invalid-dependency":"3.341.0","@aws-sdk/middleware-content-length":"3.341.0","@aws-sdk/middleware-endpoint":"3.341.0","@aws-sdk/middleware-host-header":"3.341.0","@aws-sdk/middleware-logger":"3.341.0","@aws-sdk/middleware-recursion-detection":"3.341.0","@aws-sdk/middleware-retry":"3.341.0","@aws-sdk/middleware-serde":"3.341.0","@aws-sdk/middleware-stack":"3.341.0","@aws-sdk/middleware-user-agent":"3.341.0","@aws-sdk/node-config-provider":"3.341.0","@aws-sdk/node-http-handler":"3.341.0","@aws-sdk/smithy-client":"3.341.0","@aws-sdk/types":"3.341.0","@aws-sdk/url-parser":"3.341.0","@aws-sdk/util-base64":"3.310.0","@aws-sdk/util-body-length-browser":"3.310.0","@aws-sdk/util-body-length-node":"3.310.0","@aws-sdk/util-defaults-mode-browser":"3.341.0","@aws-sdk/util-defaults-mode-node":"3.341.0","@aws-sdk/util-endpoints":"3.341.0","@aws-sdk/util-retry":"3.341.0","@aws-sdk/util-user-agent-browser":"3.341.0","@aws-sdk/util-user-agent-node":"3.341.0","@aws-sdk/util-utf8":"3.310.0","@smithy/protocol-http":"^1.0.1","@smithy/types":"^1.0.0",tslib:"^2.5.0"},devDependencies:{"@aws-sdk/service-client-documentation-generator":"3.310.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sso",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sso"}}});var og=Y((RD0)=>{Object.defineProperty(RD0,"__esModule",{value:!0});RD0.Hash=void 0;var yG1=Pf(),g25=hC(),J25=B1("buffer"),QD0=B1("crypto");class qD0{constructor(I,d){this.algorithmIdentifier=I,this.secret=d,this.reset()}update(I,d){this.hash.update(g25.toUint8Array(fD0(I,d)))}digest(){return Promise.resolve(this.hash.digest())}reset(){this.hash=this.secret?QD0.createHmac(this.algorithmIdentifier,fD0(this.secret)):QD0.createHash(this.algorithmIdentifier)}}RD0.Hash=qD0;function fD0(I,d){if(J25.Buffer.isBuffer(I))return I;if(typeof I==="string")return yG1.fromString(I,d);if(ArrayBuffer.isView(I))return yG1.fromArrayBuffer(I.buffer,I.byteOffset,I.byteLength);return yG1.fromArrayBuffer(I)}});var $G1=Y((vD0)=>{Object.defineProperty(vD0,"__esModule",{value:!0});vD0.buildQueryString=void 0;var PG1=PI1();function K25(I){let d=[];for(let G of Object.keys(I).sort()){let Z=I[G];if(G=PG1.escapeUri(G),Array.isArray(Z))for(let C=0,W=Z.length;C{Object.defineProperty(MD0,"__esModule",{value:!0});MD0.NODEJS_TIMEOUT_ERROR_CODES=void 0;MD0.NODEJS_TIMEOUT_ERROR_CODES=["ECONNRESET","EPIPE","ETIMEDOUT"]});var uG1=Y((yD0)=>{Object.defineProperty(yD0,"__esModule",{value:!0});yD0.getTransformedHeaders=void 0;var N25=(I)=>{let d={};for(let G of Object.keys(I)){let Z=I[G];d[G]=Array.isArray(Z)?Z.join(","):Z}return d};yD0.getTransformedHeaders=N25});var TD0=Y(($D0)=>{Object.defineProperty($D0,"__esModule",{value:!0});$D0.setConnectionTimeout=void 0;var z25=(I,d,G=0)=>{if(!G)return;I.on("socket",(Z)=>{if(Z.connecting){let C=setTimeout(()=>{I.destroy(),d(Object.assign(new Error(`Socket timed out without establishing a connection within ${G} ms`),{name:"TimeoutError"}))},G);Z.on("connect",()=>{clearTimeout(C)})}})};$D0.setConnectionTimeout=z25});var lD0=Y((OD0)=>{Object.defineProperty(OD0,"__esModule",{value:!0});OD0.setSocketKeepAlive=void 0;var Q25=(I,{keepAlive:d,keepAliveMsecs:G})=>{if(d!==!0)return;I.on("socket",(Z)=>{Z.setKeepAlive(d,G||0)})};OD0.setSocketKeepAlive=Q25});var jD0=Y((bD0)=>{Object.defineProperty(bD0,"__esModule",{value:!0});bD0.setSocketTimeout=void 0;var f25=(I,d,G=0)=>{I.setTimeout(G,()=>{I.destroy(),d(Object.assign(new Error(`Connection timed out after ${G} ms`),{name:"TimeoutError"}))})};bD0.setSocketTimeout=f25});var TG1=Y((xD0)=>{Object.defineProperty(xD0,"__esModule",{value:!0});xD0.writeRequestBody=void 0;var q25=B1("stream"),kD0=1000;async function R25(I,d,G=kD0){var Z;let C=(Z=d.headers)!==null&&Z!==void 0?Z:{};if((C.Expect||C.expect)==="100-continue")await Promise.race([new Promise((w)=>{setTimeout(w,Math.max(kD0,G))}),new Promise((w)=>{I.on("continue",()=>{w()})})]);U25(I,d.body)}xD0.writeRequestBody=R25;function U25(I,d){if(d instanceof q25.Readable)d.pipe(I);else if(d)I.end(Buffer.from(d));else I.end()}});var sD0=Y((rD0)=>{Object.defineProperty(rD0,"__esModule",{value:!0});rD0.NodeHttpHandler=rD0.DEFAULT_REQUEST_TIMEOUT=void 0;var v25=J8(),E25=$G1(),pD0=B1("http"),iD0=B1("https"),M25=LD0(),S25=uG1(),L25=TD0(),y25=lD0(),P25=jD0(),$25=TG1();rD0.DEFAULT_REQUEST_TIMEOUT=0;class nD0{constructor(I){this.metadata={handlerProtocol:"http/1.1"},this.configProvider=new Promise((d,G)=>{if(typeof I==="function")I().then((Z)=>{d(this.resolveDefaultConfig(Z))}).catch(G);else d(this.resolveDefaultConfig(I))})}resolveDefaultConfig(I){let{requestTimeout:d,connectionTimeout:G,socketTimeout:Z,httpAgent:C,httpsAgent:W}=I||{},w=!0,B=50;return{connectionTimeout:G,requestTimeout:d!==null&&d!==void 0?d:Z,httpAgent:C||new pD0.Agent({keepAlive:!0,maxSockets:50}),httpsAgent:W||new iD0.Agent({keepAlive:!0,maxSockets:50})}}destroy(){var I,d,G,Z;(d=(I=this.config)===null||I===void 0?void 0:I.httpAgent)===null||d===void 0||d.destroy(),(Z=(G=this.config)===null||G===void 0?void 0:G.httpsAgent)===null||Z===void 0||Z.destroy()}async handle(I,{abortSignal:d}={}){if(!this.config)this.config=await this.configProvider;return new Promise((G,Z)=>{let C=void 0,W=async(g)=>{await C,G(g)},w=async(g)=>{await C,Z(g)};if(!this.config)throw new Error("Node HTTP request handler config is not resolved");if(d===null||d===void 0?void 0:d.aborted){let g=new Error("Request aborted");g.name="AbortError",w(g);return}let B=I.protocol==="https:",A=E25.buildQueryString(I.query||{}),V={headers:I.headers,host:I.hostname,method:I.method,path:A?`${I.path}?${A}`:I.path,port:I.port,agent:B?this.config.httpsAgent:this.config.httpAgent},_=(B?iD0.request:pD0.request)(V,(g)=>{let J=new v25.HttpResponse({statusCode:g.statusCode||-1,headers:S25.getTransformedHeaders(g.headers),body:g});W({response:J})});if(_.on("error",(g)=>{if(M25.NODEJS_TIMEOUT_ERROR_CODES.includes(g.code))w(Object.assign(g,{name:"TimeoutError"}));else w(g)}),L25.setConnectionTimeout(_,w,this.config.connectionTimeout),P25.setSocketTimeout(_,w,this.config.requestTimeout),d)d.onabort=()=>{_.abort();let g=new Error("Request aborted");g.name="AbortError",w(g)};let F=V.agent;if(typeof F==="object"&&"keepAlive"in F)y25.setSocketKeepAlive(_,{keepAlive:F.keepAlive,keepAliveMsecs:F.keepAliveMsecs});C=$25.writeRequestBody(_,I,this.config.requestTimeout)})}}rD0.NodeHttpHandler=nD0});var IH0=Y((eD0)=>{Object.defineProperty(eD0,"__esModule",{value:!0});eD0.NodeHttp2ConnectionPool=void 0;class oD0{constructor(I){this.sessions=[],this.sessions=I!==null&&I!==void 0?I:[]}poll(){if(this.sessions.length>0)return this.sessions.shift()}offerLast(I){this.sessions.push(I)}contains(I){return this.sessions.includes(I)}remove(I){this.sessions=this.sessions.filter((d)=>d!==I)}[Symbol.iterator](){return this.sessions[Symbol.iterator]()}destroy(I){for(let d of this.sessions)if(d===I){if(!d.destroyed)d.destroy()}}}eD0.NodeHttp2ConnectionPool=oD0});var CH0=Y((GH0)=>{Object.defineProperty(GH0,"__esModule",{value:!0});GH0.NodeHttp2ConnectionManager=void 0;var T25=x1(),O25=T25.__importDefault(B1("http2")),m25=IH0();class dH0{constructor(I){if(this.sessionCache=new Map,this.config=I,this.config.maxConcurrency&&this.config.maxConcurrency<=0)throw new RangeError("maxConcurrency must be greater than zero.")}lease(I,d){let G=this.getUrlString(I),Z=this.sessionCache.get(G);if(Z){let B=Z.poll();if(B&&!this.config.disableConcurrency)return B}let C=O25.default.connect(G);if(this.config.maxConcurrency)C.settings({maxConcurrentStreams:this.config.maxConcurrency},(B)=>{if(B)throw new Error("Fail to set maxConcurrentStreams to "+this.config.maxConcurrency+"when creating new session for "+I.destination.toString())});C.unref();let W=()=>{C.destroy(),this.deleteSession(G,C)};if(C.on("goaway",W),C.on("error",W),C.on("frameError",W),C.on("close",()=>this.deleteSession(G,C)),d.requestTimeout)C.setTimeout(d.requestTimeout,W);let w=this.sessionCache.get(G)||new m25.NodeHttp2ConnectionPool;return w.offerLast(C),this.sessionCache.set(G,w),C}deleteSession(I,d){let G=this.sessionCache.get(I);if(!G)return;if(!G.contains(d))return;G.remove(d),this.sessionCache.set(I,G)}release(I,d){var G;let Z=this.getUrlString(I);(G=this.sessionCache.get(Z))===null||G===void 0||G.offerLast(d)}destroy(){for(let[I,d]of this.sessionCache){for(let G of d){if(!G.destroyed)G.destroy();d.remove(G)}this.sessionCache.delete(I)}}setMaxConcurrentStreams(I){if(this.config.maxConcurrency&&this.config.maxConcurrency<=0)throw new RangeError("maxConcurrentStreams must be greater than zero.");this.config.maxConcurrency=I}setDisableConcurrentStreams(I){this.config.disableConcurrency=I}getUrlString(I){return I.destination.toString()}}GH0.NodeHttp2ConnectionManager=dH0});var VH0=Y((BH0)=>{Object.defineProperty(BH0,"__esModule",{value:!0});BH0.NodeHttp2Handler=void 0;var l25=J8(),b25=$G1(),WH0=B1("http2"),h25=uG1(),j25=CH0(),k25=TG1();class wH0{constructor(I){this.metadata={handlerProtocol:"h2"},this.connectionManager=new j25.NodeHttp2ConnectionManager({}),this.configProvider=new Promise((d,G)=>{if(typeof I==="function")I().then((Z)=>{d(Z||{})}).catch(G);else d(I||{})})}destroy(){this.connectionManager.destroy()}async handle(I,{abortSignal:d}={}){if(!this.config){if(this.config=await this.configProvider,this.connectionManager.setDisableConcurrentStreams(this.config.disableConcurrentStreams||!1),this.config.maxConcurrentStreams)this.connectionManager.setMaxConcurrentStreams(this.config.maxConcurrentStreams)}let{requestTimeout:G,disableConcurrentStreams:Z}=this.config;return new Promise((C,W)=>{var w;let B=!1,A=void 0,V=async(T)=>{await A,C(T)},X=async(T)=>{await A,W(T)};if(d===null||d===void 0?void 0:d.aborted){B=!0;let T=new Error("Request aborted");T.name="AbortError",X(T);return}let{hostname:_,method:F,port:g,protocol:J,path:K,query:Q}=I,E=`${J}//${_}${g?`:${g}`:""}`,S={destination:new URL(E)},P=this.connectionManager.lease(S,{requestTimeout:(w=this.config)===null||w===void 0?void 0:w.sessionTimeout,disableConcurrentStreams:Z||!1}),$=(T)=>{if(Z)this.destroySession(P);B=!0,X(T)},h=b25.buildQueryString(Q||{}),O=P.request({...I.headers,[WH0.constants.HTTP2_HEADER_PATH]:h?`${K}?${h}`:K,[WH0.constants.HTTP2_HEADER_METHOD]:F});if(P.ref(),O.on("response",(T)=>{let V1=new l25.HttpResponse({statusCode:T[":status"]||-1,headers:h25.getTransformedHeaders(T),body:O});if(B=!0,V({response:V1}),Z)P.close(),this.connectionManager.deleteSession(E,P)}),G)O.setTimeout(G,()=>{O.close();let T=new Error(`Stream timed out because of no activity for ${G} ms`);T.name="TimeoutError",$(T)});if(d)d.onabort=()=>{O.close();let T=new Error("Request aborted");T.name="AbortError",$(T)};O.on("frameError",(T,V1,c)=>{$(new Error(`Frame type id ${T} in stream id ${c} has failed with code ${V1}.`))}),O.on("error",$),O.on("aborted",()=>{$(new Error(`HTTP/2 stream is abnormally aborted in mid-communication with result code ${O.rstCode}.`))}),O.on("close",()=>{if(P.unref(),Z)P.destroy();if(!B)$(new Error("Unexpected error: http2 request did not get a response"))}),A=k25.writeRequestBody(O,I,G)})}destroySession(I){if(!I.destroyed)I.destroy()}}BH0.NodeHttp2Handler=wH0});var DH0=Y((YH0)=>{Object.defineProperty(YH0,"__esModule",{value:!0});YH0.Collector=void 0;var x25=B1("stream");class XH0 extends x25.Writable{constructor(){super(...arguments);this.bufferedBytes=[]}_write(I,d,G){this.bufferedBytes.push(I),G()}}YH0.Collector=XH0});var gH0=Y((HH0)=>{Object.defineProperty(HH0,"__esModule",{value:!0});HH0.streamCollector=void 0;var c25=DH0(),p25=(I)=>new Promise((d,G)=>{let Z=new c25.Collector;I.pipe(Z),I.on("error",(C)=>{Z.end(),G(C)}),Z.on("error",G),Z.on("finish",function(){let C=new Uint8Array(Buffer.concat(this.bufferedBytes));d(C)})});HH0.streamCollector=p25});var eg=Y((OL)=>{Object.defineProperty(OL,"__esModule",{value:!0});var OG1=x1();OG1.__exportStar(sD0(),OL);OG1.__exportStar(VH0(),OL);OG1.__exportStar(gH0(),OL)});var zH0=Y((KH0)=>{Object.defineProperty(KH0,"__esModule",{value:!0});KH0.calculateBodyLength=void 0;var JH0=B1("fs"),i25=(I)=>{if(!I)return 0;if(typeof I==="string")return Buffer.from(I).length;else if(typeof I.byteLength==="number")return I.byteLength;else if(typeof I.size==="number")return I.size;else if(typeof I.path==="string"||Buffer.isBuffer(I.path))return JH0.lstatSync(I.path).size;else if(typeof I.fd==="number")return JH0.fstatSync(I.fd).size;throw new Error(`Body Length computation failed for ${I}`)};KH0.calculateBodyLength=i25});var tg=Y((mG1)=>{Object.defineProperty(mG1,"__esModule",{value:!0});var n25=x1();n25.__exportStar(zH0(),mG1)});var RH0=Y((QH0,fH0)=>{Object.defineProperty(QH0,"__esModule",{value:!0});QH0.isCrtAvailable=void 0;var r25=()=>{try{if(typeof fH0!=="undefined"&&(()=>{throw new Error("Cannot require module "+"aws-crt");})())return["md/crt-avail"];return null}catch(I){return null}};QH0.isCrtAvailable=r25});var ac=Y((vH0)=>{Object.defineProperty(vH0,"__esModule",{value:!0});vH0.defaultUserAgent=vH0.UA_APP_ID_INI_NAME=vH0.UA_APP_ID_ENV_NAME=void 0;var a25=QZ(),UH0=B1("os"),lG1=B1("process"),s25=RH0();vH0.UA_APP_ID_ENV_NAME="AWS_SDK_UA_APP_ID";vH0.UA_APP_ID_INI_NAME="sdk-ua-app-id";var o25=({serviceId:I,clientVersion:d})=>{let G=[["aws-sdk-js",d],[`os/${UH0.platform()}`,UH0.release()],["lang/js"],["md/nodejs",`${lG1.versions.node}`]],Z=s25.isCrtAvailable();if(Z)G.push(Z);if(I)G.push([`api/${I}`,d]);if(lG1.env.AWS_EXECUTION_ENV)G.push([`exec-env/${lG1.env.AWS_EXECUTION_ENV}`]);let C=a25.loadConfig({environmentVariableSelector:(w)=>w[vH0.UA_APP_ID_ENV_NAME],configFileSelector:(w)=>w[vH0.UA_APP_ID_INI_NAME],default:void 0})(),W=void 0;return async()=>{if(!W){let w=await C;W=w?[...G,[`app/${w}`]]:[...G]}return W}};vH0.defaultUserAgent=o25});var PH0=Y((LH0)=>{Object.defineProperty(LH0,"__esModule",{value:!0});LH0.fromBase64=void 0;var e25=Pf(),t25=/^[A-Za-z0-9+/]*={0,2}$/,I45=(I)=>{if(I.length*3%4!==0)throw new TypeError("Incorrect padding on base64 string.");if(!t25.exec(I))throw new TypeError("Invalid base64 string.");let d=e25.fromString(I,"base64");return new Uint8Array(d.buffer,d.byteOffset,d.byteLength)};LH0.fromBase64=I45});var TH0=Y(($H0)=>{Object.defineProperty($H0,"__esModule",{value:!0});$H0.toBase64=void 0;var d45=Pf(),G45=(I)=>d45.fromArrayBuffer(I.buffer,I.byteOffset,I.byteLength).toString("base64");$H0.toBase64=G45});var IJ=Y((sc)=>{Object.defineProperty(sc,"__esModule",{value:!0});var OH0=x1();OH0.__exportStar(PH0(),sc);OH0.__exportStar(TH0(),sc)});var sH0=Y((rH0)=>{Object.defineProperty(rH0,"__esModule",{value:!0});rH0.ruleSet=void 0;var cH0="required",qV="fn",RV="argv",hf="ref",bG1="PartitionResult",ew="tree",mL="error",lL="endpoint",mH0={[cH0]:!1,type:"String"},lH0={[cH0]:!0,default:!1,type:"Boolean"},pH0={[hf]:"Endpoint"},iH0={[qV]:"booleanEquals",[RV]:[{[hf]:"UseFIPS"},!0]},nH0={[qV]:"booleanEquals",[RV]:[{[hf]:"UseDualStack"},!0]},tw={},bH0={[qV]:"booleanEquals",[RV]:[!0,{[qV]:"getAttr",[RV]:[{[hf]:bG1},"supportsFIPS"]}]},hH0={[qV]:"booleanEquals",[RV]:[!0,{[qV]:"getAttr",[RV]:[{[hf]:bG1},"supportsDualStack"]}]},jH0=[pH0],kH0=[iH0],xH0=[nH0],Z45={version:"1.0",parameters:{Region:mH0,UseDualStack:lH0,UseFIPS:lH0,Endpoint:mH0},rules:[{conditions:[{[qV]:"aws.partition",[RV]:[{[hf]:"Region"}],assign:bG1}],type:ew,rules:[{conditions:[{[qV]:"isSet",[RV]:jH0},{[qV]:"parseURL",[RV]:jH0,assign:"url"}],type:ew,rules:[{conditions:kH0,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:mL},{type:ew,rules:[{conditions:xH0,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:mL},{endpoint:{url:pH0,properties:tw,headers:tw},type:lL}]}]},{conditions:[iH0,nH0],type:ew,rules:[{conditions:[bH0,hH0],type:ew,rules:[{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:tw,headers:tw},type:lL}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:mL}]},{conditions:kH0,type:ew,rules:[{conditions:[bH0],type:ew,rules:[{type:ew,rules:[{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}",properties:tw,headers:tw},type:lL}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:mL}]},{conditions:xH0,type:ew,rules:[{conditions:[hH0],type:ew,rules:[{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:tw,headers:tw},type:lL}]},{error:"DualStack is enabled but this partition does not support DualStack",type:mL}]},{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dnsSuffix}",properties:tw,headers:tw},type:lL}]}]};rH0.ruleSet=Z45});var tH0=Y((oH0)=>{Object.defineProperty(oH0,"__esModule",{value:!0});oH0.defaultEndpointResolver=void 0;var C45=qL(),W45=sH0(),w45=(I,d={})=>{return C45.resolveEndpoint(W45.ruleSet,{endpointParams:I,logger:d.logger})};oH0.defaultEndpointResolver=w45});var CF0=Y((GF0)=>{Object.defineProperty(GF0,"__esModule",{value:!0});GF0.getRuntimeConfig=void 0;var B45=v0(),A45=FV(),IF0=IJ(),dF0=hC(),V45=tH0(),X45=(I)=>({apiVersion:"2019-06-10",base64Decoder:I?.base64Decoder??IF0.fromBase64,base64Encoder:I?.base64Encoder??IF0.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??V45.defaultEndpointResolver,logger:I?.logger??new B45.NoOpLogger,serviceId:I?.serviceId??"SSO",urlParser:I?.urlParser??A45.parseUrl,utf8Decoder:I?.utf8Decoder??dF0.fromUtf8,utf8Encoder:I?.utf8Encoder??dF0.toUtf8});GF0.getRuntimeConfig=X45});var BF0=Y((WF0)=>{Object.defineProperty(WF0,"__esModule",{value:!0});WF0.IMDS_REGION_PATH=WF0.DEFAULTS_MODE_OPTIONS=WF0.ENV_IMDS_DISABLED=WF0.AWS_DEFAULT_REGION_ENV=WF0.AWS_REGION_ENV=WF0.AWS_EXECUTION_ENV=void 0;WF0.AWS_EXECUTION_ENV="AWS_EXECUTION_ENV";WF0.AWS_REGION_ENV="AWS_REGION";WF0.AWS_DEFAULT_REGION_ENV="AWS_DEFAULT_REGION";WF0.ENV_IMDS_DISABLED="AWS_EC2_METADATA_DISABLED";WF0.DEFAULTS_MODE_OPTIONS=["in-region","cross-region","mobile","standard","legacy"];WF0.IMDS_REGION_PATH="/latest/meta-data/placement/region"});var XF0=Y((AF0)=>{Object.defineProperty(AF0,"__esModule",{value:!0});AF0.NODE_DEFAULTS_MODE_CONFIG_OPTIONS=void 0;var g45="AWS_DEFAULTS_MODE",J45="defaults_mode";AF0.NODE_DEFAULTS_MODE_CONFIG_OPTIONS={environmentVariableSelector:(I)=>{return I[g45]},configFileSelector:(I)=>{return I[J45]},default:"legacy"}});var FF0=Y((DF0)=>{Object.defineProperty(DF0,"__esModule",{value:!0});DF0.resolveDefaultsModeConfig=void 0;var K45=Cd(),YF0=i_(),_F0=QZ(),N45=W4(),n_=BF0(),z45=XF0(),Q45=({region:I=_F0.loadConfig(K45.NODE_REGION_CONFIG_OPTIONS),defaultsMode:d=_F0.loadConfig(z45.NODE_DEFAULTS_MODE_CONFIG_OPTIONS)}={})=>N45.memoize(async()=>{let G=typeof d==="function"?await d():d;switch(G===null||G===void 0?void 0:G.toLowerCase()){case"auto":return f45(I);case"in-region":case"cross-region":case"mobile":case"standard":case"legacy":return Promise.resolve(G===null||G===void 0?void 0:G.toLocaleLowerCase());case void 0:return Promise.resolve("legacy");default:throw new Error(`Invalid parameter for "defaultsMode", expect ${n_.DEFAULTS_MODE_OPTIONS.join(", ")}, got ${G}`)}});DF0.resolveDefaultsModeConfig=Q45;var f45=async(I)=>{if(I){let d=typeof I==="function"?await I():I,G=await q45();if(!G)return"standard";if(d===G)return"in-region";else return"cross-region"}return"standard"},q45=async()=>{var I;if(process.env[n_.AWS_EXECUTION_ENV]&&(process.env[n_.AWS_REGION_ENV]||process.env[n_.AWS_DEFAULT_REGION_ENV]))return(I=process.env[n_.AWS_REGION_ENV])!==null&&I!==void 0?I:process.env[n_.AWS_DEFAULT_REGION_ENV];if(!process.env[n_.ENV_IMDS_DISABLED])try{let d=await YF0.getInstanceMetadataEndpoint();return(await YF0.httpRequest({...d,path:n_.IMDS_REGION_PATH})).toString()}catch(d){}}});var dJ=Y((hG1)=>{Object.defineProperty(hG1,"__esModule",{value:!0});var R45=x1();R45.__exportStar(FF0(),hG1)});var zF0=Y((KF0)=>{Object.defineProperty(KF0,"__esModule",{value:!0});KF0.getRuntimeConfig=void 0;var U45=x1(),v45=U45.__importDefault(zD0()),oc=Cd(),E45=og(),gF0=dG(),bL=QZ(),JF0=eg(),M45=tg(),S45=Wd(),L45=ac(),y45=CF0(),P45=v0(),$45=dJ(),u45=v0(),T45=(I)=>{u45.emitWarningIfUnsupportedVersion(process.version);let d=$45.resolveDefaultsModeConfig(I),G=()=>d().then(P45.loadConfigsForDefaultMode),Z=y45.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??M45.calculateBodyLength,defaultUserAgentProvider:I?.defaultUserAgentProvider??L45.defaultUserAgent({serviceId:Z.serviceId,clientVersion:v45.default.version}),maxAttempts:I?.maxAttempts??bL.loadConfig(gF0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??bL.loadConfig(oc.NODE_REGION_CONFIG_OPTIONS,oc.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new JF0.NodeHttpHandler(G),retryMode:I?.retryMode??bL.loadConfig({...gF0.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||S45.DEFAULT_RETRY_MODE}),sha256:I?.sha256??E45.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??JF0.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??bL.loadConfig(oc.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??bL.loadConfig(oc.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};KF0.getRuntimeConfig=T45});var hL=Y((jG1)=>{Object.defineProperty(jG1,"__esModule",{value:!0});jG1.SSOClient=jG1.__Client=void 0;var O45=Cd(),m45=jg(),l45=u2(),QF0=Xc(),b45=Yc(),h45=_c(),fF0=dG(),qF0=Lc(),RF0=v0();Object.defineProperty(jG1,"__Client",{enumerable:!0,get:function(){return RF0.Client}});var j45=ND0(),k45=zF0();class UF0 extends RF0.Client{constructor(I){let d=k45.getRuntimeConfig(I),G=j45.resolveClientEndpointParameters(d),Z=O45.resolveRegionConfig(G),C=l45.resolveEndpointConfig(Z),W=fF0.resolveRetryConfig(C),w=QF0.resolveHostHeaderConfig(W),B=qF0.resolveUserAgentConfig(w);super(B);this.config=B,this.middlewareStack.use(fF0.getRetryPlugin(this.config)),this.middlewareStack.use(m45.getContentLengthPlugin(this.config)),this.middlewareStack.use(QF0.getHostHeaderPlugin(this.config)),this.middlewareStack.use(b45.getLoggerPlugin(this.config)),this.middlewareStack.use(h45.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(qF0.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}jG1.SSOClient=UF0});var ec=Y((xG1)=>{Object.defineProperty(xG1,"__esModule",{value:!0});xG1.SSOServiceException=xG1.__ServiceException=void 0;var EF0=v0();Object.defineProperty(xG1,"__ServiceException",{enumerable:!0,get:function(){return EF0.ServiceException}});class kG1 extends EF0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,kG1.prototype)}}xG1.SSOServiceException=kG1});var GJ=Y((SF0)=>{Object.defineProperty(SF0,"__esModule",{value:!0});SF0.LogoutRequestFilterSensitiveLog=SF0.ListAccountsRequestFilterSensitiveLog=SF0.ListAccountRolesRequestFilterSensitiveLog=SF0.GetRoleCredentialsResponseFilterSensitiveLog=SF0.RoleCredentialsFilterSensitiveLog=SF0.GetRoleCredentialsRequestFilterSensitiveLog=SF0.UnauthorizedException=SF0.TooManyRequestsException=SF0.ResourceNotFoundException=SF0.InvalidRequestException=void 0;var jf=v0(),tc=ec();class cG1 extends tc.SSOServiceException{constructor(I){super({name:"InvalidRequestException",$fault:"client",...I});this.name="InvalidRequestException",this.$fault="client",Object.setPrototypeOf(this,cG1.prototype)}}SF0.InvalidRequestException=cG1;class pG1 extends tc.SSOServiceException{constructor(I){super({name:"ResourceNotFoundException",$fault:"client",...I});this.name="ResourceNotFoundException",this.$fault="client",Object.setPrototypeOf(this,pG1.prototype)}}SF0.ResourceNotFoundException=pG1;class iG1 extends tc.SSOServiceException{constructor(I){super({name:"TooManyRequestsException",$fault:"client",...I});this.name="TooManyRequestsException",this.$fault="client",Object.setPrototypeOf(this,iG1.prototype)}}SF0.TooManyRequestsException=iG1;class nG1 extends tc.SSOServiceException{constructor(I){super({name:"UnauthorizedException",$fault:"client",...I});this.name="UnauthorizedException",this.$fault="client",Object.setPrototypeOf(this,nG1.prototype)}}SF0.UnauthorizedException=nG1;var x45=(I)=>({...I,...I.accessToken&&{accessToken:jf.SENSITIVE_STRING}});SF0.GetRoleCredentialsRequestFilterSensitiveLog=x45;var c45=(I)=>({...I,...I.secretAccessKey&&{secretAccessKey:jf.SENSITIVE_STRING},...I.sessionToken&&{sessionToken:jf.SENSITIVE_STRING}});SF0.RoleCredentialsFilterSensitiveLog=c45;var p45=(I)=>({...I,...I.roleCredentials&&{roleCredentials:SF0.RoleCredentialsFilterSensitiveLog(I.roleCredentials)}});SF0.GetRoleCredentialsResponseFilterSensitiveLog=p45;var i45=(I)=>({...I,...I.accessToken&&{accessToken:jf.SENSITIVE_STRING}});SF0.ListAccountRolesRequestFilterSensitiveLog=i45;var n45=(I)=>({...I,...I.accessToken&&{accessToken:jf.SENSITIVE_STRING}});SF0.ListAccountsRequestFilterSensitiveLog=n45;var r45=(I)=>({...I,...I.accessToken&&{accessToken:jf.SENSITIVE_STRING}});SF0.LogoutRequestFilterSensitiveLog=r45});var jL=Y(($F0)=>{Object.defineProperty($F0,"__esModule",{value:!0});$F0.de_LogoutCommand=$F0.de_ListAccountsCommand=$F0.de_ListAccountRolesCommand=$F0.de_GetRoleCredentialsCommand=$F0.se_LogoutCommand=$F0.se_ListAccountsCommand=$F0.se_ListAccountRolesCommand=$F0.se_GetRoleCredentialsCommand=void 0;var N4=v0(),Ip=Oc(),dp=GJ(),Z55=ec(),C55=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=N4.map({},wp,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/federation/credentials`,A=N4.map({role_name:[,N4.expectNonNull(I.roleName,"roleName")],account_id:[,N4.expectNonNull(I.accountId,"accountId")]}),V;return new Ip.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};$F0.se_GetRoleCredentialsCommand=C55;var W55=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=N4.map({},wp,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/assignment/roles`,A=N4.map({next_token:[,I.nextToken],max_result:[()=>I.maxResults!==void 0,()=>I.maxResults.toString()],account_id:[,N4.expectNonNull(I.accountId,"accountId")]}),V;return new Ip.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};$F0.se_ListAccountRolesCommand=W55;var w55=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=N4.map({},wp,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/assignment/accounts`,A=N4.map({next_token:[,I.nextToken],max_result:[()=>I.maxResults!==void 0,()=>I.maxResults.toString()]}),V;return new Ip.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};$F0.se_ListAccountsCommand=w55;var B55=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=N4.map({},wp,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/logout`,A;return new Ip.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};$F0.se_LogoutCommand=B55;var A55=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return V55(I,d);let G=N4.map({$metadata:r_(I)}),Z=N4.expectNonNull(N4.expectObject(await Bp(I.body,d)),"body"),C=N4.take(Z,{roleCredentials:N4._json});return Object.assign(G,C),G};$F0.de_GetRoleCredentialsCommand=A55;var V55=async(I,d)=>{let G={...I,body:await Ap(I.body,d)},Z=Vp(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Zp(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await rG1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Cp(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Wp(G,d);default:let C=G.body;return Gp({output:I,parsedBody:C,errorCode:Z})}},X55=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return Y55(I,d);let G=N4.map({$metadata:r_(I)}),Z=N4.expectNonNull(N4.expectObject(await Bp(I.body,d)),"body"),C=N4.take(Z,{nextToken:N4.expectString,roleList:N4._json});return Object.assign(G,C),G};$F0.de_ListAccountRolesCommand=X55;var Y55=async(I,d)=>{let G={...I,body:await Ap(I.body,d)},Z=Vp(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Zp(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await rG1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Cp(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Wp(G,d);default:let C=G.body;return Gp({output:I,parsedBody:C,errorCode:Z})}},_55=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return D55(I,d);let G=N4.map({$metadata:r_(I)}),Z=N4.expectNonNull(N4.expectObject(await Bp(I.body,d)),"body"),C=N4.take(Z,{accountList:N4._json,nextToken:N4.expectString});return Object.assign(G,C),G};$F0.de_ListAccountsCommand=_55;var D55=async(I,d)=>{let G={...I,body:await Ap(I.body,d)},Z=Vp(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Zp(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await rG1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Cp(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Wp(G,d);default:let C=G.body;return Gp({output:I,parsedBody:C,errorCode:Z})}},H55=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return F55(I,d);let G=N4.map({$metadata:r_(I)});return await PF0(I.body,d),G};$F0.de_LogoutCommand=H55;var F55=async(I,d)=>{let G={...I,body:await Ap(I.body,d)},Z=Vp(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Zp(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Cp(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Wp(G,d);default:let C=G.body;return Gp({output:I,parsedBody:C,errorCode:Z})}},Gp=N4.withBaseException(Z55.SSOServiceException),Zp=async(I,d)=>{let G=N4.map({}),Z=I.body,C=N4.take(Z,{message:N4.expectString});Object.assign(G,C);let W=new dp.InvalidRequestException({$metadata:r_(I),...G});return N4.decorateServiceException(W,I.body)},rG1=async(I,d)=>{let G=N4.map({}),Z=I.body,C=N4.take(Z,{message:N4.expectString});Object.assign(G,C);let W=new dp.ResourceNotFoundException({$metadata:r_(I),...G});return N4.decorateServiceException(W,I.body)},Cp=async(I,d)=>{let G=N4.map({}),Z=I.body,C=N4.take(Z,{message:N4.expectString});Object.assign(G,C);let W=new dp.TooManyRequestsException({$metadata:r_(I),...G});return N4.decorateServiceException(W,I.body)},Wp=async(I,d)=>{let G=N4.map({}),Z=I.body,C=N4.take(Z,{message:N4.expectString});Object.assign(G,C);let W=new dp.UnauthorizedException({$metadata:r_(I),...G});return N4.decorateServiceException(W,I.body)},r_=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),PF0=(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return Promise.resolve(I);return d.streamCollector(I)||Promise.resolve(new Uint8Array)},g55=(I,d)=>PF0(I,d).then((G)=>d.utf8Encoder(G)),wp=(I)=>I!==void 0&&I!==null&&I!==""&&(!Object.getOwnPropertyNames(I).includes("length")||I.length!=0)&&(!Object.getOwnPropertyNames(I).includes("size")||I.size!=0),Bp=(I,d)=>g55(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),Ap=async(I,d)=>{let G=await Bp(I,d);return G.message=G.message??G.Message,G},Vp=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)}});var oG1=Y((sG1)=>{Object.defineProperty(sG1,"__esModule",{value:!0});sG1.GetRoleCredentialsCommand=sG1.$Command=void 0;var R55=u2(),U55=r2(),mF0=v0();Object.defineProperty(sG1,"$Command",{enumerable:!0,get:function(){return mF0.Command}});var TF0=GJ(),OF0=jL();class aG1 extends mF0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(U55.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(R55.getEndpointPlugin(d,aG1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"GetRoleCredentialsCommand",inputFilterSensitiveLog:TF0.GetRoleCredentialsRequestFilterSensitiveLog,outputFilterSensitiveLog:TF0.GetRoleCredentialsResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return OF0.se_GetRoleCredentialsCommand(I,d)}deserialize(I,d){return OF0.de_GetRoleCredentialsCommand(I,d)}}sG1.GetRoleCredentialsCommand=aG1});var Xp=Y((tG1)=>{Object.defineProperty(tG1,"__esModule",{value:!0});tG1.ListAccountRolesCommand=tG1.$Command=void 0;var v55=u2(),E55=r2(),hF0=v0();Object.defineProperty(tG1,"$Command",{enumerable:!0,get:function(){return hF0.Command}});var M55=GJ(),bF0=jL();class eG1 extends hF0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(E55.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(v55.getEndpointPlugin(d,eG1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"ListAccountRolesCommand",inputFilterSensitiveLog:M55.ListAccountRolesRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return bF0.se_ListAccountRolesCommand(I,d)}deserialize(I,d){return bF0.de_ListAccountRolesCommand(I,d)}}tG1.ListAccountRolesCommand=eG1});var Yp=Y((dZ1)=>{Object.defineProperty(dZ1,"__esModule",{value:!0});dZ1.ListAccountsCommand=dZ1.$Command=void 0;var S55=u2(),L55=r2(),xF0=v0();Object.defineProperty(dZ1,"$Command",{enumerable:!0,get:function(){return xF0.Command}});var y55=GJ(),kF0=jL();class IZ1 extends xF0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(L55.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(S55.getEndpointPlugin(d,IZ1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"ListAccountsCommand",inputFilterSensitiveLog:y55.ListAccountsRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return kF0.se_ListAccountsCommand(I,d)}deserialize(I,d){return kF0.de_ListAccountsCommand(I,d)}}dZ1.ListAccountsCommand=IZ1});var CZ1=Y((ZZ1)=>{Object.defineProperty(ZZ1,"__esModule",{value:!0});ZZ1.LogoutCommand=ZZ1.$Command=void 0;var P55=u2(),$55=r2(),iF0=v0();Object.defineProperty(ZZ1,"$Command",{enumerable:!0,get:function(){return iF0.Command}});var u55=GJ(),pF0=jL();class GZ1 extends iF0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use($55.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(P55.getEndpointPlugin(d,GZ1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"LogoutCommand",inputFilterSensitiveLog:u55.LogoutRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return pF0.se_LogoutCommand(I,d)}deserialize(I,d){return pF0.de_LogoutCommand(I,d)}}ZZ1.LogoutCommand=GZ1});var sF0=Y((rF0)=>{Object.defineProperty(rF0,"__esModule",{value:!0});rF0.SSO=void 0;var T55=v0(),O55=oG1(),m55=Xp(),l55=Yp(),b55=CZ1(),h55=hL(),j55={GetRoleCredentialsCommand:O55.GetRoleCredentialsCommand,ListAccountRolesCommand:m55.ListAccountRolesCommand,ListAccountsCommand:l55.ListAccountsCommand,LogoutCommand:b55.LogoutCommand};class WZ1 extends h55.SSOClient{}rF0.SSO=WZ1;T55.createAggregatedClient(j55,WZ1)});var oF0=Y((kf)=>{Object.defineProperty(kf,"__esModule",{value:!0});var _p=x1();_p.__exportStar(oG1(),kf);_p.__exportStar(Xp(),kf);_p.__exportStar(Yp(),kf);_p.__exportStar(CZ1(),kf)});var tF0=Y((eF0)=>{Object.defineProperty(eF0,"__esModule",{value:!0})});var Gg0=Y((Ig0)=>{Object.defineProperty(Ig0,"__esModule",{value:!0});Ig0.paginateListAccountRoles=void 0;var k55=Xp(),x55=hL(),c55=async(I,d,...G)=>{return await I.send(new k55.ListAccountRolesCommand(d),...G)};async function*p55(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.nextToken=Z,d.maxResults=I.pageSize,I.client instanceof x55.SSOClient)W=await c55(I.client,d,...G);else throw new Error("Invalid client, expected SSO | SSOClient");yield W;let w=Z;Z=W.nextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}Ig0.paginateListAccountRoles=p55});var Wg0=Y((Zg0)=>{Object.defineProperty(Zg0,"__esModule",{value:!0});Zg0.paginateListAccounts=void 0;var i55=Yp(),n55=hL(),r55=async(I,d,...G)=>{return await I.send(new i55.ListAccountsCommand(d),...G)};async function*a55(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.nextToken=Z,d.maxResults=I.pageSize,I.client instanceof n55.SSOClient)W=await r55(I.client,d,...G);else throw new Error("Invalid client, expected SSO | SSOClient");yield W;let w=Z;Z=W.nextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}Zg0.paginateListAccounts=a55});var wg0=Y((kL)=>{Object.defineProperty(kL,"__esModule",{value:!0});var wZ1=x1();wZ1.__exportStar(tF0(),kL);wZ1.__exportStar(Gg0(),kL);wZ1.__exportStar(Wg0(),kL)});var Bg0=Y((BZ1)=>{Object.defineProperty(BZ1,"__esModule",{value:!0});var s55=x1();s55.__exportStar(GJ(),BZ1)});var Ag0=Y((a_)=>{Object.defineProperty(a_,"__esModule",{value:!0});a_.SSOServiceException=void 0;var xL=x1();xL.__exportStar(hL(),a_);xL.__exportStar(sF0(),a_);xL.__exportStar(oF0(),a_);xL.__exportStar(wg0(),a_);xL.__exportStar(Bg0(),a_);var o55=ec();Object.defineProperty(a_,"SSOServiceException",{enumerable:!0,get:function(){return o55.SSOServiceException}})});var Dp=Y((Vg0)=>{Object.defineProperty(Vg0,"__esModule",{value:!0});Vg0.REFRESH_MESSAGE=Vg0.EXPIRE_WINDOW_MS=void 0;Vg0.EXPIRE_WINDOW_MS=300000;Vg0.REFRESH_MESSAGE="To refresh this SSO session run 'aws sso login' with the corresponding profile."});var Fg0=Y((Yg0)=>{Object.defineProperty(Yg0,"__esModule",{value:!0});Yg0.getHostHeaderPlugin=Yg0.hostHeaderMiddlewareOptions=Yg0.hostHeaderMiddleware=Yg0.resolveHostHeaderConfig=void 0;var I95=J8();function d95(I){return I}Yg0.resolveHostHeaderConfig=d95;var G95=(I)=>(d)=>async(G)=>{if(!I95.HttpRequest.isInstance(G.request))return d(G);let{request:Z}=G,{handlerProtocol:C=""}=I.requestHandler.metadata||{};if(C.indexOf("h2")>=0&&!Z.headers[":authority"])delete Z.headers.host,Z.headers[":authority"]="";else if(!Z.headers.host){let W=Z.hostname;if(Z.port!=null)W+=`:${Z.port}`;Z.headers.host=W}return d(G)};Yg0.hostHeaderMiddleware=G95;Yg0.hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};var Z95=(I)=>({applyToStack:(d)=>{d.add(Yg0.hostHeaderMiddleware(I),Yg0.hostHeaderMiddlewareOptions)}});Yg0.getHostHeaderPlugin=Z95});var zg0=Y((gg0)=>{Object.defineProperty(gg0,"__esModule",{value:!0});gg0.getLoggerPlugin=gg0.loggerMiddlewareOptions=gg0.loggerMiddleware=void 0;var W95=()=>(I,d)=>async(G)=>{var Z,C;try{let W=await I(G),{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X,overrideOutputFilterSensitiveLog:_}=V,F=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog,g=_!==null&&_!==void 0?_:d.outputFilterSensitiveLog,{$metadata:J,...K}=W.output;return(Z=A===null||A===void 0?void 0:A.info)===null||Z===void 0||Z.call(A,{clientName:w,commandName:B,input:F(G.input),output:g(K),metadata:J}),W}catch(W){let{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X}=V,_=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog;throw(C=A===null||A===void 0?void 0:A.error)===null||C===void 0||C.call(A,{clientName:w,commandName:B,input:_(G.input),error:W,metadata:W.$metadata}),W}};gg0.loggerMiddleware=W95;gg0.loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};var w95=(I)=>({applyToStack:(d)=>{d.add(gg0.loggerMiddleware(),gg0.loggerMiddlewareOptions)}});gg0.getLoggerPlugin=w95});var Qg0=Y((AZ1)=>{Object.defineProperty(AZ1,"__esModule",{value:!0});var B95=x1();B95.__exportStar(zg0(),AZ1)});var Eg0=Y((qg0)=>{Object.defineProperty(qg0,"__esModule",{value:!0});qg0.getRecursionDetectionPlugin=qg0.addRecursionDetectionMiddlewareOptions=qg0.recursionDetectionMiddleware=void 0;var A95=J8(),fg0="X-Amzn-Trace-Id",V95="AWS_LAMBDA_FUNCTION_NAME",X95="_X_AMZN_TRACE_ID",Y95=(I)=>(d)=>async(G)=>{let{request:Z}=G;if(!A95.HttpRequest.isInstance(Z)||I.runtime!=="node"||Z.headers.hasOwnProperty(fg0))return d(G);let C=process.env[V95],W=process.env[X95],w=(B)=>typeof B==="string"&&B.length>0;if(w(C)&&w(W))Z.headers[fg0]=W;return d({...G,request:Z})};qg0.recursionDetectionMiddleware=Y95;qg0.addRecursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};var _95=(I)=>({applyToStack:(d)=>{d.add(qg0.recursionDetectionMiddleware(I),qg0.addRecursionDetectionMiddlewareOptions)}});qg0.getRecursionDetectionPlugin=_95});var Lg0=Y((Mg0)=>{Object.defineProperty(Mg0,"__esModule",{value:!0});Mg0.resolveUserAgentConfig=void 0;function D95(I){return{...I,customUserAgent:typeof I.customUserAgent==="string"?[[I.customUserAgent]]:I.customUserAgent}}Mg0.resolveUserAgentConfig=D95});var yg0=Y((f03,H95)=>{H95.exports={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"aws-global":{description:"AWS Standard global region"},"ca-central-1":{description:"Canada (Central)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"AWS China global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"AWS GovCloud (US) global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"c2s.ic.gov",name:"aws-iso",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"AWS ISO (US) global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"sc2s.sgov.gov",name:"aws-iso-b",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"AWS ISOB (US) global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"cloud.adc-e.uk",name:"aws-iso-e",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{}}],version:"1.1"}});var VZ1=Y((Tg0)=>{Object.defineProperty(Tg0,"__esModule",{value:!0});Tg0.getUserAgentPrefix=Tg0.useDefaultPartitionInfo=Tg0.setPartitionInfo=Tg0.partition=void 0;var F95=x1(),Pg0=F95.__importDefault(yg0()),$g0=Pg0.default,ug0="",g95=(I)=>{let{partitions:d}=$g0;for(let Z of d){let{regions:C,outputs:W}=Z;for(let[w,B]of Object.entries(C))if(w===I)return{...W,...B}}for(let Z of d){let{regionRegex:C,outputs:W}=Z;if(new RegExp(C).test(I))return{...W}}let G=d.find((Z)=>Z.id==="aws");if(!G)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...G.outputs}};Tg0.partition=g95;var J95=(I,d="")=>{$g0=I,ug0=d};Tg0.setPartitionInfo=J95;var K95=()=>{Tg0.setPartitionInfo(Pg0.default,"")};Tg0.useDefaultPartitionInfo=K95;var N95=()=>ug0;Tg0.getUserAgentPrefix=N95});var hg0=Y((lg0)=>{Object.defineProperty(lg0,"__esModule",{value:!0});lg0.debugId=void 0;lg0.debugId="endpoints"});var xg0=Y((jg0)=>{Object.defineProperty(jg0,"__esModule",{value:!0});jg0.toDebugString=void 0;function XZ1(I){if(typeof I!=="object"||I==null)return I;if("ref"in I)return`$${XZ1(I.ref)}`;if("fn"in I)return`${I.fn}(${(I.argv||[]).map(XZ1).join(", ")})`;return JSON.stringify(I,null,2)}jg0.toDebugString=XZ1});var cL=Y((Hp)=>{Object.defineProperty(Hp,"__esModule",{value:!0});var cg0=x1();cg0.__exportStar(hg0(),Hp);cg0.__exportStar(xg0(),Hp)});var rg0=Y((ig0)=>{Object.defineProperty(ig0,"__esModule",{value:!0});ig0.EndpointError=void 0;class pg0 extends Error{constructor(I){super(I);this.name="EndpointError"}}ig0.EndpointError=pg0});var sg0=Y((ag0)=>{Object.defineProperty(ag0,"__esModule",{value:!0})});var eg0=Y((og0)=>{Object.defineProperty(og0,"__esModule",{value:!0})});var IJ0=Y((tg0)=>{Object.defineProperty(tg0,"__esModule",{value:!0})});var GJ0=Y((dJ0)=>{Object.defineProperty(dJ0,"__esModule",{value:!0})});var CJ0=Y((ZJ0)=>{Object.defineProperty(ZJ0,"__esModule",{value:!0})});var fZ=Y((s_)=>{Object.defineProperty(s_,"__esModule",{value:!0});var xf=x1();xf.__exportStar(rg0(),s_);xf.__exportStar(sg0(),s_);xf.__exportStar(eg0(),s_);xf.__exportStar(IJ0(),s_);xf.__exportStar(GJ0(),s_);xf.__exportStar(CJ0(),s_)});var YZ1=Y((WJ0)=>{Object.defineProperty(WJ0,"__esModule",{value:!0});WJ0.isIpAddress=void 0;var f95=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$"),q95=(I)=>f95.test(I)||I.startsWith("[")&&I.endsWith("]");WJ0.isIpAddress=q95});var DZ1=Y((BJ0)=>{Object.defineProperty(BJ0,"__esModule",{value:!0});BJ0.isValidHostLabel=void 0;var R95=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$"),U95=(I,d=!1)=>{if(!d)return R95.test(I);let G=I.split(".");for(let Z of G)if(!BJ0.isValidHostLabel(Z))return!1;return!0};BJ0.isValidHostLabel=U95});var VJ0=Y((AJ0)=>{Object.defineProperty(AJ0,"__esModule",{value:!0});AJ0.isVirtualHostableS3Bucket=void 0;var v95=YZ1(),E95=DZ1(),M95=(I,d=!1)=>{if(d){for(let G of I.split("."))if(!AJ0.isVirtualHostableS3Bucket(G))return!1;return!0}if(!E95.isValidHostLabel(I))return!1;if(I.length<3||I.length>63)return!1;if(I!==I.toLowerCase())return!1;if(v95.isIpAddress(I))return!1;return!0};AJ0.isVirtualHostableS3Bucket=M95});var _J0=Y((XJ0)=>{Object.defineProperty(XJ0,"__esModule",{value:!0});XJ0.parseArn=void 0;var S95=(I)=>{let d=I.split(":");if(d.length<6)return null;let[G,Z,C,W,w,...B]=d;if(G!=="arn"||Z===""||C===""||B[0]==="")return null;return{partition:Z,service:C,region:W,accountId:w,resourceId:B[0].includes("/")?B[0].split("/"):B}};XJ0.parseArn=S95});var DJ0=Y((pL)=>{Object.defineProperty(pL,"__esModule",{value:!0});var FZ1=x1();FZ1.__exportStar(VJ0(),pL);FZ1.__exportStar(_J0(),pL);FZ1.__exportStar(VZ1(),pL)});var gJ0=Y((HJ0)=>{Object.defineProperty(HJ0,"__esModule",{value:!0});HJ0.booleanEquals=void 0;var L95=(I,d)=>I===d;HJ0.booleanEquals=L95});var zJ0=Y((KJ0)=>{Object.defineProperty(KJ0,"__esModule",{value:!0});KJ0.getAttrPathList=void 0;var JJ0=fZ(),y95=(I)=>{let d=I.split("."),G=[];for(let Z of d){let C=Z.indexOf("[");if(C!==-1){if(Z.indexOf("]")!==Z.length-1)throw new JJ0.EndpointError(`Path: '${I}' does not end with ']'`);let W=Z.slice(C+1,-1);if(Number.isNaN(parseInt(W)))throw new JJ0.EndpointError(`Invalid array index: '${W}' in path: '${I}'`);if(C!==0)G.push(Z.slice(0,C));G.push(W)}else G.push(Z)}return G};KJ0.getAttrPathList=y95});var qJ0=Y((QJ0)=>{Object.defineProperty(QJ0,"__esModule",{value:!0});QJ0.getAttr=void 0;var P95=fZ(),$95=zJ0(),u95=(I,d)=>$95.getAttrPathList(d).reduce((G,Z)=>{if(typeof G!=="object")throw new P95.EndpointError(`Index '${Z}' in '${d}' not found in '${JSON.stringify(I)}'`);else if(Array.isArray(G))return G[parseInt(Z)];return G[Z]},I);QJ0.getAttr=u95});var vJ0=Y((RJ0)=>{Object.defineProperty(RJ0,"__esModule",{value:!0});RJ0.isSet=void 0;var T95=(I)=>I!=null;RJ0.isSet=T95});var SJ0=Y((EJ0)=>{Object.defineProperty(EJ0,"__esModule",{value:!0});EJ0.not=void 0;var O95=(I)=>!I;EJ0.not=O95});var yJ0=Y((LJ0)=>{Object.defineProperty(LJ0,"__esModule",{value:!0})});var $J0=Y((PJ0)=>{Object.defineProperty(PJ0,"__esModule",{value:!0});PJ0.HttpAuthLocation=void 0;var m95;(function(I){I.HEADER="header",I.QUERY="query"})(m95=PJ0.HttpAuthLocation||(PJ0.HttpAuthLocation={}))});var TJ0=Y((uJ0)=>{Object.defineProperty(uJ0,"__esModule",{value:!0})});var mJ0=Y((OJ0)=>{Object.defineProperty(OJ0,"__esModule",{value:!0})});var bJ0=Y((lJ0)=>{Object.defineProperty(lJ0,"__esModule",{value:!0})});var jJ0=Y((hJ0)=>{Object.defineProperty(hJ0,"__esModule",{value:!0})});var xJ0=Y((kJ0)=>{Object.defineProperty(kJ0,"__esModule",{value:!0})});var pJ0=Y((cJ0)=>{Object.defineProperty(cJ0,"__esModule",{value:!0})});var iJ0=Y((iL)=>{Object.defineProperty(iL,"__esModule",{value:!0});var JZ1=x1();JZ1.__exportStar(jJ0(),iL);JZ1.__exportStar(xJ0(),iL);JZ1.__exportStar(pJ0(),iL)});var rJ0=Y((nJ0)=>{Object.defineProperty(nJ0,"__esModule",{value:!0})});var sJ0=Y((aJ0)=>{Object.defineProperty(aJ0,"__esModule",{value:!0})});var eJ0=Y((oJ0)=>{Object.defineProperty(oJ0,"__esModule",{value:!0});oJ0.HostAddressType=void 0;var l95;(function(I){I.AAAA="AAAA",I.A="A"})(l95=oJ0.HostAddressType||(oJ0.HostAddressType={}))});var IK0=Y((tJ0)=>{Object.defineProperty(tJ0,"__esModule",{value:!0});tJ0.EndpointURLScheme=void 0;var b95;(function(I){I.HTTP="http",I.HTTPS="https"})(b95=tJ0.EndpointURLScheme||(tJ0.EndpointURLScheme={}))});var GK0=Y((dK0)=>{Object.defineProperty(dK0,"__esModule",{value:!0})});var CK0=Y((ZK0)=>{Object.defineProperty(ZK0,"__esModule",{value:!0})});var wK0=Y((WK0)=>{Object.defineProperty(WK0,"__esModule",{value:!0})});var AK0=Y((BK0)=>{Object.defineProperty(BK0,"__esModule",{value:!0})});var XK0=Y((VK0)=>{Object.defineProperty(VK0,"__esModule",{value:!0})});var _K0=Y((YK0)=>{Object.defineProperty(YK0,"__esModule",{value:!0})});var HK0=Y((DK0)=>{Object.defineProperty(DK0,"__esModule",{value:!0})});var FK0=Y((ZJ)=>{Object.defineProperty(ZJ,"__esModule",{value:!0});var nL=x1();nL.__exportStar(wK0(),ZJ);nL.__exportStar(AK0(),ZJ);nL.__exportStar(XK0(),ZJ);nL.__exportStar(_K0(),ZJ);nL.__exportStar(HK0(),ZJ)});var JK0=Y((gK0)=>{Object.defineProperty(gK0,"__esModule",{value:!0})});var NK0=Y((KK0)=>{Object.defineProperty(KK0,"__esModule",{value:!0})});var QK0=Y((zK0)=>{Object.defineProperty(zK0,"__esModule",{value:!0})});var qK0=Y((fK0)=>{Object.defineProperty(fK0,"__esModule",{value:!0})});var UK0=Y((RK0)=>{Object.defineProperty(RK0,"__esModule",{value:!0})});var EK0=Y((vK0)=>{Object.defineProperty(vK0,"__esModule",{value:!0})});var SK0=Y((MK0)=>{Object.defineProperty(MK0,"__esModule",{value:!0})});var yK0=Y((LK0)=>{Object.defineProperty(LK0,"__esModule",{value:!0})});var $K0=Y((PK0)=>{Object.defineProperty(PK0,"__esModule",{value:!0})});var TK0=Y((uK0)=>{Object.defineProperty(uK0,"__esModule",{value:!0})});var mK0=Y((OK0)=>{Object.defineProperty(OK0,"__esModule",{value:!0})});var bK0=Y((lK0)=>{Object.defineProperty(lK0,"__esModule",{value:!0})});var jK0=Y((hK0)=>{Object.defineProperty(hK0,"__esModule",{value:!0});hK0.RequestHandlerProtocol=void 0;var h95;(function(I){I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0"})(h95=hK0.RequestHandlerProtocol||(hK0.RequestHandlerProtocol={}))});var xK0=Y((kK0)=>{Object.defineProperty(kK0,"__esModule",{value:!0})});var pK0=Y((cK0)=>{Object.defineProperty(cK0,"__esModule",{value:!0})});var iK0=Y((i5)=>{Object.defineProperty(i5,"__esModule",{value:!0});var X9=x1();X9.__exportStar(yJ0(),i5);X9.__exportStar($J0(),i5);X9.__exportStar(TJ0(),i5);X9.__exportStar(mJ0(),i5);X9.__exportStar(bJ0(),i5);X9.__exportStar(iJ0(),i5);X9.__exportStar(rJ0(),i5);X9.__exportStar(sJ0(),i5);X9.__exportStar(eJ0(),i5);X9.__exportStar(IK0(),i5);X9.__exportStar(GK0(),i5);X9.__exportStar(CK0(),i5);X9.__exportStar(FK0(),i5);X9.__exportStar(JK0(),i5);X9.__exportStar(NK0(),i5);X9.__exportStar(QK0(),i5);X9.__exportStar(qK0(),i5);X9.__exportStar(UK0(),i5);X9.__exportStar(EK0(),i5);X9.__exportStar(SK0(),i5);X9.__exportStar(yK0(),i5);X9.__exportStar($K0(),i5);X9.__exportStar(TK0(),i5);X9.__exportStar(mK0(),i5);X9.__exportStar(bK0(),i5);X9.__exportStar(jK0(),i5);X9.__exportStar(xK0(),i5);X9.__exportStar(pK0(),i5)});var aK0=Y((nK0)=>{Object.defineProperty(nK0,"__esModule",{value:!0});nK0.parseURL=void 0;var fZ1=iK0(),j95=YZ1(),QZ1={[fZ1.EndpointURLScheme.HTTP]:80,[fZ1.EndpointURLScheme.HTTPS]:443},k95=(I)=>{let d=(()=>{try{if(I instanceof URL)return I;if(typeof I==="object"&&"hostname"in I){let{hostname:F,port:g,protocol:J="",path:K="",query:Q={}}=I,E=new URL(`${J}//${F}${g?`:${g}`:""}${K}`);return E.search=Object.entries(Q).map(([S,P])=>`${S}=${P}`).join("&"),E}return new URL(I)}catch(F){return null}})();if(!d)return console.error(`Unable to parse ${JSON.stringify(I)} as a whatwg URL.`),null;let G=d.href,{host:Z,hostname:C,pathname:W,protocol:w,search:B}=d;if(B)return null;let A=w.slice(0,-1);if(!Object.values(fZ1.EndpointURLScheme).includes(A))return null;let V=j95.isIpAddress(C),X=G.includes(`${Z}:${QZ1[A]}`)||typeof I==="string"&&I.includes(`${Z}:${QZ1[A]}`),_=`${Z}${X?`:${QZ1[A]}`:""}`;return{scheme:A,authority:_,path:W,normalizedPath:W.endsWith("/")?W:`${W}/`,isIp:V}};nK0.parseURL=k95});var eK0=Y((sK0)=>{Object.defineProperty(sK0,"__esModule",{value:!0});sK0.stringEquals=void 0;var x95=(I,d)=>I===d;sK0.stringEquals=x95});var dN0=Y((tK0)=>{Object.defineProperty(tK0,"__esModule",{value:!0});tK0.substring=void 0;var c95=(I,d,G,Z)=>{if(d>=G||I.length{Object.defineProperty(GN0,"__esModule",{value:!0});GN0.uriEncode=void 0;var p95=(I)=>encodeURIComponent(I).replace(/[!*'()]/g,(d)=>`%${d.charCodeAt(0).toString(16).toUpperCase()}`);GN0.uriEncode=p95});var qZ1=Y((kC)=>{Object.defineProperty(kC,"__esModule",{value:!0});kC.aws=void 0;var IB=x1();kC.aws=IB.__importStar(DJ0());IB.__exportStar(gJ0(),kC);IB.__exportStar(qJ0(),kC);IB.__exportStar(vJ0(),kC);IB.__exportStar(DZ1(),kC);IB.__exportStar(SJ0(),kC);IB.__exportStar(aK0(),kC);IB.__exportStar(eK0(),kC);IB.__exportStar(dN0(),kC);IB.__exportStar(CN0(),kC)});var RZ1=Y((wN0)=>{Object.defineProperty(wN0,"__esModule",{value:!0});wN0.evaluateTemplate=void 0;var i95=qZ1(),n95=(I,d)=>{let G=[],Z={...d.endpointParams,...d.referenceRecord},C=0;while(C{Object.defineProperty(AN0,"__esModule",{value:!0});AN0.getReferenceValue=void 0;var r95=({ref:I},d)=>{return{...d.endpointParams,...d.referenceRecord}[I]};AN0.getReferenceValue=r95});var rL=Y((YN0)=>{Object.defineProperty(YN0,"__esModule",{value:!0});YN0.evaluateExpression=void 0;var a95=fZ(),s95=UZ1(),o95=RZ1(),e95=XN0(),t95=(I,d,G)=>{if(typeof I==="string")return o95.evaluateTemplate(I,G);else if(I.fn)return s95.callFunction(I,G);else if(I.ref)return e95.getReferenceValue(I,G);throw new a95.EndpointError(`'${d}': ${String(I)} is not a string, function or reference.`)};YN0.evaluateExpression=t95});var UZ1=Y((DN0)=>{Object.defineProperty(DN0,"__esModule",{value:!0});DN0.callFunction=void 0;var I35=x1(),d35=I35.__importStar(qZ1()),G35=rL(),Z35=({fn:I,argv:d},G)=>{let Z=d.map((C)=>["boolean","number"].includes(typeof C)?C:G35.evaluateExpression(C,"arg",G));return I.split(".").reduce((C,W)=>C[W],d35)(...Z)};DN0.callFunction=Z35});var JN0=Y((FN0)=>{Object.defineProperty(FN0,"__esModule",{value:!0});FN0.evaluateCondition=void 0;var vZ1=cL(),C35=fZ(),W35=UZ1(),w35=({assign:I,...d},G)=>{var Z,C;if(I&&I in G.referenceRecord)throw new C35.EndpointError(`'${I}' is already defined in Reference Record.`);let W=W35.callFunction(d,G);return(C=(Z=G.logger)===null||Z===void 0?void 0:Z.debug)===null||C===void 0||C.call(Z,vZ1.debugId,`evaluateCondition: ${vZ1.toDebugString(d)} = ${vZ1.toDebugString(W)}`),{result:W===""?!0:!!W,...I!=null&&{toAssign:{name:I,value:W}}}};FN0.evaluateCondition=w35});var Fp=Y((NN0)=>{Object.defineProperty(NN0,"__esModule",{value:!0});NN0.evaluateConditions=void 0;var KN0=cL(),B35=JN0(),A35=(I=[],d)=>{var G,Z;let C={};for(let W of I){let{result:w,toAssign:B}=B35.evaluateCondition(W,{...d,referenceRecord:{...d.referenceRecord,...C}});if(!w)return{result:w};if(B)C[B.name]=B.value,(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,KN0.debugId,`assign: ${B.name} := ${KN0.toDebugString(B.value)}`)}return{result:!0,referenceRecord:C}};NN0.evaluateConditions=A35});var qN0=Y((QN0)=>{Object.defineProperty(QN0,"__esModule",{value:!0});QN0.getEndpointHeaders=void 0;var V35=fZ(),X35=rL(),Y35=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:C.map((W)=>{let w=X35.evaluateExpression(W,"Header value entry",d);if(typeof w!=="string")throw new V35.EndpointError(`Header '${Z}' value '${w}' is not a string`);return w})}),{});QN0.getEndpointHeaders=Y35});var vN0=Y((UN0)=>{Object.defineProperty(UN0,"__esModule",{value:!0});UN0.getEndpointProperty=void 0;var RN0=fZ(),_35=RZ1(),D35=MZ1(),H35=(I,d)=>{if(Array.isArray(I))return I.map((G)=>UN0.getEndpointProperty(G,d));switch(typeof I){case"string":return _35.evaluateTemplate(I,d);case"object":if(I===null)throw new RN0.EndpointError(`Unexpected endpoint property: ${I}`);return D35.getEndpointProperties(I,d);case"boolean":return I;default:throw new RN0.EndpointError(`Unexpected endpoint property type: ${typeof I}`)}};UN0.getEndpointProperty=H35});var MZ1=Y((EN0)=>{Object.defineProperty(EN0,"__esModule",{value:!0});EN0.getEndpointProperties=void 0;var F35=vN0(),g35=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:F35.getEndpointProperty(C,d)}),{});EN0.getEndpointProperties=g35});var yN0=Y((SN0)=>{Object.defineProperty(SN0,"__esModule",{value:!0});SN0.getEndpointUrl=void 0;var J35=fZ(),K35=rL(),N35=(I,d)=>{let G=K35.evaluateExpression(I,"Endpoint URL",d);if(typeof G==="string")try{return new URL(G)}catch(Z){throw console.error(`Failed to construct URL with ${G}`,Z),Z}throw new J35.EndpointError(`Endpoint URL must be a string, got ${typeof G}`)};SN0.getEndpointUrl=N35});var TN0=Y(($N0)=>{Object.defineProperty($N0,"__esModule",{value:!0});$N0.evaluateEndpointRule=void 0;var PN0=cL(),z35=Fp(),Q35=qN0(),f35=MZ1(),q35=yN0(),R35=(I,d)=>{var G,Z;let{conditions:C,endpoint:W}=I,{result:w,referenceRecord:B}=z35.evaluateConditions(C,d);if(!w)return;let A={...d,referenceRecord:{...d.referenceRecord,...B}},{url:V,properties:X,headers:_}=W;return(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,PN0.debugId,`Resolving endpoint from template: ${PN0.toDebugString(W)}`),{..._!=null&&{headers:Q35.getEndpointHeaders(_,A)},...X!=null&&{properties:f35.getEndpointProperties(X,A)},url:q35.getEndpointUrl(V,A)}};$N0.evaluateEndpointRule=R35});var lN0=Y((ON0)=>{Object.defineProperty(ON0,"__esModule",{value:!0});ON0.evaluateErrorRule=void 0;var U35=fZ(),v35=Fp(),E35=rL(),M35=(I,d)=>{let{conditions:G,error:Z}=I,{result:C,referenceRecord:W}=v35.evaluateConditions(G,d);if(!C)return;throw new U35.EndpointError(E35.evaluateExpression(Z,"Error",{...d,referenceRecord:{...d.referenceRecord,...W}}))};ON0.evaluateErrorRule=M35});var jN0=Y((bN0)=>{Object.defineProperty(bN0,"__esModule",{value:!0});bN0.evaluateTreeRule=void 0;var S35=Fp(),L35=SZ1(),y35=(I,d)=>{let{conditions:G,rules:Z}=I,{result:C,referenceRecord:W}=S35.evaluateConditions(G,d);if(!C)return;return L35.evaluateRules(Z,{...d,referenceRecord:{...d.referenceRecord,...W}})};bN0.evaluateTreeRule=y35});var SZ1=Y((xN0)=>{Object.defineProperty(xN0,"__esModule",{value:!0});xN0.evaluateRules=void 0;var kN0=fZ(),P35=TN0(),$35=lN0(),u35=jN0(),T35=(I,d)=>{for(let G of I)if(G.type==="endpoint"){let Z=P35.evaluateEndpointRule(G,d);if(Z)return Z}else if(G.type==="error")$35.evaluateErrorRule(G,d);else if(G.type==="tree"){let Z=u35.evaluateTreeRule(G,d);if(Z)return Z}else throw new kN0.EndpointError(`Unknown endpoint rule: ${G}`);throw new kN0.EndpointError("Rules evaluation failed")};xN0.evaluateRules=T35});var pN0=Y((LZ1)=>{Object.defineProperty(LZ1,"__esModule",{value:!0});var O35=x1();O35.__exportStar(SZ1(),LZ1)});var rN0=Y((iN0)=>{Object.defineProperty(iN0,"__esModule",{value:!0});iN0.resolveEndpoint=void 0;var gp=cL(),m35=fZ(),l35=pN0(),b35=(I,d)=>{var G,Z,C,W,w,B;let{endpointParams:A,logger:V}=d,{parameters:X,rules:_}=I;(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,`${gp.debugId} Initial EndpointParams: ${gp.toDebugString(A)}`);let F=Object.entries(X).filter(([,K])=>K.default!=null).map(([K,Q])=>[K,Q.default]);if(F.length>0)for(let[K,Q]of F)A[K]=(C=A[K])!==null&&C!==void 0?C:Q;let g=Object.entries(X).filter(([,K])=>K.required).map(([K])=>K);for(let K of g)if(A[K]==null)throw new m35.EndpointError(`Missing required parameter: '${K}'`);let J=l35.evaluateRules(_,{endpointParams:A,logger:V,referenceRecord:{}});if((W=d.endpointParams)===null||W===void 0?void 0:W.Endpoint)try{let K=new URL(d.endpointParams.Endpoint),{protocol:Q,port:E}=K;J.url.protocol=Q,J.url.port=E}catch(K){}return(B=(w=d.logger)===null||w===void 0?void 0:w.debug)===null||B===void 0||B.call(w,`${gp.debugId} Resolved endpoint: ${gp.toDebugString(J)}`),J};iN0.resolveEndpoint=b35});var PZ1=Y((aL)=>{Object.defineProperty(aL,"__esModule",{value:!0});var yZ1=x1();yZ1.__exportStar(VZ1(),aL);yZ1.__exportStar(rN0(),aL);yZ1.__exportStar(fZ(),aL)});var oN0=Y((aN0)=>{Object.defineProperty(aN0,"__esModule",{value:!0});aN0.UA_ESCAPE_REGEX=aN0.SPACE=aN0.X_AMZ_USER_AGENT=aN0.USER_AGENT=void 0;aN0.USER_AGENT="user-agent";aN0.X_AMZ_USER_AGENT="x-amz-user-agent";aN0.SPACE=" ";aN0.UA_ESCAPE_REGEX=/[^\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g});var Gz0=Y((eN0)=>{Object.defineProperty(eN0,"__esModule",{value:!0});eN0.getUserAgentPlugin=eN0.getUserAgentMiddlewareOptions=eN0.userAgentMiddleware=void 0;var x35=J8(),c35=PZ1(),o_=oN0(),p35=(I)=>(d,G)=>async(Z)=>{var C,W;let{request:w}=Z;if(!x35.HttpRequest.isInstance(w))return d(Z);let{headers:B}=w,A=((C=G===null||G===void 0?void 0:G.userAgent)===null||C===void 0?void 0:C.map($Z1))||[],V=(await I.defaultUserAgentProvider()).map($Z1),X=((W=I===null||I===void 0?void 0:I.customUserAgent)===null||W===void 0?void 0:W.map($Z1))||[],_=c35.getUserAgentPrefix(),F=(_?[_]:[]).concat([...V,...A,...X]).join(o_.SPACE),g=[...V.filter((J)=>J.startsWith("aws-sdk-")),...X].join(o_.SPACE);if(I.runtime!=="browser"){if(g)B[o_.X_AMZ_USER_AGENT]=B[o_.X_AMZ_USER_AGENT]?`${B[o_.USER_AGENT]} ${g}`:g;B[o_.USER_AGENT]=F}else B[o_.X_AMZ_USER_AGENT]=F;return d({...Z,request:w})};eN0.userAgentMiddleware=p35;var $Z1=([I,d])=>{let G=I.indexOf("/"),Z=I.substring(0,G),C=I.substring(G+1);if(Z==="api")C=C.toLowerCase();return[Z,C,d].filter((W)=>W&&W.length>0).map((W)=>W===null||W===void 0?void 0:W.replace(o_.UA_ESCAPE_REGEX,"_")).join("/")};eN0.getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};var i35=(I)=>({applyToStack:(d)=>{d.add(eN0.userAgentMiddleware(I),eN0.getUserAgentMiddlewareOptions)}});eN0.getUserAgentPlugin=i35});var Cz0=Y((Jp)=>{Object.defineProperty(Jp,"__esModule",{value:!0});var Zz0=x1();Zz0.__exportStar(Lg0(),Jp);Zz0.__exportStar(Gz0(),Jp)});var Bz0=Y((Wz0)=>{Object.defineProperty(Wz0,"__esModule",{value:!0});Wz0.resolveClientEndpointParameters=void 0;var n35=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,defaultSigningName:"awsssooidc"}};Wz0.resolveClientEndpointParameters=n35});var Az0=Y((t23,r35)=>{r35.exports={name:"@aws-sdk/client-sso-oidc",description:"AWS SDK for JavaScript Sso Oidc Client for Node.js, Browser and React Native",version:"3.341.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sso-oidc"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/config-resolver":"3.341.0","@aws-sdk/fetch-http-handler":"3.341.0","@aws-sdk/hash-node":"3.341.0","@aws-sdk/invalid-dependency":"3.341.0","@aws-sdk/middleware-content-length":"3.341.0","@aws-sdk/middleware-endpoint":"3.341.0","@aws-sdk/middleware-host-header":"3.341.0","@aws-sdk/middleware-logger":"3.341.0","@aws-sdk/middleware-recursion-detection":"3.341.0","@aws-sdk/middleware-retry":"3.341.0","@aws-sdk/middleware-serde":"3.341.0","@aws-sdk/middleware-stack":"3.341.0","@aws-sdk/middleware-user-agent":"3.341.0","@aws-sdk/node-config-provider":"3.341.0","@aws-sdk/node-http-handler":"3.341.0","@aws-sdk/smithy-client":"3.341.0","@aws-sdk/types":"3.341.0","@aws-sdk/url-parser":"3.341.0","@aws-sdk/util-base64":"3.310.0","@aws-sdk/util-body-length-browser":"3.310.0","@aws-sdk/util-body-length-node":"3.310.0","@aws-sdk/util-defaults-mode-browser":"3.341.0","@aws-sdk/util-defaults-mode-node":"3.341.0","@aws-sdk/util-endpoints":"3.341.0","@aws-sdk/util-retry":"3.341.0","@aws-sdk/util-user-agent-browser":"3.341.0","@aws-sdk/util-user-agent-node":"3.341.0","@aws-sdk/util-utf8":"3.310.0","@smithy/protocol-http":"^1.0.1","@smithy/types":"^1.0.0",tslib:"^2.5.0"},devDependencies:{"@aws-sdk/service-client-documentation-generator":"3.310.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sso-oidc",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sso-oidc"}}});var _z0=Y((Vz0,Xz0)=>{Object.defineProperty(Vz0,"__esModule",{value:!0});Vz0.isCrtAvailable=void 0;var a35=()=>{try{if(typeof Xz0!=="undefined"&&(()=>{throw new Error("Cannot require module "+"aws-crt");})())return["md/crt-avail"];return null}catch(I){return null}};Vz0.isCrtAvailable=a35});var Kz0=Y((Hz0)=>{Object.defineProperty(Hz0,"__esModule",{value:!0});Hz0.defaultUserAgent=Hz0.UA_APP_ID_INI_NAME=Hz0.UA_APP_ID_ENV_NAME=void 0;var s35=QZ(),Dz0=B1("os"),uZ1=B1("process"),o35=_z0();Hz0.UA_APP_ID_ENV_NAME="AWS_SDK_UA_APP_ID";Hz0.UA_APP_ID_INI_NAME="sdk-ua-app-id";var e35=({serviceId:I,clientVersion:d})=>{let G=[["aws-sdk-js",d],[`os/${Dz0.platform()}`,Dz0.release()],["lang/js"],["md/nodejs",`${uZ1.versions.node}`]],Z=o35.isCrtAvailable();if(Z)G.push(Z);if(I)G.push([`api/${I}`,d]);if(uZ1.env.AWS_EXECUTION_ENV)G.push([`exec-env/${uZ1.env.AWS_EXECUTION_ENV}`]);let C=s35.loadConfig({environmentVariableSelector:(w)=>w[Hz0.UA_APP_ID_ENV_NAME],configFileSelector:(w)=>w[Hz0.UA_APP_ID_INI_NAME],default:void 0})(),W=void 0;return async()=>{if(!W){let w=await C;W=w?[...G,[`app/${w}`]]:[...G]}return W}};Hz0.defaultUserAgent=e35});var Pz0=Y((Lz0)=>{Object.defineProperty(Lz0,"__esModule",{value:!0});Lz0.ruleSet=void 0;var vz0="required",UV="fn",vV="argv",cf="ref",TZ1="PartitionResult",dB="tree",sL="error",oL="endpoint",Nz0={[vz0]:!1,type:"String"},zz0={[vz0]:!0,default:!1,type:"Boolean"},Ez0={[cf]:"Endpoint"},Mz0={[UV]:"booleanEquals",[vV]:[{[cf]:"UseFIPS"},!0]},Sz0={[UV]:"booleanEquals",[vV]:[{[cf]:"UseDualStack"},!0]},GB={},Qz0={[UV]:"booleanEquals",[vV]:[!0,{[UV]:"getAttr",[vV]:[{[cf]:TZ1},"supportsFIPS"]}]},fz0={[UV]:"booleanEquals",[vV]:[!0,{[UV]:"getAttr",[vV]:[{[cf]:TZ1},"supportsDualStack"]}]},qz0=[Ez0],Rz0=[Mz0],Uz0=[Sz0],t35={version:"1.0",parameters:{Region:Nz0,UseDualStack:zz0,UseFIPS:zz0,Endpoint:Nz0},rules:[{conditions:[{[UV]:"aws.partition",[vV]:[{[cf]:"Region"}],assign:TZ1}],type:dB,rules:[{conditions:[{[UV]:"isSet",[vV]:qz0},{[UV]:"parseURL",[vV]:qz0,assign:"url"}],type:dB,rules:[{conditions:Rz0,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:sL},{type:dB,rules:[{conditions:Uz0,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:sL},{endpoint:{url:Ez0,properties:GB,headers:GB},type:oL}]}]},{conditions:[Mz0,Sz0],type:dB,rules:[{conditions:[Qz0,fz0],type:dB,rules:[{endpoint:{url:"https://oidc-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:GB,headers:GB},type:oL}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:sL}]},{conditions:Rz0,type:dB,rules:[{conditions:[Qz0],type:dB,rules:[{type:dB,rules:[{endpoint:{url:"https://oidc-fips.{Region}.{PartitionResult#dnsSuffix}",properties:GB,headers:GB},type:oL}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:sL}]},{conditions:Uz0,type:dB,rules:[{conditions:[fz0],type:dB,rules:[{endpoint:{url:"https://oidc.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:GB,headers:GB},type:oL}]},{error:"DualStack is enabled but this partition does not support DualStack",type:sL}]},{endpoint:{url:"https://oidc.{Region}.{PartitionResult#dnsSuffix}",properties:GB,headers:GB},type:oL}]}]};Lz0.ruleSet=t35});var Tz0=Y(($z0)=>{Object.defineProperty($z0,"__esModule",{value:!0});$z0.defaultEndpointResolver=void 0;var I65=PZ1(),d65=Pz0(),G65=(I,d={})=>{return I65.resolveEndpoint(d65.ruleSet,{endpointParams:I,logger:d.logger})};$z0.defaultEndpointResolver=G65});var hz0=Y((lz0)=>{Object.defineProperty(lz0,"__esModule",{value:!0});lz0.getRuntimeConfig=void 0;var Z65=v0(),C65=FV(),Oz0=IJ(),mz0=hC(),W65=Tz0(),w65=(I)=>({apiVersion:"2019-06-10",base64Decoder:I?.base64Decoder??Oz0.fromBase64,base64Encoder:I?.base64Encoder??Oz0.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??W65.defaultEndpointResolver,logger:I?.logger??new Z65.NoOpLogger,serviceId:I?.serviceId??"SSO OIDC",urlParser:I?.urlParser??C65.parseUrl,utf8Decoder:I?.utf8Decoder??mz0.fromUtf8,utf8Encoder:I?.utf8Encoder??mz0.toUtf8});lz0.getRuntimeConfig=w65});var pz0=Y((xz0)=>{Object.defineProperty(xz0,"__esModule",{value:!0});xz0.getRuntimeConfig=void 0;var B65=x1(),A65=B65.__importDefault(Az0()),Kp=Cd(),V65=og(),jz0=dG(),eL=QZ(),kz0=eg(),X65=tg(),Y65=Wd(),_65=Kz0(),D65=hz0(),H65=v0(),F65=dJ(),g65=v0(),J65=(I)=>{g65.emitWarningIfUnsupportedVersion(process.version);let d=F65.resolveDefaultsModeConfig(I),G=()=>d().then(H65.loadConfigsForDefaultMode),Z=D65.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??X65.calculateBodyLength,defaultUserAgentProvider:I?.defaultUserAgentProvider??_65.defaultUserAgent({serviceId:Z.serviceId,clientVersion:A65.default.version}),maxAttempts:I?.maxAttempts??eL.loadConfig(jz0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??eL.loadConfig(Kp.NODE_REGION_CONFIG_OPTIONS,Kp.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new kz0.NodeHttpHandler(G),retryMode:I?.retryMode??eL.loadConfig({...jz0.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||Y65.DEFAULT_RETRY_MODE}),sha256:I?.sha256??V65.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??kz0.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??eL.loadConfig(Kp.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??eL.loadConfig(Kp.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};xz0.getRuntimeConfig=J65});var mZ1=Y((OZ1)=>{Object.defineProperty(OZ1,"__esModule",{value:!0});OZ1.SSOOIDCClient=OZ1.__Client=void 0;var K65=Cd(),N65=jg(),z65=u2(),iz0=Fg0(),Q65=Qg0(),f65=Eg0(),nz0=dG(),rz0=Cz0(),az0=v0();Object.defineProperty(OZ1,"__Client",{enumerable:!0,get:function(){return az0.Client}});var q65=Bz0(),R65=pz0();class sz0 extends az0.Client{constructor(I){let d=R65.getRuntimeConfig(I),G=q65.resolveClientEndpointParameters(d),Z=K65.resolveRegionConfig(G),C=z65.resolveEndpointConfig(Z),W=nz0.resolveRetryConfig(C),w=iz0.resolveHostHeaderConfig(W),B=rz0.resolveUserAgentConfig(w);super(B);this.config=B,this.middlewareStack.use(nz0.getRetryPlugin(this.config)),this.middlewareStack.use(N65.getContentLengthPlugin(this.config)),this.middlewareStack.use(iz0.getHostHeaderPlugin(this.config)),this.middlewareStack.use(Q65.getLoggerPlugin(this.config)),this.middlewareStack.use(f65.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(rz0.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}OZ1.SSOOIDCClient=sz0});var tz0=Y((ez0)=>{Object.defineProperty(ez0,"__esModule",{value:!0})});var dQ0=Y((IQ0)=>{Object.defineProperty(IQ0,"__esModule",{value:!0});IQ0.HttpAuthLocation=void 0;var U65;(function(I){I.HEADER="header",I.QUERY="query"})(U65=IQ0.HttpAuthLocation||(IQ0.HttpAuthLocation={}))});var ZQ0=Y((GQ0)=>{Object.defineProperty(GQ0,"__esModule",{value:!0})});var WQ0=Y((CQ0)=>{Object.defineProperty(CQ0,"__esModule",{value:!0})});var BQ0=Y((wQ0)=>{Object.defineProperty(wQ0,"__esModule",{value:!0})});var VQ0=Y((AQ0)=>{Object.defineProperty(AQ0,"__esModule",{value:!0})});var YQ0=Y((XQ0)=>{Object.defineProperty(XQ0,"__esModule",{value:!0})});var DQ0=Y((_Q0)=>{Object.defineProperty(_Q0,"__esModule",{value:!0})});var FQ0=Y((HQ0)=>{Object.defineProperty(HQ0,"__esModule",{value:!0})});var gQ0=Y((tL)=>{Object.defineProperty(tL,"__esModule",{value:!0});var bZ1=x1();bZ1.__exportStar(YQ0(),tL);bZ1.__exportStar(DQ0(),tL);bZ1.__exportStar(FQ0(),tL)});var KQ0=Y((JQ0)=>{Object.defineProperty(JQ0,"__esModule",{value:!0})});var zQ0=Y((NQ0)=>{Object.defineProperty(NQ0,"__esModule",{value:!0})});var fQ0=Y((QQ0)=>{Object.defineProperty(QQ0,"__esModule",{value:!0});QQ0.EndpointURLScheme=void 0;var v65;(function(I){I.HTTP="http",I.HTTPS="https"})(v65=QQ0.EndpointURLScheme||(QQ0.EndpointURLScheme={}))});var RQ0=Y((qQ0)=>{Object.defineProperty(qQ0,"__esModule",{value:!0})});var vQ0=Y((UQ0)=>{Object.defineProperty(UQ0,"__esModule",{value:!0})});var MQ0=Y((EQ0)=>{Object.defineProperty(EQ0,"__esModule",{value:!0})});var LQ0=Y((SQ0)=>{Object.defineProperty(SQ0,"__esModule",{value:!0})});var PQ0=Y((yQ0)=>{Object.defineProperty(yQ0,"__esModule",{value:!0})});var $Q0=Y((CJ)=>{Object.defineProperty(CJ,"__esModule",{value:!0});var Iy=x1();Iy.__exportStar(RQ0(),CJ);Iy.__exportStar(vQ0(),CJ);Iy.__exportStar(MQ0(),CJ);Iy.__exportStar(LQ0(),CJ);Iy.__exportStar(PQ0(),CJ)});var TQ0=Y((uQ0)=>{Object.defineProperty(uQ0,"__esModule",{value:!0})});var mQ0=Y((OQ0)=>{Object.defineProperty(OQ0,"__esModule",{value:!0});OQ0.FieldPosition=void 0;var E65;(function(I){I[I.HEADER=0]="HEADER",I[I.TRAILER=1]="TRAILER"})(E65=OQ0.FieldPosition||(OQ0.FieldPosition={}))});var bQ0=Y((lQ0)=>{Object.defineProperty(lQ0,"__esModule",{value:!0})});var jQ0=Y((hQ0)=>{Object.defineProperty(hQ0,"__esModule",{value:!0})});var xQ0=Y((Np)=>{Object.defineProperty(Np,"__esModule",{value:!0});var kQ0=x1();kQ0.__exportStar(bQ0(),Np);kQ0.__exportStar(jQ0(),Np)});var pQ0=Y((cQ0)=>{Object.defineProperty(cQ0,"__esModule",{value:!0})});var nQ0=Y((iQ0)=>{Object.defineProperty(iQ0,"__esModule",{value:!0})});var aQ0=Y((rQ0)=>{Object.defineProperty(rQ0,"__esModule",{value:!0})});var oQ0=Y((sQ0)=>{Object.defineProperty(sQ0,"__esModule",{value:!0})});var tQ0=Y((eQ0)=>{Object.defineProperty(eQ0,"__esModule",{value:!0})});var df0=Y((If0)=>{Object.defineProperty(If0,"__esModule",{value:!0})});var Zf0=Y((Gf0)=>{Object.defineProperty(Gf0,"__esModule",{value:!0})});var Wf0=Y((Cf0)=>{Object.defineProperty(Cf0,"__esModule",{value:!0})});var Bf0=Y((wf0)=>{Object.defineProperty(wf0,"__esModule",{value:!0})});var Vf0=Y((Af0)=>{Object.defineProperty(Af0,"__esModule",{value:!0})});var Yf0=Y((Xf0)=>{Object.defineProperty(Xf0,"__esModule",{value:!0})});var Df0=Y((_f0)=>{Object.defineProperty(_f0,"__esModule",{value:!0})});var Ff0=Y((Hf0)=>{Object.defineProperty(Hf0,"__esModule",{value:!0})});var Jf0=Y((gf0)=>{Object.defineProperty(gf0,"__esModule",{value:!0});gf0.RequestHandlerProtocol=void 0;var M65;(function(I){I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0"})(M65=gf0.RequestHandlerProtocol||(gf0.RequestHandlerProtocol={}))});var Nf0=Y((Kf0)=>{Object.defineProperty(Kf0,"__esModule",{value:!0})});var Qf0=Y((zf0)=>{Object.defineProperty(zf0,"__esModule",{value:!0})});var qf0=Y((ff0)=>{Object.defineProperty(ff0,"__esModule",{value:!0})});var Uf0=Y((Rf0)=>{Object.defineProperty(Rf0,"__esModule",{value:!0})});var Ef0=Y((vf0)=>{Object.defineProperty(vf0,"__esModule",{value:!0})});var Mf0=Y((A5)=>{Object.defineProperty(A5,"__esModule",{value:!0});var f5=x1();f5.__exportStar(tz0(),A5);f5.__exportStar(dQ0(),A5);f5.__exportStar(ZQ0(),A5);f5.__exportStar(WQ0(),A5);f5.__exportStar(BQ0(),A5);f5.__exportStar(VQ0(),A5);f5.__exportStar(gQ0(),A5);f5.__exportStar(KQ0(),A5);f5.__exportStar(zQ0(),A5);f5.__exportStar(fQ0(),A5);f5.__exportStar($Q0(),A5);f5.__exportStar(TQ0(),A5);f5.__exportStar(mQ0(),A5);f5.__exportStar(xQ0(),A5);f5.__exportStar(pQ0(),A5);f5.__exportStar(nQ0(),A5);f5.__exportStar(aQ0(),A5);f5.__exportStar(oQ0(),A5);f5.__exportStar(tQ0(),A5);f5.__exportStar(df0(),A5);f5.__exportStar(Zf0(),A5);f5.__exportStar(Wf0(),A5);f5.__exportStar(Bf0(),A5);f5.__exportStar(Vf0(),A5);f5.__exportStar(Yf0(),A5);f5.__exportStar(Df0(),A5);f5.__exportStar(Ff0(),A5);f5.__exportStar(Jf0(),A5);f5.__exportStar(Nf0(),A5);f5.__exportStar(Qf0(),A5);f5.__exportStar(qf0(),A5);f5.__exportStar(Uf0(),A5);f5.__exportStar(Ef0(),A5)});var Pf0=Y((Lf0)=>{Object.defineProperty(Lf0,"__esModule",{value:!0});Lf0.Field=void 0;var S65=Mf0();class Sf0{constructor({name:I,kind:d=S65.FieldPosition.HEADER,values:G=[]}){this.name=I,this.kind=d,this.values=G}add(I){this.values.push(I)}set(I){this.values=I}remove(I){this.values=this.values.filter((d)=>d!==I)}toString(){return this.values.map((I)=>I.includes(",")||I.includes(" ")?`"${I}"`:I).join(", ")}get(){return this.values}}Lf0.Field=Sf0});var Of0=Y((uf0)=>{Object.defineProperty(uf0,"__esModule",{value:!0});uf0.Fields=void 0;class $f0{constructor({fields:I=[],encoding:d="utf-8"}){this.entries={},I.forEach(this.setField.bind(this)),this.encoding=d}setField(I){this.entries[I.name.toLowerCase()]=I}getField(I){return this.entries[I.toLowerCase()]}removeField(I){delete this.entries[I.toLowerCase()]}getByType(I){return Object.values(this.entries).filter((d)=>d.kind===I)}}uf0.Fields=$f0});var lf0=Y((mf0)=>{Object.defineProperty(mf0,"__esModule",{value:!0})});var jf0=Y((bf0)=>{Object.defineProperty(bf0,"__esModule",{value:!0});bf0.HttpRequest=void 0;class xZ1{constructor(I){this.method=I.method||"GET",this.hostname=I.hostname||"localhost",this.port=I.port,this.query=I.query||{},this.headers=I.headers||{},this.body=I.body,this.protocol=I.protocol?I.protocol.slice(-1)!==":"?`${I.protocol}:`:I.protocol:"https:",this.path=I.path?I.path.charAt(0)!=="/"?`/${I.path}`:I.path:"/",this.username=I.username,this.password=I.password,this.fragment=I.fragment}static isInstance(I){if(!I)return!1;let d=I;return"method"in d&&"protocol"in d&&"hostname"in d&&"path"in d&&typeof d.query==="object"&&typeof d.headers==="object"}clone(){let I=new xZ1({...this,headers:{...this.headers}});if(I.query)I.query=L65(I.query);return I}}bf0.HttpRequest=xZ1;function L65(I){return Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{})}});var pf0=Y((xf0)=>{Object.defineProperty(xf0,"__esModule",{value:!0});xf0.HttpResponse=void 0;class kf0{constructor(I){this.statusCode=I.statusCode,this.reason=I.reason,this.headers=I.headers||{},this.body=I.body}static isInstance(I){if(!I)return!1;let d=I;return typeof d.statusCode==="number"&&typeof d.headers==="object"}}xf0.HttpResponse=kf0});var rf0=Y((if0)=>{Object.defineProperty(if0,"__esModule",{value:!0});if0.isValidHostname=void 0;function y65(I){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(I)}if0.isValidHostname=y65});var sf0=Y((af0)=>{Object.defineProperty(af0,"__esModule",{value:!0})});var of0=Y((EV)=>{Object.defineProperty(EV,"__esModule",{value:!0});var WJ=x1();WJ.__exportStar(Pf0(),EV);WJ.__exportStar(Of0(),EV);WJ.__exportStar(lf0(),EV);WJ.__exportStar(jf0(),EV);WJ.__exportStar(pf0(),EV);WJ.__exportStar(rf0(),EV);WJ.__exportStar(sf0(),EV)});var zp=Y((pZ1)=>{Object.defineProperty(pZ1,"__esModule",{value:!0});pZ1.SSOOIDCServiceException=pZ1.__ServiceException=void 0;var ef0=v0();Object.defineProperty(pZ1,"__ServiceException",{enumerable:!0,get:function(){return ef0.ServiceException}});class cZ1 extends ef0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,cZ1.prototype)}}pZ1.SSOOIDCServiceException=cZ1});var CC1=Y((Iq0)=>{Object.defineProperty(Iq0,"__esModule",{value:!0});Iq0.InvalidClientMetadataException=Iq0.UnsupportedGrantTypeException=Iq0.UnauthorizedClientException=Iq0.SlowDownException=Iq0.InvalidScopeException=Iq0.InvalidRequestException=Iq0.InvalidGrantException=Iq0.InvalidClientException=Iq0.InternalServerException=Iq0.ExpiredTokenException=Iq0.AuthorizationPendingException=Iq0.AccessDeniedException=void 0;var qZ=zp();class iZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"AccessDeniedException",$fault:"client",...I});this.name="AccessDeniedException",this.$fault="client",Object.setPrototypeOf(this,iZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.AccessDeniedException=iZ1;class nZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"AuthorizationPendingException",$fault:"client",...I});this.name="AuthorizationPendingException",this.$fault="client",Object.setPrototypeOf(this,nZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.AuthorizationPendingException=nZ1;class rZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"ExpiredTokenException",$fault:"client",...I});this.name="ExpiredTokenException",this.$fault="client",Object.setPrototypeOf(this,rZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.ExpiredTokenException=rZ1;class aZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"InternalServerException",$fault:"server",...I});this.name="InternalServerException",this.$fault="server",Object.setPrototypeOf(this,aZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.InternalServerException=aZ1;class sZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"InvalidClientException",$fault:"client",...I});this.name="InvalidClientException",this.$fault="client",Object.setPrototypeOf(this,sZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.InvalidClientException=sZ1;class oZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"InvalidGrantException",$fault:"client",...I});this.name="InvalidGrantException",this.$fault="client",Object.setPrototypeOf(this,oZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.InvalidGrantException=oZ1;class eZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"InvalidRequestException",$fault:"client",...I});this.name="InvalidRequestException",this.$fault="client",Object.setPrototypeOf(this,eZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.InvalidRequestException=eZ1;class tZ1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"InvalidScopeException",$fault:"client",...I});this.name="InvalidScopeException",this.$fault="client",Object.setPrototypeOf(this,tZ1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.InvalidScopeException=tZ1;class IC1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"SlowDownException",$fault:"client",...I});this.name="SlowDownException",this.$fault="client",Object.setPrototypeOf(this,IC1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.SlowDownException=IC1;class dC1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"UnauthorizedClientException",$fault:"client",...I});this.name="UnauthorizedClientException",this.$fault="client",Object.setPrototypeOf(this,dC1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.UnauthorizedClientException=dC1;class GC1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"UnsupportedGrantTypeException",$fault:"client",...I});this.name="UnsupportedGrantTypeException",this.$fault="client",Object.setPrototypeOf(this,GC1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.UnsupportedGrantTypeException=GC1;class ZC1 extends qZ.SSOOIDCServiceException{constructor(I){super({name:"InvalidClientMetadataException",$fault:"client",...I});this.name="InvalidClientMetadataException",this.$fault="client",Object.setPrototypeOf(this,ZC1.prototype),this.error=I.error,this.error_description=I.error_description}}Iq0.InvalidClientMetadataException=ZC1});var fp=Y((wq0)=>{Object.defineProperty(wq0,"__esModule",{value:!0});wq0.de_StartDeviceAuthorizationCommand=wq0.de_RegisterClientCommand=wq0.de_CreateTokenCommand=wq0.se_StartDeviceAuthorizationCommand=wq0.se_RegisterClientCommand=wq0.se_CreateTokenCommand=void 0;var L0=v0(),WC1=of0(),RZ=CC1(),x65=zp(),c65=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w={"content-type":"application/json"},B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/token`,A;return A=JSON.stringify(L0.take(I,{clientId:[],clientSecret:[],code:[],deviceCode:[],grantType:[],redirectUri:[],refreshToken:[],scope:(V)=>L0._json(V)})),new WC1.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};wq0.se_CreateTokenCommand=c65;var p65=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w={"content-type":"application/json"},B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/client/register`,A;return A=JSON.stringify(L0.take(I,{clientName:[],clientType:[],scopes:(V)=>L0._json(V)})),new WC1.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};wq0.se_RegisterClientCommand=p65;var i65=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w={"content-type":"application/json"},B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/device_authorization`,A;return A=JSON.stringify(L0.take(I,{clientId:[],clientSecret:[],startUrl:[]})),new WC1.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};wq0.se_StartDeviceAuthorizationCommand=i65;var n65=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return r65(I,d);let G=L0.map({$metadata:AI(I)}),Z=L0.expectNonNull(L0.expectObject(await Qp(I.body,d)),"body"),C=L0.take(Z,{accessToken:L0.expectString,expiresIn:L0.expectInt32,idToken:L0.expectString,refreshToken:L0.expectString,tokenType:L0.expectString});return Object.assign(G,C),G};wq0.de_CreateTokenCommand=n65;var r65=async(I,d)=>{let G={...I,body:await VC1(I.body,d)},Z=XC1(I,G.body);switch(Z){case"AccessDeniedException":case"com.amazonaws.ssooidc#AccessDeniedException":throw await t65(G,d);case"AuthorizationPendingException":case"com.amazonaws.ssooidc#AuthorizationPendingException":throw await I85(G,d);case"ExpiredTokenException":case"com.amazonaws.ssooidc#ExpiredTokenException":throw await d85(G,d);case"InternalServerException":case"com.amazonaws.ssooidc#InternalServerException":throw await BC1(G,d);case"InvalidClientException":case"com.amazonaws.ssooidc#InvalidClientException":throw await Gq0(G,d);case"InvalidGrantException":case"com.amazonaws.ssooidc#InvalidGrantException":throw await Z85(G,d);case"InvalidRequestException":case"com.amazonaws.ssooidc#InvalidRequestException":throw await AC1(G,d);case"InvalidScopeException":case"com.amazonaws.ssooidc#InvalidScopeException":throw await Zq0(G,d);case"SlowDownException":case"com.amazonaws.ssooidc#SlowDownException":throw await Cq0(G,d);case"UnauthorizedClientException":case"com.amazonaws.ssooidc#UnauthorizedClientException":throw await Wq0(G,d);case"UnsupportedGrantTypeException":case"com.amazonaws.ssooidc#UnsupportedGrantTypeException":throw await C85(G,d);default:let C=G.body;return wC1({output:I,parsedBody:C,errorCode:Z})}},a65=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return s65(I,d);let G=L0.map({$metadata:AI(I)}),Z=L0.expectNonNull(L0.expectObject(await Qp(I.body,d)),"body"),C=L0.take(Z,{authorizationEndpoint:L0.expectString,clientId:L0.expectString,clientIdIssuedAt:L0.expectLong,clientSecret:L0.expectString,clientSecretExpiresAt:L0.expectLong,tokenEndpoint:L0.expectString});return Object.assign(G,C),G};wq0.de_RegisterClientCommand=a65;var s65=async(I,d)=>{let G={...I,body:await VC1(I.body,d)},Z=XC1(I,G.body);switch(Z){case"InternalServerException":case"com.amazonaws.ssooidc#InternalServerException":throw await BC1(G,d);case"InvalidClientMetadataException":case"com.amazonaws.ssooidc#InvalidClientMetadataException":throw await G85(G,d);case"InvalidRequestException":case"com.amazonaws.ssooidc#InvalidRequestException":throw await AC1(G,d);case"InvalidScopeException":case"com.amazonaws.ssooidc#InvalidScopeException":throw await Zq0(G,d);default:let C=G.body;return wC1({output:I,parsedBody:C,errorCode:Z})}},o65=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return e65(I,d);let G=L0.map({$metadata:AI(I)}),Z=L0.expectNonNull(L0.expectObject(await Qp(I.body,d)),"body"),C=L0.take(Z,{deviceCode:L0.expectString,expiresIn:L0.expectInt32,interval:L0.expectInt32,userCode:L0.expectString,verificationUri:L0.expectString,verificationUriComplete:L0.expectString});return Object.assign(G,C),G};wq0.de_StartDeviceAuthorizationCommand=o65;var e65=async(I,d)=>{let G={...I,body:await VC1(I.body,d)},Z=XC1(I,G.body);switch(Z){case"InternalServerException":case"com.amazonaws.ssooidc#InternalServerException":throw await BC1(G,d);case"InvalidClientException":case"com.amazonaws.ssooidc#InvalidClientException":throw await Gq0(G,d);case"InvalidRequestException":case"com.amazonaws.ssooidc#InvalidRequestException":throw await AC1(G,d);case"SlowDownException":case"com.amazonaws.ssooidc#SlowDownException":throw await Cq0(G,d);case"UnauthorizedClientException":case"com.amazonaws.ssooidc#UnauthorizedClientException":throw await Wq0(G,d);default:let C=G.body;return wC1({output:I,parsedBody:C,errorCode:Z})}},wC1=L0.withBaseException(x65.SSOOIDCServiceException),t65=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.AccessDeniedException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},I85=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.AuthorizationPendingException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},d85=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.ExpiredTokenException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},BC1=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.InternalServerException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},Gq0=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.InvalidClientException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},G85=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.InvalidClientMetadataException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},Z85=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.InvalidGrantException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},AC1=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.InvalidRequestException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},Zq0=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.InvalidScopeException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},Cq0=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.SlowDownException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},Wq0=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.UnauthorizedClientException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},C85=async(I,d)=>{let G=L0.map({}),Z=I.body,C=L0.take(Z,{error:L0.expectString,error_description:L0.expectString});Object.assign(G,C);let W=new RZ.UnsupportedGrantTypeException({$metadata:AI(I),...G});return L0.decorateServiceException(W,I.body)},AI=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),W85=(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return Promise.resolve(I);return d.streamCollector(I)||Promise.resolve(new Uint8Array)},w85=(I,d)=>W85(I,d).then((G)=>d.utf8Encoder(G)),Qp=(I,d)=>w85(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),VC1=async(I,d)=>{let G=await Qp(I,d);return G.message=G.message??G.Message,G},XC1=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)}});var DC1=Y((_C1)=>{Object.defineProperty(_C1,"__esModule",{value:!0});_C1.CreateTokenCommand=_C1.$Command=void 0;var _85=u2(),D85=r2(),Vq0=v0();Object.defineProperty(_C1,"$Command",{enumerable:!0,get:function(){return Vq0.Command}});var Aq0=fp();class YC1 extends Vq0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(D85.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(_85.getEndpointPlugin(d,YC1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOOIDCClient",commandName:"CreateTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Aq0.se_CreateTokenCommand(I,d)}deserialize(I,d){return Aq0.de_CreateTokenCommand(I,d)}}_C1.CreateTokenCommand=YC1});var gC1=Y((FC1)=>{Object.defineProperty(FC1,"__esModule",{value:!0});FC1.RegisterClientCommand=FC1.$Command=void 0;var H85=u2(),F85=r2(),_q0=v0();Object.defineProperty(FC1,"$Command",{enumerable:!0,get:function(){return _q0.Command}});var Yq0=fp();class HC1 extends _q0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(F85.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(H85.getEndpointPlugin(d,HC1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOOIDCClient",commandName:"RegisterClientCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Yq0.se_RegisterClientCommand(I,d)}deserialize(I,d){return Yq0.de_RegisterClientCommand(I,d)}}FC1.RegisterClientCommand=HC1});var NC1=Y((KC1)=>{Object.defineProperty(KC1,"__esModule",{value:!0});KC1.StartDeviceAuthorizationCommand=KC1.$Command=void 0;var g85=u2(),J85=r2(),Fq0=v0();Object.defineProperty(KC1,"$Command",{enumerable:!0,get:function(){return Fq0.Command}});var Hq0=fp();class JC1 extends Fq0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(J85.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(g85.getEndpointPlugin(d,JC1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOOIDCClient",commandName:"StartDeviceAuthorizationCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Hq0.se_StartDeviceAuthorizationCommand(I,d)}deserialize(I,d){return Hq0.de_StartDeviceAuthorizationCommand(I,d)}}KC1.StartDeviceAuthorizationCommand=JC1});var Nq0=Y((Jq0)=>{Object.defineProperty(Jq0,"__esModule",{value:!0});Jq0.SSOOIDC=void 0;var K85=v0(),N85=DC1(),z85=gC1(),Q85=NC1(),f85=mZ1(),q85={CreateTokenCommand:N85.CreateTokenCommand,RegisterClientCommand:z85.RegisterClientCommand,StartDeviceAuthorizationCommand:Q85.StartDeviceAuthorizationCommand};class zC1 extends f85.SSOOIDCClient{}Jq0.SSOOIDC=zC1;K85.createAggregatedClient(q85,zC1)});var zq0=Y((dy)=>{Object.defineProperty(dy,"__esModule",{value:!0});var QC1=x1();QC1.__exportStar(DC1(),dy);QC1.__exportStar(gC1(),dy);QC1.__exportStar(NC1(),dy)});var Qq0=Y((fC1)=>{Object.defineProperty(fC1,"__esModule",{value:!0});var R85=x1();R85.__exportStar(CC1(),fC1)});var Gy=Y((wJ)=>{Object.defineProperty(wJ,"__esModule",{value:!0});wJ.SSOOIDCServiceException=void 0;var qp=x1();qp.__exportStar(mZ1(),wJ);qp.__exportStar(Nq0(),wJ);qp.__exportStar(zq0(),wJ);qp.__exportStar(Qq0(),wJ);var U85=zp();Object.defineProperty(wJ,"SSOOIDCServiceException",{enumerable:!0,get:function(){return U85.SSOOIDCServiceException}})});var Rq0=Y((fq0)=>{Object.defineProperty(fq0,"__esModule",{value:!0});fq0.getSsoOidcClient=void 0;var E85=Gy(),qC1={},M85=(I)=>{if(qC1[I])return qC1[I];let d=new E85.SSOOIDCClient({region:I});return qC1[I]=d,d};fq0.getSsoOidcClient=M85});var Eq0=Y((Uq0)=>{Object.defineProperty(Uq0,"__esModule",{value:!0});Uq0.getNewSsoOidcToken=void 0;var S85=Gy(),L85=Rq0(),y85=(I,d)=>{return L85.getSsoOidcClient(d).send(new S85.CreateTokenCommand({clientId:I.clientId,clientSecret:I.clientSecret,refreshToken:I.refreshToken,grantType:"refresh_token"}))};Uq0.getNewSsoOidcToken=y85});var Lq0=Y((Mq0)=>{Object.defineProperty(Mq0,"__esModule",{value:!0});Mq0.validateTokenExpiry=void 0;var P85=W4(),$85=Dp(),u85=(I)=>{if(I.expiration&&I.expiration.getTime(){Object.defineProperty(yq0,"__esModule",{value:!0});yq0.validateTokenKey=void 0;var T85=W4(),O85=Dp(),m85=(I,d,G=!1)=>{if(typeof d==="undefined")throw new T85.TokenProviderError(`Value not present for '${I}' in SSO Token${G?". Cannot refresh":""}. ${O85.REFRESH_MESSAGE}`,!1)};yq0.validateTokenKey=m85});var Oq0=Y((uq0)=>{Object.defineProperty(uq0,"__esModule",{value:!0});uq0.writeSSOTokenToFile=void 0;var l85=K8(),b85=B1("fs"),{writeFile:h85}=b85.promises,j85=(I,d)=>{let G=l85.getSSOTokenFilepath(I),Z=JSON.stringify(d,null,2);return h85(G,Z)};uq0.writeSSOTokenToFile=j85});var RC1=Y((hq0)=>{Object.defineProperty(hq0,"__esModule",{value:!0});hq0.fromSso=void 0;var Zy=W4(),Rp=K8(),mq0=Dp(),k85=Eq0(),lq0=Lq0(),BJ=$q0(),x85=Oq0(),bq0=new Date(0),c85=(I={})=>async()=>{let d=await Rp.parseKnownFiles(I),G=Rp.getProfileName(I),Z=d[G];if(!Z)throw new Zy.TokenProviderError(`Profile '${G}' could not be found in shared credentials file.`,!1);else if(!Z.sso_session)throw new Zy.TokenProviderError(`Profile '${G}' is missing required property 'sso_session'.`);let C=Z.sso_session,w=(await Rp.loadSsoSessionData(I))[C];if(!w)throw new Zy.TokenProviderError(`Sso session '${C}' could not be found in shared credentials file.`,!1);for(let g of["sso_start_url","sso_region"])if(!w[g])throw new Zy.TokenProviderError(`Sso session '${C}' is missing required property '${g}'.`,!1);let{sso_start_url:B,sso_region:A}=w,V;try{V=await Rp.getSSOTokenFromFile(C)}catch(g){throw new Zy.TokenProviderError(`The SSO session token associated with profile=${G} was not found or is invalid. ${mq0.REFRESH_MESSAGE}`,!1)}BJ.validateTokenKey("accessToken",V.accessToken),BJ.validateTokenKey("expiresAt",V.expiresAt);let{accessToken:X,expiresAt:_}=V,F={token:X,expiration:new Date(_)};if(F.expiration.getTime()-Date.now()>mq0.EXPIRE_WINDOW_MS)return F;if(Date.now()-bq0.getTime()<30000)return lq0.validateTokenExpiry(F),F;BJ.validateTokenKey("clientId",V.clientId,!0),BJ.validateTokenKey("clientSecret",V.clientSecret,!0),BJ.validateTokenKey("refreshToken",V.refreshToken,!0);try{bq0.setTime(Date.now());let g=await k85.getNewSsoOidcToken(V,A);BJ.validateTokenKey("accessToken",g.accessToken),BJ.validateTokenKey("expiresIn",g.expiresIn);let J=new Date(Date.now()+g.expiresIn*1000);try{await x85.writeSSOTokenToFile(C,{...V,accessToken:g.accessToken,expiresAt:J.toISOString(),refreshToken:g.refreshToken})}catch(K){}return{token:g.accessToken,expiration:J}}catch(g){return lq0.validateTokenExpiry(F),F}};hq0.fromSso=c85});var cq0=Y((kq0)=>{Object.defineProperty(kq0,"__esModule",{value:!0});kq0.fromStatic=void 0;var p85=W4(),i85=({token:I})=>async()=>{if(!I||!I.token)throw new p85.TokenProviderError("Please pass a valid token to fromStatic",!1);return I};kq0.fromStatic=i85});var nq0=Y((pq0)=>{Object.defineProperty(pq0,"__esModule",{value:!0});pq0.nodeProvider=void 0;var UC1=W4(),n85=RC1(),r85=(I={})=>UC1.memoize(UC1.chain(n85.fromSso(I),async()=>{throw new UC1.TokenProviderError("Could not load token from any providers",!1)}),(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()<300000,(d)=>d.expiration!==void 0);pq0.nodeProvider=r85});var rq0=Y((Cy)=>{Object.defineProperty(Cy,"__esModule",{value:!0});var vC1=x1();vC1.__exportStar(RC1(),Cy);vC1.__exportStar(cq0(),Cy);vC1.__exportStar(nq0(),Cy)});var eq0=Y((sq0)=>{Object.defineProperty(sq0,"__esModule",{value:!0});sq0.resolveSSOCredentials=void 0;var aq0=Ag0(),Wy=W4(),a85=K8(),s85=rq0(),o85=900000,wy=!1,e85=async({ssoStartUrl:I,ssoSession:d,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,profile:w})=>{let B,A="To refresh this SSO session run aws sso login with the corresponding profile.";if(d)try{let Q=await s85.fromSso({profile:w})();B={accessToken:Q.token,expiresAt:new Date(Q.expiration).toISOString()}}catch(Q){throw new Wy.CredentialsProviderError(Q.message,wy)}else try{B=await a85.getSSOTokenFromFile(I)}catch(Q){throw new Wy.CredentialsProviderError("The SSO session associated with this profile is invalid. To refresh this SSO session run aws sso login with the corresponding profile.",wy)}if(new Date(B.expiresAt).getTime()-Date.now()<=o85)throw new Wy.CredentialsProviderError("The SSO session associated with this profile has expired. To refresh this SSO session run aws sso login with the corresponding profile.",wy);let{accessToken:V}=B,X=W||new aq0.SSOClient({region:Z}),_;try{_=await X.send(new aq0.GetRoleCredentialsCommand({accountId:G,roleName:C,accessToken:V}))}catch(Q){throw Wy.CredentialsProviderError.from(Q,wy)}let{roleCredentials:{accessKeyId:F,secretAccessKey:g,sessionToken:J,expiration:K}={}}=_;if(!F||!g||!J||!K)throw new Wy.CredentialsProviderError("SSO returns an invalid temporary credential.",wy);return{accessKeyId:F,secretAccessKey:g,sessionToken:J,expiration:new Date(K)}};sq0.resolveSSOCredentials=e85});var EC1=Y((tq0)=>{Object.defineProperty(tq0,"__esModule",{value:!0});tq0.validateSsoProfile=void 0;var t85=W4(),I75=(I)=>{let{sso_start_url:d,sso_account_id:G,sso_region:Z,sso_role_name:C}=I;if(!d||!G||!Z||!C)throw new t85.CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", "sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(I).join(", ")} +Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`,!1);return I};tq0.validateSsoProfile=I75});var CR0=Y((GR0)=>{Object.defineProperty(GR0,"__esModule",{value:!0});GR0.fromSSO=void 0;var By=W4(),MC1=K8(),d75=LG1(),dR0=eq0(),G75=EC1(),Z75=(I={})=>async()=>{let{ssoStartUrl:d,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,ssoSession:w}=I,B=MC1.getProfileName(I);if(!d&&!G&&!Z&&!C&&!w){let V=(await MC1.parseKnownFiles(I))[B];if(!V)throw new By.CredentialsProviderError(`Profile ${B} was not found.`);if(!d75.isSsoProfile(V))throw new By.CredentialsProviderError(`Profile ${B} is not configured with SSO credentials.`);if(V===null||V===void 0?void 0:V.sso_session){let Q=(await MC1.loadSsoSessionData(I))[V.sso_session],E=` configurations in profile ${B} and sso-session ${V.sso_session}`;if(Z&&Z!==Q.sso_region)throw new By.CredentialsProviderError("Conflicting SSO region"+E,!1);if(d&&d!==Q.sso_start_url)throw new By.CredentialsProviderError("Conflicting SSO start_url"+E,!1);V.sso_region=Q.sso_region,V.sso_start_url=Q.sso_start_url}let{sso_start_url:X,sso_account_id:_,sso_region:F,sso_role_name:g,sso_session:J}=G75.validateSsoProfile(V);return dR0.resolveSSOCredentials({ssoStartUrl:X,ssoSession:J,ssoAccountId:_,ssoRegion:F,ssoRoleName:g,ssoClient:W,profile:B})}else if(!d||!G||!Z||!C)throw new By.CredentialsProviderError('Incomplete configuration. The fromSSO() argument hash must include "ssoStartUrl", "ssoAccountId", "ssoRegion", "ssoRoleName"');else return dR0.resolveSSOCredentials({ssoStartUrl:d,ssoSession:w,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,profile:B})};GR0.fromSSO=Z75});var wR0=Y((WR0)=>{Object.defineProperty(WR0,"__esModule",{value:!0})});var vp=Y((pf)=>{Object.defineProperty(pf,"__esModule",{value:!0});var Up=x1();Up.__exportStar(CR0(),pf);Up.__exportStar(LG1(),pf);Up.__exportStar(wR0(),pf);Up.__exportStar(EC1(),pf)});var VR0=Y((SC1)=>{Object.defineProperty(SC1,"__esModule",{value:!0});SC1.resolveSsoCredentials=SC1.isSsoProfile=void 0;var BR0=vp(),C75=vp();Object.defineProperty(SC1,"isSsoProfile",{enumerable:!0,get:function(){return C75.isSsoProfile}});var W75=(I)=>{let{sso_start_url:d,sso_account_id:G,sso_session:Z,sso_region:C,sso_role_name:W}=BR0.validateSsoProfile(I);return BR0.fromSSO({ssoStartUrl:d,ssoAccountId:G,ssoSession:Z,ssoRegion:C,ssoRoleName:W})()};SC1.resolveSsoCredentials=W75});var _R0=Y((XR0)=>{Object.defineProperty(XR0,"__esModule",{value:!0});XR0.resolveStaticCredentials=XR0.isStaticCredsProfile=void 0;var w75=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.aws_access_key_id==="string"&&typeof I.aws_secret_access_key==="string"&&["undefined","string"].indexOf(typeof I.aws_session_token)>-1;XR0.isStaticCredsProfile=w75;var B75=(I)=>Promise.resolve({accessKeyId:I.aws_access_key_id,secretAccessKey:I.aws_secret_access_key,sessionToken:I.aws_session_token});XR0.resolveStaticCredentials=B75});var LC1=Y((DR0)=>{Object.defineProperty(DR0,"__esModule",{value:!0});DR0.fromWebToken=void 0;var V75=W4(),X75=(I)=>()=>{let{roleArn:d,roleSessionName:G,webIdentityToken:Z,providerId:C,policyArns:W,policy:w,durationSeconds:B,roleAssumerWithWebIdentity:A}=I;if(!A)throw new V75.CredentialsProviderError(`Role Arn '${d}' needs to be assumed with web identity, but no role assumption callback was provided.`,!1);return A({RoleArn:d,RoleSessionName:G!==null&&G!==void 0?G:`aws-sdk-js-session-${Date.now()}`,WebIdentityToken:Z,ProviderId:C,PolicyArns:W,Policy:w,DurationSeconds:B})};DR0.fromWebToken=X75});var JR0=Y((FR0)=>{Object.defineProperty(FR0,"__esModule",{value:!0});FR0.fromTokenFile=void 0;var Y75=W4(),_75=B1("fs"),D75=LC1(),H75="AWS_WEB_IDENTITY_TOKEN_FILE",F75="AWS_ROLE_ARN",g75="AWS_ROLE_SESSION_NAME",J75=(I={})=>async()=>{return K75(I)};FR0.fromTokenFile=J75;var K75=(I)=>{var d,G,Z;let C=(d=I===null||I===void 0?void 0:I.webIdentityTokenFile)!==null&&d!==void 0?d:process.env[H75],W=(G=I===null||I===void 0?void 0:I.roleArn)!==null&&G!==void 0?G:process.env[F75],w=(Z=I===null||I===void 0?void 0:I.roleSessionName)!==null&&Z!==void 0?Z:process.env[g75];if(!C||!W)throw new Y75.CredentialsProviderError("Web identity configuration not specified");return D75.fromWebToken({...I,webIdentityToken:_75.readFileSync(C,{encoding:"ascii"}),roleArn:W,roleSessionName:w})()}});var yC1=Y((Ep)=>{Object.defineProperty(Ep,"__esModule",{value:!0});var KR0=x1();KR0.__exportStar(JR0(),Ep);KR0.__exportStar(LC1(),Ep)});var QR0=Y((NR0)=>{Object.defineProperty(NR0,"__esModule",{value:!0});NR0.resolveWebIdentityCredentials=NR0.isWebIdentityProfile=void 0;var N75=yC1(),z75=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.web_identity_token_file==="string"&&typeof I.role_arn==="string"&&["undefined","string"].indexOf(typeof I.role_session_name)>-1;NR0.isWebIdentityProfile=z75;var Q75=async(I,d)=>N75.fromTokenFile({webIdentityTokenFile:I.web_identity_token_file,roleArn:I.role_arn,roleSessionName:I.role_session_name,roleAssumerWithWebIdentity:d.roleAssumerWithWebIdentity})();NR0.resolveWebIdentityCredentials=Q75});var vG1=Y((vR0)=>{Object.defineProperty(vR0,"__esModule",{value:!0});vR0.resolveProfileData=void 0;var q75=W4(),fR0=dD0(),qR0=HD0(),RR0=VR0(),Mp=_R0(),UR0=QR0(),R75=async(I,d,G,Z={})=>{let C=d[I];if(Object.keys(Z).length>0&&Mp.isStaticCredsProfile(C))return Mp.resolveStaticCredentials(C);if(fR0.isAssumeRoleProfile(C))return fR0.resolveAssumeRoleCredentials(I,d,G,Z);if(Mp.isStaticCredsProfile(C))return Mp.resolveStaticCredentials(C);if(UR0.isWebIdentityProfile(C))return UR0.resolveWebIdentityCredentials(C,G);if(qR0.isProcessProfile(C))return qR0.resolveProcessCredentials(G,I);if(RR0.isSsoProfile(C))return RR0.resolveSsoCredentials(C);throw new q75.CredentialsProviderError(`Profile ${I} could not be found or parsed in shared credentials file.`)};vR0.resolveProfileData=R75});var yR0=Y((SR0)=>{Object.defineProperty(SR0,"__esModule",{value:!0});SR0.fromIni=void 0;var MR0=K8(),U75=vG1(),v75=(I={})=>async()=>{let d=await MR0.parseKnownFiles(I);return U75.resolveProfileData(MR0.getProfileName(I),d,I)};SR0.fromIni=v75});var PR0=Y((PC1)=>{Object.defineProperty(PC1,"__esModule",{value:!0});var E75=x1();E75.__exportStar(yR0(),PC1)});var OR0=Y(($R0)=>{Object.defineProperty($R0,"__esModule",{value:!0});$R0.remoteProvider=$R0.ENV_IMDS_DISABLED=void 0;var Sp=i_(),M75=W4();$R0.ENV_IMDS_DISABLED="AWS_EC2_METADATA_DISABLED";var S75=(I)=>{if(process.env[Sp.ENV_CMDS_RELATIVE_URI]||process.env[Sp.ENV_CMDS_FULL_URI])return Sp.fromContainerMetadata(I);if(process.env[$R0.ENV_IMDS_DISABLED])return async()=>{throw new M75.CredentialsProviderError("EC2 Instance Metadata Service access disabled")};return Sp.fromInstanceMetadata(I)};$R0.remoteProvider=S75});var bR0=Y((mR0)=>{Object.defineProperty(mR0,"__esModule",{value:!0});mR0.defaultProvider=void 0;var L75=BG1(),y75=PR0(),P75=SG1(),$75=vp(),u75=yC1(),$C1=W4(),T75=K8(),O75=OR0(),m75=(I={})=>$C1.memoize($C1.chain(...I.profile||process.env[T75.ENV_PROFILE]?[]:[L75.fromEnv()],$75.fromSSO(I),y75.fromIni(I),P75.fromProcess(I),u75.fromTokenFile(I),O75.remoteProvider(I),async()=>{throw new $C1.CredentialsProviderError("Could not load credentials from any providers",!1)}),(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()<300000,(d)=>d.expiration!==void 0);mR0.defaultProvider=m75});var TC1=Y((uC1)=>{Object.defineProperty(uC1,"__esModule",{value:!0});var l75=x1();l75.__exportStar(bR0(),uC1)});var VU0=Y((BU0)=>{Object.defineProperty(BU0,"__esModule",{value:!0});BU0.ruleSet=void 0;var oR0="required",_4="type",u5="fn",T5="argv",e_="ref",hR0=!1,b75=!0,AJ="booleanEquals",P7="tree",a8="stringEquals",eR0="sigv4",tR0="sts",IU0="us-east-1",C3="endpoint",jR0="https://sts.{Region}.{PartitionResult#dnsSuffix}",nf="error",mC1="getAttr",kR0={[oR0]:!1,[_4]:"String"},OC1={[oR0]:!0,default:!1,[_4]:"Boolean"},dU0={[e_]:"Endpoint"},xR0={[u5]:"isSet",[T5]:[{[e_]:"Region"}]},s8={[e_]:"Region"},cR0={[u5]:"aws.partition",[T5]:[s8],assign:"PartitionResult"},GU0={[e_]:"UseFIPS"},ZU0={[e_]:"UseDualStack"},$7={url:"https://sts.amazonaws.com",properties:{authSchemes:[{name:eR0,signingName:tR0,signingRegion:IU0}]},headers:{}},GG={},pR0={conditions:[{[u5]:a8,[T5]:[s8,"aws-global"]}],[C3]:$7,[_4]:C3},CU0={[u5]:AJ,[T5]:[GU0,!0]},WU0={[u5]:AJ,[T5]:[ZU0,!0]},iR0={[u5]:AJ,[T5]:[!0,{[u5]:mC1,[T5]:[{[e_]:"PartitionResult"},"supportsFIPS"]}]},wU0={[e_]:"PartitionResult"},nR0={[u5]:AJ,[T5]:[!0,{[u5]:mC1,[T5]:[wU0,"supportsDualStack"]}]},rR0=[{[u5]:"isSet",[T5]:[dU0]}],aR0=[CU0],sR0=[WU0],h75={version:"1.0",parameters:{Region:kR0,UseDualStack:OC1,UseFIPS:OC1,Endpoint:kR0,UseGlobalEndpoint:OC1},rules:[{conditions:[{[u5]:AJ,[T5]:[{[e_]:"UseGlobalEndpoint"},b75]},{[u5]:"not",[T5]:rR0},xR0,cR0,{[u5]:AJ,[T5]:[GU0,hR0]},{[u5]:AJ,[T5]:[ZU0,hR0]}],[_4]:P7,rules:[{conditions:[{[u5]:a8,[T5]:[s8,"ap-northeast-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"ap-south-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"ap-southeast-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"ap-southeast-2"]}],endpoint:$7,[_4]:C3},pR0,{conditions:[{[u5]:a8,[T5]:[s8,"ca-central-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"eu-central-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"eu-north-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"eu-west-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"eu-west-2"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"eu-west-3"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"sa-east-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,IU0]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"us-east-2"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"us-west-1"]}],endpoint:$7,[_4]:C3},{conditions:[{[u5]:a8,[T5]:[s8,"us-west-2"]}],endpoint:$7,[_4]:C3},{endpoint:{url:jR0,properties:{authSchemes:[{name:eR0,signingName:tR0,signingRegion:"{Region}"}]},headers:GG},[_4]:C3}]},{conditions:rR0,[_4]:P7,rules:[{conditions:aR0,error:"Invalid Configuration: FIPS and custom endpoint are not supported",[_4]:nf},{[_4]:P7,rules:[{conditions:sR0,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",[_4]:nf},{endpoint:{url:dU0,properties:GG,headers:GG},[_4]:C3}]}]},{[_4]:P7,rules:[{conditions:[xR0],[_4]:P7,rules:[{conditions:[cR0],[_4]:P7,rules:[{conditions:[CU0,WU0],[_4]:P7,rules:[{conditions:[iR0,nR0],[_4]:P7,rules:[{[_4]:P7,rules:[{endpoint:{url:"https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:GG,headers:GG},[_4]:C3}]}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",[_4]:nf}]},{conditions:aR0,[_4]:P7,rules:[{conditions:[iR0],[_4]:P7,rules:[{[_4]:P7,rules:[{conditions:[{[u5]:a8,[T5]:["aws-us-gov",{[u5]:mC1,[T5]:[wU0,"name"]}]}],endpoint:{url:"https://sts.{Region}.amazonaws.com",properties:GG,headers:GG},[_4]:C3},{endpoint:{url:"https://sts-fips.{Region}.{PartitionResult#dnsSuffix}",properties:GG,headers:GG},[_4]:C3}]}]},{error:"FIPS is enabled but this partition does not support FIPS",[_4]:nf}]},{conditions:sR0,[_4]:P7,rules:[{conditions:[nR0],[_4]:P7,rules:[{[_4]:P7,rules:[{endpoint:{url:"https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:GG,headers:GG},[_4]:C3}]}]},{error:"DualStack is enabled but this partition does not support DualStack",[_4]:nf}]},{[_4]:P7,rules:[pR0,{endpoint:{url:jR0,properties:GG,headers:GG},[_4]:C3}]}]}]},{error:"Invalid Configuration: Missing Region",[_4]:nf}]}]};BU0.ruleSet=h75});var _U0=Y((XU0)=>{Object.defineProperty(XU0,"__esModule",{value:!0});XU0.defaultEndpointResolver=void 0;var j75=qL(),k75=VU0(),x75=(I,d={})=>{return j75.resolveEndpoint(k75.ruleSet,{endpointParams:I,logger:d.logger})};XU0.defaultEndpointResolver=x75});var JU0=Y((FU0)=>{Object.defineProperty(FU0,"__esModule",{value:!0});FU0.getRuntimeConfig=void 0;var c75=v0(),p75=FV(),DU0=IJ(),HU0=hC(),i75=_U0(),n75=(I)=>({apiVersion:"2011-06-15",base64Decoder:I?.base64Decoder??DU0.fromBase64,base64Encoder:I?.base64Encoder??DU0.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??i75.defaultEndpointResolver,logger:I?.logger??new c75.NoOpLogger,serviceId:I?.serviceId??"STS",urlParser:I?.urlParser??p75.parseUrl,utf8Decoder:I?.utf8Decoder??HU0.fromUtf8,utf8Encoder:I?.utf8Encoder??HU0.toUtf8});FU0.getRuntimeConfig=n75});var fU0=Y((zU0)=>{Object.defineProperty(zU0,"__esModule",{value:!0});zU0.getRuntimeConfig=void 0;var r75=x1(),a75=r75.__importDefault(cB0()),s75=WG1(),Lp=Cd(),o75=TC1(),e75=og(),KU0=dG(),Ay=QZ(),NU0=eg(),t75=tg(),II5=Wd(),dI5=ac(),GI5=JU0(),ZI5=v0(),CI5=dJ(),WI5=v0(),wI5=(I)=>{WI5.emitWarningIfUnsupportedVersion(process.version);let d=CI5.resolveDefaultsModeConfig(I),G=()=>d().then(ZI5.loadConfigsForDefaultMode),Z=GI5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??t75.calculateBodyLength,credentialDefaultProvider:I?.credentialDefaultProvider??s75.decorateDefaultCredentialProvider(o75.defaultProvider),defaultUserAgentProvider:I?.defaultUserAgentProvider??dI5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:a75.default.version}),maxAttempts:I?.maxAttempts??Ay.loadConfig(KU0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??Ay.loadConfig(Lp.NODE_REGION_CONFIG_OPTIONS,Lp.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new NU0.NodeHttpHandler(G),retryMode:I?.retryMode??Ay.loadConfig({...KU0.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||II5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??e75.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??NU0.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??Ay.loadConfig(Lp.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??Ay.loadConfig(Lp.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};zU0.getRuntimeConfig=wI5});var yp=Y((bC1)=>{Object.defineProperty(bC1,"__esModule",{value:!0});bC1.STSClient=bC1.__Client=void 0;var BI5=Cd(),AI5=jg(),VI5=u2(),qU0=Xc(),XI5=Yc(),YI5=_c(),RU0=dG(),_I5=hB0(),UU0=Lc(),vU0=v0();Object.defineProperty(bC1,"__Client",{enumerable:!0,get:function(){return vU0.Client}});var DI5=xB0(),HI5=fU0();class lC1 extends vU0.Client{constructor(I){let d=HI5.getRuntimeConfig(I),G=DI5.resolveClientEndpointParameters(d),Z=BI5.resolveRegionConfig(G),C=VI5.resolveEndpointConfig(Z),W=RU0.resolveRetryConfig(C),w=qU0.resolveHostHeaderConfig(W),B=_I5.resolveStsAuthConfig(w,{stsClientCtor:lC1}),A=UU0.resolveUserAgentConfig(B);super(A);this.config=A,this.middlewareStack.use(RU0.getRetryPlugin(this.config)),this.middlewareStack.use(AI5.getContentLengthPlugin(this.config)),this.middlewareStack.use(qU0.getHostHeaderPlugin(this.config)),this.middlewareStack.use(XI5.getLoggerPlugin(this.config)),this.middlewareStack.use(YI5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(UU0.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}bC1.STSClient=lC1});var kC1=Y((jC1)=>{Object.defineProperty(jC1,"__esModule",{value:!0});jC1.AssumeRoleWithSAMLCommand=jC1.$Command=void 0;var FI5=u2(),gI5=r2(),LU0=v0();Object.defineProperty(jC1,"$Command",{enumerable:!0,get:function(){return LU0.Command}});var MU0=T_(),SU0=fV();class hC1 extends LU0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(gI5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(FI5.getEndpointPlugin(d,hC1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleWithSAMLCommand",inputFilterSensitiveLog:MU0.AssumeRoleWithSAMLRequestFilterSensitiveLog,outputFilterSensitiveLog:MU0.AssumeRoleWithSAMLResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return SU0.se_AssumeRoleWithSAMLCommand(I,d)}deserialize(I,d){return SU0.de_AssumeRoleWithSAMLCommand(I,d)}}jC1.AssumeRoleWithSAMLCommand=hC1});var pC1=Y((cC1)=>{Object.defineProperty(cC1,"__esModule",{value:!0});cC1.DecodeAuthorizationMessageCommand=cC1.$Command=void 0;var JI5=u2(),KI5=r2(),NI5=A9(),$U0=v0();Object.defineProperty(cC1,"$Command",{enumerable:!0,get:function(){return $U0.Command}});var PU0=fV();class xC1 extends $U0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(KI5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(JI5.getEndpointPlugin(d,xC1.getEndpointParameterInstructions())),this.middlewareStack.use(NI5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"DecodeAuthorizationMessageCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return PU0.se_DecodeAuthorizationMessageCommand(I,d)}deserialize(I,d){return PU0.de_DecodeAuthorizationMessageCommand(I,d)}}cC1.DecodeAuthorizationMessageCommand=xC1});var rC1=Y((nC1)=>{Object.defineProperty(nC1,"__esModule",{value:!0});nC1.GetAccessKeyInfoCommand=nC1.$Command=void 0;var zI5=u2(),QI5=r2(),fI5=A9(),OU0=v0();Object.defineProperty(nC1,"$Command",{enumerable:!0,get:function(){return OU0.Command}});var TU0=fV();class iC1 extends OU0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(QI5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(zI5.getEndpointPlugin(d,iC1.getEndpointParameterInstructions())),this.middlewareStack.use(fI5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetAccessKeyInfoCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return TU0.se_GetAccessKeyInfoCommand(I,d)}deserialize(I,d){return TU0.de_GetAccessKeyInfoCommand(I,d)}}nC1.GetAccessKeyInfoCommand=iC1});var oC1=Y((sC1)=>{Object.defineProperty(sC1,"__esModule",{value:!0});sC1.GetCallerIdentityCommand=sC1.$Command=void 0;var qI5=u2(),RI5=r2(),UI5=A9(),bU0=v0();Object.defineProperty(sC1,"$Command",{enumerable:!0,get:function(){return bU0.Command}});var lU0=fV();class aC1 extends bU0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(RI5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(qI5.getEndpointPlugin(d,aC1.getEndpointParameterInstructions())),this.middlewareStack.use(UI5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetCallerIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return lU0.se_GetCallerIdentityCommand(I,d)}deserialize(I,d){return lU0.de_GetCallerIdentityCommand(I,d)}}sC1.GetCallerIdentityCommand=aC1});var IW1=Y((tC1)=>{Object.defineProperty(tC1,"__esModule",{value:!0});tC1.GetFederationTokenCommand=tC1.$Command=void 0;var vI5=u2(),EI5=r2(),MI5=A9(),kU0=v0();Object.defineProperty(tC1,"$Command",{enumerable:!0,get:function(){return kU0.Command}});var SI5=T_(),jU0=fV();class eC1 extends kU0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(EI5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(vI5.getEndpointPlugin(d,eC1.getEndpointParameterInstructions())),this.middlewareStack.use(MI5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetFederationTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:SI5.GetFederationTokenResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return jU0.se_GetFederationTokenCommand(I,d)}deserialize(I,d){return jU0.de_GetFederationTokenCommand(I,d)}}tC1.GetFederationTokenCommand=eC1});var ZW1=Y((GW1)=>{Object.defineProperty(GW1,"__esModule",{value:!0});GW1.GetSessionTokenCommand=GW1.$Command=void 0;var LI5=u2(),yI5=r2(),PI5=A9(),pU0=v0();Object.defineProperty(GW1,"$Command",{enumerable:!0,get:function(){return pU0.Command}});var $I5=T_(),cU0=fV();class dW1 extends pU0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(yI5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(LI5.getEndpointPlugin(d,dW1.getEndpointParameterInstructions())),this.middlewareStack.use(PI5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetSessionTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:$I5.GetSessionTokenResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return cU0.se_GetSessionTokenCommand(I,d)}deserialize(I,d){return cU0.de_GetSessionTokenCommand(I,d)}}GW1.GetSessionTokenCommand=dW1});var aU0=Y((nU0)=>{Object.defineProperty(nU0,"__esModule",{value:!0});nU0.STS=void 0;var uI5=v0(),TI5=jc(),OI5=kC1(),mI5=kc(),lI5=pC1(),bI5=rC1(),hI5=oC1(),jI5=IW1(),kI5=ZW1(),xI5=yp(),cI5={AssumeRoleCommand:TI5.AssumeRoleCommand,AssumeRoleWithSAMLCommand:OI5.AssumeRoleWithSAMLCommand,AssumeRoleWithWebIdentityCommand:mI5.AssumeRoleWithWebIdentityCommand,DecodeAuthorizationMessageCommand:lI5.DecodeAuthorizationMessageCommand,GetAccessKeyInfoCommand:bI5.GetAccessKeyInfoCommand,GetCallerIdentityCommand:hI5.GetCallerIdentityCommand,GetFederationTokenCommand:jI5.GetFederationTokenCommand,GetSessionTokenCommand:kI5.GetSessionTokenCommand};class CW1 extends xI5.STSClient{}nU0.STS=CW1;uI5.createAggregatedClient(cI5,CW1)});var sU0=Y((ZB)=>{Object.defineProperty(ZB,"__esModule",{value:!0});var t_=x1();t_.__exportStar(jc(),ZB);t_.__exportStar(kC1(),ZB);t_.__exportStar(kc(),ZB);t_.__exportStar(pC1(),ZB);t_.__exportStar(rC1(),ZB);t_.__exportStar(oC1(),ZB);t_.__exportStar(IW1(),ZB);t_.__exportStar(ZW1(),ZB)});var oU0=Y((WW1)=>{Object.defineProperty(WW1,"__esModule",{value:!0});var pI5=x1();pI5.__exportStar(T_(),WW1)});var Wv0=Y((dv0)=>{Object.defineProperty(dv0,"__esModule",{value:!0});dv0.decorateDefaultCredentialProvider=dv0.getDefaultRoleAssumerWithWebIdentity=dv0.getDefaultRoleAssumer=void 0;var eU0=WG1(),tU0=yp(),Iv0=(I,d)=>{if(!d)return I;else return class G extends I{constructor(Z){super(Z);for(let C of d)this.middlewareStack.use(C)}}},iI5=(I={},d)=>eU0.getDefaultRoleAssumer(I,Iv0(tU0.STSClient,d));dv0.getDefaultRoleAssumer=iI5;var nI5=(I={},d)=>eU0.getDefaultRoleAssumerWithWebIdentity(I,Iv0(tU0.STSClient,d));dv0.getDefaultRoleAssumerWithWebIdentity=nI5;var rI5=(I)=>(d)=>I({roleAssumer:dv0.getDefaultRoleAssumer(d),roleAssumerWithWebIdentity:dv0.getDefaultRoleAssumerWithWebIdentity(d),...d});dv0.decorateDefaultCredentialProvider=rI5});var wv0=Y((ID)=>{Object.defineProperty(ID,"__esModule",{value:!0});ID.STSServiceException=void 0;var Vy=x1();Vy.__exportStar(yp(),ID);Vy.__exportStar(aU0(),ID);Vy.__exportStar(sU0(),ID);Vy.__exportStar(oU0(),ID);Vy.__exportStar(Wv0(),ID);var aI5=uc();Object.defineProperty(ID,"STSServiceException",{enumerable:!0,get:function(){return aI5.STSServiceException}})});var zv0=Y((Kv0)=>{Object.defineProperty(Kv0,"__esModule",{value:!0});Kv0.ruleSet=void 0;var Hv0="required",MV="fn",SV="argv",rf="ref",wW1="PartitionResult",CB="tree",Xy="error",Yy="endpoint",Bv0={[Hv0]:!1,type:"String"},Av0={[Hv0]:!0,default:!1,type:"Boolean"},Fv0={[rf]:"Endpoint"},gv0={[MV]:"booleanEquals",[SV]:[{[rf]:"UseFIPS"},!0]},Jv0={[MV]:"booleanEquals",[SV]:[{[rf]:"UseDualStack"},!0]},WB={},Vv0={[MV]:"booleanEquals",[SV]:[!0,{[MV]:"getAttr",[SV]:[{[rf]:wW1},"supportsFIPS"]}]},Xv0={[MV]:"booleanEquals",[SV]:[!0,{[MV]:"getAttr",[SV]:[{[rf]:wW1},"supportsDualStack"]}]},Yv0=[Fv0],_v0=[gv0],Dv0=[Jv0],oI5={version:"1.0",parameters:{Region:Bv0,UseDualStack:Av0,UseFIPS:Av0,Endpoint:Bv0},rules:[{conditions:[{[MV]:"aws.partition",[SV]:[{[rf]:"Region"}],assign:wW1}],type:CB,rules:[{conditions:[{[MV]:"isSet",[SV]:Yv0},{[MV]:"parseURL",[SV]:Yv0,assign:"url"}],type:CB,rules:[{conditions:_v0,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:Xy},{type:CB,rules:[{conditions:Dv0,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:Xy},{endpoint:{url:Fv0,properties:WB,headers:WB},type:Yy}]}]},{conditions:[gv0,Jv0],type:CB,rules:[{conditions:[Vv0,Xv0],type:CB,rules:[{endpoint:{url:"https://cognito-identity-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:WB,headers:WB},type:Yy}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:Xy}]},{conditions:_v0,type:CB,rules:[{conditions:[Vv0],type:CB,rules:[{type:CB,rules:[{endpoint:{url:"https://cognito-identity-fips.{Region}.{PartitionResult#dnsSuffix}",properties:WB,headers:WB},type:Yy}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:Xy}]},{conditions:Dv0,type:CB,rules:[{conditions:[Xv0],type:CB,rules:[{endpoint:{url:"https://cognito-identity.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:WB,headers:WB},type:Yy}]},{error:"DualStack is enabled but this partition does not support DualStack",type:Xy}]},{endpoint:{url:"https://cognito-identity.{Region}.{PartitionResult#dnsSuffix}",properties:WB,headers:WB},type:Yy}]}]};Kv0.ruleSet=oI5});var qv0=Y((Qv0)=>{Object.defineProperty(Qv0,"__esModule",{value:!0});Qv0.defaultEndpointResolver=void 0;var eI5=qL(),tI5=zv0(),Id5=(I,d={})=>{return eI5.resolveEndpoint(tI5.ruleSet,{endpointParams:I,logger:d.logger})};Qv0.defaultEndpointResolver=Id5});var Mv0=Y((vv0)=>{Object.defineProperty(vv0,"__esModule",{value:!0});vv0.getRuntimeConfig=void 0;var dd5=v0(),Gd5=FV(),Rv0=IJ(),Uv0=hC(),Zd5=qv0(),Cd5=(I)=>({apiVersion:"2014-06-30",base64Decoder:I?.base64Decoder??Rv0.fromBase64,base64Encoder:I?.base64Encoder??Rv0.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??Zd5.defaultEndpointResolver,logger:I?.logger??new dd5.NoOpLogger,serviceId:I?.serviceId??"Cognito Identity",urlParser:I?.urlParser??Gd5.parseUrl,utf8Decoder:I?.utf8Decoder??Uv0.fromUtf8,utf8Encoder:I?.utf8Encoder??Uv0.toUtf8});vv0.getRuntimeConfig=Cd5});var $v0=Y((yv0)=>{Object.defineProperty(yv0,"__esModule",{value:!0});yv0.getRuntimeConfig=void 0;var Wd5=x1(),wd5=Wd5.__importDefault(mB0()),Bd5=wv0(),Pp=Cd(),Ad5=TC1(),Vd5=og(),Sv0=dG(),_y=QZ(),Lv0=eg(),Xd5=tg(),Yd5=Wd(),_d5=ac(),Dd5=Mv0(),Hd5=v0(),Fd5=dJ(),gd5=v0(),Jd5=(I)=>{gd5.emitWarningIfUnsupportedVersion(process.version);let d=Fd5.resolveDefaultsModeConfig(I),G=()=>d().then(Hd5.loadConfigsForDefaultMode),Z=Dd5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??Xd5.calculateBodyLength,credentialDefaultProvider:I?.credentialDefaultProvider??Bd5.decorateDefaultCredentialProvider(Ad5.defaultProvider),defaultUserAgentProvider:I?.defaultUserAgentProvider??_d5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:wd5.default.version}),maxAttempts:I?.maxAttempts??_y.loadConfig(Sv0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??_y.loadConfig(Pp.NODE_REGION_CONFIG_OPTIONS,Pp.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new Lv0.NodeHttpHandler(G),retryMode:I?.retryMode??_y.loadConfig({...Sv0.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||Yd5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??Vd5.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??Lv0.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??_y.loadConfig(Pp.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??_y.loadConfig(Pp.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};yv0.getRuntimeConfig=Jd5});var $p=Y((BW1)=>{Object.defineProperty(BW1,"__esModule",{value:!0});BW1.CognitoIdentityClient=BW1.__Client=void 0;var Kd5=Cd(),Nd5=jg(),zd5=u2(),uv0=Xc(),Qd5=Yc(),fd5=_c(),Tv0=dG(),qd5=A9(),Ov0=Lc(),mv0=v0();Object.defineProperty(BW1,"__Client",{enumerable:!0,get:function(){return mv0.Client}});var Rd5=OB0(),Ud5=$v0();class lv0 extends mv0.Client{constructor(I){let d=Ud5.getRuntimeConfig(I),G=Rd5.resolveClientEndpointParameters(d),Z=Kd5.resolveRegionConfig(G),C=zd5.resolveEndpointConfig(Z),W=Tv0.resolveRetryConfig(C),w=uv0.resolveHostHeaderConfig(W),B=qd5.resolveAwsAuthConfig(w),A=Ov0.resolveUserAgentConfig(B);super(A);this.config=A,this.middlewareStack.use(Tv0.getRetryPlugin(this.config)),this.middlewareStack.use(Nd5.getContentLengthPlugin(this.config)),this.middlewareStack.use(uv0.getHostHeaderPlugin(this.config)),this.middlewareStack.use(Qd5.getLoggerPlugin(this.config)),this.middlewareStack.use(fd5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(Ov0.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}BW1.CognitoIdentityClient=lv0});var up=Y((VW1)=>{Object.defineProperty(VW1,"__esModule",{value:!0});VW1.CognitoIdentityServiceException=VW1.__ServiceException=void 0;var hv0=v0();Object.defineProperty(VW1,"__ServiceException",{enumerable:!0,get:function(){return hv0.ServiceException}});class AW1 extends hv0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,AW1.prototype)}}VW1.CognitoIdentityServiceException=AW1});var QW1=Y((kv0)=>{Object.defineProperty(kv0,"__esModule",{value:!0});kv0.ConcurrentModificationException=kv0.DeveloperUserAlreadyRegisteredException=kv0.RoleMappingType=kv0.MappingRuleMatchType=kv0.InvalidIdentityPoolConfigurationException=kv0.ExternalServiceException=kv0.ResourceNotFoundException=kv0.ErrorCode=kv0.TooManyRequestsException=kv0.ResourceConflictException=kv0.NotAuthorizedException=kv0.LimitExceededException=kv0.InvalidParameterException=kv0.InternalErrorException=kv0.AmbiguousRoleResolutionType=void 0;var xC=up();kv0.AmbiguousRoleResolutionType={AUTHENTICATED_ROLE:"AuthenticatedRole",DENY:"Deny"};class XW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"InternalErrorException",$fault:"server",...I});this.name="InternalErrorException",this.$fault="server",Object.setPrototypeOf(this,XW1.prototype)}}kv0.InternalErrorException=XW1;class YW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"InvalidParameterException",$fault:"client",...I});this.name="InvalidParameterException",this.$fault="client",Object.setPrototypeOf(this,YW1.prototype)}}kv0.InvalidParameterException=YW1;class _W1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"LimitExceededException",$fault:"client",...I});this.name="LimitExceededException",this.$fault="client",Object.setPrototypeOf(this,_W1.prototype)}}kv0.LimitExceededException=_W1;class DW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"NotAuthorizedException",$fault:"client",...I});this.name="NotAuthorizedException",this.$fault="client",Object.setPrototypeOf(this,DW1.prototype)}}kv0.NotAuthorizedException=DW1;class HW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"ResourceConflictException",$fault:"client",...I});this.name="ResourceConflictException",this.$fault="client",Object.setPrototypeOf(this,HW1.prototype)}}kv0.ResourceConflictException=HW1;class FW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"TooManyRequestsException",$fault:"client",...I});this.name="TooManyRequestsException",this.$fault="client",Object.setPrototypeOf(this,FW1.prototype)}}kv0.TooManyRequestsException=FW1;kv0.ErrorCode={ACCESS_DENIED:"AccessDenied",INTERNAL_SERVER_ERROR:"InternalServerError"};class gW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"ResourceNotFoundException",$fault:"client",...I});this.name="ResourceNotFoundException",this.$fault="client",Object.setPrototypeOf(this,gW1.prototype)}}kv0.ResourceNotFoundException=gW1;class JW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"ExternalServiceException",$fault:"client",...I});this.name="ExternalServiceException",this.$fault="client",Object.setPrototypeOf(this,JW1.prototype)}}kv0.ExternalServiceException=JW1;class KW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"InvalidIdentityPoolConfigurationException",$fault:"client",...I});this.name="InvalidIdentityPoolConfigurationException",this.$fault="client",Object.setPrototypeOf(this,KW1.prototype)}}kv0.InvalidIdentityPoolConfigurationException=KW1;kv0.MappingRuleMatchType={CONTAINS:"Contains",EQUALS:"Equals",NOT_EQUAL:"NotEqual",STARTS_WITH:"StartsWith"};kv0.RoleMappingType={RULES:"Rules",TOKEN:"Token"};class NW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"DeveloperUserAlreadyRegisteredException",$fault:"client",...I});this.name="DeveloperUserAlreadyRegisteredException",this.$fault="client",Object.setPrototypeOf(this,NW1.prototype)}}kv0.DeveloperUserAlreadyRegisteredException=NW1;class zW1 extends xC.CognitoIdentityServiceException{constructor(I){super({name:"ConcurrentModificationException",$fault:"client",...I});this.name="ConcurrentModificationException",this.$fault="client",Object.setPrototypeOf(this,zW1.prototype)}}kv0.ConcurrentModificationException=zW1});var W3=Y((iv0)=>{Object.defineProperty(iv0,"__esModule",{value:!0});iv0.de_UpdateIdentityPoolCommand=iv0.de_UntagResourceCommand=iv0.de_UnlinkIdentityCommand=iv0.de_UnlinkDeveloperIdentityCommand=iv0.de_TagResourceCommand=iv0.de_SetPrincipalTagAttributeMapCommand=iv0.de_SetIdentityPoolRolesCommand=iv0.de_MergeDeveloperIdentitiesCommand=iv0.de_LookupDeveloperIdentityCommand=iv0.de_ListTagsForResourceCommand=iv0.de_ListIdentityPoolsCommand=iv0.de_ListIdentitiesCommand=iv0.de_GetPrincipalTagAttributeMapCommand=iv0.de_GetOpenIdTokenForDeveloperIdentityCommand=iv0.de_GetOpenIdTokenCommand=iv0.de_GetIdentityPoolRolesCommand=iv0.de_GetIdCommand=iv0.de_GetCredentialsForIdentityCommand=iv0.de_DescribeIdentityPoolCommand=iv0.de_DescribeIdentityCommand=iv0.de_DeleteIdentityPoolCommand=iv0.de_DeleteIdentitiesCommand=iv0.de_CreateIdentityPoolCommand=iv0.se_UpdateIdentityPoolCommand=iv0.se_UntagResourceCommand=iv0.se_UnlinkIdentityCommand=iv0.se_UnlinkDeveloperIdentityCommand=iv0.se_TagResourceCommand=iv0.se_SetPrincipalTagAttributeMapCommand=iv0.se_SetIdentityPoolRolesCommand=iv0.se_MergeDeveloperIdentitiesCommand=iv0.se_LookupDeveloperIdentityCommand=iv0.se_ListTagsForResourceCommand=iv0.se_ListIdentityPoolsCommand=iv0.se_ListIdentitiesCommand=iv0.se_GetPrincipalTagAttributeMapCommand=iv0.se_GetOpenIdTokenForDeveloperIdentityCommand=iv0.se_GetOpenIdTokenCommand=iv0.se_GetIdentityPoolRolesCommand=iv0.se_GetIdCommand=iv0.se_GetCredentialsForIdentityCommand=iv0.se_DescribeIdentityPoolCommand=iv0.se_DescribeIdentityCommand=iv0.se_DeleteIdentityPoolCommand=iv0.se_DeleteIdentitiesCommand=iv0.se_CreateIdentityPoolCommand=void 0;var r0=v0(),hd5=Oc(),jd5=up(),cC=QW1(),kd5=async(I,d)=>{let G=q3("CreateIdentityPool"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_CreateIdentityPoolCommand=kd5;var xd5=async(I,d)=>{let G=q3("DeleteIdentities"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_DeleteIdentitiesCommand=xd5;var cd5=async(I,d)=>{let G=q3("DeleteIdentityPool"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_DeleteIdentityPoolCommand=cd5;var pd5=async(I,d)=>{let G=q3("DescribeIdentity"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_DescribeIdentityCommand=pd5;var id5=async(I,d)=>{let G=q3("DescribeIdentityPool"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_DescribeIdentityPoolCommand=id5;var nd5=async(I,d)=>{let G=q3("GetCredentialsForIdentity"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_GetCredentialsForIdentityCommand=nd5;var rd5=async(I,d)=>{let G=q3("GetId"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_GetIdCommand=rd5;var ad5=async(I,d)=>{let G=q3("GetIdentityPoolRoles"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_GetIdentityPoolRolesCommand=ad5;var sd5=async(I,d)=>{let G=q3("GetOpenIdToken"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_GetOpenIdTokenCommand=sd5;var od5=async(I,d)=>{let G=q3("GetOpenIdTokenForDeveloperIdentity"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_GetOpenIdTokenForDeveloperIdentityCommand=od5;var ed5=async(I,d)=>{let G=q3("GetPrincipalTagAttributeMap"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_GetPrincipalTagAttributeMapCommand=ed5;var td5=async(I,d)=>{let G=q3("ListIdentities"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_ListIdentitiesCommand=td5;var IG5=async(I,d)=>{let G=q3("ListIdentityPools"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_ListIdentityPoolsCommand=IG5;var dG5=async(I,d)=>{let G=q3("ListTagsForResource"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_ListTagsForResourceCommand=dG5;var GG5=async(I,d)=>{let G=q3("LookupDeveloperIdentity"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_LookupDeveloperIdentityCommand=GG5;var ZG5=async(I,d)=>{let G=q3("MergeDeveloperIdentities"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_MergeDeveloperIdentitiesCommand=ZG5;var CG5=async(I,d)=>{let G=q3("SetIdentityPoolRoles"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_SetIdentityPoolRolesCommand=CG5;var WG5=async(I,d)=>{let G=q3("SetPrincipalTagAttributeMap"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_SetPrincipalTagAttributeMapCommand=WG5;var wG5=async(I,d)=>{let G=q3("TagResource"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_TagResourceCommand=wG5;var BG5=async(I,d)=>{let G=q3("UnlinkDeveloperIdentity"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_UnlinkDeveloperIdentityCommand=BG5;var AG5=async(I,d)=>{let G=q3("UnlinkIdentity"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_UnlinkIdentityCommand=AG5;var VG5=async(I,d)=>{let G=q3("UntagResource"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_UntagResourceCommand=VG5;var XG5=async(I,d)=>{let G=q3("UpdateIdentityPool"),Z;return Z=JSON.stringify(r0._json(I)),f3(d,G,"/",void 0,Z)};iv0.se_UpdateIdentityPoolCommand=XG5;var YG5=async(I,d)=>{if(I.statusCode>=300)return _G5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_CreateIdentityPoolCommand=YG5;var _G5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"LimitExceededException":case"com.amazonaws.cognitoidentity#LimitExceededException":throw await fW1(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},DG5=async(I,d)=>{if(I.statusCode>=300)return HG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_DeleteIdentitiesCommand=DG5;var HG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},FG5=async(I,d)=>{if(I.statusCode>=300)return gG5(I,d);return await Dy(I.body,d),{$metadata:J5(I)}};iv0.de_DeleteIdentityPoolCommand=FG5;var gG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},JG5=async(I,d)=>{if(I.statusCode>=300)return KG5(I,d);let G=await U6(I.body,d),Z={};return Z=pv0(G,d),{$metadata:J5(I),...Z}};iv0.de_DescribeIdentityCommand=JG5;var KG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},NG5=async(I,d)=>{if(I.statusCode>=300)return zG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_DescribeIdentityPoolCommand=NG5;var zG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},QG5=async(I,d)=>{if(I.statusCode>=300)return fG5(I,d);let G=await U6(I.body,d),Z={};return Z=wZ5(G,d),{$metadata:J5(I),...Z}};iv0.de_GetCredentialsForIdentityCommand=QG5;var fG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"ExternalServiceException":case"com.amazonaws.cognitoidentity#ExternalServiceException":throw await Tp(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidIdentityPoolConfigurationException":case"com.amazonaws.cognitoidentity#InvalidIdentityPoolConfigurationException":throw await CZ5(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},qG5=async(I,d)=>{if(I.statusCode>=300)return RG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_GetIdCommand=qG5;var RG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"ExternalServiceException":case"com.amazonaws.cognitoidentity#ExternalServiceException":throw await Tp(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"LimitExceededException":case"com.amazonaws.cognitoidentity#LimitExceededException":throw await fW1(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},UG5=async(I,d)=>{if(I.statusCode>=300)return vG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_GetIdentityPoolRolesCommand=UG5;var vG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},EG5=async(I,d)=>{if(I.statusCode>=300)return MG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_GetOpenIdTokenCommand=EG5;var MG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"ExternalServiceException":case"com.amazonaws.cognitoidentity#ExternalServiceException":throw await Tp(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},SG5=async(I,d)=>{if(I.statusCode>=300)return LG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_GetOpenIdTokenForDeveloperIdentityCommand=SG5;var LG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"DeveloperUserAlreadyRegisteredException":case"com.amazonaws.cognitoidentity#DeveloperUserAlreadyRegisteredException":throw await ZZ5(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},yG5=async(I,d)=>{if(I.statusCode>=300)return PG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_GetPrincipalTagAttributeMapCommand=yG5;var PG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},$G5=async(I,d)=>{if(I.statusCode>=300)return uG5(I,d);let G=await U6(I.body,d),Z={};return Z=AZ5(G,d),{$metadata:J5(I),...Z}};iv0.de_ListIdentitiesCommand=$G5;var uG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},TG5=async(I,d)=>{if(I.statusCode>=300)return OG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_ListIdentityPoolsCommand=TG5;var OG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},mG5=async(I,d)=>{if(I.statusCode>=300)return lG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_ListTagsForResourceCommand=mG5;var lG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},bG5=async(I,d)=>{if(I.statusCode>=300)return hG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_LookupDeveloperIdentityCommand=bG5;var hG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},jG5=async(I,d)=>{if(I.statusCode>=300)return kG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_MergeDeveloperIdentitiesCommand=jG5;var kG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},xG5=async(I,d)=>{if(I.statusCode>=300)return cG5(I,d);return await Dy(I.body,d),{$metadata:J5(I)}};iv0.de_SetIdentityPoolRolesCommand=xG5;var cG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"ConcurrentModificationException":case"com.amazonaws.cognitoidentity#ConcurrentModificationException":throw await cv0(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},pG5=async(I,d)=>{if(I.statusCode>=300)return iG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_SetPrincipalTagAttributeMapCommand=pG5;var iG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},nG5=async(I,d)=>{if(I.statusCode>=300)return rG5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_TagResourceCommand=nG5;var rG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},aG5=async(I,d)=>{if(I.statusCode>=300)return sG5(I,d);return await Dy(I.body,d),{$metadata:J5(I)}};iv0.de_UnlinkDeveloperIdentityCommand=aG5;var sG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},oG5=async(I,d)=>{if(I.statusCode>=300)return eG5(I,d);return await Dy(I.body,d),{$metadata:J5(I)}};iv0.de_UnlinkIdentityCommand=oG5;var eG5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"ExternalServiceException":case"com.amazonaws.cognitoidentity#ExternalServiceException":throw await Tp(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},tG5=async(I,d)=>{if(I.statusCode>=300)return IZ5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_UntagResourceCommand=tG5;var IZ5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},dZ5=async(I,d)=>{if(I.statusCode>=300)return GZ5(I,d);let G=await U6(I.body,d),Z={};return Z=r0._json(G),{$metadata:J5(I),...Z}};iv0.de_UpdateIdentityPoolCommand=dZ5;var GZ5=async(I,d)=>{let G={...I,body:await R3(I.body,d)},Z=U3(I,G.body);switch(Z){case"ConcurrentModificationException":case"com.amazonaws.cognitoidentity#ConcurrentModificationException":throw await cv0(G,d);case"InternalErrorException":case"com.amazonaws.cognitoidentity#InternalErrorException":throw await K3(G,d);case"InvalidParameterException":case"com.amazonaws.cognitoidentity#InvalidParameterException":throw await N3(G,d);case"LimitExceededException":case"com.amazonaws.cognitoidentity#LimitExceededException":throw await fW1(G,d);case"NotAuthorizedException":case"com.amazonaws.cognitoidentity#NotAuthorizedException":throw await j3(G,d);case"ResourceConflictException":case"com.amazonaws.cognitoidentity#ResourceConflictException":throw await UZ(G,d);case"ResourceNotFoundException":case"com.amazonaws.cognitoidentity#ResourceNotFoundException":throw await w6(G,d);case"TooManyRequestsException":case"com.amazonaws.cognitoidentity#TooManyRequestsException":throw await z3(G,d);default:let C=G.body;return Q3({output:I,parsedBody:C,errorCode:Z})}},cv0=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.ConcurrentModificationException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},ZZ5=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.DeveloperUserAlreadyRegisteredException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},Tp=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.ExternalServiceException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},K3=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.InternalErrorException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},CZ5=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.InvalidIdentityPoolConfigurationException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},N3=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.InvalidParameterException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},fW1=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.LimitExceededException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},j3=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.NotAuthorizedException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},UZ=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.ResourceConflictException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},w6=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.ResourceNotFoundException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},z3=async(I,d)=>{let G=I.body,Z=r0._json(G),C=new cC.TooManyRequestsException({$metadata:J5(I),...Z});return r0.decorateServiceException(C,G)},WZ5=(I,d)=>{return r0.take(I,{AccessKeyId:r0.expectString,Expiration:(G)=>r0.expectNonNull(r0.parseEpochTimestamp(r0.expectNumber(G))),SecretKey:r0.expectString,SessionToken:r0.expectString})},wZ5=(I,d)=>{return r0.take(I,{Credentials:(G)=>WZ5(G,d),IdentityId:r0.expectString})},BZ5=(I,d)=>{return(I||[]).filter((Z)=>Z!=null).map((Z)=>{return pv0(Z,d)})},pv0=(I,d)=>{return r0.take(I,{CreationDate:(G)=>r0.expectNonNull(r0.parseEpochTimestamp(r0.expectNumber(G))),IdentityId:r0.expectString,LastModifiedDate:(G)=>r0.expectNonNull(r0.parseEpochTimestamp(r0.expectNumber(G))),Logins:r0._json})},AZ5=(I,d)=>{return r0.take(I,{Identities:(G)=>BZ5(G,d),IdentityPoolId:r0.expectString,NextToken:r0.expectString})},J5=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),Dy=(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return Promise.resolve(I);return d.streamCollector(I)||Promise.resolve(new Uint8Array)},VZ5=(I,d)=>Dy(I,d).then((G)=>d.utf8Encoder(G)),Q3=r0.withBaseException(jd5.CognitoIdentityServiceException),f3=async(I,d,G,Z,C)=>{let{hostname:W,protocol:w="https",port:B,path:A}=await I.endpoint(),V={protocol:w,hostname:W,port:B,method:"POST",path:A.endsWith("/")?A.slice(0,-1)+G:A+G,headers:d};if(Z!==void 0)V.hostname=Z;if(C!==void 0)V.body=C;return new hd5.HttpRequest(V)};function q3(I){return{"content-type":"application/x-amz-json-1.1","x-amz-target":`AWSCognitoIdentityService.${I}`}}var U6=(I,d)=>VZ5(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),R3=async(I,d)=>{let G=await U6(I,d);return G.message=G.message??G.Message,G},U3=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)}});var UW1=Y((RW1)=>{Object.defineProperty(RW1,"__esModule",{value:!0});RW1.CreateIdentityPoolCommand=RW1.$Command=void 0;var dC5=u2(),GC5=r2(),ZC5=A9(),av0=v0();Object.defineProperty(RW1,"$Command",{enumerable:!0,get:function(){return av0.Command}});var rv0=W3();class qW1 extends av0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(GC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(dC5.getEndpointPlugin(d,qW1.getEndpointParameterInstructions())),this.middlewareStack.use(ZC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"CreateIdentityPoolCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return rv0.se_CreateIdentityPoolCommand(I,d)}deserialize(I,d){return rv0.de_CreateIdentityPoolCommand(I,d)}}RW1.CreateIdentityPoolCommand=qW1});var MW1=Y((EW1)=>{Object.defineProperty(EW1,"__esModule",{value:!0});EW1.DeleteIdentitiesCommand=EW1.$Command=void 0;var CC5=u2(),WC5=r2(),wC5=A9(),ev0=v0();Object.defineProperty(EW1,"$Command",{enumerable:!0,get:function(){return ev0.Command}});var ov0=W3();class vW1 extends ev0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(WC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(CC5.getEndpointPlugin(d,vW1.getEndpointParameterInstructions())),this.middlewareStack.use(wC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"DeleteIdentitiesCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return ov0.se_DeleteIdentitiesCommand(I,d)}deserialize(I,d){return ov0.de_DeleteIdentitiesCommand(I,d)}}EW1.DeleteIdentitiesCommand=vW1});var yW1=Y((LW1)=>{Object.defineProperty(LW1,"__esModule",{value:!0});LW1.DeleteIdentityPoolCommand=LW1.$Command=void 0;var BC5=u2(),AC5=r2(),VC5=A9(),dE0=v0();Object.defineProperty(LW1,"$Command",{enumerable:!0,get:function(){return dE0.Command}});var IE0=W3();class SW1 extends dE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(AC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(BC5.getEndpointPlugin(d,SW1.getEndpointParameterInstructions())),this.middlewareStack.use(VC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"DeleteIdentityPoolCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return IE0.se_DeleteIdentityPoolCommand(I,d)}deserialize(I,d){return IE0.de_DeleteIdentityPoolCommand(I,d)}}LW1.DeleteIdentityPoolCommand=SW1});var uW1=Y(($W1)=>{Object.defineProperty($W1,"__esModule",{value:!0});$W1.DescribeIdentityCommand=$W1.$Command=void 0;var XC5=u2(),YC5=r2(),_C5=A9(),CE0=v0();Object.defineProperty($W1,"$Command",{enumerable:!0,get:function(){return CE0.Command}});var ZE0=W3();class PW1 extends CE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(YC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(XC5.getEndpointPlugin(d,PW1.getEndpointParameterInstructions())),this.middlewareStack.use(_C5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"DescribeIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return ZE0.se_DescribeIdentityCommand(I,d)}deserialize(I,d){return ZE0.de_DescribeIdentityCommand(I,d)}}$W1.DescribeIdentityCommand=PW1});var mW1=Y((OW1)=>{Object.defineProperty(OW1,"__esModule",{value:!0});OW1.DescribeIdentityPoolCommand=OW1.$Command=void 0;var DC5=u2(),HC5=r2(),FC5=A9(),BE0=v0();Object.defineProperty(OW1,"$Command",{enumerable:!0,get:function(){return BE0.Command}});var wE0=W3();class TW1 extends BE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(HC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(DC5.getEndpointPlugin(d,TW1.getEndpointParameterInstructions())),this.middlewareStack.use(FC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"DescribeIdentityPoolCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return wE0.se_DescribeIdentityPoolCommand(I,d)}deserialize(I,d){return wE0.de_DescribeIdentityPoolCommand(I,d)}}OW1.DescribeIdentityPoolCommand=TW1});var hW1=Y((bW1)=>{Object.defineProperty(bW1,"__esModule",{value:!0});bW1.GetCredentialsForIdentityCommand=bW1.$Command=void 0;var gC5=u2(),JC5=r2(),XE0=v0();Object.defineProperty(bW1,"$Command",{enumerable:!0,get:function(){return XE0.Command}});var VE0=W3();class lW1 extends XE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(JC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(gC5.getEndpointPlugin(d,lW1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"GetCredentialsForIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return VE0.se_GetCredentialsForIdentityCommand(I,d)}deserialize(I,d){return VE0.de_GetCredentialsForIdentityCommand(I,d)}}bW1.GetCredentialsForIdentityCommand=lW1});var xW1=Y((kW1)=>{Object.defineProperty(kW1,"__esModule",{value:!0});kW1.GetIdCommand=kW1.$Command=void 0;var KC5=u2(),NC5=r2(),DE0=v0();Object.defineProperty(kW1,"$Command",{enumerable:!0,get:function(){return DE0.Command}});var _E0=W3();class jW1 extends DE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(NC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(KC5.getEndpointPlugin(d,jW1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"GetIdCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return _E0.se_GetIdCommand(I,d)}deserialize(I,d){return _E0.de_GetIdCommand(I,d)}}kW1.GetIdCommand=jW1});var iW1=Y((pW1)=>{Object.defineProperty(pW1,"__esModule",{value:!0});pW1.GetIdentityPoolRolesCommand=pW1.$Command=void 0;var zC5=u2(),QC5=r2(),fC5=A9(),gE0=v0();Object.defineProperty(pW1,"$Command",{enumerable:!0,get:function(){return gE0.Command}});var FE0=W3();class cW1 extends gE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(QC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(zC5.getEndpointPlugin(d,cW1.getEndpointParameterInstructions())),this.middlewareStack.use(fC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"GetIdentityPoolRolesCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return FE0.se_GetIdentityPoolRolesCommand(I,d)}deserialize(I,d){return FE0.de_GetIdentityPoolRolesCommand(I,d)}}pW1.GetIdentityPoolRolesCommand=cW1});var aW1=Y((rW1)=>{Object.defineProperty(rW1,"__esModule",{value:!0});rW1.GetOpenIdTokenCommand=rW1.$Command=void 0;var qC5=u2(),RC5=r2(),NE0=v0();Object.defineProperty(rW1,"$Command",{enumerable:!0,get:function(){return NE0.Command}});var KE0=W3();class nW1 extends NE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(RC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(qC5.getEndpointPlugin(d,nW1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"GetOpenIdTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return KE0.se_GetOpenIdTokenCommand(I,d)}deserialize(I,d){return KE0.de_GetOpenIdTokenCommand(I,d)}}rW1.GetOpenIdTokenCommand=nW1});var eW1=Y((oW1)=>{Object.defineProperty(oW1,"__esModule",{value:!0});oW1.GetOpenIdTokenForDeveloperIdentityCommand=oW1.$Command=void 0;var UC5=u2(),vC5=r2(),EC5=A9(),fE0=v0();Object.defineProperty(oW1,"$Command",{enumerable:!0,get:function(){return fE0.Command}});var QE0=W3();class sW1 extends fE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(vC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(UC5.getEndpointPlugin(d,sW1.getEndpointParameterInstructions())),this.middlewareStack.use(EC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"GetOpenIdTokenForDeveloperIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return QE0.se_GetOpenIdTokenForDeveloperIdentityCommand(I,d)}deserialize(I,d){return QE0.de_GetOpenIdTokenForDeveloperIdentityCommand(I,d)}}oW1.GetOpenIdTokenForDeveloperIdentityCommand=sW1});var dw1=Y((Iw1)=>{Object.defineProperty(Iw1,"__esModule",{value:!0});Iw1.GetPrincipalTagAttributeMapCommand=Iw1.$Command=void 0;var MC5=u2(),SC5=r2(),LC5=A9(),UE0=v0();Object.defineProperty(Iw1,"$Command",{enumerable:!0,get:function(){return UE0.Command}});var RE0=W3();class tW1 extends UE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(SC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(MC5.getEndpointPlugin(d,tW1.getEndpointParameterInstructions())),this.middlewareStack.use(LC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"GetPrincipalTagAttributeMapCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return RE0.se_GetPrincipalTagAttributeMapCommand(I,d)}deserialize(I,d){return RE0.de_GetPrincipalTagAttributeMapCommand(I,d)}}Iw1.GetPrincipalTagAttributeMapCommand=tW1});var Cw1=Y((Zw1)=>{Object.defineProperty(Zw1,"__esModule",{value:!0});Zw1.ListIdentitiesCommand=Zw1.$Command=void 0;var yC5=u2(),PC5=r2(),$C5=A9(),ME0=v0();Object.defineProperty(Zw1,"$Command",{enumerable:!0,get:function(){return ME0.Command}});var EE0=W3();class Gw1 extends ME0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(PC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(yC5.getEndpointPlugin(d,Gw1.getEndpointParameterInstructions())),this.middlewareStack.use($C5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"ListIdentitiesCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return EE0.se_ListIdentitiesCommand(I,d)}deserialize(I,d){return EE0.de_ListIdentitiesCommand(I,d)}}Zw1.ListIdentitiesCommand=Gw1});var Op=Y((ww1)=>{Object.defineProperty(ww1,"__esModule",{value:!0});ww1.ListIdentityPoolsCommand=ww1.$Command=void 0;var uC5=u2(),TC5=r2(),OC5=A9(),yE0=v0();Object.defineProperty(ww1,"$Command",{enumerable:!0,get:function(){return yE0.Command}});var LE0=W3();class Ww1 extends yE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(TC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(uC5.getEndpointPlugin(d,Ww1.getEndpointParameterInstructions())),this.middlewareStack.use(OC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"ListIdentityPoolsCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return LE0.se_ListIdentityPoolsCommand(I,d)}deserialize(I,d){return LE0.de_ListIdentityPoolsCommand(I,d)}}ww1.ListIdentityPoolsCommand=Ww1});var Vw1=Y((Aw1)=>{Object.defineProperty(Aw1,"__esModule",{value:!0});Aw1.ListTagsForResourceCommand=Aw1.$Command=void 0;var mC5=u2(),lC5=r2(),bC5=A9(),uE0=v0();Object.defineProperty(Aw1,"$Command",{enumerable:!0,get:function(){return uE0.Command}});var $E0=W3();class Bw1 extends uE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(lC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(mC5.getEndpointPlugin(d,Bw1.getEndpointParameterInstructions())),this.middlewareStack.use(bC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"ListTagsForResourceCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return $E0.se_ListTagsForResourceCommand(I,d)}deserialize(I,d){return $E0.de_ListTagsForResourceCommand(I,d)}}Aw1.ListTagsForResourceCommand=Bw1});var _w1=Y((Yw1)=>{Object.defineProperty(Yw1,"__esModule",{value:!0});Yw1.LookupDeveloperIdentityCommand=Yw1.$Command=void 0;var hC5=u2(),jC5=r2(),kC5=A9(),mE0=v0();Object.defineProperty(Yw1,"$Command",{enumerable:!0,get:function(){return mE0.Command}});var OE0=W3();class Xw1 extends mE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(jC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(hC5.getEndpointPlugin(d,Xw1.getEndpointParameterInstructions())),this.middlewareStack.use(kC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"LookupDeveloperIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return OE0.se_LookupDeveloperIdentityCommand(I,d)}deserialize(I,d){return OE0.de_LookupDeveloperIdentityCommand(I,d)}}Yw1.LookupDeveloperIdentityCommand=Xw1});var Fw1=Y((Hw1)=>{Object.defineProperty(Hw1,"__esModule",{value:!0});Hw1.MergeDeveloperIdentitiesCommand=Hw1.$Command=void 0;var xC5=u2(),cC5=r2(),pC5=A9(),hE0=v0();Object.defineProperty(Hw1,"$Command",{enumerable:!0,get:function(){return hE0.Command}});var bE0=W3();class Dw1 extends hE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(cC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(xC5.getEndpointPlugin(d,Dw1.getEndpointParameterInstructions())),this.middlewareStack.use(pC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"MergeDeveloperIdentitiesCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return bE0.se_MergeDeveloperIdentitiesCommand(I,d)}deserialize(I,d){return bE0.de_MergeDeveloperIdentitiesCommand(I,d)}}Hw1.MergeDeveloperIdentitiesCommand=Dw1});var Kw1=Y((Jw1)=>{Object.defineProperty(Jw1,"__esModule",{value:!0});Jw1.SetIdentityPoolRolesCommand=Jw1.$Command=void 0;var iC5=u2(),nC5=r2(),rC5=A9(),xE0=v0();Object.defineProperty(Jw1,"$Command",{enumerable:!0,get:function(){return xE0.Command}});var kE0=W3();class gw1 extends xE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(nC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(iC5.getEndpointPlugin(d,gw1.getEndpointParameterInstructions())),this.middlewareStack.use(rC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"SetIdentityPoolRolesCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return kE0.se_SetIdentityPoolRolesCommand(I,d)}deserialize(I,d){return kE0.de_SetIdentityPoolRolesCommand(I,d)}}Jw1.SetIdentityPoolRolesCommand=gw1});var Qw1=Y((zw1)=>{Object.defineProperty(zw1,"__esModule",{value:!0});zw1.SetPrincipalTagAttributeMapCommand=zw1.$Command=void 0;var aC5=u2(),sC5=r2(),oC5=A9(),iE0=v0();Object.defineProperty(zw1,"$Command",{enumerable:!0,get:function(){return iE0.Command}});var pE0=W3();class Nw1 extends iE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(sC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(aC5.getEndpointPlugin(d,Nw1.getEndpointParameterInstructions())),this.middlewareStack.use(oC5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"SetPrincipalTagAttributeMapCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return pE0.se_SetPrincipalTagAttributeMapCommand(I,d)}deserialize(I,d){return pE0.de_SetPrincipalTagAttributeMapCommand(I,d)}}zw1.SetPrincipalTagAttributeMapCommand=Nw1});var Rw1=Y((qw1)=>{Object.defineProperty(qw1,"__esModule",{value:!0});qw1.TagResourceCommand=qw1.$Command=void 0;var eC5=u2(),tC5=r2(),IW5=A9(),aE0=v0();Object.defineProperty(qw1,"$Command",{enumerable:!0,get:function(){return aE0.Command}});var rE0=W3();class fw1 extends aE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(tC5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(eC5.getEndpointPlugin(d,fw1.getEndpointParameterInstructions())),this.middlewareStack.use(IW5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"TagResourceCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return rE0.se_TagResourceCommand(I,d)}deserialize(I,d){return rE0.de_TagResourceCommand(I,d)}}qw1.TagResourceCommand=fw1});var Ew1=Y((vw1)=>{Object.defineProperty(vw1,"__esModule",{value:!0});vw1.UnlinkDeveloperIdentityCommand=vw1.$Command=void 0;var dW5=u2(),GW5=r2(),ZW5=A9(),eE0=v0();Object.defineProperty(vw1,"$Command",{enumerable:!0,get:function(){return eE0.Command}});var oE0=W3();class Uw1 extends eE0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(GW5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(dW5.getEndpointPlugin(d,Uw1.getEndpointParameterInstructions())),this.middlewareStack.use(ZW5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"UnlinkDeveloperIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return oE0.se_UnlinkDeveloperIdentityCommand(I,d)}deserialize(I,d){return oE0.de_UnlinkDeveloperIdentityCommand(I,d)}}vw1.UnlinkDeveloperIdentityCommand=Uw1});var Lw1=Y((Sw1)=>{Object.defineProperty(Sw1,"__esModule",{value:!0});Sw1.UnlinkIdentityCommand=Sw1.$Command=void 0;var CW5=u2(),WW5=r2(),dM0=v0();Object.defineProperty(Sw1,"$Command",{enumerable:!0,get:function(){return dM0.Command}});var IM0=W3();class Mw1 extends dM0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(WW5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(CW5.getEndpointPlugin(d,Mw1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"UnlinkIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return IM0.se_UnlinkIdentityCommand(I,d)}deserialize(I,d){return IM0.de_UnlinkIdentityCommand(I,d)}}Sw1.UnlinkIdentityCommand=Mw1});var $w1=Y((Pw1)=>{Object.defineProperty(Pw1,"__esModule",{value:!0});Pw1.UntagResourceCommand=Pw1.$Command=void 0;var wW5=u2(),BW5=r2(),AW5=A9(),CM0=v0();Object.defineProperty(Pw1,"$Command",{enumerable:!0,get:function(){return CM0.Command}});var ZM0=W3();class yw1 extends CM0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(BW5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(wW5.getEndpointPlugin(d,yw1.getEndpointParameterInstructions())),this.middlewareStack.use(AW5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"UntagResourceCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return ZM0.se_UntagResourceCommand(I,d)}deserialize(I,d){return ZM0.de_UntagResourceCommand(I,d)}}Pw1.UntagResourceCommand=yw1});var Ow1=Y((Tw1)=>{Object.defineProperty(Tw1,"__esModule",{value:!0});Tw1.UpdateIdentityPoolCommand=Tw1.$Command=void 0;var VW5=u2(),XW5=r2(),YW5=A9(),BM0=v0();Object.defineProperty(Tw1,"$Command",{enumerable:!0,get:function(){return BM0.Command}});var wM0=W3();class uw1 extends BM0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(XW5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(VW5.getEndpointPlugin(d,uw1.getEndpointParameterInstructions())),this.middlewareStack.use(YW5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"CognitoIdentityClient",commandName:"UpdateIdentityPoolCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return wM0.se_UpdateIdentityPoolCommand(I,d)}deserialize(I,d){return wM0.de_UpdateIdentityPoolCommand(I,d)}}Tw1.UpdateIdentityPoolCommand=uw1});var YM0=Y((VM0)=>{Object.defineProperty(VM0,"__esModule",{value:!0});VM0.CognitoIdentity=void 0;var _W5=v0(),DW5=$p(),HW5=UW1(),FW5=MW1(),gW5=yW1(),JW5=uW1(),KW5=mW1(),NW5=hW1(),zW5=xW1(),QW5=iW1(),fW5=aW1(),qW5=eW1(),RW5=dw1(),UW5=Cw1(),vW5=Op(),EW5=Vw1(),MW5=_w1(),SW5=Fw1(),LW5=Kw1(),yW5=Qw1(),PW5=Rw1(),$W5=Ew1(),uW5=Lw1(),TW5=$w1(),OW5=Ow1(),mW5={CreateIdentityPoolCommand:HW5.CreateIdentityPoolCommand,DeleteIdentitiesCommand:FW5.DeleteIdentitiesCommand,DeleteIdentityPoolCommand:gW5.DeleteIdentityPoolCommand,DescribeIdentityCommand:JW5.DescribeIdentityCommand,DescribeIdentityPoolCommand:KW5.DescribeIdentityPoolCommand,GetCredentialsForIdentityCommand:NW5.GetCredentialsForIdentityCommand,GetIdCommand:zW5.GetIdCommand,GetIdentityPoolRolesCommand:QW5.GetIdentityPoolRolesCommand,GetOpenIdTokenCommand:fW5.GetOpenIdTokenCommand,GetOpenIdTokenForDeveloperIdentityCommand:qW5.GetOpenIdTokenForDeveloperIdentityCommand,GetPrincipalTagAttributeMapCommand:RW5.GetPrincipalTagAttributeMapCommand,ListIdentitiesCommand:UW5.ListIdentitiesCommand,ListIdentityPoolsCommand:vW5.ListIdentityPoolsCommand,ListTagsForResourceCommand:EW5.ListTagsForResourceCommand,LookupDeveloperIdentityCommand:MW5.LookupDeveloperIdentityCommand,MergeDeveloperIdentitiesCommand:SW5.MergeDeveloperIdentitiesCommand,SetIdentityPoolRolesCommand:LW5.SetIdentityPoolRolesCommand,SetPrincipalTagAttributeMapCommand:yW5.SetPrincipalTagAttributeMapCommand,TagResourceCommand:PW5.TagResourceCommand,UnlinkDeveloperIdentityCommand:$W5.UnlinkDeveloperIdentityCommand,UnlinkIdentityCommand:uW5.UnlinkIdentityCommand,UntagResourceCommand:TW5.UntagResourceCommand,UpdateIdentityPoolCommand:OW5.UpdateIdentityPoolCommand};class mw1 extends DW5.CognitoIdentityClient{}VM0.CognitoIdentity=mw1;_W5.createAggregatedClient(mW5,mw1)});var _M0=Y((k9)=>{Object.defineProperty(k9,"__esModule",{value:!0});var v3=x1();v3.__exportStar(UW1(),k9);v3.__exportStar(MW1(),k9);v3.__exportStar(yW1(),k9);v3.__exportStar(uW1(),k9);v3.__exportStar(mW1(),k9);v3.__exportStar(hW1(),k9);v3.__exportStar(xW1(),k9);v3.__exportStar(iW1(),k9);v3.__exportStar(aW1(),k9);v3.__exportStar(eW1(),k9);v3.__exportStar(dw1(),k9);v3.__exportStar(Cw1(),k9);v3.__exportStar(Op(),k9);v3.__exportStar(Vw1(),k9);v3.__exportStar(_w1(),k9);v3.__exportStar(Fw1(),k9);v3.__exportStar(Kw1(),k9);v3.__exportStar(Qw1(),k9);v3.__exportStar(Rw1(),k9);v3.__exportStar(Ew1(),k9);v3.__exportStar(Lw1(),k9);v3.__exportStar($w1(),k9);v3.__exportStar(Ow1(),k9)});var HM0=Y((DM0)=>{Object.defineProperty(DM0,"__esModule",{value:!0})});var JM0=Y((FM0)=>{Object.defineProperty(FM0,"__esModule",{value:!0});FM0.paginateListIdentityPools=void 0;var lW5=$p(),bW5=Op(),hW5=async(I,d,...G)=>{return await I.send(new bW5.ListIdentityPoolsCommand(d),...G)};async function*jW5(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.NextToken=Z,d.MaxResults=I.pageSize,I.client instanceof lW5.CognitoIdentityClient)W=await hW5(I.client,d,...G);else throw new Error("Invalid client, expected CognitoIdentity | CognitoIdentityClient");yield W;let w=Z;Z=W.NextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}FM0.paginateListIdentityPools=jW5});var NM0=Y((mp)=>{Object.defineProperty(mp,"__esModule",{value:!0});var KM0=x1();KM0.__exportStar(HM0(),mp);KM0.__exportStar(JM0(),mp)});var zM0=Y((lw1)=>{Object.defineProperty(lw1,"__esModule",{value:!0});var kW5=x1();kW5.__exportStar(QW1(),lw1)});var Fy=Y((dD)=>{Object.defineProperty(dD,"__esModule",{value:!0});dD.CognitoIdentityServiceException=void 0;var Hy=x1();Hy.__exportStar($p(),dD);Hy.__exportStar(YM0(),dD);Hy.__exportStar(_M0(),dD);Hy.__exportStar(NM0(),dD);Hy.__exportStar(zM0(),dD);var xW5=up();Object.defineProperty(dD,"CognitoIdentityServiceException",{enumerable:!0,get:function(){return xW5.CognitoIdentityServiceException}})});var fM0=Y((QM0)=>{Object.defineProperty(QM0,"__esModule",{value:!0})});var RM0=Y((qM0)=>{Object.defineProperty(qM0,"__esModule",{value:!0})});var vM0=Y((UM0)=>{Object.defineProperty(UM0,"__esModule",{value:!0})});var bw1=Y((EM0)=>{Object.defineProperty(EM0,"__esModule",{value:!0});EM0.resolveLogins=void 0;function pW5(I){return Promise.all(Object.keys(I).reduce((d,G)=>{let Z=I[G];if(typeof Z==="string")d.push([G,Z]);else d.push(Z().then((C)=>[G,C]));return d},[])).then((d)=>d.reduce((G,[Z,C])=>{return G[Z]=C,G},{}))}EM0.resolveLogins=pW5});var jw1=Y((SM0)=>{Object.defineProperty(SM0,"__esModule",{value:!0});SM0.fromCognitoIdentity=void 0;var iW5=Fy(),hw1=W4(),nW5=bw1();function rW5(I){return async()=>{let{Credentials:{AccessKeyId:d=aW5(),Expiration:G,SecretKey:Z=oW5(),SessionToken:C}=sW5()}=await I.client.send(new iW5.GetCredentialsForIdentityCommand({CustomRoleArn:I.customRoleArn,IdentityId:I.identityId,Logins:I.logins?await nW5.resolveLogins(I.logins):void 0}));return{identityId:I.identityId,accessKeyId:d,secretAccessKey:Z,sessionToken:C,expiration:G}}}SM0.fromCognitoIdentity=rW5;function aW5(){throw new hw1.CredentialsProviderError("Response from Amazon Cognito contained no access key ID")}function sW5(){throw new hw1.CredentialsProviderError("Response from Amazon Cognito contained no credentials")}function oW5(){throw new hw1.CredentialsProviderError("Response from Amazon Cognito contained no secret key")}});var uM0=Y((PM0)=>{Object.defineProperty(PM0,"__esModule",{value:!0});PM0.IndexedDbStorage=void 0;var kw1="IdentityIds";class yM0{constructor(I="aws:cognito-identity-ids"){this.dbName=I}getItem(I){return this.withObjectStore("readonly",(d)=>{let G=d.get(I);return new Promise((Z)=>{G.onerror=()=>Z(null),G.onsuccess=()=>Z(G.result?G.result.value:null)})}).catch(()=>null)}removeItem(I){return this.withObjectStore("readwrite",(d)=>{let G=d.delete(I);return new Promise((Z,C)=>{G.onerror=()=>C(G.error),G.onsuccess=()=>Z()})})}setItem(I,d){return this.withObjectStore("readwrite",(G)=>{let Z=G.put({id:I,value:d});return new Promise((C,W)=>{Z.onerror=()=>W(Z.error),Z.onsuccess=()=>C()})})}getDb(){let I=self.indexedDB.open(this.dbName,1);return new Promise((d,G)=>{I.onsuccess=()=>{d(I.result)},I.onerror=()=>{G(I.error)},I.onblocked=()=>{G(new Error("Unable to access DB"))},I.onupgradeneeded=()=>{let Z=I.result;Z.onerror=()=>{G(new Error("Failed to create object store"))},Z.createObjectStore(kw1,{keyPath:"id"})}})}withObjectStore(I,d){return this.getDb().then((G)=>{let Z=G.transaction(kw1,I);return Z.oncomplete=()=>G.close(),new Promise((C,W)=>{Z.onerror=()=>W(Z.error),C(d(Z.objectStore(kw1)))}).catch((C)=>{throw G.close(),C})})}}PM0.IndexedDbStorage=yM0});var lM0=Y((OM0)=>{Object.defineProperty(OM0,"__esModule",{value:!0});OM0.InMemoryStorage=void 0;class TM0{constructor(I={}){this.store=I}getItem(I){if(I in this.store)return this.store[I];return null}removeItem(I){delete this.store[I]}setItem(I,d){this.store[I]=d}}OM0.InMemoryStorage=TM0});var jM0=Y((bM0)=>{Object.defineProperty(bM0,"__esModule",{value:!0});bM0.localStorage=void 0;var eW5=uM0(),tW5=lM0(),Iw5=new tW5.InMemoryStorage;function dw5(){if(typeof self==="object"&&self.indexedDB)return new eW5.IndexedDbStorage;if(typeof window==="object"&&window.localStorage)return window.localStorage;return Iw5}bM0.localStorage=dw5});var cM0=Y((kM0)=>{Object.defineProperty(kM0,"__esModule",{value:!0});kM0.fromCognitoIdentityPool=void 0;var Gw5=Fy(),Zw5=W4(),Cw5=jw1(),Ww5=jM0(),ww5=bw1();function Bw5({accountId:I,cache:d=Ww5.localStorage(),client:G,customRoleArn:Z,identityPoolId:C,logins:W,userIdentifier:w=!W||Object.keys(W).length===0?"ANONYMOUS":void 0}){let B=w?`aws:cognito-identity-credentials:${C}:${w}`:void 0,A=async()=>{let V=B&&await d.getItem(B);if(!V){let{IdentityId:X=Aw5()}=await G.send(new Gw5.GetIdCommand({AccountId:I,IdentityPoolId:C,Logins:W?await ww5.resolveLogins(W):void 0}));if(V=X,B)Promise.resolve(d.setItem(B,V)).catch(()=>{})}return A=Cw5.fromCognitoIdentity({client:G,customRoleArn:Z,logins:W,identityId:V}),A()};return()=>A().catch(async(V)=>{if(B)Promise.resolve(d.removeItem(B)).catch(()=>{});throw V})}kM0.fromCognitoIdentityPool=Bw5;function Aw5(){throw new Zw5.CredentialsProviderError("Response from Amazon Cognito contained no identity ID")}});var xw1=Y((VJ)=>{Object.defineProperty(VJ,"__esModule",{value:!0});var gy=x1();gy.__exportStar(fM0(),VJ);gy.__exportStar(RM0(),VJ);gy.__exportStar(vM0(),VJ);gy.__exportStar(jw1(),VJ);gy.__exportStar(cM0(),VJ)});var nM0=Y((pM0)=>{Object.defineProperty(pM0,"__esModule",{value:!0});pM0.fromCognitoIdentity=void 0;var Vw5=Fy(),Xw5=xw1(),Yw5=(I)=>{var d;return Xw5.fromCognitoIdentity({...I,client:new Vw5.CognitoIdentityClient((d=I.clientConfig)!==null&&d!==void 0?d:{})})};pM0.fromCognitoIdentity=Yw5});var sM0=Y((rM0)=>{Object.defineProperty(rM0,"__esModule",{value:!0});rM0.fromCognitoIdentityPool=void 0;var _w5=Fy(),Dw5=xw1(),Hw5=(I)=>{var d;return Dw5.fromCognitoIdentityPool({...I,client:new _w5.CognitoIdentityClient((d=I.clientConfig)!==null&&d!==void 0?d:{})})};rM0.fromCognitoIdentityPool=Hw5});var tM0=Y((oM0)=>{Object.defineProperty(oM0,"__esModule",{value:!0});oM0.fromContainerMetadata=void 0;var Fw5=i_(),gw5=(I)=>Fw5.fromContainerMetadata(I);oM0.fromContainerMetadata=gw5});var wS0=Y((IS0)=>{Object.defineProperty(IS0,"__esModule",{value:!0});IS0.fromEnv=IS0.ENV_EXPIRATION=IS0.ENV_SESSION=IS0.ENV_SECRET=IS0.ENV_KEY=void 0;var Jw5=W4();IS0.ENV_KEY="AWS_ACCESS_KEY_ID";IS0.ENV_SECRET="AWS_SECRET_ACCESS_KEY";IS0.ENV_SESSION="AWS_SESSION_TOKEN";IS0.ENV_EXPIRATION="AWS_CREDENTIAL_EXPIRATION";var Kw5=()=>async()=>{let I=process.env[IS0.ENV_KEY],d=process.env[IS0.ENV_SECRET],G=process.env[IS0.ENV_SESSION],Z=process.env[IS0.ENV_EXPIRATION];if(I&&d)return{accessKeyId:I,secretAccessKey:d,...G&&{sessionToken:G},...Z&&{expiration:new Date(Z)}};throw new Jw5.CredentialsProviderError("Unable to find environment variable credentials.")};IS0.fromEnv=Kw5});var lp=Y((cw1)=>{Object.defineProperty(cw1,"__esModule",{value:!0});var Nw5=x1();Nw5.__exportStar(wS0(),cw1)});var VS0=Y((BS0)=>{Object.defineProperty(BS0,"__esModule",{value:!0});BS0.fromEnv=void 0;var zw5=lp(),Qw5=()=>zw5.fromEnv();BS0.fromEnv=Qw5});var pw1=Y((XS0)=>{Object.defineProperty(XS0,"__esModule",{value:!0});XS0.getHostHeaderPlugin=XS0.hostHeaderMiddlewareOptions=XS0.hostHeaderMiddleware=XS0.resolveHostHeaderConfig=void 0;var fw5=J8();function qw5(I){return I}XS0.resolveHostHeaderConfig=qw5;var Rw5=(I)=>(d)=>async(G)=>{if(!fw5.HttpRequest.isInstance(G.request))return d(G);let{request:Z}=G,{handlerProtocol:C=""}=I.requestHandler.metadata||{};if(C.indexOf("h2")>=0&&!Z.headers[":authority"])delete Z.headers.host,Z.headers[":authority"]="";else if(!Z.headers.host){let W=Z.hostname;if(Z.port!=null)W+=`:${Z.port}`;Z.headers.host=W}return d(G)};XS0.hostHeaderMiddleware=Rw5;XS0.hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};var Uw5=(I)=>({applyToStack:(d)=>{d.add(XS0.hostHeaderMiddleware(I),XS0.hostHeaderMiddlewareOptions)}});XS0.getHostHeaderPlugin=Uw5});var KS0=Y((HS0)=>{Object.defineProperty(HS0,"__esModule",{value:!0});HS0.getLoggerPlugin=HS0.loggerMiddlewareOptions=HS0.loggerMiddleware=void 0;var Ew5=()=>(I,d)=>async(G)=>{var Z,C;try{let W=await I(G),{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X,overrideOutputFilterSensitiveLog:_}=V,F=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog,g=_!==null&&_!==void 0?_:d.outputFilterSensitiveLog,{$metadata:J,...K}=W.output;return(Z=A===null||A===void 0?void 0:A.info)===null||Z===void 0||Z.call(A,{clientName:w,commandName:B,input:F(G.input),output:g(K),metadata:J}),W}catch(W){let{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X}=V,_=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog;throw(C=A===null||A===void 0?void 0:A.error)===null||C===void 0||C.call(A,{clientName:w,commandName:B,input:_(G.input),error:W,metadata:W.$metadata}),W}};HS0.loggerMiddleware=Ew5;HS0.loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};var Mw5=(I)=>({applyToStack:(d)=>{d.add(HS0.loggerMiddleware(),HS0.loggerMiddlewareOptions)}});HS0.getLoggerPlugin=Mw5});var nw1=Y((iw1)=>{Object.defineProperty(iw1,"__esModule",{value:!0});var Sw5=x1();Sw5.__exportStar(KS0(),iw1)});var rw1=Y((zS0)=>{Object.defineProperty(zS0,"__esModule",{value:!0});zS0.getRecursionDetectionPlugin=zS0.addRecursionDetectionMiddlewareOptions=zS0.recursionDetectionMiddleware=void 0;var Lw5=J8(),NS0="X-Amzn-Trace-Id",yw5="AWS_LAMBDA_FUNCTION_NAME",Pw5="_X_AMZN_TRACE_ID",$w5=(I)=>(d)=>async(G)=>{let{request:Z}=G;if(!Lw5.HttpRequest.isInstance(Z)||I.runtime!=="node"||Z.headers.hasOwnProperty(NS0))return d(G);let C=process.env[yw5],W=process.env[Pw5],w=(B)=>typeof B==="string"&&B.length>0;if(w(C)&&w(W))Z.headers[NS0]=W;return d({...G,request:Z})};zS0.recursionDetectionMiddleware=$w5;zS0.addRecursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};var uw5=(I)=>({applyToStack:(d)=>{d.add(zS0.recursionDetectionMiddleware(I),zS0.addRecursionDetectionMiddlewareOptions)}});zS0.getRecursionDetectionPlugin=uw5});var ES0=Y((US0)=>{Object.defineProperty(US0,"__esModule",{value:!0});US0.resolveSigV4AuthConfig=US0.resolveAwsAuthConfig=void 0;var Tw5=W4(),aw1=kI1(),af=M_(),Ow5=300000,mw5=(I)=>{let d=I.credentials?RS0(I.credentials):I.credentialDefaultProvider(I),{signingEscapePath:G=!0,systemClockOffset:Z=I.systemClockOffset||0,sha256:C}=I,W;if(I.signer)W=af.normalizeProvider(I.signer);else if(I.regionInfoProvider)W=()=>af.normalizeProvider(I.region)().then(async(w)=>[await I.regionInfoProvider(w,{useFipsEndpoint:await I.useFipsEndpoint(),useDualstackEndpoint:await I.useDualstackEndpoint()})||{},w]).then(([w,B])=>{let{signingRegion:A,signingService:V}=w;I.signingRegion=I.signingRegion||A||B,I.signingName=I.signingName||V||I.serviceId;let X={...I,credentials:d,region:I.signingRegion,service:I.signingName,sha256:C,uriEscapePath:G};return new(I.signerConstructor||aw1.SignatureV4)(X)});else W=async(w)=>{w=Object.assign({},{name:"sigv4",signingName:I.signingName||I.defaultSigningName,signingRegion:await af.normalizeProvider(I.region)(),properties:{}},w);let{signingRegion:B,signingName:A}=w;I.signingRegion=I.signingRegion||B,I.signingName=I.signingName||A||I.serviceId;let V={...I,credentials:d,region:I.signingRegion,service:I.signingName,sha256:C,uriEscapePath:G};return new(I.signerConstructor||aw1.SignatureV4)(V)};return{...I,systemClockOffset:Z,signingEscapePath:G,credentials:d,signer:W}};US0.resolveAwsAuthConfig=mw5;var lw5=(I)=>{let d=I.credentials?RS0(I.credentials):I.credentialDefaultProvider(I),{signingEscapePath:G=!0,systemClockOffset:Z=I.systemClockOffset||0,sha256:C}=I,W;if(I.signer)W=af.normalizeProvider(I.signer);else W=af.normalizeProvider(new aw1.SignatureV4({credentials:d,region:I.region,service:I.signingName,sha256:C,uriEscapePath:G}));return{...I,systemClockOffset:Z,signingEscapePath:G,credentials:d,signer:W}};US0.resolveSigV4AuthConfig=lw5;var RS0=(I)=>{if(typeof I==="function")return Tw5.memoize(I,(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()d.expiration!==void 0);return af.normalizeProvider(I)}});var sw1=Y((MS0)=>{Object.defineProperty(MS0,"__esModule",{value:!0});MS0.getSkewCorrectedDate=void 0;var hw5=(I)=>new Date(Date.now()+I);MS0.getSkewCorrectedDate=hw5});var PS0=Y((LS0)=>{Object.defineProperty(LS0,"__esModule",{value:!0});LS0.isClockSkewed=void 0;var jw5=sw1(),kw5=(I,d)=>Math.abs(jw5.getSkewCorrectedDate(d).getTime()-I)>=300000;LS0.isClockSkewed=kw5});var TS0=Y(($S0)=>{Object.defineProperty($S0,"__esModule",{value:!0});$S0.getUpdatedSystemClockOffset=void 0;var xw5=PS0(),cw5=(I,d)=>{let G=Date.parse(I);if(xw5.isClockSkewed(G,d))return G-Date.now();return d};$S0.getUpdatedSystemClockOffset=cw5});var cS0=Y((bS0)=>{Object.defineProperty(bS0,"__esModule",{value:!0});bS0.getSigV4AuthPlugin=bS0.getAwsAuthPlugin=bS0.awsAuthMiddlewareOptions=bS0.awsAuthMiddleware=void 0;var lS0=J8(),pw5=sw1(),OS0=TS0(),iw5=(I)=>(d,G)=>async function(Z){var C,W,w,B;if(!lS0.HttpRequest.isInstance(Z.request))return d(Z);let A=(w=(W=(C=G.endpointV2)===null||C===void 0?void 0:C.properties)===null||W===void 0?void 0:W.authSchemes)===null||w===void 0?void 0:w[0],V=(A===null||A===void 0?void 0:A.name)==="sigv4a"?(B=A===null||A===void 0?void 0:A.signingRegionSet)===null||B===void 0?void 0:B.join(","):void 0,X=await I.signer(A),_=await d({...Z,request:await X.sign(Z.request,{signingDate:pw5.getSkewCorrectedDate(I.systemClockOffset),signingRegion:V||G.signing_region,signingService:G.signing_service})}).catch((g)=>{var J;let K=(J=g.ServerTime)!==null&&J!==void 0?J:mS0(g.$response);if(K)I.systemClockOffset=OS0.getUpdatedSystemClockOffset(K,I.systemClockOffset);throw g}),F=mS0(_.response);if(F)I.systemClockOffset=OS0.getUpdatedSystemClockOffset(F,I.systemClockOffset);return _};bS0.awsAuthMiddleware=iw5;var mS0=(I)=>{var d,G,Z;return lS0.HttpResponse.isInstance(I)?(G=(d=I.headers)===null||d===void 0?void 0:d.date)!==null&&G!==void 0?G:(Z=I.headers)===null||Z===void 0?void 0:Z.Date:void 0};bS0.awsAuthMiddlewareOptions={name:"awsAuthMiddleware",tags:["SIGNATURE","AWSAUTH"],relation:"after",toMiddleware:"retryMiddleware",override:!0};var nw5=(I)=>({applyToStack:(d)=>{d.addRelativeTo(bS0.awsAuthMiddleware(I),bS0.awsAuthMiddlewareOptions)}});bS0.getAwsAuthPlugin=nw5;bS0.getSigV4AuthPlugin=bS0.getAwsAuthPlugin});var GD=Y((bp)=>{Object.defineProperty(bp,"__esModule",{value:!0});var pS0=x1();pS0.__exportStar(ES0(),bp);pS0.__exportStar(cS0(),bp)});var rS0=Y((iS0)=>{Object.defineProperty(iS0,"__esModule",{value:!0});iS0.resolveStsAuthConfig=void 0;var rw5=GD(),aw5=(I,{stsClientCtor:d})=>rw5.resolveAwsAuthConfig({...I,stsClientCtor:d});iS0.resolveStsAuthConfig=aw5});var oS0=Y((aS0)=>{Object.defineProperty(aS0,"__esModule",{value:!0});aS0.resolveUserAgentConfig=void 0;function sw5(I){return{...I,customUserAgent:typeof I.customUserAgent==="string"?[[I.customUserAgent]]:I.customUserAgent}}aS0.resolveUserAgentConfig=sw5});var eS0=Y((t33,ow5)=>{ow5.exports={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"aws-global":{description:"AWS Standard global region"},"ca-central-1":{description:"Canada (Central)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"AWS China global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"AWS GovCloud (US) global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"c2s.ic.gov",name:"aws-iso",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"AWS ISO (US) global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"sc2s.sgov.gov",name:"aws-iso-b",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"AWS ISOB (US) global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"cloud.adc-e.uk",name:"aws-iso-e",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{}}],version:"1.1"}});var ow1=Y((GL0)=>{Object.defineProperty(GL0,"__esModule",{value:!0});GL0.getUserAgentPrefix=GL0.useDefaultPartitionInfo=GL0.setPartitionInfo=GL0.partition=void 0;var ew5=x1(),tS0=ew5.__importDefault(eS0()),IL0=tS0.default,dL0="",tw5=(I)=>{let{partitions:d}=IL0;for(let Z of d){let{regions:C,outputs:W}=Z;for(let[w,B]of Object.entries(C))if(w===I)return{...W,...B}}for(let Z of d){let{regionRegex:C,outputs:W}=Z;if(new RegExp(C).test(I))return{...W}}let G=d.find((Z)=>Z.id==="aws");if(!G)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...G.outputs}};GL0.partition=tw5;var IB5=(I,d="")=>{IL0=I,dL0=d};GL0.setPartitionInfo=IB5;var dB5=()=>{GL0.setPartitionInfo(tS0.default,"")};GL0.useDefaultPartitionInfo=dB5;var GB5=()=>dL0;GL0.getUserAgentPrefix=GB5});var BL0=Y((WL0)=>{Object.defineProperty(WL0,"__esModule",{value:!0});WL0.debugId=void 0;WL0.debugId="endpoints"});var XL0=Y((AL0)=>{Object.defineProperty(AL0,"__esModule",{value:!0});AL0.toDebugString=void 0;function ew1(I){if(typeof I!=="object"||I==null)return I;if("ref"in I)return`$${ew1(I.ref)}`;if("fn"in I)return`${I.fn}(${(I.argv||[]).map(ew1).join(", ")})`;return JSON.stringify(I,null,2)}AL0.toDebugString=ew1});var Jy=Y((hp)=>{Object.defineProperty(hp,"__esModule",{value:!0});var YL0=x1();YL0.__exportStar(BL0(),hp);YL0.__exportStar(XL0(),hp)});var FL0=Y((DL0)=>{Object.defineProperty(DL0,"__esModule",{value:!0});DL0.EndpointError=void 0;class _L0 extends Error{constructor(I){super(I);this.name="EndpointError"}}DL0.EndpointError=_L0});var JL0=Y((gL0)=>{Object.defineProperty(gL0,"__esModule",{value:!0})});var NL0=Y((KL0)=>{Object.defineProperty(KL0,"__esModule",{value:!0})});var QL0=Y((zL0)=>{Object.defineProperty(zL0,"__esModule",{value:!0})});var qL0=Y((fL0)=>{Object.defineProperty(fL0,"__esModule",{value:!0})});var UL0=Y((RL0)=>{Object.defineProperty(RL0,"__esModule",{value:!0})});var vZ=Y((ZD)=>{Object.defineProperty(ZD,"__esModule",{value:!0});var sf=x1();sf.__exportStar(FL0(),ZD);sf.__exportStar(JL0(),ZD);sf.__exportStar(NL0(),ZD);sf.__exportStar(QL0(),ZD);sf.__exportStar(qL0(),ZD);sf.__exportStar(UL0(),ZD)});var tw1=Y((vL0)=>{Object.defineProperty(vL0,"__esModule",{value:!0});vL0.isIpAddress=void 0;var WB5=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$"),wB5=(I)=>WB5.test(I)||I.startsWith("[")&&I.endsWith("]");vL0.isIpAddress=wB5});var dB1=Y((ML0)=>{Object.defineProperty(ML0,"__esModule",{value:!0});ML0.isValidHostLabel=void 0;var BB5=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$"),AB5=(I,d=!1)=>{if(!d)return BB5.test(I);let G=I.split(".");for(let Z of G)if(!ML0.isValidHostLabel(Z))return!1;return!0};ML0.isValidHostLabel=AB5});var LL0=Y((SL0)=>{Object.defineProperty(SL0,"__esModule",{value:!0});SL0.isVirtualHostableS3Bucket=void 0;var VB5=tw1(),XB5=dB1(),YB5=(I,d=!1)=>{if(d){for(let G of I.split("."))if(!SL0.isVirtualHostableS3Bucket(G))return!1;return!0}if(!XB5.isValidHostLabel(I))return!1;if(I.length<3||I.length>63)return!1;if(I!==I.toLowerCase())return!1;if(VB5.isIpAddress(I))return!1;return!0};SL0.isVirtualHostableS3Bucket=YB5});var $L0=Y((yL0)=>{Object.defineProperty(yL0,"__esModule",{value:!0});yL0.parseArn=void 0;var _B5=(I)=>{let d=I.split(":");if(d.length<6)return null;let[G,Z,C,W,w,...B]=d;if(G!=="arn"||Z===""||C===""||B[0]==="")return null;return{partition:Z,service:C,region:W,accountId:w,resourceId:B[0].includes("/")?B[0].split("/"):B}};yL0.parseArn=_B5});var uL0=Y((Ky)=>{Object.defineProperty(Ky,"__esModule",{value:!0});var ZB1=x1();ZB1.__exportStar(LL0(),Ky);ZB1.__exportStar($L0(),Ky);ZB1.__exportStar(ow1(),Ky)});var mL0=Y((TL0)=>{Object.defineProperty(TL0,"__esModule",{value:!0});TL0.booleanEquals=void 0;var DB5=(I,d)=>I===d;TL0.booleanEquals=DB5});var jL0=Y((bL0)=>{Object.defineProperty(bL0,"__esModule",{value:!0});bL0.getAttrPathList=void 0;var lL0=vZ(),HB5=(I)=>{let d=I.split("."),G=[];for(let Z of d){let C=Z.indexOf("[");if(C!==-1){if(Z.indexOf("]")!==Z.length-1)throw new lL0.EndpointError(`Path: '${I}' does not end with ']'`);let W=Z.slice(C+1,-1);if(Number.isNaN(parseInt(W)))throw new lL0.EndpointError(`Invalid array index: '${W}' in path: '${I}'`);if(C!==0)G.push(Z.slice(0,C));G.push(W)}else G.push(Z)}return G};bL0.getAttrPathList=HB5});var cL0=Y((kL0)=>{Object.defineProperty(kL0,"__esModule",{value:!0});kL0.getAttr=void 0;var FB5=vZ(),gB5=jL0(),JB5=(I,d)=>gB5.getAttrPathList(d).reduce((G,Z)=>{if(typeof G!=="object")throw new FB5.EndpointError(`Index '${Z}' in '${d}' not found in '${JSON.stringify(I)}'`);else if(Array.isArray(G))return G[parseInt(Z)];return G[Z]},I);kL0.getAttr=JB5});var nL0=Y((pL0)=>{Object.defineProperty(pL0,"__esModule",{value:!0});pL0.isSet=void 0;var KB5=(I)=>I!=null;pL0.isSet=KB5});var sL0=Y((rL0)=>{Object.defineProperty(rL0,"__esModule",{value:!0});rL0.not=void 0;var NB5=(I)=>!I;rL0.not=NB5});var eL0=Y((oL0)=>{Object.defineProperty(oL0,"__esModule",{value:!0})});var Iy0=Y((tL0)=>{Object.defineProperty(tL0,"__esModule",{value:!0});tL0.HttpAuthLocation=void 0;var zB5;(function(I){I.HEADER="header",I.QUERY="query"})(zB5=tL0.HttpAuthLocation||(tL0.HttpAuthLocation={}))});var Gy0=Y((dy0)=>{Object.defineProperty(dy0,"__esModule",{value:!0})});var Cy0=Y((Zy0)=>{Object.defineProperty(Zy0,"__esModule",{value:!0})});var wy0=Y((Wy0)=>{Object.defineProperty(Wy0,"__esModule",{value:!0})});var Ay0=Y((By0)=>{Object.defineProperty(By0,"__esModule",{value:!0})});var Xy0=Y((Vy0)=>{Object.defineProperty(Vy0,"__esModule",{value:!0})});var _y0=Y((Yy0)=>{Object.defineProperty(Yy0,"__esModule",{value:!0})});var Dy0=Y((Ny)=>{Object.defineProperty(Ny,"__esModule",{value:!0});var WB1=x1();WB1.__exportStar(Ay0(),Ny);WB1.__exportStar(Xy0(),Ny);WB1.__exportStar(_y0(),Ny)});var Fy0=Y((Hy0)=>{Object.defineProperty(Hy0,"__esModule",{value:!0})});var Jy0=Y((gy0)=>{Object.defineProperty(gy0,"__esModule",{value:!0})});var Ny0=Y((Ky0)=>{Object.defineProperty(Ky0,"__esModule",{value:!0});Ky0.HostAddressType=void 0;var QB5;(function(I){I.AAAA="AAAA",I.A="A"})(QB5=Ky0.HostAddressType||(Ky0.HostAddressType={}))});var Qy0=Y((zy0)=>{Object.defineProperty(zy0,"__esModule",{value:!0});zy0.EndpointURLScheme=void 0;var fB5;(function(I){I.HTTP="http",I.HTTPS="https"})(fB5=zy0.EndpointURLScheme||(zy0.EndpointURLScheme={}))});var qy0=Y((fy0)=>{Object.defineProperty(fy0,"__esModule",{value:!0})});var Uy0=Y((Ry0)=>{Object.defineProperty(Ry0,"__esModule",{value:!0})});var Ey0=Y((vy0)=>{Object.defineProperty(vy0,"__esModule",{value:!0})});var Sy0=Y((My0)=>{Object.defineProperty(My0,"__esModule",{value:!0})});var yy0=Y((Ly0)=>{Object.defineProperty(Ly0,"__esModule",{value:!0})});var $y0=Y((Py0)=>{Object.defineProperty(Py0,"__esModule",{value:!0})});var Ty0=Y((uy0)=>{Object.defineProperty(uy0,"__esModule",{value:!0})});var Oy0=Y((XJ)=>{Object.defineProperty(XJ,"__esModule",{value:!0});var zy=x1();zy.__exportStar(Ey0(),XJ);zy.__exportStar(Sy0(),XJ);zy.__exportStar(yy0(),XJ);zy.__exportStar($y0(),XJ);zy.__exportStar(Ty0(),XJ)});var ly0=Y((my0)=>{Object.defineProperty(my0,"__esModule",{value:!0})});var hy0=Y((by0)=>{Object.defineProperty(by0,"__esModule",{value:!0})});var ky0=Y((jy0)=>{Object.defineProperty(jy0,"__esModule",{value:!0})});var cy0=Y((xy0)=>{Object.defineProperty(xy0,"__esModule",{value:!0})});var iy0=Y((py0)=>{Object.defineProperty(py0,"__esModule",{value:!0})});var ry0=Y((ny0)=>{Object.defineProperty(ny0,"__esModule",{value:!0})});var sy0=Y((ay0)=>{Object.defineProperty(ay0,"__esModule",{value:!0})});var ey0=Y((oy0)=>{Object.defineProperty(oy0,"__esModule",{value:!0})});var IP0=Y((ty0)=>{Object.defineProperty(ty0,"__esModule",{value:!0})});var GP0=Y((dP0)=>{Object.defineProperty(dP0,"__esModule",{value:!0})});var CP0=Y((ZP0)=>{Object.defineProperty(ZP0,"__esModule",{value:!0})});var wP0=Y((WP0)=>{Object.defineProperty(WP0,"__esModule",{value:!0})});var AP0=Y((BP0)=>{Object.defineProperty(BP0,"__esModule",{value:!0});BP0.RequestHandlerProtocol=void 0;var qB5;(function(I){I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0"})(qB5=BP0.RequestHandlerProtocol||(BP0.RequestHandlerProtocol={}))});var XP0=Y((VP0)=>{Object.defineProperty(VP0,"__esModule",{value:!0})});var _P0=Y((YP0)=>{Object.defineProperty(YP0,"__esModule",{value:!0})});var DP0=Y((n5)=>{Object.defineProperty(n5,"__esModule",{value:!0});var Y9=x1();Y9.__exportStar(eL0(),n5);Y9.__exportStar(Iy0(),n5);Y9.__exportStar(Gy0(),n5);Y9.__exportStar(Cy0(),n5);Y9.__exportStar(wy0(),n5);Y9.__exportStar(Dy0(),n5);Y9.__exportStar(Fy0(),n5);Y9.__exportStar(Jy0(),n5);Y9.__exportStar(Ny0(),n5);Y9.__exportStar(Qy0(),n5);Y9.__exportStar(qy0(),n5);Y9.__exportStar(Uy0(),n5);Y9.__exportStar(Oy0(),n5);Y9.__exportStar(ly0(),n5);Y9.__exportStar(hy0(),n5);Y9.__exportStar(ky0(),n5);Y9.__exportStar(cy0(),n5);Y9.__exportStar(iy0(),n5);Y9.__exportStar(ry0(),n5);Y9.__exportStar(sy0(),n5);Y9.__exportStar(ey0(),n5);Y9.__exportStar(IP0(),n5);Y9.__exportStar(GP0(),n5);Y9.__exportStar(CP0(),n5);Y9.__exportStar(wP0(),n5);Y9.__exportStar(AP0(),n5);Y9.__exportStar(XP0(),n5);Y9.__exportStar(_P0(),n5)});var gP0=Y((HP0)=>{Object.defineProperty(HP0,"__esModule",{value:!0});HP0.parseURL=void 0;var XB1=DP0(),RB5=tw1(),VB1={[XB1.EndpointURLScheme.HTTP]:80,[XB1.EndpointURLScheme.HTTPS]:443},UB5=(I)=>{let d=(()=>{try{if(I instanceof URL)return I;if(typeof I==="object"&&"hostname"in I){let{hostname:F,port:g,protocol:J="",path:K="",query:Q={}}=I,E=new URL(`${J}//${F}${g?`:${g}`:""}${K}`);return E.search=Object.entries(Q).map(([S,P])=>`${S}=${P}`).join("&"),E}return new URL(I)}catch(F){return null}})();if(!d)return console.error(`Unable to parse ${JSON.stringify(I)} as a whatwg URL.`),null;let G=d.href,{host:Z,hostname:C,pathname:W,protocol:w,search:B}=d;if(B)return null;let A=w.slice(0,-1);if(!Object.values(XB1.EndpointURLScheme).includes(A))return null;let V=RB5.isIpAddress(C),X=G.includes(`${Z}:${VB1[A]}`)||typeof I==="string"&&I.includes(`${Z}:${VB1[A]}`),_=`${Z}${X?`:${VB1[A]}`:""}`;return{scheme:A,authority:_,path:W,normalizedPath:W.endsWith("/")?W:`${W}/`,isIp:V}};HP0.parseURL=UB5});var NP0=Y((JP0)=>{Object.defineProperty(JP0,"__esModule",{value:!0});JP0.stringEquals=void 0;var vB5=(I,d)=>I===d;JP0.stringEquals=vB5});var fP0=Y((zP0)=>{Object.defineProperty(zP0,"__esModule",{value:!0});zP0.substring=void 0;var EB5=(I,d,G,Z)=>{if(d>=G||I.length{Object.defineProperty(qP0,"__esModule",{value:!0});qP0.uriEncode=void 0;var MB5=(I)=>encodeURIComponent(I).replace(/[!*'()]/g,(d)=>`%${d.charCodeAt(0).toString(16).toUpperCase()}`);qP0.uriEncode=MB5});var YB1=Y((pC)=>{Object.defineProperty(pC,"__esModule",{value:!0});pC.aws=void 0;var wB=x1();pC.aws=wB.__importStar(uL0());wB.__exportStar(mL0(),pC);wB.__exportStar(cL0(),pC);wB.__exportStar(nL0(),pC);wB.__exportStar(dB1(),pC);wB.__exportStar(sL0(),pC);wB.__exportStar(gP0(),pC);wB.__exportStar(NP0(),pC);wB.__exportStar(fP0(),pC);wB.__exportStar(UP0(),pC)});var _B1=Y((EP0)=>{Object.defineProperty(EP0,"__esModule",{value:!0});EP0.evaluateTemplate=void 0;var SB5=YB1(),LB5=(I,d)=>{let G=[],Z={...d.endpointParams,...d.referenceRecord},C=0;while(C{Object.defineProperty(SP0,"__esModule",{value:!0});SP0.getReferenceValue=void 0;var yB5=({ref:I},d)=>{return{...d.endpointParams,...d.referenceRecord}[I]};SP0.getReferenceValue=yB5});var Qy=Y((PP0)=>{Object.defineProperty(PP0,"__esModule",{value:!0});PP0.evaluateExpression=void 0;var PB5=vZ(),$B5=DB1(),uB5=_B1(),TB5=yP0(),OB5=(I,d,G)=>{if(typeof I==="string")return uB5.evaluateTemplate(I,G);else if(I.fn)return $B5.callFunction(I,G);else if(I.ref)return TB5.getReferenceValue(I,G);throw new PB5.EndpointError(`'${d}': ${String(I)} is not a string, function or reference.`)};PP0.evaluateExpression=OB5});var DB1=Y((uP0)=>{Object.defineProperty(uP0,"__esModule",{value:!0});uP0.callFunction=void 0;var mB5=x1(),lB5=mB5.__importStar(YB1()),bB5=Qy(),hB5=({fn:I,argv:d},G)=>{let Z=d.map((C)=>["boolean","number"].includes(typeof C)?C:bB5.evaluateExpression(C,"arg",G));return I.split(".").reduce((C,W)=>C[W],lB5)(...Z)};uP0.callFunction=hB5});var lP0=Y((OP0)=>{Object.defineProperty(OP0,"__esModule",{value:!0});OP0.evaluateCondition=void 0;var HB1=Jy(),jB5=vZ(),kB5=DB1(),xB5=({assign:I,...d},G)=>{var Z,C;if(I&&I in G.referenceRecord)throw new jB5.EndpointError(`'${I}' is already defined in Reference Record.`);let W=kB5.callFunction(d,G);return(C=(Z=G.logger)===null||Z===void 0?void 0:Z.debug)===null||C===void 0||C.call(Z,HB1.debugId,`evaluateCondition: ${HB1.toDebugString(d)} = ${HB1.toDebugString(W)}`),{result:W===""?!0:!!W,...I!=null&&{toAssign:{name:I,value:W}}}};OP0.evaluateCondition=xB5});var jp=Y((hP0)=>{Object.defineProperty(hP0,"__esModule",{value:!0});hP0.evaluateConditions=void 0;var bP0=Jy(),cB5=lP0(),pB5=(I=[],d)=>{var G,Z;let C={};for(let W of I){let{result:w,toAssign:B}=cB5.evaluateCondition(W,{...d,referenceRecord:{...d.referenceRecord,...C}});if(!w)return{result:w};if(B)C[B.name]=B.value,(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,bP0.debugId,`assign: ${B.name} := ${bP0.toDebugString(B.value)}`)}return{result:!0,referenceRecord:C}};hP0.evaluateConditions=pB5});var cP0=Y((kP0)=>{Object.defineProperty(kP0,"__esModule",{value:!0});kP0.getEndpointHeaders=void 0;var iB5=vZ(),nB5=Qy(),rB5=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:C.map((W)=>{let w=nB5.evaluateExpression(W,"Header value entry",d);if(typeof w!=="string")throw new iB5.EndpointError(`Header '${Z}' value '${w}' is not a string`);return w})}),{});kP0.getEndpointHeaders=rB5});var nP0=Y((iP0)=>{Object.defineProperty(iP0,"__esModule",{value:!0});iP0.getEndpointProperty=void 0;var pP0=vZ(),aB5=_B1(),sB5=gB1(),oB5=(I,d)=>{if(Array.isArray(I))return I.map((G)=>iP0.getEndpointProperty(G,d));switch(typeof I){case"string":return aB5.evaluateTemplate(I,d);case"object":if(I===null)throw new pP0.EndpointError(`Unexpected endpoint property: ${I}`);return sB5.getEndpointProperties(I,d);case"boolean":return I;default:throw new pP0.EndpointError(`Unexpected endpoint property type: ${typeof I}`)}};iP0.getEndpointProperty=oB5});var gB1=Y((rP0)=>{Object.defineProperty(rP0,"__esModule",{value:!0});rP0.getEndpointProperties=void 0;var eB5=nP0(),tB5=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:eB5.getEndpointProperty(C,d)}),{});rP0.getEndpointProperties=tB5});var eP0=Y((sP0)=>{Object.defineProperty(sP0,"__esModule",{value:!0});sP0.getEndpointUrl=void 0;var IA5=vZ(),dA5=Qy(),GA5=(I,d)=>{let G=dA5.evaluateExpression(I,"Endpoint URL",d);if(typeof G==="string")try{return new URL(G)}catch(Z){throw console.error(`Failed to construct URL with ${G}`,Z),Z}throw new IA5.EndpointError(`Endpoint URL must be a string, got ${typeof G}`)};sP0.getEndpointUrl=GA5});var G$0=Y((I$0)=>{Object.defineProperty(I$0,"__esModule",{value:!0});I$0.evaluateEndpointRule=void 0;var tP0=Jy(),ZA5=jp(),CA5=cP0(),WA5=gB1(),wA5=eP0(),BA5=(I,d)=>{var G,Z;let{conditions:C,endpoint:W}=I,{result:w,referenceRecord:B}=ZA5.evaluateConditions(C,d);if(!w)return;let A={...d,referenceRecord:{...d.referenceRecord,...B}},{url:V,properties:X,headers:_}=W;return(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,tP0.debugId,`Resolving endpoint from template: ${tP0.toDebugString(W)}`),{..._!=null&&{headers:CA5.getEndpointHeaders(_,A)},...X!=null&&{properties:WA5.getEndpointProperties(X,A)},url:wA5.getEndpointUrl(V,A)}};I$0.evaluateEndpointRule=BA5});var W$0=Y((Z$0)=>{Object.defineProperty(Z$0,"__esModule",{value:!0});Z$0.evaluateErrorRule=void 0;var AA5=vZ(),VA5=jp(),XA5=Qy(),YA5=(I,d)=>{let{conditions:G,error:Z}=I,{result:C,referenceRecord:W}=VA5.evaluateConditions(G,d);if(!C)return;throw new AA5.EndpointError(XA5.evaluateExpression(Z,"Error",{...d,referenceRecord:{...d.referenceRecord,...W}}))};Z$0.evaluateErrorRule=YA5});var A$0=Y((w$0)=>{Object.defineProperty(w$0,"__esModule",{value:!0});w$0.evaluateTreeRule=void 0;var _A5=jp(),DA5=JB1(),HA5=(I,d)=>{let{conditions:G,rules:Z}=I,{result:C,referenceRecord:W}=_A5.evaluateConditions(G,d);if(!C)return;return DA5.evaluateRules(Z,{...d,referenceRecord:{...d.referenceRecord,...W}})};w$0.evaluateTreeRule=HA5});var JB1=Y((X$0)=>{Object.defineProperty(X$0,"__esModule",{value:!0});X$0.evaluateRules=void 0;var V$0=vZ(),FA5=G$0(),gA5=W$0(),JA5=A$0(),KA5=(I,d)=>{for(let G of I)if(G.type==="endpoint"){let Z=FA5.evaluateEndpointRule(G,d);if(Z)return Z}else if(G.type==="error")gA5.evaluateErrorRule(G,d);else if(G.type==="tree"){let Z=JA5.evaluateTreeRule(G,d);if(Z)return Z}else throw new V$0.EndpointError(`Unknown endpoint rule: ${G}`);throw new V$0.EndpointError("Rules evaluation failed")};X$0.evaluateRules=KA5});var _$0=Y((KB1)=>{Object.defineProperty(KB1,"__esModule",{value:!0});var NA5=x1();NA5.__exportStar(JB1(),KB1)});var F$0=Y((D$0)=>{Object.defineProperty(D$0,"__esModule",{value:!0});D$0.resolveEndpoint=void 0;var kp=Jy(),zA5=vZ(),QA5=_$0(),fA5=(I,d)=>{var G,Z,C,W,w,B;let{endpointParams:A,logger:V}=d,{parameters:X,rules:_}=I;(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,`${kp.debugId} Initial EndpointParams: ${kp.toDebugString(A)}`);let F=Object.entries(X).filter(([,K])=>K.default!=null).map(([K,Q])=>[K,Q.default]);if(F.length>0)for(let[K,Q]of F)A[K]=(C=A[K])!==null&&C!==void 0?C:Q;let g=Object.entries(X).filter(([,K])=>K.required).map(([K])=>K);for(let K of g)if(A[K]==null)throw new zA5.EndpointError(`Missing required parameter: '${K}'`);let J=QA5.evaluateRules(_,{endpointParams:A,logger:V,referenceRecord:{}});if((W=d.endpointParams)===null||W===void 0?void 0:W.Endpoint)try{let K=new URL(d.endpointParams.Endpoint),{protocol:Q,port:E}=K;J.url.protocol=Q,J.url.port=E}catch(K){}return(B=(w=d.logger)===null||w===void 0?void 0:w.debug)===null||B===void 0||B.call(w,`${kp.debugId} Resolved endpoint: ${kp.toDebugString(J)}`),J};D$0.resolveEndpoint=fA5});var xp=Y((fy)=>{Object.defineProperty(fy,"__esModule",{value:!0});var NB1=x1();NB1.__exportStar(ow1(),fy);NB1.__exportStar(F$0(),fy);NB1.__exportStar(vZ(),fy)});var K$0=Y((g$0)=>{Object.defineProperty(g$0,"__esModule",{value:!0});g$0.UA_ESCAPE_REGEX=g$0.SPACE=g$0.X_AMZ_USER_AGENT=g$0.USER_AGENT=void 0;g$0.USER_AGENT="user-agent";g$0.X_AMZ_USER_AGENT="x-amz-user-agent";g$0.SPACE=" ";g$0.UA_ESCAPE_REGEX=/[^\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g});var q$0=Y((N$0)=>{Object.defineProperty(N$0,"__esModule",{value:!0});N$0.getUserAgentPlugin=N$0.getUserAgentMiddlewareOptions=N$0.userAgentMiddleware=void 0;var vA5=J8(),EA5=xp(),CD=K$0(),MA5=(I)=>(d,G)=>async(Z)=>{var C,W;let{request:w}=Z;if(!vA5.HttpRequest.isInstance(w))return d(Z);let{headers:B}=w,A=((C=G===null||G===void 0?void 0:G.userAgent)===null||C===void 0?void 0:C.map(zB1))||[],V=(await I.defaultUserAgentProvider()).map(zB1),X=((W=I===null||I===void 0?void 0:I.customUserAgent)===null||W===void 0?void 0:W.map(zB1))||[],_=EA5.getUserAgentPrefix(),F=(_?[_]:[]).concat([...V,...A,...X]).join(CD.SPACE),g=[...V.filter((J)=>J.startsWith("aws-sdk-")),...X].join(CD.SPACE);if(I.runtime!=="browser"){if(g)B[CD.X_AMZ_USER_AGENT]=B[CD.X_AMZ_USER_AGENT]?`${B[CD.USER_AGENT]} ${g}`:g;B[CD.USER_AGENT]=F}else B[CD.X_AMZ_USER_AGENT]=F;return d({...Z,request:w})};N$0.userAgentMiddleware=MA5;var zB1=([I,d])=>{let G=I.indexOf("/"),Z=I.substring(0,G),C=I.substring(G+1);if(Z==="api")C=C.toLowerCase();return[Z,C,d].filter((W)=>W&&W.length>0).map((W)=>W===null||W===void 0?void 0:W.replace(CD.UA_ESCAPE_REGEX,"_")).join("/")};N$0.getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};var SA5=(I)=>({applyToStack:(d)=>{d.add(N$0.userAgentMiddleware(I),N$0.getUserAgentMiddlewareOptions)}});N$0.getUserAgentPlugin=SA5});var QB1=Y((cp)=>{Object.defineProperty(cp,"__esModule",{value:!0});var R$0=x1();R$0.__exportStar(oS0(),cp);R$0.__exportStar(q$0(),cp)});var E$0=Y((U$0)=>{Object.defineProperty(U$0,"__esModule",{value:!0});U$0.resolveClientEndpointParameters=void 0;var LA5=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,useGlobalEndpoint:I.useGlobalEndpoint??!1,defaultSigningName:"sts"}};U$0.resolveClientEndpointParameters=LA5});var M$0=Y((L83,yA5)=>{yA5.exports={name:"@aws-sdk/client-sts",description:"AWS SDK for JavaScript Sts Client for Node.js, Browser and React Native",version:"3.341.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sts",test:"yarn test:unit","test:unit":"jest"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/config-resolver":"3.341.0","@aws-sdk/credential-provider-node":"3.341.0","@aws-sdk/fetch-http-handler":"3.341.0","@aws-sdk/hash-node":"3.341.0","@aws-sdk/invalid-dependency":"3.341.0","@aws-sdk/middleware-content-length":"3.341.0","@aws-sdk/middleware-endpoint":"3.341.0","@aws-sdk/middleware-host-header":"3.341.0","@aws-sdk/middleware-logger":"3.341.0","@aws-sdk/middleware-recursion-detection":"3.341.0","@aws-sdk/middleware-retry":"3.341.0","@aws-sdk/middleware-sdk-sts":"3.341.0","@aws-sdk/middleware-serde":"3.341.0","@aws-sdk/middleware-signing":"3.341.0","@aws-sdk/middleware-stack":"3.341.0","@aws-sdk/middleware-user-agent":"3.341.0","@aws-sdk/node-config-provider":"3.341.0","@aws-sdk/node-http-handler":"3.341.0","@aws-sdk/smithy-client":"3.341.0","@aws-sdk/types":"3.341.0","@aws-sdk/url-parser":"3.341.0","@aws-sdk/util-base64":"3.310.0","@aws-sdk/util-body-length-browser":"3.310.0","@aws-sdk/util-body-length-node":"3.310.0","@aws-sdk/util-defaults-mode-browser":"3.341.0","@aws-sdk/util-defaults-mode-node":"3.341.0","@aws-sdk/util-endpoints":"3.341.0","@aws-sdk/util-retry":"3.341.0","@aws-sdk/util-user-agent-browser":"3.341.0","@aws-sdk/util-user-agent-node":"3.341.0","@aws-sdk/util-utf8":"3.310.0","@smithy/protocol-http":"^1.0.1","@smithy/types":"^1.0.0","fast-xml-parser":"4.1.2",tslib:"^2.5.0"},devDependencies:{"@aws-sdk/service-client-documentation-generator":"3.310.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sts",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sts"}}});var pp=Y((qB1)=>{Object.defineProperty(qB1,"__esModule",{value:!0});qB1.STSServiceException=qB1.__ServiceException=void 0;var S$0=v0();Object.defineProperty(qB1,"__ServiceException",{enumerable:!0,get:function(){return S$0.ServiceException}});class fB1 extends S$0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,fB1.prototype)}}qB1.STSServiceException=fB1});var wD=Y((y$0)=>{Object.defineProperty(y$0,"__esModule",{value:!0});y$0.GetSessionTokenResponseFilterSensitiveLog=y$0.GetFederationTokenResponseFilterSensitiveLog=y$0.AssumeRoleWithWebIdentityResponseFilterSensitiveLog=y$0.AssumeRoleWithWebIdentityRequestFilterSensitiveLog=y$0.AssumeRoleWithSAMLResponseFilterSensitiveLog=y$0.AssumeRoleWithSAMLRequestFilterSensitiveLog=y$0.AssumeRoleResponseFilterSensitiveLog=y$0.CredentialsFilterSensitiveLog=y$0.InvalidAuthorizationMessageException=y$0.IDPCommunicationErrorException=y$0.InvalidIdentityTokenException=y$0.IDPRejectedClaimException=y$0.RegionDisabledException=y$0.PackedPolicyTooLargeException=y$0.MalformedPolicyDocumentException=y$0.ExpiredTokenException=void 0;var RB1=v0(),WD=pp();class UB1 extends WD.STSServiceException{constructor(I){super({name:"ExpiredTokenException",$fault:"client",...I});this.name="ExpiredTokenException",this.$fault="client",Object.setPrototypeOf(this,UB1.prototype)}}y$0.ExpiredTokenException=UB1;class vB1 extends WD.STSServiceException{constructor(I){super({name:"MalformedPolicyDocumentException",$fault:"client",...I});this.name="MalformedPolicyDocumentException",this.$fault="client",Object.setPrototypeOf(this,vB1.prototype)}}y$0.MalformedPolicyDocumentException=vB1;class EB1 extends WD.STSServiceException{constructor(I){super({name:"PackedPolicyTooLargeException",$fault:"client",...I});this.name="PackedPolicyTooLargeException",this.$fault="client",Object.setPrototypeOf(this,EB1.prototype)}}y$0.PackedPolicyTooLargeException=EB1;class MB1 extends WD.STSServiceException{constructor(I){super({name:"RegionDisabledException",$fault:"client",...I});this.name="RegionDisabledException",this.$fault="client",Object.setPrototypeOf(this,MB1.prototype)}}y$0.RegionDisabledException=MB1;class SB1 extends WD.STSServiceException{constructor(I){super({name:"IDPRejectedClaimException",$fault:"client",...I});this.name="IDPRejectedClaimException",this.$fault="client",Object.setPrototypeOf(this,SB1.prototype)}}y$0.IDPRejectedClaimException=SB1;class LB1 extends WD.STSServiceException{constructor(I){super({name:"InvalidIdentityTokenException",$fault:"client",...I});this.name="InvalidIdentityTokenException",this.$fault="client",Object.setPrototypeOf(this,LB1.prototype)}}y$0.InvalidIdentityTokenException=LB1;class yB1 extends WD.STSServiceException{constructor(I){super({name:"IDPCommunicationErrorException",$fault:"client",...I});this.name="IDPCommunicationErrorException",this.$fault="client",Object.setPrototypeOf(this,yB1.prototype)}}y$0.IDPCommunicationErrorException=yB1;class PB1 extends WD.STSServiceException{constructor(I){super({name:"InvalidAuthorizationMessageException",$fault:"client",...I});this.name="InvalidAuthorizationMessageException",this.$fault="client",Object.setPrototypeOf(this,PB1.prototype)}}y$0.InvalidAuthorizationMessageException=PB1;var PA5=(I)=>({...I,...I.SecretAccessKey&&{SecretAccessKey:RB1.SENSITIVE_STRING}});y$0.CredentialsFilterSensitiveLog=PA5;var $A5=(I)=>({...I,...I.Credentials&&{Credentials:y$0.CredentialsFilterSensitiveLog(I.Credentials)}});y$0.AssumeRoleResponseFilterSensitiveLog=$A5;var uA5=(I)=>({...I,...I.SAMLAssertion&&{SAMLAssertion:RB1.SENSITIVE_STRING}});y$0.AssumeRoleWithSAMLRequestFilterSensitiveLog=uA5;var TA5=(I)=>({...I,...I.Credentials&&{Credentials:y$0.CredentialsFilterSensitiveLog(I.Credentials)}});y$0.AssumeRoleWithSAMLResponseFilterSensitiveLog=TA5;var OA5=(I)=>({...I,...I.WebIdentityToken&&{WebIdentityToken:RB1.SENSITIVE_STRING}});y$0.AssumeRoleWithWebIdentityRequestFilterSensitiveLog=OA5;var mA5=(I)=>({...I,...I.Credentials&&{Credentials:y$0.CredentialsFilterSensitiveLog(I.Credentials)}});y$0.AssumeRoleWithWebIdentityResponseFilterSensitiveLog=mA5;var lA5=(I)=>({...I,...I.Credentials&&{Credentials:y$0.CredentialsFilterSensitiveLog(I.Credentials)}});y$0.GetFederationTokenResponseFilterSensitiveLog=lA5;var bA5=(I)=>({...I,...I.Credentials&&{Credentials:y$0.CredentialsFilterSensitiveLog(I.Credentials)}});y$0.GetSessionTokenResponseFilterSensitiveLog=bA5});var u$0=Y(($$0)=>{Object.defineProperty($$0,"__esModule",{value:!0})});var O$0=Y((T$0)=>{Object.defineProperty(T$0,"__esModule",{value:!0});T$0.HttpAuthLocation=void 0;var IV5;(function(I){I.HEADER="header",I.QUERY="query"})(IV5=T$0.HttpAuthLocation||(T$0.HttpAuthLocation={}))});var l$0=Y((m$0)=>{Object.defineProperty(m$0,"__esModule",{value:!0})});var h$0=Y((b$0)=>{Object.defineProperty(b$0,"__esModule",{value:!0})});var k$0=Y((j$0)=>{Object.defineProperty(j$0,"__esModule",{value:!0})});var c$0=Y((x$0)=>{Object.defineProperty(x$0,"__esModule",{value:!0})});var i$0=Y((p$0)=>{Object.defineProperty(p$0,"__esModule",{value:!0})});var r$0=Y((n$0)=>{Object.defineProperty(n$0,"__esModule",{value:!0})});var s$0=Y((a$0)=>{Object.defineProperty(a$0,"__esModule",{value:!0})});var o$0=Y((qy)=>{Object.defineProperty(qy,"__esModule",{value:!0});var uB1=x1();uB1.__exportStar(i$0(),qy);uB1.__exportStar(r$0(),qy);uB1.__exportStar(s$0(),qy)});var t$0=Y((e$0)=>{Object.defineProperty(e$0,"__esModule",{value:!0})});var du0=Y((Iu0)=>{Object.defineProperty(Iu0,"__esModule",{value:!0})});var Zu0=Y((Gu0)=>{Object.defineProperty(Gu0,"__esModule",{value:!0});Gu0.EndpointURLScheme=void 0;var dV5;(function(I){I.HTTP="http",I.HTTPS="https"})(dV5=Gu0.EndpointURLScheme||(Gu0.EndpointURLScheme={}))});var Wu0=Y((Cu0)=>{Object.defineProperty(Cu0,"__esModule",{value:!0})});var Bu0=Y((wu0)=>{Object.defineProperty(wu0,"__esModule",{value:!0})});var Vu0=Y((Au0)=>{Object.defineProperty(Au0,"__esModule",{value:!0})});var Yu0=Y((Xu0)=>{Object.defineProperty(Xu0,"__esModule",{value:!0})});var Du0=Y((_u0)=>{Object.defineProperty(_u0,"__esModule",{value:!0})});var Hu0=Y((YJ)=>{Object.defineProperty(YJ,"__esModule",{value:!0});var Ry=x1();Ry.__exportStar(Wu0(),YJ);Ry.__exportStar(Bu0(),YJ);Ry.__exportStar(Vu0(),YJ);Ry.__exportStar(Yu0(),YJ);Ry.__exportStar(Du0(),YJ)});var gu0=Y((Fu0)=>{Object.defineProperty(Fu0,"__esModule",{value:!0})});var Ku0=Y((Ju0)=>{Object.defineProperty(Ju0,"__esModule",{value:!0});Ju0.FieldPosition=void 0;var GV5;(function(I){I[I.HEADER=0]="HEADER",I[I.TRAILER=1]="TRAILER"})(GV5=Ju0.FieldPosition||(Ju0.FieldPosition={}))});var zu0=Y((Nu0)=>{Object.defineProperty(Nu0,"__esModule",{value:!0})});var fu0=Y((Qu0)=>{Object.defineProperty(Qu0,"__esModule",{value:!0})});var Ru0=Y((ip)=>{Object.defineProperty(ip,"__esModule",{value:!0});var qu0=x1();qu0.__exportStar(zu0(),ip);qu0.__exportStar(fu0(),ip)});var vu0=Y((Uu0)=>{Object.defineProperty(Uu0,"__esModule",{value:!0})});var Mu0=Y((Eu0)=>{Object.defineProperty(Eu0,"__esModule",{value:!0})});var Lu0=Y((Su0)=>{Object.defineProperty(Su0,"__esModule",{value:!0})});var Pu0=Y((yu0)=>{Object.defineProperty(yu0,"__esModule",{value:!0})});var uu0=Y(($u0)=>{Object.defineProperty($u0,"__esModule",{value:!0})});var Ou0=Y((Tu0)=>{Object.defineProperty(Tu0,"__esModule",{value:!0})});var lu0=Y((mu0)=>{Object.defineProperty(mu0,"__esModule",{value:!0})});var hu0=Y((bu0)=>{Object.defineProperty(bu0,"__esModule",{value:!0})});var ku0=Y((ju0)=>{Object.defineProperty(ju0,"__esModule",{value:!0})});var cu0=Y((xu0)=>{Object.defineProperty(xu0,"__esModule",{value:!0})});var iu0=Y((pu0)=>{Object.defineProperty(pu0,"__esModule",{value:!0})});var ru0=Y((nu0)=>{Object.defineProperty(nu0,"__esModule",{value:!0})});var su0=Y((au0)=>{Object.defineProperty(au0,"__esModule",{value:!0})});var eu0=Y((ou0)=>{Object.defineProperty(ou0,"__esModule",{value:!0});ou0.RequestHandlerProtocol=void 0;var ZV5;(function(I){I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0"})(ZV5=ou0.RequestHandlerProtocol||(ou0.RequestHandlerProtocol={}))});var IT0=Y((tu0)=>{Object.defineProperty(tu0,"__esModule",{value:!0})});var GT0=Y((dT0)=>{Object.defineProperty(dT0,"__esModule",{value:!0})});var CT0=Y((ZT0)=>{Object.defineProperty(ZT0,"__esModule",{value:!0})});var wT0=Y((WT0)=>{Object.defineProperty(WT0,"__esModule",{value:!0})});var AT0=Y((BT0)=>{Object.defineProperty(BT0,"__esModule",{value:!0})});var VT0=Y((V5)=>{Object.defineProperty(V5,"__esModule",{value:!0});var q5=x1();q5.__exportStar(u$0(),V5);q5.__exportStar(O$0(),V5);q5.__exportStar(l$0(),V5);q5.__exportStar(h$0(),V5);q5.__exportStar(k$0(),V5);q5.__exportStar(c$0(),V5);q5.__exportStar(o$0(),V5);q5.__exportStar(t$0(),V5);q5.__exportStar(du0(),V5);q5.__exportStar(Zu0(),V5);q5.__exportStar(Hu0(),V5);q5.__exportStar(gu0(),V5);q5.__exportStar(Ku0(),V5);q5.__exportStar(Ru0(),V5);q5.__exportStar(vu0(),V5);q5.__exportStar(Mu0(),V5);q5.__exportStar(Lu0(),V5);q5.__exportStar(Pu0(),V5);q5.__exportStar(uu0(),V5);q5.__exportStar(Ou0(),V5);q5.__exportStar(lu0(),V5);q5.__exportStar(hu0(),V5);q5.__exportStar(ku0(),V5);q5.__exportStar(cu0(),V5);q5.__exportStar(iu0(),V5);q5.__exportStar(ru0(),V5);q5.__exportStar(su0(),V5);q5.__exportStar(eu0(),V5);q5.__exportStar(IT0(),V5);q5.__exportStar(GT0(),V5);q5.__exportStar(CT0(),V5);q5.__exportStar(wT0(),V5);q5.__exportStar(AT0(),V5)});var DT0=Y((YT0)=>{Object.defineProperty(YT0,"__esModule",{value:!0});YT0.Field=void 0;var CV5=VT0();class XT0{constructor({name:I,kind:d=CV5.FieldPosition.HEADER,values:G=[]}){this.name=I,this.kind=d,this.values=G}add(I){this.values.push(I)}set(I){this.values=I}remove(I){this.values=this.values.filter((d)=>d!==I)}toString(){return this.values.map((I)=>I.includes(",")||I.includes(" ")?`"${I}"`:I).join(", ")}get(){return this.values}}YT0.Field=XT0});var JT0=Y((FT0)=>{Object.defineProperty(FT0,"__esModule",{value:!0});FT0.Fields=void 0;class HT0{constructor({fields:I=[],encoding:d="utf-8"}){this.entries={},I.forEach(this.setField.bind(this)),this.encoding=d}setField(I){this.entries[I.name.toLowerCase()]=I}getField(I){return this.entries[I.toLowerCase()]}removeField(I){delete this.entries[I.toLowerCase()]}getByType(I){return Object.values(this.entries).filter((d)=>d.kind===I)}}FT0.Fields=HT0});var NT0=Y((KT0)=>{Object.defineProperty(KT0,"__esModule",{value:!0})});var fT0=Y((zT0)=>{Object.defineProperty(zT0,"__esModule",{value:!0});zT0.HttpRequest=void 0;class lB1{constructor(I){this.method=I.method||"GET",this.hostname=I.hostname||"localhost",this.port=I.port,this.query=I.query||{},this.headers=I.headers||{},this.body=I.body,this.protocol=I.protocol?I.protocol.slice(-1)!==":"?`${I.protocol}:`:I.protocol:"https:",this.path=I.path?I.path.charAt(0)!=="/"?`/${I.path}`:I.path:"/",this.username=I.username,this.password=I.password,this.fragment=I.fragment}static isInstance(I){if(!I)return!1;let d=I;return"method"in d&&"protocol"in d&&"hostname"in d&&"path"in d&&typeof d.query==="object"&&typeof d.headers==="object"}clone(){let I=new lB1({...this,headers:{...this.headers}});if(I.query)I.query=WV5(I.query);return I}}zT0.HttpRequest=lB1;function WV5(I){return Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{})}});var vT0=Y((RT0)=>{Object.defineProperty(RT0,"__esModule",{value:!0});RT0.HttpResponse=void 0;class qT0{constructor(I){this.statusCode=I.statusCode,this.reason=I.reason,this.headers=I.headers||{},this.body=I.body}static isInstance(I){if(!I)return!1;let d=I;return typeof d.statusCode==="number"&&typeof d.headers==="object"}}RT0.HttpResponse=qT0});var ST0=Y((ET0)=>{Object.defineProperty(ET0,"__esModule",{value:!0});ET0.isValidHostname=void 0;function wV5(I){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(I)}ET0.isValidHostname=wV5});var yT0=Y((LT0)=>{Object.defineProperty(LT0,"__esModule",{value:!0})});var bB1=Y((LV)=>{Object.defineProperty(LV,"__esModule",{value:!0});var _J=x1();_J.__exportStar(DT0(),LV);_J.__exportStar(JT0(),LV);_J.__exportStar(NT0(),LV);_J.__exportStar(fT0(),LV);_J.__exportStar(vT0(),LV);_J.__exportStar(ST0(),LV);_J.__exportStar(yT0(),LV)});var hB1=Y((YV5)=>{var BV5=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",PT0="[:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]["+BV5+"]*",AV5=new RegExp("^"+PT0+"$"),VV5=function(I,d){let G=[],Z=d.exec(I);while(Z){let C=[];C.startIndex=d.lastIndex-Z[0].length;let W=Z.length;for(let w=0;w{var jB1=hB1(),KV5={allowBooleanAttributes:!1,unpairedTags:[]};EV5.validate=function(I,d){d=Object.assign({},KV5,d);let G=[],Z=!1,C=!1;if(I[0]==="\uFEFF")I=I.substr(1);for(let W=0;W"&&I[W]!==" "&&I[W]!=="\t"&&I[W]!==` +`&&I[W]!=="\r";W++)A+=I[W];if(A=A.trim(),A[A.length-1]==="/")A=A.substring(0,A.length-1),W--;if(!vV5(A)){let _;if(A.trim().length===0)_="Invalid space after '<'.";else _="Tag '"+A+"' is an invalid name.";return v6("InvalidTag",_,Bd(I,W))}let V=QV5(I,W);if(V===!1)return v6("InvalidAttr","Attributes for '"+A+"' have open quote.",Bd(I,W));let X=V.value;if(W=V.index,X[X.length-1]==="/"){let _=W-X.length;X=X.substring(0,X.length-1);let F=mT0(X,d);if(F===!0)Z=!0;else return v6(F.err.code,F.err.msg,Bd(I,_+F.err.line))}else if(B)if(!V.tagClosed)return v6("InvalidTag","Closing tag '"+A+"' doesn't have proper closing.",Bd(I,W));else if(X.trim().length>0)return v6("InvalidTag","Closing tag '"+A+"' can't have attributes or invalid starting.",Bd(I,w));else{let _=G.pop();if(A!==_.tagName){let F=Bd(I,_.tagStartPos);return v6("InvalidTag","Expected closing tag '"+_.tagName+"' (opened in line "+F.line+", col "+F.col+") instead of closing tag '"+A+"'.",Bd(I,w))}if(G.length==0)C=!0}else{let _=mT0(X,d);if(_!==!0)return v6(_.err.code,_.err.msg,Bd(I,W-X.length+_.err.line));if(C===!0)return v6("InvalidXml","Multiple possible root nodes found.",Bd(I,W));else if(d.unpairedTags.indexOf(A)!==-1);else G.push({tagName:A,tagStartPos:w});Z=!0}for(W++;W0)return v6("InvalidXml","Invalid '"+JSON.stringify(G.map((W)=>W.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1});return!0};function uT0(I){return I===" "||I==="\t"||I===` +`||I==="\r"}function TT0(I,d){let G=d;for(;d5&&Z==="xml")return v6("InvalidXml","XML declaration allowed only at the start of the document.",Bd(I,d));else if(I[d]=="?"&&I[d+1]==">"){d++;break}else continue}return d}function OT0(I,d){if(I.length>d+5&&I[d+1]==="-"&&I[d+2]==="-"){for(d+=3;d"){d+=2;break}}else if(I.length>d+8&&I[d+1]==="D"&&I[d+2]==="O"&&I[d+3]==="C"&&I[d+4]==="T"&&I[d+5]==="Y"&&I[d+6]==="P"&&I[d+7]==="E"){let G=1;for(d+=8;d"){if(G--,G===0)break}}else if(I.length>d+9&&I[d+1]==="["&&I[d+2]==="C"&&I[d+3]==="D"&&I[d+4]==="A"&&I[d+5]==="T"&&I[d+6]==="A"&&I[d+7]==="["){for(d+=8;d"){d+=2;break}}return d}var NV5='"',zV5="'";function QV5(I,d){let G="",Z="",C=!1;for(;d"){if(Z===""){C=!0;break}}G+=I[d]}if(Z!=="")return!1;return{value:G,index:d,tagClosed:C}}var fV5=new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`,"g");function mT0(I,d){let G=jB1.getAllMatches(I,fV5),Z={};for(let C=0;C{var lT0={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(I,d){return d},attributeValueProcessor:function(I,d){return d},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1},SV5=function(I){return Object.assign({},lT0,I)};LV5.buildOptions=SV5;LV5.defaultOptions=lT0});var kT0=Y((T73,jT0)=>{class hT0{constructor(I){this.tagname=I,this.child=[],this[":@"]={}}add(I,d){if(I==="__proto__")I="#__proto__";this.child.push({[I]:d})}addChild(I){if(I.tagname==="__proto__")I.tagname="#__proto__";if(I[":@"]&&Object.keys(I[":@"]).length>0)this.child.push({[I.tagname]:I.child,[":@"]:I[":@"]});else this.child.push({[I.tagname]:I.child})}}jT0.exports=hT0});var cT0=Y((O73,xT0)=>{function $V5(I,d){let G={};if(I[d+3]==="O"&&I[d+4]==="C"&&I[d+5]==="T"&&I[d+6]==="Y"&&I[d+7]==="P"&&I[d+8]==="E"){d=d+9;let Z=1,C=!1,W=!1,w=!1,B="";for(;d"){if(w){if(I[d-1]==="-"&&I[d-2]==="-")w=!1,Z--}else{if(W)TV5(B,G),W=!1;Z--}if(Z===0)break}else if(I[d]==="[")C=!0;else B+=I[d];if(Z!==0)throw new Error("Unclosed DOCTYPE")}else throw new Error("Invalid Tag instead of DOCTYPE");return{entities:G,i:d}}var uV5=RegExp(`^\\s([a-zA-z0-0]+)[ ](['"])([^&]+)\\2`);function TV5(I,d){let G=uV5.exec(I);if(G)d[G[1]]={regx:RegExp(`&${G[1]};`,"g"),val:G[3]}}xT0.exports=$V5});var nT0=Y((l73,iT0)=>{var pB1=hB1(),vy=kT0(),OV5=cT0(),mV5=mc(),m73="<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,pB1.nameRegexp);class pT0{constructor(I){this.options=I,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"}},this.addExternalEntities=lV5,this.parseXml=xV5,this.parseTextData=bV5,this.resolveNameSpace=hV5,this.buildAttributesMap=kV5,this.isItStopNode=iV5,this.replaceEntitiesValue=cV5,this.readStopNodeData=rV5,this.saveTextToParentTag=pV5}}function lV5(I){let d=Object.keys(I);for(let G=0;G0){if(!w)I=this.replaceEntitiesValue(I);let B=this.options.tagValueProcessor(d,I,G,C,W);if(B===null||B===void 0)return I;else if(typeof B!==typeof I||B!==I)return B;else if(this.options.trimValues)return cB1(I,this.options.parseTagValue,this.options.numberParseOptions);else if(I.trim()===I)return cB1(I,this.options.parseTagValue,this.options.numberParseOptions);else return I}}}function hV5(I){if(this.options.removeNSPrefix){let d=I.split(":"),G=I.charAt(0)==="/"?"/":"";if(d[0]==="xmlns")return"";if(d.length===2)I=G+d[1]}return I}var jV5=new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`,"gm");function kV5(I,d){if(!this.options.ignoreAttributes&&typeof I==="string"){let G=pB1.getAllMatches(I,jV5),Z=G.length,C={};for(let W=0;W",W,"Closing Tag is not closed."),A=I.substring(W+2,B).trim();if(this.options.removeNSPrefix){let V=A.indexOf(":");if(V!==-1)A=A.substr(V+1)}if(this.options.transformTagName)A=this.options.transformTagName(A);if(G)Z=this.saveTextToParentTag(Z,G,C);C=C.substr(0,C.lastIndexOf(".")),G=this.tagsNodeStack.pop(),Z="",W=B}else if(I[W+1]==="?"){let B=xB1(I,W,!1,"?>");if(!B)throw new Error("Pi Tag is not closed.");if(Z=this.saveTextToParentTag(Z,G,C),this.options.ignoreDeclaration&&B.tagName==="?xml"||this.options.ignorePiTags);else{let A=new vy(B.tagName);if(A.add(this.options.textNodeName,""),B.tagName!==B.tagExp&&B.attrExpPresent)A[":@"]=this.buildAttributesMap(B.tagExp,C);G.addChild(A)}W=B.closeIndex+1}else if(I.substr(W+1,3)==="!--"){let B=DJ(I,"-->",W+4,"Comment is not closed.");if(this.options.commentPropName){let A=I.substring(W+4,B-2);Z=this.saveTextToParentTag(Z,G,C),G.add(this.options.commentPropName,[{[this.options.textNodeName]:A}])}W=B}else if(I.substr(W+1,2)==="!D"){let B=OV5(I,W);this.docTypeEntities=B.entities,W=B.i}else if(I.substr(W+1,2)==="!["){let B=DJ(I,"]]>",W,"CDATA is not closed.")-2,A=I.substring(W+9,B);if(Z=this.saveTextToParentTag(Z,G,C),this.options.cdataPropName)G.add(this.options.cdataPropName,[{[this.options.textNodeName]:A}]);else{let V=this.parseTextData(A,G.tagname,C,!0,!1,!0);if(V==null)V="";G.add(this.options.textNodeName,V)}W=B+2}else{let B=xB1(I,W,this.options.removeNSPrefix),A=B.tagName,V=B.tagExp,X=B.attrExpPresent,_=B.closeIndex;if(this.options.transformTagName)A=this.options.transformTagName(A);if(G&&Z){if(G.tagname!=="!xml")Z=this.saveTextToParentTag(Z,G,C,!1)}if(A!==d.tagname)C+=C?"."+A:A;let F=G;if(F&&this.options.unpairedTags.indexOf(F.tagname)!==-1)G=this.tagsNodeStack.pop();if(this.isItStopNode(this.options.stopNodes,C,A)){let g="";if(V.length>0&&V.lastIndexOf("/")===V.length-1)W=B.closeIndex;else if(this.options.unpairedTags.indexOf(A)!==-1)W=B.closeIndex;else{let K=this.readStopNodeData(I,A,_+1);if(!K)throw new Error(`Unexpected end of ${A}`);W=K.i,g=K.tagContent}let J=new vy(A);if(A!==V&&X)J[":@"]=this.buildAttributesMap(V,C);if(g)g=this.parseTextData(g,A,C,!0,X,!0,!0);C=C.substr(0,C.lastIndexOf(".")),J.add(this.options.textNodeName,g),G.addChild(J)}else{if(V.length>0&&V.lastIndexOf("/")===V.length-1){if(A[A.length-1]==="/")A=A.substr(0,A.length-1),V=A;else V=V.substr(0,V.length-1);if(this.options.transformTagName)A=this.options.transformTagName(A);let g=new vy(A);if(A!==V&&X)g[":@"]=this.buildAttributesMap(V,C);C=C.substr(0,C.lastIndexOf(".")),G.addChild(g)}else{let g=new vy(A);if(this.tagsNodeStack.push(G),A!==V&&X)g[":@"]=this.buildAttributesMap(V,C);G.addChild(g),G=g}Z="",W=_}}else Z+=I[W];return d.child},cV5=function(I){if(this.options.processEntities){for(let d in this.docTypeEntities){let G=this.docTypeEntities[d];I=I.replace(G.regx,G.val)}for(let d in this.lastEntities){let G=this.lastEntities[d];I=I.replace(G.regex,G.val)}if(this.options.htmlEntities)for(let d in this.htmlEntities){let G=this.htmlEntities[d];I=I.replace(G.regex,G.val)}I=I.replace(this.ampEntity.regex,this.ampEntity.val)}return I};function pV5(I,d,G,Z){if(I){if(Z===void 0)Z=Object.keys(d.child).length===0;if(I=this.parseTextData(I,d.tagname,G,!1,d[":@"]?Object.keys(d[":@"]).length!==0:!1,Z),I!==void 0&&I!=="")d.add(this.options.textNodeName,I);I=""}return I}function iV5(I,d,G){let Z="*."+G;for(let C in I){let W=I[C];if(Z===W||d===W)return!0}return!1}function nV5(I,d,G=">"){let Z,C="";for(let W=d;W",G,`${d} is not closed`);if(I.substring(G+2,W).trim()===d){if(C--,C===0)return{tagContent:I.substring(Z,G),i:W}}G=W}else if(I[G+1]==="?")G=DJ(I,"?>",G+1,"StopNode is not closed.");else if(I.substr(G+1,3)==="!--")G=DJ(I,"-->",G+3,"StopNode is not closed.");else if(I.substr(G+1,2)==="![")G=DJ(I,"]]>",G,"StopNode is not closed.")-2;else{let W=xB1(I,G,">");if(W){if((W&&W.tagName)===d&&W.tagExp[W.tagExp.length-1]!=="/")C++;G=W.closeIndex}}}function cB1(I,d,G){if(d&&typeof I==="string"){let Z=I.trim();if(Z==="true")return!0;else if(Z==="false")return!1;else return mV5(I,G)}else if(pB1.isExist(I))return I;else return""}iT0.exports=pT0});var aT0=Y((tV5)=>{function aV5(I,d){return rT0(I,d)}function rT0(I,d,G){let Z,C={};for(let W=0;W0)C[d.textNodeName]=Z}else if(Z!==void 0)C[d.textNodeName]=Z;return C}function sV5(I){let d=Object.keys(I);for(let G=0;G{var{buildOptions:dX5}=bT0(),GX5=nT0(),{prettify:ZX5}=aT0(),CX5=kB1();class sT0{constructor(I){this.externalEntities={},this.options=dX5(I)}parse(I,d){if(typeof I==="string");else if(I.toString)I=I.toString();else throw new Error("XML data is accepted in String or Bytes[] form.");if(d){if(d===!0)d={};let C=CX5.validate(I,d);if(C!==!0)throw Error(`${C.err.msg}:${C.err.line}:${C.err.col}`)}let G=new GX5(this.options);G.addExternalEntities(this.externalEntities);let Z=G.parseXml(I);if(this.options.preserveOrder||Z===void 0)return Z;else return ZX5(Z,this.options)}addEntity(I,d){if(d.indexOf("&")!==-1)throw new Error("Entity value can't have '&'");else if(I.indexOf("&")!==-1||I.indexOf(";")!==-1)throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '");else if(d==="&")throw new Error("An entity with value '&' is not permitted");else this.externalEntities[I]=d}}oT0.exports=sT0});var ZO0=Y((j73,GO0)=>{function WX5(I,d){let G="";if(d.format&&d.indentBy.length>0)G=` +`;return IO0(I,d,"",G)}function IO0(I,d,G,Z){let C="",W=!1;for(let w=0;w`,W=!1;continue}else if(A===d.commentPropName){C+=Z+``,W=!0;continue}else if(A[0]==="?"){let J=tT0(B[":@"],d),K=A==="?xml"?"":Z,Q=B[A][0][d.textNodeName];Q=Q.length!==0?" "+Q:"",C+=K+`<${A}${Q}${J}?>`,W=!0;continue}let X=Z;if(X!=="")X+=d.indentBy;let _=tT0(B[":@"],d),F=Z+`<${A}${_}`,g=IO0(B[A],d,V,X);if(d.unpairedTags.indexOf(A)!==-1)if(d.suppressUnpairedNode)C+=F+">";else C+=F+"/>";else if((!g||g.length===0)&&d.suppressEmptyNode)C+=F+"/>";else if(g&&g.endsWith(">"))C+=F+`>${g}${Z}`;else{if(C+=F+">",g&&Z!==""&&(g.includes("/>")||g.includes("`}W=!0}return C}function wX5(I){let d=Object.keys(I);for(let G=0;G0&&d.processEntities)for(let G=0;G{var AX5=ZO0(),VX5={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(I,d){return d},attributeValueProcessor:function(I,d){return d},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[]};function BD(I){if(this.options=Object.assign({},VX5,I),this.options.ignoreAttributes||this.options.attributesGroupName)this.isAttribute=function(){return!1};else this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=_X5;if(this.processTextOrObjNode=XX5,this.options.format)this.indentate=YX5,this.tagEndChar=`> +`,this.newLine=` +`;else this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""}BD.prototype.build=function(I){if(this.options.preserveOrder)return AX5(I,this.options);else{if(Array.isArray(I)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1)I={[this.options.arrayNodeName]:I};return this.j2x(I,0).val}};BD.prototype.j2x=function(I,d){let G="",Z="";for(let C in I)if(typeof I[C]==="undefined");else if(I[C]===null)if(C[0]==="?")Z+=this.indentate(d)+"<"+C+"?"+this.tagEndChar;else Z+=this.indentate(d)+"<"+C+"/"+this.tagEndChar;else if(I[C]instanceof Date)Z+=this.buildTextValNode(I[C],C,"",d);else if(typeof I[C]!=="object"){let W=this.isAttribute(C);if(W)G+=this.buildAttrPairStr(W,""+I[C]);else if(C===this.options.textNodeName){let w=this.options.tagValueProcessor(C,""+I[C]);Z+=this.replaceEntitiesValue(w)}else Z+=this.buildTextValNode(I[C],C,"",d)}else if(Array.isArray(I[C])){let W=I[C].length;for(let w=0;w"+I+C;else if(this.options.commentPropName!==!1&&d===this.options.commentPropName&&W.length===0)return this.indentate(Z)+``+this.newLine;else return this.indentate(Z)+"<"+d+G+W+this.tagEndChar+I+this.indentate(Z)+C}};BD.prototype.closeTag=function(I){let d="";if(this.options.unpairedTags.indexOf(I)!==-1){if(!this.options.suppressUnpairedNode)d="/"}else if(this.options.suppressEmptyNode)d="/";else d=`>`+this.newLine;else if(this.options.commentPropName!==!1&&d===this.options.commentPropName)return this.indentate(Z)+``+this.newLine;else if(d[0]==="?")return this.indentate(Z)+"<"+d+G+"?"+this.tagEndChar;else{let C=this.options.tagValueProcessor(d,I);if(C=this.replaceEntitiesValue(C),C==="")return this.indentate(Z)+"<"+d+G+this.closeTag(d)+this.tagEndChar;else return this.indentate(Z)+"<"+d+G+">"+C+"0&&this.options.processEntities)for(let d=0;d{var DX5=kB1(),HX5=eT0(),FX5=WO0();wO0.exports={XMLParser:HX5,XMLValidator:DX5,XMLBuilder:FX5}});var PV=Y((YO0)=>{Object.defineProperty(YO0,"__esModule",{value:!0});YO0.de_GetSessionTokenCommand=YO0.de_GetFederationTokenCommand=YO0.de_GetCallerIdentityCommand=YO0.de_GetAccessKeyInfoCommand=YO0.de_DecodeAuthorizationMessageCommand=YO0.de_AssumeRoleWithWebIdentityCommand=YO0.de_AssumeRoleWithSAMLCommand=YO0.de_AssumeRoleCommand=YO0.se_GetSessionTokenCommand=YO0.se_GetFederationTokenCommand=YO0.se_GetCallerIdentityCommand=YO0.se_GetAccessKeyInfoCommand=YO0.se_DecodeAuthorizationMessageCommand=YO0.se_AssumeRoleWithWebIdentityCommand=YO0.se_AssumeRoleWithSAMLCommand=YO0.se_AssumeRoleCommand=void 0;var t2=v0(),gX5=bB1(),JX5=BO0(),AD=wD(),KX5=pp(),NX5=async(I,d)=>{let G=YD,Z;return Z=DD({...pX5(I,d),Action:"AssumeRole",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_AssumeRoleCommand=NX5;var zX5=async(I,d)=>{let G=YD,Z;return Z=DD({...iX5(I,d),Action:"AssumeRoleWithSAML",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_AssumeRoleWithSAMLCommand=zX5;var QX5=async(I,d)=>{let G=YD,Z;return Z=DD({...nX5(I,d),Action:"AssumeRoleWithWebIdentity",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_AssumeRoleWithWebIdentityCommand=QX5;var fX5=async(I,d)=>{let G=YD,Z;return Z=DD({...rX5(I,d),Action:"DecodeAuthorizationMessage",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_DecodeAuthorizationMessageCommand=fX5;var qX5=async(I,d)=>{let G=YD,Z;return Z=DD({...aX5(I,d),Action:"GetAccessKeyInfo",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_GetAccessKeyInfoCommand=qX5;var RX5=async(I,d)=>{let G=YD,Z;return Z=DD({...sX5(I,d),Action:"GetCallerIdentity",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_GetCallerIdentityCommand=RX5;var UX5=async(I,d)=>{let G=YD,Z;return Z=DD({...oX5(I,d),Action:"GetFederationToken",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_GetFederationTokenCommand=UX5;var vX5=async(I,d)=>{let G=YD,Z;return Z=DD({...eX5(I,d),Action:"GetSessionToken",Version:"2011-06-15"}),XD(d,G,"/",void 0,Z)};YO0.se_GetSessionTokenCommand=vX5;var EX5=async(I,d)=>{if(I.statusCode>=300)return MX5(I,d);let G=await yV(I.body,d),Z={};return Z=GY5(G.AssumeRoleResult,d),{$metadata:u7(I),...Z}};YO0.de_AssumeRoleCommand=EX5;var MX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await iB1(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await np(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await rp(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await Ey(G,d);default:let C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})}},SX5=async(I,d)=>{if(I.statusCode>=300)return LX5(I,d);let G=await yV(I.body,d),Z={};return Z=ZY5(G.AssumeRoleWithSAMLResult,d),{$metadata:u7(I),...Z}};YO0.de_AssumeRoleWithSAMLCommand=SX5;var LX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await iB1(G,d);case"IDPRejectedClaim":case"com.amazonaws.sts#IDPRejectedClaimException":throw await AO0(G,d);case"InvalidIdentityToken":case"com.amazonaws.sts#InvalidIdentityTokenException":throw await VO0(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await np(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await rp(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await Ey(G,d);default:let C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})}},yX5=async(I,d)=>{if(I.statusCode>=300)return PX5(I,d);let G=await yV(I.body,d),Z={};return Z=CY5(G.AssumeRoleWithWebIdentityResult,d),{$metadata:u7(I),...Z}};YO0.de_AssumeRoleWithWebIdentityCommand=yX5;var PX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await iB1(G,d);case"IDPCommunicationError":case"com.amazonaws.sts#IDPCommunicationErrorException":throw await xX5(G,d);case"IDPRejectedClaim":case"com.amazonaws.sts#IDPRejectedClaimException":throw await AO0(G,d);case"InvalidIdentityToken":case"com.amazonaws.sts#InvalidIdentityTokenException":throw await VO0(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await np(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await rp(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await Ey(G,d);default:let C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})}},$X5=async(I,d)=>{if(I.statusCode>=300)return uX5(I,d);let G=await yV(I.body,d),Z={};return Z=WY5(G.DecodeAuthorizationMessageResult,d),{$metadata:u7(I),...Z}};YO0.de_DecodeAuthorizationMessageCommand=$X5;var uX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body);switch(Z){case"InvalidAuthorizationMessageException":case"com.amazonaws.sts#InvalidAuthorizationMessageException":throw await cX5(G,d);default:let C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})}},TX5=async(I,d)=>{if(I.statusCode>=300)return OX5(I,d);let G=await yV(I.body,d),Z={};return Z=AY5(G.GetAccessKeyInfoResult,d),{$metadata:u7(I),...Z}};YO0.de_GetAccessKeyInfoCommand=TX5;var OX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body),C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})},mX5=async(I,d)=>{if(I.statusCode>=300)return lX5(I,d);let G=await yV(I.body,d),Z={};return Z=VY5(G.GetCallerIdentityResult,d),{$metadata:u7(I),...Z}};YO0.de_GetCallerIdentityCommand=mX5;var lX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body),C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})},bX5=async(I,d)=>{if(I.statusCode>=300)return hX5(I,d);let G=await yV(I.body,d),Z={};return Z=XY5(G.GetFederationTokenResult,d),{$metadata:u7(I),...Z}};YO0.de_GetFederationTokenCommand=bX5;var hX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body);switch(Z){case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await np(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await rp(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await Ey(G,d);default:let C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})}},jX5=async(I,d)=>{if(I.statusCode>=300)return kX5(I,d);let G=await yV(I.body,d),Z={};return Z=YY5(G.GetSessionTokenResult,d),{$metadata:u7(I),...Z}};YO0.de_GetSessionTokenCommand=jX5;var kX5=async(I,d)=>{let G={...I,body:await _D(I.body,d)},Z=HD(I,G.body);switch(Z){case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await Ey(G,d);default:let C=G.body;return VD({output:I,parsedBody:C.Error,errorCode:Z})}},iB1=async(I,d)=>{let G=I.body,Z=wY5(G.Error,d),C=new AD.ExpiredTokenException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},xX5=async(I,d)=>{let G=I.body,Z=_Y5(G.Error,d),C=new AD.IDPCommunicationErrorException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},AO0=async(I,d)=>{let G=I.body,Z=DY5(G.Error,d),C=new AD.IDPRejectedClaimException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},cX5=async(I,d)=>{let G=I.body,Z=HY5(G.Error,d),C=new AD.InvalidAuthorizationMessageException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},VO0=async(I,d)=>{let G=I.body,Z=FY5(G.Error,d),C=new AD.InvalidIdentityTokenException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},np=async(I,d)=>{let G=I.body,Z=gY5(G.Error,d),C=new AD.MalformedPolicyDocumentException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},rp=async(I,d)=>{let G=I.body,Z=JY5(G.Error,d),C=new AD.PackedPolicyTooLargeException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},Ey=async(I,d)=>{let G=I.body,Z=KY5(G.Error,d),C=new AD.RegionDisabledException({$metadata:u7(I),...Z});return t2.decorateServiceException(C,G)},pX5=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.RoleSessionName!=null)G.RoleSessionName=I.RoleSessionName;if(I.PolicyArns!=null){let Z=ap(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.Tags!=null){let Z=XO0(I.Tags,d);if(I.Tags?.length===0)G.Tags=[];Object.entries(Z).forEach(([C,W])=>{let w=`Tags.${C}`;G[w]=W})}if(I.TransitiveTagKeys!=null){let Z=dY5(I.TransitiveTagKeys,d);if(I.TransitiveTagKeys?.length===0)G.TransitiveTagKeys=[];Object.entries(Z).forEach(([C,W])=>{let w=`TransitiveTagKeys.${C}`;G[w]=W})}if(I.ExternalId!=null)G.ExternalId=I.ExternalId;if(I.SerialNumber!=null)G.SerialNumber=I.SerialNumber;if(I.TokenCode!=null)G.TokenCode=I.TokenCode;if(I.SourceIdentity!=null)G.SourceIdentity=I.SourceIdentity;return G},iX5=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.PrincipalArn!=null)G.PrincipalArn=I.PrincipalArn;if(I.SAMLAssertion!=null)G.SAMLAssertion=I.SAMLAssertion;if(I.PolicyArns!=null){let Z=ap(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;return G},nX5=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.RoleSessionName!=null)G.RoleSessionName=I.RoleSessionName;if(I.WebIdentityToken!=null)G.WebIdentityToken=I.WebIdentityToken;if(I.ProviderId!=null)G.ProviderId=I.ProviderId;if(I.PolicyArns!=null){let Z=ap(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;return G},rX5=(I,d)=>{let G={};if(I.EncodedMessage!=null)G.EncodedMessage=I.EncodedMessage;return G},aX5=(I,d)=>{let G={};if(I.AccessKeyId!=null)G.AccessKeyId=I.AccessKeyId;return G},sX5=(I,d)=>{return{}},oX5=(I,d)=>{let G={};if(I.Name!=null)G.Name=I.Name;if(I.Policy!=null)G.Policy=I.Policy;if(I.PolicyArns!=null){let Z=ap(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.Tags!=null){let Z=XO0(I.Tags,d);if(I.Tags?.length===0)G.Tags=[];Object.entries(Z).forEach(([C,W])=>{let w=`Tags.${C}`;G[w]=W})}return G},eX5=(I,d)=>{let G={};if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.SerialNumber!=null)G.SerialNumber=I.SerialNumber;if(I.TokenCode!=null)G.TokenCode=I.TokenCode;return G},ap=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=tX5(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},tX5=(I,d)=>{let G={};if(I.arn!=null)G.arn=I.arn;return G},IY5=(I,d)=>{let G={};if(I.Key!=null)G.Key=I.Key;if(I.Value!=null)G.Value=I.Value;return G},dY5=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;G[`member.${Z}`]=C,Z++}return G},XO0=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=IY5(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},nB1=(I,d)=>{let G={};if(I.AssumedRoleId!==void 0)G.AssumedRoleId=t2.expectString(I.AssumedRoleId);if(I.Arn!==void 0)G.Arn=t2.expectString(I.Arn);return G},GY5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=My(I.Credentials,d);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=nB1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=t2.strictParseInt32(I.PackedPolicySize);if(I.SourceIdentity!==void 0)G.SourceIdentity=t2.expectString(I.SourceIdentity);return G},ZY5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=My(I.Credentials,d);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=nB1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=t2.strictParseInt32(I.PackedPolicySize);if(I.Subject!==void 0)G.Subject=t2.expectString(I.Subject);if(I.SubjectType!==void 0)G.SubjectType=t2.expectString(I.SubjectType);if(I.Issuer!==void 0)G.Issuer=t2.expectString(I.Issuer);if(I.Audience!==void 0)G.Audience=t2.expectString(I.Audience);if(I.NameQualifier!==void 0)G.NameQualifier=t2.expectString(I.NameQualifier);if(I.SourceIdentity!==void 0)G.SourceIdentity=t2.expectString(I.SourceIdentity);return G},CY5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=My(I.Credentials,d);if(I.SubjectFromWebIdentityToken!==void 0)G.SubjectFromWebIdentityToken=t2.expectString(I.SubjectFromWebIdentityToken);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=nB1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=t2.strictParseInt32(I.PackedPolicySize);if(I.Provider!==void 0)G.Provider=t2.expectString(I.Provider);if(I.Audience!==void 0)G.Audience=t2.expectString(I.Audience);if(I.SourceIdentity!==void 0)G.SourceIdentity=t2.expectString(I.SourceIdentity);return G},My=(I,d)=>{let G={};if(I.AccessKeyId!==void 0)G.AccessKeyId=t2.expectString(I.AccessKeyId);if(I.SecretAccessKey!==void 0)G.SecretAccessKey=t2.expectString(I.SecretAccessKey);if(I.SessionToken!==void 0)G.SessionToken=t2.expectString(I.SessionToken);if(I.Expiration!==void 0)G.Expiration=t2.expectNonNull(t2.parseRfc3339DateTimeWithOffset(I.Expiration));return G},WY5=(I,d)=>{let G={};if(I.DecodedMessage!==void 0)G.DecodedMessage=t2.expectString(I.DecodedMessage);return G},wY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},BY5=(I,d)=>{let G={};if(I.FederatedUserId!==void 0)G.FederatedUserId=t2.expectString(I.FederatedUserId);if(I.Arn!==void 0)G.Arn=t2.expectString(I.Arn);return G},AY5=(I,d)=>{let G={};if(I.Account!==void 0)G.Account=t2.expectString(I.Account);return G},VY5=(I,d)=>{let G={};if(I.UserId!==void 0)G.UserId=t2.expectString(I.UserId);if(I.Account!==void 0)G.Account=t2.expectString(I.Account);if(I.Arn!==void 0)G.Arn=t2.expectString(I.Arn);return G},XY5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=My(I.Credentials,d);if(I.FederatedUser!==void 0)G.FederatedUser=BY5(I.FederatedUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=t2.strictParseInt32(I.PackedPolicySize);return G},YY5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=My(I.Credentials,d);return G},_Y5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},DY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},HY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},FY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},gY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},JY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},KY5=(I,d)=>{let G={};if(I.message!==void 0)G.message=t2.expectString(I.message);return G},u7=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),NY5=(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return Promise.resolve(I);return d.streamCollector(I)||Promise.resolve(new Uint8Array)},zY5=(I,d)=>NY5(I,d).then((G)=>d.utf8Encoder(G)),VD=t2.withBaseException(KX5.STSServiceException),XD=async(I,d,G,Z,C)=>{let{hostname:W,protocol:w="https",port:B,path:A}=await I.endpoint(),V={protocol:w,hostname:W,port:B,method:"POST",path:A.endsWith("/")?A.slice(0,-1)+G:A+G,headers:d};if(Z!==void 0)V.hostname=Z;if(C!==void 0)V.body=C;return new gX5.HttpRequest(V)},YD={"content-type":"application/x-www-form-urlencoded"},yV=(I,d)=>zY5(I,d).then((G)=>{if(G.length){let Z=new JX5.XMLParser({attributeNamePrefix:"",htmlEntities:!0,ignoreAttributes:!1,ignoreDeclaration:!0,parseTagValue:!1,trimValues:!1,tagValueProcessor:(A,V)=>V.trim()===""&&V.includes(` +`)?"":void 0});Z.addEntity("#xD","\r"),Z.addEntity("#10",` +`);let C=Z.parse(G),W="#text",w=Object.keys(C)[0],B=C[w];if(B[W])B[w]=B[W],delete B[W];return t2.getValueFromTextNode(B)}return{}}),_D=async(I,d)=>{let G=await yV(I,d);if(G.Error)G.Error.message=G.Error.message??G.Error.Message;return G},DD=(I)=>Object.entries(I).map(([d,G])=>t2.extendedEncodeURIComponent(d)+"="+t2.extendedEncodeURIComponent(G)).join("&"),HD=(I,d)=>{if(d.Error?.Code!==void 0)return d.Error.Code;if(I.statusCode==404)return"NotFound"}});var sp=Y((aB1)=>{Object.defineProperty(aB1,"__esModule",{value:!0});aB1.AssumeRoleCommand=aB1.$Command=void 0;var OY5=u2(),mY5=r2(),lY5=GD(),HO0=v0();Object.defineProperty(aB1,"$Command",{enumerable:!0,get:function(){return HO0.Command}});var bY5=wD(),DO0=PV();class rB1 extends HO0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(mY5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(OY5.getEndpointPlugin(d,rB1.getEndpointParameterInstructions())),this.middlewareStack.use(lY5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:bY5.AssumeRoleResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return DO0.se_AssumeRoleCommand(I,d)}deserialize(I,d){return DO0.de_AssumeRoleCommand(I,d)}}aB1.AssumeRoleCommand=rB1});var op=Y((oB1)=>{Object.defineProperty(oB1,"__esModule",{value:!0});oB1.AssumeRoleWithWebIdentityCommand=oB1.$Command=void 0;var hY5=u2(),jY5=r2(),KO0=v0();Object.defineProperty(oB1,"$Command",{enumerable:!0,get:function(){return KO0.Command}});var gO0=wD(),JO0=PV();class sB1 extends KO0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(jY5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(hY5.getEndpointPlugin(d,sB1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleWithWebIdentityCommand",inputFilterSensitiveLog:gO0.AssumeRoleWithWebIdentityRequestFilterSensitiveLog,outputFilterSensitiveLog:gO0.AssumeRoleWithWebIdentityResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return JO0.se_AssumeRoleWithWebIdentityCommand(I,d)}deserialize(I,d){return JO0.de_AssumeRoleWithWebIdentityCommand(I,d)}}oB1.AssumeRoleWithWebIdentityCommand=sB1});var eB1=Y((fO0)=>{Object.defineProperty(fO0,"__esModule",{value:!0});fO0.decorateDefaultCredentialProvider=fO0.getDefaultRoleAssumerWithWebIdentity=fO0.getDefaultRoleAssumer=void 0;var kY5=sp(),xY5=op(),zO0="us-east-1",QO0=(I)=>{if(typeof I!=="function")return I===void 0?zO0:I;return async()=>{try{return await I()}catch(d){return zO0}}},cY5=(I,d)=>{let G,Z;return async(C,W)=>{if(Z=C,!G){let{logger:B,region:A,requestHandler:V}=I;G=new d({logger:B,credentialDefaultProvider:()=>async()=>Z,region:QO0(A||I.region),...V?{requestHandler:V}:{}})}let{Credentials:w}=await G.send(new kY5.AssumeRoleCommand(W));if(!w||!w.AccessKeyId||!w.SecretAccessKey)throw new Error(`Invalid response from STS.assumeRole call with role ${W.RoleArn}`);return{accessKeyId:w.AccessKeyId,secretAccessKey:w.SecretAccessKey,sessionToken:w.SessionToken,expiration:w.Expiration}}};fO0.getDefaultRoleAssumer=cY5;var pY5=(I,d)=>{let G;return async(Z)=>{if(!G){let{logger:W,region:w,requestHandler:B}=I;G=new d({logger:W,region:QO0(w||I.region),...B?{requestHandler:B}:{}})}let{Credentials:C}=await G.send(new xY5.AssumeRoleWithWebIdentityCommand(Z));if(!C||!C.AccessKeyId||!C.SecretAccessKey)throw new Error(`Invalid response from STS.assumeRoleWithWebIdentity call with role ${Z.RoleArn}`);return{accessKeyId:C.AccessKeyId,secretAccessKey:C.SecretAccessKey,sessionToken:C.SessionToken,expiration:C.Expiration}}};fO0.getDefaultRoleAssumerWithWebIdentity=pY5;var iY5=(I)=>(d)=>I({roleAssumer:fO0.getDefaultRoleAssumer(d,d.stsClientCtor),roleAssumerWithWebIdentity:fO0.getDefaultRoleAssumerWithWebIdentity(d,d.stsClientCtor),...d});fO0.decorateDefaultCredentialProvider=iY5});var SO0=Y((EO0)=>{Object.defineProperty(EO0,"__esModule",{value:!0});EO0.resolveCredentialSource=void 0;var nY5=lp(),vO0=i_(),rY5=W4(),aY5=(I,d)=>{let G={EcsContainer:vO0.fromContainerMetadata,Ec2InstanceMetadata:vO0.fromInstanceMetadata,Environment:nY5.fromEnv};if(I in G)return G[I]();else throw new rY5.CredentialsProviderError(`Unsupported credential source in profile ${d}. Got ${I}, expected EcsContainer or Ec2InstanceMetadata or Environment.`)};EO0.resolveCredentialSource=aY5});var PO0=Y((LO0)=>{Object.defineProperty(LO0,"__esModule",{value:!0});LO0.resolveAssumeRoleCredentials=LO0.isAssumeRoleProfile=void 0;var tB1=W4(),sY5=K8(),oY5=SO0(),eY5=IA1(),tY5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.role_arn==="string"&&["undefined","string"].indexOf(typeof I.role_session_name)>-1&&["undefined","string"].indexOf(typeof I.external_id)>-1&&["undefined","string"].indexOf(typeof I.mfa_serial)>-1&&(I_5(I)||d_5(I));LO0.isAssumeRoleProfile=tY5;var I_5=(I)=>typeof I.source_profile==="string"&&typeof I.credential_source==="undefined",d_5=(I)=>typeof I.credential_source==="string"&&typeof I.source_profile==="undefined",G_5=async(I,d,G,Z={})=>{let C=d[I];if(!G.roleAssumer)throw new tB1.CredentialsProviderError(`Profile ${I} requires a role to be assumed, but no role assumption callback was provided.`,!1);let{source_profile:W}=C;if(W&&W in Z)throw new tB1.CredentialsProviderError(`Detected a cycle attempting to resolve credentials for profile ${sY5.getProfileName(G)}. Profiles visited: `+Object.keys(Z).join(", "),!1);let w=W?eY5.resolveProfileData(W,d,G,{...Z,[W]:!0}):oY5.resolveCredentialSource(C.credential_source,I)(),B={RoleArn:C.role_arn,RoleSessionName:C.role_session_name||`aws-sdk-js-${Date.now()}`,ExternalId:C.external_id},{mfa_serial:A}=C;if(A){if(!G.mfaCodeProvider)throw new tB1.CredentialsProviderError(`Profile ${I} requires multi-factor authentication, but no MFA code callback was provided.`,!1);B.SerialNumber=A,B.TokenCode=await G.mfaCodeProvider(A)}let V=await w;return G.roleAssumer(V,B)};LO0.resolveAssumeRoleCredentials=G_5});var TO0=Y(($O0)=>{Object.defineProperty($O0,"__esModule",{value:!0});$O0.getValidatedProcessCredentials=void 0;var C_5=(I,d)=>{if(d.Version!==1)throw Error(`Profile ${I} credential_process did not return Version 1.`);if(d.AccessKeyId===void 0||d.SecretAccessKey===void 0)throw Error(`Profile ${I} credential_process returned invalid credentials.`);if(d.Expiration){let G=new Date;if(new Date(d.Expiration){Object.defineProperty(OO0,"__esModule",{value:!0});OO0.resolveProcessCredentials=void 0;var dA1=W4(),W_5=B1("child_process"),w_5=B1("util"),B_5=TO0(),A_5=async(I,d)=>{let G=d[I];if(d[I]){let Z=G.credential_process;if(Z!==void 0){let C=w_5.promisify(W_5.exec);try{let{stdout:W}=await C(Z),w;try{w=JSON.parse(W.trim())}catch(B){throw Error(`Profile ${I} credential_process returned invalid JSON.`)}return B_5.getValidatedProcessCredentials(I,w)}catch(W){throw new dA1.CredentialsProviderError(W.message)}}else throw new dA1.CredentialsProviderError(`Profile ${I} did not contain credential_process.`)}else throw new dA1.CredentialsProviderError(`Profile ${I} could not be found in shared credentials file.`)};OO0.resolveProcessCredentials=A_5});var kO0=Y((hO0)=>{Object.defineProperty(hO0,"__esModule",{value:!0});hO0.fromProcess=void 0;var bO0=K8(),V_5=lO0(),X_5=(I={})=>async()=>{let d=await bO0.parseKnownFiles(I);return V_5.resolveProcessCredentials(bO0.getProfileName(I),d)};hO0.fromProcess=X_5});var ep=Y((GA1)=>{Object.defineProperty(GA1,"__esModule",{value:!0});var Y_5=x1();Y_5.__exportStar(kO0(),GA1)});var pO0=Y((xO0)=>{Object.defineProperty(xO0,"__esModule",{value:!0});xO0.resolveProcessCredentials=xO0.isProcessProfile=void 0;var __5=ep(),D_5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.credential_process==="string";xO0.isProcessProfile=D_5;var H_5=async(I,d)=>__5.fromProcess({...I,profile:d})();xO0.resolveProcessCredentials=H_5});var ZA1=Y((iO0)=>{Object.defineProperty(iO0,"__esModule",{value:!0});iO0.isSsoProfile=void 0;var g_5=(I)=>I&&(typeof I.sso_start_url==="string"||typeof I.sso_account_id==="string"||typeof I.sso_session==="string"||typeof I.sso_region==="string"||typeof I.sso_role_name==="string");iO0.isSsoProfile=g_5});var sO0=Y((rO0)=>{Object.defineProperty(rO0,"__esModule",{value:!0});rO0.resolveClientEndpointParameters=void 0;var J_5=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,defaultSigningName:"awsssoportal"}};rO0.resolveClientEndpointParameters=J_5});var oO0=Y((WI3,K_5)=>{K_5.exports={name:"@aws-sdk/client-sso",description:"AWS SDK for JavaScript Sso Client for Node.js, Browser and React Native",version:"3.341.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sso"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/config-resolver":"3.341.0","@aws-sdk/fetch-http-handler":"3.341.0","@aws-sdk/hash-node":"3.341.0","@aws-sdk/invalid-dependency":"3.341.0","@aws-sdk/middleware-content-length":"3.341.0","@aws-sdk/middleware-endpoint":"3.341.0","@aws-sdk/middleware-host-header":"3.341.0","@aws-sdk/middleware-logger":"3.341.0","@aws-sdk/middleware-recursion-detection":"3.341.0","@aws-sdk/middleware-retry":"3.341.0","@aws-sdk/middleware-serde":"3.341.0","@aws-sdk/middleware-stack":"3.341.0","@aws-sdk/middleware-user-agent":"3.341.0","@aws-sdk/node-config-provider":"3.341.0","@aws-sdk/node-http-handler":"3.341.0","@aws-sdk/smithy-client":"3.341.0","@aws-sdk/types":"3.341.0","@aws-sdk/url-parser":"3.341.0","@aws-sdk/util-base64":"3.310.0","@aws-sdk/util-body-length-browser":"3.310.0","@aws-sdk/util-body-length-node":"3.310.0","@aws-sdk/util-defaults-mode-browser":"3.341.0","@aws-sdk/util-defaults-mode-node":"3.341.0","@aws-sdk/util-endpoints":"3.341.0","@aws-sdk/util-retry":"3.341.0","@aws-sdk/util-user-agent-browser":"3.341.0","@aws-sdk/util-user-agent-node":"3.341.0","@aws-sdk/util-utf8":"3.310.0","@smithy/protocol-http":"^1.0.1","@smithy/types":"^1.0.0",tslib:"^2.5.0"},devDependencies:{"@aws-sdk/service-client-documentation-generator":"3.310.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sso",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sso"}}});var dm0=Y((eO0,tO0)=>{Object.defineProperty(eO0,"__esModule",{value:!0});eO0.isCrtAvailable=void 0;var N_5=()=>{try{if(typeof tO0!=="undefined"&&(()=>{throw new Error("Cannot require module "+"aws-crt");})())return["md/crt-avail"];return null}catch(I){return null}};eO0.isCrtAvailable=N_5});var WA1=Y((Zm0)=>{Object.defineProperty(Zm0,"__esModule",{value:!0});Zm0.defaultUserAgent=Zm0.UA_APP_ID_INI_NAME=Zm0.UA_APP_ID_ENV_NAME=void 0;var z_5=QZ(),Gm0=B1("os"),CA1=B1("process"),Q_5=dm0();Zm0.UA_APP_ID_ENV_NAME="AWS_SDK_UA_APP_ID";Zm0.UA_APP_ID_INI_NAME="sdk-ua-app-id";var f_5=({serviceId:I,clientVersion:d})=>{let G=[["aws-sdk-js",d],[`os/${Gm0.platform()}`,Gm0.release()],["lang/js"],["md/nodejs",`${CA1.versions.node}`]],Z=Q_5.isCrtAvailable();if(Z)G.push(Z);if(I)G.push([`api/${I}`,d]);if(CA1.env.AWS_EXECUTION_ENV)G.push([`exec-env/${CA1.env.AWS_EXECUTION_ENV}`]);let C=z_5.loadConfig({environmentVariableSelector:(w)=>w[Zm0.UA_APP_ID_ENV_NAME],configFileSelector:(w)=>w[Zm0.UA_APP_ID_INI_NAME],default:void 0})(),W=void 0;return async()=>{if(!W){let w=await C;W=w?[...G,[`app/${w}`]]:[...G]}return W}};Zm0.defaultUserAgent=f_5});var zm0=Y((Km0)=>{Object.defineProperty(Km0,"__esModule",{value:!0});Km0.ruleSet=void 0;var Hm0="required",$V="fn",uV="argv",ef="ref",wA1="PartitionResult",BB="tree",Sy="error",Ly="endpoint",Bm0={[Hm0]:!1,type:"String"},Am0={[Hm0]:!0,default:!1,type:"Boolean"},Fm0={[ef]:"Endpoint"},gm0={[$V]:"booleanEquals",[uV]:[{[ef]:"UseFIPS"},!0]},Jm0={[$V]:"booleanEquals",[uV]:[{[ef]:"UseDualStack"},!0]},AB={},Vm0={[$V]:"booleanEquals",[uV]:[!0,{[$V]:"getAttr",[uV]:[{[ef]:wA1},"supportsFIPS"]}]},Xm0={[$V]:"booleanEquals",[uV]:[!0,{[$V]:"getAttr",[uV]:[{[ef]:wA1},"supportsDualStack"]}]},Ym0=[Fm0],_m0=[gm0],Dm0=[Jm0],q_5={version:"1.0",parameters:{Region:Bm0,UseDualStack:Am0,UseFIPS:Am0,Endpoint:Bm0},rules:[{conditions:[{[$V]:"aws.partition",[uV]:[{[ef]:"Region"}],assign:wA1}],type:BB,rules:[{conditions:[{[$V]:"isSet",[uV]:Ym0},{[$V]:"parseURL",[uV]:Ym0,assign:"url"}],type:BB,rules:[{conditions:_m0,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:Sy},{type:BB,rules:[{conditions:Dm0,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:Sy},{endpoint:{url:Fm0,properties:AB,headers:AB},type:Ly}]}]},{conditions:[gm0,Jm0],type:BB,rules:[{conditions:[Vm0,Xm0],type:BB,rules:[{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:AB,headers:AB},type:Ly}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:Sy}]},{conditions:_m0,type:BB,rules:[{conditions:[Vm0],type:BB,rules:[{type:BB,rules:[{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}",properties:AB,headers:AB},type:Ly}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:Sy}]},{conditions:Dm0,type:BB,rules:[{conditions:[Xm0],type:BB,rules:[{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:AB,headers:AB},type:Ly}]},{error:"DualStack is enabled but this partition does not support DualStack",type:Sy}]},{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dnsSuffix}",properties:AB,headers:AB},type:Ly}]}]};Km0.ruleSet=q_5});var qm0=Y((Qm0)=>{Object.defineProperty(Qm0,"__esModule",{value:!0});Qm0.defaultEndpointResolver=void 0;var R_5=xp(),U_5=zm0(),v_5=(I,d={})=>{return R_5.resolveEndpoint(U_5.ruleSet,{endpointParams:I,logger:d.logger})};Qm0.defaultEndpointResolver=v_5});var Mm0=Y((vm0)=>{Object.defineProperty(vm0,"__esModule",{value:!0});vm0.getRuntimeConfig=void 0;var E_5=v0(),M_5=FV(),Rm0=IJ(),Um0=hC(),S_5=qm0(),L_5=(I)=>({apiVersion:"2019-06-10",base64Decoder:I?.base64Decoder??Rm0.fromBase64,base64Encoder:I?.base64Encoder??Rm0.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??S_5.defaultEndpointResolver,logger:I?.logger??new E_5.NoOpLogger,serviceId:I?.serviceId??"SSO",urlParser:I?.urlParser??M_5.parseUrl,utf8Decoder:I?.utf8Decoder??Um0.fromUtf8,utf8Encoder:I?.utf8Encoder??Um0.toUtf8});vm0.getRuntimeConfig=L_5});var $m0=Y((ym0)=>{Object.defineProperty(ym0,"__esModule",{value:!0});ym0.getRuntimeConfig=void 0;var y_5=x1(),P_5=y_5.__importDefault(oO0()),tp=Cd(),$_5=og(),Sm0=dG(),yy=QZ(),Lm0=eg(),u_5=tg(),T_5=Wd(),O_5=WA1(),m_5=Mm0(),l_5=v0(),b_5=dJ(),h_5=v0(),j_5=(I)=>{h_5.emitWarningIfUnsupportedVersion(process.version);let d=b_5.resolveDefaultsModeConfig(I),G=()=>d().then(l_5.loadConfigsForDefaultMode),Z=m_5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??u_5.calculateBodyLength,defaultUserAgentProvider:I?.defaultUserAgentProvider??O_5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:P_5.default.version}),maxAttempts:I?.maxAttempts??yy.loadConfig(Sm0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??yy.loadConfig(tp.NODE_REGION_CONFIG_OPTIONS,tp.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new Lm0.NodeHttpHandler(G),retryMode:I?.retryMode??yy.loadConfig({...Sm0.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||T_5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??$_5.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??Lm0.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??yy.loadConfig(tp.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??yy.loadConfig(tp.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};ym0.getRuntimeConfig=j_5});var Py=Y((BA1)=>{Object.defineProperty(BA1,"__esModule",{value:!0});BA1.SSOClient=BA1.__Client=void 0;var k_5=Cd(),x_5=jg(),c_5=u2(),um0=pw1(),p_5=nw1(),i_5=rw1(),Tm0=dG(),Om0=QB1(),mm0=v0();Object.defineProperty(BA1,"__Client",{enumerable:!0,get:function(){return mm0.Client}});var n_5=sO0(),r_5=$m0();class lm0 extends mm0.Client{constructor(I){let d=r_5.getRuntimeConfig(I),G=n_5.resolveClientEndpointParameters(d),Z=k_5.resolveRegionConfig(G),C=c_5.resolveEndpointConfig(Z),W=Tm0.resolveRetryConfig(C),w=um0.resolveHostHeaderConfig(W),B=Om0.resolveUserAgentConfig(w);super(B);this.config=B,this.middlewareStack.use(Tm0.getRetryPlugin(this.config)),this.middlewareStack.use(x_5.getContentLengthPlugin(this.config)),this.middlewareStack.use(um0.getHostHeaderPlugin(this.config)),this.middlewareStack.use(p_5.getLoggerPlugin(this.config)),this.middlewareStack.use(i_5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(Om0.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}BA1.SSOClient=lm0});var Ii=Y((VA1)=>{Object.defineProperty(VA1,"__esModule",{value:!0});VA1.SSOServiceException=VA1.__ServiceException=void 0;var hm0=v0();Object.defineProperty(VA1,"__ServiceException",{enumerable:!0,get:function(){return hm0.ServiceException}});class AA1 extends hm0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,AA1.prototype)}}VA1.SSOServiceException=AA1});var HJ=Y((km0)=>{Object.defineProperty(km0,"__esModule",{value:!0});km0.LogoutRequestFilterSensitiveLog=km0.ListAccountsRequestFilterSensitiveLog=km0.ListAccountRolesRequestFilterSensitiveLog=km0.GetRoleCredentialsResponseFilterSensitiveLog=km0.RoleCredentialsFilterSensitiveLog=km0.GetRoleCredentialsRequestFilterSensitiveLog=km0.UnauthorizedException=km0.TooManyRequestsException=km0.ResourceNotFoundException=km0.InvalidRequestException=void 0;var tf=v0(),di=Ii();class XA1 extends di.SSOServiceException{constructor(I){super({name:"InvalidRequestException",$fault:"client",...I});this.name="InvalidRequestException",this.$fault="client",Object.setPrototypeOf(this,XA1.prototype)}}km0.InvalidRequestException=XA1;class YA1 extends di.SSOServiceException{constructor(I){super({name:"ResourceNotFoundException",$fault:"client",...I});this.name="ResourceNotFoundException",this.$fault="client",Object.setPrototypeOf(this,YA1.prototype)}}km0.ResourceNotFoundException=YA1;class _A1 extends di.SSOServiceException{constructor(I){super({name:"TooManyRequestsException",$fault:"client",...I});this.name="TooManyRequestsException",this.$fault="client",Object.setPrototypeOf(this,_A1.prototype)}}km0.TooManyRequestsException=_A1;class DA1 extends di.SSOServiceException{constructor(I){super({name:"UnauthorizedException",$fault:"client",...I});this.name="UnauthorizedException",this.$fault="client",Object.setPrototypeOf(this,DA1.prototype)}}km0.UnauthorizedException=DA1;var a_5=(I)=>({...I,...I.accessToken&&{accessToken:tf.SENSITIVE_STRING}});km0.GetRoleCredentialsRequestFilterSensitiveLog=a_5;var s_5=(I)=>({...I,...I.secretAccessKey&&{secretAccessKey:tf.SENSITIVE_STRING},...I.sessionToken&&{sessionToken:tf.SENSITIVE_STRING}});km0.RoleCredentialsFilterSensitiveLog=s_5;var o_5=(I)=>({...I,...I.roleCredentials&&{roleCredentials:km0.RoleCredentialsFilterSensitiveLog(I.roleCredentials)}});km0.GetRoleCredentialsResponseFilterSensitiveLog=o_5;var e_5=(I)=>({...I,...I.accessToken&&{accessToken:tf.SENSITIVE_STRING}});km0.ListAccountRolesRequestFilterSensitiveLog=e_5;var t_5=(I)=>({...I,...I.accessToken&&{accessToken:tf.SENSITIVE_STRING}});km0.ListAccountsRequestFilterSensitiveLog=t_5;var ID5=(I)=>({...I,...I.accessToken&&{accessToken:tf.SENSITIVE_STRING}});km0.LogoutRequestFilterSensitiveLog=ID5});var $y=Y((im0)=>{Object.defineProperty(im0,"__esModule",{value:!0});im0.de_LogoutCommand=im0.de_ListAccountsCommand=im0.de_ListAccountRolesCommand=im0.de_GetRoleCredentialsCommand=im0.se_LogoutCommand=im0.se_ListAccountsCommand=im0.se_ListAccountRolesCommand=im0.se_GetRoleCredentialsCommand=void 0;var z4=v0(),Gi=bB1(),Zi=HJ(),VD5=Ii(),XD5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=z4.map({},Ai,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/federation/credentials`,A=z4.map({role_name:[,z4.expectNonNull(I.roleName,"roleName")],account_id:[,z4.expectNonNull(I.accountId,"accountId")]}),V;return new Gi.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};im0.se_GetRoleCredentialsCommand=XD5;var YD5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=z4.map({},Ai,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/assignment/roles`,A=z4.map({next_token:[,I.nextToken],max_result:[()=>I.maxResults!==void 0,()=>I.maxResults.toString()],account_id:[,z4.expectNonNull(I.accountId,"accountId")]}),V;return new Gi.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};im0.se_ListAccountRolesCommand=YD5;var _D5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=z4.map({},Ai,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/assignment/accounts`,A=z4.map({next_token:[,I.nextToken],max_result:[()=>I.maxResults!==void 0,()=>I.maxResults.toString()]}),V;return new Gi.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};im0.se_ListAccountsCommand=_D5;var DD5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=z4.map({},Ai,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/logout`,A;return new Gi.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};im0.se_LogoutCommand=DD5;var HD5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return FD5(I,d);let G=z4.map({$metadata:FD(I)}),Z=z4.expectNonNull(z4.expectObject(await Vi(I.body,d)),"body"),C=z4.take(Z,{roleCredentials:z4._json});return Object.assign(G,C),G};im0.de_GetRoleCredentialsCommand=HD5;var FD5=async(I,d)=>{let G={...I,body:await Xi(I.body,d)},Z=Yi(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Wi(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await HA1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await wi(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Bi(G,d);default:let C=G.body;return Ci({output:I,parsedBody:C,errorCode:Z})}},gD5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return JD5(I,d);let G=z4.map({$metadata:FD(I)}),Z=z4.expectNonNull(z4.expectObject(await Vi(I.body,d)),"body"),C=z4.take(Z,{nextToken:z4.expectString,roleList:z4._json});return Object.assign(G,C),G};im0.de_ListAccountRolesCommand=gD5;var JD5=async(I,d)=>{let G={...I,body:await Xi(I.body,d)},Z=Yi(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Wi(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await HA1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await wi(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Bi(G,d);default:let C=G.body;return Ci({output:I,parsedBody:C,errorCode:Z})}},KD5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return ND5(I,d);let G=z4.map({$metadata:FD(I)}),Z=z4.expectNonNull(z4.expectObject(await Vi(I.body,d)),"body"),C=z4.take(Z,{accountList:z4._json,nextToken:z4.expectString});return Object.assign(G,C),G};im0.de_ListAccountsCommand=KD5;var ND5=async(I,d)=>{let G={...I,body:await Xi(I.body,d)},Z=Yi(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Wi(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await HA1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await wi(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Bi(G,d);default:let C=G.body;return Ci({output:I,parsedBody:C,errorCode:Z})}},zD5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return QD5(I,d);let G=z4.map({$metadata:FD(I)});return await pm0(I.body,d),G};im0.de_LogoutCommand=zD5;var QD5=async(I,d)=>{let G={...I,body:await Xi(I.body,d)},Z=Yi(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await Wi(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await wi(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Bi(G,d);default:let C=G.body;return Ci({output:I,parsedBody:C,errorCode:Z})}},Ci=z4.withBaseException(VD5.SSOServiceException),Wi=async(I,d)=>{let G=z4.map({}),Z=I.body,C=z4.take(Z,{message:z4.expectString});Object.assign(G,C);let W=new Zi.InvalidRequestException({$metadata:FD(I),...G});return z4.decorateServiceException(W,I.body)},HA1=async(I,d)=>{let G=z4.map({}),Z=I.body,C=z4.take(Z,{message:z4.expectString});Object.assign(G,C);let W=new Zi.ResourceNotFoundException({$metadata:FD(I),...G});return z4.decorateServiceException(W,I.body)},wi=async(I,d)=>{let G=z4.map({}),Z=I.body,C=z4.take(Z,{message:z4.expectString});Object.assign(G,C);let W=new Zi.TooManyRequestsException({$metadata:FD(I),...G});return z4.decorateServiceException(W,I.body)},Bi=async(I,d)=>{let G=z4.map({}),Z=I.body,C=z4.take(Z,{message:z4.expectString});Object.assign(G,C);let W=new Zi.UnauthorizedException({$metadata:FD(I),...G});return z4.decorateServiceException(W,I.body)},FD=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),pm0=(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return Promise.resolve(I);return d.streamCollector(I)||Promise.resolve(new Uint8Array)},fD5=(I,d)=>pm0(I,d).then((G)=>d.utf8Encoder(G)),Ai=(I)=>I!==void 0&&I!==null&&I!==""&&(!Object.getOwnPropertyNames(I).includes("length")||I.length!=0)&&(!Object.getOwnPropertyNames(I).includes("size")||I.size!=0),Vi=(I,d)=>fD5(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),Xi=async(I,d)=>{let G=await Vi(I,d);return G.message=G.message??G.Message,G},Yi=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)}});var JA1=Y((gA1)=>{Object.defineProperty(gA1,"__esModule",{value:!0});gA1.GetRoleCredentialsCommand=gA1.$Command=void 0;var LD5=u2(),yD5=r2(),sm0=v0();Object.defineProperty(gA1,"$Command",{enumerable:!0,get:function(){return sm0.Command}});var rm0=HJ(),am0=$y();class FA1 extends sm0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(yD5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(LD5.getEndpointPlugin(d,FA1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"GetRoleCredentialsCommand",inputFilterSensitiveLog:rm0.GetRoleCredentialsRequestFilterSensitiveLog,outputFilterSensitiveLog:rm0.GetRoleCredentialsResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return am0.se_GetRoleCredentialsCommand(I,d)}deserialize(I,d){return am0.de_GetRoleCredentialsCommand(I,d)}}gA1.GetRoleCredentialsCommand=FA1});var _i=Y((NA1)=>{Object.defineProperty(NA1,"__esModule",{value:!0});NA1.ListAccountRolesCommand=NA1.$Command=void 0;var PD5=u2(),$D5=r2(),tm0=v0();Object.defineProperty(NA1,"$Command",{enumerable:!0,get:function(){return tm0.Command}});var uD5=HJ(),em0=$y();class KA1 extends tm0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use($D5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(PD5.getEndpointPlugin(d,KA1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"ListAccountRolesCommand",inputFilterSensitiveLog:uD5.ListAccountRolesRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return em0.se_ListAccountRolesCommand(I,d)}deserialize(I,d){return em0.de_ListAccountRolesCommand(I,d)}}NA1.ListAccountRolesCommand=KA1});var Di=Y((QA1)=>{Object.defineProperty(QA1,"__esModule",{value:!0});QA1.ListAccountsCommand=QA1.$Command=void 0;var TD5=u2(),OD5=r2(),Gl0=v0();Object.defineProperty(QA1,"$Command",{enumerable:!0,get:function(){return Gl0.Command}});var mD5=HJ(),dl0=$y();class zA1 extends Gl0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(OD5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(TD5.getEndpointPlugin(d,zA1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"ListAccountsCommand",inputFilterSensitiveLog:mD5.ListAccountsRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return dl0.se_ListAccountsCommand(I,d)}deserialize(I,d){return dl0.de_ListAccountsCommand(I,d)}}QA1.ListAccountsCommand=zA1});var RA1=Y((qA1)=>{Object.defineProperty(qA1,"__esModule",{value:!0});qA1.LogoutCommand=qA1.$Command=void 0;var lD5=u2(),bD5=r2(),Wl0=v0();Object.defineProperty(qA1,"$Command",{enumerable:!0,get:function(){return Wl0.Command}});var hD5=HJ(),Cl0=$y();class fA1 extends Wl0.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(bD5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(lD5.getEndpointPlugin(d,fA1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"LogoutCommand",inputFilterSensitiveLog:hD5.LogoutRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Cl0.se_LogoutCommand(I,d)}deserialize(I,d){return Cl0.de_LogoutCommand(I,d)}}qA1.LogoutCommand=fA1});var Vl0=Y((Bl0)=>{Object.defineProperty(Bl0,"__esModule",{value:!0});Bl0.SSO=void 0;var jD5=v0(),kD5=JA1(),xD5=_i(),cD5=Di(),pD5=RA1(),iD5=Py(),nD5={GetRoleCredentialsCommand:kD5.GetRoleCredentialsCommand,ListAccountRolesCommand:xD5.ListAccountRolesCommand,ListAccountsCommand:cD5.ListAccountsCommand,LogoutCommand:pD5.LogoutCommand};class UA1 extends iD5.SSOClient{}Bl0.SSO=UA1;jD5.createAggregatedClient(nD5,UA1)});var Xl0=Y((Iq)=>{Object.defineProperty(Iq,"__esModule",{value:!0});var Hi=x1();Hi.__exportStar(JA1(),Iq);Hi.__exportStar(_i(),Iq);Hi.__exportStar(Di(),Iq);Hi.__exportStar(RA1(),Iq)});var _l0=Y((Yl0)=>{Object.defineProperty(Yl0,"__esModule",{value:!0})});var Fl0=Y((Dl0)=>{Object.defineProperty(Dl0,"__esModule",{value:!0});Dl0.paginateListAccountRoles=void 0;var rD5=_i(),aD5=Py(),sD5=async(I,d,...G)=>{return await I.send(new rD5.ListAccountRolesCommand(d),...G)};async function*oD5(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.nextToken=Z,d.maxResults=I.pageSize,I.client instanceof aD5.SSOClient)W=await sD5(I.client,d,...G);else throw new Error("Invalid client, expected SSO | SSOClient");yield W;let w=Z;Z=W.nextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}Dl0.paginateListAccountRoles=oD5});var Kl0=Y((gl0)=>{Object.defineProperty(gl0,"__esModule",{value:!0});gl0.paginateListAccounts=void 0;var eD5=Di(),tD5=Py(),IH5=async(I,d,...G)=>{return await I.send(new eD5.ListAccountsCommand(d),...G)};async function*dH5(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.nextToken=Z,d.maxResults=I.pageSize,I.client instanceof tD5.SSOClient)W=await IH5(I.client,d,...G);else throw new Error("Invalid client, expected SSO | SSOClient");yield W;let w=Z;Z=W.nextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}gl0.paginateListAccounts=dH5});var Nl0=Y((uy)=>{Object.defineProperty(uy,"__esModule",{value:!0});var vA1=x1();vA1.__exportStar(_l0(),uy);vA1.__exportStar(Fl0(),uy);vA1.__exportStar(Kl0(),uy)});var zl0=Y((EA1)=>{Object.defineProperty(EA1,"__esModule",{value:!0});var GH5=x1();GH5.__exportStar(HJ(),EA1)});var MA1=Y((gD)=>{Object.defineProperty(gD,"__esModule",{value:!0});gD.SSOServiceException=void 0;var Ty=x1();Ty.__exportStar(Py(),gD);Ty.__exportStar(Vl0(),gD);Ty.__exportStar(Xl0(),gD);Ty.__exportStar(Nl0(),gD);Ty.__exportStar(zl0(),gD);var ZH5=Ii();Object.defineProperty(gD,"SSOServiceException",{enumerable:!0,get:function(){return ZH5.SSOServiceException}})});var Fi=Y((Ql0)=>{Object.defineProperty(Ql0,"__esModule",{value:!0});Ql0.REFRESH_MESSAGE=Ql0.EXPIRE_WINDOW_MS=void 0;Ql0.EXPIRE_WINDOW_MS=300000;Ql0.REFRESH_MESSAGE="To refresh this SSO session run 'aws sso login' with the corresponding profile."});var Ul0=Y((ql0)=>{Object.defineProperty(ql0,"__esModule",{value:!0});ql0.getSsoOidcClient=void 0;var wH5=Gy(),SA1={},BH5=(I)=>{if(SA1[I])return SA1[I];let d=new wH5.SSOOIDCClient({region:I});return SA1[I]=d,d};ql0.getSsoOidcClient=BH5});var Ml0=Y((vl0)=>{Object.defineProperty(vl0,"__esModule",{value:!0});vl0.getNewSsoOidcToken=void 0;var AH5=Gy(),VH5=Ul0(),XH5=(I,d)=>{return VH5.getSsoOidcClient(d).send(new AH5.CreateTokenCommand({clientId:I.clientId,clientSecret:I.clientSecret,refreshToken:I.refreshToken,grantType:"refresh_token"}))};vl0.getNewSsoOidcToken=XH5});var yl0=Y((Sl0)=>{Object.defineProperty(Sl0,"__esModule",{value:!0});Sl0.validateTokenExpiry=void 0;var YH5=W4(),_H5=Fi(),DH5=(I)=>{if(I.expiration&&I.expiration.getTime(){Object.defineProperty(Pl0,"__esModule",{value:!0});Pl0.validateTokenKey=void 0;var HH5=W4(),FH5=Fi(),gH5=(I,d,G=!1)=>{if(typeof d==="undefined")throw new HH5.TokenProviderError(`Value not present for '${I}' in SSO Token${G?". Cannot refresh":""}. ${FH5.REFRESH_MESSAGE}`,!1)};Pl0.validateTokenKey=gH5});var ml0=Y((Tl0)=>{Object.defineProperty(Tl0,"__esModule",{value:!0});Tl0.writeSSOTokenToFile=void 0;var JH5=K8(),KH5=B1("fs"),{writeFile:NH5}=KH5.promises,zH5=(I,d)=>{let G=JH5.getSSOTokenFilepath(I),Z=JSON.stringify(d,null,2);return NH5(G,Z)};Tl0.writeSSOTokenToFile=zH5});var LA1=Y((jl0)=>{Object.defineProperty(jl0,"__esModule",{value:!0});jl0.fromSso=void 0;var Oy=W4(),gi=K8(),ll0=Fi(),QH5=Ml0(),bl0=yl0(),FJ=ul0(),fH5=ml0(),hl0=new Date(0),qH5=(I={})=>async()=>{let d=await gi.parseKnownFiles(I),G=gi.getProfileName(I),Z=d[G];if(!Z)throw new Oy.TokenProviderError(`Profile '${G}' could not be found in shared credentials file.`,!1);else if(!Z.sso_session)throw new Oy.TokenProviderError(`Profile '${G}' is missing required property 'sso_session'.`);let C=Z.sso_session,w=(await gi.loadSsoSessionData(I))[C];if(!w)throw new Oy.TokenProviderError(`Sso session '${C}' could not be found in shared credentials file.`,!1);for(let g of["sso_start_url","sso_region"])if(!w[g])throw new Oy.TokenProviderError(`Sso session '${C}' is missing required property '${g}'.`,!1);let{sso_start_url:B,sso_region:A}=w,V;try{V=await gi.getSSOTokenFromFile(C)}catch(g){throw new Oy.TokenProviderError(`The SSO session token associated with profile=${G} was not found or is invalid. ${ll0.REFRESH_MESSAGE}`,!1)}FJ.validateTokenKey("accessToken",V.accessToken),FJ.validateTokenKey("expiresAt",V.expiresAt);let{accessToken:X,expiresAt:_}=V,F={token:X,expiration:new Date(_)};if(F.expiration.getTime()-Date.now()>ll0.EXPIRE_WINDOW_MS)return F;if(Date.now()-hl0.getTime()<30000)return bl0.validateTokenExpiry(F),F;FJ.validateTokenKey("clientId",V.clientId,!0),FJ.validateTokenKey("clientSecret",V.clientSecret,!0),FJ.validateTokenKey("refreshToken",V.refreshToken,!0);try{hl0.setTime(Date.now());let g=await QH5.getNewSsoOidcToken(V,A);FJ.validateTokenKey("accessToken",g.accessToken),FJ.validateTokenKey("expiresIn",g.expiresIn);let J=new Date(Date.now()+g.expiresIn*1000);try{await fH5.writeSSOTokenToFile(C,{...V,accessToken:g.accessToken,expiresAt:J.toISOString(),refreshToken:g.refreshToken})}catch(K){}return{token:g.accessToken,expiration:J}}catch(g){return bl0.validateTokenExpiry(F),F}};jl0.fromSso=qH5});var pl0=Y((xl0)=>{Object.defineProperty(xl0,"__esModule",{value:!0});xl0.fromStatic=void 0;var RH5=W4(),UH5=({token:I})=>async()=>{if(!I||!I.token)throw new RH5.TokenProviderError("Please pass a valid token to fromStatic",!1);return I};xl0.fromStatic=UH5});var rl0=Y((il0)=>{Object.defineProperty(il0,"__esModule",{value:!0});il0.nodeProvider=void 0;var yA1=W4(),vH5=LA1(),EH5=(I={})=>yA1.memoize(yA1.chain(vH5.fromSso(I),async()=>{throw new yA1.TokenProviderError("Could not load token from any providers",!1)}),(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()<300000,(d)=>d.expiration!==void 0);il0.nodeProvider=EH5});var al0=Y((my)=>{Object.defineProperty(my,"__esModule",{value:!0});var PA1=x1();PA1.__exportStar(LA1(),my);PA1.__exportStar(pl0(),my);PA1.__exportStar(rl0(),my)});var tl0=Y((ol0)=>{Object.defineProperty(ol0,"__esModule",{value:!0});ol0.resolveSSOCredentials=void 0;var sl0=MA1(),ly=W4(),MH5=K8(),SH5=al0(),LH5=900000,by=!1,yH5=async({ssoStartUrl:I,ssoSession:d,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,profile:w})=>{let B,A="To refresh this SSO session run aws sso login with the corresponding profile.";if(d)try{let Q=await SH5.fromSso({profile:w})();B={accessToken:Q.token,expiresAt:new Date(Q.expiration).toISOString()}}catch(Q){throw new ly.CredentialsProviderError(Q.message,by)}else try{B=await MH5.getSSOTokenFromFile(I)}catch(Q){throw new ly.CredentialsProviderError("The SSO session associated with this profile is invalid. To refresh this SSO session run aws sso login with the corresponding profile.",by)}if(new Date(B.expiresAt).getTime()-Date.now()<=LH5)throw new ly.CredentialsProviderError("The SSO session associated with this profile has expired. To refresh this SSO session run aws sso login with the corresponding profile.",by);let{accessToken:V}=B,X=W||new sl0.SSOClient({region:Z}),_;try{_=await X.send(new sl0.GetRoleCredentialsCommand({accountId:G,roleName:C,accessToken:V}))}catch(Q){throw ly.CredentialsProviderError.from(Q,by)}let{roleCredentials:{accessKeyId:F,secretAccessKey:g,sessionToken:J,expiration:K}={}}=_;if(!F||!g||!J||!K)throw new ly.CredentialsProviderError("SSO returns an invalid temporary credential.",by);return{accessKeyId:F,secretAccessKey:g,sessionToken:J,expiration:new Date(K)}};ol0.resolveSSOCredentials=yH5});var $A1=Y((Ib0)=>{Object.defineProperty(Ib0,"__esModule",{value:!0});Ib0.validateSsoProfile=void 0;var PH5=W4(),$H5=(I)=>{let{sso_start_url:d,sso_account_id:G,sso_region:Z,sso_role_name:C}=I;if(!d||!G||!Z||!C)throw new PH5.CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", "sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(I).join(", ")} +Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`,!1);return I};Ib0.validateSsoProfile=$H5});var Wb0=Y((Zb0)=>{Object.defineProperty(Zb0,"__esModule",{value:!0});Zb0.fromSSO=void 0;var hy=W4(),uA1=K8(),uH5=ZA1(),Gb0=tl0(),TH5=$A1(),OH5=(I={})=>async()=>{let{ssoStartUrl:d,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,ssoSession:w}=I,B=uA1.getProfileName(I);if(!d&&!G&&!Z&&!C&&!w){let V=(await uA1.parseKnownFiles(I))[B];if(!V)throw new hy.CredentialsProviderError(`Profile ${B} was not found.`);if(!uH5.isSsoProfile(V))throw new hy.CredentialsProviderError(`Profile ${B} is not configured with SSO credentials.`);if(V===null||V===void 0?void 0:V.sso_session){let Q=(await uA1.loadSsoSessionData(I))[V.sso_session],E=` configurations in profile ${B} and sso-session ${V.sso_session}`;if(Z&&Z!==Q.sso_region)throw new hy.CredentialsProviderError("Conflicting SSO region"+E,!1);if(d&&d!==Q.sso_start_url)throw new hy.CredentialsProviderError("Conflicting SSO start_url"+E,!1);V.sso_region=Q.sso_region,V.sso_start_url=Q.sso_start_url}let{sso_start_url:X,sso_account_id:_,sso_region:F,sso_role_name:g,sso_session:J}=TH5.validateSsoProfile(V);return Gb0.resolveSSOCredentials({ssoStartUrl:X,ssoSession:J,ssoAccountId:_,ssoRegion:F,ssoRoleName:g,ssoClient:W,profile:B})}else if(!d||!G||!Z||!C)throw new hy.CredentialsProviderError('Incomplete configuration. The fromSSO() argument hash must include "ssoStartUrl", "ssoAccountId", "ssoRegion", "ssoRoleName"');else return Gb0.resolveSSOCredentials({ssoStartUrl:d,ssoSession:w,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,profile:B})};Zb0.fromSSO=OH5});var Bb0=Y((wb0)=>{Object.defineProperty(wb0,"__esModule",{value:!0})});var jy=Y((dq)=>{Object.defineProperty(dq,"__esModule",{value:!0});var Ji=x1();Ji.__exportStar(Wb0(),dq);Ji.__exportStar(ZA1(),dq);Ji.__exportStar(Bb0(),dq);Ji.__exportStar($A1(),dq)});var Xb0=Y((TA1)=>{Object.defineProperty(TA1,"__esModule",{value:!0});TA1.resolveSsoCredentials=TA1.isSsoProfile=void 0;var Ab0=jy(),mH5=jy();Object.defineProperty(TA1,"isSsoProfile",{enumerable:!0,get:function(){return mH5.isSsoProfile}});var lH5=(I)=>{let{sso_start_url:d,sso_account_id:G,sso_session:Z,sso_region:C,sso_role_name:W}=Ab0.validateSsoProfile(I);return Ab0.fromSSO({ssoStartUrl:d,ssoAccountId:G,ssoSession:Z,ssoRegion:C,ssoRoleName:W})()};TA1.resolveSsoCredentials=lH5});var Db0=Y((Yb0)=>{Object.defineProperty(Yb0,"__esModule",{value:!0});Yb0.resolveStaticCredentials=Yb0.isStaticCredsProfile=void 0;var bH5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.aws_access_key_id==="string"&&typeof I.aws_secret_access_key==="string"&&["undefined","string"].indexOf(typeof I.aws_session_token)>-1;Yb0.isStaticCredsProfile=bH5;var hH5=(I)=>Promise.resolve({accessKeyId:I.aws_access_key_id,secretAccessKey:I.aws_secret_access_key,sessionToken:I.aws_session_token});Yb0.resolveStaticCredentials=hH5});var OA1=Y((Hb0)=>{Object.defineProperty(Hb0,"__esModule",{value:!0});Hb0.fromWebToken=void 0;var kH5=W4(),xH5=(I)=>()=>{let{roleArn:d,roleSessionName:G,webIdentityToken:Z,providerId:C,policyArns:W,policy:w,durationSeconds:B,roleAssumerWithWebIdentity:A}=I;if(!A)throw new kH5.CredentialsProviderError(`Role Arn '${d}' needs to be assumed with web identity, but no role assumption callback was provided.`,!1);return A({RoleArn:d,RoleSessionName:G!==null&&G!==void 0?G:`aws-sdk-js-session-${Date.now()}`,WebIdentityToken:Z,ProviderId:C,PolicyArns:W,Policy:w,DurationSeconds:B})};Hb0.fromWebToken=xH5});var Kb0=Y((gb0)=>{Object.defineProperty(gb0,"__esModule",{value:!0});gb0.fromTokenFile=void 0;var cH5=W4(),pH5=B1("fs"),iH5=OA1(),nH5="AWS_WEB_IDENTITY_TOKEN_FILE",rH5="AWS_ROLE_ARN",aH5="AWS_ROLE_SESSION_NAME",sH5=(I={})=>async()=>{return oH5(I)};gb0.fromTokenFile=sH5;var oH5=(I)=>{var d,G,Z;let C=(d=I===null||I===void 0?void 0:I.webIdentityTokenFile)!==null&&d!==void 0?d:process.env[nH5],W=(G=I===null||I===void 0?void 0:I.roleArn)!==null&&G!==void 0?G:process.env[rH5],w=(Z=I===null||I===void 0?void 0:I.roleSessionName)!==null&&Z!==void 0?Z:process.env[aH5];if(!C||!W)throw new cH5.CredentialsProviderError("Web identity configuration not specified");return iH5.fromWebToken({...I,webIdentityToken:pH5.readFileSync(C,{encoding:"ascii"}),roleArn:W,roleSessionName:w})()}});var ky=Y((Ki)=>{Object.defineProperty(Ki,"__esModule",{value:!0});var Nb0=x1();Nb0.__exportStar(Kb0(),Ki);Nb0.__exportStar(OA1(),Ki)});var fb0=Y((zb0)=>{Object.defineProperty(zb0,"__esModule",{value:!0});zb0.resolveWebIdentityCredentials=zb0.isWebIdentityProfile=void 0;var eH5=ky(),tH5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.web_identity_token_file==="string"&&typeof I.role_arn==="string"&&["undefined","string"].indexOf(typeof I.role_session_name)>-1;zb0.isWebIdentityProfile=tH5;var IF5=async(I,d)=>eH5.fromTokenFile({webIdentityTokenFile:I.web_identity_token_file,roleArn:I.role_arn,roleSessionName:I.role_session_name,roleAssumerWithWebIdentity:d.roleAssumerWithWebIdentity})();zb0.resolveWebIdentityCredentials=IF5});var IA1=Y((Eb0)=>{Object.defineProperty(Eb0,"__esModule",{value:!0});Eb0.resolveProfileData=void 0;var GF5=W4(),qb0=PO0(),Rb0=pO0(),Ub0=Xb0(),Ni=Db0(),vb0=fb0(),ZF5=async(I,d,G,Z={})=>{let C=d[I];if(Object.keys(Z).length>0&&Ni.isStaticCredsProfile(C))return Ni.resolveStaticCredentials(C);if(qb0.isAssumeRoleProfile(C))return qb0.resolveAssumeRoleCredentials(I,d,G,Z);if(Ni.isStaticCredsProfile(C))return Ni.resolveStaticCredentials(C);if(vb0.isWebIdentityProfile(C))return vb0.resolveWebIdentityCredentials(C,G);if(Rb0.isProcessProfile(C))return Rb0.resolveProcessCredentials(G,I);if(Ub0.isSsoProfile(C))return Ub0.resolveSsoCredentials(C);throw new GF5.CredentialsProviderError(`Profile ${I} could not be found or parsed in shared credentials file.`)};Eb0.resolveProfileData=ZF5});var Pb0=Y((Lb0)=>{Object.defineProperty(Lb0,"__esModule",{value:!0});Lb0.fromIni=void 0;var Sb0=K8(),CF5=IA1(),WF5=(I={})=>async()=>{let d=await Sb0.parseKnownFiles(I);return CF5.resolveProfileData(Sb0.getProfileName(I),d,I)};Lb0.fromIni=WF5});var lA1=Y((mA1)=>{Object.defineProperty(mA1,"__esModule",{value:!0});var wF5=x1();wF5.__exportStar(Pb0(),mA1)});var Ob0=Y(($b0)=>{Object.defineProperty($b0,"__esModule",{value:!0});$b0.remoteProvider=$b0.ENV_IMDS_DISABLED=void 0;var zi=i_(),BF5=W4();$b0.ENV_IMDS_DISABLED="AWS_EC2_METADATA_DISABLED";var AF5=(I)=>{if(process.env[zi.ENV_CMDS_RELATIVE_URI]||process.env[zi.ENV_CMDS_FULL_URI])return zi.fromContainerMetadata(I);if(process.env[$b0.ENV_IMDS_DISABLED])return async()=>{throw new BF5.CredentialsProviderError("EC2 Instance Metadata Service access disabled")};return zi.fromInstanceMetadata(I)};$b0.remoteProvider=AF5});var bb0=Y((mb0)=>{Object.defineProperty(mb0,"__esModule",{value:!0});mb0.defaultProvider=void 0;var VF5=lp(),XF5=lA1(),YF5=ep(),_F5=jy(),DF5=ky(),bA1=W4(),HF5=K8(),FF5=Ob0(),gF5=(I={})=>bA1.memoize(bA1.chain(...I.profile||process.env[HF5.ENV_PROFILE]?[]:[VF5.fromEnv()],_F5.fromSSO(I),XF5.fromIni(I),YF5.fromProcess(I),DF5.fromTokenFile(I),FF5.remoteProvider(I),async()=>{throw new bA1.CredentialsProviderError("Could not load credentials from any providers",!1)}),(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()<300000,(d)=>d.expiration!==void 0);mb0.defaultProvider=gF5});var jA1=Y((hA1)=>{Object.defineProperty(hA1,"__esModule",{value:!0});var JF5=x1();JF5.__exportStar(bb0(),hA1)});var Vh0=Y((Bh0)=>{Object.defineProperty(Bh0,"__esModule",{value:!0});Bh0.ruleSet=void 0;var ob0="required",D4="type",O5="fn",m5="argv",JD="ref",hb0=!1,KF5=!0,gJ="booleanEquals",T7="tree",o8="stringEquals",eb0="sigv4",tb0="sts",Ih0="us-east-1",w3="endpoint",jb0="https://sts.{Region}.{PartitionResult#dnsSuffix}",Gq="error",xA1="getAttr",kb0={[ob0]:!1,[D4]:"String"},kA1={[ob0]:!0,default:!1,[D4]:"Boolean"},dh0={[JD]:"Endpoint"},xb0={[O5]:"isSet",[m5]:[{[JD]:"Region"}]},e8={[JD]:"Region"},cb0={[O5]:"aws.partition",[m5]:[e8],assign:"PartitionResult"},Gh0={[JD]:"UseFIPS"},Zh0={[JD]:"UseDualStack"},O7={url:"https://sts.amazonaws.com",properties:{authSchemes:[{name:eb0,signingName:tb0,signingRegion:Ih0}]},headers:{}},ZG={},pb0={conditions:[{[O5]:o8,[m5]:[e8,"aws-global"]}],[w3]:O7,[D4]:w3},Ch0={[O5]:gJ,[m5]:[Gh0,!0]},Wh0={[O5]:gJ,[m5]:[Zh0,!0]},ib0={[O5]:gJ,[m5]:[!0,{[O5]:xA1,[m5]:[{[JD]:"PartitionResult"},"supportsFIPS"]}]},wh0={[JD]:"PartitionResult"},nb0={[O5]:gJ,[m5]:[!0,{[O5]:xA1,[m5]:[wh0,"supportsDualStack"]}]},rb0=[{[O5]:"isSet",[m5]:[dh0]}],ab0=[Ch0],sb0=[Wh0],NF5={version:"1.0",parameters:{Region:kb0,UseDualStack:kA1,UseFIPS:kA1,Endpoint:kb0,UseGlobalEndpoint:kA1},rules:[{conditions:[{[O5]:gJ,[m5]:[{[JD]:"UseGlobalEndpoint"},KF5]},{[O5]:"not",[m5]:rb0},xb0,cb0,{[O5]:gJ,[m5]:[Gh0,hb0]},{[O5]:gJ,[m5]:[Zh0,hb0]}],[D4]:T7,rules:[{conditions:[{[O5]:o8,[m5]:[e8,"ap-northeast-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"ap-south-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"ap-southeast-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"ap-southeast-2"]}],endpoint:O7,[D4]:w3},pb0,{conditions:[{[O5]:o8,[m5]:[e8,"ca-central-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"eu-central-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"eu-north-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"eu-west-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"eu-west-2"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"eu-west-3"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"sa-east-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,Ih0]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"us-east-2"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"us-west-1"]}],endpoint:O7,[D4]:w3},{conditions:[{[O5]:o8,[m5]:[e8,"us-west-2"]}],endpoint:O7,[D4]:w3},{endpoint:{url:jb0,properties:{authSchemes:[{name:eb0,signingName:tb0,signingRegion:"{Region}"}]},headers:ZG},[D4]:w3}]},{conditions:rb0,[D4]:T7,rules:[{conditions:ab0,error:"Invalid Configuration: FIPS and custom endpoint are not supported",[D4]:Gq},{[D4]:T7,rules:[{conditions:sb0,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",[D4]:Gq},{endpoint:{url:dh0,properties:ZG,headers:ZG},[D4]:w3}]}]},{[D4]:T7,rules:[{conditions:[xb0],[D4]:T7,rules:[{conditions:[cb0],[D4]:T7,rules:[{conditions:[Ch0,Wh0],[D4]:T7,rules:[{conditions:[ib0,nb0],[D4]:T7,rules:[{[D4]:T7,rules:[{endpoint:{url:"https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:ZG,headers:ZG},[D4]:w3}]}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",[D4]:Gq}]},{conditions:ab0,[D4]:T7,rules:[{conditions:[ib0],[D4]:T7,rules:[{[D4]:T7,rules:[{conditions:[{[O5]:o8,[m5]:["aws-us-gov",{[O5]:xA1,[m5]:[wh0,"name"]}]}],endpoint:{url:"https://sts.{Region}.amazonaws.com",properties:ZG,headers:ZG},[D4]:w3},{endpoint:{url:"https://sts-fips.{Region}.{PartitionResult#dnsSuffix}",properties:ZG,headers:ZG},[D4]:w3}]}]},{error:"FIPS is enabled but this partition does not support FIPS",[D4]:Gq}]},{conditions:sb0,[D4]:T7,rules:[{conditions:[nb0],[D4]:T7,rules:[{[D4]:T7,rules:[{endpoint:{url:"https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:ZG,headers:ZG},[D4]:w3}]}]},{error:"DualStack is enabled but this partition does not support DualStack",[D4]:Gq}]},{[D4]:T7,rules:[pb0,{endpoint:{url:jb0,properties:ZG,headers:ZG},[D4]:w3}]}]}]},{error:"Invalid Configuration: Missing Region",[D4]:Gq}]}]};Bh0.ruleSet=NF5});var _h0=Y((Xh0)=>{Object.defineProperty(Xh0,"__esModule",{value:!0});Xh0.defaultEndpointResolver=void 0;var zF5=xp(),QF5=Vh0(),fF5=(I,d={})=>{return zF5.resolveEndpoint(QF5.ruleSet,{endpointParams:I,logger:d.logger})};Xh0.defaultEndpointResolver=fF5});var Jh0=Y((Fh0)=>{Object.defineProperty(Fh0,"__esModule",{value:!0});Fh0.getRuntimeConfig=void 0;var qF5=v0(),RF5=FV(),Dh0=IJ(),Hh0=hC(),UF5=_h0(),vF5=(I)=>({apiVersion:"2011-06-15",base64Decoder:I?.base64Decoder??Dh0.fromBase64,base64Encoder:I?.base64Encoder??Dh0.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??UF5.defaultEndpointResolver,logger:I?.logger??new qF5.NoOpLogger,serviceId:I?.serviceId??"STS",urlParser:I?.urlParser??RF5.parseUrl,utf8Decoder:I?.utf8Decoder??Hh0.fromUtf8,utf8Encoder:I?.utf8Encoder??Hh0.toUtf8});Fh0.getRuntimeConfig=vF5});var fh0=Y((zh0)=>{Object.defineProperty(zh0,"__esModule",{value:!0});zh0.getRuntimeConfig=void 0;var EF5=x1(),MF5=EF5.__importDefault(M$0()),SF5=eB1(),Qi=Cd(),LF5=jA1(),yF5=og(),Kh0=dG(),xy=QZ(),Nh0=eg(),PF5=tg(),$F5=Wd(),uF5=WA1(),TF5=Jh0(),OF5=v0(),mF5=dJ(),lF5=v0(),bF5=(I)=>{lF5.emitWarningIfUnsupportedVersion(process.version);let d=mF5.resolveDefaultsModeConfig(I),G=()=>d().then(OF5.loadConfigsForDefaultMode),Z=TF5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??PF5.calculateBodyLength,credentialDefaultProvider:I?.credentialDefaultProvider??SF5.decorateDefaultCredentialProvider(LF5.defaultProvider),defaultUserAgentProvider:I?.defaultUserAgentProvider??uF5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:MF5.default.version}),maxAttempts:I?.maxAttempts??xy.loadConfig(Kh0.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??xy.loadConfig(Qi.NODE_REGION_CONFIG_OPTIONS,Qi.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new Nh0.NodeHttpHandler(G),retryMode:I?.retryMode??xy.loadConfig({...Kh0.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||$F5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??yF5.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??Nh0.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??xy.loadConfig(Qi.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??xy.loadConfig(Qi.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};zh0.getRuntimeConfig=bF5});var fi=Y((pA1)=>{Object.defineProperty(pA1,"__esModule",{value:!0});pA1.STSClient=pA1.__Client=void 0;var hF5=Cd(),jF5=jg(),kF5=u2(),qh0=pw1(),xF5=nw1(),cF5=rw1(),Rh0=dG(),pF5=rS0(),Uh0=QB1(),vh0=v0();Object.defineProperty(pA1,"__Client",{enumerable:!0,get:function(){return vh0.Client}});var iF5=E$0(),nF5=fh0();class cA1 extends vh0.Client{constructor(I){let d=nF5.getRuntimeConfig(I),G=iF5.resolveClientEndpointParameters(d),Z=hF5.resolveRegionConfig(G),C=kF5.resolveEndpointConfig(Z),W=Rh0.resolveRetryConfig(C),w=qh0.resolveHostHeaderConfig(W),B=pF5.resolveStsAuthConfig(w,{stsClientCtor:cA1}),A=Uh0.resolveUserAgentConfig(B);super(A);this.config=A,this.middlewareStack.use(Rh0.getRetryPlugin(this.config)),this.middlewareStack.use(jF5.getContentLengthPlugin(this.config)),this.middlewareStack.use(qh0.getHostHeaderPlugin(this.config)),this.middlewareStack.use(xF5.getLoggerPlugin(this.config)),this.middlewareStack.use(cF5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(Uh0.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}pA1.STSClient=cA1});var rA1=Y((nA1)=>{Object.defineProperty(nA1,"__esModule",{value:!0});nA1.AssumeRoleWithSAMLCommand=nA1.$Command=void 0;var rF5=u2(),aF5=r2(),Lh0=v0();Object.defineProperty(nA1,"$Command",{enumerable:!0,get:function(){return Lh0.Command}});var Mh0=wD(),Sh0=PV();class iA1 extends Lh0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(aF5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(rF5.getEndpointPlugin(d,iA1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleWithSAMLCommand",inputFilterSensitiveLog:Mh0.AssumeRoleWithSAMLRequestFilterSensitiveLog,outputFilterSensitiveLog:Mh0.AssumeRoleWithSAMLResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Sh0.se_AssumeRoleWithSAMLCommand(I,d)}deserialize(I,d){return Sh0.de_AssumeRoleWithSAMLCommand(I,d)}}nA1.AssumeRoleWithSAMLCommand=iA1});var oA1=Y((sA1)=>{Object.defineProperty(sA1,"__esModule",{value:!0});sA1.DecodeAuthorizationMessageCommand=sA1.$Command=void 0;var sF5=u2(),oF5=r2(),eF5=GD(),$h0=v0();Object.defineProperty(sA1,"$Command",{enumerable:!0,get:function(){return $h0.Command}});var Ph0=PV();class aA1 extends $h0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(oF5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(sF5.getEndpointPlugin(d,aA1.getEndpointParameterInstructions())),this.middlewareStack.use(eF5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"DecodeAuthorizationMessageCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Ph0.se_DecodeAuthorizationMessageCommand(I,d)}deserialize(I,d){return Ph0.de_DecodeAuthorizationMessageCommand(I,d)}}sA1.DecodeAuthorizationMessageCommand=aA1});var IV1=Y((tA1)=>{Object.defineProperty(tA1,"__esModule",{value:!0});tA1.GetAccessKeyInfoCommand=tA1.$Command=void 0;var tF5=u2(),Ig5=r2(),dg5=GD(),Oh0=v0();Object.defineProperty(tA1,"$Command",{enumerable:!0,get:function(){return Oh0.Command}});var Th0=PV();class eA1 extends Oh0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Ig5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(tF5.getEndpointPlugin(d,eA1.getEndpointParameterInstructions())),this.middlewareStack.use(dg5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetAccessKeyInfoCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return Th0.se_GetAccessKeyInfoCommand(I,d)}deserialize(I,d){return Th0.de_GetAccessKeyInfoCommand(I,d)}}tA1.GetAccessKeyInfoCommand=eA1});var ZV1=Y((GV1)=>{Object.defineProperty(GV1,"__esModule",{value:!0});GV1.GetCallerIdentityCommand=GV1.$Command=void 0;var Gg5=u2(),Zg5=r2(),Cg5=GD(),bh0=v0();Object.defineProperty(GV1,"$Command",{enumerable:!0,get:function(){return bh0.Command}});var lh0=PV();class dV1 extends bh0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Zg5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(Gg5.getEndpointPlugin(d,dV1.getEndpointParameterInstructions())),this.middlewareStack.use(Cg5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetCallerIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return lh0.se_GetCallerIdentityCommand(I,d)}deserialize(I,d){return lh0.de_GetCallerIdentityCommand(I,d)}}GV1.GetCallerIdentityCommand=dV1});var wV1=Y((WV1)=>{Object.defineProperty(WV1,"__esModule",{value:!0});WV1.GetFederationTokenCommand=WV1.$Command=void 0;var Wg5=u2(),wg5=r2(),Bg5=GD(),kh0=v0();Object.defineProperty(WV1,"$Command",{enumerable:!0,get:function(){return kh0.Command}});var Ag5=wD(),jh0=PV();class CV1 extends kh0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(wg5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(Wg5.getEndpointPlugin(d,CV1.getEndpointParameterInstructions())),this.middlewareStack.use(Bg5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetFederationTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:Ag5.GetFederationTokenResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return jh0.se_GetFederationTokenCommand(I,d)}deserialize(I,d){return jh0.de_GetFederationTokenCommand(I,d)}}WV1.GetFederationTokenCommand=CV1});var VV1=Y((AV1)=>{Object.defineProperty(AV1,"__esModule",{value:!0});AV1.GetSessionTokenCommand=AV1.$Command=void 0;var Vg5=u2(),Xg5=r2(),Yg5=GD(),ph0=v0();Object.defineProperty(AV1,"$Command",{enumerable:!0,get:function(){return ph0.Command}});var _g5=wD(),ch0=PV();class BV1 extends ph0.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Xg5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(Vg5.getEndpointPlugin(d,BV1.getEndpointParameterInstructions())),this.middlewareStack.use(Yg5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetSessionTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:_g5.GetSessionTokenResponseFilterSensitiveLog},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return ch0.se_GetSessionTokenCommand(I,d)}deserialize(I,d){return ch0.de_GetSessionTokenCommand(I,d)}}AV1.GetSessionTokenCommand=BV1});var ah0=Y((nh0)=>{Object.defineProperty(nh0,"__esModule",{value:!0});nh0.STS=void 0;var Dg5=v0(),Hg5=sp(),Fg5=rA1(),gg5=op(),Jg5=oA1(),Kg5=IV1(),Ng5=ZV1(),zg5=wV1(),Qg5=VV1(),fg5=fi(),qg5={AssumeRoleCommand:Hg5.AssumeRoleCommand,AssumeRoleWithSAMLCommand:Fg5.AssumeRoleWithSAMLCommand,AssumeRoleWithWebIdentityCommand:gg5.AssumeRoleWithWebIdentityCommand,DecodeAuthorizationMessageCommand:Jg5.DecodeAuthorizationMessageCommand,GetAccessKeyInfoCommand:Kg5.GetAccessKeyInfoCommand,GetCallerIdentityCommand:Ng5.GetCallerIdentityCommand,GetFederationTokenCommand:zg5.GetFederationTokenCommand,GetSessionTokenCommand:Qg5.GetSessionTokenCommand};class XV1 extends fg5.STSClient{}nh0.STS=XV1;Dg5.createAggregatedClient(qg5,XV1)});var sh0=Y((VB)=>{Object.defineProperty(VB,"__esModule",{value:!0});var KD=x1();KD.__exportStar(sp(),VB);KD.__exportStar(rA1(),VB);KD.__exportStar(op(),VB);KD.__exportStar(oA1(),VB);KD.__exportStar(IV1(),VB);KD.__exportStar(ZV1(),VB);KD.__exportStar(wV1(),VB);KD.__exportStar(VV1(),VB)});var oh0=Y((YV1)=>{Object.defineProperty(YV1,"__esModule",{value:!0});var Rg5=x1();Rg5.__exportStar(wD(),YV1)});var Wj0=Y((dj0)=>{Object.defineProperty(dj0,"__esModule",{value:!0});dj0.decorateDefaultCredentialProvider=dj0.getDefaultRoleAssumerWithWebIdentity=dj0.getDefaultRoleAssumer=void 0;var eh0=eB1(),th0=fi(),Ij0=(I,d)=>{if(!d)return I;else return class G extends I{constructor(Z){super(Z);for(let C of d)this.middlewareStack.use(C)}}},Ug5=(I={},d)=>eh0.getDefaultRoleAssumer(I,Ij0(th0.STSClient,d));dj0.getDefaultRoleAssumer=Ug5;var vg5=(I={},d)=>eh0.getDefaultRoleAssumerWithWebIdentity(I,Ij0(th0.STSClient,d));dj0.getDefaultRoleAssumerWithWebIdentity=vg5;var Eg5=(I)=>(d)=>I({roleAssumer:dj0.getDefaultRoleAssumer(d),roleAssumerWithWebIdentity:dj0.getDefaultRoleAssumerWithWebIdentity(d),...d});dj0.decorateDefaultCredentialProvider=Eg5});var Zq=Y((ND)=>{Object.defineProperty(ND,"__esModule",{value:!0});ND.STSServiceException=void 0;var cy=x1();cy.__exportStar(fi(),ND);cy.__exportStar(ah0(),ND);cy.__exportStar(sh0(),ND);cy.__exportStar(oh0(),ND);cy.__exportStar(Wj0(),ND);var Mg5=pp();Object.defineProperty(ND,"STSServiceException",{enumerable:!0,get:function(){return Mg5.STSServiceException}})});var Vj0=Y((Bj0)=>{Object.defineProperty(Bj0,"__esModule",{value:!0});Bj0.fromIni=void 0;var wj0=Zq(),Lg5=lA1(),yg5=(I={})=>{var d,G;return Lg5.fromIni({...I,roleAssumer:(d=I.roleAssumer)!==null&&d!==void 0?d:wj0.getDefaultRoleAssumer(I.clientConfig,I.clientPlugins),roleAssumerWithWebIdentity:(G=I.roleAssumerWithWebIdentity)!==null&&G!==void 0?G:wj0.getDefaultRoleAssumerWithWebIdentity(I.clientConfig,I.clientPlugins)})};Bj0.fromIni=yg5});var _j0=Y((Xj0)=>{Object.defineProperty(Xj0,"__esModule",{value:!0});Xj0.fromInstanceMetadata=void 0;var Pg5=i_(),$g5=(I)=>Pg5.fromInstanceMetadata(I);Xj0.fromInstanceMetadata=$g5});var gj0=Y((Hj0)=>{Object.defineProperty(Hj0,"__esModule",{value:!0});Hj0.fromNodeProviderChain=void 0;var Dj0=Zq(),ug5=jA1(),Tg5=(I={})=>{var d,G;return ug5.defaultProvider({...I,roleAssumer:(d=I.roleAssumer)!==null&&d!==void 0?d:Dj0.getDefaultRoleAssumer(I.clientConfig,I.clientPlugins),roleAssumerWithWebIdentity:(G=I.roleAssumerWithWebIdentity)!==null&&G!==void 0?G:Dj0.getDefaultRoleAssumerWithWebIdentity(I.clientConfig,I.clientPlugins)})};Hj0.fromNodeProviderChain=Tg5});var Nj0=Y((Jj0)=>{Object.defineProperty(Jj0,"__esModule",{value:!0});Jj0.fromProcess=void 0;var Og5=ep(),mg5=(I)=>Og5.fromProcess(I);Jj0.fromProcess=mg5});var fj0=Y((zj0)=>{Object.defineProperty(zj0,"__esModule",{value:!0});zj0.fromSSO=void 0;var lg5=MA1(),bg5=jy(),hg5=(I={})=>bg5.fromSSO({...{ssoClient:I.clientConfig?new lg5.SSOClient(I.clientConfig):void 0},...I});zj0.fromSSO=hg5});var Ej0=Y((Uj0)=>{Object.defineProperty(Uj0,"__esModule",{value:!0});Uj0.fromTemporaryCredentials=void 0;var qj0=Zq(),Rj0=W4(),jg5=(I)=>{let d;return async()=>{var G;let Z={...I.params,RoleSessionName:(G=I.params.RoleSessionName)!==null&&G!==void 0?G:"aws-sdk-js-"+Date.now()};if(Z===null||Z===void 0?void 0:Z.SerialNumber){if(!I.mfaCodeProvider)throw new Rj0.CredentialsProviderError("Temporary credential requires multi-factor authentication, but no MFA code callback was provided.",!1);Z.TokenCode=await I.mfaCodeProvider(Z===null||Z===void 0?void 0:Z.SerialNumber)}if(!d)d=new qj0.STSClient({...I.clientConfig,credentials:I.masterCredentials});if(I.clientPlugins)for(let W of I.clientPlugins)d.middlewareStack.use(W);let{Credentials:C}=await d.send(new qj0.AssumeRoleCommand(Z));if(!C||!C.AccessKeyId||!C.SecretAccessKey)throw new Rj0.CredentialsProviderError(`Invalid response from STS.assumeRole call with role ${Z.RoleArn}`);return{accessKeyId:C.AccessKeyId,secretAccessKey:C.SecretAccessKey,sessionToken:C.SessionToken,expiration:C.Expiration}}};Uj0.fromTemporaryCredentials=jg5});var Lj0=Y((Mj0)=>{Object.defineProperty(Mj0,"__esModule",{value:!0});Mj0.fromTokenFile=void 0;var kg5=Zq(),xg5=ky(),cg5=(I={})=>{var d;return xg5.fromTokenFile({...I,roleAssumerWithWebIdentity:(d=I.roleAssumerWithWebIdentity)!==null&&d!==void 0?d:kg5.getDefaultRoleAssumerWithWebIdentity(I.clientConfig,I.clientPlugins)})};Mj0.fromTokenFile=cg5});var $j0=Y((yj0)=>{Object.defineProperty(yj0,"__esModule",{value:!0});yj0.fromWebToken=void 0;var pg5=Zq(),ig5=ky(),ng5=(I)=>{var d;return ig5.fromWebToken({...I,roleAssumerWithWebIdentity:(d=I.roleAssumerWithWebIdentity)!==null&&d!==void 0?d:pg5.getDefaultRoleAssumerWithWebIdentity(I.clientConfig,I.clientPlugins)})};yj0.fromWebToken=ng5});var uj0=Y((Ad)=>{Object.defineProperty(Ad,"__esModule",{value:!0});var EZ=x1();EZ.__exportStar(nM0(),Ad);EZ.__exportStar(sM0(),Ad);EZ.__exportStar(tM0(),Ad);EZ.__exportStar(VS0(),Ad);EZ.__exportStar(Vj0(),Ad);EZ.__exportStar(_j0(),Ad);EZ.__exportStar(gj0(),Ad);EZ.__exportStar(Nj0(),Ad);EZ.__exportStar(fj0(),Ad);EZ.__exportStar(Ej0(),Ad);EZ.__exportStar(Lj0(),Ad);EZ.__exportStar($j0(),Ad)});var k3=Y((hd3,xj0)=>{var{defineProperty:qi,getOwnPropertyDescriptor:rg5,getOwnPropertyNames:ag5}=Object,sg5=Object.prototype.hasOwnProperty,Ri=(I,d)=>qi(I,"name",{value:d,configurable:!0}),og5=(I,d)=>{for(var G in d)qi(I,G,{get:d[G],enumerable:!0})},eg5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of ag5(d))if(!sg5.call(I,C)&&C!==G)qi(I,C,{get:()=>d[C],enumerable:!(Z=rg5(d,C))||Z.enumerable})}return I},tg5=(I)=>eg5(qi({},"__esModule",{value:!0}),I),Tj0={};og5(Tj0,{AlgorithmId:()=>bj0,EndpointURLScheme:()=>lj0,FieldPosition:()=>hj0,HttpApiKeyAuthLocation:()=>mj0,HttpAuthLocation:()=>Oj0,IniSectionType:()=>jj0,RequestHandlerProtocol:()=>kj0,SMITHY_CONTEXT_KEY:()=>CJ5,getDefaultClientConfiguration:()=>GJ5,resolveDefaultRuntimeConfig:()=>ZJ5});xj0.exports=tg5(Tj0);var Oj0=((I)=>{return I.HEADER="header",I.QUERY="query",I})(Oj0||{}),mj0=((I)=>{return I.HEADER="header",I.QUERY="query",I})(mj0||{}),lj0=((I)=>{return I.HTTP="http",I.HTTPS="https",I})(lj0||{}),bj0=((I)=>{return I.MD5="md5",I.CRC32="crc32",I.CRC32C="crc32c",I.SHA1="sha1",I.SHA256="sha256",I})(bj0||{}),IJ5=Ri((I)=>{let d=[];if(I.sha256!==void 0)d.push({algorithmId:()=>"sha256",checksumConstructor:()=>I.sha256});if(I.md5!=null)d.push({algorithmId:()=>"md5",checksumConstructor:()=>I.md5});return{_checksumAlgorithms:d,addChecksumAlgorithm(G){this._checksumAlgorithms.push(G)},checksumAlgorithms(){return this._checksumAlgorithms}}},"getChecksumConfiguration"),dJ5=Ri((I)=>{let d={};return I.checksumAlgorithms().forEach((G)=>{d[G.algorithmId()]=G.checksumConstructor()}),d},"resolveChecksumRuntimeConfig"),GJ5=Ri((I)=>{return{...IJ5(I)}},"getDefaultClientConfiguration"),ZJ5=Ri((I)=>{return{...dJ5(I)}},"resolveDefaultRuntimeConfig"),hj0=((I)=>{return I[I.HEADER=0]="HEADER",I[I.TRAILER=1]="TRAILER",I})(hj0||{}),CJ5="__smithy_context",jj0=((I)=>{return I.PROFILE="profile",I.SSO_SESSION="sso-session",I.SERVICES="services",I})(jj0||{}),kj0=((I)=>{return I.HTTP_0_9="http/0.9",I.HTTP_1_0="http/1.0",I.TDS_8_0="tds/8.0",I})(kj0||{})});var t8=Y((jd3,oj0)=>{var{defineProperty:Ui,getOwnPropertyDescriptor:WJ5,getOwnPropertyNames:wJ5}=Object,BJ5=Object.prototype.hasOwnProperty,zD=(I,d)=>Ui(I,"name",{value:d,configurable:!0}),AJ5=(I,d)=>{for(var G in d)Ui(I,G,{get:d[G],enumerable:!0})},VJ5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of wJ5(d))if(!BJ5.call(I,C)&&C!==G)Ui(I,C,{get:()=>d[C],enumerable:!(Z=WJ5(d,C))||Z.enumerable})}return I},XJ5=(I)=>VJ5(Ui({},"__esModule",{value:!0}),I),cj0={};AJ5(cj0,{Field:()=>HJ5,Fields:()=>FJ5,HttpRequest:()=>gJ5,HttpResponse:()=>JJ5,getHttpHandlerExtensionConfiguration:()=>YJ5,isValidHostname:()=>sj0,resolveHttpHandlerRuntimeConfig:()=>_J5});oj0.exports=XJ5(cj0);var YJ5=zD((I)=>{let d=I.httpHandler;return{setHttpHandler(G){d=G},httpHandler(){return d},updateHttpClientConfig(G,Z){d.updateHttpClientConfig(G,Z)},httpHandlerConfigs(){return d.httpHandlerConfigs()}}},"getHttpHandlerExtensionConfiguration"),_J5=zD((I)=>{return{httpHandler:I.httpHandler()}},"resolveHttpHandlerRuntimeConfig"),DJ5=k3(),pj0=class I{constructor({name:d,kind:G=DJ5.FieldPosition.HEADER,values:Z=[]}){this.name=d,this.kind=G,this.values=Z}add(d){this.values.push(d)}set(d){this.values=d}remove(d){this.values=this.values.filter((G)=>G!==d)}toString(){return this.values.map((d)=>d.includes(",")||d.includes(" ")?`"${d}"`:d).join(", ")}get(){return this.values}};zD(pj0,"Field");var HJ5=pj0,ij0=class I{constructor({fields:d=[],encoding:G="utf-8"}){this.entries={},d.forEach(this.setField.bind(this)),this.encoding=G}setField(d){this.entries[d.name.toLowerCase()]=d}getField(d){return this.entries[d.toLowerCase()]}removeField(d){delete this.entries[d.toLowerCase()]}getByType(d){return Object.values(this.entries).filter((G)=>G.kind===d)}};zD(ij0,"Fields");var FJ5=ij0,nj0=class I{constructor(d){this.method=d.method||"GET",this.hostname=d.hostname||"localhost",this.port=d.port,this.query=d.query||{},this.headers=d.headers||{},this.body=d.body,this.protocol=d.protocol?d.protocol.slice(-1)!==":"?`${d.protocol}:`:d.protocol:"https:",this.path=d.path?d.path.charAt(0)!=="/"?`/${d.path}`:d.path:"/",this.username=d.username,this.password=d.password,this.fragment=d.fragment}static isInstance(d){if(!d)return!1;let G=d;return"method"in G&&"protocol"in G&&"hostname"in G&&"path"in G&&typeof G.query==="object"&&typeof G.headers==="object"}clone(){let d=new I({...this,headers:{...this.headers}});if(d.query)d.query=rj0(d.query);return d}};zD(nj0,"HttpRequest");var gJ5=nj0;function rj0(I){return Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{})}zD(rj0,"cloneQuery");var aj0=class I{constructor(d){this.statusCode=d.statusCode,this.reason=d.reason,this.headers=d.headers||{},this.body=d.body}static isInstance(d){if(!d)return!1;let G=d;return typeof G.statusCode==="number"&&typeof G.headers==="object"}};zD(aj0,"HttpResponse");var JJ5=aj0;function sj0(I){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(I)}zD(sj0,"isValidHostname")});var DV1=Y((kd3,Ei)=>{/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var ej0,tj0,Ik0,dk0,Gk0,Zk0,Ck0,Wk0,wk0,vi,_V1,Bk0,Ak0,Cq,Vk0,Xk0,Yk0,_k0,Dk0,Hk0,Fk0,gk0,Jk0;(function(I){var d=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd)define("tslib",["exports"],function(Z){I(G(d,G(Z)))});else if(typeof Ei==="object"&&typeof kd3==="object")I(G(d,G(kd3)));else I(G(d));function G(Z,C){if(Z!==d)if(typeof Object.create==="function")Object.defineProperty(Z,"__esModule",{value:!0});else Z.__esModule=!0;return function(W,w){return Z[W]=C?C(W,w):w}}})(function(I){var d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(G,Z){G.__proto__=Z}||function(G,Z){for(var C in Z)if(Z.hasOwnProperty(C))G[C]=Z[C]};ej0=function(G,Z){d(G,Z);function C(){this.constructor=G}G.prototype=Z===null?Object.create(Z):(C.prototype=Z.prototype,new C)},tj0=Object.assign||function(G){for(var Z,C=1,W=arguments.length;C=0;V--)if(A=G[V])B=(w<3?A(B):w>3?A(Z,C,B):A(Z,C))||B;return w>3&&B&&Object.defineProperty(Z,C,B),B},Gk0=function(G,Z){return function(C,W){Z(C,W,G)}},Zk0=function(G,Z){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(G,Z)},Ck0=function(G,Z,C,W){function w(B){return B instanceof C?B:new C(function(A){A(B)})}return new(C||(C=Promise))(function(B,A){function V(F){try{_(W.next(F))}catch(g){A(g)}}function X(F){try{_(W.throw(F))}catch(g){A(g)}}function _(F){F.done?B(F.value):w(F.value).then(V,X)}_((W=W.apply(G,Z||[])).next())})},Wk0=function(G,Z){var C={label:0,sent:function(){if(B[0]&1)throw B[1];return B[1]},trys:[],ops:[]},W,w,B,A;return A={next:V(0),throw:V(1),return:V(2)},typeof Symbol==="function"&&(A[Symbol.iterator]=function(){return this}),A;function V(_){return function(F){return X([_,F])}}function X(_){if(W)throw new TypeError("Generator is already executing.");while(C)try{if(W=1,w&&(B=_[0]&2?w.return:_[0]?w.throw||((B=w.return)&&B.call(w),0):w.next)&&!(B=B.call(w,_[1])).done)return B;if(w=0,B)_=[_[0]&2,B.value];switch(_[0]){case 0:case 1:B=_;break;case 4:return C.label++,{value:_[1],done:!1};case 5:C.label++,w=_[1],_=[0];continue;case 7:_=C.ops.pop(),C.trys.pop();continue;default:if((B=C.trys,!(B=B.length>0&&B[B.length-1]))&&(_[0]===6||_[0]===2)){C=0;continue}if(_[0]===3&&(!B||_[1]>B[0]&&_[1]=G.length)G=void 0;return{value:G&&G[W++],done:!G}}};throw new TypeError(Z?"Object is not iterable.":"Symbol.iterator is not defined.")},_V1=function(G,Z){var C=typeof Symbol==="function"&&G[Symbol.iterator];if(!C)return G;var W=C.call(G),w,B=[],A;try{while((Z===void 0||Z-- >0)&&!(w=W.next()).done)B.push(w.value)}catch(V){A={error:V}}finally{try{if(w&&!w.done&&(C=W.return))C.call(W)}finally{if(A)throw A.error}}return B},Bk0=function(){for(var G=[],Z=0;Z1||V(J,K)})}}function V(J,K){try{X(W[J](K))}catch(Q){g(B[0][3],Q)}}function X(J){J.value instanceof Cq?Promise.resolve(J.value.v).then(_,F):g(B[0][2],J)}function _(J){V("next",J)}function F(J){V("throw",J)}function g(J,K){if(J(K),B.shift(),B.length)V(B[0][0],B[0][1])}},Xk0=function(G){var Z,C;return Z={},W("next"),W("throw",function(w){throw w}),W("return"),Z[Symbol.iterator]=function(){return this},Z;function W(w,B){Z[w]=G[w]?function(A){return(C=!C)?{value:Cq(G[w](A)),done:w==="return"}:B?B(A):A}:B}},Yk0=function(G){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var Z=G[Symbol.asyncIterator],C;return Z?Z.call(G):(G=typeof vi==="function"?vi(G):G[Symbol.iterator](),C={},W("next"),W("throw"),W("return"),C[Symbol.asyncIterator]=function(){return this},C);function W(B){C[B]=G[B]&&function(A){return new Promise(function(V,X){A=G[B](A),w(V,X,A.done,A.value)})}}function w(B,A,V,X){Promise.resolve(X).then(function(_){B({value:_,done:V})},A)}},_k0=function(G,Z){if(Object.defineProperty)Object.defineProperty(G,"raw",{value:Z});else G.raw=Z;return G},Dk0=function(G){if(G&&G.__esModule)return G;var Z={};if(G!=null){for(var C in G)if(Object.hasOwnProperty.call(G,C))Z[C]=G[C]}return Z.default=G,Z},Hk0=function(G){return G&&G.__esModule?G:{default:G}},Fk0=function(G,Z){if(!Z.has(G))throw new TypeError("attempted to get private field on non-instance");return Z.get(G)},gk0=function(G,Z,C){if(!Z.has(G))throw new TypeError("attempted to set private field on non-instance");return Z.set(G,C),C},I("__extends",ej0),I("__assign",tj0),I("__rest",Ik0),I("__decorate",dk0),I("__param",Gk0),I("__metadata",Zk0),I("__awaiter",Ck0),I("__generator",Wk0),I("__exportStar",wk0),I("__createBinding",Jk0),I("__values",vi),I("__read",_V1),I("__spread",Bk0),I("__spreadArrays",Ak0),I("__await",Cq),I("__asyncGenerator",Vk0),I("__asyncDelegator",Xk0),I("__asyncValues",Yk0),I("__makeTemplateObject",_k0),I("__importStar",Dk0),I("__importDefault",Hk0),I("__classPrivateFieldGet",Fk0),I("__classPrivateFieldSet",gk0)})});var HV1=Y((Kk0)=>{Object.defineProperty(Kk0,"__esModule",{value:!0});Kk0.MAX_HASHABLE_LENGTH=Kk0.INIT=Kk0.KEY=Kk0.DIGEST_LENGTH=Kk0.BLOCK_SIZE=void 0;Kk0.BLOCK_SIZE=64;Kk0.DIGEST_LENGTH=32;Kk0.KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);Kk0.INIT=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];Kk0.MAX_HASHABLE_LENGTH=Math.pow(2,53)-1});var fk0=Y((zk0)=>{Object.defineProperty(zk0,"__esModule",{value:!0});zk0.RawSha256=void 0;var MZ=HV1(),fJ5=function(){function I(){this.state=Int32Array.from(MZ.INIT),this.temp=new Int32Array(64),this.buffer=new Uint8Array(64),this.bufferLength=0,this.bytesHashed=0,this.finished=!1}return I.prototype.update=function(d){if(this.finished)throw new Error("Attempted to update an already finished hash.");var G=0,Z=d.byteLength;if(this.bytesHashed+=Z,this.bytesHashed*8>MZ.MAX_HASHABLE_LENGTH)throw new Error("Cannot hash more than 2^53 - 1 bits");while(Z>0)if(this.buffer[this.bufferLength++]=d[G++],Z--,this.bufferLength===MZ.BLOCK_SIZE)this.hashBuffer(),this.bufferLength=0},I.prototype.digest=function(){if(!this.finished){var d=this.bytesHashed*8,G=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),Z=this.bufferLength;if(G.setUint8(this.bufferLength++,128),Z%MZ.BLOCK_SIZE>=MZ.BLOCK_SIZE-8){for(var C=this.bufferLength;C>>24&255,W[C*4+1]=this.state[C]>>>16&255,W[C*4+2]=this.state[C]>>>8&255,W[C*4+3]=this.state[C]>>>0&255;return W},I.prototype.hashBuffer=function(){var d=this,G=d.buffer,Z=d.state,C=Z[0],W=Z[1],w=Z[2],B=Z[3],A=Z[4],V=Z[5],X=Z[6],_=Z[7];for(var F=0;F>>17|g<<15)^(g>>>19|g<<13)^g>>>10;g=this.temp[F-15];var K=(g>>>7|g<<25)^(g>>>18|g<<14)^g>>>3;this.temp[F]=(J+this.temp[F-7]|0)+(K+this.temp[F-16]|0)}var Q=(((A>>>6|A<<26)^(A>>>11|A<<21)^(A>>>25|A<<7))+(A&V^~A&X)|0)+(_+(MZ.KEY[F]+this.temp[F]|0)|0)|0,E=((C>>>2|C<<30)^(C>>>13|C<<19)^(C>>>22|C<<10))+(C&W^C&w^W&w)|0;_=X,X=V,V=A,A=B+Q|0,B=w,w=W,W=C,C=Q+E|0}Z[0]+=C,Z[1]+=W,Z[2]+=w,Z[3]+=B,Z[4]+=A,Z[5]+=V,Z[6]+=X,Z[7]+=_},I}();zk0.RawSha256=fJ5});var Uk0=Y((qk0)=>{Object.defineProperty(qk0,"__esModule",{value:!0});qk0.toUtf8=qk0.fromUtf8=void 0;var qJ5=(I)=>{let d=[];for(let G=0,Z=I.length;G>6|192,C&63|128);else if(G+1>18|240,W>>12&63|128,W>>6&63|128,W&63|128)}else d.push(C>>12|224,C>>6&63|128,C&63|128)}return Uint8Array.from(d)};qk0.fromUtf8=qJ5;var RJ5=(I)=>{let d="";for(let G=0,Z=I.length;GB.toString(16)).join("%");d+=decodeURIComponent(w)}else d+=String.fromCharCode((C&15)<<12|(I[++G]&63)<<6|I[++G]&63)}return d};qk0.toUtf8=RJ5});var Mk0=Y((vk0)=>{Object.defineProperty(vk0,"__esModule",{value:!0});vk0.toUtf8=vk0.fromUtf8=void 0;function vJ5(I){return new TextEncoder().encode(I)}vk0.fromUtf8=vJ5;function EJ5(I){return new TextDecoder("utf-8").decode(I)}vk0.toUtf8=EJ5});var FV1=Y((yk0)=>{Object.defineProperty(yk0,"__esModule",{value:!0});yk0.toUtf8=yk0.fromUtf8=void 0;var Sk0=Uk0(),Lk0=Mk0(),SJ5=(I)=>typeof TextEncoder==="function"?Lk0.fromUtf8(I):Sk0.fromUtf8(I);yk0.fromUtf8=SJ5;var LJ5=(I)=>typeof TextDecoder==="function"?Lk0.toUtf8(I):Sk0.toUtf8(I);yk0.toUtf8=LJ5});var Tk0=Y(($k0)=>{Object.defineProperty($k0,"__esModule",{value:!0});$k0.convertToBuffer=void 0;var PJ5=FV1(),$J5=typeof Buffer!=="undefined"&&Buffer.from?function(I){return Buffer.from(I,"utf8")}:PJ5.fromUtf8;function uJ5(I){if(I instanceof Uint8Array)return I;if(typeof I==="string")return $J5(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(I)}$k0.convertToBuffer=uJ5});var lk0=Y((Ok0)=>{Object.defineProperty(Ok0,"__esModule",{value:!0});Ok0.isEmptyData=void 0;function TJ5(I){if(typeof I==="string")return I.length===0;return I.byteLength===0}Ok0.isEmptyData=TJ5});var jk0=Y((bk0)=>{Object.defineProperty(bk0,"__esModule",{value:!0});bk0.numToUint8=void 0;function OJ5(I){return new Uint8Array([(I&4278190080)>>24,(I&16711680)>>16,(I&65280)>>8,I&255])}bk0.numToUint8=OJ5});var ck0=Y((kk0)=>{Object.defineProperty(kk0,"__esModule",{value:!0});kk0.uint32ArrayFrom=void 0;function mJ5(I){if(!Uint32Array.from){var d=new Uint32Array(I.length),G=0;while(G{Object.defineProperty(Wq,"__esModule",{value:!0});Wq.uint32ArrayFrom=Wq.numToUint8=Wq.isEmptyData=Wq.convertToBuffer=void 0;var lJ5=Tk0();Object.defineProperty(Wq,"convertToBuffer",{enumerable:!0,get:function(){return lJ5.convertToBuffer}});var bJ5=lk0();Object.defineProperty(Wq,"isEmptyData",{enumerable:!0,get:function(){return bJ5.isEmptyData}});var hJ5=jk0();Object.defineProperty(Wq,"numToUint8",{enumerable:!0,get:function(){return hJ5.numToUint8}});var jJ5=ck0();Object.defineProperty(Wq,"uint32ArrayFrom",{enumerable:!0,get:function(){return jJ5.uint32ArrayFrom}})});var ak0=Y((nk0)=>{Object.defineProperty(nk0,"__esModule",{value:!0});nk0.Sha256=void 0;var ik0=DV1(),Si=HV1(),Mi=fk0(),gV1=pk0(),xJ5=function(){function I(d){this.secret=d,this.hash=new Mi.RawSha256,this.reset()}return I.prototype.update=function(d){if(gV1.isEmptyData(d)||this.error)return;try{this.hash.update(gV1.convertToBuffer(d))}catch(G){this.error=G}},I.prototype.digestSync=function(){if(this.error)throw this.error;if(this.outer){if(!this.outer.finished)this.outer.update(this.hash.digest());return this.outer.digest()}return this.hash.digest()},I.prototype.digest=function(){return ik0.__awaiter(this,void 0,void 0,function(){return ik0.__generator(this,function(d){return[2,this.digestSync()]})})},I.prototype.reset=function(){if(this.hash=new Mi.RawSha256,this.secret){this.outer=new Mi.RawSha256;var d=cJ5(this.secret),G=new Uint8Array(Si.BLOCK_SIZE);G.set(d);for(var Z=0;ZSi.BLOCK_SIZE){var G=new Mi.RawSha256;G.update(d),d=G.digest()}var Z=new Uint8Array(Si.BLOCK_SIZE);return Z.set(d),Z}});var sk0=Y((JV1)=>{Object.defineProperty(JV1,"__esModule",{value:!0});var pJ5=DV1();pJ5.__exportStar(ak0(),JV1)});var NV1=Y((wG3,yi)=>{/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var Gx0,Zx0,Cx0,Wx0,wx0,Bx0,Ax0,Vx0,Xx0,Li,KV1,Yx0,_x0,wq,Dx0,Hx0,Fx0,gx0,Jx0,Kx0,Nx0,zx0,Qx0;(function(I){var d=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd)define("tslib",["exports"],function(Z){I(G(d,G(Z)))});else if(typeof yi==="object"&&typeof wG3==="object")I(G(d,G(wG3)));else I(G(d));function G(Z,C){if(Z!==d)if(typeof Object.create==="function")Object.defineProperty(Z,"__esModule",{value:!0});else Z.__esModule=!0;return function(W,w){return Z[W]=C?C(W,w):w}}})(function(I){var d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(G,Z){G.__proto__=Z}||function(G,Z){for(var C in Z)if(Z.hasOwnProperty(C))G[C]=Z[C]};Gx0=function(G,Z){d(G,Z);function C(){this.constructor=G}G.prototype=Z===null?Object.create(Z):(C.prototype=Z.prototype,new C)},Zx0=Object.assign||function(G){for(var Z,C=1,W=arguments.length;C=0;V--)if(A=G[V])B=(w<3?A(B):w>3?A(Z,C,B):A(Z,C))||B;return w>3&&B&&Object.defineProperty(Z,C,B),B},wx0=function(G,Z){return function(C,W){Z(C,W,G)}},Bx0=function(G,Z){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(G,Z)},Ax0=function(G,Z,C,W){function w(B){return B instanceof C?B:new C(function(A){A(B)})}return new(C||(C=Promise))(function(B,A){function V(F){try{_(W.next(F))}catch(g){A(g)}}function X(F){try{_(W.throw(F))}catch(g){A(g)}}function _(F){F.done?B(F.value):w(F.value).then(V,X)}_((W=W.apply(G,Z||[])).next())})},Vx0=function(G,Z){var C={label:0,sent:function(){if(B[0]&1)throw B[1];return B[1]},trys:[],ops:[]},W,w,B,A;return A={next:V(0),throw:V(1),return:V(2)},typeof Symbol==="function"&&(A[Symbol.iterator]=function(){return this}),A;function V(_){return function(F){return X([_,F])}}function X(_){if(W)throw new TypeError("Generator is already executing.");while(C)try{if(W=1,w&&(B=_[0]&2?w.return:_[0]?w.throw||((B=w.return)&&B.call(w),0):w.next)&&!(B=B.call(w,_[1])).done)return B;if(w=0,B)_=[_[0]&2,B.value];switch(_[0]){case 0:case 1:B=_;break;case 4:return C.label++,{value:_[1],done:!1};case 5:C.label++,w=_[1],_=[0];continue;case 7:_=C.ops.pop(),C.trys.pop();continue;default:if((B=C.trys,!(B=B.length>0&&B[B.length-1]))&&(_[0]===6||_[0]===2)){C=0;continue}if(_[0]===3&&(!B||_[1]>B[0]&&_[1]=G.length)G=void 0;return{value:G&&G[W++],done:!G}}};throw new TypeError(Z?"Object is not iterable.":"Symbol.iterator is not defined.")},KV1=function(G,Z){var C=typeof Symbol==="function"&&G[Symbol.iterator];if(!C)return G;var W=C.call(G),w,B=[],A;try{while((Z===void 0||Z-- >0)&&!(w=W.next()).done)B.push(w.value)}catch(V){A={error:V}}finally{try{if(w&&!w.done&&(C=W.return))C.call(W)}finally{if(A)throw A.error}}return B},Yx0=function(){for(var G=[],Z=0;Z1||V(J,K)})}}function V(J,K){try{X(W[J](K))}catch(Q){g(B[0][3],Q)}}function X(J){J.value instanceof wq?Promise.resolve(J.value.v).then(_,F):g(B[0][2],J)}function _(J){V("next",J)}function F(J){V("throw",J)}function g(J,K){if(J(K),B.shift(),B.length)V(B[0][0],B[0][1])}},Hx0=function(G){var Z,C;return Z={},W("next"),W("throw",function(w){throw w}),W("return"),Z[Symbol.iterator]=function(){return this},Z;function W(w,B){Z[w]=G[w]?function(A){return(C=!C)?{value:wq(G[w](A)),done:w==="return"}:B?B(A):A}:B}},Fx0=function(G){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var Z=G[Symbol.asyncIterator],C;return Z?Z.call(G):(G=typeof Li==="function"?Li(G):G[Symbol.iterator](),C={},W("next"),W("throw"),W("return"),C[Symbol.asyncIterator]=function(){return this},C);function W(B){C[B]=G[B]&&function(A){return new Promise(function(V,X){A=G[B](A),w(V,X,A.done,A.value)})}}function w(B,A,V,X){Promise.resolve(X).then(function(_){B({value:_,done:V})},A)}},gx0=function(G,Z){if(Object.defineProperty)Object.defineProperty(G,"raw",{value:Z});else G.raw=Z;return G},Jx0=function(G){if(G&&G.__esModule)return G;var Z={};if(G!=null){for(var C in G)if(Object.hasOwnProperty.call(G,C))Z[C]=G[C]}return Z.default=G,Z},Kx0=function(G){return G&&G.__esModule?G:{default:G}},Nx0=function(G,Z){if(!Z.has(G))throw new TypeError("attempted to get private field on non-instance");return Z.get(G)},zx0=function(G,Z,C){if(!Z.has(G))throw new TypeError("attempted to set private field on non-instance");return Z.set(G,C),C},I("__extends",Gx0),I("__assign",Zx0),I("__rest",Cx0),I("__decorate",Wx0),I("__param",wx0),I("__metadata",Bx0),I("__awaiter",Ax0),I("__generator",Vx0),I("__exportStar",Xx0),I("__createBinding",Qx0),I("__values",Li),I("__read",KV1),I("__spread",Yx0),I("__spreadArrays",_x0),I("__await",wq),I("__asyncGenerator",Dx0),I("__asyncDelegator",Hx0),I("__asyncValues",Fx0),I("__makeTemplateObject",gx0),I("__importStar",Jx0),I("__importDefault",Kx0),I("__classPrivateFieldGet",Nx0),I("__classPrivateFieldSet",zx0)})});var Rx0=Y((fx0)=>{Object.defineProperty(fx0,"__esModule",{value:!0});fx0.convertToBuffer=void 0;var rJ5=FV1(),aJ5=typeof Buffer!=="undefined"&&Buffer.from?function(I){return Buffer.from(I,"utf8")}:rJ5.fromUtf8;function sJ5(I){if(I instanceof Uint8Array)return I;if(typeof I==="string")return aJ5(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(I)}fx0.convertToBuffer=sJ5});var Ex0=Y((Ux0)=>{Object.defineProperty(Ux0,"__esModule",{value:!0});Ux0.isEmptyData=void 0;function oJ5(I){if(typeof I==="string")return I.length===0;return I.byteLength===0}Ux0.isEmptyData=oJ5});var Lx0=Y((Mx0)=>{Object.defineProperty(Mx0,"__esModule",{value:!0});Mx0.numToUint8=void 0;function eJ5(I){return new Uint8Array([(I&4278190080)>>24,(I&16711680)>>16,(I&65280)>>8,I&255])}Mx0.numToUint8=eJ5});var $x0=Y((yx0)=>{Object.defineProperty(yx0,"__esModule",{value:!0});yx0.uint32ArrayFrom=void 0;function tJ5(I){if(!Uint32Array.from){var d=new Uint32Array(I.length),G=0;while(G{Object.defineProperty(Bq,"__esModule",{value:!0});Bq.uint32ArrayFrom=Bq.numToUint8=Bq.isEmptyData=Bq.convertToBuffer=void 0;var IK5=Rx0();Object.defineProperty(Bq,"convertToBuffer",{enumerable:!0,get:function(){return IK5.convertToBuffer}});var dK5=Ex0();Object.defineProperty(Bq,"isEmptyData",{enumerable:!0,get:function(){return dK5.isEmptyData}});var GK5=Lx0();Object.defineProperty(Bq,"numToUint8",{enumerable:!0,get:function(){return GK5.numToUint8}});var ZK5=$x0();Object.defineProperty(Bq,"uint32ArrayFrom",{enumerable:!0,get:function(){return ZK5.uint32ArrayFrom}})});var lx0=Y((Ox0)=>{Object.defineProperty(Ox0,"__esModule",{value:!0});Ox0.AwsCrc32=void 0;var ux0=NV1(),QV1=zV1(),Tx0=Pi(),WK5=function(){function I(){this.crc32=new Tx0.Crc32}return I.prototype.update=function(d){if(QV1.isEmptyData(d))return;this.crc32.update(QV1.convertToBuffer(d))},I.prototype.digest=function(){return ux0.__awaiter(this,void 0,void 0,function(){return ux0.__generator(this,function(d){return[2,QV1.numToUint8(this.crc32.digest())]})})},I.prototype.reset=function(){this.crc32=new Tx0.Crc32},I}();Ox0.AwsCrc32=WK5});var Pi=Y((fV1)=>{Object.defineProperty(fV1,"__esModule",{value:!0});fV1.AwsCrc32=fV1.Crc32=fV1.crc32=void 0;var wK5=NV1(),BK5=zV1();function AK5(I){return new bx0().update(I).digest()}fV1.crc32=AK5;var bx0=function(){function I(){this.checksum=4294967295}return I.prototype.update=function(d){var G,Z;try{for(var C=wK5.__values(d),W=C.next();!W.done;W=C.next()){var w=W.value;this.checksum=this.checksum>>>8^XK5[(this.checksum^w)&255]}}catch(B){G={error:B}}finally{try{if(W&&!W.done&&(Z=C.return))Z.call(C)}finally{if(G)throw G.error}}return this},I.prototype.digest=function(){return(this.checksum^4294967295)>>>0},I}();fV1.Crc32=bx0;var VK5=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],XK5=BK5.uint32ArrayFrom(VK5),YK5=lx0();Object.defineProperty(fV1,"AwsCrc32",{enumerable:!0,get:function(){return YK5.AwsCrc32}})});var RV1=Y((JG3,px0)=>{var{defineProperty:$i,getOwnPropertyDescriptor:FK5,getOwnPropertyNames:gK5}=Object,JK5=Object.prototype.hasOwnProperty,hx0=(I,d)=>$i(I,"name",{value:d,configurable:!0}),KK5=(I,d)=>{for(var G in d)$i(I,G,{get:d[G],enumerable:!0})},NK5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of gK5(d))if(!JK5.call(I,C)&&C!==G)$i(I,C,{get:()=>d[C],enumerable:!(Z=FK5(d,C))||Z.enumerable})}return I},zK5=(I)=>NK5($i({},"__esModule",{value:!0}),I),jx0={};KK5(jx0,{fromHex:()=>xx0,toHex:()=>cx0});px0.exports=zK5(jx0);var kx0={},qV1={};for(let I=0;I<256;I++){let d=I.toString(16).toLowerCase();if(d.length===1)d=`0${d}`;kx0[I]=d,qV1[d]=I}function xx0(I){if(I.length%2!==0)throw new Error("Hex encoded strings must have an even number length");let d=new Uint8Array(I.length/2);for(let G=0;G{var{defineProperty:Ti,getOwnPropertyDescriptor:QK5,getOwnPropertyNames:fK5}=Object,qK5=Object.prototype.hasOwnProperty,TV=(I,d)=>Ti(I,"name",{value:d,configurable:!0}),RK5=(I,d)=>{for(var G in d)Ti(I,G,{get:d[G],enumerable:!0})},UK5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of fK5(d))if(!qK5.call(I,C)&&C!==G)Ti(I,C,{get:()=>d[C],enumerable:!(Z=QK5(d,C))||Z.enumerable})}return I},vK5=(I)=>UK5(Ti({},"__esModule",{value:!0}),I),nx0={};RK5(nx0,{EventStreamCodec:()=>bK5,HeaderMarshaller:()=>sx0,Int64:()=>ui,MessageDecoderStream:()=>hK5,MessageEncoderStream:()=>jK5,SmithyMessageDecoderStream:()=>kK5,SmithyMessageEncoderStream:()=>xK5});Cc0.exports=vK5(nx0);var EK5=Pi(),JJ=RV1(),rx0=class I{constructor(d){if(this.bytes=d,d.byteLength!==8)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(d){if(d>9223372036854776000||d<-9223372036854776000)throw new Error(`${d} is too large (or, if negative, too small) to represent as an Int64`);let G=new Uint8Array(8);for(let Z=7,C=Math.abs(Math.round(d));Z>-1&&C>0;Z--,C/=256)G[Z]=C;if(d<0)UV1(G);return new I(G)}valueOf(){let d=this.bytes.slice(0),G=d[0]&128;if(G)UV1(d);return parseInt(JJ.toHex(d),16)*(G?-1:1)}toString(){return String(this.valueOf())}};TV(rx0,"Int64");var ui=rx0;function UV1(I){for(let d=0;d<8;d++)I[d]^=255;for(let d=7;d>-1;d--)if(I[d]++,I[d]!==0)break}TV(UV1,"negate");var ax0=class I{constructor(d,G){this.toUtf8=d,this.fromUtf8=G}format(d){let G=[];for(let W of Object.keys(d)){let w=this.fromUtf8(W);G.push(Uint8Array.from([w.byteLength]),w,this.formatHeaderValue(d[W]))}let Z=new Uint8Array(G.reduce((W,w)=>W+w.byteLength,0)),C=0;for(let W of G)Z.set(W,C),C+=W.byteLength;return Z}formatHeaderValue(d){switch(d.type){case"boolean":return Uint8Array.from([d.value?0:1]);case"byte":return Uint8Array.from([2,d.value]);case"short":let G=new DataView(new ArrayBuffer(3));return G.setUint8(0,3),G.setInt16(1,d.value,!1),new Uint8Array(G.buffer);case"integer":let Z=new DataView(new ArrayBuffer(5));return Z.setUint8(0,4),Z.setInt32(1,d.value,!1),new Uint8Array(Z.buffer);case"long":let C=new Uint8Array(9);return C[0]=5,C.set(d.value.bytes,1),C;case"binary":let W=new DataView(new ArrayBuffer(3+d.value.byteLength));W.setUint8(0,6),W.setUint16(1,d.value.byteLength,!1);let w=new Uint8Array(W.buffer);return w.set(d.value,3),w;case"string":let B=this.fromUtf8(d.value),A=new DataView(new ArrayBuffer(3+B.byteLength));A.setUint8(0,7),A.setUint16(1,B.byteLength,!1);let V=new Uint8Array(A.buffer);return V.set(B,3),V;case"timestamp":let X=new Uint8Array(9);return X[0]=8,X.set(ui.fromNumber(d.value.valueOf()).bytes,1),X;case"uuid":if(!OK5.test(d.value))throw new Error(`Invalid UUID received: ${d.value}`);let _=new Uint8Array(17);return _[0]=9,_.set(JJ.fromHex(d.value.replace(/\-/g,"")),1),_}}parse(d){let G={},Z=0;while(Z{var{defineProperty:Oi,getOwnPropertyDescriptor:cK5,getOwnPropertyNames:pK5}=Object,iK5=Object.prototype.hasOwnProperty,Aq=(I,d)=>Oi(I,"name",{value:d,configurable:!0}),nK5=(I,d)=>{for(var G in d)Oi(I,G,{get:d[G],enumerable:!0})},rK5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of pK5(d))if(!iK5.call(I,C)&&C!==G)Oi(I,C,{get:()=>d[C],enumerable:!(Z=cK5(d,C))||Z.enumerable})}return I},aK5=(I)=>rK5(Oi({},"__esModule",{value:!0}),I),wc0={};nK5(wc0,{EventStreamMarshaller:()=>Xc0,eventStreamSerdeProvider:()=>sK5});Yc0.exports=aK5(wc0);var py=Wc0();function Bc0(I){let d=0,G=0,Z=null,C=null,W=Aq((B)=>{if(typeof B!=="number")throw new Error("Attempted to allocate an event message where size was not a number: "+B);d=B,G=4,Z=new Uint8Array(B),new DataView(Z.buffer).setUint32(0,B,!1)},"allocateMessage"),w=Aq(async function*(){let B=I[Symbol.asyncIterator]();while(!0){let{value:A,done:V}=await B.next();if(V){if(!d)return;else if(d===G)yield Z;else throw new Error("Truncated event message received.");return}let X=A.length,_=0;while(_new Xc0(I),"eventStreamSerdeProvider")});var EV1=Y((zG3,Jc0)=>{var{defineProperty:mi,getOwnPropertyDescriptor:oK5,getOwnPropertyNames:eK5}=Object,tK5=Object.prototype.hasOwnProperty,vV1=(I,d)=>mi(I,"name",{value:d,configurable:!0}),IN5=(I,d)=>{for(var G in d)mi(I,G,{get:d[G],enumerable:!0})},dN5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of eK5(d))if(!tK5.call(I,C)&&C!==G)mi(I,C,{get:()=>d[C],enumerable:!(Z=oK5(d,C))||Z.enumerable})}return I},GN5=(I)=>dN5(mi({},"__esModule",{value:!0}),I),Dc0={};IN5(Dc0,{EventStreamMarshaller:()=>gc0,eventStreamSerdeProvider:()=>WN5});Jc0.exports=GN5(Dc0);var ZN5=_c0(),CN5=B1("stream");async function*Hc0(I){let d=!1,G=!1,Z=new Array;I.on("error",(C)=>{if(!d)d=!0;if(C)throw C}),I.on("data",(C)=>{Z.push(C)}),I.on("end",()=>{d=!0});while(!G){let C=await new Promise((W)=>setTimeout(()=>W(Z.shift()),0));if(C)yield C;G=d&&Z.length===0}}vV1(Hc0,"readabletoIterable");var Fc0=class I{constructor({utf8Encoder:d,utf8Decoder:G}){this.universalMarshaller=new ZN5.EventStreamMarshaller({utf8Decoder:G,utf8Encoder:d})}deserialize(d,G){let Z=typeof d[Symbol.asyncIterator]==="function"?d:Hc0(d);return this.universalMarshaller.deserialize(Z,G)}serialize(d,G){return CN5.Readable.from(this.universalMarshaller.serialize(d,G))}};vV1(Fc0,"EventStreamMarshaller");var gc0=Fc0,WN5=vV1((I)=>new gc0(I),"eventStreamSerdeProvider")});var zc0=Y((QG3,Nc0)=>{var{defineProperty:li,getOwnPropertyDescriptor:wN5,getOwnPropertyNames:BN5}=Object,AN5=Object.prototype.hasOwnProperty,VN5=(I,d)=>li(I,"name",{value:d,configurable:!0}),XN5=(I,d)=>{for(var G in d)li(I,G,{get:d[G],enumerable:!0})},YN5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of BN5(d))if(!AN5.call(I,C)&&C!==G)li(I,C,{get:()=>d[C],enumerable:!(Z=wN5(d,C))||Z.enumerable})}return I},_N5=(I)=>YN5(li({},"__esModule",{value:!0}),I),Kc0={};XN5(Kc0,{isArrayBuffer:()=>DN5});Nc0.exports=_N5(Kc0);var DN5=VN5((I)=>typeof ArrayBuffer==="function"&&I instanceof ArrayBuffer||Object.prototype.toString.call(I)==="[object ArrayBuffer]","isArrayBuffer")});var Vq=Y((fG3,qc0)=>{var{defineProperty:bi,getOwnPropertyDescriptor:HN5,getOwnPropertyNames:FN5}=Object,gN5=Object.prototype.hasOwnProperty,Qc0=(I,d)=>bi(I,"name",{value:d,configurable:!0}),JN5=(I,d)=>{for(var G in d)bi(I,G,{get:d[G],enumerable:!0})},KN5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of FN5(d))if(!gN5.call(I,C)&&C!==G)bi(I,C,{get:()=>d[C],enumerable:!(Z=HN5(d,C))||Z.enumerable})}return I},NN5=(I)=>KN5(bi({},"__esModule",{value:!0}),I),fc0={};JN5(fc0,{fromArrayBuffer:()=>QN5,fromString:()=>fN5});qc0.exports=NN5(fc0);var zN5=zc0(),MV1=B1("buffer"),QN5=Qc0((I,d=0,G=I.byteLength-d)=>{if(!zN5.isArrayBuffer(I))throw new TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof I} (${I})`);return MV1.Buffer.from(I,d,G)},"fromArrayBuffer"),fN5=Qc0((I,d)=>{if(typeof I!=="string")throw new TypeError(`The "input" argument must be of type string. Received type ${typeof I} (${I})`);return d?MV1.Buffer.from(I,d):MV1.Buffer.from(I)},"fromString")});var vc0=Y((Rc0)=>{Object.defineProperty(Rc0,"__esModule",{value:!0});Rc0.fromBase64=void 0;var qN5=Vq(),RN5=/^[A-Za-z0-9+/]*={0,2}$/,UN5=(I)=>{if(I.length*3%4!==0)throw new TypeError("Incorrect padding on base64 string.");if(!RN5.exec(I))throw new TypeError("Invalid base64 string.");let d=qN5.fromString(I,"base64");return new Uint8Array(d.buffer,d.byteOffset,d.byteLength)};Rc0.fromBase64=UN5});var SZ=Y((RG3,Lc0)=>{var{defineProperty:hi,getOwnPropertyDescriptor:vN5,getOwnPropertyNames:EN5}=Object,MN5=Object.prototype.hasOwnProperty,SV1=(I,d)=>hi(I,"name",{value:d,configurable:!0}),SN5=(I,d)=>{for(var G in d)hi(I,G,{get:d[G],enumerable:!0})},LN5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of EN5(d))if(!MN5.call(I,C)&&C!==G)hi(I,C,{get:()=>d[C],enumerable:!(Z=vN5(d,C))||Z.enumerable})}return I},yN5=(I)=>LN5(hi({},"__esModule",{value:!0}),I),Ec0={};SN5(Ec0,{fromUtf8:()=>Sc0,toUint8Array:()=>PN5,toUtf8:()=>$N5});Lc0.exports=yN5(Ec0);var Mc0=Vq(),Sc0=SV1((I)=>{let d=Mc0.fromString(I,"utf8");return new Uint8Array(d.buffer,d.byteOffset,d.byteLength/Uint8Array.BYTES_PER_ELEMENT)},"fromUtf8"),PN5=SV1((I)=>{if(typeof I==="string")return Sc0(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(I)},"toUint8Array"),$N5=SV1((I)=>{if(typeof I==="string")return I;if(typeof I!=="object"||typeof I.byteOffset!=="number"||typeof I.byteLength!=="number")throw new Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return Mc0.fromArrayBuffer(I.buffer,I.byteOffset,I.byteLength).toString("utf8")},"toUtf8")});var $c0=Y((yc0)=>{Object.defineProperty(yc0,"__esModule",{value:!0});yc0.toBase64=void 0;var uN5=Vq(),TN5=SZ(),ON5=(I)=>{let d;if(typeof I==="string")d=TN5.fromUtf8(I);else d=I;if(typeof d!=="object"||typeof d.byteOffset!=="number"||typeof d.byteLength!=="number")throw new Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");return uN5.fromArrayBuffer(d.buffer,d.byteOffset,d.byteLength).toString("base64")};yc0.toBase64=ON5});var fD=Y((vG3,ji)=>{var{defineProperty:uc0,getOwnPropertyDescriptor:mN5,getOwnPropertyNames:lN5}=Object,bN5=Object.prototype.hasOwnProperty,LV1=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of lN5(d))if(!bN5.call(I,C)&&C!==G)uc0(I,C,{get:()=>d[C],enumerable:!(Z=mN5(d,C))||Z.enumerable})}return I},Tc0=(I,d,G)=>(LV1(I,d,"default"),G&&LV1(G,d,"default")),hN5=(I)=>LV1(uc0({},"__esModule",{value:!0}),I),yV1={};ji.exports=hN5(yV1);Tc0(yV1,vc0(),ji.exports);Tc0(yV1,$c0(),ji.exports)});var $V1=Y((EG3,lc0)=>{var{defineProperty:ki,getOwnPropertyDescriptor:jN5,getOwnPropertyNames:kN5}=Object,xN5=Object.prototype.hasOwnProperty,PV1=(I,d)=>ki(I,"name",{value:d,configurable:!0}),cN5=(I,d)=>{for(var G in d)ki(I,G,{get:d[G],enumerable:!0})},pN5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of kN5(d))if(!xN5.call(I,C)&&C!==G)ki(I,C,{get:()=>d[C],enumerable:!(Z=jN5(d,C))||Z.enumerable})}return I},iN5=(I)=>pN5(ki({},"__esModule",{value:!0}),I),Oc0={};cN5(Oc0,{escapeUri:()=>mc0,escapeUriPath:()=>rN5});lc0.exports=iN5(Oc0);var mc0=PV1((I)=>encodeURIComponent(I).replace(/[!'()*]/g,nN5),"escapeUri"),nN5=PV1((I)=>`%${I.charCodeAt(0).toString(16).toUpperCase()}`,"hexEncode"),rN5=PV1((I)=>I.split("/").map(mc0).join("/"),"escapeUriPath")});var TV1=Y((MG3,jc0)=>{var{defineProperty:xi,getOwnPropertyDescriptor:aN5,getOwnPropertyNames:sN5}=Object,oN5=Object.prototype.hasOwnProperty,eN5=(I,d)=>xi(I,"name",{value:d,configurable:!0}),tN5=(I,d)=>{for(var G in d)xi(I,G,{get:d[G],enumerable:!0})},Iz5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of sN5(d))if(!oN5.call(I,C)&&C!==G)xi(I,C,{get:()=>d[C],enumerable:!(Z=aN5(d,C))||Z.enumerable})}return I},dz5=(I)=>Iz5(xi({},"__esModule",{value:!0}),I),bc0={};tN5(bc0,{buildQueryString:()=>hc0});jc0.exports=dz5(bc0);var uV1=$V1();function hc0(I){let d=[];for(let G of Object.keys(I).sort()){let Z=I[G];if(G=uV1.escapeUri(G),Array.isArray(Z))for(let C=0,W=Z.length;C{var{defineProperty:ci,getOwnPropertyDescriptor:Gz5,getOwnPropertyNames:Zz5}=Object,Cz5=Object.prototype.hasOwnProperty,Xq=(I,d)=>ci(I,"name",{value:d,configurable:!0}),Wz5=(I,d)=>{for(var G in d)ci(I,G,{get:d[G],enumerable:!0})},wz5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Zz5(d))if(!Cz5.call(I,C)&&C!==G)ci(I,C,{get:()=>d[C],enumerable:!(Z=Gz5(d,C))||Z.enumerable})}return I},Bz5=(I)=>wz5(ci({},"__esModule",{value:!0}),I),xc0={};Wz5(xc0,{FetchHttpHandler:()=>Vz5,keepAliveSupport:()=>pc0,streamCollector:()=>Yz5});sc0.exports=Bz5(xc0);var kc0=t8(),Az5=TV1();function cc0(I=0){return new Promise((d,G)=>{if(I)setTimeout(()=>{let Z=new Error(`Request did not complete within ${I} ms`);Z.name="TimeoutError",G(Z)},I)})}Xq(cc0,"requestTimeout");var pc0={supported:Boolean(typeof Request!=="undefined"&&"keepalive"in new Request("https://[::1]"))},ic0=class I{static create(d){if(typeof(d==null?void 0:d.handle)==="function")return d;return new I(d)}constructor(d){if(typeof d==="function")this.configProvider=d().then((G)=>G||{});else this.config=d??{},this.configProvider=Promise.resolve(this.config)}destroy(){}async handle(d,{abortSignal:G}={}){if(!this.config)this.config=await this.configProvider;let Z=this.config.requestTimeout,C=this.config.keepAlive===!0;if(G==null?void 0:G.aborted){let K=new Error("Request aborted");return K.name="AbortError",Promise.reject(K)}let W=d.path,w=Az5.buildQueryString(d.query||{});if(w)W+=`?${w}`;if(d.fragment)W+=`#${d.fragment}`;let B="";if(d.username!=null||d.password!=null){let K=d.username??"",Q=d.password??"";B=`${K}:${Q}@`}let{port:A,method:V}=d,X=`${d.protocol}//${B}${d.hostname}${A?`:${A}`:""}${W}`,F={body:V==="GET"||V==="HEAD"?void 0:d.body,headers:new Headers(d.headers),method:V};if(typeof AbortController!=="undefined")F.signal=G;if(pc0.supported)F.keepalive=C;let g=new Request(X,F),J=[fetch(g).then((K)=>{let Q=K.headers,E={};for(let P of Q.entries())E[P[0]]=P[1];if(K.body==null)return K.blob().then((P)=>({response:new kc0.HttpResponse({headers:E,reason:K.statusText,statusCode:K.status,body:P})}));return{response:new kc0.HttpResponse({headers:E,reason:K.statusText,statusCode:K.status,body:K.body})}}),cc0(Z)];if(G)J.push(new Promise((K,Q)=>{G.onabort=()=>{let E=new Error("Request aborted");E.name="AbortError",Q(E)}}));return Promise.race(J)}updateHttpClientConfig(d,G){this.config=void 0,this.configProvider=this.configProvider.then((Z)=>{return Z[d]=G,Z})}httpHandlerConfigs(){return this.config??{}}};Xq(ic0,"FetchHttpHandler");var Vz5=ic0,Xz5=fD(),Yz5=Xq((I)=>{if(typeof Blob==="function"&&I instanceof Blob)return nc0(I);return rc0(I)},"streamCollector");async function nc0(I){let d=await ac0(I),G=Xz5.fromBase64(d);return new Uint8Array(G)}Xq(nc0,"collectBlob");async function rc0(I){let d=new Uint8Array(0),G=I.getReader(),Z=!1;while(!Z){let{done:C,value:W}=await G.read();if(W){let w=d;d=new Uint8Array(w.length+W.length),d.set(w),d.set(W,w.length)}Z=C}return d}Xq(rc0,"collectStream");function ac0(I){return new Promise((d,G)=>{let Z=new FileReader;Z.onloadend=()=>{if(Z.readyState!==2)return G(new Error("Reader aborted too early"));let C=Z.result??"",W=C.indexOf(","),w=W>-1?W+1:C.length;d(C.substring(w))},Z.onabort=()=>G(new Error("Read aborted")),Z.onerror=()=>G(Z.error),Z.readAsDataURL(I)})}Xq(ac0,"readToBase64")});var Gp0=Y((LG3,dp0)=>{var{defineProperty:pi,getOwnPropertyDescriptor:_z5,getOwnPropertyNames:Dz5}=Object,Hz5=Object.prototype.hasOwnProperty,LZ=(I,d)=>pi(I,"name",{value:d,configurable:!0}),Fz5=(I,d)=>{for(var G in d)pi(I,G,{get:d[G],enumerable:!0})},gz5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Dz5(d))if(!Hz5.call(I,C)&&C!==G)pi(I,C,{get:()=>d[C],enumerable:!(Z=_z5(d,C))||Z.enumerable})}return I},Jz5=(I)=>gz5(pi({},"__esModule",{value:!0}),I),Ip0={};Fz5(Ip0,{constructStack:()=>OV1});dp0.exports=Jz5(Ip0);var NJ=LZ((I,d)=>{let G=[];if(I)G.push(I);if(d)for(let Z of d)G.push(Z);return G},"getAllAliases"),qD=LZ((I,d)=>{return`${I||"anonymous"}${d&&d.length>0?` (a.k.a. ${d.join(",")})`:""}`},"getMiddlewareNameWithAliases"),OV1=LZ(()=>{let I=[],d=[],G=!1,Z=new Set,C=LZ((_)=>_.sort((F,g)=>ec0[g.step]-ec0[F.step]||tc0[g.priority||"normal"]-tc0[F.priority||"normal"]),"sort"),W=LZ((_)=>{let F=!1,g=LZ((J)=>{let K=NJ(J.name,J.aliases);if(K.includes(_)){F=!0;for(let Q of K)Z.delete(Q);return!1}return!0},"filterCb");return I=I.filter(g),d=d.filter(g),F},"removeByName"),w=LZ((_)=>{let F=!1,g=LZ((J)=>{if(J.middleware===_){F=!0;for(let K of NJ(J.name,J.aliases))Z.delete(K);return!1}return!0},"filterCb");return I=I.filter(g),d=d.filter(g),F},"removeByReference"),B=LZ((_)=>{var F;return I.forEach((g)=>{_.add(g.middleware,{...g})}),d.forEach((g)=>{_.addRelativeTo(g.middleware,{...g})}),(F=_.identifyOnResolve)==null||F.call(_,X.identifyOnResolve()),_},"cloneTo"),A=LZ((_)=>{let F=[];return _.before.forEach((g)=>{if(g.before.length===0&&g.after.length===0)F.push(g);else F.push(...A(g))}),F.push(_),_.after.reverse().forEach((g)=>{if(g.before.length===0&&g.after.length===0)F.push(g);else F.push(...A(g))}),F},"expandRelativeMiddlewareList"),V=LZ((_=!1)=>{let F=[],g=[],J={};return I.forEach((Q)=>{let E={...Q,before:[],after:[]};for(let S of NJ(E.name,E.aliases))J[S]=E;F.push(E)}),d.forEach((Q)=>{let E={...Q,before:[],after:[]};for(let S of NJ(E.name,E.aliases))J[S]=E;g.push(E)}),g.forEach((Q)=>{if(Q.toMiddleware){let E=J[Q.toMiddleware];if(E===void 0){if(_)return;throw new Error(`${Q.toMiddleware} is not found when adding ${qD(Q.name,Q.aliases)} middleware ${Q.relation} ${Q.toMiddleware}`)}if(Q.relation==="after")E.after.push(Q);if(Q.relation==="before")E.before.push(Q)}}),C(F).map(A).reduce((Q,E)=>{return Q.push(...E),Q},[])},"getMiddlewareList"),X={add:(_,F={})=>{let{name:g,override:J,aliases:K}=F,Q={step:"initialize",priority:"normal",middleware:_,...F},E=NJ(g,K);if(E.length>0){if(E.some((S)=>Z.has(S))){if(!J)throw new Error(`Duplicate middleware name '${qD(g,K)}'`);for(let S of E){let P=I.findIndex((h)=>{var O;return h.name===S||((O=h.aliases)==null?void 0:O.some((T)=>T===S))});if(P===-1)continue;let $=I[P];if($.step!==Q.step||Q.priority!==$.priority)throw new Error(`"${qD($.name,$.aliases)}" middleware with ${$.priority} priority in ${$.step} step cannot be overridden by "${qD(g,K)}" middleware with ${Q.priority} priority in ${Q.step} step.`);I.splice(P,1)}}for(let S of E)Z.add(S)}I.push(Q)},addRelativeTo:(_,F)=>{let{name:g,override:J,aliases:K}=F,Q={middleware:_,...F},E=NJ(g,K);if(E.length>0){if(E.some((S)=>Z.has(S))){if(!J)throw new Error(`Duplicate middleware name '${qD(g,K)}'`);for(let S of E){let P=d.findIndex((h)=>{var O;return h.name===S||((O=h.aliases)==null?void 0:O.some((T)=>T===S))});if(P===-1)continue;let $=d[P];if($.toMiddleware!==Q.toMiddleware||$.relation!==Q.relation)throw new Error(`"${qD($.name,$.aliases)}" middleware ${$.relation} "${$.toMiddleware}" middleware cannot be overridden by "${qD(g,K)}" middleware ${Q.relation} "${Q.toMiddleware}" middleware.`);d.splice(P,1)}}for(let S of E)Z.add(S)}d.push(Q)},clone:()=>B(OV1()),use:(_)=>{_.applyToStack(X)},remove:(_)=>{if(typeof _==="string")return W(_);else return w(_)},removeByTag:(_)=>{let F=!1,g=LZ((J)=>{let{tags:K,name:Q,aliases:E}=J;if(K&&K.includes(_)){let S=NJ(Q,E);for(let P of S)Z.delete(P);return F=!0,!1}return!0},"filterCb");return I=I.filter(g),d=d.filter(g),F},concat:(_)=>{var F;let g=B(OV1());return g.use(_),g.identifyOnResolve(G||g.identifyOnResolve()||(((F=_.identifyOnResolve)==null?void 0:F.call(_))??!1)),g},applyToStack:B,identify:()=>{return V(!0).map((_)=>{let F=_.step??_.relation+" "+_.toMiddleware;return qD(_.name,_.aliases)+" - "+F})},identifyOnResolve(_){if(typeof _==="boolean")G=_;return G},resolve:(_,F)=>{for(let g of V().map((J)=>J.middleware).reverse())_=g(_,F);if(G)console.log(X.identify());return _}};return X},"constructStack"),ec0={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1},tc0={high:3,normal:2,low:1}});var Wp0=Y((Zp0)=>{Object.defineProperty(Zp0,"__esModule",{value:!0});Zp0.getAwsChunkedEncodingStream=void 0;var Kz5=B1("stream"),Nz5=(I,d)=>{let{base64Encoder:G,bodyLengthChecker:Z,checksumAlgorithmFn:C,checksumLocationName:W,streamHasher:w}=d,B=G!==void 0&&C!==void 0&&W!==void 0&&w!==void 0,A=B?w(C,I):void 0,V=new Kz5.Readable({read:()=>{}});return I.on("data",(X)=>{let _=Z(X)||0;V.push(`${_.toString(16)}\r +`),V.push(X),V.push(`\r +`)}),I.on("end",async()=>{if(V.push(`0\r +`),B){let X=G(await A);V.push(`${W}:${X}\r +`),V.push(`\r +`)}V.push(null)}),V};Zp0.getAwsChunkedEncodingStream=Nz5});var Yq=Y((PG3,zp0)=>{var{create:zz5,defineProperty:iy,getOwnPropertyDescriptor:Qz5,getOwnPropertyNames:fz5,getPrototypeOf:qz5}=Object,Rz5=Object.prototype.hasOwnProperty,N8=(I,d)=>iy(I,"name",{value:d,configurable:!0}),Uz5=(I,d)=>{for(var G in d)iy(I,G,{get:d[G],enumerable:!0})},Ap0=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of fz5(d))if(!Rz5.call(I,C)&&C!==G)iy(I,C,{get:()=>d[C],enumerable:!(Z=Qz5(d,C))||Z.enumerable})}return I},vz5=(I,d,G)=>(G=I!=null?zz5(qz5(I)):{},Ap0(d||!I||!I.__esModule?iy(G,"default",{value:I,enumerable:!0}):G,I)),Ez5=(I)=>Ap0(iy({},"__esModule",{value:!0}),I),Vp0={};Uz5(Vp0,{DEFAULT_REQUEST_TIMEOUT:()=>Pz5,NodeHttp2Handler:()=>mz5,NodeHttpHandler:()=>$z5,streamCollector:()=>bz5});zp0.exports=Ez5(Vp0);var Xp0=t8(),Yp0=TV1(),mV1=B1("http"),lV1=B1("https"),Mz5=["ECONNRESET","EPIPE","ETIMEDOUT"],_p0=N8((I)=>{let d={};for(let G of Object.keys(I)){let Z=I[G];d[G]=Array.isArray(Z)?Z.join(","):Z}return d},"getTransformedHeaders"),Sz5=N8((I,d,G=0)=>{if(!G)return;let Z=setTimeout(()=>{I.destroy(),d(Object.assign(new Error(`Socket timed out without establishing a connection within ${G} ms`),{name:"TimeoutError"}))},G);I.on("socket",(C)=>{if(C.connecting)C.on("connect",()=>{clearTimeout(Z)});else clearTimeout(Z)})},"setConnectionTimeout"),Lz5=N8((I,{keepAlive:d,keepAliveMsecs:G})=>{if(d!==!0)return;I.on("socket",(Z)=>{Z.setKeepAlive(d,G||0)})},"setSocketKeepAlive"),yz5=N8((I,d,G=0)=>{I.setTimeout(G,()=>{I.destroy(),d(Object.assign(new Error(`Connection timed out after ${G} ms`),{name:"TimeoutError"}))})},"setSocketTimeout"),Dp0=B1("stream"),wp0=1000;async function bV1(I,d,G=wp0){let Z=d.headers??{},C=Z.Expect||Z.expect,W=-1,w=!1;if(C==="100-continue")await Promise.race([new Promise((B)=>{W=Number(setTimeout(B,Math.max(wp0,G)))}),new Promise((B)=>{I.on("continue",()=>{clearTimeout(W),B()}),I.on("error",()=>{w=!0,clearTimeout(W),B()})})]);if(!w)Hp0(I,d.body)}N8(bV1,"writeRequestBody");function Hp0(I,d){if(d instanceof Dp0.Readable){d.pipe(I);return}if(d){if(Buffer.isBuffer(d)||typeof d==="string"){I.end(d);return}let G=d;if(typeof G==="object"&&G.buffer&&typeof G.byteOffset==="number"&&typeof G.byteLength==="number"){I.end(Buffer.from(G.buffer,G.byteOffset,G.byteLength));return}I.end(Buffer.from(d));return}I.end()}N8(Hp0,"writeBody");var Pz5=0,Fp0=class I{constructor(d){this.socketWarningTimestamp=0,this.metadata={handlerProtocol:"http/1.1"},this.configProvider=new Promise((G,Z)=>{if(typeof d==="function")d().then((C)=>{G(this.resolveDefaultConfig(C))}).catch(Z);else G(this.resolveDefaultConfig(d))})}static create(d){if(typeof(d==null?void 0:d.handle)==="function")return d;return new I(d)}static checkSocketUsage(d,G){var Z,C;let{sockets:W,requests:w,maxSockets:B}=d;if(typeof B!=="number"||B===1/0)return G;let A=15000;if(Date.now()-A=B&&_>=2*B)return console.warn("@smithy/node-http-handler:WARN",`socket usage at capacity=${X} and ${_} additional requests are enqueued.`,"See https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-configuring-maxsockets.html","or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler config."),Date.now()}return G}resolveDefaultConfig(d){let{requestTimeout:G,connectionTimeout:Z,socketTimeout:C,httpAgent:W,httpsAgent:w}=d||{},B=!0,A=50;return{connectionTimeout:Z,requestTimeout:G??C,httpAgent:(()=>{if(W instanceof mV1.Agent||typeof(W==null?void 0:W.destroy)==="function")return W;return new mV1.Agent({keepAlive:!0,maxSockets:50,...W})})(),httpsAgent:(()=>{if(w instanceof lV1.Agent||typeof(w==null?void 0:w.destroy)==="function")return w;return new lV1.Agent({keepAlive:!0,maxSockets:50,...w})})()}}destroy(){var d,G,Z,C;(G=(d=this.config)==null?void 0:d.httpAgent)==null||G.destroy(),(C=(Z=this.config)==null?void 0:Z.httpsAgent)==null||C.destroy()}async handle(d,{abortSignal:G}={}){if(!this.config)this.config=await this.configProvider;let Z;return new Promise((C,W)=>{let w=void 0,B=N8(async(S)=>{await w,clearTimeout(Z),C(S)},"resolve"),A=N8(async(S)=>{await w,W(S)},"reject");if(!this.config)throw new Error("Node HTTP request handler config is not resolved");if(G==null?void 0:G.aborted){let S=new Error("Request aborted");S.name="AbortError",A(S);return}let V=d.protocol==="https:",X=V?this.config.httpsAgent:this.config.httpAgent;Z=setTimeout(()=>{this.socketWarningTimestamp=I.checkSocketUsage(X,this.socketWarningTimestamp)},this.config.socketAcquisitionWarningTimeout??(this.config.requestTimeout??2000)+(this.config.connectionTimeout??1000));let _=Yp0.buildQueryString(d.query||{}),F=void 0;if(d.username!=null||d.password!=null){let S=d.username??"",P=d.password??"";F=`${S}:${P}`}let g=d.path;if(_)g+=`?${_}`;if(d.fragment)g+=`#${d.fragment}`;let J={headers:d.headers,host:d.hostname,method:d.method,path:g,port:d.port,agent:X,auth:F},Q=(V?lV1.request:mV1.request)(J,(S)=>{let P=new Xp0.HttpResponse({statusCode:S.statusCode||-1,reason:S.statusMessage,headers:_p0(S.headers),body:S});B({response:P})});if(Q.on("error",(S)=>{if(Mz5.includes(S.code))A(Object.assign(S,{name:"TimeoutError"}));else A(S)}),Sz5(Q,A,this.config.connectionTimeout),yz5(Q,A,this.config.requestTimeout),G)G.onabort=()=>{Q.abort();let S=new Error("Request aborted");S.name="AbortError",A(S)};let E=J.agent;if(typeof E==="object"&&"keepAlive"in E)Lz5(Q,{keepAlive:E.keepAlive,keepAliveMsecs:E.keepAliveMsecs});w=bV1(Q,d,this.config.requestTimeout).catch(W)})}updateHttpClientConfig(d,G){this.config=void 0,this.configProvider=this.configProvider.then((Z)=>{return{...Z,[d]:G}})}httpHandlerConfigs(){return this.config??{}}};N8(Fp0,"NodeHttpHandler");var $z5=Fp0,Bp0=B1("http2"),uz5=vz5(B1("http2")),gp0=class I{constructor(d){this.sessions=[],this.sessions=d??[]}poll(){if(this.sessions.length>0)return this.sessions.shift()}offerLast(d){this.sessions.push(d)}contains(d){return this.sessions.includes(d)}remove(d){this.sessions=this.sessions.filter((G)=>G!==d)}[Symbol.iterator](){return this.sessions[Symbol.iterator]()}destroy(d){for(let G of this.sessions)if(G===d){if(!G.destroyed)G.destroy()}}};N8(gp0,"NodeHttp2ConnectionPool");var Tz5=gp0,Jp0=class I{constructor(d){if(this.sessionCache=new Map,this.config=d,this.config.maxConcurrency&&this.config.maxConcurrency<=0)throw new RangeError("maxConcurrency must be greater than zero.")}lease(d,G){let Z=this.getUrlString(d),C=this.sessionCache.get(Z);if(C){let A=C.poll();if(A&&!this.config.disableConcurrency)return A}let W=uz5.default.connect(Z);if(this.config.maxConcurrency)W.settings({maxConcurrentStreams:this.config.maxConcurrency},(A)=>{if(A)throw new Error("Fail to set maxConcurrentStreams to "+this.config.maxConcurrency+"when creating new session for "+d.destination.toString())});W.unref();let w=N8(()=>{W.destroy(),this.deleteSession(Z,W)},"destroySessionCb");if(W.on("goaway",w),W.on("error",w),W.on("frameError",w),W.on("close",()=>this.deleteSession(Z,W)),G.requestTimeout)W.setTimeout(G.requestTimeout,w);let B=this.sessionCache.get(Z)||new Tz5;return B.offerLast(W),this.sessionCache.set(Z,B),W}deleteSession(d,G){let Z=this.sessionCache.get(d);if(!Z)return;if(!Z.contains(G))return;Z.remove(G),this.sessionCache.set(d,Z)}release(d,G){var Z;let C=this.getUrlString(d);(Z=this.sessionCache.get(C))==null||Z.offerLast(G)}destroy(){for(let[d,G]of this.sessionCache){for(let Z of G){if(!Z.destroyed)Z.destroy();G.remove(Z)}this.sessionCache.delete(d)}}setMaxConcurrentStreams(d){if(this.config.maxConcurrency&&this.config.maxConcurrency<=0)throw new RangeError("maxConcurrentStreams must be greater than zero.");this.config.maxConcurrency=d}setDisableConcurrentStreams(d){this.config.disableConcurrency=d}getUrlString(d){return d.destination.toString()}};N8(Jp0,"NodeHttp2ConnectionManager");var Oz5=Jp0,Kp0=class I{constructor(d){this.metadata={handlerProtocol:"h2"},this.connectionManager=new Oz5({}),this.configProvider=new Promise((G,Z)=>{if(typeof d==="function")d().then((C)=>{G(C||{})}).catch(Z);else G(d||{})})}static create(d){if(typeof(d==null?void 0:d.handle)==="function")return d;return new I(d)}destroy(){this.connectionManager.destroy()}async handle(d,{abortSignal:G}={}){if(!this.config){if(this.config=await this.configProvider,this.connectionManager.setDisableConcurrentStreams(this.config.disableConcurrentStreams||!1),this.config.maxConcurrentStreams)this.connectionManager.setMaxConcurrentStreams(this.config.maxConcurrentStreams)}let{requestTimeout:Z,disableConcurrentStreams:C}=this.config;return new Promise((W,w)=>{var B;let A=!1,V=void 0,X=N8(async(c)=>{await V,W(c)},"resolve"),_=N8(async(c)=>{await V,w(c)},"reject");if(G==null?void 0:G.aborted){A=!0;let c=new Error("Request aborted");c.name="AbortError",_(c);return}let{hostname:F,method:g,port:J,protocol:K,query:Q}=d,E="";if(d.username!=null||d.password!=null){let c=d.username??"",c1=d.password??"";E=`${c}:${c1}@`}let S=`${K}//${E}${F}${J?`:${J}`:""}`,P={destination:new URL(S)},$=this.connectionManager.lease(P,{requestTimeout:(B=this.config)==null?void 0:B.sessionTimeout,disableConcurrentStreams:C||!1}),h=N8((c)=>{if(C)this.destroySession($);A=!0,_(c)},"rejectWithDestroy"),O=Yp0.buildQueryString(Q||{}),T=d.path;if(O)T+=`?${O}`;if(d.fragment)T+=`#${d.fragment}`;let V1=$.request({...d.headers,[Bp0.constants.HTTP2_HEADER_PATH]:T,[Bp0.constants.HTTP2_HEADER_METHOD]:g});if($.ref(),V1.on("response",(c)=>{let c1=new Xp0.HttpResponse({statusCode:c[":status"]||-1,headers:_p0(c),body:V1});if(A=!0,X({response:c1}),C)$.close(),this.connectionManager.deleteSession(S,$)}),Z)V1.setTimeout(Z,()=>{V1.close();let c=new Error(`Stream timed out because of no activity for ${Z} ms`);c.name="TimeoutError",h(c)});if(G)G.onabort=()=>{V1.close();let c=new Error("Request aborted");c.name="AbortError",h(c)};V1.on("frameError",(c,c1,o1)=>{h(new Error(`Frame type id ${c} in stream id ${o1} has failed with code ${c1}.`))}),V1.on("error",h),V1.on("aborted",()=>{h(new Error(`HTTP/2 stream is abnormally aborted in mid-communication with result code ${V1.rstCode}.`))}),V1.on("close",()=>{if($.unref(),C)$.destroy();if(!A)h(new Error("Unexpected error: http2 request did not get a response"))}),V=bV1(V1,d,Z)})}updateHttpClientConfig(d,G){this.config=void 0,this.configProvider=this.configProvider.then((Z)=>{return{...Z,[d]:G}})}httpHandlerConfigs(){return this.config??{}}destroySession(d){if(!d.destroyed)d.destroy()}};N8(Kp0,"NodeHttp2Handler");var mz5=Kp0,Np0=class I extends Dp0.Writable{constructor(){super(...arguments);this.bufferedBytes=[]}_write(d,G,Z){this.bufferedBytes.push(d),Z()}};N8(Np0,"Collector");var lz5=Np0,bz5=N8((I)=>new Promise((d,G)=>{let Z=new lz5;I.pipe(Z),I.on("error",(C)=>{Z.end(),G(C)}),Z.on("error",G),Z.on("finish",function(){let C=new Uint8Array(Buffer.concat(this.bufferedBytes));d(C)})}),"streamCollector")});var Rp0=Y((fp0)=>{Object.defineProperty(fp0,"__esModule",{value:!0});fp0.sdkStreamMixin=void 0;var hz5=Yq(),jz5=Vq(),hV1=B1("stream"),kz5=B1("util"),Qp0="The stream has already been transformed.",xz5=(I)=>{var d,G;if(!(I instanceof hV1.Readable)){let W=((G=(d=I===null||I===void 0?void 0:I.__proto__)===null||d===void 0?void 0:d.constructor)===null||G===void 0?void 0:G.name)||I;throw new Error(`Unexpected stream implementation, expect Stream.Readable instance, got ${W}`)}let Z=!1,C=async()=>{if(Z)throw new Error(Qp0);return Z=!0,await hz5.streamCollector(I)};return Object.assign(I,{transformToByteArray:C,transformToString:async(W)=>{let w=await C();if(W===void 0||Buffer.isEncoding(W))return jz5.fromArrayBuffer(w.buffer,w.byteOffset,w.byteLength).toString(W);else return new kz5.TextDecoder(W).decode(w)},transformToWebStream:()=>{if(Z)throw new Error(Qp0);if(I.readableFlowing!==null)throw new Error("The stream has been consumed by other callbacks.");if(typeof hV1.Readable.toWeb!=="function")throw new Error("Readable.toWeb() is not supported. Please make sure you are using Node.js >= 17.0.0, or polyfill is available.");return Z=!0,hV1.Readable.toWeb(I)}})};fp0.sdkStreamMixin=xz5});var yp0=Y((uG3,ri)=>{var{defineProperty:ii,getOwnPropertyDescriptor:cz5,getOwnPropertyNames:pz5}=Object,iz5=Object.prototype.hasOwnProperty,xV1=(I,d)=>ii(I,"name",{value:d,configurable:!0}),nz5=(I,d)=>{for(var G in d)ii(I,G,{get:d[G],enumerable:!0})},jV1=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of pz5(d))if(!iz5.call(I,C)&&C!==G)ii(I,C,{get:()=>d[C],enumerable:!(Z=cz5(d,C))||Z.enumerable})}return I},Up0=(I,d,G)=>(jV1(I,d,"default"),G&&jV1(G,d,"default")),rz5=(I)=>jV1(ii({},"__esModule",{value:!0}),I),ni={};nz5(ni,{Uint8ArrayBlobAdapter:()=>kV1});ri.exports=rz5(ni);var vp0=fD(),Ep0=SZ();function Mp0(I,d="utf-8"){if(d==="base64")return vp0.toBase64(I);return Ep0.toUtf8(I)}xV1(Mp0,"transformToString");function Sp0(I,d){if(d==="base64")return kV1.mutate(vp0.fromBase64(I));return kV1.mutate(Ep0.fromUtf8(I))}xV1(Sp0,"transformFromString");var Lp0=class I extends Uint8Array{static fromString(d,G="utf-8"){switch(typeof d){case"string":return Sp0(d,G);default:throw new Error(`Unsupported conversion from ${typeof d} to Uint8ArrayBlobAdapter.`)}}static mutate(d){return Object.setPrototypeOf(d,I.prototype),d}transformToString(d="utf-8"){return Mp0(this,d)}};xV1(Lp0,"Uint8ArrayBlobAdapter");var kV1=Lp0;Up0(ni,Wp0(),ri.exports);Up0(ni,Rp0(),ri.exports)});var h2=Y((TG3,Ii0)=>{var{defineProperty:ei,getOwnPropertyDescriptor:az5,getOwnPropertyNames:sz5}=Object,oz5=Object.prototype.hasOwnProperty,t0=(I,d)=>ei(I,"name",{value:d,configurable:!0}),ez5=(I,d)=>{for(var G in d)ei(I,G,{get:d[G],enumerable:!0})},tz5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of sz5(d))if(!oz5.call(I,C)&&C!==G)ei(I,C,{get:()=>d[C],enumerable:!(Z=az5(d,C))||Z.enumerable})}return I},IQ5=(I)=>tz5(ei({},"__esModule",{value:!0}),I),$p0={};ez5($p0,{Client:()=>GQ5,Command:()=>lp0,LazyJsonString:()=>eQ5,NoOpLogger:()=>dQ5,SENSITIVE_STRING:()=>WQ5,ServiceException:()=>hQ5,StringWrapper:()=>oy,_json:()=>sV1,collectBody:()=>ZQ5,convertMap:()=>tQ5,createAggregatedClient:()=>wQ5,dateToUtcString:()=>pp0,decorateServiceException:()=>np0,emitWarningIfUnsupportedVersion:()=>cQ5,expectBoolean:()=>AQ5,expectByte:()=>aV1,expectFloat32:()=>ai,expectInt:()=>XQ5,expectInt32:()=>nV1,expectLong:()=>ay,expectNonNull:()=>_Q5,expectNumber:()=>ry,expectObject:()=>hp0,expectShort:()=>rV1,expectString:()=>DQ5,expectUnion:()=>HQ5,extendedEncodeURIComponent:()=>oi,getArrayIfSingleItem:()=>oQ5,getDefaultClientConfiguration:()=>aQ5,getDefaultExtensionConfiguration:()=>ap0,getValueFromTextNode:()=>sp0,handleFloat:()=>JQ5,limitedParseDouble:()=>tV1,limitedParseFloat:()=>KQ5,limitedParseFloat32:()=>NQ5,loadConfigsForDefaultMode:()=>xQ5,logger:()=>sy,map:()=>dX1,parseBoolean:()=>BQ5,parseEpochTimestamp:()=>yQ5,parseRfc3339DateTime:()=>RQ5,parseRfc3339DateTimeWithOffset:()=>vQ5,parseRfc7231DateTime:()=>LQ5,resolveDefaultRuntimeConfig:()=>sQ5,resolvedPath:()=>Cf5,serializeFloat:()=>Wf5,splitEvery:()=>tp0,strictParseByte:()=>cp0,strictParseDouble:()=>eV1,strictParseFloat:()=>FQ5,strictParseFloat32:()=>jp0,strictParseInt:()=>zQ5,strictParseInt32:()=>QQ5,strictParseLong:()=>xp0,strictParseShort:()=>_q,take:()=>If5,throwDefaultError:()=>rp0,withBaseException:()=>jQ5});Ii0.exports=IQ5($p0);var up0=class I{trace(){}debug(){}info(){}warn(){}error(){}};t0(up0,"NoOpLogger");var dQ5=up0,Tp0=Gp0(),Op0=class I{constructor(d){this.middlewareStack=Tp0.constructStack(),this.config=d}send(d,G,Z){let C=typeof G!=="function"?G:void 0,W=typeof G==="function"?G:Z,w=d.resolveMiddleware(this.middlewareStack,this.config,C);if(W)w(d).then((B)=>W(null,B.output),(B)=>W(B)).catch(()=>{});else return w(d).then((B)=>B.output)}destroy(){if(this.config.requestHandler.destroy)this.config.requestHandler.destroy()}};t0(Op0,"Client");var GQ5=Op0,cV1=yp0(),ZQ5=t0(async(I=new Uint8Array,d)=>{if(I instanceof Uint8Array)return cV1.Uint8ArrayBlobAdapter.mutate(I);if(!I)return cV1.Uint8ArrayBlobAdapter.mutate(new Uint8Array);let G=d.streamCollector(I);return cV1.Uint8ArrayBlobAdapter.mutate(await G)},"collectBody"),iV1=k3(),mp0=class I{constructor(){this.middlewareStack=Tp0.constructStack()}static classBuilder(){return new CQ5}resolveMiddlewareWithContext(d,G,Z,{middlewareFn:C,clientName:W,commandName:w,inputFilterSensitiveLog:B,outputFilterSensitiveLog:A,smithyContext:V,additionalContext:X,CommandCtor:_}){for(let Q of C.bind(this)(_,d,G,Z))this.middlewareStack.use(Q);let F=d.concat(this.middlewareStack),{logger:g}=G,J={logger:g,clientName:W,commandName:w,inputFilterSensitiveLog:B,outputFilterSensitiveLog:A,[iV1.SMITHY_CONTEXT_KEY]:{...V},...X},{requestHandler:K}=G;return F.resolve((Q)=>K.handle(Q.request,Z||{}),J)}};t0(mp0,"Command");var lp0=mp0,bp0=class I{constructor(){this._init=()=>{},this._ep={},this._middlewareFn=()=>[],this._commandName="",this._clientName="",this._additionalContext={},this._smithyContext={},this._inputFilterSensitiveLog=(d)=>d,this._outputFilterSensitiveLog=(d)=>d,this._serializer=null,this._deserializer=null}init(d){this._init=d}ep(d){return this._ep=d,this}m(d){return this._middlewareFn=d,this}s(d,G,Z={}){return this._smithyContext={service:d,operation:G,...Z},this}c(d={}){return this._additionalContext=d,this}n(d,G){return this._clientName=d,this._commandName=G,this}f(d=(Z)=>Z,G=(Z)=>Z){return this._inputFilterSensitiveLog=d,this._outputFilterSensitiveLog=G,this}ser(d){return this._serializer=d,this}de(d){return this._deserializer=d,this}build(){var d;let G=this,Z;return Z=(d=class extends lp0{constructor(...[C]){super();this.serialize=G._serializer,this.deserialize=G._deserializer,this.input=C??{},G._init(this)}static getEndpointParameterInstructions(){return G._ep}resolveMiddleware(C,W,w){return this.resolveMiddlewareWithContext(C,W,w,{CommandCtor:Z,middlewareFn:G._middlewareFn,clientName:G._clientName,commandName:G._commandName,inputFilterSensitiveLog:G._inputFilterSensitiveLog,outputFilterSensitiveLog:G._outputFilterSensitiveLog,smithyContext:G._smithyContext,additionalContext:G._additionalContext})}},t0(d,"CommandRef"),d)}};t0(bp0,"ClassBuilder");var CQ5=bp0,WQ5="***SensitiveInformation***",wQ5=t0((I,d)=>{for(let G of Object.keys(I)){let Z=I[G],C=t0(async function(w,B,A){let V=new Z(w);if(typeof B==="function")this.send(V,B);else if(typeof A==="function"){if(typeof B!=="object")throw new Error(`Expected http options but got ${typeof B}`);this.send(V,B||{},A)}else return this.send(V,B)},"methodImpl"),W=(G[0].toLowerCase()+G.slice(1)).replace(/Command$/,"");d.prototype[W]=C}},"createAggregatedClient"),BQ5=t0((I)=>{switch(I){case"true":return!0;case"false":return!1;default:throw new Error(`Unable to parse boolean value "${I}"`)}},"parseBoolean"),AQ5=t0((I)=>{if(I===null||I===void 0)return;if(typeof I==="number"){if(I===0||I===1)sy.warn(si(`Expected boolean, got ${typeof I}: ${I}`));if(I===0)return!1;if(I===1)return!0}if(typeof I==="string"){let d=I.toLowerCase();if(d==="false"||d==="true")sy.warn(si(`Expected boolean, got ${typeof I}: ${I}`));if(d==="false")return!1;if(d==="true")return!0}if(typeof I==="boolean")return I;throw new TypeError(`Expected boolean, got ${typeof I}: ${I}`)},"expectBoolean"),ry=t0((I)=>{if(I===null||I===void 0)return;if(typeof I==="string"){let d=parseFloat(I);if(!Number.isNaN(d)){if(String(d)!==String(I))sy.warn(si(`Expected number but observed string: ${I}`));return d}}if(typeof I==="number")return I;throw new TypeError(`Expected number, got ${typeof I}: ${I}`)},"expectNumber"),VQ5=Math.ceil(340282346638528860000000000000000000000),ai=t0((I)=>{let d=ry(I);if(d!==void 0&&!Number.isNaN(d)&&d!==1/0&&d!==-1/0){if(Math.abs(d)>VQ5)throw new TypeError(`Expected 32-bit float, got ${I}`)}return d},"expectFloat32"),ay=t0((I)=>{if(I===null||I===void 0)return;if(Number.isInteger(I)&&!Number.isNaN(I))return I;throw new TypeError(`Expected integer, got ${typeof I}: ${I}`)},"expectLong"),XQ5=ay,nV1=t0((I)=>oV1(I,32),"expectInt32"),rV1=t0((I)=>oV1(I,16),"expectShort"),aV1=t0((I)=>oV1(I,8),"expectByte"),oV1=t0((I,d)=>{let G=ay(I);if(G!==void 0&&YQ5(G,d)!==G)throw new TypeError(`Expected ${d}-bit integer, got ${I}`);return G},"expectSizedInt"),YQ5=t0((I,d)=>{switch(d){case 32:return Int32Array.of(I)[0];case 16:return Int16Array.of(I)[0];case 8:return Int8Array.of(I)[0]}},"castInt"),_Q5=t0((I,d)=>{if(I===null||I===void 0){if(d)throw new TypeError(`Expected a non-null value for ${d}`);throw new TypeError("Expected a non-null value")}return I},"expectNonNull"),hp0=t0((I)=>{if(I===null||I===void 0)return;if(typeof I==="object"&&!Array.isArray(I))return I;let d=Array.isArray(I)?"array":typeof I;throw new TypeError(`Expected object, got ${d}: ${I}`)},"expectObject"),DQ5=t0((I)=>{if(I===null||I===void 0)return;if(typeof I==="string")return I;if(["boolean","number","bigint"].includes(typeof I))return sy.warn(si(`Expected string, got ${typeof I}: ${I}`)),String(I);throw new TypeError(`Expected string, got ${typeof I}: ${I}`)},"expectString"),HQ5=t0((I)=>{if(I===null||I===void 0)return;let d=hp0(I),G=Object.entries(d).filter(([,Z])=>Z!=null).map(([Z])=>Z);if(G.length===0)throw new TypeError("Unions must have exactly one non-null member. None were found.");if(G.length>1)throw new TypeError(`Unions must have exactly one non-null member. Keys ${G} were not null.`);return d},"expectUnion"),eV1=t0((I)=>{if(typeof I=="string")return ry(Hq(I));return ry(I)},"strictParseDouble"),FQ5=eV1,jp0=t0((I)=>{if(typeof I=="string")return ai(Hq(I));return ai(I)},"strictParseFloat32"),gQ5=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,Hq=t0((I)=>{let d=I.match(gQ5);if(d===null||d[0].length!==I.length)throw new TypeError("Expected real number, got implicit NaN");return parseFloat(I)},"parseNumber"),tV1=t0((I)=>{if(typeof I=="string")return kp0(I);return ry(I)},"limitedParseDouble"),JQ5=tV1,KQ5=tV1,NQ5=t0((I)=>{if(typeof I=="string")return kp0(I);return ai(I)},"limitedParseFloat32"),kp0=t0((I)=>{switch(I){case"NaN":return NaN;case"Infinity":return 1/0;case"-Infinity":return-1/0;default:throw new Error(`Unable to parse float value: ${I}`)}},"parseFloatString"),xp0=t0((I)=>{if(typeof I==="string")return ay(Hq(I));return ay(I)},"strictParseLong"),zQ5=xp0,QQ5=t0((I)=>{if(typeof I==="string")return nV1(Hq(I));return nV1(I)},"strictParseInt32"),_q=t0((I)=>{if(typeof I==="string")return rV1(Hq(I));return rV1(I)},"strictParseShort"),cp0=t0((I)=>{if(typeof I==="string")return aV1(Hq(I));return aV1(I)},"strictParseByte"),si=t0((I)=>{return String(new TypeError(I).stack||I).split(` +`).slice(0,5).filter((d)=>!d.includes("stackTraceWarning")).join(` +`)},"stackTraceWarning"),sy={warn:console.warn},fQ5=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],IX1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function pp0(I){let d=I.getUTCFullYear(),G=I.getUTCMonth(),Z=I.getUTCDay(),C=I.getUTCDate(),W=I.getUTCHours(),w=I.getUTCMinutes(),B=I.getUTCSeconds(),A=C<10?`0${C}`:`${C}`,V=W<10?`0${W}`:`${W}`,X=w<10?`0${w}`:`${w}`,_=B<10?`0${B}`:`${B}`;return`${fQ5[Z]}, ${A} ${IX1[G]} ${d} ${V}:${X}:${_} GMT`}t0(pp0,"dateToUtcString");var qQ5=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/),RQ5=t0((I)=>{if(I===null||I===void 0)return;if(typeof I!=="string")throw new TypeError("RFC-3339 date-times must be expressed as strings");let d=qQ5.exec(I);if(!d)throw new TypeError("Invalid RFC-3339 date-time value");let[G,Z,C,W,w,B,A,V]=d,X=_q(Dq(Z)),_=XB(C,"month",1,12),F=XB(W,"day",1,31);return ny(X,_,F,{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V})},"parseRfc3339DateTime"),UQ5=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/),vQ5=t0((I)=>{if(I===null||I===void 0)return;if(typeof I!=="string")throw new TypeError("RFC-3339 date-times must be expressed as strings");let d=UQ5.exec(I);if(!d)throw new TypeError("Invalid RFC-3339 date-time value");let[G,Z,C,W,w,B,A,V,X]=d,_=_q(Dq(Z)),F=XB(C,"month",1,12),g=XB(W,"day",1,31),J=ny(_,F,g,{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V});if(X.toUpperCase()!="Z")J.setTime(J.getTime()-bQ5(X));return J},"parseRfc3339DateTimeWithOffset"),EQ5=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),MQ5=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),SQ5=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/),LQ5=t0((I)=>{if(I===null||I===void 0)return;if(typeof I!=="string")throw new TypeError("RFC-7231 date-times must be expressed as strings");let d=EQ5.exec(I);if(d){let[G,Z,C,W,w,B,A,V]=d;return ny(_q(Dq(W)),pV1(C),XB(Z,"day",1,31),{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V})}if(d=MQ5.exec(I),d){let[G,Z,C,W,w,B,A,V]=d;return uQ5(ny(PQ5(W),pV1(C),XB(Z,"day",1,31),{hours:w,minutes:B,seconds:A,fractionalMilliseconds:V}))}if(d=SQ5.exec(I),d){let[G,Z,C,W,w,B,A,V]=d;return ny(_q(Dq(V)),pV1(Z),XB(C.trimLeft(),"day",1,31),{hours:W,minutes:w,seconds:B,fractionalMilliseconds:A})}throw new TypeError("Invalid RFC-7231 date-time value")},"parseRfc7231DateTime"),yQ5=t0((I)=>{if(I===null||I===void 0)return;let d;if(typeof I==="number")d=I;else if(typeof I==="string")d=eV1(I);else throw new TypeError("Epoch timestamps must be expressed as floating point numbers or their string representation");if(Number.isNaN(d)||d===1/0||d===-1/0)throw new TypeError("Epoch timestamps must be valid, non-Infinite, non-NaN numerics");return new Date(Math.round(d*1000))},"parseEpochTimestamp"),ny=t0((I,d,G,Z)=>{let C=d-1;return OQ5(I,C,G),new Date(Date.UTC(I,C,G,XB(Z.hours,"hour",0,23),XB(Z.minutes,"minute",0,59),XB(Z.seconds,"seconds",0,60),lQ5(Z.fractionalMilliseconds)))},"buildDate"),PQ5=t0((I)=>{let d=new Date().getUTCFullYear(),G=Math.floor(d/100)*100+_q(Dq(I));if(G{if(I.getTime()-new Date().getTime()>$Q5)return new Date(Date.UTC(I.getUTCFullYear()-100,I.getUTCMonth(),I.getUTCDate(),I.getUTCHours(),I.getUTCMinutes(),I.getUTCSeconds(),I.getUTCMilliseconds()));return I},"adjustRfc850Year"),pV1=t0((I)=>{let d=IX1.indexOf(I);if(d<0)throw new TypeError(`Invalid month: ${I}`);return d+1},"parseMonthByShortName"),TQ5=[31,28,31,30,31,30,31,31,30,31,30,31],OQ5=t0((I,d,G)=>{let Z=TQ5[d];if(d===1&&mQ5(I))Z=29;if(G>Z)throw new TypeError(`Invalid day for ${IX1[d]} in ${I}: ${G}`)},"validateDayOfMonth"),mQ5=t0((I)=>{return I%4===0&&(I%100!==0||I%400===0)},"isLeapYear"),XB=t0((I,d,G,Z)=>{let C=cp0(Dq(I));if(CZ)throw new TypeError(`${d} must be between ${G} and ${Z}, inclusive`);return C},"parseDateValue"),lQ5=t0((I)=>{if(I===null||I===void 0)return 0;return jp0("0."+I)*1000},"parseMilliseconds"),bQ5=t0((I)=>{let d=I[0],G=1;if(d=="+")G=1;else if(d=="-")G=-1;else throw new TypeError(`Offset direction, ${d}, must be "+" or "-"`);let Z=Number(I.substring(1,3)),C=Number(I.substring(4,6));return G*(Z*60+C)*60*1000},"parseOffsetToMilliseconds"),Dq=t0((I)=>{let d=0;while(d{Object.entries(d).filter(([,Z])=>Z!==void 0).forEach(([Z,C])=>{if(I[Z]==null||I[Z]==="")I[Z]=C});let G=I.message||I.Message||"UnknownError";return I.message=G,delete I.Message,I},"decorateServiceException"),rp0=t0(({output:I,parsedBody:d,exceptionCtor:G,errorCode:Z})=>{let C=kQ5(I),W=C.httpStatusCode?C.httpStatusCode+"":void 0,w=new G({name:(d==null?void 0:d.code)||(d==null?void 0:d.Code)||Z||W||"UnknownError",$fault:"client",$metadata:C});throw np0(w,d)},"throwDefaultError"),jQ5=t0((I)=>{return({output:d,parsedBody:G,errorCode:Z})=>{rp0({output:d,parsedBody:G,exceptionCtor:I,errorCode:Z})}},"withBaseException"),kQ5=t0((I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),"deserializeMetadata"),xQ5=t0((I)=>{switch(I){case"standard":return{retryMode:"standard",connectionTimeout:3100};case"in-region":return{retryMode:"standard",connectionTimeout:1100};case"cross-region":return{retryMode:"standard",connectionTimeout:3100};case"mobile":return{retryMode:"standard",connectionTimeout:30000};default:return{}}},"loadConfigsForDefaultMode"),Pp0=!1,cQ5=t0((I)=>{if(I&&!Pp0&&parseInt(I.substring(1,I.indexOf(".")))<14)Pp0=!0},"emitWarningIfUnsupportedVersion"),pQ5=t0((I)=>{let d=[];for(let G in iV1.AlgorithmId){let Z=iV1.AlgorithmId[G];if(I[Z]===void 0)continue;d.push({algorithmId:()=>Z,checksumConstructor:()=>I[Z]})}return{_checksumAlgorithms:d,addChecksumAlgorithm(G){this._checksumAlgorithms.push(G)},checksumAlgorithms(){return this._checksumAlgorithms}}},"getChecksumConfiguration"),iQ5=t0((I)=>{let d={};return I.checksumAlgorithms().forEach((G)=>{d[G.algorithmId()]=G.checksumConstructor()}),d},"resolveChecksumRuntimeConfig"),nQ5=t0((I)=>{let d=I.retryStrategy;return{setRetryStrategy(G){d=G},retryStrategy(){return d}}},"getRetryConfiguration"),rQ5=t0((I)=>{let d={};return d.retryStrategy=I.retryStrategy(),d},"resolveRetryRuntimeConfig"),ap0=t0((I)=>{return{...pQ5(I),...nQ5(I)}},"getDefaultExtensionConfiguration"),aQ5=ap0,sQ5=t0((I)=>{return{...iQ5(I),...rQ5(I)}},"resolveDefaultRuntimeConfig");function oi(I){return encodeURIComponent(I).replace(/[!'()*]/g,function(d){return"%"+d.charCodeAt(0).toString(16).toUpperCase()})}t0(oi,"extendedEncodeURIComponent");var oQ5=t0((I)=>Array.isArray(I)?I:[I],"getArrayIfSingleItem"),sp0=t0((I)=>{for(let G in I)if(I.hasOwnProperty(G)&&I[G]["#text"]!==void 0)I[G]=I[G]["#text"];else if(typeof I[G]==="object"&&I[G]!==null)I[G]=sp0(I[G]);return I},"getValueFromTextNode"),oy=t0(function(){let I=Object.getPrototypeOf(this).constructor,G=new(Function.bind.apply(String,[null,...arguments]));return Object.setPrototypeOf(G,I.prototype),G},"StringWrapper");oy.prototype=Object.create(String.prototype,{constructor:{value:oy,enumerable:!1,writable:!0,configurable:!0}});Object.setPrototypeOf(oy,String);var op0=class I extends oy{deserializeJSON(){return JSON.parse(super.toString())}toJSON(){return super.toString()}static fromObject(d){if(d instanceof I)return d;else if(d instanceof String||typeof d==="string")return new I(d);return new I(JSON.stringify(d))}};t0(op0,"LazyJsonString");var eQ5=op0;function dX1(I,d,G){let Z,C,W;if(typeof d==="undefined"&&typeof G==="undefined")Z={},W=I;else if(Z=I,typeof d==="function")return C=d,W=G,df5(Z,C,W);else W=d;for(let w of Object.keys(W)){if(!Array.isArray(W[w])){Z[w]=W[w];continue}ep0(Z,null,W,w)}return Z}t0(dX1,"map");var tQ5=t0((I)=>{let d={};for(let[G,Z]of Object.entries(I||{}))d[G]=[,Z];return d},"convertMap"),If5=t0((I,d)=>{let G={};for(let Z in d)ep0(G,I,d,Z);return G},"take"),df5=t0((I,d,G)=>{return dX1(I,Object.entries(G).reduce((Z,[C,W])=>{if(Array.isArray(W))Z[C]=W;else if(typeof W==="function")Z[C]=[d,W()];else Z[C]=[d,W];return Z},{}))},"mapWithFilter"),ep0=t0((I,d,G,Z)=>{if(d!==null){let w=G[Z];if(typeof w==="function")w=[,w];let[B=Gf5,A=Zf5,V=Z]=w;if(typeof B==="function"&&B(d[V])||typeof B!=="function"&&!!B)I[Z]=A(d[V]);return}let[C,W]=G[Z];if(typeof W==="function"){let w,B=C===void 0&&(w=W())!=null,A=typeof C==="function"&&!!C(void 0)||typeof C!=="function"&&!!C;if(B)I[Z]=w;else if(A)I[Z]=W()}else{let w=C===void 0&&W!=null,B=typeof C==="function"&&!!C(W)||typeof C!=="function"&&!!C;if(w||B)I[Z]=W}},"applyInstruction"),Gf5=t0((I)=>I!=null,"nonNullish"),Zf5=t0((I)=>I,"pass"),Cf5=t0((I,d,G,Z,C,W)=>{if(d!=null&&d[G]!==void 0){let w=Z();if(w.length<=0)throw new Error("Empty value provided for input HTTP label: "+G+".");I=I.replace(C,W?w.split("/").map((B)=>oi(B)).join("/"):oi(w))}else throw new Error("No value provided for input HTTP label: "+G+".");return I},"resolvedPath"),Wf5=t0((I)=>{if(I!==I)return"NaN";switch(I){case 1/0:return"Infinity";case-1/0:return"-Infinity";default:return I}},"serializeFloat"),sV1=t0((I)=>{if(I==null)return{};if(Array.isArray(I))return I.filter((d)=>d!=null).map(sV1);if(typeof I==="object"){let d={};for(let G of Object.keys(I)){if(I[G]==null)continue;d[G]=sV1(I[G])}return d}return I},"_json");function tp0(I,d,G){if(G<=0||!Number.isInteger(G))throw new Error("Invalid number of delimiters ("+G+") for splitEvery.");let Z=I.split(d);if(G===1)return Z;let C=[],W="";for(let w=0;w{Object.defineProperty(di0,"__esModule",{value:!0});di0.getHostHeaderPlugin=di0.hostHeaderMiddlewareOptions=di0.hostHeaderMiddleware=di0.resolveHostHeaderConfig=void 0;var wf5=t8();function Bf5(I){return I}di0.resolveHostHeaderConfig=Bf5;var Af5=(I)=>(d)=>async(G)=>{if(!wf5.HttpRequest.isInstance(G.request))return d(G);let{request:Z}=G,{handlerProtocol:C=""}=I.requestHandler.metadata||{};if(C.indexOf("h2")>=0&&!Z.headers[":authority"])delete Z.headers.host,Z.headers[":authority"]="";else if(!Z.headers.host){let W=Z.hostname;if(Z.port!=null)W+=`:${Z.port}`;Z.headers.host=W}return d(G)};di0.hostHeaderMiddleware=Af5;di0.hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};var Vf5=(I)=>({applyToStack:(d)=>{d.add(di0.hostHeaderMiddleware(I),di0.hostHeaderMiddlewareOptions)}});di0.getHostHeaderPlugin=Vf5});var Vi0=Y((Wi0)=>{Object.defineProperty(Wi0,"__esModule",{value:!0});Wi0.getLoggerPlugin=Wi0.loggerMiddlewareOptions=Wi0.loggerMiddleware=void 0;var Yf5=()=>(I,d)=>async(G)=>{var Z,C;try{let W=await I(G),{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X,overrideOutputFilterSensitiveLog:_}=V,F=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog,g=_!==null&&_!==void 0?_:d.outputFilterSensitiveLog,{$metadata:J,...K}=W.output;return(Z=A===null||A===void 0?void 0:A.info)===null||Z===void 0||Z.call(A,{clientName:w,commandName:B,input:F(G.input),output:g(K),metadata:J}),W}catch(W){let{clientName:w,commandName:B,logger:A,dynamoDbDocumentClientOptions:V={}}=d,{overrideInputFilterSensitiveLog:X}=V,_=X!==null&&X!==void 0?X:d.inputFilterSensitiveLog;throw(C=A===null||A===void 0?void 0:A.error)===null||C===void 0||C.call(A,{clientName:w,commandName:B,input:_(G.input),error:W,metadata:W.$metadata}),W}};Wi0.loggerMiddleware=Yf5;Wi0.loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};var _f5=(I)=>({applyToStack:(d)=>{d.add(Wi0.loggerMiddleware(),Wi0.loggerMiddlewareOptions)}});Wi0.getLoggerPlugin=_f5});var ty=Y((GX1)=>{Object.defineProperty(GX1,"__esModule",{value:!0});var Df5=x1();Df5.__exportStar(Vi0(),GX1)});var IP=Y((Yi0)=>{Object.defineProperty(Yi0,"__esModule",{value:!0});Yi0.getRecursionDetectionPlugin=Yi0.addRecursionDetectionMiddlewareOptions=Yi0.recursionDetectionMiddleware=void 0;var Hf5=t8(),Xi0="X-Amzn-Trace-Id",Ff5="AWS_LAMBDA_FUNCTION_NAME",gf5="_X_AMZN_TRACE_ID",Jf5=(I)=>(d)=>async(G)=>{let{request:Z}=G;if(!Hf5.HttpRequest.isInstance(Z)||I.runtime!=="node"||Z.headers.hasOwnProperty(Xi0))return d(G);let C=process.env[Ff5],W=process.env[gf5],w=(B)=>typeof B==="string"&&B.length>0;if(w(C)&&w(W))Z.headers[Xi0]=W;return d({...G,request:Z})};Yi0.recursionDetectionMiddleware=Jf5;Yi0.addRecursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};var Kf5=(I)=>({applyToStack:(d)=>{d.add(Yi0.recursionDetectionMiddleware(I),Yi0.addRecursionDetectionMiddlewareOptions)}});Yi0.getRecursionDetectionPlugin=Kf5});var x3=Y((jG3,Ni0)=>{var{defineProperty:ti,getOwnPropertyDescriptor:Nf5,getOwnPropertyNames:zf5}=Object,Qf5=Object.prototype.hasOwnProperty,zJ=(I,d)=>ti(I,"name",{value:d,configurable:!0}),ff5=(I,d)=>{for(var G in d)ti(I,G,{get:d[G],enumerable:!0})},qf5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of zf5(d))if(!Qf5.call(I,C)&&C!==G)ti(I,C,{get:()=>d[C],enumerable:!(Z=Nf5(d,C))||Z.enumerable})}return I},Rf5=(I)=>qf5(ti({},"__esModule",{value:!0}),I),Fi0={};ff5(Fi0,{CredentialsProviderError:()=>Uf5,ProviderError:()=>In,TokenProviderError:()=>vf5,chain:()=>Ef5,fromStatic:()=>Mf5,memoize:()=>Sf5});Ni0.exports=Rf5(Fi0);var gi0=class I extends Error{constructor(d,G=!0){super(d);this.tryNextLink=G,this.name="ProviderError",Object.setPrototypeOf(this,I.prototype)}static from(d,G=!0){return Object.assign(new this(d.message,G),d)}};zJ(gi0,"ProviderError");var In=gi0,Ji0=class I extends In{constructor(d,G=!0){super(d,G);this.tryNextLink=G,this.name="CredentialsProviderError",Object.setPrototypeOf(this,I.prototype)}};zJ(Ji0,"CredentialsProviderError");var Uf5=Ji0,Ki0=class I extends In{constructor(d,G=!0){super(d,G);this.tryNextLink=G,this.name="TokenProviderError",Object.setPrototypeOf(this,I.prototype)}};zJ(Ki0,"TokenProviderError");var vf5=Ki0,Ef5=zJ((...I)=>async()=>{if(I.length===0)throw new In("No providers in chain");let d;for(let G of I)try{return await G()}catch(Z){if(d=Z,Z==null?void 0:Z.tryNextLink)continue;throw Z}throw d},"chain"),Mf5=zJ((I)=>()=>Promise.resolve(I),"fromStatic"),Sf5=zJ((I,d,G)=>{let Z,C,W,w=!1,B=zJ(async()=>{if(!C)C=I();try{Z=await C,W=!0,w=!1}finally{C=void 0}return Z},"coalesceProvider");if(d===void 0)return async(A)=>{if(!W||(A==null?void 0:A.forceRefresh))Z=await B();return Z};return async(A)=>{if(!W||(A==null?void 0:A.forceRefresh))Z=await B();if(w)return Z;if(G&&!G(Z))return w=!0,Z;if(d(Z))return await B(),Z;return Z}},"memoize")});var Fq=Y((kG3,qi0)=>{var{defineProperty:dn,getOwnPropertyDescriptor:Lf5,getOwnPropertyNames:yf5}=Object,Pf5=Object.prototype.hasOwnProperty,Qi0=(I,d)=>dn(I,"name",{value:d,configurable:!0}),$f5=(I,d)=>{for(var G in d)dn(I,G,{get:d[G],enumerable:!0})},uf5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of yf5(d))if(!Pf5.call(I,C)&&C!==G)dn(I,C,{get:()=>d[C],enumerable:!(Z=Lf5(d,C))||Z.enumerable})}return I},Tf5=(I)=>uf5(dn({},"__esModule",{value:!0}),I),fi0={};$f5(fi0,{getSmithyContext:()=>Of5,normalizeProvider:()=>mf5});qi0.exports=Tf5(fi0);var zi0=k3(),Of5=Qi0((I)=>I[zi0.SMITHY_CONTEXT_KEY]||(I[zi0.SMITHY_CONTEXT_KEY]={}),"getSmithyContext"),mf5=Qi0((I)=>{if(typeof I==="function")return I;let d=Promise.resolve(I);return()=>d},"normalizeProvider")});var vi0=Y((xG3,Ui0)=>{var{defineProperty:Gn,getOwnPropertyDescriptor:lf5,getOwnPropertyNames:bf5}=Object,hf5=Object.prototype.hasOwnProperty,jf5=(I,d)=>Gn(I,"name",{value:d,configurable:!0}),kf5=(I,d)=>{for(var G in d)Gn(I,G,{get:d[G],enumerable:!0})},xf5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of bf5(d))if(!hf5.call(I,C)&&C!==G)Gn(I,C,{get:()=>d[C],enumerable:!(Z=lf5(d,C))||Z.enumerable})}return I},cf5=(I)=>xf5(Gn({},"__esModule",{value:!0}),I),Ri0={};kf5(Ri0,{isArrayBuffer:()=>pf5});Ui0.exports=cf5(Ri0);var pf5=jf5((I)=>typeof ArrayBuffer==="function"&&I instanceof ArrayBuffer||Object.prototype.toString.call(I)==="[object ArrayBuffer]","isArrayBuffer")});var ii0=Y((cG3,pi0)=>{var{defineProperty:Bn,getOwnPropertyDescriptor:if5,getOwnPropertyNames:nf5}=Object,rf5=Object.prototype.hasOwnProperty,E6=(I,d)=>Bn(I,"name",{value:d,configurable:!0}),af5=(I,d)=>{for(var G in d)Bn(I,G,{get:d[G],enumerable:!0})},sf5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of nf5(d))if(!rf5.call(I,C)&&C!==G)Bn(I,C,{get:()=>d[C],enumerable:!(Z=if5(d,C))||Z.enumerable})}return I},of5=(I)=>sf5(Bn({},"__esModule",{value:!0}),I),yi0={};af5(yi0,{SignatureV4:()=>Rq5,clearCredentialCache:()=>Hq5,createScope:()=>Wn,getCanonicalHeaders:()=>wX1,getCanonicalQuery:()=>bi0,getPayloadHash:()=>wn,getSigningKey:()=>li0,moveHeadersToQuery:()=>xi0,prepareRequest:()=>AX1});pi0.exports=of5(yi0);var Ei0=Fq(),ZX1=SZ(),ef5="X-Amz-Algorithm",tf5="X-Amz-Credential",Pi0="X-Amz-Date",Iq5="X-Amz-SignedHeaders",dq5="X-Amz-Expires",$i0="X-Amz-Signature",ui0="X-Amz-Security-Token",Ti0="authorization",Oi0=Pi0.toLowerCase(),Gq5="date",Zq5=[Ti0,Oi0,Gq5],Cq5=$i0.toLowerCase(),WX1="x-amz-content-sha256",Wq5=ui0.toLowerCase(),wq5={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0},Bq5=/^proxy-/,Aq5=/^sec-/,CX1="AWS4-HMAC-SHA256",Vq5="AWS4-HMAC-SHA256-PAYLOAD",Xq5="UNSIGNED-PAYLOAD",Yq5=50,mi0="aws4_request",_q5=604800,RD=RV1(),Dq5=SZ(),gq={},Cn=[],Wn=E6((I,d,G)=>`${I}/${d}/${G}/${mi0}`,"createScope"),li0=E6(async(I,d,G,Z,C)=>{let W=await Mi0(I,d.secretAccessKey,d.accessKeyId),w=`${G}:${Z}:${C}:${RD.toHex(W)}:${d.sessionToken}`;if(w in gq)return gq[w];Cn.push(w);while(Cn.length>Yq5)delete gq[Cn.shift()];let B=`AWS4${d.secretAccessKey}`;for(let A of[G,Z,C,mi0])B=await Mi0(I,B,A);return gq[w]=B},"getSigningKey"),Hq5=E6(()=>{Cn.length=0,Object.keys(gq).forEach((I)=>{delete gq[I]})},"clearCredentialCache"),Mi0=E6((I,d,G)=>{let Z=new I(d);return Z.update(Dq5.toUint8Array(G)),Z.digest()},"hmac"),wX1=E6(({headers:I},d,G)=>{let Z={};for(let C of Object.keys(I).sort()){if(I[C]==null)continue;let W=C.toLowerCase();if(W in wq5||(d==null?void 0:d.has(W))||Bq5.test(W)||Aq5.test(W)){if(!G||G&&!G.has(W))continue}Z[W]=I[C].trim().replace(/\s+/g," ")}return Z},"getCanonicalHeaders"),dP=$V1(),bi0=E6(({query:I={}})=>{let d=[],G={};for(let Z of Object.keys(I).sort()){if(Z.toLowerCase()===Cq5)continue;d.push(Z);let C=I[Z];if(typeof C==="string")G[Z]=`${dP.escapeUri(Z)}=${dP.escapeUri(C)}`;else if(Array.isArray(C))G[Z]=C.slice(0).reduce((W,w)=>W.concat([`${dP.escapeUri(Z)}=${dP.escapeUri(w)}`]),[]).sort().join("&")}return d.map((Z)=>G[Z]).filter((Z)=>Z).join("&")},"getCanonicalQuery"),Fq5=vi0(),gq5=SZ(),wn=E6(async({headers:I,body:d},G)=>{for(let Z of Object.keys(I))if(Z.toLowerCase()===WX1)return I[Z];if(d==null)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";else if(typeof d==="string"||ArrayBuffer.isView(d)||Fq5.isArrayBuffer(d)){let Z=new G;return Z.update(gq5.toUint8Array(d)),RD.toHex(await Z.digest())}return Xq5},"getPayloadHash"),Si0=SZ(),hi0=class I{format(d){let G=[];for(let W of Object.keys(d)){let w=Si0.fromUtf8(W);G.push(Uint8Array.from([w.byteLength]),w,this.formatHeaderValue(d[W]))}let Z=new Uint8Array(G.reduce((W,w)=>W+w.byteLength,0)),C=0;for(let W of G)Z.set(W,C),C+=W.byteLength;return Z}formatHeaderValue(d){switch(d.type){case"boolean":return Uint8Array.from([d.value?0:1]);case"byte":return Uint8Array.from([2,d.value]);case"short":let G=new DataView(new ArrayBuffer(3));return G.setUint8(0,3),G.setInt16(1,d.value,!1),new Uint8Array(G.buffer);case"integer":let Z=new DataView(new ArrayBuffer(5));return Z.setUint8(0,4),Z.setInt32(1,d.value,!1),new Uint8Array(Z.buffer);case"long":let C=new Uint8Array(9);return C[0]=5,C.set(d.value.bytes,1),C;case"binary":let W=new DataView(new ArrayBuffer(3+d.value.byteLength));W.setUint8(0,6),W.setUint16(1,d.value.byteLength,!1);let w=new Uint8Array(W.buffer);return w.set(d.value,3),w;case"string":let B=Si0.fromUtf8(d.value),A=new DataView(new ArrayBuffer(3+B.byteLength));A.setUint8(0,7),A.setUint16(1,B.byteLength,!1);let V=new Uint8Array(A.buffer);return V.set(B,3),V;case"timestamp":let X=new Uint8Array(9);return X[0]=8,X.set(Nq5.fromNumber(d.value.valueOf()).bytes,1),X;case"uuid":if(!Kq5.test(d.value))throw new Error(`Invalid UUID received: ${d.value}`);let _=new Uint8Array(17);return _[0]=9,_.set(RD.fromHex(d.value.replace(/\-/g,"")),1),_}}};E6(hi0,"HeaderFormatter");var Jq5=hi0,Kq5=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/,ji0=class I{constructor(d){if(this.bytes=d,d.byteLength!==8)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(d){if(d>9223372036854776000||d<-9223372036854776000)throw new Error(`${d} is too large (or, if negative, too small) to represent as an Int64`);let G=new Uint8Array(8);for(let Z=7,C=Math.abs(Math.round(d));Z>-1&&C>0;Z--,C/=256)G[Z]=C;if(d<0)BX1(G);return new I(G)}valueOf(){let d=this.bytes.slice(0),G=d[0]&128;if(G)BX1(d);return parseInt(RD.toHex(d),16)*(G?-1:1)}toString(){return String(this.valueOf())}};E6(ji0,"Int64");var Nq5=ji0;function BX1(I){for(let d=0;d<8;d++)I[d]^=255;for(let d=7;d>-1;d--)if(I[d]++,I[d]!==0)break}E6(BX1,"negate");var zq5=E6((I,d)=>{I=I.toLowerCase();for(let G of Object.keys(d))if(I===G.toLowerCase())return!0;return!1},"hasHeader"),ki0=E6(({headers:I,query:d,...G})=>({...G,headers:{...I},query:d?Qq5(d):void 0}),"cloneRequest"),Qq5=E6((I)=>Object.keys(I).reduce((d,G)=>{let Z=I[G];return{...d,[G]:Array.isArray(Z)?[...Z]:Z}},{}),"cloneQuery"),xi0=E6((I,d={})=>{var G;let{headers:Z,query:C={}}=typeof I.clone==="function"?I.clone():ki0(I);for(let W of Object.keys(Z)){let w=W.toLowerCase();if(w.slice(0,6)==="x-amz-"&&!((G=d.unhoistableHeaders)==null?void 0:G.has(w)))C[W]=Z[W],delete Z[W]}return{...I,headers:Z,query:C}},"moveHeadersToQuery"),AX1=E6((I)=>{I=typeof I.clone==="function"?I.clone():ki0(I);for(let d of Object.keys(I.headers))if(Zq5.indexOf(d.toLowerCase())>-1)delete I.headers[d];return I},"prepareRequest"),fq5=E6((I)=>qq5(I).toISOString().replace(/\.\d{3}Z$/,"Z"),"iso8601"),qq5=E6((I)=>{if(typeof I==="number")return new Date(I*1000);if(typeof I==="string"){if(Number(I))return new Date(Number(I)*1000);return new Date(I)}return I},"toDate"),ci0=class I{constructor({applyChecksum:d,credentials:G,region:Z,service:C,sha256:W,uriEscapePath:w=!0}){this.headerFormatter=new Jq5,this.service=C,this.sha256=W,this.uriEscapePath=w,this.applyChecksum=typeof d==="boolean"?d:!0,this.regionProvider=Ei0.normalizeProvider(Z),this.credentialProvider=Ei0.normalizeProvider(G)}async presign(d,G={}){let{signingDate:Z=new Date,expiresIn:C=3600,unsignableHeaders:W,unhoistableHeaders:w,signableHeaders:B,signingRegion:A,signingService:V}=G,X=await this.credentialProvider();this.validateResolvedCredentials(X);let _=A??await this.regionProvider(),{longDate:F,shortDate:g}=Zn(Z);if(C>_q5)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");let J=Wn(g,_,V??this.service),K=xi0(AX1(d),{unhoistableHeaders:w});if(X.sessionToken)K.query[ui0]=X.sessionToken;K.query[ef5]=CX1,K.query[tf5]=`${X.accessKeyId}/${J}`,K.query[Pi0]=F,K.query[dq5]=C.toString(10);let Q=wX1(K,W,B);return K.query[Iq5]=Li0(Q),K.query[$i0]=await this.getSignature(F,J,this.getSigningKey(X,_,g,V),this.createCanonicalRequest(K,Q,await wn(d,this.sha256))),K}async sign(d,G){if(typeof d==="string")return this.signString(d,G);else if(d.headers&&d.payload)return this.signEvent(d,G);else if(d.message)return this.signMessage(d,G);else return this.signRequest(d,G)}async signEvent({headers:d,payload:G},{signingDate:Z=new Date,priorSignature:C,signingRegion:W,signingService:w}){let B=W??await this.regionProvider(),{shortDate:A,longDate:V}=Zn(Z),X=Wn(A,B,w??this.service),_=await wn({headers:{},body:G},this.sha256),F=new this.sha256;F.update(d);let g=RD.toHex(await F.digest()),J=[Vq5,V,X,C,g,_].join(` +`);return this.signString(J,{signingDate:Z,signingRegion:B,signingService:w})}async signMessage(d,{signingDate:G=new Date,signingRegion:Z,signingService:C}){return this.signEvent({headers:this.headerFormatter.format(d.message.headers),payload:d.message.body},{signingDate:G,signingRegion:Z,signingService:C,priorSignature:d.priorSignature}).then((w)=>{return{message:d.message,signature:w}})}async signString(d,{signingDate:G=new Date,signingRegion:Z,signingService:C}={}){let W=await this.credentialProvider();this.validateResolvedCredentials(W);let w=Z??await this.regionProvider(),{shortDate:B}=Zn(G),A=new this.sha256(await this.getSigningKey(W,w,B,C));return A.update(ZX1.toUint8Array(d)),RD.toHex(await A.digest())}async signRequest(d,{signingDate:G=new Date,signableHeaders:Z,unsignableHeaders:C,signingRegion:W,signingService:w}={}){let B=await this.credentialProvider();this.validateResolvedCredentials(B);let A=W??await this.regionProvider(),V=AX1(d),{longDate:X,shortDate:_}=Zn(G),F=Wn(_,A,w??this.service);if(V.headers[Oi0]=X,B.sessionToken)V.headers[Wq5]=B.sessionToken;let g=await wn(V,this.sha256);if(!zq5(WX1,V.headers)&&this.applyChecksum)V.headers[WX1]=g;let J=wX1(V,C,Z),K=await this.getSignature(X,F,this.getSigningKey(B,A,_,w),this.createCanonicalRequest(V,J,g));return V.headers[Ti0]=`${CX1} Credential=${B.accessKeyId}/${F}, SignedHeaders=${Li0(J)}, Signature=${K}`,V}createCanonicalRequest(d,G,Z){let C=Object.keys(G).sort();return`${d.method} +${this.getCanonicalPath(d)} +${bi0(d)} +${C.map((W)=>`${W}:${G[W]}`).join(` +`)} + +${C.join(";")} +${Z}`}async createStringToSign(d,G,Z){let C=new this.sha256;C.update(ZX1.toUint8Array(Z));let W=await C.digest();return`${CX1} +${d} +${G} +${RD.toHex(W)}`}getCanonicalPath({path:d}){if(this.uriEscapePath){let G=[];for(let W of d.split("/")){if((W==null?void 0:W.length)===0)continue;if(W===".")continue;if(W==="..")G.pop();else G.push(W)}let Z=`${(d==null?void 0:d.startsWith("/"))?"/":""}${G.join("/")}${G.length>0&&(d==null?void 0:d.endsWith("/"))?"/":""}`;return dP.escapeUri(Z).replace(/%2F/g,"/")}return d}async getSignature(d,G,Z,C){let W=await this.createStringToSign(d,G,C),w=new this.sha256(await Z);return w.update(ZX1.toUint8Array(W)),RD.toHex(await w.digest())}getSigningKey(d,G,Z,C){return li0(this.sha256,d,Z,G,C||this.service)}validateResolvedCredentials(d){if(typeof d!=="object"||typeof d.accessKeyId!=="string"||typeof d.secretAccessKey!=="string")throw new Error("Resolved credential object is not valid")}};E6(ci0,"SignatureV4");var Rq5=ci0,Zn=E6((I)=>{let d=fq5(I).replace(/[\-:]/g,"");return{longDate:d,shortDate:d.slice(0,8)}},"formatDate"),Li0=E6((I)=>Object.keys(I).sort().join(";"),"getCanonicalHeaderList")});var si0=Y((ri0)=>{Object.defineProperty(ri0,"__esModule",{value:!0});ri0.resolveSigV4AuthConfig=ri0.resolveAwsAuthConfig=void 0;var Uq5=x3(),VX1=ii0(),Jq=Fq(),vq5=300000,Eq5=(I)=>{let d=I.credentials?ni0(I.credentials):I.credentialDefaultProvider(I),{signingEscapePath:G=!0,systemClockOffset:Z=I.systemClockOffset||0,sha256:C}=I,W;if(I.signer)W=Jq.normalizeProvider(I.signer);else if(I.regionInfoProvider)W=()=>Jq.normalizeProvider(I.region)().then(async(w)=>[await I.regionInfoProvider(w,{useFipsEndpoint:await I.useFipsEndpoint(),useDualstackEndpoint:await I.useDualstackEndpoint()})||{},w]).then(([w,B])=>{let{signingRegion:A,signingService:V}=w;I.signingRegion=I.signingRegion||A||B,I.signingName=I.signingName||V||I.serviceId;let X={...I,credentials:d,region:I.signingRegion,service:I.signingName,sha256:C,uriEscapePath:G};return new(I.signerConstructor||VX1.SignatureV4)(X)});else W=async(w)=>{w=Object.assign({},{name:"sigv4",signingName:I.signingName||I.defaultSigningName,signingRegion:await Jq.normalizeProvider(I.region)(),properties:{}},w);let{signingRegion:B,signingName:A}=w;I.signingRegion=I.signingRegion||B,I.signingName=I.signingName||A||I.serviceId;let V={...I,credentials:d,region:I.signingRegion,service:I.signingName,sha256:C,uriEscapePath:G};return new(I.signerConstructor||VX1.SignatureV4)(V)};return{...I,systemClockOffset:Z,signingEscapePath:G,credentials:d,signer:W}};ri0.resolveAwsAuthConfig=Eq5;var Mq5=(I)=>{let d=I.credentials?ni0(I.credentials):I.credentialDefaultProvider(I),{signingEscapePath:G=!0,systemClockOffset:Z=I.systemClockOffset||0,sha256:C}=I,W;if(I.signer)W=Jq.normalizeProvider(I.signer);else W=Jq.normalizeProvider(new VX1.SignatureV4({credentials:d,region:I.region,service:I.signingName,sha256:C,uriEscapePath:G}));return{...I,systemClockOffset:Z,signingEscapePath:G,credentials:d,signer:W}};ri0.resolveSigV4AuthConfig=Mq5;var ni0=(I)=>{if(typeof I==="function")return Uq5.memoize(I,(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()d.expiration!==void 0);return Jq.normalizeProvider(I)}});var XX1=Y((oi0)=>{Object.defineProperty(oi0,"__esModule",{value:!0});oi0.getSkewCorrectedDate=void 0;var Lq5=(I)=>new Date(Date.now()+I);oi0.getSkewCorrectedDate=Lq5});var dn0=Y((ti0)=>{Object.defineProperty(ti0,"__esModule",{value:!0});ti0.isClockSkewed=void 0;var yq5=XX1(),Pq5=(I,d)=>Math.abs(yq5.getSkewCorrectedDate(d).getTime()-I)>=300000;ti0.isClockSkewed=Pq5});var Cn0=Y((Gn0)=>{Object.defineProperty(Gn0,"__esModule",{value:!0});Gn0.getUpdatedSystemClockOffset=void 0;var $q5=dn0(),uq5=(I,d)=>{let G=Date.parse(I);if($q5.isClockSkewed(G,d))return G-Date.now();return d};Gn0.getUpdatedSystemClockOffset=uq5});var Dn0=Y((An0)=>{Object.defineProperty(An0,"__esModule",{value:!0});An0.getSigV4AuthPlugin=An0.getAwsAuthPlugin=An0.awsAuthMiddlewareOptions=An0.awsAuthMiddleware=void 0;var Bn0=t8(),Tq5=XX1(),Wn0=Cn0(),Oq5=(I)=>(d,G)=>async function(Z){var C,W,w,B;if(!Bn0.HttpRequest.isInstance(Z.request))return d(Z);let A=(w=(W=(C=G.endpointV2)===null||C===void 0?void 0:C.properties)===null||W===void 0?void 0:W.authSchemes)===null||w===void 0?void 0:w[0],V=(A===null||A===void 0?void 0:A.name)==="sigv4a"?(B=A===null||A===void 0?void 0:A.signingRegionSet)===null||B===void 0?void 0:B.join(","):void 0,X=await I.signer(A),_=await d({...Z,request:await X.sign(Z.request,{signingDate:Tq5.getSkewCorrectedDate(I.systemClockOffset),signingRegion:V||G.signing_region,signingService:G.signing_service})}).catch((g)=>{var J;let K=(J=g.ServerTime)!==null&&J!==void 0?J:wn0(g.$response);if(K)I.systemClockOffset=Wn0.getUpdatedSystemClockOffset(K,I.systemClockOffset);throw g}),F=wn0(_.response);if(F)I.systemClockOffset=Wn0.getUpdatedSystemClockOffset(F,I.systemClockOffset);return _};An0.awsAuthMiddleware=Oq5;var wn0=(I)=>{var d,G,Z;return Bn0.HttpResponse.isInstance(I)?(G=(d=I.headers)===null||d===void 0?void 0:d.date)!==null&&G!==void 0?G:(Z=I.headers)===null||Z===void 0?void 0:Z.Date:void 0};An0.awsAuthMiddlewareOptions={name:"awsAuthMiddleware",tags:["SIGNATURE","AWSAUTH"],relation:"after",toMiddleware:"retryMiddleware",override:!0};var mq5=(I)=>({applyToStack:(d)=>{d.addRelativeTo(An0.awsAuthMiddleware(I),An0.awsAuthMiddlewareOptions)}});An0.getAwsAuthPlugin=mq5;An0.getSigV4AuthPlugin=An0.getAwsAuthPlugin});var OV=Y((An)=>{Object.defineProperty(An,"__esModule",{value:!0});var Hn0=x1();Hn0.__exportStar(si0(),An);Hn0.__exportStar(Dn0(),An)});var Jn0=Y((Fn0)=>{Object.defineProperty(Fn0,"__esModule",{value:!0});Fn0.resolveUserAgentConfig=void 0;function lq5(I){return{...I,customUserAgent:typeof I.customUserAgent==="string"?[[I.customUserAgent]]:I.customUserAgent}}Fn0.resolveUserAgentConfig=lq5});var Kn0=Y((eG3,bq5)=>{bq5.exports={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-east-1",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"aws-global":{description:"AWS Standard global region"},"ca-central-1":{description:"Canada (Central)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"il-central-1":{description:"Israel (Tel Aviv)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",implicitGlobalRegion:"cn-northwest-1",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"AWS China global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-gov-west-1",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"AWS GovCloud (US) global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"c2s.ic.gov",implicitGlobalRegion:"us-iso-east-1",name:"aws-iso",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"AWS ISO (US) global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"sc2s.sgov.gov",implicitGlobalRegion:"us-isob-east-1",name:"aws-iso-b",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"AWS ISOB (US) global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"cloud.adc-e.uk",implicitGlobalRegion:"eu-isoe-west-1",name:"aws-iso-e",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{}},{id:"aws-iso-f",outputs:{dnsSuffix:"csp.hci.ic.gov",dualStackDnsSuffix:"csp.hci.ic.gov",implicitGlobalRegion:"us-isof-south-1",name:"aws-iso-f",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isof\\-\\w+\\-\\d+$",regions:{}}],version:"1.1"}});var YX1=Y((fn0)=>{Object.defineProperty(fn0,"__esModule",{value:!0});fn0.getUserAgentPrefix=fn0.useDefaultPartitionInfo=fn0.setPartitionInfo=fn0.partition=void 0;var hq5=x1(),Nn0=hq5.__importDefault(Kn0()),zn0=Nn0.default,Qn0="",jq5=(I)=>{let{partitions:d}=zn0;for(let Z of d){let{regions:C,outputs:W}=Z;for(let[w,B]of Object.entries(C))if(w===I)return{...W,...B}}for(let Z of d){let{regionRegex:C,outputs:W}=Z;if(new RegExp(C).test(I))return{...W}}let G=d.find((Z)=>Z.id==="aws");if(!G)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...G.outputs}};fn0.partition=jq5;var kq5=(I,d="")=>{zn0=I,Qn0=d};fn0.setPartitionInfo=kq5;var xq5=()=>{fn0.setPartitionInfo(Nn0.default,"")};fn0.useDefaultPartitionInfo=xq5;var cq5=()=>Qn0;fn0.getUserAgentPrefix=cq5});var Vn=Y((Un0)=>{Object.defineProperty(Un0,"__esModule",{value:!0});Un0.isIpAddress=void 0;var nq5=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$"),rq5=(I)=>nq5.test(I)||I.startsWith("[")&&I.endsWith("]");Un0.isIpAddress=rq5});var Sn0=Y((En0)=>{Object.defineProperty(En0,"__esModule",{value:!0});En0.debugId=void 0;En0.debugId="endpoints"});var Pn0=Y((Ln0)=>{Object.defineProperty(Ln0,"__esModule",{value:!0});Ln0.toDebugString=void 0;function _X1(I){if(typeof I!=="object"||I==null)return I;if("ref"in I)return`$${_X1(I.ref)}`;if("fn"in I)return`${I.fn}(${(I.argv||[]).map(_X1).join(", ")})`;return JSON.stringify(I,null,2)}Ln0.toDebugString=_X1});var GP=Y((Xn)=>{Object.defineProperty(Xn,"__esModule",{value:!0});var $n0=x1();$n0.__exportStar(Sn0(),Xn);$n0.__exportStar(Pn0(),Xn)});var mn0=Y((Tn0)=>{Object.defineProperty(Tn0,"__esModule",{value:!0});Tn0.EndpointError=void 0;class un0 extends Error{constructor(I){super(I);this.name="EndpointError"}}Tn0.EndpointError=un0});var bn0=Y((ln0)=>{Object.defineProperty(ln0,"__esModule",{value:!0})});var jn0=Y((hn0)=>{Object.defineProperty(hn0,"__esModule",{value:!0})});var xn0=Y((kn0)=>{Object.defineProperty(kn0,"__esModule",{value:!0})});var pn0=Y((cn0)=>{Object.defineProperty(cn0,"__esModule",{value:!0})});var nn0=Y((in0)=>{Object.defineProperty(in0,"__esModule",{value:!0})});var yZ=Y((UD)=>{Object.defineProperty(UD,"__esModule",{value:!0});var Kq=x1();Kq.__exportStar(mn0(),UD);Kq.__exportStar(bn0(),UD);Kq.__exportStar(jn0(),UD);Kq.__exportStar(xn0(),UD);Kq.__exportStar(pn0(),UD);Kq.__exportStar(nn0(),UD)});var HX1=Y((rn0)=>{Object.defineProperty(rn0,"__esModule",{value:!0});rn0.isValidHostLabel=void 0;var aq5=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$"),sq5=(I,d=!1)=>{if(!d)return aq5.test(I);let G=I.split(".");for(let Z of G)if(!rn0.isValidHostLabel(Z))return!1;return!0};rn0.isValidHostLabel=sq5});var sn0=Y((an0)=>{Object.defineProperty(an0,"__esModule",{value:!0});an0.isVirtualHostableS3Bucket=void 0;var oq5=Vn(),eq5=HX1(),tq5=(I,d=!1)=>{if(d){for(let G of I.split("."))if(!an0.isVirtualHostableS3Bucket(G))return!1;return!0}if(!eq5.isValidHostLabel(I))return!1;if(I.length<3||I.length>63)return!1;if(I!==I.toLowerCase())return!1;if(oq5.isIpAddress(I))return!1;return!0};an0.isVirtualHostableS3Bucket=tq5});var tn0=Y((on0)=>{Object.defineProperty(on0,"__esModule",{value:!0});on0.parseArn=void 0;var IR5=(I)=>{let d=I.split(":");if(d.length<6)return null;let[G,Z,C,W,w,...B]=d;if(G!=="arn"||Z===""||C===""||B[0]==="")return null;return{partition:Z,service:C,region:W,accountId:w,resourceId:B[0].includes("/")?B[0].split("/"):B}};on0.parseArn=IR5});var Ir0=Y((ZP)=>{Object.defineProperty(ZP,"__esModule",{value:!0});var gX1=x1();gX1.__exportStar(sn0(),ZP);gX1.__exportStar(tn0(),ZP);gX1.__exportStar(YX1(),ZP)});var Zr0=Y((dr0)=>{Object.defineProperty(dr0,"__esModule",{value:!0});dr0.booleanEquals=void 0;var dR5=(I,d)=>I===d;dr0.booleanEquals=dR5});var Br0=Y((Wr0)=>{Object.defineProperty(Wr0,"__esModule",{value:!0});Wr0.getAttrPathList=void 0;var Cr0=yZ(),GR5=(I)=>{let d=I.split("."),G=[];for(let Z of d){let C=Z.indexOf("[");if(C!==-1){if(Z.indexOf("]")!==Z.length-1)throw new Cr0.EndpointError(`Path: '${I}' does not end with ']'`);let W=Z.slice(C+1,-1);if(Number.isNaN(parseInt(W)))throw new Cr0.EndpointError(`Invalid array index: '${W}' in path: '${I}'`);if(C!==0)G.push(Z.slice(0,C));G.push(W)}else G.push(Z)}return G};Wr0.getAttrPathList=GR5});var Xr0=Y((Ar0)=>{Object.defineProperty(Ar0,"__esModule",{value:!0});Ar0.getAttr=void 0;var ZR5=yZ(),CR5=Br0(),WR5=(I,d)=>CR5.getAttrPathList(d).reduce((G,Z)=>{if(typeof G!=="object")throw new ZR5.EndpointError(`Index '${Z}' in '${d}' not found in '${JSON.stringify(I)}'`);else if(Array.isArray(G))return G[parseInt(Z)];return G[Z]},I);Ar0.getAttr=WR5});var Dr0=Y((Yr0)=>{Object.defineProperty(Yr0,"__esModule",{value:!0});Yr0.isSet=void 0;var wR5=(I)=>I!=null;Yr0.isSet=wR5});var gr0=Y((Hr0)=>{Object.defineProperty(Hr0,"__esModule",{value:!0});Hr0.not=void 0;var BR5=(I)=>!I;Hr0.not=BR5});var Kr0=Y((Jr0)=>{Object.defineProperty(Jr0,"__esModule",{value:!0})});var Nr0=Y((JX1)=>{Object.defineProperty(JX1,"__esModule",{value:!0});JX1.HttpAuthLocation=void 0;var AR5=k3();Object.defineProperty(JX1,"HttpAuthLocation",{enumerable:!0,get:function(){return AR5.HttpAuthLocation}})});var Qr0=Y((zr0)=>{Object.defineProperty(zr0,"__esModule",{value:!0})});var qr0=Y((fr0)=>{Object.defineProperty(fr0,"__esModule",{value:!0})});var Ur0=Y((Rr0)=>{Object.defineProperty(Rr0,"__esModule",{value:!0})});var Er0=Y((vr0)=>{Object.defineProperty(vr0,"__esModule",{value:!0})});var Sr0=Y((Mr0)=>{Object.defineProperty(Mr0,"__esModule",{value:!0})});var yr0=Y((Lr0)=>{Object.defineProperty(Lr0,"__esModule",{value:!0})});var $r0=Y((Pr0)=>{Object.defineProperty(Pr0,"__esModule",{value:!0})});var Tr0=Y((ur0)=>{Object.defineProperty(ur0,"__esModule",{value:!0});ur0.HostAddressType=void 0;var XR5;(function(I){I.AAAA="AAAA",I.A="A"})(XR5=ur0.HostAddressType||(ur0.HostAddressType={}))});var mr0=Y((Or0)=>{Object.defineProperty(Or0,"__esModule",{value:!0})});var lr0=Y((NX1)=>{Object.defineProperty(NX1,"__esModule",{value:!0});NX1.EndpointURLScheme=void 0;var YR5=k3();Object.defineProperty(NX1,"EndpointURLScheme",{enumerable:!0,get:function(){return YR5.EndpointURLScheme}})});var hr0=Y((br0)=>{Object.defineProperty(br0,"__esModule",{value:!0})});var kr0=Y((jr0)=>{Object.defineProperty(jr0,"__esModule",{value:!0})});var cr0=Y((xr0)=>{Object.defineProperty(xr0,"__esModule",{value:!0})});var ir0=Y((pr0)=>{Object.defineProperty(pr0,"__esModule",{value:!0})});var rr0=Y((nr0)=>{Object.defineProperty(nr0,"__esModule",{value:!0})});var sr0=Y((ar0)=>{Object.defineProperty(ar0,"__esModule",{value:!0})});var er0=Y((or0)=>{Object.defineProperty(or0,"__esModule",{value:!0})});var Ia0=Y((tr0)=>{Object.defineProperty(tr0,"__esModule",{value:!0})});var da0=Y((QJ)=>{Object.defineProperty(QJ,"__esModule",{value:!0});var CP=x1();CP.__exportStar(ir0(),QJ);CP.__exportStar(rr0(),QJ);CP.__exportStar(sr0(),QJ);CP.__exportStar(er0(),QJ);CP.__exportStar(Ia0(),QJ)});var Za0=Y((Ga0)=>{Object.defineProperty(Ga0,"__esModule",{value:!0})});var Wa0=Y((Ca0)=>{Object.defineProperty(Ca0,"__esModule",{value:!0})});var Ba0=Y((wa0)=>{Object.defineProperty(wa0,"__esModule",{value:!0})});var Va0=Y((Aa0)=>{Object.defineProperty(Aa0,"__esModule",{value:!0})});var Ya0=Y((Xa0)=>{Object.defineProperty(Xa0,"__esModule",{value:!0})});var Da0=Y((_a0)=>{Object.defineProperty(_a0,"__esModule",{value:!0})});var Fa0=Y((Ha0)=>{Object.defineProperty(Ha0,"__esModule",{value:!0})});var Ja0=Y((ga0)=>{Object.defineProperty(ga0,"__esModule",{value:!0})});var Na0=Y((Ka0)=>{Object.defineProperty(Ka0,"__esModule",{value:!0})});var Qa0=Y((za0)=>{Object.defineProperty(za0,"__esModule",{value:!0})});var qa0=Y((fa0)=>{Object.defineProperty(fa0,"__esModule",{value:!0})});var Ua0=Y((Ra0)=>{Object.defineProperty(Ra0,"__esModule",{value:!0})});var va0=Y((zX1)=>{Object.defineProperty(zX1,"__esModule",{value:!0});zX1.RequestHandlerProtocol=void 0;var DR5=k3();Object.defineProperty(zX1,"RequestHandlerProtocol",{enumerable:!0,get:function(){return DR5.RequestHandlerProtocol}})});var Ma0=Y((Ea0)=>{Object.defineProperty(Ea0,"__esModule",{value:!0})});var La0=Y((Sa0)=>{Object.defineProperty(Sa0,"__esModule",{value:!0})});var Pa0=Y((ya0)=>{Object.defineProperty(ya0,"__esModule",{value:!0})});var $a0=Y((K5)=>{Object.defineProperty(K5,"__esModule",{value:!0});var S5=x1();S5.__exportStar(Kr0(),K5);S5.__exportStar(Nr0(),K5);S5.__exportStar(Qr0(),K5);S5.__exportStar(qr0(),K5);S5.__exportStar(Ur0(),K5);S5.__exportStar(Er0(),K5);S5.__exportStar(Sr0(),K5);S5.__exportStar(yr0(),K5);S5.__exportStar($r0(),K5);S5.__exportStar(Tr0(),K5);S5.__exportStar(mr0(),K5);S5.__exportStar(lr0(),K5);S5.__exportStar(hr0(),K5);S5.__exportStar(kr0(),K5);S5.__exportStar(cr0(),K5);S5.__exportStar(da0(),K5);S5.__exportStar(Za0(),K5);S5.__exportStar(Wa0(),K5);S5.__exportStar(Ba0(),K5);S5.__exportStar(Va0(),K5);S5.__exportStar(Ya0(),K5);S5.__exportStar(Da0(),K5);S5.__exportStar(Fa0(),K5);S5.__exportStar(Ja0(),K5);S5.__exportStar(Na0(),K5);S5.__exportStar(Qa0(),K5);S5.__exportStar(qa0(),K5);S5.__exportStar(Ua0(),K5);S5.__exportStar(va0(),K5);S5.__exportStar(Ma0(),K5);S5.__exportStar(La0(),K5);S5.__exportStar(Pa0(),K5)});var Oa0=Y((ua0)=>{Object.defineProperty(ua0,"__esModule",{value:!0});ua0.parseURL=void 0;var fX1=$a0(),FR5=Vn(),QX1={[fX1.EndpointURLScheme.HTTP]:80,[fX1.EndpointURLScheme.HTTPS]:443},gR5=(I)=>{let d=(()=>{try{if(I instanceof URL)return I;if(typeof I==="object"&&"hostname"in I){let{hostname:F,port:g,protocol:J="",path:K="",query:Q={}}=I,E=new URL(`${J}//${F}${g?`:${g}`:""}${K}`);return E.search=Object.entries(Q).map(([S,P])=>`${S}=${P}`).join("&"),E}return new URL(I)}catch(F){return null}})();if(!d)return console.error(`Unable to parse ${JSON.stringify(I)} as a whatwg URL.`),null;let G=d.href,{host:Z,hostname:C,pathname:W,protocol:w,search:B}=d;if(B)return null;let A=w.slice(0,-1);if(!Object.values(fX1.EndpointURLScheme).includes(A))return null;let V=FR5.isIpAddress(C),X=G.includes(`${Z}:${QX1[A]}`)||typeof I==="string"&&I.includes(`${Z}:${QX1[A]}`),_=`${Z}${X?`:${QX1[A]}`:""}`;return{scheme:A,authority:_,path:W,normalizedPath:W.endsWith("/")?W:`${W}/`,isIp:V}};ua0.parseURL=gR5});var ba0=Y((ma0)=>{Object.defineProperty(ma0,"__esModule",{value:!0});ma0.stringEquals=void 0;var JR5=(I,d)=>I===d;ma0.stringEquals=JR5});var ka0=Y((ha0)=>{Object.defineProperty(ha0,"__esModule",{value:!0});ha0.substring=void 0;var KR5=(I,d,G,Z)=>{if(d>=G||I.length{Object.defineProperty(xa0,"__esModule",{value:!0});xa0.uriEncode=void 0;var NR5=(I)=>encodeURIComponent(I).replace(/[!*'()]/g,(d)=>`%${d.charCodeAt(0).toString(16).toUpperCase()}`);xa0.uriEncode=NR5});var qX1=Y((iC)=>{Object.defineProperty(iC,"__esModule",{value:!0});iC.aws=void 0;var YB=x1();iC.aws=YB.__importStar(Ir0());YB.__exportStar(Zr0(),iC);YB.__exportStar(Xr0(),iC);YB.__exportStar(Dr0(),iC);YB.__exportStar(HX1(),iC);YB.__exportStar(gr0(),iC);YB.__exportStar(Oa0(),iC);YB.__exportStar(ba0(),iC);YB.__exportStar(ka0(),iC);YB.__exportStar(pa0(),iC)});var RX1=Y((na0)=>{Object.defineProperty(na0,"__esModule",{value:!0});na0.evaluateTemplate=void 0;var zR5=qX1(),QR5=(I,d)=>{let G=[],Z={...d.endpointParams,...d.referenceRecord},C=0;while(C{Object.defineProperty(aa0,"__esModule",{value:!0});aa0.getReferenceValue=void 0;var fR5=({ref:I},d)=>{return{...d.endpointParams,...d.referenceRecord}[I]};aa0.getReferenceValue=fR5});var WP=Y((ea0)=>{Object.defineProperty(ea0,"__esModule",{value:!0});ea0.evaluateExpression=void 0;var qR5=yZ(),RR5=UX1(),UR5=RX1(),vR5=oa0(),ER5=(I,d,G)=>{if(typeof I==="string")return UR5.evaluateTemplate(I,G);else if(I.fn)return RR5.callFunction(I,G);else if(I.ref)return vR5.getReferenceValue(I,G);throw new qR5.EndpointError(`'${d}': ${String(I)} is not a string, function or reference.`)};ea0.evaluateExpression=ER5});var UX1=Y((Is0)=>{Object.defineProperty(Is0,"__esModule",{value:!0});Is0.callFunction=void 0;var MR5=x1(),SR5=MR5.__importStar(qX1()),LR5=WP(),yR5=({fn:I,argv:d},G)=>{let Z=d.map((C)=>["boolean","number"].includes(typeof C)?C:LR5.evaluateExpression(C,"arg",G));return I.split(".").reduce((C,W)=>C[W],SR5)(...Z)};Is0.callFunction=yR5});var Cs0=Y((Gs0)=>{Object.defineProperty(Gs0,"__esModule",{value:!0});Gs0.evaluateCondition=void 0;var vX1=GP(),PR5=yZ(),$R5=UX1(),uR5=({assign:I,...d},G)=>{var Z,C;if(I&&I in G.referenceRecord)throw new PR5.EndpointError(`'${I}' is already defined in Reference Record.`);let W=$R5.callFunction(d,G);return(C=(Z=G.logger)===null||Z===void 0?void 0:Z.debug)===null||C===void 0||C.call(Z,vX1.debugId,`evaluateCondition: ${vX1.toDebugString(d)} = ${vX1.toDebugString(W)}`),{result:W===""?!0:!!W,...I!=null&&{toAssign:{name:I,value:W}}}};Gs0.evaluateCondition=uR5});var Yn=Y((ws0)=>{Object.defineProperty(ws0,"__esModule",{value:!0});ws0.evaluateConditions=void 0;var Ws0=GP(),TR5=Cs0(),OR5=(I=[],d)=>{var G,Z;let C={};for(let W of I){let{result:w,toAssign:B}=TR5.evaluateCondition(W,{...d,referenceRecord:{...d.referenceRecord,...C}});if(!w)return{result:w};if(B)C[B.name]=B.value,(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,Ws0.debugId,`assign: ${B.name} := ${Ws0.toDebugString(B.value)}`)}return{result:!0,referenceRecord:C}};ws0.evaluateConditions=OR5});var Xs0=Y((As0)=>{Object.defineProperty(As0,"__esModule",{value:!0});As0.getEndpointHeaders=void 0;var mR5=yZ(),lR5=WP(),bR5=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:C.map((W)=>{let w=lR5.evaluateExpression(W,"Header value entry",d);if(typeof w!=="string")throw new mR5.EndpointError(`Header '${Z}' value '${w}' is not a string`);return w})}),{});As0.getEndpointHeaders=bR5});var Ds0=Y((_s0)=>{Object.defineProperty(_s0,"__esModule",{value:!0});_s0.getEndpointProperty=void 0;var Ys0=yZ(),hR5=RX1(),jR5=MX1(),kR5=(I,d)=>{if(Array.isArray(I))return I.map((G)=>_s0.getEndpointProperty(G,d));switch(typeof I){case"string":return hR5.evaluateTemplate(I,d);case"object":if(I===null)throw new Ys0.EndpointError(`Unexpected endpoint property: ${I}`);return jR5.getEndpointProperties(I,d);case"boolean":return I;default:throw new Ys0.EndpointError(`Unexpected endpoint property type: ${typeof I}`)}};_s0.getEndpointProperty=kR5});var MX1=Y((Hs0)=>{Object.defineProperty(Hs0,"__esModule",{value:!0});Hs0.getEndpointProperties=void 0;var xR5=Ds0(),cR5=(I,d)=>Object.entries(I).reduce((G,[Z,C])=>({...G,[Z]:xR5.getEndpointProperty(C,d)}),{});Hs0.getEndpointProperties=cR5});var Ks0=Y((gs0)=>{Object.defineProperty(gs0,"__esModule",{value:!0});gs0.getEndpointUrl=void 0;var pR5=yZ(),iR5=WP(),nR5=(I,d)=>{let G=iR5.evaluateExpression(I,"Endpoint URL",d);if(typeof G==="string")try{return new URL(G)}catch(Z){throw console.error(`Failed to construct URL with ${G}`,Z),Z}throw new pR5.EndpointError(`Endpoint URL must be a string, got ${typeof G}`)};gs0.getEndpointUrl=nR5});var fs0=Y((zs0)=>{Object.defineProperty(zs0,"__esModule",{value:!0});zs0.evaluateEndpointRule=void 0;var Ns0=GP(),rR5=Yn(),aR5=Xs0(),sR5=MX1(),oR5=Ks0(),eR5=(I,d)=>{var G,Z;let{conditions:C,endpoint:W}=I,{result:w,referenceRecord:B}=rR5.evaluateConditions(C,d);if(!w)return;let A={...d,referenceRecord:{...d.referenceRecord,...B}},{url:V,properties:X,headers:_}=W;return(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,Ns0.debugId,`Resolving endpoint from template: ${Ns0.toDebugString(W)}`),{..._!=null&&{headers:aR5.getEndpointHeaders(_,A)},...X!=null&&{properties:sR5.getEndpointProperties(X,A)},url:oR5.getEndpointUrl(V,A)}};zs0.evaluateEndpointRule=eR5});var Us0=Y((qs0)=>{Object.defineProperty(qs0,"__esModule",{value:!0});qs0.evaluateErrorRule=void 0;var tR5=yZ(),IU5=Yn(),dU5=WP(),GU5=(I,d)=>{let{conditions:G,error:Z}=I,{result:C,referenceRecord:W}=IU5.evaluateConditions(G,d);if(!C)return;throw new tR5.EndpointError(dU5.evaluateExpression(Z,"Error",{...d,referenceRecord:{...d.referenceRecord,...W}}))};qs0.evaluateErrorRule=GU5});var Ms0=Y((vs0)=>{Object.defineProperty(vs0,"__esModule",{value:!0});vs0.evaluateTreeRule=void 0;var ZU5=Yn(),CU5=SX1(),WU5=(I,d)=>{let{conditions:G,rules:Z}=I,{result:C,referenceRecord:W}=ZU5.evaluateConditions(G,d);if(!C)return;return CU5.evaluateRules(Z,{...d,referenceRecord:{...d.referenceRecord,...W}})};vs0.evaluateTreeRule=WU5});var SX1=Y((Ls0)=>{Object.defineProperty(Ls0,"__esModule",{value:!0});Ls0.evaluateRules=void 0;var Ss0=yZ(),wU5=fs0(),BU5=Us0(),AU5=Ms0(),VU5=(I,d)=>{for(let G of I)if(G.type==="endpoint"){let Z=wU5.evaluateEndpointRule(G,d);if(Z)return Z}else if(G.type==="error")BU5.evaluateErrorRule(G,d);else if(G.type==="tree"){let Z=AU5.evaluateTreeRule(G,d);if(Z)return Z}else throw new Ss0.EndpointError(`Unknown endpoint rule: ${G}`);throw new Ss0.EndpointError("Rules evaluation failed")};Ls0.evaluateRules=VU5});var Ps0=Y((LX1)=>{Object.defineProperty(LX1,"__esModule",{value:!0});var XU5=x1();XU5.__exportStar(SX1(),LX1)});var Ts0=Y(($s0)=>{Object.defineProperty($s0,"__esModule",{value:!0});$s0.resolveEndpoint=void 0;var _n=GP(),YU5=yZ(),_U5=Ps0(),DU5=(I,d)=>{var G,Z,C,W,w,B;let{endpointParams:A,logger:V}=d,{parameters:X,rules:_}=I;(Z=(G=d.logger)===null||G===void 0?void 0:G.debug)===null||Z===void 0||Z.call(G,`${_n.debugId} Initial EndpointParams: ${_n.toDebugString(A)}`);let F=Object.entries(X).filter(([,K])=>K.default!=null).map(([K,Q])=>[K,Q.default]);if(F.length>0)for(let[K,Q]of F)A[K]=(C=A[K])!==null&&C!==void 0?C:Q;let g=Object.entries(X).filter(([,K])=>K.required).map(([K])=>K);for(let K of g)if(A[K]==null)throw new YU5.EndpointError(`Missing required parameter: '${K}'`);let J=_U5.evaluateRules(_,{endpointParams:A,logger:V,referenceRecord:{}});if((W=d.endpointParams)===null||W===void 0?void 0:W.Endpoint)try{let K=new URL(d.endpointParams.Endpoint),{protocol:Q,port:E}=K;J.url.protocol=Q,J.url.port=E}catch(K){}return(B=(w=d.logger)===null||w===void 0?void 0:w.debug)===null||B===void 0||B.call(w,`${_n.debugId} Resolved endpoint: ${_n.toDebugString(J)}`),J};$s0.resolveEndpoint=DU5});var zq=Y((Nq)=>{Object.defineProperty(Nq,"__esModule",{value:!0});var Dn=x1();Dn.__exportStar(YX1(),Nq);Dn.__exportStar(Vn(),Nq);Dn.__exportStar(Ts0(),Nq);Dn.__exportStar(yZ(),Nq)});var ls0=Y((Os0)=>{Object.defineProperty(Os0,"__esModule",{value:!0});Os0.UA_ESCAPE_CHAR=Os0.UA_VALUE_ESCAPE_REGEX=Os0.UA_NAME_ESCAPE_REGEX=Os0.UA_NAME_SEPARATOR=Os0.SPACE=Os0.X_AMZ_USER_AGENT=Os0.USER_AGENT=void 0;Os0.USER_AGENT="user-agent";Os0.X_AMZ_USER_AGENT="x-amz-user-agent";Os0.SPACE=" ";Os0.UA_NAME_SEPARATOR="/";Os0.UA_NAME_ESCAPE_REGEX=/[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g;Os0.UA_VALUE_ESCAPE_REGEX=/[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w\#]/g;Os0.UA_ESCAPE_CHAR="-"});var xs0=Y((bs0)=>{Object.defineProperty(bs0,"__esModule",{value:!0});bs0.getUserAgentPlugin=bs0.getUserAgentMiddlewareOptions=bs0.userAgentMiddleware=void 0;var zU5=zq(),QU5=t8(),Vd=ls0(),fU5=(I)=>(d,G)=>async(Z)=>{var C,W;let{request:w}=Z;if(!QU5.HttpRequest.isInstance(w))return d(Z);let{headers:B}=w,A=((C=G===null||G===void 0?void 0:G.userAgent)===null||C===void 0?void 0:C.map(yX1))||[],V=(await I.defaultUserAgentProvider()).map(yX1),X=((W=I===null||I===void 0?void 0:I.customUserAgent)===null||W===void 0?void 0:W.map(yX1))||[],_=zU5.getUserAgentPrefix(),F=(_?[_]:[]).concat([...V,...A,...X]).join(Vd.SPACE),g=[...V.filter((J)=>J.startsWith("aws-sdk-")),...X].join(Vd.SPACE);if(I.runtime!=="browser"){if(g)B[Vd.X_AMZ_USER_AGENT]=B[Vd.X_AMZ_USER_AGENT]?`${B[Vd.USER_AGENT]} ${g}`:g;B[Vd.USER_AGENT]=F}else B[Vd.X_AMZ_USER_AGENT]=F;return d({...Z,request:w})};bs0.userAgentMiddleware=fU5;var yX1=(I)=>{var d;let G=I[0].split(Vd.UA_NAME_SEPARATOR).map((B)=>B.replace(Vd.UA_NAME_ESCAPE_REGEX,Vd.UA_ESCAPE_CHAR)).join(Vd.UA_NAME_SEPARATOR),Z=(d=I[1])===null||d===void 0?void 0:d.replace(Vd.UA_VALUE_ESCAPE_REGEX,Vd.UA_ESCAPE_CHAR),C=G.indexOf(Vd.UA_NAME_SEPARATOR),W=G.substring(0,C),w=G.substring(C+1);if(W==="api")w=w.toLowerCase();return[W,w,Z].filter((B)=>B&&B.length>0).reduce((B,A,V)=>{switch(V){case 0:return A;case 1:return`${B}/${A}`;default:return`${B}#${A}`}},"")};bs0.getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};var qU5=(I)=>({applyToStack:(d)=>{d.add(bs0.userAgentMiddleware(I),bs0.getUserAgentMiddlewareOptions)}});bs0.getUserAgentPlugin=qU5});var wP=Y((Hn)=>{Object.defineProperty(Hn,"__esModule",{value:!0});var cs0=x1();cs0.__exportStar(Jn0(),Hn);cs0.__exportStar(xs0(),Hn)});var as0=Y((SC3,rs0)=>{var{defineProperty:Fn,getOwnPropertyDescriptor:RU5,getOwnPropertyNames:UU5}=Object,vU5=Object.prototype.hasOwnProperty,ps0=(I,d)=>Fn(I,"name",{value:d,configurable:!0}),EU5=(I,d)=>{for(var G in d)Fn(I,G,{get:d[G],enumerable:!0})},MU5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of UU5(d))if(!vU5.call(I,C)&&C!==G)Fn(I,C,{get:()=>d[C],enumerable:!(Z=RU5(d,C))||Z.enumerable})}return I},SU5=(I)=>MU5(Fn({},"__esModule",{value:!0}),I),is0={};EU5(is0,{SelectorType:()=>ns0,booleanSelector:()=>LU5,numberSelector:()=>yU5});rs0.exports=SU5(is0);var LU5=ps0((I,d,G)=>{if(!(d in I))return;if(I[d]==="true")return!0;if(I[d]==="false")return!1;throw new Error(`Cannot load ${G} "${d}". Expected "true" or "false", got ${I[d]}.`)},"booleanSelector"),yU5=ps0((I,d,G)=>{if(!(d in I))return;let Z=parseInt(I[d],10);if(Number.isNaN(Z))throw new TypeError(`Cannot load ${G} '${d}'. Expected number, got '${I[d]}'.`);return Z},"numberSelector"),ns0=((I)=>{return I.ENV="env",I.CONFIG="shared config entry",I})(ns0||{})});var _B=Y((LC3,wo0)=>{var{defineProperty:Jn,getOwnPropertyDescriptor:PU5,getOwnPropertyNames:$U5}=Object,uU5=Object.prototype.hasOwnProperty,nC=(I,d)=>Jn(I,"name",{value:d,configurable:!0}),TU5=(I,d)=>{for(var G in d)Jn(I,G,{get:d[G],enumerable:!0})},OU5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of $U5(d))if(!uU5.call(I,C)&&C!==G)Jn(I,C,{get:()=>d[C],enumerable:!(Z=PU5(d,C))||Z.enumerable})}return I},mU5=(I)=>OU5(Jn({},"__esModule",{value:!0}),I),es0={};TU5(es0,{CONFIG_USE_DUALSTACK_ENDPOINT:()=>Io0,CONFIG_USE_FIPS_ENDPOINT:()=>Go0,DEFAULT_USE_DUALSTACK_ENDPOINT:()=>lU5,DEFAULT_USE_FIPS_ENDPOINT:()=>hU5,ENV_USE_DUALSTACK_ENDPOINT:()=>ts0,ENV_USE_FIPS_ENDPOINT:()=>do0,NODE_REGION_CONFIG_FILE_OPTIONS:()=>iU5,NODE_REGION_CONFIG_OPTIONS:()=>pU5,NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS:()=>bU5,NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS:()=>jU5,REGION_ENV_NAME:()=>Zo0,REGION_INI_NAME:()=>Co0,getRegionInfo:()=>oU5,resolveCustomEndpointsConfig:()=>kU5,resolveEndpointsConfig:()=>cU5,resolveRegionConfig:()=>nU5});wo0.exports=mU5(es0);var vD=as0(),ts0="AWS_USE_DUALSTACK_ENDPOINT",Io0="use_dualstack_endpoint",lU5=!1,bU5={environmentVariableSelector:(I)=>vD.booleanSelector(I,ts0,vD.SelectorType.ENV),configFileSelector:(I)=>vD.booleanSelector(I,Io0,vD.SelectorType.CONFIG),default:!1},do0="AWS_USE_FIPS_ENDPOINT",Go0="use_fips_endpoint",hU5=!1,jU5={environmentVariableSelector:(I)=>vD.booleanSelector(I,do0,vD.SelectorType.ENV),configFileSelector:(I)=>vD.booleanSelector(I,Go0,vD.SelectorType.CONFIG),default:!1},gn=Fq(),kU5=nC((I)=>{let{endpoint:d,urlParser:G}=I;return{...I,tls:I.tls??!0,endpoint:gn.normalizeProvider(typeof d==="string"?G(d):d),isCustomEndpoint:!0,useDualstackEndpoint:gn.normalizeProvider(I.useDualstackEndpoint??!1)}},"resolveCustomEndpointsConfig"),xU5=nC(async(I)=>{let{tls:d=!0}=I,G=await I.region();if(!new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/).test(G))throw new Error("Invalid region in client config");let C=await I.useDualstackEndpoint(),W=await I.useFipsEndpoint(),{hostname:w}=await I.regionInfoProvider(G,{useDualstackEndpoint:C,useFipsEndpoint:W})??{};if(!w)throw new Error("Cannot resolve hostname from client config");return I.urlParser(`${d?"https:":"http:"}//${w}`)},"getEndpointFromRegion"),cU5=nC((I)=>{let d=gn.normalizeProvider(I.useDualstackEndpoint??!1),{endpoint:G,useFipsEndpoint:Z,urlParser:C}=I;return{...I,tls:I.tls??!0,endpoint:G?gn.normalizeProvider(typeof G==="string"?C(G):G):()=>xU5({...I,useDualstackEndpoint:d,useFipsEndpoint:Z}),isCustomEndpoint:!!G,useDualstackEndpoint:d}},"resolveEndpointsConfig"),Zo0="AWS_REGION",Co0="region",pU5={environmentVariableSelector:(I)=>I[Zo0],configFileSelector:(I)=>I[Co0],default:()=>{throw new Error("Region is missing")}},iU5={preferredFile:"credentials"},Wo0=nC((I)=>typeof I==="string"&&(I.startsWith("fips-")||I.endsWith("-fips")),"isFipsRegion"),ss0=nC((I)=>Wo0(I)?["fips-aws-global","aws-fips"].includes(I)?"us-east-1":I.replace(/fips-(dkr-|prod-)?|-fips/,""):I,"getRealRegion"),nU5=nC((I)=>{let{region:d,useFipsEndpoint:G}=I;if(!d)throw new Error("Region is missing");return{...I,region:async()=>{if(typeof d==="string")return ss0(d);let Z=await d();return ss0(Z)},useFipsEndpoint:async()=>{let Z=typeof d==="string"?d:await d();if(Wo0(Z))return!0;return typeof G!=="function"?Promise.resolve(!!G):G()}}},"resolveRegionConfig"),os0=nC((I=[],{useFipsEndpoint:d,useDualstackEndpoint:G})=>{var Z;return(Z=I.find(({tags:C})=>d===C.includes("fips")&&G===C.includes("dualstack")))==null?void 0:Z.hostname},"getHostnameFromVariants"),rU5=nC((I,{regionHostname:d,partitionHostname:G})=>d?d:G?G.replace("{region}",I):void 0,"getResolvedHostname"),aU5=nC((I,{partitionHash:d})=>Object.keys(d||{}).find((G)=>d[G].regions.includes(I))??"aws","getResolvedPartition"),sU5=nC((I,{signingRegion:d,regionRegex:G,useFipsEndpoint:Z})=>{if(d)return d;else if(Z){let C=G.replace("\\\\","\\").replace(/^\^/g,"\\.").replace(/\$$/g,"\\."),W=I.match(C);if(W)return W[0].slice(1,-1)}},"getResolvedSigningRegion"),oU5=nC((I,{useFipsEndpoint:d=!1,useDualstackEndpoint:G=!1,signingService:Z,regionHash:C,partitionHash:W})=>{var w,B,A,V,X;let _=aU5(I,{partitionHash:W}),F=I in C?I:((w=W[_])==null?void 0:w.endpoint)??I,g={useFipsEndpoint:d,useDualstackEndpoint:G},J=os0((B=C[F])==null?void 0:B.variants,g),K=os0((A=W[_])==null?void 0:A.variants,g),Q=rU5(F,{regionHostname:J,partitionHostname:K});if(Q===void 0)throw new Error(`Endpoint resolution failed for: ${{resolvedRegion:F,useFipsEndpoint:d,useDualstackEndpoint:G}}`);let E=sU5(Q,{signingRegion:(V=C[F])==null?void 0:V.signingRegion,regionRegex:W[_].regionRegex,useFipsEndpoint:d});return{partition:_,signingService:Z,hostname:Q,...E&&{signingRegion:E},...((X=C[F])==null?void 0:X.signingService)&&{signingService:C[F].signingService}}},"getRegionInfo")});var Vo0=Y((Bo0)=>{Object.defineProperty(Bo0,"__esModule",{value:!0});Bo0.resolveEventStreamSerdeConfig=void 0;var eU5=(I)=>({...I,eventStreamMarshaller:I.eventStreamSerdeProvider(I)});Bo0.resolveEventStreamSerdeConfig=eU5});var Xo0=Y((PX1)=>{Object.defineProperty(PX1,"__esModule",{value:!0});var tU5=x1();tU5.__exportStar(Vo0(),PX1)});var BP=Y(($C3,Fo0)=>{var{defineProperty:Kn,getOwnPropertyDescriptor:Iv5,getOwnPropertyNames:dv5}=Object,Gv5=Object.prototype.hasOwnProperty,_o0=(I,d)=>Kn(I,"name",{value:d,configurable:!0}),Zv5=(I,d)=>{for(var G in d)Kn(I,G,{get:d[G],enumerable:!0})},Cv5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of dv5(d))if(!Gv5.call(I,C)&&C!==G)Kn(I,C,{get:()=>d[C],enumerable:!(Z=Iv5(d,C))||Z.enumerable})}return I},Wv5=(I)=>Cv5(Kn({},"__esModule",{value:!0}),I),Do0={};Zv5(Do0,{contentLengthMiddleware:()=>$X1,contentLengthMiddlewareOptions:()=>Ho0,getContentLengthPlugin:()=>Bv5});Fo0.exports=Wv5(Do0);var wv5=t8(),Yo0="content-length";function $X1(I){return(d)=>async(G)=>{let Z=G.request;if(wv5.HttpRequest.isInstance(Z)){let{body:C,headers:W}=Z;if(C&&Object.keys(W).map((w)=>w.toLowerCase()).indexOf(Yo0)===-1)try{let w=I(C);Z.headers={...Z.headers,[Yo0]:String(w)}}catch(w){}}return d({...G,request:Z})}}_o0($X1,"contentLengthMiddleware");var Ho0={step:"build",tags:["SET_CONTENT_LENGTH","CONTENT_LENGTH"],name:"contentLengthMiddleware",override:!0},Bv5=_o0((I)=>({applyToStack:(d)=>{d.add($X1(I.bodyLengthChecker),Ho0)}}),"getContentLengthPlugin")});var AP=Y((go0)=>{Object.defineProperty(go0,"__esModule",{value:!0});go0.getHomeDir=void 0;var Av5=B1("os"),Vv5=B1("path"),uX1={},Xv5=()=>{if(process&&process.geteuid)return`${process.geteuid()}`;return"DEFAULT"},Yv5=()=>{let{HOME:I,USERPROFILE:d,HOMEPATH:G,HOMEDRIVE:Z=`C:${Vv5.sep}`}=process.env;if(I)return I;if(d)return d;if(G)return`${Z}${G}`;let C=Xv5();if(!uX1[C])uX1[C]=Av5.homedir();return uX1[C]};go0.getHomeDir=Yv5});var TX1=Y((Ko0)=>{Object.defineProperty(Ko0,"__esModule",{value:!0});Ko0.getSSOTokenFilepath=void 0;var _v5=B1("crypto"),Dv5=B1("path"),Hv5=AP(),Fv5=(I)=>{let G=_v5.createHash("sha1").update(I).digest("hex");return Dv5.join(Hv5.getHomeDir(),".aws","sso","cache",`${G}.json`)};Ko0.getSSOTokenFilepath=Fv5});var fo0=Y((zo0)=>{Object.defineProperty(zo0,"__esModule",{value:!0});zo0.getSSOTokenFromFile=void 0;var gv5=B1("fs"),Jv5=TX1(),{readFile:Kv5}=gv5.promises,Nv5=async(I)=>{let d=Jv5.getSSOTokenFilepath(I),G=await Kv5(d,"utf8");return JSON.parse(G)};zo0.getSSOTokenFromFile=Nv5});var mX1=Y((qo0)=>{Object.defineProperty(qo0,"__esModule",{value:!0});qo0.slurpFile=void 0;var zv5=B1("fs"),{readFile:Qv5}=zv5.promises,OX1={},fv5=(I,d)=>{if(!OX1[I]||(d===null||d===void 0?void 0:d.ignoreCache))OX1[I]=Qv5(I,"utf8");return OX1[I]};qo0.slurpFile=fv5});var rC=Y((lC3,XP)=>{var{defineProperty:zn,getOwnPropertyDescriptor:qv5,getOwnPropertyNames:Rv5}=Object,Uv5=Object.prototype.hasOwnProperty,PZ=(I,d)=>zn(I,"name",{value:d,configurable:!0}),vv5=(I,d)=>{for(var G in d)zn(I,G,{get:d[G],enumerable:!0})},lX1=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Rv5(d))if(!Uv5.call(I,C)&&C!==G)zn(I,C,{get:()=>d[C],enumerable:!(Z=qv5(d,C))||Z.enumerable})}return I},hX1=(I,d,G)=>(lX1(I,d,"default"),G&&lX1(G,d,"default")),Ev5=(I)=>lX1(zn({},"__esModule",{value:!0}),I),VP={};vv5(VP,{CONFIG_PREFIX_SEPARATOR:()=>fJ,DEFAULT_PROFILE:()=>Mo0,ENV_PROFILE:()=>Eo0,getProfileName:()=>Mv5,loadSharedConfigFiles:()=>yo0,loadSsoSessionData:()=>hv5,parseKnownFiles:()=>kv5});XP.exports=Ev5(VP);hX1(VP,AP(),XP.exports);var Eo0="AWS_PROFILE",Mo0="default",Mv5=PZ((I)=>I.profile||process.env[Eo0]||Mo0,"getProfileName");hX1(VP,TX1(),XP.exports);hX1(VP,fo0(),XP.exports);var Nn=k3(),Sv5=PZ((I)=>Object.entries(I).filter(([d])=>{let G=d.indexOf(fJ);if(G===-1)return!1;return Object.values(Nn.IniSectionType).includes(d.substring(0,G))}).reduce((d,[G,Z])=>{let C=G.indexOf(fJ),W=G.substring(0,C)===Nn.IniSectionType.PROFILE?G.substring(C+1):G;return d[W]=Z,d},{...I.default&&{default:I.default}}),"getConfigData"),So0=B1("path"),Lv5=AP(),yv5="AWS_CONFIG_FILE",Lo0=PZ(()=>process.env[yv5]||So0.join(Lv5.getHomeDir(),".aws","config"),"getConfigFilepath"),Pv5=AP(),$v5="AWS_SHARED_CREDENTIALS_FILE",uv5=PZ(()=>process.env[$v5]||So0.join(Pv5.getHomeDir(),".aws","credentials"),"getCredentialsFilepath"),Tv5=/^([\w-]+)\s(["'])?([\w-@\+\.%:/]+)\2$/,Ov5=["__proto__","profile __proto__"],bX1=PZ((I)=>{let d={},G,Z;for(let C of I.split(/\r?\n/)){let W=C.split(/(^|\s)[;#]/)[0].trim();if(W[0]==="["&&W[W.length-1]==="]"){G=void 0,Z=void 0;let B=W.substring(1,W.length-1),A=Tv5.exec(B);if(A){let[,V,,X]=A;if(Object.values(Nn.IniSectionType).includes(V))G=[V,X].join(fJ)}else G=B;if(Ov5.includes(B))throw new Error(`Found invalid profile name "${B}"`)}else if(G){let B=W.indexOf("=");if(![0,-1].includes(B)){let[A,V]=[W.substring(0,B).trim(),W.substring(B+1).trim()];if(V==="")Z=A;else{if(Z&&C.trimStart()===C)Z=void 0;d[G]=d[G]||{};let X=Z?[Z,A].join(fJ):A;d[G][X]=V}}}}return d},"parseIni"),Uo0=mX1(),vo0=PZ(()=>({}),"swallowError"),fJ=".",yo0=PZ(async(I={})=>{let{filepath:d=uv5(),configFilepath:G=Lo0()}=I,Z=await Promise.all([Uo0.slurpFile(G,{ignoreCache:I.ignoreCache}).then(bX1).then(Sv5).catch(vo0),Uo0.slurpFile(d,{ignoreCache:I.ignoreCache}).then(bX1).catch(vo0)]);return{configFile:Z[0],credentialsFile:Z[1]}},"loadSharedConfigFiles"),mv5=PZ((I)=>Object.entries(I).filter(([d])=>d.startsWith(Nn.IniSectionType.SSO_SESSION+fJ)).reduce((d,[G,Z])=>({...d,[G.substring(G.indexOf(fJ)+1)]:Z}),{}),"getSsoSessionData"),lv5=mX1(),bv5=PZ(()=>({}),"swallowError"),hv5=PZ(async(I={})=>lv5.slurpFile(I.configFilepath??Lo0()).then(bX1).then(mv5).catch(bv5),"loadSsoSessionData"),jv5=PZ((...I)=>{let d={};for(let G of I)for(let[Z,C]of Object.entries(G))if(d[Z]!==void 0)Object.assign(d[Z],C);else d[Z]=C;return d},"mergeConfigFiles"),kv5=PZ(async(I)=>{let d=await yo0(I);return jv5(d.configFile,d.credentialsFile)},"parseKnownFiles")});var mV=Y((bC3,uo0)=>{var{defineProperty:Qn,getOwnPropertyDescriptor:xv5,getOwnPropertyNames:cv5}=Object,pv5=Object.prototype.hasOwnProperty,_P=(I,d)=>Qn(I,"name",{value:d,configurable:!0}),iv5=(I,d)=>{for(var G in d)Qn(I,G,{get:d[G],enumerable:!0})},nv5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of cv5(d))if(!pv5.call(I,C)&&C!==G)Qn(I,C,{get:()=>d[C],enumerable:!(Z=xv5(d,C))||Z.enumerable})}return I},rv5=(I)=>nv5(Qn({},"__esModule",{value:!0}),I),$o0={};iv5($o0,{loadConfig:()=>tv5});uo0.exports=rv5($o0);var YP=x3(),av5=_P((I)=>async()=>{try{let d=I(process.env);if(d===void 0)throw new Error;return d}catch(d){throw new YP.CredentialsProviderError(d.message||`Cannot load config from environment variables with getter: ${I}`)}},"fromEnv"),Po0=rC(),sv5=_P((I,{preferredFile:d="config",...G}={})=>async()=>{let Z=Po0.getProfileName(G),{configFile:C,credentialsFile:W}=await Po0.loadSharedConfigFiles(G),w=W[Z]||{},B=C[Z]||{},A=d==="config"?{...w,...B}:{...B,...w};try{let X=I(A,d==="config"?C:W);if(X===void 0)throw new Error;return X}catch(V){throw new YP.CredentialsProviderError(V.message||`Cannot load config for profile ${Z} in SDK configuration files with getter: ${I}`)}},"fromSharedConfigFiles"),ov5=_P((I)=>typeof I==="function","isFunction"),ev5=_P((I)=>ov5(I)?async()=>await I():YP.fromStatic(I),"fromStatic"),tv5=_P(({environmentVariableSelector:I,configFileSelector:d,default:G},Z={})=>YP.memoize(YP.chain(av5(I),sv5(d,Z),ev5(G))),"loadConfig")});var ho0=Y((lo0)=>{Object.defineProperty(lo0,"__esModule",{value:!0});lo0.getEndpointUrlConfig=void 0;var To0=rC(),Oo0="AWS_ENDPOINT_URL",mo0="endpoint_url",IE5=(I)=>({environmentVariableSelector:(d)=>{let G=I.split(" ").map((W)=>W.toUpperCase()),Z=d[[Oo0,...G].join("_")];if(Z)return Z;let C=d[Oo0];if(C)return C;return},configFileSelector:(d,G)=>{if(G&&d.services){let C=G[["services",d.services].join(To0.CONFIG_PREFIX_SEPARATOR)];if(C){let W=I.split(" ").map((B)=>B.toLowerCase()),w=C[[W.join("_"),mo0].join(To0.CONFIG_PREFIX_SEPARATOR)];if(w)return w}}let Z=d[mo0];if(Z)return Z;return},default:void 0});lo0.getEndpointUrlConfig=IE5});var xo0=Y((jo0)=>{Object.defineProperty(jo0,"__esModule",{value:!0});jo0.getEndpointFromConfig=void 0;var dE5=mV(),GE5=ho0(),ZE5=async(I)=>dE5.loadConfig(GE5.getEndpointUrlConfig(I))();jo0.getEndpointFromConfig=ZE5});var no0=Y((kC3,io0)=>{var{defineProperty:fn,getOwnPropertyDescriptor:CE5,getOwnPropertyNames:WE5}=Object,wE5=Object.prototype.hasOwnProperty,BE5=(I,d)=>fn(I,"name",{value:d,configurable:!0}),AE5=(I,d)=>{for(var G in d)fn(I,G,{get:d[G],enumerable:!0})},VE5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of WE5(d))if(!wE5.call(I,C)&&C!==G)fn(I,C,{get:()=>d[C],enumerable:!(Z=CE5(d,C))||Z.enumerable})}return I},XE5=(I)=>VE5(fn({},"__esModule",{value:!0}),I),co0={};AE5(co0,{parseQueryString:()=>po0});io0.exports=XE5(co0);function po0(I){let d={};if(I=I.replace(/^\?/,""),I)for(let G of I.split("&")){let[Z,C=null]=G.split("=");if(Z=decodeURIComponent(Z),C)C=decodeURIComponent(C);if(!(Z in d))d[Z]=C;else if(Array.isArray(d[Z]))d[Z].push(C);else d[Z]=[d[Z],C]}return d}BE5(po0,"parseQueryString")});var qJ=Y((xC3,so0)=>{var{defineProperty:qn,getOwnPropertyDescriptor:YE5,getOwnPropertyNames:_E5}=Object,DE5=Object.prototype.hasOwnProperty,HE5=(I,d)=>qn(I,"name",{value:d,configurable:!0}),FE5=(I,d)=>{for(var G in d)qn(I,G,{get:d[G],enumerable:!0})},gE5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of _E5(d))if(!DE5.call(I,C)&&C!==G)qn(I,C,{get:()=>d[C],enumerable:!(Z=YE5(d,C))||Z.enumerable})}return I},JE5=(I)=>gE5(qn({},"__esModule",{value:!0}),I),ro0={};FE5(ro0,{parseUrl:()=>ao0});so0.exports=JE5(ro0);var KE5=no0(),ao0=HE5((I)=>{if(typeof I==="string")return ao0(new URL(I));let{hostname:d,pathname:G,port:Z,protocol:C,search:W}=I,w;if(W)w=KE5.parseQueryString(W);return{hostname:d,port:Z?parseInt(Z):void 0,protocol:C,path:G,query:w}},"parseUrl")});var n6=Y((cC3,Ze0)=>{var{defineProperty:Rn,getOwnPropertyDescriptor:NE5,getOwnPropertyNames:zE5}=Object,QE5=Object.prototype.hasOwnProperty,jX1=(I,d)=>Rn(I,"name",{value:d,configurable:!0}),fE5=(I,d)=>{for(var G in d)Rn(I,G,{get:d[G],enumerable:!0})},qE5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of zE5(d))if(!QE5.call(I,C)&&C!==G)Rn(I,C,{get:()=>d[C],enumerable:!(Z=NE5(d,C))||Z.enumerable})}return I},RE5=(I)=>qE5(Rn({},"__esModule",{value:!0}),I),oo0={};fE5(oo0,{deserializerMiddleware:()=>eo0,deserializerMiddlewareOption:()=>Ie0,getSerdePlugin:()=>Ge0,serializerMiddleware:()=>to0,serializerMiddlewareOption:()=>de0});Ze0.exports=RE5(oo0);var eo0=jX1((I,d)=>(G,Z)=>async(C)=>{let{response:W}=await G(C);try{let w=await d(W,I);return{response:W,output:w}}catch(w){if(Object.defineProperty(w,"$response",{value:W}),!("$metadata"in w)){if(w.message+=` + Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`,typeof w.$responseBodyText!=="undefined"){if(w.$response)w.$response.body=w.$responseBodyText}}throw w}},"deserializerMiddleware"),to0=jX1((I,d)=>(G,Z)=>async(C)=>{var W;let w=((W=Z.endpointV2)==null?void 0:W.url)&&I.urlParser?async()=>I.urlParser(Z.endpointV2.url):I.endpoint;if(!w)throw new Error("No valid endpoint provider available.");let B=await d(C.input,{...I,endpoint:w});return G({...C,request:B})},"serializerMiddleware"),Ie0={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0},de0={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0};function Ge0(I,d,G){return{applyToStack:(Z)=>{Z.add(eo0(I,G),Ie0),Z.add(to0(I,d),de0)}}}jX1(Ge0,"getSerdePlugin")});var c3=Y((pC3,Xe0)=>{var{defineProperty:vn,getOwnPropertyDescriptor:UE5,getOwnPropertyNames:vE5}=Object,EE5=Object.prototype.hasOwnProperty,aC=(I,d)=>vn(I,"name",{value:d,configurable:!0}),ME5=(I,d)=>{for(var G in d)vn(I,G,{get:d[G],enumerable:!0})},SE5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of vE5(d))if(!EE5.call(I,C)&&C!==G)vn(I,C,{get:()=>d[C],enumerable:!(Z=UE5(d,C))||Z.enumerable})}return I},LE5=(I)=>SE5(vn({},"__esModule",{value:!0}),I),We0={};ME5(We0,{endpointMiddleware:()=>Ae0,endpointMiddlewareOptions:()=>Ve0,getEndpointFromInstructions:()=>we0,getEndpointPlugin:()=>hE5,resolveEndpointConfig:()=>jE5,resolveParams:()=>Be0,toEndpointV1:()=>kX1});Xe0.exports=LE5(We0);var yE5=aC(async(I)=>{let d=(I==null?void 0:I.Bucket)||"";if(typeof I.Bucket==="string")I.Bucket=d.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?"));if(OE5(d)){if(I.ForcePathStyle===!0)throw new Error("Path-style addressing cannot be used with ARN buckets")}else if(!TE5(d)||d.indexOf(".")!==-1&&!String(I.Endpoint).startsWith("http:")||d.toLowerCase()!==d||d.length<3)I.ForcePathStyle=!0;if(I.DisableMultiRegionAccessPoints)I.disableMultiRegionAccessPoints=!0,I.DisableMRAP=!0;return I},"resolveParamsForS3"),PE5=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/,$E5=/(\d+\.){3}\d+/,uE5=/\.\./,TE5=aC((I)=>PE5.test(I)&&!$E5.test(I)&&!uE5.test(I),"isDnsCompatibleBucketName"),OE5=aC((I)=>{let[d,G,Z,,,C]=I.split(":"),W=d==="arn"&&I.split(":").length>=6,w=Boolean(W&&G&&Z&&C);if(W&&!w)throw new Error(`Invalid ARN: ${I} was an invalid ARN.`);return w},"isArnBucketName"),mE5=aC((I,d,G)=>{let Z=aC(async()=>{let C=G[I]??G[d];if(typeof C==="function")return C();return C},"configProvider");if(I==="credentialScope"||d==="CredentialScope")return async()=>{let C=typeof G.credentials==="function"?await G.credentials():G.credentials;return(C==null?void 0:C.credentialScope)??(C==null?void 0:C.CredentialScope)};if(I==="endpoint"||d==="endpoint")return async()=>{let C=await Z();if(C&&typeof C==="object"){if("url"in C)return C.url.href;if("hostname"in C){let{protocol:W,hostname:w,port:B,path:A}=C;return`${W}//${w}${B?":"+B:""}${A}`}}return C};return Z},"createConfigValueProvider"),lE5=xo0(),Ce0=qJ(),kX1=aC((I)=>{if(typeof I==="object"){if("url"in I)return Ce0.parseUrl(I.url);return I}return Ce0.parseUrl(I)},"toEndpointV1"),we0=aC(async(I,d,G,Z)=>{if(!G.endpoint){let w=await lE5.getEndpointFromConfig(G.serviceId||"");if(w)G.endpoint=()=>Promise.resolve(kX1(w))}let C=await Be0(I,d,G);if(typeof G.endpointProvider!=="function")throw new Error("config.endpointProvider is not set.");return G.endpointProvider(C,Z)},"getEndpointFromInstructions"),Be0=aC(async(I,d,G)=>{var Z;let C={},W=((Z=d==null?void 0:d.getEndpointParameterInstructions)==null?void 0:Z.call(d))||{};for(let[w,B]of Object.entries(W))switch(B.type){case"staticContextParams":C[w]=B.value;break;case"contextParams":C[w]=I[B.name];break;case"clientContextParams":case"builtInParams":C[w]=await mE5(B.name,w,G)();break;default:throw new Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(B))}if(Object.keys(W).length===0)Object.assign(C,G);if(String(G.serviceId).toLowerCase()==="s3")await yE5(C);return C},"resolveParams"),Un=Fq(),Ae0=aC(({config:I,instructions:d})=>{return(G,Z)=>async(C)=>{var W,w,B;let A=await we0(C.input,{getEndpointParameterInstructions(){return d}},{...I},Z);Z.endpointV2=A,Z.authSchemes=(W=A.properties)==null?void 0:W.authSchemes;let V=(w=Z.authSchemes)==null?void 0:w[0];if(V){Z.signing_region=V.signingRegion,Z.signing_service=V.signingName;let X=Un.getSmithyContext(Z),_=(B=X==null?void 0:X.selectedHttpAuthScheme)==null?void 0:B.httpAuthOption;if(_)_.signingProperties=Object.assign(_.signingProperties||{},{signing_region:V.signingRegion,signingRegion:V.signingRegion,signing_service:V.signingName,signingName:V.signingName,signingRegionSet:V.signingRegionSet},V.properties)}return G({...C})}},"endpointMiddleware"),bE5=n6(),Ve0={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:bE5.serializerMiddlewareOption.name},hE5=aC((I,d)=>({applyToStack:(G)=>{G.addRelativeTo(Ae0({config:I,instructions:d}),Ve0)}}),"getEndpointPlugin"),jE5=aC((I)=>{let d=I.tls??!0,{endpoint:G}=I,Z=G!=null?async()=>kX1(await Un.normalizeProvider(G)()):void 0;return{...I,endpoint:Z,tls:d,isCustomEndpoint:!!G,useDualstackEndpoint:Un.normalizeProvider(I.useDualstackEndpoint??!1),useFipsEndpoint:Un.normalizeProvider(I.useFipsEndpoint??!1)}},"resolveEndpointConfig")});var xX1=Y((Ye0)=>{Object.defineProperty(Ye0,"__esModule",{value:!0});Ye0.default=cE5;var kE5=xE5(B1("crypto"));function xE5(I){return I&&I.__esModule?I:{default:I}}var Mn=new Uint8Array(256),En=Mn.length;function cE5(){if(En>Mn.length-16)kE5.default.randomFillSync(Mn),En=0;return Mn.slice(En,En+=16)}});var He0=Y((_e0)=>{Object.defineProperty(_e0,"__esModule",{value:!0});_e0.default=void 0;var iE5=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;_e0.default=iE5});var DP=Y((Fe0)=>{Object.defineProperty(Fe0,"__esModule",{value:!0});Fe0.default=void 0;var nE5=rE5(He0());function rE5(I){return I&&I.__esModule?I:{default:I}}function aE5(I){return typeof I==="string"&&nE5.default.test(I)}var sE5=aE5;Fe0.default=sE5});var HP=Y((Ke0)=>{Object.defineProperty(Ke0,"__esModule",{value:!0});Ke0.default=void 0;Ke0.unsafeStringify=Je0;var oE5=eE5(DP());function eE5(I){return I&&I.__esModule?I:{default:I}}var I7=[];for(let I=0;I<256;++I)I7.push((I+256).toString(16).slice(1));function Je0(I,d=0){return I7[I[d+0]]+I7[I[d+1]]+I7[I[d+2]]+I7[I[d+3]]+"-"+I7[I[d+4]]+I7[I[d+5]]+"-"+I7[I[d+6]]+I7[I[d+7]]+"-"+I7[I[d+8]]+I7[I[d+9]]+"-"+I7[I[d+10]]+I7[I[d+11]]+I7[I[d+12]]+I7[I[d+13]]+I7[I[d+14]]+I7[I[d+15]]}function tE5(I,d=0){let G=Je0(I,d);if(!oE5.default(G))throw TypeError("Stringified UUID is invalid");return G}var IM5=tE5;Ke0.default=IM5});var qe0=Y((Qe0)=>{Object.defineProperty(Qe0,"__esModule",{value:!0});Qe0.default=void 0;var GM5=CM5(xX1()),ZM5=HP();function CM5(I){return I&&I.__esModule?I:{default:I}}var ze0,cX1,pX1=0,iX1=0;function WM5(I,d,G){let Z=d&&G||0,C=d||new Array(16);I=I||{};let W=I.node||ze0,w=I.clockseq!==void 0?I.clockseq:cX1;if(W==null||w==null){let F=I.random||(I.rng||GM5.default)();if(W==null)W=ze0=[F[0]|1,F[1],F[2],F[3],F[4],F[5]];if(w==null)w=cX1=(F[6]<<8|F[7])&16383}let B=I.msecs!==void 0?I.msecs:Date.now(),A=I.nsecs!==void 0?I.nsecs:iX1+1,V=B-pX1+(A-iX1)/1e4;if(V<0&&I.clockseq===void 0)w=w+1&16383;if((V<0||B>pX1)&&I.nsecs===void 0)A=0;if(A>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");pX1=B,iX1=A,cX1=w,B+=12219292800000;let X=((B&268435455)*1e4+A)%4294967296;C[Z++]=X>>>24&255,C[Z++]=X>>>16&255,C[Z++]=X>>>8&255,C[Z++]=X&255;let _=B/4294967296*1e4&268435455;C[Z++]=_>>>8&255,C[Z++]=_&255,C[Z++]=_>>>24&15|16,C[Z++]=_>>>16&255,C[Z++]=w>>>8|128,C[Z++]=w&255;for(let F=0;F<6;++F)C[Z+F]=W[F];return d||ZM5.unsafeStringify(C)}var wM5=WM5;Qe0.default=wM5});var nX1=Y((Re0)=>{Object.defineProperty(Re0,"__esModule",{value:!0});Re0.default=void 0;var BM5=AM5(DP());function AM5(I){return I&&I.__esModule?I:{default:I}}function VM5(I){if(!BM5.default(I))throw TypeError("Invalid UUID");let d,G=new Uint8Array(16);return G[0]=(d=parseInt(I.slice(0,8),16))>>>24,G[1]=d>>>16&255,G[2]=d>>>8&255,G[3]=d&255,G[4]=(d=parseInt(I.slice(9,13),16))>>>8,G[5]=d&255,G[6]=(d=parseInt(I.slice(14,18),16))>>>8,G[7]=d&255,G[8]=(d=parseInt(I.slice(19,23),16))>>>8,G[9]=d&255,G[10]=(d=parseInt(I.slice(24,36),16))/1099511627776&255,G[11]=d/4294967296&255,G[12]=d>>>24&255,G[13]=d>>>16&255,G[14]=d>>>8&255,G[15]=d&255,G}var XM5=VM5;Re0.default=XM5});var rX1=Y((Me0)=>{Object.defineProperty(Me0,"__esModule",{value:!0});Me0.URL=Me0.DNS=void 0;Me0.default=FM5;var YM5=HP(),_M5=DM5(nX1());function DM5(I){return I&&I.__esModule?I:{default:I}}function HM5(I){I=unescape(encodeURIComponent(I));let d=[];for(let G=0;G{Object.defineProperty(Le0,"__esModule",{value:!0});Le0.default=void 0;var KM5=NM5(B1("crypto"));function NM5(I){return I&&I.__esModule?I:{default:I}}function zM5(I){if(Array.isArray(I))I=Buffer.from(I);else if(typeof I==="string")I=Buffer.from(I,"utf8");return KM5.default.createHash("md5").update(I).digest()}var QM5=zM5;Le0.default=QM5});var Oe0=Y((ue0)=>{Object.defineProperty(ue0,"__esModule",{value:!0});ue0.default=void 0;var fM5=$e0(rX1()),qM5=$e0(Pe0());function $e0(I){return I&&I.__esModule?I:{default:I}}var RM5=fM5.default("v3",48,qM5.default),UM5=RM5;ue0.default=UM5});var be0=Y((me0)=>{Object.defineProperty(me0,"__esModule",{value:!0});me0.default=void 0;var vM5=EM5(B1("crypto"));function EM5(I){return I&&I.__esModule?I:{default:I}}var MM5={randomUUID:vM5.default.randomUUID};me0.default=MM5});var ce0=Y((ke0)=>{Object.defineProperty(ke0,"__esModule",{value:!0});ke0.default=void 0;var he0=je0(be0()),SM5=je0(xX1()),LM5=HP();function je0(I){return I&&I.__esModule?I:{default:I}}function yM5(I,d,G){if(he0.default.randomUUID&&!d&&!I)return he0.default.randomUUID();I=I||{};let Z=I.random||(I.rng||SM5.default)();if(Z[6]=Z[6]&15|64,Z[8]=Z[8]&63|128,d){G=G||0;for(let C=0;C<16;++C)d[G+C]=Z[C];return d}return LM5.unsafeStringify(Z)}var PM5=yM5;ke0.default=PM5});var ne0=Y((pe0)=>{Object.defineProperty(pe0,"__esModule",{value:!0});pe0.default=void 0;var $M5=uM5(B1("crypto"));function uM5(I){return I&&I.__esModule?I:{default:I}}function TM5(I){if(Array.isArray(I))I=Buffer.from(I);else if(typeof I==="string")I=Buffer.from(I,"utf8");return $M5.default.createHash("sha1").update(I).digest()}var OM5=TM5;pe0.default=OM5});var oe0=Y((ae0)=>{Object.defineProperty(ae0,"__esModule",{value:!0});ae0.default=void 0;var mM5=re0(rX1()),lM5=re0(ne0());function re0(I){return I&&I.__esModule?I:{default:I}}var bM5=mM5.default("v5",80,lM5.default),hM5=bM5;ae0.default=hM5});var It0=Y((ee0)=>{Object.defineProperty(ee0,"__esModule",{value:!0});ee0.default=void 0;var jM5="00000000-0000-0000-0000-000000000000";ee0.default=jM5});var Zt0=Y((dt0)=>{Object.defineProperty(dt0,"__esModule",{value:!0});dt0.default=void 0;var kM5=xM5(DP());function xM5(I){return I&&I.__esModule?I:{default:I}}function cM5(I){if(!kM5.default(I))throw TypeError("Invalid UUID");return parseInt(I.slice(14,15),16)}var pM5=cM5;dt0.default=pM5});var Ct0=Y((sC)=>{Object.defineProperty(sC,"__esModule",{value:!0});Object.defineProperty(sC,"NIL",{enumerable:!0,get:function(){return sM5.default}});Object.defineProperty(sC,"parse",{enumerable:!0,get:function(){return IS5.default}});Object.defineProperty(sC,"stringify",{enumerable:!0,get:function(){return tM5.default}});Object.defineProperty(sC,"v1",{enumerable:!0,get:function(){return iM5.default}});Object.defineProperty(sC,"v3",{enumerable:!0,get:function(){return nM5.default}});Object.defineProperty(sC,"v4",{enumerable:!0,get:function(){return rM5.default}});Object.defineProperty(sC,"v5",{enumerable:!0,get:function(){return aM5.default}});Object.defineProperty(sC,"validate",{enumerable:!0,get:function(){return eM5.default}});Object.defineProperty(sC,"version",{enumerable:!0,get:function(){return oM5.default}});var iM5=lV(qe0()),nM5=lV(Oe0()),rM5=lV(ce0()),aM5=lV(oe0()),sM5=lV(It0()),oM5=lV(Zt0()),eM5=lV(DP()),tM5=lV(HP()),IS5=lV(nX1());function lV(I){return I&&I.__esModule?I:{default:I}}});var aX1=Y((AW3,At0)=>{var{defineProperty:Sn,getOwnPropertyDescriptor:dS5,getOwnPropertyNames:GS5}=Object,ZS5=Object.prototype.hasOwnProperty,Qq=(I,d)=>Sn(I,"name",{value:d,configurable:!0}),CS5=(I,d)=>{for(var G in d)Sn(I,G,{get:d[G],enumerable:!0})},WS5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of GS5(d))if(!ZS5.call(I,C)&&C!==G)Sn(I,C,{get:()=>d[C],enumerable:!(Z=dS5(d,C))||Z.enumerable})}return I},wS5=(I)=>WS5(Sn({},"__esModule",{value:!0}),I),Wt0={};CS5(Wt0,{isClockSkewCorrectedError:()=>wt0,isClockSkewError:()=>DS5,isRetryableByTrait:()=>_S5,isServerError:()=>FS5,isThrottlingError:()=>HS5,isTransientError:()=>Bt0});At0.exports=wS5(Wt0);var BS5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],AS5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],VS5=["TimeoutError","RequestTimeout","RequestTimeoutException"],XS5=[500,502,503,504],YS5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],_S5=Qq((I)=>I.$retryable!==void 0,"isRetryableByTrait"),DS5=Qq((I)=>BS5.includes(I.name),"isClockSkewError"),wt0=Qq((I)=>{var d;return(d=I.$metadata)==null?void 0:d.clockSkewCorrected},"isClockSkewCorrectedError"),HS5=Qq((I)=>{var d,G;return((d=I.$metadata)==null?void 0:d.httpStatusCode)===429||AS5.includes(I.name)||((G=I.$retryable)==null?void 0:G.throttling)==!0},"isThrottlingError"),Bt0=Qq((I)=>{var d;return wt0(I)||VS5.includes(I.name)||YS5.includes((I==null?void 0:I.code)||"")||XS5.includes(((d=I.$metadata)==null?void 0:d.httpStatusCode)||0)},"isTransientError"),FS5=Qq((I)=>{var d;if(((d=I.$metadata)==null?void 0:d.httpStatusCode)!==void 0){let G=I.$metadata.httpStatusCode;if(500<=G&&G<=599&&!Bt0(I))return!0;return!1}return!1},"isServerError")});var fq=Y((VW3,Qt0)=>{var{defineProperty:Ln,getOwnPropertyDescriptor:gS5,getOwnPropertyNames:JS5}=Object,KS5=Object.prototype.hasOwnProperty,oC=(I,d)=>Ln(I,"name",{value:d,configurable:!0}),NS5=(I,d)=>{for(var G in d)Ln(I,G,{get:d[G],enumerable:!0})},zS5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of JS5(d))if(!KS5.call(I,C)&&C!==G)Ln(I,C,{get:()=>d[C],enumerable:!(Z=gS5(d,C))||Z.enumerable})}return I},QS5=(I)=>zS5(Ln({},"__esModule",{value:!0}),I),Xt0={};NS5(Xt0,{AdaptiveRetryStrategy:()=>ES5,ConfiguredRetryStrategy:()=>MS5,DEFAULT_MAX_ATTEMPTS:()=>sX1,DEFAULT_RETRY_DELAY_BASE:()=>FP,DEFAULT_RETRY_MODE:()=>fS5,DefaultRateLimiter:()=>Dt0,INITIAL_RETRY_TOKENS:()=>oX1,INVOCATION_ID_HEADER:()=>RS5,MAXIMUM_RETRY_DELAY:()=>eX1,NO_RETRY_INCREMENT:()=>Jt0,REQUEST_HEADER:()=>US5,RETRY_COST:()=>Ft0,RETRY_MODES:()=>Yt0,StandardRetryStrategy:()=>tX1,THROTTLING_RETRY_DELAY_BASE:()=>Ht0,TIMEOUT_RETRY_COST:()=>gt0});Qt0.exports=QS5(Xt0);var Yt0=((I)=>{return I.STANDARD="standard",I.ADAPTIVE="adaptive",I})(Yt0||{}),sX1=3,fS5="standard",qS5=aX1(),_t0=class I{constructor(d){this.currentCapacity=0,this.enabled=!1,this.lastMaxRate=0,this.measuredTxRate=0,this.requestCount=0,this.lastTimestamp=0,this.timeWindow=0,this.beta=(d==null?void 0:d.beta)??0.7,this.minCapacity=(d==null?void 0:d.minCapacity)??1,this.minFillRate=(d==null?void 0:d.minFillRate)??0.5,this.scaleConstant=(d==null?void 0:d.scaleConstant)??0.4,this.smooth=(d==null?void 0:d.smooth)??0.8;let G=this.getCurrentTimeInSeconds();this.lastThrottleTime=G,this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}getCurrentTimeInSeconds(){return Date.now()/1000}async getSendToken(){return this.acquireTokenBucket(1)}async acquireTokenBucket(d){if(!this.enabled)return;if(this.refillTokenBucket(),d>this.currentCapacity){let G=(d-this.currentCapacity)/this.fillRate*1000;await new Promise((Z)=>setTimeout(Z,G))}this.currentCapacity=this.currentCapacity-d}refillTokenBucket(){let d=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=d;return}let G=(d-this.lastTimestamp)*this.fillRate;this.currentCapacity=Math.min(this.maxCapacity,this.currentCapacity+G),this.lastTimestamp=d}updateClientSendingRate(d){let G;if(this.updateMeasuredRate(),qS5.isThrottlingError(d)){let C=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=C,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),G=this.cubicThrottle(C),this.enableTokenBucket()}else this.calculateTimeWindow(),G=this.cubicSuccess(this.getCurrentTimeInSeconds());let Z=Math.min(G,2*this.measuredTxRate);this.updateTokenBucketRate(Z)}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(d){return this.getPrecise(d*this.beta)}cubicSuccess(d){return this.getPrecise(this.scaleConstant*Math.pow(d-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(d){this.refillTokenBucket(),this.fillRate=Math.max(d,this.minFillRate),this.maxCapacity=Math.max(d,this.minCapacity),this.currentCapacity=Math.min(this.currentCapacity,this.maxCapacity)}updateMeasuredRate(){let d=this.getCurrentTimeInSeconds(),G=Math.floor(d*2)/2;if(this.requestCount++,G>this.lastTxRateBucket){let Z=this.requestCount/(G-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(Z*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=G}}getPrecise(d){return parseFloat(d.toFixed(8))}};oC(_t0,"DefaultRateLimiter");var Dt0=_t0,FP=100,eX1=20000,Ht0=500,oX1=500,Ft0=5,gt0=10,Jt0=1,RS5="amz-sdk-invocation-id",US5="amz-sdk-request",vS5=oC(()=>{let I=FP;return{computeNextBackoffDelay:oC((Z)=>{return Math.floor(Math.min(eX1,Math.random()*2**Z*I))},"computeNextBackoffDelay"),setDelayBase:oC((Z)=>{I=Z},"setDelayBase")}},"getDefaultRetryBackoffStrategy"),Vt0=oC(({retryDelay:I,retryCount:d,retryCost:G})=>{return{getRetryCount:oC(()=>d,"getRetryCount"),getRetryDelay:oC(()=>Math.min(eX1,I),"getRetryDelay"),getRetryCost:oC(()=>G,"getRetryCost")}},"createDefaultRetryToken"),Kt0=class I{constructor(d){this.maxAttempts=d,this.mode="standard",this.capacity=oX1,this.retryBackoffStrategy=vS5(),this.maxAttemptsProvider=typeof d==="function"?d:async()=>d}async acquireInitialRetryToken(d){return Vt0({retryDelay:FP,retryCount:0})}async refreshRetryTokenForRetry(d,G){let Z=await this.getMaxAttempts();if(this.shouldRetry(d,G,Z)){let C=G.errorType;this.retryBackoffStrategy.setDelayBase(C==="THROTTLING"?Ht0:FP);let W=this.retryBackoffStrategy.computeNextBackoffDelay(d.getRetryCount()),w=G.retryAfterHint?Math.max(G.retryAfterHint.getTime()-Date.now()||0,W):W,B=this.getCapacityCost(C);return this.capacity-=B,Vt0({retryDelay:w,retryCount:d.getRetryCount()+1,retryCost:B})}throw new Error("No retry token available")}recordSuccess(d){this.capacity=Math.max(oX1,this.capacity+(d.getRetryCost()??Jt0))}getCapacity(){return this.capacity}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(d){return console.warn(`Max attempts provider could not resolve. Using default of ${sX1}`),sX1}}shouldRetry(d,G,Z){return d.getRetryCount()+1=this.getCapacityCost(G.errorType)&&this.isRetryableError(G.errorType)}getCapacityCost(d){return d==="TRANSIENT"?gt0:Ft0}isRetryableError(d){return d==="THROTTLING"||d==="TRANSIENT"}};oC(Kt0,"StandardRetryStrategy");var tX1=Kt0,Nt0=class I{constructor(d,G){this.maxAttemptsProvider=d,this.mode="adaptive";let{rateLimiter:Z}=G??{};this.rateLimiter=Z??new Dt0,this.standardRetryStrategy=new tX1(d)}async acquireInitialRetryToken(d){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(d)}async refreshRetryTokenForRetry(d,G){return this.rateLimiter.updateClientSendingRate(G),this.standardRetryStrategy.refreshRetryTokenForRetry(d,G)}recordSuccess(d){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(d)}};oC(Nt0,"AdaptiveRetryStrategy");var ES5=Nt0,zt0=class I extends tX1{constructor(d,G=FP){super(typeof d==="function"?d:async()=>d);if(typeof G==="number")this.computeNextBackoffDelay=()=>G;else this.computeNextBackoffDelay=G}async refreshRetryTokenForRetry(d,G){let Z=await super.refreshRetryTokenForRetry(d,G);return Z.getRetryDelay=()=>this.computeNextBackoffDelay(Z.getRetryCount()),Z}};oC(zt0,"ConfiguredRetryStrategy");var MS5=zt0});var Rt0=Y((ft0)=>{Object.defineProperty(ft0,"__esModule",{value:!0});ft0.isStreamingPayload=void 0;var SS5=B1("stream"),LS5=(I)=>(I===null||I===void 0?void 0:I.body)instanceof SS5.Readable||typeof ReadableStream!=="undefined"&&(I===null||I===void 0?void 0:I.body)instanceof ReadableStream;ft0.isStreamingPayload=LS5});var bV=Y((YW3,jt0)=>{var{defineProperty:yn,getOwnPropertyDescriptor:yS5,getOwnPropertyNames:PS5}=Object,$S5=Object.prototype.hasOwnProperty,M6=(I,d)=>yn(I,"name",{value:d,configurable:!0}),uS5=(I,d)=>{for(var G in d)yn(I,G,{get:d[G],enumerable:!0})},TS5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of PS5(d))if(!$S5.call(I,C)&&C!==G)yn(I,C,{get:()=>d[C],enumerable:!(Z=yS5(d,C))||Z.enumerable})}return I},OS5=(I)=>TS5(yn({},"__esModule",{value:!0}),I),vt0={};uS5(vt0,{AdaptiveRetryStrategy:()=>bS5,CONFIG_MAX_ATTEMPTS:()=>dY1,CONFIG_RETRY_MODE:()=>Tt0,ENV_MAX_ATTEMPTS:()=>IY1,ENV_RETRY_MODE:()=>ut0,NODE_MAX_ATTEMPT_CONFIG_OPTIONS:()=>hS5,NODE_RETRY_MODE_CONFIG_OPTIONS:()=>kS5,StandardRetryStrategy:()=>Pt0,defaultDelayDecider:()=>Mt0,defaultRetryDecider:()=>St0,getOmitRetryHeadersPlugin:()=>xS5,getRetryAfterHint:()=>ht0,getRetryPlugin:()=>aS5,omitRetryHeadersMiddleware:()=>Ot0,omitRetryHeadersMiddlewareOptions:()=>mt0,resolveRetryConfig:()=>jS5,retryMiddleware:()=>lt0,retryMiddlewareOptions:()=>bt0});jt0.exports=OS5(vt0);var qq=t8(),Et0=Ct0(),E3=fq(),mS5=M6((I,d)=>{let G=I,Z=(d==null?void 0:d.noRetryIncrement)??E3.NO_RETRY_INCREMENT,C=(d==null?void 0:d.retryCost)??E3.RETRY_COST,W=(d==null?void 0:d.timeoutRetryCost)??E3.TIMEOUT_RETRY_COST,w=I,B=M6((_)=>_.name==="TimeoutError"?W:C,"getCapacityAmount"),A=M6((_)=>B(_)<=w,"hasRetryTokens");return Object.freeze({hasRetryTokens:A,retrieveRetryTokens:M6((_)=>{if(!A(_))throw new Error("No retry token available");let F=B(_);return w-=F,F},"retrieveRetryTokens"),releaseRetryTokens:M6((_)=>{w+=_??Z,w=Math.min(w,G)},"releaseRetryTokens")})},"getDefaultRetryQuota"),Mt0=M6((I,d)=>Math.floor(Math.min(E3.MAXIMUM_RETRY_DELAY,Math.random()*2**d*I)),"defaultDelayDecider"),ED=aX1(),St0=M6((I)=>{if(!I)return!1;return ED.isRetryableByTrait(I)||ED.isClockSkewError(I)||ED.isThrottlingError(I)||ED.isTransientError(I)},"defaultRetryDecider"),Lt0=M6((I)=>{if(I instanceof Error)return I;if(I instanceof Object)return Object.assign(new Error,I);if(typeof I==="string")return new Error(I);return new Error(`AWS SDK error wrapper for ${I}`)},"asSdkError"),yt0=class I{constructor(d,G){this.maxAttemptsProvider=d,this.mode=E3.RETRY_MODES.STANDARD,this.retryDecider=(G==null?void 0:G.retryDecider)??St0,this.delayDecider=(G==null?void 0:G.delayDecider)??Mt0,this.retryQuota=(G==null?void 0:G.retryQuota)??mS5(E3.INITIAL_RETRY_TOKENS)}shouldRetry(d,G,Z){return GsetTimeout(J,g));continue}if(!X.$metadata)X.$metadata={};throw X.$metadata.attempts=W,X.$metadata.totalRetryDelay=w,X}}};M6(yt0,"StandardRetryStrategy");var Pt0=yt0,lS5=M6((I)=>{if(!qq.HttpResponse.isInstance(I))return;let d=Object.keys(I.headers).find((W)=>W.toLowerCase()==="retry-after");if(!d)return;let G=I.headers[d],Z=Number(G);if(!Number.isNaN(Z))return Z*1000;return new Date(G).getTime()-Date.now()},"getDelayFromRetryAfterHeader"),$t0=class I extends Pt0{constructor(d,G){let{rateLimiter:Z,...C}=G??{};super(d,C);this.rateLimiter=Z??new E3.DefaultRateLimiter,this.mode=E3.RETRY_MODES.ADAPTIVE}async retry(d,G){return super.retry(d,G,{beforeRequest:async()=>{return this.rateLimiter.getSendToken()},afterRequest:(Z)=>{this.rateLimiter.updateClientSendingRate(Z)}})}};M6($t0,"AdaptiveRetryStrategy");var bS5=$t0,Ut0=Fq(),IY1="AWS_MAX_ATTEMPTS",dY1="max_attempts",hS5={environmentVariableSelector:(I)=>{let d=I[IY1];if(!d)return;let G=parseInt(d);if(Number.isNaN(G))throw new Error(`Environment variable ${IY1} mast be a number, got "${d}"`);return G},configFileSelector:(I)=>{let d=I[dY1];if(!d)return;let G=parseInt(d);if(Number.isNaN(G))throw new Error(`Shared config file entry ${dY1} mast be a number, got "${d}"`);return G},default:E3.DEFAULT_MAX_ATTEMPTS},jS5=M6((I)=>{let{retryStrategy:d}=I,G=Ut0.normalizeProvider(I.maxAttempts??E3.DEFAULT_MAX_ATTEMPTS);return{...I,maxAttempts:G,retryStrategy:async()=>{if(d)return d;if(await Ut0.normalizeProvider(I.retryMode)()===E3.RETRY_MODES.ADAPTIVE)return new E3.AdaptiveRetryStrategy(G);return new E3.StandardRetryStrategy(G)}}},"resolveRetryConfig"),ut0="AWS_RETRY_MODE",Tt0="retry_mode",kS5={environmentVariableSelector:(I)=>I[ut0],configFileSelector:(I)=>I[Tt0],default:E3.DEFAULT_RETRY_MODE},Ot0=M6(()=>(I)=>async(d)=>{let{request:G}=d;if(qq.HttpRequest.isInstance(G))delete G.headers[E3.INVOCATION_ID_HEADER],delete G.headers[E3.REQUEST_HEADER];return I(d)},"omitRetryHeadersMiddleware"),mt0={name:"omitRetryHeadersMiddleware",tags:["RETRY","HEADERS","OMIT_RETRY_HEADERS"],relation:"before",toMiddleware:"awsAuthMiddleware",override:!0},xS5=M6((I)=>({applyToStack:(d)=>{d.addRelativeTo(Ot0(),mt0)}}),"getOmitRetryHeadersPlugin"),cS5=h2(),pS5=Rt0(),lt0=M6((I)=>(d,G)=>async(Z)=>{var C;let W=await I.retryStrategy(),w=await I.maxAttempts();if(iS5(W)){W=W;let B=await W.acquireInitialRetryToken(G.partition_id),A=new Error,V=0,X=0,{request:_}=Z,F=qq.HttpRequest.isInstance(_);if(F)_.headers[E3.INVOCATION_ID_HEADER]=Et0.v4();while(!0)try{if(F)_.headers[E3.REQUEST_HEADER]=`attempt=${V+1}; max=${w}`;let{response:g,output:J}=await d(Z);return W.recordSuccess(B),J.$metadata.attempts=V+1,J.$metadata.totalRetryDelay=X,{response:g,output:J}}catch(g){let J=nS5(g);if(A=Lt0(g),F&&pS5.isStreamingPayload(_))throw(C=G.logger instanceof cS5.NoOpLogger?console:G.logger)==null||C.warn("An error was encountered in a non-retryable streaming request."),A;try{B=await W.refreshRetryTokenForRetry(B,J)}catch(Q){if(!A.$metadata)A.$metadata={};throw A.$metadata.attempts=V+1,A.$metadata.totalRetryDelay=X,A}V=B.getRetryCount();let K=B.getRetryDelay();X+=K,await new Promise((Q)=>setTimeout(Q,K))}}else{if(W=W,W==null?void 0:W.mode)G.userAgent=[...G.userAgent||[],["cfg/retry-mode",W.mode]];return W.retry(d,Z)}},"retryMiddleware"),iS5=M6((I)=>typeof I.acquireInitialRetryToken!=="undefined"&&typeof I.refreshRetryTokenForRetry!=="undefined"&&typeof I.recordSuccess!=="undefined","isRetryStrategyV2"),nS5=M6((I)=>{let d={error:I,errorType:rS5(I)},G=ht0(I.$response);if(G)d.retryAfterHint=G;return d},"getRetryErrorInfo"),rS5=M6((I)=>{if(ED.isThrottlingError(I))return"THROTTLING";if(ED.isTransientError(I))return"TRANSIENT";if(ED.isServerError(I))return"SERVER_ERROR";return"CLIENT_ERROR"},"getRetryErrorType"),bt0={name:"retryMiddleware",tags:["RETRY"],step:"finalizeRequest",priority:"high",override:!0},aS5=M6((I)=>({applyToStack:(d)=>{d.add(lt0(I),bt0)}}),"getRetryPlugin"),ht0=M6((I)=>{if(!qq.HttpResponse.isInstance(I))return;let d=Object.keys(I.headers).find((W)=>W.toLowerCase()==="retry-after");if(!d)return;let G=I.headers[d],Z=Number(G);if(!Number.isNaN(Z))return new Date(Z*1000);return new Date(G)},"getRetryAfterHint")});var ct0=Y((kt0)=>{Object.defineProperty(kt0,"__esModule",{value:!0});kt0.resolveClientEndpointParameters=void 0;var sS5=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,defaultSigningName:"bedrock"}};kt0.resolveClientEndpointParameters=sS5});var pt0=Y((DW3,oS5)=>{oS5.exports={name:"@aws-sdk/client-bedrock-runtime",description:"AWS SDK for JavaScript Bedrock Runtime Client for Node.js, Browser and React Native",version:"3.423.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo bedrock-runtime"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/client-sts":"3.423.0","@aws-sdk/credential-provider-node":"3.423.0","@aws-sdk/middleware-host-header":"3.418.0","@aws-sdk/middleware-logger":"3.418.0","@aws-sdk/middleware-recursion-detection":"3.418.0","@aws-sdk/middleware-signing":"3.418.0","@aws-sdk/middleware-user-agent":"3.418.0","@aws-sdk/region-config-resolver":"3.418.0","@aws-sdk/types":"3.418.0","@aws-sdk/util-endpoints":"3.418.0","@aws-sdk/util-user-agent-browser":"3.418.0","@aws-sdk/util-user-agent-node":"3.418.0","@smithy/config-resolver":"^2.0.10","@smithy/eventstream-serde-browser":"^2.0.9","@smithy/eventstream-serde-config-resolver":"^2.0.9","@smithy/eventstream-serde-node":"^2.0.9","@smithy/fetch-http-handler":"^2.1.5","@smithy/hash-node":"^2.0.9","@smithy/invalid-dependency":"^2.0.9","@smithy/middleware-content-length":"^2.0.11","@smithy/middleware-endpoint":"^2.0.9","@smithy/middleware-retry":"^2.0.12","@smithy/middleware-serde":"^2.0.9","@smithy/middleware-stack":"^2.0.2","@smithy/node-config-provider":"^2.0.12","@smithy/node-http-handler":"^2.1.5","@smithy/protocol-http":"^3.0.5","@smithy/smithy-client":"^2.1.6","@smithy/types":"^2.3.3","@smithy/url-parser":"^2.0.9","@smithy/util-base64":"^2.0.0","@smithy/util-body-length-browser":"^2.0.0","@smithy/util-body-length-node":"^2.1.0","@smithy/util-defaults-mode-browser":"^2.0.10","@smithy/util-defaults-mode-node":"^2.0.12","@smithy/util-retry":"^2.0.2","@smithy/util-stream":"^2.0.12","@smithy/util-utf8":"^2.0.0",tslib:"^2.5.0"},devDependencies:{"@smithy/service-client-documentation-generator":"^2.0.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-runtime",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-bedrock-runtime"}}});var rt0=Y((it0)=>{Object.defineProperty(it0,"__esModule",{value:!0});it0.resolveStsAuthConfig=void 0;var eS5=OV(),tS5=(I,{stsClientCtor:d})=>eS5.resolveAwsAuthConfig({...I,stsClientCtor:d});it0.resolveStsAuthConfig=tS5});var ot0=Y((at0)=>{Object.defineProperty(at0,"__esModule",{value:!0});at0.resolveClientEndpointParameters=void 0;var IL5=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,useGlobalEndpoint:I.useGlobalEndpoint??!1,defaultSigningName:"sts"}};at0.resolveClientEndpointParameters=IL5});var et0=Y((gW3,dL5)=>{dL5.exports={name:"@aws-sdk/client-sts",description:"AWS SDK for JavaScript Sts Client for Node.js, Browser and React Native",version:"3.423.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sts",test:"yarn test:unit","test:unit":"jest"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/credential-provider-node":"3.423.0","@aws-sdk/middleware-host-header":"3.418.0","@aws-sdk/middleware-logger":"3.418.0","@aws-sdk/middleware-recursion-detection":"3.418.0","@aws-sdk/middleware-sdk-sts":"3.418.0","@aws-sdk/middleware-signing":"3.418.0","@aws-sdk/middleware-user-agent":"3.418.0","@aws-sdk/region-config-resolver":"3.418.0","@aws-sdk/types":"3.418.0","@aws-sdk/util-endpoints":"3.418.0","@aws-sdk/util-user-agent-browser":"3.418.0","@aws-sdk/util-user-agent-node":"3.418.0","@smithy/config-resolver":"^2.0.10","@smithy/fetch-http-handler":"^2.1.5","@smithy/hash-node":"^2.0.9","@smithy/invalid-dependency":"^2.0.9","@smithy/middleware-content-length":"^2.0.11","@smithy/middleware-endpoint":"^2.0.9","@smithy/middleware-retry":"^2.0.12","@smithy/middleware-serde":"^2.0.9","@smithy/middleware-stack":"^2.0.2","@smithy/node-config-provider":"^2.0.12","@smithy/node-http-handler":"^2.1.5","@smithy/protocol-http":"^3.0.5","@smithy/smithy-client":"^2.1.6","@smithy/types":"^2.3.3","@smithy/url-parser":"^2.0.9","@smithy/util-base64":"^2.0.0","@smithy/util-body-length-browser":"^2.0.0","@smithy/util-body-length-node":"^2.1.0","@smithy/util-defaults-mode-browser":"^2.0.10","@smithy/util-defaults-mode-node":"^2.0.12","@smithy/util-retry":"^2.0.2","@smithy/util-utf8":"^2.0.0","fast-xml-parser":"4.2.5",tslib:"^2.5.0"},devDependencies:{"@smithy/service-client-documentation-generator":"^2.0.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sts",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sts"}}});var Pn=Y((ZY1)=>{Object.defineProperty(ZY1,"__esModule",{value:!0});ZY1.STSServiceException=ZY1.__ServiceException=void 0;var tt0=h2();Object.defineProperty(ZY1,"__ServiceException",{enumerable:!0,get:function(){return tt0.ServiceException}});class GY1 extends tt0.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,GY1.prototype)}}ZY1.STSServiceException=GY1});var SD=Y((d12)=>{Object.defineProperty(d12,"__esModule",{value:!0});d12.GetSessionTokenResponseFilterSensitiveLog=d12.GetFederationTokenResponseFilterSensitiveLog=d12.AssumeRoleWithWebIdentityResponseFilterSensitiveLog=d12.AssumeRoleWithWebIdentityRequestFilterSensitiveLog=d12.AssumeRoleWithSAMLResponseFilterSensitiveLog=d12.AssumeRoleWithSAMLRequestFilterSensitiveLog=d12.AssumeRoleResponseFilterSensitiveLog=d12.CredentialsFilterSensitiveLog=d12.InvalidAuthorizationMessageException=d12.IDPCommunicationErrorException=d12.InvalidIdentityTokenException=d12.IDPRejectedClaimException=d12.RegionDisabledException=d12.PackedPolicyTooLargeException=d12.MalformedPolicyDocumentException=d12.ExpiredTokenException=void 0;var CY1=h2(),MD=Pn();class WY1 extends MD.STSServiceException{constructor(I){super({name:"ExpiredTokenException",$fault:"client",...I});this.name="ExpiredTokenException",this.$fault="client",Object.setPrototypeOf(this,WY1.prototype)}}d12.ExpiredTokenException=WY1;class wY1 extends MD.STSServiceException{constructor(I){super({name:"MalformedPolicyDocumentException",$fault:"client",...I});this.name="MalformedPolicyDocumentException",this.$fault="client",Object.setPrototypeOf(this,wY1.prototype)}}d12.MalformedPolicyDocumentException=wY1;class BY1 extends MD.STSServiceException{constructor(I){super({name:"PackedPolicyTooLargeException",$fault:"client",...I});this.name="PackedPolicyTooLargeException",this.$fault="client",Object.setPrototypeOf(this,BY1.prototype)}}d12.PackedPolicyTooLargeException=BY1;class AY1 extends MD.STSServiceException{constructor(I){super({name:"RegionDisabledException",$fault:"client",...I});this.name="RegionDisabledException",this.$fault="client",Object.setPrototypeOf(this,AY1.prototype)}}d12.RegionDisabledException=AY1;class VY1 extends MD.STSServiceException{constructor(I){super({name:"IDPRejectedClaimException",$fault:"client",...I});this.name="IDPRejectedClaimException",this.$fault="client",Object.setPrototypeOf(this,VY1.prototype)}}d12.IDPRejectedClaimException=VY1;class XY1 extends MD.STSServiceException{constructor(I){super({name:"InvalidIdentityTokenException",$fault:"client",...I});this.name="InvalidIdentityTokenException",this.$fault="client",Object.setPrototypeOf(this,XY1.prototype)}}d12.InvalidIdentityTokenException=XY1;class YY1 extends MD.STSServiceException{constructor(I){super({name:"IDPCommunicationErrorException",$fault:"client",...I});this.name="IDPCommunicationErrorException",this.$fault="client",Object.setPrototypeOf(this,YY1.prototype)}}d12.IDPCommunicationErrorException=YY1;class _Y1 extends MD.STSServiceException{constructor(I){super({name:"InvalidAuthorizationMessageException",$fault:"client",...I});this.name="InvalidAuthorizationMessageException",this.$fault="client",Object.setPrototypeOf(this,_Y1.prototype)}}d12.InvalidAuthorizationMessageException=_Y1;var GL5=(I)=>({...I,...I.SecretAccessKey&&{SecretAccessKey:CY1.SENSITIVE_STRING}});d12.CredentialsFilterSensitiveLog=GL5;var ZL5=(I)=>({...I,...I.Credentials&&{Credentials:d12.CredentialsFilterSensitiveLog(I.Credentials)}});d12.AssumeRoleResponseFilterSensitiveLog=ZL5;var CL5=(I)=>({...I,...I.SAMLAssertion&&{SAMLAssertion:CY1.SENSITIVE_STRING}});d12.AssumeRoleWithSAMLRequestFilterSensitiveLog=CL5;var WL5=(I)=>({...I,...I.Credentials&&{Credentials:d12.CredentialsFilterSensitiveLog(I.Credentials)}});d12.AssumeRoleWithSAMLResponseFilterSensitiveLog=WL5;var wL5=(I)=>({...I,...I.WebIdentityToken&&{WebIdentityToken:CY1.SENSITIVE_STRING}});d12.AssumeRoleWithWebIdentityRequestFilterSensitiveLog=wL5;var BL5=(I)=>({...I,...I.Credentials&&{Credentials:d12.CredentialsFilterSensitiveLog(I.Credentials)}});d12.AssumeRoleWithWebIdentityResponseFilterSensitiveLog=BL5;var AL5=(I)=>({...I,...I.Credentials&&{Credentials:d12.CredentialsFilterSensitiveLog(I.Credentials)}});d12.GetFederationTokenResponseFilterSensitiveLog=AL5;var VL5=(I)=>({...I,...I.Credentials&&{Credentials:d12.CredentialsFilterSensitiveLog(I.Credentials)}});d12.GetSessionTokenResponseFilterSensitiveLog=VL5});var $n=Y((ML5)=>{var RL5=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",Z12="[:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]["+RL5+"]*",UL5=new RegExp("^"+Z12+"$"),vL5=function(I,d){let G=[],Z=d.exec(I);while(Z){let C=[];C.startIndex=d.lastIndex-Z[0].length;let W=Z.length;for(let w=0;w{var DY1=$n(),TL5={allowBooleanAttributes:!1,unpairedTags:[]};cL5.validate=function(I,d){d=Object.assign({},TL5,d);let G=[],Z=!1,C=!1;if(I[0]==="\uFEFF")I=I.substr(1);for(let W=0;W"&&I[W]!==" "&&I[W]!=="\t"&&I[W]!==` +`&&I[W]!=="\r";W++)A+=I[W];if(A=A.trim(),A[A.length-1]==="/")A=A.substring(0,A.length-1),W--;if(!xL5(A)){let _;if(A.trim().length===0)_="Invalid space after '<'.";else _="Tag '"+A+"' is an invalid name.";return S6("InvalidTag",_,Xd(I,W))}let V=lL5(I,W);if(V===!1)return S6("InvalidAttr","Attributes for '"+A+"' have open quote.",Xd(I,W));let X=V.value;if(W=V.index,X[X.length-1]==="/"){let _=W-X.length;X=X.substring(0,X.length-1);let F=A12(X,d);if(F===!0)Z=!0;else return S6(F.err.code,F.err.msg,Xd(I,_+F.err.line))}else if(B)if(!V.tagClosed)return S6("InvalidTag","Closing tag '"+A+"' doesn't have proper closing.",Xd(I,W));else if(X.trim().length>0)return S6("InvalidTag","Closing tag '"+A+"' can't have attributes or invalid starting.",Xd(I,w));else{let _=G.pop();if(A!==_.tagName){let F=Xd(I,_.tagStartPos);return S6("InvalidTag","Expected closing tag '"+_.tagName+"' (opened in line "+F.line+", col "+F.col+") instead of closing tag '"+A+"'.",Xd(I,w))}if(G.length==0)C=!0}else{let _=A12(X,d);if(_!==!0)return S6(_.err.code,_.err.msg,Xd(I,W-X.length+_.err.line));if(C===!0)return S6("InvalidXml","Multiple possible root nodes found.",Xd(I,W));else if(d.unpairedTags.indexOf(A)!==-1);else G.push({tagName:A,tagStartPos:w});Z=!0}for(W++;W0)return S6("InvalidXml","Invalid '"+JSON.stringify(G.map((W)=>W.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1});return!0};function W12(I){return I===" "||I==="\t"||I===` +`||I==="\r"}function w12(I,d){let G=d;for(;d5&&Z==="xml")return S6("InvalidXml","XML declaration allowed only at the start of the document.",Xd(I,d));else if(I[d]=="?"&&I[d+1]==">"){d++;break}else continue}return d}function B12(I,d){if(I.length>d+5&&I[d+1]==="-"&&I[d+2]==="-"){for(d+=3;d"){d+=2;break}}else if(I.length>d+8&&I[d+1]==="D"&&I[d+2]==="O"&&I[d+3]==="C"&&I[d+4]==="T"&&I[d+5]==="Y"&&I[d+6]==="P"&&I[d+7]==="E"){let G=1;for(d+=8;d"){if(G--,G===0)break}}else if(I.length>d+9&&I[d+1]==="["&&I[d+2]==="C"&&I[d+3]==="D"&&I[d+4]==="A"&&I[d+5]==="T"&&I[d+6]==="A"&&I[d+7]==="["){for(d+=8;d"){d+=2;break}}return d}var OL5='"',mL5="'";function lL5(I,d){let G="",Z="",C=!1;for(;d"){if(Z===""){C=!0;break}}G+=I[d]}if(Z!=="")return!1;return{value:G,index:d,tagClosed:C}}var bL5=new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`,"g");function A12(I,d){let G=DY1.getAllMatches(I,bL5),Z={};for(let C=0;C{var V12={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(I,d){return d},attributeValueProcessor:function(I,d){return d},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(I,d,G){return I}},iL5=function(I){return Object.assign({},V12,I)};nL5.buildOptions=iL5;nL5.defaultOptions=V12});var D12=Y((qW3,_12)=>{class Y12{constructor(I){this.tagname=I,this.child=[],this[":@"]={}}add(I,d){if(I==="__proto__")I="#__proto__";this.child.push({[I]:d})}addChild(I){if(I.tagname==="__proto__")I.tagname="#__proto__";if(I[":@"]&&Object.keys(I[":@"]).length>0)this.child.push({[I.tagname]:I.child,[":@"]:I[":@"]});else this.child.push({[I.tagname]:I.child})}}_12.exports=Y12});var F12=Y((RW3,H12)=>{var sL5=$n();function oL5(I,d){let G={};if(I[d+3]==="O"&&I[d+4]==="C"&&I[d+5]==="T"&&I[d+6]==="Y"&&I[d+7]==="P"&&I[d+8]==="E"){d=d+9;let Z=1,C=!1,W=!1,w="";for(;d"){if(W){if(I[d-1]==="-"&&I[d-2]==="-")W=!1,Z--}else Z--;if(Z===0)break}else if(I[d]==="[")C=!0;else w+=I[d];if(Z!==0)throw new Error("Unclosed DOCTYPE")}else throw new Error("Invalid Tag instead of DOCTYPE");return{entities:G,i:d}}function eL5(I,d){let G="";for(;d{var JY1=$n(),JP=D12(),Wy5=F12(),wy5=mc(),UW3="<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,JY1.nameRegexp);class g12{constructor(I){this.options=I,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"}},this.addExternalEntities=By5,this.parseXml=_y5,this.parseTextData=Ay5,this.resolveNameSpace=Vy5,this.buildAttributesMap=Yy5,this.isItStopNode=gy5,this.replaceEntitiesValue=Hy5,this.readStopNodeData=Ky5,this.saveTextToParentTag=Fy5,this.addChild=Dy5}}function By5(I){let d=Object.keys(I);for(let G=0;G0){if(!w)I=this.replaceEntitiesValue(I);let B=this.options.tagValueProcessor(d,I,G,C,W);if(B===null||B===void 0)return I;else if(typeof B!==typeof I||B!==I)return B;else if(this.options.trimValues)return gY1(I,this.options.parseTagValue,this.options.numberParseOptions);else if(I.trim()===I)return gY1(I,this.options.parseTagValue,this.options.numberParseOptions);else return I}}}function Vy5(I){if(this.options.removeNSPrefix){let d=I.split(":"),G=I.charAt(0)==="/"?"/":"";if(d[0]==="xmlns")return"";if(d.length===2)I=G+d[1]}return I}var Xy5=new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`,"gm");function Yy5(I,d,G){if(!this.options.ignoreAttributes&&typeof I==="string"){let Z=JY1.getAllMatches(I,Xy5),C=Z.length,W={};for(let w=0;w",W,"Closing Tag is not closed."),A=I.substring(W+2,B).trim();if(this.options.removeNSPrefix){let _=A.indexOf(":");if(_!==-1)A=A.substr(_+1)}if(this.options.transformTagName)A=this.options.transformTagName(A);if(G)Z=this.saveTextToParentTag(Z,G,C);let V=C.substring(C.lastIndexOf(".")+1);if(A&&this.options.unpairedTags.indexOf(A)!==-1)throw new Error(`Unpaired tag can not be used as closing tag: `);let X=0;if(V&&this.options.unpairedTags.indexOf(V)!==-1)X=C.lastIndexOf(".",C.lastIndexOf(".")-1),this.tagsNodeStack.pop();else X=C.lastIndexOf(".");C=C.substring(0,X),G=this.tagsNodeStack.pop(),Z="",W=B}else if(I[W+1]==="?"){let B=FY1(I,W,!1,"?>");if(!B)throw new Error("Pi Tag is not closed.");if(Z=this.saveTextToParentTag(Z,G,C),this.options.ignoreDeclaration&&B.tagName==="?xml"||this.options.ignorePiTags);else{let A=new JP(B.tagName);if(A.add(this.options.textNodeName,""),B.tagName!==B.tagExp&&B.attrExpPresent)A[":@"]=this.buildAttributesMap(B.tagExp,C,B.tagName);this.addChild(G,A,C)}W=B.closeIndex+1}else if(I.substr(W+1,3)==="!--"){let B=RJ(I,"-->",W+4,"Comment is not closed.");if(this.options.commentPropName){let A=I.substring(W+4,B-2);Z=this.saveTextToParentTag(Z,G,C),G.add(this.options.commentPropName,[{[this.options.textNodeName]:A}])}W=B}else if(I.substr(W+1,2)==="!D"){let B=Wy5(I,W);this.docTypeEntities=B.entities,W=B.i}else if(I.substr(W+1,2)==="!["){let B=RJ(I,"]]>",W,"CDATA is not closed.")-2,A=I.substring(W+9,B);if(Z=this.saveTextToParentTag(Z,G,C),this.options.cdataPropName)G.add(this.options.cdataPropName,[{[this.options.textNodeName]:A}]);else{let V=this.parseTextData(A,G.tagname,C,!0,!1,!0);if(V==null)V="";G.add(this.options.textNodeName,V)}W=B+2}else{let B=FY1(I,W,this.options.removeNSPrefix),A=B.tagName,V=B.tagExp,X=B.attrExpPresent,_=B.closeIndex;if(this.options.transformTagName)A=this.options.transformTagName(A);if(G&&Z){if(G.tagname!=="!xml")Z=this.saveTextToParentTag(Z,G,C,!1)}let F=G;if(F&&this.options.unpairedTags.indexOf(F.tagname)!==-1)G=this.tagsNodeStack.pop(),C=C.substring(0,C.lastIndexOf("."));if(A!==d.tagname)C+=C?"."+A:A;if(this.isItStopNode(this.options.stopNodes,C,A)){let g="";if(V.length>0&&V.lastIndexOf("/")===V.length-1)W=B.closeIndex;else if(this.options.unpairedTags.indexOf(A)!==-1)W=B.closeIndex;else{let K=this.readStopNodeData(I,A,_+1);if(!K)throw new Error(`Unexpected end of ${A}`);W=K.i,g=K.tagContent}let J=new JP(A);if(A!==V&&X)J[":@"]=this.buildAttributesMap(V,C,A);if(g)g=this.parseTextData(g,A,C,!0,X,!0,!0);C=C.substr(0,C.lastIndexOf(".")),J.add(this.options.textNodeName,g),this.addChild(G,J,C)}else{if(V.length>0&&V.lastIndexOf("/")===V.length-1){if(A[A.length-1]==="/")A=A.substr(0,A.length-1),V=A;else V=V.substr(0,V.length-1);if(this.options.transformTagName)A=this.options.transformTagName(A);let g=new JP(A);if(A!==V&&X)g[":@"]=this.buildAttributesMap(V,C,A);this.addChild(G,g,C),C=C.substr(0,C.lastIndexOf("."))}else{let g=new JP(A);if(this.tagsNodeStack.push(G),A!==V&&X)g[":@"]=this.buildAttributesMap(V,C,A);this.addChild(G,g,C),G=g}Z="",W=_}}else Z+=I[W];return d.child};function Dy5(I,d,G){let Z=this.options.updateTag(d.tagname,G,d[":@"]);if(Z===!1);else if(typeof Z==="string")d.tagname=Z,I.addChild(d);else I.addChild(d)}var Hy5=function(I){if(this.options.processEntities){for(let d in this.docTypeEntities){let G=this.docTypeEntities[d];I=I.replace(G.regx,G.val)}for(let d in this.lastEntities){let G=this.lastEntities[d];I=I.replace(G.regex,G.val)}if(this.options.htmlEntities)for(let d in this.htmlEntities){let G=this.htmlEntities[d];I=I.replace(G.regex,G.val)}I=I.replace(this.ampEntity.regex,this.ampEntity.val)}return I};function Fy5(I,d,G,Z){if(I){if(Z===void 0)Z=Object.keys(d.child).length===0;if(I=this.parseTextData(I,d.tagname,G,!1,d[":@"]?Object.keys(d[":@"]).length!==0:!1,Z),I!==void 0&&I!=="")d.add(this.options.textNodeName,I);I=""}return I}function gy5(I,d,G){let Z="*."+G;for(let C in I){let W=I[C];if(Z===W||d===W)return!0}return!1}function Jy5(I,d,G=">"){let Z,C="";for(let W=d;W",G,`${d} is not closed`);if(I.substring(G+2,W).trim()===d){if(C--,C===0)return{tagContent:I.substring(Z,G),i:W}}G=W}else if(I[G+1]==="?")G=RJ(I,"?>",G+1,"StopNode is not closed.");else if(I.substr(G+1,3)==="!--")G=RJ(I,"-->",G+3,"StopNode is not closed.");else if(I.substr(G+1,2)==="![")G=RJ(I,"]]>",G,"StopNode is not closed.")-2;else{let W=FY1(I,G,">");if(W){if((W&&W.tagName)===d&&W.tagExp[W.tagExp.length-1]!=="/")C++;G=W.closeIndex}}}function gY1(I,d,G){if(d&&typeof I==="string"){let Z=I.trim();if(Z==="true")return!0;else if(Z==="false")return!1;else return wy5(I,G)}else if(JY1.isExist(I))return I;else return""}J12.exports=g12});var z12=Y((qy5)=>{function Ny5(I,d){return N12(I,d)}function N12(I,d,G){let Z,C={};for(let W=0;W0)C[d.textNodeName]=Z}else if(Z!==void 0)C[d.textNodeName]=Z;return C}function zy5(I){let d=Object.keys(I);for(let G=0;G{var{buildOptions:Uy5}=X12(),vy5=K12(),{prettify:Ey5}=z12(),My5=HY1();class Q12{constructor(I){this.externalEntities={},this.options=Uy5(I)}parse(I,d){if(typeof I==="string");else if(I.toString)I=I.toString();else throw new Error("XML data is accepted in String or Bytes[] form.");if(d){if(d===!0)d={};let C=My5.validate(I,d);if(C!==!0)throw Error(`${C.err.msg}:${C.err.line}:${C.err.col}`)}let G=new vy5(this.options);G.addExternalEntities(this.externalEntities);let Z=G.parseXml(I);if(this.options.preserveOrder||Z===void 0)return Z;else return Ey5(Z,this.options)}addEntity(I,d){if(d.indexOf("&")!==-1)throw new Error("Entity value can't have '&'");else if(I.indexOf("&")!==-1||I.indexOf(";")!==-1)throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '");else if(d==="&")throw new Error("An entity with value '&' is not permitted");else this.externalEntities[I]=d}}f12.exports=Q12});var M12=Y((SW3,E12)=>{function Sy5(I,d){let G="";if(d.format&&d.indentBy.length>0)G=` +`;return U12(I,d,"",G)}function U12(I,d,G,Z){let C="",W=!1;for(let w=0;w`,W=!1;continue}else if(A===d.commentPropName){C+=Z+``,W=!0;continue}else if(A[0]==="?"){let J=R12(B[":@"],d),K=A==="?xml"?"":Z,Q=B[A][0][d.textNodeName];Q=Q.length!==0?" "+Q:"",C+=K+`<${A}${Q}${J}?>`,W=!0;continue}let X=Z;if(X!=="")X+=d.indentBy;let _=R12(B[":@"],d),F=Z+`<${A}${_}`,g=U12(B[A],d,V,X);if(d.unpairedTags.indexOf(A)!==-1)if(d.suppressUnpairedNode)C+=F+">";else C+=F+"/>";else if((!g||g.length===0)&&d.suppressEmptyNode)C+=F+"/>";else if(g&&g.endsWith(">"))C+=F+`>${g}${Z}`;else{if(C+=F+">",g&&Z!==""&&(g.includes("/>")||g.includes("`}W=!0}return C}function Ly5(I){let d=Object.keys(I);for(let G=0;G0&&d.processEntities)for(let G=0;G{var Py5=M12(),$y5={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(I,d){return d},attributeValueProcessor:function(I,d){return d},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function LD(I){if(this.options=Object.assign({},$y5,I),this.options.ignoreAttributes||this.options.attributesGroupName)this.isAttribute=function(){return!1};else this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Oy5;if(this.processTextOrObjNode=uy5,this.options.format)this.indentate=Ty5,this.tagEndChar=`> +`,this.newLine=` +`;else this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""}LD.prototype.build=function(I){if(this.options.preserveOrder)return Py5(I,this.options);else{if(Array.isArray(I)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1)I={[this.options.arrayNodeName]:I};return this.j2x(I,0).val}};LD.prototype.j2x=function(I,d){let G="",Z="";for(let C in I)if(typeof I[C]==="undefined");else if(I[C]===null)if(C[0]==="?")Z+=this.indentate(d)+"<"+C+"?"+this.tagEndChar;else Z+=this.indentate(d)+"<"+C+"/"+this.tagEndChar;else if(I[C]instanceof Date)Z+=this.buildTextValNode(I[C],C,"",d);else if(typeof I[C]!=="object"){let W=this.isAttribute(C);if(W)G+=this.buildAttrPairStr(W,""+I[C]);else if(C===this.options.textNodeName){let w=this.options.tagValueProcessor(C,""+I[C]);Z+=this.replaceEntitiesValue(w)}else Z+=this.buildTextValNode(I[C],C,"",d)}else if(Array.isArray(I[C])){let W=I[C].length,w="";for(let B=0;B"+I+C;else if(this.options.commentPropName!==!1&&d===this.options.commentPropName&&W.length===0)return this.indentate(Z)+``+this.newLine;else return this.indentate(Z)+"<"+d+G+W+this.tagEndChar+I+this.indentate(Z)+C}};LD.prototype.closeTag=function(I){let d="";if(this.options.unpairedTags.indexOf(I)!==-1){if(!this.options.suppressUnpairedNode)d="/"}else if(this.options.suppressEmptyNode)d="/";else d=`>`+this.newLine;else if(this.options.commentPropName!==!1&&d===this.options.commentPropName)return this.indentate(Z)+``+this.newLine;else if(d[0]==="?")return this.indentate(Z)+"<"+d+G+"?"+this.tagEndChar;else{let C=this.options.tagValueProcessor(d,I);if(C=this.replaceEntitiesValue(C),C==="")return this.indentate(Z)+"<"+d+G+this.closeTag(d)+this.tagEndChar;else return this.indentate(Z)+"<"+d+G+">"+C+"0&&this.options.processEntities)for(let d=0;d{var my5=HY1(),ly5=q12(),by5=L12();y12.exports={XMLParser:ly5,XMLValidator:my5,XMLBuilder:by5}});var jV=Y((O12)=>{Object.defineProperty(O12,"__esModule",{value:!0});O12.de_GetSessionTokenCommand=O12.de_GetFederationTokenCommand=O12.de_GetCallerIdentityCommand=O12.de_GetAccessKeyInfoCommand=O12.de_DecodeAuthorizationMessageCommand=O12.de_AssumeRoleWithWebIdentityCommand=O12.de_AssumeRoleWithSAMLCommand=O12.de_AssumeRoleCommand=O12.se_GetSessionTokenCommand=O12.se_GetFederationTokenCommand=O12.se_GetCallerIdentityCommand=O12.se_GetAccessKeyInfoCommand=O12.se_DecodeAuthorizationMessageCommand=O12.se_AssumeRoleWithWebIdentityCommand=O12.se_AssumeRoleWithSAMLCommand=O12.se_AssumeRoleCommand=void 0;var hy5=t8(),s2=h2(),jy5=P12(),yD=SD(),ky5=Pn(),xy5=async(I,d)=>{let G=uD,Z;return Z=OD({...FP5(I,d),Action:"AssumeRole",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_AssumeRoleCommand=xy5;var cy5=async(I,d)=>{let G=uD,Z;return Z=OD({...gP5(I,d),Action:"AssumeRoleWithSAML",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_AssumeRoleWithSAMLCommand=cy5;var py5=async(I,d)=>{let G=uD,Z;return Z=OD({...JP5(I,d),Action:"AssumeRoleWithWebIdentity",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_AssumeRoleWithWebIdentityCommand=py5;var iy5=async(I,d)=>{let G=uD,Z;return Z=OD({...KP5(I,d),Action:"DecodeAuthorizationMessage",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_DecodeAuthorizationMessageCommand=iy5;var ny5=async(I,d)=>{let G=uD,Z;return Z=OD({...NP5(I,d),Action:"GetAccessKeyInfo",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_GetAccessKeyInfoCommand=ny5;var ry5=async(I,d)=>{let G=uD,Z;return Z=OD({...zP5(I,d),Action:"GetCallerIdentity",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_GetCallerIdentityCommand=ry5;var ay5=async(I,d)=>{let G=uD,Z;return Z=OD({...QP5(I,d),Action:"GetFederationToken",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_GetFederationTokenCommand=ay5;var sy5=async(I,d)=>{let G=uD,Z;return Z=OD({...fP5(I,d),Action:"GetSessionToken",Version:"2011-06-15"}),$D(d,G,"/",void 0,Z)};O12.se_GetSessionTokenCommand=sy5;var oy5=async(I,d)=>{if(I.statusCode>=300)return ey5(I,d);let G=await hV(I.body,d),Z={};return Z=MP5(G.AssumeRoleResult,d),{$metadata:m7(I),...Z}};O12.de_AssumeRoleCommand=oy5;var ey5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await KY1(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await un(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await Tn(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await KP(G,d);default:let C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})}},ty5=async(I,d)=>{if(I.statusCode>=300)return IP5(I,d);let G=await hV(I.body,d),Z={};return Z=SP5(G.AssumeRoleWithSAMLResult,d),{$metadata:m7(I),...Z}};O12.de_AssumeRoleWithSAMLCommand=ty5;var IP5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await KY1(G,d);case"IDPRejectedClaim":case"com.amazonaws.sts#IDPRejectedClaimException":throw await $12(G,d);case"InvalidIdentityToken":case"com.amazonaws.sts#InvalidIdentityTokenException":throw await u12(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await un(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await Tn(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await KP(G,d);default:let C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})}},dP5=async(I,d)=>{if(I.statusCode>=300)return GP5(I,d);let G=await hV(I.body,d),Z={};return Z=LP5(G.AssumeRoleWithWebIdentityResult,d),{$metadata:m7(I),...Z}};O12.de_AssumeRoleWithWebIdentityCommand=dP5;var GP5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body);switch(Z){case"ExpiredTokenException":case"com.amazonaws.sts#ExpiredTokenException":throw await KY1(G,d);case"IDPCommunicationError":case"com.amazonaws.sts#IDPCommunicationErrorException":throw await DP5(G,d);case"IDPRejectedClaim":case"com.amazonaws.sts#IDPRejectedClaimException":throw await $12(G,d);case"InvalidIdentityToken":case"com.amazonaws.sts#InvalidIdentityTokenException":throw await u12(G,d);case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await un(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await Tn(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await KP(G,d);default:let C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})}},ZP5=async(I,d)=>{if(I.statusCode>=300)return CP5(I,d);let G=await hV(I.body,d),Z={};return Z=yP5(G.DecodeAuthorizationMessageResult,d),{$metadata:m7(I),...Z}};O12.de_DecodeAuthorizationMessageCommand=ZP5;var CP5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body);switch(Z){case"InvalidAuthorizationMessageException":case"com.amazonaws.sts#InvalidAuthorizationMessageException":throw await HP5(G,d);default:let C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})}},WP5=async(I,d)=>{if(I.statusCode>=300)return wP5(I,d);let G=await hV(I.body,d),Z={};return Z=uP5(G.GetAccessKeyInfoResult,d),{$metadata:m7(I),...Z}};O12.de_GetAccessKeyInfoCommand=WP5;var wP5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body),C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})},BP5=async(I,d)=>{if(I.statusCode>=300)return AP5(I,d);let G=await hV(I.body,d),Z={};return Z=TP5(G.GetCallerIdentityResult,d),{$metadata:m7(I),...Z}};O12.de_GetCallerIdentityCommand=BP5;var AP5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body),C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})},VP5=async(I,d)=>{if(I.statusCode>=300)return XP5(I,d);let G=await hV(I.body,d),Z={};return Z=OP5(G.GetFederationTokenResult,d),{$metadata:m7(I),...Z}};O12.de_GetFederationTokenCommand=VP5;var XP5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body);switch(Z){case"MalformedPolicyDocument":case"com.amazonaws.sts#MalformedPolicyDocumentException":throw await un(G,d);case"PackedPolicyTooLarge":case"com.amazonaws.sts#PackedPolicyTooLargeException":throw await Tn(G,d);case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await KP(G,d);default:let C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})}},YP5=async(I,d)=>{if(I.statusCode>=300)return _P5(I,d);let G=await hV(I.body,d),Z={};return Z=mP5(G.GetSessionTokenResult,d),{$metadata:m7(I),...Z}};O12.de_GetSessionTokenCommand=YP5;var _P5=async(I,d)=>{let G={...I,body:await TD(I.body,d)},Z=mD(I,G.body);switch(Z){case"RegionDisabledException":case"com.amazonaws.sts#RegionDisabledException":throw await KP(G,d);default:let C=G.body;return PD({output:I,parsedBody:C.Error,errorCode:Z})}},KY1=async(I,d)=>{let G=I.body,Z=PP5(G.Error,d),C=new yD.ExpiredTokenException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},DP5=async(I,d)=>{let G=I.body,Z=lP5(G.Error,d),C=new yD.IDPCommunicationErrorException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},$12=async(I,d)=>{let G=I.body,Z=bP5(G.Error,d),C=new yD.IDPRejectedClaimException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},HP5=async(I,d)=>{let G=I.body,Z=hP5(G.Error,d),C=new yD.InvalidAuthorizationMessageException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},u12=async(I,d)=>{let G=I.body,Z=jP5(G.Error,d),C=new yD.InvalidIdentityTokenException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},un=async(I,d)=>{let G=I.body,Z=kP5(G.Error,d),C=new yD.MalformedPolicyDocumentException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},Tn=async(I,d)=>{let G=I.body,Z=xP5(G.Error,d),C=new yD.PackedPolicyTooLargeException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},KP=async(I,d)=>{let G=I.body,Z=cP5(G.Error,d),C=new yD.RegionDisabledException({$metadata:m7(I),...Z});return s2.decorateServiceException(C,G)},FP5=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.RoleSessionName!=null)G.RoleSessionName=I.RoleSessionName;if(I.PolicyArns!=null){let Z=On(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.Tags!=null){let Z=T12(I.Tags,d);if(I.Tags?.length===0)G.Tags=[];Object.entries(Z).forEach(([C,W])=>{let w=`Tags.${C}`;G[w]=W})}if(I.TransitiveTagKeys!=null){let Z=EP5(I.TransitiveTagKeys,d);if(I.TransitiveTagKeys?.length===0)G.TransitiveTagKeys=[];Object.entries(Z).forEach(([C,W])=>{let w=`TransitiveTagKeys.${C}`;G[w]=W})}if(I.ExternalId!=null)G.ExternalId=I.ExternalId;if(I.SerialNumber!=null)G.SerialNumber=I.SerialNumber;if(I.TokenCode!=null)G.TokenCode=I.TokenCode;if(I.SourceIdentity!=null)G.SourceIdentity=I.SourceIdentity;if(I.ProvidedContexts!=null){let Z=UP5(I.ProvidedContexts,d);if(I.ProvidedContexts?.length===0)G.ProvidedContexts=[];Object.entries(Z).forEach(([C,W])=>{let w=`ProvidedContexts.${C}`;G[w]=W})}return G},gP5=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.PrincipalArn!=null)G.PrincipalArn=I.PrincipalArn;if(I.SAMLAssertion!=null)G.SAMLAssertion=I.SAMLAssertion;if(I.PolicyArns!=null){let Z=On(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;return G},JP5=(I,d)=>{let G={};if(I.RoleArn!=null)G.RoleArn=I.RoleArn;if(I.RoleSessionName!=null)G.RoleSessionName=I.RoleSessionName;if(I.WebIdentityToken!=null)G.WebIdentityToken=I.WebIdentityToken;if(I.ProviderId!=null)G.ProviderId=I.ProviderId;if(I.PolicyArns!=null){let Z=On(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.Policy!=null)G.Policy=I.Policy;if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;return G},KP5=(I,d)=>{let G={};if(I.EncodedMessage!=null)G.EncodedMessage=I.EncodedMessage;return G},NP5=(I,d)=>{let G={};if(I.AccessKeyId!=null)G.AccessKeyId=I.AccessKeyId;return G},zP5=(I,d)=>{return{}},QP5=(I,d)=>{let G={};if(I.Name!=null)G.Name=I.Name;if(I.Policy!=null)G.Policy=I.Policy;if(I.PolicyArns!=null){let Z=On(I.PolicyArns,d);if(I.PolicyArns?.length===0)G.PolicyArns=[];Object.entries(Z).forEach(([C,W])=>{let w=`PolicyArns.${C}`;G[w]=W})}if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.Tags!=null){let Z=T12(I.Tags,d);if(I.Tags?.length===0)G.Tags=[];Object.entries(Z).forEach(([C,W])=>{let w=`Tags.${C}`;G[w]=W})}return G},fP5=(I,d)=>{let G={};if(I.DurationSeconds!=null)G.DurationSeconds=I.DurationSeconds;if(I.SerialNumber!=null)G.SerialNumber=I.SerialNumber;if(I.TokenCode!=null)G.TokenCode=I.TokenCode;return G},On=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=qP5(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},qP5=(I,d)=>{let G={};if(I.arn!=null)G.arn=I.arn;return G},RP5=(I,d)=>{let G={};if(I.ProviderArn!=null)G.ProviderArn=I.ProviderArn;if(I.ContextAssertion!=null)G.ContextAssertion=I.ContextAssertion;return G},UP5=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=RP5(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},vP5=(I,d)=>{let G={};if(I.Key!=null)G.Key=I.Key;if(I.Value!=null)G.Value=I.Value;return G},EP5=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;G[`member.${Z}`]=C,Z++}return G},T12=(I,d)=>{let G={},Z=1;for(let C of I){if(C===null)continue;let W=vP5(C,d);Object.entries(W).forEach(([w,B])=>{G[`member.${Z}.${w}`]=B}),Z++}return G},NY1=(I,d)=>{let G={};if(I.AssumedRoleId!==void 0)G.AssumedRoleId=s2.expectString(I.AssumedRoleId);if(I.Arn!==void 0)G.Arn=s2.expectString(I.Arn);return G},MP5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=NP(I.Credentials,d);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=NY1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=s2.strictParseInt32(I.PackedPolicySize);if(I.SourceIdentity!==void 0)G.SourceIdentity=s2.expectString(I.SourceIdentity);return G},SP5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=NP(I.Credentials,d);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=NY1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=s2.strictParseInt32(I.PackedPolicySize);if(I.Subject!==void 0)G.Subject=s2.expectString(I.Subject);if(I.SubjectType!==void 0)G.SubjectType=s2.expectString(I.SubjectType);if(I.Issuer!==void 0)G.Issuer=s2.expectString(I.Issuer);if(I.Audience!==void 0)G.Audience=s2.expectString(I.Audience);if(I.NameQualifier!==void 0)G.NameQualifier=s2.expectString(I.NameQualifier);if(I.SourceIdentity!==void 0)G.SourceIdentity=s2.expectString(I.SourceIdentity);return G},LP5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=NP(I.Credentials,d);if(I.SubjectFromWebIdentityToken!==void 0)G.SubjectFromWebIdentityToken=s2.expectString(I.SubjectFromWebIdentityToken);if(I.AssumedRoleUser!==void 0)G.AssumedRoleUser=NY1(I.AssumedRoleUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=s2.strictParseInt32(I.PackedPolicySize);if(I.Provider!==void 0)G.Provider=s2.expectString(I.Provider);if(I.Audience!==void 0)G.Audience=s2.expectString(I.Audience);if(I.SourceIdentity!==void 0)G.SourceIdentity=s2.expectString(I.SourceIdentity);return G},NP=(I,d)=>{let G={};if(I.AccessKeyId!==void 0)G.AccessKeyId=s2.expectString(I.AccessKeyId);if(I.SecretAccessKey!==void 0)G.SecretAccessKey=s2.expectString(I.SecretAccessKey);if(I.SessionToken!==void 0)G.SessionToken=s2.expectString(I.SessionToken);if(I.Expiration!==void 0)G.Expiration=s2.expectNonNull(s2.parseRfc3339DateTimeWithOffset(I.Expiration));return G},yP5=(I,d)=>{let G={};if(I.DecodedMessage!==void 0)G.DecodedMessage=s2.expectString(I.DecodedMessage);return G},PP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},$P5=(I,d)=>{let G={};if(I.FederatedUserId!==void 0)G.FederatedUserId=s2.expectString(I.FederatedUserId);if(I.Arn!==void 0)G.Arn=s2.expectString(I.Arn);return G},uP5=(I,d)=>{let G={};if(I.Account!==void 0)G.Account=s2.expectString(I.Account);return G},TP5=(I,d)=>{let G={};if(I.UserId!==void 0)G.UserId=s2.expectString(I.UserId);if(I.Account!==void 0)G.Account=s2.expectString(I.Account);if(I.Arn!==void 0)G.Arn=s2.expectString(I.Arn);return G},OP5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=NP(I.Credentials,d);if(I.FederatedUser!==void 0)G.FederatedUser=$P5(I.FederatedUser,d);if(I.PackedPolicySize!==void 0)G.PackedPolicySize=s2.strictParseInt32(I.PackedPolicySize);return G},mP5=(I,d)=>{let G={};if(I.Credentials!==void 0)G.Credentials=NP(I.Credentials,d);return G},lP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},bP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},hP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},jP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},kP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},xP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},cP5=(I,d)=>{let G={};if(I.message!==void 0)G.message=s2.expectString(I.message);return G},m7=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),pP5=(I,d)=>s2.collectBody(I,d).then((G)=>d.utf8Encoder(G)),PD=s2.withBaseException(ky5.STSServiceException),$D=async(I,d,G,Z,C)=>{let{hostname:W,protocol:w="https",port:B,path:A}=await I.endpoint(),V={protocol:w,hostname:W,port:B,method:"POST",path:A.endsWith("/")?A.slice(0,-1)+G:A+G,headers:d};if(Z!==void 0)V.hostname=Z;if(C!==void 0)V.body=C;return new hy5.HttpRequest(V)},uD={"content-type":"application/x-www-form-urlencoded"},hV=(I,d)=>pP5(I,d).then((G)=>{if(G.length){let Z=new jy5.XMLParser({attributeNamePrefix:"",htmlEntities:!0,ignoreAttributes:!1,ignoreDeclaration:!0,parseTagValue:!1,trimValues:!1,tagValueProcessor:(A,V)=>V.trim()===""&&V.includes(` +`)?"":void 0});Z.addEntity("#xD","\r"),Z.addEntity("#10",` +`);let C=Z.parse(G),W="#text",w=Object.keys(C)[0],B=C[w];if(B[W])B[w]=B[W],delete B[W];return s2.getValueFromTextNode(B)}return{}}),TD=async(I,d)=>{let G=await hV(I,d);if(G.Error)G.Error.message=G.Error.message??G.Error.Message;return G},OD=(I)=>Object.entries(I).map(([d,G])=>s2.extendedEncodeURIComponent(d)+"="+s2.extendedEncodeURIComponent(G)).join("&"),mD=(I,d)=>{if(d.Error?.Code!==void 0)return d.Error.Code;if(I.statusCode==404)return"NotFound"}});var mn=Y((QY1)=>{Object.defineProperty(QY1,"__esModule",{value:!0});QY1.AssumeRoleCommand=QY1.$Command=void 0;var B$5=OV(),A$5=c3(),V$5=n6(),b12=h2();Object.defineProperty(QY1,"$Command",{enumerable:!0,get:function(){return b12.Command}});var X$5=k3(),Y$5=SD(),l12=jV();class zY1 extends b12.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(V$5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(A$5.getEndpointPlugin(d,zY1.getEndpointParameterInstructions())),this.middlewareStack.use(B$5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:Y$5.AssumeRoleResponseFilterSensitiveLog,[X$5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"AssumeRole"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return l12.se_AssumeRoleCommand(I,d)}deserialize(I,d){return l12.de_AssumeRoleCommand(I,d)}}QY1.AssumeRoleCommand=zY1});var ln=Y((qY1)=>{Object.defineProperty(qY1,"__esModule",{value:!0});qY1.AssumeRoleWithWebIdentityCommand=qY1.$Command=void 0;var _$5=c3(),D$5=n6(),x12=h2();Object.defineProperty(qY1,"$Command",{enumerable:!0,get:function(){return x12.Command}});var H$5=k3(),j12=SD(),k12=jV();class fY1 extends x12.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(D$5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(_$5.getEndpointPlugin(d,fY1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleWithWebIdentityCommand",inputFilterSensitiveLog:j12.AssumeRoleWithWebIdentityRequestFilterSensitiveLog,outputFilterSensitiveLog:j12.AssumeRoleWithWebIdentityResponseFilterSensitiveLog,[H$5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"AssumeRoleWithWebIdentity"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return k12.se_AssumeRoleWithWebIdentityCommand(I,d)}deserialize(I,d){return k12.de_AssumeRoleWithWebIdentityCommand(I,d)}}qY1.AssumeRoleWithWebIdentityCommand=fY1});var RY1=Y((n12)=>{Object.defineProperty(n12,"__esModule",{value:!0});n12.decorateDefaultCredentialProvider=n12.getDefaultRoleAssumerWithWebIdentity=n12.getDefaultRoleAssumer=void 0;var F$5=mn(),g$5=ln(),p12="us-east-1",i12=(I)=>{if(typeof I!=="function")return I===void 0?p12:I;return async()=>{try{return await I()}catch(d){return p12}}},J$5=(I,d)=>{let G,Z;return async(C,W)=>{if(Z=C,!G){let{logger:B,region:A,requestHandler:V}=I;G=new d({logger:B,credentialDefaultProvider:()=>async()=>Z,region:i12(A||I.region),...V?{requestHandler:V}:{}})}let{Credentials:w}=await G.send(new F$5.AssumeRoleCommand(W));if(!w||!w.AccessKeyId||!w.SecretAccessKey)throw new Error(`Invalid response from STS.assumeRole call with role ${W.RoleArn}`);return{accessKeyId:w.AccessKeyId,secretAccessKey:w.SecretAccessKey,sessionToken:w.SessionToken,expiration:w.Expiration}}};n12.getDefaultRoleAssumer=J$5;var K$5=(I,d)=>{let G;return async(Z)=>{if(!G){let{logger:W,region:w,requestHandler:B}=I;G=new d({logger:W,region:i12(w||I.region),...B?{requestHandler:B}:{}})}let{Credentials:C}=await G.send(new g$5.AssumeRoleWithWebIdentityCommand(Z));if(!C||!C.AccessKeyId||!C.SecretAccessKey)throw new Error(`Invalid response from STS.assumeRoleWithWebIdentity call with role ${Z.RoleArn}`);return{accessKeyId:C.AccessKeyId,secretAccessKey:C.SecretAccessKey,sessionToken:C.SessionToken,expiration:C.Expiration}}};n12.getDefaultRoleAssumerWithWebIdentity=K$5;var N$5=(I)=>(d)=>I({roleAssumer:n12.getDefaultRoleAssumer(d,d.stsClientCtor),roleAssumerWithWebIdentity:n12.getDefaultRoleAssumerWithWebIdentity(d,d.stsClientCtor),...d});n12.decorateDefaultCredentialProvider=N$5});var Z02=Y((o12)=>{Object.defineProperty(o12,"__esModule",{value:!0});o12.fromEnv=o12.ENV_EXPIRATION=o12.ENV_SESSION=o12.ENV_SECRET=o12.ENV_KEY=void 0;var z$5=x3();o12.ENV_KEY="AWS_ACCESS_KEY_ID";o12.ENV_SECRET="AWS_SECRET_ACCESS_KEY";o12.ENV_SESSION="AWS_SESSION_TOKEN";o12.ENV_EXPIRATION="AWS_CREDENTIAL_EXPIRATION";var Q$5=()=>async()=>{let I=process.env[o12.ENV_KEY],d=process.env[o12.ENV_SECRET],G=process.env[o12.ENV_SESSION],Z=process.env[o12.ENV_EXPIRATION];if(I&&d)return{accessKeyId:I,secretAccessKey:d,...G&&{sessionToken:G},...Z&&{expiration:new Date(Z)}};throw new z$5.CredentialsProviderError("Unable to find environment variable credentials.")};o12.fromEnv=Q$5});var vY1=Y((UY1)=>{Object.defineProperty(UY1,"__esModule",{value:!0});var f$5=x1();f$5.__exportStar(Z02(),UY1)});var kn=Y((hW3,J02)=>{var{defineProperty:jn,getOwnPropertyDescriptor:q$5,getOwnPropertyNames:R$5}=Object,U$5=Object.prototype.hasOwnProperty,L6=(I,d)=>jn(I,"name",{value:d,configurable:!0}),v$5=(I,d)=>{for(var G in d)jn(I,G,{get:d[G],enumerable:!0})},E$5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of R$5(d))if(!U$5.call(I,C)&&C!==G)jn(I,C,{get:()=>d[C],enumerable:!(Z=q$5(d,C))||Z.enumerable})}return I},M$5=(I)=>E$5(jn({},"__esModule",{value:!0}),I),B02={};v$5(B02,{DEFAULT_MAX_RETRIES:()=>Y02,DEFAULT_TIMEOUT:()=>X02,ENV_CMDS_AUTH_TOKEN:()=>SY1,ENV_CMDS_FULL_URI:()=>bn,ENV_CMDS_RELATIVE_URI:()=>hn,Endpoint:()=>D02,fromContainerMetadata:()=>P$5,fromInstanceMetadata:()=>t$5,getInstanceMetadataEndpoint:()=>F02,httpRequest:()=>Uq,providerConfigFromInit:()=>LY1});J02.exports=M$5(B02);var S$5=B1("url"),DB=x3(),L$5=B1("buffer"),y$5=B1("http");function Uq(I){return new Promise((d,G)=>{var Z;let C=y$5.request({method:"GET",...I,hostname:(Z=I.hostname)==null?void 0:Z.replace(/^\[(.+)\]$/,"$1")});C.on("error",(W)=>{G(Object.assign(new DB.ProviderError("Unable to connect to instance metadata service"),W)),C.destroy()}),C.on("timeout",()=>{G(new DB.ProviderError("TimeoutError from instance metadata service")),C.destroy()}),C.on("response",(W)=>{let{statusCode:w=400}=W;if(w<200||300<=w)G(Object.assign(new DB.ProviderError("Error response received from instance metadata service"),{statusCode:w})),C.destroy();let B=[];W.on("data",(A)=>{B.push(A)}),W.on("end",()=>{d(L$5.Buffer.concat(B)),C.destroy()})}),C.end()})}L6(Uq,"httpRequest");var A02=L6((I)=>Boolean(I)&&typeof I==="object"&&typeof I.AccessKeyId==="string"&&typeof I.SecretAccessKey==="string"&&typeof I.Token==="string"&&typeof I.Expiration==="string","isImdsCredentials"),V02=L6((I)=>({accessKeyId:I.AccessKeyId,secretAccessKey:I.SecretAccessKey,sessionToken:I.Token,expiration:new Date(I.Expiration)}),"fromImdsCredentials"),X02=1000,Y02=0,LY1=L6(({maxRetries:I=Y02,timeout:d=X02})=>({maxRetries:I,timeout:d}),"providerConfigFromInit"),MY1=L6((I,d)=>{let G=I();for(let Z=0;Z{let{timeout:d,maxRetries:G}=LY1(I);return()=>MY1(async()=>{let Z=await m$5(),C=JSON.parse(await $$5(d,Z));if(!A02(C))throw new DB.CredentialsProviderError("Invalid response received from instance metadata service.");return V02(C)},G)},"fromContainerMetadata"),$$5=L6(async(I,d)=>{if(process.env[SY1])d.headers={...d.headers,Authorization:process.env[SY1]};return(await Uq({...d,timeout:I})).toString()},"requestFromEcsImds"),u$5="169.254.170.2",T$5={localhost:!0,"127.0.0.1":!0},O$5={"http:":!0,"https:":!0},m$5=L6(async()=>{if(process.env[hn])return{hostname:u$5,path:process.env[hn]};if(process.env[bn]){let I=S$5.parse(process.env[bn]);if(!I.hostname||!(I.hostname in T$5))throw new DB.CredentialsProviderError(`${I.hostname} is not a valid container metadata service hostname`,!1);if(!I.protocol||!(I.protocol in O$5))throw new DB.CredentialsProviderError(`${I.protocol} is not a valid container metadata service protocol`,!1);return{...I,port:I.port?parseInt(I.port,10):void 0}}throw new DB.CredentialsProviderError(`The container metadata credential provider cannot be used unless the ${hn} or ${bn} environment variable is set`,!1)},"getCmdsUri"),_02=class I extends DB.CredentialsProviderError{constructor(d,G=!0){super(d,G);this.tryNextLink=G,this.name="InstanceMetadataV1FallbackError",Object.setPrototypeOf(this,I.prototype)}};L6(_02,"InstanceMetadataV1FallbackError");var l$5=_02,yY1=mV(),b$5=qJ(),D02=((I)=>{return I.IPv4="http://169.254.169.254",I.IPv6="http://[fd00:ec2::254]",I})(D02||{}),h$5="AWS_EC2_METADATA_SERVICE_ENDPOINT",j$5="ec2_metadata_service_endpoint",k$5={environmentVariableSelector:(I)=>I[h$5],configFileSelector:(I)=>I[j$5],default:void 0},H02=((I)=>{return I.IPv4="IPv4",I.IPv6="IPv6",I})(H02||{}),x$5="AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE",c$5="ec2_metadata_service_endpoint_mode",p$5={environmentVariableSelector:(I)=>I[x$5],configFileSelector:(I)=>I[c$5],default:"IPv4"},F02=L6(async()=>b$5.parseUrl(await i$5()||await n$5()),"getInstanceMetadataEndpoint"),i$5=L6(async()=>yY1.loadConfig(k$5)(),"getFromEndpointConfig"),n$5=L6(async()=>{let I=await yY1.loadConfig(p$5)();switch(I){case"IPv4":return"http://169.254.169.254";case"IPv6":return"http://[fd00:ec2::254]";default:throw new Error(`Unsupported endpoint mode: ${I}. Select from ${Object.values(H02)}`)}},"getFromEndpointModeConfig"),r$5=300,a$5=300,s$5="https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html",C02=L6((I,d)=>{let G=r$5+Math.floor(Math.random()*a$5),Z=new Date(Date.now()+G*1000);d.warn(`Attempting credential expiration extension due to a credential service availability issue. A refresh of these credentials will be attempted after ${new Date(Z)}. +For more information, please visit: `+s$5);let C=I.originalExpiration??I.expiration;return{...I,...C?{originalExpiration:C}:{},expiration:Z}},"getExtendedInstanceMetadataCredentials"),o$5=L6((I,d={})=>{let G=(d==null?void 0:d.logger)||console,Z;return async()=>{let C;try{if(C=await I(),C.expiration&&C.expiration.getTime()o$5(Iu5(I),{logger:I.logger}),"fromInstanceMetadata"),Iu5=L6((I)=>{let d=!1,{logger:G,profile:Z}=I,{timeout:C,maxRetries:W}=LY1(I),w=L6(async(B,A)=>{var V;if(d||((V=A.headers)==null?void 0:V[w02])==null){let F=!1,g=!1,J=await yY1.loadConfig({environmentVariableSelector:(K)=>{let Q=K[EY1];if(g=!!Q&&Q!=="false",Q===void 0)throw new DB.CredentialsProviderError(`${EY1} not set in env, checking config file next.`);return g},configFileSelector:(K)=>{let Q=K[W02];return F=!!Q&&Q!=="false",F},default:!1},{profile:Z})();if(I.ec2MetadataV1Disabled||J){let K=[];if(I.ec2MetadataV1Disabled)K.push("credential provider initialization (runtime option ec2MetadataV1Disabled)");if(F)K.push(`config file profile (${W02})`);if(g)K.push(`process environment variable (${EY1})`);throw new l$5(`AWS EC2 Metadata v1 fallback has been blocked by AWS SDK configuration in the following: [${K.join(", ")}].`)}}let _=(await MY1(async()=>{let F;try{F=await Gu5(A)}catch(g){if(g.statusCode===401)d=!1;throw g}return F},B)).trim();return MY1(async()=>{let F;try{F=await Zu5(_,A)}catch(g){if(g.statusCode===401)d=!1;throw g}return F},B)},"getCredentials");return async()=>{let B=await F02();if(d)return G==null||G.debug("AWS SDK Instance Metadata","using v1 fallback (no token fetch)"),w(W,{...B,timeout:C});else{let A;try{A=(await du5({...B,timeout:C})).toString()}catch(V){if((V==null?void 0:V.statusCode)===400)throw Object.assign(V,{message:"EC2 Metadata token request returned error"});else if(V.message==="TimeoutError"||[403,404,405].includes(V.statusCode))d=!0;return G==null||G.debug("AWS SDK Instance Metadata","using v1 fallback (initial)"),w(W,{...B,timeout:C})}return w(W,{...B,headers:{[w02]:A},timeout:C})}}},"getInstanceImdsProvider"),du5=L6(async(I)=>Uq({...I,path:e$5,method:"PUT",headers:{"x-aws-ec2-metadata-token-ttl-seconds":"21600"}}),"getMetadataToken"),Gu5=L6(async(I)=>(await Uq({...I,path:g02})).toString(),"getProfile"),Zu5=L6(async(I,d)=>{let G=JSON.parse((await Uq({...d,path:g02+I})).toString());if(!A02(G))throw new DB.CredentialsProviderError("Invalid response received from instance metadata service.");return V02(G)},"getCredentialsFromProfile")});var Q02=Y((N02)=>{Object.defineProperty(N02,"__esModule",{value:!0});N02.resolveCredentialSource=void 0;var Cu5=vY1(),K02=kn(),Wu5=x3(),wu5=(I,d)=>{let G={EcsContainer:K02.fromContainerMetadata,Ec2InstanceMetadata:K02.fromInstanceMetadata,Environment:Cu5.fromEnv};if(I in G)return G[I]();else throw new Wu5.CredentialsProviderError(`Unsupported credential source in profile ${d}. Got ${I}, expected EcsContainer or Ec2InstanceMetadata or Environment.`)};N02.resolveCredentialSource=wu5});var R02=Y((f02)=>{Object.defineProperty(f02,"__esModule",{value:!0});f02.resolveAssumeRoleCredentials=f02.isAssumeRoleProfile=void 0;var PY1=x3(),Bu5=rC(),Au5=Q02(),Vu5=$Y1(),Xu5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.role_arn==="string"&&["undefined","string"].indexOf(typeof I.role_session_name)>-1&&["undefined","string"].indexOf(typeof I.external_id)>-1&&["undefined","string"].indexOf(typeof I.mfa_serial)>-1&&(Yu5(I)||_u5(I));f02.isAssumeRoleProfile=Xu5;var Yu5=(I)=>typeof I.source_profile==="string"&&typeof I.credential_source==="undefined",_u5=(I)=>typeof I.credential_source==="string"&&typeof I.source_profile==="undefined",Du5=async(I,d,G,Z={})=>{let C=d[I];if(!G.roleAssumer)throw new PY1.CredentialsProviderError(`Profile ${I} requires a role to be assumed, but no role assumption callback was provided.`,!1);let{source_profile:W}=C;if(W&&W in Z)throw new PY1.CredentialsProviderError(`Detected a cycle attempting to resolve credentials for profile ${Bu5.getProfileName(G)}. Profiles visited: `+Object.keys(Z).join(", "),!1);let w=W?Vu5.resolveProfileData(W,d,G,{...Z,[W]:!0}):Au5.resolveCredentialSource(C.credential_source,I)(),B={RoleArn:C.role_arn,RoleSessionName:C.role_session_name||`aws-sdk-js-${Date.now()}`,ExternalId:C.external_id,DurationSeconds:parseInt(C.duration_seconds||"3600",10)},{mfa_serial:A}=C;if(A){if(!G.mfaCodeProvider)throw new PY1.CredentialsProviderError(`Profile ${I} requires multi-factor authentication, but no MFA code callback was provided.`,!1);B.SerialNumber=A,B.TokenCode=await G.mfaCodeProvider(A)}let V=await w;return G.roleAssumer(V,B)};f02.resolveAssumeRoleCredentials=Du5});var E02=Y((U02)=>{Object.defineProperty(U02,"__esModule",{value:!0});U02.getValidatedProcessCredentials=void 0;var Fu5=(I,d)=>{if(d.Version!==1)throw Error(`Profile ${I} credential_process did not return Version 1.`);if(d.AccessKeyId===void 0||d.SecretAccessKey===void 0)throw Error(`Profile ${I} credential_process returned invalid credentials.`);if(d.Expiration){let G=new Date;if(new Date(d.Expiration){Object.defineProperty(M02,"__esModule",{value:!0});M02.resolveProcessCredentials=void 0;var uY1=x3(),gu5=B1("child_process"),Ju5=B1("util"),Ku5=E02(),Nu5=async(I,d)=>{let G=d[I];if(d[I]){let Z=G.credential_process;if(Z!==void 0){let C=Ju5.promisify(gu5.exec);try{let{stdout:W}=await C(Z),w;try{w=JSON.parse(W.trim())}catch(B){throw Error(`Profile ${I} credential_process returned invalid JSON.`)}return Ku5.getValidatedProcessCredentials(I,w)}catch(W){throw new uY1.CredentialsProviderError(W.message)}}else throw new uY1.CredentialsProviderError(`Profile ${I} did not contain credential_process.`)}else throw new uY1.CredentialsProviderError(`Profile ${I} could not be found in shared credentials file.`)};M02.resolveProcessCredentials=Nu5});var u02=Y((P02)=>{Object.defineProperty(P02,"__esModule",{value:!0});P02.fromProcess=void 0;var y02=rC(),zu5=L02(),Qu5=(I={})=>async()=>{let d=await y02.parseKnownFiles(I);return zu5.resolveProcessCredentials(y02.getProfileName(I),d)};P02.fromProcess=Qu5});var OY1=Y((TY1)=>{Object.defineProperty(TY1,"__esModule",{value:!0});var fu5=x1();fu5.__exportStar(u02(),TY1)});var m02=Y((T02)=>{Object.defineProperty(T02,"__esModule",{value:!0});T02.resolveProcessCredentials=T02.isProcessProfile=void 0;var qu5=OY1(),Ru5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.credential_process==="string";T02.isProcessProfile=Ru5;var Uu5=async(I,d)=>qu5.fromProcess({...I,profile:d})();T02.resolveProcessCredentials=Uu5});var mY1=Y((l02)=>{Object.defineProperty(l02,"__esModule",{value:!0});l02.isSsoProfile=void 0;var Eu5=(I)=>I&&(typeof I.sso_start_url==="string"||typeof I.sso_account_id==="string"||typeof I.sso_session==="string"||typeof I.sso_region==="string"||typeof I.sso_role_name==="string");l02.isSsoProfile=Eu5});var k02=Y((h02)=>{Object.defineProperty(h02,"__esModule",{value:!0});h02.resolveClientEndpointParameters=void 0;var Mu5=(I)=>{return{...I,useDualstackEndpoint:I.useDualstackEndpoint??!1,useFipsEndpoint:I.useFipsEndpoint??!1,defaultSigningName:"awsssoportal"}};h02.resolveClientEndpointParameters=Mu5});var x02=Y((sW3,Su5)=>{Su5.exports={name:"@aws-sdk/client-sso",description:"AWS SDK for JavaScript Sso Client for Node.js, Browser and React Native",version:"3.423.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"tsc -p tsconfig.cjs.json","build:docs":"typedoc","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sso"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"3.0.0","@aws-crypto/sha256-js":"3.0.0","@aws-sdk/middleware-host-header":"3.418.0","@aws-sdk/middleware-logger":"3.418.0","@aws-sdk/middleware-recursion-detection":"3.418.0","@aws-sdk/middleware-user-agent":"3.418.0","@aws-sdk/region-config-resolver":"3.418.0","@aws-sdk/types":"3.418.0","@aws-sdk/util-endpoints":"3.418.0","@aws-sdk/util-user-agent-browser":"3.418.0","@aws-sdk/util-user-agent-node":"3.418.0","@smithy/config-resolver":"^2.0.10","@smithy/fetch-http-handler":"^2.1.5","@smithy/hash-node":"^2.0.9","@smithy/invalid-dependency":"^2.0.9","@smithy/middleware-content-length":"^2.0.11","@smithy/middleware-endpoint":"^2.0.9","@smithy/middleware-retry":"^2.0.12","@smithy/middleware-serde":"^2.0.9","@smithy/middleware-stack":"^2.0.2","@smithy/node-config-provider":"^2.0.12","@smithy/node-http-handler":"^2.1.5","@smithy/protocol-http":"^3.0.5","@smithy/smithy-client":"^2.1.6","@smithy/types":"^2.3.3","@smithy/url-parser":"^2.0.9","@smithy/util-base64":"^2.0.0","@smithy/util-body-length-browser":"^2.0.0","@smithy/util-body-length-node":"^2.1.0","@smithy/util-defaults-mode-browser":"^2.0.10","@smithy/util-defaults-mode-node":"^2.0.12","@smithy/util-retry":"^2.0.2","@smithy/util-utf8":"^2.0.0",tslib:"^2.5.0"},devDependencies:{"@smithy/service-client-documentation-generator":"^2.0.0","@tsconfig/node14":"1.0.3","@types/node":"^14.14.31",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typedoc:"0.23.23",typescript:"~4.9.5"},engines:{node:">=14.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sso",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sso"}}});var n02=Y((c02,p02)=>{Object.defineProperty(c02,"__esModule",{value:!0});c02.isCrtAvailable=void 0;var Lu5=()=>{try{if(typeof p02!=="undefined"&&(()=>{throw new Error("Cannot require module "+"aws-crt");})())return["md/crt-avail"];return null}catch(I){return null}};c02.isCrtAvailable=Lu5});var zP=Y((a02)=>{Object.defineProperty(a02,"__esModule",{value:!0});a02.defaultUserAgent=a02.UA_APP_ID_INI_NAME=a02.UA_APP_ID_ENV_NAME=void 0;var yu5=mV(),r02=B1("os"),lY1=B1("process"),Pu5=n02();a02.UA_APP_ID_ENV_NAME="AWS_SDK_UA_APP_ID";a02.UA_APP_ID_INI_NAME="sdk-ua-app-id";var $u5=({serviceId:I,clientVersion:d})=>{let G=[["aws-sdk-js",d],["ua","2.0"],[`os/${r02.platform()}`,r02.release()],["lang/js"],["md/nodejs",`${lY1.versions.node}`]],Z=Pu5.isCrtAvailable();if(Z)G.push(Z);if(I)G.push([`api/${I}`,d]);if(lY1.env.AWS_EXECUTION_ENV)G.push([`exec-env/${lY1.env.AWS_EXECUTION_ENV}`]);let C=yu5.loadConfig({environmentVariableSelector:(w)=>w[a02.UA_APP_ID_ENV_NAME],configFileSelector:(w)=>w[a02.UA_APP_ID_INI_NAME],default:void 0})(),W=void 0;return async()=>{if(!W){let w=await C;W=w?[...G,[`app/${w}`]]:[...G]}return W}};a02.defaultUserAgent=$u5});var QP=Y((tW3,Z22)=>{var{defineProperty:xn,getOwnPropertyDescriptor:uu5,getOwnPropertyNames:Tu5}=Object,Ou5=Object.prototype.hasOwnProperty,I22=(I,d)=>xn(I,"name",{value:d,configurable:!0}),mu5=(I,d)=>{for(var G in d)xn(I,G,{get:d[G],enumerable:!0})},lu5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of Tu5(d))if(!Ou5.call(I,C)&&C!==G)xn(I,C,{get:()=>d[C],enumerable:!(Z=uu5(d,C))||Z.enumerable})}return I},bu5=(I)=>lu5(xn({},"__esModule",{value:!0}),I),d22={};mu5(d22,{Hash:()=>ku5});Z22.exports=bu5(d22);var bY1=Vq(),hu5=SZ(),ju5=B1("buffer"),t02=B1("crypto"),G22=class I{constructor(d,G){this.algorithmIdentifier=d,this.secret=G,this.reset()}update(d,G){this.hash.update(hu5.toUint8Array(hY1(d,G)))}digest(){return Promise.resolve(this.hash.digest())}reset(){this.hash=this.secret?t02.createHmac(this.algorithmIdentifier,hY1(this.secret)):t02.createHash(this.algorithmIdentifier)}};I22(G22,"Hash");var ku5=G22;function hY1(I,d){if(ju5.Buffer.isBuffer(I))return I;if(typeof I==="string")return bY1.fromString(I,d);if(ArrayBuffer.isView(I))return bY1.fromArrayBuffer(I.buffer,I.byteOffset,I.byteLength);return bY1.fromArrayBuffer(I)}I22(hY1,"castSourceData")});var fP=Y((Iw3,w22)=>{var{defineProperty:cn,getOwnPropertyDescriptor:xu5,getOwnPropertyNames:cu5}=Object,pu5=Object.prototype.hasOwnProperty,iu5=(I,d)=>cn(I,"name",{value:d,configurable:!0}),nu5=(I,d)=>{for(var G in d)cn(I,G,{get:d[G],enumerable:!0})},ru5=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of cu5(d))if(!pu5.call(I,C)&&C!==G)cn(I,C,{get:()=>d[C],enumerable:!(Z=xu5(d,C))||Z.enumerable})}return I},au5=(I)=>ru5(cn({},"__esModule",{value:!0}),I),W22={};nu5(W22,{calculateBodyLength:()=>su5});w22.exports=au5(W22);var C22=B1("fs"),su5=iu5((I)=>{if(!I)return 0;if(typeof I==="string")return Buffer.byteLength(I);else if(typeof I.byteLength==="number")return I.byteLength;else if(typeof I.size==="number")return I.size;else if(typeof I.start==="number"&&typeof I.end==="number")return I.end+1-I.start;else if(typeof I.path==="string"||Buffer.isBuffer(I.path))return C22.lstatSync(I.path).size;else if(typeof I.fd==="number")return C22.fstatSync(I.fd).size;throw new Error(`Body Length computation failed for ${I}`)},"calculateBodyLength")});var f22=Y((z22)=>{Object.defineProperty(z22,"__esModule",{value:!0});z22.ruleSet=void 0;var g22="required",eC="fn",tC="argv",Mq="ref",B22="isSet",kV="tree",vq="error",Eq="endpoint",jY1="PartitionResult",kY1="getAttr",A22={[g22]:!1,type:"String"},V22={[g22]:!0,default:!1,type:"Boolean"},X22={[Mq]:"Endpoint"},J22={[eC]:"booleanEquals",[tC]:[{[Mq]:"UseFIPS"},!0]},K22={[eC]:"booleanEquals",[tC]:[{[Mq]:"UseDualStack"},!0]},$Z={},Y22={[eC]:"booleanEquals",[tC]:[!0,{[eC]:kY1,[tC]:[{[Mq]:jY1},"supportsFIPS"]}]},N22={[Mq]:jY1},_22={[eC]:"booleanEquals",[tC]:[!0,{[eC]:kY1,[tC]:[N22,"supportsDualStack"]}]},D22=[J22],H22=[K22],F22=[{[Mq]:"Region"}],ou5={version:"1.0",parameters:{Region:A22,UseDualStack:V22,UseFIPS:V22,Endpoint:A22},rules:[{conditions:[{[eC]:B22,[tC]:[X22]}],type:kV,rules:[{conditions:D22,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:vq},{conditions:H22,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:vq},{endpoint:{url:X22,properties:$Z,headers:$Z},type:Eq}]},{conditions:[{[eC]:B22,[tC]:F22}],type:kV,rules:[{conditions:[{[eC]:"aws.partition",[tC]:F22,assign:jY1}],type:kV,rules:[{conditions:[J22,K22],type:kV,rules:[{conditions:[Y22,_22],type:kV,rules:[{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:$Z,headers:$Z},type:Eq}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:vq}]},{conditions:D22,type:kV,rules:[{conditions:[Y22],type:kV,rules:[{conditions:[{[eC]:"stringEquals",[tC]:["aws-us-gov",{[eC]:kY1,[tC]:[N22,"name"]}]}],endpoint:{url:"https://portal.sso.{Region}.amazonaws.com",properties:$Z,headers:$Z},type:Eq},{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}",properties:$Z,headers:$Z},type:Eq}]},{error:"FIPS is enabled but this partition does not support FIPS",type:vq}]},{conditions:H22,type:kV,rules:[{conditions:[_22],type:kV,rules:[{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:$Z,headers:$Z},type:Eq}]},{error:"DualStack is enabled but this partition does not support DualStack",type:vq}]},{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dnsSuffix}",properties:$Z,headers:$Z},type:Eq}]}]},{error:"Invalid Configuration: Missing Region",type:vq}]};z22.ruleSet=ou5});var U22=Y((q22)=>{Object.defineProperty(q22,"__esModule",{value:!0});q22.defaultEndpointResolver=void 0;var eu5=zq(),tu5=f22(),IT5=(I,d={})=>{return eu5.resolveEndpoint(tu5.ruleSet,{endpointParams:I,logger:d.logger})};q22.defaultEndpointResolver=IT5});var L22=Y((M22)=>{Object.defineProperty(M22,"__esModule",{value:!0});M22.getRuntimeConfig=void 0;var dT5=h2(),GT5=qJ(),v22=fD(),E22=SZ(),ZT5=U22(),CT5=(I)=>({apiVersion:"2019-06-10",base64Decoder:I?.base64Decoder??v22.fromBase64,base64Encoder:I?.base64Encoder??v22.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??ZT5.defaultEndpointResolver,extensions:I?.extensions??[],logger:I?.logger??new dT5.NoOpLogger,serviceId:I?.serviceId??"SSO",urlParser:I?.urlParser??GT5.parseUrl,utf8Decoder:I?.utf8Decoder??E22.fromUtf8,utf8Encoder:I?.utf8Encoder??E22.toUtf8});M22.getRuntimeConfig=CT5});var RP=Y((Cw3,O22)=>{var{create:WT5,defineProperty:qP,getOwnPropertyDescriptor:wT5,getOwnPropertyNames:BT5,getPrototypeOf:AT5}=Object,VT5=Object.prototype.hasOwnProperty,xY1=(I,d)=>qP(I,"name",{value:d,configurable:!0}),XT5=(I,d)=>{for(var G in d)qP(I,G,{get:d[G],enumerable:!0})},u22=(I,d,G,Z)=>{if(d&&typeof d==="object"||typeof d==="function"){for(let C of BT5(d))if(!VT5.call(I,C)&&C!==G)qP(I,C,{get:()=>d[C],enumerable:!(Z=wT5(d,C))||Z.enumerable})}return I},YT5=(I,d,G)=>(G=I!=null?WT5(AT5(I)):{},u22(d||!I||!I.__esModule?qP(G,"default",{value:I,enumerable:!0}):G,I)),_T5=(I)=>u22(qP({},"__esModule",{value:!0}),I),T22={};XT5(T22,{resolveDefaultsModeConfig:()=>fT5});O22.exports=_T5(T22);var DT5=_B(),y22=mV(),HT5=x3(),FT5="AWS_EXECUTION_ENV",P22="AWS_REGION",$22="AWS_DEFAULT_REGION",gT5="AWS_EC2_METADATA_DISABLED",JT5=["in-region","cross-region","mobile","standard","legacy"],KT5="/latest/meta-data/placement/region",NT5="AWS_DEFAULTS_MODE",zT5="defaults_mode",QT5={environmentVariableSelector:(I)=>{return I[NT5]},configFileSelector:(I)=>{return I[zT5]},default:"legacy"},fT5=xY1(({region:I=y22.loadConfig(DT5.NODE_REGION_CONFIG_OPTIONS),defaultsMode:d=y22.loadConfig(QT5)}={})=>HT5.memoize(async()=>{let G=typeof d==="function"?await d():d;switch(G==null?void 0:G.toLowerCase()){case"auto":return qT5(I);case"in-region":case"cross-region":case"mobile":case"standard":case"legacy":return Promise.resolve(G==null?void 0:G.toLocaleLowerCase());case void 0:return Promise.resolve("legacy");default:throw new Error(`Invalid parameter for "defaultsMode", expect ${JT5.join(", ")}, got ${G}`)}}),"resolveDefaultsModeConfig"),qT5=xY1(async(I)=>{if(I){let d=typeof I==="function"?await I():I,G=await RT5();if(!G)return"standard";if(d===G)return"in-region";else return"cross-region"}return"standard"},"resolveNodeDefaultsModeAuto"),RT5=xY1(async()=>{if(process.env[FT5]&&(process.env[P22]||process.env[$22]))return process.env[P22]??process.env[$22];if(!process.env[gT5])try{let{getInstanceMetadataEndpoint:I,httpRequest:d}=await Promise.resolve().then(()=>YT5(kn())),G=await I();return(await d({...G,path:KT5})).toString()}catch(I){}},"inferPhysicalRegion")});var j22=Y((b22)=>{Object.defineProperty(b22,"__esModule",{value:!0});b22.getRuntimeConfig=void 0;var UT5=x1(),vT5=UT5.__importDefault(x02()),ET5=zP(),pn=_B(),MT5=QP(),m22=bV(),UP=mV(),l22=Yq(),ST5=fP(),LT5=fq(),yT5=L22(),PT5=h2(),$T5=RP(),uT5=h2(),TT5=(I)=>{uT5.emitWarningIfUnsupportedVersion(process.version);let d=$T5.resolveDefaultsModeConfig(I),G=()=>d().then(PT5.loadConfigsForDefaultMode),Z=yT5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??ST5.calculateBodyLength,defaultUserAgentProvider:I?.defaultUserAgentProvider??ET5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:vT5.default.version}),maxAttempts:I?.maxAttempts??UP.loadConfig(m22.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??UP.loadConfig(pn.NODE_REGION_CONFIG_OPTIONS,pn.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new l22.NodeHttpHandler(G),retryMode:I?.retryMode??UP.loadConfig({...m22.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||LT5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??MT5.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??l22.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??UP.loadConfig(pn.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??UP.loadConfig(pn.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};b22.getRuntimeConfig=TT5});var c22=Y((k22)=>{Object.defineProperty(k22,"__esModule",{value:!0});k22.resolveAwsRegionExtensionConfiguration=k22.getAwsRegionExtensionConfiguration=void 0;var OT5=(I)=>{let d=async()=>{if(I.region===void 0)throw new Error("Region is missing from runtimeConfig");let G=I.region;if(typeof G==="string")return G;return G()};return{setRegion(G){d=G},region(){return d}}};k22.getAwsRegionExtensionConfiguration=OT5;var mT5=(I)=>{return{region:I.region()}};k22.resolveAwsRegionExtensionConfiguration=mT5});var a22=Y((p22)=>{Object.defineProperty(p22,"__esModule",{value:!0});p22.NODE_REGION_CONFIG_FILE_OPTIONS=p22.NODE_REGION_CONFIG_OPTIONS=p22.REGION_INI_NAME=p22.REGION_ENV_NAME=void 0;p22.REGION_ENV_NAME="AWS_REGION";p22.REGION_INI_NAME="region";p22.NODE_REGION_CONFIG_OPTIONS={environmentVariableSelector:(I)=>I[p22.REGION_ENV_NAME],configFileSelector:(I)=>I[p22.REGION_INI_NAME],default:()=>{throw new Error("Region is missing")}};p22.NODE_REGION_CONFIG_FILE_OPTIONS={preferredFile:"credentials"}});var cY1=Y((s22)=>{Object.defineProperty(s22,"__esModule",{value:!0});s22.isFipsRegion=void 0;var hT5=(I)=>typeof I==="string"&&(I.startsWith("fips-")||I.endsWith("-fips"));s22.isFipsRegion=hT5});var I42=Y((e22)=>{Object.defineProperty(e22,"__esModule",{value:!0});e22.getRealRegion=void 0;var jT5=cY1(),kT5=(I)=>jT5.isFipsRegion(I)?["fips-aws-global","aws-fips"].includes(I)?"us-east-1":I.replace(/fips-(dkr-|prod-)?|-fips/,""):I;e22.getRealRegion=kT5});var C42=Y((G42)=>{Object.defineProperty(G42,"__esModule",{value:!0});G42.resolveRegionConfig=void 0;var d42=I42(),xT5=cY1(),cT5=(I)=>{let{region:d,useFipsEndpoint:G}=I;if(!d)throw new Error("Region is missing");return{...I,region:async()=>{if(typeof d==="string")return d42.getRealRegion(d);let Z=await d();return d42.getRealRegion(Z)},useFipsEndpoint:async()=>{let Z=typeof d==="string"?d:await d();if(xT5.isFipsRegion(Z))return!0;return typeof G!=="function"?Promise.resolve(!!G):G()}}};G42.resolveRegionConfig=cT5});var w42=Y((nn)=>{Object.defineProperty(nn,"__esModule",{value:!0});var W42=x1();W42.__exportStar(a22(),nn);W42.__exportStar(C42(),nn)});var an=Y((rn)=>{Object.defineProperty(rn,"__esModule",{value:!0});var B42=x1();B42.__exportStar(c22(),rn);B42.__exportStar(w42(),rn)});var D42=Y((Y42)=>{Object.defineProperty(Y42,"__esModule",{value:!0});Y42.resolveRuntimeExtensions=void 0;var A42=an(),V42=t8(),X42=h2(),pY1=(I)=>I,pT5=(I,d)=>{let G={...pY1(A42.getAwsRegionExtensionConfiguration(I)),...pY1(X42.getDefaultExtensionConfiguration(I)),...pY1(V42.getHttpHandlerExtensionConfiguration(I))};return d.forEach((Z)=>Z.configure(G)),{...I,...A42.resolveAwsRegionExtensionConfiguration(G),...X42.resolveDefaultRuntimeConfig(G),...V42.resolveHttpHandlerRuntimeConfig(G)}};Y42.resolveRuntimeExtensions=pT5});var vP=Y((iY1)=>{Object.defineProperty(iY1,"__esModule",{value:!0});iY1.SSOClient=iY1.__Client=void 0;var H42=ey(),iT5=ty(),nT5=IP(),F42=wP(),rT5=_B(),aT5=BP(),sT5=c3(),g42=bV(),J42=h2();Object.defineProperty(iY1,"__Client",{enumerable:!0,get:function(){return J42.Client}});var oT5=k02(),eT5=j22(),tT5=D42();class K42 extends J42.Client{constructor(...[I]){let d=eT5.getRuntimeConfig(I||{}),G=oT5.resolveClientEndpointParameters(d),Z=rT5.resolveRegionConfig(G),C=sT5.resolveEndpointConfig(Z),W=g42.resolveRetryConfig(C),w=H42.resolveHostHeaderConfig(W),B=F42.resolveUserAgentConfig(w),A=tT5.resolveRuntimeExtensions(B,I?.extensions||[]);super(A);this.config=A,this.middlewareStack.use(g42.getRetryPlugin(this.config)),this.middlewareStack.use(aT5.getContentLengthPlugin(this.config)),this.middlewareStack.use(H42.getHostHeaderPlugin(this.config)),this.middlewareStack.use(iT5.getLoggerPlugin(this.config)),this.middlewareStack.use(nT5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(F42.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}iY1.SSOClient=K42});var sn=Y((rY1)=>{Object.defineProperty(rY1,"__esModule",{value:!0});rY1.SSOServiceException=rY1.__ServiceException=void 0;var z42=h2();Object.defineProperty(rY1,"__ServiceException",{enumerable:!0,get:function(){return z42.ServiceException}});class nY1 extends z42.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,nY1.prototype)}}rY1.SSOServiceException=nY1});var UJ=Y((f42)=>{Object.defineProperty(f42,"__esModule",{value:!0});f42.LogoutRequestFilterSensitiveLog=f42.ListAccountsRequestFilterSensitiveLog=f42.ListAccountRolesRequestFilterSensitiveLog=f42.GetRoleCredentialsResponseFilterSensitiveLog=f42.RoleCredentialsFilterSensitiveLog=f42.GetRoleCredentialsRequestFilterSensitiveLog=f42.UnauthorizedException=f42.TooManyRequestsException=f42.ResourceNotFoundException=f42.InvalidRequestException=void 0;var Sq=h2(),on=sn();class aY1 extends on.SSOServiceException{constructor(I){super({name:"InvalidRequestException",$fault:"client",...I});this.name="InvalidRequestException",this.$fault="client",Object.setPrototypeOf(this,aY1.prototype)}}f42.InvalidRequestException=aY1;class sY1 extends on.SSOServiceException{constructor(I){super({name:"ResourceNotFoundException",$fault:"client",...I});this.name="ResourceNotFoundException",this.$fault="client",Object.setPrototypeOf(this,sY1.prototype)}}f42.ResourceNotFoundException=sY1;class oY1 extends on.SSOServiceException{constructor(I){super({name:"TooManyRequestsException",$fault:"client",...I});this.name="TooManyRequestsException",this.$fault="client",Object.setPrototypeOf(this,oY1.prototype)}}f42.TooManyRequestsException=oY1;class eY1 extends on.SSOServiceException{constructor(I){super({name:"UnauthorizedException",$fault:"client",...I});this.name="UnauthorizedException",this.$fault="client",Object.setPrototypeOf(this,eY1.prototype)}}f42.UnauthorizedException=eY1;var IO5=(I)=>({...I,...I.accessToken&&{accessToken:Sq.SENSITIVE_STRING}});f42.GetRoleCredentialsRequestFilterSensitiveLog=IO5;var dO5=(I)=>({...I,...I.secretAccessKey&&{secretAccessKey:Sq.SENSITIVE_STRING},...I.sessionToken&&{sessionToken:Sq.SENSITIVE_STRING}});f42.RoleCredentialsFilterSensitiveLog=dO5;var GO5=(I)=>({...I,...I.roleCredentials&&{roleCredentials:f42.RoleCredentialsFilterSensitiveLog(I.roleCredentials)}});f42.GetRoleCredentialsResponseFilterSensitiveLog=GO5;var ZO5=(I)=>({...I,...I.accessToken&&{accessToken:Sq.SENSITIVE_STRING}});f42.ListAccountRolesRequestFilterSensitiveLog=ZO5;var CO5=(I)=>({...I,...I.accessToken&&{accessToken:Sq.SENSITIVE_STRING}});f42.ListAccountsRequestFilterSensitiveLog=CO5;var WO5=(I)=>({...I,...I.accessToken&&{accessToken:Sq.SENSITIVE_STRING}});f42.LogoutRequestFilterSensitiveLog=WO5});var EP=Y((U42)=>{Object.defineProperty(U42,"__esModule",{value:!0});U42.de_LogoutCommand=U42.de_ListAccountsCommand=U42.de_ListAccountRolesCommand=U42.de_GetRoleCredentialsCommand=U42.se_LogoutCommand=U42.se_ListAccountsCommand=U42.se_ListAccountRolesCommand=U42.se_GetRoleCredentialsCommand=void 0;var en=t8(),H4=h2(),tn=UJ(),HO5=sn(),FO5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=H4.map({},Cr,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/federation/credentials`,A=H4.map({role_name:[,H4.expectNonNull(I.roleName,"roleName")],account_id:[,H4.expectNonNull(I.accountId,"accountId")]}),V;return new en.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};U42.se_GetRoleCredentialsCommand=FO5;var gO5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=H4.map({},Cr,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/assignment/roles`,A=H4.map({next_token:[,I.nextToken],max_result:[()=>I.maxResults!==void 0,()=>I.maxResults.toString()],account_id:[,H4.expectNonNull(I.accountId,"accountId")]}),V;return new en.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};U42.se_ListAccountRolesCommand=gO5;var JO5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=H4.map({},Cr,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/assignment/accounts`,A=H4.map({next_token:[,I.nextToken],max_result:[()=>I.maxResults!==void 0,()=>I.maxResults.toString()]}),V;return new en.HttpRequest({protocol:Z,hostname:G,port:C,method:"GET",headers:w,path:B,query:A,body:V})};U42.se_ListAccountsCommand=JO5;var KO5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=H4.map({},Cr,{"x-amz-sso_bearer_token":I.accessToken}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/logout`,A;return new en.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};U42.se_LogoutCommand=KO5;var NO5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return zO5(I,d);let G=H4.map({$metadata:lD(I)}),Z=H4.expectNonNull(H4.expectObject(await Wr(I.body,d)),"body"),C=H4.take(Z,{roleCredentials:H4._json});return Object.assign(G,C),G};U42.de_GetRoleCredentialsCommand=NO5;var zO5=async(I,d)=>{let G={...I,body:await wr(I.body,d)},Z=Br(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await dr(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await tY1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Gr(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Zr(G,d);default:let C=G.body;return Ir({output:I,parsedBody:C,errorCode:Z})}},QO5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return fO5(I,d);let G=H4.map({$metadata:lD(I)}),Z=H4.expectNonNull(H4.expectObject(await Wr(I.body,d)),"body"),C=H4.take(Z,{nextToken:H4.expectString,roleList:H4._json});return Object.assign(G,C),G};U42.de_ListAccountRolesCommand=QO5;var fO5=async(I,d)=>{let G={...I,body:await wr(I.body,d)},Z=Br(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await dr(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await tY1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Gr(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Zr(G,d);default:let C=G.body;return Ir({output:I,parsedBody:C,errorCode:Z})}},qO5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return RO5(I,d);let G=H4.map({$metadata:lD(I)}),Z=H4.expectNonNull(H4.expectObject(await Wr(I.body,d)),"body"),C=H4.take(Z,{accountList:H4._json,nextToken:H4.expectString});return Object.assign(G,C),G};U42.de_ListAccountsCommand=qO5;var RO5=async(I,d)=>{let G={...I,body:await wr(I.body,d)},Z=Br(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await dr(G,d);case"ResourceNotFoundException":case"com.amazonaws.sso#ResourceNotFoundException":throw await tY1(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Gr(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Zr(G,d);default:let C=G.body;return Ir({output:I,parsedBody:C,errorCode:Z})}},UO5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return vO5(I,d);let G=H4.map({$metadata:lD(I)});return await H4.collectBody(I.body,d),G};U42.de_LogoutCommand=UO5;var vO5=async(I,d)=>{let G={...I,body:await wr(I.body,d)},Z=Br(I,G.body);switch(Z){case"InvalidRequestException":case"com.amazonaws.sso#InvalidRequestException":throw await dr(G,d);case"TooManyRequestsException":case"com.amazonaws.sso#TooManyRequestsException":throw await Gr(G,d);case"UnauthorizedException":case"com.amazonaws.sso#UnauthorizedException":throw await Zr(G,d);default:let C=G.body;return Ir({output:I,parsedBody:C,errorCode:Z})}},Ir=H4.withBaseException(HO5.SSOServiceException),dr=async(I,d)=>{let G=H4.map({}),Z=I.body,C=H4.take(Z,{message:H4.expectString});Object.assign(G,C);let W=new tn.InvalidRequestException({$metadata:lD(I),...G});return H4.decorateServiceException(W,I.body)},tY1=async(I,d)=>{let G=H4.map({}),Z=I.body,C=H4.take(Z,{message:H4.expectString});Object.assign(G,C);let W=new tn.ResourceNotFoundException({$metadata:lD(I),...G});return H4.decorateServiceException(W,I.body)},Gr=async(I,d)=>{let G=H4.map({}),Z=I.body,C=H4.take(Z,{message:H4.expectString});Object.assign(G,C);let W=new tn.TooManyRequestsException({$metadata:lD(I),...G});return H4.decorateServiceException(W,I.body)},Zr=async(I,d)=>{let G=H4.map({}),Z=I.body,C=H4.take(Z,{message:H4.expectString});Object.assign(G,C);let W=new tn.UnauthorizedException({$metadata:lD(I),...G});return H4.decorateServiceException(W,I.body)},lD=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),EO5=(I,d)=>H4.collectBody(I,d).then((G)=>d.utf8Encoder(G)),Cr=(I)=>I!==void 0&&I!==null&&I!==""&&(!Object.getOwnPropertyNames(I).includes("length")||I.length!=0)&&(!Object.getOwnPropertyNames(I).includes("size")||I.size!=0),Wr=(I,d)=>EO5(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),wr=async(I,d)=>{let G=await Wr(I,d);return G.message=G.message??G.Message,G},Br=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)}});var G_1=Y((d_1)=>{Object.defineProperty(d_1,"__esModule",{value:!0});d_1.GetRoleCredentialsCommand=d_1.$Command=void 0;var TO5=c3(),OO5=n6(),S42=h2();Object.defineProperty(d_1,"$Command",{enumerable:!0,get:function(){return S42.Command}});var mO5=k3(),E42=UJ(),M42=EP();class I_1 extends S42.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(OO5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(TO5.getEndpointPlugin(d,I_1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"GetRoleCredentialsCommand",inputFilterSensitiveLog:E42.GetRoleCredentialsRequestFilterSensitiveLog,outputFilterSensitiveLog:E42.GetRoleCredentialsResponseFilterSensitiveLog,[mO5.SMITHY_CONTEXT_KEY]:{service:"SWBPortalService",operation:"GetRoleCredentials"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return M42.se_GetRoleCredentialsCommand(I,d)}deserialize(I,d){return M42.de_GetRoleCredentialsCommand(I,d)}}d_1.GetRoleCredentialsCommand=I_1});var Ar=Y((C_1)=>{Object.defineProperty(C_1,"__esModule",{value:!0});C_1.ListAccountRolesCommand=C_1.$Command=void 0;var lO5=c3(),bO5=n6(),P42=h2();Object.defineProperty(C_1,"$Command",{enumerable:!0,get:function(){return P42.Command}});var hO5=k3(),jO5=UJ(),y42=EP();class Z_1 extends P42.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(bO5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(lO5.getEndpointPlugin(d,Z_1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"ListAccountRolesCommand",inputFilterSensitiveLog:jO5.ListAccountRolesRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V,[hO5.SMITHY_CONTEXT_KEY]:{service:"SWBPortalService",operation:"ListAccountRoles"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return y42.se_ListAccountRolesCommand(I,d)}deserialize(I,d){return y42.de_ListAccountRolesCommand(I,d)}}C_1.ListAccountRolesCommand=Z_1});var Vr=Y((w_1)=>{Object.defineProperty(w_1,"__esModule",{value:!0});w_1.ListAccountsCommand=w_1.$Command=void 0;var kO5=c3(),xO5=n6(),T42=h2();Object.defineProperty(w_1,"$Command",{enumerable:!0,get:function(){return T42.Command}});var cO5=k3(),pO5=UJ(),u42=EP();class W_1 extends T42.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(xO5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(kO5.getEndpointPlugin(d,W_1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"ListAccountsCommand",inputFilterSensitiveLog:pO5.ListAccountsRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V,[cO5.SMITHY_CONTEXT_KEY]:{service:"SWBPortalService",operation:"ListAccounts"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return u42.se_ListAccountsCommand(I,d)}deserialize(I,d){return u42.de_ListAccountsCommand(I,d)}}w_1.ListAccountsCommand=W_1});var V_1=Y((A_1)=>{Object.defineProperty(A_1,"__esModule",{value:!0});A_1.LogoutCommand=A_1.$Command=void 0;var iO5=c3(),nO5=n6(),l42=h2();Object.defineProperty(A_1,"$Command",{enumerable:!0,get:function(){return l42.Command}});var rO5=k3(),aO5=UJ(),m42=EP();class B_1 extends l42.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(nO5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(iO5.getEndpointPlugin(d,B_1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"SSOClient",commandName:"LogoutCommand",inputFilterSensitiveLog:aO5.LogoutRequestFilterSensitiveLog,outputFilterSensitiveLog:(V)=>V,[rO5.SMITHY_CONTEXT_KEY]:{service:"SWBPortalService",operation:"Logout"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return m42.se_LogoutCommand(I,d)}deserialize(I,d){return m42.de_LogoutCommand(I,d)}}A_1.LogoutCommand=B_1});var k42=Y((h42)=>{Object.defineProperty(h42,"__esModule",{value:!0});h42.SSO=void 0;var sO5=h2(),oO5=G_1(),eO5=Ar(),tO5=Vr(),Im5=V_1(),dm5=vP(),Gm5={GetRoleCredentialsCommand:oO5.GetRoleCredentialsCommand,ListAccountRolesCommand:eO5.ListAccountRolesCommand,ListAccountsCommand:tO5.ListAccountsCommand,LogoutCommand:Im5.LogoutCommand};class X_1 extends dm5.SSOClient{}h42.SSO=X_1;sO5.createAggregatedClient(Gm5,X_1)});var x42=Y((Lq)=>{Object.defineProperty(Lq,"__esModule",{value:!0});var Xr=x1();Xr.__exportStar(G_1(),Lq);Xr.__exportStar(Ar(),Lq);Xr.__exportStar(Vr(),Lq);Xr.__exportStar(V_1(),Lq)});var p42=Y((c42)=>{Object.defineProperty(c42,"__esModule",{value:!0})});var r42=Y((i42)=>{Object.defineProperty(i42,"__esModule",{value:!0});i42.paginateListAccountRoles=void 0;var Zm5=Ar(),Cm5=vP(),Wm5=async(I,d,...G)=>{return await I.send(new Zm5.ListAccountRolesCommand(d),...G)};async function*wm5(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.nextToken=Z,d.maxResults=I.pageSize,I.client instanceof Cm5.SSOClient)W=await Wm5(I.client,d,...G);else throw new Error("Invalid client, expected SSO | SSOClient");yield W;let w=Z;Z=W.nextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}i42.paginateListAccountRoles=wm5});var o42=Y((a42)=>{Object.defineProperty(a42,"__esModule",{value:!0});a42.paginateListAccounts=void 0;var Bm5=Vr(),Am5=vP(),Vm5=async(I,d,...G)=>{return await I.send(new Bm5.ListAccountsCommand(d),...G)};async function*Xm5(I,d,...G){let Z=I.startingToken||void 0,C=!0,W;while(C){if(d.nextToken=Z,d.maxResults=I.pageSize,I.client instanceof Am5.SSOClient)W=await Vm5(I.client,d,...G);else throw new Error("Invalid client, expected SSO | SSOClient");yield W;let w=Z;Z=W.nextToken,C=!!(Z&&(!I.stopOnSameToken||Z!==w))}return}a42.paginateListAccounts=Xm5});var e42=Y((MP)=>{Object.defineProperty(MP,"__esModule",{value:!0});var Y_1=x1();Y_1.__exportStar(p42(),MP);Y_1.__exportStar(r42(),MP);Y_1.__exportStar(o42(),MP)});var t42=Y((__1)=>{Object.defineProperty(__1,"__esModule",{value:!0});var Ym5=x1();Ym5.__exportStar(UJ(),__1)});var I52=Y((bD)=>{Object.defineProperty(bD,"__esModule",{value:!0});bD.SSOServiceException=void 0;var SP=x1();SP.__exportStar(vP(),bD);SP.__exportStar(k42(),bD);SP.__exportStar(x42(),bD);SP.__exportStar(e42(),bD);SP.__exportStar(t42(),bD);var _m5=sn();Object.defineProperty(bD,"SSOServiceException",{enumerable:!0,get:function(){return _m5.SSOServiceException}})});var Dr=Y((T52)=>{Object.defineProperty(T52,"__esModule",{value:!0});T52.UnsupportedGrantTypeException=T52.UnauthorizedClientException=T52.SlowDownException=T52.SSOOIDCClient=T52.InvalidScopeException=T52.InvalidRequestException=T52.InvalidClientException=T52.InternalServerException=T52.ExpiredTokenException=T52.CreateTokenCommand=T52.AuthorizationPendingException=T52.AccessDeniedException=void 0;var d52=ey(),Hm5=ty(),Fm5=IP(),G52=wP(),gm5=_B(),Jm5=BP(),Km5=c3(),Z52=bV(),Nm5=h2(),zm5=(I)=>{var d,G;return{...I,useDualstackEndpoint:(d=I.useDualstackEndpoint)!==null&&d!==void 0?d:!1,useFipsEndpoint:(G=I.useFipsEndpoint)!==null&&G!==void 0?G:!1,defaultSigningName:"awsssooidc"}},Qm5={version:"3.387.0"},fm5=zP(),Yr=_B(),qm5=QP(),C52=bV(),LP=mV(),W52=Yq(),Rm5=fP(),Um5=fq(),vm5=h2(),Em5=qJ(),w52=fD(),B52=SZ(),Mm5=zq(),F52="required",xV="fn",cV="argv",yq="ref",D_1="PartitionResult",HB="tree",yP="error",PP="endpoint",A52={[F52]:!1,type:"String"},V52={[F52]:!0,default:!1,type:"Boolean"},g52={[yq]:"Endpoint"},J52={[xV]:"booleanEquals",[cV]:[{[yq]:"UseFIPS"},!0]},K52={[xV]:"booleanEquals",[cV]:[{[yq]:"UseDualStack"},!0]},FB={},X52={[xV]:"booleanEquals",[cV]:[!0,{[xV]:"getAttr",[cV]:[{[yq]:D_1},"supportsFIPS"]}]},Y52={[xV]:"booleanEquals",[cV]:[!0,{[xV]:"getAttr",[cV]:[{[yq]:D_1},"supportsDualStack"]}]},_52=[g52],D52=[J52],H52=[K52],Sm5={version:"1.0",parameters:{Region:A52,UseDualStack:V52,UseFIPS:V52,Endpoint:A52},rules:[{conditions:[{[xV]:"aws.partition",[cV]:[{[yq]:"Region"}],assign:D_1}],type:HB,rules:[{conditions:[{[xV]:"isSet",[cV]:_52},{[xV]:"parseURL",[cV]:_52,assign:"url"}],type:HB,rules:[{conditions:D52,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:yP},{type:HB,rules:[{conditions:H52,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:yP},{endpoint:{url:g52,properties:FB,headers:FB},type:PP}]}]},{conditions:[J52,K52],type:HB,rules:[{conditions:[X52,Y52],type:HB,rules:[{endpoint:{url:"https://oidc-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:FB,headers:FB},type:PP}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:yP}]},{conditions:D52,type:HB,rules:[{conditions:[X52],type:HB,rules:[{type:HB,rules:[{endpoint:{url:"https://oidc-fips.{Region}.{PartitionResult#dnsSuffix}",properties:FB,headers:FB},type:PP}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:yP}]},{conditions:H52,type:HB,rules:[{conditions:[Y52],type:HB,rules:[{endpoint:{url:"https://oidc.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:FB,headers:FB},type:PP}]},{error:"DualStack is enabled but this partition does not support DualStack",type:yP}]},{endpoint:{url:"https://oidc.{Region}.{PartitionResult#dnsSuffix}",properties:FB,headers:FB},type:PP}]}]},Lm5=Sm5,ym5=(I,d={})=>{return Mm5.resolveEndpoint(Lm5,{endpointParams:I,logger:d.logger})},Pm5=(I)=>{var d,G,Z,C,W,w,B,A,V;return{apiVersion:"2019-06-10",base64Decoder:(d=I===null||I===void 0?void 0:I.base64Decoder)!==null&&d!==void 0?d:w52.fromBase64,base64Encoder:(G=I===null||I===void 0?void 0:I.base64Encoder)!==null&&G!==void 0?G:w52.toBase64,disableHostPrefix:(Z=I===null||I===void 0?void 0:I.disableHostPrefix)!==null&&Z!==void 0?Z:!1,endpointProvider:(C=I===null||I===void 0?void 0:I.endpointProvider)!==null&&C!==void 0?C:ym5,logger:(W=I===null||I===void 0?void 0:I.logger)!==null&&W!==void 0?W:new vm5.NoOpLogger,serviceId:(w=I===null||I===void 0?void 0:I.serviceId)!==null&&w!==void 0?w:"SSO OIDC",urlParser:(B=I===null||I===void 0?void 0:I.urlParser)!==null&&B!==void 0?B:Em5.parseUrl,utf8Decoder:(A=I===null||I===void 0?void 0:I.utf8Decoder)!==null&&A!==void 0?A:B52.fromUtf8,utf8Encoder:(V=I===null||I===void 0?void 0:I.utf8Encoder)!==null&&V!==void 0?V:B52.toUtf8}},$m5=h2(),um5=RP(),Tm5=h2(),Om5=(I)=>{var d,G,Z,C,W,w,B,A,V,X;Tm5.emitWarningIfUnsupportedVersion(process.version);let _=um5.resolveDefaultsModeConfig(I),F=()=>_().then($m5.loadConfigsForDefaultMode),g=Pm5(I);return{...g,...I,runtime:"node",defaultsMode:_,bodyLengthChecker:(d=I===null||I===void 0?void 0:I.bodyLengthChecker)!==null&&d!==void 0?d:Rm5.calculateBodyLength,defaultUserAgentProvider:(G=I===null||I===void 0?void 0:I.defaultUserAgentProvider)!==null&&G!==void 0?G:fm5.defaultUserAgent({serviceId:g.serviceId,clientVersion:Qm5.version}),maxAttempts:(Z=I===null||I===void 0?void 0:I.maxAttempts)!==null&&Z!==void 0?Z:LP.loadConfig(C52.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:(C=I===null||I===void 0?void 0:I.region)!==null&&C!==void 0?C:LP.loadConfig(Yr.NODE_REGION_CONFIG_OPTIONS,Yr.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:(W=I===null||I===void 0?void 0:I.requestHandler)!==null&&W!==void 0?W:new W52.NodeHttpHandler(F),retryMode:(w=I===null||I===void 0?void 0:I.retryMode)!==null&&w!==void 0?w:LP.loadConfig({...C52.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await F()).retryMode||Um5.DEFAULT_RETRY_MODE}),sha256:(B=I===null||I===void 0?void 0:I.sha256)!==null&&B!==void 0?B:qm5.Hash.bind(null,"sha256"),streamCollector:(A=I===null||I===void 0?void 0:I.streamCollector)!==null&&A!==void 0?A:W52.streamCollector,useDualstackEndpoint:(V=I===null||I===void 0?void 0:I.useDualstackEndpoint)!==null&&V!==void 0?V:LP.loadConfig(Yr.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:(X=I===null||I===void 0?void 0:I.useFipsEndpoint)!==null&&X!==void 0?X:LP.loadConfig(Yr.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}},N52=class extends Nm5.Client{constructor(...[I]){let d=Om5(I||{}),G=zm5(d),Z=gm5.resolveRegionConfig(G),C=Km5.resolveEndpointConfig(Z),W=Z52.resolveRetryConfig(C),w=d52.resolveHostHeaderConfig(W),B=G52.resolveUserAgentConfig(w);super(B);this.config=B,this.middlewareStack.use(Z52.getRetryPlugin(this.config)),this.middlewareStack.use(Jm5.getContentLengthPlugin(this.config)),this.middlewareStack.use(d52.getHostHeaderPlugin(this.config)),this.middlewareStack.use(Hm5.getLoggerPlugin(this.config)),this.middlewareStack.use(Fm5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(G52.getUserAgentPlugin(this.config))}destroy(){super.destroy()}};T52.SSOOIDCClient=N52;var mm5=h2(),lm5=c3(),bm5=n6(),hm5=h2(),H_1=t8(),S0=h2(),jm5=h2(),CG=class I extends jm5.ServiceException{constructor(d){super(d);Object.setPrototypeOf(this,I.prototype)}},z52=class I extends CG{constructor(d){super({name:"AccessDeniedException",$fault:"client",...d});this.name="AccessDeniedException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.AccessDeniedException=z52;var Q52=class I extends CG{constructor(d){super({name:"AuthorizationPendingException",$fault:"client",...d});this.name="AuthorizationPendingException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.AuthorizationPendingException=Q52;var f52=class I extends CG{constructor(d){super({name:"ExpiredTokenException",$fault:"client",...d});this.name="ExpiredTokenException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.ExpiredTokenException=f52;var q52=class I extends CG{constructor(d){super({name:"InternalServerException",$fault:"server",...d});this.name="InternalServerException",this.$fault="server",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.InternalServerException=q52;var R52=class I extends CG{constructor(d){super({name:"InvalidClientException",$fault:"client",...d});this.name="InvalidClientException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.InvalidClientException=R52;var km5=class I extends CG{constructor(d){super({name:"InvalidGrantException",$fault:"client",...d});this.name="InvalidGrantException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}},U52=class I extends CG{constructor(d){super({name:"InvalidRequestException",$fault:"client",...d});this.name="InvalidRequestException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.InvalidRequestException=U52;var v52=class I extends CG{constructor(d){super({name:"InvalidScopeException",$fault:"client",...d});this.name="InvalidScopeException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.InvalidScopeException=v52;var E52=class I extends CG{constructor(d){super({name:"SlowDownException",$fault:"client",...d});this.name="SlowDownException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.SlowDownException=E52;var M52=class I extends CG{constructor(d){super({name:"UnauthorizedClientException",$fault:"client",...d});this.name="UnauthorizedClientException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.UnauthorizedClientException=M52;var S52=class I extends CG{constructor(d){super({name:"UnsupportedGrantTypeException",$fault:"client",...d});this.name="UnsupportedGrantTypeException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}};T52.UnsupportedGrantTypeException=S52;var xm5=class I extends CG{constructor(d){super({name:"InvalidClientMetadataException",$fault:"client",...d});this.name="InvalidClientMetadataException",this.$fault="client",Object.setPrototypeOf(this,I.prototype),this.error=d.error,this.error_description=d.error_description}},cm5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w={"content-type":"application/json"},B=`${(W===null||W===void 0?void 0:W.endsWith("/"))?W.slice(0,-1):W||""}/token`,A;return A=JSON.stringify(S0.take(I,{clientId:[],clientSecret:[],code:[],deviceCode:[],grantType:[],redirectUri:[],refreshToken:[],scope:(V)=>S0._json(V)})),new H_1.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})},pm5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w={"content-type":"application/json"},B=`${(W===null||W===void 0?void 0:W.endsWith("/"))?W.slice(0,-1):W||""}/client/register`,A;return A=JSON.stringify(S0.take(I,{clientName:[],clientType:[],scopes:(V)=>S0._json(V)})),new H_1.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})},im5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w={"content-type":"application/json"},B=`${(W===null||W===void 0?void 0:W.endsWith("/"))?W.slice(0,-1):W||""}/device_authorization`,A;return A=JSON.stringify(S0.take(I,{clientId:[],clientSecret:[],startUrl:[]})),new H_1.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})},nm5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return rm5(I,d);let G=S0.map({$metadata:VI(I)}),Z=S0.expectNonNull(S0.expectObject(await _r(I.body,d)),"body"),C=S0.take(Z,{accessToken:S0.expectString,expiresIn:S0.expectInt32,idToken:S0.expectString,refreshToken:S0.expectString,tokenType:S0.expectString});return Object.assign(G,C),G},rm5=async(I,d)=>{let G={...I,body:await K_1(I.body,d)},Z=N_1(I,G.body);switch(Z){case"AccessDeniedException":case"com.amazonaws.ssooidc#AccessDeniedException":throw await tm5(G,d);case"AuthorizationPendingException":case"com.amazonaws.ssooidc#AuthorizationPendingException":throw await Il5(G,d);case"ExpiredTokenException":case"com.amazonaws.ssooidc#ExpiredTokenException":throw await dl5(G,d);case"InternalServerException":case"com.amazonaws.ssooidc#InternalServerException":throw await g_1(G,d);case"InvalidClientException":case"com.amazonaws.ssooidc#InvalidClientException":throw await L52(G,d);case"InvalidGrantException":case"com.amazonaws.ssooidc#InvalidGrantException":throw await Zl5(G,d);case"InvalidRequestException":case"com.amazonaws.ssooidc#InvalidRequestException":throw await J_1(G,d);case"InvalidScopeException":case"com.amazonaws.ssooidc#InvalidScopeException":throw await y52(G,d);case"SlowDownException":case"com.amazonaws.ssooidc#SlowDownException":throw await P52(G,d);case"UnauthorizedClientException":case"com.amazonaws.ssooidc#UnauthorizedClientException":throw await $52(G,d);case"UnsupportedGrantTypeException":case"com.amazonaws.ssooidc#UnsupportedGrantTypeException":throw await Cl5(G,d);default:let C=G.body;return F_1({output:I,parsedBody:C,errorCode:Z})}},am5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return sm5(I,d);let G=S0.map({$metadata:VI(I)}),Z=S0.expectNonNull(S0.expectObject(await _r(I.body,d)),"body"),C=S0.take(Z,{authorizationEndpoint:S0.expectString,clientId:S0.expectString,clientIdIssuedAt:S0.expectLong,clientSecret:S0.expectString,clientSecretExpiresAt:S0.expectLong,tokenEndpoint:S0.expectString});return Object.assign(G,C),G},sm5=async(I,d)=>{let G={...I,body:await K_1(I.body,d)},Z=N_1(I,G.body);switch(Z){case"InternalServerException":case"com.amazonaws.ssooidc#InternalServerException":throw await g_1(G,d);case"InvalidClientMetadataException":case"com.amazonaws.ssooidc#InvalidClientMetadataException":throw await Gl5(G,d);case"InvalidRequestException":case"com.amazonaws.ssooidc#InvalidRequestException":throw await J_1(G,d);case"InvalidScopeException":case"com.amazonaws.ssooidc#InvalidScopeException":throw await y52(G,d);default:let C=G.body;return F_1({output:I,parsedBody:C,errorCode:Z})}},om5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return em5(I,d);let G=S0.map({$metadata:VI(I)}),Z=S0.expectNonNull(S0.expectObject(await _r(I.body,d)),"body"),C=S0.take(Z,{deviceCode:S0.expectString,expiresIn:S0.expectInt32,interval:S0.expectInt32,userCode:S0.expectString,verificationUri:S0.expectString,verificationUriComplete:S0.expectString});return Object.assign(G,C),G},em5=async(I,d)=>{let G={...I,body:await K_1(I.body,d)},Z=N_1(I,G.body);switch(Z){case"InternalServerException":case"com.amazonaws.ssooidc#InternalServerException":throw await g_1(G,d);case"InvalidClientException":case"com.amazonaws.ssooidc#InvalidClientException":throw await L52(G,d);case"InvalidRequestException":case"com.amazonaws.ssooidc#InvalidRequestException":throw await J_1(G,d);case"SlowDownException":case"com.amazonaws.ssooidc#SlowDownException":throw await P52(G,d);case"UnauthorizedClientException":case"com.amazonaws.ssooidc#UnauthorizedClientException":throw await $52(G,d);default:let C=G.body;return F_1({output:I,parsedBody:C,errorCode:Z})}},F_1=S0.withBaseException(CG),tm5=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new z52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},Il5=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new Q52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},dl5=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new f52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},g_1=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new q52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},L52=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new R52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},Gl5=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new xm5({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},Zl5=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new km5({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},J_1=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new U52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},y52=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new v52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},P52=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new E52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},$52=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new M52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},Cl5=async(I,d)=>{let G=S0.map({}),Z=I.body,C=S0.take(Z,{error:S0.expectString,error_description:S0.expectString});Object.assign(G,C);let W=new S52({$metadata:VI(I),...G});return S0.decorateServiceException(W,I.body)},VI=(I)=>{var d,G;return{httpStatusCode:I.statusCode,requestId:(G=(d=I.headers["x-amzn-requestid"])!==null&&d!==void 0?d:I.headers["x-amzn-request-id"])!==null&&G!==void 0?G:I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}},Wl5=(I,d)=>S0.collectBody(I,d).then((G)=>d.utf8Encoder(G)),_r=(I,d)=>Wl5(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),K_1=async(I,d)=>{var G;let Z=await _r(I,d);return Z.message=(G=Z.message)!==null&&G!==void 0?G:Z.Message,Z},N_1=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)},u52=class I extends hm5.Command{constructor(d){super();this.input=d}static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}resolveMiddleware(d,G,Z){this.middlewareStack.use(bm5.getSerdePlugin(G,this.serialize,this.deserialize)),this.middlewareStack.use(lm5.getEndpointPlugin(G,I.getEndpointParameterInstructions()));let C=d.concat(this.middlewareStack),{logger:W}=G,A={logger:W,clientName:"SSOOIDCClient",commandName:"CreateTokenCommand",inputFilterSensitiveLog:(X)=>X,outputFilterSensitiveLog:(X)=>X},{requestHandler:V}=G;return C.resolve((X)=>V.handle(X.request,Z||{}),A)}serialize(d,G){return cm5(d,G)}deserialize(d,G){return nm5(d,G)}};T52.CreateTokenCommand=u52;var wl5=c3(),Bl5=n6(),Al5=h2(),Vl5=class I extends Al5.Command{constructor(d){super();this.input=d}static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}resolveMiddleware(d,G,Z){this.middlewareStack.use(Bl5.getSerdePlugin(G,this.serialize,this.deserialize)),this.middlewareStack.use(wl5.getEndpointPlugin(G,I.getEndpointParameterInstructions()));let C=d.concat(this.middlewareStack),{logger:W}=G,A={logger:W,clientName:"SSOOIDCClient",commandName:"RegisterClientCommand",inputFilterSensitiveLog:(X)=>X,outputFilterSensitiveLog:(X)=>X},{requestHandler:V}=G;return C.resolve((X)=>V.handle(X.request,Z||{}),A)}serialize(d,G){return pm5(d,G)}deserialize(d,G){return am5(d,G)}},Xl5=c3(),Yl5=n6(),_l5=h2(),Dl5=class I extends _l5.Command{constructor(d){super();this.input=d}static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}resolveMiddleware(d,G,Z){this.middlewareStack.use(Yl5.getSerdePlugin(G,this.serialize,this.deserialize)),this.middlewareStack.use(Xl5.getEndpointPlugin(G,I.getEndpointParameterInstructions()));let C=d.concat(this.middlewareStack),{logger:W}=G,A={logger:W,clientName:"SSOOIDCClient",commandName:"StartDeviceAuthorizationCommand",inputFilterSensitiveLog:(X)=>X,outputFilterSensitiveLog:(X)=>X},{requestHandler:V}=G;return C.resolve((X)=>V.handle(X.request,Z||{}),A)}serialize(d,G){return im5(d,G)}deserialize(d,G){return om5(d,G)}},Hl5={CreateTokenCommand:u52,RegisterClientCommand:Vl5,StartDeviceAuthorizationCommand:Dl5},Fl5=class extends N52{};mm5.createAggregatedClient(Hl5,Fl5)});var Hr=Y((m52)=>{Object.defineProperty(m52,"__esModule",{value:!0});m52.REFRESH_MESSAGE=m52.EXPIRE_WINDOW_MS=void 0;m52.EXPIRE_WINDOW_MS=300000;m52.REFRESH_MESSAGE="To refresh this SSO session run 'aws sso login' with the corresponding profile."});var j52=Y((b52)=>{Object.defineProperty(b52,"__esModule",{value:!0});b52.getSsoOidcClient=void 0;var Ml5=Dr(),z_1={},Sl5=(I)=>{if(z_1[I])return z_1[I];let d=new Ml5.SSOOIDCClient({region:I});return z_1[I]=d,d};b52.getSsoOidcClient=Sl5});var c52=Y((k52)=>{Object.defineProperty(k52,"__esModule",{value:!0});k52.getNewSsoOidcToken=void 0;var Ll5=Dr(),yl5=j52(),Pl5=(I,d)=>{return yl5.getSsoOidcClient(d).send(new Ll5.CreateTokenCommand({clientId:I.clientId,clientSecret:I.clientSecret,refreshToken:I.refreshToken,grantType:"refresh_token"}))};k52.getNewSsoOidcToken=Pl5});var n52=Y((p52)=>{Object.defineProperty(p52,"__esModule",{value:!0});p52.validateTokenExpiry=void 0;var $l5=x3(),ul5=Hr(),Tl5=(I)=>{if(I.expiration&&I.expiration.getTime(){Object.defineProperty(r52,"__esModule",{value:!0});r52.validateTokenKey=void 0;var Ol5=x3(),ml5=Hr(),ll5=(I,d,G=!1)=>{if(typeof d==="undefined")throw new Ol5.TokenProviderError(`Value not present for '${I}' in SSO Token${G?". Cannot refresh":""}. ${ml5.REFRESH_MESSAGE}`,!1)};r52.validateTokenKey=ll5});var t52=Y((o52)=>{Object.defineProperty(o52,"__esModule",{value:!0});o52.writeSSOTokenToFile=void 0;var bl5=rC(),hl5=B1("fs"),{writeFile:jl5}=hl5.promises,kl5=(I,d)=>{let G=bl5.getSSOTokenFilepath(I),Z=JSON.stringify(d,null,2);return jl5(G,Z)};o52.writeSSOTokenToFile=kl5});var Q_1=Y((Z92)=>{Object.defineProperty(Z92,"__esModule",{value:!0});Z92.fromSso=void 0;var $P=x3(),Fr=rC(),I92=Hr(),xl5=c52(),d92=n52(),vJ=s52(),cl5=t52(),G92=new Date(0),pl5=(I={})=>async()=>{let d=await Fr.parseKnownFiles(I),G=Fr.getProfileName(I),Z=d[G];if(!Z)throw new $P.TokenProviderError(`Profile '${G}' could not be found in shared credentials file.`,!1);else if(!Z.sso_session)throw new $P.TokenProviderError(`Profile '${G}' is missing required property 'sso_session'.`);let C=Z.sso_session,w=(await Fr.loadSsoSessionData(I))[C];if(!w)throw new $P.TokenProviderError(`Sso session '${C}' could not be found in shared credentials file.`,!1);for(let g of["sso_start_url","sso_region"])if(!w[g])throw new $P.TokenProviderError(`Sso session '${C}' is missing required property '${g}'.`,!1);let{sso_start_url:B,sso_region:A}=w,V;try{V=await Fr.getSSOTokenFromFile(C)}catch(g){throw new $P.TokenProviderError(`The SSO session token associated with profile=${G} was not found or is invalid. ${I92.REFRESH_MESSAGE}`,!1)}vJ.validateTokenKey("accessToken",V.accessToken),vJ.validateTokenKey("expiresAt",V.expiresAt);let{accessToken:X,expiresAt:_}=V,F={token:X,expiration:new Date(_)};if(F.expiration.getTime()-Date.now()>I92.EXPIRE_WINDOW_MS)return F;if(Date.now()-G92.getTime()<30000)return d92.validateTokenExpiry(F),F;vJ.validateTokenKey("clientId",V.clientId,!0),vJ.validateTokenKey("clientSecret",V.clientSecret,!0),vJ.validateTokenKey("refreshToken",V.refreshToken,!0);try{G92.setTime(Date.now());let g=await xl5.getNewSsoOidcToken(V,A);vJ.validateTokenKey("accessToken",g.accessToken),vJ.validateTokenKey("expiresIn",g.expiresIn);let J=new Date(Date.now()+g.expiresIn*1000);try{await cl5.writeSSOTokenToFile(C,{...V,accessToken:g.accessToken,expiresAt:J.toISOString(),refreshToken:g.refreshToken})}catch(K){}return{token:g.accessToken,expiration:J}}catch(g){return d92.validateTokenExpiry(F),F}};Z92.fromSso=pl5});var B92=Y((W92)=>{Object.defineProperty(W92,"__esModule",{value:!0});W92.fromStatic=void 0;var il5=x3(),nl5=({token:I})=>async()=>{if(!I||!I.token)throw new il5.TokenProviderError("Please pass a valid token to fromStatic",!1);return I};W92.fromStatic=nl5});var X92=Y((A92)=>{Object.defineProperty(A92,"__esModule",{value:!0});A92.nodeProvider=void 0;var f_1=x3(),rl5=Q_1(),al5=(I={})=>f_1.memoize(f_1.chain(rl5.fromSso(I),async()=>{throw new f_1.TokenProviderError("Could not load token from any providers",!1)}),(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()<300000,(d)=>d.expiration!==void 0);A92.nodeProvider=al5});var Y92=Y((Pq)=>{Object.defineProperty(Pq,"__esModule",{value:!0});var gr=x1();gr.__exportStar(Dr(),Pq);gr.__exportStar(Q_1(),Pq);gr.__exportStar(B92(),Pq);gr.__exportStar(X92(),Pq)});var F92=Y((D92)=>{Object.defineProperty(D92,"__esModule",{value:!0});D92.resolveSSOCredentials=void 0;var _92=I52(),sl5=Y92(),uP=x3(),ol5=rC(),TP=!1,el5=async({ssoStartUrl:I,ssoSession:d,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,profile:w})=>{let B,A="To refresh this SSO session run aws sso login with the corresponding profile.";if(d)try{let Q=await sl5.fromSso({profile:w})();B={accessToken:Q.token,expiresAt:new Date(Q.expiration).toISOString()}}catch(Q){throw new uP.CredentialsProviderError(Q.message,TP)}else try{B=await ol5.getSSOTokenFromFile(I)}catch(Q){throw new uP.CredentialsProviderError("The SSO session associated with this profile is invalid. To refresh this SSO session run aws sso login with the corresponding profile.",TP)}if(new Date(B.expiresAt).getTime()-Date.now()<=0)throw new uP.CredentialsProviderError("The SSO session associated with this profile has expired. To refresh this SSO session run aws sso login with the corresponding profile.",TP);let{accessToken:V}=B,X=W||new _92.SSOClient({region:Z}),_;try{_=await X.send(new _92.GetRoleCredentialsCommand({accountId:G,roleName:C,accessToken:V}))}catch(Q){throw uP.CredentialsProviderError.from(Q,TP)}let{roleCredentials:{accessKeyId:F,secretAccessKey:g,sessionToken:J,expiration:K}={}}=_;if(!F||!g||!J||!K)throw new uP.CredentialsProviderError("SSO returns an invalid temporary credential.",TP);return{accessKeyId:F,secretAccessKey:g,sessionToken:J,expiration:new Date(K)}};D92.resolveSSOCredentials=el5});var q_1=Y((g92)=>{Object.defineProperty(g92,"__esModule",{value:!0});g92.validateSsoProfile=void 0;var tl5=x3(),Ib5=(I)=>{let{sso_start_url:d,sso_account_id:G,sso_region:Z,sso_role_name:C}=I;if(!d||!G||!Z||!C)throw new tl5.CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", "sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(I).join(", ")} +Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`,!1);return I};g92.validateSsoProfile=Ib5});var Q92=Y((N92)=>{Object.defineProperty(N92,"__esModule",{value:!0});N92.fromSSO=void 0;var OP=x3(),R_1=rC(),db5=mY1(),K92=F92(),Gb5=q_1(),Zb5=(I={})=>async()=>{let{ssoStartUrl:d,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,ssoSession:w}=I,B=R_1.getProfileName(I);if(!d&&!G&&!Z&&!C&&!w){let V=(await R_1.parseKnownFiles(I))[B];if(!V)throw new OP.CredentialsProviderError(`Profile ${B} was not found.`);if(!db5.isSsoProfile(V))throw new OP.CredentialsProviderError(`Profile ${B} is not configured with SSO credentials.`);if(V===null||V===void 0?void 0:V.sso_session){let Q=(await R_1.loadSsoSessionData(I))[V.sso_session],E=` configurations in profile ${B} and sso-session ${V.sso_session}`;if(Z&&Z!==Q.sso_region)throw new OP.CredentialsProviderError("Conflicting SSO region"+E,!1);if(d&&d!==Q.sso_start_url)throw new OP.CredentialsProviderError("Conflicting SSO start_url"+E,!1);V.sso_region=Q.sso_region,V.sso_start_url=Q.sso_start_url}let{sso_start_url:X,sso_account_id:_,sso_region:F,sso_role_name:g,sso_session:J}=Gb5.validateSsoProfile(V);return K92.resolveSSOCredentials({ssoStartUrl:X,ssoSession:J,ssoAccountId:_,ssoRegion:F,ssoRoleName:g,ssoClient:W,profile:B})}else if(!d||!G||!Z||!C)throw new OP.CredentialsProviderError('Incomplete configuration. The fromSSO() argument hash must include "ssoStartUrl", "ssoAccountId", "ssoRegion", "ssoRoleName"');else return K92.resolveSSOCredentials({ssoStartUrl:d,ssoSession:w,ssoAccountId:G,ssoRegion:Z,ssoRoleName:C,ssoClient:W,profile:B})};N92.fromSSO=Zb5});var q92=Y((f92)=>{Object.defineProperty(f92,"__esModule",{value:!0})});var Kr=Y(($q)=>{Object.defineProperty($q,"__esModule",{value:!0});var Jr=x1();Jr.__exportStar(Q92(),$q);Jr.__exportStar(mY1(),$q);Jr.__exportStar(q92(),$q);Jr.__exportStar(q_1(),$q)});var v92=Y((U_1)=>{Object.defineProperty(U_1,"__esModule",{value:!0});U_1.resolveSsoCredentials=U_1.isSsoProfile=void 0;var R92=Kr(),Cb5=Kr();Object.defineProperty(U_1,"isSsoProfile",{enumerable:!0,get:function(){return Cb5.isSsoProfile}});var Wb5=(I)=>{let{sso_start_url:d,sso_account_id:G,sso_session:Z,sso_region:C,sso_role_name:W}=R92.validateSsoProfile(I);return R92.fromSSO({ssoStartUrl:d,ssoAccountId:G,ssoSession:Z,ssoRegion:C,ssoRoleName:W})()};U_1.resolveSsoCredentials=Wb5});var S92=Y((E92)=>{Object.defineProperty(E92,"__esModule",{value:!0});E92.resolveStaticCredentials=E92.isStaticCredsProfile=void 0;var wb5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.aws_access_key_id==="string"&&typeof I.aws_secret_access_key==="string"&&["undefined","string"].indexOf(typeof I.aws_session_token)>-1;E92.isStaticCredsProfile=wb5;var Bb5=(I)=>Promise.resolve({accessKeyId:I.aws_access_key_id,secretAccessKey:I.aws_secret_access_key,sessionToken:I.aws_session_token});E92.resolveStaticCredentials=Bb5});var v_1=Y((L92)=>{Object.defineProperty(L92,"__esModule",{value:!0});L92.fromWebToken=void 0;var Vb5=x3(),Xb5=(I)=>()=>{let{roleArn:d,roleSessionName:G,webIdentityToken:Z,providerId:C,policyArns:W,policy:w,durationSeconds:B,roleAssumerWithWebIdentity:A}=I;if(!A)throw new Vb5.CredentialsProviderError(`Role Arn '${d}' needs to be assumed with web identity, but no role assumption callback was provided.`,!1);return A({RoleArn:d,RoleSessionName:G!==null&&G!==void 0?G:`aws-sdk-js-session-${Date.now()}`,WebIdentityToken:Z,ProviderId:C,PolicyArns:W,Policy:w,DurationSeconds:B})};L92.fromWebToken=Xb5});var u92=Y((P92)=>{Object.defineProperty(P92,"__esModule",{value:!0});P92.fromTokenFile=void 0;var Yb5=x3(),_b5=B1("fs"),Db5=v_1(),Hb5="AWS_WEB_IDENTITY_TOKEN_FILE",Fb5="AWS_ROLE_ARN",gb5="AWS_ROLE_SESSION_NAME",Jb5=(I={})=>async()=>{var d,G,Z;let C=(d=I===null||I===void 0?void 0:I.webIdentityTokenFile)!==null&&d!==void 0?d:process.env[Hb5],W=(G=I===null||I===void 0?void 0:I.roleArn)!==null&&G!==void 0?G:process.env[Fb5],w=(Z=I===null||I===void 0?void 0:I.roleSessionName)!==null&&Z!==void 0?Z:process.env[gb5];if(!C||!W)throw new Yb5.CredentialsProviderError("Web identity configuration not specified");return Db5.fromWebToken({...I,webIdentityToken:_b5.readFileSync(C,{encoding:"ascii"}),roleArn:W,roleSessionName:w})()};P92.fromTokenFile=Jb5});var E_1=Y((Nr)=>{Object.defineProperty(Nr,"__esModule",{value:!0});var T92=x1();T92.__exportStar(u92(),Nr);T92.__exportStar(v_1(),Nr)});var l92=Y((O92)=>{Object.defineProperty(O92,"__esModule",{value:!0});O92.resolveWebIdentityCredentials=O92.isWebIdentityProfile=void 0;var Kb5=E_1(),Nb5=(I)=>Boolean(I)&&typeof I==="object"&&typeof I.web_identity_token_file==="string"&&typeof I.role_arn==="string"&&["undefined","string"].indexOf(typeof I.role_session_name)>-1;O92.isWebIdentityProfile=Nb5;var zb5=async(I,d)=>Kb5.fromTokenFile({webIdentityTokenFile:I.web_identity_token_file,roleArn:I.role_arn,roleSessionName:I.role_session_name,roleAssumerWithWebIdentity:d.roleAssumerWithWebIdentity})();O92.resolveWebIdentityCredentials=zb5});var $Y1=Y((x92)=>{Object.defineProperty(x92,"__esModule",{value:!0});x92.resolveProfileData=void 0;var fb5=x3(),b92=R02(),h92=m02(),j92=v92(),zr=S92(),k92=l92(),qb5=async(I,d,G,Z={})=>{let C=d[I];if(Object.keys(Z).length>0&&zr.isStaticCredsProfile(C))return zr.resolveStaticCredentials(C);if(b92.isAssumeRoleProfile(C))return b92.resolveAssumeRoleCredentials(I,d,G,Z);if(zr.isStaticCredsProfile(C))return zr.resolveStaticCredentials(C);if(k92.isWebIdentityProfile(C))return k92.resolveWebIdentityCredentials(C,G);if(h92.isProcessProfile(C))return h92.resolveProcessCredentials(G,I);if(j92.isSsoProfile(C))return j92.resolveSsoCredentials(C);throw new fb5.CredentialsProviderError(`Profile ${I} could not be found or parsed in shared credentials file.`)};x92.resolveProfileData=qb5});var r92=Y((i92)=>{Object.defineProperty(i92,"__esModule",{value:!0});i92.fromIni=void 0;var p92=rC(),Rb5=$Y1(),Ub5=(I={})=>async()=>{let d=await p92.parseKnownFiles(I);return Rb5.resolveProfileData(p92.getProfileName(I),d,I)};i92.fromIni=Ub5});var a92=Y((M_1)=>{Object.defineProperty(M_1,"__esModule",{value:!0});var vb5=x1();vb5.__exportStar(r92(),M_1)});var t92=Y((s92)=>{Object.defineProperty(s92,"__esModule",{value:!0});s92.remoteProvider=s92.ENV_IMDS_DISABLED=void 0;var Qr=kn(),Eb5=x3();s92.ENV_IMDS_DISABLED="AWS_EC2_METADATA_DISABLED";var Mb5=(I)=>{if(process.env[Qr.ENV_CMDS_RELATIVE_URI]||process.env[Qr.ENV_CMDS_FULL_URI])return Qr.fromContainerMetadata(I);if(process.env[s92.ENV_IMDS_DISABLED])return async()=>{throw new Eb5.CredentialsProviderError("EC2 Instance Metadata Service access disabled")};return Qr.fromInstanceMetadata(I)};s92.remoteProvider=Mb5});var G32=Y((I32)=>{Object.defineProperty(I32,"__esModule",{value:!0});I32.defaultProvider=void 0;var Sb5=vY1(),Lb5=a92(),yb5=OY1(),Pb5=Kr(),$b5=E_1(),S_1=x3(),ub5=rC(),Tb5=t92(),Ob5=(I={})=>S_1.memoize(S_1.chain(...I.profile||process.env[ub5.ENV_PROFILE]?[]:[Sb5.fromEnv()],Pb5.fromSSO(I),Lb5.fromIni(I),yb5.fromProcess(I),$b5.fromTokenFile(I),Tb5.remoteProvider(I),async()=>{throw new S_1.CredentialsProviderError("Could not load credentials from any providers",!1)}),(d)=>d.expiration!==void 0&&d.expiration.getTime()-Date.now()<300000,(d)=>d.expiration!==void 0);I32.defaultProvider=Ob5});var y_1=Y((L_1)=>{Object.defineProperty(L_1,"__esModule",{value:!0});var mb5=x1();mb5.__exportStar(G32(),L_1)});var v32=Y((R32)=>{Object.defineProperty(R32,"__esModule",{value:!0});R32.ruleSet=void 0;var H32="required",y4="type",l5="fn",b5="argv",hD="ref",Z32=!1,lb5=!0,EJ="booleanEquals",gB="tree",d7="stringEquals",F32="sigv4",g32="sts",J32="us-east-1",B3="endpoint",C32="https://sts.{Region}.{PartitionResult#dnsSuffix}",uq="error",$_1="getAttr",W32={[H32]:!1,[y4]:"String"},P_1={[H32]:!0,default:!1,[y4]:"Boolean"},K32={[hD]:"Endpoint"},w32={[l5]:"isSet",[b5]:[{[hD]:"Region"}]},G7={[hD]:"Region"},B32={[l5]:"aws.partition",[b5]:[G7],assign:"PartitionResult"},N32={[hD]:"UseFIPS"},z32={[hD]:"UseDualStack"},l7={url:"https://sts.amazonaws.com",properties:{authSchemes:[{name:F32,signingName:g32,signingRegion:J32}]},headers:{}},WG={},A32={conditions:[{[l5]:d7,[b5]:[G7,"aws-global"]}],[B3]:l7,[y4]:B3},Q32={[l5]:EJ,[b5]:[N32,!0]},f32={[l5]:EJ,[b5]:[z32,!0]},V32={[l5]:EJ,[b5]:[!0,{[l5]:$_1,[b5]:[{[hD]:"PartitionResult"},"supportsFIPS"]}]},q32={[hD]:"PartitionResult"},X32={[l5]:EJ,[b5]:[!0,{[l5]:$_1,[b5]:[q32,"supportsDualStack"]}]},Y32=[{[l5]:"isSet",[b5]:[K32]}],_32=[Q32],D32=[f32],bb5={version:"1.0",parameters:{Region:W32,UseDualStack:P_1,UseFIPS:P_1,Endpoint:W32,UseGlobalEndpoint:P_1},rules:[{conditions:[{[l5]:EJ,[b5]:[{[hD]:"UseGlobalEndpoint"},lb5]},{[l5]:"not",[b5]:Y32},w32,B32,{[l5]:EJ,[b5]:[N32,Z32]},{[l5]:EJ,[b5]:[z32,Z32]}],[y4]:gB,rules:[{conditions:[{[l5]:d7,[b5]:[G7,"ap-northeast-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"ap-south-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"ap-southeast-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"ap-southeast-2"]}],endpoint:l7,[y4]:B3},A32,{conditions:[{[l5]:d7,[b5]:[G7,"ca-central-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"eu-central-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"eu-north-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"eu-west-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"eu-west-2"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"eu-west-3"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"sa-east-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,J32]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"us-east-2"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"us-west-1"]}],endpoint:l7,[y4]:B3},{conditions:[{[l5]:d7,[b5]:[G7,"us-west-2"]}],endpoint:l7,[y4]:B3},{endpoint:{url:C32,properties:{authSchemes:[{name:F32,signingName:g32,signingRegion:"{Region}"}]},headers:WG},[y4]:B3}]},{conditions:Y32,[y4]:gB,rules:[{conditions:_32,error:"Invalid Configuration: FIPS and custom endpoint are not supported",[y4]:uq},{conditions:D32,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",[y4]:uq},{endpoint:{url:K32,properties:WG,headers:WG},[y4]:B3}]},{conditions:[w32],[y4]:gB,rules:[{conditions:[B32],[y4]:gB,rules:[{conditions:[Q32,f32],[y4]:gB,rules:[{conditions:[V32,X32],[y4]:gB,rules:[{endpoint:{url:"https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:WG,headers:WG},[y4]:B3}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",[y4]:uq}]},{conditions:_32,[y4]:gB,rules:[{conditions:[V32],[y4]:gB,rules:[{conditions:[{[l5]:d7,[b5]:["aws-us-gov",{[l5]:$_1,[b5]:[q32,"name"]}]}],endpoint:{url:"https://sts.{Region}.amazonaws.com",properties:WG,headers:WG},[y4]:B3},{endpoint:{url:"https://sts-fips.{Region}.{PartitionResult#dnsSuffix}",properties:WG,headers:WG},[y4]:B3}]},{error:"FIPS is enabled but this partition does not support FIPS",[y4]:uq}]},{conditions:D32,[y4]:gB,rules:[{conditions:[X32],[y4]:gB,rules:[{endpoint:{url:"https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:WG,headers:WG},[y4]:B3}]},{error:"DualStack is enabled but this partition does not support DualStack",[y4]:uq}]},A32,{endpoint:{url:C32,properties:WG,headers:WG},[y4]:B3}]}]},{error:"Invalid Configuration: Missing Region",[y4]:uq}]};R32.ruleSet=bb5});var S32=Y((E32)=>{Object.defineProperty(E32,"__esModule",{value:!0});E32.defaultEndpointResolver=void 0;var hb5=zq(),jb5=v32(),kb5=(I,d={})=>{return hb5.resolveEndpoint(jb5.ruleSet,{endpointParams:I,logger:d.logger})};E32.defaultEndpointResolver=kb5});var u32=Y((P32)=>{Object.defineProperty(P32,"__esModule",{value:!0});P32.getRuntimeConfig=void 0;var xb5=h2(),cb5=qJ(),L32=fD(),y32=SZ(),pb5=S32(),ib5=(I)=>({apiVersion:"2011-06-15",base64Decoder:I?.base64Decoder??L32.fromBase64,base64Encoder:I?.base64Encoder??L32.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??pb5.defaultEndpointResolver,extensions:I?.extensions??[],logger:I?.logger??new xb5.NoOpLogger,serviceId:I?.serviceId??"STS",urlParser:I?.urlParser??cb5.parseUrl,utf8Decoder:I?.utf8Decoder??y32.fromUtf8,utf8Encoder:I?.utf8Encoder??y32.toUtf8});P32.getRuntimeConfig=ib5});var b32=Y((m32)=>{Object.defineProperty(m32,"__esModule",{value:!0});m32.getRuntimeConfig=void 0;var nb5=x1(),rb5=nb5.__importDefault(et0()),ab5=RY1(),sb5=y_1(),ob5=zP(),fr=_B(),eb5=QP(),T32=bV(),mP=mV(),O32=Yq(),tb5=fP(),Ih5=fq(),dh5=u32(),Gh5=h2(),Zh5=RP(),Ch5=h2(),Wh5=(I)=>{Ch5.emitWarningIfUnsupportedVersion(process.version);let d=Zh5.resolveDefaultsModeConfig(I),G=()=>d().then(Gh5.loadConfigsForDefaultMode),Z=dh5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??tb5.calculateBodyLength,credentialDefaultProvider:I?.credentialDefaultProvider??ab5.decorateDefaultCredentialProvider(sb5.defaultProvider),defaultUserAgentProvider:I?.defaultUserAgentProvider??ob5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:rb5.default.version}),maxAttempts:I?.maxAttempts??mP.loadConfig(T32.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??mP.loadConfig(fr.NODE_REGION_CONFIG_OPTIONS,fr.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new O32.NodeHttpHandler(G),retryMode:I?.retryMode??mP.loadConfig({...T32.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||Ih5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??eb5.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??O32.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??mP.loadConfig(fr.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??mP.loadConfig(fr.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};m32.getRuntimeConfig=Wh5});var p32=Y((x32)=>{Object.defineProperty(x32,"__esModule",{value:!0});x32.resolveRuntimeExtensions=void 0;var h32=an(),j32=t8(),k32=h2(),u_1=(I)=>I,wh5=(I,d)=>{let G={...u_1(h32.getAwsRegionExtensionConfiguration(I)),...u_1(k32.getDefaultExtensionConfiguration(I)),...u_1(j32.getHttpHandlerExtensionConfiguration(I))};return d.forEach((Z)=>Z.configure(G)),{...I,...h32.resolveAwsRegionExtensionConfiguration(G),...k32.resolveDefaultRuntimeConfig(G),...j32.resolveHttpHandlerRuntimeConfig(G)}};x32.resolveRuntimeExtensions=wh5});var qr=Y((O_1)=>{Object.defineProperty(O_1,"__esModule",{value:!0});O_1.STSClient=O_1.__Client=void 0;var i32=ey(),Bh5=ty(),Ah5=IP(),Vh5=rt0(),n32=wP(),Xh5=_B(),Yh5=BP(),_h5=c3(),r32=bV(),a32=h2();Object.defineProperty(O_1,"__Client",{enumerable:!0,get:function(){return a32.Client}});var Dh5=ot0(),Hh5=b32(),Fh5=p32();class T_1 extends a32.Client{constructor(...[I]){let d=Hh5.getRuntimeConfig(I||{}),G=Dh5.resolveClientEndpointParameters(d),Z=Xh5.resolveRegionConfig(G),C=_h5.resolveEndpointConfig(Z),W=r32.resolveRetryConfig(C),w=i32.resolveHostHeaderConfig(W),B=Vh5.resolveStsAuthConfig(w,{stsClientCtor:T_1}),A=n32.resolveUserAgentConfig(B),V=Fh5.resolveRuntimeExtensions(A,I?.extensions||[]);super(V);this.config=V,this.middlewareStack.use(r32.getRetryPlugin(this.config)),this.middlewareStack.use(Yh5.getContentLengthPlugin(this.config)),this.middlewareStack.use(i32.getHostHeaderPlugin(this.config)),this.middlewareStack.use(Bh5.getLoggerPlugin(this.config)),this.middlewareStack.use(Ah5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(n32.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}O_1.STSClient=T_1});var b_1=Y((l_1)=>{Object.defineProperty(l_1,"__esModule",{value:!0});l_1.AssumeRoleWithSAMLCommand=l_1.$Command=void 0;var gh5=c3(),Jh5=n6(),t32=h2();Object.defineProperty(l_1,"$Command",{enumerable:!0,get:function(){return t32.Command}});var Kh5=k3(),o32=SD(),e32=jV();class m_1 extends t32.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Jh5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(gh5.getEndpointPlugin(d,m_1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"AssumeRoleWithSAMLCommand",inputFilterSensitiveLog:o32.AssumeRoleWithSAMLRequestFilterSensitiveLog,outputFilterSensitiveLog:o32.AssumeRoleWithSAMLResponseFilterSensitiveLog,[Kh5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"AssumeRoleWithSAML"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return e32.se_AssumeRoleWithSAMLCommand(I,d)}deserialize(I,d){return e32.de_AssumeRoleWithSAMLCommand(I,d)}}l_1.AssumeRoleWithSAMLCommand=m_1});var k_1=Y((j_1)=>{Object.defineProperty(j_1,"__esModule",{value:!0});j_1.DecodeAuthorizationMessageCommand=j_1.$Command=void 0;var Nh5=OV(),zh5=c3(),Qh5=n6(),G62=h2();Object.defineProperty(j_1,"$Command",{enumerable:!0,get:function(){return G62.Command}});var fh5=k3(),d62=jV();class h_1 extends G62.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Qh5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(zh5.getEndpointPlugin(d,h_1.getEndpointParameterInstructions())),this.middlewareStack.use(Nh5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"DecodeAuthorizationMessageCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V,[fh5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"DecodeAuthorizationMessage"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return d62.se_DecodeAuthorizationMessageCommand(I,d)}deserialize(I,d){return d62.de_DecodeAuthorizationMessageCommand(I,d)}}j_1.DecodeAuthorizationMessageCommand=h_1});var p_1=Y((c_1)=>{Object.defineProperty(c_1,"__esModule",{value:!0});c_1.GetAccessKeyInfoCommand=c_1.$Command=void 0;var qh5=OV(),Rh5=c3(),Uh5=n6(),W62=h2();Object.defineProperty(c_1,"$Command",{enumerable:!0,get:function(){return W62.Command}});var vh5=k3(),C62=jV();class x_1 extends W62.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Uh5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(Rh5.getEndpointPlugin(d,x_1.getEndpointParameterInstructions())),this.middlewareStack.use(qh5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetAccessKeyInfoCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V,[vh5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"GetAccessKeyInfo"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return C62.se_GetAccessKeyInfoCommand(I,d)}deserialize(I,d){return C62.de_GetAccessKeyInfoCommand(I,d)}}c_1.GetAccessKeyInfoCommand=x_1});var r_1=Y((n_1)=>{Object.defineProperty(n_1,"__esModule",{value:!0});n_1.GetCallerIdentityCommand=n_1.$Command=void 0;var Eh5=OV(),Mh5=c3(),Sh5=n6(),A62=h2();Object.defineProperty(n_1,"$Command",{enumerable:!0,get:function(){return A62.Command}});var Lh5=k3(),B62=jV();class i_1 extends A62.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Sh5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(Mh5.getEndpointPlugin(d,i_1.getEndpointParameterInstructions())),this.middlewareStack.use(Eh5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetCallerIdentityCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:(V)=>V,[Lh5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"GetCallerIdentity"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return B62.se_GetCallerIdentityCommand(I,d)}deserialize(I,d){return B62.de_GetCallerIdentityCommand(I,d)}}n_1.GetCallerIdentityCommand=i_1});var o_1=Y((s_1)=>{Object.defineProperty(s_1,"__esModule",{value:!0});s_1.GetFederationTokenCommand=s_1.$Command=void 0;var yh5=OV(),Ph5=c3(),$h5=n6(),Y62=h2();Object.defineProperty(s_1,"$Command",{enumerable:!0,get:function(){return Y62.Command}});var uh5=k3(),Th5=SD(),X62=jV();class a_1 extends Y62.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use($h5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(Ph5.getEndpointPlugin(d,a_1.getEndpointParameterInstructions())),this.middlewareStack.use(yh5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetFederationTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:Th5.GetFederationTokenResponseFilterSensitiveLog,[uh5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"GetFederationToken"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return X62.se_GetFederationTokenCommand(I,d)}deserialize(I,d){return X62.de_GetFederationTokenCommand(I,d)}}s_1.GetFederationTokenCommand=a_1});var ID1=Y((t_1)=>{Object.defineProperty(t_1,"__esModule",{value:!0});t_1.GetSessionTokenCommand=t_1.$Command=void 0;var Oh5=OV(),mh5=c3(),lh5=n6(),H62=h2();Object.defineProperty(t_1,"$Command",{enumerable:!0,get:function(){return H62.Command}});var bh5=k3(),hh5=SD(),D62=jV();class e_1 extends H62.Command{static getEndpointParameterInstructions(){return{UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(lh5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(mh5.getEndpointPlugin(d,e_1.getEndpointParameterInstructions())),this.middlewareStack.use(Oh5.getAwsAuthPlugin(d));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"STSClient",commandName:"GetSessionTokenCommand",inputFilterSensitiveLog:(V)=>V,outputFilterSensitiveLog:hh5.GetSessionTokenResponseFilterSensitiveLog,[bh5.SMITHY_CONTEXT_KEY]:{service:"AWSSecurityTokenServiceV20110615",operation:"GetSessionToken"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return D62.se_GetSessionTokenCommand(I,d)}deserialize(I,d){return D62.de_GetSessionTokenCommand(I,d)}}t_1.GetSessionTokenCommand=e_1});var K62=Y((g62)=>{Object.defineProperty(g62,"__esModule",{value:!0});g62.STS=void 0;var jh5=h2(),kh5=mn(),xh5=b_1(),ch5=ln(),ph5=k_1(),ih5=p_1(),nh5=r_1(),rh5=o_1(),ah5=ID1(),sh5=qr(),oh5={AssumeRoleCommand:kh5.AssumeRoleCommand,AssumeRoleWithSAMLCommand:xh5.AssumeRoleWithSAMLCommand,AssumeRoleWithWebIdentityCommand:ch5.AssumeRoleWithWebIdentityCommand,DecodeAuthorizationMessageCommand:ph5.DecodeAuthorizationMessageCommand,GetAccessKeyInfoCommand:ih5.GetAccessKeyInfoCommand,GetCallerIdentityCommand:nh5.GetCallerIdentityCommand,GetFederationTokenCommand:rh5.GetFederationTokenCommand,GetSessionTokenCommand:ah5.GetSessionTokenCommand};class dD1 extends sh5.STSClient{}g62.STS=dD1;jh5.createAggregatedClient(oh5,dD1)});var N62=Y((JB)=>{Object.defineProperty(JB,"__esModule",{value:!0});var jD=x1();jD.__exportStar(mn(),JB);jD.__exportStar(b_1(),JB);jD.__exportStar(ln(),JB);jD.__exportStar(k_1(),JB);jD.__exportStar(p_1(),JB);jD.__exportStar(r_1(),JB);jD.__exportStar(o_1(),JB);jD.__exportStar(ID1(),JB)});var z62=Y((GD1)=>{Object.defineProperty(GD1,"__esModule",{value:!0});var eh5=x1();eh5.__exportStar(SD(),GD1)});var M62=Y((R62)=>{Object.defineProperty(R62,"__esModule",{value:!0});R62.decorateDefaultCredentialProvider=R62.getDefaultRoleAssumerWithWebIdentity=R62.getDefaultRoleAssumer=void 0;var Q62=RY1(),f62=qr(),q62=(I,d)=>{if(!d)return I;else return class G extends I{constructor(Z){super(Z);for(let C of d)this.middlewareStack.use(C)}}},th5=(I={},d)=>Q62.getDefaultRoleAssumer(I,q62(f62.STSClient,d));R62.getDefaultRoleAssumer=th5;var Ij5=(I={},d)=>Q62.getDefaultRoleAssumerWithWebIdentity(I,q62(f62.STSClient,d));R62.getDefaultRoleAssumerWithWebIdentity=Ij5;var dj5=(I)=>(d)=>I({roleAssumer:R62.getDefaultRoleAssumer(d),roleAssumerWithWebIdentity:R62.getDefaultRoleAssumerWithWebIdentity(d),...d});R62.decorateDefaultCredentialProvider=dj5});var S62=Y((kD)=>{Object.defineProperty(kD,"__esModule",{value:!0});kD.STSServiceException=void 0;var lP=x1();lP.__exportStar(qr(),kD);lP.__exportStar(K62(),kD);lP.__exportStar(N62(),kD);lP.__exportStar(z62(),kD);lP.__exportStar(M62(),kD);var Gj5=Pn();Object.defineProperty(kD,"STSServiceException",{enumerable:!0,get:function(){return Gj5.STSServiceException}})});var c62=Y((k62)=>{Object.defineProperty(k62,"__esModule",{value:!0});k62.ruleSet=void 0;var b62="required",pV="fn",iV="argv",Oq="ref",L62="isSet",XI="tree",Tq="error",bP="endpoint",ZD1="PartitionResult",y62={[b62]:!1,type:"String"},P62={[b62]:!0,default:!1,type:"Boolean"},$62={[Oq]:"Endpoint"},h62={[pV]:"booleanEquals",[iV]:[{[Oq]:"UseFIPS"},!0]},j62={[pV]:"booleanEquals",[iV]:[{[Oq]:"UseDualStack"},!0]},KB={},u62={[pV]:"booleanEquals",[iV]:[!0,{[pV]:"getAttr",[iV]:[{[Oq]:ZD1},"supportsFIPS"]}]},T62={[pV]:"booleanEquals",[iV]:[!0,{[pV]:"getAttr",[iV]:[{[Oq]:ZD1},"supportsDualStack"]}]},O62=[h62],m62=[j62],l62=[{[Oq]:"Region"}],Cj5={version:"1.0",parameters:{Region:y62,UseDualStack:P62,UseFIPS:P62,Endpoint:y62},rules:[{conditions:[{[pV]:L62,[iV]:[$62]}],type:XI,rules:[{conditions:O62,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:Tq},{type:XI,rules:[{conditions:m62,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:Tq},{endpoint:{url:$62,properties:KB,headers:KB},type:bP}]}]},{type:XI,rules:[{conditions:[{[pV]:L62,[iV]:l62}],type:XI,rules:[{conditions:[{[pV]:"aws.partition",[iV]:l62,assign:ZD1}],type:XI,rules:[{conditions:[h62,j62],type:XI,rules:[{conditions:[u62,T62],type:XI,rules:[{type:XI,rules:[{endpoint:{url:"https://bedrock-runtime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:KB,headers:KB},type:bP}]}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:Tq}]},{conditions:O62,type:XI,rules:[{conditions:[u62],type:XI,rules:[{type:XI,rules:[{endpoint:{url:"https://bedrock-runtime-fips.{Region}.{PartitionResult#dnsSuffix}",properties:KB,headers:KB},type:bP}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:Tq}]},{conditions:m62,type:XI,rules:[{conditions:[T62],type:XI,rules:[{type:XI,rules:[{endpoint:{url:"https://bedrock-runtime.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:KB,headers:KB},type:bP}]}]},{error:"DualStack is enabled but this partition does not support DualStack",type:Tq}]},{type:XI,rules:[{endpoint:{url:"https://bedrock-runtime.{Region}.{PartitionResult#dnsSuffix}",properties:KB,headers:KB},type:bP}]}]}]},{error:"Invalid Configuration: Missing Region",type:Tq}]}]};k62.ruleSet=Cj5});var n62=Y((p62)=>{Object.defineProperty(p62,"__esModule",{value:!0});p62.defaultEndpointResolver=void 0;var Wj5=zq(),wj5=c62(),Bj5=(I,d={})=>{return Wj5.resolveEndpoint(wj5.ruleSet,{endpointParams:I,logger:d.logger})};p62.defaultEndpointResolver=Bj5});var e62=Y((s62)=>{Object.defineProperty(s62,"__esModule",{value:!0});s62.getRuntimeConfig=void 0;var Aj5=h2(),Vj5=qJ(),r62=fD(),a62=SZ(),Xj5=n62(),Yj5=(I)=>({apiVersion:"2023-09-30",base64Decoder:I?.base64Decoder??r62.fromBase64,base64Encoder:I?.base64Encoder??r62.toBase64,disableHostPrefix:I?.disableHostPrefix??!1,endpointProvider:I?.endpointProvider??Xj5.defaultEndpointResolver,extensions:I?.extensions??[],logger:I?.logger??new Aj5.NoOpLogger,serviceId:I?.serviceId??"Bedrock Runtime",urlParser:I?.urlParser??Vj5.parseUrl,utf8Decoder:I?.utf8Decoder??a62.fromUtf8,utf8Encoder:I?.utf8Encoder??a62.toUtf8});s62.getRuntimeConfig=Yj5});var Z82=Y((d82)=>{Object.defineProperty(d82,"__esModule",{value:!0});d82.getRuntimeConfig=void 0;var _j5=x1(),Dj5=_j5.__importDefault(pt0()),Hj5=S62(),Fj5=y_1(),gj5=zP(),Rr=_B(),Jj5=EV1(),Kj5=QP(),t62=bV(),hP=mV(),I82=Yq(),Nj5=fP(),zj5=fq(),Qj5=e62(),fj5=h2(),qj5=RP(),Rj5=h2(),Uj5=(I)=>{Rj5.emitWarningIfUnsupportedVersion(process.version);let d=qj5.resolveDefaultsModeConfig(I),G=()=>d().then(fj5.loadConfigsForDefaultMode),Z=Qj5.getRuntimeConfig(I);return{...Z,...I,runtime:"node",defaultsMode:d,bodyLengthChecker:I?.bodyLengthChecker??Nj5.calculateBodyLength,credentialDefaultProvider:I?.credentialDefaultProvider??Hj5.decorateDefaultCredentialProvider(Fj5.defaultProvider),defaultUserAgentProvider:I?.defaultUserAgentProvider??gj5.defaultUserAgent({serviceId:Z.serviceId,clientVersion:Dj5.default.version}),eventStreamSerdeProvider:I?.eventStreamSerdeProvider??Jj5.eventStreamSerdeProvider,maxAttempts:I?.maxAttempts??hP.loadConfig(t62.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),region:I?.region??hP.loadConfig(Rr.NODE_REGION_CONFIG_OPTIONS,Rr.NODE_REGION_CONFIG_FILE_OPTIONS),requestHandler:I?.requestHandler??new I82.NodeHttpHandler(G),retryMode:I?.retryMode??hP.loadConfig({...t62.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await G()).retryMode||zj5.DEFAULT_RETRY_MODE}),sha256:I?.sha256??Kj5.Hash.bind(null,"sha256"),streamCollector:I?.streamCollector??I82.streamCollector,useDualstackEndpoint:I?.useDualstackEndpoint??hP.loadConfig(Rr.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),useFipsEndpoint:I?.useFipsEndpoint??hP.loadConfig(Rr.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS)}};d82.getRuntimeConfig=Uj5});var V82=Y((B82)=>{Object.defineProperty(B82,"__esModule",{value:!0});B82.resolveRuntimeExtensions=void 0;var C82=an(),W82=t8(),w82=h2(),CD1=(I)=>I,vj5=(I,d)=>{let G={...CD1(C82.getAwsRegionExtensionConfiguration(I)),...CD1(w82.getDefaultExtensionConfiguration(I)),...CD1(W82.getHttpHandlerExtensionConfiguration(I))};return d.forEach((Z)=>Z.configure(G)),{...I,...C82.resolveAwsRegionExtensionConfiguration(G),...w82.resolveDefaultRuntimeConfig(G),...W82.resolveHttpHandlerRuntimeConfig(G)}};B82.resolveRuntimeExtensions=vj5});var wD1=Y((WD1)=>{Object.defineProperty(WD1,"__esModule",{value:!0});WD1.BedrockRuntimeClient=WD1.__Client=void 0;var X82=ey(),Ej5=ty(),Mj5=IP(),Y82=OV(),_82=wP(),Sj5=_B(),Lj5=Xo0(),yj5=BP(),Pj5=c3(),D82=bV(),H82=h2();Object.defineProperty(WD1,"__Client",{enumerable:!0,get:function(){return H82.Client}});var $j5=ct0(),uj5=Z82(),Tj5=V82();class F82 extends H82.Client{constructor(...[I]){let d=uj5.getRuntimeConfig(I||{}),G=$j5.resolveClientEndpointParameters(d),Z=Sj5.resolveRegionConfig(G),C=Pj5.resolveEndpointConfig(Z),W=D82.resolveRetryConfig(C),w=X82.resolveHostHeaderConfig(W),B=Y82.resolveAwsAuthConfig(w),A=_82.resolveUserAgentConfig(B),V=Lj5.resolveEventStreamSerdeConfig(A),X=Tj5.resolveRuntimeExtensions(V,I?.extensions||[]);super(X);this.config=X,this.middlewareStack.use(D82.getRetryPlugin(this.config)),this.middlewareStack.use(yj5.getContentLengthPlugin(this.config)),this.middlewareStack.use(X82.getHostHeaderPlugin(this.config)),this.middlewareStack.use(Ej5.getLoggerPlugin(this.config)),this.middlewareStack.use(Mj5.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(Y82.getAwsAuthPlugin(this.config)),this.middlewareStack.use(_82.getUserAgentPlugin(this.config))}destroy(){super.destroy()}}WD1.BedrockRuntimeClient=F82});var Ur=Y((AD1)=>{Object.defineProperty(AD1,"__esModule",{value:!0});AD1.BedrockRuntimeServiceException=AD1.__ServiceException=void 0;var J82=h2();Object.defineProperty(AD1,"__ServiceException",{enumerable:!0,get:function(){return J82.ServiceException}});class BD1 extends J82.ServiceException{constructor(I){super(I);Object.setPrototypeOf(this,BD1.prototype)}}AD1.BedrockRuntimeServiceException=BD1});var kP=Y((z82)=>{Object.defineProperty(z82,"__esModule",{value:!0});z82.InvokeModelWithResponseStreamResponseFilterSensitiveLog=z82.ResponseStreamFilterSensitiveLog=z82.PayloadPartFilterSensitiveLog=z82.InvokeModelWithResponseStreamRequestFilterSensitiveLog=z82.InvokeModelResponseFilterSensitiveLog=z82.InvokeModelRequestFilterSensitiveLog=z82.ResponseStream=z82.ModelStreamErrorException=z82.ValidationException=z82.ThrottlingException=z82.ServiceQuotaExceededException=z82.ResourceNotFoundException=z82.ModelTimeoutException=z82.ModelNotReadyException=z82.ModelErrorException=z82.InternalServerException=z82.AccessDeniedException=void 0;var jP=h2(),NB=Ur();class VD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"AccessDeniedException",$fault:"client",...I});this.name="AccessDeniedException",this.$fault="client",Object.setPrototypeOf(this,VD1.prototype)}}z82.AccessDeniedException=VD1;class XD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"InternalServerException",$fault:"server",...I});this.name="InternalServerException",this.$fault="server",Object.setPrototypeOf(this,XD1.prototype)}}z82.InternalServerException=XD1;class YD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ModelErrorException",$fault:"client",...I});this.name="ModelErrorException",this.$fault="client",Object.setPrototypeOf(this,YD1.prototype),this.originalStatusCode=I.originalStatusCode,this.resourceName=I.resourceName}}z82.ModelErrorException=YD1;class _D1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ModelNotReadyException",$fault:"client",...I});this.name="ModelNotReadyException",this.$fault="client",Object.setPrototypeOf(this,_D1.prototype)}}z82.ModelNotReadyException=_D1;class DD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ModelTimeoutException",$fault:"client",...I});this.name="ModelTimeoutException",this.$fault="client",Object.setPrototypeOf(this,DD1.prototype)}}z82.ModelTimeoutException=DD1;class HD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ResourceNotFoundException",$fault:"client",...I});this.name="ResourceNotFoundException",this.$fault="client",Object.setPrototypeOf(this,HD1.prototype)}}z82.ResourceNotFoundException=HD1;class FD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ServiceQuotaExceededException",$fault:"client",...I});this.name="ServiceQuotaExceededException",this.$fault="client",Object.setPrototypeOf(this,FD1.prototype)}}z82.ServiceQuotaExceededException=FD1;class gD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ThrottlingException",$fault:"client",...I});this.name="ThrottlingException",this.$fault="client",Object.setPrototypeOf(this,gD1.prototype)}}z82.ThrottlingException=gD1;class JD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ValidationException",$fault:"client",...I});this.name="ValidationException",this.$fault="client",Object.setPrototypeOf(this,JD1.prototype)}}z82.ValidationException=JD1;class KD1 extends NB.BedrockRuntimeServiceException{constructor(I){super({name:"ModelStreamErrorException",$fault:"client",...I});this.name="ModelStreamErrorException",this.$fault="client",Object.setPrototypeOf(this,KD1.prototype),this.originalStatusCode=I.originalStatusCode,this.originalMessage=I.originalMessage}}z82.ModelStreamErrorException=KD1;var Oj5;(function(I){I.visit=(d,G)=>{if(d.chunk!==void 0)return G.chunk(d.chunk);if(d.internalServerException!==void 0)return G.internalServerException(d.internalServerException);if(d.modelStreamErrorException!==void 0)return G.modelStreamErrorException(d.modelStreamErrorException);if(d.validationException!==void 0)return G.validationException(d.validationException);if(d.throttlingException!==void 0)return G.throttlingException(d.throttlingException);if(d.modelTimeoutException!==void 0)return G.modelTimeoutException(d.modelTimeoutException);return G._(d.$unknown[0],d.$unknown[1])}})(Oj5=z82.ResponseStream||(z82.ResponseStream={}));var mj5=(I)=>({...I,...I.body&&{body:jP.SENSITIVE_STRING}});z82.InvokeModelRequestFilterSensitiveLog=mj5;var lj5=(I)=>({...I,...I.body&&{body:jP.SENSITIVE_STRING}});z82.InvokeModelResponseFilterSensitiveLog=lj5;var bj5=(I)=>({...I,...I.body&&{body:jP.SENSITIVE_STRING}});z82.InvokeModelWithResponseStreamRequestFilterSensitiveLog=bj5;var hj5=(I)=>({...I,...I.bytes&&{bytes:jP.SENSITIVE_STRING}});z82.PayloadPartFilterSensitiveLog=hj5;var jj5=(I)=>{if(I.chunk!==void 0)return{chunk:jP.SENSITIVE_STRING};if(I.internalServerException!==void 0)return{internalServerException:I.internalServerException};if(I.modelStreamErrorException!==void 0)return{modelStreamErrorException:I.modelStreamErrorException};if(I.validationException!==void 0)return{validationException:I.validationException};if(I.throttlingException!==void 0)return{throttlingException:I.throttlingException};if(I.modelTimeoutException!==void 0)return{modelTimeoutException:I.modelTimeoutException};if(I.$unknown!==void 0)return{[I.$unknown[0]]:"UNKNOWN"}};z82.ResponseStreamFilterSensitiveLog=jj5;var kj5=(I)=>({...I,...I.body&&{body:"STREAMING_CONTENT"}});z82.InvokeModelWithResponseStreamResponseFilterSensitiveLog=kj5});var qD1=Y(($82)=>{Object.defineProperty($82,"__esModule",{value:!0});$82.de_InvokeModelWithResponseStreamCommand=$82.de_InvokeModelCommand=$82.se_InvokeModelWithResponseStreamCommand=$82.se_InvokeModelCommand=void 0;var f82=t8(),j2=h2(),Ck5=Ur(),zB=kP(),Wk5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=j2.map({},L82,{"content-type":I.contentType||"application/octet-stream",accept:I.accept}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/model/{modelId}/invoke`;B=j2.resolvedPath(B,I,"modelId",()=>I.modelId,"{modelId}",!1);let A;if(I.body!==void 0)A=I.body;return new f82.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};$82.se_InvokeModelCommand=Wk5;var wk5=async(I,d)=>{let{hostname:G,protocol:Z="https",port:C,path:W}=await d.endpoint(),w=j2.map({},L82,{"content-type":I.contentType||"application/octet-stream","x-amzn-bedrock-accept":I.accept}),B=`${W?.endsWith("/")?W.slice(0,-1):W||""}/model/{modelId}/invoke-with-response-stream`;B=j2.resolvedPath(B,I,"modelId",()=>I.modelId,"{modelId}",!1);let A;if(I.body!==void 0)A=I.body;return new f82.HttpRequest({protocol:Z,hostname:G,port:C,method:"POST",headers:w,path:B,body:A})};$82.se_InvokeModelWithResponseStreamCommand=wk5;var Bk5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return Ak5(I,d);let G=j2.map({$metadata:uZ(I),contentType:[,I.headers["content-type"]]}),Z=await j2.collectBody(I.body,d);return G.body=Z,G};$82.de_InvokeModelCommand=Bk5;var Ak5=async(I,d)=>{let G={...I,body:await y82(I.body,d)},Z=P82(I,G.body);switch(Z){case"AccessDeniedException":case"com.amazonaws.bedrockruntime#AccessDeniedException":throw await R82(G,d);case"InternalServerException":case"com.amazonaws.bedrockruntime#InternalServerException":throw await ND1(G,d);case"ModelErrorException":case"com.amazonaws.bedrockruntime#ModelErrorException":throw await U82(G,d);case"ModelNotReadyException":case"com.amazonaws.bedrockruntime#ModelNotReadyException":throw await v82(G,d);case"ModelTimeoutException":case"com.amazonaws.bedrockruntime#ModelTimeoutException":throw await zD1(G,d);case"ResourceNotFoundException":case"com.amazonaws.bedrockruntime#ResourceNotFoundException":throw await M82(G,d);case"ServiceQuotaExceededException":case"com.amazonaws.bedrockruntime#ServiceQuotaExceededException":throw await S82(G,d);case"ThrottlingException":case"com.amazonaws.bedrockruntime#ThrottlingException":throw await QD1(G,d);case"ValidationException":case"com.amazonaws.bedrockruntime#ValidationException":throw await fD1(G,d);default:let C=G.body;return q82({output:I,parsedBody:C,errorCode:Z})}},Vk5=async(I,d)=>{if(I.statusCode!==200&&I.statusCode>=300)return Xk5(I,d);let G=j2.map({$metadata:uZ(I),contentType:[,I.headers["x-amzn-bedrock-content-type"]]}),Z=I.body;return G.body=Yk5(Z,d),G};$82.de_InvokeModelWithResponseStreamCommand=Vk5;var Xk5=async(I,d)=>{let G={...I,body:await y82(I.body,d)},Z=P82(I,G.body);switch(Z){case"AccessDeniedException":case"com.amazonaws.bedrockruntime#AccessDeniedException":throw await R82(G,d);case"InternalServerException":case"com.amazonaws.bedrockruntime#InternalServerException":throw await ND1(G,d);case"ModelErrorException":case"com.amazonaws.bedrockruntime#ModelErrorException":throw await U82(G,d);case"ModelNotReadyException":case"com.amazonaws.bedrockruntime#ModelNotReadyException":throw await v82(G,d);case"ModelStreamErrorException":case"com.amazonaws.bedrockruntime#ModelStreamErrorException":throw await E82(G,d);case"ModelTimeoutException":case"com.amazonaws.bedrockruntime#ModelTimeoutException":throw await zD1(G,d);case"ResourceNotFoundException":case"com.amazonaws.bedrockruntime#ResourceNotFoundException":throw await M82(G,d);case"ServiceQuotaExceededException":case"com.amazonaws.bedrockruntime#ServiceQuotaExceededException":throw await S82(G,d);case"ThrottlingException":case"com.amazonaws.bedrockruntime#ThrottlingException":throw await QD1(G,d);case"ValidationException":case"com.amazonaws.bedrockruntime#ValidationException":throw await fD1(G,d);default:let C=G.body;return q82({output:I,parsedBody:C,errorCode:Z})}},q82=j2.withBaseException(Ck5.BedrockRuntimeServiceException),R82=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.AccessDeniedException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},ND1=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.InternalServerException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},U82=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString,originalStatusCode:j2.expectInt32,resourceName:j2.expectString});Object.assign(G,C);let W=new zB.ModelErrorException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},v82=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.ModelNotReadyException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},E82=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString,originalMessage:j2.expectString,originalStatusCode:j2.expectInt32});Object.assign(G,C);let W=new zB.ModelStreamErrorException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},zD1=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.ModelTimeoutException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},M82=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.ResourceNotFoundException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},S82=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.ServiceQuotaExceededException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},QD1=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.ThrottlingException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},fD1=async(I,d)=>{let G=j2.map({}),Z=I.body,C=j2.take(Z,{message:j2.expectString});Object.assign(G,C);let W=new zB.ValidationException({$metadata:uZ(I),...G});return j2.decorateServiceException(W,I.body)},Yk5=(I,d)=>{return d.eventStreamMarshaller.deserialize(I,async(G)=>{if(G.chunk!=null)return{chunk:await Fk5(G.chunk,d)};if(G.internalServerException!=null)return{internalServerException:await _k5(G.internalServerException,d)};if(G.modelStreamErrorException!=null)return{modelStreamErrorException:await Dk5(G.modelStreamErrorException,d)};if(G.validationException!=null)return{validationException:await Jk5(G.validationException,d)};if(G.throttlingException!=null)return{throttlingException:await gk5(G.throttlingException,d)};if(G.modelTimeoutException!=null)return{modelTimeoutException:await Hk5(G.modelTimeoutException,d)};return{$unknown:I}})},_k5=async(I,d)=>{let G={...I,body:await MJ(I.body,d)};return ND1(G,d)},Dk5=async(I,d)=>{let G={...I,body:await MJ(I.body,d)};return E82(G,d)},Hk5=async(I,d)=>{let G={...I,body:await MJ(I.body,d)};return zD1(G,d)},Fk5=async(I,d)=>{let G={},Z=await MJ(I.body,d);return Object.assign(G,Kk5(Z,d)),G},gk5=async(I,d)=>{let G={...I,body:await MJ(I.body,d)};return QD1(G,d)},Jk5=async(I,d)=>{let G={...I,body:await MJ(I.body,d)};return fD1(G,d)},Kk5=(I,d)=>{return j2.take(I,{bytes:d.base64Decoder})},uZ=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"],extendedRequestId:I.headers["x-amz-id-2"],cfId:I.headers["x-amz-cf-id"]}),Nk5=(I,d)=>j2.collectBody(I,d).then((G)=>d.utf8Encoder(G)),L82=(I)=>I!==void 0&&I!==null&&I!==""&&(!Object.getOwnPropertyNames(I).includes("length")||I.length!=0)&&(!Object.getOwnPropertyNames(I).includes("size")||I.size!=0),MJ=(I,d)=>Nk5(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}}),y82=async(I,d)=>{let G=await MJ(I,d);return G.message=G.message??G.Message,G},P82=(I,d)=>{let G=(W,w)=>Object.keys(W).find((B)=>B.toLowerCase()===w.toLowerCase()),Z=(W)=>{let w=W;if(typeof w==="number")w=w.toString();if(w.indexOf(",")>=0)w=w.split(",")[0];if(w.indexOf(":")>=0)w=w.split(":")[0];if(w.indexOf("#")>=0)w=w.split("#")[1];return w},C=G(I.headers,"x-amzn-errortype");if(C!==void 0)return Z(I.headers[C]);if(d.code!==void 0)return Z(d.code);if(d.__type!==void 0)return Z(d.__type)}});var vD1=Y((UD1)=>{Object.defineProperty(UD1,"__esModule",{value:!0});UD1.InvokeModelCommand=UD1.$Command=void 0;var qk5=c3(),Rk5=n6(),m82=h2();Object.defineProperty(UD1,"$Command",{enumerable:!0,get:function(){return m82.Command}});var Uk5=k3(),T82=kP(),O82=qD1();class RD1 extends m82.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Rk5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(qk5.getEndpointPlugin(d,RD1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"BedrockRuntimeClient",commandName:"InvokeModelCommand",inputFilterSensitiveLog:T82.InvokeModelRequestFilterSensitiveLog,outputFilterSensitiveLog:T82.InvokeModelResponseFilterSensitiveLog,[Uk5.SMITHY_CONTEXT_KEY]:{service:"AmazonBedrockFrontendService",operation:"InvokeModel"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return O82.se_InvokeModelCommand(I,d)}deserialize(I,d){return O82.de_InvokeModelCommand(I,d)}}UD1.InvokeModelCommand=RD1});var SD1=Y((MD1)=>{Object.defineProperty(MD1,"__esModule",{value:!0});MD1.InvokeModelWithResponseStreamCommand=MD1.$Command=void 0;var vk5=c3(),Ek5=n6(),j82=h2();Object.defineProperty(MD1,"$Command",{enumerable:!0,get:function(){return j82.Command}});var Mk5=k3(),b82=kP(),h82=qD1();class ED1 extends j82.Command{static getEndpointParameterInstructions(){return{UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}}}constructor(I){super();this.input=I}resolveMiddleware(I,d,G){this.middlewareStack.use(Ek5.getSerdePlugin(d,this.serialize,this.deserialize)),this.middlewareStack.use(vk5.getEndpointPlugin(d,ED1.getEndpointParameterInstructions()));let Z=I.concat(this.middlewareStack),{logger:C}=d,B={logger:C,clientName:"BedrockRuntimeClient",commandName:"InvokeModelWithResponseStreamCommand",inputFilterSensitiveLog:b82.InvokeModelWithResponseStreamRequestFilterSensitiveLog,outputFilterSensitiveLog:b82.InvokeModelWithResponseStreamResponseFilterSensitiveLog,[Mk5.SMITHY_CONTEXT_KEY]:{service:"AmazonBedrockFrontendService",operation:"InvokeModelWithResponseStream"}},{requestHandler:A}=d;return Z.resolve((V)=>A.handle(V.request,G||{}),B)}serialize(I,d){return h82.se_InvokeModelWithResponseStreamCommand(I,d)}deserialize(I,d){return h82.de_InvokeModelWithResponseStreamCommand(I,d)}}MD1.InvokeModelWithResponseStreamCommand=ED1});var p82=Y((x82)=>{Object.defineProperty(x82,"__esModule",{value:!0});x82.BedrockRuntime=void 0;var Sk5=h2(),Lk5=wD1(),yk5=vD1(),Pk5=SD1(),$k5={InvokeModelCommand:yk5.InvokeModelCommand,InvokeModelWithResponseStreamCommand:Pk5.InvokeModelWithResponseStreamCommand};class LD1 extends Lk5.BedrockRuntimeClient{}x82.BedrockRuntime=LD1;Sk5.createAggregatedClient($k5,LD1)});var n82=Y((vr)=>{Object.defineProperty(vr,"__esModule",{value:!0});var i82=x1();i82.__exportStar(vD1(),vr);i82.__exportStar(SD1(),vr)});var r82=Y((yD1)=>{Object.defineProperty(yD1,"__esModule",{value:!0});var uk5=x1();uk5.__exportStar(kP(),yD1)});var a82=Y((SJ)=>{Object.defineProperty(SJ,"__esModule",{value:!0});SJ.BedrockRuntimeServiceException=void 0;var Er=x1();Er.__exportStar(wD1(),SJ);Er.__exportStar(p82(),SJ);Er.__exportStar(n82(),SJ);Er.__exportStar(r82(),SJ);var Tk5=Ur();Object.defineProperty(SJ,"BedrockRuntimeServiceException",{enumerable:!0,get:function(){return Tk5.BedrockRuntimeServiceException}})});var $D1=Y((FA3,B72)=>{var Pr=Object.prototype.hasOwnProperty,w72=Object.prototype.toString,I72=Object.defineProperty,d72=Object.getOwnPropertyDescriptor,G72=function I(d){if(typeof Array.isArray==="function")return Array.isArray(d);return w72.call(d)==="[object Array]"},Z72=function I(d){if(!d||w72.call(d)!=="[object Object]")return!1;var G=Pr.call(d,"constructor"),Z=d.constructor&&d.constructor.prototype&&Pr.call(d.constructor.prototype,"isPrototypeOf");if(d.constructor&&!G&&!Z)return!1;var C;for(C in d);return typeof C==="undefined"||Pr.call(d,C)},C72=function I(d,G){if(I72&&G.name==="__proto__")I72(d,G.name,{enumerable:!0,configurable:!0,value:G.newValue,writable:!0});else d[G.name]=G.newValue},W72=function I(d,G){if(G==="__proto__"){if(!Pr.call(d,G))return;else if(d72)return d72(d,G).value}return d[G]};B72.exports=function I(){var d,G,Z,C,W,w,B=arguments[0],A=1,V=arguments.length,X=!1;if(typeof B==="boolean")X=B,B=arguments[1]||{},A=2;if(B==null||typeof B!=="object"&&typeof B!=="function")B={};for(;A{var QB=(I)=>I!==null&&typeof I==="object"&&typeof I.pipe==="function";QB.writable=(I)=>QB(I)&&I.writable!==!1&&typeof I._write==="function"&&typeof I._writableState==="object";QB.readable=(I)=>QB(I)&&I.readable!==!1&&typeof I._read==="function"&&typeof I._readableState==="object";QB.duplex=(I)=>QB.writable(I)&&QB.readable(I);QB.transform=(I)=>QB.duplex(I)&&typeof I._transform==="function";A72.exports=QB});var X72=Y((JA3,tk5)=>{tk5.exports={name:"gaxios",version:"6.7.1",description:"A simple common HTTP client specifically for Google APIs and services.",main:"build/src/index.js",types:"build/src/index.d.ts",files:["build/src"],scripts:{lint:"gts check",test:"c8 mocha build/test","presystem-test":"npm run compile","system-test":"mocha build/system-test --timeout 80000",compile:"tsc -p .",fix:"gts fix",prepare:"npm run compile",pretest:"npm run compile",webpack:"webpack","prebrowser-test":"npm run compile","browser-test":"node build/browser-test/browser-test-runner.js",docs:"compodoc src/","docs-test":"linkinator docs","predocs-test":"npm run docs","samples-test":"cd samples/ && npm link ../ && npm test && cd ../",prelint:"cd samples; npm link ../; npm install",clean:"gts clean",precompile:"gts clean"},repository:"googleapis/gaxios",keywords:["google"],engines:{node:">=14"},author:"Google, LLC",license:"Apache-2.0",devDependencies:{"@babel/plugin-proposal-private-methods":"^7.18.6","@compodoc/compodoc":"1.1.19","@types/cors":"^2.8.6","@types/express":"^4.16.1","@types/extend":"^3.0.1","@types/mocha":"^9.0.0","@types/multiparty":"0.0.36","@types/mv":"^2.1.0","@types/ncp":"^2.0.1","@types/node":"^20.0.0","@types/node-fetch":"^2.5.7","@types/sinon":"^17.0.0","@types/tmp":"0.2.6","@types/uuid":"^10.0.0","abort-controller":"^3.0.0",assert:"^2.0.0",browserify:"^17.0.0",c8:"^8.0.0",cheerio:"1.0.0-rc.10",cors:"^2.8.5",execa:"^5.0.0",express:"^4.16.4","form-data":"^4.0.0",gts:"^5.0.0","is-docker":"^2.0.0",karma:"^6.0.0","karma-chrome-launcher":"^3.0.0","karma-coverage":"^2.0.0","karma-firefox-launcher":"^2.0.0","karma-mocha":"^2.0.0","karma-remap-coverage":"^0.1.5","karma-sourcemap-loader":"^0.4.0","karma-webpack":"5.0.0",linkinator:"^3.0.0",mocha:"^8.0.0",multiparty:"^4.2.1",mv:"^2.1.1",ncp:"^2.0.0",nock:"^13.0.0","null-loader":"^4.0.0",puppeteer:"^19.0.0",sinon:"^18.0.0","stream-browserify":"^3.0.0",tmp:"0.2.3","ts-loader":"^8.0.0",typescript:"^5.1.6",webpack:"^5.35.0","webpack-cli":"^4.0.0"},dependencies:{extend:"^3.0.2","https-proxy-agent":"^7.0.1","is-stream":"^2.0.0","node-fetch":"^2.6.9",uuid:"^9.0.1"}}});var D72=Y((Y72)=>{Object.defineProperty(Y72,"__esModule",{value:!0});Y72.pkg=void 0;Y72.pkg=X72()});var OD1=Y((TZ)=>{var Ix5=TZ&&TZ.__importDefault||function(I){return I&&I.__esModule?I:{default:I}},H72;Object.defineProperty(TZ,"__esModule",{value:!0});TZ.GaxiosError=TZ.GAXIOS_ERROR_SYMBOL=void 0;TZ.defaultErrorRedactor=g72;var dx5=B1("url"),uD1=D72(),F72=Ix5($D1());TZ.GAXIOS_ERROR_SYMBOL=Symbol.for(`${uD1.pkg.name}-gaxios-error`);class TD1 extends Error{static[(H72=TZ.GAXIOS_ERROR_SYMBOL,Symbol.hasInstance)](I){if(I&&typeof I==="object"&&TZ.GAXIOS_ERROR_SYMBOL in I&&I[TZ.GAXIOS_ERROR_SYMBOL]===uD1.pkg.version)return!0;return Function.prototype[Symbol.hasInstance].call(TD1,I)}constructor(I,d,G,Z){var C;super(I);if(this.config=d,this.response=G,this.error=Z,this[H72]=uD1.pkg.version,this.config=F72.default(!0,{},d),this.response)this.response.config=F72.default(!0,{},this.response.config);if(this.response){try{this.response.data=Gx5(this.config.responseType,(C=this.response)===null||C===void 0?void 0:C.data)}catch(W){}this.status=this.response.status}if(Z&&"code"in Z&&Z.code)this.code=Z.code;if(d.errorRedactor)d.errorRedactor({config:this.config,response:this.response})}}TZ.GaxiosError=TD1;function Gx5(I,d){switch(I){case"stream":return d;case"json":return JSON.parse(JSON.stringify(d));case"arraybuffer":return JSON.parse(Buffer.from(d).toString("utf8"));case"blob":return JSON.parse(d.text());default:return d}}function g72(I){function G(W){if(!W)return;for(let w of Object.keys(W)){if(/^authentication$/i.test(w))W[w]="< - See `errorRedactor` option in `gaxios` for configuration>.";if(/^authorization$/i.test(w))W[w]="< - See `errorRedactor` option in `gaxios` for configuration>.";if(/secret/i.test(w))W[w]="< - See `errorRedactor` option in `gaxios` for configuration>."}}function Z(W,w){if(typeof W==="object"&&W!==null&&typeof W[w]==="string"){let B=W[w];if(/grant_type=/i.test(B)||/assertion=/i.test(B)||/secret/i.test(B))W[w]="< - See `errorRedactor` option in `gaxios` for configuration>."}}function C(W){if(typeof W==="object"&&W!==null){if("grant_type"in W)W.grant_type="< - See `errorRedactor` option in `gaxios` for configuration>.";if("assertion"in W)W.assertion="< - See `errorRedactor` option in `gaxios` for configuration>.";if("client_secret"in W)W.client_secret="< - See `errorRedactor` option in `gaxios` for configuration>."}}if(I.config){G(I.config.headers),Z(I.config,"data"),C(I.config.data),Z(I.config,"body"),C(I.config.body);try{let W=new dx5.URL("",I.config.url);if(W.searchParams.has("token"))W.searchParams.set("token","< - See `errorRedactor` option in `gaxios` for configuration>.");if(W.searchParams.has("client_secret"))W.searchParams.set("client_secret","< - See `errorRedactor` option in `gaxios` for configuration>.");I.config.url=W.toString()}catch(W){}}if(I.response)g72({config:I.response.config}),G(I.response.headers),Z(I.response,"data"),C(I.response.data);return I}});var N72=Y((K72)=>{Object.defineProperty(K72,"__esModule",{value:!0});K72.getRetryConfig=Zx5;async function Zx5(I){let d=J72(I);if(!I||!I.config||!d&&!I.config.retry)return{shouldRetry:!1};d=d||{},d.currentRetryAttempt=d.currentRetryAttempt||0,d.retry=d.retry===void 0||d.retry===null?3:d.retry,d.httpMethodsToRetry=d.httpMethodsToRetry||["GET","HEAD","PUT","OPTIONS","DELETE"],d.noResponseRetries=d.noResponseRetries===void 0||d.noResponseRetries===null?2:d.noResponseRetries,d.retryDelayMultiplier=d.retryDelayMultiplier?d.retryDelayMultiplier:2,d.timeOfFirstRequest=d.timeOfFirstRequest?d.timeOfFirstRequest:Date.now(),d.totalTimeout=d.totalTimeout?d.totalTimeout:Number.MAX_SAFE_INTEGER,d.maxRetryDelay=d.maxRetryDelay?d.maxRetryDelay:Number.MAX_SAFE_INTEGER;let G=[[100,199],[408,408],[429,429],[500,599]];if(d.statusCodesToRetry=d.statusCodesToRetry||G,I.config.retryConfig=d,!await(d.shouldRetry||Cx5)(I))return{shouldRetry:!1,config:I.config};let C=Wx5(d);I.config.retryConfig.currentRetryAttempt+=1;let W=d.retryBackoff?d.retryBackoff(I,C):new Promise((w)=>{setTimeout(w,C)});if(d.onRetryAttempt)d.onRetryAttempt(I);return await W,{shouldRetry:!0,config:I.config}}function Cx5(I){var d;let G=J72(I);if(I.name==="AbortError"||((d=I.error)===null||d===void 0?void 0:d.name)==="AbortError")return!1;if(!G||G.retry===0)return!1;if(!I.response&&(G.currentRetryAttempt||0)>=G.noResponseRetries)return!1;if(!I.config.method||G.httpMethodsToRetry.indexOf(I.config.method.toUpperCase())<0)return!1;if(I.response&&I.response.status){let Z=!1;for(let[C,W]of G.statusCodesToRetry){let w=I.response.status;if(w>=C&&w<=W){Z=!0;break}}if(!Z)return!1}if(G.currentRetryAttempt=G.currentRetryAttempt||0,G.currentRetryAttempt>=G.retry)return!1;return!0}function J72(I){if(I&&I.config&&I.config.retryConfig)return I.config.retryConfig;return}function Wx5(I){var d;let Z=(I.currentRetryAttempt?0:(d=I.retryDelay)!==null&&d!==void 0?d:100)+(Math.pow(I.retryDelayMultiplier,I.currentRetryAttempt)-1)/2*1000,C=I.totalTimeout-(Date.now()-I.timeOfFirstRequest);return Math.min(Z,C,I.maxRetryDelay)}});var mD1=Y((z72)=>{Object.defineProperty(z72,"__esModule",{value:!0});z72.default=Vx5;var Bx5=Ax5(B1("crypto"));function Ax5(I){return I&&I.__esModule?I:{default:I}}var ur=new Uint8Array(256),$r=ur.length;function Vx5(){if($r>ur.length-16)Bx5.default.randomFillSync(ur),$r=0;return ur.slice($r,$r+=16)}});var q72=Y((Q72)=>{Object.defineProperty(Q72,"__esModule",{value:!0});Q72.default=void 0;var Yx5=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;Q72.default=Yx5});var cP=Y((R72)=>{Object.defineProperty(R72,"__esModule",{value:!0});R72.default=void 0;var _x5=Dx5(q72());function Dx5(I){return I&&I.__esModule?I:{default:I}}function Hx5(I){return typeof I==="string"&&_x5.default.test(I)}var Fx5=Hx5;R72.default=Fx5});var pP=Y((E72)=>{Object.defineProperty(E72,"__esModule",{value:!0});E72.default=void 0;E72.unsafeStringify=v72;var gx5=Jx5(cP());function Jx5(I){return I&&I.__esModule?I:{default:I}}var Z7=[];for(let I=0;I<256;++I)Z7.push((I+256).toString(16).slice(1));function v72(I,d=0){return Z7[I[d+0]]+Z7[I[d+1]]+Z7[I[d+2]]+Z7[I[d+3]]+"-"+Z7[I[d+4]]+Z7[I[d+5]]+"-"+Z7[I[d+6]]+Z7[I[d+7]]+"-"+Z7[I[d+8]]+Z7[I[d+9]]+"-"+Z7[I[d+10]]+Z7[I[d+11]]+Z7[I[d+12]]+Z7[I[d+13]]+Z7[I[d+14]]+Z7[I[d+15]]}function Kx5(I,d=0){let G=v72(I,d);if(!gx5.default(G))throw TypeError("Stringified UUID is invalid");return G}var Nx5=Kx5;E72.default=Nx5});var P72=Y((L72)=>{Object.defineProperty(L72,"__esModule",{value:!0});L72.default=void 0;var Qx5=qx5(mD1()),fx5=pP();function qx5(I){return I&&I.__esModule?I:{default:I}}var S72,lD1,bD1=0,hD1=0;function Rx5(I,d,G){let Z=d&&G||0,C=d||new Array(16);I=I||{};let W=I.node||S72,w=I.clockseq!==void 0?I.clockseq:lD1;if(W==null||w==null){let F=I.random||(I.rng||Qx5.default)();if(W==null)W=S72=[F[0]|1,F[1],F[2],F[3],F[4],F[5]];if(w==null)w=lD1=(F[6]<<8|F[7])&16383}let B=I.msecs!==void 0?I.msecs:Date.now(),A=I.nsecs!==void 0?I.nsecs:hD1+1,V=B-bD1+(A-hD1)/1e4;if(V<0&&I.clockseq===void 0)w=w+1&16383;if((V<0||B>bD1)&&I.nsecs===void 0)A=0;if(A>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");bD1=B,hD1=A,lD1=w,B+=12219292800000;let X=((B&268435455)*1e4+A)%4294967296;C[Z++]=X>>>24&255,C[Z++]=X>>>16&255,C[Z++]=X>>>8&255,C[Z++]=X&255;let _=B/4294967296*1e4&268435455;C[Z++]=_>>>8&255,C[Z++]=_&255,C[Z++]=_>>>24&15|16,C[Z++]=_>>>16&255,C[Z++]=w>>>8|128,C[Z++]=w&255;for(let F=0;F<6;++F)C[Z+F]=W[F];return d||fx5.unsafeStringify(C)}var Ux5=Rx5;L72.default=Ux5});var jD1=Y(($72)=>{Object.defineProperty($72,"__esModule",{value:!0});$72.default=void 0;var vx5=Ex5(cP());function Ex5(I){return I&&I.__esModule?I:{default:I}}function Mx5(I){if(!vx5.default(I))throw TypeError("Invalid UUID");let d,G=new Uint8Array(16);return G[0]=(d=parseInt(I.slice(0,8),16))>>>24,G[1]=d>>>16&255,G[2]=d>>>8&255,G[3]=d&255,G[4]=(d=parseInt(I.slice(9,13),16))>>>8,G[5]=d&255,G[6]=(d=parseInt(I.slice(14,18),16))>>>8,G[7]=d&255,G[8]=(d=parseInt(I.slice(19,23),16))>>>8,G[9]=d&255,G[10]=(d=parseInt(I.slice(24,36),16))/1099511627776&255,G[11]=d/4294967296&255,G[12]=d>>>24&255,G[13]=d>>>16&255,G[14]=d>>>8&255,G[15]=d&255,G}var Sx5=Mx5;$72.default=Sx5});var kD1=Y((m72)=>{Object.defineProperty(m72,"__esModule",{value:!0});m72.URL=m72.DNS=void 0;m72.default=ux5;var Lx5=pP(),yx5=Px5(jD1());function Px5(I){return I&&I.__esModule?I:{default:I}}function $x5(I){I=unescape(encodeURIComponent(I));let d=[];for(let G=0;G{Object.defineProperty(b72,"__esModule",{value:!0});b72.default=void 0;var mx5=lx5(B1("crypto"));function lx5(I){return I&&I.__esModule?I:{default:I}}function bx5(I){if(Array.isArray(I))I=Buffer.from(I);else if(typeof I==="string")I=Buffer.from(I,"utf8");return mx5.default.createHash("md5").update(I).digest()}var hx5=bx5;b72.default=hx5});var p72=Y((x72)=>{Object.defineProperty(x72,"__esModule",{value:!0});x72.default=void 0;var jx5=k72(kD1()),kx5=k72(j72());function k72(I){return I&&I.__esModule?I:{default:I}}var xx5=jx5.default("v3",48,kx5.default),cx5=xx5;x72.default=cx5});var r72=Y((i72)=>{Object.defineProperty(i72,"__esModule",{value:!0});i72.default=void 0;var px5=ix5(B1("crypto"));function ix5(I){return I&&I.__esModule?I:{default:I}}var nx5={randomUUID:px5.default.randomUUID};i72.default=nx5});var t72=Y((o72)=>{Object.defineProperty(o72,"__esModule",{value:!0});o72.default=void 0;var a72=s72(r72()),rx5=s72(mD1()),ax5=pP();function s72(I){return I&&I.__esModule?I:{default:I}}function sx5(I,d,G){if(a72.default.randomUUID&&!d&&!I)return a72.default.randomUUID();I=I||{};let Z=I.random||(I.rng||rx5.default)();if(Z[6]=Z[6]&15|64,Z[8]=Z[8]&63|128,d){G=G||0;for(let C=0;C<16;++C)d[G+C]=Z[C];return d}return ax5.unsafeStringify(Z)}var ox5=sx5;o72.default=ox5});var GI2=Y((II2)=>{Object.defineProperty(II2,"__esModule",{value:!0});II2.default=void 0;var ex5=tx5(B1("crypto"));function tx5(I){return I&&I.__esModule?I:{default:I}}function Ic5(I){if(Array.isArray(I))I=Buffer.from(I);else if(typeof I==="string")I=Buffer.from(I,"utf8");return ex5.default.createHash("sha1").update(I).digest()}var dc5=Ic5;II2.default=dc5});var wI2=Y((CI2)=>{Object.defineProperty(CI2,"__esModule",{value:!0});CI2.default=void 0;var Gc5=ZI2(kD1()),Zc5=ZI2(GI2());function ZI2(I){return I&&I.__esModule?I:{default:I}}var Cc5=Gc5.default("v5",80,Zc5.default),Wc5=Cc5;CI2.default=Wc5});var VI2=Y((BI2)=>{Object.defineProperty(BI2,"__esModule",{value:!0});BI2.default=void 0;var wc5="00000000-0000-0000-0000-000000000000";BI2.default=wc5});var _I2=Y((XI2)=>{Object.defineProperty(XI2,"__esModule",{value:!0});XI2.default=void 0;var Bc5=Ac5(cP());function Ac5(I){return I&&I.__esModule?I:{default:I}}function Vc5(I){if(!Bc5.default(I))throw TypeError("Invalid UUID");return parseInt(I.slice(14,15),16)}var Xc5=Vc5;XI2.default=Xc5});var DI2=Y((IW)=>{Object.defineProperty(IW,"__esModule",{value:!0});Object.defineProperty(IW,"NIL",{enumerable:!0,get:function(){return Fc5.default}});Object.defineProperty(IW,"parse",{enumerable:!0,get:function(){return Nc5.default}});Object.defineProperty(IW,"stringify",{enumerable:!0,get:function(){return Kc5.default}});Object.defineProperty(IW,"v1",{enumerable:!0,get:function(){return Yc5.default}});Object.defineProperty(IW,"v3",{enumerable:!0,get:function(){return _c5.default}});Object.defineProperty(IW,"v4",{enumerable:!0,get:function(){return Dc5.default}});Object.defineProperty(IW,"v5",{enumerable:!0,get:function(){return Hc5.default}});Object.defineProperty(IW,"validate",{enumerable:!0,get:function(){return Jc5.default}});Object.defineProperty(IW,"version",{enumerable:!0,get:function(){return gc5.default}});var Yc5=nV(P72()),_c5=nV(p72()),Dc5=nV(t72()),Hc5=nV(wI2()),Fc5=nV(VI2()),gc5=nV(_I2()),Jc5=nV(cP()),Kc5=nV(pP()),Nc5=nV(jD1());function nV(I){return I&&I.__esModule?I:{default:I}}});var xD1=Y((FI2)=>{Object.defineProperty(FI2,"__esModule",{value:!0});FI2.GaxiosInterceptorManager=void 0;class HI2 extends Set{}FI2.GaxiosInterceptorManager=HI2});var NI2=Y((Yd)=>{var zc5=Yd&&Yd.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),Qc5=Yd&&Yd.__setModuleDefault||(Object.create?function(I,d){Object.defineProperty(I,"default",{enumerable:!0,value:d})}:function(I,d){I.default=d}),JI2=Yd&&Yd.__importStar||function(I){if(I&&I.__esModule)return I;var d={};if(I!=null){for(var G in I)if(G!=="default"&&Object.prototype.hasOwnProperty.call(I,G))zc5(d,I,G)}return Qc5(d,I),d};Object.defineProperty(Yd,"__esModule",{value:!0});Yd.req=Yd.json=Yd.toBuffer=void 0;var fc5=JI2(B1("http")),qc5=JI2(B1("https"));async function KI2(I){let d=0,G=[];for await(let Z of I)d+=Z.length,G.push(Z);return Buffer.concat(G,d)}Yd.toBuffer=KI2;async function Rc5(I){let G=(await KI2(I)).toString("utf8");try{return JSON.parse(G)}catch(Z){let C=Z;throw C.message+=` (input: ${G})`,C}}Yd.json=Rc5;function Uc5(I,d={}){let Z=((typeof I==="string"?I:I.href).startsWith("https:")?qc5:fc5).request(I,d),C=new Promise((W,w)=>{Z.once("response",W).once("error",w).end()});return Z.then=C.then.bind(C),Z}Yd.req=Uc5});var RI2=Y((wG)=>{var QI2=wG&&wG.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),vc5=wG&&wG.__setModuleDefault||(Object.create?function(I,d){Object.defineProperty(I,"default",{enumerable:!0,value:d})}:function(I,d){I.default=d}),fI2=wG&&wG.__importStar||function(I){if(I&&I.__esModule)return I;var d={};if(I!=null){for(var G in I)if(G!=="default"&&Object.prototype.hasOwnProperty.call(I,G))QI2(d,I,G)}return vc5(d,I),d},Ec5=wG&&wG.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))QI2(d,I,G)};Object.defineProperty(wG,"__esModule",{value:!0});wG.Agent=void 0;var Mc5=fI2(B1("net")),zI2=fI2(B1("http")),Sc5=B1("https");Ec5(NI2(),wG);var fB=Symbol("AgentBaseInternalState");class qI2 extends zI2.Agent{constructor(I){super(I);this[fB]={}}isSecureEndpoint(I){if(I){if(typeof I.secureEndpoint==="boolean")return I.secureEndpoint;if(typeof I.protocol==="string")return I.protocol==="https:"}let{stack:d}=new Error;if(typeof d!=="string")return!1;return d.split(` +`).some((G)=>G.indexOf("(https.js:")!==-1||G.indexOf("node:https:")!==-1)}incrementSockets(I){if(this.maxSockets===1/0&&this.maxTotalSockets===1/0)return null;if(!this.sockets[I])this.sockets[I]=[];let d=new Mc5.Socket({writable:!1});return this.sockets[I].push(d),this.totalSocketCount++,d}decrementSockets(I,d){if(!this.sockets[I]||d===null)return;let G=this.sockets[I],Z=G.indexOf(d);if(Z!==-1){if(G.splice(Z,1),this.totalSocketCount--,G.length===0)delete this.sockets[I]}}getName(I){if(typeof I.secureEndpoint==="boolean"?I.secureEndpoint:this.isSecureEndpoint(I))return Sc5.Agent.prototype.getName.call(this,I);return super.getName(I)}createSocket(I,d,G){let Z={...d,secureEndpoint:this.isSecureEndpoint(d)},C=this.getName(Z),W=this.incrementSockets(C);Promise.resolve().then(()=>this.connect(I,Z)).then((w)=>{if(this.decrementSockets(C,W),w instanceof zI2.Agent)try{return w.addRequest(I,Z)}catch(B){return G(B)}this[fB].currentSocket=w,super.createSocket(I,d,G)},(w)=>{this.decrementSockets(C,W),G(w)})}createConnection(){let I=this[fB].currentSocket;if(this[fB].currentSocket=void 0,!I)throw new Error("No socket was returned in the `connect()` function");return I}get defaultPort(){return this[fB].defaultPort??(this.protocol==="https:"?443:80)}set defaultPort(I){if(this[fB])this[fB].defaultPort=I}get protocol(){return this[fB].protocol??(this.isSecureEndpoint()?"https:":"http:")}set protocol(I){if(this[fB])this[fB].protocol=I}}wG.Agent=qI2});var UI2=Y((mq)=>{var Lc5=mq&&mq.__importDefault||function(I){return I&&I.__esModule?I:{default:I}};Object.defineProperty(mq,"__esModule",{value:!0});mq.parseProxyResponse=void 0;var yc5=Lc5(qS()),Tr=yc5.default("https-proxy-agent:parse-proxy-response");function Pc5(I){return new Promise((d,G)=>{let Z=0,C=[];function W(){let X=I.read();if(X)V(X);else I.once("readable",W)}function w(){I.removeListener("end",B),I.removeListener("error",A),I.removeListener("readable",W)}function B(){w(),Tr("onend"),G(new Error("Proxy connection ended before receiving CONNECT response"))}function A(X){w(),Tr("onerror %o",X),G(X)}function V(X){C.push(X),Z+=X.length;let _=Buffer.concat(C,Z),F=_.indexOf(`\r +\r +`);if(F===-1){Tr("have not received end of HTTP headers yet..."),W();return}let g=_.slice(0,F).toString("ascii").split(`\r +`),J=g.shift();if(!J)return I.destroy(),G(new Error("No header received from proxy CONNECT response"));let K=J.split(" "),Q=+K[1],E=K.slice(2).join(" "),S={};for(let P of g){if(!P)continue;let $=P.indexOf(":");if($===-1)return I.destroy(),G(new Error(`Invalid header from proxy CONNECT response: "${P}"`));let h=P.slice(0,$).toLowerCase(),O=P.slice($+1).trimStart(),T=S[h];if(typeof T==="string")S[h]=[T,O];else if(Array.isArray(T))T.push(O);else S[h]=O}Tr("got proxy server response: %o %o",J,S),w(),d({connect:{statusCode:Q,statusText:E,headers:S},buffered:_})}I.on("error",A),I.on("end",B),W()})}mq.parseProxyResponse=Pc5});var yI2=Y((OZ)=>{var $c5=OZ&&OZ.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),uc5=OZ&&OZ.__setModuleDefault||(Object.create?function(I,d){Object.defineProperty(I,"default",{enumerable:!0,value:d})}:function(I,d){I.default=d}),SI2=OZ&&OZ.__importStar||function(I){if(I&&I.__esModule)return I;var d={};if(I!=null){for(var G in I)if(G!=="default"&&Object.prototype.hasOwnProperty.call(I,G))$c5(d,I,G)}return uc5(d,I),d},LI2=OZ&&OZ.__importDefault||function(I){return I&&I.__esModule?I:{default:I}};Object.defineProperty(OZ,"__esModule",{value:!0});OZ.HttpsProxyAgent=void 0;var Or=SI2(B1("net")),vI2=SI2(B1("tls")),Tc5=LI2(B1("assert")),Oc5=LI2(qS()),mc5=RI2(),lc5=B1("url"),bc5=UI2(),iP=Oc5.default("https-proxy-agent"),EI2=(I)=>{if(I.servername===void 0&&I.host&&!Or.isIP(I.host))return{...I,servername:I.host};return I};class cD1 extends mc5.Agent{constructor(I,d){super(d);this.options={path:void 0},this.proxy=typeof I==="string"?new lc5.URL(I):I,this.proxyHeaders=d?.headers??{},iP("Creating new HttpsProxyAgent instance: %o",this.proxy.href);let G=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,""),Z=this.proxy.port?parseInt(this.proxy.port,10):this.proxy.protocol==="https:"?443:80;this.connectOpts={ALPNProtocols:["http/1.1"],...d?MI2(d,"headers"):null,host:G,port:Z}}async connect(I,d){let{proxy:G}=this;if(!d.host)throw new TypeError('No "host" provided');let Z;if(G.protocol==="https:")iP("Creating `tls.Socket`: %o",this.connectOpts),Z=vI2.connect(EI2(this.connectOpts));else iP("Creating `net.Socket`: %o",this.connectOpts),Z=Or.connect(this.connectOpts);let C=typeof this.proxyHeaders==="function"?this.proxyHeaders():{...this.proxyHeaders},W=Or.isIPv6(d.host)?`[${d.host}]`:d.host,w=`CONNECT ${W}:${d.port} HTTP/1.1\r +`;if(G.username||G.password){let _=`${decodeURIComponent(G.username)}:${decodeURIComponent(G.password)}`;C["Proxy-Authorization"]=`Basic ${Buffer.from(_).toString("base64")}`}if(C.Host=`${W}:${d.port}`,!C["Proxy-Connection"])C["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close";for(let _ of Object.keys(C))w+=`${_}: ${C[_]}\r +`;let B=bc5.parseProxyResponse(Z);Z.write(`${w}\r +`);let{connect:A,buffered:V}=await B;if(I.emit("proxyConnect",A),this.emit("proxyConnect",A,I),A.statusCode===200){if(I.once("socket",hc5),d.secureEndpoint)return iP("Upgrading socket connection to TLS"),vI2.connect({...MI2(EI2(d),"host","path","port"),socket:Z});return Z}Z.destroy();let X=new Or.Socket({writable:!1});return X.readable=!0,I.once("socket",(_)=>{iP("Replaying proxy buffer for failed request"),Tc5.default(_.listenerCount("data")>0),_.push(V),_.push(null)}),X}}cD1.protocols=["http","https"];OZ.HttpsProxyAgent=cD1;function hc5(I){I.resume()}function MI2(I,...d){let G={},Z;for(Z in I)if(!d.includes(Z))G[Z]=I[Z];return G}});var kI2=Y((b7)=>{var jc5=b7&&b7.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),kc5=b7&&b7.__setModuleDefault||(Object.create?function(I,d){Object.defineProperty(I,"default",{enumerable:!0,value:d})}:function(I,d){I.default=d}),xc5=b7&&b7.__importStar||function(I){if(I&&I.__esModule)return I;var d={};if(I!=null){for(var G in I)if(G!=="default"&&Object.prototype.hasOwnProperty.call(I,G))jc5(d,I,G)}return kc5(d,I),d},yJ=b7&&b7.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},cc5=b7&&b7.__classPrivateFieldSet||function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},br=b7&&b7.__importDefault||function(I){return I&&I.__esModule?I:{default:I}},lq,LJ,PI2,lI2,bI2,hI2,mr,$I2;Object.defineProperty(b7,"__esModule",{value:!0});b7.Gaxios=void 0;var pc5=br($D1()),ic5=B1("https"),nc5=br(f41()),rc5=br(B1("querystring")),ac5=br(V72()),uI2=B1("url"),lr=OD1(),sc5=N72(),TI2=B1("stream"),oc5=DI2(),OI2=xD1(),ec5=Ip5()?window.fetch:nc5.default;function tc5(){return typeof window!=="undefined"&&!!window}function Ip5(){return tc5()&&!!window.fetch}function dp5(){return typeof Buffer!=="undefined"}function mI2(I,d){return!!jI2(I,d)}function jI2(I,d){d=d.toLowerCase();for(let G of Object.keys((I===null||I===void 0?void 0:I.headers)||{}))if(d===G.toLowerCase())return I.headers[G];return}class pD1{constructor(I){lq.add(this),this.agentCache=new Map,this.defaults=I||{},this.interceptors={request:new OI2.GaxiosInterceptorManager,response:new OI2.GaxiosInterceptorManager}}async request(I={}){return I=await yJ(this,lq,"m",hI2).call(this,I),I=await yJ(this,lq,"m",lI2).call(this,I),yJ(this,lq,"m",bI2).call(this,this._request(I))}async _defaultAdapter(I){let G=await(I.fetchImplementation||ec5)(I.url,I),Z=await this.getResponseData(I,G);return this.translateResponse(I,G,Z)}async _request(I={}){var d;try{let G;if(I.adapter)G=await I.adapter(I,this._defaultAdapter.bind(this));else G=await this._defaultAdapter(I);if(!I.validateStatus(G.status)){if(I.responseType==="stream"){let Z="";await new Promise((C)=>{(G===null||G===void 0?void 0:G.data).on("data",(W)=>{Z+=W}),(G===null||G===void 0?void 0:G.data).on("end",C)}),G.data=Z}throw new lr.GaxiosError(`Request failed with status code ${G.status}`,I,G)}return G}catch(G){let Z=G instanceof lr.GaxiosError?G:new lr.GaxiosError(G.message,I,void 0,G),{shouldRetry:C,config:W}=await sc5.getRetryConfig(Z);if(C&&W)return Z.config.retryConfig.currentRetryAttempt=W.retryConfig.currentRetryAttempt,I.retryConfig=(d=Z.config)===null||d===void 0?void 0:d.retryConfig,this._request(I);throw Z}}async getResponseData(I,d){switch(I.responseType){case"stream":return d.body;case"json":{let G=await d.text();try{G=JSON.parse(G)}catch(Z){}return G}case"arraybuffer":return d.arrayBuffer();case"blob":return d.blob();case"text":return d.text();default:return this.getResponseDataFromContentType(d)}}validateStatus(I){return I>=200&&I<300}paramsSerializer(I){return rc5.default.stringify(I)}translateResponse(I,d,G){let Z={};return d.headers.forEach((C,W)=>{Z[W]=C}),{config:I,data:G,headers:Z,status:d.status,statusText:d.statusText,request:{responseURL:d.url}}}async getResponseDataFromContentType(I){let d=I.headers.get("Content-Type");if(d===null)return I.text();if(d=d.toLowerCase(),d.includes("application/json")){let G=await I.text();try{G=JSON.parse(G)}catch(Z){}return G}else if(d.match(/^text\//))return I.text();else return I.blob()}async*getMultipartRequest(I,d){let G=`--${d}--`;for(let Z of I){let C=Z.headers["Content-Type"]||"application/octet-stream";if(yield`--${d}\r +Content-Type: ${C}\r +\r +`,typeof Z.content==="string")yield Z.content;else yield*Z.content;yield`\r +`}yield G}}b7.Gaxios=pD1;LJ=pD1,lq=new WeakSet,PI2=function I(d,G=[]){var Z,C;let W=new uI2.URL(d),w=[...G],B=((C=(Z=process.env.NO_PROXY)!==null&&Z!==void 0?Z:process.env.no_proxy)===null||C===void 0?void 0:C.split(","))||[];for(let A of B)w.push(A.trim());for(let A of w)if(A instanceof RegExp){if(A.test(W.toString()))return!1}else if(A instanceof uI2.URL){if(A.origin===W.origin)return!1}else if(A.startsWith("*.")||A.startsWith(".")){let V=A.replace(/^\*\./,".");if(W.hostname.endsWith(V))return!1}else if(A===W.origin||A===W.hostname||A===W.href)return!1;return!0},lI2=async function I(d){let G=Promise.resolve(d);for(let Z of this.interceptors.request.values())if(Z)G=G.then(Z.resolved,Z.rejected);return G},bI2=async function I(d){let G=Promise.resolve(d);for(let Z of this.interceptors.response.values())if(Z)G=G.then(Z.resolved,Z.rejected);return G},hI2=async function I(d){var G,Z,C,W;let w=pc5.default(!0,{},this.defaults,d);if(!w.url)throw new Error("URL is required.");let B=w.baseUrl||w.baseURL;if(B)w.url=B.toString()+w.url;if(w.paramsSerializer=w.paramsSerializer||this.paramsSerializer,w.params&&Object.keys(w.params).length>0){let X=w.paramsSerializer(w.params);if(X.startsWith("?"))X=X.slice(1);let _=w.url.toString().includes("?")?"&":"?";w.url=w.url+_+X}if(typeof d.maxContentLength==="number")w.size=d.maxContentLength;if(typeof d.maxRedirects==="number")w.follow=d.maxRedirects;if(w.headers=w.headers||{},w.multipart===void 0&&w.data){let X=typeof FormData==="undefined"?!1:(w===null||w===void 0?void 0:w.data)instanceof FormData;if(ac5.default.readable(w.data))w.body=w.data;else if(dp5()&&Buffer.isBuffer(w.data)){if(w.body=w.data,!mI2(w,"Content-Type"))w.headers["Content-Type"]="application/json"}else if(typeof w.data==="object"){if(!X)if(jI2(w,"content-type")==="application/x-www-form-urlencoded")w.body=w.paramsSerializer(w.data);else{if(!mI2(w,"Content-Type"))w.headers["Content-Type"]="application/json";w.body=JSON.stringify(w.data)}}else w.body=w.data}else if(w.multipart&&w.multipart.length>0){let X=oc5.v4();w.headers["Content-Type"]=`multipart/related; boundary=${X}`;let _=new TI2.PassThrough;w.body=_,TI2.pipeline(this.getMultipartRequest(w.multipart,X),_,()=>{})}if(w.validateStatus=w.validateStatus||this.validateStatus,w.responseType=w.responseType||"unknown",!w.headers.Accept&&w.responseType==="json")w.headers.Accept="application/json";w.method=w.method||"GET";let A=w.proxy||((G=process===null||process===void 0?void 0:process.env)===null||G===void 0?void 0:G.HTTPS_PROXY)||((Z=process===null||process===void 0?void 0:process.env)===null||Z===void 0?void 0:Z.https_proxy)||((C=process===null||process===void 0?void 0:process.env)===null||C===void 0?void 0:C.HTTP_PROXY)||((W=process===null||process===void 0?void 0:process.env)===null||W===void 0?void 0:W.http_proxy),V=yJ(this,lq,"m",PI2).call(this,w.url,w.noProxy);if(w.agent);else if(A&&V){let X=await yJ(LJ,LJ,"m",$I2).call(LJ);if(this.agentCache.has(A))w.agent=this.agentCache.get(A);else w.agent=new X(A,{cert:w.cert,key:w.key}),this.agentCache.set(A,w.agent)}else if(w.cert&&w.key)if(this.agentCache.has(w.key))w.agent=this.agentCache.get(w.key);else w.agent=new ic5.Agent({cert:w.cert,key:w.key}),this.agentCache.set(w.key,w.agent);if(typeof w.errorRedactor!=="function"&&w.errorRedactor!==!1)w.errorRedactor=lr.defaultErrorRedactor;return w},$I2=async function I(){return cc5(this,LJ,yJ(this,LJ,"f",mr)||(await Promise.resolve().then(()=>xc5(yI2()))).HttpsProxyAgent,"f",mr),yJ(this,LJ,"f",mr)};mr={value:void 0}});var dW=Y((YI)=>{var Gp5=YI&&YI.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),Zp5=YI&&YI.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))Gp5(d,I,G)};Object.defineProperty(YI,"__esModule",{value:!0});YI.instance=YI.Gaxios=YI.GaxiosError=void 0;YI.request=Wp5;var xI2=kI2();Object.defineProperty(YI,"Gaxios",{enumerable:!0,get:function(){return xI2.Gaxios}});var Cp5=OD1();Object.defineProperty(YI,"GaxiosError",{enumerable:!0,get:function(){return Cp5.GaxiosError}});Zp5(xD1(),YI);YI.instance=new xI2.Gaxios;async function Wp5(I){return YI.instance.request(I)}});var iD1=Y((cI2,hr)=>{(function(I){var d,G=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Z=Math.ceil,C=Math.floor,W="[BigNumber Error] ",w=W+"Number primitive has more than 15 significant digits: ",B=100000000000000,A=14,V=9007199254740991,X=[1,10,100,1000,1e4,1e5,1e6,1e7,1e8,1e9,10000000000,100000000000,1000000000000,10000000000000],_=1e7,F=1e9;function g(h){var O,T,V1,c=e.prototype={constructor:e,toString:null,valueOf:null},c1=new e(1),o1=20,a1=4,f1=-7,r=21,A1=-1e7,m1=1e7,T1=!1,e1=1,F0=0,P0={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},B0="0123456789abcdefghijklmnopqrstuvwxyz",a0=!0;function e(k,a){var Z1,Q1,N1,F1,O1,K1,R1,h1,j=this;if(!(j instanceof e))return new e(k,a);if(a==null){if(k&&k._isBigNumber===!0){if(j.s=k.s,!k.c||k.e>m1)j.c=j.e=null;else if(k.e=10;O1/=10,F1++);if(F1>m1)j.c=j.e=null;else j.e=F1,j.c=[k];return}h1=String(k)}else{if(!G.test(h1=String(k)))return V1(j,h1,K1);j.s=h1.charCodeAt(0)==45?(h1=h1.slice(1),-1):1}if((F1=h1.indexOf("."))>-1)h1=h1.replace(".","");if((O1=h1.search(/e/i))>0){if(F1<0)F1=O1;F1+=+h1.slice(O1+1),h1=h1.substring(0,O1)}else if(F1<0)F1=h1.length}else{if(E(a,2,B0.length,"Base"),a==10&&a0)return j=new e(k),i1(j,o1+j.e+1,a1);if(h1=String(k),K1=typeof k=="number"){if(k*0!=0)return V1(j,h1,K1,a);if(j.s=1/k<0?(h1=h1.slice(1),-1):1,e.DEBUG&&h1.replace(/^0\.0*|\./,"").length>15)throw Error(w+k)}else j.s=h1.charCodeAt(0)===45?(h1=h1.slice(1),-1):1;Z1=B0.slice(0,a),F1=O1=0;for(R1=h1.length;O1F1){F1=R1;continue}}else if(!N1){if(h1==h1.toUpperCase()&&(h1=h1.toLowerCase())||h1==h1.toLowerCase()&&(h1=h1.toUpperCase())){N1=!0,O1=-1,F1=0;continue}}return V1(j,String(k),K1,a)}if(K1=!1,h1=T(h1,a,10,j.s),(F1=h1.indexOf("."))>-1)h1=h1.replace(".","");else F1=h1.length}for(O1=0;h1.charCodeAt(O1)===48;O1++);for(R1=h1.length;h1.charCodeAt(--R1)===48;);if(h1=h1.slice(O1,++R1)){if(R1-=O1,K1&&e.DEBUG&&R1>15&&(k>V||k!==C(k)))throw Error(w+j.s*k);if((F1=F1-O1-1)>m1)j.c=j.e=null;else if(F1=-F&&N1<=F&&N1===C(N1)){if(Q1[0]===0){if(N1===0&&Q1.length===1)return!0;break I}if(a=(N1+1)%A,a<1)a+=A;if(String(Q1[0]).length==a){for(a=0;a=B||Z1!==C(Z1))break I;if(Z1!==0)return!0}}}else if(Q1===null&&N1===null&&(F1===null||F1===1||F1===-1))return!0;throw Error(W+"Invalid BigNumber: "+k)},e.maximum=e.max=function(){return H1(arguments,-1)},e.minimum=e.min=function(){return H1(arguments,1)},e.random=function(){var k=9007199254740992,a=Math.random()*k&2097151?function(){return C(Math.random()*k)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(Z1){var Q1,N1,F1,O1,K1,R1=0,h1=[],j=new e(c1);if(Z1==null)Z1=o1;else E(Z1,0,F);if(O1=Z(Z1/A),T1)if(crypto.getRandomValues){Q1=crypto.getRandomValues(new Uint32Array(O1*=2));for(;R1>>11),K1>=9000000000000000)N1=crypto.getRandomValues(new Uint32Array(2)),Q1[R1]=N1[0],Q1[R1+1]=N1[1];else h1.push(K1%100000000000000),R1+=2;R1=O1/2}else if(crypto.randomBytes){Q1=crypto.randomBytes(O1*=7);for(;R1=9000000000000000)crypto.randomBytes(7).copy(Q1,R1);else h1.push(K1%100000000000000),R1+=7;R1=O1/7}else throw T1=!1,Error(W+"crypto unavailable");if(!T1){for(;R1=10;K1/=10,R1++);if(R1N1-1){if(K1[O1+1]==null)K1[O1+1]=0;K1[O1+1]+=K1[O1]/N1|0,K1[O1]%=N1}}return K1.reverse()}return function(Z1,Q1,N1,F1,O1){var K1,R1,h1,j,W1,U1,L1,D0,O0=Z1.indexOf("."),k0=o1,i0=a1;if(O0>=0)j=F0,F0=0,Z1=Z1.replace(".",""),D0=new e(Q1),U1=D0.pow(Z1.length-O0),F0=j,D0.c=a($(K(U1.c),U1.e,"0"),10,N1,k),D0.e=D0.c.length;L1=a(Z1,Q1,N1,O1?(K1=B0,k):(K1=k,B0)),h1=j=L1.length;for(;L1[--j]==0;L1.pop());if(!L1[0])return K1.charAt(0);if(O0<0)--h1;else U1.c=L1,U1.e=h1,U1.s=F1,U1=O(U1,D0,k0,i0,N1),L1=U1.c,W1=U1.r,h1=U1.e;if(R1=h1+k0+1,O0=L1[R1],j=N1/2,W1=W1||R1<0||L1[R1+1]!=null,W1=i0<4?(O0!=null||W1)&&(i0==0||i0==(U1.s<0?3:2)):O0>j||O0==j&&(i0==4||W1||i0==6&&L1[R1-1]&1||i0==(U1.s<0?8:7)),R1<1||!L1[0])Z1=W1?$(K1.charAt(1),-k0,K1.charAt(0)):K1.charAt(0);else{if(L1.length=R1,W1){for(--N1;++L1[--R1]>N1;)if(L1[R1]=0,!R1)++h1,L1=[1].concat(L1)}for(j=L1.length;!L1[--j];);for(O0=0,Z1="";O0<=j;Z1+=K1.charAt(L1[O0++]));Z1=$(Z1,h1,K1.charAt(0))}return Z1}}(),O=function(){function k(Q1,N1,F1){var O1,K1,R1,h1,j=0,W1=Q1.length,U1=N1%_,L1=N1/_|0;for(Q1=Q1.slice();W1--;)R1=Q1[W1]%_,h1=Q1[W1]/_|0,O1=L1*R1+h1*U1,K1=U1*R1+O1%_*_+j,j=(K1/F1|0)+(O1/_|0)+L1*h1,Q1[W1]=K1%F1;if(j)Q1=[j].concat(Q1);return Q1}function a(Q1,N1,F1,O1){var K1,R1;if(F1!=O1)R1=F1>O1?1:-1;else for(K1=R1=0;K1N1[K1]?1:-1;break}return R1}function Z1(Q1,N1,F1,O1){var K1=0;for(;F1--;)Q1[F1]-=K1,K1=Q1[F1]1;Q1.splice(0,1));}return function(Q1,N1,F1,O1,K1){var R1,h1,j,W1,U1,L1,D0,O0,k0,i0,s0,P2,a5,n0,B2,A2,B4,A4=Q1.s==N1.s?1:-1,_5=Q1.c,D5=N1.c;if(!_5||!_5[0]||!D5||!D5[0])return new e(!Q1.s||!N1.s||(_5?D5&&_5[0]==D5[0]:!D5)?NaN:_5&&_5[0]==0||!D5?A4*0:A4/0);if(O0=new e(A4),k0=O0.c=[],h1=Q1.e-N1.e,A4=F1+h1+1,!K1)K1=B,h1=J(Q1.e/A)-J(N1.e/A),A4=A4/A|0;for(j=0;D5[j]==(_5[j]||0);j++);if(D5[j]>(_5[j]||0))h1--;if(A4<0)k0.push(1),W1=!0;else{if(n0=_5.length,A2=D5.length,j=0,A4+=2,U1=C(K1/(D5[0]+1)),U1>1)D5=k(D5,U1,K1),_5=k(_5,U1,K1),A2=D5.length,n0=_5.length;a5=A2,i0=_5.slice(0,A2),s0=i0.length;for(;s0=K1/2)B2++;do{if(U1=0,R1=a(D5,i0,A2,s0),R1<0){if(P2=i0[0],A2!=s0)P2=P2*K1+(i0[1]||0);if(U1=C(P2/B2),U1>1){if(U1>=K1)U1=K1-1;L1=k(D5,U1,K1),D0=L1.length,s0=i0.length;while(a(L1,i0,D0,s0)==1)U1--,Z1(L1,A2=10;A4/=10,j++);i1(O0,F1+(O0.e=j+h1*A-1)+1,O1,W1)}else O0.e=h1,O0.r=+W1;return O0}}();function G0(k,a,Z1,Q1){var N1,F1,O1,K1,R1;if(Z1==null)Z1=a1;else E(Z1,0,8);if(!k.c)return k.toString();if(N1=k.c[0],O1=k.e,a==null)R1=K(k.c),R1=Q1==1||Q1==2&&(O1<=f1||O1>=r)?P(R1,O1):$(R1,O1,"0");else if(k=i1(new e(k),a,Z1),F1=k.e,R1=K(k.c),K1=R1.length,Q1==1||Q1==2&&(a<=F1||F1<=f1)){for(;K1K1){if(--a>0)for(R1+=".";a--;R1+="0");}else if(a+=F1-K1,a>0){if(F1+1==K1)R1+=".";for(;a--;R1+="0");}return k.s<0&&N1?"-"+R1:R1}function H1(k,a){var Z1,Q1,N1=1,F1=new e(k[0]);for(;N1=10;N1/=10,Q1++);if((Z1=Q1+Z1*A-1)>m1)k.c=k.e=null;else if(Z1=10;K1/=10,N1++);if(F1=a-N1,F1<0)F1+=A,O1=a,R1=W1[h1=0],j=C(R1/U1[N1-O1-1]%10);else if(h1=Z((F1+1)/A),h1>=W1.length)if(Q1){for(;W1.length<=h1;W1.push(0));R1=j=0,N1=1,F1%=A,O1=F1-A+1}else break I;else{R1=K1=W1[h1];for(N1=1;K1>=10;K1/=10,N1++);F1%=A,O1=F1-A+N1,j=O1<0?0:C(R1/U1[N1-O1-1]%10)}if(Q1=Q1||a<0||W1[h1+1]!=null||(O1<0?R1:R1%U1[N1-O1-1]),Q1=Z1<4?(j||Q1)&&(Z1==0||Z1==(k.s<0?3:2)):j>5||j==5&&(Z1==4||Q1||Z1==6&&(F1>0?O1>0?R1/U1[N1-O1]:0:W1[h1-1])%10&1||Z1==(k.s<0?8:7)),a<1||!W1[0]){if(W1.length=0,Q1)a-=k.e+1,W1[0]=U1[(A-a%A)%A],k.e=-a||0;else W1[0]=k.e=0;return k}if(F1==0)W1.length=h1,K1=1,h1--;else W1.length=h1+1,K1=U1[A-F1],W1[h1]=O1>0?C(R1/U1[N1-O1]%U1[O1])*K1:0;if(Q1)for(;;)if(h1==0){for(F1=1,O1=W1[0];O1>=10;O1/=10,F1++);O1=W1[0]+=K1;for(K1=1;O1>=10;O1/=10,K1++);if(F1!=K1){if(k.e++,W1[0]==B)W1[0]=1}break}else{if(W1[h1]+=K1,W1[h1]!=B)break;W1[h1--]=0,K1=1}for(F1=W1.length;W1[--F1]===0;W1.pop());}if(k.e>m1)k.c=k.e=null;else if(k.e=r?P(a,Z1):$(a,Z1,"0"),k.s<0?"-"+a:a}if(c.absoluteValue=c.abs=function(){var k=new e(this);if(k.s<0)k.s=1;return k},c.comparedTo=function(k,a){return Q(this,new e(k,a))},c.decimalPlaces=c.dp=function(k,a){var Z1,Q1,N1,F1=this;if(k!=null){if(E(k,0,F),a==null)a=a1;else E(a,0,8);return i1(new e(F1),k+F1.e+1,a)}if(!(Z1=F1.c))return null;if(Q1=((N1=Z1.length-1)-J(this.e/A))*A,N1=Z1[N1])for(;N1%10==0;N1/=10,Q1--);if(Q1<0)Q1=0;return Q1},c.dividedBy=c.div=function(k,a){return O(this,new e(k,a),o1,a1)},c.dividedToIntegerBy=c.idiv=function(k,a){return O(this,new e(k,a),0,1)},c.exponentiatedBy=c.pow=function(k,a){var Z1,Q1,N1,F1,O1,K1,R1,h1,j,W1=this;if(k=new e(k),k.c&&!k.isInteger())throw Error(W+"Exponent not an integer: "+E0(k));if(a!=null)a=new e(a);if(K1=k.e>14,!W1.c||!W1.c[0]||W1.c[0]==1&&!W1.e&&W1.c.length==1||!k.c||!k.c[0])return j=new e(Math.pow(+E0(W1),K1?k.s*(2-S(k)):+E0(k))),a?j.mod(a):j;if(R1=k.s<0,a){if(a.c?!a.c[0]:!a.s)return new e(NaN);if(Q1=!R1&&W1.isInteger()&&a.isInteger(),Q1)W1=W1.mod(a)}else if(k.e>9&&(W1.e>0||W1.e<-1||(W1.e==0?W1.c[0]>1||K1&&W1.c[1]>=240000000:W1.c[0]<80000000000000||K1&&W1.c[0]<=99999750000000))){if(F1=W1.s<0&&S(k)?-0:0,W1.e>-1)F1=1/F1;return new e(R1?1/F1:F1)}else if(F0)F1=Z(F0/A+2);if(K1){if(Z1=new e(0.5),R1)k.s=1;h1=S(k)}else N1=Math.abs(+E0(k)),h1=N1%2;j=new e(c1);for(;;){if(h1){if(j=j.times(W1),!j.c)break;if(F1){if(j.c.length>F1)j.c.length=F1}else if(Q1)j=j.mod(a)}if(N1){if(N1=C(N1/2),N1===0)break;h1=N1%2}else if(k=k.times(Z1),i1(k,k.e+1,1),k.e>14)h1=S(k);else{if(N1=+E0(k),N1===0)break;h1=N1%2}if(W1=W1.times(W1),F1){if(W1.c&&W1.c.length>F1)W1.c.length=F1}else if(Q1)W1=W1.mod(a)}if(Q1)return j;if(R1)j=c1.div(j);return a?j.mod(a):F1?i1(j,F0,a1,O1):j},c.integerValue=function(k){var a=new e(this);if(k==null)k=a1;else E(k,0,8);return i1(a,a.e+1,k)},c.isEqualTo=c.eq=function(k,a){return Q(this,new e(k,a))===0},c.isFinite=function(){return!!this.c},c.isGreaterThan=c.gt=function(k,a){return Q(this,new e(k,a))>0},c.isGreaterThanOrEqualTo=c.gte=function(k,a){return(a=Q(this,new e(k,a)))===1||a===0},c.isInteger=function(){return!!this.c&&J(this.e/A)>this.c.length-2},c.isLessThan=c.lt=function(k,a){return Q(this,new e(k,a))<0},c.isLessThanOrEqualTo=c.lte=function(k,a){return(a=Q(this,new e(k,a)))===-1||a===0},c.isNaN=function(){return!this.s},c.isNegative=function(){return this.s<0},c.isPositive=function(){return this.s>0},c.isZero=function(){return!!this.c&&this.c[0]==0},c.minus=function(k,a){var Z1,Q1,N1,F1,O1=this,K1=O1.s;if(k=new e(k,a),a=k.s,!K1||!a)return new e(NaN);if(K1!=a)return k.s=-a,O1.plus(k);var R1=O1.e/A,h1=k.e/A,j=O1.c,W1=k.c;if(!R1||!h1){if(!j||!W1)return j?(k.s=-a,k):new e(W1?O1:NaN);if(!j[0]||!W1[0])return W1[0]?(k.s=-a,k):new e(j[0]?O1:a1==3?-0:0)}if(R1=J(R1),h1=J(h1),j=j.slice(),K1=R1-h1){if(F1=K1<0)K1=-K1,N1=j;else h1=R1,N1=W1;N1.reverse();for(a=K1;a--;N1.push(0));N1.reverse()}else{Q1=(F1=(K1=j.length)<(a=W1.length))?K1:a;for(K1=a=0;a0)for(;a--;j[Z1++]=0);a=B-1;for(;Q1>K1;){if(j[--Q1]=0;){Z1=0,U1=P2[N1]%k0,L1=P2[N1]/k0|0;for(O1=R1,F1=N1+O1;F1>N1;)h1=s0[--O1]%k0,j=s0[O1]/k0|0,K1=L1*h1+j*U1,h1=U1*h1+K1%k0*k0+D0[F1]+Z1,Z1=(h1/O0|0)+(K1/k0|0)+L1*j,D0[F1--]=h1%O0;D0[F1]=Z1}if(Z1)++Q1;else D0.splice(0,1);return j1(k,D0,Q1)},c.negated=function(){var k=new e(this);return k.s=-k.s||null,k},c.plus=function(k,a){var Z1,Q1=this,N1=Q1.s;if(k=new e(k,a),a=k.s,!N1||!a)return new e(NaN);if(N1!=a)return k.s=-a,Q1.minus(k);var F1=Q1.e/A,O1=k.e/A,K1=Q1.c,R1=k.c;if(!F1||!O1){if(!K1||!R1)return new e(N1/0);if(!K1[0]||!R1[0])return R1[0]?k:new e(K1[0]?Q1:N1*0)}if(F1=J(F1),O1=J(O1),K1=K1.slice(),N1=F1-O1){if(N1>0)O1=F1,Z1=R1;else N1=-N1,Z1=K1;Z1.reverse();for(;N1--;Z1.push(0));Z1.reverse()}if(N1=K1.length,a=R1.length,N1-a<0)Z1=R1,R1=K1,K1=Z1,a=N1;for(N1=0;a;)N1=(K1[--a]=K1[a]+R1[a]+N1)/B|0,K1[a]=B===K1[a]?0:K1[a]%B;if(N1)K1=[N1].concat(K1),++O1;return j1(k,K1,O1)},c.precision=c.sd=function(k,a){var Z1,Q1,N1,F1=this;if(k!=null&&k!==!!k){if(E(k,1,F),a==null)a=a1;else E(a,0,8);return i1(new e(F1),k,a)}if(!(Z1=F1.c))return null;if(N1=Z1.length-1,Q1=N1*A+1,N1=Z1[N1]){for(;N1%10==0;N1/=10,Q1--);for(N1=Z1[0];N1>=10;N1/=10,Q1++);}if(k&&F1.e+1>Q1)Q1=F1.e+1;return Q1},c.shiftedBy=function(k){return E(k,-V,V),this.times("1e"+k)},c.squareRoot=c.sqrt=function(){var k,a,Z1,Q1,N1,F1=this,O1=F1.c,K1=F1.s,R1=F1.e,h1=o1+4,j=new e("0.5");if(K1!==1||!O1||!O1[0])return new e(!K1||K1<0&&(!O1||O1[0])?NaN:O1?F1:1/0);if(K1=Math.sqrt(+E0(F1)),K1==0||K1==1/0){if(a=K(O1),(a.length+R1)%2==0)a+="0";if(K1=Math.sqrt(+a),R1=J((R1+1)/2)-(R1<0||R1%2),K1==1/0)a="5e"+R1;else a=K1.toExponential(),a=a.slice(0,a.indexOf("e")+1)+R1;Z1=new e(a)}else Z1=new e(K1+"");if(Z1.c[0]){if(R1=Z1.e,K1=R1+h1,K1<3)K1=0;for(;;)if(N1=Z1,Z1=j.times(N1.plus(O(F1,N1,h1,1))),K(N1.c).slice(0,K1)===(a=K(Z1.c)).slice(0,K1)){if(Z1.e0&&D0>0){F1=D0%K1||K1,j=L1.substr(0,F1);for(;F10)j+=h1+L1.slice(F1);if(U1)j="-"+j}Q1=W1?j+(Z1.decimalSeparator||"")+((R1=+Z1.fractionGroupSize)?W1.replace(new RegExp("\\d{"+R1+"}\\B","g"),"$&"+(Z1.fractionGroupSeparator||"")):W1):j}return(Z1.prefix||"")+Q1+(Z1.suffix||"")},c.toFraction=function(k){var a,Z1,Q1,N1,F1,O1,K1,R1,h1,j,W1,U1,L1=this,D0=L1.c;if(k!=null){if(K1=new e(k),!K1.isInteger()&&(K1.c||K1.s!==1)||K1.lt(c1))throw Error(W+"Argument "+(K1.isInteger()?"out of range: ":"not an integer: ")+E0(K1))}if(!D0)return new e(L1);a=new e(c1),h1=Z1=new e(c1),Q1=R1=new e(c1),U1=K(D0),F1=a.e=U1.length-L1.e-1,a.c[0]=X[(O1=F1%A)<0?A+O1:O1],k=!k||K1.comparedTo(a)>0?F1>0?a:h1:K1,O1=m1,m1=1/0,K1=new e(U1),R1.c[0]=0;for(;;){if(j=O(K1,a,0,1),N1=Z1.plus(j.times(Q1)),N1.comparedTo(k)==1)break;Z1=Q1,Q1=N1,h1=R1.plus(j.times(N1=h1)),R1=N1,a=K1.minus(j.times(N1=a)),K1=N1}return N1=O(k.minus(Z1),Q1,0,1),R1=R1.plus(N1.times(h1)),Z1=Z1.plus(N1.times(Q1)),R1.s=h1.s=L1.s,F1=F1*2,W1=O(h1,Q1,F1,a1).minus(L1).abs().comparedTo(O(R1,Z1,F1,a1).minus(L1).abs())<1?[h1,Q1]:[R1,Z1],m1=O1,W1},c.toNumber=function(){return+E0(this)},c.toPrecision=function(k,a){if(k!=null)E(k,1,F);return G0(this,k,a,2)},c.toString=function(k){var a,Z1=this,Q1=Z1.s,N1=Z1.e;if(N1===null)if(Q1){if(a="Infinity",Q1<0)a="-"+a}else a="NaN";else{if(k==null)a=N1<=f1||N1>=r?P(K(Z1.c),N1):$(K(Z1.c),N1,"0");else if(k===10&&a0)Z1=i1(new e(Z1),o1+N1+1,a1),a=$(K(Z1.c),Z1.e,"0");else E(k,2,B0.length,"Base"),a=T($(K(Z1.c),N1,"0"),10,k,Q1,!0);if(Q1<0&&Z1.c[0])a="-"+a}return a},c.valueOf=c.toJSON=function(){return E0(this)},c._isBigNumber=!0,h!=null)e.set(h);return e}function J(h){var O=h|0;return h>0||h===O?O:O-1}function K(h){var O,T,V1=1,c=h.length,c1=h[0]+"";for(;V1r^T?1:-1;a1=(f1=c.length)<(r=c1.length)?f1:r;for(o1=0;o1c1[o1]^T?1:-1;return f1==r?0:f1>r^T?1:-1}function E(h,O,T,V1){if(hT||h!==C(h))throw Error(W+(V1||"Argument")+(typeof h=="number"?hT?" out of range: ":" not an integer: ":" not a primitive number: ")+String(h))}function S(h){var O=h.c.length-1;return J(h.e/A)==O&&h.c[O]%2!=0}function P(h,O){return(h.length>1?h.charAt(0)+"."+h.slice(1):h)+(O<0?"e":"e+")+O}function $(h,O,T){var V1,c;if(O<0){for(c=T+".";++O;c+=T);h=c+h}else if(V1=h.length,++O>V1){for(c=T,O-=V1;--O;c+=T);h+=c}else if(O{var pI2=iD1(),iI2=cA3;(function(){function I(V){return V<10?"0"+V:V}var d=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,G=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,Z,C,W={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':"\\\"","\\":"\\\\"},w;function B(V){return G.lastIndex=0,G.test(V)?'"'+V.replace(G,function(X){var _=W[X];return typeof _==="string"?_:"\\u"+("0000"+X.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+V+'"'}function A(V,X){var _,F,g,J,K=Z,Q,E=X[V],S=E!=null&&(E instanceof pI2||pI2.isBigNumber(E));if(E&&typeof E==="object"&&typeof E.toJSON==="function")E=E.toJSON(V);if(typeof w==="function")E=w.call(X,V,E);switch(typeof E){case"string":if(S)return E;else return B(E);case"number":return isFinite(E)?String(E):"null";case"boolean":case"null":case"bigint":return String(E);case"object":if(!E)return"null";if(Z+=C,Q=[],Object.prototype.toString.apply(E)==="[object Array]"){J=E.length;for(_=0;_{var jr=null,wp5=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,Bp5=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/,Ap5=function(I){var d={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(I!==void 0&&I!==null){if(I.strict===!0)d.strict=!0;if(I.storeAsString===!0)d.storeAsString=!0;if(d.alwaysParseAsBig=I.alwaysParseAsBig===!0?I.alwaysParseAsBig:!1,d.useNativeBigInt=I.useNativeBigInt===!0?I.useNativeBigInt:!1,typeof I.constructorAction!=="undefined")if(I.constructorAction==="error"||I.constructorAction==="ignore"||I.constructorAction==="preserve")d.constructorAction=I.constructorAction;else throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${I.constructorAction}`);if(typeof I.protoAction!=="undefined")if(I.protoAction==="error"||I.protoAction==="ignore"||I.protoAction==="preserve")d.protoAction=I.protoAction;else throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${I.protoAction}`)}var G,Z,C={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` +`,r:"\r",t:"\t"},W,w=function(K){throw{name:"SyntaxError",message:K,at:G,text:W}},B=function(K){if(K&&K!==Z)w("Expected '"+K+"' instead of '"+Z+"'");return Z=W.charAt(G),G+=1,Z},A=function(){var K,Q="";if(Z==="-")Q="-",B("-");while(Z>="0"&&Z<="9")Q+=Z,B();if(Z==="."){Q+=".";while(B()&&Z>="0"&&Z<="9")Q+=Z}if(Z==="e"||Z==="E"){if(Q+=Z,B(),Z==="-"||Z==="+")Q+=Z,B();while(Z>="0"&&Z<="9")Q+=Z,B()}if(K=+Q,!isFinite(K))w("Bad number");else{if(jr==null)jr=iD1();if(Q.length>15)return d.storeAsString?Q:d.useNativeBigInt?BigInt(Q):new jr(Q);else return!d.alwaysParseAsBig?K:d.useNativeBigInt?BigInt(K):new jr(K)}},V=function(){var K,Q,E="",S;if(Z==='"'){var P=G;while(B()){if(Z==='"'){if(G-1>P)E+=W.substring(P,G-1);return B(),E}if(Z==="\\"){if(G-1>P)E+=W.substring(P,G-1);if(B(),Z==="u"){S=0;for(Q=0;Q<4;Q+=1){if(K=parseInt(B(),16),!isFinite(K))break;S=S*16+K}E+=String.fromCharCode(S)}else if(typeof C[Z]==="string")E+=C[Z];else break;P=G}}}w("Bad string")},X=function(){while(Z&&Z<=" ")B()},_=function(){switch(Z){case"t":return B("t"),B("r"),B("u"),B("e"),!0;case"f":return B("f"),B("a"),B("l"),B("s"),B("e"),!1;case"n":return B("n"),B("u"),B("l"),B("l"),null}w("Unexpected '"+Z+"'")},F,g=function(){var K=[];if(Z==="["){if(B("["),X(),Z==="]")return B("]"),K;while(Z){if(K.push(F()),X(),Z==="]")return B("]"),K;B(","),X()}}w("Bad array")},J=function(){var K,Q=Object.create(null);if(Z==="{"){if(B("{"),X(),Z==="}")return B("}"),Q;while(Z){if(K=V(),X(),B(":"),d.strict===!0&&Object.hasOwnProperty.call(Q,K))w('Duplicate key "'+K+'"');if(wp5.test(K)===!0)if(d.protoAction==="error")w("Object contains forbidden prototype property");else if(d.protoAction==="ignore")F();else Q[K]=F();else if(Bp5.test(K)===!0)if(d.constructorAction==="error")w("Object contains forbidden constructor property");else if(d.constructorAction==="ignore")F();else Q[K]=F();else Q[K]=F();if(X(),Z==="}")return B("}"),Q;B(","),X()}}w("Bad object")};return F=function(){switch(X(),Z){case"{":return J();case"[":return g();case'"':return V();case"-":return A();default:return Z>="0"&&Z<="9"?A():_()}},function(K,Q){var E;if(W=K+"",G=0,Z=" ",E=F(),X(),Z)w("Syntax error");return typeof Q==="function"?function S(P,$){var h,O,T=P[$];if(T&&typeof T==="object")Object.keys(T).forEach(function(V1){if(O=S(T,V1),O!==void 0)T[V1]=O;else delete T[V1]});return Q.call(P,$,T)}({"":E},""):E}};aI2.exports=Ap5});var tI2=Y((iA3,kr)=>{var oI2=rI2().stringify,eI2=sI2();kr.exports=function(I){return{parse:eI2(I),stringify:oI2}};kr.exports.parse=eI2();kr.exports.stringify=oI2});var nD1=Y((wd2)=>{Object.defineProperty(wd2,"__esModule",{value:!0});wd2.GCE_LINUX_BIOS_PATHS=void 0;wd2.isGoogleCloudServerless=Gd2;wd2.isGoogleComputeEngineLinux=Zd2;wd2.isGoogleComputeEngineMACAddress=Cd2;wd2.isGoogleComputeEngine=Wd2;wd2.detectGCPResidency=Xp5;var Id2=B1("fs"),dd2=B1("os");wd2.GCE_LINUX_BIOS_PATHS={BIOS_DATE:"/sys/class/dmi/id/bios_date",BIOS_VENDOR:"/sys/class/dmi/id/bios_vendor"};var Vp5=/^42:01/;function Gd2(){return!!(process.env.CLOUD_RUN_JOB||process.env.FUNCTION_NAME||process.env.K_SERVICE)}function Zd2(){if(dd2.platform()!=="linux")return!1;try{Id2.statSync(wd2.GCE_LINUX_BIOS_PATHS.BIOS_DATE);let I=Id2.readFileSync(wd2.GCE_LINUX_BIOS_PATHS.BIOS_VENDOR,"utf8");return/Google/.test(I)}catch(I){return!1}}function Cd2(){let I=dd2.networkInterfaces();for(let d of Object.values(I)){if(!d)continue;for(let{mac:G}of d)if(Vp5.test(G))return!0}return!1}function Wd2(){return Zd2()||Cd2()}function Xp5(){return Gd2()||Wd2()}});var Vd2=Y((Bd2)=>{Object.defineProperty(Bd2,"__esModule",{value:!0});Bd2.Colours=void 0;class j4{static isEnabled(I){return I.isTTY&&(typeof I.getColorDepth==="function"?I.getColorDepth()>2:!0)}static refresh(){if(j4.enabled=j4.isEnabled(process.stderr),!this.enabled)j4.reset="",j4.bright="",j4.dim="",j4.red="",j4.green="",j4.yellow="",j4.blue="",j4.magenta="",j4.cyan="",j4.white="",j4.grey="";else j4.reset="\x1B[0m",j4.bright="\x1B[1m",j4.dim="\x1B[2m",j4.red="\x1B[31m",j4.green="\x1B[32m",j4.yellow="\x1B[33m",j4.blue="\x1B[34m",j4.magenta="\x1B[35m",j4.cyan="\x1B[36m",j4.white="\x1B[37m",j4.grey="\x1B[90m"}}Bd2.Colours=j4;j4.enabled=!1;j4.reset="";j4.bright="";j4.dim="";j4.red="";j4.green="";j4.yellow="";j4.blue="";j4.magenta="";j4.cyan="";j4.white="";j4.grey="";j4.refresh()});var Fd2=Y((_9)=>{var gp5=_9&&_9.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),Jp5=_9&&_9.__setModuleDefault||(Object.create?function(I,d){Object.defineProperty(I,"default",{enumerable:!0,value:d})}:function(I,d){I.default=d}),Xd2=_9&&_9.__importStar||function(I){if(I&&I.__esModule)return I;var d={};if(I!=null){for(var G in I)if(G!=="default"&&Object.prototype.hasOwnProperty.call(I,G))gp5(d,I,G)}return Jp5(d,I),d};Object.defineProperty(_9,"__esModule",{value:!0});_9.env=_9.DebugLogBackendBase=_9.placeholder=_9.AdhocDebugLogger=_9.LogSeverity=void 0;_9.getNodeBackend=rD1;_9.getDebugBackend=Np5;_9.getStructuredBackend=zp5;_9.setBackend=Qp5;_9.log=Hd2;var Kp5=B1("node:events"),nP=Xd2(B1("node:process")),Yd2=Xd2(B1("node:util")),BG=Vd2(),GW;(function(I){I.DEFAULT="DEFAULT",I.DEBUG="DEBUG",I.INFO="INFO",I.WARNING="WARNING",I.ERROR="ERROR"})(GW||(_9.LogSeverity=GW={}));class cr extends Kp5.EventEmitter{constructor(I,d){super();this.namespace=I,this.upstream=d,this.func=Object.assign(this.invoke.bind(this),{instance:this,on:(G,Z)=>this.on(G,Z)}),this.func.debug=(...G)=>this.invokeSeverity(GW.DEBUG,...G),this.func.info=(...G)=>this.invokeSeverity(GW.INFO,...G),this.func.warn=(...G)=>this.invokeSeverity(GW.WARNING,...G),this.func.error=(...G)=>this.invokeSeverity(GW.ERROR,...G),this.func.sublog=(G)=>Hd2(G,this.func)}invoke(I,...d){if(this.upstream)this.upstream(I,...d);this.emit("log",I,d)}invokeSeverity(I,...d){this.invoke({severity:I},...d)}}_9.AdhocDebugLogger=cr;_9.placeholder=new cr("",()=>{}).func;class rP{constructor(){var I;this.cached=new Map,this.filters=[],this.filtersSet=!1;let d=(I=nP.env[_9.env.nodeEnables])!==null&&I!==void 0?I:"*";if(d==="all")d="*";this.filters=d.split(",")}log(I,d,...G){try{if(!this.filtersSet)this.setFilters(),this.filtersSet=!0;let Z=this.cached.get(I);if(!Z)Z=this.makeLogger(I),this.cached.set(I,Z);Z(d,...G)}catch(Z){console.error(Z)}}}_9.DebugLogBackendBase=rP;class sD1 extends rP{constructor(){super(...arguments);this.enabledRegexp=/.*/g}isEnabled(I){return this.enabledRegexp.test(I)}makeLogger(I){if(!this.enabledRegexp.test(I))return()=>{};return(d,...G)=>{var Z;let C=`${BG.Colours.green}${I}${BG.Colours.reset}`,W=`${BG.Colours.yellow}${nP.pid}${BG.Colours.reset}`,w;switch(d.severity){case GW.ERROR:w=`${BG.Colours.red}${d.severity}${BG.Colours.reset}`;break;case GW.INFO:w=`${BG.Colours.magenta}${d.severity}${BG.Colours.reset}`;break;case GW.WARNING:w=`${BG.Colours.yellow}${d.severity}${BG.Colours.reset}`;break;default:w=(Z=d.severity)!==null&&Z!==void 0?Z:GW.DEFAULT;break}let B=Yd2.formatWithOptions({colors:BG.Colours.enabled},...G),A=Object.assign({},d);delete A.severity;let V=Object.getOwnPropertyNames(A).length?JSON.stringify(A):"",X=V?`${BG.Colours.grey}${V}${BG.Colours.reset}`:"";console.error("%s [%s|%s] %s%s",W,C,w,B,V?` ${X}`:"")}}setFilters(){let d=this.filters.join(",").replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".*").replace(/,/g,"$|^");this.enabledRegexp=new RegExp(`^${d}$`,"i")}}function rD1(){return new sD1}class _d2 extends rP{constructor(I){super();this.debugPkg=I}makeLogger(I){let d=this.debugPkg(I);return(G,...Z)=>{d(Z[0],...Z.slice(1))}}setFilters(){var I;let d=(I=nP.env.NODE_DEBUG)!==null&&I!==void 0?I:"";nP.env.NODE_DEBUG=`${d}${d?",":""}${this.filters.join(",")}`}}function Np5(I){return new _d2(I)}class Dd2 extends rP{constructor(I){var d;super();this.upstream=(d=I)!==null&&d!==void 0?d:new sD1}makeLogger(I){let d=this.upstream.makeLogger(I);return(G,...Z)=>{var C;let W=(C=G.severity)!==null&&C!==void 0?C:GW.INFO,w=Object.assign({severity:W,message:Yd2.format(...Z)},G),B=JSON.stringify(w);d(G,B)}}setFilters(){this.upstream.setFilters()}}function zp5(I){return new Dd2(I)}_9.env={nodeEnables:"GOOGLE_SDK_NODE_LOGGING"};var aD1=new Map,mZ=void 0;function Qp5(I){mZ=I,aD1.clear()}function Hd2(I,d){if(!nP.env[_9.env.nodeEnables])return _9.placeholder;if(!I)return _9.placeholder;if(d)I=`${d.instance.namespace}:${I}`;let Z=aD1.get(I);if(Z)return Z.func;if(mZ===null)return _9.placeholder;else if(mZ===void 0)mZ=rD1();let C=(()=>{let W=void 0;return new cr(I,(B,...A)=>{if(W!==mZ){if(mZ===null)return;else if(mZ===void 0)mZ=rD1();W=mZ}mZ===null||mZ===void 0||mZ.log(I,B,...A)})})();return aD1.set(I,C),C.func}});var gd2=Y((PJ)=>{var fp5=PJ&&PJ.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),qp5=PJ&&PJ.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))fp5(d,I,G)};Object.defineProperty(PJ,"__esModule",{value:!0});qp5(Fd2(),PJ)});var sP=Y((I4)=>{var Rp5=I4&&I4.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;var C=Object.getOwnPropertyDescriptor(d,G);if(!C||("get"in C?!d.__esModule:C.writable||C.configurable))C={enumerable:!0,get:function(){return d[G]}};Object.defineProperty(I,Z,C)}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),Up5=I4&&I4.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))Rp5(d,I,G)};Object.defineProperty(I4,"__esModule",{value:!0});I4.gcpResidencyCache=I4.METADATA_SERVER_DETECTION=I4.HEADERS=I4.HEADER_VALUE=I4.HEADER_NAME=I4.SECONDARY_HOST_ADDRESS=I4.HOST_ADDRESS=I4.BASE_PATH=void 0;I4.instance=yp5;I4.project=Pp5;I4.universe=$p5;I4.bulk=up5;I4.isAvailable=Op5;I4.resetIsAvailableCache=mp5;I4.getGCPResidency=tD1;I4.setGCPResidency=Kd2;I4.requestTimeout=Nd2;var oD1=dW(),vp5=tI2(),Ep5=nD1(),Mp5=gd2();I4.BASE_PATH="/computeMetadata/v1";I4.HOST_ADDRESS="http://169.254.169.254";I4.SECONDARY_HOST_ADDRESS="http://metadata.google.internal.";I4.HEADER_NAME="Metadata-Flavor";I4.HEADER_VALUE="Google";I4.HEADERS=Object.freeze({[I4.HEADER_NAME]:I4.HEADER_VALUE});var Jd2=Mp5.log("gcp metadata");I4.METADATA_SERVER_DETECTION=Object.freeze({"assume-present":"don't try to ping the metadata server, but assume it's present",none:"don't try to ping the metadata server, but don't try to use it either","bios-only":"treat the result of a BIOS probe as canonical (don't fall back to pinging)","ping-only":"skip the BIOS probe, and go straight to pinging"});function eD1(I){if(!I)I=process.env.GCE_METADATA_IP||process.env.GCE_METADATA_HOST||I4.HOST_ADDRESS;if(!/^https?:\/\//.test(I))I=`http://${I}`;return new URL(I4.BASE_PATH,I).href}function Sp5(I){Object.keys(I).forEach((d)=>{switch(d){case"params":case"property":case"headers":break;case"qs":throw new Error("'qs' is not a valid configuration option. Please use 'params' instead.");default:throw new Error(`'${d}' is not a valid configuration option.`)}})}async function aP(I,d={},G=3,Z=!1){let C="",W={},w={};if(typeof I==="object"){let X=I;C=X.metadataKey,W=X.params||W,w=X.headers||w,G=X.noResponseRetries||G,Z=X.fastFail||Z}else C=I;if(typeof d==="string")C+=`/${d}`;else{if(Sp5(d),d.property)C+=`/${d.property}`;w=d.headers||w,W=d.params||W}let B=Z?Lp5:oD1.request,A={url:`${eD1()}/${C}`,headers:{...I4.HEADERS,...w},retryConfig:{noResponseRetries:G},params:W,responseType:"text",timeout:Nd2()};Jd2.info("instance request %j",A);let V=await B(A);if(Jd2.info("instance metadata is %s",V.data),V.headers[I4.HEADER_NAME.toLowerCase()]!==I4.HEADER_VALUE)throw new Error(`Invalid response from metadata service: incorrect ${I4.HEADER_NAME} header. Expected '${I4.HEADER_VALUE}', got ${V.headers[I4.HEADER_NAME.toLowerCase()]?`'${V.headers[I4.HEADER_NAME.toLowerCase()]}'`:"no header"}`);if(typeof V.data==="string")try{return vp5.parse(V.data)}catch(X){}return V.data}async function Lp5(I){var d;let G={...I,url:(d=I.url)===null||d===void 0?void 0:d.toString().replace(eD1(),eD1(I4.SECONDARY_HOST_ADDRESS))},Z=!1,C=oD1.request(I).then((w)=>{return Z=!0,w}).catch((w)=>{if(Z)return W;else throw Z=!0,w}),W=oD1.request(G).then((w)=>{return Z=!0,w}).catch((w)=>{if(Z)return C;else throw Z=!0,w});return Promise.race([C,W])}function yp5(I){return aP("instance",I)}function Pp5(I){return aP("project",I)}function $p5(I){return aP("universe",I)}async function up5(I){let d={};return await Promise.all(I.map((G)=>{return(async()=>{let Z=await aP(G),C=G.metadataKey;d[C]=Z})()})),d}function Tp5(){return process.env.DETECT_GCP_RETRIES?Number(process.env.DETECT_GCP_RETRIES):0}var pr;async function Op5(){if(process.env.METADATA_SERVER_DETECTION){let I=process.env.METADATA_SERVER_DETECTION.trim().toLocaleLowerCase();if(!(I in I4.METADATA_SERVER_DETECTION))throw new RangeError(`Unknown \`METADATA_SERVER_DETECTION\` env variable. Got \`${I}\`, but it should be \`${Object.keys(I4.METADATA_SERVER_DETECTION).join("`, `")}\`, or unset`);switch(I){case"assume-present":return!0;case"none":return!1;case"bios-only":return tD1();case"ping-only":}}try{if(pr===void 0)pr=aP("instance",void 0,Tp5(),!(process.env.GCE_METADATA_IP||process.env.GCE_METADATA_HOST));return await pr,!0}catch(I){let d=I;if(process.env.DEBUG_AUTH)console.info(d);if(d.type==="request-timeout")return!1;if(d.response&&d.response.status===404)return!1;else{if(!(d.response&&d.response.status===404)&&(!d.code||!["EHOSTDOWN","EHOSTUNREACH","ENETUNREACH","ENOENT","ENOTFOUND","ECONNREFUSED"].includes(d.code))){let G="UNKNOWN";if(d.code)G=d.code;process.emitWarning(`received unexpected error = ${d.message} code = ${G}`,"MetadataLookupWarning")}return!1}}}function mp5(){pr=void 0}I4.gcpResidencyCache=null;function tD1(){if(I4.gcpResidencyCache===null)Kd2();return I4.gcpResidencyCache}function Kd2(I=null){I4.gcpResidencyCache=I!==null?I:Ep5.detectGCPResidency()}function Nd2(){return tD1()?0:3000}Up5(nD1(),I4)});var fd2=Y((pp5)=>{pp5.byteLength=bp5;pp5.toByteArray=jp5;pp5.fromByteArray=cp5;var qB=[],lZ=[],lp5=typeof Uint8Array!=="undefined"?Uint8Array:Array,IH1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for($J=0,zd2=IH1.length;$J0)throw new Error("Invalid string. Length must be a multiple of 4");var G=I.indexOf("=");if(G===-1)G=d;var Z=G===d?0:4-G%4;return[G,Z]}function bp5(I){var d=Qd2(I),G=d[0],Z=d[1];return(G+Z)*3/4-Z}function hp5(I,d,G){return(d+G)*3/4-G}function jp5(I){var d,G=Qd2(I),Z=G[0],C=G[1],W=new lp5(hp5(I,Z,C)),w=0,B=C>0?Z-4:Z,A;for(A=0;A>16&255,W[w++]=d>>8&255,W[w++]=d&255;if(C===2)d=lZ[I.charCodeAt(A)]<<2|lZ[I.charCodeAt(A+1)]>>4,W[w++]=d&255;if(C===1)d=lZ[I.charCodeAt(A)]<<10|lZ[I.charCodeAt(A+1)]<<4|lZ[I.charCodeAt(A+2)]>>2,W[w++]=d>>8&255,W[w++]=d&255;return W}function kp5(I){return qB[I>>18&63]+qB[I>>12&63]+qB[I>>6&63]+qB[I&63]}function xp5(I,d,G){var Z,C=[];for(var W=d;WB?B:w+W));if(Z===1)d=I[G-1],C.push(qB[d>>2]+qB[d<<4&63]+"==");else if(Z===2)d=(I[G-2]<<8)+I[G-1],C.push(qB[d>>10]+qB[d>>4&63]+qB[d<<2&63]+"=");return C.join("")}});var Ud2=Y((qd2)=>{Object.defineProperty(qd2,"__esModule",{value:!0});qd2.BrowserCrypto=void 0;var bq=fd2(),ap5=hq();class ir{constructor(){if(typeof window==="undefined"||window.crypto===void 0||window.crypto.subtle===void 0)throw new Error("SubtleCrypto not found. Make sure it's an https:// website.")}async sha256DigestBase64(I){let d=new TextEncoder().encode(I),G=await window.crypto.subtle.digest("SHA-256",d);return bq.fromByteArray(new Uint8Array(G))}randomBytesBase64(I){let d=new Uint8Array(I);return window.crypto.getRandomValues(d),bq.fromByteArray(d)}static padBase64(I){while(I.length%4!==0)I+="=";return I}async verify(I,d,G){let Z={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},C=new TextEncoder().encode(d),W=bq.toByteArray(ir.padBase64(G)),w=await window.crypto.subtle.importKey("jwk",I,Z,!0,["verify"]);return await window.crypto.subtle.verify(Z,w,W,C)}async sign(I,d){let G={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},Z=new TextEncoder().encode(d),C=await window.crypto.subtle.importKey("jwk",I,G,!0,["sign"]),W=await window.crypto.subtle.sign(G,C,Z);return bq.fromByteArray(new Uint8Array(W))}decodeBase64StringUtf8(I){let d=bq.toByteArray(ir.padBase64(I));return new TextDecoder().decode(d)}encodeBase64StringUtf8(I){let d=new TextEncoder().encode(I);return bq.fromByteArray(d)}async sha256DigestHex(I){let d=new TextEncoder().encode(I),G=await window.crypto.subtle.digest("SHA-256",d);return ap5.fromArrayBufferToHex(G)}async signWithHmacSha256(I,d){let G=typeof I==="string"?I:String.fromCharCode(...new Uint16Array(I)),Z=new TextEncoder,C=await window.crypto.subtle.importKey("raw",Z.encode(G),{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);return window.crypto.subtle.sign("HMAC",C,Z.encode(d))}}qd2.BrowserCrypto=ir});var Sd2=Y((Ed2)=>{Object.defineProperty(Ed2,"__esModule",{value:!0});Ed2.NodeCrypto=void 0;var jq=B1("crypto");class vd2{async sha256DigestBase64(I){return jq.createHash("sha256").update(I).digest("base64")}randomBytesBase64(I){return jq.randomBytes(I).toString("base64")}async verify(I,d,G){let Z=jq.createVerify("RSA-SHA256");return Z.update(d),Z.end(),Z.verify(I,G,"base64")}async sign(I,d){let G=jq.createSign("RSA-SHA256");return G.update(d),G.end(),G.sign(I,"base64")}decodeBase64StringUtf8(I){return Buffer.from(I,"base64").toString("utf-8")}encodeBase64StringUtf8(I){return Buffer.from(I,"utf-8").toString("base64")}async sha256DigestHex(I){return jq.createHash("sha256").update(I).digest("hex")}async signWithHmacSha256(I,d){let G=typeof I==="string"?I:op5(I);return sp5(jq.createHmac("sha256",G).update(d).digest())}}Ed2.NodeCrypto=vd2;function sp5(I){return I.buffer.slice(I.byteOffset,I.byteOffset+I.byteLength)}function op5(I){return Buffer.from(I)}});var hq=Y((yd2)=>{Object.defineProperty(yd2,"__esModule",{value:!0});yd2.createCrypto=Ii5;yd2.hasBrowserCrypto=Ld2;yd2.fromArrayBufferToHex=di5;var ep5=Ud2(),tp5=Sd2();function Ii5(){if(Ld2())return new ep5.BrowserCrypto;return new tp5.NodeCrypto}function Ld2(){return typeof window!=="undefined"&&typeof window.crypto!=="undefined"&&typeof window.crypto.subtle!=="undefined"}function di5(I){return Array.from(new Uint8Array(I)).map((G)=>{return G.toString(16).padStart(2,"0")}).join("")}});var $d2=Y((Pd2)=>{Object.defineProperty(Pd2,"__esModule",{value:!0});Pd2.validate=Wi5;function Wi5(I){let d=[{invalid:"uri",expected:"url"},{invalid:"json",expected:"data"},{invalid:"qs",expected:"params"}];for(let G of d)if(I[G.invalid]){let Z=`'${G.invalid}' is not a valid configuration option. Please use '${G.expected}' instead. This library is using Axios for requests. Please see https://github.com/axios/axios to learn more about the valid request options.`;throw new Error(Z)}}});var dH1=Y((ZV3,Bi5)=>{Bi5.exports={name:"google-auth-library",version:"9.15.1",author:"Google Inc.",description:"Google APIs Authentication Client Library for Node.js",engines:{node:">=14"},main:"./build/src/index.js",types:"./build/src/index.d.ts",repository:"googleapis/google-auth-library-nodejs.git",keywords:["google","api","google apis","client","client library"],dependencies:{"base64-js":"^1.3.0","ecdsa-sig-formatter":"^1.0.11",gaxios:"^6.1.1","gcp-metadata":"^6.1.0",gtoken:"^7.0.0",jws:"^4.0.0"},devDependencies:{"@types/base64-js":"^1.2.5","@types/chai":"^4.1.7","@types/jws":"^3.1.0","@types/mocha":"^9.0.0","@types/mv":"^2.1.0","@types/ncp":"^2.0.1","@types/node":"^20.4.2","@types/sinon":"^17.0.0","assert-rejects":"^1.0.0",c8:"^8.0.0",chai:"^4.2.0",cheerio:"1.0.0-rc.12",codecov:"^3.0.2","engine.io":"6.6.2",gts:"^5.0.0","is-docker":"^2.0.0",jsdoc:"^4.0.0","jsdoc-fresh":"^3.0.0","jsdoc-region-tag":"^3.0.0",karma:"^6.0.0","karma-chrome-launcher":"^3.0.0","karma-coverage":"^2.0.0","karma-firefox-launcher":"^2.0.0","karma-mocha":"^2.0.0","karma-sourcemap-loader":"^0.4.0","karma-webpack":"5.0.0",keypair:"^1.0.4",linkinator:"^4.0.0",mocha:"^9.2.2",mv:"^2.1.1",ncp:"^2.0.0",nock:"^13.0.0","null-loader":"^4.0.0",pdfmake:"0.2.12",puppeteer:"^21.0.0",sinon:"^18.0.0","ts-loader":"^8.0.0",typescript:"^5.1.6",webpack:"^5.21.2","webpack-cli":"^4.0.0"},files:["build/src","!build/src/**/*.map"],scripts:{test:"c8 mocha build/test",clean:"gts clean",prepare:"npm run compile",lint:"gts check",compile:"tsc -p .",fix:"gts fix",pretest:"npm run compile -- --sourceMap",docs:"jsdoc -c .jsdoc.json","samples-setup":"cd samples/ && npm link ../ && npm run setup && cd ../","samples-test":"cd samples/ && npm link ../ && npm test && cd ../","system-test":"mocha build/system-test --timeout 60000","presystem-test":"npm run compile -- --sourceMap",webpack:"webpack","browser-test":"karma start","docs-test":"linkinator docs","predocs-test":"npm run docs",prelint:"cd samples; npm link ../; npm install",precompile:"gts clean"},license:"Apache-2.0"}});var eP=Y((Td2)=>{Object.defineProperty(Td2,"__esModule",{value:!0});Td2.DefaultTransporter=void 0;var Ai5=dW(),Vi5=$d2(),Xi5=dH1(),ud2="google-api-nodejs-client";class oP{constructor(){this.instance=new Ai5.Gaxios}configure(I={}){if(I.headers=I.headers||{},typeof window==="undefined"){let d=I.headers["User-Agent"];if(!d)I.headers["User-Agent"]=oP.USER_AGENT;else if(!d.includes(`${ud2}/`))I.headers["User-Agent"]=`${d} ${oP.USER_AGENT}`;if(!I.headers["x-goog-api-client"]){let G=process.version.replace(/^v/,"");I.headers["x-goog-api-client"]=`gl-node/${G}`}}return I}request(I){return I=this.configure(I),Vi5.validate(I),this.instance.request(I).catch((d)=>{throw this.processError(d)})}get defaults(){return this.instance.defaults}set defaults(I){this.instance.defaults=I}processError(I){let d=I.response,G=I,Z=d?d.data:null;if(d&&Z&&Z.error&&d.status!==200)if(typeof Z.error==="string")G.message=Z.error,G.status=d.status;else if(Array.isArray(Z.error.errors))G.message=Z.error.errors.map((C)=>C.message).join(` +`),G.code=Z.error.code,G.errors=Z.error.errors;else G.message=Z.error.message,G.code=Z.error.code;else if(d&&d.status>=400)G.message=Z,G.status=d.status;return G}}Td2.DefaultTransporter=oP;oP.USER_AGENT=`${ud2}/${Xi5.version}`});var kq=Y((GH1,ld2)=>{/*! safe-buffer. MIT License. Feross Aboukhadijeh */var nr=B1("buffer"),RB=nr.Buffer;function md2(I,d){for(var G in I)d[G]=I[G]}if(RB.from&&RB.alloc&&RB.allocUnsafe&&RB.allocUnsafeSlow)ld2.exports=nr;else md2(nr,GH1),GH1.Buffer=uJ;function uJ(I,d,G){return RB(I,d,G)}uJ.prototype=Object.create(RB.prototype);md2(RB,uJ);uJ.from=function(I,d,G){if(typeof I==="number")throw new TypeError("Argument must not be a number");return RB(I,d,G)};uJ.alloc=function(I,d,G){if(typeof I!=="number")throw new TypeError("Argument must be a number");var Z=RB(I);if(d!==void 0)if(typeof G==="string")Z.fill(d,G);else Z.fill(d);else Z.fill(0);return Z};uJ.allocUnsafe=function(I){if(typeof I!=="number")throw new TypeError("Argument must be a number");return RB(I)};uJ.allocUnsafeSlow=function(I){if(typeof I!=="number")throw new TypeError("Argument must be a number");return nr.SlowBuffer(I)}});var hd2=Y((WV3,bd2)=>{function ZH1(I){var d=(I/8|0)+(I%8===0?0:1);return d}var Yi5={ES256:ZH1(256),ES384:ZH1(384),ES512:ZH1(521)};function _i5(I){var d=Yi5[I];if(d)return d;throw new Error('Unknown algorithm "'+I+'"')}bd2.exports=_i5});var CH1=Y((wV3,id2)=>{var rr=kq().Buffer,kd2=hd2(),ar=128,xd2=0,Di5=32,Hi5=16,Fi5=2,cd2=Hi5|Di5|xd2<<6,sr=Fi5|xd2<<6;function gi5(I){return I.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function pd2(I){if(rr.isBuffer(I))return I;else if(typeof I==="string")return rr.from(I,"base64");throw new TypeError("ECDSA signature must be a Base64 string or a Buffer")}function Ji5(I,d){I=pd2(I);var G=kd2(d),Z=G+1,C=I.length,W=0;if(I[W++]!==cd2)throw new Error('Could not find expected "seq"');var w=I[W++];if(w===(ar|1))w=I[W++];if(C-W=ar;if(C)--Z;return Z}function Ki5(I,d){I=pd2(I);var G=kd2(d),Z=I.length;if(Z!==G*2)throw new TypeError('"'+d+'" signatures must be "'+G*2+'" bytes, saw "'+Z+'"');var C=jd2(I,0,G),W=jd2(I,G,I.length),w=G-C,B=G-W,A=2+w+1+1+B,V=A{var ZW=cD&&cD.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},xq,rV,WH1,wH1;Object.defineProperty(cD,"__esModule",{value:!0});cD.LRUCache=void 0;cD.snakeToCamel=nd2;cD.originalOrCamelOptions=Ni5;function nd2(I){return I.replace(/([_][^_])/g,(d)=>d.slice(1).toUpperCase())}function Ni5(I){function d(G){var Z;let C=I||{};return(Z=C[G])!==null&&Z!==void 0?Z:C[nd2(G)]}return{get:d}}class rd2{constructor(I){xq.add(this),rV.set(this,new Map),this.capacity=I.capacity,this.maxAge=I.maxAge}set(I,d){ZW(this,xq,"m",WH1).call(this,I,d),ZW(this,xq,"m",wH1).call(this)}get(I){let d=ZW(this,rV,"f").get(I);if(!d)return;return ZW(this,xq,"m",WH1).call(this,I,d.value),ZW(this,xq,"m",wH1).call(this),d.value}}cD.LRUCache=rd2;rV=new WeakMap,xq=new WeakSet,WH1=function I(d,G){ZW(this,rV,"f").delete(d),ZW(this,rV,"f").set(d,{value:G,lastAccessed:Date.now()})},wH1=function I(){let d=this.maxAge?Date.now()-this.maxAge:0,G=ZW(this,rV,"f").entries().next();while(!G.done&&(ZW(this,rV,"f").size>this.capacity||G.value[1].lastAccessed{Object.defineProperty(ed2,"__esModule",{value:!0});ed2.AuthClient=ed2.DEFAULT_EAGER_REFRESH_THRESHOLD_MILLIS=ed2.DEFAULT_UNIVERSE=void 0;var zi5=B1("events"),ad2=dW(),sd2=eP(),Qi5=pD();ed2.DEFAULT_UNIVERSE="googleapis.com";ed2.DEFAULT_EAGER_REFRESH_THRESHOLD_MILLIS=300000;class od2 extends zi5.EventEmitter{constructor(I={}){var d,G,Z,C,W;super();this.credentials={},this.eagerRefreshThresholdMillis=ed2.DEFAULT_EAGER_REFRESH_THRESHOLD_MILLIS,this.forceRefreshOnFailure=!1,this.universeDomain=ed2.DEFAULT_UNIVERSE;let w=Qi5.originalOrCamelOptions(I);if(this.apiKey=I.apiKey,this.projectId=(d=w.get("project_id"))!==null&&d!==void 0?d:null,this.quotaProjectId=w.get("quota_project_id"),this.credentials=(G=w.get("credentials"))!==null&&G!==void 0?G:{},this.universeDomain=(Z=w.get("universe_domain"))!==null&&Z!==void 0?Z:ed2.DEFAULT_UNIVERSE,this.transporter=(C=I.transporter)!==null&&C!==void 0?C:new sd2.DefaultTransporter,I.transporterOptions)this.transporter.defaults=I.transporterOptions;if(I.eagerRefreshThresholdMillis)this.eagerRefreshThresholdMillis=I.eagerRefreshThresholdMillis;this.forceRefreshOnFailure=(W=I.forceRefreshOnFailure)!==null&&W!==void 0?W:!1}get gaxios(){if(this.transporter instanceof ad2.Gaxios)return this.transporter;else if(this.transporter instanceof sd2.DefaultTransporter)return this.transporter.instance;else if("instance"in this.transporter&&this.transporter.instance instanceof ad2.Gaxios)return this.transporter.instance;return null}setCredentials(I){this.credentials=I}addSharedMetadataHeaders(I){if(!I["x-goog-user-project"]&&this.quotaProjectId)I["x-goog-user-project"]=this.quotaProjectId;return I}static get RETRY_CONFIG(){return{retry:!0,retryConfig:{httpMethodsToRetry:["GET","PUT","POST","HEAD","OPTIONS","DELETE"]}}}}ed2.AuthClient=od2});var AH1=Y((GG2)=>{Object.defineProperty(GG2,"__esModule",{value:!0});GG2.LoginTicket=void 0;class dG2{constructor(I,d){this.envelope=I,this.payload=d}getEnvelope(){return this.envelope}getPayload(){return this.payload}getUserId(){let I=this.getPayload();if(I&&I.sub)return I.sub;return null}getAttributes(){return{envelope:this.getEnvelope(),payload:this.getPayload()}}}GG2.LoginTicket=dG2});var TJ=Y((WG2)=>{Object.defineProperty(WG2,"__esModule",{value:!0});WG2.OAuth2Client=WG2.ClientAuthentication=WG2.CertificateFormat=WG2.CodeChallengeMethod=void 0;var fi5=dW(),VH1=B1("querystring"),qi5=B1("stream"),Ri5=CH1(),XH1=hq(),Ui5=UB(),vi5=AH1(),CG2;(function(I){I.Plain="plain",I.S256="S256"})(CG2||(WG2.CodeChallengeMethod=CG2={}));var aV;(function(I){I.PEM="PEM",I.JWK="JWK"})(aV||(WG2.CertificateFormat=aV={}));var tP;(function(I){I.ClientSecretPost="ClientSecretPost",I.ClientSecretBasic="ClientSecretBasic",I.None="None"})(tP||(WG2.ClientAuthentication=tP={}));class _I extends Ui5.AuthClient{constructor(I,d,G){let Z=I&&typeof I==="object"?I:{clientId:I,clientSecret:d,redirectUri:G};super(Z);this.certificateCache={},this.certificateExpiry=null,this.certificateCacheFormat=aV.PEM,this.refreshTokenPromises=new Map,this._clientId=Z.clientId,this._clientSecret=Z.clientSecret,this.redirectUri=Z.redirectUri,this.endpoints={tokenInfoUrl:"https://oauth2.googleapis.com/tokeninfo",oauth2AuthBaseUrl:"https://accounts.google.com/o/oauth2/v2/auth",oauth2TokenUrl:"https://oauth2.googleapis.com/token",oauth2RevokeUrl:"https://oauth2.googleapis.com/revoke",oauth2FederatedSignonPemCertsUrl:"https://www.googleapis.com/oauth2/v1/certs",oauth2FederatedSignonJwkCertsUrl:"https://www.googleapis.com/oauth2/v3/certs",oauth2IapPublicKeyUrl:"https://www.gstatic.com/iap/verify/public_key",...Z.endpoints},this.clientAuthentication=Z.clientAuthentication||tP.ClientSecretPost,this.issuers=Z.issuers||["accounts.google.com","https://accounts.google.com",this.universeDomain]}generateAuthUrl(I={}){if(I.code_challenge_method&&!I.code_challenge)throw new Error("If a code_challenge_method is provided, code_challenge must be included.");if(I.response_type=I.response_type||"code",I.client_id=I.client_id||this._clientId,I.redirect_uri=I.redirect_uri||this.redirectUri,Array.isArray(I.scope))I.scope=I.scope.join(" ");return this.endpoints.oauth2AuthBaseUrl.toString()+"?"+VH1.stringify(I)}generateCodeVerifier(){throw new Error("generateCodeVerifier is removed, please use generateCodeVerifierAsync instead.")}async generateCodeVerifierAsync(){let I=XH1.createCrypto(),G=I.randomBytesBase64(96).replace(/\+/g,"~").replace(/=/g,"_").replace(/\//g,"-"),C=(await I.sha256DigestBase64(G)).split("=")[0].replace(/\+/g,"-").replace(/\//g,"_");return{codeVerifier:G,codeChallenge:C}}getToken(I,d){let G=typeof I==="string"?{code:I}:I;if(d)this.getTokenAsync(G).then((Z)=>d(null,Z.tokens,Z.res),(Z)=>d(Z,null,Z.response));else return this.getTokenAsync(G)}async getTokenAsync(I){let d=this.endpoints.oauth2TokenUrl.toString(),G={"Content-Type":"application/x-www-form-urlencoded"},Z={client_id:I.client_id||this._clientId,code_verifier:I.codeVerifier,code:I.code,grant_type:"authorization_code",redirect_uri:I.redirect_uri||this.redirectUri};if(this.clientAuthentication===tP.ClientSecretBasic){let w=Buffer.from(`${this._clientId}:${this._clientSecret}`);G.Authorization=`Basic ${w.toString("base64")}`}if(this.clientAuthentication===tP.ClientSecretPost)Z.client_secret=this._clientSecret;let C=await this.transporter.request({..._I.RETRY_CONFIG,method:"POST",url:d,data:VH1.stringify(Z),headers:G}),W=C.data;if(C.data&&C.data.expires_in)W.expiry_date=new Date().getTime()+C.data.expires_in*1000,delete W.expires_in;return this.emit("tokens",W),{tokens:W,res:C}}async refreshToken(I){if(!I)return this.refreshTokenNoCache(I);if(this.refreshTokenPromises.has(I))return this.refreshTokenPromises.get(I);let d=this.refreshTokenNoCache(I).then((G)=>{return this.refreshTokenPromises.delete(I),G},(G)=>{throw this.refreshTokenPromises.delete(I),G});return this.refreshTokenPromises.set(I,d),d}async refreshTokenNoCache(I){var d;if(!I)throw new Error("No refresh token is set.");let G=this.endpoints.oauth2TokenUrl.toString(),Z={refresh_token:I,client_id:this._clientId,client_secret:this._clientSecret,grant_type:"refresh_token"},C;try{C=await this.transporter.request({..._I.RETRY_CONFIG,method:"POST",url:G,data:VH1.stringify(Z),headers:{"Content-Type":"application/x-www-form-urlencoded"}})}catch(w){if(w instanceof fi5.GaxiosError&&w.message==="invalid_grant"&&((d=w.response)===null||d===void 0?void 0:d.data)&&/ReAuth/i.test(w.response.data.error_description))w.message=JSON.stringify(w.response.data);throw w}let W=C.data;if(C.data&&C.data.expires_in)W.expiry_date=new Date().getTime()+C.data.expires_in*1000,delete W.expires_in;return this.emit("tokens",W),{tokens:W,res:C}}refreshAccessToken(I){if(I)this.refreshAccessTokenAsync().then((d)=>I(null,d.credentials,d.res),I);else return this.refreshAccessTokenAsync()}async refreshAccessTokenAsync(){let I=await this.refreshToken(this.credentials.refresh_token),d=I.tokens;return d.refresh_token=this.credentials.refresh_token,this.credentials=d,{credentials:this.credentials,res:I.res}}getAccessToken(I){if(I)this.getAccessTokenAsync().then((d)=>I(null,d.token,d.res),I);else return this.getAccessTokenAsync()}async getAccessTokenAsync(){if(!this.credentials.access_token||this.isTokenExpiring()){if(!this.credentials.refresh_token)if(this.refreshHandler){let G=await this.processAndValidateRefreshHandler();if(G===null||G===void 0?void 0:G.access_token)return this.setCredentials(G),{token:this.credentials.access_token}}else throw new Error("No refresh token or refresh handler callback is set.");let d=await this.refreshAccessTokenAsync();if(!d.credentials||d.credentials&&!d.credentials.access_token)throw new Error("Could not refresh access token.");return{token:d.credentials.access_token,res:d.res}}else return{token:this.credentials.access_token}}async getRequestHeaders(I){return(await this.getRequestMetadataAsync(I)).headers}async getRequestMetadataAsync(I){let d=this.credentials;if(!d.access_token&&!d.refresh_token&&!this.apiKey&&!this.refreshHandler)throw new Error("No access, refresh token, API key or refresh handler callback is set.");if(d.access_token&&!this.isTokenExpiring()){d.token_type=d.token_type||"Bearer";let w={Authorization:d.token_type+" "+d.access_token};return{headers:this.addSharedMetadataHeaders(w)}}if(this.refreshHandler){let w=await this.processAndValidateRefreshHandler();if(w===null||w===void 0?void 0:w.access_token){this.setCredentials(w);let B={Authorization:"Bearer "+this.credentials.access_token};return{headers:this.addSharedMetadataHeaders(B)}}}if(this.apiKey)return{headers:{"X-Goog-Api-Key":this.apiKey}};let G=null,Z=null;try{G=await this.refreshToken(d.refresh_token),Z=G.tokens}catch(w){let B=w;if(B.response&&(B.response.status===403||B.response.status===404))B.message=`Could not refresh access token: ${B.message}`;throw B}let C=this.credentials;C.token_type=C.token_type||"Bearer",Z.refresh_token=C.refresh_token,this.credentials=Z;let W={Authorization:C.token_type+" "+Z.access_token};return{headers:this.addSharedMetadataHeaders(W),res:G.res}}static getRevokeTokenUrl(I){return new _I().getRevokeTokenURL(I).toString()}getRevokeTokenURL(I){let d=new URL(this.endpoints.oauth2RevokeUrl);return d.searchParams.append("token",I),d}revokeToken(I,d){let G={..._I.RETRY_CONFIG,url:this.getRevokeTokenURL(I).toString(),method:"POST"};if(d)this.transporter.request(G).then((Z)=>d(null,Z),d);else return this.transporter.request(G)}revokeCredentials(I){if(I)this.revokeCredentialsAsync().then((d)=>I(null,d),I);else return this.revokeCredentialsAsync()}async revokeCredentialsAsync(){let I=this.credentials.access_token;if(this.credentials={},I)return this.revokeToken(I);else throw new Error("No access token to revoke.")}request(I,d){if(d)this.requestAsync(I).then((G)=>d(null,G),(G)=>{return d(G,G.response)});else return this.requestAsync(I)}async requestAsync(I,d=!1){let G;try{let Z=await this.getRequestMetadataAsync(I.url);if(I.headers=I.headers||{},Z.headers&&Z.headers["x-goog-user-project"])I.headers["x-goog-user-project"]=Z.headers["x-goog-user-project"];if(Z.headers&&Z.headers.Authorization)I.headers.Authorization=Z.headers.Authorization;if(this.apiKey)I.headers["X-Goog-Api-Key"]=this.apiKey;G=await this.transporter.request(I)}catch(Z){let C=Z.response;if(C){let W=C.status,w=this.credentials&&this.credentials.access_token&&this.credentials.refresh_token&&(!this.credentials.expiry_date||this.forceRefreshOnFailure),B=this.credentials&&this.credentials.access_token&&!this.credentials.refresh_token&&(!this.credentials.expiry_date||this.forceRefreshOnFailure)&&this.refreshHandler,A=C.config.data instanceof qi5.Readable,V=W===401||W===403;if(!d&&V&&!A&&w)return await this.refreshAccessTokenAsync(),this.requestAsync(I,!0);else if(!d&&V&&!A&&B){let X=await this.processAndValidateRefreshHandler();if(X===null||X===void 0?void 0:X.access_token)this.setCredentials(X);return this.requestAsync(I,!0)}}throw Z}return G}verifyIdToken(I,d){if(d&&typeof d!=="function")throw new Error("This method accepts an options object as the first parameter, which includes the idToken, audience, and maxExpiry.");if(d)this.verifyIdTokenAsync(I).then((G)=>d(null,G),d);else return this.verifyIdTokenAsync(I)}async verifyIdTokenAsync(I){if(!I.idToken)throw new Error("The verifyIdToken method requires an ID Token");let d=await this.getFederatedSignonCertsAsync();return await this.verifySignedJwtWithCertsAsync(I.idToken,d.certs,I.audience,this.issuers,I.maxExpiry)}async getTokenInfo(I){let{data:d}=await this.transporter.request({..._I.RETRY_CONFIG,method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Bearer ${I}`},url:this.endpoints.tokenInfoUrl.toString()}),G=Object.assign({expiry_date:new Date().getTime()+d.expires_in*1000,scopes:d.scope.split(" ")},d);return delete G.expires_in,delete G.scope,G}getFederatedSignonCerts(I){if(I)this.getFederatedSignonCertsAsync().then((d)=>I(null,d.certs,d.res),I);else return this.getFederatedSignonCertsAsync()}async getFederatedSignonCertsAsync(){let I=new Date().getTime(),d=XH1.hasBrowserCrypto()?aV.JWK:aV.PEM;if(this.certificateExpiry&&II(null,d.pubkeys,d.res),I);else return this.getIapPublicKeysAsync()}async getIapPublicKeysAsync(){let I,d=this.endpoints.oauth2IapPublicKeyUrl.toString();try{I=await this.transporter.request({..._I.RETRY_CONFIG,url:d})}catch(G){if(G instanceof Error)G.message=`Failed to retrieve verification certificates: ${G.message}`;throw G}return{pubkeys:I.data,res:I}}verifySignedJwtWithCerts(){throw new Error("verifySignedJwtWithCerts is removed, please use verifySignedJwtWithCertsAsync instead.")}async verifySignedJwtWithCertsAsync(I,d,G,Z,C){let W=XH1.createCrypto();if(!C)C=_I.DEFAULT_MAX_TOKEN_LIFETIME_SECS_;let w=I.split(".");if(w.length!==3)throw new Error("Wrong number of segments in token: "+I);let B=w[0]+"."+w[1],A=w[2],V,X;try{V=JSON.parse(W.decodeBase64StringUtf8(w[0]))}catch(S){if(S instanceof Error)S.message=`Can't parse token envelope: ${w[0]}': ${S.message}`;throw S}if(!V)throw new Error("Can't parse token envelope: "+w[0]);try{X=JSON.parse(W.decodeBase64StringUtf8(w[1]))}catch(S){if(S instanceof Error)S.message=`Can't parse token payload '${w[0]}`;throw S}if(!X)throw new Error("Can't parse token payload: "+w[1]);if(!Object.prototype.hasOwnProperty.call(d,V.kid))throw new Error("No pem found for envelope: "+JSON.stringify(V));let _=d[V.kid];if(V.alg==="ES256")A=Ri5.joseToDer(A,"ES256").toString("base64");if(!await W.verify(_,B,A))throw new Error("Invalid token signature: "+I);if(!X.iat)throw new Error("No issue time in token: "+JSON.stringify(X));if(!X.exp)throw new Error("No expiration time in token: "+JSON.stringify(X));let g=Number(X.iat);if(isNaN(g))throw new Error("iat field using invalid format");let J=Number(X.exp);if(isNaN(J))throw new Error("exp field using invalid format");let K=new Date().getTime()/1000;if(J>=K+C)throw new Error("Expiration time too far in future: "+JSON.stringify(X));let Q=g-_I.CLOCK_SKEW_SECS_,E=J+_I.CLOCK_SKEW_SECS_;if(KE)throw new Error("Token used too late, "+K+" > "+E+": "+JSON.stringify(X));if(Z&&Z.indexOf(X.iss)<0)throw new Error("Invalid issuer, expected one of ["+Z+"], but got "+X.iss);if(typeof G!=="undefined"&&G!==null){let S=X.aud,P=!1;if(G.constructor===Array)P=G.indexOf(S)>-1;else P=S===G;if(!P)throw new Error("Wrong recipient, payload audience != requiredAudience")}return new vi5.LoginTicket(V,X)}async processAndValidateRefreshHandler(){if(this.refreshHandler){let I=await this.refreshHandler();if(!I.access_token)throw new Error("No access token is returned by the refreshHandler callback.");return I}return}isTokenExpiring(){let I=this.credentials.expiry_date;return I?I<=new Date().getTime()+this.eagerRefreshThresholdMillis:!1}}WG2.OAuth2Client=_I;_I.GOOGLE_TOKEN_INFO_URL="https://oauth2.googleapis.com/tokeninfo";_I.CLOCK_SKEW_SECS_=300;_I.DEFAULT_MAX_TOKEN_LIFETIME_SECS_=86400});var YH1=Y((VG2)=>{Object.defineProperty(VG2,"__esModule",{value:!0});VG2.Compute=void 0;var Li5=dW(),BG2=sP(),yi5=TJ();class AG2 extends yi5.OAuth2Client{constructor(I={}){super(I);this.credentials={expiry_date:1,refresh_token:"compute-placeholder"},this.serviceAccountEmail=I.serviceAccountEmail||"default",this.scopes=Array.isArray(I.scopes)?I.scopes:I.scopes?[I.scopes]:[]}async refreshTokenNoCache(I){let d=`service-accounts/${this.serviceAccountEmail}/token`,G;try{let C={property:d};if(this.scopes.length>0)C.params={scopes:this.scopes.join(",")};G=await BG2.instance(C)}catch(C){if(C instanceof Li5.GaxiosError)C.message=`Could not refresh access token: ${C.message}`,this.wrapError(C);throw C}let Z=G;if(G&&G.expires_in)Z.expiry_date=new Date().getTime()+G.expires_in*1000,delete Z.expires_in;return this.emit("tokens",Z),{tokens:Z,res:null}}async fetchIdToken(I){let d=`service-accounts/${this.serviceAccountEmail}/identity?format=full&audience=${I}`,G;try{let Z={property:d};G=await BG2.instance(Z)}catch(Z){if(Z instanceof Error)Z.message=`Could not fetch ID token: ${Z.message}`;throw Z}return G}wrapError(I){let d=I.response;if(d&&d.status){if(I.status=d.status,d.status===403)I.message="A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified: "+I.message;else if(d.status===404)I.message="A Not Found error was returned while attempting to retrieve an accesstoken for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have any permission scopes specified: "+I.message}}}VG2.Compute=AG2});var _H1=Y((_G2)=>{Object.defineProperty(_G2,"__esModule",{value:!0});_G2.IdTokenClient=void 0;var Pi5=TJ();class YG2 extends Pi5.OAuth2Client{constructor(I){super(I);this.targetAudience=I.targetAudience,this.idTokenProvider=I.idTokenProvider}async getRequestMetadataAsync(I){if(!this.credentials.id_token||!this.credentials.expiry_date||this.isTokenExpiring()){let G=await this.idTokenProvider.fetchIdToken(this.targetAudience);this.credentials={id_token:G,expiry_date:this.getIdTokenExpiryDate(G)}}return{headers:{Authorization:"Bearer "+this.credentials.id_token}}}getIdTokenExpiryDate(I){let d=I.split(".")[1];if(d)return JSON.parse(Buffer.from(d,"base64").toString("ascii")).exp*1000}}_G2.IdTokenClient=YG2});var DH1=Y((FG2)=>{Object.defineProperty(FG2,"__esModule",{value:!0});FG2.GCPEnv=void 0;FG2.clear=$i5;FG2.getEnv=ui5;var HG2=sP(),sV;(function(I){I.APP_ENGINE="APP_ENGINE",I.KUBERNETES_ENGINE="KUBERNETES_ENGINE",I.CLOUD_FUNCTIONS="CLOUD_FUNCTIONS",I.COMPUTE_ENGINE="COMPUTE_ENGINE",I.CLOUD_RUN="CLOUD_RUN",I.NONE="NONE"})(sV||(FG2.GCPEnv=sV={}));var I$;function $i5(){I$=void 0}async function ui5(){if(I$)return I$;return I$=Ti5(),I$}async function Ti5(){let I=sV.NONE;if(Oi5())I=sV.APP_ENGINE;else if(mi5())I=sV.CLOUD_FUNCTIONS;else if(await hi5())if(await bi5())I=sV.KUBERNETES_ENGINE;else if(li5())I=sV.CLOUD_RUN;else I=sV.COMPUTE_ENGINE;else I=sV.NONE;return I}function Oi5(){return!!(process.env.GAE_SERVICE||process.env.GAE_MODULE_NAME)}function mi5(){return!!(process.env.FUNCTION_NAME||process.env.FUNCTION_TARGET)}function li5(){return!!process.env.K_CONFIGURATION}async function bi5(){try{return await HG2.instance("attributes/cluster-name"),!0}catch(I){return!1}}async function hi5(){return HG2.isAvailable()}});var HH1=Y((HV3,JG2)=>{var or=kq().Buffer,xi5=B1("stream"),ci5=B1("util");function er(I){if(this.buffer=null,this.writable=!0,this.readable=!0,!I)return this.buffer=or.alloc(0),this;if(typeof I.pipe==="function")return this.buffer=or.alloc(0),I.pipe(this),this;if(I.length||typeof I==="object")return this.buffer=I,this.writable=!1,process.nextTick(function(){this.emit("end",I),this.readable=!1,this.emit("close")}.bind(this)),this;throw new TypeError("Unexpected data type ("+typeof I+")")}ci5.inherits(er,xi5);er.prototype.write=function I(d){this.buffer=or.concat([this.buffer,or.from(d)]),this.emit("data",d)};er.prototype.end=function I(d){if(d)this.write(d);this.emit("end",d),this.emit("close"),this.writable=!1,this.readable=!1};JG2.exports=er});var NG2=Y((FV3,KG2)=>{var d$=B1("buffer").Buffer,FH1=B1("buffer").SlowBuffer;KG2.exports=tr;function tr(I,d){if(!d$.isBuffer(I)||!d$.isBuffer(d))return!1;if(I.length!==d.length)return!1;var G=0;for(var Z=0;Z{var ni5=NG2(),pq=kq().Buffer,vB=B1("crypto"),QG2=CH1(),zG2=B1("util"),ri5=`"%s" is not a valid algorithm. + Supported algorithms are: + "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".`,G$="secret must be a string or buffer",cq="key must be a string or a buffer",ai5="key must be a string, a buffer or an object",gH1=typeof vB.createPublicKey==="function";if(gH1)cq+=" or a KeyObject",G$+="or a KeyObject";function fG2(I){if(pq.isBuffer(I))return;if(typeof I==="string")return;if(!gH1)throw CW(cq);if(typeof I!=="object")throw CW(cq);if(typeof I.type!=="string")throw CW(cq);if(typeof I.asymmetricKeyType!=="string")throw CW(cq);if(typeof I.export!=="function")throw CW(cq)}function qG2(I){if(pq.isBuffer(I))return;if(typeof I==="string")return;if(typeof I==="object")return;throw CW(ai5)}function si5(I){if(pq.isBuffer(I))return;if(typeof I==="string")return I;if(!gH1)throw CW(G$);if(typeof I!=="object")throw CW(G$);if(I.type!=="secret")throw CW(G$);if(typeof I.export!=="function")throw CW(G$)}function JH1(I){return I.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function RG2(I){I=I.toString();var d=4-I.length%4;if(d!==4)for(var G=0;G{var Wn5=B1("buffer").Buffer;SG2.exports=function I(d){if(typeof d==="string")return d;if(typeof d==="number"||Wn5.isBuffer(d))return d.toString();return JSON.stringify(d)}});var TG2=Y((KV3,uG2)=>{var wn5=kq().Buffer,LG2=HH1(),Bn5=KH1(),An5=B1("stream"),yG2=NH1(),zH1=B1("util");function PG2(I,d){return wn5.from(I,d).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function Vn5(I,d,G){G=G||"utf8";var Z=PG2(yG2(I),"binary"),C=PG2(yG2(d),G);return zH1.format("%s.%s",Z,C)}function $G2(I){var{header:d,payload:G}=I,Z=I.secret||I.privateKey,C=I.encoding,W=Bn5(d.alg),w=Vn5(d,G,C),B=W.sign(w,Z);return zH1.format("%s.%s",w,B)}function Ia(I){var d=I.secret||I.privateKey||I.key,G=new LG2(d);this.readable=!0,this.header=I.header,this.encoding=I.encoding,this.secret=this.privateKey=this.key=G,this.payload=new LG2(I.payload),this.secret.once("close",function(){if(!this.payload.writable&&this.readable)this.sign()}.bind(this)),this.payload.once("close",function(){if(!this.secret.writable&&this.readable)this.sign()}.bind(this))}zH1.inherits(Ia,An5);Ia.prototype.sign=function I(){try{var d=$G2({header:this.header,payload:this.payload.buffer,secret:this.secret.buffer,encoding:this.encoding});return this.emit("done",d),this.emit("data",d),this.emit("end"),this.readable=!1,d}catch(G){this.readable=!1,this.emit("error",G),this.emit("close")}};Ia.sign=$G2;uG2.exports=Ia});var pG2=Y((NV3,cG2)=>{var mG2=kq().Buffer,OG2=HH1(),Xn5=KH1(),Yn5=B1("stream"),lG2=NH1(),_n5=B1("util"),Dn5=/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;function Hn5(I){return Object.prototype.toString.call(I)==="[object Object]"}function Fn5(I){if(Hn5(I))return I;try{return JSON.parse(I)}catch(d){return}}function bG2(I){var d=I.split(".",1)[0];return Fn5(mG2.from(d,"base64").toString("binary"))}function gn5(I){return I.split(".",2).join(".")}function hG2(I){return I.split(".")[2]}function Jn5(I,d){d=d||"utf8";var G=I.split(".")[1];return mG2.from(G,"base64").toString(d)}function jG2(I){return Dn5.test(I)&&!!bG2(I)}function kG2(I,d,G){if(!d){var Z=new Error("Missing algorithm parameter for jws.verify");throw Z.code="MISSING_ALGORITHM",Z}I=lG2(I);var C=hG2(I),W=gn5(I),w=Xn5(d);return w.verify(W,C,G)}function xG2(I,d){if(d=d||{},I=lG2(I),!jG2(I))return null;var G=bG2(I);if(!G)return null;var Z=Jn5(I);if(G.typ==="JWT"||d.json)Z=JSON.parse(Z,d.encoding);return{header:G,payload:Z,signature:hG2(I)}}function iq(I){I=I||{};var d=I.secret||I.publicKey||I.key,G=new OG2(d);this.readable=!0,this.algorithm=I.algorithm,this.encoding=I.encoding,this.secret=this.publicKey=this.key=G,this.signature=new OG2(I.signature),this.secret.once("close",function(){if(!this.signature.writable&&this.readable)this.verify()}.bind(this)),this.signature.once("close",function(){if(!this.secret.writable&&this.readable)this.verify()}.bind(this))}_n5.inherits(iq,Yn5);iq.prototype.verify=function I(){try{var d=kG2(this.signature.buffer,this.algorithm,this.key.buffer),G=xG2(this.signature.buffer,this.encoding);return this.emit("done",d,G),this.emit("data",d),this.emit("end"),this.readable=!1,d}catch(Z){this.readable=!1,this.emit("error",Z),this.emit("close")}};iq.decode=xG2;iq.isValid=jG2;iq.verify=kG2;cG2.exports=iq});var QH1=Y((Nn5)=>{var iG2=TG2(),da=pG2(),Kn5=["HS256","HS384","HS512","RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"];Nn5.ALGORITHMS=Kn5;Nn5.sign=iG2.sign;Nn5.verify=da.verify;Nn5.decode=da.decode;Nn5.isValid=da.isValid;Nn5.createSign=function I(d){return new iG2(d)};Nn5.createVerify=function I(d){return new da(d)}});var dZ2=Y((iD)=>{var WW=iD&&iD.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},nG2=iD&&iD.__classPrivateFieldSet||function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},wW,nq,fH1,rG2,aG2,qH1,RH1,sG2;Object.defineProperty(iD,"__esModule",{value:!0});iD.GoogleToken=void 0;var oG2=B1("fs"),En5=dW(),Mn5=QH1(),Sn5=B1("path"),Ln5=B1("util"),eG2=oG2.readFile?Ln5.promisify(oG2.readFile):async()=>{throw new rq("use key rather than keyFile.","MISSING_CREDENTIALS")},tG2="https://www.googleapis.com/oauth2/v4/token",yn5="https://accounts.google.com/o/oauth2/revoke?token=";class rq extends Error{constructor(I,d){super(I);this.code=d}}class IZ2{get accessToken(){return this.rawToken?this.rawToken.access_token:void 0}get idToken(){return this.rawToken?this.rawToken.id_token:void 0}get tokenType(){return this.rawToken?this.rawToken.token_type:void 0}get refreshToken(){return this.rawToken?this.rawToken.refresh_token:void 0}constructor(I){wW.add(this),this.transporter={request:(d)=>En5.request(d)},nq.set(this,void 0),WW(this,wW,"m",RH1).call(this,I)}hasExpired(){let I=new Date().getTime();if(this.rawToken&&this.expiresAt)return I>=this.expiresAt;else return!0}isTokenExpiring(){var I;let d=new Date().getTime(),G=(I=this.eagerRefreshThresholdMillis)!==null&&I!==void 0?I:0;if(this.rawToken&&this.expiresAt)return this.expiresAt<=d+G;else return!0}getToken(I,d={}){if(typeof I==="object")d=I,I=void 0;if(d=Object.assign({forceRefresh:!1},d),I){let G=I;WW(this,wW,"m",fH1).call(this,d).then((Z)=>G(null,Z),I);return}return WW(this,wW,"m",fH1).call(this,d)}async getCredentials(I){switch(Sn5.extname(I)){case".json":{let G=await eG2(I,"utf8"),Z=JSON.parse(G),C=Z.private_key,W=Z.client_email;if(!C||!W)throw new rq("private_key and client_email are required.","MISSING_CREDENTIALS");return{privateKey:C,clientEmail:W}}case".der":case".crt":case".pem":return{privateKey:await eG2(I,"utf8")};case".p12":case".pfx":throw new rq("*.p12 certificates are not supported after v6.1.2. Consider utilizing *.json format or converting *.p12 to *.pem using the OpenSSL CLI.","UNKNOWN_CERTIFICATE_TYPE");default:throw new rq("Unknown certificate type. Type is determined based on file extension. Current supported extensions are *.json, and *.pem.","UNKNOWN_CERTIFICATE_TYPE")}}revokeToken(I){if(I){WW(this,wW,"m",qH1).call(this).then(()=>I(),I);return}return WW(this,wW,"m",qH1).call(this)}}iD.GoogleToken=IZ2;nq=new WeakMap,wW=new WeakSet,fH1=async function I(d){if(WW(this,nq,"f")&&!d.forceRefresh)return WW(this,nq,"f");try{return await nG2(this,nq,WW(this,wW,"m",rG2).call(this,d),"f")}finally{nG2(this,nq,void 0,"f")}},rG2=async function I(d){if(this.isTokenExpiring()===!1&&d.forceRefresh===!1)return Promise.resolve(this.rawToken);if(!this.key&&!this.keyFile)throw new Error("No key or keyFile set.");if(!this.key&&this.keyFile){let G=await this.getCredentials(this.keyFile);if(this.key=G.privateKey,this.iss=G.clientEmail||this.iss,!G.clientEmail)WW(this,wW,"m",aG2).call(this)}return WW(this,wW,"m",sG2).call(this)},aG2=function I(){if(!this.iss)throw new rq("email is required.","MISSING_CREDENTIALS")},qH1=async function I(){if(!this.accessToken)throw new Error("No token to revoke.");let d=yn5+this.accessToken;await this.transporter.request({url:d,retry:!0}),WW(this,wW,"m",RH1).call(this,{email:this.iss,sub:this.sub,key:this.key,keyFile:this.keyFile,scope:this.scope,additionalClaims:this.additionalClaims})},RH1=function I(d={}){if(this.keyFile=d.keyFile,this.key=d.key,this.rawToken=void 0,this.iss=d.email||d.iss,this.sub=d.sub,this.additionalClaims=d.additionalClaims,typeof d.scope==="object")this.scope=d.scope.join(" ");else this.scope=d.scope;if(this.eagerRefreshThresholdMillis=d.eagerRefreshThresholdMillis,d.transporter)this.transporter=d.transporter},sG2=async function I(){var d,G;let Z=Math.floor(new Date().getTime()/1000),C=this.additionalClaims||{},W=Object.assign({iss:this.iss,scope:this.scope,aud:tG2,exp:Z+3600,iat:Z,sub:this.sub},C),w=Mn5.sign({header:{alg:"RS256"},payload:W,secret:this.key});try{let B=await this.transporter.request({method:"POST",url:tG2,data:{grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",assertion:w},headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"json",retryConfig:{httpMethodsToRetry:["POST"]}});return this.rawToken=B.data,this.expiresAt=B.data.expires_in===null||B.data.expires_in===void 0?void 0:(Z+B.data.expires_in)*1000,this.rawToken}catch(B){this.rawToken=void 0,this.tokenExpires=void 0;let A=B.response&&((d=B.response)===null||d===void 0?void 0:d.data)?(G=B.response)===null||G===void 0?void 0:G.data:{};if(A.error){let V=A.error_description?`: ${A.error_description}`:"";B.message=`${A.error}${V}`}throw B}}});var vH1=Y((ZZ2)=>{Object.defineProperty(ZZ2,"__esModule",{value:!0});ZZ2.JWTAccess=void 0;var Pn5=QH1(),$n5=pD(),GZ2={alg:"RS256",typ:"JWT"};class UH1{constructor(I,d,G,Z){this.cache=new $n5.LRUCache({capacity:500,maxAge:3600000}),this.email=I,this.key=d,this.keyId=G,this.eagerRefreshThresholdMillis=Z!==null&&Z!==void 0?Z:300000}getCachedKey(I,d){let G=I;if(d&&Array.isArray(d)&&d.length)G=I?`${I}_${d.join("_")}`:`${d.join("_")}`;else if(typeof d==="string")G=I?`${I}_${d}`:d;if(!G)throw Error("Scopes or url must be provided");return G}getRequestHeaders(I,d,G){let Z=this.getCachedKey(I,G),C=this.cache.get(Z),W=Date.now();if(C&&C.expiration-W>this.eagerRefreshThresholdMillis)return C.headers;let w=Math.floor(Date.now()/1000),B=UH1.getExpirationTime(w),A;if(Array.isArray(G))G=G.join(" ");if(G)A={iss:this.email,sub:this.email,scope:G,exp:B,iat:w};else A={iss:this.email,sub:this.email,aud:I,exp:B,iat:w};if(d){for(let g in A)if(d[g])throw new Error(`The '${g}' property is not allowed when passing additionalClaims. This claim is included in the JWT by default.`)}let V=this.keyId?{...GZ2,kid:this.keyId}:GZ2,X=Object.assign(A,d),F={Authorization:`Bearer ${Pn5.sign({header:V,payload:X,secret:this.key})}`};return this.cache.set(Z,{expiration:B*1000,headers:F}),F}static getExpirationTime(I){return I+3600}fromJSON(I){if(!I)throw new Error("Must pass in a JSON object containing the service account auth settings.");if(!I.client_email)throw new Error("The incoming JSON object does not contain a client_email field");if(!I.private_key)throw new Error("The incoming JSON object does not contain a private_key field");this.email=I.client_email,this.key=I.private_key,this.keyId=I.private_key_id,this.projectId=I.project_id}fromStream(I,d){if(d)this.fromStreamAsync(I).then(()=>d(),d);else return this.fromStreamAsync(I)}fromStreamAsync(I){return new Promise((d,G)=>{if(!I)G(new Error("Must pass in a stream containing the service account auth settings."));let Z="";I.setEncoding("utf8").on("data",(C)=>Z+=C).on("error",G).on("end",()=>{try{let C=JSON.parse(Z);this.fromJSON(C),d()}catch(C){G(C)}})})}}ZZ2.JWTAccess=UH1});var MH1=Y((wZ2)=>{Object.defineProperty(wZ2,"__esModule",{value:!0});wZ2.JWT=void 0;var WZ2=dZ2(),un5=vH1(),Tn5=TJ(),Ga=UB();class EH1 extends Tn5.OAuth2Client{constructor(I,d,G,Z,C,W){let w=I&&typeof I==="object"?I:{email:I,keyFile:d,key:G,keyId:W,scopes:Z,subject:C};super(w);this.email=w.email,this.keyFile=w.keyFile,this.key=w.key,this.keyId=w.keyId,this.scopes=w.scopes,this.subject=w.subject,this.additionalClaims=w.additionalClaims,this.credentials={refresh_token:"jwt-placeholder",expiry_date:1}}createScoped(I){let d=new EH1(this);return d.scopes=I,d}async getRequestMetadataAsync(I){I=this.defaultServicePath?`https://${this.defaultServicePath}/`:I;let d=!this.hasUserScopes()&&I||this.useJWTAccessWithScope&&this.hasAnyScopes()||this.universeDomain!==Ga.DEFAULT_UNIVERSE;if(this.subject&&this.universeDomain!==Ga.DEFAULT_UNIVERSE)throw new RangeError(`Service Account user is configured for the credential. Domain-wide delegation is not supported in universes other than ${Ga.DEFAULT_UNIVERSE}`);if(!this.apiKey&&d)if(this.additionalClaims&&this.additionalClaims.target_audience){let{tokens:G}=await this.refreshToken();return{headers:this.addSharedMetadataHeaders({Authorization:`Bearer ${G.id_token}`})}}else{if(!this.access)this.access=new un5.JWTAccess(this.email,this.key,this.keyId,this.eagerRefreshThresholdMillis);let G;if(this.hasUserScopes())G=this.scopes;else if(!I)G=this.defaultScopes;let Z=this.useJWTAccessWithScope||this.universeDomain!==Ga.DEFAULT_UNIVERSE,C=await this.access.getRequestHeaders(I!==null&&I!==void 0?I:void 0,this.additionalClaims,Z?G:void 0);return{headers:this.addSharedMetadataHeaders(C)}}else if(this.hasAnyScopes()||this.apiKey)return super.getRequestMetadataAsync(I);else return{headers:{}}}async fetchIdToken(I){let d=new WZ2.GoogleToken({iss:this.email,sub:this.subject,scope:this.scopes||this.defaultScopes,keyFile:this.keyFile,key:this.key,additionalClaims:{target_audience:I},transporter:this.transporter});if(await d.getToken({forceRefresh:!0}),!d.idToken)throw new Error("Unknown error: Failed to fetch ID token");return d.idToken}hasUserScopes(){if(!this.scopes)return!1;return this.scopes.length>0}hasAnyScopes(){if(this.scopes&&this.scopes.length>0)return!0;if(this.defaultScopes&&this.defaultScopes.length>0)return!0;return!1}authorize(I){if(I)this.authorizeAsync().then((d)=>I(null,d),I);else return this.authorizeAsync()}async authorizeAsync(){let I=await this.refreshToken();if(!I)throw new Error("No result returned");return this.credentials=I.tokens,this.credentials.refresh_token="jwt-placeholder",this.key=this.gtoken.key,this.email=this.gtoken.iss,I.tokens}async refreshTokenNoCache(I){let d=this.createGToken(),Z={access_token:(await d.getToken({forceRefresh:this.isTokenExpiring()})).access_token,token_type:"Bearer",expiry_date:d.expiresAt,id_token:d.idToken};return this.emit("tokens",Z),{res:null,tokens:Z}}createGToken(){if(!this.gtoken)this.gtoken=new WZ2.GoogleToken({iss:this.email,sub:this.subject,scope:this.scopes||this.defaultScopes,keyFile:this.keyFile,key:this.key,additionalClaims:this.additionalClaims,transporter:this.transporter});return this.gtoken}fromJSON(I){if(!I)throw new Error("Must pass in a JSON object containing the service account auth settings.");if(!I.client_email)throw new Error("The incoming JSON object does not contain a client_email field");if(!I.private_key)throw new Error("The incoming JSON object does not contain a private_key field");this.email=I.client_email,this.key=I.private_key,this.keyId=I.private_key_id,this.projectId=I.project_id,this.quotaProjectId=I.quota_project_id,this.universeDomain=I.universe_domain||this.universeDomain}fromStream(I,d){if(d)this.fromStreamAsync(I).then(()=>d(),d);else return this.fromStreamAsync(I)}fromStreamAsync(I){return new Promise((d,G)=>{if(!I)throw new Error("Must pass in a stream containing the service account auth settings.");let Z="";I.setEncoding("utf8").on("error",G).on("data",(C)=>Z+=C).on("end",()=>{try{let C=JSON.parse(Z);this.fromJSON(C),d()}catch(C){G(C)}})})}fromAPIKey(I){if(typeof I!=="string")throw new Error("Must provide an API Key string.");this.apiKey=I}async getCredentials(){if(this.key)return{private_key:this.key,client_email:this.email};else if(this.keyFile){let d=await this.createGToken().getCredentials(this.keyFile);return{private_key:d.privateKey,client_email:d.clientEmail}}throw new Error("A key or a keyFile must be provided to getCredentials.")}}wZ2.JWT=EH1});var SH1=Y((AZ2)=>{Object.defineProperty(AZ2,"__esModule",{value:!0});AZ2.UserRefreshClient=AZ2.USER_REFRESH_ACCOUNT_TYPE=void 0;var On5=TJ(),mn5=B1("querystring");AZ2.USER_REFRESH_ACCOUNT_TYPE="authorized_user";class Za extends On5.OAuth2Client{constructor(I,d,G,Z,C){let W=I&&typeof I==="object"?I:{clientId:I,clientSecret:d,refreshToken:G,eagerRefreshThresholdMillis:Z,forceRefreshOnFailure:C};super(W);this._refreshToken=W.refreshToken,this.credentials.refresh_token=W.refreshToken}async refreshTokenNoCache(I){return super.refreshTokenNoCache(this._refreshToken)}async fetchIdToken(I){return(await this.transporter.request({...Za.RETRY_CONFIG,url:this.endpoints.oauth2TokenUrl,headers:{"Content-Type":"application/x-www-form-urlencoded"},method:"POST",data:mn5.stringify({client_id:this._clientId,client_secret:this._clientSecret,grant_type:"refresh_token",refresh_token:this._refreshToken,target_audience:I})})).data.id_token}fromJSON(I){if(!I)throw new Error("Must pass in a JSON object containing the user refresh token");if(I.type!=="authorized_user")throw new Error('The incoming JSON object does not have the "authorized_user" type');if(!I.client_id)throw new Error("The incoming JSON object does not contain a client_id field");if(!I.client_secret)throw new Error("The incoming JSON object does not contain a client_secret field");if(!I.refresh_token)throw new Error("The incoming JSON object does not contain a refresh_token field");this._clientId=I.client_id,this._clientSecret=I.client_secret,this._refreshToken=I.refresh_token,this.credentials.refresh_token=I.refresh_token,this.quotaProjectId=I.quota_project_id,this.universeDomain=I.universe_domain||this.universeDomain}fromStream(I,d){if(d)this.fromStreamAsync(I).then(()=>d(),d);else return this.fromStreamAsync(I)}async fromStreamAsync(I){return new Promise((d,G)=>{if(!I)return G(new Error("Must pass in a stream containing the user refresh token."));let Z="";I.setEncoding("utf8").on("error",G).on("data",(C)=>Z+=C).on("end",()=>{try{let C=JSON.parse(Z);return this.fromJSON(C),d()}catch(C){return G(C)}})})}static fromJSON(I){let d=new Za;return d.fromJSON(I),d}}AZ2.UserRefreshClient=Za});var LH1=Y((YZ2)=>{Object.defineProperty(YZ2,"__esModule",{value:!0});YZ2.Impersonated=YZ2.IMPERSONATED_ACCOUNT_TYPE=void 0;var XZ2=TJ(),bn5=dW(),hn5=pD();YZ2.IMPERSONATED_ACCOUNT_TYPE="impersonated_service_account";class C$ extends XZ2.OAuth2Client{constructor(I={}){var d,G,Z,C,W,w;super(I);if(this.credentials={expiry_date:1,refresh_token:"impersonated-placeholder"},this.sourceClient=(d=I.sourceClient)!==null&&d!==void 0?d:new XZ2.OAuth2Client,this.targetPrincipal=(G=I.targetPrincipal)!==null&&G!==void 0?G:"",this.delegates=(Z=I.delegates)!==null&&Z!==void 0?Z:[],this.targetScopes=(C=I.targetScopes)!==null&&C!==void 0?C:[],this.lifetime=(W=I.lifetime)!==null&&W!==void 0?W:3600,!hn5.originalOrCamelOptions(I).get("universe_domain"))this.universeDomain=this.sourceClient.universeDomain;else if(this.sourceClient.universeDomain!==this.universeDomain)throw new RangeError(`Universe domain ${this.sourceClient.universeDomain} in source credentials does not match ${this.universeDomain} universe domain set for impersonated credentials.`);this.endpoint=(w=I.endpoint)!==null&&w!==void 0?w:`https://iamcredentials.${this.universeDomain}`}async sign(I){await this.sourceClient.getAccessToken();let d=`projects/-/serviceAccounts/${this.targetPrincipal}`,G=`${this.endpoint}/v1/${d}:signBlob`,Z={delegates:this.delegates,payload:Buffer.from(I).toString("base64")};return(await this.sourceClient.request({...C$.RETRY_CONFIG,url:G,data:Z,method:"POST"})).data}getTargetPrincipal(){return this.targetPrincipal}async refreshToken(){var I,d,G,Z,C,W;try{await this.sourceClient.getAccessToken();let w="projects/-/serviceAccounts/"+this.targetPrincipal,B=`${this.endpoint}/v1/${w}:generateAccessToken`,A={delegates:this.delegates,scope:this.targetScopes,lifetime:this.lifetime+"s"},V=await this.sourceClient.request({...C$.RETRY_CONFIG,url:B,data:A,method:"POST"}),X=V.data;return this.credentials.access_token=X.accessToken,this.credentials.expiry_date=Date.parse(X.expireTime),{tokens:this.credentials,res:V}}catch(w){if(!(w instanceof Error))throw w;let B=0,A="";if(w instanceof bn5.GaxiosError)B=(G=(d=(I=w===null||w===void 0?void 0:w.response)===null||I===void 0?void 0:I.data)===null||d===void 0?void 0:d.error)===null||G===void 0?void 0:G.status,A=(W=(C=(Z=w===null||w===void 0?void 0:w.response)===null||Z===void 0?void 0:Z.data)===null||C===void 0?void 0:C.error)===null||W===void 0?void 0:W.message;if(B&&A)throw w.message=`${B}: unable to impersonate: ${A}`,w;else throw w.message=`unable to impersonate: ${w}`,w}}async fetchIdToken(I,d){var G,Z;await this.sourceClient.getAccessToken();let C=`projects/-/serviceAccounts/${this.targetPrincipal}`,W=`${this.endpoint}/v1/${C}:generateIdToken`,w={delegates:this.delegates,audience:I,includeEmail:(G=d===null||d===void 0?void 0:d.includeEmail)!==null&&G!==void 0?G:!0,useEmailAzp:(Z=d===null||d===void 0?void 0:d.includeEmail)!==null&&Z!==void 0?Z:!0};return(await this.sourceClient.request({...C$.RETRY_CONFIG,url:W,data:w,method:"POST"})).data.token}}YZ2.Impersonated=C$});var yH1=Y((FZ2)=>{Object.defineProperty(FZ2,"__esModule",{value:!0});FZ2.OAuthClientAuthHandler=void 0;FZ2.getErrorFromOAuthErrorResponse=cn5;var DZ2=B1("querystring"),kn5=hq(),xn5=["PUT","POST","PATCH"];class HZ2{constructor(I){this.clientAuthentication=I,this.crypto=kn5.createCrypto()}applyClientAuthenticationOptions(I,d){if(this.injectAuthenticatedHeaders(I,d),!d)this.injectAuthenticatedRequestBody(I)}injectAuthenticatedHeaders(I,d){var G;if(d)I.headers=I.headers||{},Object.assign(I.headers,{Authorization:`Bearer ${d}}`});else if(((G=this.clientAuthentication)===null||G===void 0?void 0:G.confidentialClientType)==="basic"){I.headers=I.headers||{};let Z=this.clientAuthentication.clientId,C=this.clientAuthentication.clientSecret||"",W=this.crypto.encodeBase64StringUtf8(`${Z}:${C}`);Object.assign(I.headers,{Authorization:`Basic ${W}`})}}injectAuthenticatedRequestBody(I){var d;if(((d=this.clientAuthentication)===null||d===void 0?void 0:d.confidentialClientType)==="request-body"){let G=(I.method||"GET").toUpperCase();if(xn5.indexOf(G)!==-1){let Z,C=I.headers||{};for(let W in C)if(W.toLowerCase()==="content-type"&&C[W]){Z=C[W].toLowerCase();break}if(Z==="application/x-www-form-urlencoded"){I.data=I.data||"";let W=DZ2.parse(I.data);Object.assign(W,{client_id:this.clientAuthentication.clientId,client_secret:this.clientAuthentication.clientSecret||""}),I.data=DZ2.stringify(W)}else if(Z==="application/json")I.data=I.data||{},Object.assign(I.data,{client_id:this.clientAuthentication.clientId,client_secret:this.clientAuthentication.clientSecret||""});else throw new Error(`${Z} content-types are not supported with ${this.clientAuthentication.confidentialClientType} client authentication`)}else throw new Error(`${G} HTTP method does not support ${this.clientAuthentication.confidentialClientType} client authentication`)}}static get RETRY_CONFIG(){return{retry:!0,retryConfig:{httpMethodsToRetry:["GET","PUT","POST","HEAD","OPTIONS","DELETE"]}}}}FZ2.OAuthClientAuthHandler=HZ2;function cn5(I,d){let{error:G,error_description:Z,error_uri:C}=I,W=`Error code ${G}`;if(typeof Z!=="undefined")W+=`: ${Z}`;if(typeof C!=="undefined")W+=` - ${C}`;let w=new Error(W);if(d){let B=Object.keys(d);if(d.stack)B.push("stack");B.forEach((A)=>{if(A!=="message")Object.defineProperty(w,A,{value:d[A],writable:!1,enumerable:!0})})}return w}});var $H1=Y((KZ2)=>{Object.defineProperty(KZ2,"__esModule",{value:!0});KZ2.StsCredentials=void 0;var in5=dW(),nn5=B1("querystring"),rn5=eP(),JZ2=yH1();class PH1 extends JZ2.OAuthClientAuthHandler{constructor(I,d){super(d);this.tokenExchangeEndpoint=I,this.transporter=new rn5.DefaultTransporter}async exchangeToken(I,d,G){var Z,C,W;let w={grant_type:I.grantType,resource:I.resource,audience:I.audience,scope:(Z=I.scope)===null||Z===void 0?void 0:Z.join(" "),requested_token_type:I.requestedTokenType,subject_token:I.subjectToken,subject_token_type:I.subjectTokenType,actor_token:(C=I.actingParty)===null||C===void 0?void 0:C.actorToken,actor_token_type:(W=I.actingParty)===null||W===void 0?void 0:W.actorTokenType,options:G&&JSON.stringify(G)};Object.keys(w).forEach((V)=>{if(typeof w[V]==="undefined")delete w[V]});let B={"Content-Type":"application/x-www-form-urlencoded"};Object.assign(B,d||{});let A={...PH1.RETRY_CONFIG,url:this.tokenExchangeEndpoint.toString(),method:"POST",headers:B,data:nn5.stringify(w),responseType:"json"};this.applyClientAuthenticationOptions(A);try{let V=await this.transporter.request(A),X=V.data;return X.res=V,X}catch(V){if(V instanceof in5.GaxiosError&&V.response)throw JZ2.getErrorFromOAuthErrorResponse(V.response.data,V);throw V}}}KZ2.StsCredentials=PH1});var nD=Y((z8)=>{var uH1=z8&&z8.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},zZ2=z8&&z8.__classPrivateFieldSet||function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},TH1,aq,fZ2;Object.defineProperty(z8,"__esModule",{value:!0});z8.BaseExternalAccountClient=z8.DEFAULT_UNIVERSE=z8.CLOUD_RESOURCE_MANAGER=z8.EXTERNAL_ACCOUNT_TYPE=z8.EXPIRATION_TIME_OFFSET=void 0;var an5=B1("stream"),sn5=UB(),on5=$H1(),QZ2=pD(),en5="urn:ietf:params:oauth:grant-type:token-exchange",tn5="urn:ietf:params:oauth:token-type:access_token",OH1="https://www.googleapis.com/auth/cloud-platform",Ir5=3600;z8.EXPIRATION_TIME_OFFSET=300000;z8.EXTERNAL_ACCOUNT_TYPE="external_account";z8.CLOUD_RESOURCE_MANAGER="https://cloudresourcemanager.googleapis.com/v1/projects/";var dr5="//iam\\.googleapis\\.com/locations/[^/]+/workforcePools/[^/]+/providers/.+",Gr5="https://sts.{universeDomain}/v1/token",Zr5=dH1(),Cr5=UB();Object.defineProperty(z8,"DEFAULT_UNIVERSE",{enumerable:!0,get:function(){return Cr5.DEFAULT_UNIVERSE}});class Ca extends sn5.AuthClient{constructor(I,d){var G;super({...I,...d});TH1.add(this),aq.set(this,null);let Z=QZ2.originalOrCamelOptions(I),C=Z.get("type");if(C&&C!==z8.EXTERNAL_ACCOUNT_TYPE)throw new Error(`Expected "${z8.EXTERNAL_ACCOUNT_TYPE}" type but received "${I.type}"`);let W=Z.get("client_id"),w=Z.get("client_secret"),B=(G=Z.get("token_url"))!==null&&G!==void 0?G:Gr5.replace("{universeDomain}",this.universeDomain),A=Z.get("subject_token_type"),V=Z.get("workforce_pool_user_project"),X=Z.get("service_account_impersonation_url"),_=Z.get("service_account_impersonation"),F=QZ2.originalOrCamelOptions(_).get("token_lifetime_seconds");if(this.cloudResourceManagerURL=new URL(Z.get("cloud_resource_manager_url")||`https://cloudresourcemanager.${this.universeDomain}/v1/projects/`),W)this.clientAuth={confidentialClientType:"basic",clientId:W,clientSecret:w};this.stsCredential=new on5.StsCredentials(B,this.clientAuth),this.scopes=Z.get("scopes")||[OH1],this.cachedAccessToken=null,this.audience=Z.get("audience"),this.subjectTokenType=A,this.workforcePoolUserProject=V;let g=new RegExp(dr5);if(this.workforcePoolUserProject&&!this.audience.match(g))throw new Error("workforcePoolUserProject should not be set for non-workforce pool credentials.");if(this.serviceAccountImpersonationUrl=X,this.serviceAccountImpersonationLifetime=F,this.serviceAccountImpersonationLifetime)this.configLifetimeRequested=!0;else this.configLifetimeRequested=!1,this.serviceAccountImpersonationLifetime=Ir5;this.projectNumber=this.getProjectNumber(this.audience),this.supplierContext={audience:this.audience,subjectTokenType:this.subjectTokenType,transporter:this.transporter}}getServiceAccountEmail(){var I;if(this.serviceAccountImpersonationUrl){if(this.serviceAccountImpersonationUrl.length>256)throw new RangeError(`URL is too long: ${this.serviceAccountImpersonationUrl}`);let G=/serviceAccounts\/(?[^:]+):generateAccessToken$/.exec(this.serviceAccountImpersonationUrl);return((I=G===null||G===void 0?void 0:G.groups)===null||I===void 0?void 0:I.email)||null}return null}setCredentials(I){super.setCredentials(I),this.cachedAccessToken=I}async getAccessToken(){if(!this.cachedAccessToken||this.isExpired(this.cachedAccessToken))await this.refreshAccessTokenAsync();return{token:this.cachedAccessToken.access_token,res:this.cachedAccessToken.res}}async getRequestHeaders(){let d={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(d)}request(I,d){if(d)this.requestAsync(I).then((G)=>d(null,G),(G)=>{return d(G,G.response)});else return this.requestAsync(I)}async getProjectId(){let I=this.projectNumber||this.workforcePoolUserProject;if(this.projectId)return this.projectId;else if(I){let d=await this.getRequestHeaders(),G=await this.transporter.request({...Ca.RETRY_CONFIG,headers:d,url:`${this.cloudResourceManagerURL.toString()}${I}`,responseType:"json"});return this.projectId=G.data.projectId,this.projectId}return null}async requestAsync(I,d=!1){let G;try{let Z=await this.getRequestHeaders();if(I.headers=I.headers||{},Z&&Z["x-goog-user-project"])I.headers["x-goog-user-project"]=Z["x-goog-user-project"];if(Z&&Z.Authorization)I.headers.Authorization=Z.Authorization;G=await this.transporter.request(I)}catch(Z){let C=Z.response;if(C){let W=C.status,w=C.config.data instanceof an5.Readable;if(!d&&(W===401||W===403)&&!w&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(I,!0)}throw Z}return G}async refreshAccessTokenAsync(){zZ2(this,aq,uH1(this,aq,"f")||uH1(this,TH1,"m",fZ2).call(this),"f");try{return await uH1(this,aq,"f")}finally{zZ2(this,aq,null,"f")}}getProjectNumber(I){let d=I.match(/\/projects\/([^/]+)/);if(!d)return null;return d[1]}async getImpersonatedAccessToken(I){let d={...Ca.RETRY_CONFIG,url:this.serviceAccountImpersonationUrl,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${I}`},data:{scope:this.getScopesArray(),lifetime:this.serviceAccountImpersonationLifetime+"s"},responseType:"json"},G=await this.transporter.request(d),Z=G.data;return{access_token:Z.accessToken,expiry_date:new Date(Z.expireTime).getTime(),res:G}}isExpired(I){let d=new Date().getTime();return I.expiry_date?d>=I.expiry_date-this.eagerRefreshThresholdMillis:!1}getScopesArray(){if(typeof this.scopes==="string")return[this.scopes];return this.scopes||[OH1]}getMetricsHeaderValue(){let I=process.version.replace(/^v/,""),d=this.serviceAccountImpersonationUrl!==void 0,G=this.credentialSourceType?this.credentialSourceType:"unknown";return`gl-node/${I} auth/${Zr5.version} google-byoid-sdk source/${G} sa-impersonation/${d} config-lifetime/${this.configLifetimeRequested}`}}z8.BaseExternalAccountClient=Ca;aq=new WeakMap,TH1=new WeakSet,fZ2=async function I(){let d=await this.retrieveSubjectToken(),G={grantType:en5,audience:this.audience,requestedTokenType:tn5,subjectToken:d,subjectTokenType:this.subjectTokenType,scope:this.serviceAccountImpersonationUrl?[OH1]:this.getScopesArray()},Z=!this.clientAuth&&this.workforcePoolUserProject?{userProject:this.workforcePoolUserProject}:void 0,C={"x-goog-api-client":this.getMetricsHeaderValue()},W=await this.stsCredential.exchangeToken(G,C,Z);if(this.serviceAccountImpersonationUrl)this.cachedAccessToken=await this.getImpersonatedAccessToken(W.access_token);else if(W.expires_in)this.cachedAccessToken={access_token:W.access_token,expiry_date:new Date().getTime()+W.expires_in*1000,res:W.res};else this.cachedAccessToken={access_token:W.access_token,res:W.res};return this.credentials={},Object.assign(this.credentials,this.cachedAccessToken),delete this.credentials.res,this.emit("tokens",{refresh_token:null,expiry_date:this.cachedAccessToken.expiry_date,access_token:this.cachedAccessToken.access_token,token_type:"Bearer",id_token:null}),this.cachedAccessToken}});var vZ2=Y((RZ2)=>{var mH1,lH1,bH1;Object.defineProperty(RZ2,"__esModule",{value:!0});RZ2.FileSubjectTokenSupplier=void 0;var hH1=B1("util"),jH1=B1("fs"),Wr5=hH1.promisify((mH1=jH1.readFile)!==null&&mH1!==void 0?mH1:()=>{}),wr5=hH1.promisify((lH1=jH1.realpath)!==null&&lH1!==void 0?lH1:()=>{}),Br5=hH1.promisify((bH1=jH1.lstat)!==null&&bH1!==void 0?bH1:()=>{});class qZ2{constructor(I){this.filePath=I.filePath,this.formatType=I.formatType,this.subjectTokenFieldName=I.subjectTokenFieldName}async getSubjectToken(I){let d=this.filePath;try{if(d=await wr5(d),!(await Br5(d)).isFile())throw new Error}catch(C){if(C instanceof Error)C.message=`The file at ${d} does not exist, or it is not a file. ${C.message}`;throw C}let G,Z=await Wr5(d,{encoding:"utf8"});if(this.formatType==="text")G=Z;else if(this.formatType==="json"&&this.subjectTokenFieldName)G=JSON.parse(Z)[this.subjectTokenFieldName];if(!G)throw new Error("Unable to parse the subject_token from the credential_source file");return G}}RZ2.FileSubjectTokenSupplier=qZ2});var LZ2=Y((MZ2)=>{Object.defineProperty(MZ2,"__esModule",{value:!0});MZ2.UrlSubjectTokenSupplier=void 0;class EZ2{constructor(I){this.url=I.url,this.formatType=I.formatType,this.subjectTokenFieldName=I.subjectTokenFieldName,this.headers=I.headers,this.additionalGaxiosOptions=I.additionalGaxiosOptions}async getSubjectToken(I){let d={...this.additionalGaxiosOptions,url:this.url,method:"GET",headers:this.headers,responseType:this.formatType},G;if(this.formatType==="text")G=(await I.transporter.request(d)).data;else if(this.formatType==="json"&&this.subjectTokenFieldName)G=(await I.transporter.request(d)).data[this.subjectTokenFieldName];if(!G)throw new Error("Unable to parse the subject_token from the credential_source URL");return G}}MZ2.UrlSubjectTokenSupplier=EZ2});var cH1=Y((yZ2)=>{Object.defineProperty(yZ2,"__esModule",{value:!0});yZ2.IdentityPoolClient=void 0;var Ar5=nD(),kH1=pD(),Vr5=vZ2(),Xr5=LZ2();class xH1 extends Ar5.BaseExternalAccountClient{constructor(I,d){super(I,d);let G=kH1.originalOrCamelOptions(I),Z=G.get("credential_source"),C=G.get("subject_token_supplier");if(!Z&&!C)throw new Error("A credential source or subject token supplier must be specified.");if(Z&&C)throw new Error("Only one of credential source or subject token supplier can be specified.");if(C)this.subjectTokenSupplier=C,this.credentialSourceType="programmatic";else{let W=kH1.originalOrCamelOptions(Z),w=kH1.originalOrCamelOptions(W.get("format")),B=w.get("type")||"text",A=w.get("subject_token_field_name");if(B!=="json"&&B!=="text")throw new Error(`Invalid credential_source format "${B}"`);if(B==="json"&&!A)throw new Error("Missing subject_token_field_name for JSON credential_source format");let V=W.get("file"),X=W.get("url"),_=W.get("headers");if(V&&X)throw new Error('No valid Identity Pool "credential_source" provided, must be either file or url.');else if(V&&!X)this.credentialSourceType="file",this.subjectTokenSupplier=new Vr5.FileSubjectTokenSupplier({filePath:V,formatType:B,subjectTokenFieldName:A});else if(!V&&X)this.credentialSourceType="url",this.subjectTokenSupplier=new Xr5.UrlSubjectTokenSupplier({url:X,formatType:B,subjectTokenFieldName:A,headers:_,additionalGaxiosOptions:xH1.RETRY_CONFIG});else throw new Error('No valid Identity Pool "credential_source" provided, must be either file or url.')}}async retrieveSubjectToken(){return this.subjectTokenSupplier.getSubjectToken(this.supplierContext)}}yZ2.IdentityPoolClient=xH1});var pH1=Y((OZ2)=>{Object.defineProperty(OZ2,"__esModule",{value:!0});OZ2.AwsRequestSigner=void 0;var uZ2=hq(),$Z2="AWS4-HMAC-SHA256",Yr5="aws4_request";class TZ2{constructor(I,d){this.getCredentials=I,this.region=d,this.crypto=uZ2.createCrypto()}async getRequestOptions(I){if(!I.url)throw new Error('"url" is required in "amzOptions"');let d=typeof I.data==="object"?JSON.stringify(I.data):I.data,G=I.url,Z=I.method||"GET",C=I.body||d,W=I.headers,w=await this.getCredentials(),B=new URL(G),A=await Dr5({crypto:this.crypto,host:B.host,canonicalUri:B.pathname,canonicalQuerystring:B.search.substr(1),method:Z,region:this.region,securityCredentials:w,requestPayload:C,additionalAmzHeaders:W}),V=Object.assign(A.amzDate?{"x-amz-date":A.amzDate}:{},{Authorization:A.authorizationHeader,host:B.host},W||{});if(w.token)Object.assign(V,{"x-amz-security-token":w.token});let X={url:G,method:Z,headers:V};if(typeof C!=="undefined")X.body=C;return X}}OZ2.AwsRequestSigner=TZ2;async function W$(I,d,G){return await I.signWithHmacSha256(d,G)}async function _r5(I,d,G,Z,C){let W=await W$(I,`AWS4${d}`,G),w=await W$(I,W,Z),B=await W$(I,w,C);return await W$(I,B,"aws4_request")}async function Dr5(I){let d=I.additionalAmzHeaders||{},G=I.requestPayload||"",Z=I.host.split(".")[0],C=new Date,W=C.toISOString().replace(/[-:]/g,"").replace(/\.[0-9]+/,""),w=C.toISOString().replace(/[-]/g,"").replace(/T.*/,""),B={};if(Object.keys(d).forEach((P)=>{B[P.toLowerCase()]=d[P]}),I.securityCredentials.token)B["x-amz-security-token"]=I.securityCredentials.token;let A=Object.assign({host:I.host},B.date?{}:{"x-amz-date":W},B),V="",X=Object.keys(A).sort();X.forEach((P)=>{V+=`${P}:${A[P]} +`});let _=X.join(";"),F=await I.crypto.sha256DigestHex(G),g=`${I.method} +${I.canonicalUri} +${I.canonicalQuerystring} +${V} +${_} +${F}`,J=`${w}/${I.region}/${Z}/${Yr5}`,K=`${$Z2} +${W} +${J} +`+await I.crypto.sha256DigestHex(g),Q=await _r5(I.crypto,I.securityCredentials.secretAccessKey,w,I.region,Z),E=await W$(I.crypto,Q,K),S=`${$Z2} Credential=${I.securityCredentials.accessKeyId}/${J}, SignedHeaders=${_}, Signature=${uZ2.fromArrayBufferToHex(E)}`;return{amzDate:B.date?void 0:W,authorizationHeader:S,canonicalQuerystring:I.canonicalQuerystring}}});var jZ2=Y((sq)=>{var oV=sq&&sq.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},BW,iH1,lZ2,bZ2,Wa,nH1;Object.defineProperty(sq,"__esModule",{value:!0});sq.DefaultAwsSecurityCredentialsSupplier=void 0;class hZ2{constructor(I){BW.add(this),this.regionUrl=I.regionUrl,this.securityCredentialsUrl=I.securityCredentialsUrl,this.imdsV2SessionTokenUrl=I.imdsV2SessionTokenUrl,this.additionalGaxiosOptions=I.additionalGaxiosOptions}async getAwsRegion(I){if(oV(this,BW,"a",Wa))return oV(this,BW,"a",Wa);let d={};if(!oV(this,BW,"a",Wa)&&this.imdsV2SessionTokenUrl)d["x-aws-ec2-metadata-token"]=await oV(this,BW,"m",iH1).call(this,I.transporter);if(!this.regionUrl)throw new Error('Unable to determine AWS region due to missing "options.credential_source.region_url"');let G={...this.additionalGaxiosOptions,url:this.regionUrl,method:"GET",responseType:"text",headers:d},Z=await I.transporter.request(G);return Z.data.substr(0,Z.data.length-1)}async getAwsSecurityCredentials(I){if(oV(this,BW,"a",nH1))return oV(this,BW,"a",nH1);let d={};if(this.imdsV2SessionTokenUrl)d["x-aws-ec2-metadata-token"]=await oV(this,BW,"m",iH1).call(this,I.transporter);let G=await oV(this,BW,"m",lZ2).call(this,d,I.transporter),Z=await oV(this,BW,"m",bZ2).call(this,G,d,I.transporter);return{accessKeyId:Z.AccessKeyId,secretAccessKey:Z.SecretAccessKey,token:Z.Token}}}sq.DefaultAwsSecurityCredentialsSupplier=hZ2;BW=new WeakSet,iH1=async function I(d){let G={...this.additionalGaxiosOptions,url:this.imdsV2SessionTokenUrl,method:"PUT",responseType:"text",headers:{"x-aws-ec2-metadata-token-ttl-seconds":"300"}};return(await d.request(G)).data},lZ2=async function I(d,G){if(!this.securityCredentialsUrl)throw new Error('Unable to determine AWS role name due to missing "options.credential_source.url"');let Z={...this.additionalGaxiosOptions,url:this.securityCredentialsUrl,method:"GET",responseType:"text",headers:d};return(await G.request(Z)).data},bZ2=async function I(d,G,Z){return(await Z.request({...this.additionalGaxiosOptions,url:`${this.securityCredentialsUrl}/${d}`,responseType:"json",headers:G})).data},Wa=function I(){return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION||null},nH1=function I(){if(process.env.AWS_ACCESS_KEY_ID&&process.env.AWS_SECRET_ACCESS_KEY)return{accessKeyId:process.env.AWS_ACCESS_KEY_ID,secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY,token:process.env.AWS_SESSION_TOKEN};return null}});var rH1=Y((oq)=>{var Hr5=oq&&oq.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},wa,xZ2;Object.defineProperty(oq,"__esModule",{value:!0});oq.AwsClient=void 0;var Fr5=pH1(),gr5=nD(),Jr5=jZ2(),kZ2=pD();class w$ extends gr5.BaseExternalAccountClient{constructor(I,d){super(I,d);let G=kZ2.originalOrCamelOptions(I),Z=G.get("credential_source"),C=G.get("aws_security_credentials_supplier");if(!Z&&!C)throw new Error("A credential source or AWS security credentials supplier must be specified.");if(Z&&C)throw new Error("Only one of credential source or AWS security credentials supplier can be specified.");if(C)this.awsSecurityCredentialsSupplier=C,this.regionalCredVerificationUrl=Hr5(wa,wa,"f",xZ2),this.credentialSourceType="programmatic";else{let W=kZ2.originalOrCamelOptions(Z);this.environmentId=W.get("environment_id");let w=W.get("region_url"),B=W.get("url"),A=W.get("imdsv2_session_token_url");this.awsSecurityCredentialsSupplier=new Jr5.DefaultAwsSecurityCredentialsSupplier({regionUrl:w,securityCredentialsUrl:B,imdsV2SessionTokenUrl:A}),this.regionalCredVerificationUrl=W.get("regional_cred_verification_url"),this.credentialSourceType="aws",this.validateEnvironmentId()}this.awsRequestSigner=null,this.region=""}validateEnvironmentId(){var I;let d=(I=this.environmentId)===null||I===void 0?void 0:I.match(/^(aws)(\d+)$/);if(!d||!this.regionalCredVerificationUrl)throw new Error('No valid AWS "credential_source" provided');else if(parseInt(d[2],10)!==1)throw new Error(`aws version "${d[2]}" is not supported in the current build.`)}async retrieveSubjectToken(){if(!this.awsRequestSigner)this.region=await this.awsSecurityCredentialsSupplier.getAwsRegion(this.supplierContext),this.awsRequestSigner=new Fr5.AwsRequestSigner(async()=>{return this.awsSecurityCredentialsSupplier.getAwsSecurityCredentials(this.supplierContext)},this.region);let I=await this.awsRequestSigner.getRequestOptions({...wa.RETRY_CONFIG,url:this.regionalCredVerificationUrl.replace("{region}",this.region),method:"POST"}),d=[],G=Object.assign({"x-goog-cloud-target-resource":this.audience},I.headers);for(let Z in G)d.push({key:Z,value:G[Z]});return encodeURIComponent(JSON.stringify({url:I.url,method:I.method,headers:d}))}}oq.AwsClient=w$;wa=w$;xZ2={value:"https://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15"};w$.AWS_EC2_METADATA_IPV4_ADDRESS="169.254.169.254";w$.AWS_EC2_METADATA_IPV6_ADDRESS="fd00:ec2::254"});var GF1=Y((iZ2)=>{Object.defineProperty(iZ2,"__esModule",{value:!0});iZ2.InvalidSubjectTokenError=iZ2.InvalidMessageFieldError=iZ2.InvalidCodeFieldError=iZ2.InvalidTokenTypeFieldError=iZ2.InvalidExpirationTimeFieldError=iZ2.InvalidSuccessFieldError=iZ2.InvalidVersionFieldError=iZ2.ExecutableResponseError=iZ2.ExecutableResponse=void 0;var Ba="urn:ietf:params:oauth:token-type:saml2",aH1="urn:ietf:params:oauth:token-type:id_token",sH1="urn:ietf:params:oauth:token-type:jwt";class cZ2{constructor(I){if(!I.version)throw new oH1("Executable response must contain a 'version' field.");if(I.success===void 0)throw new eH1("Executable response must contain a 'success' field.");if(this.version=I.version,this.success=I.success,this.success){if(this.expirationTime=I.expiration_time,this.tokenType=I.token_type,this.tokenType!==Ba&&this.tokenType!==aH1&&this.tokenType!==sH1)throw new tH1(`Executable response must contain a 'token_type' field when successful and it must be one of ${aH1}, ${sH1}, or ${Ba}.`);if(this.tokenType===Ba){if(!I.saml_response)throw new Aa(`Executable response must contain a 'saml_response' field when token_type=${Ba}.`);this.subjectToken=I.saml_response}else{if(!I.id_token)throw new Aa(`Executable response must contain a 'id_token' field when token_type=${aH1} or ${sH1}.`);this.subjectToken=I.id_token}}else{if(!I.code)throw new IF1("Executable response must contain a 'code' field when unsuccessful.");if(!I.message)throw new dF1("Executable response must contain a 'message' field when unsuccessful.");this.errorCode=I.code,this.errorMessage=I.message}}isValid(){return!this.isExpired()&&this.success}isExpired(){return this.expirationTime!==void 0&&this.expirationTime{Object.defineProperty(rZ2,"__esModule",{value:!0});rZ2.PluggableAuthHandler=void 0;var vr5=Va(),OJ=GF1(),Er5=B1("child_process"),ZF1=B1("fs");class CF1{constructor(I){if(!I.command)throw new Error("No command provided.");if(this.commandComponents=CF1.parseCommand(I.command),this.timeoutMillis=I.timeoutMillis,!this.timeoutMillis)throw new Error("No timeoutMillis provided.");this.outputFile=I.outputFile}retrieveResponseFromExecutable(I){return new Promise((d,G)=>{let Z=Er5.spawn(this.commandComponents[0],this.commandComponents.slice(1),{env:{...process.env,...Object.fromEntries(I)}}),C="";Z.stdout.on("data",(w)=>{C+=w}),Z.stderr.on("data",(w)=>{C+=w});let W=setTimeout(()=>{return Z.removeAllListeners(),Z.kill(),G(new Error("The executable failed to finish within the timeout specified."))},this.timeoutMillis);Z.on("close",(w)=>{if(clearTimeout(W),w===0)try{let B=JSON.parse(C),A=new OJ.ExecutableResponse(B);return d(A)}catch(B){if(B instanceof OJ.ExecutableResponseError)return G(B);return G(new OJ.ExecutableResponseError(`The executable returned an invalid response: ${C}`))}else return G(new vr5.ExecutableError(C,w.toString()))})})}async retrieveCachedResponse(){if(!this.outputFile||this.outputFile.length===0)return;let I;try{I=await ZF1.promises.realpath(this.outputFile)}catch(G){return}if(!(await ZF1.promises.lstat(I)).isFile())return;let d=await ZF1.promises.readFile(I,{encoding:"utf8"});if(d==="")return;try{let G=JSON.parse(d);if(new OJ.ExecutableResponse(G).isValid())return new OJ.ExecutableResponse(G);return}catch(G){if(G instanceof OJ.ExecutableResponseError)throw G;throw new OJ.ExecutableResponseError(`The output file contained an invalid response: ${d}`)}}static parseCommand(I){let d=I.match(/(?:[^\s"]+|"[^"]*")+/g);if(!d)throw new Error(`Provided command: "${I}" could not be parsed.`);for(let G=0;G{Object.defineProperty(dC2,"__esModule",{value:!0});dC2.PluggableAuthClient=dC2.ExecutableError=void 0;var Mr5=nD(),Sr5=GF1(),Lr5=sZ2();class WF1 extends Error{constructor(I,d){super(`The executable failed with exit code: ${d} and error message: ${I}.`);this.code=d,Object.setPrototypeOf(this,new.target.prototype)}}dC2.ExecutableError=WF1;var yr5=30000,oZ2=5000,eZ2=120000,Pr5="GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES",tZ2=1;class IC2 extends Mr5.BaseExternalAccountClient{constructor(I,d){super(I,d);if(!I.credential_source.executable)throw new Error('No valid Pluggable Auth "credential_source" provided.');if(this.command=I.credential_source.executable.command,!this.command)throw new Error('No valid Pluggable Auth "credential_source" provided.');if(I.credential_source.executable.timeout_millis===void 0)this.timeoutMillis=yr5;else if(this.timeoutMillis=I.credential_source.executable.timeout_millis,this.timeoutMilliseZ2)throw new Error(`Timeout must be between ${oZ2} and ${eZ2} milliseconds.`);this.outputFile=I.credential_source.executable.output_file,this.handler=new Lr5.PluggableAuthHandler({command:this.command,timeoutMillis:this.timeoutMillis,outputFile:this.outputFile}),this.credentialSourceType="executable"}async retrieveSubjectToken(){if(process.env[Pr5]!=="1")throw new Error("Pluggable Auth executables need to be explicitly allowed to run by setting the GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES environment Variable to 1.");let I=void 0;if(this.outputFile)I=await this.handler.retrieveCachedResponse();if(!I){let d=new Map;if(d.set("GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE",this.audience),d.set("GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE",this.subjectTokenType),d.set("GOOGLE_EXTERNAL_ACCOUNT_INTERACTIVE","0"),this.outputFile)d.set("GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE",this.outputFile);let G=this.getServiceAccountEmail();if(G)d.set("GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL",G);I=await this.handler.retrieveResponseFromExecutable(d)}if(I.version>tZ2)throw new Error(`Version of executable is not currently supported, maximum supported version is ${tZ2}.`);if(!I.success)throw new WF1(I.errorMessage,I.errorCode);if(this.outputFile){if(!I.expirationTime)throw new Sr5.InvalidExpirationTimeFieldError("The executable response must contain the `expiration_time` field for successful responses when an output_file has been specified in the configuration.")}if(I.isExpired())throw new Error("Executable response is expired.");return I.subjectToken}}dC2.PluggableAuthClient=IC2});var wF1=Y((CC2)=>{Object.defineProperty(CC2,"__esModule",{value:!0});CC2.ExternalAccountClient=void 0;var ur5=nD(),Tr5=cH1(),Or5=rH1(),mr5=Va();class ZC2{constructor(){throw new Error("ExternalAccountClients should be initialized via: ExternalAccountClient.fromJSON(), directly via explicit constructors, eg. new AwsClient(options), new IdentityPoolClient(options), newPluggableAuthClientOptions, or via new GoogleAuth(options).getClient()")}static fromJSON(I,d){var G,Z;if(I&&I.type===ur5.EXTERNAL_ACCOUNT_TYPE)if((G=I.credential_source)===null||G===void 0?void 0:G.environment_id)return new Or5.AwsClient(I,d);else if((Z=I.credential_source)===null||Z===void 0?void 0:Z.executable)return new mr5.PluggableAuthClient(I,d);else return new Tr5.IdentityPoolClient(I,d);else return null}}CC2.ExternalAccountClient=ZC2});var XC2=Y((AC2)=>{Object.defineProperty(AC2,"__esModule",{value:!0});AC2.ExternalAccountAuthorizedUserClient=AC2.EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE=void 0;var lr5=UB(),wC2=yH1(),br5=dW(),hr5=B1("stream"),jr5=nD();AC2.EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE="external_account_authorized_user";var kr5="https://sts.{universeDomain}/v1/oauthtoken";class BF1 extends wC2.OAuthClientAuthHandler{constructor(I,d,G){super(G);this.url=I,this.transporter=d}async refreshToken(I,d){let G=new URLSearchParams({grant_type:"refresh_token",refresh_token:I}),Z={"Content-Type":"application/x-www-form-urlencoded",...d},C={...BF1.RETRY_CONFIG,url:this.url,method:"POST",headers:Z,data:G.toString(),responseType:"json"};this.applyClientAuthenticationOptions(C);try{let W=await this.transporter.request(C),w=W.data;return w.res=W,w}catch(W){if(W instanceof br5.GaxiosError&&W.response)throw wC2.getErrorFromOAuthErrorResponse(W.response.data,W);throw W}}}class BC2 extends lr5.AuthClient{constructor(I,d){var G;super({...I,...d});if(I.universe_domain)this.universeDomain=I.universe_domain;this.refreshToken=I.refresh_token;let Z={confidentialClientType:"basic",clientId:I.client_id,clientSecret:I.client_secret};if(this.externalAccountAuthorizedUserHandler=new BF1((G=I.token_url)!==null&&G!==void 0?G:kr5.replace("{universeDomain}",this.universeDomain),this.transporter,Z),this.cachedAccessToken=null,this.quotaProjectId=I.quota_project_id,typeof(d===null||d===void 0?void 0:d.eagerRefreshThresholdMillis)!=="number")this.eagerRefreshThresholdMillis=jr5.EXPIRATION_TIME_OFFSET;else this.eagerRefreshThresholdMillis=d.eagerRefreshThresholdMillis;this.forceRefreshOnFailure=!!(d===null||d===void 0?void 0:d.forceRefreshOnFailure)}async getAccessToken(){if(!this.cachedAccessToken||this.isExpired(this.cachedAccessToken))await this.refreshAccessTokenAsync();return{token:this.cachedAccessToken.access_token,res:this.cachedAccessToken.res}}async getRequestHeaders(){let d={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(d)}request(I,d){if(d)this.requestAsync(I).then((G)=>d(null,G),(G)=>{return d(G,G.response)});else return this.requestAsync(I)}async requestAsync(I,d=!1){let G;try{let Z=await this.getRequestHeaders();if(I.headers=I.headers||{},Z&&Z["x-goog-user-project"])I.headers["x-goog-user-project"]=Z["x-goog-user-project"];if(Z&&Z.Authorization)I.headers.Authorization=Z.Authorization;G=await this.transporter.request(I)}catch(Z){let C=Z.response;if(C){let W=C.status,w=C.config.data instanceof hr5.Readable;if(!d&&(W===401||W===403)&&!w&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(I,!0)}throw Z}return G}async refreshAccessTokenAsync(){let I=await this.externalAccountAuthorizedUserHandler.refreshToken(this.refreshToken);if(this.cachedAccessToken={access_token:I.access_token,expiry_date:new Date().getTime()+I.expires_in*1000,res:I.res},I.refresh_token!==void 0)this.refreshToken=I.refresh_token;return this.cachedAccessToken}isExpired(I){let d=new Date().getTime();return I.expiry_date?d>=I.expiry_date-this.eagerRefreshThresholdMillis:!1}}AC2.ExternalAccountAuthorizedUserClient=BC2});var gC2=Y((C7)=>{var rD=C7&&C7.__classPrivateFieldGet||function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},YC2=C7&&C7.__classPrivateFieldSet||function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},aD,IR,dR,FC2;Object.defineProperty(C7,"__esModule",{value:!0});C7.GoogleAuth=C7.GoogleAuthExceptionMessages=C7.CLOUD_SDK_CLIENT_ID=void 0;var cr5=B1("child_process"),V$=B1("fs"),B$=sP(),pr5=B1("os"),VF1=B1("path"),ir5=hq(),nr5=eP(),rr5=YH1(),ar5=_H1(),sr5=DH1(),eq=MH1(),_C2=SH1(),tq=LH1(),or5=wF1(),A$=nD(),AF1=UB(),DC2=XC2(),HC2=pD();C7.CLOUD_SDK_CLIENT_ID="764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com";C7.GoogleAuthExceptionMessages={API_KEY_WITH_CREDENTIALS:"API Keys and Credentials are mutually exclusive authentication methods and cannot be used together.",NO_PROJECT_ID_FOUND:`Unable to detect a Project Id in the current environment. +To learn more about authentication and Google APIs, visit: +https://cloud.google.com/docs/authentication/getting-started`,NO_CREDENTIALS_FOUND:`Unable to find credentials in current environment. +To learn more about authentication and Google APIs, visit: +https://cloud.google.com/docs/authentication/getting-started`,NO_ADC_FOUND:"Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.",NO_UNIVERSE_DOMAIN_FOUND:`Unable to detect a Universe Domain in the current environment. +To learn more about Universe Domain retrieval, visit: +https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys`};class XF1{get isGCE(){return this.checkIsGCE}constructor(I={}){if(aD.add(this),this.checkIsGCE=void 0,this.jsonContent=null,this.cachedCredential=null,IR.set(this,null),this.clientOptions={},this._cachedProjectId=I.projectId||null,this.cachedCredential=I.authClient||null,this.keyFilename=I.keyFilename||I.keyFile,this.scopes=I.scopes,this.clientOptions=I.clientOptions||{},this.jsonContent=I.credentials||null,this.apiKey=I.apiKey||this.clientOptions.apiKey||null,this.apiKey&&(this.jsonContent||this.clientOptions.credentials))throw new RangeError(C7.GoogleAuthExceptionMessages.API_KEY_WITH_CREDENTIALS);if(I.universeDomain)this.clientOptions.universeDomain=I.universeDomain}setGapicJWTValues(I){I.defaultServicePath=this.defaultServicePath,I.useJWTAccessWithScope=this.useJWTAccessWithScope,I.defaultScopes=this.defaultScopes}getProjectId(I){if(I)this.getProjectIdAsync().then((d)=>I(null,d),I);else return this.getProjectIdAsync()}async getProjectIdOptional(){try{return await this.getProjectId()}catch(I){if(I instanceof Error&&I.message===C7.GoogleAuthExceptionMessages.NO_PROJECT_ID_FOUND)return null;else throw I}}async findAndCacheProjectId(){let I=null;if(I||(I=await this.getProductionProjectId()),I||(I=await this.getFileProjectId()),I||(I=await this.getDefaultServiceProjectId()),I||(I=await this.getGCEProjectId()),I||(I=await this.getExternalAccountClientProjectId()),I)return this._cachedProjectId=I,I;else throw new Error(C7.GoogleAuthExceptionMessages.NO_PROJECT_ID_FOUND)}async getProjectIdAsync(){if(this._cachedProjectId)return this._cachedProjectId;if(!this._findProjectIdPromise)this._findProjectIdPromise=this.findAndCacheProjectId();return this._findProjectIdPromise}async getUniverseDomainFromMetadataServer(){var I;let d;try{d=await B$.universe("universe-domain"),d||(d=AF1.DEFAULT_UNIVERSE)}catch(G){if(G&&((I=G===null||G===void 0?void 0:G.response)===null||I===void 0?void 0:I.status)===404)d=AF1.DEFAULT_UNIVERSE;else throw G}return d}async getUniverseDomain(){let I=HC2.originalOrCamelOptions(this.clientOptions).get("universe_domain");try{I!==null&&I!==void 0||(I=(await this.getClient()).universeDomain)}catch(d){I!==null&&I!==void 0||(I=AF1.DEFAULT_UNIVERSE)}return I}getAnyScopes(){return this.scopes||this.defaultScopes}getApplicationDefault(I={},d){let G;if(typeof I==="function")d=I;else G=I;if(d)this.getApplicationDefaultAsync(G).then((Z)=>d(null,Z.credential,Z.projectId),d);else return this.getApplicationDefaultAsync(G)}async getApplicationDefaultAsync(I={}){if(this.cachedCredential)return await rD(this,aD,"m",dR).call(this,this.cachedCredential,null);let d;if(d=await this._tryGetApplicationCredentialsFromEnvironmentVariable(I),d){if(d instanceof eq.JWT)d.scopes=this.scopes;else if(d instanceof A$.BaseExternalAccountClient)d.scopes=this.getAnyScopes();return await rD(this,aD,"m",dR).call(this,d)}if(d=await this._tryGetApplicationCredentialsFromWellKnownFile(I),d){if(d instanceof eq.JWT)d.scopes=this.scopes;else if(d instanceof A$.BaseExternalAccountClient)d.scopes=this.getAnyScopes();return await rD(this,aD,"m",dR).call(this,d)}if(await this._checkIsGCE())return I.scopes=this.getAnyScopes(),await rD(this,aD,"m",dR).call(this,new rr5.Compute(I));throw new Error(C7.GoogleAuthExceptionMessages.NO_ADC_FOUND)}async _checkIsGCE(){if(this.checkIsGCE===void 0)this.checkIsGCE=B$.getGCPResidency()||await B$.isAvailable();return this.checkIsGCE}async _tryGetApplicationCredentialsFromEnvironmentVariable(I){let d=process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.google_application_credentials;if(!d||d.length===0)return null;try{return this._getApplicationCredentialsFromFilePath(d,I)}catch(G){if(G instanceof Error)G.message=`Unable to read the credential file specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable: ${G.message}`;throw G}}async _tryGetApplicationCredentialsFromWellKnownFile(I){let d=null;if(this._isWindows())d=process.env.APPDATA;else{let Z=process.env.HOME;if(Z)d=VF1.join(Z,".config")}if(d){if(d=VF1.join(d,"gcloud","application_default_credentials.json"),!V$.existsSync(d))d=null}if(!d)return null;return await this._getApplicationCredentialsFromFilePath(d,I)}async _getApplicationCredentialsFromFilePath(I,d={}){if(!I||I.length===0)throw new Error("The file path is invalid.");try{if(I=V$.realpathSync(I),!V$.lstatSync(I).isFile())throw new Error}catch(Z){if(Z instanceof Error)Z.message=`The file at ${I} does not exist, or it is not a file. ${Z.message}`;throw Z}let G=V$.createReadStream(I);return this.fromStream(G,d)}fromImpersonatedJSON(I){var d,G,Z,C;if(!I)throw new Error("Must pass in a JSON object containing an impersonated refresh token");if(I.type!==tq.IMPERSONATED_ACCOUNT_TYPE)throw new Error(`The incoming JSON object does not have the "${tq.IMPERSONATED_ACCOUNT_TYPE}" type`);if(!I.source_credentials)throw new Error("The incoming JSON object does not contain a source_credentials field");if(!I.service_account_impersonation_url)throw new Error("The incoming JSON object does not contain a service_account_impersonation_url field");let W=this.fromJSON(I.source_credentials);if(((d=I.service_account_impersonation_url)===null||d===void 0?void 0:d.length)>256)throw new RangeError(`Target principal is too long: ${I.service_account_impersonation_url}`);let w=(Z=(G=/(?[^/]+):(generateAccessToken|generateIdToken)$/.exec(I.service_account_impersonation_url))===null||G===void 0?void 0:G.groups)===null||Z===void 0?void 0:Z.target;if(!w)throw new RangeError(`Cannot extract target principal from ${I.service_account_impersonation_url}`);let B=(C=this.getAnyScopes())!==null&&C!==void 0?C:[];return new tq.Impersonated({...I,sourceClient:W,targetPrincipal:w,targetScopes:Array.isArray(B)?B:[B]})}fromJSON(I,d={}){let G,Z=HC2.originalOrCamelOptions(d).get("universe_domain");if(I.type===_C2.USER_REFRESH_ACCOUNT_TYPE)G=new _C2.UserRefreshClient(d),G.fromJSON(I);else if(I.type===tq.IMPERSONATED_ACCOUNT_TYPE)G=this.fromImpersonatedJSON(I);else if(I.type===A$.EXTERNAL_ACCOUNT_TYPE)G=or5.ExternalAccountClient.fromJSON(I,d),G.scopes=this.getAnyScopes();else if(I.type===DC2.EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE)G=new DC2.ExternalAccountAuthorizedUserClient(I,d);else d.scopes=this.scopes,G=new eq.JWT(d),this.setGapicJWTValues(G),G.fromJSON(I);if(Z)G.universeDomain=Z;return G}_cacheClientFromJSON(I,d){let G=this.fromJSON(I,d);return this.jsonContent=I,this.cachedCredential=G,G}fromStream(I,d={},G){let Z={};if(typeof d==="function")G=d;else Z=d;if(G)this.fromStreamAsync(I,Z).then((C)=>G(null,C),G);else return this.fromStreamAsync(I,Z)}fromStreamAsync(I,d){return new Promise((G,Z)=>{if(!I)throw new Error("Must pass in a stream containing the Google auth settings.");let C=[];I.setEncoding("utf8").on("error",Z).on("data",(W)=>C.push(W)).on("end",()=>{try{try{let W=JSON.parse(C.join("")),w=this._cacheClientFromJSON(W,d);return G(w)}catch(W){if(!this.keyFilename)throw W;let w=new eq.JWT({...this.clientOptions,keyFile:this.keyFilename});return this.cachedCredential=w,this.setGapicJWTValues(w),G(w)}}catch(W){return Z(W)}})})}fromAPIKey(I,d={}){return new eq.JWT({...d,apiKey:I})}_isWindows(){let I=pr5.platform();if(I&&I.length>=3){if(I.substring(0,3).toLowerCase()==="win")return!0}return!1}async getDefaultServiceProjectId(){return new Promise((I)=>{cr5.exec("gcloud config config-helper --format json",(d,G)=>{if(!d&&G)try{let Z=JSON.parse(G).configuration.properties.core.project;I(Z);return}catch(Z){}I(null)})})}getProductionProjectId(){return process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT||process.env.gcloud_project||process.env.google_cloud_project}async getFileProjectId(){if(this.cachedCredential)return this.cachedCredential.projectId;if(this.keyFilename){let d=await this.getClient();if(d&&d.projectId)return d.projectId}let I=await this._tryGetApplicationCredentialsFromEnvironmentVariable();if(I)return I.projectId;else return null}async getExternalAccountClientProjectId(){if(!this.jsonContent||this.jsonContent.type!==A$.EXTERNAL_ACCOUNT_TYPE)return null;return await(await this.getClient()).getProjectId()}async getGCEProjectId(){try{return await B$.project("project-id")}catch(I){return null}}getCredentials(I){if(I)this.getCredentialsAsync().then((d)=>I(null,d),I);else return this.getCredentialsAsync()}async getCredentialsAsync(){let I=await this.getClient();if(I instanceof tq.Impersonated)return{client_email:I.getTargetPrincipal()};if(I instanceof A$.BaseExternalAccountClient){let d=I.getServiceAccountEmail();if(d)return{client_email:d,universe_domain:I.universeDomain}}if(this.jsonContent)return{client_email:this.jsonContent.client_email,private_key:this.jsonContent.private_key,universe_domain:this.jsonContent.universe_domain};if(await this._checkIsGCE()){let[d,G]=await Promise.all([B$.instance("service-accounts/default/email"),this.getUniverseDomain()]);return{client_email:d,universe_domain:G}}throw new Error(C7.GoogleAuthExceptionMessages.NO_CREDENTIALS_FOUND)}async getClient(){if(this.cachedCredential)return this.cachedCredential;YC2(this,IR,rD(this,IR,"f")||rD(this,aD,"m",FC2).call(this),"f");try{return await rD(this,IR,"f")}finally{YC2(this,IR,null,"f")}}async getIdTokenClient(I){let d=await this.getClient();if(!("fetchIdToken"in d))throw new Error("Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file.");return new ar5.IdTokenClient({targetAudience:I,idTokenProvider:d})}async getAccessToken(){return(await(await this.getClient()).getAccessToken()).token}async getRequestHeaders(I){return(await this.getClient()).getRequestHeaders(I)}async authorizeRequest(I){I=I||{};let d=I.url||I.uri,Z=await(await this.getClient()).getRequestHeaders(d);return I.headers=Object.assign(I.headers||{},Z),I}async request(I){return(await this.getClient()).request(I)}getEnv(){return sr5.getEnv()}async sign(I,d){let G=await this.getClient(),Z=await this.getUniverseDomain();if(d=d||`https://iamcredentials.${Z}/v1/projects/-/serviceAccounts/`,G instanceof tq.Impersonated)return(await G.sign(I)).signedBlob;let C=ir5.createCrypto();if(G instanceof eq.JWT&&G.key)return await C.sign(G.key,I);let W=await this.getCredentials();if(!W.client_email)throw new Error("Cannot sign data without `client_email`.");return this.signBlob(C,W.client_email,I,d)}async signBlob(I,d,G,Z){let C=new URL(Z+`${d}:signBlob`);return(await this.request({method:"POST",url:C.href,data:{payload:I.encodeBase64StringUtf8(G)},retry:!0,retryConfig:{httpMethodsToRetry:["POST"]}})).data.signedBlob}}C7.GoogleAuth=XF1;IR=new WeakMap,aD=new WeakSet,dR=async function I(d,G=process.env.GOOGLE_CLOUD_QUOTA_PROJECT||null){let Z=await this.getProjectIdOptional();if(G)d.quotaProjectId=G;return this.cachedCredential=d,{credential:d,projectId:Z}},FC2=async function I(){if(this.jsonContent)return this._cacheClientFromJSON(this.jsonContent,this.clientOptions);else if(this.keyFilename){let d=VF1.resolve(this.keyFilename),G=V$.createReadStream(d);return await this.fromStreamAsync(G,this.clientOptions)}else if(this.apiKey){let d=await this.fromAPIKey(this.apiKey,this.clientOptions);d.scopes=this.scopes;let{credential:G}=await rD(this,aD,"m",dR).call(this,d);return G}else{let{credential:d}=await this.getApplicationDefaultAsync(this.clientOptions);return d}};XF1.DefaultTransporter=nr5.DefaultTransporter});var zC2=Y((KC2)=>{Object.defineProperty(KC2,"__esModule",{value:!0});KC2.IAMAuth=void 0;class JC2{constructor(I,d){this.selector=I,this.token=d,this.selector=I,this.token=d}getRequestHeaders(){return{"x-goog-iam-authority-selector":this.selector,"x-goog-iam-authorization-token":this.token}}}KC2.IAMAuth=JC2});var RC2=Y((fC2)=>{Object.defineProperty(fC2,"__esModule",{value:!0});fC2.DownscopedClient=fC2.EXPIRATION_TIME_OFFSET=fC2.MAX_ACCESS_BOUNDARY_RULES_COUNT=void 0;var er5=B1("stream"),tr5=UB(),Ia5=$H1(),da5="urn:ietf:params:oauth:grant-type:token-exchange",Ga5="urn:ietf:params:oauth:token-type:access_token",Za5="urn:ietf:params:oauth:token-type:access_token";fC2.MAX_ACCESS_BOUNDARY_RULES_COUNT=10;fC2.EXPIRATION_TIME_OFFSET=300000;class QC2 extends tr5.AuthClient{constructor(I,d,G,Z){super({...G,quotaProjectId:Z});if(this.authClient=I,this.credentialAccessBoundary=d,d.accessBoundary.accessBoundaryRules.length===0)throw new Error("At least one access boundary rule needs to be defined.");else if(d.accessBoundary.accessBoundaryRules.length>fC2.MAX_ACCESS_BOUNDARY_RULES_COUNT)throw new Error(`The provided access boundary has more than ${fC2.MAX_ACCESS_BOUNDARY_RULES_COUNT} access boundary rules.`);for(let C of d.accessBoundary.accessBoundaryRules)if(C.availablePermissions.length===0)throw new Error("At least one permission should be defined in access boundary rules.");this.stsCredential=new Ia5.StsCredentials(`https://sts.${this.universeDomain}/v1/token`),this.cachedDownscopedAccessToken=null}setCredentials(I){if(!I.expiry_date)throw new Error("The access token expiry_date field is missing in the provided credentials.");super.setCredentials(I),this.cachedDownscopedAccessToken=I}async getAccessToken(){if(!this.cachedDownscopedAccessToken||this.isExpired(this.cachedDownscopedAccessToken))await this.refreshAccessTokenAsync();return{token:this.cachedDownscopedAccessToken.access_token,expirationTime:this.cachedDownscopedAccessToken.expiry_date,res:this.cachedDownscopedAccessToken.res}}async getRequestHeaders(){let d={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(d)}request(I,d){if(d)this.requestAsync(I).then((G)=>d(null,G),(G)=>{return d(G,G.response)});else return this.requestAsync(I)}async requestAsync(I,d=!1){let G;try{let Z=await this.getRequestHeaders();if(I.headers=I.headers||{},Z&&Z["x-goog-user-project"])I.headers["x-goog-user-project"]=Z["x-goog-user-project"];if(Z&&Z.Authorization)I.headers.Authorization=Z.Authorization;G=await this.transporter.request(I)}catch(Z){let C=Z.response;if(C){let W=C.status,w=C.config.data instanceof er5.Readable;if(!d&&(W===401||W===403)&&!w&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(I,!0)}throw Z}return G}async refreshAccessTokenAsync(){var I;let d=(await this.authClient.getAccessToken()).token,G={grantType:da5,requestedTokenType:Ga5,subjectToken:d,subjectTokenType:Za5},Z=await this.stsCredential.exchangeToken(G,void 0,this.credentialAccessBoundary),C=((I=this.authClient.credentials)===null||I===void 0?void 0:I.expiry_date)||null,W=Z.expires_in?new Date().getTime()+Z.expires_in*1000:C;return this.cachedDownscopedAccessToken={access_token:Z.access_token,expiry_date:W,res:Z.res},this.credentials={},Object.assign(this.credentials,this.cachedDownscopedAccessToken),delete this.credentials.res,this.emit("tokens",{refresh_token:null,expiry_date:this.cachedDownscopedAccessToken.expiry_date,access_token:this.cachedDownscopedAccessToken.access_token,token_type:"Bearer",id_token:null}),this.cachedDownscopedAccessToken}isExpired(I){let d=new Date().getTime();return I.expiry_date?d>=I.expiry_date-this.eagerRefreshThresholdMillis:!1}}fC2.DownscopedClient=QC2});var EC2=Y((UC2)=>{Object.defineProperty(UC2,"__esModule",{value:!0});UC2.PassThroughClient=void 0;var Wa5=UB();class _F1 extends Wa5.AuthClient{async request(I){return this.transporter.request(I)}async getAccessToken(){return{}}async getRequestHeaders(){return{}}}UC2.PassThroughClient=_F1;var wa5=new _F1;wa5.getAccessToken()});var yC2=Y((R9)=>{Object.defineProperty(R9,"__esModule",{value:!0});R9.GoogleAuth=R9.auth=R9.DefaultTransporter=R9.PassThroughClient=R9.ExecutableError=R9.PluggableAuthClient=R9.DownscopedClient=R9.BaseExternalAccountClient=R9.ExternalAccountClient=R9.IdentityPoolClient=R9.AwsRequestSigner=R9.AwsClient=R9.UserRefreshClient=R9.LoginTicket=R9.ClientAuthentication=R9.OAuth2Client=R9.CodeChallengeMethod=R9.Impersonated=R9.JWT=R9.JWTAccess=R9.IdTokenClient=R9.IAMAuth=R9.GCPEnv=R9.Compute=R9.DEFAULT_UNIVERSE=R9.AuthClient=R9.gaxios=R9.gcpMetadata=void 0;var MC2=gC2();Object.defineProperty(R9,"GoogleAuth",{enumerable:!0,get:function(){return MC2.GoogleAuth}});R9.gcpMetadata=sP();R9.gaxios=dW();var SC2=UB();Object.defineProperty(R9,"AuthClient",{enumerable:!0,get:function(){return SC2.AuthClient}});Object.defineProperty(R9,"DEFAULT_UNIVERSE",{enumerable:!0,get:function(){return SC2.DEFAULT_UNIVERSE}});var Ba5=YH1();Object.defineProperty(R9,"Compute",{enumerable:!0,get:function(){return Ba5.Compute}});var Aa5=DH1();Object.defineProperty(R9,"GCPEnv",{enumerable:!0,get:function(){return Aa5.GCPEnv}});var Va5=zC2();Object.defineProperty(R9,"IAMAuth",{enumerable:!0,get:function(){return Va5.IAMAuth}});var Xa5=_H1();Object.defineProperty(R9,"IdTokenClient",{enumerable:!0,get:function(){return Xa5.IdTokenClient}});var Ya5=vH1();Object.defineProperty(R9,"JWTAccess",{enumerable:!0,get:function(){return Ya5.JWTAccess}});var _a5=MH1();Object.defineProperty(R9,"JWT",{enumerable:!0,get:function(){return _a5.JWT}});var Da5=LH1();Object.defineProperty(R9,"Impersonated",{enumerable:!0,get:function(){return Da5.Impersonated}});var DF1=TJ();Object.defineProperty(R9,"CodeChallengeMethod",{enumerable:!0,get:function(){return DF1.CodeChallengeMethod}});Object.defineProperty(R9,"OAuth2Client",{enumerable:!0,get:function(){return DF1.OAuth2Client}});Object.defineProperty(R9,"ClientAuthentication",{enumerable:!0,get:function(){return DF1.ClientAuthentication}});var Ha5=AH1();Object.defineProperty(R9,"LoginTicket",{enumerable:!0,get:function(){return Ha5.LoginTicket}});var Fa5=SH1();Object.defineProperty(R9,"UserRefreshClient",{enumerable:!0,get:function(){return Fa5.UserRefreshClient}});var ga5=rH1();Object.defineProperty(R9,"AwsClient",{enumerable:!0,get:function(){return ga5.AwsClient}});var Ja5=pH1();Object.defineProperty(R9,"AwsRequestSigner",{enumerable:!0,get:function(){return Ja5.AwsRequestSigner}});var Ka5=cH1();Object.defineProperty(R9,"IdentityPoolClient",{enumerable:!0,get:function(){return Ka5.IdentityPoolClient}});var Na5=wF1();Object.defineProperty(R9,"ExternalAccountClient",{enumerable:!0,get:function(){return Na5.ExternalAccountClient}});var za5=nD();Object.defineProperty(R9,"BaseExternalAccountClient",{enumerable:!0,get:function(){return za5.BaseExternalAccountClient}});var Qa5=RC2();Object.defineProperty(R9,"DownscopedClient",{enumerable:!0,get:function(){return Qa5.DownscopedClient}});var LC2=Va();Object.defineProperty(R9,"PluggableAuthClient",{enumerable:!0,get:function(){return LC2.PluggableAuthClient}});Object.defineProperty(R9,"ExecutableError",{enumerable:!0,get:function(){return LC2.ExecutableError}});var fa5=EC2();Object.defineProperty(R9,"PassThroughClient",{enumerable:!0,get:function(){return fa5.PassThroughClient}});var qa5=eP();Object.defineProperty(R9,"DefaultTransporter",{enumerable:!0,get:function(){return qa5.DefaultTransporter}});var Ra5=new MC2.GoogleAuth;R9.auth=Ra5});var $C2=Y((KX3,$a5)=>{$a5.exports={name:"dotenv",version:"16.4.5",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec","test:coverage":"tap --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var mC2=Y((NX3,tV)=>{var HF1=B1("fs"),FF1=B1("path"),ua5=B1("os"),Ta5=B1("crypto"),Oa5=$C2(),gF1=Oa5.version,ma5=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function la5(I){let d={},G=I.toString();G=G.replace(/\r\n?/mg,` +`);let Z;while((Z=ma5.exec(G))!=null){let C=Z[1],W=Z[2]||"";W=W.trim();let w=W[0];if(W=W.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),w==='"')W=W.replace(/\\n/g,` +`),W=W.replace(/\\r/g,"\r");d[C]=W}return d}function ba5(I){let d=OC2(I),G=r6.configDotenv({path:d});if(!G.parsed){let w=new Error(`MISSING_DATA: Cannot parse ${d} for an unknown reason`);throw w.code="MISSING_DATA",w}let Z=TC2(I).split(","),C=Z.length,W;for(let w=0;w=C)throw B}return r6.parse(W)}function ha5(I){console.log(`[dotenv@${gF1}][INFO] ${I}`)}function ja5(I){console.log(`[dotenv@${gF1}][WARN] ${I}`)}function Ya(I){console.log(`[dotenv@${gF1}][DEBUG] ${I}`)}function TC2(I){if(I&&I.DOTENV_KEY&&I.DOTENV_KEY.length>0)return I.DOTENV_KEY;if(process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0)return process.env.DOTENV_KEY;return""}function ka5(I,d){let G;try{G=new URL(d)}catch(B){if(B.code==="ERR_INVALID_URL"){let A=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw A.code="INVALID_DOTENV_KEY",A}throw B}let Z=G.password;if(!Z){let B=new Error("INVALID_DOTENV_KEY: Missing key part");throw B.code="INVALID_DOTENV_KEY",B}let C=G.searchParams.get("environment");if(!C){let B=new Error("INVALID_DOTENV_KEY: Missing environment part");throw B.code="INVALID_DOTENV_KEY",B}let W=`DOTENV_VAULT_${C.toUpperCase()}`,w=I.parsed[W];if(!w){let B=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${W} in your .env.vault file.`);throw B.code="NOT_FOUND_DOTENV_ENVIRONMENT",B}return{ciphertext:w,key:Z}}function OC2(I){let d=null;if(I&&I.path&&I.path.length>0)if(Array.isArray(I.path)){for(let G of I.path)if(HF1.existsSync(G))d=G.endsWith(".vault")?G:`${G}.vault`}else d=I.path.endsWith(".vault")?I.path:`${I.path}.vault`;else d=FF1.resolve(process.cwd(),".env.vault");if(HF1.existsSync(d))return d;return null}function uC2(I){return I[0]==="~"?FF1.join(ua5.homedir(),I.slice(1)):I}function xa5(I){ha5("Loading env from encrypted .env.vault");let d=r6._parseVault(I),G=process.env;if(I&&I.processEnv!=null)G=I.processEnv;return r6.populate(G,d,I),{parsed:d}}function ca5(I){let d=FF1.resolve(process.cwd(),".env"),G="utf8",Z=Boolean(I&&I.debug);if(I&&I.encoding)G=I.encoding;else if(Z)Ya("No encoding is specified. UTF-8 is used by default");let C=[d];if(I&&I.path)if(!Array.isArray(I.path))C=[uC2(I.path)];else{C=[];for(let A of I.path)C.push(uC2(A))}let W,w={};for(let A of C)try{let V=r6.parse(HF1.readFileSync(A,{encoding:G}));r6.populate(w,V,I)}catch(V){if(Z)Ya(`Failed to load ${A} ${V.message}`);W=V}let B=process.env;if(I&&I.processEnv!=null)B=I.processEnv;if(r6.populate(B,w,I),W)return{parsed:w,error:W};else return{parsed:w}}function pa5(I){if(TC2(I).length===0)return r6.configDotenv(I);let d=OC2(I);if(!d)return ja5(`You set DOTENV_KEY but you are missing a .env.vault file at ${d}. Did you forget to build it?`),r6.configDotenv(I);return r6._configVault(I)}function ia5(I,d){let G=Buffer.from(d.slice(-64),"hex"),Z=Buffer.from(I,"base64"),C=Z.subarray(0,12),W=Z.subarray(-16);Z=Z.subarray(12,-16);try{let w=Ta5.createDecipheriv("aes-256-gcm",G,C);return w.setAuthTag(W),`${w.update(Z)}${w.final()}`}catch(w){let B=w instanceof RangeError,A=w.message==="Invalid key length",V=w.message==="Unsupported state or unable to authenticate data";if(B||A){let X=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw X.code="INVALID_DOTENV_KEY",X}else if(V){let X=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw X.code="DECRYPTION_FAILED",X}else throw w}}function na5(I,d,G={}){let Z=Boolean(G&&G.debug),C=Boolean(G&&G.override);if(typeof d!=="object"){let W=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw W.code="OBJECT_REQUIRED",W}for(let W of Object.keys(d))if(Object.prototype.hasOwnProperty.call(I,W)){if(C===!0)I[W]=d[W];if(Z)if(C===!0)Ya(`"${W}" is already defined and WAS overwritten`);else Ya(`"${W}" is already defined and was NOT overwritten`)}else I[W]=d[W]}var r6={configDotenv:ca5,_configVault:xa5,_parseVault:ba5,config:pa5,decrypt:ia5,parse:la5,populate:na5};NX3.configDotenv=r6.configDotenv;NX3._configVault=r6._configVault;NX3._parseVault=r6._parseVault;NX3.config=r6.config;NX3.decrypt=r6.decrypt;NX3.parse=r6.parse;NX3.populate=r6.populate;tV.exports=r6});var bC2=Y((zX3,lC2)=>{var GR={};if(process.env.DOTENV_CONFIG_ENCODING!=null)GR.encoding=process.env.DOTENV_CONFIG_ENCODING;if(process.env.DOTENV_CONFIG_PATH!=null)GR.path=process.env.DOTENV_CONFIG_PATH;if(process.env.DOTENV_CONFIG_DEBUG!=null)GR.debug=process.env.DOTENV_CONFIG_DEBUG;if(process.env.DOTENV_CONFIG_OVERRIDE!=null)GR.override=process.env.DOTENV_CONFIG_OVERRIDE;if(process.env.DOTENV_CONFIG_DOTENV_KEY!=null)GR.DOTENV_KEY=process.env.DOTENV_CONFIG_DOTENV_KEY;lC2.exports=GR});var jC2=Y((QX3,hC2)=>{var ds5=/^dotenv_config_(encoding|path|debug|override|DOTENV_KEY)=(.+)$/;hC2.exports=function I(d){return d.reduce(function(G,Z){let C=Z.match(ds5);if(C)G[C[1]]=C[2];return G},{})}});var kC2=Y(()=>{(function(){mC2().config(Object.assign({},bC2(),jC2()(process.argv)))})()});var Xw2=Y((UD3,Vw2)=>{function TF1(I){if(I instanceof Map)I.clear=I.delete=I.set=function(){throw new Error("map is read-only")};else if(I instanceof Set)I.add=I.clear=I.delete=function(){throw new Error("set is read-only")};return Object.freeze(I),Object.getOwnPropertyNames(I).forEach(function(d){var G=I[d];if(typeof G=="object"&&!Object.isFrozen(G))TF1(G)}),I}var Iw2=TF1,Mo5=TF1;Iw2.default=Mo5;class $F1{constructor(I){if(I.data===void 0)I.data={};this.data=I.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function zR(I){return I.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function GH(I,...d){let G=Object.create(null);for(let Z in I)G[Z]=I[Z];return d.forEach(function(Z){for(let C in Z)G[C]=Z[C]}),G}var So5="",rW2=(I)=>{return!!I.kind};class dw2{constructor(I,d){this.buffer="",this.classPrefix=d.classPrefix,I.walk(this)}addText(I){this.buffer+=zR(I)}openNode(I){if(!rW2(I))return;let d=I.kind;if(!I.sublanguage)d=`${this.classPrefix}${d}`;this.span(d)}closeNode(I){if(!rW2(I))return;this.buffer+=So5}value(){return this.buffer}span(I){this.buffer+=``}}class OF1{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(I){this.top.children.push(I)}openNode(I){let d={kind:I,children:[]};this.add(d),this.stack.push(d)}closeNode(){if(this.stack.length>1)return this.stack.pop();return}closeAllNodes(){while(this.closeNode());}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(I){return this.constructor._walk(I,this.rootNode)}static _walk(I,d){if(typeof d==="string")I.addText(d);else if(d.children)I.openNode(d),d.children.forEach((G)=>this._walk(I,G)),I.closeNode(d);return I}static _collapse(I){if(typeof I==="string")return;if(!I.children)return;if(I.children.every((d)=>typeof d==="string"))I.children=[I.children.join("")];else I.children.forEach((d)=>{OF1._collapse(d)})}}class Gw2 extends OF1{constructor(I){super();this.options=I}addKeyword(I,d){if(I==="")return;this.openNode(d),this.addText(I),this.closeNode()}addText(I){if(I==="")return;this.add(I)}addSublanguage(I,d){let G=I.root;G.kind=d,G.sublanguage=!0,this.add(G)}toHTML(){return new dw2(this,this.options).value()}finalize(){return!0}}function Lo5(I){return new RegExp(I.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}function f$(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function yo5(...I){return I.map((G)=>f$(G)).join("")}function Po5(...I){return"("+I.map((G)=>f$(G)).join("|")+")"}function $o5(I){return new RegExp(I.toString()+"|").exec("").length-1}function uo5(I,d){let G=I&&I.exec(d);return G&&G.index===0}var To5=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function Oo5(I,d="|"){let G=0;return I.map((Z)=>{G+=1;let C=G,W=f$(Z),w="";while(W.length>0){let B=To5.exec(W);if(!B){w+=W;break}if(w+=W.substring(0,B.index),W=W.substring(B.index+B[0].length),B[0][0]==="\\"&&B[1])w+="\\"+String(Number(B[1])+C);else if(w+=B[0],B[0]==="(")G++}return w}).map((Z)=>`(${Z})`).join(d)}var mo5=/\b\B/,Zw2="[a-zA-Z]\\w*",mF1="[a-zA-Z_]\\w*",lF1="\\b\\d+(\\.\\d+)?",Cw2="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Ww2="\\b(0b[01]+)",lo5="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",bo5=(I={})=>{let d=/^#![ ]*\//;if(I.binary)I.begin=yo5(d,/.*\b/,I.binary,/\b.*/);return GH({className:"meta",begin:d,end:/$/,relevance:0,"on:begin":(G,Z)=>{if(G.index!==0)Z.ignoreMatch()}},I)},q$={begin:"\\\\[\\s\\S]",relevance:0},ho5={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[q$]},jo5={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[q$]},ww2={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Ua=function(I,d,G={}){let Z=GH({className:"comment",begin:I,end:d,contains:[]},G);return Z.contains.push(ww2),Z.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),Z},ko5=Ua("//","$"),xo5=Ua("/\\*","\\*/"),co5=Ua("#","$"),po5={className:"number",begin:lF1,relevance:0},io5={className:"number",begin:Cw2,relevance:0},no5={className:"number",begin:Ww2,relevance:0},ro5={className:"number",begin:lF1+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},ao5={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[q$,{begin:/\[/,end:/\]/,relevance:0,contains:[q$]}]}]},so5={className:"title",begin:Zw2,relevance:0},oo5={className:"title",begin:mF1,relevance:0},eo5={begin:"\\.\\s*"+mF1,relevance:0},to5=function(I){return Object.assign(I,{"on:begin":(d,G)=>{G.data._beginMatch=d[1]},"on:end":(d,G)=>{if(G.data._beginMatch!==d[1])G.ignoreMatch()}})},Ra=Object.freeze({__proto__:null,MATCH_NOTHING_RE:mo5,IDENT_RE:Zw2,UNDERSCORE_IDENT_RE:mF1,NUMBER_RE:lF1,C_NUMBER_RE:Cw2,BINARY_NUMBER_RE:Ww2,RE_STARTERS_RE:lo5,SHEBANG:bo5,BACKSLASH_ESCAPE:q$,APOS_STRING_MODE:ho5,QUOTE_STRING_MODE:jo5,PHRASAL_WORDS_MODE:ww2,COMMENT:Ua,C_LINE_COMMENT_MODE:ko5,C_BLOCK_COMMENT_MODE:xo5,HASH_COMMENT_MODE:co5,NUMBER_MODE:po5,C_NUMBER_MODE:io5,BINARY_NUMBER_MODE:no5,CSS_NUMBER_MODE:ro5,REGEXP_MODE:ao5,TITLE_MODE:so5,UNDERSCORE_TITLE_MODE:oo5,METHOD_GUARD:eo5,END_SAME_AS_BEGIN:to5});function Ie5(I,d){if(I.input[I.index-1]===".")d.ignoreMatch()}function de5(I,d){if(!d)return;if(!I.beginKeywords)return;if(I.begin="\\b("+I.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",I.__beforeBegin=Ie5,I.keywords=I.keywords||I.beginKeywords,delete I.beginKeywords,I.relevance===void 0)I.relevance=0}function Ge5(I,d){if(!Array.isArray(I.illegal))return;I.illegal=Po5(...I.illegal)}function Ze5(I,d){if(!I.match)return;if(I.begin||I.end)throw new Error("begin & end are not supported with match");I.begin=I.match,delete I.match}function Ce5(I,d){if(I.relevance===void 0)I.relevance=1}var We5=["of","and","for","in","not","or","if","then","parent","list","value"],we5="keyword";function Bw2(I,d,G=we5){let Z={};if(typeof I==="string")C(G,I.split(" "));else if(Array.isArray(I))C(G,I);else Object.keys(I).forEach(function(W){Object.assign(Z,Bw2(I[W],d,W))});return Z;function C(W,w){if(d)w=w.map((B)=>B.toLowerCase());w.forEach(function(B){let A=B.split("|");Z[A[0]]=[W,Be5(A[0],A[1])]})}}function Be5(I,d){if(d)return Number(d);return Ae5(I)?0:1}function Ae5(I){return We5.includes(I.toLowerCase())}function Ve5(I,{plugins:d}){function G(B,A){return new RegExp(f$(B),"m"+(I.case_insensitive?"i":"")+(A?"g":""))}class Z{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(B,A){A.position=this.position++,this.matchIndexes[this.matchAt]=A,this.regexes.push([A,B]),this.matchAt+=$o5(B)+1}compile(){if(this.regexes.length===0)this.exec=()=>null;let B=this.regexes.map((A)=>A[1]);this.matcherRe=G(Oo5(B),!0),this.lastIndex=0}exec(B){this.matcherRe.lastIndex=this.lastIndex;let A=this.matcherRe.exec(B);if(!A)return null;let V=A.findIndex((_,F)=>F>0&&_!==void 0),X=this.matchIndexes[V];return A.splice(0,V),Object.assign(A,X)}}class C{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(B){if(this.multiRegexes[B])return this.multiRegexes[B];let A=new Z;return this.rules.slice(B).forEach(([V,X])=>A.addRule(V,X)),A.compile(),this.multiRegexes[B]=A,A}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(B,A){if(this.rules.push([B,A]),A.type==="begin")this.count++}exec(B){let A=this.getMatcher(this.regexIndex);A.lastIndex=this.lastIndex;let V=A.exec(B);if(this.resumingScanAtSamePosition())if(V&&V.index===this.lastIndex);else{let X=this.getMatcher(0);X.lastIndex=this.lastIndex+1,V=X.exec(B)}if(V){if(this.regexIndex+=V.position+1,this.regexIndex===this.count)this.considerAll()}return V}}function W(B){let A=new C;if(B.contains.forEach((V)=>A.addRule(V.begin,{rule:V,type:"begin"})),B.terminatorEnd)A.addRule(B.terminatorEnd,{type:"end"});if(B.illegal)A.addRule(B.illegal,{type:"illegal"});return A}function w(B,A){let V=B;if(B.isCompiled)return V;[Ze5].forEach((_)=>_(B,A)),I.compilerExtensions.forEach((_)=>_(B,A)),B.__beforeBegin=null,[de5,Ge5,Ce5].forEach((_)=>_(B,A)),B.isCompiled=!0;let X=null;if(typeof B.keywords==="object")X=B.keywords.$pattern,delete B.keywords.$pattern;if(B.keywords)B.keywords=Bw2(B.keywords,I.case_insensitive);if(B.lexemes&&X)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");if(X=X||B.lexemes||/\w+/,V.keywordPatternRe=G(X,!0),A){if(!B.begin)B.begin=/\B|\b/;if(V.beginRe=G(B.begin),B.endSameAsBegin)B.end=B.begin;if(!B.end&&!B.endsWithParent)B.end=/\B|\b/;if(B.end)V.endRe=G(B.end);if(V.terminatorEnd=f$(B.end)||"",B.endsWithParent&&A.terminatorEnd)V.terminatorEnd+=(B.end?"|":"")+A.terminatorEnd}if(B.illegal)V.illegalRe=G(B.illegal);if(!B.contains)B.contains=[];if(B.contains=[].concat(...B.contains.map(function(_){return Xe5(_==="self"?B:_)})),B.contains.forEach(function(_){w(_,V)}),B.starts)w(B.starts,A);return V.matcher=W(V),V}if(!I.compilerExtensions)I.compilerExtensions=[];if(I.contains&&I.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return I.classNameAliases=GH(I.classNameAliases||{}),w(I)}function Aw2(I){if(!I)return!1;return I.endsWithParent||Aw2(I.starts)}function Xe5(I){if(I.variants&&!I.cachedVariants)I.cachedVariants=I.variants.map(function(d){return GH(I,{variants:null},d)});if(I.cachedVariants)return I.cachedVariants;if(Aw2(I))return GH(I,{starts:I.starts?GH(I.starts):null});if(Object.isFrozen(I))return GH(I);return I}var Ye5="10.7.3";function _e5(I){return Boolean(I||I==="")}function De5(I){let d={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){if(this.unknownLanguage)return"";return"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!I.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,zR(this.code);let Z={};if(this.autoDetect)Z=I.highlightAuto(this.code),this.detectedLanguage=Z.language;else Z=I.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language;return Z.value},autoDetect(){return!this.language||_e5(this.autodetect)},ignoreIllegals(){return!0}},render(Z){return Z("pre",{},[Z("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:d,VuePlugin:{install(Z){Z.component("highlightjs",d)}}}}var He5={"after:highlightElement":({el:I,result:d,text:G})=>{let Z=aW2(I);if(!Z.length)return;let C=document.createElement("div");C.innerHTML=d.value,d.value=Fe5(Z,aW2(C),G)}};function uF1(I){return I.nodeName.toLowerCase()}function aW2(I){let d=[];return function G(Z,C){for(let W=Z.firstChild;W;W=W.nextSibling)if(W.nodeType===3)C+=W.nodeValue.length;else if(W.nodeType===1){if(d.push({event:"start",offset:C,node:W}),C=G(W,C),!uF1(W).match(/br|hr|img|input/))d.push({event:"stop",offset:C,node:W})}return C}(I,0),d}function Fe5(I,d,G){let Z=0,C="",W=[];function w(){if(!I.length||!d.length)return I.length?I:d;if(I[0].offset!==d[0].offset)return I[0].offset"}function A(X){C+=""}function V(X){(X.event==="start"?B:A)(X.node)}while(I.length||d.length){let X=w();if(C+=zR(G.substring(Z,X[0].offset)),Z=X[0].offset,X===I){W.reverse().forEach(A);do V(X.splice(0,1)[0]),X=w();while(X===I&&X.length&&X[0].offset===Z);W.reverse().forEach(B)}else{if(X[0].event==="start")W.push(X[0].node);else W.pop();V(X.splice(0,1)[0])}}return C+zR(G.substr(Z))}var sW2={},yF1=(I)=>{console.error(I)},oW2=(I,...d)=>{console.log(`WARN: ${I}`,...d)},kZ=(I,d)=>{if(sW2[`${I}/${d}`])return;console.log(`Deprecated as of ${I}. ${d}`),sW2[`${I}/${d}`]=!0},PF1=zR,eW2=GH,tW2=Symbol("nomatch"),ge5=function(I){let d=Object.create(null),G=Object.create(null),Z=[],C=!0,W=/(^(<[^>]+>|\t|)+|\n)/gm,w="Could not find the language '{}', did you forget to load/include a language module?",B={disableAutodetect:!0,name:"Plain text",contains:[]},A={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:Gw2};function V(e){return A.noHighlightRe.test(e)}function X(e){let G0=e.className+" ";G0+=e.parentNode?e.parentNode.className:"";let H1=A.languageDetectRe.exec(G0);if(H1){let j1=A1(H1[1]);if(!j1)oW2(w.replace("{}",H1[1])),oW2("Falling back to no-highlight mode for this block.",e);return j1?H1[1]:"no-highlight"}return G0.split(/\s+/).find((j1)=>V(j1)||A1(j1))}function _(e,G0,H1,j1){let i1="",E0="";if(typeof G0==="object")i1=e,H1=G0.ignoreIllegals,E0=G0.language,j1=void 0;else kZ("10.7.0","highlight(lang, code, ...args) has been deprecated."),kZ("10.7.0",`Please use highlight(code, options) instead. +https://github.com/highlightjs/highlight.js/issues/2277`),E0=e,i1=G0;let k={code:i1,language:E0};P0("before:highlight",k);let a=k.result?k.result:F(k.language,k.code,H1,j1);return a.code=k.code,P0("after:highlight",a),a}function F(e,G0,H1,j1){function i1(n0,B2){let A2=j.case_insensitive?B2[0].toLowerCase():B2[0];return Object.prototype.hasOwnProperty.call(n0.keywords,A2)&&n0.keywords[A2]}function E0(){if(!L1.keywords){O0.addText(k0);return}let n0=0;L1.keywordPatternRe.lastIndex=0;let B2=L1.keywordPatternRe.exec(k0),A2="";while(B2){A2+=k0.substring(n0,B2.index);let B4=i1(L1,B2);if(B4){let[A4,_5]=B4;if(O0.addText(A2),A2="",i0+=_5,A4.startsWith("_"))A2+=B2[0];else{let D5=j.classNameAliases[A4]||A4;O0.addKeyword(B2[0],D5)}}else A2+=B2[0];n0=L1.keywordPatternRe.lastIndex,B2=L1.keywordPatternRe.exec(k0)}A2+=k0.substr(n0),O0.addText(A2)}function k(){if(k0==="")return;let n0=null;if(typeof L1.subLanguage==="string"){if(!d[L1.subLanguage]){O0.addText(k0);return}n0=F(L1.subLanguage,k0,!0,D0[L1.subLanguage]),D0[L1.subLanguage]=n0.top}else n0=J(k0,L1.subLanguage.length?L1.subLanguage:null);if(L1.relevance>0)i0+=n0.relevance;O0.addSublanguage(n0.emitter,n0.language)}function a(){if(L1.subLanguage!=null)k();else E0();k0=""}function Z1(n0){if(n0.className)O0.openNode(j.classNameAliases[n0.className]||n0.className);return L1=Object.create(n0,{parent:{value:L1}}),L1}function Q1(n0,B2,A2){let B4=uo5(n0.endRe,A2);if(B4){if(n0["on:end"]){let A4=new $F1(n0);if(n0["on:end"](B2,A4),A4.isMatchIgnored)B4=!1}if(B4){while(n0.endsParent&&n0.parent)n0=n0.parent;return n0}}if(n0.endsWithParent)return Q1(n0.parent,B2,A2)}function N1(n0){if(L1.matcher.regexIndex===0)return k0+=n0[0],1;else return a5=!0,0}function F1(n0){let B2=n0[0],A2=n0.rule,B4=new $F1(A2),A4=[A2.__beforeBegin,A2["on:begin"]];for(let _5 of A4){if(!_5)continue;if(_5(n0,B4),B4.isMatchIgnored)return N1(B2)}if(A2&&A2.endSameAsBegin)A2.endRe=Lo5(B2);if(A2.skip)k0+=B2;else{if(A2.excludeBegin)k0+=B2;if(a(),!A2.returnBegin&&!A2.excludeBegin)k0=B2}return Z1(A2),A2.returnBegin?0:B2.length}function O1(n0){let B2=n0[0],A2=G0.substr(n0.index),B4=Q1(L1,n0,A2);if(!B4)return tW2;let A4=L1;if(A4.skip)k0+=B2;else{if(!(A4.returnEnd||A4.excludeEnd))k0+=B2;if(a(),A4.excludeEnd)k0=B2}do{if(L1.className)O0.closeNode();if(!L1.skip&&!L1.subLanguage)i0+=L1.relevance;L1=L1.parent}while(L1!==B4.parent);if(B4.starts){if(B4.endSameAsBegin)B4.starts.endRe=B4.endRe;Z1(B4.starts)}return A4.returnEnd?0:B2.length}function K1(){let n0=[];for(let B2=L1;B2!==j;B2=B2.parent)if(B2.className)n0.unshift(B2.className);n0.forEach((B2)=>O0.openNode(B2))}let R1={};function h1(n0,B2){let A2=B2&&B2[0];if(k0+=n0,A2==null)return a(),0;if(R1.type==="begin"&&B2.type==="end"&&R1.index===B2.index&&A2===""){if(k0+=G0.slice(B2.index,B2.index+1),!C){let B4=new Error("0 width match regex");throw B4.languageName=e,B4.badRule=R1.rule,B4}return 1}if(R1=B2,B2.type==="begin")return F1(B2);else if(B2.type==="illegal"&&!H1){let B4=new Error('Illegal lexeme "'+A2+'" for mode "'+(L1.className||"")+'"');throw B4.mode=L1,B4}else if(B2.type==="end"){let B4=O1(B2);if(B4!==tW2)return B4}if(B2.type==="illegal"&&A2==="")return 1;if(P2>1e5&&P2>B2.index*3)throw new Error("potential infinite loop, way more iterations than matches");return k0+=A2,A2.length}let j=A1(e);if(!j)throw yF1(w.replace("{}",e)),new Error('Unknown language: "'+e+'"');let W1=Ve5(j,{plugins:Z}),U1="",L1=j1||W1,D0={},O0=new A.__emitter(A);K1();let k0="",i0=0,s0=0,P2=0,a5=!1;try{L1.matcher.considerAll();for(;;){if(P2++,a5)a5=!1;else L1.matcher.considerAll();L1.matcher.lastIndex=s0;let n0=L1.matcher.exec(G0);if(!n0)break;let B2=G0.substring(s0,n0.index),A2=h1(B2,n0);s0=n0.index+A2}return h1(G0.substr(s0)),O0.closeAllNodes(),O0.finalize(),U1=O0.toHTML(),{relevance:Math.floor(i0),value:U1,language:e,illegal:!1,emitter:O0,top:L1}}catch(n0){if(n0.message&&n0.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n0.message,context:G0.slice(s0-100,s0+100),mode:n0.mode},sofar:U1,relevance:0,value:PF1(G0),emitter:O0};else if(C)return{illegal:!1,relevance:0,value:PF1(G0),emitter:O0,language:e,top:L1,errorRaised:n0};else throw n0}}function g(e){let G0={relevance:0,emitter:new A.__emitter(A),value:PF1(e),illegal:!1,top:B};return G0.emitter.addText(e),G0}function J(e,G0){G0=G0||A.languages||Object.keys(d);let H1=g(e),j1=G0.filter(A1).filter(T1).map((Z1)=>F(Z1,e,!1));j1.unshift(H1);let i1=j1.sort((Z1,Q1)=>{if(Z1.relevance!==Q1.relevance)return Q1.relevance-Z1.relevance;if(Z1.language&&Q1.language){if(A1(Z1.language).supersetOf===Q1.language)return 1;else if(A1(Q1.language).supersetOf===Z1.language)return-1}return 0}),[E0,k]=i1,a=E0;return a.second_best=k,a}function K(e){if(!(A.tabReplace||A.useBR))return e;return e.replace(W,(G0)=>{if(G0===` +`)return A.useBR?"
":G0;else if(A.tabReplace)return G0.replace(/\t/g,A.tabReplace);return G0})}function Q(e,G0,H1){let j1=G0?G[G0]:H1;if(e.classList.add("hljs"),j1)e.classList.add(j1)}let E={"before:highlightElement":({el:e})=>{if(A.useBR)e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,` +`)},"after:highlightElement":({result:e})=>{if(A.useBR)e.value=e.value.replace(/\n/g,"
")}},S=/^(<[^>]+>|\t)+/gm,P={"after:highlightElement":({result:e})=>{if(A.tabReplace)e.value=e.value.replace(S,(G0)=>G0.replace(/\t/g,A.tabReplace))}};function $(e){let G0=null,H1=X(e);if(V(H1))return;P0("before:highlightElement",{el:e,language:H1}),G0=e;let j1=G0.textContent,i1=H1?_(j1,{language:H1,ignoreIllegals:!0}):J(j1);if(P0("after:highlightElement",{el:e,result:i1,text:j1}),e.innerHTML=i1.value,Q(e,H1,i1.language),e.result={language:i1.language,re:i1.relevance,relavance:i1.relevance},i1.second_best)e.second_best={language:i1.second_best.language,re:i1.second_best.relevance,relavance:i1.second_best.relevance}}function h(e){if(e.useBR)kZ("10.3.0","'useBR' will be removed entirely in v11.0"),kZ("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559");A=eW2(A,e)}let O=()=>{if(O.called)return;O.called=!0,kZ("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead."),document.querySelectorAll("pre code").forEach($)};function T(){kZ("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),V1=!0}let V1=!1;function c(){if(document.readyState==="loading"){V1=!0;return}document.querySelectorAll("pre code").forEach($)}function c1(){if(V1)c()}if(typeof window!=="undefined"&&window.addEventListener)window.addEventListener("DOMContentLoaded",c1,!1);function o1(e,G0){let H1=null;try{H1=G0(I)}catch(j1){if(yF1("Language definition for '{}' could not be registered.".replace("{}",e)),!C)throw j1;else yF1(j1);H1=B}if(!H1.name)H1.name=e;if(d[e]=H1,H1.rawDefinition=G0.bind(null,I),H1.aliases)m1(H1.aliases,{languageName:e})}function a1(e){delete d[e];for(let G0 of Object.keys(G))if(G[G0]===e)delete G[G0]}function f1(){return Object.keys(d)}function r(e){kZ("10.4.0","requireLanguage will be removed entirely in v11."),kZ("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");let G0=A1(e);if(G0)return G0;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))}function A1(e){return e=(e||"").toLowerCase(),d[e]||d[G[e]]}function m1(e,{languageName:G0}){if(typeof e==="string")e=[e];e.forEach((H1)=>{G[H1.toLowerCase()]=G0})}function T1(e){let G0=A1(e);return G0&&!G0.disableAutodetect}function e1(e){if(e["before:highlightBlock"]&&!e["before:highlightElement"])e["before:highlightElement"]=(G0)=>{e["before:highlightBlock"](Object.assign({block:G0.el},G0))};if(e["after:highlightBlock"]&&!e["after:highlightElement"])e["after:highlightElement"]=(G0)=>{e["after:highlightBlock"](Object.assign({block:G0.el},G0))}}function F0(e){e1(e),Z.push(e)}function P0(e,G0){let H1=e;Z.forEach(function(j1){if(j1[H1])j1[H1](G0)})}function B0(e){return kZ("10.2.0","fixMarkup will be removed entirely in v11.0"),kZ("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),K(e)}function a0(e){return kZ("10.7.0","highlightBlock will be removed entirely in v12.0"),kZ("10.7.0","Please use highlightElement now."),$(e)}Object.assign(I,{highlight:_,highlightAuto:J,highlightAll:c,fixMarkup:B0,highlightElement:$,highlightBlock:a0,configure:h,initHighlighting:O,initHighlightingOnLoad:T,registerLanguage:o1,unregisterLanguage:a1,listLanguages:f1,getLanguage:A1,registerAliases:m1,requireLanguage:r,autoDetection:T1,inherit:eW2,addPlugin:F0,vuePlugin:De5(I).VuePlugin}),I.debugMode=function(){C=!1},I.safeMode=function(){C=!0},I.versionString=Ye5;for(let e in Ra)if(typeof Ra[e]==="object")Iw2(Ra[e]);return Object.assign(I,Ra),I.addPlugin(E),I.addPlugin(He5),I.addPlugin(P),I},Je5=ge5({});Vw2.exports=Je5});var _w2=Y((vD3,Yw2)=>{function Ke5(I){var d="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",G="далее ",Z="возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли "+"конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",C=G+Z,W="загрузитьизфайла ",w="вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер "+"наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед "+"после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ",B=W+w,A="разделительстраниц разделительстрок символтабуляции ",V="ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов "+"датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя "+"кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца "+"коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид "+"назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца "+"начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов "+"основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута "+"получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта "+"префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына "+"рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента "+"счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ",X="acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока "+"xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение "+"ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации "+"выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода "+"деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы "+"загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации "+"заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию "+"значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла "+"изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке "+"каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку "+"кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты "+"конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы "+"копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти "+"найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы "+"началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя "+"начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты "+"начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов "+"начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя "+"начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога "+"начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией "+"начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы "+"номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения "+"обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении "+"отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения "+"открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально "+"отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа "+"перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту "+"подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения "+"подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки "+"показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение "+"показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя "+"получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса "+"получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора "+"получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса "+"получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации "+"получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла "+"получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации "+"получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления "+"получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу "+"получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы "+"получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет "+"получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима "+"получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения "+"получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути "+"получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы "+"получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю "+"получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных "+"получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию "+"получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище "+"поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода "+"представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение "+"прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока "+"рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных "+"раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени "+"смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить "+"состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс "+"строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений "+"стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах "+"текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации "+"текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы "+"удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим "+"установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту "+"установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных "+"установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации "+"установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения "+"установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования "+"установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима "+"установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим "+"установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией "+"установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы "+"установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса "+"формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ",_="wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы "+"внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль "+"документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты "+"историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений "+"отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик "+"планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок "+"рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений "+"регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа "+"средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек "+"хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков "+"хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",F=A+V+X+_,g="webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ",J="автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий "+"анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы "+"вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы "+"виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя "+"видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение "+"горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы "+"группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания "+"интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки "+"используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы "+"источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева "+"начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы "+"ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме "+"отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы "+"отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы "+"отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы "+"отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска "+"отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования "+"отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта "+"отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы "+"поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы "+"поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы "+"положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы "+"положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы "+"положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском "+"положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы "+"размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта "+"режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты "+"режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения "+"режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра "+"режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения "+"режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы "+"режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки "+"режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание "+"сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы "+"способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление "+"статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы "+"типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы "+"типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления "+"типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы "+"типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы "+"типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений "+"типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы "+"типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы "+"типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы "+"факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени "+"форматкартинки ширинаподчиненныхэлементовформы ",K="виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса "+"использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения "+"использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ",Q="авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ",E="использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы "+"положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента "+"способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента "+"типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента "+"типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы "+"типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента "+"типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ",S="отображениевремениэлементовпланировщика ",P="типфайлаформатированногодокумента ",$="обходрезультатазапроса типзаписизапроса ",h="видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ",O="доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ",T="типизмеренияпостроителязапроса ",V1="видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных "+"типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений "+"типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций "+"типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных "+"типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных "+"типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ",c="wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto "+"действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs "+"исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs "+"методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs "+"ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson "+"типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs "+"форматдатыjson экранированиесимволовjson ",c1="видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных "+"расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных "+"расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных "+"расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных "+"типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных "+"типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных "+"типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных "+"расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных "+"режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных "+"режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных "+"вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных "+"использованиеусловногооформлениякомпоновкиданных ",o1="важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения "+"способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты "+"статусразборапочтовогосообщения ",a1="режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ",f1="расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии "+"типхранилищасертификатовкриптографии ",r="кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip "+"режимсохраненияпутейzip уровеньсжатияzip ",A1="звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных "+"сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ",m1="направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса "+"типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ",T1="httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления "+"видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование "+"использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения "+"использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита "+"назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных "+"оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи "+"основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении "+"периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений "+"повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение "+"разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита "+"режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности "+"режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов "+"режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса "+"режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов "+"сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования "+"типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса "+"типномерадокумента типномеразадачи типформы удалениедвижений ",e1="важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения "+"вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки "+"видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак "+"использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога "+"кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных "+"отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения "+"режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных "+"способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter "+"типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты",F0=g+J+K+Q+E+S+P+$+h+O+T+V1+c+c1+o1+a1+f1+r+A1+m1+T1+e1,P0="comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs "+"блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема "+"географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма "+"диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания "+"диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление "+"записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom "+"запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта "+"интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs "+"использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных "+"итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла "+"компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных "+"конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных "+"макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson "+"обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs "+"объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации "+"описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных "+"описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs "+"определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom "+"определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных "+"параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных "+"полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных "+"построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml "+"процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент "+"процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml "+"результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto "+"сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows "+"сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш "+"сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент "+"текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток "+"фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs "+"фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs "+"фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs "+"фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент "+"фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла "+"чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ",B0="comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура "+"фиксированноесоответствие фиксированныймассив ",a0=P0+B0,e="null истина ложь неопределено",G0=I.inherit(I.NUMBER_MODE),H1={className:"string",begin:'"|\\|',end:'"|$',contains:[{begin:'""'}]},j1={begin:"'",end:"'",excludeBegin:!0,excludeEnd:!0,contains:[{className:"number",begin:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},i1=I.inherit(I.C_LINE_COMMENT_MODE),E0={className:"meta",begin:"#|&",end:"$",keywords:{$pattern:d,"meta-keyword":C+B},contains:[i1]},k={className:"symbol",begin:"~",end:";|:",excludeEnd:!0},a={className:"function",variants:[{begin:"процедура|функция",end:"\\)",keywords:"процедура функция"},{begin:"конецпроцедуры|конецфункции",keywords:"конецпроцедуры конецфункции"}],contains:[{begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"params",begin:d,end:",",excludeEnd:!0,endsWithParent:!0,keywords:{$pattern:d,keyword:"знач",literal:e},contains:[G0,H1,j1]},i1]},I.inherit(I.TITLE_MODE,{begin:d})]};return{name:"1C:Enterprise",case_insensitive:!0,keywords:{$pattern:d,keyword:C,built_in:F,class:F0,type:a0,literal:e},contains:[E0,a,i1,k,G0,H1,j1]}}Yw2.exports=Ke5});var Hw2=Y((ED3,Dw2)=>{function Ne5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function ze5(...I){return I.map((G)=>Ne5(G)).join("")}function Qe5(I){let d={ruleDeclaration:/^[a-zA-Z][a-zA-Z0-9-]*/,unexpectedChars:/[!@#$^&',?+~`|:]/},G=["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"],Z=I.COMMENT(/;/,/$/),C={className:"symbol",begin:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},W={className:"symbol",begin:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},w={className:"symbol",begin:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},B={className:"symbol",begin:/%[si]/},A={className:"attribute",begin:ze5(d.ruleDeclaration,/(?=\s*=)/)};return{name:"Augmented Backus-Naur Form",illegal:d.unexpectedChars,keywords:G,contains:[A,Z,C,W,w,B,I.QUOTE_STRING_MODE,I.NUMBER_MODE]}}Dw2.exports=Qe5});var Jw2=Y((MD3,gw2)=>{function Fw2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function fe5(...I){return I.map((G)=>Fw2(G)).join("")}function qe5(...I){return"("+I.map((G)=>Fw2(G)).join("|")+")"}function Re5(I){let d=["GET","POST","HEAD","PUT","DELETE","CONNECT","OPTIONS","PATCH","TRACE"];return{name:"Apache Access Log",contains:[{className:"number",begin:/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b/,relevance:5},{className:"number",begin:/\b\d+\b/,relevance:0},{className:"string",begin:fe5(/"/,qe5(...d)),end:/"/,keywords:d,illegal:/\n/,relevance:5,contains:[{begin:/HTTP\/[12]\.\d'/,relevance:5}]},{className:"string",begin:/\[\d[^\]\n]{8,}\]/,illegal:/\n/,relevance:1},{className:"string",begin:/\[/,end:/\]/,illegal:/\n/,relevance:0},{className:"string",begin:/"Mozilla\/\d\.\d \(/,end:/"/,illegal:/\n/,relevance:3},{className:"string",begin:/"/,end:/"/,illegal:/\n/,relevance:0}]}}gw2.exports=Re5});var Nw2=Y((SD3,Kw2)=>{function Ue5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function ve5(...I){return I.map((G)=>Ue5(G)).join("")}function Ee5(I){let d=/[a-zA-Z_$][a-zA-Z0-9_$]*/,G=/([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/,Z={className:"rest_arg",begin:/[.]{3}/,end:d,relevance:10};return{name:"ActionScript",aliases:["as"],keywords:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.C_NUMBER_MODE,{className:"class",beginKeywords:"package",end:/\{/,contains:[I.TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},I.TITLE_MODE]},{className:"meta",beginKeywords:"import include",end:/;/,keywords:{"meta-keyword":"import include"}},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,illegal:/\S/,contains:[I.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,Z]},{begin:ve5(/:\s*/,G)}]},I.METHOD_GUARD],illegal:/#/}}Kw2.exports=Ee5});var Qw2=Y((LD3,zw2)=>{function Me5(I){let G="[eE][-+]?\\d(_|\\d)*",Z="\\d(_|\\d)*(\\.\\d(_|\\d)*)?("+G+")?",C="\\w+",w="\\b("+("\\d(_|\\d)*#\\w+(\\.\\w+)?#("+G+")?")+"|"+Z+")",B="[A-Za-z](_?[A-Za-z0-9.])*",A=`[]\\{\\}%#'"`,V=I.COMMENT("--","$"),X={begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:`[]\\{\\}%#'"`,contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:"[A-Za-z](_?[A-Za-z0-9.])*",endsParent:!0,relevance:0}]};return{name:"Ada",case_insensitive:!0,keywords:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},contains:[V,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:w,relevance:0},{className:"symbol",begin:"'[A-Za-z](_?[A-Za-z0-9.])*"},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:`[]\\{\\}%#'"`},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[V,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:`[]\\{\\}%#'"`},X,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:`[]\\{\\}%#'"`}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:`[]\\{\\}%#'"`},X]}}zw2.exports=Me5});var qw2=Y((yD3,fw2)=>{function Se5(I){var d={className:"built_in",begin:"\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)"},G={className:"symbol",begin:"[a-zA-Z0-9_]+@"},Z={className:"keyword",begin:"<",end:">",contains:[d,G]};return d.contains=[Z],G.contains=[Z],{name:"AngelScript",aliases:["asc"],keywords:"for in|0 break continue while do|0 return if else case switch namespace is cast or and xor not get|0 in inout|10 out override set|0 private public const default|0 final shared external mixin|10 enum typedef funcdef this super import from interface abstract|0 try catch protected explicit property",illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])",contains:[{className:"string",begin:"'",end:"'",illegal:"\\n",contains:[I.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',end:'"""'},{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE],relevance:0},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"string",begin:"^\\s*\\[",end:"\\]"},{beginKeywords:"interface namespace",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{beginKeywords:"class",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]}]}]},d,G,{className:"literal",begin:"\\b(null|true|false)"},{className:"number",relevance:0,begin:"(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"}]}}fw2.exports=Se5});var Uw2=Y((PD3,Rw2)=>{function Le5(I){let d={className:"number",begin:/[$%]\d+/},G={className:"number",begin:/\d+/},Z={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/},C={className:"number",begin:/:\d{1,5}/};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[I.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,contains:[Z,C,I.inherit(I.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",begin:/[\$%]\{/,end:/\}/,contains:["self",d]},Z,G,I.QUOTE_STRING_MODE]}}],illegal:/\S/}}Rw2.exports=Le5});var Lw2=Y(($D3,Sw2)=>{function Mw2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function vw2(...I){return I.map((G)=>Mw2(G)).join("")}function Ew2(...I){return"("+I.map((G)=>Mw2(G)).join("|")+")"}function ye5(I){let d=I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),G={className:"params",begin:/\(/,end:/\)/,contains:["self",I.C_NUMBER_MODE,d]},Z=I.COMMENT(/--/,/$/),C=I.COMMENT(/\(\*/,/\*\)/,{contains:["self",Z]}),W=[Z,C,I.HASH_COMMENT_MODE],w=[/apart from/,/aside from/,/instead of/,/out of/,/greater than/,/isn't|(doesn't|does not) (equal|come before|come after|contain)/,/(greater|less) than( or equal)?/,/(starts?|ends|begins?) with/,/contained by/,/comes (before|after)/,/a (ref|reference)/,/POSIX (file|path)/,/(date|time) string/,/quoted form/],B=[/clipboard info/,/the clipboard/,/info for/,/list (disks|folder)/,/mount volume/,/path to/,/(close|open for) access/,/(get|set) eof/,/current date/,/do shell script/,/get volume settings/,/random number/,/set volume/,/system attribute/,/system info/,/time to GMT/,/(load|run|store) script/,/scripting components/,/ASCII (character|number)/,/localized string/,/choose (application|color|file|file name|folder|from list|remote application|URL)/,/display (alert|dialog)/];return{name:"AppleScript",aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},contains:[d,I.C_NUMBER_MODE,{className:"built_in",begin:vw2(/\b/,Ew2(...B),/\b/)},{className:"built_in",begin:/^\s*return\b/},{className:"literal",begin:/\b(text item delimiters|current application|missing value)\b/},{className:"keyword",begin:vw2(/\b/,Ew2(...w),/\b/)},{beginKeywords:"on",illegal:/[${=;\n]/,contains:[I.UNDERSCORE_TITLE_MODE,G]},...W],illegal:/\/\/|->|=>|\[\[/}}Sw2.exports=ye5});var Pw2=Y((uD3,yw2)=>{function Pe5(I){let G={keyword:"if for while var new function do return void else break",literal:"BackSlash DoubleQuote false ForwardSlash Infinity NaN NewLine null PI SingleQuote Tab TextFormatting true undefined",built_in:"Abs Acos Angle Attachments Area AreaGeodetic Asin Atan Atan2 Average Bearing Boolean Buffer BufferGeodetic Ceil Centroid Clip Console Constrain Contains Cos Count Crosses Cut Date DateAdd DateDiff Day Decode DefaultValue Dictionary Difference Disjoint Distance DistanceGeodetic Distinct DomainCode DomainName Equals Exp Extent Feature FeatureSet FeatureSetByAssociation FeatureSetById FeatureSetByPortalItem FeatureSetByRelationshipName FeatureSetByTitle FeatureSetByUrl Filter First Floor Geometry GroupBy Guid HasKey Hour IIf IndexOf Intersection Intersects IsEmpty IsNan IsSelfIntersecting Length LengthGeodetic Log Max Mean Millisecond Min Minute Month MultiPartToSinglePart Multipoint NextSequenceValue Now Number OrderBy Overlaps Point Polygon Polyline Portal Pow Random Relate Reverse RingIsClockWise Round Second SetGeometry Sin Sort Sqrt Stdev Sum SymmetricDifference Tan Text Timestamp Today ToLocal Top Touches ToUTC TrackCurrentTime TrackGeometryWindow TrackIndex TrackStartTime TrackWindow TypeOf Union UrlEncode Variance Weekday When Within Year "},Z={className:"symbol",begin:"\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+"},C={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:I.C_NUMBER_RE}],relevance:0},W={className:"subst",begin:"\\$\\{",end:"\\}",keywords:G,contains:[]},w={className:"string",begin:"`",end:"`",contains:[I.BACKSLASH_ESCAPE,W]};W.contains=[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,w,C,I.REGEXP_MODE];let B=W.contains.concat([I.C_BLOCK_COMMENT_MODE,I.C_LINE_COMMENT_MODE]);return{name:"ArcGIS Arcade",keywords:G,contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,w,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,Z,C,{begin:/[{,]\s*/,relevance:0,contains:[{begin:"[A-Za-z_][0-9A-Za-z_]*\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:"[A-Za-z_][0-9A-Za-z_]*",relevance:0}]}]},{begin:"("+I.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|[A-Za-z_][0-9A-Za-z_]*)\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:"[A-Za-z_][0-9A-Za-z_]*"},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:G,contains:B}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[I.inherit(I.TITLE_MODE,{begin:"[A-Za-z_][0-9A-Za-z_]*"}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:B}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}yw2.exports=Pe5});var uw2=Y((TD3,$w2)=>{function $e5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function ue5(I){return bF1("(?=",I,")")}function va(I){return bF1("(",I,")?")}function bF1(...I){return I.map((G)=>$e5(G)).join("")}function Te5(I){let d=I.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),G="decltype\\(auto\\)",Z="[a-zA-Z_]\\w*::",C="<[^<>]+>",W="(decltype\\(auto\\)|"+va("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+va("<[^<>]+>")+")",w={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},B="\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)",A={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},I.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},V={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},X={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},I.inherit(A,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},d,I.C_BLOCK_COMMENT_MODE]},_={className:"title",begin:va("[a-zA-Z_]\\w*::")+I.IDENT_RE,relevance:0},F=va("[a-zA-Z_]\\w*::")+I.IDENT_RE+"\\s*\\(",J={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"_Bool _Complex _Imaginary",_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],literal:"true false nullptr NULL"},K={className:"function.dispatch",relevance:0,keywords:J,begin:bF1(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,I.IDENT_RE,ue5(/\s*\(/))},Q=[K,X,w,d,I.C_BLOCK_COMMENT_MODE,V,A],E={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:J,contains:Q.concat([{begin:/\(/,end:/\)/,keywords:J,contains:Q.concat(["self"]),relevance:0}]),relevance:0},S={className:"function",begin:"("+W+"[\\*&\\s]+)+"+F,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:J,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:J,relevance:0},{begin:F,returnBegin:!0,contains:[_],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[A,V]},{className:"params",begin:/\(/,end:/\)/,keywords:J,relevance:0,contains:[d,I.C_BLOCK_COMMENT_MODE,A,V,w,{begin:/\(/,end:/\)/,keywords:J,relevance:0,contains:["self",d,I.C_BLOCK_COMMENT_MODE,A,V,w]}]},w,d,I.C_BLOCK_COMMENT_MODE,X]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:J,illegal:"",keywords:J,contains:["self",w]},{begin:I.IDENT_RE+"::",keywords:J},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},I.TITLE_MODE]}]),exports:{preprocessor:X,strings:A,keywords:J}}}function Oe5(I){let d={keyword:"boolean byte word String",built_in:"KeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD ",_:"setup loop runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",literal:"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW"},G=Te5(I),Z=G.keywords;return Z.keyword+=" "+d.keyword,Z.literal+=" "+d.literal,Z.built_in+=" "+d.built_in,Z._+=" "+d._,G.name="Arduino",G.aliases=["ino"],G.supersetOf="cpp",G}$w2.exports=Oe5});var Ow2=Y((OD3,Tw2)=>{function me5(I){let d={variants:[I.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),I.COMMENT("[;@]","$",{relevance:0}),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+I.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},d,I.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}Tw2.exports=me5});var hw2=Y((mD3,bw2)=>{function lw2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function mw2(I){return kJ("(?=",I,")")}function le5(I){return kJ("(",I,")?")}function kJ(...I){return I.map((G)=>lw2(G)).join("")}function be5(...I){return"("+I.map((G)=>lw2(G)).join("|")+")"}function he5(I){let d=kJ(/[A-Z_]/,le5(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),G=/[A-Za-z0-9._:-]+/,Z={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},C={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},W=I.inherit(C,{begin:/\(/,end:/\)/}),w=I.inherit(I.APOS_STRING_MODE,{className:"meta-string"}),B=I.inherit(I.QUOTE_STRING_MODE,{className:"meta-string"}),A={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[C,B,w,W,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[C,W,B,w]}]}]},I.COMMENT(//,{relevance:10}),{begin://,relevance:10},Z,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[A],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[A],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:kJ(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:d,relevance:0,starts:A}]},{className:"tag",begin:kJ(/<\//,mw2(kJ(d,/>/))),contains:[{className:"name",begin:d,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}bw2.exports=he5});var xw2=Y((lD3,kw2)=>{function je5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function jw2(...I){return I.map((G)=>je5(G)).join("")}function ke5(I){let d={begin:"^'{3,}[ \\t]*$",relevance:10},G=[{begin:/\\[*_`]/},{begin:/\\\\\*{2}[^\n]*?\*{2}/},{begin:/\\\\_{2}[^\n]*_{2}/},{begin:/\\\\`{2}[^\n]*`{2}/},{begin:/[:;}][*_`](?![*_`])/}],Z=[{className:"strong",begin:/\*{2}([^\n]+?)\*{2}/},{className:"strong",begin:jw2(/\*\*/,/((\*(?!\*)|\\[^\n]|[^*\n\\])+\n)+/,/(\*(?!\*)|\\[^\n]|[^*\n\\])*/,/\*\*/),relevance:0},{className:"strong",begin:/\B\*(\S|\S[^\n]*?\S)\*(?!\w)/},{className:"strong",begin:/\*[^\s]([^\n]+\n)+([^\n]+)\*/}],C=[{className:"emphasis",begin:/_{2}([^\n]+?)_{2}/},{className:"emphasis",begin:jw2(/__/,/((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,/(_(?!_)|\\[^\n]|[^_\n\\])*/,/__/),relevance:0},{className:"emphasis",begin:/\b_(\S|\S[^\n]*?\S)_(?!\w)/},{className:"emphasis",begin:/_[^\s]([^\n]+\n)+([^\n]+)_/},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0}],W={className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},w={className:"bullet",begin:"^(\\*+|-+|\\.+|[^\\n]+?::)\\s+"};return{name:"AsciiDoc",aliases:["adoc"],contains:[I.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),I.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,6})[ \t].+?([ \t]\\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},w,W,...G,...Z,...C,{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:/`{2}/,end:/(\n{2}|`{2})/},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},d,{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}kw2.exports=ke5});var pw2=Y((bD3,cw2)=>{function xe5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function hF1(...I){return I.map((G)=>xe5(G)).join("")}function ce5(I){let d="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",G="get set args call";return{name:"AspectJ",keywords:d,illegal:/<\/|#/,contains:[I.COMMENT(/\/\*\*/,/\*\//,{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:/@[A-Za-z]+/}]}),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{className:"class",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,illegal:/[:;"\[\]]/,contains:[{beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},I.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:d+" get set args call",excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]},{beginKeywords:"pointcut after before around throwing returning",end:/[)]/,excludeEnd:!1,illegal:/["\[\]]/,contains:[{begin:hF1(I.UNDERSCORE_IDENT_RE,/\s*\(/),returnBegin:!0,contains:[I.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,relevance:0,excludeEnd:!1,keywords:d,illegal:/["\[\]]/,contains:[{begin:hF1(I.UNDERSCORE_IDENT_RE,/\s*\(/),keywords:d+" get set args call",relevance:0},I.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{className:"function",begin:/\w+ +\w+(\.\w+)?\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,end:/[{;=]/,keywords:d,excludeEnd:!0,contains:[{begin:hF1(I.UNDERSCORE_IDENT_RE,/\s*\(/),returnBegin:!0,relevance:0,contains:[I.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,relevance:0,keywords:d,contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},I.C_NUMBER_MODE,{className:"meta",begin:/@[A-Za-z]+/}]}}cw2.exports=ce5});var nw2=Y((hD3,iw2)=>{function pe5(I){let d={begin:"`[\\s\\S]"};return{name:"AutoHotkey",case_insensitive:!0,aliases:["ahk"],keywords:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},contains:[d,I.inherit(I.QUOTE_STRING_MODE,{contains:[d]}),I.COMMENT(";","$",{relevance:0}),I.C_BLOCK_COMMENT_MODE,{className:"number",begin:I.NUMBER_RE,relevance:0},{className:"variable",begin:"%[a-zA-Z0-9#_$@]+%"},{className:"built_in",begin:"^\\s*\\w+\\s*(,|%)"},{className:"title",variants:[{begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{className:"meta",begin:"^\\s*#\\w+",end:"$",relevance:0},{className:"built_in",begin:"A_[a-zA-Z0-9]+"},{begin:",\\s*,"}]}}iw2.exports=pe5});var aw2=Y((jD3,rw2)=>{function ie5(I){let d="ByRef Case Const ContinueCase ContinueLoop Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",G=["EndRegion","forcedef","forceref","ignorefunc","include","include-once","NoTrayIcon","OnAutoItStartRegister","pragma","Region","RequireAdmin","Tidy_Off","Tidy_On","Tidy_Parameters"],Z="True False And Null Not Or Default",C="Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive",W={variants:[I.COMMENT(";","$",{relevance:0}),I.COMMENT("#cs","#ce"),I.COMMENT("#comments-start","#comments-end")]},w={begin:"\\$[A-z0-9_]+"},B={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},A={variants:[I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE]},V={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":G},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",keywords:{"meta-keyword":"include"},end:"$",contains:[B,{className:"meta-string",variants:[{begin:"<",end:">"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},B,W]},X={className:"symbol",begin:"@[A-z0-9_]+"},_={className:"function",beginKeywords:"Func",end:"$",illegal:"\\$|\\[|%",contains:[I.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[w,B,A]}]};return{name:"AutoIt",case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:d,built_in:"Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive",literal:"True False And Null Not Or Default"},contains:[W,w,B,A,V,X,_]}}rw2.exports=ie5});var ow2=Y((kD3,sw2)=>{function ne5(I){return{name:"AVR Assembly",case_insensitive:!0,keywords:{$pattern:"\\.?"+I.IDENT_RE,keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},contains:[I.C_BLOCK_COMMENT_MODE,I.COMMENT(";","$",{relevance:0}),I.C_NUMBER_MODE,I.BINARY_NUMBER_MODE,{className:"number",begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},I.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"symbol",begin:"^[A-Za-z0-9_.$]+:"},{className:"meta",begin:"#",end:"$"},{className:"subst",begin:"@[0-9]+"}]}}sw2.exports=ne5});var tw2=Y((xD3,ew2)=>{function re5(I){let d={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},G="BEGIN END if else while do for in break continue delete next nextfile function func exit|10",Z={className:"string",contains:[I.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]};return{name:"Awk",keywords:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},contains:[d,Z,I.REGEXP_MODE,I.HASH_COMMENT_MODE,I.NUMBER_MODE]}}ew2.exports=re5});var dB2=Y((cD3,IB2)=>{function ae5(I){return{name:"X++",aliases:["x++"],keywords:{keyword:["abstract","as","asc","avg","break","breakpoint","by","byref","case","catch","changecompany","class","client","client","common","const","continue","count","crosscompany","delegate","delete_from","desc","display","div","do","edit","else","eventhandler","exists","extends","final","finally","firstfast","firstonly","firstonly1","firstonly10","firstonly100","firstonly1000","flush","for","forceliterals","forcenestedloop","forceplaceholders","forceselectorder","forupdate","from","generateonly","group","hint","if","implements","in","index","insert_recordset","interface","internal","is","join","like","maxof","minof","mod","namespace","new","next","nofetch","notexists","optimisticlock","order","outer","pessimisticlock","print","private","protected","public","readonly","repeatableread","retry","return","reverse","select","server","setting","static","sum","super","switch","this","throw","try","ttsabort","ttsbegin","ttscommit","unchecked","update_recordset","using","validtimestate","void","where","while"],built_in:["anytype","boolean","byte","char","container","date","double","enum","guid","int","int64","long","real","short","str","utcdatetime","var"],literal:["default","false","null","true"]},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"},{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,illegal:":",contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]}]}}IB2.exports=ae5});var ZB2=Y((pD3,GB2)=>{function se5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function oe5(...I){return I.map((G)=>se5(G)).join("")}function ee5(I){let d={},G={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[d]}]};Object.assign(d,{className:"variable",variants:[{begin:oe5(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},G]});let Z={className:"subst",begin:/\$\(/,end:/\)/,contains:[I.BACKSLASH_ESCAPE]},C={begin:/<<-?\s*(?=\w+)/,starts:{contains:[I.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},W={className:"string",begin:/"/,end:/"/,contains:[I.BACKSLASH_ESCAPE,d,Z]};Z.contains.push(W);let w={className:"",begin:/\\"/},B={className:"string",begin:/'/,end:/'/},A={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},I.NUMBER_MODE,d]},V=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],X=I.SHEBANG({binary:`(${V.join("|")})`,relevance:10}),_={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[I.inherit(I.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[X,I.SHEBANG(),_,A,I.HASH_COMMENT_MODE,C,W,w,B,d]}}GB2.exports=ee5});var WB2=Y((iD3,CB2)=>{function te5(I){return{name:"BASIC",case_insensitive:!0,illegal:"^.",keywords:{$pattern:"[a-zA-Z][a-zA-Z0-9_$%!#]*",keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR"},contains:[I.QUOTE_STRING_MODE,I.COMMENT("REM","$",{relevance:10}),I.COMMENT("'","$",{relevance:0}),{className:"symbol",begin:"^[0-9]+ ",relevance:10},{className:"number",begin:"\\b\\d+(\\.\\d+)?([edED]\\d+)?[#!]?",relevance:0},{className:"number",begin:"(&[hH][0-9a-fA-F]{1,4})"},{className:"number",begin:"(&[oO][0-7]{1,6})"}]}}CB2.exports=te5});var BB2=Y((nD3,wB2)=>{function It5(I){return{name:"Backus–Naur Form",contains:[{className:"attribute",begin://},{begin:/::=/,end:/$/,contains:[{begin://},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]}]}}wB2.exports=It5});var VB2=Y((rD3,AB2)=>{function dt5(I){let d={className:"literal",begin:/[+-]/,relevance:0};return{name:"Brainfuck",aliases:["bf"],contains:[I.COMMENT(`[^\\[\\]\\.,\\+\\-<> \r +]`,`[\\[\\]\\.,\\+\\-<> \r +]`,{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/(?:\+\+|--)/,contains:[d]},d]}}AB2.exports=dt5});var YB2=Y((aD3,XB2)=>{function Gt5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function Zt5(I){return jF1("(?=",I,")")}function Ea(I){return jF1("(",I,")?")}function jF1(...I){return I.map((G)=>Gt5(G)).join("")}function Ct5(I){let d=I.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),G="decltype\\(auto\\)",Z="[a-zA-Z_]\\w*::",C="<[^<>]+>",W="(decltype\\(auto\\)|"+Ea("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+Ea("<[^<>]+>")+")",w={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},B="\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)",A={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},I.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},V={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},X={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},I.inherit(A,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},d,I.C_BLOCK_COMMENT_MODE]},_={className:"title",begin:Ea("[a-zA-Z_]\\w*::")+I.IDENT_RE,relevance:0},F=Ea("[a-zA-Z_]\\w*::")+I.IDENT_RE+"\\s*\\(",J={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"_Bool _Complex _Imaginary",_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],literal:"true false nullptr NULL"},K={className:"function.dispatch",relevance:0,keywords:J,begin:jF1(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,I.IDENT_RE,Zt5(/\s*\(/))},Q=[K,X,w,d,I.C_BLOCK_COMMENT_MODE,V,A],E={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:J,contains:Q.concat([{begin:/\(/,end:/\)/,keywords:J,contains:Q.concat(["self"]),relevance:0}]),relevance:0},S={className:"function",begin:"("+W+"[\\*&\\s]+)+"+F,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:J,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:J,relevance:0},{begin:F,returnBegin:!0,contains:[_],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[A,V]},{className:"params",begin:/\(/,end:/\)/,keywords:J,relevance:0,contains:[d,I.C_BLOCK_COMMENT_MODE,A,V,w,{begin:/\(/,end:/\)/,keywords:J,relevance:0,contains:["self",d,I.C_BLOCK_COMMENT_MODE,A,V,w]}]},w,d,I.C_BLOCK_COMMENT_MODE,X]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:J,illegal:"",keywords:J,contains:["self",w]},{begin:I.IDENT_RE+"::",keywords:J},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},I.TITLE_MODE]}]),exports:{preprocessor:X,strings:A,keywords:J}}}function Wt5(I){let d=Ct5(I),G=["c","h"],Z=["cc","c++","h++","hpp","hh","hxx","cxx"];if(d.disableAutodetect=!0,d.aliases=[],!I.getLanguage("c"))d.aliases.push(...G);if(!I.getLanguage("cpp"))d.aliases.push(...Z);return d}XB2.exports=Wt5});var DB2=Y((sD3,_B2)=>{function wt5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function Ma(I){return Bt5("(",I,")?")}function Bt5(...I){return I.map((G)=>wt5(G)).join("")}function At5(I){let d=I.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),G="decltype\\(auto\\)",Z="[a-zA-Z_]\\w*::",C="<[^<>]+>",W="(decltype\\(auto\\)|"+Ma("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+Ma("<[^<>]+>")+")",w={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},B="\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)",A={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},I.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},V={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},X={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},I.inherit(A,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},d,I.C_BLOCK_COMMENT_MODE]},_={className:"title",begin:Ma("[a-zA-Z_]\\w*::")+I.IDENT_RE,relevance:0},F=Ma("[a-zA-Z_]\\w*::")+I.IDENT_RE+"\\s*\\(",g={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},J=[X,w,d,I.C_BLOCK_COMMENT_MODE,V,A],K={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:g,contains:J.concat([{begin:/\(/,end:/\)/,keywords:g,contains:J.concat(["self"]),relevance:0}]),relevance:0},Q={className:"function",begin:"("+W+"[\\*&\\s]+)+"+F,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:g,relevance:0},{begin:F,returnBegin:!0,contains:[_],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[d,I.C_BLOCK_COMMENT_MODE,A,V,w,{begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:["self",d,I.C_BLOCK_COMMENT_MODE,A,V,w]}]},w,d,I.C_BLOCK_COMMENT_MODE,X]};return{name:"C",aliases:["h"],keywords:g,disableAutodetect:!0,illegal:"",keywords:g,contains:["self",w]},{begin:I.IDENT_RE+"::",keywords:g},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},I.TITLE_MODE]}]),exports:{preprocessor:X,strings:A,keywords:g}}}_B2.exports=At5});var FB2=Y((oD3,HB2)=>{function Vt5(I){let d="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",G="false true",Z=[I.C_LINE_COMMENT_MODE,I.COMMENT(/\{/,/\}/,{relevance:0}),I.COMMENT(/\(\*/,/\*\)/,{relevance:10})],C={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},W={className:"string",begin:/(#\d+)+/},w={className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},B={className:"string",begin:'"',end:'"'},A={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[I.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:d,contains:[C,W]}].concat(Z)},V={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[I.TITLE_MODE,A]};return{name:"C/AL",case_insensitive:!0,keywords:{keyword:d,literal:"false true"},illegal:/\/\*/,contains:[C,W,w,B,I.NUMBER_MODE,V,A]}}HB2.exports=Vt5});var JB2=Y((eD3,gB2)=>{function Xt5(I){return{name:"Cap’n Proto",aliases:["capnp"],keywords:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},contains:[I.QUOTE_STRING_MODE,I.NUMBER_MODE,I.HASH_COMMENT_MODE,{className:"meta",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"symbol",begin:/@\d+\b/},{className:"class",beginKeywords:"struct enum",end:/\{/,illegal:/\n/,contains:[I.inherit(I.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"class",beginKeywords:"interface",end:/\{/,illegal:/\n/,contains:[I.inherit(I.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]}]}}gB2.exports=Xt5});var NB2=Y((tD3,KB2)=>{function Yt5(I){let d="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",G="shared abstract formal default actual variable late native deprecated final sealed annotation suppressWarnings small",Z="doc by license see throws tagged",C={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:d,relevance:10},W=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[C]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return C.contains=W,{name:"Ceylon",keywords:{keyword:d+" "+G,meta:"doc by license see throws tagged"},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[I.C_LINE_COMMENT_MODE,I.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"meta",begin:'@[a-z]\\w*(?::"[^"]*")?'}].concat(W)}}KB2.exports=Yt5});var QB2=Y((IH3,zB2)=>{function _t5(I){return{name:"Clean",aliases:["icl","dcl"],keywords:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",built_in:"Int Real Char Bool",literal:"True False"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,{begin:"->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>"}]}}zB2.exports=_t5});var qB2=Y((dH3,fB2)=>{function Dt5(I){let G="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",Z="def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord",C={$pattern:G,"builtin-name":"def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord cond apply if-not if-let if not not= =|0 <|0 >|0 <=|0 >=|0 ==|0 +|0 /|0 *|0 -|0 rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy first rest cons cast coll last butlast sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},W="[-+]?\\d+(\\.\\d+)?",w={begin:G,relevance:0},B={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},A=I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),V=I.COMMENT(";","$",{relevance:0}),X={className:"literal",begin:/\b(true|false|nil)\b/},_={begin:"[\\[\\{]",end:"[\\]\\}]"},F={className:"comment",begin:"\\^"+G},g=I.COMMENT("\\^\\{","\\}"),J={className:"symbol",begin:"[:]{1,2}"+G},K={begin:"\\(",end:"\\)"},Q={endsWithParent:!0,relevance:0},E={keywords:C,className:"name",begin:G,relevance:0,starts:Q},S=[K,A,F,g,V,J,_,B,X,w],P={beginKeywords:"def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord",lexemes:G,end:'(\\[|#|\\d|"|:|\\{|\\)|\\(|$)',contains:[{className:"title",begin:G,relevance:0,excludeEnd:!0,endsParent:!0}].concat(S)};return K.contains=[I.COMMENT("comment",""),P,E,Q],Q.contains=S,_.contains=S,g.contains=[_],{name:"Clojure",aliases:["clj"],illegal:/\S/,contains:[K,A,F,g,V,J,_,B,X]}}fB2.exports=Dt5});var UB2=Y((GH3,RB2)=>{function Ht5(I){return{name:"Clojure REPL",contains:[{className:"meta",begin:/^([\w.-]+|\s*#_)?=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}RB2.exports=Ht5});var EB2=Y((ZH3,vB2)=>{function Ft5(I){return{name:"CMake",aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:/\$\{/,end:/\}/},I.HASH_COMMENT_MODE,I.QUOTE_STRING_MODE,I.NUMBER_MODE]}}vB2.exports=Ft5});var SB2=Y((CH3,MB2)=>{var gt5=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],Jt5=["true","false","null","undefined","NaN","Infinity"],Kt5=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],Nt5=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],zt5=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],Qt5=["arguments","this","super","console","window","document","localStorage","module","global"],ft5=[].concat(zt5,Qt5,Kt5,Nt5);function qt5(I){let d=["npm","print"],G=["yes","no","on","off"],Z=["then","unless","until","loop","by","when","and","or","is","isnt","not"],C=["var","const","let","function","static"],W=(g)=>(J)=>!g.includes(J),w={keyword:gt5.concat(Z).filter(W(C)),literal:Jt5.concat(G),built_in:ft5.concat(d)},B="[A-Za-z$_][0-9A-Za-z$_]*",A={className:"subst",begin:/#\{/,end:/\}/,keywords:w},V=[I.BINARY_NUMBER_MODE,I.inherit(I.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[I.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[I.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[I.BACKSLASH_ESCAPE,A]},{begin:/"/,end:/"/,contains:[I.BACKSLASH_ESCAPE,A]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[A,I.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];A.contains=V;let X=I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),_="(\\(.*\\)\\s*)?\\B[-=]>",F={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:w,contains:["self"].concat(V)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:w,illegal:/\/\*/,contains:V.concat([I.COMMENT("###","###"),I.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*[A-Za-z$_][0-9A-Za-z$_]*\\s*=\\s*"+_,end:"[-=]>",returnBegin:!0,contains:[X,F]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:_,end:"[-=]>",returnBegin:!0,contains:[F]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[X]},X]},{begin:"[A-Za-z$_][0-9A-Za-z$_]*:",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}MB2.exports=qt5});var yB2=Y((WH3,LB2)=>{function Rt5(I){return{name:"Coq",keywords:{keyword:"_|0 as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies Dependent Derive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},contains:[I.QUOTE_STRING_MODE,I.COMMENT("\\(\\*","\\*\\)"),I.C_NUMBER_MODE,{className:"type",excludeBegin:!0,begin:"\\|\\s*",end:"\\w+"},{begin:/[-=]>/}]}}LB2.exports=Rt5});var $B2=Y((wH3,PB2)=>{function Ut5(I){return{name:"Caché Object Script",case_insensitive:!0,aliases:["cls"],keywords:"property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii",contains:[{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",relevance:0},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]}]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"comment",begin:/;/,end:"$",relevance:0},{className:"built_in",begin:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{className:"built_in",begin:/\$\$\$[a-zA-Z]+/},{className:"built_in",begin:/%[a-z]+(?:\.[a-z]+)*/},{className:"symbol",begin:/\^%?[a-zA-Z][\w]*/},{className:"keyword",begin:/##class|##super|#define|#dim/},{begin:/&sql\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"sql"},{begin:/&(js|jscript|javascript)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"},{begin:/&html<\s*\s*>/,subLanguage:"xml"}]}}PB2.exports=Ut5});var TB2=Y((BH3,uB2)=>{function vt5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function Et5(I){return kF1("(?=",I,")")}function Sa(I){return kF1("(",I,")?")}function kF1(...I){return I.map((G)=>vt5(G)).join("")}function Mt5(I){let d=I.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),G="decltype\\(auto\\)",Z="[a-zA-Z_]\\w*::",C="<[^<>]+>",W="(decltype\\(auto\\)|"+Sa("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+Sa("<[^<>]+>")+")",w={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},B="\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)",A={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},I.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},V={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},X={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},I.inherit(A,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},d,I.C_BLOCK_COMMENT_MODE]},_={className:"title",begin:Sa("[a-zA-Z_]\\w*::")+I.IDENT_RE,relevance:0},F=Sa("[a-zA-Z_]\\w*::")+I.IDENT_RE+"\\s*\\(",J={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"_Bool _Complex _Imaginary",_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],literal:"true false nullptr NULL"},K={className:"function.dispatch",relevance:0,keywords:J,begin:kF1(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,I.IDENT_RE,Et5(/\s*\(/))},Q=[K,X,w,d,I.C_BLOCK_COMMENT_MODE,V,A],E={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:J,contains:Q.concat([{begin:/\(/,end:/\)/,keywords:J,contains:Q.concat(["self"]),relevance:0}]),relevance:0},S={className:"function",begin:"("+W+"[\\*&\\s]+)+"+F,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:J,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:J,relevance:0},{begin:F,returnBegin:!0,contains:[_],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[A,V]},{className:"params",begin:/\(/,end:/\)/,keywords:J,relevance:0,contains:[d,I.C_BLOCK_COMMENT_MODE,A,V,w,{begin:/\(/,end:/\)/,keywords:J,relevance:0,contains:["self",d,I.C_BLOCK_COMMENT_MODE,A,V,w]}]},w,d,I.C_BLOCK_COMMENT_MODE,X]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:J,illegal:"",keywords:J,contains:["self",w]},{begin:I.IDENT_RE+"::",keywords:J},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},I.TITLE_MODE]}]),exports:{preprocessor:X,strings:A,keywords:J}}}uB2.exports=Mt5});var mB2=Y((AH3,OB2)=>{function St5(I){let G="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml",Z="property rsc_defaults op_defaults",C="params meta operations op rule attributes utilization",W="read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\",w="number string",B="Master Started Slave Stopped start promote demote stop monitor true false";return{name:"crmsh",aliases:["crm","pcmk"],case_insensitive:!0,keywords:{keyword:"params meta operations op rule attributes utilization "+W+" number string",literal:"Master Started Slave Stopped start promote demote stop monitor true false"},contains:[I.HASH_COMMENT_MODE,{beginKeywords:"node",starts:{end:"\\s*([\\w_-]+:)?",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*"}}},{beginKeywords:"primitive rsc_template",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*",starts:{end:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{begin:"\\b("+G.split(" ").join("|")+")\\s+",keywords:G,starts:{className:"title",end:"[\\$\\w_][\\w_-]*"}},{beginKeywords:"property rsc_defaults op_defaults",starts:{className:"title",end:"\\s*([\\w_-]+:)?"}},I.QUOTE_STRING_MODE,{className:"meta",begin:"(ocf|systemd|service|lsb):[\\w_:-]+",relevance:0},{className:"number",begin:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",relevance:0},{className:"literal",begin:"[-]?(infinity|inf)",relevance:0},{className:"attr",begin:/([A-Za-z$_#][\w_-]+)=/,relevance:0},{className:"tag",begin:"",relevance:0}]}}OB2.exports=St5});var bB2=Y((VH3,lB2)=>{function Lt5(I){let w={$pattern:"[a-zA-Z_]\\w*[!?=]?",keyword:"abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},B={className:"subst",begin:/#\{/,end:/\}/,keywords:w},A={className:"template-variable",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:w};function V(Q,E){let S=[{begin:Q,end:E}];return S[0].contains=S,S}let X={className:"string",contains:[I.BACKSLASH_ESCAPE,B],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[Qwi]?\\(",end:"\\)",contains:V("\\(","\\)")},{begin:"%[Qwi]?\\[",end:"\\]",contains:V("\\[","\\]")},{begin:"%[Qwi]?\\{",end:/\}/,contains:V(/\{/,/\}/)},{begin:"%[Qwi]?<",end:">",contains:V("<",">")},{begin:"%[Qwi]?\\|",end:"\\|"},{begin:/<<-\w+$/,end:/^\s*\w+$/}],relevance:0},_={className:"string",variants:[{begin:"%q\\(",end:"\\)",contains:V("\\(","\\)")},{begin:"%q\\[",end:"\\]",contains:V("\\[","\\]")},{begin:"%q\\{",end:/\}/,contains:V(/\{/,/\}/)},{begin:"%q<",end:">",contains:V("<",">")},{begin:"%q\\|",end:"\\|"},{begin:/<<-'\w+'$/,end:/^\s*\w+$/}],relevance:0},F={begin:"(?!%\\})("+I.RE_STARTERS_RE+"|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",keywords:"case if select unless until when while",contains:[{className:"regexp",contains:[I.BACKSLASH_ESCAPE,B],variants:[{begin:"//[a-z]*",relevance:0},{begin:"/(?!\\/)",end:"/[a-z]*"}]}],relevance:0},g={className:"regexp",contains:[I.BACKSLASH_ESCAPE,B],variants:[{begin:"%r\\(",end:"\\)",contains:V("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:V("\\[","\\]")},{begin:"%r\\{",end:/\}/,contains:V(/\{/,/\}/)},{begin:"%r<",end:">",contains:V("<",">")},{begin:"%r\\|",end:"\\|"}],relevance:0},J={className:"meta",begin:"@\\[",end:"\\]",contains:[I.inherit(I.QUOTE_STRING_MODE,{className:"meta-string"})]},K=[A,X,_,g,F,J,I.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[I.HASH_COMMENT_MODE,I.inherit(I.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<"}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[I.HASH_COMMENT_MODE,I.inherit(I.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"})]},{beginKeywords:"annotation",end:"$|;",illegal:/=/,contains:[I.HASH_COMMENT_MODE,I.inherit(I.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"})],relevance:2},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[I.inherit(I.TITLE_MODE,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[I.inherit(I.TITLE_MODE,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",endsParent:!0})],relevance:2},{className:"symbol",begin:I.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[X,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?"}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]+)(_?[ui](8|16|32|64|128))?"},{begin:"\\b0o([0-7_]+)(_?[ui](8|16|32|64|128))?"},{begin:"\\b0x([A-Fa-f0-9_]+)(_?[ui](8|16|32|64|128))?"},{begin:"\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?(_?f(32|64))?(?!_)"},{begin:"\\b([1-9][0-9_]*|0)(_?[ui](8|16|32|64|128))?"}],relevance:0}];return B.contains=K,A.contains=K.slice(1),{name:"Crystal",aliases:["cr"],keywords:w,contains:K}}lB2.exports=Lt5});var jB2=Y((XH3,hB2)=>{function yt5(I){let d=["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],G=["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"],Z=["default","false","null","true"],C=["abstract","as","base","break","case","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"],W=["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"],w={keyword:C.concat(W),built_in:d,literal:Z},B=I.inherit(I.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),A={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},V={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},X=I.inherit(V,{illegal:/\n/}),_={className:"subst",begin:/\{/,end:/\}/,keywords:w},F=I.inherit(_,{illegal:/\n/}),g={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},I.BACKSLASH_ESCAPE,F]},J={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},_]},K=I.inherit(J,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},F]});_.contains=[J,g,V,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,A,I.C_BLOCK_COMMENT_MODE],F.contains=[K,g,X,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,A,I.inherit(I.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];let Q={variants:[J,g,V,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},B]},S=I.IDENT_RE+"(<"+I.IDENT_RE+"(\\s*,\\s*"+I.IDENT_RE+")*>)?(\\[\\])?",P={begin:"@"+I.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:w,illegal:/::/,contains:[I.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},Q,A,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},B,E,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[B,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[B,E,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+S+"\\s+)+"+I.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:w,contains:[{beginKeywords:G.join(" "),relevance:0},{begin:I.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0,contains:[I.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:w,relevance:0,contains:[Q,A,I.C_BLOCK_COMMENT_MODE]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},P]}}hB2.exports=yt5});var xB2=Y((YH3,kB2)=>{function Pt5(I){return{name:"CSP",case_insensitive:!1,keywords:{$pattern:"[a-zA-Z][a-zA-Z0-9_-]*",keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",begin:"^Content",end:":",excludeEnd:!0}]}}kB2.exports=Pt5});var pB2=Y((_H3,cB2)=>{var $t5=(I)=>{return{IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]}}},ut5=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],Tt5=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],Ot5=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],mt5=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],lt5=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse();function bt5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function ht5(I){return jt5("(?=",I,")")}function jt5(...I){return I.map((G)=>bt5(G)).join("")}function kt5(I){let d=$t5(I),G={className:"built_in",begin:/[\w-]+(?=\()/},Z={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},C="and or not only",W=/@-?\w[\w]*(-\w+)*/,w="[a-zA-Z-][a-zA-Z0-9_-]*",B=[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[I.C_BLOCK_COMMENT_MODE,Z,I.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},d.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+Ot5.join("|")+")"},{begin:"::("+mt5.join("|")+")"}]},{className:"attribute",begin:"\\b("+lt5.join("|")+")\\b"},{begin:":",end:"[;}]",contains:[d.HEXCOLOR,d.IMPORTANT,I.CSS_NUMBER_MODE,...B,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},G]},{begin:ht5(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:W},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:Tt5.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...B,I.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+ut5.join("|")+")\\b"}]}}cB2.exports=kt5});var nB2=Y((DH3,iB2)=>{function xt5(I){let d={$pattern:I.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},G="(0|[1-9][\\d_]*)",Z="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",C="0[bB][01_]+",W="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",w="0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",B="([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))",A="((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|"+B+")|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)"+B+"?)",V="(0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))",X="((0|[1-9][\\d_]*)|0[bB][01_]+|"+w+")",_="("+V+"|"+A+")",F=`\\\\(['"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};`,g={className:"number",begin:"\\b"+X+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},J={className:"number",begin:"\\b("+_+"([fF]|L|i|[fF]i|Li)?|"+X+"(i|[fF]i|Li))",relevance:0},K={className:"string",begin:"'("+F+"|.)",end:"'",illegal:"."},E={className:"string",begin:'"',contains:[{begin:F,relevance:0}],end:'"[cwd]?'},S={className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},P={className:"string",begin:"`",end:"`[cwd]?"},$={className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},h={className:"string",begin:'q"\\{',end:'\\}"'},O={className:"meta",begin:"^#!",end:"$",relevance:5},T={className:"meta",begin:"#(line)",end:"$",relevance:5},V1={className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"},c=I.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:d,contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,c,$,E,S,P,h,J,g,K,O,T,V1]}}iB2.exports=xt5});var aB2=Y((HH3,rB2)=>{function ct5(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function pt5(...I){return I.map((G)=>ct5(G)).join("")}function it5(I){let d={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},G={begin:"^[-\\*]{3,}",end:"$"},Z={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},C={className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},W={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},B={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:pt5(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.+?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},A={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},V={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};A.contains.push(V),V.contains.push(A);let X=[d,B];return A.contains=A.contains.concat(X),V.contains=V.contains.concat(X),X=X.concat(A,V),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:X},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:X}]}]},d,C,A,V,{className:"quote",begin:"^>\\s+",contains:X,end:"$"},Z,G,B,W]}}rB2.exports=it5});var oB2=Y((FH3,sB2)=>{function nt5(I){let d={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},G={className:"subst",variants:[{begin:/\$\{/,end:/\}/}],keywords:"true false null this is new super"},Z={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[I.BACKSLASH_ESCAPE,d,G]},{begin:'"""',end:'"""',contains:[I.BACKSLASH_ESCAPE,d,G]},{begin:"'",end:"'",illegal:"\\n",contains:[I.BACKSLASH_ESCAPE,d,G]},{begin:'"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE,d,G]}]};G.contains=[I.C_NUMBER_MODE,Z];let C=["Comparable","DateTime","Duration","Function","Iterable","Iterator","List","Map","Match","Object","Pattern","RegExp","Set","Stopwatch","String","StringBuffer","StringSink","Symbol","Type","Uri","bool","double","int","num","Element","ElementList"],W=C.map((B)=>`${B}?`);return{name:"Dart",keywords:{keyword:"abstract as assert async await break case catch class const continue covariant default deferred do dynamic else enum export extends extension external factory false final finally for Function get hide if implements import in inferface is late library mixin new null on operator part required rethrow return set show static super switch sync this throw true try typedef var void while with yield",built_in:C.concat(W).concat(["Never","Null","dynamic","print","document","querySelector","querySelectorAll","window"]),$pattern:/[A-Za-z][A-Za-z0-9_]*\??/},contains:[Z,I.COMMENT(/\/\*\*(?!\/)/,/\*\//,{subLanguage:"markdown",relevance:0}),I.COMMENT(/\/{3,} ?/,/$/,{contains:[{subLanguage:"markdown",begin:".",end:"$",relevance:0}]}),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]},I.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}sB2.exports=nt5});var tB2=Y((gH3,eB2)=>{function rt5(I){let d="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",G=[I.C_LINE_COMMENT_MODE,I.COMMENT(/\{/,/\}/,{relevance:0}),I.COMMENT(/\(\*/,/\*\)/,{relevance:10})],Z={className:"meta",variants:[{begin:/\{\$/,end:/\}/},{begin:/\(\*\$/,end:/\*\)/}]},C={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},W={className:"number",relevance:0,variants:[{begin:"\\$[0-9A-Fa-f]+"},{begin:"&[0-7]+"},{begin:"%[01]+"}]},w={className:"string",begin:/(#\d+)+/},B={begin:I.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[I.TITLE_MODE]},A={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[I.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:d,contains:[C,w,Z].concat(G)},Z].concat(G)};return{name:"Delphi",aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],case_insensitive:!0,keywords:d,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[C,w,I.NUMBER_MODE,W,B,A,Z].concat(G)}}eB2.exports=rt5});var dA2=Y((JH3,IA2)=>{function at5(I){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^--- +\d+,\d+ +----$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/^index/,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/},{begin:/^diff --git/,end:/$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}IA2.exports=at5});var ZA2=Y((KH3,GA2)=>{function st5(I){let d={begin:/\|[A-Za-z]+:?/,keywords:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},contains:[I.QUOTE_STRING_MODE,I.APOS_STRING_MODE]};return{name:"Django",aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[I.COMMENT(/\{%\s*comment\s*%\}/,/\{%\s*endcomment\s*%\}/),I.COMMENT(/\{#/,/#\}/),{className:"template-tag",begin:/\{%/,end:/%\}/,contains:[{className:"name",begin:/\w+/,keywords:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{endsWithParent:!0,keywords:"in by as",contains:[d],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[d]}]}}GA2.exports=st5});var WA2=Y((NH3,CA2)=>{function ot5(I){return{name:"DNS Zone",aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[I.COMMENT(";","$",{relevance:0}),{className:"meta",begin:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},I.inherit(I.NUMBER_MODE,{begin:/\b\d+[dhwm]?/})]}}CA2.exports=ot5});var BA2=Y((zH3,wA2)=>{function et5(I){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[I.HASH_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"{function tt5(I){let d=I.COMMENT(/^\s*@?rem\b/,/$/,{relevance:10});return{name:"Batch file (DOS)",aliases:["bat","cmd"],case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:"if else goto for in do call exit not exist errorlevel defined equ neq lss leq gtr geq",built_in:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux shift cd dir echo setlocal endlocal set pause copy append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shift sort start subst time title tree type ver verify vol ping net ipconfig taskkill xcopy ren del"},contains:[{className:"variable",begin:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{className:"function",begin:{className:"symbol",begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",relevance:0}.begin,end:"goto:eof",contains:[I.inherit(I.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),d]},{className:"number",begin:"\\b\\d+",relevance:0},d]}}AA2.exports=tt5});var YA2=Y((fH3,XA2)=>{function I19(I){return{keywords:"dsconfig",contains:[{className:"keyword",begin:"^dsconfig",end:/\s/,excludeEnd:!0,relevance:10},{className:"built_in",begin:/(list|create|get|set|delete)-(\w+)/,end:/\s/,excludeEnd:!0,illegal:"!@#$%^&*()",relevance:10},{className:"built_in",begin:/--(\w+)/,end:/\s/,excludeEnd:!0},{className:"string",begin:/"/,end:/"/},{className:"string",begin:/'/,end:/'/},{className:"string",begin:/[\w\-?]+:\w+/,end:/\W/,relevance:0},{className:"string",begin:/\w+(\-\w+)*/,end:/(?=\W)/,relevance:0},I.HASH_COMMENT_MODE]}}XA2.exports=I19});var DA2=Y((qH3,_A2)=>{function d19(I){let d={className:"string",variants:[I.inherit(I.QUOTE_STRING_MODE,{begin:'((u8?|U)|L)?"'}),{begin:'(u8?|U)?R"',end:'"',contains:[I.BACKSLASH_ESCAPE]},{begin:"'\\\\?.",end:"'",illegal:"."}]},G={className:"number",variants:[{begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{begin:I.C_NUMBER_RE}],relevance:0},Z={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef ifdef ifndef"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[I.inherit(d,{className:"meta-string"}),{className:"meta-string",begin:"<",end:">",illegal:"\\n"}]},d,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},C={className:"variable",begin:/&[a-z\d_]*\b/},W={className:"meta-keyword",begin:"/[a-z][a-z\\d-]*/"},w={className:"symbol",begin:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},B={className:"params",begin:"<",end:">",contains:[G,C]},A={className:"class",begin:/[a-zA-Z_][a-zA-Z\d_@]*\s\{/,end:/[{;=]/,returnBegin:!0,excludeEnd:!0};return{name:"Device Tree",keywords:"",contains:[{className:"class",begin:"/\\s*\\{",end:/\};/,relevance:10,contains:[C,W,w,A,B,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,G,d]},C,W,w,A,B,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,G,d,Z,{begin:I.IDENT_RE+"::",keywords:""}]}}_A2.exports=d19});var FA2=Y((RH3,HA2)=>{function G19(I){return{name:"Dust",aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"template-tag",begin:/\{[#\/]/,end:/\}/,illegal:/;/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,starts:{endsWithParent:!0,relevance:0,contains:[I.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{/,end:/\}/,illegal:/;/,keywords:"if eq ne lt lte gt gte select default math sep"}]}}HA2.exports=G19});var JA2=Y((UH3,gA2)=>{function Z19(I){let d=I.COMMENT(/\(\*/,/\*\)/),G={className:"attribute",begin:/^[ ]*[a-zA-Z]+([\s_-]+[a-zA-Z]+)*/},C={begin:/=/,end:/[.;]/,contains:[d,{className:"meta",begin:/\?.*\?/},{className:"string",variants:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{begin:"`",end:"`"}]}]};return{name:"Extended Backus-Naur Form",illegal:/\S/,contains:[d,G,C]}}gA2.exports=Z19});var NA2=Y((vH3,KA2)=>{function C19(I){let Z={$pattern:"[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?",keyword:"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0"},C={className:"subst",begin:/#\{/,end:/\}/,keywords:Z},W={className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(\\.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},w=`[/|([{<"']`,B={className:"string",begin:`~[a-z](?=[/|([{<"'])`,contains:[{endsParent:!0,contains:[{contains:[I.BACKSLASH_ESCAPE,C],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]}]}]},A={className:"string",begin:`~[A-Z](?=[/|([{<"'])`,contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]},V={className:"string",contains:[I.BACKSLASH_ESCAPE,C],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},X={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[I.inherit(I.TITLE_MODE,{begin:"[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?",endsParent:!0})]},_=I.inherit(X,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),F=[V,A,B,I.HASH_COMMENT_MODE,_,X,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[V,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:"[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?:(?!:)",relevance:0},W,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))"},{begin:"->"},{begin:"("+I.RE_STARTERS_RE+")\\s*",contains:[I.HASH_COMMENT_MODE,{begin:/\/: (?=\d+\s*[,\]])/,relevance:0,contains:[W]},{className:"regexp",illegal:"\\n",contains:[I.BACKSLASH_ESCAPE,C],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return C.contains=F,{name:"Elixir",keywords:Z,contains:F}}KA2.exports=C19});var QA2=Y((EH3,zA2)=>{function W19(I){let d={variants:[I.COMMENT("--","$"),I.COMMENT(/\{-/,/-\}/,{contains:["self"]})]},G={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},Z={begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},d]},C={begin:/\{/,end:/\}/,contains:Z.contains},W={className:"string",begin:"'\\\\?.",end:"'",illegal:"."};return{name:"Elm",keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",contains:[{beginKeywords:"port effect module",end:"exposing",keywords:"port effect module where command subscription exposing",contains:[Z,d],illegal:"\\W\\.|;"},{begin:"import",end:"$",keywords:"import as exposing",contains:[Z,d],illegal:"\\W\\.|;"},{begin:"type",end:"$",keywords:"type alias",contains:[G,Z,C,d]},{beginKeywords:"infix infixl infixr",end:"$",contains:[I.C_NUMBER_MODE,d]},{begin:"port",end:"$",keywords:"port",contains:[d]},W,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,G,I.inherit(I.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),d,{begin:"->|<-"}],illegal:/;/}}zA2.exports=W19});var RA2=Y((MH3,qA2)=>{function w19(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function B19(I){return fA2("(?=",I,")")}function fA2(...I){return I.map((G)=>w19(G)).join("")}function A19(I){let G={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__",built_in:"proc lambda",literal:"true false nil"},Z={className:"doctag",begin:"@[A-Za-z]+"},C={begin:"#<",end:">"},W=[I.COMMENT("#","$",{contains:[Z]}),I.COMMENT("^=begin","^=end",{contains:[Z],relevance:10}),I.COMMENT("^__END__","\\n$")],w={className:"subst",begin:/#\{/,end:/\}/,keywords:G},B={className:"string",contains:[I.BACKSLASH_ESCAPE,w],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:/<<[-~]?'?(\w+)\n(?:[^\n]*\n)*?\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},I.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[I.BACKSLASH_ESCAPE,w]})]}]},A="[1-9](_?[0-9])*|0",V="[0-9](_?[0-9])*",X={className:"number",relevance:0,variants:[{begin:"\\b([1-9](_?[0-9])*|0)(\\.([0-9](_?[0-9])*))?([eE][+-]?([0-9](_?[0-9])*)|r)?i?\\b"},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},_={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:G},F=[B,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[I.inherit(I.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{begin:"("+I.IDENT_RE+"::)?"+I.IDENT_RE,relevance:0}]}].concat(W)},{className:"function",begin:fA2(/def\s+/,B19("([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)\\s*(\\(|;|$)")),relevance:0,keywords:"def",end:"$|;",contains:[I.inherit(I.TITLE_MODE,{begin:"([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)"}),_].concat(W)},{begin:I.IDENT_RE+"::"},{className:"symbol",begin:I.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[B,{begin:"([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)"}],relevance:0},X,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:G},{begin:"("+I.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[I.BACKSLASH_ESCAPE,w],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(C,W),relevance:0}].concat(C,W);w.contains=F,_.contains=F;let g="[>?]>",J="[\\w#]+\\(\\w+\\):\\d+:\\d+>",K="(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>",Q=[{begin:/^\s*=>/,starts:{end:"$",contains:F}},{className:"meta",begin:"^("+g+"|"+J+"|"+K+")(?=[ ])",starts:{end:"$",contains:F}}];return W.unshift(C),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:G,illegal:/\/\*/,contains:[I.SHEBANG({binary:"ruby"})].concat(Q).concat(W).concat(F)}}qA2.exports=A19});var vA2=Y((SH3,UA2)=>{function V19(I){return{name:"ERB",subLanguage:"xml",contains:[I.COMMENT("<%#","%>"),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}UA2.exports=V19});var MA2=Y((LH3,EA2)=>{function X19(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function Y19(...I){return I.map((G)=>X19(G)).join("")}function _19(I){return{name:"Erlang REPL",keywords:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"meta",begin:"^[0-9]+> ",relevance:10},I.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",relevance:0},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{begin:Y19(/\?(::)?/,/([A-Z]\w*)/,/((::)[A-Z]\w*)*/)},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}EA2.exports=_19});var LA2=Y((yH3,SA2)=>{function D19(I){let G="([a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*|[a-z'][a-zA-Z0-9_']*)",Z={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},C=I.COMMENT("%","$"),W={className:"number",begin:"\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",relevance:0},w={begin:"fun\\s+[a-z'][a-zA-Z0-9_']*/\\d+"},B={begin:G+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:G,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},A={begin:/\{/,end:/\}/,relevance:0},V={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},X={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},_={begin:"#"+I.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+I.UNDERSCORE_IDENT_RE,relevance:0},{begin:/\{/,end:/\}/,relevance:0}]},F={beginKeywords:"fun receive if try case",end:"end",keywords:Z};F.contains=[C,w,I.inherit(I.APOS_STRING_MODE,{className:""}),F,B,I.QUOTE_STRING_MODE,W,A,V,X,_];let g=[C,w,F,B,I.QUOTE_STRING_MODE,W,A,V,X,_];B.contains[1].contains=g,A.contains=g,_.contains[1].contains=g;let J=["-module","-record","-undef","-export","-ifdef","-ifndef","-author","-copyright","-doc","-vsn","-import","-include","-include_lib","-compile","-define","-else","-endif","-file","-behaviour","-behavior","-spec"],K={className:"params",begin:"\\(",end:"\\)",contains:g};return{name:"Erlang",aliases:["erl"],keywords:Z,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[K,I.inherit(I.TITLE_MODE,{begin:"[a-z'][a-zA-Z0-9_']*"})],starts:{end:";|\\.",keywords:Z,contains:g}},C,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,keywords:{$pattern:"-"+I.IDENT_RE,keyword:J.map((Q)=>`${Q}|1.5`).join(" ")},contains:[K]},W,I.QUOTE_STRING_MODE,_,V,X,A,{begin:/\.$/}]}}SA2.exports=D19});var PA2=Y((PH3,yA2)=>{function H19(I){return{name:"Excel formulae",aliases:["xlsx","xls"],case_insensitive:!0,keywords:{$pattern:/[a-zA-Z][\w\.]*/,built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},contains:[{begin:/^=/,end:/[^=]/,returnEnd:!0,illegal:/=/,relevance:10},{className:"symbol",begin:/\b[A-Z]{1,2}\d+\b/,end:/[^\d]/,excludeEnd:!0,relevance:0},{className:"symbol",begin:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,relevance:0},I.BACKSLASH_ESCAPE,I.QUOTE_STRING_MODE,{className:"number",begin:I.NUMBER_RE+"(%)?",relevance:0},I.COMMENT(/\bN\(/,/\)/,{excludeBegin:!0,excludeEnd:!0,illegal:/\n/})]}}yA2.exports=H19});var uA2=Y(($H3,$A2)=>{function F19(I){return{name:"FIX",contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attr"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}$A2.exports=F19});var OA2=Y((uH3,TA2)=>{function g19(I){let d={className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},G={className:"string",variants:[{begin:'"',end:'"'}]},C={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[{className:"title",relevance:0,begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/}]};return{name:"Flix",keywords:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,d,G,C,I.C_NUMBER_MODE]}}TA2.exports=g19});var lA2=Y((TH3,mA2)=>{function J19(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function xF1(...I){return I.map((G)=>J19(G)).join("")}function K19(I){let d={className:"params",begin:"\\(",end:"\\)"},G={variants:[I.COMMENT("!","$",{relevance:0}),I.COMMENT("^C[ ]","$",{relevance:0}),I.COMMENT("^C$","$",{relevance:0})]},Z=/(_[a-z_\d]+)?/,C=/([de][+-]?\d+)?/,W={className:"number",variants:[{begin:xF1(/\b\d+/,/\.(\d*)/,C,Z)},{begin:xF1(/\b\d+/,C,Z)},{begin:xF1(/\.\d+/,C,Z)}],relevance:0},w={className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[I.UNDERSCORE_TITLE_MODE,d]},B={className:"string",relevance:0,variants:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]};return{name:"Fortran",case_insensitive:!0,aliases:["f90","f95"],keywords:{literal:".False. .True.",keyword:"kind do concurrent local shared while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock endassociate public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure impure integer real character complex logical codimension dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image sync change team co_broadcast co_max co_min co_sum co_reduce"},illegal:/\/\*/,contains:[B,w,{begin:/^C\s*=(?!=)/,relevance:0},G,W]}}mA2.exports=K19});var hA2=Y((OH3,bA2)=>{function N19(I){let d={begin:"<",end:">",contains:[I.inherit(I.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{name:"F#",aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},I.COMMENT("\\(\\*(\\s)","\\*\\)",{contains:["self"]}),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[I.UNDERSCORE_TITLE_MODE,d]},{className:"meta",begin:"\\[<",end:">\\]",relevance:10},{className:"symbol",begin:"\\B('[A-Za-z])\\b",contains:[I.BACKSLASH_ESCAPE]},I.C_LINE_COMMENT_MODE,I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),I.C_NUMBER_MODE]}}bA2.exports=N19});var kA2=Y((mH3,jA2)=>{function z19(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function Q19(I){return cF1("(",I,")*")}function cF1(...I){return I.map((G)=>z19(G)).join("")}function f19(I){let d={keyword:"abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",literal:"eps inf na",built_in:"abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"},G={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0},Z={className:"symbol",variants:[{begin:/=[lgenxc]=/},{begin:/\$/}]},C={className:"comment",variants:[{begin:"'",end:"'"},{begin:'"',end:'"'}],illegal:"\\n",contains:[I.BACKSLASH_ESCAPE]},W={begin:"/",end:"/",keywords:d,contains:[C,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,I.C_NUMBER_MODE]},w=/[a-z0-9&#*=?@\\><:,()$[\]_.{}!+%^-]+/,B={begin:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[C,W,{className:"comment",begin:cF1(w,Q19(cF1(/[ ]+/,w))),relevance:0}]};return{name:"GAMS",aliases:["gms"],case_insensitive:!0,keywords:d,contains:[I.COMMENT(/^\$ontext/,/^\$offtext/),{className:"meta",begin:"^\\$[a-z0-9]+",end:"$",returnBegin:!0,contains:[{className:"meta-keyword",begin:"^\\$[a-z0-9]+"}]},I.COMMENT("^\\*","$"),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,{beginKeywords:"set sets parameter parameters variable variables scalar scalars equation equations",end:";",contains:[I.COMMENT("^\\*","$"),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,W,B]},{beginKeywords:"table",end:";",returnBegin:!0,contains:[{beginKeywords:"table",end:"$",contains:[B]},I.COMMENT("^\\*","$"),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,I.C_NUMBER_MODE]},{className:"function",begin:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,returnBegin:!0,contains:[{className:"title",begin:/^[a-z0-9_]+/},G,Z]},I.C_NUMBER_MODE,Z]}}jA2.exports=f19});var cA2=Y((lH3,xA2)=>{function q19(I){let d={keyword:"bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint ne ge le gt lt and xor or not eq eqv",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester strtrim",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR"},G=I.COMMENT("@","@"),Z={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[{className:"meta-string",begin:'"',end:'"',illegal:"\\n"}]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,G]},C={begin:/\bstruct\s+/,end:/\s/,keywords:"struct",contains:[{className:"type",begin:I.UNDERSCORE_IDENT_RE,relevance:0}]},W=[{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,endsWithParent:!0,relevance:0,contains:[{className:"literal",begin:/\.\.\./},I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE,G,C]}],w={className:"title",begin:I.UNDERSCORE_IDENT_RE,relevance:0},B=function(F,g,J){let K=I.inherit({className:"function",beginKeywords:F,end:g,excludeEnd:!0,contains:[].concat(W)},J||{});return K.contains.push(w),K.contains.push(I.C_NUMBER_MODE),K.contains.push(I.C_BLOCK_COMMENT_MODE),K.contains.push(G),K},A={className:"built_in",begin:"\\b("+d.built_in.split(" ").join("|")+")\\b"},V={className:"string",begin:'"',end:'"',contains:[I.BACKSLASH_ESCAPE],relevance:0},X={begin:I.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,keywords:d,relevance:0,contains:[{beginKeywords:d.keyword},A,{className:"built_in",begin:I.UNDERSCORE_IDENT_RE,relevance:0}]},_={begin:/\(/,end:/\)/,relevance:0,keywords:{built_in:d.built_in,literal:d.literal},contains:[I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE,G,A,X,V,"self"]};return X.contains.push(_),{name:"GAUSS",aliases:["gss"],case_insensitive:!0,keywords:d,illegal:/(\{[%#]|[%#]\}| <- )/,contains:[I.C_NUMBER_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,G,V,Z,{className:"keyword",begin:/\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/},B("proc keyword",";"),B("fn","="),{beginKeywords:"for threadfor",end:/;/,relevance:0,contains:[I.C_BLOCK_COMMENT_MODE,G,_]},{variants:[{begin:I.UNDERSCORE_IDENT_RE+"\\."+I.UNDERSCORE_IDENT_RE},{begin:I.UNDERSCORE_IDENT_RE+"\\s*="}],relevance:0},X,C]}}xA2.exports=q19});var iA2=Y((bH3,pA2)=>{function R19(I){let Z={$pattern:"[A-Z_][A-Z0-9_.]*",keyword:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR"},C={className:"meta",begin:"([O])([0-9]+)"},W=I.inherit(I.C_NUMBER_MODE,{begin:"([-+]?((\\.\\d+)|(\\d+)(\\.\\d*)?))|"+I.C_NUMBER_RE}),w=[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.COMMENT(/\(/,/\)/),W,I.inherit(I.APOS_STRING_MODE,{illegal:null}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),{className:"name",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"name",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"attr",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"attr",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",contains:[W],end:"\\]"},{className:"symbol",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{name:"G-code (ISO 6983)",aliases:["nc"],case_insensitive:!0,keywords:Z,contains:[{className:"meta",begin:"%"},C].concat(w)}}pA2.exports=R19});var rA2=Y((hH3,nA2)=>{function U19(I){return{name:"Gherkin",aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"symbol",begin:"\\*",relevance:0},{className:"meta",begin:"@[^@\\s]+"},{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},I.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},I.QUOTE_STRING_MODE]}}nA2.exports=U19});var sA2=Y((jH3,aA2)=>{function v19(I){return{name:"GLSL",keywords:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},illegal:'"',contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"}]}}aA2.exports=v19});var eA2=Y((kH3,oA2)=>{function E19(I){return{name:"GML",case_insensitive:!1,keywords:{keyword:"begin end if then else while do for break continue with until repeat exit and or xor not return mod div switch case default var globalvar enum function constructor delete #macro #region #endregion",built_in:"is_real is_string is_array is_undefined is_int32 is_int64 is_ptr is_vec3 is_vec4 is_matrix is_bool is_method is_struct is_infinity is_nan is_numeric typeof variable_global_exists variable_global_get variable_global_set variable_instance_exists variable_instance_get variable_instance_set variable_instance_get_names variable_struct_exists variable_struct_get variable_struct_get_names variable_struct_names_count variable_struct_remove variable_struct_set array_delete array_insert array_length array_length_1d array_length_2d array_height_2d array_equals array_create array_copy array_pop array_push array_resize array_sort random random_range irandom irandom_range random_set_seed random_get_seed randomize randomise choose abs round floor ceil sign frac sqrt sqr exp ln log2 log10 sin cos tan arcsin arccos arctan arctan2 dsin dcos dtan darcsin darccos darctan darctan2 degtorad radtodeg power logn min max mean median clamp lerp dot_product dot_product_3d dot_product_normalised dot_product_3d_normalised dot_product_normalized dot_product_3d_normalized math_set_epsilon math_get_epsilon angle_difference point_distance_3d point_distance point_direction lengthdir_x lengthdir_y real string int64 ptr string_format chr ansi_char ord string_length string_byte_length string_pos string_copy string_char_at string_ord_at string_byte_at string_set_byte_at string_delete string_insert string_lower string_upper string_repeat string_letters string_digits string_lettersdigits string_replace string_replace_all string_count string_hash_to_newline clipboard_has_text clipboard_set_text clipboard_get_text date_current_datetime date_create_datetime date_valid_datetime date_inc_year date_inc_month date_inc_week date_inc_day date_inc_hour date_inc_minute date_inc_second date_get_year date_get_month date_get_week date_get_day date_get_hour date_get_minute date_get_second date_get_weekday date_get_day_of_year date_get_hour_of_year date_get_minute_of_year date_get_second_of_year date_year_span date_month_span date_week_span date_day_span date_hour_span date_minute_span date_second_span date_compare_datetime date_compare_date date_compare_time date_date_of date_time_of date_datetime_string date_date_string date_time_string date_days_in_month date_days_in_year date_leap_year date_is_today date_set_timezone date_get_timezone game_set_speed game_get_speed motion_set motion_add place_free place_empty place_meeting place_snapped move_random move_snap move_towards_point move_contact_solid move_contact_all move_outside_solid move_outside_all move_bounce_solid move_bounce_all move_wrap distance_to_point distance_to_object position_empty position_meeting path_start path_end mp_linear_step mp_potential_step mp_linear_step_object mp_potential_step_object mp_potential_settings mp_linear_path mp_potential_path mp_linear_path_object mp_potential_path_object mp_grid_create mp_grid_destroy mp_grid_clear_all mp_grid_clear_cell mp_grid_clear_rectangle mp_grid_add_cell mp_grid_get_cell mp_grid_add_rectangle mp_grid_add_instances mp_grid_path mp_grid_draw mp_grid_to_ds_grid collision_point collision_rectangle collision_circle collision_ellipse collision_line collision_point_list collision_rectangle_list collision_circle_list collision_ellipse_list collision_line_list instance_position_list instance_place_list point_in_rectangle point_in_triangle point_in_circle rectangle_in_rectangle rectangle_in_triangle rectangle_in_circle instance_find instance_exists instance_number instance_position instance_nearest instance_furthest instance_place instance_create_depth instance_create_layer instance_copy instance_change instance_destroy position_destroy position_change instance_id_get instance_deactivate_all instance_deactivate_object instance_deactivate_region instance_activate_all instance_activate_object instance_activate_region room_goto room_goto_previous room_goto_next room_previous room_next room_restart game_end game_restart game_load game_save game_save_buffer game_load_buffer event_perform event_user event_perform_object event_inherited show_debug_message show_debug_overlay debug_event debug_get_callstack alarm_get alarm_set font_texture_page_size keyboard_set_map keyboard_get_map keyboard_unset_map keyboard_check keyboard_check_pressed keyboard_check_released keyboard_check_direct keyboard_get_numlock keyboard_set_numlock keyboard_key_press keyboard_key_release keyboard_clear io_clear mouse_check_button mouse_check_button_pressed mouse_check_button_released mouse_wheel_up mouse_wheel_down mouse_clear draw_self draw_sprite draw_sprite_pos draw_sprite_ext draw_sprite_stretched draw_sprite_stretched_ext draw_sprite_tiled draw_sprite_tiled_ext draw_sprite_part draw_sprite_part_ext draw_sprite_general draw_clear draw_clear_alpha draw_point draw_line draw_line_width draw_rectangle draw_roundrect draw_roundrect_ext draw_triangle draw_circle draw_ellipse draw_set_circle_precision draw_arrow draw_button draw_path draw_healthbar draw_getpixel draw_getpixel_ext draw_set_colour draw_set_color draw_set_alpha draw_get_colour draw_get_color draw_get_alpha merge_colour make_colour_rgb make_colour_hsv colour_get_red colour_get_green colour_get_blue colour_get_hue colour_get_saturation colour_get_value merge_color make_color_rgb make_color_hsv color_get_red color_get_green color_get_blue color_get_hue color_get_saturation color_get_value merge_color screen_save screen_save_part draw_set_font draw_set_halign draw_set_valign draw_text draw_text_ext string_width string_height string_width_ext string_height_ext draw_text_transformed draw_text_ext_transformed draw_text_colour draw_text_ext_colour draw_text_transformed_colour draw_text_ext_transformed_colour draw_text_color draw_text_ext_color draw_text_transformed_color draw_text_ext_transformed_color draw_point_colour draw_line_colour draw_line_width_colour draw_rectangle_colour draw_roundrect_colour draw_roundrect_colour_ext draw_triangle_colour draw_circle_colour draw_ellipse_colour draw_point_color draw_line_color draw_line_width_color draw_rectangle_color draw_roundrect_color draw_roundrect_color_ext draw_triangle_color draw_circle_color draw_ellipse_color draw_primitive_begin draw_vertex draw_vertex_colour draw_vertex_color draw_primitive_end sprite_get_uvs font_get_uvs sprite_get_texture font_get_texture texture_get_width texture_get_height texture_get_uvs draw_primitive_begin_texture draw_vertex_texture draw_vertex_texture_colour draw_vertex_texture_color texture_global_scale surface_create surface_create_ext surface_resize surface_free surface_exists surface_get_width surface_get_height surface_get_texture surface_set_target surface_set_target_ext surface_reset_target surface_depth_disable surface_get_depth_disable draw_surface draw_surface_stretched draw_surface_tiled draw_surface_part draw_surface_ext draw_surface_stretched_ext draw_surface_tiled_ext draw_surface_part_ext draw_surface_general surface_getpixel surface_getpixel_ext surface_save surface_save_part surface_copy surface_copy_part application_surface_draw_enable application_get_position application_surface_enable application_surface_is_enabled display_get_width display_get_height display_get_orientation display_get_gui_width display_get_gui_height display_reset display_mouse_get_x display_mouse_get_y display_mouse_set display_set_ui_visibility window_set_fullscreen window_get_fullscreen window_set_caption window_set_min_width window_set_max_width window_set_min_height window_set_max_height window_get_visible_rects window_get_caption window_set_cursor window_get_cursor window_set_colour window_get_colour window_set_color window_get_color window_set_position window_set_size window_set_rectangle window_center window_get_x window_get_y window_get_width window_get_height window_mouse_get_x window_mouse_get_y window_mouse_set window_view_mouse_get_x window_view_mouse_get_y window_views_mouse_get_x window_views_mouse_get_y audio_listener_position audio_listener_velocity audio_listener_orientation audio_emitter_position audio_emitter_create audio_emitter_free audio_emitter_exists audio_emitter_pitch audio_emitter_velocity audio_emitter_falloff audio_emitter_gain audio_play_sound audio_play_sound_on audio_play_sound_at audio_stop_sound audio_resume_music audio_music_is_playing audio_resume_sound audio_pause_sound audio_pause_music audio_channel_num audio_sound_length audio_get_type audio_falloff_set_model audio_play_music audio_stop_music audio_master_gain audio_music_gain audio_sound_gain audio_sound_pitch audio_stop_all audio_resume_all audio_pause_all audio_is_playing audio_is_paused audio_exists audio_sound_set_track_position audio_sound_get_track_position audio_emitter_get_gain audio_emitter_get_pitch audio_emitter_get_x audio_emitter_get_y audio_emitter_get_z audio_emitter_get_vx audio_emitter_get_vy audio_emitter_get_vz audio_listener_set_position audio_listener_set_velocity audio_listener_set_orientation audio_listener_get_data audio_set_master_gain audio_get_master_gain audio_sound_get_gain audio_sound_get_pitch audio_get_name audio_sound_set_track_position audio_sound_get_track_position audio_create_stream audio_destroy_stream audio_create_sync_group audio_destroy_sync_group audio_play_in_sync_group audio_start_sync_group audio_stop_sync_group audio_pause_sync_group audio_resume_sync_group audio_sync_group_get_track_pos audio_sync_group_debug audio_sync_group_is_playing audio_debug audio_group_load audio_group_unload audio_group_is_loaded audio_group_load_progress audio_group_name audio_group_stop_all audio_group_set_gain audio_create_buffer_sound audio_free_buffer_sound audio_create_play_queue audio_free_play_queue audio_queue_sound audio_get_recorder_count audio_get_recorder_info audio_start_recording audio_stop_recording audio_sound_get_listener_mask audio_emitter_get_listener_mask audio_get_listener_mask audio_sound_set_listener_mask audio_emitter_set_listener_mask audio_set_listener_mask audio_get_listener_count audio_get_listener_info audio_system show_message show_message_async clickable_add clickable_add_ext clickable_change clickable_change_ext clickable_delete clickable_exists clickable_set_style show_question show_question_async get_integer get_string get_integer_async get_string_async get_login_async get_open_filename get_save_filename get_open_filename_ext get_save_filename_ext show_error highscore_clear highscore_add highscore_value highscore_name draw_highscore sprite_exists sprite_get_name sprite_get_number sprite_get_width sprite_get_height sprite_get_xoffset sprite_get_yoffset sprite_get_bbox_left sprite_get_bbox_right sprite_get_bbox_top sprite_get_bbox_bottom sprite_save sprite_save_strip sprite_set_cache_size sprite_set_cache_size_ext sprite_get_tpe sprite_prefetch sprite_prefetch_multi sprite_flush sprite_flush_multi sprite_set_speed sprite_get_speed_type sprite_get_speed font_exists font_get_name font_get_fontname font_get_bold font_get_italic font_get_first font_get_last font_get_size font_set_cache_size path_exists path_get_name path_get_length path_get_time path_get_kind path_get_closed path_get_precision path_get_number path_get_point_x path_get_point_y path_get_point_speed path_get_x path_get_y path_get_speed script_exists script_get_name timeline_add timeline_delete timeline_clear timeline_exists timeline_get_name timeline_moment_clear timeline_moment_add_script timeline_size timeline_max_moment object_exists object_get_name object_get_sprite object_get_solid object_get_visible object_get_persistent object_get_mask object_get_parent object_get_physics object_is_ancestor room_exists room_get_name sprite_set_offset sprite_duplicate sprite_assign sprite_merge sprite_add sprite_replace sprite_create_from_surface sprite_add_from_surface sprite_delete sprite_set_alpha_from_sprite sprite_collision_mask font_add_enable_aa font_add_get_enable_aa font_add font_add_sprite font_add_sprite_ext font_replace font_replace_sprite font_replace_sprite_ext font_delete path_set_kind path_set_closed path_set_precision path_add path_assign path_duplicate path_append path_delete path_add_point path_insert_point path_change_point path_delete_point path_clear_points path_reverse path_mirror path_flip path_rotate path_rescale path_shift script_execute object_set_sprite object_set_solid object_set_visible object_set_persistent object_set_mask room_set_width room_set_height room_set_persistent room_set_background_colour room_set_background_color room_set_view room_set_viewport room_get_viewport room_set_view_enabled room_add room_duplicate room_assign room_instance_add room_instance_clear room_get_camera room_set_camera asset_get_index asset_get_type file_text_open_from_string file_text_open_read file_text_open_write file_text_open_append file_text_close file_text_write_string file_text_write_real file_text_writeln file_text_read_string file_text_read_real file_text_readln file_text_eof file_text_eoln file_exists file_delete file_rename file_copy directory_exists directory_create directory_destroy file_find_first file_find_next file_find_close file_attributes filename_name filename_path filename_dir filename_drive filename_ext filename_change_ext file_bin_open file_bin_rewrite file_bin_close file_bin_position file_bin_size file_bin_seek file_bin_write_byte file_bin_read_byte parameter_count parameter_string environment_get_variable ini_open_from_string ini_open ini_close ini_read_string ini_read_real ini_write_string ini_write_real ini_key_exists ini_section_exists ini_key_delete ini_section_delete ds_set_precision ds_exists ds_stack_create ds_stack_destroy ds_stack_clear ds_stack_copy ds_stack_size ds_stack_empty ds_stack_push ds_stack_pop ds_stack_top ds_stack_write ds_stack_read ds_queue_create ds_queue_destroy ds_queue_clear ds_queue_copy ds_queue_size ds_queue_empty ds_queue_enqueue ds_queue_dequeue ds_queue_head ds_queue_tail ds_queue_write ds_queue_read ds_list_create ds_list_destroy ds_list_clear ds_list_copy ds_list_size ds_list_empty ds_list_add ds_list_insert ds_list_replace ds_list_delete ds_list_find_index ds_list_find_value ds_list_mark_as_list ds_list_mark_as_map ds_list_sort ds_list_shuffle ds_list_write ds_list_read ds_list_set ds_map_create ds_map_destroy ds_map_clear ds_map_copy ds_map_size ds_map_empty ds_map_add ds_map_add_list ds_map_add_map ds_map_replace ds_map_replace_map ds_map_replace_list ds_map_delete ds_map_exists ds_map_find_value ds_map_find_previous ds_map_find_next ds_map_find_first ds_map_find_last ds_map_write ds_map_read ds_map_secure_save ds_map_secure_load ds_map_secure_load_buffer ds_map_secure_save_buffer ds_map_set ds_priority_create ds_priority_destroy ds_priority_clear ds_priority_copy ds_priority_size ds_priority_empty ds_priority_add ds_priority_change_priority ds_priority_find_priority ds_priority_delete_value ds_priority_delete_min ds_priority_find_min ds_priority_delete_max ds_priority_find_max ds_priority_write ds_priority_read ds_grid_create ds_grid_destroy ds_grid_copy ds_grid_resize ds_grid_width ds_grid_height ds_grid_clear ds_grid_set ds_grid_add ds_grid_multiply ds_grid_set_region ds_grid_add_region ds_grid_multiply_region ds_grid_set_disk ds_grid_add_disk ds_grid_multiply_disk ds_grid_set_grid_region ds_grid_add_grid_region ds_grid_multiply_grid_region ds_grid_get ds_grid_get_sum ds_grid_get_max ds_grid_get_min ds_grid_get_mean ds_grid_get_disk_sum ds_grid_get_disk_min ds_grid_get_disk_max ds_grid_get_disk_mean ds_grid_value_exists ds_grid_value_x ds_grid_value_y ds_grid_value_disk_exists ds_grid_value_disk_x ds_grid_value_disk_y ds_grid_shuffle ds_grid_write ds_grid_read ds_grid_sort ds_grid_set ds_grid_get effect_create_below effect_create_above effect_clear part_type_create part_type_destroy part_type_exists part_type_clear part_type_shape part_type_sprite part_type_size part_type_scale part_type_orientation part_type_life part_type_step part_type_death part_type_speed part_type_direction part_type_gravity part_type_colour1 part_type_colour2 part_type_colour3 part_type_colour_mix part_type_colour_rgb part_type_colour_hsv part_type_color1 part_type_color2 part_type_color3 part_type_color_mix part_type_color_rgb part_type_color_hsv part_type_alpha1 part_type_alpha2 part_type_alpha3 part_type_blend part_system_create part_system_create_layer part_system_destroy part_system_exists part_system_clear part_system_draw_order part_system_depth part_system_position part_system_automatic_update part_system_automatic_draw part_system_update part_system_drawit part_system_get_layer part_system_layer part_particles_create part_particles_create_colour part_particles_create_color part_particles_clear part_particles_count part_emitter_create part_emitter_destroy part_emitter_destroy_all part_emitter_exists part_emitter_clear part_emitter_region part_emitter_burst part_emitter_stream external_call external_define external_free window_handle window_device matrix_get matrix_set matrix_build_identity matrix_build matrix_build_lookat matrix_build_projection_ortho matrix_build_projection_perspective matrix_build_projection_perspective_fov matrix_multiply matrix_transform_vertex matrix_stack_push matrix_stack_pop matrix_stack_multiply matrix_stack_set matrix_stack_clear matrix_stack_top matrix_stack_is_empty browser_input_capture os_get_config os_get_info os_get_language os_get_region os_lock_orientation display_get_dpi_x display_get_dpi_y display_set_gui_size display_set_gui_maximise display_set_gui_maximize device_mouse_dbclick_enable display_set_timing_method display_get_timing_method display_set_sleep_margin display_get_sleep_margin virtual_key_add virtual_key_hide virtual_key_delete virtual_key_show draw_enable_drawevent draw_enable_swf_aa draw_set_swf_aa_level draw_get_swf_aa_level draw_texture_flush draw_flush gpu_set_blendenable gpu_set_ztestenable gpu_set_zfunc gpu_set_zwriteenable gpu_set_lightingenable gpu_set_fog gpu_set_cullmode gpu_set_blendmode gpu_set_blendmode_ext gpu_set_blendmode_ext_sepalpha gpu_set_colorwriteenable gpu_set_colourwriteenable gpu_set_alphatestenable gpu_set_alphatestref gpu_set_alphatestfunc gpu_set_texfilter gpu_set_texfilter_ext gpu_set_texrepeat gpu_set_texrepeat_ext gpu_set_tex_filter gpu_set_tex_filter_ext gpu_set_tex_repeat gpu_set_tex_repeat_ext gpu_set_tex_mip_filter gpu_set_tex_mip_filter_ext gpu_set_tex_mip_bias gpu_set_tex_mip_bias_ext gpu_set_tex_min_mip gpu_set_tex_min_mip_ext gpu_set_tex_max_mip gpu_set_tex_max_mip_ext gpu_set_tex_max_aniso gpu_set_tex_max_aniso_ext gpu_set_tex_mip_enable gpu_set_tex_mip_enable_ext gpu_get_blendenable gpu_get_ztestenable gpu_get_zfunc gpu_get_zwriteenable gpu_get_lightingenable gpu_get_fog gpu_get_cullmode gpu_get_blendmode gpu_get_blendmode_ext gpu_get_blendmode_ext_sepalpha gpu_get_blendmode_src gpu_get_blendmode_dest gpu_get_blendmode_srcalpha gpu_get_blendmode_destalpha gpu_get_colorwriteenable gpu_get_colourwriteenable gpu_get_alphatestenable gpu_get_alphatestref gpu_get_alphatestfunc gpu_get_texfilter gpu_get_texfilter_ext gpu_get_texrepeat gpu_get_texrepeat_ext gpu_get_tex_filter gpu_get_tex_filter_ext gpu_get_tex_repeat gpu_get_tex_repeat_ext gpu_get_tex_mip_filter gpu_get_tex_mip_filter_ext gpu_get_tex_mip_bias gpu_get_tex_mip_bias_ext gpu_get_tex_min_mip gpu_get_tex_min_mip_ext gpu_get_tex_max_mip gpu_get_tex_max_mip_ext gpu_get_tex_max_aniso gpu_get_tex_max_aniso_ext gpu_get_tex_mip_enable gpu_get_tex_mip_enable_ext gpu_push_state gpu_pop_state gpu_get_state gpu_set_state draw_light_define_ambient draw_light_define_direction draw_light_define_point draw_light_enable draw_set_lighting draw_light_get_ambient draw_light_get draw_get_lighting shop_leave_rating url_get_domain url_open url_open_ext url_open_full get_timer achievement_login achievement_logout achievement_post achievement_increment achievement_post_score achievement_available achievement_show_achievements achievement_show_leaderboards achievement_load_friends achievement_load_leaderboard achievement_send_challenge achievement_load_progress achievement_reset achievement_login_status achievement_get_pic achievement_show_challenge_notifications achievement_get_challenges achievement_event achievement_show achievement_get_info cloud_file_save cloud_string_save cloud_synchronise ads_enable ads_disable ads_setup ads_engagement_launch ads_engagement_available ads_engagement_active ads_event ads_event_preload ads_set_reward_callback ads_get_display_height ads_get_display_width ads_move ads_interstitial_available ads_interstitial_display device_get_tilt_x device_get_tilt_y device_get_tilt_z device_is_keypad_open device_mouse_check_button device_mouse_check_button_pressed device_mouse_check_button_released device_mouse_x device_mouse_y device_mouse_raw_x device_mouse_raw_y device_mouse_x_to_gui device_mouse_y_to_gui iap_activate iap_status iap_enumerate_products iap_restore_all iap_acquire iap_consume iap_product_details iap_purchase_details facebook_init facebook_login facebook_status facebook_graph_request facebook_dialog facebook_logout facebook_launch_offerwall facebook_post_message facebook_send_invite facebook_user_id facebook_accesstoken facebook_check_permission facebook_request_read_permissions facebook_request_publish_permissions gamepad_is_supported gamepad_get_device_count gamepad_is_connected gamepad_get_description gamepad_get_button_threshold gamepad_set_button_threshold gamepad_get_axis_deadzone gamepad_set_axis_deadzone gamepad_button_count gamepad_button_check gamepad_button_check_pressed gamepad_button_check_released gamepad_button_value gamepad_axis_count gamepad_axis_value gamepad_set_vibration gamepad_set_colour gamepad_set_color os_is_paused window_has_focus code_is_compiled http_get http_get_file http_post_string http_request json_encode json_decode zip_unzip load_csv base64_encode base64_decode md5_string_unicode md5_string_utf8 md5_file os_is_network_connected sha1_string_unicode sha1_string_utf8 sha1_file os_powersave_enable analytics_event analytics_event_ext win8_livetile_tile_notification win8_livetile_tile_clear win8_livetile_badge_notification win8_livetile_badge_clear win8_livetile_queue_enable win8_secondarytile_pin win8_secondarytile_badge_notification win8_secondarytile_delete win8_livetile_notification_begin win8_livetile_notification_secondary_begin win8_livetile_notification_expiry win8_livetile_notification_tag win8_livetile_notification_text_add win8_livetile_notification_image_add win8_livetile_notification_end win8_appbar_enable win8_appbar_add_element win8_appbar_remove_element win8_settingscharm_add_entry win8_settingscharm_add_html_entry win8_settingscharm_add_xaml_entry win8_settingscharm_set_xaml_property win8_settingscharm_get_xaml_property win8_settingscharm_remove_entry win8_share_image win8_share_screenshot win8_share_file win8_share_url win8_share_text win8_search_enable win8_search_disable win8_search_add_suggestions win8_device_touchscreen_available win8_license_initialize_sandbox win8_license_trial_version winphone_license_trial_version winphone_tile_title winphone_tile_count winphone_tile_back_title winphone_tile_back_content winphone_tile_back_content_wide winphone_tile_front_image winphone_tile_front_image_small winphone_tile_front_image_wide winphone_tile_back_image winphone_tile_back_image_wide winphone_tile_background_colour winphone_tile_background_color winphone_tile_icon_image winphone_tile_small_icon_image winphone_tile_wide_content winphone_tile_cycle_images winphone_tile_small_background_image physics_world_create physics_world_gravity physics_world_update_speed physics_world_update_iterations physics_world_draw_debug physics_pause_enable physics_fixture_create physics_fixture_set_kinematic physics_fixture_set_density physics_fixture_set_awake physics_fixture_set_restitution physics_fixture_set_friction physics_fixture_set_collision_group physics_fixture_set_sensor physics_fixture_set_linear_damping physics_fixture_set_angular_damping physics_fixture_set_circle_shape physics_fixture_set_box_shape physics_fixture_set_edge_shape physics_fixture_set_polygon_shape physics_fixture_set_chain_shape physics_fixture_add_point physics_fixture_bind physics_fixture_bind_ext physics_fixture_delete physics_apply_force physics_apply_impulse physics_apply_angular_impulse physics_apply_local_force physics_apply_local_impulse physics_apply_torque physics_mass_properties physics_draw_debug physics_test_overlap physics_remove_fixture physics_set_friction physics_set_density physics_set_restitution physics_get_friction physics_get_density physics_get_restitution physics_joint_distance_create physics_joint_rope_create physics_joint_revolute_create physics_joint_prismatic_create physics_joint_pulley_create physics_joint_wheel_create physics_joint_weld_create physics_joint_friction_create physics_joint_gear_create physics_joint_enable_motor physics_joint_get_value physics_joint_set_value physics_joint_delete physics_particle_create physics_particle_delete physics_particle_delete_region_circle physics_particle_delete_region_box physics_particle_delete_region_poly physics_particle_set_flags physics_particle_set_category_flags physics_particle_draw physics_particle_draw_ext physics_particle_count physics_particle_get_data physics_particle_get_data_particle physics_particle_group_begin physics_particle_group_circle physics_particle_group_box physics_particle_group_polygon physics_particle_group_add_point physics_particle_group_end physics_particle_group_join physics_particle_group_delete physics_particle_group_count physics_particle_group_get_data physics_particle_group_get_mass physics_particle_group_get_inertia physics_particle_group_get_centre_x physics_particle_group_get_centre_y physics_particle_group_get_vel_x physics_particle_group_get_vel_y physics_particle_group_get_ang_vel physics_particle_group_get_x physics_particle_group_get_y physics_particle_group_get_angle physics_particle_set_group_flags physics_particle_get_group_flags physics_particle_get_max_count physics_particle_get_radius physics_particle_get_density physics_particle_get_damping physics_particle_get_gravity_scale physics_particle_set_max_count physics_particle_set_radius physics_particle_set_density physics_particle_set_damping physics_particle_set_gravity_scale network_create_socket network_create_socket_ext network_create_server network_create_server_raw network_connect network_connect_raw network_send_packet network_send_raw network_send_broadcast network_send_udp network_send_udp_raw network_set_timeout network_set_config network_resolve network_destroy buffer_create buffer_write buffer_read buffer_seek buffer_get_surface buffer_set_surface buffer_delete buffer_exists buffer_get_type buffer_get_alignment buffer_poke buffer_peek buffer_save buffer_save_ext buffer_load buffer_load_ext buffer_load_partial buffer_copy buffer_fill buffer_get_size buffer_tell buffer_resize buffer_md5 buffer_sha1 buffer_base64_encode buffer_base64_decode buffer_base64_decode_ext buffer_sizeof buffer_get_address buffer_create_from_vertex_buffer buffer_create_from_vertex_buffer_ext buffer_copy_from_vertex_buffer buffer_async_group_begin buffer_async_group_option buffer_async_group_end buffer_load_async buffer_save_async gml_release_mode gml_pragma steam_activate_overlay steam_is_overlay_enabled steam_is_overlay_activated steam_get_persona_name steam_initialised steam_is_cloud_enabled_for_app steam_is_cloud_enabled_for_account steam_file_persisted steam_get_quota_total steam_get_quota_free steam_file_write steam_file_write_file steam_file_read steam_file_delete steam_file_exists steam_file_size steam_file_share steam_is_screenshot_requested steam_send_screenshot steam_is_user_logged_on steam_get_user_steam_id steam_user_owns_dlc steam_user_installed_dlc steam_set_achievement steam_get_achievement steam_clear_achievement steam_set_stat_int steam_set_stat_float steam_set_stat_avg_rate steam_get_stat_int steam_get_stat_float steam_get_stat_avg_rate steam_reset_all_stats steam_reset_all_stats_achievements steam_stats_ready steam_create_leaderboard steam_upload_score steam_upload_score_ext steam_download_scores_around_user steam_download_scores steam_download_friends_scores steam_upload_score_buffer steam_upload_score_buffer_ext steam_current_game_language steam_available_languages steam_activate_overlay_browser steam_activate_overlay_user steam_activate_overlay_store steam_get_user_persona_name steam_get_app_id steam_get_user_account_id steam_ugc_download steam_ugc_create_item steam_ugc_start_item_update steam_ugc_set_item_title steam_ugc_set_item_description steam_ugc_set_item_visibility steam_ugc_set_item_tags steam_ugc_set_item_content steam_ugc_set_item_preview steam_ugc_submit_item_update steam_ugc_get_item_update_progress steam_ugc_subscribe_item steam_ugc_unsubscribe_item steam_ugc_num_subscribed_items steam_ugc_get_subscribed_items steam_ugc_get_item_install_info steam_ugc_get_item_update_info steam_ugc_request_item_details steam_ugc_create_query_user steam_ugc_create_query_user_ex steam_ugc_create_query_all steam_ugc_create_query_all_ex steam_ugc_query_set_cloud_filename_filter steam_ugc_query_set_match_any_tag steam_ugc_query_set_search_text steam_ugc_query_set_ranked_by_trend_days steam_ugc_query_add_required_tag steam_ugc_query_add_excluded_tag steam_ugc_query_set_return_long_description steam_ugc_query_set_return_total_only steam_ugc_query_set_allow_cached_response steam_ugc_send_query shader_set shader_get_name shader_reset shader_current shader_is_compiled shader_get_sampler_index shader_get_uniform shader_set_uniform_i shader_set_uniform_i_array shader_set_uniform_f shader_set_uniform_f_array shader_set_uniform_matrix shader_set_uniform_matrix_array shader_enable_corner_id texture_set_stage texture_get_texel_width texture_get_texel_height shaders_are_supported vertex_format_begin vertex_format_end vertex_format_delete vertex_format_add_position vertex_format_add_position_3d vertex_format_add_colour vertex_format_add_color vertex_format_add_normal vertex_format_add_texcoord vertex_format_add_textcoord vertex_format_add_custom vertex_create_buffer vertex_create_buffer_ext vertex_delete_buffer vertex_begin vertex_end vertex_position vertex_position_3d vertex_colour vertex_color vertex_argb vertex_texcoord vertex_normal vertex_float1 vertex_float2 vertex_float3 vertex_float4 vertex_ubyte4 vertex_submit vertex_freeze vertex_get_number vertex_get_buffer_size vertex_create_buffer_from_buffer vertex_create_buffer_from_buffer_ext push_local_notification push_get_first_local_notification push_get_next_local_notification push_cancel_local_notification skeleton_animation_set skeleton_animation_get skeleton_animation_mix skeleton_animation_set_ext skeleton_animation_get_ext skeleton_animation_get_duration skeleton_animation_get_frames skeleton_animation_clear skeleton_skin_set skeleton_skin_get skeleton_attachment_set skeleton_attachment_get skeleton_attachment_create skeleton_collision_draw_set skeleton_bone_data_get skeleton_bone_data_set skeleton_bone_state_get skeleton_bone_state_set skeleton_get_minmax skeleton_get_num_bounds skeleton_get_bounds skeleton_animation_get_frame skeleton_animation_set_frame draw_skeleton draw_skeleton_time draw_skeleton_instance draw_skeleton_collision skeleton_animation_list skeleton_skin_list skeleton_slot_data layer_get_id layer_get_id_at_depth layer_get_depth layer_create layer_destroy layer_destroy_instances layer_add_instance layer_has_instance layer_set_visible layer_get_visible layer_exists layer_x layer_y layer_get_x layer_get_y layer_hspeed layer_vspeed layer_get_hspeed layer_get_vspeed layer_script_begin layer_script_end layer_shader layer_get_script_begin layer_get_script_end layer_get_shader layer_set_target_room layer_get_target_room layer_reset_target_room layer_get_all layer_get_all_elements layer_get_name layer_depth layer_get_element_layer layer_get_element_type layer_element_move layer_force_draw_depth layer_is_draw_depth_forced layer_get_forced_depth layer_background_get_id layer_background_exists layer_background_create layer_background_destroy layer_background_visible layer_background_change layer_background_sprite layer_background_htiled layer_background_vtiled layer_background_stretch layer_background_yscale layer_background_xscale layer_background_blend layer_background_alpha layer_background_index layer_background_speed layer_background_get_visible layer_background_get_sprite layer_background_get_htiled layer_background_get_vtiled layer_background_get_stretch layer_background_get_yscale layer_background_get_xscale layer_background_get_blend layer_background_get_alpha layer_background_get_index layer_background_get_speed layer_sprite_get_id layer_sprite_exists layer_sprite_create layer_sprite_destroy layer_sprite_change layer_sprite_index layer_sprite_speed layer_sprite_xscale layer_sprite_yscale layer_sprite_angle layer_sprite_blend layer_sprite_alpha layer_sprite_x layer_sprite_y layer_sprite_get_sprite layer_sprite_get_index layer_sprite_get_speed layer_sprite_get_xscale layer_sprite_get_yscale layer_sprite_get_angle layer_sprite_get_blend layer_sprite_get_alpha layer_sprite_get_x layer_sprite_get_y layer_tilemap_get_id layer_tilemap_exists layer_tilemap_create layer_tilemap_destroy tilemap_tileset tilemap_x tilemap_y tilemap_set tilemap_set_at_pixel tilemap_get_tileset tilemap_get_tile_width tilemap_get_tile_height tilemap_get_width tilemap_get_height tilemap_get_x tilemap_get_y tilemap_get tilemap_get_at_pixel tilemap_get_cell_x_at_pixel tilemap_get_cell_y_at_pixel tilemap_clear draw_tilemap draw_tile tilemap_set_global_mask tilemap_get_global_mask tilemap_set_mask tilemap_get_mask tilemap_get_frame tile_set_empty tile_set_index tile_set_flip tile_set_mirror tile_set_rotate tile_get_empty tile_get_index tile_get_flip tile_get_mirror tile_get_rotate layer_tile_exists layer_tile_create layer_tile_destroy layer_tile_change layer_tile_xscale layer_tile_yscale layer_tile_blend layer_tile_alpha layer_tile_x layer_tile_y layer_tile_region layer_tile_visible layer_tile_get_sprite layer_tile_get_xscale layer_tile_get_yscale layer_tile_get_blend layer_tile_get_alpha layer_tile_get_x layer_tile_get_y layer_tile_get_region layer_tile_get_visible layer_instance_get_instance instance_activate_layer instance_deactivate_layer camera_create camera_create_view camera_destroy camera_apply camera_get_active camera_get_default camera_set_default camera_set_view_mat camera_set_proj_mat camera_set_update_script camera_set_begin_script camera_set_end_script camera_set_view_pos camera_set_view_size camera_set_view_speed camera_set_view_border camera_set_view_angle camera_set_view_target camera_get_view_mat camera_get_proj_mat camera_get_update_script camera_get_begin_script camera_get_end_script camera_get_view_x camera_get_view_y camera_get_view_width camera_get_view_height camera_get_view_speed_x camera_get_view_speed_y camera_get_view_border_x camera_get_view_border_y camera_get_view_angle camera_get_view_target view_get_camera view_get_visible view_get_xport view_get_yport view_get_wport view_get_hport view_get_surface_id view_set_camera view_set_visible view_set_xport view_set_yport view_set_wport view_set_hport view_set_surface_id gesture_drag_time gesture_drag_distance gesture_flick_speed gesture_double_tap_time gesture_double_tap_distance gesture_pinch_distance gesture_pinch_angle_towards gesture_pinch_angle_away gesture_rotate_time gesture_rotate_angle gesture_tap_count gesture_get_drag_time gesture_get_drag_distance gesture_get_flick_speed gesture_get_double_tap_time gesture_get_double_tap_distance gesture_get_pinch_distance gesture_get_pinch_angle_towards gesture_get_pinch_angle_away gesture_get_rotate_time gesture_get_rotate_angle gesture_get_tap_count keyboard_virtual_show keyboard_virtual_hide keyboard_virtual_status keyboard_virtual_height",literal:"self other all noone global local undefined pointer_invalid pointer_null path_action_stop path_action_restart path_action_continue path_action_reverse true false pi GM_build_date GM_version GM_runtime_version timezone_local timezone_utc gamespeed_fps gamespeed_microseconds ev_create ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw ev_draw_begin ev_draw_end ev_draw_pre ev_draw_post ev_keypress ev_keyrelease ev_trigger ev_left_button ev_right_button ev_middle_button ev_no_button ev_left_press ev_right_press ev_middle_press ev_left_release ev_right_release ev_middle_release ev_mouse_enter ev_mouse_leave ev_mouse_wheel_up ev_mouse_wheel_down ev_global_left_button ev_global_right_button ev_global_middle_button ev_global_left_press ev_global_right_press ev_global_middle_press ev_global_left_release ev_global_right_release ev_global_middle_release ev_joystick1_left ev_joystick1_right ev_joystick1_up ev_joystick1_down ev_joystick1_button1 ev_joystick1_button2 ev_joystick1_button3 ev_joystick1_button4 ev_joystick1_button5 ev_joystick1_button6 ev_joystick1_button7 ev_joystick1_button8 ev_joystick2_left ev_joystick2_right ev_joystick2_up ev_joystick2_down ev_joystick2_button1 ev_joystick2_button2 ev_joystick2_button3 ev_joystick2_button4 ev_joystick2_button5 ev_joystick2_button6 ev_joystick2_button7 ev_joystick2_button8 ev_outside ev_boundary ev_game_start ev_game_end ev_room_start ev_room_end ev_no_more_lives ev_animation_end ev_end_of_path ev_no_more_health ev_close_button ev_user0 ev_user1 ev_user2 ev_user3 ev_user4 ev_user5 ev_user6 ev_user7 ev_user8 ev_user9 ev_user10 ev_user11 ev_user12 ev_user13 ev_user14 ev_user15 ev_step_normal ev_step_begin ev_step_end ev_gui ev_gui_begin ev_gui_end ev_cleanup ev_gesture ev_gesture_tap ev_gesture_double_tap ev_gesture_drag_start ev_gesture_dragging ev_gesture_drag_end ev_gesture_flick ev_gesture_pinch_start ev_gesture_pinch_in ev_gesture_pinch_out ev_gesture_pinch_end ev_gesture_rotate_start ev_gesture_rotating ev_gesture_rotate_end ev_global_gesture_tap ev_global_gesture_double_tap ev_global_gesture_drag_start ev_global_gesture_dragging ev_global_gesture_drag_end ev_global_gesture_flick ev_global_gesture_pinch_start ev_global_gesture_pinch_in ev_global_gesture_pinch_out ev_global_gesture_pinch_end ev_global_gesture_rotate_start ev_global_gesture_rotating ev_global_gesture_rotate_end vk_nokey vk_anykey vk_enter vk_return vk_shift vk_control vk_alt vk_escape vk_space vk_backspace vk_tab vk_pause vk_printscreen vk_left vk_right vk_up vk_down vk_home vk_end vk_delete vk_insert vk_pageup vk_pagedown vk_f1 vk_f2 vk_f3 vk_f4 vk_f5 vk_f6 vk_f7 vk_f8 vk_f9 vk_f10 vk_f11 vk_f12 vk_numpad0 vk_numpad1 vk_numpad2 vk_numpad3 vk_numpad4 vk_numpad5 vk_numpad6 vk_numpad7 vk_numpad8 vk_numpad9 vk_divide vk_multiply vk_subtract vk_add vk_decimal vk_lshift vk_lcontrol vk_lalt vk_rshift vk_rcontrol vk_ralt mb_any mb_none mb_left mb_right mb_middle c_aqua c_black c_blue c_dkgray c_fuchsia c_gray c_green c_lime c_ltgray c_maroon c_navy c_olive c_purple c_red c_silver c_teal c_white c_yellow c_orange fa_left fa_center fa_right fa_top fa_middle fa_bottom pr_pointlist pr_linelist pr_linestrip pr_trianglelist pr_trianglestrip pr_trianglefan bm_complex bm_normal bm_add bm_max bm_subtract bm_zero bm_one bm_src_colour bm_inv_src_colour bm_src_color bm_inv_src_color bm_src_alpha bm_inv_src_alpha bm_dest_alpha bm_inv_dest_alpha bm_dest_colour bm_inv_dest_colour bm_dest_color bm_inv_dest_color bm_src_alpha_sat tf_point tf_linear tf_anisotropic mip_off mip_on mip_markedonly audio_falloff_none audio_falloff_inverse_distance audio_falloff_inverse_distance_clamped audio_falloff_linear_distance audio_falloff_linear_distance_clamped audio_falloff_exponent_distance audio_falloff_exponent_distance_clamped audio_old_system audio_new_system audio_mono audio_stereo audio_3d cr_default cr_none cr_arrow cr_cross cr_beam cr_size_nesw cr_size_ns cr_size_nwse cr_size_we cr_uparrow cr_hourglass cr_drag cr_appstart cr_handpoint cr_size_all spritespeed_framespersecond spritespeed_framespergameframe asset_object asset_unknown asset_sprite asset_sound asset_room asset_path asset_script asset_font asset_timeline asset_tiles asset_shader fa_readonly fa_hidden fa_sysfile fa_volumeid fa_directory fa_archive ds_type_map ds_type_list ds_type_stack ds_type_queue ds_type_grid ds_type_priority ef_explosion ef_ring ef_ellipse ef_firework ef_smoke ef_smokeup ef_star ef_spark ef_flare ef_cloud ef_rain ef_snow pt_shape_pixel pt_shape_disk pt_shape_square pt_shape_line pt_shape_star pt_shape_circle pt_shape_ring pt_shape_sphere pt_shape_flare pt_shape_spark pt_shape_explosion pt_shape_cloud pt_shape_smoke pt_shape_snow ps_distr_linear ps_distr_gaussian ps_distr_invgaussian ps_shape_rectangle ps_shape_ellipse ps_shape_diamond ps_shape_line ty_real ty_string dll_cdecl dll_stdcall matrix_view matrix_projection matrix_world os_win32 os_windows os_macosx os_ios os_android os_symbian os_linux os_unknown os_winphone os_tizen os_win8native os_wiiu os_3ds os_psvita os_bb10 os_ps4 os_xboxone os_ps3 os_xbox360 os_uwp os_tvos os_switch browser_not_a_browser browser_unknown browser_ie browser_firefox browser_chrome browser_safari browser_safari_mobile browser_opera browser_tizen browser_edge browser_windows_store browser_ie_mobile device_ios_unknown device_ios_iphone device_ios_iphone_retina device_ios_ipad device_ios_ipad_retina device_ios_iphone5 device_ios_iphone6 device_ios_iphone6plus device_emulator device_tablet display_landscape display_landscape_flipped display_portrait display_portrait_flipped tm_sleep tm_countvsyncs of_challenge_win of_challen ge_lose of_challenge_tie leaderboard_type_number leaderboard_type_time_mins_secs cmpfunc_never cmpfunc_less cmpfunc_equal cmpfunc_lessequal cmpfunc_greater cmpfunc_notequal cmpfunc_greaterequal cmpfunc_always cull_noculling cull_clockwise cull_counterclockwise lighttype_dir lighttype_point iap_ev_storeload iap_ev_product iap_ev_purchase iap_ev_consume iap_ev_restore iap_storeload_ok iap_storeload_failed iap_status_uninitialised iap_status_unavailable iap_status_loading iap_status_available iap_status_processing iap_status_restoring iap_failed iap_unavailable iap_available iap_purchased iap_canceled iap_refunded fb_login_default fb_login_fallback_to_webview fb_login_no_fallback_to_webview fb_login_forcing_webview fb_login_use_system_account fb_login_forcing_safari phy_joint_anchor_1_x phy_joint_anchor_1_y phy_joint_anchor_2_x phy_joint_anchor_2_y phy_joint_reaction_force_x phy_joint_reaction_force_y phy_joint_reaction_torque phy_joint_motor_speed phy_joint_angle phy_joint_motor_torque phy_joint_max_motor_torque phy_joint_translation phy_joint_speed phy_joint_motor_force phy_joint_max_motor_force phy_joint_length_1 phy_joint_length_2 phy_joint_damping_ratio phy_joint_frequency phy_joint_lower_angle_limit phy_joint_upper_angle_limit phy_joint_angle_limits phy_joint_max_length phy_joint_max_torque phy_joint_max_force phy_debug_render_aabb phy_debug_render_collision_pairs phy_debug_render_coms phy_debug_render_core_shapes phy_debug_render_joints phy_debug_render_obb phy_debug_render_shapes phy_particle_flag_water phy_particle_flag_zombie phy_particle_flag_wall phy_particle_flag_spring phy_particle_flag_elastic phy_particle_flag_viscous phy_particle_flag_powder phy_particle_flag_tensile phy_particle_flag_colourmixing phy_particle_flag_colormixing phy_particle_group_flag_solid phy_particle_group_flag_rigid phy_particle_data_flag_typeflags phy_particle_data_flag_position phy_particle_data_flag_velocity phy_particle_data_flag_colour phy_particle_data_flag_color phy_particle_data_flag_category achievement_our_info achievement_friends_info achievement_leaderboard_info achievement_achievement_info achievement_filter_all_players achievement_filter_friends_only achievement_filter_favorites_only achievement_type_achievement_challenge achievement_type_score_challenge achievement_pic_loaded achievement_show_ui achievement_show_profile achievement_show_leaderboard achievement_show_achievement achievement_show_bank achievement_show_friend_picker achievement_show_purchase_prompt network_socket_tcp network_socket_udp network_socket_bluetooth network_type_connect network_type_disconnect network_type_data network_type_non_blocking_connect network_config_connect_timeout network_config_use_non_blocking_socket network_config_enable_reliable_udp network_config_disable_reliable_udp buffer_fixed buffer_grow buffer_wrap buffer_fast buffer_vbuffer buffer_network buffer_u8 buffer_s8 buffer_u16 buffer_s16 buffer_u32 buffer_s32 buffer_u64 buffer_f16 buffer_f32 buffer_f64 buffer_bool buffer_text buffer_string buffer_surface_copy buffer_seek_start buffer_seek_relative buffer_seek_end buffer_generalerror buffer_outofspace buffer_outofbounds buffer_invalidtype text_type button_type input_type ANSI_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET RUSSIAN_CHARSET SYMBOL_CHARSET SHIFTJIS_CHARSET HANGEUL_CHARSET GB2312_CHARSET CHINESEBIG5_CHARSET JOHAB_CHARSET HEBREW_CHARSET ARABIC_CHARSET GREEK_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET THAI_CHARSET MAC_CHARSET BALTIC_CHARSET OEM_CHARSET gp_face1 gp_face2 gp_face3 gp_face4 gp_shoulderl gp_shoulderr gp_shoulderlb gp_shoulderrb gp_select gp_start gp_stickl gp_stickr gp_padu gp_padd gp_padl gp_padr gp_axislh gp_axislv gp_axisrh gp_axisrv ov_friends ov_community ov_players ov_settings ov_gamegroup ov_achievements lb_sort_none lb_sort_ascending lb_sort_descending lb_disp_none lb_disp_numeric lb_disp_time_sec lb_disp_time_ms ugc_result_success ugc_filetype_community ugc_filetype_microtrans ugc_visibility_public ugc_visibility_friends_only ugc_visibility_private ugc_query_RankedByVote ugc_query_RankedByPublicationDate ugc_query_AcceptedForGameRankedByAcceptanceDate ugc_query_RankedByTrend ugc_query_FavoritedByFriendsRankedByPublicationDate ugc_query_CreatedByFriendsRankedByPublicationDate ugc_query_RankedByNumTimesReported ugc_query_CreatedByFollowedUsersRankedByPublicationDate ugc_query_NotYetRated ugc_query_RankedByTotalVotesAsc ugc_query_RankedByVotesUp ugc_query_RankedByTextSearch ugc_sortorder_CreationOrderDesc ugc_sortorder_CreationOrderAsc ugc_sortorder_TitleAsc ugc_sortorder_LastUpdatedDesc ugc_sortorder_SubscriptionDateDesc ugc_sortorder_VoteScoreDesc ugc_sortorder_ForModeration ugc_list_Published ugc_list_VotedOn ugc_list_VotedUp ugc_list_VotedDown ugc_list_WillVoteLater ugc_list_Favorited ugc_list_Subscribed ugc_list_UsedOrPlayed ugc_list_Followed ugc_match_Items ugc_match_Items_Mtx ugc_match_Items_ReadyToUse ugc_match_Collections ugc_match_Artwork ugc_match_Videos ugc_match_Screenshots ugc_match_AllGuides ugc_match_WebGuides ugc_match_IntegratedGuides ugc_match_UsableInGame ugc_match_ControllerBindings vertex_usage_position vertex_usage_colour vertex_usage_color vertex_usage_normal vertex_usage_texcoord vertex_usage_textcoord vertex_usage_blendweight vertex_usage_blendindices vertex_usage_psize vertex_usage_tangent vertex_usage_binormal vertex_usage_fog vertex_usage_depth vertex_usage_sample vertex_type_float1 vertex_type_float2 vertex_type_float3 vertex_type_float4 vertex_type_colour vertex_type_color vertex_type_ubyte4 layerelementtype_undefined layerelementtype_background layerelementtype_instance layerelementtype_oldtilemap layerelementtype_sprite layerelementtype_tilemap layerelementtype_particlesystem layerelementtype_tile tile_rotate tile_flip tile_mirror tile_index_mask kbv_type_default kbv_type_ascii kbv_type_url kbv_type_email kbv_type_numbers kbv_type_phone kbv_type_phone_name kbv_returnkey_default kbv_returnkey_go kbv_returnkey_google kbv_returnkey_join kbv_returnkey_next kbv_returnkey_route kbv_returnkey_search kbv_returnkey_send kbv_returnkey_yahoo kbv_returnkey_done kbv_returnkey_continue kbv_returnkey_emergency kbv_autocapitalize_none kbv_autocapitalize_words kbv_autocapitalize_sentences kbv_autocapitalize_characters",symbol:"argument_relative argument argument0 argument1 argument2 argument3 argument4 argument5 argument6 argument7 argument8 argument9 argument10 argument11 argument12 argument13 argument14 argument15 argument_count x|0 y|0 xprevious yprevious xstart ystart hspeed vspeed direction speed friction gravity gravity_direction path_index path_position path_positionprevious path_speed path_scale path_orientation path_endaction object_index id solid persistent mask_index instance_count instance_id room_speed fps fps_real current_time current_year current_month current_day current_weekday current_hour current_minute current_second alarm timeline_index timeline_position timeline_speed timeline_running timeline_loop room room_first room_last room_width room_height room_caption room_persistent score lives health show_score show_lives show_health caption_score caption_lives caption_health event_type event_number event_object event_action application_surface gamemaker_pro gamemaker_registered gamemaker_version error_occurred error_last debug_mode keyboard_key keyboard_lastkey keyboard_lastchar keyboard_string mouse_x mouse_y mouse_button mouse_lastbutton cursor_sprite visible sprite_index sprite_width sprite_height sprite_xoffset sprite_yoffset image_number image_index image_speed depth image_xscale image_yscale image_angle image_alpha image_blend bbox_left bbox_right bbox_top bbox_bottom layer background_colour background_showcolour background_color background_showcolor view_enabled view_current view_visible view_xview view_yview view_wview view_hview view_xport view_yport view_wport view_hport view_angle view_hborder view_vborder view_hspeed view_vspeed view_object view_surface_id view_camera game_id game_display_name game_project_name game_save_id working_directory temp_directory program_directory browser_width browser_height os_type os_device os_browser os_version display_aa async_load delta_time webgl_enabled event_data iap_data phy_rotation phy_position_x phy_position_y phy_angular_velocity phy_linear_velocity_x phy_linear_velocity_y phy_speed_x phy_speed_y phy_speed phy_angular_damping phy_linear_damping phy_bullet phy_fixed_rotation phy_active phy_mass phy_inertia phy_com_x phy_com_y phy_dynamic phy_kinematic phy_sleeping phy_collision_points phy_collision_x phy_collision_y phy_col_normal_x phy_col_normal_y phy_position_xprevious phy_position_yprevious"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE]}}oA2.exports=E19});var IV2=Y((xH3,tA2)=>{function M19(I){let d={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:d,illegal:"{function S19(I){return{name:"Golo",keywords:{keyword:"println readln print import module function local return let var while for foreach times in case when match with break continue augment augmentation each find filter reduce if then else otherwise try catch finally raise throw orIfNull DynamicObject|10 DynamicVariable struct Observable map set vector list array",literal:"true false null"},contains:[I.HASH_COMMENT_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}dV2.exports=S19});var CV2=Y((pH3,ZV2)=>{function L19(I){return{name:"Gradle",case_insensitive:!0,keywords:{keyword:"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.NUMBER_MODE,I.REGEXP_MODE]}}ZV2.exports=L19});var wV2=Y((iH3,WV2)=>{function y19(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function P19(I){return $19("(?=",I,")")}function $19(...I){return I.map((G)=>y19(G)).join("")}function pF1(I,d={}){return d.variants=I,d}function u19(I){let G=pF1([I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]})]),Z={className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[I.BACKSLASH_ESCAPE]},C=pF1([I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE]),W=pF1([{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:"\\$/",end:"/\\$",relevance:10},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE],{className:"string"});return{name:"Groovy",keywords:{built_in:"this super",literal:"true false null",keyword:"byte short char int long boolean float double void def as in assert trait abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},contains:[I.SHEBANG({binary:"groovy",relevance:10}),G,W,Z,C,{className:"class",beginKeywords:"class interface trait enum",end:/\{/,illegal:":",contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]},{className:"meta",begin:"@[A-Za-z]+",relevance:0},{className:"attr",begin:"[A-Za-z0-9_$]+[ \t]*:",relevance:0},{begin:/\?/,end:/:/,relevance:0,contains:[G,W,Z,C,"self"]},{className:"symbol",begin:"^[ \t]*"+P19("[A-Za-z0-9_$]+:"),excludeBegin:!0,end:"[A-Za-z0-9_$]+:",relevance:0}],illegal:/#|<\//}}WV2.exports=u19});var AV2=Y((nH3,BV2)=>{function T19(I){return{name:"HAML",case_insensitive:!0,contains:[{className:"meta",begin:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",relevance:10},I.COMMENT("^\\s*(!=#|=#|-#|/).*$",!1,{relevance:0}),{begin:"^\\s*(-|=|!=)(?!#)",starts:{end:"\\n",subLanguage:"ruby"}},{className:"tag",begin:"^\\s*%",contains:[{className:"selector-tag",begin:"\\w+"},{className:"selector-id",begin:"#[\\w-]+"},{className:"selector-class",begin:"\\.[\\w-]+"},{begin:/\{\s*/,end:/\s*\}/,contains:[{begin:":\\w+\\s*=>",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:":\\w+"},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:"\\w+",relevance:0},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{begin:"^\\s*[=~]\\s*"},{begin:/#\{/,starts:{end:/\}/,subLanguage:"ruby"}}]}}BV2.exports=T19});var YV2=Y((rH3,XV2)=>{function VV2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function O19(I){return R$("(",I,")*")}function m19(I){return R$("(",I,")?")}function R$(...I){return I.map((G)=>VV2(G)).join("")}function l19(...I){return"("+I.map((G)=>VV2(G)).join("|")+")"}function b19(I){let d={"builtin-name":["action","bindattr","collection","component","concat","debugger","each","each-in","get","hash","if","in","input","link-to","loc","log","lookup","mut","outlet","partial","query-params","render","template","textarea","unbound","unless","view","with","yield"]},G={literal:["true","false","undefined","null"]},Z=/""|"[^"]+"/,C=/''|'[^']+'/,W=/\[\]|\[[^\]]+\]/,w=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,B=/(\.|\/)/,A=l19(Z,C,W,w),V=R$(m19(/\.|\.\/|\//),A,O19(R$(B,A))),X=R$("(",W,"|",w,")(?==)"),_={begin:V,lexemes:/[\w.\/]+/},F=I.inherit(_,{keywords:G}),g={begin:/\(/,end:/\)/},J={className:"attr",begin:X,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[I.NUMBER_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,F,g]}}},K={begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},Q={contains:[I.NUMBER_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,K,J,F,g],returnEnd:!0},E=I.inherit(_,{className:"name",keywords:d,starts:I.inherit(Q,{end:/\)/})});g.contains=[E];let S=I.inherit(_,{keywords:d,className:"name",starts:I.inherit(Q,{end:/\}\}/})}),P=I.inherit(_,{keywords:d,className:"name"}),$=I.inherit(_,{className:"name",keywords:d,starts:I.inherit(Q,{end:/\}\}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},I.COMMENT(/\{\{!--/,/--\}\}/),I.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[S],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[P]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[S]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{(?=else if)/,end:/\}\}/,keywords:"else if"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[P]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[$]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[$]}]}}XV2.exports=b19});var DV2=Y((aH3,_V2)=>{function h19(I){let d={variants:[I.COMMENT("--","$"),I.COMMENT(/\{-/,/-\}/,{contains:["self"]})]},G={className:"meta",begin:/\{-#/,end:/#-\}/},Z={className:"meta",begin:"^#",end:"$"},C={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},W={begin:"\\(",end:"\\)",illegal:'"',contains:[G,Z,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},I.inherit(I.TITLE_MODE,{begin:"[_a-z][\\w']*"}),d]},w={begin:/\{/,end:/\}/,contains:W.contains};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[W,d],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[W,d],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[C,W,d]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[G,C,W,w,d]},{beginKeywords:"default",end:"$",contains:[C,W,d]},{beginKeywords:"infix infixl infixr",end:"$",contains:[I.C_NUMBER_MODE,d]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[C,I.QUOTE_STRING_MODE,d]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},G,Z,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,C,I.inherit(I.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),d,{begin:"->|<-"}]}}_V2.exports=h19});var FV2=Y((sH3,HV2)=>{function j19(I){return{name:"Haxe",aliases:["hx"],keywords:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while Int Float String Bool Dynamic Void Array ",built_in:"trace this",literal:"true false null _"},contains:[{className:"string",begin:"'",end:"'",contains:[I.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"},{className:"subst",begin:"\\$",end:/\W\}/}]},I.QUOTE_STRING_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.C_NUMBER_MODE,{className:"meta",begin:"@:",end:"$"},{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end error"}},{className:"type",begin:":[ \t]*",end:"[^A-Za-z0-9_ \t\\->]",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:":[ \t]*",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"new *",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"class",beginKeywords:"enum",end:"\\{",contains:[I.TITLE_MODE]},{className:"class",beginKeywords:"abstract",end:"[\\{$]",contains:[{className:"type",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"from +",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"to +",end:"\\W",excludeBegin:!0,excludeEnd:!0},I.TITLE_MODE],keywords:{keyword:"abstract from to"}},{className:"class",begin:"\\b(class|interface) +",end:"[\\{$]",excludeEnd:!0,keywords:"class interface",contains:[{className:"keyword",begin:"\\b(extends|implements) +",keywords:"extends implements",contains:[{className:"type",begin:I.IDENT_RE,relevance:0}]},I.TITLE_MODE]},{className:"function",beginKeywords:"function",end:"\\(",excludeEnd:!0,illegal:"\\S",contains:[I.TITLE_MODE]}],illegal:/<\//}}HV2.exports=j19});var JV2=Y((oH3,gV2)=>{function k19(I){return{name:"HSP",case_insensitive:!0,keywords:{$pattern:/[\w._]+/,keyword:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,{className:"string",begin:/\{"/,end:/"\}/,contains:[I.BACKSLASH_ESCAPE]},I.COMMENT(";","$",{relevance:0}),{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},contains:[I.inherit(I.QUOTE_STRING_MODE,{className:"meta-string"}),I.NUMBER_MODE,I.C_NUMBER_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},{className:"symbol",begin:"^\\*(\\w+|@)"},I.NUMBER_MODE,I.C_NUMBER_MODE]}}gV2.exports=k19});var zV2=Y((eH3,NV2)=>{function KV2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function x19(I){return U$("(",I,")*")}function c19(I){return U$("(",I,")?")}function U$(...I){return I.map((G)=>KV2(G)).join("")}function p19(...I){return"("+I.map((G)=>KV2(G)).join("|")+")"}function i19(I){let d={"builtin-name":["action","bindattr","collection","component","concat","debugger","each","each-in","get","hash","if","in","input","link-to","loc","log","lookup","mut","outlet","partial","query-params","render","template","textarea","unbound","unless","view","with","yield"]},G={literal:["true","false","undefined","null"]},Z=/""|"[^"]+"/,C=/''|'[^']+'/,W=/\[\]|\[[^\]]+\]/,w=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,B=/(\.|\/)/,A=p19(Z,C,W,w),V=U$(c19(/\.|\.\/|\//),A,x19(U$(B,A))),X=U$("(",W,"|",w,")(?==)"),_={begin:V,lexemes:/[\w.\/]+/},F=I.inherit(_,{keywords:G}),g={begin:/\(/,end:/\)/},J={className:"attr",begin:X,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[I.NUMBER_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,F,g]}}},K={begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},Q={contains:[I.NUMBER_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,K,J,F,g],returnEnd:!0},E=I.inherit(_,{className:"name",keywords:d,starts:I.inherit(Q,{end:/\)/})});g.contains=[E];let S=I.inherit(_,{keywords:d,className:"name",starts:I.inherit(Q,{end:/\}\}/})}),P=I.inherit(_,{keywords:d,className:"name"}),$=I.inherit(_,{className:"name",keywords:d,starts:I.inherit(Q,{end:/\}\}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},I.COMMENT(/\{\{!--/,/--\}\}/),I.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[S],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[P]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[S]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{(?=else if)/,end:/\}\}/,keywords:"else if"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[P]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[$]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[$]}]}}function n19(I){let d=i19(I);if(d.name="HTMLbars",I.getLanguage("handlebars"))d.disableAutodetect=!0;return d}NV2.exports=n19});var fV2=Y((tH3,QV2)=>{function r19(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function a19(...I){return I.map((G)=>r19(G)).join("")}function s19(I){let Z={className:"attribute",begin:a19("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},C=[Z,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?=HTTP/(2|1\\.[01]) \\d{3})",end:/$/,contains:[{className:"meta",begin:"HTTP/(2|1\\.[01])"},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:C}},{begin:"(?=^[A-Z]+ (.*?) HTTP/(2|1\\.[01])$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:"HTTP/(2|1\\.[01])"},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:C}},I.inherit(Z,{relevance:0})]}}QV2.exports=s19});var RV2=Y((IF3,qV2)=>{function o19(I){var d="a-zA-Z_\\-!.?+*=<>&#'",G="["+d+"]["+d+"0-9/;:]*",Z={$pattern:G,"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},C="[-+]?\\d+(\\.\\d+)?",W={begin:G,relevance:0},w={className:"number",begin:C,relevance:0},B=I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),A=I.COMMENT(";","$",{relevance:0}),V={className:"literal",begin:/\b([Tt]rue|[Ff]alse|nil|None)\b/},X={begin:"[\\[\\{]",end:"[\\]\\}]"},_={className:"comment",begin:"\\^"+G},F=I.COMMENT("\\^\\{","\\}"),g={className:"symbol",begin:"[:]{1,2}"+G},J={begin:"\\(",end:"\\)"},K={endsWithParent:!0,relevance:0},Q={className:"name",relevance:0,keywords:Z,begin:G,starts:K},E=[J,B,_,F,A,g,X,w,V,W];return J.contains=[I.COMMENT("comment",""),Q,K],K.contains=E,X.contains=E,{name:"Hy",aliases:["hylang"],illegal:/\S/,contains:[I.SHEBANG(),J,B,_,F,A,g,X,w,V]}}qV2.exports=o19});var vV2=Y((dF3,UV2)=>{function e19(I){return{name:"Inform 7",aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:"\\[",end:"\\]"}]},{className:"section",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\(This",end:"\\)"}]},{className:"comment",begin:"\\[",end:"\\]",contains:["self"]}]}}UV2.exports=e19});var LV2=Y((GF3,SV2)=>{function EV2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function t19(I){return MV2("(?=",I,")")}function MV2(...I){return I.map((G)=>EV2(G)).join("")}function I09(...I){return"("+I.map((G)=>EV2(G)).join("|")+")"}function d09(I){let d={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:I.NUMBER_RE}]},G=I.COMMENT();G.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];let Z={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},C={className:"literal",begin:/\bon|off|true|false|yes|no\b/},W={className:"string",contains:[I.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},w={begin:/\[/,end:/\]/,contains:[G,C,Z,W,d,"self"],relevance:0},X=I09(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/),_=MV2(X,"(\\s*\\.\\s*",X,")*",t19(/\s*=\s*[^#\s]/));return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[G,{className:"section",begin:/\[+/,end:/\]+/},{begin:_,className:"attr",starts:{end:/$/,contains:[G,w,C,Z,W,d]}}]}}SV2.exports=d09});var PV2=Y((ZF3,yV2)=>{function G09(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function iF1(...I){return I.map((G)=>G09(G)).join("")}function Z09(I){let d={className:"params",begin:"\\(",end:"\\)"},G=/(_[a-z_\d]+)?/,Z=/([de][+-]?\d+)?/,C={className:"number",variants:[{begin:iF1(/\b\d+/,/\.(\d*)/,Z,G)},{begin:iF1(/\b\d+/,Z,G)},{begin:iF1(/\.\d+/,Z,G)}],relevance:0};return{name:"IRPF90",case_insensitive:!0,keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"},illegal:/\/\*/,contains:[I.inherit(I.APOS_STRING_MODE,{className:"string",relevance:0}),I.inherit(I.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[I.UNDERSCORE_TITLE_MODE,d]},I.COMMENT("!","$",{relevance:0}),I.COMMENT("begin_doc","end_doc",{relevance:10}),C]}}yV2.exports=Z09});var uV2=Y((CF3,$V2)=>{function C09(I){let Z="and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока "+"except exitfor finally foreach все if если in в not не or или try while пока ",C="SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT SYSRES_CONST_ACCES_RIGHT_TYPE_FULL SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE SYSRES_CONST_ACCESS_NO_ACCESS_VIEW SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_TYPE_CHANGE SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE SYSRES_CONST_ACCESS_TYPE_EXISTS SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE SYSRES_CONST_ACCESS_TYPE_FULL SYSRES_CONST_ACCESS_TYPE_FULL_CODE SYSRES_CONST_ACCESS_TYPE_VIEW SYSRES_CONST_ACCESS_TYPE_VIEW_CODE SYSRES_CONST_ACTION_TYPE_ABORT SYSRES_CONST_ACTION_TYPE_ACCEPT SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT SYSRES_CONST_ACTION_TYPE_CHANGE_CARD SYSRES_CONST_ACTION_TYPE_CHANGE_KIND SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE SYSRES_CONST_ACTION_TYPE_CONTINUE SYSRES_CONST_ACTION_TYPE_COPY SYSRES_CONST_ACTION_TYPE_CREATE SYSRES_CONST_ACTION_TYPE_CREATE_VERSION SYSRES_CONST_ACTION_TYPE_DELETE SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT SYSRES_CONST_ACTION_TYPE_DELETE_VERSION SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE SYSRES_CONST_ACTION_TYPE_LOCK SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY SYSRES_CONST_ACTION_TYPE_MARK_AS_READED SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED SYSRES_CONST_ACTION_TYPE_MODIFY SYSRES_CONST_ACTION_TYPE_MODIFY_CARD SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE SYSRES_CONST_ACTION_TYPE_PERFORM SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY SYSRES_CONST_ACTION_TYPE_RESTART SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE SYSRES_CONST_ACTION_TYPE_REVISION SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL SYSRES_CONST_ACTION_TYPE_SIGN SYSRES_CONST_ACTION_TYPE_START SYSRES_CONST_ACTION_TYPE_UNLOCK SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER SYSRES_CONST_ACTION_TYPE_VERSION_STATE SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY SYSRES_CONST_ACTION_TYPE_VIEW SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE SYSRES_CONST_ADD_REFERENCE_MODE_NAME SYSRES_CONST_ADDITION_REQUISITE_CODE SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS SYSRES_CONST_ALL_USERS_GROUP SYSRES_CONST_ALL_USERS_GROUP_NAME SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE SYSRES_CONST_APPROVING_SIGNATURE_NAME SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN SYSRES_CONST_ATTACH_TYPE_DOC SYSRES_CONST_ATTACH_TYPE_EDOC SYSRES_CONST_ATTACH_TYPE_FOLDER SYSRES_CONST_ATTACH_TYPE_JOB SYSRES_CONST_ATTACH_TYPE_REFERENCE SYSRES_CONST_ATTACH_TYPE_TASK SYSRES_CONST_AUTH_ENCODED_PASSWORD SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE SYSRES_CONST_AUTH_NOVELL SYSRES_CONST_AUTH_PASSWORD SYSRES_CONST_AUTH_PASSWORD_CODE SYSRES_CONST_AUTH_WINDOWS SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_AUTO_ENUM_METHOD_FLAG SYSRES_CONST_AUTO_NUMERATION_CODE SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_USAGE_ALL SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE SYSRES_CONST_AUTOTEXT_USAGE_SIGN SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE SYSRES_CONST_AUTOTEXT_USAGE_WORK SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BTN_PART SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT SYSRES_CONST_CARD_PART SYSRES_CONST_CARD_REFERENCE_MODE_NAME SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT SYSRES_CONST_CODE_COMPONENT_TYPE_URL SYSRES_CONST_CODE_REQUISITE_ACCESS SYSRES_CONST_CODE_REQUISITE_CODE SYSRES_CONST_CODE_REQUISITE_COMPONENT SYSRES_CONST_CODE_REQUISITE_DESCRIPTION SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT SYSRES_CONST_CODE_REQUISITE_RECORD SYSRES_CONST_COMMENT_REQ_CODE SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE SYSRES_CONST_COMP_CODE_GRD SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DOCS SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_COMPONENT_TYPE_EDOCS SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_COMPONENT_TYPE_OTHER SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES SYSRES_CONST_COMPONENT_TYPE_REFERENCES SYSRES_CONST_COMPONENT_TYPE_REPORTS SYSRES_CONST_COMPONENT_TYPE_SCRIPTS SYSRES_CONST_COMPONENT_TYPE_URL SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION SYSRES_CONST_CONST_FIRM_STATUS_COMMON SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL SYSRES_CONST_CONST_NEGATIVE_VALUE SYSRES_CONST_CONST_POSITIVE_VALUE SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE SYSRES_CONST_CONTENTS_REQUISITE_CODE SYSRES_CONST_DATA_TYPE_BOOLEAN SYSRES_CONST_DATA_TYPE_DATE SYSRES_CONST_DATA_TYPE_FLOAT SYSRES_CONST_DATA_TYPE_INTEGER SYSRES_CONST_DATA_TYPE_PICK SYSRES_CONST_DATA_TYPE_REFERENCE SYSRES_CONST_DATA_TYPE_STRING SYSRES_CONST_DATA_TYPE_TEXT SYSRES_CONST_DATA_TYPE_VARIANT SYSRES_CONST_DATE_CLOSE_REQ_CODE SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR SYSRES_CONST_DATE_OPEN_REQ_CODE SYSRES_CONST_DATE_REQUISITE SYSRES_CONST_DATE_REQUISITE_CODE SYSRES_CONST_DATE_REQUISITE_NAME SYSRES_CONST_DATE_REQUISITE_TYPE SYSRES_CONST_DATE_TYPE_CHAR SYSRES_CONST_DATETIME_FORMAT_VALUE SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_DET1_PART SYSRES_CONST_DET2_PART SYSRES_CONST_DET3_PART SYSRES_CONST_DET4_PART SYSRES_CONST_DET5_PART SYSRES_CONST_DET6_PART SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE SYSRES_CONST_DETAIL_REQ_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME SYSRES_CONST_DOCUMENT_STORAGES_CODE SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME SYSRES_CONST_DOUBLE_REQUISITE_CODE SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE SYSRES_CONST_EDITORS_REFERENCE_CODE SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE SYSRES_CONST_EDOC_DATE_REQUISITE_CODE SYSRES_CONST_EDOC_KIND_REFERENCE_CODE SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE SYSRES_CONST_EDOC_NONE_ENCODE_CODE SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_READONLY_ACCESS_CODE SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE SYSRES_CONST_EDOC_WRITE_ACCES_CODE SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_END_DATE_REQUISITE_CODE SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE SYSRES_CONST_EXIST_CONST SYSRES_CONST_EXIST_VALUE SYSRES_CONST_EXPORT_LOCK_TYPE_ASK SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK SYSRES_CONST_EXPORT_VERSION_TYPE_ASK SYSRES_CONST_EXPORT_VERSION_TYPE_LAST SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE SYSRES_CONST_EXTENSION_REQUISITE_CODE SYSRES_CONST_FILTER_NAME_REQUISITE_CODE SYSRES_CONST_FILTER_REQUISITE_CODE SYSRES_CONST_FILTER_TYPE_COMMON_CODE SYSRES_CONST_FILTER_TYPE_COMMON_NAME SYSRES_CONST_FILTER_TYPE_USER_CODE SYSRES_CONST_FILTER_TYPE_USER_NAME SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR SYSRES_CONST_FLOAT_REQUISITE_TYPE SYSRES_CONST_FOLDER_AUTHOR_VALUE SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS SYSRES_CONST_FOLDER_KIND_COMPONENTS SYSRES_CONST_FOLDER_KIND_EDOCS SYSRES_CONST_FOLDER_KIND_JOBS SYSRES_CONST_FOLDER_KIND_TASKS SYSRES_CONST_FOLDER_TYPE_COMMON SYSRES_CONST_FOLDER_TYPE_COMPONENT SYSRES_CONST_FOLDER_TYPE_FAVORITES SYSRES_CONST_FOLDER_TYPE_INBOX SYSRES_CONST_FOLDER_TYPE_OUTBOX SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH SYSRES_CONST_FOLDER_TYPE_SEARCH SYSRES_CONST_FOLDER_TYPE_SHORTCUTS SYSRES_CONST_FOLDER_TYPE_USER SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG SYSRES_CONST_FULL_SUBSTITUTE_TYPE SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE SYSRES_CONST_FUNCTION_CANCEL_RESULT SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM SYSRES_CONST_FUNCTION_CATEGORY_USER SYSRES_CONST_FUNCTION_FAILURE_RESULT SYSRES_CONST_FUNCTION_SAVE_RESULT SYSRES_CONST_GENERATED_REQUISITE SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_USER_REQUISITE_CODE SYSRES_CONST_GROUPS_REFERENCE_CODE SYSRES_CONST_GROUPS_REQUISITE_CODE SYSRES_CONST_HIDDEN_MODE_NAME SYSRES_CONST_HIGH_LVL_REQUISITE_CODE SYSRES_CONST_HISTORY_ACTION_CREATE_CODE SYSRES_CONST_HISTORY_ACTION_DELETE_CODE SYSRES_CONST_HISTORY_ACTION_EDIT_CODE SYSRES_CONST_HOUR_CHAR SYSRES_CONST_ID_REQUISITE_CODE SYSRES_CONST_IDSPS_REQUISITE_CODE SYSRES_CONST_IMAGE_MODE_COLOR SYSRES_CONST_IMAGE_MODE_GREYSCALE SYSRES_CONST_IMAGE_MODE_MONOCHROME SYSRES_CONST_IMPORTANCE_HIGH SYSRES_CONST_IMPORTANCE_LOW SYSRES_CONST_IMPORTANCE_NORMAL SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE SYSRES_CONST_INT_REQUISITE SYSRES_CONST_INT_REQUISITE_TYPE SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR SYSRES_CONST_INTEGER_TYPE_CHAR SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_JOB_BLOCK_DESCRIPTION SYSRES_CONST_JOB_KIND_CONTROL_JOB SYSRES_CONST_JOB_KIND_JOB SYSRES_CONST_JOB_KIND_NOTICE SYSRES_CONST_JOB_STATE_ABORTED SYSRES_CONST_JOB_STATE_COMPLETE SYSRES_CONST_JOB_STATE_WORKING SYSRES_CONST_KIND_REQUISITE_CODE SYSRES_CONST_KIND_REQUISITE_NAME SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE SYSRES_CONST_KOD_INPUT_TYPE SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT SYSRES_CONST_LINK_OBJECT_KIND_EDOC SYSRES_CONST_LINK_OBJECT_KIND_FOLDER SYSRES_CONST_LINK_OBJECT_KIND_JOB SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE SYSRES_CONST_LINK_OBJECT_KIND_TASK SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE SYSRES_CONST_LIST_REFERENCE_MODE_NAME SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE SYSRES_CONST_MAIN_VIEW_CODE SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE SYSRES_CONST_MAXIMIZED_MODE_NAME SYSRES_CONST_ME_VALUE SYSRES_CONST_MESSAGE_ATTENTION_CAPTION SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION SYSRES_CONST_MESSAGE_ERROR_CAPTION SYSRES_CONST_MESSAGE_INFORMATION_CAPTION SYSRES_CONST_MINIMIZED_MODE_NAME SYSRES_CONST_MINUTE_CHAR SYSRES_CONST_MODULE_REQUISITE_CODE SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION SYSRES_CONST_MONTH_FORMAT_VALUE SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_NAME_REQUISITE_CODE SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE SYSRES_CONST_NAMEAN_INPUT_TYPE SYSRES_CONST_NEGATIVE_PICK_VALUE SYSRES_CONST_NEGATIVE_VALUE SYSRES_CONST_NO SYSRES_CONST_NO_PICK_VALUE SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE SYSRES_CONST_NO_VALUE SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_NORMAL_MODE_NAME SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_NOTE_REQUISITE_CODE SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION SYSRES_CONST_NUM_REQUISITE SYSRES_CONST_NUM_STR_REQUISITE_CODE SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG SYSRES_CONST_NUMERATION_AUTO_STRONG SYSRES_CONST_NUMERATION_FROM_DICTONARY SYSRES_CONST_NUMERATION_MANUAL SYSRES_CONST_NUMERIC_TYPE_CHAR SYSRES_CONST_NUMREQ_REQUISITE_CODE SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_ORIGINALREF_REQUISITE_CODE SYSRES_CONST_OURFIRM_REF_CODE SYSRES_CONST_OURFIRM_REQUISITE_CODE SYSRES_CONST_OURFIRM_VAR SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE SYSRES_CONST_PICK_NEGATIVE_RESULT SYSRES_CONST_PICK_POSITIVE_RESULT SYSRES_CONST_PICK_REQUISITE SYSRES_CONST_PICK_REQUISITE_TYPE SYSRES_CONST_PICK_TYPE_CHAR SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE SYSRES_CONST_PLATFORM_VERSION_COMMENT SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_POSITIVE_PICK_VALUE SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE SYSRES_CONST_PRIORITY_REQUISITE_CODE SYSRES_CONST_QUALIFIED_TASK_TYPE SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE SYSRES_CONST_RECSTAT_REQUISITE_CODE SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_REF_REQUISITE SYSRES_CONST_REF_REQUISITE_TYPE SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE SYSRES_CONST_REFERENCE_TYPE_CHAR SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_MODE_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_EDIT_CODE SYSRES_CONST_REQ_MODE_HIDDEN_CODE SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_VIEW_CODE SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE SYSRES_CONST_REQ_SECTION_VALUE SYSRES_CONST_REQ_TYPE_VALUE SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME SYSRES_CONST_REQUISITE_FORMAT_LEFT SYSRES_CONST_REQUISITE_FORMAT_RIGHT SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_REQUISITE_SECTION_ACTIONS SYSRES_CONST_REQUISITE_SECTION_BUTTON SYSRES_CONST_REQUISITE_SECTION_BUTTONS SYSRES_CONST_REQUISITE_SECTION_CARD SYSRES_CONST_REQUISITE_SECTION_TABLE SYSRES_CONST_REQUISITE_SECTION_TABLE10 SYSRES_CONST_REQUISITE_SECTION_TABLE11 SYSRES_CONST_REQUISITE_SECTION_TABLE12 SYSRES_CONST_REQUISITE_SECTION_TABLE13 SYSRES_CONST_REQUISITE_SECTION_TABLE14 SYSRES_CONST_REQUISITE_SECTION_TABLE15 SYSRES_CONST_REQUISITE_SECTION_TABLE16 SYSRES_CONST_REQUISITE_SECTION_TABLE17 SYSRES_CONST_REQUISITE_SECTION_TABLE18 SYSRES_CONST_REQUISITE_SECTION_TABLE19 SYSRES_CONST_REQUISITE_SECTION_TABLE2 SYSRES_CONST_REQUISITE_SECTION_TABLE20 SYSRES_CONST_REQUISITE_SECTION_TABLE21 SYSRES_CONST_REQUISITE_SECTION_TABLE22 SYSRES_CONST_REQUISITE_SECTION_TABLE23 SYSRES_CONST_REQUISITE_SECTION_TABLE24 SYSRES_CONST_REQUISITE_SECTION_TABLE3 SYSRES_CONST_REQUISITE_SECTION_TABLE4 SYSRES_CONST_REQUISITE_SECTION_TABLE5 SYSRES_CONST_REQUISITE_SECTION_TABLE6 SYSRES_CONST_REQUISITE_SECTION_TABLE7 SYSRES_CONST_REQUISITE_SECTION_TABLE8 SYSRES_CONST_REQUISITE_SECTION_TABLE9 SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_RIGHT_ALIGNMENT_CODE SYSRES_CONST_ROLES_REFERENCE_CODE SYSRES_CONST_ROUTE_STEP_AFTER_RUS SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS SYSRES_CONST_ROUTE_TYPE_COMPLEX SYSRES_CONST_ROUTE_TYPE_PARALLEL SYSRES_CONST_ROUTE_TYPE_SERIAL SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE SYSRES_CONST_SEARCHES_COMPONENT_CONTENT SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME SYSRES_CONST_SEARCHES_EDOC_CONTENT SYSRES_CONST_SEARCHES_FOLDER_CONTENT SYSRES_CONST_SEARCHES_JOB_CONTENT SYSRES_CONST_SEARCHES_REFERENCE_CODE SYSRES_CONST_SEARCHES_TASK_CONTENT SYSRES_CONST_SECOND_CHAR SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE SYSRES_CONST_SECTION_REQUISITE_CODE SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE SYSRES_CONST_SELECT_REFERENCE_MODE_NAME SYSRES_CONST_SELECT_TYPE_SELECTABLE SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD SYSRES_CONST_SELECT_TYPE_UNSLECTABLE SYSRES_CONST_SERVER_TYPE_MAIN SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE SYSRES_CONST_STATE_REQ_NAME SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE SYSRES_CONST_STATE_REQUISITE_CODE SYSRES_CONST_STATIC_ROLE_TYPE_CODE SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE SYSRES_CONST_STATUS_VALUE_AUTOCLEANING SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE SYSRES_CONST_STATUS_VALUE_COMPLETE SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE SYSRES_CONST_STATUS_VALUE_RED_SQUARE SYSRES_CONST_STATUS_VALUE_SUSPEND SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE SYSRES_CONST_STORAGE_TYPE_FILE SYSRES_CONST_STORAGE_TYPE_SQL_SERVER SYSRES_CONST_STR_REQUISITE SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR SYSRES_CONST_STRING_REQUISITE_CODE SYSRES_CONST_STRING_REQUISITE_TYPE SYSRES_CONST_STRING_TYPE_CHAR SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE SYSRES_CONST_SYSTEM_VERSION_COMMENT SYSRES_CONST_TASK_ACCESS_TYPE_ALL SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD SYSRES_CONST_TASK_ENCODE_TYPE_NONE SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD SYSRES_CONST_TASK_ROUTE_ALL_CONDITION SYSRES_CONST_TASK_ROUTE_AND_CONDITION SYSRES_CONST_TASK_ROUTE_OR_CONDITION SYSRES_CONST_TASK_STATE_ABORTED SYSRES_CONST_TASK_STATE_COMPLETE SYSRES_CONST_TASK_STATE_CONTINUED SYSRES_CONST_TASK_STATE_CONTROL SYSRES_CONST_TASK_STATE_INIT SYSRES_CONST_TASK_STATE_WORKING SYSRES_CONST_TASK_TITLE SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE SYSRES_CONST_TASK_TYPES_REFERENCE_CODE SYSRES_CONST_TEMPLATES_REFERENCE_CODE SYSRES_CONST_TEST_DATE_REQUISITE_NAME SYSRES_CONST_TEST_DEV_DATABASE_NAME SYSRES_CONST_TEST_DEV_SYSTEM_CODE SYSRES_CONST_TEST_EDMS_DATABASE_NAME SYSRES_CONST_TEST_EDMS_MAIN_CODE SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME SYSRES_CONST_TEST_EDMS_SECOND_CODE SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME SYSRES_CONST_TEST_EDMS_SYSTEM_CODE SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME SYSRES_CONST_TEXT_REQUISITE SYSRES_CONST_TEXT_REQUISITE_CODE SYSRES_CONST_TEXT_REQUISITE_TYPE SYSRES_CONST_TEXT_TYPE_CHAR SYSRES_CONST_TYPE_CODE_REQUISITE_CODE SYSRES_CONST_TYPE_REQUISITE_CODE SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME SYSRES_CONST_USE_ACCESS_TYPE_CODE SYSRES_CONST_USE_ACCESS_TYPE_NAME SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE SYSRES_CONST_USER_CATEGORY_NORMAL SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE SYSRES_CONST_USER_COMMON_CATEGORY SYSRES_CONST_USER_COMMON_CATEGORY_CODE SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_USER_LOGIN_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_USER_SERVICE_CATEGORY SYSRES_CONST_USER_SERVICE_CATEGORY_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME SYSRES_CONST_USER_STATUS_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_DEVELOPER_NAME SYSRES_CONST_USER_STATUS_DISABLED_CODE SYSRES_CONST_USER_STATUS_DISABLED_NAME SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_USER_CODE SYSRES_CONST_USER_STATUS_USER_NAME SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER SYSRES_CONST_USER_TYPE_REQUISITE_CODE SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE SYSRES_CONST_USERS_REFERENCE_CODE SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME SYSRES_CONST_USERS_REQUISITE_CODE SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME SYSRES_CONST_VIEW_DEFAULT_CODE SYSRES_CONST_VIEW_DEFAULT_NAME SYSRES_CONST_VIEWER_REQUISITE_CODE SYSRES_CONST_WAITING_BLOCK_DESCRIPTION SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT SYSRES_CONST_XML_ENCODING SYSRES_CONST_XREC_STAT_REQUISITE_CODE SYSRES_CONST_XRECID_FIELD_NAME SYSRES_CONST_YES SYSRES_CONST_YES_NO_2_REQUISITE_CODE SYSRES_CONST_YES_NO_REQUISITE_CODE SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_YES_PICK_VALUE SYSRES_CONST_YES_VALUE ",W="CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ",w="ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME ",B="DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY ",A="ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION ",V="JOB_BLOCK_ABORT_DEADLINE_PROPERTY JOB_BLOCK_AFTER_FINISH_EVENT JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT JOB_BLOCK_ATTACHMENT_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT JOB_BLOCK_BEFORE_START_EVENT JOB_BLOCK_CREATED_JOBS_PROPERTY JOB_BLOCK_DEADLINE_PROPERTY JOB_BLOCK_EXECUTION_RESULTS_PROPERTY JOB_BLOCK_IS_PARALLEL_PROPERTY JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY JOB_BLOCK_JOB_TEXT_PROPERTY JOB_BLOCK_NAME_PROPERTY JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY JOB_BLOCK_PERFORMER_PROPERTY JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY JOB_BLOCK_SUBJECT_PROPERTY ",X="ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE ",_="smHidden smMaximized smMinimized smNormal wmNo wmYes ",F="COMPONENT_TOKEN_LINK_KIND DOCUMENT_LINK_KIND EDOCUMENT_LINK_KIND FOLDER_LINK_KIND JOB_LINK_KIND REFERENCE_LINK_KIND TASK_LINK_KIND ",g="COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE ",J="MONITOR_BLOCK_AFTER_FINISH_EVENT MONITOR_BLOCK_BEFORE_START_EVENT MONITOR_BLOCK_DEADLINE_PROPERTY MONITOR_BLOCK_INTERVAL_PROPERTY MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY MONITOR_BLOCK_NAME_PROPERTY MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY ",K="NOTICE_BLOCK_AFTER_FINISH_EVENT NOTICE_BLOCK_ATTACHMENT_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY NOTICE_BLOCK_BEFORE_START_EVENT NOTICE_BLOCK_CREATED_NOTICES_PROPERTY NOTICE_BLOCK_DEADLINE_PROPERTY NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY NOTICE_BLOCK_NAME_PROPERTY NOTICE_BLOCK_NOTICE_TEXT_PROPERTY NOTICE_BLOCK_PERFORMER_PROPERTY NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY NOTICE_BLOCK_SUBJECT_PROPERTY ",Q="dseAfterCancel dseAfterClose dseAfterDelete dseAfterDeleteOutOfTransaction dseAfterInsert dseAfterOpen dseAfterScroll dseAfterUpdate dseAfterUpdateOutOfTransaction dseBeforeCancel dseBeforeClose dseBeforeDelete dseBeforeDetailUpdate dseBeforeInsert dseBeforeOpen dseBeforeUpdate dseOnAnyRequisiteChange dseOnCloseRecord dseOnDeleteError dseOnOpenRecord dseOnPrepareUpdate dseOnUpdateError dseOnUpdateRatifiedRecord dseOnValidDelete dseOnValidUpdate reOnChange reOnChangeValues SELECTION_BEGIN_ROUTE_EVENT SELECTION_END_ROUTE_EVENT ",E="CURRENT_PERIOD_IS_REQUIRED PREVIOUS_CARD_TYPE_NAME SHOW_RECORD_PROPERTIES_FORM ",S="ACCESS_RIGHTS_SETTING_DIALOG_CODE ADMINISTRATOR_USER_CODE ANALYTIC_REPORT_TYPE asrtHideLocal asrtHideRemote CALCULATED_ROLE_TYPE_CODE COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE DCTS_TEST_PROTOCOLS_FOLDER_PATH E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER E_EDOC_VERSION_ALREDY_SIGNED E_EDOC_VERSION_ALREDY_SIGNED_BY_USER EDOC_TYPES_CODE_REQUISITE_FIELD_NAME EDOCUMENTS_ALIAS_NAME FILES_FOLDER_PATH FILTER_OPERANDS_DELIMITER FILTER_OPERATIONS_DELIMITER FORMCARD_NAME FORMLIST_NAME GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE INTEGRATED_REPORT_TYPE IS_BUILDER_APPLICATION_ROLE IS_BUILDER_APPLICATION_ROLE2 IS_BUILDER_USERS ISBSYSDEV LOG_FOLDER_PATH mbCancel mbNo mbNoToAll mbOK mbYes mbYesToAll MEMORY_DATASET_DESRIPTIONS_FILENAME mrNo mrNoToAll mrYes mrYesToAll MULTIPLE_SELECT_DIALOG_CODE NONOPERATING_RECORD_FLAG_FEMININE NONOPERATING_RECORD_FLAG_MASCULINE OPERATING_RECORD_FLAG_FEMININE OPERATING_RECORD_FLAG_MASCULINE PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE PROGRAM_INITIATED_LOOKUP_ACTION ratDelete ratEdit ratInsert REPORT_TYPE REQUIRED_PICK_VALUES_VARIABLE rmCard rmList SBRTE_PROGID_DEV SBRTE_PROGID_RELEASE STATIC_ROLE_TYPE_CODE SUPPRESS_EMPTY_TEMPLATE_CREATION SYSTEM_USER_CODE UPDATE_DIALOG_DATASET USED_IN_OBJECT_HINT_PARAM USER_INITIATED_LOOKUP_ACTION USER_NAME_FORMAT USER_SELECTION_RESTRICTIONS WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH ELS_SUBTYPE_CONTROL_NAME ELS_FOLDER_KIND_CONTROL_NAME REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME ",P="PRIVILEGE_COMPONENT_FULL_ACCESS PRIVILEGE_DEVELOPMENT_EXPORT PRIVILEGE_DEVELOPMENT_IMPORT PRIVILEGE_DOCUMENT_DELETE PRIVILEGE_ESD PRIVILEGE_FOLDER_DELETE PRIVILEGE_MANAGE_ACCESS_RIGHTS PRIVILEGE_MANAGE_REPLICATION PRIVILEGE_MANAGE_SESSION_SERVER PRIVILEGE_OBJECT_FULL_ACCESS PRIVILEGE_OBJECT_VIEW PRIVILEGE_RESERVE_LICENSE PRIVILEGE_SYSTEM_CUSTOMIZE PRIVILEGE_SYSTEM_DEVELOP PRIVILEGE_SYSTEM_INSTALL PRIVILEGE_TASK_DELETE PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE PRIVILEGES_PSEUDOREFERENCE_CODE ",$="ACCESS_TYPES_PSEUDOREFERENCE_CODE ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE COMPONENTS_PSEUDOREFERENCE_CODE FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE GROUPS_PSEUDOREFERENCE_CODE RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE REFTYPES_PSEUDOREFERENCE_CODE REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE SEND_PROTOCOL_PSEUDOREFERENCE_CODE SUBSTITUTES_PSEUDOREFERENCE_CODE SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE UNITS_PSEUDOREFERENCE_CODE USERS_PSEUDOREFERENCE_CODE VIEWERS_PSEUDOREFERENCE_CODE ",h="CERTIFICATE_TYPE_ENCRYPT CERTIFICATE_TYPE_SIGN CERTIFICATE_TYPE_SIGN_AND_ENCRYPT ",O="STORAGE_TYPE_FILE STORAGE_TYPE_NAS_CIFS STORAGE_TYPE_SAPERION STORAGE_TYPE_SQL_SERVER ",T="COMPTYPE2_REQUISITE_DOCUMENTS_VALUE COMPTYPE2_REQUISITE_TASKS_VALUE COMPTYPE2_REQUISITE_FOLDERS_VALUE COMPTYPE2_REQUISITE_REFERENCES_VALUE ",V1="SYSREQ_CODE SYSREQ_COMPTYPE2 SYSREQ_CONST_AVAILABLE_FOR_WEB SYSREQ_CONST_COMMON_CODE SYSREQ_CONST_COMMON_VALUE SYSREQ_CONST_FIRM_CODE SYSREQ_CONST_FIRM_STATUS SYSREQ_CONST_FIRM_VALUE SYSREQ_CONST_SERVER_STATUS SYSREQ_CONTENTS SYSREQ_DATE_OPEN SYSREQ_DATE_CLOSE SYSREQ_DESCRIPTION SYSREQ_DESCRIPTION_LOCALIZE_ID SYSREQ_DOUBLE SYSREQ_EDOC_ACCESS_TYPE SYSREQ_EDOC_AUTHOR SYSREQ_EDOC_CREATED SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE SYSREQ_EDOC_EDITOR SYSREQ_EDOC_ENCODE_TYPE SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_EXPORT_DATE SYSREQ_EDOC_EXPORTER SYSREQ_EDOC_KIND SYSREQ_EDOC_LIFE_STAGE_NAME SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE SYSREQ_EDOC_MODIFIED SYSREQ_EDOC_NAME SYSREQ_EDOC_NOTE SYSREQ_EDOC_QUALIFIED_ID SYSREQ_EDOC_SESSION_KEY SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_SIGNATURE_TYPE SYSREQ_EDOC_SIGNED SYSREQ_EDOC_STORAGE SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE SYSREQ_EDOC_STORAGES_CHECK_RIGHTS SYSREQ_EDOC_STORAGES_COMPUTER_NAME SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE SYSREQ_EDOC_STORAGES_FUNCTION SYSREQ_EDOC_STORAGES_INITIALIZED SYSREQ_EDOC_STORAGES_LOCAL_PATH SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT SYSREQ_EDOC_STORAGES_SERVER_NAME SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME SYSREQ_EDOC_STORAGES_TYPE SYSREQ_EDOC_TEXT_MODIFIED SYSREQ_EDOC_TYPE_ACT_CODE SYSREQ_EDOC_TYPE_ACT_DESCRIPTION SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_EDOC_TYPE_ACT_SECTION SYSREQ_EDOC_TYPE_ADD_PARAMS SYSREQ_EDOC_TYPE_COMMENT SYSREQ_EDOC_TYPE_EVENT_TEXT SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID SYSREQ_EDOC_TYPE_NUMERATION_METHOD SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE SYSREQ_EDOC_TYPE_REQ_CODE SYSREQ_EDOC_TYPE_REQ_DESCRIPTION SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_REQ_IS_LEADING SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED SYSREQ_EDOC_TYPE_REQ_NUMBER SYSREQ_EDOC_TYPE_REQ_ON_CHANGE SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_EDOC_TYPE_REQ_ON_SELECT SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND SYSREQ_EDOC_TYPE_REQ_SECTION SYSREQ_EDOC_TYPE_VIEW_CARD SYSREQ_EDOC_TYPE_VIEW_CODE SYSREQ_EDOC_TYPE_VIEW_COMMENT SYSREQ_EDOC_TYPE_VIEW_IS_MAIN SYSREQ_EDOC_TYPE_VIEW_NAME SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_EDOC_VERSION_AUTHOR SYSREQ_EDOC_VERSION_CRC SYSREQ_EDOC_VERSION_DATA SYSREQ_EDOC_VERSION_EDITOR SYSREQ_EDOC_VERSION_EXPORT_DATE SYSREQ_EDOC_VERSION_EXPORTER SYSREQ_EDOC_VERSION_HIDDEN SYSREQ_EDOC_VERSION_LIFE_STAGE SYSREQ_EDOC_VERSION_MODIFIED SYSREQ_EDOC_VERSION_NOTE SYSREQ_EDOC_VERSION_SIGNATURE_TYPE SYSREQ_EDOC_VERSION_SIGNED SYSREQ_EDOC_VERSION_SIZE SYSREQ_EDOC_VERSION_SOURCE SYSREQ_EDOC_VERSION_TEXT_MODIFIED SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE SYSREQ_FOLDER_KIND SYSREQ_FUNC_CATEGORY SYSREQ_FUNC_COMMENT SYSREQ_FUNC_GROUP SYSREQ_FUNC_GROUP_COMMENT SYSREQ_FUNC_GROUP_NUMBER SYSREQ_FUNC_HELP SYSREQ_FUNC_PARAM_DEF_VALUE SYSREQ_FUNC_PARAM_IDENT SYSREQ_FUNC_PARAM_NUMBER SYSREQ_FUNC_PARAM_TYPE SYSREQ_FUNC_TEXT SYSREQ_GROUP_CATEGORY SYSREQ_ID SYSREQ_LAST_UPDATE SYSREQ_LEADER_REFERENCE SYSREQ_LINE_NUMBER SYSREQ_MAIN_RECORD_ID SYSREQ_NAME SYSREQ_NAME_LOCALIZE_ID SYSREQ_NOTE SYSREQ_ORIGINAL_RECORD SYSREQ_OUR_FIRM SYSREQ_PROFILING_SETTINGS_BATCH_LOGING SYSREQ_PROFILING_SETTINGS_BATCH_SIZE SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_START_LOGGED SYSREQ_RECORD_STATUS SYSREQ_REF_REQ_FIELD_NAME SYSREQ_REF_REQ_FORMAT SYSREQ_REF_REQ_GENERATED SYSREQ_REF_REQ_LENGTH SYSREQ_REF_REQ_PRECISION SYSREQ_REF_REQ_REFERENCE SYSREQ_REF_REQ_SECTION SYSREQ_REF_REQ_STORED SYSREQ_REF_REQ_TOKENS SYSREQ_REF_REQ_TYPE SYSREQ_REF_REQ_VIEW SYSREQ_REF_TYPE_ACT_CODE SYSREQ_REF_TYPE_ACT_DESCRIPTION SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_ACT_ON_EXECUTE SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_REF_TYPE_ACT_SECTION SYSREQ_REF_TYPE_ADD_PARAMS SYSREQ_REF_TYPE_COMMENT SYSREQ_REF_TYPE_COMMON_SETTINGS SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME SYSREQ_REF_TYPE_EVENT_TEXT SYSREQ_REF_TYPE_MAIN_LEADING_REF SYSREQ_REF_TYPE_NAME_IN_SINGULAR SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_REF_TYPE_NAME_LOCALIZE_ID SYSREQ_REF_TYPE_NUMERATION_METHOD SYSREQ_REF_TYPE_REQ_CODE SYSREQ_REF_TYPE_REQ_DESCRIPTION SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_REQ_IS_CONTROL SYSREQ_REF_TYPE_REQ_IS_FILTER SYSREQ_REF_TYPE_REQ_IS_LEADING SYSREQ_REF_TYPE_REQ_IS_REQUIRED SYSREQ_REF_TYPE_REQ_NUMBER SYSREQ_REF_TYPE_REQ_ON_CHANGE SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_REF_TYPE_REQ_ON_SELECT SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND SYSREQ_REF_TYPE_REQ_SECTION SYSREQ_REF_TYPE_VIEW_CARD SYSREQ_REF_TYPE_VIEW_CODE SYSREQ_REF_TYPE_VIEW_COMMENT SYSREQ_REF_TYPE_VIEW_IS_MAIN SYSREQ_REF_TYPE_VIEW_NAME SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_REFERENCE_TYPE_ID SYSREQ_STATE "+"SYSREQ_STATЕ "+"SYSREQ_SYSTEM_SETTINGS_VALUE SYSREQ_TYPE SYSREQ_UNIT SYSREQ_UNIT_ID SYSREQ_USER_GROUPS_GROUP_FULL_NAME SYSREQ_USER_GROUPS_GROUP_NAME SYSREQ_USER_GROUPS_GROUP_SERVER_NAME SYSREQ_USERS_ACCESS_RIGHTS SYSREQ_USERS_AUTHENTICATION SYSREQ_USERS_CATEGORY SYSREQ_USERS_COMPONENT SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC SYSREQ_USERS_DOMAIN SYSREQ_USERS_FULL_USER_NAME SYSREQ_USERS_GROUP SYSREQ_USERS_IS_MAIN_SERVER SYSREQ_USERS_LOGIN SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC SYSREQ_USERS_STATUS SYSREQ_USERS_USER_CERTIFICATE SYSREQ_USERS_USER_CERTIFICATE_INFO SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION SYSREQ_USERS_USER_CERTIFICATE_STATE SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT SYSREQ_USERS_USER_DEFAULT_CERTIFICATE SYSREQ_USERS_USER_DESCRIPTION SYSREQ_USERS_USER_GLOBAL_NAME SYSREQ_USERS_USER_LOGIN SYSREQ_USERS_USER_MAIN_SERVER SYSREQ_USERS_USER_TYPE SYSREQ_WORK_RULES_FOLDER_ID ",c="RESULT_VAR_NAME RESULT_VAR_NAME_ENG ",c1="AUTO_NUMERATION_RULE_ID CANT_CHANGE_ID_REQUISITE_RULE_ID CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID CHECK_CODE_REQUISITE_RULE_ID CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID CHECK_FILTRATER_CHANGES_RULE_ID CHECK_RECORD_INTERVAL_RULE_ID CHECK_REFERENCE_INTERVAL_RULE_ID CHECK_REQUIRED_DATA_FULLNESS_RULE_ID CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID MAKE_RECORD_UNRATIFIED_RULE_ID RESTORE_AUTO_NUMERATION_RULE_ID SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID SET_IDSPS_VALUE_RULE_ID SET_NEXT_CODE_VALUE_RULE_ID SET_OURFIRM_BOUNDS_RULE_ID SET_OURFIRM_REQUISITE_RULE_ID ",o1="SCRIPT_BLOCK_AFTER_FINISH_EVENT SCRIPT_BLOCK_BEFORE_START_EVENT SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY SCRIPT_BLOCK_NAME_PROPERTY SCRIPT_BLOCK_SCRIPT_PROPERTY ",a1="SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_AFTER_FINISH_EVENT SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT SUBTASK_BLOCK_ATTACHMENTS_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY SUBTASK_BLOCK_BEFORE_START_EVENT SUBTASK_BLOCK_CREATED_TASK_PROPERTY SUBTASK_BLOCK_CREATION_EVENT SUBTASK_BLOCK_DEADLINE_PROPERTY SUBTASK_BLOCK_IMPORTANCE_PROPERTY SUBTASK_BLOCK_INITIATOR_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY SUBTASK_BLOCK_JOBS_TYPE_PROPERTY SUBTASK_BLOCK_NAME_PROPERTY SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY SUBTASK_BLOCK_PERFORMERS_PROPERTY SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_START_EVENT SUBTASK_BLOCK_STEP_CONTROL_PROPERTY SUBTASK_BLOCK_SUBJECT_PROPERTY SUBTASK_BLOCK_TASK_CONTROL_PROPERTY SUBTASK_BLOCK_TEXT_PROPERTY SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY ",f1="SYSCOMP_CONTROL_JOBS SYSCOMP_FOLDERS SYSCOMP_JOBS SYSCOMP_NOTICES SYSCOMP_TASKS ",r="SYSDLG_CREATE_EDOCUMENT SYSDLG_CREATE_EDOCUMENT_VERSION SYSDLG_CURRENT_PERIOD SYSDLG_EDIT_FUNCTION_HELP SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS SYSDLG_EXPORT_SINGLE_EDOCUMENT SYSDLG_IMPORT_EDOCUMENT SYSDLG_MULTIPLE_SELECT SYSDLG_SETUP_ACCESS_RIGHTS SYSDLG_SETUP_DEFAULT_RIGHTS SYSDLG_SETUP_FILTER_CONDITION SYSDLG_SETUP_SIGN_RIGHTS SYSDLG_SETUP_TASK_OBSERVERS SYSDLG_SETUP_TASK_ROUTE SYSDLG_SETUP_USERS_LIST SYSDLG_SIGN_EDOCUMENT SYSDLG_SIGN_MULTIPLE_EDOCUMENTS ",A1="SYSREF_ACCESS_RIGHTS_TYPES SYSREF_ADMINISTRATION_HISTORY SYSREF_ALL_AVAILABLE_COMPONENTS SYSREF_ALL_AVAILABLE_PRIVILEGES SYSREF_ALL_REPLICATING_COMPONENTS SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS SYSREF_CALENDAR_EVENTS SYSREF_COMPONENT_TOKEN_HISTORY SYSREF_COMPONENT_TOKENS SYSREF_COMPONENTS SYSREF_CONSTANTS SYSREF_DATA_RECEIVE_PROTOCOL SYSREF_DATA_SEND_PROTOCOL SYSREF_DIALOGS SYSREF_DIALOGS_REQUISITES SYSREF_EDITORS SYSREF_EDOC_CARDS SYSREF_EDOC_TYPES SYSREF_EDOCUMENT_CARD_REQUISITES SYSREF_EDOCUMENT_CARD_TYPES SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE SYSREF_EDOCUMENT_CARDS SYSREF_EDOCUMENT_HISTORY SYSREF_EDOCUMENT_KINDS SYSREF_EDOCUMENT_REQUISITES SYSREF_EDOCUMENT_SIGNATURES SYSREF_EDOCUMENT_TEMPLATES SYSREF_EDOCUMENT_TEXT_STORAGES SYSREF_EDOCUMENT_VIEWS SYSREF_FILTERER_SETUP_CONFLICTS SYSREF_FILTRATER_SETTING_CONFLICTS SYSREF_FOLDER_HISTORY SYSREF_FOLDERS SYSREF_FUNCTION_GROUPS SYSREF_FUNCTION_PARAMS SYSREF_FUNCTIONS SYSREF_JOB_HISTORY SYSREF_LINKS SYSREF_LOCALIZATION_DICTIONARY SYSREF_LOCALIZATION_LANGUAGES SYSREF_MODULES SYSREF_PRIVILEGES SYSREF_RECORD_HISTORY SYSREF_REFERENCE_REQUISITES SYSREF_REFERENCE_TYPE_VIEWS SYSREF_REFERENCE_TYPES SYSREF_REFERENCES SYSREF_REFERENCES_REQUISITES SYSREF_REMOTE_SERVERS SYSREF_REPLICATION_SESSIONS_LOG SYSREF_REPLICATION_SESSIONS_PROTOCOL SYSREF_REPORTS SYSREF_ROLES SYSREF_ROUTE_BLOCK_GROUPS SYSREF_ROUTE_BLOCKS SYSREF_SCRIPTS SYSREF_SEARCHES SYSREF_SERVER_EVENTS SYSREF_SERVER_EVENTS_HISTORY SYSREF_STANDARD_ROUTE_GROUPS SYSREF_STANDARD_ROUTES SYSREF_STATUSES SYSREF_SYSTEM_SETTINGS SYSREF_TASK_HISTORY SYSREF_TASK_KIND_GROUPS SYSREF_TASK_KINDS SYSREF_TASK_RIGHTS SYSREF_TASK_SIGNATURES SYSREF_TASKS SYSREF_UNITS SYSREF_USER_GROUPS SYSREF_USER_GROUPS_REFERENCE SYSREF_USER_SUBSTITUTION SYSREF_USERS SYSREF_USERS_REFERENCE SYSREF_VIEWERS SYSREF_WORKING_TIME_CALENDARS ",m1="ACCESS_RIGHTS_TABLE_NAME EDMS_ACCESS_TABLE_NAME EDOC_TYPES_TABLE_NAME ",T1="TEST_DEV_DB_NAME TEST_DEV_SYSTEM_CODE TEST_EDMS_DB_NAME TEST_EDMS_MAIN_CODE TEST_EDMS_MAIN_DB_NAME TEST_EDMS_SECOND_CODE TEST_EDMS_SECOND_DB_NAME TEST_EDMS_SYSTEM_CODE TEST_ISB5_MAIN_CODE TEST_ISB5_SECOND_CODE TEST_SQL_SERVER_2005_NAME TEST_SQL_SERVER_NAME ",e1="ATTENTION_CAPTION cbsCommandLinks cbsDefault CONFIRMATION_CAPTION ERROR_CAPTION INFORMATION_CAPTION mrCancel mrOk ",F0="EDOC_VERSION_ACTIVE_STAGE_CODE EDOC_VERSION_DESIGN_STAGE_CODE EDOC_VERSION_OBSOLETE_STAGE_CODE ",P0="cpDataEnciphermentEnabled cpDigitalSignatureEnabled cpID cpIssuer cpPluginVersion cpSerial cpSubjectName cpSubjSimpleName cpValidFromDate cpValidToDate ",B0="ISBL_SYNTAX NO_SYNTAX XML_SYNTAX ",a0="WAIT_BLOCK_AFTER_FINISH_EVENT WAIT_BLOCK_BEFORE_START_EVENT WAIT_BLOCK_DEADLINE_PROPERTY WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY WAIT_BLOCK_NAME_PROPERTY WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY ",e="SYSRES_COMMON SYSRES_CONST SYSRES_MBFUNC SYSRES_SBDATA SYSRES_SBGUI SYSRES_SBINTF SYSRES_SBREFDSC SYSRES_SQLERRORS SYSRES_SYSCOMP ",G0=C+"CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME "+B+A+V+"ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE smHidden smMaximized smMinimized smNormal wmNo wmYes "+F+"COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE "+J+K+Q+E+S+P+$+h+O+T+V1+"RESULT_VAR_NAME RESULT_VAR_NAME_ENG "+c1+o1+a1+f1+r+A1+m1+T1+e1+F0+P0+B0+a0+e,H1="atUser atGroup atRole ",j1="aemEnabledAlways aemDisabledAlways aemEnabledOnBrowse aemEnabledOnEdit aemDisabledOnBrowseEmpty ",i1="apBegin apEnd ",E0="alLeft alRight ",k="asmNever asmNoButCustomize asmAsLastTime asmYesButCustomize asmAlways ",a="cirCommon cirRevoked ",Z1="ctSignature ctEncode ctSignatureEncode ",Q1="clbUnchecked clbChecked clbGrayed ",N1="ceISB ceAlways ceNever ",F1="ctDocument ctReference ctScript ctUnknown ctReport ctDialog ctFunction ctFolder ctEDocument ctTask ctJob ctNotice ctControlJob ",O1="cfInternal cfDisplay ",K1="ciUnspecified ciWrite ciRead ",R1="ckFolder ckEDocument ckTask ckJob ckComponentToken ckAny ckReference ckScript ckReport ckDialog ",h1="ctISBLEditor ctBevel ctButton ctCheckListBox ctComboBox ctComboEdit ctGrid ctDBCheckBox ctDBComboBox ctDBEdit ctDBEllipsis ctDBMemo ctDBNavigator ctDBRadioGroup ctDBStatusLabel ctEdit ctGroupBox ctInplaceHint ctMemo ctPanel ctListBox ctRadioButton ctRichEdit ctTabSheet ctWebBrowser ctImage ctHyperLink ctLabel ctDBMultiEllipsis ctRibbon ctRichView ctInnerPanel ctPanelGroup ctBitButton ",j="cctDate cctInteger cctNumeric cctPick cctReference cctString cctText ",W1="cltInternal cltPrimary cltGUI ",U1="dseBeforeOpen dseAfterOpen dseBeforeClose dseAfterClose dseOnValidDelete dseBeforeDelete dseAfterDelete dseAfterDeleteOutOfTransaction dseOnDeleteError dseBeforeInsert dseAfterInsert dseOnValidUpdate dseBeforeUpdate dseOnUpdateRatifiedRecord dseAfterUpdate dseAfterUpdateOutOfTransaction dseOnUpdateError dseAfterScroll dseOnOpenRecord dseOnCloseRecord dseBeforeCancel dseAfterCancel dseOnUpdateDeadlockError dseBeforeDetailUpdate dseOnPrepareUpdate dseOnAnyRequisiteChange ",L1="dssEdit dssInsert dssBrowse dssInActive ",D0="dftDate dftShortDate dftDateTime dftTimeStamp ",O0="dotDays dotHours dotMinutes dotSeconds ",k0="dtkndLocal dtkndUTC ",i0="arNone arView arEdit arFull ",s0="ddaView ddaEdit ",P2="emLock emEdit emSign emExportWithLock emImportWithUnlock emChangeVersionNote emOpenForModify emChangeLifeStage emDelete emCreateVersion emImport emUnlockExportedWithLock emStart emAbort emReInit emMarkAsReaded emMarkAsUnreaded emPerform emAccept emResume emChangeRights emEditRoute emEditObserver emRecoveryFromLocalCopy emChangeWorkAccessType emChangeEncodeTypeToCertificate emChangeEncodeTypeToPassword emChangeEncodeTypeToNone emChangeEncodeTypeToCertificatePassword emChangeStandardRoute emGetText emOpenForView emMoveToStorage emCreateObject emChangeVersionHidden emDeleteVersion emChangeLifeCycleStage emApprovingSign emExport emContinue emLockFromEdit emUnLockForEdit emLockForServer emUnlockFromServer emDelegateAccessRights emReEncode ",a5="ecotFile ecotProcess ",n0="eaGet eaCopy eaCreate eaCreateStandardRoute ",B2="edltAll edltNothing edltQuery ",A2="essmText essmCard ",B4="esvtLast esvtLastActive esvtSpecified ",A4="edsfExecutive edsfArchive ",_5="edstSQLServer edstFile ",D5="edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile ",tZ="vsDefault vsDesign vsActive vsObsolete ",T6="etNone etCertificate etPassword etCertificatePassword ",pB="ecException ecWarning ecInformation ",iB="estAll estApprovingOnly ",X3="evtLast evtLastActive evtQuery ",Nd="fdtString fdtNumeric fdtInteger fdtDate fdtText fdtUnknown fdtWideString fdtLargeInteger ",IC="ftInbox ftOutbox ftFavorites ftCommonFolder ftUserFolder ftComponents ftQuickLaunch ftShortcuts ftSearch ",Y3="grhAuto grhX1 grhX2 grhX3 ",zd="hltText hltRTF hltHTML ",Qd="iffBMP iffJPEG iffMultiPageTIFF iffSinglePageTIFF iffTIFF iffPNG ",QG="im8bGrayscale im24bRGB im1bMonochrome ",fG="itBMP itJPEG itWMF itPNG ",X7="ikhInformation ikhWarning ikhError ikhNoIcon ",vI="icUnknown icScript icFunction icIntegratedReport icAnalyticReport icDataSetEventHandler icActionHandler icFormEventHandler icLookUpEventHandler icRequisiteChangeEventHandler icBeforeSearchEventHandler icRoleCalculation icSelectRouteEventHandler icBlockPropertyCalculation icBlockQueryParamsEventHandler icChangeSearchResultEventHandler icBlockEventHandler icSubTaskInitEventHandler icEDocDataSetEventHandler icEDocLookUpEventHandler icEDocActionHandler icEDocFormEventHandler icEDocRequisiteChangeEventHandler icStructuredConversionRule icStructuredConversionEventBefore icStructuredConversionEventAfter icWizardEventHandler icWizardFinishEventHandler icWizardStepEventHandler icWizardStepFinishEventHandler icWizardActionEnableEventHandler icWizardActionExecuteEventHandler icCreateJobsHandler icCreateNoticesHandler icBeforeLookUpEventHandler icAfterLookUpEventHandler icTaskAbortEventHandler icWorkflowBlockActionHandler icDialogDataSetEventHandler icDialogActionHandler icDialogLookUpEventHandler icDialogRequisiteChangeEventHandler icDialogFormEventHandler icDialogValidCloseEventHandler icBlockFormEventHandler icTaskFormEventHandler icReferenceMethod icEDocMethod icDialogMethod icProcessMessageHandler ",i7="isShow isHide isByUserSettings ",fd="jkJob jkNotice jkControlJob ",Y7="jtInner jtLeft jtRight jtFull jtCross ",nB="lbpAbove lbpBelow lbpLeft lbpRight ",qd="eltPerConnection eltPerUser ",rB="sfcUndefined sfcBlack sfcGreen sfcRed sfcBlue sfcOrange sfcLilac ",PW="sfsItalic sfsStrikeout sfsNormal ",$W="ldctStandardRoute ldctWizard ldctScript ldctFunction ldctRouteBlock ldctIntegratedReport ldctAnalyticReport ldctReferenceType ldctEDocumentType ldctDialog ldctServerEvents ",v8="mrcrtNone mrcrtUser mrcrtMaximal mrcrtCustom ",qG="vtEqual vtGreaterOrEqual vtLessOrEqual vtRange ",aB="rdYesterday rdToday rdTomorrow rdThisWeek rdThisMonth rdThisYear rdNextMonth rdNextWeek rdLastWeek rdLastMonth ",uW="rdWindow rdFile rdPrinter ",Rd="rdtString rdtNumeric rdtInteger rdtDate rdtReference rdtAccount rdtText rdtPick rdtUnknown rdtLargeInteger rdtDocument ",sB="reOnChange reOnChangeValues ",TW="ttGlobal ttLocal ttUser ttSystem ",Ud="ssmBrowse ssmSelect ssmMultiSelect ssmBrowseModal ",_7="smSelect smLike smCard ",OW="stNone stAuthenticating stApproving ",d1="sctString sctStream ",o="sstAnsiSort sstNaturalSort ",S1="svtEqual svtContain ",p1="soatString soatNumeric soatInteger soatDatetime soatReferenceRecord soatText soatPick soatBoolean soatEDocument soatAccount soatIntegerCollection soatNumericCollection soatStringCollection soatPickCollection soatDatetimeCollection soatBooleanCollection soatReferenceRecordCollection soatEDocumentCollection soatAccountCollection soatContents soatUnknown ",l1="tarAbortByUser tarAbortByWorkflowException ",s1="tvtAllWords tvtExactPhrase tvtAnyWord ",U0="usNone usCompleted usRedSquare usBlueSquare usYellowSquare usGreenSquare usOrangeSquare usPurpleSquare usFollowUp ",w0="utUnknown utUser utDeveloper utAdministrator utSystemDeveloper utDisconnected ",J0="btAnd btDetailAnd btOr btNotOr btOnly ",W0="vmView vmSelect vmNavigation ",g0="vsmSingle vsmMultiple vsmMultipleCheck vsmNoSelection ",c2="wfatPrevious wfatNext wfatCancel wfatFinish ",L2="wfepUndefined wfepText3 wfepText6 wfepText9 wfepSpinEdit wfepDropDown wfepRadioGroup wfepFlag wfepText12 wfepText15 wfepText18 wfepText21 wfepText24 wfepText27 wfepText30 wfepRadioGroupColumn1 wfepRadioGroupColumn2 wfepRadioGroupColumn3 ",R2="wfetQueryParameter wfetText wfetDelimiter wfetLabel ",l="wptString wptInteger wptNumeric wptBoolean wptDateTime wptPick wptText wptUser wptUserList wptEDocumentInfo wptEDocumentInfoList wptReferenceRecordInfo wptReferenceRecordInfoList wptFolderInfo wptTaskInfo wptContents wptFileName wptDate ",_1="wsrComplete wsrGoNext wsrGoPrevious wsrCustom wsrCancel wsrGoFinal ",I1="wstForm wstEDocument wstTaskCard wstReferenceRecordCard wstFinal ",v1="waAll waPerformers waManual ",y1="wsbStart wsbFinish wsbNotice wsbStep wsbDecision wsbWait wsbMonitor wsbScript wsbConnector wsbSubTask wsbLifeCycleStage wsbPause ",E1="wdtInteger wdtFloat wdtString wdtPick wdtDateTime wdtBoolean wdtTask wdtJob wdtFolder wdtEDocument wdtReferenceRecord wdtUser wdtGroup wdtRole wdtIntegerCollection wdtFloatCollection wdtStringCollection wdtPickCollection wdtDateTimeCollection wdtBooleanCollection wdtTaskCollection wdtJobCollection wdtFolderCollection wdtEDocumentCollection wdtReferenceRecordCollection wdtUserCollection wdtGroupCollection wdtRoleCollection wdtContents wdtUserList wdtSearchDescription wdtDeadLine wdtPickSet wdtAccountCollection ",Z0="wiLow wiNormal wiHigh ",Q0="wrtSoft wrtHard ",N0="wsInit wsRunning wsDone wsControlled wsAborted wsContinued ",$0="wtmFull wtmFromCurrent wtmOnlyCurrent ",h0="atUser atGroup atRole "+j1+"apBegin apEnd alLeft alRight "+k+"cirCommon cirRevoked ctSignature ctEncode ctSignatureEncode clbUnchecked clbChecked clbGrayed ceISB ceAlways ceNever "+F1+"cfInternal cfDisplay ciUnspecified ciWrite ciRead "+R1+h1+j+"cltInternal cltPrimary cltGUI "+U1+"dssEdit dssInsert dssBrowse dssInActive dftDate dftShortDate dftDateTime dftTimeStamp dotDays dotHours dotMinutes dotSeconds dtkndLocal dtkndUTC arNone arView arEdit arFull ddaView ddaEdit "+P2+"ecotFile ecotProcess eaGet eaCopy eaCreate eaCreateStandardRoute edltAll edltNothing edltQuery essmText essmCard esvtLast esvtLastActive esvtSpecified edsfExecutive edsfArchive edstSQLServer edstFile edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile vsDefault vsDesign vsActive vsObsolete etNone etCertificate etPassword etCertificatePassword ecException ecWarning ecInformation estAll estApprovingOnly evtLast evtLastActive evtQuery "+Nd+IC+Y3+zd+Qd+QG+fG+X7+vI+i7+fd+Y7+nB+qd+rB+PW+$W+v8+qG+aB+uW+Rd+sB+TW+Ud+_7+OW+d1+o+S1+p1+l1+s1+U0+w0+J0+W0+g0+c2+L2+R2+l+_1+I1+v1+y1+E1+Z0+Q0+N0+$0,g2="AddSubString AdjustLineBreaks AmountInWords Analysis ArrayDimCount ArrayHighBound ArrayLowBound ArrayOf ArrayReDim Assert Assigned BeginOfMonth BeginOfPeriod BuildProfilingOperationAnalysis CallProcedure CanReadFile CArrayElement CDataSetRequisite ChangeDate ChangeReferenceDataset Char CharPos CheckParam CheckParamValue CompareStrings ConstantExists ControlState ConvertDateStr Copy CopyFile CreateArray CreateCachedReference CreateConnection CreateDialog CreateDualListDialog CreateEditor CreateException CreateFile CreateFolderDialog CreateInputDialog CreateLinkFile CreateList CreateLock CreateMemoryDataSet CreateObject CreateOpenDialog CreateProgress CreateQuery CreateReference CreateReport CreateSaveDialog CreateScript CreateSQLPivotFunction CreateStringList CreateTreeListSelectDialog CSelectSQL CSQL CSubString CurrentUserID CurrentUserName CurrentVersion DataSetLocateEx DateDiff DateTimeDiff DateToStr DayOfWeek DeleteFile DirectoryExists DisableCheckAccessRights DisableCheckFullShowingRestriction DisableMassTaskSendingRestrictions DropTable DupeString EditText EnableCheckAccessRights EnableCheckFullShowingRestriction EnableMassTaskSendingRestrictions EndOfMonth EndOfPeriod ExceptionExists ExceptionsOff ExceptionsOn Execute ExecuteProcess Exit ExpandEnvironmentVariables ExtractFileDrive ExtractFileExt ExtractFileName ExtractFilePath ExtractParams FileExists FileSize FindFile FindSubString FirmContext ForceDirectories Format FormatDate FormatNumeric FormatSQLDate FormatString FreeException GetComponent GetComponentLaunchParam GetConstant GetLastException GetReferenceRecord GetRefTypeByRefID GetTableID GetTempFolder IfThen In IndexOf InputDialog InputDialogEx InteractiveMode IsFileLocked IsGraphicFile IsNumeric Length LoadString LoadStringFmt LocalTimeToUTC LowerCase Max MessageBox MessageBoxEx MimeDecodeBinary MimeDecodeString MimeEncodeBinary MimeEncodeString Min MoneyInWords MoveFile NewID Now OpenFile Ord Precision Raise ReadCertificateFromFile ReadFile ReferenceCodeByID ReferenceNumber ReferenceRequisiteMode ReferenceRequisiteValue RegionDateSettings RegionNumberSettings RegionTimeSettings RegRead RegWrite RenameFile Replace Round SelectServerCode SelectSQL ServerDateTime SetConstant SetManagedFolderFieldsState ShowConstantsInputDialog ShowMessage Sleep Split SQL SQL2XLSTAB SQLProfilingSendReport StrToDate SubString SubStringCount SystemSetting Time TimeDiff Today Transliterate Trim UpperCase UserStatus UTCToLocalTime ValidateXML VarIsClear VarIsEmpty VarIsNull WorkTimeDiff WriteFile WriteFileEx WriteObjectHistory "+"Анализ "+"БазаДанных "+"БлокЕсть "+"БлокЕстьРасш "+"БлокИнфо "+"БлокСнять "+"БлокСнятьРасш "+"БлокУстановить "+"Ввод "+"ВводМеню "+"ВедС "+"ВедСпр "+"ВерхняяГраницаМассива "+"ВнешПрогр "+"Восст "+"ВременнаяПапка "+"Время "+"ВыборSQL "+"ВыбратьЗапись "+"ВыделитьСтр "+"Вызвать "+"Выполнить "+"ВыпПрогр "+"ГрафическийФайл "+"ГруппаДополнительно "+"ДатаВремяСерв "+"ДеньНедели "+"ДиалогДаНет "+"ДлинаСтр "+"ДобПодстр "+"ЕПусто "+"ЕслиТо "+"ЕЧисло "+"ЗамПодстр "+"ЗаписьСправочника "+"ЗначПоляСпр "+"ИДТипСпр "+"ИзвлечьДиск "+"ИзвлечьИмяФайла "+"ИзвлечьПуть "+"ИзвлечьРасширение "+"ИзмДат "+"ИзменитьРазмерМассива "+"ИзмеренийМассива "+"ИмяОрг "+"ИмяПоляСпр "+"Индекс "+"ИндикаторЗакрыть "+"ИндикаторОткрыть "+"ИндикаторШаг "+"ИнтерактивныйРежим "+"ИтогТблСпр "+"КодВидВедСпр "+"КодВидСпрПоИД "+"КодПоAnalit "+"КодСимвола "+"КодСпр "+"КолПодстр "+"КолПроп "+"КонМес "+"Конст "+"КонстЕсть "+"КонстЗнач "+"КонТран "+"КопироватьФайл "+"КопияСтр "+"КПериод "+"КСтрТблСпр "+"Макс "+"МаксСтрТблСпр "+"Массив "+"Меню "+"МенюРасш "+"Мин "+"НаборДанныхНайтиРасш "+"НаимВидСпр "+"НаимПоAnalit "+"НаимСпр "+"НастроитьПереводыСтрок "+"НачМес "+"НачТран "+"НижняяГраницаМассива "+"НомерСпр "+"НПериод "+"Окно "+"Окр "+"Окружение "+"ОтлИнфДобавить "+"ОтлИнфУдалить "+"Отчет "+"ОтчетАнал "+"ОтчетИнт "+"ПапкаСуществует "+"Пауза "+"ПВыборSQL "+"ПереименоватьФайл "+"Переменные "+"ПереместитьФайл "+"Подстр "+"ПоискПодстр "+"ПоискСтр "+"ПолучитьИДТаблицы "+"ПользовательДополнительно "+"ПользовательИД "+"ПользовательИмя "+"ПользовательСтатус "+"Прервать "+"ПроверитьПараметр "+"ПроверитьПараметрЗнач "+"ПроверитьУсловие "+"РазбСтр "+"РазнВремя "+"РазнДат "+"РазнДатаВремя "+"РазнРабВремя "+"РегУстВрем "+"РегУстДат "+"РегУстЧсл "+"РедТекст "+"РеестрЗапись "+"РеестрСписокИменПарам "+"РеестрЧтение "+"РеквСпр "+"РеквСпрПр "+"Сегодня "+"Сейчас "+"Сервер "+"СерверПроцессИД "+"СертификатФайлСчитать "+"СжПроб "+"Символ "+"СистемаДиректумКод "+"СистемаИнформация "+"СистемаКод "+"Содержит "+"СоединениеЗакрыть "+"СоединениеОткрыть "+"СоздатьДиалог "+"СоздатьДиалогВыбораИзДвухСписков "+"СоздатьДиалогВыбораПапки "+"СоздатьДиалогОткрытияФайла "+"СоздатьДиалогСохраненияФайла "+"СоздатьЗапрос "+"СоздатьИндикатор "+"СоздатьИсключение "+"СоздатьКэшированныйСправочник "+"СоздатьМассив "+"СоздатьНаборДанных "+"СоздатьОбъект "+"СоздатьОтчет "+"СоздатьПапку "+"СоздатьРедактор "+"СоздатьСоединение "+"СоздатьСписок "+"СоздатьСписокСтрок "+"СоздатьСправочник "+"СоздатьСценарий "+"СоздСпр "+"СостСпр "+"Сохр "+"СохрСпр "+"СписокСистем "+"Спр "+"Справочник "+"СпрБлокЕсть "+"СпрБлокСнять "+"СпрБлокСнятьРасш "+"СпрБлокУстановить "+"СпрИзмНабДан "+"СпрКод "+"СпрНомер "+"СпрОбновить "+"СпрОткрыть "+"СпрОтменить "+"СпрПарам "+"СпрПолеЗнач "+"СпрПолеИмя "+"СпрРекв "+"СпрРеквВведЗн "+"СпрРеквНовые "+"СпрРеквПр "+"СпрРеквПредЗн "+"СпрРеквРежим "+"СпрРеквТипТекст "+"СпрСоздать "+"СпрСост "+"СпрСохранить "+"СпрТблИтог "+"СпрТблСтр "+"СпрТблСтрКол "+"СпрТблСтрМакс "+"СпрТблСтрМин "+"СпрТблСтрПред "+"СпрТблСтрСлед "+"СпрТблСтрСозд "+"СпрТблСтрУд "+"СпрТекПредст "+"СпрУдалить "+"СравнитьСтр "+"СтрВерхРегистр "+"СтрНижнРегистр "+"СтрТблСпр "+"СумПроп "+"Сценарий "+"СценарийПарам "+"ТекВерсия "+"ТекОрг "+"Точн "+"Тран "+"Транслитерация "+"УдалитьТаблицу "+"УдалитьФайл "+"УдСпр "+"УдСтрТблСпр "+"Уст "+"УстановкиКонстант "+"ФайлАтрибутСчитать "+"ФайлАтрибутУстановить "+"ФайлВремя "+"ФайлВремяУстановить "+"ФайлВыбрать "+"ФайлЗанят "+"ФайлЗаписать "+"ФайлИскать "+"ФайлКопировать "+"ФайлМожноЧитать "+"ФайлОткрыть "+"ФайлПереименовать "+"ФайлПерекодировать "+"ФайлПереместить "+"ФайлПросмотреть "+"ФайлРазмер "+"ФайлСоздать "+"ФайлСсылкаСоздать "+"ФайлСуществует "+"ФайлСчитать "+"ФайлУдалить "+"ФмтSQLДат "+"ФмтДат "+"ФмтСтр "+"ФмтЧсл "+"Формат "+"ЦМассивЭлемент "+"ЦНаборДанныхРеквизит "+"ЦПодстр ",F4="AltState Application CallType ComponentTokens CreatedJobs CreatedNotices ControlState DialogResult Dialogs EDocuments EDocumentVersionSource Folders GlobalIDs Job Jobs InputValue LookUpReference LookUpRequisiteNames LookUpSearch Object ParentComponent Processes References Requisite ReportName Reports Result Scripts Searches SelectedAttachments SelectedItems SelectMode Sender ServerEvents ServiceFactory ShiftState SubTask SystemDialogs Tasks Wizard Wizards Work "+"ВызовСпособ "+"ИмяОтчета "+"РеквЗнач ",x4="IApplication IAccessRights IAccountRepository IAccountSelectionRestrictions IAction IActionList IAdministrationHistoryDescription IAnchors IApplication IArchiveInfo IAttachment IAttachmentList ICheckListBox ICheckPointedList IColumn IComponent IComponentDescription IComponentToken IComponentTokenFactory IComponentTokenInfo ICompRecordInfo IConnection IContents IControl IControlJob IControlJobInfo IControlList ICrypto ICrypto2 ICustomJob ICustomJobInfo ICustomListBox ICustomObjectWizardStep ICustomWork ICustomWorkInfo IDataSet IDataSetAccessInfo IDataSigner IDateCriterion IDateRequisite IDateRequisiteDescription IDateValue IDeaAccessRights IDeaObjectInfo IDevelopmentComponentLock IDialog IDialogFactory IDialogPickRequisiteItems IDialogsFactory IDICSFactory IDocRequisite IDocumentInfo IDualListDialog IECertificate IECertificateInfo IECertificates IEditControl IEditorForm IEdmsExplorer IEdmsObject IEdmsObjectDescription IEdmsObjectFactory IEdmsObjectInfo IEDocument IEDocumentAccessRights IEDocumentDescription IEDocumentEditor IEDocumentFactory IEDocumentInfo IEDocumentStorage IEDocumentVersion IEDocumentVersionListDialog IEDocumentVersionSource IEDocumentWizardStep IEDocVerSignature IEDocVersionState IEnabledMode IEncodeProvider IEncrypter IEvent IEventList IException IExternalEvents IExternalHandler IFactory IField IFileDialog IFolder IFolderDescription IFolderDialog IFolderFactory IFolderInfo IForEach IForm IFormTitle IFormWizardStep IGlobalIDFactory IGlobalIDInfo IGrid IHasher IHistoryDescription IHyperLinkControl IImageButton IImageControl IInnerPanel IInplaceHint IIntegerCriterion IIntegerList IIntegerRequisite IIntegerValue IISBLEditorForm IJob IJobDescription IJobFactory IJobForm IJobInfo ILabelControl ILargeIntegerCriterion ILargeIntegerRequisite ILargeIntegerValue ILicenseInfo ILifeCycleStage IList IListBox ILocalIDInfo ILocalization ILock IMemoryDataSet IMessagingFactory IMetadataRepository INotice INoticeInfo INumericCriterion INumericRequisite INumericValue IObject IObjectDescription IObjectImporter IObjectInfo IObserver IPanelGroup IPickCriterion IPickProperty IPickRequisite IPickRequisiteDescription IPickRequisiteItem IPickRequisiteItems IPickValue IPrivilege IPrivilegeList IProcess IProcessFactory IProcessMessage IProgress IProperty IPropertyChangeEvent IQuery IReference IReferenceCriterion IReferenceEnabledMode IReferenceFactory IReferenceHistoryDescription IReferenceInfo IReferenceRecordCardWizardStep IReferenceRequisiteDescription IReferencesFactory IReferenceValue IRefRequisite IReport IReportFactory IRequisite IRequisiteDescription IRequisiteDescriptionList IRequisiteFactory IRichEdit IRouteStep IRule IRuleList ISchemeBlock IScript IScriptFactory ISearchCriteria ISearchCriterion ISearchDescription ISearchFactory ISearchFolderInfo ISearchForObjectDescription ISearchResultRestrictions ISecuredContext ISelectDialog IServerEvent IServerEventFactory IServiceDialog IServiceFactory ISignature ISignProvider ISignProvider2 ISignProvider3 ISimpleCriterion IStringCriterion IStringList IStringRequisite IStringRequisiteDescription IStringValue ISystemDialogsFactory ISystemInfo ITabSheet ITask ITaskAbortReasonInfo ITaskCardWizardStep ITaskDescription ITaskFactory ITaskInfo ITaskRoute ITextCriterion ITextRequisite ITextValue ITreeListSelectDialog IUser IUserList IValue IView IWebBrowserControl IWizard IWizardAction IWizardFactory IWizardFormElement IWizardParam IWizardPickParam IWizardReferenceParam IWizardStep IWorkAccessRights IWorkDescription IWorkflowAskableParam IWorkflowAskableParams IWorkflowBlock IWorkflowBlockResult IWorkflowEnabledMode IWorkflowParam IWorkflowPickParam IWorkflowReferenceParam IWorkState IWorkTreeCustomNode IWorkTreeJobNode IWorkTreeTaskNode IXMLEditorForm SBCrypto ",c4=G0+h0,W9=F4,u9="null true false nil ",e6={className:"number",begin:I.NUMBER_RE,relevance:0},vd={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]},dC={className:"doctag",begin:"\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\b",relevance:0},qX={className:"comment",begin:"//",end:"$",relevance:0,contains:[I.PHRASAL_WORDS_MODE,dC]},RG={className:"comment",begin:"/\\*",end:"\\*/",relevance:0,contains:[I.PHRASAL_WORDS_MODE,dC]},HK={variants:[qX,RG]},Ed={$pattern:"[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*",keyword:Z,built_in:c4,class:W9,literal:"null true false nil "},$4={begin:"\\.\\s*"+I.UNDERSCORE_IDENT_RE,keywords:Ed,relevance:0},oB={className:"type",begin:":[ \\t]*("+x4.trim().replace(/\s/g,"|")+")",end:"[ \\t]*=",excludeEnd:!0},E8={className:"variable",keywords:Ed,begin:"[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*",relevance:0,contains:[oB,$4]},eB="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]*"+"\\(";return{name:"ISBL",case_insensitive:!0,keywords:Ed,illegal:"\\$|\\?|%|,|;$|~|#|@|{var QR="[0-9](_*[0-9])*",La=`\\.(${QR})`,ya="[0-9a-fA-F](_*[0-9a-fA-F])*",W09={className:"number",variants:[{begin:`(\\b(${QR})((${La})|\\.)?|(${La}))[eE][+-]?(${QR})[fFdD]?\\b`},{begin:`\\b(${QR})((${La})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${La})[fFdD]?\\b`},{begin:`\\b(${QR})[fFdD]\\b`},{begin:`\\b0[xX]((${ya})\\.?|(${ya})?\\.(${ya}))[pP][+-]?(${QR})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${ya})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function w09(I){var d="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",G=d+"(<"+d+"(\\s*,\\s*"+d+")*>)?",Z="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",C={className:"meta",begin:"@"+d,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]};let W=W09;return{name:"Java",aliases:["jsp"],keywords:Z,illegal:/<\/|#/,contains:[I.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface enum",end:/[{;=]/,excludeEnd:!0,relevance:1,keywords:"class interface enum",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"class",begin:"record\\s+"+I.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,excludeEnd:!0,end:/[{;=]/,keywords:Z,contains:[{beginKeywords:"record"},{begin:I.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[I.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:Z,relevance:0,contains:[I.C_BLOCK_COMMENT_MODE]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},{className:"function",begin:"("+G+"\\s+)+"+I.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:Z,contains:[{begin:I.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[I.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:Z,relevance:0,contains:[C,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,W,I.C_BLOCK_COMMENT_MODE]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},W,C]}}TV2.exports=w09});var bV2=Y((wF3,lV2)=>{var B09=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],A09=["true","false","null","undefined","NaN","Infinity"],V09=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],X09=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Y09=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],_09=["arguments","this","super","console","window","document","localStorage","module","global"],D09=[].concat(Y09,_09,V09,X09);function H09(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function mV2(I){return nF1("(?=",I,")")}function nF1(...I){return I.map((G)=>H09(G)).join("")}function F09(I){let d=($,{after:h})=>{let O="",end:""},C={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:($,h)=>{let O=$[0].length+$.index,T=$.input[O];if(T==="<"){h.ignoreMatch();return}if(T===">"){if(!d($,{after:O}))h.ignoreMatch()}}},W={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:B09,literal:A09,built_in:D09},w="[0-9](_?[0-9])*",B="\\.([0-9](_?[0-9])*)",A="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",V={className:"number",variants:[{begin:"(\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)((\\.([0-9](_?[0-9])*))|\\.)?|(\\.([0-9](_?[0-9])*)))[eE][+-]?([0-9](_?[0-9])*)\\b"},{begin:"\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)\\b((\\.([0-9](_?[0-9])*))\\b|\\.)?|(\\.([0-9](_?[0-9])*))\\b"},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},X={className:"subst",begin:"\\$\\{",end:"\\}",keywords:W,contains:[]},_={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[I.BACKSLASH_ESCAPE,X],subLanguage:"xml"}},F={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[I.BACKSLASH_ESCAPE,X],subLanguage:"css"}},g={className:"string",begin:"`",end:"`",contains:[I.BACKSLASH_ESCAPE,X]},K={className:"comment",variants:[I.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:"[A-Za-z$_][0-9A-Za-z$_]*(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),I.C_BLOCK_COMMENT_MODE,I.C_LINE_COMMENT_MODE]},Q=[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,_,F,g,V,I.REGEXP_MODE];X.contains=Q.concat({begin:/\{/,end:/\}/,keywords:W,contains:["self"].concat(Q)});let E=[].concat(K,X.contains),S=E.concat([{begin:/\(/,end:/\)/,keywords:W,contains:["self"].concat(E)}]),P={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:S};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:W,exports:{PARAMS_CONTAINS:S},illegal:/#(?![$_A-z])/,contains:[I.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,_,F,g,K,V,{begin:nF1(/[{,\n]\s*/,mV2(nF1(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,"[A-Za-z$_][0-9A-Za-z$_]*\\s*:"))),relevance:0,contains:[{className:"attr",begin:"[A-Za-z$_][0-9A-Za-z$_]*"+mV2("\\s*:"),relevance:0}]},{begin:"("+I.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[K,I.REGEXP_MODE,{className:"function",begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+I.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:I.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:S}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:Z.begin,end:Z.end},{begin:C.begin,"on:begin":C.isTrulyOpeningTag,end:C.end}],subLanguage:"xml",contains:[{begin:C.begin,end:C.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:W,contains:["self",I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),P],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:I.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[P,I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"})]},{variants:[{begin:"\\.[A-Za-z$_][0-9A-Za-z$_]*"},{begin:"\\$[A-Za-z$_][0-9A-Za-z$_]*"}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},I.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),"self",P]},{begin:"(get|set)\\s+(?=[A-Za-z$_][0-9A-Za-z$_]*\\()",end:/\{/,keywords:"get set",contains:[I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),{begin:/\(\)/},P]},{begin:/\$[(.]/}]}}lV2.exports=F09});var jV2=Y((BF3,hV2)=>{function g09(I){let G={className:"params",begin:/\(/,end:/\)/,contains:[{begin:/[\w-]+ *=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[\w-]+/}]}],relevance:0},Z={className:"function",begin:/:[\w\-.]+/,relevance:0},C={className:"string",begin:/\B([\/.])[\w\-.\/=]+/},W={className:"params",begin:/--[\w\-=\/]+/};return{name:"JBoss CLI",aliases:["wildfly-cli"],keywords:{$pattern:"[a-z-]+",keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},contains:[I.HASH_COMMENT_MODE,I.QUOTE_STRING_MODE,W,Z,C,G]}}hV2.exports=g09});var xV2=Y((AF3,kV2)=>{function J09(I){let d={literal:"true false null"},G=[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE],Z=[I.QUOTE_STRING_MODE,I.C_NUMBER_MODE],C={end:",",endsWithParent:!0,excludeEnd:!0,contains:Z,keywords:d},W={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[I.BACKSLASH_ESCAPE],illegal:"\\n"},I.inherit(C,{begin:/:/})].concat(G),illegal:"\\S"},w={begin:"\\[",end:"\\]",contains:[I.inherit(C)],illegal:"\\S"};return Z.push(W,w),G.forEach(function(B){Z.push(B)}),{name:"JSON",contains:Z,keywords:d,illegal:"\\S"}}kV2.exports=J09});var pV2=Y((VF3,cV2)=>{function K09(I){var d="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",G=["baremodule","begin","break","catch","ccall","const","continue","do","else","elseif","end","export","false","finally","for","function","global","if","import","in","isa","let","local","macro","module","quote","return","true","try","using","where","while"],Z=["ARGS","C_NULL","DEPOT_PATH","ENDIAN_BOM","ENV","Inf","Inf16","Inf32","Inf64","InsertionSort","LOAD_PATH","MergeSort","NaN","NaN16","NaN32","NaN64","PROGRAM_FILE","QuickSort","RoundDown","RoundFromZero","RoundNearest","RoundNearestTiesAway","RoundNearestTiesUp","RoundToZero","RoundUp","VERSION|0","devnull","false","im","missing","nothing","pi","stderr","stdin","stdout","true","undef","π","ℯ"],C=["AbstractArray","AbstractChannel","AbstractChar","AbstractDict","AbstractDisplay","AbstractFloat","AbstractIrrational","AbstractMatrix","AbstractRange","AbstractSet","AbstractString","AbstractUnitRange","AbstractVecOrMat","AbstractVector","Any","ArgumentError","Array","AssertionError","BigFloat","BigInt","BitArray","BitMatrix","BitSet","BitVector","Bool","BoundsError","CapturedException","CartesianIndex","CartesianIndices","Cchar","Cdouble","Cfloat","Channel","Char","Cint","Cintmax_t","Clong","Clonglong","Cmd","Colon","Complex","ComplexF16","ComplexF32","ComplexF64","CompositeException","Condition","Cptrdiff_t","Cshort","Csize_t","Cssize_t","Cstring","Cuchar","Cuint","Cuintmax_t","Culong","Culonglong","Cushort","Cvoid","Cwchar_t","Cwstring","DataType","DenseArray","DenseMatrix","DenseVecOrMat","DenseVector","Dict","DimensionMismatch","Dims","DivideError","DomainError","EOFError","Enum","ErrorException","Exception","ExponentialBackOff","Expr","Float16","Float32","Float64","Function","GlobalRef","HTML","IO","IOBuffer","IOContext","IOStream","IdDict","IndexCartesian","IndexLinear","IndexStyle","InexactError","InitError","Int","Int128","Int16","Int32","Int64","Int8","Integer","InterruptException","InvalidStateException","Irrational","KeyError","LinRange","LineNumberNode","LinearIndices","LoadError","MIME","Matrix","Method","MethodError","Missing","MissingException","Module","NTuple","NamedTuple","Nothing","Number","OrdinalRange","OutOfMemoryError","OverflowError","Pair","PartialQuickSort","PermutedDimsArray","Pipe","ProcessFailedException","Ptr","QuoteNode","Rational","RawFD","ReadOnlyMemoryError","Real","ReentrantLock","Ref","Regex","RegexMatch","RoundingMode","SegmentationFault","Set","Signed","Some","StackOverflowError","StepRange","StepRangeLen","StridedArray","StridedMatrix","StridedVecOrMat","StridedVector","String","StringIndexError","SubArray","SubString","SubstitutionString","Symbol","SystemError","Task","TaskFailedException","Text","TextDisplay","Timer","Tuple","Type","TypeError","TypeVar","UInt","UInt128","UInt16","UInt32","UInt64","UInt8","UndefInitializer","UndefKeywordError","UndefRefError","UndefVarError","Union","UnionAll","UnitRange","Unsigned","Val","Vararg","VecElement","VecOrMat","Vector","VersionNumber","WeakKeyDict","WeakRef"],W={$pattern:d,keyword:G,literal:Z,built_in:C},w={keywords:W,illegal:/<\//},B={className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},A={className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},V={className:"subst",begin:/\$\(/,end:/\)/,keywords:W},X={className:"variable",begin:"\\$"+d},_={className:"string",contains:[I.BACKSLASH_ESCAPE,V,X],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},F={className:"string",contains:[I.BACKSLASH_ESCAPE,V,X],begin:"`",end:"`"},g={className:"meta",begin:"@"+d},J={className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]};return w.name="Julia",w.contains=[B,A,_,F,g,J,I.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],V.contains=w.contains,w}cV2.exports=K09});var nV2=Y((XF3,iV2)=>{function N09(I){return{name:"Julia REPL",contains:[{className:"meta",begin:/^julia>/,relevance:10,starts:{end:/^(?![ ]{6})/,subLanguage:"julia"},aliases:["jldoctest"]}]}}iV2.exports=N09});var aV2=Y((YF3,rV2)=>{var fR="[0-9](_*[0-9])*",Pa=`\\.(${fR})`,$a="[0-9a-fA-F](_*[0-9a-fA-F])*",z09={className:"number",variants:[{begin:`(\\b(${fR})((${Pa})|\\.)?|(${Pa}))[eE][+-]?(${fR})[fFdD]?\\b`},{begin:`\\b(${fR})((${Pa})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${Pa})[fFdD]?\\b`},{begin:`\\b(${fR})[fFdD]\\b`},{begin:`\\b0[xX]((${$a})\\.?|(${$a})?\\.(${$a}))[pP][+-]?(${fR})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${$a})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function Q09(I){let d={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},G={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},Z={className:"symbol",begin:I.UNDERSCORE_IDENT_RE+"@"},C={className:"subst",begin:/\$\{/,end:/\}/,contains:[I.C_NUMBER_MODE]},W={className:"variable",begin:"\\$"+I.UNDERSCORE_IDENT_RE},w={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[W,C]},{begin:"'",end:"'",illegal:/\n/,contains:[I.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[I.BACKSLASH_ESCAPE,W,C]}]};C.contains.push(w);let B={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+I.UNDERSCORE_IDENT_RE+")?"},A={className:"meta",begin:"@"+I.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[I.inherit(w,{className:"meta-string"})]}]},V=z09,X=I.COMMENT("/\\*","\\*/",{contains:[I.C_BLOCK_COMMENT_MODE]}),_={variants:[{className:"type",begin:I.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},F=_;return F.variants[1].contains=[_],_.variants[1].contains=[F],{name:"Kotlin",aliases:["kt","kts"],keywords:d,contains:[I.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),I.C_LINE_COMMENT_MODE,X,G,Z,B,A,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:d,relevance:5,contains:[{begin:I.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[I.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:d,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[_,I.C_LINE_COMMENT_MODE,X],relevance:0},I.C_LINE_COMMENT_MODE,X,B,A,w,I.C_NUMBER_MODE]},X]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},I.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},B,A]},w,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` +`},V]}}rV2.exports=Q09});var oV2=Y((_F3,sV2)=>{function f09(I){let C={$pattern:"[a-zA-Z_][\\w.]*|&[lg]t;",literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},W=I.COMMENT("",{relevance:0}),w={className:"meta",begin:"\\[noprocess\\]",starts:{end:"\\[/noprocess\\]",returnEnd:!0,contains:[W]}},B={className:"meta",begin:"\\[/noprocess|<\\?(lasso(script)?|=)"},A={className:"symbol",begin:"'[a-zA-Z_][\\w.]*'"},V=[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.inherit(I.C_NUMBER_MODE,{begin:I.C_NUMBER_RE+"|(-?infinity|NaN)\\b"}),I.inherit(I.APOS_STRING_MODE,{illegal:null}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{variants:[{begin:"[#$][a-zA-Z_][\\w.]*"},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"type",begin:"::\\s*",end:"[a-zA-Z_][\\w.]*",illegal:"\\W"},{className:"params",variants:[{begin:"-(?!infinity)[a-zA-Z_][\\w.]*",relevance:0},{begin:"(\\.\\.\\.)"}]},{begin:/(->|\.)\s*/,relevance:0,contains:[A]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[I.inherit(I.TITLE_MODE,{begin:"[a-zA-Z_][\\w.]*(=(?!>))?|[-+*/%](?!>)"})]}];return{name:"Lasso",aliases:["ls","lassoscript"],case_insensitive:!0,keywords:C,contains:[{className:"meta",begin:"\\]|\\?>",relevance:0,starts:{end:"\\[|<\\?(lasso(script)?|=)",returnEnd:!0,relevance:0,contains:[W]}},w,B,{className:"meta",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",keywords:C,contains:[{className:"meta",begin:"\\]|\\?>",relevance:0,starts:{end:"\\[noprocess\\]|<\\?(lasso(script)?|=)",returnEnd:!0,contains:[W]}},w,B].concat(V)}},{className:"meta",begin:"\\[",relevance:0},{className:"meta",begin:"^#!",end:"lasso9$",relevance:10}].concat(V)}}sV2.exports=f09});var tV2=Y((DF3,eV2)=>{function q09(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function R09(...I){return"("+I.map((G)=>q09(G)).join("|")+")"}function U09(I){let d=R09(...["(?:NeedsTeXFormat|RequirePackage|GetIdInfo)","Provides(?:Expl)?(?:Package|Class|File)","(?:DeclareOption|ProcessOptions)","(?:documentclass|usepackage|input|include)","makeat(?:letter|other)","ExplSyntax(?:On|Off)","(?:new|renew|provide)?command","(?:re)newenvironment","(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand","(?:New|Renew|Provide|Declare)DocumentEnvironment","(?:(?:e|g|x)?def|let)","(?:begin|end)","(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)","caption","(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)","(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)","(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)","(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)","(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)","(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)"].map((c)=>c+"(?![a-zA-Z@:_])")),G=new RegExp(["(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*","[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}","[qs]__?[a-zA-Z](?:_?[a-zA-Z])+","use(?:_i)?:[a-zA-Z]*","(?:else|fi|or):","(?:if|cs|exp):w","(?:hbox|vbox):n","::[a-zA-Z]_unbraced","::[a-zA-Z:]"].map((c)=>c+"(?![a-zA-Z:_])").join("|")),Z=[{begin:/[a-zA-Z@]+/},{begin:/[^a-zA-Z@]?/}],C=[{begin:/\^{6}[0-9a-f]{6}/},{begin:/\^{5}[0-9a-f]{5}/},{begin:/\^{4}[0-9a-f]{4}/},{begin:/\^{3}[0-9a-f]{3}/},{begin:/\^{2}[0-9a-f]{2}/},{begin:/\^{2}[\u0000-\u007f]/}],W={className:"keyword",begin:/\\/,relevance:0,contains:[{endsParent:!0,begin:d},{endsParent:!0,begin:G},{endsParent:!0,variants:C},{endsParent:!0,relevance:0,variants:Z}]},w={className:"params",relevance:0,begin:/#+\d?/},B={variants:C},A={className:"built_in",relevance:0,begin:/[$&^_]/},V={className:"meta",begin:"% !TeX",end:"$",relevance:10},X=I.COMMENT("%","$",{relevance:0}),_=[W,w,B,A,V,X],F={begin:/\{/,end:/\}/,relevance:0,contains:["self",..._]},g=I.inherit(F,{relevance:0,endsParent:!0,contains:[F,..._]}),J={begin:/\[/,end:/\]/,endsParent:!0,relevance:0,contains:[F,..._]},K={begin:/\s+/,relevance:0},Q=[g],E=[J],S=function(c,c1){return{contains:[K],starts:{relevance:0,contains:c,starts:c1}}},P=function(c,c1){return{begin:"\\\\"+c+"(?![a-zA-Z@:_])",keywords:{$pattern:/\\[a-zA-Z]+/,keyword:"\\"+c},relevance:0,contains:[K],starts:c1}},$=function(c,c1){return I.inherit({begin:"\\\\begin(?=[ \t]*(\\r?\\n[ \t]*)?\\{"+c+"\\})",keywords:{$pattern:/\\[a-zA-Z]+/,keyword:"\\begin"},relevance:0},S(Q,c1))},h=(c="string")=>{return I.END_SAME_AS_BEGIN({className:c,begin:/(.|\r?\n)/,end:/(.|\r?\n)/,excludeBegin:!0,excludeEnd:!0,endsParent:!0})},O=function(c){return{className:"string",end:"(?=\\\\end\\{"+c+"\\})"}},T=(c="string")=>{return{relevance:0,begin:/\{/,starts:{endsParent:!0,contains:[{className:c,end:/(?=\})/,endsParent:!0,contains:[{begin:/\{/,end:/\}/,relevance:0,contains:["self"]}]}]}}},V1=[...["verb","lstinline"].map((c)=>P(c,{contains:[h()]})),P("mint",S(Q,{contains:[h()]})),P("mintinline",S(Q,{contains:[T(),h()]})),P("url",{contains:[T("link"),T("link")]}),P("hyperref",{contains:[T("link")]}),P("href",S(E,{contains:[T("link")]})),...[].concat(...["","\\*"].map((c)=>[$("verbatim"+c,O("verbatim"+c)),$("filecontents"+c,S(Q,O("filecontents"+c))),...["","B","L"].map((c1)=>$(c1+"Verbatim"+c,S(E,O(c1+"Verbatim"+c))))])),$("minted",S(E,S(Q,O("minted"))))];return{name:"LaTeX",aliases:["tex"],contains:[...V1,..._]}}eV2.exports=U09});var dX2=Y((HF3,IX2)=>{function v09(I){return{name:"LDIF",contains:[{className:"attribute",begin:"^dn",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0},relevance:10},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0}},{className:"literal",begin:"^-",end:"$"},I.HASH_COMMENT_MODE]}}IX2.exports=v09});var ZX2=Y((FF3,GX2)=>{function E09(I){return{name:"Leaf",contains:[{className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:/ \{/,returnBegin:!0,excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}GX2.exports=E09});var BX2=Y((gF3,wX2)=>{var M09=(I)=>{return{IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]}}},S09=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],L09=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],CX2=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],WX2=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],y09=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse(),P09=CX2.concat(WX2);function $09(I){let d=M09(I),G=P09,Z="and or not only",C="[\\w-]+",W="([\\w-]+|@\\{[\\w-]+\\})",w=[],B=[],A=function(P){return{className:"string",begin:"~?"+P+".*?"+P}},V=function(P,$,h){return{className:P,begin:$,relevance:h}},X={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:L09.join(" ")},_={begin:"\\(",end:"\\)",contains:B,keywords:X,relevance:0};B.push(I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,A("'"),A('"'),I.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},d.HEXCOLOR,_,V("variable","@@?[\\w-]+",10),V("variable","@\\{[\\w-]+\\}"),V("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},d.IMPORTANT);let F=B.concat({begin:/\{/,end:/\}/,contains:w}),g={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(B)},J={begin:W+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},{className:"attribute",begin:"\\b("+y09.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:B}}]},K={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:X,returnEnd:!0,contains:B,relevance:0}},Q={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:F}},E={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:W,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,g,V("keyword","all\\b"),V("variable","@\\{[\\w-]+\\}"),{begin:"\\b("+S09.join("|")+")\\b",className:"selector-tag"},V("selector-tag",W+"%?",0),V("selector-id","#"+W),V("selector-class","\\."+W,0),V("selector-tag","&",0),d.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+CX2.join("|")+")"},{className:"selector-pseudo",begin:"::("+WX2.join("|")+")"},{begin:"\\(",end:"\\)",contains:F},{begin:"!important"}]},S={begin:`[\\w-]+:(:)?(${G.join("|")})`,returnBegin:!0,contains:[E]};return w.push(I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,K,Q,S,J,E),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:w}}wX2.exports=$09});var VX2=Y((JF3,AX2)=>{function u09(I){var d="[a-zA-Z_\\-+\\*\\/<=>&#][a-zA-Z0-9_\\-+*\\/<=>&#!]*",G="\\|[^]*?\\|",Z="(-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|-)?\\d+)?",C={className:"literal",begin:"\\b(t{1}|nil)\\b"},W={className:"number",variants:[{begin:Z,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+Z+" +"+Z,end:"\\)"}]},w=I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),B=I.COMMENT(";","$",{relevance:0}),A={begin:"\\*",end:"\\*"},V={className:"symbol",begin:"[:&]"+d},X={begin:d,relevance:0},_={begin:G},F={begin:"\\(",end:"\\)",contains:["self",C,w,W,X]},g={contains:[W,w,A,V,F,X],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{name:"quote"}},{begin:"'"+G}]},J={variants:[{begin:"'"+d},{begin:"#'"+d+"(::"+d+")*"}]},K={begin:"\\(\\s*",end:"\\)"},Q={endsWithParent:!0,relevance:0};return K.contains=[{className:"name",variants:[{begin:d,relevance:0},{begin:G}]},Q],Q.contains=[g,J,K,C,W,w,B,A,V,_,X],{name:"Lisp",illegal:/\S/,contains:[W,I.SHEBANG(),C,w,B,g,J,K,X]}}AX2.exports=u09});var YX2=Y((KF3,XX2)=>{function T09(I){let d={className:"variable",variants:[{begin:"\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\[.+\\])?(?:\\s*?)"},{begin:"\\$_[A-Z]+"}],relevance:0},G=[I.C_BLOCK_COMMENT_MODE,I.HASH_COMMENT_MODE,I.COMMENT("--","$"),I.COMMENT("[^:]//","$")],Z=I.inherit(I.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z][A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),C=I.inherit(I.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{name:"LiveCode",case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress difference directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract symmetric union unload vectorDotProduct wait write"},contains:[d,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[d,C,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE,Z]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[C,Z],relevance:0},{beginKeywords:"command on",end:"$",contains:[d,C,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE,Z]},{className:"meta",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE,Z].concat(G),illegal:";$|^\\[|^=|&|\\{"}}XX2.exports=T09});var DX2=Y((NF3,_X2)=>{var O09=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],m09=["true","false","null","undefined","NaN","Infinity"],l09=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],b09=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],h09=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],j09=["arguments","this","super","console","window","document","localStorage","module","global"],k09=[].concat(h09,j09,l09,b09);function x09(I){let d=["npm","print"],G=["yes","no","on","off","it","that","void"],Z=["then","unless","until","loop","of","by","when","and","or","is","isnt","not","it","that","otherwise","from","to","til","fallthrough","case","enum","native","list","map","__hasProp","__extends","__slice","__bind","__indexOf"],C={keyword:O09.concat(Z),literal:m09.concat(G),built_in:k09.concat(d)},W="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",w=I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*"}),B={className:"subst",begin:/#\{/,end:/\}/,keywords:C},A={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:C},V=[I.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[I.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[I.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[I.BACKSLASH_ESCAPE,B,A]},{begin:/"/,end:/"/,contains:[I.BACKSLASH_ESCAPE,B,A]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"regexp",variants:[{begin:"//",end:"//[gim]*",contains:[B,I.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\.|[^\\\n])*?\/[gim]*(?=\W)/}]},{begin:"@[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*"},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];B.contains=V;let X={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:C,contains:["self"].concat(V)}]},_={begin:"(#=>|=>|\\|>>|-?->|!->)"};return{name:"LiveScript",aliases:["ls"],keywords:C,illegal:/\/\*/,contains:V.concat([I.COMMENT("\\/\\*","\\*\\/"),I.HASH_COMMENT_MODE,_,{className:"function",contains:[w,X],returnBegin:!0,variants:[{begin:"([A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*\\s*(?:=|:=)\\s*)?(\\(.*\\)\\s*)?\\B->\\*?",end:"->\\*?"},{begin:"([A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*\\s*(?:=|:=)\\s*)?!?(\\(.*\\)\\s*)?\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"([A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*\\s*(?:=|:=)\\s*)?(\\(.*\\)\\s*)?\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[w]},w]},{begin:"[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*:",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}_X2.exports=x09});var FX2=Y((zF3,HX2)=>{function c09(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function ua(...I){return I.map((G)=>c09(G)).join("")}function p09(I){let d=/([-a-zA-Z$._][\w$.-]*)/,G={className:"type",begin:/\bi\d+(?=\s|\b)/},Z={className:"operator",relevance:0,begin:/=/},C={className:"punctuation",relevance:0,begin:/,/},W={className:"number",variants:[{begin:/0[xX][a-fA-F0-9]+/},{begin:/-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/}],relevance:0},w={className:"symbol",variants:[{begin:/^\s*[a-z]+:/}],relevance:0},B={className:"variable",variants:[{begin:ua(/%/,d)},{begin:/%\d+/},{begin:/#\d+/}]},A={className:"title",variants:[{begin:ua(/@/,d)},{begin:/@\d+/},{begin:ua(/!/,d)},{begin:ua(/!\d+/,d)},{begin:/!\d+/}]};return{name:"LLVM IR",keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[G,I.COMMENT(/;\s*$/,null,{relevance:0}),I.COMMENT(/;/,/$/),I.QUOTE_STRING_MODE,{className:"string",variants:[{begin:/"/,end:/[^\\]"/}]},A,C,Z,B,w,W]}}HX2.exports=p09});var JX2=Y((QF3,gX2)=>{function i09(I){var d={className:"subst",begin:/\\[tn"\\]/},G={className:"string",begin:'"',end:'"',contains:[d]},Z={className:"number",relevance:0,begin:I.C_NUMBER_RE},C={className:"literal",variants:[{begin:"\\b(PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{begin:"\\b(XP_ERROR_(EXPERIENCES_DISABLED|EXPERIENCE_(DISABLED|SUSPENDED)|INVALID_(EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(FOUND|PERMITTED(_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(_OBJECT)?|(DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(_(BY_(LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(PARCEL(_OWNER)?|REGION)))?|CAMERA_(PITCH|DISTANCE|BEHINDNESS_(ANGLE|LAG)|(FOCUS|POSITION)(_(THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(ROOT|SET|ALL_(OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(IVE|_(ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(FWD|BACK|(ROT_)?(LEFT|RIGHT)|UP|DOWN|(ML_)?LBUTTON)|PERMISSION_(RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(_START)?|TELEPORT|MEDIA)|OBJECT_(CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(COUNT|EQUIVALENCE)|RETURN_(PARCEL(_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(_TAG)?|CREATOR|ATTACHED_(POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(BODY_SHAPE|PATHFINDING)_TYPE|(RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(MEMORY|TIME))|TYPE_(INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(DEBUG|PUBLIC)_CHANNEL|ATTACH_(AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](SHOULDER|HAND|FOOT|EAR|EYE|[UL](ARM|LEG)|HIP)|(LEFT|RIGHT)_PEC|HUD_(CENTER_[12]|TOP_(RIGHT|CENTER|LEFT)|BOTTOM(_(RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(BASE|TIP)|[LR]WING|FACE_(JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(ONLINE|NAME|BORN|SIM_(POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(ON_FILE|USED)|REMOTE_DATA_(CHANNEL|REQUEST|REPLY)|PSYS_(PART_(BF_(ZERO|ONE(_MINUS_(DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(START|END)_(COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(RIBBON|WIND|INTERP_(COLOR|SCALE)|BOUNCE|FOLLOW_(SRC|VELOCITY)|TARGET_(POS|LINEAR)|EMISSIVE)_MASK)|SRC_(MAX_AGE|PATTERN|ANGLE_(BEGIN|END)|BURST_(RATE|PART_COUNT|RADIUS|SPEED_(MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(DROP|EXPLODE|ANGLE(_CONE(_EMPTY)?)?)))|VEHICLE_(REFERENCE_FRAME|TYPE_(NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(LINEAR|ANGULAR)_(FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(LINEAR|ANGULAR)_(DEFLECTION_(EFFICIENCY|TIMESCALE)|MOTOR_(DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(EFFICIENCY|TIMESCALE)|BANKING_(EFFICIENCY|MIX|TIMESCALE)|FLAG_(NO_DEFLECTION_UP|LIMIT_(ROLL_ONLY|MOTOR_UP)|HOVER_((WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(ALLOW_UNSIT|ALPHA_MODE(_(BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(_(BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(_(STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(NONE|LOW|MEDIUM|HIGH)|BUMP_(NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(TYPE_(SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(MIRROR|INVERT))|PHYSICS(_(SHAPE_(CONVEX|NONE|PRIM|TYPE)))?|(POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(ALT_IMAGE_ENABLE|CONTROLS|(CURRENT|HOME)_URL|AUTO_(LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(WIDTH|HEIGHT)_PIXELS|WHITELIST(_ENABLE)?|PERMS_(INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(STANDARD|MINI)|PERM_(NONE|OWNER|GROUP|ANYONE)|MAX_(URL_LENGTH|WHITELIST_(SIZE|COUNT)|(WIDTH|HEIGHT)_PIXELS)))|MASK_(BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(MEDIA_COMMAND_(STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(ALLOW_(FLY|(GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(GROUP_)?OBJECTS)|USE_(ACCESS_(GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(GROUP|ALL)_OBJECT_ENTRY)|COUNT_(TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(HIDE|DEFAULT)|REGION_FLAG_(ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(METHOD|MIMETYPE|BODY_(MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(INVALID_(AGENT|LINK_OBJECT)|NO(T_EXPERIENCE|_(ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(TRIM(_(HEAD|TAIL))?)|CLICK_ACTION_(NONE|TOUCH|SIT|BUY|PAY|OPEN(_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(NONE|SCRIPT_MEMORY)|RC_(DATA_FLAGS|DETECT_PHANTOM|GET_(LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(TYPES|AGENTS|(NON)?PHYSICAL|LAND))|RCERR_(CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(ALLOWED_(AGENT|GROUP)_(ADD|REMOVE)|BANNED_AGENT_(ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(COMMAND|CMD_(PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(CMD_((SMOOTH_)?STOP|JUMP)|DESIRED_(TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(_([ABCD]|NONE))?|MAX_(DECEL|TURN_RADIUS|(ACCEL|SPEED)))|PURSUIT_(OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(EVADE_(HIDDEN|SPOTTED)|FAILURE_(DYNAMIC_PATHFINDING_DISABLED|INVALID_(GOAL|START)|NO_(NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(PARCEL_)?UNREACHABLE)|(GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(_(FAST|NONE|SLOW))?|CONTENT_TYPE_(ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(RADIUS|STATIC)|(PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{begin:"\\b(FALSE|TRUE)\\b"},{begin:"\\b(ZERO_ROTATION)\\b"},{begin:"\\b(EOF|JSON_(ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(GRANTED|DENIED))\\b"},{begin:"\\b(ZERO_VECTOR|TOUCH_INVALID_(TEXCOORD|VECTOR))\\b"}]},W={className:"built_in",begin:"\\b(ll(AgentInExperience|(Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(Details|ErrorMessage)|ReturnObjectsBy(ID|Owner)|Json(2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(Mag|Norm|Dist)|Rot(Between|2(Euler|Fwd|Left|Up))|(Euler|Axes)2Rot|Whisper|(Region|Owner)?Say|Shout|Listen(Control|Remove)?|Sensor(Repeat|Remove)?|Detected(Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|([GS]et)(AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(Scale|Offset|Rotate)Texture|(Rot)?Target(Remove)?|(Stop)?MoveToTarget|Apply(Rotational)?Impulse|Set(KeyframedMotion|ContentType|RegionPos|(Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(Queueing|Radius)|Vehicle(Type|(Float|Vector|Rotation)Param)|(Touch|Sit)?Text|Camera(Eye|At)Offset|PrimitiveParams|ClickAction|Link(Alpha|Color|PrimitiveParams(Fast)?|Texture(Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get((Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(PrimitiveParams|Number(OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(Details|PermMask|PrimCount)|Parcel(MaxPrims|Details|Prim(Count|Owners))|Attached(List)?|(SPMax|Free|Used)Memory|Region(Name|TimeDilation|FPS|Corner|AgentCount)|Root(Position|Rotation)|UnixTime|(Parcel|Region)Flags|(Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(Prims|NotecardLines|Sides)|Animation(List)?|(Camera|Local)(Pos|Rot)|Vel|Accel|Omega|Time(stamp|OfDay)|(Object|CenterOf)?Mass|MassMKS|Energy|Owner|(Owner)?Key|SunDirection|Texture(Offset|Scale|Rot)|Inventory(Number|Name|Key|Type|Creator|PermMask)|Permissions(Key)?|StartParameter|List(Length|EntryType)|Date|Agent(Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(Name|State))|(Get|Reset|GetAndReset)Time|PlaySound(Slave)?|LoopSound(Master|Slave)?|(Trigger|Stop|Preload)Sound|((Get|Delete)Sub|Insert)String|To(Upper|Lower)|Give(InventoryList|Money)|RezObject|(Stop)?LookAt|Sleep|CollisionFilter|(Take|Release)Controls|DetachFromAvatar|AttachToAvatar(Temp)?|InstantMessage|(GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(Length|Trim)|(Start|Stop)Animation|TargetOmega|Request(Experience)?Permissions|(Create|Break)Link|BreakAllLinks|(Give|Remove)Inventory|Water|PassTouches|Request(Agent|Inventory)Data|TeleportAgent(Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(Axis|Angle)|A(cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(CSV|Integer|Json|Float|String|Key|Vector|Rot|List(Strided)?)|DeleteSubList|List(Statistics|Sort|Randomize|(Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(Slope|Normal|Contour)|GroundRepel|(Set|Remove)VehicleFlags|SitOnLink|(AvatarOn)?(Link)?SitTarget|Script(Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(Integer|String)ToBase64|XorBase64|Log(10)?|Base64To(String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(Load|Release|(E|Une)scape)URL|ParcelMedia(CommandList|Query)|ModPow|MapDestination|(RemoveFrom|AddTo|Reset)Land(Pass|Ban)List|(Set|Clear)CameraParams|HTTP(Request|Response)|TextBox|DetectedTouch(UV|Face|Pos|(N|Bin)ormal|ST)|(MD5|SHA1|DumpList2)String|Request(Secure)?URL|Clear(Prim|Link)Media|(Link)?ParticleSystem|(Get|Request)(Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"};return{name:"LSL (Linden Scripting Language)",illegal:":",contains:[G,{className:"comment",variants:[I.COMMENT("//","$"),I.COMMENT("/\\*","\\*/")],relevance:0},Z,{className:"section",variants:[{begin:"\\b(state|default)\\b"},{begin:"\\b(state_(entry|exit)|touch(_(start|end))?|(land_)?collision(_(start|end))?|timer|listen|(no_)?sensor|control|(not_)?at_(rot_)?target|money|email|experience_permissions(_denied)?|run_time_permissions|changed|attach|dataserver|moving_(start|end)|link_message|(on|object)_rez|remote_data|http_re(sponse|quest)|path_update|transaction_result)\\b"}]},W,C,{className:"type",begin:"\\b(integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}}gX2.exports=i09});var NX2=Y((fF3,KX2)=>{function n09(I){let Z={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},C=[I.COMMENT("--(?!\\[=*\\[)","$"),I.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[Z],relevance:10})];return{name:"Lua",keywords:{$pattern:I.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:C.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[I.inherit(I.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:C}].concat(C)},I.C_NUMBER_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[Z],relevance:5}])}}KX2.exports=n09});var QX2=Y((qF3,zX2)=>{function r09(I){let d={className:"variable",variants:[{begin:"\\$\\("+I.UNDERSCORE_IDENT_RE+"\\)",contains:[I.BACKSLASH_ESCAPE]},{begin:/\$[@%{var a09=["AASTriangle","AbelianGroup","Abort","AbortKernels","AbortProtect","AbortScheduledTask","Above","Abs","AbsArg","AbsArgPlot","Absolute","AbsoluteCorrelation","AbsoluteCorrelationFunction","AbsoluteCurrentValue","AbsoluteDashing","AbsoluteFileName","AbsoluteOptions","AbsolutePointSize","AbsoluteThickness","AbsoluteTime","AbsoluteTiming","AcceptanceThreshold","AccountingForm","Accumulate","Accuracy","AccuracyGoal","ActionDelay","ActionMenu","ActionMenuBox","ActionMenuBoxOptions","Activate","Active","ActiveClassification","ActiveClassificationObject","ActiveItem","ActivePrediction","ActivePredictionObject","ActiveStyle","AcyclicGraphQ","AddOnHelpPath","AddSides","AddTo","AddToSearchIndex","AddUsers","AdjacencyGraph","AdjacencyList","AdjacencyMatrix","AdjacentMeshCells","AdjustmentBox","AdjustmentBoxOptions","AdjustTimeSeriesForecast","AdministrativeDivisionData","AffineHalfSpace","AffineSpace","AffineStateSpaceModel","AffineTransform","After","AggregatedEntityClass","AggregationLayer","AircraftData","AirportData","AirPressureData","AirTemperatureData","AiryAi","AiryAiPrime","AiryAiZero","AiryBi","AiryBiPrime","AiryBiZero","AlgebraicIntegerQ","AlgebraicNumber","AlgebraicNumberDenominator","AlgebraicNumberNorm","AlgebraicNumberPolynomial","AlgebraicNumberTrace","AlgebraicRules","AlgebraicRulesData","Algebraics","AlgebraicUnitQ","Alignment","AlignmentMarker","AlignmentPoint","All","AllowAdultContent","AllowedCloudExtraParameters","AllowedCloudParameterExtensions","AllowedDimensions","AllowedFrequencyRange","AllowedHeads","AllowGroupClose","AllowIncomplete","AllowInlineCells","AllowKernelInitialization","AllowLooseGrammar","AllowReverseGroupClose","AllowScriptLevelChange","AllowVersionUpdate","AllTrue","Alphabet","AlphabeticOrder","AlphabeticSort","AlphaChannel","AlternateImage","AlternatingFactorial","AlternatingGroup","AlternativeHypothesis","Alternatives","AltitudeMethod","AmbientLight","AmbiguityFunction","AmbiguityList","Analytic","AnatomyData","AnatomyForm","AnatomyPlot3D","AnatomySkinStyle","AnatomyStyling","AnchoredSearch","And","AndersonDarlingTest","AngerJ","AngleBisector","AngleBracket","AnglePath","AnglePath3D","AngleVector","AngularGauge","Animate","AnimationCycleOffset","AnimationCycleRepetitions","AnimationDirection","AnimationDisplayTime","AnimationRate","AnimationRepetitions","AnimationRunning","AnimationRunTime","AnimationTimeIndex","Animator","AnimatorBox","AnimatorBoxOptions","AnimatorElements","Annotate","Annotation","AnnotationDelete","AnnotationKeys","AnnotationRules","AnnotationValue","Annuity","AnnuityDue","Annulus","AnomalyDetection","AnomalyDetector","AnomalyDetectorFunction","Anonymous","Antialiasing","AntihermitianMatrixQ","Antisymmetric","AntisymmetricMatrixQ","Antonyms","AnyOrder","AnySubset","AnyTrue","Apart","ApartSquareFree","APIFunction","Appearance","AppearanceElements","AppearanceRules","AppellF1","Append","AppendCheck","AppendLayer","AppendTo","Apply","ApplySides","ArcCos","ArcCosh","ArcCot","ArcCoth","ArcCsc","ArcCsch","ArcCurvature","ARCHProcess","ArcLength","ArcSec","ArcSech","ArcSin","ArcSinDistribution","ArcSinh","ArcTan","ArcTanh","Area","Arg","ArgMax","ArgMin","ArgumentCountQ","ARIMAProcess","ArithmeticGeometricMean","ARMAProcess","Around","AroundReplace","ARProcess","Array","ArrayComponents","ArrayDepth","ArrayFilter","ArrayFlatten","ArrayMesh","ArrayPad","ArrayPlot","ArrayQ","ArrayResample","ArrayReshape","ArrayRules","Arrays","Arrow","Arrow3DBox","ArrowBox","Arrowheads","ASATriangle","Ask","AskAppend","AskConfirm","AskDisplay","AskedQ","AskedValue","AskFunction","AskState","AskTemplateDisplay","AspectRatio","AspectRatioFixed","Assert","AssociateTo","Association","AssociationFormat","AssociationMap","AssociationQ","AssociationThread","AssumeDeterministic","Assuming","Assumptions","AstronomicalData","Asymptotic","AsymptoticDSolveValue","AsymptoticEqual","AsymptoticEquivalent","AsymptoticGreater","AsymptoticGreaterEqual","AsymptoticIntegrate","AsymptoticLess","AsymptoticLessEqual","AsymptoticOutputTracker","AsymptoticProduct","AsymptoticRSolveValue","AsymptoticSolve","AsymptoticSum","Asynchronous","AsynchronousTaskObject","AsynchronousTasks","Atom","AtomCoordinates","AtomCount","AtomDiagramCoordinates","AtomList","AtomQ","AttentionLayer","Attributes","Audio","AudioAmplify","AudioAnnotate","AudioAnnotationLookup","AudioBlockMap","AudioCapture","AudioChannelAssignment","AudioChannelCombine","AudioChannelMix","AudioChannels","AudioChannelSeparate","AudioData","AudioDelay","AudioDelete","AudioDevice","AudioDistance","AudioEncoding","AudioFade","AudioFrequencyShift","AudioGenerator","AudioIdentify","AudioInputDevice","AudioInsert","AudioInstanceQ","AudioIntervals","AudioJoin","AudioLabel","AudioLength","AudioLocalMeasurements","AudioLooping","AudioLoudness","AudioMeasurements","AudioNormalize","AudioOutputDevice","AudioOverlay","AudioPad","AudioPan","AudioPartition","AudioPause","AudioPitchShift","AudioPlay","AudioPlot","AudioQ","AudioRecord","AudioReplace","AudioResample","AudioReverb","AudioReverse","AudioSampleRate","AudioSpectralMap","AudioSpectralTransformation","AudioSplit","AudioStop","AudioStream","AudioStreams","AudioTimeStretch","AudioTracks","AudioTrim","AudioType","AugmentedPolyhedron","AugmentedSymmetricPolynomial","Authenticate","Authentication","AuthenticationDialog","AutoAction","Autocomplete","AutocompletionFunction","AutoCopy","AutocorrelationTest","AutoDelete","AutoEvaluateEvents","AutoGeneratedPackage","AutoIndent","AutoIndentSpacings","AutoItalicWords","AutoloadPath","AutoMatch","Automatic","AutomaticImageSize","AutoMultiplicationSymbol","AutoNumberFormatting","AutoOpenNotebooks","AutoOpenPalettes","AutoQuoteCharacters","AutoRefreshed","AutoRemove","AutorunSequencing","AutoScaling","AutoScroll","AutoSpacing","AutoStyleOptions","AutoStyleWords","AutoSubmitting","Axes","AxesEdge","AxesLabel","AxesOrigin","AxesStyle","AxiomaticTheory","Axis","BabyMonsterGroupB","Back","Background","BackgroundAppearance","BackgroundTasksSettings","Backslash","Backsubstitution","Backward","Ball","Band","BandpassFilter","BandstopFilter","BarabasiAlbertGraphDistribution","BarChart","BarChart3D","BarcodeImage","BarcodeRecognize","BaringhausHenzeTest","BarLegend","BarlowProschanImportance","BarnesG","BarOrigin","BarSpacing","BartlettHannWindow","BartlettWindow","BaseDecode","BaseEncode","BaseForm","Baseline","BaselinePosition","BaseStyle","BasicRecurrentLayer","BatchNormalizationLayer","BatchSize","BatesDistribution","BattleLemarieWavelet","BayesianMaximization","BayesianMaximizationObject","BayesianMinimization","BayesianMinimizationObject","Because","BeckmannDistribution","Beep","Before","Begin","BeginDialogPacket","BeginFrontEndInteractionPacket","BeginPackage","BellB","BellY","Below","BenfordDistribution","BeniniDistribution","BenktanderGibratDistribution","BenktanderWeibullDistribution","BernoulliB","BernoulliDistribution","BernoulliGraphDistribution","BernoulliProcess","BernsteinBasis","BesselFilterModel","BesselI","BesselJ","BesselJZero","BesselK","BesselY","BesselYZero","Beta","BetaBinomialDistribution","BetaDistribution","BetaNegativeBinomialDistribution","BetaPrimeDistribution","BetaRegularized","Between","BetweennessCentrality","BeveledPolyhedron","BezierCurve","BezierCurve3DBox","BezierCurve3DBoxOptions","BezierCurveBox","BezierCurveBoxOptions","BezierFunction","BilateralFilter","Binarize","BinaryDeserialize","BinaryDistance","BinaryFormat","BinaryImageQ","BinaryRead","BinaryReadList","BinarySerialize","BinaryWrite","BinCounts","BinLists","Binomial","BinomialDistribution","BinomialProcess","BinormalDistribution","BiorthogonalSplineWavelet","BipartiteGraphQ","BiquadraticFilterModel","BirnbaumImportance","BirnbaumSaundersDistribution","BitAnd","BitClear","BitGet","BitLength","BitNot","BitOr","BitSet","BitShiftLeft","BitShiftRight","BitXor","BiweightLocation","BiweightMidvariance","Black","BlackmanHarrisWindow","BlackmanNuttallWindow","BlackmanWindow","Blank","BlankForm","BlankNullSequence","BlankSequence","Blend","Block","BlockchainAddressData","BlockchainBase","BlockchainBlockData","BlockchainContractValue","BlockchainData","BlockchainGet","BlockchainKeyEncode","BlockchainPut","BlockchainTokenData","BlockchainTransaction","BlockchainTransactionData","BlockchainTransactionSign","BlockchainTransactionSubmit","BlockMap","BlockRandom","BlomqvistBeta","BlomqvistBetaTest","Blue","Blur","BodePlot","BohmanWindow","Bold","Bond","BondCount","BondList","BondQ","Bookmarks","Boole","BooleanConsecutiveFunction","BooleanConvert","BooleanCountingFunction","BooleanFunction","BooleanGraph","BooleanMaxterms","BooleanMinimize","BooleanMinterms","BooleanQ","BooleanRegion","Booleans","BooleanStrings","BooleanTable","BooleanVariables","BorderDimensions","BorelTannerDistribution","Bottom","BottomHatTransform","BoundaryDiscretizeGraphics","BoundaryDiscretizeRegion","BoundaryMesh","BoundaryMeshRegion","BoundaryMeshRegionQ","BoundaryStyle","BoundedRegionQ","BoundingRegion","Bounds","Box","BoxBaselineShift","BoxData","BoxDimensions","Boxed","Boxes","BoxForm","BoxFormFormatTypes","BoxFrame","BoxID","BoxMargins","BoxMatrix","BoxObject","BoxRatios","BoxRotation","BoxRotationPoint","BoxStyle","BoxWhiskerChart","Bra","BracketingBar","BraKet","BrayCurtisDistance","BreadthFirstScan","Break","BridgeData","BrightnessEqualize","BroadcastStationData","Brown","BrownForsytheTest","BrownianBridgeProcess","BrowserCategory","BSplineBasis","BSplineCurve","BSplineCurve3DBox","BSplineCurve3DBoxOptions","BSplineCurveBox","BSplineCurveBoxOptions","BSplineFunction","BSplineSurface","BSplineSurface3DBox","BSplineSurface3DBoxOptions","BubbleChart","BubbleChart3D","BubbleScale","BubbleSizes","BuildingData","BulletGauge","BusinessDayQ","ButterflyGraph","ButterworthFilterModel","Button","ButtonBar","ButtonBox","ButtonBoxOptions","ButtonCell","ButtonContents","ButtonData","ButtonEvaluator","ButtonExpandable","ButtonFrame","ButtonFunction","ButtonMargins","ButtonMinHeight","ButtonNote","ButtonNotebook","ButtonSource","ButtonStyle","ButtonStyleMenuListing","Byte","ByteArray","ByteArrayFormat","ByteArrayQ","ByteArrayToString","ByteCount","ByteOrdering","C","CachedValue","CacheGraphics","CachePersistence","CalendarConvert","CalendarData","CalendarType","Callout","CalloutMarker","CalloutStyle","CallPacket","CanberraDistance","Cancel","CancelButton","CandlestickChart","CanonicalGraph","CanonicalizePolygon","CanonicalizePolyhedron","CanonicalName","CanonicalWarpingCorrespondence","CanonicalWarpingDistance","CantorMesh","CantorStaircase","Cap","CapForm","CapitalDifferentialD","Capitalize","CapsuleShape","CaptureRunning","CardinalBSplineBasis","CarlemanLinearize","CarmichaelLambda","CaseOrdering","Cases","CaseSensitive","Cashflow","Casoratian","Catalan","CatalanNumber","Catch","CategoricalDistribution","Catenate","CatenateLayer","CauchyDistribution","CauchyWindow","CayleyGraph","CDF","CDFDeploy","CDFInformation","CDFWavelet","Ceiling","CelestialSystem","Cell","CellAutoOverwrite","CellBaseline","CellBoundingBox","CellBracketOptions","CellChangeTimes","CellContents","CellContext","CellDingbat","CellDynamicExpression","CellEditDuplicate","CellElementsBoundingBox","CellElementSpacings","CellEpilog","CellEvaluationDuplicate","CellEvaluationFunction","CellEvaluationLanguage","CellEventActions","CellFrame","CellFrameColor","CellFrameLabelMargins","CellFrameLabels","CellFrameMargins","CellGroup","CellGroupData","CellGrouping","CellGroupingRules","CellHorizontalScrolling","CellID","CellLabel","CellLabelAutoDelete","CellLabelMargins","CellLabelPositioning","CellLabelStyle","CellLabelTemplate","CellMargins","CellObject","CellOpen","CellPrint","CellProlog","Cells","CellSize","CellStyle","CellTags","CellularAutomaton","CensoredDistribution","Censoring","Center","CenterArray","CenterDot","CentralFeature","CentralMoment","CentralMomentGeneratingFunction","Cepstrogram","CepstrogramArray","CepstrumArray","CForm","ChampernowneNumber","ChangeOptions","ChannelBase","ChannelBrokerAction","ChannelDatabin","ChannelHistoryLength","ChannelListen","ChannelListener","ChannelListeners","ChannelListenerWait","ChannelObject","ChannelPreSendFunction","ChannelReceiverFunction","ChannelSend","ChannelSubscribers","ChanVeseBinarize","Character","CharacterCounts","CharacterEncoding","CharacterEncodingsPath","CharacteristicFunction","CharacteristicPolynomial","CharacterName","CharacterNormalize","CharacterRange","Characters","ChartBaseStyle","ChartElementData","ChartElementDataFunction","ChartElementFunction","ChartElements","ChartLabels","ChartLayout","ChartLegends","ChartStyle","Chebyshev1FilterModel","Chebyshev2FilterModel","ChebyshevDistance","ChebyshevT","ChebyshevU","Check","CheckAbort","CheckAll","Checkbox","CheckboxBar","CheckboxBox","CheckboxBoxOptions","ChemicalData","ChessboardDistance","ChiDistribution","ChineseRemainder","ChiSquareDistribution","ChoiceButtons","ChoiceDialog","CholeskyDecomposition","Chop","ChromaticityPlot","ChromaticityPlot3D","ChromaticPolynomial","Circle","CircleBox","CircleDot","CircleMinus","CirclePlus","CirclePoints","CircleThrough","CircleTimes","CirculantGraph","CircularOrthogonalMatrixDistribution","CircularQuaternionMatrixDistribution","CircularRealMatrixDistribution","CircularSymplecticMatrixDistribution","CircularUnitaryMatrixDistribution","Circumsphere","CityData","ClassifierFunction","ClassifierInformation","ClassifierMeasurements","ClassifierMeasurementsObject","Classify","ClassPriors","Clear","ClearAll","ClearAttributes","ClearCookies","ClearPermissions","ClearSystemCache","ClebschGordan","ClickPane","Clip","ClipboardNotebook","ClipFill","ClippingStyle","ClipPlanes","ClipPlanesStyle","ClipRange","Clock","ClockGauge","ClockwiseContourIntegral","Close","Closed","CloseKernels","ClosenessCentrality","Closing","ClosingAutoSave","ClosingEvent","ClosingSaveDialog","CloudAccountData","CloudBase","CloudConnect","CloudConnections","CloudDeploy","CloudDirectory","CloudDisconnect","CloudEvaluate","CloudExport","CloudExpression","CloudExpressions","CloudFunction","CloudGet","CloudImport","CloudLoggingData","CloudObject","CloudObjectInformation","CloudObjectInformationData","CloudObjectNameFormat","CloudObjects","CloudObjectURLType","CloudPublish","CloudPut","CloudRenderingMethod","CloudSave","CloudShare","CloudSubmit","CloudSymbol","CloudUnshare","CloudUserID","ClusterClassify","ClusterDissimilarityFunction","ClusteringComponents","ClusteringTree","CMYKColor","Coarse","CodeAssistOptions","Coefficient","CoefficientArrays","CoefficientDomain","CoefficientList","CoefficientRules","CoifletWavelet","Collect","Colon","ColonForm","ColorBalance","ColorCombine","ColorConvert","ColorCoverage","ColorData","ColorDataFunction","ColorDetect","ColorDistance","ColorFunction","ColorFunctionScaling","Colorize","ColorNegate","ColorOutput","ColorProfileData","ColorQ","ColorQuantize","ColorReplace","ColorRules","ColorSelectorSettings","ColorSeparate","ColorSetter","ColorSetterBox","ColorSetterBoxOptions","ColorSlider","ColorsNear","ColorSpace","ColorToneMapping","Column","ColumnAlignments","ColumnBackgrounds","ColumnForm","ColumnLines","ColumnsEqual","ColumnSpacings","ColumnWidths","CombinedEntityClass","CombinerFunction","CometData","CommonDefaultFormatTypes","Commonest","CommonestFilter","CommonName","CommonUnits","CommunityBoundaryStyle","CommunityGraphPlot","CommunityLabels","CommunityRegionStyle","CompanyData","CompatibleUnitQ","CompilationOptions","CompilationTarget","Compile","Compiled","CompiledCodeFunction","CompiledFunction","CompilerOptions","Complement","ComplementedEntityClass","CompleteGraph","CompleteGraphQ","CompleteKaryTree","CompletionsListPacket","Complex","ComplexContourPlot","Complexes","ComplexExpand","ComplexInfinity","ComplexityFunction","ComplexListPlot","ComplexPlot","ComplexPlot3D","ComplexRegionPlot","ComplexStreamPlot","ComplexVectorPlot","ComponentMeasurements","ComponentwiseContextMenu","Compose","ComposeList","ComposeSeries","CompositeQ","Composition","CompoundElement","CompoundExpression","CompoundPoissonDistribution","CompoundPoissonProcess","CompoundRenewalProcess","Compress","CompressedData","CompressionLevel","ComputeUncertainty","Condition","ConditionalExpression","Conditioned","Cone","ConeBox","ConfidenceLevel","ConfidenceRange","ConfidenceTransform","ConfigurationPath","ConformAudio","ConformImages","Congruent","ConicHullRegion","ConicHullRegion3DBox","ConicHullRegionBox","ConicOptimization","Conjugate","ConjugateTranspose","Conjunction","Connect","ConnectedComponents","ConnectedGraphComponents","ConnectedGraphQ","ConnectedMeshComponents","ConnectedMoleculeComponents","ConnectedMoleculeQ","ConnectionSettings","ConnectLibraryCallbackFunction","ConnectSystemModelComponents","ConnesWindow","ConoverTest","ConsoleMessage","ConsoleMessagePacket","Constant","ConstantArray","ConstantArrayLayer","ConstantImage","ConstantPlusLayer","ConstantRegionQ","Constants","ConstantTimesLayer","ConstellationData","ConstrainedMax","ConstrainedMin","Construct","Containing","ContainsAll","ContainsAny","ContainsExactly","ContainsNone","ContainsOnly","ContentFieldOptions","ContentLocationFunction","ContentObject","ContentPadding","ContentsBoundingBox","ContentSelectable","ContentSize","Context","ContextMenu","Contexts","ContextToFileName","Continuation","Continue","ContinuedFraction","ContinuedFractionK","ContinuousAction","ContinuousMarkovProcess","ContinuousTask","ContinuousTimeModelQ","ContinuousWaveletData","ContinuousWaveletTransform","ContourDetect","ContourGraphics","ContourIntegral","ContourLabels","ContourLines","ContourPlot","ContourPlot3D","Contours","ContourShading","ContourSmoothing","ContourStyle","ContraharmonicMean","ContrastiveLossLayer","Control","ControlActive","ControlAlignment","ControlGroupContentsBox","ControllabilityGramian","ControllabilityMatrix","ControllableDecomposition","ControllableModelQ","ControllerDuration","ControllerInformation","ControllerInformationData","ControllerLinking","ControllerManipulate","ControllerMethod","ControllerPath","ControllerState","ControlPlacement","ControlsRendering","ControlType","Convergents","ConversionOptions","ConversionRules","ConvertToBitmapPacket","ConvertToPostScript","ConvertToPostScriptPacket","ConvexHullMesh","ConvexPolygonQ","ConvexPolyhedronQ","ConvolutionLayer","Convolve","ConwayGroupCo1","ConwayGroupCo2","ConwayGroupCo3","CookieFunction","Cookies","CoordinateBoundingBox","CoordinateBoundingBoxArray","CoordinateBounds","CoordinateBoundsArray","CoordinateChartData","CoordinatesToolOptions","CoordinateTransform","CoordinateTransformData","CoprimeQ","Coproduct","CopulaDistribution","Copyable","CopyDatabin","CopyDirectory","CopyFile","CopyTag","CopyToClipboard","CornerFilter","CornerNeighbors","Correlation","CorrelationDistance","CorrelationFunction","CorrelationTest","Cos","Cosh","CoshIntegral","CosineDistance","CosineWindow","CosIntegral","Cot","Coth","Count","CountDistinct","CountDistinctBy","CounterAssignments","CounterBox","CounterBoxOptions","CounterClockwiseContourIntegral","CounterEvaluator","CounterFunction","CounterIncrements","CounterStyle","CounterStyleMenuListing","CountRoots","CountryData","Counts","CountsBy","Covariance","CovarianceEstimatorFunction","CovarianceFunction","CoxianDistribution","CoxIngersollRossProcess","CoxModel","CoxModelFit","CramerVonMisesTest","CreateArchive","CreateCellID","CreateChannel","CreateCloudExpression","CreateDatabin","CreateDataStructure","CreateDataSystemModel","CreateDialog","CreateDirectory","CreateDocument","CreateFile","CreateIntermediateDirectories","CreateManagedLibraryExpression","CreateNotebook","CreatePacletArchive","CreatePalette","CreatePalettePacket","CreatePermissionsGroup","CreateScheduledTask","CreateSearchIndex","CreateSystemModel","CreateTemporary","CreateUUID","CreateWindow","CriterionFunction","CriticalityFailureImportance","CriticalitySuccessImportance","CriticalSection","Cross","CrossEntropyLossLayer","CrossingCount","CrossingDetect","CrossingPolygon","CrossMatrix","Csc","Csch","CTCLossLayer","Cube","CubeRoot","Cubics","Cuboid","CuboidBox","Cumulant","CumulantGeneratingFunction","Cup","CupCap","Curl","CurlyDoubleQuote","CurlyQuote","CurrencyConvert","CurrentDate","CurrentImage","CurrentlySpeakingPacket","CurrentNotebookImage","CurrentScreenImage","CurrentValue","Curry","CurryApplied","CurvatureFlowFilter","CurveClosed","Cyan","CycleGraph","CycleIndexPolynomial","Cycles","CyclicGroup","Cyclotomic","Cylinder","CylinderBox","CylindricalDecomposition","D","DagumDistribution","DamData","DamerauLevenshteinDistance","DampingFactor","Darker","Dashed","Dashing","DatabaseConnect","DatabaseDisconnect","DatabaseReference","Databin","DatabinAdd","DatabinRemove","Databins","DatabinUpload","DataCompression","DataDistribution","DataRange","DataReversed","Dataset","DatasetDisplayPanel","DataStructure","DataStructureQ","Date","DateBounds","Dated","DateDelimiters","DateDifference","DatedUnit","DateFormat","DateFunction","DateHistogram","DateInterval","DateList","DateListLogPlot","DateListPlot","DateListStepPlot","DateObject","DateObjectQ","DateOverlapsQ","DatePattern","DatePlus","DateRange","DateReduction","DateString","DateTicksFormat","DateValue","DateWithinQ","DaubechiesWavelet","DavisDistribution","DawsonF","DayCount","DayCountConvention","DayHemisphere","DaylightQ","DayMatchQ","DayName","DayNightTerminator","DayPlus","DayRange","DayRound","DeBruijnGraph","DeBruijnSequence","Debug","DebugTag","Decapitalize","Decimal","DecimalForm","DeclareKnownSymbols","DeclarePackage","Decompose","DeconvolutionLayer","Decrement","Decrypt","DecryptFile","DedekindEta","DeepSpaceProbeData","Default","DefaultAxesStyle","DefaultBaseStyle","DefaultBoxStyle","DefaultButton","DefaultColor","DefaultControlPlacement","DefaultDuplicateCellStyle","DefaultDuration","DefaultElement","DefaultFaceGridsStyle","DefaultFieldHintStyle","DefaultFont","DefaultFontProperties","DefaultFormatType","DefaultFormatTypeForStyle","DefaultFrameStyle","DefaultFrameTicksStyle","DefaultGridLinesStyle","DefaultInlineFormatType","DefaultInputFormatType","DefaultLabelStyle","DefaultMenuStyle","DefaultNaturalLanguage","DefaultNewCellStyle","DefaultNewInlineCellStyle","DefaultNotebook","DefaultOptions","DefaultOutputFormatType","DefaultPrintPrecision","DefaultStyle","DefaultStyleDefinitions","DefaultTextFormatType","DefaultTextInlineFormatType","DefaultTicksStyle","DefaultTooltipStyle","DefaultValue","DefaultValues","Defer","DefineExternal","DefineInputStreamMethod","DefineOutputStreamMethod","DefineResourceFunction","Definition","Degree","DegreeCentrality","DegreeGraphDistribution","DegreeLexicographic","DegreeReverseLexicographic","DEigensystem","DEigenvalues","Deinitialization","Del","DelaunayMesh","Delayed","Deletable","Delete","DeleteAnomalies","DeleteBorderComponents","DeleteCases","DeleteChannel","DeleteCloudExpression","DeleteContents","DeleteDirectory","DeleteDuplicates","DeleteDuplicatesBy","DeleteFile","DeleteMissing","DeleteObject","DeletePermissionsKey","DeleteSearchIndex","DeleteSmallComponents","DeleteStopwords","DeleteWithContents","DeletionWarning","DelimitedArray","DelimitedSequence","Delimiter","DelimiterFlashTime","DelimiterMatching","Delimiters","DeliveryFunction","Dendrogram","Denominator","DensityGraphics","DensityHistogram","DensityPlot","DensityPlot3D","DependentVariables","Deploy","Deployed","Depth","DepthFirstScan","Derivative","DerivativeFilter","DerivedKey","DescriptorStateSpace","DesignMatrix","DestroyAfterEvaluation","Det","DeviceClose","DeviceConfigure","DeviceExecute","DeviceExecuteAsynchronous","DeviceObject","DeviceOpen","DeviceOpenQ","DeviceRead","DeviceReadBuffer","DeviceReadLatest","DeviceReadList","DeviceReadTimeSeries","Devices","DeviceStreams","DeviceWrite","DeviceWriteBuffer","DGaussianWavelet","DiacriticalPositioning","Diagonal","DiagonalizableMatrixQ","DiagonalMatrix","DiagonalMatrixQ","Dialog","DialogIndent","DialogInput","DialogLevel","DialogNotebook","DialogProlog","DialogReturn","DialogSymbols","Diamond","DiamondMatrix","DiceDissimilarity","DictionaryLookup","DictionaryWordQ","DifferenceDelta","DifferenceOrder","DifferenceQuotient","DifferenceRoot","DifferenceRootReduce","Differences","DifferentialD","DifferentialRoot","DifferentialRootReduce","DifferentiatorFilter","DigitalSignature","DigitBlock","DigitBlockMinimum","DigitCharacter","DigitCount","DigitQ","DihedralAngle","DihedralGroup","Dilation","DimensionalCombinations","DimensionalMeshComponents","DimensionReduce","DimensionReducerFunction","DimensionReduction","Dimensions","DiracComb","DiracDelta","DirectedEdge","DirectedEdges","DirectedGraph","DirectedGraphQ","DirectedInfinity","Direction","Directive","Directory","DirectoryName","DirectoryQ","DirectoryStack","DirichletBeta","DirichletCharacter","DirichletCondition","DirichletConvolve","DirichletDistribution","DirichletEta","DirichletL","DirichletLambda","DirichletTransform","DirichletWindow","DisableConsolePrintPacket","DisableFormatting","DiscreteAsymptotic","DiscreteChirpZTransform","DiscreteConvolve","DiscreteDelta","DiscreteHadamardTransform","DiscreteIndicator","DiscreteLimit","DiscreteLQEstimatorGains","DiscreteLQRegulatorGains","DiscreteLyapunovSolve","DiscreteMarkovProcess","DiscreteMaxLimit","DiscreteMinLimit","DiscretePlot","DiscretePlot3D","DiscreteRatio","DiscreteRiccatiSolve","DiscreteShift","DiscreteTimeModelQ","DiscreteUniformDistribution","DiscreteVariables","DiscreteWaveletData","DiscreteWaveletPacketTransform","DiscreteWaveletTransform","DiscretizeGraphics","DiscretizeRegion","Discriminant","DisjointQ","Disjunction","Disk","DiskBox","DiskMatrix","DiskSegment","Dispatch","DispatchQ","DispersionEstimatorFunction","Display","DisplayAllSteps","DisplayEndPacket","DisplayFlushImagePacket","DisplayForm","DisplayFunction","DisplayPacket","DisplayRules","DisplaySetSizePacket","DisplayString","DisplayTemporary","DisplayWith","DisplayWithRef","DisplayWithVariable","DistanceFunction","DistanceMatrix","DistanceTransform","Distribute","Distributed","DistributedContexts","DistributeDefinitions","DistributionChart","DistributionDomain","DistributionFitTest","DistributionParameterAssumptions","DistributionParameterQ","Dithering","Div","Divergence","Divide","DivideBy","Dividers","DivideSides","Divisible","Divisors","DivisorSigma","DivisorSum","DMSList","DMSString","Do","DockedCells","DocumentGenerator","DocumentGeneratorInformation","DocumentGeneratorInformationData","DocumentGenerators","DocumentNotebook","DocumentWeightingRules","Dodecahedron","DomainRegistrationInformation","DominantColors","DOSTextFormat","Dot","DotDashed","DotEqual","DotLayer","DotPlusLayer","Dotted","DoubleBracketingBar","DoubleContourIntegral","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DoublyInfinite","Down","DownArrow","DownArrowBar","DownArrowUpArrow","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","Downsample","DownTee","DownTeeArrow","DownValues","DragAndDrop","DrawEdges","DrawFrontFaces","DrawHighlighted","Drop","DropoutLayer","DSolve","DSolveValue","Dt","DualLinearProgramming","DualPolyhedron","DualSystemsModel","DumpGet","DumpSave","DuplicateFreeQ","Duration","Dynamic","DynamicBox","DynamicBoxOptions","DynamicEvaluationTimeout","DynamicGeoGraphics","DynamicImage","DynamicLocation","DynamicModule","DynamicModuleBox","DynamicModuleBoxOptions","DynamicModuleParent","DynamicModuleValues","DynamicName","DynamicNamespace","DynamicReference","DynamicSetting","DynamicUpdating","DynamicWrapper","DynamicWrapperBox","DynamicWrapperBoxOptions","E","EarthImpactData","EarthquakeData","EccentricityCentrality","Echo","EchoFunction","EclipseType","EdgeAdd","EdgeBetweennessCentrality","EdgeCapacity","EdgeCapForm","EdgeColor","EdgeConnectivity","EdgeContract","EdgeCost","EdgeCount","EdgeCoverQ","EdgeCycleMatrix","EdgeDashing","EdgeDelete","EdgeDetect","EdgeForm","EdgeIndex","EdgeJoinForm","EdgeLabeling","EdgeLabels","EdgeLabelStyle","EdgeList","EdgeOpacity","EdgeQ","EdgeRenderingFunction","EdgeRules","EdgeShapeFunction","EdgeStyle","EdgeTaggedGraph","EdgeTaggedGraphQ","EdgeTags","EdgeThickness","EdgeWeight","EdgeWeightedGraphQ","Editable","EditButtonSettings","EditCellTagsSettings","EditDistance","EffectiveInterest","Eigensystem","Eigenvalues","EigenvectorCentrality","Eigenvectors","Element","ElementData","ElementwiseLayer","ElidedForms","Eliminate","EliminationOrder","Ellipsoid","EllipticE","EllipticExp","EllipticExpPrime","EllipticF","EllipticFilterModel","EllipticK","EllipticLog","EllipticNomeQ","EllipticPi","EllipticReducedHalfPeriods","EllipticTheta","EllipticThetaPrime","EmbedCode","EmbeddedHTML","EmbeddedService","EmbeddingLayer","EmbeddingObject","EmitSound","EmphasizeSyntaxErrors","EmpiricalDistribution","Empty","EmptyGraphQ","EmptyRegion","EnableConsolePrintPacket","Enabled","Encode","Encrypt","EncryptedObject","EncryptFile","End","EndAdd","EndDialogPacket","EndFrontEndInteractionPacket","EndOfBuffer","EndOfFile","EndOfLine","EndOfString","EndPackage","EngineEnvironment","EngineeringForm","Enter","EnterExpressionPacket","EnterTextPacket","Entity","EntityClass","EntityClassList","EntityCopies","EntityFunction","EntityGroup","EntityInstance","EntityList","EntityPrefetch","EntityProperties","EntityProperty","EntityPropertyClass","EntityRegister","EntityStore","EntityStores","EntityTypeName","EntityUnregister","EntityValue","Entropy","EntropyFilter","Environment","Epilog","EpilogFunction","Equal","EqualColumns","EqualRows","EqualTilde","EqualTo","EquatedTo","Equilibrium","EquirippleFilterKernel","Equivalent","Erf","Erfc","Erfi","ErlangB","ErlangC","ErlangDistribution","Erosion","ErrorBox","ErrorBoxOptions","ErrorNorm","ErrorPacket","ErrorsDialogSettings","EscapeRadius","EstimatedBackground","EstimatedDistribution","EstimatedProcess","EstimatorGains","EstimatorRegulator","EuclideanDistance","EulerAngles","EulerCharacteristic","EulerE","EulerGamma","EulerianGraphQ","EulerMatrix","EulerPhi","Evaluatable","Evaluate","Evaluated","EvaluatePacket","EvaluateScheduledTask","EvaluationBox","EvaluationCell","EvaluationCompletionAction","EvaluationData","EvaluationElements","EvaluationEnvironment","EvaluationMode","EvaluationMonitor","EvaluationNotebook","EvaluationObject","EvaluationOrder","Evaluator","EvaluatorNames","EvenQ","EventData","EventEvaluator","EventHandler","EventHandlerTag","EventLabels","EventSeries","ExactBlackmanWindow","ExactNumberQ","ExactRootIsolation","ExampleData","Except","ExcludedForms","ExcludedLines","ExcludedPhysicalQuantities","ExcludePods","Exclusions","ExclusionsStyle","Exists","Exit","ExitDialog","ExoplanetData","Exp","Expand","ExpandAll","ExpandDenominator","ExpandFileName","ExpandNumerator","Expectation","ExpectationE","ExpectedValue","ExpGammaDistribution","ExpIntegralE","ExpIntegralEi","ExpirationDate","Exponent","ExponentFunction","ExponentialDistribution","ExponentialFamily","ExponentialGeneratingFunction","ExponentialMovingAverage","ExponentialPowerDistribution","ExponentPosition","ExponentStep","Export","ExportAutoReplacements","ExportByteArray","ExportForm","ExportPacket","ExportString","Expression","ExpressionCell","ExpressionGraph","ExpressionPacket","ExpressionUUID","ExpToTrig","ExtendedEntityClass","ExtendedGCD","Extension","ExtentElementFunction","ExtentMarkers","ExtentSize","ExternalBundle","ExternalCall","ExternalDataCharacterEncoding","ExternalEvaluate","ExternalFunction","ExternalFunctionName","ExternalIdentifier","ExternalObject","ExternalOptions","ExternalSessionObject","ExternalSessions","ExternalStorageBase","ExternalStorageDownload","ExternalStorageGet","ExternalStorageObject","ExternalStoragePut","ExternalStorageUpload","ExternalTypeSignature","ExternalValue","Extract","ExtractArchive","ExtractLayer","ExtractPacletArchive","ExtremeValueDistribution","FaceAlign","FaceForm","FaceGrids","FaceGridsStyle","FacialFeatures","Factor","FactorComplete","Factorial","Factorial2","FactorialMoment","FactorialMomentGeneratingFunction","FactorialPower","FactorInteger","FactorList","FactorSquareFree","FactorSquareFreeList","FactorTerms","FactorTermsList","Fail","Failure","FailureAction","FailureDistribution","FailureQ","False","FareySequence","FARIMAProcess","FeatureDistance","FeatureExtract","FeatureExtraction","FeatureExtractor","FeatureExtractorFunction","FeatureNames","FeatureNearest","FeatureSpacePlot","FeatureSpacePlot3D","FeatureTypes","FEDisableConsolePrintPacket","FeedbackLinearize","FeedbackSector","FeedbackSectorStyle","FeedbackType","FEEnableConsolePrintPacket","FetalGrowthData","Fibonacci","Fibonorial","FieldCompletionFunction","FieldHint","FieldHintStyle","FieldMasked","FieldSize","File","FileBaseName","FileByteCount","FileConvert","FileDate","FileExistsQ","FileExtension","FileFormat","FileHandler","FileHash","FileInformation","FileName","FileNameDepth","FileNameDialogSettings","FileNameDrop","FileNameForms","FileNameJoin","FileNames","FileNameSetter","FileNameSplit","FileNameTake","FilePrint","FileSize","FileSystemMap","FileSystemScan","FileTemplate","FileTemplateApply","FileType","FilledCurve","FilledCurveBox","FilledCurveBoxOptions","Filling","FillingStyle","FillingTransform","FilteredEntityClass","FilterRules","FinancialBond","FinancialData","FinancialDerivative","FinancialIndicator","Find","FindAnomalies","FindArgMax","FindArgMin","FindChannels","FindClique","FindClusters","FindCookies","FindCurvePath","FindCycle","FindDevices","FindDistribution","FindDistributionParameters","FindDivisions","FindEdgeCover","FindEdgeCut","FindEdgeIndependentPaths","FindEquationalProof","FindEulerianCycle","FindExternalEvaluators","FindFaces","FindFile","FindFit","FindFormula","FindFundamentalCycles","FindGeneratingFunction","FindGeoLocation","FindGeometricConjectures","FindGeometricTransform","FindGraphCommunities","FindGraphIsomorphism","FindGraphPartition","FindHamiltonianCycle","FindHamiltonianPath","FindHiddenMarkovStates","FindImageText","FindIndependentEdgeSet","FindIndependentVertexSet","FindInstance","FindIntegerNullVector","FindKClan","FindKClique","FindKClub","FindKPlex","FindLibrary","FindLinearRecurrence","FindList","FindMatchingColor","FindMaximum","FindMaximumCut","FindMaximumFlow","FindMaxValue","FindMeshDefects","FindMinimum","FindMinimumCostFlow","FindMinimumCut","FindMinValue","FindMoleculeSubstructure","FindPath","FindPeaks","FindPermutation","FindPostmanTour","FindProcessParameters","FindRepeat","FindRoot","FindSequenceFunction","FindSettings","FindShortestPath","FindShortestTour","FindSpanningTree","FindSystemModelEquilibrium","FindTextualAnswer","FindThreshold","FindTransientRepeat","FindVertexCover","FindVertexCut","FindVertexIndependentPaths","Fine","FinishDynamic","FiniteAbelianGroupCount","FiniteGroupCount","FiniteGroupData","First","FirstCase","FirstPassageTimeDistribution","FirstPosition","FischerGroupFi22","FischerGroupFi23","FischerGroupFi24Prime","FisherHypergeometricDistribution","FisherRatioTest","FisherZDistribution","Fit","FitAll","FitRegularization","FittedModel","FixedOrder","FixedPoint","FixedPointList","FlashSelection","Flat","Flatten","FlattenAt","FlattenLayer","FlatTopWindow","FlipView","Floor","FlowPolynomial","FlushPrintOutputPacket","Fold","FoldList","FoldPair","FoldPairList","FollowRedirects","Font","FontColor","FontFamily","FontForm","FontName","FontOpacity","FontPostScriptName","FontProperties","FontReencoding","FontSize","FontSlant","FontSubstitutions","FontTracking","FontVariations","FontWeight","For","ForAll","ForceVersionInstall","Format","FormatRules","FormatType","FormatTypeAutoConvert","FormatValues","FormBox","FormBoxOptions","FormControl","FormFunction","FormLayoutFunction","FormObject","FormPage","FormTheme","FormulaData","FormulaLookup","FortranForm","Forward","ForwardBackward","Fourier","FourierCoefficient","FourierCosCoefficient","FourierCosSeries","FourierCosTransform","FourierDCT","FourierDCTFilter","FourierDCTMatrix","FourierDST","FourierDSTMatrix","FourierMatrix","FourierParameters","FourierSequenceTransform","FourierSeries","FourierSinCoefficient","FourierSinSeries","FourierSinTransform","FourierTransform","FourierTrigSeries","FractionalBrownianMotionProcess","FractionalGaussianNoiseProcess","FractionalPart","FractionBox","FractionBoxOptions","FractionLine","Frame","FrameBox","FrameBoxOptions","Framed","FrameInset","FrameLabel","Frameless","FrameMargins","FrameRate","FrameStyle","FrameTicks","FrameTicksStyle","FRatioDistribution","FrechetDistribution","FreeQ","FrenetSerretSystem","FrequencySamplingFilterKernel","FresnelC","FresnelF","FresnelG","FresnelS","Friday","FrobeniusNumber","FrobeniusSolve","FromAbsoluteTime","FromCharacterCode","FromCoefficientRules","FromContinuedFraction","FromDate","FromDigits","FromDMS","FromEntity","FromJulianDate","FromLetterNumber","FromPolarCoordinates","FromRomanNumeral","FromSphericalCoordinates","FromUnixTime","Front","FrontEndDynamicExpression","FrontEndEventActions","FrontEndExecute","FrontEndObject","FrontEndResource","FrontEndResourceString","FrontEndStackSize","FrontEndToken","FrontEndTokenExecute","FrontEndValueCache","FrontEndVersion","FrontFaceColor","FrontFaceOpacity","Full","FullAxes","FullDefinition","FullForm","FullGraphics","FullInformationOutputRegulator","FullOptions","FullRegion","FullSimplify","Function","FunctionCompile","FunctionCompileExport","FunctionCompileExportByteArray","FunctionCompileExportLibrary","FunctionCompileExportString","FunctionDomain","FunctionExpand","FunctionInterpolation","FunctionPeriod","FunctionRange","FunctionSpace","FussellVeselyImportance","GaborFilter","GaborMatrix","GaborWavelet","GainMargins","GainPhaseMargins","GalaxyData","GalleryView","Gamma","GammaDistribution","GammaRegularized","GapPenalty","GARCHProcess","GatedRecurrentLayer","Gather","GatherBy","GaugeFaceElementFunction","GaugeFaceStyle","GaugeFrameElementFunction","GaugeFrameSize","GaugeFrameStyle","GaugeLabels","GaugeMarkers","GaugeStyle","GaussianFilter","GaussianIntegers","GaussianMatrix","GaussianOrthogonalMatrixDistribution","GaussianSymplecticMatrixDistribution","GaussianUnitaryMatrixDistribution","GaussianWindow","GCD","GegenbauerC","General","GeneralizedLinearModelFit","GenerateAsymmetricKeyPair","GenerateConditions","GeneratedCell","GeneratedDocumentBinding","GenerateDerivedKey","GenerateDigitalSignature","GenerateDocument","GeneratedParameters","GeneratedQuantityMagnitudes","GenerateFileSignature","GenerateHTTPResponse","GenerateSecuredAuthenticationKey","GenerateSymmetricKey","GeneratingFunction","GeneratorDescription","GeneratorHistoryLength","GeneratorOutputType","Generic","GenericCylindricalDecomposition","GenomeData","GenomeLookup","GeoAntipode","GeoArea","GeoArraySize","GeoBackground","GeoBoundingBox","GeoBounds","GeoBoundsRegion","GeoBubbleChart","GeoCenter","GeoCircle","GeoContourPlot","GeoDensityPlot","GeodesicClosing","GeodesicDilation","GeodesicErosion","GeodesicOpening","GeoDestination","GeodesyData","GeoDirection","GeoDisk","GeoDisplacement","GeoDistance","GeoDistanceList","GeoElevationData","GeoEntities","GeoGraphics","GeogravityModelData","GeoGridDirectionDifference","GeoGridLines","GeoGridLinesStyle","GeoGridPosition","GeoGridRange","GeoGridRangePadding","GeoGridUnitArea","GeoGridUnitDistance","GeoGridVector","GeoGroup","GeoHemisphere","GeoHemisphereBoundary","GeoHistogram","GeoIdentify","GeoImage","GeoLabels","GeoLength","GeoListPlot","GeoLocation","GeologicalPeriodData","GeomagneticModelData","GeoMarker","GeometricAssertion","GeometricBrownianMotionProcess","GeometricDistribution","GeometricMean","GeometricMeanFilter","GeometricOptimization","GeometricScene","GeometricTransformation","GeometricTransformation3DBox","GeometricTransformation3DBoxOptions","GeometricTransformationBox","GeometricTransformationBoxOptions","GeoModel","GeoNearest","GeoPath","GeoPosition","GeoPositionENU","GeoPositionXYZ","GeoProjection","GeoProjectionData","GeoRange","GeoRangePadding","GeoRegionValuePlot","GeoResolution","GeoScaleBar","GeoServer","GeoSmoothHistogram","GeoStreamPlot","GeoStyling","GeoStylingImageFunction","GeoVariant","GeoVector","GeoVectorENU","GeoVectorPlot","GeoVectorXYZ","GeoVisibleRegion","GeoVisibleRegionBoundary","GeoWithinQ","GeoZoomLevel","GestureHandler","GestureHandlerTag","Get","GetBoundingBoxSizePacket","GetContext","GetEnvironment","GetFileName","GetFrontEndOptionsDataPacket","GetLinebreakInformationPacket","GetMenusPacket","GetPageBreakInformationPacket","Glaisher","GlobalClusteringCoefficient","GlobalPreferences","GlobalSession","Glow","GoldenAngle","GoldenRatio","GompertzMakehamDistribution","GoochShading","GoodmanKruskalGamma","GoodmanKruskalGammaTest","Goto","Grad","Gradient","GradientFilter","GradientOrientationFilter","GrammarApply","GrammarRules","GrammarToken","Graph","Graph3D","GraphAssortativity","GraphAutomorphismGroup","GraphCenter","GraphComplement","GraphData","GraphDensity","GraphDiameter","GraphDifference","GraphDisjointUnion","GraphDistance","GraphDistanceMatrix","GraphElementData","GraphEmbedding","GraphHighlight","GraphHighlightStyle","GraphHub","Graphics","Graphics3D","Graphics3DBox","Graphics3DBoxOptions","GraphicsArray","GraphicsBaseline","GraphicsBox","GraphicsBoxOptions","GraphicsColor","GraphicsColumn","GraphicsComplex","GraphicsComplex3DBox","GraphicsComplex3DBoxOptions","GraphicsComplexBox","GraphicsComplexBoxOptions","GraphicsContents","GraphicsData","GraphicsGrid","GraphicsGridBox","GraphicsGroup","GraphicsGroup3DBox","GraphicsGroup3DBoxOptions","GraphicsGroupBox","GraphicsGroupBoxOptions","GraphicsGrouping","GraphicsHighlightColor","GraphicsRow","GraphicsSpacing","GraphicsStyle","GraphIntersection","GraphLayout","GraphLinkEfficiency","GraphPeriphery","GraphPlot","GraphPlot3D","GraphPower","GraphPropertyDistribution","GraphQ","GraphRadius","GraphReciprocity","GraphRoot","GraphStyle","GraphUnion","Gray","GrayLevel","Greater","GreaterEqual","GreaterEqualLess","GreaterEqualThan","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterThan","GreaterTilde","Green","GreenFunction","Grid","GridBaseline","GridBox","GridBoxAlignment","GridBoxBackground","GridBoxDividers","GridBoxFrame","GridBoxItemSize","GridBoxItemStyle","GridBoxOptions","GridBoxSpacings","GridCreationSettings","GridDefaultElement","GridElementStyleOptions","GridFrame","GridFrameMargins","GridGraph","GridLines","GridLinesStyle","GroebnerBasis","GroupActionBase","GroupBy","GroupCentralizer","GroupElementFromWord","GroupElementPosition","GroupElementQ","GroupElements","GroupElementToWord","GroupGenerators","Groupings","GroupMultiplicationTable","GroupOrbits","GroupOrder","GroupPageBreakWithin","GroupSetwiseStabilizer","GroupStabilizer","GroupStabilizerChain","GroupTogetherGrouping","GroupTogetherNestedGrouping","GrowCutComponents","Gudermannian","GuidedFilter","GumbelDistribution","HaarWavelet","HadamardMatrix","HalfLine","HalfNormalDistribution","HalfPlane","HalfSpace","HalftoneShading","HamiltonianGraphQ","HammingDistance","HammingWindow","HandlerFunctions","HandlerFunctionsKeys","HankelH1","HankelH2","HankelMatrix","HankelTransform","HannPoissonWindow","HannWindow","HaradaNortonGroupHN","HararyGraph","HarmonicMean","HarmonicMeanFilter","HarmonicNumber","Hash","HatchFilling","HatchShading","Haversine","HazardFunction","Head","HeadCompose","HeaderAlignment","HeaderBackground","HeaderDisplayFunction","HeaderLines","HeaderSize","HeaderStyle","Heads","HeavisideLambda","HeavisidePi","HeavisideTheta","HeldGroupHe","HeldPart","HelpBrowserLookup","HelpBrowserNotebook","HelpBrowserSettings","Here","HermiteDecomposition","HermiteH","HermitianMatrixQ","HessenbergDecomposition","Hessian","HeunB","HeunBPrime","HeunC","HeunCPrime","HeunD","HeunDPrime","HeunG","HeunGPrime","HeunT","HeunTPrime","HexadecimalCharacter","Hexahedron","HexahedronBox","HexahedronBoxOptions","HiddenItems","HiddenMarkovProcess","HiddenSurface","Highlighted","HighlightGraph","HighlightImage","HighlightMesh","HighpassFilter","HigmanSimsGroupHS","HilbertCurve","HilbertFilter","HilbertMatrix","Histogram","Histogram3D","HistogramDistribution","HistogramList","HistogramTransform","HistogramTransformInterpolation","HistoricalPeriodData","HitMissTransform","HITSCentrality","HjorthDistribution","HodgeDual","HoeffdingD","HoeffdingDTest","Hold","HoldAll","HoldAllComplete","HoldComplete","HoldFirst","HoldForm","HoldPattern","HoldRest","HolidayCalendar","HomeDirectory","HomePage","Horizontal","HorizontalForm","HorizontalGauge","HorizontalScrollPosition","HornerForm","HostLookup","HotellingTSquareDistribution","HoytDistribution","HTMLSave","HTTPErrorResponse","HTTPRedirect","HTTPRequest","HTTPRequestData","HTTPResponse","Hue","HumanGrowthData","HumpDownHump","HumpEqual","HurwitzLerchPhi","HurwitzZeta","HyperbolicDistribution","HypercubeGraph","HyperexponentialDistribution","Hyperfactorial","Hypergeometric0F1","Hypergeometric0F1Regularized","Hypergeometric1F1","Hypergeometric1F1Regularized","Hypergeometric2F1","Hypergeometric2F1Regularized","HypergeometricDistribution","HypergeometricPFQ","HypergeometricPFQRegularized","HypergeometricU","Hyperlink","HyperlinkAction","HyperlinkCreationSettings","Hyperplane","Hyphenation","HyphenationOptions","HypoexponentialDistribution","HypothesisTestData","I","IconData","Iconize","IconizedObject","IconRules","Icosahedron","Identity","IdentityMatrix","If","IgnoreCase","IgnoreDiacritics","IgnorePunctuation","IgnoreSpellCheck","IgnoringInactive","Im","Image","Image3D","Image3DProjection","Image3DSlices","ImageAccumulate","ImageAdd","ImageAdjust","ImageAlign","ImageApply","ImageApplyIndexed","ImageAspectRatio","ImageAssemble","ImageAugmentationLayer","ImageBoundingBoxes","ImageCache","ImageCacheValid","ImageCapture","ImageCaptureFunction","ImageCases","ImageChannels","ImageClip","ImageCollage","ImageColorSpace","ImageCompose","ImageContainsQ","ImageContents","ImageConvolve","ImageCooccurrence","ImageCorners","ImageCorrelate","ImageCorrespondingPoints","ImageCrop","ImageData","ImageDeconvolve","ImageDemosaic","ImageDifference","ImageDimensions","ImageDisplacements","ImageDistance","ImageEffect","ImageExposureCombine","ImageFeatureTrack","ImageFileApply","ImageFileFilter","ImageFileScan","ImageFilter","ImageFocusCombine","ImageForestingComponents","ImageFormattingWidth","ImageForwardTransformation","ImageGraphics","ImageHistogram","ImageIdentify","ImageInstanceQ","ImageKeypoints","ImageLabels","ImageLegends","ImageLevels","ImageLines","ImageMargins","ImageMarker","ImageMarkers","ImageMeasurements","ImageMesh","ImageMultiply","ImageOffset","ImagePad","ImagePadding","ImagePartition","ImagePeriodogram","ImagePerspectiveTransformation","ImagePosition","ImagePreviewFunction","ImagePyramid","ImagePyramidApply","ImageQ","ImageRangeCache","ImageRecolor","ImageReflect","ImageRegion","ImageResize","ImageResolution","ImageRestyle","ImageRotate","ImageRotated","ImageSaliencyFilter","ImageScaled","ImageScan","ImageSize","ImageSizeAction","ImageSizeCache","ImageSizeMultipliers","ImageSizeRaw","ImageSubtract","ImageTake","ImageTransformation","ImageTrim","ImageType","ImageValue","ImageValuePositions","ImagingDevice","ImplicitRegion","Implies","Import","ImportAutoReplacements","ImportByteArray","ImportOptions","ImportString","ImprovementImportance","In","Inactivate","Inactive","IncidenceGraph","IncidenceList","IncidenceMatrix","IncludeAromaticBonds","IncludeConstantBasis","IncludeDefinitions","IncludeDirectories","IncludeFileExtension","IncludeGeneratorTasks","IncludeHydrogens","IncludeInflections","IncludeMetaInformation","IncludePods","IncludeQuantities","IncludeRelatedTables","IncludeSingularTerm","IncludeWindowTimes","Increment","IndefiniteMatrixQ","Indent","IndentingNewlineSpacings","IndentMaxFraction","IndependenceTest","IndependentEdgeSetQ","IndependentPhysicalQuantity","IndependentUnit","IndependentUnitDimension","IndependentVertexSetQ","Indeterminate","IndeterminateThreshold","IndexCreationOptions","Indexed","IndexEdgeTaggedGraph","IndexGraph","IndexTag","Inequality","InexactNumberQ","InexactNumbers","InfiniteFuture","InfiniteLine","InfinitePast","InfinitePlane","Infinity","Infix","InflationAdjust","InflationMethod","Information","InformationData","InformationDataGrid","Inherited","InheritScope","InhomogeneousPoissonProcess","InitialEvaluationHistory","Initialization","InitializationCell","InitializationCellEvaluation","InitializationCellWarning","InitializationObjects","InitializationValue","Initialize","InitialSeeding","InlineCounterAssignments","InlineCounterIncrements","InlineRules","Inner","InnerPolygon","InnerPolyhedron","Inpaint","Input","InputAliases","InputAssumptions","InputAutoReplacements","InputField","InputFieldBox","InputFieldBoxOptions","InputForm","InputGrouping","InputNamePacket","InputNotebook","InputPacket","InputSettings","InputStream","InputString","InputStringPacket","InputToBoxFormPacket","Insert","InsertionFunction","InsertionPointObject","InsertLinebreaks","InsertResults","Inset","Inset3DBox","Inset3DBoxOptions","InsetBox","InsetBoxOptions","Insphere","Install","InstallService","InstanceNormalizationLayer","InString","Integer","IntegerDigits","IntegerExponent","IntegerLength","IntegerName","IntegerPart","IntegerPartitions","IntegerQ","IntegerReverse","Integers","IntegerString","Integral","Integrate","Interactive","InteractiveTradingChart","Interlaced","Interleaving","InternallyBalancedDecomposition","InterpolatingFunction","InterpolatingPolynomial","Interpolation","InterpolationOrder","InterpolationPoints","InterpolationPrecision","Interpretation","InterpretationBox","InterpretationBoxOptions","InterpretationFunction","Interpreter","InterpretTemplate","InterquartileRange","Interrupt","InterruptSettings","IntersectedEntityClass","IntersectingQ","Intersection","Interval","IntervalIntersection","IntervalMarkers","IntervalMarkersStyle","IntervalMemberQ","IntervalSlider","IntervalUnion","Into","Inverse","InverseBetaRegularized","InverseCDF","InverseChiSquareDistribution","InverseContinuousWaveletTransform","InverseDistanceTransform","InverseEllipticNomeQ","InverseErf","InverseErfc","InverseFourier","InverseFourierCosTransform","InverseFourierSequenceTransform","InverseFourierSinTransform","InverseFourierTransform","InverseFunction","InverseFunctions","InverseGammaDistribution","InverseGammaRegularized","InverseGaussianDistribution","InverseGudermannian","InverseHankelTransform","InverseHaversine","InverseImagePyramid","InverseJacobiCD","InverseJacobiCN","InverseJacobiCS","InverseJacobiDC","InverseJacobiDN","InverseJacobiDS","InverseJacobiNC","InverseJacobiND","InverseJacobiNS","InverseJacobiSC","InverseJacobiSD","InverseJacobiSN","InverseLaplaceTransform","InverseMellinTransform","InversePermutation","InverseRadon","InverseRadonTransform","InverseSeries","InverseShortTimeFourier","InverseSpectrogram","InverseSurvivalFunction","InverseTransformedRegion","InverseWaveletTransform","InverseWeierstrassP","InverseWishartMatrixDistribution","InverseZTransform","Invisible","InvisibleApplication","InvisibleTimes","IPAddress","IrreduciblePolynomialQ","IslandData","IsolatingInterval","IsomorphicGraphQ","IsotopeData","Italic","Item","ItemAspectRatio","ItemBox","ItemBoxOptions","ItemDisplayFunction","ItemSize","ItemStyle","ItoProcess","JaccardDissimilarity","JacobiAmplitude","Jacobian","JacobiCD","JacobiCN","JacobiCS","JacobiDC","JacobiDN","JacobiDS","JacobiNC","JacobiND","JacobiNS","JacobiP","JacobiSC","JacobiSD","JacobiSN","JacobiSymbol","JacobiZeta","JankoGroupJ1","JankoGroupJ2","JankoGroupJ3","JankoGroupJ4","JarqueBeraALMTest","JohnsonDistribution","Join","JoinAcross","Joined","JoinedCurve","JoinedCurveBox","JoinedCurveBoxOptions","JoinForm","JordanDecomposition","JordanModelDecomposition","JulianDate","JuliaSetBoettcher","JuliaSetIterationCount","JuliaSetPlot","JuliaSetPoints","K","KagiChart","KaiserBesselWindow","KaiserWindow","KalmanEstimator","KalmanFilter","KarhunenLoeveDecomposition","KaryTree","KatzCentrality","KCoreComponents","KDistribution","KEdgeConnectedComponents","KEdgeConnectedGraphQ","KeepExistingVersion","KelvinBei","KelvinBer","KelvinKei","KelvinKer","KendallTau","KendallTauTest","KernelExecute","KernelFunction","KernelMixtureDistribution","KernelObject","Kernels","Ket","Key","KeyCollisionFunction","KeyComplement","KeyDrop","KeyDropFrom","KeyExistsQ","KeyFreeQ","KeyIntersection","KeyMap","KeyMemberQ","KeypointStrength","Keys","KeySelect","KeySort","KeySortBy","KeyTake","KeyUnion","KeyValueMap","KeyValuePattern","Khinchin","KillProcess","KirchhoffGraph","KirchhoffMatrix","KleinInvariantJ","KnapsackSolve","KnightTourGraph","KnotData","KnownUnitQ","KochCurve","KolmogorovSmirnovTest","KroneckerDelta","KroneckerModelDecomposition","KroneckerProduct","KroneckerSymbol","KuiperTest","KumaraswamyDistribution","Kurtosis","KuwaharaFilter","KVertexConnectedComponents","KVertexConnectedGraphQ","LABColor","Label","Labeled","LabeledSlider","LabelingFunction","LabelingSize","LabelStyle","LabelVisibility","LaguerreL","LakeData","LambdaComponents","LambertW","LaminaData","LanczosWindow","LandauDistribution","Language","LanguageCategory","LanguageData","LanguageIdentify","LanguageOptions","LaplaceDistribution","LaplaceTransform","Laplacian","LaplacianFilter","LaplacianGaussianFilter","Large","Larger","Last","Latitude","LatitudeLongitude","LatticeData","LatticeReduce","Launch","LaunchKernels","LayeredGraphPlot","LayerSizeFunction","LayoutInformation","LCHColor","LCM","LeaderSize","LeafCount","LeapYearQ","LearnDistribution","LearnedDistribution","LearningRate","LearningRateMultipliers","LeastSquares","LeastSquaresFilterKernel","Left","LeftArrow","LeftArrowBar","LeftArrowRightArrow","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftRightArrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","LegendAppearance","Legended","LegendFunction","LegendLabel","LegendLayout","LegendMargins","LegendMarkers","LegendMarkerSize","LegendreP","LegendreQ","LegendreType","Length","LengthWhile","LerchPhi","Less","LessEqual","LessEqualGreater","LessEqualThan","LessFullEqual","LessGreater","LessLess","LessSlantEqual","LessThan","LessTilde","LetterCharacter","LetterCounts","LetterNumber","LetterQ","Level","LeveneTest","LeviCivitaTensor","LevyDistribution","Lexicographic","LibraryDataType","LibraryFunction","LibraryFunctionError","LibraryFunctionInformation","LibraryFunctionLoad","LibraryFunctionUnload","LibraryLoad","LibraryUnload","LicenseID","LiftingFilterData","LiftingWaveletTransform","LightBlue","LightBrown","LightCyan","Lighter","LightGray","LightGreen","Lighting","LightingAngle","LightMagenta","LightOrange","LightPink","LightPurple","LightRed","LightSources","LightYellow","Likelihood","Limit","LimitsPositioning","LimitsPositioningTokens","LindleyDistribution","Line","Line3DBox","Line3DBoxOptions","LinearFilter","LinearFractionalOptimization","LinearFractionalTransform","LinearGradientImage","LinearizingTransformationData","LinearLayer","LinearModelFit","LinearOffsetFunction","LinearOptimization","LinearProgramming","LinearRecurrence","LinearSolve","LinearSolveFunction","LineBox","LineBoxOptions","LineBreak","LinebreakAdjustments","LineBreakChart","LinebreakSemicolonWeighting","LineBreakWithin","LineColor","LineGraph","LineIndent","LineIndentMaxFraction","LineIntegralConvolutionPlot","LineIntegralConvolutionScale","LineLegend","LineOpacity","LineSpacing","LineWrapParts","LinkActivate","LinkClose","LinkConnect","LinkConnectedQ","LinkCreate","LinkError","LinkFlush","LinkFunction","LinkHost","LinkInterrupt","LinkLaunch","LinkMode","LinkObject","LinkOpen","LinkOptions","LinkPatterns","LinkProtocol","LinkRankCentrality","LinkRead","LinkReadHeld","LinkReadyQ","Links","LinkService","LinkWrite","LinkWriteHeld","LiouvilleLambda","List","Listable","ListAnimate","ListContourPlot","ListContourPlot3D","ListConvolve","ListCorrelate","ListCurvePathPlot","ListDeconvolve","ListDensityPlot","ListDensityPlot3D","Listen","ListFormat","ListFourierSequenceTransform","ListInterpolation","ListLineIntegralConvolutionPlot","ListLinePlot","ListLogLinearPlot","ListLogLogPlot","ListLogPlot","ListPicker","ListPickerBox","ListPickerBoxBackground","ListPickerBoxOptions","ListPlay","ListPlot","ListPlot3D","ListPointPlot3D","ListPolarPlot","ListQ","ListSliceContourPlot3D","ListSliceDensityPlot3D","ListSliceVectorPlot3D","ListStepPlot","ListStreamDensityPlot","ListStreamPlot","ListSurfacePlot3D","ListVectorDensityPlot","ListVectorPlot","ListVectorPlot3D","ListZTransform","Literal","LiteralSearch","LocalAdaptiveBinarize","LocalCache","LocalClusteringCoefficient","LocalizeDefinitions","LocalizeVariables","LocalObject","LocalObjects","LocalResponseNormalizationLayer","LocalSubmit","LocalSymbol","LocalTime","LocalTimeZone","LocationEquivalenceTest","LocationTest","Locator","LocatorAutoCreate","LocatorBox","LocatorBoxOptions","LocatorCentering","LocatorPane","LocatorPaneBox","LocatorPaneBoxOptions","LocatorRegion","Locked","Log","Log10","Log2","LogBarnesG","LogGamma","LogGammaDistribution","LogicalExpand","LogIntegral","LogisticDistribution","LogisticSigmoid","LogitModelFit","LogLikelihood","LogLinearPlot","LogLogisticDistribution","LogLogPlot","LogMultinormalDistribution","LogNormalDistribution","LogPlot","LogRankTest","LogSeriesDistribution","LongEqual","Longest","LongestCommonSequence","LongestCommonSequencePositions","LongestCommonSubsequence","LongestCommonSubsequencePositions","LongestMatch","LongestOrderedSequence","LongForm","Longitude","LongLeftArrow","LongLeftRightArrow","LongRightArrow","LongShortTermMemoryLayer","Lookup","Loopback","LoopFreeGraphQ","Looping","LossFunction","LowerCaseQ","LowerLeftArrow","LowerRightArrow","LowerTriangularize","LowerTriangularMatrixQ","LowpassFilter","LQEstimatorGains","LQGRegulator","LQOutputRegulatorGains","LQRegulatorGains","LUBackSubstitution","LucasL","LuccioSamiComponents","LUDecomposition","LunarEclipse","LUVColor","LyapunovSolve","LyonsGroupLy","MachineID","MachineName","MachineNumberQ","MachinePrecision","MacintoshSystemPageSetup","Magenta","Magnification","Magnify","MailAddressValidation","MailExecute","MailFolder","MailItem","MailReceiverFunction","MailResponseFunction","MailSearch","MailServerConnect","MailServerConnection","MailSettings","MainSolve","MaintainDynamicCaches","Majority","MakeBoxes","MakeExpression","MakeRules","ManagedLibraryExpressionID","ManagedLibraryExpressionQ","MandelbrotSetBoettcher","MandelbrotSetDistance","MandelbrotSetIterationCount","MandelbrotSetMemberQ","MandelbrotSetPlot","MangoldtLambda","ManhattanDistance","Manipulate","Manipulator","MannedSpaceMissionData","MannWhitneyTest","MantissaExponent","Manual","Map","MapAll","MapAt","MapIndexed","MAProcess","MapThread","MarchenkoPasturDistribution","MarcumQ","MardiaCombinedTest","MardiaKurtosisTest","MardiaSkewnessTest","MarginalDistribution","MarkovProcessProperties","Masking","MatchingDissimilarity","MatchLocalNameQ","MatchLocalNames","MatchQ","Material","MathematicalFunctionData","MathematicaNotation","MathieuC","MathieuCharacteristicA","MathieuCharacteristicB","MathieuCharacteristicExponent","MathieuCPrime","MathieuGroupM11","MathieuGroupM12","MathieuGroupM22","MathieuGroupM23","MathieuGroupM24","MathieuS","MathieuSPrime","MathMLForm","MathMLText","Matrices","MatrixExp","MatrixForm","MatrixFunction","MatrixLog","MatrixNormalDistribution","MatrixPlot","MatrixPower","MatrixPropertyDistribution","MatrixQ","MatrixRank","MatrixTDistribution","Max","MaxBend","MaxCellMeasure","MaxColorDistance","MaxDate","MaxDetect","MaxDuration","MaxExtraBandwidths","MaxExtraConditions","MaxFeatureDisplacement","MaxFeatures","MaxFilter","MaximalBy","Maximize","MaxItems","MaxIterations","MaxLimit","MaxMemoryUsed","MaxMixtureKernels","MaxOverlapFraction","MaxPlotPoints","MaxPoints","MaxRecursion","MaxStableDistribution","MaxStepFraction","MaxSteps","MaxStepSize","MaxTrainingRounds","MaxValue","MaxwellDistribution","MaxWordGap","McLaughlinGroupMcL","Mean","MeanAbsoluteLossLayer","MeanAround","MeanClusteringCoefficient","MeanDegreeConnectivity","MeanDeviation","MeanFilter","MeanGraphDistance","MeanNeighborDegree","MeanShift","MeanShiftFilter","MeanSquaredLossLayer","Median","MedianDeviation","MedianFilter","MedicalTestData","Medium","MeijerG","MeijerGReduce","MeixnerDistribution","MellinConvolve","MellinTransform","MemberQ","MemoryAvailable","MemoryConstrained","MemoryConstraint","MemoryInUse","MengerMesh","Menu","MenuAppearance","MenuCommandKey","MenuEvaluator","MenuItem","MenuList","MenuPacket","MenuSortingValue","MenuStyle","MenuView","Merge","MergeDifferences","MergingFunction","MersennePrimeExponent","MersennePrimeExponentQ","Mesh","MeshCellCentroid","MeshCellCount","MeshCellHighlight","MeshCellIndex","MeshCellLabel","MeshCellMarker","MeshCellMeasure","MeshCellQuality","MeshCells","MeshCellShapeFunction","MeshCellStyle","MeshConnectivityGraph","MeshCoordinates","MeshFunctions","MeshPrimitives","MeshQualityGoal","MeshRange","MeshRefinementFunction","MeshRegion","MeshRegionQ","MeshShading","MeshStyle","Message","MessageDialog","MessageList","MessageName","MessageObject","MessageOptions","MessagePacket","Messages","MessagesNotebook","MetaCharacters","MetaInformation","MeteorShowerData","Method","MethodOptions","MexicanHatWavelet","MeyerWavelet","Midpoint","Min","MinColorDistance","MinDate","MinDetect","MineralData","MinFilter","MinimalBy","MinimalPolynomial","MinimalStateSpaceModel","Minimize","MinimumTimeIncrement","MinIntervalSize","MinkowskiQuestionMark","MinLimit","MinMax","MinorPlanetData","Minors","MinRecursion","MinSize","MinStableDistribution","Minus","MinusPlus","MinValue","Missing","MissingBehavior","MissingDataMethod","MissingDataRules","MissingQ","MissingString","MissingStyle","MissingValuePattern","MittagLefflerE","MixedFractionParts","MixedGraphQ","MixedMagnitude","MixedRadix","MixedRadixQuantity","MixedUnit","MixtureDistribution","Mod","Modal","Mode","Modular","ModularInverse","ModularLambda","Module","Modulus","MoebiusMu","Molecule","MoleculeContainsQ","MoleculeEquivalentQ","MoleculeGraph","MoleculeModify","MoleculePattern","MoleculePlot","MoleculePlot3D","MoleculeProperty","MoleculeQ","MoleculeRecognize","MoleculeValue","Moment","Momentary","MomentConvert","MomentEvaluate","MomentGeneratingFunction","MomentOfInertia","Monday","Monitor","MonomialList","MonomialOrder","MonsterGroupM","MoonPhase","MoonPosition","MorletWavelet","MorphologicalBinarize","MorphologicalBranchPoints","MorphologicalComponents","MorphologicalEulerNumber","MorphologicalGraph","MorphologicalPerimeter","MorphologicalTransform","MortalityData","Most","MountainData","MouseAnnotation","MouseAppearance","MouseAppearanceTag","MouseButtons","Mouseover","MousePointerNote","MousePosition","MovieData","MovingAverage","MovingMap","MovingMedian","MoyalDistribution","Multicolumn","MultiedgeStyle","MultigraphQ","MultilaunchWarning","MultiLetterItalics","MultiLetterStyle","MultilineFunction","Multinomial","MultinomialDistribution","MultinormalDistribution","MultiplicativeOrder","Multiplicity","MultiplySides","Multiselection","MultivariateHypergeometricDistribution","MultivariatePoissonDistribution","MultivariateTDistribution","N","NakagamiDistribution","NameQ","Names","NamespaceBox","NamespaceBoxOptions","Nand","NArgMax","NArgMin","NBernoulliB","NBodySimulation","NBodySimulationData","NCache","NDEigensystem","NDEigenvalues","NDSolve","NDSolveValue","Nearest","NearestFunction","NearestMeshCells","NearestNeighborGraph","NearestTo","NebulaData","NeedCurrentFrontEndPackagePacket","NeedCurrentFrontEndSymbolsPacket","NeedlemanWunschSimilarity","Needs","Negative","NegativeBinomialDistribution","NegativeDefiniteMatrixQ","NegativeIntegers","NegativeMultinomialDistribution","NegativeRationals","NegativeReals","NegativeSemidefiniteMatrixQ","NeighborhoodData","NeighborhoodGraph","Nest","NestedGreaterGreater","NestedLessLess","NestedScriptRules","NestGraph","NestList","NestWhile","NestWhileList","NetAppend","NetBidirectionalOperator","NetChain","NetDecoder","NetDelete","NetDrop","NetEncoder","NetEvaluationMode","NetExtract","NetFlatten","NetFoldOperator","NetGANOperator","NetGraph","NetInformation","NetInitialize","NetInsert","NetInsertSharedArrays","NetJoin","NetMapOperator","NetMapThreadOperator","NetMeasurements","NetModel","NetNestOperator","NetPairEmbeddingOperator","NetPort","NetPortGradient","NetPrepend","NetRename","NetReplace","NetReplacePart","NetSharedArray","NetStateObject","NetTake","NetTrain","NetTrainResultsObject","NetworkPacketCapture","NetworkPacketRecording","NetworkPacketRecordingDuring","NetworkPacketTrace","NeumannValue","NevilleThetaC","NevilleThetaD","NevilleThetaN","NevilleThetaS","NewPrimitiveStyle","NExpectation","Next","NextCell","NextDate","NextPrime","NextScheduledTaskTime","NHoldAll","NHoldFirst","NHoldRest","NicholsGridLines","NicholsPlot","NightHemisphere","NIntegrate","NMaximize","NMaxValue","NMinimize","NMinValue","NominalVariables","NonAssociative","NoncentralBetaDistribution","NoncentralChiSquareDistribution","NoncentralFRatioDistribution","NoncentralStudentTDistribution","NonCommutativeMultiply","NonConstants","NondimensionalizationTransform","None","NoneTrue","NonlinearModelFit","NonlinearStateSpaceModel","NonlocalMeansFilter","NonNegative","NonNegativeIntegers","NonNegativeRationals","NonNegativeReals","NonPositive","NonPositiveIntegers","NonPositiveRationals","NonPositiveReals","Nor","NorlundB","Norm","Normal","NormalDistribution","NormalGrouping","NormalizationLayer","Normalize","Normalized","NormalizedSquaredEuclideanDistance","NormalMatrixQ","NormalsFunction","NormFunction","Not","NotCongruent","NotCupCap","NotDoubleVerticalBar","Notebook","NotebookApply","NotebookAutoSave","NotebookClose","NotebookConvertSettings","NotebookCreate","NotebookCreateReturnObject","NotebookDefault","NotebookDelete","NotebookDirectory","NotebookDynamicExpression","NotebookEvaluate","NotebookEventActions","NotebookFileName","NotebookFind","NotebookFindReturnObject","NotebookGet","NotebookGetLayoutInformationPacket","NotebookGetMisspellingsPacket","NotebookImport","NotebookInformation","NotebookInterfaceObject","NotebookLocate","NotebookObject","NotebookOpen","NotebookOpenReturnObject","NotebookPath","NotebookPrint","NotebookPut","NotebookPutReturnObject","NotebookRead","NotebookResetGeneratedCells","Notebooks","NotebookSave","NotebookSaveAs","NotebookSelection","NotebookSetupLayoutInformationPacket","NotebooksMenu","NotebookTemplate","NotebookWrite","NotElement","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","Nothing","NotHumpDownHump","NotHumpEqual","NotificationFunction","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessFullEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotPrecedesTilde","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","Now","NoWhitespace","NProbability","NProduct","NProductFactors","NRoots","NSolve","NSum","NSumTerms","NuclearExplosionData","NuclearReactorData","Null","NullRecords","NullSpace","NullWords","Number","NumberCompose","NumberDecompose","NumberExpand","NumberFieldClassNumber","NumberFieldDiscriminant","NumberFieldFundamentalUnits","NumberFieldIntegralBasis","NumberFieldNormRepresentatives","NumberFieldRegulator","NumberFieldRootsOfUnity","NumberFieldSignature","NumberForm","NumberFormat","NumberLinePlot","NumberMarks","NumberMultiplier","NumberPadding","NumberPoint","NumberQ","NumberSeparator","NumberSigns","NumberString","Numerator","NumeratorDenominator","NumericalOrder","NumericalSort","NumericArray","NumericArrayQ","NumericArrayType","NumericFunction","NumericQ","NuttallWindow","NValues","NyquistGridLines","NyquistPlot","O","ObservabilityGramian","ObservabilityMatrix","ObservableDecomposition","ObservableModelQ","OceanData","Octahedron","OddQ","Off","Offset","OLEData","On","ONanGroupON","Once","OneIdentity","Opacity","OpacityFunction","OpacityFunctionScaling","Open","OpenAppend","Opener","OpenerBox","OpenerBoxOptions","OpenerView","OpenFunctionInspectorPacket","Opening","OpenRead","OpenSpecialOptions","OpenTemporary","OpenWrite","Operate","OperatingSystem","OperatorApplied","OptimumFlowData","Optional","OptionalElement","OptionInspectorSettings","OptionQ","Options","OptionsPacket","OptionsPattern","OptionValue","OptionValueBox","OptionValueBoxOptions","Or","Orange","Order","OrderDistribution","OrderedQ","Ordering","OrderingBy","OrderingLayer","Orderless","OrderlessPatternSequence","OrnsteinUhlenbeckProcess","Orthogonalize","OrthogonalMatrixQ","Out","Outer","OuterPolygon","OuterPolyhedron","OutputAutoOverwrite","OutputControllabilityMatrix","OutputControllableModelQ","OutputForm","OutputFormData","OutputGrouping","OutputMathEditExpression","OutputNamePacket","OutputResponse","OutputSizeLimit","OutputStream","Over","OverBar","OverDot","Overflow","OverHat","Overlaps","Overlay","OverlayBox","OverlayBoxOptions","Overscript","OverscriptBox","OverscriptBoxOptions","OverTilde","OverVector","OverwriteTarget","OwenT","OwnValues","Package","PackingMethod","PackPaclet","PacletDataRebuild","PacletDirectoryAdd","PacletDirectoryLoad","PacletDirectoryRemove","PacletDirectoryUnload","PacletDisable","PacletEnable","PacletFind","PacletFindRemote","PacletInformation","PacletInstall","PacletInstallSubmit","PacletNewerQ","PacletObject","PacletObjectQ","PacletSite","PacletSiteObject","PacletSiteRegister","PacletSites","PacletSiteUnregister","PacletSiteUpdate","PacletUninstall","PacletUpdate","PaddedForm","Padding","PaddingLayer","PaddingSize","PadeApproximant","PadLeft","PadRight","PageBreakAbove","PageBreakBelow","PageBreakWithin","PageFooterLines","PageFooters","PageHeaderLines","PageHeaders","PageHeight","PageRankCentrality","PageTheme","PageWidth","Pagination","PairedBarChart","PairedHistogram","PairedSmoothHistogram","PairedTTest","PairedZTest","PaletteNotebook","PalettePath","PalindromeQ","Pane","PaneBox","PaneBoxOptions","Panel","PanelBox","PanelBoxOptions","Paneled","PaneSelector","PaneSelectorBox","PaneSelectorBoxOptions","PaperWidth","ParabolicCylinderD","ParagraphIndent","ParagraphSpacing","ParallelArray","ParallelCombine","ParallelDo","Parallelepiped","ParallelEvaluate","Parallelization","Parallelize","ParallelMap","ParallelNeeds","Parallelogram","ParallelProduct","ParallelSubmit","ParallelSum","ParallelTable","ParallelTry","Parameter","ParameterEstimator","ParameterMixtureDistribution","ParameterVariables","ParametricFunction","ParametricNDSolve","ParametricNDSolveValue","ParametricPlot","ParametricPlot3D","ParametricRampLayer","ParametricRegion","ParentBox","ParentCell","ParentConnect","ParentDirectory","ParentForm","Parenthesize","ParentList","ParentNotebook","ParetoDistribution","ParetoPickandsDistribution","ParkData","Part","PartBehavior","PartialCorrelationFunction","PartialD","ParticleAcceleratorData","ParticleData","Partition","PartitionGranularity","PartitionsP","PartitionsQ","PartLayer","PartOfSpeech","PartProtection","ParzenWindow","PascalDistribution","PassEventsDown","PassEventsUp","Paste","PasteAutoQuoteCharacters","PasteBoxFormInlineCells","PasteButton","Path","PathGraph","PathGraphQ","Pattern","PatternFilling","PatternSequence","PatternTest","PauliMatrix","PaulWavelet","Pause","PausedTime","PDF","PeakDetect","PeanoCurve","PearsonChiSquareTest","PearsonCorrelationTest","PearsonDistribution","PercentForm","PerfectNumber","PerfectNumberQ","PerformanceGoal","Perimeter","PeriodicBoundaryCondition","PeriodicInterpolation","Periodogram","PeriodogramArray","Permanent","Permissions","PermissionsGroup","PermissionsGroupMemberQ","PermissionsGroups","PermissionsKey","PermissionsKeys","PermutationCycles","PermutationCyclesQ","PermutationGroup","PermutationLength","PermutationList","PermutationListQ","PermutationMax","PermutationMin","PermutationOrder","PermutationPower","PermutationProduct","PermutationReplace","Permutations","PermutationSupport","Permute","PeronaMalikFilter","Perpendicular","PerpendicularBisector","PersistenceLocation","PersistenceTime","PersistentObject","PersistentObjects","PersistentValue","PersonData","PERTDistribution","PetersenGraph","PhaseMargins","PhaseRange","PhysicalSystemData","Pi","Pick","PIDData","PIDDerivativeFilter","PIDFeedforward","PIDTune","Piecewise","PiecewiseExpand","PieChart","PieChart3D","PillaiTrace","PillaiTraceTest","PingTime","Pink","PitchRecognize","Pivoting","PixelConstrained","PixelValue","PixelValuePositions","Placed","Placeholder","PlaceholderReplace","Plain","PlanarAngle","PlanarGraph","PlanarGraphQ","PlanckRadiationLaw","PlaneCurveData","PlanetaryMoonData","PlanetData","PlantData","Play","PlayRange","Plot","Plot3D","Plot3Matrix","PlotDivision","PlotJoined","PlotLabel","PlotLabels","PlotLayout","PlotLegends","PlotMarkers","PlotPoints","PlotRange","PlotRangeClipping","PlotRangeClipPlanesStyle","PlotRangePadding","PlotRegion","PlotStyle","PlotTheme","Pluralize","Plus","PlusMinus","Pochhammer","PodStates","PodWidth","Point","Point3DBox","Point3DBoxOptions","PointBox","PointBoxOptions","PointFigureChart","PointLegend","PointSize","PoissonConsulDistribution","PoissonDistribution","PoissonProcess","PoissonWindow","PolarAxes","PolarAxesOrigin","PolarGridLines","PolarPlot","PolarTicks","PoleZeroMarkers","PolyaAeppliDistribution","PolyGamma","Polygon","Polygon3DBox","Polygon3DBoxOptions","PolygonalNumber","PolygonAngle","PolygonBox","PolygonBoxOptions","PolygonCoordinates","PolygonDecomposition","PolygonHoleScale","PolygonIntersections","PolygonScale","Polyhedron","PolyhedronAngle","PolyhedronCoordinates","PolyhedronData","PolyhedronDecomposition","PolyhedronGenus","PolyLog","PolynomialExtendedGCD","PolynomialForm","PolynomialGCD","PolynomialLCM","PolynomialMod","PolynomialQ","PolynomialQuotient","PolynomialQuotientRemainder","PolynomialReduce","PolynomialRemainder","Polynomials","PoolingLayer","PopupMenu","PopupMenuBox","PopupMenuBoxOptions","PopupView","PopupWindow","Position","PositionIndex","Positive","PositiveDefiniteMatrixQ","PositiveIntegers","PositiveRationals","PositiveReals","PositiveSemidefiniteMatrixQ","PossibleZeroQ","Postfix","PostScript","Power","PowerDistribution","PowerExpand","PowerMod","PowerModList","PowerRange","PowerSpectralDensity","PowersRepresentations","PowerSymmetricPolynomial","Precedence","PrecedenceForm","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","Precision","PrecisionGoal","PreDecrement","Predict","PredictionRoot","PredictorFunction","PredictorInformation","PredictorMeasurements","PredictorMeasurementsObject","PreemptProtect","PreferencesPath","Prefix","PreIncrement","Prepend","PrependLayer","PrependTo","PreprocessingRules","PreserveColor","PreserveImageOptions","Previous","PreviousCell","PreviousDate","PriceGraphDistribution","PrimaryPlaceholder","Prime","PrimeNu","PrimeOmega","PrimePi","PrimePowerQ","PrimeQ","Primes","PrimeZetaP","PrimitivePolynomialQ","PrimitiveRoot","PrimitiveRootList","PrincipalComponents","PrincipalValue","Print","PrintableASCIIQ","PrintAction","PrintForm","PrintingCopies","PrintingOptions","PrintingPageRange","PrintingStartingPageNumber","PrintingStyleEnvironment","Printout3D","Printout3DPreviewer","PrintPrecision","PrintTemporary","Prism","PrismBox","PrismBoxOptions","PrivateCellOptions","PrivateEvaluationOptions","PrivateFontOptions","PrivateFrontEndOptions","PrivateKey","PrivateNotebookOptions","PrivatePaths","Probability","ProbabilityDistribution","ProbabilityPlot","ProbabilityPr","ProbabilityScalePlot","ProbitModelFit","ProcessConnection","ProcessDirectory","ProcessEnvironment","Processes","ProcessEstimator","ProcessInformation","ProcessObject","ProcessParameterAssumptions","ProcessParameterQ","ProcessStateDomain","ProcessStatus","ProcessTimeDomain","Product","ProductDistribution","ProductLog","ProgressIndicator","ProgressIndicatorBox","ProgressIndicatorBoxOptions","Projection","Prolog","PromptForm","ProofObject","Properties","Property","PropertyList","PropertyValue","Proportion","Proportional","Protect","Protected","ProteinData","Pruning","PseudoInverse","PsychrometricPropertyData","PublicKey","PublisherID","PulsarData","PunctuationCharacter","Purple","Put","PutAppend","Pyramid","PyramidBox","PyramidBoxOptions","QBinomial","QFactorial","QGamma","QHypergeometricPFQ","QnDispersion","QPochhammer","QPolyGamma","QRDecomposition","QuadraticIrrationalQ","QuadraticOptimization","Quantile","QuantilePlot","Quantity","QuantityArray","QuantityDistribution","QuantityForm","QuantityMagnitude","QuantityQ","QuantityUnit","QuantityVariable","QuantityVariableCanonicalUnit","QuantityVariableDimensions","QuantityVariableIdentifier","QuantityVariablePhysicalQuantity","Quartics","QuartileDeviation","Quartiles","QuartileSkewness","Query","QueueingNetworkProcess","QueueingProcess","QueueProperties","Quiet","Quit","Quotient","QuotientRemainder","RadialGradientImage","RadialityCentrality","RadicalBox","RadicalBoxOptions","RadioButton","RadioButtonBar","RadioButtonBox","RadioButtonBoxOptions","Radon","RadonTransform","RamanujanTau","RamanujanTauL","RamanujanTauTheta","RamanujanTauZ","Ramp","Random","RandomChoice","RandomColor","RandomComplex","RandomEntity","RandomFunction","RandomGeoPosition","RandomGraph","RandomImage","RandomInstance","RandomInteger","RandomPermutation","RandomPoint","RandomPolygon","RandomPolyhedron","RandomPrime","RandomReal","RandomSample","RandomSeed","RandomSeeding","RandomVariate","RandomWalkProcess","RandomWord","Range","RangeFilter","RangeSpecification","RankedMax","RankedMin","RarerProbability","Raster","Raster3D","Raster3DBox","Raster3DBoxOptions","RasterArray","RasterBox","RasterBoxOptions","Rasterize","RasterSize","Rational","RationalFunctions","Rationalize","Rationals","Ratios","RawArray","RawBoxes","RawData","RawMedium","RayleighDistribution","Re","Read","ReadByteArray","ReadLine","ReadList","ReadProtected","ReadString","Real","RealAbs","RealBlockDiagonalForm","RealDigits","RealExponent","Reals","RealSign","Reap","RebuildPacletData","RecognitionPrior","RecognitionThreshold","Record","RecordLists","RecordSeparators","Rectangle","RectangleBox","RectangleBoxOptions","RectangleChart","RectangleChart3D","RectangularRepeatingElement","RecurrenceFilter","RecurrenceTable","RecurringDigitsForm","Red","Reduce","RefBox","ReferenceLineStyle","ReferenceMarkers","ReferenceMarkerStyle","Refine","ReflectionMatrix","ReflectionTransform","Refresh","RefreshRate","Region","RegionBinarize","RegionBoundary","RegionBoundaryStyle","RegionBounds","RegionCentroid","RegionDifference","RegionDimension","RegionDisjoint","RegionDistance","RegionDistanceFunction","RegionEmbeddingDimension","RegionEqual","RegionFillingStyle","RegionFunction","RegionImage","RegionIntersection","RegionMeasure","RegionMember","RegionMemberFunction","RegionMoment","RegionNearest","RegionNearestFunction","RegionPlot","RegionPlot3D","RegionProduct","RegionQ","RegionResize","RegionSize","RegionSymmetricDifference","RegionUnion","RegionWithin","RegisterExternalEvaluator","RegularExpression","Regularization","RegularlySampledQ","RegularPolygon","ReIm","ReImLabels","ReImPlot","ReImStyle","Reinstall","RelationalDatabase","RelationGraph","Release","ReleaseHold","ReliabilityDistribution","ReliefImage","ReliefPlot","RemoteAuthorizationCaching","RemoteConnect","RemoteConnectionObject","RemoteFile","RemoteRun","RemoteRunProcess","Remove","RemoveAlphaChannel","RemoveAsynchronousTask","RemoveAudioStream","RemoveBackground","RemoveChannelListener","RemoveChannelSubscribers","Removed","RemoveDiacritics","RemoveInputStreamMethod","RemoveOutputStreamMethod","RemoveProperty","RemoveScheduledTask","RemoveUsers","RemoveVideoStream","RenameDirectory","RenameFile","RenderAll","RenderingOptions","RenewalProcess","RenkoChart","RepairMesh","Repeated","RepeatedNull","RepeatedString","RepeatedTiming","RepeatingElement","Replace","ReplaceAll","ReplaceHeldPart","ReplaceImageValue","ReplaceList","ReplacePart","ReplacePixelValue","ReplaceRepeated","ReplicateLayer","RequiredPhysicalQuantities","Resampling","ResamplingAlgorithmData","ResamplingMethod","Rescale","RescalingTransform","ResetDirectory","ResetMenusPacket","ResetScheduledTask","ReshapeLayer","Residue","ResizeLayer","Resolve","ResourceAcquire","ResourceData","ResourceFunction","ResourceObject","ResourceRegister","ResourceRemove","ResourceSearch","ResourceSubmissionObject","ResourceSubmit","ResourceSystemBase","ResourceSystemPath","ResourceUpdate","ResourceVersion","ResponseForm","Rest","RestartInterval","Restricted","Resultant","ResumePacket","Return","ReturnEntersInput","ReturnExpressionPacket","ReturnInputFormPacket","ReturnPacket","ReturnReceiptFunction","ReturnTextPacket","Reverse","ReverseApplied","ReverseBiorthogonalSplineWavelet","ReverseElement","ReverseEquilibrium","ReverseGraph","ReverseSort","ReverseSortBy","ReverseUpEquilibrium","RevolutionAxis","RevolutionPlot3D","RGBColor","RiccatiSolve","RiceDistribution","RidgeFilter","RiemannR","RiemannSiegelTheta","RiemannSiegelZ","RiemannXi","Riffle","Right","RightArrow","RightArrowBar","RightArrowLeftArrow","RightComposition","RightCosetRepresentative","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightTee","RightTeeArrow","RightTeeVector","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","RiskAchievementImportance","RiskReductionImportance","RogersTanimotoDissimilarity","RollPitchYawAngles","RollPitchYawMatrix","RomanNumeral","Root","RootApproximant","RootIntervals","RootLocusPlot","RootMeanSquare","RootOfUnityQ","RootReduce","Roots","RootSum","Rotate","RotateLabel","RotateLeft","RotateRight","RotationAction","RotationBox","RotationBoxOptions","RotationMatrix","RotationTransform","Round","RoundImplies","RoundingRadius","Row","RowAlignments","RowBackgrounds","RowBox","RowHeights","RowLines","RowMinHeight","RowReduce","RowsEqual","RowSpacings","RSolve","RSolveValue","RudinShapiro","RudvalisGroupRu","Rule","RuleCondition","RuleDelayed","RuleForm","RulePlot","RulerUnits","Run","RunProcess","RunScheduledTask","RunThrough","RuntimeAttributes","RuntimeOptions","RussellRaoDissimilarity","SameQ","SameTest","SameTestProperties","SampledEntityClass","SampleDepth","SampledSoundFunction","SampledSoundList","SampleRate","SamplingPeriod","SARIMAProcess","SARMAProcess","SASTriangle","SatelliteData","SatisfiabilityCount","SatisfiabilityInstances","SatisfiableQ","Saturday","Save","Saveable","SaveAutoDelete","SaveConnection","SaveDefinitions","SavitzkyGolayMatrix","SawtoothWave","Scale","Scaled","ScaleDivisions","ScaledMousePosition","ScaleOrigin","ScalePadding","ScaleRanges","ScaleRangeStyle","ScalingFunctions","ScalingMatrix","ScalingTransform","Scan","ScheduledTask","ScheduledTaskActiveQ","ScheduledTaskInformation","ScheduledTaskInformationData","ScheduledTaskObject","ScheduledTasks","SchurDecomposition","ScientificForm","ScientificNotationThreshold","ScorerGi","ScorerGiPrime","ScorerHi","ScorerHiPrime","ScreenRectangle","ScreenStyleEnvironment","ScriptBaselineShifts","ScriptForm","ScriptLevel","ScriptMinSize","ScriptRules","ScriptSizeMultipliers","Scrollbars","ScrollingOptions","ScrollPosition","SearchAdjustment","SearchIndexObject","SearchIndices","SearchQueryString","SearchResultObject","Sec","Sech","SechDistribution","SecondOrderConeOptimization","SectionGrouping","SectorChart","SectorChart3D","SectorOrigin","SectorSpacing","SecuredAuthenticationKey","SecuredAuthenticationKeys","SeedRandom","Select","Selectable","SelectComponents","SelectedCells","SelectedNotebook","SelectFirst","Selection","SelectionAnimate","SelectionCell","SelectionCellCreateCell","SelectionCellDefaultStyle","SelectionCellParentStyle","SelectionCreateCell","SelectionDebuggerTag","SelectionDuplicateCell","SelectionEvaluate","SelectionEvaluateCreateCell","SelectionMove","SelectionPlaceholder","SelectionSetStyle","SelectWithContents","SelfLoops","SelfLoopStyle","SemanticImport","SemanticImportString","SemanticInterpretation","SemialgebraicComponentInstances","SemidefiniteOptimization","SendMail","SendMessage","Sequence","SequenceAlignment","SequenceAttentionLayer","SequenceCases","SequenceCount","SequenceFold","SequenceFoldList","SequenceForm","SequenceHold","SequenceLastLayer","SequenceMostLayer","SequencePosition","SequencePredict","SequencePredictorFunction","SequenceReplace","SequenceRestLayer","SequenceReverseLayer","SequenceSplit","Series","SeriesCoefficient","SeriesData","SeriesTermGoal","ServiceConnect","ServiceDisconnect","ServiceExecute","ServiceObject","ServiceRequest","ServiceResponse","ServiceSubmit","SessionSubmit","SessionTime","Set","SetAccuracy","SetAlphaChannel","SetAttributes","Setbacks","SetBoxFormNamesPacket","SetCloudDirectory","SetCookies","SetDelayed","SetDirectory","SetEnvironment","SetEvaluationNotebook","SetFileDate","SetFileLoadingContext","SetNotebookStatusLine","SetOptions","SetOptionsPacket","SetPermissions","SetPrecision","SetProperty","SetSecuredAuthenticationKey","SetSelectedNotebook","SetSharedFunction","SetSharedVariable","SetSpeechParametersPacket","SetStreamPosition","SetSystemModel","SetSystemOptions","Setter","SetterBar","SetterBox","SetterBoxOptions","Setting","SetUsers","SetValue","Shading","Shallow","ShannonWavelet","ShapiroWilkTest","Share","SharingList","Sharpen","ShearingMatrix","ShearingTransform","ShellRegion","ShenCastanMatrix","ShiftedGompertzDistribution","ShiftRegisterSequence","Short","ShortDownArrow","Shortest","ShortestMatch","ShortestPathFunction","ShortLeftArrow","ShortRightArrow","ShortTimeFourier","ShortTimeFourierData","ShortUpArrow","Show","ShowAutoConvert","ShowAutoSpellCheck","ShowAutoStyles","ShowCellBracket","ShowCellLabel","ShowCellTags","ShowClosedCellArea","ShowCodeAssist","ShowContents","ShowControls","ShowCursorTracker","ShowGroupOpenCloseIcon","ShowGroupOpener","ShowInvisibleCharacters","ShowPageBreaks","ShowPredictiveInterface","ShowSelection","ShowShortBoxForm","ShowSpecialCharacters","ShowStringCharacters","ShowSyntaxStyles","ShrinkingDelay","ShrinkWrapBoundingBox","SiderealTime","SiegelTheta","SiegelTukeyTest","SierpinskiCurve","SierpinskiMesh","Sign","Signature","SignedRankTest","SignedRegionDistance","SignificanceLevel","SignPadding","SignTest","SimilarityRules","SimpleGraph","SimpleGraphQ","SimplePolygonQ","SimplePolyhedronQ","Simplex","Simplify","Sin","Sinc","SinghMaddalaDistribution","SingleEvaluation","SingleLetterItalics","SingleLetterStyle","SingularValueDecomposition","SingularValueList","SingularValuePlot","SingularValues","Sinh","SinhIntegral","SinIntegral","SixJSymbol","Skeleton","SkeletonTransform","SkellamDistribution","Skewness","SkewNormalDistribution","SkinStyle","Skip","SliceContourPlot3D","SliceDensityPlot3D","SliceDistribution","SliceVectorPlot3D","Slider","Slider2D","Slider2DBox","Slider2DBoxOptions","SliderBox","SliderBoxOptions","SlideView","Slot","SlotSequence","Small","SmallCircle","Smaller","SmithDecomposition","SmithDelayCompensator","SmithWatermanSimilarity","SmoothDensityHistogram","SmoothHistogram","SmoothHistogram3D","SmoothKernelDistribution","SnDispersion","Snippet","SnubPolyhedron","SocialMediaData","Socket","SocketConnect","SocketListen","SocketListener","SocketObject","SocketOpen","SocketReadMessage","SocketReadyQ","Sockets","SocketWaitAll","SocketWaitNext","SoftmaxLayer","SokalSneathDissimilarity","SolarEclipse","SolarSystemFeatureData","SolidAngle","SolidData","SolidRegionQ","Solve","SolveAlways","SolveDelayed","Sort","SortBy","SortedBy","SortedEntityClass","Sound","SoundAndGraphics","SoundNote","SoundVolume","SourceLink","Sow","Space","SpaceCurveData","SpaceForm","Spacer","Spacings","Span","SpanAdjustments","SpanCharacterRounding","SpanFromAbove","SpanFromBoth","SpanFromLeft","SpanLineThickness","SpanMaxSize","SpanMinSize","SpanningCharacters","SpanSymmetric","SparseArray","SpatialGraphDistribution","SpatialMedian","SpatialTransformationLayer","Speak","SpeakerMatchQ","SpeakTextPacket","SpearmanRankTest","SpearmanRho","SpeciesData","SpecificityGoal","SpectralLineData","Spectrogram","SpectrogramArray","Specularity","SpeechCases","SpeechInterpreter","SpeechRecognize","SpeechSynthesize","SpellingCorrection","SpellingCorrectionList","SpellingDictionaries","SpellingDictionariesPath","SpellingOptions","SpellingSuggestionsPacket","Sphere","SphereBox","SpherePoints","SphericalBesselJ","SphericalBesselY","SphericalHankelH1","SphericalHankelH2","SphericalHarmonicY","SphericalPlot3D","SphericalRegion","SphericalShell","SpheroidalEigenvalue","SpheroidalJoiningFactor","SpheroidalPS","SpheroidalPSPrime","SpheroidalQS","SpheroidalQSPrime","SpheroidalRadialFactor","SpheroidalS1","SpheroidalS1Prime","SpheroidalS2","SpheroidalS2Prime","Splice","SplicedDistribution","SplineClosed","SplineDegree","SplineKnots","SplineWeights","Split","SplitBy","SpokenString","Sqrt","SqrtBox","SqrtBoxOptions","Square","SquaredEuclideanDistance","SquareFreeQ","SquareIntersection","SquareMatrixQ","SquareRepeatingElement","SquaresR","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","SquareWave","SSSTriangle","StabilityMargins","StabilityMarginsStyle","StableDistribution","Stack","StackBegin","StackComplete","StackedDateListPlot","StackedListPlot","StackInhibit","StadiumShape","StandardAtmosphereData","StandardDeviation","StandardDeviationFilter","StandardForm","Standardize","Standardized","StandardOceanData","StandbyDistribution","Star","StarClusterData","StarData","StarGraph","StartAsynchronousTask","StartExternalSession","StartingStepSize","StartOfLine","StartOfString","StartProcess","StartScheduledTask","StartupSound","StartWebSession","StateDimensions","StateFeedbackGains","StateOutputEstimator","StateResponse","StateSpaceModel","StateSpaceRealization","StateSpaceTransform","StateTransformationLinearize","StationaryDistribution","StationaryWaveletPacketTransform","StationaryWaveletTransform","StatusArea","StatusCentrality","StepMonitor","StereochemistryElements","StieltjesGamma","StippleShading","StirlingS1","StirlingS2","StopAsynchronousTask","StoppingPowerData","StopScheduledTask","StrataVariables","StratonovichProcess","StreamColorFunction","StreamColorFunctionScaling","StreamDensityPlot","StreamMarkers","StreamPlot","StreamPoints","StreamPosition","Streams","StreamScale","StreamStyle","String","StringBreak","StringByteCount","StringCases","StringContainsQ","StringCount","StringDelete","StringDrop","StringEndsQ","StringExpression","StringExtract","StringForm","StringFormat","StringFreeQ","StringInsert","StringJoin","StringLength","StringMatchQ","StringPadLeft","StringPadRight","StringPart","StringPartition","StringPosition","StringQ","StringRepeat","StringReplace","StringReplaceList","StringReplacePart","StringReverse","StringRiffle","StringRotateLeft","StringRotateRight","StringSkeleton","StringSplit","StringStartsQ","StringTake","StringTemplate","StringToByteArray","StringToStream","StringTrim","StripBoxes","StripOnInput","StripWrapperBoxes","StrokeForm","StructuralImportance","StructuredArray","StructuredArrayHeadQ","StructuredSelection","StruveH","StruveL","Stub","StudentTDistribution","Style","StyleBox","StyleBoxAutoDelete","StyleData","StyleDefinitions","StyleForm","StyleHints","StyleKeyMapping","StyleMenuListing","StyleNameDialogSettings","StyleNames","StylePrint","StyleSheetPath","Subdivide","Subfactorial","Subgraph","SubMinus","SubPlus","SubresultantPolynomialRemainders","SubresultantPolynomials","Subresultants","Subscript","SubscriptBox","SubscriptBoxOptions","Subscripted","Subsequences","Subset","SubsetCases","SubsetCount","SubsetEqual","SubsetMap","SubsetPosition","SubsetQ","SubsetReplace","Subsets","SubStar","SubstitutionSystem","Subsuperscript","SubsuperscriptBox","SubsuperscriptBoxOptions","SubtitleEncoding","SubtitleTracks","Subtract","SubtractFrom","SubtractSides","SubValues","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","Success","SuchThat","Sum","SumConvergence","SummationLayer","Sunday","SunPosition","Sunrise","Sunset","SuperDagger","SuperMinus","SupernovaData","SuperPlus","Superscript","SuperscriptBox","SuperscriptBoxOptions","Superset","SupersetEqual","SuperStar","Surd","SurdForm","SurfaceAppearance","SurfaceArea","SurfaceColor","SurfaceData","SurfaceGraphics","SurvivalDistribution","SurvivalFunction","SurvivalModel","SurvivalModelFit","SuspendPacket","SuzukiDistribution","SuzukiGroupSuz","SwatchLegend","Switch","Symbol","SymbolName","SymletWavelet","Symmetric","SymmetricGroup","SymmetricKey","SymmetricMatrixQ","SymmetricPolynomial","SymmetricReduction","Symmetrize","SymmetrizedArray","SymmetrizedArrayRules","SymmetrizedDependentComponents","SymmetrizedIndependentComponents","SymmetrizedReplacePart","SynchronousInitialization","SynchronousUpdating","Synonyms","Syntax","SyntaxForm","SyntaxInformation","SyntaxLength","SyntaxPacket","SyntaxQ","SynthesizeMissingValues","SystemCredential","SystemCredentialData","SystemCredentialKey","SystemCredentialKeys","SystemCredentialStoreObject","SystemDialogInput","SystemException","SystemGet","SystemHelpPath","SystemInformation","SystemInformationData","SystemInstall","SystemModel","SystemModeler","SystemModelExamples","SystemModelLinearize","SystemModelParametricSimulate","SystemModelPlot","SystemModelProgressReporting","SystemModelReliability","SystemModels","SystemModelSimulate","SystemModelSimulateSensitivity","SystemModelSimulationData","SystemOpen","SystemOptions","SystemProcessData","SystemProcesses","SystemsConnectionsModel","SystemsModelDelay","SystemsModelDelayApproximate","SystemsModelDelete","SystemsModelDimensions","SystemsModelExtract","SystemsModelFeedbackConnect","SystemsModelLabels","SystemsModelLinearity","SystemsModelMerge","SystemsModelOrder","SystemsModelParallelConnect","SystemsModelSeriesConnect","SystemsModelStateFeedbackConnect","SystemsModelVectorRelativeOrders","SystemStub","SystemTest","Tab","TabFilling","Table","TableAlignments","TableDepth","TableDirections","TableForm","TableHeadings","TableSpacing","TableView","TableViewBox","TableViewBoxBackground","TableViewBoxItemSize","TableViewBoxOptions","TabSpacings","TabView","TabViewBox","TabViewBoxOptions","TagBox","TagBoxNote","TagBoxOptions","TaggingRules","TagSet","TagSetDelayed","TagStyle","TagUnset","Take","TakeDrop","TakeLargest","TakeLargestBy","TakeList","TakeSmallest","TakeSmallestBy","TakeWhile","Tally","Tan","Tanh","TargetDevice","TargetFunctions","TargetSystem","TargetUnits","TaskAbort","TaskExecute","TaskObject","TaskRemove","TaskResume","Tasks","TaskSuspend","TaskWait","TautologyQ","TelegraphProcess","TemplateApply","TemplateArgBox","TemplateBox","TemplateBoxOptions","TemplateEvaluate","TemplateExpression","TemplateIf","TemplateObject","TemplateSequence","TemplateSlot","TemplateSlotSequence","TemplateUnevaluated","TemplateVerbatim","TemplateWith","TemporalData","TemporalRegularity","Temporary","TemporaryVariable","TensorContract","TensorDimensions","TensorExpand","TensorProduct","TensorQ","TensorRank","TensorReduce","TensorSymmetry","TensorTranspose","TensorWedge","TestID","TestReport","TestReportObject","TestResultObject","Tetrahedron","TetrahedronBox","TetrahedronBoxOptions","TeXForm","TeXSave","Text","Text3DBox","Text3DBoxOptions","TextAlignment","TextBand","TextBoundingBox","TextBox","TextCases","TextCell","TextClipboardType","TextContents","TextData","TextElement","TextForm","TextGrid","TextJustification","TextLine","TextPacket","TextParagraph","TextPosition","TextRecognize","TextSearch","TextSearchReport","TextSentences","TextString","TextStructure","TextStyle","TextTranslation","Texture","TextureCoordinateFunction","TextureCoordinateScaling","TextWords","Therefore","ThermodynamicData","ThermometerGauge","Thick","Thickness","Thin","Thinning","ThisLink","ThompsonGroupTh","Thread","ThreadingLayer","ThreeJSymbol","Threshold","Through","Throw","ThueMorse","Thumbnail","Thursday","Ticks","TicksStyle","TideData","Tilde","TildeEqual","TildeFullEqual","TildeTilde","TimeConstrained","TimeConstraint","TimeDirection","TimeFormat","TimeGoal","TimelinePlot","TimeObject","TimeObjectQ","TimeRemaining","Times","TimesBy","TimeSeries","TimeSeriesAggregate","TimeSeriesForecast","TimeSeriesInsert","TimeSeriesInvertibility","TimeSeriesMap","TimeSeriesMapThread","TimeSeriesModel","TimeSeriesModelFit","TimeSeriesResample","TimeSeriesRescale","TimeSeriesShift","TimeSeriesThread","TimeSeriesWindow","TimeUsed","TimeValue","TimeWarpingCorrespondence","TimeWarpingDistance","TimeZone","TimeZoneConvert","TimeZoneOffset","Timing","Tiny","TitleGrouping","TitsGroupT","ToBoxes","ToCharacterCode","ToColor","ToContinuousTimeModel","ToDate","Today","ToDiscreteTimeModel","ToEntity","ToeplitzMatrix","ToExpression","ToFileName","Together","Toggle","ToggleFalse","Toggler","TogglerBar","TogglerBox","TogglerBoxOptions","ToHeldExpression","ToInvertibleTimeSeries","TokenWords","Tolerance","ToLowerCase","Tomorrow","ToNumberField","TooBig","Tooltip","TooltipBox","TooltipBoxOptions","TooltipDelay","TooltipStyle","ToonShading","Top","TopHatTransform","ToPolarCoordinates","TopologicalSort","ToRadicals","ToRules","ToSphericalCoordinates","ToString","Total","TotalHeight","TotalLayer","TotalVariationFilter","TotalWidth","TouchPosition","TouchscreenAutoZoom","TouchscreenControlPlacement","ToUpperCase","Tr","Trace","TraceAbove","TraceAction","TraceBackward","TraceDepth","TraceDialog","TraceForward","TraceInternal","TraceLevel","TraceOff","TraceOn","TraceOriginal","TracePrint","TraceScan","TrackedSymbols","TrackingFunction","TracyWidomDistribution","TradingChart","TraditionalForm","TraditionalFunctionNotation","TraditionalNotation","TraditionalOrder","TrainingProgressCheckpointing","TrainingProgressFunction","TrainingProgressMeasurements","TrainingProgressReporting","TrainingStoppingCriterion","TrainingUpdateSchedule","TransferFunctionCancel","TransferFunctionExpand","TransferFunctionFactor","TransferFunctionModel","TransferFunctionPoles","TransferFunctionTransform","TransferFunctionZeros","TransformationClass","TransformationFunction","TransformationFunctions","TransformationMatrix","TransformedDistribution","TransformedField","TransformedProcess","TransformedRegion","TransitionDirection","TransitionDuration","TransitionEffect","TransitiveClosureGraph","TransitiveReductionGraph","Translate","TranslationOptions","TranslationTransform","Transliterate","Transparent","TransparentColor","Transpose","TransposeLayer","TrapSelection","TravelDirections","TravelDirectionsData","TravelDistance","TravelDistanceList","TravelMethod","TravelTime","TreeForm","TreeGraph","TreeGraphQ","TreePlot","TrendStyle","Triangle","TriangleCenter","TriangleConstruct","TriangleMeasurement","TriangleWave","TriangularDistribution","TriangulateMesh","Trig","TrigExpand","TrigFactor","TrigFactorList","Trigger","TrigReduce","TrigToExp","TrimmedMean","TrimmedVariance","TropicalStormData","True","TrueQ","TruncatedDistribution","TruncatedPolyhedron","TsallisQExponentialDistribution","TsallisQGaussianDistribution","TTest","Tube","TubeBezierCurveBox","TubeBezierCurveBoxOptions","TubeBox","TubeBoxOptions","TubeBSplineCurveBox","TubeBSplineCurveBoxOptions","Tuesday","TukeyLambdaDistribution","TukeyWindow","TunnelData","Tuples","TuranGraph","TuringMachine","TuttePolynomial","TwoWayRule","Typed","TypeSpecifier","UnateQ","Uncompress","UnconstrainedParameters","Undefined","UnderBar","Underflow","Underlined","Underoverscript","UnderoverscriptBox","UnderoverscriptBoxOptions","Underscript","UnderscriptBox","UnderscriptBoxOptions","UnderseaFeatureData","UndirectedEdge","UndirectedGraph","UndirectedGraphQ","UndoOptions","UndoTrackedVariables","Unequal","UnequalTo","Unevaluated","UniformDistribution","UniformGraphDistribution","UniformPolyhedron","UniformSumDistribution","Uninstall","Union","UnionedEntityClass","UnionPlus","Unique","UnitaryMatrixQ","UnitBox","UnitConvert","UnitDimensions","Unitize","UnitRootTest","UnitSimplify","UnitStep","UnitSystem","UnitTriangle","UnitVector","UnitVectorLayer","UnityDimensions","UniverseModelData","UniversityData","UnixTime","Unprotect","UnregisterExternalEvaluator","UnsameQ","UnsavedVariables","Unset","UnsetShared","UntrackedVariables","Up","UpArrow","UpArrowBar","UpArrowDownArrow","Update","UpdateDynamicObjects","UpdateDynamicObjectsSynchronous","UpdateInterval","UpdatePacletSites","UpdateSearchIndex","UpDownArrow","UpEquilibrium","UpperCaseQ","UpperLeftArrow","UpperRightArrow","UpperTriangularize","UpperTriangularMatrixQ","Upsample","UpSet","UpSetDelayed","UpTee","UpTeeArrow","UpTo","UpValues","URL","URLBuild","URLDecode","URLDispatcher","URLDownload","URLDownloadSubmit","URLEncode","URLExecute","URLExpand","URLFetch","URLFetchAsynchronous","URLParse","URLQueryDecode","URLQueryEncode","URLRead","URLResponseTime","URLSave","URLSaveAsynchronous","URLShorten","URLSubmit","UseGraphicsRange","UserDefinedWavelet","Using","UsingFrontEnd","UtilityFunction","V2Get","ValenceErrorHandling","ValidationLength","ValidationSet","Value","ValueBox","ValueBoxOptions","ValueDimensions","ValueForm","ValuePreprocessingFunction","ValueQ","Values","ValuesData","Variables","Variance","VarianceEquivalenceTest","VarianceEstimatorFunction","VarianceGammaDistribution","VarianceTest","VectorAngle","VectorAround","VectorAspectRatio","VectorColorFunction","VectorColorFunctionScaling","VectorDensityPlot","VectorGlyphData","VectorGreater","VectorGreaterEqual","VectorLess","VectorLessEqual","VectorMarkers","VectorPlot","VectorPlot3D","VectorPoints","VectorQ","VectorRange","Vectors","VectorScale","VectorScaling","VectorSizes","VectorStyle","Vee","Verbatim","Verbose","VerboseConvertToPostScriptPacket","VerificationTest","VerifyConvergence","VerifyDerivedKey","VerifyDigitalSignature","VerifyFileSignature","VerifyInterpretation","VerifySecurityCertificates","VerifySolutions","VerifyTestAssumptions","Version","VersionedPreferences","VersionNumber","VertexAdd","VertexCapacity","VertexColors","VertexComponent","VertexConnectivity","VertexContract","VertexCoordinateRules","VertexCoordinates","VertexCorrelationSimilarity","VertexCosineSimilarity","VertexCount","VertexCoverQ","VertexDataCoordinates","VertexDegree","VertexDelete","VertexDiceSimilarity","VertexEccentricity","VertexInComponent","VertexInDegree","VertexIndex","VertexJaccardSimilarity","VertexLabeling","VertexLabels","VertexLabelStyle","VertexList","VertexNormals","VertexOutComponent","VertexOutDegree","VertexQ","VertexRenderingFunction","VertexReplace","VertexShape","VertexShapeFunction","VertexSize","VertexStyle","VertexTextureCoordinates","VertexWeight","VertexWeightedGraphQ","Vertical","VerticalBar","VerticalForm","VerticalGauge","VerticalSeparator","VerticalSlider","VerticalTilde","Video","VideoEncoding","VideoExtractFrames","VideoFrameList","VideoFrameMap","VideoPause","VideoPlay","VideoQ","VideoStop","VideoStream","VideoStreams","VideoTimeSeries","VideoTracks","VideoTrim","ViewAngle","ViewCenter","ViewMatrix","ViewPoint","ViewPointSelectorSettings","ViewPort","ViewProjection","ViewRange","ViewVector","ViewVertical","VirtualGroupData","Visible","VisibleCell","VoiceStyleData","VoigtDistribution","VolcanoData","Volume","VonMisesDistribution","VoronoiMesh","WaitAll","WaitAsynchronousTask","WaitNext","WaitUntil","WakebyDistribution","WalleniusHypergeometricDistribution","WaringYuleDistribution","WarpingCorrespondence","WarpingDistance","WatershedComponents","WatsonUSquareTest","WattsStrogatzGraphDistribution","WaveletBestBasis","WaveletFilterCoefficients","WaveletImagePlot","WaveletListPlot","WaveletMapIndexed","WaveletMatrixPlot","WaveletPhi","WaveletPsi","WaveletScale","WaveletScalogram","WaveletThreshold","WeaklyConnectedComponents","WeaklyConnectedGraphComponents","WeaklyConnectedGraphQ","WeakStationarity","WeatherData","WeatherForecastData","WebAudioSearch","WebElementObject","WeberE","WebExecute","WebImage","WebImageSearch","WebSearch","WebSessionObject","WebSessions","WebWindowObject","Wedge","Wednesday","WeibullDistribution","WeierstrassE1","WeierstrassE2","WeierstrassE3","WeierstrassEta1","WeierstrassEta2","WeierstrassEta3","WeierstrassHalfPeriods","WeierstrassHalfPeriodW1","WeierstrassHalfPeriodW2","WeierstrassHalfPeriodW3","WeierstrassInvariantG2","WeierstrassInvariantG3","WeierstrassInvariants","WeierstrassP","WeierstrassPPrime","WeierstrassSigma","WeierstrassZeta","WeightedAdjacencyGraph","WeightedAdjacencyMatrix","WeightedData","WeightedGraphQ","Weights","WelchWindow","WheelGraph","WhenEvent","Which","While","White","WhiteNoiseProcess","WhitePoint","Whitespace","WhitespaceCharacter","WhittakerM","WhittakerW","WienerFilter","WienerProcess","WignerD","WignerSemicircleDistribution","WikidataData","WikidataSearch","WikipediaData","WikipediaSearch","WilksW","WilksWTest","WindDirectionData","WindingCount","WindingPolygon","WindowClickSelect","WindowElements","WindowFloating","WindowFrame","WindowFrameElements","WindowMargins","WindowMovable","WindowOpacity","WindowPersistentStyles","WindowSelected","WindowSize","WindowStatusArea","WindowTitle","WindowToolbars","WindowWidth","WindSpeedData","WindVectorData","WinsorizedMean","WinsorizedVariance","WishartMatrixDistribution","With","WolframAlpha","WolframAlphaDate","WolframAlphaQuantity","WolframAlphaResult","WolframLanguageData","Word","WordBoundary","WordCharacter","WordCloud","WordCount","WordCounts","WordData","WordDefinition","WordFrequency","WordFrequencyData","WordList","WordOrientation","WordSearch","WordSelectionFunction","WordSeparators","WordSpacings","WordStem","WordTranslation","WorkingPrecision","WrapAround","Write","WriteLine","WriteString","Wronskian","XMLElement","XMLObject","XMLTemplate","Xnor","Xor","XYZColor","Yellow","Yesterday","YuleDissimilarity","ZernikeR","ZeroSymmetric","ZeroTest","ZeroWidthTimes","Zeta","ZetaZero","ZIPCodeData","ZipfDistribution","ZoomCenter","ZoomFactor","ZTest","ZTransform","$Aborted","$ActivationGroupID","$ActivationKey","$ActivationUserRegistered","$AddOnsDirectory","$AllowDataUpdates","$AllowExternalChannelFunctions","$AllowInternet","$AssertFunction","$Assumptions","$AsynchronousTask","$AudioDecoders","$AudioEncoders","$AudioInputDevices","$AudioOutputDevices","$BaseDirectory","$BasePacletsDirectory","$BatchInput","$BatchOutput","$BlockchainBase","$BoxForms","$ByteOrdering","$CacheBaseDirectory","$Canceled","$ChannelBase","$CharacterEncoding","$CharacterEncodings","$CloudAccountName","$CloudBase","$CloudConnected","$CloudConnection","$CloudCreditsAvailable","$CloudEvaluation","$CloudExpressionBase","$CloudObjectNameFormat","$CloudObjectURLType","$CloudRootDirectory","$CloudSymbolBase","$CloudUserID","$CloudUserUUID","$CloudVersion","$CloudVersionNumber","$CloudWolframEngineVersionNumber","$CommandLine","$CompilationTarget","$ConditionHold","$ConfiguredKernels","$Context","$ContextPath","$ControlActiveSetting","$Cookies","$CookieStore","$CreationDate","$CurrentLink","$CurrentTask","$CurrentWebSession","$DataStructures","$DateStringFormat","$DefaultAudioInputDevice","$DefaultAudioOutputDevice","$DefaultFont","$DefaultFrontEnd","$DefaultImagingDevice","$DefaultLocalBase","$DefaultMailbox","$DefaultNetworkInterface","$DefaultPath","$DefaultProxyRules","$DefaultSystemCredentialStore","$Display","$DisplayFunction","$DistributedContexts","$DynamicEvaluation","$Echo","$EmbedCodeEnvironments","$EmbeddableServices","$EntityStores","$Epilog","$EvaluationCloudBase","$EvaluationCloudObject","$EvaluationEnvironment","$ExportFormats","$ExternalIdentifierTypes","$ExternalStorageBase","$Failed","$FinancialDataSource","$FontFamilies","$FormatType","$FrontEnd","$FrontEndSession","$GeoEntityTypes","$GeoLocation","$GeoLocationCity","$GeoLocationCountry","$GeoLocationPrecision","$GeoLocationSource","$HistoryLength","$HomeDirectory","$HTMLExportRules","$HTTPCookies","$HTTPRequest","$IgnoreEOF","$ImageFormattingWidth","$ImageResolution","$ImagingDevice","$ImagingDevices","$ImportFormats","$IncomingMailSettings","$InitialDirectory","$Initialization","$InitializationContexts","$Input","$InputFileName","$InputStreamMethods","$Inspector","$InstallationDate","$InstallationDirectory","$InterfaceEnvironment","$InterpreterTypes","$IterationLimit","$KernelCount","$KernelID","$Language","$LaunchDirectory","$LibraryPath","$LicenseExpirationDate","$LicenseID","$LicenseProcesses","$LicenseServer","$LicenseSubprocesses","$LicenseType","$Line","$Linked","$LinkSupported","$LoadedFiles","$LocalBase","$LocalSymbolBase","$MachineAddresses","$MachineDomain","$MachineDomains","$MachineEpsilon","$MachineID","$MachineName","$MachinePrecision","$MachineType","$MaxExtraPrecision","$MaxLicenseProcesses","$MaxLicenseSubprocesses","$MaxMachineNumber","$MaxNumber","$MaxPiecewiseCases","$MaxPrecision","$MaxRootDegree","$MessageGroups","$MessageList","$MessagePrePrint","$Messages","$MinMachineNumber","$MinNumber","$MinorReleaseNumber","$MinPrecision","$MobilePhone","$ModuleNumber","$NetworkConnected","$NetworkInterfaces","$NetworkLicense","$NewMessage","$NewSymbol","$NotebookInlineStorageLimit","$Notebooks","$NoValue","$NumberMarks","$Off","$OperatingSystem","$Output","$OutputForms","$OutputSizeLimit","$OutputStreamMethods","$Packages","$ParentLink","$ParentProcessID","$PasswordFile","$PatchLevelID","$Path","$PathnameSeparator","$PerformanceGoal","$Permissions","$PermissionsGroupBase","$PersistenceBase","$PersistencePath","$PipeSupported","$PlotTheme","$Post","$Pre","$PreferencesDirectory","$PreInitialization","$PrePrint","$PreRead","$PrintForms","$PrintLiteral","$Printout3DPreviewer","$ProcessID","$ProcessorCount","$ProcessorType","$ProductInformation","$ProgramName","$PublisherID","$RandomState","$RecursionLimit","$RegisteredDeviceClasses","$RegisteredUserName","$ReleaseNumber","$RequesterAddress","$RequesterWolframID","$RequesterWolframUUID","$RootDirectory","$ScheduledTask","$ScriptCommandLine","$ScriptInputString","$SecuredAuthenticationKeyTokens","$ServiceCreditsAvailable","$Services","$SessionID","$SetParentLink","$SharedFunctions","$SharedVariables","$SoundDisplay","$SoundDisplayFunction","$SourceLink","$SSHAuthentication","$SubtitleDecoders","$SubtitleEncoders","$SummaryBoxDataSizeLimit","$SuppressInputFormHeads","$SynchronousEvaluation","$SyntaxHandler","$System","$SystemCharacterEncoding","$SystemCredentialStore","$SystemID","$SystemMemory","$SystemShell","$SystemTimeZone","$SystemWordLength","$TemplatePath","$TemporaryDirectory","$TemporaryPrefix","$TestFileName","$TextStyle","$TimedOut","$TimeUnit","$TimeZone","$TimeZoneEntity","$TopDirectory","$TraceOff","$TraceOn","$TracePattern","$TracePostAction","$TracePreAction","$UnitSystem","$Urgent","$UserAddOnsDirectory","$UserAgentLanguages","$UserAgentMachine","$UserAgentName","$UserAgentOperatingSystem","$UserAgentString","$UserAgentVersion","$UserBaseDirectory","$UserBasePacletsDirectory","$UserDocumentsDirectory","$Username","$UserName","$UserURLBase","$Version","$VersionNumber","$VideoDecoders","$VideoEncoders","$VoiceStyles","$WolframDocumentsDirectory","$WolframID","$WolframUUID"];function RX2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function fX2(I){return Ta("(",I,")?")}function Ta(...I){return I.map((G)=>RX2(G)).join("")}function qX2(...I){return"("+I.map((G)=>RX2(G)).join("|")+")"}function s09(I){let d=/([2-9]|[1-2]\d|[3][0-5])\^\^/,G=/(\w*\.\w+|\w+\.\w*|\w+)/,Z=/(\d*\.\d+|\d+\.\d*|\d+)/,C=qX2(Ta(d,G),Z),B=qX2(/``[+-]?(\d*\.\d+|\d+\.\d*|\d+)/,/`([+-]?(\d*\.\d+|\d+\.\d*|\d+))?/),A=/\*\^[+-]?\d+/,X={className:"number",relevance:0,begin:Ta(C,fX2(B),fX2(A))},_=/[a-zA-Z$][a-zA-Z0-9$]*/,F=new Set(a09),g={variants:[{className:"builtin-symbol",begin:_,"on:begin":($,h)=>{if(!F.has($[0]))h.ignoreMatch()}},{className:"symbol",relevance:0,begin:_}]},J={className:"named-character",begin:/\\\[[$a-zA-Z][$a-zA-Z0-9]+\]/},K={className:"operator",relevance:0,begin:/[+\-*/,;.:@~=><&|_`'^?!%]+/},Q={className:"pattern",relevance:0,begin:/([a-zA-Z$][a-zA-Z0-9$]*)?_+([a-zA-Z$][a-zA-Z0-9$]*)?/},E={className:"slot",relevance:0,begin:/#[a-zA-Z$][a-zA-Z0-9$]*|#+[0-9]?/},S={className:"brace",relevance:0,begin:/[[\](){}]/},P={className:"message-name",relevance:0,begin:Ta("::",_)};return{name:"Mathematica",aliases:["mma","wl"],classNameAliases:{brace:"punctuation",pattern:"type",slot:"type",symbol:"variable","named-character":"variable","builtin-symbol":"built_in","message-name":"string"},contains:[I.COMMENT(/\(\*/,/\*\)/,{contains:["self"]}),Q,E,P,g,J,I.QUOTE_STRING_MODE,X,K,S]}}UX2.exports=s09});var MX2=Y((UF3,EX2)=>{function o09(I){var d="('|\\.')+",G={relevance:0,contains:[{begin:d}]};return{name:"Matlab",keywords:{keyword:"arguments break case catch classdef continue else elseif end enumeration events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i|0 inf nan isnan isinf isfinite j|0 why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell "},illegal:'(//|"|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[I.UNDERSCORE_TITLE_MODE,{className:"params",variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}]}]},{className:"built_in",begin:/true|false/,relevance:0,starts:G},{begin:"[a-zA-Z][a-zA-Z_0-9]*"+d,relevance:0},{className:"number",begin:I.C_NUMBER_RE,relevance:0,starts:G},{className:"string",begin:"'",end:"'",contains:[I.BACKSLASH_ESCAPE,{begin:"''"}]},{begin:/\]|\}|\)/,relevance:0,starts:G},{className:"string",begin:'"',end:'"',contains:[I.BACKSLASH_ESCAPE,{begin:'""'}],starts:G},I.COMMENT("^\\s*%\\{\\s*$","^\\s*%\\}\\s*$"),I.COMMENT("%","$")]}}EX2.exports=o09});var LX2=Y((vF3,SX2)=>{function e09(I){let Z=" abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type alias allroots alphacharp alphanumericp amortization %and annuity_fv annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2 applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method av average_degree backtrace bars barsplot barsplot_description base64 base64_decode bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description break bug_report build_info|10 buildq build_sample burn cabs canform canten cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2 charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps chinese cholesky christof chromatic_index chromatic_number cint circulant_graph clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse collectterms columnop columnspace columnswap columnvector combination combine comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph complete_graph complex_number_p components compose_functions concan concat conjugate conmetderiv connected_components connect_vertices cons constant constantp constituent constvalue cont2part content continuous_freq contortion contour_plot contract contract_edge contragrad contrib_ode convert coord copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1 covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate declare declare_constvalue declare_dimensions declare_fundamental_dimensions declare_fundamental_units declare_qty declare_translated declare_unit_conversion declare_units declare_weights decsym defcon define define_alt_display define_variable defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten delta demo demoivre denom depends derivdegree derivlist describe desolve determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export dimacs_import dimension dimensionless dimensions dimensions_as_list direct directory discrete_freq disjoin disjointp disolate disp dispcon dispform dispfun dispJordan display disprule dispterms distrib divide divisors divsum dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors euler ev eval_string evenp every evolution evolution2d evundiff example exp expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li expintegral_shi expintegral_si explicit explose exponentialize express expt exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge file_search file_type fillarray findde find_root find_root_abs find_root_error find_root_rel first fix flatten flength float floatnump floor flower_snark flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string get_pixel get_plot_option get_tex_environment get_tex_environment_default get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart imetric implicit implicit_derivative implicit_plot indexed_tensor indices induced_subgraph inferencep inference_result infix info_display init_atensor init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions integrate intersect intersection intervalp intopois intosum invariant1 invariant2 inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2 kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit Lindstedt linear linearinterpol linear_program linear_regression line_graph linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country make_polygon make_random_state make_rgb_picture makeset make_string_input_stream make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker max max_clique max_degree max_flow maximize_lp max_independent_set max_matching maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext newdet new_graph newline newton new_variable next_prime nicedummies niceindices ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst nthroot nullity nullspace num numbered_boundaries numberp number_to_octets num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin oid_to_octets op opena opena_binary openr openr_binary openw openw_binary operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface parg parGosper parse_string parse_timedate part part2cont partfrac partition partition_set partpol path_digraph path_graph pathname_directory pathname_name pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod powerseries powerset prefix prev_prime primep primes principal_components print printf printfile print_graph printpois printprops prodrac product properties propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2 quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan radius random random_bernoulli random_beta random_binomial random_bipartite_graph random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform random_exp random_f random_gamma random_general_finite_discrete random_geometric random_graph random_graph1 random_gumbel random_hypergeometric random_laplace random_logistic random_lognormal random_negative_binomial random_network random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto random_permutation random_poisson random_rayleigh random_regular_graph random_student_t random_tournament random_tree random_weibull range rank rat ratcoef ratdenom ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus rem remainder remarray rembox remcomps remcon remcoord remfun remfunction remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions remove_fundamental_units remove_plot_option remove_vertex rempart remrule remsym remvalue rename rename_file reset reset_displays residue resolvante resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann rinvariant risch rk rmdir rncombine romberg room rootscontract round row rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1 spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot starplot_description status std std1 std_bernoulli std_beta std_binomial std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull stemplot stirling stirling1 stirling2 strim striml strimr string stringout stringp strong_components struve_h struve_l sublis sublist sublist_indices submatrix subsample subset subsetp subst substinpart subst_parallel substpart substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext symbolp symmdifference symmetricp system take_channel take_inference tan tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference test_normality test_proportion test_proportions_difference test_rank_sum test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep totalfourier totient tpartpol trace tracematrix trace_options transform_sample translate translate_file transpose treefale tree_reduce treillis treinat triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget ultraspherical underlying_graph undiff union unique uniteigenvectors unitp units unit_step unitvector unorder unsum untellrat untimer untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table absboxchar activecontexts adapt_depth additive adim aform algebraic algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top azimuth background background_color backsubst berlefact bernstein_explicit besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest border boundaries_array box boxchar breakup %c capping cauchysum cbrange cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics colorbox columns commutative complex cone context contexts contour contour_levels cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp cube current_let_rule_package cylinder data_file_name debugmode decreasing default_let_rule_package delay dependencies derivabbrev derivsubst detout diagmetric diff dim dimensions dispflag display2d|10 display_format_internal distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart edge_color edge_coloring edge_partition edge_type edge_width %edispflag elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine factlim factorflag factorial_expand factors_only fb feature features file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10 file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color fill_density filled_func fixed_vertices flipflag float2bf font font_size fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both head_length head_type height hypergeometric_representation %iargs ibase icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued integrate_use_rootsof integration_constant integration_constant_counter interpolate_color intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10 maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties opsubst optimprefix optionset orientation origin orthopoly_returns_intervals outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart png_file pochhammer_max_index points pointsize point_size points_joined point_type poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list poly_secondary_elimination_order poly_top_reduction_only posfun position powerdisp pred prederror primep_number_of_tests product_use_gamma program programmode promote_float_to_bigfloat prompt proportional_axes props psexpand ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type show_vertices show_weight simp simplified_output simplify_products simpproduct simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch tr track transcompile transform transform_xy translate_fast_arrays transparent transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest",C="_ __ %|0 %%|0";return{name:"Maxima",keywords:{$pattern:"[A-Za-z_%][0-9A-Za-z_%]*",keyword:"if then else elseif for thru do while unless step in and or not",literal:"true false unknown inf minf ind und %e %i %pi %phi %gamma",built_in:Z,symbol:"_ __ %|0 %%|0"},contains:[{className:"comment",begin:"/\\*",end:"\\*/",contains:["self"]},I.QUOTE_STRING_MODE,{className:"number",relevance:0,variants:[{begin:"\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Ee][-+]?\\d+\\b"},{begin:"\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Bb][-+]?\\d+\\b",relevance:10},{begin:"\\b(\\.\\d+|\\d+\\.\\d+)\\b"},{begin:"\\b(\\d+|0[0-9A-Za-z]+)\\.?\\b"}]}],illegal:/@/}}SX2.exports=e09});var PX2=Y((EF3,yX2)=>{function t09(I){return{name:"MEL",keywords:"int float string vector matrix if else switch case default while do for in break continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor animDisplay animView annotate appendStringArray applicationName applyAttrPreset applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem componentEditor compositingInterop computePolysetVolume condition cone confirmDialog connectAttr connectControl connectDynamic connectJoint connectionInfo constrain constrainValue constructionHistory container containsMultibyte contextInfo control convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected displayColor displayCull displayLevelOfDetail displayPref displayRGBColor displaySmoothness displayStats displayString displaySurface distanceDimContext distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor editorTemplate effector emit emitter enableDevice encodeString endString endsWith env equivalent equivalentTol erf error eval evalDeferred evalEcho event exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo filetest filletCurve filter filterCurve filterExpand filterStudioImport findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss geometryConstraint getApplicationVersionAsFloat getAttr getClassification getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation listNodeTypes listPanelCategories listRelatives listSets listTransforms listUnselected listerEditor loadFluid loadNewShelf loadPlugin loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration panelHistory paramDimContext paramDimension paramLocator parent parentConstraint particle particleExists particleInstancer particleRenderInfo partition pasteKey pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE registerPluginResource rehash reloadImage removeJoint removeMultiInstance removePanelCategory rename renameAttr renameSelectionList renameUI render renderGlobalsNode renderInfo renderLayerButton renderLayerParent renderLayerPostProcess renderLayerUnparent renderManip renderPartition renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor renderWindowSelectContext renderer reorder reorderDeformers requires reroot resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType selectedNodes selectionConnection separator setAttr setAttrEnumResource setAttrMapping setAttrNiceNameResource setConstraintRestPosition setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField shortNameOf showHelp showHidden showManipCtx showSelectionInTitle showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString stringToStringArray strip stripPrefixFromName stroke subdAutoProjection subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList textToShelf textureDisplacePlane textureHairColor texturePlacementContext textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper trace track trackCtx transferAttributes transformCompare transformLimits translator trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform",illegal:"{function I29(I){let d={keyword:"module use_module import_module include_module end_module initialise mutable initialize finalize finalise interface implementation pred mode func type inst solver any_pred any_func is semidet det nondet multi erroneous failure cc_nondet cc_multi typeclass instance where pragma promise external trace atomic or_else require_complete_switch require_det require_semidet require_multi require_nondet require_cc_multi require_cc_nondet require_erroneous require_failure",meta:"inline no_inline type_spec source_file fact_table obsolete memo loop_check minimal_model terminates does_not_terminate check_termination promise_equivalent_clauses foreign_proc foreign_decl foreign_code foreign_type foreign_import_module foreign_export_enum foreign_export foreign_enum may_call_mercury will_not_call_mercury thread_safe not_thread_safe maybe_thread_safe promise_pure promise_semipure tabled_for_io local untrailed trailed attach_to_io_state can_pass_as_mercury_type stable will_not_throw_exception may_modify_trail will_not_modify_trail may_duplicate may_not_duplicate affects_liveness does_not_affect_liveness doesnt_affect_liveness no_sharing unknown_sharing sharing",built_in:"some all not if then else true fail false try catch catch_any semidet_true semidet_false semidet_fail impure_true impure semipure"},G=I.COMMENT("%","$"),Z={className:"number",begin:"0'.\\|0[box][0-9a-fA-F]*"},C=I.inherit(I.APOS_STRING_MODE,{relevance:0}),W=I.inherit(I.QUOTE_STRING_MODE,{relevance:0}),w={className:"subst",begin:"\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]",relevance:0};return W.contains=W.contains.slice(),W.contains.push(w),{name:"Mercury",aliases:["m","moo"],keywords:d,contains:[{className:"built_in",variants:[{begin:"<=>"},{begin:"<=",relevance:0},{begin:"=>",relevance:0},{begin:"/\\\\"},{begin:"\\\\/"}]},{className:"built_in",variants:[{begin:":-\\|-->"},{begin:"=",relevance:0}]},G,I.C_BLOCK_COMMENT_MODE,Z,I.NUMBER_MODE,C,W,{begin:/:-/},{begin:/\.$/}]}}$X2.exports=I29});var OX2=Y((SF3,TX2)=>{function d29(I){return{name:"MIPS Assembly",case_insensitive:!0,aliases:["mips"],keywords:{$pattern:"\\.?"+I.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},contains:[{className:"keyword",begin:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\\.hb)?|jr(\\.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs\\.[sd]|add\\.[sd]|alnv.ps|bc1[ft]l?|c\\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\\.[sd]|(ceil|floor|round|trunc)\\.[lw]\\.[sd]|cfc1|cvt\\.d\\.[lsw]|cvt\\.l\\.[dsw]|cvt\\.ps\\.s|cvt\\.s\\.[dlw]|cvt\\.s\\.p[lu]|cvt\\.w\\.[dls]|div\\.[ds]|ldx?c1|luxc1|lwx?c1|madd\\.[sd]|mfc1|mov[fntz]?\\.[ds]|msub\\.[sd]|mth?c1|mul\\.[ds]|neg\\.[ds]|nmadd\\.[ds]|nmsub\\.[ds]|p[lu][lu]\\.ps|recip\\.fmt|r?sqrt\\.[ds]|sdx?c1|sub\\.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",end:"\\s"},I.COMMENT("[;#](?!\\s*$)","$"),I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"0x[0-9a-f]+"},{begin:"\\b-?\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^\\s*[0-9]+:"},{begin:"[0-9]+[bf]"}],relevance:0}],illegal:/\//}}TX2.exports=d29});var lX2=Y((LF3,mX2)=>{function G29(I){return{name:"Mizar",keywords:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",contains:[I.COMMENT("::","$")]}}mX2.exports=G29});var kX2=Y((yF3,jX2)=>{function hX2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function qR(...I){return I.map((G)=>hX2(G)).join("")}function bX2(...I){return"("+I.map((G)=>hX2(G)).join("|")+")"}function Z29(I){let d=["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"],G=/[dualxmsipngr]{0,12}/,Z={$pattern:/[\w.]+/,keyword:d.join(" ")},C={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:Z},W={begin:/->\{/,end:/\}/},w={variants:[{begin:/\$\d/},{begin:qR(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@][^\s\w{]/,relevance:0}]},B=[I.BACKSLASH_ESCAPE,C,w],A=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],V=(F,g,J="\\1")=>{let K=J==="\\1"?J:qR(J,g);return qR(qR("(?:",F,")"),g,/(?:\\.|[^\\\/])*?/,K,/(?:\\.|[^\\\/])*?/,J,G)},X=(F,g,J)=>{return qR(qR("(?:",F,")"),g,/(?:\\.|[^\\\/])*?/,J,G)},_=[w,I.HASH_COMMENT_MODE,I.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),W,{className:"string",contains:B,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[I.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[I.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+I.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[I.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:V("s|tr|y",bX2(...A))},{begin:V("s|tr|y","\\(","\\)")},{begin:V("s|tr|y","\\[","\\]")},{begin:V("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:X("(?:m|qr)?",/\//,/\//)},{begin:X("m|qr",bX2(...A),/\1/)},{begin:X("m|qr",/\(/,/\)/)},{begin:X("m|qr",/\[/,/\]/)},{begin:X("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[I.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return C.contains=_,W.contains=_,{name:"Perl",aliases:["pl","pm"],keywords:Z,contains:_}}jX2.exports=Z29});var cX2=Y((PF3,xX2)=>{function C29(I){return{name:"Mojolicious",subLanguage:"xml",contains:[{className:"meta",begin:"^__(END|DATA)__$"},{begin:"^\\s*%{1,2}={0,2}",end:"$",subLanguage:"perl"},{begin:"<%{1,2}={0,2}",end:"={0,1}%>",subLanguage:"perl",excludeBegin:!0,excludeEnd:!0}]}}xX2.exports=C29});var iX2=Y(($F3,pX2)=>{function W29(I){let d={className:"number",relevance:0,variants:[{begin:"[$][a-fA-F0-9]+"},I.NUMBER_MODE]};return{name:"Monkey",case_insensitive:!0,keywords:{keyword:"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw import",built_in:"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI",literal:"true false null and or shl shr mod"},illegal:/\/\*/,contains:[I.COMMENT("#rem","#end"),I.COMMENT("'","$",{relevance:0}),{className:"function",beginKeywords:"function method",end:"[(=:]|$",illegal:/\n/,contains:[I.UNDERSCORE_TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"$",contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]},{className:"built_in",begin:"\\b(self|super)\\b"},{className:"meta",begin:"\\s*#",end:"$",keywords:{"meta-keyword":"if else elseif endif end then"}},{className:"meta",begin:"^\\s*strict\\b"},{beginKeywords:"alias",end:"=",contains:[I.UNDERSCORE_TITLE_MODE]},I.QUOTE_STRING_MODE,d]}}pX2.exports=W29});var rX2=Y((uF3,nX2)=>{function w29(I){let d={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},G="[A-Za-z$_][0-9A-Za-z$_]*",Z={className:"subst",begin:/#\{/,end:/\}/,keywords:d},C=[I.inherit(I.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'/,end:/'/,contains:[I.BACKSLASH_ESCAPE]},{begin:/"/,end:/"/,contains:[I.BACKSLASH_ESCAPE,Z]}]},{className:"built_in",begin:"@__"+I.IDENT_RE},{begin:"@"+I.IDENT_RE},{begin:I.IDENT_RE+"\\\\"+I.IDENT_RE}];Z.contains=C;let W=I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),w="(\\(.*\\)\\s*)?\\B[-=]>",B={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:d,contains:["self"].concat(C)}]};return{name:"MoonScript",aliases:["moon"],keywords:d,illegal:/\/\*/,contains:C.concat([I.COMMENT("--","$"),{className:"function",begin:"^\\s*[A-Za-z$_][0-9A-Za-z$_]*\\s*=\\s*"+w,end:"[-=]>",returnBegin:!0,contains:[W,B]},{begin:/[\(,:=]\s*/,relevance:0,contains:[{className:"function",begin:w,end:"[-=]>",returnBegin:!0,contains:[B]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[W]},W]},{className:"name",begin:"[A-Za-z$_][0-9A-Za-z$_]*:",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}nX2.exports=w29});var sX2=Y((TF3,aX2)=>{function B29(I){return{name:"N1QL",case_insensitive:!0,contains:[{beginKeywords:"build create index delete drop explain infer|10 insert merge prepare select update upsert|10",end:/;/,endsWithParent:!0,keywords:{keyword:"all alter analyze and any array as asc begin between binary boolean break bucket build by call case cast cluster collate collection commit connect continue correlate cover create database dataset datastore declare decrement delete derived desc describe distinct do drop each element else end every except exclude execute exists explain fetch first flatten for force from function grant group gsi having if ignore ilike in include increment index infer inline inner insert intersect into is join key keys keyspace known last left let letting like limit lsm map mapping matched materialized merge minus namespace nest not number object offset on option or order outer over parse partition password path pool prepare primary private privilege procedure public raw realm reduce rename return returning revoke right role rollback satisfies schema select self semi set show some start statistics string system then to transaction trigger truncate under union unique unknown unnest unset update upsert use user using validate value valued values via view when where while with within work xor",literal:"true false null missing|5",built_in:"array_agg array_append array_concat array_contains array_count array_distinct array_ifnull array_length array_max array_min array_position array_prepend array_put array_range array_remove array_repeat array_replace array_reverse array_sort array_sum avg count max min sum greatest least ifmissing ifmissingornull ifnull missingif nullif ifinf ifnan ifnanorinf naninf neginfif posinfif clock_millis clock_str date_add_millis date_add_str date_diff_millis date_diff_str date_part_millis date_part_str date_trunc_millis date_trunc_str duration_to_str millis str_to_millis millis_to_str millis_to_utc millis_to_zone_name now_millis now_str str_to_duration str_to_utc str_to_zone_name decode_json encode_json encoded_size poly_length base64 base64_encode base64_decode meta uuid abs acos asin atan atan2 ceil cos degrees e exp ln log floor pi power radians random round sign sin sqrt tan trunc object_length object_names object_pairs object_inner_pairs object_values object_inner_values object_add object_put object_remove object_unwrap regexp_contains regexp_like regexp_position regexp_replace contains initcap length lower ltrim position repeat replace rtrim split substr title trim upper isarray isatom isboolean isnumber isobject isstring type toarray toatom toboolean tonumber toobject tostring"},contains:[{className:"string",begin:"'",end:"'",contains:[I.BACKSLASH_ESCAPE]},{className:"string",begin:'"',end:'"',contains:[I.BACKSLASH_ESCAPE]},{className:"symbol",begin:"`",end:"`",contains:[I.BACKSLASH_ESCAPE],relevance:2},I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE]},I.C_BLOCK_COMMENT_MODE]}}aX2.exports=B29});var eX2=Y((OF3,oX2)=>{function A29(I){let d={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/\}/},{begin:/[$@]/+I.UNDERSCORE_IDENT_RE}]},G={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[I.HASH_COMMENT_MODE,{className:"string",contains:[I.BACKSLASH_ESCAPE,d],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[d]},{className:"regexp",contains:[I.BACKSLASH_ESCAPE,d],variants:[{begin:"\\s\\^",end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},d]};return{name:"Nginx config",aliases:["nginxconf"],contains:[I.HASH_COMMENT_MODE,{begin:I.UNDERSCORE_IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\{/,contains:[{className:"section",begin:I.UNDERSCORE_IDENT_RE}],relevance:0},{begin:I.UNDERSCORE_IDENT_RE+"\\s",end:";|\\{",returnBegin:!0,contains:[{className:"attribute",begin:I.UNDERSCORE_IDENT_RE,starts:G}],relevance:0}],illegal:"[^\\s\\}]"}}oX2.exports=A29});var IY2=Y((mF3,tX2)=>{function V29(I){return{name:"Nim",keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/\{\./,end:/\.\}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},I.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},I.HASH_COMMENT_MODE]}}tX2.exports=V29});var GY2=Y((lF3,dY2)=>{function X29(I){let d={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},G={className:"subst",begin:/\$\{/,end:/\}/,keywords:d},Z={begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]},C={className:"string",contains:[G],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},W=[I.NUMBER_MODE,I.HASH_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,C,Z];return G.contains=W,{name:"Nix",aliases:["nixos"],keywords:d,contains:W}}dY2.exports=X29});var CY2=Y((bF3,ZY2)=>{function Y29(I){return{name:"Node REPL",contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"javascript"}},variants:[{begin:/^>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}ZY2.exports=Y29});var wY2=Y((hF3,WY2)=>{function _29(I){let d={className:"variable",begin:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},G={className:"variable",begin:/\$+\{[\w.:-]+\}/},Z={className:"variable",begin:/\$+\w+/,illegal:/\(\)\{\}/},C={className:"variable",begin:/\$+\([\w^.:-]+\)/},W={className:"params",begin:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},w={className:"keyword",begin:/!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|searchparse|searchreplace|system|tempfile|undef|verbose|warning)/},B={className:"meta",begin:/\$(\\[nrt]|\$)/},A={className:"class",begin:/\w+::\w+/},V={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"},{begin:"`",end:"`"}],illegal:/\n/,contains:[B,d,G,Z,C]};return{name:"NSIS",case_insensitive:!1,keywords:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecShellWait ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileWriteUTF16LE FileSeek FileWrite FileWriteByte FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetKnownFolderPath GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfRtlLanguage IfShellVarContextAll IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText Int64Cmp Int64CmpU Int64Fmt IntCmp IntCmpU IntFmt IntOp IntPtrCmp IntPtrCmpU IntPtrOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadAndSetImage LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestLongPathAware ManifestMaxVersionTested ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PEAddResource PEDllCharacteristics PERemoveResource PESubsysVer Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegMultiStr WriteRegNone WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},contains:[I.HASH_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.COMMENT(";","$",{relevance:0}),{className:"function",beginKeywords:"Function PageEx Section SectionGroup",end:"$"},V,w,G,Z,C,W,A,I.NUMBER_MODE]}}WY2.exports=_29});var AY2=Y((jF3,BY2)=>{function D29(I){let d={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},G=/[a-zA-Z@][a-zA-Z0-9_]*/,Z={$pattern:G,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},C={$pattern:G,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:Z,illegal:"/,end:/$/,illegal:"\\n"},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+C.keyword.split(" ").join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:C,contains:[I.UNDERSCORE_TITLE_MODE]},{begin:"\\."+I.UNDERSCORE_IDENT_RE,relevance:0}]}}BY2.exports=D29});var XY2=Y((kF3,VY2)=>{function H29(I){return{name:"OCaml",aliases:["ml"],keywords:{$pattern:"[a-z_]\\w*!?",keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},illegal:/\/\/|>>/,contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},I.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*",relevance:0},I.inherit(I.APOS_STRING_MODE,{className:"string",relevance:0}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/->/}]}}VY2.exports=H29});var _Y2=Y((xF3,YY2)=>{function F29(I){let d={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},G={className:"literal",begin:"false|true|PI|undef"},Z={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},C=I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),W={className:"meta",keywords:{"meta-keyword":"include use"},begin:"include|use <",end:">"},w={className:"params",begin:"\\(",end:"\\)",contains:["self",Z,C,d,G]},B={begin:"[*!#%]",relevance:0},A={className:"function",beginKeywords:"module function",end:/=|\{/,contains:[w,I.UNDERSCORE_TITLE_MODE]};return{name:"OpenSCAD",aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,Z,W,C,d,B,A]}}YY2.exports=F29});var HY2=Y((cF3,DY2)=>{function g29(I){let d={$pattern:/\.?\w+/,keyword:"abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained"},G=I.COMMENT(/\{/,/\}/,{relevance:0}),Z=I.COMMENT("\\(\\*","\\*\\)",{relevance:10}),C={className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},W={className:"string",begin:"(#\\d+)+"},w={className:"function",beginKeywords:"function constructor destructor procedure method",end:"[:;]",keywords:"function constructor|10 destructor|10 procedure|10 method|10",contains:[I.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",keywords:d,contains:[C,W]},G,Z]};return{name:"Oxygene",case_insensitive:!0,keywords:d,illegal:'("|\\$[G-Zg-z]|\\/\\*||->)',contains:[G,Z,I.C_LINE_COMMENT_MODE,C,W,I.NUMBER_MODE,w,{className:"class",begin:"=\\bclass\\b",end:"end;",keywords:d,contains:[C,W,G,Z,I.C_LINE_COMMENT_MODE,w]}]}}DY2.exports=g29});var gY2=Y((pF3,FY2)=>{function J29(I){let d=I.COMMENT(/\{/,/\}/,{contains:["self"]});return{name:"Parser3",subLanguage:"xml",relevance:0,contains:[I.COMMENT("^#","$"),I.COMMENT(/\^rem\{/,/\}/,{relevance:10,contains:[d]}),{className:"meta",begin:"^@(?:BASE|USE|CLASS|OPTIONS)$",relevance:10},{className:"title",begin:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{className:"variable",begin:/\$\{?[\w\-.:]+\}?/},{className:"keyword",begin:/\^[\w\-.:]+/},{className:"number",begin:"\\^#[0-9a-fA-F]+"},I.C_NUMBER_MODE]}}FY2.exports=J29});var KY2=Y((iF3,JY2)=>{function K29(I){let d={className:"variable",begin:/\$[\w\d#@][\w\d_]*/},G={className:"variable",begin:/<(?!\/)/,end:/>/};return{name:"Packet Filter config",aliases:["pf.conf"],keywords:{$pattern:/[a-z0-9_<>-]+/,built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to route allow-opts divert-packet divert-reply divert-to flags group icmp-type icmp6-type label once probability recieved-on rtable prio queue tos tag tagged user keep fragment for os drop af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin source-hash static-port dup-to reply-to route-to parent bandwidth default min max qlimit block-policy debug fingerprints hostid limit loginterface optimization reassemble ruleset-optimization basic none profile skip state-defaults state-policy timeout const counters persist no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy source-track global rule max-src-nodes max-src-states max-src-conn max-src-conn-rate overload flush scrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},contains:[I.HASH_COMMENT_MODE,I.NUMBER_MODE,I.QUOTE_STRING_MODE,d,G]}}JY2.exports=K29});var zY2=Y((nF3,NY2)=>{function N29(I){let d=I.COMMENT("--","$"),G="[a-zA-Z_][a-zA-Z_0-9$]*",Z="\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",C="<<\\s*[a-zA-Z_][a-zA-Z_0-9$]*\\s*>>",W="ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION INDEX PROCEDURE ASSERTION ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS DEFERRABLE RANGE DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED OF NOTHING NONE EXCLUDE ATTRIBUTE USAGE ROUTINES TRUE FALSE NAN INFINITY ",w="SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ",B="ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT OPEN ",A="BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR NAME OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ",V=A.trim().split(" ").map(function(K){return K.split("|")[0]}).join("|"),X="CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC ",_="FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 ",F="SQLSTATE SQLERRM|10 SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED INDEX_CORRUPTED ",J="ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP PERCENTILE_CONT PERCENTILE_DISC ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE NUM_NONNULLS NUM_NULLS ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT TRUNC WIDTH_BUCKET RANDOM SETSEED ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR TO_ASCII TO_HEX TRANSLATE OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 TIMEOFDAY TRANSACTION_TIMESTAMP|10 ENUM_FIRST ENUM_LAST ENUM_RANGE AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY INET_MERGE MACADDR8_SET7BIT ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA CURSOR_TO_XML CURSOR_TO_XMLSCHEMA SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA XMLATTRIBUTES TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY CURRVAL LASTVAL NEXTVAL SETVAL COALESCE NULLIF GREATEST LEAST ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY STRING_TO_ARRAY UNNEST ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE GENERATE_SERIES GENERATE_SUBSCRIPTS CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE GIN_CLEAN_PENDING_LIST SUPPRESS_REDUNDANT_UPDATES_TRIGGER LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE GROUPING CAST ".trim().split(" ").map(function(K){return K.split("|")[0]}).join("|");return{name:"PostgreSQL",aliases:["postgres","postgresql"],case_insensitive:!0,keywords:{keyword:W+B+w,built_in:X+_+F},illegal:/:==|\W\s*\(\*|(^|\s)\$[a-z]|\{\{|[a-z]:\s*$|\.\.\.|TO:|DO:/,contains:[{className:"keyword",variants:[{begin:/\bTEXT\s*SEARCH\b/},{begin:/\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/},{begin:/\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/},{begin:/\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/},{begin:/\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/},{begin:/\bNULLS\s+(FIRST|LAST)\b/},{begin:/\bEVENT\s+TRIGGER\b/},{begin:/\b(MAPPING|OR)\s+REPLACE\b/},{begin:/\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/},{begin:/\b(SHARE|EXCLUSIVE)\s+MODE\b/},{begin:/\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/},{begin:/\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/},{begin:/\bPRESERVE\s+ROWS\b/},{begin:/\bDISCARD\s+PLANS\b/},{begin:/\bREFERENCING\s+(OLD|NEW)\b/},{begin:/\bSKIP\s+LOCKED\b/},{begin:/\bGROUPING\s+SETS\b/},{begin:/\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/},{begin:/\b(WITH|WITHOUT)\s+HOLD\b/},{begin:/\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/},{begin:/\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/},{begin:/\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/},{begin:/\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/},{begin:/\bIS\s+(NOT\s+)?UNKNOWN\b/},{begin:/\bSECURITY\s+LABEL\b/},{begin:/\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/},{begin:/\bWITH\s+(NO\s+)?DATA\b/},{begin:/\b(FOREIGN|SET)\s+DATA\b/},{begin:/\bSET\s+(CATALOG|CONSTRAINTS)\b/},{begin:/\b(WITH|FOR)\s+ORDINALITY\b/},{begin:/\bIS\s+(NOT\s+)?DOCUMENT\b/},{begin:/\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/},{begin:/\b(STRIP|PRESERVE)\s+WHITESPACE\b/},{begin:/\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/},{begin:/\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/},{begin:/\bAT\s+TIME\s+ZONE\b/},{begin:/\bGRANTED\s+BY\b/},{begin:/\bRETURN\s+(QUERY|NEXT)\b/},{begin:/\b(ATTACH|DETACH)\s+PARTITION\b/},{begin:/\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/},{begin:/\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/},{begin:/\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/}]},{begin:/\b(FORMAT|FAMILY|VERSION)\s*\(/},{begin:/\bINCLUDE\s*\(/,keywords:"INCLUDE"},{begin:/\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/},{begin:/\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/},{begin:/\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/,relevance:10},{begin:/\bEXTRACT\s*\(/,end:/\bFROM\b/,returnEnd:!0,keywords:{type:"CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR TIMEZONE_MINUTE WEEK YEAR"}},{begin:/\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/,keywords:{keyword:"NAME"}},{begin:/\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/,keywords:{keyword:"DOCUMENT CONTENT"}},{beginKeywords:"CACHE INCREMENT MAXVALUE MINVALUE",end:I.C_NUMBER_RE,returnEnd:!0,keywords:"BY CACHE INCREMENT MAXVALUE MINVALUE"},{className:"type",begin:/\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/},{className:"type",begin:/\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/},{begin:/\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,keywords:{keyword:"RETURNS",type:"LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER"}},{begin:"\\b("+J+")\\s*\\("},{begin:"\\.("+V+")\\b"},{begin:"\\b("+V+")\\s+PATH\\b",keywords:{keyword:"PATH",type:A.replace("PATH ","")}},{className:"type",begin:"\\b("+V+")\\b"},{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:"(e|E|u&|U&)'",end:"'",contains:[{begin:"\\\\."}],relevance:10},I.END_SAME_AS_BEGIN({begin:"\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",end:"\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",contains:[{subLanguage:["pgsql","perl","python","tcl","r","lua","java","php","ruby","bash","scheme","xml","json"],endsWithParent:!0}]}),{begin:'"',end:'"',contains:[{begin:'""'}]},I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE,d,{className:"meta",variants:[{begin:"%(ROW)?TYPE",relevance:10},{begin:"\\$\\d+"},{begin:"^#\\w",end:"$"}]},{className:"symbol",begin:C,relevance:10}]}}NY2.exports=N29});var fY2=Y((rF3,QY2)=>{function z29(I){let d={className:"variable",begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"+"(?![A-Za-z0-9])(?![$])"},G={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},Z={className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},C=I.inherit(I.APOS_STRING_MODE,{illegal:null}),W=I.inherit(I.QUOTE_STRING_MODE,{illegal:null,contains:I.QUOTE_STRING_MODE.contains.concat(Z)}),w=I.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:I.QUOTE_STRING_MODE.contains.concat(Z)}),B={className:"string",contains:[I.BACKSLASH_ESCAPE,G],variants:[I.inherit(C,{begin:"b'",end:"'"}),I.inherit(W,{begin:'b"',end:'"'}),W,C,w]},A={className:"number",variants:[{begin:"\\b0b[01]+(?:_[01]+)*\\b"},{begin:"\\b0o[0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0x[\\da-f]+(?:_[\\da-f]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:e[+-]?\\d+)?"}],relevance:0},V={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile enum eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list match|0 mixed new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException UnhandledMatchError ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Stringable Throwable Traversable WeakReference WeakMap Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php3","php4","php5","php6","php7","php8"],case_insensitive:!0,keywords:V,contains:[I.HASH_COMMENT_MODE,I.COMMENT("//","$",{contains:[G]}),I.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),I.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),G,{className:"keyword",begin:/\$this\b/},d,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},I.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:V,contains:["self",d,I.C_BLOCK_COMMENT_MODE,B,A]}]},{className:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},I.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[I.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",relevance:0,end:";",contains:[I.UNDERSCORE_TITLE_MODE]},B,A]}}QY2.exports=z29});var RY2=Y((aF3,qY2)=>{function Q29(I){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},I.inherit(I.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}qY2.exports=Q29});var vY2=Y((sF3,UY2)=>{function f29(I){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}UY2.exports=f29});var MY2=Y((oF3,EY2)=>{function q29(I){let d={keyword:"actor addressof and as be break class compile_error compile_intrinsic consume continue delegate digestof do else elseif embed end error for fun if ifdef in interface is isnt lambda let match new not object or primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},G={className:"string",begin:'"""',end:'"""',relevance:10},Z={className:"string",begin:'"',end:'"',contains:[I.BACKSLASH_ESCAPE]},C={className:"string",begin:"'",end:"'",contains:[I.BACKSLASH_ESCAPE],relevance:0},W={className:"type",begin:"\\b_?[A-Z][\\w]*",relevance:0},w={begin:I.IDENT_RE+"'",relevance:0};return{name:"Pony",keywords:d,contains:[W,G,Z,C,w,{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",relevance:0},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]}}EY2.exports=q29});var LY2=Y((eF3,SY2)=>{function R29(I){let d=["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"],G="Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",Z="-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",C={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},W=/\w[\w\d]*((-)[\w\d]+)*/,w={begin:"`[\\s\\S]",relevance:0},B={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},A={className:"literal",begin:/\$(null|true|false)\b/},V={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[w,B,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},X={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},_={className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]},F=I.inherit(I.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[_]}),g={className:"built_in",variants:[{begin:"(".concat(G,")+(-)[\\w\\d]+")}]},J={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[I.TITLE_MODE]},K={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:W,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[B]}]},Q={begin:/using\s/,end:/$/,returnBegin:!0,contains:[V,X,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},E={variants:[{className:"operator",begin:"(".concat(Z,")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},S={className:"selector-tag",begin:/@\B/,relevance:0},P={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(C.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},I.inherit(I.TITLE_MODE,{endsParent:!0})]},$=[P,F,w,I.NUMBER_MODE,V,X,g,B,A,S],h={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",$,{begin:"("+d.join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return P.contains.unshift(h),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:C,contains:$.concat(J,K,Q,E,h)}}SY2.exports=R29});var PY2=Y((tF3,yY2)=>{function U29(I){return{name:"Processing",keywords:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE]}}yY2.exports=U29});var uY2=Y((Ig3,$Y2)=>{function v29(I){return{name:"Python profiler",contains:[I.C_NUMBER_MODE,{begin:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",end:":",excludeEnd:!0},{begin:"(ncalls|tottime|cumtime)",end:"$",keywords:"ncalls tottime|10 cumtime|10 filename",relevance:10},{begin:"function calls",end:"$",contains:[I.C_NUMBER_MODE],relevance:10},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{className:"string",begin:"\\(",end:"\\)$",excludeBegin:!0,excludeEnd:!0,relevance:0}]}}$Y2.exports=v29});var OY2=Y((dg3,TY2)=>{function E29(I){let d={begin:/[a-z][A-Za-z0-9_]*/,relevance:0},G={className:"symbol",variants:[{begin:/[A-Z][a-zA-Z0-9_]*/},{begin:/_[A-Za-z0-9_]*/}],relevance:0},Z={begin:/\(/,end:/\)/,relevance:0},C={begin:/\[/,end:/\]/},W={className:"comment",begin:/%/,end:/$/,contains:[I.PHRASAL_WORDS_MODE]},w={className:"string",begin:/`/,end:/`/,contains:[I.BACKSLASH_ESCAPE]},B={className:"string",begin:/0'(\\'|.)/},A={className:"string",begin:/0'\\s/},X=[d,G,Z,{begin:/:-/},C,W,I.C_BLOCK_COMMENT_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,w,B,A,I.C_NUMBER_MODE];return Z.contains=X,C.contains=X,{name:"Prolog",contains:X.concat([{begin:/\.$/}])}}TY2.exports=E29});var lY2=Y((Gg3,mY2)=>{function M29(I){var d="[ \\t\\f]*",G="[ \\t\\f]+",Z=d+"[:=]"+d,C=G,W="("+Z+"|"+C+")",w="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",B="([^\\\\:= \\t\\f\\n]|\\\\.)+",A={end:W,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\\\"},{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[I.COMMENT("^\\s*[!#]","$"),{returnBegin:!0,variants:[{begin:w+Z,relevance:1},{begin:w+C,relevance:0}],contains:[{className:"attr",begin:w,endsParent:!0,relevance:0}],starts:A},{begin:B+W,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:B,endsParent:!0,relevance:0}],starts:A},{className:"attr",relevance:0,begin:B+d+"$"}]}}mY2.exports=M29});var hY2=Y((Zg3,bY2)=>{function S29(I){return{name:"Protocol Buffers",keywords:{keyword:"package import option optional required repeated group oneof",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},contains:[I.QUOTE_STRING_MODE,I.NUMBER_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"message enum service",end:/\{/,illegal:/\n/,contains:[I.inherit(I.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"function",beginKeywords:"rpc",end:/[{;]/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+(?=\s*=[^\n]+;$)/}]}}bY2.exports=S29});var kY2=Y((Cg3,jY2)=>{function L29(I){let d={keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},G=I.COMMENT("#","$"),Z="([A-Za-z_]|::)(\\w|::)*",C=I.inherit(I.TITLE_MODE,{begin:"([A-Za-z_]|::)(\\w|::)*"}),W={className:"variable",begin:"\\$([A-Za-z_]|::)(\\w|::)*"},w={className:"string",contains:[I.BACKSLASH_ESCAPE,W],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{name:"Puppet",aliases:["pp"],contains:[G,W,w,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[C,G]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:I.IDENT_RE,endsParent:!0}]},{begin:I.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:I.IDENT_RE},{begin:/\{/,end:/\}/,keywords:d,relevance:0,contains:[w,G,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:I.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},W]}],relevance:0}]}}jY2.exports=L29});var cY2=Y((Wg3,xY2)=>{function y29(I){let d={className:"string",begin:'(~)?"',end:'"',illegal:"\\n"},G={className:"symbol",begin:"#[a-zA-Z_]\\w*\\$?"};return{name:"PureBASIC",aliases:["pb","pbi"],keywords:"Align And Array As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount Map Module NewList NewMap Next Not Or Procedure ProcedureC ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim Read Repeat Restore Return Runtime Select Shared Static Step Structure StructureUnion Swap Threaded To UndefineMacro Until Until UnuseModule UseModule Wend While With XIncludeFile XOr",contains:[I.COMMENT(";","$",{relevance:0}),{className:"function",begin:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",end:"\\(",excludeEnd:!0,returnBegin:!0,contains:[{className:"keyword",begin:"(Procedure|Declare)(C|CDLL|DLL)?",excludeEnd:!0},{className:"type",begin:"\\.\\w*"},I.UNDERSCORE_TITLE_MODE]},d,G]}}xY2.exports=y29});var iY2=Y((wg3,pY2)=>{function P29(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function $29(I){return u29("(?=",I,")")}function u29(...I){return I.map((G)=>P29(G)).join("")}function T29(I){let W={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:["and","as","assert","async","await","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},w={className:"meta",begin:/^(>>>|\.\.\.) /},B={className:"subst",begin:/\{/,end:/\}/,keywords:W,illegal:/#/},A={begin:/\{\{/,relevance:0},V={className:"string",contains:[I.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[I.BACKSLASH_ESCAPE,w],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[I.BACKSLASH_ESCAPE,w],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[I.BACKSLASH_ESCAPE,w,A,B]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[I.BACKSLASH_ESCAPE,w,A,B]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[I.BACKSLASH_ESCAPE,A,B]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[I.BACKSLASH_ESCAPE,A,B]},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]},X="[0-9](_?[0-9])*",_="(\\b([0-9](_?[0-9])*))?\\.([0-9](_?[0-9])*)|\\b([0-9](_?[0-9])*)\\.",F={className:"number",relevance:0,variants:[{begin:"(\\b([0-9](_?[0-9])*)|((\\b([0-9](_?[0-9])*))?\\.([0-9](_?[0-9])*)|\\b([0-9](_?[0-9])*)\\.))[eE][+-]?([0-9](_?[0-9])*)[jJ]?\\b"},{begin:"((\\b([0-9](_?[0-9])*))?\\.([0-9](_?[0-9])*)|\\b([0-9](_?[0-9])*)\\.)[jJ]?"},{begin:"\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?\\b"},{begin:"\\b0[bB](_?[01])+[lL]?\\b"},{begin:"\\b0[oO](_?[0-7])+[lL]?\\b"},{begin:"\\b0[xX](_?[0-9a-fA-F])+[lL]?\\b"},{begin:"\\b([0-9](_?[0-9])*)[jJ]\\b"}]},g={className:"comment",begin:$29(/# type:/),end:/$/,keywords:W,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},J={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:["self",w,F,V,I.HASH_COMMENT_MODE]}]};return B.contains=[V,F,w],{name:"Python",aliases:["py","gyp","ipython"],keywords:W,illegal:/(<\/|->|\?)|=>/,contains:[w,F,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},V,g,I.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[I.UNDERSCORE_TITLE_MODE,J,{begin:/->/,endsWithParent:!0,keywords:W}]},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[F,J,V]}]}}pY2.exports=T29});var rY2=Y((Bg3,nY2)=>{function O29(I){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}nY2.exports=O29});var sY2=Y((Ag3,aY2)=>{function m29(I){return{name:"Q",aliases:["k","kdb"],keywords:{$pattern:/(`?)[A-Za-z0-9_]+\b/,keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"},contains:[I.C_LINE_COMMENT_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE]}}aY2.exports=m29});var eY2=Y((Vg3,oY2)=>{function l29(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function b29(...I){return I.map((G)=>l29(G)).join("")}function h29(I){let d={keyword:"in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url variant vector2d vector3d vector4d Promise"},G="[a-zA-Z_][a-zA-Z0-9\\._]*",Z={className:"keyword",begin:"\\bproperty\\b",starts:{className:"string",end:"(:|=|;|,|//|/\\*|$)",returnEnd:!0}},C={className:"keyword",begin:"\\bsignal\\b",starts:{className:"string",end:"(\\(|:|=|;|,|//|/\\*|$)",returnEnd:!0}},W={className:"attribute",begin:"\\bid\\s*:",starts:{className:"string",end:"[a-zA-Z_][a-zA-Z0-9\\._]*",returnEnd:!1}},w={begin:"[a-zA-Z_][a-zA-Z0-9\\._]*\\s*:",returnBegin:!0,contains:[{className:"attribute",begin:"[a-zA-Z_][a-zA-Z0-9\\._]*",end:"\\s*:",excludeEnd:!0,relevance:0}],relevance:0},B={begin:b29("[a-zA-Z_][a-zA-Z0-9\\._]*",/\s*\{/),end:/\{/,returnBegin:!0,relevance:0,contains:[I.inherit(I.TITLE_MODE,{begin:"[a-zA-Z_][a-zA-Z0-9\\._]*"})]};return{name:"QML",aliases:["qt"],case_insensitive:!1,keywords:d,contains:[{className:"meta",begin:/^\s*['"]use (strict|asm)['"]/},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[I.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"}]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:I.C_NUMBER_RE}],relevance:0},{begin:"("+I.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.REGEXP_MODE,{begin:/\s*[);\]]/,relevance:0,subLanguage:"xml"}],relevance:0},C,Z,{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[I.inherit(I.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]}],illegal:/\[|%/},{begin:"\\."+I.IDENT_RE,relevance:0},W,w,B],illegal:/#/}}oY2.exports=h29});var I_2=Y((Xg3,tY2)=>{function j29(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function k29(I){return rF1("(?=",I,")")}function rF1(...I){return I.map((G)=>j29(G)).join("")}function x29(I){let d=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,G=/[a-zA-Z][a-zA-Z_0-9]*/;return{name:"R",illegal:/->/,keywords:{$pattern:d,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},compilerExtensions:[(Z,C)=>{if(!Z.beforeMatch)return;if(Z.starts)throw new Error("beforeMatch cannot be used with starts");let W=Object.assign({},Z);Object.keys(Z).forEach((w)=>{delete Z[w]}),Z.begin=rF1(W.beforeMatch,k29(W.begin)),Z.starts={relevance:0,contains:[Object.assign(W,{endsParent:!0})]},Z.relevance=0,delete W.beforeMatch}],contains:[I.COMMENT(/#'/,/$/,{contains:[{className:"doctag",begin:"@examples",starts:{contains:[{begin:/\n/},{begin:/#'\s*(?=@[a-zA-Z]+)/,endsParent:!0},{begin:/#'/,end:/$/,excludeBegin:!0}]}},{className:"doctag",begin:"@param",end:/$/,contains:[{className:"variable",variants:[{begin:d},{begin:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{className:"doctag",begin:/@[a-zA-Z]+/},{className:"meta-keyword",begin:/\\[a-zA-Z]+/}]}),I.HASH_COMMENT_MODE,{className:"string",contains:[I.BACKSLASH_ESCAPE],variants:[I.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),I.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),I.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),I.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),I.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),I.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{className:"number",relevance:0,beforeMatch:/([^a-zA-Z0-9._])/,variants:[{match:/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/},{match:/0[xX][0-9a-fA-F]+([pP][+-]?\d+)?[Li]?/},{match:/(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?[Li]?/}]},{begin:"%",end:"%"},{begin:rF1(G,"\\s+<-\\s+")},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}tY2.exports=x29});var G_2=Y((Yg3,d_2)=>{function c29(I){function d(h){return h.map(function(O){return O.split("").map(function(T){return"\\"+T}).join("")}).join("|")}let G="~?[a-z$_][0-9a-zA-Z$_]*",Z="`?[A-Z$_][0-9a-zA-Z$_]*",C="'?[a-z$_][0-9a-z$_]*",W="\\s*:\\s*[a-z$_][0-9a-z$_]*(\\(\\s*("+C+"\\s*(,"+C+"\\s*)*)?\\))?",w=G+"("+W+"){0,2}",B="("+d(["||","++","**","+.","*","/","*.","/.","..."])+"|\\|>|&&|==|===)",A="\\s+"+B+"\\s+",V={keyword:"and as asr assert begin class constraint do done downto else end exception external for fun function functor if in include inherit initializer land lazy let lor lsl lsr lxor match method mod module mutable new nonrec object of open or private rec sig struct then to try type val virtual when while with",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ",literal:"true false"},X="\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",_={className:"number",relevance:0,variants:[{begin:X},{begin:"\\(-"+X+"\\)"}]},F={className:"operator",relevance:0,begin:B},g=[{className:"identifier",relevance:0,begin:G},F,_],J=[I.QUOTE_STRING_MODE,F,{className:"module",begin:"\\b"+Z,returnBegin:!0,end:".",contains:[{className:"identifier",begin:Z,relevance:0}]}],K=[{className:"module",begin:"\\b"+Z,returnBegin:!0,end:".",relevance:0,contains:[{className:"identifier",begin:Z,relevance:0}]}],Q={begin:G,end:"(,|\\n|\\))",relevance:0,contains:[F,{className:"typing",begin:":",end:"(,|\\n)",returnBegin:!0,relevance:0,contains:K}]},E={className:"function",relevance:0,keywords:V,variants:[{begin:"\\s(\\(\\.?.*?\\)|"+G+")\\s*=>",end:"\\s*=>",returnBegin:!0,relevance:0,contains:[{className:"params",variants:[{begin:G},{begin:w},{begin:/\(\s*\)/}]}]},{begin:"\\s\\(\\.?[^;\\|]*\\)\\s*=>",end:"\\s=>",returnBegin:!0,relevance:0,contains:[{className:"params",relevance:0,variants:[Q]}]},{begin:"\\(\\.\\s"+G+"\\)\\s*=>"}]};J.push(E);let S={className:"constructor",begin:Z+"\\(",end:"\\)",illegal:"\\n",keywords:V,contains:[I.QUOTE_STRING_MODE,F,{className:"params",begin:"\\b"+G}]},P={className:"pattern-match",begin:"\\|",returnBegin:!0,keywords:V,end:"=>",relevance:0,contains:[S,F,{relevance:0,className:"constructor",begin:Z}]},$={className:"module-access",keywords:V,returnBegin:!0,variants:[{begin:"\\b("+Z+"\\.)+"+G},{begin:"\\b("+Z+"\\.)+\\(",end:"\\)",returnBegin:!0,contains:[E,{begin:"\\(",end:"\\)",skip:!0}].concat(J)},{begin:"\\b("+Z+"\\.)+\\{",end:/\}/}],contains:J};return K.push($),{name:"ReasonML",aliases:["re"],keywords:V,illegal:"(:-|:=|\\$\\{|\\+=)",contains:[I.COMMENT("/\\*","\\*/",{illegal:"^(#,\\/\\/)"}),{className:"character",begin:"'(\\\\[^']+|[^'])'",illegal:"\\n",relevance:0},I.QUOTE_STRING_MODE,{className:"literal",begin:"\\(\\)",relevance:0},{className:"literal",begin:"\\[\\|",end:"\\|\\]",relevance:0,contains:g},{className:"literal",begin:"\\[",end:"\\]",relevance:0,contains:g},S,{className:"operator",begin:A,illegal:"-->",relevance:0},_,I.C_LINE_COMMENT_MODE,P,E,{className:"module-def",begin:"\\bmodule\\s+"+G+"\\s+"+Z+"\\s+=\\s+\\{",end:/\}/,returnBegin:!0,keywords:V,relevance:0,contains:[{className:"module",relevance:0,begin:Z},{begin:/\{/,end:/\}/,skip:!0}].concat(J)},$]}}d_2.exports=c29});var C_2=Y((_g3,Z_2)=>{function p29(I){return{name:"RenderMan RIB",keywords:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",illegal:"{function i29(I){let G={className:"attribute",begin:/[a-zA-Z-_]+/,end:/\s*:/,excludeEnd:!0,starts:{end:";",relevance:0,contains:[{className:"variable",begin:/\.[a-zA-Z-_]+/},{className:"keyword",begin:/\(optional\)/}]}};return{name:"Roboconf",aliases:["graph","instances"],case_insensitive:!0,keywords:"import",contains:[{begin:"^facet [a-zA-Z-_][^\\n{]+\\{",end:/\}/,keywords:"facet",contains:[G,I.HASH_COMMENT_MODE]},{begin:"^\\s*instance of [a-zA-Z-_][^\\n{]+\\{",end:/\}/,keywords:"name count channels instance-data instance-state instance of",illegal:/\S/,contains:["self",G,I.HASH_COMMENT_MODE]},{begin:"^[a-zA-Z-_][^\\n{]+\\{",end:/\}/,contains:[G,I.HASH_COMMENT_MODE]},I.HASH_COMMENT_MODE]}}W_2.exports=i29});var A_2=Y((Hg3,B_2)=>{function n29(I){let w={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},B={className:"string",begin:/"/,end:/"/,contains:[I.BACKSLASH_ESCAPE,w,{className:"variable",begin:/\$\(/,end:/\)/,contains:[I.BACKSLASH_ESCAPE]}]},A={className:"string",begin:/'/,end:/'/};return{name:"Microtik RouterOS script",aliases:["mikrotik"],case_insensitive:!0,keywords:{$pattern:/:?[\w-]+/,literal:"true false yes no nothing nil null",keyword:"foreach do while for if from to step else on-error and or not in :"+"foreach do while for if from to step else on-error and or not in".split(" ").join(" :")+" :"+"global local beep delay put len typeof pick log time set find environment terminal error execute parse resolve toarray tobool toid toip toip6 tonum tostr totime".split(" ").join(" :")},contains:[{variants:[{begin:/\/\*/,end:/\*\//},{begin:/\/\//,end:/$/},{begin:/<\//,end:/>/}],illegal:/./},I.COMMENT("^#","$"),B,A,w,{begin:/[\w-]+=([^\s{}[\]()>]+)/,relevance:0,returnBegin:!0,contains:[{className:"attribute",begin:/[^=]+/},{begin:/=/,endsWithParent:!0,relevance:0,contains:[B,A,w,{className:"literal",begin:"\\b("+"true false yes no nothing nil null".split(" ").join("|")+")\\b"},{begin:/("[^"]*"|[^\s{}[\]]+)/}]}]},{className:"number",begin:/\*[0-9a-fA-F]+/},{begin:"\\b("+"add remove enable disable set get print export edit find run debug error info warning".split(" ").join("|")+")([\\s[(\\]|])",returnBegin:!0,contains:[{className:"builtin-name",begin:/\w+/}]},{className:"built_in",variants:[{begin:"(\\.\\./|/|\\s)(("+"traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw".split(" ").join("|")+");?\\s)+"},{begin:/\.\./,relevance:0}]}]}}B_2.exports=n29});var X_2=Y((Fg3,V_2)=>{function r29(I){return{name:"RenderMan RSL",keywords:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},illegal:"{function a29(I){return{name:"Oracle Rules Language",keywords:{keyword:"BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM NUMDAYS READ_DATE STAGING",built_in:"IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,{className:"literal",variants:[{begin:"#\\s+",relevance:0},{begin:"#[a-zA-Z .]+"}]}]}}Y_2.exports=a29});var H_2=Y((Jg3,D_2)=>{function s29(I){let G="abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",Z="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:I.IDENT_RE+"!?",keyword:G,literal:"true false Some None Ok Err",built_in:Z},illegal:""}]}}D_2.exports=s29});var g_2=Y((Kg3,F_2)=>{function o29(I){let d="do if then else end until while abort array attrib by call cards cards4 catname continue datalines datalines4 delete delim delimiter display dm drop endsas error file filename footnote format goto in infile informat input keep label leave length libname link list lostcard merge missing modify options output out page put redirect remove rename replace retain return select set skip startsas stop title update waitsas where window x systask add and alter as cascade check create delete describe distinct drop foreign from group having index insert into in key like message modify msgtype not null on or order primary references reset restrict select set table unique update validate view where",G="abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|cexist|cinv|close|cnonct|collate|compbl|compound|compress|cos|cosh|css|curobs|cv|daccdb|daccdbsl|daccsl|daccsyd|dacctab|dairy|date|datejul|datepart|datetime|day|dclose|depdb|depdbsl|depdbsl|depsl|depsl|depsyd|depsyd|deptab|deptab|dequote|dhms|dif|digamma|dim|dinfo|dnum|dopen|doptname|doptnum|dread|dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|filename|fileref|finfo|finv|fipname|fipnamel|fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|hms|hosthelp|hour|ibessel|index|indexc|indexw|input|inputc|inputn|int|intck|intnx|intrr|irr|jbessel|juldate|kurtosis|lag|lbound|left|length|lgamma|libname|libref|log|log10|log2|logpdf|logpmf|logsdf|lowcase|max|mdy|mean|min|minute|mod|month|mopen|mort|n|netpv|nmiss|normal|note|npv|open|ordinal|pathname|pdf|peek|peekc|pmf|point|poisson|poke|probbeta|probbnml|probchi|probf|probgam|probhypr|probit|probnegb|probnorm|probt|put|putc|putn|qtr|quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|rewind|right|round|saving|scan|sdf|second|sign|sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|stfips|stname|stnamel|substr|sum|symget|sysget|sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|tinv|tnonct|today|translate|tranwrd|trigamma|trim|trimn|trunc|uniform|upcase|uss|var|varfmt|varinfmt|varlabel|varlen|varname|varnum|varray|varrayx|vartype|verify|vformat|vformatd|vformatdx|vformatn|vformatnx|vformatw|vformatwx|vformatx|vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|vinformatn|vinformatnx|vinformatw|vinformatwx|vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|zipnamel|zipstate";return{name:"SAS",case_insensitive:!0,keywords:{literal:"null missing _all_ _automatic_ _character_ _infile_ _n_ _name_ _null_ _numeric_ _user_ _webout_",meta:d},contains:[{className:"keyword",begin:/^\s*(proc [\w\d_]+|data|run|quit)[\s;]/},{className:"variable",begin:/&[a-zA-Z_&][a-zA-Z0-9_]*\.?/},{className:"emphasis",begin:/^\s*datalines|cards.*;/,end:/^\s*;\s*$/},{className:"built_in",begin:"%("+"bquote|nrbquote|cmpres|qcmpres|compstor|datatyp|display|do|else|end|eval|global|goto|if|index|input|keydef|label|left|length|let|local|lowcase|macro|mend|nrbquote|nrquote|nrstr|put|qcmpres|qleft|qlowcase|qscan|qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|substr|superq|syscall|sysevalf|sysexec|sysfunc|sysget|syslput|sysprod|sysrc|sysrput|then|to|trim|unquote|until|upcase|verify|while|window"+")"},{className:"name",begin:/%[a-zA-Z_][a-zA-Z_0-9]*/},{className:"meta",begin:"[^%]("+G+")[(]"},{className:"string",variants:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]},I.COMMENT("\\*",";"),I.C_BLOCK_COMMENT_MODE]}}F_2.exports=o29});var K_2=Y((Ng3,J_2)=>{function e29(I){let d={className:"meta",begin:"@[A-Za-z]+"},G={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:/\$\{/,end:/\}/}]},Z={className:"string",variants:[{begin:'"""',end:'"""'},{begin:'"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE]},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[I.BACKSLASH_ESCAPE,G]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[G],relevance:10}]},C={className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},W={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},w={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},B={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[W]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[W]},w]},A={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[w]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,Z,C,W,A,B,I.C_NUMBER_MODE,d]}}J_2.exports=e29});var z_2=Y((zg3,N_2)=>{function t29(I){let Z="(-|\\+)?\\d+([./]\\d+)?[+\\-](-|\\+)?\\d+([./]\\d+)?i",C={$pattern:"[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+","builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},W={className:"literal",begin:"(#t|#f|#\\\\[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+|#\\\\.)"},w={className:"number",variants:[{begin:"(-|\\+)?\\d+([./]\\d+)?",relevance:0},{begin:Z,relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},B=I.QUOTE_STRING_MODE,A=[I.COMMENT(";","$",{relevance:0}),I.COMMENT("#\\|","\\|#")],V={begin:"[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",relevance:0},X={className:"symbol",begin:"'[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+"},_={endsWithParent:!0,relevance:0},F={variants:[{begin:/'/},{begin:"`"}],contains:[{begin:"\\(",end:"\\)",contains:["self",W,B,w,V,X]}]},g={className:"name",relevance:0,begin:"[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",keywords:C},K={variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}],contains:[{begin:/lambda/,endsWithParent:!0,returnBegin:!0,contains:[g,{endsParent:!0,variants:[{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/}],contains:[V]}]},g,_]};return _.contains=[W,w,B,V,X,F,K].concat(A),{name:"Scheme",illegal:/\S/,contains:[I.SHEBANG(),w,B,X,F,K].concat(A)}}N_2.exports=t29});var f_2=Y((Qg3,Q_2)=>{function I49(I){let d=[I.C_NUMBER_MODE,{className:"string",begin:`'|"`,end:`'|"`,contains:[I.BACKSLASH_ESCAPE,{begin:"''"}]}];return{name:"Scilab",aliases:["sci"],keywords:{$pattern:/%?\w+/,keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},illegal:'("|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[I.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{begin:"[a-zA-Z_][a-zA-Z_0-9]*[\\.']+",relevance:0},{begin:"\\[",end:"\\][\\.']*",relevance:0,contains:d},I.COMMENT("//","$")].concat(d)}}Q_2.exports=I49});var R_2=Y((fg3,q_2)=>{var d49=(I)=>{return{IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]}}},G49=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],Z49=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],C49=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],W49=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],w49=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse();function B49(I){let d=d49(I),G=W49,Z=C49,C="@[a-z-]+",W="and or not only",w="[a-zA-Z-][a-zA-Z0-9_-]*",B={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},d.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+G49.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+Z.join("|")+")"},{className:"selector-pseudo",begin:"::("+G.join("|")+")"},B,{begin:/\(/,end:/\)/,contains:[I.CSS_NUMBER_MODE]},{className:"attribute",begin:"\\b("+w49.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[B,d.HEXCOLOR,I.CSS_NUMBER_MODE,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,d.IMPORTANT]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:Z49.join(" ")},contains:[{begin:"@[a-z-]+",className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},B,I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,d.HEXCOLOR,I.CSS_NUMBER_MODE]}]}}q_2.exports=B49});var v_2=Y((qg3,U_2)=>{function A49(I){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#]/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}U_2.exports=A49});var M_2=Y((Rg3,E_2)=>{function V49(I){let d=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"],G=["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"],Z=["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"];return{name:"Smali",contains:[{className:"string",begin:'"',end:'"',relevance:0},I.COMMENT("#","$",{relevance:0}),{className:"keyword",variants:[{begin:"\\s*\\.end\\s[a-zA-Z0-9]*"},{begin:"^[ ]*\\.[a-zA-Z]*",relevance:0},{begin:"\\s:[a-zA-Z_0-9]*",relevance:0},{begin:"\\s("+Z.join("|")+")"}]},{className:"built_in",variants:[{begin:"\\s("+d.join("|")+")\\s"},{begin:"\\s("+d.join("|")+")((-|/)[a-zA-Z0-9]+)+\\s",relevance:10},{begin:"\\s("+G.join("|")+")((-|/)[a-zA-Z0-9]+)*\\s",relevance:10}]},{className:"class",begin:`L[^(;: +]*;`,relevance:0},{begin:"[vp][0-9]+"}]}}E_2.exports=V49});var L_2=Y((Ug3,S_2)=>{function X49(I){let G={className:"string",begin:"\\$.{1}"},Z={className:"symbol",begin:"#"+I.UNDERSCORE_IDENT_RE};return{name:"Smalltalk",aliases:["st"],keywords:"self super nil true false thisContext",contains:[I.COMMENT('"','"'),I.APOS_STRING_MODE,{className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{begin:"[a-z][a-zA-Z0-9_]*:",relevance:0},I.C_NUMBER_MODE,Z,G,{begin:"\\|[ ]*[a-z][a-zA-Z0-9_]*([ ]+[a-z][a-zA-Z0-9_]*)*[ ]*\\|",returnBegin:!0,end:/\|/,illegal:/\S/,contains:[{begin:"(\\|[ ]*)?[a-z][a-zA-Z0-9_]*"}]},{begin:"#\\(",end:"\\)",contains:[I.APOS_STRING_MODE,G,I.C_NUMBER_MODE,Z]}]}}S_2.exports=X49});var P_2=Y((vg3,y_2)=>{function Y49(I){return{name:"SML (Standard ML)",aliases:["ml"],keywords:{$pattern:"[a-z_]\\w*!?",keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/\/\/|>>/,contains:[{className:"literal",begin:/\[(\|\|)?\]|\(\)/,relevance:0},I.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},I.inherit(I.APOS_STRING_MODE,{className:"string",relevance:0}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}y_2.exports=Y49});var u_2=Y((Eg3,$_2)=>{function _49(I){let d={className:"variable",begin:/\b_+[a-zA-Z]\w*/},G={className:"title",begin:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},Z={className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]},{begin:"'",end:"'",contains:[{begin:"''",relevance:0}]}]},C={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"define undef ifdef ifndef else endif include"},contains:[{begin:/\\\n/,relevance:0},I.inherit(Z,{className:"meta-string"}),{className:"meta-string",begin:/<[^\n>]*>/,end:/$/,illegal:"\\n"},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]};return{name:"SQF",case_insensitive:!0,keywords:{keyword:"case catch default do else exit exitWith for forEach from if private switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addForce addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addTorque addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret admin agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airplaneThrottle airportSide AISFinishHeal alive all3DENEntities allAirports allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSimpleObjects allSites allTurrets allUnits allUnitsUAV allVariables ammo ammoOnPylon and animate animateBay animateDoor animatePylon animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canTriggerDynamicSimulation canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory collectiveRTD combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configProperties configSourceAddonList configSourceMod configSourceModList confirmSensorTarget connectTerminalToUAV controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctAddHeader ctAddRow ctClear ctCurSel ctData ctFindHeaderRows ctFindRowHeader ctHeaderControls ctHeaderCount ctRemoveHeaders ctRemoveRows ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPixelPrecision ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlTextWidth ctrlType ctrlVisible ctRowControls ctRowCount ctSetCurSel ctSetData ctSetHeaderTemplate ctSetRowTemplate ctSetValue ctValue curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteGroupWhenEmpty deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureFrameToFile diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_lightNewLoad diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_setLightNew diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableMapIndicators disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle drawTriangle driver drop dynamicSimulationDistance dynamicSimulationDistanceCoef dynamicSimulationEnabled dynamicSimulationSystemEnabled echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableAutoStartUpRTD enableAutoTrimRTD enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableDynamicSimulation enableDynamicSimulationSystem enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableInfoPanelComponent enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableTraffic enableUAVConnectability enableUAVWaypoints enableVehicleCargo enableVehicleSensor enableWeaponDisassembly endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities environmentEnabled estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findIf findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagAnimationPhase flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceFlagTexture forceFollowRoad forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam forgetTarget format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllEnvSoundControllers getAllHitPointsDamage getAllOwnedMines getAllSoundControllers getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getCompatiblePylonMagazines getConnectedUAV getContainerMaxLoad getCursorObjectParams getCustomAimCoef getDammage getDescription getDir getDirVisual getDLCAssetsUsage getDLCAssetsUsageByName getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getEnvSoundController getFatigue getForcedFlagTexture getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getMusicPlayedTime getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlateNumber getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getPylonMagazines getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSoundController getSoundControllerResult getSpeed getStamina getStatValue getSuppression getTerrainGrid getTerrainHeightASL getText getTotalDLCUsageTime getUnitLoadout getUnitTrait getUserMFDText getUserMFDvalue getVariable getVehicleCargo getWeaponCargo getWeaponSway getWingsOrientationRTD getWingsPositionRTD getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState inflame inflamed infoPanel infoPanelComponentEnabled infoPanelComponents infoPanels inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDamageAllowed isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isGroupDeletedWhenEmpty isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLaserOn isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSimpleObject isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUIContext isUniformAllowed isVehicleCargo isVehicleRadarOn isVehicleSensorEnabled isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbColorRight lbCurSel lbData lbDelete lbIsSelected lbPicture lbPictureRight lbSelection lbSetColor lbSetColorRight lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetPictureRight lbSetPictureRightColor lbSetPictureRightColorDisabled lbSetPictureRightColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetText lbSetTextRight lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbTextRight lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaderboardRequestRowsFriends leaderboardsRequestUploadScore leaderboardsRequestUploadScoreKeepBest leaderboardState leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects listRemoteTargets listVehicleSensors ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbSort lnbSortByValue lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modelToWorldVisualWorld modelToWorldWorld modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberOfEnginesRTD numberToDate objectCurators objectFromNetId objectParent objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openSteamApp openYoutubeVideo or orderGetIn overcast overcastForecast owner param params parseNumber parseSimpleArray parseText parsingNamespace particlesQuality pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remoteExecutedOwner remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponAttachmentCargo removeWeaponCargo removeWeaponGlobal removeWeaponTurret reportRemoteTarget requiredVersion resetCamShake resetSubgroupDirection resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectRandomWeighted selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENLogicType set3DENMissionAttribute set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setActualCollectiveRTD setAirplaneThrottle setAirportSide setAmmo setAmmoCargo setAmmoOnPylon setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setBrakesRTD setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTI setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setConvoySeparation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setCustomWeightRTD setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDriveOnPath setDropInterval setDynamicSimulationDistance setDynamicSimulationDistanceCoef setEditorMode setEditorObjectScope setEffectCondition setEngineRPMRTD setFace setFaceAnimation setFatigue setFeatureType setFlagAnimationPhase setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setInfoPanel setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlateNumber setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setPylonLoadOut setPylonsPriority setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setRotorBrakeRTD setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskMarkerOffset setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTrafficDensity setTrafficDistance setTrafficGap setTrafficSpeed setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setUserMFDText setUserMFDvalue setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleRadar setVehicleReceiveRemoteTargets setVehicleReportOwnPosition setVehicleReportRemoteTargets setVehicleTIPars setVehicleVarName setVelocity setVelocityModelSpace setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWantedRPMRTD setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWingForceScaleRTD setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideChat sideEnemy sideFriendly sideRadio simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targets targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskParent taskResult taskState taskType teamMember teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL terrainIntersectAtASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerDynamicSimulation triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCollapseAll tvCount tvCurSel tvData tvDelete tvExpand tvExpandAll tvPicture tvSetColor tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves userInputDisabled vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorModelToWorld vectorModelToWorldVisual vectorMultiply vectorNormalized vectorUp vectorUpVisual vectorWorldToModel vectorWorldToModelVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicleReceiveRemoteTargets vehicleReportOwnPosition vehicleReportRemoteTargets vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD WFSideText wind ",literal:"blufor civilian configNull controlNull displayNull east endl false grpNull independent lineBreak locationNull nil objNull opfor pi resistance scriptNull sideAmbientLife sideEmpty sideLogic sideUnknown taskNull teamMemberNull true west"},contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.NUMBER_MODE,d,G,Z,C],illegal:/#|^\$ /}}$_2.exports=_49});var O_2=Y((Mg3,T_2)=>{function D49(I){var d=I.COMMENT("--","$");return{name:"SQL (more)",aliases:["mysql","oracle"],disableAutodetect:!0,case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE,d,I.HASH_COMMENT_MODE]},I.C_BLOCK_COMMENT_MODE,d,I.HASH_COMMENT_MODE]}}T_2.exports=D49});var b_2=Y((Sg3,l_2)=>{function m_2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function H49(...I){return I.map((G)=>m_2(G)).join("")}function aF1(...I){return"("+I.map((G)=>m_2(G)).join("|")+")"}function F49(I){let d=I.COMMENT("--","$"),G={className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},Z={begin:/"/,end:/"/,contains:[{begin:/""/}]},C=["true","false","unknown"],W=["double precision","large object","with timezone","without timezone"],w=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],B=["add","asc","collation","desc","final","first","last","view"],A=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update ","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],V=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],X=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],_=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],F=V,g=[...A,...B].filter((S)=>{return!V.includes(S)}),J={className:"variable",begin:/@[a-z0-9]+/},K={className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},Q={begin:H49(/\b/,aF1(...F),/\s*\(/),keywords:{built_in:F}};function E(S,{exceptions:P,when:$}={}){let h=$;return P=P||[],S.map((O)=>{if(O.match(/\|\d+$/)||P.includes(O))return O;else if(h(O))return`${O}|0`;else return O})}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:E(g,{when:(S)=>S.length<3}),literal:C,type:w,built_in:X},contains:[{begin:aF1(..._),keywords:{$pattern:/[\w\.]+/,keyword:g.concat(_),literal:C,type:w}},{className:"type",begin:aF1(...W)},Q,J,G,Z,I.C_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE,d,K]}}l_2.exports=F49});var j_2=Y((Lg3,h_2)=>{function g49(I){let d=["functions","model","data","parameters","quantities","transformed","generated"],G=["for","in","if","else","while","break","continue","return"],Z=["print","reject","increment_log_prob|10","integrate_ode|10","integrate_ode_rk45|10","integrate_ode_bdf|10","algebra_solver"],C=["int","real","vector","ordered","positive_ordered","simplex","unit_vector","row_vector","matrix","cholesky_factor_corr|10","cholesky_factor_cov|10","corr_matrix|10","cov_matrix|10","void"],W=["Phi","Phi_approx","abs","acos","acosh","algebra_solver","append_array","append_col","append_row","asin","asinh","atan","atan2","atanh","bernoulli_cdf","bernoulli_lccdf","bernoulli_lcdf","bernoulli_logit_lpmf","bernoulli_logit_rng","bernoulli_lpmf","bernoulli_rng","bessel_first_kind","bessel_second_kind","beta_binomial_cdf","beta_binomial_lccdf","beta_binomial_lcdf","beta_binomial_lpmf","beta_binomial_rng","beta_cdf","beta_lccdf","beta_lcdf","beta_lpdf","beta_rng","binary_log_loss","binomial_cdf","binomial_coefficient_log","binomial_lccdf","binomial_lcdf","binomial_logit_lpmf","binomial_lpmf","binomial_rng","block","categorical_logit_lpmf","categorical_logit_rng","categorical_lpmf","categorical_rng","cauchy_cdf","cauchy_lccdf","cauchy_lcdf","cauchy_lpdf","cauchy_rng","cbrt","ceil","chi_square_cdf","chi_square_lccdf","chi_square_lcdf","chi_square_lpdf","chi_square_rng","cholesky_decompose","choose","col","cols","columns_dot_product","columns_dot_self","cos","cosh","cov_exp_quad","crossprod","csr_extract_u","csr_extract_v","csr_extract_w","csr_matrix_times_vector","csr_to_dense_matrix","cumulative_sum","determinant","diag_matrix","diag_post_multiply","diag_pre_multiply","diagonal","digamma","dims","dirichlet_lpdf","dirichlet_rng","distance","dot_product","dot_self","double_exponential_cdf","double_exponential_lccdf","double_exponential_lcdf","double_exponential_lpdf","double_exponential_rng","e","eigenvalues_sym","eigenvectors_sym","erf","erfc","exp","exp2","exp_mod_normal_cdf","exp_mod_normal_lccdf","exp_mod_normal_lcdf","exp_mod_normal_lpdf","exp_mod_normal_rng","expm1","exponential_cdf","exponential_lccdf","exponential_lcdf","exponential_lpdf","exponential_rng","fabs","falling_factorial","fdim","floor","fma","fmax","fmin","fmod","frechet_cdf","frechet_lccdf","frechet_lcdf","frechet_lpdf","frechet_rng","gamma_cdf","gamma_lccdf","gamma_lcdf","gamma_lpdf","gamma_p","gamma_q","gamma_rng","gaussian_dlm_obs_lpdf","get_lp","gumbel_cdf","gumbel_lccdf","gumbel_lcdf","gumbel_lpdf","gumbel_rng","head","hypergeometric_lpmf","hypergeometric_rng","hypot","inc_beta","int_step","integrate_ode","integrate_ode_bdf","integrate_ode_rk45","inv","inv_Phi","inv_chi_square_cdf","inv_chi_square_lccdf","inv_chi_square_lcdf","inv_chi_square_lpdf","inv_chi_square_rng","inv_cloglog","inv_gamma_cdf","inv_gamma_lccdf","inv_gamma_lcdf","inv_gamma_lpdf","inv_gamma_rng","inv_logit","inv_sqrt","inv_square","inv_wishart_lpdf","inv_wishart_rng","inverse","inverse_spd","is_inf","is_nan","lbeta","lchoose","lgamma","lkj_corr_cholesky_lpdf","lkj_corr_cholesky_rng","lkj_corr_lpdf","lkj_corr_rng","lmgamma","lmultiply","log","log10","log1m","log1m_exp","log1m_inv_logit","log1p","log1p_exp","log2","log_determinant","log_diff_exp","log_falling_factorial","log_inv_logit","log_mix","log_rising_factorial","log_softmax","log_sum_exp","logistic_cdf","logistic_lccdf","logistic_lcdf","logistic_lpdf","logistic_rng","logit","lognormal_cdf","lognormal_lccdf","lognormal_lcdf","lognormal_lpdf","lognormal_rng","machine_precision","matrix_exp","max","mdivide_left_spd","mdivide_left_tri_low","mdivide_right_spd","mdivide_right_tri_low","mean","min","modified_bessel_first_kind","modified_bessel_second_kind","multi_gp_cholesky_lpdf","multi_gp_lpdf","multi_normal_cholesky_lpdf","multi_normal_cholesky_rng","multi_normal_lpdf","multi_normal_prec_lpdf","multi_normal_rng","multi_student_t_lpdf","multi_student_t_rng","multinomial_lpmf","multinomial_rng","multiply_log","multiply_lower_tri_self_transpose","neg_binomial_2_cdf","neg_binomial_2_lccdf","neg_binomial_2_lcdf","neg_binomial_2_log_lpmf","neg_binomial_2_log_rng","neg_binomial_2_lpmf","neg_binomial_2_rng","neg_binomial_cdf","neg_binomial_lccdf","neg_binomial_lcdf","neg_binomial_lpmf","neg_binomial_rng","negative_infinity","normal_cdf","normal_lccdf","normal_lcdf","normal_lpdf","normal_rng","not_a_number","num_elements","ordered_logistic_lpmf","ordered_logistic_rng","owens_t","pareto_cdf","pareto_lccdf","pareto_lcdf","pareto_lpdf","pareto_rng","pareto_type_2_cdf","pareto_type_2_lccdf","pareto_type_2_lcdf","pareto_type_2_lpdf","pareto_type_2_rng","pi","poisson_cdf","poisson_lccdf","poisson_lcdf","poisson_log_lpmf","poisson_log_rng","poisson_lpmf","poisson_rng","positive_infinity","pow","print","prod","qr_Q","qr_R","quad_form","quad_form_diag","quad_form_sym","rank","rayleigh_cdf","rayleigh_lccdf","rayleigh_lcdf","rayleigh_lpdf","rayleigh_rng","reject","rep_array","rep_matrix","rep_row_vector","rep_vector","rising_factorial","round","row","rows","rows_dot_product","rows_dot_self","scaled_inv_chi_square_cdf","scaled_inv_chi_square_lccdf","scaled_inv_chi_square_lcdf","scaled_inv_chi_square_lpdf","scaled_inv_chi_square_rng","sd","segment","sin","singular_values","sinh","size","skew_normal_cdf","skew_normal_lccdf","skew_normal_lcdf","skew_normal_lpdf","skew_normal_rng","softmax","sort_asc","sort_desc","sort_indices_asc","sort_indices_desc","sqrt","sqrt2","square","squared_distance","step","student_t_cdf","student_t_lccdf","student_t_lcdf","student_t_lpdf","student_t_rng","sub_col","sub_row","sum","tail","tan","tanh","target","tcrossprod","tgamma","to_array_1d","to_array_2d","to_matrix","to_row_vector","to_vector","trace","trace_gen_quad_form","trace_quad_form","trigamma","trunc","uniform_cdf","uniform_lccdf","uniform_lcdf","uniform_lpdf","uniform_rng","variance","von_mises_lpdf","von_mises_rng","weibull_cdf","weibull_lccdf","weibull_lcdf","weibull_lpdf","weibull_rng","wiener_lpdf","wishart_lpdf","wishart_rng"],w=["bernoulli","bernoulli_logit","beta","beta_binomial","binomial","binomial_logit","categorical","categorical_logit","cauchy","chi_square","dirichlet","double_exponential","exp_mod_normal","exponential","frechet","gamma","gaussian_dlm_obs","gumbel","hypergeometric","inv_chi_square","inv_gamma","inv_wishart","lkj_corr","lkj_corr_cholesky","logistic","lognormal","multi_gp","multi_gp_cholesky","multi_normal","multi_normal_cholesky","multi_normal_prec","multi_student_t","multinomial","neg_binomial","neg_binomial_2","neg_binomial_2_log","normal","ordered_logistic","pareto","pareto_type_2","poisson","poisson_log","rayleigh","scaled_inv_chi_square","skew_normal","student_t","uniform","von_mises","weibull","wiener","wishart"];return{name:"Stan",aliases:["stanfuncs"],keywords:{$pattern:I.IDENT_RE,title:d,keyword:G.concat(C).concat(Z),built_in:W},contains:[I.C_LINE_COMMENT_MODE,I.COMMENT(/#/,/$/,{relevance:0,keywords:{"meta-keyword":"include"}}),I.COMMENT(/\/\*/,/\*\//,{relevance:0,contains:[{className:"doctag",begin:/@(return|param)/}]}),{begin:/<\s*lower\s*=/,keywords:"lower"},{begin:/[<,]\s*upper\s*=/,keywords:"upper"},{className:"keyword",begin:/\btarget\s*\+=/,relevance:10},{begin:"~\\s*("+I.IDENT_RE+")\\s*\\(",keywords:w},{className:"number",variants:[{begin:/\b\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/},{begin:/\.\d+(?:[eE][+-]?\d+)?\b/}],relevance:0},{className:"string",begin:'"',end:'"',relevance:0}]}}h_2.exports=g49});var x_2=Y((yg3,k_2)=>{function J49(I){return{name:"Stata",aliases:["do","ado"],case_insensitive:!0,keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",contains:[{className:"symbol",begin:/`[a-zA-Z0-9_]+'/},{className:"variable",begin:/\$\{?[a-zA-Z0-9_]+\}?/},{className:"string",variants:[{begin:`\`"[^\r +]*?"'`},{begin:`"[^\r +"]*"`}]},{className:"built_in",variants:[{begin:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\()"}]},I.COMMENT("^[ \t]*\\*.*$",!1),I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE]}}k_2.exports=J49});var p_2=Y((Pg3,c_2)=>{function K49(I){return{name:"STEP Part 21",aliases:["p21","step","stp"],case_insensitive:!0,keywords:{$pattern:"[A-Z_][A-Z0-9_.]*",keyword:"HEADER ENDSEC DATA"},contains:[{className:"meta",begin:"ISO-10303-21;",relevance:10},{className:"meta",begin:"END-ISO-10303-21;",relevance:10},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,I.COMMENT("/\\*\\*!","\\*/"),I.C_NUMBER_MODE,I.inherit(I.APOS_STRING_MODE,{illegal:null}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"symbol",variants:[{begin:"#",end:"\\d+",illegal:"\\W"}]}]}}c_2.exports=K49});var n_2=Y(($g3,i_2)=>{var N49=(I)=>{return{IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE]}}},z49=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],Q49=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],f49=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],q49=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R49=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse();function U49(I){let d=N49(I),G="and or not only",Z={className:"variable",begin:"\\$"+I.IDENT_RE},C=["charset","css","debug","extend","font-face","for","import","include","keyframes","media","mixin","page","warn","while"],W="(?=[.\\s\\n[:,(])";return{name:"Stylus",aliases:["styl"],case_insensitive:!1,keywords:"if else for in",illegal:"("+["\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)","(\\bdef\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"].join("|")+")",contains:[I.QUOTE_STRING_MODE,I.APOS_STRING_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,d.HEXCOLOR,{begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*(?=[.\\s\\n[:,(])",className:"selector-class"},{begin:"#[a-zA-Z][a-zA-Z0-9_-]*(?=[.\\s\\n[:,(])",className:"selector-id"},{begin:"\\b("+z49.join("|")+")(?=[.\\s\\n[:,(])",className:"selector-tag"},{className:"selector-pseudo",begin:"&?:("+f49.join("|")+")(?=[.\\s\\n[:,(])"},{className:"selector-pseudo",begin:"&?::("+q49.join("|")+")(?=[.\\s\\n[:,(])"},d.ATTRIBUTE_SELECTOR_MODE,{className:"keyword",begin:/@media/,starts:{end:/[{;}]/,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:Q49.join(" ")},contains:[I.CSS_NUMBER_MODE]}},{className:"keyword",begin:"@((-(o|moz|ms|webkit)-)?("+C.join("|")+"))\\b"},Z,I.CSS_NUMBER_MODE,{className:"function",begin:"^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",illegal:"[\\n]",returnBegin:!0,contains:[{className:"title",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{className:"params",begin:/\(/,end:/\)/,contains:[d.HEXCOLOR,Z,I.APOS_STRING_MODE,I.CSS_NUMBER_MODE,I.QUOTE_STRING_MODE]}]},{className:"attribute",begin:"\\b("+R49.join("|")+")\\b",starts:{end:/;|$/,contains:[d.HEXCOLOR,Z,I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.CSS_NUMBER_MODE,I.C_BLOCK_COMMENT_MODE,d.IMPORTANT],illegal:/\./,relevance:0}}]}}i_2.exports=U49});var a_2=Y((ug3,r_2)=>{function v49(I){return{name:"SubUnit",case_insensitive:!0,contains:[{className:"string",begin:`\\[ +(multipart)?`,end:`\\] +`},{className:"string",begin:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},{className:"string",begin:"(\\+|-)\\d+"},{className:"keyword",relevance:10,variants:[{begin:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{begin:"^progress(:?)(\\s+)?(pop|push)?"},{begin:"^tags:"},{begin:"^time:"}]}]}}r_2.exports=v49});var CD2=Y((Tg3,ZD2)=>{function t_2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function RR(I){return U9("(?=",I,")")}function U9(...I){return I.map((G)=>t_2(G)).join("")}function FI(...I){return"("+I.map((G)=>t_2(G)).join("|")+")"}var Ig1=(I)=>U9(/\b/,I,/\w$/.test(I)?/\b/:/\B/),s_2=["Protocol","Type"].map(Ig1),sF1=["init","self"].map(Ig1),E49=["Any","Self"],oF1=["associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],o_2=["false","nil","true"],M49=["assignment","associativity","higherThan","left","lowerThan","none","right"],S49=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],e_2=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],ID2=FI(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),dD2=FI(ID2,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),eF1=U9(ID2,dD2,"*"),GD2=FI(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),Oa=FI(GD2,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),ZX=U9(GD2,Oa,"*"),tF1=U9(/[A-Z]/,Oa,"*"),L49=["autoclosure",U9(/convention\(/,FI("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",U9(/objc\(/,ZX,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","testable","UIApplicationMain","unknown","usableFromInline"],y49=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function P49(I){let d={match:/\s+/,relevance:0},G=I.COMMENT("/\\*","\\*/",{contains:["self"]}),Z=[I.C_LINE_COMMENT_MODE,G],C={className:"keyword",begin:U9(/\./,RR(FI(...s_2,...sF1))),end:FI(...s_2,...sF1),excludeBegin:!0},W={match:U9(/\./,FI(...oF1)),relevance:0},w=oF1.filter((a)=>typeof a==="string").concat(["_|0"]),B=oF1.filter((a)=>typeof a!=="string").concat(E49).map(Ig1),A={variants:[{className:"keyword",match:FI(...B,...sF1)}]},V={$pattern:FI(/\b\w+/,/#\w+/),keyword:w.concat(S49),literal:o_2},X=[C,W,A],_={match:U9(/\./,FI(...e_2)),relevance:0},F={className:"built_in",match:U9(/\b/,FI(...e_2),/(?=\()/)},g=[_,F],J={match:/->/,relevance:0},K={className:"operator",relevance:0,variants:[{match:eF1},{match:`\\.(\\.|${dD2})+`}]},Q=[J,K],E="([0-9]_*)+",S="([0-9a-fA-F]_*)+",P={className:"number",relevance:0,variants:[{match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{match:"\\b0x(([0-9a-fA-F]_*)+)(\\.(([0-9a-fA-F]_*)+))?([pP][+-]?(([0-9]_*)+))?\\b"},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},$=(a="")=>({className:"subst",variants:[{match:U9(/\\/,a,/[0\\tnr"']/)},{match:U9(/\\/,a,/u\{[0-9a-fA-F]{1,8}\}/)}]}),h=(a="")=>({className:"subst",match:U9(/\\/,a,/[\t ]*(?:[\r\n]|\r\n)/)}),O=(a="")=>({className:"subst",label:"interpol",begin:U9(/\\/,a,/\(/),end:/\)/}),T=(a="")=>({begin:U9(a,/"""/),end:U9(/"""/,a),contains:[$(a),h(a),O(a)]}),V1=(a="")=>({begin:U9(a,/"/),end:U9(/"/,a),contains:[$(a),O(a)]}),c={className:"string",variants:[T(),T("#"),T("##"),T("###"),V1(),V1("#"),V1("##"),V1("###")]},c1={match:U9(/`/,ZX,/`/)},o1={className:"variable",match:/\$\d+/},a1={className:"variable",match:`\\$${Oa}+`},f1=[c1,o1,a1],r={match:/(@|#)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:y49,contains:[...Q,P,c]}]}},A1={className:"keyword",match:U9(/@/,FI(...L49))},m1={className:"meta",match:U9(/@/,ZX)},T1=[r,A1,m1],e1={match:RR(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:U9(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,Oa,"+")},{className:"type",match:tF1,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:U9(/\s+&\s+/,RR(tF1)),relevance:0}]},F0={begin://,keywords:V,contains:[...Z,...X,...T1,J,e1]};e1.contains.push(F0);let P0={match:U9(ZX,/\s*:/),keywords:"_|0",relevance:0},B0={begin:/\(/,end:/\)/,relevance:0,keywords:V,contains:["self",P0,...Z,...X,...g,...Q,P,c,...f1,...T1,e1]},a0={beginKeywords:"func",contains:[{className:"title",match:FI(c1.match,ZX,eF1),endsParent:!0,relevance:0},d]},e={begin://,contains:[...Z,e1]},G0={begin:FI(RR(U9(ZX,/\s*:/)),RR(U9(ZX,/\s+/,ZX,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:ZX}]},H1={begin:/\(/,end:/\)/,keywords:V,contains:[G0,...Z,...X,...Q,P,c,...T1,e1,B0],endsParent:!0,illegal:/["']/},j1={className:"function",match:RR(/\bfunc\b/),contains:[a0,e,H1,d],illegal:[/\[/,/%/]},i1={className:"function",match:/\b(subscript|init[?!]?)\s*(?=[<(])/,keywords:{keyword:"subscript init init? init!",$pattern:/\w+[?!]?/},contains:[e,H1,d],illegal:/\[|%/},E0={beginKeywords:"operator",end:I.MATCH_NOTHING_RE,contains:[{className:"title",match:eF1,endsParent:!0,relevance:0}]},k={beginKeywords:"precedencegroup",end:I.MATCH_NOTHING_RE,contains:[{className:"title",match:tF1,relevance:0},{begin:/{/,end:/}/,relevance:0,endsParent:!0,keywords:[...M49,...o_2],contains:[e1]}]};for(let a of c.variants){let Z1=a.contains.find((N1)=>N1.label==="interpol");Z1.keywords=V;let Q1=[...X,...g,...Q,P,c,...f1];Z1.contains=[...Q1,{begin:/\(/,end:/\)/,contains:["self",...Q1]}]}return{name:"Swift",keywords:V,contains:[...Z,j1,i1,{className:"class",beginKeywords:"struct protocol class extension enum",end:"\\{",excludeEnd:!0,keywords:V,contains:[I.inherit(I.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...X]},E0,k,{beginKeywords:"import",end:/$/,contains:[...Z],relevance:0},...X,...g,...Q,P,c,...f1,...T1,e1,B0]}}ZD2.exports=P49});var wD2=Y((Og3,WD2)=>{function $49(I){return{name:"Tagger Script",contains:[{className:"comment",begin:/\$noop\(/,end:/\)/,contains:[{begin:/\(/,end:/\)/,contains:["self",{begin:/\\./}]}],relevance:10},{className:"keyword",begin:/\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,end:/\(/,excludeEnd:!0},{className:"variable",begin:/%[_a-zA-Z0-9:]*/,end:"%"},{className:"symbol",begin:/\\./}]}}WD2.exports=$49});var AD2=Y((mg3,BD2)=>{function u49(I){var d="true false yes no null",G="[\\w#;/?:@&=+$,.~*'()[\\]]+",Z={className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},C={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},W={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[I.BACKSLASH_ESCAPE,C]},w=I.inherit(W,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),B="[0-9]{4}(-[0-9][0-9]){0,2}",A="([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?",V="(\\.[0-9]*)?",X="([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?",_={className:"number",begin:"\\b"+B+A+V+X+"\\b"},F={end:",",endsWithParent:!0,excludeEnd:!0,keywords:d,relevance:0},g={begin:/\{/,end:/\}/,contains:[F],illegal:"\\n",relevance:0},J={begin:"\\[",end:"\\]",contains:[F],illegal:"\\n",relevance:0},K=[Z,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+G},{className:"type",begin:"!<"+G+">"},{className:"type",begin:"!"+G},{className:"type",begin:"!!"+G},{className:"meta",begin:"&"+I.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+I.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},I.HASH_COMMENT_MODE,{beginKeywords:d,keywords:{literal:d}},_,{className:"number",begin:I.C_NUMBER_RE+"\\b",relevance:0},g,J,W],Q=[...K];return Q.pop(),Q.push(w),F.contains=Q,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:K}}BD2.exports=u49});var XD2=Y((lg3,VD2)=>{function T49(I){return{name:"Test Anything Protocol",case_insensitive:!0,contains:[I.HASH_COMMENT_MODE,{className:"meta",variants:[{begin:"^TAP version (\\d+)$"},{begin:"^1\\.\\.(\\d+)$"}]},{begin:/---$/,end:"\\.\\.\\.$",subLanguage:"yaml",relevance:0},{className:"number",begin:" (\\d+) "},{className:"symbol",variants:[{begin:"^ok"},{begin:"^not ok"}]}]}}VD2.exports=T49});var DD2=Y((bg3,_D2)=>{function O49(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function m49(I){return YD2("(",I,")?")}function YD2(...I){return I.map((G)=>O49(G)).join("")}function l49(I){let d=/[a-zA-Z_][a-zA-Z0-9_]*/,G={className:"number",variants:[I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE]};return{name:"Tcl",aliases:["tk"],keywords:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",contains:[I.COMMENT(";[ \\t]*#","$"),I.COMMENT("^[ \\t]*#","$"),{beginKeywords:"proc",end:"[\\{]",excludeEnd:!0,contains:[{className:"title",begin:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"[ \\t\\n\\r]",endsWithParent:!0,excludeEnd:!0}]},{className:"variable",variants:[{begin:YD2(/\$/,m49(/::/),d,"(::",d,")*")},{begin:"\\$\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"\\}",contains:[G]}]},{className:"string",contains:[I.BACKSLASH_ESCAPE],variants:[I.inherit(I.QUOTE_STRING_MODE,{illegal:null})]},G]}}_D2.exports=l49});var FD2=Y((hg3,HD2)=>{function b49(I){return{name:"Thrift",keywords:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:"bool byte i16 i32 i64 double string binary",literal:"true false"},contains:[I.QUOTE_STRING_MODE,I.NUMBER_MODE,I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"struct enum service exception",end:/\{/,illegal:/\n/,contains:[I.inherit(I.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:"\\b(set|list|map)\\s*<",end:">",keywords:"bool byte i16 i32 i64 double string binary",contains:["self"]}]}}HD2.exports=b49});var JD2=Y((jg3,gD2)=>{function h49(I){let d={className:"number",begin:"[1-9][0-9]*",relevance:0},G={className:"symbol",begin:":[^\\]]+"},Z={className:"built_in",begin:"(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",end:"\\]",contains:["self",d,G]},C={className:"built_in",begin:"(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",end:"\\]",contains:["self",d,I.QUOTE_STRING_MODE,G]};return{name:"TP",keywords:{keyword:"ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN SUBSTR FINDSTR VOFFSET PROG ATTR MN POS",literal:"ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET"},contains:[Z,C,{className:"keyword",begin:"/(PROG|ATTR|MN|POS|END)\\b"},{className:"keyword",begin:"(CALL|RUN|POINT_LOGIC|LBL)\\b"},{className:"keyword",begin:"\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"},{className:"number",begin:"\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",relevance:0},I.COMMENT("//","[;$]"),I.COMMENT("!","[;$]"),I.COMMENT("--eg:","$"),I.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"'"},I.C_NUMBER_MODE,{className:"variable",begin:"\\$[A-Za-z0-9_]+"}]}}gD2.exports=h49});var ND2=Y((kg3,KD2)=>{function j49(I){var d={className:"params",begin:"\\(",end:"\\)"},G="attribute block constant cycle date dump include max min parent random range source template_from_string",Z={beginKeywords:G,keywords:{name:G},relevance:0,contains:[d]},C={begin:/\|[A-Za-z_]+:?/,keywords:"abs batch capitalize column convert_encoding date date_modify default escape filter first format inky_to_html inline_css join json_encode keys last length lower map markdown merge nl2br number_format raw reduce replace reverse round slice sort spaceless split striptags title trim upper url_encode",contains:[Z]},W="apply autoescape block deprecated do embed extends filter flush for from if import include macro sandbox set use verbatim with";return W=W+" "+W.split(" ").map(function(w){return"end"+w}).join(" "),{name:"Twig",aliases:["craftcms"],case_insensitive:!0,subLanguage:"xml",contains:[I.COMMENT(/\{#/,/#\}/),{className:"template-tag",begin:/\{%/,end:/%\}/,contains:[{className:"name",begin:/\w+/,keywords:W,starts:{endsWithParent:!0,contains:[C,Z],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:["self",C,Z]}]}}KD2.exports=j49});var UD2=Y((xg3,RD2)=>{var QD2=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fD2=["true","false","null","undefined","NaN","Infinity"],k49=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],x49=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],c49=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],p49=["arguments","this","super","console","window","document","localStorage","module","global"],qD2=[].concat(c49,p49,k49,x49);function i49(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function zD2(I){return dg1("(?=",I,")")}function dg1(...I){return I.map((G)=>i49(G)).join("")}function n49(I){let d=($,{after:h})=>{let O="",end:""},C={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:($,h)=>{let O=$[0].length+$.index,T=$.input[O];if(T==="<"){h.ignoreMatch();return}if(T===">"){if(!d($,{after:O}))h.ignoreMatch()}}},W={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:QD2,literal:fD2,built_in:qD2},w="[0-9](_?[0-9])*",B="\\.([0-9](_?[0-9])*)",A="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",V={className:"number",variants:[{begin:"(\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)((\\.([0-9](_?[0-9])*))|\\.)?|(\\.([0-9](_?[0-9])*)))[eE][+-]?([0-9](_?[0-9])*)\\b"},{begin:"\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)\\b((\\.([0-9](_?[0-9])*))\\b|\\.)?|(\\.([0-9](_?[0-9])*))\\b"},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},X={className:"subst",begin:"\\$\\{",end:"\\}",keywords:W,contains:[]},_={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[I.BACKSLASH_ESCAPE,X],subLanguage:"xml"}},F={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[I.BACKSLASH_ESCAPE,X],subLanguage:"css"}},g={className:"string",begin:"`",end:"`",contains:[I.BACKSLASH_ESCAPE,X]},K={className:"comment",variants:[I.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:"[A-Za-z$_][0-9A-Za-z$_]*(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),I.C_BLOCK_COMMENT_MODE,I.C_LINE_COMMENT_MODE]},Q=[I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,_,F,g,V,I.REGEXP_MODE];X.contains=Q.concat({begin:/\{/,end:/\}/,keywords:W,contains:["self"].concat(Q)});let E=[].concat(K,X.contains),S=E.concat([{begin:/\(/,end:/\)/,keywords:W,contains:["self"].concat(E)}]),P={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:S};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:W,exports:{PARAMS_CONTAINS:S},illegal:/#(?![$_A-z])/,contains:[I.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,_,F,g,K,V,{begin:dg1(/[{,\n]\s*/,zD2(dg1(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,"[A-Za-z$_][0-9A-Za-z$_]*\\s*:"))),relevance:0,contains:[{className:"attr",begin:"[A-Za-z$_][0-9A-Za-z$_]*"+zD2("\\s*:"),relevance:0}]},{begin:"("+I.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[K,I.REGEXP_MODE,{className:"function",begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+I.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:I.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:S}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:Z.begin,end:Z.end},{begin:C.begin,"on:begin":C.isTrulyOpeningTag,end:C.end}],subLanguage:"xml",contains:[{begin:C.begin,end:C.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:W,contains:["self",I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),P],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:I.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[P,I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"})]},{variants:[{begin:"\\.[A-Za-z$_][0-9A-Za-z$_]*"},{begin:"\\$[A-Za-z$_][0-9A-Za-z$_]*"}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},I.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),"self",P]},{begin:"(get|set)\\s+(?=[A-Za-z$_][0-9A-Za-z$_]*\\()",end:/\{/,keywords:"get set",contains:[I.inherit(I.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),{begin:/\(\)/},P]},{begin:/\$[(.]/}]}}function r49(I){let G={beginKeywords:"namespace",end:/\{/,excludeEnd:!0},Z={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},C={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},W=["any","void","number","boolean","string","object","never","enum"],w=["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"],B={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:QD2.concat(w),literal:fD2,built_in:qD2.concat(W)},A={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},V=(F,g,J)=>{let K=F.contains.findIndex((Q)=>Q.label===g);if(K===-1)throw new Error("can not find mode to replace");F.contains.splice(K,1,J)},X=n49(I);Object.assign(X.keywords,B),X.exports.PARAMS_CONTAINS.push(A),X.contains=X.contains.concat([A,G,Z]),V(X,"shebang",I.SHEBANG()),V(X,"use_strict",C);let _=X.contains.find((F)=>F.className==="function");return _.relevance=0,Object.assign(X,{name:"TypeScript",aliases:["ts","tsx"]}),X}RD2.exports=r49});var ED2=Y((cg3,vD2)=>{function a49(I){return{name:"Vala",keywords:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},contains:[{className:"class",beginKeywords:"class interface namespace",end:/\{/,excludeEnd:!0,illegal:"[^,:\\n\\s\\.]",contains:[I.UNDERSCORE_TITLE_MODE]},I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""',relevance:5},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,I.C_NUMBER_MODE,{className:"meta",begin:"^#",end:"$",relevance:2}]}}vD2.exports=a49});var LD2=Y((pg3,SD2)=>{function MD2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function ma(...I){return I.map((G)=>MD2(G)).join("")}function Gg1(...I){return"("+I.map((G)=>MD2(G)).join("|")+")"}function s49(I){let d={className:"string",begin:/"(""|[^/n])"C\b/},G={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},Z=/\d{1,2}\/\d{1,2}\/\d{4}/,C=/\d{4}-\d{1,2}-\d{1,2}/,W=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,w=/\d{1,2}(:\d{1,2}){1,2}/,B={className:"literal",variants:[{begin:ma(/# */,Gg1(C,Z),/ *#/)},{begin:ma(/# */,w,/ *#/)},{begin:ma(/# */,W,/ *#/)},{begin:ma(/# */,Gg1(C,Z),/ +/,Gg1(W,w),/ *#/)}]},A={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},V={className:"label",begin:/^\w+:/},X=I.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),_=I.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[d,G,B,A,V,X,_,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{"meta-keyword":"const disable else elseif enable end externalsource if region then"},contains:[_]}]}}SD2.exports=s49});var $D2=Y((ig3,PD2)=>{function yD2(I){if(!I)return null;if(typeof I==="string")return I;return I.source}function o49(...I){return I.map((G)=>yD2(G)).join("")}function e49(...I){return"("+I.map((G)=>yD2(G)).join("|")+")"}function t49(I){let d="lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid split cint sin datepart ltrim sqr time derived eval date formatpercent exp inputbox left ascw chrw regexp cstr err".split(" "),G=["server","response","request","scriptengine","scriptenginebuildversion","scriptengineminorversion","scriptenginemajorversion"],Z={begin:o49(e49(...d),"\\s*\\("),relevance:0,keywords:{built_in:d}};return{name:"VBScript",aliases:["vbs"],case_insensitive:!0,keywords:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:G,literal:"true false null nothing empty"},illegal:"//",contains:[Z,I.inherit(I.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),I.COMMENT(/'/,/$/,{relevance:0}),I.C_NUMBER_MODE]}}PD2.exports=t49});var TD2=Y((ng3,uD2)=>{function I59(I){return{name:"VBScript in HTML",subLanguage:"xml",contains:[{begin:"<%",end:"%>",subLanguage:"vbscript"}]}}uD2.exports=I59});var mD2=Y((rg3,OD2)=>{function d59(I){return{name:"Verilog",aliases:["v","sv","svh"],case_insensitive:!1,keywords:{$pattern:/[\w\$]+/,keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"},contains:[I.C_BLOCK_COMMENT_MODE,I.C_LINE_COMMENT_MODE,I.QUOTE_STRING_MODE,{className:"number",contains:[I.BACKSLASH_ESCAPE],variants:[{begin:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\b([0-9_])+",relevance:0}]},{className:"variable",variants:[{begin:"#\\((?!parameter).+\\)"},{begin:"\\.\\w+",relevance:0}]},{className:"meta",begin:"`",end:"$",keywords:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},relevance:0}]}}OD2.exports=d59});var bD2=Y((ag3,lD2)=>{function G59(I){let G="[eE][-+]?\\d(_|\\d)*",Z="\\d(_|\\d)*(\\.\\d(_|\\d)*)?("+G+")?",C="\\w+",w="\\b("+("\\d(_|\\d)*#\\w+(\\.\\w+)?#("+G+")?")+"|"+Z+")";return{name:"VHDL",case_insensitive:!0,keywords:{keyword:"abs access after alias all and architecture array assert assume assume_guarantee attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package parameter port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable view vmode vprop vunit wait when while with xnor xor",built_in:"boolean bit character integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_logic std_logic_vector unsigned signed boolean_vector integer_vector std_ulogic std_ulogic_vector unresolved_unsigned u_unsigned unresolved_signed u_signed real_vector time_vector",literal:"false true note warning error failure line text side width"},illegal:/\{/,contains:[I.C_BLOCK_COMMENT_MODE,I.COMMENT("--","$"),I.QUOTE_STRING_MODE,{className:"number",begin:w,relevance:0},{className:"string",begin:"'(U|X|0|1|Z|W|L|H|-)'",contains:[I.BACKSLASH_ESCAPE]},{className:"symbol",begin:"'[A-Za-z](_?[A-Za-z0-9])*",contains:[I.BACKSLASH_ESCAPE]}]}}lD2.exports=G59});var jD2=Y((sg3,hD2)=>{function Z59(I){return{name:"Vim Script",keywords:{$pattern:/[!#@\w]+/,keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},illegal:/;/,contains:[I.NUMBER_MODE,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:/"(\\"|\n\\|[^"\n])*"/},I.COMMENT('"',"$"),{className:"variable",begin:/[bwtglsav]:[\w\d_]*/},{className:"function",beginKeywords:"function function!",end:"$",relevance:0,contains:[I.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{className:"symbol",begin:/<[\w-]+>/}]}}hD2.exports=Z59});var xD2=Y((og3,kD2)=>{function C59(I){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+I.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[I.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*(\\.[0-9_]*)?(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},I.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}kD2.exports=C59});var pD2=Y((eg3,cD2)=>{function W59(I){let G={$pattern:/[a-zA-Z][a-zA-Z0-9_?]*/,keyword:"if then else do while until for loop import with is as where when by data constant integer real text name boolean symbol infix prefix postfix block tree",literal:"true false nil",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons "+"ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts"},Z={className:"string",begin:'"',end:'"',illegal:"\\n"},C={className:"string",begin:"'",end:"'",illegal:"\\n"},W={className:"string",begin:"<<",end:">>"},w={className:"number",begin:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"},B={beginKeywords:"import",end:"$",keywords:G,contains:[Z]},A={className:"function",begin:/[a-z][^\n]*->/,returnBegin:!0,end:/->/,contains:[I.inherit(I.TITLE_MODE,{starts:{endsWithParent:!0,keywords:G}})]};return{name:"XL",aliases:["tao"],keywords:G,contains:[I.C_LINE_COMMENT_MODE,I.C_BLOCK_COMMENT_MODE,Z,C,W,A,B,w,I.NUMBER_MODE]}}cD2.exports=W59});var nD2=Y((tg3,iD2)=>{function w59(I){return{name:"XQuery",aliases:["xpath","xq"],case_insensitive:!1,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{$pattern:/[a-zA-Z$][a-zA-Z0-9_:-]*/,keyword:"module schema namespace boundary-space preserve no-preserve strip default collation base-uri ordering context decimal-format decimal-separator copy-namespaces empty-sequence except exponent-separator external grouping-separator inherit no-inherit lax minus-sign per-mille percent schema-attribute schema-element strict unordered zero-digit declare import option function validate variable for at in let where order group by return if then else tumbling sliding window start when only end previous next stable ascending descending allowing empty greatest least some every satisfies switch case typeswitch try catch and or to union intersect instance of treat as castable cast map array delete insert into replace value rename copy modify update",type:"item document-node node attribute document element comment namespace namespace-node processing-instruction text construction xs:anyAtomicType xs:untypedAtomic xs:duration xs:time xs:decimal xs:float xs:double xs:gYearMonth xs:gYear xs:gMonthDay xs:gMonth xs:gDay xs:boolean xs:base64Binary xs:hexBinary xs:anyURI xs:QName xs:NOTATION xs:dateTime xs:dateTimeStamp xs:date xs:string xs:normalizedString xs:token xs:language xs:NMTOKEN xs:Name xs:NCName xs:ID xs:IDREF xs:ENTITY xs:integer xs:nonPositiveInteger xs:negativeInteger xs:long xs:int xs:short xs:byte xs:nonNegativeInteger xs:unisignedLong xs:unsignedInt xs:unsignedShort xs:unsignedByte xs:positiveInteger xs:yearMonthDuration xs:dayTimeDuration",literal:"eq ne lt le gt ge is self:: child:: descendant:: descendant-or-self:: attribute:: following:: following-sibling:: parent:: ancestor:: ancestor-or-self:: preceding:: preceding-sibling:: NaN"},contains:[{className:"variable",begin:/[$][\w\-:]+/},{className:"built_in",variants:[{begin:/\barray:/,end:/(?:append|filter|flatten|fold-(?:left|right)|for-each(?:-pair)?|get|head|insert-before|join|put|remove|reverse|size|sort|subarray|tail)\b/},{begin:/\bmap:/,end:/(?:contains|entry|find|for-each|get|keys|merge|put|remove|size)\b/},{begin:/\bmath:/,end:/(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\b/},{begin:/\bop:/,end:/\(/,excludeEnd:!0},{begin:/\bfn:/,end:/\(/,excludeEnd:!0},{begin:/[^/,end:/(\/[\w._:-]+>)/,subLanguage:"xml",contains:[{begin:/\{/,end:/\}/,subLanguage:"xquery"},"self"]}]}}iD2.exports=w59});var aD2=Y((IJ3,rD2)=>{function B59(I){let d={className:"string",contains:[I.BACKSLASH_ESCAPE],variants:[I.inherit(I.APOS_STRING_MODE,{illegal:null}),I.inherit(I.QUOTE_STRING_MODE,{illegal:null})]},G=I.UNDERSCORE_TITLE_MODE,Z={variants:[I.BINARY_NUMBER_MODE,I.C_NUMBER_MODE]},C="namespace class interface use extends function return abstract final public protected private static deprecated throw try catch Exception echo empty isset instanceof unset let var new const self require if else elseif switch case default do while loop for continue break likely unlikely __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ array boolean float double integer object resource string char long unsigned bool int uint ulong uchar true false null undefined";return{name:"Zephir",aliases:["zep"],keywords:C,contains:[I.C_LINE_COMMENT_MODE,I.COMMENT(/\/\*/,/\*\//,{contains:[{className:"doctag",begin:/@[A-Za-z]+/}]}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;/,contains:[I.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function fn",end:/[;{]/,excludeEnd:!0,illegal:/\$|\[|%/,contains:[G,{className:"params",begin:/\(/,end:/\)/,keywords:C,contains:["self",I.C_BLOCK_COMMENT_MODE,d,Z]}]},{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,illegal:/[:($"]/,contains:[{beginKeywords:"extends implements"},G]},{beginKeywords:"namespace",end:/;/,illegal:/[.']/,contains:[G]},{beginKeywords:"use",end:/;/,contains:[G]},{begin:/=>/},d,Z]}}rD2.exports=B59});var UR=Y((dJ3,sD2)=>{var M1=Xw2();M1.registerLanguage("1c",_w2());M1.registerLanguage("abnf",Hw2());M1.registerLanguage("accesslog",Jw2());M1.registerLanguage("actionscript",Nw2());M1.registerLanguage("ada",Qw2());M1.registerLanguage("angelscript",qw2());M1.registerLanguage("apache",Uw2());M1.registerLanguage("applescript",Lw2());M1.registerLanguage("arcade",Pw2());M1.registerLanguage("arduino",uw2());M1.registerLanguage("armasm",Ow2());M1.registerLanguage("xml",hw2());M1.registerLanguage("asciidoc",xw2());M1.registerLanguage("aspectj",pw2());M1.registerLanguage("autohotkey",nw2());M1.registerLanguage("autoit",aw2());M1.registerLanguage("avrasm",ow2());M1.registerLanguage("awk",tw2());M1.registerLanguage("axapta",dB2());M1.registerLanguage("bash",ZB2());M1.registerLanguage("basic",WB2());M1.registerLanguage("bnf",BB2());M1.registerLanguage("brainfuck",VB2());M1.registerLanguage("c-like",YB2());M1.registerLanguage("c",DB2());M1.registerLanguage("cal",FB2());M1.registerLanguage("capnproto",JB2());M1.registerLanguage("ceylon",NB2());M1.registerLanguage("clean",QB2());M1.registerLanguage("clojure",qB2());M1.registerLanguage("clojure-repl",UB2());M1.registerLanguage("cmake",EB2());M1.registerLanguage("coffeescript",SB2());M1.registerLanguage("coq",yB2());M1.registerLanguage("cos",$B2());M1.registerLanguage("cpp",TB2());M1.registerLanguage("crmsh",mB2());M1.registerLanguage("crystal",bB2());M1.registerLanguage("csharp",jB2());M1.registerLanguage("csp",xB2());M1.registerLanguage("css",pB2());M1.registerLanguage("d",nB2());M1.registerLanguage("markdown",aB2());M1.registerLanguage("dart",oB2());M1.registerLanguage("delphi",tB2());M1.registerLanguage("diff",dA2());M1.registerLanguage("django",ZA2());M1.registerLanguage("dns",WA2());M1.registerLanguage("dockerfile",BA2());M1.registerLanguage("dos",VA2());M1.registerLanguage("dsconfig",YA2());M1.registerLanguage("dts",DA2());M1.registerLanguage("dust",FA2());M1.registerLanguage("ebnf",JA2());M1.registerLanguage("elixir",NA2());M1.registerLanguage("elm",QA2());M1.registerLanguage("ruby",RA2());M1.registerLanguage("erb",vA2());M1.registerLanguage("erlang-repl",MA2());M1.registerLanguage("erlang",LA2());M1.registerLanguage("excel",PA2());M1.registerLanguage("fix",uA2());M1.registerLanguage("flix",OA2());M1.registerLanguage("fortran",lA2());M1.registerLanguage("fsharp",hA2());M1.registerLanguage("gams",kA2());M1.registerLanguage("gauss",cA2());M1.registerLanguage("gcode",iA2());M1.registerLanguage("gherkin",rA2());M1.registerLanguage("glsl",sA2());M1.registerLanguage("gml",eA2());M1.registerLanguage("go",IV2());M1.registerLanguage("golo",GV2());M1.registerLanguage("gradle",CV2());M1.registerLanguage("groovy",wV2());M1.registerLanguage("haml",AV2());M1.registerLanguage("handlebars",YV2());M1.registerLanguage("haskell",DV2());M1.registerLanguage("haxe",FV2());M1.registerLanguage("hsp",JV2());M1.registerLanguage("htmlbars",zV2());M1.registerLanguage("http",fV2());M1.registerLanguage("hy",RV2());M1.registerLanguage("inform7",vV2());M1.registerLanguage("ini",LV2());M1.registerLanguage("irpf90",PV2());M1.registerLanguage("isbl",uV2());M1.registerLanguage("java",OV2());M1.registerLanguage("javascript",bV2());M1.registerLanguage("jboss-cli",jV2());M1.registerLanguage("json",xV2());M1.registerLanguage("julia",pV2());M1.registerLanguage("julia-repl",nV2());M1.registerLanguage("kotlin",aV2());M1.registerLanguage("lasso",oV2());M1.registerLanguage("latex",tV2());M1.registerLanguage("ldif",dX2());M1.registerLanguage("leaf",ZX2());M1.registerLanguage("less",BX2());M1.registerLanguage("lisp",VX2());M1.registerLanguage("livecodeserver",YX2());M1.registerLanguage("livescript",DX2());M1.registerLanguage("llvm",FX2());M1.registerLanguage("lsl",JX2());M1.registerLanguage("lua",NX2());M1.registerLanguage("makefile",QX2());M1.registerLanguage("mathematica",vX2());M1.registerLanguage("matlab",MX2());M1.registerLanguage("maxima",LX2());M1.registerLanguage("mel",PX2());M1.registerLanguage("mercury",uX2());M1.registerLanguage("mipsasm",OX2());M1.registerLanguage("mizar",lX2());M1.registerLanguage("perl",kX2());M1.registerLanguage("mojolicious",cX2());M1.registerLanguage("monkey",iX2());M1.registerLanguage("moonscript",rX2());M1.registerLanguage("n1ql",sX2());M1.registerLanguage("nginx",eX2());M1.registerLanguage("nim",IY2());M1.registerLanguage("nix",GY2());M1.registerLanguage("node-repl",CY2());M1.registerLanguage("nsis",wY2());M1.registerLanguage("objectivec",AY2());M1.registerLanguage("ocaml",XY2());M1.registerLanguage("openscad",_Y2());M1.registerLanguage("oxygene",HY2());M1.registerLanguage("parser3",gY2());M1.registerLanguage("pf",KY2());M1.registerLanguage("pgsql",zY2());M1.registerLanguage("php",fY2());M1.registerLanguage("php-template",RY2());M1.registerLanguage("plaintext",vY2());M1.registerLanguage("pony",MY2());M1.registerLanguage("powershell",LY2());M1.registerLanguage("processing",PY2());M1.registerLanguage("profile",uY2());M1.registerLanguage("prolog",OY2());M1.registerLanguage("properties",lY2());M1.registerLanguage("protobuf",hY2());M1.registerLanguage("puppet",kY2());M1.registerLanguage("purebasic",cY2());M1.registerLanguage("python",iY2());M1.registerLanguage("python-repl",rY2());M1.registerLanguage("q",sY2());M1.registerLanguage("qml",eY2());M1.registerLanguage("r",I_2());M1.registerLanguage("reasonml",G_2());M1.registerLanguage("rib",C_2());M1.registerLanguage("roboconf",w_2());M1.registerLanguage("routeros",A_2());M1.registerLanguage("rsl",X_2());M1.registerLanguage("ruleslanguage",__2());M1.registerLanguage("rust",H_2());M1.registerLanguage("sas",g_2());M1.registerLanguage("scala",K_2());M1.registerLanguage("scheme",z_2());M1.registerLanguage("scilab",f_2());M1.registerLanguage("scss",R_2());M1.registerLanguage("shell",v_2());M1.registerLanguage("smali",M_2());M1.registerLanguage("smalltalk",L_2());M1.registerLanguage("sml",P_2());M1.registerLanguage("sqf",u_2());M1.registerLanguage("sql_more",O_2());M1.registerLanguage("sql",b_2());M1.registerLanguage("stan",j_2());M1.registerLanguage("stata",x_2());M1.registerLanguage("step21",p_2());M1.registerLanguage("stylus",n_2());M1.registerLanguage("subunit",a_2());M1.registerLanguage("swift",CD2());M1.registerLanguage("taggerscript",wD2());M1.registerLanguage("yaml",AD2());M1.registerLanguage("tap",XD2());M1.registerLanguage("tcl",DD2());M1.registerLanguage("thrift",FD2());M1.registerLanguage("tp",JD2());M1.registerLanguage("twig",ND2());M1.registerLanguage("typescript",UD2());M1.registerLanguage("vala",ED2());M1.registerLanguage("vbnet",LD2());M1.registerLanguage("vbscript",$D2());M1.registerLanguage("vbscript-html",TD2());M1.registerLanguage("verilog",mD2());M1.registerLanguage("vhdl",bD2());M1.registerLanguage("vim",jD2());M1.registerLanguage("x86asm",xD2());M1.registerLanguage("xl",pD2());M1.registerLanguage("xquery",nD2());M1.registerLanguage("zephir",aD2());sD2.exports=M1});var la=Y((V59)=>{var A59=[65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];V59.REPLACEMENT_CHARACTER="�";V59.CODE_POINTS={EOF:-1,NULL:0,TABULATION:9,CARRIAGE_RETURN:13,LINE_FEED:10,FORM_FEED:12,SPACE:32,EXCLAMATION_MARK:33,QUOTATION_MARK:34,NUMBER_SIGN:35,AMPERSAND:38,APOSTROPHE:39,HYPHEN_MINUS:45,SOLIDUS:47,DIGIT_0:48,DIGIT_9:57,SEMICOLON:59,LESS_THAN_SIGN:60,EQUALS_SIGN:61,GREATER_THAN_SIGN:62,QUESTION_MARK:63,LATIN_CAPITAL_A:65,LATIN_CAPITAL_F:70,LATIN_CAPITAL_X:88,LATIN_CAPITAL_Z:90,RIGHT_SQUARE_BRACKET:93,GRAVE_ACCENT:96,LATIN_SMALL_A:97,LATIN_SMALL_F:102,LATIN_SMALL_X:120,LATIN_SMALL_Z:122,REPLACEMENT_CHARACTER:65533};V59.CODE_POINT_SEQUENCES={DASH_DASH_STRING:[45,45],DOCTYPE_STRING:[68,79,67,84,89,80,69],CDATA_START_STRING:[91,67,68,65,84,65,91],SCRIPT_STRING:[115,99,114,105,112,116],PUBLIC_STRING:[80,85,66,76,73,67],SYSTEM_STRING:[83,89,83,84,69,77]};V59.isSurrogate=function(I){return I>=55296&&I<=57343};V59.isSurrogatePair=function(I){return I>=56320&&I<=57343};V59.getSurrogatePairCodePoint=function(I,d){return(I-55296)*1024+9216+d};V59.isControlCodePoint=function(I){return I!==32&&I!==10&&I!==13&&I!==9&&I!==12&&I>=1&&I<=31||I>=127&&I<=159};V59.isUndefinedCodePoint=function(I){return I>=64976&&I<=65007||A59.indexOf(I)>-1}});var ba=Y((ZJ3,oD2)=>{oD2.exports={controlCharacterInInputStream:"control-character-in-input-stream",noncharacterInInputStream:"noncharacter-in-input-stream",surrogateInInputStream:"surrogate-in-input-stream",nonVoidHtmlElementStartTagWithTrailingSolidus:"non-void-html-element-start-tag-with-trailing-solidus",endTagWithAttributes:"end-tag-with-attributes",endTagWithTrailingSolidus:"end-tag-with-trailing-solidus",unexpectedSolidusInTag:"unexpected-solidus-in-tag",unexpectedNullCharacter:"unexpected-null-character",unexpectedQuestionMarkInsteadOfTagName:"unexpected-question-mark-instead-of-tag-name",invalidFirstCharacterOfTagName:"invalid-first-character-of-tag-name",unexpectedEqualsSignBeforeAttributeName:"unexpected-equals-sign-before-attribute-name",missingEndTagName:"missing-end-tag-name",unexpectedCharacterInAttributeName:"unexpected-character-in-attribute-name",unknownNamedCharacterReference:"unknown-named-character-reference",missingSemicolonAfterCharacterReference:"missing-semicolon-after-character-reference",unexpectedCharacterAfterDoctypeSystemIdentifier:"unexpected-character-after-doctype-system-identifier",unexpectedCharacterInUnquotedAttributeValue:"unexpected-character-in-unquoted-attribute-value",eofBeforeTagName:"eof-before-tag-name",eofInTag:"eof-in-tag",missingAttributeValue:"missing-attribute-value",missingWhitespaceBetweenAttributes:"missing-whitespace-between-attributes",missingWhitespaceAfterDoctypePublicKeyword:"missing-whitespace-after-doctype-public-keyword",missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:"missing-whitespace-between-doctype-public-and-system-identifiers",missingWhitespaceAfterDoctypeSystemKeyword:"missing-whitespace-after-doctype-system-keyword",missingQuoteBeforeDoctypePublicIdentifier:"missing-quote-before-doctype-public-identifier",missingQuoteBeforeDoctypeSystemIdentifier:"missing-quote-before-doctype-system-identifier",missingDoctypePublicIdentifier:"missing-doctype-public-identifier",missingDoctypeSystemIdentifier:"missing-doctype-system-identifier",abruptDoctypePublicIdentifier:"abrupt-doctype-public-identifier",abruptDoctypeSystemIdentifier:"abrupt-doctype-system-identifier",cdataInHtmlContent:"cdata-in-html-content",incorrectlyOpenedComment:"incorrectly-opened-comment",eofInScriptHtmlCommentLikeText:"eof-in-script-html-comment-like-text",eofInDoctype:"eof-in-doctype",nestedComment:"nested-comment",abruptClosingOfEmptyComment:"abrupt-closing-of-empty-comment",eofInComment:"eof-in-comment",incorrectlyClosedComment:"incorrectly-closed-comment",eofInCdata:"eof-in-cdata",absenceOfDigitsInNumericCharacterReference:"absence-of-digits-in-numeric-character-reference",nullCharacterReference:"null-character-reference",surrogateCharacterReference:"surrogate-character-reference",characterReferenceOutsideUnicodeRange:"character-reference-outside-unicode-range",controlCharacterReference:"control-character-reference",noncharacterCharacterReference:"noncharacter-character-reference",missingWhitespaceBeforeDoctypeName:"missing-whitespace-before-doctype-name",missingDoctypeName:"missing-doctype-name",invalidCharacterSequenceAfterDoctypeName:"invalid-character-sequence-after-doctype-name",duplicateAttribute:"duplicate-attribute",nonConformingDoctype:"non-conforming-doctype",missingDoctype:"missing-doctype",misplacedDoctype:"misplaced-doctype",endTagWithoutMatchingOpenElement:"end-tag-without-matching-open-element",closingOfElementWithOpenChildElements:"closing-of-element-with-open-child-elements",disallowedContentInNoscriptInHead:"disallowed-content-in-noscript-in-head",openElementsLeftAfterEof:"open-elements-left-after-eof",abandonedHeadElementChild:"abandoned-head-element-child",misplacedStartTagForHeadElement:"misplaced-start-tag-for-head-element",nestedNoscriptInHead:"nested-noscript-in-head",eofInElementThatCanContainOnlyText:"eof-in-element-that-can-contain-only-text"}});var IH2=Y((CJ3,tD2)=>{var vR=la(),Zg1=ba(),xJ=vR.CODE_POINTS;class eD2{constructor(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536}_err(){}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(I){if(this.pos!==this.lastCharPos){let d=this.html.charCodeAt(this.pos+1);if(vR.isSurrogatePair(d))return this.pos++,this._addGap(),vR.getSurrogatePairCodePoint(I,d)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,xJ.EOF;return this._err(Zg1.surrogateInInputStream),I}dropParsedChunk(){if(this.pos>this.bufferWaterline)this.lastCharPos-=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[]}write(I,d){if(this.html)this.html+=I;else this.html=I;this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=d}insertHtmlAtCurrentPos(I){this.html=this.html.substring(0,this.pos+1)+I+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1}advance(){if(this.pos++,this.pos>this.lastCharPos)return this.endOfChunkHit=!this.lastChunkWritten,xJ.EOF;let I=this.html.charCodeAt(this.pos);if(this.skipNextNewLine&&I===xJ.LINE_FEED)return this.skipNextNewLine=!1,this._addGap(),this.advance();if(I===xJ.CARRIAGE_RETURN)return this.skipNextNewLine=!0,xJ.LINE_FEED;if(this.skipNextNewLine=!1,vR.isSurrogate(I))I=this._processSurrogate(I);if(!(I>31&&I<127||I===xJ.LINE_FEED||I===xJ.CARRIAGE_RETURN||I>159&&I<64976))this._checkForProblematicCharacters(I);return I}_checkForProblematicCharacters(I){if(vR.isControlCodePoint(I))this._err(Zg1.controlCharacterInInputStream);else if(vR.isUndefinedCodePoint(I))this._err(Zg1.noncharacterInInputStream)}retreat(){if(this.pos===this.lastGapPos)this.lastGapPos=this.gapStack.pop(),this.pos--;this.pos--}}tD2.exports=eD2});var GH2=Y((WJ3,dH2)=>{dH2.exports=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4000,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13000,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204])});var E$=Y((wJ3,wH2)=>{var K59=IH2(),D9=la(),iJ=GH2(),_0=ba(),g1=D9.CODE_POINTS,cJ=D9.CODE_POINT_SEQUENCES,N59={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};function x9(I){return I===g1.SPACE||I===g1.LINE_FEED||I===g1.TABULATION||I===g1.FORM_FEED}function v$(I){return I>=g1.DIGIT_0&&I<=g1.DIGIT_9}function DW(I){return I>=g1.LATIN_CAPITAL_A&&I<=g1.LATIN_CAPITAL_Z}function pJ(I){return I>=g1.LATIN_SMALL_A&&I<=g1.LATIN_SMALL_Z}function CH(I){return pJ(I)||DW(I)}function Cg1(I){return CH(I)||v$(I)}function CH2(I){return I>=g1.LATIN_CAPITAL_A&&I<=g1.LATIN_CAPITAL_F}function WH2(I){return I>=g1.LATIN_SMALL_A&&I<=g1.LATIN_SMALL_F}function z59(I){return v$(I)||CH2(I)||WH2(I)}function ha(I){return I+32}function p3(I){if(I<=65535)return String.fromCharCode(I);return I-=65536,String.fromCharCode(I>>>10&1023|55296)+String.fromCharCode(56320|I&1023)}function ZH(I){return String.fromCharCode(ha(I))}function ZH2(I,d){let G=iJ[++I],Z=++I,C=Z+G-1;while(Z<=C){let W=Z+C>>>1,w=iJ[W];if(wd)C=W-1;else return iJ[W+G]}return-1}class $9{constructor(){this.preprocessor=new K59,this.tokenQueue=[],this.allowCDATA=!1,this.state="DATA_STATE",this.returnState="",this.charRefCode=-1,this.tempBuff=[],this.lastStartTagName="",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null}_err(){}_errOnNextCodePoint(I){this._consume(),this._err(I),this._unconsume()}getNextToken(){while(!this.tokenQueue.length&&this.active){this.consumedAfterSnapshot=0;let I=this._consume();if(!this._ensureHibernation())this[this.state](I)}return this.tokenQueue.shift()}write(I,d){this.active=!0,this.preprocessor.write(I,d)}insertHtmlAtCurrentPos(I){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(I)}_ensureHibernation(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:$9.HIBERNATION_TOKEN}),!0}return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(){this.consumedAfterSnapshot--,this.preprocessor.retreat()}_reconsumeInState(I){this.state=I,this._unconsume()}_consumeSequenceIfMatch(I,d,G){let Z=0,C=!0,W=I.length,w=0,B=d,A=void 0;for(;w0)B=this._consume(),Z++;if(B===g1.EOF){C=!1;break}if(A=I[w],B!==A&&(G||B!==ha(A))){C=!1;break}}if(!C)while(Z--)this._unconsume();return C}_isTempBufferEqualToScriptString(){if(this.tempBuff.length!==cJ.SCRIPT_STRING.length)return!1;for(let I=0;I0)this._err(_0.endTagWithAttributes);if(I.selfClosing)this._err(_0.endTagWithTrailingSolidus)}this.tokenQueue.push(I)}_emitCurrentCharacterToken(){if(this.currentCharacterToken)this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null}_emitEOFToken(){this._createEOFToken(),this._emitCurrentToken()}_appendCharToCurrentCharacterToken(I,d){if(this.currentCharacterToken&&this.currentCharacterToken.type!==I)this._emitCurrentCharacterToken();if(this.currentCharacterToken)this.currentCharacterToken.chars+=d;else this._createCharacterToken(I,d)}_emitCodePoint(I){let d=$9.CHARACTER_TOKEN;if(x9(I))d=$9.WHITESPACE_CHARACTER_TOKEN;else if(I===g1.NULL)d=$9.NULL_CHARACTER_TOKEN;this._appendCharToCurrentCharacterToken(d,p3(I))}_emitSeveralCodePoints(I){for(let d=0;d-1){let C=iJ[Z],W=C<7;if(W&&C&1)d=C&2?[iJ[++Z],iJ[++Z]]:[iJ[++Z]],G=0;let B=this._consume();if(this.tempBuff.push(B),G++,B===g1.EOF)break;if(W)Z=C&4?ZH2(Z,B):-1;else Z=B===C?++Z:-1}while(G--)this.tempBuff.pop(),this._unconsume();return d}_isCharacterReferenceInAttribute(){return this.returnState==="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE"||this.returnState==="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE"||this.returnState==="ATTRIBUTE_VALUE_UNQUOTED_STATE"}_isCharacterReferenceAttributeQuirk(I){if(!I&&this._isCharacterReferenceInAttribute()){let d=this._consume();return this._unconsume(),d===g1.EQUALS_SIGN||Cg1(d)}return!1}_flushCodePointsConsumedAsCharacterReference(){if(this._isCharacterReferenceInAttribute())for(let I=0;I");else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.state="SCRIPT_DATA_ESCAPED_STATE",this._emitChars(D9.REPLACEMENT_CHARACTER);else if(I===g1.EOF)this._err(_0.eofInScriptHtmlCommentLikeText),this._emitEOFToken();else this.state="SCRIPT_DATA_ESCAPED_STATE",this._emitCodePoint(I)}["SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE"](I){if(I===g1.SOLIDUS)this.tempBuff=[],this.state="SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE";else if(CH(I))this.tempBuff=[],this._emitChars("<"),this._reconsumeInState("SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE");else this._emitChars("<"),this._reconsumeInState("SCRIPT_DATA_ESCAPED_STATE")}["SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE"](I){if(CH(I))this._createEndTagToken(),this._reconsumeInState("SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE");else this._emitChars("");else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.state="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",this._emitChars(D9.REPLACEMENT_CHARACTER);else if(I===g1.EOF)this._err(_0.eofInScriptHtmlCommentLikeText),this._emitEOFToken();else this.state="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",this._emitCodePoint(I)}["SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE"](I){if(I===g1.SOLIDUS)this.tempBuff=[],this.state="SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE",this._emitChars("/");else this._reconsumeInState("SCRIPT_DATA_DOUBLE_ESCAPED_STATE")}["SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE"](I){if(x9(I)||I===g1.SOLIDUS||I===g1.GREATER_THAN_SIGN)this.state=this._isTempBufferEqualToScriptString()?"SCRIPT_DATA_ESCAPED_STATE":"SCRIPT_DATA_DOUBLE_ESCAPED_STATE",this._emitCodePoint(I);else if(DW(I))this.tempBuff.push(ha(I)),this._emitCodePoint(I);else if(pJ(I))this.tempBuff.push(I),this._emitCodePoint(I);else this._reconsumeInState("SCRIPT_DATA_DOUBLE_ESCAPED_STATE")}["BEFORE_ATTRIBUTE_NAME_STATE"](I){if(x9(I))return;if(I===g1.SOLIDUS||I===g1.GREATER_THAN_SIGN||I===g1.EOF)this._reconsumeInState("AFTER_ATTRIBUTE_NAME_STATE");else if(I===g1.EQUALS_SIGN)this._err(_0.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state="ATTRIBUTE_NAME_STATE";else this._createAttr(""),this._reconsumeInState("ATTRIBUTE_NAME_STATE")}["ATTRIBUTE_NAME_STATE"](I){if(x9(I)||I===g1.SOLIDUS||I===g1.GREATER_THAN_SIGN||I===g1.EOF)this._leaveAttrName("AFTER_ATTRIBUTE_NAME_STATE"),this._unconsume();else if(I===g1.EQUALS_SIGN)this._leaveAttrName("BEFORE_ATTRIBUTE_VALUE_STATE");else if(DW(I))this.currentAttr.name+=ZH(I);else if(I===g1.QUOTATION_MARK||I===g1.APOSTROPHE||I===g1.LESS_THAN_SIGN)this._err(_0.unexpectedCharacterInAttributeName),this.currentAttr.name+=p3(I);else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentAttr.name+=D9.REPLACEMENT_CHARACTER;else this.currentAttr.name+=p3(I)}["AFTER_ATTRIBUTE_NAME_STATE"](I){if(x9(I))return;if(I===g1.SOLIDUS)this.state="SELF_CLOSING_START_TAG_STATE";else if(I===g1.EQUALS_SIGN)this.state="BEFORE_ATTRIBUTE_VALUE_STATE";else if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInTag),this._emitEOFToken();else this._createAttr(""),this._reconsumeInState("ATTRIBUTE_NAME_STATE")}["BEFORE_ATTRIBUTE_VALUE_STATE"](I){if(x9(I))return;if(I===g1.QUOTATION_MARK)this.state="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this.state="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.missingAttributeValue),this.state="DATA_STATE",this._emitCurrentToken();else this._reconsumeInState("ATTRIBUTE_VALUE_UNQUOTED_STATE")}["ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE"](I){if(I===g1.QUOTATION_MARK)this.state="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE";else if(I===g1.AMPERSAND)this.returnState="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",this.state="CHARACTER_REFERENCE_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentAttr.value+=D9.REPLACEMENT_CHARACTER;else if(I===g1.EOF)this._err(_0.eofInTag),this._emitEOFToken();else this.currentAttr.value+=p3(I)}["ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE"](I){if(I===g1.APOSTROPHE)this.state="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE";else if(I===g1.AMPERSAND)this.returnState="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",this.state="CHARACTER_REFERENCE_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentAttr.value+=D9.REPLACEMENT_CHARACTER;else if(I===g1.EOF)this._err(_0.eofInTag),this._emitEOFToken();else this.currentAttr.value+=p3(I)}["ATTRIBUTE_VALUE_UNQUOTED_STATE"](I){if(x9(I))this._leaveAttrValue("BEFORE_ATTRIBUTE_NAME_STATE");else if(I===g1.AMPERSAND)this.returnState="ATTRIBUTE_VALUE_UNQUOTED_STATE",this.state="CHARACTER_REFERENCE_STATE";else if(I===g1.GREATER_THAN_SIGN)this._leaveAttrValue("DATA_STATE"),this._emitCurrentToken();else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentAttr.value+=D9.REPLACEMENT_CHARACTER;else if(I===g1.QUOTATION_MARK||I===g1.APOSTROPHE||I===g1.LESS_THAN_SIGN||I===g1.EQUALS_SIGN||I===g1.GRAVE_ACCENT)this._err(_0.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=p3(I);else if(I===g1.EOF)this._err(_0.eofInTag),this._emitEOFToken();else this.currentAttr.value+=p3(I)}["AFTER_ATTRIBUTE_VALUE_QUOTED_STATE"](I){if(x9(I))this._leaveAttrValue("BEFORE_ATTRIBUTE_NAME_STATE");else if(I===g1.SOLIDUS)this._leaveAttrValue("SELF_CLOSING_START_TAG_STATE");else if(I===g1.GREATER_THAN_SIGN)this._leaveAttrValue("DATA_STATE"),this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInTag),this._emitEOFToken();else this._err(_0.missingWhitespaceBetweenAttributes),this._reconsumeInState("BEFORE_ATTRIBUTE_NAME_STATE")}["SELF_CLOSING_START_TAG_STATE"](I){if(I===g1.GREATER_THAN_SIGN)this.currentToken.selfClosing=!0,this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInTag),this._emitEOFToken();else this._err(_0.unexpectedSolidusInTag),this._reconsumeInState("BEFORE_ATTRIBUTE_NAME_STATE")}["BOGUS_COMMENT_STATE"](I){if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._emitCurrentToken(),this._emitEOFToken();else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.data+=D9.REPLACEMENT_CHARACTER;else this.currentToken.data+=p3(I)}["MARKUP_DECLARATION_OPEN_STATE"](I){if(this._consumeSequenceIfMatch(cJ.DASH_DASH_STRING,I,!0))this._createCommentToken(),this.state="COMMENT_START_STATE";else if(this._consumeSequenceIfMatch(cJ.DOCTYPE_STRING,I,!1))this.state="DOCTYPE_STATE";else if(this._consumeSequenceIfMatch(cJ.CDATA_START_STRING,I,!0))if(this.allowCDATA)this.state="CDATA_SECTION_STATE";else this._err(_0.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state="BOGUS_COMMENT_STATE";else if(!this._ensureHibernation())this._err(_0.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState("BOGUS_COMMENT_STATE")}["COMMENT_START_STATE"](I){if(I===g1.HYPHEN_MINUS)this.state="COMMENT_START_DASH_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.abruptClosingOfEmptyComment),this.state="DATA_STATE",this._emitCurrentToken();else this._reconsumeInState("COMMENT_STATE")}["COMMENT_START_DASH_STATE"](I){if(I===g1.HYPHEN_MINUS)this.state="COMMENT_END_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.abruptClosingOfEmptyComment),this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInComment),this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.data+="-",this._reconsumeInState("COMMENT_STATE")}["COMMENT_STATE"](I){if(I===g1.HYPHEN_MINUS)this.state="COMMENT_END_DASH_STATE";else if(I===g1.LESS_THAN_SIGN)this.currentToken.data+="<",this.state="COMMENT_LESS_THAN_SIGN_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.data+=D9.REPLACEMENT_CHARACTER;else if(I===g1.EOF)this._err(_0.eofInComment),this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.data+=p3(I)}["COMMENT_LESS_THAN_SIGN_STATE"](I){if(I===g1.EXCLAMATION_MARK)this.currentToken.data+="!",this.state="COMMENT_LESS_THAN_SIGN_BANG_STATE";else if(I===g1.LESS_THAN_SIGN)this.currentToken.data+="!";else this._reconsumeInState("COMMENT_STATE")}["COMMENT_LESS_THAN_SIGN_BANG_STATE"](I){if(I===g1.HYPHEN_MINUS)this.state="COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE";else this._reconsumeInState("COMMENT_STATE")}["COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE"](I){if(I===g1.HYPHEN_MINUS)this.state="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE";else this._reconsumeInState("COMMENT_END_DASH_STATE")}["COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE"](I){if(I!==g1.GREATER_THAN_SIGN&&I!==g1.EOF)this._err(_0.nestedComment);this._reconsumeInState("COMMENT_END_STATE")}["COMMENT_END_DASH_STATE"](I){if(I===g1.HYPHEN_MINUS)this.state="COMMENT_END_STATE";else if(I===g1.EOF)this._err(_0.eofInComment),this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.data+="-",this._reconsumeInState("COMMENT_STATE")}["COMMENT_END_STATE"](I){if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EXCLAMATION_MARK)this.state="COMMENT_END_BANG_STATE";else if(I===g1.HYPHEN_MINUS)this.currentToken.data+="-";else if(I===g1.EOF)this._err(_0.eofInComment),this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.data+="--",this._reconsumeInState("COMMENT_STATE")}["COMMENT_END_BANG_STATE"](I){if(I===g1.HYPHEN_MINUS)this.currentToken.data+="--!",this.state="COMMENT_END_DASH_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.incorrectlyClosedComment),this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInComment),this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.data+="--!",this._reconsumeInState("COMMENT_STATE")}["DOCTYPE_STATE"](I){if(x9(I))this.state="BEFORE_DOCTYPE_NAME_STATE";else if(I===g1.GREATER_THAN_SIGN)this._reconsumeInState("BEFORE_DOCTYPE_NAME_STATE");else if(I===g1.EOF)this._err(_0.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingWhitespaceBeforeDoctypeName),this._reconsumeInState("BEFORE_DOCTYPE_NAME_STATE")}["BEFORE_DOCTYPE_NAME_STATE"](I){if(x9(I))return;if(DW(I))this._createDoctypeToken(ZH(I)),this.state="DOCTYPE_NAME_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this._createDoctypeToken(D9.REPLACEMENT_CHARACTER),this.state="DOCTYPE_NAME_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.missingDoctypeName),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._createDoctypeToken(p3(I)),this.state="DOCTYPE_NAME_STATE"}["DOCTYPE_NAME_STATE"](I){if(x9(I))this.state="AFTER_DOCTYPE_NAME_STATE";else if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE",this._emitCurrentToken();else if(DW(I))this.currentToken.name+=ZH(I);else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.name+=D9.REPLACEMENT_CHARACTER;else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.name+=p3(I)}["AFTER_DOCTYPE_NAME_STATE"](I){if(x9(I))return;if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else if(this._consumeSequenceIfMatch(cJ.PUBLIC_STRING,I,!1))this.state="AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE";else if(this._consumeSequenceIfMatch(cJ.SYSTEM_STRING,I,!1))this.state="AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE";else if(!this._ensureHibernation())this._err(_0.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE"](I){if(x9(I))this.state="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE";else if(I===g1.QUOTATION_MARK)this._err(_0.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this._err(_0.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE"](I){if(x9(I))return;if(I===g1.QUOTATION_MARK)this.currentToken.publicId="",this.state="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this.currentToken.publicId="",this.state="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE"](I){if(I===g1.QUOTATION_MARK)this.state="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.publicId+=D9.REPLACEMENT_CHARACTER;else if(I===g1.GREATER_THAN_SIGN)this._err(_0.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.publicId+=p3(I)}["DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE"](I){if(I===g1.APOSTROPHE)this.state="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.publicId+=D9.REPLACEMENT_CHARACTER;else if(I===g1.GREATER_THAN_SIGN)this._err(_0.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.publicId+=p3(I)}["AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE"](I){if(x9(I))this.state="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE";else if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.QUOTATION_MARK)this._err(_0.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this._err(_0.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE"](I){if(x9(I))return;if(I===g1.GREATER_THAN_SIGN)this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.QUOTATION_MARK)this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE"](I){if(x9(I))this.state="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE";else if(I===g1.QUOTATION_MARK)this._err(_0.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this._err(_0.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE"](I){if(x9(I))return;if(I===g1.QUOTATION_MARK)this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE";else if(I===g1.APOSTROPHE)this.currentToken.systemId="",this.state="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE";else if(I===g1.GREATER_THAN_SIGN)this._err(_0.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state="DATA_STATE",this._emitCurrentToken();else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE"](I){if(I===g1.QUOTATION_MARK)this.state="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.systemId+=D9.REPLACEMENT_CHARACTER;else if(I===g1.GREATER_THAN_SIGN)this._err(_0.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.systemId+=p3(I)}["DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE"](I){if(I===g1.APOSTROPHE)this.state="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter),this.currentToken.systemId+=D9.REPLACEMENT_CHARACTER;else if(I===g1.GREATER_THAN_SIGN)this._err(_0.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this.currentToken.systemId+=p3(I)}["AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE"](I){if(x9(I))return;if(I===g1.GREATER_THAN_SIGN)this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.EOF)this._err(_0.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken();else this._err(_0.unexpectedCharacterAfterDoctypeSystemIdentifier),this._reconsumeInState("BOGUS_DOCTYPE_STATE")}["BOGUS_DOCTYPE_STATE"](I){if(I===g1.GREATER_THAN_SIGN)this._emitCurrentToken(),this.state="DATA_STATE";else if(I===g1.NULL)this._err(_0.unexpectedNullCharacter);else if(I===g1.EOF)this._emitCurrentToken(),this._emitEOFToken()}["CDATA_SECTION_STATE"](I){if(I===g1.RIGHT_SQUARE_BRACKET)this.state="CDATA_SECTION_BRACKET_STATE";else if(I===g1.EOF)this._err(_0.eofInCdata),this._emitEOFToken();else this._emitCodePoint(I)}["CDATA_SECTION_BRACKET_STATE"](I){if(I===g1.RIGHT_SQUARE_BRACKET)this.state="CDATA_SECTION_END_STATE";else this._emitChars("]"),this._reconsumeInState("CDATA_SECTION_STATE")}["CDATA_SECTION_END_STATE"](I){if(I===g1.GREATER_THAN_SIGN)this.state="DATA_STATE";else if(I===g1.RIGHT_SQUARE_BRACKET)this._emitChars("]");else this._emitChars("]]"),this._reconsumeInState("CDATA_SECTION_STATE")}["CHARACTER_REFERENCE_STATE"](I){if(this.tempBuff=[g1.AMPERSAND],I===g1.NUMBER_SIGN)this.tempBuff.push(I),this.state="NUMERIC_CHARACTER_REFERENCE_STATE";else if(Cg1(I))this._reconsumeInState("NAMED_CHARACTER_REFERENCE_STATE");else this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}["NAMED_CHARACTER_REFERENCE_STATE"](I){let d=this._matchNamedCharacterReference(I);if(this._ensureHibernation())this.tempBuff=[g1.AMPERSAND];else if(d){let G=this.tempBuff[this.tempBuff.length-1]===g1.SEMICOLON;if(!this._isCharacterReferenceAttributeQuirk(G)){if(!G)this._errOnNextCodePoint(_0.missingSemicolonAfterCharacterReference);this.tempBuff=d}this._flushCodePointsConsumedAsCharacterReference(),this.state=this.returnState}else this._flushCodePointsConsumedAsCharacterReference(),this.state="AMBIGUOS_AMPERSAND_STATE"}["AMBIGUOS_AMPERSAND_STATE"](I){if(Cg1(I))if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=p3(I);else this._emitCodePoint(I);else{if(I===g1.SEMICOLON)this._err(_0.unknownNamedCharacterReference);this._reconsumeInState(this.returnState)}}["NUMERIC_CHARACTER_REFERENCE_STATE"](I){if(this.charRefCode=0,I===g1.LATIN_SMALL_X||I===g1.LATIN_CAPITAL_X)this.tempBuff.push(I),this.state="HEXADEMICAL_CHARACTER_REFERENCE_START_STATE";else this._reconsumeInState("DECIMAL_CHARACTER_REFERENCE_START_STATE")}["HEXADEMICAL_CHARACTER_REFERENCE_START_STATE"](I){if(z59(I))this._reconsumeInState("HEXADEMICAL_CHARACTER_REFERENCE_STATE");else this._err(_0.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}["DECIMAL_CHARACTER_REFERENCE_START_STATE"](I){if(v$(I))this._reconsumeInState("DECIMAL_CHARACTER_REFERENCE_STATE");else this._err(_0.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}["HEXADEMICAL_CHARACTER_REFERENCE_STATE"](I){if(CH2(I))this.charRefCode=this.charRefCode*16+I-55;else if(WH2(I))this.charRefCode=this.charRefCode*16+I-87;else if(v$(I))this.charRefCode=this.charRefCode*16+I-48;else if(I===g1.SEMICOLON)this.state="NUMERIC_CHARACTER_REFERENCE_END_STATE";else this._err(_0.missingSemicolonAfterCharacterReference),this._reconsumeInState("NUMERIC_CHARACTER_REFERENCE_END_STATE")}["DECIMAL_CHARACTER_REFERENCE_STATE"](I){if(v$(I))this.charRefCode=this.charRefCode*10+I-48;else if(I===g1.SEMICOLON)this.state="NUMERIC_CHARACTER_REFERENCE_END_STATE";else this._err(_0.missingSemicolonAfterCharacterReference),this._reconsumeInState("NUMERIC_CHARACTER_REFERENCE_END_STATE")}["NUMERIC_CHARACTER_REFERENCE_END_STATE"](){if(this.charRefCode===g1.NULL)this._err(_0.nullCharacterReference),this.charRefCode=g1.REPLACEMENT_CHARACTER;else if(this.charRefCode>1114111)this._err(_0.characterReferenceOutsideUnicodeRange),this.charRefCode=g1.REPLACEMENT_CHARACTER;else if(D9.isSurrogate(this.charRefCode))this._err(_0.surrogateCharacterReference),this.charRefCode=g1.REPLACEMENT_CHARACTER;else if(D9.isUndefinedCodePoint(this.charRefCode))this._err(_0.noncharacterCharacterReference);else if(D9.isControlCodePoint(this.charRefCode)||this.charRefCode===g1.CARRIAGE_RETURN){this._err(_0.controlCharacterReference);let I=N59[this.charRefCode];if(I)this.charRefCode=I}this.tempBuff=[this.charRefCode],this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}}$9.CHARACTER_TOKEN="CHARACTER_TOKEN";$9.NULL_CHARACTER_TOKEN="NULL_CHARACTER_TOKEN";$9.WHITESPACE_CHARACTER_TOKEN="WHITESPACE_CHARACTER_TOKEN";$9.START_TAG_TOKEN="START_TAG_TOKEN";$9.END_TAG_TOKEN="END_TAG_TOKEN";$9.COMMENT_TOKEN="COMMENT_TOKEN";$9.DOCTYPE_TOKEN="DOCTYPE_TOKEN";$9.EOF_TOKEN="EOF_TOKEN";$9.HIBERNATION_TOKEN="HIBERNATION_TOKEN";$9.MODE={DATA:"DATA_STATE",RCDATA:"RCDATA_STATE",RAWTEXT:"RAWTEXT_STATE",SCRIPT_DATA:"SCRIPT_DATA_STATE",PLAINTEXT:"PLAINTEXT_STATE"};$9.getTokenAttr=function(I,d){for(let G=I.attrs.length-1;G>=0;G--)if(I.attrs[G].name===d)return I.attrs[G].value;return null};wH2.exports=$9});var WH=Y((Q59)=>{var Wg1=Q59.NAMESPACES={HTML:"http://www.w3.org/1999/xhtml",MATHML:"http://www.w3.org/1998/Math/MathML",SVG:"http://www.w3.org/2000/svg",XLINK:"http://www.w3.org/1999/xlink",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"};Q59.ATTRS={TYPE:"type",ACTION:"action",ENCODING:"encoding",PROMPT:"prompt",NAME:"name",COLOR:"color",FACE:"face",SIZE:"size"};Q59.DOCUMENT_MODE={NO_QUIRKS:"no-quirks",QUIRKS:"quirks",LIMITED_QUIRKS:"limited-quirks"};var l0=Q59.TAG_NAMES={A:"a",ADDRESS:"address",ANNOTATION_XML:"annotation-xml",APPLET:"applet",AREA:"area",ARTICLE:"article",ASIDE:"aside",B:"b",BASE:"base",BASEFONT:"basefont",BGSOUND:"bgsound",BIG:"big",BLOCKQUOTE:"blockquote",BODY:"body",BR:"br",BUTTON:"button",CAPTION:"caption",CENTER:"center",CODE:"code",COL:"col",COLGROUP:"colgroup",DD:"dd",DESC:"desc",DETAILS:"details",DIALOG:"dialog",DIR:"dir",DIV:"div",DL:"dl",DT:"dt",EM:"em",EMBED:"embed",FIELDSET:"fieldset",FIGCAPTION:"figcaption",FIGURE:"figure",FONT:"font",FOOTER:"footer",FOREIGN_OBJECT:"foreignObject",FORM:"form",FRAME:"frame",FRAMESET:"frameset",H1:"h1",H2:"h2",H3:"h3",H4:"h4",H5:"h5",H6:"h6",HEAD:"head",HEADER:"header",HGROUP:"hgroup",HR:"hr",HTML:"html",I:"i",IMG:"img",IMAGE:"image",INPUT:"input",IFRAME:"iframe",KEYGEN:"keygen",LABEL:"label",LI:"li",LINK:"link",LISTING:"listing",MAIN:"main",MALIGNMARK:"malignmark",MARQUEE:"marquee",MATH:"math",MENU:"menu",META:"meta",MGLYPH:"mglyph",MI:"mi",MO:"mo",MN:"mn",MS:"ms",MTEXT:"mtext",NAV:"nav",NOBR:"nobr",NOFRAMES:"noframes",NOEMBED:"noembed",NOSCRIPT:"noscript",OBJECT:"object",OL:"ol",OPTGROUP:"optgroup",OPTION:"option",P:"p",PARAM:"param",PLAINTEXT:"plaintext",PRE:"pre",RB:"rb",RP:"rp",RT:"rt",RTC:"rtc",RUBY:"ruby",S:"s",SCRIPT:"script",SECTION:"section",SELECT:"select",SOURCE:"source",SMALL:"small",SPAN:"span",STRIKE:"strike",STRONG:"strong",STYLE:"style",SUB:"sub",SUMMARY:"summary",SUP:"sup",TABLE:"table",TBODY:"tbody",TEMPLATE:"template",TEXTAREA:"textarea",TFOOT:"tfoot",TD:"td",TH:"th",THEAD:"thead",TITLE:"title",TR:"tr",TRACK:"track",TT:"tt",U:"u",UL:"ul",SVG:"svg",VAR:"var",WBR:"wbr",XMP:"xmp"};Q59.SPECIAL_ELEMENTS={[Wg1.HTML]:{[l0.ADDRESS]:!0,[l0.APPLET]:!0,[l0.AREA]:!0,[l0.ARTICLE]:!0,[l0.ASIDE]:!0,[l0.BASE]:!0,[l0.BASEFONT]:!0,[l0.BGSOUND]:!0,[l0.BLOCKQUOTE]:!0,[l0.BODY]:!0,[l0.BR]:!0,[l0.BUTTON]:!0,[l0.CAPTION]:!0,[l0.CENTER]:!0,[l0.COL]:!0,[l0.COLGROUP]:!0,[l0.DD]:!0,[l0.DETAILS]:!0,[l0.DIR]:!0,[l0.DIV]:!0,[l0.DL]:!0,[l0.DT]:!0,[l0.EMBED]:!0,[l0.FIELDSET]:!0,[l0.FIGCAPTION]:!0,[l0.FIGURE]:!0,[l0.FOOTER]:!0,[l0.FORM]:!0,[l0.FRAME]:!0,[l0.FRAMESET]:!0,[l0.H1]:!0,[l0.H2]:!0,[l0.H3]:!0,[l0.H4]:!0,[l0.H5]:!0,[l0.H6]:!0,[l0.HEAD]:!0,[l0.HEADER]:!0,[l0.HGROUP]:!0,[l0.HR]:!0,[l0.HTML]:!0,[l0.IFRAME]:!0,[l0.IMG]:!0,[l0.INPUT]:!0,[l0.LI]:!0,[l0.LINK]:!0,[l0.LISTING]:!0,[l0.MAIN]:!0,[l0.MARQUEE]:!0,[l0.MENU]:!0,[l0.META]:!0,[l0.NAV]:!0,[l0.NOEMBED]:!0,[l0.NOFRAMES]:!0,[l0.NOSCRIPT]:!0,[l0.OBJECT]:!0,[l0.OL]:!0,[l0.P]:!0,[l0.PARAM]:!0,[l0.PLAINTEXT]:!0,[l0.PRE]:!0,[l0.SCRIPT]:!0,[l0.SECTION]:!0,[l0.SELECT]:!0,[l0.SOURCE]:!0,[l0.STYLE]:!0,[l0.SUMMARY]:!0,[l0.TABLE]:!0,[l0.TBODY]:!0,[l0.TD]:!0,[l0.TEMPLATE]:!0,[l0.TEXTAREA]:!0,[l0.TFOOT]:!0,[l0.TH]:!0,[l0.THEAD]:!0,[l0.TITLE]:!0,[l0.TR]:!0,[l0.TRACK]:!0,[l0.UL]:!0,[l0.WBR]:!0,[l0.XMP]:!0},[Wg1.MATHML]:{[l0.MI]:!0,[l0.MO]:!0,[l0.MN]:!0,[l0.MS]:!0,[l0.MTEXT]:!0,[l0.ANNOTATION_XML]:!0},[Wg1.SVG]:{[l0.TITLE]:!0,[l0.FOREIGN_OBJECT]:!0,[l0.DESC]:!0}}});var YH2=Y((XJ3,XH2)=>{var AH2=WH(),j0=AH2.TAG_NAMES,H9=AH2.NAMESPACES;function BH2(I){switch(I.length){case 1:return I===j0.P;case 2:return I===j0.RB||I===j0.RP||I===j0.RT||I===j0.DD||I===j0.DT||I===j0.LI;case 3:return I===j0.RTC;case 6:return I===j0.OPTION;case 8:return I===j0.OPTGROUP}return!1}function U59(I){switch(I.length){case 1:return I===j0.P;case 2:return I===j0.RB||I===j0.RP||I===j0.RT||I===j0.DD||I===j0.DT||I===j0.LI||I===j0.TD||I===j0.TH||I===j0.TR;case 3:return I===j0.RTC;case 5:return I===j0.TBODY||I===j0.TFOOT||I===j0.THEAD;case 6:return I===j0.OPTION;case 7:return I===j0.CAPTION;case 8:return I===j0.OPTGROUP||I===j0.COLGROUP}return!1}function ja(I,d){switch(I.length){case 2:if(I===j0.TD||I===j0.TH)return d===H9.HTML;else if(I===j0.MI||I===j0.MO||I===j0.MN||I===j0.MS)return d===H9.MATHML;break;case 4:if(I===j0.HTML)return d===H9.HTML;else if(I===j0.DESC)return d===H9.SVG;break;case 5:if(I===j0.TABLE)return d===H9.HTML;else if(I===j0.MTEXT)return d===H9.MATHML;else if(I===j0.TITLE)return d===H9.SVG;break;case 6:return(I===j0.APPLET||I===j0.OBJECT)&&d===H9.HTML;case 7:return(I===j0.CAPTION||I===j0.MARQUEE)&&d===H9.HTML;case 8:return I===j0.TEMPLATE&&d===H9.HTML;case 13:return I===j0.FOREIGN_OBJECT&&d===H9.SVG;case 14:return I===j0.ANNOTATION_XML&&d===H9.MATHML}return!1}class VH2{constructor(I,d){this.stackTop=-1,this.items=[],this.current=I,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=d}_indexOf(I){let d=-1;for(let G=this.stackTop;G>=0;G--)if(this.items[G]===I){d=G;break}return d}_isInTemplate(){return this.currentTagName===j0.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===H9.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null}push(I){if(this.items[++this.stackTop]=I,this._updateCurrentElement(),this._isInTemplate())this.tmplCount++}pop(){if(this.stackTop--,this.tmplCount>0&&this._isInTemplate())this.tmplCount--;this._updateCurrentElement()}replace(I,d){let G=this._indexOf(I);if(this.items[G]=d,G===this.stackTop)this._updateCurrentElement()}insertAfter(I,d){let G=this._indexOf(I)+1;if(this.items.splice(G,0,d),G===++this.stackTop)this._updateCurrentElement()}popUntilTagNamePopped(I){while(this.stackTop>-1){let d=this.currentTagName,G=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),d===I&&G===H9.HTML)break}}popUntilElementPopped(I){while(this.stackTop>-1){let d=this.current;if(this.pop(),d===I)break}}popUntilNumberedHeaderPopped(){while(this.stackTop>-1){let I=this.currentTagName,d=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),I===j0.H1||I===j0.H2||I===j0.H3||I===j0.H4||I===j0.H5||I===j0.H6&&d===H9.HTML)break}}popUntilTableCellPopped(){while(this.stackTop>-1){let I=this.currentTagName,d=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),I===j0.TD||I===j0.TH&&d===H9.HTML)break}}popAllUpToHtmlElement(){this.stackTop=0,this._updateCurrentElement()}clearBackToTableContext(){while(this.currentTagName!==j0.TABLE&&this.currentTagName!==j0.TEMPLATE&&this.currentTagName!==j0.HTML||this.treeAdapter.getNamespaceURI(this.current)!==H9.HTML)this.pop()}clearBackToTableBodyContext(){while(this.currentTagName!==j0.TBODY&&this.currentTagName!==j0.TFOOT&&this.currentTagName!==j0.THEAD&&this.currentTagName!==j0.TEMPLATE&&this.currentTagName!==j0.HTML||this.treeAdapter.getNamespaceURI(this.current)!==H9.HTML)this.pop()}clearBackToTableRowContext(){while(this.currentTagName!==j0.TR&&this.currentTagName!==j0.TEMPLATE&&this.currentTagName!==j0.HTML||this.treeAdapter.getNamespaceURI(this.current)!==H9.HTML)this.pop()}remove(I){for(let d=this.stackTop;d>=0;d--)if(this.items[d]===I){this.items.splice(d,1),this.stackTop--,this._updateCurrentElement();break}}tryPeekProperlyNestedBodyElement(){let I=this.items[1];return I&&this.treeAdapter.getTagName(I)===j0.BODY?I:null}contains(I){return this._indexOf(I)>-1}getCommonAncestor(I){let d=this._indexOf(I);return--d>=0?this.items[d]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.currentTagName===j0.HTML}hasInScope(I){for(let d=this.stackTop;d>=0;d--){let G=this.treeAdapter.getTagName(this.items[d]),Z=this.treeAdapter.getNamespaceURI(this.items[d]);if(G===I&&Z===H9.HTML)return!0;if(ja(G,Z))return!1}return!0}hasNumberedHeaderInScope(){for(let I=this.stackTop;I>=0;I--){let d=this.treeAdapter.getTagName(this.items[I]),G=this.treeAdapter.getNamespaceURI(this.items[I]);if((d===j0.H1||d===j0.H2||d===j0.H3||d===j0.H4||d===j0.H5||d===j0.H6)&&G===H9.HTML)return!0;if(ja(d,G))return!1}return!0}hasInListItemScope(I){for(let d=this.stackTop;d>=0;d--){let G=this.treeAdapter.getTagName(this.items[d]),Z=this.treeAdapter.getNamespaceURI(this.items[d]);if(G===I&&Z===H9.HTML)return!0;if((G===j0.UL||G===j0.OL)&&Z===H9.HTML||ja(G,Z))return!1}return!0}hasInButtonScope(I){for(let d=this.stackTop;d>=0;d--){let G=this.treeAdapter.getTagName(this.items[d]),Z=this.treeAdapter.getNamespaceURI(this.items[d]);if(G===I&&Z===H9.HTML)return!0;if(G===j0.BUTTON&&Z===H9.HTML||ja(G,Z))return!1}return!0}hasInTableScope(I){for(let d=this.stackTop;d>=0;d--){let G=this.treeAdapter.getTagName(this.items[d]);if(this.treeAdapter.getNamespaceURI(this.items[d])!==H9.HTML)continue;if(G===I)return!0;if(G===j0.TABLE||G===j0.TEMPLATE||G===j0.HTML)return!1}return!0}hasTableBodyContextInTableScope(){for(let I=this.stackTop;I>=0;I--){let d=this.treeAdapter.getTagName(this.items[I]);if(this.treeAdapter.getNamespaceURI(this.items[I])!==H9.HTML)continue;if(d===j0.TBODY||d===j0.THEAD||d===j0.TFOOT)return!0;if(d===j0.TABLE||d===j0.HTML)return!1}return!0}hasInSelectScope(I){for(let d=this.stackTop;d>=0;d--){let G=this.treeAdapter.getTagName(this.items[d]);if(this.treeAdapter.getNamespaceURI(this.items[d])!==H9.HTML)continue;if(G===I)return!0;if(G!==j0.OPTION&&G!==j0.OPTGROUP)return!1}return!0}generateImpliedEndTags(){while(BH2(this.currentTagName))this.pop()}generateImpliedEndTagsThoroughly(){while(U59(this.currentTagName))this.pop()}generateImpliedEndTagsWithExclusion(I){while(BH2(this.currentTagName)&&this.currentTagName!==I)this.pop()}}XH2.exports=VH2});var DH2=Y((YJ3,_H2)=>{class HW{constructor(I){this.length=0,this.entries=[],this.treeAdapter=I,this.bookmark=null}_getNoahArkConditionCandidates(I){let d=[];if(this.length>=3){let G=this.treeAdapter.getAttrList(I).length,Z=this.treeAdapter.getTagName(I),C=this.treeAdapter.getNamespaceURI(I);for(let W=this.length-1;W>=0;W--){let w=this.entries[W];if(w.type===HW.MARKER_ENTRY)break;let B=w.element,A=this.treeAdapter.getAttrList(B);if(this.treeAdapter.getTagName(B)===Z&&this.treeAdapter.getNamespaceURI(B)===C&&A.length===G)d.push({idx:W,attrs:A})}}return d.length<3?[]:d}_ensureNoahArkCondition(I){let d=this._getNoahArkConditionCandidates(I),G=d.length;if(G){let Z=this.treeAdapter.getAttrList(I),C=Z.length,W=Object.create(null);for(let w=0;w=2;w--)this.entries.splice(d[w].idx,1),this.length--}}insertMarker(){this.entries.push({type:HW.MARKER_ENTRY}),this.length++}pushElement(I,d){this._ensureNoahArkCondition(I),this.entries.push({type:HW.ELEMENT_ENTRY,element:I,token:d}),this.length++}insertElementAfterBookmark(I,d){let G=this.length-1;for(;G>=0;G--)if(this.entries[G]===this.bookmark)break;this.entries.splice(G+1,0,{type:HW.ELEMENT_ENTRY,element:I,token:d}),this.length++}removeEntry(I){for(let d=this.length-1;d>=0;d--)if(this.entries[d]===I){this.entries.splice(d,1),this.length--;break}}clearToLastMarker(){while(this.length){let I=this.entries.pop();if(this.length--,I.type===HW.MARKER_ENTRY)break}}getElementEntryInScopeWithTagName(I){for(let d=this.length-1;d>=0;d--){let G=this.entries[d];if(G.type===HW.MARKER_ENTRY)return null;if(this.treeAdapter.getTagName(G.element)===I)return G}return null}getElementEntry(I){for(let d=this.length-1;d>=0;d--){let G=this.entries[d];if(G.type===HW.ELEMENT_ENTRY&&G.element===I)return G}return null}}HW.MARKER_ENTRY="MARKER_ENTRY";HW.ELEMENT_ENTRY="ELEMENT_ENTRY";_H2.exports=HW});var SB=Y((_J3,HH2)=>{class wg1{constructor(I){let d={},G=this._getOverriddenMethods(this,d);for(let Z of Object.keys(G))if(typeof G[Z]==="function")d[Z]=I[Z],I[Z]=G[Z]}_getOverriddenMethods(){throw new Error("Not implemented")}}wg1.install=function(I,d,G){if(!I.__mixins)I.__mixins=[];for(let C=0;C{var v59=SB();class FH2 extends v59{constructor(I){super(I);this.preprocessor=I,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.offset=0,this.col=0,this.line=1}_getOverriddenMethods(I,d){return{advance(){let G=this.pos+1,Z=this.html[G];if(I.isEol)I.isEol=!1,I.line++,I.lineStartPos=G;if(Z===` +`||Z==="\r"&&this.html[G+1]!==` +`)I.isEol=!0;return I.col=G-I.lineStartPos+1,I.offset=I.droppedBufferSize+G,d.advance.call(this)},retreat(){d.retreat.call(this),I.isEol=!1,I.col=this.pos-I.lineStartPos+1},dropParsedChunk(){let G=this.pos;d.dropParsedChunk.call(this);let Z=G-this.pos;I.lineStartPos-=Z,I.droppedBufferSize+=Z,I.offset=I.droppedBufferSize+this.pos}}}}gH2.exports=FH2});var Vg1=Y((HJ3,NH2)=>{var JH2=SB(),Ag1=E$(),E59=Bg1();class KH2 extends JH2{constructor(I){super(I);this.tokenizer=I,this.posTracker=JH2.install(I.preprocessor,E59),this.currentAttrLocation=null,this.ctLoc=null}_getCurrentLocation(){return{startLine:this.posTracker.line,startCol:this.posTracker.col,startOffset:this.posTracker.offset,endLine:-1,endCol:-1,endOffset:-1}}_attachCurrentAttrLocationInfo(){this.currentAttrLocation.endLine=this.posTracker.line,this.currentAttrLocation.endCol=this.posTracker.col,this.currentAttrLocation.endOffset=this.posTracker.offset;let I=this.tokenizer.currentToken,d=this.tokenizer.currentAttr;if(!I.location.attrs)I.location.attrs=Object.create(null);I.location.attrs[d.name]=this.currentAttrLocation}_getOverriddenMethods(I,d){let G={_createStartTagToken(){d._createStartTagToken.call(this),this.currentToken.location=I.ctLoc},_createEndTagToken(){d._createEndTagToken.call(this),this.currentToken.location=I.ctLoc},_createCommentToken(){d._createCommentToken.call(this),this.currentToken.location=I.ctLoc},_createDoctypeToken(Z){d._createDoctypeToken.call(this,Z),this.currentToken.location=I.ctLoc},_createCharacterToken(Z,C){d._createCharacterToken.call(this,Z,C),this.currentCharacterToken.location=I.ctLoc},_createEOFToken(){d._createEOFToken.call(this),this.currentToken.location=I._getCurrentLocation()},_createAttr(Z){d._createAttr.call(this,Z),I.currentAttrLocation=I._getCurrentLocation()},_leaveAttrName(Z){d._leaveAttrName.call(this,Z),I._attachCurrentAttrLocationInfo()},_leaveAttrValue(Z){d._leaveAttrValue.call(this,Z),I._attachCurrentAttrLocationInfo()},_emitCurrentToken(){let Z=this.currentToken.location;if(this.currentCharacterToken)this.currentCharacterToken.location.endLine=Z.startLine,this.currentCharacterToken.location.endCol=Z.startCol,this.currentCharacterToken.location.endOffset=Z.startOffset;if(this.currentToken.type===Ag1.EOF_TOKEN)Z.endLine=Z.startLine,Z.endCol=Z.startCol,Z.endOffset=Z.startOffset;else Z.endLine=I.posTracker.line,Z.endCol=I.posTracker.col+1,Z.endOffset=I.posTracker.offset+1;d._emitCurrentToken.call(this)},_emitCurrentCharacterToken(){let Z=this.currentCharacterToken&&this.currentCharacterToken.location;if(Z&&Z.endOffset===-1)Z.endLine=I.posTracker.line,Z.endCol=I.posTracker.col,Z.endOffset=I.posTracker.offset;d._emitCurrentCharacterToken.call(this)}};return Object.keys(Ag1.MODE).forEach((Z)=>{let C=Ag1.MODE[Z];G[C]=function(W){I.ctLoc=I._getCurrentLocation(),d[C].call(this,W)}}),G}}NH2.exports=KH2});var fH2=Y((FJ3,QH2)=>{var M59=SB();class zH2 extends M59{constructor(I,d){super(I);this.onItemPop=d.onItemPop}_getOverriddenMethods(I,d){return{pop(){I.onItemPop(this.current),d.pop.call(this)},popAllUpToHtmlElement(){for(let G=this.stackTop;G>0;G--)I.onItemPop(this.items[G]);d.popAllUpToHtmlElement.call(this)},remove(G){I.onItemPop(this.current),d.remove.call(this,G)}}}}QH2.exports=zH2});var vH2=Y((gJ3,UH2)=>{var Xg1=SB(),qH2=E$(),S59=Vg1(),L59=fH2(),y59=WH(),Yg1=y59.TAG_NAMES;class RH2 extends Xg1{constructor(I){super(I);this.parser=I,this.treeAdapter=this.parser.treeAdapter,this.posTracker=null,this.lastStartTagToken=null,this.lastFosterParentingLocation=null,this.currentToken=null}_setStartLocation(I){let d=null;if(this.lastStartTagToken)d=Object.assign({},this.lastStartTagToken.location),d.startTag=this.lastStartTagToken.location;this.treeAdapter.setNodeSourceCodeLocation(I,d)}_setEndLocation(I,d){let G=this.treeAdapter.getNodeSourceCodeLocation(I);if(G){if(d.location){let Z=d.location,C=this.treeAdapter.getTagName(I);if(d.type===qH2.END_TAG_TOKEN&&C===d.tagName)G.endTag=Object.assign({},Z),G.endLine=Z.endLine,G.endCol=Z.endCol,G.endOffset=Z.endOffset;else G.endLine=Z.startLine,G.endCol=Z.startCol,G.endOffset=Z.startOffset}}}_getOverriddenMethods(I,d){return{_bootstrap(G,Z){d._bootstrap.call(this,G,Z),I.lastStartTagToken=null,I.lastFosterParentingLocation=null,I.currentToken=null;let C=Xg1.install(this.tokenizer,S59);I.posTracker=C.posTracker,Xg1.install(this.openElements,L59,{onItemPop:function(W){I._setEndLocation(W,I.currentToken)}})},_runParsingLoop(G){d._runParsingLoop.call(this,G);for(let Z=this.openElements.stackTop;Z>=0;Z--)I._setEndLocation(this.openElements.items[Z],I.currentToken)},_processTokenInForeignContent(G){I.currentToken=G,d._processTokenInForeignContent.call(this,G)},_processToken(G){if(I.currentToken=G,d._processToken.call(this,G),G.type===qH2.END_TAG_TOKEN&&(G.tagName===Yg1.HTML||G.tagName===Yg1.BODY&&this.openElements.hasInScope(Yg1.BODY)))for(let C=this.openElements.stackTop;C>=0;C--){let W=this.openElements.items[C];if(this.treeAdapter.getTagName(W)===G.tagName){I._setEndLocation(W,G);break}}},_setDocumentType(G){d._setDocumentType.call(this,G);let Z=this.treeAdapter.getChildNodes(this.document),C=Z.length;for(let W=0;W{var P59=SB();class EH2 extends P59{constructor(I,d){super(I);this.posTracker=null,this.onParseError=d.onParseError}_setErrorLocation(I){I.startLine=I.endLine=this.posTracker.line,I.startCol=I.endCol=this.posTracker.col,I.startOffset=I.endOffset=this.posTracker.offset}_reportError(I){let d={code:I,startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1};this._setErrorLocation(d),this.onParseError(d)}_getOverriddenMethods(I){return{_err(d){I._reportError(d)}}}}MH2.exports=EH2});var yH2=Y((KJ3,LH2)=>{var $59=ka(),u59=Bg1(),T59=SB();class SH2 extends $59{constructor(I,d){super(I,d);this.posTracker=T59.install(I,u59),this.lastErrOffset=-1}_reportError(I){if(this.lastErrOffset!==this.posTracker.offset)this.lastErrOffset=this.posTracker.offset,super._reportError(I)}}LH2.exports=SH2});var uH2=Y((NJ3,$H2)=>{var O59=ka(),m59=yH2(),l59=SB();class PH2 extends O59{constructor(I,d){super(I,d);let G=l59.install(I.preprocessor,m59,d);this.posTracker=G.posTracker}}$H2.exports=PH2});var lH2=Y((zJ3,mH2)=>{var b59=ka(),h59=uH2(),j59=Vg1(),TH2=SB();class OH2 extends b59{constructor(I,d){super(I,d);this.opts=d,this.ctLoc=null,this.locBeforeToken=!1}_setErrorLocation(I){if(this.ctLoc)I.startLine=this.ctLoc.startLine,I.startCol=this.ctLoc.startCol,I.startOffset=this.ctLoc.startOffset,I.endLine=this.locBeforeToken?this.ctLoc.startLine:this.ctLoc.endLine,I.endCol=this.locBeforeToken?this.ctLoc.startCol:this.ctLoc.endCol,I.endOffset=this.locBeforeToken?this.ctLoc.startOffset:this.ctLoc.endOffset}_getOverriddenMethods(I,d){return{_bootstrap(G,Z){d._bootstrap.call(this,G,Z),TH2.install(this.tokenizer,h59,I.opts),TH2.install(this.tokenizer,j59)},_processInputToken(G){I.ctLoc=G.location,d._processInputToken.call(this,G)},_err(G,Z){I.locBeforeToken=Z&&Z.beforeToken,I._reportError(G)}}}}mH2.exports=OH2});var _g1=Y((c59)=>{var{DOCUMENT_MODE:k59}=WH();c59.createDocument=function(){return{nodeName:"#document",mode:k59.NO_QUIRKS,childNodes:[]}};c59.createDocumentFragment=function(){return{nodeName:"#document-fragment",childNodes:[]}};c59.createElement=function(I,d,G){return{nodeName:I,tagName:I,attrs:G,namespaceURI:d,childNodes:[],parentNode:null}};c59.createCommentNode=function(I){return{nodeName:"#comment",data:I,parentNode:null}};var bH2=function(I){return{nodeName:"#text",value:I,parentNode:null}},hH2=c59.appendChild=function(I,d){I.childNodes.push(d),d.parentNode=I},x59=c59.insertBefore=function(I,d,G){let Z=I.childNodes.indexOf(G);I.childNodes.splice(Z,0,d),d.parentNode=I};c59.setTemplateContent=function(I,d){I.content=d};c59.getTemplateContent=function(I){return I.content};c59.setDocumentType=function(I,d,G,Z){let C=null;for(let W=0;W{jH2.exports=function I(d,G){return G=G||Object.create(null),[d,G].reduce((Z,C)=>{return Object.keys(C).forEach((W)=>{Z[W]=C[W]}),Z},Object.create(null))}});var Hg1=Y((R99)=>{var{DOCUMENT_MODE:ER}=WH(),cH2=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Q99=cH2.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]),f99=["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"],pH2=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],q99=pH2.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]);function kH2(I){let d=I.indexOf('"')!==-1?"'":'"';return d+I+d}function xH2(I,d){for(let G=0;G-1)return ER.QUIRKS;let Z=d===null?Q99:cH2;if(xH2(G,Z))return ER.QUIRKS;if(Z=d===null?pH2:q99,xH2(G,Z))return ER.LIMITED_QUIRKS}return ER.NO_QUIRKS};R99.serializeContent=function(I,d,G){let Z="!DOCTYPE ";if(I)Z+=I;if(d)Z+=" PUBLIC "+kH2(d);else if(G)Z+=" SYSTEM";if(G!==null)Z+=" "+kH2(G);return Z}});var nH2=Y((u99)=>{var Fg1=E$(),gg1=WH(),k2=gg1.TAG_NAMES,W7=gg1.NAMESPACES,xa=gg1.ATTRS,iH2={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},M99={attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"},S99={"xlink:actuate":{prefix:"xlink",name:"actuate",namespace:W7.XLINK},"xlink:arcrole":{prefix:"xlink",name:"arcrole",namespace:W7.XLINK},"xlink:href":{prefix:"xlink",name:"href",namespace:W7.XLINK},"xlink:role":{prefix:"xlink",name:"role",namespace:W7.XLINK},"xlink:show":{prefix:"xlink",name:"show",namespace:W7.XLINK},"xlink:title":{prefix:"xlink",name:"title",namespace:W7.XLINK},"xlink:type":{prefix:"xlink",name:"type",namespace:W7.XLINK},"xml:base":{prefix:"xml",name:"base",namespace:W7.XML},"xml:lang":{prefix:"xml",name:"lang",namespace:W7.XML},"xml:space":{prefix:"xml",name:"space",namespace:W7.XML},xmlns:{prefix:"",name:"xmlns",namespace:W7.XMLNS},"xmlns:xlink":{prefix:"xmlns",name:"xlink",namespace:W7.XMLNS}},L99=u99.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},y99={[k2.B]:!0,[k2.BIG]:!0,[k2.BLOCKQUOTE]:!0,[k2.BODY]:!0,[k2.BR]:!0,[k2.CENTER]:!0,[k2.CODE]:!0,[k2.DD]:!0,[k2.DIV]:!0,[k2.DL]:!0,[k2.DT]:!0,[k2.EM]:!0,[k2.EMBED]:!0,[k2.H1]:!0,[k2.H2]:!0,[k2.H3]:!0,[k2.H4]:!0,[k2.H5]:!0,[k2.H6]:!0,[k2.HEAD]:!0,[k2.HR]:!0,[k2.I]:!0,[k2.IMG]:!0,[k2.LI]:!0,[k2.LISTING]:!0,[k2.MENU]:!0,[k2.META]:!0,[k2.NOBR]:!0,[k2.OL]:!0,[k2.P]:!0,[k2.PRE]:!0,[k2.RUBY]:!0,[k2.S]:!0,[k2.SMALL]:!0,[k2.SPAN]:!0,[k2.STRONG]:!0,[k2.STRIKE]:!0,[k2.SUB]:!0,[k2.SUP]:!0,[k2.TABLE]:!0,[k2.TT]:!0,[k2.U]:!0,[k2.UL]:!0,[k2.VAR]:!0};u99.causesExit=function(I){let d=I.tagName;return d===k2.FONT&&(Fg1.getTokenAttr(I,xa.COLOR)!==null||Fg1.getTokenAttr(I,xa.SIZE)!==null||Fg1.getTokenAttr(I,xa.FACE)!==null)?!0:y99[d]};u99.adjustTokenMathMLAttrs=function(I){for(let d=0;d{var z1=E$(),j99=YH2(),rH2=DH2(),k99=vH2(),x99=lH2(),aH2=SB(),c99=_g1(),p99=Dg1(),sH2=Hg1(),LB=nH2(),w7=ba(),i99=la(),rJ=WH(),L=rJ.TAG_NAMES,N2=rJ.NAMESPACES,WF2=rJ.ATTRS,n99={scriptingEnabled:!0,sourceCodeLocationInfo:!1,onParseError:null,treeAdapter:c99},r99={[L.TR]:"IN_ROW_MODE",[L.TBODY]:"IN_TABLE_BODY_MODE",[L.THEAD]:"IN_TABLE_BODY_MODE",[L.TFOOT]:"IN_TABLE_BODY_MODE",[L.CAPTION]:"IN_CAPTION_MODE",[L.COLGROUP]:"IN_COLUMN_GROUP_MODE",[L.TABLE]:"IN_TABLE_MODE",[L.BODY]:"IN_BODY_MODE",[L.FRAMESET]:"IN_FRAMESET_MODE"},a99={[L.CAPTION]:"IN_TABLE_MODE",[L.COLGROUP]:"IN_TABLE_MODE",[L.TBODY]:"IN_TABLE_MODE",[L.TFOOT]:"IN_TABLE_MODE",[L.THEAD]:"IN_TABLE_MODE",[L.COL]:"IN_COLUMN_GROUP_MODE",[L.TR]:"IN_TABLE_BODY_MODE",[L.TD]:"IN_ROW_MODE",[L.TH]:"IN_ROW_MODE"},Jg1={["INITIAL_MODE"]:{[z1.CHARACTER_TOKEN]:S$,[z1.NULL_CHARACTER_TOKEN]:S$,[z1.WHITESPACE_CHARACTER_TOKEN]:d5,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:Z39,[z1.START_TAG_TOKEN]:S$,[z1.END_TAG_TOKEN]:S$,[z1.EOF_TOKEN]:S$},["BEFORE_HTML_MODE"]:{[z1.CHARACTER_TOKEN]:y$,[z1.NULL_CHARACTER_TOKEN]:y$,[z1.WHITESPACE_CHARACTER_TOKEN]:d5,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:C39,[z1.END_TAG_TOKEN]:W39,[z1.EOF_TOKEN]:y$},["BEFORE_HEAD_MODE"]:{[z1.CHARACTER_TOKEN]:P$,[z1.NULL_CHARACTER_TOKEN]:P$,[z1.WHITESPACE_CHARACTER_TOKEN]:d5,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:ca,[z1.START_TAG_TOKEN]:w39,[z1.END_TAG_TOKEN]:B39,[z1.EOF_TOKEN]:P$},["IN_HEAD_MODE"]:{[z1.CHARACTER_TOKEN]:$$,[z1.NULL_CHARACTER_TOKEN]:$$,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:ca,[z1.START_TAG_TOKEN]:Q8,[z1.END_TAG_TOKEN]:aJ,[z1.EOF_TOKEN]:$$},["IN_HEAD_NO_SCRIPT_MODE"]:{[z1.CHARACTER_TOKEN]:u$,[z1.NULL_CHARACTER_TOKEN]:u$,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:ca,[z1.START_TAG_TOKEN]:A39,[z1.END_TAG_TOKEN]:V39,[z1.EOF_TOKEN]:u$},["AFTER_HEAD_MODE"]:{[z1.CHARACTER_TOKEN]:T$,[z1.NULL_CHARACTER_TOKEN]:T$,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:ca,[z1.START_TAG_TOKEN]:X39,[z1.END_TAG_TOKEN]:Y39,[z1.EOF_TOKEN]:T$},["IN_BODY_MODE"]:{[z1.CHARACTER_TOKEN]:pa,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:Dd,[z1.END_TAG_TOKEN]:Kg1,[z1.EOF_TOKEN]:WX},["TEXT_MODE"]:{[z1.CHARACTER_TOKEN]:_d,[z1.NULL_CHARACTER_TOKEN]:_d,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:d5,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:d5,[z1.END_TAG_TOKEN]:k39,[z1.EOF_TOKEN]:x39},["IN_TABLE_MODE"]:{[z1.CHARACTER_TOKEN]:wX,[z1.NULL_CHARACTER_TOKEN]:wX,[z1.WHITESPACE_CHARACTER_TOKEN]:wX,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:Ng1,[z1.END_TAG_TOKEN]:zg1,[z1.EOF_TOKEN]:WX},["IN_TABLE_TEXT_MODE"]:{[z1.CHARACTER_TOKEN]:t39,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:e39,[z1.COMMENT_TOKEN]:L$,[z1.DOCTYPE_TOKEN]:L$,[z1.START_TAG_TOKEN]:L$,[z1.END_TAG_TOKEN]:L$,[z1.EOF_TOKEN]:L$},["IN_CAPTION_MODE"]:{[z1.CHARACTER_TOKEN]:pa,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:I69,[z1.END_TAG_TOKEN]:d69,[z1.EOF_TOKEN]:WX},["IN_COLUMN_GROUP_MODE"]:{[z1.CHARACTER_TOKEN]:na,[z1.NULL_CHARACTER_TOKEN]:na,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:G69,[z1.END_TAG_TOKEN]:Z69,[z1.EOF_TOKEN]:WX},["IN_TABLE_BODY_MODE"]:{[z1.CHARACTER_TOKEN]:wX,[z1.NULL_CHARACTER_TOKEN]:wX,[z1.WHITESPACE_CHARACTER_TOKEN]:wX,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:C69,[z1.END_TAG_TOKEN]:W69,[z1.EOF_TOKEN]:WX},["IN_ROW_MODE"]:{[z1.CHARACTER_TOKEN]:wX,[z1.NULL_CHARACTER_TOKEN]:wX,[z1.WHITESPACE_CHARACTER_TOKEN]:wX,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:w69,[z1.END_TAG_TOKEN]:B69,[z1.EOF_TOKEN]:WX},["IN_CELL_MODE"]:{[z1.CHARACTER_TOKEN]:pa,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:A69,[z1.END_TAG_TOKEN]:V69,[z1.EOF_TOKEN]:WX},["IN_SELECT_MODE"]:{[z1.CHARACTER_TOKEN]:_d,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:BF2,[z1.END_TAG_TOKEN]:AF2,[z1.EOF_TOKEN]:WX},["IN_SELECT_IN_TABLE_MODE"]:{[z1.CHARACTER_TOKEN]:_d,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:X69,[z1.END_TAG_TOKEN]:Y69,[z1.EOF_TOKEN]:WX},["IN_TEMPLATE_MODE"]:{[z1.CHARACTER_TOKEN]:pa,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:_69,[z1.END_TAG_TOKEN]:D69,[z1.EOF_TOKEN]:VF2},["AFTER_BODY_MODE"]:{[z1.CHARACTER_TOKEN]:ra,[z1.NULL_CHARACTER_TOKEN]:ra,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:G39,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:H69,[z1.END_TAG_TOKEN]:F69,[z1.EOF_TOKEN]:M$},["IN_FRAMESET_MODE"]:{[z1.CHARACTER_TOKEN]:d5,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:g69,[z1.END_TAG_TOKEN]:J69,[z1.EOF_TOKEN]:M$},["AFTER_FRAMESET_MODE"]:{[z1.CHARACTER_TOKEN]:d5,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:_d,[z1.COMMENT_TOKEN]:a6,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:K69,[z1.END_TAG_TOKEN]:N69,[z1.EOF_TOKEN]:M$},["AFTER_AFTER_BODY_MODE"]:{[z1.CHARACTER_TOKEN]:ia,[z1.NULL_CHARACTER_TOKEN]:ia,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:oH2,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:z69,[z1.END_TAG_TOKEN]:ia,[z1.EOF_TOKEN]:M$},["AFTER_AFTER_FRAMESET_MODE"]:{[z1.CHARACTER_TOKEN]:d5,[z1.NULL_CHARACTER_TOKEN]:d5,[z1.WHITESPACE_CHARACTER_TOKEN]:nJ,[z1.COMMENT_TOKEN]:oH2,[z1.DOCTYPE_TOKEN]:d5,[z1.START_TAG_TOKEN]:Q69,[z1.END_TAG_TOKEN]:d5,[z1.EOF_TOKEN]:M$}};class wF2{constructor(I){if(this.options=p99(n99,I),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.sourceCodeLocationInfo)aH2.install(this,k99);if(this.options.onParseError)aH2.install(this,x99,{onParseError:this.options.onParseError})}parse(I){let d=this.treeAdapter.createDocument();return this._bootstrap(d,null),this.tokenizer.write(I,!0),this._runParsingLoop(null),d}parseFragment(I,d){if(!d)d=this.treeAdapter.createElement(L.TEMPLATE,N2.HTML,[]);let G=this.treeAdapter.createElement("documentmock",N2.HTML,[]);if(this._bootstrap(G,d),this.treeAdapter.getTagName(d)===L.TEMPLATE)this._pushTmplInsertionMode("IN_TEMPLATE_MODE");this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(I,!0),this._runParsingLoop(null);let Z=this.treeAdapter.getFirstChild(G),C=this.treeAdapter.createDocumentFragment();return this._adoptNodes(Z,C),C}_bootstrap(I,d){this.tokenizer=new z1(this.options),this.stopped=!1,this.insertionMode="INITIAL_MODE",this.originalInsertionMode="",this.document=I,this.fragmentContext=d,this.headElement=null,this.formElement=null,this.openElements=new j99(this.document,this.treeAdapter),this.activeFormattingElements=new rH2(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1}_err(){}_runParsingLoop(I){while(!this.stopped){this._setupTokenizerCDATAMode();let d=this.tokenizer.getNextToken();if(d.type===z1.HIBERNATION_TOKEN)break;if(this.skipNextNewLine){if(this.skipNextNewLine=!1,d.type===z1.WHITESPACE_CHARACTER_TOKEN&&d.chars[0]===` +`){if(d.chars.length===1)continue;d.chars=d.chars.substr(1)}}if(this._processInputToken(d),I&&this.pendingScript)break}}runParsingLoopForCurrentChunk(I,d){if(this._runParsingLoop(d),d&&this.pendingScript){let G=this.pendingScript;this.pendingScript=null,d(G);return}if(I)I()}_setupTokenizerCDATAMode(){let I=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=I&&I!==this.document&&this.treeAdapter.getNamespaceURI(I)!==N2.HTML&&!this._isIntegrationPoint(I)}_switchToTextParsing(I,d){this._insertElement(I,N2.HTML),this.tokenizer.state=d,this.originalInsertionMode=this.insertionMode,this.insertionMode="TEXT_MODE"}switchToPlaintextParsing(){this.insertionMode="TEXT_MODE",this.originalInsertionMode="IN_BODY_MODE",this.tokenizer.state=z1.MODE.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let I=this.fragmentContext;do{if(this.treeAdapter.getTagName(I)===L.FORM){this.formElement=I;break}I=this.treeAdapter.getParentNode(I)}while(I)}_initTokenizerForFragmentParsing(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===N2.HTML){let I=this.treeAdapter.getTagName(this.fragmentContext);if(I===L.TITLE||I===L.TEXTAREA)this.tokenizer.state=z1.MODE.RCDATA;else if(I===L.STYLE||I===L.XMP||I===L.IFRAME||I===L.NOEMBED||I===L.NOFRAMES||I===L.NOSCRIPT)this.tokenizer.state=z1.MODE.RAWTEXT;else if(I===L.SCRIPT)this.tokenizer.state=z1.MODE.SCRIPT_DATA;else if(I===L.PLAINTEXT)this.tokenizer.state=z1.MODE.PLAINTEXT}}_setDocumentType(I){let d=I.name||"",G=I.publicId||"",Z=I.systemId||"";this.treeAdapter.setDocumentType(this.document,d,G,Z)}_attachElementToTree(I){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(I);else{let d=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(d,I)}}_appendElement(I,d){let G=this.treeAdapter.createElement(I.tagName,d,I.attrs);this._attachElementToTree(G)}_insertElement(I,d){let G=this.treeAdapter.createElement(I.tagName,d,I.attrs);this._attachElementToTree(G),this.openElements.push(G)}_insertFakeElement(I){let d=this.treeAdapter.createElement(I,N2.HTML,[]);this._attachElementToTree(d),this.openElements.push(d)}_insertTemplate(I){let d=this.treeAdapter.createElement(I.tagName,N2.HTML,I.attrs),G=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(d,G),this._attachElementToTree(d),this.openElements.push(d)}_insertFakeRootElement(){let I=this.treeAdapter.createElement(L.HTML,N2.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,I),this.openElements.push(I)}_appendCommentNode(I,d){let G=this.treeAdapter.createCommentNode(I.data);this.treeAdapter.appendChild(d,G)}_insertCharacters(I){if(this._shouldFosterParentOnInsertion())this._fosterParentText(I.chars);else{let d=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(d,I.chars)}}_adoptNodes(I,d){for(let G=this.treeAdapter.getFirstChild(I);G;G=this.treeAdapter.getFirstChild(I))this.treeAdapter.detachNode(G),this.treeAdapter.appendChild(d,G)}_shouldProcessTokenInForeignContent(I){let d=this._getAdjustedCurrentElement();if(!d||d===this.document)return!1;let G=this.treeAdapter.getNamespaceURI(d);if(G===N2.HTML)return!1;if(this.treeAdapter.getTagName(d)===L.ANNOTATION_XML&&G===N2.MATHML&&I.type===z1.START_TAG_TOKEN&&I.tagName===L.SVG)return!1;let Z=I.type===z1.CHARACTER_TOKEN||I.type===z1.NULL_CHARACTER_TOKEN||I.type===z1.WHITESPACE_CHARACTER_TOKEN;if((I.type===z1.START_TAG_TOKEN&&I.tagName!==L.MGLYPH&&I.tagName!==L.MALIGNMARK||Z)&&this._isIntegrationPoint(d,N2.MATHML))return!1;if((I.type===z1.START_TAG_TOKEN||Z)&&this._isIntegrationPoint(d,N2.HTML))return!1;return I.type!==z1.EOF_TOKEN}_processToken(I){Jg1[this.insertionMode][I.type](this,I)}_processTokenInBodyMode(I){Jg1.IN_BODY_MODE[I.type](this,I)}_processTokenInForeignContent(I){if(I.type===z1.CHARACTER_TOKEN)q69(this,I);else if(I.type===z1.NULL_CHARACTER_TOKEN)f69(this,I);else if(I.type===z1.WHITESPACE_CHARACTER_TOKEN)_d(this,I);else if(I.type===z1.COMMENT_TOKEN)a6(this,I);else if(I.type===z1.START_TAG_TOKEN)R69(this,I);else if(I.type===z1.END_TAG_TOKEN)U69(this,I)}_processInputToken(I){if(this._shouldProcessTokenInForeignContent(I))this._processTokenInForeignContent(I);else this._processToken(I);if(I.type===z1.START_TAG_TOKEN&&I.selfClosing&&!I.ackSelfClosing)this._err(w7.nonVoidHtmlElementStartTagWithTrailingSolidus)}_isIntegrationPoint(I,d){let G=this.treeAdapter.getTagName(I),Z=this.treeAdapter.getNamespaceURI(I),C=this.treeAdapter.getAttrList(I);return LB.isIntegrationPoint(G,Z,C,d)}_reconstructActiveFormattingElements(){let I=this.activeFormattingElements.length;if(I){let d=I,G=null;do if(d--,G=this.activeFormattingElements.entries[d],G.type===rH2.MARKER_ENTRY||this.openElements.contains(G.element)){d++;break}while(d>0);for(let Z=d;Z=0;I--){let G=this.openElements.items[I];if(I===0){if(d=!0,this.fragmentContext)G=this.fragmentContext}let Z=this.treeAdapter.getTagName(G),C=r99[Z];if(C){this.insertionMode=C;break}else if(!d&&(Z===L.TD||Z===L.TH)){this.insertionMode="IN_CELL_MODE";break}else if(!d&&Z===L.HEAD){this.insertionMode="IN_HEAD_MODE";break}else if(Z===L.SELECT){this._resetInsertionModeForSelect(I);break}else if(Z===L.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}else if(Z===L.HTML){this.insertionMode=this.headElement?"AFTER_HEAD_MODE":"BEFORE_HEAD_MODE";break}else if(d){this.insertionMode="IN_BODY_MODE";break}}}_resetInsertionModeForSelect(I){if(I>0)for(let d=I-1;d>0;d--){let G=this.openElements.items[d],Z=this.treeAdapter.getTagName(G);if(Z===L.TEMPLATE)break;else if(Z===L.TABLE){this.insertionMode="IN_SELECT_IN_TABLE_MODE";return}}this.insertionMode="IN_SELECT_MODE"}_pushTmplInsertionMode(I){this.tmplInsertionModeStack.push(I),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=I}_popTmplInsertionMode(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop]}_isElementCausesFosterParenting(I){let d=this.treeAdapter.getTagName(I);return d===L.TABLE||d===L.TBODY||d===L.TFOOT||d===L.THEAD||d===L.TR}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)}_findFosterParentingLocation(){let I={parent:null,beforeElement:null};for(let d=this.openElements.stackTop;d>=0;d--){let G=this.openElements.items[d],Z=this.treeAdapter.getTagName(G),C=this.treeAdapter.getNamespaceURI(G);if(Z===L.TEMPLATE&&C===N2.HTML){I.parent=this.treeAdapter.getTemplateContent(G);break}else if(Z===L.TABLE){if(I.parent=this.treeAdapter.getParentNode(G),I.parent)I.beforeElement=G;else I.parent=this.openElements.items[d-1];break}}if(!I.parent)I.parent=this.openElements.items[0];return I}_fosterParentElement(I){let d=this._findFosterParentingLocation();if(d.beforeElement)this.treeAdapter.insertBefore(d.parent,I,d.beforeElement);else this.treeAdapter.appendChild(d.parent,I)}_fosterParentText(I){let d=this._findFosterParentingLocation();if(d.beforeElement)this.treeAdapter.insertTextBefore(d.parent,I,d.beforeElement);else this.treeAdapter.insertText(d.parent,I)}_isSpecialElement(I){let d=this.treeAdapter.getTagName(I),G=this.treeAdapter.getNamespaceURI(I);return rJ.SPECIAL_ELEMENTS[G][d]}}XF2.exports=wF2;function s99(I,d){let G=I.activeFormattingElements.getElementEntryInScopeWithTagName(d.tagName);if(G){if(!I.openElements.contains(G.element))I.activeFormattingElements.removeEntry(G),G=null;else if(!I.openElements.hasInScope(d.tagName))G=null}else FW(I,d);return G}function o99(I,d){let G=null;for(let Z=I.openElements.stackTop;Z>=0;Z--){let C=I.openElements.items[Z];if(C===d.element)break;if(I._isSpecialElement(C))G=C}if(!G)I.openElements.popUntilElementPopped(d.element),I.activeFormattingElements.removeEntry(d);return G}function e99(I,d,G){let Z=d,C=I.openElements.getCommonAncestor(d);for(let W=0,w=C;w!==G;W++,w=C){C=I.openElements.getCommonAncestor(w);let B=I.activeFormattingElements.getElementEntry(w),A=B&&W>=3;if(!B||A){if(A)I.activeFormattingElements.removeEntry(B);I.openElements.remove(w)}else{if(w=t99(I,B),Z===d)I.activeFormattingElements.bookmark=B;I.treeAdapter.detachNode(Z),I.treeAdapter.appendChild(w,Z),Z=w}}return Z}function t99(I,d){let G=I.treeAdapter.getNamespaceURI(d.element),Z=I.treeAdapter.createElement(d.token.tagName,G,d.token.attrs);return I.openElements.replace(d.element,Z),d.element=Z,Z}function I39(I,d,G){if(I._isElementCausesFosterParenting(d))I._fosterParentElement(G);else{let Z=I.treeAdapter.getTagName(d),C=I.treeAdapter.getNamespaceURI(d);if(Z===L.TEMPLATE&&C===N2.HTML)d=I.treeAdapter.getTemplateContent(d);I.treeAdapter.appendChild(d,G)}}function d39(I,d,G){let Z=I.treeAdapter.getNamespaceURI(G.element),C=G.token,W=I.treeAdapter.createElement(C.tagName,Z,C.attrs);I._adoptNodes(d,W),I.treeAdapter.appendChild(d,W),I.activeFormattingElements.insertElementAfterBookmark(W,G.token),I.activeFormattingElements.removeEntry(G),I.openElements.remove(G.element),I.openElements.insertAfter(d,W)}function BH(I,d){let G;for(let Z=0;Z<8;Z++){if(G=s99(I,d,G),!G)break;let C=o99(I,G);if(!C)break;I.activeFormattingElements.bookmark=G;let W=e99(I,C,G.element),w=I.openElements.getCommonAncestor(G.element);I.treeAdapter.detachNode(W),I39(I,w,W),d39(I,C,G)}}function d5(){}function ca(I){I._err(w7.misplacedDoctype)}function a6(I,d){I._appendCommentNode(d,I.openElements.currentTmplContent||I.openElements.current)}function G39(I,d){I._appendCommentNode(d,I.openElements.items[0])}function oH2(I,d){I._appendCommentNode(d,I.document)}function _d(I,d){I._insertCharacters(d)}function M$(I){I.stopped=!0}function Z39(I,d){I._setDocumentType(d);let G=d.forceQuirks?rJ.DOCUMENT_MODE.QUIRKS:sH2.getDocumentMode(d);if(!sH2.isConforming(d))I._err(w7.nonConformingDoctype);I.treeAdapter.setDocumentMode(I.document,G),I.insertionMode="BEFORE_HTML_MODE"}function S$(I,d){I._err(w7.missingDoctype,{beforeToken:!0}),I.treeAdapter.setDocumentMode(I.document,rJ.DOCUMENT_MODE.QUIRKS),I.insertionMode="BEFORE_HTML_MODE",I._processToken(d)}function C39(I,d){if(d.tagName===L.HTML)I._insertElement(d,N2.HTML),I.insertionMode="BEFORE_HEAD_MODE";else y$(I,d)}function W39(I,d){let G=d.tagName;if(G===L.HTML||G===L.HEAD||G===L.BODY||G===L.BR)y$(I,d)}function y$(I,d){I._insertFakeRootElement(),I.insertionMode="BEFORE_HEAD_MODE",I._processToken(d)}function w39(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.HEAD)I._insertElement(d,N2.HTML),I.headElement=I.openElements.current,I.insertionMode="IN_HEAD_MODE";else P$(I,d)}function B39(I,d){let G=d.tagName;if(G===L.HEAD||G===L.BODY||G===L.HTML||G===L.BR)P$(I,d);else I._err(w7.endTagWithoutMatchingOpenElement)}function P$(I,d){I._insertFakeElement(L.HEAD),I.headElement=I.openElements.current,I.insertionMode="IN_HEAD_MODE",I._processToken(d)}function Q8(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.BASE||G===L.BASEFONT||G===L.BGSOUND||G===L.LINK||G===L.META)I._appendElement(d,N2.HTML),d.ackSelfClosing=!0;else if(G===L.TITLE)I._switchToTextParsing(d,z1.MODE.RCDATA);else if(G===L.NOSCRIPT)if(I.options.scriptingEnabled)I._switchToTextParsing(d,z1.MODE.RAWTEXT);else I._insertElement(d,N2.HTML),I.insertionMode="IN_HEAD_NO_SCRIPT_MODE";else if(G===L.NOFRAMES||G===L.STYLE)I._switchToTextParsing(d,z1.MODE.RAWTEXT);else if(G===L.SCRIPT)I._switchToTextParsing(d,z1.MODE.SCRIPT_DATA);else if(G===L.TEMPLATE)I._insertTemplate(d,N2.HTML),I.activeFormattingElements.insertMarker(),I.framesetOk=!1,I.insertionMode="IN_TEMPLATE_MODE",I._pushTmplInsertionMode("IN_TEMPLATE_MODE");else if(G===L.HEAD)I._err(w7.misplacedStartTagForHeadElement);else $$(I,d)}function aJ(I,d){let G=d.tagName;if(G===L.HEAD)I.openElements.pop(),I.insertionMode="AFTER_HEAD_MODE";else if(G===L.BODY||G===L.BR||G===L.HTML)$$(I,d);else if(G===L.TEMPLATE)if(I.openElements.tmplCount>0){if(I.openElements.generateImpliedEndTagsThoroughly(),I.openElements.currentTagName!==L.TEMPLATE)I._err(w7.closingOfElementWithOpenChildElements);I.openElements.popUntilTagNamePopped(L.TEMPLATE),I.activeFormattingElements.clearToLastMarker(),I._popTmplInsertionMode(),I._resetInsertionMode()}else I._err(w7.endTagWithoutMatchingOpenElement);else I._err(w7.endTagWithoutMatchingOpenElement)}function $$(I,d){I.openElements.pop(),I.insertionMode="AFTER_HEAD_MODE",I._processToken(d)}function A39(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.BASEFONT||G===L.BGSOUND||G===L.HEAD||G===L.LINK||G===L.META||G===L.NOFRAMES||G===L.STYLE)Q8(I,d);else if(G===L.NOSCRIPT)I._err(w7.nestedNoscriptInHead);else u$(I,d)}function V39(I,d){let G=d.tagName;if(G===L.NOSCRIPT)I.openElements.pop(),I.insertionMode="IN_HEAD_MODE";else if(G===L.BR)u$(I,d);else I._err(w7.endTagWithoutMatchingOpenElement)}function u$(I,d){let G=d.type===z1.EOF_TOKEN?w7.openElementsLeftAfterEof:w7.disallowedContentInNoscriptInHead;I._err(G),I.openElements.pop(),I.insertionMode="IN_HEAD_MODE",I._processToken(d)}function X39(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.BODY)I._insertElement(d,N2.HTML),I.framesetOk=!1,I.insertionMode="IN_BODY_MODE";else if(G===L.FRAMESET)I._insertElement(d,N2.HTML),I.insertionMode="IN_FRAMESET_MODE";else if(G===L.BASE||G===L.BASEFONT||G===L.BGSOUND||G===L.LINK||G===L.META||G===L.NOFRAMES||G===L.SCRIPT||G===L.STYLE||G===L.TEMPLATE||G===L.TITLE)I._err(w7.abandonedHeadElementChild),I.openElements.push(I.headElement),Q8(I,d),I.openElements.remove(I.headElement);else if(G===L.HEAD)I._err(w7.misplacedStartTagForHeadElement);else T$(I,d)}function Y39(I,d){let G=d.tagName;if(G===L.BODY||G===L.HTML||G===L.BR)T$(I,d);else if(G===L.TEMPLATE)aJ(I,d);else I._err(w7.endTagWithoutMatchingOpenElement)}function T$(I,d){I._insertFakeElement(L.BODY),I.insertionMode="IN_BODY_MODE",I._processToken(d)}function nJ(I,d){I._reconstructActiveFormattingElements(),I._insertCharacters(d)}function pa(I,d){I._reconstructActiveFormattingElements(),I._insertCharacters(d),I.framesetOk=!1}function _39(I,d){if(I.openElements.tmplCount===0)I.treeAdapter.adoptAttributes(I.openElements.items[0],d.attrs)}function D39(I,d){let G=I.openElements.tryPeekProperlyNestedBodyElement();if(G&&I.openElements.tmplCount===0)I.framesetOk=!1,I.treeAdapter.adoptAttributes(G,d.attrs)}function H39(I,d){let G=I.openElements.tryPeekProperlyNestedBodyElement();if(I.framesetOk&&G)I.treeAdapter.detachNode(G),I.openElements.popAllUpToHtmlElement(),I._insertElement(d,N2.HTML),I.insertionMode="IN_FRAMESET_MODE"}function CX(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._insertElement(d,N2.HTML)}function F39(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();let G=I.openElements.currentTagName;if(G===L.H1||G===L.H2||G===L.H3||G===L.H4||G===L.H5||G===L.H6)I.openElements.pop();I._insertElement(d,N2.HTML)}function eH2(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._insertElement(d,N2.HTML),I.skipNextNewLine=!0,I.framesetOk=!1}function g39(I,d){let G=I.openElements.tmplCount>0;if(!I.formElement||G){if(I.openElements.hasInButtonScope(L.P))I._closePElement();if(I._insertElement(d,N2.HTML),!G)I.formElement=I.openElements.current}}function J39(I,d){I.framesetOk=!1;let G=d.tagName;for(let Z=I.openElements.stackTop;Z>=0;Z--){let C=I.openElements.items[Z],W=I.treeAdapter.getTagName(C),w=null;if(G===L.LI&&W===L.LI)w=L.LI;else if((G===L.DD||G===L.DT)&&(W===L.DD||W===L.DT))w=W;if(w){I.openElements.generateImpliedEndTagsWithExclusion(w),I.openElements.popUntilTagNamePopped(w);break}if(W!==L.ADDRESS&&W!==L.DIV&&W!==L.P&&I._isSpecialElement(C))break}if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._insertElement(d,N2.HTML)}function K39(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._insertElement(d,N2.HTML),I.tokenizer.state=z1.MODE.PLAINTEXT}function N39(I,d){if(I.openElements.hasInScope(L.BUTTON))I.openElements.generateImpliedEndTags(),I.openElements.popUntilTagNamePopped(L.BUTTON);I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML),I.framesetOk=!1}function z39(I,d){let G=I.activeFormattingElements.getElementEntryInScopeWithTagName(L.A);if(G)BH(I,d),I.openElements.remove(G.element),I.activeFormattingElements.removeEntry(G);I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML),I.activeFormattingElements.pushElement(I.openElements.current,d)}function MR(I,d){I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML),I.activeFormattingElements.pushElement(I.openElements.current,d)}function Q39(I,d){if(I._reconstructActiveFormattingElements(),I.openElements.hasInScope(L.NOBR))BH(I,d),I._reconstructActiveFormattingElements();I._insertElement(d,N2.HTML),I.activeFormattingElements.pushElement(I.openElements.current,d)}function tH2(I,d){I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML),I.activeFormattingElements.insertMarker(),I.framesetOk=!1}function f39(I,d){if(I.treeAdapter.getDocumentMode(I.document)!==rJ.DOCUMENT_MODE.QUIRKS&&I.openElements.hasInButtonScope(L.P))I._closePElement();I._insertElement(d,N2.HTML),I.framesetOk=!1,I.insertionMode="IN_TABLE_MODE"}function SR(I,d){I._reconstructActiveFormattingElements(),I._appendElement(d,N2.HTML),I.framesetOk=!1,d.ackSelfClosing=!0}function q39(I,d){I._reconstructActiveFormattingElements(),I._appendElement(d,N2.HTML);let G=z1.getTokenAttr(d,WF2.TYPE);if(!G||G.toLowerCase()!=="hidden")I.framesetOk=!1;d.ackSelfClosing=!0}function IF2(I,d){I._appendElement(d,N2.HTML),d.ackSelfClosing=!0}function R39(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._appendElement(d,N2.HTML),I.framesetOk=!1,I.ackSelfClosing=!0}function U39(I,d){d.tagName=L.IMG,SR(I,d)}function v39(I,d){I._insertElement(d,N2.HTML),I.skipNextNewLine=!0,I.tokenizer.state=z1.MODE.RCDATA,I.originalInsertionMode=I.insertionMode,I.framesetOk=!1,I.insertionMode="TEXT_MODE"}function E39(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._reconstructActiveFormattingElements(),I.framesetOk=!1,I._switchToTextParsing(d,z1.MODE.RAWTEXT)}function M39(I,d){I.framesetOk=!1,I._switchToTextParsing(d,z1.MODE.RAWTEXT)}function dF2(I,d){I._switchToTextParsing(d,z1.MODE.RAWTEXT)}function S39(I,d){if(I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML),I.framesetOk=!1,I.insertionMode==="IN_TABLE_MODE"||I.insertionMode==="IN_CAPTION_MODE"||I.insertionMode==="IN_TABLE_BODY_MODE"||I.insertionMode==="IN_ROW_MODE"||I.insertionMode==="IN_CELL_MODE")I.insertionMode="IN_SELECT_IN_TABLE_MODE";else I.insertionMode="IN_SELECT_MODE"}function GF2(I,d){if(I.openElements.currentTagName===L.OPTION)I.openElements.pop();I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML)}function ZF2(I,d){if(I.openElements.hasInScope(L.RUBY))I.openElements.generateImpliedEndTags();I._insertElement(d,N2.HTML)}function L39(I,d){if(I.openElements.hasInScope(L.RUBY))I.openElements.generateImpliedEndTagsWithExclusion(L.RTC);I._insertElement(d,N2.HTML)}function y39(I,d){if(I.openElements.hasInButtonScope(L.P))I._closePElement();I._insertElement(d,N2.HTML)}function P39(I,d){if(I._reconstructActiveFormattingElements(),LB.adjustTokenMathMLAttrs(d),LB.adjustTokenXMLAttrs(d),d.selfClosing)I._appendElement(d,N2.MATHML);else I._insertElement(d,N2.MATHML);d.ackSelfClosing=!0}function $39(I,d){if(I._reconstructActiveFormattingElements(),LB.adjustTokenSVGAttrs(d),LB.adjustTokenXMLAttrs(d),d.selfClosing)I._appendElement(d,N2.SVG);else I._insertElement(d,N2.SVG);d.ackSelfClosing=!0}function xZ(I,d){I._reconstructActiveFormattingElements(),I._insertElement(d,N2.HTML)}function Dd(I,d){let G=d.tagName;switch(G.length){case 1:if(G===L.I||G===L.S||G===L.B||G===L.U)MR(I,d);else if(G===L.P)CX(I,d);else if(G===L.A)z39(I,d);else xZ(I,d);break;case 2:if(G===L.DL||G===L.OL||G===L.UL)CX(I,d);else if(G===L.H1||G===L.H2||G===L.H3||G===L.H4||G===L.H5||G===L.H6)F39(I,d);else if(G===L.LI||G===L.DD||G===L.DT)J39(I,d);else if(G===L.EM||G===L.TT)MR(I,d);else if(G===L.BR)SR(I,d);else if(G===L.HR)R39(I,d);else if(G===L.RB)ZF2(I,d);else if(G===L.RT||G===L.RP)L39(I,d);else if(G!==L.TH&&G!==L.TD&&G!==L.TR)xZ(I,d);break;case 3:if(G===L.DIV||G===L.DIR||G===L.NAV)CX(I,d);else if(G===L.PRE)eH2(I,d);else if(G===L.BIG)MR(I,d);else if(G===L.IMG||G===L.WBR)SR(I,d);else if(G===L.XMP)E39(I,d);else if(G===L.SVG)$39(I,d);else if(G===L.RTC)ZF2(I,d);else if(G!==L.COL)xZ(I,d);break;case 4:if(G===L.HTML)_39(I,d);else if(G===L.BASE||G===L.LINK||G===L.META)Q8(I,d);else if(G===L.BODY)D39(I,d);else if(G===L.MAIN||G===L.MENU)CX(I,d);else if(G===L.FORM)g39(I,d);else if(G===L.CODE||G===L.FONT)MR(I,d);else if(G===L.NOBR)Q39(I,d);else if(G===L.AREA)SR(I,d);else if(G===L.MATH)P39(I,d);else if(G===L.MENU)y39(I,d);else if(G!==L.HEAD)xZ(I,d);break;case 5:if(G===L.STYLE||G===L.TITLE)Q8(I,d);else if(G===L.ASIDE)CX(I,d);else if(G===L.SMALL)MR(I,d);else if(G===L.TABLE)f39(I,d);else if(G===L.EMBED)SR(I,d);else if(G===L.INPUT)q39(I,d);else if(G===L.PARAM||G===L.TRACK)IF2(I,d);else if(G===L.IMAGE)U39(I,d);else if(G!==L.FRAME&&G!==L.TBODY&&G!==L.TFOOT&&G!==L.THEAD)xZ(I,d);break;case 6:if(G===L.SCRIPT)Q8(I,d);else if(G===L.CENTER||G===L.FIGURE||G===L.FOOTER||G===L.HEADER||G===L.HGROUP||G===L.DIALOG)CX(I,d);else if(G===L.BUTTON)N39(I,d);else if(G===L.STRIKE||G===L.STRONG)MR(I,d);else if(G===L.APPLET||G===L.OBJECT)tH2(I,d);else if(G===L.KEYGEN)SR(I,d);else if(G===L.SOURCE)IF2(I,d);else if(G===L.IFRAME)M39(I,d);else if(G===L.SELECT)S39(I,d);else if(G===L.OPTION)GF2(I,d);else xZ(I,d);break;case 7:if(G===L.BGSOUND)Q8(I,d);else if(G===L.DETAILS||G===L.ADDRESS||G===L.ARTICLE||G===L.SECTION||G===L.SUMMARY)CX(I,d);else if(G===L.LISTING)eH2(I,d);else if(G===L.MARQUEE)tH2(I,d);else if(G===L.NOEMBED)dF2(I,d);else if(G!==L.CAPTION)xZ(I,d);break;case 8:if(G===L.BASEFONT)Q8(I,d);else if(G===L.FRAMESET)H39(I,d);else if(G===L.FIELDSET)CX(I,d);else if(G===L.TEXTAREA)v39(I,d);else if(G===L.TEMPLATE)Q8(I,d);else if(G===L.NOSCRIPT)if(I.options.scriptingEnabled)dF2(I,d);else xZ(I,d);else if(G===L.OPTGROUP)GF2(I,d);else if(G!==L.COLGROUP)xZ(I,d);break;case 9:if(G===L.PLAINTEXT)K39(I,d);else xZ(I,d);break;case 10:if(G===L.BLOCKQUOTE||G===L.FIGCAPTION)CX(I,d);else xZ(I,d);break;default:xZ(I,d)}}function u39(I){if(I.openElements.hasInScope(L.BODY))I.insertionMode="AFTER_BODY_MODE"}function T39(I,d){if(I.openElements.hasInScope(L.BODY))I.insertionMode="AFTER_BODY_MODE",I._processToken(d)}function wH(I,d){let G=d.tagName;if(I.openElements.hasInScope(G))I.openElements.generateImpliedEndTags(),I.openElements.popUntilTagNamePopped(G)}function O39(I){let d=I.openElements.tmplCount>0,G=I.formElement;if(!d)I.formElement=null;if((G||d)&&I.openElements.hasInScope(L.FORM))if(I.openElements.generateImpliedEndTags(),d)I.openElements.popUntilTagNamePopped(L.FORM);else I.openElements.remove(G)}function m39(I){if(!I.openElements.hasInButtonScope(L.P))I._insertFakeElement(L.P);I._closePElement()}function l39(I){if(I.openElements.hasInListItemScope(L.LI))I.openElements.generateImpliedEndTagsWithExclusion(L.LI),I.openElements.popUntilTagNamePopped(L.LI)}function b39(I,d){let G=d.tagName;if(I.openElements.hasInScope(G))I.openElements.generateImpliedEndTagsWithExclusion(G),I.openElements.popUntilTagNamePopped(G)}function h39(I){if(I.openElements.hasNumberedHeaderInScope())I.openElements.generateImpliedEndTags(),I.openElements.popUntilNumberedHeaderPopped()}function CF2(I,d){let G=d.tagName;if(I.openElements.hasInScope(G))I.openElements.generateImpliedEndTags(),I.openElements.popUntilTagNamePopped(G),I.activeFormattingElements.clearToLastMarker()}function j39(I){I._reconstructActiveFormattingElements(),I._insertFakeElement(L.BR),I.openElements.pop(),I.framesetOk=!1}function FW(I,d){let G=d.tagName;for(let Z=I.openElements.stackTop;Z>0;Z--){let C=I.openElements.items[Z];if(I.treeAdapter.getTagName(C)===G){I.openElements.generateImpliedEndTagsWithExclusion(G),I.openElements.popUntilElementPopped(C);break}if(I._isSpecialElement(C))break}}function Kg1(I,d){let G=d.tagName;switch(G.length){case 1:if(G===L.A||G===L.B||G===L.I||G===L.S||G===L.U)BH(I,d);else if(G===L.P)m39(I,d);else FW(I,d);break;case 2:if(G===L.DL||G===L.UL||G===L.OL)wH(I,d);else if(G===L.LI)l39(I,d);else if(G===L.DD||G===L.DT)b39(I,d);else if(G===L.H1||G===L.H2||G===L.H3||G===L.H4||G===L.H5||G===L.H6)h39(I,d);else if(G===L.BR)j39(I,d);else if(G===L.EM||G===L.TT)BH(I,d);else FW(I,d);break;case 3:if(G===L.BIG)BH(I,d);else if(G===L.DIR||G===L.DIV||G===L.NAV||G===L.PRE)wH(I,d);else FW(I,d);break;case 4:if(G===L.BODY)u39(I,d);else if(G===L.HTML)T39(I,d);else if(G===L.FORM)O39(I,d);else if(G===L.CODE||G===L.FONT||G===L.NOBR)BH(I,d);else if(G===L.MAIN||G===L.MENU)wH(I,d);else FW(I,d);break;case 5:if(G===L.ASIDE)wH(I,d);else if(G===L.SMALL)BH(I,d);else FW(I,d);break;case 6:if(G===L.CENTER||G===L.FIGURE||G===L.FOOTER||G===L.HEADER||G===L.HGROUP||G===L.DIALOG)wH(I,d);else if(G===L.APPLET||G===L.OBJECT)CF2(I,d);else if(G===L.STRIKE||G===L.STRONG)BH(I,d);else FW(I,d);break;case 7:if(G===L.ADDRESS||G===L.ARTICLE||G===L.DETAILS||G===L.SECTION||G===L.SUMMARY||G===L.LISTING)wH(I,d);else if(G===L.MARQUEE)CF2(I,d);else FW(I,d);break;case 8:if(G===L.FIELDSET)wH(I,d);else if(G===L.TEMPLATE)aJ(I,d);else FW(I,d);break;case 10:if(G===L.BLOCKQUOTE||G===L.FIGCAPTION)wH(I,d);else FW(I,d);break;default:FW(I,d)}}function WX(I,d){if(I.tmplInsertionModeStackTop>-1)VF2(I,d);else I.stopped=!0}function k39(I,d){if(d.tagName===L.SCRIPT)I.pendingScript=I.openElements.current;I.openElements.pop(),I.insertionMode=I.originalInsertionMode}function x39(I,d){I._err(w7.eofInElementThatCanContainOnlyText),I.openElements.pop(),I.insertionMode=I.originalInsertionMode,I._processToken(d)}function wX(I,d){let G=I.openElements.currentTagName;if(G===L.TABLE||G===L.TBODY||G===L.TFOOT||G===L.THEAD||G===L.TR)I.pendingCharacterTokens=[],I.hasNonWhitespacePendingCharacterToken=!1,I.originalInsertionMode=I.insertionMode,I.insertionMode="IN_TABLE_TEXT_MODE",I._processToken(d);else cZ(I,d)}function c39(I,d){I.openElements.clearBackToTableContext(),I.activeFormattingElements.insertMarker(),I._insertElement(d,N2.HTML),I.insertionMode="IN_CAPTION_MODE"}function p39(I,d){I.openElements.clearBackToTableContext(),I._insertElement(d,N2.HTML),I.insertionMode="IN_COLUMN_GROUP_MODE"}function i39(I,d){I.openElements.clearBackToTableContext(),I._insertFakeElement(L.COLGROUP),I.insertionMode="IN_COLUMN_GROUP_MODE",I._processToken(d)}function n39(I,d){I.openElements.clearBackToTableContext(),I._insertElement(d,N2.HTML),I.insertionMode="IN_TABLE_BODY_MODE"}function r39(I,d){I.openElements.clearBackToTableContext(),I._insertFakeElement(L.TBODY),I.insertionMode="IN_TABLE_BODY_MODE",I._processToken(d)}function a39(I,d){if(I.openElements.hasInTableScope(L.TABLE))I.openElements.popUntilTagNamePopped(L.TABLE),I._resetInsertionMode(),I._processToken(d)}function s39(I,d){let G=z1.getTokenAttr(d,WF2.TYPE);if(G&&G.toLowerCase()==="hidden")I._appendElement(d,N2.HTML);else cZ(I,d);d.ackSelfClosing=!0}function o39(I,d){if(!I.formElement&&I.openElements.tmplCount===0)I._insertElement(d,N2.HTML),I.formElement=I.openElements.current,I.openElements.pop()}function Ng1(I,d){let G=d.tagName;switch(G.length){case 2:if(G===L.TD||G===L.TH||G===L.TR)r39(I,d);else cZ(I,d);break;case 3:if(G===L.COL)i39(I,d);else cZ(I,d);break;case 4:if(G===L.FORM)o39(I,d);else cZ(I,d);break;case 5:if(G===L.TABLE)a39(I,d);else if(G===L.STYLE)Q8(I,d);else if(G===L.TBODY||G===L.TFOOT||G===L.THEAD)n39(I,d);else if(G===L.INPUT)s39(I,d);else cZ(I,d);break;case 6:if(G===L.SCRIPT)Q8(I,d);else cZ(I,d);break;case 7:if(G===L.CAPTION)c39(I,d);else cZ(I,d);break;case 8:if(G===L.COLGROUP)p39(I,d);else if(G===L.TEMPLATE)Q8(I,d);else cZ(I,d);break;default:cZ(I,d)}}function zg1(I,d){let G=d.tagName;if(G===L.TABLE){if(I.openElements.hasInTableScope(L.TABLE))I.openElements.popUntilTagNamePopped(L.TABLE),I._resetInsertionMode()}else if(G===L.TEMPLATE)aJ(I,d);else if(G!==L.BODY&&G!==L.CAPTION&&G!==L.COL&&G!==L.COLGROUP&&G!==L.HTML&&G!==L.TBODY&&G!==L.TD&&G!==L.TFOOT&&G!==L.TH&&G!==L.THEAD&&G!==L.TR)cZ(I,d)}function cZ(I,d){let G=I.fosterParentingEnabled;I.fosterParentingEnabled=!0,I._processTokenInBodyMode(d),I.fosterParentingEnabled=G}function e39(I,d){I.pendingCharacterTokens.push(d)}function t39(I,d){I.pendingCharacterTokens.push(d),I.hasNonWhitespacePendingCharacterToken=!0}function L$(I,d){let G=0;if(I.hasNonWhitespacePendingCharacterToken)for(;G0)I.openElements.popUntilTagNamePopped(L.TEMPLATE),I.activeFormattingElements.clearToLastMarker(),I._popTmplInsertionMode(),I._resetInsertionMode(),I._processToken(d);else I.stopped=!0}function H69(I,d){if(d.tagName===L.HTML)Dd(I,d);else ra(I,d)}function F69(I,d){if(d.tagName===L.HTML){if(!I.fragmentContext)I.insertionMode="AFTER_AFTER_BODY_MODE"}else ra(I,d)}function ra(I,d){I.insertionMode="IN_BODY_MODE",I._processToken(d)}function g69(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.FRAMESET)I._insertElement(d,N2.HTML);else if(G===L.FRAME)I._appendElement(d,N2.HTML),d.ackSelfClosing=!0;else if(G===L.NOFRAMES)Q8(I,d)}function J69(I,d){if(d.tagName===L.FRAMESET&&!I.openElements.isRootHtmlElementCurrent()){if(I.openElements.pop(),!I.fragmentContext&&I.openElements.currentTagName!==L.FRAMESET)I.insertionMode="AFTER_FRAMESET_MODE"}}function K69(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.NOFRAMES)Q8(I,d)}function N69(I,d){if(d.tagName===L.HTML)I.insertionMode="AFTER_AFTER_FRAMESET_MODE"}function z69(I,d){if(d.tagName===L.HTML)Dd(I,d);else ia(I,d)}function ia(I,d){I.insertionMode="IN_BODY_MODE",I._processToken(d)}function Q69(I,d){let G=d.tagName;if(G===L.HTML)Dd(I,d);else if(G===L.NOFRAMES)Q8(I,d)}function f69(I,d){d.chars=i99.REPLACEMENT_CHARACTER,I._insertCharacters(d)}function q69(I,d){I._insertCharacters(d),I.framesetOk=!1}function R69(I,d){if(LB.causesExit(d)&&!I.fragmentContext){while(I.treeAdapter.getNamespaceURI(I.openElements.current)!==N2.HTML&&!I._isIntegrationPoint(I.openElements.current))I.openElements.pop();I._processToken(d)}else{let G=I._getAdjustedCurrentElement(),Z=I.treeAdapter.getNamespaceURI(G);if(Z===N2.MATHML)LB.adjustTokenMathMLAttrs(d);else if(Z===N2.SVG)LB.adjustTokenSVGTagName(d),LB.adjustTokenSVGAttrs(d);if(LB.adjustTokenXMLAttrs(d),d.selfClosing)I._appendElement(d,Z);else I._insertElement(d,Z);d.ackSelfClosing=!0}}function U69(I,d){for(let G=I.openElements.stackTop;G>0;G--){let Z=I.openElements.items[G];if(I.treeAdapter.getNamespaceURI(Z)===N2.HTML){I._processToken(d);break}if(I.treeAdapter.getTagName(Z).toLowerCase()===d.tagName){I.openElements.popUntilElementPopped(Z);break}}}});var HF2=Y((SJ3,DF2)=>{var v69=_g1(),E69=Dg1(),M69=Hg1(),_F2=WH(),v9=_F2.TAG_NAMES,aa=_F2.NAMESPACES,S69={treeAdapter:v69},L69=/&/g,y69=/\u00a0/g,P69=/"/g,$69=//g;class O${constructor(I,d){this.options=E69(S69,d),this.treeAdapter=this.options.treeAdapter,this.html="",this.startNode=I}serialize(){return this._serializeChildNodes(this.startNode),this.html}_serializeChildNodes(I){let d=this.treeAdapter.getChildNodes(I);if(d)for(let G=0,Z=d.length;G",d!==v9.AREA&&d!==v9.BASE&&d!==v9.BASEFONT&&d!==v9.BGSOUND&&d!==v9.BR&&d!==v9.COL&&d!==v9.EMBED&&d!==v9.FRAME&&d!==v9.HR&&d!==v9.IMG&&d!==v9.INPUT&&d!==v9.KEYGEN&&d!==v9.LINK&&d!==v9.META&&d!==v9.PARAM&&d!==v9.SOURCE&&d!==v9.TRACK&&d!==v9.WBR){let Z=d===v9.TEMPLATE&&G===aa.HTML?this.treeAdapter.getTemplateContent(I):I;this._serializeChildNodes(Z),this.html+=""}}_serializeAttributes(I){let d=this.treeAdapter.getAttrList(I);for(let G=0,Z=d.length;G"}_serializeDocumentTypeNode(I){let d=this.treeAdapter.getDocumentTypeNodeName(I);this.html+="<"+M69.serializeContent(d,null,null)+">"}}O$.escapeString=function(I,d){if(I=I.replace(L69,"&").replace(y69," "),d)I=I.replace(P69,""");else I=I.replace($69,"<").replace(u69,">");return I};DF2.exports=O$});var gF2=Y((O69)=>{var FF2=YF2(),T69=HF2();O69.parse=function I(d,G){return new FF2(G).parse(d)};O69.parseFragment=function I(d,G,Z){if(typeof d==="string")Z=G,G=d,d=null;return new FF2(Z).parseFragment(G,d)};O69.serialize=function(I,d){return new T69(I,d).serialize()}});var fg1=Y((h69)=>{var Qg1=h69.NAMESPACES={HTML:"http://www.w3.org/1999/xhtml",MATHML:"http://www.w3.org/1998/Math/MathML",SVG:"http://www.w3.org/2000/svg",XLINK:"http://www.w3.org/1999/xlink",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"};h69.ATTRS={TYPE:"type",ACTION:"action",ENCODING:"encoding",PROMPT:"prompt",NAME:"name",COLOR:"color",FACE:"face",SIZE:"size"};h69.DOCUMENT_MODE={NO_QUIRKS:"no-quirks",QUIRKS:"quirks",LIMITED_QUIRKS:"limited-quirks"};var b0=h69.TAG_NAMES={A:"a",ADDRESS:"address",ANNOTATION_XML:"annotation-xml",APPLET:"applet",AREA:"area",ARTICLE:"article",ASIDE:"aside",B:"b",BASE:"base",BASEFONT:"basefont",BGSOUND:"bgsound",BIG:"big",BLOCKQUOTE:"blockquote",BODY:"body",BR:"br",BUTTON:"button",CAPTION:"caption",CENTER:"center",CODE:"code",COL:"col",COLGROUP:"colgroup",DD:"dd",DESC:"desc",DETAILS:"details",DIALOG:"dialog",DIR:"dir",DIV:"div",DL:"dl",DT:"dt",EM:"em",EMBED:"embed",FIELDSET:"fieldset",FIGCAPTION:"figcaption",FIGURE:"figure",FONT:"font",FOOTER:"footer",FOREIGN_OBJECT:"foreignObject",FORM:"form",FRAME:"frame",FRAMESET:"frameset",H1:"h1",H2:"h2",H3:"h3",H4:"h4",H5:"h5",H6:"h6",HEAD:"head",HEADER:"header",HGROUP:"hgroup",HR:"hr",HTML:"html",I:"i",IMG:"img",IMAGE:"image",INPUT:"input",IFRAME:"iframe",KEYGEN:"keygen",LABEL:"label",LI:"li",LINK:"link",LISTING:"listing",MAIN:"main",MALIGNMARK:"malignmark",MARQUEE:"marquee",MATH:"math",MENU:"menu",META:"meta",MGLYPH:"mglyph",MI:"mi",MO:"mo",MN:"mn",MS:"ms",MTEXT:"mtext",NAV:"nav",NOBR:"nobr",NOFRAMES:"noframes",NOEMBED:"noembed",NOSCRIPT:"noscript",OBJECT:"object",OL:"ol",OPTGROUP:"optgroup",OPTION:"option",P:"p",PARAM:"param",PLAINTEXT:"plaintext",PRE:"pre",RB:"rb",RP:"rp",RT:"rt",RTC:"rtc",RUBY:"ruby",S:"s",SCRIPT:"script",SECTION:"section",SELECT:"select",SOURCE:"source",SMALL:"small",SPAN:"span",STRIKE:"strike",STRONG:"strong",STYLE:"style",SUB:"sub",SUMMARY:"summary",SUP:"sup",TABLE:"table",TBODY:"tbody",TEMPLATE:"template",TEXTAREA:"textarea",TFOOT:"tfoot",TD:"td",TH:"th",THEAD:"thead",TITLE:"title",TR:"tr",TRACK:"track",TT:"tt",U:"u",UL:"ul",SVG:"svg",VAR:"var",WBR:"wbr",XMP:"xmp"};h69.SPECIAL_ELEMENTS={[Qg1.HTML]:{[b0.ADDRESS]:!0,[b0.APPLET]:!0,[b0.AREA]:!0,[b0.ARTICLE]:!0,[b0.ASIDE]:!0,[b0.BASE]:!0,[b0.BASEFONT]:!0,[b0.BGSOUND]:!0,[b0.BLOCKQUOTE]:!0,[b0.BODY]:!0,[b0.BR]:!0,[b0.BUTTON]:!0,[b0.CAPTION]:!0,[b0.CENTER]:!0,[b0.COL]:!0,[b0.COLGROUP]:!0,[b0.DD]:!0,[b0.DETAILS]:!0,[b0.DIR]:!0,[b0.DIV]:!0,[b0.DL]:!0,[b0.DT]:!0,[b0.EMBED]:!0,[b0.FIELDSET]:!0,[b0.FIGCAPTION]:!0,[b0.FIGURE]:!0,[b0.FOOTER]:!0,[b0.FORM]:!0,[b0.FRAME]:!0,[b0.FRAMESET]:!0,[b0.H1]:!0,[b0.H2]:!0,[b0.H3]:!0,[b0.H4]:!0,[b0.H5]:!0,[b0.H6]:!0,[b0.HEAD]:!0,[b0.HEADER]:!0,[b0.HGROUP]:!0,[b0.HR]:!0,[b0.HTML]:!0,[b0.IFRAME]:!0,[b0.IMG]:!0,[b0.INPUT]:!0,[b0.LI]:!0,[b0.LINK]:!0,[b0.LISTING]:!0,[b0.MAIN]:!0,[b0.MARQUEE]:!0,[b0.MENU]:!0,[b0.META]:!0,[b0.NAV]:!0,[b0.NOEMBED]:!0,[b0.NOFRAMES]:!0,[b0.NOSCRIPT]:!0,[b0.OBJECT]:!0,[b0.OL]:!0,[b0.P]:!0,[b0.PARAM]:!0,[b0.PLAINTEXT]:!0,[b0.PRE]:!0,[b0.SCRIPT]:!0,[b0.SECTION]:!0,[b0.SELECT]:!0,[b0.SOURCE]:!0,[b0.STYLE]:!0,[b0.SUMMARY]:!0,[b0.TABLE]:!0,[b0.TBODY]:!0,[b0.TD]:!0,[b0.TEMPLATE]:!0,[b0.TEXTAREA]:!0,[b0.TFOOT]:!0,[b0.TH]:!0,[b0.THEAD]:!0,[b0.TITLE]:!0,[b0.TR]:!0,[b0.TRACK]:!0,[b0.UL]:!0,[b0.WBR]:!0,[b0.XMP]:!0},[Qg1.MATHML]:{[b0.MI]:!0,[b0.MO]:!0,[b0.MN]:!0,[b0.MS]:!0,[b0.MTEXT]:!0,[b0.ANNOTATION_XML]:!0},[Qg1.SVG]:{[b0.TITLE]:!0,[b0.FOREIGN_OBJECT]:!0,[b0.DESC]:!0}}});var QF2=Y((n69)=>{var{DOCUMENT_MODE:LR}=fg1(),NF2=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],c69=NF2.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]),p69=["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"],zF2=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],i69=zF2.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]);function JF2(I){let d=I.indexOf('"')!==-1?"'":'"';return d+I+d}function KF2(I,d){for(let G=0;G-1)return LR.QUIRKS;let Z=d===null?c69:NF2;if(KF2(G,Z))return LR.QUIRKS;if(Z=d===null?zF2:i69,KF2(G,Z))return LR.LIMITED_QUIRKS}return LR.NO_QUIRKS};n69.serializeContent=function(I,d,G){let Z="!DOCTYPE ";if(I)Z+=I;if(d)Z+=" PUBLIC "+JF2(d);else if(G)Z+=" SYSTEM";if(G!==null)Z+=" "+JF2(G);return Z}});var UF2=Y((I89)=>{var o69=QF2(),{DOCUMENT_MODE:e69}=fg1(),fF2={element:1,text:3,cdata:4,comment:8},qF2={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"};class AH{constructor(I){for(let d of Object.keys(I))this[d]=I[d]}get firstChild(){let I=this.children;return I&&I[0]||null}get lastChild(){let I=this.children;return I&&I[I.length-1]||null}get nodeType(){return fF2[this.type]||fF2.element}}Object.keys(qF2).forEach((I)=>{let d=qF2[I];Object.defineProperty(AH.prototype,I,{get:function(){return this[d]||null},set:function(G){return this[d]=G,G}})});I89.createDocument=function(){return new AH({type:"root",name:"root",parent:null,prev:null,next:null,children:[],"x-mode":e69.NO_QUIRKS})};I89.createDocumentFragment=function(){return new AH({type:"root",name:"root",parent:null,prev:null,next:null,children:[]})};I89.createElement=function(I,d,G){let Z=Object.create(null),C=Object.create(null),W=Object.create(null);for(let w=0;w{vF2.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Ug1=Y((bJ3,MF2)=>{var m$=Rg1(),EF2={};for(let I of Object.keys(m$))EF2[m$[I]]=I;var v2={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};MF2.exports=v2;for(let I of Object.keys(v2)){if(!("channels"in v2[I]))throw new Error("missing channels property: "+I);if(!("labels"in v2[I]))throw new Error("missing channel labels property: "+I);if(v2[I].labels.length!==v2[I].channels)throw new Error("channel and label counts mismatch: "+I);let{channels:d,labels:G}=v2[I];delete v2[I].channels,delete v2[I].labels,Object.defineProperty(v2[I],"channels",{value:d}),Object.defineProperty(v2[I],"labels",{value:G})}v2.rgb.hsl=function(I){let d=I[0]/255,G=I[1]/255,Z=I[2]/255,C=Math.min(d,G,Z),W=Math.max(d,G,Z),w=W-C,B,A;if(W===C)B=0;else if(d===W)B=(G-Z)/w;else if(G===W)B=2+(Z-d)/w;else if(Z===W)B=4+(d-G)/w;if(B=Math.min(B*60,360),B<0)B+=360;let V=(C+W)/2;if(W===C)A=0;else if(V<=0.5)A=w/(W+C);else A=w/(2-W-C);return[B,A*100,V*100]};v2.rgb.hsv=function(I){let d,G,Z,C,W,w=I[0]/255,B=I[1]/255,A=I[2]/255,V=Math.max(w,B,A),X=V-Math.min(w,B,A),_=function(F){return(V-F)/6/X+0.5};if(X===0)C=0,W=0;else{if(W=X/V,d=_(w),G=_(B),Z=_(A),w===V)C=Z-G;else if(B===V)C=0.3333333333333333+d-Z;else if(A===V)C=0.6666666666666666+G-d;if(C<0)C+=1;else if(C>1)C-=1}return[C*360,W*100,V*100]};v2.rgb.hwb=function(I){let d=I[0],G=I[1],Z=I[2],C=v2.rgb.hsl(I)[0],W=0.00392156862745098*Math.min(d,Math.min(G,Z));return Z=1-0.00392156862745098*Math.max(d,Math.max(G,Z)),[C,W*100,Z*100]};v2.rgb.cmyk=function(I){let d=I[0]/255,G=I[1]/255,Z=I[2]/255,C=Math.min(1-d,1-G,1-Z),W=(1-d-C)/(1-C)||0,w=(1-G-C)/(1-C)||0,B=(1-Z-C)/(1-C)||0;return[W*100,w*100,B*100,C*100]};function P89(I,d){return(I[0]-d[0])**2+(I[1]-d[1])**2+(I[2]-d[2])**2}v2.rgb.keyword=function(I){let d=EF2[I];if(d)return d;let G=1/0,Z;for(let C of Object.keys(m$)){let W=m$[C],w=P89(I,W);if(w0.04045?((d+0.055)/1.055)**2.4:d/12.92,G=G>0.04045?((G+0.055)/1.055)**2.4:G/12.92,Z=Z>0.04045?((Z+0.055)/1.055)**2.4:Z/12.92;let C=d*0.4124+G*0.3576+Z*0.1805,W=d*0.2126+G*0.7152+Z*0.0722,w=d*0.0193+G*0.1192+Z*0.9505;return[C*100,W*100,w*100]};v2.rgb.lab=function(I){let d=v2.rgb.xyz(I),G=d[0],Z=d[1],C=d[2];G/=95.047,Z/=100,C/=108.883,G=G>0.008856?G**0.3333333333333333:7.787*G+0.13793103448275862,Z=Z>0.008856?Z**0.3333333333333333:7.787*Z+0.13793103448275862,C=C>0.008856?C**0.3333333333333333:7.787*C+0.13793103448275862;let W=116*Z-16,w=500*(G-Z),B=200*(Z-C);return[W,w,B]};v2.hsl.rgb=function(I){let d=I[0]/360,G=I[1]/100,Z=I[2]/100,C,W,w;if(G===0)return w=Z*255,[w,w,w];if(Z<0.5)C=Z*(1+G);else C=Z+G-Z*G;let B=2*Z-C,A=[0,0,0];for(let V=0;V<3;V++){if(W=d+0.3333333333333333*-(V-1),W<0)W++;if(W>1)W--;if(6*W<1)w=B+(C-B)*6*W;else if(2*W<1)w=C;else if(3*W<2)w=B+(C-B)*(0.6666666666666666-W)*6;else w=B;A[V]=w*255}return A};v2.hsl.hsv=function(I){let d=I[0],G=I[1]/100,Z=I[2]/100,C=G,W=Math.max(Z,0.01);Z*=2,G*=Z<=1?Z:2-Z,C*=W<=1?W:2-W;let w=(Z+G)/2,B=Z===0?2*C/(W+C):2*G/(Z+G);return[d,B*100,w*100]};v2.hsv.rgb=function(I){let d=I[0]/60,G=I[1]/100,Z=I[2]/100,C=Math.floor(d)%6,W=d-Math.floor(d),w=255*Z*(1-G),B=255*Z*(1-G*W),A=255*Z*(1-G*(1-W));switch(Z*=255,C){case 0:return[Z,A,w];case 1:return[B,Z,w];case 2:return[w,Z,A];case 3:return[w,B,Z];case 4:return[A,w,Z];case 5:return[Z,w,B]}};v2.hsv.hsl=function(I){let d=I[0],G=I[1]/100,Z=I[2]/100,C=Math.max(Z,0.01),W,w;w=(2-G)*Z;let B=(2-G)*C;return W=G*C,W/=B<=1?B:2-B,W=W||0,w/=2,[d,W*100,w*100]};v2.hwb.rgb=function(I){let d=I[0]/360,G=I[1]/100,Z=I[2]/100,C=G+Z,W;if(C>1)G/=C,Z/=C;let w=Math.floor(6*d),B=1-Z;if(W=6*d-w,(w&1)!==0)W=1-W;let A=G+W*(B-G),V,X,_;switch(w){default:case 6:case 0:V=B,X=A,_=G;break;case 1:V=A,X=B,_=G;break;case 2:V=G,X=B,_=A;break;case 3:V=G,X=A,_=B;break;case 4:V=A,X=G,_=B;break;case 5:V=B,X=G,_=A;break}return[V*255,X*255,_*255]};v2.cmyk.rgb=function(I){let d=I[0]/100,G=I[1]/100,Z=I[2]/100,C=I[3]/100,W=1-Math.min(1,d*(1-C)+C),w=1-Math.min(1,G*(1-C)+C),B=1-Math.min(1,Z*(1-C)+C);return[W*255,w*255,B*255]};v2.xyz.rgb=function(I){let d=I[0]/100,G=I[1]/100,Z=I[2]/100,C,W,w;return C=d*3.2406+G*-1.5372+Z*-0.4986,W=d*-0.9689+G*1.8758+Z*0.0415,w=d*0.0557+G*-0.204+Z*1.057,C=C>0.0031308?1.055*C**0.4166666666666667-0.055:C*12.92,W=W>0.0031308?1.055*W**0.4166666666666667-0.055:W*12.92,w=w>0.0031308?1.055*w**0.4166666666666667-0.055:w*12.92,C=Math.min(Math.max(0,C),1),W=Math.min(Math.max(0,W),1),w=Math.min(Math.max(0,w),1),[C*255,W*255,w*255]};v2.xyz.lab=function(I){let d=I[0],G=I[1],Z=I[2];d/=95.047,G/=100,Z/=108.883,d=d>0.008856?d**0.3333333333333333:7.787*d+0.13793103448275862,G=G>0.008856?G**0.3333333333333333:7.787*G+0.13793103448275862,Z=Z>0.008856?Z**0.3333333333333333:7.787*Z+0.13793103448275862;let C=116*G-16,W=500*(d-G),w=200*(G-Z);return[C,W,w]};v2.lab.xyz=function(I){let d=I[0],G=I[1],Z=I[2],C,W,w;W=(d+16)/116,C=G/500+W,w=W-Z/200;let B=W**3,A=C**3,V=w**3;return W=B>0.008856?B:(W-0.13793103448275862)/7.787,C=A>0.008856?A:(C-0.13793103448275862)/7.787,w=V>0.008856?V:(w-0.13793103448275862)/7.787,C*=95.047,W*=100,w*=108.883,[C,W,w]};v2.lab.lch=function(I){let d=I[0],G=I[1],Z=I[2],C;if(C=Math.atan2(Z,G)*360/2/Math.PI,C<0)C+=360;let w=Math.sqrt(G*G+Z*Z);return[d,w,C]};v2.lch.lab=function(I){let d=I[0],G=I[1],C=I[2]/360*2*Math.PI,W=G*Math.cos(C),w=G*Math.sin(C);return[d,W,w]};v2.rgb.ansi16=function(I,d=null){let[G,Z,C]=I,W=d===null?v2.rgb.hsv(I)[2]:d;if(W=Math.round(W/50),W===0)return 30;let w=30+(Math.round(C/255)<<2|Math.round(Z/255)<<1|Math.round(G/255));if(W===2)w+=60;return w};v2.hsv.ansi16=function(I){return v2.rgb.ansi16(v2.hsv.rgb(I),I[2])};v2.rgb.ansi256=function(I){let d=I[0],G=I[1],Z=I[2];if(d===G&&G===Z){if(d<8)return 16;if(d>248)return 231;return Math.round((d-8)/247*24)+232}return 16+36*Math.round(d/255*5)+6*Math.round(G/255*5)+Math.round(Z/255*5)};v2.ansi16.rgb=function(I){let d=I%10;if(d===0||d===7){if(I>50)d+=3.5;return d=d/10.5*255,[d,d,d]}let G=(~~(I>50)+1)*0.5,Z=(d&1)*G*255,C=(d>>1&1)*G*255,W=(d>>2&1)*G*255;return[Z,C,W]};v2.ansi256.rgb=function(I){if(I>=232){let W=(I-232)*10+8;return[W,W,W]}I-=16;let d,G=Math.floor(I/36)/5*255,Z=Math.floor((d=I%36)/6)/5*255,C=d%6/5*255;return[G,Z,C]};v2.rgb.hex=function(I){let G=(((Math.round(I[0])&255)<<16)+((Math.round(I[1])&255)<<8)+(Math.round(I[2])&255)).toString(16).toUpperCase();return"000000".substring(G.length)+G};v2.hex.rgb=function(I){let d=I.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!d)return[0,0,0];let G=d[0];if(d[0].length===3)G=G.split("").map((B)=>{return B+B}).join("");let Z=parseInt(G,16),C=Z>>16&255,W=Z>>8&255,w=Z&255;return[C,W,w]};v2.rgb.hcg=function(I){let d=I[0]/255,G=I[1]/255,Z=I[2]/255,C=Math.max(Math.max(d,G),Z),W=Math.min(Math.min(d,G),Z),w=C-W,B,A;if(w<1)B=W/(1-w);else B=0;if(w<=0)A=0;else if(C===d)A=(G-Z)/w%6;else if(C===G)A=2+(Z-d)/w;else A=4+(d-G)/w;return A/=6,A%=1,[A*360,w*100,B*100]};v2.hsl.hcg=function(I){let d=I[1]/100,G=I[2]/100,Z=G<0.5?2*d*G:2*d*(1-G),C=0;if(Z<1)C=(G-0.5*Z)/(1-Z);return[I[0],Z*100,C*100]};v2.hsv.hcg=function(I){let d=I[1]/100,G=I[2]/100,Z=d*G,C=0;if(Z<1)C=(G-Z)/(1-Z);return[I[0],Z*100,C*100]};v2.hcg.rgb=function(I){let d=I[0]/360,G=I[1]/100,Z=I[2]/100;if(G===0)return[Z*255,Z*255,Z*255];let C=[0,0,0],W=d%1*6,w=W%1,B=1-w,A=0;switch(Math.floor(W)){case 0:C[0]=1,C[1]=w,C[2]=0;break;case 1:C[0]=B,C[1]=1,C[2]=0;break;case 2:C[0]=0,C[1]=1,C[2]=w;break;case 3:C[0]=0,C[1]=B,C[2]=1;break;case 4:C[0]=w,C[1]=0,C[2]=1;break;default:C[0]=1,C[1]=0,C[2]=B}return A=(1-G)*Z,[(G*C[0]+A)*255,(G*C[1]+A)*255,(G*C[2]+A)*255]};v2.hcg.hsv=function(I){let d=I[1]/100,G=I[2]/100,Z=d+G*(1-d),C=0;if(Z>0)C=d/Z;return[I[0],C*100,Z*100]};v2.hcg.hsl=function(I){let d=I[1]/100,Z=I[2]/100*(1-d)+0.5*d,C=0;if(Z>0&&Z<0.5)C=d/(2*Z);else if(Z>=0.5&&Z<1)C=d/(2*(1-Z));return[I[0],C*100,Z*100]};v2.hcg.hwb=function(I){let d=I[1]/100,G=I[2]/100,Z=d+G*(1-d);return[I[0],(Z-d)*100,(1-Z)*100]};v2.hwb.hcg=function(I){let d=I[1]/100,Z=1-I[2]/100,C=Z-d,W=0;if(C<1)W=(Z-C)/(1-C);return[I[0],C*100,W*100]};v2.apple.rgb=function(I){return[I[0]/65535*255,I[1]/65535*255,I[2]/65535*255]};v2.rgb.apple=function(I){return[I[0]/255*65535,I[1]/255*65535,I[2]/255*65535]};v2.gray.rgb=function(I){return[I[0]/100*255,I[0]/100*255,I[0]/100*255]};v2.gray.hsl=function(I){return[0,0,I[0]]};v2.gray.hsv=v2.gray.hsl;v2.gray.hwb=function(I){return[0,100,I[0]]};v2.gray.cmyk=function(I){return[0,0,0,I[0]]};v2.gray.lab=function(I){return[I[0],0,0]};v2.gray.hex=function(I){let d=Math.round(I[0]/100*255)&255,Z=((d<<16)+(d<<8)+d).toString(16).toUpperCase();return"000000".substring(Z.length)+Z};v2.rgb.gray=function(I){return[(I[0]+I[1]+I[2])/3/255*100]}});var LF2=Y((hJ3,SF2)=>{var sa=Ug1();function $89(){let I={},d=Object.keys(sa);for(let G=d.length,Z=0;Z{var vg1=Ug1(),m89=LF2(),yR={},l89=Object.keys(vg1);function b89(I){let d=function(...G){let Z=G[0];if(Z===void 0||Z===null)return Z;if(Z.length>1)G=Z;return I(G)};if("conversion"in I)d.conversion=I.conversion;return d}function h89(I){let d=function(...G){let Z=G[0];if(Z===void 0||Z===null)return Z;if(Z.length>1)G=Z;let C=I(G);if(typeof C==="object")for(let W=C.length,w=0;w{yR[I]={},Object.defineProperty(yR[I],"channels",{value:vg1[I].channels}),Object.defineProperty(yR[I],"labels",{value:vg1[I].labels});let d=m89(I);Object.keys(d).forEach((Z)=>{let C=d[Z];yR[I][Z]=h89(C),yR[I][Z].raw=b89(C)})});yF2.exports=yR});var mF2=Y((kJ3,OF2)=>{var PF2=(I,d)=>(...G)=>{return`\x1B[${I(...G)+d}m`},$F2=(I,d)=>(...G)=>{let Z=I(...G);return`\x1B[${38+d};5;${Z}m`},uF2=(I,d)=>(...G)=>{let Z=I(...G);return`\x1B[${38+d};2;${Z[0]};${Z[1]};${Z[2]}m`},oa=(I)=>I,TF2=(I,d,G)=>[I,d,G],PR=(I,d,G)=>{Object.defineProperty(I,d,{get:()=>{let Z=G();return Object.defineProperty(I,d,{value:Z,enumerable:!0,configurable:!0}),Z},enumerable:!0,configurable:!0})},Mg1,$R=(I,d,G,Z)=>{if(Mg1===void 0)Mg1=Eg1();let C=Z?10:0,W={};for(let[w,B]of Object.entries(Mg1)){let A=w==="ansi16"?"ansi":w;if(w===d)W[A]=I(G,C);else if(typeof B==="object")W[A]=I(B[d],C)}return W};function j89(){let I=new Map,d={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};d.color.gray=d.color.blackBright,d.bgColor.bgGray=d.bgColor.bgBlackBright,d.color.grey=d.color.blackBright,d.bgColor.bgGrey=d.bgColor.bgBlackBright;for(let[G,Z]of Object.entries(d)){for(let[C,W]of Object.entries(Z))d[C]={open:`\x1B[${W[0]}m`,close:`\x1B[${W[1]}m`},Z[C]=d[C],I.set(W[0],W[1]);Object.defineProperty(d,G,{value:Z,enumerable:!1})}return Object.defineProperty(d,"codes",{value:I,enumerable:!1}),d.color.close="\x1B[39m",d.bgColor.close="\x1B[49m",PR(d.color,"ansi",()=>$R(PF2,"ansi16",oa,!1)),PR(d.color,"ansi256",()=>$R($F2,"ansi256",oa,!1)),PR(d.color,"ansi16m",()=>$R(uF2,"rgb",TF2,!1)),PR(d.bgColor,"ansi",()=>$R(PF2,"ansi16",oa,!0)),PR(d.bgColor,"ansi256",()=>$R($F2,"ansi256",oa,!0)),PR(d.bgColor,"ansi16m",()=>$R(uF2,"rgb",TF2,!0)),d}Object.defineProperty(OF2,"exports",{enumerable:!0,get:j89})});var bF2=Y((xJ3,lF2)=>{var k89=(I,d,G)=>{let Z=I.indexOf(d);if(Z===-1)return I;let C=d.length,W=0,w="";do w+=I.substr(W,Z-W)+d+G,W=Z+C,Z=I.indexOf(d,W);while(Z!==-1);return w+=I.substr(W),w},x89=(I,d,G,Z)=>{let C=0,W="";do{let w=I[Z-1]==="\r";W+=I.substr(C,(w?Z-1:Z)-C)+d+(w?`\r +`:` +`)+G,C=Z+1,Z=I.indexOf(` +`,C)}while(Z!==-1);return W+=I.substr(C),W};lF2.exports={stringReplaceAll:k89,stringEncaseCRLFWithFirstIndex:x89}});var cF2=Y((cJ3,xF2)=>{var c89=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,hF2=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,p89=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,i89=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,n89=new Map([["n",` +`],["r","\r"],["t","\t"],["b","\b"],["f","\f"],["v","\v"],["0","\x00"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function kF2(I){let d=I[0]==="u",G=I[1]==="{";if(d&&!G&&I.length===5||I[0]==="x"&&I.length===3)return String.fromCharCode(parseInt(I.slice(1),16));if(d&&G)return String.fromCodePoint(parseInt(I.slice(2,-1),16));return n89.get(I)||I}function r89(I,d){let G=[],Z=d.trim().split(/\s*,\s*/g),C;for(let W of Z){let w=Number(W);if(!Number.isNaN(w))G.push(w);else if(C=W.match(p89))G.push(C[2].replace(i89,(B,A,V)=>A?kF2(A):V));else throw new Error(`Invalid Chalk template style argument: ${W} (in style '${I}')`)}return G}function a89(I){hF2.lastIndex=0;let d=[],G;while((G=hF2.exec(I))!==null){let Z=G[1];if(G[2]){let C=r89(Z,G[2]);d.push([Z].concat(C))}else d.push([Z])}return d}function jF2(I,d){let G={};for(let C of d)for(let W of C.styles)G[W[0]]=C.inverse?null:W.slice(1);let Z=I;for(let[C,W]of Object.entries(G)){if(!Array.isArray(W))continue;if(!(C in Z))throw new Error(`Unknown Chalk style: ${C}`);Z=W.length>0?Z[C](...W):Z[C]}return Z}xF2.exports=(I,d)=>{let G=[],Z=[],C=[];if(d.replace(c89,(W,w,B,A,V,X)=>{if(w)C.push(kF2(w));else if(A){let _=C.join("");C=[],Z.push(G.length===0?_:jF2(I,G)(_)),G.push({inverse:B,styles:a89(A)})}else if(V){if(G.length===0)throw new Error("Found extraneous } in Chalk template literal");Z.push(jF2(I,G)(C.join(""))),C=[],G.pop()}else C.push(X)}),Z.push(C.join("")),G.length>0){let W=`Chalk template literal is missing ${G.length} closing bracket${G.length===1?"":"s"} (\`}\`)`;throw new Error(W)}return Z.join("")}});var eF2=Y((pJ3,oF2)=>{var l$=mF2(),{stdout:Lg1,stderr:yg1}=Hx(),{stringReplaceAll:s89,stringEncaseCRLFWithFirstIndex:o89}=bF2(),{isArray:ea}=Array,iF2=["ansi","ansi","ansi256","ansi16m"],uR=Object.create(null),e89=(I,d={})=>{if(d.level&&!(Number.isInteger(d.level)&&d.level>=0&&d.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let G=Lg1?Lg1.level:0;I.level=d.level===void 0?G:d.level};class nF2{constructor(I){return rF2(I)}}var rF2=(I)=>{let d={};return e89(d,I),d.template=(...G)=>sF2(d.template,...G),Object.setPrototypeOf(d,ta.prototype),Object.setPrototypeOf(d.template,d),d.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},d.template.Instance=nF2,d.template};function ta(I){return rF2(I)}for(let[I,d]of Object.entries(l$))uR[I]={get(){let G=Is(this,Pg1(d.open,d.close,this._styler),this._isEmpty);return Object.defineProperty(this,I,{value:G}),G}};uR.visible={get(){let I=Is(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:I}),I}};var aF2=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let I of aF2)uR[I]={get(){let{level:d}=this;return function(...G){let Z=Pg1(l$.color[iF2[d]][I](...G),l$.color.close,this._styler);return Is(this,Z,this._isEmpty)}}};for(let I of aF2){let d="bg"+I[0].toUpperCase()+I.slice(1);uR[d]={get(){let{level:G}=this;return function(...Z){let C=Pg1(l$.bgColor[iF2[G]][I](...Z),l$.bgColor.close,this._styler);return Is(this,C,this._isEmpty)}}}}var t89=Object.defineProperties(()=>{},{...uR,level:{enumerable:!0,get(){return this._generator.level},set(I){this._generator.level=I}}}),Pg1=(I,d,G)=>{let Z,C;if(G===void 0)Z=I,C=d;else Z=G.openAll+I,C=d+G.closeAll;return{open:I,close:d,openAll:Z,closeAll:C,parent:G}},Is=(I,d,G)=>{let Z=(...C)=>{if(ea(C[0])&&ea(C[0].raw))return pF2(Z,sF2(Z,...C));return pF2(Z,C.length===1?""+C[0]:C.join(" "))};return Object.setPrototypeOf(Z,t89),Z._generator=I,Z._styler=d,Z._isEmpty=G,Z},pF2=(I,d)=>{if(I.level<=0||!d)return I._isEmpty?"":d;let G=I._styler;if(G===void 0)return d;let{openAll:Z,closeAll:C}=G;if(d.indexOf("\x1B")!==-1)while(G!==void 0)d=s89(d,G.close,G.open),G=G.parent;let W=d.indexOf(` +`);if(W!==-1)d=o89(d,C,Z,W);return Z+d+C},Sg1,sF2=(I,...d)=>{let[G]=d;if(!ea(G)||!ea(G.raw))return d.join(" ");let Z=d.slice(1),C=[G.raw[0]];for(let W=1;W{var I79=k4&&k4.__importDefault||function(I){return I&&I.__esModule?I:{default:I}};Object.defineProperty(k4,"__esModule",{value:!0});k4.parse=k4.stringify=k4.toJson=k4.fromJson=k4.DEFAULT_THEME=k4.plain=void 0;var i3=I79(eF2()),d79=function(I){return I};k4.plain=d79;k4.DEFAULT_THEME={keyword:i3.default.blue,built_in:i3.default.cyan,type:i3.default.cyan.dim,literal:i3.default.blue,number:i3.default.green,regexp:i3.default.red,string:i3.default.red,subst:k4.plain,symbol:k4.plain,class:i3.default.blue,function:i3.default.yellow,title:k4.plain,params:k4.plain,comment:i3.default.green,doctag:i3.default.green,meta:i3.default.grey,"meta-keyword":k4.plain,"meta-string":k4.plain,section:k4.plain,tag:i3.default.grey,name:i3.default.blue,"builtin-name":k4.plain,attr:i3.default.cyan,attribute:k4.plain,variable:k4.plain,bullet:k4.plain,code:k4.plain,emphasis:i3.default.italic,strong:i3.default.bold,formula:k4.plain,link:i3.default.underline,quote:k4.plain,"selector-tag":k4.plain,"selector-id":k4.plain,"selector-class":k4.plain,"selector-attr":k4.plain,"selector-pseudo":k4.plain,"template-tag":k4.plain,"template-variable":k4.plain,addition:i3.default.green,deletion:i3.default.red,default:k4.plain};function tF2(I){var d={};for(var G=0,Z=Object.keys(I);G{var dg2=y6&&y6.__createBinding||(Object.create?function(I,d,G,Z){if(Z===void 0)Z=G;Object.defineProperty(I,Z,{enumerable:!0,get:function(){return d[G]}})}:function(I,d,G,Z){if(Z===void 0)Z=G;I[Z]=d[G]}),C79=y6&&y6.__setModuleDefault||(Object.create?function(I,d){Object.defineProperty(I,"default",{enumerable:!0,value:d})}:function(I,d){I.default=d}),Gg2=y6&&y6.__importStar||function(I){if(I&&I.__esModule)return I;var d={};if(I!=null){for(var G in I)if(G!=="default"&&Object.prototype.hasOwnProperty.call(I,G))dg2(d,I,G)}return C79(d,I),d},W79=y6&&y6.__exportStar||function(I,d){for(var G in I)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(d,G))dg2(d,I,G)},w79=y6&&y6.__importDefault||function(I){return I&&I.__esModule?I:{default:I}};Object.defineProperty(y6,"__esModule",{value:!0});y6.supportsLanguage=y6.listLanguages=y6.highlight=void 0;var Zs=Gg2(UR()),B79=Gg2(gF2()),A79=w79(UF2()),Gs=$g1();function ug1(I,d,G){if(d===void 0)d={};switch(I.type){case"text":{var Z=I.data;if(G===void 0)return(d.default||Gs.DEFAULT_THEME.default||Gs.plain)(Z);return Z}case"tag":{var C=/hljs-(\w+)/.exec(I.attribs.class);if(C){var W=C[1],w=I.childNodes.map(function(B){return ug1(B,d,W)}).join("");return(d[W]||Gs.DEFAULT_THEME[W]||Gs.plain)(w)}return I.childNodes.map(function(B){return ug1(B,d)}).join("")}}throw new Error("Invalid node type "+I.type)}function V79(I,d){if(d===void 0)d={};var G=B79.parseFragment(I,{treeAdapter:A79.default});return G.childNodes.map(function(Z){return ug1(Z,d)}).join("")}function Zg2(I,d){if(d===void 0)d={};var G;if(d.language)G=Zs.highlight(I,{language:d.language,ignoreIllegals:d.ignoreIllegals}).value;else G=Zs.highlightAuto(I,d.languageSubset).value;return V79(G,d.theme)}y6.highlight=Zg2;function X79(){return Zs.listLanguages()}y6.listLanguages=X79;function Y79(I){return!!Zs.getLanguage(I)}y6.supportsLanguage=Y79;y6.default=Zg2;W79($g1(),y6)});var $B=Y((KK3,Hg2)=>{var Dg2=function(I){return typeof I!=="undefined"&&I!==null},M79=function(I){return typeof I==="object"},S79=function(I){return Object.prototype.toString.call(I)==="[object Object]"},L79=function(I){return typeof I==="function"},y79=function(I){return typeof I==="boolean"},P79=function(I){return I instanceof Buffer},$79=function(I){if(Dg2(I))switch(I.constructor){case Uint8Array:case Uint8ClampedArray:case Int8Array:case Uint16Array:case Int16Array:case Uint32Array:case Int32Array:case Float32Array:case Float64Array:return!0}return!1},u79=function(I){return I instanceof ArrayBuffer},T79=function(I){return typeof I==="string"&&I.length>0},O79=function(I){return typeof I==="number"&&!Number.isNaN(I)},m79=function(I){return Number.isInteger(I)},l79=function(I,d,G){return I>=d&&I<=G},b79=function(I,d){return d.includes(I)},h79=function(I,d,G){return new Error(`Expected ${d} for ${I} but received ${G} of type ${typeof G}`)},j79=function(I,d){return d.message=I.message,d};Hg2.exports={defined:Dg2,object:M79,plainObject:S79,fn:L79,bool:y79,buffer:P79,typedArray:$79,arrayBuffer:u79,string:T79,number:O79,integer:m79,inRange:l79,inArray:b79,invalidParameterError:h79,nativeError:j79}});var Jg2=Y((NK3,gg2)=>{var Fg2=()=>process.platform==="linux",Xs=null,k79=()=>{if(!Xs)if(Fg2()&&process.report){let I=process.report.excludeNetwork;process.report.excludeNetwork=!0,Xs=process.report.getReport(),process.report.excludeNetwork=I}else Xs={};return Xs};gg2.exports={isLinux:Fg2,getReport:k79}});var zg2=Y((zK3,Ng2)=>{var Kg2=B1("fs"),x79=(I)=>Kg2.readFileSync(I,"utf-8"),c79=(I)=>new Promise((d,G)=>{Kg2.readFile(I,"utf-8",(Z,C)=>{if(Z)G(Z);else d(C)})});Ng2.exports={LDD_PATH:"/usr/bin/ldd",readFileSync:x79,readFile:c79}});var _s=Y((QK3,Og2)=>{var fg2=B1("child_process"),{isLinux:lR,getReport:qg2}=Jg2(),{LDD_PATH:Ys,readFile:Rg2,readFileSync:Ug2}=zg2(),uB,TB,XH="",vg2=()=>{if(!XH)return new Promise((I)=>{fg2.exec("getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true",(d,G)=>{XH=d?" ":G,I(XH)})});return XH},Eg2=()=>{if(!XH)try{XH=fg2.execSync("getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true",{encoding:"utf8"})}catch(I){XH=" "}return XH},YH="glibc",Mg2=/LIBC[a-z0-9 \-).]*?(\d+\.\d+)/i,mR="musl",p79=(I)=>I.includes("libc.musl-")||I.includes("ld-musl-"),Sg2=()=>{let I=qg2();if(I.header&&I.header.glibcVersionRuntime)return YH;if(Array.isArray(I.sharedObjects)){if(I.sharedObjects.some(p79))return mR}return null},Lg2=(I)=>{let[d,G]=I.split(/[\r\n]+/);if(d&&d.includes(YH))return YH;if(G&&G.includes(mR))return mR;return null},yg2=(I)=>{if(I.includes("musl"))return mR;if(I.includes("GNU C Library"))return YH;return null},i79=async()=>{if(uB!==void 0)return uB;uB=null;try{let I=await Rg2(Ys);uB=yg2(I)}catch(I){}return uB},n79=()=>{if(uB!==void 0)return uB;uB=null;try{let I=Ug2(Ys);uB=yg2(I)}catch(I){}return uB},Pg2=async()=>{let I=null;if(lR()){if(I=await i79(),!I)I=Sg2();if(!I){let d=await vg2();I=Lg2(d)}}return I},$g2=()=>{let I=null;if(lR()){if(I=n79(),!I)I=Sg2();if(!I){let d=Eg2();I=Lg2(d)}}return I},r79=async()=>lR()&&await Pg2()!==YH,a79=()=>lR()&&$g2()!==YH,s79=async()=>{if(TB!==void 0)return TB;TB=null;try{let d=(await Rg2(Ys)).match(Mg2);if(d)TB=d[1]}catch(I){}return TB},o79=()=>{if(TB!==void 0)return TB;TB=null;try{let d=Ug2(Ys).match(Mg2);if(d)TB=d[1]}catch(I){}return TB},ug2=()=>{let I=qg2();if(I.header&&I.header.glibcVersionRuntime)return I.header.glibcVersionRuntime;return null},Qg2=(I)=>I.trim().split(/\s+/)[1],Tg2=(I)=>{let[d,G,Z]=I.split(/[\r\n]+/);if(d&&d.includes(YH))return Qg2(d);if(G&&Z&&G.includes(mR))return Qg2(Z);return null},e79=async()=>{let I=null;if(lR()){if(I=await s79(),!I)I=ug2();if(!I){let d=await vg2();I=Tg2(d)}}return I},t79=()=>{let I=null;if(lR()){if(I=o79(),!I)I=ug2();if(!I){let d=Eg2();I=Tg2(d)}}return I};Og2.exports={GLIBC:YH,MUSL:mR,family:Pg2,familySync:$g2,isNonGlibcLinux:r79,isNonGlibcLinuxSync:a79,version:e79,versionSync:t79}});var h$=Y((fK3,mg2)=>{var II9=typeof process==="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...I)=>console.error("SEMVER",...I):()=>{};mg2.exports=II9});var Ds=Y((qK3,lg2)=>{var dI9=Number.MAX_SAFE_INTEGER||9007199254740991,GI9=["major","premajor","minor","preminor","patch","prepatch","prerelease"];lg2.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:dI9,RELEASE_TYPES:GI9,SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var j$=Y((VX,bg2)=>{var{MAX_SAFE_COMPONENT_LENGTH:lg1,MAX_SAFE_BUILD_LENGTH:ZI9,MAX_LENGTH:CI9}=Ds(),WI9=h$();VX=bg2.exports={};var wI9=VX.re=[],BI9=VX.safeRe=[],H2=VX.src=[],F2=VX.t={},AI9=0,bg1="[a-zA-Z0-9-]",VI9=[["\\s",1],["\\d",CI9],[bg1,ZI9]],XI9=(I)=>{for(let[d,G]of VI9)I=I.split(`${d}*`).join(`${d}{0,${G}}`).split(`${d}+`).join(`${d}{1,${G}}`);return I},v4=(I,d,G)=>{let Z=XI9(d),C=AI9++;WI9(I,C,d),F2[I]=C,H2[C]=d,wI9[C]=new RegExp(d,G?"g":void 0),BI9[C]=new RegExp(Z,G?"g":void 0)};v4("NUMERICIDENTIFIER","0|[1-9]\\d*");v4("NUMERICIDENTIFIERLOOSE","\\d+");v4("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${bg1}*`);v4("MAINVERSION",`(${H2[F2.NUMERICIDENTIFIER]})\\.(${H2[F2.NUMERICIDENTIFIER]})\\.(${H2[F2.NUMERICIDENTIFIER]})`);v4("MAINVERSIONLOOSE",`(${H2[F2.NUMERICIDENTIFIERLOOSE]})\\.(${H2[F2.NUMERICIDENTIFIERLOOSE]})\\.(${H2[F2.NUMERICIDENTIFIERLOOSE]})`);v4("PRERELEASEIDENTIFIER",`(?:${H2[F2.NUMERICIDENTIFIER]}|${H2[F2.NONNUMERICIDENTIFIER]})`);v4("PRERELEASEIDENTIFIERLOOSE",`(?:${H2[F2.NUMERICIDENTIFIERLOOSE]}|${H2[F2.NONNUMERICIDENTIFIER]})`);v4("PRERELEASE",`(?:-(${H2[F2.PRERELEASEIDENTIFIER]}(?:\\.${H2[F2.PRERELEASEIDENTIFIER]})*))`);v4("PRERELEASELOOSE",`(?:-?(${H2[F2.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${H2[F2.PRERELEASEIDENTIFIERLOOSE]})*))`);v4("BUILDIDENTIFIER",`${bg1}+`);v4("BUILD",`(?:\\+(${H2[F2.BUILDIDENTIFIER]}(?:\\.${H2[F2.BUILDIDENTIFIER]})*))`);v4("FULLPLAIN",`v?${H2[F2.MAINVERSION]}${H2[F2.PRERELEASE]}?${H2[F2.BUILD]}?`);v4("FULL",`^${H2[F2.FULLPLAIN]}$`);v4("LOOSEPLAIN",`[v=\\s]*${H2[F2.MAINVERSIONLOOSE]}${H2[F2.PRERELEASELOOSE]}?${H2[F2.BUILD]}?`);v4("LOOSE",`^${H2[F2.LOOSEPLAIN]}$`);v4("GTLT","((?:<|>)?=?)");v4("XRANGEIDENTIFIERLOOSE",`${H2[F2.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);v4("XRANGEIDENTIFIER",`${H2[F2.NUMERICIDENTIFIER]}|x|X|\\*`);v4("XRANGEPLAIN",`[v=\\s]*(${H2[F2.XRANGEIDENTIFIER]})(?:\\.(${H2[F2.XRANGEIDENTIFIER]})(?:\\.(${H2[F2.XRANGEIDENTIFIER]})(?:${H2[F2.PRERELEASE]})?${H2[F2.BUILD]}?)?)?`);v4("XRANGEPLAINLOOSE",`[v=\\s]*(${H2[F2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${H2[F2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${H2[F2.XRANGEIDENTIFIERLOOSE]})(?:${H2[F2.PRERELEASELOOSE]})?${H2[F2.BUILD]}?)?)?`);v4("XRANGE",`^${H2[F2.GTLT]}\\s*${H2[F2.XRANGEPLAIN]}$`);v4("XRANGELOOSE",`^${H2[F2.GTLT]}\\s*${H2[F2.XRANGEPLAINLOOSE]}$`);v4("COERCEPLAIN",`(^|[^\\d])(\\d{1,${lg1}})(?:\\.(\\d{1,${lg1}}))?(?:\\.(\\d{1,${lg1}}))?`);v4("COERCE",`${H2[F2.COERCEPLAIN]}(?:$|[^\\d])`);v4("COERCEFULL",H2[F2.COERCEPLAIN]+`(?:${H2[F2.PRERELEASE]})?(?:${H2[F2.BUILD]})?(?:$|[^\\d])`);v4("COERCERTL",H2[F2.COERCE],!0);v4("COERCERTLFULL",H2[F2.COERCEFULL],!0);v4("LONETILDE","(?:~>?)");v4("TILDETRIM",`(\\s*)${H2[F2.LONETILDE]}\\s+`,!0);VX.tildeTrimReplace="$1~";v4("TILDE",`^${H2[F2.LONETILDE]}${H2[F2.XRANGEPLAIN]}$`);v4("TILDELOOSE",`^${H2[F2.LONETILDE]}${H2[F2.XRANGEPLAINLOOSE]}$`);v4("LONECARET","(?:\\^)");v4("CARETTRIM",`(\\s*)${H2[F2.LONECARET]}\\s+`,!0);VX.caretTrimReplace="$1^";v4("CARET",`^${H2[F2.LONECARET]}${H2[F2.XRANGEPLAIN]}$`);v4("CARETLOOSE",`^${H2[F2.LONECARET]}${H2[F2.XRANGEPLAINLOOSE]}$`);v4("COMPARATORLOOSE",`^${H2[F2.GTLT]}\\s*(${H2[F2.LOOSEPLAIN]})$|^$`);v4("COMPARATOR",`^${H2[F2.GTLT]}\\s*(${H2[F2.FULLPLAIN]})$|^$`);v4("COMPARATORTRIM",`(\\s*)${H2[F2.GTLT]}\\s*(${H2[F2.LOOSEPLAIN]}|${H2[F2.XRANGEPLAIN]})`,!0);VX.comparatorTrimReplace="$1$2$3";v4("HYPHENRANGE",`^\\s*(${H2[F2.XRANGEPLAIN]})\\s+-\\s+(${H2[F2.XRANGEPLAIN]})\\s*$`);v4("HYPHENRANGELOOSE",`^\\s*(${H2[F2.XRANGEPLAINLOOSE]})\\s+-\\s+(${H2[F2.XRANGEPLAINLOOSE]})\\s*$`);v4("STAR","(<|>)?=?\\s*\\*");v4("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");v4("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Hs=Y((RK3,hg2)=>{var YI9=Object.freeze({loose:!0}),_I9=Object.freeze({}),DI9=(I)=>{if(!I)return _I9;if(typeof I!=="object")return YI9;return I};hg2.exports=DI9});var cg2=Y((UK3,xg2)=>{var jg2=/^[0-9]+$/,kg2=(I,d)=>{let G=jg2.test(I),Z=jg2.test(d);if(G&&Z)I=+I,d=+d;return I===d?0:G&&!Z?-1:Z&&!G?1:Ikg2(d,I);xg2.exports={compareIdentifiers:kg2,rcompareIdentifiers:HI9}});var hR=Y((vK3,rg2)=>{var Fs=h$(),{MAX_LENGTH:pg2,MAX_SAFE_INTEGER:gs}=Ds(),{safeRe:ig2,t:ng2}=j$(),FI9=Hs(),{compareIdentifiers:bR}=cg2();class gW{constructor(I,d){if(d=FI9(d),I instanceof gW)if(I.loose===!!d.loose&&I.includePrerelease===!!d.includePrerelease)return I;else I=I.version;else if(typeof I!=="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof I}".`);if(I.length>pg2)throw new TypeError(`version is longer than ${pg2} characters`);Fs("SemVer",I,d),this.options=d,this.loose=!!d.loose,this.includePrerelease=!!d.includePrerelease;let G=I.trim().match(d.loose?ig2[ng2.LOOSE]:ig2[ng2.FULL]);if(!G)throw new TypeError(`Invalid Version: ${I}`);if(this.raw=I,this.major=+G[1],this.minor=+G[2],this.patch=+G[3],this.major>gs||this.major<0)throw new TypeError("Invalid major version");if(this.minor>gs||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>gs||this.patch<0)throw new TypeError("Invalid patch version");if(!G[4])this.prerelease=[];else this.prerelease=G[4].split(".").map((Z)=>{if(/^[0-9]+$/.test(Z)){let C=+Z;if(C>=0&&C=0)if(typeof this.prerelease[C]==="number")this.prerelease[C]++,C=-2;if(C===-1){if(d===this.prerelease.join(".")&&G===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(Z)}}if(d){let C=[d,Z];if(G===!1)C=[d];if(bR(this.prerelease[0],d)===0){if(isNaN(this.prerelease[1]))this.prerelease=C}else this.prerelease=C}break}default:throw new Error(`invalid increment argument: ${I}`)}if(this.raw=this.format(),this.build.length)this.raw+=`+${this.build.join(".")}`;return this}}rg2.exports=gW});var og2=Y((EK3,sg2)=>{var ag2=hR(),gI9=(I,d,G=!1)=>{if(I instanceof ag2)return I;try{return new ag2(I,d)}catch(Z){if(!G)return null;throw Z}};sg2.exports=gI9});var tg2=Y((MK3,eg2)=>{var JI9=hR(),KI9=og2(),{safeRe:Js,t:Ks}=j$(),NI9=(I,d)=>{if(I instanceof JI9)return I;if(typeof I==="number")I=String(I);if(typeof I!=="string")return null;d=d||{};let G=null;if(!d.rtl)G=I.match(d.includePrerelease?Js[Ks.COERCEFULL]:Js[Ks.COERCE]);else{let A=d.includePrerelease?Js[Ks.COERCERTLFULL]:Js[Ks.COERCERTL],V;while((V=A.exec(I))&&(!G||G.index+G[0].length!==I.length)){if(!G||V.index+V[0].length!==G.index+G[0].length)G=V;A.lastIndex=V.index+V[1].length+V[2].length}A.lastIndex=-1}if(G===null)return null;let Z=G[2],C=G[3]||"0",W=G[4]||"0",w=d.includePrerelease&&G[5]?`-${G[5]}`:"",B=d.includePrerelease&&G[6]?`+${G[6]}`:"";return KI9(`${Z}.${C}.${W}${w}${B}`,d)};eg2.exports=NI9});var sJ=Y((SK3,dJ2)=>{var IJ2=hR(),zI9=(I,d,G)=>new IJ2(I,G).compare(new IJ2(d,G));dJ2.exports=zI9});var hg1=Y((LK3,GJ2)=>{var QI9=sJ(),fI9=(I,d,G)=>QI9(I,d,G)>=0;GJ2.exports=fI9});var WJ2=Y((yK3,CJ2)=>{class ZJ2{constructor(){this.max=1000,this.map=new Map}get(I){let d=this.map.get(I);if(d===void 0)return;else return this.map.delete(I),this.map.set(I,d),d}delete(I){return this.map.delete(I)}set(I,d){if(!this.delete(I)&&d!==void 0){if(this.map.size>=this.max){let Z=this.map.keys().next().value;this.delete(Z)}this.map.set(I,d)}return this}}CJ2.exports=ZJ2});var BJ2=Y((PK3,wJ2)=>{var qI9=sJ(),RI9=(I,d,G)=>qI9(I,d,G)===0;wJ2.exports=RI9});var VJ2=Y(($K3,AJ2)=>{var UI9=sJ(),vI9=(I,d,G)=>UI9(I,d,G)!==0;AJ2.exports=vI9});var YJ2=Y((uK3,XJ2)=>{var EI9=sJ(),MI9=(I,d,G)=>EI9(I,d,G)>0;XJ2.exports=MI9});var DJ2=Y((TK3,_J2)=>{var SI9=sJ(),LI9=(I,d,G)=>SI9(I,d,G)<0;_J2.exports=LI9});var FJ2=Y((OK3,HJ2)=>{var yI9=sJ(),PI9=(I,d,G)=>yI9(I,d,G)<=0;HJ2.exports=PI9});var JJ2=Y((mK3,gJ2)=>{var $I9=BJ2(),uI9=VJ2(),TI9=YJ2(),OI9=hg1(),mI9=DJ2(),lI9=FJ2(),bI9=(I,d,G,Z)=>{switch(d){case"===":if(typeof I==="object")I=I.version;if(typeof G==="object")G=G.version;return I===G;case"!==":if(typeof I==="object")I=I.version;if(typeof G==="object")G=G.version;return I!==G;case"":case"=":case"==":return $I9(I,G,Z);case"!=":return uI9(I,G,Z);case">":return TI9(I,G,Z);case">=":return OI9(I,G,Z);case"<":return mI9(I,G,Z);case"<=":return lI9(I,G,Z);default:throw new TypeError(`Invalid operator: ${d}`)}};gJ2.exports=bI9});var RJ2=Y((lK3,qJ2)=>{var k$=Symbol("SemVer ANY");class Ns{static get ANY(){return k$}constructor(I,d){if(d=KJ2(d),I instanceof Ns)if(I.loose===!!d.loose)return I;else I=I.value;if(I=I.trim().split(/\s+/).join(" "),kg1("comparator",I,d),this.options=d,this.loose=!!d.loose,this.parse(I),this.semver===k$)this.value="";else this.value=this.operator+this.semver.version;kg1("comp",this)}parse(I){let d=this.options.loose?NJ2[zJ2.COMPARATORLOOSE]:NJ2[zJ2.COMPARATOR],G=I.match(d);if(!G)throw new TypeError(`Invalid comparator: ${I}`);if(this.operator=G[1]!==void 0?G[1]:"",this.operator==="=")this.operator="";if(!G[2])this.semver=k$;else this.semver=new QJ2(G[2],this.options.loose)}toString(){return this.value}test(I){if(kg1("Comparator.test",I,this.options.loose),this.semver===k$||I===k$)return!0;if(typeof I==="string")try{I=new QJ2(I,this.options)}catch(d){return!1}return jg1(I,this.operator,this.semver,this.options)}intersects(I,d){if(!(I instanceof Ns))throw new TypeError("a Comparator is required");if(this.operator===""){if(this.value==="")return!0;return new fJ2(I.value,d).test(this.value)}else if(I.operator===""){if(I.value==="")return!0;return new fJ2(this.value,d).test(I.semver)}if(d=KJ2(d),d.includePrerelease&&(this.value==="<0.0.0-0"||I.value==="<0.0.0-0"))return!1;if(!d.includePrerelease&&(this.value.startsWith("<0.0.0")||I.value.startsWith("<0.0.0")))return!1;if(this.operator.startsWith(">")&&I.operator.startsWith(">"))return!0;if(this.operator.startsWith("<")&&I.operator.startsWith("<"))return!0;if(this.semver.version===I.semver.version&&this.operator.includes("=")&&I.operator.includes("="))return!0;if(jg1(this.semver,"<",I.semver,d)&&this.operator.startsWith(">")&&I.operator.startsWith("<"))return!0;if(jg1(this.semver,">",I.semver,d)&&this.operator.startsWith("<")&&I.operator.startsWith(">"))return!0;return!1}}qJ2.exports=Ns;var KJ2=Hs(),{safeRe:NJ2,t:zJ2}=j$(),jg1=JJ2(),kg1=h$(),QJ2=hR(),fJ2=xg1()});var xg1=Y((bK3,MJ2)=>{var hI9=/\s+/g;class x${constructor(I,d){if(d=kI9(d),I instanceof x$)if(I.loose===!!d.loose&&I.includePrerelease===!!d.includePrerelease)return I;else return new x$(I.raw,d);if(I instanceof cg1)return this.raw=I.value,this.set=[[I]],this.formatted=void 0,this;if(this.options=d,this.loose=!!d.loose,this.includePrerelease=!!d.includePrerelease,this.raw=I.trim().replace(hI9," "),this.set=this.raw.split("||").map((G)=>this.parseRange(G.trim())).filter((G)=>G.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let G=this.set[0];if(this.set=this.set.filter((Z)=>!vJ2(Z[0])),this.set.length===0)this.set=[G];else if(this.set.length>1){for(let Z of this.set)if(Z.length===1&&aI9(Z[0])){this.set=[Z];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let I=0;I0)this.formatted+="||";let d=this.set[I];for(let G=0;G0)this.formatted+=" ";this.formatted+=d[G].toString().trim()}}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(I){let G=((this.options.includePrerelease&&nI9)|(this.options.loose&&rI9))+":"+I,Z=UJ2.get(G);if(Z)return Z;let C=this.options.loose,W=C?Hd[gI.HYPHENRANGELOOSE]:Hd[gI.HYPHENRANGE];I=I.replace(W,Wd9(this.options.includePrerelease)),c9("hyphen replace",I),I=I.replace(Hd[gI.COMPARATORTRIM],cI9),c9("comparator trim",I),I=I.replace(Hd[gI.TILDETRIM],pI9),c9("tilde trim",I),I=I.replace(Hd[gI.CARETTRIM],iI9),c9("caret trim",I);let w=I.split(" ").map((X)=>sI9(X,this.options)).join(" ").split(/\s+/).map((X)=>Cd9(X,this.options));if(C)w=w.filter((X)=>{return c9("loose invalid filter",X,this.options),!!X.match(Hd[gI.COMPARATORLOOSE])});c9("range list",w);let B=new Map,A=w.map((X)=>new cg1(X,this.options));for(let X of A){if(vJ2(X))return[X];B.set(X.value,X)}if(B.size>1&&B.has(""))B.delete("");let V=[...B.values()];return UJ2.set(G,V),V}intersects(I,d){if(!(I instanceof x$))throw new TypeError("a Range is required");return this.set.some((G)=>{return EJ2(G,d)&&I.set.some((Z)=>{return EJ2(Z,d)&&G.every((C)=>{return Z.every((W)=>{return C.intersects(W,d)})})})})}test(I){if(!I)return!1;if(typeof I==="string")try{I=new xI9(I,this.options)}catch(d){return!1}for(let d=0;dI.value==="<0.0.0-0",aI9=(I)=>I.value==="",EJ2=(I,d)=>{let G=!0,Z=I.slice(),C=Z.pop();while(G&&Z.length)G=Z.every((W)=>{return C.intersects(W,d)}),C=Z.pop();return G},sI9=(I,d)=>{return c9("comp",I,d),I=tI9(I,d),c9("caret",I),I=oI9(I,d),c9("tildes",I),I=dd9(I,d),c9("xrange",I),I=Zd9(I,d),c9("stars",I),I},JI=(I)=>!I||I.toLowerCase()==="x"||I==="*",oI9=(I,d)=>{return I.trim().split(/\s+/).map((G)=>eI9(G,d)).join(" ")},eI9=(I,d)=>{let G=d.loose?Hd[gI.TILDELOOSE]:Hd[gI.TILDE];return I.replace(G,(Z,C,W,w,B)=>{c9("tilde",I,Z,C,W,w,B);let A;if(JI(C))A="";else if(JI(W))A=`>=${C}.0.0 <${+C+1}.0.0-0`;else if(JI(w))A=`>=${C}.${W}.0 <${C}.${+W+1}.0-0`;else if(B)c9("replaceTilde pr",B),A=`>=${C}.${W}.${w}-${B} <${C}.${+W+1}.0-0`;else A=`>=${C}.${W}.${w} <${C}.${+W+1}.0-0`;return c9("tilde return",A),A})},tI9=(I,d)=>{return I.trim().split(/\s+/).map((G)=>Id9(G,d)).join(" ")},Id9=(I,d)=>{c9("caret",I,d);let G=d.loose?Hd[gI.CARETLOOSE]:Hd[gI.CARET],Z=d.includePrerelease?"-0":"";return I.replace(G,(C,W,w,B,A)=>{c9("caret",I,C,W,w,B,A);let V;if(JI(W))V="";else if(JI(w))V=`>=${W}.0.0${Z} <${+W+1}.0.0-0`;else if(JI(B))if(W==="0")V=`>=${W}.${w}.0${Z} <${W}.${+w+1}.0-0`;else V=`>=${W}.${w}.0${Z} <${+W+1}.0.0-0`;else if(A)if(c9("replaceCaret pr",A),W==="0")if(w==="0")V=`>=${W}.${w}.${B}-${A} <${W}.${w}.${+B+1}-0`;else V=`>=${W}.${w}.${B}-${A} <${W}.${+w+1}.0-0`;else V=`>=${W}.${w}.${B}-${A} <${+W+1}.0.0-0`;else if(c9("no pr"),W==="0")if(w==="0")V=`>=${W}.${w}.${B}${Z} <${W}.${w}.${+B+1}-0`;else V=`>=${W}.${w}.${B}${Z} <${W}.${+w+1}.0-0`;else V=`>=${W}.${w}.${B} <${+W+1}.0.0-0`;return c9("caret return",V),V})},dd9=(I,d)=>{return c9("replaceXRanges",I,d),I.split(/\s+/).map((G)=>Gd9(G,d)).join(" ")},Gd9=(I,d)=>{I=I.trim();let G=d.loose?Hd[gI.XRANGELOOSE]:Hd[gI.XRANGE];return I.replace(G,(Z,C,W,w,B,A)=>{c9("xRange",I,Z,C,W,w,B,A);let V=JI(W),X=V||JI(w),_=X||JI(B),F=_;if(C==="="&&F)C="";if(A=d.includePrerelease?"-0":"",V)if(C===">"||C==="<")Z="<0.0.0-0";else Z="*";else if(C&&F){if(X)w=0;if(B=0,C===">")if(C=">=",X)W=+W+1,w=0,B=0;else w=+w+1,B=0;else if(C==="<=")if(C="<",X)W=+W+1;else w=+w+1;if(C==="<")A="-0";Z=`${C+W}.${w}.${B}${A}`}else if(X)Z=`>=${W}.0.0${A} <${+W+1}.0.0-0`;else if(_)Z=`>=${W}.${w}.0${A} <${W}.${+w+1}.0-0`;return c9("xRange return",Z),Z})},Zd9=(I,d)=>{return c9("replaceStars",I,d),I.trim().replace(Hd[gI.STAR],"")},Cd9=(I,d)=>{return c9("replaceGTE0",I,d),I.trim().replace(Hd[d.includePrerelease?gI.GTE0PRE:gI.GTE0],"")},Wd9=(I)=>(d,G,Z,C,W,w,B,A,V,X,_,F)=>{if(JI(Z))G="";else if(JI(C))G=`>=${Z}.0.0${I?"-0":""}`;else if(JI(W))G=`>=${Z}.${C}.0${I?"-0":""}`;else if(w)G=`>=${G}`;else G=`>=${G}${I?"-0":""}`;if(JI(V))A="";else if(JI(X))A=`<${+V+1}.0.0-0`;else if(JI(_))A=`<${V}.${+X+1}.0-0`;else if(F)A=`<=${V}.${X}.${_}-${F}`;else if(I)A=`<${V}.${X}.${+_+1}-0`;else A=`<=${A}`;return`${G} ${A}`.trim()},wd9=(I,d,G)=>{for(let Z=0;Z0){let C=I[Z].semver;if(C.major===d.major&&C.minor===d.minor&&C.patch===d.patch)return!0}}return!1}return!0}});var LJ2=Y((hK3,SJ2)=>{var Bd9=xg1(),Ad9=(I,d,G)=>{try{d=new Bd9(d,G)}catch(Z){return!1}return d.test(I)};SJ2.exports=Ad9});var pg1=Y((jK3,Vd9)=>{Vd9.exports={name:"sharp",description:"High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, GIF, AVIF and TIFF images",version:"0.33.5",author:"Lovell Fuller ",homepage:"https://sharp.pixelplumbing.com",contributors:["Pierre Inglebert ","Jonathan Ong ","Chanon Sajjamanochai ","Juliano Julio ","Daniel Gasienica ","Julian Walker ","Amit Pitaru ","Brandon Aaron ","Andreas Lind ","Maurus Cuelenaere ","Linus Unnebäck ","Victor Mateevitsi ","Alaric Holloway ","Bernhard K. Weisshuhn ","Chris Riley ","David Carley ","John Tobin ","Kenton Gray ","Felix Bünemann ","Samy Al Zahrani ","Chintan Thakkar ","F. Orlando Galashan ","Kleis Auke Wolthuizen ","Matt Hirsch ","Matthias Thoemmes ","Patrick Paskaris ","Jérémy Lal ","Rahul Nanwani ","Alice Monday ","Kristo Jorgenson ","YvesBos ","Guy Maliar ","Nicolas Coden ","Matt Parrish ","Marcel Bretschneider ","Matthew McEachen ","Jarda Kotěšovec ","Kenric D'Souza ","Oleh Aleinyk ","Marcel Bretschneider ","Andrea Bianco ","Rik Heywood ","Thomas Parisot ","Nathan Graves ","Tom Lokhorst ","Espen Hovlandsdal ","Sylvain Dumont ","Alun Davies ","Aidan Hoolachan ","Axel Eirola ","Freezy ","Daiz ","Julian Aubourg ","Keith Belovay ","Michael B. Klein ","Jordan Prudhomme ","Ilya Ovdin ","Andargor ","Paul Neave ","Brendan Kennedy ","Brychan Bennett-Odlum ","Edward Silverton ","Roman Malieiev ","Tomas Szabo ","Robert O'Rourke ","Guillermo Alfonso Varela Chouciño ","Christian Flintrup ","Manan Jadhav ","Leon Radley ","alza54 ","Jacob Smith ","Michael Nutt ","Brad Parham ","Taneli Vatanen ","Joris Dugué ","Chris Banks ","Ompal Singh ","Brodan ","Ankur Parihar ","Brahim Ait elhaj ","Mart Jansink ","Lachlan Newman ","Dennis Beatty ","Ingvar Stepanyan ","Don Denton "],scripts:{install:"node install/check",clean:"rm -rf src/build/ .nyc_output/ coverage/ test/fixtures/output.*",test:"npm run test-lint && npm run test-unit && npm run test-licensing && npm run test-types","test-lint":"semistandard && cpplint","test-unit":"nyc --reporter=lcov --reporter=text --check-coverage --branches=100 mocha","test-licensing":'license-checker --production --summary --onlyAllow="Apache-2.0;BSD;ISC;LGPL-3.0-or-later;MIT"',"test-leak":"./test/leak/leak.sh","test-types":"tsd","package-from-local-build":"node npm/from-local-build","package-from-github-release":"node npm/from-github-release","docs-build":"node docs/build && node docs/search-index/build","docs-serve":"cd docs && npx serve","docs-publish":"cd docs && npx firebase-tools deploy --project pixelplumbing --only hosting:pixelplumbing-sharp"},type:"commonjs",main:"lib/index.js",types:"lib/index.d.ts",files:["install","lib","src/*.{cc,h,gyp}"],repository:{type:"git",url:"git://github.com/lovell/sharp.git"},keywords:["jpeg","png","webp","avif","tiff","gif","svg","jp2","dzi","image","resize","thumbnail","crop","embed","libvips","vips"],dependencies:{color:"^4.2.3","detect-libc":"^2.0.3",semver:"^7.6.3"},optionalDependencies:{"@img/sharp-darwin-arm64":"0.33.5","@img/sharp-darwin-x64":"0.33.5","@img/sharp-libvips-darwin-arm64":"1.0.4","@img/sharp-libvips-darwin-x64":"1.0.4","@img/sharp-libvips-linux-arm":"1.0.5","@img/sharp-libvips-linux-arm64":"1.0.4","@img/sharp-libvips-linux-s390x":"1.0.4","@img/sharp-libvips-linux-x64":"1.0.4","@img/sharp-libvips-linuxmusl-arm64":"1.0.4","@img/sharp-libvips-linuxmusl-x64":"1.0.4","@img/sharp-linux-arm":"0.33.5","@img/sharp-linux-arm64":"0.33.5","@img/sharp-linux-s390x":"0.33.5","@img/sharp-linux-x64":"0.33.5","@img/sharp-linuxmusl-arm64":"0.33.5","@img/sharp-linuxmusl-x64":"0.33.5","@img/sharp-wasm32":"0.33.5","@img/sharp-win32-ia32":"0.33.5","@img/sharp-win32-x64":"0.33.5"},devDependencies:{"@emnapi/runtime":"^1.2.0","@img/sharp-libvips-dev":"1.0.4","@img/sharp-libvips-dev-wasm32":"1.0.5","@img/sharp-libvips-win32-ia32":"1.0.4","@img/sharp-libvips-win32-x64":"1.0.4","@types/node":"*",async:"^3.2.5",cc:"^3.0.1",emnapi:"^1.2.0","exif-reader":"^2.0.1","extract-zip":"^2.0.1",icc:"^3.0.0","jsdoc-to-markdown":"^8.0.3","license-checker":"^25.0.1",mocha:"^10.7.3","node-addon-api":"^8.1.0",nyc:"^17.0.0",prebuild:"^13.0.1",semistandard:"^17.0.0","tar-fs":"^3.0.6",tsd:"^0.31.1"},license:"Apache-2.0",engines:{node:"^18.17.0 || ^20.3.0 || >=21.0.0"},config:{libvips:">=8.15.3"},funding:{url:"https://opencollective.com/libvips"},binary:{napi_versions:[9]},semistandard:{env:["mocha"]},cc:{linelength:"120",filter:["build/include"]},nyc:{include:["lib"]},tsd:{directory:"test/types/"}}});var ng1=Y((kK3,hJ2)=>{var{spawnSync:zs}=B1("node:child_process"),{createHash:Xd9}=B1("node:crypto"),uJ2=tg2(),Yd9=hg1(),_d9=LJ2(),yJ2=_s(),{config:Dd9,engines:PJ2,optionalDependencies:Hd9}=pg1(),Fd9=process.env.npm_package_config_libvips||Dd9.libvips,TJ2=uJ2(Fd9).version,gd9=["darwin-arm64","darwin-x64","linux-arm","linux-arm64","linux-s390x","linux-x64","linuxmusl-arm64","linuxmusl-x64","win32-ia32","win32-x64"],Qs={encoding:"utf8",shell:!0},Jd9=(I)=>{if(I instanceof Error)console.error(`sharp: Installation error: ${I.message}`);else console.log(`sharp: ${I}`)},OJ2=()=>yJ2.isNonGlibcLinuxSync()?yJ2.familySync():"",Kd9=()=>`${process.platform}${OJ2()}-${process.arch}`,jR=()=>{if(mJ2())return"wasm32";let{npm_config_arch:I,npm_config_platform:d,npm_config_libc:G}=process.env,Z=typeof G==="string"?G:OJ2();return`${d||process.platform}${Z}-${I||process.arch}`},Nd9=()=>{try{return B1(`@img/sharp-libvips-dev-${jR()}/include`)}catch{try{return (()=>{throw new Error("Cannot require module "+"@img/sharp-libvips-dev/include");})()}catch{}}return""},zd9=()=>{try{return (()=>{throw new Error("Cannot require module "+"@img/sharp-libvips-dev/cplusplus");})()}catch{}return""},Qd9=()=>{try{return B1(`@img/sharp-libvips-dev-${jR()}/lib`)}catch{try{return B1(`@img/sharp-libvips-${jR()}/lib`)}catch{}}return""},fd9=()=>{if(process.release?.name==="node"&&process.versions){if(!_d9(process.versions.node,PJ2.node))return{found:process.versions.node,expected:PJ2.node}}},mJ2=()=>{let{CC:I}=process.env;return Boolean(I&&I.endsWith("/emcc"))},qd9=()=>{if(process.platform==="darwin"&&process.arch==="x64")return(zs("sysctl sysctl.proc_translated",Qs).stdout||"").trim()==="sysctl.proc_translated: 1";return!1},$J2=(I)=>Xd9("sha512").update(I).digest("hex"),Rd9=()=>{try{let I=$J2(`imgsharp-libvips-${jR()}`),d=uJ2(Hd9[`@img/sharp-libvips-${jR()}`]).version;return $J2(`${I}npm:${d}`).slice(0,10)}catch{}return""},Ud9=()=>zs(`node-gyp rebuild --directory=src ${mJ2()?"--nodedir=emscripten":""}`,{...Qs,stdio:"inherit"}).status,lJ2=()=>{if(process.platform!=="win32")return(zs("pkg-config --modversion vips-cpp",{...Qs,env:{...process.env,PKG_CONFIG_PATH:bJ2()}}).stdout||"").trim();else return""},bJ2=()=>{if(process.platform!=="win32")return[(zs('which brew >/dev/null 2>&1 && brew environment --plain | grep PKG_CONFIG_LIBDIR | cut -d" " -f2',Qs).stdout||"").trim(),process.env.PKG_CONFIG_PATH,"/usr/local/lib/pkgconfig","/usr/lib/pkgconfig","/usr/local/libdata/pkgconfig","/usr/libdata/pkgconfig"].filter(Boolean).join(":");else return""},ig1=(I,d,G)=>{if(G)G(`Detected ${d}, skipping search for globally-installed libvips`);return I},vd9=(I)=>{if(Boolean(process.env.SHARP_IGNORE_GLOBAL_LIBVIPS)===!0)return ig1(!1,"SHARP_IGNORE_GLOBAL_LIBVIPS",I);if(Boolean(process.env.SHARP_FORCE_GLOBAL_LIBVIPS)===!0)return ig1(!0,"SHARP_FORCE_GLOBAL_LIBVIPS",I);if(qd9())return ig1(!1,"Rosetta",I);let d=lJ2();return!!d&&Yd9(d,TJ2)};hJ2.exports={minimumLibvipsVersion:TJ2,prebuiltPlatforms:gd9,buildPlatformArch:jR,buildSharpLibvipsIncludeDir:Nd9,buildSharpLibvipsCPlusPlusDir:zd9,buildSharpLibvipsLibDir:Qd9,isUnsupportedNodeRuntime:fd9,runtimePlatformArch:Kd9,log:Jd9,yarnLocator:Rd9,spawnRebuild:Ud9,globalLibvipsVersion:lJ2,pkgConfigPath:bJ2,useGlobalLibvips:vd9}});var c$=Y((cK3,kJ2)=>{var{familySync:Ed9,versionSync:Md9}=_s(),{runtimePlatformArch:Sd9,isUnsupportedNodeRuntime:jJ2,prebuiltPlatforms:Ld9,minimumLibvipsVersion:yd9}=ng1(),oJ=Sd9(),Pd9=[`../src/build/Release/sharp-${oJ}.node`,"../src/build/Release/sharp-wasm32.node",`@img/sharp-${oJ}/sharp.node`,"@img/sharp-wasm32/sharp.node"],rg1,fs=[];for(let I of Pd9)try{rg1=B1(I);break}catch(d){fs.push(d)}if(rg1)kJ2.exports=rg1;else{let[I,d,G]=["linux","darwin","win32"].map((W)=>oJ.startsWith(W)),Z=[`Could not load the "sharp" module using the ${oJ} runtime`];fs.forEach((W)=>{if(W.code!=="MODULE_NOT_FOUND")Z.push(`${W.code}: ${W.message}`)});let C=fs.map((W)=>W.message).join(" ");if(Z.push("Possible solutions:"),jJ2()){let{found:W,expected:w}=jJ2();Z.push("- Please upgrade Node.js:",` Found ${W}`,` Requires ${w}`)}else if(Ld9.includes(oJ)){let[W,w]=oJ.split("-"),B=W.endsWith("musl")?" --libc=musl":"";Z.push("- Ensure optional dependencies can be installed:"," npm install --include=optional sharp","- Ensure your package manager supports multi-platform installation:"," See https://sharp.pixelplumbing.com/install#cross-platform","- Add platform-specific dependencies:",` npm install --os=${W.replace("musl","")}${B} --cpu=${w} sharp`)}else Z.push(`- Manually install libvips >= ${yd9}`,"- Add experimental WebAssembly-based dependencies:"," npm install --cpu=wasm32 sharp"," npm install @img/sharp-wasm32");if(I&&/(symbol not found|CXXABI_)/i.test(C))try{let{config:W}=B1(`@img/sharp-libvips-${oJ}/package`),w=`${Ed9()} ${Md9()}`,B=`${W.musl?"musl":"glibc"} ${W.musl||W.glibc}`;Z.push("- Update your OS:",` Found ${w}`,` Requires ${B}`)}catch(W){}if(I&&/\/snap\/core[0-9]{2}/.test(C))Z.push("- Remove the Node.js Snap, which does not support native modules"," snap remove node");if(d&&/Incompatible library version/.test(C))Z.push("- Update Homebrew:"," brew update && brew upgrade vips");if(fs.some((W)=>W.code==="ERR_DLOPEN_DISABLED"))Z.push("- Run Node.js without using the --no-addons flag");if(G&&/The specified procedure could not be found/.test(C))Z.push("- Using the canvas package on Windows?"," See https://sharp.pixelplumbing.com/install#canvas-and-windows","- Check for outdated versions of sharp in the dependency tree:"," npm ls sharp");throw Z.push("- Consult the installation documentation:"," See https://sharp.pixelplumbing.com/install"),new Error(Z.join(` +`))}});var cJ2=Y((iK3,xJ2)=>{var $d9=B1("node:util"),ag1=B1("node:stream"),ud9=$B();c$();var Td9=$d9.debuglog("sharp"),eJ=function(I,d){if(arguments.length===1&&!ud9.defined(I))throw new Error("Invalid input");if(!(this instanceof eJ))return new eJ(I,d);return ag1.Duplex.call(this),this.options={topOffsetPre:-1,leftOffsetPre:-1,widthPre:-1,heightPre:-1,topOffsetPost:-1,leftOffsetPost:-1,widthPost:-1,heightPost:-1,width:-1,height:-1,canvas:"crop",position:0,resizeBackground:[0,0,0,255],useExifOrientation:!1,angle:0,rotationAngle:0,rotationBackground:[0,0,0,255],rotateBeforePreExtract:!1,flip:!1,flop:!1,extendTop:0,extendBottom:0,extendLeft:0,extendRight:0,extendBackground:[0,0,0,255],extendWith:"background",withoutEnlargement:!1,withoutReduction:!1,affineMatrix:[],affineBackground:[0,0,0,255],affineIdx:0,affineIdy:0,affineOdx:0,affineOdy:0,affineInterpolator:this.constructor.interpolators.bilinear,kernel:"lanczos3",fastShrinkOnLoad:!0,tint:[-1,0,0,0],flatten:!1,flattenBackground:[0,0,0],unflatten:!1,negate:!1,negateAlpha:!0,medianSize:0,blurSigma:0,precision:"integer",minAmpl:0.2,sharpenSigma:0,sharpenM1:1,sharpenM2:2,sharpenX1:2,sharpenY2:10,sharpenY3:20,threshold:0,thresholdGrayscale:!0,trimBackground:[],trimThreshold:-1,trimLineArt:!1,gamma:0,gammaOut:0,greyscale:!1,normalise:!1,normaliseLower:1,normaliseUpper:99,claheWidth:0,claheHeight:0,claheMaxSlope:3,brightness:1,saturation:1,hue:0,lightness:0,booleanBufferIn:null,booleanFileIn:"",joinChannelIn:[],extractChannel:-1,removeAlpha:!1,ensureAlpha:-1,colourspace:"srgb",colourspacePipeline:"last",composite:[],fileOut:"",formatOut:"input",streamOut:!1,keepMetadata:0,withMetadataOrientation:-1,withMetadataDensity:0,withIccProfile:"",withExif:{},withExifMerge:!0,resolveWithObject:!1,jpegQuality:80,jpegProgressive:!1,jpegChromaSubsampling:"4:2:0",jpegTrellisQuantisation:!1,jpegOvershootDeringing:!1,jpegOptimiseScans:!1,jpegOptimiseCoding:!0,jpegQuantisationTable:0,pngProgressive:!1,pngCompressionLevel:6,pngAdaptiveFiltering:!1,pngPalette:!1,pngQuality:100,pngEffort:7,pngBitdepth:8,pngDither:1,jp2Quality:80,jp2TileHeight:512,jp2TileWidth:512,jp2Lossless:!1,jp2ChromaSubsampling:"4:4:4",webpQuality:80,webpAlphaQuality:100,webpLossless:!1,webpNearLossless:!1,webpSmartSubsample:!1,webpPreset:"default",webpEffort:4,webpMinSize:!1,webpMixed:!1,gifBitdepth:8,gifEffort:7,gifDither:1,gifInterFrameMaxError:0,gifInterPaletteMaxError:3,gifReuse:!0,gifProgressive:!1,tiffQuality:80,tiffCompression:"jpeg",tiffPredictor:"horizontal",tiffPyramid:!1,tiffMiniswhite:!1,tiffBitdepth:8,tiffTile:!1,tiffTileHeight:256,tiffTileWidth:256,tiffXres:1,tiffYres:1,tiffResolutionUnit:"inch",heifQuality:50,heifLossless:!1,heifCompression:"av1",heifEffort:4,heifChromaSubsampling:"4:4:4",heifBitdepth:8,jxlDistance:1,jxlDecodingTier:0,jxlEffort:7,jxlLossless:!1,rawDepth:"uchar",tileSize:256,tileOverlap:0,tileContainer:"fs",tileLayout:"dz",tileFormat:"last",tileDepth:"last",tileAngle:0,tileSkipBlanks:-1,tileBackground:[255,255,255,255],tileCentre:!1,tileId:"https://example.com/iiif",tileBasename:"",timeoutSeconds:0,linearA:[],linearB:[],debuglog:(G)=>{this.emit("warning",G),Td9(G)},queueListener:function(G){eJ.queue.emit("change",G)}},this.options.input=this._createInputDescriptor(I,d,{allowStream:!0}),this};Object.setPrototypeOf(eJ.prototype,ag1.Duplex.prototype);Object.setPrototypeOf(eJ,ag1.Duplex);function Od9(){let I=this.constructor.call(),{debuglog:d,queueListener:G,...Z}=this.options;if(I.options=structuredClone(Z),I.options.debuglog=d,I.options.queueListener=G,this._isStreamInput())this.on("finish",()=>{this._flattenBufferIn(),I.options.input.buffer=this.options.input.buffer,I.emit("finish")});return I}Object.assign(eJ.prototype,{clone:Od9});xJ2.exports=eJ});var iJ2=Y((nK3,pJ2)=>{pJ2.exports=function I(d){if(!d||typeof d==="string")return!1;return d instanceof Array||Array.isArray(d)||d.length>=0&&(d.splice instanceof Function||Object.getOwnPropertyDescriptor(d,d.length-1)&&d.constructor.name!=="String")}});var aJ2=Y((rK3,rJ2)=>{var md9=iJ2(),ld9=Array.prototype.concat,bd9=Array.prototype.slice,nJ2=rJ2.exports=function I(d){var G=[];for(var Z=0,C=d.length;Z{var p$=Rg1(),i$=aJ2(),sJ2=Object.hasOwnProperty,oJ2=Object.create(null);for(qs in p$)if(sJ2.call(p$,qs))oJ2[p$[qs]]=qs;var qs,YG=eJ2.exports={to:{},get:{}};YG.get=function(I){var d=I.substring(0,3).toLowerCase(),G,Z;switch(d){case"hsl":G=YG.get.hsl(I),Z="hsl";break;case"hwb":G=YG.get.hwb(I),Z="hwb";break;default:G=YG.get.rgb(I),Z="rgb";break}if(!G)return null;return{model:Z,value:G}};YG.get.rgb=function(I){if(!I)return null;var d=/^#([a-f0-9]{3,4})$/i,G=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,Z=/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,C=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,W=/^(\w+)$/,w=[0,0,0,1],B,A,V;if(B=I.match(G)){V=B[2],B=B[1];for(A=0;A<3;A++){var X=A*2;w[A]=parseInt(B.slice(X,X+2),16)}if(V)w[3]=parseInt(V,16)/255}else if(B=I.match(d)){B=B[1],V=B[3];for(A=0;A<3;A++)w[A]=parseInt(B[A]+B[A],16);if(V)w[3]=parseInt(V+V,16)/255}else if(B=I.match(Z)){for(A=0;A<3;A++)w[A]=parseInt(B[A+1],0);if(B[4])if(B[5])w[3]=parseFloat(B[4])*0.01;else w[3]=parseFloat(B[4])}else if(B=I.match(C)){for(A=0;A<3;A++)w[A]=Math.round(parseFloat(B[A+1])*2.55);if(B[4])if(B[5])w[3]=parseFloat(B[4])*0.01;else w[3]=parseFloat(B[4])}else if(B=I.match(W)){if(B[1]==="transparent")return[0,0,0,0];if(!sJ2.call(p$,B[1]))return null;return w=p$[B[1]],w[3]=1,w}else return null;for(A=0;A<3;A++)w[A]=_H(w[A],0,255);return w[3]=_H(w[3],0,1),w};YG.get.hsl=function(I){if(!I)return null;var d=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,G=I.match(d);if(G){var Z=parseFloat(G[4]),C=(parseFloat(G[1])%360+360)%360,W=_H(parseFloat(G[2]),0,100),w=_H(parseFloat(G[3]),0,100),B=_H(isNaN(Z)?1:Z,0,1);return[C,W,w,B]}return null};YG.get.hwb=function(I){if(!I)return null;var d=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,G=I.match(d);if(G){var Z=parseFloat(G[4]),C=(parseFloat(G[1])%360+360)%360,W=_H(parseFloat(G[2]),0,100),w=_H(parseFloat(G[3]),0,100),B=_H(isNaN(Z)?1:Z,0,1);return[C,W,w,B]}return null};YG.to.hex=function(){var I=i$(arguments);return"#"+Rs(I[0])+Rs(I[1])+Rs(I[2])+(I[3]<1?Rs(Math.round(I[3]*255)):"")};YG.to.rgb=function(){var I=i$(arguments);return I.length<4||I[3]===1?"rgb("+Math.round(I[0])+", "+Math.round(I[1])+", "+Math.round(I[2])+")":"rgba("+Math.round(I[0])+", "+Math.round(I[1])+", "+Math.round(I[2])+", "+I[3]+")"};YG.to.rgb.percent=function(){var I=i$(arguments),d=Math.round(I[0]/255*100),G=Math.round(I[1]/255*100),Z=Math.round(I[2]/255*100);return I.length<4||I[3]===1?"rgb("+d+"%, "+G+"%, "+Z+"%)":"rgba("+d+"%, "+G+"%, "+Z+"%, "+I[3]+")"};YG.to.hsl=function(){var I=i$(arguments);return I.length<4||I[3]===1?"hsl("+I[0]+", "+I[1]+"%, "+I[2]+"%)":"hsla("+I[0]+", "+I[1]+"%, "+I[2]+"%, "+I[3]+")"};YG.to.hwb=function(){var I=i$(arguments),d="";if(I.length>=4&&I[3]!==1)d=", "+I[3];return"hwb("+I[0]+", "+I[1]+"%, "+I[2]+"%"+d+")"};YG.to.keyword=function(I){return oJ2[I.slice(0,3)]};function _H(I,d,G){return Math.min(Math.max(d,I),G)}function Rs(I){var d=Math.round(I).toString(16).toUpperCase();return d.length<2?"0"+d:d}});var vs=Y((sK3,dK2)=>{var kR=tJ2(),_G=Eg1(),IK2=["keyword","gray","hex"],sg1={};for(let I of Object.keys(_G))sg1[[..._G[I].labels].sort().join("")]=I;var Us={};function f8(I,d){if(!(this instanceof f8))return new f8(I,d);if(d&&d in IK2)d=null;if(d&&!(d in _G))throw new Error("Unknown model: "+d);let G,Z;if(I==null)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(I instanceof f8)this.model=I.model,this.color=[...I.color],this.valpha=I.valpha;else if(typeof I==="string"){let C=kR.get(I);if(C===null)throw new Error("Unable to parse color from string: "+I);this.model=C.model,Z=_G[this.model].channels,this.color=C.value.slice(0,Z),this.valpha=typeof C.value[Z]==="number"?C.value[Z]:1}else if(I.length>0){this.model=d||"rgb",Z=_G[this.model].channels;let C=Array.prototype.slice.call(I,0,Z);this.color=og1(C,Z),this.valpha=typeof I[Z]==="number"?I[Z]:1}else if(typeof I==="number")this.model="rgb",this.color=[I>>16&255,I>>8&255,I&255],this.valpha=1;else{this.valpha=1;let C=Object.keys(I);if("alpha"in I)C.splice(C.indexOf("alpha"),1),this.valpha=typeof I.alpha==="number"?I.alpha:0;let W=C.sort().join("");if(!(W in sg1))throw new Error("Unable to parse color from object: "+JSON.stringify(I));this.model=sg1[W];let{labels:w}=_G[this.model],B=[];for(G=0;G(I%360+360)%360),saturationl:n3("hsl",1,s6(100)),lightness:n3("hsl",2,s6(100)),saturationv:n3("hsv",1,s6(100)),value:n3("hsv",2,s6(100)),chroma:n3("hcg",1,s6(100)),gray:n3("hcg",2,s6(100)),white:n3("hwb",1,s6(100)),wblack:n3("hwb",2,s6(100)),cyan:n3("cmyk",0,s6(100)),magenta:n3("cmyk",1,s6(100)),yellow:n3("cmyk",2,s6(100)),black:n3("cmyk",3,s6(100)),x:n3("xyz",0,s6(95.047)),y:n3("xyz",1,s6(100)),z:n3("xyz",2,s6(108.833)),l:n3("lab",0,s6(100)),a:n3("lab",1),b:n3("lab",2),keyword(I){if(I!==void 0)return new f8(I);return _G[this.model].keyword(this.color)},hex(I){if(I!==void 0)return new f8(I);return kR.to.hex(this.rgb().round().color)},hexa(I){if(I!==void 0)return new f8(I);let d=this.rgb().round().color,G=Math.round(this.valpha*255).toString(16).toUpperCase();if(G.length===1)G="0"+G;return kR.to.hex(d)+G},rgbNumber(){let I=this.rgb().color;return(I[0]&255)<<16|(I[1]&255)<<8|I[2]&255},luminosity(){let I=this.rgb().color,d=[];for(let[G,Z]of I.entries()){let C=Z/255;d[G]=C<=0.04045?C/12.92:((C+0.055)/1.055)**2.4}return 0.2126*d[0]+0.7152*d[1]+0.0722*d[2]},contrast(I){let d=this.luminosity(),G=I.luminosity();if(d>G)return(d+0.05)/(G+0.05);return(G+0.05)/(d+0.05)},level(I){let d=this.contrast(I);if(d>=7)return"AAA";return d>=4.5?"AA":""},isDark(){let I=this.rgb().color;return(I[0]*2126+I[1]*7152+I[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){let I=this.rgb();for(let d=0;d<3;d++)I.color[d]=255-I.color[d];return I},lighten(I){let d=this.hsl();return d.color[2]+=d.color[2]*I,d},darken(I){let d=this.hsl();return d.color[2]-=d.color[2]*I,d},saturate(I){let d=this.hsl();return d.color[1]+=d.color[1]*I,d},desaturate(I){let d=this.hsl();return d.color[1]-=d.color[1]*I,d},whiten(I){let d=this.hwb();return d.color[1]+=d.color[1]*I,d},blacken(I){let d=this.hwb();return d.color[2]+=d.color[2]*I,d},grayscale(){let I=this.rgb().color,d=I[0]*0.3+I[1]*0.59+I[2]*0.11;return f8.rgb(d,d,d)},fade(I){return this.alpha(this.valpha-this.valpha*I)},opaquer(I){return this.alpha(this.valpha+this.valpha*I)},rotate(I){let d=this.hsl(),G=d.color[0];return G=(G+I)%360,G=G<0?360+G:G,d.color[0]=G,d},mix(I,d){if(!I||!I.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof I);let G=I.rgb(),Z=this.rgb(),C=d===void 0?0.5:d,W=2*C-1,w=G.alpha()-Z.alpha(),B=((W*w===-1?W:(W+w)/(1+W*w))+1)/2,A=1-B;return f8.rgb(B*G.red()+A*Z.red(),B*G.green()+A*Z.green(),B*G.blue()+A*Z.blue(),G.alpha()*C+Z.alpha()*(1-C))}};for(let I of Object.keys(_G)){if(IK2.includes(I))continue;let{channels:d}=_G[I];f8.prototype[I]=function(...G){if(this.model===I)return new f8(this);if(G.length>0)return new f8(G,I);return new f8([...kd9(_G[this.model][I].raw(this.color)),this.valpha],I)},f8[I]=function(...G){let Z=G[0];if(typeof Z==="number")Z=og1(G,d);return new f8(Z,I)}}function hd9(I,d){return Number(I.toFixed(d))}function jd9(I){return function(d){return hd9(d,I)}}function n3(I,d,G){I=Array.isArray(I)?I:[I];for(let Z of I)(Us[Z]||(Us[Z]=[]))[d]=G;return I=I[0],function(Z){let C;if(Z!==void 0){if(G)Z=G(Z);return C=this[I](),C.color[d]=Z,C}if(C=this[I]().color[d],G)C=G(C);return C}}function s6(I){return function(d){return Math.max(0,Math.min(I,d))}}function kd9(I){return Array.isArray(I)?I:[I]}function og1(I,d){for(let G=0;G{var xd9=vs(),C0=$B(),DH=c$(),cd9={left:"low",center:"centre",centre:"centre",right:"high"};function GK2(I){let{raw:d,density:G,limitInputPixels:Z,ignoreIcc:C,unlimited:W,sequentialRead:w,failOn:B,failOnError:A,animated:V,page:X,pages:_,subifd:F}=I;return[d,G,Z,C,W,w,B,A,V,X,_,F].some(C0.defined)?{raw:d,density:G,limitInputPixels:Z,ignoreIcc:C,unlimited:W,sequentialRead:w,failOn:B,failOnError:A,animated:V,page:X,pages:_,subifd:F}:void 0}function pd9(I,d,G){let Z={failOn:"warning",limitInputPixels:Math.pow(16383,2),ignoreIcc:!1,unlimited:!1,sequentialRead:!0};if(C0.string(I))Z.file=I;else if(C0.buffer(I)){if(I.length===0)throw Error("Input Buffer is empty");Z.buffer=I}else if(C0.arrayBuffer(I)){if(I.byteLength===0)throw Error("Input bit Array is empty");Z.buffer=Buffer.from(I,0,I.byteLength)}else if(C0.typedArray(I)){if(I.length===0)throw Error("Input Bit Array is empty");Z.buffer=Buffer.from(I.buffer,I.byteOffset,I.byteLength)}else if(C0.plainObject(I)&&!C0.defined(d)){if(d=I,GK2(d))Z.buffer=[]}else if(!C0.defined(I)&&!C0.defined(d)&&C0.object(G)&&G.allowStream)Z.buffer=[];else throw new Error(`Unsupported input '${I}' of type ${typeof I}${C0.defined(d)?` when also providing options of type ${typeof d}`:""}`);if(C0.object(d)){if(C0.defined(d.failOnError))if(C0.bool(d.failOnError))Z.failOn=d.failOnError?"warning":"none";else throw C0.invalidParameterError("failOnError","boolean",d.failOnError);if(C0.defined(d.failOn))if(C0.string(d.failOn)&&C0.inArray(d.failOn,["none","truncated","error","warning"]))Z.failOn=d.failOn;else throw C0.invalidParameterError("failOn","one of: none, truncated, error, warning",d.failOn);if(C0.defined(d.density))if(C0.inRange(d.density,1,1e5))Z.density=d.density;else throw C0.invalidParameterError("density","number between 1 and 100000",d.density);if(C0.defined(d.ignoreIcc))if(C0.bool(d.ignoreIcc))Z.ignoreIcc=d.ignoreIcc;else throw C0.invalidParameterError("ignoreIcc","boolean",d.ignoreIcc);if(C0.defined(d.limitInputPixels))if(C0.bool(d.limitInputPixels))Z.limitInputPixels=d.limitInputPixels?Math.pow(16383,2):0;else if(C0.integer(d.limitInputPixels)&&C0.inRange(d.limitInputPixels,0,Number.MAX_SAFE_INTEGER))Z.limitInputPixels=d.limitInputPixels;else throw C0.invalidParameterError("limitInputPixels","positive integer",d.limitInputPixels);if(C0.defined(d.unlimited))if(C0.bool(d.unlimited))Z.unlimited=d.unlimited;else throw C0.invalidParameterError("unlimited","boolean",d.unlimited);if(C0.defined(d.sequentialRead))if(C0.bool(d.sequentialRead))Z.sequentialRead=d.sequentialRead;else throw C0.invalidParameterError("sequentialRead","boolean",d.sequentialRead);if(C0.defined(d.raw))if(C0.object(d.raw)&&C0.integer(d.raw.width)&&d.raw.width>0&&C0.integer(d.raw.height)&&d.raw.height>0&&C0.integer(d.raw.channels)&&C0.inRange(d.raw.channels,1,4))switch(Z.rawWidth=d.raw.width,Z.rawHeight=d.raw.height,Z.rawChannels=d.raw.channels,Z.rawPremultiplied=!!d.raw.premultiplied,I.constructor){case Uint8Array:case Uint8ClampedArray:Z.rawDepth="uchar";break;case Int8Array:Z.rawDepth="char";break;case Uint16Array:Z.rawDepth="ushort";break;case Int16Array:Z.rawDepth="short";break;case Uint32Array:Z.rawDepth="uint";break;case Int32Array:Z.rawDepth="int";break;case Float32Array:Z.rawDepth="float";break;case Float64Array:Z.rawDepth="double";break;default:Z.rawDepth="uchar";break}else throw new Error("Expected width, height and channels for raw pixel input");if(C0.defined(d.animated))if(C0.bool(d.animated))Z.pages=d.animated?-1:1;else throw C0.invalidParameterError("animated","boolean",d.animated);if(C0.defined(d.pages))if(C0.integer(d.pages)&&C0.inRange(d.pages,-1,1e5))Z.pages=d.pages;else throw C0.invalidParameterError("pages","integer between -1 and 100000",d.pages);if(C0.defined(d.page))if(C0.integer(d.page)&&C0.inRange(d.page,0,1e5))Z.page=d.page;else throw C0.invalidParameterError("page","integer between 0 and 100000",d.page);if(C0.defined(d.level))if(C0.integer(d.level)&&C0.inRange(d.level,0,256))Z.level=d.level;else throw C0.invalidParameterError("level","integer between 0 and 256",d.level);if(C0.defined(d.subifd))if(C0.integer(d.subifd)&&C0.inRange(d.subifd,-1,1e5))Z.subifd=d.subifd;else throw C0.invalidParameterError("subifd","integer between -1 and 100000",d.subifd);if(C0.defined(d.create))if(C0.object(d.create)&&C0.integer(d.create.width)&&d.create.width>0&&C0.integer(d.create.height)&&d.create.height>0&&C0.integer(d.create.channels)){if(Z.createWidth=d.create.width,Z.createHeight=d.create.height,Z.createChannels=d.create.channels,C0.defined(d.create.noise)){if(!C0.object(d.create.noise))throw new Error("Expected noise to be an object");if(!C0.inArray(d.create.noise.type,["gaussian"]))throw new Error("Only gaussian noise is supported at the moment");if(!C0.inRange(d.create.channels,1,4))throw C0.invalidParameterError("create.channels","number between 1 and 4",d.create.channels);if(Z.createNoiseType=d.create.noise.type,C0.number(d.create.noise.mean)&&C0.inRange(d.create.noise.mean,0,1e4))Z.createNoiseMean=d.create.noise.mean;else throw C0.invalidParameterError("create.noise.mean","number between 0 and 10000",d.create.noise.mean);if(C0.number(d.create.noise.sigma)&&C0.inRange(d.create.noise.sigma,0,1e4))Z.createNoiseSigma=d.create.noise.sigma;else throw C0.invalidParameterError("create.noise.sigma","number between 0 and 10000",d.create.noise.sigma)}else if(C0.defined(d.create.background)){if(!C0.inRange(d.create.channels,3,4))throw C0.invalidParameterError("create.channels","number between 3 and 4",d.create.channels);let C=xd9(d.create.background);Z.createBackground=[C.red(),C.green(),C.blue(),Math.round(C.alpha()*255)]}else throw new Error("Expected valid noise or background to create a new input image");delete Z.buffer}else throw new Error("Expected valid width, height and channels to create a new input image");if(C0.defined(d.text))if(C0.object(d.text)&&C0.string(d.text.text)){if(Z.textValue=d.text.text,C0.defined(d.text.height)&&C0.defined(d.text.dpi))throw new Error("Expected only one of dpi or height");if(C0.defined(d.text.font))if(C0.string(d.text.font))Z.textFont=d.text.font;else throw C0.invalidParameterError("text.font","string",d.text.font);if(C0.defined(d.text.fontfile))if(C0.string(d.text.fontfile))Z.textFontfile=d.text.fontfile;else throw C0.invalidParameterError("text.fontfile","string",d.text.fontfile);if(C0.defined(d.text.width))if(C0.integer(d.text.width)&&d.text.width>0)Z.textWidth=d.text.width;else throw C0.invalidParameterError("text.width","positive integer",d.text.width);if(C0.defined(d.text.height))if(C0.integer(d.text.height)&&d.text.height>0)Z.textHeight=d.text.height;else throw C0.invalidParameterError("text.height","positive integer",d.text.height);if(C0.defined(d.text.align))if(C0.string(d.text.align)&&C0.string(this.constructor.align[d.text.align]))Z.textAlign=this.constructor.align[d.text.align];else throw C0.invalidParameterError("text.align","valid alignment",d.text.align);if(C0.defined(d.text.justify))if(C0.bool(d.text.justify))Z.textJustify=d.text.justify;else throw C0.invalidParameterError("text.justify","boolean",d.text.justify);if(C0.defined(d.text.dpi))if(C0.integer(d.text.dpi)&&C0.inRange(d.text.dpi,1,1e6))Z.textDpi=d.text.dpi;else throw C0.invalidParameterError("text.dpi","integer between 1 and 1000000",d.text.dpi);if(C0.defined(d.text.rgba))if(C0.bool(d.text.rgba))Z.textRgba=d.text.rgba;else throw C0.invalidParameterError("text.rgba","bool",d.text.rgba);if(C0.defined(d.text.spacing))if(C0.integer(d.text.spacing)&&C0.inRange(d.text.spacing,-1e6,1e6))Z.textSpacing=d.text.spacing;else throw C0.invalidParameterError("text.spacing","integer between -1000000 and 1000000",d.text.spacing);if(C0.defined(d.text.wrap))if(C0.string(d.text.wrap)&&C0.inArray(d.text.wrap,["word","char","word-char","none"]))Z.textWrap=d.text.wrap;else throw C0.invalidParameterError("text.wrap","one of: word, char, word-char, none",d.text.wrap);delete Z.buffer}else throw new Error("Expected a valid string to create an image with text.")}else if(C0.defined(d))throw new Error("Invalid input options "+d);return Z}function id9(I,d,G){if(Array.isArray(this.options.input.buffer))if(C0.buffer(I)){if(this.options.input.buffer.length===0)this.on("finish",()=>{this.streamInFinished=!0});this.options.input.buffer.push(I),G()}else G(new Error("Non-Buffer data on Writable Stream"));else G(new Error("Unexpected data on Writable Stream"))}function nd9(){if(this._isStreamInput())this.options.input.buffer=Buffer.concat(this.options.input.buffer)}function rd9(){return Array.isArray(this.options.input.buffer)}function ad9(I){let d=Error();if(C0.fn(I)){if(this._isStreamInput())this.on("finish",()=>{this._flattenBufferIn(),DH.metadata(this.options,(G,Z)=>{if(G)I(C0.nativeError(G,d));else I(null,Z)})});else DH.metadata(this.options,(G,Z)=>{if(G)I(C0.nativeError(G,d));else I(null,Z)});return this}else if(this._isStreamInput())return new Promise((G,Z)=>{let C=()=>{this._flattenBufferIn(),DH.metadata(this.options,(W,w)=>{if(W)Z(C0.nativeError(W,d));else G(w)})};if(this.writableFinished)C();else this.once("finish",C)});else return new Promise((G,Z)=>{DH.metadata(this.options,(C,W)=>{if(C)Z(C0.nativeError(C,d));else G(W)})})}function sd9(I){let d=Error();if(C0.fn(I)){if(this._isStreamInput())this.on("finish",()=>{this._flattenBufferIn(),DH.stats(this.options,(G,Z)=>{if(G)I(C0.nativeError(G,d));else I(null,Z)})});else DH.stats(this.options,(G,Z)=>{if(G)I(C0.nativeError(G,d));else I(null,Z)});return this}else if(this._isStreamInput())return new Promise((G,Z)=>{this.on("finish",function(){this._flattenBufferIn(),DH.stats(this.options,(C,W)=>{if(C)Z(C0.nativeError(C,d));else G(W)})})});else return new Promise((G,Z)=>{DH.stats(this.options,(C,W)=>{if(C)Z(C0.nativeError(C,d));else G(W)})})}ZK2.exports=function(I){Object.assign(I.prototype,{_inputOptionsFromObject:GK2,_createInputDescriptor:pd9,_write:id9,_flattenBufferIn:nd9,_isStreamInput:rd9,metadata:ad9,stats:sd9}),I.align=cd9}});var XK2=Y((eK3,VK2)=>{var y2=$B(),wK2={center:0,centre:0,north:1,east:2,south:3,west:4,northeast:5,southeast:6,southwest:7,northwest:8},BK2={top:1,right:2,bottom:3,left:4,"right top":5,"right bottom":6,"left bottom":7,"left top":8},WK2={background:"background",copy:"copy",repeat:"repeat",mirror:"mirror"},AK2={entropy:16,attention:17},eg1={nearest:"nearest",linear:"linear",cubic:"cubic",mitchell:"mitchell",lanczos2:"lanczos2",lanczos3:"lanczos3"},od9={contain:"contain",cover:"cover",fill:"fill",inside:"inside",outside:"outside"},ed9={contain:"embed",cover:"crop",fill:"ignore_aspect",inside:"max",outside:"min"};function tg1(I){return I.angle%360!==0||I.useExifOrientation===!0||I.rotationAngle!==0}function Es(I){return I.width!==-1||I.height!==-1}function td9(I,d,G){if(Es(this.options))this.options.debuglog("ignoring previous resize options");if(this.options.widthPost!==-1)this.options.debuglog("operation order will be: extract, resize, extract");if(y2.defined(I))if(y2.object(I)&&!y2.defined(G))G=I;else if(y2.integer(I)&&I>0)this.options.width=I;else throw y2.invalidParameterError("width","positive integer",I);else this.options.width=-1;if(y2.defined(d))if(y2.integer(d)&&d>0)this.options.height=d;else throw y2.invalidParameterError("height","positive integer",d);else this.options.height=-1;if(y2.object(G)){if(y2.defined(G.width))if(y2.integer(G.width)&&G.width>0)this.options.width=G.width;else throw y2.invalidParameterError("width","positive integer",G.width);if(y2.defined(G.height))if(y2.integer(G.height)&&G.height>0)this.options.height=G.height;else throw y2.invalidParameterError("height","positive integer",G.height);if(y2.defined(G.fit)){let Z=ed9[G.fit];if(y2.string(Z))this.options.canvas=Z;else throw y2.invalidParameterError("fit","valid fit",G.fit)}if(y2.defined(G.position)){let Z=y2.integer(G.position)?G.position:AK2[G.position]||BK2[G.position]||wK2[G.position];if(y2.integer(Z)&&(y2.inRange(Z,0,8)||y2.inRange(Z,16,17)))this.options.position=Z;else throw y2.invalidParameterError("position","valid position/gravity/strategy",G.position)}if(this._setBackgroundColourOption("resizeBackground",G.background),y2.defined(G.kernel))if(y2.string(eg1[G.kernel]))this.options.kernel=eg1[G.kernel];else throw y2.invalidParameterError("kernel","valid kernel name",G.kernel);if(y2.defined(G.withoutEnlargement))this._setBooleanOption("withoutEnlargement",G.withoutEnlargement);if(y2.defined(G.withoutReduction))this._setBooleanOption("withoutReduction",G.withoutReduction);if(y2.defined(G.fastShrinkOnLoad))this._setBooleanOption("fastShrinkOnLoad",G.fastShrinkOnLoad)}if(tg1(this.options)&&Es(this.options))this.options.rotateBeforePreExtract=!0;return this}function IG9(I){if(y2.integer(I)&&I>0)this.options.extendTop=I,this.options.extendBottom=I,this.options.extendLeft=I,this.options.extendRight=I;else if(y2.object(I)){if(y2.defined(I.top))if(y2.integer(I.top)&&I.top>=0)this.options.extendTop=I.top;else throw y2.invalidParameterError("top","positive integer",I.top);if(y2.defined(I.bottom))if(y2.integer(I.bottom)&&I.bottom>=0)this.options.extendBottom=I.bottom;else throw y2.invalidParameterError("bottom","positive integer",I.bottom);if(y2.defined(I.left))if(y2.integer(I.left)&&I.left>=0)this.options.extendLeft=I.left;else throw y2.invalidParameterError("left","positive integer",I.left);if(y2.defined(I.right))if(y2.integer(I.right)&&I.right>=0)this.options.extendRight=I.right;else throw y2.invalidParameterError("right","positive integer",I.right);if(this._setBackgroundColourOption("extendBackground",I.background),y2.defined(I.extendWith))if(y2.string(WK2[I.extendWith]))this.options.extendWith=WK2[I.extendWith];else throw y2.invalidParameterError("extendWith","one of: background, copy, repeat, mirror",I.extendWith)}else throw y2.invalidParameterError("extend","integer or object",I);return this}function dG9(I){let d=Es(this.options)||this.options.widthPre!==-1?"Post":"Pre";if(this.options[`width${d}`]!==-1)this.options.debuglog("ignoring previous extract options");if(["left","top","width","height"].forEach(function(G){let Z=I[G];if(y2.integer(Z)&&Z>=0)this.options[G+(G==="left"||G==="top"?"Offset":"")+d]=Z;else throw y2.invalidParameterError(G,"integer",Z)},this),tg1(this.options)&&!Es(this.options)){if(this.options.widthPre===-1||this.options.widthPost===-1)this.options.rotateBeforePreExtract=!0}return this}function GG9(I){if(this.options.trimThreshold=10,y2.defined(I))if(y2.object(I)){if(y2.defined(I.background))this._setBackgroundColourOption("trimBackground",I.background);if(y2.defined(I.threshold))if(y2.number(I.threshold)&&I.threshold>=0)this.options.trimThreshold=I.threshold;else throw y2.invalidParameterError("threshold","positive number",I.threshold);if(y2.defined(I.lineArt))this._setBooleanOption("trimLineArt",I.lineArt)}else throw y2.invalidParameterError("trim","object",I);if(tg1(this.options))this.options.rotateBeforePreExtract=!0;return this}VK2.exports=function(I){Object.assign(I.prototype,{resize:td9,extend:IG9,extract:dG9,trim:GG9}),I.gravity=wK2,I.strategy=AK2,I.kernel=eg1,I.fit=od9,I.position=BK2}});var _K2=Y((tK3,YK2)=>{var F9=$B(),IJ1={clear:"clear",source:"source",over:"over",in:"in",out:"out",atop:"atop",dest:"dest","dest-over":"dest-over","dest-in":"dest-in","dest-out":"dest-out","dest-atop":"dest-atop",xor:"xor",add:"add",saturate:"saturate",multiply:"multiply",screen:"screen",overlay:"overlay",darken:"darken",lighten:"lighten","colour-dodge":"colour-dodge","color-dodge":"colour-dodge","colour-burn":"colour-burn","color-burn":"colour-burn","hard-light":"hard-light","soft-light":"soft-light",difference:"difference",exclusion:"exclusion"};function ZG9(I){if(!Array.isArray(I))throw F9.invalidParameterError("images to composite","array",I);return this.options.composite=I.map((d)=>{if(!F9.object(d))throw F9.invalidParameterError("image to composite","object",d);let G=this._inputOptionsFromObject(d),Z={input:this._createInputDescriptor(d.input,G,{allowStream:!1}),blend:"over",tile:!1,left:0,top:0,hasOffset:!1,gravity:0,premultiplied:!1};if(F9.defined(d.blend))if(F9.string(IJ1[d.blend]))Z.blend=IJ1[d.blend];else throw F9.invalidParameterError("blend","valid blend name",d.blend);if(F9.defined(d.tile))if(F9.bool(d.tile))Z.tile=d.tile;else throw F9.invalidParameterError("tile","boolean",d.tile);if(F9.defined(d.left))if(F9.integer(d.left))Z.left=d.left;else throw F9.invalidParameterError("left","integer",d.left);if(F9.defined(d.top))if(F9.integer(d.top))Z.top=d.top;else throw F9.invalidParameterError("top","integer",d.top);if(F9.defined(d.top)!==F9.defined(d.left))throw new Error("Expected both left and top to be set");else Z.hasOffset=F9.integer(d.top)&&F9.integer(d.left);if(F9.defined(d.gravity))if(F9.integer(d.gravity)&&F9.inRange(d.gravity,0,8))Z.gravity=d.gravity;else if(F9.string(d.gravity)&&F9.integer(this.constructor.gravity[d.gravity]))Z.gravity=this.constructor.gravity[d.gravity];else throw F9.invalidParameterError("gravity","valid gravity",d.gravity);if(F9.defined(d.premultiplied))if(F9.bool(d.premultiplied))Z.premultiplied=d.premultiplied;else throw F9.invalidParameterError("premultiplied","boolean",d.premultiplied);return Z}),this}YK2.exports=function(I){I.prototype.composite=ZG9,I.blend=IJ1}});var FK2=Y((IN3,HK2)=>{var CG9=vs(),n1=$B(),DK2={integer:"integer",float:"float",approximate:"approximate"};function WG9(I,d){if(this.options.useExifOrientation||this.options.angle||this.options.rotationAngle)this.options.debuglog("ignoring previous rotate options");if(!n1.defined(I))this.options.useExifOrientation=!0;else if(n1.integer(I)&&!(I%90))this.options.angle=I;else if(n1.number(I)){if(this.options.rotationAngle=I,n1.object(d)&&d.background){let G=CG9(d.background);this.options.rotationBackground=[G.red(),G.green(),G.blue(),Math.round(G.alpha()*255)]}}else throw n1.invalidParameterError("angle","numeric",I);return this}function wG9(I){return this.options.flip=n1.bool(I)?I:!0,this}function BG9(I){return this.options.flop=n1.bool(I)?I:!0,this}function AG9(I,d){let G=[].concat(...I);if(G.length===4&&G.every(n1.number))this.options.affineMatrix=G;else throw n1.invalidParameterError("matrix","1x4 or 2x2 array",I);if(n1.defined(d))if(n1.object(d)){if(this._setBackgroundColourOption("affineBackground",d.background),n1.defined(d.idx))if(n1.number(d.idx))this.options.affineIdx=d.idx;else throw n1.invalidParameterError("options.idx","number",d.idx);if(n1.defined(d.idy))if(n1.number(d.idy))this.options.affineIdy=d.idy;else throw n1.invalidParameterError("options.idy","number",d.idy);if(n1.defined(d.odx))if(n1.number(d.odx))this.options.affineOdx=d.odx;else throw n1.invalidParameterError("options.odx","number",d.odx);if(n1.defined(d.ody))if(n1.number(d.ody))this.options.affineOdy=d.ody;else throw n1.invalidParameterError("options.ody","number",d.ody);if(n1.defined(d.interpolator))if(n1.inArray(d.interpolator,Object.values(this.constructor.interpolators)))this.options.affineInterpolator=d.interpolator;else throw n1.invalidParameterError("options.interpolator","valid interpolator name",d.interpolator)}else throw n1.invalidParameterError("options","object",d);return this}function VG9(I,d,G){if(!n1.defined(I))this.options.sharpenSigma=-1;else if(n1.bool(I))this.options.sharpenSigma=I?-1:0;else if(n1.number(I)&&n1.inRange(I,0.01,1e4)){if(this.options.sharpenSigma=I,n1.defined(d))if(n1.number(d)&&n1.inRange(d,0,1e4))this.options.sharpenM1=d;else throw n1.invalidParameterError("flat","number between 0 and 10000",d);if(n1.defined(G))if(n1.number(G)&&n1.inRange(G,0,1e4))this.options.sharpenM2=G;else throw n1.invalidParameterError("jagged","number between 0 and 10000",G)}else if(n1.plainObject(I)){if(n1.number(I.sigma)&&n1.inRange(I.sigma,0.000001,10))this.options.sharpenSigma=I.sigma;else throw n1.invalidParameterError("options.sigma","number between 0.000001 and 10",I.sigma);if(n1.defined(I.m1))if(n1.number(I.m1)&&n1.inRange(I.m1,0,1e6))this.options.sharpenM1=I.m1;else throw n1.invalidParameterError("options.m1","number between 0 and 1000000",I.m1);if(n1.defined(I.m2))if(n1.number(I.m2)&&n1.inRange(I.m2,0,1e6))this.options.sharpenM2=I.m2;else throw n1.invalidParameterError("options.m2","number between 0 and 1000000",I.m2);if(n1.defined(I.x1))if(n1.number(I.x1)&&n1.inRange(I.x1,0,1e6))this.options.sharpenX1=I.x1;else throw n1.invalidParameterError("options.x1","number between 0 and 1000000",I.x1);if(n1.defined(I.y2))if(n1.number(I.y2)&&n1.inRange(I.y2,0,1e6))this.options.sharpenY2=I.y2;else throw n1.invalidParameterError("options.y2","number between 0 and 1000000",I.y2);if(n1.defined(I.y3))if(n1.number(I.y3)&&n1.inRange(I.y3,0,1e6))this.options.sharpenY3=I.y3;else throw n1.invalidParameterError("options.y3","number between 0 and 1000000",I.y3)}else throw n1.invalidParameterError("sigma","number between 0.01 and 10000",I);return this}function XG9(I){if(!n1.defined(I))this.options.medianSize=3;else if(n1.integer(I)&&n1.inRange(I,1,1000))this.options.medianSize=I;else throw n1.invalidParameterError("size","integer between 1 and 1000",I);return this}function YG9(I){let d;if(n1.number(I))d=I;else if(n1.plainObject(I)){if(!n1.number(I.sigma))throw n1.invalidParameterError("options.sigma","number between 0.3 and 1000",d);if(d=I.sigma,"precision"in I)if(n1.string(DK2[I.precision]))this.options.precision=DK2[I.precision];else throw n1.invalidParameterError("precision","one of: integer, float, approximate",I.precision);if("minAmplitude"in I)if(n1.number(I.minAmplitude)&&n1.inRange(I.minAmplitude,0.001,1))this.options.minAmpl=I.minAmplitude;else throw n1.invalidParameterError("minAmplitude","number between 0.001 and 1",I.minAmplitude)}if(!n1.defined(I))this.options.blurSigma=-1;else if(n1.bool(I))this.options.blurSigma=I?-1:0;else if(n1.number(d)&&n1.inRange(d,0.3,1000))this.options.blurSigma=d;else throw n1.invalidParameterError("sigma","number between 0.3 and 1000",d);return this}function _G9(I){if(this.options.flatten=n1.bool(I)?I:!0,n1.object(I))this._setBackgroundColourOption("flattenBackground",I.background);return this}function DG9(){return this.options.unflatten=!0,this}function HG9(I,d){if(!n1.defined(I))this.options.gamma=2.2;else if(n1.number(I)&&n1.inRange(I,1,3))this.options.gamma=I;else throw n1.invalidParameterError("gamma","number between 1.0 and 3.0",I);if(!n1.defined(d))this.options.gammaOut=this.options.gamma;else if(n1.number(d)&&n1.inRange(d,1,3))this.options.gammaOut=d;else throw n1.invalidParameterError("gammaOut","number between 1.0 and 3.0",d);return this}function FG9(I){if(this.options.negate=n1.bool(I)?I:!0,n1.plainObject(I)&&"alpha"in I)if(!n1.bool(I.alpha))throw n1.invalidParameterError("alpha","should be boolean value",I.alpha);else this.options.negateAlpha=I.alpha;return this}function gG9(I){if(n1.plainObject(I)){if(n1.defined(I.lower))if(n1.number(I.lower)&&n1.inRange(I.lower,0,99))this.options.normaliseLower=I.lower;else throw n1.invalidParameterError("lower","number between 0 and 99",I.lower);if(n1.defined(I.upper))if(n1.number(I.upper)&&n1.inRange(I.upper,1,100))this.options.normaliseUpper=I.upper;else throw n1.invalidParameterError("upper","number between 1 and 100",I.upper)}if(this.options.normaliseLower>=this.options.normaliseUpper)throw n1.invalidParameterError("range","lower to be less than upper",`${this.options.normaliseLower} >= ${this.options.normaliseUpper}`);return this.options.normalise=!0,this}function JG9(I){return this.normalise(I)}function KG9(I){if(n1.plainObject(I)){if(n1.integer(I.width)&&I.width>0)this.options.claheWidth=I.width;else throw n1.invalidParameterError("width","integer greater than zero",I.width);if(n1.integer(I.height)&&I.height>0)this.options.claheHeight=I.height;else throw n1.invalidParameterError("height","integer greater than zero",I.height);if(n1.defined(I.maxSlope))if(n1.integer(I.maxSlope)&&n1.inRange(I.maxSlope,0,100))this.options.claheMaxSlope=I.maxSlope;else throw n1.invalidParameterError("maxSlope","integer between 0 and 100",I.maxSlope)}else throw n1.invalidParameterError("options","plain object",I);return this}function NG9(I){if(!n1.object(I)||!Array.isArray(I.kernel)||!n1.integer(I.width)||!n1.integer(I.height)||!n1.inRange(I.width,3,1001)||!n1.inRange(I.height,3,1001)||I.height*I.width!==I.kernel.length)throw new Error("Invalid convolution kernel");if(!n1.integer(I.scale))I.scale=I.kernel.reduce(function(d,G){return d+G},0);if(I.scale<1)I.scale=1;if(!n1.integer(I.offset))I.offset=0;return this.options.convKernel=I,this}function zG9(I,d){if(!n1.defined(I))this.options.threshold=128;else if(n1.bool(I))this.options.threshold=I?128:0;else if(n1.integer(I)&&n1.inRange(I,0,255))this.options.threshold=I;else throw n1.invalidParameterError("threshold","integer between 0 and 255",I);if(!n1.object(d)||d.greyscale===!0||d.grayscale===!0)this.options.thresholdGrayscale=!0;else this.options.thresholdGrayscale=!1;return this}function QG9(I,d,G){if(this.options.boolean=this._createInputDescriptor(I,G),n1.string(d)&&n1.inArray(d,["and","or","eor"]))this.options.booleanOp=d;else throw n1.invalidParameterError("operator","one of: and, or, eor",d);return this}function fG9(I,d){if(!n1.defined(I)&&n1.number(d))I=1;else if(n1.number(I)&&!n1.defined(d))d=0;if(!n1.defined(I))this.options.linearA=[];else if(n1.number(I))this.options.linearA=[I];else if(Array.isArray(I)&&I.length&&I.every(n1.number))this.options.linearA=I;else throw n1.invalidParameterError("a","number or array of numbers",I);if(!n1.defined(d))this.options.linearB=[];else if(n1.number(d))this.options.linearB=[d];else if(Array.isArray(d)&&d.length&&d.every(n1.number))this.options.linearB=d;else throw n1.invalidParameterError("b","number or array of numbers",d);if(this.options.linearA.length!==this.options.linearB.length)throw new Error("Expected a and b to be arrays of the same length");return this}function qG9(I){if(!Array.isArray(I))throw n1.invalidParameterError("inputMatrix","array",I);if(I.length!==3&&I.length!==4)throw n1.invalidParameterError("inputMatrix","3x3 or 4x4 array",I.length);let d=I.flat().map(Number);if(d.length!==9&&d.length!==16)throw n1.invalidParameterError("inputMatrix","cardinality of 9 or 16",d.length);return this.options.recombMatrix=d,this}function RG9(I){if(!n1.plainObject(I))throw n1.invalidParameterError("options","plain object",I);if("brightness"in I)if(n1.number(I.brightness)&&I.brightness>=0)this.options.brightness=I.brightness;else throw n1.invalidParameterError("brightness","number above zero",I.brightness);if("saturation"in I)if(n1.number(I.saturation)&&I.saturation>=0)this.options.saturation=I.saturation;else throw n1.invalidParameterError("saturation","number above zero",I.saturation);if("hue"in I)if(n1.integer(I.hue))this.options.hue=I.hue%360;else throw n1.invalidParameterError("hue","number",I.hue);if("lightness"in I)if(n1.number(I.lightness))this.options.lightness=I.lightness;else throw n1.invalidParameterError("lightness","number",I.lightness);return this}HK2.exports=function(I){Object.assign(I.prototype,{rotate:WG9,flip:wG9,flop:BG9,affine:AG9,sharpen:VG9,median:XG9,blur:YG9,flatten:_G9,unflatten:DG9,gamma:HG9,negate:FG9,normalise:gG9,normalize:JG9,clahe:KG9,convolve:NG9,threshold:zG9,boolean:QG9,linear:fG9,recomb:qG9,modulate:RG9})}});var KK2=Y((dN3,JK2)=>{var UG9=vs(),XX=$B(),gK2={multiband:"multiband","b-w":"b-w",bw:"b-w",cmyk:"cmyk",srgb:"srgb"};function vG9(I){return this._setBackgroundColourOption("tint",I),this}function EG9(I){return this.options.greyscale=XX.bool(I)?I:!0,this}function MG9(I){return this.greyscale(I)}function SG9(I){if(!XX.string(I))throw XX.invalidParameterError("colourspace","string",I);return this.options.colourspacePipeline=I,this}function LG9(I){return this.pipelineColourspace(I)}function yG9(I){if(!XX.string(I))throw XX.invalidParameterError("colourspace","string",I);return this.options.colourspace=I,this}function PG9(I){return this.toColourspace(I)}function $G9(I,d){if(XX.defined(d))if(XX.object(d)||XX.string(d)){let G=UG9(d);this.options[I]=[G.red(),G.green(),G.blue(),Math.round(G.alpha()*255)]}else throw XX.invalidParameterError("background","object or string",d)}JK2.exports=function(I){Object.assign(I.prototype,{tint:vG9,greyscale:EG9,grayscale:MG9,pipelineColourspace:SG9,pipelineColorspace:LG9,toColourspace:yG9,toColorspace:PG9,_setBackgroundColourOption:$G9}),I.colourspace=gK2,I.colorspace=gK2}});var zK2=Y((GN3,NK2)=>{var OB=$B(),uG9={and:"and",or:"or",eor:"eor"};function TG9(){return this.options.removeAlpha=!0,this}function OG9(I){if(OB.defined(I))if(OB.number(I)&&OB.inRange(I,0,1))this.options.ensureAlpha=I;else throw OB.invalidParameterError("alpha","number between 0 and 1",I);else this.options.ensureAlpha=1;return this}function mG9(I){let d={red:0,green:1,blue:2,alpha:3};if(Object.keys(d).includes(I))I=d[I];if(OB.integer(I)&&OB.inRange(I,0,4))this.options.extractChannel=I;else throw OB.invalidParameterError("channel","integer or one of: red, green, blue, alpha",I);return this}function lG9(I,d){if(Array.isArray(I))I.forEach(function(G){this.options.joinChannelIn.push(this._createInputDescriptor(G,d))},this);else this.options.joinChannelIn.push(this._createInputDescriptor(I,d));return this}function bG9(I){if(OB.string(I)&&OB.inArray(I,["and","or","eor"]))this.options.bandBoolOp=I;else throw OB.invalidParameterError("boolOp","one of: and, or, eor",I);return this}NK2.exports=function(I){Object.assign(I.prototype,{removeAlpha:TG9,ensureAlpha:OG9,extractChannel:mG9,joinChannel:lG9,bandbool:bG9}),I.bool=uG9}});var vK2=Y((ZN3,UK2)=>{var dJ1=B1("node:path"),G1=$B(),xR=c$(),QK2=new Map([["heic","heif"],["heif","heif"],["avif","avif"],["jpeg","jpeg"],["jpg","jpeg"],["jpe","jpeg"],["tile","tile"],["dz","tile"],["png","png"],["raw","raw"],["tiff","tiff"],["tif","tiff"],["webp","webp"],["gif","gif"],["jp2","jp2"],["jpx","jp2"],["j2k","jp2"],["j2c","jp2"],["jxl","jxl"]]),hG9=/\.(jp[2x]|j2[kc])$/i,fK2=()=>new Error("JP2 output requires libvips with support for OpenJPEG"),qK2=(I)=>1<<31-Math.clz32(Math.ceil(Math.log2(I)));function jG9(I,d){let G;if(!G1.string(I))G=new Error("Missing output file path");else if(G1.string(this.options.input.file)&&dJ1.resolve(this.options.input.file)===dJ1.resolve(I))G=new Error("Cannot use same file for input and output");else if(hG9.test(dJ1.extname(I))&&!this.constructor.format.jp2k.output.file)G=fK2();if(G)if(G1.fn(d))d(G);else return Promise.reject(G);else{this.options.fileOut=I;let Z=Error();return this._pipeline(d,Z)}return this}function kG9(I,d){if(G1.object(I))this._setBooleanOption("resolveWithObject",I.resolveWithObject);else if(this.options.resolveWithObject)this.options.resolveWithObject=!1;this.options.fileOut="";let G=Error();return this._pipeline(G1.fn(I)?I:d,G)}function xG9(){return this.options.keepMetadata|=1,this}function cG9(I){if(G1.object(I))for(let[d,G]of Object.entries(I))if(G1.object(G))for(let[Z,C]of Object.entries(G))if(G1.string(C))this.options.withExif[`exif-${d.toLowerCase()}-${Z}`]=C;else throw G1.invalidParameterError(`${d}.${Z}`,"string",C);else throw G1.invalidParameterError(d,"object",G);else throw G1.invalidParameterError("exif","object",I);return this.options.withExifMerge=!1,this.keepExif()}function pG9(I){return this.withExif(I),this.options.withExifMerge=!0,this}function iG9(){return this.options.keepMetadata|=8,this}function nG9(I,d){if(G1.string(I))this.options.withIccProfile=I;else throw G1.invalidParameterError("icc","string",I);if(this.keepIccProfile(),G1.object(d)){if(G1.defined(d.attach))if(G1.bool(d.attach)){if(!d.attach)this.options.keepMetadata&=-9}else throw G1.invalidParameterError("attach","boolean",d.attach)}return this}function rG9(){return this.options.keepMetadata=31,this}function aG9(I){if(this.keepMetadata(),this.withIccProfile("srgb"),G1.object(I)){if(G1.defined(I.orientation))if(G1.integer(I.orientation)&&G1.inRange(I.orientation,1,8))this.options.withMetadataOrientation=I.orientation;else throw G1.invalidParameterError("orientation","integer between 1 and 8",I.orientation);if(G1.defined(I.density))if(G1.number(I.density)&&I.density>0)this.options.withMetadataDensity=I.density;else throw G1.invalidParameterError("density","positive number",I.density);if(G1.defined(I.icc))this.withIccProfile(I.icc);if(G1.defined(I.exif))this.withExifMerge(I.exif)}return this}function sG9(I,d){let G=QK2.get((G1.object(I)&&G1.string(I.id)?I.id:I).toLowerCase());if(!G)throw G1.invalidParameterError("format",`one of: ${[...QK2.keys()].join(", ")}`,I);return this[G](d)}function oG9(I){if(G1.object(I)){if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,1,100))this.options.jpegQuality=I.quality;else throw G1.invalidParameterError("quality","integer between 1 and 100",I.quality);if(G1.defined(I.progressive))this._setBooleanOption("jpegProgressive",I.progressive);if(G1.defined(I.chromaSubsampling))if(G1.string(I.chromaSubsampling)&&G1.inArray(I.chromaSubsampling,["4:2:0","4:4:4"]))this.options.jpegChromaSubsampling=I.chromaSubsampling;else throw G1.invalidParameterError("chromaSubsampling","one of: 4:2:0, 4:4:4",I.chromaSubsampling);let d=G1.bool(I.optimizeCoding)?I.optimizeCoding:I.optimiseCoding;if(G1.defined(d))this._setBooleanOption("jpegOptimiseCoding",d);if(G1.defined(I.mozjpeg))if(G1.bool(I.mozjpeg)){if(I.mozjpeg)this.options.jpegTrellisQuantisation=!0,this.options.jpegOvershootDeringing=!0,this.options.jpegOptimiseScans=!0,this.options.jpegProgressive=!0,this.options.jpegQuantisationTable=3}else throw G1.invalidParameterError("mozjpeg","boolean",I.mozjpeg);let G=G1.bool(I.trellisQuantization)?I.trellisQuantization:I.trellisQuantisation;if(G1.defined(G))this._setBooleanOption("jpegTrellisQuantisation",G);if(G1.defined(I.overshootDeringing))this._setBooleanOption("jpegOvershootDeringing",I.overshootDeringing);let Z=G1.bool(I.optimizeScans)?I.optimizeScans:I.optimiseScans;if(G1.defined(Z)){if(this._setBooleanOption("jpegOptimiseScans",Z),Z)this.options.jpegProgressive=!0}let C=G1.number(I.quantizationTable)?I.quantizationTable:I.quantisationTable;if(G1.defined(C))if(G1.integer(C)&&G1.inRange(C,0,8))this.options.jpegQuantisationTable=C;else throw G1.invalidParameterError("quantisationTable","integer between 0 and 8",C)}return this._updateFormatOut("jpeg",I)}function eG9(I){if(G1.object(I)){if(G1.defined(I.progressive))this._setBooleanOption("pngProgressive",I.progressive);if(G1.defined(I.compressionLevel))if(G1.integer(I.compressionLevel)&&G1.inRange(I.compressionLevel,0,9))this.options.pngCompressionLevel=I.compressionLevel;else throw G1.invalidParameterError("compressionLevel","integer between 0 and 9",I.compressionLevel);if(G1.defined(I.adaptiveFiltering))this._setBooleanOption("pngAdaptiveFiltering",I.adaptiveFiltering);let d=I.colours||I.colors;if(G1.defined(d))if(G1.integer(d)&&G1.inRange(d,2,256))this.options.pngBitdepth=qK2(d);else throw G1.invalidParameterError("colours","integer between 2 and 256",d);if(G1.defined(I.palette))this._setBooleanOption("pngPalette",I.palette);else if([I.quality,I.effort,I.colours,I.colors,I.dither].some(G1.defined))this._setBooleanOption("pngPalette",!0);if(this.options.pngPalette){if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,0,100))this.options.pngQuality=I.quality;else throw G1.invalidParameterError("quality","integer between 0 and 100",I.quality);if(G1.defined(I.effort))if(G1.integer(I.effort)&&G1.inRange(I.effort,1,10))this.options.pngEffort=I.effort;else throw G1.invalidParameterError("effort","integer between 1 and 10",I.effort);if(G1.defined(I.dither))if(G1.number(I.dither)&&G1.inRange(I.dither,0,1))this.options.pngDither=I.dither;else throw G1.invalidParameterError("dither","number between 0.0 and 1.0",I.dither)}}return this._updateFormatOut("png",I)}function tG9(I){if(G1.object(I)){if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,1,100))this.options.webpQuality=I.quality;else throw G1.invalidParameterError("quality","integer between 1 and 100",I.quality);if(G1.defined(I.alphaQuality))if(G1.integer(I.alphaQuality)&&G1.inRange(I.alphaQuality,0,100))this.options.webpAlphaQuality=I.alphaQuality;else throw G1.invalidParameterError("alphaQuality","integer between 0 and 100",I.alphaQuality);if(G1.defined(I.lossless))this._setBooleanOption("webpLossless",I.lossless);if(G1.defined(I.nearLossless))this._setBooleanOption("webpNearLossless",I.nearLossless);if(G1.defined(I.smartSubsample))this._setBooleanOption("webpSmartSubsample",I.smartSubsample);if(G1.defined(I.preset))if(G1.string(I.preset)&&G1.inArray(I.preset,["default","photo","picture","drawing","icon","text"]))this.options.webpPreset=I.preset;else throw G1.invalidParameterError("preset","one of: default, photo, picture, drawing, icon, text",I.preset);if(G1.defined(I.effort))if(G1.integer(I.effort)&&G1.inRange(I.effort,0,6))this.options.webpEffort=I.effort;else throw G1.invalidParameterError("effort","integer between 0 and 6",I.effort);if(G1.defined(I.minSize))this._setBooleanOption("webpMinSize",I.minSize);if(G1.defined(I.mixed))this._setBooleanOption("webpMixed",I.mixed)}return RK2(I,this.options),this._updateFormatOut("webp",I)}function IZ9(I){if(G1.object(I)){if(G1.defined(I.reuse))this._setBooleanOption("gifReuse",I.reuse);if(G1.defined(I.progressive))this._setBooleanOption("gifProgressive",I.progressive);let d=I.colours||I.colors;if(G1.defined(d))if(G1.integer(d)&&G1.inRange(d,2,256))this.options.gifBitdepth=qK2(d);else throw G1.invalidParameterError("colours","integer between 2 and 256",d);if(G1.defined(I.effort))if(G1.number(I.effort)&&G1.inRange(I.effort,1,10))this.options.gifEffort=I.effort;else throw G1.invalidParameterError("effort","integer between 1 and 10",I.effort);if(G1.defined(I.dither))if(G1.number(I.dither)&&G1.inRange(I.dither,0,1))this.options.gifDither=I.dither;else throw G1.invalidParameterError("dither","number between 0.0 and 1.0",I.dither);if(G1.defined(I.interFrameMaxError))if(G1.number(I.interFrameMaxError)&&G1.inRange(I.interFrameMaxError,0,32))this.options.gifInterFrameMaxError=I.interFrameMaxError;else throw G1.invalidParameterError("interFrameMaxError","number between 0.0 and 32.0",I.interFrameMaxError);if(G1.defined(I.interPaletteMaxError))if(G1.number(I.interPaletteMaxError)&&G1.inRange(I.interPaletteMaxError,0,256))this.options.gifInterPaletteMaxError=I.interPaletteMaxError;else throw G1.invalidParameterError("interPaletteMaxError","number between 0.0 and 256.0",I.interPaletteMaxError)}return RK2(I,this.options),this._updateFormatOut("gif",I)}function dZ9(I){if(!this.constructor.format.jp2k.output.buffer)throw fK2();if(G1.object(I)){if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,1,100))this.options.jp2Quality=I.quality;else throw G1.invalidParameterError("quality","integer between 1 and 100",I.quality);if(G1.defined(I.lossless))if(G1.bool(I.lossless))this.options.jp2Lossless=I.lossless;else throw G1.invalidParameterError("lossless","boolean",I.lossless);if(G1.defined(I.tileWidth))if(G1.integer(I.tileWidth)&&G1.inRange(I.tileWidth,1,32768))this.options.jp2TileWidth=I.tileWidth;else throw G1.invalidParameterError("tileWidth","integer between 1 and 32768",I.tileWidth);if(G1.defined(I.tileHeight))if(G1.integer(I.tileHeight)&&G1.inRange(I.tileHeight,1,32768))this.options.jp2TileHeight=I.tileHeight;else throw G1.invalidParameterError("tileHeight","integer between 1 and 32768",I.tileHeight);if(G1.defined(I.chromaSubsampling))if(G1.string(I.chromaSubsampling)&&G1.inArray(I.chromaSubsampling,["4:2:0","4:4:4"]))this.options.jp2ChromaSubsampling=I.chromaSubsampling;else throw G1.invalidParameterError("chromaSubsampling","one of: 4:2:0, 4:4:4",I.chromaSubsampling)}return this._updateFormatOut("jp2",I)}function RK2(I,d){if(G1.object(I)&&G1.defined(I.loop))if(G1.integer(I.loop)&&G1.inRange(I.loop,0,65535))d.loop=I.loop;else throw G1.invalidParameterError("loop","integer between 0 and 65535",I.loop);if(G1.object(I)&&G1.defined(I.delay))if(G1.integer(I.delay)&&G1.inRange(I.delay,0,65535))d.delay=[I.delay];else if(Array.isArray(I.delay)&&I.delay.every(G1.integer)&&I.delay.every((G)=>G1.inRange(G,0,65535)))d.delay=I.delay;else throw G1.invalidParameterError("delay","integer or an array of integers between 0 and 65535",I.delay)}function GZ9(I){if(G1.object(I)){if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,1,100))this.options.tiffQuality=I.quality;else throw G1.invalidParameterError("quality","integer between 1 and 100",I.quality);if(G1.defined(I.bitdepth))if(G1.integer(I.bitdepth)&&G1.inArray(I.bitdepth,[1,2,4,8]))this.options.tiffBitdepth=I.bitdepth;else throw G1.invalidParameterError("bitdepth","1, 2, 4 or 8",I.bitdepth);if(G1.defined(I.tile))this._setBooleanOption("tiffTile",I.tile);if(G1.defined(I.tileWidth))if(G1.integer(I.tileWidth)&&I.tileWidth>0)this.options.tiffTileWidth=I.tileWidth;else throw G1.invalidParameterError("tileWidth","integer greater than zero",I.tileWidth);if(G1.defined(I.tileHeight))if(G1.integer(I.tileHeight)&&I.tileHeight>0)this.options.tiffTileHeight=I.tileHeight;else throw G1.invalidParameterError("tileHeight","integer greater than zero",I.tileHeight);if(G1.defined(I.miniswhite))this._setBooleanOption("tiffMiniswhite",I.miniswhite);if(G1.defined(I.pyramid))this._setBooleanOption("tiffPyramid",I.pyramid);if(G1.defined(I.xres))if(G1.number(I.xres)&&I.xres>0)this.options.tiffXres=I.xres;else throw G1.invalidParameterError("xres","number greater than zero",I.xres);if(G1.defined(I.yres))if(G1.number(I.yres)&&I.yres>0)this.options.tiffYres=I.yres;else throw G1.invalidParameterError("yres","number greater than zero",I.yres);if(G1.defined(I.compression))if(G1.string(I.compression)&&G1.inArray(I.compression,["none","jpeg","deflate","packbits","ccittfax4","lzw","webp","zstd","jp2k"]))this.options.tiffCompression=I.compression;else throw G1.invalidParameterError("compression","one of: none, jpeg, deflate, packbits, ccittfax4, lzw, webp, zstd, jp2k",I.compression);if(G1.defined(I.predictor))if(G1.string(I.predictor)&&G1.inArray(I.predictor,["none","horizontal","float"]))this.options.tiffPredictor=I.predictor;else throw G1.invalidParameterError("predictor","one of: none, horizontal, float",I.predictor);if(G1.defined(I.resolutionUnit))if(G1.string(I.resolutionUnit)&&G1.inArray(I.resolutionUnit,["inch","cm"]))this.options.tiffResolutionUnit=I.resolutionUnit;else throw G1.invalidParameterError("resolutionUnit","one of: inch, cm",I.resolutionUnit)}return this._updateFormatOut("tiff",I)}function ZZ9(I){return this.heif({...I,compression:"av1"})}function CZ9(I){if(G1.object(I)){if(G1.string(I.compression)&&G1.inArray(I.compression,["av1","hevc"]))this.options.heifCompression=I.compression;else throw G1.invalidParameterError("compression","one of: av1, hevc",I.compression);if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,1,100))this.options.heifQuality=I.quality;else throw G1.invalidParameterError("quality","integer between 1 and 100",I.quality);if(G1.defined(I.lossless))if(G1.bool(I.lossless))this.options.heifLossless=I.lossless;else throw G1.invalidParameterError("lossless","boolean",I.lossless);if(G1.defined(I.effort))if(G1.integer(I.effort)&&G1.inRange(I.effort,0,9))this.options.heifEffort=I.effort;else throw G1.invalidParameterError("effort","integer between 0 and 9",I.effort);if(G1.defined(I.chromaSubsampling))if(G1.string(I.chromaSubsampling)&&G1.inArray(I.chromaSubsampling,["4:2:0","4:4:4"]))this.options.heifChromaSubsampling=I.chromaSubsampling;else throw G1.invalidParameterError("chromaSubsampling","one of: 4:2:0, 4:4:4",I.chromaSubsampling);if(G1.defined(I.bitdepth))if(G1.integer(I.bitdepth)&&G1.inArray(I.bitdepth,[8,10,12])){if(I.bitdepth!==8&&this.constructor.versions.heif)throw G1.invalidParameterError("bitdepth when using prebuilt binaries",8,I.bitdepth);this.options.heifBitdepth=I.bitdepth}else throw G1.invalidParameterError("bitdepth","8, 10 or 12",I.bitdepth)}else throw G1.invalidParameterError("options","Object",I);return this._updateFormatOut("heif",I)}function WZ9(I){if(G1.object(I)){if(G1.defined(I.quality))if(G1.integer(I.quality)&&G1.inRange(I.quality,1,100))this.options.jxlDistance=I.quality>=30?0.1+(100-I.quality)*0.09:0.017666666666666667*I.quality*I.quality-1.15*I.quality+25;else throw G1.invalidParameterError("quality","integer between 1 and 100",I.quality);else if(G1.defined(I.distance))if(G1.number(I.distance)&&G1.inRange(I.distance,0,15))this.options.jxlDistance=I.distance;else throw G1.invalidParameterError("distance","number between 0.0 and 15.0",I.distance);if(G1.defined(I.decodingTier))if(G1.integer(I.decodingTier)&&G1.inRange(I.decodingTier,0,4))this.options.jxlDecodingTier=I.decodingTier;else throw G1.invalidParameterError("decodingTier","integer between 0 and 4",I.decodingTier);if(G1.defined(I.lossless))if(G1.bool(I.lossless))this.options.jxlLossless=I.lossless;else throw G1.invalidParameterError("lossless","boolean",I.lossless);if(G1.defined(I.effort))if(G1.integer(I.effort)&&G1.inRange(I.effort,3,9))this.options.jxlEffort=I.effort;else throw G1.invalidParameterError("effort","integer between 3 and 9",I.effort)}return this._updateFormatOut("jxl",I)}function wZ9(I){if(G1.object(I)){if(G1.defined(I.depth))if(G1.string(I.depth)&&G1.inArray(I.depth,["char","uchar","short","ushort","int","uint","float","complex","double","dpcomplex"]))this.options.rawDepth=I.depth;else throw G1.invalidParameterError("depth","one of: char, uchar, short, ushort, int, uint, float, complex, double, dpcomplex",I.depth)}return this._updateFormatOut("raw")}function BZ9(I){if(G1.object(I)){if(G1.defined(I.size))if(G1.integer(I.size)&&G1.inRange(I.size,1,8192))this.options.tileSize=I.size;else throw G1.invalidParameterError("size","integer between 1 and 8192",I.size);if(G1.defined(I.overlap))if(G1.integer(I.overlap)&&G1.inRange(I.overlap,0,8192)){if(I.overlap>this.options.tileSize)throw G1.invalidParameterError("overlap",`<= size (${this.options.tileSize})`,I.overlap);this.options.tileOverlap=I.overlap}else throw G1.invalidParameterError("overlap","integer between 0 and 8192",I.overlap);if(G1.defined(I.container))if(G1.string(I.container)&&G1.inArray(I.container,["fs","zip"]))this.options.tileContainer=I.container;else throw G1.invalidParameterError("container","one of: fs, zip",I.container);if(G1.defined(I.layout))if(G1.string(I.layout)&&G1.inArray(I.layout,["dz","google","iiif","iiif3","zoomify"]))this.options.tileLayout=I.layout;else throw G1.invalidParameterError("layout","one of: dz, google, iiif, iiif3, zoomify",I.layout);if(G1.defined(I.angle))if(G1.integer(I.angle)&&!(I.angle%90))this.options.tileAngle=I.angle;else throw G1.invalidParameterError("angle","positive/negative multiple of 90",I.angle);if(this._setBackgroundColourOption("tileBackground",I.background),G1.defined(I.depth))if(G1.string(I.depth)&&G1.inArray(I.depth,["onepixel","onetile","one"]))this.options.tileDepth=I.depth;else throw G1.invalidParameterError("depth","one of: onepixel, onetile, one",I.depth);if(G1.defined(I.skipBlanks))if(G1.integer(I.skipBlanks)&&G1.inRange(I.skipBlanks,-1,65535))this.options.tileSkipBlanks=I.skipBlanks;else throw G1.invalidParameterError("skipBlanks","integer between -1 and 255/65535",I.skipBlanks);else if(G1.defined(I.layout)&&I.layout==="google")this.options.tileSkipBlanks=5;let d=G1.bool(I.center)?I.center:I.centre;if(G1.defined(d))this._setBooleanOption("tileCentre",d);if(G1.defined(I.id))if(G1.string(I.id))this.options.tileId=I.id;else throw G1.invalidParameterError("id","string",I.id);if(G1.defined(I.basename))if(G1.string(I.basename))this.options.tileBasename=I.basename;else throw G1.invalidParameterError("basename","string",I.basename)}if(G1.inArray(this.options.formatOut,["jpeg","png","webp"]))this.options.tileFormat=this.options.formatOut;else if(this.options.formatOut!=="input")throw G1.invalidParameterError("format","one of: jpeg, png, webp",this.options.formatOut);return this._updateFormatOut("dz")}function AZ9(I){if(!G1.plainObject(I))throw G1.invalidParameterError("options","object",I);if(G1.integer(I.seconds)&&G1.inRange(I.seconds,0,3600))this.options.timeoutSeconds=I.seconds;else throw G1.invalidParameterError("seconds","integer between 0 and 3600",I.seconds);return this}function VZ9(I,d){if(!(G1.object(d)&&d.force===!1))this.options.formatOut=I;return this}function XZ9(I,d){if(G1.bool(d))this.options[I]=d;else throw G1.invalidParameterError(I,"boolean",d)}function YZ9(){if(!this.options.streamOut){this.options.streamOut=!0;let I=Error();this._pipeline(void 0,I)}}function _Z9(I,d){if(typeof I==="function"){if(this._isStreamInput())this.on("finish",()=>{this._flattenBufferIn(),xR.pipeline(this.options,(G,Z,C)=>{if(G)I(G1.nativeError(G,d));else I(null,Z,C)})});else xR.pipeline(this.options,(G,Z,C)=>{if(G)I(G1.nativeError(G,d));else I(null,Z,C)});return this}else if(this.options.streamOut){if(this._isStreamInput()){if(this.once("finish",()=>{this._flattenBufferIn(),xR.pipeline(this.options,(G,Z,C)=>{if(G)this.emit("error",G1.nativeError(G,d));else this.emit("info",C),this.push(Z);this.push(null),this.on("end",()=>this.emit("close"))})}),this.streamInFinished)this.emit("finish")}else xR.pipeline(this.options,(G,Z,C)=>{if(G)this.emit("error",G1.nativeError(G,d));else this.emit("info",C),this.push(Z);this.push(null),this.on("end",()=>this.emit("close"))});return this}else if(this._isStreamInput())return new Promise((G,Z)=>{this.once("finish",()=>{this._flattenBufferIn(),xR.pipeline(this.options,(C,W,w)=>{if(C)Z(G1.nativeError(C,d));else if(this.options.resolveWithObject)G({data:W,info:w});else G(W)})})});else return new Promise((G,Z)=>{xR.pipeline(this.options,(C,W,w)=>{if(C)Z(G1.nativeError(C,d));else if(this.options.resolveWithObject)G({data:W,info:w});else G(W)})})}UK2.exports=function(I){Object.assign(I.prototype,{toFile:jG9,toBuffer:kG9,keepExif:xG9,withExif:cG9,withExifMerge:pG9,keepIccProfile:iG9,withIccProfile:nG9,keepMetadata:rG9,withMetadata:aG9,toFormat:sG9,jpeg:oG9,jp2:dZ9,png:eG9,webp:tG9,tiff:GZ9,avif:ZZ9,heif:CZ9,jxl:WZ9,gif:IZ9,raw:wZ9,tile:BZ9,timeout:AZ9,_updateFormatOut:VZ9,_setBooleanOption:XZ9,_read:YZ9,_pipeline:_Z9})}});var LK2=Y((CN3,SK2)=>{var DZ9=B1("node:events"),Ms=_s(),pZ=$B(),{runtimePlatformArch:HZ9}=ng1(),KI=c$(),EK2=HZ9(),GJ1=KI.libvipsVersion(),HH=KI.format();HH.heif.output.alias=["avif","heic"];HH.jpeg.output.alias=["jpe","jpg"];HH.tiff.output.alias=["tif"];HH.jp2k.output.alias=["j2c","j2k","jp2","jpx"];var FZ9={nearest:"nearest",bilinear:"bilinear",bicubic:"bicubic",locallyBoundedBicubic:"lbb",nohalo:"nohalo",vertexSplitQuadraticBasisSpline:"vsqbs"},cR={vips:GJ1.semver};if(!GJ1.isGlobal)if(!GJ1.isWasm)try{cR=B1(`@img/sharp-${EK2}/versions`)}catch(I){try{cR=B1(`@img/sharp-libvips-${EK2}/versions`)}catch(d){}}else try{cR=(()=>{throw new Error("Cannot require module "+"@img/sharp-wasm32/versions");})()}catch(I){}cR.sharp=pg1().version;if(cR.heif&&HH.heif)HH.heif.input.fileSuffix=[".avif"],HH.heif.output.alias=["avif"];function MK2(I){if(pZ.bool(I))if(I)return KI.cache(50,20,100);else return KI.cache(0,0,0);else if(pZ.object(I))return KI.cache(I.memory,I.files,I.items);else return KI.cache()}MK2(!0);function gZ9(I){return KI.concurrency(pZ.integer(I)?I:null)}if(Ms.familySync()===Ms.GLIBC&&!KI._isUsingJemalloc())KI.concurrency(1);else if(Ms.familySync()===Ms.MUSL&&KI.concurrency()===1024)KI.concurrency(B1("node:os").availableParallelism());var JZ9=new DZ9.EventEmitter;function KZ9(){return KI.counters()}function NZ9(I){return KI.simd(pZ.bool(I)?I:null)}function zZ9(I){if(pZ.object(I))if(Array.isArray(I.operation)&&I.operation.every(pZ.string))KI.block(I.operation,!0);else throw pZ.invalidParameterError("operation","Array",I.operation);else throw pZ.invalidParameterError("options","object",I)}function QZ9(I){if(pZ.object(I))if(Array.isArray(I.operation)&&I.operation.every(pZ.string))KI.block(I.operation,!1);else throw pZ.invalidParameterError("operation","Array",I.operation);else throw pZ.invalidParameterError("options","object",I)}SK2.exports=function(I){I.cache=MK2,I.concurrency=gZ9,I.counters=KZ9,I.simd=NZ9,I.format=HH,I.interpolators=FZ9,I.versions=cR,I.queue=JZ9,I.block=zZ9,I.unblock=QZ9}});var PK2=Y((wN3,yK2)=>{var YX=cJ2();CK2()(YX);XK2()(YX);_K2()(YX);FK2()(YX);KK2()(YX);zK2()(YX);vK2()(YX);LK2()(YX);yK2.exports=YX});var js=Y((Ff3,_N2)=>{var UJ1=[],YN2=0,k7=(I,d)=>{if(YN2>=d)UJ1.push(I)};k7.WARN=1;k7.INFO=2;k7.DEBUG=3;k7.reset=()=>{UJ1=[]};k7.setDebugLevel=(I)=>{YN2=I};k7.warn=(I)=>k7(I,k7.WARN);k7.info=(I)=>k7(I,k7.INFO);k7.debug=(I)=>k7(I,k7.DEBUG);k7.debugMessages=()=>UJ1;_N2.exports=k7});var HN2=Y((gf3,DN2)=>{DN2.exports=({onlyFirst:I=!1}={})=>{let d=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(d,I?void 0:"g")}});var gN2=Y((Jf3,FN2)=>{var zC9=HN2();FN2.exports=(I)=>typeof I==="string"?I.replace(zC9(),""):I});var KN2=Y((Kf3,vJ1)=>{var JN2=(I)=>{if(Number.isNaN(I))return!1;if(I>=4352&&(I<=4447||I===9001||I===9002||11904<=I&&I<=12871&&I!==12351||12880<=I&&I<=19903||19968<=I&&I<=42182||43360<=I&&I<=43388||44032<=I&&I<=55203||63744<=I&&I<=64255||65040<=I&&I<=65049||65072<=I&&I<=65131||65281<=I&&I<=65376||65504<=I&&I<=65510||110592<=I&&I<=110593||127488<=I&&I<=127569||131072<=I&&I<=262141))return!0;return!1};vJ1.exports=JN2;vJ1.exports.default=JN2});var zN2=Y((Nf3,NN2)=>{NN2.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var fN2=Y((zf3,EJ1)=>{var QC9=gN2(),fC9=KN2(),qC9=zN2(),QN2=(I)=>{if(typeof I!=="string"||I.length===0)return 0;if(I=QC9(I),I.length===0)return 0;I=I.replace(qC9()," ");let d=0;for(let G=0;G=127&&Z<=159)continue;if(Z>=768&&Z<=879)continue;if(Z>65535)G++;d+=fC9(Z)?2:1}return d};EJ1.exports=QN2;EJ1.exports.default=QN2});var MJ1=Y((Qf3,vN2)=>{var qN2=fN2();function ks(I){return I?/\u001b\[((?:\d*;){0,5}\d*)m/g:/\u001b\[(?:\d*;){0,5}\d*m/g}function mB(I){let d=ks();return(""+I).replace(d,"").split(` +`).reduce(function(C,W){return qN2(W)>C?qN2(W):C},0)}function du(I,d){return Array(d+1).join(I)}function RC9(I,d,G,Z){let C=mB(I);if(d+1>=C){let W=d-C;switch(Z){case"right":{I=du(G,W)+I;break}case"center":{let w=Math.ceil(W/2),B=W-w;I=du(G,B)+I+du(G,w);break}default:{I=I+du(G,W);break}}}return I}var oR={};function Gu(I,d,G){d="\x1B["+d+"m",G="\x1B["+G+"m",oR[d]={set:I,to:!0},oR[G]={set:I,to:!1},oR[I]={on:d,off:G}}Gu("bold",1,22);Gu("italics",3,23);Gu("underline",4,24);Gu("inverse",7,27);Gu("strikethrough",9,29);function RN2(I,d){let G=d[1]?parseInt(d[1].split(";")[0]):0;if(G>=30&&G<=39||G>=90&&G<=97){I.lastForegroundAdded=d[0];return}if(G>=40&&G<=49||G>=100&&G<=107){I.lastBackgroundAdded=d[0];return}if(G===0){for(let C in I)if(Object.prototype.hasOwnProperty.call(I,C))delete I[C];return}let Z=oR[d[0]];if(Z)I[Z.set]=Z.to}function UC9(I){let d=ks(!0),G=d.exec(I),Z={};while(G!==null)RN2(Z,G),G=d.exec(I);return Z}function UN2(I,d){let{lastBackgroundAdded:G,lastForegroundAdded:Z}=I;if(delete I.lastBackgroundAdded,delete I.lastForegroundAdded,Object.keys(I).forEach(function(C){if(I[C])d+=oR[C].off}),G&&G!="\x1B[49m")d+="\x1B[49m";if(Z&&Z!="\x1B[39m")d+="\x1B[39m";return d}function vC9(I,d){let{lastBackgroundAdded:G,lastForegroundAdded:Z}=I;if(delete I.lastBackgroundAdded,delete I.lastForegroundAdded,Object.keys(I).forEach(function(C){if(I[C])d=oR[C].on+d}),G&&G!="\x1B[49m")d=G+d;if(Z&&Z!="\x1B[39m")d=Z+d;return d}function EC9(I,d){if(I.length===mB(I))return I.substr(0,d);while(mB(I)>d)I=I.slice(0,-1);return I}function MC9(I,d){let G=ks(!0),Z=I.split(ks()),C=0,W=0,w="",B,A={};while(Wd)V=EC9(V,d-W);if(w+=V,W+=mB(V),W0&&w)V+=w.length;if(V>I){if(W!==0)G.push(C.join(""));C=[A],W=mB(A)}else C.push(w||"",A),W=V;w=Z[B+1]}if(W)G.push(C.join(""));return G}function $C9(I,d){let G=[],Z="";function C(w,B){if(Z.length&&B)Z+=B;Z+=w;while(Z.length>I)G.push(Z.slice(0,I)),Z=Z.slice(I)}let W=d.split(/(\s+)/g);for(let w=0;w{var MN2={};SN2.exports=MN2;var EN2={reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],grey:[90,39],brightRed:[91,39],brightGreen:[92,39],brightYellow:[93,39],brightBlue:[94,39],brightMagenta:[95,39],brightCyan:[96,39],brightWhite:[97,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgGray:[100,49],bgGrey:[100,49],bgBrightRed:[101,49],bgBrightGreen:[102,49],bgBrightYellow:[103,49],bgBrightBlue:[104,49],bgBrightMagenta:[105,49],bgBrightCyan:[106,49],bgBrightWhite:[107,49],blackBG:[40,49],redBG:[41,49],greenBG:[42,49],yellowBG:[43,49],blueBG:[44,49],magentaBG:[45,49],cyanBG:[46,49],whiteBG:[47,49]};Object.keys(EN2).forEach(function(I){var d=EN2[I],G=MN2[I]=[];G.open="\x1B["+d[0]+"m",G.close="\x1B["+d[1]+"m"})});var PN2=Y((qf3,yN2)=>{yN2.exports=function(I,d){d=d||process.argv;var G=d.indexOf("--"),Z=/^-{1,2}/.test(I)?"":"--",C=d.indexOf(Z+I);return C!==-1&&(G===-1?!0:C{var mC9=B1("os"),NW=PN2(),QI=process.env,eR=void 0;if(NW("no-color")||NW("no-colors")||NW("color=false"))eR=!1;else if(NW("color")||NW("colors")||NW("color=true")||NW("color=always"))eR=!0;if("FORCE_COLOR"in QI)eR=QI.FORCE_COLOR.length===0||parseInt(QI.FORCE_COLOR,10)!==0;function lC9(I){if(I===0)return!1;return{level:I,hasBasic:!0,has256:I>=2,has16m:I>=3}}function bC9(I){if(eR===!1)return 0;if(NW("color=16m")||NW("color=full")||NW("color=truecolor"))return 3;if(NW("color=256"))return 2;if(I&&!I.isTTY&&eR!==!0)return 0;var d=eR?1:0;if(process.platform==="win32"){var G=mC9.release().split(".");if(Number(process.versions.node.split(".")[0])>=8&&Number(G[0])>=10&&Number(G[2])>=10586)return Number(G[2])>=14931?3:2;return 1}if("CI"in QI){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(function(C){return C in QI})||QI.CI_NAME==="codeship")return 1;return d}if("TEAMCITY_VERSION"in QI)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(QI.TEAMCITY_VERSION)?1:0;if("TERM_PROGRAM"in QI){var Z=parseInt((QI.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(QI.TERM_PROGRAM){case"iTerm.app":return Z>=3?3:2;case"Hyper":return 3;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(QI.TERM))return 2;if(/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(QI.TERM))return 1;if("COLORTERM"in QI)return 1;if(QI.TERM==="dumb")return d;return d}function SJ1(I){var d=bC9(I);return lC9(d)}$N2.exports={supportsColor:SJ1,stdout:SJ1(process.stdout),stderr:SJ1(process.stderr)}});var ON2=Y((Uf3,TN2)=>{TN2.exports=function I(d,G){var Z="";d=d||"Run the trap, drop the bass",d=d.split("");var C={a:["@","Ą","Ⱥ","Ʌ","Δ","Λ","Д"],b:["ß","Ɓ","Ƀ","ɮ","β","฿"],c:["©","Ȼ","Ͼ"],d:["Ð","Ɗ","Ԁ","ԁ","Ԃ","ԃ"],e:["Ë","ĕ","Ǝ","ɘ","Σ","ξ","Ҽ","੬"],f:["Ӻ"],g:["ɢ"],h:["Ħ","ƕ","Ң","Һ","Ӈ","Ԋ"],i:["༏"],j:["Ĵ"],k:["ĸ","Ҡ","Ӄ","Ԟ"],l:["Ĺ"],m:["ʍ","Ӎ","ӎ","Ԡ","ԡ","൩"],n:["Ñ","ŋ","Ɲ","Ͷ","Π","Ҋ"],o:["Ø","õ","ø","Ǿ","ʘ","Ѻ","ם","۝","๏"],p:["Ƿ","Ҏ"],q:["্"],r:["®","Ʀ","Ȑ","Ɍ","ʀ","Я"],s:["§","Ϟ","ϟ","Ϩ"],t:["Ł","Ŧ","ͳ"],u:["Ʊ","Ս"],v:["ט"],w:["Ш","Ѡ","Ѽ","൰"],x:["Ҳ","Ӿ","Ӽ","ӽ"],y:["¥","Ұ","Ӌ"],z:["Ƶ","ɀ"]};return d.forEach(function(W){W=W.toLowerCase();var w=C[W]||[" "],B=Math.floor(Math.random()*w.length);if(typeof C[W]!=="undefined")Z+=C[W][B];else Z+=W}),Z}});var lN2=Y((vf3,mN2)=>{mN2.exports=function I(d,G){d=d||" he is here ";var Z={up:["̍","̎","̄","̅","̿","̑","̆","̐","͒","͗","͑","̇","̈","̊","͂","̓","̈","͊","͋","͌","̃","̂","̌","͐","̀","́","̋","̏","̒","̓","̔","̽","̉","ͣ","ͤ","ͥ","ͦ","ͧ","ͨ","ͩ","ͪ","ͫ","ͬ","ͭ","ͮ","ͯ","̾","͛","͆","̚"],down:["̖","̗","̘","̙","̜","̝","̞","̟","̠","̤","̥","̦","̩","̪","̫","̬","̭","̮","̯","̰","̱","̲","̳","̹","̺","̻","̼","ͅ","͇","͈","͉","͍","͎","͓","͔","͕","͖","͙","͚","̣"],mid:["̕","̛","̀","́","͘","̡","̢","̧","̨","̴","̵","̶","͜","͝","͞","͟","͠","͢","̸","̷","͡"," ҉"]},C=[].concat(Z.up,Z.down,Z.mid);function W(A){var V=Math.floor(Math.random()*A);return V}function w(A){var V=!1;return C.filter(function(X){V=X===A}),V}function B(A,V){var X="",_,F;V=V||{},V.up=typeof V.up!=="undefined"?V.up:!0,V.mid=typeof V.mid!=="undefined"?V.mid:!0,V.down=typeof V.down!=="undefined"?V.down:!0,V.size=typeof V.size!=="undefined"?V.size:"maxi",A=A.split("");for(F in A){if(w(F))continue;switch(X=X+A[F],_={up:0,down:0,mid:0},V.size){case"mini":_.up=W(8),_.mid=W(2),_.down=W(8);break;case"maxi":_.up=W(16)+3,_.mid=W(4)+1,_.down=W(64)+3;break;default:_.up=W(8)+1,_.mid=W(6)/2,_.down=W(8)+1;break}var g=["up","mid","down"];for(var J in g){var K=g[J];for(var Q=0;Q<=_[K];Q++)if(V[K])X=X+Z[K][W(Z[K].length)]}}return X}return B(d,G)}});var hN2=Y((Ef3,bN2)=>{bN2.exports=function(I){return function(d,G,Z){if(d===" ")return d;switch(G%3){case 0:return I.red(d);case 1:return I.white(d);case 2:return I.blue(d)}}}});var kN2=Y((Mf3,jN2)=>{jN2.exports=function(I){return function(d,G,Z){return G%2===0?d:I.inverse(d)}}});var cN2=Y((Sf3,xN2)=>{xN2.exports=function(I){var d=["red","yellow","green","blue","magenta"];return function(G,Z,C){if(G===" ")return G;else return I[d[Z++%d.length]](G)}}});var iN2=Y((Lf3,pN2)=>{pN2.exports=function(I){var d=["underline","inverse","grey","yellow","red","green","blue","white","cyan","magenta","brightYellow","brightRed","brightGreen","brightBlue","brightWhite","brightCyan","brightMagenta"];return function(G,Z,C){return G===" "?G:I[d[Math.round(Math.random()*(d.length-2))]](G)}}});var eN2=Y((Pf3,oN2)=>{var o4={};oN2.exports=o4;o4.themes={};var hC9=B1("util"),ZK=o4.styles=LN2(),rN2=Object.defineProperties,jC9=new RegExp(/[\r\n]+/g);o4.supportsColor=uN2().supportsColor;if(typeof o4.enabled==="undefined")o4.enabled=o4.supportsColor()!==!1;o4.enable=function(){o4.enabled=!0};o4.disable=function(){o4.enabled=!1};o4.stripColors=o4.strip=function(I){return(""+I).replace(/\x1B\[\d+m/g,"")};var yf3=o4.stylize=function I(d,G){if(!o4.enabled)return d+"";var Z=ZK[G];if(!Z&&G in o4)return o4[G](d);return Z.open+d+Z.close},kC9=/[|\\{}()[\]^$+*?.]/g,xC9=function(I){if(typeof I!=="string")throw new TypeError("Expected a string");return I.replace(kC9,"\\$&")};function aN2(I){var d=function G(){return pC9.apply(G,arguments)};return d._styles=I,d.__proto__=cC9,d}var sN2=function(){var I={};return ZK.grey=ZK.gray,Object.keys(ZK).forEach(function(d){ZK[d].closeRe=new RegExp(xC9(ZK[d].close),"g"),I[d]={get:function(){return aN2(this._styles.concat(d))}}}),I}(),cC9=rN2(function I(){},sN2);function pC9(){var I=Array.prototype.slice.call(arguments),d=I.map(function(w){if(w!=null&&w.constructor===String)return w;else return hC9.inspect(w)}).join(" ");if(!o4.enabled||!d)return d;var G=d.indexOf(` +`)!=-1,Z=this._styles,C=Z.length;while(C--){var W=ZK[Z[C]];if(d=W.open+d.replace(W.closeRe,W.open)+W.close,G)d=d.replace(jC9,function(w){return W.close+w+W.open})}return d}o4.setTheme=function(I){if(typeof I==="string"){console.log("colors.setTheme now only accepts an object, not a string. If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file. The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");return}for(var d in I)(function(G){o4[G]=function(Z){if(typeof I[G]==="object"){var C=Z;for(var W in I[G])C=o4[I[G][W]](C);return C}return o4[I[G]](Z)}})(d)};function iC9(){var I={};return Object.keys(sN2).forEach(function(d){I[d]={get:function(){return aN2([d])}}}),I}var nC9=function I(d,G){var Z=G.split("");return Z=Z.map(d),Z.join("")};o4.trap=ON2();o4.zalgo=lN2();o4.maps={};o4.maps.america=hN2()(o4);o4.maps.zebra=kN2()(o4);o4.maps.rainbow=cN2()(o4);o4.maps.random=iN2()(o4);for(nN2 in o4.maps)(function(I){o4[I]=function(d){return nC9(o4.maps[I],d)}})(nN2);var nN2;rN2(o4,iC9())});var Iz2=Y(($f3,tN2)=>{var rC9=eN2();tN2.exports=rC9});var Cz2=Y((uf3,ps)=>{var{info:aC9,debug:Zz2}=js(),DG=MJ1();class Zu{constructor(I){this.setOptions(I),this.x=null,this.y=null}setOptions(I){if(["boolean","number","bigint","string"].indexOf(typeof I)!==-1)I={content:""+I};I=I||{},this.options=I;let d=I.content;if(["boolean","number","bigint","string"].indexOf(typeof d)!==-1)this.content=String(d);else if(!d)this.content=this.options.href||"";else throw new Error("Content needs to be a primitive, got: "+typeof d);if(this.colSpan=I.colSpan||1,this.rowSpan=I.rowSpan||1,this.options.href)Object.defineProperty(this,"href",{get(){return this.options.href}})}mergeTableOptions(I,d){this.cells=d;let G=this.options.chars||{},Z=I.chars,C=this.chars={};oC9.forEach(function(B){LJ1(G,Z,B,C)}),this.truncate=this.options.truncate||I.truncate;let W=this.options.style=this.options.style||{},w=I.style;LJ1(W,w,"padding-left",this),LJ1(W,w,"padding-right",this),this.head=W.head||w.head,this.border=W.border||w.border,this.fixedWidth=I.colWidths[this.x],this.lines=this.computeLines(I),this.desiredWidth=DG.strlen(this.content)+this.paddingLeft+this.paddingRight,this.desiredHeight=this.lines.length}computeLines(I){let d=I.wordWrap||I.textWrap,{wordWrap:G=d}=this.options;if(this.fixedWidth&&G){if(this.fixedWidth-=this.paddingLeft+this.paddingRight,this.colSpan){let W=1;while(WDG.hyperlink(this.href,G));return d}init(I){let d=this.x,G=this.y;this.widths=I.colWidths.slice(d,d+this.colSpan),this.heights=I.rowHeights.slice(G,G+this.rowSpan),this.width=this.widths.reduce(Gz2,-1),this.height=this.heights.reduce(Gz2,-1),this.hAlign=this.options.hAlign||I.colAligns[d],this.vAlign=this.options.vAlign||I.rowAligns[G],this.drawRight=d+this.colSpan==I.colWidths.length}draw(I,d){if(I=="top")return this.drawTop(this.drawRight);if(I=="bottom")return this.drawBottom(this.drawRight);let G=DG.truncate(this.content,10,this.truncate);if(!I)aC9(`${this.y}-${this.x}: ${this.rowSpan-I}x${this.colSpan} Cell ${G}`);let Z=Math.max(this.height-this.lines.length,0),C;switch(this.vAlign){case"center":C=Math.ceil(Z/2);break;case"bottom":C=Z;break;default:C=0}if(I=C+this.lines.length)return this.drawEmpty(this.drawRight,d);let W=this.lines.length>this.height&&I+1>=this.height;return this.drawLine(I-C,this.drawRight,W,d)}drawTop(I){let d=[];if(this.cells)this.widths.forEach(function(G,Z){d.push(this._topLeftChar(Z)),d.push(DG.repeat(this.chars[this.y==0?"top":"mid"],G))},this);else d.push(this._topLeftChar(0)),d.push(DG.repeat(this.chars[this.y==0?"top":"mid"],this.width));if(I)d.push(this.chars[this.y==0?"topRight":"rightMid"]);return this.wrapWithStyleColors("border",d.join(""))}_topLeftChar(I){let d=this.x+I,G;if(this.y==0)G=d==0?"topLeft":I==0?"topMid":"top";else if(d==0)G="leftMid";else if(G=I==0?"midMid":"bottomMid",this.cells){if(this.cells[this.y-1][d]instanceof Zu.ColSpanCell)G=I==0?"topMid":"mid";if(I==0){let C=1;while(this.cells[this.y][d-C]instanceof Zu.ColSpanCell)C++;if(this.cells[this.y][d-C]instanceof Zu.RowSpanCell)G="leftMid"}}return this.chars[G]}wrapWithStyleColors(I,d){if(this[I]&&this[I].length)try{let G=Iz2();for(let Z=this[I].length-1;Z>=0;Z--)G=G[this[I][Z]];return G(d)}catch(G){return d}else return d}drawLine(I,d,G,Z){let C=this.chars[this.x==0?"left":"middle"];if(this.x&&Z&&this.cells){let _=this.cells[this.y+Z][this.x-1];while(_ instanceof xs)_=this.cells[_.y][_.x-1];if(!(_ instanceof cs))C=this.chars.rightMid}let W=DG.repeat(" ",this.paddingLeft),w=d?this.chars.right:"",B=DG.repeat(" ",this.paddingRight),A=this.lines[I],V=this.width-(this.paddingLeft+this.paddingRight);if(G)A+=this.truncate||"…";let X=DG.truncate(A,V,this.truncate);return X=DG.pad(X,V," ",this.hAlign),X=W+X+B,this.stylizeLine(C,X,w)}stylizeLine(I,d,G){if(I=this.wrapWithStyleColors("border",I),G=this.wrapWithStyleColors("border",G),this.y===0)d=this.wrapWithStyleColors("head",d);return I+d+G}drawBottom(I){let d=this.chars[this.x==0?"bottomLeft":"bottomMid"],G=DG.repeat(this.chars.bottom,this.width),Z=I?this.chars.bottomRight:"";return this.wrapWithStyleColors("border",d+G+Z)}drawEmpty(I,d){let G=this.chars[this.x==0?"left":"middle"];if(this.x&&d&&this.cells){let W=this.cells[this.y+d][this.x-1];while(W instanceof xs)W=this.cells[W.y][W.x-1];if(!(W instanceof cs))G=this.chars.rightMid}let Z=I?this.chars.right:"",C=DG.repeat(" ",this.width);return this.stylizeLine(G,C,Z)}}class xs{constructor(){}draw(I){if(typeof I==="number")Zz2(`${this.y}-${this.x}: 1x1 ColSpanCell`);return""}init(){}mergeTableOptions(){}}class cs{constructor(I){this.originalCell=I}init(I){let d=this.y,G=this.originalCell.y;this.cellOffset=d-G,this.offset=sC9(I.rowHeights,G,this.cellOffset)}draw(I){if(I=="top")return this.originalCell.draw(this.offset,this.cellOffset);if(I=="bottom")return this.originalCell.draw("bottom");return Zz2(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`),this.originalCell.draw(this.offset+1+I)}mergeTableOptions(){}}function dz2(...I){return I.filter((d)=>d!==void 0&&d!==null).shift()}function LJ1(I,d,G,Z){let C=G.split("-");if(C.length>1)C[1]=C[1].charAt(0).toUpperCase()+C[1].substr(1),C=C.join(""),Z[C]=dz2(I[C],I[G],d[C],d[G]);else Z[G]=dz2(I[G],d[G])}function sC9(I,d,G){let Z=I[d];for(let C=1;C{var{warn:eC9,debug:tC9}=js(),yJ1=Cz2(),{ColSpanCell:IW9,RowSpanCell:dW9}=yJ1;(function(){function I(g,J){if(g[J]>0)return I(g,J+1);return J}function d(g){let J={};g.forEach(function(K,Q){let E=0;K.forEach(function(S){S.y=Q,S.x=Q?I(J,E):E;let P=S.rowSpan||1,$=S.colSpan||1;if(P>1)for(let h=0;h<$;h++)J[S.x+h]=P;E=S.x+$}),Object.keys(J).forEach((S)=>{if(J[S]--,J[S]<1)delete J[S]})})}function G(g){let J=0;return g.forEach(function(K){K.forEach(function(Q){J=Math.max(J,Q.x+(Q.colSpan||1))})}),J}function Z(g){return g.length}function C(g,J){let K=g.y,Q=g.y-1+(g.rowSpan||1),E=J.y,S=J.y-1+(J.rowSpan||1),P=!(K>S||E>Q),$=g.x,h=g.x-1+(g.colSpan||1),O=J.x,T=J.x-1+(J.colSpan||1),V1=!($>T||O>h);return P&&V1}function W(g,J,K){let Q=Math.min(g.length-1,K),E={x:J,y:K};for(let S=0;S<=Q;S++){let P=g[S];for(let $=0;$=0;J--){let K=g[J];for(let Q=0;Q1)B.push(X);else w[X[G]]=Math.max(w[X[G]]||0,X[d]||0,Z)})}),C.forEach(function(V,X){if(typeof V==="number")w[X]=V});for(let V=B.length-1;V>=0;V--){let X=B[V],_=X[I],F=X[G],g=w[F],J=typeof C[F]==="number"?0:1;if(typeof g==="number"){for(let K=1;K<_;K++)if(g+=1+w[F+K],typeof C[F+K]!=="number")J++}else if(g=d==="desiredWidth"?X.desiredWidth-1:1,!A[F]||A[F]g){let K=0;while(J>0&&X[d]>g){if(typeof C[F+K]!=="number"){let Q=Math.round((X[d]-g)/J);g+=Q,w[F+K]+=Q,J--}K++}}}Object.assign(C,w,A);for(let V=0;V{var DX=js(),GW9=MJ1(),PJ1=Bz2();class uJ1 extends Array{constructor(I){super();let d=GW9.mergeOptions(I);if(Object.defineProperty(this,"options",{value:d,enumerable:d.debug}),d.debug){switch(typeof d.debug){case"boolean":DX.setDebugLevel(DX.WARN);break;case"number":DX.setDebugLevel(d.debug);break;case"string":DX.setDebugLevel(parseInt(d.debug,10));break;default:DX.setDebugLevel(DX.WARN),DX.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof d.debug}`)}Object.defineProperty(this,"messages",{get(){return DX.debugMessages()}})}}toString(){let I=this,d=this.options.head&&this.options.head.length;if(d){if(I=[this.options.head],this.length)I.push.apply(I,this)}else this.options.style.head=[];let G=PJ1.makeTableLayout(I);G.forEach(function(C){C.forEach(function(W){W.mergeTableOptions(this.options,G)},this)},this),PJ1.computeWidths(this.options.colWidths,G),PJ1.computeHeights(this.options.rowHeights,G),G.forEach(function(C){C.forEach(function(W){W.init(this.options)},this)},this);let Z=[];for(let C=0;CDX.reset();function $J1(I,d,G){let Z=[];I.forEach(function(W){Z.push(W.draw(d))});let C=Z.join("");if(C.length)G.push(C)}Az2.exports=uJ1});var ru=Y((tA9)=>{class WN1 extends Error{constructor(I,d,G){super(G);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=d,this.exitCode=I,this.nestedError=void 0}}class Jq2 extends WN1{constructor(I){super(1,"commander.invalidArgument",I);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}tA9.CommanderError=WN1;tA9.InvalidArgumentError=Jq2});var eo=Y((CV9)=>{var{InvalidArgumentError:GV9}=ru();class Kq2{constructor(I,d){switch(this.description=d||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,I[0]){case"<":this.required=!0,this._name=I.slice(1,-1);break;case"[":this.required=!1,this._name=I.slice(1,-1);break;default:this.required=!0,this._name=I;break}if(this._name.length>3&&this._name.slice(-3)==="...")this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_concatValue(I,d){if(d===this.defaultValue||!Array.isArray(d))return[I];return d.concat(I)}default(I,d){return this.defaultValue=I,this.defaultValueDescription=d,this}argParser(I){return this.parseArg=I,this}choices(I){return this.argChoices=I.slice(),this.parseArg=(d,G)=>{if(!this.argChoices.includes(d))throw new GV9(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue(d,G);return d},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function ZV9(I){let d=I.name()+(I.variadic===!0?"...":"");return I.required?"<"+d+">":"["+d+"]"}CV9.Argument=Kq2;CV9.humanReadableArgName=ZV9});var wN1=Y((AV9)=>{var{humanReadableArgName:BV9}=eo();class Nq2{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(I){let d=I.commands.filter((Z)=>!Z._hidden),G=I._getHelpCommand();if(G&&!G._hidden)d.push(G);if(this.sortSubcommands)d.sort((Z,C)=>{return Z.name().localeCompare(C.name())});return d}compareOptions(I,d){let G=(Z)=>{return Z.short?Z.short.replace(/^-/,""):Z.long.replace(/^--/,"")};return G(I).localeCompare(G(d))}visibleOptions(I){let d=I.options.filter((Z)=>!Z.hidden),G=I._getHelpOption();if(G&&!G.hidden){let Z=G.short&&I._findOption(G.short),C=G.long&&I._findOption(G.long);if(!Z&&!C)d.push(G);else if(G.long&&!C)d.push(I.createOption(G.long,G.description));else if(G.short&&!Z)d.push(I.createOption(G.short,G.description))}if(this.sortOptions)d.sort(this.compareOptions);return d}visibleGlobalOptions(I){if(!this.showGlobalOptions)return[];let d=[];for(let G=I.parent;G;G=G.parent){let Z=G.options.filter((C)=>!C.hidden);d.push(...Z)}if(this.sortOptions)d.sort(this.compareOptions);return d}visibleArguments(I){if(I._argsDescription)I.registeredArguments.forEach((d)=>{d.description=d.description||I._argsDescription[d.name()]||""});if(I.registeredArguments.find((d)=>d.description))return I.registeredArguments;return[]}subcommandTerm(I){let d=I.registeredArguments.map((G)=>BV9(G)).join(" ");return I._name+(I._aliases[0]?"|"+I._aliases[0]:"")+(I.options.length?" [options]":"")+(d?" "+d:"")}optionTerm(I){return I.flags}argumentTerm(I){return I.name()}longestSubcommandTermLength(I,d){return d.visibleCommands(I).reduce((G,Z)=>{return Math.max(G,d.subcommandTerm(Z).length)},0)}longestOptionTermLength(I,d){return d.visibleOptions(I).reduce((G,Z)=>{return Math.max(G,d.optionTerm(Z).length)},0)}longestGlobalOptionTermLength(I,d){return d.visibleGlobalOptions(I).reduce((G,Z)=>{return Math.max(G,d.optionTerm(Z).length)},0)}longestArgumentTermLength(I,d){return d.visibleArguments(I).reduce((G,Z)=>{return Math.max(G,d.argumentTerm(Z).length)},0)}commandUsage(I){let d=I._name;if(I._aliases[0])d=d+"|"+I._aliases[0];let G="";for(let Z=I.parent;Z;Z=Z.parent)G=Z.name()+" "+G;return G+d+" "+I.usage()}commandDescription(I){return I.description()}subcommandDescription(I){return I.summary()||I.description()}optionDescription(I){let d=[];if(I.argChoices)d.push(`choices: ${I.argChoices.map((G)=>JSON.stringify(G)).join(", ")}`);if(I.defaultValue!==void 0){if(I.required||I.optional||I.isBoolean()&&typeof I.defaultValue==="boolean")d.push(`default: ${I.defaultValueDescription||JSON.stringify(I.defaultValue)}`)}if(I.presetArg!==void 0&&I.optional)d.push(`preset: ${JSON.stringify(I.presetArg)}`);if(I.envVar!==void 0)d.push(`env: ${I.envVar}`);if(d.length>0)return`${I.description} (${d.join(", ")})`;return I.description}argumentDescription(I){let d=[];if(I.argChoices)d.push(`choices: ${I.argChoices.map((G)=>JSON.stringify(G)).join(", ")}`);if(I.defaultValue!==void 0)d.push(`default: ${I.defaultValueDescription||JSON.stringify(I.defaultValue)}`);if(d.length>0){let G=`(${d.join(", ")})`;if(I.description)return`${I.description} ${G}`;return G}return I.description}formatHelp(I,d){let G=d.padWidth(I,d),Z=d.helpWidth||80,C=2,W=2;function w(g,J){if(J){let K=`${g.padEnd(G+2)}${J}`;return d.wrap(K,Z-2,G+2)}return g}function B(g){return g.join(` +`).replace(/^/gm," ".repeat(2))}let A=[`Usage: ${d.commandUsage(I)}`,""],V=d.commandDescription(I);if(V.length>0)A=A.concat([d.wrap(V,Z,0),""]);let X=d.visibleArguments(I).map((g)=>{return w(d.argumentTerm(g),d.argumentDescription(g))});if(X.length>0)A=A.concat(["Arguments:",B(X),""]);let _=d.visibleOptions(I).map((g)=>{return w(d.optionTerm(g),d.optionDescription(g))});if(_.length>0)A=A.concat(["Options:",B(_),""]);if(this.showGlobalOptions){let g=d.visibleGlobalOptions(I).map((J)=>{return w(d.optionTerm(J),d.optionDescription(J))});if(g.length>0)A=A.concat(["Global Options:",B(g),""])}let F=d.visibleCommands(I).map((g)=>{return w(d.subcommandTerm(g),d.subcommandDescription(g))});if(F.length>0)A=A.concat(["Commands:",B(F),""]);return A.join(` +`)}padWidth(I,d){return Math.max(d.longestOptionTermLength(I,d),d.longestGlobalOptionTermLength(I,d),d.longestSubcommandTermLength(I,d),d.longestArgumentTermLength(I,d))}wrap(I,d,G,Z=40){let W=new RegExp(`[\\n][${" \\f\\t\\v   -    \uFEFF"}]+`);if(I.match(W))return I;let w=d-G;if(w{if(J===` +`)return"";return(K>0?V:"")+J.trimEnd()}).join(` +`)}}AV9.Help=Nq2});var BN1=Y((DV9)=>{var{InvalidArgumentError:XV9}=ru();class zq2{constructor(I,d){this.flags=I,this.description=d||"",this.required=I.includes("<"),this.optional=I.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(I),this.mandatory=!1;let G=_V9(I);if(this.short=G.shortFlag,this.long=G.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(I,d){return this.defaultValue=I,this.defaultValueDescription=d,this}preset(I){return this.presetArg=I,this}conflicts(I){return this.conflictsWith=this.conflictsWith.concat(I),this}implies(I){let d=I;if(typeof I==="string")d={[I]:!0};return this.implied=Object.assign(this.implied||{},d),this}env(I){return this.envVar=I,this}argParser(I){return this.parseArg=I,this}makeOptionMandatory(I=!0){return this.mandatory=!!I,this}hideHelp(I=!0){return this.hidden=!!I,this}_concatValue(I,d){if(d===this.defaultValue||!Array.isArray(d))return[I];return d.concat(I)}choices(I){return this.argChoices=I.slice(),this.parseArg=(d,G)=>{if(!this.argChoices.includes(d))throw new XV9(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue(d,G);return d},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){return YV9(this.name().replace(/^no-/,""))}is(I){return this.short===I||this.long===I}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class Qq2{constructor(I){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,I.forEach((d)=>{if(d.negate)this.negativeOptions.set(d.attributeName(),d);else this.positiveOptions.set(d.attributeName(),d)}),this.negativeOptions.forEach((d,G)=>{if(this.positiveOptions.has(G))this.dualOptions.add(G)})}valueFromOption(I,d){let G=d.attributeName();if(!this.dualOptions.has(G))return!0;let Z=this.negativeOptions.get(G).presetArg,C=Z!==void 0?Z:!1;return d.negate===(C===I)}}function YV9(I){return I.split("-").reduce((d,G)=>{return d+G[0].toUpperCase()+G.slice(1)})}function _V9(I){let d,G,Z=I.split(/[ |,]+/);if(Z.length>1&&!/^[[<]/.test(Z[1]))d=Z.shift();if(G=Z.shift(),!d&&/^-[^-]$/.test(G))d=G,G=void 0;return{shortFlag:d,longFlag:G}}DV9.Option=zq2;DV9.DualOptions=Qq2});var fq2=Y((KV9)=>{function gV9(I,d){if(Math.abs(I.length-d.length)>3)return Math.max(I.length,d.length);let G=[];for(let Z=0;Z<=I.length;Z++)G[Z]=[Z];for(let Z=0;Z<=d.length;Z++)G[0][Z]=Z;for(let Z=1;Z<=d.length;Z++)for(let C=1;C<=I.length;C++){let W=1;if(I[C-1]===d[Z-1])W=0;else W=1;if(G[C][Z]=Math.min(G[C-1][Z]+1,G[C][Z-1]+1,G[C-1][Z-1]+W),C>1&&Z>1&&I[C-1]===d[Z-2]&&I[C-2]===d[Z-1])G[C][Z]=Math.min(G[C][Z],G[C-2][Z-2]+1)}return G[I.length][d.length]}function JV9(I,d){if(!d||d.length===0)return"";d=Array.from(new Set(d));let G=I.startsWith("--");if(G)I=I.slice(2),d=d.map((w)=>w.slice(2));let Z=[],C=3,W=0.4;if(d.forEach((w)=>{if(w.length<=1)return;let B=gV9(I,w),A=Math.max(I.length,w.length);if((A-B)/A>W){if(Bw.localeCompare(B)),G)Z=Z.map((w)=>`--${w}`);if(Z.length>1)return` +(Did you mean one of ${Z.join(", ")}?)`;if(Z.length===1)return` +(Did you mean ${Z[0]}?)`;return""}KV9.suggestSimilar=JV9});var vq2=Y((UV9)=>{var zV9=B1("node:events").EventEmitter,AN1=B1("node:child_process"),fX=B1("node:path"),VN1=B1("node:fs"),s3=B1("node:process"),{Argument:QV9,humanReadableArgName:fV9}=eo(),{CommanderError:XN1}=ru(),{Help:qV9}=wN1(),{Option:qq2,DualOptions:RV9}=BN1(),{suggestSimilar:Rq2}=fq2();class YN1 extends zV9{constructor(I){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=I||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:(d)=>s3.stdout.write(d),writeErr:(d)=>s3.stderr.write(d),getOutHelpWidth:()=>s3.stdout.isTTY?s3.stdout.columns:void 0,getErrHelpWidth:()=>s3.stderr.isTTY?s3.stderr.columns:void 0,outputError:(d,G)=>G(d)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(I){return this._outputConfiguration=I._outputConfiguration,this._helpOption=I._helpOption,this._helpCommand=I._helpCommand,this._helpConfiguration=I._helpConfiguration,this._exitCallback=I._exitCallback,this._storeOptionsAsProperties=I._storeOptionsAsProperties,this._combineFlagAndOptionalValue=I._combineFlagAndOptionalValue,this._allowExcessArguments=I._allowExcessArguments,this._enablePositionalOptions=I._enablePositionalOptions,this._showHelpAfterError=I._showHelpAfterError,this._showSuggestionAfterError=I._showSuggestionAfterError,this}_getCommandAndAncestors(){let I=[];for(let d=this;d;d=d.parent)I.push(d);return I}command(I,d,G){let Z=d,C=G;if(typeof Z==="object"&&Z!==null)C=Z,Z=null;C=C||{};let[,W,w]=I.match(/([^ ]+) *(.*)/),B=this.createCommand(W);if(Z)B.description(Z),B._executableHandler=!0;if(C.isDefault)this._defaultCommandName=B._name;if(B._hidden=!!(C.noHelp||C.hidden),B._executableFile=C.executableFile||null,w)B.arguments(w);if(this._registerCommand(B),B.parent=this,B.copyInheritedSettings(this),Z)return this;return B}createCommand(I){return new YN1(I)}createHelp(){return Object.assign(new qV9,this.configureHelp())}configureHelp(I){if(I===void 0)return this._helpConfiguration;return this._helpConfiguration=I,this}configureOutput(I){if(I===void 0)return this._outputConfiguration;return Object.assign(this._outputConfiguration,I),this}showHelpAfterError(I=!0){if(typeof I!=="string")I=!!I;return this._showHelpAfterError=I,this}showSuggestionAfterError(I=!0){return this._showSuggestionAfterError=!!I,this}addCommand(I,d){if(!I._name)throw new Error(`Command passed to .addCommand() must have a name +- specify the name in Command constructor or using .name()`);if(d=d||{},d.isDefault)this._defaultCommandName=I._name;if(d.noHelp||d.hidden)I._hidden=!0;return this._registerCommand(I),I.parent=this,I._checkForBrokenPassThrough(),this}createArgument(I,d){return new QV9(I,d)}argument(I,d,G,Z){let C=this.createArgument(I,d);if(typeof G==="function")C.default(Z).argParser(G);else C.default(G);return this.addArgument(C),this}arguments(I){return I.trim().split(/ +/).forEach((d)=>{this.argument(d)}),this}addArgument(I){let d=this.registeredArguments.slice(-1)[0];if(d&&d.variadic)throw new Error(`only the last argument can be variadic '${d.name()}'`);if(I.required&&I.defaultValue!==void 0&&I.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${I.name()}'`);return this.registeredArguments.push(I),this}helpCommand(I,d){if(typeof I==="boolean")return this._addImplicitHelpCommand=I,this;I=I??"help [command]";let[,G,Z]=I.match(/([^ ]+) *(.*)/),C=d??"display help for command",W=this.createCommand(G);if(W.helpOption(!1),Z)W.arguments(Z);if(C)W.description(C);return this._addImplicitHelpCommand=!0,this._helpCommand=W,this}addHelpCommand(I,d){if(typeof I!=="object")return this.helpCommand(I,d),this;return this._addImplicitHelpCommand=!0,this._helpCommand=I,this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(I,d){let G=["preSubcommand","preAction","postAction"];if(!G.includes(I))throw new Error(`Unexpected value for event passed to hook : '${I}'. +Expecting one of '${G.join("', '")}'`);if(this._lifeCycleHooks[I])this._lifeCycleHooks[I].push(d);else this._lifeCycleHooks[I]=[d];return this}exitOverride(I){if(I)this._exitCallback=I;else this._exitCallback=(d)=>{if(d.code!=="commander.executeSubCommandAsync")throw d};return this}_exit(I,d,G){if(this._exitCallback)this._exitCallback(new XN1(I,d,G));s3.exit(I)}action(I){let d=(G)=>{let Z=this.registeredArguments.length,C=G.slice(0,Z);if(this._storeOptionsAsProperties)C[Z]=this;else C[Z]=this.opts();return C.push(this),I.apply(this,C)};return this._actionHandler=d,this}createOption(I,d){return new qq2(I,d)}_callParseArg(I,d,G,Z){try{return I.parseArg(d,G)}catch(C){if(C.code==="commander.invalidArgument"){let W=`${Z} ${C.message}`;this.error(W,{exitCode:C.exitCode,code:C.code})}throw C}}_registerOption(I){let d=I.short&&this._findOption(I.short)||I.long&&this._findOption(I.long);if(d){let G=I.long&&this._findOption(I.long)?I.long:I.short;throw new Error(`Cannot add option '${I.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${G}' +- already used by option '${d.flags}'`)}this.options.push(I)}_registerCommand(I){let d=(Z)=>{return[Z.name()].concat(Z.aliases())},G=d(I).find((Z)=>this._findCommand(Z));if(G){let Z=d(this._findCommand(G)).join("|"),C=d(I).join("|");throw new Error(`cannot add command '${C}' as already have command '${Z}'`)}this.commands.push(I)}addOption(I){this._registerOption(I);let d=I.name(),G=I.attributeName();if(I.negate){let C=I.long.replace(/^--no-/,"--");if(!this._findOption(C))this.setOptionValueWithSource(G,I.defaultValue===void 0?!0:I.defaultValue,"default")}else if(I.defaultValue!==void 0)this.setOptionValueWithSource(G,I.defaultValue,"default");let Z=(C,W,w)=>{if(C==null&&I.presetArg!==void 0)C=I.presetArg;let B=this.getOptionValue(G);if(C!==null&&I.parseArg)C=this._callParseArg(I,C,B,W);else if(C!==null&&I.variadic)C=I._concatValue(C,B);if(C==null)if(I.negate)C=!1;else if(I.isBoolean()||I.optional)C=!0;else C="";this.setOptionValueWithSource(G,C,w)};if(this.on("option:"+d,(C)=>{let W=`error: option '${I.flags}' argument '${C}' is invalid.`;Z(C,W,"cli")}),I.envVar)this.on("optionEnv:"+d,(C)=>{let W=`error: option '${I.flags}' value '${C}' from env '${I.envVar}' is invalid.`;Z(C,W,"env")});return this}_optionEx(I,d,G,Z,C){if(typeof d==="object"&&d instanceof qq2)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let W=this.createOption(d,G);if(W.makeOptionMandatory(!!I.mandatory),typeof Z==="function")W.default(C).argParser(Z);else if(Z instanceof RegExp){let w=Z;Z=(B,A)=>{let V=w.exec(B);return V?V[0]:A},W.default(C).argParser(Z)}else W.default(Z);return this.addOption(W)}option(I,d,G,Z){return this._optionEx({},I,d,G,Z)}requiredOption(I,d,G,Z){return this._optionEx({mandatory:!0},I,d,G,Z)}combineFlagAndOptionalValue(I=!0){return this._combineFlagAndOptionalValue=!!I,this}allowUnknownOption(I=!0){return this._allowUnknownOption=!!I,this}allowExcessArguments(I=!0){return this._allowExcessArguments=!!I,this}enablePositionalOptions(I=!0){return this._enablePositionalOptions=!!I,this}passThroughOptions(I=!0){return this._passThroughOptions=!!I,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(I=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!I,this}getOptionValue(I){if(this._storeOptionsAsProperties)return this[I];return this._optionValues[I]}setOptionValue(I,d){return this.setOptionValueWithSource(I,d,void 0)}setOptionValueWithSource(I,d,G){if(this._storeOptionsAsProperties)this[I]=d;else this._optionValues[I]=d;return this._optionValueSources[I]=G,this}getOptionValueSource(I){return this._optionValueSources[I]}getOptionValueSourceWithGlobals(I){let d;return this._getCommandAndAncestors().forEach((G)=>{if(G.getOptionValueSource(I)!==void 0)d=G.getOptionValueSource(I)}),d}_prepareUserArgs(I,d){if(I!==void 0&&!Array.isArray(I))throw new Error("first parameter to parse must be array or undefined");if(d=d||{},I===void 0&&d.from===void 0){if(s3.versions?.electron)d.from="electron";let Z=s3.execArgv??[];if(Z.includes("-e")||Z.includes("--eval")||Z.includes("-p")||Z.includes("--print"))d.from="eval"}if(I===void 0)I=s3.argv;this.rawArgs=I.slice();let G;switch(d.from){case void 0:case"node":this._scriptPath=I[1],G=I.slice(2);break;case"electron":if(s3.defaultApp)this._scriptPath=I[1],G=I.slice(2);else G=I.slice(1);break;case"user":G=I.slice(0);break;case"eval":G=I.slice(1);break;default:throw new Error(`unexpected parse option { from: '${d.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",G}parse(I,d){let G=this._prepareUserArgs(I,d);return this._parseCommand([],G),this}async parseAsync(I,d){let G=this._prepareUserArgs(I,d);return await this._parseCommand([],G),this}_executeSubCommand(I,d){d=d.slice();let G=!1,Z=[".js",".ts",".tsx",".mjs",".cjs"];function C(V,X){let _=fX.resolve(V,X);if(VN1.existsSync(_))return _;if(Z.includes(fX.extname(X)))return;let F=Z.find((g)=>VN1.existsSync(`${_}${g}`));if(F)return`${_}${F}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let W=I._executableFile||`${this._name}-${I._name}`,w=this._executableDir||"";if(this._scriptPath){let V;try{V=VN1.realpathSync(this._scriptPath)}catch(X){V=this._scriptPath}w=fX.resolve(fX.dirname(V),w)}if(w){let V=C(w,W);if(!V&&!I._executableFile&&this._scriptPath){let X=fX.basename(this._scriptPath,fX.extname(this._scriptPath));if(X!==this._name)V=C(w,`${X}-${I._name}`)}W=V||W}G=Z.includes(fX.extname(W));let B;if(s3.platform!=="win32")if(G)d.unshift(W),d=Uq2(s3.execArgv).concat(d),B=AN1.spawn(s3.argv[0],d,{stdio:"inherit"});else B=AN1.spawn(W,d,{stdio:"inherit"});else d.unshift(W),d=Uq2(s3.execArgv).concat(d),B=AN1.spawn(s3.execPath,d,{stdio:"inherit"});if(!B.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((X)=>{s3.on(X,()=>{if(B.killed===!1&&B.exitCode===null)B.kill(X)})});let A=this._exitCallback;B.on("close",(V)=>{if(V=V??1,!A)s3.exit(V);else A(new XN1(V,"commander.executeSubCommandAsync","(close)"))}),B.on("error",(V)=>{if(V.code==="ENOENT"){let X=w?`searched for local subcommand relative to directory '${w}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",_=`'${W}' does not exist + - if '${I._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead + - if the default executable name is not suitable, use the executableFile option to supply a custom name or path + - ${X}`;throw new Error(_)}else if(V.code==="EACCES")throw new Error(`'${W}' not executable`);if(!A)s3.exit(1);else{let X=new XN1(1,"commander.executeSubCommandAsync","(error)");X.nestedError=V,A(X)}}),this.runningCommand=B}_dispatchSubcommand(I,d,G){let Z=this._findCommand(I);if(!Z)this.help({error:!0});let C;return C=this._chainOrCallSubCommandHook(C,Z,"preSubcommand"),C=this._chainOrCall(C,()=>{if(Z._executableHandler)this._executeSubCommand(Z,d.concat(G));else return Z._parseCommand(d,G)}),C}_dispatchHelpCommand(I){if(!I)this.help();let d=this._findCommand(I);if(d&&!d._executableHandler)d.help();return this._dispatchSubcommand(I,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((I,d)=>{if(I.required&&this.args[d]==null)this.missingArgument(I.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let I=(G,Z,C)=>{let W=Z;if(Z!==null&&G.parseArg){let w=`error: command-argument value '${Z}' is invalid for argument '${G.name()}'.`;W=this._callParseArg(G,Z,C,w)}return W};this._checkNumberOfArguments();let d=[];this.registeredArguments.forEach((G,Z)=>{let C=G.defaultValue;if(G.variadic){if(Z{return I(G,w,W)},G.defaultValue)}else if(C===void 0)C=[]}else if(Zd());return d()}_chainOrCallHooks(I,d){let G=I,Z=[];if(this._getCommandAndAncestors().reverse().filter((C)=>C._lifeCycleHooks[d]!==void 0).forEach((C)=>{C._lifeCycleHooks[d].forEach((W)=>{Z.push({hookedCommand:C,callback:W})})}),d==="postAction")Z.reverse();return Z.forEach((C)=>{G=this._chainOrCall(G,()=>{return C.callback(C.hookedCommand,this)})}),G}_chainOrCallSubCommandHook(I,d,G){let Z=I;if(this._lifeCycleHooks[G]!==void 0)this._lifeCycleHooks[G].forEach((C)=>{Z=this._chainOrCall(Z,()=>{return C(this,d)})});return Z}_parseCommand(I,d){let G=this.parseOptions(d);if(this._parseOptionsEnv(),this._parseOptionsImplied(),I=I.concat(G.operands),d=G.unknown,this.args=I.concat(d),I&&this._findCommand(I[0]))return this._dispatchSubcommand(I[0],I.slice(1),d);if(this._getHelpCommand()&&I[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(I[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(d),this._dispatchSubcommand(this._defaultCommandName,I,d);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(G.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let Z=()=>{if(G.unknown.length>0)this.unknownOption(G.unknown[0])},C=`command:${this.name()}`;if(this._actionHandler){Z(),this._processArguments();let W;if(W=this._chainOrCallHooks(W,"preAction"),W=this._chainOrCall(W,()=>this._actionHandler(this.processedArgs)),this.parent)W=this._chainOrCall(W,()=>{this.parent.emit(C,I,d)});return W=this._chainOrCallHooks(W,"postAction"),W}if(this.parent&&this.parent.listenerCount(C))Z(),this._processArguments(),this.parent.emit(C,I,d);else if(I.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",I,d);if(this.listenerCount("command:*"))this.emit("command:*",I,d);else if(this.commands.length)this.unknownCommand();else Z(),this._processArguments()}else if(this.commands.length)Z(),this.help({error:!0});else Z(),this._processArguments()}_findCommand(I){if(!I)return;return this.commands.find((d)=>d._name===I||d._aliases.includes(I))}_findOption(I){return this.options.find((d)=>d.is(I))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((I)=>{I.options.forEach((d)=>{if(d.mandatory&&I.getOptionValue(d.attributeName())===void 0)I.missingMandatoryOptionValue(d)})})}_checkForConflictingLocalOptions(){let I=this.options.filter((G)=>{let Z=G.attributeName();if(this.getOptionValue(Z)===void 0)return!1;return this.getOptionValueSource(Z)!=="default"});I.filter((G)=>G.conflictsWith.length>0).forEach((G)=>{let Z=I.find((C)=>G.conflictsWith.includes(C.attributeName()));if(Z)this._conflictingOption(G,Z)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((I)=>{I._checkForConflictingLocalOptions()})}parseOptions(I){let d=[],G=[],Z=d,C=I.slice();function W(B){return B.length>1&&B[0]==="-"}let w=null;while(C.length){let B=C.shift();if(B==="--"){if(Z===G)Z.push(B);Z.push(...C);break}if(w&&!W(B)){this.emit(`option:${w.name()}`,B);continue}if(w=null,W(B)){let A=this._findOption(B);if(A){if(A.required){let V=C.shift();if(V===void 0)this.optionMissingArgument(A);this.emit(`option:${A.name()}`,V)}else if(A.optional){let V=null;if(C.length>0&&!W(C[0]))V=C.shift();this.emit(`option:${A.name()}`,V)}else this.emit(`option:${A.name()}`);w=A.variadic?A:null;continue}}if(B.length>2&&B[0]==="-"&&B[1]!=="-"){let A=this._findOption(`-${B[1]}`);if(A){if(A.required||A.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${A.name()}`,B.slice(2));else this.emit(`option:${A.name()}`),C.unshift(`-${B.slice(2)}`);continue}}if(/^--[^=]+=/.test(B)){let A=B.indexOf("="),V=this._findOption(B.slice(0,A));if(V&&(V.required||V.optional)){this.emit(`option:${V.name()}`,B.slice(A+1));continue}}if(W(B))Z=G;if((this._enablePositionalOptions||this._passThroughOptions)&&d.length===0&&G.length===0){if(this._findCommand(B)){if(d.push(B),C.length>0)G.push(...C);break}else if(this._getHelpCommand()&&B===this._getHelpCommand().name()){if(d.push(B),C.length>0)d.push(...C);break}else if(this._defaultCommandName){if(G.push(B),C.length>0)G.push(...C);break}}if(this._passThroughOptions){if(Z.push(B),C.length>0)Z.push(...C);break}Z.push(B)}return{operands:d,unknown:G}}opts(){if(this._storeOptionsAsProperties){let I={},d=this.options.length;for(let G=0;GObject.assign(I,d.opts()),{})}error(I,d){if(this._outputConfiguration.outputError(`${I} +`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError} +`);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(` +`),this.outputHelp({error:!0});let G=d||{},Z=G.exitCode||1,C=G.code||"commander.error";this._exit(Z,C,I)}_parseOptionsEnv(){this.options.forEach((I)=>{if(I.envVar&&I.envVar in s3.env){let d=I.attributeName();if(this.getOptionValue(d)===void 0||["default","config","env"].includes(this.getOptionValueSource(d)))if(I.required||I.optional)this.emit(`optionEnv:${I.name()}`,s3.env[I.envVar]);else this.emit(`optionEnv:${I.name()}`)}})}_parseOptionsImplied(){let I=new RV9(this.options),d=(G)=>{return this.getOptionValue(G)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(G))};this.options.filter((G)=>G.implied!==void 0&&d(G.attributeName())&&I.valueFromOption(this.getOptionValue(G.attributeName()),G)).forEach((G)=>{Object.keys(G.implied).filter((Z)=>!d(Z)).forEach((Z)=>{this.setOptionValueWithSource(Z,G.implied[Z],"implied")})})}missingArgument(I){let d=`error: missing required argument '${I}'`;this.error(d,{code:"commander.missingArgument"})}optionMissingArgument(I){let d=`error: option '${I.flags}' argument missing`;this.error(d,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(I){let d=`error: required option '${I.flags}' not specified`;this.error(d,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(I,d){let G=(W)=>{let w=W.attributeName(),B=this.getOptionValue(w),A=this.options.find((X)=>X.negate&&w===X.attributeName()),V=this.options.find((X)=>!X.negate&&w===X.attributeName());if(A&&(A.presetArg===void 0&&B===!1||A.presetArg!==void 0&&B===A.presetArg))return A;return V||W},Z=(W)=>{let w=G(W),B=w.attributeName();if(this.getOptionValueSource(B)==="env")return`environment variable '${w.envVar}'`;return`option '${w.flags}'`},C=`error: ${Z(I)} cannot be used with ${Z(d)}`;this.error(C,{code:"commander.conflictingOption"})}unknownOption(I){if(this._allowUnknownOption)return;let d="";if(I.startsWith("--")&&this._showSuggestionAfterError){let Z=[],C=this;do{let W=C.createHelp().visibleOptions(C).filter((w)=>w.long).map((w)=>w.long);Z=Z.concat(W),C=C.parent}while(C&&!C._enablePositionalOptions);d=Rq2(I,Z)}let G=`error: unknown option '${I}'${d}`;this.error(G,{code:"commander.unknownOption"})}_excessArguments(I){if(this._allowExcessArguments)return;let d=this.registeredArguments.length,G=d===1?"":"s",C=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${d} argument${G} but got ${I.length}.`;this.error(C,{code:"commander.excessArguments"})}unknownCommand(){let I=this.args[0],d="";if(this._showSuggestionAfterError){let Z=[];this.createHelp().visibleCommands(this).forEach((C)=>{if(Z.push(C.name()),C.alias())Z.push(C.alias())}),d=Rq2(I,Z)}let G=`error: unknown command '${I}'${d}`;this.error(G,{code:"commander.unknownCommand"})}version(I,d,G){if(I===void 0)return this._version;this._version=I,d=d||"-V, --version",G=G||"output the version number";let Z=this.createOption(d,G);return this._versionOptionName=Z.attributeName(),this._registerOption(Z),this.on("option:"+Z.name(),()=>{this._outputConfiguration.writeOut(`${I} +`),this._exit(0,"commander.version",I)}),this}description(I,d){if(I===void 0&&d===void 0)return this._description;if(this._description=I,d)this._argsDescription=d;return this}summary(I){if(I===void 0)return this._summary;return this._summary=I,this}alias(I){if(I===void 0)return this._aliases[0];let d=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)d=this.commands[this.commands.length-1];if(I===d._name)throw new Error("Command alias can't be the same as its name");let G=this.parent?._findCommand(I);if(G){let Z=[G.name()].concat(G.aliases()).join("|");throw new Error(`cannot add alias '${I}' to command '${this.name()}' as already have command '${Z}'`)}return d._aliases.push(I),this}aliases(I){if(I===void 0)return this._aliases;return I.forEach((d)=>this.alias(d)),this}usage(I){if(I===void 0){if(this._usage)return this._usage;let d=this.registeredArguments.map((G)=>{return fV9(G)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?d:[]).join(" ")}return this._usage=I,this}name(I){if(I===void 0)return this._name;return this._name=I,this}nameFromFilename(I){return this._name=fX.basename(I,fX.extname(I)),this}executableDir(I){if(I===void 0)return this._executableDir;return this._executableDir=I,this}helpInformation(I){let d=this.createHelp();if(d.helpWidth===void 0)d.helpWidth=I&&I.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth();return d.formatHelp(this,d)}_getHelpContext(I){I=I||{};let d={error:!!I.error},G;if(d.error)G=(Z)=>this._outputConfiguration.writeErr(Z);else G=(Z)=>this._outputConfiguration.writeOut(Z);return d.write=I.write||G,d.command=this,d}outputHelp(I){let d;if(typeof I==="function")d=I,I=void 0;let G=this._getHelpContext(I);this._getCommandAndAncestors().reverse().forEach((C)=>C.emit("beforeAllHelp",G)),this.emit("beforeHelp",G);let Z=this.helpInformation(G);if(d){if(Z=d(Z),typeof Z!=="string"&&!Buffer.isBuffer(Z))throw new Error("outputHelp callback must return a string or a Buffer")}if(G.write(Z),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",G),this._getCommandAndAncestors().forEach((C)=>C.emit("afterAllHelp",G))}helpOption(I,d){if(typeof I==="boolean"){if(I)this._helpOption=this._helpOption??void 0;else this._helpOption=null;return this}return I=I??"-h, --help",d=d??"display help for command",this._helpOption=this.createOption(I,d),this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(I){return this._helpOption=I,this}help(I){this.outputHelp(I);let d=s3.exitCode||0;if(d===0&&I&&typeof I!=="function"&&I.error)d=1;this._exit(d,"commander.help","(outputHelp)")}addHelpText(I,d){let G=["beforeAll","before","after","afterAll"];if(!G.includes(I))throw new Error(`Unexpected value for position to addHelpText. +Expecting one of '${G.join("', '")}'`);let Z=`${I}Help`;return this.on(Z,(C)=>{let W;if(typeof d==="function")W=d({error:C.error,command:C.command});else W=d;if(W)C.write(`${W} +`)}),this}_outputHelpIfRequested(I){let d=this._getHelpOption();if(d&&I.find((Z)=>d.is(Z)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function Uq2(I){return I.map((d)=>{if(!d.startsWith("--inspect"))return d;let G,Z="127.0.0.1",C="9229",W;if((W=d.match(/^(--inspect(-brk)?)$/))!==null)G=W[1];else if((W=d.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(G=W[1],/^\d+$/.test(W[3]))C=W[3];else Z=W[3];else if((W=d.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)G=W[1],Z=W[3],C=W[4];if(G&&C!=="0")return`${G}=${Z}:${parseInt(C)+1}`;return d})}UV9.Command=YN1});var Lq2=Y((SV9)=>{var{Argument:Eq2}=eo(),{Command:_N1}=vq2(),{CommanderError:EV9,InvalidArgumentError:Mq2}=ru(),{Help:MV9}=wN1(),{Option:Sq2}=BN1();SV9.program=new _N1;SV9.createCommand=(I)=>new _N1(I);SV9.createOption=(I,d)=>new Sq2(I,d);SV9.createArgument=(I,d)=>new Eq2(I,d);SV9.Command=_N1;SV9.Option=Sq2;SV9.Argument=Eq2;SV9.Help=MV9;SV9.CommanderError=EV9;SV9.InvalidArgumentError=Mq2;SV9.InvalidOptionArgumentError=Mq2});var Pq2=Y((zG,yq2)=>{var yW=Lq2();zG=yq2.exports={};zG.program=new yW.Command;zG.Argument=yW.Argument;zG.Command=yW.Command;zG.CommanderError=yW.CommanderError;zG.Help=yW.Help;zG.InvalidArgumentError=yW.InvalidArgumentError;zG.InvalidOptionArgumentError=yW.InvalidArgumentError;zG.Option=yW.Option;zG.createCommand=(I)=>new yW.Command(I);zG.createOption=(I,d)=>new yW.Option(I,d);zG.createArgument=(I,d)=>new yW.Argument(I,d)});var sI=J1(_P1(),1);import{existsSync as d41,readFileSync as G41,writeFileSync as CA4}from"fs";import{resolve as Z41,join as Jl1}from"path";var v34=typeof global=="object"&&global&&global.Object===Object&&global,tm=v34;var E34=typeof self=="object"&&self&&self.Object===Object&&self,M34=tm||E34||Function("return this")(),J6=M34;var S34=J6.Symbol,B8=S34;var DP1=Object.prototype,L34=DP1.hasOwnProperty,y34=DP1.toString,HE=B8?B8.toStringTag:void 0;function P34(I){var d=L34.call(I,HE),G=I[HE];try{I[HE]=void 0;var Z=!0}catch(W){}var C=y34.call(I);if(Z)if(d)I[HE]=G;else delete I[HE];return C}var HP1=P34;var $34=Object.prototype,u34=$34.toString;function T34(I){return u34.call(I)}var FP1=T34;var O34="[object Null]",m34="[object Undefined]",gP1=B8?B8.toStringTag:void 0;function l34(I){if(I==null)return I===void 0?m34:O34;return gP1&&gP1 in Object(I)?HP1(I):FP1(I)}var JC=l34;function b34(I){return I!=null&&typeof I=="object"}var O8=b34;var h34="[object Symbol]";function j34(I){return typeof I=="symbol"||O8(I)&&JC(I)==h34}var uN=j34;function k34(I,d){var G=-1,Z=I==null?0:I.length,C=Array(Z);while(++G0){if(++d>=J64)return arguments[0]}else d=0;return I.apply(void 0,arguments)}}var SP1=z64;function Q64(I){return function(){return I}}var LP1=Q64;var f64=function(){try{var I=aI(Object,"defineProperty");return I({},"",{}),I}catch(d){}}(),ON=f64;var q64=!ON?TN:function(I,d){return ON(I,"toString",{configurable:!0,enumerable:!1,value:LP1(d),writable:!0})},yP1=q64;var R64=SP1(yP1),Zl=R64;function U64(I,d){var G=-1,Z=I==null?0:I.length;while(++G-1&&I%1==0&&I-1&&I%1==0&&I<=m64}var hN=l64;function b64(I){return I!=null&&hN(I.length)&&!Il(I)}var jN=b64;var h64=Object.prototype;function j64(I){var d=I&&I.constructor,G=typeof d=="function"&&d.prototype||h64;return I===G}var kN=j64;function k64(I,d){var G=-1,Z=Array(I);while(++GZY});function r64(){return!1}var OP1=r64;var bP1=typeof Bl=="object"&&Bl&&!Bl.nodeType&&Bl,mP1=bP1&&typeof wl=="object"&&wl&&!wl.nodeType&&wl,a64=mP1&&mP1.exports===bP1,lP1=a64?J6.Buffer:void 0,s64=lP1?lP1.isBuffer:void 0,o64=s64||OP1,ZY=o64;var e64="[object Arguments]",t64="[object Array]",I84="[object Boolean]",d84="[object Date]",G84="[object Error]",Z84="[object Function]",C84="[object Map]",W84="[object Number]",w84="[object Object]",B84="[object RegExp]",A84="[object Set]",V84="[object String]",X84="[object WeakMap]",Y84="[object ArrayBuffer]",_84="[object DataView]",D84="[object Float32Array]",H84="[object Float64Array]",F84="[object Int8Array]",g84="[object Int16Array]",J84="[object Int32Array]",K84="[object Uint8Array]",N84="[object Uint8ClampedArray]",z84="[object Uint16Array]",Q84="[object Uint32Array]",l9={};l9[D84]=l9[H84]=l9[F84]=l9[g84]=l9[J84]=l9[K84]=l9[N84]=l9[z84]=l9[Q84]=!0;l9[e64]=l9[t64]=l9[Y84]=l9[I84]=l9[_84]=l9[d84]=l9[G84]=l9[Z84]=l9[C84]=l9[W84]=l9[w84]=l9[B84]=l9[A84]=l9[V84]=l9[X84]=!1;function f84(I){return O8(I)&&hN(I.length)&&!!l9[JC(I)]}var hP1=f84;function q84(I){return function(d){return I(d)}}var cN=q84;var Vl={};Kv(Vl,{default:()=>Nw});var jP1=typeof Vl=="object"&&Vl&&!Vl.nodeType&&Vl,FE=jP1&&typeof Al=="object"&&Al&&!Al.nodeType&&Al,R84=FE&&FE.exports===jP1,k01=R84&&tm.process,U84=function(){try{var I=FE&&FE.require&&FE.require("util").types;if(I)return I;return k01&&k01.binding&&k01.binding("util")}catch(d){}}(),Nw=U84;var kP1=Nw&&Nw.isTypedArray,v84=kP1?cN(kP1):hP1,Xl=v84;var E84=Object.prototype,M84=E84.hasOwnProperty;function S84(I,d){var G=H3(I),Z=!G&&xN(I),C=!G&&!Z&&ZY(I),W=!G&&!Z&&!C&&Xl(I),w=G||Z||C||W,B=w?Wl(I.length,String):[],A=B.length;for(var V in I)if((d||M84.call(I,V))&&!(w&&(V=="length"||C&&(V=="offset"||V=="parent")||W&&(V=="buffer"||V=="byteLength"||V=="byteOffset")||mN(V,A))))B.push(V);return B}var Yl=S84;function L84(I,d){return function(G){return I(d(G))}}var _l=L84;var y84=_l(Object.keys,Object),xP1=y84;var P84=Object.prototype,$84=P84.hasOwnProperty;function u84(I){if(!kN(I))return xP1(I);var d=[];for(var G in Object(I))if($84.call(I,G)&&G!="constructor")d.push(G);return d}var cP1=u84;function T84(I){return jN(I)?Yl(I):cP1(I)}var sG=T84;function O84(I){var d=[];if(I!=null)for(var G in Object(I))d.push(G);return d}var pP1=O84;var m84=Object.prototype,l84=m84.hasOwnProperty;function b84(I){if(!o7(I))return pP1(I);var d=kN(I),G=[];for(var Z in I)if(!(Z=="constructor"&&(d||!l84.call(I,Z))))G.push(Z);return G}var iP1=b84;function h84(I){return jN(I)?Yl(I,!0):iP1(I)}var pN=h84;var j84=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,k84=/^\w*$/;function x84(I,d){if(H3(I))return!1;var G=typeof I;if(G=="number"||G=="symbol"||G=="boolean"||I==null||uN(I))return!0;return k84.test(I)||!j84.test(I)||d!=null&&I in Object(d)}var iN=x84;var c84=aI(Object,"create"),OA=c84;function p84(){this.__data__=OA?OA(null):{},this.size=0}var nP1=p84;function i84(I){var d=this.has(I)&&delete this.__data__[I];return this.size-=d?1:0,d}var rP1=i84;var n84="__lodash_hash_undefined__",r84=Object.prototype,a84=r84.hasOwnProperty;function s84(I){var d=this.__data__;if(OA){var G=d[I];return G===n84?void 0:G}return a84.call(d,I)?d[I]:void 0}var aP1=s84;var o84=Object.prototype,e84=o84.hasOwnProperty;function t84(I){var d=this.__data__;return OA?d[I]!==void 0:e84.call(d,I)}var sP1=t84;var I74="__lodash_hash_undefined__";function d74(I,d){var G=this.__data__;return this.size+=this.has(I)?0:1,G[I]=OA&&d===void 0?I74:d,this}var oP1=d74;function nN(I){var d=-1,G=I==null?0:I.length;this.clear();while(++d-1}var d$1=A74;function V74(I,d){var G=this.__data__,Z=CY(G,I);if(Z<0)++this.size,G.push([I,d]);else G[Z][1]=d;return this}var G$1=V74;function rN(I){var d=-1,G=I==null?0:I.length;this.clear();while(++d0&&G(B))if(d>1)F$1(B,d-1,G,Z,C);else oN(C,B);else if(!Z)C[C.length]=B}return C}var g$1=F$1;function P74(I){var d=I==null?0:I.length;return d?g$1(I,1):[]}var J$1=P74;function $74(I){return Zl(Cl(I,void 0,J$1),I+"")}var K$1=$74;var u74=_l(Object.getPrototypeOf,Object),Dl=u74;function T74(){this.__data__=new WY,this.size=0}var N$1=T74;function O74(I){var d=this.__data__,G=d.delete(I);return this.size=d.size,G}var z$1=O74;function m74(I){return this.__data__.get(I)}var Q$1=m74;function l74(I){return this.__data__.has(I)}var f$1=l74;var b74=200;function h74(I,d){var G=this.__data__;if(G instanceof WY){var Z=G.__data__;if(!wY||Z.lengthp01});var S$1=typeof Fl=="object"&&Fl&&!Fl.nodeType&&Fl,v$1=S$1&&typeof Hl=="object"&&Hl&&!Hl.nodeType&&Hl,x74=v$1&&v$1.exports===S$1,E$1=x74?J6.Buffer:void 0,M$1=E$1?E$1.allocUnsafe:void 0;function c74(I,d){if(d)return I.slice();var G=I.length,Z=M$1?M$1(G):new I.constructor(G);return I.copy(Z),Z}var p01=c74;function p74(I,d){var G=-1,Z=I==null?0:I.length,C=0,W=[];while(++GB))return!1;var V=W.get(I),X=W.get(d);if(V&&X)return V==d&&X==I;var _=-1,F=!0,g=G&Ld4?new Wu1:void 0;W.set(I,d),W.set(d,I);while(++_{let d=F3.join(XY,"Library");return{data:F3.join(d,"Application Support",I),config:F3.join(d,"Preferences",I),cache:F3.join(d,"Caches",I),log:F3.join(d,"Logs",I),temp:F3.join(d21,I)}},dZ4=(I)=>{let d=Zz.APPDATA||F3.join(XY,"AppData","Roaming"),G=Zz.LOCALAPPDATA||F3.join(XY,"AppData","Local");return{data:F3.join(G,I,"Data"),config:F3.join(d,I,"Config"),cache:F3.join(G,I,"Cache"),log:F3.join(G,I,"Log"),temp:F3.join(d21,I)}},GZ4=(I)=>{let d=F3.basename(XY);return{data:F3.join(Zz.XDG_DATA_HOME||F3.join(XY,".local","share"),I),config:F3.join(Zz.XDG_CONFIG_HOME||F3.join(XY,".config"),I),cache:F3.join(Zz.XDG_CACHE_HOME||F3.join(XY,".cache"),I),log:F3.join(Zz.XDG_STATE_HOME||F3.join(XY,".local","state"),I),temp:F3.join(d21,d,I)}};function G21(I,{suffix:d="nodejs"}={}){if(typeof I!=="string")throw new TypeError(`Expected a string, got ${typeof I}`);if(d)I+=`-${d}`;if(I21.platform==="darwin")return IZ4(I);if(I21.platform==="win32")return dZ4(I);return GZ4(I)}var ml=[],WZ4=100,id=CZ4(),Z21=G21("claude-cli");function C21(I){return I.replace(/[^a-zA-Z0-9]/g,"-")}var _Y={errors:()=>Cz(Z21.cache,C21(process.cwd()),"errors"),messages:()=>Cz(Z21.cache,C21(process.cwd()),"messages"),mcpLogs:(I)=>Cz(Z21.cache,C21(process.cwd()),`mcp-logs-${I}`)};function ll(I){return I.toISOString().replace(/[:.]/g,"-")}var au1=ll(new Date);function wZ4(){return Cz(_Y.errors(),au1+".txt")}function DY(I,d,G){return Cz(_Y.messages(),`${I}${d>0?`-${d}`:""}${G>0?`-sidechain-${G}`:""}.json`)}function X0(I){try{let d=I instanceof Error?I.stack||I.message:String(I),G={error:d,timestamp:new Date().toISOString()};if(ml.length>=WZ4)ml.shift();ml.push(G),BZ4(wZ4(),{error:d})}catch{}bl(I)}function su1(){return[...ml]}function ou1(I){if(!YY(I))return[];try{return JSON.parse(ZZ4(I,"utf8"))}catch{return[]}}function BZ4(I,d){return}function Wz(I,d){return}function w21(I,d,G){while(YY(DY(I,d,G)))d++;return d}function eu1(I,d){let G=1;while(YY(DY(I,d,G)))G++;return G}function wz(I,d){try{let G=_Y.mcpLogs(I),Z=d instanceof Error?d.stack||d.message:String(d),C=new Date().toISOString(),W=Cz(G,au1+".txt");if(!YY(G))W21(G,{recursive:!0});if(!YY(W))KE(W,"[]","utf8");let w={error:Z,timestamp:C,sessionId:id,cwd:process.cwd()},B=ou1(W);B.push(w),KE(W,JSON.stringify(B,null,2),"utf8")}catch{}}import*as Hl1 from"os";var kB4=J1(u1(),1);var XT1=(I=0)=>(d)=>`\x1B[${d+I}m`,YT1=(I=0)=>(d)=>`\x1B[${38+I};5;${d}m`,_T1=(I=0)=>(d,G,Z)=>`\x1B[${38+I};2;${d};${G};${Z}m`,s9={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},iq9=Object.keys(s9.modifier),wC4=Object.keys(s9.color),BC4=Object.keys(s9.bgColor),nq9=[...wC4,...BC4];function AC4(){let I=new Map;for(let[d,G]of Object.entries(s9)){for(let[Z,C]of Object.entries(G))s9[Z]={open:`\x1B[${C[0]}m`,close:`\x1B[${C[1]}m`},G[Z]=s9[Z],I.set(C[0],C[1]);Object.defineProperty(s9,d,{value:G,enumerable:!1})}return Object.defineProperty(s9,"codes",{value:I,enumerable:!1}),s9.color.close="\x1B[39m",s9.bgColor.close="\x1B[49m",s9.color.ansi=XT1(),s9.color.ansi256=YT1(),s9.color.ansi16m=_T1(),s9.bgColor.ansi=XT1(10),s9.bgColor.ansi256=YT1(10),s9.bgColor.ansi16m=_T1(10),Object.defineProperties(s9,{rgbToAnsi256:{value(d,G,Z){if(d===G&&G===Z){if(d<8)return 16;if(d>248)return 231;return Math.round((d-8)/247*24)+232}return 16+36*Math.round(d/255*5)+6*Math.round(G/255*5)+Math.round(Z/255*5)},enumerable:!1},hexToRgb:{value(d){let G=/[a-f\d]{6}|[a-f\d]{3}/i.exec(d.toString(16));if(!G)return[0,0,0];let[Z]=G;if(Z.length===3)Z=[...Z].map((W)=>W+W).join("");let C=Number.parseInt(Z,16);return[C>>16&255,C>>8&255,C&255]},enumerable:!1},hexToAnsi256:{value:(d)=>s9.rgbToAnsi256(...s9.hexToRgb(d)),enumerable:!1},ansi256ToAnsi:{value(d){if(d<8)return 30+d;if(d<16)return 90+(d-8);let G,Z,C;if(d>=232)G=((d-232)*10+8)/255,Z=G,C=G;else{d-=16;let B=d%36;G=Math.floor(d/36)/5,Z=Math.floor(B/6)/5,C=B%6/5}let W=Math.max(G,Z,C)*2;if(W===0)return 30;let w=30+(Math.round(C)<<2|Math.round(Z)<<1|Math.round(G));if(W===2)w+=60;return w},enumerable:!1},rgbToAnsi:{value:(d,G,Z)=>s9.ansi256ToAnsi(s9.rgbToAnsi256(d,G,Z)),enumerable:!1},hexToAnsi:{value:(d)=>s9.ansi256ToAnsi(s9.hexToAnsi256(d)),enumerable:!1}}),s9}var VC4=AC4(),KC=VC4;import _21 from"node:process";import XC4 from"node:os";import DT1 from"node:tty";function oG(I,d=globalThis.Deno?globalThis.Deno.args:_21.argv){let G=I.startsWith("-")?"":I.length===1?"-":"--",Z=d.indexOf(G+I),C=d.indexOf("--");return Z!==-1&&(C===-1||Z=2,has16m:I>=3}}function DC4(I,{streamIsTTY:d,sniffFlags:G=!0}={}){let Z=YC4();if(Z!==void 0)xl=Z;let C=G?xl:Z;if(C===0)return 0;if(G){if(oG("color=16m")||oG("color=full")||oG("color=truecolor"))return 3;if(oG("color=256"))return 2}if("TF_BUILD"in g3&&"AGENT_NAME"in g3)return 1;if(I&&!d&&C===void 0)return 0;let W=C||0;if(g3.TERM==="dumb")return W;if(_21.platform==="win32"){let w=XC4.release().split(".");if(Number(w[0])>=10&&Number(w[2])>=10586)return Number(w[2])>=14931?3:2;return 1}if("CI"in g3){if("GITHUB_ACTIONS"in g3||"GITEA_ACTIONS"in g3)return 3;if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((w)=>(w in g3))||g3.CI_NAME==="codeship")return 1;return W}if("TEAMCITY_VERSION"in g3)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(g3.TEAMCITY_VERSION)?1:0;if(g3.COLORTERM==="truecolor")return 3;if(g3.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in g3){let w=Number.parseInt((g3.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(g3.TERM_PROGRAM){case"iTerm.app":return w>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(g3.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(g3.TERM))return 1;if("COLORTERM"in g3)return 1;return W}function HT1(I,d={}){let G=DC4(I,{streamIsTTY:I&&I.isTTY,...d});return _C4(G)}var HC4={stdout:HT1({isTTY:DT1.isatty(1)}),stderr:HT1({isTTY:DT1.isatty(2)})},FT1=HC4;function gT1(I,d,G){let Z=I.indexOf(d);if(Z===-1)return I;let C=d.length,W=0,w="";do w+=I.slice(W,Z)+d+G,W=Z+C,Z=I.indexOf(d,W);while(Z!==-1);return w+=I.slice(W),w}function JT1(I,d,G,Z){let C=0,W="";do{let w=I[Z-1]==="\r";W+=I.slice(C,w?Z-1:Z)+d+(w?`\r +`:` +`)+G,C=Z+1,Z=I.indexOf(` +`,C)}while(Z!==-1);return W+=I.slice(C),W}var{stdout:KT1,stderr:NT1}=FT1,D21=Symbol("GENERATOR"),Az=Symbol("STYLER"),zE=Symbol("IS_EMPTY"),zT1=["ansi","ansi","ansi256","ansi16m"],Vz=Object.create(null),FC4=(I,d={})=>{if(d.level&&!(Number.isInteger(d.level)&&d.level>=0&&d.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let G=KT1?KT1.level:0;I.level=d.level===void 0?G:d.level};var gC4=(I)=>{let d=(...G)=>G.join(" ");return FC4(d,I),Object.setPrototypeOf(d,QE.prototype),d};function QE(I){return gC4(I)}Object.setPrototypeOf(QE.prototype,Function.prototype);for(let[I,d]of Object.entries(KC))Vz[I]={get(){let G=cl(this,F21(d.open,d.close,this[Az]),this[zE]);return Object.defineProperty(this,I,{value:G}),G}};Vz.visible={get(){let I=cl(this,this[Az],!0);return Object.defineProperty(this,"visible",{value:I}),I}};var H21=(I,d,G,...Z)=>{if(I==="rgb"){if(d==="ansi16m")return KC[G].ansi16m(...Z);if(d==="ansi256")return KC[G].ansi256(KC.rgbToAnsi256(...Z));return KC[G].ansi(KC.rgbToAnsi(...Z))}if(I==="hex")return H21("rgb",d,G,...KC.hexToRgb(...Z));return KC[G][I](...Z)},JC4=["rgb","hex","ansi256"];for(let I of JC4){Vz[I]={get(){let{level:G}=this;return function(...Z){let C=F21(H21(I,zT1[G],"color",...Z),KC.color.close,this[Az]);return cl(this,C,this[zE])}}};let d="bg"+I[0].toUpperCase()+I.slice(1);Vz[d]={get(){let{level:G}=this;return function(...Z){let C=F21(H21(I,zT1[G],"bgColor",...Z),KC.bgColor.close,this[Az]);return cl(this,C,this[zE])}}}}var KC4=Object.defineProperties(()=>{},{...Vz,level:{enumerable:!0,get(){return this[D21].level},set(I){this[D21].level=I}}}),F21=(I,d,G)=>{let Z,C;if(G===void 0)Z=I,C=d;else Z=G.openAll+I,C=d+G.closeAll;return{open:I,close:d,openAll:Z,closeAll:C,parent:G}},cl=(I,d,G)=>{let Z=(...C)=>NC4(Z,C.length===1?""+C[0]:C.join(" "));return Object.setPrototypeOf(Z,KC4),Z[D21]=I,Z[Az]=d,Z[zE]=G,Z},NC4=(I,d)=>{if(I.level<=0||!d)return I[zE]?"":d;let G=I[Az];if(G===void 0)return d;let{openAll:Z,closeAll:C}=G;if(d.includes("\x1B"))while(G!==void 0)d=gT1(d,G.close,G.open),G=G.parent;let W=d.indexOf(` +`);if(W!==-1)d=JT1(d,C,Z,W);return Z+d+C};Object.defineProperties(QE.prototype,Vz);var zC4=QE(),ZR9=QE({level:NT1?NT1.level:0});var c0=zC4;var Rb=J1(Il1(),1);var LB4={visibilityState:"visible",documentElement:{lang:"en"},addEventListener:(I,d)=>{}},yB4={document:LB4,location:{href:"node://localhost",pathname:"/"},addEventListener:(I,d)=>{if(I==="beforeunload")process.on("exit",()=>{if(typeof d==="function")d({});else d.handleEvent({})})},focus:()=>{},innerHeight:768,innerWidth:1024},PB4={sendBeacon:(I,d)=>{return!0},userAgent:"Mozilla/5.0 (Node.js) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0",language:"en-US"};if(typeof window==="undefined")global.window=yB4;if(typeof navigator==="undefined")global.navigator=PB4;import*as NC from"fs";import*as yE from"path";import{homedir as $B4}from"os";import{existsSync as uB4,unlinkSync as TB4}from"fs";var cF=yE.join($B4(),".claude","statsig");try{NC.mkdirSync(cF,{recursive:!0})}catch(I){X0(`Failed to create statsig storage directory: ${I}`)}class e21{cache=new Map;ready=!1;constructor(){try{if(!NC.existsSync(cF))NC.mkdirSync(cF,{recursive:!0});let I=NC.readdirSync(cF);for(let d of I){let G=decodeURIComponent(d),Z=NC.readFileSync(yE.join(cF,d),"utf8");this.cache.set(G,Z)}this.ready=!0}catch(I){X0(`Failed to initialize statsig storage: ${I}`),this.ready=!0}}isReady(){return this.ready}isReadyResolver(){return this.ready?Promise.resolve():null}getProviderName(){return"FileSystemStorageProvider"}getItem(I){return this.cache.get(I)??null}setItem(I,d){this.cache.set(I,d);try{let G=encodeURIComponent(I);NC.writeFileSync(yE.join(cF,G),d,"utf8")}catch(G){X0(`Failed to write statsig storage item: ${G}`)}}removeItem(I){this.cache.delete(I);let d=encodeURIComponent(I),G=yE.join(cF,d);if(!uB4(G))return;try{TB4(G)}catch(Z){X0(`Failed to remove statsig storage item: ${Z}`)}}getAllKeys(){return Array.from(this.cache.keys())}}var dl1="https://e531a1d9ec1de9064fae9d4affb0b0f4@o1158394.ingest.us.sentry.io/4508259541909504",Gl1="client-RRNS7R65EAtReO5XA4xDC3eU6ZdJQi6lLEP6b5j32Me";var Zl1="tengu-token-efficient-tools",Cl1="token-efficient-tools-2024-12-11",Wl1="tengu-use-external-updater",wl1="claude-code-20250219";var fb=a2(async()=>{let I=[wl1];if(process.env.SWE_BENCH){if(await NY(Zl1))I.push(Cl1)}return I});var eG=a2(async()=>{let{code:I}=await E5("git",["rev-parse","--is-inside-work-tree"]);return I===0}),OB4=async()=>{let{stdout:I}=await E5("git",["rev-parse","HEAD"]);return I.trim()},mB4=async()=>{let{stdout:I}=await E5("git",["rev-parse","--abbrev-ref","HEAD"],void 0,void 0,!1);return I.trim()},lB4=async()=>{let{stdout:I,code:d}=await E5("git",["remote","get-url","origin"],void 0,void 0,!1);return d===0?I.trim():null},bB4=async()=>{let{code:I}=await E5("git",["rev-parse","@{u}"],void 0,void 0,!1);return I===0},hB4=async()=>{let{stdout:I}=await E5("git",["status","--porcelain"],void 0,void 0,!1);return I.trim().length===0};async function qb(){try{let[I,d,G,Z,C]=await Promise.all([OB4(),mB4(),lB4(),bB4(),hB4()]);return{commitHash:I,branchName:d,remoteUrl:G,isHeadOnRemote:Z,isClean:C}}catch(I){return null}}var b9=!!process.env.CLAUDE_CODE_USE_BEDROCK,h9=!!process.env.CLAUDE_CODE_USE_VERTEX,Bl1={bedrock:"us.anthropic.claude-3-7-sonnet-20250219-v1:0",vertex:"claude-3-7-sonnet@20250219",firstParty:"claude-3-7-sonnet-20250219"},Rw=b9?"us.anthropic.claude-3-5-haiku-20241022-v1:0":h9?"claude-3-5-haiku@20241022":"claude-3-5-haiku-20241022";async function jB4(){try{return await PE("tengu-capable-model-config",Bl1)}catch(I){return X0(I),Bl1}}var K6=a2(async()=>{let I=await jB4();if(b9)return I.bedrock;if(h9)return I.vertex;return I.firstParty});async function t21(){return!process.env.ANTHROPIC_MODEL||process.env.ANTHROPIC_MODEL===await K6()}function Al1(I){if(I?.startsWith("claude-3-5-haiku"))return process.env.VERTEX_REGION_CLAUDE_3_5_HAIKU;else if(I?.startsWith("claude-3-5-sonnet"))return process.env.VERTEX_REGION_CLAUDE_3_5_SONNET;else if(I?.startsWith("claude-3-7-sonnet"))return process.env.VERTEX_REGION_CLAUDE_3_7_SONNET}var Vl1={},$E=null,Uz=a2(async()=>{if(K2.isCI)return null;let I=await Ub(),d={networkConfig:{api:"https://statsig.anthropic.com/v1/"},environment:{tier:K2.isCI||["test","development"].includes("production")?"dev":"production"},logLevel:Rb.LogLevel.None,storageProvider:new e21};return $E=new Rb.StatsigClient(Gl1,I,d),$E.on("error",(G)=>{X0(`Statsig error: ${G}`)}),await $E.initializeAsync(),process.on("exit",()=>{$E?.flush()}),$E});function I0(I,d){if(K2.isCI)return;Promise.all([Uz(),eG(),fb(),d.model?Promise.resolve(d.model):K6()]).then(([G,Z,C,W])=>{if(!G)return;let w={...d,model:W,sessionId:id,userType:"external",...{},...C.length>0?{betas:C.join(",")}:{},env:JSON.stringify({isGit:Z,platform:K2.platform,nodeVersion:K2.nodeVersion,terminal:K2.terminal,version:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION})},B={eventName:I,metadata:w};G.logEvent(B)})}var NY=a2(async(I)=>{if(K2.isCI)return!1;let d=await Uz();if(!d)return!1;let G=d.checkGate(I);return Vl1[I]=G,G});function Xl1(){return{...Vl1}}var $U9=a2(async(I,d)=>{if(K2.isCI)return d;let G=await Uz();if(!G)return d;let Z=G.getExperiment(I);if(Object.keys(Z.value).length===0)return X0(`getExperimentValue got empty value for ${I}`),d;return Z.value}),PE=async(I,d)=>{if(K2.isCI)return d;let G=await Uz();if(!G)return d;let Z=G.getDynamicConfig(I);if(Object.keys(Z.value).length===0)return X0(`getDynamicConfig got empty value for ${I}`),d;return Z.value};var vb=Hl1.tmpdir()+"/claude-",rB4=1800000,aB4=143,Eb={STATUS:"-status",STDOUT:"-stdout",STDERR:"-stderr",CWD:"-cwd"},sB4={"/bin/bash":".bashrc","/bin/zsh":".zshrc"};class m8{commandQueue=[];isExecuting=!1;shell;isAlive=!0;commandInterrupted=!1;statusFile;stdoutFile;stderrFile;cwdFile;cwd;binShell;constructor(I){this.binShell=process.env.SHELL||"/bin/bash",this.shell=cB4(this.binShell,["-l"],{stdio:["pipe","pipe","pipe"],cwd:I,env:{...process.env,GIT_EDITOR:"true"}}),this.cwd=I,this.shell.on("exit",(Z,C)=>{if(Z)X0(`Shell exited with code ${Z} and signal ${C}`),I0("persistent_shell_exit",{code:Z?.toString()||"null",signal:C||"null"});for(let W of[this.statusFile,this.stdoutFile,this.stderrFile,this.cwdFile])if(N6.existsSync(W))N6.unlinkSync(W);this.isAlive=!1});let d=Math.floor(Math.random()*65536).toString(16).padStart(4,"0");this.statusFile=vb+d+Eb.STATUS,this.stdoutFile=vb+d+Eb.STDOUT,this.stderrFile=vb+d+Eb.STDERR,this.cwdFile=vb+d+Eb.CWD;for(let Z of[this.statusFile,this.stdoutFile,this.stderrFile])N6.writeFileSync(Z,"");N6.writeFileSync(this.cwdFile,I);let G=sB4[this.binShell];if(G){let Z=nB4(xB4(),G);if(Yl1(Z))this.sendToShell(`source ${Z}`)}}static instance=null;static restart(){if(m8.instance)m8.instance.close(),m8.instance=null}static getInstance(){if(!m8.instance||!m8.instance.isAlive)m8.instance=new m8(process.cwd());return m8.instance}killChildren(){let I=this.shell.pid;try{let d=_l1(`pgrep -P ${I}`).toString().trim().split(` +`).filter(Boolean);if(d.length>0)I0("persistent_shell_command_interrupted",{numChildProcesses:d.length.toString()});d.forEach((G)=>{try{process.kill(Number(G),"SIGTERM")}catch(Z){X0(`Failed to kill process ${G}: ${Z}`),I0("persistent_shell_kill_process_error",{error:Z.message.substring(0,10)})}})}catch{}finally{this.commandInterrupted=!0}}async processQueue(){if(this.isExecuting||this.commandQueue.length===0)return;this.isExecuting=!0;let{command:I,abortSignal:d,timeout:G,resolve:Z,reject:C}=this.commandQueue.shift(),W=()=>this.killChildren();if(d)d.addEventListener("abort",W);try{let w=await this.exec_(I,G);Z(w)}catch(w){I0("persistent_shell_command_error",{error:w.message.substring(0,10)}),C(w)}finally{if(this.isExecuting=!1,d)d.removeEventListener("abort",W);this.processQueue()}}async exec(I,d,G){return new Promise((Z,C)=>{this.commandQueue.push({command:I,abortSignal:d,timeout:G,resolve:Z,reject:C}),this.processQueue()})}async exec_(I,d){let G=Dl1.default.quote([I]);try{_l1(`${this.binShell} -n -c ${G}`,{stdio:"ignore",timeout:1000})}catch(C){let W=typeof C==="string"?C:String(C||"");return I0("persistent_shell_syntax_error",{error:W.substring(0,10)}),Promise.resolve({stdout:"",stderr:W,code:128,interrupted:!1})}let Z=d||rB4;return this.commandInterrupted=!1,new Promise((C)=>{N6.writeFileSync(this.stdoutFile,""),N6.writeFileSync(this.stderrFile,""),N6.writeFileSync(this.statusFile,"");let W=[];W.push(`eval ${G} < /dev/null > ${this.stdoutFile} 2> ${this.stderrFile}`),W.push("EXEC_EXIT_CODE=$?"),W.push(`pwd > ${this.cwdFile}`),W.push(`echo $EXEC_EXIT_CODE > ${this.statusFile}`),this.sendToShell(W.join(` +`));let w=Date.now(),B=setInterval(()=>{try{let A=0;if(N6.existsSync(this.statusFile))A=N6.statSync(this.statusFile).size;if(A>0||Date.now()-w>Z||this.commandInterrupted){clearInterval(B);let V=N6.existsSync(this.stdoutFile)?N6.readFileSync(this.stdoutFile,"utf8"):"",X=N6.existsSync(this.stderrFile)?N6.readFileSync(this.stderrFile,"utf8"):"",_;if(A)_=Number(N6.readFileSync(this.statusFile,"utf8"));else this.killChildren(),_=aB4,X+=(X?` +`:"")+"Command execution timed out",I0("persistent_shell_command_timeout",{command:I.substring(0,10),timeout:Z.toString()});C({stdout:V,stderr:X,code:_,interrupted:this.commandInterrupted})}}catch{}},10)})}sendToShell(I){try{this.shell.stdin.write(I+` +`)}catch(d){let G=d instanceof Error?d.message:String(d||"Unknown error");throw X0(`Error in sendToShell: ${G}`),I0("persistent_shell_write_error",{error:G.substring(0,100),command:I.substring(0,30)}),d}}pwd(){try{let I=N6.readFileSync(this.cwdFile,"utf8").trim();if(I)this.cwd=I}catch(I){X0(`Shell pwd error ${I}`)}return this.cwd}async setCwd(I){let d=pB4(I)?I:iB4(process.cwd(),I);if(!Yl1(d))throw new Error(`Path "${d}" does not exist`);await this.exec(`cd ${d}`)}close(){this.shell.stdin.end(),this.shell.kill()}}var eB4={originalCwd:oB4()};async function Uw(I){await m8.getInstance().setCwd(I)}function t7(){return eB4.originalCwd}function R0(){return m8.getInstance().pwd()}var IA4=1000,dA4=60;function E5(I,d,G,Z=10*dA4*IA4,C=!0){return new Promise((W)=>{try{tB4(I,d,{maxBuffer:1e6,signal:G,timeout:Z,cwd:R0()},(w,B,A)=>{if(w)if(C){let V=typeof w.code==="number"?w.code:1;W({stdout:B||"",stderr:A||"",code:V})}else W({stdout:"",stderr:"",code:1});else W({stdout:B,stderr:A,code:0})})}catch(w){X0(w),W({stdout:"",stderr:"",code:1})}})}import{join as Mb}from"path";import{homedir as Fl1}from"os";var vz=process.env.CLAUDE_CONFIG_DIR??Mb(Fl1(),".claude"),jA=process.env.CLAUDE_CONFIG_DIR?Mb(vz,"config.json"):Mb(Fl1(),".claude.json"),gl1=Mb(vz,"memory"),GA4=a2(async()=>{let{code:I}=await E5("test",["-f","/.dockerenv"]);if(I!==0)return!1;return process.platform==="linux"}),ZA4=a2(async()=>{try{let I=new AbortController,d=setTimeout(()=>I.abort(),1000);return await fetch("http://1.1.1.1",{method:"HEAD",signal:I.signal}),clearTimeout(d),!0}catch{return!1}}),K2={getIsDocker:GA4,hasInternetAccess:ZA4,isCI:Boolean(process.env.CI),platform:process.platform==="win32"?"windows":process.platform==="darwin"?"macos":"linux",nodeVersion:process.version,terminal:process.env.TERM_PROGRAM};import{randomBytes as wA4}from"crypto";function tG(I){if(!I)return null;try{return JSON.parse(I)}catch(d){return X0(d),null}}class I41 extends TypeError{}class Ez extends Error{}class Mz extends Error{filePath;defaultConfig;constructor(I,d,G){super(I);this.name="ConfigParseError",this.filePath=d,this.defaultConfig=G}}var Nl1={allowedTools:[],context:{},history:[],dontCrawlDirectory:!1,enableArchitectTool:!1,mcpContextUris:[],mcpServers:{},approvedMcprcServers:[],rejectedMcprcServers:[],hasTrustDialogAccepted:!1};function Kl1(I){let d={...Nl1};if(I===WA4())d.dontCrawlDirectory=!0;return d}function BA4(I){return["disabled","enabled","no_permissions","not_configured"].includes(I)}var zC={numStartups:0,autoUpdaterStatus:"not_configured",theme:"dark",preferredNotifChannel:"iterm2",verbose:!1,customApiKeyResponses:{approved:[],rejected:[]}},uE=["autoUpdaterStatus","theme","hasCompletedOnboarding","lastOnboardingVersion","lastReleaseNotesSeen","verbose","customApiKeyResponses","primaryApiKey","preferredNotifChannel","shiftEnterKeyBindingInstalled"];function C41(I){return uE.includes(I)}var TE=["dontCrawlDirectory","enableArchitectTool","hasTrustDialogAccepted","hasCompletedProjectOnboarding"];function zl1(){let I=R0(),d=Sz(jA,zC);while(!0){if(d.projects?.[I]?.hasTrustDialogAccepted)return!0;let Z=Z41(I,"..");if(Z===I)break;I=Z}return!1}var Hv9={...zC,autoUpdaterStatus:"disabled"},Fv9={...Nl1};function W41(I){return TE.includes(I)}function p4(I){fl1(jA,{...I,projects:Sz(jA,zC).projects},zC)}function q2(){return Sz(jA,zC)}function vw(){return q2().primaryApiKey??null}function Sb(I){return I.slice(-20)}function Lb(){let I=q2();return vw()===I.primaryApiKey}function Ql1(I){let d=q2();if(d.customApiKeyResponses?.approved?.includes(I))return"approved";if(d.customApiKeyResponses?.rejected?.includes(I))return"rejected";return"new"}function fl1(I,d,G){let Z=Object.fromEntries(Object.entries(d).filter(([C,W])=>JSON.stringify(W)!==JSON.stringify(G[C])));CA4(I,JSON.stringify(Z,null,2),"utf-8")}var ql1=!1;function Rl1(){ql1=!0,Sz(jA,zC,!0)}function Sz(I,d,G){if(!ql1)throw new Error("Config accessed before allowed.");if(!d41(I))return JE(d);try{let Z=G41(I,"utf-8");try{let C=JSON.parse(Z);return{...JE(d),...C}}catch(C){let W=C instanceof Error?C.message:String(C);throw new Mz(W,I,d)}}catch(Z){if(Z instanceof Mz&&G)throw Z;return JE(d)}}function I5(){let I=Z41(R0()),d=Sz(jA,zC);if(!d.projects)return Kl1(I);let G=d.projects[I]??Kl1(I);if(typeof G.allowedTools==="string")G.allowedTools=tG(G.allowedTools)??[];return G}function o9(I){let d=Sz(jA,zC);fl1(jA,{...d,projects:{...d.projects,[Z41(R0())]:I}},zC)}async function Ul1(){return await NY(Wl1)||q2().autoUpdaterStatus==="disabled"}var OE=a2(()=>{let I=Jl1(R0(),".mcprc");if(!d41(I))return{};try{let d=G41(I,"utf-8"),G=tG(d);if(G&&typeof G==="object")return I0("tengu_mcprc_found",{numServers:Object.keys(G).length.toString()}),G}catch{}return{}},()=>{let I=R0(),d=Jl1(I,".mcprc");if(d41(d))try{let G=G41(d,"utf-8");return`${I}:${G}`}catch{return I}return I});function yb(){let I=q2();if(I.userID)return I.userID;let d=wA4(32).toString("hex");return p4({...I,userID:d}),d}function vl1(I,d){if(I0("tengu_config_get",{key:I,global:d?.toString()??"false"}),d){if(!C41(I))console.error(`Error: '${I}' is not a valid config key. Valid keys are: ${uE.join(", ")}`),process.exit(1);return q2()[I]}else{if(!W41(I))console.error(`Error: '${I}' is not a valid config key. Valid keys are: ${TE.join(", ")}`),process.exit(1);return I5()[I]}}function El1(I,d,G){if(I0("tengu_config_set",{key:I,global:G?.toString()??"false"}),G){if(!C41(I))console.error(`Error: Cannot set '${I}'. Only these keys can be modified: ${uE.join(", ")}`),process.exit(1);if(I==="autoUpdaterStatus"&&!BA4(d))console.error("Error: Invalid value for autoUpdaterStatus. Must be one of: disabled, enabled, no_permissions, not_configured"),process.exit(1);let Z=q2();p4({...Z,[I]:d})}else{if(!W41(I))console.error(`Error: Cannot set '${I}'. Only these keys can be modified: ${TE.join(", ")}. Did you mean --global?`),process.exit(1);let Z=I5();o9({...Z,[I]:d})}setTimeout(()=>{process.exit(0)},100)}function Ml1(I,d){if(I0("tengu_config_delete",{key:I,global:d?.toString()??"false"}),d){if(!C41(I))console.error(`Error: Cannot delete '${I}'. Only these keys can be modified: ${uE.join(", ")}`),process.exit(1);let G=q2();delete G[I],p4(G)}else{if(!W41(I))console.error(`Error: Cannot delete '${I}'. Only these keys can be modified: ${TE.join(", ")}. Did you mean --global?`),process.exit(1);let G=I5();delete G[I],o9(G)}}function Sl1(I){if(I0("tengu_config_list",{global:I?.toString()??"false"}),I)return Tl(q2(),uE);else return Tl(I5(),TE)}var Ll1=a2(async()=>{let I=await E5("git",["config","user.email"]);if(I.code!==0){X0(`Failed to get git email: ${I.stdout} ${I.stderr}`);return}return I.stdout.trim()||void 0}),Ub=a2(async()=>{let I=yb(),d=q2(),G=void 0;return{customIDs:{sessionId:id},userID:I,appVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,userAgent:K2.platform,email:void 0,custom:{nodeVersion:K2.nodeVersion,userType:"external",organizationUuid:d.oauthAccount?.organizationUuid,accountUuid:d.oauthAccount?.accountUuid}}});function yl1(){sI.init({dsn:dl1,release:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,integrations:[new sI.Integrations.Http({tracing:!0}),new sI.Integrations.Modules,new sI.Integrations.Console,new sI.Integrations.FunctionToString,new sI.Integrations.LinkedErrors],tracesSampleRate:1,tracePropagationTargets:["localhost"]})}async function bl(I){try{let[d,G]=await Promise.all([eG(),Ub()]);sI.setExtras({nodeVersion:K2.nodeVersion,platform:K2.platform,cwd:R0(),isCI:K2.isCI,isGit:d,isTest:!1,packageVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,sessionId:id,statsigGates:Xl1(),terminal:K2.terminal,userType:"external"}),sI.setUser({id:G.userID,email:G.email}),sI.captureException(I)}catch{}}var K4="Claude Code";var lj1={};var Pl1=!1,pF=void 0,w41=void 0,AA4=void 0,VA4=void 0,XA4=void 0,$l1=void 0,YA4=void 0,Pb=void 0,B41=void 0,ul1=void 0,A41=void 0,$b=void 0,Tl1=void 0;function ub(I,d={auto:!1}){if(Pl1)throw new Error(`you must \`import '@anthropic-ai/sdk/shims/${I.kind}'\` before importing anything else from @anthropic-ai/sdk`);if(pF)throw new Error(`can't \`import '@anthropic-ai/sdk/shims/${I.kind}'\` after \`import '@anthropic-ai/sdk/shims/${pF}'\``);Pl1=d.auto,pF=I.kind,w41=I.fetch,AA4=I.Request,VA4=I.Response,XA4=I.Headers,$l1=I.FormData,YA4=I.Blob,Pb=I.File,B41=I.ReadableStream,ul1=I.getMultipartRequestOptions,A41=I.getDefaultAgent,$b=I.fileFromPath,Tl1=I.isFsReadStream}var TY=J1(f41(),1);Nh();d51();import{inspect as AX4}from"util";t41();var rh1=(I)=>I instanceof vC;import{deprecate as BX4}from"util";var ah1=BX4(()=>{},'Constructor "entries" argument is not spec-compliant and will be removed in next major release.');var Lw=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},zh,yw,G51;class Z51{constructor(I){if(zh.add(this),yw.set(this,new Map),I)ah1(),I.forEach(({name:d,value:G,fileName:Z})=>this.append(d,G,Z))}static[(yw=new WeakMap,zh=new WeakSet,Symbol.hasInstance)](I){return Boolean(I&&Z6(I.constructor)&&I[Symbol.toStringTag]==="FormData"&&Z6(I.append)&&Z6(I.set)&&Z6(I.get)&&Z6(I.getAll)&&Z6(I.has)&&Z6(I.delete)&&Z6(I.entries)&&Z6(I.values)&&Z6(I.keys)&&Z6(I[Symbol.iterator])&&Z6(I.forEach))}append(I,d,G){Lw(this,zh,"m",G51).call(this,{name:I,fileName:G,append:!0,rawValue:d,argsLength:arguments.length})}set(I,d,G){Lw(this,zh,"m",G51).call(this,{name:I,fileName:G,append:!1,rawValue:d,argsLength:arguments.length})}get(I){let d=Lw(this,yw,"f").get(String(I));if(!d)return null;return d[0]}getAll(I){let d=Lw(this,yw,"f").get(String(I));if(!d)return[];return d.slice()}has(I){return Lw(this,yw,"f").has(String(I))}delete(I){Lw(this,yw,"f").delete(String(I))}*keys(){for(let I of Lw(this,yw,"f").keys())yield I}*entries(){for(let I of this.keys()){let d=this.getAll(I);for(let G of d)yield[I,G]}}*values(){for(let[,I]of this)yield I}[(G51=function I({name:d,rawValue:G,append:Z,fileName:C,argsLength:W}){let w=Z?"append":"set";if(W<2)throw new TypeError(`Failed to execute '${w}' on 'FormData': 2 arguments required, but only ${W} present.`);d=String(d);let B;if(I51(G))B=C===void 0?G:new Sw([G],C,{type:G.type,lastModified:G.lastModified});else if(rh1(G))B=new Sw([G],C===void 0?"blob":C,{type:G.type});else if(C)throw new TypeError(`Failed to execute '${w}' on 'FormData': parameter 2 is not of type 'Blob'.`);else B=String(G);let A=Lw(this,yw,"f").get(d);if(!A)return void Lw(this,yw,"f").set(d,[B]);if(!Z)return void Lw(this,yw,"f").set(d,[B]);A.push(B)},Symbol.iterator)](){return this.entries()}forEach(I,d){for(let[G,Z]of this)I.call(d,Z,G,this)}get[Symbol.toStringTag](){return"FormData"}[AX4.custom](){return this[Symbol.toStringTag]}}var Q51=J1(Aj1(),1),mj1=J1(qj1(),1);import{ReadStream as sX4}from"node:fs";function TX4(){let I=16,d="";while(I--)d+="abcdefghijklmnopqrstuvwxyz0123456789"[Math.random()*36<<0];return d}var Rj1=TX4;var OX4=(I)=>Object.prototype.toString.call(I).slice(8,-1).toLowerCase();function mX4(I){if(OX4(I)!=="object")return!1;let d=Object.getPrototypeOf(I);if(d===null||d===void 0)return!0;return(d.constructor&&d.constructor.toString())===Object.toString()}var H51=mX4;var lX4=(I)=>String(I).replace(/\r|\n/g,(d,G,Z)=>{if(d==="\r"&&Z[G+1]!==` +`||d===` +`&&Z[G-1]!=="\r")return`\r +`;return d}),F51=lX4;var bX4=(I)=>String(I).replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/"/g,"%22"),g51=bX4;var hX4=(I)=>typeof I==="function",aA=hX4;var wg=(I)=>Boolean(I&&typeof I==="object"&&aA(I.constructor)&&I[Symbol.toStringTag]==="File"&&aA(I.stream)&&I.name!=null&&I.size!=null&&I.lastModified!=null);var Uj1=(I)=>Boolean(I&&aA(I.constructor)&&I[Symbol.toStringTag]==="FormData"&&aA(I.append)&&aA(I.getAll)&&aA(I.entries)&&aA(I[Symbol.iterator]));var CM=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},e9=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},Sh,uY,WM,Lh,wM,Bg,BM,AM,yh,J51,jX4={enableAdditionalHeaders:!1};class K51{constructor(I,d,G){if(Sh.add(this),uY.set(this,`\r +`),WM.set(this,void 0),Lh.set(this,void 0),wM.set(this,"-".repeat(2)),Bg.set(this,new TextEncoder),BM.set(this,void 0),AM.set(this,void 0),yh.set(this,void 0),!Uj1(I))throw new TypeError("Expected first argument to be a FormData instance.");let Z;if(H51(d))G=d;else Z=d;if(!Z)Z=Rj1();if(typeof Z!=="string")throw new TypeError("Expected boundary argument to be a string.");if(G&&!H51(G))throw new TypeError("Expected options argument to be an object.");CM(this,AM,I,"f"),CM(this,yh,{...jX4,...G},"f"),CM(this,WM,e9(this,Bg,"f").encode(e9(this,uY,"f")),"f"),CM(this,Lh,e9(this,WM,"f").byteLength,"f"),this.boundary=`form-data-boundary-${Z}`,this.contentType=`multipart/form-data; boundary=${this.boundary}`,CM(this,BM,e9(this,Bg,"f").encode(`${e9(this,wM,"f")}${this.boundary}${e9(this,wM,"f")}${e9(this,uY,"f").repeat(2)}`),"f"),this.contentLength=String(this.getContentLength()),this.headers=Object.freeze({"Content-Type":this.contentType,"Content-Length":this.contentLength}),Object.defineProperties(this,{boundary:{writable:!1,configurable:!1},contentType:{writable:!1,configurable:!1},contentLength:{writable:!1,configurable:!1},headers:{writable:!1,configurable:!1}})}getContentLength(){let I=0;for(let[d,G]of e9(this,AM,"f")){let Z=wg(G)?G:e9(this,Bg,"f").encode(F51(G));I+=e9(this,Sh,"m",J51).call(this,d,Z).byteLength,I+=wg(Z)?Z.size:Z.byteLength,I+=e9(this,Lh,"f")}return I+e9(this,BM,"f").byteLength}*values(){for(let[I,d]of e9(this,AM,"f").entries()){let G=wg(d)?d:e9(this,Bg,"f").encode(F51(d));yield e9(this,Sh,"m",J51).call(this,I,G),yield G,yield e9(this,WM,"f")}yield e9(this,BM,"f")}async*encode(){for(let I of this.values())if(wg(I))yield*I.stream();else yield I}[(uY=new WeakMap,WM=new WeakMap,Lh=new WeakMap,wM=new WeakMap,Bg=new WeakMap,BM=new WeakMap,AM=new WeakMap,yh=new WeakMap,Sh=new WeakSet,J51=function I(d,G){let Z="";if(Z+=`${e9(this,wM,"f")}${this.boundary}${e9(this,uY,"f")}`,Z+=`Content-Disposition: form-data; name="${g51(d)}"`,wg(G))Z+=`; filename="${g51(G.name)}"${e9(this,uY,"f")}`,Z+=`Content-Type: ${G.type||"application/octet-stream"}`;if(e9(this,yh,"f").enableAdditionalHeaders===!0)Z+=`${e9(this,uY,"f")}Content-Length: ${wg(G)?G.size:G.byteLength}`;return e9(this,Bg,"f").encode(`${Z}${e9(this,uY,"f").repeat(2)}`)},Symbol.iterator)](){return this.values()}[Symbol.asyncIterator](){return this.encode()}}import{Readable as oX4}from"node:stream";class N51{constructor(I){this.body=I}get[Symbol.toStringTag](){return"MultipartBody"}}import{ReadableStream as eX4}from"node:stream/web";var Oj1=!1;async function tX4(I,...d){let{fileFromPath:G}=await Promise.resolve().then(() => (Tj1(),uj1));if(!Oj1)console.warn(`fileFromPath is deprecated; use fs.createReadStream(${JSON.stringify(I)}) instead`),Oj1=!0;return await G(I,...d)}var IY4=new Q51.default({keepAlive:!0,timeout:300000}),dY4=new Q51.default.HttpsAgent({keepAlive:!0,timeout:300000});async function GY4(I,d){let G=new K51(I),Z=oX4.from(G),C=new N51(Z),W={...d.headers,...G.headers,"Content-Length":G.contentLength};return{...d,body:C,headers:W}}function Ph(){if(typeof AbortController==="undefined")globalThis.AbortController=mj1.AbortController;return{kind:"node",fetch:TY.default,Request:TY.Request,Response:TY.Response,Headers:TY.Headers,FormData:Z51,Blob:vC,File:Sw,ReadableStream:eX4,getMultipartRequestOptions:GY4,getDefaultAgent:(I)=>I.startsWith("https")?dY4:IY4,fileFromPath:tX4,isFsReadStream:(I)=>I instanceof sX4}}ub(Ph());var gU=J1(u1(),1);import{ReadStream as wX9}from"tty";import{openSync as BX9,existsSync as AX9}from"fs";import{Stream as pH4}from"node:stream";import dk from"node:process";var Rp1=J1(u1(),1);import cH4 from"node:process";function bj1(I,d,{signal:G,edges:Z}={}){let C=void 0,W=null,w=Z!=null&&Z.includes("leading"),B=Z==null||Z.includes("trailing"),A=()=>{if(W!==null)I.apply(C,W),C=void 0,W=null},V=()=>{if(B)A();g()},X=null,_=()=>{if(X!=null)clearTimeout(X);X=setTimeout(()=>{X=null,V()},d)},F=()=>{if(X!==null)clearTimeout(X),X=null},g=()=>{F(),C=void 0,W=null},J=()=>{F(),A()},K=function(...Q){if(G?.aborted)return;C=this,W=Q;let E=X==null;if(_(),w&&E)A()};return K.schedule=_,K.cancel=g,K.flush=J,G?.addEventListener("abort",g,{once:!0}),K}function hj1(I,d=0,G={}){if(typeof G!=="object")G={};let{signal:Z,leading:C=!1,trailing:W=!0,maxWait:w}=G,B=Array(2);if(C)B[0]="leading";if(W)B[1]="trailing";let A=void 0,V=null,X=bj1(function(...g){A=I.apply(this,g),V=null},d,{signal:Z,edges:B}),_=function(...g){if(w!=null){if(V===null)V=Date.now();else if(Date.now()-V>=w)return A=I.apply(this,g),V=Date.now(),X.cancel(),X.schedule(),A}return X.apply(this,g),A},F=()=>{return X.flush(),A};return _.cancel=X.cancel,_.flush=F,_}function $h(I,d=0,G={}){if(typeof G!=="object")G={};let{leading:Z=!0,trailing:C=!0,signal:W}=G;return hj1(I,d,{leading:Z,trailing:C,signal:W,maxWait:d})}var OY={};Kv(OY,{scrollUp:()=>QY4,scrollDown:()=>fY4,link:()=>MY4,image:()=>SY4,iTerm:()=>LY4,exitAlternativeScreen:()=>vY4,eraseUp:()=>zY4,eraseStartLine:()=>KY4,eraseScreen:()=>f51,eraseLines:()=>gY4,eraseLine:()=>cj1,eraseEndLine:()=>JY4,eraseDown:()=>NY4,enterAlternativeScreen:()=>UY4,cursorUp:()=>kj1,cursorTo:()=>WY4,cursorShow:()=>R51,cursorSavePosition:()=>XY4,cursorRestorePosition:()=>YY4,cursorPrevLine:()=>HY4,cursorNextLine:()=>DY4,cursorMove:()=>wY4,cursorLeft:()=>xj1,cursorHide:()=>FY4,cursorGetPosition:()=>_Y4,cursorForward:()=>AY4,cursorDown:()=>BY4,cursorBackward:()=>VY4,clearTerminal:()=>RY4,clearScreen:()=>qY4,beep:()=>EY4});import q51 from"node:process";var uh=globalThis.window?.document!==void 0,tE9=globalThis.process?.versions?.node!==void 0,IM9=globalThis.process?.versions?.bun!==void 0,dM9=globalThis.Deno?.version?.deno!==void 0,GM9=globalThis.process?.versions?.electron!==void 0,ZM9=globalThis.navigator?.userAgent?.includes("jsdom")===!0,CM9=typeof WorkerGlobalScope!=="undefined"&&globalThis instanceof WorkerGlobalScope,WM9=typeof DedicatedWorkerGlobalScope!=="undefined"&&globalThis instanceof DedicatedWorkerGlobalScope,wM9=typeof SharedWorkerGlobalScope!=="undefined"&&globalThis instanceof SharedWorkerGlobalScope,BM9=typeof ServiceWorkerGlobalScope!=="undefined"&&globalThis instanceof ServiceWorkerGlobalScope,XM=globalThis.navigator?.userAgentData?.platform,AM9=XM==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform==="darwin",VM9=XM==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform==="win32",XM9=XM==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform==="linux",YM9=XM==="iOS"||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),_M9=XM==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform==="android";var $5="\x1B[",_M="\x1B]",az="\x07",YM=";",jj1=!uh&&q51.env.TERM_PROGRAM==="Apple_Terminal",ZY4=!uh&&q51.platform==="win32",CY4=uh?()=>{throw new Error("`process.cwd()` only works in Node.js, not the browser.")}:q51.cwd,WY4=(I,d)=>{if(typeof I!=="number")throw new TypeError("The `x` argument is required");if(typeof d!=="number")return $5+(I+1)+"G";return $5+(d+1)+YM+(I+1)+"H"},wY4=(I,d)=>{if(typeof I!=="number")throw new TypeError("The `x` argument is required");let G="";if(I<0)G+=$5+-I+"D";else if(I>0)G+=$5+I+"C";if(d<0)G+=$5+-d+"A";else if(d>0)G+=$5+d+"B";return G},kj1=(I=1)=>$5+I+"A",BY4=(I=1)=>$5+I+"B",AY4=(I=1)=>$5+I+"C",VY4=(I=1)=>$5+I+"D",xj1=$5+"G",XY4=jj1?"\x1B7":$5+"s",YY4=jj1?"\x1B8":$5+"u",_Y4=$5+"6n",DY4=$5+"E",HY4=$5+"F",FY4=$5+"?25l",R51=$5+"?25h",gY4=(I)=>{let d="";for(let G=0;G[_M,"8",YM,YM,d,az,I,_M,"8",YM,YM,az].join(""),SY4=(I,d={})=>{let G=`${_M}1337;File=inline=1`;if(d.width)G+=`;width=${d.width}`;if(d.height)G+=`;height=${d.height}`;if(d.preserveAspectRatio===!1)G+=";preserveAspectRatio=0";return G+":"+Buffer.from(I).toString("base64")+az},LY4={setCwd:(I=CY4())=>`${_M}50;CurrentDir=${I}${az}`,annotation(I,d={}){let G=`${_M}1337;`,Z=d.x!==void 0,C=d.y!==void 0;if((Z||C)&&!(Z&&C&&d.length!==void 0))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");if(I=I.replaceAll("|",""),G+=d.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",d.length>0)G+=(Z?[I,d.length,d.x,d.y]:[d.length,I]).join("|");else G+=I;return G+az}};import{env as DM}from"node:process";var yY4=DM.CI!=="0"&&DM.CI!=="false"&&(("CI"in DM)||("CONTINUOUS_INTEGRATION"in DM)||Object.keys(DM).some((I)=>I.startsWith("CI_"))),Vg=yY4;var PY4=(I)=>{let d=new Set;do for(let G of Reflect.ownKeys(I))d.add([I,G]);while((I=Reflect.getPrototypeOf(I))&&I!==Object.prototype);return d};function U51(I,{include:d,exclude:G}={}){let Z=(C)=>{let W=(w)=>typeof w==="string"?C===w:w.test(C);if(d)return d.some(W);if(G)return!G.some(W);return!0};for(let[C,W]of PY4(I.constructor.prototype)){if(W==="constructor"||!Z(W))continue;let w=Reflect.getOwnPropertyDescriptor(C,W);if(w&&typeof w.value==="function")I[W]=I[W].bind(I)}return I}var Up1=J1(sj1(),1);import{PassThrough as oj1}from"node:stream";var ej1=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],M51={},$Y4=(I)=>{let d=new oj1,G=new oj1;d.write=(C)=>{I("stdout",C)},G.write=(C)=>{I("stderr",C)};let Z=new console.Console(d,G);for(let C of ej1)M51[C]=console[C],console[C]=Z[C];return()=>{for(let C of ej1)console[C]=M51[C];M51={}}},tj1=$Y4;var Rc1=J1(Yk1(),1);import eD4 from"node:process";var b51=16;var I2={},ch=I2.ALIGN_AUTO=0,KM=I2.ALIGN_FLEX_START=1,NM=I2.ALIGN_CENTER=2,zM=I2.ALIGN_FLEX_END=3,ph=I2.ALIGN_STRETCH=4,_k1=I2.ALIGN_BASELINE=5,Dk1=I2.ALIGN_SPACE_BETWEEN=6,Hk1=I2.ALIGN_SPACE_AROUND=7,Fk1=I2.DIMENSION_WIDTH=0,gk1=I2.DIMENSION_HEIGHT=1,Jk1=I2.DIRECTION_INHERIT=0,Kk1=I2.DIRECTION_LTR=1,Nk1=I2.DIRECTION_RTL=2,IQ=I2.DISPLAY_FLEX=0,lY=I2.DISPLAY_NONE=1,uw=I2.EDGE_LEFT=0,bY=I2.EDGE_TOP=1,Tw=I2.EDGE_RIGHT=2,hY=I2.EDGE_BOTTOM=3,ih=I2.EDGE_START=4,nh=I2.EDGE_END=5,QM=I2.EDGE_HORIZONTAL=6,fM=I2.EDGE_VERTICAL=7,qM=I2.EDGE_ALL=8,zk1=I2.EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS=0,Qk1=I2.EXPERIMENTAL_FEATURE_ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE=1,fk1=I2.EXPERIMENTAL_FEATURE_FIX_ABSOLUTE_TRAILING_COLUMN_MARGIN=2,rh=I2.FLEX_DIRECTION_COLUMN=0,ah=I2.FLEX_DIRECTION_COLUMN_REVERSE=1,sh=I2.FLEX_DIRECTION_ROW=2,oh=I2.FLEX_DIRECTION_ROW_REVERSE=3,eh=I2.GUTTER_COLUMN=0,th=I2.GUTTER_ROW=1,Ij=I2.GUTTER_ALL=2,dj=I2.JUSTIFY_FLEX_START=0,Gj=I2.JUSTIFY_CENTER=1,Zj=I2.JUSTIFY_FLEX_END=2,Cj=I2.JUSTIFY_SPACE_BETWEEN=3,Wj=I2.JUSTIFY_SPACE_AROUND=4,wj=I2.JUSTIFY_SPACE_EVENLY=5,qk1=I2.LOG_LEVEL_ERROR=0,Rk1=I2.LOG_LEVEL_WARN=1,Uk1=I2.LOG_LEVEL_INFO=2,vk1=I2.LOG_LEVEL_DEBUG=3,Ek1=I2.LOG_LEVEL_VERBOSE=4,Mk1=I2.LOG_LEVEL_FATAL=5,Sk1=I2.MEASURE_MODE_UNDEFINED=0,Lk1=I2.MEASURE_MODE_EXACTLY=1,yk1=I2.MEASURE_MODE_AT_MOST=2,Pk1=I2.NODE_TYPE_DEFAULT=0,$k1=I2.NODE_TYPE_TEXT=1,uk1=I2.OVERFLOW_VISIBLE=0,Tk1=I2.OVERFLOW_HIDDEN=1,Ok1=I2.OVERFLOW_SCROLL=2,mk1=I2.POSITION_TYPE_STATIC=0,Bj=I2.POSITION_TYPE_RELATIVE=1,Aj=I2.POSITION_TYPE_ABSOLUTE=2,lk1=I2.PRINT_OPTIONS_LAYOUT=1,bk1=I2.PRINT_OPTIONS_STYLE=2,hk1=I2.PRINT_OPTIONS_CHILDREN=4,jk1=I2.UNIT_UNDEFINED=0,kk1=I2.UNIT_POINT=1,xk1=I2.UNIT_PERCENT=2,ck1=I2.UNIT_AUTO=3,Vj=I2.WRAP_NO_WRAP=0,Xj=I2.WRAP_WRAP=1,Yj=I2.WRAP_WRAP_REVERSE=2;var pk1=(I)=>{function d(C,W,w){let B=C[W];C[W]=function(...A){return w.call(this,B,...A)}}for(let C of["setPosition","setMargin","setFlexBasis","setWidth","setHeight","setMinWidth","setMinHeight","setMaxWidth","setMaxHeight","setPadding"]){let W={[I2.UNIT_POINT]:I.Node.prototype[C],[I2.UNIT_PERCENT]:I.Node.prototype[`${C}Percent`],[I2.UNIT_AUTO]:I.Node.prototype[`${C}Auto`]};d(I.Node.prototype,C,function(w,...B){let A,V,X=B.pop();if(X==="auto")A=I2.UNIT_AUTO,V=void 0;else if(typeof X=="object")A=X.unit,V=X.valueOf();else if(A=typeof X=="string"&&X.endsWith("%")?I2.UNIT_PERCENT:I2.UNIT_POINT,V=parseFloat(X),!Number.isNaN(X)&&Number.isNaN(V))throw Error(`Invalid value ${X} for ${C}`);if(!W[A])throw Error(`Failed to execute "${C}": Unsupported unit '${X}'`);return V!==void 0?W[A].call(this,...B,V):W[A].call(this,...B)})}function G(C){return I.MeasureCallback.implement({measure:(...W)=>{let{width:w,height:B}=C(...W);return{width:w??NaN,height:B??NaN}}})}function Z(C){return I.DirtiedCallback.implement({dirtied:C})}return d(I.Node.prototype,"setMeasureFunc",function(C,W){return W?C.call(this,G(W)):this.unsetMeasureFunc()}),d(I.Node.prototype,"setDirtiedFunc",function(C,W){C.call(this,Z(W))}),d(I.Config.prototype,"free",function(){I.Config.destroy(this)}),d(I.Node,"create",(C,W)=>W?I.Node.createWithConfig(W):I.Node.createDefault()),d(I.Node.prototype,"free",function(){I.Node.destroy(this)}),d(I.Node.prototype,"freeRecursive",function(){for(let C=0,W=this.getChildCount();C{var I=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return function(d={}){A||(A=d!==void 0?d:{}),A.ready=new Promise(function(d1,o){V=d1,X=o});var G,Z,C=Object.assign({},A),W="";typeof document!="undefined"&&document.currentScript&&(W=document.currentScript.src),I&&(W=I),W=W.indexOf("blob:")!==0?W.substr(0,W.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var w=console.log.bind(console),B=console.warn.bind(console);Object.assign(A,C),C=null,typeof WebAssembly!="object"&&f1("no native wasm support detected");var A,V,X,_,F=!1;function g(d1,o,S1){S1=o+S1;for(var p1="";!(o>=S1);){var l1=d1[o++];if(!l1)break;if(128&l1){var s1=63&d1[o++];if((224&l1)==192)p1+=String.fromCharCode((31&l1)<<6|s1);else{var U0=63&d1[o++];65536>(l1=(240&l1)==224?(15&l1)<<12|s1<<6|U0:(7&l1)<<18|s1<<12|U0<<6|63&d1[o++])?p1+=String.fromCharCode(l1):(l1-=65536,p1+=String.fromCharCode(55296|l1>>10,56320|1023&l1))}}else p1+=String.fromCharCode(l1)}return p1}function J(){var d1=_.buffer;A.HEAP8=K=new Int8Array(d1),A.HEAP16=E=new Int16Array(d1),A.HEAP32=P=new Int32Array(d1),A.HEAPU8=Q=new Uint8Array(d1),A.HEAPU16=S=new Uint16Array(d1),A.HEAPU32=$=new Uint32Array(d1),A.HEAPF32=h=new Float32Array(d1),A.HEAPF64=O=new Float64Array(d1)}var K,Q,E,S,P,$,h,O,T,V1=[],c=[],c1=[],o1=0,a1=null;function f1(d1){throw B(d1="Aborted("+d1+")"),F=!0,X(d1=new WebAssembly.RuntimeError(d1+". Build with -sASSERTIONS for more info.")),d1}function r(){return G.startsWith("data:application/octet-stream;base64,")}function A1(){try{throw"both async and sync fetching of the wasm failed"}catch(d1){f1(d1)}}function m1(d1){for(;0=o?"_"+d1:d1}function e1(d1,o){return d1=T1(d1),function(){return o.apply(this,arguments)}}G="yoga.wasm",r()||(G=W+G);var F0=[{},{value:void 0},{value:null},{value:!0},{value:!1}],P0=[];function B0(d1){var o=Error,S1=e1(d1,function(p1){this.name=d1,this.message=p1,(p1=Error(p1).stack)!==void 0&&(this.stack=this.toString()+` +`+p1.replace(/^Error(:[^\n]*)?\n/,""))});return S1.prototype=Object.create(o.prototype),S1.prototype.constructor=S1,S1.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},S1}var a0=void 0;function e(d1){throw new a0(d1)}var G0=(d1)=>(d1||e("Cannot use deleted val. handle = "+d1),F0[d1].value),H1=(d1)=>{switch(d1){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var o=P0.length?P0.pop():F0.length;return F0[o]={fa:1,value:d1},o}},j1=void 0,i1=void 0;function E0(d1){for(var o="";Q[d1];)o+=i1[Q[d1++]];return o}var k=[];function a(){for(;k.length;){var d1=k.pop();d1.L.Z=!1,d1.delete()}}var Z1=void 0,Q1={};function N1(d1,o){for(o===void 0&&e("ptr should not be undefined");d1.P;)o=d1.aa(o),d1=d1.P;return o}var F1={};function O1(d1){var o=E0(d1=TW(d1));return _7(d1),o}function K1(d1,o){var S1=F1[d1];return S1===void 0&&e(o+" has unknown type "+O1(d1)),S1}function R1(){}var h1=!1;function j(d1){--d1.count.value,d1.count.value===0&&(d1.S?d1.T.V(d1.S):d1.O.M.V(d1.N))}var W1={},U1=void 0;function L1(d1){throw new U1(d1)}function D0(d1,o){return o.O&&o.N||L1("makeClassHandle requires ptr and ptrType"),!!o.T!=!!o.S&&L1("Both smartPtrType and smartPtr must be specified"),o.count={value:1},O0(Object.create(d1,{L:{value:o}}))}function O0(d1){return typeof FinalizationRegistry=="undefined"?(O0=(o)=>o,d1):(h1=new FinalizationRegistry((o)=>{j(o.L)}),O0=(o)=>{var S1=o.L;return S1.S&&h1.register(o,{L:S1},o),o},R1=(o)=>{h1.unregister(o)},O0(d1))}var k0={};function i0(d1){for(;d1.length;){var o=d1.pop();d1.pop()(o)}}function s0(d1){return this.fromWireType(P[d1>>2])}var P2={},a5={};function n0(d1,o,S1){function p1(w0){(w0=S1(w0)).length!==d1.length&&L1("Mismatched type converter count");for(var J0=0;J0{F1.hasOwnProperty(w0)?l1[J0]=F1[w0]:(s1.push(w0),P2.hasOwnProperty(w0)||(P2[w0]=[]),P2[w0].push(()=>{l1[J0]=F1[w0],++U0===s1.length&&p1(l1)}))}),s1.length===0&&p1(l1)}function B2(d1){switch(d1){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw TypeError("Unknown type size: "+d1)}}function A2(d1,o,S1={}){if(!("argPackAdvance"in o))throw TypeError("registerType registeredInstance requires argPackAdvance");var p1=o.name;if(d1||e('type "'+p1+'" must have a positive integer typeid pointer'),F1.hasOwnProperty(d1)){if(S1.ta)return;e("Cannot register type '"+p1+"' twice")}F1[d1]=o,delete a5[d1],P2.hasOwnProperty(d1)&&(o=P2[d1],delete P2[d1],o.forEach((l1)=>l1()))}function B4(d1){e(d1.L.O.M.name+" instance already deleted")}function A4(){}function _5(d1,o,S1){if(d1[o].R===void 0){var p1=d1[o];d1[o]=function(){return d1[o].R.hasOwnProperty(arguments.length)||e("Function '"+S1+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+d1[o].R+")!"),d1[o].R[arguments.length].apply(this,arguments)},d1[o].R=[],d1[o].R[p1.Y]=p1}}function D5(d1,o,S1,p1,l1,s1,U0,w0){this.name=d1,this.constructor=o,this.W=S1,this.V=p1,this.P=l1,this.oa=s1,this.aa=U0,this.ma=w0,this.ia=[]}function tZ(d1,o,S1){for(;o!==S1;)o.aa||e("Expected null or instance of "+S1.name+", got an instance of "+o.name),d1=o.aa(d1),o=o.P;return d1}function T6(d1,o){return o===null?(this.da&&e("null is not a valid "+this.name),0):(o.L||e('Cannot pass "'+vI(o)+'" as a '+this.name),o.L.N||e("Cannot pass deleted object as a pointer of type "+this.name),tZ(o.L.N,o.L.O.M,this.M))}function pB(d1,o){if(o===null){if(this.da&&e("null is not a valid "+this.name),this.ca){var S1=this.ea();return d1!==null&&d1.push(this.V,S1),S1}return 0}if(o.L||e('Cannot pass "'+vI(o)+'" as a '+this.name),o.L.N||e("Cannot pass deleted object as a pointer of type "+this.name),!this.ba&&o.L.O.ba&&e("Cannot convert argument of type "+(o.L.T?o.L.T.name:o.L.O.name)+" to parameter type "+this.name),S1=tZ(o.L.N,o.L.O.M,this.M),this.ca)switch(o.L.S===void 0&&e("Passing raw pointer to smart pointer is illegal"),this.Aa){case 0:o.L.T===this?S1=o.L.S:e("Cannot convert argument of type "+(o.L.T?o.L.T.name:o.L.O.name)+" to parameter type "+this.name);break;case 1:S1=o.L.S;break;case 2:if(o.L.T===this)S1=o.L.S;else{var p1=o.clone();S1=this.wa(S1,H1(function(){p1.delete()})),d1!==null&&d1.push(this.V,S1)}break;default:e("Unsupporting sharing policy")}return S1}function iB(d1,o){return o===null?(this.da&&e("null is not a valid "+this.name),0):(o.L||e('Cannot pass "'+vI(o)+'" as a '+this.name),o.L.N||e("Cannot pass deleted object as a pointer of type "+this.name),o.L.O.ba&&e("Cannot convert argument of type "+o.L.O.name+" to parameter type "+this.name),tZ(o.L.N,o.L.O.M,this.M))}function X3(d1,o,S1,p1){this.name=d1,this.M=o,this.da=S1,this.ba=p1,this.ca=!1,this.V=this.wa=this.ea=this.ja=this.Aa=this.va=void 0,o.P!==void 0?this.toWireType=pB:(this.toWireType=p1?T6:iB,this.U=null)}var Nd=[];function IC(d1){var o=Nd[d1];return o||(d1>=Nd.length&&(Nd.length=d1+1),Nd[d1]=o=T.get(d1)),o}function Y3(d1,o){var S1,p1,l1=(d1=E0(d1)).includes("j")?(S1=d1,p1=[],function(){if(p1.length=0,Object.assign(p1,arguments),S1.includes("j")){var s1=A["dynCall_"+S1];s1=p1&&p1.length?s1.apply(null,[o].concat(p1)):s1.call(null,o)}else s1=IC(o).apply(null,p1);return s1}):IC(o);return typeof l1!="function"&&e("unknown function pointer with signature "+d1+": "+o),l1}var zd=void 0;function Qd(d1,o){var S1=[],p1={};throw o.forEach(function l1(s1){p1[s1]||F1[s1]||(a5[s1]?a5[s1].forEach(l1):(S1.push(s1),p1[s1]=!0))}),new zd(d1+": "+S1.map(O1).join([", "]))}function QG(d1,o,S1,p1,l1){var s1=o.length;2>s1&&e("argTypes array size mismatch! Must at least get return value and 'this' types!");var U0=o[1]!==null&&S1!==null,w0=!1;for(S1=1;S1>2]);return S1}function X7(d1){4=o/2);++p1){var l1=E[d1+2*p1>>1];if(l1==0)break;S1+=String.fromCharCode(l1)}return S1}function fd(d1,o,S1){if(S1===void 0&&(S1=2147483647),2>S1)return 0;S1-=2;var p1=o;S1=S1<2*d1.length?S1/2:d1.length;for(var l1=0;l1>1]=d1.charCodeAt(l1),o+=2;return E[o>>1]=0,o-p1}function Y7(d1){return 2*d1.length}function nB(d1,o){for(var S1=0,p1="";!(S1>=o/4);){var l1=P[d1+4*S1>>2];if(l1==0)break;++S1,65536<=l1?(l1-=65536,p1+=String.fromCharCode(55296|l1>>10,56320|1023&l1)):p1+=String.fromCharCode(l1)}return p1}function qd(d1,o,S1){if(S1===void 0&&(S1=2147483647),4>S1)return 0;var p1=o;S1=p1+S1-4;for(var l1=0;l1=s1&&(s1=65536+((1023&s1)<<10)|1023&d1.charCodeAt(++l1)),P[o>>2]=s1,(o+=4)+4>S1)break}return P[o>>2]=0,o-p1}function rB(d1){for(var o=0,S1=0;S1=p1&&++S1,o+=4}return o}var PW={};function $W(d1){var o=PW[d1];return o===void 0?E0(d1):o}var v8=[],qG=[],aB=[null,[],[]];a0=A.BindingError=B0("BindingError"),A.count_emval_handles=function(){for(var d1=0,o=5;oRd;++Rd)uW[Rd]=String.fromCharCode(Rd);i1=uW,A.getInheritedInstanceCount=function(){return Object.keys(Q1).length},A.getLiveInheritedInstances=function(){var d1,o=[];for(d1 in Q1)Q1.hasOwnProperty(d1)&&o.push(Q1[d1]);return o},A.flushPendingDeletes=a,A.setDelayFunction=function(d1){Z1=d1,k.length&&Z1&&Z1(a)},U1=A.InternalError=B0("InternalError"),A4.prototype.isAliasOf=function(d1){if(!(this instanceof A4&&d1 instanceof A4))return!1;var o=this.L.O.M,S1=this.L.N,p1=d1.L.O.M;for(d1=d1.L.N;o.P;)S1=o.aa(S1),o=o.P;for(;p1.P;)d1=p1.aa(d1),p1=p1.P;return o===p1&&S1===d1},A4.prototype.clone=function(){if(this.L.N||B4(this),this.L.$)return this.L.count.value+=1,this;var d1=O0,o=Object,S1=o.create,p1=Object.getPrototypeOf(this),l1=this.L;return d1=d1(S1.call(o,p1,{L:{value:{count:l1.count,Z:l1.Z,$:l1.$,N:l1.N,O:l1.O,S:l1.S,T:l1.T}}})),d1.L.count.value+=1,d1.L.Z=!1,d1},A4.prototype.delete=function(){this.L.N||B4(this),this.L.Z&&!this.L.$&&e("Object already scheduled for deletion"),R1(this),j(this.L),this.L.$||(this.L.S=void 0,this.L.N=void 0)},A4.prototype.isDeleted=function(){return!this.L.N},A4.prototype.deleteLater=function(){return this.L.N||B4(this),this.L.Z&&!this.L.$&&e("Object already scheduled for deletion"),k.push(this),k.length===1&&Z1&&Z1(a),this.L.Z=!0,this},X3.prototype.pa=function(d1){return this.ja&&(d1=this.ja(d1)),d1},X3.prototype.ga=function(d1){this.V&&this.V(d1)},X3.prototype.argPackAdvance=8,X3.prototype.readValueFromPointer=s0,X3.prototype.deleteObject=function(d1){d1!==null&&d1.delete()},X3.prototype.fromWireType=function(d1){function o(){return this.ca?D0(this.M.W,{O:this.va,N:p1,T:this,S:d1}):D0(this.M.W,{O:this,N:d1})}var S1,p1=this.pa(d1);if(!p1)return this.ga(d1),null;var l1=Q1[N1(this.M,p1)];if(l1!==void 0)return l1.L.count.value===0?(l1.L.N=p1,l1.L.S=d1,l1.clone()):(l1=l1.clone(),this.ga(d1),l1);if(!(l1=W1[l1=this.M.oa(p1)]))return o.call(this);l1=this.ba?l1.ka:l1.pointerType;var s1=function U0(w0,J0,W0){return J0===W0?w0:W0.P===void 0?null:(w0=U0(w0,J0,W0.P))===null?null:W0.ma(w0)}(p1,this.M,l1.M);return s1===null?o.call(this):this.ca?D0(l1.M.W,{O:l1,N:s1,T:this,S:d1}):D0(l1.M.W,{O:l1,N:s1})},zd=A.UnboundTypeError=B0("UnboundTypeError");var sB={q:function(d1,o,S1){d1=E0(d1),o=K1(o,"wrapper"),S1=G0(S1);var p1=[].slice,l1=o.M,s1=l1.W,U0=l1.P.W,w0=l1.P.constructor;for(var J0 in d1=e1(d1,function(){l1.P.ia.forEach(function(W0){if(this[W0]===U0[W0])throw new j1("Pure virtual function "+W0+" must be implemented in JavaScript")}.bind(this)),Object.defineProperty(this,"__parent",{value:s1}),this.__construct.apply(this,p1.call(arguments))}),s1.__construct=function(){this===s1&&e("Pass correct 'this' to __construct");var W0=w0.implement.apply(void 0,[this].concat(p1.call(arguments)));R1(W0);var g0=W0.L;W0.notifyOnDestruction(),g0.$=!0,Object.defineProperties(this,{L:{value:g0}}),O0(this),W0=N1(l1,W0=g0.N),Q1.hasOwnProperty(W0)?e("Tried to register registered instance: "+W0):Q1[W0]=this},s1.__destruct=function(){this===s1&&e("Pass correct 'this' to __destruct"),R1(this);var W0=this.L.N;W0=N1(l1,W0),Q1.hasOwnProperty(W0)?delete Q1[W0]:e("Tried to unregister unregistered instance: "+W0)},d1.prototype=Object.create(s1),S1)d1.prototype[J0]=S1[J0];return H1(d1)},l:function(d1){var o=k0[d1];delete k0[d1];var{ea:S1,V:p1,ha:l1}=o;n0([d1],l1.map((s1)=>s1.sa).concat(l1.map((s1)=>s1.ya)),(s1)=>{var U0={};return l1.forEach((w0,J0)=>{var W0=s1[J0],g0=w0.qa,c2=w0.ra,L2=s1[J0+l1.length],R2=w0.xa,l=w0.za;U0[w0.na]={read:(_1)=>W0.fromWireType(g0(c2,_1)),write:(_1,I1)=>{var v1=[];R2(l,_1,L2.toWireType(v1,I1)),i0(v1)}}}),[{name:o.name,fromWireType:function(w0){var J0,W0={};for(J0 in U0)W0[J0]=U0[J0].read(w0);return p1(w0),W0},toWireType:function(w0,J0){for(var W0 in U0)if(!(W0 in J0))throw TypeError('Missing field: "'+W0+'"');var g0=S1();for(W0 in U0)U0[W0].write(g0,J0[W0]);return w0!==null&&w0.push(p1,g0),g0},argPackAdvance:8,readValueFromPointer:s0,U:p1}]})},v:function(){},B:function(d1,o,S1,p1,l1){var s1=B2(S1);A2(d1,{name:o=E0(o),fromWireType:function(U0){return!!U0},toWireType:function(U0,w0){return w0?p1:l1},argPackAdvance:8,readValueFromPointer:function(U0){if(S1===1)var w0=K;else if(S1===2)w0=E;else if(S1===4)w0=P;else throw TypeError("Unknown boolean type size: "+o);return this.fromWireType(w0[U0>>s1])},U:null})},h:function(d1,o,S1,p1,l1,s1,U0,w0,J0,W0,g0,c2,L2){g0=E0(g0),s1=Y3(l1,s1),w0&&(w0=Y3(U0,w0)),W0&&(W0=Y3(J0,W0)),L2=Y3(c2,L2);var R2,l=T1(g0);R2=function(){Qd("Cannot construct "+g0+" due to unbound types",[p1])},A.hasOwnProperty(l)?(e("Cannot register public name '"+l+"' twice"),_5(A,l,l),A.hasOwnProperty(void 0)&&e("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"),A[l].R[void 0]=R2):A[l]=R2,n0([d1,o,S1],p1?[p1]:[],function(_1){if(_1=_1[0],p1)var I1,v1=_1.M,y1=v1.W;else y1=A4.prototype;_1=e1(l,function(){if(Object.getPrototypeOf(this)!==E1)throw new a0("Use 'new' to construct "+g0);if(Z0.X===void 0)throw new a0(g0+" has no accessible constructor");var N0=Z0.X[arguments.length];if(N0===void 0)throw new a0("Tried to invoke ctor of "+g0+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(Z0.X).toString()+") parameters instead!");return N0.apply(this,arguments)});var E1=Object.create(y1,{constructor:{value:_1}});_1.prototype=E1;var Z0=new D5(g0,_1,E1,L2,v1,s1,w0,W0);v1=new X3(g0,Z0,!0,!1),y1=new X3(g0+"*",Z0,!1,!1);var Q0=new X3(g0+" const*",Z0,!1,!0);return W1[d1]={pointerType:y1,ka:Q0},I1=_1,A.hasOwnProperty(l)||L1("Replacing nonexistant public symbol"),A[l]=I1,A[l].Y=void 0,[v1,y1,Q0]})},d:function(d1,o,S1,p1,l1,s1,U0){var w0=fG(S1,p1);o=E0(o),s1=Y3(l1,s1),n0([],[d1],function(J0){function W0(){Qd("Cannot call "+g0+" due to unbound types",w0)}var g0=(J0=J0[0]).name+"."+o;o.startsWith("@@")&&(o=Symbol[o.substring(2)]);var c2=J0.M.constructor;return c2[o]===void 0?(W0.Y=S1-1,c2[o]=W0):(_5(c2,o,g0),c2[o].R[S1-1]=W0),n0([],w0,function(L2){return L2=QG(g0,[L2[0],null].concat(L2.slice(1)),null,s1,U0),c2[o].R===void 0?(L2.Y=S1-1,c2[o]=L2):c2[o].R[S1-1]=L2,[]}),[]})},p:function(d1,o,S1,p1,l1,s1){0{Qd("Cannot construct "+w0.name+" due to unbound types",U0)},n0([],U0,function(W0){return W0.splice(1,0,null),w0.M.X[o-1]=QG(J0,W0,null,l1,s1),[]}),[]})},a:function(d1,o,S1,p1,l1,s1,U0,w0){var J0=fG(S1,p1);o=E0(o),s1=Y3(l1,s1),n0([],[d1],function(W0){function g0(){Qd("Cannot call "+c2+" due to unbound types",J0)}var c2=(W0=W0[0]).name+"."+o;o.startsWith("@@")&&(o=Symbol[o.substring(2)]),w0&&W0.M.ia.push(o);var L2=W0.M.W,R2=L2[o];return R2===void 0||R2.R===void 0&&R2.className!==W0.name&&R2.Y===S1-2?(g0.Y=S1-2,g0.className=W0.name,L2[o]=g0):(_5(L2,o,c2),L2[o].R[S1-2]=g0),n0([],J0,function(l){return l=QG(c2,l,W0,s1,U0),L2[o].R===void 0?(l.Y=S1-2,L2[o]=l):L2[o].R[S1-2]=l,[]}),[]})},A:function(d1,o){A2(d1,{name:o=E0(o),fromWireType:function(S1){var p1=G0(S1);return X7(S1),p1},toWireType:function(S1,p1){return H1(p1)},argPackAdvance:8,readValueFromPointer:s0,U:null})},n:function(d1,o,S1){S1=B2(S1),A2(d1,{name:o=E0(o),fromWireType:function(p1){return p1},toWireType:function(p1,l1){return l1},argPackAdvance:8,readValueFromPointer:function(p1,l1){switch(l1){case 2:return function(s1){return this.fromWireType(h[s1>>2])};case 3:return function(s1){return this.fromWireType(O[s1>>3])};default:throw TypeError("Unknown float type: "+p1)}}(o,S1),U:null})},e:function(d1,o,S1,p1,l1){o=E0(o),l1===-1&&(l1=4294967295),l1=B2(S1);var s1=(w0)=>w0;if(p1===0){var U0=32-8*S1;s1=(w0)=>w0<>>U0}S1=o.includes("unsigned")?function(w0,J0){return J0>>>0}:function(w0,J0){return J0},A2(d1,{name:o,fromWireType:s1,toWireType:S1,argPackAdvance:8,readValueFromPointer:function(w0,J0,W0){switch(J0){case 0:return W0?function(g0){return K[g0]}:function(g0){return Q[g0]};case 1:return W0?function(g0){return E[g0>>1]}:function(g0){return S[g0>>1]};case 2:return W0?function(g0){return P[g0>>2]}:function(g0){return $[g0>>2]};default:throw TypeError("Unknown integer type: "+w0)}}(o,l1,p1!==0),U:null})},b:function(d1,o,S1){function p1(s1){s1>>=2;var U0=$;return new l1(U0.buffer,U0[s1+1],U0[s1])}var l1=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][o];A2(d1,{name:S1=E0(S1),fromWireType:p1,argPackAdvance:8,readValueFromPointer:p1},{ta:!0})},o:function(d1,o){var S1=(o=E0(o))==="std::string";A2(d1,{name:o,fromWireType:function(p1){var l1=$[p1>>2],s1=p1+4;if(S1)for(var U0=s1,w0=0;w0<=l1;++w0){var J0=s1+w0;if(w0==l1||Q[J0]==0){if(U0=U0?g(Q,U0,J0-U0):"",W0===void 0)var W0=U0;else W0+="\x00"+U0;U0=J0+1}}else{for(w0=0,W0=Array(l1);w0=J0?w0++:2047>=J0?w0+=2:55296<=J0&&57343>=J0?(w0+=4,++s1):w0+=3}s1=w0}else s1=l1.length;if(J0=(w0=Ud(4+s1+1))+4,$[w0>>2]=s1,S1&&U0){if(U0=J0,J0=s1+1,s1=Q,0=g0&&(g0=65536+((1023&g0)<<10)|1023&l1.charCodeAt(++W0)),127>=g0){if(U0>=J0)break;s1[U0++]=g0}else{if(2047>=g0){if(U0+1>=J0)break;s1[U0++]=192|g0>>6}else{if(65535>=g0){if(U0+2>=J0)break;s1[U0++]=224|g0>>12}else{if(U0+3>=J0)break;s1[U0++]=240|g0>>18,s1[U0++]=128|g0>>12&63}s1[U0++]=128|g0>>6&63}s1[U0++]=128|63&g0}}s1[U0]=0}}else if(U0)for(U0=0;U0S,w0=1;else o===4&&(p1=nB,l1=qd,s1=rB,U0=()=>$,w0=2);A2(d1,{name:S1,fromWireType:function(J0){for(var W0,g0=$[J0>>2],c2=U0(),L2=J0+4,R2=0;R2<=g0;++R2){var l=J0+4+R2*o;(R2==g0||c2[l>>w0]==0)&&(L2=p1(L2,l-L2),W0===void 0?W0=L2:W0+="\x00"+L2,L2=l+o)}return _7(J0),W0},toWireType:function(J0,W0){typeof W0!="string"&&e("Cannot pass non-string to C++ string type "+S1);var g0=s1(W0),c2=Ud(4+g0+o);return $[c2>>2]=g0>>w0,l1(W0,c2+4,g0+o),J0!==null&&J0.push(_7,c2),c2},argPackAdvance:8,readValueFromPointer:s0,U:function(J0){_7(J0)}})},m:function(d1,o,S1,p1,l1,s1){k0[d1]={name:E0(o),ea:Y3(S1,p1),V:Y3(l1,s1),ha:[]}},c:function(d1,o,S1,p1,l1,s1,U0,w0,J0,W0){k0[d1].ha.push({na:E0(o),sa:S1,qa:Y3(p1,l1),ra:s1,ya:U0,xa:Y3(w0,J0),za:W0})},C:function(d1,o){A2(d1,{ua:!0,name:o=E0(o),argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},t:function(d1,o,S1,p1,l1){d1=v8[d1],o=G0(o),S1=$W(S1);var s1=[];return $[p1>>2]=H1(s1),d1(o,S1,s1,l1)},j:function(d1,o,S1,p1){d1=v8[d1],d1(o=G0(o),S1=$W(S1),null,p1)},f:X7,g:function(d1,o){var S1,p1,l1=function(J0,W0){for(var g0=Array(J0),c2=0;c2>2],"parameter "+c2);return g0}(d1,o),s1=l1[0],U0=qG[o=s1.name+"_$"+l1.slice(1).map(function(J0){return J0.name}).join("_")+"$"];if(U0!==void 0)return U0;var w0=Array(d1-1);return S1=(J0,W0,g0,c2)=>{for(var L2=0,R2=0;R2>>=0))return!1;for(var S1=1;4>=S1;S1*=2){var p1=o*(1+0.2/S1);p1=Math.min(p1,d1+100663296);var l1=Math,s1=l1.min;p1=Math.max(d1,p1),p1+=(65536-p1%65536)%65536;I:{var U0=_.buffer;try{_.grow(s1.call(l1,2147483648,p1)-U0.byteLength+65535>>>16),J();var w0=1;break I}catch(J0){}w0=void 0}if(w0)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(d1,o,S1,p1){for(var l1=0,s1=0;s1>2],w0=$[o+4>>2];o+=8;for(var J0=0;J0>2]=l1,0}};(function(){function d1(l1){A.asm=l1.exports,_=A.asm.D,J(),T=A.asm.I,c.unshift(A.asm.E),--o1==0&&a1&&(l1=a1,a1=null,l1())}function o(l1){d1(l1.instance)}function S1(l1){return(typeof fetch=="function"?fetch(G,{credentials:"same-origin"}).then(function(s1){if(!s1.ok)throw"failed to load wasm binary file at '"+G+"'";return s1.arrayBuffer()}).catch(function(){return A1()}):Promise.resolve().then(function(){return A1()})).then(function(s1){return WebAssembly.instantiate(s1,p1)}).then(function(s1){return s1}).then(l1,function(s1){B("failed to asynchronously prepare wasm: "+s1),f1(s1)})}var p1={a:sB};if(o1++,A.instantiateWasm)try{return A.instantiateWasm(p1,d1)}catch(l1){B("Module.instantiateWasm callback failed with error: "+l1),X(l1)}(typeof WebAssembly.instantiateStreaming!="function"||r()||typeof fetch!="function"?S1(o):fetch(G,{credentials:"same-origin"}).then(function(l1){return WebAssembly.instantiateStreaming(l1,p1).then(o,function(s1){return B("wasm streaming compile failed: "+s1),B("falling back to ArrayBuffer instantiation"),S1(o)})})).catch(X)})();var TW=A.___getTypeName=function(){return(TW=A.___getTypeName=A.asm.F).apply(null,arguments)};function Ud(){return(Ud=A.asm.H).apply(null,arguments)}function _7(){return(_7=A.asm.J).apply(null,arguments)}function OW(){0{C instanceof WebAssembly.Instance?Z(C):Z(C.instance)})}});return pk1(d)}import{readFile as d_4}from"node:fs/promises";import{createRequire as G_4}from"node:module";var Dj=await ik1(await d_4(G_4(import.meta.url).resolve("./yoga.wasm")));function h51({onlyFirst:I=!1}={}){let G=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(G,I?void 0:"g")}var Z_4=h51();function RM(I){if(typeof I!=="string")throw new TypeError(`Expected a \`string\`, got \`${typeof I}\``);return I.replace(Z_4,"")}function nk1(I){return I===161||I===164||I===167||I===168||I===170||I===173||I===174||I>=176&&I<=180||I>=182&&I<=186||I>=188&&I<=191||I===198||I===208||I===215||I===216||I>=222&&I<=225||I===230||I>=232&&I<=234||I===236||I===237||I===240||I===242||I===243||I>=247&&I<=250||I===252||I===254||I===257||I===273||I===275||I===283||I===294||I===295||I===299||I>=305&&I<=307||I===312||I>=319&&I<=322||I===324||I>=328&&I<=331||I===333||I===338||I===339||I===358||I===359||I===363||I===462||I===464||I===466||I===468||I===470||I===472||I===474||I===476||I===593||I===609||I===708||I===711||I>=713&&I<=715||I===717||I===720||I>=728&&I<=731||I===733||I===735||I>=768&&I<=879||I>=913&&I<=929||I>=931&&I<=937||I>=945&&I<=961||I>=963&&I<=969||I===1025||I>=1040&&I<=1103||I===1105||I===8208||I>=8211&&I<=8214||I===8216||I===8217||I===8220||I===8221||I>=8224&&I<=8226||I>=8228&&I<=8231||I===8240||I===8242||I===8243||I===8245||I===8251||I===8254||I===8308||I===8319||I>=8321&&I<=8324||I===8364||I===8451||I===8453||I===8457||I===8467||I===8470||I===8481||I===8482||I===8486||I===8491||I===8531||I===8532||I>=8539&&I<=8542||I>=8544&&I<=8555||I>=8560&&I<=8569||I===8585||I>=8592&&I<=8601||I===8632||I===8633||I===8658||I===8660||I===8679||I===8704||I===8706||I===8707||I===8711||I===8712||I===8715||I===8719||I===8721||I===8725||I===8730||I>=8733&&I<=8736||I===8739||I===8741||I>=8743&&I<=8748||I===8750||I>=8756&&I<=8759||I===8764||I===8765||I===8776||I===8780||I===8786||I===8800||I===8801||I>=8804&&I<=8807||I===8810||I===8811||I===8814||I===8815||I===8834||I===8835||I===8838||I===8839||I===8853||I===8857||I===8869||I===8895||I===8978||I>=9312&&I<=9449||I>=9451&&I<=9547||I>=9552&&I<=9587||I>=9600&&I<=9615||I>=9618&&I<=9621||I===9632||I===9633||I>=9635&&I<=9641||I===9650||I===9651||I===9654||I===9655||I===9660||I===9661||I===9664||I===9665||I>=9670&&I<=9672||I===9675||I>=9678&&I<=9681||I>=9698&&I<=9701||I===9711||I===9733||I===9734||I===9737||I===9742||I===9743||I===9756||I===9758||I===9792||I===9794||I===9824||I===9825||I>=9827&&I<=9829||I>=9831&&I<=9834||I===9836||I===9837||I===9839||I===9886||I===9887||I===9919||I>=9926&&I<=9933||I>=9935&&I<=9939||I>=9941&&I<=9953||I===9955||I===9960||I===9961||I>=9963&&I<=9969||I===9972||I>=9974&&I<=9977||I===9979||I===9980||I===9982||I===9983||I===10045||I>=10102&&I<=10111||I>=11094&&I<=11097||I>=12872&&I<=12879||I>=57344&&I<=63743||I>=65024&&I<=65039||I===65533||I>=127232&&I<=127242||I>=127248&&I<=127277||I>=127280&&I<=127337||I>=127344&&I<=127373||I===127375||I===127376||I>=127387&&I<=127404||I>=917760&&I<=917999||I>=983040&&I<=1048573||I>=1048576&&I<=1114109}function rk1(I){return I===12288||I>=65281&&I<=65376||I>=65504&&I<=65510}function ak1(I){return I>=4352&&I<=4447||I===8986||I===8987||I===9001||I===9002||I>=9193&&I<=9196||I===9200||I===9203||I===9725||I===9726||I===9748||I===9749||I>=9776&&I<=9783||I>=9800&&I<=9811||I===9855||I>=9866&&I<=9871||I===9875||I===9889||I===9898||I===9899||I===9917||I===9918||I===9924||I===9925||I===9934||I===9940||I===9962||I===9970||I===9971||I===9973||I===9978||I===9981||I===9989||I===9994||I===9995||I===10024||I===10060||I===10062||I>=10067&&I<=10069||I===10071||I>=10133&&I<=10135||I===10160||I===10175||I===11035||I===11036||I===11088||I===11093||I>=11904&&I<=11929||I>=11931&&I<=12019||I>=12032&&I<=12245||I>=12272&&I<=12287||I>=12289&&I<=12350||I>=12353&&I<=12438||I>=12441&&I<=12543||I>=12549&&I<=12591||I>=12593&&I<=12686||I>=12688&&I<=12773||I>=12783&&I<=12830||I>=12832&&I<=12871||I>=12880&&I<=42124||I>=42128&&I<=42182||I>=43360&&I<=43388||I>=44032&&I<=55203||I>=63744&&I<=64255||I>=65040&&I<=65049||I>=65072&&I<=65106||I>=65108&&I<=65126||I>=65128&&I<=65131||I>=94176&&I<=94180||I===94192||I===94193||I>=94208&&I<=100343||I>=100352&&I<=101589||I>=101631&&I<=101640||I>=110576&&I<=110579||I>=110581&&I<=110587||I===110589||I===110590||I>=110592&&I<=110882||I===110898||I>=110928&&I<=110930||I===110933||I>=110948&&I<=110951||I>=110960&&I<=111355||I>=119552&&I<=119638||I>=119648&&I<=119670||I===126980||I===127183||I===127374||I>=127377&&I<=127386||I>=127488&&I<=127490||I>=127504&&I<=127547||I>=127552&&I<=127560||I===127568||I===127569||I>=127584&&I<=127589||I>=127744&&I<=127776||I>=127789&&I<=127797||I>=127799&&I<=127868||I>=127870&&I<=127891||I>=127904&&I<=127946||I>=127951&&I<=127955||I>=127968&&I<=127984||I===127988||I>=127992&&I<=128062||I===128064||I>=128066&&I<=128252||I>=128255&&I<=128317||I>=128331&&I<=128334||I>=128336&&I<=128359||I===128378||I===128405||I===128406||I===128420||I>=128507&&I<=128591||I>=128640&&I<=128709||I===128716||I>=128720&&I<=128722||I>=128725&&I<=128727||I>=128732&&I<=128735||I===128747||I===128748||I>=128756&&I<=128764||I>=128992&&I<=129003||I===129008||I>=129292&&I<=129338||I>=129340&&I<=129349||I>=129351&&I<=129535||I>=129648&&I<=129660||I>=129664&&I<=129673||I>=129679&&I<=129734||I>=129742&&I<=129756||I>=129759&&I<=129769||I>=129776&&I<=129784||I>=131072&&I<=196605||I>=196608&&I<=262141}function C_4(I){if(!Number.isSafeInteger(I))throw new TypeError(`Expected a code point, got \`${typeof I}\`.`)}function Hj(I,{ambiguousAsWide:d=!1}={}){if(C_4(I),rk1(I)||ak1(I)||d&&nk1(I))return 2;return 1}var ek1=J1(ok1(),1),W_4=new Intl.Segmenter,w_4=/^\p{Default_Ignorable_Code_Point}$/u;function E7(I,d={}){if(typeof I!=="string"||I.length===0)return 0;let{ambiguousIsNarrow:G=!0,countAnsiEscapeCodes:Z=!1}=d;if(!Z)I=RM(I);if(I.length===0)return 0;let C=0,W={ambiguousAsWide:!G};for(let{segment:w}of W_4.segment(I)){let B=w.codePointAt(0);if(B<=31||B>=127&&B<=159)continue;if(B>=8203&&B<=8207||B===65279)continue;if(B>=768&&B<=879||B>=6832&&B<=6911||B>=7616&&B<=7679||B>=8400&&B<=8447||B>=65056&&B<=65071)continue;if(B>=55296&&B<=57343)continue;if(B>=65024&&B<=65039)continue;if(w_4.test(w))continue;if(ek1.default().test(w)){C+=2;continue}C+=Hj(B,W)}return C}function dQ(I){let d=0;for(let G of I.split(` +`))d=Math.max(d,E7(G));return d}var tk1={},B_4=(I)=>{if(I.length===0)return{width:0,height:0};let d=tk1[I];if(d)return d;let G=dQ(I),Z=I.split(` +`).length;return tk1[I]={width:G,height:Z},{width:G,height:Z}},j51=B_4;var Ix1=(I=0)=>(d)=>`\x1B[${d+I}m`,dx1=(I=0)=>(d)=>`\x1B[${38+I};5;${d}m`,Gx1=(I=0)=>(d,G,Z)=>`\x1B[${38+I};2;${d};${G};${Z}m`,I3={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},tM9=Object.keys(I3.modifier),A_4=Object.keys(I3.color),V_4=Object.keys(I3.bgColor),IS9=[...A_4,...V_4];function X_4(){let I=new Map;for(let[d,G]of Object.entries(I3)){for(let[Z,C]of Object.entries(G))I3[Z]={open:`\x1B[${C[0]}m`,close:`\x1B[${C[1]}m`},G[Z]=I3[Z],I.set(C[0],C[1]);Object.defineProperty(I3,d,{value:G,enumerable:!1})}return Object.defineProperty(I3,"codes",{value:I,enumerable:!1}),I3.color.close="\x1B[39m",I3.bgColor.close="\x1B[49m",I3.color.ansi=Ix1(),I3.color.ansi256=dx1(),I3.color.ansi16m=Gx1(),I3.bgColor.ansi=Ix1(10),I3.bgColor.ansi256=dx1(10),I3.bgColor.ansi16m=Gx1(10),Object.defineProperties(I3,{rgbToAnsi256:{value:(d,G,Z)=>{if(d===G&&G===Z){if(d<8)return 16;if(d>248)return 231;return Math.round((d-8)/247*24)+232}return 16+36*Math.round(d/255*5)+6*Math.round(G/255*5)+Math.round(Z/255*5)},enumerable:!1},hexToRgb:{value:(d)=>{let G=/[a-f\d]{6}|[a-f\d]{3}/i.exec(d.toString(16));if(!G)return[0,0,0];let[Z]=G;if(Z.length===3)Z=[...Z].map((W)=>W+W).join("");let C=Number.parseInt(Z,16);return[C>>16&255,C>>8&255,C&255]},enumerable:!1},hexToAnsi256:{value:(d)=>I3.rgbToAnsi256(...I3.hexToRgb(d)),enumerable:!1},ansi256ToAnsi:{value:(d)=>{if(d<8)return 30+d;if(d<16)return 90+(d-8);let G,Z,C;if(d>=232)G=((d-232)*10+8)/255,Z=G,C=G;else{d-=16;let B=d%36;G=Math.floor(d/36)/5,Z=Math.floor(B/6)/5,C=B%6/5}let W=Math.max(G,Z,C)*2;if(W===0)return 30;let w=30+(Math.round(C)<<2|Math.round(Z)<<1|Math.round(G));if(W===2)w+=60;return w},enumerable:!1},rgbToAnsi:{value:(d,G,Z)=>I3.ansi256ToAnsi(I3.rgbToAnsi256(d,G,Z)),enumerable:!1},hexToAnsi:{value:(d)=>I3.ansi256ToAnsi(I3.hexToAnsi256(d)),enumerable:!1}}),I3}var Y_4=X_4(),d3=Y_4;var gj=new Set(["\x1B","›"]),__4=39,x51="\x07",Wx1="[",D_4="]",wx1="m",Fj=`${D_4}8;;`,Zx1=(I)=>`${gj.values().next().value}${Wx1}${I}${wx1}`,Cx1=(I)=>`${gj.values().next().value}${Fj}${I}${x51}`,H_4=(I)=>I.split(" ").map((d)=>E7(d)),k51=(I,d,G)=>{let Z=[...d],C=!1,W=!1,w=E7(RM(I.at(-1)));for(let[B,A]of Z.entries()){let V=E7(A);if(w+V<=G)I[I.length-1]+=A;else I.push(A),w=0;if(gj.has(A))C=!0,W=Z.slice(B+1,B+1+Fj.length).join("")===Fj;if(C){if(W){if(A===x51)C=!1,W=!1}else if(A===wx1)C=!1;continue}if(w+=V,w===G&&B0&&I.length>1)I[I.length-2]+=I.pop()},F_4=(I)=>{let d=I.split(" "),G=d.length;while(G>0){if(E7(d[G-1])>0)break;G--}if(G===d.length)return I;return d.slice(0,G).join(" ")+d.slice(G).join("")},g_4=(I,d,G={})=>{if(G.trim!==!1&&I.trim()==="")return"";let Z="",C,W,w=H_4(I),B=[""];for(let[_,F]of I.split(" ").entries()){if(G.trim!==!1)B[B.length-1]=B.at(-1).trimStart();let g=E7(B.at(-1));if(_!==0){if(g>=d&&(G.wordWrap===!1||G.trim===!1))B.push(""),g=0;if(g>0||G.trim===!1)B[B.length-1]+=" ",g++}if(G.hard&&w[_]>d){let J=d-g,K=1+Math.floor((w[_]-J-1)/d);if(Math.floor((w[_]-1)/d)d&&g>0&&w[_]>0){if(G.wordWrap===!1&&gd&&G.wordWrap===!1){k51(B,F,d);continue}B[B.length-1]+=F}if(G.trim!==!1)B=B.map((_)=>F_4(_));let A=B.join(` +`),V=[...A],X=0;for(let[_,F]of V.entries()){if(Z+=F,gj.has(F)){let{groups:J}=new RegExp(`(?:\\${Wx1}(?\\d+)m|\\${Fj}(?.*)${x51})`).exec(A.slice(X))||{groups:{}};if(J.code!==void 0){let K=Number.parseFloat(J.code);C=K===__4?void 0:K}else if(J.uri!==void 0)W=J.uri.length===0?void 0:J.uri}let g=d3.codes.get(Number(C));if(V[_+1]===` +`){if(W)Z+=Cx1("");if(C&&g)Z+=Zx1(g)}else if(F===` +`){if(C&&g)Z+=Zx1(C);if(W)Z+=Cx1(W)}X+=F.length}return Z};function UM(I,d,G){return String(I).normalize().replaceAll(`\r +`,` +`).split(` +`).map((Z)=>g_4(Z,d,G)).join(` +`)}function vM(I){if(!Number.isInteger(I))return!1;return I>=4352&&(I<=4447||I===9001||I===9002||11904<=I&&I<=12871&&I!==12351||12880<=I&&I<=19903||19968<=I&&I<=42182||43360<=I&&I<=43388||44032<=I&&I<=55203||63744<=I&&I<=64255||65040<=I&&I<=65049||65072<=I&&I<=65131||65281<=I&&I<=65376||65504<=I&&I<=65510||110592<=I&&I<=110593||127488<=I&&I<=127569||131072<=I&&I<=262141)}var J_4=/^[\uD800-\uDBFF][\uDC00-\uDFFF]$/,Ax1=["\x1B","›"],Jj=(I)=>`${Ax1[0]}[${I}m`,Bx1=(I,d,G)=>{let Z=[];I=[...I];for(let C of I){let W=C;if(C.includes(";"))C=C.split(";")[0][0]+"0";let w=d3.codes.get(Number.parseInt(C,10));if(w){let B=I.indexOf(w.toString());if(B===-1)Z.push(Jj(d?w:W));else I.splice(B,1)}else if(d){Z.push(Jj(0));break}else Z.push(Jj(W))}if(d){if(Z=Z.filter((C,W)=>Z.indexOf(C)===W),G!==void 0){let C=Jj(d3.codes.get(Number.parseInt(G,10)));Z=Z.reduce((W,w)=>w===C?[w,...W]:[...W,w],[])}}return Z.join("")};function Ow(I,d,G){let Z=[...I],C=[],W=typeof G==="number"?G:Z.length,w=!1,B,A=0,V="";for(let[X,_]of Z.entries()){let F=!1;if(Ax1.includes(_)){let g=/\d[^m]*/.exec(I.slice(X,X+18));if(B=g&&g.length>0?g[0]:void 0,Ad&&A<=W)V+=_;else if(A===d&&!w&&B!==void 0)V=Bx1(C);else if(A>=W){V+=Bx1(C,!0,B);break}}return V}function Kj(I,d,G){if(I.charAt(d)===" ")return d;let Z=G?1:-1;for(let C=0;C<=3;C++){let W=d+C*Z;if(I.charAt(W)===" ")return W}return d}function c51(I,d,G={}){let{position:Z="end",space:C=!1,preferTruncationOnSpace:W=!1}=G,{truncationCharacter:w="…"}=G;if(typeof I!=="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof I}`);if(typeof d!=="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof d}`);if(d<1)return"";if(d===1)return w;let B=E7(I);if(B<=d)return I;if(Z==="start"){if(W){let A=Kj(I,B-d+1,!0);return w+Ow(I,A,B).trim()}if(C===!0)w+=" ";return w+Ow(I,B-d+E7(w),B)}if(Z==="middle"){if(C===!0)w=` ${w} `;let A=Math.floor(d/2);if(W){let V=Kj(I,A),X=Kj(I,B-(d-A)+1,!0);return Ow(I,0,V)+w+Ow(I,X,B).trim()}return Ow(I,0,A)+w+Ow(I,B-(d-A)+E7(w),B)}if(Z==="end"){if(W){let A=Kj(I,d-1);return Ow(I,0,A)+w}if(C===!0)w=` ${w}`;return Ow(I,0,d-E7(w))+w}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${Z}`)}var Vx1={},K_4=(I,d,G)=>{let Z=I+String(d)+String(G),C=Vx1[Z];if(C)return C;let W=I;if(G==="wrap")W=UM(I,d,{trim:!1,hard:!0});if(G.startsWith("truncate")){let w="end";if(G==="truncate-middle")w="middle";if(G==="truncate-start")w="start";W=c51(I,d,{position:w})}return Vx1[Z]=W,W},Nj=K_4;var Xx1=(I)=>{let d="";for(let G=0;G0&&typeof Z.internal_transform==="function")C=Z.internal_transform(C,G)}d+=C}return d},zj=Xx1;var Qj=(I)=>{let d={nodeName:I,style:{},attributes:{},childNodes:[],parentNode:void 0,yogaNode:I==="ink-virtual-text"?void 0:Dj.Node.create()};if(I==="ink-text")d.yogaNode?.setMeasureFunc(N_4.bind(null,d));return d},fj=(I,d)=>{if(d.parentNode)EM(d.parentNode,d);if(d.parentNode=I,I.childNodes.push(d),d.yogaNode)I.yogaNode?.insertChild(d.yogaNode,I.yogaNode.getChildCount());if(I.nodeName==="ink-text"||I.nodeName==="ink-virtual-text")qj(I)},p51=(I,d,G)=>{if(d.parentNode)EM(d.parentNode,d);d.parentNode=I;let Z=I.childNodes.indexOf(G);if(Z>=0){if(I.childNodes.splice(Z,0,d),d.yogaNode)I.yogaNode?.insertChild(d.yogaNode,Z);return}if(I.childNodes.push(d),d.yogaNode)I.yogaNode?.insertChild(d.yogaNode,I.yogaNode.getChildCount());if(I.nodeName==="ink-text"||I.nodeName==="ink-virtual-text")qj(I)},EM=(I,d)=>{if(d.yogaNode)d.parentNode?.yogaNode?.removeChild(d.yogaNode);d.parentNode=void 0;let G=I.childNodes.indexOf(d);if(G>=0)I.childNodes.splice(G,1);if(I.nodeName==="ink-text"||I.nodeName==="ink-virtual-text")qj(I)},i51=(I,d,G)=>{I.attributes[d]=G},n51=(I,d)=>{I.style=d},Yx1=(I)=>{let d={nodeName:"#text",nodeValue:I,yogaNode:void 0,parentNode:void 0,style:{}};return MM(d,I),d},N_4=function(I,d){let G=I.nodeName==="#text"?I.nodeValue:zj(I),Z=j51(G);if(Z.width<=d)return Z;if(Z.width>=1&&d>0&&d<1)return Z;let C=I.style?.textWrap??"wrap",W=Nj(G,d,C);return j51(W)},_x1=(I)=>{if(!I?.parentNode)return;return I.yogaNode??_x1(I.parentNode)},qj=(I)=>{_x1(I)?.markDirty()},MM=(I,d)=>{if(typeof d!=="string")d=String(d);I.nodeValue=d,qj(I)};var Q_4=(I,d)=>{if("position"in d)I.setPositionType(d.position==="absolute"?Aj:Bj)},f_4=(I,d)=>{if("margin"in d)I.setMargin(qM,d.margin??0);if("marginX"in d)I.setMargin(QM,d.marginX??0);if("marginY"in d)I.setMargin(fM,d.marginY??0);if("marginLeft"in d)I.setMargin(ih,d.marginLeft||0);if("marginRight"in d)I.setMargin(nh,d.marginRight||0);if("marginTop"in d)I.setMargin(bY,d.marginTop||0);if("marginBottom"in d)I.setMargin(hY,d.marginBottom||0)},q_4=(I,d)=>{if("padding"in d)I.setPadding(qM,d.padding??0);if("paddingX"in d)I.setPadding(QM,d.paddingX??0);if("paddingY"in d)I.setPadding(fM,d.paddingY??0);if("paddingLeft"in d)I.setPadding(uw,d.paddingLeft||0);if("paddingRight"in d)I.setPadding(Tw,d.paddingRight||0);if("paddingTop"in d)I.setPadding(bY,d.paddingTop||0);if("paddingBottom"in d)I.setPadding(hY,d.paddingBottom||0)},R_4=(I,d)=>{if("flexGrow"in d)I.setFlexGrow(d.flexGrow??0);if("flexShrink"in d)I.setFlexShrink(typeof d.flexShrink==="number"?d.flexShrink:1);if("flexWrap"in d){if(d.flexWrap==="nowrap")I.setFlexWrap(Vj);if(d.flexWrap==="wrap")I.setFlexWrap(Xj);if(d.flexWrap==="wrap-reverse")I.setFlexWrap(Yj)}if("flexDirection"in d){if(d.flexDirection==="row")I.setFlexDirection(sh);if(d.flexDirection==="row-reverse")I.setFlexDirection(oh);if(d.flexDirection==="column")I.setFlexDirection(rh);if(d.flexDirection==="column-reverse")I.setFlexDirection(ah)}if("flexBasis"in d)if(typeof d.flexBasis==="number")I.setFlexBasis(d.flexBasis);else if(typeof d.flexBasis==="string")I.setFlexBasisPercent(Number.parseInt(d.flexBasis,10));else I.setFlexBasis(Number.NaN);if("alignItems"in d){if(d.alignItems==="stretch"||!d.alignItems)I.setAlignItems(ph);if(d.alignItems==="flex-start")I.setAlignItems(KM);if(d.alignItems==="center")I.setAlignItems(NM);if(d.alignItems==="flex-end")I.setAlignItems(zM)}if("alignSelf"in d){if(d.alignSelf==="auto"||!d.alignSelf)I.setAlignSelf(ch);if(d.alignSelf==="flex-start")I.setAlignSelf(KM);if(d.alignSelf==="center")I.setAlignSelf(NM);if(d.alignSelf==="flex-end")I.setAlignSelf(zM)}if("justifyContent"in d){if(d.justifyContent==="flex-start"||!d.justifyContent)I.setJustifyContent(dj);if(d.justifyContent==="center")I.setJustifyContent(Gj);if(d.justifyContent==="flex-end")I.setJustifyContent(Zj);if(d.justifyContent==="space-between")I.setJustifyContent(Cj);if(d.justifyContent==="space-around")I.setJustifyContent(Wj);if(d.justifyContent==="space-evenly")I.setJustifyContent(wj)}},U_4=(I,d)=>{if("width"in d)if(typeof d.width==="number")I.setWidth(d.width);else if(typeof d.width==="string")I.setWidthPercent(Number.parseInt(d.width,10));else I.setWidthAuto();if("height"in d)if(typeof d.height==="number")I.setHeight(d.height);else if(typeof d.height==="string")I.setHeightPercent(Number.parseInt(d.height,10));else I.setHeightAuto();if("minWidth"in d)if(typeof d.minWidth==="string")I.setMinWidthPercent(Number.parseInt(d.minWidth,10));else I.setMinWidth(d.minWidth??0);if("minHeight"in d)if(typeof d.minHeight==="string")I.setMinHeightPercent(Number.parseInt(d.minHeight,10));else I.setMinHeight(d.minHeight??0)},v_4=(I,d)=>{if("display"in d)I.setDisplay(d.display==="flex"?IQ:lY)},E_4=(I,d)=>{if("borderStyle"in d){let G=d.borderStyle?1:0;if(d.borderTop!==!1)I.setBorder(bY,G);if(d.borderBottom!==!1)I.setBorder(hY,G);if(d.borderLeft!==!1)I.setBorder(uw,G);if(d.borderRight!==!1)I.setBorder(Tw,G)}},M_4=(I,d)=>{if("gap"in d)I.setGap(Ij,d.gap??0);if("columnGap"in d)I.setGap(eh,d.columnGap??0);if("rowGap"in d)I.setGap(th,d.rowGap??0)},S_4=(I,d={})=>{Q_4(I,d),f_4(I,d),q_4(I,d),R_4(I,d),U_4(I,d),v_4(I,d),E_4(I,d),M_4(I,d)},r51=S_4;if(eD4.env.DEV==="true")try{Promise.resolve().then(() => Qc1())}catch(I){if(I.code==="ERR_MODULE_NOT_FOUND")console.warn(` +The environment variable DEV is set to true, so Ink tried to import \`react-devtools-core\`, +but this failed as it was not installed. Debugging with React Devtools requires it. + +To install use this command: + +$ npm install --save-dev react-devtools-core + `.trim()+` +`);else throw I}var fc1=(I,d)=>{if(I===d)return;if(!I)return d;let G={},Z=!1;for(let C of Object.keys(I))if(d?!Object.hasOwn(d,C):!0)G[C]=void 0,Z=!0;if(d){for(let C of Object.keys(d))if(d[C]!==I[C])G[C]=d[C],Z=!0}return Z?G:void 0},qc1=(I)=>{I?.unsetMeasureFunc(),I?.freeRecursive()},Jg=Rc1.default({getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>null,preparePortalMount:()=>null,clearContainer:()=>!1,resetAfterCommit(I){if(typeof I.onComputeLayout==="function")I.onComputeLayout();if(I.isStaticDirty){if(I.isStaticDirty=!1,typeof I.onImmediateRender==="function")I.onImmediateRender();return}if(typeof I.onRender==="function")I.onRender()},getChildHostContext(I,d){let G=I.isInsideText,Z=d==="ink-text"||d==="ink-virtual-text";if(G===Z)return I;return{isInsideText:Z}},shouldSetTextContent:()=>!1,createInstance(I,d,G,Z){if(Z.isInsideText&&I==="ink-box")throw new Error(" can’t be nested inside component");let C=I==="ink-text"&&Z.isInsideText?"ink-virtual-text":I,W=Qj(C);for(let[w,B]of Object.entries(d)){if(w==="children")continue;if(w==="style"){if(n51(W,B),W.yogaNode)r51(W.yogaNode,B);continue}if(w==="internal_transform"){W.internal_transform=B;continue}if(w==="internal_static"){W.internal_static=!0;continue}i51(W,w,B)}return W},createTextInstance(I,d,G){if(!G.isInsideText)throw new Error(`Text string "${I}" must be rendered inside component`);return Yx1(I)},resetTextContent(){},hideTextInstance(I){MM(I,"")},unhideTextInstance(I,d){MM(I,d)},getPublicInstance:(I)=>I,hideInstance(I){I.yogaNode?.setDisplay(lY)},unhideInstance(I){I.yogaNode?.setDisplay(IQ)},appendInitialChild:fj,appendChild:fj,insertBefore:p51,finalizeInitialChildren(I,d,G,Z){if(I.internal_static)Z.isStaticDirty=!0,Z.staticNode=I;return!1},isPrimaryRenderer:!0,supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,scheduleTimeout:setTimeout,cancelTimeout:clearTimeout,noTimeout:-1,getCurrentEventPriority:()=>b51,beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},detachDeletedInstance(){},getInstanceFromNode:()=>null,prepareScopeUpdate(){},getInstanceFromScope:()=>null,appendChildToContainer:fj,insertInContainerBefore:p51,removeChildFromContainer(I,d){EM(I,d),qc1(d.yogaNode)},prepareUpdate(I,d,G,Z,C){if(I.internal_static)C.isStaticDirty=!0;let W=fc1(G,Z),w=fc1(G.style,Z.style);if(!W&&!w)return null;return{props:W,style:w}},commitUpdate(I,{props:d,style:G}){if(d)for(let[Z,C]of Object.entries(d)){if(Z==="style"){n51(I,C);continue}if(Z==="internal_transform"){I.internal_transform=C;continue}if(Z==="internal_static"){I.internal_static=!0;continue}i51(I,Z,C)}if(G&&I.yogaNode)r51(I.yogaNode,G)},commitTextUpdate(I,d,G){MM(I,G)},removeChild(I,d){EM(I,d),qc1(d.yogaNode)}});function Y91(I,d=1,G={}){let{indent:Z=" ",includeEmptyLines:C=!1}=G;if(typeof I!=="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof I}\``);if(typeof d!=="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof d}\``);if(d<0)throw new RangeError(`Expected \`count\` to be at least 0, got \`${d}\``);if(typeof Z!=="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof Z}\``);if(d===0)return I;let W=C?/^/gm:/^(?!\s*$)/gm;return I.replace(W,Z.repeat(d))}var tD4=(I)=>{return I.getComputedWidth()-I.getComputedPadding(uw)-I.getComputedPadding(Tw)-I.getComputedBorder(uw)-I.getComputedBorder(Tw)},Uc1=tD4;var Sc1=J1(Mc1(),1);var dH4=/^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,GH4=/^ansi256\(\s?(\d+)\s?\)$/,ZH4=(I)=>{return I in c0},CH4=(I,d,G)=>{if(!d)return I;if(ZH4(d)){if(G==="foreground")return c0[d](I);let Z=`bg${d[0].toUpperCase()+d.slice(1)}`;return c0[Z](I)}if(d.startsWith("#"))return G==="foreground"?c0.hex(d)(I):c0.bgHex(d)(I);if(d.startsWith("ansi256")){let Z=GH4.exec(d);if(!Z)return I;let C=Number(Z[1]);return G==="foreground"?c0.ansi256(C)(I):c0.bgAnsi256(C)(I)}if(d.startsWith("rgb")){let Z=dH4.exec(d);if(!Z)return I;let C=Number(Z[1]),W=Number(Z[2]),w=Number(Z[3]);return G==="foreground"?c0.rgb(C,W,w)(I):c0.bgRgb(C,W,w)(I)}return I},pY=CH4;var WH4=(I,d,G,Z)=>{if(G.style.borderStyle){let C=G.yogaNode.getComputedWidth(),W=G.yogaNode.getComputedHeight(),w=typeof G.style.borderStyle==="string"?Sc1.default[G.style.borderStyle]:G.style.borderStyle,B=G.style.borderTopColor??G.style.borderColor,A=G.style.borderBottomColor??G.style.borderColor,V=G.style.borderLeftColor??G.style.borderColor,X=G.style.borderRightColor??G.style.borderColor,_=G.style.borderTopDimColor??G.style.borderDimColor,F=G.style.borderBottomDimColor??G.style.borderDimColor,g=G.style.borderLeftDimColor??G.style.borderDimColor,J=G.style.borderRightDimColor??G.style.borderDimColor,K=G.style.borderTop!==!1,Q=G.style.borderBottom!==!1,E=G.style.borderLeft!==!1,S=G.style.borderRight!==!1,P=C-(E?1:0)-(S?1:0),$=K?pY((E?w.topLeft:"")+w.top.repeat(P)+(S?w.topRight:""),B,"foreground"):void 0;if(K&&_)$=c0.dim($);let h=W;if(K)h-=1;if(Q)h-=1;let O=(pY(w.left,V,"foreground")+` +`).repeat(h);if(g)O=c0.dim(O);let T=(pY(w.right,X,"foreground")+` +`).repeat(h);if(J)T=c0.dim(T);let V1=Q?pY((E?w.bottomLeft:"")+w.bottom.repeat(P)+(S?w.bottomRight:""),A,"foreground"):void 0;if(Q&&F)V1=c0.dim(V1);let c=K?1:0;if($)Z.write(I,d,$,{transformers:[]});if(E)Z.write(I,d+c,O,{transformers:[]});if(S)Z.write(I+C-1,d+c,T,{transformers:[]});if(V1)Z.write(I,d+W-1,V1,{transformers:[]})}},Lc1=WH4;var wH4=(I,d)=>{let G=I.childNodes[0]?.yogaNode;if(G){let Z=G.getComputedLeft(),C=G.getComputedTop();d=` +`.repeat(C)+Y91(d,Z)}return d},yc1=(I,d,G)=>{let{offsetX:Z=0,offsetY:C=0,transformers:W=[],skipStaticElements:w}=G;if(w&&I.internal_static)return;let{yogaNode:B}=I;if(B){if(B.getDisplay()===lY)return;let A=Z+B.getComputedLeft(),V=C+B.getComputedTop(),X=W;if(typeof I.internal_transform==="function")X=[I.internal_transform,...W];if(I.nodeName==="ink-text"){let F=zj(I);if(F.length>0){let g=dQ(F),J=Uc1(B);if(g>J){let K=I.style.textWrap??"wrap";F=Nj(F,J,K)}F=wH4(I,F),d.write(A,V,F,{transformers:X})}return}let _=!1;if(I.nodeName==="ink-box"){Lc1(A,V,I,d);let F=I.style.overflowX==="hidden"||I.style.overflow==="hidden",g=I.style.overflowY==="hidden"||I.style.overflow==="hidden";if(F||g){let J=F?A+B.getComputedBorder(uw):void 0,K=F?A+B.getComputedWidth()-B.getComputedBorder(Tw):void 0,Q=g?V+B.getComputedBorder(bY):void 0,E=g?V+B.getComputedHeight()-B.getComputedBorder(hY):void 0;d.clip({x1:J,x2:K,y1:Q,y2:E}),_=!0}}if(I.nodeName==="ink-root"||I.nodeName==="ink-box"){for(let F of I.childNodes)yc1(F,d,{offsetX:A,offsetY:V,transformers:X,skipStaticElements:w});if(_)d.unclip()}}},D91=yc1;function H91(I){if(!Number.isInteger(I))return!1;return Hj(I)===2}var BH4=new Set([27,155]),AH4="0".codePointAt(0),VH4="9".codePointAt(0),g91=new Set,F91=new Map;for(let[I,d]of d3.codes)g91.add(d3.color.ansi(d)),F91.set(d3.color.ansi(I),d3.color.ansi(d));function XH4(I){if(g91.has(I))return I;if(F91.has(I))return F91.get(I);if(I=I.slice(2),I.includes(";"))I=I[0]+"0";let d=d3.codes.get(Number.parseInt(I,10));if(d)return d3.color.ansi(d);return d3.reset.open}function YH4(I){for(let d=0;d=AH4&&G<=VH4)return d}return-1}function _H4(I,d){I=I.slice(d,d+19);let G=YH4(I);if(G!==-1){let Z=I.indexOf("m",G);if(Z===-1)Z=I.length;return I.slice(0,Z+1)}}function DH4(I,d=Number.POSITIVE_INFINITY){let G=[],Z=0,C=0;while(Z=d)break}return G}function Pc1(I){let d=[];for(let G of I)if(G.code===d3.reset.open)d=[];else if(g91.has(G.code))d=d.filter((Z)=>Z.endCode!==G.code);else d=d.filter((Z)=>Z.endCode!==G.endCode),d.push(G);return d}function HH4(I){return Pc1(I).map(({endCode:Z})=>Z).reverse().join("")}function J91(I,d,G){let Z=DH4(I,G),C=[],W=0,w="",B=!1;for(let A of Z){if(G!==void 0&&W>=G)break;if(A.type==="ansi"){if(C.push(A),B)w+=A.code}else{if(!B&&W>=d)B=!0,C=Pc1(C),w=C.map(({code:V})=>V).join("");if(B)w+=A.value;W+=A.isFullWidth?2:A.value.length}}return w+=HH4(C),w}var $c1=new Set([27,155]),lj=new Set,K91=new Map;for(let[I,d]of d3.codes)lj.add(d3.color.ansi(d)),K91.set(d3.color.ansi(I),d3.color.ansi(d));var bj="\x1B]8;;",N91=bj.split("").map((I)=>I.charCodeAt(0)),uc1="\x07",FL9=uc1.charCodeAt(0),FH4=`\x1B]8;;${uc1}`;function Tc1(I){if(lj.has(I))return I;if(K91.has(I))return K91.get(I);if(I.startsWith(bj))return FH4;if(I=I.slice(2),I.includes(";"))I=I[0]+"0";let d=d3.codes.get(parseInt(I,10));if(d)return d3.color.ansi(d);else return d3.reset.open}function lM(I){return I.map((d)=>d.code).join("")}function z91(I){return hj([],I)}function hj(I,d){let G=[...I];for(let Z of d)if(Z.code===d3.reset.open)G=[];else if(lj.has(Z.code))G=G.filter((C)=>C.endCode!==Z.code);else G=G.filter((C)=>C.endCode!==Z.endCode),G.push(Z);return G}function Q91(I){return z91(I).reverse().map((d)=>({...d,code:d.endCode}))}function jj(I,d){let G=new Set(d.map((C)=>C.endCode)),Z=new Set(I.map((C)=>C.code));return[...Q91(I.filter((C)=>!G.has(C.endCode))),...d.filter((C)=>!Z.has(C.code))]}function Oc1(I){let d=[],G=[];for(let Z of I)if(Z.type==="ansi")d=hj(d,[Z]);else if(Z.type==="char")G.push({...Z,styles:[...d]});return G}function mc1(I){let d="";for(let G=0;G=48&&G<=57)return d}return-1}function JH4(I,d){I=I.slice(d);for(let Z=1;Z=d)break}return G}class bM{width;height;operations=[];charCache={};styledCharsToStringCache={};constructor(I){let{width:d,height:G}=I;this.width=d,this.height=G}write(I,d,G,Z){let{transformers:C}=Z;if(!G)return;this.operations.push({type:"write",x:I,y:d,text:G,transformers:C})}clip(I){this.operations.push({type:"clip",clip:I})}unclip(){this.operations.push({type:"unclip"})}get(){let I=[];for(let Z=0;ZV.x2)continue}if(F){let g=A.length;if(B+gV.y2)continue}if(_){if(A=A.map((g)=>{let J=wV.x2?V.x2-w:K;return J91(g,J,Q)}),wV.y2?V.y2-B:J;if(A=A.slice(g,K),B1;if(E)g[K+1]={type:"char",value:"",fullWidth:!1,styles:Q.styles};K+=E?2:1}X++}}}return{output:I.map((Z)=>{let C=Z.filter((w)=>w!==void 0),W=JSON.stringify(C);if(!this.styledCharsToStringCache.hasOwnProperty(W)){let w=mc1(C).trimEnd();this.styledCharsToStringCache[W]=w}return this.styledCharsToStringCache[W]}).join(` +`),height:I.length}}}var NH4=(I)=>{if(I.yogaNode){let d=new bM({width:I.yogaNode.getComputedWidth(),height:I.yogaNode.getComputedHeight()});D91(I,d,{skipStaticElements:!0});let G;if(I.staticNode?.yogaNode)G=new bM({width:I.staticNode.yogaNode.getComputedWidth(),height:I.staticNode.yogaNode.getComputedHeight()}),D91(I.staticNode,G,{skipStaticElements:!1});let{output:Z,height:C}=d.get();return{output:Z,outputHeight:C,staticOutput:G?`${G.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}},bc1=NH4;import tc1 from"node:process";var sc1=J1(xc1(),1),oc1=J1(ac1(),1);import QH4 from"node:process";var fH4=sc1.default(()=>{oc1.default(()=>{QH4.stderr.write("\x1B[?25h")},{alwaysLast:!0})}),ec1=fH4;var rj=!1,XQ={};XQ.show=(I=tc1.stderr)=>{if(!I.isTTY)return;rj=!1,I.write("\x1B[?25h")};XQ.hide=(I=tc1.stderr)=>{if(!I.isTTY)return;ec1(),rj=!0,I.write("\x1B[?25l")};XQ.toggle=(I,d)=>{if(I!==void 0)rj=I;if(rj)XQ.show(d);else XQ.hide(d)};var YQ=XQ;var qH4=(I,{showCursor:d=!1}={})=>{let G=0,Z="",C=!1,W=(w)=>{if(!d&&!C)YQ.hide(),C=!0;let B=w+` +`;if(B===Z)return;Z=B,I.write(OY.eraseLines(G)+B),G=B.split(` +`).length};return W.clear=()=>{I.write(OY.eraseLines(G)),Z="",G=0},W.updateLineCount=(w)=>{G=w.split(` +`).length},W.done=()=>{if(Z="",G=0,!d)YQ.show(),C=!1},W},RH4={create:qH4},Ip1=RH4;var UH4=new WeakMap,_Q=UH4;var tA=J1(u1(),1);import{EventEmitter as bH4}from"node:events";import hH4 from"node:process";var dp1=J1(u1(),1),Gp1=dp1.createContext({exit(){}});Gp1.displayName="InternalAppContext";var U91=Gp1;var Zp1=J1(u1(),1);import{EventEmitter as vH4}from"node:events";import EH4 from"node:process";var Cp1=Zp1.createContext({stdin:EH4.stdin,internal_eventEmitter:new vH4,setRawMode(){},isRawModeSupported:!1,internal_exitOnCtrlC:!0});Cp1.displayName="InternalStdinContext";var aj=Cp1;var Wp1=J1(u1(),1);import MH4 from"node:process";var wp1=Wp1.createContext({stdout:MH4.stdout,write(){}});wp1.displayName="InternalStdoutContext";var v91=wp1;var Bp1=J1(u1(),1);import SH4 from"node:process";var Ap1=Bp1.createContext({stderr:SH4.stderr,write(){}});Ap1.displayName="InternalStderrContext";var E91=Ap1;var Vp1=J1(u1(),1),Xp1=Vp1.createContext({activeId:void 0,add(){},remove(){},activate(){},deactivate(){},enableFocus(){},disableFocus(){},focusNext(){},focusPrevious(){},focus(){}});Xp1.displayName="InternalFocusContext";var sj=Xp1;var z6=J1(u1(),1),L91=J1(gp1(),1);import*as ej from"node:fs";import{cwd as fp1}from"node:process";var OH4=(I,d=2)=>{return I.replace(/^\t+/gm,(G)=>" ".repeat(G.length*d))},Jp1=OH4;var mH4=(I,d)=>{let G=[],Z=I-d,C=I+d;for(let W=Z;W<=C;W++)G.push(W);return G},lH4=(I,d,G={})=>{var Z;if(typeof I!=="string")throw new TypeError("Source code is missing.");if(!d||d<1)throw new TypeError("Line number must start from `1`.");let C=Jp1(I).split(/\r?\n/);if(d>C.length)return;return mH4(d,(Z=G.around)!==null&&Z!==void 0?Z:3).filter((W)=>C[W-1]!==void 0).map((W)=>({line:W,value:C[W-1]}))},Kp1=lH4;var oj=J1(u1(),1),S91=oj.forwardRef(({children:I,...d},G)=>{return oj.default.createElement("ink-box",{ref:G,style:{...d,overflowX:d.overflowX??d.overflow??"visible",overflowY:d.overflowY??d.overflow??"visible"}},I)});S91.displayName="Box";S91.defaultProps={flexWrap:"nowrap",flexDirection:"row",flexGrow:0,flexShrink:1};var p=S91;var Np1=J1(u1(),1);function u({color:I,backgroundColor:d,dimColor:G=!1,bold:Z=!1,italic:C=!1,underline:W=!1,strikethrough:w=!1,inverse:B=!1,wrap:A="wrap",children:V}){if(V===void 0||V===null)return null;let X=(_)=>{if(G)_=c0.dim(_);if(I)_=pY(_,I,"foreground");if(d)_=pY(_,d,"background");if(Z)_=c0.bold(_);if(C)_=c0.italic(_);if(W)_=c0.underline(_);if(w)_=c0.strikethrough(_);if(B)_=c0.inverse(_);return _};return Np1.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:A},internal_transform:X},V)}var zp1=(I)=>{return I?.replace(`file://${fp1()}/`,"")},Qp1=new L91.default({cwd:fp1(),internals:L91.default.nodeInternals()});function y91({error:I}){let d=I.stack?I.stack.split(` +`).slice(1):void 0,G=d?Qp1.parseLine(d[0]):void 0,Z=zp1(G?.file),C,W=0;if(Z&&G?.line&&ej.existsSync(Z)){let w=ej.readFileSync(Z,"utf8");if(C=Kp1(w,G.line),C)for(let{line:B}of C)W=Math.max(W,String(B).length)}return z6.default.createElement(p,{flexDirection:"column",padding:1},z6.default.createElement(p,null,z6.default.createElement(u,{backgroundColor:"red",color:"white"}," ","ERROR"," "),z6.default.createElement(u,null," ",I.message)),G&&Z&&z6.default.createElement(p,{marginTop:1},z6.default.createElement(u,{dimColor:!0},Z,":",G.line,":",G.column)),G&&C&&z6.default.createElement(p,{marginTop:1,flexDirection:"column"},C.map(({line:w,value:B})=>z6.default.createElement(p,{key:w},z6.default.createElement(p,{width:W+1},z6.default.createElement(u,{dimColor:w!==G.line,backgroundColor:w===G.line?"red":void 0,color:w===G.line?"white":void 0},String(w).padStart(W," "),":")),z6.default.createElement(u,{key:w,backgroundColor:w===G.line?"red":void 0,color:w===G.line?"white":void 0}," "+B)))),I.stack&&z6.default.createElement(p,{marginTop:1,flexDirection:"column"},I.stack.split(` +`).slice(1).map((w)=>{let B=Qp1.parseLine(w);if(!B)return z6.default.createElement(p,{key:w},z6.default.createElement(u,{dimColor:!0},"- "),z6.default.createElement(u,{dimColor:!0,bold:!0},w));return z6.default.createElement(p,{key:w},z6.default.createElement(u,{dimColor:!0},"- "),z6.default.createElement(u,{dimColor:!0,bold:!0},B.function),z6.default.createElement(u,{dimColor:!0,color:"gray"}," ","(",zp1(B.file)??"",":",B.line,":",B.column,")"))})))}var jH4="\t",kH4="\x1B[Z",xH4="\x1B";class tj extends tA.PureComponent{static displayName="InternalApp";static getDerivedStateFromError(I){return{error:I}}state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0};rawModeEnabledCount=0;internal_eventEmitter=new bH4;isRawModeSupported(){return this.props.stdin.isTTY}render(){return tA.default.createElement(U91.Provider,{value:{exit:this.handleExit}},tA.default.createElement(aj.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC,internal_eventEmitter:this.internal_eventEmitter}},tA.default.createElement(v91.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},tA.default.createElement(E91.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},tA.default.createElement(sj.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious,focus:this.focus}},this.state.error?tA.default.createElement(y91,{error:this.state.error}):this.props.children)))))}componentDidMount(){YQ.hide(this.props.stdout)}componentWillUnmount(){if(YQ.show(this.props.stdout),this.isRawModeSupported())this.handleSetRawMode(!1)}componentDidCatch(I){this.handleExit(I)}handleSetRawMode=(I)=>{let{stdin:d}=this.props;if(!this.isRawModeSupported())if(d===hH4.stdin)throw new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);else throw new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(d.setEncoding("utf8"),I){if(this.rawModeEnabledCount===0)d.ref(),d.setRawMode(!0),d.addListener("readable",this.handleReadable);this.rawModeEnabledCount++;return}if(--this.rawModeEnabledCount===0)d.setRawMode(!1),d.removeListener("readable",this.handleReadable),d.unref()};handleReadable=()=>{let I;while((I=this.props.stdin.read())!==null)this.handleInput(I),this.internal_eventEmitter.emit("input",I)};handleInput=(I)=>{if(I==="\x03"&&this.props.exitOnCtrlC)this.handleExit();if(I===xH4&&this.state.activeFocusId)this.setState({activeFocusId:void 0});if(this.state.isFocusEnabled&&this.state.focusables.length>0){if(I===jH4)this.focusNext();if(I===kH4)this.focusPrevious()}};handleExit=(I)=>{if(this.isRawModeSupported())this.handleSetRawMode(!1);this.props.onExit(I)};enableFocus=()=>{this.setState({isFocusEnabled:!0})};disableFocus=()=>{this.setState({isFocusEnabled:!1})};focus=(I)=>{this.setState((d)=>{if(!d.focusables.some((Z)=>Z?.id===I))return d;return{activeFocusId:I}})};focusNext=()=>{this.setState((I)=>{let d=I.focusables.find((Z)=>Z.isActive)?.id;return{activeFocusId:this.findNextFocusable(I)??d}})};focusPrevious=()=>{this.setState((I)=>{let d=I.focusables.findLast((Z)=>Z.isActive)?.id;return{activeFocusId:this.findPreviousFocusable(I)??d}})};addFocusable=(I,{autoFocus:d})=>{this.setState((G)=>{let Z=G.activeFocusId;if(!Z&&d)Z=I;return{activeFocusId:Z,focusables:[...G.focusables,{id:I,isActive:!0}]}})};removeFocusable=(I)=>{this.setState((d)=>({activeFocusId:d.activeFocusId===I?void 0:d.activeFocusId,focusables:d.focusables.filter((G)=>{return G.id!==I})}))};activateFocusable=(I)=>{this.setState((d)=>({focusables:d.focusables.map((G)=>{if(G.id!==I)return G;return{id:I,isActive:!0}})}))};deactivateFocusable=(I)=>{this.setState((d)=>({activeFocusId:d.activeFocusId===I?void 0:d.activeFocusId,focusables:d.focusables.map((G)=>{if(G.id!==I)return G;return{id:I,isActive:!1}})}))};findNextFocusable=(I)=>{let d=I.focusables.findIndex((G)=>{return G.id===I.activeFocusId});for(let G=d+1;G{let d=I.focusables.findIndex((G)=>{return G.id===I.activeFocusId});for(let G=d-1;G>=0;G--){let Z=I.focusables[G];if(Z?.isActive)return Z.id}return}}var qp1=()=>{};class Ik{options;log;throttledLog;isUnmounted;lastOutput;lastOutputHeight;container;rootNode=null;fullStaticOutput;exitPromise;restoreConsole;unsubscribeResize;constructor(I){if(U51(this),this.options=I,this.log=Ip1.create(I.stdout),this.throttledLog=I.debug?this.log:$h(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.lastOutputHeight=0,this.fullStaticOutput="",this.unsubscribeExit=Up1.default(this.unmount,{alwaysLast:!1}),I.patchConsole)this.patchConsole();if(!Vg)I.stdout.on("resize",this.resized),this.unsubscribeResize=()=>{I.stdout.off("resize",this.resized)};if(this.rootNode=Qj("ink-root"),this.rootNode.onComputeLayout=this.calculateLayout,this.rootNode.onRender=I.debug?this.onRender:$h(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.container=Jg.createContainer(this.rootNode,0,null,!1,null,"id",()=>{},null),cH4.env.DEV==="true")Jg.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"})}resized=()=>{this.calculateLayout(),this.onRender(!0)};resolveExitPromise=()=>{};rejectExitPromise=()=>{};unsubscribeExit=()=>{};calculateLayout=()=>{let I=this.options.stdout.columns||80;if(!this.rootNode)return;this.rootNode.yogaNode.setWidth(I),this.rootNode.yogaNode.calculateLayout(void 0,void 0,Dj.DIRECTION_LTR)};onRender(I=!1){if(this.isUnmounted)return;if(!this.rootNode)return;let{output:d,outputHeight:G,staticOutput:Z}=bc1(this.rootNode),C=Z&&Z!==` +`;if(this.options.debug){if(C)this.fullStaticOutput+=Z;this.options.stdout.write(this.fullStaticOutput+d);return}if(Vg){if(C)this.options.stdout.write(Z);this.lastOutput=d,this.lastOutputHeight=G;return}if(C)this.fullStaticOutput+=Z;if(G>=this.options.stdout.rows||this.lastOutputHeight>=this.options.stdout.rows){if(this.options.onFlicker)this.options.onFlicker();this.options.stdout.write(OY.clearTerminal+this.fullStaticOutput+d+` +`),this.lastOutput=d,this.lastOutputHeight=G,this.log.updateLineCount(d+` +`);return}if(I){this.options.stdout.write(OY.clearTerminal+this.fullStaticOutput+d+` +`),this.lastOutput=d,this.lastOutputHeight=G,this.log.updateLineCount(d+` +`);return}if(C)this.log.clear(),this.options.stdout.write(Z),this.throttledLog(d);if(!C&&d!==this.lastOutput)this.throttledLog(d);this.lastOutput=d,this.lastOutputHeight=G}render(I){let d=Rp1.default.createElement(tj,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},I);Jg.updateContainer(d,this.container,null,qp1)}writeToStdout(I){if(this.isUnmounted)return;if(this.options.debug){this.options.stdout.write(I+this.fullStaticOutput+this.lastOutput);return}if(Vg){this.options.stdout.write(I);return}this.log.clear(),this.options.stdout.write(I),this.log(this.lastOutput)}writeToStderr(I){if(this.isUnmounted)return;if(this.options.debug){this.options.stderr.write(I),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Vg){this.options.stderr.write(I);return}this.log.clear(),this.options.stderr.write(I),this.log(this.lastOutput)}unmount(I){if(this.isUnmounted)return;if(this.calculateLayout(),this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole==="function")this.restoreConsole();if(typeof this.unsubscribeResize==="function")this.unsubscribeResize();if(Vg)this.options.stdout.write(this.lastOutput+` +`);else if(!this.options.debug)this.log.done();if(this.isUnmounted=!0,Jg.updateContainer(null,this.container,null,qp1),_Q.delete(this.options.stdout),I instanceof Error)this.rejectExitPromise(I);else this.resolveExitPromise()}async waitUntilExit(){return this.exitPromise||=new Promise((I,d)=>{this.resolveExitPromise=I,this.rejectExitPromise=d}),this.exitPromise}clear(){if(!Vg&&!this.options.debug)this.log.clear()}patchConsole(){if(this.options.debug)return;this.restoreConsole=tj1((I,d)=>{if(I==="stdout")this.writeToStdout(d);if(I==="stderr"){if(!d.startsWith("The above error occurred"))this.writeToStderr(d)}})}}var iH4=(I,d)=>{let G={stdout:dk.stdout,stdin:dk.stdin,stderr:dk.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,...nH4(d)},Z=rH4(G.stdout,()=>new Ik(G));return Z.render(I),{rerender:Z.render,unmount(){Z.unmount()},waitUntilExit:Z.waitUntilExit,cleanup:()=>_Q.delete(G.stdout),clear:Z.clear}},wZ=iH4,nH4=(I={})=>{if(I instanceof pH4)return{stdout:I,stdin:dk.stdin};return I},rH4=(I,d)=>{let G=_Q.get(I);if(!G)G=d(),_Q.set(I,G);return G};var IV=J1(u1(),1);function DQ(I){let{items:d,children:G,style:Z}=I,[C,W]=IV.useState(0),w=IV.useMemo(()=>{return d.slice(C)},[d,C]);IV.useLayoutEffect(()=>{W(d.length)},[d.length]);let B=w.map((V,X)=>{return G(V,C+X)}),A=IV.useMemo(()=>({position:"absolute",flexDirection:"column",...Z}),[Z]);return IV.default.createElement("ink-box",{internal_static:!0,style:A},B)}var vp1=J1(u1(),1);function Gk({children:I,transform:d}){if(I===void 0||I===null)return null;return vp1.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:d},I)}var Ep1=J1(u1(),1);function C6({count:I=1}){return Ep1.default.createElement("ink-text",null,` +`.repeat(I))}var aH4=J1(u1(),1);var P91=J1(u1(),1);import{Buffer as sH4}from"node:buffer";var oH4=/^(?:\x1b)([a-zA-Z0-9])$/,eH4=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,Mp1={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},Sp1=[...Object.values(Mp1),"backspace"],tH4=(I)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(I)},IF4=(I)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(I)},dF4=(I="")=>{let d;if(sH4.isBuffer(I))if(I[0]>127&&I[1]===void 0)I[0]-=128,I="\x1B"+String(I);else I=String(I);else if(I!==void 0&&typeof I!=="string")I=String(I);else if(!I)I="";let G={name:"",fn:!1,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:I,raw:I};if(G.sequence=G.sequence||I||G.name,I==="\r")G.raw=void 0,G.name="return";else if(I===` +`)G.name="enter";else if(I==="\t")G.name="tab";else if(I==="\b"||I==="\x1B\b")G.name="backspace",G.meta=I.charAt(0)==="\x1B";else if(I===""||I==="\x1B")G.name="backspace",G.meta=I.charAt(0)==="\x1B";else if(I==="\x1B"||I==="\x1B\x1B")G.name="escape",G.meta=I.length===2;else if(I===" "||I==="\x1B ")G.name="space",G.meta=I.length===2;else if(I<="\x1A"&&I.length==1)G.name=String.fromCharCode(I.charCodeAt(0)+97-1),G.ctrl=!0;else if(I.length===1&&I>="0"&&I<="9")G.name="number";else if(I.length===1&&I>="a"&&I<="z")G.name=I;else if(I.length===1&&I>="A"&&I<="Z")G.name=I.toLowerCase(),G.shift=!0;else if(d=oH4.exec(I))G.meta=!0,G.shift=/^[A-Z]$/.test(d[1]);else if(d=eH4.exec(I)){let Z=[...I];if(Z[0]==="\x1B"&&Z[1]==="\x1B")G.option=!0;let C=[d[1],d[2],d[4],d[6]].filter(Boolean).join(""),W=(d[3]||d[5]||1)-1;G.ctrl=!!(W&4),G.meta=!!(W&10),G.shift=!!(W&1),G.code=C,G.name=Mp1[C],G.shift=tH4(C)||G.shift,G.ctrl=IF4(C)||G.ctrl}if(G.raw==="\x1Bb")G.meta=!0,G.name="left";else if(G.raw==="\x1Bf")G.meta=!0,G.name="right";switch(I){case"\x1B[1~":return{name:"home",ctrl:!1,meta:!1,shift:!1,option:!1,fn:!1,sequence:I,raw:I};case"\x1B[4~":return{name:"end",ctrl:!1,meta:!1,shift:!1,option:!1,fn:!1,sequence:I,raw:I};case"\x1B[5~":return{name:"pageup",ctrl:!1,meta:!1,shift:!1,option:!1,fn:!1,sequence:I,raw:I};case"\x1B[6~":return{name:"pagedown",ctrl:!1,meta:!1,shift:!1,option:!1,fn:!1,sequence:I,raw:I};case"\x1B[1;5D":return{name:"left",ctrl:!0,meta:!1,shift:!1,option:!1,fn:!1,sequence:I,raw:I};case"\x1B[1;5C":return{name:"right",ctrl:!0,meta:!1,shift:!1,option:!1,fn:!1,sequence:I,raw:I};case"\x1B[1~":return{name:"left",ctrl:!0,fn:!0,meta:!1,shift:!1,option:!1,sequence:I,raw:I};case"\x1B[4~":return{name:"right",ctrl:!0,fn:!0,meta:!1,shift:!1,option:!1,sequence:I,raw:I}}return G},Lp1=dF4;var yp1=J1(u1(),1);var GF4=()=>yp1.useContext(aj),Zk=GF4;var ZF4=(I,d={})=>{let{stdin:G,setRawMode:Z,internal_exitOnCtrlC:C,internal_eventEmitter:W}=Zk();P91.useEffect(()=>{if(d.isActive===!1)return;return Z(!0),()=>{Z(!1)}},[d.isActive,Z]),P91.useEffect(()=>{if(d.isActive===!1)return;let w=(B)=>{let A=Lp1(B);A.name;let V={upArrow:A.name==="up",downArrow:A.name==="down",leftArrow:A.name==="left",rightArrow:A.name==="right",pageDown:A.name==="pagedown",pageUp:A.name==="pageup",home:A.name==="home",end:A.name==="end",return:A.name==="return",escape:A.name==="escape",fn:A.fn,ctrl:A.ctrl,shift:A.shift,tab:A.name==="tab",backspace:A.name==="backspace",delete:A.name==="delete",meta:A.meta||A.name==="escape"||A.option},X=A.ctrl?A.name:A.sequence;if(Sp1.includes(A.name))X="";if(X.startsWith("\x1B"))X=X.slice(1);if(X.length===1&&typeof X[0]==="string"&&X[0].toUpperCase()===X[0])V.shift=!0;if(!(X==="c"&&V.ctrl)||!C)Jg.batchedUpdates(()=>{I(X,V)})};return W?.on("input",w),()=>{W?.removeListener("input",w)}},[d.isActive,G,C,I])},C4=ZF4;var CF4=J1(u1(),1);var WF4=J1(u1(),1);var wF4=J1(u1(),1);var $91=J1(u1(),1);var BF4=J1(u1(),1);var T2=J1(u1(),1);var pF4=J1(u1(),1);var kM=J1(u1(),1),kF4=J1(Tp1(),1);import Op1 from"node:process";function u91(){let{env:I}=Op1,{TERM:d,TERM_PROGRAM:G}=I;if(Op1.platform!=="win32")return d!=="linux";return Boolean(I.WT_SESSION)||Boolean(I.TERMINUS_SUBLIME)||I.ConEmuTask==="{cmd::Cmder}"||G==="Terminus-Sublime"||G==="vscode"||d==="xterm-256color"||d==="alacritty"||d==="rxvt-unicode"||d==="rxvt-unicode-256color"||I.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var mp1={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"█",squareDarkShade:"▓",squareMediumShade:"▒",squareLightShade:"░",squareTop:"▀",squareBottom:"▄",squareLeft:"▌",squareRight:"▐",squareCenter:"■",bullet:"●",dot:"․",ellipsis:"…",pointerSmall:"›",triangleUp:"▲",triangleUpSmall:"▴",triangleDown:"▼",triangleDownSmall:"▾",triangleLeftSmall:"◂",triangleRightSmall:"▸",home:"⌂",heart:"♥",musicNote:"♪",musicNoteBeamed:"♫",arrowUp:"↑",arrowDown:"↓",arrowLeft:"←",arrowRight:"→",arrowLeftRight:"↔",arrowUpDown:"↕",almostEqual:"≈",notEqual:"≠",lessOrEqual:"≤",greaterOrEqual:"≥",identical:"≡",infinity:"∞",subscriptZero:"₀",subscriptOne:"₁",subscriptTwo:"₂",subscriptThree:"₃",subscriptFour:"₄",subscriptFive:"₅",subscriptSix:"₆",subscriptSeven:"₇",subscriptEight:"₈",subscriptNine:"₉",oneHalf:"½",oneThird:"⅓",oneQuarter:"¼",oneFifth:"⅕",oneSixth:"⅙",oneEighth:"⅛",twoThirds:"⅔",twoFifths:"⅖",threeQuarters:"¾",threeFifths:"⅗",threeEighths:"⅜",fourFifths:"⅘",fiveSixths:"⅚",fiveEighths:"⅝",sevenEighths:"⅞",line:"─",lineBold:"━",lineDouble:"═",lineDashed0:"┄",lineDashed1:"┅",lineDashed2:"┈",lineDashed3:"┉",lineDashed4:"╌",lineDashed5:"╍",lineDashed6:"╴",lineDashed7:"╶",lineDashed8:"╸",lineDashed9:"╺",lineDashed10:"╼",lineDashed11:"╾",lineDashed12:"−",lineDashed13:"–",lineDashed14:"‐",lineDashed15:"⁃",lineVertical:"│",lineVerticalBold:"┃",lineVerticalDouble:"║",lineVerticalDashed0:"┆",lineVerticalDashed1:"┇",lineVerticalDashed2:"┊",lineVerticalDashed3:"┋",lineVerticalDashed4:"╎",lineVerticalDashed5:"╏",lineVerticalDashed6:"╵",lineVerticalDashed7:"╷",lineVerticalDashed8:"╹",lineVerticalDashed9:"╻",lineVerticalDashed10:"╽",lineVerticalDashed11:"╿",lineDownLeft:"┐",lineDownLeftArc:"╮",lineDownBoldLeftBold:"┓",lineDownBoldLeft:"┒",lineDownLeftBold:"┑",lineDownDoubleLeftDouble:"╗",lineDownDoubleLeft:"╖",lineDownLeftDouble:"╕",lineDownRight:"┌",lineDownRightArc:"╭",lineDownBoldRightBold:"┏",lineDownBoldRight:"┎",lineDownRightBold:"┍",lineDownDoubleRightDouble:"╔",lineDownDoubleRight:"╓",lineDownRightDouble:"╒",lineUpLeft:"┘",lineUpLeftArc:"╯",lineUpBoldLeftBold:"┛",lineUpBoldLeft:"┚",lineUpLeftBold:"┙",lineUpDoubleLeftDouble:"╝",lineUpDoubleLeft:"╜",lineUpLeftDouble:"╛",lineUpRight:"└",lineUpRightArc:"╰",lineUpBoldRightBold:"┗",lineUpBoldRight:"┖",lineUpRightBold:"┕",lineUpDoubleRightDouble:"╚",lineUpDoubleRight:"╙",lineUpRightDouble:"╘",lineUpDownLeft:"┤",lineUpBoldDownBoldLeftBold:"┫",lineUpBoldDownBoldLeft:"┨",lineUpDownLeftBold:"┥",lineUpBoldDownLeftBold:"┩",lineUpDownBoldLeftBold:"┪",lineUpDownBoldLeft:"┧",lineUpBoldDownLeft:"┦",lineUpDoubleDownDoubleLeftDouble:"╣",lineUpDoubleDownDoubleLeft:"╢",lineUpDownLeftDouble:"╡",lineUpDownRight:"├",lineUpBoldDownBoldRightBold:"┣",lineUpBoldDownBoldRight:"┠",lineUpDownRightBold:"┝",lineUpBoldDownRightBold:"┡",lineUpDownBoldRightBold:"┢",lineUpDownBoldRight:"┟",lineUpBoldDownRight:"┞",lineUpDoubleDownDoubleRightDouble:"╠",lineUpDoubleDownDoubleRight:"╟",lineUpDownRightDouble:"╞",lineDownLeftRight:"┬",lineDownBoldLeftBoldRightBold:"┳",lineDownLeftBoldRightBold:"┯",lineDownBoldLeftRight:"┰",lineDownBoldLeftBoldRight:"┱",lineDownBoldLeftRightBold:"┲",lineDownLeftRightBold:"┮",lineDownLeftBoldRight:"┭",lineDownDoubleLeftDoubleRightDouble:"╦",lineDownDoubleLeftRight:"╥",lineDownLeftDoubleRightDouble:"╤",lineUpLeftRight:"┴",lineUpBoldLeftBoldRightBold:"┻",lineUpLeftBoldRightBold:"┷",lineUpBoldLeftRight:"┸",lineUpBoldLeftBoldRight:"┹",lineUpBoldLeftRightBold:"┺",lineUpLeftRightBold:"┶",lineUpLeftBoldRight:"┵",lineUpDoubleLeftDoubleRightDouble:"╩",lineUpDoubleLeftRight:"╨",lineUpLeftDoubleRightDouble:"╧",lineUpDownLeftRight:"┼",lineUpBoldDownBoldLeftBoldRightBold:"╋",lineUpDownBoldLeftBoldRightBold:"╈",lineUpBoldDownLeftBoldRightBold:"╇",lineUpBoldDownBoldLeftRightBold:"╊",lineUpBoldDownBoldLeftBoldRight:"╉",lineUpBoldDownLeftRight:"╀",lineUpDownBoldLeftRight:"╁",lineUpDownLeftBoldRight:"┽",lineUpDownLeftRightBold:"┾",lineUpBoldDownBoldLeftRight:"╂",lineUpDownLeftBoldRightBold:"┿",lineUpBoldDownLeftBoldRight:"╃",lineUpBoldDownLeftRightBold:"╄",lineUpDownBoldLeftBoldRight:"╅",lineUpDownBoldLeftRightBold:"╆",lineUpDoubleDownDoubleLeftDoubleRightDouble:"╬",lineUpDoubleDownDoubleLeftRight:"╫",lineUpDownLeftDoubleRightDouble:"╪",lineCross:"╳",lineBackslash:"╲",lineSlash:"╱"},lp1={tick:"✔",info:"ℹ",warning:"⚠",cross:"✘",squareSmall:"◻",squareSmallFilled:"◼",circle:"◯",circleFilled:"◉",circleDotted:"◌",circleDouble:"◎",circleCircle:"ⓞ",circleCross:"ⓧ",circlePipe:"Ⓘ",radioOn:"◉",radioOff:"◯",checkboxOn:"☒",checkboxOff:"☐",checkboxCircleOn:"ⓧ",checkboxCircleOff:"Ⓘ",pointer:"❯",triangleUpOutline:"△",triangleLeft:"◀",triangleRight:"▶",lozenge:"◆",lozengeOutline:"◇",hamburger:"☰",smiley:"㋡",mustache:"෴",star:"★",play:"▶",nodejs:"⬢",oneSeventh:"⅐",oneNinth:"⅑",oneTenth:"⅒"},fF4={tick:"√",info:"i",warning:"‼",cross:"×",squareSmall:"□",squareSmallFilled:"■",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(○)",circleCross:"(×)",circlePipe:"(│)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[×]",checkboxOff:"[ ]",checkboxCircleOn:"(×)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"∆",triangleLeft:"◄",triangleRight:"►",lozenge:"♦",lozengeOutline:"◊",hamburger:"≡",smiley:"☺",mustache:"┌─┐",star:"✶",play:"►",nodejs:"♦",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},qF4={...mp1,...lp1},RF4={...mp1,...fF4},UF4=u91(),vF4=UF4?qF4:RF4,k5=vF4,tP9=Object.entries(lp1);var bp1={info:"blue",success:"green",error:"red",warning:"yellow"},EF4={styles:{container:({variant:I})=>({flexGrow:1,borderStyle:"round",borderColor:bp1[I],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:I})=>({color:bp1[I]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:I}){let d;if(I==="info")d=k5.info;if(I==="success")d=k5.tick;if(I==="error")d=k5.cross;if(I==="warning")d=k5.warning;return{icon:d}}},hp1=EF4;var MF4={styles:{container:({color:I})=>({backgroundColor:I}),label:()=>({color:"black"})}},jp1=MF4;var SF4={styles:{input:({isFocused:I})=>({dimColor:!I})}},kp1=SF4;var LF4={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:I})=>({gap:1,paddingLeft:I?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:I,isSelected:d}){let G;if(d)G="green";if(I)G="blue";return{color:G}},highlightedText:()=>({bold:!0})}},xp1=LF4;var yF4={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},cp1=yF4;var PF4={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:k5.square,remainingCharacter:k5.squareLightShade})},pp1=PF4;var $F4={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:I})=>({gap:1,paddingLeft:I?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:I,isSelected:d}){let G;if(d)G="green";if(I)G="blue";return{color:G}},highlightedText:()=>({bold:!0})}},ip1=$F4;var uF4={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},np1=uF4;var TF4={success:"green",error:"red",warning:"yellow",info:"blue"},OF4={success:k5.tick,error:k5.cross,warning:k5.warning,info:k5.info},mF4={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:I})=>({color:TF4[I]}),message:()=>({})},config:({variant:I})=>({icon:OF4[I]})},rp1=mF4;var lF4={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:k5.line})},ap1=lF4;var bF4={styles:{value:()=>({})}},sp1=bF4;var hF4={styles:{value:()=>({})}},op1=hF4;var jF4={styles:{value:()=>({})}},ep1=jF4;var xF4={components:{Alert:hp1,Badge:jp1,ConfirmInput:kp1,MultiSelect:xp1,OrderedList:cp1,ProgressBar:pp1,Select:ip1,Spinner:np1,StatusMessage:rp1,UnorderedList:ap1,TextInput:sp1,EmailInput:op1,PasswordInput:ep1}},cF4=kM.createContext(xF4);var Q9=(I)=>{return kM.useContext(cF4).components[I]};var iF4=J1(u1(),1);var dV=J1(u1(),1);var FQ=J1(u1(),1);var tp1=J1(u1(),1);var xM=k5.line;var Ck=tp1.createContext({marker:xM});function Ii1({children:I}){let{marker:d}=FQ.useContext(Ck),{styles:G}=Q9("UnorderedList");return FQ.default.createElement(p,{...G.listItem()},FQ.default.createElement(u,{...G.marker()},d),FQ.default.createElement(p,{...G.content()},I))}var di1=J1(u1(),1),T91=di1.createContext({depth:0});function nF4({children:I}){let{depth:d}=dV.useContext(T91),{styles:G,config:Z}=Q9("UnorderedList"),C=dV.useMemo(()=>({depth:d+1}),[d]),W=dV.useMemo(()=>{let{marker:w}=Z();if(typeof w==="string")return{marker:w};if(Array.isArray(w))return{marker:w[d]??w.at(-1)??xM};return{marker:xM}},[Z,d]);return dV.default.createElement(T91.Provider,{value:C},dV.default.createElement(Ck.Provider,{value:W},dV.default.createElement(p,{...G.list()},I)))}nF4.Item=Ii1;var aF4=J1(u1(),1);var rF4=J1(u1(),1);var pM=J1(u1(),1);class cM extends Map{first;constructor(I){let d=[],G,Z,C=0;for(let W of I){let w={...W,previous:Z,next:void 0,index:C};if(Z)Z.next=w;G||=w,d.push([W.value,w]),C++,Z=w}super(d);this.first=G}}var Gi1=J1(u1(),1);var gQ=J1(u1(),1);var iM=J1(u1(),1);function Zi1({isFocused:I,isSelected:d,children:G}){let{styles:Z}=Q9("Select");return iM.default.createElement(p,{...Z.option({isFocused:I})},I&&iM.default.createElement(u,{...Z.focusIndicator()},k5.pointer),iM.default.createElement(u,{...Z.label({isFocused:I,isSelected:d})},G),d&&iM.default.createElement(u,{...Z.selectedIndicator()},k5.tick))}var BZ=J1(u1(),1);import{isDeepStrictEqual as sF4}from"node:util";var oF4=(I,d)=>{switch(d.type){case"focus-next-option":{if(!I.focusedValue)return I;let G=I.optionMap.get(I.focusedValue);if(!G)return I;let Z=G.next;if(!Z)return I;if(!(Z.index>=I.visibleToIndex))return{...I,focusedValue:Z.value};let W=Math.min(I.optionMap.size,I.visibleToIndex+1),w=W-I.visibleOptionCount;return{...I,focusedValue:Z.value,visibleFromIndex:w,visibleToIndex:W}}case"focus-previous-option":{if(!I.focusedValue)return I;let G=I.optionMap.get(I.focusedValue);if(!G)return I;let Z=G.previous;if(!Z)return I;if(!(Z.index<=I.visibleFromIndex))return{...I,focusedValue:Z.value};let W=Math.max(0,I.visibleFromIndex-1),w=W+I.visibleOptionCount;return{...I,focusedValue:Z.value,visibleFromIndex:W,visibleToIndex:w}}case"select-focused-option":return{...I,previousValue:I.value,value:I.focusedValue};case"reset":return d.state}},Ci1=({visibleOptionCount:I,defaultValue:d,options:G})=>{let Z=typeof I==="number"?Math.min(I,G.length):G.length,C=new cM(G);return{optionMap:C,visibleOptionCount:Z,focusedValue:C.first?.value,visibleFromIndex:0,visibleToIndex:Z,previousValue:d,value:d}},Wi1=({visibleOptionCount:I=5,options:d,defaultValue:G,onChange:Z})=>{let[C,W]=BZ.useReducer(oF4,{visibleOptionCount:I,defaultValue:G,options:d},Ci1),[w,B]=BZ.useState(d);if(d!==w&&!sF4(d,w))W({type:"reset",state:Ci1({visibleOptionCount:I,defaultValue:G,options:d})}),B(d);let A=BZ.useCallback(()=>{W({type:"focus-next-option"})},[]),V=BZ.useCallback(()=>{W({type:"focus-previous-option"})},[]),X=BZ.useCallback(()=>{W({type:"select-focused-option"})},[]),_=BZ.useMemo(()=>{return d.map((F,g)=>({...F,index:g})).slice(C.visibleFromIndex,C.visibleToIndex)},[d,C.visibleFromIndex,C.visibleToIndex]);return BZ.useEffect(()=>{if(C.value&&C.previousValue!==C.value)Z?.(C.value)},[C.previousValue,C.value,d,Z]),{focusedValue:C.focusedValue,visibleFromIndex:C.visibleFromIndex,visibleToIndex:C.visibleToIndex,value:C.value,visibleOptions:_,focusNextOption:A,focusPreviousOption:V,selectFocusedOption:X}};var wi1=({isDisabled:I=!1,state:d})=>{C4((G,Z)=>{if(Z.downArrow)d.focusNextOption();if(Z.upArrow)d.focusPreviousOption();if(Z.return)d.selectFocusedOption()},{isActive:!I})};function Q6({isDisabled:I=!1,visibleOptionCount:d=5,highlightText:G,options:Z,defaultValue:C,onChange:W}){let w=Wi1({visibleOptionCount:d,options:Z,defaultValue:C,onChange:W});wi1({isDisabled:I,state:w});let{styles:B}=Q9("Select");return gQ.default.createElement(p,{...B.container()},w.visibleOptions.map((A)=>{let V=A.label;if(G&&A.label.includes(G)){let X=A.label.indexOf(G);V=gQ.default.createElement(gQ.default.Fragment,null,A.label.slice(0,X),gQ.default.createElement(u,{...B.highlightedText()},G),A.label.slice(X+G.length))}return gQ.default.createElement(Zi1,{key:A.value,isFocused:!I&&w.focusedValue===A.value,isSelected:w.value===A.value},V)}))}var eF4=J1(u1(),1);var Bi1=J1(u1(),1);var Ig4=J1(u1(),1);var Wk=J1(u1(),1);var tF4=J1(u1(),1);var ZT9=c0.inverse(" ");var LC=J1(u1(),1);var JQ=J1(u1(),1);var Ai1=J1(u1(),1);var wk=Ai1.createContext({marker:k5.line});function Bk({children:I}){let{marker:d}=JQ.useContext(wk),{styles:G}=Q9("OrderedList");return JQ.default.createElement(p,{...G.listItem()},JQ.default.createElement(u,{...G.marker()},d),JQ.default.createElement(p,{...G.content()},I))}var Vi1=J1(u1(),1),O91=Vi1.createContext({marker:""});function b8({children:I}){let{marker:d}=LC.useContext(O91),{styles:G}=Q9("OrderedList"),Z=0;for(let W of LC.default.Children.toArray(I)){if(!LC.isValidElement(W)||W.type!==Bk)continue;Z++}let C=String(Z).length;return LC.default.createElement(p,{...G.list()},LC.default.Children.map(I,(W,w)=>{if(!LC.isValidElement(W)||W.type!==Bk)return W;let B=`${String(w+1).padStart(C)}.`,A=`${d}${B}`;return LC.default.createElement(O91.Provider,{value:{marker:A}},LC.default.createElement(wk.Provider,{value:{marker:A}},W))}))}b8.Item=Bk;var Gg4=J1(u1(),1);var m91=J1(u1(),1);var dg4=J1(u1(),1);var PT9=c0.inverse(" ");var Zg4=J1(u1(),1);var Cg4=J1(u1(),1);var wg4=J1(u1(),1);var Ak=J1(u1(),1);var Wg4=J1(u1(),1);var GO9=c0.inverse(" ");import{existsSync as gb4}from"fs";import{join as Jb4}from"path";import{homedir as Kb4}from"os";import{EOL as KQ,platform as l91,homedir as Yg4}from"os";var Bg4={bashBorder:"#ff0087",claude:"#D97757",permission:"#5769f7",secondaryBorder:"#999",text:"#000",secondaryText:"#666",suggestion:"#5769f7",success:"#2c7a39",error:"#ab2b3f",warning:"#966c1e",diff:{added:"#69db7c",removed:"#ffa8b4",addedDimmed:"#c7e1cb",removedDimmed:"#fdd2d8"}},Ag4={bashBorder:"#0066cc",claude:"#ff9933",permission:"#3366ff",secondaryBorder:"#999",text:"#000",secondaryText:"#666",suggestion:"#3366ff",success:"#006699",error:"#cc0000",warning:"#ff9900",diff:{added:"#99ccff",removed:"#ffcccc",addedDimmed:"#d1e7fd",removedDimmed:"#ffe9e9"}},Vg4={bashBorder:"#fd5db1",claude:"#D97757",permission:"#b1b9f9",secondaryBorder:"#888",text:"#fff",secondaryText:"#999",suggestion:"#b1b9f9",success:"#4eba65",error:"#ff6b80",warning:"#ffc107",diff:{added:"#225c2b",removed:"#7a2936",addedDimmed:"#47584a",removedDimmed:"#69484d"}},Xg4={bashBorder:"#3399ff",claude:"#ff9933",permission:"#99ccff",secondaryBorder:"#888",text:"#fff",secondaryText:"#999",suggestion:"#99ccff",success:"#3399ff",error:"#ff6666",warning:"#ffcc00",diff:{added:"#004466",removed:"#660000",addedDimmed:"#3e515b",removedDimmed:"#3e2c2c"}};function r1(I){let d=q2();switch(I??d.theme){case"light":return Bg4;case"light-daltonized":return Ag4;case"dark-daltonized":return Xg4;default:return Vg4}}import{readFileSync as _g4,writeFileSync as Dg4}from"fs";import{join as Vk}from"path";var Hg4={type:"local",name:"terminal-setup",userFacingName(){return"terminal-setup"},description:"Install Shift+Enter key binding for newlines (iTerm2 and VSCode only)",isEnabled:l91()==="darwin"&&K2.terminal==="iTerm.app"||K2.terminal==="vscode",isHidden:!1,async call(){let I="";switch(K2.terminal){case"iTerm.app":I=await Fg4();break;case"vscode":I=gg4();break}let d=q2();return d.shiftEnterKeyBindingInstalled=!0,p4(d),zQ(),I}};function Xi1(){return q2().shiftEnterKeyBindingInstalled===!0}var NQ=Hg4;async function Fg4(){let{code:I}=await E5("defaults",["write","com.googlecode.iterm2","GlobalKeyMap","-dict-add","0xd-0x20000-0x24",` + Text + \\n + Action + 12 + Version + 1 + Keycode + 13 + Modifiers + 131072 + `]);if(I!==0)throw new Error("Failed to install iTerm2 Shift+Enter key binding");return`${c0.hex(r1().success)("Installed iTerm2 Shift+Enter key binding")}${KQ}${c0.dim("See iTerm2 → Preferences → Keys")}${KQ}`}function gg4(){let I=Vk(Yg4(),l91()==="win32"?Vk("AppData","Roaming","Code","User"):l91()==="darwin"?Vk("Library","Application Support","Code","User"):Vk(".config","Code","User"),"keybindings.json");try{let d=_g4(I,"utf-8"),G=tG(d)??[];if(G.find((C)=>C.key==="shift+enter"&&C.command==="workbench.action.terminal.sendSequence"&&C.when==="terminalFocus"))return`${c0.hex(r1().warning)("Found existing VSCode terminal Shift+Enter key binding. Remove it to continue.")}${KQ}${c0.dim(`See ${I}`)}${KQ}`;return G.push({key:"shift+enter",command:"workbench.action.terminal.sendSequence",args:{text:`\\\r +`},when:"terminalFocus"}),Dg4(I,JSON.stringify(G,null,4),"utf-8"),`${c0.hex(r1().success)("Installed VSCode terminal Shift+Enter key binding")}${KQ}${c0.dim(`See ${I}`)}${KQ}`}catch(d){throw X0(d),new Error("Failed to install VSCode terminal Shift+Enter key binding")}}var Xk={"0.1.178":["New release notes now show you what's changed since you last launched"]};var O40=J1(Fk(),1);import{readFileSync as Cb4,writeFileSync as Wb4,openSync as R40,readSync as U40,closeSync as v40,existsSync as wb4,readdirSync as Bb4,opendirSync as Ab4}from"fs";import{isAbsolute as E40,normalize as N40,resolve as SS,resolve as z40,relative as Vb4,sep as Nx,basename as Q40,dirname as Xb4,extname as f40,join as Yb4}from"path";var Oi1=J1(Mi1(),1);var oM=(I)=>{if(typeof I!=="string")throw new TypeError("invalid pattern");if(I.length>65536)throw new TypeError("pattern is too long")};var BJ4={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},eM=(I)=>I.replace(/[[\]\\-]/g,"\\$&"),AJ4=(I)=>I.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Si1=(I)=>I.join(""),Li1=(I,d)=>{let G=d;if(I.charAt(G)!=="[")throw new Error("not in a brace expression");let Z=[],C=[],W=G+1,w=!1,B=!1,A=!1,V=!1,X=G,_="";I:while(W_)Z.push(eM(_)+"-"+eM(K));else if(K===_)Z.push(eM(K));_="",W++;continue}if(I.startsWith("-]",W+1)){Z.push(eM(K+"-")),W+=2;continue}if(I.startsWith("-",W+1)){_=K,W+=2;continue}Z.push(eM(K)),W++}if(X{return d?I.replace(/\[([^\/\\])\]/g,"$1"):I.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1")};var VJ4=new Set(["!","?","+","*","@"]),yi1=(I)=>VJ4.has(I),XJ4="(?!(?:^|/)\\.\\.?(?:$|/))",gk="(?!\\.)",YJ4=new Set(["[","."]),_J4=new Set(["..","."]),DJ4=new Set("().*{}+?[]^$\\!"),HJ4=(I)=>I.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),r91="[^/]",Pi1=r91+"*?",$i1=r91+"+?";class h8{type;#I;#d;#W=!1;#Z=[];#w;#z;#V;#Y=!1;#B;#A;#C=!1;constructor(I,d,G={}){if(this.type=I,I)this.#d=!0;if(this.#w=d,this.#I=this.#w?this.#w.#I:this,this.#B=this.#I===this?G:this.#I.#B,this.#V=this.#I===this?[]:this.#I.#V,I==="!"&&!this.#I.#Y)this.#V.push(this);this.#z=this.#w?this.#w.#Z.length:0}get hasMagic(){if(this.#d!==void 0)return this.#d;for(let I of this.#Z){if(typeof I==="string")continue;if(I.type||I.hasMagic)return this.#d=!0}return this.#d}toString(){if(this.#A!==void 0)return this.#A;if(!this.type)return this.#A=this.#Z.map((I)=>String(I)).join("");else return this.#A=this.type+"("+this.#Z.map((I)=>String(I)).join("|")+")"}#g(){if(this!==this.#I)throw new Error("should only call on root");if(this.#Y)return this;this.toString(),this.#Y=!0;let I;while(I=this.#V.pop()){if(I.type!=="!")continue;let d=I,G=d.#w;while(G){for(let Z=d.#z+1;!G.type&&Ztypeof d==="string"?d:d.toJSON()):[this.type,...this.#Z.map((d)=>d.toJSON())];if(this.isStart()&&!this.type)I.unshift([]);if(this.isEnd()&&(this===this.#I||this.#I.#Y&&this.#w?.type==="!"))I.push({});return I}isStart(){if(this.#I===this)return!0;if(!this.#w?.isStart())return!1;if(this.#z===0)return!0;let I=this.#w;for(let d=0;d{let[g,J,K,Q]=typeof F==="string"?h8.#_(F,this.#d,B):F.toRegExpSource(I);return this.#d=this.#d||K,this.#W=this.#W||Q,g}).join(""),V="";if(this.isStart()){if(typeof this.#Z[0]==="string"){if(!(this.#Z.length===1&&_J4.has(this.#Z[0]))){let g=YJ4,J=d&&g.has(A.charAt(0))||A.startsWith("\\.")&&g.has(A.charAt(2))||A.startsWith("\\.\\.")&&g.has(A.charAt(4)),K=!d&&!I&&g.has(A.charAt(0));V=J?XJ4:K?gk:""}}}let X="";if(this.isEnd()&&this.#I.#Y&&this.#w?.type==="!")X="(?:$|\\/)";return[V+A+X,yC(A),this.#d=!!this.#d,this.#W]}let G=this.type==="*"||this.type==="+",Z=this.type==="!"?"(?:(?!(?:":"(?:",C=this.#D(d);if(this.isStart()&&this.isEnd()&&!C&&this.type!=="!"){let B=this.toString();return this.#Z=[B],this.type=null,this.#d=void 0,[B,yC(this.toString()),!1,!1]}let W=!G||I||d||!gk?"":this.#D(!0);if(W===C)W="";if(W)C=`(?:${C})(?:${W})*?`;let w="";if(this.type==="!"&&this.#C)w=(this.isStart()&&!d?gk:"")+$i1;else{let B=this.type==="!"?"))"+(this.isStart()&&!d&&!I?gk:"")+Pi1+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&W?")":this.type==="*"&&W?")?":`)${this.type}`;w=Z+C+B}return[w,yC(C),this.#d=!!this.#d,this.#W]}#D(I){return this.#Z.map((d)=>{if(typeof d==="string")throw new Error("string type in extglob ast??");let[G,Z,C,W]=d.toRegExpSource(I);return this.#W=this.#W||W,G}).filter((d)=>!(this.isStart()&&this.isEnd())||!!d).join("|")}static#_(I,d,G=!1){let Z=!1,C="",W=!1;for(let w=0;w{return d?I.replace(/[?*()[\]]/g,"[$&]"):I.replace(/[?*()[\]\\]/g,"\\$&")};var ZI=(I,d,G={})=>{if(oM(d),!G.nocomment&&d.charAt(0)==="#")return!1;return new XZ(d,G).match(I)},FJ4=/^\*+([^+@!?\*\[\(]*)$/,gJ4=(I)=>(d)=>!d.startsWith(".")&&d.endsWith(I),JJ4=(I)=>(d)=>d.endsWith(I),KJ4=(I)=>{return I=I.toLowerCase(),(d)=>!d.startsWith(".")&&d.toLowerCase().endsWith(I)},NJ4=(I)=>{return I=I.toLowerCase(),(d)=>d.toLowerCase().endsWith(I)},zJ4=/^\*+\.\*+$/,QJ4=(I)=>!I.startsWith(".")&&I.includes("."),fJ4=(I)=>I!=="."&&I!==".."&&I.includes("."),qJ4=/^\.\*+$/,RJ4=(I)=>I!=="."&&I!==".."&&I.startsWith("."),UJ4=/^\*+$/,vJ4=(I)=>I.length!==0&&!I.startsWith("."),EJ4=(I)=>I.length!==0&&I!=="."&&I!=="..",MJ4=/^\?+([^+@!?\*\[\(]*)?$/,SJ4=([I,d=""])=>{let G=mi1([I]);if(!d)return G;return d=d.toLowerCase(),(Z)=>G(Z)&&Z.toLowerCase().endsWith(d)},LJ4=([I,d=""])=>{let G=li1([I]);if(!d)return G;return d=d.toLowerCase(),(Z)=>G(Z)&&Z.toLowerCase().endsWith(d)},yJ4=([I,d=""])=>{let G=li1([I]);return!d?G:(Z)=>G(Z)&&Z.endsWith(d)},PJ4=([I,d=""])=>{let G=mi1([I]);return!d?G:(Z)=>G(Z)&&Z.endsWith(d)},mi1=([I])=>{let d=I.length;return(G)=>G.length===d&&!G.startsWith(".")},li1=([I])=>{let d=I.length;return(G)=>G.length===d&&G!=="."&&G!==".."},bi1=typeof process==="object"&&process?typeof process.env==="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",ui1={win32:{sep:"\\"},posix:{sep:"/"}},$J4=bi1==="win32"?ui1.win32.sep:ui1.posix.sep;ZI.sep=$J4;var j8=Symbol("globstar **");ZI.GLOBSTAR=j8;var uJ4="[^/]",TJ4=uJ4+"*?",OJ4="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",mJ4="(?:(?!(?:\\/|^)\\.).)*?",lJ4=(I,d={})=>(G)=>ZI(G,I,d);ZI.filter=lJ4;var VZ=(I,d={})=>Object.assign({},I,d),bJ4=(I)=>{if(!I||typeof I!=="object"||!Object.keys(I).length)return ZI;let d=ZI;return Object.assign((Z,C,W={})=>d(Z,C,VZ(I,W)),{Minimatch:class Z extends d.Minimatch{constructor(C,W={}){super(C,VZ(I,W))}static defaults(C){return d.defaults(VZ(I,C)).Minimatch}},AST:class Z extends d.AST{constructor(C,W,w={}){super(C,W,VZ(I,w))}static fromGlob(C,W={}){return d.AST.fromGlob(C,VZ(I,W))}},unescape:(Z,C={})=>d.unescape(Z,VZ(I,C)),escape:(Z,C={})=>d.escape(Z,VZ(I,C)),filter:(Z,C={})=>d.filter(Z,VZ(I,C)),defaults:(Z)=>d.defaults(VZ(I,Z)),makeRe:(Z,C={})=>d.makeRe(Z,VZ(I,C)),braceExpand:(Z,C={})=>d.braceExpand(Z,VZ(I,C)),match:(Z,C,W={})=>d.match(Z,C,VZ(I,W)),sep:d.sep,GLOBSTAR:j8})};ZI.defaults=bJ4;var hi1=(I,d={})=>{if(oM(I),d.nobrace||!/\{(?:(?!\{).)*\}/.test(I))return[I];return Oi1.default(I)};ZI.braceExpand=hi1;var hJ4=(I,d={})=>new XZ(I,d).makeRe();ZI.makeRe=hJ4;var jJ4=(I,d,G={})=>{let Z=new XZ(d,G);if(I=I.filter((C)=>Z.match(C)),Z.options.nonull&&!I.length)I.push(d);return I};ZI.match=jJ4;var Ti1=/[?*]|[+@!]\(.*?\)|\[|\]/,kJ4=(I)=>I.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class XZ{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(I,d={}){if(oM(I),d=d||{},this.options=d,this.pattern=I,this.platform=d.platform||bi1,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!d.windowsPathsNoEscape||d.allowWindowsEscape===!1,this.windowsPathsNoEscape)this.pattern=this.pattern.replace(/\\/g,"/");this.preserveMultipleSlashes=!!d.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!d.nonegate,this.comment=!1,this.empty=!1,this.partial=!!d.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=d.windowsNoMagicRoot!==void 0?d.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let I of this.set)for(let d of I)if(typeof d!=="string")return!0;return!1}debug(...I){}make(){let I=this.pattern,d=this.options;if(!d.nocomment&&I.charAt(0)==="#"){this.comment=!0;return}if(!I){this.empty=!0;return}if(this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],d.debug)this.debug=(...C)=>console.error(...C);this.debug(this.pattern,this.globSet);let G=this.globSet.map((C)=>this.slashSplit(C));this.globParts=this.preprocess(G),this.debug(this.pattern,this.globParts);let Z=this.globParts.map((C,W,w)=>{if(this.isWindows&&this.windowsNoMagicRoot){let B=C[0]===""&&C[1]===""&&(C[2]==="?"||!Ti1.test(C[2]))&&!Ti1.test(C[3]),A=/^[a-z]:/i.test(C[0]);if(B)return[...C.slice(0,4),...C.slice(4).map((V)=>this.parse(V))];else if(A)return[C[0],...C.slice(1).map((V)=>this.parse(V))]}return C.map((B)=>this.parse(B))});if(this.debug(this.pattern,Z),this.set=Z.filter((C)=>C.indexOf(!1)===-1),this.isWindows)for(let C=0;C=2)I=this.firstPhasePreProcess(I),I=this.secondPhasePreProcess(I);else if(d>=1)I=this.levelOneOptimize(I);else I=this.adjascentGlobstarOptimize(I);return I}adjascentGlobstarOptimize(I){return I.map((d)=>{let G=-1;while((G=d.indexOf("**",G+1))!==-1){let Z=G;while(d[Z+1]==="**")Z++;if(Z!==G)d.splice(G,Z-G)}return d})}levelOneOptimize(I){return I.map((d)=>{return d=d.reduce((G,Z)=>{let C=G[G.length-1];if(Z==="**"&&C==="**")return G;if(Z===".."){if(C&&C!==".."&&C!=="."&&C!=="**")return G.pop(),G}return G.push(Z),G},[]),d.length===0?[""]:d})}levelTwoFileOptimize(I){if(!Array.isArray(I))I=this.slashSplit(I);let d=!1;do{if(d=!1,!this.preserveMultipleSlashes){for(let Z=1;ZZ)G.splice(Z+1,W-Z);let w=G[Z+1],B=G[Z+2],A=G[Z+3];if(w!=="..")continue;if(!B||B==="."||B===".."||!A||A==="."||A==="..")continue;d=!0,G.splice(Z,1);let V=G.slice(0);V[Z]="**",I.push(V),Z--}if(!this.preserveMultipleSlashes){for(let W=1;Wd.length)}partsMatch(I,d,G=!1){let Z=0,C=0,W=[],w="";while(ZS)d=d.slice(P);else if(S>P)I=I.slice(S)}}}let{optimizationLevel:C=1}=this.options;if(C>=2)I=this.levelTwoFileOptimize(I);this.debug("matchOne",this,{file:I,pattern:d}),this.debug("matchOne",I.length,d.length);for(var W=0,w=0,B=I.length,A=d.length;W>> no match, partial?`,I,_,d,F),_===B)return!0}return!1}let J;if(typeof V==="string")J=X===V,this.debug("string match",V,X,J);else J=V.test(X),this.debug("pattern match",V,X,J);if(!J)return!1}if(W===B&&w===A)return!0;else if(W===B)return G;else if(w===A)return W===B-1&&I[W]==="";else throw new Error("wtf?")}braceExpand(){return hi1(this.pattern,this.options)}parse(I){oM(I);let d=this.options;if(I==="**")return j8;if(I==="")return"";let G,Z=null;if(G=I.match(UJ4))Z=d.dot?EJ4:vJ4;else if(G=I.match(FJ4))Z=(d.nocase?d.dot?NJ4:KJ4:d.dot?JJ4:gJ4)(G[1]);else if(G=I.match(MJ4))Z=(d.nocase?d.dot?LJ4:SJ4:d.dot?yJ4:PJ4)(G);else if(G=I.match(zJ4))Z=d.dot?fJ4:QJ4;else if(G=I.match(qJ4))Z=RJ4;let C=h8.fromGlob(I,this.options).toMMPattern();if(Z&&typeof C==="object")Reflect.defineProperty(C,"test",{value:Z});return C}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let I=this.set;if(!I.length)return this.regexp=!1,this.regexp;let d=this.options,G=d.noglobstar?TJ4:d.dot?OJ4:mJ4,Z=new Set(d.nocase?["i"]:[]),C=I.map((B)=>{let A=B.map((V)=>{if(V instanceof RegExp)for(let X of V.flags.split(""))Z.add(X);return typeof V==="string"?kJ4(V):V===j8?j8:V._src});return A.forEach((V,X)=>{let _=A[X+1],F=A[X-1];if(V!==j8||F===j8)return;if(F===void 0)if(_!==void 0&&_!==j8)A[X+1]="(?:\\/|"+G+"\\/)?"+_;else A[X]=G;else if(_===void 0)A[X-1]=F+"(?:\\/|"+G+")?";else if(_!==j8)A[X-1]=F+"(?:\\/|\\/"+G+"\\/)"+_,A[X+1]=j8}),A.filter((V)=>V!==j8).join("/")}).join("|"),[W,w]=I.length>1?["(?:",")"]:["",""];if(C="^"+W+C+w+"$",this.negate)C="^(?!"+C+").+$";try{this.regexp=new RegExp(C,[...Z].join(""))}catch(B){this.regexp=!1}return this.regexp}slashSplit(I){if(this.preserveMultipleSlashes)return I.split("/");else if(this.isWindows&&/^\/\/[^\/]+/.test(I))return["",...I.split(/\/+/)];else return I.split(/\/+/)}match(I,d=this.partial){if(this.debug("match",I,this.pattern),this.comment)return!1;if(this.empty)return I==="";if(I==="/"&&d)return!0;let G=this.options;if(this.isWindows)I=I.split("\\").join("/");let Z=this.slashSplit(I);this.debug(this.pattern,"split",Z);let C=this.set;this.debug(this.pattern,"set",C);let W=Z[Z.length-1];if(!W)for(let w=Z.length-2;!W&&w>=0;w--)W=Z[w];for(let w=0;w{typeof a91.emitWarning==="function"?a91.emitWarning(I,d,G,Z):console.error(`[${G}] ${d}: ${I}`)},Jk=globalThis.AbortController,ji1=globalThis.AbortSignal;if(typeof Jk==="undefined"){ji1=class G{onabort;_onabort=[];reason;aborted=!1;addEventListener(Z,C){this._onabort.push(C)}},Jk=class G{constructor(){d()}signal=new ji1;abort(Z){if(this.signal.aborted)return;this.signal.reason=Z,this.signal.aborted=!0;for(let C of this.signal._onabort)C(Z);this.signal.onabort?.(Z)}};let I=a91.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",d=()=>{if(!I)return;I=!1,xi1("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",d)}}var xJ4=(I)=>!ki1.has(I),Bm9=Symbol("type"),iY=(I)=>I&&I===Math.floor(I)&&I>0&&isFinite(I),ci1=(I)=>!iY(I)?null:I<=Math.pow(2,8)?Uint8Array:I<=Math.pow(2,16)?Uint16Array:I<=Math.pow(2,32)?Uint32Array:I<=Number.MAX_SAFE_INTEGER?tM:null;class tM extends Array{constructor(I){super(I);this.fill(0)}}class UQ{heap;length;static#I=!1;static create(I){let d=ci1(I);if(!d)return[];UQ.#I=!0;let G=new UQ(I,d);return UQ.#I=!1,G}constructor(I,d){if(!UQ.#I)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new d(I),this.length=0}push(I){this.heap[this.length++]=I}pop(){return this.heap[--this.length]}}class ZV{#I;#d;#W;#Z;#w;#z;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#V;#Y;#B;#A;#C;#g;#J;#D;#_;#q;#F;#R;#U;#N;#Q;#f;#H;static unsafeExposeInternals(I){return{starts:I.#U,ttls:I.#N,sizes:I.#R,keyMap:I.#B,keyList:I.#A,valList:I.#C,next:I.#g,prev:I.#J,get head(){return I.#D},get tail(){return I.#_},free:I.#q,isBackgroundFetch:(d)=>I.#X(d),backgroundFetch:(d,G,Z,C)=>I.#l(d,G,Z,C),moveToTail:(d)=>I.#h(d),indexes:(d)=>I.#E(d),rindexes:(d)=>I.#M(d),isStale:(d)=>I.#K(d)}}get max(){return this.#I}get maxSize(){return this.#d}get calculatedSize(){return this.#Y}get size(){return this.#V}get fetchMethod(){return this.#w}get memoMethod(){return this.#z}get dispose(){return this.#W}get disposeAfter(){return this.#Z}constructor(I){let{max:d=0,ttl:G,ttlResolution:Z=1,ttlAutopurge:C,updateAgeOnGet:W,updateAgeOnHas:w,allowStale:B,dispose:A,disposeAfter:V,noDisposeOnSet:X,noUpdateTTL:_,maxSize:F=0,maxEntrySize:g=0,sizeCalculation:J,fetchMethod:K,memoMethod:Q,noDeleteOnFetchRejection:E,noDeleteOnStaleGet:S,allowStaleOnFetchRejection:P,allowStaleOnFetchAbort:$,ignoreFetchAbort:h}=I;if(d!==0&&!iY(d))throw new TypeError("max option must be a nonnegative integer");let O=d?ci1(d):Array;if(!O)throw new Error("invalid max value: "+d);if(this.#I=d,this.#d=F,this.maxEntrySize=g||this.#d,this.sizeCalculation=J,this.sizeCalculation){if(!this.#d&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!=="function")throw new TypeError("sizeCalculation set to non-function")}if(Q!==void 0&&typeof Q!=="function")throw new TypeError("memoMethod must be a function if defined");if(this.#z=Q,K!==void 0&&typeof K!=="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#w=K,this.#f=!!K,this.#B=new Map,this.#A=new Array(d).fill(void 0),this.#C=new Array(d).fill(void 0),this.#g=new O(d),this.#J=new O(d),this.#D=0,this.#_=0,this.#q=UQ.create(d),this.#V=0,this.#Y=0,typeof A==="function")this.#W=A;if(typeof V==="function")this.#Z=V,this.#F=[];else this.#Z=void 0,this.#F=void 0;if(this.#Q=!!this.#W,this.#H=!!this.#Z,this.noDisposeOnSet=!!X,this.noUpdateTTL=!!_,this.noDeleteOnFetchRejection=!!E,this.allowStaleOnFetchRejection=!!P,this.allowStaleOnFetchAbort=!!$,this.ignoreFetchAbort=!!h,this.maxEntrySize!==0){if(this.#d!==0){if(!iY(this.#d))throw new TypeError("maxSize must be a positive integer if specified")}if(!iY(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#L()}if(this.allowStale=!!B,this.noDeleteOnStaleGet=!!S,this.updateAgeOnGet=!!W,this.updateAgeOnHas=!!w,this.ttlResolution=iY(Z)||Z===0?Z:1,this.ttlAutopurge=!!C,this.ttl=G||0,this.ttl){if(!iY(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#S()}if(this.#I===0&&this.ttl===0&&this.#d===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#I&&!this.#d){if(xJ4("LRU_CACHE_UNBOUNDED"))ki1.add("LRU_CACHE_UNBOUNDED"),xi1("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning","LRU_CACHE_UNBOUNDED",ZV)}}getRemainingTTL(I){return this.#B.has(I)?1/0:0}#S(){let I=new tM(this.#I),d=new tM(this.#I);this.#N=I,this.#U=d,this.#P=(C,W,w=RQ.now())=>{if(d[C]=W!==0?w:0,I[C]=W,W!==0&&this.ttlAutopurge){let B=setTimeout(()=>{if(this.#K(C))this.#y(this.#A[C],"expire")},W+1);if(B.unref)B.unref()}},this.#v=(C)=>{d[C]=I[C]!==0?RQ.now():0},this.#G=(C,W)=>{if(I[W]){let w=I[W],B=d[W];if(!w||!B)return;C.ttl=w,C.start=B,C.now=G||Z();let A=C.now-B;C.remainingTTL=w-A}};let G=0,Z=()=>{let C=RQ.now();if(this.ttlResolution>0){G=C;let W=setTimeout(()=>G=0,this.ttlResolution);if(W.unref)W.unref()}return C};this.getRemainingTTL=(C)=>{let W=this.#B.get(C);if(W===void 0)return 0;let w=I[W],B=d[W];if(!w||!B)return 1/0;let A=(G||Z())-B;return w-A},this.#K=(C)=>{let W=d[C],w=I[C];return!!w&&!!W&&(G||Z())-W>w}}#v=()=>{};#G=()=>{};#P=()=>{};#K=()=>!1;#L(){let I=new tM(this.#I);this.#Y=0,this.#R=I,this.#$=(d)=>{this.#Y-=I[d],I[d]=0},this.#T=(d,G,Z,C)=>{if(this.#X(G))return 0;if(!iY(Z))if(C){if(typeof C!=="function")throw new TypeError("sizeCalculation must be a function");if(Z=C(G,d),!iY(Z))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return Z},this.#u=(d,G,Z)=>{if(I[d]=G,this.#d){let C=this.#d-I[d];while(this.#Y>C)this.#m(!0)}if(this.#Y+=I[d],Z)Z.entrySize=G,Z.totalCalculatedSize=this.#Y}}#$=(I)=>{};#u=(I,d,G)=>{};#T=(I,d,G,Z)=>{if(G||Z)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#E({allowStale:I=this.allowStale}={}){if(this.#V)for(let d=this.#_;;){if(!this.#O(d))break;if(I||!this.#K(d))yield d;if(d===this.#D)break;else d=this.#J[d]}}*#M({allowStale:I=this.allowStale}={}){if(this.#V)for(let d=this.#D;;){if(!this.#O(d))break;if(I||!this.#K(d))yield d;if(d===this.#_)break;else d=this.#g[d]}}#O(I){return I!==void 0&&this.#B.get(this.#A[I])===I}*entries(){for(let I of this.#E())if(this.#C[I]!==void 0&&this.#A[I]!==void 0&&!this.#X(this.#C[I]))yield[this.#A[I],this.#C[I]]}*rentries(){for(let I of this.#M())if(this.#C[I]!==void 0&&this.#A[I]!==void 0&&!this.#X(this.#C[I]))yield[this.#A[I],this.#C[I]]}*keys(){for(let I of this.#E()){let d=this.#A[I];if(d!==void 0&&!this.#X(this.#C[I]))yield d}}*rkeys(){for(let I of this.#M()){let d=this.#A[I];if(d!==void 0&&!this.#X(this.#C[I]))yield d}}*values(){for(let I of this.#E())if(this.#C[I]!==void 0&&!this.#X(this.#C[I]))yield this.#C[I]}*rvalues(){for(let I of this.#M())if(this.#C[I]!==void 0&&!this.#X(this.#C[I]))yield this.#C[I]}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(I,d={}){for(let G of this.#E()){let Z=this.#C[G],C=this.#X(Z)?Z.__staleWhileFetching:Z;if(C===void 0)continue;if(I(C,this.#A[G],this))return this.get(this.#A[G],d)}}forEach(I,d=this){for(let G of this.#E()){let Z=this.#C[G],C=this.#X(Z)?Z.__staleWhileFetching:Z;if(C===void 0)continue;I.call(d,C,this.#A[G],this)}}rforEach(I,d=this){for(let G of this.#M()){let Z=this.#C[G],C=this.#X(Z)?Z.__staleWhileFetching:Z;if(C===void 0)continue;I.call(d,C,this.#A[G],this)}}purgeStale(){let I=!1;for(let d of this.#M({allowStale:!0}))if(this.#K(d))this.#y(this.#A[d],"expire"),I=!0;return I}info(I){let d=this.#B.get(I);if(d===void 0)return;let G=this.#C[d],Z=this.#X(G)?G.__staleWhileFetching:G;if(Z===void 0)return;let C={value:Z};if(this.#N&&this.#U){let W=this.#N[d],w=this.#U[d];if(W&&w){let B=W-(RQ.now()-w);C.ttl=B,C.start=Date.now()}}if(this.#R)C.size=this.#R[d];return C}dump(){let I=[];for(let d of this.#E({allowStale:!0})){let G=this.#A[d],Z=this.#C[d],C=this.#X(Z)?Z.__staleWhileFetching:Z;if(C===void 0||G===void 0)continue;let W={value:C};if(this.#N&&this.#U){W.ttl=this.#N[d];let w=RQ.now()-this.#U[d];W.start=Math.floor(Date.now()-w)}if(this.#R)W.size=this.#R[d];I.unshift([G,W])}return I}load(I){this.clear();for(let[d,G]of I){if(G.start){let Z=Date.now()-G.start;G.start=RQ.now()-Z}this.set(d,G.value,G)}}set(I,d,G={}){if(d===void 0)return this.delete(I),this;let{ttl:Z=this.ttl,start:C,noDisposeOnSet:W=this.noDisposeOnSet,sizeCalculation:w=this.sizeCalculation,status:B}=G,{noUpdateTTL:A=this.noUpdateTTL}=G,V=this.#T(I,d,G.size||0,w);if(this.maxEntrySize&&V>this.maxEntrySize){if(B)B.set="miss",B.maxEntrySizeExceeded=!0;return this.#y(I,"set"),this}let X=this.#V===0?void 0:this.#B.get(I);if(X===void 0){if(X=this.#V===0?this.#_:this.#q.length!==0?this.#q.pop():this.#V===this.#I?this.#m(!1):this.#V,this.#A[X]=I,this.#C[X]=d,this.#B.set(I,X),this.#g[this.#_]=X,this.#J[X]=this.#_,this.#_=X,this.#V++,this.#u(X,V,B),B)B.set="add";A=!1}else{this.#h(X);let _=this.#C[X];if(d!==_){if(this.#f&&this.#X(_)){_.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:F}=_;if(F!==void 0&&!W){if(this.#Q)this.#W?.(F,I,"set");if(this.#H)this.#F?.push([F,I,"set"])}}else if(!W){if(this.#Q)this.#W?.(_,I,"set");if(this.#H)this.#F?.push([_,I,"set"])}if(this.#$(X),this.#u(X,V,B),this.#C[X]=d,B){B.set="replace";let F=_&&this.#X(_)?_.__staleWhileFetching:_;if(F!==void 0)B.oldValue=F}}else if(B)B.set="update"}if(Z!==0&&!this.#N)this.#S();if(this.#N){if(!A)this.#P(X,Z,C);if(B)this.#G(B,X)}if(!W&&this.#H&&this.#F){let _=this.#F,F;while(F=_?.shift())this.#Z?.(...F)}return this}pop(){try{while(this.#V){let I=this.#C[this.#D];if(this.#m(!0),this.#X(I)){if(I.__staleWhileFetching)return I.__staleWhileFetching}else if(I!==void 0)return I}}finally{if(this.#H&&this.#F){let I=this.#F,d;while(d=I?.shift())this.#Z?.(...d)}}}#m(I){let d=this.#D,G=this.#A[d],Z=this.#C[d];if(this.#f&&this.#X(Z))Z.__abortController.abort(new Error("evicted"));else if(this.#Q||this.#H){if(this.#Q)this.#W?.(Z,G,"evict");if(this.#H)this.#F?.push([Z,G,"evict"])}if(this.#$(d),I)this.#A[d]=void 0,this.#C[d]=void 0,this.#q.push(d);if(this.#V===1)this.#D=this.#_=0,this.#q.length=0;else this.#D=this.#g[d];return this.#B.delete(G),this.#V--,d}has(I,d={}){let{updateAgeOnHas:G=this.updateAgeOnHas,status:Z}=d,C=this.#B.get(I);if(C!==void 0){let W=this.#C[C];if(this.#X(W)&&W.__staleWhileFetching===void 0)return!1;if(!this.#K(C)){if(G)this.#v(C);if(Z)Z.has="hit",this.#G(Z,C);return!0}else if(Z)Z.has="stale",this.#G(Z,C)}else if(Z)Z.has="miss";return!1}peek(I,d={}){let{allowStale:G=this.allowStale}=d,Z=this.#B.get(I);if(Z===void 0||!G&&this.#K(Z))return;let C=this.#C[Z];return this.#X(C)?C.__staleWhileFetching:C}#l(I,d,G,Z){let C=d===void 0?void 0:this.#C[d];if(this.#X(C))return C;let W=new Jk,{signal:w}=G;w?.addEventListener("abort",()=>W.abort(w.reason),{signal:W.signal});let B={signal:W.signal,options:G,context:Z},A=(J,K=!1)=>{let{aborted:Q}=W.signal,E=G.ignoreFetchAbort&&J!==void 0;if(G.status)if(Q&&!K){if(G.status.fetchAborted=!0,G.status.fetchError=W.signal.reason,E)G.status.fetchAbortIgnored=!0}else G.status.fetchResolved=!0;if(Q&&!E&&!K)return X(W.signal.reason);let S=F;if(this.#C[d]===F)if(J===void 0)if(S.__staleWhileFetching)this.#C[d]=S.__staleWhileFetching;else this.#y(I,"fetch");else{if(G.status)G.status.fetchUpdated=!0;this.set(I,J,B.options)}return J},V=(J)=>{if(G.status)G.status.fetchRejected=!0,G.status.fetchError=J;return X(J)},X=(J)=>{let{aborted:K}=W.signal,Q=K&&G.allowStaleOnFetchAbort,E=Q||G.allowStaleOnFetchRejection,S=E||G.noDeleteOnFetchRejection,P=F;if(this.#C[d]===F){if(!S||P.__staleWhileFetching===void 0)this.#y(I,"fetch");else if(!Q)this.#C[d]=P.__staleWhileFetching}if(E){if(G.status&&P.__staleWhileFetching!==void 0)G.status.returnedStale=!0;return P.__staleWhileFetching}else if(P.__returned===P)throw J},_=(J,K)=>{let Q=this.#w?.(I,C,B);if(Q&&Q instanceof Promise)Q.then((E)=>J(E===void 0?void 0:E),K);W.signal.addEventListener("abort",()=>{if(!G.ignoreFetchAbort||G.allowStaleOnFetchAbort){if(J(void 0),G.allowStaleOnFetchAbort)J=(E)=>A(E,!0)}})};if(G.status)G.status.fetchDispatched=!0;let F=new Promise(_).then(A,V),g=Object.assign(F,{__abortController:W,__staleWhileFetching:C,__returned:void 0});if(d===void 0)this.set(I,g,{...B.options,status:void 0}),d=this.#B.get(I);else this.#C[d]=g;return g}#X(I){if(!this.#f)return!1;let d=I;return!!d&&d instanceof Promise&&d.hasOwnProperty("__staleWhileFetching")&&d.__abortController instanceof Jk}async fetch(I,d={}){let{allowStale:G=this.allowStale,updateAgeOnGet:Z=this.updateAgeOnGet,noDeleteOnStaleGet:C=this.noDeleteOnStaleGet,ttl:W=this.ttl,noDisposeOnSet:w=this.noDisposeOnSet,size:B=0,sizeCalculation:A=this.sizeCalculation,noUpdateTTL:V=this.noUpdateTTL,noDeleteOnFetchRejection:X=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:_=this.allowStaleOnFetchRejection,ignoreFetchAbort:F=this.ignoreFetchAbort,allowStaleOnFetchAbort:g=this.allowStaleOnFetchAbort,context:J,forceRefresh:K=!1,status:Q,signal:E}=d;if(!this.#f){if(Q)Q.fetch="get";return this.get(I,{allowStale:G,updateAgeOnGet:Z,noDeleteOnStaleGet:C,status:Q})}let S={allowStale:G,updateAgeOnGet:Z,noDeleteOnStaleGet:C,ttl:W,noDisposeOnSet:w,size:B,sizeCalculation:A,noUpdateTTL:V,noDeleteOnFetchRejection:X,allowStaleOnFetchRejection:_,allowStaleOnFetchAbort:g,ignoreFetchAbort:F,status:Q,signal:E},P=this.#B.get(I);if(P===void 0){if(Q)Q.fetch="miss";let $=this.#l(I,P,S,J);return $.__returned=$}else{let $=this.#C[P];if(this.#X($)){let c=G&&$.__staleWhileFetching!==void 0;if(Q){if(Q.fetch="inflight",c)Q.returnedStale=!0}return c?$.__staleWhileFetching:$.__returned=$}let h=this.#K(P);if(!K&&!h){if(Q)Q.fetch="hit";if(this.#h(P),Z)this.#v(P);if(Q)this.#G(Q,P);return $}let O=this.#l(I,P,S,J),V1=O.__staleWhileFetching!==void 0&&G;if(Q){if(Q.fetch=h?"stale":"refresh",V1&&h)Q.returnedStale=!0}return V1?O.__staleWhileFetching:O.__returned=O}}async forceFetch(I,d={}){let G=await this.fetch(I,d);if(G===void 0)throw new Error("fetch() returned undefined");return G}memo(I,d={}){let G=this.#z;if(!G)throw new Error("no memoMethod provided to constructor");let{context:Z,forceRefresh:C,...W}=d,w=this.get(I,W);if(!C&&w!==void 0)return w;let B=G(I,w,{options:W,context:Z});return this.set(I,B,W),B}get(I,d={}){let{allowStale:G=this.allowStale,updateAgeOnGet:Z=this.updateAgeOnGet,noDeleteOnStaleGet:C=this.noDeleteOnStaleGet,status:W}=d,w=this.#B.get(I);if(w!==void 0){let B=this.#C[w],A=this.#X(B);if(W)this.#G(W,w);if(this.#K(w)){if(W)W.get="stale";if(!A){if(!C)this.#y(I,"expire");if(W&&G)W.returnedStale=!0;return G?B:void 0}else{if(W&&G&&B.__staleWhileFetching!==void 0)W.returnedStale=!0;return G?B.__staleWhileFetching:void 0}}else{if(W)W.get="hit";if(A)return B.__staleWhileFetching;if(this.#h(w),Z)this.#v(w);return B}}else if(W)W.get="miss"}#b(I,d){this.#J[d]=I,this.#g[I]=d}#h(I){if(I!==this.#_){if(I===this.#D)this.#D=this.#g[I];else this.#b(this.#J[I],this.#g[I]);this.#b(this.#_,I),this.#_=I}}delete(I){return this.#y(I,"delete")}#y(I,d){let G=!1;if(this.#V!==0){let Z=this.#B.get(I);if(Z!==void 0)if(G=!0,this.#V===1)this.#j(d);else{this.#$(Z);let C=this.#C[Z];if(this.#X(C))C.__abortController.abort(new Error("deleted"));else if(this.#Q||this.#H){if(this.#Q)this.#W?.(C,I,d);if(this.#H)this.#F?.push([C,I,d])}if(this.#B.delete(I),this.#A[Z]=void 0,this.#C[Z]=void 0,Z===this.#_)this.#_=this.#J[Z];else if(Z===this.#D)this.#D=this.#g[Z];else{let W=this.#J[Z];this.#g[W]=this.#g[Z];let w=this.#g[Z];this.#J[w]=this.#J[Z]}this.#V--,this.#q.push(Z)}}if(this.#H&&this.#F?.length){let Z=this.#F,C;while(C=Z?.shift())this.#Z?.(...C)}return G}clear(){return this.#j("delete")}#j(I){for(let d of this.#M({allowStale:!0})){let G=this.#C[d];if(this.#X(G))G.__abortController.abort(new Error("deleted"));else{let Z=this.#A[d];if(this.#Q)this.#W?.(G,Z,I);if(this.#H)this.#F?.push([G,Z,I])}}if(this.#B.clear(),this.#C.fill(void 0),this.#A.fill(void 0),this.#N&&this.#U)this.#N.fill(0),this.#U.fill(0);if(this.#R)this.#R.fill(0);if(this.#D=0,this.#_=0,this.#q.length=0,this.#Y=0,this.#V=0,this.#H&&this.#F){let d=this.#F,G;while(G=d?.shift())this.#Z?.(...G)}}}import{posix as IK4,win32 as W31}from"node:path";import{fileURLToPath as dK4}from"node:url";import{lstatSync as GK4,readdir as ZK4,readdirSync as CK4,readlinkSync as WK4,realpathSync as wK4}from"fs";import*as BK4 from"node:fs";import{lstat as VK4,readdir as XK4,readlink as YK4,realpath as _K4}from"node:fs/promises";import{EventEmitter as d31}from"node:events";import ai1 from"node:stream";import{StringDecoder as cJ4}from"node:string_decoder";var pi1=typeof process==="object"&&process?process:{stdout:null,stderr:null},pJ4=(I)=>!!I&&typeof I==="object"&&(I instanceof qg||I instanceof ai1||iJ4(I)||nJ4(I)),iJ4=(I)=>!!I&&typeof I==="object"&&I instanceof d31&&typeof I.pipe==="function"&&I.pipe!==ai1.Writable.prototype.pipe,nJ4=(I)=>!!I&&typeof I==="object"&&I instanceof d31&&typeof I.write==="function"&&typeof I.end==="function",CV=Symbol("EOF"),WV=Symbol("maybeEmitEnd"),nY=Symbol("emittedEnd"),Kk=Symbol("emittingEnd"),IS=Symbol("emittedError"),Nk=Symbol("closed"),ii1=Symbol("read"),zk=Symbol("flush"),ni1=Symbol("flushChunk"),PC=Symbol("encoding"),vQ=Symbol("decoder"),D8=Symbol("flowing"),dS=Symbol("paused"),EQ=Symbol("resume"),H8=Symbol("buffer"),CI=Symbol("pipes"),F8=Symbol("bufferLength"),s91=Symbol("bufferPush"),Qk=Symbol("bufferShift"),M7=Symbol("objectMode"),W6=Symbol("destroyed"),o91=Symbol("error"),e91=Symbol("emitData"),ri1=Symbol("emitEnd"),t91=Symbol("emitEnd2"),bw=Symbol("async"),I31=Symbol("abort"),fk=Symbol("aborted"),GS=Symbol("signal"),fg=Symbol("dataListeners"),sd=Symbol("discarded"),ZS=(I)=>Promise.resolve().then(I),rJ4=(I)=>I(),aJ4=(I)=>I==="end"||I==="finish"||I==="prefinish",sJ4=(I)=>I instanceof ArrayBuffer||!!I&&typeof I==="object"&&I.constructor&&I.constructor.name==="ArrayBuffer"&&I.byteLength>=0,oJ4=(I)=>!Buffer.isBuffer(I)&&ArrayBuffer.isView(I);class G31{src;dest;opts;ondrain;constructor(I,d,G){this.src=I,this.dest=d,this.opts=G,this.ondrain=()=>I[EQ](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(I){}end(){if(this.unpipe(),this.opts.end)this.dest.end()}}class si1 extends G31{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(I,d,G){super(I,d,G);this.proxyErrors=(Z)=>d.emit("error",Z),I.on("error",this.proxyErrors)}}var eJ4=(I)=>!!I.objectMode,tJ4=(I)=>!I.objectMode&&!!I.encoding&&I.encoding!=="buffer";class qg extends d31{[D8]=!1;[dS]=!1;[CI]=[];[H8]=[];[M7];[PC];[bw];[vQ];[CV]=!1;[nY]=!1;[Kk]=!1;[Nk]=!1;[IS]=null;[F8]=0;[W6]=!1;[GS];[fk]=!1;[fg]=0;[sd]=!1;writable=!0;readable=!0;constructor(...I){let d=I[0]||{};super();if(d.objectMode&&typeof d.encoding==="string")throw new TypeError("Encoding and objectMode may not be used together");if(eJ4(d))this[M7]=!0,this[PC]=null;else if(tJ4(d))this[PC]=d.encoding,this[M7]=!1;else this[M7]=!1,this[PC]=null;if(this[bw]=!!d.async,this[vQ]=this[PC]?new cJ4(this[PC]):null,d&&d.debugExposeBuffer===!0)Object.defineProperty(this,"buffer",{get:()=>this[H8]});if(d&&d.debugExposePipes===!0)Object.defineProperty(this,"pipes",{get:()=>this[CI]});let{signal:G}=d;if(G)if(this[GS]=G,G.aborted)this[I31]();else G.addEventListener("abort",()=>this[I31]())}get bufferLength(){return this[F8]}get encoding(){return this[PC]}set encoding(I){throw new Error("Encoding must be set at instantiation time")}setEncoding(I){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[M7]}set objectMode(I){throw new Error("objectMode must be set at instantiation time")}get["async"](){return this[bw]}set["async"](I){this[bw]=this[bw]||!!I}[I31](){this[fk]=!0,this.emit("abort",this[GS]?.reason),this.destroy(this[GS]?.reason)}get aborted(){return this[fk]}set aborted(I){}write(I,d,G){if(this[fk])return!1;if(this[CV])throw new Error("write after end");if(this[W6])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;if(typeof d==="function")G=d,d="utf8";if(!d)d="utf8";let Z=this[bw]?ZS:rJ4;if(!this[M7]&&!Buffer.isBuffer(I)){if(oJ4(I))I=Buffer.from(I.buffer,I.byteOffset,I.byteLength);else if(sJ4(I))I=Buffer.from(I);else if(typeof I!=="string")throw new Error("Non-contiguous data written to non-objectMode stream")}if(this[M7]){if(this[D8]&&this[F8]!==0)this[zk](!0);if(this[D8])this.emit("data",I);else this[s91](I);if(this[F8]!==0)this.emit("readable");if(G)Z(G);return this[D8]}if(!I.length){if(this[F8]!==0)this.emit("readable");if(G)Z(G);return this[D8]}if(typeof I==="string"&&!(d===this[PC]&&!this[vQ]?.lastNeed))I=Buffer.from(I,d);if(Buffer.isBuffer(I)&&this[PC])I=this[vQ].write(I);if(this[D8]&&this[F8]!==0)this[zk](!0);if(this[D8])this.emit("data",I);else this[s91](I);if(this[F8]!==0)this.emit("readable");if(G)Z(G);return this[D8]}read(I){if(this[W6])return null;if(this[sd]=!1,this[F8]===0||I===0||I&&I>this[F8])return this[WV](),null;if(this[M7])I=null;if(this[H8].length>1&&!this[M7])this[H8]=[this[PC]?this[H8].join(""):Buffer.concat(this[H8],this[F8])];let d=this[ii1](I||null,this[H8][0]);return this[WV](),d}[ii1](I,d){if(this[M7])this[Qk]();else{let G=d;if(I===G.length||I===null)this[Qk]();else if(typeof G==="string")this[H8][0]=G.slice(I),d=G.slice(0,I),this[F8]-=I;else this[H8][0]=G.subarray(I),d=G.subarray(0,I),this[F8]-=I}if(this.emit("data",d),!this[H8].length&&!this[CV])this.emit("drain");return d}end(I,d,G){if(typeof I==="function")G=I,I=void 0;if(typeof d==="function")G=d,d="utf8";if(I!==void 0)this.write(I,d);if(G)this.once("end",G);if(this[CV]=!0,this.writable=!1,this[D8]||!this[dS])this[WV]();return this}[EQ](){if(this[W6])return;if(!this[fg]&&!this[CI].length)this[sd]=!0;if(this[dS]=!1,this[D8]=!0,this.emit("resume"),this[H8].length)this[zk]();else if(this[CV])this[WV]();else this.emit("drain")}resume(){return this[EQ]()}pause(){this[D8]=!1,this[dS]=!0,this[sd]=!1}get destroyed(){return this[W6]}get flowing(){return this[D8]}get paused(){return this[dS]}[s91](I){if(this[M7])this[F8]+=1;else this[F8]+=I.length;this[H8].push(I)}[Qk](){if(this[M7])this[F8]-=1;else this[F8]-=this[H8][0].length;return this[H8].shift()}[zk](I=!1){do;while(this[ni1](this[Qk]())&&this[H8].length);if(!I&&!this[H8].length&&!this[CV])this.emit("drain")}[ni1](I){return this.emit("data",I),this[D8]}pipe(I,d){if(this[W6])return I;this[sd]=!1;let G=this[nY];if(d=d||{},I===pi1.stdout||I===pi1.stderr)d.end=!1;else d.end=d.end!==!1;if(d.proxyErrors=!!d.proxyErrors,G){if(d.end)I.end()}else if(this[CI].push(!d.proxyErrors?new G31(this,I,d):new si1(this,I,d)),this[bw])ZS(()=>this[EQ]());else this[EQ]();return I}unpipe(I){let d=this[CI].find((G)=>G.dest===I);if(d){if(this[CI].length===1){if(this[D8]&&this[fg]===0)this[D8]=!1;this[CI]=[]}else this[CI].splice(this[CI].indexOf(d),1);d.unpipe()}}addListener(I,d){return this.on(I,d)}on(I,d){let G=super.on(I,d);if(I==="data"){if(this[sd]=!1,this[fg]++,!this[CI].length&&!this[D8])this[EQ]()}else if(I==="readable"&&this[F8]!==0)super.emit("readable");else if(aJ4(I)&&this[nY])super.emit(I),this.removeAllListeners(I);else if(I==="error"&&this[IS]){let Z=d;if(this[bw])ZS(()=>Z.call(this,this[IS]));else Z.call(this,this[IS])}return G}removeListener(I,d){return this.off(I,d)}off(I,d){let G=super.off(I,d);if(I==="data"){if(this[fg]=this.listeners("data").length,this[fg]===0&&!this[sd]&&!this[CI].length)this[D8]=!1}return G}removeAllListeners(I){let d=super.removeAllListeners(I);if(I==="data"||I===void 0){if(this[fg]=0,!this[sd]&&!this[CI].length)this[D8]=!1}return d}get emittedEnd(){return this[nY]}[WV](){if(!this[Kk]&&!this[nY]&&!this[W6]&&this[H8].length===0&&this[CV]){if(this[Kk]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Nk])this.emit("close");this[Kk]=!1}}emit(I,...d){let G=d[0];if(I!=="error"&&I!=="close"&&I!==W6&&this[W6])return!1;else if(I==="data")return!this[M7]&&!G?!1:this[bw]?(ZS(()=>this[e91](G)),!0):this[e91](G);else if(I==="end")return this[ri1]();else if(I==="close"){if(this[Nk]=!0,!this[nY]&&!this[W6])return!1;let C=super.emit("close");return this.removeAllListeners("close"),C}else if(I==="error"){this[IS]=G,super.emit(o91,G);let C=!this[GS]||this.listeners("error").length?super.emit("error",G):!1;return this[WV](),C}else if(I==="resume"){let C=super.emit("resume");return this[WV](),C}else if(I==="finish"||I==="prefinish"){let C=super.emit(I);return this.removeAllListeners(I),C}let Z=super.emit(I,...d);return this[WV](),Z}[e91](I){for(let G of this[CI])if(G.dest.write(I)===!1)this.pause();let d=this[sd]?!1:super.emit("data",I);return this[WV](),d}[ri1](){if(this[nY])return!1;return this[nY]=!0,this.readable=!1,this[bw]?(ZS(()=>this[t91]()),!0):this[t91]()}[t91](){if(this[vQ]){let d=this[vQ].end();if(d){for(let G of this[CI])G.dest.write(d);if(!this[sd])super.emit("data",d)}}for(let d of this[CI])d.end();let I=super.emit("end");return this.removeAllListeners("end"),I}async collect(){let I=Object.assign([],{dataLength:0});if(!this[M7])I.dataLength=0;let d=this.promise();return this.on("data",(G)=>{if(I.push(G),!this[M7])I.dataLength+=G.length}),await d,I}async concat(){if(this[M7])throw new Error("cannot concat in objectMode");let I=await this.collect();return this[PC]?I.join(""):Buffer.concat(I,I.dataLength)}async promise(){return new Promise((I,d)=>{this.on(W6,()=>d(new Error("stream destroyed"))),this.on("error",(G)=>d(G)),this.on("end",()=>I())})}[Symbol.asyncIterator](){this[sd]=!1;let I=!1,d=async()=>{return this.pause(),I=!0,{value:void 0,done:!0}};return{next:()=>{if(I)return d();let Z=this.read();if(Z!==null)return Promise.resolve({done:!1,value:Z});if(this[CV])return d();let C,W,w=(X)=>{this.off("data",B),this.off("end",A),this.off(W6,V),d(),W(X)},B=(X)=>{this.off("error",w),this.off("end",A),this.off(W6,V),this.pause(),C({value:X,done:!!this[CV]})},A=()=>{this.off("error",w),this.off("data",B),this.off(W6,V),d(),C({done:!0,value:void 0})},V=()=>w(new Error("stream destroyed"));return new Promise((X,_)=>{W=_,C=X,this.once(W6,V),this.once("error",w),this.once("end",A),this.once("data",B)})},throw:d,return:d,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[sd]=!1;let I=!1,d=()=>{return this.pause(),this.off(o91,d),this.off(W6,d),this.off("end",d),I=!0,{done:!0,value:void 0}},G=()=>{if(I)return d();let Z=this.read();return Z===null?d():{done:!1,value:Z}};return this.once("end",d),this.once(o91,d),this.once(W6,d),{next:G,throw:d,return:d,[Symbol.iterator](){return this}}}destroy(I){if(this[W6]){if(I)this.emit("error",I);else this.emit(W6);return this}this[W6]=!0,this[sd]=!0,this[H8].length=0,this[F8]=0;let d=this;if(typeof d.close==="function"&&!this[Nk])d.close();if(I)this.emit("error",I);else this.emit(W6);return this}static get isStream(){return pJ4}}var AK4=wK4.native,WS={lstatSync:GK4,readdir:ZK4,readdirSync:CK4,readlinkSync:WK4,realpathSync:AK4,promises:{lstat:VK4,readdir:XK4,readlink:YK4,realpath:_K4}},dn1=(I)=>!I||I===WS||I===BK4?WS:{...WS,...I,promises:{...WS.promises,...I.promises||{}}},Gn1=/^\\\\\?\\([a-z]:)\\?$/i,DK4=(I)=>I.replace(/\//g,"\\").replace(Gn1,"$1\\"),HK4=/[\\\/]/,_Z=0,Zn1=1,Cn1=2,hw=4,Wn1=6,wn1=8,Rg=10,Bn1=12,YZ=15,CS=~YZ,Z31=16,oi1=32,wS=64,$C=128,qk=256,Uk=512,ei1=wS|$C|Uk,FK4=1023,C31=(I)=>I.isFile()?wn1:I.isDirectory()?hw:I.isSymbolicLink()?Rg:I.isCharacterDevice()?Cn1:I.isBlockDevice()?Wn1:I.isSocket()?Bn1:I.isFIFO()?Zn1:_Z,ti1=new Map,BS=(I)=>{let d=ti1.get(I);if(d)return d;let G=I.normalize("NFKD");return ti1.set(I,G),G},In1=new Map,Rk=(I)=>{let d=In1.get(I);if(d)return d;let G=BS(I.toLowerCase());return In1.set(I,G),G};class w31 extends ZV{constructor(){super({max:256})}}class An1 extends ZV{constructor(I=16384){super({maxSize:I,sizeCalculation:(d)=>d.length+1})}}var Vn1=Symbol("PathScurry setAsCwd");class WI{name;root;roots;parent;nocase;isCWD=!1;#I;#d;get dev(){return this.#d}#W;get mode(){return this.#W}#Z;get nlink(){return this.#Z}#w;get uid(){return this.#w}#z;get gid(){return this.#z}#V;get rdev(){return this.#V}#Y;get blksize(){return this.#Y}#B;get ino(){return this.#B}#A;get size(){return this.#A}#C;get blocks(){return this.#C}#g;get atimeMs(){return this.#g}#J;get mtimeMs(){return this.#J}#D;get ctimeMs(){return this.#D}#_;get birthtimeMs(){return this.#_}#q;get atime(){return this.#q}#F;get mtime(){return this.#F}#R;get ctime(){return this.#R}#U;get birthtime(){return this.#U}#N;#Q;#f;#H;#S;#v;#G;#P;#K;#L;get parentPath(){return(this.parent||this).fullpath()}get path(){return this.parentPath}constructor(I,d=_Z,G,Z,C,W,w){if(this.name=I,this.#N=C?Rk(I):BS(I),this.#G=d&FK4,this.nocase=C,this.roots=Z,this.root=G||this,this.#P=W,this.#f=w.fullpath,this.#S=w.relative,this.#v=w.relativePosix,this.parent=w.parent,this.parent)this.#I=this.parent.#I;else this.#I=dn1(w.fs)}depth(){if(this.#Q!==void 0)return this.#Q;if(!this.parent)return this.#Q=0;return this.#Q=this.parent.depth()+1}childrenCache(){return this.#P}resolve(I){if(!I)return this;let d=this.getRootString(I),Z=I.substring(d.length).split(this.splitSep);return d?this.getRoot(d).#$(Z):this.#$(Z)}#$(I){let d=this;for(let G of I)d=d.child(G);return d}children(){let I=this.#P.get(this);if(I)return I;let d=Object.assign([],{provisional:0});return this.#P.set(this,d),this.#G&=~Z31,d}child(I,d){if(I===""||I===".")return this;if(I==="..")return this.parent||this;let G=this.children(),Z=this.nocase?Rk(I):BS(I);for(let B of G)if(B.#N===Z)return B;let C=this.parent?this.sep:"",W=this.#f?this.#f+C+I:void 0,w=this.newChild(I,_Z,{...d,parent:this,fullpath:W});if(!this.canReaddir())w.#G|=$C;return G.push(w),w}relative(){if(this.isCWD)return"";if(this.#S!==void 0)return this.#S;let I=this.name,d=this.parent;if(!d)return this.#S=this.name;let G=d.relative();return G+(!G||!d.parent?"":this.sep)+I}relativePosix(){if(this.sep==="/")return this.relative();if(this.isCWD)return"";if(this.#v!==void 0)return this.#v;let I=this.name,d=this.parent;if(!d)return this.#v=this.fullpathPosix();let G=d.relativePosix();return G+(!G||!d.parent?"":"/")+I}fullpath(){if(this.#f!==void 0)return this.#f;let I=this.name,d=this.parent;if(!d)return this.#f=this.name;let Z=d.fullpath()+(!d.parent?"":this.sep)+I;return this.#f=Z}fullpathPosix(){if(this.#H!==void 0)return this.#H;if(this.sep==="/")return this.#H=this.fullpath();if(!this.parent){let Z=this.fullpath().replace(/\\/g,"/");if(/^[a-z]:\//i.test(Z))return this.#H=`//?/${Z}`;else return this.#H=Z}let I=this.parent,d=I.fullpathPosix(),G=d+(!d||!I.parent?"":"/")+this.name;return this.#H=G}isUnknown(){return(this.#G&YZ)===_Z}isType(I){return this[`is${I}`]()}getType(){return this.isUnknown()?"Unknown":this.isDirectory()?"Directory":this.isFile()?"File":this.isSymbolicLink()?"SymbolicLink":this.isFIFO()?"FIFO":this.isCharacterDevice()?"CharacterDevice":this.isBlockDevice()?"BlockDevice":this.isSocket()?"Socket":"Unknown"}isFile(){return(this.#G&YZ)===wn1}isDirectory(){return(this.#G&YZ)===hw}isCharacterDevice(){return(this.#G&YZ)===Cn1}isBlockDevice(){return(this.#G&YZ)===Wn1}isFIFO(){return(this.#G&YZ)===Zn1}isSocket(){return(this.#G&YZ)===Bn1}isSymbolicLink(){return(this.#G&Rg)===Rg}lstatCached(){return this.#G&oi1?this:void 0}readlinkCached(){return this.#K}realpathCached(){return this.#L}readdirCached(){let I=this.children();return I.slice(0,I.provisional)}canReadlink(){if(this.#K)return!0;if(!this.parent)return!1;let I=this.#G&YZ;return!(I!==_Z&&I!==Rg||this.#G&qk||this.#G&$C)}calledReaddir(){return!!(this.#G&Z31)}isENOENT(){return!!(this.#G&$C)}isNamed(I){return!this.nocase?this.#N===BS(I):this.#N===Rk(I)}async readlink(){let I=this.#K;if(I)return I;if(!this.canReadlink())return;if(!this.parent)return;try{let d=await this.#I.promises.readlink(this.fullpath()),G=(await this.parent.realpath())?.resolve(d);if(G)return this.#K=G}catch(d){this.#X(d.code);return}}readlinkSync(){let I=this.#K;if(I)return I;if(!this.canReadlink())return;if(!this.parent)return;try{let d=this.#I.readlinkSync(this.fullpath()),G=this.parent.realpathSync()?.resolve(d);if(G)return this.#K=G}catch(d){this.#X(d.code);return}}#u(I){this.#G|=Z31;for(let d=I.provisional;dG(null,I))}readdirCB(I,d=!1){if(!this.canReaddir()){if(d)I(null,[]);else queueMicrotask(()=>I(null,[]));return}let G=this.children();if(this.calledReaddir()){let C=G.slice(0,G.provisional);if(d)I(null,C);else queueMicrotask(()=>I(null,C));return}if(this.#x.push(I),this.#c)return;this.#c=!0;let Z=this.fullpath();this.#I.readdir(Z,{withFileTypes:!0},(C,W)=>{if(C)this.#m(C.code),G.provisional=0;else{for(let w of W)this.#b(w,G);this.#u(G)}this.#i(G.slice(0,G.provisional));return})}#k;async readdir(){if(!this.canReaddir())return[];let I=this.children();if(this.calledReaddir())return I.slice(0,I.provisional);let d=this.fullpath();if(this.#k)await this.#k;else{let G=()=>{};this.#k=new Promise((Z)=>G=Z);try{for(let Z of await this.#I.promises.readdir(d,{withFileTypes:!0}))this.#b(Z,I);this.#u(I)}catch(Z){this.#m(Z.code),I.provisional=0}this.#k=void 0,G()}return I.slice(0,I.provisional)}readdirSync(){if(!this.canReaddir())return[];let I=this.children();if(this.calledReaddir())return I.slice(0,I.provisional);let d=this.fullpath();try{for(let G of this.#I.readdirSync(d,{withFileTypes:!0}))this.#b(G,I);this.#u(I)}catch(G){this.#m(G.code),I.provisional=0}return I.slice(0,I.provisional)}canReaddir(){if(this.#G&ei1)return!1;let I=YZ&this.#G;if(!(I===_Z||I===hw||I===Rg))return!1;return!0}shouldWalk(I,d){return(this.#G&hw)===hw&&!(this.#G&ei1)&&!I.has(this)&&(!d||d(this))}async realpath(){if(this.#L)return this.#L;if((Uk|qk|$C)&this.#G)return;try{let I=await this.#I.promises.realpath(this.fullpath());return this.#L=this.resolve(I)}catch(I){this.#M()}}realpathSync(){if(this.#L)return this.#L;if((Uk|qk|$C)&this.#G)return;try{let I=this.#I.realpathSync(this.fullpath());return this.#L=this.resolve(I)}catch(I){this.#M()}}[Vn1](I){if(I===this)return;I.isCWD=!1,this.isCWD=!0;let d=new Set([]),G=[],Z=this;while(Z&&Z.parent)d.add(Z),Z.#S=G.join(this.sep),Z.#v=G.join("/"),Z=Z.parent,G.push("..");Z=I;while(Z&&Z.parent&&!d.has(Z))Z.#S=void 0,Z.#v=void 0,Z=Z.parent}}class vk extends WI{sep="\\";splitSep=HK4;constructor(I,d=_Z,G,Z,C,W,w){super(I,d,G,Z,C,W,w)}newChild(I,d=_Z,G={}){return new vk(I,d,this.root,this.roots,this.nocase,this.childrenCache(),G)}getRootString(I){return W31.parse(I).root}getRoot(I){if(I=DK4(I.toUpperCase()),I===this.root.name)return this.root;for(let[d,G]of Object.entries(this.roots))if(this.sameRoot(I,d))return this.roots[I]=G;return this.roots[I]=new AS(I,this).root}sameRoot(I,d=this.root.name){return I=I.toUpperCase().replace(/\//g,"\\").replace(Gn1,"$1\\"),I===d}}class Ek extends WI{splitSep="/";sep="/";constructor(I,d=_Z,G,Z,C,W,w){super(I,d,G,Z,C,W,w)}getRootString(I){return I.startsWith("/")?"/":""}getRoot(I){return this.root}newChild(I,d=_Z,G={}){return new Ek(I,d,this.root,this.roots,this.nocase,this.childrenCache(),G)}}class B31{root;rootPath;roots;cwd;#I;#d;#W;nocase;#Z;constructor(I=process.cwd(),d,G,{nocase:Z,childrenCacheSize:C=16384,fs:W=WS}={}){if(this.#Z=dn1(W),I instanceof URL||I.startsWith("file://"))I=dK4(I);let w=d.resolve(I);this.roots=Object.create(null),this.rootPath=this.parseRootPath(w),this.#I=new w31,this.#d=new w31,this.#W=new An1(C);let B=w.substring(this.rootPath.length).split(G);if(B.length===1&&!B[0])B.pop();if(Z===void 0)throw new TypeError("must provide nocase setting to PathScurryBase ctor");this.nocase=Z,this.root=this.newRoot(this.#Z),this.roots[this.rootPath]=this.root;let A=this.root,V=B.length-1,X=d.sep,_=this.rootPath,F=!1;for(let g of B){let J=V--;A=A.child(g,{relative:new Array(J).fill("..").join(X),relativePosix:new Array(J).fill("..").join("/"),fullpath:_+=(F?"":X)+g}),F=!0}this.cwd=A}depth(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return I.depth()}childrenCache(){return this.#W}resolve(...I){let d="";for(let C=I.length-1;C>=0;C--){let W=I[C];if(!W||W===".")continue;if(d=d?`${W}/${d}`:W,this.isAbsolute(W))break}let G=this.#I.get(d);if(G!==void 0)return G;let Z=this.cwd.resolve(d).fullpath();return this.#I.set(d,Z),Z}resolvePosix(...I){let d="";for(let C=I.length-1;C>=0;C--){let W=I[C];if(!W||W===".")continue;if(d=d?`${W}/${d}`:W,this.isAbsolute(W))break}let G=this.#d.get(d);if(G!==void 0)return G;let Z=this.cwd.resolve(d).fullpathPosix();return this.#d.set(d,Z),Z}relative(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return I.relative()}relativePosix(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return I.relativePosix()}basename(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return I.name}dirname(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return(I.parent||I).fullpath()}async readdir(I=this.cwd,d={withFileTypes:!0}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G}=d;if(!I.canReaddir())return[];else{let Z=await I.readdir();return G?Z:Z.map((C)=>C.name)}}readdirSync(I=this.cwd,d={withFileTypes:!0}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G=!0}=d;if(!I.canReaddir())return[];else if(G)return I.readdirSync();else return I.readdirSync().map((Z)=>Z.name)}async lstat(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return I.lstat()}lstatSync(I=this.cwd){if(typeof I==="string")I=this.cwd.resolve(I);return I.lstatSync()}async readlink(I=this.cwd,{withFileTypes:d}={withFileTypes:!1}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I.withFileTypes,I=this.cwd;let G=await I.readlink();return d?G:G?.fullpath()}readlinkSync(I=this.cwd,{withFileTypes:d}={withFileTypes:!1}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I.withFileTypes,I=this.cwd;let G=I.readlinkSync();return d?G:G?.fullpath()}async realpath(I=this.cwd,{withFileTypes:d}={withFileTypes:!1}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I.withFileTypes,I=this.cwd;let G=await I.realpath();return d?G:G?.fullpath()}realpathSync(I=this.cwd,{withFileTypes:d}={withFileTypes:!1}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I.withFileTypes,I=this.cwd;let G=I.realpathSync();return d?G:G?.fullpath()}async walk(I=this.cwd,d={}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G=!0,follow:Z=!1,filter:C,walkFilter:W}=d,w=[];if(!C||C(I))w.push(G?I:I.fullpath());let B=new Set,A=(X,_)=>{B.add(X),X.readdirCB((F,g)=>{if(F)return _(F);let J=g.length;if(!J)return _();let K=()=>{if(--J===0)_()};for(let Q of g){if(!C||C(Q))w.push(G?Q:Q.fullpath());if(Z&&Q.isSymbolicLink())Q.realpath().then((E)=>E?.isUnknown()?E.lstat():E).then((E)=>E?.shouldWalk(B,W)?A(E,K):K());else if(Q.shouldWalk(B,W))A(Q,K);else K()}},!0)},V=I;return new Promise((X,_)=>{A(V,(F)=>{if(F)return _(F);X(w)})})}walkSync(I=this.cwd,d={}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G=!0,follow:Z=!1,filter:C,walkFilter:W}=d,w=[];if(!C||C(I))w.push(G?I:I.fullpath());let B=new Set([I]);for(let A of B){let V=A.readdirSync();for(let X of V){if(!C||C(X))w.push(G?X:X.fullpath());let _=X;if(X.isSymbolicLink()){if(!(Z&&(_=X.realpathSync())))continue;if(_.isUnknown())_.lstatSync()}if(_.shouldWalk(B,W))B.add(_)}}return w}[Symbol.asyncIterator](){return this.iterate()}iterate(I=this.cwd,d={}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;return this.stream(I,d)[Symbol.asyncIterator]()}[Symbol.iterator](){return this.iterateSync()}*iterateSync(I=this.cwd,d={}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G=!0,follow:Z=!1,filter:C,walkFilter:W}=d;if(!C||C(I))yield G?I:I.fullpath();let w=new Set([I]);for(let B of w){let A=B.readdirSync();for(let V of A){if(!C||C(V))yield G?V:V.fullpath();let X=V;if(V.isSymbolicLink()){if(!(Z&&(X=V.realpathSync())))continue;if(X.isUnknown())X.lstatSync()}if(X.shouldWalk(w,W))w.add(X)}}}stream(I=this.cwd,d={}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G=!0,follow:Z=!1,filter:C,walkFilter:W}=d,w=new qg({objectMode:!0});if(!C||C(I))w.write(G?I:I.fullpath());let B=new Set,A=[I],V=0,X=()=>{let _=!1;while(!_){let F=A.shift();if(!F){if(V===0)w.end();return}V++,B.add(F);let g=(K,Q,E=!1)=>{if(K)return w.emit("error",K);if(Z&&!E){let S=[];for(let P of Q)if(P.isSymbolicLink())S.push(P.realpath().then(($)=>$?.isUnknown()?$.lstat():$));if(S.length){Promise.all(S).then(()=>g(null,Q,!0));return}}for(let S of Q)if(S&&(!C||C(S))){if(!w.write(G?S:S.fullpath()))_=!0}V--;for(let S of Q){let P=S.realpathCached()||S;if(P.shouldWalk(B,W))A.push(P)}if(_&&!w.flowing)w.once("drain",X);else if(!J)X()},J=!0;F.readdirCB(g,!0),J=!1}};return X(),w}streamSync(I=this.cwd,d={}){if(typeof I==="string")I=this.cwd.resolve(I);else if(!(I instanceof WI))d=I,I=this.cwd;let{withFileTypes:G=!0,follow:Z=!1,filter:C,walkFilter:W}=d,w=new qg({objectMode:!0}),B=new Set;if(!C||C(I))w.write(G?I:I.fullpath());let A=[I],V=0,X=()=>{let _=!1;while(!_){let F=A.shift();if(!F){if(V===0)w.end();return}V++,B.add(F);let g=F.readdirSync();for(let J of g)if(!C||C(J)){if(!w.write(G?J:J.fullpath()))_=!0}V--;for(let J of g){let K=J;if(J.isSymbolicLink()){if(!(Z&&(K=J.realpathSync())))continue;if(K.isUnknown())K.lstatSync()}if(K.shouldWalk(B,W))A.push(K)}}if(_&&!w.flowing)w.once("drain",X)};return X(),w}chdir(I=this.cwd){let d=this.cwd;this.cwd=typeof I==="string"?this.cwd.resolve(I):I,this.cwd[Vn1](d)}}class AS extends B31{sep="\\";constructor(I=process.cwd(),d={}){let{nocase:G=!0}=d;super(I,W31,"\\",{...d,nocase:G});this.nocase=G;for(let Z=this.cwd;Z;Z=Z.parent)Z.nocase=this.nocase}parseRootPath(I){return W31.parse(I).root.toUpperCase()}newRoot(I){return new vk(this.rootPath,hw,void 0,this.roots,this.nocase,this.childrenCache(),{fs:I})}isAbsolute(I){return I.startsWith("/")||I.startsWith("\\")||/^[a-z]:(\/|\\)/i.test(I)}}class VS extends B31{sep="/";constructor(I=process.cwd(),d={}){let{nocase:G=!1}=d;super(I,IK4,"/",{...d,nocase:G});this.nocase=G}parseRootPath(I){return"/"}newRoot(I){return new Ek(this.rootPath,hw,void 0,this.roots,this.nocase,this.childrenCache(),{fs:I})}isAbsolute(I){return I.startsWith("/")}}class Mk extends VS{constructor(I=process.cwd(),d={}){let{nocase:G=!0}=d;super(I,{...d,nocase:G})}}var Nm9=process.platform==="win32"?vk:Ek,Xn1=process.platform==="win32"?AS:process.platform==="darwin"?Mk:VS;var gK4=(I)=>I.length>=1,JK4=(I)=>I.length>=1;class MQ{#I;#d;#W;length;#Z;#w;#z;#V;#Y;#B;#A=!0;constructor(I,d,G,Z){if(!gK4(I))throw new TypeError("empty pattern list");if(!JK4(d))throw new TypeError("empty glob list");if(d.length!==I.length)throw new TypeError("mismatched pattern list and glob list lengths");if(this.length=I.length,G<0||G>=this.length)throw new TypeError("index out of range");if(this.#I=I,this.#d=d,this.#W=G,this.#Z=Z,this.#W===0){if(this.isUNC()){let[C,W,w,B,...A]=this.#I,[V,X,_,F,...g]=this.#d;if(A[0]==="")A.shift(),g.shift();let J=[C,W,w,B,""].join("/"),K=[V,X,_,F,""].join("/");this.#I=[J,...A],this.#d=[K,...g],this.length=this.#I.length}else if(this.isDrive()||this.isAbsolute()){let[C,...W]=this.#I,[w,...B]=this.#d;if(W[0]==="")W.shift(),B.shift();let A=C+"/",V=w+"/";this.#I=[A,...W],this.#d=[V,...B],this.length=this.#I.length}}}pattern(){return this.#I[this.#W]}isString(){return typeof this.#I[this.#W]==="string"}isGlobstar(){return this.#I[this.#W]===j8}isRegExp(){return this.#I[this.#W]instanceof RegExp}globString(){return this.#z=this.#z||(this.#W===0?this.isAbsolute()?this.#d[0]+this.#d.slice(1).join("/"):this.#d.join("/"):this.#d.slice(this.#W).join("/"))}hasMore(){return this.length>this.#W+1}rest(){if(this.#w!==void 0)return this.#w;if(!this.hasMore())return this.#w=null;return this.#w=new MQ(this.#I,this.#d,this.#W+1,this.#Z),this.#w.#B=this.#B,this.#w.#Y=this.#Y,this.#w.#V=this.#V,this.#w}isUNC(){let I=this.#I;return this.#Y!==void 0?this.#Y:this.#Y=this.#Z==="win32"&&this.#W===0&&I[0]===""&&I[1]===""&&typeof I[2]==="string"&&!!I[2]&&typeof I[3]==="string"&&!!I[3]}isDrive(){let I=this.#I;return this.#V!==void 0?this.#V:this.#V=this.#Z==="win32"&&this.#W===0&&this.length>1&&typeof I[0]==="string"&&/^[a-z]:$/i.test(I[0])}isAbsolute(){let I=this.#I;return this.#B!==void 0?this.#B:this.#B=I[0]===""&&I.length>1||this.isDrive()||this.isUNC()}root(){let I=this.#I[0];return typeof I==="string"&&this.isAbsolute()&&this.#W===0?I:""}checkFollowGlobstar(){return!(this.#W===0||!this.isGlobstar()||!this.#A)}markFollowGlobstar(){if(this.#W===0||!this.isGlobstar()||!this.#A)return!1;return this.#A=!1,!0}}var KK4=typeof process==="object"&&process&&typeof process.platform==="string"?process.platform:"linux";class XS{relative;relativeChildren;absolute;absoluteChildren;platform;mmopts;constructor(I,{nobrace:d,nocase:G,noext:Z,noglobstar:C,platform:W=KK4}){this.relative=[],this.absolute=[],this.relativeChildren=[],this.absoluteChildren=[],this.platform=W,this.mmopts={dot:!0,nobrace:d,nocase:G,noext:Z,noglobstar:C,optimizationLevel:2,platform:W,nocomment:!0,nonegate:!0};for(let w of I)this.add(w)}add(I){let d=new XZ(I,this.mmopts);for(let G=0;G[I,!!(d&2),!!(d&1)])}}class _n1{store=new Map;add(I,d){if(!I.canReaddir())return;let G=this.store.get(I);if(G){if(!G.find((Z)=>Z.globString()===d.globString()))G.push(d)}else this.store.set(I,[d])}get(I){let d=this.store.get(I);if(!d)throw new Error("attempting to walk unknown path");return d}entries(){return this.keys().map((I)=>[I,this.store.get(I)])}keys(){return[...this.store.keys()].filter((I)=>I.canReaddir())}}class YS{hasWalkedCache;matches=new Yn1;subwalks=new _n1;patterns;follow;dot;opts;constructor(I,d){this.opts=I,this.follow=!!I.follow,this.dot=!!I.dot,this.hasWalkedCache=d?d.copy():new A31}processPatterns(I,d){this.patterns=d;let G=d.map((Z)=>[I,Z]);for(let[Z,C]of G){this.hasWalkedCache.storeWalked(Z,C);let W=C.root(),w=C.isAbsolute()&&this.opts.absolute!==!1;if(W){Z=Z.resolve(W==="/"&&this.opts.root!==void 0?this.opts.root:W);let X=C.rest();if(!X){this.matches.add(Z,!0,!1);continue}else C=X}if(Z.isENOENT())continue;let B,A,V=!1;while(typeof(B=C.pattern())==="string"&&(A=C.rest()))Z=Z.resolve(B),C=A,V=!0;if(B=C.pattern(),A=C.rest(),V){if(this.hasWalkedCache.hasWalked(Z,C))continue;this.hasWalkedCache.storeWalked(Z,C)}if(typeof B==="string"){let X=B===".."||B===""||B===".";this.matches.add(Z.resolve(B),w,X);continue}else if(B===j8){if(!Z.isSymbolicLink()||this.follow||C.checkFollowGlobstar())this.subwalks.add(Z,C);let X=A?.pattern(),_=A?.rest();if(!A||(X===""||X===".")&&!_)this.matches.add(Z,w,X===""||X===".");else if(X===".."){let F=Z.parent||Z;if(!_)this.matches.add(F,w,!0);else if(!this.hasWalkedCache.hasWalked(F,_))this.subwalks.add(F,_)}}else if(B instanceof RegExp)this.subwalks.add(Z,C)}return this}subwalkTargets(){return this.subwalks.keys()}child(){return new YS(this.opts,this.hasWalkedCache)}filterEntries(I,d){let G=this.subwalks.get(I),Z=this.child();for(let C of d)for(let W of G){let w=W.isAbsolute(),B=W.pattern(),A=W.rest();if(B===j8)Z.testGlobstar(C,W,A,w);else if(B instanceof RegExp)Z.testRegExp(C,B,A,w);else Z.testString(C,B,A,w)}return Z}testGlobstar(I,d,G,Z){if(this.dot||!I.name.startsWith(".")){if(!d.hasMore())this.matches.add(I,Z,!1);if(I.canReaddir()){if(this.follow||!I.isSymbolicLink())this.subwalks.add(I,d);else if(I.isSymbolicLink()){if(G&&d.checkFollowGlobstar())this.subwalks.add(I,G);else if(d.markFollowGlobstar())this.subwalks.add(I,d)}}}if(G){let C=G.pattern();if(typeof C==="string"&&C!==".."&&C!==""&&C!==".")this.testString(I,C,G.rest(),Z);else if(C===".."){let W=I.parent||I;this.subwalks.add(W,G)}else if(C instanceof RegExp)this.testRegExp(I,C,G.rest(),Z)}}testRegExp(I,d,G,Z){if(!d.test(I.name))return;if(!G)this.matches.add(I,Z,!1);else this.subwalks.add(I,G)}testString(I,d,G,Z){if(!I.isNamed(d))return;if(!G)this.matches.add(I,Z,!1);else this.subwalks.add(I,G)}}var NK4=(I,d)=>typeof I==="string"?new XS([I],d):Array.isArray(I)?new XS(I,d):I;class V31{path;patterns;opts;seen=new Set;paused=!1;aborted=!1;#I=[];#d;#W;signal;maxDepth;includeChildMatches;constructor(I,d,G){if(this.patterns=I,this.path=d,this.opts=G,this.#W=!G.posix&&G.platform==="win32"?"\\":"/",this.includeChildMatches=G.includeChildMatches!==!1,G.ignore||!this.includeChildMatches){if(this.#d=NK4(G.ignore??[],G),!this.includeChildMatches&&typeof this.#d.add!=="function")throw new Error("cannot ignore child matches, ignore lacks add() method.")}if(this.maxDepth=G.maxDepth||1/0,G.signal)this.signal=G.signal,this.signal.addEventListener("abort",()=>{this.#I.length=0})}#Z(I){return this.seen.has(I)||!!this.#d?.ignored?.(I)}#w(I){return!!this.#d?.childrenIgnored?.(I)}pause(){this.paused=!0}resume(){if(this.signal?.aborted)return;this.paused=!1;let I=void 0;while(!this.paused&&(I=this.#I.shift()))I()}onResume(I){if(this.signal?.aborted)return;if(!this.paused)I();else this.#I.push(I)}async matchCheck(I,d){if(d&&this.opts.nodir)return;let G;if(this.opts.realpath){if(G=I.realpathCached()||await I.realpath(),!G)return;I=G}let C=I.isUnknown()||this.opts.stat?await I.lstat():I;if(this.opts.follow&&this.opts.nodir&&C?.isSymbolicLink()){let W=await C.realpath();if(W&&(W.isUnknown()||this.opts.stat))await W.lstat()}return this.matchCheckTest(C,d)}matchCheckTest(I,d){return I&&(this.maxDepth===1/0||I.depth()<=this.maxDepth)&&(!d||I.canReaddir())&&(!this.opts.nodir||!I.isDirectory())&&(!this.opts.nodir||!this.opts.follow||!I.isSymbolicLink()||!I.realpathCached()?.isDirectory())&&!this.#Z(I)?I:void 0}matchCheckSync(I,d){if(d&&this.opts.nodir)return;let G;if(this.opts.realpath){if(G=I.realpathCached()||I.realpathSync(),!G)return;I=G}let C=I.isUnknown()||this.opts.stat?I.lstatSync():I;if(this.opts.follow&&this.opts.nodir&&C?.isSymbolicLink()){let W=C.realpathSync();if(W&&(W?.isUnknown()||this.opts.stat))W.lstatSync()}return this.matchCheckTest(C,d)}matchFinish(I,d){if(this.#Z(I))return;if(!this.includeChildMatches&&this.#d?.add){let C=`${I.relativePosix()}/**`;this.#d.add(C)}let G=this.opts.absolute===void 0?d:this.opts.absolute;this.seen.add(I);let Z=this.opts.mark&&I.isDirectory()?this.#W:"";if(this.opts.withFileTypes)this.matchEmit(I);else if(G){let C=this.opts.posix?I.fullpathPosix():I.fullpath();this.matchEmit(C+Z)}else{let C=this.opts.posix?I.relativePosix():I.relative(),W=this.opts.dotRelative&&!C.startsWith(".."+this.#W)?"."+this.#W:"";this.matchEmit(!C?"."+Z:W+C+Z)}}async match(I,d,G){let Z=await this.matchCheck(I,G);if(Z)this.matchFinish(Z,d)}matchSync(I,d,G){let Z=this.matchCheckSync(I,G);if(Z)this.matchFinish(Z,d)}walkCB(I,d,G){if(this.signal?.aborted)G();this.walkCB2(I,d,new YS(this.opts),G)}walkCB2(I,d,G,Z){if(this.#w(I))return Z();if(this.signal?.aborted)Z();if(this.paused){this.onResume(()=>this.walkCB2(I,d,G,Z));return}G.processPatterns(I,d);let C=1,W=()=>{if(--C===0)Z()};for(let[w,B,A]of G.matches.entries()){if(this.#Z(w))continue;C++,this.match(w,B,A).then(()=>W())}for(let w of G.subwalkTargets()){if(this.maxDepth!==1/0&&w.depth()>=this.maxDepth)continue;C++;let B=w.readdirCached();if(w.calledReaddir())this.walkCB3(w,B,G,W);else w.readdirCB((A,V)=>this.walkCB3(w,V,G,W),!0)}W()}walkCB3(I,d,G,Z){G=G.filterEntries(I,d);let C=1,W=()=>{if(--C===0)Z()};for(let[w,B,A]of G.matches.entries()){if(this.#Z(w))continue;C++,this.match(w,B,A).then(()=>W())}for(let[w,B]of G.subwalks.entries())C++,this.walkCB2(w,B,G.child(),W);W()}walkCBSync(I,d,G){if(this.signal?.aborted)G();this.walkCB2Sync(I,d,new YS(this.opts),G)}walkCB2Sync(I,d,G,Z){if(this.#w(I))return Z();if(this.signal?.aborted)Z();if(this.paused){this.onResume(()=>this.walkCB2Sync(I,d,G,Z));return}G.processPatterns(I,d);let C=1,W=()=>{if(--C===0)Z()};for(let[w,B,A]of G.matches.entries()){if(this.#Z(w))continue;this.matchSync(w,B,A)}for(let w of G.subwalkTargets()){if(this.maxDepth!==1/0&&w.depth()>=this.maxDepth)continue;C++;let B=w.readdirSync();this.walkCB3Sync(w,B,G,W)}W()}walkCB3Sync(I,d,G,Z){G=G.filterEntries(I,d);let C=1,W=()=>{if(--C===0)Z()};for(let[w,B,A]of G.matches.entries()){if(this.#Z(w))continue;this.matchSync(w,B,A)}for(let[w,B]of G.subwalks.entries())C++,this.walkCB2Sync(w,B,G.child(),W);W()}}class Sk extends V31{matches=new Set;constructor(I,d,G){super(I,d,G)}matchEmit(I){this.matches.add(I)}async walk(){if(this.signal?.aborted)throw this.signal.reason;if(this.path.isUnknown())await this.path.lstat();return await new Promise((I,d)=>{this.walkCB(this.path,this.patterns,()=>{if(this.signal?.aborted)d(this.signal.reason);else I(this.matches)})}),this.matches}walkSync(){if(this.signal?.aborted)throw this.signal.reason;if(this.path.isUnknown())this.path.lstatSync();return this.walkCBSync(this.path,this.patterns,()=>{if(this.signal?.aborted)throw this.signal.reason}),this.matches}}class Lk extends V31{results;constructor(I,d,G){super(I,d,G);this.results=new qg({signal:this.signal,objectMode:!0}),this.results.on("drain",()=>this.resume()),this.results.on("resume",()=>this.resume())}matchEmit(I){if(this.results.write(I),!this.results.flowing)this.pause()}stream(){let I=this.path;if(I.isUnknown())I.lstat().then(()=>{this.walkCB(I,this.patterns,()=>this.results.end())});else this.walkCB(I,this.patterns,()=>this.results.end());return this.results}streamSync(){if(this.path.isUnknown())this.path.lstatSync();return this.walkCBSync(this.path,this.patterns,()=>this.results.end()),this.results}}var QK4=typeof process==="object"&&process&&typeof process.platform==="string"?process.platform:"linux";class jw{absolute;cwd;root;dot;dotRelative;follow;ignore;magicalBraces;mark;matchBase;maxDepth;nobrace;nocase;nodir;noext;noglobstar;pattern;platform;realpath;scurry;stat;signal;windowsPathsNoEscape;withFileTypes;includeChildMatches;opts;patterns;constructor(I,d){if(!d)throw new TypeError("glob options required");if(this.withFileTypes=!!d.withFileTypes,this.signal=d.signal,this.follow=!!d.follow,this.dot=!!d.dot,this.dotRelative=!!d.dotRelative,this.nodir=!!d.nodir,this.mark=!!d.mark,!d.cwd)this.cwd="";else if(d.cwd instanceof URL||d.cwd.startsWith("file://"))d.cwd=zK4(d.cwd);if(this.cwd=d.cwd||"",this.root=d.root,this.magicalBraces=!!d.magicalBraces,this.nobrace=!!d.nobrace,this.noext=!!d.noext,this.realpath=!!d.realpath,this.absolute=d.absolute,this.includeChildMatches=d.includeChildMatches!==!1,this.noglobstar=!!d.noglobstar,this.matchBase=!!d.matchBase,this.maxDepth=typeof d.maxDepth==="number"?d.maxDepth:1/0,this.stat=!!d.stat,this.ignore=d.ignore,this.withFileTypes&&this.absolute!==void 0)throw new Error("cannot set absolute and withFileTypes:true");if(typeof I==="string")I=[I];if(this.windowsPathsNoEscape=!!d.windowsPathsNoEscape||d.allowWindowsEscape===!1,this.windowsPathsNoEscape)I=I.map((B)=>B.replace(/\\/g,"/"));if(this.matchBase){if(d.noglobstar)throw new TypeError("base matching requires globstar");I=I.map((B)=>B.includes("/")?B:`./**/${B}`)}if(this.pattern=I,this.platform=d.platform||QK4,this.opts={...d,platform:this.platform},d.scurry){if(this.scurry=d.scurry,d.nocase!==void 0&&d.nocase!==d.scurry.nocase)throw new Error("nocase option contradicts provided scurry option")}else{let B=d.platform==="win32"?AS:d.platform==="darwin"?Mk:d.platform?VS:Xn1;this.scurry=new B(this.cwd,{nocase:d.nocase,fs:d.fs})}this.nocase=this.scurry.nocase;let G=this.platform==="darwin"||this.platform==="win32",Z={...d,dot:this.dot,matchBase:this.matchBase,nobrace:this.nobrace,nocase:this.nocase,nocaseMagicOnly:G,nocomment:!0,noext:this.noext,nonegate:!0,optimizationLevel:2,platform:this.platform,windowsPathsNoEscape:this.windowsPathsNoEscape,debug:!!this.opts.debug},C=this.pattern.map((B)=>new XZ(B,Z)),[W,w]=C.reduce((B,A)=>{return B[0].push(...A.set),B[1].push(...A.globParts),B},[[],[]]);this.patterns=W.map((B,A)=>{let V=w[A];if(!V)throw new Error("invalid pattern object");return new MQ(B,V,0,this.platform)})}async walk(){return[...await new Sk(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).walk()]}walkSync(){return[...new Sk(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).walkSync()]}stream(){return new Lk(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).stream()}streamSync(){return new Lk(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).streamSync()}iterateSync(){return this.streamSync()[Symbol.iterator]()}[Symbol.iterator](){return this.iterateSync()}iterate(){return this.stream()[Symbol.asyncIterator]()}[Symbol.asyncIterator](){return this.iterate()}}var X31=(I,d={})=>{if(!Array.isArray(I))I=[I];for(let G of I)if(new XZ(G,d).hasMagic())return!0;return!1};function Pk(I,d={}){return new jw(I,d).streamSync()}function Hn1(I,d={}){return new jw(I,d).stream()}function Fn1(I,d={}){return new jw(I,d).walkSync()}async function Dn1(I,d={}){return new jw(I,d).walk()}function $k(I,d={}){return new jw(I,d).iterateSync()}function gn1(I,d={}){return new jw(I,d).iterate()}var fK4=Pk,qK4=Object.assign(Hn1,{sync:Pk}),RK4=$k,UK4=Object.assign(gn1,{sync:$k}),vK4=Object.assign(Fn1,{stream:Pk,iterate:$k}),yk=Object.assign(Dn1,{glob:Dn1,globSync:Fn1,sync:vK4,globStream:Hn1,stream:qK4,globStreamSync:Pk,streamSync:fK4,globIterate:gn1,iterate:UK4,globIterateSync:$k,iterateSync:RK4,Glob:jw,hasMagic:X31,escape:qQ,unescape:yC});yk.glob=yk;import{cwd as q40}from"process";var F40=J1(D40(),1);import{fileURLToPath as el4,resolve as tl4}from"node:url";import*as Kx from"path";var g40=J1(qS(),1);import{execFile as Ib4}from"child_process";var db4=el4(import.meta.url),Gb4=tl4(db4,"."),wI=g40.default("claude:ripgrep"),J40=!!process.env.USE_BUILTIN_RIPGREP;if(J40)wI("Using builtin ripgrep because USE_BUILTIN_RIPGREP is set");var ES=a2(()=>{let{cmd:I}=F40.findActualExecutable("rg",[]);if(wI(`ripgrep initially resolved as: ${I}`),I!=="rg"&&!J40)return I;else{let d=Kx.resolve(Gb4,"vendor","ripgrep");if(process.platform==="win32")return Kx.resolve(d,"x64-win32","rg.exe");let G=Kx.resolve(d,`${process.arch}-${process.platform}`,"rg");return wI("internal ripgrep resolved as: %s",G),G}});async function MS(I,d,G){await Zb4();let Z=ES();return wI("ripgrep called: %s %o",Z,d,I),new Promise((C)=>{Ib4(ES(),[...I,d],{maxBuffer:1e6,signal:G,timeout:1e4},(W,w)=>{if(W){if(W.code!==1)wI("ripgrep error: %o",W),X0(W);C([])}else wI("ripgrep succeeded with %s",w),C(w.trim().split(` +`).filter(Boolean))})})}async function K40(I,d,G){try{return wI("listAllContentFiles called: %s",I),(await MS(["-l",".",I],I,d)).slice(0,G)}catch(Z){return wI("listAllContentFiles failed: %o",Z),X0(Z),[]}}var H40=!1;async function Zb4(){if(process.platform!=="darwin"||H40)return;if(H40=!0,wI("checking if ripgrep is already signed"),!(await E5("codesign",["-vv","-d",ES()],void 0,void 0,!1)).stdout.split(` +`).find((G)=>G.includes("linker-signed"))){wI("seems to be already signed");return}try{wI("signing ripgrep");let G=await E5("codesign",["--sign","-","--force","--preserve-metadata=entitlements,requirements,flags,runtime",ES()]);if(G.code!==0)wI("failed to sign ripgrep: %o",G),X0(`Failed to sign ripgrep: ${G.stdout} ${G.stderr}`);wI("removing quarantine");let Z=await E5("xattr",["-d","com.apple.quarantine",ES()]);if(Z.code!==0)wI("failed to remove quarantine: %o",Z),X0(`Failed to remove quarantine: ${Z.stdout} ${Z.stderr}`)}catch(G){wI("failed during sign: %o",G),X0(G)}}async function M40(I,d,{limit:G,offset:Z},C){let w=(await yk([I],{cwd:d,nocase:!0,nodir:!0,signal:C,stat:!0,withFileTypes:!0})).sort((A,V)=>(A.mtimeMs??0)-(V.mtimeMs??0)),B=w.length>Z+G;return{files:w.slice(Z,Z+G).map((A)=>A.fullpath()),truncated:B}}function x81(I,d){if(I===".")return!0;if(I.startsWith("~"))return!1;if(I.includes("\x00")||d.includes("\x00"))return!1;let G=N40(I),Z=N40(d);G=G.endsWith(Nx)?G:G+Nx,Z=Z.endsWith(Nx)?Z:Z+Nx;let C=z40(q40(),Z,G),W=z40(q40(),Z);return C.startsWith(W)}function S40(I,d=0,G){let Z=dd(I),W=Cb4(I,Z).split(/\r?\n/),w=G!==void 0&&W.length-d>G?W.slice(d,d+G):W.slice(d);return{content:w.join(` +`),lineCount:w.length,totalLines:W.length}}function Xf(I,d,G,Z){let C=d;if(Z==="CRLF")C=d.split(` +`).join(`\r +`);Wb4(I,C,{encoding:G,flush:!0})}var _b4=new ZV({fetchMethod:(I)=>Db4(I),ttl:300000,ttlAutopurge:!1,max:1000});async function L40(I){return _b4.fetch(SS(I))}async function Db4(I){let d=new AbortController;setTimeout(()=>{d.abort()},1000);let G=await K40(I,d.signal,15),Z=0;for(let C of G)if(Sg(C)==="CRLF")Z++;return Z>3?"CRLF":"LF"}function y40(I,d,G){if(I.has(d))return I.get(d);let Z=G();return I.set(d,Z),Z}var Hb4=new ZV({fetchMethod:(I)=>P40(I),ttl:300000,ttlAutopurge:!1,max:1000});function dd(I){let d=SS(I);return y40(Hb4,d,()=>P40(d))}function P40(I){let G=Buffer.alloc(4096),Z=void 0;try{Z=R40(I,"r");let C=U40(Z,G,0,4096,0);if(C>=2){if(G[0]===255&&G[1]===254)return"utf16le"}if(C>=3&&G[0]===239&&G[1]===187&&G[2]===191)return"utf8";return G.slice(0,C).toString("utf8").length>0?"utf8":"ascii"}catch(C){return X0(`Error detecting encoding for file ${I}: ${C}`),"utf8"}finally{if(Z)v40(Z)}}var Fb4=new ZV({fetchMethod:(I)=>$40(I),ttl:300000,ttlAutopurge:!1,max:1000});function Sg(I){let d=SS(I);return y40(Fb4,d,()=>$40(d))}function $40(I,d="utf8"){try{let G=Buffer.alloc(4096),Z=R40(I,"r"),C=U40(Z,G,0,4096,0);v40(Z);let W=G.toString(d,0,C),w=0,B=0;for(let A=0;A0&&W[A-1]==="\r")w++;else B++;return w>B?"CRLF":"LF"}catch(G){return X0(`Error detecting line endings for file ${I}: ${G}`),"LF"}}function c81(I){let d=E40(I)?I:SS(R0(),I);if(d.endsWith(" AM.png"))return d.replace(" AM.png",`${String.fromCharCode(8239)}AM.png`);if(d.endsWith(" PM.png"))return d.replace(" PM.png",`${String.fromCharCode(8239)}PM.png`);return d}function p81(I){return I?E40(I)?I:SS(R0(),I):void 0}function u40(I){let d=p81(I),G=d?Vb4(R0(),d):void 0;return{absolutePath:d,relativePath:G}}function Yf(I){try{let d=Xb4(I),G=Q40(I,f40(I));if(!wb4(d))return;let W=Bb4(d).filter((w)=>Q40(w,f40(w))===G&&Yb4(d,w)!==I)[0];if(W)return W;return}catch(d){X0(`Error finding similar file for ${I}: ${d}`);return}}function _f({content:I,startLine:d}){if(!I)return"";return I.split(/\r?\n/).map((G,Z)=>{let C=Z+d,W=String(C);if(W.length>=6)return`${W} ${G}`;return`${W.padStart(6," ")} ${G}`}).join(` +`)}function T40(I){try{let d=Ab4(I),G=d.readSync();return d.closeSync(),G===null}catch(d){return X0(`Error checking directory: ${d}`),!1}}function zQ(){let I=I5();if(!I.hasCompletedProjectOnboarding)o9({...I,hasCompletedProjectOnboarding:!0})}function Nb4(){let I=q2();p4({...I,lastReleaseNotesSeen:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION})}function i81({workspaceDir:I}){let G=!I5().hasCompletedProjectOnboarding,C=q2().lastReleaseNotesSeen,W=[];if(!C||O40.gt({ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,C))W=Xk[{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION]||[];let w=W.length>0;if(T2.useEffect(()=>{if(w&&!G)Nb4()},[w,G]),!G&&!w)return null;let B=gb4(Jb4(I,"CLAUDE.md")),A=T40(I),V=!B&&!A,X=NQ.isEnabled&&!q2().shiftEnterKeyBindingInstalled,_=r1();return T2.createElement(p,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},G&&T2.createElement(T2.Fragment,null,T2.createElement(u,{color:_.secondaryText},"Tips for getting started:"),T2.createElement(b8,null,(()=>{let F=[];if(A)F.push(T2.createElement(b8.Item,{key:"workspace"},T2.createElement(u,{color:_.secondaryText},"Ask Claude to create a new app or clone a repository.")));if(V)F.push(T2.createElement(b8.Item,{key:"claudemd"},T2.createElement(u,{color:_.secondaryText},"Run ",T2.createElement(u,{color:_.text},"/init")," to create a CLAUDE.md file with instructions for Claude.")));if(X)F.push(T2.createElement(b8.Item,{key:"terminal"},T2.createElement(u,{color:_.secondaryText},"Run ",T2.createElement(u,{color:_.text},"/terminal-setup"),T2.createElement(u,{bold:!1}," to set up terminal integration"))));return F.push(T2.createElement(b8.Item,{key:"questions"},T2.createElement(u,{color:_.secondaryText},"Ask Claude questions about your codebase."))),F.push(T2.createElement(b8.Item,{key:"changes"},T2.createElement(u,{color:_.secondaryText},"Ask Claude to implement changes to your codebase."))),F})())),!G&&w&&T2.createElement(p,{borderColor:r1().secondaryBorder,flexDirection:"column",marginRight:1},T2.createElement(p,{flexDirection:"column",gap:0},T2.createElement(p,{marginBottom:1},T2.createElement(u,null,"\uD83C\uDD95 What's new in v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,":")),T2.createElement(p,{flexDirection:"column",marginLeft:1},W.map((F,g)=>T2.createElement(u,{key:g,color:r1().secondaryText},"• ",F))))),I===Kb4()&&T2.createElement(u,{color:r1().warning},"Note: You have launched ",T2.createElement(u,{bold:!0},"claude")," in your home directory. For the best experience, launch it in a project directory instead."))}var Q_=J1(u1(),1);var Df=J1(u1(),1);var LS=J1(u1(),1);function m40({isFocused:I,isSelected:d,smallPointer:G,children:Z}){let{styles:C}=Q9("Select");return LS.default.createElement(p,{...C.option({isFocused:I})},I&&LS.default.createElement(u,{...C.focusIndicator()},G?k5.triangleDownSmall:k5.pointer),LS.default.createElement(u,{...C.label({isFocused:I,isSelected:d})},Z),d&&LS.default.createElement(u,{...C.selectedIndicator()},k5.tick))}var Gd=J1(u1(),1);import{isDeepStrictEqual as zb4}from"node:util";class zx extends Map{first;constructor(I){let d=[],G,Z,C=0;for(let W of I){let w={...W,previous:Z,next:void 0,index:C};if(Z)Z.next=w;G||=w;let B="value"in W?W.value:n81(W);d.push([B,w]),C++,Z=w}super(d);this.first=G}}var Qb4=(I,d)=>{switch(d.type){case"focus-next-option":{if(!I.focusedValue)return I;let G=I.optionMap.get(I.focusedValue);if(!G)return I;let Z=G.next;while(Z&&!("value"in Z))Z=Z.next;if(!Z)return I;if(!(Z.index>=I.visibleToIndex))return{...I,focusedValue:Z.value};let W=Math.min(I.optionMap.size,I.visibleToIndex+1),w=W-I.visibleOptionCount;return{...I,focusedValue:Z.value,visibleFromIndex:w,visibleToIndex:W}}case"focus-previous-option":{if(!I.focusedValue)return I;let G=I.optionMap.get(I.focusedValue);if(!G)return I;let Z=G.previous;while(Z&&!("value"in Z))Z=Z.previous;if(!Z)return I;if(!(Z.index<=I.visibleFromIndex))return{...I,focusedValue:Z.value};let W=Math.max(0,I.visibleFromIndex-1),w=W+I.visibleOptionCount;return{...I,focusedValue:Z.value,visibleFromIndex:W,visibleToIndex:w}}case"select-focused-option":return{...I,previousValue:I.value,value:I.focusedValue};case"reset":return d.state;case"set-focus":return{...I,focusedValue:d.value}}},r81=(I)=>I.flatMap((d)=>{if("options"in d){let G=r81(d.options),Z=G.flatMap((W)=>("value"in W)?W.value:[]);return[...d.header!==void 0?[{header:d.header,optionValues:Z}]:[],...G]}return d}),l40=({visibleOptionCount:I,defaultValue:d,options:G})=>{let Z=r81(G),C=typeof I==="number"?Math.min(I,Z.length):Z.length,W=new zx(Z),w=W.first,B=w&&"value"in w?w.value:void 0;return{optionMap:W,visibleOptionCount:C,focusedValue:B,visibleFromIndex:0,visibleToIndex:C,previousValue:d,value:d}},b40=({visibleOptionCount:I=5,options:d,defaultValue:G,onChange:Z,onFocus:C,focusValue:W})=>{let w=r81(d),[B,A]=Gd.useReducer(Qb4,{visibleOptionCount:I,defaultValue:G,options:d},l40),[V,X]=Gd.useState(w);if(w!==V&&!zb4(w,V))A({type:"reset",state:l40({visibleOptionCount:I,defaultValue:G,options:d})}),X(w);let _=Gd.useCallback(()=>{A({type:"focus-next-option"})},[]),F=Gd.useCallback(()=>{A({type:"focus-previous-option"})},[]),g=Gd.useCallback(()=>{A({type:"select-focused-option"})},[]),J=Gd.useMemo(()=>{return w.map((K,Q)=>({...K,index:Q})).slice(B.visibleFromIndex,B.visibleToIndex)},[w,B.visibleFromIndex,B.visibleToIndex]);return Gd.useEffect(()=>{if(B.value&&B.previousValue!==B.value)Z?.(B.value)},[B.previousValue,B.value,d,Z]),Gd.useEffect(()=>{if(B.focusedValue)C?.(B.focusedValue)},[B.focusedValue,C]),Gd.useEffect(()=>{if(W)A({type:"set-focus",value:W})},[W]),{focusedValue:B.focusedValue,visibleFromIndex:B.visibleFromIndex,visibleToIndex:B.visibleToIndex,value:B.value,visibleOptions:J,focusNextOption:_,focusPreviousOption:F,selectFocusedOption:g}};var h40=({isDisabled:I=!1,state:d})=>{C4((G,Z)=>{if(Z.downArrow)d.focusNextOption();if(Z.upArrow)d.focusPreviousOption();if(Z.return)d.selectFocusedOption()},{isActive:!I})};var n81=(I)=>`HEADER-${I.optionValues.join(",")}`;function N_({isDisabled:I=!1,visibleOptionCount:d=5,highlightText:G,options:Z,defaultValue:C,onChange:W,onFocus:w,focusValue:B}){let A=b40({visibleOptionCount:d,options:Z,defaultValue:C,onChange:W,onFocus:w,focusValue:B});h40({isDisabled:I,state:A});let{styles:V}=Q9("Select");return Df.default.createElement(p,{...V.container()},A.visibleOptions.map((X)=>{let _="value"in X?X.value:n81(X),F=!I&&A.focusedValue!==void 0&&("value"in X?A.focusedValue===X.value:X.optionValues.includes(A.focusedValue)),g=!!A.value&&("value"in X?A.value===X.value:X.optionValues.includes(A.value)),J="header"in X,K="label"in X?X.label:X.header,Q=K;if(G&&K.includes(G)){let E=K.indexOf(G);Q=Df.default.createElement(Df.default.Fragment,null,K.slice(0,E),Df.default.createElement(u,{...V.highlightedText()},G),K.slice(E+G.length))}return Df.default.createElement(m40,{key:_,isFocused:F,isSelected:g,smallPointer:J},Q)}))}var s81=J1(u1(),1);var yg=J1(r40(),1);var a40=process.env.TERM_PROGRAM==="Apple_Terminal",w5={};w5.cursorTo=(I,d)=>{if(typeof I!=="number")throw new TypeError("The `x` argument is required");if(typeof d!=="number")return"\x1B["+(I+1)+"G";return"\x1B["+(d+1)+";"+(I+1)+"H"};w5.cursorMove=(I,d)=>{if(typeof I!=="number")throw new TypeError("The `x` argument is required");let G="";if(I<0)G+="\x1B["+-I+"D";else if(I>0)G+="\x1B["+I+"C";if(d<0)G+="\x1B["+-d+"A";else if(d>0)G+="\x1B["+d+"B";return G};w5.cursorUp=(I=1)=>"\x1B["+I+"A";w5.cursorDown=(I=1)=>"\x1B["+I+"B";w5.cursorForward=(I=1)=>"\x1B["+I+"C";w5.cursorBackward=(I=1)=>"\x1B["+I+"D";w5.cursorLeft="\x1B[G";w5.cursorSavePosition=a40?"\x1B7":"\x1B[s";w5.cursorRestorePosition=a40?"\x1B8":"\x1B[u";w5.cursorGetPosition="\x1B[6n";w5.cursorNextLine="\x1B[E";w5.cursorPrevLine="\x1B[F";w5.cursorHide="\x1B[?25l";w5.cursorShow="\x1B[?25h";w5.eraseLines=(I)=>{let d="";for(let G=0;G{return["\x1B]","8",";",";",d,"\x07",I,"\x1B]","8",";",";","\x07"].join("")};w5.image=(I,d={})=>{let G="\x1B]1337;File=inline=1";if(d.width)G+=`;width=${d.width}`;if(d.height)G+=`;height=${d.height}`;if(d.preserveAspectRatio===!1)G+=";preserveAspectRatio=0";return G+":"+I.toString("base64")+"\x07"};w5.iTerm={setCwd:(I=process.cwd())=>`\x1B]50;CurrentDir=${I}\x07`,annotation:(I,d={})=>{let G="\x1B]1337;",Z=typeof d.x!=="undefined",C=typeof d.y!=="undefined";if((Z||C)&&!(Z&&C&&typeof d.length!=="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");if(I=I.replace(/\|/g,""),G+=d.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",d.length>0)G+=(Z?[I,d.length,d.x,d.y]:[d.length,I]).join("|");else G+=I;return G+"\x07"}};var s40=w5;var Qx=J1(t40(),1);function Lg(I,d,{target:G="stdout",...Z}={}){if(!Qx.default[G]){if(Z.fallback===!1)return I;return typeof Z.fallback==="function"?Z.fallback(I,d):`${I} (​${d}​)`}return s40.link(I,d)}Lg.isSupported=Qx.default.stdout;Lg.stderr=(I,d,G={})=>Lg(I,d,{target:"stderr",...G});Lg.stderr.isSupported=Qx.default.stderr;var I50=({children:I,url:d,fallback:G=!0})=>s81.default.createElement(Gk,{transform:(Z)=>Lg(Z,d,{fallback:G})},s81.default.createElement(u,null,I));I50.propTypes={children:yg.default.oneOfType([yg.default.arrayOf(yg.default.node),yg.default.node]).isRequired,url:yg.default.string.isRequired,fallback:yg.default.bool};var Pg=I50;var fx=J1(u1(),1);var Ub4=["iTerm.app","WezTerm","Hyper","VSCode"];function z_({url:I,children:d}){let G=Ub4.includes(K2.terminal??""),Z=d||I;if(G||Z!==I)return fx.default.createElement(Pg,{url:I},fx.default.createElement(u,null,Z));else return fx.default.createElement(u,{underline:!0},Z)}function d50({onDone:I}){return C4((d,G)=>{if(G.ctrl&&(d==="c"||d==="d")||G.escape)I()}),Q_.default.createElement(p,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:r1().secondaryBorder},Q_.default.createElement(p,{marginBottom:1,flexDirection:"column"},Q_.default.createElement(u,{bold:!0},"You've spent $5 on the Anthropic API this session."),Q_.default.createElement(u,null,"Learn more about how to monitor your spending:"),Q_.default.createElement(z_,{url:"https://docs.anthropic.com/s/claude-code-cost"})),Q_.default.createElement(p,null,Q_.default.createElement(N_,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:I})))}var g4=J1(u1(),1),h5=J1(u1(),1);var n4=J1(u1(),1);var o81=46;function G50({mcpClients:I,isDefaultModel:d=!1}){let G=Math.max(o81,R0().length+12),Z=r1(),C=process.env.ANTHROPIC_MODEL,W=vw(),w=!Lb(),B=!d&&Boolean(C),A=!1;return n4.createElement(p,{flexDirection:"column"},n4.createElement(p,{borderColor:Z.claude,borderStyle:"round",flexDirection:"column",gap:1,paddingLeft:1,width:G},n4.createElement(u,null,n4.createElement(u,{color:Z.claude},"✻")," Welcome to"," ",n4.createElement(u,{bold:!0},K4)," ",n4.createElement(u,null,"research preview!")),n4.createElement(n4.Fragment,null,n4.createElement(p,{paddingLeft:2,flexDirection:"column",gap:1},n4.createElement(u,{color:Z.secondaryText,italic:!0},"/help for help",!1),n4.createElement(u,{color:Z.secondaryText},"cwd: ",R0())),!1),I.length?n4.createElement(p,{borderColor:Z.secondaryBorder,borderStyle:"single",borderBottom:!1,borderLeft:!1,borderRight:!1,borderTop:!0,flexDirection:"column",marginLeft:2,marginRight:1,paddingTop:1},n4.createElement(p,{marginBottom:1},n4.createElement(u,{color:Z.secondaryText},"MCP Servers:")),I.map((V,X)=>n4.createElement(p,{key:X,width:G-6},n4.createElement(u,{color:Z.secondaryText},"• ",V.name),n4.createElement(p,{flexGrow:1}),n4.createElement(u,{bold:!0,color:V.type==="connected"?Z.success:Z.error},V.type==="connected"?"connected":"failed")))):null))}var B6=J1(u1(),1);var JX=J1(u1(),1);import{randomUUID as AK}from"crypto";var p0=J1(u1(),1),iZ=J1(u1(),1);var Z50=()=>[],C50=()=>{};function W50(I){Z50=I}function yS(){return Z50}function w50(I){C50=I}function qx(){return C50}var d71=J1(u1(),1);var _50=J1(u1(),1);var e81=J1(u1(),1),B50=2000;function $g(I,d,G){let Z=e81.useRef(0),C=e81.useRef();return()=>{let W=Date.now();if(W-Z.current<=B50&&C.current){if(C.current)clearTimeout(C.current),C.current=void 0;d(),I(!1)}else G?.(),I(!0),C.current=setTimeout(()=>I(!1),B50);Z.current=W}}class Zd{measuredText;selection;offset;constructor(I,d=0,G=0){this.measuredText=I;this.selection=G;this.offset=Math.max(0,Math.min(this.measuredText.text.length,d))}static fromText(I,d,G=0,Z=0){return new Zd(new A50(I,d-1),G,Z)}render(I,d,G){let{line:Z,column:C}=this.getPosition();return this.measuredText.getWrappedText().map((W,w,B)=>{let A=W;if(d&&w===B.length-1){let V=Math.max(0,W.length-6);A=d.repeat(V)+W.slice(V)}if(Z!=w)return A.trimEnd();return A.slice(0,C)+G(A[C]||I)+A.trimEnd().slice(C+1)}).join(` +`)}left(){return new Zd(this.measuredText,this.offset-1)}right(){return new Zd(this.measuredText,this.offset+1)}up(){let{line:I,column:d}=this.getPosition();if(I==0)return new Zd(this.measuredText,0,0);let G=this.getOffset({line:I-1,column:d});return new Zd(this.measuredText,G,0)}down(){let{line:I,column:d}=this.getPosition();if(I>=this.measuredText.lineCount-1)return new Zd(this.measuredText,this.text.length,0);let G=this.getOffset({line:I+1,column:d});return new Zd(this.measuredText,G,0)}startOfLine(){let{line:I}=this.getPosition();return new Zd(this.measuredText,this.getOffset({line:I,column:0}),0)}endOfLine(){let{line:I}=this.getPosition(),d=this.measuredText.getLineLength(I),G=this.getOffset({line:I,column:d});return new Zd(this.measuredText,G,0)}nextWord(){let I=this;while(I.isOverWordChar()&&!I.isAtEnd())I=I.right();while(!I.isOverWordChar()&&!I.isAtEnd())I=I.right();return I}prevWord(){let I=this;if(!I.left().isOverWordChar())I=I.left();while(!I.isOverWordChar()&&!I.isAtStart())I=I.left();if(I.isOverWordChar())while(I.left().isOverWordChar()&&!I.isAtStart())I=I.left();return I}modifyText(I,d=""){let G=this.offset,Z=I.offset,C=this.text.slice(0,G)+d+this.text.slice(Z);return Zd.fromText(C,this.columns,G+d.length)}insert(I){return this.modifyText(this,I)}del(){if(this.isAtEnd())return this;return this.modifyText(this.right())}backspace(){if(this.isAtStart())return this;return this.left().modifyText(this)}deleteToLineStart(){return this.startOfLine().modifyText(this)}deleteToLineEnd(){if(this.text[this.offset]===` +`)return this.modifyText(this.right());return this.modifyText(this.endOfLine())}deleteWordBefore(){if(this.isAtStart())return this;return this.prevWord().modifyText(this)}deleteWordAfter(){if(this.isAtEnd())return this;return this.modifyText(this.nextWord())}isOverWordChar(){let I=this.text[this.offset]??"";return/\w/.test(I)}equals(I){return this.offset===I.offset&&this.measuredText==I.measuredText}isAtStart(){return this.offset==0}isAtEnd(){return this.offset==this.text.length}get text(){return this.measuredText.text}get columns(){return this.measuredText.columns+1}getPosition(){return this.measuredText.getPositionFromOffset(this.offset)}getOffset(I){return this.measuredText.getOffsetFromPosition(I)}}class Rx{text;startOffset;isPrecededByNewline;endsWithNewline;constructor(I,d,G,Z=!1){this.text=I;this.startOffset=d;this.isPrecededByNewline=G;this.endsWithNewline=Z}equals(I){return this.text===I.text&&this.startOffset===I.startOffset}get length(){return this.text.length+(this.endsWithNewline?1:0)}}class A50{text;columns;wrappedLines;constructor(I,d){this.text=I;this.columns=d;this.wrappedLines=this.measureWrappedText()}measureWrappedText(){let I=UM(this.text,this.columns,{hard:!0,trim:!1}),d=[],G=0,Z=-1,C=I.split(` +`);for(let W=0;WW==0||A>0&&this.text[A-1]===` +`;if(w.length===0)if(Z=this.text.indexOf(` +`,Z+1),Z!==-1){let A=Z,V=!0;d.push(new Rx(w,A,B(A),!0))}else{let A=this.text.length;d.push(new Rx(w,A,B(A),!1))}else{let A=this.text.indexOf(w,G);if(A===-1)throw console.log("Debug: Failed to find wrapped line in original text"),console.log("Debug: Current text:",w),console.log("Debug: Full original text:",this.text),console.log("Debug: Search offset:",G),console.log("Debug: Wrapped text:",I),new Error("Failed to find wrapped line in original text");G=A+w.length;let V=A+w.length,X=VI.isPrecededByNewline?I.text:I.text.trimStart())}getLine(I){return this.wrappedLines[Math.max(0,Math.min(I,this.wrappedLines.length-1))]}getOffsetFromPosition(I){let d=this.getLine(I.line),G=d.startOffset+I.column;if(d.text.length===0&&d.endsWithNewline)return d.startOffset;let Z=d.startOffset+d.text.length,C=d.endsWithNewline?Z+1:Z;return Math.min(G,C)}getLineLength(I){let d=this.getLine(I),G=this.getLine(I+1);if(G.equals(d))return this.text.length-d.startOffset;return G.startOffset-d.startOffset-1}getPositionFromOffset(I){let d=this.wrappedLines;for(let Z=0;Z=C.startOffset&&(!W||I{}))(d)}}function D50({value:I,onChange:d,onSubmit:G,onExit:Z,onExitMessage:C,onMessage:W,onHistoryUp:w,onHistoryDown:B,onHistoryReset:A,mask:V="",multiline:X=!1,cursorChar:_,invert:F,columns:g,onImagePaste:J,disableCursorMovementForUpDownKeys:K=!1,externalOffset:Q,onOffsetChange:E}){let S=Q,P=E,$=Zd.fromText(I,g,S),[h,O]=_50.useState(null);function T(){if(!h)return;clearTimeout(h),O(null),W?.(!1)}let V1=$g((B0)=>{T(),C?.(B0,"Ctrl-C")},()=>Z?.(),()=>{if(I)d(""),A?.()}),c=$g((B0)=>{T(),W?.(!!I&&B0,"Press Escape again to clear")},()=>{if(I)d("")});function c1(){return Zd.fromText("",g,0)}let o1=$g((B0)=>C?.(B0,"Ctrl-D"),()=>Z?.());function a1(){if(T(),$.text==="")return o1(),$;return $.del()}function f1(){let B0=X50();if(B0===null){if(process.platform!=="darwin")return $;return W?.(!0,V50),T(),O(setTimeout(()=>{W?.(!1)},4000)),$}return J?.(B0),$.insert(Eb4)}let r=Y50([["a",()=>$.startOfLine()],["b",()=>$.left()],["c",V1],["d",a1],["e",()=>$.endOfLine()],["f",()=>$.right()],["h",()=>$.backspace()],["k",()=>$.deleteToLineEnd()],["l",()=>c1()],["n",()=>e1()],["p",()=>T1()],["u",()=>$.deleteToLineStart()],["v",f1],["w",()=>$.deleteWordBefore()]]),A1=Y50([["b",()=>$.prevWord()],["f",()=>$.nextWord()],["d",()=>$.deleteWordAfter()]]);function m1(B0){if(X&&$.offset>0&&$.text[$.offset-1]==="\\")return $.backspace().insert(` +`);if(B0.meta)return $.insert(` +`);G?.(I)}function T1(){if(K)return w?.(),$;let B0=$.up();if(B0.equals($))w?.();return B0}function e1(){if(K)return B?.(),$;let B0=$.down();if(B0.equals($))B?.();return B0}function F0(B0){switch(!0){case B0.escape:return c;case(B0.leftArrow&&(B0.ctrl||B0.meta||B0.fn)):return()=>$.prevWord();case(B0.rightArrow&&(B0.ctrl||B0.meta||B0.fn)):return()=>$.nextWord();case B0.backspace:return B0.meta?()=>$.deleteWordBefore():()=>$.backspace();case B0.delete:return B0.meta?()=>$.deleteToLineEnd():()=>$.del();case B0.ctrl:return r;case B0.home:return()=>$.startOfLine();case B0.end:return()=>$.endOfLine();case B0.pageDown:return()=>$.endOfLine();case B0.pageUp:return()=>$.startOfLine();case B0.meta:return A1;case B0.return:return()=>m1(B0);case B0.tab:return()=>{};case B0.upArrow:return T1;case B0.downArrow:return e1;case B0.leftArrow:return()=>$.left();case B0.rightArrow:return()=>$.right()}return function(a0){switch(!0){case(a0=="\x1B[H"||a0=="\x1B[1~"):return $.startOfLine();case(a0=="\x1B[F"||a0=="\x1B[4~"):return $.endOfLine();default:return $.insert(a0.replace(/\r/g,` +`))}}}function P0(B0,a0){let e=F0(a0)(B0);if(e){if(!$.equals(e)){if(P(e.offset),$.text!=e.text)d(e.text)}}}return{onInput:P0,renderedValue:$.render(_,V,F),offset:S,setOffset:P}}function mC({value:I,placeholder:d="",focus:G=!0,mask:Z,multiline:C=!1,highlightPastedText:W=!1,showCursor:w=!0,onChange:B,onSubmit:A,onExit:V,onHistoryUp:X,onHistoryDown:_,onExitMessage:F,onMessage:g,onHistoryReset:J,columns:K,onImagePaste:Q,onPaste:E,isDimmed:S=!1,disableCursorMovementForUpDownKeys:P=!1,cursorOffset:$,onChangeCursorOffset:h}){let{onInput:O,renderedValue:T}=D50({value:I,onChange:B,onSubmit:A,onExit:V,onExitMessage:F,onMessage:g,onHistoryReset:J,onHistoryUp:X,onHistoryDown:_,focus:G,mask:Z,multiline:C,cursorChar:w?" ":"",highlightPastedText:W,invert:c0.inverse,themeText:(r)=>c0.hex(r1().text)(r),columns:K,onImagePaste:Q,disableCursorMovementForUpDownKeys:P,externalOffset:$,onOffsetChange:h}),[V1,c]=d71.default.useState({chunks:[],timeoutId:null}),c1=(r)=>{if(r)clearTimeout(r);return setTimeout(()=>{c(({chunks:A1})=>{let m1=A1.join("");return Promise.resolve().then(()=>E(m1)),{chunks:[],timeoutId:null}})},100)};C4((r,A1)=>{if(E&&(r.length>800||V1.timeoutId)){c(({chunks:m1,timeoutId:T1})=>{return{chunks:[...m1,r],timeoutId:c1(T1)}});return}O(r,A1)},{isActive:G});let a1=d?c0.hex(r1().secondaryText)(d):void 0;if(w&&G)a1=d.length>0?c0.inverse(d[0])+c0.hex(r1().secondaryText)(d.slice(1)):c0.inverse(" ");let f1=I.length==0&&d;return d71.default.createElement(u,{wrap:"truncate-end",dimColor:S},f1?a1:T)}var Ux=J1(u1(),1);function G9(){let[I,d]=Ux.useState({columns:process.stdout.columns||80,rows:process.stdout.rows||24});return Ux.useEffect(()=>{function G(){d({columns:process.stdout.columns||80,rows:process.stdout.rows||24})}return process.stdout.on("resize",G),()=>{process.stdout.off("resize",G)}},[]),I}var PS=`claude-cli/${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION} (external)`;var ug="0.36.3";if(!pF)ub(Ph(),{auto:!0});class Y4 extends Error{}class f9 extends Y4{constructor(I,d,G,Z){super(`${f9.makeMessage(I,d,G)}`);this.status=I,this.headers=Z,this.request_id=Z?.["request-id"],this.error=d}static makeMessage(I,d,G){let Z=d?.message?typeof d.message==="string"?d.message:JSON.stringify(d.message):d?JSON.stringify(d):G;if(I&&Z)return`${I} ${Z}`;if(I)return`${I} status code (no body)`;if(Z)return Z;return"(no status code or body)"}static generate(I,d,G,Z){if(!I||!Z)return new rw({message:G,cause:vx(d)});let C=d;if(I===400)return new $S(I,C,G,Z);if(I===401)return new uS(I,C,G,Z);if(I===403)return new TS(I,C,G,Z);if(I===404)return new OS(I,C,G,Z);if(I===409)return new mS(I,C,G,Z);if(I===422)return new lS(I,C,G,Z);if(I===429)return new bS(I,C,G,Z);if(I>=500)return new hS(I,C,G,Z);return new f9(I,C,G,Z)}}class p8 extends f9{constructor({message:I}={}){super(void 0,void 0,I||"Request was aborted.",void 0)}}class rw extends f9{constructor({message:I,cause:d}){super(void 0,void 0,I||"Connection error.",void 0);if(d)this.cause=d}}class Ff extends rw{constructor({message:I}={}){super({message:I??"Request timed out."})}}class $S extends f9{}class uS extends f9{}class TS extends f9{}class OS extends f9{}class mS extends f9{}class lS extends f9{}class bS extends f9{}class hS extends f9{}var Ex=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},Tg=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},td;class f_{constructor(){td.set(this,void 0),this.buffer=new Uint8Array,Ex(this,td,null,"f")}decode(I){if(I==null)return[];let d=I instanceof ArrayBuffer?new Uint8Array(I):typeof I==="string"?new TextEncoder().encode(I):I,G=new Uint8Array(this.buffer.length+d.length);G.set(this.buffer),G.set(d,this.buffer.length),this.buffer=G;let Z=[],C;while((C=Sb4(this.buffer,Tg(this,td,"f")))!=null){if(C.carriage&&Tg(this,td,"f")==null){Ex(this,td,C.index,"f");continue}if(Tg(this,td,"f")!=null&&(C.index!==Tg(this,td,"f")+1||C.carriage)){Z.push(this.decodeText(this.buffer.slice(0,Tg(this,td,"f")-1))),this.buffer=this.buffer.slice(Tg(this,td,"f")),Ex(this,td,null,"f");continue}let W=Tg(this,td,"f")!==null?C.preceding-1:C.preceding,w=this.decodeText(this.buffer.slice(0,W));Z.push(w),this.buffer=this.buffer.slice(C.index),Ex(this,td,null,"f")}return Z}decodeText(I){if(I==null)return"";if(typeof I==="string")return I;if(typeof Buffer!=="undefined"){if(I instanceof Buffer)return I.toString();if(I instanceof Uint8Array)return Buffer.from(I).toString();throw new Y4(`Unexpected: received non-Uint8Array (${I.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`)}if(typeof TextDecoder!=="undefined"){if(I instanceof Uint8Array||I instanceof ArrayBuffer)return this.textDecoder??(this.textDecoder=new TextDecoder("utf8")),this.textDecoder.decode(I);throw new Y4(`Unexpected: received non-Uint8Array/ArrayBuffer (${I.constructor.name}) in a web platform. Please report this error.`)}throw new Y4("Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.")}flush(){if(!this.buffer.length)return[];return this.decode(` +`)}}td=new WeakMap;f_.NEWLINE_CHARS=new Set([` +`,"\r"]);f_.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function Sb4(I,d){for(let C=d??0;C{return{next:()=>{if(C.length===0){let W=G.next();I.push(W),d.push(W)}return C.shift()}}};return[new BI(()=>Z(I),this.controller),new BI(()=>Z(d),this.controller)]}toReadableStream(){let I=this,d,G=new TextEncoder;return new B41({async start(){d=I[Symbol.asyncIterator]()},async pull(Z){try{let{value:C,done:W}=await d.next();if(W)return Z.close();let w=G.encode(JSON.stringify(C)+` +`);Z.enqueue(w)}catch(C){Z.error(C)}},async cancel(){await d.return?.()}})}}async function*Lb4(I,d){if(!I.body)throw d.abort(),new Y4("Attempted to iterate over a response with no body");let G=new H50,Z=new f_,C=Og(I.body);for await(let W of yb4(C))for(let w of Z.decode(W)){let B=G.decode(w);if(B)yield B}for(let W of Z.flush()){let w=G.decode(W);if(w)yield w}}async function*yb4(I){let d=new Uint8Array;for await(let G of I){if(G==null)continue;let Z=G instanceof ArrayBuffer?new Uint8Array(G):typeof G==="string"?new TextEncoder().encode(G):G,C=new Uint8Array(d.length+Z.length);C.set(d),C.set(Z,d.length),d=C;let W;while((W=Pb4(d))!==-1)yield d.slice(0,W),d=d.slice(W)}if(d.length>0)yield d}function Pb4(I){for(let Z=0;ZI!=null&&typeof I==="object"&&typeof I.url==="string"&&typeof I.blob==="function",Tb4=(I)=>I!=null&&typeof I==="object"&&typeof I.name==="string"&&typeof I.lastModified==="number"&&kS(I),kS=(I)=>I!=null&&typeof I==="object"&&typeof I.size==="number"&&typeof I.type==="string"&&typeof I.text==="function"&&typeof I.slice==="function"&&typeof I.arrayBuffer==="function";async function F50(I,d,G){if(I=await I,Tb4(I))return I;if(ub4(I)){let C=await I.blob();d||(d=new URL(I.url).pathname.split(/[\\/]/).pop()??"unknown_file");let W=kS(C)?[await C.arrayBuffer()]:[C];return new Pb(W,d,G)}let Z=await Ob4(I);if(d||(d=lb4(I)??"unknown_file"),!G?.type){let C=Z[0]?.type;if(typeof C==="string")G={...G,type:C}}return new Pb(Z,d,G)}async function Ob4(I){let d=[];if(typeof I==="string"||ArrayBuffer.isView(I)||I instanceof ArrayBuffer)d.push(I);else if(kS(I))d.push(await I.arrayBuffer());else if(bb4(I))for await(let G of I)d.push(G);else throw new Error(`Unexpected data type: ${typeof I}; constructor: ${I?.constructor?.name}; props: ${mb4(I)}`);return d}function mb4(I){return`[${Object.getOwnPropertyNames(I).map((G)=>`"${G}"`).join(", ")}]`}function lb4(I){return G71(I.name)||G71(I.filename)||G71(I.path)?.split(/[\\/]/).pop()}var G71=(I)=>{if(typeof I==="string")return I;if(typeof Buffer!=="undefined"&&I instanceof Buffer)return String(I);return},bb4=(I)=>I!=null&&typeof I==="object"&&typeof I[Symbol.asyncIterator]==="function",Z71=(I)=>I&&typeof I==="object"&&I.body&&I[Symbol.toStringTag]==="MultipartBody";var jb4=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},kb4=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},Mx;async function z50(I){let{response:d}=I;if(I.options.stream){if(Jf("response",d.status,d.url,d.headers,d.body),I.options.__streamClass)return I.options.__streamClass.fromSSEResponse(d,I.controller);return BI.fromSSEResponse(d,I.controller)}if(d.status===204)return null;if(I.options.__binaryResponse)return d;let G=d.headers.get("content-type");if(G?.includes("application/json")||G?.includes("application/vnd.api+json")){let W=await d.json();return Jf("response",d.status,d.url,d.headers,W),Q50(W,d)}let C=await d.text();return Jf("response",d.status,d.url,d.headers,C),C}function Q50(I,d){if(!I||typeof I!=="object"||Array.isArray(I))return I;return Object.defineProperty(I,"_request_id",{value:d.headers.get("request-id"),enumerable:!1})}class Sx extends Promise{constructor(I,d=z50){super((G)=>{G(null)});this.responsePromise=I,this.parseResponse=d}_thenUnwrap(I){return new Sx(this.responsePromise,async(d)=>Q50(I(await this.parseResponse(d),d),d.response))}asResponse(){return this.responsePromise.then((I)=>I.response)}async withResponse(){let[I,d]=await Promise.all([this.parse(),this.asResponse()]);return{data:I,response:d,request_id:d.headers.get("request-id")}}parse(){if(!this.parsedPromise)this.parsedPromise=this.responsePromise.then(this.parseResponse);return this.parsedPromise}then(I,d){return this.parse().then(I,d)}catch(I){return this.parse().catch(I)}finally(I){return this.parse().finally(I)}}class mg{constructor({baseURL:I,maxRetries:d=2,timeout:G=600000,httpAgent:Z,fetch:C}){this.baseURL=I,this.maxRetries=C71("maxRetries",d),this.timeout=C71("timeout",G),this.httpAgent=Z,this.fetch=C??w41}authHeaders(I){return{}}defaultHeaders(I){return{Accept:"application/json","Content-Type":"application/json","User-Agent":this.getUserAgent(),...ib4(),...this.authHeaders(I)}}validateHeaders(I,d){}defaultIdempotencyKey(){return`stainless-node-retry-${sb4()}`}get(I,d){return this.methodRequest("get",I,d)}post(I,d){return this.methodRequest("post",I,d)}patch(I,d){return this.methodRequest("patch",I,d)}put(I,d){return this.methodRequest("put",I,d)}delete(I,d){return this.methodRequest("delete",I,d)}methodRequest(I,d,G){return this.request(Promise.resolve(G).then(async(Z)=>{let C=Z&&kS(Z?.body)?new DataView(await Z.body.arrayBuffer()):Z?.body instanceof DataView?Z.body:Z?.body instanceof ArrayBuffer?new DataView(Z.body):Z&&ArrayBuffer.isView(Z?.body)?new DataView(Z.body.buffer):Z?.body;return{method:I,path:d,...Z,body:C}}))}getAPIList(I,d,G){return this.requestAPIList(d,{method:"get",path:I,...G})}calculateContentLength(I){if(typeof I==="string"){if(typeof Buffer!=="undefined")return Buffer.byteLength(I,"utf8").toString();if(typeof TextEncoder!=="undefined")return new TextEncoder().encode(I).length.toString()}else if(ArrayBuffer.isView(I))return I.byteLength.toString();return null}buildRequest(I,{retryCount:d=0}={}){I={...I};let{method:G,path:Z,query:C,headers:W={}}=I,w=ArrayBuffer.isView(I.body)||I.__binaryRequest&&typeof I.body==="string"?I.body:Z71(I.body)?I.body.body:I.body?JSON.stringify(I.body,null,2):null,B=this.calculateContentLength(w),A=this.buildURL(Z,C);if("timeout"in I)C71("timeout",I.timeout);I.timeout=I.timeout??this.timeout;let V=I.httpAgent??this.httpAgent??A41(A),X=I.timeout+1000;if(typeof V?.options?.timeout==="number"&&X>(V.options.timeout??0))V.options.timeout=X;if(this.idempotencyHeader&&G!=="get"){if(!I.idempotencyKey)I.idempotencyKey=this.defaultIdempotencyKey();W[this.idempotencyHeader]=I.idempotencyKey}let _=this.buildHeaders({options:I,headers:W,contentLength:B,retryCount:d});return{req:{method:G,...w&&{body:w},headers:_,...V&&{agent:V},signal:I.signal??null},url:A,timeout:I.timeout}}buildHeaders({options:I,headers:d,contentLength:G,retryCount:Z}){let C={};if(G)C["content-length"]=G;let W=this.defaultHeaders(I);if(N50(C,W),N50(C,d),Z71(I.body)&&pF!=="node")delete C["content-type"];if(gf(W,"x-stainless-retry-count")===void 0&&gf(d,"x-stainless-retry-count")===void 0)C["x-stainless-retry-count"]=String(Z);if(gf(W,"x-stainless-timeout")===void 0&&gf(d,"x-stainless-timeout")===void 0&&I.timeout)C["x-stainless-timeout"]=String(I.timeout);return this.validateHeaders(C,d),C}async prepareOptions(I){}async prepareRequest(I,{url:d,options:G}){}parseHeaders(I){return!I?{}:(Symbol.iterator in I)?Object.fromEntries(Array.from(I).map((d)=>[...d])):{...I}}makeStatusError(I,d,G,Z){return f9.generate(I,d,G,Z)}request(I,d=null){return new Sx(this.makeRequest(I,d))}async makeRequest(I,d){let G=await I,Z=G.maxRetries??this.maxRetries;if(d==null)d=Z;await this.prepareOptions(G);let{req:C,url:W,timeout:w}=this.buildRequest(G,{retryCount:Z-d});if(await this.prepareRequest(C,{url:W,options:G}),Jf("request",W,G,C.headers),G.signal?.aborted)throw new p8;let B=new AbortController,A=await this.fetchWithTimeout(W,C,w,B).catch(vx);if(A instanceof Error){if(G.signal?.aborted)throw new p8;if(d)return this.retryRequest(G,d);if(A.name==="AbortError")throw new Ff;throw new rw({cause:A})}let V=jS(A.headers);if(!A.ok){if(d&&this.shouldRetry(A)){let K=`retrying, ${d} attempts remaining`;return Jf(`response (error; ${K})`,A.status,W,V),this.retryRequest(G,d,V)}let X=await A.text().catch((K)=>vx(K).message),_=w71(X),F=_?void 0:X;throw Jf(`response (error; ${d?"(error; no more retries left)":"(error; not retryable)"})`,A.status,W,V,F),this.makeStatusError(A.status,_,F,V)}return{response:A,options:G,controller:B}}requestAPIList(I,d){let G=this.makeRequest(d,null);return new f50(this,G,I)}buildURL(I,d){let G=rb4(I)?new URL(I):new URL(this.baseURL+(this.baseURL.endsWith("/")&&I.startsWith("/")?I.slice(1):I)),Z=this.defaultQuery();if(!xS(Z))d={...Z,...d};if(typeof d==="object"&&d&&!Array.isArray(d))G.search=this.stringifyQuery(d);return G.toString()}stringifyQuery(I){return Object.entries(I).filter(([d,G])=>typeof G!=="undefined").map(([d,G])=>{if(typeof G==="string"||typeof G==="number"||typeof G==="boolean")return`${encodeURIComponent(d)}=${encodeURIComponent(G)}`;if(G===null)return`${encodeURIComponent(d)}=`;throw new Y4(`Cannot stringify type ${typeof G}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}async fetchWithTimeout(I,d,G,Z){let{signal:C,...W}=d||{};if(C)C.addEventListener("abort",()=>Z.abort());let w=setTimeout(()=>Z.abort(),G),B={signal:Z.signal,...W};if(B.method)B.method=B.method.toUpperCase();return this.fetch.call(void 0,I,B).finally(()=>{clearTimeout(w)})}shouldRetry(I){let d=I.headers.get("x-should-retry");if(d==="true")return!0;if(d==="false")return!1;if(I.status===408)return!0;if(I.status===409)return!0;if(I.status===429)return!0;if(I.status>=500)return!0;return!1}async retryRequest(I,d,G){let Z,C=G?.["retry-after-ms"];if(C){let w=parseFloat(C);if(!Number.isNaN(w))Z=w}let W=G?.["retry-after"];if(W&&!Z){let w=parseFloat(W);if(!Number.isNaN(w))Z=w*1000;else Z=Date.parse(W)-Date.now()}if(!(Z&&0<=Z&&Z<60000)){let w=I.maxRetries??this.maxRetries;Z=this.calculateDefaultRetryTimeoutMillis(d,w)}return await ab4(Z),this.makeRequest(I,d-1)}calculateDefaultRetryTimeoutMillis(I,d){let C=d-I,W=Math.min(0.5*Math.pow(2,C),8),w=1-Math.random()*0.25;return W*w*1000}getUserAgent(){return`${this.constructor.name}/JS ${ug}`}}class W71{constructor(I,d,G,Z){Mx.set(this,void 0),jb4(this,Mx,I,"f"),this.options=Z,this.response=d,this.body=G}hasNextPage(){if(!this.getPaginatedItems().length)return!1;return this.nextPageInfo()!=null}async getNextPage(){let I=this.nextPageInfo();if(!I)throw new Y4("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");let d={...this.options};if("params"in I&&typeof d.query==="object")d.query={...d.query,...I.params};else if("url"in I){let G=[...Object.entries(d.query||{}),...I.url.searchParams.entries()];for(let[Z,C]of G)I.url.searchParams.set(Z,C);d.query=void 0,d.path=I.url.toString()}return await kb4(this,Mx,"f").requestAPIList(this.constructor,d)}async*iterPages(){let I=this;yield I;while(I.hasNextPage())I=await I.getNextPage(),yield I}async*[(Mx=new WeakMap,Symbol.asyncIterator)](){for await(let I of this.iterPages())for(let d of I.getPaginatedItems())yield d}}class f50 extends Sx{constructor(I,d,G){super(d,async(Z)=>new G(I,Z.response,await z50(Z),Z.options))}async*[Symbol.asyncIterator](){let I=await this;for await(let d of I)yield d}}var jS=(I)=>{return new Proxy(Object.fromEntries(I.entries()),{get(d,G){let Z=G.toString();return d[Z.toLowerCase()]||d[Z]}})},xb4={method:!0,path:!0,query:!0,body:!0,headers:!0,maxRetries:!0,stream:!0,timeout:!0,httpAgent:!0,signal:!0,idempotencyKey:!0,__binaryRequest:!0,__binaryResponse:!0,__streamClass:!0},gZ=(I)=>{return typeof I==="object"&&I!==null&&!xS(I)&&Object.keys(I).every((d)=>q50(xb4,d))},cb4=()=>{if(typeof Deno!=="undefined"&&Deno.build!=null)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ug,"X-Stainless-OS":J50(Deno.build.os),"X-Stainless-Arch":g50(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime!=="undefined")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ug,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":process.version};if(Object.prototype.toString.call(typeof process!=="undefined"?process:0)==="[object process]")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ug,"X-Stainless-OS":J50(process.platform),"X-Stainless-Arch":g50(process.arch),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version};let I=pb4();if(I)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ug,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${I.browser}`,"X-Stainless-Runtime-Version":I.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ug,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function pb4(){if(typeof navigator==="undefined"||!navigator)return null;let I=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:d,pattern:G}of I){let Z=G.exec(navigator.userAgent);if(Z){let C=Z[1]||0,W=Z[2]||0,w=Z[3]||0;return{browser:d,version:`${C}.${W}.${w}`}}}return null}var g50=(I)=>{if(I==="x32")return"x32";if(I==="x86_64"||I==="x64")return"x64";if(I==="arm")return"arm";if(I==="aarch64"||I==="arm64")return"arm64";if(I)return`other:${I}`;return"unknown"},J50=(I)=>{if(I=I.toLowerCase(),I.includes("ios"))return"iOS";if(I==="android")return"Android";if(I==="darwin")return"MacOS";if(I==="win32")return"Windows";if(I==="freebsd")return"FreeBSD";if(I==="openbsd")return"OpenBSD";if(I==="linux")return"Linux";if(I)return`Other:${I}`;return"Unknown"},K50,ib4=()=>{return K50??(K50=cb4())},w71=(I)=>{try{return JSON.parse(I)}catch(d){return}},nb4=/^[a-z][a-z0-9+.-]*:/i,rb4=(I)=>{return nb4.test(I)},ab4=(I)=>new Promise((d)=>setTimeout(d,I)),C71=(I,d)=>{if(typeof d!=="number"||!Number.isInteger(d))throw new Y4(`${I} must be an integer`);if(d<0)throw new Y4(`${I} must be a positive integer`);return d},vx=(I)=>{if(I instanceof Error)return I;if(typeof I==="object"&&I!==null)try{return new Error(JSON.stringify(I))}catch{}return new Error(String(I))};var lC=(I)=>{if(typeof process!=="undefined")return process.env?.[I]?.trim()??void 0;if(typeof Deno!=="undefined")return Deno.env?.get?.(I)?.trim();return};function xS(I){if(!I)return!0;for(let d in I)return!1;return!0}function q50(I,d){return Object.prototype.hasOwnProperty.call(I,d)}function N50(I,d){for(let G in d){if(!q50(d,G))continue;let Z=G.toLowerCase();if(!Z)continue;let C=d[G];if(C===null)delete I[Z];else if(C!==void 0)I[Z]=C}}function Jf(I,...d){if(typeof process!=="undefined"&&process?.env?.DEBUG==="true")console.log(`Anthropic:DEBUG:${I}`,...d)}var sb4=()=>{return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(I)=>{let d=Math.random()*16|0;return(I==="x"?d:d&3|8).toString(16)})},R50=()=>{return typeof window!=="undefined"&&typeof window.document!=="undefined"&&typeof navigator!=="undefined"},ob4=(I)=>{return typeof I?.get==="function"};var gf=(I,d)=>{let G=d.toLowerCase();if(ob4(I)){let Z=d[0]?.toUpperCase()+d.substring(1).replace(/([^\w])(\w)/g,(C,W,w)=>W+w.toUpperCase());for(let C of[d,G,d.toUpperCase(),Z]){let W=I.get(C);if(W)return W}}for(let[Z,C]of Object.entries(I))if(Z.toLowerCase()===G){if(Array.isArray(C)){if(C.length<=1)return C[0];return console.warn(`Received ${C.length} entries for the ${d} header, using the first entry.`),C[0]}return C}return};function q_(I){return I!=null&&typeof I==="object"&&!Array.isArray(I)}class YV extends W71{constructor(I,d,G,Z){super(I,d,G,Z);this.data=G.data||[],this.has_more=G.has_more||!1,this.first_id=G.first_id||null,this.last_id=G.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageParams(){let I=this.nextPageInfo();if(!I)return null;if("params"in I)return I.params;let d=Object.fromEntries(I.url.searchParams);if(!Object.keys(d).length)return null;return d}nextPageInfo(){if(this.options.query?.before_id){let d=this.first_id;if(!d)return null;return{params:{before_id:d}}}let I=this.last_id;if(!I)return null;return{params:{after_id:I}}}}class i8{constructor(I){this._client=I}}class Kf extends i8{retrieve(I,d){return this._client.get(`/v1/models/${I}?beta=true`,d)}list(I={},d){if(gZ(I))return this.list({},I);return this._client.getAPIList("/v1/models?beta=true",cS,{query:I,...d})}}class cS extends YV{}Kf.BetaModelInfosPage=cS;class Nf{constructor(I,d){this.iterator=I,this.controller=d}async*decoder(){let I=new f_;for await(let d of this.iterator)for(let G of I.decode(d))yield JSON.parse(G);for(let d of I.flush())yield JSON.parse(d)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(I,d){if(!I.body)throw d.abort(),new Y4("Attempted to iterate over a response with no body");return new Nf(Og(I.body),d)}}class zf extends i8{create(I,d){let{betas:G,...Z}=I;return this._client.post("/v1/messages/batches?beta=true",{body:Z,...d,headers:{"anthropic-beta":[...G??[],"message-batches-2024-09-24"].toString(),...d?.headers}})}retrieve(I,d={},G){if(gZ(d))return this.retrieve(I,{},d);let{betas:Z}=d;return this._client.get(`/v1/messages/batches/${I}?beta=true`,{...G,headers:{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString(),...G?.headers}})}list(I={},d){if(gZ(I))return this.list({},I);let{betas:G,...Z}=I;return this._client.getAPIList("/v1/messages/batches?beta=true",pS,{query:Z,...d,headers:{"anthropic-beta":[...G??[],"message-batches-2024-09-24"].toString(),...d?.headers}})}delete(I,d={},G){if(gZ(d))return this.delete(I,{},d);let{betas:Z}=d;return this._client.delete(`/v1/messages/batches/${I}?beta=true`,{...G,headers:{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString(),...G?.headers}})}cancel(I,d={},G){if(gZ(d))return this.cancel(I,{},d);let{betas:Z}=d;return this._client.post(`/v1/messages/batches/${I}/cancel?beta=true`,{...G,headers:{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString(),...G?.headers}})}async results(I,d={},G){if(gZ(d))return this.results(I,{},d);let Z=await this.retrieve(I);if(!Z.results_url)throw new Y4(`No batch \`results_url\`; Has it finished processing? ${Z.processing_status} - ${Z.id}`);let{betas:C}=d;return this._client.get(Z.results_url,{...G,headers:{"anthropic-beta":[...C??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary",...G?.headers},__binaryResponse:!0})._thenUnwrap((W,w)=>Nf.fromResponse(w.response,w.controller))}}class pS extends YV{}zf.BetaMessageBatchesPage=pS;var Ih4=(I)=>{let d=0,G=[];while(d{if(I.length===0)return I;let d=I[I.length-1];switch(d.type){case"separator":return I=I.slice(0,I.length-1),Qf(I);break;case"number":let G=d.value[d.value.length-1];if(G==="."||G==="-")return I=I.slice(0,I.length-1),Qf(I);case"string":let Z=I[I.length-2];if(Z?.type==="delimiter")return I=I.slice(0,I.length-1),Qf(I);else if(Z?.type==="brace"&&Z.value==="{")return I=I.slice(0,I.length-1),Qf(I);break;case"delimiter":return I=I.slice(0,I.length-1),Qf(I);break}return I},dh4=(I)=>{let d=[];if(I.map((G)=>{if(G.type==="brace")if(G.value==="{")d.push("}");else d.splice(d.lastIndexOf("}"),1);if(G.type==="paren")if(G.value==="[")d.push("]");else d.splice(d.lastIndexOf("]"),1)}),d.length>0)d.reverse().map((G)=>{if(G==="}")I.push({type:"brace",value:"}"});else if(G==="]")I.push({type:"paren",value:"]"})});return I},Gh4=(I)=>{let d="";return I.map((G)=>{switch(G.type){case"string":d+='"'+G.value+'"';break;default:d+=G.value;break}}),d},Lx=(I)=>JSON.parse(Gh4(dh4(Qf(Ih4(I)))));var S7=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},b4=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},JZ,R_,iS,yx,nS,rS,Px,aS,_V,sS,$x,ux,ff,Tx,Ox,A71,U50,V71,X71,Y71,_71,v50,E50="__json_buf";class oS{constructor(){JZ.add(this),this.messages=[],this.receivedMessages=[],R_.set(this,void 0),this.controller=new AbortController,iS.set(this,void 0),yx.set(this,()=>{}),nS.set(this,()=>{}),rS.set(this,void 0),Px.set(this,()=>{}),aS.set(this,()=>{}),_V.set(this,{}),sS.set(this,!1),$x.set(this,!1),ux.set(this,!1),ff.set(this,!1),Tx.set(this,void 0),Ox.set(this,void 0),V71.set(this,(I)=>{if(S7(this,$x,!0,"f"),I instanceof Error&&I.name==="AbortError")I=new p8;if(I instanceof p8)return S7(this,ux,!0,"f"),this._emit("abort",I);if(I instanceof Y4)return this._emit("error",I);if(I instanceof Error){let d=new Y4(I.message);return d.cause=I,this._emit("error",d)}return this._emit("error",new Y4(String(I)))}),S7(this,iS,new Promise((I,d)=>{S7(this,yx,I,"f"),S7(this,nS,d,"f")}),"f"),S7(this,rS,new Promise((I,d)=>{S7(this,Px,I,"f"),S7(this,aS,d,"f")}),"f"),b4(this,iS,"f").catch(()=>{}),b4(this,rS,"f").catch(()=>{})}get response(){return b4(this,Tx,"f")}get request_id(){return b4(this,Ox,"f")}async withResponse(){let I=await b4(this,iS,"f");if(!I)throw new Error("Could not resolve a `Response` object");return{data:this,response:I,request_id:I.headers.get("request-id")}}static fromReadableStream(I){let d=new oS;return d._run(()=>d._fromReadableStream(I)),d}static createMessage(I,d,G){let Z=new oS;for(let C of d.messages)Z._addMessageParam(C);return Z._run(()=>Z._createMessage(I,{...d,stream:!0},{...G,headers:{...G?.headers,"X-Stainless-Helper-Method":"stream"}})),Z}_run(I){I().then(()=>{this._emitFinal(),this._emit("end")},b4(this,V71,"f"))}_addMessageParam(I){this.messages.push(I)}_addMessage(I,d=!0){if(this.receivedMessages.push(I),d)this._emit("message",I)}async _createMessage(I,d,G){let Z=G?.signal;if(Z){if(Z.aborted)this.controller.abort();Z.addEventListener("abort",()=>this.controller.abort())}b4(this,JZ,"m",X71).call(this);let{response:C,data:W}=await I.create({...d,stream:!0},{...G,signal:this.controller.signal}).withResponse();this._connected(C);for await(let w of W)b4(this,JZ,"m",Y71).call(this,w);if(W.controller.signal?.aborted)throw new p8;b4(this,JZ,"m",_71).call(this)}_connected(I){if(this.ended)return;S7(this,Tx,I,"f"),S7(this,Ox,I?.headers.get("request-id"),"f"),b4(this,yx,"f").call(this,I),this._emit("connect")}get ended(){return b4(this,sS,"f")}get errored(){return b4(this,$x,"f")}get aborted(){return b4(this,ux,"f")}abort(){this.controller.abort()}on(I,d){return(b4(this,_V,"f")[I]||(b4(this,_V,"f")[I]=[])).push({listener:d}),this}off(I,d){let G=b4(this,_V,"f")[I];if(!G)return this;let Z=G.findIndex((C)=>C.listener===d);if(Z>=0)G.splice(Z,1);return this}once(I,d){return(b4(this,_V,"f")[I]||(b4(this,_V,"f")[I]=[])).push({listener:d,once:!0}),this}emitted(I){return new Promise((d,G)=>{if(S7(this,ff,!0,"f"),I!=="error")this.once("error",G);this.once(I,d)})}async done(){S7(this,ff,!0,"f"),await b4(this,rS,"f")}get currentMessage(){return b4(this,R_,"f")}async finalMessage(){return await this.done(),b4(this,JZ,"m",A71).call(this)}async finalText(){return await this.done(),b4(this,JZ,"m",U50).call(this)}_emit(I,...d){if(b4(this,sS,"f"))return;if(I==="end")S7(this,sS,!0,"f"),b4(this,Px,"f").call(this);let G=b4(this,_V,"f")[I];if(G)b4(this,_V,"f")[I]=G.filter((Z)=>!Z.once),G.forEach(({listener:Z})=>Z(...d));if(I==="abort"){let Z=d[0];if(!b4(this,ff,"f")&&!G?.length)Promise.reject(Z);b4(this,nS,"f").call(this,Z),b4(this,aS,"f").call(this,Z),this._emit("end");return}if(I==="error"){let Z=d[0];if(!b4(this,ff,"f")&&!G?.length)Promise.reject(Z);b4(this,nS,"f").call(this,Z),b4(this,aS,"f").call(this,Z),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",b4(this,JZ,"m",A71).call(this))}async _fromReadableStream(I,d){let G=d?.signal;if(G){if(G.aborted)this.controller.abort();G.addEventListener("abort",()=>this.controller.abort())}b4(this,JZ,"m",X71).call(this),this._connected(null);let Z=BI.fromReadableStream(I,this.controller);for await(let C of Z)b4(this,JZ,"m",Y71).call(this,C);if(Z.controller.signal?.aborted)throw new p8;b4(this,JZ,"m",_71).call(this)}[(R_=new WeakMap,iS=new WeakMap,yx=new WeakMap,nS=new WeakMap,rS=new WeakMap,Px=new WeakMap,aS=new WeakMap,_V=new WeakMap,sS=new WeakMap,$x=new WeakMap,ux=new WeakMap,ff=new WeakMap,Tx=new WeakMap,Ox=new WeakMap,V71=new WeakMap,JZ=new WeakSet,A71=function I(){if(this.receivedMessages.length===0)throw new Y4("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},U50=function I(){if(this.receivedMessages.length===0)throw new Y4("stream ended without producing a Message with role=assistant");let d=this.receivedMessages.at(-1).content.filter((G)=>G.type==="text").map((G)=>G.text);if(d.length===0)throw new Y4("stream ended without producing a content block with type=text");return d.join(" ")},X71=function I(){if(this.ended)return;S7(this,R_,void 0,"f")},Y71=function I(d){if(this.ended)return;let G=b4(this,JZ,"m",v50).call(this,d);switch(this._emit("streamEvent",d,G),d.type){case"content_block_delta":{let Z=G.content.at(-1);switch(d.delta.type){case"text_delta":{if(Z.type==="text")this._emit("text",d.delta.text,Z.text||"");break}case"citations_delta":{if(Z.type==="text")this._emit("citation",d.delta.citation,Z.citations??[]);break}case"input_json_delta":{if(Z.type==="tool_use"&&Z.input)this._emit("inputJson",d.delta.partial_json,Z.input);break}case"thinking_delta":{if(Z.type==="thinking")this._emit("thinking",d.delta.thinking,Z.thinking);break}case"signature_delta":break;default:M50(d.delta)}break}case"message_stop":{this._addMessageParam(G),this._addMessage(G,!0);break}case"content_block_stop":{this._emit("contentBlock",G.content.at(-1));break}case"message_start":{S7(this,R_,G,"f");break}case"content_block_start":case"message_delta":break}},_71=function I(){if(this.ended)throw new Y4("stream has ended, this shouldn't happen");let d=b4(this,R_,"f");if(!d)throw new Y4("request ended without sending any chunks");return S7(this,R_,void 0,"f"),d},v50=function I(d){let G=b4(this,R_,"f");if(d.type==="message_start"){if(G)throw new Y4(`Unexpected event order, got ${d.type} before receiving "message_stop"`);return d.message}if(!G)throw new Y4(`Unexpected event order, got ${d.type} before "message_start"`);switch(d.type){case"message_stop":return G;case"message_delta":return G.stop_reason=d.delta.stop_reason,G.stop_sequence=d.delta.stop_sequence,G.usage.output_tokens=d.usage.output_tokens,G;case"content_block_start":return G.content.push(d.content_block),G;case"content_block_delta":{let Z=G.content.at(d.index);switch(d.delta.type){case"text_delta":{if(Z?.type==="text")Z.text+=d.delta.text;break}case"citations_delta":{if(Z?.type==="text")Z.citations??(Z.citations=[]),Z.citations.push(d.delta.citation);break}case"input_json_delta":{if(Z?.type==="tool_use"){let C=Z[E50]||"";if(C+=d.delta.partial_json,Object.defineProperty(Z,E50,{value:C,enumerable:!1,writable:!0}),C)Z.input=Lx(C)}break}case"thinking_delta":{if(Z?.type==="thinking")Z.thinking+=d.delta.thinking;break}case"signature_delta":{if(Z?.type==="thinking")Z.signature+=d.delta.signature;break}default:M50(d.delta)}return G}case"content_block_stop":return G}},Symbol.asyncIterator)](){let I=[],d=[],G=!1;return this.on("streamEvent",(Z)=>{let C=d.shift();if(C)C.resolve(Z);else I.push(Z)}),this.on("end",()=>{G=!0;for(let Z of d)Z.resolve(void 0);d.length=0}),this.on("abort",(Z)=>{G=!0;for(let C of d)C.reject(Z);d.length=0}),this.on("error",(Z)=>{G=!0;for(let C of d)C.reject(Z);d.length=0}),{next:async()=>{if(!I.length){if(G)return{value:void 0,done:!0};return new Promise((C,W)=>d.push({resolve:C,reject:W})).then((C)=>C?{value:C,done:!1}:{value:void 0,done:!0})}return{value:I.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new BI(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function M50(I){}var S50={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025"};class lg extends i8{constructor(){super(...arguments);this.batches=new zf(this._client)}create(I,d){let{betas:G,...Z}=I;if(Z.model in S50)console.warn(`The model '${Z.model}' is deprecated and will reach end-of-life on ${S50[Z.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);return this._client.post("/v1/messages?beta=true",{body:Z,timeout:this._client._options.timeout??600000,...d,headers:{...G?.toString()!=null?{"anthropic-beta":G?.toString()}:void 0,...d?.headers},stream:I.stream??!1})}stream(I,d){return oS.createMessage(this,I,d)}countTokens(I,d){let{betas:G,...Z}=I;return this._client.post("/v1/messages/count_tokens?beta=true",{body:Z,...d,headers:{"anthropic-beta":[...G??[],"token-counting-2024-11-01"].toString(),...d?.headers}})}}lg.Batches=zf;lg.BetaMessageBatchesPage=pS;class IG extends i8{constructor(){super(...arguments);this.models=new Kf(this._client),this.messages=new lg(this._client)}}IG.Models=Kf;IG.BetaModelInfosPage=cS;IG.Messages=lg;class U_ extends i8{create(I,d){return this._client.post("/v1/complete",{body:I,timeout:this._client._options.timeout??600000,...d,stream:I.stream??!1})}}class qf extends i8{create(I,d){return this._client.post("/v1/messages/batches",{body:I,...d})}retrieve(I,d){return this._client.get(`/v1/messages/batches/${I}`,d)}list(I={},d){if(gZ(I))return this.list({},I);return this._client.getAPIList("/v1/messages/batches",eS,{query:I,...d})}delete(I,d){return this._client.delete(`/v1/messages/batches/${I}`,d)}cancel(I,d){return this._client.post(`/v1/messages/batches/${I}/cancel`,d)}async results(I,d){let G=await this.retrieve(I);if(!G.results_url)throw new Y4(`No batch \`results_url\`; Has it finished processing? ${G.processing_status} - ${G.id}`);return this._client.get(G.results_url,{...d,headers:{Accept:"application/binary",...d?.headers},__binaryResponse:!0})._thenUnwrap((Z,C)=>Nf.fromResponse(C.response,C.controller))}}class eS extends YV{}qf.MessageBatchesPage=eS;var L7=function(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G},h4=function(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)},KZ,v_,tS,mx,IL,dL,lx,GL,DV,ZL,bx,hx,Rf,jx,kx,D71,L50,H71,F71,g71,J71,y50,P50="__json_buf";class CL{constructor(){KZ.add(this),this.messages=[],this.receivedMessages=[],v_.set(this,void 0),this.controller=new AbortController,tS.set(this,void 0),mx.set(this,()=>{}),IL.set(this,()=>{}),dL.set(this,void 0),lx.set(this,()=>{}),GL.set(this,()=>{}),DV.set(this,{}),ZL.set(this,!1),bx.set(this,!1),hx.set(this,!1),Rf.set(this,!1),jx.set(this,void 0),kx.set(this,void 0),H71.set(this,(I)=>{if(L7(this,bx,!0,"f"),I instanceof Error&&I.name==="AbortError")I=new p8;if(I instanceof p8)return L7(this,hx,!0,"f"),this._emit("abort",I);if(I instanceof Y4)return this._emit("error",I);if(I instanceof Error){let d=new Y4(I.message);return d.cause=I,this._emit("error",d)}return this._emit("error",new Y4(String(I)))}),L7(this,tS,new Promise((I,d)=>{L7(this,mx,I,"f"),L7(this,IL,d,"f")}),"f"),L7(this,dL,new Promise((I,d)=>{L7(this,lx,I,"f"),L7(this,GL,d,"f")}),"f"),h4(this,tS,"f").catch(()=>{}),h4(this,dL,"f").catch(()=>{})}get response(){return h4(this,jx,"f")}get request_id(){return h4(this,kx,"f")}async withResponse(){let I=await h4(this,tS,"f");if(!I)throw new Error("Could not resolve a `Response` object");return{data:this,response:I,request_id:I.headers.get("request-id")}}static fromReadableStream(I){let d=new CL;return d._run(()=>d._fromReadableStream(I)),d}static createMessage(I,d,G){let Z=new CL;for(let C of d.messages)Z._addMessageParam(C);return Z._run(()=>Z._createMessage(I,{...d,stream:!0},{...G,headers:{...G?.headers,"X-Stainless-Helper-Method":"stream"}})),Z}_run(I){I().then(()=>{this._emitFinal(),this._emit("end")},h4(this,H71,"f"))}_addMessageParam(I){this.messages.push(I)}_addMessage(I,d=!0){if(this.receivedMessages.push(I),d)this._emit("message",I)}async _createMessage(I,d,G){let Z=G?.signal;if(Z){if(Z.aborted)this.controller.abort();Z.addEventListener("abort",()=>this.controller.abort())}h4(this,KZ,"m",F71).call(this);let{response:C,data:W}=await I.create({...d,stream:!0},{...G,signal:this.controller.signal}).withResponse();this._connected(C);for await(let w of W)h4(this,KZ,"m",g71).call(this,w);if(W.controller.signal?.aborted)throw new p8;h4(this,KZ,"m",J71).call(this)}_connected(I){if(this.ended)return;L7(this,jx,I,"f"),L7(this,kx,I?.headers.get("request-id"),"f"),h4(this,mx,"f").call(this,I),this._emit("connect")}get ended(){return h4(this,ZL,"f")}get errored(){return h4(this,bx,"f")}get aborted(){return h4(this,hx,"f")}abort(){this.controller.abort()}on(I,d){return(h4(this,DV,"f")[I]||(h4(this,DV,"f")[I]=[])).push({listener:d}),this}off(I,d){let G=h4(this,DV,"f")[I];if(!G)return this;let Z=G.findIndex((C)=>C.listener===d);if(Z>=0)G.splice(Z,1);return this}once(I,d){return(h4(this,DV,"f")[I]||(h4(this,DV,"f")[I]=[])).push({listener:d,once:!0}),this}emitted(I){return new Promise((d,G)=>{if(L7(this,Rf,!0,"f"),I!=="error")this.once("error",G);this.once(I,d)})}async done(){L7(this,Rf,!0,"f"),await h4(this,dL,"f")}get currentMessage(){return h4(this,v_,"f")}async finalMessage(){return await this.done(),h4(this,KZ,"m",D71).call(this)}async finalText(){return await this.done(),h4(this,KZ,"m",L50).call(this)}_emit(I,...d){if(h4(this,ZL,"f"))return;if(I==="end")L7(this,ZL,!0,"f"),h4(this,lx,"f").call(this);let G=h4(this,DV,"f")[I];if(G)h4(this,DV,"f")[I]=G.filter((Z)=>!Z.once),G.forEach(({listener:Z})=>Z(...d));if(I==="abort"){let Z=d[0];if(!h4(this,Rf,"f")&&!G?.length)Promise.reject(Z);h4(this,IL,"f").call(this,Z),h4(this,GL,"f").call(this,Z),this._emit("end");return}if(I==="error"){let Z=d[0];if(!h4(this,Rf,"f")&&!G?.length)Promise.reject(Z);h4(this,IL,"f").call(this,Z),h4(this,GL,"f").call(this,Z),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",h4(this,KZ,"m",D71).call(this))}async _fromReadableStream(I,d){let G=d?.signal;if(G){if(G.aborted)this.controller.abort();G.addEventListener("abort",()=>this.controller.abort())}h4(this,KZ,"m",F71).call(this),this._connected(null);let Z=BI.fromReadableStream(I,this.controller);for await(let C of Z)h4(this,KZ,"m",g71).call(this,C);if(Z.controller.signal?.aborted)throw new p8;h4(this,KZ,"m",J71).call(this)}[(v_=new WeakMap,tS=new WeakMap,mx=new WeakMap,IL=new WeakMap,dL=new WeakMap,lx=new WeakMap,GL=new WeakMap,DV=new WeakMap,ZL=new WeakMap,bx=new WeakMap,hx=new WeakMap,Rf=new WeakMap,jx=new WeakMap,kx=new WeakMap,H71=new WeakMap,KZ=new WeakSet,D71=function I(){if(this.receivedMessages.length===0)throw new Y4("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},L50=function I(){if(this.receivedMessages.length===0)throw new Y4("stream ended without producing a Message with role=assistant");let d=this.receivedMessages.at(-1).content.filter((G)=>G.type==="text").map((G)=>G.text);if(d.length===0)throw new Y4("stream ended without producing a content block with type=text");return d.join(" ")},F71=function I(){if(this.ended)return;L7(this,v_,void 0,"f")},g71=function I(d){if(this.ended)return;let G=h4(this,KZ,"m",y50).call(this,d);switch(this._emit("streamEvent",d,G),d.type){case"content_block_delta":{let Z=G.content.at(-1);switch(d.delta.type){case"text_delta":{if(Z.type==="text")this._emit("text",d.delta.text,Z.text||"");break}case"citations_delta":{if(Z.type==="text")this._emit("citation",d.delta.citation,Z.citations??[]);break}case"input_json_delta":{if(Z.type==="tool_use"&&Z.input)this._emit("inputJson",d.delta.partial_json,Z.input);break}case"thinking_delta":{if(Z.type==="thinking")this._emit("thinking",d.delta.thinking,Z.thinking);break}case"signature_delta":break;default:$50(d.delta)}break}case"message_stop":{this._addMessageParam(G),this._addMessage(G,!0);break}case"content_block_stop":{this._emit("contentBlock",G.content.at(-1));break}case"message_start":{L7(this,v_,G,"f");break}case"content_block_start":case"message_delta":break}},J71=function I(){if(this.ended)throw new Y4("stream has ended, this shouldn't happen");let d=h4(this,v_,"f");if(!d)throw new Y4("request ended without sending any chunks");return L7(this,v_,void 0,"f"),d},y50=function I(d){let G=h4(this,v_,"f");if(d.type==="message_start"){if(G)throw new Y4(`Unexpected event order, got ${d.type} before receiving "message_stop"`);return d.message}if(!G)throw new Y4(`Unexpected event order, got ${d.type} before "message_start"`);switch(d.type){case"message_stop":return G;case"message_delta":return G.stop_reason=d.delta.stop_reason,G.stop_sequence=d.delta.stop_sequence,G.usage.output_tokens=d.usage.output_tokens,G;case"content_block_start":return G.content.push(d.content_block),G;case"content_block_delta":{let Z=G.content.at(d.index);switch(d.delta.type){case"text_delta":{if(Z?.type==="text")Z.text+=d.delta.text;break}case"citations_delta":{if(Z?.type==="text")Z.citations??(Z.citations=[]),Z.citations.push(d.delta.citation);break}case"input_json_delta":{if(Z?.type==="tool_use"){let C=Z[P50]||"";if(C+=d.delta.partial_json,Object.defineProperty(Z,P50,{value:C,enumerable:!1,writable:!0}),C)Z.input=Lx(C)}break}case"thinking_delta":{if(Z?.type==="thinking")Z.thinking+=d.delta.thinking;break}case"signature_delta":{if(Z?.type==="thinking")Z.signature+=d.delta.signature;break}default:$50(d.delta)}return G}case"content_block_stop":return G}},Symbol.asyncIterator)](){let I=[],d=[],G=!1;return this.on("streamEvent",(Z)=>{let C=d.shift();if(C)C.resolve(Z);else I.push(Z)}),this.on("end",()=>{G=!0;for(let Z of d)Z.resolve(void 0);d.length=0}),this.on("abort",(Z)=>{G=!0;for(let C of d)C.reject(Z);d.length=0}),this.on("error",(Z)=>{G=!0;for(let C of d)C.reject(Z);d.length=0}),{next:async()=>{if(!I.length){if(G)return{value:void 0,done:!0};return new Promise((C,W)=>d.push({resolve:C,reject:W})).then((C)=>C?{value:C,done:!1}:{value:void 0,done:!0})}return{value:I.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new BI(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function $50(I){}class NZ extends i8{constructor(){super(...arguments);this.batches=new qf(this._client)}create(I,d){if(I.model in u50)console.warn(`The model '${I.model}' is deprecated and will reach end-of-life on ${u50[I.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);return this._client.post("/v1/messages",{body:I,timeout:this._client._options.timeout??600000,...d,stream:I.stream??!1})}stream(I,d){return CL.createMessage(this,I,d)}countTokens(I,d){return this._client.post("/v1/messages/count_tokens",{body:I,...d})}}var u50={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025"};NZ.Batches=qf;NZ.MessageBatchesPage=eS;class bg extends i8{retrieve(I,d){return this._client.get(`/v1/models/${I}`,d)}list(I={},d){if(gZ(I))return this.list({},I);return this._client.getAPIList("/v1/models",Uf,{query:I,...d})}}class Uf extends YV{}bg.ModelInfosPage=Uf;var T50;class q9 extends mg{constructor({baseURL:I=lC("ANTHROPIC_BASE_URL"),apiKey:d=lC("ANTHROPIC_API_KEY")??null,authToken:G=lC("ANTHROPIC_AUTH_TOKEN")??null,...Z}={}){let C={apiKey:d,authToken:G,...Z,baseURL:I||"https://api.anthropic.com"};if(!C.dangerouslyAllowBrowser&&R50())throw new Y4(`It looks like you're running in a browser-like environment. + +This is disabled by default, as it risks exposing your secret API credentials to attackers. +If you understand the risks and have appropriate mitigations in place, +you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., + +new Anthropic({ apiKey, dangerouslyAllowBrowser: true }); +`);super({baseURL:C.baseURL,timeout:C.timeout??600000,httpAgent:C.httpAgent,maxRetries:C.maxRetries,fetch:C.fetch});this.completions=new U_(this),this.messages=new NZ(this),this.models=new bg(this),this.beta=new IG(this),this._options=C,this.apiKey=d,this.authToken=G}defaultQuery(){return this._options.defaultQuery}defaultHeaders(I){return{...super.defaultHeaders(I),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01",...this._options.defaultHeaders}}validateHeaders(I,d){if(this.apiKey&&I["x-api-key"])return;if(d["x-api-key"]===null)return;if(this.authToken&&I.authorization)return;if(d.authorization===null)return;throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}authHeaders(I){let d=this.apiKeyAuth(I),G=this.bearerAuth(I);if(d!=null&&!xS(d))return d;if(G!=null&&!xS(G))return G;return{}}apiKeyAuth(I){if(this.apiKey==null)return{};return{"X-Api-Key":this.apiKey}}bearerAuth(I){if(this.authToken==null)return{};return{Authorization:`Bearer ${this.authToken}`}}}T50=q9;q9.Anthropic=T50;q9.HUMAN_PROMPT=` + +Human:`;q9.AI_PROMPT=` + +Assistant:`;q9.DEFAULT_TIMEOUT=600000;q9.AnthropicError=Y4;q9.APIError=f9;q9.APIConnectionError=rw;q9.APIConnectionTimeoutError=Ff;q9.APIUserAbortError=p8;q9.NotFoundError=OS;q9.ConflictError=mS;q9.RateLimitError=bS;q9.BadRequestError=$S;q9.AuthenticationError=uS;q9.InternalServerError=hS;q9.PermissionDeniedError=TS;q9.UnprocessableEntityError=lS;q9.toFile=F50;q9.fileFromPath=$b;q9.Completions=U_;q9.Messages=NZ;q9.Models=bg;q9.ModelInfosPage=Uf;q9.Beta=IG;var N71=q9;var ok0=J1(m90(),1),ek0=J1(uj0(),1),tk0=J1(t8(),1),Ix0=J1(sk0(),1);import iJ5 from"assert";var dx0=async(I,d)=>{iJ5(I.method,"Expected request method property to be set");let G=ek0.fromNodeProviderChain(),Z=await nJ5(()=>{if(d.awsAccessKey)process.env.AWS_ACCESS_KEY_ID=d.awsAccessKey;if(d.awsSecretKey)process.env.AWS_SECRET_ACCESS_KEY=d.awsSecretKey;if(d.awsSessionToken)process.env.AWS_SESSION_TOKEN=d.awsSessionToken},()=>G()),C=new ok0.SignatureV4({service:"bedrock",region:d.regionName,credentials:Z,sha256:Ix0.Sha256}),W=new URL(d.url),w=!I.headers?{}:(Symbol.iterator in I.headers)?Object.fromEntries(Array.from(I.headers).map((V)=>[...V])):{...I.headers};delete w.connection,w.host=W.hostname;let B=new tk0.HttpRequest({method:I.method.toUpperCase(),protocol:W.protocol,path:W.pathname,headers:w,body:I.body});return(await C.sign(B)).headers},nJ5=async(I,d)=>{let G={...process.env};try{return I(),await d()}finally{process.env=G}};var e82=J1(EV1(),1),Sr=J1(fD(),1),t82=J1(oc0(),1);var P9=J1(h2(),1),xD=J1(a82(),1),mk5=async(I,d)=>{let G=P9.map({}),Z=I.body,C=P9.take(Z,{message:P9.expectString});Object.assign(G,C);let W=new xD.InternalServerException({$metadata:Mr(I),...G});return P9.decorateServiceException(W,I.body)},lk5=async(I,d)=>{let G=P9.map({}),Z=I.body,C=P9.take(Z,{message:P9.expectString,originalMessage:P9.expectString,originalStatusCode:P9.expectInt32});Object.assign(G,C);let W=new xD.ModelStreamErrorException({$metadata:Mr(I),...G});return P9.decorateServiceException(W,I.body)},bk5=async(I,d)=>{let G=P9.map({}),Z=I.body,C=P9.take(Z,{message:P9.expectString});Object.assign(G,C);let W=new xD.ThrottlingException({$metadata:Mr(I),...G});return P9.decorateServiceException(W,I.body)},hk5=async(I,d)=>{let G=P9.map({}),Z=I.body,C=P9.take(Z,{message:P9.expectString});Object.assign(G,C);let W=new xD.ValidationException({$metadata:Mr(I),...G});return P9.decorateServiceException(W,I.body)},s82=(I,d)=>{return d.eventStreamMarshaller.deserialize(I,async(G)=>{if(G.chunk!=null)return{chunk:await xk5(G.chunk,d)};if(G.internalServerException!=null)return{internalServerException:await jk5(G.internalServerException,d)};if(G.modelStreamErrorException!=null)return{modelStreamErrorException:await kk5(G.modelStreamErrorException,d)};if(G.validationException!=null)return{validationException:await pk5(G.validationException,d)};if(G.throttlingException!=null)return{throttlingException:await ck5(G.throttlingException,d)};return{$unknown:I}})},jk5=async(I,d)=>{let G={...I,body:await xP(I.body,d)};return mk5(G,d)},kk5=async(I,d)=>{let G={...I,body:await xP(I.body,d)};return lk5(G,d)},xk5=async(I,d)=>{let G={},Z=await xP(I.body,d);return Object.assign(G,ik5(Z,d)),G},ck5=async(I,d)=>{let G={...I,body:await xP(I.body,d)};return bk5(G,d)},pk5=async(I,d)=>{let G={...I,body:await xP(I.body,d)};return hk5(G,d)},ik5=(I,d)=>{return P9.take(I,{bytes:d.base64Decoder})},Mr=(I)=>({httpStatusCode:I.statusCode,requestId:I.headers["x-amzn-requestid"]??I.headers["x-amzn-request-id"]??I.headers["x-amz-request-id"]??"",extendedRequestId:I.headers["x-amz-id-2"]??"",cfId:I.headers["x-amz-cf-id"]??""}),nk5=(I,d)=>P9.collectBody(I,d).then((G)=>d.utf8Encoder(G)),xP=(I,d)=>nk5(I,d).then((G)=>{if(G.length)return JSON.parse(G);return{}});var PD1=(I)=>new TextDecoder("utf-8").decode(I),o82=(I)=>new TextEncoder().encode(I),rk5=()=>{let I=new e82.EventStreamMarshaller({utf8Encoder:PD1,utf8Decoder:o82});return{base64Decoder:Sr.fromBase64,base64Encoder:Sr.toBase64,utf8Decoder:o82,utf8Encoder:PD1,eventStreamMarshaller:I,streamCollector:t82.streamCollector}};class Lr extends BI{static fromSSEResponse(I,d){let G=!1;async function*Z(){if(!I.body)throw d.abort(),new Y4("Attempted to iterate over a response with no body");let W=Og(I.body),w=s82(W,rk5());for await(let B of w)if(B.chunk&&B.chunk.bytes)yield{event:"chunk",data:PD1(B.chunk.bytes),raw:[]};else if(B.internalServerException)yield{event:"error",data:"InternalServerException",raw:[]};else if(B.modelStreamErrorException)yield{event:"error",data:"ModelStreamErrorException",raw:[]};else if(B.validationException)yield{event:"error",data:"ValidationException",raw:[]};else if(B.throttlingException)yield{event:"error",data:"ThrottlingException",raw:[]}}async function*C(){if(G)throw new Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");G=!0;let W=!1;try{for await(let w of Z()){if(w.event==="chunk")try{yield JSON.parse(w.data)}catch(B){throw console.error("Could not parse message into JSON:",w.data),console.error("From chunk:",w.raw),B}if(w.event==="error"){let B=w.data,A=w71(B),V=A?void 0:B;throw f9.generate(void 0,A,V,jS(I.headers))}}W=!0}catch(w){if(w instanceof Error&&w.name==="AbortError")return;throw w}finally{if(!W)d.abort()}}return new Lr(C,d)}}var ak5="bedrock-2023-05-31",sk5=new Set(["/v1/complete","/v1/messages","/v1/messages?beta=true"]);class yr extends mg{constructor({baseURL:I=lC("ANTHROPIC_BEDROCK_BASE_URL"),awsSecretKey:d=null,awsAccessKey:G=null,awsRegion:Z=lC("AWS_REGION")??"us-east-1",awsSessionToken:C=null,...W}={}){let w={awsSecretKey:d,awsAccessKey:G,awsRegion:Z,awsSessionToken:C,...W,baseURL:I||`https://bedrock-runtime.${Z}.amazonaws.com`};super({baseURL:w.baseURL,timeout:w.timeout??600000,httpAgent:w.httpAgent,maxRetries:w.maxRetries,fetch:w.fetch});this.messages=ok5(this),this.completions=new U_(this),this.beta=ek5(this),this._options=w,this.awsSecretKey=d,this.awsAccessKey=G,this.awsRegion=Z,this.awsSessionToken=C}defaultQuery(){return this._options.defaultQuery}defaultHeaders(I){return{...super.defaultHeaders(I),...this._options.defaultHeaders}}async prepareRequest(I,{url:d,options:G}){let Z=this.awsRegion;if(!Z)throw new Error("Expected `awsRegion` option to be passed to the client or the `AWS_REGION` environment variable to be present");let C=await dx0(I,{url:d,regionName:Z,awsAccessKey:this.awsAccessKey,awsSecretKey:this.awsSecretKey,awsSessionToken:this.awsSessionToken});I.headers={...I.headers,...C}}buildRequest(I){if(I.__streamClass=Lr,q_(I.body))I.body={...I.body};if(q_(I.body)){if(!I.body.anthropic_version)I.body.anthropic_version=ak5;if(I.headers&&!I.body.anthropic_beta){let d=gf(I.headers,"anthropic-beta");if(d!=null)I.body.anthropic_beta=d.split(",")}}if(sk5.has(I.path)&&I.method==="post"){if(!q_(I.body))throw new Error("Expected request body to be an object for post /v1/messages");let d=I.body.model;I.body.model=void 0;let G=I.body.stream;if(I.body.stream=void 0,G)I.path=`/model/${d}/invoke-with-response-stream`;else I.path=`/model/${d}/invoke`}return super.buildRequest(I)}}function ok5(I){let d=new NZ(I);return delete d.batches,delete d.countTokens,d}function ek5(I){let d=new IG(I);return delete d.promptCaching,delete d.messages.batches,delete d.messages.countTokens,d}var PC2=J1(yC2(),1),Sa5="vertex-2023-10-16",La5=new Set(["/v1/messages","/v1/messages?beta=true"]);class Xa extends mg{constructor({baseURL:I=lC("ANTHROPIC_VERTEX_BASE_URL"),region:d=lC("CLOUD_ML_REGION")??null,projectId:G=lC("ANTHROPIC_VERTEX_PROJECT_ID")??null,...Z}={}){if(!d)throw new Error("No region was given. The client should be instantiated with the `region` option or the `CLOUD_ML_REGION` environment variable should be set.");let C={...Z,baseURL:I||`https://${d}-aiplatform.googleapis.com/v1`};super({baseURL:C.baseURL,timeout:C.timeout??600000,httpAgent:C.httpAgent,maxRetries:C.maxRetries,fetch:C.fetch});this.messages=ya5(this),this.beta=Pa5(this),this._options=C,this.region=d,this.projectId=G,this.accessToken=C.accessToken??null,this._auth=C.googleAuth??new PC2.GoogleAuth({scopes:"https://www.googleapis.com/auth/cloud-platform"}),this._authClientPromise=this._auth.getClient()}defaultQuery(){return this._options.defaultQuery}defaultHeaders(I){return{...super.defaultHeaders(I),...this._options.defaultHeaders}}async prepareOptions(I){let d=await this._authClientPromise,G=await d.getRequestHeaders(),Z=d.projectId??G["x-goog-user-project"];if(!this.projectId&&Z)this.projectId=Z;I.headers={...G,...I.headers}}buildRequest(I){if(q_(I.body))I.body={...I.body};if(q_(I.body)){if(!I.body.anthropic_version)I.body.anthropic_version=Sa5}if(La5.has(I.path)&&I.method==="post"){if(!this.projectId)throw new Error("No projectId was given and it could not be resolved from credentials. The client should be instantiated with the `projectId` option or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.");if(!q_(I.body))throw new Error("Expected request body to be an object for post /v1/messages");let d=I.body.model;I.body.model=void 0;let Z=I.body.stream??!1?"streamRawPredict":"rawPredict";I.path=`/projects/${this.projectId}/locations/${this.region}/publishers/anthropic/models/${d}:${Z}`}if(I.path==="/v1/messages/count_tokens"||I.path=="/v1/messages/count_tokens?beta=true"&&I.method==="post"){if(!this.projectId)throw new Error("No projectId was given and it could not be resolved from credentials. The client should be instantiated with the `projectId` option or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.");I.path=`/projects/${this.projectId}/locations/${this.region}/publishers/anthropic/models/count-tokens:rawPredict`}return super.buildRequest(I)}}function ya5(I){let d=new NZ(I);return delete d.batches,d}function Pa5(I){let d=new IG(I);return delete d.promptCaching,delete d.messages.batches,delete d.messages.countTokens,d}var Mz3=J1(kC2(),1);import{createHash as TZ9,randomUUID as e$}from"crypto";var pC2=J1(u1(),1);function xC2(I,d){let G=[],Z="";for(let C of I)if([...Z].length0)return`${d}h ${G}m ${Z}s`;if(G>0)return`${G}m ${Z}s`;return`${Z}s`}function cC2(I){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(I).toLowerCase()}var sD={totalCost:0,totalAPIDuration:0,startTime:Date.now()};function _a(I,d){sD.totalCost+=I,sD.totalAPIDuration+=d}function Da(){return sD.totalCost}function iC2(){return Date.now()-sD.startTime}function Gs5(I){return`$${I>0.5?Zs5(I,100).toFixed(2):I.toFixed(4)}`}function JF1(){return c0.grey(`Total cost: ${Gs5(sD.totalCost)} +Total duration (API): ${X$(sD.totalAPIDuration)} +Total duration (wall): ${X$(iC2())}`)}function nC2(){pC2.useEffect(()=>{let I=()=>{process.stdout.write(` +`+JF1()+` +`);let d=I5();o9({...d,lastCost:sD.totalCost,lastAPIDuration:sD.totalAPIDuration,lastDuration:iC2(),lastSessionId:id})};return process.on("exit",I),()=>{process.off("exit",I)}},[])}function Zs5(I,d){return Math.round(I*d)/d}function oD(I){let d=I.length-1;while(d>=0){let G=I[d];if(G?.type==="assistant"&&"usage"in G.message&&!(G.message.content[0]?.type==="text"&&aC2.has(G.message.content[0].text))){let{usage:Z}=G.message;return Z.input_tokens+(Z.cache_creation_input_tokens??0)+(Z.cache_read_input_tokens??0)+Z.output_tokens}d--}return 0}function rC2(I){let d=I.length-1;while(d>=0){let G=I[d];if(G?.type==="assistant"&&"usage"in G.message){let{usage:Z}=G.message;return(Z.cache_creation_input_tokens??0)+(Z.cache_read_input_tokens??0)}d--}return 0}import{createHash as Cs5}from"crypto";import{mkdirSync as Ws5,readFileSync as ws5,writeFileSync as Bs5}from"fs";import{dirname as sC2}from"path";import{existsSync as oC2}from"fs";import*as IW2 from"path";async function KF1(I,d){return await d()}function As5(I,d){return I.map((G)=>{if(typeof G==="string")return d(G);return G.map((Z)=>{switch(Z.type){case"tool_result":if(typeof Z.content==="string")return{...Z,content:d(Z.content)};if(Array.isArray(Z.content))return{...Z,content:Z.content.map((C)=>{switch(C.type){case"text":return{...C,text:d(C.text)};case"image":return C}})};return Z;case"text":return{...Z,text:d(Z.text)};case"tool_use":return{...Z,input:$l(Z.input,d)};case"image":return Z}})})}function eC2(I,d){return{durationMs:"DURATION",costUSD:"COST",uuid:"UUID",message:{...I.message,content:I.message.content.map((G)=>{switch(G.type){case"text":return{...G,text:d(G.text),citations:G.citations||[]};case"tool_use":return{...G,input:$l(G.input,d)};default:return G}}).filter(Boolean)},type:"assistant"}}function tC2(I){if(typeof I!=="string")return I;let d=I.replace(/num_files="\d+"/g,'num_files="[NUM]"').replace(/duration_ms="\d+"/g,'duration_ms="[DURATION]"').replace(/cost_usd="\d+"/g,'cost_usd="[COST]"').replace(/\//g,IW2.sep).replaceAll(R0(),"[CWD]");if(d.includes("Files modified by user:"))return"Files modified by user: [FILES]";return d}function Vs5(I){if(typeof I!=="string")return I;return I.replaceAll("[NUM]","1").replaceAll("[DURATION]","100").replaceAll("[CWD]",R0())}var GW2=Symbol("Let zodToJsonSchema decide on which parser to use"),dW2={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref"},ZW2=(I)=>typeof I==="string"?{...dW2,name:I}:{...dW2,...I};var CW2=(I)=>{let d=ZW2(I),G=d.name!==void 0?[...d.basePath,d.definitionPath,d.name]:d.basePath;return{...d,currentPath:G,propertyPath:void 0,seen:new Map(Object.entries(d.definitions).map(([Z,C])=>[C._def,{def:C._def,path:[...d.basePath,d.definitionPath,Z],jsonSchema:void 0}]))}};function NF1(I,d,G,Z){if(!Z?.errorMessages)return;if(G)I.errorMessage={...I.errorMessage,[d]:G}}function X5(I,d,G,Z,C){I[d]=G,NF1(I,d,Z,C)}var N5;(function(I){I.assertEqual=(C)=>C;function d(C){}I.assertIs=d;function G(C){throw new Error}I.assertNever=G,I.arrayToEnum=(C)=>{let W={};for(let w of C)W[w]=w;return W},I.getValidEnumValues=(C)=>{let W=I.objectKeys(C).filter((B)=>typeof C[C[B]]!=="number"),w={};for(let B of W)w[B]=C[B];return I.objectValues(w)},I.objectValues=(C)=>{return I.objectKeys(C).map(function(W){return C[W]})},I.objectKeys=typeof Object.keys==="function"?(C)=>Object.keys(C):(C)=>{let W=[];for(let w in C)if(Object.prototype.hasOwnProperty.call(C,w))W.push(w);return W},I.find=(C,W)=>{for(let w of C)if(W(w))return w;return},I.isInteger=typeof Number.isInteger==="function"?(C)=>Number.isInteger(C):(C)=>typeof C==="number"&&isFinite(C)&&Math.floor(C)===C;function Z(C,W=" | "){return C.map((w)=>typeof w==="string"?`'${w}'`:w).join(W)}I.joinValues=Z,I.jsonStringifyReplacer=(C,W)=>{if(typeof W==="bigint")return W.toString();return W}})(N5||(N5={}));var QF1;(function(I){I.mergeShapes=(d,G)=>{return{...d,...G}}})(QF1||(QF1={}));var _2=N5.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),dX=(I)=>{switch(typeof I){case"undefined":return _2.undefined;case"string":return _2.string;case"number":return isNaN(I)?_2.nan:_2.number;case"boolean":return _2.boolean;case"function":return _2.function;case"bigint":return _2.bigint;case"symbol":return _2.symbol;case"object":if(Array.isArray(I))return _2.array;if(I===null)return _2.null;if(I.then&&typeof I.then==="function"&&I.catch&&typeof I.catch==="function")return _2.promise;if(typeof Map!=="undefined"&&I instanceof Map)return _2.map;if(typeof Set!=="undefined"&&I instanceof Set)return _2.set;if(typeof Date!=="undefined"&&I instanceof Date)return _2.date;return _2.object;default:return _2.unknown}},y0=N5.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Xs5=(I)=>{return JSON.stringify(I,null,2).replace(/"([^"]+)":/g,"$1:")};class AG extends Error{get errors(){return this.issues}constructor(I){super();this.issues=[],this.addIssue=(G)=>{this.issues=[...this.issues,G]},this.addIssues=(G=[])=>{this.issues=[...this.issues,...G]};let d=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,d);else this.__proto__=d;this.name="ZodError",this.issues=I}format(I){let d=I||function(C){return C.message},G={_errors:[]},Z=(C)=>{for(let W of C.issues)if(W.code==="invalid_union")W.unionErrors.map(Z);else if(W.code==="invalid_return_type")Z(W.returnTypeError);else if(W.code==="invalid_arguments")Z(W.argumentsError);else if(W.path.length===0)G._errors.push(d(W));else{let w=G,B=0;while(Bd.message){let d={},G=[];for(let Z of this.issues)if(Z.path.length>0)d[Z.path[0]]=d[Z.path[0]]||[],d[Z.path[0]].push(I(Z));else G.push(I(Z));return{formErrors:G,fieldErrors:d}}get formErrors(){return this.flatten()}}AG.create=(I)=>{return new AG(I)};var wR=(I,d)=>{let G;switch(I.code){case y0.invalid_type:if(I.received===_2.undefined)G="Required";else G=`Expected ${I.expected}, received ${I.received}`;break;case y0.invalid_literal:G=`Invalid literal value, expected ${JSON.stringify(I.expected,N5.jsonStringifyReplacer)}`;break;case y0.unrecognized_keys:G=`Unrecognized key(s) in object: ${N5.joinValues(I.keys,", ")}`;break;case y0.invalid_union:G="Invalid input";break;case y0.invalid_union_discriminator:G=`Invalid discriminator value. Expected ${N5.joinValues(I.options)}`;break;case y0.invalid_enum_value:G=`Invalid enum value. Expected ${N5.joinValues(I.options)}, received '${I.received}'`;break;case y0.invalid_arguments:G="Invalid function arguments";break;case y0.invalid_return_type:G="Invalid function return type";break;case y0.invalid_date:G="Invalid date";break;case y0.invalid_string:if(typeof I.validation==="object")if("includes"in I.validation){if(G=`Invalid input: must include "${I.validation.includes}"`,typeof I.validation.position==="number")G=`${G} at one or more positions greater than or equal to ${I.validation.position}`}else if("startsWith"in I.validation)G=`Invalid input: must start with "${I.validation.startsWith}"`;else if("endsWith"in I.validation)G=`Invalid input: must end with "${I.validation.endsWith}"`;else N5.assertNever(I.validation);else if(I.validation!=="regex")G=`Invalid ${I.validation}`;else G="Invalid";break;case y0.too_small:if(I.type==="array")G=`Array must contain ${I.exact?"exactly":I.inclusive?"at least":"more than"} ${I.minimum} element(s)`;else if(I.type==="string")G=`String must contain ${I.exact?"exactly":I.inclusive?"at least":"over"} ${I.minimum} character(s)`;else if(I.type==="number")G=`Number must be ${I.exact?"exactly equal to ":I.inclusive?"greater than or equal to ":"greater than "}${I.minimum}`;else if(I.type==="date")G=`Date must be ${I.exact?"exactly equal to ":I.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(I.minimum))}`;else G="Invalid input";break;case y0.too_big:if(I.type==="array")G=`Array must contain ${I.exact?"exactly":I.inclusive?"at most":"less than"} ${I.maximum} element(s)`;else if(I.type==="string")G=`String must contain ${I.exact?"exactly":I.inclusive?"at most":"under"} ${I.maximum} character(s)`;else if(I.type==="number")G=`Number must be ${I.exact?"exactly":I.inclusive?"less than or equal to":"less than"} ${I.maximum}`;else if(I.type==="bigint")G=`BigInt must be ${I.exact?"exactly":I.inclusive?"less than or equal to":"less than"} ${I.maximum}`;else if(I.type==="date")G=`Date must be ${I.exact?"exactly":I.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(I.maximum))}`;else G="Invalid input";break;case y0.custom:G="Invalid input";break;case y0.invalid_intersection_types:G="Intersection results could not be merged";break;case y0.not_multiple_of:G=`Number must be a multiple of ${I.multipleOf}`;break;case y0.not_finite:G="Number must be finite";break;default:G=d.defaultError,N5.assertNever(I)}return{message:G}},BW2=wR;function Ys5(I){BW2=I}function Ha(){return BW2}var Fa=(I)=>{let{data:d,path:G,errorMaps:Z,issueData:C}=I,W=[...G,...C.path||[]],w={...C,path:W};if(C.message!==void 0)return{...C,path:W,message:C.message};let B="",A=Z.filter((V)=>!!V).slice().reverse();for(let V of A)B=V(w,{data:d,defaultError:B}).message;return{...C,path:W,message:B}},_s5=[];function d2(I,d){let G=Ha(),Z=Fa({issueData:d,data:I.data,path:I.path,errorMaps:[I.common.contextualErrorMap,I.schemaErrorMap,G,G===wR?void 0:wR].filter((C)=>!!C)});I.common.issues.push(Z)}class h7{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(I,d){let G=[];for(let Z of d){if(Z.status==="aborted")return w4;if(Z.status==="dirty")I.dirty();G.push(Z.value)}return{status:I.value,value:G}}static async mergeObjectAsync(I,d){let G=[];for(let Z of d){let C=await Z.key,W=await Z.value;G.push({key:C,value:W})}return h7.mergeObjectSync(I,G)}static mergeObjectSync(I,d){let G={};for(let Z of d){let{key:C,value:W}=Z;if(C.status==="aborted")return w4;if(W.status==="aborted")return w4;if(C.status==="dirty")I.dirty();if(W.status==="dirty")I.dirty();if(C.value!=="__proto__"&&(typeof W.value!=="undefined"||Z.alwaysSet))G[C.value]=W.value}return{status:I.value,value:G}}}var w4=Object.freeze({status:"aborted"}),CR=(I)=>({status:"dirty",value:I}),DI=(I)=>({status:"valid",value:I}),fF1=(I)=>I.status==="aborted",qF1=(I)=>I.status==="dirty",mJ=(I)=>I.status==="valid",D$=(I)=>typeof Promise!=="undefined"&&I instanceof Promise;function ga(I,d,G,Z){if(G==="a"&&!Z)throw new TypeError("Private accessor was defined without a getter");if(typeof d==="function"?I!==d||!Z:!d.has(I))throw new TypeError("Cannot read private member from an object whose class did not declare it");return G==="m"?Z:G==="a"?Z.call(I):Z?Z.value:d.get(I)}function AW2(I,d,G,Z,C){if(Z==="m")throw new TypeError("Private method is not writable");if(Z==="a"&&!C)throw new TypeError("Private accessor was defined without a setter");if(typeof d==="function"?I!==d||!C:!d.has(I))throw new TypeError("Cannot write private member to an object whose class did not declare it");return Z==="a"?C.call(I,G):C?C.value=G:d.set(I,G),G}var M2;(function(I){I.errToObj=(d)=>typeof d==="string"?{message:d}:d||{},I.toString=(d)=>typeof d==="string"?d:d===null||d===void 0?void 0:d.message})(M2||(M2={}));var Y$,_$;class XW{constructor(I,d,G,Z){this._cachedPath=[],this.parent=I,this.data=d,this._path=G,this._key=Z}get path(){if(!this._cachedPath.length)if(this._key instanceof Array)this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var WW2=(I,d)=>{if(mJ(d))return{success:!0,data:d.value};else{if(!I.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let G=new AG(I.common.issues);return this._error=G,this._error}}}};function S4(I){if(!I)return{};let{errorMap:d,invalid_type_error:G,required_error:Z,description:C}=I;if(d&&(G||Z))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(d)return{errorMap:d,description:C};return{errorMap:(w,B)=>{var A,V;let{message:X}=I;if(w.code==="invalid_enum_value")return{message:X!==null&&X!==void 0?X:B.defaultError};if(typeof B.data==="undefined")return{message:(A=X!==null&&X!==void 0?X:Z)!==null&&A!==void 0?A:B.defaultError};if(w.code!=="invalid_type")return{message:B.defaultError};return{message:(V=X!==null&&X!==void 0?X:G)!==null&&V!==void 0?V:B.defaultError}},description:C}}class P4{get description(){return this._def.description}_getType(I){return dX(I.data)}_getOrReturnCtx(I,d){return d||{common:I.parent.common,data:I.data,parsedType:dX(I.data),schemaErrorMap:this._def.errorMap,path:I.path,parent:I.parent}}_processInputParams(I){return{status:new h7,ctx:{common:I.parent.common,data:I.data,parsedType:dX(I.data),schemaErrorMap:this._def.errorMap,path:I.path,parent:I.parent}}}_parseSync(I){let d=this._parse(I);if(D$(d))throw new Error("Synchronous parse encountered promise.");return d}_parseAsync(I){let d=this._parse(I);return Promise.resolve(d)}parse(I,d){let G=this.safeParse(I,d);if(G.success)return G.data;throw G.error}safeParse(I,d){var G;let Z={common:{issues:[],async:(G=d===null||d===void 0?void 0:d.async)!==null&&G!==void 0?G:!1,contextualErrorMap:d===null||d===void 0?void 0:d.errorMap},path:(d===null||d===void 0?void 0:d.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:I,parsedType:dX(I)},C=this._parseSync({data:I,path:Z.path,parent:Z});return WW2(Z,C)}"~validate"(I){var d,G;let Z={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:I,parsedType:dX(I)};if(!this["~standard"].async)try{let C=this._parseSync({data:I,path:[],parent:Z});return mJ(C)?{value:C.value}:{issues:Z.common.issues}}catch(C){if((G=(d=C===null||C===void 0?void 0:C.message)===null||d===void 0?void 0:d.toLowerCase())===null||G===void 0?void 0:G.includes("encountered"))this["~standard"].async=!0;Z.common={issues:[],async:!0}}return this._parseAsync({data:I,path:[],parent:Z}).then((C)=>mJ(C)?{value:C.value}:{issues:Z.common.issues})}async parseAsync(I,d){let G=await this.safeParseAsync(I,d);if(G.success)return G.data;throw G.error}async safeParseAsync(I,d){let G={common:{issues:[],contextualErrorMap:d===null||d===void 0?void 0:d.errorMap,async:!0},path:(d===null||d===void 0?void 0:d.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:I,parsedType:dX(I)},Z=this._parse({data:I,path:G.path,parent:G}),C=await(D$(Z)?Z:Promise.resolve(Z));return WW2(G,C)}refine(I,d){let G=(Z)=>{if(typeof d==="string"||typeof d==="undefined")return{message:d};else if(typeof d==="function")return d(Z);else return d};return this._refinement((Z,C)=>{let W=I(Z),w=()=>C.addIssue({code:y0.custom,...G(Z)});if(typeof Promise!=="undefined"&&W instanceof Promise)return W.then((B)=>{if(!B)return w(),!1;else return!0});if(!W)return w(),!1;else return!0})}refinement(I,d){return this._refinement((G,Z)=>{if(!I(G))return Z.addIssue(typeof d==="function"?d(G,Z):d),!1;else return!0})}_refinement(I){return new bZ({schema:this,typeName:T0.ZodEffects,effect:{type:"refinement",refinement:I}})}superRefine(I){return this._refinement(I)}constructor(I){this.spa=this.safeParseAsync,this._def=I,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(d)=>this["~validate"](d)}}optional(){return VG.create(this,this._def)}nullable(){return GX.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return VW.create(this)}promise(){return jJ.create(this,this._def)}or(I){return XR.create([this,I],this._def)}and(I){return YR.create(this,I,this._def)}transform(I){return new bZ({...S4(this._def),schema:this,typeName:T0.ZodEffects,effect:{type:"transform",transform:I}})}default(I){let d=typeof I==="function"?I:()=>I;return new FR({...S4(this._def),innerType:this,defaultValue:d,typeName:T0.ZodDefault})}brand(){return new Ka({typeName:T0.ZodBranded,type:this,...S4(this._def)})}catch(I){let d=typeof I==="function"?I:()=>I;return new gR({...S4(this._def),innerType:this,catchValue:d,typeName:T0.ZodCatch})}describe(I){return new this.constructor({...this._def,description:I})}pipe(I){return N$.create(this,I)}readonly(){return JR.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var Ds5=/^c[^\s-]{8,}$/i,Hs5=/^[0-9a-z]+$/,Fs5=/^[0-9A-HJKMNP-TV-Z]{26}$/i,gs5=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Js5=/^[a-z0-9_-]{21}$/i,Ks5=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Ns5=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,zs5=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Qs5="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",zF1,fs5=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,qs5=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Rs5=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Us5=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,vs5=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Es5=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,VW2="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Ms5=new RegExp(`^${VW2}$`);function XW2(I){let d="([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";if(I.precision)d=`${d}\\.\\d{${I.precision}}`;else if(I.precision==null)d=`${d}(\\.\\d+)?`;return d}function Ss5(I){return new RegExp(`^${XW2(I)}$`)}function YW2(I){let d=`${VW2}T${XW2(I)}`,G=[];if(G.push(I.local?"Z?":"Z"),I.offset)G.push("([+-]\\d{2}:?\\d{2})");return d=`${d}(${G.join("|")})`,new RegExp(`^${d}$`)}function Ls5(I,d){if((d==="v4"||!d)&&fs5.test(I))return!0;if((d==="v6"||!d)&&Rs5.test(I))return!0;return!1}function ys5(I,d){if(!Ks5.test(I))return!1;try{let[G]=I.split("."),Z=G.replace(/-/g,"+").replace(/_/g,"/").padEnd(G.length+(4-G.length%4)%4,"="),C=JSON.parse(atob(Z));if(typeof C!=="object"||C===null)return!1;if(!C.typ||!C.alg)return!1;if(d&&C.alg!==d)return!1;return!0}catch(G){return!1}}function Ps5(I,d){if((d==="v4"||!d)&&qs5.test(I))return!0;if((d==="v6"||!d)&&Us5.test(I))return!0;return!1}class AW extends P4{_parse(I){if(this._def.coerce)I.data=String(I.data);if(this._getType(I)!==_2.string){let C=this._getOrReturnCtx(I);return d2(C,{code:y0.invalid_type,expected:_2.string,received:C.parsedType}),w4}let G=new h7,Z=void 0;for(let C of this._def.checks)if(C.kind==="min"){if(I.data.lengthC.value)Z=this._getOrReturnCtx(I,Z),d2(Z,{code:y0.too_big,maximum:C.value,type:"string",inclusive:!0,exact:!1,message:C.message}),G.dirty()}else if(C.kind==="length"){let W=I.data.length>C.value,w=I.data.lengthI.test(Z),{validation:d,code:y0.invalid_string,...M2.errToObj(G)})}_addCheck(I){return new AW({...this._def,checks:[...this._def.checks,I]})}email(I){return this._addCheck({kind:"email",...M2.errToObj(I)})}url(I){return this._addCheck({kind:"url",...M2.errToObj(I)})}emoji(I){return this._addCheck({kind:"emoji",...M2.errToObj(I)})}uuid(I){return this._addCheck({kind:"uuid",...M2.errToObj(I)})}nanoid(I){return this._addCheck({kind:"nanoid",...M2.errToObj(I)})}cuid(I){return this._addCheck({kind:"cuid",...M2.errToObj(I)})}cuid2(I){return this._addCheck({kind:"cuid2",...M2.errToObj(I)})}ulid(I){return this._addCheck({kind:"ulid",...M2.errToObj(I)})}base64(I){return this._addCheck({kind:"base64",...M2.errToObj(I)})}base64url(I){return this._addCheck({kind:"base64url",...M2.errToObj(I)})}jwt(I){return this._addCheck({kind:"jwt",...M2.errToObj(I)})}ip(I){return this._addCheck({kind:"ip",...M2.errToObj(I)})}cidr(I){return this._addCheck({kind:"cidr",...M2.errToObj(I)})}datetime(I){var d,G;if(typeof I==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:I});return this._addCheck({kind:"datetime",precision:typeof(I===null||I===void 0?void 0:I.precision)==="undefined"?null:I===null||I===void 0?void 0:I.precision,offset:(d=I===null||I===void 0?void 0:I.offset)!==null&&d!==void 0?d:!1,local:(G=I===null||I===void 0?void 0:I.local)!==null&&G!==void 0?G:!1,...M2.errToObj(I===null||I===void 0?void 0:I.message)})}date(I){return this._addCheck({kind:"date",message:I})}time(I){if(typeof I==="string")return this._addCheck({kind:"time",precision:null,message:I});return this._addCheck({kind:"time",precision:typeof(I===null||I===void 0?void 0:I.precision)==="undefined"?null:I===null||I===void 0?void 0:I.precision,...M2.errToObj(I===null||I===void 0?void 0:I.message)})}duration(I){return this._addCheck({kind:"duration",...M2.errToObj(I)})}regex(I,d){return this._addCheck({kind:"regex",regex:I,...M2.errToObj(d)})}includes(I,d){return this._addCheck({kind:"includes",value:I,position:d===null||d===void 0?void 0:d.position,...M2.errToObj(d===null||d===void 0?void 0:d.message)})}startsWith(I,d){return this._addCheck({kind:"startsWith",value:I,...M2.errToObj(d)})}endsWith(I,d){return this._addCheck({kind:"endsWith",value:I,...M2.errToObj(d)})}min(I,d){return this._addCheck({kind:"min",value:I,...M2.errToObj(d)})}max(I,d){return this._addCheck({kind:"max",value:I,...M2.errToObj(d)})}length(I,d){return this._addCheck({kind:"length",value:I,...M2.errToObj(d)})}nonempty(I){return this.min(1,M2.errToObj(I))}trim(){return new AW({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new AW({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new AW({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((I)=>I.kind==="datetime")}get isDate(){return!!this._def.checks.find((I)=>I.kind==="date")}get isTime(){return!!this._def.checks.find((I)=>I.kind==="time")}get isDuration(){return!!this._def.checks.find((I)=>I.kind==="duration")}get isEmail(){return!!this._def.checks.find((I)=>I.kind==="email")}get isURL(){return!!this._def.checks.find((I)=>I.kind==="url")}get isEmoji(){return!!this._def.checks.find((I)=>I.kind==="emoji")}get isUUID(){return!!this._def.checks.find((I)=>I.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((I)=>I.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((I)=>I.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((I)=>I.kind==="cuid2")}get isULID(){return!!this._def.checks.find((I)=>I.kind==="ulid")}get isIP(){return!!this._def.checks.find((I)=>I.kind==="ip")}get isCIDR(){return!!this._def.checks.find((I)=>I.kind==="cidr")}get isBase64(){return!!this._def.checks.find((I)=>I.kind==="base64")}get isBase64url(){return!!this._def.checks.find((I)=>I.kind==="base64url")}get minLength(){let I=null;for(let d of this._def.checks)if(d.kind==="min"){if(I===null||d.value>I)I=d.value}return I}get maxLength(){let I=null;for(let d of this._def.checks)if(d.kind==="max"){if(I===null||d.value{var d;return new AW({checks:[],typeName:T0.ZodString,coerce:(d=I===null||I===void 0?void 0:I.coerce)!==null&&d!==void 0?d:!1,...S4(I)})};function $s5(I,d){let G=(I.toString().split(".")[1]||"").length,Z=(d.toString().split(".")[1]||"").length,C=G>Z?G:Z,W=parseInt(I.toFixed(C).replace(".","")),w=parseInt(d.toFixed(C).replace(".",""));return W%w/Math.pow(10,C)}class tD extends P4{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(I){if(this._def.coerce)I.data=Number(I.data);if(this._getType(I)!==_2.number){let C=this._getOrReturnCtx(I);return d2(C,{code:y0.invalid_type,expected:_2.number,received:C.parsedType}),w4}let G=void 0,Z=new h7;for(let C of this._def.checks)if(C.kind==="int"){if(!N5.isInteger(I.data))G=this._getOrReturnCtx(I,G),d2(G,{code:y0.invalid_type,expected:"integer",received:"float",message:C.message}),Z.dirty()}else if(C.kind==="min"){if(C.inclusive?I.dataC.value:I.data>=C.value)G=this._getOrReturnCtx(I,G),d2(G,{code:y0.too_big,maximum:C.value,type:"number",inclusive:C.inclusive,exact:!1,message:C.message}),Z.dirty()}else if(C.kind==="multipleOf"){if($s5(I.data,C.value)!==0)G=this._getOrReturnCtx(I,G),d2(G,{code:y0.not_multiple_of,multipleOf:C.value,message:C.message}),Z.dirty()}else if(C.kind==="finite"){if(!Number.isFinite(I.data))G=this._getOrReturnCtx(I,G),d2(G,{code:y0.not_finite,message:C.message}),Z.dirty()}else N5.assertNever(C);return{status:Z.value,value:I.data}}gte(I,d){return this.setLimit("min",I,!0,M2.toString(d))}gt(I,d){return this.setLimit("min",I,!1,M2.toString(d))}lte(I,d){return this.setLimit("max",I,!0,M2.toString(d))}lt(I,d){return this.setLimit("max",I,!1,M2.toString(d))}setLimit(I,d,G,Z){return new tD({...this._def,checks:[...this._def.checks,{kind:I,value:d,inclusive:G,message:M2.toString(Z)}]})}_addCheck(I){return new tD({...this._def,checks:[...this._def.checks,I]})}int(I){return this._addCheck({kind:"int",message:M2.toString(I)})}positive(I){return this._addCheck({kind:"min",value:0,inclusive:!1,message:M2.toString(I)})}negative(I){return this._addCheck({kind:"max",value:0,inclusive:!1,message:M2.toString(I)})}nonpositive(I){return this._addCheck({kind:"max",value:0,inclusive:!0,message:M2.toString(I)})}nonnegative(I){return this._addCheck({kind:"min",value:0,inclusive:!0,message:M2.toString(I)})}multipleOf(I,d){return this._addCheck({kind:"multipleOf",value:I,message:M2.toString(d)})}finite(I){return this._addCheck({kind:"finite",message:M2.toString(I)})}safe(I){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:M2.toString(I)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:M2.toString(I)})}get minValue(){let I=null;for(let d of this._def.checks)if(d.kind==="min"){if(I===null||d.value>I)I=d.value}return I}get maxValue(){let I=null;for(let d of this._def.checks)if(d.kind==="max"){if(I===null||d.valueI.kind==="int"||I.kind==="multipleOf"&&N5.isInteger(I.value))}get isFinite(){let I=null,d=null;for(let G of this._def.checks)if(G.kind==="finite"||G.kind==="int"||G.kind==="multipleOf")return!0;else if(G.kind==="min"){if(d===null||G.value>d)d=G.value}else if(G.kind==="max"){if(I===null||G.value{return new tD({checks:[],typeName:T0.ZodNumber,coerce:(I===null||I===void 0?void 0:I.coerce)||!1,...S4(I)})};class IH extends P4{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(I){if(this._def.coerce)try{I.data=BigInt(I.data)}catch(C){return this._getInvalidInput(I)}if(this._getType(I)!==_2.bigint)return this._getInvalidInput(I);let G=void 0,Z=new h7;for(let C of this._def.checks)if(C.kind==="min"){if(C.inclusive?I.dataC.value:I.data>=C.value)G=this._getOrReturnCtx(I,G),d2(G,{code:y0.too_big,type:"bigint",maximum:C.value,inclusive:C.inclusive,message:C.message}),Z.dirty()}else if(C.kind==="multipleOf"){if(I.data%C.value!==BigInt(0))G=this._getOrReturnCtx(I,G),d2(G,{code:y0.not_multiple_of,multipleOf:C.value,message:C.message}),Z.dirty()}else N5.assertNever(C);return{status:Z.value,value:I.data}}_getInvalidInput(I){let d=this._getOrReturnCtx(I);return d2(d,{code:y0.invalid_type,expected:_2.bigint,received:d.parsedType}),w4}gte(I,d){return this.setLimit("min",I,!0,M2.toString(d))}gt(I,d){return this.setLimit("min",I,!1,M2.toString(d))}lte(I,d){return this.setLimit("max",I,!0,M2.toString(d))}lt(I,d){return this.setLimit("max",I,!1,M2.toString(d))}setLimit(I,d,G,Z){return new IH({...this._def,checks:[...this._def.checks,{kind:I,value:d,inclusive:G,message:M2.toString(Z)}]})}_addCheck(I){return new IH({...this._def,checks:[...this._def.checks,I]})}positive(I){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:M2.toString(I)})}negative(I){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:M2.toString(I)})}nonpositive(I){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:M2.toString(I)})}nonnegative(I){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:M2.toString(I)})}multipleOf(I,d){return this._addCheck({kind:"multipleOf",value:I,message:M2.toString(d)})}get minValue(){let I=null;for(let d of this._def.checks)if(d.kind==="min"){if(I===null||d.value>I)I=d.value}return I}get maxValue(){let I=null;for(let d of this._def.checks)if(d.kind==="max"){if(I===null||d.value{var d;return new IH({checks:[],typeName:T0.ZodBigInt,coerce:(d=I===null||I===void 0?void 0:I.coerce)!==null&&d!==void 0?d:!1,...S4(I)})};class BR extends P4{_parse(I){if(this._def.coerce)I.data=Boolean(I.data);if(this._getType(I)!==_2.boolean){let G=this._getOrReturnCtx(I);return d2(G,{code:y0.invalid_type,expected:_2.boolean,received:G.parsedType}),w4}return DI(I.data)}}BR.create=(I)=>{return new BR({typeName:T0.ZodBoolean,coerce:(I===null||I===void 0?void 0:I.coerce)||!1,...S4(I)})};class lJ extends P4{_parse(I){if(this._def.coerce)I.data=new Date(I.data);if(this._getType(I)!==_2.date){let C=this._getOrReturnCtx(I);return d2(C,{code:y0.invalid_type,expected:_2.date,received:C.parsedType}),w4}if(isNaN(I.data.getTime())){let C=this._getOrReturnCtx(I);return d2(C,{code:y0.invalid_date}),w4}let G=new h7,Z=void 0;for(let C of this._def.checks)if(C.kind==="min"){if(I.data.getTime()C.value)Z=this._getOrReturnCtx(I,Z),d2(Z,{code:y0.too_big,message:C.message,inclusive:!0,exact:!1,maximum:C.value,type:"date"}),G.dirty()}else N5.assertNever(C);return{status:G.value,value:new Date(I.data.getTime())}}_addCheck(I){return new lJ({...this._def,checks:[...this._def.checks,I]})}min(I,d){return this._addCheck({kind:"min",value:I.getTime(),message:M2.toString(d)})}max(I,d){return this._addCheck({kind:"max",value:I.getTime(),message:M2.toString(d)})}get minDate(){let I=null;for(let d of this._def.checks)if(d.kind==="min"){if(I===null||d.value>I)I=d.value}return I!=null?new Date(I):null}get maxDate(){let I=null;for(let d of this._def.checks)if(d.kind==="max"){if(I===null||d.value{return new lJ({checks:[],coerce:(I===null||I===void 0?void 0:I.coerce)||!1,typeName:T0.ZodDate,...S4(I)})};class H$ extends P4{_parse(I){if(this._getType(I)!==_2.symbol){let G=this._getOrReturnCtx(I);return d2(G,{code:y0.invalid_type,expected:_2.symbol,received:G.parsedType}),w4}return DI(I.data)}}H$.create=(I)=>{return new H$({typeName:T0.ZodSymbol,...S4(I)})};class AR extends P4{_parse(I){if(this._getType(I)!==_2.undefined){let G=this._getOrReturnCtx(I);return d2(G,{code:y0.invalid_type,expected:_2.undefined,received:G.parsedType}),w4}return DI(I.data)}}AR.create=(I)=>{return new AR({typeName:T0.ZodUndefined,...S4(I)})};class VR extends P4{_parse(I){if(this._getType(I)!==_2.null){let G=this._getOrReturnCtx(I);return d2(G,{code:y0.invalid_type,expected:_2.null,received:G.parsedType}),w4}return DI(I.data)}}VR.create=(I)=>{return new VR({typeName:T0.ZodNull,...S4(I)})};class bJ extends P4{constructor(){super(...arguments);this._any=!0}_parse(I){return DI(I.data)}}bJ.create=(I)=>{return new bJ({typeName:T0.ZodAny,...S4(I)})};class eD extends P4{constructor(){super(...arguments);this._unknown=!0}_parse(I){return DI(I.data)}}eD.create=(I)=>{return new eD({typeName:T0.ZodUnknown,...S4(I)})};class EB extends P4{_parse(I){let d=this._getOrReturnCtx(I);return d2(d,{code:y0.invalid_type,expected:_2.never,received:d.parsedType}),w4}}EB.create=(I)=>{return new EB({typeName:T0.ZodNever,...S4(I)})};class F$ extends P4{_parse(I){if(this._getType(I)!==_2.undefined){let G=this._getOrReturnCtx(I);return d2(G,{code:y0.invalid_type,expected:_2.void,received:G.parsedType}),w4}return DI(I.data)}}F$.create=(I)=>{return new F$({typeName:T0.ZodVoid,...S4(I)})};class VW extends P4{_parse(I){let{ctx:d,status:G}=this._processInputParams(I),Z=this._def;if(d.parsedType!==_2.array)return d2(d,{code:y0.invalid_type,expected:_2.array,received:d.parsedType}),w4;if(Z.exactLength!==null){let W=d.data.length>Z.exactLength.value,w=d.data.lengthZ.maxLength.value)d2(d,{code:y0.too_big,maximum:Z.maxLength.value,type:"array",inclusive:!0,exact:!1,message:Z.maxLength.message}),G.dirty()}if(d.common.async)return Promise.all([...d.data].map((W,w)=>{return Z.type._parseAsync(new XW(d,W,d.path,w))})).then((W)=>{return h7.mergeArray(G,W)});let C=[...d.data].map((W,w)=>{return Z.type._parseSync(new XW(d,W,d.path,w))});return h7.mergeArray(G,C)}get element(){return this._def.type}min(I,d){return new VW({...this._def,minLength:{value:I,message:M2.toString(d)}})}max(I,d){return new VW({...this._def,maxLength:{value:I,message:M2.toString(d)}})}length(I,d){return new VW({...this._def,exactLength:{value:I,message:M2.toString(d)}})}nonempty(I){return this.min(1,I)}}VW.create=(I,d)=>{return new VW({type:I,minLength:null,maxLength:null,exactLength:null,typeName:T0.ZodArray,...S4(d)})};function ZR(I){if(I instanceof M3){let d={};for(let G in I.shape){let Z=I.shape[G];d[G]=VG.create(ZR(Z))}return new M3({...I._def,shape:()=>d})}else if(I instanceof VW)return new VW({...I._def,type:ZR(I.element)});else if(I instanceof VG)return VG.create(ZR(I.unwrap()));else if(I instanceof GX)return GX.create(ZR(I.unwrap()));else if(I instanceof MB)return MB.create(I.items.map((d)=>ZR(d)));else return I}class M3 extends P4{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let I=this._def.shape(),d=N5.objectKeys(I);return this._cached={shape:I,keys:d}}_parse(I){if(this._getType(I)!==_2.object){let A=this._getOrReturnCtx(I);return d2(A,{code:y0.invalid_type,expected:_2.object,received:A.parsedType}),w4}let{status:G,ctx:Z}=this._processInputParams(I),{shape:C,keys:W}=this._getCached(),w=[];if(!(this._def.catchall instanceof EB&&this._def.unknownKeys==="strip")){for(let A in Z.data)if(!W.includes(A))w.push(A)}let B=[];for(let A of W){let V=C[A],X=Z.data[A];B.push({key:{status:"valid",value:A},value:V._parse(new XW(Z,X,Z.path,A)),alwaysSet:A in Z.data})}if(this._def.catchall instanceof EB){let A=this._def.unknownKeys;if(A==="passthrough")for(let V of w)B.push({key:{status:"valid",value:V},value:{status:"valid",value:Z.data[V]}});else if(A==="strict"){if(w.length>0)d2(Z,{code:y0.unrecognized_keys,keys:w}),G.dirty()}else if(A==="strip");else throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let A=this._def.catchall;for(let V of w){let X=Z.data[V];B.push({key:{status:"valid",value:V},value:A._parse(new XW(Z,X,Z.path,V)),alwaysSet:V in Z.data})}}if(Z.common.async)return Promise.resolve().then(async()=>{let A=[];for(let V of B){let X=await V.key,_=await V.value;A.push({key:X,value:_,alwaysSet:V.alwaysSet})}return A}).then((A)=>{return h7.mergeObjectSync(G,A)});else return h7.mergeObjectSync(G,B)}get shape(){return this._def.shape()}strict(I){return M2.errToObj,new M3({...this._def,unknownKeys:"strict",...I!==void 0?{errorMap:(d,G)=>{var Z,C,W,w;let B=(W=(C=(Z=this._def).errorMap)===null||C===void 0?void 0:C.call(Z,d,G).message)!==null&&W!==void 0?W:G.defaultError;if(d.code==="unrecognized_keys")return{message:(w=M2.errToObj(I).message)!==null&&w!==void 0?w:B};return{message:B}}}:{}})}strip(){return new M3({...this._def,unknownKeys:"strip"})}passthrough(){return new M3({...this._def,unknownKeys:"passthrough"})}extend(I){return new M3({...this._def,shape:()=>({...this._def.shape(),...I})})}merge(I){return new M3({unknownKeys:I._def.unknownKeys,catchall:I._def.catchall,shape:()=>({...this._def.shape(),...I._def.shape()}),typeName:T0.ZodObject})}setKey(I,d){return this.augment({[I]:d})}catchall(I){return new M3({...this._def,catchall:I})}pick(I){let d={};return N5.objectKeys(I).forEach((G)=>{if(I[G]&&this.shape[G])d[G]=this.shape[G]}),new M3({...this._def,shape:()=>d})}omit(I){let d={};return N5.objectKeys(this.shape).forEach((G)=>{if(!I[G])d[G]=this.shape[G]}),new M3({...this._def,shape:()=>d})}deepPartial(){return ZR(this)}partial(I){let d={};return N5.objectKeys(this.shape).forEach((G)=>{let Z=this.shape[G];if(I&&!I[G])d[G]=Z;else d[G]=Z.optional()}),new M3({...this._def,shape:()=>d})}required(I){let d={};return N5.objectKeys(this.shape).forEach((G)=>{if(I&&!I[G])d[G]=this.shape[G];else{let C=this.shape[G];while(C instanceof VG)C=C._def.innerType;d[G]=C}}),new M3({...this._def,shape:()=>d})}keyof(){return _W2(N5.objectKeys(this.shape))}}M3.create=(I,d)=>{return new M3({shape:()=>I,unknownKeys:"strip",catchall:EB.create(),typeName:T0.ZodObject,...S4(d)})};M3.strictCreate=(I,d)=>{return new M3({shape:()=>I,unknownKeys:"strict",catchall:EB.create(),typeName:T0.ZodObject,...S4(d)})};M3.lazycreate=(I,d)=>{return new M3({shape:I,unknownKeys:"strip",catchall:EB.create(),typeName:T0.ZodObject,...S4(d)})};class XR extends P4{_parse(I){let{ctx:d}=this._processInputParams(I),G=this._def.options;function Z(C){for(let w of C)if(w.result.status==="valid")return w.result;for(let w of C)if(w.result.status==="dirty")return d.common.issues.push(...w.ctx.common.issues),w.result;let W=C.map((w)=>new AG(w.ctx.common.issues));return d2(d,{code:y0.invalid_union,unionErrors:W}),w4}if(d.common.async)return Promise.all(G.map(async(C)=>{let W={...d,common:{...d.common,issues:[]},parent:null};return{result:await C._parseAsync({data:d.data,path:d.path,parent:W}),ctx:W}})).then(Z);else{let C=void 0,W=[];for(let B of G){let A={...d,common:{...d.common,issues:[]},parent:null},V=B._parseSync({data:d.data,path:d.path,parent:A});if(V.status==="valid")return V;else if(V.status==="dirty"&&!C)C={result:V,ctx:A};if(A.common.issues.length)W.push(A.common.issues)}if(C)return d.common.issues.push(...C.ctx.common.issues),C.result;let w=W.map((B)=>new AG(B));return d2(d,{code:y0.invalid_union,unionErrors:w}),w4}}get options(){return this._def.options}}XR.create=(I,d)=>{return new XR({options:I,typeName:T0.ZodUnion,...S4(d)})};var IX=(I)=>{if(I instanceof _R)return IX(I.schema);else if(I instanceof bZ)return IX(I.innerType());else if(I instanceof DR)return[I.value];else if(I instanceof dH)return I.options;else if(I instanceof HR)return N5.objectValues(I.enum);else if(I instanceof FR)return IX(I._def.innerType);else if(I instanceof AR)return[void 0];else if(I instanceof VR)return[null];else if(I instanceof VG)return[void 0,...IX(I.unwrap())];else if(I instanceof GX)return[null,...IX(I.unwrap())];else if(I instanceof Ka)return IX(I.unwrap());else if(I instanceof JR)return IX(I.unwrap());else if(I instanceof gR)return IX(I._def.innerType);else return[]};class Ja extends P4{_parse(I){let{ctx:d}=this._processInputParams(I);if(d.parsedType!==_2.object)return d2(d,{code:y0.invalid_type,expected:_2.object,received:d.parsedType}),w4;let G=this.discriminator,Z=d.data[G],C=this.optionsMap.get(Z);if(!C)return d2(d,{code:y0.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[G]}),w4;if(d.common.async)return C._parseAsync({data:d.data,path:d.path,parent:d});else return C._parseSync({data:d.data,path:d.path,parent:d})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(I,d,G){let Z=new Map;for(let C of d){let W=IX(C.shape[I]);if(!W.length)throw new Error(`A discriminator value for key \`${I}\` could not be extracted from all schema options`);for(let w of W){if(Z.has(w))throw new Error(`Discriminator property ${String(I)} has duplicate value ${String(w)}`);Z.set(w,C)}}return new Ja({typeName:T0.ZodDiscriminatedUnion,discriminator:I,options:d,optionsMap:Z,...S4(G)})}}function RF1(I,d){let G=dX(I),Z=dX(d);if(I===d)return{valid:!0,data:I};else if(G===_2.object&&Z===_2.object){let C=N5.objectKeys(d),W=N5.objectKeys(I).filter((B)=>C.indexOf(B)!==-1),w={...I,...d};for(let B of W){let A=RF1(I[B],d[B]);if(!A.valid)return{valid:!1};w[B]=A.data}return{valid:!0,data:w}}else if(G===_2.array&&Z===_2.array){if(I.length!==d.length)return{valid:!1};let C=[];for(let W=0;W{if(fF1(C)||fF1(W))return w4;let w=RF1(C.value,W.value);if(!w.valid)return d2(G,{code:y0.invalid_intersection_types}),w4;if(qF1(C)||qF1(W))d.dirty();return{status:d.value,value:w.data}};if(G.common.async)return Promise.all([this._def.left._parseAsync({data:G.data,path:G.path,parent:G}),this._def.right._parseAsync({data:G.data,path:G.path,parent:G})]).then(([C,W])=>Z(C,W));else return Z(this._def.left._parseSync({data:G.data,path:G.path,parent:G}),this._def.right._parseSync({data:G.data,path:G.path,parent:G}))}}YR.create=(I,d,G)=>{return new YR({left:I,right:d,typeName:T0.ZodIntersection,...S4(G)})};class MB extends P4{_parse(I){let{status:d,ctx:G}=this._processInputParams(I);if(G.parsedType!==_2.array)return d2(G,{code:y0.invalid_type,expected:_2.array,received:G.parsedType}),w4;if(G.data.lengththis._def.items.length)d2(G,{code:y0.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),d.dirty();let C=[...G.data].map((W,w)=>{let B=this._def.items[w]||this._def.rest;if(!B)return null;return B._parse(new XW(G,W,G.path,w))}).filter((W)=>!!W);if(G.common.async)return Promise.all(C).then((W)=>{return h7.mergeArray(d,W)});else return h7.mergeArray(d,C)}get items(){return this._def.items}rest(I){return new MB({...this._def,rest:I})}}MB.create=(I,d)=>{if(!Array.isArray(I))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new MB({items:I,typeName:T0.ZodTuple,rest:null,...S4(d)})};class g$ extends P4{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(I){let{status:d,ctx:G}=this._processInputParams(I);if(G.parsedType!==_2.object)return d2(G,{code:y0.invalid_type,expected:_2.object,received:G.parsedType}),w4;let Z=[],C=this._def.keyType,W=this._def.valueType;for(let w in G.data)Z.push({key:C._parse(new XW(G,w,G.path,w)),value:W._parse(new XW(G,G.data[w],G.path,w)),alwaysSet:w in G.data});if(G.common.async)return h7.mergeObjectAsync(d,Z);else return h7.mergeObjectSync(d,Z)}get element(){return this._def.valueType}static create(I,d,G){if(d instanceof P4)return new g$({keyType:I,valueType:d,typeName:T0.ZodRecord,...S4(G)});return new g$({keyType:AW.create(),valueType:I,typeName:T0.ZodRecord,...S4(d)})}}class J$ extends P4{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(I){let{status:d,ctx:G}=this._processInputParams(I);if(G.parsedType!==_2.map)return d2(G,{code:y0.invalid_type,expected:_2.map,received:G.parsedType}),w4;let Z=this._def.keyType,C=this._def.valueType,W=[...G.data.entries()].map(([w,B],A)=>{return{key:Z._parse(new XW(G,w,G.path,[A,"key"])),value:C._parse(new XW(G,B,G.path,[A,"value"]))}});if(G.common.async){let w=new Map;return Promise.resolve().then(async()=>{for(let B of W){let A=await B.key,V=await B.value;if(A.status==="aborted"||V.status==="aborted")return w4;if(A.status==="dirty"||V.status==="dirty")d.dirty();w.set(A.value,V.value)}return{status:d.value,value:w}})}else{let w=new Map;for(let B of W){let{key:A,value:V}=B;if(A.status==="aborted"||V.status==="aborted")return w4;if(A.status==="dirty"||V.status==="dirty")d.dirty();w.set(A.value,V.value)}return{status:d.value,value:w}}}}J$.create=(I,d,G)=>{return new J$({valueType:d,keyType:I,typeName:T0.ZodMap,...S4(G)})};class hJ extends P4{_parse(I){let{status:d,ctx:G}=this._processInputParams(I);if(G.parsedType!==_2.set)return d2(G,{code:y0.invalid_type,expected:_2.set,received:G.parsedType}),w4;let Z=this._def;if(Z.minSize!==null){if(G.data.sizeZ.maxSize.value)d2(G,{code:y0.too_big,maximum:Z.maxSize.value,type:"set",inclusive:!0,exact:!1,message:Z.maxSize.message}),d.dirty()}let C=this._def.valueType;function W(B){let A=new Set;for(let V of B){if(V.status==="aborted")return w4;if(V.status==="dirty")d.dirty();A.add(V.value)}return{status:d.value,value:A}}let w=[...G.data.values()].map((B,A)=>C._parse(new XW(G,B,G.path,A)));if(G.common.async)return Promise.all(w).then((B)=>W(B));else return W(w)}min(I,d){return new hJ({...this._def,minSize:{value:I,message:M2.toString(d)}})}max(I,d){return new hJ({...this._def,maxSize:{value:I,message:M2.toString(d)}})}size(I,d){return this.min(I,d).max(I,d)}nonempty(I){return this.min(1,I)}}hJ.create=(I,d)=>{return new hJ({valueType:I,minSize:null,maxSize:null,typeName:T0.ZodSet,...S4(d)})};class WR extends P4{constructor(){super(...arguments);this.validate=this.implement}_parse(I){let{ctx:d}=this._processInputParams(I);if(d.parsedType!==_2.function)return d2(d,{code:y0.invalid_type,expected:_2.function,received:d.parsedType}),w4;function G(w,B){return Fa({data:w,path:d.path,errorMaps:[d.common.contextualErrorMap,d.schemaErrorMap,Ha(),wR].filter((A)=>!!A),issueData:{code:y0.invalid_arguments,argumentsError:B}})}function Z(w,B){return Fa({data:w,path:d.path,errorMaps:[d.common.contextualErrorMap,d.schemaErrorMap,Ha(),wR].filter((A)=>!!A),issueData:{code:y0.invalid_return_type,returnTypeError:B}})}let C={errorMap:d.common.contextualErrorMap},W=d.data;if(this._def.returns instanceof jJ){let w=this;return DI(async function(...B){let A=new AG([]),V=await w._def.args.parseAsync(B,C).catch((F)=>{throw A.addIssue(G(B,F)),A}),X=await Reflect.apply(W,this,V);return await w._def.returns._def.type.parseAsync(X,C).catch((F)=>{throw A.addIssue(Z(X,F)),A})})}else{let w=this;return DI(function(...B){let A=w._def.args.safeParse(B,C);if(!A.success)throw new AG([G(B,A.error)]);let V=Reflect.apply(W,this,A.data),X=w._def.returns.safeParse(V,C);if(!X.success)throw new AG([Z(V,X.error)]);return X.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...I){return new WR({...this._def,args:MB.create(I).rest(eD.create())})}returns(I){return new WR({...this._def,returns:I})}implement(I){return this.parse(I)}strictImplement(I){return this.parse(I)}static create(I,d,G){return new WR({args:I?I:MB.create([]).rest(eD.create()),returns:d||eD.create(),typeName:T0.ZodFunction,...S4(G)})}}class _R extends P4{get schema(){return this._def.getter()}_parse(I){let{ctx:d}=this._processInputParams(I);return this._def.getter()._parse({data:d.data,path:d.path,parent:d})}}_R.create=(I,d)=>{return new _R({getter:I,typeName:T0.ZodLazy,...S4(d)})};class DR extends P4{_parse(I){if(I.data!==this._def.value){let d=this._getOrReturnCtx(I);return d2(d,{received:d.data,code:y0.invalid_literal,expected:this._def.value}),w4}return{status:"valid",value:I.data}}get value(){return this._def.value}}DR.create=(I,d)=>{return new DR({value:I,typeName:T0.ZodLiteral,...S4(d)})};function _W2(I,d){return new dH({values:I,typeName:T0.ZodEnum,...S4(d)})}class dH extends P4{constructor(){super(...arguments);Y$.set(this,void 0)}_parse(I){if(typeof I.data!=="string"){let d=this._getOrReturnCtx(I),G=this._def.values;return d2(d,{expected:N5.joinValues(G),received:d.parsedType,code:y0.invalid_type}),w4}if(!ga(this,Y$,"f"))AW2(this,Y$,new Set(this._def.values),"f");if(!ga(this,Y$,"f").has(I.data)){let d=this._getOrReturnCtx(I),G=this._def.values;return d2(d,{received:d.data,code:y0.invalid_enum_value,options:G}),w4}return DI(I.data)}get options(){return this._def.values}get enum(){let I={};for(let d of this._def.values)I[d]=d;return I}get Values(){let I={};for(let d of this._def.values)I[d]=d;return I}get Enum(){let I={};for(let d of this._def.values)I[d]=d;return I}extract(I,d=this._def){return dH.create(I,{...this._def,...d})}exclude(I,d=this._def){return dH.create(this.options.filter((G)=>!I.includes(G)),{...this._def,...d})}}Y$=new WeakMap;dH.create=_W2;class HR extends P4{constructor(){super(...arguments);_$.set(this,void 0)}_parse(I){let d=N5.getValidEnumValues(this._def.values),G=this._getOrReturnCtx(I);if(G.parsedType!==_2.string&&G.parsedType!==_2.number){let Z=N5.objectValues(d);return d2(G,{expected:N5.joinValues(Z),received:G.parsedType,code:y0.invalid_type}),w4}if(!ga(this,_$,"f"))AW2(this,_$,new Set(N5.getValidEnumValues(this._def.values)),"f");if(!ga(this,_$,"f").has(I.data)){let Z=N5.objectValues(d);return d2(G,{received:G.data,code:y0.invalid_enum_value,options:Z}),w4}return DI(I.data)}get enum(){return this._def.values}}_$=new WeakMap;HR.create=(I,d)=>{return new HR({values:I,typeName:T0.ZodNativeEnum,...S4(d)})};class jJ extends P4{unwrap(){return this._def.type}_parse(I){let{ctx:d}=this._processInputParams(I);if(d.parsedType!==_2.promise&&d.common.async===!1)return d2(d,{code:y0.invalid_type,expected:_2.promise,received:d.parsedType}),w4;let G=d.parsedType===_2.promise?d.data:Promise.resolve(d.data);return DI(G.then((Z)=>{return this._def.type.parseAsync(Z,{path:d.path,errorMap:d.common.contextualErrorMap})}))}}jJ.create=(I,d)=>{return new jJ({type:I,typeName:T0.ZodPromise,...S4(d)})};class bZ extends P4{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===T0.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(I){let{status:d,ctx:G}=this._processInputParams(I),Z=this._def.effect||null,C={addIssue:(W)=>{if(d2(G,W),W.fatal)d.abort();else d.dirty()},get path(){return G.path}};if(C.addIssue=C.addIssue.bind(C),Z.type==="preprocess"){let W=Z.transform(G.data,C);if(G.common.async)return Promise.resolve(W).then(async(w)=>{if(d.value==="aborted")return w4;let B=await this._def.schema._parseAsync({data:w,path:G.path,parent:G});if(B.status==="aborted")return w4;if(B.status==="dirty")return CR(B.value);if(d.value==="dirty")return CR(B.value);return B});else{if(d.value==="aborted")return w4;let w=this._def.schema._parseSync({data:W,path:G.path,parent:G});if(w.status==="aborted")return w4;if(w.status==="dirty")return CR(w.value);if(d.value==="dirty")return CR(w.value);return w}}if(Z.type==="refinement"){let W=(w)=>{let B=Z.refinement(w,C);if(G.common.async)return Promise.resolve(B);if(B instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return w};if(G.common.async===!1){let w=this._def.schema._parseSync({data:G.data,path:G.path,parent:G});if(w.status==="aborted")return w4;if(w.status==="dirty")d.dirty();return W(w.value),{status:d.value,value:w.value}}else return this._def.schema._parseAsync({data:G.data,path:G.path,parent:G}).then((w)=>{if(w.status==="aborted")return w4;if(w.status==="dirty")d.dirty();return W(w.value).then(()=>{return{status:d.value,value:w.value}})})}if(Z.type==="transform")if(G.common.async===!1){let W=this._def.schema._parseSync({data:G.data,path:G.path,parent:G});if(!mJ(W))return W;let w=Z.transform(W.value,C);if(w instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:d.value,value:w}}else return this._def.schema._parseAsync({data:G.data,path:G.path,parent:G}).then((W)=>{if(!mJ(W))return W;return Promise.resolve(Z.transform(W.value,C)).then((w)=>({status:d.value,value:w}))});N5.assertNever(Z)}}bZ.create=(I,d,G)=>{return new bZ({schema:I,typeName:T0.ZodEffects,effect:d,...S4(G)})};bZ.createWithPreprocess=(I,d,G)=>{return new bZ({schema:d,effect:{type:"preprocess",transform:I},typeName:T0.ZodEffects,...S4(G)})};class VG extends P4{_parse(I){if(this._getType(I)===_2.undefined)return DI(void 0);return this._def.innerType._parse(I)}unwrap(){return this._def.innerType}}VG.create=(I,d)=>{return new VG({innerType:I,typeName:T0.ZodOptional,...S4(d)})};class GX extends P4{_parse(I){if(this._getType(I)===_2.null)return DI(null);return this._def.innerType._parse(I)}unwrap(){return this._def.innerType}}GX.create=(I,d)=>{return new GX({innerType:I,typeName:T0.ZodNullable,...S4(d)})};class FR extends P4{_parse(I){let{ctx:d}=this._processInputParams(I),G=d.data;if(d.parsedType===_2.undefined)G=this._def.defaultValue();return this._def.innerType._parse({data:G,path:d.path,parent:d})}removeDefault(){return this._def.innerType}}FR.create=(I,d)=>{return new FR({innerType:I,typeName:T0.ZodDefault,defaultValue:typeof d.default==="function"?d.default:()=>d.default,...S4(d)})};class gR extends P4{_parse(I){let{ctx:d}=this._processInputParams(I),G={...d,common:{...d.common,issues:[]}},Z=this._def.innerType._parse({data:G.data,path:G.path,parent:{...G}});if(D$(Z))return Z.then((C)=>{return{status:"valid",value:C.status==="valid"?C.value:this._def.catchValue({get error(){return new AG(G.common.issues)},input:G.data})}});else return{status:"valid",value:Z.status==="valid"?Z.value:this._def.catchValue({get error(){return new AG(G.common.issues)},input:G.data})}}removeCatch(){return this._def.innerType}}gR.create=(I,d)=>{return new gR({innerType:I,typeName:T0.ZodCatch,catchValue:typeof d.catch==="function"?d.catch:()=>d.catch,...S4(d)})};class K$ extends P4{_parse(I){if(this._getType(I)!==_2.nan){let G=this._getOrReturnCtx(I);return d2(G,{code:y0.invalid_type,expected:_2.nan,received:G.parsedType}),w4}return{status:"valid",value:I.data}}}K$.create=(I)=>{return new K$({typeName:T0.ZodNaN,...S4(I)})};var us5=Symbol("zod_brand");class Ka extends P4{_parse(I){let{ctx:d}=this._processInputParams(I),G=d.data;return this._def.type._parse({data:G,path:d.path,parent:d})}unwrap(){return this._def.type}}class N$ extends P4{_parse(I){let{status:d,ctx:G}=this._processInputParams(I);if(G.common.async)return(async()=>{let C=await this._def.in._parseAsync({data:G.data,path:G.path,parent:G});if(C.status==="aborted")return w4;if(C.status==="dirty")return d.dirty(),CR(C.value);else return this._def.out._parseAsync({data:C.value,path:G.path,parent:G})})();else{let Z=this._def.in._parseSync({data:G.data,path:G.path,parent:G});if(Z.status==="aborted")return w4;if(Z.status==="dirty")return d.dirty(),{status:"dirty",value:Z.value};else return this._def.out._parseSync({data:Z.value,path:G.path,parent:G})}}static create(I,d){return new N$({in:I,out:d,typeName:T0.ZodPipeline})}}class JR extends P4{_parse(I){let d=this._def.innerType._parse(I),G=(Z)=>{if(mJ(Z))Z.value=Object.freeze(Z.value);return Z};return D$(d)?d.then((Z)=>G(Z)):G(d)}unwrap(){return this._def.innerType}}JR.create=(I,d)=>{return new JR({innerType:I,typeName:T0.ZodReadonly,...S4(d)})};function DW2(I,d={},G){if(I)return bJ.create().superRefine((Z,C)=>{var W,w;if(!I(Z)){let B=typeof d==="function"?d(Z):typeof d==="string"?{message:d}:d,A=(w=(W=B.fatal)!==null&&W!==void 0?W:G)!==null&&w!==void 0?w:!0,V=typeof B==="string"?{message:B}:B;C.addIssue({code:"custom",...V,fatal:A})}});return bJ.create()}var Ts5={object:M3.lazycreate},T0;(function(I){I.ZodString="ZodString",I.ZodNumber="ZodNumber",I.ZodNaN="ZodNaN",I.ZodBigInt="ZodBigInt",I.ZodBoolean="ZodBoolean",I.ZodDate="ZodDate",I.ZodSymbol="ZodSymbol",I.ZodUndefined="ZodUndefined",I.ZodNull="ZodNull",I.ZodAny="ZodAny",I.ZodUnknown="ZodUnknown",I.ZodNever="ZodNever",I.ZodVoid="ZodVoid",I.ZodArray="ZodArray",I.ZodObject="ZodObject",I.ZodUnion="ZodUnion",I.ZodDiscriminatedUnion="ZodDiscriminatedUnion",I.ZodIntersection="ZodIntersection",I.ZodTuple="ZodTuple",I.ZodRecord="ZodRecord",I.ZodMap="ZodMap",I.ZodSet="ZodSet",I.ZodFunction="ZodFunction",I.ZodLazy="ZodLazy",I.ZodLiteral="ZodLiteral",I.ZodEnum="ZodEnum",I.ZodEffects="ZodEffects",I.ZodNativeEnum="ZodNativeEnum",I.ZodOptional="ZodOptional",I.ZodNullable="ZodNullable",I.ZodDefault="ZodDefault",I.ZodCatch="ZodCatch",I.ZodPromise="ZodPromise",I.ZodBranded="ZodBranded",I.ZodPipeline="ZodPipeline",I.ZodReadonly="ZodReadonly"})(T0||(T0={}));var Os5=(I,d={message:`Input not instance of ${I.name}`})=>DW2((G)=>G instanceof I,d),HW2=AW.create,FW2=tD.create,ms5=K$.create,ls5=IH.create,gW2=BR.create,bs5=lJ.create,hs5=H$.create,js5=AR.create,ks5=VR.create,xs5=bJ.create,cs5=eD.create,ps5=EB.create,is5=F$.create,ns5=VW.create,rs5=M3.create,as5=M3.strictCreate,ss5=XR.create,os5=Ja.create,es5=YR.create,ts5=MB.create,Io5=g$.create,do5=J$.create,Go5=hJ.create,Zo5=WR.create,Co5=_R.create,Wo5=DR.create,wo5=dH.create,Bo5=HR.create,Ao5=jJ.create,wW2=bZ.create,Vo5=VG.create,Xo5=GX.create,Yo5=bZ.createWithPreprocess,_o5=N$.create,Do5=()=>HW2().optional(),Ho5=()=>FW2().optional(),Fo5=()=>gW2().optional(),go5={string:(I)=>AW.create({...I,coerce:!0}),number:(I)=>tD.create({...I,coerce:!0}),boolean:(I)=>BR.create({...I,coerce:!0}),bigint:(I)=>IH.create({...I,coerce:!0}),date:(I)=>lJ.create({...I,coerce:!0})},Jo5=w4,s=Object.freeze({__proto__:null,defaultErrorMap:wR,setErrorMap:Ys5,getErrorMap:Ha,makeIssue:Fa,EMPTY_PATH:_s5,addIssueToContext:d2,ParseStatus:h7,INVALID:w4,DIRTY:CR,OK:DI,isAborted:fF1,isDirty:qF1,isValid:mJ,isAsync:D$,get util(){return N5},get objectUtil(){return QF1},ZodParsedType:_2,getParsedType:dX,ZodType:P4,datetimeRegex:YW2,ZodString:AW,ZodNumber:tD,ZodBigInt:IH,ZodBoolean:BR,ZodDate:lJ,ZodSymbol:H$,ZodUndefined:AR,ZodNull:VR,ZodAny:bJ,ZodUnknown:eD,ZodNever:EB,ZodVoid:F$,ZodArray:VW,ZodObject:M3,ZodUnion:XR,ZodDiscriminatedUnion:Ja,ZodIntersection:YR,ZodTuple:MB,ZodRecord:g$,ZodMap:J$,ZodSet:hJ,ZodFunction:WR,ZodLazy:_R,ZodLiteral:DR,ZodEnum:dH,ZodNativeEnum:HR,ZodPromise:jJ,ZodEffects:bZ,ZodTransformer:bZ,ZodOptional:VG,ZodNullable:GX,ZodDefault:FR,ZodCatch:gR,ZodNaN:K$,BRAND:us5,ZodBranded:Ka,ZodPipeline:N$,ZodReadonly:JR,custom:DW2,Schema:P4,ZodSchema:P4,late:Ts5,get ZodFirstPartyTypeKind(){return T0},coerce:go5,any:xs5,array:ns5,bigint:ls5,boolean:gW2,date:bs5,discriminatedUnion:os5,effect:wW2,enum:wo5,function:Zo5,instanceof:Os5,intersection:es5,lazy:Co5,literal:Wo5,map:do5,nan:ms5,nativeEnum:Bo5,never:ps5,null:ks5,nullable:Xo5,number:FW2,object:rs5,oboolean:Fo5,onumber:Ho5,optional:Vo5,ostring:Do5,pipeline:_o5,preprocess:Yo5,promise:Ao5,record:Io5,set:Go5,strictObject:as5,string:HW2,symbol:hs5,transformer:wW2,tuple:ts5,undefined:js5,union:ss5,unknown:cs5,void:is5,NEVER:Jo5,ZodIssueCode:y0,quotelessJson:Xs5,ZodError:AG});function JW2(){return{}}function KW2(I,d){let G={type:"array"};if(I.type?._def&&I.type?._def?.typeName!==T0.ZodAny)G.items=o2(I.type._def,{...d,currentPath:[...d.currentPath,"items"]});if(I.minLength)X5(G,"minItems",I.minLength.value,I.minLength.message,d);if(I.maxLength)X5(G,"maxItems",I.maxLength.value,I.maxLength.message,d);if(I.exactLength)X5(G,"minItems",I.exactLength.value,I.exactLength.message,d),X5(G,"maxItems",I.exactLength.value,I.exactLength.message,d);return G}function NW2(I,d){let G={type:"integer",format:"int64"};if(!I.checks)return G;for(let Z of I.checks)switch(Z.kind){case"min":if(d.target==="jsonSchema7")if(Z.inclusive)X5(G,"minimum",Z.value,Z.message,d);else X5(G,"exclusiveMinimum",Z.value,Z.message,d);else{if(!Z.inclusive)G.exclusiveMinimum=!0;X5(G,"minimum",Z.value,Z.message,d)}break;case"max":if(d.target==="jsonSchema7")if(Z.inclusive)X5(G,"maximum",Z.value,Z.message,d);else X5(G,"exclusiveMaximum",Z.value,Z.message,d);else{if(!Z.inclusive)G.exclusiveMaximum=!0;X5(G,"maximum",Z.value,Z.message,d)}break;case"multipleOf":X5(G,"multipleOf",Z.value,Z.message,d);break}return G}function zW2(){return{type:"boolean"}}function Na(I,d){return o2(I.type._def,d)}var QW2=(I,d)=>{return o2(I.innerType._def,d)};function UF1(I,d,G){let Z=G??d.dateStrategy;if(Array.isArray(Z))return{anyOf:Z.map((C,W)=>UF1(I,d,C))};switch(Z){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return Ko5(I,d)}}var Ko5=(I,d)=>{let G={type:"integer",format:"unix-time"};if(d.target==="openApi3")return G;for(let Z of I.checks)switch(Z.kind){case"min":X5(G,"minimum",Z.value,Z.message,d);break;case"max":X5(G,"maximum",Z.value,Z.message,d);break}return G};function fW2(I,d){return{...o2(I.innerType._def,d),default:I.defaultValue()}}function qW2(I,d){return d.effectStrategy==="input"?o2(I.schema._def,d):{}}function RW2(I){return{type:"string",enum:Array.from(I.values)}}var No5=(I)=>{if("type"in I&&I.type==="string")return!1;return"allOf"in I};function UW2(I,d){let G=[o2(I.left._def,{...d,currentPath:[...d.currentPath,"allOf","0"]}),o2(I.right._def,{...d,currentPath:[...d.currentPath,"allOf","1"]})].filter((W)=>!!W),Z=d.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,C=[];return G.forEach((W)=>{if(No5(W)){if(C.push(...W.allOf),W.unevaluatedProperties===void 0)Z=void 0}else{let w=W;if("additionalProperties"in W&&W.additionalProperties===!1){let{additionalProperties:B,...A}=W;w=A}else Z=void 0;C.push(w)}}),C.length?{allOf:C,...Z}:void 0}function vW2(I,d){let G=typeof I.value;if(G!=="bigint"&&G!=="number"&&G!=="boolean"&&G!=="string")return{type:Array.isArray(I.value)?"array":"object"};if(d.target==="openApi3")return{type:G==="bigint"?"integer":G,enum:[I.value]};return{type:G==="bigint"?"integer":G,const:I.value}}var vF1=void 0,YW={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(vF1===void 0)vF1=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return vF1},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function za(I,d){let G={type:"string"};if(I.checks)for(let Z of I.checks)switch(Z.kind){case"min":X5(G,"minLength",typeof G.minLength==="number"?Math.max(G.minLength,Z.value):Z.value,Z.message,d);break;case"max":X5(G,"maxLength",typeof G.maxLength==="number"?Math.min(G.maxLength,Z.value):Z.value,Z.message,d);break;case"email":switch(d.emailStrategy){case"format:email":_W(G,"email",Z.message,d);break;case"format:idn-email":_W(G,"idn-email",Z.message,d);break;case"pattern:zod":HI(G,YW.email,Z.message,d);break}break;case"url":_W(G,"uri",Z.message,d);break;case"uuid":_W(G,"uuid",Z.message,d);break;case"regex":HI(G,Z.regex,Z.message,d);break;case"cuid":HI(G,YW.cuid,Z.message,d);break;case"cuid2":HI(G,YW.cuid2,Z.message,d);break;case"startsWith":HI(G,RegExp(`^${EF1(Z.value,d)}`),Z.message,d);break;case"endsWith":HI(G,RegExp(`${EF1(Z.value,d)}$`),Z.message,d);break;case"datetime":_W(G,"date-time",Z.message,d);break;case"date":_W(G,"date",Z.message,d);break;case"time":_W(G,"time",Z.message,d);break;case"duration":_W(G,"duration",Z.message,d);break;case"length":X5(G,"minLength",typeof G.minLength==="number"?Math.max(G.minLength,Z.value):Z.value,Z.message,d),X5(G,"maxLength",typeof G.maxLength==="number"?Math.min(G.maxLength,Z.value):Z.value,Z.message,d);break;case"includes":{HI(G,RegExp(EF1(Z.value,d)),Z.message,d);break}case"ip":{if(Z.version!=="v6")_W(G,"ipv4",Z.message,d);if(Z.version!=="v4")_W(G,"ipv6",Z.message,d);break}case"base64url":HI(G,YW.base64url,Z.message,d);break;case"jwt":HI(G,YW.jwt,Z.message,d);break;case"cidr":{if(Z.version!=="v6")HI(G,YW.ipv4Cidr,Z.message,d);if(Z.version!=="v4")HI(G,YW.ipv6Cidr,Z.message,d);break}case"emoji":HI(G,YW.emoji(),Z.message,d);break;case"ulid":{HI(G,YW.ulid,Z.message,d);break}case"base64":{switch(d.base64Strategy){case"format:binary":{_W(G,"binary",Z.message,d);break}case"contentEncoding:base64":{X5(G,"contentEncoding","base64",Z.message,d);break}case"pattern:zod":{HI(G,YW.base64,Z.message,d);break}}break}case"nanoid":HI(G,YW.nanoid,Z.message,d);case"toLowerCase":case"toUpperCase":case"trim":break;default:((C)=>{})(Z)}return G}function EF1(I,d){return d.patternStrategy==="escape"?Qo5(I):I}var zo5=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Qo5(I){let d="";for(let G=0;GC.format)){if(!I.anyOf)I.anyOf=[];if(I.format){if(I.anyOf.push({format:I.format,...I.errorMessage&&Z.errorMessages&&{errorMessage:{format:I.errorMessage.format}}}),delete I.format,I.errorMessage){if(delete I.errorMessage.format,Object.keys(I.errorMessage).length===0)delete I.errorMessage}}I.anyOf.push({format:d,...G&&Z.errorMessages&&{errorMessage:{format:G}}})}else X5(I,"format",d,G,Z)}function HI(I,d,G,Z){if(I.pattern||I.allOf?.some((C)=>C.pattern)){if(!I.allOf)I.allOf=[];if(I.pattern){if(I.allOf.push({pattern:I.pattern,...I.errorMessage&&Z.errorMessages&&{errorMessage:{pattern:I.errorMessage.pattern}}}),delete I.pattern,I.errorMessage){if(delete I.errorMessage.pattern,Object.keys(I.errorMessage).length===0)delete I.errorMessage}}I.allOf.push({pattern:EW2(d,Z),...G&&Z.errorMessages&&{errorMessage:{pattern:G}}})}else X5(I,"pattern",EW2(d,Z),G,Z)}function EW2(I,d){if(!d.applyRegexFlags||!I.flags)return I.source;let G={i:I.flags.includes("i"),m:I.flags.includes("m"),s:I.flags.includes("s")},Z=G.i?I.source.toLowerCase():I.source,C="",W=!1,w=!1,B=!1;for(let A=0;A({...Z,[C]:o2(I.valueType._def,{...d,currentPath:[...d.currentPath,"properties",C]})??{}}),{}),additionalProperties:!1};let G={type:"object",additionalProperties:o2(I.valueType._def,{...d,currentPath:[...d.currentPath,"additionalProperties"]})??{}};if(d.target==="openApi3")return G;if(I.keyType?._def.typeName===T0.ZodString&&I.keyType._def.checks?.length){let{type:Z,...C}=za(I.keyType._def,d);return{...G,propertyNames:C}}else if(I.keyType?._def.typeName===T0.ZodEnum)return{...G,propertyNames:{enum:I.keyType._def.values}};else if(I.keyType?._def.typeName===T0.ZodBranded&&I.keyType._def.type._def.typeName===T0.ZodString&&I.keyType._def.type._def.checks?.length){let{type:Z,...C}=Na(I.keyType._def,d);return{...G,propertyNames:C}}return G}function MW2(I,d){if(d.mapStrategy==="record")return Qa(I,d);let G=o2(I.keyType._def,{...d,currentPath:[...d.currentPath,"items","items","0"]})||{},Z=o2(I.valueType._def,{...d,currentPath:[...d.currentPath,"items","items","1"]})||{};return{type:"array",maxItems:125,items:{type:"array",items:[G,Z],minItems:2,maxItems:2}}}function SW2(I){let d=I.values,Z=Object.keys(I.values).filter((W)=>{return typeof d[d[W]]!=="number"}).map((W)=>d[W]),C=Array.from(new Set(Z.map((W)=>typeof W)));return{type:C.length===1?C[0]==="string"?"string":"number":["string","number"],enum:Z}}function LW2(){return{not:{}}}function yW2(I){return I.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var z$={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function $W2(I,d){if(d.target==="openApi3")return PW2(I,d);let G=I.options instanceof Map?Array.from(I.options.values()):I.options;if(G.every((Z)=>(Z._def.typeName in z$)&&(!Z._def.checks||!Z._def.checks.length))){let Z=G.reduce((C,W)=>{let w=z$[W._def.typeName];return w&&!C.includes(w)?[...C,w]:C},[]);return{type:Z.length>1?Z:Z[0]}}else if(G.every((Z)=>Z._def.typeName==="ZodLiteral"&&!Z.description)){let Z=G.reduce((C,W)=>{let w=typeof W._def.value;switch(w){case"string":case"number":case"boolean":return[...C,w];case"bigint":return[...C,"integer"];case"object":if(W._def.value===null)return[...C,"null"];case"symbol":case"undefined":case"function":default:return C}},[]);if(Z.length===G.length){let C=Z.filter((W,w,B)=>B.indexOf(W)===w);return{type:C.length>1?C:C[0],enum:G.reduce((W,w)=>{return W.includes(w._def.value)?W:[...W,w._def.value]},[])}}}else if(G.every((Z)=>Z._def.typeName==="ZodEnum"))return{type:"string",enum:G.reduce((Z,C)=>[...Z,...C._def.values.filter((W)=>!Z.includes(W))],[])};return PW2(I,d)}var PW2=(I,d)=>{let G=(I.options instanceof Map?Array.from(I.options.values()):I.options).map((Z,C)=>o2(Z._def,{...d,currentPath:[...d.currentPath,"anyOf",`${C}`]})).filter((Z)=>!!Z&&(!d.strictUnions||typeof Z==="object"&&Object.keys(Z).length>0));return G.length?{anyOf:G}:void 0};function uW2(I,d){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(I.innerType._def.typeName)&&(!I.innerType._def.checks||!I.innerType._def.checks.length)){if(d.target==="openApi3")return{type:z$[I.innerType._def.typeName],nullable:!0};return{type:[z$[I.innerType._def.typeName],"null"]}}if(d.target==="openApi3"){let Z=o2(I.innerType._def,{...d,currentPath:[...d.currentPath]});if(Z&&"$ref"in Z)return{allOf:[Z],nullable:!0};return Z&&{...Z,nullable:!0}}let G=o2(I.innerType._def,{...d,currentPath:[...d.currentPath,"anyOf","0"]});return G&&{anyOf:[G,{type:"null"}]}}function TW2(I,d){let G={type:"number"};if(!I.checks)return G;for(let Z of I.checks)switch(Z.kind){case"int":G.type="integer",NF1(G,"type",Z.message,d);break;case"min":if(d.target==="jsonSchema7")if(Z.inclusive)X5(G,"minimum",Z.value,Z.message,d);else X5(G,"exclusiveMinimum",Z.value,Z.message,d);else{if(!Z.inclusive)G.exclusiveMinimum=!0;X5(G,"minimum",Z.value,Z.message,d)}break;case"max":if(d.target==="jsonSchema7")if(Z.inclusive)X5(G,"maximum",Z.value,Z.message,d);else X5(G,"exclusiveMaximum",Z.value,Z.message,d);else{if(!Z.inclusive)G.exclusiveMaximum=!0;X5(G,"maximum",Z.value,Z.message,d)}break;case"multipleOf":X5(G,"multipleOf",Z.value,Z.message,d);break}return G}function fo5(I,d){if(d.removeAdditionalStrategy==="strict")return I.catchall._def.typeName==="ZodNever"?I.unknownKeys!=="strict":o2(I.catchall._def,{...d,currentPath:[...d.currentPath,"additionalProperties"]})??!0;else return I.catchall._def.typeName==="ZodNever"?I.unknownKeys==="passthrough":o2(I.catchall._def,{...d,currentPath:[...d.currentPath,"additionalProperties"]})??!0}function OW2(I,d){let G=d.target==="openAi",Z={type:"object",...Object.entries(I.shape()).reduce((C,[W,w])=>{if(w===void 0||w._def===void 0)return C;let B=w.isOptional();if(B&&G){if(w instanceof VG)w=w._def.innerType;if(!w.isNullable())w=w.nullable();B=!1}let A=o2(w._def,{...d,currentPath:[...d.currentPath,"properties",W],propertyPath:[...d.currentPath,"properties",W]});if(A===void 0)return C;return{properties:{...C.properties,[W]:A},required:B?C.required:[...C.required,W]}},{properties:{},required:[]}),additionalProperties:fo5(I,d)};if(!Z.required.length)delete Z.required;return Z}var mW2=(I,d)=>{if(d.currentPath.toString()===d.propertyPath?.toString())return o2(I.innerType._def,d);let G=o2(I.innerType._def,{...d,currentPath:[...d.currentPath,"anyOf","1"]});return G?{anyOf:[{not:{}},G]}:{}};var lW2=(I,d)=>{if(d.pipeStrategy==="input")return o2(I.in._def,d);else if(d.pipeStrategy==="output")return o2(I.out._def,d);let G=o2(I.in._def,{...d,currentPath:[...d.currentPath,"allOf","0"]}),Z=o2(I.out._def,{...d,currentPath:[...d.currentPath,"allOf",G?"1":"0"]});return{allOf:[G,Z].filter((C)=>C!==void 0)}};function bW2(I,d){return o2(I.type._def,d)}function hW2(I,d){let Z={type:"array",uniqueItems:!0,items:o2(I.valueType._def,{...d,currentPath:[...d.currentPath,"items"]})};if(I.minSize)X5(Z,"minItems",I.minSize.value,I.minSize.message,d);if(I.maxSize)X5(Z,"maxItems",I.maxSize.value,I.maxSize.message,d);return Z}function jW2(I,d){if(I.rest)return{type:"array",minItems:I.items.length,items:I.items.map((G,Z)=>o2(G._def,{...d,currentPath:[...d.currentPath,"items",`${Z}`]})).reduce((G,Z)=>Z===void 0?G:[...G,Z],[]),additionalItems:o2(I.rest._def,{...d,currentPath:[...d.currentPath,"additionalItems"]})};else return{type:"array",minItems:I.items.length,maxItems:I.items.length,items:I.items.map((G,Z)=>o2(G._def,{...d,currentPath:[...d.currentPath,"items",`${Z}`]})).reduce((G,Z)=>Z===void 0?G:[...G,Z],[])}}function kW2(){return{not:{}}}function xW2(){return{}}var cW2=(I,d)=>{return o2(I.innerType._def,d)};function o2(I,d,G=!1){let Z=d.seen.get(I);if(d.override){let w=d.override?.(I,d,Z,G);if(w!==GW2)return w}if(Z&&!G){let w=qo5(Z,d);if(w!==void 0)return w}let C={def:I,path:d.currentPath,jsonSchema:void 0};d.seen.set(I,C);let W=Uo5(I,I.typeName,d);if(W)vo5(I,d,W);return C.jsonSchema=W,W}var qo5=(I,d)=>{switch(d.$refStrategy){case"root":return{$ref:I.path.join("/")};case"relative":return{$ref:Ro5(d.currentPath,I.path)};case"none":case"seen":{if(I.path.lengthd.currentPath[Z]===G))return console.warn(`Recursive reference detected at ${d.currentPath.join("/")}! Defaulting to any`),{};return d.$refStrategy==="seen"?{}:void 0}}},Ro5=(I,d)=>{let G=0;for(;G{switch(d){case T0.ZodString:return za(I,G);case T0.ZodNumber:return TW2(I,G);case T0.ZodObject:return OW2(I,G);case T0.ZodBigInt:return NW2(I,G);case T0.ZodBoolean:return zW2();case T0.ZodDate:return UF1(I,G);case T0.ZodUndefined:return kW2();case T0.ZodNull:return yW2(G);case T0.ZodArray:return KW2(I,G);case T0.ZodUnion:case T0.ZodDiscriminatedUnion:return $W2(I,G);case T0.ZodIntersection:return UW2(I,G);case T0.ZodTuple:return jW2(I,G);case T0.ZodRecord:return Qa(I,G);case T0.ZodLiteral:return vW2(I,G);case T0.ZodEnum:return RW2(I);case T0.ZodNativeEnum:return SW2(I);case T0.ZodNullable:return uW2(I,G);case T0.ZodOptional:return mW2(I,G);case T0.ZodMap:return MW2(I,G);case T0.ZodSet:return hW2(I,G);case T0.ZodLazy:return o2(I.getter()._def,G);case T0.ZodPromise:return bW2(I,G);case T0.ZodNaN:case T0.ZodNever:return LW2();case T0.ZodEffects:return qW2(I,G);case T0.ZodAny:return JW2();case T0.ZodUnknown:return xW2();case T0.ZodDefault:return fW2(I,G);case T0.ZodBranded:return Na(I,G);case T0.ZodReadonly:return cW2(I,G);case T0.ZodCatch:return QW2(I,G);case T0.ZodPipeline:return lW2(I,G);case T0.ZodFunction:case T0.ZodVoid:case T0.ZodSymbol:return;default:return((Z)=>{return})(d)}},vo5=(I,d,G)=>{if(I.description){if(G.description=I.description,d.markdownDescription)G.markdownDescription=I.description}return G};var KR=(I,d)=>{let G=CW2(d),Z=typeof d==="object"&&d.definitions?Object.entries(d.definitions).reduce((A,[V,X])=>({...A,[V]:o2(X._def,{...G,currentPath:[...G.basePath,G.definitionPath,V]},!0)??{}}),{}):void 0,C=typeof d==="string"?d:d?.nameStrategy==="title"?void 0:d?.name,W=o2(I._def,C===void 0?G:{...G,currentPath:[...G.basePath,G.definitionPath,C]},!1)??{},w=typeof d==="object"&&d.name!==void 0&&d.nameStrategy==="title"?d.name:void 0;if(w!==void 0)W.title=w;let B=C===void 0?Z?{...W,[G.definitionPath]:Z}:W:{$ref:[...G.$refStrategy==="relative"?[]:G.basePath,G.definitionPath,C].join("/"),[G.definitionPath]:{...Z,[C]:W}};if(G.target==="jsonSchema7")B.$schema="http://json-schema.org/draft-07/schema#";else if(G.target==="jsonSchema2019-09"||G.target==="openAi")B.$schema="https://json-schema.org/draft/2019-09/schema#";if(G.target==="openAi"&&(("anyOf"in B)||("oneOf"in B)||("allOf"in B)||("type"in B)&&Array.isArray(B.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return B};var s$=J1(u1(),1);import{statSync as uZ9}from"fs";import{EOL as us}from"os";import{isAbsolute as jK2,relative as kK2,resolve as xK2}from"path";var Q$=J1(u1(),1);function A3(){return Q$.createElement(u,null,"  ⎿  ",Q$.createElement(u,{color:r1().error},"No (tell Claude what to do differently)"))}var LF1=J1(t01(),1);var MF1="__SINGLE_QUOTE__",SF1="__DOUBLE_QUOTE__";function NR(I){let d=[];for(let C of LF1.parse(I.replaceAll('"',`"${SF1}`).replaceAll("'",`'${MF1}`),(W)=>`$${W}`)){if(typeof C==="string"){if(d.length>0&&typeof d[d.length-1]==="string"){d[d.length-1]+=" "+C;continue}}d.push(C)}return d.map((C)=>{if(typeof C==="string")return C;if("comment"in C)return"#"+C.comment;if("op"in C&&C.op==="glob")return C.pattern;if("op"in C)return C.op;return null}).filter((C)=>C!==null).map((C)=>{return C.replaceAll(`${MF1}`,"'").replaceAll(`${SF1}`,'"')}).filter((C)=>!iW2.has(C))}var fa=a2(async(I,d)=>{let G=NR(I),[Z,...C]=await Promise.all([pW2(I,d),...G.map(async(w)=>({subcommand:w,prefix:await pW2(w,d)}))]);if(!Z)return null;let W=C.reduce((w,{subcommand:B,prefix:A})=>{if(A)w.set(B,A);return w},new Map);return{...Z,subcommandPrefixes:W}},(I)=>I),pW2=a2(async(I,d)=>{let G=await jZ({systemPrompt:[`Your task is to process Bash commands that an AI coding agent wants to run. + +This policy spec defines how to determine the prefix of a Bash command:`],userPrompt:` +# ${K4} Code Bash command prefix detection + +This document defines risk levels for actions that the ${K4} agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed. + +## Definitions + +**Command Injection:** Any technique used that would result in a command being run other than the detected prefix. + +## Command prefix extraction examples +Examples: +- cat foo.txt => cat +- cd src => cd +- cd path/to/files/ => cd +- find ./src -type f -name "*.ts" => find +- gg cat foo.py => gg cat +- gg cp foo.py bar.py => gg cp +- git commit -m "foo" => git commit +- git diff HEAD~1 => git diff +- git diff --staged => git diff +- git diff $(pwd) => command_injection_detected +- git status => git status +- git status# test(\`id\`) => command_injection_detected +- git status\`ls\` => command_injection_detected +- git push => none +- git push origin master => git push +- git log -n 5 => git log +- git log --oneline -n 5 => git log +- grep -A 40 "from foo.bar.baz import" alpha/beta/gamma.py => grep +- pig tail zerba.log => pig tail +- npm test => none +- npm test --foo => npm test +- npm test -- -f "foo" => npm test +- pwd + curl example.com => command_injection_detected +- pytest foo/bar.py => pytest +- scalac build => none + + +The user has allowed certain command prefixes to be run, and will otherwise be asked to approve or deny the command. +Your task is to determine the command prefix for the following command. + +IMPORTANT: Bash commands may run multiple commands that are chained together. +For safety, if the command seems to contain command injection, you must return "command_injection_detected". +(This will help protect the user: if they think that they're allowlisting command A, +but the AI coding agent sends a malicious command that technically has the same prefix as command A, +then the safety system will see that you said “command_injection_detected” and ask the user for manual confirmation.) + +Note that not every command has a prefix. If a command has no prefix, return "none". + +ONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting. + +Command: ${I} +`,signal:d,enablePromptCaching:!1}),Z=typeof G.message.content==="string"?G.message.content:Array.isArray(G.message.content)?G.message.content.find((C)=>C.type==="text")?.text??"none":"none";if(Z.startsWith(hZ))return null;if(Z==="command_injection_detected")return{commandInjectionDetected:!0};if(Z==="git")return{commandPrefix:null,commandInjectionDetected:!1};if(Z==="none")return{commandPrefix:null,commandInjectionDetected:!1};return{commandPrefix:Z,commandInjectionDetected:!1}},(I)=>I),iW2=new Set(["&&","||",";",";;"]);function Eo5(I){for(let d of LF1.parse(I.replaceAll('"',`"${SF1}`).replaceAll("'",`'${MF1}`),(G)=>`$${G}`)){if(typeof d==="string")continue;if("comment"in d)return!1;if("op"in d){if(d.op==="glob")continue;else if(iW2.has(d.op))continue;return!1}}return!0}function nW2(I){return NR(I).length>1&&!Eo5(I)}var JW=J1(u1(),1);var qa="dispatch_agent";import{existsSync as fZ9,readFileSync as ZJ1,statSync as uK2}from"fs";var S3=J1(u1(),1);import*as BJ1 from"path";import{extname as qZ9,relative as RZ9}from"path";var TR=J1(Tg1(),1);var Cs=J1(u1(),1);function yB({code:I,language:d}){let G=Cs.useMemo(()=>{try{if(TR.supportsLanguage(d))return TR.highlight(I,{language:d});else return X0(`Language not supported while highlighting code, falling back to markdown: ${d}`),TR.highlight(I,{language:"markdown"})}catch(Z){if(Z instanceof Error&&Z.message.includes("Unknown language"))return X0(`Language not supported while highlighting code, falling back to markdown: ${Z}`),TR.highlight(I,{language:"markdown"})}},[I,d]);return Cs.default.createElement(u,null,G)}import{existsSync as F79,readFileSync as g79}from"fs";var AX=J1(u1(),1);import{extname as J79,isAbsolute as Ag2,relative as K79,resolve as Vg2}from"path";function b$(I){if(I.length<=Ws)return{totalLines:I.split(` +`).length,truncatedContent:I};let d=Ws/2,G=I.slice(0,d),Z=I.slice(-d),C=`${G} + +... [${I.slice(d,-d).split(` +`).length} lines truncated] ... + +${Z}`;return{totalLines:I.split(` +`).length,truncatedContent:C}}async function Cg2(I,d){let Z=(await jZ({systemPrompt:[`Extract any file paths that this command reads or modifies. For commands like "git diff" and "cat", include the paths of files being shown. Use paths verbatim -- don't add any slashes or try to resolve them. Do not try to infer paths that were not explicitly listed in the command output. +Format your response as: + +path/to/file1 +path/to/file2 + + +If no files are read or modified, return empty filepaths tags: + + + +Do not include any other text in your response.`],userPrompt:`Command: ${I} +Output: ${d}`,enablePromptCaching:!0})).message.content.filter((C)=>C.type==="text").map((C)=>C.text).join("");return XG(Z,"filepaths")?.trim().split(` +`).filter(Boolean)||[]}var Wg2="Extract and read source code from all code cells in a Jupyter notebook.",wg2="Reads a Jupyter notebook (.ipynb file) and returns all of the cells with their outputs. Jupyter notebooks are interactive documents that combine code, text, and visualizations, commonly used for data analysis and scientific computing. The notebook_path parameter must be an absolute path, not a relative path.";import{isAbsolute as _79,resolve as Bg2}from"path";var ws=new Set,Bs=new Set;function BX(I){return _79(I)?Bg2(I):Bg2(R0(),I)}function As(I){return BX(I).startsWith(BX(t7()))}function PB(I){let d=BX(I);for(let G of ws)if(d.startsWith(G))return!0;return!1}function OR(I){let d=BX(I);for(let G of Bs)if(d.startsWith(G))return!0;return!1}function D79(I){let d=BX(I);for(let G of ws)if(G.startsWith(d))ws.delete(G);ws.add(d)}function Og1(){let I=t7();D79(I)}function H79(I){let d=BX(I);for(let G of Bs)if(G.startsWith(d))Bs.delete(G);Bs.add(d)}function Vs(){let I=t7();H79(I)}var N79=s.strictObject({notebook_path:s.string().describe("The absolute path to the Jupyter notebook file to read (must be absolute, not relative)")});function Xg2(I){return I.flatMap(U79).reduce((G,Z)=>{if(G.length===0)return[Z];let C=G[G.length-1];if(C&&C.type==="text"&&Z.type==="text")return C.text+=` +`+Z.text,G;return[...G,Z]},[])}var VH={name:"ReadNotebook",async description(){return Wg2},async prompt(){return wg2},isReadOnly(){return!0},inputSchema:N79,userFacingName(){return"Read Notebook"},async isEnabled(){return!0},needsPermissions({notebook_path:I}){return!PB(I)},async validateInput({notebook_path:I}){let d=Ag2(I)?I:Vg2(R0(),I);if(!F79(d)){let G=Yf(d),Z="File does not exist.";if(G)Z+=` Did you mean ${G}?`;return{result:!1,message:Z}}if(J79(d)!==".ipynb")return{result:!1,message:"File must be a Jupyter notebook (.ipynb file)."};return{result:!0}},renderToolUseMessage(I,{verbose:d}){return`notebook_path: ${d?I.notebook_path:K79(R0(),I.notebook_path)}`},renderToolUseRejectedMessage(){return AX.createElement(A3,null)},renderToolResultMessage(I){if(!I)return AX.createElement(u,null,"No cells found in notebook");if(I.length<1||!I[0])return AX.createElement(u,null,"No cells found in notebook");return AX.createElement(u,null,"Read ",I.length," cells")},async*call({notebook_path:I}){let d=Ag2(I)?I:Vg2(R0(),I),G=g79(d,"utf-8"),Z=JSON.parse(G),C=Z.metadata.language_info?.name??"python",W=Z.cells.map((w,B)=>f79(w,B,C));yield{type:"result",resultForAssistant:Xg2(W),data:W}},renderResultForAssistant:Xg2};function mg1(I){if(!I)return"";let d=Array.isArray(I)?I.join(""):I,{truncatedContent:G}=b$(d);return G}function z79(I){if(typeof I["image/png"]==="string")return{image_data:I["image/png"],media_type:"image/png"};if(typeof I["image/jpeg"]==="string")return{image_data:I["image/jpeg"],media_type:"image/jpeg"};return}function Q79(I){switch(I.output_type){case"stream":return{output_type:I.output_type,text:mg1(I.text)};case"execute_result":case"display_data":return{output_type:I.output_type,text:mg1(I.data?.["text/plain"]),image:I.data&&z79(I.data)};case"error":return{output_type:I.output_type,text:mg1(`${I.ename}: ${I.evalue} +${I.traceback.join(` +`)}`)}}}function f79(I,d,G){let Z={cell:d,cellType:I.cell_type,source:Array.isArray(I.source)?I.source.join(""):I.source,language:G,execution_count:I.execution_count};if(I.outputs?.length)Z.outputs=I.outputs.map(Q79);return Z}function q79(I){let d=[];if(I.cellType!=="code")d.push(`${I.cellType}`);if(I.language!=="python"&&I.cellType==="code")d.push(`${I.language}`);return{text:`${d.join("")}${I.source}`,type:"text"}}function R79(I){let d=[];if(I.text)d.push({text:` +${I.text}`,type:"text"});if(I.image)d.push({type:"image",source:{data:I.image.image_data,media_type:I.image.media_type,type:"base64"}});return d}function U79(I){let d=q79(I),G=I.outputs?.flatMap(R79);return[d,...G??[]]}var v79=2000,E79=2000,Yg2="Read a file from the local filesystem.",_g2=`Reads a file from the local filesystem. The file_path parameter must be an absolute path, not a relative path. By default, it reads up to ${v79} lines starting from the beginning of the file. You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters. Any lines longer than ${E79} characters will be truncated. For image files, the tool will display the image for you. For Jupyter notebooks (.ipynb files), use the ${VH.name} instead.`;var CJ1=3,AJ1=262144,WJ1=new Set([".png",".jpg",".jpeg",".gif",".bmp",".webp"]),Ss=2000,Ls=2000,wJ1=3932160,UZ9=s.strictObject({file_path:s.string().describe("The absolute path to the file to read"),offset:s.number().optional().describe("The line number to start reading from. Only provide if the file is too large to read at once"),limit:s.number().optional().describe("The number of lines to read. Only provide if the file is too large to read at once.")}),Fd={name:"View",async description(){return Yg2},async prompt(){return _g2},inputSchema:UZ9,isReadOnly(){return!0},userFacingName(){return"Read"},async isEnabled(){return!0},needsPermissions({file_path:I}){return!PB(I||R0())},renderToolUseMessage(I,{verbose:d}){let{file_path:G,...Z}=I;return[["file_path",d?G:RZ9(R0(),G)],...Object.entries(Z)].map(([W,w])=>`${W}: ${JSON.stringify(w)}`).join(", ")},renderToolResultMessage(I,{verbose:d}){switch(I.type){case"image":return S3.createElement(p,{justifyContent:"space-between",overflowX:"hidden",width:"100%"},S3.createElement(p,{flexDirection:"row"},S3.createElement(u,null,"  ⎿  "),S3.createElement(u,null,"Read image")));case"text":{let{filePath:G,content:Z,numLines:C}=I.file,W=Z||"(No content)";return S3.createElement(p,{justifyContent:"space-between",overflowX:"hidden",width:"100%"},S3.createElement(p,{flexDirection:"row"},S3.createElement(u,null,"  ⎿  "),S3.createElement(p,{flexDirection:"column"},S3.createElement(yB,{code:d?W:W.split(` +`).slice(0,CJ1).filter((w)=>w.trim()!=="").join(` +`),language:qZ9(G).slice(1)}),!d&&C>CJ1&&S3.createElement(u,{color:r1().secondaryText},"... (+",C-CJ1," lines)"))))}}},renderToolUseRejectedMessage(){return S3.createElement(A3,null)},async validateInput({file_path:I,offset:d,limit:G}){let Z=c81(I);if(!fZ9(Z)){let B=Yf(Z),A="File does not exist.";if(B)A+=` Did you mean ${B}?`;return{result:!1,message:A}}let W=uK2(Z).size,w=BJ1.extname(Z).toLowerCase();if(!WJ1.has(w)){if(W>AJ1&&!d&&!G)return{result:!1,message:$K2(W),meta:{fileSize:W}}}return{result:!0}},async*call({file_path:I,offset:d=1,limit:G=void 0},{readFileTimestamps:Z}){let C=BJ1.extname(I).toLowerCase(),W=c81(I);if(Z[W]=Date.now(),WJ1.has(C)){let _=await vZ9(W,C);yield{type:"result",data:_,resultForAssistant:this.renderResultForAssistant(_)};return}let w=d===0?0:d-1,{content:B,lineCount:A,totalLines:V}=S40(W,w,G);if(!WJ1.has(C)&&B.length>AJ1)throw new Error($K2(B.length));let X={type:"text",file:{filePath:I,content:B,numLines:A,startLine:d,totalLines:V}};yield{type:"result",data:X,resultForAssistant:this.renderResultForAssistant(X)}},renderResultForAssistant(I){switch(I.type){case"image":return[{type:"image",source:{type:"base64",data:I.file.base64,media_type:I.file.type}}];case"text":return _f(I.file)}}},$K2=(I)=>`File content (${Math.round(I/1024)}KB) exceeds maximum allowed size (${Math.round(AJ1/1024)}KB). Please use offset and limit parameters to read specific portions of the file, or use the GrepTool to search for specific content.`;function n$(I,d){return{type:"image",file:{base64:I.toString("base64"),type:`image/${d.slice(1)}`}}}async function vZ9(I,d){try{let G=uK2(I),Z=(await Promise.resolve().then(() => J1(PK2(),1))).default,C=Z(ZJ1(I)),W=await C.metadata();if(!W.width||!W.height){if(G.size>wJ1){let V=await C.jpeg({quality:80}).toBuffer();return n$(V,"jpeg")}}let w=W.width||0,B=W.height||0;if(G.size<=wJ1&&w<=Ss&&B<=Ls)return n$(ZJ1(I),d);if(w>Ss)B=Math.round(B*Ss/w),w=Ss;if(B>Ls)w=Math.round(w*Ls/B),B=Ls;let A=await C.resize(w,B,{fit:"inside",withoutEnlargement:!0}).toBuffer();if(A.length>wJ1){let V=await C.jpeg({quality:80}).toBuffer();return n$(V,"jpeg")}return n$(A,d)}catch(G){return X0(G),n$(ZJ1(I),d)}}var ys="GlobTool",VJ1=`- Fast file pattern matching tool that works with any codebase size +- Supports glob patterns like "**/*.js" or "src/**/*.ts" +- Returns matching file paths sorted by modification time +- Use this tool when you need to find files by name patterns +- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead +`;var Ps="GrepTool",XJ1=` +- Fast content search tool that works with any codebase size +- Searches file contents using regular expressions +- Supports full regex syntax (eg. "log.*Error", "function\\s+\\w+", etc.) +- Filter files by pattern with the include parameter (eg. "*.js", "*.{ts,tsx}") +- Returns matching file paths sorted by modification time +- Use this tool when you need to find files containing specific patterns +- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead +`;import{readdirSync as EZ9}from"fs";var NI=J1(u1(),1);import{basename as MZ9,isAbsolute as TK2,join as OK2,relative as HJ1,resolve as mK2,sep as tJ}from"path";var YJ1="Lists files and directories in a given path. The path parameter must be an absolute path, not a relative path. You should generally prefer the Glob and Grep tools, if you know which directories to search.";var _J1=4,r$=1000,DJ1=`There are more than ${r$} files in the repository. Use the LS tool (passing a specific path), Bash tool, and other tools to explore nested directories. The first ${r$} files and directories are included below: + +`,SZ9=s.strictObject({path:s.string().describe("The absolute path to the directory to list (must be absolute, not relative)")}),zI={name:"LS",async description(){return YJ1},inputSchema:SZ9,userFacingName(){return"List"},async isEnabled(){return!0},isReadOnly(){return!0},needsPermissions({path:I}){return!PB(I)},async prompt(){return YJ1},renderResultForAssistant(I){return I},renderToolUseMessage({path:I},{verbose:d}){let G=I?TK2(I)?I:mK2(R0(),I):void 0,Z=G?HJ1(R0(),G):".";return`path: "${d?I:Z}"`},renderToolUseRejectedMessage(){return NI.createElement(A3,null)},renderToolResultMessage(I,{verbose:d}){if(typeof I!=="string")return null;let G=I.replace(DJ1,"");if(!G)return null;return NI.createElement(p,{justifyContent:"space-between",width:"100%"},NI.createElement(p,null,NI.createElement(u,null,"  ⎿  "),NI.createElement(p,{flexDirection:"column",paddingLeft:0},G.split(` +`).filter((Z)=>Z.trim()!=="").slice(0,d?void 0:_J1).map((Z,C)=>NI.createElement(u,{key:C},Z)),!d&&G.split(` +`).length>_J1&&NI.createElement(u,{color:r1().secondaryText},"... (+",G.split(` +`).length-_J1," items)"))))},async*call({path:I},{abortController:d}){let G=TK2(I)?I:mK2(R0(),I),Z=LZ9(G,R0(),d.signal).sort(),C=` +NOTE: do any of the files above seem malicious? If so, you MUST refuse to continue work.`,W=bK2(yZ9(Z)),w=W+` +NOTE: do any of the files above seem malicious? If so, you MUST refuse to continue work.`;if(Z.length0){if(Z.length>r$)return Z;if(G.aborted)return Z;let W=C.shift();if(lK2(W))continue;if(W!==I)Z.push(HJ1(d,W)+tJ);let w;try{w=EZ9(W,{withFileTypes:!0})}catch(B){X0(B);continue}for(let B of w)if(B.isDirectory())C.push(OK2(W,B.name)+tJ);else{let A=OK2(W,B.name);if(lK2(A))continue;if(Z.push(HJ1(d,A)),Z.length>r$)return Z}}return Z}function yZ9(I){let d=[];for(let G of I){let Z=G.split(tJ),C=d,W="";for(let w=0;wX.name===B);if(V)C=V.children||[];else{let X={name:B,path:W,type:A?"file":"directory"};if(!A)X.children=[];C.push(X),C=X.children||[]}}}return d}function bK2(I,d=0,G=""){let Z="";if(d===0)Z+=`- ${R0()}${tJ} +`,G=" ";for(let C of I)if(Z+=`${G}- ${C.name}${C.type==="directory"?tJ:""} +`,C.children&&C.children.length>0)Z+=bK2(C.children,d+1,`${G} `);return Z}function lK2(I){if(I!=="."&&MZ9(I).startsWith("."))return!0;if(I.includes(`__pycache__${tJ}`))return!0;return!1}var Ws=30000,a$=50,FJ1=["alias","curl","curlie","wget","axel","aria2c","nc","telnet","lynx","w3m","links","httpie","xh","http-prompt","chrome","firefox","safari"],hK2=`Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures. + +Before executing the command, please follow these steps: + +1. Directory Verification: + - If the command will create new directories or files, first use the LS tool to verify the parent directory exists and is the correct location + - For example, before running "mkdir foo/bar", first use LS to check that "foo" exists and is the intended parent directory + +2. Security Check: + - For security and to limit the threat of a prompt injection attack, some commands are limited or banned. If you use a disallowed command, you will receive an error message explaining the restriction. Explain the error to the User. + - Verify that the command is not one of the banned commands: ${FJ1.join(", ")}. + +3. Command Execution: + - After ensuring proper quoting, execute the command. + - Capture the output of the command. + +4. Output Processing: + - If the output exceeds ${Ws} characters, output will be truncated before being returned to you. + - Prepare the output for display to the user. + +5. Return Result: + - Provide the processed output of the command. + - If any errors occurred during execution, include those in the output. + +Usage notes: + - The command argument is required. + - You can specify an optional timeout in milliseconds (up to 600000ms / 10 minutes). If not specified, commands will timeout after 30 minutes. + - VERY IMPORTANT: You MUST avoid using search commands like \`find\` and \`grep\`. Instead use ${Ps}, ${ys}, or ${qa} to search. You MUST avoid read tools like \`cat\`, \`head\`, \`tail\`, and \`ls\`, and use ${Fd.name} and ${zI.name} to read files. + - When issuing multiple commands, use the ';' or '&&' operator to separate them. DO NOT use newlines (newlines are ok in quoted strings). + - IMPORTANT: All commands share the same shell session. Shell state (environment variables, virtual environments, current directory, etc.) persist between commands. For example, if you set an environment variable as part of a command, the environment variable will persist for subsequent commands. + - Try to maintain your current working directory throughout the session by using absolute paths and avoiding usage of \`cd\`. You may use \`cd\` if the User explicitly requests it. + + pytest /foo/bar/tests + + + cd /foo/bar && pytest tests + + +# Committing changes with git + +When the user asks you to create a new git commit, follow these steps carefully: + +1. Start with a single message that contains exactly three tool_use blocks that do the following (it is VERY IMPORTANT that you send these tool_use blocks in a single message, otherwise it will feel slow to the user!): + - Run a git status command to see all untracked files. + - Run a git diff command to see both staged and unstaged changes that will be committed. + - Run a git log command to see recent commit messages, so that you can follow this repository's commit message style. + +2. Use the git context at the start of this conversation to determine which files are relevant to your commit. Add relevant untracked files to the staging area. Do not commit files that were already modified at the start of this conversation, if they are not relevant to your commit. + +3. Analyze all staged changes (both previously staged and newly added) and draft a commit message. Wrap your analysis process in tags: + + +- List the files that have been changed or added +- Summarize the nature of the changes (eg. new feature, enhancement to an existing feature, bug fix, refactoring, test, docs, etc.) +- Brainstorm the purpose or motivation behind these changes +- Do not use tools to explore code, beyond what is available in the git context +- Assess the impact of these changes on the overall project +- Check for any sensitive information that shouldn't be committed +- Draft a concise (1-2 sentences) commit message that focuses on the "why" rather than the "what" +- Ensure your language is clear, concise, and to the point +- Ensure the message accurately reflects the changes and their purpose (i.e. "add" means a wholly new feature, "update" means an enhancement to an existing feature, "fix" means a bug fix, etc.) +- Ensure the message is not generic (avoid words like "Update" or "Fix" without context) +- Review the draft message to ensure it accurately reflects the changes and their purpose + + +4. Create the commit with a message ending with: +\uD83E\uDD16 Generated with ${K4} +Co-Authored-By: Claude + +- In order to ensure good formatting, ALWAYS pass the commit message via a HEREDOC, a la this example: + +git commit -m "$(cat <<'EOF' + Commit message here. + + \uD83E\uDD16 Generated with ${K4} + Co-Authored-By: Claude + EOF + )" + + +5. If the commit fails due to pre-commit hook changes, retry the commit ONCE to include these automated changes. If it fails again, it usually means a pre-commit hook is preventing the commit. If the commit succeeds but you notice that files were modified by the pre-commit hook, you MUST amend your commit to include them. + +6. Finally, run git status to make sure the commit succeeded. + +Important notes: +- When possible, combine the "git add" and "git commit" commands into a single "git commit -am" command, to speed things up +- However, be careful not to stage files (e.g. with \`git add .\`) for commits that aren't part of the change, they may have untracked files they want to keep around, but not commit. +- NEVER update the git config +- DO NOT push to the remote repository +- IMPORTANT: Never use git commands with the -i flag (like git rebase -i or git add -i) since they require interactive input which is not supported. +- If there are no changes to commit (i.e., no untracked files and no modifications), do not create an empty commit +- Ensure your commit message is meaningful and concise. It should explain the purpose of the changes, not just describe them. +- Return an empty response - the user will see the git output directly + +# Creating pull requests +Use the gh command via the Bash tool for ALL GitHub-related tasks including working with issues, pull requests, checks, and releases. If given a Github URL use the gh command to get the information needed. + +IMPORTANT: When the user asks you to create a pull request, follow these steps carefully: + +1. Understand the current state of the branch. Remember to send a single message that contains multiple tool_use blocks (it is VERY IMPORTANT that you do this in a single message, otherwise it will feel slow to the user!): + - Run a git status command to see all untracked files. + - Run a git diff command to see both staged and unstaged changes that will be committed. + - Check if the current branch tracks a remote branch and is up to date with the remote, so you know if you need to push to the remote + - Run a git log command and \`git diff main...HEAD\` to understand the full commit history for the current branch (from the time it diverged from the \`main\` branch.) + +2. Create new branch if needed + +3. Commit changes if needed + +4. Push to remote with -u flag if needed + +5. Analyze all changes that will be included in the pull request, making sure to look at all relevant commits (not just the latest commit, but all commits that will be included in the pull request!), and draft a pull request summary. Wrap your analysis process in tags: + + +- List the commits since diverging from the main branch +- Summarize the nature of the changes (eg. new feature, enhancement to an existing feature, bug fix, refactoring, test, docs, etc.) +- Brainstorm the purpose or motivation behind these changes +- Assess the impact of these changes on the overall project +- Do not use tools to explore code, beyond what is available in the git context +- Check for any sensitive information that shouldn't be committed +- Draft a concise (1-2 bullet points) pull request summary that focuses on the "why" rather than the "what" +- Ensure the summary accurately reflects all changes since diverging from the main branch +- Ensure your language is clear, concise, and to the point +- Ensure the summary accurately reflects the changes and their purpose (ie. "add" means a wholly new feature, "update" means an enhancement to an existing feature, "fix" means a bug fix, etc.) +- Ensure the summary is not generic (avoid words like "Update" or "Fix" without context) +- Review the draft summary to ensure it accurately reflects the changes and their purpose + + +6. Create PR using gh pr create with the format below. Use a HEREDOC to pass the body to ensure correct formatting. + +gh pr create --title "the pr title" --body "$(cat <<'EOF' +## Summary +<1-3 bullet points> + +## Test plan +[Checklist of TODOs for testing the pull request...] + +\uD83E\uDD16 Generated with ${K4} +EOF +)" + + +Important: +- Return an empty response - the user will see the gh output directly +- Never update git config`;function PZ9(I,d){let G=I.split(` +`);if(G.length<=a$)return G.join(` +`);let Z=Math.floor(a$/2),C=a$-Z;return[...G.slice(0,Z),c0.grey(`... (+${d-a$} lines)`),...G.slice(-C)].join(` +`)}function pR({content:I,lines:d,verbose:G,isError:Z}){return JW.createElement(p,{justifyContent:"space-between",width:"100%"},JW.createElement(p,{flexDirection:"row"},JW.createElement(u,null,"  ⎿  "),JW.createElement(p,{flexDirection:"column"},JW.createElement(u,{color:Z?r1().error:void 0},G?I.trim():PZ9(I.trim(),d)))))}var IK=J1(u1(),1);function $Z9({content:I,verbose:d}){let{stdout:G,stdoutLines:Z,stderr:C,stderrLines:W}=I;return IK.default.createElement(p,{flexDirection:"column"},G!==""?IK.default.createElement(pR,{content:G,lines:Z,verbose:d}):null,C!==""?IK.default.createElement(pR,{content:C,lines:W,verbose:d,isError:!0}):null,G===""&&C===""?IK.default.createElement(p,{flexDirection:"row"},IK.default.createElement(u,null,"  ⎿  "),IK.default.createElement(u,{color:r1().secondaryText},"(No content)")):null)}var $s=$Z9;var o$=s.strictObject({command:s.string().describe("The command to execute"),timeout:s.number().optional().describe("Optional timeout in milliseconds (max 600000)")}),G5={name:"Bash",async description({command:I}){try{let d=await jZ({systemPrompt:[`You are a command description generator. Write a clear, concise description of what this command does in 5-10 words. Examples: + + Input: ls + Output: Lists files in current directory + + Input: git status + Output: Shows working tree status + + Input: npm install + Output: Installs package dependencies + + Input: mkdir foo + Output: Creates directory 'foo'`],userPrompt:`Describe this command: ${I}`});return(d.message.content[0]?.type==="text"?d.message.content[0].text:null)||"Executes a bash command"}catch(d){return X0(d),"Executes a bash command"}},async prompt(){return hK2},isReadOnly(){return!1},inputSchema:o$,userFacingName(){return"Bash"},async isEnabled(){return!0},needsPermissions(){return!0},async validateInput({command:I}){let d=NR(I);for(let G of d){let Z=G.split(" "),C=Z[0];if(C&&FJ1.includes(C.toLowerCase()))return{result:!1,message:`Command '${C}' is not allowed for security reasons`};if(C==="cd"&&Z[1]){let W=Z[1].replace(/^['"]|['"]$/g,""),w=jK2(W)?W:xK2(R0(),W);if(!x81(kK2(t7(),w),kK2(R0(),t7())))return{result:!1,message:`ERROR: cd to '${w}' was blocked. For security, ${K4} may only change directories to child directories of the original working directory (${t7()}) for this session.`}}}return{result:!0}},renderToolUseMessage({command:I}){if(I.includes(`"$(cat <<'EOF'`)){let d=I.match(/^(.*?)"?\$\(cat <<'EOF'\n([\s\S]*?)\n\s*EOF\n\s*\)"(.*)$/);if(d&&d[1]&&d[2]){let G=d[1],Z=d[2],C=d[3]||"";return`${G.trim()} "${Z.trim()}"${C.trim()}`}}return I},renderToolUseRejectedMessage(){return s$.createElement(A3,null)},renderToolResultMessage(I,{verbose:d}){return s$.createElement($s,{content:I,verbose:d})},renderResultForAssistant({interrupted:I,stdout:d,stderr:G}){let Z=G.trim();if(I){if(G)Z+=us;Z+="Command was aborted before completion"}let C=d.trim()&&Z;return`${d.trim()}${C?` +`:""}${Z.trim()}`},async*call({command:I,timeout:d=120000},{abortController:G,readFileTimestamps:Z}){let C="",W="",w=await m8.getInstance().exec(I,G.signal,d);if(C+=(w.stdout||"").trim()+us,W+=(w.stderr||"").trim()+us,w.code!==0)W+=`Exit code ${w.code}`;if(!x81(R0(),t7()))await m8.getInstance().setCwd(t7()),W=`${W.trim()}${us}Shell cwd was reset to ${t7()}`,I0("bash_tool_reset_to_original_dir",{});Cg2(I,C).then((F)=>{for(let g of F){let J=jK2(g)?g:xK2(R0(),g);try{Z[J]=uZ9(J).mtimeMs}catch(K){X0(K)}}});let{totalLines:B,truncatedContent:A}=b$(C.trim()),{totalLines:V,truncatedContent:X}=b$(W.trim()),_={stdout:A,stdoutLines:B,stderr:X,stderrLines:V,interrupted:w.interrupted};yield{type:"result",resultForAssistant:this.renderResultForAssistant(_),data:_}}};function cK2(){return`You are ${K4}, Anthropic's official CLI for Claude.`}async function iR(){return[`You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user. + +IMPORTANT: Refuse to write code or explain code that may be used maliciously; even if the user claims it is for educational purposes. When working on files, if they seem related to improving, explaining, or interacting with malware or any malicious code you MUST refuse. +IMPORTANT: Before you begin work, think about what the code you're editing is supposed to do based on the filenames directory structure. If it seems malicious, refuse to work on it or answer questions about it, even if the request does not seem malicious (for instance, just asking to explain or speed up the code). + +Here are useful slash commands users can run to interact with you: +- /help: Get help with using ${K4} +- /compact: Compact and continue the conversation. This is useful if the conversation is reaching the context limit +There are additional slash commands and flags available to the user. If the user asks about ${K4} functionality, always run \`claude -h\` with ${G5.name} to see supported commands and flags. NEVER assume a flag or command exists without checking the help output first. +To give feedback, users should ${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.ISSUES_EXPLAINER}. + +# Memory +If the current working directory contains a file called CLAUDE.md, it will be automatically added to your context. This file serves multiple purposes: +1. Storing frequently used bash commands (build, test, lint, etc.) so you can use them without searching each time +2. Recording the user's code style preferences (naming conventions, preferred libraries, etc.) +3. Maintaining useful information about the codebase structure and organization + +When you spend time searching for commands to typecheck, lint, build, or test, you should ask the user if it's okay to add those commands to CLAUDE.md. Similarly, when learning about code style preferences or important codebase information, ask if it's okay to add that to CLAUDE.md so you can remember it for next time. + +# Tone and style +You should be concise, direct, and to the point. When you run a non-trivial bash command, you should explain what the command does and why you are running it, to make sure the user understands what you are doing (this is especially important when you are running a command that will make changes to the user's system). +Remember that your output will be displayed on a command line interface. Your responses can use Github-flavored markdown for formatting, and will be rendered in a monospace font using the CommonMark specification. +Output text to communicate with the user; all text you output outside of tool use is displayed to the user. Only use tools to complete tasks. Never use tools like ${G5.name} or code comments as means to communicate with the user during the session. +If you cannot or will not help the user with something, please do not say why or what it could lead to, since this comes across as preachy and annoying. Please offer helpful alternatives if possible, and otherwise keep your response to 1-2 sentences. +IMPORTANT: You should minimize output tokens as much as possible while maintaining helpfulness, quality, and accuracy. Only address the specific query or task at hand, avoiding tangential information unless absolutely critical for completing the request. If you can answer in 1-3 sentences or a short paragraph, please do. +IMPORTANT: You should NOT answer with unnecessary preamble or postamble (such as explaining your code or summarizing your action), unless the user asks you to. +IMPORTANT: Keep your responses short, since they will be displayed on a command line interface. You MUST answer concisely with fewer than 4 lines (not including tool use or code generation), unless user asks for detail. Answer the user's question directly, without elaboration, explanation, or details. One word answers are best. Avoid introductions, conclusions, and explanations. You MUST avoid text before/after your response, such as "The answer is .", "Here is the content of the file..." or "Based on the information provided, the answer is..." or "Here is what I will do next...". Here are some examples to demonstrate appropriate verbosity: + +user: 2 + 2 +assistant: 4 + + + +user: what is 2+2? +assistant: 4 + + + +user: is 11 a prime number? +assistant: true + + + +user: what command should I run to list files in the current directory? +assistant: ls + + + +user: what command should I run to watch files in the current directory? +assistant: [use the ls tool to list the files in the current directory, then read docs/commands in the relevant file to find out how to watch files] +npm run dev + + + +user: How many golf balls fit inside a jetta? +assistant: 150000 + + + +user: what files are in the directory src/? +assistant: [runs ls and sees foo.c, bar.c, baz.c] +user: which file contains the implementation of foo? +assistant: src/foo.c + + + +user: write tests for new feature +assistant: [uses grep and glob search tools to find where similar tests are defined, uses concurrent read file tool use blocks in one tool call to read relevant files at the same time, uses edit file tool to write new tests] + + +# Proactiveness +You are allowed to be proactive, but only when the user asks you to do something. You should strive to strike a balance between: +1. Doing the right thing when asked, including taking actions and follow-up actions +2. Not surprising the user with actions you take without asking +For example, if the user asks you how to approach something, you should do your best to answer their question first, and not immediately jump into taking actions. +3. Do not add additional code explanation summary unless requested by the user. After working on a file, just stop, rather than providing an explanation of what you did. + +# Synthetic messages +Sometimes, the conversation will contain messages like ${KW} or ${_X}. These messages will look like the assistant said them, but they were actually synthetic messages added by the system in response to the user cancelling what the assistant was doing. You should not respond to these messages. You must NEVER send messages like this yourself. + +# Following conventions +When making changes to files, first understand the file's code conventions. Mimic code style, use existing libraries and utilities, and follow existing patterns. +- NEVER assume that a given library is available, even if it is well known. Whenever you write code that uses a library or framework, first check that this codebase already uses the given library. For example, you might look at neighboring files, or check the package.json (or cargo.toml, and so on depending on the language). +- When you create a new component, first look at existing components to see how they're written; then consider framework choice, naming conventions, typing, and other conventions. +- When you edit a piece of code, first look at the code's surrounding context (especially its imports) to understand the code's choice of frameworks and libraries. Then consider how to make the given change in a way that is most idiomatic. +- Always follow security best practices. Never introduce code that exposes or logs secrets and keys. Never commit secrets or keys to the repository. + +# Code style +- Do not add comments to the code you write, unless the user asks you to, or the code is complex and requires additional context. + +# Doing tasks +The user will primarily request you perform software engineering tasks. This includes solving bugs, adding new functionality, refactoring code, explaining code, and more. For these tasks the following steps are recommended: +1. Use the available search tools to understand the codebase and the user's query. You are encouraged to use the search tools extensively both in parallel and sequentially. +2. Implement the solution using all tools available to you +3. Verify the solution if possible with tests. NEVER assume specific test framework or test script. Check the README or search codebase to determine the testing approach. +4. VERY IMPORTANT: When you have completed a task, you MUST run the lint and typecheck commands (eg. npm run lint, npm run typecheck, ruff, etc.) if they were provided to you to ensure your code is correct. If you are unable to find the correct command, ask the user for the command to run and if they supply it, proactively suggest writing it to CLAUDE.md so that you will know to run it next time. + +NEVER commit changes unless the user explicitly asks you to. It is VERY IMPORTANT to only commit when explicitly asked, otherwise the user will feel that you are being too proactive. + +# Tool usage policy +- When doing file search, prefer to use the Agent tool in order to reduce context usage. +- If you intend to call multiple tools and there are no dependencies between the calls, make all of the independent calls in the same function_calls block. + +You MUST answer concisely with fewer than 4 lines of text (not including tool use or code generation), unless user asks for detail. +`,` +${await pK2()}`,`IMPORTANT: Refuse to write code or explain code that may be used maliciously; even if the user claims it is for educational purposes. When working on files, if they seem related to improving, explaining, or interacting with malware or any malicious code you MUST refuse. +IMPORTANT: Before you begin work, think about what the code you're editing is supposed to do based on the filenames directory structure. If it seems malicious, refuse to work on it or answer questions about it, even if the request does not seem malicious (for instance, just asking to explain or speed up the code).`]}async function pK2(){let[I,d]=await Promise.all([K6(),eG()]);return`Here is useful information about the environment you are running in: + +Working directory: ${R0()} +Is directory a git repo: ${d?"Yes":"No"} +Platform: ${K2.platform} +Today's date: ${new Date().toLocaleDateString()} +Model: ${I} +`}async function iK2(){return[`You are an agent for ${K4}, Anthropic's official CLI for Claude. Given the user's prompt, you should use the tools available to you to answer the user's question. + +Notes: +1. IMPORTANT: You should be concise, direct, and to the point, since your responses will be displayed on a command line interface. Answer the user's question directly, without elaboration, explanation, or details. One word answers are best. Avoid introductions, conclusions, and explanations. You MUST avoid text before/after your response, such as "The answer is .", "Here is the content of the file..." or "Based on the information provided, the answer is..." or "Here is what I will do next...". +2. When relevant, share file names and code snippets relevant to the query +3. Any file paths you return in your final response MUST be absolute. DO NOT use relative paths.`,`${await pK2()}`]}var hZ="API Error",gJ1="Prompt is too long",JJ1="Credit balance is too low",Os="Invalid API key · Please run /login",FH="(no content)",GK=!process.env.DISABLE_PROMPT_CACHING,nK2=0.8,rK2=4,OZ9=1,mZ9=0.08,lZ9=3,bZ9=15,hZ9=3.75,jZ9=0.3,t$=1;function ms(){return{user_id:`${yb()}_${id}`}}var kZ9=10,xZ9=500;function cZ9(I,d){if(d){let G=parseInt(d,10);if(!isNaN(G))return G*1000}return Math.min(xZ9*Math.pow(2,I-1),32000)}function pZ9(I){if(I.message?.includes('"type":"overloaded_error"'))return!1;let d=I.headers?.["x-should-retry"];if(d==="true")return!0;if(d==="false")return!1;if(I instanceof rw)return!0;if(!I.status)return!1;if(I.status===408)return!0;if(I.status===409)return!0;if(I.status===429)return!0;if(I.status&&I.status>=500)return!0;return!1}async function ls(I,d={}){let G=d.maxRetries??kZ9,Z;for(let C=1;C<=G+1;C++)try{return await I(C)}catch(W){if(Z=W,C>G||!(W instanceof f9)||!pZ9(W))throw W;let w=W.headers?.["retry-after"]??null,B=cZ9(C,w);console.log(` ⎿ ${c0.red(`API ${W.name} (${W.message}) · Retrying in ${Math.round(B/1000)} seconds… (attempt ${C}/${G})`)}`),I0("tengu_api_retry",{attempt:String(C),delayMs:String(B),error:W.message,status:String(W.status),provider:b9?"bedrock":h9?"vertex":"1p"}),await new Promise((A)=>setTimeout(A,B))}throw Z}async function aK2(I){let d=new N71({apiKey:I,dangerouslyAllowBrowser:!0,maxRetries:3,defaultHeaders:{"User-Agent":PS}});try{return await ls(async()=>{let G=Rw,Z=[{role:"user",content:"test"}];return await d.messages.create({model:G,max_tokens:1,messages:Z,temperature:0,metadata:ms()}),!0},{maxRetries:2}),!0}catch(G){if(X0(G),G instanceof Error&&G.message.includes('{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}}'))return!1;throw G}}async function KJ1(I){let d=Date.now(),G;for await(let C of I)if(C.type==="message_start")G=Date.now()-d;return{...await I.finalMessage(),ttftMs:G}}var dK=null;function NJ1(I){if(dK)return dK;let d=Al1(I),G={"x-app":"cli","User-Agent":PS};if(process.env.ANTHROPIC_AUTH_TOKEN)G.Authorization=`Bearer ${process.env.ANTHROPIC_AUTH_TOKEN}`;let Z={defaultHeaders:G,maxRetries:0,timeout:parseInt(process.env.API_TIMEOUT_MS||String(60000),10)};if(b9){let W=new yr(Z);return dK=W,W}if(h9){let W={...Z,region:d||process.env.CLOUD_ML_REGION||"us-east5"},w=new Xa(W);return dK=w,w}let C=vw();return dK=new N71({apiKey:C,dangerouslyAllowBrowser:!0,...Z}),dK}function sK2(){dK=null}function iZ9(I,d=!1){if(d)if(typeof I.message.content==="string")return{role:"user",content:[{type:"text",text:I.message.content,...GK?{cache_control:{type:"ephemeral"}}:{}}]};else return{role:"user",content:I.message.content.map((G,Z)=>({...G,...Z===I.message.content.length-1?GK?{cache_control:{type:"ephemeral"}}:{}:{}}))};return{role:"user",content:I.message.content}}function nZ9(I,d=!1){if(d)if(typeof I.message.content==="string")return{role:"assistant",content:[{type:"text",text:I.message.content,...GK?{cache_control:{type:"ephemeral"}}:{}}]};else return{role:"assistant",content:I.message.content.map((G,Z)=>({...G,...Z===I.message.content.length-1&&G.type!=="thinking"&&G.type!=="redacted_thinking"?GK?{cache_control:{type:"ephemeral"}}:{}:{}}))};return{role:"assistant",content:I.message.content}}function Ts(I){let d=I[0]||"",G=I.slice(1);return[d,G.join(` +`)].filter(Boolean)}async function bs(I,d,G,Z,C,W){return await KF1(I,()=>rZ9(I,d,G,Z,C,W))}function oK2(I,d){if(Object.entries(d).length===0)return I;return[...I,` +As you answer the user's questions, you can use the following context: +`,...Object.entries(d).map(([G,Z])=>`${Z}`)]}async function rZ9(I,d,G,Z,C,W){let w=await NJ1(W.model);if(W.prependCLISysprompt){let[T]=Ts(d);I0("tengu_sysprompt_block",{snippet:T?.slice(0,20),length:String(T?.length??0),hash:T?TZ9("sha256").update(T).digest("hex"):""}),d=[cK2(),...d]}let B=Ts(d).map((T)=>({...GK?{cache_control:{type:"ephemeral"}}:{},text:T,type:"text"})),A=await Promise.all(Z.map(async(T)=>({name:T.name,description:await T.prompt({dangerouslySkipPermissions:W.dangerouslySkipPermissions}),input_schema:"inputJSONSchema"in T&&T.inputJSONSchema?T.inputJSONSchema:KR(T.inputSchema)}))),V=await fb(),X=GK&&V.length>0;I0("tengu_api_query",{model:W.model,messagesLength:String(JSON.stringify([...B,...I,...A]).length),temperature:String(t$),provider:b9?"bedrock":h9?"vertex":"1p",...X?{betas:V.join(",")}:{}});let _=Date.now(),F=Date.now(),g=0,J,K=void 0;try{J=await ls(async(T)=>{g=T,F=Date.now();let V1=w.beta.messages.stream({model:W.model,max_tokens:Math.max(G+1,eZ9(W.model)),messages:aZ9(I),temperature:t$,system:B,tools:A,...X?{betas:V}:{},metadata:ms(),...{}},{signal:C});return K=V1,KJ1(V1)})}catch(T){return X0(T),I0("tengu_api_error",{model:W.model,error:T instanceof Error?T.message:String(T),status:T instanceof f9?String(T.status):void 0,messageCount:String(I.length),messageTokens:String(oD(I)),durationMs:String(Date.now()-F),durationMsIncludingRetries:String(Date.now()-_),attempt:String(g),provider:b9?"bedrock":h9?"vertex":"1p",requestId:K?.request_id??void 0}),zJ1(T)}let Q=Date.now()-F,E=Date.now()-_;I0("tengu_api_success",{model:W.model,messageCount:String(I.length),messageTokens:String(oD(I)),inputTokens:String(J.usage.input_tokens),outputTokens:String(J.usage.output_tokens),cachedInputTokens:String(J.usage.cache_read_input_tokens??0),uncachedInputTokens:String(J.usage.cache_creation_input_tokens??0),durationMs:String(Q),durationMsIncludingRetries:String(E),attempt:String(g),ttftMs:String(J.ttftMs),provider:b9?"bedrock":h9?"vertex":"1p",requestId:K?.request_id??void 0,stop_reason:J.stop_reason??void 0});let S=J.usage.input_tokens,P=J.usage.output_tokens,$=J.usage.cache_read_input_tokens??0,h=J.usage.cache_creation_input_tokens??0,O=S/1e6*lZ9+P/1e6*bZ9+$/1e6*jZ9+h/1e6*hZ9;return _a(O,E),{message:{...J,content:hs(J.content),usage:{...J.usage,cache_read_input_tokens:J.usage.cache_read_input_tokens??0,cache_creation_input_tokens:J.usage.cache_creation_input_tokens??0}},costUSD:O,durationMs:Q,type:"assistant",uuid:e$()}}function zJ1(I){if(I instanceof Error&&I.message.includes("prompt is too long"))return nR(gJ1);if(I instanceof Error&&I.message.includes("Your credit balance is too low"))return nR(JJ1);if(I instanceof Error&&I.message.toLowerCase().includes("x-api-key"))return nR(Os);if(I instanceof Error)return nR(`${hZ}: ${I.message}`);return nR(hZ)}function aZ9(I){return I.map((d,G)=>{return d.type==="user"?iZ9(d,G>I.length-3):nZ9(d,G>I.length-3)})}async function sZ9({systemPrompt:I,userPrompt:d,assistantPrompt:G,signal:Z}){let C=await NJ1(Rw),W=Rw,w=[{role:"user",content:d},...G?[{role:"assistant",content:G}]:[]],B=Ts(I).map((h)=>({...GK?{cache_control:{type:"ephemeral"}}:{},text:h,type:"text"}));I0("tengu_api_query",{model:W,messagesLength:String(JSON.stringify([...B,...w]).length),provider:b9?"bedrock":h9?"vertex":"1p"});let A=0,V=Date.now(),X=Date.now(),_,F=void 0;try{_=await ls(async(h)=>{A=h,V=Date.now();let O=C.beta.messages.stream({model:W,max_tokens:512,messages:w,system:B,temperature:0,metadata:ms(),stream:!0},{signal:Z});return F=O,await KJ1(O)})}catch(h){return X0(h),I0("tengu_api_error",{error:h instanceof Error?h.message:String(h),status:h instanceof f9?String(h.status):void 0,model:Rw,messageCount:String(G?2:1),durationMs:String(Date.now()-V),durationMsIncludingRetries:String(Date.now()-X),attempt:String(A),provider:b9?"bedrock":h9?"vertex":"1p",requestId:F?.request_id??void 0}),zJ1(h)}let g=_.usage.input_tokens,J=_.usage.output_tokens,K=_.usage.cache_read_input_tokens??0,Q=_.usage.cache_creation_input_tokens??0,E=g/1e6*nK2+J/1e6*rK2+K/1e6*mZ9+Q/1e6*OZ9,S=Date.now()-V,P=Date.now()-X;_a(E,P);let $={durationMs:S,message:{..._,content:hs(_.content)},costUSD:E,uuid:e$(),type:"assistant"};return I0("tengu_api_success",{model:Rw,messageCount:String(G?2:1),inputTokens:String(g),outputTokens:String(_.usage.output_tokens),cachedInputTokens:String(_.usage.cache_read_input_tokens??0),uncachedInputTokens:String(_.usage.cache_creation_input_tokens??0),durationMs:String(S),durationMsIncludingRetries:String(P),ttftMs:String(_.ttftMs),provider:b9?"bedrock":h9?"vertex":"1p",requestId:F?.request_id??void 0,stop_reason:_.stop_reason??void 0}),$}async function oZ9({systemPrompt:I,userPrompt:d,assistantPrompt:G,signal:Z}){let C=await NJ1(Rw),W=Rw,w=[{role:"user",content:d},...G?[{role:"assistant",content:G}]:[]];I0("tengu_api_query",{model:W,messagesLength:String(JSON.stringify([{systemPrompt:I},...w]).length),provider:b9?"bedrock":h9?"vertex":"1p"});let B=0,A=Date.now(),V=Date.now(),X,_=void 0;try{X=await ls(async(S)=>{B=S,A=Date.now();let P=C.beta.messages.stream({model:W,max_tokens:512,messages:w,system:Ts(I).map(($)=>({type:"text",text:$})),temperature:0,metadata:ms(),stream:!0},{signal:Z});return _=P,await KJ1(P)})}catch(S){return X0(S),I0("tengu_api_error",{error:S instanceof Error?S.message:String(S),status:S instanceof f9?String(S.status):void 0,model:Rw,messageCount:String(G?2:1),durationMs:String(Date.now()-A),durationMsIncludingRetries:String(Date.now()-V),attempt:String(B),provider:b9?"bedrock":h9?"vertex":"1p",requestId:_?.request_id??void 0}),zJ1(S)}let F=Date.now()-A,g=Date.now()-V;I0("tengu_api_success",{model:Rw,messageCount:String(G?2:1),inputTokens:String(X.usage.input_tokens),outputTokens:String(X.usage.output_tokens),durationMs:String(F),durationMsIncludingRetries:String(g),attempt:String(B),provider:b9?"bedrock":h9?"vertex":"1p",requestId:_?.request_id??void 0,stop_reason:X.stop_reason??void 0});let J=X.usage.input_tokens,K=X.usage.output_tokens,Q=J/1e6*nK2+K/1e6*rK2;return _a(Q,F),{durationMs:F,message:{...X,content:hs(X.content),usage:{...X.usage,cache_read_input_tokens:0,cache_creation_input_tokens:0}},costUSD:Q,type:"assistant",uuid:e$()}}async function jZ({systemPrompt:I=[],userPrompt:d,assistantPrompt:G,enablePromptCaching:Z=!1,signal:C}){return await KF1([{message:{role:"user",content:I.map((W)=>({type:"text",text:W}))},type:"user",uuid:e$()},{message:{role:"user",content:d},type:"user",uuid:e$()}],()=>{return Z?sZ9({systemPrompt:I,userPrompt:d,assistantPrompt:G,signal:C}):oZ9({systemPrompt:I,userPrompt:d,assistantPrompt:G,signal:C})})}function eZ9(I){if(I.includes("3-5"))return 8192;if(I.includes("haiku"))return 8192;return 20000}async function rR(I){let d=process.platform,G=d==="win32"?"start":d==="darwin"?"open":"xdg-open";try{let{code:Z}=await E5(G,[I]);return Z===0}catch(Z){return!1}}var eK2=J1(u1(),1);function P6(I){let[d,G]=eK2.useState({pending:!1,keyName:null}),Z=$g((W)=>G({pending:W,keyName:"Ctrl-C"}),I),C=$g((W)=>G({pending:W,keyName:"Ctrl-D"}),I);return C4((W,w)=>{if(w.ctrl&&W==="c")Z();if(w.ctrl&&W==="d")C()}),d}var tZ9="https://github.com/anthropics/claude-code/issues";function tK2({onDone:I}){let[d,G]=iZ.useState("userInput"),[Z,C]=iZ.useState(0),[W,w]=iZ.useState(""),[B,A]=iZ.useState(null),[V,X]=iZ.useState(null),[_,F]=iZ.useState({isGit:!1,gitState:null}),[g,J]=iZ.useState(null),K=G9().columns-4,Q=yS()();iZ.useEffect(()=>{async function $(){let h=await eG(),O=null;if(h)O=await qb();F({isGit:h,gitState:O})}$()},[]);let E=P6(()=>process.exit(0)),S=iZ.useCallback(async()=>{G("submitting"),X(null),A(null);let $={message_count:Q.length,datetime:new Date().toISOString(),description:W,platform:K2.platform,gitRepo:_.isGit,terminal:K2.terminal,version:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,transcript:Q,errors:su1()},[h,O]=await Promise.all([GC9($),dC9(W)]);if(J(O),h.success){if(h.feedbackId)A(h.feedbackId),I0("tengu_bug_report_submitted",{feedback_id:h.feedbackId});G("done")}else X("Could not submit feedback. Please try again later."),G("userInput")},[W,_.isGit,Q]);C4(($,h)=>{if(d==="done"){if(h.return&&B&&g){let O=IC9(B,g,W);rR(O)}I("Bug report submitted");return}if(V){I("Error submitting bug report");return}if(h.escape){I("Bug report cancelled");return}if(d==="consent"&&(h.return||$===" "))S()});let P=r1();return p0.createElement(p0.Fragment,null,p0.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:P.permission,paddingX:1,paddingBottom:1,gap:1},p0.createElement(u,{bold:!0,color:P.permission},"Submit Bug Report"),d==="userInput"&&p0.createElement(p,{flexDirection:"column",gap:1},p0.createElement(u,null,"Describe the issue below:"),p0.createElement(mC,{value:W,onChange:w,columns:K,onSubmit:()=>G("consent"),onExitMessage:()=>I("Bug report cancelled"),cursorOffset:Z,onChangeCursorOffset:C}),V&&p0.createElement(p,{flexDirection:"column",gap:1},p0.createElement(u,{color:"red"},V),p0.createElement(u,{dimColor:!0},"Press any key to close"))),d==="consent"&&p0.createElement(p,{flexDirection:"column"},p0.createElement(u,null,"This report will include:"),p0.createElement(p,{marginLeft:2,flexDirection:"column"},p0.createElement(u,null,"- Your bug description: ",p0.createElement(u,{dimColor:!0},W)),p0.createElement(u,null,"- Environment info:"," ",p0.createElement(u,{dimColor:!0},K2.platform,", ",K2.terminal,", v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION)),_.gitState&&p0.createElement(u,null,"- Git repo metadata:"," ",p0.createElement(u,{dimColor:!0},_.gitState.branchName,_.gitState.commitHash?`, ${_.gitState.commitHash.slice(0,7)}`:"",_.gitState.remoteUrl?` @ ${_.gitState.remoteUrl}`:"",!_.gitState.isHeadOnRemote&&", not synced",!_.gitState.isClean&&", has local changes")),p0.createElement(u,null,"- Current session transcript")),p0.createElement(p,{marginTop:1},p0.createElement(u,{wrap:"wrap",dimColor:!0},"We will use your feedback to debug related issues or to improve"," ",K4,"'s functionality (eg. to reduce the risk of bugs occurring in the future). Anthropic will not train generative models using feedback from ",K4,".")),p0.createElement(p,{marginTop:1},p0.createElement(u,null,"Press ",p0.createElement(u,{bold:!0},"Enter")," to confirm and submit."))),d==="submitting"&&p0.createElement(p,{flexDirection:"row",gap:1},p0.createElement(u,null,"Submitting report…")),d==="done"&&p0.createElement(p,{flexDirection:"column"},p0.createElement(u,{color:r1().success},"Thank you for your report!"),B&&p0.createElement(u,{dimColor:!0},"Feedback ID: ",B),p0.createElement(p,{marginTop:1},p0.createElement(u,null,"Press "),p0.createElement(u,{bold:!0},"Enter "),p0.createElement(u,null,"to also create a GitHub issue, or any other key to close.")))),p0.createElement(p,{marginLeft:3},p0.createElement(u,{dimColor:!0},E.pending?p0.createElement(p0.Fragment,null,"Press ",E.keyName," again to exit"):d==="userInput"?p0.createElement(p0.Fragment,null,"Enter to continue · Esc to cancel"):d==="consent"?p0.createElement(p0.Fragment,null,"Enter to submit · Esc to cancel"):null)))}function IC9(I,d,G){let Z=encodeURIComponent(`**Bug Description** +${G} + +**Environment Info** +- Platform: ${K2.platform} +- Terminal: ${K2.terminal} +- Version: ${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION||"unknown"} +- Feedback ID: ${I} +`);return`${tZ9}/new?title=${encodeURIComponent(d)}&body=${Z}&labels=user-reported,bug`}async function dC9(I){let d=await jZ({systemPrompt:['Generate a concise issue title (max 80 chars) that captures the key point of this feedback. Do not include quotes or prefixes like "Feedback:" or "Issue:". If you cannot generate a title, just use "User Feedback".'],userPrompt:I}),G=d.message.content[0]?.type==="text"?d.message.content[0].text:"Bug Report";if(G.startsWith(hZ))return`Bug Report: ${I.slice(0,60)}${I.length>60?"...":""}`;return G}async function GC9(I){try{let d=vw();if(!d)return{success:!1};let G=await fetch("https://api.anthropic.com/api/claude_cli_feedback",{method:"POST",headers:{"Content-Type":"application/json","User-Agent":PS,"x-api-key":d},body:JSON.stringify({content:JSON.stringify(I)})});if(G.ok){let Z=await G.json();if(Z?.feedback_id)return{success:!0,feedbackId:Z.feedback_id};return X0("Failed to submit feedback: request did not return feedback_id"),{success:!1}}return X0("Failed to submit feedback:"+G.status),{success:!1}}catch(d){return X0("Error submitting feedback: "+(d instanceof Error?d.message:"Unknown error")),{success:!1}}}var QJ1=J1(u1(),1);var ZC9={type:"local-jsx",name:"bug",description:`Submit feedback about ${K4}`,isEnabled:!0,isHidden:!1,async call(I){return QJ1.createElement(tK2,{onDone:I})},userFacingName(){return"bug"}},IN2=ZC9;import{existsSync as CC9,readFileSync as WC9}from"fs";import{join as wC9,parse as BC9,dirname as AC9}from"path";var VC9="The codebase follows strict style guidelines shown below. All code changes must strictly adhere to these guidelines to maintain consistency and quality.",aR=a2(()=>{let I=[],d=R0();while(d!==BC9(d).root){let G=wC9(d,"CLAUDE.md");if(CC9(G))I.push(`Contents of ${G}: + +${WC9(G,"utf-8")}`);d=AC9(d)}if(I.length===0)return"";return`${VC9} + +${I.reverse().join(` + +`)}`});import*as ZN2 from"path";import{join as CN2}from"path";import{readFile as XC9}from"fs/promises";import{existsSync as YC9}from"fs";var dN2=Symbol("NO_VALUE");async function gH(I){let d=dN2;for await(let G of I)d=G;if(d===dN2)throw new Error("No items in generator");return d}async function*GN2(I,d=1/0){let G=(W)=>{let w=W.next().then(({done:B,value:A})=>({done:B,value:A,generator:W,promise:w}));return w},Z=[...I],C=new Set;while(C.size0){let W=Z.shift();C.add(G(W))}while(C.size>0){let{done:W,value:w,generator:B,promise:A}=await Promise.race(C);if(C.delete(A),!W){if(C.add(G(B)),w!==void 0)yield w}else if(Z.length>0){let V=Z.shift();C.add(G(V))}}}async function _C9(){let I=new AbortController,d=setTimeout(()=>I.abort(),3000);try{let G=await MS(["--files","--glob",CN2("**","*","CLAUDE.md")],R0(),I.signal);if(!G.length)return null;return`NOTE: Additional CLAUDE.md files were found. When working in these directories, make sure to read and follow the instructions in the corresponding CLAUDE.md file: +${G.map((Z)=>ZN2.join(R0(),Z)).map((Z)=>`- ${Z}`).join(` +`)}`}catch(G){return X0(G),null}finally{clearTimeout(d)}}var DC9=a2(async()=>{try{let I=CN2(R0(),"README.md");if(!YC9(I))return null;return await XC9(I,"utf-8")}catch(I){return X0(I),null}}),HC9=a2(async()=>{if(!await eG())return null;try{let[I,d,G,Z,C]=await Promise.all([E5("git",["branch","--show-current"],void 0,void 0,!1).then(({stdout:B})=>B.trim()),E5("git",["rev-parse","--abbrev-ref","origin/HEAD"],void 0,void 0,!1).then(({stdout:B})=>B.replace("origin/","").trim()),E5("git",["status","--short"],void 0,void 0,!1).then(({stdout:B})=>B.trim()),E5("git",["log","--oneline","-n","5"],void 0,void 0,!1).then(({stdout:B})=>B.trim()),E5("git",["log","--oneline","-n","5","--author",await Ll1()||""],void 0,void 0,!1).then(({stdout:B})=>B.trim())]),w=G.split(` +`).length>200?G.split(` +`).slice(0,200).join(` +`)+` +... (truncated because there are more than 200 lines. If you need more information, run "git status" using BashTool)`:G;return`This is the git status at the start of the conversation. Note that this status is a snapshot in time, and will not update during the conversation. +Current branch: ${I} + +Main branch (you will usually use this for PRs): ${d} + +Status: +${w||"(clean)"} + +Recent commits: +${Z} + +Your recent commits: +${C||"(no recent commits)"}`}catch(I){return X0(I),null}}),j7=a2(async()=>{let I=aR(),d=I5(),G=d.dontCrawlDirectory,[Z,C,W,w]=await Promise.all([HC9(),G?Promise.resolve(""):FC9(),G?Promise.resolve(""):_C9(),DC9()]);return{...d.context,...C?{directoryStructure:C}:{},...Z?{gitStatus:Z}:{},...I?{codeStyle:I}:{},...W?{claudeFiles:W}:{},...w?{readme:w}:{}}}),FC9=a2(async function(){let I;try{let d=new AbortController;setTimeout(()=>{d.abort()},1000);let G=await K6(),Z=zI.call({path:"."},{abortController:d,options:{commands:[],tools:[],slowAndCapableModel:G,forkNumber:0,messageLogName:"unused",maxThinkingTokens:0},messageId:void 0,readFileTimestamps:{}});I=(await gH(Z)).data}catch(d){return X0(d),""}return`Below is a snapshot of this project's file structure at the start of the conversation. This snapshot will NOT update during the conversation. + +${I}`});function fJ1(I){if(process.platform==="win32")process.title=I?`✳ ${I}`:I;else process.stdout.write(`\x1B]0;${I?`✳ ${I}`:""}\x07`)}async function WN2(I){try{let G=(await jZ({systemPrompt:["Analyze if this message indicates a new conversation topic. If it does, extract a 2-3 word title that captures the new topic. Format your response as a JSON object with two fields: 'isNewTopic' (boolean) and 'title' (string, or null if isNewTopic is false). Only include these fields, no other text."],userPrompt:I,enablePromptCaching:!0})).message.content.filter((C)=>C.type==="text").map((C)=>C.text).join(""),Z=tG(G);if(Z&&typeof Z==="object"&&"isNewTopic"in Z&&"title"in Z){if(Z.isNewTopic&&Z.title)fJ1(Z.title)}}catch(d){X0(d)}}function $6(){return new Promise((I)=>{process.stdout.write("\x1B[2J\x1B[3J\x1B[H",()=>{I()})})}async function Iu(I){await $6(),qx()([]),I.setForkConvoWithMessagesOnTheNextRender([]),j7.cache.clear?.(),aR.cache.clear?.(),await Uw(t7())}var gC9={type:"local",name:"clear",description:"Clear conversation history and free up context",isEnabled:!0,isHidden:!1,async call(I,d){return Iu(d),""},userFacingName(){return"clear"}},wN2=gC9;var JC9={type:"local",name:"compact",description:"Clear conversation history but keep a summary in context",isEnabled:!0,isHidden:!1,async call(I,{options:{tools:d,slowAndCapableModel:G},abortController:Z,setForkConvoWithMessagesOnTheNextRender:C}){let W=yS()(),w=p9("Provide a detailed but concise summary of our conversation above. Focus on information that would be helpful for continuing the conversation, including what we did, what we're doing, which files we're working on, and what we're going to do next."),B=await bs(sR([...W,w]),["You are a helpful AI assistant tasked with summarizing conversations."],0,d,Z.signal,{dangerouslySkipPermissions:!1,model:G,prependCLISysprompt:!0}),A=B.message.content,V=typeof A==="string"?A:A.length>0&&A[0]?.type==="text"?A[0].text:null;if(!V)throw new Error(`Failed to generate conversation summary - response did not contain valid text content - ${B}`);else if(V.startsWith(hZ))throw new Error(V);return B.message.usage={input_tokens:0,output_tokens:B.message.usage.output_tokens,cache_creation_input_tokens:0,cache_read_input_tokens:0},await $6(),qx()([]),C([p9("Use the /compact command to clear the conversation history, and start a new conversation with the summary in context."),B]),j7.cache.clear?.(),aR.cache.clear?.(),""},userFacingName(){return"compact"}},BN2=JC9;var T4=J1(u1(),1),qJ1=J1(u1(),1);function AN2({onClose:I}){let[d,G]=qJ1.useState(q2()),Z=T4.useRef(q2()),[C,W]=qJ1.useState(0),w=P6(()=>process.exit(0)),B=[...[],{id:"verbose",label:"Verbose output",value:d.verbose,type:"boolean",onChange(A){let V={...q2(),verbose:A};p4(V),G(V)}},{id:"theme",label:"Theme",value:d.theme,options:["light","dark","light-daltonized","dark-daltonized"],type:"enum",onChange(A){let V={...q2(),theme:A};p4(V),G(V)}},{id:"notifChannel",label:"Notifications",value:d.preferredNotifChannel,options:["iterm2","terminal_bell","iterm2_with_bell","notifications_disabled"],type:"enum",onChange(A){let V={...q2(),preferredNotifChannel:A};p4(V),G(V)}}];return C4((A,V)=>{if(V.escape){let _=[],F=Boolean(!1),g=Boolean(!1);if(F!==g)_.push(` ⎿ ${g?"Enabled":"Disabled"} custom API key`);if(d.verbose!==Z.current.verbose)_.push(` ⎿ Set verbose to ${c0.bold(d.verbose)}`);if(d.theme!==Z.current.theme)_.push(` ⎿ Set theme to ${c0.bold(d.theme)}`);if(d.preferredNotifChannel!==Z.current.preferredNotifChannel)_.push(` ⎿ Set notifications to ${c0.bold(d.preferredNotifChannel)}`);if(_.length>0)console.log(c0.gray(_.join(` +`)));I();return}function X(){let _=B[C];if(!_||!_.onChange)return;if(_.type==="boolean"){_.onChange(!_.value);return}if(_.type==="enum"){let g=(_.options.indexOf(_.value)+1)%_.options.length;_.onChange(_.options[g]);return}}if(V.return||A===" "){X();return}if(V.upArrow)W((_)=>Math.max(0,_-1));if(V.downArrow)W((_)=>Math.min(B.length-1,_+1))}),T4.createElement(T4.Fragment,null,T4.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:r1().secondaryBorder,paddingX:1,marginTop:1},T4.createElement(p,{flexDirection:"column",minHeight:2,marginBottom:1},T4.createElement(u,{bold:!0},"Settings"),T4.createElement(u,{dimColor:!0},"Configure ",K4," preferences")),B.map((A,V)=>{let X=V===C;return T4.createElement(p,{key:A.id,height:2,minHeight:2},T4.createElement(p,{width:44},T4.createElement(u,{color:X?"blue":void 0},X?k5.pointer:" "," ",A.label)),T4.createElement(p,null,A.type==="boolean"?T4.createElement(u,{color:X?"blue":void 0},A.value.toString()):T4.createElement(u,{color:X?"blue":void 0},A.value.toString())))})),T4.createElement(p,{marginLeft:3},T4.createElement(u,{dimColor:!0},w.pending?T4.createElement(T4.Fragment,null,"Press ",w.keyName," again to exit"):T4.createElement(T4.Fragment,null,"↑/↓ to select · Enter/Space to change · Esc to close"))))}var RJ1=J1(u1(),1),KC9={type:"local-jsx",name:"config",description:"Open config panel",isEnabled:!0,isHidden:!1,async call(I){return RJ1.createElement(AN2,{onClose:I})},userFacingName(){return"config"}},VN2=KC9;var NC9={type:"local",name:"cost",description:"Show the total cost and duration of the current session",isEnabled:!0,isHidden:!1,async call(){return JF1()},userFacingName(){return"cost"}},XN2=NC9;var ZW9=J1(Vz2(),1);var Rz2=J1(u1(),1);var e4=J1(u1(),1);var Z9=J1(u1(),1);var B7=J1(u1(),1),zW=J1(u1(),1);var is=process.platform==="darwin"?["·","✢","✳","∗","✻","✽"]:["·","✢","*","∗","✻","✽"],CW9=["Accomplishing","Actioning","Actualizing","Baking","Brewing","Calculating","Cerebrating","Churning","Clauding","Coalescing","Cogitating","Computing","Conjuring","Considering","Cooking","Crafting","Creating","Crunching","Deliberating","Determining","Doing","Effecting","Finagling","Forging","Forming","Generating","Hatching","Herding","Honking","Hustling","Ideating","Inferring","Manifesting","Marinating","Moseying","Mulling","Mustering","Musing","Noodling","Percolating","Pondering","Processing","Puttering","Reticulating","Ruminating","Schlepping","Shucking","Simmering","Smooshing","Spinning","Stewing","Synthesizing","Thinking","Transmuting","Vibing","Working"];function ns(){let I=[...is,...[...is].reverse()],[d,G]=zW.useState(0),[Z,C]=zW.useState(0),W=zW.useRef(mF(CW9)),w=zW.useRef(Date.now());return zW.useEffect(()=>{let B=setInterval(()=>{G((A)=>(A+1)%I.length)},120);return()=>clearInterval(B)},[I.length]),zW.useEffect(()=>{let B=setInterval(()=>{C(Math.floor((Date.now()-w.current)/1000))},1000);return()=>clearInterval(B)},[]),B7.createElement(p,{flexDirection:"row",marginTop:1},B7.createElement(p,{flexWrap:"nowrap",height:1,width:2},B7.createElement(u,{color:r1().claude},I[d])),B7.createElement(u,{color:r1().claude},W.current,"… "),B7.createElement(u,{color:r1().secondaryText},"(",Z,"s · ",B7.createElement(u,{bold:!0},"esc")," to interrupt)"))}function Cu(){let I=[...is,...[...is].reverse()],[d,G]=zW.useState(0);return zW.useEffect(()=>{let Z=setInterval(()=>{G((C)=>(C+1)%I.length)},120);return()=>clearInterval(Z)},[I.length]),B7.createElement(p,{flexWrap:"nowrap",height:1,width:2},B7.createElement(u,{color:r1().claude},I[d]))}import{homedir as Wu}from"os";import{join as tR}from"path";import{existsSync as wu,mkdirSync as Yz2,appendFileSync as Xz2,readFileSync as _z2,constants as WW9,writeFileSync as wW9,unlinkSync as Dz2,statSync as BW9}from"fs";import{platform as Hz2}from"process";import{accessSync as AW9}from"fs";var Fz2=J1(Fk(),1);async function gz2(){try{let I=await PE("tengu_version_config",{minVersion:"0.0.0"});if(I.minVersion&&Fz2.lt({ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,I.minVersion))console.error(` +It looks like your version of Claude Code (${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION}) needs an update. +A newer version (${I.minVersion} or higher) is required to continue. + +To update, please run: + claude update + +This will ensure you have access to the latest features and improvements. +`),process.exit(1)}catch(I){X0(`Error checking minimum version: ${I}`)}}var CK=tR(vz,".update.lock"),VW9=300000;function Jz2(){try{if(!wu(vz))Yz2(vz,{recursive:!0});if(wu(CK)){let I=BW9(CK);if(Date.now()-I.mtimeMsI.abort(),5000);let d=await E5("npm",["view",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.PACKAGE_URL,"version"],I.signal);if(d.code!==0)return null;return d.stdout.trim()}async function rs(){if(!Jz2())return X0("Another process is currently installing an update"),I0("tengu_auto_updater_lock_contention",{pid:String(process.pid),currentVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION}),"in_progress";try{let{hasPermissions:I}=await TJ1();if(!I)return"no_permissions";let d=await E5("npm",["install","-g",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.PACKAGE_URL]);if(d.code!==0)return X0(`Failed to install new version of claude: ${d.stdout} ${d.stderr}`),"install_failed";return"success"}finally{Kz2()}}function qz2({customPrefix:I,onCustomPrefixChange:d,onSuccess:G,onCancel:Z}){let[C,W]=Z9.useState(I.length),[w,B]=Z9.useState(!1),[A,V]=Z9.useState(!1),[X,_]=Z9.useState(null),[F,g]=Z9.useState({completeSteps:[!1,!1,!1,!1],inProgressStep:null}),J=G9().columns-6,K=r1();async function Q(S){V(!0),_(null);try{g({completeSteps:[!1,!1,!1,!1],inProgressStep:0}),await Nz2(S),g({completeSteps:[!0,!0,!0,!1],inProgressStep:3}),await rs(),g({completeSteps:[!0,!0,!0,!0],inProgressStep:null}),I0("tengu_auto_updater_config_complete",{finalStatus:"enabled",method:"prefix",success:"true"}),G()}catch(P){X0(P);let $=P instanceof Error?P.message:"Failed to setup npm prefix";_($),V(!1),I0("tengu_auto_updater_config_complete",{finalStatus:"not_configured",method:"prefix",success:"false",error:$})}}let E=[{label:"Create new directory for npm global packages",command:`mkdir -p ${I}`},{label:"Configure npm to use new location",command:`npm -g config set prefix ${I}`},{label:"Update shell PATH configuration",command:`export PATH=${I}/bin:$PATH`},{label:`Reinstall ${K4} globally`,command:`npm install -g ${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.PACKAGE_URL}`}];return Z9.default.createElement(p,{marginLeft:2,flexDirection:"column"},Z9.default.createElement(p,{flexDirection:"column",gap:1},Z9.default.createElement(u,null,"⚠️ Warning: This will modify your global npm configuration and can be dangerous. The following changes will be made:"),E.map((S,P)=>Z9.default.createElement(p,{key:P,flexDirection:"column"},Z9.default.createElement(p,{flexDirection:"row"},Z9.default.createElement(u,{color:F.completeSteps[P]?K.success:void 0},A?F.completeSteps[P]?"✓":" ":`${P+1}.`),Z9.default.createElement(p,{width:2},F.inProgressStep===P&&Z9.default.createElement(Cu,null)),Z9.default.createElement(u,{color:F.completeSteps[P]?K.success:void 0},S.label)),S.command&&Z9.default.createElement(p,{marginLeft:2},Z9.default.createElement(u,{color:K.suggestion,dimColor:!0},"$ ",S.command)))),Z9.default.createElement(u,{color:K.suggestion},"Note: You'll need to restart your terminal after this change"),Z9.default.createElement(u,{color:K.warning},"Important: Any existing global npm packages may need to be reinstalled")),!A&&Z9.default.createElement(p,{marginTop:1,flexDirection:"column"},Z9.default.createElement(u,null,"Enter prefix path:"),Z9.default.createElement(p,{flexDirection:"row",gap:1},Z9.default.createElement(u,null,">"),Z9.default.createElement(mC,{placeholder:I,value:I,onChange:d,onSubmit:()=>B(!0),columns:J,cursorOffset:C,onChangeCursorOffset:W})),w&&Z9.default.createElement(p,{marginTop:1,flexDirection:"column"},Z9.default.createElement(u,null,"Are you sure you want to continue with prefix: ",I,"?"),Z9.default.createElement(Q6,{options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}],onChange:(S)=>{if(B(!1),S==="yes")Q(I);else Z()}}))),X&&Z9.default.createElement(u,{color:K.error},"Error: ",X))}import{platform as XW9}from"process";var Bu=J1(u1(),1);function JH(){return Bu.createElement(u,{color:r1().permission},"Press ",Bu.createElement(u,{bold:!0},"Enter")," to continue…")}function Au({onDone:I,doctorMode:d=!1}){let[G,Z]=e4.useState(null),[C,W]=e4.useState(null),[w,B]=e4.useState(null),[A,V]=e4.useState(zz2()),X=r1(),[_,F]=e4.useState(!1),g=[{label:"Manually fix permissions on current npm prefix (Recommended)",value:"manual",description:XW9==="win32"?"Uses icacls to grant write permissions":"Uses sudo to change ownership"},{label:"Create new npm prefix directory",value:"auto",description:"Creates a new directory for global npm packages in your home directory"},{label:"Skip configuration until next session",value:"ignore",description:"Skip this warning (you will be reminded again later)"}],J=e4.useCallback(async()=>{let K=await TJ1();if(I0("tengu_auto_updater_permissions_check",{hasPermissions:K.hasPermissions.toString(),npmPrefix:K.npmPrefix??"null"}),Z(K.hasPermissions),K.npmPrefix)W(K.npmPrefix);if(K.hasPermissions){let Q=q2();if(p4({...Q,autoUpdaterStatus:"enabled"}),!d)I()}},[I,d]);if(e4.useEffect(()=>{I0("tengu_auto_updater_config_start",{}),J()},[J]),C4((K,Q)=>{if((_||d&&G===!0)&&Q.return)I()},{isActive:_||d&&G===!0}),G===null)return e4.default.createElement(p,{paddingX:1,paddingTop:1},e4.default.createElement(u,{color:X.secondaryText},"Checking npm permissions…"));if(G===!0){if(d)return e4.default.createElement(p,{flexDirection:"column",gap:1,paddingX:1,paddingTop:1},e4.default.createElement(u,{color:X.success},"✓ npm permissions: OK"),e4.default.createElement(u,null,"Your installation is healthy and ready for auto-updates."),e4.default.createElement(JH,null));return e4.default.createElement(p,{paddingX:1,paddingTop:1},e4.default.createElement(u,{color:X.success},"✓ Auto-updates enabled"))}return e4.default.createElement(p,{borderColor:X.permission,borderStyle:"round",flexDirection:"column",gap:1,paddingX:1,paddingTop:1},e4.default.createElement(u,{bold:!0,color:X.permission},"Enable automatic updates?"),e4.default.createElement(u,null,K4," can't update itself because it doesn't have permissions. Do you want to fix this to get automatic updates?"),e4.default.createElement(p,{flexDirection:"column"},!w&&e4.default.createElement(p,{marginLeft:2},e4.default.createElement(u,null,"Select an option below to fix the permissions issue:"),e4.default.createElement(Q6,{options:g,onChange:(K)=>{if(K!=="auto"&&K!=="manual"&&K!=="ignore")return;if(B(K),I0("tengu_auto_updater_config_option_selected",{option:K,npmPrefix:C??"null"}),K==="manual"){let Q=q2();p4({...Q,autoUpdaterStatus:"not_configured"}),F(!0)}else if(K==="ignore"){let Q=q2();p4({...Q,autoUpdaterStatus:"not_configured"}),I()}}})),w==="auto"&&e4.default.createElement(p,{marginLeft:2},e4.default.createElement(qz2,{customPrefix:A,onCustomPrefixChange:V,onSuccess:J,onCancel:I})),w==="manual"&&e4.default.createElement(e4.default.Fragment,null,e4.default.createElement(p,{marginLeft:4,flexDirection:"column"},e4.default.createElement(u,null,"Run this command in your terminal:"),e4.default.createElement(p,{flexDirection:"row",gap:1},e4.default.createElement(u,{color:X.warning},Qz2(C??""))),e4.default.createElement(p,{flexDirection:"row",gap:1},e4.default.createElement(u,{color:X.suggestion},"After running the command, restart ",K4))),e4.default.createElement(JH,null))))}var YW9={name:"doctor",description:"Checks the health of your Claude Code installation",isEnabled:!0,isHidden:!1,userFacingName(){return"doctor"},type:"local-jsx",call(I){let d=Rz2.default.createElement(Au,{onDone:I,doctorMode:!0});return Promise.resolve(d)}},Uz2=YW9;var G2=J1(u1(),1);function vz2({commands:I,onClose:d}){let G=r1(),Z=!1,C=`Learn more at: ${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.README_URL}`,W=I.filter((A)=>!A.isHidden),[w,B]=G2.useState(0);return G2.useEffect(()=>{let A=setTimeout(()=>{if(w<3)B(w+1)},250);return()=>clearTimeout(A)},[w]),C4((A,V)=>{if(V.return)d()}),G2.createElement(p,{flexDirection:"column",padding:1},G2.createElement(u,{bold:!0,color:G.claude},`${K4} v${{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION}`),G2.createElement(p,{marginTop:1,flexDirection:"column"},G2.createElement(u,null,K4," is a beta research preview. Always review Claude's responses, especially when running code. Claude has read access to files in the current directory and can run commands and edit files with your permission.")),w>=1&&G2.createElement(p,{flexDirection:"column",marginTop:1},G2.createElement(u,{bold:!0},"Usage Modes:"),G2.createElement(u,null,"• REPL: ",G2.createElement(u,{bold:!0},"claude")," (interactive session)"),G2.createElement(u,null,"• Non-interactive: ",G2.createElement(u,{bold:!0},'claude -p "question"')),G2.createElement(p,{marginTop:1},G2.createElement(u,null,"Run ",G2.createElement(u,{bold:!0},"claude -h")," for all command line options"))),w>=2&&G2.createElement(p,{marginTop:1,flexDirection:"column"},G2.createElement(u,{bold:!0},"Common Tasks:"),G2.createElement(u,null,"• Ask questions about your codebase"," ",G2.createElement(u,{color:r1().secondaryText},"> How does foo.py work?")),G2.createElement(u,null,"• Edit files"," ",G2.createElement(u,{color:r1().secondaryText},"> Update bar.ts to...")),G2.createElement(u,null,"• Fix errors"," ",G2.createElement(u,{color:r1().secondaryText},"> cargo build")),G2.createElement(u,null,"• Run commands"," ",G2.createElement(u,{color:r1().secondaryText},"> /help")),G2.createElement(u,null,"• Run bash commands"," ",G2.createElement(u,{color:r1().secondaryText},"> !ls"))),w>=3&&G2.createElement(p,{marginTop:1,flexDirection:"column"},G2.createElement(u,{bold:!0},"Interactive Mode Commands:"),G2.createElement(p,{flexDirection:"column"},W.map((A,V)=>G2.createElement(p,{key:V,marginLeft:1},G2.createElement(u,{bold:!0},`/${A.name}`),G2.createElement(u,null," - ",A.description))))),G2.createElement(p,{marginTop:1},G2.createElement(u,{color:G.secondaryText},C)),G2.createElement(p,{marginTop:2},G2.createElement(JH,null)))}var OJ1=J1(u1(),1),_W9={type:"local-jsx",name:"help",description:"Show help and available commands",isEnabled:!0,isHidden:!1,async call(I,{options:{commands:d}}){return OJ1.createElement(vz2,{commands:d,onClose:I})},userFacingName(){return"help"}},Ez2=_W9;var DW9={type:"prompt",name:"init",description:"Initialize a new CLAUDE.md file with codebase documentation",isEnabled:!0,isHidden:!1,progressMessage:"analyzing your codebase",userFacingName(){return"init"},async getPromptForCommand(I){return zQ(),[{role:"user",content:[{type:"text",text:`Please analyze this codebase and create a CLAUDE.md file containing: +1. Build/lint/test commands - especially for running a single test +2. Code style guidelines including imports, formatting, types, naming conventions, error handling, etc. + +The file you create will be given to agentic coding agents (such as yourself) that operate in this repository. Make it about 20 lines long. +If there's already a CLAUDE.md, improve it. +If there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include them.`}]}]}},Mz2=DW9;var hq3=process.platform==="darwin"&&["iTerm.app","Apple_Terminal"].includes(process.env.TERM_PROGRAM||"");var c7=J1(u1(),1);var x2=J1(u1(),1);import*as Vu from"crypto";import*as Sz2 from"http";import*as Lz2 from"url";var HW9={REDIRECT_PORT:54545,MANUAL_REDIRECT_URL:"/oauth/code/callback",SCOPES:["org:create_api_key","user:profile"]},FW9={...HW9,AUTHORIZE_URL:"https://console.anthropic.com/oauth/authorize",TOKEN_URL:"https://console.anthropic.com/v1/oauth/token",API_KEY_URL:"https://api.anthropic.com/api/oauth/claude_cli/create_api_key",SUCCESS_URL:"https://console.anthropic.com/buy_credits?returnUrl=/oauth/code/success",CLIENT_ID:"9d1c250a-e61b-44d9-88ed-5944d1962f5e"};var gd=FW9;function mJ1(I){return I.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function gW9(){return mJ1(Vu.randomBytes(32))}async function JW9(I){let G=new TextEncoder().encode(I),Z=await Vu.subtle.digest("SHA-256",G);return mJ1(Buffer.from(Z))}class lJ1{server=null;codeVerifier;expectedState=null;pendingCodePromise=null;constructor(){this.codeVerifier=gW9()}generateAuthUrls(I,d){function G(Z){let C=new URL(gd.AUTHORIZE_URL);return C.searchParams.append("client_id",gd.CLIENT_ID),C.searchParams.append("response_type","code"),C.searchParams.append("redirect_uri",Z?gd.MANUAL_REDIRECT_URL:`http://localhost:${gd.REDIRECT_PORT}/callback`),C.searchParams.append("scope",gd.SCOPES.join(" ")),C.searchParams.append("code_challenge",I),C.searchParams.append("code_challenge_method","S256"),C.searchParams.append("state",d),C.toString()}return{autoUrl:G(!1),manualUrl:G(!0)}}async startOAuthFlow(I){let d=await JW9(this.codeVerifier),G=mJ1(Vu.randomBytes(32));this.expectedState=G;let{autoUrl:Z,manualUrl:C}=this.generateAuthUrls(d,G),W=async()=>{await I(C),await rR(Z)},{authorizationCode:w,useManualRedirect:B}=await new Promise((_,F)=>{this.pendingCodePromise={resolve:_,reject:F},this.startLocalServer(G,W)}),{access_token:A,account:V,organization:X}=await this.exchangeCodeForTokens(w,G,B);if(V){let _={accountUuid:V.uuid,emailAddress:V.email_address,organizationUuid:X?.uuid},F=q2();F.oauthAccount=_,p4(F)}return{accessToken:A}}startLocalServer(I,d){if(this.server)this.closeServer();this.server=Sz2.createServer((G,Z)=>{let C=Lz2.parse(G.url||"",!0);if(C.pathname==="/callback"){let W=C.query.code,w=C.query.state;if(!W){if(Z.writeHead(400),Z.end("Authorization code not found"),this.pendingCodePromise)this.pendingCodePromise.reject(new Error("No authorization code received"));return}if(w!==I){if(Z.writeHead(400),Z.end("Invalid state parameter"),this.pendingCodePromise)this.pendingCodePromise.reject(new Error("Invalid state parameter"));return}Z.writeHead(302,{Location:gd.SUCCESS_URL}),Z.end(),I0("tengu_oauth_automatic_redirect",{}),this.processCallback({authorizationCode:W,state:I,useManualRedirect:!1})}else Z.writeHead(404),Z.end()}),this.server.listen(gd.REDIRECT_PORT,async()=>{d?.()}),this.server.on("error",(G)=>{if(G.code==="EADDRINUSE"){let C=new Error(`Port ${gd.REDIRECT_PORT} is already in use. Please ensure no other applications are using this port.`);if(X0(C),this.closeServer(),this.pendingCodePromise)this.pendingCodePromise.reject(C);return}else{if(X0(G),this.closeServer(),this.pendingCodePromise)this.pendingCodePromise.reject(G);return}})}async exchangeCodeForTokens(I,d,G=!1){let Z={grant_type:"authorization_code",code:I,redirect_uri:G?gd.MANUAL_REDIRECT_URL:`http://localhost:${gd.REDIRECT_PORT}/callback`,client_id:gd.CLIENT_ID,code_verifier:this.codeVerifier,state:d},C=await fetch(gd.TOKEN_URL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Z)});if(!C.ok)throw new Error(`Token exchange failed: ${C.statusText}`);return await C.json()}processCallback({authorizationCode:I,state:d,useManualRedirect:G}){if(this.closeServer(),d!==this.expectedState){if(this.pendingCodePromise)this.pendingCodePromise.reject(new Error("Invalid state parameter")),this.pendingCodePromise=null;return}if(this.pendingCodePromise)this.pendingCodePromise.resolve({authorizationCode:I,useManualRedirect:G}),this.pendingCodePromise=null}closeServer(){if(this.server)this.server.close(),this.server=null}}async function yz2(I){try{let d=await fetch(gd.API_KEY_URL,{method:"POST",headers:{Authorization:`Bearer ${I}`}}),G,Z="";try{G=await d.json()}catch(C){Z=await d.text()}if(I0("tengu_oauth_api_key",{status:d.ok?"success":"failure",statusCode:d.status.toString(),error:d.ok?"":Z||JSON.stringify(G)}),d.ok&&G&&G.raw_key){let C=G.raw_key,W=q2();if(W.primaryApiKey=C,!W.customApiKeyResponses)W.customApiKeyResponses={approved:[],rejected:[]};if(!W.customApiKeyResponses.approved)W.customApiKeyResponses.approved=[];let w=Sb(C);if(!W.customApiKeyResponses.approved.includes(w))W.customApiKeyResponses.approved.push(w);return p4(W),sK2(),C}return null}catch(d){throw I0("tengu_oauth_api_key",{status:"failure",statusCode:"exception",error:d instanceof Error?d.message:String(d)}),d}}var bJ1=J1(u1(),1);function Pz2(){let I=r1();return bJ1.default.createElement(p,{flexDirection:"column",alignItems:"flex-start"},bJ1.default.createElement(u,{color:I.claude},` ██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗ +██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝ +██║ ██║ ███████║██║ ██║██║ ██║█████╗ +██║ ██║ ██╔══██║██║ ██║██║ ██║██╔══╝ +╚██████╗███████╗██║ ██║╚██████╔╝██████╔╝███████╗ + ╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ + ██████╗ ██████╗ ██████╗ ███████╗ +██╔════╝██╔═══██╗██╔══██╗██╔════╝ +██║ ██║ ██║██║ ██║█████╗ +██║ ██║ ██║██║ ██║██╔══╝ +╚██████╗╚██████╔╝██████╔╝███████╗ + ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝`))}var w2=J1(u1(),1);var x7=J1(u1(),1);function $z2({customApiKeyTruncated:I,onDone:d}){let G=r1();function Z(W){let w=q2();switch(W){case"yes":{p4({...w,customApiKeyResponses:{...w.customApiKeyResponses,approved:[...w.customApiKeyResponses?.approved??[],I]}}),d();break}case"no":{p4({...w,customApiKeyResponses:{...w.customApiKeyResponses,rejected:[...w.customApiKeyResponses?.rejected??[],I]}}),d();break}}}let C=P6(()=>process.exit(0));return x7.default.createElement(x7.default.Fragment,null,x7.default.createElement(p,{flexDirection:"column",gap:1,padding:1,borderStyle:"round",borderColor:G.warning},x7.default.createElement(u,{bold:!0,color:G.warning},"Detected a custom API key in your environment"),x7.default.createElement(u,null,"Your environment sets"," ",x7.default.createElement(u,{color:G.warning},"ANTHROPIC_API_KEY"),":"," ",x7.default.createElement(u,{bold:!0},"sk-ant-...",I)),x7.default.createElement(u,null,"Do you want to use this API key?"),x7.default.createElement(Q6,{options:[{label:`No (${c0.bold("recommended")})`,value:"no"},{label:"Yes",value:"yes"}],onChange:(W)=>Z(W)})),x7.default.createElement(p,{marginLeft:3},x7.default.createElement(u,{dimColor:!0},C.pending?x7.default.createElement(x7.default.Fragment,null,"Press ",C.keyName," again to exit"):x7.default.createElement(x7.default.Fragment,null,"Enter to confirm"))))}var L3=J1(u1(),1);var uz2=J1(u1(),1);function nZ({patch:I,dim:d,width:G,overrideTheme:Z}){return uz2.useMemo(()=>KW9(I.lines,I.oldStart,G,d,Z),[I.lines,I.oldStart,G,d,Z]).map((W,w)=>L3.createElement(p,{key:w},W))}function KW9(I,d,G,Z,C){let W=r1(C),w=NW9(I.map((V)=>{if(V.startsWith("+"))return{code:" "+V.slice(1),i:0,type:"add"};if(V.startsWith("-"))return{code:" "+V.slice(1),i:0,type:"remove"};return{code:V,i:0,type:"nochange"}}),d),A=Math.max(...w.map(({i:V})=>V)).toString().length;return w.flatMap(({type:V,code:X,i:_})=>{return xC2(X,G-A).map((g,J)=>{let K=`${V}-${_}-${J}`;switch(V){case"add":return L3.createElement(u,{key:K},L3.createElement(hJ1,{i:J===0?_:void 0,width:A}),L3.createElement(u,{color:C?W.text:void 0,backgroundColor:Z?W.diff.addedDimmed:W.diff.added,dimColor:Z},g));case"remove":return L3.createElement(u,{key:K},L3.createElement(hJ1,{i:J===0?_:void 0,width:A}),L3.createElement(u,{color:C?W.text:void 0,backgroundColor:Z?W.diff.removedDimmed:W.diff.removed,dimColor:Z},g));case"nochange":return L3.createElement(u,{key:K},L3.createElement(hJ1,{i:J===0?_:void 0,width:A}),L3.createElement(u,{color:C?W.text:void 0,dimColor:Z},g))}})})}function hJ1({i:I,width:d}){return L3.createElement(u,{color:r1().secondaryText},I!==void 0?I.toString().padStart(d):" ".repeat(d)," ")}function NW9(I,d){let G=d,Z=[],C=[...I];while(C.length>0){let{code:W,type:w}=C.shift(),B={code:W,type:w,i:G};switch(w){case"nochange":G++,Z.push(B);break;case"add":G++,Z.push(B);break;case"remove":{Z.push(B);let A=0;while(C[0]?.type==="remove"){G++;let{code:V,type:X}=C.shift(),_={code:V,type:X,i:G};Z.push(_),A++}G-=A;break}}}return Z}function as(){return!(b9||h9)}function Tz2(){return!!q2().primaryApiKey}function ss({onDone:I}){let[d,G]=w2.useState(0),Z=q2(),C=as(),[W,w]=w2.useState(zC.theme),B=r1();function A(){if(dprocess.exit(0));C4(async(E,S)=>{let P=Q[d];if(S.return&&P&&["usage","security"].includes(P.id))if(d===Q.length-1)I();else{if(P.id==="security")await $6();A()}});let F=w2.default.createElement(p,{flexDirection:"column",gap:1,paddingLeft:1},w2.default.createElement(u,null,"Let's get started."),w2.default.createElement(p,{flexDirection:"column"},w2.default.createElement(u,{bold:!0},"Choose the option that looks best when you select it:"),w2.default.createElement(u,{dimColor:!0},"To change this later, run /config")),w2.default.createElement(N_,{options:[{label:"Light text",value:"dark"},{label:"Dark text",value:"light"},{label:"Light text (colorblind-friendly)",value:"dark-daltonized"},{label:"Dark text (colorblind-friendly)",value:"light-daltonized"}],onFocus:X,onChange:V}),w2.default.createElement(p,{flexDirection:"column"},w2.default.createElement(p,{paddingLeft:1,marginRight:1,borderStyle:"round",borderColor:"gray",flexDirection:"column"},w2.default.createElement(nZ,{patch:{oldStart:1,newStart:1,oldLines:3,newLines:3,lines:["function greet() {",'- console.log("Hello, World!");','+ console.log("Hello, Claude!");',"}"]},dim:!1,width:40,overrideTheme:W})))),g=w2.default.createElement(p,{flexDirection:"column",gap:1,paddingLeft:1},w2.default.createElement(u,{bold:!0},"Security notes:"),w2.default.createElement(p,{flexDirection:"column",width:70},w2.default.createElement(b8,null,w2.default.createElement(b8.Item,null,w2.default.createElement(u,null,"Claude Code is currently in research preview"),w2.default.createElement(u,{color:B.secondaryText,wrap:"wrap"},"This beta version may have limitations or unexpected behaviors.",w2.default.createElement(C6,null),"Run /bug at any time to report issues.",w2.default.createElement(C6,null))),w2.default.createElement(b8.Item,null,w2.default.createElement(u,null,"Claude can make mistakes"),w2.default.createElement(u,{color:B.secondaryText,wrap:"wrap"},"You should always review Claude's responses, especially when",w2.default.createElement(C6,null),"running code.",w2.default.createElement(C6,null))),w2.default.createElement(b8.Item,null,w2.default.createElement(u,null,"Due to prompt injection risks, only use it with code you trust"),w2.default.createElement(u,{color:B.secondaryText,wrap:"wrap"},"For more details see:",w2.default.createElement(C6,null),w2.default.createElement(z_,{url:"https://docs.anthropic.com/s/claude-code-security"}))))),w2.default.createElement(JH,null)),J=w2.default.createElement(p,{flexDirection:"column",gap:1,paddingLeft:1},w2.default.createElement(u,{bold:!0},"Using ",K4," effectively:"),w2.default.createElement(p,{flexDirection:"column",width:70},w2.default.createElement(b8,null,w2.default.createElement(b8.Item,null,w2.default.createElement(u,null,"Start in your project directory",w2.default.createElement(C6,null),w2.default.createElement(u,{color:B.secondaryText},"Files are automatically added to context when needed."),w2.default.createElement(C6,null))),w2.default.createElement(b8.Item,null,w2.default.createElement(u,null,"Use ",K4," as a development partner",w2.default.createElement(C6,null),w2.default.createElement(u,{color:B.secondaryText},"Get help with file analysis, editing, bash commands,",w2.default.createElement(C6,null),"and git history.",w2.default.createElement(C6,null)))),w2.default.createElement(b8.Item,null,w2.default.createElement(u,null,"Provide clear context",w2.default.createElement(C6,null),w2.default.createElement(u,{color:B.secondaryText},"Be as specific as you would with another engineer. ",w2.default.createElement(C6,null),"The better the context, the better the results. ",w2.default.createElement(C6,null))))),w2.default.createElement(p,null,w2.default.createElement(u,null,"For more details on ",K4,", see:",w2.default.createElement(C6,null),w2.default.createElement(z_,{url:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.README_URL})))),w2.default.createElement(JH,null)),K=w2.useMemo(()=>{return""},[]),Q=[];if(Q.push({id:"theme",component:F}),C)Q.push({id:"oauth",component:w2.default.createElement(os,{onDone:A})});if(K)Q.push({id:"api-key",component:w2.default.createElement($z2,{customApiKeyTruncated:K,onDone:A})});return Q.push({id:"security",component:g}),Q.push({id:"usage",component:J}),w2.default.createElement(p,{flexDirection:"column",gap:1},Q[d]?.id!=="oauth"&&w2.default.createElement(jJ1,null),w2.default.createElement(p,{flexDirection:"column",padding:0,gap:0},Q[d]?.component,_.pending&&w2.default.createElement(p,{padding:1},w2.default.createElement(u,{dimColor:!0},"Press ",_.keyName," again to exit"))))}function jJ1(){let I=r1();return w2.default.createElement(p,{borderColor:I.claude,borderStyle:"round",paddingX:1,width:o81},w2.default.createElement(u,null,w2.default.createElement(u,{color:I.claude},"✻")," Welcome to"," ",w2.default.createElement(u,{bold:!0},K4)," research preview!"))}function Oz2({message:I,title:d}){let G=d?`${d}: +${I}`:I;try{process.stdout.write(`\x1B]9; + +${G}\x07`)}catch{}}function mz2(){process.stdout.write("\x07")}async function es(I){switch(q2().preferredNotifChannel){case"iterm2":Oz2(I);break;case"terminal_bell":mz2();break;case"iterm2_with_bell":Oz2(I),mz2();break;case"notifications_disabled":break}}var lz2="Paste code here if prompted > ";function os({onDone:I}){let[d,G]=x2.useState({state:"idle"}),Z=r1(),[C,W]=x2.useState(""),[w,B]=x2.useState(0),[A]=x2.useState(()=>new lJ1),[V,X]=x2.useState(!1),[_,F]=x2.useState(!1),g=G9().columns-lz2.length-1;x2.useEffect(()=>{if(_)$6(),F(!1)},[_]),x2.useEffect(()=>{if(d.state==="about_to_retry")F(!0),setTimeout(()=>{G(d.nextState)},1000)},[d]),C4(async(S,P)=>{if(P.return){if(d.state==="idle")I0("tengu_oauth_start",{}),G({state:"ready_to_start"});else if(d.state==="success")I0("tengu_oauth_success",{}),await $6(),I();else if(d.state==="error"&&d.toRetry)W(""),G({state:"about_to_retry",nextState:d.toRetry})}});async function J(S,P){try{let[$,h]=S.split("#");if(!$||!h){G({state:"error",message:"Invalid code. Please make sure the full code was copied",toRetry:{state:"waiting_for_login",url:P}});return}I0("tengu_oauth_manual_entry",{}),A.processCallback({authorizationCode:$,state:h,useManualRedirect:!0})}catch($){X0($),G({state:"error",message:$.message,toRetry:{state:"waiting_for_login",url:P}})}}let K=x2.useCallback(async()=>{try{let S=await A.startOAuthFlow(async($)=>{G({state:"waiting_for_login",url:$}),setTimeout(()=>X(!0),3000)}).catch(($)=>{if($.message.includes("Token exchange failed"))G({state:"error",message:"Failed to exchange authorization code for access token. Please try again.",toRetry:{state:"ready_to_start"}}),I0("tengu_oauth_token_exchange_error",{error:$.message});else G({state:"error",message:$.message,toRetry:{state:"ready_to_start"}});throw $});G({state:"creating_api_key"});let P=await yz2(S.accessToken).catch(($)=>{throw G({state:"error",message:"Failed to create API key: "+$.message,toRetry:{state:"ready_to_start"}}),I0("tengu_oauth_api_key_error",{error:$.message}),$});if(P)G({state:"success",apiKey:P}),es({message:"Claude Code login successful"});else G({state:"error",message:"Unable to create API key. The server accepted the request but didn't return a key.",toRetry:{state:"ready_to_start"}}),I0("tengu_oauth_api_key_error",{error:"server_returned_no_key"})}catch(S){let P=S.message;I0("tengu_oauth_error",{error:P})}},[A,X]);x2.useEffect(()=>{if(d.state==="ready_to_start")K()},[d.state,K]);function Q(){switch(d.state){case"idle":return x2.default.createElement(p,{flexDirection:"column",gap:1},x2.default.createElement(u,{bold:!0},K4," is billed based on API usage through your Anthropic Console account."),x2.default.createElement(p,null,x2.default.createElement(u,null,"Pricing may evolve as we move towards general availability.")),x2.default.createElement(p,{marginTop:1},x2.default.createElement(u,{color:Z.permission},"Press ",x2.default.createElement(u,{bold:!0},"Enter")," to login to your Anthropic Console account…")));case"waiting_for_login":return x2.default.createElement(p,{flexDirection:"column",gap:1},!V&&x2.default.createElement(p,null,x2.default.createElement(Cu,null),x2.default.createElement(u,null,"Opening browser to sign in…")),V&&x2.default.createElement(p,null,x2.default.createElement(u,null,lz2),x2.default.createElement(mC,{value:C,onChange:W,onSubmit:(S)=>J(S,d.url),cursorOffset:w,onChangeCursorOffset:B,columns:g})));case"creating_api_key":return x2.default.createElement(p,{flexDirection:"column",gap:1},x2.default.createElement(p,null,x2.default.createElement(Cu,null),x2.default.createElement(u,null,"Creating API key for Claude Code…")));case"about_to_retry":return x2.default.createElement(p,{flexDirection:"column",gap:1},x2.default.createElement(u,{color:Z.permission},"Retrying…"));case"success":return x2.default.createElement(p,{flexDirection:"column",gap:1},x2.default.createElement(u,{color:Z.success},"Login successful. Press ",x2.default.createElement(u,{bold:!0},"Enter")," to continue…"));case"error":return x2.default.createElement(p,{flexDirection:"column",gap:1},x2.default.createElement(u,{color:Z.error},"OAuth error: ",d.message),d.toRetry&&x2.default.createElement(p,{marginTop:1},x2.default.createElement(u,{color:Z.permission},"Press ",x2.default.createElement(u,{bold:!0},"Enter")," to retry.")));default:return null}}let E={};if(!_)E.header=x2.default.createElement(p,{key:"header",flexDirection:"column",gap:1},x2.default.createElement(jJ1,null),x2.default.createElement(p,{paddingBottom:1,paddingLeft:1},x2.default.createElement(Pz2,null)));if(d.state==="waiting_for_login"&&V)E.urlToCopy=x2.default.createElement(p,{flexDirection:"column",key:"urlToCopy",gap:1,paddingBottom:1},x2.default.createElement(p,{paddingX:1},x2.default.createElement(u,{dimColor:!0},"Browser didn't open? Use the url below to sign in:")),x2.default.createElement(p,{width:1000},x2.default.createElement(u,{dimColor:!0},d.url)));return x2.default.createElement(p,{flexDirection:"column",gap:1},x2.default.createElement(DQ,{items:Object.keys(E)},(S)=>E[S]),x2.default.createElement(p,{paddingLeft:1,flexDirection:"column",gap:1},Q()))}var bz2=()=>({type:"local-jsx",name:"login",description:Tz2()?"Switch Anthropic accounts":"Sign in with your Anthropic account",isEnabled:!0,isHidden:!1,async call(I,d){return await $6(),c7.createElement(zW9,{onDone:async()=>{Iu(d),I()}})},userFacingName(){return"login"}});function zW9(I){let d=P6(I.onDone);return c7.createElement(p,{flexDirection:"column"},c7.createElement(os,{onDone:I.onDone}),c7.createElement(p,{marginLeft:3},c7.createElement(u,{dimColor:!0},d.pending?c7.createElement(c7.Fragment,null,"Press ",d.keyName," again to exit"):"")))}var kJ1=J1(u1(),1);var hz2={type:"local-jsx",name:"logout",description:"Sign out from your Anthropic account",isEnabled:!0,isHidden:!1,async call(){await $6();let I=q2();if(I.oauthAccount=void 0,I.primaryApiKey=void 0,I.hasCompletedOnboarding=!1,I.customApiKeyResponses?.approved)I.customApiKeyResponses.approved=[];p4(I);let d=kJ1.createElement(u,null,"Successfully logged out from your Anthropic account.");return setTimeout(()=>{process.exit(0)},200),d},userFacingName(){return"logout"}};var xJ1=J1(u1(),1);var jz2={type:"local-jsx",name:"onboarding",description:"[ANT-ONLY] Run through the onboarding flow",isEnabled:!1,isHidden:!1,async call(I,d){await $6();let G=q2();return p4({...G,theme:"dark"}),xJ1.createElement(ss,{onDone:async()=>{Iu(d),I()}})},userFacingName(){return"onboarding"}};var kz2={type:"prompt",name:"pr-comments",description:"Get comments from a GitHub pull request",progressMessage:"fetching PR comments",isEnabled:!0,isHidden:!1,userFacingName(){return"pr-comments"},async getPromptForCommand(I){return[{role:"user",content:[{type:"text",text:`You are an AI assistant integrated into a git-based version control system. Your task is to fetch and display comments from a GitHub pull request. + +Follow these steps: + +1. Use \`gh pr view --json number,headRepository\` to get the PR number and repository info +2. Use \`gh api /repos/{owner}/{repo}/issues/{number}/comments\` to get PR-level comments +3. Use \`gh api /repos/{owner}/{repo}/pulls/{number}/comments\` to get review comments. Pay particular attention to the following fields: \`body\`, \`diff_hunk\`, \`path\`, \`line\`, etc. If the comment references some code, consider fetching it using eg \`gh api /repos/{owner}/{repo}/contents/{path}?ref={branch} | jq .content -r | base64 -d\` +4. Parse and format all comments in a readable way +5. Return ONLY the formatted comments, with no additional text + +Format the comments as: + +## Comments + +[For each comment thread:] +- @author file.ts#line: + \`\`\`diff + [diff_hunk from the API response] + \`\`\` + > quoted comment text + + [any replies indented] + +If there are no comments, return "No comments found." + +Remember: +1. Only show the actual comments, no explanatory text +2. Include both PR-level and code review comments +3. Preserve the threading/nesting of comment replies +4. Show the file and line number context for code review comments +5. Use jq to parse the JSON responses from the GitHub API + +${I?"Additional user input: "+I:""} +`}]}]}};var QW9={description:"Show release notes for the current or specified version",isEnabled:!1,isHidden:!1,name:"release-notes",userFacingName(){return"release-notes"},type:"local",async call(I){let d={ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,G=I?I.trim():d,Z=Xk[G];if(!Z||Z.length===0)return`No release notes available for version ${G}.`;let C=`Release notes for version ${G}:`,W=Z.map((w)=>`• ${w}`).join(` +`);return`${C} + +${W}`}},xz2=QW9;var ts={type:"prompt",name:"review",description:"Review a pull request",isEnabled:!0,isHidden:!1,progressMessage:"reviewing pull request",userFacingName(){return"review"},async getPromptForCommand(I){return[{role:"user",content:[{type:"text",text:` + You are an expert code reviewer. Follow these steps: + + 1. If no PR number is provided in the args, use ${G5.name}("gh pr list") to show open PRs + 2. If a PR number is provided, use ${G5.name}("gh pr view ") to get PR details + 3. Use ${G5.name}("gh pr diff ") to get the diff + 4. Analyze the changes and provide a thorough code review that includes: + - Overview of what the PR does + - Analysis of code quality and style + - Specific suggestions for improvements + - Any potential issues or risks + + Keep your review concise but thorough. Focus on: + - Code correctness + - Following project conventions + - Performance implications + - Test coverage + - Security considerations + + Format your review with clear sections and bullet points. + + PR number: ${I} + `}]}]}};var vW9=J1(u1(),1);var RW9=J1(u1(),1);var fW9=J1(u1(),1);import{existsSync as WQ2,readFileSync as wQ2,writeFileSync as BQ2}from"fs";import{join as AQ2}from"path";var Yu="2024-11-05",Go=[Yu,"2024-10-07"],Zo="2.0",cz2=s.union([s.string(),s.number().int()]),pz2=s.string(),fW=s.object({_meta:s.optional(s.object({progressToken:s.optional(cz2)}).passthrough())}).passthrough(),HG=s.object({method:s.string(),params:s.optional(fW)}),_u=s.object({_meta:s.optional(s.object({}).passthrough())}).passthrough(),lB=s.object({method:s.string(),params:s.optional(_u)}),qW=s.object({_meta:s.optional(s.object({}).passthrough())}).passthrough(),Co=s.union([s.string(),s.number().int()]),EW9=s.object({jsonrpc:s.literal(Zo),id:Co}).merge(HG).strict(),MW9=s.object({jsonrpc:s.literal(Zo)}).merge(lB).strict(),SW9=s.object({jsonrpc:s.literal(Zo),id:Co,result:qW}).strict(),WK;(function(I){I[I.ConnectionClosed=-32000]="ConnectionClosed",I[I.RequestTimeout=-32001]="RequestTimeout",I[I.ParseError=-32700]="ParseError",I[I.InvalidRequest=-32600]="InvalidRequest",I[I.MethodNotFound=-32601]="MethodNotFound",I[I.InvalidParams=-32602]="InvalidParams",I[I.InternalError=-32603]="InternalError"})(WK||(WK={}));var LW9=s.object({jsonrpc:s.literal(Zo),id:Co,error:s.object({code:s.number().int(),message:s.string(),data:s.optional(s.unknown())})}).strict(),Wo=s.union([EW9,MW9,SW9,LW9]),HX=qW.strict(),wo=lB.extend({method:s.literal("notifications/cancelled"),params:_u.extend({requestId:Co,reason:s.string().optional()})}),iz2=s.object({name:s.string(),version:s.string()}).passthrough(),yW9=s.object({experimental:s.optional(s.object({}).passthrough()),sampling:s.optional(s.object({}).passthrough()),roots:s.optional(s.object({listChanged:s.optional(s.boolean())}).passthrough())}).passthrough(),pJ1=HG.extend({method:s.literal("initialize"),params:fW.extend({protocolVersion:s.string(),capabilities:yW9,clientInfo:iz2})}),PW9=s.object({experimental:s.optional(s.object({}).passthrough()),logging:s.optional(s.object({}).passthrough()),prompts:s.optional(s.object({listChanged:s.optional(s.boolean())}).passthrough()),resources:s.optional(s.object({subscribe:s.optional(s.boolean()),listChanged:s.optional(s.boolean())}).passthrough()),tools:s.optional(s.object({listChanged:s.optional(s.boolean())}).passthrough())}).passthrough(),iJ1=qW.extend({protocolVersion:s.string(),capabilities:PW9,serverInfo:iz2,instructions:s.optional(s.string())}),nJ1=lB.extend({method:s.literal("notifications/initialized")}),Bo=HG.extend({method:s.literal("ping")}),$W9=s.object({progress:s.number(),total:s.optional(s.number())}).passthrough(),Ao=lB.extend({method:s.literal("notifications/progress"),params:_u.merge($W9).extend({progressToken:cz2})}),Vo=HG.extend({params:fW.extend({cursor:s.optional(pz2)}).optional()}),Xo=qW.extend({nextCursor:s.optional(pz2)}),nz2=s.object({uri:s.string(),mimeType:s.optional(s.string())}).passthrough(),rz2=nz2.extend({text:s.string()}),az2=nz2.extend({blob:s.string().base64()}),uW9=s.object({uri:s.string(),name:s.string(),description:s.optional(s.string()),mimeType:s.optional(s.string())}).passthrough(),TW9=s.object({uriTemplate:s.string(),name:s.string(),description:s.optional(s.string()),mimeType:s.optional(s.string())}).passthrough(),OW9=Vo.extend({method:s.literal("resources/list")}),rJ1=Xo.extend({resources:s.array(uW9)}),mW9=Vo.extend({method:s.literal("resources/templates/list")}),aJ1=Xo.extend({resourceTemplates:s.array(TW9)}),lW9=HG.extend({method:s.literal("resources/read"),params:fW.extend({uri:s.string()})}),sJ1=qW.extend({contents:s.array(s.union([rz2,az2]))}),bW9=lB.extend({method:s.literal("notifications/resources/list_changed")}),hW9=HG.extend({method:s.literal("resources/subscribe"),params:fW.extend({uri:s.string()})}),jW9=HG.extend({method:s.literal("resources/unsubscribe"),params:fW.extend({uri:s.string()})}),kW9=lB.extend({method:s.literal("notifications/resources/updated"),params:_u.extend({uri:s.string()})}),xW9=s.object({name:s.string(),description:s.optional(s.string()),required:s.optional(s.boolean())}).passthrough(),cW9=s.object({name:s.string(),description:s.optional(s.string()),arguments:s.optional(s.array(xW9))}).passthrough(),pW9=Vo.extend({method:s.literal("prompts/list")}),Du=Xo.extend({prompts:s.array(cW9)}),iW9=HG.extend({method:s.literal("prompts/get"),params:fW.extend({name:s.string(),arguments:s.optional(s.record(s.string()))})}),Yo=s.object({type:s.literal("text"),text:s.string()}).passthrough(),_o=s.object({type:s.literal("image"),data:s.string().base64(),mimeType:s.string()}).passthrough(),sz2=s.object({type:s.literal("resource"),resource:s.union([rz2,az2])}).passthrough(),nW9=s.object({role:s.enum(["user","assistant"]),content:s.union([Yo,_o,sz2])}).passthrough(),oJ1=qW.extend({description:s.optional(s.string()),messages:s.array(nW9)}),rW9=lB.extend({method:s.literal("notifications/prompts/list_changed")}),aW9=s.object({name:s.string(),description:s.optional(s.string()),inputSchema:s.object({type:s.literal("object"),properties:s.optional(s.object({}).passthrough())}).passthrough()}).passthrough(),eJ1=Vo.extend({method:s.literal("tools/list")}),Hu=Xo.extend({tools:s.array(aW9)}),IU=qW.extend({content:s.array(s.union([Yo,_o,sz2])),isError:s.boolean().default(!1).optional()}),hU3=IU.or(qW.extend({toolResult:s.unknown()})),tJ1=HG.extend({method:s.literal("tools/call"),params:fW.extend({name:s.string(),arguments:s.optional(s.record(s.unknown()))})}),sW9=lB.extend({method:s.literal("notifications/tools/list_changed")}),oz2=s.enum(["debug","info","notice","warning","error","critical","alert","emergency"]),oW9=HG.extend({method:s.literal("logging/setLevel"),params:fW.extend({level:oz2})}),eW9=lB.extend({method:s.literal("notifications/message"),params:_u.extend({level:oz2,logger:s.optional(s.string()),data:s.unknown()})}),tW9=s.object({name:s.string().optional()}).passthrough(),Iw9=s.object({hints:s.optional(s.array(tW9)),costPriority:s.optional(s.number().min(0).max(1)),speedPriority:s.optional(s.number().min(0).max(1)),intelligencePriority:s.optional(s.number().min(0).max(1))}).passthrough(),dw9=s.object({role:s.enum(["user","assistant"]),content:s.union([Yo,_o])}).passthrough(),Gw9=HG.extend({method:s.literal("sampling/createMessage"),params:fW.extend({messages:s.array(dw9),systemPrompt:s.optional(s.string()),includeContext:s.optional(s.enum(["none","thisServer","allServers"])),temperature:s.optional(s.number()),maxTokens:s.number().int(),stopSequences:s.optional(s.array(s.string())),metadata:s.optional(s.object({}).passthrough()),modelPreferences:s.optional(Iw9)})}),IK1=qW.extend({model:s.string(),stopReason:s.optional(s.enum(["endTurn","stopSequence","maxTokens"]).or(s.string())),role:s.enum(["user","assistant"]),content:s.discriminatedUnion("type",[Yo,_o])}),Zw9=s.object({type:s.literal("ref/resource"),uri:s.string()}).passthrough(),Cw9=s.object({type:s.literal("ref/prompt"),name:s.string()}).passthrough(),Ww9=HG.extend({method:s.literal("completion/complete"),params:fW.extend({ref:s.union([Cw9,Zw9]),argument:s.object({name:s.string(),value:s.string()}).passthrough()})}),dK1=qW.extend({completion:s.object({values:s.array(s.string()).max(100),total:s.optional(s.number().int()),hasMore:s.optional(s.boolean())}).passthrough()}),ww9=s.object({uri:s.string().startsWith("file://"),name:s.optional(s.string())}).passthrough(),Bw9=HG.extend({method:s.literal("roots/list")}),GK1=qW.extend({roots:s.array(ww9)}),Aw9=lB.extend({method:s.literal("notifications/roots/list_changed")}),jU3=s.union([Bo,pJ1,Ww9,oW9,iW9,pW9,OW9,mW9,lW9,hW9,jW9,tJ1,eJ1]),kU3=s.union([wo,Ao,nJ1,Aw9]),xU3=s.union([HX,IK1,GK1]),cU3=s.union([Bo,Gw9,Bw9]),pU3=s.union([wo,Ao,eW9,kW9,bW9,sW9,rW9]),iU3=s.union([HX,iJ1,dK1,oJ1,Du,rJ1,aJ1,sJ1,IU,Hu]);class Fu extends Error{constructor(I,d,G){super(`MCP error ${I}: ${d}`);this.code=I,this.data=G}}var Vw9=60000;class gu{constructor(I){this._options=I,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this.setNotificationHandler(wo,(d)=>{let G=this._requestHandlerAbortControllers.get(d.params.requestId);G===null||G===void 0||G.abort(d.params.reason)}),this.setNotificationHandler(Ao,(d)=>{this._onprogress(d)}),this.setRequestHandler(Bo,(d)=>({}))}async connect(I){this._transport=I,this._transport.onclose=()=>{this._onclose()},this._transport.onerror=(d)=>{this._onerror(d)},this._transport.onmessage=(d)=>{if(!("method"in d))this._onresponse(d);else if("id"in d)this._onrequest(d);else this._onnotification(d)},await this._transport.start()}_onclose(){var I;let d=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._transport=void 0,(I=this.onclose)===null||I===void 0||I.call(this);let G=new Fu(WK.ConnectionClosed,"Connection closed");for(let Z of d.values())Z(G)}_onerror(I){var d;(d=this.onerror)===null||d===void 0||d.call(this,I)}_onnotification(I){var d;let G=(d=this._notificationHandlers.get(I.method))!==null&&d!==void 0?d:this.fallbackNotificationHandler;if(G===void 0)return;Promise.resolve().then(()=>G(I)).catch((Z)=>this._onerror(new Error(`Uncaught error in notification handler: ${Z}`)))}_onrequest(I){var d,G;let Z=(d=this._requestHandlers.get(I.method))!==null&&d!==void 0?d:this.fallbackRequestHandler;if(Z===void 0){(G=this._transport)===null||G===void 0||G.send({jsonrpc:"2.0",id:I.id,error:{code:WK.MethodNotFound,message:"Method not found"}}).catch((W)=>this._onerror(new Error(`Failed to send an error response: ${W}`)));return}let C=new AbortController;this._requestHandlerAbortControllers.set(I.id,C),Promise.resolve().then(()=>Z(I,{signal:C.signal})).then((W)=>{var w;if(C.signal.aborted)return;return(w=this._transport)===null||w===void 0?void 0:w.send({result:W,jsonrpc:"2.0",id:I.id})},(W)=>{var w,B;if(C.signal.aborted)return;return(w=this._transport)===null||w===void 0?void 0:w.send({jsonrpc:"2.0",id:I.id,error:{code:Number.isSafeInteger(W.code)?W.code:WK.InternalError,message:(B=W.message)!==null&&B!==void 0?B:"Internal error"}})}).catch((W)=>this._onerror(new Error(`Failed to send response: ${W}`))).finally(()=>{this._requestHandlerAbortControllers.delete(I.id)})}_onprogress(I){let{progressToken:d,...G}=I.params,Z=this._progressHandlers.get(Number(d));if(Z===void 0){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(I)}`));return}Z(G)}_onresponse(I){let d=I.id,G=this._responseHandlers.get(Number(d));if(G===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(I)}`));return}if(this._responseHandlers.delete(Number(d)),this._progressHandlers.delete(Number(d)),"result"in I)G(I);else{let Z=new Fu(I.error.code,I.error.message,I.error.data);G(Z)}}get transport(){return this._transport}async close(){var I;await((I=this._transport)===null||I===void 0?void 0:I.close())}request(I,d,G){return new Promise((Z,C)=>{var W,w,B,A;if(!this._transport){C(new Error("Not connected"));return}if(((W=this._options)===null||W===void 0?void 0:W.enforceStrictCapabilities)===!0)this.assertCapabilityForMethod(I.method);(w=G===null||G===void 0?void 0:G.signal)===null||w===void 0||w.throwIfAborted();let V=this._requestMessageId++,X={...I,jsonrpc:"2.0",id:V};if(G===null||G===void 0?void 0:G.onprogress)this._progressHandlers.set(V,G.onprogress),X.params={...I.params,_meta:{progressToken:V}};let _=void 0;this._responseHandlers.set(V,(J)=>{var K;if(_!==void 0)clearTimeout(_);if((K=G===null||G===void 0?void 0:G.signal)===null||K===void 0?void 0:K.aborted)return;if(J instanceof Error)return C(J);try{let Q=d.parse(J.result);Z(Q)}catch(Q){C(Q)}});let F=(J)=>{var K;this._responseHandlers.delete(V),this._progressHandlers.delete(V),(K=this._transport)===null||K===void 0||K.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:V,reason:String(J)}}).catch((Q)=>this._onerror(new Error(`Failed to send cancellation: ${Q}`))),C(J)};(B=G===null||G===void 0?void 0:G.signal)===null||B===void 0||B.addEventListener("abort",()=>{var J;if(_!==void 0)clearTimeout(_);F((J=G===null||G===void 0?void 0:G.signal)===null||J===void 0?void 0:J.reason)});let g=(A=G===null||G===void 0?void 0:G.timeout)!==null&&A!==void 0?A:Vw9;_=setTimeout(()=>F(new Fu(WK.RequestTimeout,"Request timed out",{timeout:g})),g),this._transport.send(X).catch((J)=>{if(_!==void 0)clearTimeout(_);C(J)})})}async notification(I){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(I.method);let d={...I,jsonrpc:"2.0"};await this._transport.send(d)}setRequestHandler(I,d){let G=I.shape.method.value;this.assertRequestHandlerCapability(G),this._requestHandlers.set(G,(Z,C)=>Promise.resolve(d(I.parse(Z),C)))}removeRequestHandler(I){this._requestHandlers.delete(I)}assertCanSetRequestHandler(I){if(this._requestHandlers.has(I))throw new Error(`A request handler for ${I} already exists, which would be overridden`)}setNotificationHandler(I,d){this._notificationHandlers.set(I.shape.method.value,(G)=>Promise.resolve(d(I.parse(G))))}removeNotificationHandler(I){this._notificationHandlers.delete(I)}}function Do(I,d){return Object.entries(d).reduce((G,[Z,C])=>{if(C&&typeof C==="object")G[Z]=G[Z]?{...G[Z],...C}:C;else G[Z]=C;return G},{...I})}class ZK1 extends gu{constructor(I,d){var G;super(d);this._clientInfo=I,this._capabilities=(G=d===null||d===void 0?void 0:d.capabilities)!==null&&G!==void 0?G:{}}registerCapabilities(I){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Do(this._capabilities,I)}assertCapability(I,d){var G;if(!((G=this._serverCapabilities)===null||G===void 0?void 0:G[I]))throw new Error(`Server does not support ${I} (required for ${d})`)}async connect(I){await super.connect(I);try{let d=await this.request({method:"initialize",params:{protocolVersion:Yu,capabilities:this._capabilities,clientInfo:this._clientInfo}},iJ1);if(d===void 0)throw new Error(`Server sent invalid initialize result: ${d}`);if(!Go.includes(d.protocolVersion))throw new Error(`Server's protocol version is not supported: ${d.protocolVersion}`);this._serverCapabilities=d.capabilities,this._serverVersion=d.serverInfo,this._instructions=d.instructions,await this.notification({method:"notifications/initialized"})}catch(d){throw this.close(),d}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod(I){var d,G,Z,C,W;switch(I){case"logging/setLevel":if(!((d=this._serverCapabilities)===null||d===void 0?void 0:d.logging))throw new Error(`Server does not support logging (required for ${I})`);break;case"prompts/get":case"prompts/list":if(!((G=this._serverCapabilities)===null||G===void 0?void 0:G.prompts))throw new Error(`Server does not support prompts (required for ${I})`);break;case"resources/list":case"resources/templates/list":case"resources/read":case"resources/subscribe":case"resources/unsubscribe":if(!((Z=this._serverCapabilities)===null||Z===void 0?void 0:Z.resources))throw new Error(`Server does not support resources (required for ${I})`);if(I==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw new Error(`Server does not support resource subscriptions (required for ${I})`);break;case"tools/call":case"tools/list":if(!((C=this._serverCapabilities)===null||C===void 0?void 0:C.tools))throw new Error(`Server does not support tools (required for ${I})`);break;case"completion/complete":if(!((W=this._serverCapabilities)===null||W===void 0?void 0:W.prompts))throw new Error(`Server does not support prompts (required for ${I})`);break;case"initialize":break;case"ping":break}}assertNotificationCapability(I){var d;switch(I){case"notifications/roots/list_changed":if(!((d=this._capabilities.roots)===null||d===void 0?void 0:d.listChanged))throw new Error(`Client does not support roots list changed notifications (required for ${I})`);break;case"notifications/initialized":break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(I){switch(I){case"sampling/createMessage":if(!this._capabilities.sampling)throw new Error(`Client does not support sampling capability (required for ${I})`);break;case"roots/list":if(!this._capabilities.roots)throw new Error(`Client does not support roots capability (required for ${I})`);break;case"ping":break}}async ping(I){return this.request({method:"ping"},HX,I)}async complete(I,d){return this.request({method:"completion/complete",params:I},dK1,d)}async setLoggingLevel(I,d){return this.request({method:"logging/setLevel",params:{level:I}},HX,d)}async getPrompt(I,d){return this.request({method:"prompts/get",params:I},oJ1,d)}async listPrompts(I,d){return this.request({method:"prompts/list",params:I},Du,d)}async listResources(I,d){return this.request({method:"resources/list",params:I},rJ1,d)}async listResourceTemplates(I,d){return this.request({method:"resources/templates/list",params:I},aJ1,d)}async readResource(I,d){return this.request({method:"resources/read",params:I},sJ1,d)}async subscribeResource(I,d){return this.request({method:"resources/subscribe",params:I},HX,d)}async unsubscribeResource(I,d){return this.request({method:"resources/unsubscribe",params:I},HX,d)}async callTool(I,d=IU,G){return this.request({method:"tools/call",params:I},d,G)}async listTools(I,d){return this.request({method:"tools/list",params:I},Hu,d)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}import{spawn as Yw9}from"node:child_process";import Fo from"node:process";class Ju{append(I){this._buffer=this._buffer?Buffer.concat([this._buffer,I]):I}readMessage(){if(!this._buffer)return null;let I=this._buffer.indexOf(` +`);if(I===-1)return null;let d=this._buffer.toString("utf8",0,I);return this._buffer=this._buffer.subarray(I+1),Xw9(d)}clear(){this._buffer=void 0}}function Xw9(I){return Wo.parse(JSON.parse(I))}function Ho(I){return JSON.stringify(I)+` +`}var _w9=Fo.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function Dw9(){let I={};for(let d of _w9){let G=Fo.env[d];if(G===void 0)continue;if(G.startsWith("()"))continue;I[d]=G}return I}class CK1{constructor(I){this._abortController=new AbortController,this._readBuffer=new Ju,this._serverParams=I}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((I,d)=>{var G,Z,C,W,w,B;this._process=Yw9(this._serverParams.command,(G=this._serverParams.args)!==null&&G!==void 0?G:[],{env:(Z=this._serverParams.env)!==null&&Z!==void 0?Z:Dw9(),stdio:["pipe","pipe",(C=this._serverParams.stderr)!==null&&C!==void 0?C:"inherit"],shell:!1,signal:this._abortController.signal,windowsHide:Fo.platform==="win32"&&Hw9()}),this._process.on("error",(A)=>{var V,X;if(A.name==="AbortError"){(V=this.onclose)===null||V===void 0||V.call(this);return}d(A),(X=this.onerror)===null||X===void 0||X.call(this,A)}),this._process.on("spawn",()=>{I()}),this._process.on("close",(A)=>{var V;this._process=void 0,(V=this.onclose)===null||V===void 0||V.call(this)}),(W=this._process.stdin)===null||W===void 0||W.on("error",(A)=>{var V;(V=this.onerror)===null||V===void 0||V.call(this,A)}),(w=this._process.stdout)===null||w===void 0||w.on("data",(A)=>{this._readBuffer.append(A),this.processReadBuffer()}),(B=this._process.stdout)===null||B===void 0||B.on("error",(A)=>{var V;(V=this.onerror)===null||V===void 0||V.call(this,A)})})}get stderr(){var I,d;return(d=(I=this._process)===null||I===void 0?void 0:I.stderr)!==null&&d!==void 0?d:null}processReadBuffer(){var I,d;while(!0)try{let G=this._readBuffer.readMessage();if(G===null)break;(I=this.onmessage)===null||I===void 0||I.call(this,G)}catch(G){(d=this.onerror)===null||d===void 0||d.call(this,G)}}async close(){this._abortController.abort(),this._process=void 0,this._readBuffer.clear()}send(I){return new Promise((d)=>{var G;if(!((G=this._process)===null||G===void 0?void 0:G.stdin))throw new Error("Not connected");let Z=Ho(I);if(this._process.stdin.write(Z))d();else this._process.stdin.once("drain",d)})}}function Hw9(){return"type"in Fo}var Fw9=Object.defineProperty,gw9=(I,d,G)=>(d in I)?Fw9(I,d,{enumerable:!0,configurable:!0,writable:!0,value:G}):I[d]=G,go=(I,d,G)=>gw9(I,typeof d!="symbol"?d+"":d,G);class wK1 extends Error{constructor(I,d){super(I),go(this,"type"),go(this,"field"),go(this,"value"),go(this,"line"),this.name="ParseError",this.type=d.type,this.field=d.field,this.value=d.value,this.line=d.line}}function WK1(I){}function ez2(I){let{onEvent:d=WK1,onError:G=WK1,onRetry:Z=WK1,onComment:C}=I,W="",w=!0,B,A="",V="";function X(K){let Q=w?K.replace(/^\xEF\xBB\xBF/,""):K,[E,S]=Jw9(`${W}${Q}`);for(let P of E)_(P);W=S,w=!1}function _(K){if(K===""){g();return}if(K.startsWith(":")){C&&C(K.slice(K.startsWith(": ")?2:1));return}let Q=K.indexOf(":");if(Q!==-1){let E=K.slice(0,Q),S=K[Q+1]===" "?2:1,P=K.slice(Q+S);F(E,P,K);return}F(K,"",K)}function F(K,Q,E){switch(K){case"event":V=Q;break;case"data":A=`${A}${Q} +`;break;case"id":B=Q.includes("\x00")?void 0:Q;break;case"retry":/^\d+$/.test(Q)?Z(parseInt(Q,10)):G(new wK1(`Invalid \`retry\` value: "${Q}"`,{type:"invalid-retry",value:Q,line:E}));break;default:G(new wK1(`Unknown field "${K.length>20?`${K.slice(0,20)}…`:K}"`,{type:"unknown-field",field:K,value:Q,line:E}));break}}function g(){A.length>0&&d({id:B,event:V||void 0,data:A.endsWith(` +`)?A.slice(0,-1):A}),B=void 0,A="",V=""}function J(K={}){W&&K.consume&&_(W),B=void 0,A="",V="",W=""}return{feed:X,reset:J}}function Jw9(I){let d=[],G="",Z=I.length;for(let C=0;C{throw TypeError(I)},FK1=(I,d,G)=>d.has(I)||IQ2("Cannot "+G),t4=(I,d,G)=>(FK1(I,d,"read from private field"),G?G.call(I):d.get(I)),o6=(I,d,G)=>d.has(I)?IQ2("Cannot add the same private member more than once"):d instanceof WeakSet?d.add(I):d.set(I,G),V3=(I,d,G,Z)=>(FK1(I,d,"write to private field"),d.set(I,G),G),FX=(I,d,G)=>(FK1(I,d,"access private method"),G),Jd,wK,dU,Jo,Ko,zu,CU,Qu,KH,GU,WU,ZU,Ku,RW,AK1,VK1,XK1,tz2,YK1,_K1,Nu,DK1,HK1;class wU extends EventTarget{constructor(I,d){var G,Z;super(),o6(this,RW),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,o6(this,Jd),o6(this,wK),o6(this,dU),o6(this,Jo),o6(this,Ko),o6(this,zu),o6(this,CU),o6(this,Qu,null),o6(this,KH),o6(this,GU),o6(this,WU,null),o6(this,ZU,null),o6(this,Ku,null),o6(this,VK1,async(C)=>{var W;t4(this,GU).reset();let{body:w,redirected:B,status:A,headers:V}=C;if(A===204){FX(this,RW,Nu).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(B?V3(this,dU,new URL(C.url)):V3(this,dU,void 0),A!==200){FX(this,RW,Nu).call(this,`Non-200 status code (${A})`,A);return}if(!(V.get("content-type")||"").startsWith("text/event-stream")){FX(this,RW,Nu).call(this,'Invalid content type, expected "text/event-stream"',A);return}if(t4(this,Jd)===this.CLOSED)return;V3(this,Jd,this.OPEN);let X=new Event("open");if((W=t4(this,Ku))==null||W.call(this,X),this.dispatchEvent(X),typeof w!="object"||!w||!("getReader"in w)){FX(this,RW,Nu).call(this,"Invalid response body, expected a web ReadableStream",A),this.close();return}let _=new TextDecoder,F=w.getReader(),g=!0;do{let{done:J,value:K}=await F.read();K&&t4(this,GU).feed(_.decode(K,{stream:!J})),J&&(g=!1,t4(this,GU).reset(),FX(this,RW,DK1).call(this))}while(g)}),o6(this,XK1,(C)=>{V3(this,KH,void 0),!(C.name==="AbortError"||C.type==="aborted")&&FX(this,RW,DK1).call(this)}),o6(this,YK1,(C)=>{typeof C.id=="string"&&V3(this,Qu,C.id);let W=new MessageEvent(C.event||"message",{data:C.data,origin:t4(this,dU)?t4(this,dU).origin:t4(this,wK).origin,lastEventId:C.id||""});t4(this,ZU)&&(!C.event||C.event==="message")&&t4(this,ZU).call(this,W),this.dispatchEvent(W)}),o6(this,_K1,(C)=>{V3(this,zu,C)}),o6(this,HK1,()=>{V3(this,CU,void 0),t4(this,Jd)===this.CONNECTING&&FX(this,RW,AK1).call(this)});try{if(I instanceof URL)V3(this,wK,I);else if(typeof I=="string")V3(this,wK,new URL(I,Nw9()));else throw new Error("Invalid URL")}catch{throw Kw9("An invalid or illegal string was specified")}V3(this,GU,ez2({onEvent:t4(this,YK1),onRetry:t4(this,_K1)})),V3(this,Jd,this.CONNECTING),V3(this,zu,3000),V3(this,Ko,(G=d==null?void 0:d.fetch)!=null?G:globalThis.fetch),V3(this,Jo,(Z=d==null?void 0:d.withCredentials)!=null?Z:!1),FX(this,RW,AK1).call(this)}get readyState(){return t4(this,Jd)}get url(){return t4(this,wK).href}get withCredentials(){return t4(this,Jo)}get onerror(){return t4(this,WU)}set onerror(I){V3(this,WU,I)}get onmessage(){return t4(this,ZU)}set onmessage(I){V3(this,ZU,I)}get onopen(){return t4(this,Ku)}set onopen(I){V3(this,Ku,I)}addEventListener(I,d,G){let Z=d;super.addEventListener(I,Z,G)}removeEventListener(I,d,G){let Z=d;super.removeEventListener(I,Z,G)}close(){t4(this,CU)&&clearTimeout(t4(this,CU)),t4(this,Jd)!==this.CLOSED&&(t4(this,KH)&&t4(this,KH).abort(),V3(this,Jd,this.CLOSED),V3(this,KH,void 0))}}Jd=new WeakMap,wK=new WeakMap,dU=new WeakMap,Jo=new WeakMap,Ko=new WeakMap,zu=new WeakMap,CU=new WeakMap,Qu=new WeakMap,KH=new WeakMap,GU=new WeakMap,WU=new WeakMap,ZU=new WeakMap,Ku=new WeakMap,RW=new WeakSet,AK1=function(){V3(this,Jd,this.CONNECTING),V3(this,KH,new AbortController),t4(this,Ko)(t4(this,wK),FX(this,RW,tz2).call(this)).then(t4(this,VK1)).catch(t4(this,XK1))},VK1=new WeakMap,XK1=new WeakMap,tz2=function(){var I;let d={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...t4(this,Qu)?{"Last-Event-ID":t4(this,Qu)}:void 0},cache:"no-store",signal:(I=t4(this,KH))==null?void 0:I.signal};return"window"in globalThis&&(d.credentials=this.withCredentials?"include":"same-origin"),d},YK1=new WeakMap,_K1=new WeakMap,Nu=function(I,d){var G;t4(this,Jd)!==this.CLOSED&&V3(this,Jd,this.CLOSED);let Z=new BK1("error");Z.code=d,Z.message=I,(G=t4(this,WU))==null||G.call(this,Z),this.dispatchEvent(Z)},DK1=function(){var I;if(t4(this,Jd)===this.CLOSED)return;V3(this,Jd,this.CONNECTING);let d=new BK1("error");(I=t4(this,WU))==null||I.call(this,d),this.dispatchEvent(d),V3(this,CU,setTimeout(t4(this,HK1),t4(this,zu)))},HK1=new WeakMap,wU.CONNECTING=0,wU.OPEN=1,wU.CLOSED=2;function Nw9(){let I="document"in globalThis?globalThis.document:void 0;return I&&typeof I=="object"&&"baseURI"in I&&typeof I.baseURI=="string"?I.baseURI:void 0}class dQ2 extends Error{constructor(I,d,G){super(`SSE error: ${d}`);this.code=I,this.event=G}}class gK1{constructor(I,d){this._url=I,this._eventSourceInit=d===null||d===void 0?void 0:d.eventSourceInit,this._requestInit=d===null||d===void 0?void 0:d.requestInit}start(){if(this._eventSource)throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((I,d)=>{this._eventSource=new wU(this._url.href,this._eventSourceInit),this._abortController=new AbortController,this._eventSource.onerror=(G)=>{var Z;let C=new dQ2(G.code,G.message,G);d(C),(Z=this.onerror)===null||Z===void 0||Z.call(this,C)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",(G)=>{var Z;let C=G;try{if(this._endpoint=new URL(C.data,this._url),this._endpoint.origin!==this._url.origin)throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(W){d(W),(Z=this.onerror)===null||Z===void 0||Z.call(this,W),this.close();return}I()}),this._eventSource.onmessage=(G)=>{var Z,C;let W=G,w;try{w=Wo.parse(JSON.parse(W.data))}catch(B){(Z=this.onerror)===null||Z===void 0||Z.call(this,B);return}(C=this.onmessage)===null||C===void 0||C.call(this,w)}})}async close(){var I,d,G;(I=this._abortController)===null||I===void 0||I.abort(),(d=this._eventSource)===null||d===void 0||d.close(),(G=this.onclose)===null||G===void 0||G.call(this)}async send(I){var d,G,Z;if(!this._endpoint)throw new Error("Not connected");try{let C=new Headers((d=this._requestInit)===null||d===void 0?void 0:d.headers);C.set("content-type","application/json");let W={...this._requestInit,method:"POST",headers:C,body:JSON.stringify(I),signal:(G=this._abortController)===null||G===void 0?void 0:G.signal},w=await fetch(this._endpoint,W);if(!w.ok){let B=await w.text().catch(()=>null);throw new Error(`Error POSTing to endpoint (HTTP ${w.status}): ${B}`)}}catch(C){throw(Z=this.onerror)===null||Z===void 0||Z.call(this,C),C}}}var i9=J1(u1(),1);var GQ2="",ZQ2="";var zw9=s.object({}).passthrough(),CQ2={async isEnabled(){return!0},isReadOnly(){return!1},name:"mcp",async description(){return ZQ2},async prompt(){return GQ2},inputSchema:zw9,async*call(){yield{type:"result",data:"",resultForAssistant:""}},needsPermissions(){return!0},renderToolUseMessage(I){return Object.entries(I).map(([d,G])=>`${d}: ${JSON.stringify(G)}`).join(", ")},userFacingName:()=>"mcp",renderToolUseRejectedMessage(){return i9.createElement(A3,null)},renderToolResultMessage(I,{verbose:d}){if(Array.isArray(I))return i9.createElement(p,{flexDirection:"column"},I.map((Z,C)=>{if(Z.type==="image")return i9.createElement(p,{key:C,justifyContent:"space-between",overflowX:"hidden",width:"100%"},i9.createElement(p,{flexDirection:"row"},i9.createElement(u,null,"  ⎿  "),i9.createElement(u,null,"[Image]")));let W=Z.text.split(` +`).length;return i9.createElement(pR,{key:C,content:Z.text,lines:W,verbose:d})}));if(!I)return i9.createElement(p,{justifyContent:"space-between",overflowX:"hidden",width:"100%"},i9.createElement(p,{flexDirection:"row"},i9.createElement(u,null,"  ⎿  "),i9.createElement(u,{color:r1().secondaryText},"(No content)")));let G=I.split(` +`).length;return i9.createElement(pR,{content:I,lines:G,verbose:d})},renderResultForAssistant(I){return I}};function VQ2(I){let d={};if(I)for(let G of I){let[Z,...C]=G.split("=");if(!Z||C.length===0)throw new Error(`Invalid environment variable format: ${G}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`);d[Z]=C.join("=")}return d}var Qw9=["project","global"];function JK1(I){if(!I)return"project";let d=Qw9;if(!d.includes(I))throw new Error(`Invalid scope: ${I}. Must be one of: ${d.join(", ")}`);return I}function XQ2(I,d,G="project"){if(G==="mcprc"){let Z=AQ2(R0(),".mcprc"),C={};if(WQ2(Z))try{let W=wQ2(Z,"utf-8"),w=tG(W);if(w&&typeof w==="object")C=w}catch{}C[I]=d;try{BQ2(Z,JSON.stringify(C,null,2),"utf-8")}catch(W){throw new Error(`Failed to write to .mcprc: ${W}`)}}else if(G==="global"){let Z=q2();if(!Z.mcpServers)Z.mcpServers={};Z.mcpServers[I]=d,p4(Z)}else{let Z=I5();if(!Z.mcpServers)Z.mcpServers={};Z.mcpServers[I]=d,o9(Z)}}function YQ2(I,d="project"){if(d==="mcprc"){let G=AQ2(R0(),".mcprc");if(!WQ2(G))throw new Error("No .mcprc file found in this directory");try{let Z=wQ2(G,"utf-8"),C=tG(Z);if(!C||typeof C!=="object"||!C[I])throw new Error(`No MCP server found with name: ${I} in .mcprc`);delete C[I],BQ2(G,JSON.stringify(C,null,2),"utf-8")}catch(Z){if(Z instanceof Error)throw Z;throw new Error(`Failed to remove from .mcprc: ${Z}`)}}else if(d==="global"){let G=q2();if(!G.mcpServers?.[I])throw new Error(`No global MCP server found with name: ${I}`);delete G.mcpServers[I],p4(G)}else{let G=I5();if(!G.mcpServers?.[I])throw new Error(`No local MCP server found with name: ${I}`);delete G.mcpServers[I],o9(G)}}function _Q2(){let I=q2(),d=OE(),G=I5();return{...I.mcpServers??{},...d??{},...G.mcpServers??{}}}function DQ2(I){let d=I5(),G=OE(),Z=q2();if(d.mcpServers?.[I])return{...d.mcpServers[I],scope:"project"};if(G?.[I])return{...G[I],scope:"mcprc"};if(Z.mcpServers?.[I])return{...Z.mcpServers[I],scope:"global"};return}async function fw9(I,d){let G=d.type==="sse"?new gK1(new URL(d.url)):new CK1({command:d.command,args:d.args,env:{...process.env,...d.env},stderr:"pipe"}),Z=new ZK1({name:"claude",version:"0.1.0"},{capabilities:{}}),C=5000,W=Z.connect(G),w=new Promise((B,A)=>{let V=setTimeout(()=>{A(new Error(`Connection to MCP server "${I}" timed out after 5000ms`))},5000);W.then(()=>clearTimeout(V),()=>clearTimeout(V))});if(await Promise.race([W,w]),d.type==="stdio")G.stderr?.on("data",(B)=>{let A=B.toString().trim();if(A)wz(I,`Server stderr: ${A}`)});return Z}function HQ2(I){let d=I5();if(d.approvedMcprcServers?.includes(I))return"approved";if(d.rejectedMcprcServers?.includes(I))return"rejected";return"pending"}var KK1=a2(async()=>{if(process.env.CI)return[];let I=q2().mcpServers??{},d=OE(),G=I5().mcpServers??{},Z=r01(d,(W,w)=>HQ2(w)==="approved"),C={...I,...Z,...G};return await Promise.all(Object.entries(C).map(async([W,w])=>{try{let B=await fw9(W,w);return I0("tengu_mcp_server_connection_succeeded",{}),{name:W,client:B,type:"connected"}}catch(B){return I0("tengu_mcp_server_connection_failed",{}),wz(W,`Connection failed: ${B instanceof Error?B.message:String(B)}`),{name:W,type:"failed"}}}))});async function FQ2(I,d,G){let Z=await KK1();return(await Promise.allSettled(Z.map(async(W)=>{if(W.type==="failed")return null;try{if(!(await W.client.getServerCapabilities())?.[G])return null;return{client:W,result:await W.client.request(I,d)}}catch(w){if(W.type==="connected")wz(W.name,`Failed to request '${I.method}': ${w instanceof Error?w.message:String(w)}`);return null}}))).filter((W)=>W.status==="fulfilled").map((W)=>W.value).filter((W)=>W!==null)}var gQ2=a2(async()=>{return(await FQ2({method:"tools/list"},Hu,"tools")).flatMap(({client:d,result:{tools:G}})=>G.map((Z)=>({...CQ2,name:"mcp__"+d.name+"__"+Z.name,async description(){return Z.description??""},async prompt(){return Z.description??""},inputJSONSchema:Z.inputSchema,async*call(C){let W=await qw9({client:d,tool:Z.name,args:C});yield{type:"result",data:W,resultForAssistant:W}},userFacingName(){return`${d.name}:${Z.name} (MCP)`}})))});async function qw9({client:{client:I,name:d},tool:G,args:Z}){let C=await I.callTool({name:G,arguments:Z},IU);if("isError"in C&&C.isError){let W=`Error calling tool ${G}: ${C.error}`;throw wz(d,W),Error(W)}if("toolResult"in C)return String(C.toolResult);if("content"in C&&Array.isArray(C.content))return C.content.map((W)=>{if(W.type==="image")return{type:"image",source:{type:"base64",data:String(W.data),media_type:W.mimeType}};return W});throw Error(`Unexpected response format from tool ${G}`)}var JQ2=a2(async()=>{return(await FQ2({method:"prompts/list"},Du,"prompts")).flatMap(({client:d,result:G})=>G.prompts?.map((Z)=>{let C=Object.values(Z.arguments??{}).map((W)=>W.name);return{type:"prompt",name:"mcp__"+d.name+"__"+Z.name,description:Z.description??"",isEnabled:!0,isHidden:!1,progressMessage:"running",userFacingName(){return`${d.name}:${Z.name} (MCP)`},argNames:C,async getPromptForCommand(W){let w=W.split(" ");return await Rw9({name:Z.name,client:d},s01(C,w))}}}))});async function Rw9({name:I,client:d},G){try{return(await d.client.getPrompt({name:I,arguments:G})).messages.map((C)=>({role:C.role,content:[C.content.type==="text"?{type:"text",text:C.content.text}:{type:"image",source:{data:String(C.content.data),media_type:C.content.mimeType,type:"base64"}}]}))}catch(Z){throw wz(d.name,`Error running command '${I}': ${Z instanceof Error?Z.message:String(Z)}`),Z}}var Uw9=a2(()=>[wN2,BN2,VN2,XN2,Uz2,Ez2,Mz2,jz2,kz2,xz2,IN2,ts,NQ,...as()?[hz2,bz2()]:[],...[]]),KQ2=a2(async()=>{return[...await JQ2(),...Uw9()].filter((I)=>I.isEnabled)});function NQ2(I,d){return d.some((G)=>G.userFacingName()===I||G.aliases?.includes(I))}function No(I,d){let G=d.find((Z)=>Z.userFacingName()===I||Z.aliases?.includes(I));if(!G)throw ReferenceError(`Command ${I} not found. Available commands: ${d.map((Z)=>{let C=Z.userFacingName();return Z.aliases?`${C} (aliases: ${Z.aliases.join(", ")})`:C}).join(", ")}`);return G}import{resolve as vw9}from"path";var BK=J1(u1(),1);var gX=J1(u1(),1);function zo({param:{text:I},addMargin:d}){let G=XG(I,"bash-input");if(!G)return null;return gX.createElement(p,{flexDirection:"column",marginTop:d?1:0,width:"100%"},gX.createElement(p,null,gX.createElement(u,{color:r1().bashBorder},"!"),gX.createElement(u,{color:r1().secondaryText}," ",G)))}var KW="[Request interrupted by user]",_X="[Request interrupted by user for tool use]",BU="The user doesn't want to take this action right now. STOP what you are doing and wait for the user to tell you how to proceed.",fu="The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.",Xu="No response requested.",aC2=new Set([KW,_X,BU,fu,Xu]);function zQ2(I,d){return{type:"assistant",costUSD:0,durationMs:0,uuid:AK(),message:{id:AK(),model:"",role:"assistant",stop_reason:"stop_sequence",stop_sequence:"",type:"message",usage:{input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0},content:I},...d}}function q8(I){return zQ2([{type:"text",text:I===""?FH:I,citations:[]}])}function nR(I){return zQ2([{type:"text",text:I===""?FH:I,citations:[]}],{isApiErrorMessage:!0})}function p9(I,d){return{type:"user",message:{role:"user",content:I},uuid:AK(),toolUseResult:d}}function QQ2(I,d,G,Z,C){return{type:"progress",content:G,normalizedMessages:Z,siblingToolUseIDs:d,tools:C,toolUseID:I,uuid:AK()}}function fQ2(I){return{type:"tool_result",content:BU,is_error:!0,tool_use_id:I}}async function Qo(I,d,G,Z,C){if(d==="bash"){I0("tengu_input_bash",{});let W=p9(`${I}`);if(I.startsWith("cd ")){let w=R0(),B=vw9(w,I.slice(3));try{return await Uw(B),[W,q8(`Changed directory to ${c0.bold(`${B}/`)}`)]}catch(A){return X0(A),[W,q8(`cwd error: ${A instanceof Error?A.message:String(A)}`)]}}G({jsx:BK.createElement(p,{flexDirection:"column",marginTop:1},BK.createElement(zo,{addMargin:!1,param:{text:`${I}`,type:"text"}}),BK.createElement(ns,null)),shouldHidePromptInput:!1});try{let w=await G5.validateInput({command:I});if(!w.result)return[W,q8(w.message)];let{data:B}=await gH(G5.call({command:I},Z));return[W,q8(`${B.stdout}${B.stderr}`)]}catch(w){return[W,q8(`Command failed: ${w instanceof Error?w.message:String(w)}`)]}finally{G(null)}}if(I.startsWith("/")){let W=I.slice(1).split(" "),w=W[0];if(W.length>1&&W[1]==="(MCP)")w=w+" (MCP)";if(!w)return I0("tengu_input_slash_missing",{input:I}),[q8("Commands are in the form `/command [args]`")];if(!NQ2(w,Z.options.commands))return I0("tengu_input_prompt",{}),[p9(I)];let B=I.slice(w.length+2),A=await Ew9(w,B,G,Z);if(A.length===0)return I0("tengu_input_command",{input:I}),[];if(A.length===2&&A[0].type==="user"&&A[1].type==="assistant"&&typeof A[1].message.content==="string"&&A[1].message.content.startsWith("Unknown command:"))return I0("tengu_input_slash_invalid",{input:I}),A;if(A.length===2)return I0("tengu_input_command",{input:I}),A;return I0("tengu_input_command",{input:I}),A}if(I0("tengu_input_prompt",{}),C)return[p9([{type:"image",source:{type:"base64",media_type:"image/png",data:C}},{type:"text",text:I}])];return[p9(I)]}async function Ew9(I,d,G,Z){try{let C=No(I,Z.options.commands);switch(C.type){case"local-jsx":return new Promise((W)=>{C.call((w)=>{G(null),W([p9(`${C.userFacingName()} + ${C.userFacingName()} + ${d}`),w?q8(w):q8(Xu)])},Z).then((w)=>{G({jsx:w,shouldHidePromptInput:!0})})});case"local":{let W=p9(`${C.userFacingName()} + ${C.userFacingName()} + ${d}`);try{let w=await C.call(d,Z);return[W,q8(`${w}`)]}catch(w){return X0(w),[W,q8(`${String(w)}`)]}}case"prompt":return(await C.getPromptForCommand(d)).map((w)=>{if(typeof w.content==="string")return{message:{role:w.role,content:`${C.userFacingName()} is ${C.progressMessage}… + ${C.userFacingName()} + ${d} + ${JSON.stringify(w.content,null,2)}`},type:"user",uuid:AK()};return{message:{role:w.role,content:w.content.map((B)=>{switch(B.type){case"text":return{...B,text:` + ${C.userFacingName()} is ${C.progressMessage}… + ${C.userFacingName()} + ${d} + ${JSON.stringify(B,null,2)} + `};default:return B}})},type:"user",uuid:AK()}})}}catch(C){if(C instanceof I41)return[q8(C.message)];throw C}}function XG(I,d){if(!I.trim()||!d.trim())return null;let G=d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Z=new RegExp(`<${G}(?:\\s+[^>]*)?>([\\s\\S]*?)<\\/${G}>`,"gi"),C,W=0,w=0,B=new RegExp(`<${G}(?:\\s+[^>]*?)?>`,"gi"),A=new RegExp(`<\\/${G}>`,"gi");while((C=Z.exec(I))!==null){let V=C[1],X=I.slice(w,C.index);W=0,B.lastIndex=0;while(B.exec(X)!==null)W++;A.lastIndex=0;while(A.exec(X)!==null)W--;if(W===0&&V)return V;w=C.index+C[0].length}return null}function fo(I){if(I.type==="progress")return!0;if(typeof I.message.content==="string")return I.message.content.trim().length>0;if(I.message.content.length===0)return!1;if(I.message.content.length>1)return!0;if(I.message.content[0].type!=="text")return!0;return I.message.content[0].text.trim().length>0&&I.message.content[0].text!==FH&&I.message.content[0].text!==_X}function QW(I){return I.flatMap((d)=>{if(d.type==="progress")return[d];if(typeof d.message.content==="string")return[d];return d.message.content.map((G)=>{switch(d.type){case"assistant":return{type:"assistant",uuid:AK(),message:{...d.message,content:[G]},costUSD:d.costUSD/d.message.content.length,durationMs:d.durationMs};case"user":return d}})})}function Mw9(I){return I.type==="assistant"&&"costUSD"in I&&I.message.content.some((d)=>d.type==="tool_use")}function qQ2(I){let d=[],G=[];for(let Z of I){if(Mw9(Z))G.push(Z);if(Z.type==="progress"){let C=d.find((w)=>w.type==="progress"&&w.toolUseID===Z.toolUseID);if(C){d[d.indexOf(C)]=Z;continue}let W=G.find((w)=>w.message.content[0]?.id===Z.toolUseID);if(W){d.splice(d.indexOf(W)+1,0,Z);continue}}if(Z.type==="user"&&Array.isArray(Z.message.content)&&Z.message.content[0]?.type==="tool_result"){let C=Z.message.content[0]?.tool_use_id,W=d.find((B)=>B.type==="progress"&&B.toolUseID===C);if(W){d.splice(d.indexOf(W)+1,0,Z);continue}let w=G.find((B)=>B.message.content[0]?.id===C);if(w){d.splice(d.indexOf(w)+1,0,Z);continue}}else d.push(Z)}return d}var RQ2=a2((I)=>Object.fromEntries(I.flatMap((d)=>d.type==="user"&&d.message.content[0]?.type==="tool_result"?[[d.message.content[0].tool_use_id,d.message.content[0].is_error??!1]]:[])));function Io(I){let d=RQ2(I);return new Set(I.filter((G)=>G.type==="assistant"&&Array.isArray(G.message.content)&&G.message.content[0]?.type==="tool_use"&&!(G.message.content[0]?.id in d)).map((G)=>G.message.content[0].id))}function UQ2(I){let d=Io(I),G=new Set(I.filter((Z)=>Z.type==="progress").map((Z)=>Z.toolUseID));return new Set(I.filter((Z)=>{if(Z.type!=="assistant")return!1;if(Z.message.content[0]?.type!=="tool_use")return!1;let C=Z.message.content[0].id;if(C===d.values().next().value)return!0;if(G.has(C)&&d.has(C))return!0;return!1}).map((Z)=>Z.message.content[0].id))}function vQ2(I){let d=RQ2(I);return I.filter((G)=>G.type==="assistant"&&Array.isArray(G.message.content)&&G.message.content[0]?.type==="tool_use"&&(G.message.content[0]?.id in d)&&d[G.message.content[0]?.id])}function sR(I){let d=[];return I.filter((G)=>G.type!=="progress").forEach((G)=>{switch(G.type){case"user":{if(!Array.isArray(G.message.content)||G.message.content[0]?.type!=="tool_result"){d.push(G);return}let Z=lA(d);if(!Z||Z?.type==="assistant"||!Array.isArray(Z.message.content)||Z.message.content[0]?.type!=="tool_result"){d.push(G);return}d[d.indexOf(Z)]={...Z,message:{...Z.message,content:[...Z.message.content,...G.message.content]}};return}case"assistant":d.push(G);return}}),d}function hs(I){let d=I.filter((G)=>G.type!=="text"||G.text.trim().length>0);if(d.length===0)return[{type:"text",text:FH,citations:[]}];return d}function qo(I){return NK1(I).trim()===""||I.trim()===FH}var Sw9=["commit_analysis","context","function_analysis","pr_analysis"];function NK1(I){let d=new RegExp(`<(${Sw9.join("|")})>.*? +?`,"gs");return I.replace(d,"").trim()}function zK1(I){switch(I.type){case"assistant":if(I.message.content[0]?.type!=="tool_use")return null;return I.message.content[0].id;case"user":if(I.message.content[0]?.type!=="tool_result")return null;return I.message.content[0].tool_use_id;case"progress":return I.toolUseID}}function FG(I){for(let d=I.length-1;d>=0;d--){let G=I[d];if(G&&G.type==="assistant")return G.message.id}return}var qu=J1(u1(),1);function EQ2(){return qu.createElement(u,null,"  ⎿  ",qu.createElement(u,{color:r1().error},"Interrupted by user"))}var UW=J1(u1(),1);var QK1=10;function MQ2({param:I,verbose:d}){let G=typeof I.content==="string"?I.content.trim():"Error";return UW.createElement(p,{flexDirection:"row",width:"100%"},UW.createElement(u,null,"  ⎿  "),UW.createElement(p,{flexDirection:"column"},UW.createElement(u,{color:r1().error},d?G:G.split(` +`).slice(0,QK1).join(` +`)||""),!d&&G.split(` +`).length>QK1&&UW.createElement(u,{color:r1().secondaryText},"... (+",G.split(` +`).length-QK1," lines)")))}var fK1=J1(u1(),1);var LQ2=J1(u1(),1);var zH=J1(u1(),1);var Ru=J1(u1(),1);function NH({costUSD:I,durationMs:d,debug:G}){if(!G)return null;let Z=(d/1000).toFixed(1);return Ru.createElement(p,{flexDirection:"column",minWidth:23,width:23},Ru.createElement(u,{dimColor:!0},"Cost: $",I.toFixed(4)," (",Z,"s)"))}import{isAbsolute as Lw9,relative as yw9,resolve as Pw9}from"path";var $w9=s.strictObject({pattern:s.string().describe("The glob pattern to match files against"),path:s.string().optional().describe("The directory to search in. Defaults to the current working directory.")}),A7={name:ys,async description(){return VJ1},userFacingName(){return"Search"},inputSchema:$w9,async isEnabled(){return!0},isReadOnly(){return!0},needsPermissions({path:I}){return!PB(I||R0())},async prompt(){return VJ1},renderToolUseMessage({pattern:I,path:d},{verbose:G}){let Z=d?Lw9(d)?d:Pw9(R0(),d):void 0,C=Z?yw9(R0(),Z):void 0;return`pattern: "${I}"${C||G?`, path: "${G?Z:C}"`:""}`},renderToolUseRejectedMessage(){return zH.default.createElement(A3,null)},renderToolResultMessage(I){if(typeof I==="string")I=JSON.parse(I);return zH.default.createElement(p,{justifyContent:"space-between",width:"100%"},zH.default.createElement(p,{flexDirection:"row"},zH.default.createElement(u,null,"  ⎿  Found "),zH.default.createElement(u,{bold:!0},I.numFiles," "),zH.default.createElement(u,null,I.numFiles===0||I.numFiles>1?"files":"file")),zH.default.createElement(NH,{costUSD:0,durationMs:I.durationMs,debug:!1}))},async*call({pattern:I,path:d},{abortController:G}){let Z=Date.now(),{files:C,truncated:W}=await M40(I,d??R0(),{limit:100,offset:0},G.signal),w={filenames:C,durationMs:Date.now()-Z,numFiles:C.length,truncated:W};yield{type:"result",resultForAssistant:this.renderResultForAssistant(w),data:w}},renderResultForAssistant(I){let d=I.filenames.join(` +`);if(I.filenames.length===0)d="No files found";else if(I.truncated)d+=` +(Results are truncated. Consider using a more specific path or pattern.)`;return d}};import{stat as uw9}from"fs/promises";var QH=J1(u1(),1);var Tw9=s.strictObject({pattern:s.string().describe("The regular expression pattern to search for in file contents"),path:s.string().optional().describe("The directory to search in. Defaults to the current working directory."),include:s.string().optional().describe('File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")')}),SQ2=100,Kd={name:Ps,async description(){return XJ1},userFacingName(){return"Search"},inputSchema:Tw9,isReadOnly(){return!0},async isEnabled(){return!0},needsPermissions({path:I}){return!PB(I||R0())},async prompt(){return XJ1},renderToolUseMessage({pattern:I,path:d,include:G},{verbose:Z}){let{absolutePath:C,relativePath:W}=u40(d);return`pattern: "${I}"${W||Z?`, path: "${Z?C:W}"`:""}${G?`, include: "${G}"`:""}`},renderToolUseRejectedMessage(){return QH.default.createElement(A3,null)},renderToolResultMessage(I){if(typeof I==="string")I=I;return QH.default.createElement(p,{justifyContent:"space-between",width:"100%"},QH.default.createElement(p,{flexDirection:"row"},QH.default.createElement(u,null,"  ⎿  Found "),QH.default.createElement(u,{bold:!0},I.numFiles," "),QH.default.createElement(u,null,I.numFiles===0||I.numFiles>1?"files":"file")),QH.default.createElement(NH,{costUSD:0,durationMs:I.durationMs,debug:!1}))},renderResultForAssistant({numFiles:I,filenames:d}){if(I===0)return"No files found";let G=`Found ${I} file${I===1?"":"s"} +${d.slice(0,SQ2).join(` +`)}`;if(I>SQ2)G+=` +(Results are truncated. Consider using a more specific path or pattern.)`;return G},async*call({pattern:I,path:d,include:G},{abortController:Z}){let C=Date.now(),W=p81(d)||R0(),w=["-li",I];if(G)w.push("--glob",G);let B=await MS(w,W,Z.signal),A=await Promise.all(B.map((_)=>uw9(_))),V=B.map((_,F)=>[_,A[F]]).sort((_,F)=>{let g=(F[1].mtimeMs??0)-(_[1].mtimeMs??0);if(g===0)return _[0].localeCompare(F[0]);return g}).map((_)=>_[0]),X={filenames:V,durationMs:Date.now()-C,numFiles:V.length};yield{type:"result",resultForAssistant:this.renderResultForAssistant(X),data:X}}};function Ow9(I,d){let G=null;for(let Z of d){if(Z.type!=="assistant"||!Array.isArray(Z.message.content))continue;for(let C of Z.message.content)if(C.type==="tool_use"&&C.id===I)G=C}return G}function Ro(I,d,G){return LQ2.useMemo(()=>{let Z=Ow9(I,G);if(!Z)throw new ReferenceError(`Tool use not found for tool_use_id ${I}`);let C=[...d,A7,Kd].find((W)=>W.name===Z.name);if(C===A7||C===Kd)I0("tengu_legacy_tool_lookup",{});if(!C)throw new ReferenceError(`Tool not found for ${Z.name}`);return{tool:C,toolUse:Z}},[I,G,d])}function yQ2({toolUseID:I,tools:d,messages:G,verbose:Z}){let{columns:C}=G9(),{tool:W,toolUse:w}=Ro(I,d,G),B=W.inputSchema.safeParse(w.input);if(B.success)return W.renderToolUseRejectedMessage(B.data,{columns:C,verbose:Z});return fK1.createElement(A3,null)}var qK1=J1(u1(),1);function PQ2({param:I,message:d,messages:G,tools:Z,verbose:C,width:W}){let{tool:w}=Ro(I.tool_use_id,Z,G);return qK1.createElement(p,{flexDirection:"column",width:W},w.renderToolResultMessage?.(d.toolUseResult.data,{verbose:C}))}function $Q2({param:I,message:d,messages:G,tools:Z,verbose:C,width:W}){if(I.content===BU)return JX.createElement(EQ2,null);if(I.content===fu)return JX.createElement(yQ2,{toolUseID:I.tool_use_id,tools:Z,messages:G,verbose:C});if(I.is_error)return JX.createElement(MQ2,{param:I,verbose:C});return JX.createElement(PQ2,{param:I,message:d,messages:G,tools:Z,verbose:C,width:W})}var gG=J1(u1(),1);var vo=J1(u1(),1);var Uu=J1(u1(),1);function Uo(I,d){let G=Uu.useRef(I);Uu.useEffect(()=>{G.current=I},[I]),Uu.useEffect(()=>{function Z(){G.current()}let C=setInterval(Z,d);return()=>clearInterval(C)},[d])}var AU=K2.platform==="macos"?"⏺":"●";function uQ2({isError:I,isUnresolved:d,shouldAnimate:G}){let[Z,C]=vo.default.useState(!0);Uo(()=>{if(!G)return;C((w)=>!w)},600);let W=d?r1().secondaryText:I?r1().error:r1().success;return vo.default.createElement(p,{minWidth:2},vo.default.createElement(u,{color:W},Z?AU:" "))}var RK1=J1(u1(),1);var TQ2="This is a no-op tool that logs a thought. It is inspired by the tau-bench think tool.",OQ2=`Use the tool to think about something. It will not obtain new information or make any changes to the repository, but just log the thought. Use it when complex reasoning or brainstorming is needed. + +Common use cases: +1. When exploring a repository and discovering the source of a bug, call this tool to brainstorm several unique ways of fixing the bug, and assess which change(s) are likely to be simplest and most effective +2. After receiving test results, use this tool to brainstorm ways to fix failing tests +3. When planning a complex refactoring, use this tool to outline different approaches and their tradeoffs +4. When designing a new feature, use this tool to think through architecture decisions and implementation details +5. When debugging a complex issue, use this tool to organize your thoughts and hypotheses + +The tool simply logs your thought process for better transparency and does not execute any code or make changes.`;var vu=J1(u1(),1);function Eo({children:I}){return vu.createElement(p,{flexDirection:"row",height:1,overflow:"hidden"},vu.createElement(u,null," ","⎿  "),I)}var mw9=s.object({thought:s.string().describe("Your thoughts.")}),VK={name:"Think",userFacingName:()=>"Think",description:async()=>TQ2,inputSchema:mw9,isEnabled:async()=>Boolean(process.env.THINK_TOOL)&&await NY("tengu_think_tool"),isReadOnly:()=>!0,needsPermissions:()=>!1,prompt:async()=>OQ2,async*call(I,{messageId:d}){I0("tengu_thinking",{messageId:d,thoughtLength:I.thought.length.toString(),method:"tool",provider:b9?"bedrock":h9?"vertex":"1p"}),yield{type:"result",resultForAssistant:"Your thought has been logged.",data:{thought:I.thought}}},renderToolUseMessage(I){return I.thought},renderToolUseRejectedMessage(){return RK1.default.createElement(Eo,null,RK1.default.createElement(u,{color:r1().error},"Thought cancelled"))},renderResultForAssistant:()=>"Your thought has been logged."};var Tu=J1(u1(),1);function vK1(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var YK=vK1();function kQ2(I){YK=I}var Su={exec:()=>null};function C9(I,d=""){let G=typeof I==="string"?I:I.source,Z={replace:(C,W)=>{let w=typeof W==="string"?W:W.source;return w=w.replace(fI.caret,"$1"),G=G.replace(C,w),Z},getRegex:()=>{return new RegExp(G,d)}};return Z}var fI={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:(I)=>new RegExp(`^( {0,3}${I})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:(I)=>new RegExp(`^ {0,${Math.min(3,I-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:(I)=>new RegExp(`^ {0,${Math.min(3,I-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:(I)=>new RegExp(`^ {0,${Math.min(3,I-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:(I)=>new RegExp(`^ {0,${Math.min(3,I-1)}}#`),htmlBeginRegex:(I)=>new RegExp(`^ {0,${Math.min(3,I-1)}}<(?:[a-z].*>|!--)`,"i")},lw9=/^(?:[ \t]*(?:\n|$))+/,bw9=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,hw9=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,$u=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,jw9=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,xQ2=/(?:[*+-]|\d{1,9}[.)])/,cQ2=C9(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,xQ2).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),EK1=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,kw9=/^[^\n]+/,MK1=/(?!\s*\])(?:\\.|[^\[\]\\])+/,xw9=C9(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",MK1).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),cw9=C9(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,xQ2).getRegex(),Lo="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",SK1=/|$))/,pw9=C9("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",SK1).replace("tag",Lo).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),pQ2=C9(EK1).replace("hr",$u).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Lo).getRegex(),iw9=C9(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",pQ2).getRegex(),LK1={blockquote:iw9,code:bw9,def:xw9,fences:hw9,heading:jw9,hr:$u,html:pw9,lheading:cQ2,list:cw9,newline:lw9,paragraph:pQ2,table:Su,text:kw9},mQ2=C9("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",$u).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Lo).getRegex(),nw9={...LK1,table:mQ2,paragraph:C9(EK1).replace("hr",$u).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",mQ2).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Lo).getRegex()},rw9={...LK1,html:C9(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",SK1).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Su,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:C9(EK1).replace("hr",$u).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",cQ2).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},aw9=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,sw9=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,iQ2=/^( {2,}|\\)\n(?!\s*$)/,ow9=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,aQ2=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,GB9=C9(aQ2,"u").replace(/punct/g,yo).getRegex(),ZB9=C9(aQ2,"u").replace(/punct/g,rQ2).getRegex(),sQ2="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",CB9=C9(sQ2,"gu").replace(/notPunctSpace/g,nQ2).replace(/punctSpace/g,yK1).replace(/punct/g,yo).getRegex(),WB9=C9(sQ2,"gu").replace(/notPunctSpace/g,IB9).replace(/punctSpace/g,tw9).replace(/punct/g,rQ2).getRegex(),wB9=C9("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,nQ2).replace(/punctSpace/g,yK1).replace(/punct/g,yo).getRegex(),BB9=C9(/\\(punct)/,"gu").replace(/punct/g,yo).getRegex(),AB9=C9(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),VB9=C9(SK1).replace("(?:-->|$)","-->").getRegex(),XB9=C9("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",VB9).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),So=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,YB9=C9(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",So).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),oQ2=C9(/^!?\[(label)\]\[(ref)\]/).replace("label",So).replace("ref",MK1).getRegex(),eQ2=C9(/^!?\[(ref)\](?:\[\])?/).replace("ref",MK1).getRegex(),_B9=C9("reflink|nolink(?!\\()","g").replace("reflink",oQ2).replace("nolink",eQ2).getRegex(),PK1={_backpedal:Su,anyPunctuation:BB9,autolink:AB9,blockSkip:dB9,br:iQ2,code:sw9,del:Su,emStrongLDelim:GB9,emStrongRDelimAst:CB9,emStrongRDelimUnd:wB9,escape:aw9,link:YB9,nolink:eQ2,punctuation:ew9,reflink:oQ2,reflinkSearch:_B9,tag:XB9,text:ow9,url:Su},DB9={...PK1,link:C9(/^!?\[(label)\]\((.*?)\)/).replace("label",So).getRegex(),reflink:C9(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",So).getRegex()},UK1={...PK1,emStrongRDelimAst:WB9,emStrongLDelim:ZB9,url:C9(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},lQ2=(I)=>FB9[I];function bB(I,d){if(d){if(fI.escapeTest.test(I))return I.replace(fI.escapeReplace,lQ2)}else if(fI.escapeTestNoEncode.test(I))return I.replace(fI.escapeReplaceNoEncode,lQ2);return I}function bQ2(I){try{I=encodeURI(I).replace(fI.percentDecode,"%")}catch{return null}return I}function hQ2(I,d){let G=I.replace(fI.findPipe,(W,w,B)=>{let A=!1,V=w;while(--V>=0&&B[V]==="\\")A=!A;if(A)return"|";else return" |"}),Z=G.split(fI.splitPipe),C=0;if(!Z[0].trim())Z.shift();if(Z.length>0&&!Z.at(-1)?.trim())Z.pop();if(d)if(Z.length>d)Z.splice(d);else while(Z.length{let w=W.match(G.other.beginningSpace);if(w===null)return W;let[B]=w;if(B.length>=C.length)return W.slice(C.length);return W}).join(` +`)}class yu{options;rules;lexer;constructor(I){this.options=I||YK}space(I){let d=this.rules.block.newline.exec(I);if(d&&d[0].length>0)return{type:"space",raw:d[0]}}code(I){let d=this.rules.block.code.exec(I);if(d){let G=d[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:d[0],codeBlockStyle:"indented",text:!this.options.pedantic?Mu(G,` +`):G}}}fences(I){let d=this.rules.block.fences.exec(I);if(d){let G=d[0],Z=JB9(G,d[3]||"",this.rules);return{type:"code",raw:G,lang:d[2]?d[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):d[2],text:Z}}}heading(I){let d=this.rules.block.heading.exec(I);if(d){let G=d[2].trim();if(this.rules.other.endingHash.test(G)){let Z=Mu(G,"#");if(this.options.pedantic)G=Z.trim();else if(!Z||this.rules.other.endingSpaceChar.test(Z))G=Z.trim()}return{type:"heading",raw:d[0],depth:d[1].length,text:G,tokens:this.lexer.inline(G)}}}hr(I){let d=this.rules.block.hr.exec(I);if(d)return{type:"hr",raw:Mu(d[0],` +`)}}blockquote(I){let d=this.rules.block.blockquote.exec(I);if(d){let G=Mu(d[0],` +`).split(` +`),Z="",C="",W=[];while(G.length>0){let w=!1,B=[],A;for(A=0;A1,C={type:"list",raw:"",ordered:Z,start:Z?+G.slice(0,-1):"",loose:!1,items:[]};if(G=Z?`\\d{1,9}\\${G.slice(-1)}`:`\\${G}`,this.options.pedantic)G=Z?G:"[*+-]";let W=this.rules.other.listItemRegex(G),w=!1;while(I){let A=!1,V="",X="";if(!(d=W.exec(I)))break;if(this.rules.block.hr.test(I))break;V=d[0],I=I.substring(V.length);let _=d[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,(E)=>" ".repeat(3*E.length)),F=I.split(` +`,1)[0],g=!_.trim(),J=0;if(this.options.pedantic)J=2,X=_.trimStart();else if(g)J=d[1].length+1;else J=d[2].search(this.rules.other.nonSpaceChar),J=J>4?1:J,X=_.slice(J),J+=d[1].length;if(g&&this.rules.other.blankLine.test(F))V+=F+` +`,I=I.substring(F.length+1),A=!0;if(!A){let E=this.rules.other.nextBulletRegex(J),S=this.rules.other.hrRegex(J),P=this.rules.other.fencesBeginRegex(J),$=this.rules.other.headingBeginRegex(J),h=this.rules.other.htmlBeginRegex(J);while(I){let O=I.split(` +`,1)[0],T;if(F=O,this.options.pedantic)F=F.replace(this.rules.other.listReplaceNesting," "),T=F;else T=F.replace(this.rules.other.tabCharGlobal," ");if(P.test(F))break;if($.test(F))break;if(h.test(F))break;if(E.test(F))break;if(S.test(F))break;if(T.search(this.rules.other.nonSpaceChar)>=J||!F.trim())X+=` +`+T.slice(J);else{if(g)break;if(_.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4)break;if(P.test(_))break;if($.test(_))break;if(S.test(_))break;X+=` +`+F}if(!g&&!F.trim())g=!0;V+=O+` +`,I=I.substring(O.length+1),_=T.slice(J)}}if(!C.loose){if(w)C.loose=!0;else if(this.rules.other.doubleBlankLine.test(V))w=!0}let K=null,Q;if(this.options.gfm){if(K=this.rules.other.listIsTask.exec(X),K)Q=K[0]!=="[ ] ",X=X.replace(this.rules.other.listReplaceTask,"")}C.items.push({type:"list_item",raw:V,task:!!K,checked:Q,loose:!1,text:X,tokens:[]}),C.raw+=V}let B=C.items.at(-1);if(B)B.raw=B.raw.trimEnd(),B.text=B.text.trimEnd();else return;C.raw=C.raw.trimEnd();for(let A=0;A_.type==="space"),X=V.length>0&&V.some((_)=>this.rules.other.anyLine.test(_.raw));C.loose=X}if(C.loose)for(let A=0;A{return{text:B,tokens:this.lexer.inline(B),header:!1,align:W.align[A]}}));return W}lheading(I){let d=this.rules.block.lheading.exec(I);if(d)return{type:"heading",raw:d[0],depth:d[2].charAt(0)==="="?1:2,text:d[1],tokens:this.lexer.inline(d[1])}}paragraph(I){let d=this.rules.block.paragraph.exec(I);if(d){let G=d[1].charAt(d[1].length-1)===` +`?d[1].slice(0,-1):d[1];return{type:"paragraph",raw:d[0],text:G,tokens:this.lexer.inline(G)}}}text(I){let d=this.rules.block.text.exec(I);if(d)return{type:"text",raw:d[0],text:d[0],tokens:this.lexer.inline(d[0])}}escape(I){let d=this.rules.inline.escape.exec(I);if(d)return{type:"escape",raw:d[0],text:d[1]}}tag(I){let d=this.rules.inline.tag.exec(I);if(d){if(!this.lexer.state.inLink&&this.rules.other.startATag.test(d[0]))this.lexer.state.inLink=!0;else if(this.lexer.state.inLink&&this.rules.other.endATag.test(d[0]))this.lexer.state.inLink=!1;if(!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(d[0]))this.lexer.state.inRawBlock=!0;else if(this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(d[0]))this.lexer.state.inRawBlock=!1;return{type:"html",raw:d[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:d[0]}}}link(I){let d=this.rules.inline.link.exec(I);if(d){let G=d[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(G)){if(!this.rules.other.endAngleBracket.test(G))return;let W=Mu(G.slice(0,-1),"\\");if((G.length-W.length)%2===0)return}else{let W=gB9(d[2],"()");if(W>-1){let B=(d[0].indexOf("!")===0?5:4)+d[1].length+W;d[2]=d[2].substring(0,W),d[0]=d[0].substring(0,B).trim(),d[3]=""}}let Z=d[2],C="";if(this.options.pedantic){let W=this.rules.other.pedanticHrefTitle.exec(Z);if(W)Z=W[1],C=W[3]}else C=d[3]?d[3].slice(1,-1):"";if(Z=Z.trim(),this.rules.other.startAngleBracket.test(Z))if(this.options.pedantic&&!this.rules.other.endAngleBracket.test(G))Z=Z.slice(1);else Z=Z.slice(1,-1);return jQ2(d,{href:Z?Z.replace(this.rules.inline.anyPunctuation,"$1"):Z,title:C?C.replace(this.rules.inline.anyPunctuation,"$1"):C},d[0],this.lexer,this.rules)}}reflink(I,d){let G;if((G=this.rules.inline.reflink.exec(I))||(G=this.rules.inline.nolink.exec(I))){let Z=(G[2]||G[1]).replace(this.rules.other.multipleSpaceGlobal," "),C=d[Z.toLowerCase()];if(!C){let W=G[0].charAt(0);return{type:"text",raw:W,text:W}}return jQ2(G,C,G[0],this.lexer,this.rules)}}emStrong(I,d,G=""){let Z=this.rules.inline.emStrongLDelim.exec(I);if(!Z)return;if(Z[3]&&G.match(this.rules.other.unicodeAlphaNumeric))return;if(!(Z[1]||Z[2])||!G||this.rules.inline.punctuation.exec(G)){let W=[...Z[0]].length-1,w,B,A=W,V=0,X=Z[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;X.lastIndex=0,d=d.slice(-1*I.length+W);while((Z=X.exec(d))!=null){if(w=Z[1]||Z[2]||Z[3]||Z[4]||Z[5]||Z[6],!w)continue;if(B=[...w].length,Z[3]||Z[4]){A+=B;continue}else if(Z[5]||Z[6]){if(W%3&&!((W+B)%3)){V+=B;continue}}if(A-=B,A>0)continue;B=Math.min(B,B+A+V);let _=[...Z[0]][0].length,F=I.slice(0,W+Z.index+_+B);if(Math.min(W,B)%2){let J=F.slice(1,-1);return{type:"em",raw:F,text:J,tokens:this.lexer.inlineTokens(J)}}let g=F.slice(2,-2);return{type:"strong",raw:F,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(I){let d=this.rules.inline.code.exec(I);if(d){let G=d[2].replace(this.rules.other.newLineCharGlobal," "),Z=this.rules.other.nonSpaceChar.test(G),C=this.rules.other.startingSpaceChar.test(G)&&this.rules.other.endingSpaceChar.test(G);if(Z&&C)G=G.substring(1,G.length-1);return{type:"codespan",raw:d[0],text:G}}}br(I){let d=this.rules.inline.br.exec(I);if(d)return{type:"br",raw:d[0]}}del(I){let d=this.rules.inline.del.exec(I);if(d)return{type:"del",raw:d[0],text:d[2],tokens:this.lexer.inlineTokens(d[2])}}autolink(I){let d=this.rules.inline.autolink.exec(I);if(d){let G,Z;if(d[2]==="@")G=d[1],Z="mailto:"+G;else G=d[1],Z=G;return{type:"link",raw:d[0],text:G,href:Z,tokens:[{type:"text",raw:G,text:G}]}}}url(I){let d;if(d=this.rules.inline.url.exec(I)){let G,Z;if(d[2]==="@")G=d[0],Z="mailto:"+G;else{let C;do C=d[0],d[0]=this.rules.inline._backpedal.exec(d[0])?.[0]??"";while(C!==d[0]);if(G=d[0],d[1]==="www.")Z="http://"+d[0];else Z=d[0]}return{type:"link",raw:d[0],text:G,href:Z,tokens:[{type:"text",raw:G,text:G}]}}}inlineText(I){let d=this.rules.inline.text.exec(I);if(d){let G=this.lexer.state.inRawBlock;return{type:"text",raw:d[0],text:d[0],escaped:G}}}}class rZ{tokens;options;state;tokenizer;inlineQueue;constructor(I){this.tokens=[],this.tokens.links=Object.create(null),this.options=I||YK,this.options.tokenizer=this.options.tokenizer||new yu,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let d={other:fI,block:Mo.normal,inline:Eu.normal};if(this.options.pedantic)d.block=Mo.pedantic,d.inline=Eu.pedantic;else if(this.options.gfm)if(d.block=Mo.gfm,this.options.breaks)d.inline=Eu.breaks;else d.inline=Eu.gfm;this.tokenizer.rules=d}static get rules(){return{block:Mo,inline:Eu}}static lex(I,d){return new rZ(d).lex(I)}static lexInline(I,d){return new rZ(d).inlineTokens(I)}lex(I){I=I.replace(fI.carriageReturn,` +`),this.blockTokens(I,this.tokens);for(let d=0;d{if(Z=W.call({lexer:this},I,d))return I=I.substring(Z.raw.length),d.push(Z),!0;return!1}))continue;if(Z=this.tokenizer.space(I)){I=I.substring(Z.raw.length);let W=d.at(-1);if(Z.raw.length===1&&W!==void 0)W.raw+=` +`;else d.push(Z);continue}if(Z=this.tokenizer.code(I)){I=I.substring(Z.raw.length);let W=d.at(-1);if(W?.type==="paragraph"||W?.type==="text")W.raw+=` +`+Z.raw,W.text+=` +`+Z.text,this.inlineQueue.at(-1).src=W.text;else d.push(Z);continue}if(Z=this.tokenizer.fences(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.heading(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.hr(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.blockquote(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.list(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.html(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.def(I)){I=I.substring(Z.raw.length);let W=d.at(-1);if(W?.type==="paragraph"||W?.type==="text")W.raw+=` +`+Z.raw,W.text+=` +`+Z.raw,this.inlineQueue.at(-1).src=W.text;else if(!this.tokens.links[Z.tag])this.tokens.links[Z.tag]={href:Z.href,title:Z.title};continue}if(Z=this.tokenizer.table(I)){I=I.substring(Z.raw.length),d.push(Z);continue}if(Z=this.tokenizer.lheading(I)){I=I.substring(Z.raw.length),d.push(Z);continue}let C=I;if(this.options.extensions?.startBlock){let W=1/0,w=I.slice(1),B;if(this.options.extensions.startBlock.forEach((A)=>{if(B=A.call({lexer:this},w),typeof B==="number"&&B>=0)W=Math.min(W,B)}),W<1/0&&W>=0)C=I.substring(0,W+1)}if(this.state.top&&(Z=this.tokenizer.paragraph(C))){let W=d.at(-1);if(G&&W?.type==="paragraph")W.raw+=` +`+Z.raw,W.text+=` +`+Z.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=W.text;else d.push(Z);G=C.length!==I.length,I=I.substring(Z.raw.length);continue}if(Z=this.tokenizer.text(I)){I=I.substring(Z.raw.length);let W=d.at(-1);if(W?.type==="text")W.raw+=` +`+Z.raw,W.text+=` +`+Z.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=W.text;else d.push(Z);continue}if(I){let W="Infinite loop on byte: "+I.charCodeAt(0);if(this.options.silent){console.error(W);break}else throw new Error(W)}}return this.state.top=!0,d}inline(I,d=[]){return this.inlineQueue.push({src:I,tokens:d}),d}inlineTokens(I,d=[]){let G=I,Z=null;if(this.tokens.links){let w=Object.keys(this.tokens.links);if(w.length>0){while((Z=this.tokenizer.rules.inline.reflinkSearch.exec(G))!=null)if(w.includes(Z[0].slice(Z[0].lastIndexOf("[")+1,-1)))G=G.slice(0,Z.index)+"["+"a".repeat(Z[0].length-2)+"]"+G.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex)}}while((Z=this.tokenizer.rules.inline.blockSkip.exec(G))!=null)G=G.slice(0,Z.index)+"["+"a".repeat(Z[0].length-2)+"]"+G.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);while((Z=this.tokenizer.rules.inline.anyPunctuation.exec(G))!=null)G=G.slice(0,Z.index)+"++"+G.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let C=!1,W="";while(I){if(!C)W="";C=!1;let w;if(this.options.extensions?.inline?.some((A)=>{if(w=A.call({lexer:this},I,d))return I=I.substring(w.raw.length),d.push(w),!0;return!1}))continue;if(w=this.tokenizer.escape(I)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.tag(I)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.link(I)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.reflink(I,this.tokens.links)){I=I.substring(w.raw.length);let A=d.at(-1);if(w.type==="text"&&A?.type==="text")A.raw+=w.raw,A.text+=w.text;else d.push(w);continue}if(w=this.tokenizer.emStrong(I,G,W)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.codespan(I)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.br(I)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.del(I)){I=I.substring(w.raw.length),d.push(w);continue}if(w=this.tokenizer.autolink(I)){I=I.substring(w.raw.length),d.push(w);continue}if(!this.state.inLink&&(w=this.tokenizer.url(I))){I=I.substring(w.raw.length),d.push(w);continue}let B=I;if(this.options.extensions?.startInline){let A=1/0,V=I.slice(1),X;if(this.options.extensions.startInline.forEach((_)=>{if(X=_.call({lexer:this},V),typeof X==="number"&&X>=0)A=Math.min(A,X)}),A<1/0&&A>=0)B=I.substring(0,A+1)}if(w=this.tokenizer.inlineText(B)){if(I=I.substring(w.raw.length),w.raw.slice(-1)!=="_")W=w.raw.slice(-1);C=!0;let A=d.at(-1);if(A?.type==="text")A.raw+=w.raw,A.text+=w.text;else d.push(w);continue}if(I){let A="Infinite loop on byte: "+I.charCodeAt(0);if(this.options.silent){console.error(A);break}else throw new Error(A)}}return d}}class Pu{options;parser;constructor(I){this.options=I||YK}space(I){return""}code({text:I,lang:d,escaped:G}){let Z=(d||"").match(fI.notSpaceStart)?.[0],C=I.replace(fI.endingNewline,"")+` +`;if(!Z)return"
"+(G?C:bB(C,!0))+`
+`;return'
'+(G?C:bB(C,!0))+`
+`}blockquote({tokens:I}){return`
+${this.parser.parse(I)}
+`}html({text:I}){return I}heading({tokens:I,depth:d}){return`${this.parser.parseInline(I)} +`}hr(I){return`
+`}list(I){let{ordered:d,start:G}=I,Z="";for(let w=0;w +`+Z+" +`}listitem(I){let d="";if(I.task){let G=this.checkbox({checked:!!I.checked});if(I.loose)if(I.tokens[0]?.type==="paragraph"){if(I.tokens[0].text=G+" "+I.tokens[0].text,I.tokens[0].tokens&&I.tokens[0].tokens.length>0&&I.tokens[0].tokens[0].type==="text")I.tokens[0].tokens[0].text=G+" "+bB(I.tokens[0].tokens[0].text),I.tokens[0].tokens[0].escaped=!0}else I.tokens.unshift({type:"text",raw:G+" ",text:G+" ",escaped:!0});else d+=G+" "}return d+=this.parser.parse(I.tokens,!!I.loose),`
  • ${d}
  • +`}checkbox({checked:I}){return"'}paragraph({tokens:I}){return`

    ${this.parser.parseInline(I)}

    +`}table(I){let d="",G="";for(let C=0;C${Z}`;return` + +`+d+` +`+Z+`
    +`}tablerow({text:I}){return` +${I} +`}tablecell(I){let d=this.parser.parseInline(I.tokens),G=I.header?"th":"td";return(I.align?`<${G} align="${I.align}">`:`<${G}>`)+d+` +`}strong({tokens:I}){return`${this.parser.parseInline(I)}`}em({tokens:I}){return`${this.parser.parseInline(I)}`}codespan({text:I}){return`${bB(I,!0)}`}br(I){return"
    "}del({tokens:I}){return`${this.parser.parseInline(I)}`}link({href:I,title:d,tokens:G}){let Z=this.parser.parseInline(G),C=bQ2(I);if(C===null)return Z;I=C;let W='
    ",W}image({href:I,title:d,text:G}){let Z=bQ2(I);if(Z===null)return bB(G);I=Z;let C=`${G}{let w=C[W].flat(1/0);G=G.concat(this.walkTokens(w,d))});else if(C.tokens)G=G.concat(this.walkTokens(C.tokens,d))}}return G}use(...I){let d=this.defaults.extensions||{renderers:{},childTokens:{}};return I.forEach((G)=>{let Z={...G};if(Z.async=this.defaults.async||Z.async||!1,G.extensions)G.extensions.forEach((C)=>{if(!C.name)throw new Error("extension name required");if("renderer"in C){let W=d.renderers[C.name];if(W)d.renderers[C.name]=function(...w){let B=C.renderer.apply(this,w);if(B===!1)B=W.apply(this,w);return B};else d.renderers[C.name]=C.renderer}if("tokenizer"in C){if(!C.level||C.level!=="block"&&C.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let W=d[C.level];if(W)W.unshift(C.tokenizer);else d[C.level]=[C.tokenizer];if(C.start){if(C.level==="block")if(d.startBlock)d.startBlock.push(C.start);else d.startBlock=[C.start];else if(C.level==="inline")if(d.startInline)d.startInline.push(C.start);else d.startInline=[C.start]}}if("childTokens"in C&&C.childTokens)d.childTokens[C.name]=C.childTokens}),Z.extensions=d;if(G.renderer){let C=this.defaults.renderer||new Pu(this.defaults);for(let W in G.renderer){if(!(W in C))throw new Error(`renderer '${W}' does not exist`);if(["options","parser"].includes(W))continue;let w=W,B=G.renderer[w],A=C[w];C[w]=(...V)=>{let X=B.apply(C,V);if(X===!1)X=A.apply(C,V);return X||""}}Z.renderer=C}if(G.tokenizer){let C=this.defaults.tokenizer||new yu(this.defaults);for(let W in G.tokenizer){if(!(W in C))throw new Error(`tokenizer '${W}' does not exist`);if(["options","rules","lexer"].includes(W))continue;let w=W,B=G.tokenizer[w],A=C[w];C[w]=(...V)=>{let X=B.apply(C,V);if(X===!1)X=A.apply(C,V);return X}}Z.tokenizer=C}if(G.hooks){let C=this.defaults.hooks||new Lu;for(let W in G.hooks){if(!(W in C))throw new Error(`hook '${W}' does not exist`);if(["options","block"].includes(W))continue;let w=W,B=G.hooks[w],A=C[w];if(Lu.passThroughHooks.has(W))C[w]=(V)=>{if(this.defaults.async)return Promise.resolve(B.call(C,V)).then((_)=>{return A.call(C,_)});let X=B.call(C,V);return A.call(C,X)};else C[w]=(...V)=>{let X=B.apply(C,V);if(X===!1)X=A.apply(C,V);return X}}Z.hooks=C}if(G.walkTokens){let C=this.defaults.walkTokens,W=G.walkTokens;Z.walkTokens=function(w){let B=[];if(B.push(W.call(this,w)),C)B=B.concat(C.call(this,w));return B}}this.defaults={...this.defaults,...Z}}),this}setOptions(I){return this.defaults={...this.defaults,...I},this}lexer(I,d){return rZ.lex(I,d??this.defaults)}parser(I,d){return aZ.parse(I,d??this.defaults)}parseMarkdown(I){return(G,Z)=>{let C={...Z},W={...this.defaults,...C},w=this.onError(!!W.silent,!!W.async);if(this.defaults.async===!0&&C.async===!1)return w(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof G==="undefined"||G===null)return w(new Error("marked(): input parameter is undefined or null"));if(typeof G!=="string")return w(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(G)+", string expected"));if(W.hooks)W.hooks.options=W,W.hooks.block=I;let B=W.hooks?W.hooks.provideLexer():I?rZ.lex:rZ.lexInline,A=W.hooks?W.hooks.provideParser():I?aZ.parse:aZ.parseInline;if(W.async)return Promise.resolve(W.hooks?W.hooks.preprocess(G):G).then((V)=>B(V,W)).then((V)=>W.hooks?W.hooks.processAllTokens(V):V).then((V)=>W.walkTokens?Promise.all(this.walkTokens(V,W.walkTokens)).then(()=>V):V).then((V)=>A(V,W)).then((V)=>W.hooks?W.hooks.postprocess(V):V).catch(w);try{if(W.hooks)G=W.hooks.preprocess(G);let V=B(G,W);if(W.hooks)V=W.hooks.processAllTokens(V);if(W.walkTokens)this.walkTokens(V,W.walkTokens);let X=A(V,W);if(W.hooks)X=W.hooks.postprocess(X);return X}catch(V){return w(V)}}}onError(I,d){return(G)=>{if(G.message+=` +Please report this to https://github.com/markedjs/marked.`,I){let Z="

    An error occurred:

    "+bB(G.message+"",!0)+"
    ";if(d)return Promise.resolve(Z);return Z}if(d)return Promise.reject(G);throw G}}}var XK=new tQ2;function r5(I,d){return XK.parse(I,d)}r5.options=r5.setOptions=function(I){return XK.setOptions(I),r5.defaults=XK.defaults,kQ2(r5.defaults),r5};r5.getDefaults=vK1;r5.defaults=YK;r5.use=function(...I){return XK.use(...I),r5.defaults=XK.defaults,kQ2(r5.defaults),r5};r5.walkTokens=function(I,d){return XK.walkTokens(I,d)};r5.parseInline=XK.parseInline;r5.Parser=aZ;r5.parser=aZ.parse;r5.Renderer=Pu;r5.TextRenderer=Po;r5.Lexer=rZ;r5.lexer=rZ.lex;r5.Tokenizer=yu;r5.Hooks=Lu;r5.parse=r5;var{options:iM3,setOptions:nM3,use:rM3,walkTokens:aM3,parseInline:sM3}=r5;var oM3=aZ.parse,eM3=rZ.lex;var uu=J1(Tg1(),1);import{EOL as vW}from"os";function VU(I){return r5.lexer(NK1(I)).map((d)=>EW(d)).join("").trim()}function EW(I,d=0,G=null,Z=null){switch(I.type){case"blockquote":return c0.dim.italic((I.tokens??[]).map((C)=>EW(C)).join(""));case"code":if(I.lang&&uu.supportsLanguage(I.lang))return uu.highlight(I.text,{language:I.lang})+vW;else return X0(`Language not supported while highlighting code, falling back to markdown: ${I.lang}`),uu.highlight(I.text,{language:"markdown"})+vW;case"codespan":return c0.blue(I.text);case"em":return c0.italic((I.tokens??[]).map((C)=>EW(C)).join(""));case"strong":return c0.bold((I.tokens??[]).map((C)=>EW(C)).join(""));case"heading":switch(I.depth){case 1:return c0.bold.italic.underline((I.tokens??[]).map((C)=>EW(C)).join(""))+vW+vW;case 2:return c0.bold((I.tokens??[]).map((C)=>EW(C)).join(""))+vW+vW;default:return c0.bold.dim((I.tokens??[]).map((C)=>EW(C)).join(""))+vW+vW}case"hr":return"---";case"image":return`[Image: ${I.title}: ${I.href}]`;case"link":return c0.blue(I.href);case"list":return I.items.map((C,W)=>EW(C,d,I.ordered?I.start+W:null,I)).join("");case"list_item":return(I.tokens??[]).map((C)=>`${" ".repeat(d)}${EW(C,d+1,G,I)}`).join("");case"paragraph":return(I.tokens??[]).map((C)=>EW(C)).join("")+vW;case"space":return vW;case"text":if(Z?.type==="list_item")return`${G===null?"-":zB9(d,G)+"."} ${I.tokens?I.tokens.map((C)=>EW(C,d,G,I)).join(""):I.text}${vW}`;else return I.text}return""}var KB9=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","aa","ab","ac","ad","ae","af","ag","ah","ai","aj","ak","al","am","an","ao","ap","aq","ar","as","at","au","av","aw","ax","ay","az"],NB9=["i","ii","iii","iv","v","vi","vii","viii","ix","x","xi","xii","xiii","xiv","xv","xvi","xvii","xviii","xix","xx","xxi","xxii","xxiii","xxiv","xxv","xxvi","xxvii","xxviii","xxix","xxx","xxxi","xxxii","xxxiii","xxxiv","xxxv","xxxvi","xxxvii","xxxviii","xxxix","xl"];function zB9(I,d){switch(I){case 0:case 1:return d.toString();case 2:return KB9[d-1];case 3:return NB9[d-1];default:return d.toString()}}function $o({param:{thinking:I},addMargin:d=!1}){if(!I)return null;return Tu.default.createElement(p,{flexDirection:"column",gap:1,marginTop:d?1:0,width:"100%"},Tu.default.createElement(u,{color:r1().secondaryText,italic:!0},"✻ Thinking…"),Tu.default.createElement(p,{paddingLeft:2},Tu.default.createElement(u,{color:r1().secondaryText,italic:!0},VU(I))))}function If2({param:I,costUSD:d,durationMs:G,addMargin:Z,tools:C,debug:W,verbose:w,erroredToolUseIDs:B,inProgressToolUseIDs:A,unresolvedToolUseIDs:V,shouldAnimate:X,shouldShowDot:_}){let F=C.find((Q)=>Q.name===I.name);if(!F)return X0(`Tool ${I.name} not found`),null;let g=!A.has(I.id)&&V.has(I.id),J=g?r1().secondaryText:void 0;if(F===VK){let{thought:Q}=VK.inputSchema.parse(I.input);return gG.default.createElement($o,{param:{thinking:Q,signature:"",type:"thinking"},addMargin:Z})}let K=F.userFacingName(I.input);return gG.default.createElement(p,{flexDirection:"row",justifyContent:"space-between",marginTop:Z?1:0,width:"100%"},gG.default.createElement(p,null,gG.default.createElement(p,{flexWrap:"nowrap",minWidth:K.length+(_?2:0)},_&&(g?gG.default.createElement(p,{minWidth:2},gG.default.createElement(u,{color:J},AU)):gG.default.createElement(uQ2,{shouldAnimate:X,isUnresolved:V.has(I.id),isError:B.has(I.id)})),gG.default.createElement(u,{color:J,bold:!g},K)),gG.default.createElement(p,{flexWrap:"nowrap"},Object.keys(I.input).length>0&&gG.default.createElement(u,{color:J},"(",F.renderToolUseMessage(I.input,{verbose:w}),")"),gG.default.createElement(u,{color:J},"…"))),gG.default.createElement(NH,{costUSD:d,durationMs:G,debug:W}))}var u6=J1(u1(),1);var $K1=J1(u1(),1);function df2({content:I,verbose:d}){let G=XG(I,"bash-stdout")??"",Z=XG(I,"bash-stderr")??"",C=G.split(` +`).length,W=Z.split(` +`).length;return $K1.createElement($s,{content:{stdout:G,stdoutLines:C,stderr:Z,stderrLines:W},verbose:!!d})}var JG=J1(u1(),1);function Zf2({content:I}){let d=XG(I,"local-command-stdout"),G=XG(I,"local-command-stderr");if(!d&&!G)return[];let Z=r1(),C=[Gf2(d?.trim(),Z.text),Gf2(G?.trim(),Z.error)].filter(Boolean);if(C.length===0)C=[JG.createElement(u,{key:"0"},"(No output)")];return[JG.createElement(p,{key:"0",gap:1},JG.createElement(p,null,JG.createElement(u,{color:Z.secondaryText}," ","⎿ ")),C.map((W,w)=>JG.createElement(p,{key:w,flexDirection:"column"},W)))]}function Gf2(I,d){if(!I)return null;return JG.createElement(u,{color:d},I)}function Cf2({param:{text:I},costUSD:d,durationMs:G,debug:Z,addMargin:C,shouldShowDot:W,verbose:w}){let{columns:B}=G9();if(qo(I))return null;if(I.startsWith(" /",G," ",Z))}var XU=J1(u1(),1);function wf2({addMargin:I,param:{text:d}}){let{columns:G}=G9();if(!d)return X0("No content found in user prompt message"),null;return XU.default.createElement(p,{flexDirection:"row",marginTop:I?1:0,width:"100%"},XU.default.createElement(p,{minWidth:2,width:2},XU.default.createElement(u,{color:r1().secondaryText},">")),XU.default.createElement(p,{flexDirection:"column",width:G-4},XU.default.createElement(u,{color:r1().secondaryText,wrap:"wrap"},d)))}var _K=J1(u1(),1);function Bf2({addMargin:I,param:d}){if(d.text.trim()===FH)return null;if(d.text.includes(""))return _K.createElement(zo,{addMargin:I,param:d});if(d.text.includes("")||d.text.includes(""))return _K.createElement(Wf2,{addMargin:I,param:d});return _K.createElement(wf2,{addMargin:I,param:d})}var uK1=J1(u1(),1);function Af2({addMargin:I=!1}){return uK1.default.createElement(p,{marginTop:I?1:0},uK1.default.createElement(u,{color:r1().secondaryText,italic:!0},"✻ Thinking…"))}function fH({message:I,messages:d,addMargin:G,tools:Z,verbose:C,debug:W,erroredToolUseIDs:w,inProgressToolUseIDs:B,unresolvedToolUseIDs:A,shouldAnimate:V,shouldShowDot:X,width:_}){if(I.type==="assistant")return B6.createElement(p,{flexDirection:"column",width:"100%"},I.message.content.map((g,J)=>B6.createElement(fB9,{key:J,param:g,costUSD:I.costUSD,durationMs:I.durationMs,addMargin:G,tools:Z,debug:W,options:{verbose:C},erroredToolUseIDs:w,inProgressToolUseIDs:B,unresolvedToolUseIDs:A,shouldAnimate:V,shouldShowDot:X,width:_})));let F=typeof I.message.content==="string"?[{type:"text",text:I.message.content}]:I.message.content;return B6.createElement(p,{flexDirection:"column",width:"100%"},F.map((g,J)=>B6.createElement(QB9,{key:J,message:I,messages:d,addMargin:G,tools:Z,param:g,options:{verbose:C}})))}function QB9({message:I,messages:d,addMargin:G,tools:Z,param:C,options:{verbose:W}}){let{columns:w}=G9();switch(C.type){case"text":return B6.createElement(Bf2,{addMargin:G,param:C});case"tool_result":return B6.createElement($Q2,{param:C,message:I,messages:d,tools:Z,verbose:W,width:w-5})}}function fB9({param:I,costUSD:d,durationMs:G,addMargin:Z,tools:C,debug:W,options:{verbose:w},erroredToolUseIDs:B,inProgressToolUseIDs:A,unresolvedToolUseIDs:V,shouldAnimate:X,shouldShowDot:_,width:F}){switch(I.type){case"tool_use":return B6.createElement(If2,{param:I,costUSD:d,durationMs:G,addMargin:Z,tools:C,debug:W,verbose:w,erroredToolUseIDs:B,inProgressToolUseIDs:A,unresolvedToolUseIDs:V,shouldAnimate:X,shouldShowDot:_});case"text":return B6.createElement(Cf2,{param:I,costUSD:d,durationMs:G,debug:W,addMargin:Z,shouldShowDot:_,verbose:w,width:F});case"redacted_thinking":return B6.createElement(Af2,{addMargin:Z});case"thinking":return B6.createElement($o,{addMargin:Z,param:I});default:return X0(`Unable to render message type: ${I.type}`),null}}var q4=J1(u1(),1),qH=J1(u1(),1);import{randomUUID as qB9}from"crypto";var uo=7;function Vf2({erroredToolUseIDs:I,messages:d,onSelect:G,onEscape:Z,tools:C,unresolvedToolUseIDs:W}){let w=qH.useMemo(qB9,[]);qH.useEffect(()=>{I0("tengu_message_selector_opened",{})},[]);function B(K){let Q=d.length-1-d.indexOf(K);I0("tengu_message_selector_selected",{index_from_end:Q.toString(),message_type:K.type,is_current_prompt:(K.uuid===w).toString()}),G(K)}function A(){I0("tengu_message_selector_cancelled",{}),Z()}let V=qH.useMemo(()=>[...d.filter((K)=>!(K.type==="user"&&Array.isArray(K.message.content)&&K.message.content[0]?.type==="tool_result")).filter((K)=>K.type!=="assistant"),{...p9(""),uuid:w}],[d,w]),[X,_]=qH.useState(V.length-1),F=P6(()=>process.exit(0));C4((K,Q)=>{if(Q.tab||Q.escape){A();return}if(Q.return){B(V[X]);return}if(Q.upArrow)if(Q.ctrl||Q.shift||Q.meta)_(0);else _((S)=>Math.max(0,S-1));if(Q.downArrow)if(Q.ctrl||Q.shift||Q.meta)_(V.length-1);else _((S)=>Math.min(V.length-1,S+1));let E=Number(K);if(!isNaN(E)&&E>=1&&E<=Math.min(9,V.length)){if(!V[E-1])return;B(V[E-1])}});let g=Math.max(0,Math.min(X-Math.floor(uo/2),V.length-uo)),J=qH.useMemo(()=>QW(d).filter(fo),[d]);return q4.createElement(q4.Fragment,null,q4.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:r1().secondaryBorder,height:4+Math.min(uo,V.length)*2,paddingX:1,marginTop:1},q4.createElement(p,{flexDirection:"column",minHeight:2,marginBottom:1},q4.createElement(u,{bold:!0},"Jump to a previous message"),q4.createElement(u,{dimColor:!0},"This will fork the conversation")),V.slice(g,g+uo).map((K,Q)=>{let S=g+Q===X,P=K.uuid===w;return q4.createElement(p,{key:K.uuid,flexDirection:"row",height:2,minHeight:2},q4.createElement(p,{width:7},S?q4.createElement(u,{color:"blue",bold:!0},k5.pointer," ",g+Q+1," "):q4.createElement(u,null," ",g+Q+1," ")),q4.createElement(p,{height:1,overflow:"hidden",width:100},P?q4.createElement(p,{width:"100%"},q4.createElement(u,{dimColor:!0,italic:!0},"(current)")):Array.isArray(K.message.content)&&K.message.content[0]?.type==="text"&&qo(K.message.content[0].text)?q4.createElement(u,{dimColor:!0,italic:!0},"(empty message)"):q4.createElement(fH,{message:K,messages:J,addMargin:!1,tools:C,verbose:!1,debug:!1,erroredToolUseIDs:I,inProgressToolUseIDs:new Set,unresolvedToolUseIDs:W,shouldAnimate:!1,shouldShowDot:!1})))})),q4.createElement(p,{marginLeft:3},q4.createElement(u,{dimColor:!0},F.pending?q4.createElement(q4.Fragment,null,"Press ",F.keyName," again to exit"):q4.createElement(q4.Fragment,null,"↑/↓ to select · Enter to confirm · Tab/Esc to cancel"))))}var oK1=J1(u1(),1);import{existsSync as YU,mkdirSync as iB9,readFileSync as Uf2,statSync as vf2}from"fs";var y3=J1(u1(),1);import{dirname as nB9,isAbsolute as ju,relative as Ef2,resolve as Mf2,sep as rB9}from"path";var g9=J1(u1(),1);function hB(I,d){return I.flatMap((G,Z)=>Z?[d(Z),G]:[G])}import{relative as RB9}from"path";function To({filePath:I,structuredPatch:d,verbose:G}){let{columns:Z}=G9(),C=d.reduce((w,B)=>w+B.lines.filter((A)=>A.startsWith("+")).length,0),W=d.reduce((w,B)=>w+B.lines.filter((A)=>A.startsWith("-")).length,0);return g9.createElement(p,{flexDirection:"column"},g9.createElement(u,null," ","⎿ Updated"," ",g9.createElement(u,{bold:!0},G?I:RB9(R0(),I)),C>0||W>0?" with ":"",C>0?g9.createElement(g9.Fragment,null,g9.createElement(u,{bold:!0},C)," ",C>1?"additions":"addition"):null,C>0&&W>0?" and ":null,W>0?g9.createElement(g9.Fragment,null,g9.createElement(u,{bold:!0},W)," ",W>1?"removals":"removal"):null),hB(d.map((w)=>g9.createElement(p,{flexDirection:"column",paddingLeft:5,key:w.newStart},g9.createElement(nZ,{patch:w,dim:!1,width:Z-12}))),(w)=>g9.createElement(p,{paddingLeft:5,key:`ellipsis-${w}`},g9.createElement(u,{color:r1().secondaryText},"..."))))}import{existsSync as UB9,readFileSync as _f2}from"fs";var qI=J1(u1(),1);import{extname as vB9,isAbsolute as Df2,relative as EB9,resolve as Hf2}from"path";var Xf2="Replace the contents of a specific cell in a Jupyter notebook.",Yf2="Completely replaces the contents of a specific cell in a Jupyter notebook (.ipynb file) with new source. Jupyter notebooks are interactive documents that combine code, text, and visualizations, commonly used for data analysis and scientific computing. The notebook_path parameter must be an absolute path, not a relative path. The cell_number is 0-indexed. Use edit_mode=insert to add a new cell at the index specified by cell_number. Use edit_mode=delete to delete the cell at the index specified by cell_number.";var MB9=s.strictObject({notebook_path:s.string().describe("The absolute path to the Jupyter notebook file to edit (must be absolute, not relative)"),cell_number:s.number().describe("The index of the cell to edit (0-based)"),new_source:s.string().describe("The new source for the cell"),cell_type:s.enum(["code","markdown"]).optional().describe("The type of the cell (code or markdown). If not specified, it defaults to the current cell type. If using edit_mode=insert, this is required."),edit_mode:s.string().optional().describe("The type of edit to make (replace, insert, delete). Defaults to replace.")}),RI={name:"NotebookEditCell",async description(){return Xf2},async prompt(){return Yf2},inputSchema:MB9,userFacingName(){return"Edit Notebook"},async isEnabled(){return!0},isReadOnly(){return!1},needsPermissions({notebook_path:I}){return!OR(I)},renderResultForAssistant({cell_number:I,edit_mode:d,new_source:G,error:Z}){if(Z)return Z;switch(d){case"replace":return`Updated cell ${I} with ${G}`;case"insert":return`Inserted cell ${I} with ${G}`;case"delete":return`Deleted cell ${I}`}},renderToolUseMessage(I,{verbose:d}){return`notebook_path: ${d?I.notebook_path:EB9(R0(),I.notebook_path)}, cell: ${I.cell_number}, content: ${I.new_source.slice(0,30)}…, cell_type: ${I.cell_type}, edit_mode: ${I.edit_mode??"replace"}`},renderToolUseRejectedMessage(){return qI.createElement(A3,null)},renderToolResultMessage({cell_number:I,new_source:d,language:G,error:Z}){if(Z)return qI.createElement(p,{flexDirection:"column"},qI.createElement(u,{color:"red"},Z));return qI.createElement(p,{flexDirection:"column"},qI.createElement(u,null,"Updated cell ",I,":"),qI.createElement(p,{marginLeft:2},qI.createElement(yB,{code:d,language:G})))},async validateInput({notebook_path:I,cell_number:d,cell_type:G,edit_mode:Z="replace"}){let C=Df2(I)?I:Hf2(R0(),I);if(!UB9(C))return{result:!1,message:"Notebook file does not exist."};if(vB9(C)!==".ipynb")return{result:!1,message:"File must be a Jupyter notebook (.ipynb file). For editing other file types, use the FileEdit tool."};if(d<0)return{result:!1,message:"Cell number must be non-negative."};if(Z!=="replace"&&Z!=="insert"&&Z!=="delete")return{result:!1,message:"Edit mode must be replace, insert, or delete."};if(Z==="insert"&&!G)return{result:!1,message:"Cell type is required when using edit_mode=insert."};let W=dd(C),w=_f2(C,W),B=tG(w);if(!B)return{result:!1,message:"Notebook is not valid JSON."};if(Z==="insert"&&d>B.cells.length)return{result:!1,message:`Cell number is out of bounds. For insert mode, the maximum value is ${B.cells.length} (to append at the end).`};else if((Z==="replace"||Z==="delete")&&(d>=B.cells.length||!B.cells[d]))return{result:!1,message:`Cell number is out of bounds. Notebook has ${B.cells.length} cells.`};return{result:!0}},async*call({notebook_path:I,cell_number:d,new_source:G,cell_type:Z,edit_mode:C}){let W=Df2(I)?I:Hf2(R0(),I);try{let w=dd(W),B=_f2(W,w),A=JSON.parse(B),V=A.metadata.language_info?.name??"python";if(C==="delete")A.cells.splice(d,1);else if(C==="insert"){let F={cell_type:Z,source:G,metadata:{}};A.cells.splice(d,0,Z=="markdown"?F:{...F,outputs:[]})}else{let F=A.cells[d];if(F.source=G,F.execution_count=void 0,F.outputs=[],Z&&Z!==F.cell_type)F.cell_type=Z}let X=Sg(W);Xf(W,JSON.stringify(A,null,1),w,X);let _={cell_number:d,new_source:G,cell_type:Z??"code",language:V,edit_mode:C??"replace",error:""};yield{type:"result",data:_,resultForAssistant:this.renderResultForAssistant(_)}}catch(w){if(w instanceof Error){let A={cell_number:d,new_source:G,cell_type:Z??"code",language:"python",edit_mode:"replace",error:w.message};yield{type:"result",data:A,resultForAssistant:this.renderResultForAssistant(A)};return}let B={cell_number:d,new_source:G,cell_type:Z??"code",language:"python",edit_mode:"replace",error:"Unknown error occurred while editing notebook"};yield{type:"result",data:B,resultForAssistant:this.renderResultForAssistant(B)}}}};var Ff2=`This is a tool for editing files. For moving or renaming files, you should generally use the Bash tool with the 'mv' command instead. For larger edits, use the Write tool to overwrite files. For Jupyter notebooks (.ipynb files), use the ${RI.name} instead. + +Before using this tool: + +1. Use the View tool to understand the file's contents and context + +2. Verify the directory path is correct (only applicable when creating new files): + - Use the LS tool to verify the parent directory exists and is the correct location + +To make a file edit, provide the following: +1. file_path: The absolute path to the file to modify (must be absolute, not relative) +2. old_string: The text to replace (must be unique within the file, and must match the file contents exactly, including all whitespace and indentation) +3. new_string: The edited text to replace the old_string + +The tool will replace ONE occurrence of old_string with new_string in the specified file. + +CRITICAL REQUIREMENTS FOR USING THIS TOOL: + +1. UNIQUENESS: The old_string MUST uniquely identify the specific instance you want to change. This means: + - Include AT LEAST 3-5 lines of context BEFORE the change point + - Include AT LEAST 3-5 lines of context AFTER the change point + - Include all whitespace, indentation, and surrounding code exactly as it appears in the file + +2. SINGLE INSTANCE: This tool can only change ONE instance at a time. If you need to change multiple instances: + - Make separate calls to this tool for each instance + - Each call must uniquely identify its specific instance using extensive context + +3. VERIFICATION: Before using this tool: + - Check how many instances of the target text exist in the file + - If multiple instances exist, gather enough context to uniquely identify each one + - Plan separate tool calls for each instance + +WARNING: If you do not follow these requirements: + - The tool will fail if old_string matches multiple locations + - The tool will fail if old_string doesn't match exactly (including whitespace) + - You may change the wrong instance if you don't include enough context + +When making edits: + - Ensure the edit results in idiomatic, correct code + - Do not leave the code in a broken state + - Always use absolute file paths (starting with /) + +If you want to create a new file, use: + - A new file path, including dir name if needed + - An empty old_string + - The new file's contents as new_string + +Remember: when making multiple file edits in a row to the same file, you should prefer to send all edits in a single message with multiple calls to this tool, rather than multiple messages with a single call each. +`;import{isAbsolute as xB9,resolve as cB9}from"path";import{readFileSync as pB9}from"fs";function MW(){}MW.prototype={diff:function I(d,G){var Z,C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},W=C.callback;if(typeof C==="function")W=C,C={};var w=this;function B($){if($=w.postProcess($,C),W)return setTimeout(function(){W($)},0),!0;else return $}d=this.castInput(d,C),G=this.castInput(G,C),d=this.removeEmpty(this.tokenize(d,C)),G=this.removeEmpty(this.tokenize(G,C));var A=G.length,V=d.length,X=1,_=A+V;if(C.maxEditLength!=null)_=Math.min(_,C.maxEditLength);var F=(Z=C.timeout)!==null&&Z!==void 0?Z:1/0,g=Date.now()+F,J=[{oldPos:-1,lastComponent:void 0}],K=this.extractCommon(J[0],G,d,0,C);if(J[0].oldPos+1>=V&&K+1>=A)return B(gf2(w,J[0].lastComponent,G,d,w.useLongestToken));var Q=-1/0,E=1/0;function S(){for(var $=Math.max(Q,-X);$<=Math.min(E,X);$+=2){var h=void 0,O=J[$-1],T=J[$+1];if(O)J[$-1]=void 0;var V1=!1;if(T){var c=T.oldPos-$;V1=T&&0<=c&&c=V&&K+1>=A)return B(gf2(w,h.lastComponent,G,d,w.useLongestToken));else{if(J[$]=h,h.oldPos+1>=V)E=Math.min(E,$-1);if(K+1>=A)Q=Math.max(Q,$+1)}}X++}if(W)(function $(){setTimeout(function(){if(X>_||Date.now()>g)return W();if(!S())$()},0)})();else while(X<=_&&Date.now()<=g){var P=S();if(P)return P}},addToPath:function I(d,G,Z,C,W){var w=d.lastComponent;if(w&&!W.oneChangePerToken&&w.added===G&&w.removed===Z)return{oldPos:d.oldPos+C,lastComponent:{count:w.count+1,added:G,removed:Z,previousComponent:w.previousComponent}};else return{oldPos:d.oldPos+C,lastComponent:{count:1,added:G,removed:Z,previousComponent:w}}},extractCommon:function I(d,G,Z,C,W){var w=G.length,B=Z.length,A=d.oldPos,V=A-C,X=0;while(V+1g.length?K:g}),_.value=I.join(F)}else _.value=I.join(G.slice(V,V+_.count));if(V+=_.count,!_.added)X+=_.count}else _.value=I.join(Z.slice(X,X+_.count)),X+=_.count}return W}var cL3=new MW;function Jf2(I,d){var G;for(G=0;Gd.length)G=I.length-d.length;var Z=d.length;if(I.length0&&d[w]!=d[W])W=C[W];if(d[w]==d[W])W++}W=0;for(var B=G;B0&&I[B]!=d[W])W=C[W];if(I[B]==d[W])W++}return W}var mo="a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",LB9=new RegExp("[".concat(mo,"]+|\\s+|[^").concat(mo,"]"),"ug"),lo=new MW;lo.equals=function(I,d,G){if(G.ignoreCase)I=I.toLowerCase(),d=d.toLowerCase();return I.trim()===d.trim()};lo.tokenize=function(I){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},G;if(d.intlSegmenter){if(d.intlSegmenter.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');G=Array.from(d.intlSegmenter.segment(I),function(W){return W.segment})}else G=I.match(LB9)||[];var Z=[],C=null;return G.forEach(function(W){if(/\s/.test(W))if(C==null)Z.push(W);else Z.push(Z.pop()+W);else if(/\s/.test(C))if(Z[Z.length-1]==C)Z.push(Z.pop()+W);else Z.push(C+W);else Z.push(W);C=W}),Z};lo.join=function(I){return I.map(function(d,G){if(G==0)return d;else return d.replace(/^\s+/,"")}).join("")};lo.postProcess=function(I,d){if(!I||d.oneChangePerToken)return I;var G=null,Z=null,C=null;if(I.forEach(function(W){if(W.added)Z=W;else if(W.removed)C=W;else{if(Z||C)zf2(G,C,Z,W);G=W,Z=null,C=null}}),Z||C)zf2(G,C,Z,null);return I};function zf2(I,d,G,Z){if(d&&G){var C=d.value.match(/^\s*/)[0],W=d.value.match(/\s*$/)[0],w=G.value.match(/^\s*/)[0],B=G.value.match(/\s*$/)[0];if(I){var A=Jf2(C,w);I.value=mK1(I.value,w,A),d.value=mu(d.value,A),G.value=mu(G.value,A)}if(Z){var V=Kf2(W,B);Z.value=OK1(Z.value,B,V),d.value=Oo(d.value,V),G.value=Oo(G.value,V)}}else if(G){if(I)G.value=G.value.replace(/^\s*/,"");if(Z)Z.value=Z.value.replace(/^\s*/,"")}else if(I&&Z){var X=Z.value.match(/^\s*/)[0],_=d.value.match(/^\s*/)[0],F=d.value.match(/\s*$/)[0],g=Jf2(X,_);d.value=mu(d.value,g);var J=Kf2(mu(X,g),F);d.value=Oo(d.value,J),Z.value=OK1(Z.value,X,J),I.value=mK1(I.value,X,X.slice(0,X.length-J.length))}else if(Z){var K=Z.value.match(/^\s*/)[0],Q=d.value.match(/\s*$/)[0],E=Nf2(Q,K);d.value=Oo(d.value,E)}else if(I){var S=I.value.match(/\s*$/)[0],P=d.value.match(/^\s*/)[0],$=Nf2(S,P);d.value=mu(d.value,$)}}var yB9=new MW;yB9.tokenize=function(I){var d=new RegExp("(\\r?\\n)|[".concat(mo,"]+|[^\\S\\n\\r]+|[^").concat(mo,"]"),"ug");return I.match(d)||[]};var bo=new MW;bo.tokenize=function(I,d){if(d.stripTrailingCr)I=I.replace(/\r\n/g,` +`);var G=[],Z=I.split(/(\n|\r\n)/);if(!Z[Z.length-1])Z.pop();for(var C=0;CI.length)d=I.length;for(var G=0,Z=new Array(d);G0?_(a1.lines.slice(-w.context)):[],g-=K.length,J-=K.length}if((o1=K).push.apply(o1,TK1(c1.map(function(T1){return(c.added?"+":"-")+T1}))),c.added)E+=c1.length;else Q+=c1.length}else{if(g)if(c1.length<=w.context*2&&P>",hu="<<:DOLLAR_TOKEN:>>";function KX({filePath:I,fileContents:d,oldStr:G,newStr:Z}){return Rf2(I,I,d.replaceAll("&",bu).replaceAll("$",hu),d.replaceAll("&",bu).replaceAll("$",hu).replace(G.replaceAll("&",bu).replaceAll("$",hu),Z.replaceAll("&",bu).replaceAll("$",hu)),void 0,void 0,{context:kB9}).hunks.map((C)=>({...C,lines:C.lines.map((W)=>W.replaceAll(bu,"&").replaceAll(hu,"$"))}))}function kK1(I,d,G){let Z=xB9(I)?I:cB9(R0(),I),C,W;if(d==="")C="",W=G;else{let B=dd(Z);if(C=pB9(Z,B),G==="")if(!d.endsWith(` +`)&&C.includes(d+` +`))W=C.replace(d+` +`,()=>G);else W=C.replace(d,()=>G);else W=C.replace(d,()=>G);if(W===C)throw new Error("Original and edited file match exactly. Failed to apply edit.")}return{patch:KX({filePath:I,fileContents:C,oldStr:C,newStr:W}),updatedFile:W}}var aB9=s.strictObject({file_path:s.string().describe("The absolute path to the file to modify"),old_string:s.string().describe("The text to replace"),new_string:s.string().describe("The text to replace it with")}),Sf2=4,p7={name:"Edit",async description(){return"A tool for editing files"},async prompt(){return Ff2},inputSchema:aB9,userFacingName({old_string:I,new_string:d}){if(I==="")return"Create";if(d==="")return"Delete";return"Update"},async isEnabled(){return!0},needsPermissions({file_path:I}){return!OR(I)},isReadOnly(){return!1},renderToolUseMessage(I,{verbose:d}){return`file_path: ${d?I.file_path:Ef2(R0(),I.file_path)}`},renderToolResultMessage({filePath:I,structuredPatch:d},{verbose:G}){return y3.createElement(To,{filePath:I,structuredPatch:d,verbose:G})},renderToolUseRejectedMessage({file_path:I,old_string:d,new_string:G},{columns:Z,verbose:C}){try{let{patch:W}=kK1(I,d,G);return y3.createElement(p,{flexDirection:"column"},y3.createElement(u,null," ","⎿"," ",y3.createElement(u,{color:r1().error},"User rejected ",d===""?"write":"update"," to"," "),y3.createElement(u,{bold:!0},C?I:Ef2(R0(),I))),hB(W.map((w)=>y3.createElement(p,{flexDirection:"column",paddingLeft:5,key:w.newStart},y3.createElement(nZ,{patch:w,dim:!0,width:Z-12}))),(w)=>y3.createElement(p,{paddingLeft:5,key:`ellipsis-${w}`},y3.createElement(u,{color:r1().secondaryText},"..."))))}catch(W){return X0(W),y3.createElement(p,{flexDirection:"column"},y3.createElement(u,null," ","⎿ (No changes)"))}},async validateInput({file_path:I,old_string:d,new_string:G},{readFileTimestamps:Z}){if(d===G)return{result:!1,message:"No changes to make: old_string and new_string are exactly the same.",meta:{old_string:d}};let C=ju(I)?I:Mf2(R0(),I);if(YU(C)&&d==="")return{result:!1,message:"Cannot create new file - file already exists."};if(!YU(C)&&d==="")return{result:!0};if(!YU(C)){let _=Yf(C),F="File does not exist.";if(_)F+=` Did you mean ${_}?`;return{result:!1,message:F}}if(C.endsWith(".ipynb"))return{result:!1,message:`File is a Jupyter Notebook. Use the ${RI.name} to edit this file.`};let W=Z[C];if(!W)return{result:!1,message:"File has not been read yet. Read it first before writing to it.",meta:{isFilePathAbsolute:String(ju(I))}};if(vf2(C).mtimeMs>W)return{result:!1,message:"File has been modified since read, either by the user or by a linter. Read it again before attempting to write it."};let A=dd(C),V=Uf2(C,A);if(!V.includes(d))return{result:!1,message:"String to replace not found in file.",meta:{isFilePathAbsolute:String(ju(I))}};let X=V.split(d).length-1;if(X>1)return{result:!1,message:`Found ${X} matches of the string to replace. For safety, this tool only supports replacing exactly one occurrence at a time. Add more lines of context to your edit and try again.`,meta:{isFilePathAbsolute:String(ju(I))}};return{result:!0}},async*call({file_path:I,old_string:d,new_string:G},{readFileTimestamps:Z}){let{patch:C,updatedFile:W}=kK1(I,d,G),w=ju(I)?I:Mf2(R0(),I),B=nB9(w);iB9(B,{recursive:!0});let A=YU(w)?dd(w):"utf8",V=YU(w)?Sg(w):"LF",X=YU(w)?Uf2(w,A):"";if(Xf(w,W,A,V),Z[w]=vf2(w).mtimeMs,w.endsWith(`${rB9}CLAUDE.md`))I0("tengu_write_claudemd",{});let _={filePath:I,oldString:d,newString:G,originalFile:X,structuredPatch:C};yield{type:"result",data:_,resultForAssistant:this.renderResultForAssistant(_)}},renderResultForAssistant({filePath:I,originalFile:d,oldString:G,newString:Z}){let{snippet:C,startLine:W}=sB9(d||"",G,Z);return`The file ${I} has been updated. Here's the result of running \`cat -n\` on a snippet of the edited file: +${_f({content:C,startLine:W})}`}};function sB9(I,d,G){let C=(I.split(d)[0]??"").split(/\r?\n/).length-1,W=I.replace(d,G).split(/\r?\n/),w=Math.max(0,C-Sf2),B=C+Sf2+G.split(/\r?\n/).length;return{snippet:W.slice(w,B+1).join(` +`),startLine:w+1}}import{existsSync as xK1,mkdirSync as oB9,readFileSync as yf2,statSync as Pf2}from"fs";var Y5=J1(u1(),1);import{EOL as eB9}from"os";import{dirname as tB9,extname as IA9,isAbsolute as cK1,relative as pK1,resolve as iK1,sep as dA9}from"path";var Lf2=`Write a file to the local filesystem. Overwrites the existing file if there is one. + +Before using this tool: + +1. Use the ReadFile tool to understand the file's contents and context + +2. Directory Verification (only applicable when creating new files): + - Use the LS tool to verify the parent directory exists and is the correct location`;var nK1=10,$f2=16000,GA9="To save on context only part of this file has been shown to you. You should retry this tool after you have searched inside the file with Grep in order to find the line numbers of what you are looking for.",ZA9=s.strictObject({file_path:s.string().describe("The absolute path to the file to write (must be absolute, not relative)"),content:s.string().describe("The content to write to the file")}),R8={name:"Replace",async description(){return"Write a file to the local filesystem."},userFacingName:()=>"Write",async prompt(){return Lf2},inputSchema:ZA9,async isEnabled(){return!0},isReadOnly(){return!1},needsPermissions({file_path:I}){return!OR(I)},renderToolUseMessage(I,{verbose:d}){return`file_path: ${d?I.file_path:pK1(R0(),I.file_path)}`},renderToolUseRejectedMessage({file_path:I,content:d},{columns:G,verbose:Z}){try{let C=cK1(I)?I:iK1(R0(),I),W=xK1(C),w=W?dd(C):"utf-8",B=W?yf2(C,w):null,A=B?"update":"create",V=KX({filePath:I,fileContents:B??"",oldStr:B??"",newStr:d});return Y5.createElement(p,{flexDirection:"column"},Y5.createElement(u,null," ","⎿"," ",Y5.createElement(u,{color:r1().error},"User rejected ",A==="update"?"update":"write"," to"," "),Y5.createElement(u,{bold:!0},Z?I:pK1(R0(),I))),hB(V.map((X)=>Y5.createElement(p,{flexDirection:"column",paddingLeft:5,key:X.newStart},Y5.createElement(nZ,{patch:X,dim:!0,width:G-12}))),(X)=>Y5.createElement(p,{paddingLeft:5,key:`ellipsis-${X}`},Y5.createElement(u,{color:r1().secondaryText},"..."))))}catch(C){return X0(C),Y5.createElement(p,{flexDirection:"column"},Y5.createElement(u,null," ","⎿ (No changes)"))}},renderToolResultMessage({filePath:I,content:d,structuredPatch:G,type:Z},{verbose:C}){switch(Z){case"create":{let W=d||"(No content)",w=d.split(eB9).length;return Y5.createElement(p,{flexDirection:"column"},Y5.createElement(u,null," ","⎿ Wrote ",w," lines to"," ",Y5.createElement(u,{bold:!0},C?I:pK1(R0(),I))),Y5.createElement(p,{flexDirection:"column",paddingLeft:5},Y5.createElement(yB,{code:C?W:W.split(` +`).slice(0,nK1).filter((B)=>B.trim()!=="").join(` +`),language:IA9(I).slice(1)}),!C&&w>nK1&&Y5.createElement(u,{color:r1().secondaryText},"... (+",w-nK1," lines)")))}case"update":return Y5.createElement(To,{filePath:I,structuredPatch:G,verbose:C})}},async validateInput({file_path:I},{readFileTimestamps:d}){let G=cK1(I)?I:iK1(R0(),I);if(!xK1(G))return{result:!0};let Z=d[G];if(!Z)return{result:!1,message:"File has not been read yet. Read it first before writing to it."};if(Pf2(G).mtimeMs>Z)return{result:!1,message:"File has been modified since read, either by the user or by a linter. Read it again before attempting to write it."};return{result:!0}},async*call({file_path:I,content:d},{readFileTimestamps:G}){let Z=cK1(I)?I:iK1(R0(),I),C=tB9(Z),W=xK1(Z),w=W?dd(Z):"utf-8",B=W?yf2(Z,w):null,A=W?Sg(Z):await L40(R0());if(oB9(C,{recursive:!0}),Xf(Z,d,w,A),G[Z]=Pf2(Z).mtimeMs,Z.endsWith(`${dA9}CLAUDE.md`))I0("tengu_write_claudemd",{});if(B){let X=KX({filePath:I,fileContents:B,oldStr:B,newStr:d}),_={type:"update",filePath:I,content:d,structuredPatch:X};yield{type:"result",data:_,resultForAssistant:this.renderResultForAssistant(_)};return}let V={type:"create",filePath:I,content:d,structuredPatch:[]};yield{type:"result",data:V,resultForAssistant:this.renderResultForAssistant(V)}},renderResultForAssistant({filePath:I,content:d,type:G}){switch(G){case"create":return`File created successfully at: ${I}`;case"update":return`The file ${I} has been updated. Here's the result of running \`cat -n\` on a snippet of the edited file: +${_f({content:d.split(/\r?\n/).length>$f2?d.split(/\r?\n/).slice(0,$f2).join(` +`)+GA9:d,startLine:1})}`}}};var kB=J1(u1(),1);import{basename as YA9,extname as _A9}from"path";var uf2=J1(u1(),1);function r3(I){I0("tengu_unary_event",{event:I.event,completion_type:I.completion_type,language_name:I.metadata.language_name,message_id:I.metadata.message_id,platform:I.metadata.platform})}function RH(I,d){uf2.useEffect(()=>{I0("tengu_tool_use_show_permission_request",{messageID:I.assistantMessage.message.id,toolName:I.tool.name}),Promise.resolve(d.language_name).then((Z)=>{r3({completion_type:d.completion_type,event:"response",metadata:{language_name:Z,message_id:I.assistantMessage.message.id,platform:K2.platform}})})},[I,d])}var CA9=new Set(["git status","git diff","git log","git branch","pwd","tree","date","which"]),rK1=(I,d,G)=>{if(CA9.has(d))return!0;if(G.includes(ku(I,{command:d},null)))return!0;if(G.includes(ku(I,{command:d},d)))return!0;return!1},Tf2=(I,d,G,Z)=>{if(rK1(I,d,Z))return!0;return Z.includes(ku(I,{command:d},G))},WA9=async(I,d,G,Z,C=fa)=>{if(rK1(I,d,Z))return{result:!0};let W=NR(d).filter((B)=>{if(B===`cd ${R0()}`)return!1;return!0}),w=await C(d,G.abortController.signal);if(G.abortController.signal.aborted)throw new Ez;if(w===null)return{result:!1,message:`Claude requested permissions to use ${I.name}, but you haven't granted it yet.`};if(w.commandInjectionDetected)if(rK1(I,d,Z))return{result:!0};else return{result:!1,message:`Claude requested permissions to use ${I.name}, but you haven't granted it yet.`};if(W.length<2)if(Tf2(I,d,w.commandPrefix,Z))return{result:!0};else return{result:!1,message:`Claude requested permissions to use ${I.name}, but you haven't granted it yet.`};if(W.every((B)=>{let A=w.subcommandPrefixes.get(B);if(A===void 0||A.commandInjectionDetected)return!1;return Tf2(I,B,A?A.commandPrefix:null,Z)}))return{result:!0};return{result:!1,message:`Claude requested permissions to use ${I.name}, but you haven't granted it yet.`}},UH=async(I,d,G,Z)=>{if(G.options.dangerouslySkipPermissions)return{result:!0};if(G.abortController.signal.aborted)throw new Ez;try{if(!I.needsPermissions(d))return{result:!0}}catch(w){return X0(`Error checking permissions: ${w}`),{result:!1,message:"Error checking permissions"}}let W=I5().allowedTools??[];if(I===G5&&W.includes(G5.name))return{result:!0};switch(I){case G5:{let{command:w}=o$.parse(d);return await WA9(I,w,G,W)}case p7:case R8:case RI:{if(!I.needsPermissions(d))return{result:!0};return{result:!1,message:`Claude requested permissions to use ${I.name}, but you haven't granted it yet.`}}default:{let w=ku(I,d,null);if(W.includes(w))return{result:!0};return{result:!1,message:`Claude requested permissions to use ${I.name}, but you haven't granted it yet.`}}}};async function NX(I,d,G){let Z=ku(I,d,G);if(I===p7||I===R8||I===RI){Vs();return}let C=I5();if(C.allowedTools.includes(Z))return;C.allowedTools.push(Z),C.allowedTools.sort(),o9(C)}function ku(I,d,G){switch(I){case G5:if(G)return`${G5.name}(${G}:*)`;return`${G5.name}(${G5.renderToolUseMessage(d)})`;default:return I.name}}var zX=J1(u1(),1);function Of2(I){return I>=70?"high":I>=30?"moderate":"low"}function wA9(I){let d=r1();switch(I){case"low":return{highlightColor:d.success,textColor:d.permission};case"moderate":return{highlightColor:d.warning,textColor:d.warning};case"high":return{highlightColor:d.error,textColor:d.error}}}function QX(I){if(I===null)return r1().permission;let d=Of2(I);return wA9(d).textColor}function BA9({riskScore:I}){let d=Of2(I);return zX.createElement(u,{color:QX(I)},"Risk: ",d)}function jB({title:I,riskScore:d}){return zX.createElement(p,{flexDirection:"column"},zX.createElement(u,{bold:!0,color:r1().permission},I),d!==null&&zX.createElement(BA9,{riskScore:d}))}var KG=J1(u1(),1),aK1=J1(u1(),1);import{existsSync as AA9,readFileSync as VA9}from"fs";import{relative as XA9}from"path";function ho({file_path:I,new_string:d,old_string:G,verbose:Z,useBorder:C=!0,width:W}){let w=aK1.useMemo(()=>AA9(I)?VA9(I,"utf8"):"",[I]),B=aK1.useMemo(()=>KX({filePath:I,fileContents:w,oldStr:G,newStr:d}),[I,w,G,d]);return KG.createElement(p,{flexDirection:"column"},KG.createElement(p,{borderColor:r1().secondaryBorder,borderStyle:C?"round":void 0,flexDirection:"column",paddingX:1},KG.createElement(p,{paddingBottom:1},KG.createElement(u,{bold:!0},Z?I:XA9(R0(),I))),hB(B.map((A)=>KG.createElement(nZ,{key:A.newStart,patch:A,dim:!1,width:W})),(A)=>KG.createElement(u,{color:r1().secondaryText,key:`ellipsis-${A}`},"..."))))}function DA9(I){let d=As(I)?[{label:"Yes, and don't ask again this session",value:"yes-dont-ask-again"}]:[];return[{label:"Yes",value:"yes"},...d,{label:`No, and tell Claude what to do differently (${c0.bold.hex(r1().warning)("esc")})`,value:"no"}]}function mf2({toolUseConfirm:I,onDone:d,verbose:G}){let{columns:Z}=G9(),{file_path:C,new_string:W,old_string:w}=I.input,B=kB.useMemo(()=>({completion_type:"str_replace_single",language_name:jo(C)}),[C]);return RH(I,B),kB.default.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:QX(I.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1},kB.default.createElement(jB,{title:"Edit file",riskScore:I.riskScore}),kB.default.createElement(ho,{file_path:C,new_string:W,old_string:w,verbose:G,width:Z-12}),kB.default.createElement(p,{flexDirection:"column"},kB.default.createElement(u,null,"Do you want to make this edit to"," ",kB.default.createElement(u,{bold:!0},YA9(C)),"?"),kB.default.createElement(Q6,{options:DA9(C),onChange:(A)=>{switch(A){case"yes":jo(C).then((V)=>{r3({completion_type:"str_replace_single",event:"accept",metadata:{language_name:V,message_id:I.assistantMessage.message.id,platform:K2.platform}})}),d(),I.onAllow("temporary");break;case"yes-dont-ask-again":jo(C).then((V)=>{r3({completion_type:"str_replace_single",event:"accept",metadata:{language_name:V,message_id:I.assistantMessage.message.id,platform:K2.platform}})}),NX(I.tool,I.input,xB(I)).then(()=>{d(),I.onAllow("permanent")});break;case"no":jo(C).then((V)=>{r3({completion_type:"str_replace_single",event:"reject",metadata:{language_name:V,message_id:I.assistantMessage.message.id,platform:K2.platform}})}),d(),I.onReject();break}}})))}async function jo(I){let d=_A9(I);if(!d)return"unknown";return(await Promise.resolve().then(() => J1(UR(),1))).default.getLanguage(d.slice(1))?.name??"unknown"}var SW=J1(u1(),1);var lf2=J1(u1(),1);function bf2(I,d){lf2.useEffect(()=>{I0("tengu_tool_use_show_permission_request",{messageID:I.assistantMessage.message.id,toolName:I.tool.name}),Promise.resolve(d.language_name).then((Z)=>{r3({completion_type:d.completion_type,event:"response",metadata:{language_name:Z,message_id:I.assistantMessage.message.id,platform:K2.platform}})})},[I,d])}function xu(I,{assistantMessage:{message:{id:d}}},G){r3({completion_type:I,event:G,metadata:{language_name:"none",message_id:d,platform:K2.platform}})}function hf2({toolUseConfirm:I,command:d}){let G=!nW2(d)&&I.commandPrefix&&!I.commandPrefix.commandInjectionDetected,Z=xB(I),C=G&&Z!==null,W=[];if(C)W=[{label:`Yes, and don't ask again for ${c0.bold(Z)} commands in ${c0.bold(R0())}`,value:"yes-dont-ask-again-prefix"}];else if(G)W=[{label:`Yes, and don't ask again for ${c0.bold(d)} commands in ${c0.bold(R0())}`,value:"yes-dont-ask-again-full"}];return[{label:"Yes",value:"yes"},...W,{label:`No, and tell Claude what to do differently (${c0.bold.hex(r1().warning)("esc")})`,value:"no"}]}function jf2({toolUseConfirm:I,onDone:d}){let G=r1(),{command:Z}=G5.inputSchema.parse(I.input),C=SW.useMemo(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return bf2(I,C),SW.default.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:G.permission,marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1},SW.default.createElement(jB,{title:"Bash command",riskScore:I.riskScore}),SW.default.createElement(p,{flexDirection:"column",paddingX:2,paddingY:1},SW.default.createElement(u,null,G5.renderToolUseMessage({command:Z})),SW.default.createElement(u,{color:G.secondaryText},I.description)),SW.default.createElement(p,{flexDirection:"column"},SW.default.createElement(u,null,"Do you want to proceed?"),SW.default.createElement(N_,{options:hf2({toolUseConfirm:I,command:Z}),onChange:(W)=>{switch(W){case"yes":xu("tool_use_single",I,"accept"),I.onAllow("temporary"),d();break;case"yes-dont-ask-again-prefix":{let w=xB(I);if(w!==null)xu("tool_use_single",I,"accept"),NX(I.tool,I.input,w).then(()=>{I.onAllow("permanent"),d()});break}case"yes-dont-ask-again-full":xu("tool_use_single",I,"accept"),NX(I.tool,I.input,null).then(()=>{I.onAllow("permanent"),d()});break;case"no":xu("tool_use_single",I,"reject"),I.onReject(),d();break}}})))}var sZ=J1(u1(),1);function ko({toolUseConfirm:I,onDone:d,verbose:G}){let Z=r1(),C=I.tool.userFacingName(I.input),W=C.endsWith(" (MCP)")?C.slice(0,-6):C,w=sZ.useMemo(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return RH(I,w),sZ.default.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:QX(I.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1},sZ.default.createElement(jB,{title:"Tool use",riskScore:I.riskScore}),sZ.default.createElement(p,{flexDirection:"column",paddingX:2,paddingY:1},sZ.default.createElement(u,null,W,"(",I.tool.renderToolUseMessage(I.input,{verbose:G}),")",C.endsWith(" (MCP)")?sZ.default.createElement(u,{color:Z.secondaryText}," (MCP)"):""),sZ.default.createElement(u,{color:Z.secondaryText},I.description)),sZ.default.createElement(p,{flexDirection:"column"},sZ.default.createElement(u,null,"Do you want to proceed?"),sZ.default.createElement(Q6,{options:[{label:"Yes",value:"yes"},{label:`Yes, and don't ask again for ${c0.bold(W)} commands in ${c0.bold(R0())}`,value:"yes-dont-ask-again"},{label:`No, and tell Claude what to do differently (${c0.bold.hex(r1().warning)("esc")})`,value:"no"}],onChange:(B)=>{switch(B){case"yes":r3({completion_type:"tool_use_single",event:"accept",metadata:{language_name:"none",message_id:I.assistantMessage.message.id,platform:K2.platform}}),I.onAllow("temporary"),d();break;case"yes-dont-ask-again":r3({completion_type:"tool_use_single",event:"accept",metadata:{language_name:"none",message_id:I.assistantMessage.message.id,platform:K2.platform}}),NX(I.tool,I.input,xB(I)).then(()=>{I.onAllow("permanent"),d()});break;case"no":r3({completion_type:"tool_use_single",event:"reject",metadata:{language_name:"none",message_id:I.assistantMessage.message.id,platform:K2.platform}}),I.onReject(),d();break}}})))}var sK1=J1(u1(),1);var HA9=6000,kf2={lastInteractionTime:Date.now()};function xf2(){kf2.lastInteractionTime=Date.now()}function FA9(){return Date.now()-kf2.lastInteractionTime}function gA9(I){return FA9()process.stdin.on("data",xf2));function xo(I,d=HA9){sK1.useEffect(()=>{KA9(),xf2()},[]),sK1.useEffect(()=>{let G=!1,Z=setInterval(()=>{if(JA9(d)&&!G)G=!0,es({message:I})},d);return()=>clearTimeout(Z)},[I,d])}var oZ=J1(u1(),1);import{basename as qA9,extname as RA9}from"path";import{existsSync as UA9}from"fs";var NG=J1(u1(),1),co=J1(u1(),1);import{existsSync as NA9,readFileSync as zA9}from"fs";import{extname as QA9,relative as fA9}from"path";function po({file_path:I,content:d,verbose:G,width:Z}){let C=co.useMemo(()=>NA9(I),[I]),W=co.useMemo(()=>{if(!C)return"";let B=dd(I);return zA9(I,B)},[I,C]),w=co.useMemo(()=>{if(!C)return null;return KX({filePath:I,fileContents:W,oldStr:W,newStr:d})},[C,I,W,d]);return NG.createElement(p,{borderColor:r1().secondaryBorder,borderStyle:"round",flexDirection:"column",paddingX:1},NG.createElement(p,{paddingBottom:1},NG.createElement(u,{bold:!0},G?I:fA9(R0(),I))),w?hB(w.map((B)=>NG.createElement(nZ,{key:B.newStart,patch:B,dim:!1,width:Z})),(B)=>NG.createElement(u,{color:r1().secondaryText,key:`ellipsis-${B}`},"...")):NG.createElement(yB,{code:d||"(No content)",language:QA9(I).slice(1)}))}function cf2({toolUseConfirm:I,onDone:d,verbose:G}){let{file_path:Z,content:C}=I.input,W=oZ.useMemo(()=>UA9(Z),[Z]),w=oZ.useMemo(()=>({completion_type:"write_file_single",language_name:io(Z)}),[Z]),{columns:B}=G9();return RH(I,w),oZ.default.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:QX(I.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1},oZ.default.createElement(jB,{title:`${W?"Edit":"Create"} file`,riskScore:I.riskScore}),oZ.default.createElement(p,{flexDirection:"column"},oZ.default.createElement(po,{file_path:Z,content:C,verbose:G,width:B-12})),oZ.default.createElement(p,{flexDirection:"column"},oZ.default.createElement(u,null,"Do you want to ",W?"make this edit to":"create"," ",oZ.default.createElement(u,{bold:!0},qA9(Z)),"?"),oZ.default.createElement(Q6,{options:[{label:"Yes",value:"yes"},{label:"Yes, and don't ask again this session",value:"yes-dont-ask-again"},{label:`No, and tell Claude what to do differently (${c0.bold.hex(r1().warning)("esc")})`,value:"no"}],onChange:(A)=>{switch(A){case"yes":io(Z).then((V)=>{r3({completion_type:"write_file_single",event:"accept",metadata:{language_name:V,message_id:I.assistantMessage.message.id,platform:K2.platform}})}),I.onAllow("temporary"),d();break;case"yes-dont-ask-again":io(Z).then((V)=>{r3({completion_type:"write_file_single",event:"accept",metadata:{language_name:V,message_id:I.assistantMessage.message.id,platform:K2.platform}})}),NX(I.tool,I.input,xB(I)).then(()=>{I.onAllow("permanent"),d()});break;case"no":io(Z).then((V)=>{r3({completion_type:"write_file_single",event:"reject",metadata:{language_name:V,message_id:I.assistantMessage.message.id,platform:K2.platform}})}),I.onReject(),d();break}}})))}async function io(I){let d=RA9(I);if(!d)return"unknown";return(await Promise.resolve().then(() => J1(UR(),1))).default.getLanguage(d.slice(1))?.name??"unknown"}var eZ=J1(u1(),1);function vA9(I){switch(I.tool){case R8:case p7:case Fd:return"file_path";case A7:case Kd:case zI:return"path";case RI:case VH:return"notebook_path"}return null}function EA9(I){switch(I.tool){case A7:case Kd:case zI:return!0}return!1}function MA9(I){let d=vA9(I),G=I.input;if(d&&d in G)if(typeof G[d]==="string")return BX(G[d]);else return BX(R0());return null}function pf2({toolUseConfirm:I,onDone:d,verbose:G}){let Z=MA9(I);if(!Z)return eZ.default.createElement(ko,{toolUseConfirm:I,onDone:d,verbose:G});return eZ.default.createElement(LA9,{toolUseConfirm:I,path:Z,onDone:d,verbose:G})}function SA9(I,d){if(I.tool.isReadOnly())return[];return As(d)?[{label:"Yes, and don't ask again for file edits this session",value:"yes-dont-ask-again"}]:[]}function LA9({toolUseConfirm:I,path:d,onDone:G,verbose:Z}){let C=I.tool.userFacingName(I.input),w=`${I.tool.isReadOnly()?"Read":"Edit"} ${EA9(I)?"files":"file"}`,B=eZ.useMemo(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return RH(I,B),eZ.default.createElement(p,{flexDirection:"column",borderStyle:"round",borderColor:QX(I.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1},eZ.default.createElement(jB,{title:w,riskScore:I.riskScore}),eZ.default.createElement(p,{flexDirection:"column",paddingX:2,paddingY:1},eZ.default.createElement(u,null,C,"(",I.tool.renderToolUseMessage(I.input,{verbose:Z}),")")),eZ.default.createElement(p,{flexDirection:"column"},eZ.default.createElement(u,null,"Do you want to proceed?"),eZ.default.createElement(Q6,{options:[{label:"Yes",value:"yes"},...SA9(I,d),{label:`No, and tell Claude what to do differently (${c0.bold.hex(r1().warning)("esc")})`,value:"no"}],onChange:(A)=>{switch(A){case"yes":r3({completion_type:"tool_use_single",event:"accept",metadata:{language_name:"none",message_id:I.assistantMessage.message.id,platform:K2.platform}}),I.onAllow("temporary"),G();break;case"yes-dont-ask-again":r3({completion_type:"tool_use_single",event:"accept",metadata:{language_name:"none",message_id:I.assistantMessage.message.id,platform:K2.platform}}),Vs(),I.onAllow("permanent"),G();break;case"no":r3({completion_type:"tool_use_single",event:"reject",metadata:{language_name:"none",message_id:I.assistantMessage.message.id,platform:K2.platform}}),I.onReject(),G();break}}})))}function yA9(I){switch(I){case p7:return mf2;case R8:return cf2;case G5:return jf2;case A7:case Kd:case zI:case Fd:case VH:case RI:return pf2;default:return ko}}function xB(I){return I.commandPrefix&&!I.commandPrefix.commandInjectionDetected&&I.commandPrefix.commandPrefix||null}function if2({toolUseConfirm:I,onDone:d,verbose:G}){C4((W,w)=>{if(w.ctrl&&W==="c")d(),I.onReject()});let Z=I.tool.userFacingName(I.input);xo(`Claude needs your permission to use ${Z}`);let C=yA9(I.tool);return oK1.createElement(C,{toolUseConfirm:I,onDone:d,verbose:G})}import{exec as PA9}from"child_process";import{promisify as $A9}from"util";var nf2=$A9(PA9);async function uA9(){if(K2.platform==="windows")return[];if(!await eG())return[];try{let I="",{stdout:d}=await nf2("git log -n 1000 --pretty=format: --name-only --diff-filter=M --author=$(git config user.email) | sort | uniq -c | sort -nr | head -n 20",{cwd:R0(),encoding:"utf8"});if(I=`Files modified by user: +`+d,d.split(` +`).length<10){let{stdout:W}=await nf2("git log -n 1000 --pretty=format: --name-only --diff-filter=M | sort | uniq -c | sort -nr | head -n 20",{cwd:R0(),encoding:"utf8"});I+=` + +Files modified by other users: +`+W}let Z=(await jZ({systemPrompt:["You are an expert at analyzing git history. Given a list of files and their modification counts, return exactly five filenames that are frequently modified and represent core application logic (not auto-generated files, dependencies, or configuration). Make sure filenames are diverse, not all in the same folder, and are a mix of user and other users. Return only the filenames' basenames (without the path) separated by newlines with no explanation."],userPrompt:I})).message.content[0];if(!Z||Z.type!=="text")return[];let C=Z.text.trim().split(` +`);if(C.length<5)return[];return C}catch(I){return X0(I),[]}}var no=a2(async()=>{let I=q2(),d=I5(),G=Date.now(),Z=d.exampleFilesGeneratedAt??0,C=604800000;if(G-Z>604800000)d.exampleFiles=[];let W={...I,numStartups:(I.numStartups??0)+1};if(p4(W),!d.exampleFiles?.length)uA9().then((B)=>{if(B.length)o9({...I5(),exampleFiles:B,exampleFilesGeneratedAt:Date.now()})});let w=d.exampleFiles?.length?mF(d.exampleFiles):"";return["fix lint errors","fix typecheck errors",`how does ${w} work?`,`refactor ${w}`,"how do I log an error?",`edit ${w} to...`,`write a test for ${w}`,"create a util logging.py that..."]});var Y2=J1(u1(),1);var tK1=J1(u1(),1);var TA9=100;function eK1(){return I5().history??[]}function vH(I){let d=I5(),G=d.history??[];if(G[0]===I)return;G.unshift(I),o9({...d,history:G.slice(0,TA9)})}function rf2(I,d){let[G,Z]=tK1.useState(0),[C,W]=tK1.useState(""),w=(X)=>{if(X!==void 0){let _=X.startsWith("!")?"bash":"prompt",F=_==="bash"?X.slice(1):X;I(F,_)}};function B(){let X=eK1();if(G1){let _=G-1;Z(_),w(X[_-1])}else if(G===1)Z(0),w(C)}function V(){W(""),Z(0)}return{historyIndex:G,setHistoryIndex:Z,onHistoryUp:B,onHistoryDown:A,resetHistory:V}}var cu=J1(u1(),1);function af2({commands:I,onInputChange:d,onSubmit:G,setCursorOffset:Z}){let[C,W]=cu.useState([]),[w,B]=cu.useState(-1);function A(X){if(X.startsWith("/")){let _=X.slice(1).toLowerCase(),g=I.filter((K)=>!K.isHidden).filter((K)=>{let Q=[K.userFacingName()];if(K.aliases)Q.push(...K.aliases);return Q.some((E)=>E.toLowerCase().startsWith(_))}).map((K)=>K.userFacingName());W(g);let J=w>-1?g.indexOf(C[w]):0;if(J>-1)B(J);else B(0)}else W([]),B(-1)}C4((X,_)=>{if(C.length>0){if(_.downArrow)return B((F)=>F>=C.length-1?0:F+1),!0;else if(_.upArrow)return B((F)=>F<=0?C.length-1:F-1),!0;else if(_.tab||_.return&&w>=0){if(w===-1&&_.tab)B(0);let F=w>=0?w:0,g=C[F];if(!g)return!0;let J="/"+g+" ";if(d(J),Z(J.length),W([]),B(-1),_.return){let K=No(g,I);if(K.type!=="prompt"||(K.argNames??[]).length===0)G(J,!0)}return!0}}});let V=cu.useCallback(()=>{W([]),B(-1)},[]);return{suggestions:C,selectedSuggestion:w,updateSuggestions:A,clearSuggestions:V}}var V7=J1(u1(),1);var sf2=J1(u1(),1);class ro extends sf2.Component{constructor(I){super(I);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(I){bl(I)}render(){if(this.state.hasError)return null;return this.props.children}}var J9=J1(u1(),1);var of2=J1(Fk(),1),ao=J1(u1(),1);function IN1({debug:I,isUpdating:d,onChangeIsUpdating:G,onAutoUpdaterResult:Z,autoUpdaterResult:C}){let W=r1(),[w,B]=ao.useState({}),A=J9.useCallback(async()=>{if(d)return;let V={ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,X=await fz2(),_=await Ul1();if(B({global:V,latest:X}),!_&&V&&X&&!of2.gte(V,X)){let F=Date.now();G(!0);let g=await rs();if(G(!1),g==="success")I0("tengu_auto_updater_success",{fromVersion:V,toVersion:X,durationMs:String(Date.now()-F)});else I0("tengu_auto_updater_fail",{fromVersion:V,attemptedVersion:X,status:g,durationMs:String(Date.now()-F)});Z({version:X,status:g})}},[Z]);if(ao.useEffect(()=>{A()},[A]),Uo(A,1800000),I)return J9.createElement(p,{flexDirection:"row"},J9.createElement(u,{dimColor:!0},"globalVersion: ",w.global," · latestVersion:"," ",w.latest));if(!C?.version&&(!w.global||!w.latest))return null;if(!C?.version&&!d)return null;return J9.createElement(p,{flexDirection:"row"},I&&J9.createElement(u,{dimColor:!0},"globalVersion: ",w.global," · latestVersion:"," ",w.latest),d&&J9.createElement(J9.Fragment,null,J9.createElement(p,null,J9.createElement(u,{color:W.secondaryText,dimColor:!0,wrap:"end"},"Auto-updating to v",w.latest,"…"))),C?.status==="success"&&C?.version?J9.createElement(u,{color:W.success},"✓ Update installed · Restart to apply"):null,(C?.status==="install_failed"||C?.status==="no_permissions")&&J9.createElement(u,{color:W.error},"✗ Auto-update failed · Try ",J9.createElement(u,{bold:!0},"claude doctor")," or"," ",J9.createElement(u,{bold:!0},"npm i -g ",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.PACKAGE_URL)))}var pu=J1(u1(),1);var dN1=190000,GN1=dN1*0.6,OA9=dN1*0.8;function ZN1({tokenUsage:I}){let d=r1();if(I=OA9;return pu.createElement(p,{flexDirection:"row"},pu.createElement(u,{color:G?d.error:d.warning},"Context low (",Math.max(0,100-Math.round(I/dN1*100)),"% remaining) · Run /compact to compact & continue"))}function ef2(I){return`[Pasted text +${(I.match(/\r\n|\r|\n/g)||[]).length} lines] `}function mA9({commands:I,forkNumber:d,messageLogName:G,isDisabled:Z,isLoading:C,onQuery:W,debug:w,verbose:B,messages:A,setToolJSX:V,onAutoUpdaterResult:X,autoUpdaterResult:_,tools:F,input:g,onInputChange:J,mode:K,onModeChange:Q,submitCount:E,onSubmitCountChange:S,setIsLoading:P,setAbortController:$,onShowMessageSelector:h,setForkConvoWithMessagesOnTheNextRender:O,readFileTimestamps:T}){let[V1,c]=V7.useState(!1),[c1,o1]=V7.useState({show:!1}),[a1,f1]=V7.useState({show:!1}),[r,A1]=V7.useState(null),[m1,T1]=V7.useState(""),[e1,F0]=V7.useState(g.length),[P0,B0]=V7.useState(null);V7.useEffect(()=>{no().then((W1)=>{T1(`Try "${mF(W1)}"`)})},[]);let{columns:a0}=G9(),e=V7.useMemo(()=>Math.max(...I.map((W1)=>W1.userFacingName().length))+5,[I]),{suggestions:G0,selectedSuggestion:H1,updateSuggestions:j1,clearSuggestions:i1}=af2({commands:I,onInputChange:J,onSubmit:F1,setCursorOffset:F0}),E0=V7.useCallback((W1)=>{if(W1.startsWith("!")){Q("bash");return}j1(W1),J(W1)},[Q,J,j1]),{resetHistory:k,onHistoryUp:a,onHistoryDown:Z1}=rf2((W1,U1)=>{E0(W1),Q(U1)},g),Q1=()=>{if(G0.length<=1)a()},N1=()=>{if(G0.length<=1)Z1()};async function F1(W1,U1=!1){if(W1==="")return;if(Z)return;if(C)return;if(G0.length>0&&!U1)return;if(["exit","quit",":q",":q!",":wq",":wq!"].includes(W1.trim()))lA9();let L1=W1;if(P0){let i0=ef2(P0);if(L1.includes(i0))L1=L1.replace(i0,P0)}J(""),Q("prompt"),i1(),A1(null),B0(null),S((i0)=>i0+1),P(!0);let D0=new AbortController;$(D0);let O0=await K6(),k0=await Qo(L1,K,V,{options:{commands:I,forkNumber:d,messageLogName:G,tools:F,verbose:B,slowAndCapableModel:O0,maxThinkingTokens:0},messageId:void 0,abortController:D0,readFileTimestamps:T,setForkConvoWithMessagesOnTheNextRender:O},r??null);if(k0.length)W(k0,D0);else{vH(W1),k();return}for(let i0 of k0)if(i0.type==="user"){let s0=K==="bash"?`!${W1}`:W1;vH(s0),k()}}function O1(W1){Q("prompt"),A1(W1)}function K1(W1){let U1=W1.replace(/\r/g,` +`),L1=ef2(U1),D0=g.slice(0,e1)+L1+g.slice(e1);J(D0),F0(e1+L1.length),B0(U1)}C4((W1,U1)=>{if(g===""&&(U1.escape||U1.backspace||U1.delete))Q("prompt");if(U1.escape&&A.length>0&&!g&&!C)h()});let R1=G9().columns-6,h1=V7.useMemo(()=>oD(A),[A]),j=r1();return Y2.createElement(p,{flexDirection:"column"},Y2.createElement(p,{alignItems:"flex-start",justifyContent:"flex-start",borderColor:K==="bash"?j.bashBorder:j.secondaryBorder,borderDimColor:!0,borderStyle:"round",marginTop:1,width:"100%"},Y2.createElement(p,{alignItems:"flex-start",alignSelf:"flex-start",flexWrap:"nowrap",justifyContent:"flex-start",width:3},K==="bash"?Y2.createElement(u,{color:j.bashBorder}," ! "):Y2.createElement(u,{color:C?j.secondaryText:void 0}," > ")),Y2.createElement(p,{paddingRight:1},Y2.createElement(mC,{multiline:!0,onSubmit:F1,onChange:E0,value:g,onHistoryUp:Q1,onHistoryDown:N1,onHistoryReset:()=>k(),placeholder:E>0?void 0:m1,onExit:()=>process.exit(0),onExitMessage:(W1,U1)=>o1({show:W1,key:U1}),onMessage:(W1,U1)=>f1({show:W1,text:U1}),onImagePaste:O1,columns:R1,isDimmed:Z||C,disableCursorMovementForUpDownKeys:G0.length>0,cursorOffset:e1,onChangeCursorOffset:F0,onPaste:K1}))),G0.length===0&&Y2.createElement(p,{flexDirection:"row",justifyContent:"space-between",paddingX:2,paddingY:0},Y2.createElement(p,{justifyContent:"flex-start",gap:1},c1.show?Y2.createElement(u,{dimColor:!0},"Press ",c1.key," again to exit"):a1.show?Y2.createElement(u,{dimColor:!0},a1.text):Y2.createElement(Y2.Fragment,null,Y2.createElement(u,{color:K==="bash"?j.bashBorder:void 0,dimColor:K!=="bash"},"! for bash mode"),Y2.createElement(u,{dimColor:!0},"· / for commands · esc to undo"))),Y2.createElement(ro,null,Y2.createElement(p,{justifyContent:"flex-end",gap:1},!_&&!V1&&!w&&h10&&Y2.createElement(p,{flexDirection:"row",justifyContent:"space-between",paddingX:2,paddingY:0},Y2.createElement(p,{flexDirection:"column"},G0.map((W1,U1)=>{let L1=I.find((D0)=>D0.userFacingName()===W1.replace("/",""));return Y2.createElement(p,{key:W1,flexDirection:a0<80?"column":"row"},Y2.createElement(p,{width:a0<80?void 0:e},Y2.createElement(u,{color:U1===H1?j.suggestion:void 0,dimColor:U1!==H1},"/",W1,L1?.aliases&&L1.aliases.length>0&&Y2.createElement(u,{dimColor:!0}," (",L1.aliases.join(", "),")"))),L1&&Y2.createElement(p,{width:a0-(a0<80?4:e+4),paddingLeft:a0<80?4:0},Y2.createElement(u,{color:U1===H1?j.suggestion:void 0,dimColor:U1!==H1,wrap:"wrap"},Y2.createElement(u,{dimColor:U1!==H1},L1.description,L1.type==="prompt"&&L1.argNames?.length?` (arguments: ${L1.argNames.join(", ")})`:null))))})),Y2.createElement(ro,null,Y2.createElement(p,{justifyContent:"flex-end",gap:1},Y2.createElement(ZN1,{tokenUsage:oD(A)}),Y2.createElement(IN1,{debug:w,onAutoUpdaterResult:X,autoUpdaterResult:_,isUpdating:V1,onChangeIsUpdating:c})))))}var tf2=V7.memo(mA9);function lA9(){fJ1(""),process.exit(0)}var Iq2=J1(u1(),1);function dq2(){Iq2.useEffect(()=>{let I=Math.round(process.uptime()*1000);I0("tengu_timer",{event:"startup",durationMs:String(I)})},[])}var iu=J1(u1(),1);function Gq2(){let[I,d]=iu.useState(()=>{return vw()?"loading":"missing"}),[G,Z]=iu.useState(null),C=iu.useCallback(async()=>{if(Lb()){d("valid");return}let W=vw();if(!W){d("missing");return}try{let B=await aK2(W)?"valid":"invalid";d(B);return}catch(w){Z(w),d("error");return}},[]);return{status:I,reverify:C,error:G}}function Zq2(I,d,G,Z,C,W,w){C4((B,A)=>{if(!A.escape)return;if(w?.aborted)return;if(!w)return;if(!C)return;if(W)return;I0("tengu_cancel",{}),I(null),d(null),G(null),Z()})}var Cq2=J1(u1(),1);function bA9(I){return Cq2.useCallback(async(d,G,Z,C)=>{return new Promise((W)=>{function w(){I0("tengu_tool_use_cancelled",{messageID:C.message.id,toolName:d.name})}function B(){W({result:!1,message:fu}),Z.abortController.abort()}if(Z.abortController.signal.aborted){w(),B();return}return UH(d,G,Z,C).then(async(A)=>{if(A.result){I0("tengu_tool_use_granted_in_config",{messageID:C.message.id,toolName:d.name}),W({result:!0});return}let[V,X]=await Promise.all([d.description(G),d===G5?fa(o$.parse(G).command,Z.abortController.signal):Promise.resolve(null)]);if(Z.abortController.signal.aborted){w(),B();return}I({assistantMessage:C,tool:d,description:V,input:G,commandPrefix:X,riskScore:null,onAbort(){w(),I0("tengu_tool_use_rejected_in_prompt",{messageID:C.message.id,toolName:d.name}),B()},onAllow(_){if(_==="permanent")I0("tengu_tool_use_granted_in_prompt_permanent",{messageID:C.message.id,toolName:d.name});else I0("tengu_tool_use_granted_in_prompt_temporary",{messageID:C.message.id,toolName:d.name});W({result:!0})},onReject(){I0("tengu_tool_use_rejected_in_prompt",{messageID:C.message.id,toolName:d.name}),B()}})}).catch((A)=>{if(A instanceof Ez)w(),B();else X0(A)})})},[I])}var Wq2=bA9;var wq2=J1(u1(),1);function Bq2(I,d,G){wq2.useEffect(()=>{Wz(DY(d,G,0),I.filter((Z)=>Z.type!=="progress"))},[I,d,G])}function so(I){return I.message.content.map((d)=>{if(d.type==="text")return"text";if(d.type==="tool_use")return d.name;return d.type})}async function Xq2(I,d,G){let Z=I.message.model,C=d.message.model,W=await qb();I0("tengu_binary_feedback",{msg_id_A:I.message.id,msg_id_B:d.message.id,choice:{"prefer-left":I.message.id,"prefer-right":d.message.id,neither:void 0,"no-preference":void 0}[G],choiceStr:G,gitHead:W?.commitHash,gitBranch:W?.branchName,gitRepoRemoteUrl:W?.remoteUrl||void 0,gitRepoIsHeadOnRemote:W?.isHeadOnRemote?.toString(),gitRepoIsClean:W?.isClean?.toString(),modelA:Z,modelB:C,temperatureA:String(t$),temperatureB:String(t$),seqA:String(so(I)),seqB:String(so(d))})}async function Aq2(I,d,G,Z){I0("tengu_binary_feedback_display_decision",{decision:I.toString(),reason:Z,msg_id_A:d.message.id,msg_id_B:G.message.id,seqA:String(so(d)),seqB:String(so(G))})}function hA9(I,d){return I.text===d.text}function jA9(I,d){if(I.type!==d.type)return!1;if(I.type==="text")return hA9(I,d);return d=d,I.name===d.name&&n01(I.input,d.input)}function Vq2(I,d){if(I.length!==d.length)return!1;return a01(I,d).every(([G,Z])=>jA9(G,Z))}function Yq2(I,d){let G=()=>Aq2(!0,I,d),Z=(B)=>Aq2(!1,I,d,B),C=I.message.content.filter((B)=>B.type!=="thinking"&&B.type!=="redacted_thinking"),W=d.message.content.filter((B)=>B.type!=="thinking"&&B.type!=="redacted_thinking");if(!(C.some((B)=>B.type==="tool_use")||W.some((B)=>B.type==="tool_use"))){if(Vq2(C,W))return Z("contents_identical"),!1;return G(),!0}if(Vq2(C.filter((B)=>B.type==="tool_use"),W.filter((B)=>B.type==="tool_use")))return Z("contents_identical"),!1;return G(),!0}function _q2(I,d,G){switch(G){case"prefer-left":return{message:I,shouldSkipPermissionCheck:!0};case"prefer-right":return{message:d,shouldSkipPermissionCheck:!0};case"no-preference":return{message:Math.random()<0.5?I:d,shouldSkipPermissionCheck:!1};case"neither":return{message:null,shouldSkipPermissionCheck:!1}}}var kA9=10;async function xA9(I,d,G){{let W=await d();if(I.abortController.signal.aborted)return{message:null,shouldSkipPermissionCheck:!1};return{message:W,shouldSkipPermissionCheck:!1}}let[Z,C]=await Promise.all([d(),d()]);if(I.abortController.signal.aborted)return{message:null,shouldSkipPermissionCheck:!1};if(C.isApiErrorMessage)return{message:Z,shouldSkipPermissionCheck:!1};if(Z.isApiErrorMessage)return{message:C,shouldSkipPermissionCheck:!1};if(!Yq2(Z,C))return{message:Z,shouldSkipPermissionCheck:!1};return await G(Z,C)}async function*cB(I,d,G,Z,C,W){let w=oK2(d,G);function B(){return bs(sR(I),w,C.options.maxThinkingTokens,C.options.tools,C.abortController.signal,{dangerouslySkipPermissions:C.options.dangerouslySkipPermissions??!1,model:C.options.slowAndCapableModel,prependCLISysprompt:!0})}let A=await xA9(C,B,W);if(A.message===null){yield q8(KW);return}let{message:V,shouldSkipPermissionCheck:X}=A;yield V;let _=V.message.content.filter((J)=>J.type==="tool_use");if(!_.length)return;let F=[];if(_.every((J)=>C.options.tools.find((K)=>K.name===J.name)?.isReadOnly())){for await(let J of cA9(_,V,Z,C,X))if(yield J,J.type==="user")F.push(J)}else for await(let J of pA9(_,V,Z,C,X))if(yield J,J.type==="user")F.push(J);if(C.abortController.signal.aborted){yield q8(_X);return}let g=F.sort((J,K)=>{let Q=_.findIndex((S)=>S.id===J.message.content[0].id),E=_.findIndex((S)=>S.id===K.message.content[0].id);return Q-E});yield*await cB([...I,V,...g],d,G,Z,C,W)}async function*cA9(I,d,G,Z,C){yield*GN2(I.map((W)=>Dq2(W,new Set(I.map((w)=>w.id)),d,G,Z,C)),kA9)}async function*pA9(I,d,G,Z,C){for(let W of I)yield*Dq2(W,new Set(I.map((w)=>w.id)),d,G,Z,C)}async function*Dq2(I,d,G,Z,C,W){let w=I.name,B=C.options.tools.find((V)=>V.name===w);if(!B){I0("tengu_tool_use_error",{error:`No such tool available: ${w}`,messageID:G.message.id,toolName:w,toolUseID:I.id}),yield p9([{type:"tool_result",content:`Error: No such tool available: ${w}`,is_error:!0,tool_use_id:I.id}]);return}let A=I.input;try{if(C.abortController.signal.aborted){I0("tengu_tool_use_cancelled",{toolName:B.name,toolUseID:I.id}),yield p9([fQ2(I.id)]);return}for await(let V of nA9(B,I.id,d,A,C,Z,G,W))yield V}catch(V){X0(V)}}function iA9(I,d){switch(I){case G5:{let{command:G,timeout:Z}=G5.inputSchema.parse(d);return{command:G.replace(`cd ${R0()} && `,""),...Z?{timeout:Z}:{}}}default:return d}}async function*nA9(I,d,G,Z,C,W,w,B){let A=I.inputSchema.safeParse(Z);if(!A.success){I0("tengu_tool_use_error",{error:`InputValidationError: ${A.error.message}`,messageID:w.message.id,toolName:I.name,toolInput:JSON.stringify(Z).slice(0,200)}),yield p9([{type:"tool_result",content:`InputValidationError: ${A.error.message}`,is_error:!0,tool_use_id:d}]);return}let V=iA9(I,Z),X=await I.validateInput?.(V,C);if(X?.result===!1){I0("tengu_tool_use_error",{error:X?.message.slice(0,2000),messageID:w.message.id,toolName:I.name,toolInput:JSON.stringify(Z).slice(0,200),...X?.meta??{}}),yield p9([{type:"tool_result",content:X.message,is_error:!0,tool_use_id:d}]);return}let _=B?{result:!0}:await W(I,V,C,w);if(_.result===!1){yield p9([{type:"tool_result",content:_.message,is_error:!0,tool_use_id:d}]);return}try{let F=I.call(V,C,W);for await(let g of F)switch(g.type){case"result":I0("tengu_tool_use_success",{messageID:w.message.id,toolName:I.name}),yield p9([{type:"tool_result",content:g.resultForAssistant,tool_use_id:d}],{data:g.data,resultForAssistant:g.resultForAssistant});return;case"progress":I0("tengu_tool_use_progress",{messageID:w.message.id,toolName:I.name}),yield QQ2(d,G,g.content,g.normalizedMessages,g.tools)}}catch(F){let g=rA9(F);X0(F),I0("tengu_tool_use_error",{error:g.slice(0,2000),messageID:w.message.id,toolName:I.name,toolInput:JSON.stringify(Z).slice(0,1000)}),yield p9([{type:"tool_result",content:g,is_error:!0,tool_use_id:d}])}}function rA9(I){if(!(I instanceof Error))return String(I);let d=[I.message];if("stderr"in I&&typeof I.stderr==="string")d.push(I.stderr);if("stdout"in I&&typeof I.stdout==="string")d.push(I.stdout);let G=d.filter(Boolean).join(` +`);if(G.length<=1e4)return G;let Z=5000,C=G.slice(0,Z),W=G.slice(-Z);return`${C} + +... [${G.length-1e4} characters truncated] ... + +${W}`}var oo=J1(u1(),1);var a3=J1(u1(),1);var LW=J1(u1(),1);function CN1({debug:I,erroredToolUseIDs:d,inProgressToolUseIDs:G,message:Z,normalizedMessages:C,tools:W,unresolvedToolUseIDs:w,verbose:B}){let{columns:A}=G9();return QW([Z]).filter((V)=>V.type!=="progress").map((V,X)=>LW.createElement(p,{flexDirection:"column",key:X},LW.createElement(fH,{addMargin:!1,erroredToolUseIDs:d,debug:I,inProgressToolUseIDs:G,message:V,messages:C,shouldAnimate:!1,shouldShowDot:!0,tools:W,unresolvedToolUseIDs:w,verbose:B,width:A/2-6}),LW.createElement(aA9,{message:V,verbose:B})))}function aA9({message:I,verbose:d}){let{columns:G}=G9();if(I.type!=="assistant")return null;let Z=I.message.content[0];switch(Z.type){case"tool_use":switch(Z.name){case p7.name:{let C=p7.inputSchema.safeParse(Z.input);if(!C.success)return null;return LW.createElement(ho,{file_path:C.data.file_path,new_string:C.data.new_string,old_string:C.data.old_string,verbose:d,width:G/2-12})}case R8.name:{let C=R8.inputSchema.safeParse(Z.input);if(!C.success)return null;return LW.createElement(po,{file_path:C.data.file_path,content:C.data.content,verbose:d,width:G/2-12})}default:return null}default:return null}}var sA9="https://go/cli-feedback";function oA9(){return[{label:"Choose for me",value:"no-preference"},{label:"Left option looks better",value:"prefer-left"},{label:"Right option looks better",value:"prefer-right"},{label:`Neither, and tell Claude what to do differently (${c0.bold.hex(r1().warning)("esc")})`,value:"neither"}]}function Hq2({m1:I,m2:d,onChoose:G,debug:Z,erroredToolUseIDs:C,inProgressToolUseIDs:W,normalizedMessages:w,tools:B,unresolvedToolUseIDs:A,verbose:V}){let X=r1(),[_,F]=a3.useState("no-preference"),[g,J]=a3.useState(void 0),K=P6(()=>process.exit(1));return C4((Q,E)=>{if(E.leftArrow)J("prefer-left");else if(E.rightArrow)J("prefer-right");else if(E.escape)G?.("neither")}),a3.default.createElement(a3.default.Fragment,null,a3.default.createElement(p,{flexDirection:"column",height:"100%",width:"100%",borderStyle:"round",borderColor:X.permission},a3.default.createElement(p,{width:"100%",justifyContent:"space-between",paddingX:1},a3.default.createElement(u,{bold:!0,color:X.permission},"[ANT-ONLY] Help train Claude"),a3.default.createElement(u,null,a3.default.createElement(Pg,{url:sA9},"[?]"))),a3.default.createElement(p,{flexDirection:"row",width:"100%",flexGrow:1,paddingTop:1},a3.default.createElement(p,{flexDirection:"column",flexGrow:1,flexBasis:1,gap:1,borderStyle:_==="prefer-left"?"bold":"single",borderColor:_==="prefer-left"?X.success:X.secondaryBorder,marginRight:1,padding:1},a3.default.createElement(CN1,{erroredToolUseIDs:C,debug:Z,inProgressToolUseIDs:W,message:I,normalizedMessages:w,tools:B,unresolvedToolUseIDs:A,verbose:V})),a3.default.createElement(p,{flexDirection:"column",flexGrow:1,flexBasis:1,gap:1,borderStyle:_==="prefer-right"?"bold":"single",borderColor:_==="prefer-right"?X.success:X.secondaryBorder,marginLeft:1,padding:1},a3.default.createElement(CN1,{erroredToolUseIDs:C,debug:Z,inProgressToolUseIDs:W,message:d,normalizedMessages:w,tools:B,unresolvedToolUseIDs:A,verbose:V}))),a3.default.createElement(p,{flexDirection:"column",paddingTop:1,paddingX:1},a3.default.createElement(u,null,"How do you want to proceed?"),a3.default.createElement(N_,{options:oA9(),onFocus:F,focusValue:g,onChange:G}))),K.pending?a3.default.createElement(p,{marginLeft:3},a3.default.createElement(u,{dimColor:!0},"Press ",K.keyName," again to exit")):a3.default.createElement(u,null," "))}function Fq2({m1:I,m2:d,resolve:G,debug:Z,erroredToolUseIDs:C,inProgressToolUseIDs:W,normalizedMessages:w,tools:B,unresolvedToolUseIDs:A,verbose:V}){let X=oo.useCallback((_)=>{Xq2(I,d,_),G(_q2(I,d,_))},[I,d,G]);return xo("Claude needs your input on a response comparison"),oo.default.createElement(Hq2,{debug:Z,erroredToolUseIDs:C,inProgressToolUseIDs:W,m1:I,m2:d,normalizedMessages:w,tools:B,unresolvedToolUseIDs:A,verbose:V,onChoose:X})}async function nu(I){if(await VK.isEnabled())return I0("tengu_thinking",{method:"scratchpad",tokenCount:"0",messageId:FG(I),provider:b9?"bedrock":h9?"vertex":"1p"}),0;let d=lA(I);if(d?.type!=="user"||typeof d.message.content!=="string")return I0("tengu_thinking",{method:"scratchpad",tokenCount:"0",messageId:FG(I),provider:b9?"bedrock":h9?"vertex":"1p"}),0;let G=d.message.content.toLowerCase();if(G.includes("think harder")||G.includes("think intensely")||G.includes("think longer")||G.includes("think really hard")||G.includes("think super hard")||G.includes("think very hard")||G.includes("ultrathink"))return I0("tengu_thinking",{method:"scratchpad",tokenCount:"31999",messageId:FG(I),provider:b9?"bedrock":h9?"vertex":"1p"}),31999;if(G.includes("think about it")||G.includes("think a lot")||G.includes("think hard")||G.includes("think more")||G.includes("megathink"))return I0("tengu_thinking",{method:"scratchpad",tokenCount:"10000",messageId:FG(I),provider:b9?"bedrock":h9?"vertex":"1p"}),1e4;if(G.includes("think"))return I0("tengu_thinking",{method:"scratchpad",tokenCount:"4000",messageId:FG(I),provider:b9?"bedrock":h9?"vertex":"1p"}),4000;return I0("tengu_thinking",{method:"scratchpad",tokenCount:"0",messageId:FG(I),provider:b9?"bedrock":h9?"vertex":"1p"}),0}function cJ1({commands:I,dangerouslySkipPermissions:d,debug:G=!1,initialForkNumber:Z=0,initialPrompt:C,messageLogName:W,shouldShowPromptInput:w,tools:B,verbose:A,initialMessages:V,mcpClients:X=[],isDefaultModel:_=!0}){let F=A??q2().verbose,[g,J]=h5.useState(w21(W,Z,0)),[K,Q]=h5.useState(null),[E,S]=h5.useState(null),[P,$]=h5.useState(!1),[h,O]=h5.useState(null),[T,V1]=h5.useState(null),[c,c1]=h5.useState(null),[o1,a1]=h5.useState(V??[]),[f1,r]=h5.useState(""),[A1,m1]=h5.useState("prompt"),[T1,e1]=h5.useState(0),[F0,P0]=h5.useState(!1),[B0,a0]=h5.useState(!1),[e,G0]=h5.useState(q2().hasAcknowledgedCostThreshold),[H1,j1]=h5.useState(null),i1=h5.useCallback((U1,L1)=>{return new Promise((D0)=>{j1({m1:U1,m2:L1,resolve:D0})})},[]),E0=h5.useRef({}),{status:k,reverify:a}=Gq2();function Z1(){if(!P)return;if($(!1),c)c.onAbort();else E?.abort()}Zq2(V1,c1,j1,Z1,P,F0,E?.signal),h5.useEffect(()=>{if(K)J((U1)=>U1+1),Q(null),a1(K)},[K]),h5.useEffect(()=>{if(Da()>=5&&!B0&&!e)I0("tengu_cost_threshold_reached",{}),a0(!0)},[o1,B0,e]);let Q1=Wq2(c1);async function N1(){if(a(),!C)return;$(!0);let U1=new AbortController;S(U1);let L1=await K6(),D0=await Qo(C,"prompt",V1,{abortController:U1,options:{commands:I,forkNumber:g,messageLogName:W,tools:B,verbose:F,slowAndCapableModel:L1,maxThinkingTokens:0},messageId:FG(o1),setForkConvoWithMessagesOnTheNextRender:Q,readFileTimestamps:E0.current},null);if(D0.length){for(let a5 of D0)if(a5.type==="user")vH(C);if(a1((a5)=>[...a5,...D0]),D0[D0.length-1].type==="assistant"){S(null),$(!1);return}let[k0,i0,s0,P2]=await Promise.all([iR(),j7(),K6(),nu([...o1,...D0])]);for await(let a5 of cB([...o1,...D0],k0,i0,Q1,{options:{commands:I,forkNumber:g,messageLogName:W,tools:B,slowAndCapableModel:s0,verbose:F,dangerouslySkipPermissions:d,maxThinkingTokens:P2},messageId:FG([...o1,...D0]),readFileTimestamps:E0.current,abortController:U1,setToolJSX:V1},i1))a1((n0)=>[...n0,a5])}else vH(C);G0(q2().hasAcknowledgedCostThreshold||!1),$(!1)}async function F1(U1,L1){a1((P2)=>[...P2,...U1]),zQ();let D0=U1[U1.length-1];if(D0.type==="user"&&typeof D0.message.content==="string")WN2(D0.message.content);if(D0.type==="assistant"){S(null),$(!1);return}let[O0,k0,i0,s0]=await Promise.all([iR(),j7(),K6(),nu([...o1,D0])]);for await(let P2 of cB([...o1,D0],O0,k0,Q1,{options:{commands:I,forkNumber:g,messageLogName:W,tools:B,slowAndCapableModel:i0,verbose:F,dangerouslySkipPermissions:d,maxThinkingTokens:s0},messageId:FG([...o1,D0]),readFileTimestamps:E0.current,abortController:L1,setToolJSX:V1},i1))a1((a5)=>[...a5,P2]);$(!1)}nC2(),h5.useEffect(()=>{W50(()=>o1),w50(a1)},[o1]),Bq2(o1,W,g),dq2(),h5.useEffect(()=>{N1()},[]);let O1=h5.useMemo(()=>QW(o1).filter(fo),[o1]),K1=h5.useMemo(()=>Io(O1),[O1]),R1=h5.useMemo(()=>UQ2(O1),[O1]),h1=h5.useMemo(()=>new Set(vQ2(O1).map((U1)=>U1.message.content[0].id)),[O1]),j=h5.useMemo(()=>{return[{type:"static",jsx:g4.createElement(p,{flexDirection:"column",key:`logo${g}`},g4.createElement(G50,{mcpClients:X,isDefaultModel:_}),g4.createElement(i81,{workspaceDir:t7()}))},...qQ2(O1).map((U1)=>{let L1=zK1(U1),D0=U1.type==="progress"?U1.content.message.content[0]?.type==="text"&&U1.content.message.content[0].text===KW?g4.createElement(fH,{message:U1.content,messages:U1.normalizedMessages,addMargin:!1,tools:U1.tools,verbose:F??!1,debug:G,erroredToolUseIDs:new Set,inProgressToolUseIDs:new Set,unresolvedToolUseIDs:new Set,shouldAnimate:!1,shouldShowDot:!1}):g4.createElement(Eo,null,g4.createElement(fH,{message:U1.content,messages:U1.normalizedMessages,addMargin:!1,tools:U1.tools,verbose:F??!1,debug:G,erroredToolUseIDs:new Set,inProgressToolUseIDs:new Set,unresolvedToolUseIDs:new Set([U1.content.message.content[0].id]),shouldAnimate:!1,shouldShowDot:!1})):g4.createElement(fH,{message:U1,messages:O1,addMargin:!0,tools:B,verbose:F,debug:G,erroredToolUseIDs:h1,inProgressToolUseIDs:R1,shouldAnimate:!T&&!c&&!F0&&(!L1||R1.has(L1)),shouldShowDot:!0,unresolvedToolUseIDs:K1}),O0=eA9(U1,O1,K1)?"static":"transient";if(G)return{type:O0,jsx:g4.createElement(p,{borderStyle:"single",borderColor:O0==="static"?"green":"red",key:U1.uuid,width:"100%"},D0)};return{type:O0,jsx:g4.createElement(p,{key:U1.uuid,width:"100%"},D0)}})]},[g,O1,B,F,G,h1,R1,T,c,F0,K1,X,_]),W1=!P&&B0;return g4.createElement(g4.Fragment,null,g4.createElement(DQ,{key:`static-messages-${g}`,items:j.filter((U1)=>U1.type==="static")},(U1)=>U1.jsx),j.filter((U1)=>U1.type==="transient").map((U1)=>U1.jsx),g4.createElement(p,{borderColor:"red",borderStyle:G?"single":void 0,flexDirection:"column",width:"100%"},!T&&!c&&!H1&&P&&g4.createElement(ns,null),T?T.jsx:null,!T&&H1&&!F0&&g4.createElement(Fq2,{m1:H1.m1,m2:H1.m2,resolve:(U1)=>{H1.resolve(U1),setTimeout(()=>j1(null),0)},verbose:F,normalizedMessages:O1,tools:B,debug:G,erroredToolUseIDs:h1,inProgressToolUseIDs:R1,unresolvedToolUseIDs:K1}),!T&&c&&!F0&&!H1&&g4.createElement(if2,{toolUseConfirm:c,onDone:()=>c1(null),verbose:F}),!T&&!c&&!F0&&!H1&&W1&&g4.createElement(d50,{onDone:()=>{a0(!1),G0(!0);let U1=q2();p4({...U1,hasAcknowledgedCostThreshold:!0}),I0("tengu_cost_threshold_acknowledged",{})}}),!c&&!T?.shouldHidePromptInput&&w&&!F0&&!H1&&!W1&&g4.createElement(g4.Fragment,null,g4.createElement(tf2,{commands:I,forkNumber:g,messageLogName:W,tools:B,isDisabled:k==="invalid",isLoading:P,onQuery:F1,debug:G,verbose:F,messages:o1,setToolJSX:V1,onAutoUpdaterResult:O,autoUpdaterResult:h,input:f1,onInputChange:r,mode:A1,onModeChange:m1,submitCount:T1,onSubmitCountChange:e1,setIsLoading:$,setAbortController:S,onShowMessageSelector:()=>P0((U1)=>!U1),setForkConvoWithMessagesOnTheNextRender:Q,readFileTimestamps:E0.current}))),F0&&g4.createElement(Vf2,{erroredToolUseIDs:h1,unresolvedToolUseIDs:K1,messages:sR(o1),onSelect:async(U1)=>{if(P0(!1),!o1.includes(U1))return;Z1(),setImmediate(async()=>{if(await $6(),a1([]),Q(o1.slice(0,o1.indexOf(U1))),typeof U1.message.content==="string")r(U1.message.content)})},onEscape:()=>P0(!1),tools:B}),g4.createElement(C6,null))}function eA9(I,d,G){switch(I.type){case"user":case"assistant":{let Z=zK1(I);if(!Z)return!0;if(G.has(Z))return!1;let C=d.find((W)=>W.type==="progress"&&W.toolUseID===Z);if(!C)return!0;return!gq2(G,C.siblingToolUseIDs)}case"progress":return!gq2(G,I.siblingToolUseIDs)}}function gq2(I,d){return I.size>0&&d.size>0&&[...I].some((G)=>d.has(G))}var $q2=J1(Pq2(),1),{program:Nm3,createCommand:zm3,createArgument:Qm3,createOption:fm3,CommanderError:qm3,InvalidArgumentError:Rm3,InvalidOptionArgumentError:Um3,Command:uq2,Argument:vm3,Option:Em3,Help:Mm3}=$q2.default;async function Tq2({commands:I,dangerouslySkipPermissions:d,hasPermissionsToUseTool:G,messageLogName:Z,prompt:C,cwd:W,tools:w,verbose:B=!1}){await Uw(W);let V=[p9(C)],[X,_,F]=await Promise.all([iR(),j7(),K6()]);for await(let K of cB(V,X,_,G,{options:{commands:I,tools:w,verbose:B,dangerouslySkipPermissions:d,slowAndCapableModel:F,forkNumber:0,messageLogName:"unused",maxThinkingTokens:0},abortController:new AbortController,messageId:void 0,readFileTimestamps:{}}))V.push(K);let g=lA(V);if(!g||g.type!=="assistant")throw new Error("Expected content to be an assistant message");if(g.message.content[0]?.type!=="text")throw new Error(`Expected first content item to be text, but got ${JSON.stringify(g.message.content[0],null,2)}`);let J=DY(Z,0,0);return Wz(J,V),{resultText:g.message.content[0].text,totalCost:Da(),messageHistoryFile:J}}var HN1=J1(u1(),1);import{EOL as jV9}from"os";async function DN1(I){return(await(I?to():mq2())).filter((d)=>d.name!==_U.name)}async function Oq2(I){return`Launch a new agent that has access to the following tools: ${(await DN1(I)).map((Z)=>Z.name).join(", ")}. When you are searching for a keyword or file and are not confident that you will find the right match on the first try, use the Agent tool to perform the search for you. For example: + +- If you are searching for a keyword like "config" or "logger", the Agent tool is appropriate +- If you want to read a specific file path, use the ${Fd.name} or ${A7.name} tool instead of the Agent tool, to find the match more quickly +- If you are searching for a specific class definition like "class Foo", use the ${A7.name} tool instead, to find the match more quickly + +Usage notes: +1. Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses +2. When the agent is done, it will return a single message back to you. The result returned by the agent is not visible to the user. To show the user the result, you should send a text message back to the user with a concise summary of the result. +3. Each agent invocation is stateless. You will not be able to send additional messages to the agent, nor will the agent be able to communicate with you outside of its final report. Therefore, your prompt should contain a highly detailed task description for the agent to perform autonomously and you should specify exactly what information the agent should return back to you in its final and only message to you. +4. The agent's outputs should generally be trusted${I?"":` +5. IMPORTANT: The agent can not use ${G5.name}, ${R8.name}, ${p7.name}, ${RI.name}, so can not modify files. If you want to use these tools, use them directly instead of going through the agent.`}`}var kV9=s.object({prompt:s.string().describe("The task for the agent to perform")}),_U={async prompt({dangerouslySkipPermissions:I}){return await Oq2(I)},name:qa,async description(){return"Launch a new task"},inputSchema:kV9,async*call({prompt:I},{abortController:d,options:{dangerouslySkipPermissions:G=!1,forkNumber:Z,messageLogName:C,verbose:W},readFileTimestamps:w}){let B=Date.now(),A=[p9(I)],V=await DN1(G);yield{type:"progress",content:q8(c0.dim("Initializing…")),normalizedMessages:QW(A),tools:V};let[X,_,F,g]=await Promise.all([iK2(),j7(),K6(),nu(A)]),J=0,K=a2(()=>eu1(C,Z));for await(let P of cB(A,X,_,UH,{abortController:d,options:{dangerouslySkipPermissions:G,forkNumber:Z,messageLogName:C,tools:V,commands:[],verbose:W,slowAndCapableModel:F,maxThinkingTokens:g},messageId:FG(A),readFileTimestamps:w})){if(A.push(P),Wz(DY(C,Z,K()),A.filter((h)=>h.type!=="progress")),P.type!=="assistant")continue;let $=QW(A);for(let h of P.message.content){if(h.type!=="tool_use")continue;J++,yield{type:"progress",content:$.find((O)=>O.type==="assistant"&&O.message.content[0]?.type==="tool_use"&&O.message.content[0].id===h.id),normalizedMessages:$,tools:V}}}let Q=QW(A),E=lA(A);if(E?.type!=="assistant")throw new Error("Last message was not an assistant message");if(E.message.content.some((P)=>P.type==="text"&&P.text===KW))yield{type:"progress",content:E,normalizedMessages:Q,tools:V};else{let P=[J===1?"1 tool use":`${J} tool uses`,cC2((E.message.usage.cache_creation_input_tokens??0)+(E.message.usage.cache_read_input_tokens??0)+E.message.usage.input_tokens+E.message.usage.output_tokens)+" tokens",X$(Date.now()-B)];yield{type:"progress",content:q8(`Done (${P.join(" · ")})`),normalizedMessages:Q,tools:V}}let S=E.message.content.filter((P)=>P.type==="text");yield{type:"result",data:S,normalizedMessages:Q,resultForAssistant:this.renderResultForAssistant(S),tools:V}},isReadOnly(){return!0},async isEnabled(){return!0},userFacingName(){return"Task"},needsPermissions(){return!1},renderResultForAssistant(I){return I},renderToolUseMessage({prompt:I},{verbose:d}){let G=I.split(jV9);return VU(!d&&G.length>1?G[0]+"…":I)},renderToolUseRejectedMessage(){return HN1.createElement(A3,null)}};var DK=J1(u1(),1);var lq2=`You are an expert software architect. Your role is to analyze technical requirements and produce clear, actionable implementation plans. +These plans will then be carried out by a junior software engineer so you need to be specific and detailed. However do not actually write the code, just explain the plan. + +Follow these steps for each request: +1. Carefully analyze requirements to identify core functionality and constraints +2. Define clear technical approach with specific technologies and patterns +3. Break down implementation into concrete, actionable steps at the appropriate level of abstraction + +Keep responses focused, specific and actionable. + +IMPORTANT: Do not ask the user if you should implement the changes at the end. Just provide the plan as described above. +IMPORTANT: Do not attempt to write the code or use any string modification tools. Just provide the plan.`,FN1="Your go-to tool for any technical or coding task. Analyzes requirements and breaks them down into clear, actionable implementation steps. Use this whenever you need help planning how to implement a feature, solve a technical problem, or structure your code.";var xV9=[G5,zI,Fd,R8,A7,Kd],cV9=s.strictObject({prompt:s.string().describe("The technical request or coding task to analyze"),context:s.string().describe("Optional context from previous conversation or system state").optional()}),bq2={name:"Architect",async description(){return FN1},inputSchema:cV9,isReadOnly(){return!0},userFacingName(){return"Architect"},async isEnabled(){return!1},needsPermissions(){return!1},async*call({prompt:I,context:d},G,Z){let C=d?`${d} + +${I}`:I,w=[p9(C)],B=(G.options.tools??[]).filter((X)=>xV9.map((_)=>_.name).includes(X.name)),A=await gH(cB(w,[lq2],await j7(),Z,{...G,options:{...G.options,tools:B}}));if(A.type!=="assistant")throw new Error("Invalid response from Claude API");let V=A.message.content.filter((X)=>X.type==="text");yield{type:"result",data:V,resultForAssistant:this.renderResultForAssistant(V)}},async prompt(){return FN1},renderResultForAssistant(I){return I},renderToolUseMessage(I){return Object.entries(I).map(([d,G])=>`${d}: ${JSON.stringify(G)}`).join(", ")},renderToolResultMessage(I){return DK.createElement(p,{flexDirection:"column",gap:1},DK.createElement(yB,{code:I.map((d)=>d.text).join(` +`),language:"markdown"}))},renderToolUseRejectedMessage(){return DK.createElement(A3,null)}};var pV9=J1(u1(),1);var kl3=s.strictObject({file_path:s.string().optional().describe("Optional path to a specific memory file to read")});var iV9=J1(u1(),1);var el3=s.strictObject({file_path:s.string().describe("Path to the memory file to write"),content:s.string().describe("Content to write to the file")});var de=J1(u1(),1);var hq2="Sends the user swag stickers with love from Anthropic.",jq2=`This tool should be used whenever a user expresses interest in receiving Anthropic or Claude stickers, swag, or merchandise. When triggered, it will display a shipping form for the user to enter their mailing address and contact details. Once submitted, Anthropic will process the request and ship stickers to the provided address. + +Common trigger phrases to watch for: +- "Can I get some Anthropic stickers please?" +- "How do I get Anthropic swag?" +- "I'd love some Claude stickers" +- "Where can I get merchandise?" +- Any mention of wanting stickers or swag + +The tool handles the entire request process by showing an interactive form to collect shipping information. + +NOTE: Only use this tool if the user has explicitly asked us to send or give them stickers. If there are other requests that include the word "sticker", but do not explicitly ask us to send them stickers, do not use this tool. +For example: +- "How do I make custom stickers for my project?" - Do not use this tool +- "I need to store sticker metadata in a database - what schema do you recommend?" - Do not use this tool +- "Show me how to implement drag-and-drop sticker placement with React" - Do not use this tool +`;var W2=J1(u1(),1);function Ie(I,d){let G=d.trim();if(!G&&I==="address2")return null;if(!G)return{message:"This field is required"};switch(I){case"email":{if(!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(G))return{message:"Please enter a valid email address"};break}case"name":if(G.length<2)return{message:"Name must be at least 2 characters long"};break;case"address1":{if(G.length<3)return{message:"Please enter a valid address"};let Z=/^P\.?O\.?\s*Box\s+\d+$/i.test(G),C=/\d+/.test(G);if(!Z&&!C)return{message:"Please include a number in the street address"};break}case"address2":break;case"city":if(G.length<2)return{message:"City name must be at least 2 characters long"};if(!/^[a-zA-Z\s.-]+$/.test(G))return{message:"City can only contain letters, spaces, periods, and hyphens"};break;case"state":{let Z=new Set(["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY","DC"]),C=G.toUpperCase();if(!Z.has(C))return{message:"Please enter a valid US state code (e.g. CA)"};break}case"usLocation":{let Z=G.toLowerCase();if(!["y","yes","n","no"].includes(Z))return{message:"Please enter y/yes or n/no"};break}case"zip":if(!/^\d{5}(-\d{4})?$/.test(G))return{message:"Please enter a valid ZIP code (e.g. 12345 or 12345-6789)"};break;case"phone":if(!/^(\+1\s?)?(\d{3}[-.\s]??)?\d{3}[-.\s]??\d{4}$/.test(G))return{message:"Please enter a valid US phone number"};break}return null}var DU=J1(u1(),1);var kq2=[` + .=#*=. :==. + -%%%%=. .#%#= + .=%%%#= :%%#: -=+- + ... .=%%%*- =@%+ :+%%%%. + :*%%+= .=%%%*- +%%= .=%%%%%= + .=#%%%#=..=#%%*: *%#:-*%%%%+: + .=*%%%%+==#%%+.%%+=#%%%%=. + :=#%%%##%%%*%%%%%%%*- . + -=#%%%%%%%%%%%%+-====+*%%%+. + .============-=*%%%%%%%%%%%%%%%%#+===: + =======+++****%%%%%%%%%%#+==:. + -=*%%%%%%%%%*+#%%%%%%%#*=. + .=+#%#++#%%%%%%%%+-..-==+*##=. + .=+%%%+=-+%#=*%+%%%##%+: + .+%%%*=. =*%+:-%%:=#%#==#%+: + .=+=. .=%%=. +%#. -*%%=:=*%+- + -*%#= .#%* :*%%+: :=*. + .=%%=. =%%= .=%%=. + :=. +%%= .-=: + =#+. +`,` + .=*+=. .==. + -####=. .*#*= + .=###*- :##*: -==- + ... .=###+- =%#+ :+####. + .+##+- .=###+: =##= .=*####- + .=*###*=..=*##+. +#*::+####=. + .=+###*=-=*##+.*#==*###*=. + .=*###**###+#######+- + :=*############+--====*###=. + .===========--=+################*+===. + -=========++++##########*+==. + :=*#########*+*#######*+=. + .==*#*==*########=-..-===+**=. + .==*##+=:=#*-*#+###**#+: + .=###+=. -+#+::##:=*#*==*#=: + .===. .=##=. =#*. -+#*=:=+#=- + -+#*= .*#+ :+##+: :=*. + =#*=. =##= .=##=. + :=. =##= -=: + =*+. +`,` + .=+==. .=-. + :****= .+*+= + .=***+- :**+: -==: + ... .=***+: -**= :=****. + .+**=- .=***=: =**= .=*****- + .=+***+=..=+**=. =*+.:=****=. + ==****=-=+**=.**==+****=. + .=+***++***+*******=: + :=+************=:-====+***=. + .==========--:-+****************+====. + -============+**********+==-. + :=+*********+=+*******+==. + .-=+*+==+********=:..:====++=. + ==***=-:=*+-+*=***++*=: + .=***+=. -+*=::**.-+*+==+*=: + .===. .=**=. =*+. :+**=.=+*=- + :+*+- .+*+ :=**=: :=+. + =**=. -**= .=**=. + :-. =**- :=. + =+=. +`,` + .===-. .=-. + :++++= =+=- + .=+++=: .++=: :==: + .. .=+++=: -++= :=++++ + .=++=: .=+++=: =++= .=+++++: + .==+++==..==++=. =+=.:=++++=. + -=++++=--=++=.++=-=++++=. + .==+++==+++=+++++++=: + :==++++++++++++=::=====+++=. + .-====---=---:-=++++++++++++++++====-. + :=============++++++++++===-. + :==+++++++++===+++++++==-. + .-==+===+++++++++=: .:=======. + -=+++=-:=+=:=+=+++==+=: + .=+++==. :=+=::++.-=+====+=. + ===. .=++=. =++. :=++=.-=+=: + :=+=- .++= :=++=. .==. + -++=. -++= .=++=. + .-. =++- :-. + -==. +`,` + .===-. .-: + :====- ===- + .-====: .===. :==: + .. .-====: :=== .===== + .====: .-====. ===- .-=====: + -=====-..-====. ===..======. + -======:-====.===:=====-. + .-==================: + .===============::-========. + .-=---------:::=====================-. + :=-========================:. + .=======================-. + :================: .:-=====-. + -=====:.===:==========. + .=====-. :===.:==.:===--===. + -=-. .===-. === :====.-===: + :===: .=== .====. .== + -==-. :=== .====. + .:. ===: ::. + -==. +`,` + .-==: .-: + .====: ===: + :====: .===. .--. + . .-====. :=== .-==== + .====. :====. -==: .:=====: + -=====-. :====. ===..=====-. + :======::====.==-:=====: + .-==================. + .-=============-..:---====-. + .:-------::::.:===================--:. + .---------===============--:. + .-======================: + :-===--==========. ..:--===-. + :=====:.-==:==-=======. + .-====:. .===..==.:===::==-. + --:. .-==-. -== .===-.:==-. + .===: === .====. .-= + :==-. :==- .-==-. + .:. -==: .:. + :== +`,` + :--: .:. + .===-: -=-. + :===-. .==-. .::. + . :-==-. .==: .:-=== + .-==:. :-==-. :=-: :-===-. + :-===-:. :-==-. -=-..-====:. + .-===-:.:-==:.-=:.-===-: + .:-===---==:-==-=-=-. + .:-===========-:..::::--==-. + .:::::::::....--========-======-:::.. + .:::::::::-----========--::.. + .:--====-------=======--. + .:-=-::---==--=-:. .:::---:. + .:-=-:..:--.-=:-=---=-. + :===-:. .-=-..==..-=-::-=:. + :::. .:=-: :=- .-=-:.:---. + .-=-. -=- .-==-. .:- + :=-:. .-=: .:-=:. + ... :==. ... + .-- +`,` + .::. .. + .::::. :::. + .::::. :::. .... + .::::. .::. ..:::: + :::.. .:::.. .::. .:::::. + .:::::. .:::. .:: ..::::. + ..::::...:::. ::..:::::. + .:::::::::.:::::::.. + ..:::::::::::::.......::::. + ..............::::::::::::::::::.... + ...........::::::::::::::... + ..:::::::::::.::::::::::. + ..:::..:::::::::.. .....::. + ..:::....::.::.::::::.. + .::::. .::...:: .:::..::. + ... .::. .:: .:::. .::.. + .:::. ::. ..::. .: + .::. .::. .::. + . .::. .. + .:. +`,` + + + + + + + + + + + + + + + + + + + + +`],xq2=[` @ +@ @ @ + @@@ +@ @ @ + @`,` * +* * * + *** +* * * + *`,` + ++ + + + +++ ++ + + + +`,` / +/ / / + /// +/ / / + /`,` | +| | | + ||| +| | | + |`,` \\ +\\ \\ \\ + \\\\\\ +\\ \\ \\ + \\`,` - +- - - + --- +- - - + -`];function cq2({size:I="small",cycles:d,color:G,intervalMs:Z}){let[C,W]=DU.default.useState(0),w=DU.default.useRef(1),B=DU.default.useRef(0),A=r1(),V=I==="large"?kq2:xq2;return DU.default.useEffect(()=>{let X=setInterval(()=>{W((_)=>{if(d!==void 0&&d!==null&&B.current>=d)return 0;if(_===V.length-1)w.current=-1,B.current+=1;if(_===0)w.current=1;return _+w.current})},Z||(I==="large"?100:200));return()=>clearInterval(X)},[V.length,d,Z,I]),DU.default.createElement(u,{color:G||A.claude},V[C])}function pq2({onSubmit:I,onClose:d}){let[G,Z]=W2.default.useState(""),{rows:C}=G9(),W=()=>{if(C>=50)return"large";else if(C>=35)return"medium";else return"small"},w=(T1)=>{let e1=encodeURIComponent(T1.name||""),F0=encodeURIComponent(T1.email||""),P0=encodeURIComponent(T1.phone||""),B0=encodeURIComponent(T1.address1||""),a0=encodeURIComponent(T1.address2||""),e=encodeURIComponent(T1.city||""),G0=encodeURIComponent(T1.state||""),H1=encodeURIComponent("USA");return`https://docs.google.com/forms/d/e/1FAIpQLSfYhWr1a-t4IsvS2FKyEH45HRmHKiPUycvAlFKaD0NugqvfDA/viewform?usp=pp_url&entry.2124017765=${e1}&entry.1522143766=${F0}&entry.1730584532=${P0}&entry.1700407131=${B0}&entry.109484232=${a0}&entry.1209468849=${e}&entry.222866183=${G0}&entry.1042966503=${H1}`},[B,A]=W2.default.useState({}),[V,X]=W2.default.useState("name"),[_,F]=W2.default.useState(""),[g,J]=W2.default.useState(0),[K,Q]=W2.default.useState(null),[E,S]=W2.default.useState(!1),[P,$]=W2.default.useState(!1),[h,O]=W2.default.useState("yes"),T=r1(),V1=[{key:"name",label:"Name"},{key:"usLocation",label:"Are you in the United States? (y/n)"},{key:"email",label:"Email"},{key:"phone",label:"Phone Number"},{key:"address1",label:"Address Line 1"},{key:"address2",label:"Address Line 2 (optional)"},{key:"city",label:"City"},{key:"state",label:"State"},{key:"zip",label:"ZIP Code"}],c=(T1)=>{let e1=V1.findIndex((a0)=>a0.key===T1),F0=e1+1;if(e1===-1)throw new Error("Invalid field state");let P0=V1[F0];if(!P0)throw new Error("Invalid field state");I0("sticker_form_field_completed",{field_name:T1,field_index:e1.toString(),next_field:P0.key,form_progress:`${F0}/${V1.length}`}),X(P0.key);let B0=B[P0.key]?.toString()||"";F(B0),J(B0.length),Q(null)};C4((T1,e1)=>{if(e1.escape||e1.ctrl&&(T1==="c"||T1==="d")){d();return}if(P&&e1.return){d();return}if(V==="usLocation"&&!E){if(e1.leftArrow||e1.rightArrow){O((P0)=>P0==="yes"?"no":"yes");return}if(e1.return){if(h==="yes"){let P0={...B,[V]:!0};A(P0),c(V)}else $(!0);return}let F0=T1.toLowerCase();if(["y","yes"].includes(F0)){let P0={...B,[V]:!0};A(P0),c(V);return}if(["n","no"].includes(F0)){$(!0);return}}if(!E){if(e1.tab){if(e1.shift){let e=V1.findIndex((i1)=>i1.key===V);if(e===-1)throw new Error("Invalid field state");let G0=(e-1+V1.length)%V1.length,H1=V1[G0];if(!H1)throw new Error("Invalid field index");X(H1.key);let j1=B[H1.key]?.toString()||"";F(j1),J(j1.length),Q(null);return}if(V!=="address2"&&V!=="usLocation"){let e=_.trim();if(Ie(V,e)){Q({message:"Please fill out this field before continuing"});return}let H1={...B,[V]:e};A(H1)}let F0=V1.findIndex((e)=>e.key===V);if(F0===-1)throw new Error("Invalid field state");let P0=(F0+1)%V1.length,B0=V1[P0];if(!B0)throw new Error("Invalid field index");X(B0.key);let a0=B[B0.key]?.toString()||"";F(a0),J(a0.length),Q(null);return}}if(E){if(e1.return)I(B)}});let c1=(T1)=>{if(!T1&&V==="address2"){let B0={...B,[V]:""};A(B0),c(V);return}let e1=Ie(V,T1);if(e1){Q(e1);return}if(V==="state"&&B.zip){if(Ie("zip",B.zip)){Q({message:"The existing ZIP code is not valid for this state"});return}}let F0={...B,[V]:T1};A(F0),Q(null);let P0=V1.findIndex((B0)=>B0.key===V);if(P0===-1)throw new Error("Invalid field state");if(P0T1.key===V);if(!o1)throw new Error("Invalid field state");if(E&&!G){let T1=w(B);Z(T1),I0("sticker_form_summary_reached",{fields_completed:Object.keys(B).length.toString()}),rR(T1).catch((e1)=>{X0(e1)})}let a1=`╔══════════════════════════════╗ +║ CLASSIFIED ║ +╚══════════════════════════════╝`,f1="You've discovered Claude's top secret sticker distribution operation!",r=()=>W2.default.createElement(W2.default.Fragment,null,W2.default.createElement(p,{flexDirection:"column",alignItems:"center",justifyContent:"center"},W2.default.createElement(u,null,a1),W2.default.createElement(u,{bold:!0,color:T.claude},f1)),!E&&W2.default.createElement(p,{justifyContent:"center"},W2.default.createElement(cq2,{size:W(),cycles:W()==="large"?4:void 0}))),A1=()=>W2.default.createElement(p,{marginLeft:1},P||E?W2.default.createElement(u,{color:T.suggestion,bold:!0},"Press Enter to return to base"):W2.default.createElement(u,{color:T.secondaryText},V==="usLocation"?W2.default.createElement(W2.default.Fragment,null,"←/→ arrows to select · Enter to confirm · Y/N keys also work · Esc Esc to abort mission"):W2.default.createElement(W2.default.Fragment,null,"Enter to continue · Tab/Shift+Tab to navigate · Esc to abort mission"))),m1=()=>{if(E)return W2.default.createElement(W2.default.Fragment,null,W2.default.createElement(p,null,W2.default.createElement(u,{color:T.suggestion,bold:!0},"Please review your shipping information:")),W2.default.createElement(p,{flexDirection:"column"},V1.filter((T1)=>T1.key!=="usLocation").map((T1)=>W2.default.createElement(p,{key:T1.key,marginLeft:3},W2.default.createElement(u,null,W2.default.createElement(u,{bold:!0,color:T.text},T1.label,":")," ",W2.default.createElement(u,{color:!B[T1.key]?T.secondaryText:T.text},B[T1.key]||"(empty)"))))),W2.default.createElement(p,{marginTop:1,marginBottom:1,flexDirection:"column"},W2.default.createElement(p,null,W2.default.createElement(u,{color:T.text},"Submit your sticker request:")),W2.default.createElement(p,{marginTop:1},W2.default.createElement(Pg,{url:G},W2.default.createElement(u,{color:T.success,underline:!0},"➜ Click here to open Google Form"))),W2.default.createElement(p,{marginTop:1},W2.default.createElement(u,{color:T.secondaryText,italic:!0},"(You can still edit your info on the form)"))));else if(P)return W2.default.createElement(W2.default.Fragment,null,W2.default.createElement(p,{marginY:1},W2.default.createElement(u,{color:T.error,bold:!0},"Mission Not Available")),W2.default.createElement(p,{flexDirection:"column",marginY:1},W2.default.createElement(u,{color:T.text},"We're sorry, but the Claude sticker deployment mission is only available within the United States."),W2.default.createElement(p,{marginTop:1},W2.default.createElement(u,{color:T.text},"Future missions may expand to other territories. Stay tuned for updates."))));else return W2.default.createElement(W2.default.Fragment,null,W2.default.createElement(p,{flexDirection:"column"},W2.default.createElement(u,{color:T.text},"Please provide your coordinates for the sticker deployment mission."),W2.default.createElement(u,{color:T.secondaryText},"Currently only shipping within the United States.")),W2.default.createElement(p,{flexDirection:"column"},W2.default.createElement(p,{flexDirection:"row",marginLeft:2},V1.map((T1,e1)=>W2.default.createElement(W2.default.Fragment,{key:T1.key},W2.default.createElement(u,{color:T1.key===V?T.suggestion:T.secondaryText},T1.key===V?`[${T1.label}]`:B[T1.key]?W2.default.createElement(u,{color:T.secondaryText},"●"):"○"),e1T1.key===V)+1," of"," ",V1.length))),W2.default.createElement(p,{flexDirection:"column",marginX:2},V==="usLocation"?W2.default.createElement(p,{flexDirection:"row"},W2.default.createElement(u,{color:h==="yes"?T.success:T.secondaryText,bold:!0},h==="yes"?"●":"○"," YES"),W2.default.createElement(u,null," "),W2.default.createElement(u,{color:h==="no"?T.error:T.secondaryText,bold:!0},h==="no"?"●":"○"," NO")):W2.default.createElement(mC,{value:_,onChange:F,onSubmit:c1,placeholder:o1.label,cursorOffset:g,onChangeCursorOffset:J,columns:40}),K&&W2.default.createElement(p,{marginTop:1},W2.default.createElement(u,{color:T.error,bold:!0},"✗ ",K.message))))};return W2.default.createElement(p,{flexDirection:"column",paddingLeft:1},W2.default.createElement(p,{borderColor:T.claude,borderStyle:"round",flexDirection:"column",gap:1,padding:1,paddingLeft:2,width:100},r(),m1()),A1())}var nV9=s.object({trigger:s.string()}),iq2={name:"StickerRequest",userFacingName:()=>"Stickers",description:async()=>hq2,inputSchema:nV9,isEnabled:async()=>{return await NY("tengu_sticker_easter_egg")},isReadOnly:()=>!1,needsPermissions:()=>!1,prompt:async()=>jq2,async*call(I,d){I0("sticker_request_form_opened",{});let G,Z=new Promise((W)=>{G=(w)=>W(w)});d.setToolJSX?.({jsx:de.default.createElement(pq2,{onSubmit:(W)=>{I0("sticker_request_form_completed",{has_address:Boolean(W.address1).toString(),has_optional_address:Boolean(W.address2).toString()}),G(!0),d.setToolJSX?.(null)},onClose:()=>{I0("sticker_request_form_cancelled",{}),G(!1),d.setToolJSX?.(null)}}),shouldHidePromptInput:!0});let C=await Z;if(!C)throw d.abortController.abort(),new Error("Sticker request cancelled");yield{type:"result",resultForAssistant:"Sticker request completed! Please tell the user that they will receive stickers in the mail if they have submitted the form!",data:{success:C}}},renderToolUseMessage(I){return""},renderToolUseRejectedMessage:(I)=>de.default.createElement(u,null,"  ⎿  ",de.default.createElement(u,{color:r1().error},"No (Sticker request cancelled)")),renderResultForAssistant:(I)=>I};var nq2=()=>{return[_U,G5,A7,Kd,zI,Fd,p7,R8,VH,RI,iq2,VK,...[]]},to=a2(async(I)=>{let d=[...nq2(),...await gQ2()];if(I)d.push(bq2);let G=await Promise.all(d.map((Z)=>Z.isEnabled()));return d.filter((Z,C)=>G[C])}),mq2=a2(async()=>{let I=nq2().filter((G)=>G.isReadOnly()),d=await Promise.all(I.map((G)=>G.isEnabled()));return I.filter((G,Z)=>d[Z])});import{cwd as HU}from"process";var U8=J1(u1(),1);import{homedir as rV9}from"os";function rq2({onDone:I}){let d=r1();U8.default.useEffect(()=>{I0("trust_dialog_shown",{})},[]);function G(C){let W=I5();switch(C){case"yes":{let w=rV9()===R0();if(I0("trust_dialog_accept",{isHomeDir:String(w)}),!w)o9({...W,hasTrustDialogAccepted:!0});I();break}case"no":{process.exit(1);break}}}let Z=P6(()=>process.exit(0));return C4((C,W)=>{if(W.escape){process.exit(0);return}}),U8.default.createElement(U8.default.Fragment,null,U8.default.createElement(p,{flexDirection:"column",gap:1,padding:1,borderStyle:"round",borderColor:d.warning},U8.default.createElement(u,{bold:!0,color:d.warning},"Do you trust the files in this folder?"),U8.default.createElement(u,{bold:!0},process.cwd()),U8.default.createElement(p,{flexDirection:"column",gap:1},U8.default.createElement(u,null,K4," may read files in this folder. Reading untrusted files may lead to ",K4," to behave in an unexpected ways."),U8.default.createElement(u,null,"With your permission ",K4," may execute files in this folder. Executing untrusted code is unsafe."),U8.default.createElement(z_,{url:"https://docs.anthropic.com/s/claude-code-security"})),U8.default.createElement(Q6,{options:[{label:"Yes, proceed",value:"yes"},{label:"No, exit",value:"no"}],onChange:(C)=>G(C)})),U8.default.createElement(p,{marginLeft:3},U8.default.createElement(u,{dimColor:!0},Z.pending?U8.default.createElement(U8.default.Fragment,null,"Press ",Z.keyName," again to exit"):U8.default.createElement(U8.default.Fragment,null,"Enter to confirm · Esc to exit"))))}var gN1=J1(u1(),1);class JN1 extends gu{constructor(I,d){var G;super(d);this._serverInfo=I,this._capabilities=(G=d===null||d===void 0?void 0:d.capabilities)!==null&&G!==void 0?G:{},this._instructions=d===null||d===void 0?void 0:d.instructions,this.setRequestHandler(pJ1,(Z)=>this._oninitialize(Z)),this.setNotificationHandler(nJ1,()=>{var Z;return(Z=this.oninitialized)===null||Z===void 0?void 0:Z.call(this)})}registerCapabilities(I){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Do(this._capabilities,I)}assertCapabilityForMethod(I){var d,G;switch(I){case"sampling/createMessage":if(!((d=this._clientCapabilities)===null||d===void 0?void 0:d.sampling))throw new Error(`Client does not support sampling (required for ${I})`);break;case"roots/list":if(!((G=this._clientCapabilities)===null||G===void 0?void 0:G.roots))throw new Error(`Client does not support listing roots (required for ${I})`);break;case"ping":break}}assertNotificationCapability(I){switch(I){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${I})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${I})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${I})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${I})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(I){switch(I){case"sampling/createMessage":if(!this._capabilities.sampling)throw new Error(`Server does not support sampling (required for ${I})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${I})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${I})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${I})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${I})`);break;case"ping":case"initialize":break}}async _oninitialize(I){let d=I.params.protocolVersion;return this._clientCapabilities=I.params.capabilities,this._clientVersion=I.params.clientInfo,{protocolVersion:Go.includes(d)?d:Yu,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},HX)}async createMessage(I,d){return this.request({method:"sampling/createMessage",params:I},IK1,d)}async listRoots(I,d){return this.request({method:"roots/list",params:I},GK1,d)}async sendLoggingMessage(I){return this.notification({method:"notifications/message",params:I})}async sendResourceUpdated(I){return this.notification({method:"notifications/resources/updated",params:I})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}import aq2 from"node:process";class KN1{constructor(I=aq2.stdin,d=aq2.stdout){this._stdin=I,this._stdout=d,this._readBuffer=new Ju,this._started=!1,this._ondata=(G)=>{this._readBuffer.append(G),this.processReadBuffer()},this._onerror=(G)=>{var Z;(Z=this.onerror)===null||Z===void 0||Z.call(this,G)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){var I,d;while(!0)try{let G=this._readBuffer.readMessage();if(G===null)break;(I=this.onmessage)===null||I===void 0||I.call(this,G)}catch(G){(d=this.onerror)===null||d===void 0||d.call(this,G)}}async close(){var I;if(this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0)this._stdin.pause();this._readBuffer.clear(),(I=this.onclose)===null||I===void 0||I.call(this)}send(I){return new Promise((d)=>{let G=Ho(I);if(this._stdout.write(G))d();else this._stdout.once("drain",d)})}}var sq2={readFileTimestamps:{}},oq2=[ts],Ge=[_U,G5,p7,Fd,A7,Kd,R8,zI];async function eq2(I){await Uw(I);let d=new JN1({name:"claude/tengu",version:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION},{capabilities:{tools:{}}});d.setRequestHandler(eJ1,async()=>{return{tools:await Promise.all(Ge.map(async(C)=>({...C,description:await C.description(s.object({})),inputSchema:KR(C.inputSchema)})))}}),d.setRequestHandler(tJ1,async(Z)=>{let{name:C,arguments:W}=Z.params,w=Ge.find((B)=>B.name===C);if(!w)throw new Error(`Tool ${C} not found`);try{if(!await w.isEnabled())throw new Error(`Tool ${C} is not enabled`);let B=await K6(),A=await w.validateInput?.(W??{},{abortController:new AbortController,options:{commands:oq2,tools:Ge,slowAndCapableModel:B,forkNumber:0,messageLogName:"unused",maxThinkingTokens:0},messageId:void 0,readFileTimestamps:sq2.readFileTimestamps});if(A&&!A.result)throw new Error(`Tool ${C} input is invalid: ${A.message}`);let V=w.call(W??{},{abortController:new AbortController,messageId:void 0,options:{commands:oq2,tools:Ge,slowAndCapableModel:await K6(),forkNumber:0,messageLogName:"unused",maxThinkingTokens:0},readFileTimestamps:sq2.readFileTimestamps},UH),X=await gH(V);if(X.type!=="result")throw new Error(`Tool ${C} did not return a result`);return{content:Array.isArray(X)?X.map((_)=>({type:"text",text:"text"in _?_.text:JSON.stringify(_)})):[{type:"text",text:typeof X==="string"?X:JSON.stringify(X.data)}]}}catch(B){return X0(B),{isError:!0,content:[{type:"text",text:`Error: ${B instanceof Error?B.message:String(B)}`}]}}});async function G(){let Z=new KN1;await d.connect(Z)}return await G()}import{promises as tq2}from"fs";import{join as aV9}from"path";var sV9=2592000000;function oV9(I){let d=I.split(".")[0].replace(/T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z/,"T$1:$2:$3.$4Z");return new Date(d)}async function eV9(){let I=_Y.messages(),d=_Y.errors(),G=new Date(Date.now()-sV9),Z={messages:0,errors:0};for(let C of[I,d])try{let W=await tq2.readdir(C);for(let w of W)try{if(oV9(w)W!==I);if(Z!==C.length)return G.allowedTools=C,d.saveCurrentProjectConfig(G),{success:!0,message:`Removed ${I} from the list of approved tools`};else return{success:!1,message:`${I} was not in the list of approved tools`}}var ZX9=J1(u1(),1);var dX9=J1(u1(),1);var tV9=J1(u1(),1);var GX9=J1(u1(),1);var UI=J1(u1(),1);import{writeFileSync as CX9}from"fs";function WX9({filePath:I,errorDescription:d,onExit:G,onReset:Z}){let C=r1();C4((B,A)=>{if(A.escape)G()});let W=P6(()=>process.exit(0)),w=(B)=>{if(B==="exit")G();else Z()};return UI.default.createElement(UI.default.Fragment,null,UI.default.createElement(p,{flexDirection:"column",borderColor:C.error,borderStyle:"round",padding:1,width:70,gap:1},UI.default.createElement(u,{bold:!0},"Configuration Error"),UI.default.createElement(p,{flexDirection:"column",gap:1},UI.default.createElement(u,null,"The configuration file at ",UI.default.createElement(u,{bold:!0},I)," contains invalid JSON."),UI.default.createElement(u,null,d)),UI.default.createElement(p,{flexDirection:"column"},UI.default.createElement(u,{bold:!0},"Choose an option:"),UI.default.createElement(Q6,{options:[{label:"Exit and fix manually",value:"exit"},{label:"Reset with default configuration",value:"reset"}],onChange:w}))),W.pending?UI.default.createElement(u,{dimColor:!0},"Press ",W.keyName," again to exit"):UI.default.createElement(C6,null))}function CR2({error:I}){return new Promise((d)=>{wZ(UI.default.createElement(WX9,{filePath:I.filePath,errorDescription:I.message,onExit:()=>{d(),process.exit(1)},onReset:()=>{CX9(I.filePath,JSON.stringify(I.defaultConfig,null,2)),d(),process.exit(0)}}),{exitOnCtrlC:!1})})}yl1();Object.keys(lj1);function VX9(){let I=q2();p4({...I,hasCompletedOnboarding:!0,lastOnboardingVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION})}async function XX9(I,d){let G=q2();if(!G.theme||!G.hasCompletedOnboarding)await $6(),await new Promise((Z)=>{wZ(gU.default.createElement(ss,{onDone:async()=>{VX9(),await $6(),Z()}}),{exitOnCtrlC:!1})});if(!d&&!I){if(!zl1())await new Promise((Z)=>{wZ(gU.default.createElement(rq2,{onDone:()=>{Og1(),Z()}}),{exitOnCtrlC:!1})})}}function YX9(){let I=q2();p4({...I,numStartups:(I.numStartups??0)+1})}async function FU(I,d){if(Uw(I),Og1(),d){if(process.platform!=="win32"&&typeof process.getuid==="function"&&process.getuid()===0)console.error("--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons"),process.exit(1);let[W,w]=await Promise.all([K2.getIsDocker(),K2.hasInternetAccess()]);if(!W||w)console.error(`--dangerously-skip-permissions can only be used in Docker containers with no internet access but got Docker: ${W} and hasInternet: ${w}`),process.exit(1)}IR2(),no(),j7(),Uz();let G=q2();if(G.iterm2KeyBindingInstalled===!0&&G.shiftEnterKeyBindingInstalled!==!0){let W={...G,shiftEnterKeyBindingInstalled:!0};delete W.iterm2KeyBindingInstalled,p4(W)}let Z=I5();if(Z.lastCost!==void 0&&Z.lastDuration!==void 0)I0("tengu_exit",{last_session_cost:String(Z.lastCost),last_session_api_duration:String(Z.lastAPIDuration),last_session_duration:String(Z.lastDuration),last_session_id:Z.lastSessionId}),o9({...Z,lastCost:void 0,lastAPIDuration:void 0,lastDuration:void 0,lastSessionId:void 0});if((G.autoUpdaterStatus??"not_configured")==="not_configured")I0("tengu_setup_auto_updater_not_configured",{}),await new Promise((W)=>{wZ(gU.default.createElement(Au,{onDone:()=>W()}))})}async function _X9(){try{Rl1()}catch(G){if(G instanceof Mz){await CR2({error:G});return}}let I="",d={exitOnCtrlC:!1,onFlicker(){I0("tengu_flicker",{})}};if(!process.stdin.isTTY&&!process.env.CI&&!process.argv.includes("mcp")){if(I=await HX9(),process.platform!=="win32")try{let G=BX9("/dev/tty","r");d={...d,stdin:new wX9(G)}}catch(G){X0(`Could not open /dev/tty: ${G}`)}}await DX9(I,d)}async function DX9(I,d){let G=new uq2,Z={...d,exitOnCtrlC:!0},C=await KQ2(),W=C.filter((V)=>!V.isHidden).map((V)=>`/${V.name} - ${V.description}`).join(` +`);G.name("claude").description(`${K4} - starts an interactive session by default, use -p/--print for non-interactive output + +Slash commands available during an interactive session: +${W}`).argument("[prompt]","Your prompt",String).option("-c, --cwd ","The current working directory",String,HU()).option("-d, --debug","Enable debug mode",()=>!0).option("--verbose","Override verbose mode setting from config",()=>!0).option("-ea, --enable-architect","Enable the Architect tool",()=>!0).option("-p, --print","Print response and exit (useful for pipes)",()=>!0).option("--dangerously-skip-permissions","Skip all permission checks. Only works in Docker containers with no internet access. Will crash otherwise.",()=>!0).action(async(V,{cwd:X,debug:_,verbose:F,enableArchitect:g,print:J,dangerouslySkipPermissions:K})=>{await XX9(K,J),I0("tengu_init",{entrypoint:"claude",hasInitialPrompt:Boolean(V).toString(),hasStdin:Boolean(I).toString(),enableArchitect:g?.toString()??"false",verbose:F?.toString()??"false",debug:_?.toString()??"false",print:J?.toString()??"false"}),await FU(X,K),gz2();let[Q,E]=await Promise.all([to(g??I5().enableArchitectTool),KK1()]);YX9();let S=[V,I].filter(Boolean).join(` +`);if(J){if(!S)console.error("Error: Input must be provided either through stdin or as a prompt argument when using --print"),process.exit(1);vH(S);let{resultText:P}=await Tq2({commands:C,hasPermissionsToUseTool:UH,messageLogName:ll(new Date),prompt:S,cwd:X,tools:Q,dangerouslySkipPermissions:K});console.log(P),process.exit(0)}else{let P=await t21();wZ(gU.default.createElement(cJ1,{commands:C,debug:_,initialPrompt:S,messageLogName:ll(new Date),shouldShowPromptInput:!0,verbose:F,tools:Q,dangerouslySkipPermissions:K,mcpClients:E,isDefaultModel:P}),d)}}).version({ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.anthropic.com/s/claude-code",VERSION:"0.2.8"}.VERSION,"-v, --version");let w=G.command("config").description("Manage configuration (eg. claude config set -g theme dark)");w.command("get ").description("Get a config value").option("-c, --cwd ","The current working directory",String,HU()).option("-g, --global","Use global config").action(async(V,{cwd:X,global:_})=>{await FU(X,!1),console.log(vl1(V,_??!1)),process.exit(0)}),w.command("set ").description("Set a config value").option("-c, --cwd ","The current working directory",String,HU()).option("-g, --global","Use global config").action(async(V,X,{cwd:_,global:F})=>{await FU(_,!1),El1(V,X,F??!1),console.log(`Set ${V} to ${X}`),process.exit(0)}),w.command("remove ").description("Remove a config value").option("-c, --cwd ","The current working directory",String,HU()).option("-g, --global","Use global config").action(async(V,{cwd:X,global:_})=>{await FU(X,!1),Ml1(V,_??!1),console.log(`Removed ${V}`),process.exit(0)}),w.command("list").description("List all config values").option("-c, --cwd ","The current working directory",String,HU()).option("-g, --global","Use global config",!1).action(async({cwd:V,global:X})=>{await FU(V,!1),console.log(JSON.stringify(Sl1(X??!1),null,2)),process.exit(0)});let B=G.command("approved-tools").description("Manage approved tools");B.command("list").description("List all approved tools").action(async()=>{let V=GR2(R0());console.log(V),process.exit(0)}),B.command("remove ").description("Remove a tool from the list of approved tools").action(async(V)=>{let X=ZR2(V);I0("tengu_approved_tool_remove",{tool:V,success:String(X.success)}),console.log(X.message),process.exit(X.success?0:1)});let A=G.command("mcp").description("Configure and manage MCP servers");return A.command("serve").description(`Start the ${K4} MCP server`).action(async()=>{let V=G.opts().cwd??HU();if(I0("tengu_mcp_start",{providedCwd:V}),!AX9(V))console.error(`Error: Directory ${V} does not exist`),process.exit(1);try{await FU(V,!1),await eq2(V)}catch(X){console.error("Error: Failed to start MCP server:",X),process.exit(1)}}),A.command("add [args...]").description("Add a stdio server").option("-s, --scope ","Configuration scope (project or global)","project").option("-e, --env ","Set environment variables (e.g. -e KEY=value)").action(async(V,X,_,F)=>{try{let g=JK1(F.scope);I0("tengu_mcp_add",{name:V,type:"stdio",scope:g});let J=VQ2(F.env);XQ2(V,{type:"stdio",command:X,args:_||[],env:J},g),console.log(`Added stdio MCP server ${V} with command: ${X} ${(_||[]).join(" ")} to ${g} config`),process.exit(0)}catch(g){console.error(g.message),process.exit(1)}}),A.command("remove ").description("Remove an MCP server").option("-s, --scope ","Configuration scope (project, global, or mcprc)","project").action(async(V,X)=>{try{let _=JK1(X.scope);I0("tengu_mcp_delete",{name:V,scope:_}),YQ2(V,_),console.log(`Removed MCP server ${V} from ${_} config`),process.exit(0)}catch(_){console.error(_.message),process.exit(1)}}),A.command("list").description("List configured MCP servers").action(()=>{I0("tengu_mcp_list",{});let V=_Q2();if(Object.keys(V).length===0)console.log("No MCP servers configured. Use `claude mcp add` to add a server.");else for(let[X,_]of Object.entries(V))if(_.type==="sse")console.log(`${X}: ${_.url} (SSE)`);else console.log(`${X}: ${_.command} ${_.args.join(" ")}`);process.exit(0)}),A.command("get ").description("Get details about an MCP server").action((V)=>{I0("tengu_mcp_get",{name:V});let X=DQ2(V);if(!X)console.error(`No MCP server found with name: ${V}`),process.exit(1);if(console.log(`${V}:`),console.log(` Scope: ${X.scope}`),X.type==="sse")console.log(" Type: sse"),console.log(` URL: ${X.url}`);else if(console.log(" Type: stdio"),console.log(` Command: ${X.command}`),console.log(` Args: ${X.args.join(" ")}`),X.env){console.log(" Environment:");for(let[_,F]of Object.entries(X.env))console.log(` ${_}=${F}`)}process.exit(0)}),G.command("doctor").description("Check the health of your Claude Code auto-updater").action(async()=>{I0("tengu_doctor_command",{}),await new Promise((V)=>{wZ(gU.default.createElement(Au,{onDone:()=>V(),doctorMode:!0}))}),process.exit(0)}),await G.parseAsync(process.argv),G}async function HX9(){if(process.stdin.isTTY)return"";let I="";for await(let d of process.stdin)I+=d;return I}process.on("exit",()=>{FX9(),m8.getInstance().close()});process.on("SIGINT",()=>{process.exit(0)});function FX9(){(process.stderr.isTTY?process.stderr:process.stdout.isTTY?process.stdout:void 0)?.write(`\x1B[?25h${R51}`)}_X9();export{VX9 as completeOnboarding}; + +//# debugId=C4120DD4ECA532B564756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2lzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2FnZ3JlZ2F0ZS1lcnJvcnMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL3dvcmxkd2lkZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvZGVidWctYnVpbGQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2xvZ2dlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvZHNuLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9ub2RlLXN0YWNrLXRyYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9zdGFja3RyYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9pbnN0cnVtZW50L19oYW5kbGVycy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvaW5zdHJ1bWVudC9jb25zb2xlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9taXNjLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9pbnN0cnVtZW50L2RvbS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvc3VwcG9ydHMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2luc3RydW1lbnQvZmV0Y2guanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2luc3RydW1lbnQvZ2xvYmFsRXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2luc3RydW1lbnQvZ2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy92ZW5kb3Ivc3VwcG9ydHNIaXN0b3J5LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9pbnN0cnVtZW50L2hpc3RvcnkuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2luc3RydW1lbnQveGhyLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9pbnN0cnVtZW50L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9lbnYuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL25vZGUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2lzQnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvbWVtby5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvbm9ybWFsaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9wYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9zeW5jcHJvbWlzZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvcHJvbWlzZWJ1ZmZlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvY29va2llLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy91cmwuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL3JlcXVlc3RkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9zZXZlcml0eS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvdGltZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvYmFnZ2FnZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvdHJhY2luZy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvZW52ZWxvcGUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2NsaWVudHJlcG9ydC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvcmF0ZWxpbWl0LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy91c2VySW50ZWdyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9jYWNoZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvZXZlbnRidWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9hbnIuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL2xydS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvYnVpbGRQb2x5ZmlsbHMvX251bGxpc2hDb2FsZXNjZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvYnVpbGRQb2x5ZmlsbHMvX2FzeW5jTnVsbGlzaENvYWxlc2NlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9idWlsZFBvbHlmaWxscy9fYXN5bmNPcHRpb25hbENoYWluLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9idWlsZFBvbHlmaWxscy9fYXN5bmNPcHRpb25hbENoYWluRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2Nqcy9idWlsZFBvbHlmaWxscy9fb3B0aW9uYWxDaGFpbi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvYnVpbGRQb2x5ZmlsbHMvX29wdGlvbmFsQ2hhaW5EZWxldGUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvY2pzL3ZlbmRvci9lc2NhcGVTdHJpbmdGb3JSZWdleC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvZGVidWctYnVpbGQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL2V2ZW50UHJvY2Vzc29ycy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9zZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3V0aWxzL3NwYW5VdGlscy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy91dGlscy9wcmVwYXJlRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvZXhwb3J0cy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy91dGlscy9nZXRSb290U3Bhbi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy90cmFjaW5nL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdXRpbHMvYXBwbHlTY29wZURhdGFUb0V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3Njb3BlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3ZlcnNpb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvaHViLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3RyYWNpbmcvdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhY2luZy9lcnJvcnMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhY2luZy9zcGFuc3RhdHVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3V0aWxzL2hhbmRsZUNhbGxiYWNrRXJyb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3V0aWxzL2hhc1RyYWNpbmdFbmFibGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3RyYWNpbmcvdHJhY2UuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvbWV0cmljcy9tZXRyaWMtc3VtbWFyeS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9zZW1hbnRpY0F0dHJpYnV0ZXMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhY2luZy9zcGFuLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3RyYWNpbmcvdHJhbnNhY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhY2luZy9pZGxldHJhbnNhY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhY2luZy9zYW1wbGluZy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy90cmFjaW5nL2h1YmV4dGVuc2lvbnMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhY2luZy9tZWFzdXJlbWVudC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9lbnZlbG9wZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9zZXNzaW9uZmx1c2hlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9hcGkuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvaW50ZWdyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvbWV0cmljcy91dGlscy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9tZXRyaWNzL2VudmVsb3BlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL2Jhc2VjbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvY2hlY2tpbi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9tZXRyaWNzL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9tZXRyaWNzL2luc3RhbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL21ldHJpY3MvYWdncmVnYXRvci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9zZXJ2ZXItcnVudGltZS1jbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvc2RrLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3RyYW5zcG9ydHMvYmFzZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy90cmFuc3BvcnRzL29mZmxpbmUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdHJhbnNwb3J0cy9tdWx0aXBsZXhlZC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9zcGFuLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL3V0aWxzL2lzU2VudHJ5UmVxdWVzdFVybC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy91dGlscy9wYXJhbWV0ZXJpemUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvdXRpbHMvc2RrTWV0YWRhdGEuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvbWV0YWRhdGEuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvaW50ZWdyYXRpb25zL21ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvY2pzL2ludGVncmF0aW9ucy9yZXF1ZXN0ZGF0YS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9pbnRlZ3JhdGlvbnMvaW5ib3VuZGZpbHRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvaW50ZWdyYXRpb25zL2Z1bmN0aW9udG9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvaW50ZWdyYXRpb25zL2xpbmtlZGVycm9ycy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9pbnRlZ3JhdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvbWV0cmljcy9icm93c2VyLWFnZ3JlZ2F0b3IuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvbWV0cmljcy9pbnRlZ3JhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2Nqcy9tZXRyaWNzL2V4cG9ydHMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvY29tbW9uL2RlYnVnLWJ1aWxkLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL25vZGUvaW50ZWdyYXRpb25zL3V0aWxzL25vZGUtdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvbm9kZS9pbnRlZ3JhdGlvbnMvZXhwcmVzcy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9ub2RlL2ludGVncmF0aW9ucy9wb3N0Z3Jlcy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9ub2RlL2ludGVncmF0aW9ucy9teXNxbC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9ub2RlL2ludGVncmF0aW9ucy9tb25nby5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9ub2RlL2ludGVncmF0aW9ucy9wcmlzbWEuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvbm9kZS9pbnRlZ3JhdGlvbnMvZ3JhcGhxbC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9ub2RlL2ludGVncmF0aW9ucy9hcG9sbG8uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvbm9kZS9pbnRlZ3JhdGlvbnMvbGF6eS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvYmFja2dyb3VuZHRhYi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL3dlYi12aXRhbHMvbGliL2JpbmRSZXBvcnRlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL3dlYi12aXRhbHMvbGliL2dlbmVyYXRlVW5pcXVlSUQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9nZXROYXZpZ2F0aW9uRW50cnkuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9nZXRBY3RpdmF0aW9uU3RhcnQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9pbml0TWV0cmljLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvb2JzZXJ2ZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL3dlYi12aXRhbHMvbGliL29uSGlkZGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRDTFMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL3dlYi12aXRhbHMvZ2V0RklELmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvcG9seWZpbGxzL2ludGVyYWN0aW9uQ291bnRQb2x5ZmlsbC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL3dlYi12aXRhbHMvZ2V0SU5QLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRMQ1AuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci93ZWItdml0YWxzL29uVFRGQi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9icm93c2VyL2luc3RydW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci9tZXRyaWNzL3V0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvbWV0cmljcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nL2Nqcy9jb21tb24vZmV0Y2guanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci9yZXF1ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvcm91dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2Jyb3dzZXIvYnJvd3NlcnRyYWNpbmcuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvYnJvd3Nlci9icm93c2VyVHJhY2luZ0ludGVncmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3RyYWNpbmcvY2pzL2V4dGVuc2lvbnMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvdHJhY2luZy9janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvdHJhY2luZy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9jbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvcHJveHkvYmFzZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9wcm94eS9wYXJzZS1wcm94eS1yZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9wcm94eS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy90cmFuc3BvcnRzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvbm9kZVZlcnNpb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvYXN5bmMvZG9tYWluLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2FzeW5jL2hvb2tzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2FzeW5jL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy9jb25zb2xlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy9jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy9jb250ZXh0bGluZXMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvZGVidWctYnVpbGQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvaW50ZWdyYXRpb25zL3V0aWxzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvaW50ZWdyYXRpb25zL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvaW50ZWdyYXRpb25zL2xvY2FsLXZhcmlhYmxlcy9jb21tb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvaW50ZWdyYXRpb25zL2xvY2FsLXZhcmlhYmxlcy9sb2NhbC12YXJpYWJsZXMtc3luYy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbnRlZ3JhdGlvbnMvbG9jYWwtdmFyaWFibGVzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy9tb2R1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy91dGlscy9lcnJvcmhhbmRsaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy9vbnVuY2F1Z2h0ZXhjZXB0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy9vbnVuaGFuZGxlZHJlamVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbnRlZ3JhdGlvbnMvc3BvdGxpZ2h0LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2ludGVncmF0aW9ucy91bmRpY2kvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvbW9kdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL3Nkay5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy91dGlscy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbnRlZ3JhdGlvbnMvYW5yL3dvcmtlci1zY3JpcHQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvaW50ZWdyYXRpb25zL2Fuci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbnRlZ3JhdGlvbnMvYW5yL2xlZ2FjeS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy90cnBjLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL3JlcXVlc3REYXRhRGVwcmVjYXRlZC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9oYW5kbGVycy5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbnRlZ3JhdGlvbnMvaGFwaS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbnRlZ3JhdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvdHJhY2luZy9pbnRlZ3JhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL2Nqcy9jYXB0dXJlY29uc29sZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvY2pzL2RlYnVnLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9janMvZGVidWctYnVpbGQuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL2Nqcy9kZWR1cGUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL2Nqcy9leHRyYWVycm9yZGF0YS5qcyIsICJub2RlX21vZHVsZXMvbG9jYWxmb3JhZ2UvZGlzdC9sb2NhbGZvcmFnZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvY2pzL29mZmxpbmUuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL2Nqcy9yZXBvcnRpbmdvYnNlcnZlci5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvY2pzL3Jld3JpdGVmcmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL2Nqcy9zZXNzaW9udGltaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9janMvdHJhbnNhY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL2Nqcy9odHRwY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9janMvY29udGV4dGxpbmVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvY3Jvbi9jb21tb24uanMiLCAibm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9janMvY3Jvbi9jcm9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2Nyb24vbm9kZS1jcm9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvY2pzL2Nyb24vbm9kZS1zY2hlZHVsZS5qcyIsICJub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL2Nqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvc2hlbGwtcXVvdGUvcXVvdGUuanMiLCAibm9kZV9tb2R1bGVzL3NoZWxsLXF1b3RlL3BhcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGVsbC1xdW90ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvTG9nLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvJF9TdGF0c2lnR2xvYmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvRGlhZ25vc3RpY3MuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9UeXBpbmdVdGlscy5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL0hhc2hpbmcuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9DYWNoZUtleS5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL05ldHdvcmtDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TYWZlSnMuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TdGF0c2lnRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TdG9yYWdlUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9VcmxDb25maWd1cmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvVmlzaWJpbGl0eU9ic2VydmluZy5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL0V2ZW50TG9nZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvU3RhdHNpZ01ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvQ2xpZW50SW50ZXJmYWNlcy5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL1VVSUQuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TdGFibGVJRC5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL1N0YXRzaWdVc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvVHlwZWRKc29uUGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9EYXRhQWRhcHRlckNvcmUuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9Eb3dubG9hZENvbmZpZ1NwZWNzUmVzcG9uc2UuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TREtUeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvRXJyb3JCb3VuZGFyeS5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL0V2YWx1YXRpb25PcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvRXZhbHVhdGlvblR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvSW5pdGlhbGl6ZVJlc3BvbnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvTWVtb0tleS5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL0Ruc1R4dFF1ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvTmV0d29ya0ZhbGxiYWNrUmVzb2x2ZXIuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TZXNzaW9uSUQuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TdGF0c2lnQ2xpZW50RXZlbnRFbWl0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvTmV0d29ya0NvcmUuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9PdmVycmlkZUFkYXB0ZXIuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9QYXJhbVN0b3JlVHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TdGF0c2lnQ2xpZW50QmFzZS5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL1N0YXRzaWdEYXRhQWRhcHRlci5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL1N0YXRzaWdPcHRpb25zQ29tbW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvU3RhdHNpZ1BsdWdpbi5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL1N0YXRzaWdUeXBlRmFjdG9yaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvU3RhdHNpZ1R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9jbGllbnQtY29yZS9zcmMvU3RhdHNpZ1VwZGF0ZURldGFpbHMuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2NsaWVudC1jb3JlL3NyYy9TREtGbGFncy5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvY2xpZW50LWNvcmUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9qcy1jbGllbnQvc3JjL0V2YWx1YXRpb25TdG9yZS5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvanMtY2xpZW50L3NyYy9FdmFsdWF0aW9uUmVzcG9uc2VEZWx0YXMuanMiLCAibm9kZV9tb2R1bGVzL0BzdGF0c2lnL2pzLWNsaWVudC9zcmMvTmV0d29yay5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvanMtY2xpZW50L3NyYy9QYXJhbVN0b3JlR2V0dGVyRmFjdG9yeS5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvanMtY2xpZW50L3NyYy9TdGF0c2lnRXZhbHVhdGlvbnNEYXRhQWRhcHRlci5qcyIsICJub2RlX21vZHVsZXMvQHN0YXRzaWcvanMtY2xpZW50L3NyYy9TdGF0c2lnQ2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac3RhdHNpZy9qcy1jbGllbnQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICJub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIm5vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAibm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLm1qcyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL2lzRnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2Zvcm1kYXRhLW5vZGUvbGliL2VzbS9ibG9iSGVscGVycy5qcyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL0Jsb2IuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm1kYXRhLW5vZGUvbGliL2VzbS9GaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vaXNGaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaHVtYW5pemUtbXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2FnZW50a2VlcGFsaXZlL2xpYi9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2FnZW50a2VlcGFsaXZlL2xpYi9hZ2VudC5qcyIsICJub2RlX21vZHVsZXMvYWdlbnRrZWVwYWxpdmUvbGliL2h0dHBzX2FnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9hZ2VudGtlZXBhbGl2ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICJub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAibm9kZV9tb2R1bGVzL25vZGUtZG9tZXhjZXB0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vaXNQbGFpbk9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL2ZpbGVGcm9tUGF0aC5qcyIsICJub2RlX21vZHVsZXMvaW5rL25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9zaWduYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcyIsICJub2RlX21vZHVsZXMvcmVhY3QtcmVjb25jaWxlci9janMvcmVhY3QtcmVjb25jaWxlci5wcm9kdWN0aW9uLm1pbi5qcyIsICJub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9idWZmZXItdXRpbC5qcyIsICJub2RlX21vZHVsZXMvd3MvbGliL2xpbWl0ZXIuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9wZXJtZXNzYWdlLWRlZmxhdGUuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi92YWxpZGF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93cy9saWIvcmVjZWl2ZXIuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9zZW5kZXIuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9ldmVudC10YXJnZXQuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9leHRlbnNpb24uanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi93ZWJzb2NrZXQuanMiLCAibm9kZV9tb2R1bGVzL3dzL2xpYi9zdWJwcm90b2NvbC5qcyIsICJub2RlX21vZHVsZXMvd3MvbGliL3dlYnNvY2tldC1zZXJ2ZXIuanMiLCAibm9kZV9tb2R1bGVzL3dzL3dyYXBwZXIubWpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvZGV2dG9vbHMtd2luZG93LXBvbHlmaWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdC1kZXZ0b29scy1jb3JlL2Rpc3QvYmFja2VuZC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2RldnRvb2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktYm94ZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL25vZGVfbW9kdWxlcy9taW1pYy1mbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvcmVzdG9yZS1jdXJzb3Ivbm9kZV9tb2R1bGVzL29uZXRpbWUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9zaWduYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9yZXN0b3JlLWN1cnNvci9ub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3N0YWNrLXV0aWxzL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvc3RhY2stdXRpbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RlZXBtZXJnZS9kaXN0L2Nqcy5qcyIsICJub2RlX21vZHVsZXMvc2VtdmVyL3NlbXZlci5qcyIsICJub2RlX21vZHVsZXMvYmFsYW5jZWQtbWF0Y2gvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvVW5zdWJzY3JpcHRpb25FcnJvci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2FyclJlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9TdWJzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL25vb3AuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvTm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL1N1YnNjcmliZXIuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc3ltYm9sL29ic2VydmFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL3BpcGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvT2JzZXJ2YWJsZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2xpZnQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL3BlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvU3ViamVjdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL0FzeW5jU3ViamVjdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvQWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL0ltbWVkaWF0ZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvaW1tZWRpYXRlUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvU2NoZWR1bGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY1NjaGVkdWxlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZVNjaGVkdWxlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZVNjaGVkdWxlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc1NjaGVkdWxlci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc0FycmF5TGlrZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzUHJvbWlzZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzSXRlcmFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2V4ZWN1dGVTY2hlZHVsZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvb2JzZXJ2ZU9uLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvTm90aWZpY2F0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvRW1wdHlFcnJvci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9sYXN0VmFsdWVGcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL2ZpcnN0VmFsdWVGcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9Ob3RGb3VuZEVycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvU2VxdWVuY2VFcnJvci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzRGF0ZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvbWFwT25lT3JNYW55QXJncy5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFja0ludGVybmFscy5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFjay5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmROb2RlQ2FsbGJhY2suanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2NyZWF0ZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VBbGwuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdEFsbC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2RlZmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvYXJnc09yQXJnQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhaXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvbm90LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYXJ0aXRpb24uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvcmFuZ2UuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC90eXBlcy5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0VGltZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyVGltZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyVG9nZ2xlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJXaGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zY2FuSW50ZXJuYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2pvaW5BbGxJbnRlcm5hbHMuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGwuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3QuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RXaXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb3VudC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2UuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlVGltZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHkuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2UuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWxheS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9lbGVtZW50QXQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2VuZFdpdGguanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2V2ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9leHBhbmQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmFsaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9maW5kSW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpcnN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9ncm91cEJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWF0ZXJpYWxpemUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VNYXBUby5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VTY2FuLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VXaXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvb25FcnJvclJlc3VtZU5leHRXaXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wYWlyd2lzZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvcGx1Y2suanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2guanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hCZWhhdmlvci5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaExhc3QuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXkuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2VXaXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXQuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdFdoZW4uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9yZXRyeVdoZW4uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2Nhbi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXAuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW4uanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VVbnRpbC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVdoaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dDb3VudC5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93VGltZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93VG9nZ2xlLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dXaGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aXRoTGF0ZXN0RnJvbS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvemlwQWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy96aXAuanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcFdpdGguanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3BhcnRpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZS5qcyIsICJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9vcGVyYXRvcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCAibm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3NwYXduLXJ4L2xpYi9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIm5vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsICJub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdGVybWluYWwtbGluay9ub2RlX21vZHVsZXMvc3VwcG9ydHMtaHlwZXJsaW5rcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zaWduYXR1cmUtdjQvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2lnbmF0dXJlLXY0L25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtbWlkZGxld2FyZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9pcy1hcnJheS1idWZmZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2lnbmF0dXJlLXY0L25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtYnVmZmVyLWZyb20vZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2lnbmF0dXJlLXY0L25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtdXRmOC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zaWduYXR1cmUtdjQvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmcvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2lnbmF0dXJlLXY0L25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtdXJpLWVzY2FwZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zaWduYXR1cmUtdjQvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWNvbmZpZy1wcm92aWRlci9kaXN0LWNqcy9ib29sZWFuU2VsZWN0b3IuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtY29uZmlnLXByb3ZpZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvZW5kcG9pbnRzQ29uZmlnL05vZGVVc2VEdWFsc3RhY2tFbmRwb2ludENvbmZpZ09wdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9lbmRwb2ludHNDb25maWcvTm9kZVVzZUZpcHNFbmRwb2ludENvbmZpZ09wdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtbWlkZGxld2FyZS9kaXN0LWNqcy9ub3JtYWxpemVQcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1taWRkbGV3YXJlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvZW5kcG9pbnRzQ29uZmlnL3Jlc29sdmVDdXN0b21FbmRwb2ludHNDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9lbmRwb2ludHNDb25maWcvdXRpbHMvZ2V0RW5kcG9pbnRGcm9tUmVnaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvZW5kcG9pbnRzQ29uZmlnL3Jlc29sdmVFbmRwb2ludHNDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9lbmRwb2ludHNDb25maWcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9yZWdpb25Db25maWcvY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uQ29uZmlnL2lzRmlwc1JlZ2lvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyL2Rpc3QtY2pzL3JlZ2lvbkNvbmZpZy9nZXRSZWFsUmVnaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uQ29uZmlnL3Jlc29sdmVSZWdpb25Db25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9yZWdpb25Db25maWcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9yZWdpb25JbmZvL1BhcnRpdGlvbkhhc2guanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9yZWdpb25JbmZvL1JlZ2lvbkhhc2guanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9yZWdpb25JbmZvL2dldEhvc3RuYW1lRnJvbVZhcmlhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uSW5mby9nZXRSZXNvbHZlZEhvc3RuYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uSW5mby9nZXRSZXNvbHZlZFBhcnRpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyL2Rpc3QtY2pzL3JlZ2lvbkluZm8vZ2V0UmVzb2x2ZWRTaWduaW5nUmVnaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uSW5mby9nZXRSZWdpb25JbmZvLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uSW5mby9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL0ZpZWxkUG9zaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Byb3RvY29sLWh0dHAvZGlzdC1janMvRmllbGQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Byb3RvY29sLWh0dHAvZGlzdC1janMvRmllbGRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBIYW5kbGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBSZXF1ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBSZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9pc1ZhbGlkSG9zdG5hbWUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Byb3RvY29sLWh0dHAvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtY29udGVudC1sZW5ndGgvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnQvZGlzdC1janMvc2VydmljZS1jdXN0b21pemF0aW9ucy9zMy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludC9kaXN0LWNqcy9zZXJ2aWNlLWN1c3RvbWl6YXRpb25zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50L2Rpc3QtY2pzL2FkYXB0b3JzL2NyZWF0ZUNvbmZpZ1ZhbHVlUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnQvZGlzdC1janMvYWRhcHRvcnMvZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9xdWVyeXN0cmluZy1wYXJzZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3VybC1wYXJzZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnQvZGlzdC1janMvYWRhcHRvcnMvdG9FbmRwb2ludFYxLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50L2Rpc3QtY2pzL2FkYXB0b3JzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50L2Rpc3QtY2pzL2VuZHBvaW50TWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZS9kaXN0LWNqcy9kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlL2Rpc3QtY2pzL3NlcmlhbGl6ZXJNaWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlL2Rpc3QtY2pzL3NlcmRlUGx1Z2luLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50L2Rpc3QtY2pzL2dldEVuZHBvaW50UGx1Z2luLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50L2Rpc3QtY2pzL3Jlc29sdmVFbmRwb2ludENvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludC9kaXN0LWNqcy90eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtaG9zdC1oZWFkZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlci9kaXN0LWNqcy9sb2dnZXJNaWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb24vZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtcmV0cnkvZGlzdC1janMvY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zZXJ2aWNlLWVycm9yLWNsYXNzaWZpY2F0aW9uL2Rpc3QtY2pzL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvbi9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1yZXRyeS9kaXN0LWNqcy9EZWZhdWx0UmF0ZUxpbWl0ZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtcmV0cnkvZGlzdC1janMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXJldHJ5L2Rpc3QtY2pzL2RlZmF1bHRSZXRyeUJhY2tvZmZTdHJhdGVneS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1yZXRyeS9kaXN0LWNqcy9kZWZhdWx0UmV0cnlUb2tlbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1yZXRyeS9kaXN0LWNqcy9TdGFuZGFyZFJldHJ5U3RyYXRlZ3kuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtcmV0cnkvZGlzdC1janMvQWRhcHRpdmVSZXRyeVN0cmF0ZWd5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXJldHJ5L2Rpc3QtY2pzL0NvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXJldHJ5L2Rpc3QtY2pzL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXJldHJ5L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3Qvcm5nLmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvcmVnZXguanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92YWxpZGF0ZS5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L3N0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L3YxLmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92MzUuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9tZDUuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92My5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L3Y0LmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3Qvc2hhMS5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L3Y1LmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbmlsLmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5L2Rpc3QtY2pzL2RlZmF1bHRSZXRyeVF1b3RhLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5L2Rpc3QtY2pzL2RlbGF5RGVjaWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeS9kaXN0LWNqcy9yZXRyeURlY2lkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtcmV0cnkvZGlzdC1janMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeS9kaXN0LWNqcy9TdGFuZGFyZFJldHJ5U3RyYXRlZ3kuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtcmV0cnkvZGlzdC1janMvQWRhcHRpdmVSZXRyeVN0cmF0ZWd5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5L2Rpc3QtY2pzL2NvbmZpZ3VyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5L2Rpc3QtY2pzL29taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5L2Rpc3QtY2pzL3JldHJ5TWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXIvZGlzdC1janMvUHJvdmlkZXJFcnJvci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXIvZGlzdC1janMvQ3JlZGVudGlhbHNQcm92aWRlckVycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlci9kaXN0LWNqcy9Ub2tlblByb3ZpZGVyRXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyL2Rpc3QtY2pzL2NoYWluLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlci9kaXN0LWNqcy9mcm9tU3RhdGljLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlci9kaXN0LWNqcy9tZW1vaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1oZXgtZW5jb2RpbmcvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2lzLWFycmF5LWJ1ZmZlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1idWZmZXItZnJvbS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC11dGY4L2Rpc3QtY2pzL2Zyb21VdGY4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXV0ZjgvZGlzdC1janMvdG9VaW50OEFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXV0ZjgvZGlzdC1janMvdG9VdGY4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXV0ZjgvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NpZ25hdHVyZS12NC9kaXN0LWNqcy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NpZ25hdHVyZS12NC9kaXN0LWNqcy9jcmVkZW50aWFsRGVyaXZhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0L2Rpc3QtY2pzL2dldENhbm9uaWNhbEhlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXJpLWVzY2FwZS9kaXN0LWNqcy9lc2NhcGUtdXJpLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXVyaS1lc2NhcGUvZGlzdC1janMvZXNjYXBlLXVyaS1wYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXVyaS1lc2NhcGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NpZ25hdHVyZS12NC9kaXN0LWNqcy9nZXRDYW5vbmljYWxRdWVyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0L2Rpc3QtY2pzL2dldFBheWxvYWRIYXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zaWduYXR1cmUtdjQvZGlzdC1janMvaGVhZGVyVXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0L2Rpc3QtY2pzL2Nsb25lUmVxdWVzdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0L2Rpc3QtY2pzL21vdmVIZWFkZXJzVG9RdWVyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0L2Rpc3QtY2pzL3ByZXBhcmVSZXF1ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zaWduYXR1cmUtdjQvZGlzdC1janMvdXRpbERhdGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NpZ25hdHVyZS12NC9kaXN0LWNqcy9TaWduYXR1cmVWNC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL2NvbmZpZ3VyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL3V0aWxzL2dldFNrZXdDb3JyZWN0ZWREYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL3V0aWxzL2lzQ2xvY2tTa2V3ZWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmcvZGlzdC1janMvdXRpbHMvZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL21pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmcvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQvZGlzdC1janMvY29uZmlndXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL3BhcnRpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2RlYnVnL2RlYnVnSWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9kZWJ1Zy90b0RlYnVnU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvZGVidWcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy90eXBlcy9FbmRwb2ludEVycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRW5kcG9pbnRSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRXJyb3JSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvUnVsZVNldE9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL1RyZWVSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvaXNJcEFkZHJlc3MuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvaXNWYWxpZEhvc3RMYWJlbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9hd3MvaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9hd3MvcGFyc2VBcm4uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2Jvb2xlYW5FcXVhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvZ2V0QXR0clBhdGhMaXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2dldEF0dHIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvaXNTZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvbm90LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvYWJvcnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9hdXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY2hlY2tzdW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL21hbmFnZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL3Bvb2wuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jcnlwdG8uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9kbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9lbmRwb2ludC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2V2ZW50U3RyZWFtLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaHR0cC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L0Fub255bW91c0lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvQXdzQ3JlZGVudGlhbElkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvSWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9Mb2dpbklkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvVG9rZW5JZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvbG9nZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvbWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3BhZ2luYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9wcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcmVxdWVzdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3Jlc3BvbnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcmV0cnkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9zZXJkZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3NoYXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3NpZ25hdHVyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3N0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvdHJhbnNmZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy91dGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvd2FpdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvcGFyc2VVUkwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvc3RyaW5nRXF1YWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3N1YnN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi91cmlFbmNvZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVRlbXBsYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZ2V0UmVmZXJlbmNlVmFsdWUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9jYWxsRnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUNvbmRpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlQ29uZGl0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldEVuZHBvaW50SGVhZGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldEVuZHBvaW50UHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludFByb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludFVybC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlRW5kcG9pbnRSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVFcnJvclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVRyZWVSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVSdWxlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvcmVzb2x2ZUVuZHBvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQvZGlzdC1janMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL3VzZXItYWdlbnQtbWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9Ob09wTG9nZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXN0YWNrL2Rpc3QtY2pzL01pZGRsZXdhcmVTdGFjay5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zdGFjay9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9jbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NtaXRoeS1jbGllbnQvZGlzdC1janMvY29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NtaXRoeS1jbGllbnQvZGlzdC1janMvY3JlYXRlLWFnZ3JlZ2F0ZWQtY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL3BhcnNlLXV0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL2RhdGUtdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NtaXRoeS1jbGllbnQvZGlzdC1janMvZXhjZXB0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9kZWZhdWx0LWVycm9yLWhhbmRsZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NtaXRoeS1jbGllbnQvZGlzdC1janMvZGVmYXVsdHMtbW9kZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL2V4dGVuZGVkLWVuY29kZS11cmktY29tcG9uZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL2dldC1hcnJheS1pZi1zaW5nbGUtaXRlbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9nZXQtdmFsdWUtZnJvbS10ZXh0LW5vZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NtaXRoeS1jbGllbnQvZGlzdC1janMvbGF6eS1qc29uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL29iamVjdC1tYXBwaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL3Jlc29sdmUtcGF0aC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9zZXItdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NtaXRoeS1jbGllbnQvZGlzdC1janMvc2VyZGUtanNvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9zcGxpdC1ldmVyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvZW5kcG9pbnQvRW5kcG9pbnRQYXJhbWV0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstc3RzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9lbmRwb2ludC9FbmRwb2ludFBhcmFtZXRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL21vZGVscy9TVFNTZXJ2aWNlRXhjZXB0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2Fib3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9hdXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9ibG9iL2Jsb2ItcGF5bG9hZC1pbnB1dC10eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY2hlY2tzdW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2NsaWVudC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2Nvbm5lY3Rpb24vbWFuYWdlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9wb29sLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jcnlwdG8uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuY29kZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9FbmRwb2ludFJ1bGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9FcnJvclJ1bGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9SdWxlU2V0T2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9lbmRwb2ludHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9lbmRwb2ludHMvVHJlZVJ1bGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZXZlbnRTdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L2F3c0NyZWRlbnRpYWxJZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvaWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9sb2dnZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL21pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3BhZ2luYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3Byb2ZpbGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3Jlc3BvbnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9yZXRyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc2VyZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3NoYXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc2lnbmF0dXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3N0cmVhbWluZy1wYXlsb2FkL3N0cmVhbWluZy1ibG9iLWNvbW1vbi10eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItcGF5bG9hZC1pbnB1dC10eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItcGF5bG9hZC1vdXRwdXQtdHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3RyYW5zZmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy90cmFuc2Zvcm0vY2xpZW50LXBheWxvYWQtYmxvYi10eXBlLW5hcnJvdy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvdHJhbnNmb3JtL3R5cGUtdHJhbnNmb3JtLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy91cmkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3V0aWwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3dhaXRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvRmllbGQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvRmllbGRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBIYW5kbGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBSZXF1ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBSZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9pc1ZhbGlkSG9zdG5hbWUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvdHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3ZhbGlkYXRvci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL09wdGlvbnNCdWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL0RvY1R5cGVSZWFkZXIuanMiLCAibm9kZV9tb2R1bGVzL3N0cm51bS9zdHJudW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvbm9kZTJqc29uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvWE1MUGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbGJ1aWxkZXIvanNvbjJ4bWwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL2Z4cC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvcHJvdG9jb2xzL0F3c19xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvQXNzdW1lUm9sZUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9kZWZhdWx0U3RzUm9sZUFzc3VtZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYvZGlzdC1janMvZnJvbUVudi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItZW52L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL2dldEhvbWVEaXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvZ2V0UHJvZmlsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvZ2V0U1NPVG9rZW5GaWxlcGF0aC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlci9kaXN0LWNqcy9nZXRTU09Ub2tlbkZyb21GaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL2dldENvbmZpZ0ZpbGVwYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL2dldENyZWRlbnRpYWxzRmlsZXBhdGguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvZ2V0UHJvZmlsZURhdGEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvcGFyc2VJbmkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvc2x1cnBGaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL2xvYWRTaGFyZWRDb25maWdGaWxlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlci9kaXN0LWNqcy9nZXRTc29TZXNzaW9uRGF0YS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlci9kaXN0LWNqcy9sb2FkU3NvU2Vzc2lvbkRhdGEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvbWVyZ2VDb25maWdGaWxlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlci9kaXN0LWNqcy9wYXJzZUtub3duRmlsZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvdHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy9kaXN0LWNqcy9yZW1vdGVQcm92aWRlci9odHRwUmVxdWVzdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzL2Rpc3QtY2pzL3JlbW90ZVByb3ZpZGVyL0ltZHNDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzL2Rpc3QtY2pzL3JlbW90ZVByb3ZpZGVyL1JlbW90ZVByb3ZpZGVySW5pdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzL2Rpc3QtY2pzL3JlbW90ZVByb3ZpZGVyL3JldHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvZGlzdC1janMvZnJvbUNvbnRhaW5lck1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWNvbmZpZy1wcm92aWRlci9kaXN0LWNqcy9mcm9tRW52LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWNvbmZpZy1wcm92aWRlci9kaXN0LWNqcy9mcm9tU2hhcmVkQ29uZmlnRmlsZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyL2Rpc3QtY2pzL2Zyb21TdGF0aWMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyL2Rpc3QtY2pzL2NvbmZpZ0xvYWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbm9kZS1jb25maWctcHJvdmlkZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy9kaXN0LWNqcy9jb25maWcvRW5kcG9pbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy9kaXN0LWNqcy9jb25maWcvRW5kcG9pbnRDb25maWdPcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvZGlzdC1janMvY29uZmlnL0VuZHBvaW50TW9kZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzL2Rpc3QtY2pzL2NvbmZpZy9FbmRwb2ludE1vZGVDb25maWdPcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvZGlzdC1janMvdXRpbHMvZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvZGlzdC1janMvdXRpbHMvZ2V0RXh0ZW5kZWRJbnN0YW5jZU1ldGFkYXRhQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy9kaXN0LWNqcy91dGlscy9zdGF0aWNTdGFiaWxpdHlQcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzL2Rpc3QtY2pzL2Zyb21JbnN0YW5jZU1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvZGlzdC1janMvdHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVDcmVkZW50aWFsU291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkvZGlzdC1janMvcmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2Vzcy9kaXN0LWNqcy9nZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2Vzcy9kaXN0LWNqcy9mcm9tUHJvY2Vzcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2Vzcy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzby9kaXN0LWNqcy9pc1Nzb1Byb2ZpbGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvaGFzaC1ub2RlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9xdWVyeXN0cmluZy1idWlsZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25vZGUtaHR0cC1oYW5kbGVyL2Rpc3QtY2pzL2dldC10cmFuc2Zvcm1lZC1oZWFkZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9zZXQtY29ubmVjdGlvbi10aW1lb3V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9zZXQtc29ja2V0LWtlZXAtYWxpdmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25vZGUtaHR0cC1oYW5kbGVyL2Rpc3QtY2pzL3NldC1zb2NrZXQtdGltZW91dC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbm9kZS1odHRwLWhhbmRsZXIvZGlzdC1janMvd3JpdGUtcmVxdWVzdC1ib2R5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9ub2RlLWh0dHAtaGFuZGxlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbm9kZS1odHRwLWhhbmRsZXIvZGlzdC1janMvbm9kZS1odHRwMi1jb25uZWN0aW9uLXBvb2wuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25vZGUtaHR0cC1oYW5kbGVyL2Rpc3QtY2pzL25vZGUtaHR0cDItY29ubmVjdGlvbi1tYW5hZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9ub2RlLWh0dHAyLWhhbmRsZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25vZGUtaHR0cC1oYW5kbGVyL2Rpc3QtY2pzL3N0cmVhbS1jb2xsZWN0b3IvY29sbGVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9zdHJlYW0tY29sbGVjdG9yL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1ib2R5LWxlbmd0aC1ub2RlL2Rpc3QtY2pzL2NhbGN1bGF0ZUJvZHlMZW5ndGguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtYm9keS1sZW5ndGgtbm9kZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlL2Rpc3QtY2pzL2lzLWNydC1hdmFpbGFibGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1iYXNlNjQvZGlzdC1janMvZnJvbUJhc2U2NC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1iYXNlNjQvZGlzdC1janMvdG9CYXNlNjQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtYmFzZTY0L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9lbmRwb2ludC9ydWxlc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9ydW50aW1lQ29uZmlnLnNoYXJlZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1kZWZhdWx0cy1tb2RlLW5vZGUvZGlzdC1janMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZS9kaXN0LWNqcy9kZWZhdWx0c01vZGVDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlL2Rpc3QtY2pzL3Jlc29sdmVEZWZhdWx0c01vZGVDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9ydW50aW1lQ29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9TU09DbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL21vZGVscy9TU09TZXJ2aWNlRXhjZXB0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvY29tbWFuZHMvTGlzdEFjY291bnRzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvY29tbWFuZHMvTG9nb3V0Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvU1NPLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvcGFnaW5hdGlvbi9JbnRlcmZhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9wYWdpbmF0aW9uL0xpc3RBY2NvdW50Um9sZXNQYWdpbmF0b3IuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3BhZ2luYXRpb24vTGlzdEFjY291bnRzUGFnaW5hdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9wYWdpbmF0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtbG9nZ2VyL2Rpc3QtY2pzL2xvZ2dlck1pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudC9kaXN0LWNqcy9jb25maWd1cmF0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL3BhcnRpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9kZWJ1Zy9kZWJ1Z0lkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2RlYnVnL3RvRGVidWdTdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvZGVidWcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRW5kcG9pbnRFcnJvci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy90eXBlcy9FbmRwb2ludFJ1bGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRXJyb3JSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL1J1bGVTZXRPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvVHJlZVJ1bGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9pc0lwQWRkcmVzcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvaXNWYWxpZEhvc3RMYWJlbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL2lzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2F3cy9wYXJzZUFybi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9ib29sZWFuRXF1YWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9nZXRBdHRyUGF0aExpc3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2dldEF0dHIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2lzU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9ub3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvYWJvcnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvYXV0aC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jaGVja3N1bS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL2NvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL21hbmFnZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9wb29sLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Nvbm5lY3Rpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY3J5cHRvLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Rucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9lbmRwb2ludC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9ldmVudFN0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L0Fub255bW91c0lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L0F3c0NyZWRlbnRpYWxJZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9JZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9Mb2dpbklkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L1Rva2VuSWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvbG9nZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL21pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcGFnaW5hdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9wcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3JlcXVlc3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcmVzcG9uc2UuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcmV0cnkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvc2VyZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvc2hhcGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3NpZ25hdHVyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvdHJhbnNmZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy93YWl0ZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3BhcnNlVVJMLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9zdHJpbmdFcXVhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3N1YnN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvdXJpRW5jb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVRlbXBsYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldFJlZmVyZW5jZVZhbHVlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9jYWxsRnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVDb25kaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVDb25kaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldEVuZHBvaW50SGVhZGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludFByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldEVuZHBvaW50UHJvcGVydGllcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludFVybC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUVuZHBvaW50UnVsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUVycm9yUnVsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVRyZWVSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlUnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvcmVzb2x2ZUVuZHBvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudC9kaXN0LWNqcy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL3VzZXItYWdlbnQtbWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9lbmRwb2ludC9FbmRwb2ludFBhcmFtZXRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGUvZGlzdC1janMvaXMtY3J0LWF2YWlsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL2Rpc3QtY2pzL2VuZHBvaW50L3J1bGVzZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvZGlzdC1janMvcnVudGltZUNvbmZpZy5zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9ydW50aW1lQ29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvZGlzdC1janMvU1NPT0lEQ0NsaWVudC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2Fib3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvYXV0aC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2Jsb2IvYmxvYi1wYXlsb2FkLWlucHV0LXR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY2hlY2tzdW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL21hbmFnZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL3Bvb2wuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY3J5cHRvLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5jb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9lbmRwb2ludHMvRW5kcG9pbnRSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnRzL0Vycm9yUnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9SdWxlU2V0T2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnRzL3NoYXJlZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9UcmVlUnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2V2ZW50U3RyZWFtLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaHR0cC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L2F3c0NyZWRlbnRpYWxJZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L2lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9sb2dnZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9taWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvcGFnaW5hdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3Byb2ZpbGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9yZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3JldHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc2VyZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zaGFwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zaWduYXR1cmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1jb21tb24tdHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1wYXlsb2FkLWlucHV0LXR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItcGF5bG9hZC1vdXRwdXQtdHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy90cmFuc2Zlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3RyYW5zZm9ybS9jbGllbnQtcGF5bG9hZC1ibG9iLXR5cGUtbmFycm93LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvdHJhbnNmb3JtL3R5cGUtdHJhbnNmb3JtLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvdXJpLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3dhaXRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9GaWVsZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvRmllbGRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9odHRwSGFuZGxlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaHR0cFJlcXVlc3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9ub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2h0dHBSZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaXNWYWxpZEhvc3RuYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy90eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9tb2RlbHMvU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL2Rpc3QtY2pzL2NvbW1hbmRzL0NyZWF0ZVRva2VuQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL2Rpc3QtY2pzL2NvbW1hbmRzL1JlZ2lzdGVyQ2xpZW50Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjL2Rpc3QtY2pzL2NvbW1hbmRzL1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9TU09PSURDLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvLW9pZGMvZGlzdC1janMvY29tbWFuZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9tb2RlbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28tb2lkYy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9nZXRTc29PaWRjQ2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2dldE5ld1Nzb09pZGNUb2tlbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy92YWxpZGF0ZVRva2VuRXhwaXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL3ZhbGlkYXRlVG9rZW5LZXkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvd3JpdGVTU09Ub2tlblRvRmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9mcm9tU3NvLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2Zyb21TdGF0aWMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvbm9kZVByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvcmVzb2x2ZVNTT0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvdmFsaWRhdGVTc29Qcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvZnJvbVNTTy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlU3NvQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eS9kaXN0LWNqcy9mcm9tV2ViVG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eS9kaXN0LWNqcy9mcm9tVG9rZW5GaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVQcm9maWxlRGF0YS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL2Zyb21JbmkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS9kaXN0LWNqcy9yZW1vdGVQcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS9kaXN0LWNqcy9kZWZhdWx0UHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLW5vZGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L3J1bGVzZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9ydW50aW1lQ29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9TVFNDbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0dldENhbGxlcklkZW50aXR5Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0U2Vzc2lvblRva2VuQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvU1RTLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9jb21tYW5kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvbW9kZWxzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9kZWZhdWx0Um9sZUFzc3VtZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvZW5kcG9pbnQvcnVsZXNldC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvZW5kcG9pbnQvZW5kcG9pbnRSZXNvbHZlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvcnVudGltZUNvbmZpZy5zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL0NvZ25pdG9JZGVudGl0eUNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvbW9kZWxzL0NvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL21vZGVscy9tb2RlbHNfMC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvcHJvdG9jb2xzL0F3c19qc29uMV8xLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9DcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9EZWxldGVJZGVudGl0aWVzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2NvbW1hbmRzL0Rlc2NyaWJlSWRlbnRpdHlQb29sQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2NvbW1hbmRzL0dldElkQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9HZXRPcGVuSWRUb2tlbkNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2NvbW1hbmRzL0dldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9HZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9MaXN0SWRlbnRpdGllc0NvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2NvbW1hbmRzL0xpc3RJZGVudGl0eVBvb2xzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2NvbW1hbmRzL0xvb2t1cERldmVsb3BlcklkZW50aXR5Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9TZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9UYWdSZXNvdXJjZUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2NvbW1hbmRzL1VubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvVW5saW5rSWRlbnRpdHlDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9VbnRhZ1Jlc291cmNlQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvY29tbWFuZHMvVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvQ29nbml0b0lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9jb21tYW5kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvcGFnaW5hdGlvbi9JbnRlcmZhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9wYWdpbmF0aW9uL0xpc3RJZGVudGl0eVBvb2xzUGFnaW5hdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9wYWdpbmF0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9tb2RlbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvQ29nbml0b1Byb3ZpZGVyUGFyYW1ldGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL0xvZ2lucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL1N0b3JhZ2UuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9yZXNvbHZlTG9naW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWNvZ25pdG8taWRlbnRpdHkvZGlzdC1janMvZnJvbUNvZ25pdG9JZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL0luZGV4ZWREYlN0b3JhZ2UuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9Jbk1lbW9yeVN0b3JhZ2UuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9sb2NhbFN0b3JhZ2UuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eS9kaXN0LWNqcy9mcm9tQ29nbml0b0lkZW50aXR5UG9vbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1jb2duaXRvLWlkZW50aXR5L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9kaXN0LWNqcy9mcm9tQ29nbml0b0lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9kaXN0LWNqcy9mcm9tQ29nbml0b0lkZW50aXR5UG9vbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvZGlzdC1janMvZnJvbUNvbnRhaW5lck1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYvZGlzdC1janMvZnJvbUVudi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItZW52L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9kaXN0LWNqcy9mcm9tRW52LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtbG9nZ2VyL2Rpc3QtY2pzL2xvZ2dlck1pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvbi9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZy9kaXN0LWNqcy9jb25maWd1cmF0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZy9kaXN0LWNqcy91dGlscy9nZXRTa2V3Q29ycmVjdGVkRGF0ZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZy9kaXN0LWNqcy91dGlscy9pc0Nsb2NrU2tld2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL3V0aWxzL2dldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZy9kaXN0LWNqcy9taWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstc3RzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL2NvbmZpZ3VyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2F3cy9wYXJ0aXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9kZWJ1Zy9kZWJ1Z0lkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvZGVidWcvdG9EZWJ1Z1N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2RlYnVnL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRW5kcG9pbnRFcnJvci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL0VuZHBvaW50UnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL0Vycm9yUnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL1J1bGVTZXRPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy90eXBlcy9UcmVlUnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL3NoYXJlZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2lzSXBBZGRyZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2lzVmFsaWRIb3N0TGFiZWwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL2lzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL3BhcnNlQXJuLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2F3cy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9ib29sZWFuRXF1YWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2dldEF0dHJQYXRoTGlzdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9nZXRBdHRyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2lzU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL25vdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Fib3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvYXV0aC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2NoZWNrc3VtLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Nvbm5lY3Rpb24vY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9tYW5hZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9wb29sLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY3J5cHRvLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvZG5zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvZW5kcG9pbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9ldmVudFN0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9Bbm9ueW1vdXNJZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L0F3c0NyZWRlbnRpYWxJZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L0lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvTG9naW5JZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L1Rva2VuSWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2xvZ2dlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL21pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9wYWdpbmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcHJvZmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3JlcXVlc3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9yZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3JldHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvc2VyZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9zaGFwZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9zaWduYXR1cmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3RyYW5zZmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3dhaXRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3BhcnNlVVJMLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3N0cmluZ0VxdWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9zdWJzdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvdXJpRW5jb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVUZW1wbGF0ZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldFJlZmVyZW5jZVZhbHVlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvY2FsbEZ1bmN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVDb25kaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUNvbmRpdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludEhlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludFByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZ2V0RW5kcG9pbnRVcmwuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUVuZHBvaW50UnVsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlRXJyb3JSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVUcmVlUnVsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlUnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3Jlc29sdmVFbmRwb2ludC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudC9kaXN0LWNqcy91c2VyLWFnZW50LW1pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvbW9kZWxzL1NUU1NlcnZpY2VFeGNlcHRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL21vZGVscy9tb2RlbHNfMC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvYWJvcnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2F1dGguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2Jsb2IvYmxvYi1wYXlsb2FkLWlucHV0LXR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jaGVja3N1bS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL2NvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvY29ubmVjdGlvbi9tYW5hZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9jb25uZWN0aW9uL3Bvb2wuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2Nvbm5lY3Rpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2NyeXB0by5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5jb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9lbmRwb2ludC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnRzL0VuZHBvaW50UnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnRzL0Vycm9yUnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnRzL1J1bGVTZXRPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50cy9UcmVlUnVsZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvZW5kcG9pbnRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9ldmVudFN0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaHR0cC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvYXdzQ3JlZGVudGlhbElkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9pZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL2xvZ2dlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvbWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvcGFnaW5hdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvcHJvZmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvcmVzcG9uc2UuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3JldHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zZXJkZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc2hhcGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zaWduYXR1cmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3N0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItY29tbW9uLXR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1wYXlsb2FkLWlucHV0LXR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1wYXlsb2FkLW91dHB1dC10eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvdHJhbnNmZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3RyYW5zZm9ybS9jbGllbnQtcGF5bG9hZC1ibG9iLXR5cGUtbmFycm93LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy90cmFuc2Zvcm0vdHlwZS10cmFuc2Zvcm0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3R5cGVzL2Rpc3QtY2pzL3VyaS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMvZGlzdC1janMvd2FpdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9GaWVsZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9GaWVsZHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaHR0cEhhbmRsZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaHR0cFJlcXVlc3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvZGlzdC1janMvaHR0cFJlc3BvbnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2lzVmFsaWRIb3N0bmFtZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy90eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvT3B0aW9uc0J1aWxkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci94bWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL09yZGVyZWRPYmpQYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9YTUxQYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbGJ1aWxkZXIvb3JkZXJlZEpzMlhtbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvZnhwLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9wcm90b2NvbHMvQXdzX3F1ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9jb21tYW5kcy9Bc3N1bWVSb2xlQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2RlZmF1bHRTdHNSb2xlQXNzdW1lcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzL2Rpc3QtY2pzL3Jlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvZnJvbVByb2Nlc3MuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvaXNTc29Qcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9lbmRwb2ludC9FbmRwb2ludFBhcmFtZXRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZS9kaXN0LWNqcy9pcy1jcnQtYXZhaWxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2VuZHBvaW50L3J1bGVzZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9ydW50aW1lQ29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9TU09DbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL21vZGVscy9TU09TZXJ2aWNlRXhjZXB0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvY29tbWFuZHMvTGlzdEFjY291bnRzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvY29tbWFuZHMvTG9nb3V0Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvU1NPLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvcGFnaW5hdGlvbi9JbnRlcmZhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9wYWdpbmF0aW9uL0xpc3RBY2NvdW50Um9sZXNQYWdpbmF0b3IuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3BhZ2luYXRpb24vTGlzdEFjY291bnRzUGFnaW5hdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9wYWdpbmF0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9nZXRTc29PaWRjQ2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2dldE5ld1Nzb09pZGNUb2tlbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy92YWxpZGF0ZVRva2VuRXhwaXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL3ZhbGlkYXRlVG9rZW5LZXkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvd3JpdGVTU09Ub2tlblRvRmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9mcm9tU3NvLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2Zyb21TdGF0aWMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvbm9kZVByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvcmVzb2x2ZVNTT0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvdmFsaWRhdGVTc29Qcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvZnJvbVNTTy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlU3NvQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eS9kaXN0LWNqcy9mcm9tV2ViVG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eS9kaXN0LWNqcy9mcm9tVG9rZW5GaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVQcm9maWxlRGF0YS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL2Zyb21JbmkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS9kaXN0LWNqcy9yZW1vdGVQcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS9kaXN0LWNqcy9kZWZhdWx0UHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLW5vZGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L3J1bGVzZXQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9ydW50aW1lQ29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9TVFNDbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0dldENhbGxlcklkZW50aXR5Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0U2Vzc2lvblRva2VuQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvU1RTLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9jb21tYW5kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvbW9kZWxzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9kZWZhdWx0Um9sZUFzc3VtZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvZGlzdC1janMvZnJvbUluaS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvZGlzdC1janMvZnJvbUluc3RhbmNlTWV0YWRhdGEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL2Rpc3QtY2pzL2Zyb21Ob2RlUHJvdmlkZXJDaGFpbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvZGlzdC1janMvZnJvbVByb2Nlc3MuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL2Rpc3QtY2pzL2Zyb21TU08uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzL2Rpc3QtY2pzL2Zyb21UZW1wb3JhcnlDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvZGlzdC1janMvZnJvbVRva2VuRmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvZGlzdC1janMvZnJvbVdlYlRva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by9zaGEyNTYtanMvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by9zaGEyNTYtanMvYnVpbGQvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by9zaGEyNTYtanMvYnVpbGQvUmF3U2hhMjU2LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXV0ZjgtYnJvd3Nlci9kaXN0LWNqcy9wdXJlSnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXRmOC1icm93c2VyL2Rpc3QtY2pzL3doYXR3Z0VuY29kaW5nQXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXV0ZjgtYnJvd3Nlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbC9idWlsZC9jb252ZXJ0VG9CdWZmZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvYnVpbGQvaXNFbXB0eURhdGEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvYnVpbGQvbnVtVG9VaW50OC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbC9idWlsZC91aW50MzJBcnJheUZyb20uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvYnVpbGQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3NoYTI1Ni1qcy9idWlsZC9qc1NoYTI1Ni5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWpzL2J1aWxkL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by9jcmMzMi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL2NyYzMyL25vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by91dGlsL2J1aWxkL2NvbnZlcnRUb0J1ZmZlci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vY3JjMzIvbm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvYnVpbGQvaXNFbXB0eURhdGEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL2NyYzMyL25vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by91dGlsL2J1aWxkL251bVRvVWludDguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL2NyYzMyL25vZGVfbW9kdWxlcy9AYXdzLWNyeXB0by91dGlsL2J1aWxkL3VpbnQzMkFycmF5RnJvbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vY3JjMzIvbm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvYnVpbGQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL2NyYzMyL2J1aWxkL2F3c19jcmMzMi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vY3JjMzIvYnVpbGQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmcvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvZXZlbnRzdHJlYW0tY29kZWMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvZXZlbnRzdHJlYW0tc2VyZGUtdW5pdmVyc2FsL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2V2ZW50c3RyZWFtLXNlcmRlLW5vZGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbS9ub2RlX21vZHVsZXMvQHNtaXRoeS9pcy1hcnJheS1idWZmZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJhc2U2NC9kaXN0LWNqcy9mcm9tQmFzZTY0LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtdXRmOC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJhc2U2NC9kaXN0LWNqcy90b0Jhc2U2NC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJhc2U2NC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXVyaS1lc2NhcGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9mZXRjaC1odHRwLWhhbmRsZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1zdGFjay9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9nZXRBd3NDaHVua2VkRW5jb2RpbmdTdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1zdHJlYW0vZGlzdC1janMvc2RrLXN0cmVhbS1taXhpbi5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zbWl0aHktY2xpZW50L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlci9kaXN0LWNqcy9sb2dnZXJNaWRkbGV3YXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtbWlkZGxld2FyZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL25vZGVfbW9kdWxlcy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL25vZGVfbW9kdWxlcy9Ac21pdGh5L3NpZ25hdHVyZS12NC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nL2Rpc3QtY2pzL2F3c0F1dGhDb25maWd1cmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmcvZGlzdC1janMvdXRpbHMvZ2V0U2tld0NvcnJlY3RlZERhdGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZy9kaXN0LWNqcy91dGlscy9pc0Nsb2NrU2tld2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmcvZGlzdC1janMvdXRpbHMvZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmcvZGlzdC1janMvYXdzQXV0aE1pZGRsZXdhcmUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL2NvbmZpZ3VyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL3BhcnRpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2lzSXBBZGRyZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9kZWJ1Zy9kZWJ1Z0lkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9kZWJ1Zy90b0RlYnVnU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9kZWJ1Zy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRW5kcG9pbnRFcnJvci5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdHlwZXMvRW5kcG9pbnRSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy90eXBlcy9FcnJvclJ1bGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL1J1bGVTZXRPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL1RyZWVSdWxlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy90eXBlcy9zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3R5cGVzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvaXNWYWxpZEhvc3RMYWJlbC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2F3cy9pc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL3BhcnNlQXJuLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYXdzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9saWIvYm9vbGVhbkVxdWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2dldEF0dHJQYXRoTGlzdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2dldEF0dHIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9pc1NldC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL25vdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Fib3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvYXV0aC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Jsb2IvYmxvYi10eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2NoZWNrc3VtLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvY29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Nvbm5lY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9jcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2NyeXB0by5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2Rucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2VuY29kZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2VuZHBvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvZXZlbnRTdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9leHRlbnNpb25zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaHR0cC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L0Fub255bW91c0lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvQXdzQ3JlZGVudGlhbElkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvSWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9pZGVudGl0eS9Mb2dpbklkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaWRlbnRpdHkvVG9rZW5JZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL2lkZW50aXR5L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvbG9nZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvbWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3BhZ2luYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9wcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcmVxdWVzdC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3Jlc3BvbnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvcmV0cnkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy9zZXJkZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3NoYXBlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3NpZ25hdHVyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3N0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzL2Rpc3QtY2pzL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvdHJhbnNmZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy91cmkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL25vZGVfbW9kdWxlcy9AYXdzLXNkay90eXBlcy9kaXN0LWNqcy91dGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvd2FpdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9ub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL2xpYi9wYXJzZVVSTC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3N0cmluZ0VxdWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3N1YnN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL3VyaUVuY29kZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVRlbXBsYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRSZWZlcmVuY2VWYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9jYWxsRnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlQ29uZGl0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZUNvbmRpdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2dldEVuZHBvaW50SGVhZGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZ2V0RW5kcG9pbnRQcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9nZXRFbmRwb2ludFVybC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvdXRpbHMvZXZhbHVhdGVFbmRwb2ludFJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzL2Rpc3QtY2pzL3V0aWxzL2V2YWx1YXRlRXJyb3JSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVRyZWVSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9ldmFsdWF0ZVJ1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy91dGlscy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvZGlzdC1janMvcmVzb2x2ZUVuZHBvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL3VzZXItYWdlbnQtbWlkZGxld2FyZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtY29uZmlnLXByb3ZpZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2NvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9ldmVudHN0cmVhbS1zZXJkZS1jb25maWctcmVzb2x2ZXIvZGlzdC1janMvRXZlbnRTdHJlYW1TZXJkZUNvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9ldmVudHN0cmVhbS1zZXJkZS1jb25maWctcmVzb2x2ZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1jb250ZW50LWxlbmd0aC9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL2dldEhvbWVEaXIuanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2hhcmVkLWluaS1maWxlLWxvYWRlci9kaXN0LWNqcy9nZXRTU09Ub2tlbkZpbGVwYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIvZGlzdC1janMvZ2V0U1NPVG9rZW5Gcm9tRmlsZS5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL3NsdXJwRmlsZS5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQvZGlzdC1janMvYWRhcHRvcnMvZ2V0RW5kcG9pbnRVcmxDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludC9kaXN0LWNqcy9hZGFwdG9ycy9nZXRFbmRwb2ludEZyb21Db25maWcuanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvcXVlcnlzdHJpbmctcGFyc2VyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3VybC1wYXJzZXIvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1zZXJkZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9ybmcuanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1yZXRyeS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JlZ2V4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92YWxpZGF0ZS5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3Qvc3RyaW5naWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92MS5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1yZXRyeS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3YzNS5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbWQ1LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92My5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbmF0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92NC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3Qvc2hhMS5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjUuanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1yZXRyeS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L25pbC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvbi9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXJldHJ5L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvZGlzdC1janMvaXNTdHJlYW1pbmdQYXlsb2FkL2lzU3RyZWFtaW5nUGF5bG9hZC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5L2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lL2Rpc3QtY2pzL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstc3RzL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVycy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9tb2RlbHMvU1RTU2VydmljZUV4Y2VwdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy92YWxpZGF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL09wdGlvbnNCdWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci94bWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9Eb2NUeXBlUmVhZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAibm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICJub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAibm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICJub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvcHJvdG9jb2xzL0F3c19xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9jb21tYW5kcy9Bc3N1bWVSb2xlQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9jb21tYW5kcy9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9kZWZhdWx0U3RzUm9sZUFzc3VtZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWVudi9kaXN0LWNqcy9mcm9tRW52LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWVudi9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVDcmVkZW50aWFsU291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzL2Rpc3QtY2pzL2Zyb21Qcm9jZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL2lzU3NvUHJvZmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9lbmRwb2ludC9FbmRwb2ludFBhcmFtZXRlcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlL2Rpc3QtY2pzL2lzLWNydC1hdmFpbGFibGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2hhc2gtbm9kZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvZW5kcG9pbnQvcnVsZXNldC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIvZGlzdC1janMvZXh0ZW5zaW9ucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvcmVnaW9uLWNvbmZpZy1yZXNvbHZlci9kaXN0LWNqcy9yZWdpb25Db25maWcvY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9yZWdpb24tY29uZmlnLXJlc29sdmVyL2Rpc3QtY2pzL3JlZ2lvbkNvbmZpZy9pc0ZpcHNSZWdpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uQ29uZmlnL2dldFJlYWxSZWdpb24uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uQ29uZmlnL3Jlc29sdmVSZWdpb25Db25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIvZGlzdC1janMvcmVnaW9uQ29uZmlnL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9yZWdpb24tY29uZmlnLXJlc29sdmVyL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3J1bnRpbWVFeHRlbnNpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL1NTT0NsaWVudC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvU1NPU2VydmljZUV4Y2VwdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvcHJvdG9jb2xzL0F3c19yZXN0SnNvbjEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvY29tbWFuZHMvR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9jb21tYW5kcy9MaXN0QWNjb3VudHNDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2NvbW1hbmRzL0xvZ291dENvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvU1NPLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL2NvbW1hbmRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3BhZ2luYXRpb24vSW50ZXJmYWNlcy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9wYWdpbmF0aW9uL0xpc3RBY2NvdW50Um9sZXNQYWdpbmF0b3IuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvcGFnaW5hdGlvbi9MaXN0QWNjb3VudHNQYWdpbmF0b3IuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvcGFnaW5hdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9tb2RlbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9idW5kbGUvY2xpZW50LXNzby1vaWRjLW5vZGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9nZXRTc29PaWRjQ2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvZ2V0TmV3U3NvT2lkY1Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvdmFsaWRhdGVUb2tlbkV4cGlyeS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL3ZhbGlkYXRlVG9rZW5LZXkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy93cml0ZVNTT1Rva2VuVG9GaWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvZGlzdC1janMvZnJvbVNzby5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzL2Rpc3QtY2pzL2Zyb21TdGF0aWMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9ub2RlUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28vZGlzdC1janMvcmVzb2x2ZVNTT0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzby9kaXN0LWNqcy92YWxpZGF0ZVNzb1Byb2ZpbGUuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL2Zyb21TU08uanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzby9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkvZGlzdC1janMvcmVzb2x2ZVNzb0NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5L2Rpc3QtY2pzL2Zyb21XZWJUb2tlbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkvZGlzdC1janMvZnJvbVRva2VuRmlsZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL3Jlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS9kaXN0LWNqcy9yZXNvbHZlUHJvZmlsZURhdGEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL2Zyb21JbmkuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pL2Rpc3QtY2pzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLW5vZGUvZGlzdC1janMvcmVtb3RlUHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS9kaXN0LWNqcy9kZWZhdWx0UHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS9kaXN0LWNqcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9lbmRwb2ludC9ydWxlc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvcnVudGltZUNvbmZpZy5zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvcnVudGltZUNvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9ydW50aW1lRXh0ZW5zaW9ucy5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9TVFNDbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9jb21tYW5kcy9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2NvbW1hbmRzL0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvR2V0U2Vzc2lvblRva2VuQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXN0cy9kaXN0LWNqcy9TVFMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvY29tbWFuZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvbW9kZWxzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3RzL2Rpc3QtY2pzL2RlZmF1bHRSb2xlQXNzdW1lcnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zdHMvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvZW5kcG9pbnQvcnVsZXNldC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZS9kaXN0LWNqcy9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvcnVudGltZUV4dGVuc2lvbnMuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvQmVkcm9ja1J1bnRpbWVDbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvbW9kZWxzL0JlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZS9kaXN0LWNqcy9tb2RlbHMvbW9kZWxzXzAuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvcHJvdG9jb2xzL0F3c19yZXN0SnNvbjEuanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvY29tbWFuZHMvSW52b2tlTW9kZWxDb21tYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lL2Rpc3QtY2pzL2NvbW1hbmRzL0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZS9kaXN0LWNqcy9CZWRyb2NrUnVudGltZS5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZS9kaXN0LWNqcy9jb21tYW5kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZS9kaXN0LWNqcy9tb2RlbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUvZGlzdC1janMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2V4dGVuZC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaXMtc3RyZWFtL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3MvYnVpbGQvc3JjL3V0aWwuanMiLCAibm9kZV9tb2R1bGVzL2dheGlvcy9idWlsZC9zcmMvY29tbW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3MvYnVpbGQvc3JjL3JldHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3Mvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9ybmcuanMiLCAibm9kZV9tb2R1bGVzL2dheGlvcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JlZ2V4LmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3Mvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92YWxpZGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3Qvc3RyaW5naWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3Mvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92MS5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL2dheGlvcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3YzNS5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbWQ1LmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3Mvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92My5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbmF0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3Mvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92NC5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3Qvc2hhMS5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjUuanMiLCAibm9kZV9tb2R1bGVzL2dheGlvcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L25pbC5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvZ2F4aW9zL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2dheGlvcy9idWlsZC9zcmMvaW50ZXJjZXB0b3IuanMiLCAibm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAibm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2dheGlvcy9idWlsZC9zcmMvZ2F4aW9zLmpzIiwgIm5vZGVfbW9kdWxlcy9nYXhpb3MvYnVpbGQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9saWIvc3RyaW5naWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9saWIvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9nY3AtbWV0YWRhdGEvYnVpbGQvc3JjL2djcC1yZXNpZGVuY3kuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1sb2dnaW5nLXV0aWxzL2J1aWxkL3NyYy9jb2xvdXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtbG9nZ2luZy11dGlscy9idWlsZC9zcmMvbG9nZ2luZy11dGlscy5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWxvZ2dpbmctdXRpbHMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9nY3AtbWV0YWRhdGEvYnVpbGQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2NyeXB0by9icm93c2VyL2NyeXB0by5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvY3J5cHRvL25vZGUvY3J5cHRvLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9jcnlwdG8vY3J5cHRvLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9vcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy90cmFuc3BvcnRlcnMuanMiLCAibm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lY2RzYS1zaWctZm9ybWF0dGVyL3NyYy9wYXJhbS1ieXRlcy1mb3ItYWxnLmpzIiwgIm5vZGVfbW9kdWxlcy9lY2RzYS1zaWctZm9ybWF0dGVyL3NyYy9lY2RzYS1zaWctZm9ybWF0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy91dGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2F1dGhjbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvbG9naW50aWNrZXQuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvb2F1dGgyY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2NvbXB1dGVjbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvaWR0b2tlbmNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9lbnZEZXRlY3QuanMiLCAibm9kZV9tb2R1bGVzL2p3cy9saWIvZGF0YS1zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL2J1ZmZlci1lcXVhbC1jb25zdGFudC10aW1lL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9qd2EvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2p3cy9saWIvdG9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2p3cy9saWIvc2lnbi1zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL2p3cy9saWIvdmVyaWZ5LXN0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvandzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9ndG9rZW4vYnVpbGQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2p3dGFjY2Vzcy5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9qd3RjbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvcmVmcmVzaGNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9pbXBlcnNvbmF0ZWQuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvb2F1dGgyY29tbW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL3N0c2NyZWRlbnRpYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2Jhc2VleHRlcm5hbGNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9maWxlc3ViamVjdHRva2Vuc3VwcGxpZXIuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvdXJsc3ViamVjdHRva2Vuc3VwcGxpZXIuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvaWRlbnRpdHlwb29sY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2F3c3JlcXVlc3RzaWduZXIuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvZGVmYXVsdGF3c3NlY3VyaXR5Y3JlZGVudGlhbHNzdXBwbGllci5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9hd3NjbGllbnQuanMiLCAibm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvZXhlY3V0YWJsZS1yZXNwb25zZS5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9wbHVnZ2FibGUtYXV0aC1oYW5kbGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL3BsdWdnYWJsZS1hdXRoLWNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9leHRlcm5hbGNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9leHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudC5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9nb29nbGVhdXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2lhbS5qcyIsICJub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9kb3duc2NvcGVkY2xpZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL3Bhc3N0aHJvdWdoLmpzIiwgIm5vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZG90ZW52L2xpYi9tYWluLmpzIiwgIm5vZGVfbW9kdWxlcy9kb3RlbnYvbGliL2Vudi1vcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9kb3RlbnYvbGliL2NsaS1vcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9kb3RlbnYvY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2NvcmUuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzLzFjLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hY2Nlc3Nsb2cuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FjdGlvbnNjcmlwdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWRhLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hbmdlbHNjcmlwdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXBhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcHBsZXNjcmlwdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJjYWRlLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcmR1aW5vLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcm1hc20uanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3htbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXNjaWlkb2MuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FzcGVjdGouanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F1dG9ob3RrZXkuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F1dG9pdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXZyYXNtLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hd2suanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F4YXB0YS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYmFzaC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYmFzaWMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYnJhaW5mdWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jLWxpa2UuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2MuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NhbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FwbnByb3RvLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jZXlsb24uanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NsZWFuLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jbG9qdXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jbG9qdXJlLXJlcGwuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NtYWtlLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jb2ZmZWVzY3JpcHQuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NvcS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29zLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcHAuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NybXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcnlzdGFsLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc2hhcnAuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NzcC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NzLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXJrZG93bi5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGFydC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGVscGhpLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kaWZmLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kamFuZ28uanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Rucy5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZG9ja2VyZmlsZS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZG9zLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kc2NvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kdXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lbGl4aXIuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VsbS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVieS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZXJiLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmxhbmctcmVwbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZXJsYW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9leGNlbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZml4LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9mbGl4LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9mb3J0cmFuLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9mc2hhcnAuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dhbXMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dhdXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nY29kZS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2hlcmtpbi5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2xzbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ21sLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nby5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ29sby5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ3JhZGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncm9vdnkuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhbWwuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhbmRsZWJhcnMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhc2tlbGwuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hheGUuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hzcC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHRtbGJhcnMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2h5LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmZvcm03LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmkuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2lycGY5MC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaXNibC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YXNjcmlwdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamJvc3MtY2xpLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qc29uLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qdWxpYS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvanVsaWEtcmVwbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMva290bGluLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sYXNzby5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGF0ZXguanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xkaWYuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xlYWYuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xlc3MuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xpc3AuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xpdmVjb2Rlc2VydmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9saXZlc2NyaXB0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sbHZtLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sc2wuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2x1YS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWFrZWZpbGUuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hdGhlbWF0aWNhLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXRsYWIuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21heGltYS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWVsLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tZXJjdXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9taXBzYXNtLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9taXphci5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGVybC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9qb2xpY2lvdXMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vbmtleS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9vbnNjcmlwdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbjFxbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbmdpbnguanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25pbS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbml4LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ub2RlLXJlcGwuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25zaXMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29iamVjdGl2ZWMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29jYW1sLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9vcGVuc2NhZC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb3h5Z2VuZS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGFyc2VyMy5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGYuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Bnc3FsLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9waHAuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC10ZW1wbGF0ZS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGxhaW50ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb255LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb3dlcnNoZWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9jZXNzaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9maWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9sb2cuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3RvYnVmLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wdXBwZXQuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B1cmViYXNpYy5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHl0aG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9weXRob24tcmVwbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcW1sLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yZWFzb25tbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcmliLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb2JvY29uZi5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcm91dGVyb3MuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JzbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVsZXNsYW5ndWFnZS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVzdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2FzLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2FsYS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2NoZW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2lsYWIuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Njc3MuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NoZWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWFsaS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc21hbGx0YWxrLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWwuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NxZi5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FsX21vcmUuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NxbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3Rhbi5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3RhdGEuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0ZXAyMS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3R5bHVzLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdWJ1bml0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zd2lmdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGFnZ2Vyc2NyaXB0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy95YW1sLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90YXAuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RjbC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGhyaWZ0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90cC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHdpZy5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHlwZXNjcmlwdC5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmFsYS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmJuZXQuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Zic2NyaXB0LmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YnNjcmlwdC1odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92ZXJpbG9nLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92aGRsLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92aW0uanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3g4NmFzbS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveGwuanMiLCAibm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3hxdWVyeS5qcyIsICJub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvemVwaGlyLmpzIiwgIm5vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi91bmljb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9lcnJvci1jb2Rlcy5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6ZXIvcHJlcHJvY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXplci9uYW1lZC1lbnRpdHktZGF0YS5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6ZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2h0bWwuanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvcGFyc2VyL29wZW4tZWxlbWVudC1zdGFjay5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9wYXJzZXIvZm9ybWF0dGluZy1lbGVtZW50LWxpc3QuanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdXRpbHMvbWl4aW4uanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvZXh0ZW5zaW9ucy9wb3NpdGlvbi10cmFja2luZy9wcmVwcm9jZXNzb3ItbWl4aW4uanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvZXh0ZW5zaW9ucy9sb2NhdGlvbi1pbmZvL3Rva2VuaXplci1taXhpbi5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9leHRlbnNpb25zL2xvY2F0aW9uLWluZm8vb3Blbi1lbGVtZW50LXN0YWNrLW1peGluLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2V4dGVuc2lvbnMvbG9jYXRpb24taW5mby9wYXJzZXItbWl4aW4uanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvZXh0ZW5zaW9ucy9lcnJvci1yZXBvcnRpbmcvbWl4aW4tYmFzZS5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9leHRlbnNpb25zL2Vycm9yLXJlcG9ydGluZy9wcmVwcm9jZXNzb3ItbWl4aW4uanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvZXh0ZW5zaW9ucy9lcnJvci1yZXBvcnRpbmcvdG9rZW5pemVyLW1peGluLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2V4dGVuc2lvbnMvZXJyb3ItcmVwb3J0aW5nL3BhcnNlci1taXhpbi5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlLWFkYXB0ZXJzL2RlZmF1bHQuanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdXRpbHMvbWVyZ2Utb3B0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vZG9jdHlwZS5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vZm9yZWlnbi1jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3BhcnNlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zZXJpYWxpemVyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUtaHRtbHBhcnNlcjItdHJlZS1hZGFwdGVyL25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUtaHRtbHBhcnNlcjItdHJlZS1hZGFwdGVyL25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9kb2N0eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUtaHRtbHBhcnNlcjItdHJlZS1hZGFwdGVyL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29sb3ItbmFtZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9jb252ZXJzaW9ucy5qcyIsICJub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9yb3V0ZS5qcyIsICJub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2xpLWhpZ2hsaWdodC9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NsaS1oaWdobGlnaHQvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NsaS1oaWdobGlnaHQvZGlzdC90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvY2xpLWhpZ2hsaWdodC9kaXN0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9saWIvaXMuanMiLCAibm9kZV9tb2R1bGVzL2RldGVjdC1saWJjL2xpYi9wcm9jZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9kZXRlY3QtbGliYy9saWIvZmlsZXN5c3RlbS5qcyIsICJub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2RldGVjdC1saWJjLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9yZS5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9wYXJzZS1vcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2lkZW50aWZpZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvc2VtdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29lcmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9ndGUuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvbHJ1Y2FjaGUuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2VxLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9uZXEuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0LmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdC5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHRlLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbXAuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9jb21wYXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvcmFuZ2UuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NhdGlzZmllcy5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbGliL2xpYnZpcHMuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL2xpYi9zaGFycC5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbGliL2NvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9zaW1wbGUtc3dpenpsZS9ub2RlX21vZHVsZXMvaXMtYXJyYXlpc2gvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3NpbXBsZS1zd2l6emxlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb2xvci1zdHJpbmcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbG9yL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9saWIvaW5wdXQuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL2xpYi9yZXNpemUuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL2xpYi9jb21wb3NpdGUuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL2xpYi9vcGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL2xpYi9jb2xvdXIuanMiLCAibm9kZV9tb2R1bGVzL3NoYXJwL2xpYi9jaGFubmVsLmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9saWIvb3V0cHV0LmpzIiwgIm5vZGVfbW9kdWxlcy9zaGFycC9saWIvdXRpbGl0eS5qcyIsICJub2RlX21vZHVsZXMvc2hhcnAvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktdGFibGUzL3NyYy9kZWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktdGFibGUzL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvc3JjL3V0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvc3R5bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvc3lzdGVtL2hhcy1mbGFnLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvc3lzdGVtL3N1cHBvcnRzLWNvbG9ycy5qcyIsICJub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL2N1c3RvbS90cmFwLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvY3VzdG9tL3phbGdvLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvbWFwcy9hbWVyaWNhLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvbWFwcy96ZWJyYS5qcyIsICJub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL21hcHMvcmFpbmJvdy5qcyIsICJub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL21hcHMvcmFuZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvY29sb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9zYWZlLmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktdGFibGUzL3NyYy9jZWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktdGFibGUzL3NyYy9sYXlvdXQtbWFuYWdlci5qcyIsICJub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9zcmMvdGFibGUuanMiLCAibm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICJub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAibm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAibm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICJub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AY29tbWFuZGVyLWpzL2V4dHJhLXR5cGluZ3MvaW5kZXguanMiLCAic3JjL3NlcnZpY2VzL3NlbnRyeS50cyIsICJzcmMvdXRpbHMvY29uZmlnLnRzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1dlYWtNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNyZWF0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcHBseS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5QXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9TdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlFYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyQXJnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUNyZWF0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoQ2xlYXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaERlbGV0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hIYXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaFNldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19IYXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVEZWxldGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTGlzdENhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUNsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXBEYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcENhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWVtb2l6ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tZW1vaXplQ2FwcGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0cmluZ1RvUGF0aC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nhc3RQYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvS2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzRmxhdHRlbmFibGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZsYXR0ZW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mbGF0dGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZsYXRSZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0NsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N0YWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ24uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnbkluLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lQnVmZmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5RmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weVN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9sc0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlTeW1ib2xzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRBbGxLZXlzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fUHJvbWlzZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2luaXRDbG9uZUFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1VpbnQ4QXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jbG9uZURhdGFWaWV3LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lUmVnRXhwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lVHlwZWRBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pbml0Q2xvbmVCeVRhZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pbml0Q2xvbmVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNsb25lLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY2xvbmVEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldENhY2hlQWRkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldENhY2hlSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1NldENhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5U29tZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jYWNoZUhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEFycmF5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBUb0FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbE9iamVjdHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc01hdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXRjaERhdGEuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhc0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc1BhdGguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXNJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUl0ZXJhdGVlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUJhc2VGb3IuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRm9yT3duLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2VPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sYXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VWYWx1ZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0VxdWFsLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWFwVmFsdWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2tCeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3BpY2tCeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUGljay5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3BpY2suanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJhbmRvbS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNhbXBsZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2FtcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc2FtcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdW56aXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy96aXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVppcE9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3ppcE9iamVjdC5qcyIsICJzcmMvdXRpbHMvZXhlY0ZpbGVOb1Rocm93LnRzIiwgInNyYy91dGlscy9zdGF0ZS50cyIsICJzcmMvdXRpbHMvUGVyc2lzdGVudFNoZWxsLnRzIiwgInNyYy91dGlscy9sb2cudHMiLCAibm9kZV9tb2R1bGVzL2Vudi1wYXRocy9pbmRleC5qcyIsICJzcmMvc2VydmljZXMvc3RhdHNpZy50cyIsICJub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWxpdGllcy5qcyIsICJub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL2luZGV4LmpzIiwgInNyYy9zZXJ2aWNlcy9icm93c2VyTW9ja3MudHMiLCAic3JjL3NlcnZpY2VzL3N0YXRzaWdTdG9yYWdlLnRzIiwgInNyYy9jb25zdGFudHMva2V5cy50cyIsICJzcmMvY29uc3RhbnRzL2JldGFzLnRzIiwgInNyYy91dGlscy9iZXRhcy50cyIsICJzcmMvdXRpbHMvZ2l0LnRzIiwgInNyYy91dGlscy9tb2RlbC50cyIsICJzcmMvdXRpbHMvZW52LnRzIiwgInNyYy91dGlscy9qc29uLnRzIiwgInNyYy91dGlscy9lcnJvcnMudHMiLCAic3JjL3V0aWxzL3VzZXIudHMiLCAic3JjL2NvbnN0YW50cy9wcm9kdWN0LnRzIiwgInZlbmRvci9zZGsvX3NoaW1zL3JlZ2lzdHJ5Lm1qcyIsICJ2ZW5kb3Ivc2RrL19zaGltcy9ub2RlLXJ1bnRpbWUubWpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vRm9ybURhdGEuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm1kYXRhLW5vZGUvbGliL2VzbS9pc0Jsb2IuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm1kYXRhLW5vZGUvbGliL2VzbS9kZXByZWNhdGVDb25zdHJ1Y3RvckVudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vdXRpbC9jcmVhdGVCb3VuZGFyeS5qcyIsICJub2RlX21vZHVsZXMvZm9ybS1kYXRhLWVuY29kZXIvbGliL2VzbS91dGlsL2lzUGxhaW5PYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vdXRpbC9ub3JtYWxpemVWYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvZm9ybS1kYXRhLWVuY29kZXIvbGliL2VzbS91dGlsL2VzY2FwZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vdXRpbC9pc0Z1bmN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtLWRhdGEtZW5jb2Rlci9saWIvZXNtL3V0aWwvaXNGaWxlTGlrZS5qcyIsICJub2RlX21vZHVsZXMvZm9ybS1kYXRhLWVuY29kZXIvbGliL2VzbS91dGlsL2lzRm9ybURhdGEuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vRm9ybURhdGFFbmNvZGVyLmpzIiwgInZlbmRvci9zZGsvX3NoaW1zL011bHRpcGFydEJvZHkubWpzIiwgInZlbmRvci9zZGsvc2hpbXMvbm9kZS5tanMiLCAic3JjL2VudHJ5cG9pbnRzL2NsaS50c3giLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9yZW5kZXIuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9pbmsuanMiLCAibm9kZV9tb2R1bGVzL2VzLXRvb2xraXQvZGlzdC9mdW5jdGlvbi9kZWJvdW5jZS5tanMiLCAibm9kZV9tb2R1bGVzL2VzLXRvb2xraXQvZGlzdC9jb21wYXQvZnVuY3Rpb24vZGVib3VuY2UubWpzIiwgIm5vZGVfbW9kdWxlcy9lcy10b29sa2l0L2Rpc3QvY29tcGF0L2Z1bmN0aW9uL3Rocm90dGxlLm1qcyIsICJub2RlX21vZHVsZXMvYW5zaS1lc2NhcGVzL2Jhc2UuanMiLCAibm9kZV9tb2R1bGVzL2Vudmlyb25tZW50L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9pcy1pbi1jaS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvYXV0by1iaW5kL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9wYXRjaC1jb25zb2xlL2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9yZWNvbmNpbGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdC1yZWNvbmNpbGVyL2Nqcy9yZWFjdC1yZWNvbmNpbGVyLWNvbnN0YW50cy5wcm9kdWN0aW9uLm1pbi5qcyIsICJub2RlX21vZHVsZXMveW9nYS13YXNtLXdlYi9kaXN0L3dyYXBBc20tZjc2NmY5N2YuanMiLCAibm9kZV9tb2R1bGVzL3lvZ2Etd2FzbS13ZWIvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMveW9nYS13YXNtLXdlYi9kaXN0L25vZGUuanMiLCAibm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2dldC1lYXN0LWFzaWFuLXdpZHRoL2xvb2t1cC5qcyIsICJub2RlX21vZHVsZXMvZ2V0LWVhc3QtYXNpYW4td2lkdGgvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL3dpZGVzdC1saW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvbWVhc3VyZS10ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd3JhcC1hbnNpL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2xpLXRydW5jYXRlL25vZGVfbW9kdWxlcy9zbGljZS1hbnNpL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jbGktdHJ1bmNhdGUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC93cmFwLXRleHQuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9zcXVhc2gtdGV4dC1ub2Rlcy5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2RvbS5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvaW5kZW50LXN0cmluZy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2dldC1tYXgtd2lkdGguanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9yZW5kZXItYm9yZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvY29sb3JpemUuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9yZW5kZXItbm9kZS10by1vdXRwdXQuanMiLCAibm9kZV9tb2R1bGVzL3NsaWNlLWFuc2kvbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9zbGljZS1hbnNpL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AYWxjYWx6b25lL2Fuc2ktdG9rZW5pemUvYnVpbGQvYW5zaUNvZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9AYWxjYWx6b25lL2Fuc2ktdG9rZW5pemUvYnVpbGQvcmVkdWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9AYWxjYWx6b25lL2Fuc2ktdG9rZW5pemUvYnVpbGQvdW5kby5qcyIsICJub2RlX21vZHVsZXMvQGFsY2Fsem9uZS9hbnNpLXRva2VuaXplL2J1aWxkL2RpZmYuanMiLCAibm9kZV9tb2R1bGVzL0BhbGNhbHpvbmUvYW5zaS10b2tlbml6ZS9idWlsZC9zdHlsZWRDaGFycy5qcyIsICJub2RlX21vZHVsZXMvQGFsY2Fsem9uZS9hbnNpLXRva2VuaXplL2J1aWxkL3Rva2VuaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvb3V0cHV0LmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvcmVuZGVyZXIuanMiLCAibm9kZV9tb2R1bGVzL2NsaS1jdXJzb3IvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvbG9nLXVwZGF0ZS5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2luc3RhbmNlcy5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2NvbXBvbmVudHMvQXBwLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvY29tcG9uZW50cy9BcHBDb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvY29tcG9uZW50cy9TdGRpbkNvbnRleHQuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9jb21wb25lbnRzL1N0ZG91dENvbnRleHQuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9jb21wb25lbnRzL1N0ZGVyckNvbnRleHQuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9jb21wb25lbnRzL0ZvY3VzQ29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2NvbXBvbmVudHMvRXJyb3JPdmVydmlldy5qcyIsICJub2RlX21vZHVsZXMvY29udmVydC10by1zcGFjZXMvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29kZS1leGNlcnB0L2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9jb21wb25lbnRzL0JveC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2NvbXBvbmVudHMvVGV4dC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2NvbXBvbmVudHMvU3RhdGljLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvY29tcG9uZW50cy9UcmFuc2Zvcm0uanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9jb21wb25lbnRzL05ld2xpbmUuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9jb21wb25lbnRzL1NwYWNlci5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2hvb2tzL3VzZS1pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL3BhcnNlLWtleXByZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvaG9va3MvdXNlLXN0ZGluLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvaG9va3MvdXNlLWFwcC5qcyIsICJub2RlX21vZHVsZXMvaW5rL2J1aWxkL2hvb2tzL3VzZS1zdGRvdXQuanMiLCAibm9kZV9tb2R1bGVzL2luay9idWlsZC9ob29rcy91c2Utc3RkZXJyLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvaG9va3MvdXNlLWZvY3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9pbmsvYnVpbGQvaG9va3MvdXNlLWZvY3VzLW1hbmFnZXIuanMiLCAic3JjL1Byb2plY3RPbmJvYXJkaW5nLnRzeCIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2ZpZ3VyZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL2FsZXJ0L3RoZW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9iYWRnZS90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvY29uZmlybS1pbnB1dC90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvbXVsdGktc2VsZWN0L3RoZW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9vcmRlcmVkLWxpc3QvdGhlbWUuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3Byb2dyZXNzLWJhci90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvc2VsZWN0L3RoZW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9zcGlubmVyL3RoZW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9zdGF0dXMtbWVzc2FnZS90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvdW5vcmRlcmVkLWxpc3QvdGhlbWUuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3RleHQtaW5wdXQvdGhlbWUuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL2VtYWlsLWlucHV0L3RoZW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9wYXNzd29yZC1pbnB1dC90aGVtZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvY29uZmlybS1pbnB1dC9jb25maXJtLWlucHV0LmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy91bm9yZGVyZWQtbGlzdC91bm9yZGVyZWQtbGlzdC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvdW5vcmRlcmVkLWxpc3QvdW5vcmRlcmVkLWxpc3QtaXRlbS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvdW5vcmRlcmVkLWxpc3QvdW5vcmRlcmVkLWxpc3QtaXRlbS1jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy91bm9yZGVyZWQtbGlzdC9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3Vub3JkZXJlZC1saXN0L3Vub3JkZXJlZC1saXN0LWNvbnRleHQuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3Qtb3B0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9tdWx0aS1zZWxlY3QvdXNlLW11bHRpLXNlbGVjdC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2xpYi9vcHRpb24tbWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LW9wdGlvbi5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvc2VsZWN0L3VzZS1zZWxlY3Qtc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3NlbGVjdC91c2Utc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9zcGlubmVyL3NwaW5uZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3NwaW5uZXIvdXNlLXNwaW5uZXIuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvdGV4dC1pbnB1dC91c2UtdGV4dC1pbnB1dC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvdGV4dC1pbnB1dC91c2UtdGV4dC1pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvb3JkZXJlZC1saXN0L29yZGVyZWQtbGlzdC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvb3JkZXJlZC1saXN0L29yZGVyZWQtbGlzdC1pdGVtLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9vcmRlcmVkLWxpc3Qvb3JkZXJlZC1saXN0LWl0ZW0tY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvb3JkZXJlZC1saXN0L29yZGVyZWQtbGlzdC1jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvcGFzc3dvcmQtaW5wdXQvdXNlLXBhc3N3b3JkLWlucHV0LXN0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9wYXNzd29yZC1pbnB1dC91c2UtcGFzc3dvcmQtaW5wdXQuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL3N0YXR1cy1tZXNzYWdlL3N0YXR1cy1tZXNzYWdlLmpzIiwgIm5vZGVfbW9kdWxlcy9AaW5ranMvdWkvYnVpbGQvY29tcG9uZW50cy9hbGVydC9hbGVydC5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvZW1haWwtaW5wdXQvZW1haWwtaW5wdXQuanMiLCAibm9kZV9tb2R1bGVzL0Bpbmtqcy91aS9idWlsZC9jb21wb25lbnRzL2VtYWlsLWlucHV0L3VzZS1lbWFpbC1pbnB1dC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvQGlua2pzL3VpL2J1aWxkL2NvbXBvbmVudHMvZW1haWwtaW5wdXQvdXNlLWVtYWlsLWlucHV0LmpzIiwgInNyYy9jb21tYW5kcy90ZXJtaW5hbFNldHVwLnRzIiwgInNyYy91dGlscy90aGVtZS50cyIsICJzcmMvY29uc3RhbnRzL3JlbGVhc2VOb3Rlcy50cyIsICJzcmMvdXRpbHMvZmlsZS50cyIsICJub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvZXNtL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vYXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMiLCAibm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9icmFjZS1leHByZXNzaW9ucy5qcyIsICJub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvZXNtL3VuZXNjYXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vYXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vZXNjYXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2dsb2IuanMiLCAibm9kZV9tb2R1bGVzL2xydS1jYWNoZS9kaXN0L2VzbS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvcGF0aC1zY3VycnkvZGlzdC9lc20vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvZXNtL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL3BhdHRlcm4uanMiLCAibm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9lc20vaWdub3JlLmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL3Byb2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS93YWxrZXIuanMiLCAibm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9lc20vaGFzLW1hZ2ljLmpzIiwgIm5vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2luZGV4LmpzIiwgInNyYy91dGlscy9yaXBncmVwLnRzIiwgInNyYy9jb21wb25lbnRzL0Nvc3RUaHJlc2hvbGREaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL0N1c3RvbVNlbGVjdC9zZWxlY3QudHN4IiwgInNyYy9jb21wb25lbnRzL0N1c3RvbVNlbGVjdC9zZWxlY3Qtb3B0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9DdXN0b21TZWxlY3QvdXNlLXNlbGVjdC1zdGF0ZS50cyIsICJzcmMvY29tcG9uZW50cy9DdXN0b21TZWxlY3Qvb3B0aW9uLW1hcC50cyIsICJzcmMvY29tcG9uZW50cy9DdXN0b21TZWxlY3QvdXNlLXNlbGVjdC50cyIsICJub2RlX21vZHVsZXMvaW5rLWxpbmsvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdGVybWluYWwtbGluay9ub2RlX21vZHVsZXMvYW5zaS1lc2NhcGVzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy90ZXJtaW5hbC1saW5rL2luZGV4LmpzIiwgInNyYy9jb21wb25lbnRzL0xpbmsudHN4IiwgInNyYy9zY3JlZW5zL1JFUEwudHN4IiwgInNyYy9jb21wb25lbnRzL0xvZ28udHN4IiwgInNyYy9jb21wb25lbnRzL01lc3NhZ2UudHN4IiwgInNyYy9jb21wb25lbnRzL21lc3NhZ2VzL1VzZXJUb29sUmVzdWx0TWVzc2FnZS9Vc2VyVG9vbFJlc3VsdE1lc3NhZ2UudHN4IiwgInNyYy91dGlscy9tZXNzYWdlcy50c3giLCAic3JjL2NvbXBvbmVudHMvQnVnLnRzeCIsICJzcmMvbWVzc2FnZXMudHMiLCAic3JjL2NvbXBvbmVudHMvVGV4dElucHV0LnRzeCIsICJzcmMvaG9va3MvdXNlVGV4dElucHV0LnRzIiwgInNyYy9ob29rcy91c2VEb3VibGVQcmVzcy50cyIsICJzcmMvdXRpbHMvQ3Vyc29yLnRzIiwgInNyYy91dGlscy9pbWFnZVBhc3RlLnRzIiwgInNyYy9ob29rcy91c2VUZXJtaW5hbFNpemUudHMiLCAic3JjL3V0aWxzL2h0dHAudHMiLCAidmVuZG9yL3Nkay92ZXJzaW9uLm1qcyIsICJ2ZW5kb3Ivc2RrL19zaGltcy9pbmRleC5tanMiLCAidmVuZG9yL3Nkay9lcnJvci5tanMiLCAidmVuZG9yL3Nkay9pbnRlcm5hbC9kZWNvZGVycy9saW5lLm1qcyIsICJ2ZW5kb3Ivc2RrL2ludGVybmFsL3N0cmVhbS11dGlscy5tanMiLCAidmVuZG9yL3Nkay9zdHJlYW1pbmcubWpzIiwgInZlbmRvci9zZGsvdXBsb2Fkcy5tanMiLCAidmVuZG9yL3Nkay9jb3JlLm1qcyIsICJ2ZW5kb3Ivc2RrL3BhZ2luYXRpb24ubWpzIiwgInZlbmRvci9zZGsvcmVzb3VyY2UubWpzIiwgInZlbmRvci9zZGsvcmVzb3VyY2VzL2JldGEvbW9kZWxzLm1qcyIsICJ2ZW5kb3Ivc2RrL2ludGVybmFsL2RlY29kZXJzL2pzb25sLm1qcyIsICJ2ZW5kb3Ivc2RrL3Jlc291cmNlcy9iZXRhL21lc3NhZ2VzL2JhdGNoZXMubWpzIiwgInZlbmRvci9zZGsvX3ZlbmRvci9wYXJ0aWFsLWpzb24tcGFyc2VyL3BhcnNlci5tanMiLCAidmVuZG9yL3Nkay9saWIvQmV0YU1lc3NhZ2VTdHJlYW0ubWpzIiwgInZlbmRvci9zZGsvcmVzb3VyY2VzL2JldGEvbWVzc2FnZXMvbWVzc2FnZXMubWpzIiwgInZlbmRvci9zZGsvcmVzb3VyY2VzL2JldGEvYmV0YS5tanMiLCAidmVuZG9yL3Nkay9yZXNvdXJjZXMvY29tcGxldGlvbnMubWpzIiwgInZlbmRvci9zZGsvcmVzb3VyY2VzL21lc3NhZ2VzL2JhdGNoZXMubWpzIiwgInZlbmRvci9zZGsvbGliL01lc3NhZ2VTdHJlYW0ubWpzIiwgInZlbmRvci9zZGsvcmVzb3VyY2VzL21lc3NhZ2VzL21lc3NhZ2VzLm1qcyIsICJ2ZW5kb3Ivc2RrL3Jlc291cmNlcy9tb2RlbHMubWpzIiwgInZlbmRvci9zZGsvaW5kZXgubWpzIiwgIm5vZGVfbW9kdWxlcy9AYW50aHJvcGljLWFpL2JlZHJvY2stc2RrL2F1dGgubWpzIiwgIm5vZGVfbW9kdWxlcy9AYW50aHJvcGljLWFpL2JlZHJvY2stc2RrL3N0cmVhbWluZy5tanMiLCAibm9kZV9tb2R1bGVzL0BhbnRocm9waWMtYWkvYmVkcm9jay1zZGsvQVdTX3Jlc3RKc29uMS5tanMiLCAibm9kZV9tb2R1bGVzL0BhbnRocm9waWMtYWkvYmVkcm9jay1zZGsvY2xpZW50Lm1qcyIsICJub2RlX21vZHVsZXMvQGFudGhyb3BpYy1haS92ZXJ0ZXgtc2RrL2NsaWVudC5tanMiLCAic3JjL3NlcnZpY2VzL2NsYXVkZS50cyIsICJzcmMvY29zdC10cmFja2VyLnRzIiwgInNyYy91dGlscy9mb3JtYXQudHN4IiwgInNyYy91dGlscy90b2tlbnMudHMiLCAic3JjL3NlcnZpY2VzL3Zjci50cyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL09wdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9SZWZzLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vZXJyb3JNZXNzYWdlcy5qcyIsICJub2RlX21vZHVsZXMvem9kL2xpYi9pbmRleC5tanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2FueS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2JpZ2ludC5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvYm9vbGVhbi5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvYnJhbmRlZC5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvY2F0Y2guanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2RhdGUuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2RlZmF1bHQuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2VmZmVjdHMuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2VudW0uanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL2ludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvbGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy9yZWNvcmQuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL21hcC5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvbmF0aXZlRW51bS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvbmV2ZXIuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL251bGwuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL3VuaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy9udWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvbnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL3pvZC10by1qc29uLXNjaGVtYS9kaXN0L2VzbS9wYXJzZXJzL29wdGlvbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy9waXBlbGluZS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvcHJvbWlzZS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy90dXBsZS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlcnMvdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy91bmtub3duLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vcGFyc2Vycy9yZWFkb25seS5qcyIsICJub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hL2Rpc3QvZXNtL3BhcnNlRGVmLmpzIiwgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEvZGlzdC9lc20vem9kVG9Kc29uU2NoZW1hLmpzIiwgInNyYy90b29scy9CYXNoVG9vbC9CYXNoVG9vbC50c3giLCAic3JjL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLnRzeCIsICJzcmMvdXRpbHMvY29tbWFuZHMudHMiLCAic3JjL3Rvb2xzL0Jhc2hUb29sL091dHB1dExpbmUudHN4IiwgInNyYy90b29scy9BZ2VudFRvb2wvY29uc3RhbnRzLnRzIiwgInNyYy90b29scy9GaWxlUmVhZFRvb2wvRmlsZVJlYWRUb29sLnRzeCIsICJzcmMvY29tcG9uZW50cy9IaWdobGlnaHRlZENvZGUudHN4IiwgInNyYy90b29scy9Ob3RlYm9va1JlYWRUb29sL05vdGVib29rUmVhZFRvb2wudHN4IiwgInNyYy90b29scy9CYXNoVG9vbC91dGlscy50cyIsICJzcmMvdG9vbHMvTm90ZWJvb2tSZWFkVG9vbC9wcm9tcHQudHMiLCAic3JjL3V0aWxzL3Blcm1pc3Npb25zL2ZpbGVzeXN0ZW0udHMiLCAic3JjL3Rvb2xzL0ZpbGVSZWFkVG9vbC9wcm9tcHQudHMiLCAic3JjL3Rvb2xzL0dsb2JUb29sL3Byb21wdC50cyIsICJzcmMvdG9vbHMvR3JlcFRvb2wvcHJvbXB0LnRzIiwgInNyYy90b29scy9sc1Rvb2wvbHNUb29sLnRzeCIsICJzcmMvdG9vbHMvbHNUb29sL3Byb21wdC50cyIsICJzcmMvdG9vbHMvQmFzaFRvb2wvcHJvbXB0LnRzIiwgInNyYy90b29scy9CYXNoVG9vbC9CYXNoVG9vbFJlc3VsdE1lc3NhZ2UudHN4IiwgInNyYy9jb25zdGFudHMvcHJvbXB0cy50cyIsICJzcmMvdXRpbHMvYnJvd3Nlci50cyIsICJzcmMvaG9va3MvdXNlRXhpdE9uQ3RybENELnRzIiwgInNyYy9jb21tYW5kcy9idWcudHN4IiwgInNyYy91dGlscy9zdHlsZS50cyIsICJzcmMvY29udGV4dC50cyIsICJzcmMvdXRpbHMvZ2VuZXJhdG9ycy50cyIsICJzcmMvdXRpbHMvdGVybWluYWwudHMiLCAic3JjL2NvbW1hbmRzL2NsZWFyLnRzIiwgInNyYy9jb21tYW5kcy9jb21wYWN0LnRzIiwgInNyYy9jb21wb25lbnRzL0NvbmZpZy50c3giLCAic3JjL2NvbW1hbmRzL2NvbmZpZy50c3giLCAic3JjL2NvbW1hbmRzL2Nvc3QudHMiLCAic3JjL2NvbW1hbmRzL2N0eF92aXoudHMiLCAic3JjL2NvbW1hbmRzL2RvY3Rvci50cyIsICJzcmMvc2NyZWVucy9Eb2N0b3IudHN4IiwgInNyYy9zY3JlZW5zL0NvbmZpZ3VyZU5wbVByZWZpeC50c3giLCAic3JjL2NvbXBvbmVudHMvU3Bpbm5lci50c3giLCAic3JjL3V0aWxzL2F1dG9VcGRhdGVyLnRzIiwgInNyYy9jb21wb25lbnRzL1ByZXNzRW50ZXJUb0NvbnRpbnVlLnRzeCIsICJzcmMvY29tcG9uZW50cy9IZWxwLnRzeCIsICJzcmMvY29tbWFuZHMvaGVscC50c3giLCAic3JjL2NvbW1hbmRzL2luaXQudHMiLCAic3JjL2NvbW1hbmRzL2xpc3Rlbi50cyIsICJzcmMvY29tbWFuZHMvbG9naW4udHN4IiwgInNyYy9jb21wb25lbnRzL0NvbnNvbGVPQXV0aEZsb3cudHN4IiwgInNyYy9zZXJ2aWNlcy9vYXV0aC50cyIsICJzcmMvY29uc3RhbnRzL29hdXRoLnRzIiwgInNyYy9jb21wb25lbnRzL0FzY2lpTG9nby50c3giLCAic3JjL2NvbXBvbmVudHMvT25ib2FyZGluZy50c3giLCAic3JjL2NvbXBvbmVudHMvQXBwcm92ZUFwaUtleS50c3giLCAic3JjL2NvbXBvbmVudHMvU3RydWN0dXJlZERpZmYudHN4IiwgInNyYy91dGlscy9hdXRoLnRzIiwgInNyYy9zZXJ2aWNlcy9ub3RpZmllci50cyIsICJzcmMvY29tbWFuZHMvbG9nb3V0LnRzeCIsICJzcmMvY29tbWFuZHMvb25ib2FyZGluZy50c3giLCAic3JjL2NvbW1hbmRzL3ByX2NvbW1lbnRzLnRzIiwgInNyYy9jb21tYW5kcy9yZWxlYXNlLW5vdGVzLnRzIiwgInNyYy9jb21tYW5kcy9yZXZpZXcudHMiLCAic3JjL2NvbW1hbmRzL3Jlc3VtZS50c3giLCAic3JjL3NjcmVlbnMvUmVzdW1lQ29udmVyc2F0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9Mb2dTZWxlY3Rvci50c3giLCAic3JjL3NlcnZpY2VzL21jcENsaWVudC50cyIsICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS90eXBlcy5qcyIsICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9zaGFyZWQvcHJvdG9jb2wuanMiLCAibm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vY2xpZW50L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL2NsaWVudC9zdGRpby5qcyIsICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9zaGFyZWQvc3RkaW8uanMiLCAibm9kZV9tb2R1bGVzL2V2ZW50c291cmNlLXBhcnNlci9kaXN0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9ldmVudHNvdXJjZS9kaXN0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL2NsaWVudC9zc2UuanMiLCAic3JjL3Rvb2xzL01DUFRvb2wvTUNQVG9vbC50c3giLCAic3JjL3Rvb2xzL01DUFRvb2wvcHJvbXB0LnRzIiwgInNyYy9jb21tYW5kcy50cyIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Vc2VyQmFzaElucHV0TWVzc2FnZS50c3giLCAic3JjL2NvbXBvbmVudHMvbWVzc2FnZXMvVXNlclRvb2xSZXN1bHRNZXNzYWdlL1VzZXJUb29sQ2FuY2VsZWRNZXNzYWdlLnRzeCIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Vc2VyVG9vbFJlc3VsdE1lc3NhZ2UvVXNlclRvb2xFcnJvck1lc3NhZ2UudHN4IiwgInNyYy9jb21wb25lbnRzL21lc3NhZ2VzL1VzZXJUb29sUmVzdWx0TWVzc2FnZS9Vc2VyVG9vbFJlamVjdE1lc3NhZ2UudHN4IiwgInNyYy9jb21wb25lbnRzL21lc3NhZ2VzL1VzZXJUb29sUmVzdWx0TWVzc2FnZS91dGlscy50c3giLCAic3JjL3Rvb2xzL0dsb2JUb29sL0dsb2JUb29sLnRzeCIsICJzcmMvY29tcG9uZW50cy9Db3N0LnRzeCIsICJzcmMvdG9vbHMvR3JlcFRvb2wvR3JlcFRvb2wudHN4IiwgInNyYy9jb21wb25lbnRzL21lc3NhZ2VzL1VzZXJUb29sUmVzdWx0TWVzc2FnZS9Vc2VyVG9vbFN1Y2Nlc3NNZXNzYWdlLnRzeCIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Bc3Npc3RhbnRUb29sVXNlTWVzc2FnZS50c3giLCAic3JjL2NvbXBvbmVudHMvVG9vbFVzZUxvYWRlci50c3giLCAic3JjL2hvb2tzL3VzZUludGVydmFsLnRzIiwgInNyYy9jb25zdGFudHMvZmlndXJlcy50cyIsICJzcmMvdG9vbHMvVGhpbmtUb29sL1RoaW5rVG9vbC50c3giLCAic3JjL3Rvb2xzL1RoaW5rVG9vbC9wcm9tcHQudHMiLCAic3JjL2NvbXBvbmVudHMvTWVzc2FnZVJlc3BvbnNlLnRzeCIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Bc3Npc3RhbnRUaGlua2luZ01lc3NhZ2UudHN4IiwgIm5vZGVfbW9kdWxlcy9tYXJrZWQvbGliL21hcmtlZC5lc20uanMiLCAic3JjL3V0aWxzL21hcmtkb3duLnRzIiwgInNyYy9jb21wb25lbnRzL21lc3NhZ2VzL0Fzc2lzdGFudFRleHRNZXNzYWdlLnRzeCIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Bc3Npc3RhbnRCYXNoT3V0cHV0TWVzc2FnZS50c3giLCAic3JjL2NvbXBvbmVudHMvbWVzc2FnZXMvQXNzaXN0YW50TG9jYWxDb21tYW5kT3V0cHV0TWVzc2FnZS50c3giLCAic3JjL2NvbXBvbmVudHMvbWVzc2FnZXMvVXNlckNvbW1hbmRNZXNzYWdlLnRzeCIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Vc2VyUHJvbXB0TWVzc2FnZS50c3giLCAic3JjL2NvbXBvbmVudHMvbWVzc2FnZXMvVXNlclRleHRNZXNzYWdlLnRzeCIsICJzcmMvY29tcG9uZW50cy9tZXNzYWdlcy9Bc3Npc3RhbnRSZWRhY3RlZFRoaW5raW5nTWVzc2FnZS50c3giLCAic3JjL2NvbXBvbmVudHMvTWVzc2FnZVNlbGVjdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uUmVxdWVzdC50c3giLCAic3JjL3Rvb2xzL0ZpbGVFZGl0VG9vbC9GaWxlRWRpdFRvb2wudHN4IiwgInNyYy9jb21wb25lbnRzL0ZpbGVFZGl0VG9vbFVwZGF0ZWRNZXNzYWdlLnRzeCIsICJzcmMvdXRpbHMvYXJyYXkudHMiLCAic3JjL3Rvb2xzL05vdGVib29rRWRpdFRvb2wvTm90ZWJvb2tFZGl0VG9vbC50c3giLCAic3JjL3Rvb2xzL05vdGVib29rRWRpdFRvb2wvcHJvbXB0LnRzIiwgInNyYy90b29scy9GaWxlRWRpdFRvb2wvcHJvbXB0LnRzIiwgInNyYy90b29scy9GaWxlRWRpdFRvb2wvdXRpbHMudHMiLCAibm9kZV9tb2R1bGVzL2RpZmYvbGliL2luZGV4Lm1qcyIsICJzcmMvdXRpbHMvZGlmZi50cyIsICJzcmMvdG9vbHMvRmlsZVdyaXRlVG9vbC9GaWxlV3JpdGVUb29sLnRzeCIsICJzcmMvdG9vbHMvRmlsZVdyaXRlVG9vbC9wcm9tcHQudHMiLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvRmlsZUVkaXRQZXJtaXNzaW9uUmVxdWVzdC9GaWxlRWRpdFBlcm1pc3Npb25SZXF1ZXN0LnRzeCIsICJzcmMvaG9va3MvdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nLnRzIiwgInNyYy91dGlscy91bmFyeUxvZ2dpbmcudHMiLCAic3JjL3Blcm1pc3Npb25zLnRzIiwgInNyYy9jb21wb25lbnRzL3Blcm1pc3Npb25zL1Blcm1pc3Npb25SZXF1ZXN0VGl0bGUudHN4IiwgInNyYy9jb21wb25lbnRzL3Blcm1pc3Npb25zL0ZpbGVFZGl0UGVybWlzc2lvblJlcXVlc3QvRmlsZUVkaXRUb29sRGlmZi50c3giLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvQmFzaFBlcm1pc3Npb25SZXF1ZXN0L0Jhc2hQZXJtaXNzaW9uUmVxdWVzdC50c3giLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvaG9va3MudHMiLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvdG9vbFVzZU9wdGlvbnMudHMiLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvRmFsbGJhY2tQZXJtaXNzaW9uUmVxdWVzdC50c3giLCAic3JjL2hvb2tzL3VzZU5vdGlmeUFmdGVyVGltZW91dC50cyIsICJzcmMvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9GaWxlV3JpdGVQZXJtaXNzaW9uUmVxdWVzdC9GaWxlV3JpdGVQZXJtaXNzaW9uUmVxdWVzdC50c3giLCAic3JjL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvRmlsZVdyaXRlUGVybWlzc2lvblJlcXVlc3QvRmlsZVdyaXRlVG9vbERpZmYudHN4IiwgInNyYy9jb21wb25lbnRzL3Blcm1pc3Npb25zL0ZpbGVzeXN0ZW1QZXJtaXNzaW9uUmVxdWVzdC9GaWxlc3lzdGVtUGVybWlzc2lvblJlcXVlc3QudHN4IiwgInNyYy91dGlscy9leGFtcGxlQ29tbWFuZHMudHMiLCAic3JjL2NvbXBvbmVudHMvUHJvbXB0SW5wdXQudHN4IiwgInNyYy9ob29rcy91c2VBcnJvd0tleUhpc3RvcnkudHMiLCAic3JjL2hpc3RvcnkudHMiLCAic3JjL2hvb2tzL3VzZVNsYXNoQ29tbWFuZFR5cGVhaGVhZC50cyIsICJzcmMvY29tcG9uZW50cy9TZW50cnlFcnJvckJvdW5kYXJ5LnRzIiwgInNyYy9jb21wb25lbnRzL0F1dG9VcGRhdGVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9Ub2tlbldhcm5pbmcudHN4IiwgInNyYy9ob29rcy91c2VMb2dTdGFydHVwVGltZS50cyIsICJzcmMvaG9va3MvdXNlQXBpS2V5VmVyaWZpY2F0aW9uLnRzIiwgInNyYy9ob29rcy91c2VDYW5jZWxSZXF1ZXN0LnRzIiwgInNyYy9ob29rcy91c2VDYW5Vc2VUb29sLnRzIiwgInNyYy9ob29rcy91c2VMb2dNZXNzYWdlcy50cyIsICJzcmMvY29tcG9uZW50cy9iaW5hcnktZmVlZGJhY2svdXRpbHMudHMiLCAic3JjL3F1ZXJ5LnRzIiwgInNyYy9jb21wb25lbnRzL2JpbmFyeS1mZWVkYmFjay9CaW5hcnlGZWVkYmFjay50c3giLCAic3JjL2NvbXBvbmVudHMvYmluYXJ5LWZlZWRiYWNrL0JpbmFyeUZlZWRiYWNrVmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvYmluYXJ5LWZlZWRiYWNrL0JpbmFyeUZlZWRiYWNrT3B0aW9uLnRzeCIsICJzcmMvdXRpbHMvdGhpbmtpbmcudHMiLCAibm9kZV9tb2R1bGVzL0Bjb21tYW5kZXItanMvZXh0cmEtdHlwaW5ncy9lc20ubWpzIiwgInNyYy91dGlscy9hc2sudHN4IiwgInNyYy90b29scy9BZ2VudFRvb2wvQWdlbnRUb29sLnRzeCIsICJzcmMvdG9vbHMvQWdlbnRUb29sL3Byb21wdC50cyIsICJzcmMvdG9vbHMvQXJjaGl0ZWN0VG9vbC9BcmNoaXRlY3RUb29sLnRzeCIsICJzcmMvdG9vbHMvQXJjaGl0ZWN0VG9vbC9wcm9tcHQudHMiLCAic3JjL3Rvb2xzL01lbW9yeVJlYWRUb29sL01lbW9yeVJlYWRUb29sLnRzeCIsICJzcmMvdG9vbHMvTWVtb3J5V3JpdGVUb29sL01lbW9yeVdyaXRlVG9vbC50c3giLCAic3JjL3Rvb2xzL1N0aWNrZXJSZXF1ZXN0VG9vbC9TdGlja2VyUmVxdWVzdFRvb2wudHN4IiwgInNyYy90b29scy9TdGlja2VyUmVxdWVzdFRvb2wvcHJvbXB0LnRzIiwgInNyYy9jb21wb25lbnRzL1N0aWNrZXJSZXF1ZXN0Rm9ybS50c3giLCAic3JjL3V0aWxzL3ZhbGlkYXRlLnRzIiwgInNyYy9jb21wb25lbnRzL0FuaW1hdGVkQ2xhdWRlQXN0ZXJpc2sudHN4IiwgInNyYy9jb25zdGFudHMvY2xhdWRlLWFzdGVyaXNrLWFzY2lpLWFydC50c3giLCAic3JjL3Rvb2xzLnRzIiwgInNyYy9jb21wb25lbnRzL1RydXN0RGlhbG9nLnRzeCIsICJzcmMvc2NyZWVucy9Mb2dMaXN0LnRzeCIsICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9zZXJ2ZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2VydmVyL3N0ZGlvLmpzIiwgInNyYy9lbnRyeXBvaW50cy9tY3AudHMiLCAic3JjL3V0aWxzL2NsZWFudXAudHMiLCAic3JjL2NvbW1hbmRzL2FwcHJvdmVkVG9vbHMudHMiLCAic3JjL3NlcnZpY2VzL21jcFNlcnZlckFwcHJvdmFsLnRzeCIsICJzcmMvY29tcG9uZW50cy9NQ1BTZXJ2ZXJNdWx0aXNlbGVjdERpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvTUNQU2VydmVyRGlhbG9nQ29weS50c3giLCAic3JjL2NvbXBvbmVudHMvTUNQU2VydmVyQXBwcm92YWxEaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL0ludmFsaWRDb25maWdEaWFsb2cudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbmNvbnN0IG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgb25lIG9mIGEgZmV3IEVycm9yIG9yIEVycm9yLWxpa2VcbiAqIHtAbGluayBpc0Vycm9yfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih3YXQpIHtcbiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHtcbiAgICBjYXNlICdbb2JqZWN0IEVycm9yXSc6XG4gICAgY2FzZSAnW29iamVjdCBFeGNlcHRpb25dJzpcbiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGJ1aWx0LWluIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWRcbiAqIEBwYXJhbSBjbGFzc05hbWVcbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNCdWlsdGluKHdhdCwgY2xhc3NOYW1lKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkgPT09IGBbb2JqZWN0ICR7Y2xhc3NOYW1lfV1gO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBFcnJvckV2ZW50XG4gKiB7QGxpbmsgaXNFcnJvckV2ZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNFcnJvckV2ZW50KHdhdCkge1xuICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ0Vycm9yRXZlbnQnKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgRE9NRXJyb3JcbiAqIHtAbGluayBpc0RPTUVycm9yfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNET01FcnJvcih3YXQpIHtcbiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdET01FcnJvcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBET01FeGNlcHRpb25cbiAqIHtAbGluayBpc0RPTUV4Y2VwdGlvbn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzRE9NRXhjZXB0aW9uKHdhdCkge1xuICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ0RPTUV4Y2VwdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZ1xuICoge0BsaW5rIGlzU3RyaW5nfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7XG4gIHJldHVybiBpc0J1aWx0aW4od2F0LCAnU3RyaW5nJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gc3RyaW5nIGlzIHBhcmFtZXRlcml6ZWRcbiAqIHtAbGluayBpc1BhcmFtZXRlcml6ZWRTdHJpbmd9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBpc1BhcmFtZXRlcml6ZWRTdHJpbmcod2F0KSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdhdCA9PT0gJ29iamVjdCcgJiZcbiAgICB3YXQgIT09IG51bGwgJiZcbiAgICAnX19zZW50cnlfdGVtcGxhdGVfc3RyaW5nX18nIGluIHdhdCAmJlxuICAgICdfX3NlbnRyeV90ZW1wbGF0ZV92YWx1ZXNfXycgaW4gd2F0XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgYSBwcmltaXRpdmUgKHVuZGVmaW5lZCwgbnVsbCwgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIGJpZ2ludCwgc3ltYm9sKVxuICoge0BsaW5rIGlzUHJpbWl0aXZlfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUod2F0KSB7XG4gIHJldHVybiB3YXQgPT09IG51bGwgfHwgaXNQYXJhbWV0ZXJpemVkU3RyaW5nKHdhdCkgfHwgKHR5cGVvZiB3YXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB3YXQgIT09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS5cbiAqIHtAbGluayBpc1BsYWluT2JqZWN0fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHtcbiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdPYmplY3QnKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gRXZlbnQgaW5zdGFuY2VcbiAqIHtAbGluayBpc0V2ZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNFdmVudCh3YXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBFbGVtZW50IGluc3RhbmNlXG4gKiB7QGxpbmsgaXNFbGVtZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNFbGVtZW50KHdhdCkge1xuICByZXR1cm4gdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZih3YXQsIEVsZW1lbnQpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiByZWdleHBcbiAqIHtAbGluayBpc1JlZ0V4cH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzUmVnRXhwKHdhdCkge1xuICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ1JlZ0V4cCcpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICByZXR1cm4gQm9vbGVhbih3YXQgJiYgd2F0LnRoZW4gJiYgdHlwZW9mIHdhdC50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudFxuICoge0BsaW5rIGlzU3ludGhldGljRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh3YXQpICYmICduYXRpdmVFdmVudCcgaW4gd2F0ICYmICdwcmV2ZW50RGVmYXVsdCcgaW4gd2F0ICYmICdzdG9wUHJvcGFnYXRpb24nIGluIHdhdDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBOYU5cbiAqIHtAbGluayBpc05hTn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHdhdCkge1xuICByZXR1cm4gdHlwZW9mIHdhdCA9PT0gJ251bWJlcicgJiYgd2F0ICE9PSB3YXQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIGluc3RhbmNlIG9mIHByb3ZpZGVkIGNvbnN0cnVjdG9yLlxuICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkge1xuICB0cnkge1xuICAgIHJldHVybiB3YXQgaW5zdGFuY2VvZiBiYXNlO1xuICB9IGNhdGNoIChfZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzVnVlVmlld01vZGVsKHdhdCkge1xuICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuXG4gIHJldHVybiAhISh0eXBlb2Ygd2F0ID09PSAnb2JqZWN0JyAmJiB3YXQgIT09IG51bGwgJiYgKCh3YXQgKS5fX2lzVnVlIHx8ICh3YXQgKS5faXNWdWUpKTtcbn1cblxuZXhwb3J0cy5pc0RPTUVycm9yID0gaXNET01FcnJvcjtcbmV4cG9ydHMuaXNET01FeGNlcHRpb24gPSBpc0RPTUV4Y2VwdGlvbjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcbmV4cG9ydHMuaXNFcnJvckV2ZW50ID0gaXNFcnJvckV2ZW50O1xuZXhwb3J0cy5pc0V2ZW50ID0gaXNFdmVudDtcbmV4cG9ydHMuaXNJbnN0YW5jZU9mID0gaXNJbnN0YW5jZU9mO1xuZXhwb3J0cy5pc05hTiA9IGlzTmFOO1xuZXhwb3J0cy5pc1BhcmFtZXRlcml6ZWRTdHJpbmcgPSBpc1BhcmFtZXRlcml6ZWRTdHJpbmc7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc1N5bnRoZXRpY0V2ZW50ID0gaXNTeW50aGV0aWNFdmVudDtcbmV4cG9ydHMuaXNUaGVuYWJsZSA9IGlzVGhlbmFibGU7XG5leHBvcnRzLmlzVnVlVmlld01vZGVsID0gaXNWdWVWaWV3TW9kZWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzLmpzJyk7XG5cbi8qKlxuICogVHJ1bmNhdGVzIGdpdmVuIHN0cmluZyB0byB0aGUgbWF4aW11bSBjaGFyYWN0ZXJzIGNvdW50XG4gKlxuICogQHBhcmFtIHN0ciBBbiBvYmplY3QgdGhhdCBjb250YWlucyBzZXJpYWxpemFibGUgdmFsdWVzXG4gKiBAcGFyYW0gbWF4IE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdHJ1bmNhdGVkIHN0cmluZyAoMCA9IHVubGltaXRlZClcbiAqIEByZXR1cm5zIHN0cmluZyBFbmNvZGVkXG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlKHN0ciwgbWF4ID0gMCkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgfHwgbWF4ID09PSAwKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gc3RyLmxlbmd0aCA8PSBtYXggPyBzdHIgOiBgJHtzdHIuc2xpY2UoMCwgbWF4KX0uLi5gO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgYHRyaW1fbGluZWAgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnkvYmxvYi9tYXN0ZXIvc3JjL3NlbnRyeS9sYW5nL2phdmFzY3JpcHQvcHJvY2Vzc29yLnB5I0w2N1xuICpcbiAqIEBwYXJhbSBzdHIgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VyaWFsaXphYmxlIHZhbHVlc1xuICogQHBhcmFtIG1heCBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRydW5jYXRlZCBzdHJpbmdcbiAqIEByZXR1cm5zIHN0cmluZyBFbmNvZGVkXG4gKi9cbmZ1bmN0aW9uIHNuaXBMaW5lKGxpbmUsIGNvbG5vKSB7XG4gIGxldCBuZXdMaW5lID0gbGluZTtcbiAgY29uc3QgbGluZUxlbmd0aCA9IG5ld0xpbmUubGVuZ3RoO1xuICBpZiAobGluZUxlbmd0aCA8PSAxNTApIHtcbiAgICByZXR1cm4gbmV3TGluZTtcbiAgfVxuICBpZiAoY29sbm8gPiBsaW5lTGVuZ3RoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgY29sbm8gPSBsaW5lTGVuZ3RoO1xuICB9XG5cbiAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoY29sbm8gLSA2MCwgMCk7XG4gIGlmIChzdGFydCA8IDUpIHtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBsZXQgZW5kID0gTWF0aC5taW4oc3RhcnQgKyAxNDAsIGxpbmVMZW5ndGgpO1xuICBpZiAoZW5kID4gbGluZUxlbmd0aCAtIDUpIHtcbiAgICBlbmQgPSBsaW5lTGVuZ3RoO1xuICB9XG4gIGlmIChlbmQgPT09IGxpbmVMZW5ndGgpIHtcbiAgICBzdGFydCA9IE1hdGgubWF4KGVuZCAtIDE0MCwgMCk7XG4gIH1cblxuICBuZXdMaW5lID0gbmV3TGluZS5zbGljZShzdGFydCwgZW5kKTtcbiAgaWYgKHN0YXJ0ID4gMCkge1xuICAgIG5ld0xpbmUgPSBgJ3tzbmlwfSAke25ld0xpbmV9YDtcbiAgfVxuICBpZiAoZW5kIDwgbGluZUxlbmd0aCkge1xuICAgIG5ld0xpbmUgKz0gJyB7c25pcH0nO1xuICB9XG5cbiAgcmV0dXJuIG5ld0xpbmU7XG59XG5cbi8qKlxuICogSm9pbiB2YWx1ZXMgaW4gYXJyYXlcbiAqIEBwYXJhbSBpbnB1dCBhcnJheSBvZiB2YWx1ZXMgdG8gYmUgam9pbmVkIHRvZ2V0aGVyXG4gKiBAcGFyYW0gZGVsaW1pdGVyIHN0cmluZyB0byBiZSBwbGFjZWQgaW4tYmV0d2VlbiB2YWx1ZXNcbiAqIEByZXR1cm5zIEpvaW5lZCB2YWx1ZXNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNhZmVKb2luKGlucHV0LCBkZWxpbWl0ZXIpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXRbaV07XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIGZpeCBhIFZ1ZTMtc3BlY2lmaWMgYnVnIHRoYXQgY2F1c2VzIGFuIGluZmluaXRlIGxvb3Agb2ZcbiAgICAgIC8vIGNvbnNvbGUgd2FybmluZ3MuIFRoaXMgaGFwcGVucyB3aGVuIGEgVnVlIHRlbXBsYXRlIGlzIHJlbmRlcmVkIHdpdGhcbiAgICAgIC8vIGFuIHVuZGVjbGFyZWQgdmFyaWFibGUsIHdoaWNoIHdlIHRyeSB0byBzdHJpbmdpZnksIHVsdGltYXRlbHkgY2F1c2luZ1xuICAgICAgLy8gVnVlIHRvIGlzc3VlIGFub3RoZXIgd2FybmluZyB3aGljaCByZXBlYXRzIGluZGVmaW5pdGVseS5cbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg5ODFcbiAgICAgIGlmIChpcy5pc1Z1ZVZpZXdNb2RlbCh2YWx1ZSkpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goJ1tWdWVWaWV3TW9kZWxdJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChTdHJpbmcodmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvdXRwdXQucHVzaCgnW3ZhbHVlIGNhbm5vdCBiZSBzZXJpYWxpemVkXScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbihkZWxpbWl0ZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgbWF0Y2hlcyBhIHJlZ2V4IG9yIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHRlc3RcbiAqIEBwYXJhbSBwYXR0ZXJuIEVpdGhlciBhIHJlZ2V4IG9yIGEgc3RyaW5nIGFnYWluc3Qgd2hpY2ggYHZhbHVlYCB3aWxsIGJlIG1hdGNoZWRcbiAqIEBwYXJhbSByZXF1aXJlRXhhY3RTdHJpbmdNYXRjaCBJZiB0cnVlLCBgdmFsdWVgIG11c3QgbWF0Y2ggYHBhdHRlcm5gIGV4YWN0bHkuIElmIGZhbHNlLCBgdmFsdWVgIHdpbGwgbWF0Y2hcbiAqIGBwYXR0ZXJuYCBpZiBpdCBjb250YWlucyBgcGF0dGVybmAuIE9ubHkgYXBwbGllcyB0byBzdHJpbmctdHlwZSBwYXR0ZXJucy5cbiAqL1xuZnVuY3Rpb24gaXNNYXRjaGluZ1BhdHRlcm4oXG4gIHZhbHVlLFxuICBwYXR0ZXJuLFxuICByZXF1aXJlRXhhY3RTdHJpbmdNYXRjaCA9IGZhbHNlLFxuKSB7XG4gIGlmICghaXMuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzLmlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzLmlzU3RyaW5nKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVFeGFjdFN0cmluZ01hdGNoID8gdmFsdWUgPT09IHBhdHRlcm4gOiB2YWx1ZS5pbmNsdWRlcyhwYXR0ZXJuKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUZXN0IHRoZSBnaXZlbiBzdHJpbmcgYWdhaW5zdCBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCByZWdleGVzLiBCeSBkZWZhdWx0LCBzdHJpbmcgbWF0Y2hpbmcgaXMgZG9uZSBvbiBhXG4gKiBzdWJzdHJpbmctaW5jbHVzaW9uIGJhc2lzIHJhdGhlciB0aGFuIGEgc3RyaWN0IGVxdWFsaXR5IGJhc2lzXG4gKlxuICogQHBhcmFtIHRlc3RTdHJpbmcgVGhlIHN0cmluZyB0byB0ZXN0XG4gKiBAcGFyYW0gcGF0dGVybnMgVGhlIHBhdHRlcm5zIGFnYWluc3Qgd2hpY2ggdG8gdGVzdCB0aGUgc3RyaW5nXG4gKiBAcGFyYW0gcmVxdWlyZUV4YWN0U3RyaW5nTWF0Y2ggSWYgdHJ1ZSwgYHRlc3RTdHJpbmdgIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBnaXZlbiBzdHJpbmcgcGF0dGVybnMgZXhhY3RseSBpbiBvcmRlciB0b1xuICogY291bnQuIElmIGZhbHNlLCBgdGVzdFN0cmluZ2Agd2lsbCBtYXRjaCBhIHN0cmluZyBwYXR0ZXJuIGlmIGl0IGNvbnRhaW5zIHRoYXQgcGF0dGVybi5cbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ01hdGNoZXNTb21lUGF0dGVybihcbiAgdGVzdFN0cmluZyxcbiAgcGF0dGVybnMgPSBbXSxcbiAgcmVxdWlyZUV4YWN0U3RyaW5nTWF0Y2ggPSBmYWxzZSxcbikge1xuICByZXR1cm4gcGF0dGVybnMuc29tZShwYXR0ZXJuID0+IGlzTWF0Y2hpbmdQYXR0ZXJuKHRlc3RTdHJpbmcsIHBhdHRlcm4sIHJlcXVpcmVFeGFjdFN0cmluZ01hdGNoKSk7XG59XG5cbmV4cG9ydHMuaXNNYXRjaGluZ1BhdHRlcm4gPSBpc01hdGNoaW5nUGF0dGVybjtcbmV4cG9ydHMuc2FmZUpvaW4gPSBzYWZlSm9pbjtcbmV4cG9ydHMuc25pcExpbmUgPSBzbmlwTGluZTtcbmV4cG9ydHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuID0gc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuO1xuZXhwb3J0cy50cnVuY2F0ZSA9IHRydW5jYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBpcyA9IHJlcXVpcmUoJy4vaXMuanMnKTtcbmNvbnN0IHN0cmluZyA9IHJlcXVpcmUoJy4vc3RyaW5nLmpzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBleGNlcHRpb25zIGluc2lkZSBgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc2AgZm9yIGVycm9ycyB0aGF0IGFyZSBuZXN0ZWQgb24gcHJvcGVydGllcyBiYXNlZCBvbiB0aGUgYGtleWAgcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBhcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQoXG4gIGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uLFxuICBwYXJzZXIsXG4gIG1heFZhbHVlTGltaXQgPSAyNTAsXG4gIGtleSxcbiAgbGltaXQsXG4gIGV2ZW50LFxuICBoaW50LFxuKSB7XG4gIGlmICghZXZlbnQuZXhjZXB0aW9uIHx8ICFldmVudC5leGNlcHRpb24udmFsdWVzIHx8ICFoaW50IHx8ICFpcy5pc0luc3RhbmNlT2YoaGludC5vcmlnaW5hbEV4Y2VwdGlvbiwgRXJyb3IpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gR2VuZXJhbGx5IHNwZWFraW5nIHRoZSBsYXN0IGl0ZW0gaW4gYGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNgIGlzIHRoZSBleGNlcHRpb24gb3JpZ2luYXRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgRXJyb3JcbiAgY29uc3Qgb3JpZ2luYWxFeGNlcHRpb24gPVxuICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMubGVuZ3RoID4gMCA/IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAvLyBXZSBvbmx5IGNyZWF0ZSBleGNlcHRpb24gZ3JvdXBpbmcgaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIGluIHRoZSBldmVudC5cbiAgaWYgKG9yaWdpbmFsRXhjZXB0aW9uKSB7XG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyA9IHRydW5jYXRlQWdncmVnYXRlRXhjZXB0aW9ucyhcbiAgICAgIGFnZ3JlZ2F0ZUV4Y2VwdGlvbnNGcm9tRXJyb3IoXG4gICAgICAgIGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uLFxuICAgICAgICBwYXJzZXIsXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uICxcbiAgICAgICAga2V5LFxuICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzLFxuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbixcbiAgICAgICAgMCxcbiAgICAgICksXG4gICAgICBtYXhWYWx1ZUxpbWl0LFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWdncmVnYXRlRXhjZXB0aW9uc0Zyb21FcnJvcihcbiAgZXhjZXB0aW9uRnJvbUVycm9ySW1wbGVtZW50YXRpb24sXG4gIHBhcnNlcixcbiAgbGltaXQsXG4gIGVycm9yLFxuICBrZXksXG4gIHByZXZFeGNlcHRpb25zLFxuICBleGNlcHRpb24sXG4gIGV4Y2VwdGlvbklkLFxuKSB7XG4gIGlmIChwcmV2RXhjZXB0aW9ucy5sZW5ndGggPj0gbGltaXQgKyAxKSB7XG4gICAgcmV0dXJuIHByZXZFeGNlcHRpb25zO1xuICB9XG5cbiAgbGV0IG5ld0V4Y2VwdGlvbnMgPSBbLi4ucHJldkV4Y2VwdGlvbnNdO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBvcmRlciB0byB3YWxrIGRvd24gYSBjaGFpbiBvZiBlcnJvcnNcbiAgaWYgKGlzLmlzSW5zdGFuY2VPZihlcnJvcltrZXldLCBFcnJvcikpIHtcbiAgICBhcHBseUV4Y2VwdGlvbkdyb3VwRmllbGRzRm9yUGFyZW50RXhjZXB0aW9uKGV4Y2VwdGlvbiwgZXhjZXB0aW9uSWQpO1xuICAgIGNvbnN0IG5ld0V4Y2VwdGlvbiA9IGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uKHBhcnNlciwgZXJyb3Jba2V5XSk7XG4gICAgY29uc3QgbmV3RXhjZXB0aW9uSWQgPSBuZXdFeGNlcHRpb25zLmxlbmd0aDtcbiAgICBhcHBseUV4Y2VwdGlvbkdyb3VwRmllbGRzRm9yQ2hpbGRFeGNlcHRpb24obmV3RXhjZXB0aW9uLCBrZXksIG5ld0V4Y2VwdGlvbklkLCBleGNlcHRpb25JZCk7XG4gICAgbmV3RXhjZXB0aW9ucyA9IGFnZ3JlZ2F0ZUV4Y2VwdGlvbnNGcm9tRXJyb3IoXG4gICAgICBleGNlcHRpb25Gcm9tRXJyb3JJbXBsZW1lbnRhdGlvbixcbiAgICAgIHBhcnNlcixcbiAgICAgIGxpbWl0LFxuICAgICAgZXJyb3Jba2V5XSxcbiAgICAgIGtleSxcbiAgICAgIFtuZXdFeGNlcHRpb24sIC4uLm5ld0V4Y2VwdGlvbnNdLFxuICAgICAgbmV3RXhjZXB0aW9uLFxuICAgICAgbmV3RXhjZXB0aW9uSWQsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoaXMgd2lsbCBjcmVhdGUgZXhjZXB0aW9uIGdyb3VwaW5nIGZvciBBZ2dyZWdhdGVFcnJvcnNcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQWdncmVnYXRlRXJyb3JcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3IuZXJyb3JzKSkge1xuICAgIGVycm9yLmVycm9ycy5mb3JFYWNoKChjaGlsZEVycm9yLCBpKSA9PiB7XG4gICAgICBpZiAoaXMuaXNJbnN0YW5jZU9mKGNoaWxkRXJyb3IsIEVycm9yKSkge1xuICAgICAgICBhcHBseUV4Y2VwdGlvbkdyb3VwRmllbGRzRm9yUGFyZW50RXhjZXB0aW9uKGV4Y2VwdGlvbiwgZXhjZXB0aW9uSWQpO1xuICAgICAgICBjb25zdCBuZXdFeGNlcHRpb24gPSBleGNlcHRpb25Gcm9tRXJyb3JJbXBsZW1lbnRhdGlvbihwYXJzZXIsIGNoaWxkRXJyb3IpO1xuICAgICAgICBjb25zdCBuZXdFeGNlcHRpb25JZCA9IG5ld0V4Y2VwdGlvbnMubGVuZ3RoO1xuICAgICAgICBhcHBseUV4Y2VwdGlvbkdyb3VwRmllbGRzRm9yQ2hpbGRFeGNlcHRpb24obmV3RXhjZXB0aW9uLCBgZXJyb3JzWyR7aX1dYCwgbmV3RXhjZXB0aW9uSWQsIGV4Y2VwdGlvbklkKTtcbiAgICAgICAgbmV3RXhjZXB0aW9ucyA9IGFnZ3JlZ2F0ZUV4Y2VwdGlvbnNGcm9tRXJyb3IoXG4gICAgICAgICAgZXhjZXB0aW9uRnJvbUVycm9ySW1wbGVtZW50YXRpb24sXG4gICAgICAgICAgcGFyc2VyLFxuICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgIGNoaWxkRXJyb3IsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIFtuZXdFeGNlcHRpb24sIC4uLm5ld0V4Y2VwdGlvbnNdLFxuICAgICAgICAgIG5ld0V4Y2VwdGlvbixcbiAgICAgICAgICBuZXdFeGNlcHRpb25JZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdFeGNlcHRpb25zO1xufVxuXG5mdW5jdGlvbiBhcHBseUV4Y2VwdGlvbkdyb3VwRmllbGRzRm9yUGFyZW50RXhjZXB0aW9uKGV4Y2VwdGlvbiwgZXhjZXB0aW9uSWQpIHtcbiAgLy8gRG9uJ3Qga25vdyBpZiB0aGlzIGRlZmF1bHQgbWFrZXMgc2Vuc2UuIFRoZSBwcm90b2NvbCByZXF1aXJlcyB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIHNvIHdlIHBpY2sgKnNvbWUqIGRlZmF1bHQuXG4gIGV4Y2VwdGlvbi5tZWNoYW5pc20gPSBleGNlcHRpb24ubWVjaGFuaXNtIHx8IHsgdHlwZTogJ2dlbmVyaWMnLCBoYW5kbGVkOiB0cnVlIH07XG5cbiAgZXhjZXB0aW9uLm1lY2hhbmlzbSA9IHtcbiAgICAuLi5leGNlcHRpb24ubWVjaGFuaXNtLFxuICAgIC4uLihleGNlcHRpb24udHlwZSA9PT0gJ0FnZ3JlZ2F0ZUVycm9yJyAmJiB7IGlzX2V4Y2VwdGlvbl9ncm91cDogdHJ1ZSB9KSxcbiAgICBleGNlcHRpb25faWQ6IGV4Y2VwdGlvbklkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseUV4Y2VwdGlvbkdyb3VwRmllbGRzRm9yQ2hpbGRFeGNlcHRpb24oXG4gIGV4Y2VwdGlvbixcbiAgc291cmNlLFxuICBleGNlcHRpb25JZCxcbiAgcGFyZW50SWQsXG4pIHtcbiAgLy8gRG9uJ3Qga25vdyBpZiB0aGlzIGRlZmF1bHQgbWFrZXMgc2Vuc2UuIFRoZSBwcm90b2NvbCByZXF1aXJlcyB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIHNvIHdlIHBpY2sgKnNvbWUqIGRlZmF1bHQuXG4gIGV4Y2VwdGlvbi5tZWNoYW5pc20gPSBleGNlcHRpb24ubWVjaGFuaXNtIHx8IHsgdHlwZTogJ2dlbmVyaWMnLCBoYW5kbGVkOiB0cnVlIH07XG5cbiAgZXhjZXB0aW9uLm1lY2hhbmlzbSA9IHtcbiAgICAuLi5leGNlcHRpb24ubWVjaGFuaXNtLFxuICAgIHR5cGU6ICdjaGFpbmVkJyxcbiAgICBzb3VyY2UsXG4gICAgZXhjZXB0aW9uX2lkOiBleGNlcHRpb25JZCxcbiAgICBwYXJlbnRfaWQ6IHBhcmVudElkLFxuICB9O1xufVxuXG4vKipcbiAqIFRydW5jYXRlIHRoZSBtZXNzYWdlIChleGNlcHRpb24udmFsdWUpIG9mIGFsbCBleGNlcHRpb25zIGluIHRoZSBldmVudC5cbiAqIEJlY2F1c2UgdGhpcyBldmVudCBwcm9jZXNzb3IgaXMgcmFuIGFmdGVyIGBhcHBseUNsaWVudE9wdGlvbnNgLFxuICogd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgbWVzc2FnZSBvZiB0aGUgYWRkZWQgZXhjZXB0aW9ucyBoZXJlLlxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZUFnZ3JlZ2F0ZUV4Y2VwdGlvbnMoZXhjZXB0aW9ucywgbWF4VmFsdWVMZW5ndGgpIHtcbiAgcmV0dXJuIGV4Y2VwdGlvbnMubWFwKGV4Y2VwdGlvbiA9PiB7XG4gICAgaWYgKGV4Y2VwdGlvbi52YWx1ZSkge1xuICAgICAgZXhjZXB0aW9uLnZhbHVlID0gc3RyaW5nLnRydW5jYXRlKGV4Y2VwdGlvbi52YWx1ZSwgbWF4VmFsdWVMZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gZXhjZXB0aW9uO1xuICB9KTtcbn1cblxuZXhwb3J0cy5hcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQgPSBhcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZ2dyZWdhdGUtZXJyb3JzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqL1xuXG4vLyBUaGUgY29kZSBiZWxvdyBmb3IgJ2lzR2xvYmFsT2JqJyBhbmQgJ0dMT0JBTF9PQkonIHdhcyBjb3BpZWQgZnJvbSBjb3JlLWpzIGJlZm9yZSBtb2RpZmljYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcbi8vIGNvcmUtanMgaGFzIHRoZSBmb2xsb3dpbmcgbGljZW5jZTpcbi8vXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXZcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi9cbmZ1bmN0aW9uIGlzR2xvYmFsT2JqKG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5NYXRoID09IE1hdGggPyBvYmogOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBHZXQncyB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgSmF2YVNjcmlwdCBydW50aW1lICovXG5jb25zdCBHTE9CQUxfT0JKID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbFRoaXMpKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8XG4gICh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBpc0dsb2JhbE9iaihzZWxmKSkgfHxcbiAgKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsKSkgfHxcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSkoKSB8fFxuICB7fTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjhcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KCkge1xuICByZXR1cm4gR0xPQkFMX09CSiA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGdsb2JhbCBzaW5nbGV0b24gY29udGFpbmVkIGluIHRoZSBnbG9iYWwgYF9fU0VOVFJZX19gIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc2luZ2xldG9uIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiBgX19TRU5UUllfX2AsIGl0IHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gZmFjdG9yeVxuICogZnVuY3Rpb24gYW5kIGFkZGVkIHRvIHRoZSBgX19TRU5UUllfX2Agb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGdsb2JhbCBzaW5nbGV0b24gb24gX19TRU5UUllfX1xuICogQHBhcmFtIGNyZWF0b3IgY3JlYXRvciBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgc2luZ2xldG9uIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiBgX19TRU5UUllfX2BcbiAqIEBwYXJhbSBvYmogKE9wdGlvbmFsKSBUaGUgZ2xvYmFsIG9iamVjdCBvbiB3aGljaCB0byBsb29rIGZvciBgX19TRU5UUllfX2AsIGlmIG5vdCBgR0xPQkFMX09CSmAncyByZXR1cm4gdmFsdWVcbiAqIEByZXR1cm5zIHRoZSBzaW5nbGV0b25cbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsU2luZ2xldG9uKG5hbWUsIGNyZWF0b3IsIG9iaikge1xuICBjb25zdCBnYmwgPSAob2JqIHx8IEdMT0JBTF9PQkopIDtcbiAgY29uc3QgX19TRU5UUllfXyA9IChnYmwuX19TRU5UUllfXyA9IGdibC5fX1NFTlRSWV9fIHx8IHt9KTtcbiAgY29uc3Qgc2luZ2xldG9uID0gX19TRU5UUllfX1tuYW1lXSB8fCAoX19TRU5UUllfX1tuYW1lXSA9IGNyZWF0b3IoKSk7XG4gIHJldHVybiBzaW5nbGV0b247XG59XG5cbmV4cG9ydHMuR0xPQkFMX09CSiA9IEdMT0JBTF9PQko7XG5leHBvcnRzLmdldEdsb2JhbE9iamVjdCA9IGdldEdsb2JhbE9iamVjdDtcbmV4cG9ydHMuZ2V0R2xvYmFsU2luZ2xldG9uID0gZ2V0R2xvYmFsU2luZ2xldG9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d29ybGR3aWRlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBpcyA9IHJlcXVpcmUoJy4vaXMuanMnKTtcbmNvbnN0IHdvcmxkd2lkZSA9IHJlcXVpcmUoJy4vd29ybGR3aWRlLmpzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgV0lORE9XID0gd29ybGR3aWRlLmdldEdsb2JhbE9iamVjdCgpO1xuXG5jb25zdCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIID0gODA7XG5cbi8qKlxuICogR2l2ZW4gYSBjaGlsZCBET00gZWxlbWVudCwgcmV0dXJucyBhIHF1ZXJ5LXNlbGVjdG9yIHN0YXRlbWVudCBkZXNjcmliaW5nIHRoYXRcbiAqIGFuZCBpdHMgYW5jZXN0b3JzXG4gKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdXG4gKiBAcmV0dXJucyBnZW5lcmF0ZWQgRE9NIHBhdGhcbiAqL1xuZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZyhcbiAgZWxlbSxcbiAgb3B0aW9ucyA9IHt9LFxuKSB7XG4gIGlmICghZWxlbSkge1xuICAgIHJldHVybiAnPHVua25vd24+JztcbiAgfVxuXG4gIC8vIHRyeS9jYXRjaCBib3RoOlxuICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KVxuICAvLyAtIGBodG1sVHJlZUFzU3RyaW5nYCBiZWNhdXNlIGl0J3MgY29tcGxleCwgYW5kIGp1c3QgYWNjZXNzaW5nIHRoZSBET00gaW5jb3JyZWN0bHlcbiAgLy8gLSBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy5cbiAgdHJ5IHtcbiAgICBsZXQgY3VycmVudEVsZW0gPSBlbGVtIDtcbiAgICBjb25zdCBNQVhfVFJBVkVSU0VfSEVJR0hUID0gNTtcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBsZXQgbGVuID0gMDtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJztcbiAgICBjb25zdCBzZXBMZW5ndGggPSBzZXBhcmF0b3IubGVuZ3RoO1xuICAgIGxldCBuZXh0U3RyO1xuICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzO1xuICAgIGNvbnN0IG1heFN0cmluZ0xlbmd0aCA9ICghQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLm1heFN0cmluZ0xlbmd0aCkgfHwgREVGQVVMVF9NQVhfU1RSSU5HX0xFTkdUSDtcblxuICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHtcbiAgICAgIG5leHRTdHIgPSBfaHRtbEVsZW1lbnRBc1N0cmluZyhjdXJyZW50RWxlbSwga2V5QXR0cnMpO1xuICAgICAgLy8gYmFpbCBvdXQgaWZcbiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnRcbiAgICAgIC8vIC0gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHRoYXQgd291bGQgYmUgY3JlYXRlZCBleGNlZWRzIG1heFN0cmluZ0xlbmd0aFxuICAgICAgLy8gICAoaWdub3JlIHRoaXMgbGltaXQgaWYgd2UgYXJlIG9uIHRoZSBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBvdXQucHVzaChuZXh0U3RyKTtcblxuICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoO1xuICAgICAgY3VycmVudEVsZW0gPSBjdXJyZW50RWxlbS5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQucmV2ZXJzZSgpLmpvaW4oc2VwYXJhdG9yKTtcbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgcmV0dXJuICc8dW5rbm93bj4nO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNpbXBsZSwgcXVlcnktc2VsZWN0b3IgcmVwcmVzZW50YXRpb24gb2YgYSBET00gZWxlbWVudFxuICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdXG4gKiBAcmV0dXJucyBnZW5lcmF0ZWQgRE9NIHBhdGhcbiAqL1xuZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7XG4gIGNvbnN0IGVsZW0gPSBlbFxuXG47XG5cbiAgY29uc3Qgb3V0ID0gW107XG4gIGxldCBjbGFzc05hbWU7XG4gIGxldCBjbGFzc2VzO1xuICBsZXQga2V5O1xuICBsZXQgYXR0cjtcbiAgbGV0IGk7XG5cbiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIFdJTkRPVyBoYXMgSFRNTEVsZW1lbnRcbiAgaWYgKFdJTkRPVy5IVE1MRWxlbWVudCkge1xuICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZVxuICAgIGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWxlbS5kYXRhc2V0ICYmIGVsZW0uZGF0YXNldFsnc2VudHJ5Q29tcG9uZW50J10pIHtcbiAgICAgIHJldHVybiBlbGVtLmRhdGFzZXRbJ3NlbnRyeUNvbXBvbmVudCddO1xuICAgIH1cbiAgfVxuXG4gIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAvLyBQYWlycyBvZiBhdHRyaWJ1dGUga2V5cyBkZWZpbmVkIGluIGBzZXJpYWxpemVBdHRyaWJ1dGVgIGFuZCB0aGVpciB2YWx1ZXMgb24gZWxlbWVudC5cbiAgY29uc3Qga2V5QXR0clBhaXJzID1cbiAgICBrZXlBdHRycyAmJiBrZXlBdHRycy5sZW5ndGhcbiAgICAgID8ga2V5QXR0cnMuZmlsdGVyKGtleUF0dHIgPT4gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cikpLm1hcChrZXlBdHRyID0+IFtrZXlBdHRyLCBlbGVtLmdldEF0dHJpYnV0ZShrZXlBdHRyKV0pXG4gICAgICA6IG51bGw7XG5cbiAgaWYgKGtleUF0dHJQYWlycyAmJiBrZXlBdHRyUGFpcnMubGVuZ3RoKSB7XG4gICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4ge1xuICAgICAgb3V0LnB1c2goYFske2tleUF0dHJQYWlyWzBdfT1cIiR7a2V5QXR0clBhaXJbMV19XCJdYCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVsZW0uaWQpIHtcbiAgICAgIG91dC5wdXNoKGAjJHtlbGVtLmlkfWApO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZTtcbiAgICBpZiAoY2xhc3NOYW1lICYmIGlzLmlzU3RyaW5nKGNsYXNzTmFtZSkpIHtcbiAgICAgIGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dC5wdXNoKGAuJHtjbGFzc2VzW2ldfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBhbGxvd2VkQXR0cnMgPSBbJ2FyaWEtbGFiZWwnLCAndHlwZScsICduYW1lJywgJ3RpdGxlJywgJ2FsdCddO1xuICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gYWxsb3dlZEF0dHJzW2ldO1xuICAgIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShrZXkpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICBvdXQucHVzaChgWyR7a2V5fT1cIiR7YXR0cn1cIl1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dC5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBBIHNhZmUgZm9ybSBvZiBsb2NhdGlvbi5ocmVmXG4gKi9cbmZ1bmN0aW9uIGdldExvY2F0aW9uSHJlZigpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gV0lORE9XLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG4gIH0gY2F0Y2ggKG9PKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBhIERPTSBlbGVtZW50IGJ5IHVzaW5nIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IuXG4gKlxuICogVGhpcyB3cmFwcGVyIHdpbGwgZmlyc3QgY2hlY2sgZm9yIHRoZSBleGlzdGFuY2Ugb2YgdGhlIGZ1bmN0aW9uIGJlZm9yZVxuICogYWN0dWFsbHkgY2FsbGluZyBpdCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gdGFrZSBjYXJlIG9mIHRoaXMgY2hlY2ssXG4gKiBldmVyeSB0aW1lIHdlIHdhbnQgdG8gYWNjZXNzIHRoZSBET00uXG4gKlxuICogUmVhc29uOiBET00vcXVlcnlTZWxlY3RvciBpcyBub3QgYXZhaWxhYmxlIGluIGFsbCBlbnZpcm9ubWVudHMuXG4gKlxuICogV2UgaGF2ZSB0byBjYXN0IHRvIGFueSBiZWNhdXNlIHV0aWxzIGNhbiBiZSBjb25zdW1lZCBieSBhIHZhcmlldHkgb2YgZW52aXJvbm1lbnRzLFxuICogYW5kIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgVFMgdXNlcnMuIElmIHlvdSBrbm93IHdoYXQgZWxlbWVudCB3aWxsIGJlIHNlbGVjdGVkIGJ5XG4gKiBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAsIHNwZWNpZnkgaXQgYXMgcGFydCBvZiB0aGUgZ2VuZXJpYyBjYWxsLiBGb3IgZXhhbXBsZSxcbiAqIGBjb25zdCBlbGVtZW50ID0gZ2V0RG9tRWxlbWVudDxFbGVtZW50Pignc2VsZWN0b3InKTtgXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIHRoZSBzZWxlY3RvciBzdHJpbmcgcGFzc2VkIG9uIHRvIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGdldERvbUVsZW1lbnQoc2VsZWN0b3IpIHtcbiAgaWYgKFdJTkRPVy5kb2N1bWVudCAmJiBXSU5ET1cuZG9jdW1lbnQucXVlcnlTZWxlY3Rvcikge1xuICAgIHJldHVybiBXSU5ET1cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgRE9NIGVsZW1lbnQsIHRyYXZlcnNlcyB1cCB0aGUgdHJlZSB1bnRpbCBpdCBmaW5kcyB0aGUgZmlyc3QgYW5jZXN0b3Igbm9kZVxuICogdGhhdCBoYXMgdGhlIGBkYXRhLXNlbnRyeS1jb21wb25lbnRgIGF0dHJpYnV0ZS4gVGhpcyBhdHRyaWJ1dGUgaXMgYWRkZWQgYXQgYnVpbGQtdGltZVxuICogYnkgcHJvamVjdHMgdGhhdCBoYXZlIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiBpbnN0YWxsZWQuXG4gKlxuICogQHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhlIHByb3ZpZGVkIERPTSBlbGVtZW50LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUoZWxlbSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFdJTkRPVyBoYXMgSFRNTEVsZW1lbnRcbiAgaWYgKCFXSU5ET1cuSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gO1xuICBjb25zdCBNQVhfVFJBVkVSU0VfSEVJR0hUID0gNTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVhfVFJBVkVSU0VfSEVJR0hUOyBpKyspIHtcbiAgICBpZiAoIWN1cnJlbnRFbGVtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBjdXJyZW50RWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtLmRhdGFzZXRbJ3NlbnRyeUNvbXBvbmVudCddO1xuICAgIH1cblxuICAgIGN1cnJlbnRFbGVtID0gY3VycmVudEVsZW0ucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnRzLmdldENvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lO1xuZXhwb3J0cy5nZXREb21FbGVtZW50ID0gZ2V0RG9tRWxlbWVudDtcbmV4cG9ydHMuZ2V0TG9jYXRpb25IcmVmID0gZ2V0TG9jYXRpb25IcmVmO1xuZXhwb3J0cy5odG1sVHJlZUFzU3RyaW5nID0gaHRtbFRyZWVBc1N0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXIuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuXG4gKlxuICogQVRURU5USU9OOiBUaGlzIGNvbnN0YW50IG11c3QgbmV2ZXIgY3Jvc3MgcGFja2FnZSBib3VuZGFyaWVzIChpLmUuIGJlIGV4cG9ydGVkKSB0byBndWFyYW50ZWUgdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgdHJlZSBzaGFraW5nLlxuICovXG5jb25zdCBERUJVR19CVUlMRCA9ICh0eXBlb2YgX19TRU5UUllfREVCVUdfXyA9PT0gJ3VuZGVmaW5lZCcgfHwgX19TRU5UUllfREVCVUdfXyk7XG5cbmV4cG9ydHMuREVCVUdfQlVJTEQgPSBERUJVR19CVUlMRDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWJ1aWxkLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3Qgd29ybGR3aWRlID0gcmVxdWlyZSgnLi93b3JsZHdpZGUuanMnKTtcblxuLyoqIFByZWZpeCBmb3IgbG9nZ2luZyBzdHJpbmdzICovXG5jb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnO1xuXG5jb25zdCBDT05TT0xFX0xFVkVMUyA9IFtcbiAgJ2RlYnVnJyxcbiAgJ2luZm8nLFxuICAnd2FybicsXG4gICdlcnJvcicsXG4gICdsb2cnLFxuICAnYXNzZXJ0JyxcbiAgJ3RyYWNlJyxcbl0gO1xuXG4vKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovXG5jb25zdCBvcmlnaW5hbENvbnNvbGVNZXRob2RzXG5cbiA9IHt9O1xuXG4vKiogSlNEb2MgKi9cblxuLyoqXG4gKiBUZW1wb3JhcmlseSBkaXNhYmxlIHNlbnRyeSBjb25zb2xlIGluc3RydW1lbnRhdGlvbnMuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBydW4gYWdhaW5zdCB0aGUgb3JpZ2luYWwgYGNvbnNvbGVgIG1lc3NhZ2VzXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gY29uc29sZVNhbmRib3goY2FsbGJhY2spIHtcbiAgaWYgKCEoJ2NvbnNvbGUnIGluIHdvcmxkd2lkZS5HTE9CQUxfT0JKKSkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgY29uc3QgY29uc29sZSA9IHdvcmxkd2lkZS5HTE9CQUxfT0JKLmNvbnNvbGUgO1xuICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTtcblxuICBjb25zdCB3cmFwcGVkTGV2ZWxzID0gT2JqZWN0LmtleXMob3JpZ2luYWxDb25zb2xlTWV0aG9kcykgO1xuXG4gIC8vIFJlc3RvcmUgYWxsIHdyYXBwZWQgY29uc29sZSBtZXRob2RzXG4gIHdyYXBwZWRMZXZlbHMuZm9yRWFjaChsZXZlbCA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gO1xuICAgIHdyYXBwZWRGdW5jc1tsZXZlbF0gPSBjb25zb2xlW2xldmVsXSA7XG4gICAgY29uc29sZVtsZXZlbF0gPSBvcmlnaW5hbENvbnNvbGVNZXRob2Q7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gUmV2ZXJ0IHJlc3RvcmF0aW9uIHRvIHdyYXBwZWQgc3RhdGVcbiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4ge1xuICAgICAgY29uc29sZVtsZXZlbF0gPSB3cmFwcGVkRnVuY3NbbGV2ZWxdIDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTG9nZ2VyKCkge1xuICBsZXQgZW5hYmxlZCA9IGZhbHNlO1xuICBjb25zdCBsb2dnZXIgPSB7XG4gICAgZW5hYmxlOiAoKSA9PiB7XG4gICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6ICgpID0+IHtcbiAgICAgIGVuYWJsZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCxcbiAgfTtcblxuICBpZiAoZGVidWdCdWlsZC5ERUJVR19CVUlMRCkge1xuICAgIENPTlNPTEVfTEVWRUxTLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAgICAgICB3b3JsZHdpZGUuR0xPQkFMX09CSi5jb25zb2xlW25hbWVdKGAke1BSRUZJWH1bJHtuYW1lfV06YCwgLi4uYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIGxvZ2dlcltuYW1lXSA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsb2dnZXIgO1xufVxuXG5jb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7XG5cbmV4cG9ydHMuQ09OU09MRV9MRVZFTFMgPSBDT05TT0xFX0xFVkVMUztcbmV4cG9ydHMuY29uc29sZVNhbmRib3ggPSBjb25zb2xlU2FuZGJveDtcbmV4cG9ydHMubG9nZ2VyID0gbG9nZ2VyO1xuZXhwb3J0cy5vcmlnaW5hbENvbnNvbGVNZXRob2RzID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dlci5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJy4vbG9nZ2VyLmpzJyk7XG5cbi8qKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBwYXJzZSBhIERzbi4gKi9cbmNvbnN0IERTTl9SRUdFWCA9IC9eKD86KFxcdyspOilcXC9cXC8oPzooXFx3KykoPzo6KFxcdyspPyk/QCkoW1xcdy4tXSspKD86OihcXGQrKSk/XFwvKC4rKS87XG5cbmZ1bmN0aW9uIGlzVmFsaWRQcm90b2NvbChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwJyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzJztcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEc24uXG4gKlxuICogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJlbmRlciB0aGUgcHVibGljIHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgdGhlIHBhc3N3b3JkXG4gKiBjb21wb25lbnQuIFRvIGdldCB0aGUgZGVwcmVjYXRlZCBwcml2YXRlIHJlcHJlc2VudGF0aW9uLCBzZXQgYHdpdGhQYXNzd29yZGBcbiAqIHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHdpdGhQYXNzd29yZCBXaGVuIHNldCB0byB0cnVlLCB0aGUgcGFzc3dvcmQgd2lsbCBiZSBpbmNsdWRlZC5cbiAqL1xuZnVuY3Rpb24gZHNuVG9TdHJpbmcoZHNuLCB3aXRoUGFzc3dvcmQgPSBmYWxzZSkge1xuICBjb25zdCB7IGhvc3QsIHBhdGgsIHBhc3MsIHBvcnQsIHByb2plY3RJZCwgcHJvdG9jb2wsIHB1YmxpY0tleSB9ID0gZHNuO1xuICByZXR1cm4gKFxuICAgIGAke3Byb3RvY29sfTovLyR7cHVibGljS2V5fSR7d2l0aFBhc3N3b3JkICYmIHBhc3MgPyBgOiR7cGFzc31gIDogJyd9YCArXG4gICAgYEAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfS8ke3BhdGggPyBgJHtwYXRofS9gIDogcGF0aH0ke3Byb2plY3RJZH1gXG4gICk7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgRHNuIGZyb20gYSBnaXZlbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciBBIERzbiBhcyBzdHJpbmdcbiAqIEByZXR1cm5zIERzbiBhcyBEc25Db21wb25lbnRzIG9yIHVuZGVmaW5lZCBpZiBAcGFyYW0gc3RyIGlzIG5vdCBhIHZhbGlkIERTTiBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZHNuRnJvbVN0cmluZyhzdHIpIHtcbiAgY29uc3QgbWF0Y2ggPSBEU05fUkVHRVguZXhlYyhzdHIpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBiZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGVcbiAgICBsb2dnZXIuY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgU2VudHJ5IERzbjogJHtzdHJ9YCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IFtwcm90b2NvbCwgcHVibGljS2V5LCBwYXNzID0gJycsIGhvc3QsIHBvcnQgPSAnJywgbGFzdFBhdGhdID0gbWF0Y2guc2xpY2UoMSk7XG4gIGxldCBwYXRoID0gJyc7XG4gIGxldCBwcm9qZWN0SWQgPSBsYXN0UGF0aDtcblxuICBjb25zdCBzcGxpdCA9IHByb2plY3RJZC5zcGxpdCgnLycpO1xuICBpZiAoc3BsaXQubGVuZ3RoID4gMSkge1xuICAgIHBhdGggPSBzcGxpdC5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgIHByb2plY3RJZCA9IHNwbGl0LnBvcCgpIDtcbiAgfVxuXG4gIGlmIChwcm9qZWN0SWQpIHtcbiAgICBjb25zdCBwcm9qZWN0TWF0Y2ggPSBwcm9qZWN0SWQubWF0Y2goL15cXGQrLyk7XG4gICAgaWYgKHByb2plY3RNYXRjaCkge1xuICAgICAgcHJvamVjdElkID0gcHJvamVjdE1hdGNoWzBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkc25Gcm9tQ29tcG9uZW50cyh7IGhvc3QsIHBhc3MsIHBhdGgsIHByb2plY3RJZCwgcG9ydCwgcHJvdG9jb2w6IHByb3RvY29sICwgcHVibGljS2V5IH0pO1xufVxuXG5mdW5jdGlvbiBkc25Gcm9tQ29tcG9uZW50cyhjb21wb25lbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IGNvbXBvbmVudHMucHJvdG9jb2wsXG4gICAgcHVibGljS2V5OiBjb21wb25lbnRzLnB1YmxpY0tleSB8fCAnJyxcbiAgICBwYXNzOiBjb21wb25lbnRzLnBhc3MgfHwgJycsXG4gICAgaG9zdDogY29tcG9uZW50cy5ob3N0LFxuICAgIHBvcnQ6IGNvbXBvbmVudHMucG9ydCB8fCAnJyxcbiAgICBwYXRoOiBjb21wb25lbnRzLnBhdGggfHwgJycsXG4gICAgcHJvamVjdElkOiBjb21wb25lbnRzLnByb2plY3RJZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEc24oZHNuKSB7XG4gIGlmICghZGVidWdCdWlsZC5ERUJVR19CVUlMRCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgeyBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sIH0gPSBkc247XG5cbiAgY29uc3QgcmVxdWlyZWRDb21wb25lbnRzID0gWydwcm90b2NvbCcsICdwdWJsaWNLZXknLCAnaG9zdCcsICdwcm9qZWN0SWQnXTtcbiAgY29uc3QgaGFzTWlzc2luZ1JlcXVpcmVkQ29tcG9uZW50ID0gcmVxdWlyZWRDb21wb25lbnRzLmZpbmQoY29tcG9uZW50ID0+IHtcbiAgICBpZiAoIWRzbltjb21wb25lbnRdKSB7XG4gICAgICBsb2dnZXIubG9nZ2VyLmVycm9yKGBJbnZhbGlkIFNlbnRyeSBEc246ICR7Y29tcG9uZW50fSBtaXNzaW5nYCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcblxuICBpZiAoaGFzTWlzc2luZ1JlcXVpcmVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFwcm9qZWN0SWQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgbG9nZ2VyLmxvZ2dlci5lcnJvcihgSW52YWxpZCBTZW50cnkgRHNuOiBJbnZhbGlkIHByb2plY3RJZCAke3Byb2plY3RJZH1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRQcm90b2NvbChwcm90b2NvbCkpIHtcbiAgICBsb2dnZXIubG9nZ2VyLmVycm9yKGBJbnZhbGlkIFNlbnRyeSBEc246IEludmFsaWQgcHJvdG9jb2wgJHtwcm90b2NvbH1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocG9ydCAmJiBpc05hTihwYXJzZUludChwb3J0LCAxMCkpKSB7XG4gICAgbG9nZ2VyLmxvZ2dlci5lcnJvcihgSW52YWxpZCBTZW50cnkgRHNuOiBJbnZhbGlkIHBvcnQgJHtwb3J0fWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB2YWxpZCBTZW50cnkgRHNuIG9iamVjdCwgaWRlbnRpZnlpbmcgYSBTZW50cnkgaW5zdGFuY2UgYW5kIHByb2plY3QuXG4gKiBAcmV0dXJucyBhIHZhbGlkIERzbkNvbXBvbmVudHMgb2JqZWN0IG9yIGB1bmRlZmluZWRgIGlmIEBwYXJhbSBmcm9tIGlzIGFuIGludmFsaWQgRFNOIHNvdXJjZVxuICovXG5mdW5jdGlvbiBtYWtlRHNuKGZyb20pIHtcbiAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJyA/IGRzbkZyb21TdHJpbmcoZnJvbSkgOiBkc25Gcm9tQ29tcG9uZW50cyhmcm9tKTtcbiAgaWYgKCFjb21wb25lbnRzIHx8ICF2YWxpZGF0ZURzbihjb21wb25lbnRzKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5cbmV4cG9ydHMuZHNuRnJvbVN0cmluZyA9IGRzbkZyb21TdHJpbmc7XG5leHBvcnRzLmRzblRvU3RyaW5nID0gZHNuVG9TdHJpbmc7XG5leHBvcnRzLm1ha2VEc24gPSBtYWtlRHNuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHNuLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKiogQW4gZXJyb3IgZW1pdHRlZCBieSBTZW50cnkgU0RLcyBhbmQgcmVsYXRlZCB1dGlsaXRpZXMuICovXG5jbGFzcyBTZW50cnlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqL1xuXG4gICBjb25zdHJ1Y3RvciggbWVzc2FnZSwgbG9nTGV2ZWwgPSAnd2FybicpIHtcbiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IG5ldy50YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgLy8gVGhpcyBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgYEVycm9yYCwgbm90IGBTZW50cnlFcnJvcmAuIEl0J3MgdW5jbGVhciB3aHkgd2UgZG8gdGhpcywgYnV0IGNvbW1lbnRpbmcgdGhpcyBsaW5lXG4gICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXNcbiAgICAvLyBpbnN0YW5jZXMgb2YgYFNlbnRyeUVycm9yYCBmYWlsIGBvYmogaW5zdGFuY2VvZiBTZW50cnlFcnJvcmAgY2hlY2tzLlxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsO1xuICB9XG59XG5cbmV4cG9ydHMuU2VudHJ5RXJyb3IgPSBTZW50cnlFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBicm93c2VyID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzLmpzJyk7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCcuL2xvZ2dlci5qcycpO1xuY29uc3Qgc3RyaW5nID0gcmVxdWlyZSgnLi9zdHJpbmcuanMnKTtcblxuLyoqXG4gKiBSZXBsYWNlIGEgbWV0aG9kIGluIGFuIG9iamVjdCB3aXRoIGEgd3JhcHBlZCB2ZXJzaW9uIG9mIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gc291cmNlIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbWV0aG9kIHRvIGJlIHdyYXBwZWQuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRvIGJlIHdyYXBwZWQuXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRGYWN0b3J5IEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIGdpdmVuIG1ldGhvZCBhbmQgcmV0dXJucyBhXG4gKiB3cmFwcGVkIHZlcnNpb24uIE5vdGU6IFRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBgcmVwbGFjZW1lbnRGYWN0b3J5YCBuZWVkcyB0byBiZSBhIG5vbi1hcnJvdyBmdW5jdGlvbiwgaW4gb3JkZXIgdG9cbiAqIHByZXNlcnZlIHRoZSBjb3JyZWN0IHZhbHVlIG9mIGB0aGlzYCwgYW5kIHRoZSBvcmlnaW5hbCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgdXNpbmcgYG9yaWdNZXRob2QuY2FsbCh0aGlzLCA8b3RoZXJcbiAqIGFyZ3M+KWAgb3IgYG9yaWdNZXRob2QuYXBwbHkodGhpcywgWzxvdGhlciBhcmdzPl0pYCAocmF0aGVyIHRoYW4gYmVpbmcgY2FsbGVkIGRpcmVjdGx5KSwgYWdhaW4gdG8gcHJlc2VydmUgYHRoaXNgLlxuICogQHJldHVybnMgdm9pZFxuICovXG5mdW5jdGlvbiBmaWxsKHNvdXJjZSwgbmFtZSwgcmVwbGFjZW1lbnRGYWN0b3J5KSB7XG4gIGlmICghKG5hbWUgaW4gc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsID0gc291cmNlW25hbWVdIDtcbiAgY29uc3Qgd3JhcHBlZCA9IHJlcGxhY2VtZW50RmFjdG9yeShvcmlnaW5hbCkgO1xuXG4gIC8vIE1ha2Ugc3VyZSBpdCdzIGEgZnVuY3Rpb24gZmlyc3QsIGFzIHdlIG5lZWQgdG8gYXR0YWNoIGFuIGVtcHR5IHByb3RvdHlwZSBmb3IgYGRlZmluZVByb3BlcnRpZXNgIHRvIHdvcmtcbiAgLy8gb3RoZXJ3aXNlIGl0J2xsIHRocm93IFwiVHlwZUVycm9yOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyBjYWxsZWQgb24gbm9uLW9iamVjdFwiXG4gIGlmICh0eXBlb2Ygd3JhcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1hcmtGdW5jdGlvbldyYXBwZWQod3JhcHBlZCwgb3JpZ2luYWwpO1xuICB9XG5cbiAgc291cmNlW25hbWVdID0gd3JhcHBlZDtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gdGhlIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3Qgb24gd2hpY2ggdG8gc2V0IHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNldFxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB3aGljaCB0byBzZXQgdGhlIHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShvYmosIG5hbWUsIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbmFtZSwge1xuICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsIC8vIHRoZSBkZWZhdWx0LCBzbyB3ZSBjYW4gc2F2ZSBvbiBidW5kbGUgc2l6ZSBieSBub3QgZXhwbGljaXRseSBzZXR0aW5nIGl0XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSBjYXRjaCAob19PKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiBsb2dnZXIubG9nZ2VyLmxvZyhgRmFpbGVkIHRvIGFkZCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBcIiR7bmFtZX1cIiB0byBvYmplY3RgLCBvYmopO1xuICB9XG59XG5cbi8qKlxuICogUmVtZW1iZXJzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvbiB0aGUgd3JhcHBlZCBmdW5jdGlvbiBhbmRcbiAqIHBhdGNoZXMgdXAgdGhlIHByb3RvdHlwZS5cbiAqXG4gKiBAcGFyYW0gd3JhcHBlZCB0aGUgd3JhcHBlciBmdW5jdGlvblxuICogQHBhcmFtIG9yaWdpbmFsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB0aGF0IGdldHMgd3JhcHBlZFxuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb25XcmFwcGVkKHdyYXBwZWQsIG9yaWdpbmFsKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdG8gPSBvcmlnaW5hbC5wcm90b3R5cGUgfHwge307XG4gICAgd3JhcHBlZC5wcm90b3R5cGUgPSBvcmlnaW5hbC5wcm90b3R5cGUgPSBwcm90bztcbiAgICBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkod3JhcHBlZCwgJ19fc2VudHJ5X29yaWdpbmFsX18nLCBvcmlnaW5hbCk7XG4gIH0gY2F0Y2ggKG9fTykge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIFRoaXMgZXh0cmFjdHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZS4gIFNlZVxuICogYG1hcmtGdW5jdGlvbldyYXBwZWRgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB0byB1bndyYXBcbiAqIEByZXR1cm5zIHRoZSB1bndyYXBwZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRPcmlnaW5hbEZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMuX19zZW50cnlfb3JpZ2luYWxfXztcbn1cblxuLyoqXG4gKiBFbmNvZGVzIGdpdmVuIG9iamVjdCBpbnRvIHVybC1mcmllbmRseSBmb3JtYXRcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEByZXR1cm5zIHN0cmluZyBFbmNvZGVkXG4gKi9cbmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdClcbiAgICAubWFwKGtleSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQob2JqZWN0W2tleV0pfWApXG4gICAgLmpvaW4oJyYnKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFueSBgRXJyb3JgIG9yIGBFdmVudGAgaW50byBhIHBsYWluIG9iamVjdCB3aXRoIGFsbCBvZiB0aGVpciBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIGFuZCBzb21lIG9mIHRoZWlyXG4gKiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGF0dGFjaGVkLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBJbml0aWFsIHNvdXJjZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmb3JtIGluIG9yZGVyIGZvciBpdCB0byBiZSB1c2FibGUgYnkgdGhlIHNlcmlhbGl6ZXJcbiAqIEByZXR1cm5zIEFuIEV2ZW50IG9yIEVycm9yIHR1cm5lZCBpbnRvIGFuIG9iamVjdCAtIG9yIHRoZSB2YWx1ZSBhcmd1cm1lbnQgaXRzZWxmLCB3aGVuIHZhbHVlIGlzIG5laXRoZXIgYW4gRXZlbnQgbm9yXG4gKiAgYW4gRXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1BsYWluT2JqZWN0KFxuICB2YWx1ZSxcbilcblxuIHtcbiAgaWYgKGlzLmlzRXJyb3IodmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgc3RhY2s6IHZhbHVlLnN0YWNrLFxuICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpcy5pc0V2ZW50KHZhbHVlKSkge1xuICAgIGNvbnN0IG5ld09ialxuXG4gPSB7XG4gICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgdGFyZ2V0OiBzZXJpYWxpemVFdmVudFRhcmdldCh2YWx1ZS50YXJnZXQpLFxuICAgICAgY3VycmVudFRhcmdldDogc2VyaWFsaXplRXZlbnRUYXJnZXQodmFsdWUuY3VycmVudFRhcmdldCksXG4gICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXMuaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHtcbiAgICAgIG5ld09iai5kZXRhaWwgPSB2YWx1ZS5kZXRhaWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqIENyZWF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhcmdldCBvZiBhbiBgRXZlbnRgIG9iamVjdCAqL1xuZnVuY3Rpb24gc2VyaWFsaXplRXZlbnRUYXJnZXQodGFyZ2V0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGlzLmlzRWxlbWVudCh0YXJnZXQpID8gYnJvd3Nlci5odG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTtcbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgcmV0dXJuICc8dW5rbm93bj4nO1xuICB9XG59XG5cbi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovXG5mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0aWVzKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XG4gICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BlcnR5KSkge1xuICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IGNhcHR1cmVkIGV4Y2VwdGlvbiwgZXh0cmFjdCBpdHMga2V5cyBhbmQgY3JlYXRlIGEgc29ydGVkXG4gKiBhbmQgdHJ1bmNhdGVkIGxpc3QgdGhhdCB3aWxsIGJlIHVzZWQgaW5zaWRlIHRoZSBldmVudCBtZXNzYWdlLlxuICogZWcuIGBOb24tZXJyb3IgZXhjZXB0aW9uIGNhcHR1cmVkIHdpdGgga2V5czogZm9vLCBiYXIsIGJhemBcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlKGV4Y2VwdGlvbiwgbWF4TGVuZ3RoID0gNDApIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbnZlcnRUb1BsYWluT2JqZWN0KGV4Y2VwdGlvbikpO1xuICBrZXlzLnNvcnQoKTtcblxuICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IGhhcyBubyBrZXlzXSc7XG4gIH1cblxuICBpZiAoa2V5c1swXS5sZW5ndGggPj0gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0cmluZy50cnVuY2F0ZShrZXlzWzBdLCBtYXhMZW5ndGgpO1xuICB9XG5cbiAgZm9yIChsZXQgaW5jbHVkZWRLZXlzID0ga2V5cy5sZW5ndGg7IGluY2x1ZGVkS2V5cyA+IDA7IGluY2x1ZGVkS2V5cy0tKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGtleXMuc2xpY2UoMCwgaW5jbHVkZWRLZXlzKS5qb2luKCcsICcpO1xuICAgIGlmIChzZXJpYWxpemVkLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpbmNsdWRlZEtleXMgPT09IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZy50cnVuY2F0ZShzZXJpYWxpemVkLCBtYXhMZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBvYmplY3QsIHJldHVybiBhIG5ldyBvYmplY3QgaGF2aW5nIHJlbW92ZWQgYWxsIGZpZWxkcyB3aG9zZSB2YWx1ZSB3YXMgYHVuZGVmaW5lZGAuXG4gKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuXG4gKlxuICogQXR0ZW50aW9uOiBUaGlzIGZ1bmN0aW9uIGtlZXBzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gdGhlIHJldHVybmVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSkge1xuICAvLyBUaGlzIG1hcCBrZWVwcyB0cmFjayBvZiB3aGF0IGFscmVhZHkgdmlzaXRlZCBub2RlcyBtYXAgdG8uXG4gIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhclxuICAvLyByZWZlcmVuY2VzIGFzIHRoZSBpbnB1dCBvYmplY3QuXG4gIGNvbnN0IG1lbW9pemF0aW9uTWFwID0gbmV3IE1hcCgpO1xuXG4gIC8vIFRoaXMgZnVuY3Rpb24ganVzdCBwcm94aWVzIGBfZHJvcFVuZGVmaW5lZEtleXNgIHRvIGtlZXAgdGhlIGBtZW1vQnVpbGRlcmAgb3V0IG9mIHRoaXMgZnVuY3Rpb24ncyBBUElcbiAgcmV0dXJuIF9kcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlLCBtZW1vaXphdGlvbk1hcCk7XG59XG5cbmZ1bmN0aW9uIF9kcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlLCBtZW1vaXphdGlvbk1hcCkge1xuICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7XG4gICAgLy8gSWYgdGhpcyBub2RlIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBkdWUgdG8gYSBjaXJjdWxhciByZWZlcmVuY2UsIHJldHVybiB0aGUgb2JqZWN0IGl0IHdhcyBtYXBwZWQgdG8gaW4gdGhlIG5ldyBvYmplY3RcbiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpO1xuICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBtZW1vVmFsIDtcbiAgICB9XG5cbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHt9O1xuICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhXG4gICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGlucHV0VmFsdWUpKSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuVmFsdWVba2V5XSA9IF9kcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlW2tleV0sIG1lbW9pemF0aW9uTWFwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWUgO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkpIHtcbiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0XG4gICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTtcbiAgICBpZiAobWVtb1ZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbWVtb1ZhbCA7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTtcbiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YVxuICAgIG1lbW9pemF0aW9uTWFwLnNldChpbnB1dFZhbHVlLCByZXR1cm5WYWx1ZSk7XG5cbiAgICBpbnB1dFZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHJldHVyblZhbHVlLnB1c2goX2Ryb3BVbmRlZmluZWRLZXlzKGl0ZW0sIG1lbW9pemF0aW9uTWFwKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWUgO1xuICB9XG5cbiAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUG9qbyhpbnB1dCkge1xuICBpZiAoIWlzLmlzUGxhaW5PYmplY3QoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBuYW1lID0gKE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dCkgKS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgc29tZXRoaW5nIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBUdXJucyBgdW5kZWZpbmVkYCBhbmQgYG51bGxgIGludG8gYFN0cmluZ2BzIGFuZCBhbGwgb3RoZXIgcHJpbWl0aXZlcyBpbnRvIGluc3RhbmNlcyBvZiB0aGVpciByZXNwZWN0aXZlIHdyYXBwZXJcbiAqIGNsYXNzZXMgKFN0cmluZywgQm9vbGVhbiwgTnVtYmVyLCBldGMuKS4gQWN0cyBhcyB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gb24gbm9uLXByaW1pdGl2ZXMuXG4gKlxuICogQHBhcmFtIHdhdCBUaGUgc3ViamVjdCBvZiB0aGUgb2JqZWN0aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBBIHZlcnNpb24gb2YgYHdhdGAgd2hpY2ggY2FuIHNhZmVseSBiZSB1c2VkIHdpdGggYE9iamVjdGAgY2xhc3MgbWV0aG9kc1xuICovXG5mdW5jdGlvbiBvYmplY3RpZnkod2F0KSB7XG4gIGxldCBvYmplY3RpZmllZDtcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSB3YXQgPT09IHVuZGVmaW5lZCB8fCB3YXQgPT09IG51bGw6XG4gICAgICBvYmplY3RpZmllZCA9IG5ldyBTdHJpbmcod2F0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgLy8gVGhvdWdoIHN5bWJvbHMgYW5kIGJpZ2ludHMgZG8gaGF2ZSB3cmFwcGVyIGNsYXNzZXMgKGBTeW1ib2xgIGFuZCBgQmlnSW50YCwgcmVzcGVjdGl2ZWx5KSwgZm9yIHdoYXRldmVyIHJlYXNvblxuICAgIC8vIHRob3NlIGNsYXNzZXMgZG9uJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4gV2UgdGhlcmVmb3JlIG5lZWQgdG8gY2FzdCBlYWNoIGFzXG4gICAgLy8gYW4gb2JqZWN0IGluIG9yZGVyIHRvIHdyYXAgaXQuXG4gICAgY2FzZSB0eXBlb2Ygd2F0ID09PSAnc3ltYm9sJyB8fCB0eXBlb2Ygd2F0ID09PSAnYmlnaW50JzpcbiAgICAgIG9iamVjdGlmaWVkID0gT2JqZWN0KHdhdCk7XG4gICAgICBicmVhaztcblxuICAgIC8vIHRoaXMgd2lsbCBjYXRjaCB0aGUgcmVtYWluaW5nIHByaW1pdGl2ZXM6IGBTdHJpbmdgLCBgTnVtYmVyYCwgYW5kIGBCb29sZWFuYFxuICAgIGNhc2UgaXMuaXNQcmltaXRpdmUod2F0KTpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIG9iamVjdGlmaWVkID0gbmV3ICh3YXQgKS5jb25zdHJ1Y3Rvcih3YXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICAvLyBieSBwcm9jZXNzIG9mIGVsaW1pbmF0aW9uLCBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBgd2F0YCBtdXN0IGFscmVhZHkgYmUgYW4gb2JqZWN0XG4gICAgZGVmYXVsdDpcbiAgICAgIG9iamVjdGlmaWVkID0gd2F0O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9iamVjdGlmaWVkO1xufVxuXG5leHBvcnRzLmFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eTtcbmV4cG9ydHMuY29udmVydFRvUGxhaW5PYmplY3QgPSBjb252ZXJ0VG9QbGFpbk9iamVjdDtcbmV4cG9ydHMuZHJvcFVuZGVmaW5lZEtleXMgPSBkcm9wVW5kZWZpbmVkS2V5cztcbmV4cG9ydHMuZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlID0gZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlO1xuZXhwb3J0cy5maWxsID0gZmlsbDtcbmV4cG9ydHMuZ2V0T3JpZ2luYWxGdW5jdGlvbiA9IGdldE9yaWdpbmFsRnVuY3Rpb247XG5leHBvcnRzLm1hcmtGdW5jdGlvbldyYXBwZWQgPSBtYXJrRnVuY3Rpb25XcmFwcGVkO1xuZXhwb3J0cy5vYmplY3RpZnkgPSBvYmplY3RpZnk7XG5leHBvcnRzLnVybEVuY29kZSA9IHVybEVuY29kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/XG4gKi9cbmZ1bmN0aW9uIGZpbGVuYW1lSXNJbkFwcChmaWxlbmFtZSwgaXNOYXRpdmUgPSBmYWxzZSkge1xuICBjb25zdCBpc0ludGVybmFsID1cbiAgICBpc05hdGl2ZSB8fFxuICAgIChmaWxlbmFtZSAmJlxuICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoXG4gICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpICYmXG4gICAgICAvLyBJdCdzIG5vdCBpbnRlcm5hbCBpZiBpdCdzIGFuIGFic29sdXRlIHdpbmRvd3MgcGF0aFxuICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiZcbiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBwYXRoIGlzIHN0YXJ0aW5nIHdpdGggYSBkb3RcbiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcuJykgJiZcbiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFja1xuICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW2EtekEtWl0oW2EtekEtWjAtOS5cXC0rXSkqOlxcL1xcLy8pKTsgLy8gU2NoZW1hIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNjQxNzgyXG5cbiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlc1xuICAvLyBub3RlIHRoYXQgaXNOYXRpdmUgYXBwZWFycyB0byByZXR1cm4gdHJ1ZSBldmVuIGZvciBub2RlIGNvcmUgbGlicmFyaWVzXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLW5vZGUvaXNzdWVzLzE3NlxuXG4gIHJldHVybiAhaXNJbnRlcm5hbCAmJiBmaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmICFmaWxlbmFtZS5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLycpO1xufVxuXG4vKiogTm9kZSBTdGFjayBsaW5lIHBhcnNlciAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIG5vZGUoZ2V0TW9kdWxlKSB7XG4gIGNvbnN0IEZJTEVOQU1FX01BVENIID0gL15cXHMqWy1dezQsfSQvO1xuICBjb25zdCBGVUxMX01BVENIID0gL2F0ICg/OmFzeW5jICk/KD86KC4rPylcXHMrXFwoKT8oPzooLispOihcXGQrKTooXFxkKyk/fChbXildKykpXFwpPy87XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgcmV0dXJuIChsaW5lKSA9PiB7XG4gICAgY29uc3QgbGluZU1hdGNoID0gbGluZS5tYXRjaChGVUxMX01BVENIKTtcblxuICAgIGlmIChsaW5lTWF0Y2gpIHtcbiAgICAgIGxldCBvYmplY3Q7XG4gICAgICBsZXQgbWV0aG9kO1xuICAgICAgbGV0IGZ1bmN0aW9uTmFtZTtcbiAgICAgIGxldCB0eXBlTmFtZTtcbiAgICAgIGxldCBtZXRob2ROYW1lO1xuXG4gICAgICBpZiAobGluZU1hdGNoWzFdKSB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZSA9IGxpbmVNYXRjaFsxXTtcblxuICAgICAgICBsZXQgbWV0aG9kU3RhcnQgPSBmdW5jdGlvbk5hbWUubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZVttZXRob2RTdGFydCAtIDFdID09PSAnLicpIHtcbiAgICAgICAgICBtZXRob2RTdGFydC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZFN0YXJ0ID4gMCkge1xuICAgICAgICAgIG9iamVjdCA9IGZ1bmN0aW9uTmFtZS5zbGljZSgwLCBtZXRob2RTdGFydCk7XG4gICAgICAgICAgbWV0aG9kID0gZnVuY3Rpb25OYW1lLnNsaWNlKG1ldGhvZFN0YXJ0ICsgMSk7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0RW5kID0gb2JqZWN0LmluZGV4T2YoJy5Nb2R1bGUnKTtcbiAgICAgICAgICBpZiAob2JqZWN0RW5kID4gMCkge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lLnNsaWNlKG9iamVjdEVuZCArIDEpO1xuICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LnNsaWNlKDAsIG9iamVjdEVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHR5cGVOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIHR5cGVOYW1lID0gb2JqZWN0O1xuICAgICAgICBtZXRob2ROYW1lID0gbWV0aG9kO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnPGFub255bW91cz4nKSB7XG4gICAgICAgIG1ldGhvZE5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZ1bmN0aW9uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1ldGhvZE5hbWUgPSBtZXRob2ROYW1lIHx8ICc8YW5vbnltb3VzPic7XG4gICAgICAgIGZ1bmN0aW9uTmFtZSA9IHR5cGVOYW1lID8gYCR7dHlwZU5hbWV9LiR7bWV0aG9kTmFtZX1gIDogbWV0aG9kTmFtZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGZpbGVuYW1lID0gbGluZU1hdGNoWzJdICYmIGxpbmVNYXRjaFsyXS5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyBsaW5lTWF0Y2hbMl0uc2xpY2UoNykgOiBsaW5lTWF0Y2hbMl07XG4gICAgICBjb25zdCBpc05hdGl2ZSA9IGxpbmVNYXRjaFs1XSA9PT0gJ25hdGl2ZSc7XG5cbiAgICAgIC8vIElmIGl0J3MgYSBXaW5kb3dzIHBhdGgsIHRyaW0gdGhlIGxlYWRpbmcgc2xhc2ggc28gdGhhdCBgL0M6L2Zvb2AgYmVjb21lcyBgQzovZm9vYFxuICAgICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLm1hdGNoKC9cXC9bQS1aXTovKSkge1xuICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnNsaWNlKDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpbGVuYW1lICYmIGxpbmVNYXRjaFs1XSAmJiAhaXNOYXRpdmUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSBsaW5lTWF0Y2hbNV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBtb2R1bGU6IGdldE1vZHVsZSA/IGdldE1vZHVsZShmaWxlbmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGxpbmVubzogcGFyc2VJbnQobGluZU1hdGNoWzNdLCAxMCkgfHwgdW5kZWZpbmVkLFxuICAgICAgICBjb2xubzogcGFyc2VJbnQobGluZU1hdGNoWzRdLCAxMCkgfHwgdW5kZWZpbmVkLFxuICAgICAgICBpbl9hcHA6IGZpbGVuYW1lSXNJbkFwcChmaWxlbmFtZSwgaXNOYXRpdmUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobGluZS5tYXRjaChGSUxFTkFNRV9NQVRDSCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVuYW1lOiBsaW5lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnRzLmZpbGVuYW1lSXNJbkFwcCA9IGZpbGVuYW1lSXNJbkFwcDtcbmV4cG9ydHMubm9kZSA9IG5vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlLXN0YWNrLXRyYWNlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBub2RlU3RhY2tUcmFjZSA9IHJlcXVpcmUoJy4vbm9kZS1zdGFjay10cmFjZS5qcycpO1xuXG5jb25zdCBTVEFDS1RSQUNFX0ZSQU1FX0xJTUlUID0gNTA7XG4vLyBVc2VkIHRvIHNhbml0aXplIHdlYnBhY2sgKGVycm9yOiAqKSB3cmFwcGVkIHN0YWNrIGVycm9yc1xuY29uc3QgV0VCUEFDS19FUlJPUl9SRUdFWFAgPSAvXFwoZXJyb3I6ICguKilcXCkvO1xuY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBwYXJzZXIgd2l0aCB0aGUgc3VwcGxpZWQgbGluZSBwYXJzZXJzXG4gKlxuICogU3RhY2tGcmFtZXMgYXJlIHJldHVybmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyIGZvciBTZW50cnkgRXhjZXB0aW9uXG4gKiBmcmFtZXMgYW5kIHdpdGggU2VudHJ5IFNESyBpbnRlcm5hbCBmcmFtZXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbVxuICpcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3RhY2tQYXJzZXIoLi4ucGFyc2Vycykge1xuICBjb25zdCBzb3J0ZWRQYXJzZXJzID0gcGFyc2Vycy5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKHAgPT4gcFsxXSk7XG5cbiAgcmV0dXJuIChzdGFjaywgc2tpcEZpcnN0ID0gMCkgPT4ge1xuICAgIGNvbnN0IGZyYW1lcyA9IFtdO1xuICAgIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuXG4gICAgZm9yIChsZXQgaSA9IHNraXBGaXJzdDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgICAvLyBJZ25vcmUgbGluZXMgb3ZlciAxa2IgYXMgdGhleSBhcmUgdW5saWtlbHkgdG8gYmUgc3RhY2sgZnJhbWVzLlxuICAgICAgLy8gTWFueSBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyB1c2UgYmFja3RyYWNraW5nIHdoaWNoIHJlc3VsdHMgaW4gcnVuIHRpbWUgdGhhdCBpbmNyZWFzZXMgZXhwb25lbnRpYWxseSB3aXRoXG4gICAgICAvLyBpbnB1dCBzaXplLiBIdWdlIHN0cmluZ3MgY2FuIHJlc3VsdCBpbiBoYW5ncy9EZW5pYWwgb2YgU2VydmljZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzIyODZcbiAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzU0NTlcbiAgICAgIC8vIFJlbW92ZSB3ZWJwYWNrIChlcnJvcjogKikgd3JhcHBlcnNcbiAgICAgIGNvbnN0IGNsZWFuZWRMaW5lID0gV0VCUEFDS19FUlJPUl9SRUdFWFAudGVzdChsaW5lKSA/IGxpbmUucmVwbGFjZShXRUJQQUNLX0VSUk9SX1JFR0VYUCwgJyQxJykgOiBsaW5lO1xuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy83ODEzXG4gICAgICAvLyBTa2lwIEVycm9yOiBsaW5lc1xuICAgICAgaWYgKGNsZWFuZWRMaW5lLm1hdGNoKC9cXFMqRXJyb3I6IC8pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnNlciBvZiBzb3J0ZWRQYXJzZXJzKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gcGFyc2VyKGNsZWFuZWRMaW5lKTtcblxuICAgICAgICBpZiAoZnJhbWUpIHtcbiAgICAgICAgICBmcmFtZXMucHVzaChmcmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lcy5sZW5ndGggPj0gU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKGZyYW1lcyk7XG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBhIHN0YWNrIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmcm9tIE9wdGlvbnMuc3RhY2tQYXJzZXJcbiAqIEBzZWUgT3B0aW9uc1xuICpcbiAqIElmIG9wdGlvbnMgY29udGFpbnMgYW4gYXJyYXkgb2YgbGluZSBwYXJzZXJzLCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhIHBhcnNlclxuICovXG5mdW5jdGlvbiBzdGFja1BhcnNlckZyb21TdGFja1BhcnNlck9wdGlvbnMoc3RhY2tQYXJzZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhY2tQYXJzZXIpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVN0YWNrUGFyc2VyKC4uLnN0YWNrUGFyc2VyKTtcbiAgfVxuICByZXR1cm4gc3RhY2tQYXJzZXI7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBTZW50cnkgZnJhbWVzIGZyb20gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBzdGFjayBpZiBwcmVzZW50IGFuZCBlbmZvcmNlcyBhIGxpbWl0IG9mIG1heCBudW1iZXIgb2YgZnJhbWVzLlxuICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlXG4gKiBmdW5jdGlvbiB0aGF0IGNhdXNlZCB0aGUgY3Jhc2ggaXMgdGhlIGxhc3QgZnJhbWUgaW4gdGhlIGFycmF5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2Uoc3RhY2spIHtcbiAgaWYgKCFzdGFjay5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7XG5cbiAgLy8gSWYgc3RhY2sgc3RhcnRzIHdpdGggb25lIG9mIG91ciBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoc3RhcnRzLCBtZWFuaW5nIGl0J3MgdGhlIHRvcCBvZiB0aGUgc3RhY2sgLSBha2EgbGFzdCBjYWxsKVxuICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkge1xuICAgIGxvY2FsU3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyBSZXZlcnNpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcHJvY2VkdXJlIGFsbG93cyB1cyB0byBqdXN0IHBvcCB0aGUgdmFsdWVzIG9mZiB0aGUgc3RhY2tcbiAgbG9jYWxTdGFjay5yZXZlcnNlKCk7XG5cbiAgLy8gSWYgc3RhY2sgZW5kcyB3aXRoIG9uZSBvZiBvdXIgaW50ZXJuYWwgQVBJIGNhbGxzLCByZW1vdmUgaXQgKGVuZHMsIG1lYW5pbmcgaXQncyB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayAtIGFrYSB0b3AtbW9zdCBjYWxsKVxuICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkge1xuICAgIGxvY2FsU3RhY2sucG9wKCk7XG5cbiAgICAvLyBXaGVuIHVzaW5nIHN5bnRoZXRpYyBldmVudHMsIHdlIHdpbGwgaGF2ZSBhIDIgbGV2ZWxzIGRlZXAgc3RhY2ssIGFzIGBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKWBcbiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDpcbiAgICAvL1xuICAgIC8vICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oKVxuICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKVxuICAgIC8vXG4gICAgLy8gaW5zdGVhZCBvZiBqdXN0IHRoZSB0b3AgYFNlbnRyeWAgY2FsbCBpdHNlbGYuXG4gICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuXG4gICAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHtcbiAgICAgIGxvY2FsU3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7XG4gICAgLi4uZnJhbWUsXG4gICAgZmlsZW5hbWU6IGZyYW1lLmZpbGVuYW1lIHx8IGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5maWxlbmFtZSxcbiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLFxuICB9KSk7XG59XG5cbmNvbnN0IGRlZmF1bHRGdW5jdGlvbk5hbWUgPSAnPGFub255bW91cz4nO1xuXG4vKipcbiAqIFNhZmVseSBleHRyYWN0IGZ1bmN0aW9uIG5hbWUgZnJvbSBpdHNlbGZcbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFmbiB8fCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lO1xuICAgIH1cbiAgICByZXR1cm4gZm4ubmFtZSB8fCBkZWZhdWx0RnVuY3Rpb25OYW1lO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSnVzdCBhY2Nlc3NpbmcgY3VzdG9tIHByb3BzIGluIHNvbWUgU2VsZW5pdW0gZW52aXJvbm1lbnRzXG4gICAgLy8gY2FuIGNhdXNlIGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGV4Y2VwdGlvbiAoc2VlIHJhdmVuLWpzIzQ5NSkuXG4gICAgcmV0dXJuIGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBOb2RlLmpzIHN0YWNrIGxpbmUgcGFyc2VyXG4gKlxuICogVGhpcyBpcyBpbiBAc2VudHJ5L3V0aWxzIHNvIGl0IGNhbiBiZSB1c2VkIGZyb20gdGhlIEVsZWN0cm9uIFNESyBpbiB0aGUgYnJvd3NlciBmb3Igd2hlbiBgbm9kZUludGVncmF0aW9uID09IHRydWVgLlxuICogVGhpcyBhbGxvd3MgaXQgdG8gYmUgdXNlZCB3aXRob3V0IHJlZmVyZW5jaW5nIG9yIGltcG9ydGluZyBhbnkgbm9kZSBzcGVjaWZpYyBjb2RlIHdoaWNoIGNhdXNlcyBidW5kbGVycyB0byBjb21wbGFpblxuICovXG5mdW5jdGlvbiBub2RlU3RhY2tMaW5lUGFyc2VyKGdldE1vZHVsZSkge1xuICByZXR1cm4gWzkwLCBub2RlU3RhY2tUcmFjZS5ub2RlKGdldE1vZHVsZSldO1xufVxuXG5leHBvcnRzLmZpbGVuYW1lSXNJbkFwcCA9IG5vZGVTdGFja1RyYWNlLmZpbGVuYW1lSXNJbkFwcDtcbmV4cG9ydHMuY3JlYXRlU3RhY2tQYXJzZXIgPSBjcmVhdGVTdGFja1BhcnNlcjtcbmV4cG9ydHMuZ2V0RnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lO1xuZXhwb3J0cy5ub2RlU3RhY2tMaW5lUGFyc2VyID0gbm9kZVN0YWNrTGluZVBhcnNlcjtcbmV4cG9ydHMuc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zID0gc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zO1xuZXhwb3J0cy5zdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2UgPSBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFja3RyYWNlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJy4uL2xvZ2dlci5qcycpO1xuY29uc3Qgc3RhY2t0cmFjZSA9IHJlcXVpcmUoJy4uL3N0YWNrdHJhY2UuanMnKTtcblxuLy8gV2Uga2VlcCB0aGUgaGFuZGxlcnMgZ2xvYmFsbHlcbmNvbnN0IGhhbmRsZXJzID0ge307XG5jb25zdCBpbnN0cnVtZW50ZWQgPSB7fTtcblxuLyoqIEFkZCBhIGhhbmRsZXIgZnVuY3Rpb24uICovXG5mdW5jdGlvbiBhZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpIHtcbiAgaGFuZGxlcnNbdHlwZV0gPSBoYW5kbGVyc1t0eXBlXSB8fCBbXTtcbiAgKGhhbmRsZXJzW3R5cGVdICkucHVzaChoYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbGwgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXJzLlxuICogVGhpcyBjYW4gYmUgdXNlZCBieSB0ZXN0cyB0byBlbnN1cmUgd2UgaGF2ZSBhIGNsZWFuIHNsYXRlIG9mIGluc3RydW1lbnRhdGlvbiBoYW5kbGVycy5cbiAqL1xuZnVuY3Rpb24gcmVzZXRJbnN0cnVtZW50YXRpb25IYW5kbGVycygpIHtcbiAgT2JqZWN0LmtleXMoaGFuZGxlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBoYW5kbGVyc1trZXkgXSA9IHVuZGVmaW5lZDtcbiAgfSk7XG59XG5cbi8qKiBNYXliZSBydW4gYW4gaW5zdHJ1bWVudGF0aW9uIGZ1bmN0aW9uLCB1bmxlc3MgaXQgd2FzIGFscmVhZHkgY2FsbGVkLiAqL1xuZnVuY3Rpb24gbWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRGbikge1xuICBpZiAoIWluc3RydW1lbnRlZFt0eXBlXSkge1xuICAgIGluc3RydW1lbnRGbigpO1xuICAgIGluc3RydW1lbnRlZFt0eXBlXSA9IHRydWU7XG4gIH1cbn1cblxuLyoqIFRyaWdnZXIgaGFuZGxlcnMgZm9yIGEgZ2l2ZW4gaW5zdHJ1bWVudGF0aW9uIHR5cGUuICovXG5mdW5jdGlvbiB0cmlnZ2VySGFuZGxlcnModHlwZSwgZGF0YSkge1xuICBjb25zdCB0eXBlSGFuZGxlcnMgPSB0eXBlICYmIGhhbmRsZXJzW3R5cGVdO1xuICBpZiAoIXR5cGVIYW5kbGVycykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgaGFuZGxlciBvZiB0eXBlSGFuZGxlcnMpIHtcbiAgICB0cnkge1xuICAgICAgaGFuZGxlcihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgIGxvZ2dlci5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgYEVycm9yIHdoaWxlIHRyaWdnZXJpbmcgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXFxuVHlwZTogJHt0eXBlfVxcbk5hbWU6ICR7c3RhY2t0cmFjZS5nZXRGdW5jdGlvbk5hbWUoaGFuZGxlcil9XFxuRXJyb3I6YCxcbiAgICAgICAgICBlLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLmFkZEhhbmRsZXIgPSBhZGRIYW5kbGVyO1xuZXhwb3J0cy5tYXliZUluc3RydW1lbnQgPSBtYXliZUluc3RydW1lbnQ7XG5leHBvcnRzLnJlc2V0SW5zdHJ1bWVudGF0aW9uSGFuZGxlcnMgPSByZXNldEluc3RydW1lbnRhdGlvbkhhbmRsZXJzO1xuZXhwb3J0cy50cmlnZ2VySGFuZGxlcnMgPSB0cmlnZ2VySGFuZGxlcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1faGFuZGxlcnMuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJy4uL2xvZ2dlci5qcycpO1xuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi4vb2JqZWN0LmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuLi93b3JsZHdpZGUuanMnKTtcbmNvbnN0IF9oYW5kbGVycyA9IHJlcXVpcmUoJy4vX2hhbmRsZXJzLmpzJyk7XG5cbi8qKlxuICogQWRkIGFuIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyIGZvciB3aGVuIGEgY29uc29sZS54eHggbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHR5cGUgPSAnY29uc29sZSc7XG4gIF9oYW5kbGVycy5hZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBfaGFuZGxlcnMubWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRDb25zb2xlKTtcbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudENvbnNvbGUoKSB7XG4gIGlmICghKCdjb25zb2xlJyBpbiB3b3JsZHdpZGUuR0xPQkFMX09CSikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuQ09OU09MRV9MRVZFTFMuZm9yRWFjaChmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICBpZiAoIShsZXZlbCBpbiB3b3JsZHdpZGUuR0xPQkFMX09CSi5jb25zb2xlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9iamVjdC5maWxsKHdvcmxkd2lkZS5HTE9CQUxfT0JKLmNvbnNvbGUsIGxldmVsLCBmdW5jdGlvbiAob3JpZ2luYWxDb25zb2xlTWV0aG9kKSB7XG4gICAgICBsb2dnZXIub3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gPSBvcmlnaW5hbENvbnNvbGVNZXRob2Q7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHsgYXJncywgbGV2ZWwgfTtcbiAgICAgICAgX2hhbmRsZXJzLnRyaWdnZXJIYW5kbGVycygnY29uc29sZScsIGhhbmRsZXJEYXRhKTtcblxuICAgICAgICBjb25zdCBsb2cgPSBsb2dnZXIub3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF07XG4gICAgICAgIGxvZyAmJiBsb2cuYXBwbHkod29ybGR3aWRlLkdMT0JBTF9PQkouY29uc29sZSwgYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0cy5hZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi9vYmplY3QuanMnKTtcbmNvbnN0IHN0cmluZyA9IHJlcXVpcmUoJy4vc3RyaW5nLmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuL3dvcmxkd2lkZS5qcycpO1xuXG4vKipcbiAqIFVVSUQ0IGdlbmVyYXRvclxuICpcbiAqIEByZXR1cm5zIHN0cmluZyBHZW5lcmF0ZWQgVVVJRDQuXG4gKi9cbmZ1bmN0aW9uIHV1aWQ0KCkge1xuICBjb25zdCBnYmwgPSB3b3JsZHdpZGUuR0xPQkFMX09CSiA7XG4gIGNvbnN0IGNyeXB0byA9IGdibC5jcnlwdG8gfHwgZ2JsLm1zQ3J5cHRvO1xuXG4gIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2O1xuICB0cnkge1xuICAgIGlmIChjcnlwdG8gJiYgY3J5cHRvLnJhbmRvbVVVSUQpIHtcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpO1xuICAgIH1cbiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7XG4gICAgICAgIC8vIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgbWlnaHQgcmV0dXJuIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHRoZSB0eXBlZCBhcnJheVxuICAgICAgICAvLyBpbiBvbGQgQ2hyb21pdW0gdmVyc2lvbnMgKGUuZy4gMjMuMC4xMjM1LjAgKDE1MTQyMikpXG4gICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuXG4gICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NyeXB0by9nZXRSYW5kb21WYWx1ZXMjdHlwZWRhcnJheVxuICAgICAgICBjb25zdCB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7XG4gICAgICAgIHJldHVybiB0eXBlZEFycmF5WzBdO1xuICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBzb21lIHJ1bnRpbWVzIGNhbiBjcmFzaCBpbnZva2luZyBjcnlwdG9cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1XG4gIH1cblxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzXG4gIC8vIENvbmNhdGVuYXRpbmcgdGhlIGZvbGxvd2luZyBudW1iZXJzIGFzIHN0cmluZ3MgcmVzdWx0cyBpbiAnMTAwMDAwMDAxMDAwNDAwMDgwMDAxMDAwMDAwMDAwMDAnXG4gIHJldHVybiAoKFsxZTddICkgKyAxZTMgKyA0ZTMgKyA4ZTMgKyAxZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAoKGMgKSBeICgoZ2V0UmFuZG9tQnl0ZSgpICYgMTUpID4+ICgoYyApIC8gNCkpKS50b1N0cmluZygxNiksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEZpcnN0RXhjZXB0aW9uKGV2ZW50KSB7XG4gIHJldHVybiBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyA/IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgZWl0aGVyIG1lc3NhZ2Ugb3IgdHlwZSt2YWx1ZSBmcm9tIGFuIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHVzZXItZmFjaW5nIGxvZ3NcbiAqIEByZXR1cm5zIGV2ZW50J3MgZGVzY3JpcHRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCkge1xuICBjb25zdCB7IG1lc3NhZ2UsIGV2ZW50X2lkOiBldmVudElkIH0gPSBldmVudDtcbiAgaWYgKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0RXhjZXB0aW9uID0gZ2V0Rmlyc3RFeGNlcHRpb24oZXZlbnQpO1xuICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICBpZiAoZmlyc3RFeGNlcHRpb24udHlwZSAmJiBmaXJzdEV4Y2VwdGlvbi52YWx1ZSkge1xuICAgICAgcmV0dXJuIGAke2ZpcnN0RXhjZXB0aW9uLnR5cGV9OiAke2ZpcnN0RXhjZXB0aW9uLnZhbHVlfWA7XG4gICAgfVxuICAgIHJldHVybiBmaXJzdEV4Y2VwdGlvbi50eXBlIHx8IGZpcnN0RXhjZXB0aW9uLnZhbHVlIHx8IGV2ZW50SWQgfHwgJzx1bmtub3duPic7XG4gIH1cbiAgcmV0dXJuIGV2ZW50SWQgfHwgJzx1bmtub3duPic7XG59XG5cbi8qKlxuICogQWRkcyBleGNlcHRpb24gdmFsdWVzLCB0eXBlIGFuZCB2YWx1ZSB0byBhbiBzeW50aGV0aWMgRXhjZXB0aW9uLlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0byBtb2RpZnkuXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgdGhlIGV4Y2VwdGlvbi5cbiAqIEBwYXJhbSB0eXBlIFR5cGUgb2YgdGhlIGV4Y2VwdGlvbi5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50LCB2YWx1ZSwgdHlwZSkge1xuICBjb25zdCBleGNlcHRpb24gPSAoZXZlbnQuZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uIHx8IHt9KTtcbiAgY29uc3QgdmFsdWVzID0gKGV4Y2VwdGlvbi52YWx1ZXMgPSBleGNlcHRpb24udmFsdWVzIHx8IFtdKTtcbiAgY29uc3QgZmlyc3RFeGNlcHRpb24gPSAodmFsdWVzWzBdID0gdmFsdWVzWzBdIHx8IHt9KTtcbiAgaWYgKCFmaXJzdEV4Y2VwdGlvbi52YWx1ZSkge1xuICAgIGZpcnN0RXhjZXB0aW9uLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gIH1cbiAgaWYgKCFmaXJzdEV4Y2VwdGlvbi50eXBlKSB7XG4gICAgZmlyc3RFeGNlcHRpb24udHlwZSA9IHR5cGUgfHwgJ0Vycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgZXhjZXB0aW9uIG1lY2hhbmlzbSBkYXRhIHRvIGEgZ2l2ZW4gZXZlbnQuIFVzZXMgZGVmYXVsdHMgaWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgbm90IHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBuZXdNZWNoYW5pc20gTWVjaGFuaXNtIGRhdGEgdG8gYWRkIHRvIHRoZSBldmVudC5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50LCBuZXdNZWNoYW5pc20pIHtcbiAgY29uc3QgZmlyc3RFeGNlcHRpb24gPSBnZXRGaXJzdEV4Y2VwdGlvbihldmVudCk7XG4gIGlmICghZmlyc3RFeGNlcHRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkZWZhdWx0TWVjaGFuaXNtID0geyB0eXBlOiAnZ2VuZXJpYycsIGhhbmRsZWQ6IHRydWUgfTtcbiAgY29uc3QgY3VycmVudE1lY2hhbmlzbSA9IGZpcnN0RXhjZXB0aW9uLm1lY2hhbmlzbTtcbiAgZmlyc3RFeGNlcHRpb24ubWVjaGFuaXNtID0geyAuLi5kZWZhdWx0TWVjaGFuaXNtLCAuLi5jdXJyZW50TWVjaGFuaXNtLCAuLi5uZXdNZWNoYW5pc20gfTtcblxuICBpZiAobmV3TWVjaGFuaXNtICYmICdkYXRhJyBpbiBuZXdNZWNoYW5pc20pIHtcbiAgICBjb25zdCBtZXJnZWREYXRhID0geyAuLi4oY3VycmVudE1lY2hhbmlzbSAmJiBjdXJyZW50TWVjaGFuaXNtLmRhdGEpLCAuLi5uZXdNZWNoYW5pc20uZGF0YSB9O1xuICAgIGZpcnN0RXhjZXB0aW9uLm1lY2hhbmlzbS5kYXRhID0gbWVyZ2VkRGF0YTtcbiAgfVxufVxuXG4vLyBodHRwczovL3NlbXZlci5vcmcvI2lzLXRoZXJlLWEtc3VnZ2VzdGVkLXJlZ3VsYXItZXhwcmVzc2lvbi1yZWdleC10by1jaGVjay1hLXNlbXZlci1zdHJpbmdcbmNvbnN0IFNFTVZFUl9SRUdFWFAgPVxuICAvXigwfFsxLTldXFxkKilcXC4oMHxbMS05XVxcZCopXFwuKDB8WzEtOV1cXGQqKSg/Oi0oKD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKD86XFwuKD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKSopKT8oPzpcXCsoWzAtOWEtekEtWi1dKyg/OlxcLlswLTlhLXpBLVotXSspKikpPyQvO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgU2VtYW50aWMgVmVyc2lvbmluZyBvYmplY3RcbiAqL1xuXG4vKipcbiAqIFBhcnNlcyBpbnB1dCBpbnRvIGEgU2VtVmVyIGludGVyZmFjZVxuICogQHBhcmFtIGlucHV0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNlbXZlciB2ZXJzaW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2VtdmVyKGlucHV0KSB7XG4gIGNvbnN0IG1hdGNoID0gaW5wdXQubWF0Y2goU0VNVkVSX1JFR0VYUCkgfHwgW107XG4gIGNvbnN0IG1ham9yID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgY29uc3QgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuICBjb25zdCBwYXRjaCA9IHBhcnNlSW50KG1hdGNoWzNdLCAxMCk7XG4gIHJldHVybiB7XG4gICAgYnVpbGRtZXRhZGF0YTogbWF0Y2hbNV0sXG4gICAgbWFqb3I6IGlzTmFOKG1ham9yKSA/IHVuZGVmaW5lZCA6IG1ham9yLFxuICAgIG1pbm9yOiBpc05hTihtaW5vcikgPyB1bmRlZmluZWQgOiBtaW5vcixcbiAgICBwYXRjaDogaXNOYU4ocGF0Y2gpID8gdW5kZWZpbmVkIDogcGF0Y2gsXG4gICAgcHJlcmVsZWFzZTogbWF0Y2hbNF0sXG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhZGRzIGNvbnRleHQgKHByZS9wb3N0L2xpbmUpIGxpbmVzIHRvIHRoZSBwcm92aWRlZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBsaW5lcyBzdHJpbmdbXSBjb250YWluaW5nIGFsbCBsaW5lc1xuICogQHBhcmFtIGZyYW1lIFN0YWNrRnJhbWUgdGhhdCB3aWxsIGJlIG11dGF0ZWRcbiAqIEBwYXJhbSBsaW5lc09mQ29udGV4dCBudW1iZXIgb2YgY29udGV4dCBsaW5lcyB3ZSB3YW50IHRvIGFkZCBwcmUvcG9zdFxuICovXG5mdW5jdGlvbiBhZGRDb250ZXh0VG9GcmFtZShsaW5lcywgZnJhbWUsIGxpbmVzT2ZDb250ZXh0ID0gNSkge1xuICAvLyBXaGVuIHRoZXJlIGlzIG5vIGxpbmUgbnVtYmVyIGluIHRoZSBmcmFtZSwgYXR0YWNoaW5nIGNvbnRleHQgaXMgbm9uc2Vuc2ljYWwgYW5kIHdpbGwgZXZlbiBicmVhayBncm91cGluZ1xuICBpZiAoZnJhbWUubGluZW5vID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXhMaW5lcyA9IGxpbmVzLmxlbmd0aDtcbiAgY29uc3Qgc291cmNlTGluZSA9IE1hdGgubWF4KE1hdGgubWluKG1heExpbmVzIC0gMSwgZnJhbWUubGluZW5vIC0gMSksIDApO1xuXG4gIGZyYW1lLnByZV9jb250ZXh0ID0gbGluZXNcbiAgICAuc2xpY2UoTWF0aC5tYXgoMCwgc291cmNlTGluZSAtIGxpbmVzT2ZDb250ZXh0KSwgc291cmNlTGluZSlcbiAgICAubWFwKChsaW5lKSA9PiBzdHJpbmcuc25pcExpbmUobGluZSwgMCkpO1xuXG4gIGZyYW1lLmNvbnRleHRfbGluZSA9IHN0cmluZy5zbmlwTGluZShsaW5lc1tNYXRoLm1pbihtYXhMaW5lcyAtIDEsIHNvdXJjZUxpbmUpXSwgZnJhbWUuY29sbm8gfHwgMCk7XG5cbiAgZnJhbWUucG9zdF9jb250ZXh0ID0gbGluZXNcbiAgICAuc2xpY2UoTWF0aC5taW4oc291cmNlTGluZSArIDEsIG1heExpbmVzKSwgc291cmNlTGluZSArIDEgKyBsaW5lc09mQ29udGV4dClcbiAgICAubWFwKChsaW5lKSA9PiBzdHJpbmcuc25pcExpbmUobGluZSwgMCkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB3ZSd2ZSBhbHJlYWR5IGNhcHR1cmVkIHRoZSBnaXZlbiBleGNlcHRpb24gKG5vdGU6IG5vdCBhbiBpZGVudGljYWwgZXhjZXB0aW9uIC0gdGhlIHZlcnkgb2JqZWN0XG4gKiBpbiBxdWVzdGlvbiksIGFuZCBtYXJrcyBpdCBjYXB0dXJlZCBpZiBub3QuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIGZvciBhbiBlcnJvciB0byBnZXQgY2FwdHVyZWQgYnkgbW9yZSB0aGFuIG9uZSBtZWNoYW5pc20uIEFmdGVyIHdlIGludGVyY2VwdCBhbmRcbiAqIHJlY29yZCBhbiBlcnJvciwgd2UgcmV0aHJvdyBpdCAoYXNzdW1pbmcgd2UndmUgaW50ZXJjZXB0ZWQgaXQgYmVmb3JlIGl0J3MgcmVhY2hlZCB0aGUgdG9wLWxldmVsIGdsb2JhbCBoYW5kbGVycyksIHNvXG4gKiB0aGF0IHdlIGRvbid0IGludGVyZmVyZSB3aXRoIHdoYXRldmVyIGVmZmVjdHMgdGhlIGVycm9yIG1pZ2h0IGhhdmUgaGFkIHdlcmUgdGhlIFNESyBub3QgdGhlcmUuIEF0IHRoYXQgcG9pbnQsIGJlY2F1c2VcbiAqIHRoZSBlcnJvciBoYXMgYmVlbiByZXRocm93biwgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gYnViYmxlIHVwIHRvIHNvbWUgb3RoZXIgY29kZSB3ZSd2ZSBpbnN0cnVtZW50ZWQuIElmIGl0J3Mgbm90XG4gKiBjYXVnaHQgYWZ0ZXIgdGhhdCwgaXQgd2lsbCBidWJibGUgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGdsb2JhbCBoYW5kbGVycyAod2hpY2ggb2YgY291cnNlIHdlIGFsc28gaW5zdHJ1bWVudCkuIFRoaXNcbiAqIGZ1bmN0aW9uIGhlbHBzIHVzIGVuc3VyZSB0aGF0IGV2ZW4gaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lIGVycm9yIG1vcmUgdGhhbiBvbmNlLCB3ZSBvbmx5IHJlY29yZCBpdCB0aGUgZmlyc3QgdGltZSB3ZVxuICogc2VlIGl0LlxuICpcbiAqIE5vdGU6IEl0IHdpbGwgaWdub3JlIHByaW1pdGl2ZXMgKGFsd2F5cyByZXR1cm4gYGZhbHNlYCBhbmQgbm90IG1hcmsgdGhlbSBhcyBzZWVuKSwgYXMgcHJvcGVydGllcyBjYW4ndCBiZSBzZXQgb25cbiAqIHRoZW0uIHtAbGluazogT2JqZWN0Lm9iamVjdGlmeX0gY2FuIGJlIHVzZWQgb24gZXhjZXB0aW9ucyB0byBjb252ZXJ0IGFueSB0aGF0IGFyZSBwcmltaXRpdmVzIGludG8gdGhlaXIgZXF1aXZhbGVudFxuICogb2JqZWN0IHdyYXBwZXIgZm9ybXMgc28gdGhhdCB0aGlzIGNoZWNrIHdpbGwgYWx3YXlzIHdvcmsuIEhvd2V2ZXIsIGJlY2F1c2Ugd2UgbmVlZCB0byBmbGFnIHRoZSBleGFjdCBvYmplY3Qgd2hpY2hcbiAqIHdpbGwgZ2V0IHJldGhyb3duLCBhbmQgYmVjYXVzZSB0aGF0IHJldGhyb3dpbmcgaGFwcGVucyBvdXRzaWRlIG9mIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLCB0aGUgb2JqZWN0aWZpY2F0aW9uXG4gKiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBleGNlcHRpb24gY2FwdHVyZWQuXG4gKlxuICogQHBhcmFtIEEgdGhyb3duIGV4Y2VwdGlvbiB0byBjaGVjayBvciBmbGFnIGFzIGhhdmluZyBiZWVuIHNlZW5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2FwdHVyZWQsIGBmYWxzZWAgaWYgbm90ICh3aXRoIHRoZSBzaWRlIGVmZmVjdCBvZiBtYXJraW5nIGl0IHNlZW4pXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0KGV4Y2VwdGlvbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gIGlmIChleGNlcHRpb24gJiYgKGV4Y2VwdGlvbiApLl9fc2VudHJ5X2NhcHR1cmVkX18pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc2V0IGl0IHRoaXMgd2F5IHJhdGhlciB0aGFuIGJ5IGFzc2lnbm1lbnQgc28gdGhhdCBpdCdzIG5vdCBlbm51bWVyYWJsZSBhbmQgdGhlcmVmb3JlIGlzbid0IHJlY29yZGVkIGJ5IHRoZVxuICAgIC8vIGBFeHRyYUVycm9yRGF0YWAgaW50ZWdyYXRpb25cbiAgICBvYmplY3QuYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KGV4Y2VwdGlvbiAsICdfX3NlbnRyeV9jYXB0dXJlZF9fJywgdHJ1ZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGBleGNlcHRpb25gIGlzIGEgcHJpbWl0aXZlLCBzbyB3ZSBjYW4ndCBtYXJrIGl0IHNlZW5cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gaW5wdXQgaXMgYWxyZWFkeSBhbiBhcnJheSwgYW5kIGlmIGl0IGlzbid0LCB3cmFwcyBpdCBpbiBvbmUuXG4gKlxuICogQHBhcmFtIG1heWJlQXJyYXkgSW5wdXQgdG8gdHVybiBpbnRvIGFuIGFycmF5LCBpZiBuZWNlc3NhcnlcbiAqIEByZXR1cm5zIFRoZSBpbnB1dCwgaWYgYWxyZWFkeSBhbiBhcnJheSwgb3IgYW4gYXJyYXkgd2l0aCB0aGUgaW5wdXQgYXMgdGhlIG9ubHkgZWxlbWVudCwgaWYgbm90XG4gKi9cbmZ1bmN0aW9uIGFycmF5aWZ5KG1heWJlQXJyYXkpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkobWF5YmVBcnJheSkgPyBtYXliZUFycmF5IDogW21heWJlQXJyYXldO1xufVxuXG5leHBvcnRzLmFkZENvbnRleHRUb0ZyYW1lID0gYWRkQ29udGV4dFRvRnJhbWU7XG5leHBvcnRzLmFkZEV4Y2VwdGlvbk1lY2hhbmlzbSA9IGFkZEV4Y2VwdGlvbk1lY2hhbmlzbTtcbmV4cG9ydHMuYWRkRXhjZXB0aW9uVHlwZVZhbHVlID0gYWRkRXhjZXB0aW9uVHlwZVZhbHVlO1xuZXhwb3J0cy5hcnJheWlmeSA9IGFycmF5aWZ5O1xuZXhwb3J0cy5jaGVja09yU2V0QWxyZWFkeUNhdWdodCA9IGNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0O1xuZXhwb3J0cy5nZXRFdmVudERlc2NyaXB0aW9uID0gZ2V0RXZlbnREZXNjcmlwdGlvbjtcbmV4cG9ydHMucGFyc2VTZW12ZXIgPSBwYXJzZVNlbXZlcjtcbmV4cG9ydHMudXVpZDQgPSB1dWlkNDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pc2MuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IG1pc2MgPSByZXF1aXJlKCcuLi9taXNjLmpzJyk7XG5jb25zdCBvYmplY3QgPSByZXF1aXJlKCcuLi9vYmplY3QuanMnKTtcbmNvbnN0IHdvcmxkd2lkZSA9IHJlcXVpcmUoJy4uL3dvcmxkd2lkZS5qcycpO1xuY29uc3QgX2hhbmRsZXJzID0gcmVxdWlyZSgnLi9faGFuZGxlcnMuanMnKTtcblxuY29uc3QgV0lORE9XID0gd29ybGR3aWRlLkdMT0JBTF9PQkogO1xuY29uc3QgREVCT1VOQ0VfRFVSQVRJT04gPSAxMDAwO1xuXG5sZXQgZGVib3VuY2VUaW1lcklEO1xubGV0IGxhc3RDYXB0dXJlZEV2ZW50VHlwZTtcbmxldCBsYXN0Q2FwdHVyZWRFdmVudFRhcmdldElkO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhIGNsaWNrIG9yIGEga2V5cHJlc3MgaGFwcGVucy5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRDbGlja0tleXByZXNzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHR5cGUgPSAnZG9tJztcbiAgX2hhbmRsZXJzLmFkZEhhbmRsZXIodHlwZSwgaGFuZGxlcik7XG4gIF9oYW5kbGVycy5tYXliZUluc3RydW1lbnQodHlwZSwgaW5zdHJ1bWVudERPTSk7XG59XG5cbi8qKiBFeHBvcnRlZCBmb3IgdGVzdHMgb25seS4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRET00oKSB7XG4gIGlmICghV0lORE9XLmRvY3VtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTWFrZSBpdCBzbyB0aGF0IGFueSBjbGljayBvciBrZXlwcmVzcyB0aGF0IGlzIHVuaGFuZGxlZCAvIGJ1YmJsZWQgdXAgYWxsIHRoZSB3YXkgdG8gdGhlIGRvY3VtZW50IHRyaWdnZXJzIG91ciBkb21cbiAgLy8gaGFuZGxlcnMuIChOb3JtYWxseSB3ZSBoYXZlIG9ubHkgb25lLCB3aGljaCBjYXB0dXJlcyBhIGJyZWFkY3J1bWIgZm9yIGVhY2ggY2xpY2sgb3Iga2V5cHJlc3MuKSBEbyB0aGlzIGJlZm9yZVxuICAvLyB3ZSBpbnN0cnVtZW50IGBhZGRFdmVudExpc3RlbmVyYCBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCBhdHRhY2hpbmcgdGhpcyBoYW5kbGVyIHR3aWNlLlxuICBjb25zdCB0cmlnZ2VyRE9NSGFuZGxlciA9IF9oYW5kbGVycy50cmlnZ2VySGFuZGxlcnMuYmluZChudWxsLCAnZG9tJyk7XG4gIGNvbnN0IGdsb2JhbERPTUV2ZW50SGFuZGxlciA9IG1ha2VET01FdmVudEhhbmRsZXIodHJpZ2dlckRPTUhhbmRsZXIsIHRydWUpO1xuICBXSU5ET1cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBnbG9iYWxET01FdmVudEhhbmRsZXIsIGZhbHNlKTtcbiAgV0lORE9XLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgZ2xvYmFsRE9NRXZlbnRIYW5kbGVyLCBmYWxzZSk7XG5cbiAgLy8gQWZ0ZXIgaG9va2luZyBpbnRvIGNsaWNrIGFuZCBrZXlwcmVzcyBldmVudHMgYnViYmxlZCB1cCB0byBgZG9jdW1lbnRgLCB3ZSBhbHNvIGhvb2sgaW50byB1c2VyLWhhbmRsZWRcbiAgLy8gY2xpY2tzICYga2V5cHJlc3NlcywgYnkgYWRkaW5nIGFuIGV2ZW50IGxpc3RlbmVyIG9mIG91ciBvd24gdG8gYW55IGVsZW1lbnQgdG8gd2hpY2ggdGhleSBhZGQgYSBsaXN0ZW5lci4gVGhhdFxuICAvLyB3YXksIHdoZW5ldmVyIG9uZSBvZiB0aGVpciBoYW5kbGVycyBpcyB0cmlnZ2VyZWQsIG91cnMgd2lsbCBiZSwgdG9vLiAoVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGVpciBoYW5kbGVyXG4gIC8vIGNvdWxkIHBvdGVudGlhbGx5IHByZXZlbnQgdGhlIGV2ZW50IGZyb20gYnViYmxpbmcgdXAgdG8gb3VyIGdsb2JhbCBsaXN0ZW5lcnMuIFRoaXMgd2F5LCBvdXIgaGFuZGxlciBhcmUgc3RpbGxcbiAgLy8gZ3VhcmFudGVlZCB0byBmaXJlIGF0IGxlYXN0IG9uY2UuKVxuICBbJ0V2ZW50VGFyZ2V0JywgJ05vZGUnXS5mb3JFYWNoKCh0YXJnZXQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgY29uc3QgcHJvdG8gPSAoV0lORE9XIClbdGFyZ2V0XSAmJiAoV0lORE9XIClbdGFyZ2V0XS5wcm90b3R5cGU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzcywgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKCFwcm90byB8fCAhcHJvdG8uaGFzT3duUHJvcGVydHkgfHwgIXByb3RvLmhhc093blByb3BlcnR5KCdhZGRFdmVudExpc3RlbmVyJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvYmplY3QuZmlsbChwcm90bywgJ2FkZEV2ZW50TGlzdGVuZXInLCBmdW5jdGlvbiAob3JpZ2luYWxBZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKFxuXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGxpc3RlbmVyLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2tleXByZXNzJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMgO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSAoZWwuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18gPSBlbC5fX3NlbnRyeV9pbnN0cnVtZW50YXRpb25faGFuZGxlcnNfXyB8fCB7fSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyRm9yVHlwZSA9IChoYW5kbGVyc1t0eXBlXSA9IGhhbmRsZXJzW3R5cGVdIHx8IHsgcmVmQ291bnQ6IDAgfSk7XG5cbiAgICAgICAgICAgIGlmICghaGFuZGxlckZvclR5cGUuaGFuZGxlcikge1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gbWFrZURPTUV2ZW50SGFuZGxlcih0cmlnZ2VyRE9NSGFuZGxlcik7XG4gICAgICAgICAgICAgIGhhbmRsZXJGb3JUeXBlLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICBvcmlnaW5hbEFkZEV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCB0eXBlLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGFuZGxlckZvclR5cGUucmVmQ291bnQrKztcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBBY2Nlc3NpbmcgZG9tIHByb3BlcnRpZXMgaXMgYWx3YXlzIGZyYWdpbGUuXG4gICAgICAgICAgICAvLyBBbHNvIGFsbG93cyB1cyB0byBza2lwIGBhZGRFdmVudExpc3RlbnJzYCBjYWxscyB3aXRoIG5vIHByb3BlciBgdGhpc2AgY29udGV4dC5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JpZ2luYWxBZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIG9iamVjdC5maWxsKFxuICAgICAgcHJvdG8sXG4gICAgICAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsXG4gICAgICBmdW5jdGlvbiAob3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoXG5cbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2tleXByZXNzJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzIDtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBlbC5fX3NlbnRyeV9pbnN0cnVtZW50YXRpb25faGFuZGxlcnNfXyB8fCB7fTtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlckZvclR5cGUgPSBoYW5kbGVyc1t0eXBlXTtcblxuICAgICAgICAgICAgICBpZiAoaGFuZGxlckZvclR5cGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5yZWZDb3VudC0tO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBsb25nZXIgYW55IGN1c3RvbSBoYW5kbGVycyBvZiB0aGUgY3VycmVudCB0eXBlIG9uIHRoaXMgZWxlbWVudCwgd2UgY2FuIHJlbW92ZSBvdXJzLCB0b28uXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGb3JUeXBlLnJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGhhbmRsZXJGb3JUeXBlLmhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgaGFuZGxlckZvclR5cGUuaGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1t0eXBlXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSBjdXN0b20gaGFuZGxlcnMgb2YgYW55IHR5cGUgb24gdGhpcyBlbGVtZW50LCBjbGVhbnVwIGV2ZXJ5dGhpbmcuXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGhhbmRsZXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbC5fX3NlbnRyeV9pbnN0cnVtZW50YXRpb25faGFuZGxlcnNfXztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgLy8gQWNjZXNzaW5nIGRvbSBwcm9wZXJ0aWVzIGlzIGFsd2F5cyBmcmFnaWxlLlxuICAgICAgICAgICAgICAvLyBBbHNvIGFsbG93cyB1cyB0byBza2lwIGBhZGRFdmVudExpc3RlbnJzYCBjYWxscyB3aXRoIG5vIHByb3BlciBgdGhpc2AgY29udGV4dC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBldmVudCBpcyBzaW1pbGFyIHRvIHRoZSBsYXN0IGNhcHR1cmVkIG9uZS4gRm9yIGV4YW1wbGUsIHR3byBjbGljayBldmVudHMgb24gdGhlIHNhbWUgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBpc1NpbWlsYXJUb0xhc3RDYXB0dXJlZEV2ZW50KGV2ZW50KSB7XG4gIC8vIElmIGJvdGggZXZlbnRzIGhhdmUgZGlmZmVyZW50IHR5cGUsIHRoZW4gdXNlciBkZWZpbml0ZWx5IHBlcmZvcm1lZCB0d28gc2VwYXJhdGUgYWN0aW9ucy4gZS5nLiBjbGljayArIGtleXByZXNzLlxuICBpZiAoZXZlbnQudHlwZSAhPT0gbGFzdENhcHR1cmVkRXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBJZiBib3RoIGV2ZW50cyBoYXZlIHRoZSBzYW1lIHR5cGUsIGl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCBhY3Rpb25zIHdlcmUgcGVyZm9ybWVkIG9uIGRpZmZlcmVudCB0YXJnZXRzLlxuICAgIC8vIGUuZy4gMiBjbGlja3Mgb24gZGlmZmVyZW50IGJ1dHRvbnMuXG4gICAgaWYgKCFldmVudC50YXJnZXQgfHwgKGV2ZW50LnRhcmdldCApLl9zZW50cnlJZCAhPT0gbGFzdENhcHR1cmVkRXZlbnRUYXJnZXRJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGp1c3QgYWNjZXNzaW5nIGB0YXJnZXRgIHByb3BlcnR5IGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSByYXJlIGNpcmN1bXN0YW5jZXNcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzgzOFxuICB9XG5cbiAgLy8gSWYgYm90aCBldmVudHMgaGF2ZSB0aGUgc2FtZSB0eXBlIF9hbmRfIHNhbWUgYHRhcmdldGAgKGFuIGVsZW1lbnQgd2hpY2ggdHJpZ2dlcmVkIGFuIGV2ZW50LCBfbm90IG5lY2Vzc2FyaWx5X1xuICAvLyB0byB3aGljaCBhbiBldmVudCBsaXN0ZW5lciB3YXMgYXR0YWNoZWQpLCB3ZSB0cmVhdCB0aGVtIGFzIHRoZSBzYW1lIGFjdGlvbiwgYXMgd2Ugd2FudCB0byBjYXB0dXJlXG4gIC8vIG9ubHkgb25lIGJyZWFkY3J1bWIuIGUuZy4gbXVsdGlwbGUgY2xpY2tzIG9uIHRoZSBzYW1lIGJ1dHRvbiwgb3IgdHlwaW5nIGluc2lkZSBhIHVzZXIgaW5wdXQgYm94LlxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciBhbiBldmVudCBzaG91bGQgYmUgY2FwdHVyZWQuXG4gKiBAcGFyYW0gZXZlbnQgZXZlbnQgdG8gYmUgY2FwdHVyZWRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2tpcERPTUV2ZW50KGV2ZW50VHlwZSwgdGFyZ2V0KSB7XG4gIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZmlsdGVyaW5nIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBub3cuXG4gIGlmIChldmVudFR5cGUgIT09ICdrZXlwcmVzcycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LnRhZ05hbWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIE9ubHkgY29uc2lkZXIga2V5cHJlc3MgZXZlbnRzIG9uIGFjdHVhbCBpbnB1dCBlbGVtZW50cy4gVGhpcyB3aWxsIGRpc3JlZ2FyZCBrZXlwcmVzc2VzIHRhcmdldGluZyBib2R5XG4gIC8vIGUuZy50YWJiaW5nIHRocm91Z2ggZWxlbWVudHMsIGhvdGtleXMsIGV0Yy5cbiAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFdyYXBzIGFkZEV2ZW50TGlzdGVuZXIgdG8gY2FwdHVyZSBVSSBicmVhZGNydW1ic1xuICovXG5mdW5jdGlvbiBtYWtlRE9NRXZlbnRIYW5kbGVyKFxuICBoYW5kbGVyLFxuICBnbG9iYWxMaXN0ZW5lciA9IGZhbHNlLFxuKSB7XG4gIHJldHVybiAoZXZlbnQpID0+IHtcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoaXMgaGFuZGxlciBtaWdodCB0cmlnZ2VyIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgIC8vIGV2ZW50IChlLmcuIGV2ZW50IHByb3BhZ2F0aW9uIHRocm91Z2ggbm9kZSBhbmNlc3RvcnMpLlxuICAgIC8vIElnbm9yZSBpZiB3ZSd2ZSBhbHJlYWR5IGNhcHR1cmVkIHRoYXQgZXZlbnQuXG4gICAgaWYgKCFldmVudCB8fCBldmVudFsnX3NlbnRyeUNhcHR1cmVkJ10pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG5cbiAgICAvLyBXZSBhbHdheXMgd2FudCB0byBza2lwIF9zb21lXyBldmVudHMuXG4gICAgaWYgKHNob3VsZFNraXBET01FdmVudChldmVudC50eXBlLCB0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTWFyayBldmVudCBhcyBcInNlZW5cIlxuICAgIG9iamVjdC5hZGROb25FbnVtZXJhYmxlUHJvcGVydHkoZXZlbnQsICdfc2VudHJ5Q2FwdHVyZWQnLCB0cnVlKTtcblxuICAgIGlmICh0YXJnZXQgJiYgIXRhcmdldC5fc2VudHJ5SWQpIHtcbiAgICAgIC8vIEFkZCBVVUlEIHRvIGV2ZW50IHRhcmdldCBzbyB3ZSBjYW4gaWRlbnRpZnkgaWZcbiAgICAgIG9iamVjdC5hZGROb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCAnX3NlbnRyeUlkJywgbWlzYy51dWlkNCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJyA/ICdpbnB1dCcgOiBldmVudC50eXBlO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gbGFzdCBjYXB0dXJlZCBldmVudCwgaXQgbWVhbnMgdGhhdCB3ZSBjYW4gc2FmZWx5IGNhcHR1cmUgdGhlIG5ldyBldmVudCBhbmQgc3RvcmUgaXQgZm9yIGZ1dHVyZSBjb21wYXJpc29ucy5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIGxhc3QgY2FwdHVyZWQgZXZlbnQsIHNlZSBpZiB0aGUgbmV3IGV2ZW50IGlzIGRpZmZlcmVudCBlbm91Z2ggdG8gdHJlYXQgaXQgYXMgYSB1bmlxdWUgb25lLlxuICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgZW1pdCB0aGUgcHJldmlvdXMgZXZlbnQgYW5kIHN0b3JlIGxvY2FsbHkgdGhlIG5ld2x5LWNhcHR1cmVkIERPTSBldmVudC5cbiAgICBpZiAoIWlzU2ltaWxhclRvTGFzdENhcHR1cmVkRXZlbnQoZXZlbnQpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHsgZXZlbnQsIG5hbWUsIGdsb2JhbDogZ2xvYmFsTGlzdGVuZXIgfTtcbiAgICAgIGhhbmRsZXIoaGFuZGxlckRhdGEpO1xuICAgICAgbGFzdENhcHR1cmVkRXZlbnRUeXBlID0gZXZlbnQudHlwZTtcbiAgICAgIGxhc3RDYXB0dXJlZEV2ZW50VGFyZ2V0SWQgPSB0YXJnZXQgPyB0YXJnZXQuX3NlbnRyeUlkIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGEgbmV3IGRlYm91bmNlIHRpbWVyIHRoYXQgd2lsbCBwcmV2ZW50IHVzIGZyb20gY2FwdHVyaW5nIG11bHRpcGxlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBncm91cGVkIHRvZ2V0aGVyLlxuICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVySUQpO1xuICAgIGRlYm91bmNlVGltZXJJRCA9IFdJTkRPVy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RDYXB0dXJlZEV2ZW50VGFyZ2V0SWQgPSB1bmRlZmluZWQ7XG4gICAgICBsYXN0Q2FwdHVyZWRFdmVudFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgfSwgREVCT1VOQ0VfRFVSQVRJT04pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICB0cnkge1xuICAgIHJldHVybiBldmVudC50YXJnZXQgO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8ganVzdCBhY2Nlc3NpbmcgYHRhcmdldGAgcHJvcGVydHkgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIHJhcmUgY2lyY3Vtc3RhbmNlc1xuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvODM4XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0cy5hZGRDbGlja0tleXByZXNzSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZENsaWNrS2V5cHJlc3NJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5pbnN0cnVtZW50RE9NID0gaW5zdHJ1bWVudERPTTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRvbS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJy4vbG9nZ2VyLmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuL3dvcmxkd2lkZS5qcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IFdJTkRPVyA9IHdvcmxkd2lkZS5nZXRHbG9iYWxPYmplY3QoKTtcblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRXJyb3JFdmVudCBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNFcnJvckV2ZW50fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5mdW5jdGlvbiBzdXBwb3J0c0Vycm9yRXZlbnQoKSB7XG4gIHRyeSB7XG4gICAgbmV3IEVycm9yRXZlbnQoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIERPTUVycm9yIG9iamVjdHNcbiAqIHtAbGluayBzdXBwb3J0c0RPTUVycm9yfS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5mdW5jdGlvbiBzdXBwb3J0c0RPTUVycm9yKCkge1xuICB0cnkge1xuICAgIC8vIENocm9tZTogVk04OToxIFVuY2F1Z2h0IFR5cGVFcnJvcjogRmFpbGVkIHRvIGNvbnN0cnVjdCAnRE9NRXJyb3InOlxuICAgIC8vIDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEl0IHJlYWxseSBuZWVkcyAxIGFyZ3VtZW50LCBub3QgMC5cbiAgICBuZXcgRE9NRXJyb3IoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIERPTUV4Y2VwdGlvbiBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNET01FeGNlcHRpb259LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHN1cHBvcnRzRE9NRXhjZXB0aW9uKCkge1xuICB0cnkge1xuICAgIG5ldyBET01FeGNlcHRpb24oJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEZldGNoIEFQSVxuICoge0BsaW5rIHN1cHBvcnRzRmV0Y2h9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHN1cHBvcnRzRmV0Y2goKSB7XG4gIGlmICghKCdmZXRjaCcgaW4gV0lORE9XKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3IEhlYWRlcnMoKTtcbiAgICBuZXcgUmVxdWVzdCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbScpO1xuICAgIG5ldyBSZXNwb25zZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIGlzTmF0aXZlRmV0Y2ggY2hlY2tzIGlmIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBmZXRjaCgpXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5mdW5jdGlvbiBpc05hdGl2ZUZldGNoKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMgJiYgL15mdW5jdGlvbiBmZXRjaFxcKFxcKVxccytcXHtcXHMrXFxbbmF0aXZlIGNvZGVcXF1cXHMrXFx9JC8udGVzdChmdW5jLnRvU3RyaW5nKCkpO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBGZXRjaCBBUEkgbmF0aXZlbHlcbiAqIHtAbGluayBzdXBwb3J0c05hdGl2ZUZldGNofS5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGB3aW5kb3cuZmV0Y2hgIGlzIG5hdGl2ZWx5IGltcGxlbWVudGVkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gc3VwcG9ydHNOYXRpdmVGZXRjaCgpIHtcbiAgaWYgKHR5cGVvZiBFZGdlUnVudGltZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNGZXRjaCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRmFzdCBwYXRoIHRvIGF2b2lkIERPTSBJL09cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICBpZiAoaXNOYXRpdmVGZXRjaChXSU5ET1cuZmV0Y2gpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB3aW5kb3cuZmV0Y2ggaXMgaW1wbGVtZW50ZWQsIGJ1dCBpcyBwb2x5ZmlsbGVkIG9yIGFscmVhZHkgd3JhcHBlZCAoZS5nOiBieSBhIGNocm9tZSBleHRlbnNpb24pXG4gIC8vIHNvIGNyZWF0ZSBhIFwicHVyZVwiIGlmcmFtZSB0byBzZWUgaWYgdGhhdCBoYXMgbmF0aXZlIGZldGNoXG4gIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgY29uc3QgZG9jID0gV0lORE9XLmRvY3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaWYgKGRvYyAmJiB0eXBlb2YgKGRvYy5jcmVhdGVFbGVtZW50ICkgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgaWYgKHNhbmRib3guY29udGVudFdpbmRvdyAmJiBzYW5kYm94LmNvbnRlbnRXaW5kb3cuZmV0Y2gpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZXN1bHQgPSBpc05hdGl2ZUZldGNoKHNhbmRib3guY29udGVudFdpbmRvdy5mZXRjaCk7XG4gICAgICB9XG4gICAgICBkb2MuaGVhZC5yZW1vdmVDaGlsZChzYW5kYm94KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgICAgbG9nZ2VyLmxvZ2dlci53YXJuKCdDb3VsZCBub3QgY3JlYXRlIHNhbmRib3ggaWZyYW1lIGZvciBwdXJlIGZldGNoIGNoZWNrLCBiYWlsaW5nIHRvIHdpbmRvdy5mZXRjaDogJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBSZXBvcnRpbmdPYnNlcnZlciBBUElcbiAqIHtAbGluayBzdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyfS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5mdW5jdGlvbiBzdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyKCkge1xuICByZXR1cm4gJ1JlcG9ydGluZ09ic2VydmVyJyBpbiBXSU5ET1c7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIFJlZmVycmVyIFBvbGljeSBBUElcbiAqIHtAbGluayBzdXBwb3J0c1JlZmVycmVyUG9saWN5fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5mdW5jdGlvbiBzdXBwb3J0c1JlZmVycmVyUG9saWN5KCkge1xuICAvLyBEZXNwaXRlIGFsbCBzdGFycyBpbiB0aGUgc2t5IHNheWluZyB0aGF0IEVkZ2Ugc3VwcG9ydHMgb2xkIGRyYWZ0IHN5bnRheCwgYWthICduZXZlcicsICdhbHdheXMnLCAnb3JpZ2luJyBhbmQgJ2RlZmF1bHQnXG4gIC8vIChzZWUgaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1yZWZlcnJlci1wb2xpY3kpLFxuICAvLyBpdCBkb2Vzbid0LiBBbmQgaXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoaXMgcGFyYW1ldGVyLi4uXG4gIC8vIFJFRjogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1qcy9pc3N1ZXMvMTIzM1xuXG4gIGlmICghc3VwcG9ydHNGZXRjaCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBuZXcgUmVxdWVzdCgnXycsIHtcbiAgICAgIHJlZmVycmVyUG9saWN5OiAnb3JpZ2luJyAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0cy5pc05hdGl2ZUZldGNoID0gaXNOYXRpdmVGZXRjaDtcbmV4cG9ydHMuc3VwcG9ydHNET01FcnJvciA9IHN1cHBvcnRzRE9NRXJyb3I7XG5leHBvcnRzLnN1cHBvcnRzRE9NRXhjZXB0aW9uID0gc3VwcG9ydHNET01FeGNlcHRpb247XG5leHBvcnRzLnN1cHBvcnRzRXJyb3JFdmVudCA9IHN1cHBvcnRzRXJyb3JFdmVudDtcbmV4cG9ydHMuc3VwcG9ydHNGZXRjaCA9IHN1cHBvcnRzRmV0Y2g7XG5leHBvcnRzLnN1cHBvcnRzTmF0aXZlRmV0Y2ggPSBzdXBwb3J0c05hdGl2ZUZldGNoO1xuZXhwb3J0cy5zdXBwb3J0c1JlZmVycmVyUG9saWN5ID0gc3VwcG9ydHNSZWZlcnJlclBvbGljeTtcbmV4cG9ydHMuc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlciA9IHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdXBwb3J0cy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi4vb2JqZWN0LmpzJyk7XG5jb25zdCBzdXBwb3J0cyA9IHJlcXVpcmUoJy4uL3N1cHBvcnRzLmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuLi93b3JsZHdpZGUuanMnKTtcbmNvbnN0IF9oYW5kbGVycyA9IHJlcXVpcmUoJy4vX2hhbmRsZXJzLmpzJyk7XG5cbi8qKlxuICogQWRkIGFuIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyIGZvciB3aGVuIGEgZmV0Y2ggcmVxdWVzdCBoYXBwZW5zLlxuICogVGhlIGhhbmRsZXIgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgcmVxdWVzdCBzdGFydHMgYW5kIG9uY2Ugd2hlbiBpdCBlbmRzLFxuICogd2hpY2ggY2FuIGJlIGlkZW50aWZpZWQgYnkgY2hlY2tpbmcgaWYgaXQgaGFzIGFuIGBlbmRUaW1lc3RhbXBgLlxuICpcbiAqIFVzZSBhdCB5b3VyIG93biByaXNrLCB0aGlzIG1pZ2h0IGJyZWFrIHdpdGhvdXQgY2hhbmdlbG9nIG5vdGljZSwgb25seSB1c2VkIGludGVybmFsbHkuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGFkZEZldGNoSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHR5cGUgPSAnZmV0Y2gnO1xuICBfaGFuZGxlcnMuYWRkSGFuZGxlcih0eXBlLCBoYW5kbGVyKTtcbiAgX2hhbmRsZXJzLm1heWJlSW5zdHJ1bWVudCh0eXBlLCBpbnN0cnVtZW50RmV0Y2gpO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50RmV0Y2goKSB7XG4gIGlmICghc3VwcG9ydHMuc3VwcG9ydHNOYXRpdmVGZXRjaCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb2JqZWN0LmZpbGwod29ybGR3aWRlLkdMT0JBTF9PQkosICdmZXRjaCcsIGZ1bmN0aW9uIChvcmlnaW5hbEZldGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICBjb25zdCB7IG1ldGhvZCwgdXJsIH0gPSBwYXJzZUZldGNoQXJncyhhcmdzKTtcblxuICAgICAgY29uc3QgaGFuZGxlckRhdGEgPSB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIGZldGNoRGF0YToge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgfTtcblxuICAgICAgX2hhbmRsZXJzLnRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgIC4uLmhhbmRsZXJEYXRhLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIHJldHVybiBvcmlnaW5hbEZldGNoLmFwcGx5KHdvcmxkd2lkZS5HTE9CQUxfT0JKLCBhcmdzKS50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBmaW5pc2hlZEhhbmRsZXJEYXRhID0ge1xuICAgICAgICAgICAgLi4uaGFuZGxlckRhdGEsXG4gICAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgX2hhbmRsZXJzLnRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCBmaW5pc2hlZEhhbmRsZXJEYXRhKTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yZWRIYW5kbGVyRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmhhbmRsZXJEYXRhLFxuICAgICAgICAgICAgZW5kVGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIF9oYW5kbGVycy50cmlnZ2VySGFuZGxlcnMoJ2ZldGNoJywgZXJyb3JlZEhhbmRsZXJEYXRhKTtcbiAgICAgICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIGEgU2VudHJ5IHVzZXIsIGFuZCB5b3UgYXJlIHNlZWluZyB0aGlzIHN0YWNrIGZyYW1lLFxuICAgICAgICAgIC8vICAgICAgIGl0IG1lYW5zIHRoZSBzZW50cnkuamF2YXNjcmlwdCBTREsgY2F1Z2h0IGFuIGVycm9yIGludm9raW5nIHlvdXIgYXBwbGljYXRpb24gY29kZS5cbiAgICAgICAgICAvLyAgICAgICBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHNlbnRyeS5qYXZhc2NyaXB0LlxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHtcbiAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICEhKG9iaiApW3Byb3BdO1xufVxuXG5mdW5jdGlvbiBnZXRVcmxGcm9tUmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiByZXNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICBpZiAoIXJlc291cmNlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGhhc1Byb3AocmVzb3VyY2UsICd1cmwnKSkge1xuICAgIHJldHVybiByZXNvdXJjZS51cmw7XG4gIH1cblxuICBpZiAocmVzb3VyY2UudG9TdHJpbmcpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGZldGNoIGFyZ3VtZW50cyB0byBmaW5kIHRoZSB1c2VkIEh0dHAgbWV0aG9kIGFuZCB0aGUgdXJsIG9mIHRoZSByZXF1ZXN0LlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzIG9ubHkuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmV0Y2hBcmdzKGZldGNoQXJncykge1xuICBpZiAoZmV0Y2hBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IG1ldGhvZDogJ0dFVCcsIHVybDogJycgfTtcbiAgfVxuXG4gIGlmIChmZXRjaEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgW3VybCwgb3B0aW9uc10gPSBmZXRjaEFyZ3MgO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogZ2V0VXJsRnJvbVJlc291cmNlKHVybCksXG4gICAgICBtZXRob2Q6IGhhc1Byb3Aob3B0aW9ucywgJ21ldGhvZCcpID8gU3RyaW5nKG9wdGlvbnMubWV0aG9kKS50b1VwcGVyQ2FzZSgpIDogJ0dFVCcsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGFyZyA9IGZldGNoQXJnc1swXTtcbiAgcmV0dXJuIHtcbiAgICB1cmw6IGdldFVybEZyb21SZXNvdXJjZShhcmcgKSxcbiAgICBtZXRob2Q6IGhhc1Byb3AoYXJnLCAnbWV0aG9kJykgPyBTdHJpbmcoYXJnLm1ldGhvZCkudG9VcHBlckNhc2UoKSA6ICdHRVQnLFxuICB9O1xufVxuXG5leHBvcnRzLmFkZEZldGNoSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZEZldGNoSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMucGFyc2VGZXRjaEFyZ3MgPSBwYXJzZUZldGNoQXJncztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZldGNoLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuLi93b3JsZHdpZGUuanMnKTtcbmNvbnN0IF9oYW5kbGVycyA9IHJlcXVpcmUoJy4vX2hhbmRsZXJzLmpzJyk7XG5cbmxldCBfb2xkT25FcnJvckhhbmRsZXIgPSBudWxsO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhbiBlcnJvciBpcyBjYXB0dXJlZCBieSB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG4gKlxuICogVXNlIGF0IHlvdXIgb3duIHJpc2ssIHRoaXMgbWlnaHQgYnJlYWsgd2l0aG91dCBjaGFuZ2Vsb2cgbm90aWNlLCBvbmx5IHVzZWQgaW50ZXJuYWxseS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkR2xvYmFsRXJyb3JJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXIpIHtcbiAgY29uc3QgdHlwZSA9ICdlcnJvcic7XG4gIF9oYW5kbGVycy5hZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBfaGFuZGxlcnMubWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRFcnJvcik7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRFcnJvcigpIHtcbiAgX29sZE9uRXJyb3JIYW5kbGVyID0gd29ybGR3aWRlLkdMT0JBTF9PQkoub25lcnJvcjtcblxuICB3b3JsZHdpZGUuR0xPQkFMX09CSi5vbmVycm9yID0gZnVuY3Rpb24gKFxuICAgIG1zZyxcbiAgICB1cmwsXG4gICAgbGluZSxcbiAgICBjb2x1bW4sXG4gICAgZXJyb3IsXG4gICkge1xuICAgIGNvbnN0IGhhbmRsZXJEYXRhID0ge1xuICAgICAgY29sdW1uLFxuICAgICAgZXJyb3IsXG4gICAgICBsaW5lLFxuICAgICAgbXNnLFxuICAgICAgdXJsLFxuICAgIH07XG4gICAgX2hhbmRsZXJzLnRyaWdnZXJIYW5kbGVycygnZXJyb3InLCBoYW5kbGVyRGF0YSk7XG5cbiAgICBpZiAoX29sZE9uRXJyb3JIYW5kbGVyICYmICFfb2xkT25FcnJvckhhbmRsZXIuX19TRU5UUllfTE9BREVSX18pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgIHJldHVybiBfb2xkT25FcnJvckhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgd29ybGR3aWRlLkdMT0JBTF9PQkoub25lcnJvci5fX1NFTlRSWV9JTlNUUlVNRU5URURfXyA9IHRydWU7XG59XG5cbmV4cG9ydHMuYWRkR2xvYmFsRXJyb3JJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gYWRkR2xvYmFsRXJyb3JJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsRXJyb3IuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHdvcmxkd2lkZSA9IHJlcXVpcmUoJy4uL3dvcmxkd2lkZS5qcycpO1xuY29uc3QgX2hhbmRsZXJzID0gcmVxdWlyZSgnLi9faGFuZGxlcnMuanMnKTtcblxubGV0IF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhbiB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gaXMgY2FwdHVyZWQuXG4gKlxuICogVXNlIGF0IHlvdXIgb3duIHJpc2ssIHRoaXMgbWlnaHQgYnJlYWsgd2l0aG91dCBjaGFuZ2Vsb2cgbm90aWNlLCBvbmx5IHVzZWQgaW50ZXJuYWxseS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgaGFuZGxlcixcbikge1xuICBjb25zdCB0eXBlID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG4gIF9oYW5kbGVycy5hZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBfaGFuZGxlcnMubWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRVbmhhbmRsZWRSZWplY3Rpb24pO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50VW5oYW5kbGVkUmVqZWN0aW9uKCkge1xuICBfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyID0gd29ybGR3aWRlLkdMT0JBTF9PQkoub251bmhhbmRsZWRyZWplY3Rpb247XG5cbiAgd29ybGR3aWRlLkdMT0JBTF9PQkoub251bmhhbmRsZWRyZWplY3Rpb24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGNvbnN0IGhhbmRsZXJEYXRhID0gZTtcbiAgICBfaGFuZGxlcnMudHJpZ2dlckhhbmRsZXJzKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBoYW5kbGVyRGF0YSk7XG5cbiAgICBpZiAoX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlciAmJiAhX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlci5fX1NFTlRSWV9MT0FERVJfXykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgcmV0dXJuIF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICB3b3JsZHdpZGUuR0xPQkFMX09CSi5vbnVuaGFuZGxlZHJlamVjdGlvbi5fX1NFTlRSWV9JTlNUUlVNRU5URURfXyA9IHRydWU7XG59XG5cbmV4cG9ydHMuYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZEdsb2JhbFVuaGFuZGxlZFJlamVjdGlvbkluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWxVbmhhbmRsZWRSZWplY3Rpb24uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHdvcmxkd2lkZSA9IHJlcXVpcmUoJy4uL3dvcmxkd2lkZS5qcycpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3B1bGwvMTM5NDUvZmlsZXNcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBXSU5ET1cgPSB3b3JsZHdpZGUuZ2V0R2xvYmFsT2JqZWN0KCk7XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEhpc3RvcnkgQVBJXG4gKiB7QGxpbmsgc3VwcG9ydHNIaXN0b3J5fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5mdW5jdGlvbiBzdXBwb3J0c0hpc3RvcnkoKSB7XG4gIC8vIE5PVEU6IGluIENocm9tZSBBcHAgZW52aXJvbm1lbnQsIHRvdWNoaW5nIGhpc3RvcnkucHVzaFN0YXRlLCAqZXZlbiBpbnNpZGVcbiAgLy8gICAgICAgYSB0cnkvY2F0Y2ggYmxvY2sqLCB3aWxsIGNhdXNlIENocm9tZSB0byBvdXRwdXQgYW4gZXJyb3IgdG8gY29uc29sZS5lcnJvclxuICAvLyBib3Jyb3dlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3B1bGwvMTM5NDUvZmlsZXNcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGNocm9tZVZhciA9IChXSU5ET1cgKS5jaHJvbWU7XG4gIGNvbnN0IGlzQ2hyb21lUGFja2FnZWRBcHAgPSBjaHJvbWVWYXIgJiYgY2hyb21lVmFyLmFwcCAmJiBjaHJvbWVWYXIuYXBwLnJ1bnRpbWU7XG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIGNvbnN0IGhhc0hpc3RvcnlBcGkgPSAnaGlzdG9yeScgaW4gV0lORE9XICYmICEhV0lORE9XLmhpc3RvcnkucHVzaFN0YXRlICYmICEhV0lORE9XLmhpc3RvcnkucmVwbGFjZVN0YXRlO1xuXG4gIHJldHVybiAhaXNDaHJvbWVQYWNrYWdlZEFwcCAmJiBoYXNIaXN0b3J5QXBpO1xufVxuXG5leHBvcnRzLnN1cHBvcnRzSGlzdG9yeSA9IHN1cHBvcnRzSGlzdG9yeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1cHBvcnRzSGlzdG9yeS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi4vb2JqZWN0LmpzJyk7XG5yZXF1aXJlKCcuLi9kZWJ1Zy1idWlsZC5qcycpO1xucmVxdWlyZSgnLi4vbG9nZ2VyLmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuLi93b3JsZHdpZGUuanMnKTtcbmNvbnN0IHN1cHBvcnRzSGlzdG9yeSA9IHJlcXVpcmUoJy4uL3ZlbmRvci9zdXBwb3J0c0hpc3RvcnkuanMnKTtcbmNvbnN0IF9oYW5kbGVycyA9IHJlcXVpcmUoJy4vX2hhbmRsZXJzLmpzJyk7XG5cbmNvbnN0IFdJTkRPVyA9IHdvcmxkd2lkZS5HTE9CQUxfT0JKIDtcblxubGV0IGxhc3RIcmVmO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhIGZldGNoIHJlcXVlc3QgaGFwcGVucy5cbiAqIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHJlcXVlc3Qgc3RhcnRzIGFuZCBvbmNlIHdoZW4gaXQgZW5kcyxcbiAqIHdoaWNoIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyBhbiBgZW5kVGltZXN0YW1wYC5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHR5cGUgPSAnaGlzdG9yeSc7XG4gIF9oYW5kbGVycy5hZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBfaGFuZGxlcnMubWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRIaXN0b3J5KTtcbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudEhpc3RvcnkoKSB7XG4gIGlmICghc3VwcG9ydHNIaXN0b3J5LnN1cHBvcnRzSGlzdG9yeSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb2xkT25Qb3BTdGF0ZSA9IFdJTkRPVy5vbnBvcHN0YXRlO1xuICBXSU5ET1cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uICggLi4uYXJncykge1xuICAgIGNvbnN0IHRvID0gV0lORE9XLmxvY2F0aW9uLmhyZWY7XG4gICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBVUkwgc3RhdGUsIGFzIHdlIGFsd2F5cyByZWNlaXZlIG9ubHkgdGhlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCBmcm9tID0gbGFzdEhyZWY7XG4gICAgbGFzdEhyZWYgPSB0bztcbiAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHsgZnJvbSwgdG8gfTtcbiAgICBfaGFuZGxlcnMudHJpZ2dlckhhbmRsZXJzKCdoaXN0b3J5JywgaGFuZGxlckRhdGEpO1xuICAgIGlmIChvbGRPblBvcFN0YXRlKSB7XG4gICAgICAvLyBBcHBhcmVudGx5IHRoaXMgY2FuIHRocm93IGluIEZpcmVmb3ggd2hlbiBpbmNvcnJlY3RseSBpbXBsZW1lbnRlZCBwbHVnaW4gaXMgaW5zdGFsbGVkLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMzM0NFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J1Z3NuYWcvYnVnc25hZy1qcy9pc3N1ZXMvNDY5XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb2xkT25Qb3BTdGF0ZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgICAvLyBuby1lbXB0eVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbihvcmlnaW5hbEhpc3RvcnlGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IHVybCA9IGFyZ3MubGVuZ3RoID4gMiA/IGFyZ3NbMl0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIC8vIGNvZXJjZSB0byBzdHJpbmcgKHRoaXMgaXMgd2hhdCBwdXNoU3RhdGUgZG9lcylcbiAgICAgICAgY29uc3QgZnJvbSA9IGxhc3RIcmVmO1xuICAgICAgICBjb25zdCB0byA9IFN0cmluZyh1cmwpO1xuICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IFVSTCBzdGF0ZSwgYXMgd2UgYWx3YXlzIHJlY2VpdmUgb25seSB0aGUgdXBkYXRlZCBzdGF0ZVxuICAgICAgICBsYXN0SHJlZiA9IHRvO1xuICAgICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHsgZnJvbSwgdG8gfTtcbiAgICAgICAgX2hhbmRsZXJzLnRyaWdnZXJIYW5kbGVycygnaGlzdG9yeScsIGhhbmRsZXJEYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbEhpc3RvcnlGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgb2JqZWN0LmZpbGwoV0lORE9XLmhpc3RvcnksICdwdXNoU3RhdGUnLCBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbik7XG4gIG9iamVjdC5maWxsKFdJTkRPVy5oaXN0b3J5LCAncmVwbGFjZVN0YXRlJywgaGlzdG9yeVJlcGxhY2VtZW50RnVuY3Rpb24pO1xufVxuXG5leHBvcnRzLmFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gYWRkSGlzdG9yeUluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oaXN0b3J5LmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBpcyA9IHJlcXVpcmUoJy4uL2lzLmpzJyk7XG5jb25zdCBvYmplY3QgPSByZXF1aXJlKCcuLi9vYmplY3QuanMnKTtcbmNvbnN0IHdvcmxkd2lkZSA9IHJlcXVpcmUoJy4uL3dvcmxkd2lkZS5qcycpO1xuY29uc3QgX2hhbmRsZXJzID0gcmVxdWlyZSgnLi9faGFuZGxlcnMuanMnKTtcblxuY29uc3QgV0lORE9XID0gd29ybGR3aWRlLkdMT0JBTF9PQkogO1xuXG5jb25zdCBTRU5UUllfWEhSX0RBVEFfS0VZID0gJ19fc2VudHJ5X3hocl92M19fJztcblxuLyoqXG4gKiBBZGQgYW4gaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIgZm9yIHdoZW4gYW4gWEhSIHJlcXVlc3QgaGFwcGVucy5cbiAqIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHJlcXVlc3Qgc3RhcnRzIGFuZCBvbmNlIHdoZW4gaXQgZW5kcyxcbiAqIHdoaWNoIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyBhbiBgZW5kVGltZXN0YW1wYC5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXIpIHtcbiAgY29uc3QgdHlwZSA9ICd4aHInO1xuICBfaGFuZGxlcnMuYWRkSGFuZGxlcih0eXBlLCBoYW5kbGVyKTtcbiAgX2hhbmRsZXJzLm1heWJlSW5zdHJ1bWVudCh0eXBlLCBpbnN0cnVtZW50WEhSKTtcbn1cblxuLyoqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RzLiAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudFhIUigpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICBpZiAoIShXSU5ET1cgKS5YTUxIdHRwUmVxdWVzdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHhocnByb3RvID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlO1xuXG4gIG9iamVjdC5maWxsKHhocnByb3RvLCAnb3BlbicsIGZ1bmN0aW9uIChvcmlnaW5hbE9wZW4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgIC8vIG9wZW4oKSBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHR3byBvciBtb3JlIGFyZ3VtZW50c1xuICAgICAgLy8gQnV0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIHdlIGFjdHVhbGx5IHZhbGlkYXRlIHRoaXMgYW5kIGJhaWwgb3V0IGlmIHdlIGRvbid0IGhhdmUgYSBtZXRob2QgJiB1cmxcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGlzLmlzU3RyaW5nKGFyZ3NbMF0pID8gYXJnc1swXS50b1VwcGVyQ2FzZSgpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdXJsID0gcGFyc2VVcmwoYXJnc1sxXSk7XG5cbiAgICAgIGlmICghbWV0aG9kIHx8ICF1cmwpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsT3Blbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tTRU5UUllfWEhSX0RBVEFfS0VZXSA9IHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHJlcXVlc3RfaGVhZGVyczoge30sXG4gICAgICB9O1xuXG4gICAgICAvLyBpZiBTZW50cnkga2V5IGFwcGVhcnMgaW4gVVJMLCBkb24ndCBjYXB0dXJlIGl0IGFzIGEgcmVxdWVzdFxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnICYmIHVybC5tYXRjaCgvc2VudHJ5X2tleS8pKSB7XG4gICAgICAgIHRoaXMuX19zZW50cnlfb3duX3JlcXVlc3RfXyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIC8vIEZvciB3aGF0ZXZlciByZWFzb24sIHRoaXMgaXMgbm90IHRoZSBzYW1lIGluc3RhbmNlIGhlcmUgYXMgZnJvbSB0aGUgb3V0ZXIgbWV0aG9kXG4gICAgICAgIGNvbnN0IHhockluZm8gPSB0aGlzW1NFTlRSWV9YSFJfREFUQV9LRVldO1xuXG4gICAgICAgIGlmICgheGhySW5mbykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gdG91Y2hpbmcgc3RhdHVzQ29kZSBpbiBzb21lIHBsYXRmb3JtcyB0aHJvd3NcbiAgICAgICAgICAgIC8vIGFuIGV4Y2VwdGlvblxuICAgICAgICAgICAgeGhySW5mby5zdGF0dXNfY29kZSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHtcbiAgICAgICAgICAgIGFyZ3M6IFttZXRob2QsIHVybF0sXG4gICAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICBzdGFydFRpbWVzdGFtcCxcbiAgICAgICAgICAgIHhocjogdGhpcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIF9oYW5kbGVycy50cmlnZ2VySGFuZGxlcnMoJ3hocicsIGhhbmRsZXJEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIHRoaXMgJiYgdHlwZW9mIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iamVjdC5maWxsKHRoaXMsICdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCAuLi5yZWFkeVN0YXRlQXJncykge1xuICAgICAgICAgICAgb25yZWFkeXN0YXRlY2hhbmdlSGFuZGxlcigpO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIHJlYWR5U3RhdGVBcmdzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcmNlcHRpbmcgYHNldFJlcXVlc3RIZWFkZXJgIHRvIGFjY2VzcyB0aGUgcmVxdWVzdCBoZWFkZXJzIG9mIFhIUiBpbnN0YW5jZS5cbiAgICAgIC8vIFRoaXMgd2lsbCBvbmx5IHdvcmsgZm9yIHVzZXIvbGlicmFyeSBkZWZpbmVkIGhlYWRlcnMsIG5vdCBmb3IgdGhlIGRlZmF1bHQvYnJvd3Nlci1hc3NpZ25lZCBoZWFkZXJzLlxuICAgICAgLy8gUmVxdWVzdCBjb29raWVzIGFyZSBhbHNvIHVuYXZhaWxhYmxlIGZvciBYSFIsIGFzIGBDb29raWVgIGhlYWRlciBjYW4ndCBiZSBkZWZpbmVkIGJ5IGBzZXRSZXF1ZXN0SGVhZGVyYC5cbiAgICAgIG9iamVjdC5maWxsKHRoaXMsICdzZXRSZXF1ZXN0SGVhZGVyJywgZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoIC4uLnNldFJlcXVlc3RIZWFkZXJBcmdzKSB7XG4gICAgICAgICAgY29uc3QgW2hlYWRlciwgdmFsdWVdID0gc2V0UmVxdWVzdEhlYWRlckFyZ3M7XG5cbiAgICAgICAgICBjb25zdCB4aHJJbmZvID0gdGhpc1tTRU5UUllfWEhSX0RBVEFfS0VZXTtcblxuICAgICAgICAgIGlmICh4aHJJbmZvICYmIGlzLmlzU3RyaW5nKGhlYWRlcikgJiYgaXMuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICB4aHJJbmZvLnJlcXVlc3RfaGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgc2V0UmVxdWVzdEhlYWRlckFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE9wZW4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgb2JqZWN0LmZpbGwoeGhycHJvdG8sICdzZW5kJywgZnVuY3Rpb24gKG9yaWdpbmFsU2VuZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IHNlbnRyeVhockRhdGEgPSB0aGlzW1NFTlRSWV9YSFJfREFUQV9LRVldO1xuXG4gICAgICBpZiAoIXNlbnRyeVhockRhdGEpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU2VuZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZW50cnlYaHJEYXRhLmJvZHkgPSBhcmdzWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHtcbiAgICAgICAgYXJnczogW3NlbnRyeVhockRhdGEubWV0aG9kLCBzZW50cnlYaHJEYXRhLnVybF0sXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICB4aHI6IHRoaXMsXG4gICAgICB9O1xuICAgICAgX2hhbmRsZXJzLnRyaWdnZXJIYW5kbGVycygneGhyJywgaGFuZGxlckRhdGEpO1xuXG4gICAgICByZXR1cm4gb3JpZ2luYWxTZW5kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgaWYgKGlzLmlzU3RyaW5nKHVybCkpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyB1cmwgY2FuIGJlIGEgc3RyaW5nIG9yIFVSTFxuICAgIC8vIGJ1dCBzaW5jZSBVUkwgaXMgbm90IGF2YWlsYWJsZSBpbiBJRTExLCB3ZSBkbyBub3QgY2hlY2sgZm9yIGl0LFxuICAgIC8vIGJ1dCBzaW1wbHkgYXNzdW1lIGl0IGlzIGFuIFVSTCBhbmQgcmV0dXJuIGB0b1N0cmluZygpYCBmcm9tIGl0ICh3aGljaCByZXR1cm5zIHRoZSBmdWxsIFVSTClcbiAgICAvLyBJZiB0aGF0IGZhaWxzLCB3ZSBqdXN0IHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gKHVybCApLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2ggKGUyKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0cy5TRU5UUllfWEhSX0RBVEFfS0VZID0gU0VOVFJZX1hIUl9EQVRBX0tFWTtcbmV4cG9ydHMuYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZFhockluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmluc3RydW1lbnRYSFIgPSBpbnN0cnVtZW50WEhSO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eGhyLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJy4uL2xvZ2dlci5qcycpO1xuY29uc3QgY29uc29sZSA9IHJlcXVpcmUoJy4vY29uc29sZS5qcycpO1xuY29uc3QgZG9tID0gcmVxdWlyZSgnLi9kb20uanMnKTtcbmNvbnN0IGZldGNoID0gcmVxdWlyZSgnLi9mZXRjaC5qcycpO1xuY29uc3QgZ2xvYmFsRXJyb3IgPSByZXF1aXJlKCcuL2dsb2JhbEVycm9yLmpzJyk7XG5jb25zdCBnbG9iYWxVbmhhbmRsZWRSZWplY3Rpb24gPSByZXF1aXJlKCcuL2dsb2JhbFVuaGFuZGxlZFJlamVjdGlvbi5qcycpO1xuY29uc3QgaGlzdG9yeSA9IHJlcXVpcmUoJy4vaGlzdG9yeS5qcycpO1xuY29uc3QgeGhyID0gcmVxdWlyZSgnLi94aHIuanMnKTtcblxuLy8gVE9ETyh2OCk6IENvbnNpZGVyIG1vdmluZyB0aGlzIGZpbGUgKG9yIGF0IGxlYXN0IHBhcnRzIG9mIGl0KSBpbnRvIHRoZSBicm93c2VyIHBhY2thZ2UuIFRoZSByZWdpc3RlcmVkIGhhbmRsZXJzIGFyZSBtb3N0bHkgbm9uLWdlbmVyaWMgYW5kIHdlIHJpc2sgbGVha2luZyBydW50aW1lIHNwZWNpZmljIGNvZGUgaW50byBnZW5lcmljIHBhY2thZ2VzLlxuXG4vKipcbiAqIEFkZCBoYW5kbGVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBnaXZlbiB0eXBlIG9mIGluc3RydW1lbnRhdGlvbiB0cmlnZ2Vycy5cbiAqIFVzZSBhdCB5b3VyIG93biByaXNrLCB0aGlzIG1pZ2h0IGJyZWFrIHdpdGhvdXQgY2hhbmdlbG9nIG5vdGljZSwgb25seSB1c2VkIGludGVybmFsbHkuXG4gKiBAaGlkZGVuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHByb3BlciBmdW5jdGlvbiBwZXIgaW5zdHJ1bWVudGF0aW9uIHR5cGUgaW5zdGVhZCFcbiAqL1xuZnVuY3Rpb24gYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih0eXBlLCBjYWxsYmFjaykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjb25zb2xlJzpcbiAgICAgIHJldHVybiBjb25zb2xlLmFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyKGNhbGxiYWNrKTtcbiAgICBjYXNlICdkb20nOlxuICAgICAgcmV0dXJuIGRvbS5hZGRDbGlja0tleXByZXNzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjayk7XG4gICAgY2FzZSAneGhyJzpcbiAgICAgIHJldHVybiB4aHIuYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjayk7XG4gICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgcmV0dXJuIGZldGNoLmFkZEZldGNoSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjayk7XG4gICAgY2FzZSAnaGlzdG9yeSc6XG4gICAgICByZXR1cm4gaGlzdG9yeS5hZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjayk7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIGdsb2JhbEVycm9yLmFkZEdsb2JhbEVycm9ySW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjayk7XG4gICAgY2FzZSAndW5oYW5kbGVkcmVqZWN0aW9uJzpcbiAgICAgIHJldHVybiBnbG9iYWxVbmhhbmRsZWRSZWplY3Rpb24uYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjayk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgbG9nZ2VyLmxvZ2dlci53YXJuKCd1bmtub3duIGluc3RydW1lbnRhdGlvbiB0eXBlOicsIHR5cGUpO1xuICB9XG59XG5cbmV4cG9ydHMuYWRkQ29uc29sZUluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBjb25zb2xlLmFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5hZGRDbGlja0tleXByZXNzSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGRvbS5hZGRDbGlja0tleXByZXNzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkRmV0Y2hJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gZmV0Y2guYWRkRmV0Y2hJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5hZGRHbG9iYWxFcnJvckluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBnbG9iYWxFcnJvci5hZGRHbG9iYWxFcnJvckluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZEdsb2JhbFVuaGFuZGxlZFJlamVjdGlvbkluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBnbG9iYWxVbmhhbmRsZWRSZWplY3Rpb24uYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkSGlzdG9yeUluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBoaXN0b3J5LmFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5TRU5UUllfWEhSX0RBVEFfS0VZID0geGhyLlNFTlRSWV9YSFJfREFUQV9LRVk7XG5leHBvcnRzLmFkZFhockluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSB4aHIuYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLypcbiAqIFRoaXMgbW9kdWxlIGV4aXN0cyBmb3Igb3B0aW1pemF0aW9ucyBpbiB0aGUgYnVpbGQgcHJvY2VzcyB0aHJvdWdoIHJvbGx1cCBhbmQgdGVyc2VyLiAgV2UgZGVmaW5lIHNvbWUgZ2xvYmFsXG4gKiBjb25zdGFudHMsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGR1cmluZyBidWlsZC4gQnkgZ3VhcmRpbmcgY2VydGFpbiBwaWVjZXMgb2YgY29kZSB3aXRoIGZ1bmN0aW9ucyB0aGF0IHJldHVybiB0aGVzZVxuICogY29uc3RhbnRzLCB3ZSBjYW4gY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFwcGVhciBpbiB0aGUgZmluYWwgYnVuZGxlLiAoQW55IGNvZGUgZ3VhcmRlZCBieSBhIGZhbHNlIGNvbmRpdGlvbiB3aWxsXG4gKiBuZXZlciBydW4sIGFuZCB3aWxsIGhlbmNlIGJlIGRyb3BwZWQgZHVyaW5nIHRyZWVzaGFraW5nLikgVGhlIHR3byBwcmltYXJ5IHVzZXMgZm9yIHRoaXMgYXJlIHN0cmlwcGluZyBvdXQgY2FsbHMgdG9cbiAqIGBsb2dnZXJgIGFuZCBwcmV2ZW50aW5nIG5vZGUtcmVsYXRlZCBjb2RlIGZyb20gYXBwZWFyaW5nIGluIGJyb3dzZXIgYnVuZGxlcy5cbiAqXG4gKiBBdHRlbnRpb246XG4gKiBUaGlzIGZpbGUgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRlZmluZSBjb25zdGFudHMvZmxhZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdHJlZS1zaGFraW5nIGNvbmR1Y3RlZCBieVxuICogdXNlcnMuIFRoZXNlIGZsYWdzIHNob3VsZCBsaXZlIGluIHRoZWlyIHJlc3BlY3RpdmUgcGFja2FnZXMsIGFzIHdlIGlkZW50aWZpZWQgdXNlciB0b29saW5nIChzcGVjaWZpY2FsbHkgd2VicGFjaylcbiAqIGhhdmluZyBpc3N1ZXMgdHJlZS1zaGFraW5nIHRoZXNlIGNvbnN0YW50cyBhY3Jvc3MgcGFja2FnZSBib3VuZGFyaWVzLlxuICogQW4gZXhhbXBsZSBmb3IgdGhpcyBpcyB0aGUgX19TRU5UUllfREVCVUdfXyBjb25zdGFudC4gSXQgaXMgZGVjbGFyZWQgaW4gZWFjaCBwYWNrYWdlIGluZGl2aWR1YWxseSBiZWNhdXNlIHdlIHdhbnRcbiAqIHVzZXJzIHRvIGJlIGFibGUgdG8gc2hha2UgYXdheSBleHByZXNzaW9ucyB0aGF0IGl0IGd1YXJkcy5cbiAqL1xuXG4vKipcbiAqIEZpZ3VyZXMgb3V0IGlmIHdlJ3JlIGJ1aWxkaW5nIGEgYnJvd3NlciBidW5kbGUuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgYnJvd3NlciBidW5kbGUgYnVpbGQuXG4gKi9cbmZ1bmN0aW9uIGlzQnJvd3NlckJ1bmRsZSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBfX1NFTlRSWV9CUk9XU0VSX0JVTkRMRV9fICE9PSAndW5kZWZpbmVkJyAmJiAhIV9fU0VOVFJZX0JST1dTRVJfQlVORExFX187XG59XG5cbi8qKlxuICogR2V0IHNvdXJjZSBvZiBTREsuXG4gKi9cbmZ1bmN0aW9uIGdldFNES1NvdXJjZSgpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBcIm5wbVwiIGlzIGluamVjdGVkIGJ5IHJvbGx1cCBkdXJpbmcgYnVpbGQgcHJvY2Vzc1xuICByZXR1cm4gXCJucG1cIjtcbn1cblxuZXhwb3J0cy5nZXRTREtTb3VyY2UgPSBnZXRTREtTb3VyY2U7XG5leHBvcnRzLmlzQnJvd3NlckJ1bmRsZSA9IGlzQnJvd3NlckJ1bmRsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudi5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZW52ID0gcmVxdWlyZSgnLi9lbnYuanMnKTtcblxuLyoqXG4gKiBOT1RFOiBJbiBvcmRlciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIGlmIHlvdSBhZGQgYSBmdW5jdGlvbiB0byB0aGlzIG1vZHVsZSBhbmQgaXQgbmVlZHMgdG8gcHJpbnQgc29tZXRoaW5nLFxuICogeW91IG11c3QgZWl0aGVyIGEpIHVzZSBgY29uc29sZS5sb2dgIHJhdGhlciB0aGFuIHRoZSBsb2dnZXIsIG9yIGIpIHB1dCB5b3VyIGZ1bmN0aW9uIGVsc2V3aGVyZS5cbiAqL1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBOb2RlLmpzIG9yIEJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gZ2l2ZW4gcXVlc3Rpb25cbiAqL1xuZnVuY3Rpb24gaXNOb2RlRW52KCkge1xuICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBicm93c2VyIGJ1bmRsZXMgYXMgdGhvc2UgY2FuIGJlIG9wdGltaXplZCBzdGF0aWNhbGx5XG4gIC8vIGJ5IHRlcnNlci9yb2xsdXAuXG4gIHJldHVybiAoXG4gICAgIWVudi5pc0Jyb3dzZXJCdW5kbGUoKSAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzIDogMCkgPT09ICdbb2JqZWN0IHByb2Nlc3NdJ1xuICApO1xufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbW9kdWxlIHdoaWNoIGlzIHByb3RlY3RlZCBhZ2FpbnN0IGJ1bmRsZXIgbWluaWZpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IFRoZSBtb2R1bGUgcGF0aCB0byByZXNvbHZlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBkeW5hbWljUmVxdWlyZShtb2QsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICByZXR1cm4gbW9kLnJlcXVpcmUocmVxdWVzdCk7XG59XG5cbi8qKlxuICogSGVscGVyIGZvciBkeW5hbWljYWxseSBsb2FkaW5nIG1vZHVsZSB0aGF0IHNob3VsZCB3b3JrIHdpdGggbGlua2VkIGRlcGVuZGVuY2llcy5cbiAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgX3Nob3VsZF8gYmUgdXNpbmcgYHJlcXVpcmUocmVxdWlyZS5yZXNvbHZlKG1vZHVsZU5hbWUsIHsgcGF0aHM6IFtjd2QoKV0gfSkpYFxuICogSG93ZXZlciBpdCdzIF9ub3QgcG9zc2libGVfIHRvIGRvIHRoYXQgd2l0aCBXZWJwYWNrLCBhcyBpdCBoYXMgdG8ga25vdyBhbGwgdGhlIGRlcGVuZGVuY2llcyBkdXJpbmdcbiAqIGJ1aWxkIHRpbWUuIGByZXF1aXJlLnJlc29sdmVgIGlzIGFsc28gbm90IGF2YWlsYWJsZSBpbiBhbnkgb3RoZXIgd2F5LCBzbyB3ZSBjYW5ub3QgY3JlYXRlLFxuICogYSBmYWtlIGhlbHBlciBsaWtlIHdlIGRvIHdpdGggYGR5bmFtaWNSZXF1aXJlYC5cbiAqXG4gKiBXZSBhbHdheXMgcHJlZmVyIHRvIHVzZSBsb2NhbCBwYWNrYWdlLCB0aHVzIHRoZSB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZWFybHkgZnJvbSBlYWNoIGB0cnkvY2F0Y2hgIGJsb2NrLlxuICogVGhhdCBpcyB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgYHJlcXVpcmUucmVzb2x2ZWAgZXhhY3RseS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBtb2R1bGUgbmFtZSB0byByZXF1aXJlXG4gKiBAcmV0dXJucyBwb3NzaWJseSByZXF1aXJlZCBtb2R1bGVcbiAqL1xuZnVuY3Rpb24gbG9hZE1vZHVsZShtb2R1bGVOYW1lKSB7XG4gIGxldCBtb2Q7XG5cbiAgdHJ5IHtcbiAgICBtb2QgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsIG1vZHVsZU5hbWUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gbm8tZW1wdHlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBjd2QgfSA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJ3Byb2Nlc3MnKTtcbiAgICBtb2QgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsIGAke2N3ZCgpfS9ub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWApIDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIG5vLWVtcHR5XG4gIH1cblxuICByZXR1cm4gbW9kO1xufVxuXG5leHBvcnRzLmR5bmFtaWNSZXF1aXJlID0gZHluYW1pY1JlcXVpcmU7XG5leHBvcnRzLmlzTm9kZUVudiA9IGlzTm9kZUVudjtcbmV4cG9ydHMubG9hZE1vZHVsZSA9IGxvYWRNb2R1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBub2RlID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuL3dvcmxkd2lkZS5qcycpO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgaW4gdGhlIGJyb3dzZXIuXG4gKi9cbmZ1bmN0aW9uIGlzQnJvd3NlcigpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKCFub2RlLmlzTm9kZUVudigpIHx8IGlzRWxlY3Ryb25Ob2RlUmVuZGVyZXIoKSk7XG59XG5cbi8vIEVsZWN0cm9uIHJlbmRlcmVycyB3aXRoIG5vZGVJbnRlZ3JhdGlvbiBlbmFibGVkIGFyZSBkZXRlY3RlZCBhcyBOb2RlLmpzIHNvIHdlIHNwZWNpZmljYWxseSB0ZXN0IGZvciB0aGVtXG5mdW5jdGlvbiBpc0VsZWN0cm9uTm9kZVJlbmRlcmVyKCkge1xuICByZXR1cm4gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAod29ybGR3aWRlLkdMT0JBTF9PQkogKS5wcm9jZXNzICE9PSB1bmRlZmluZWQgJiYgKCh3b3JsZHdpZGUuR0xPQkFMX09CSiApLnByb2Nlc3MgKS50eXBlID09PSAncmVuZGVyZXInXG4gICk7XG59XG5cbmV4cG9ydHMuaXNCcm93c2VyID0gaXNCcm93c2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNCcm93c2VyLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuLyoqXG4gKiBIZWxwZXIgdG8gZGVjeWNsZSBqc29uIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7XG4gIGNvbnN0IGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgaW5uZXIgPSBoYXNXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IFtdO1xuICBmdW5jdGlvbiBtZW1vaXplKG9iaikge1xuICAgIGlmIChoYXNXZWFrU2V0KSB7XG4gICAgICBpZiAoaW5uZXIuaGFzKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpbm5lci5hZGQob2JqKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbm5lcltpXTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb2JqKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpbm5lci5wdXNoKG9iaik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikge1xuICAgIGlmIChoYXNXZWFrU2V0KSB7XG4gICAgICBpbm5lci5kZWxldGUob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikge1xuICAgICAgICAgIGlubmVyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gW21lbW9pemUsIHVubWVtb2l6ZV07XG59XG5cbmV4cG9ydHMubWVtb0J1aWxkZXIgPSBtZW1vQnVpbGRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lbW8uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcy5qcycpO1xuY29uc3QgbWVtbyA9IHJlcXVpcmUoJy4vbWVtby5qcycpO1xuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi9vYmplY3QuanMnKTtcbmNvbnN0IHN0YWNrdHJhY2UgPSByZXF1aXJlKCcuL3N0YWNrdHJhY2UuanMnKTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBub3JtYWxpemVzIHRoZSBnaXZlbiBvYmplY3QuXG4gKlxuICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uXG4gKiAtIFNraXBzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqIC0gV2hlbiBzdHJpbmdpZnlpbmcsIGNhbGxzIGB0b0pTT05gIGlmIGltcGxlbWVudGVkXG4gKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIChgdW5kZWZpbmVkYC9gTmFOYC9mdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXRcbiAqIC0gVHJhbnNsYXRlcyBrbm93biBnbG9iYWwgb2JqZWN0cy9jbGFzc2VzIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uc1xuICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb25cbiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgZGVwdGggb2YgZmluYWwgb3V0cHV0XG4gKiAtIE9wdGlvbmFsbHkgbGltaXRzIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5XG4gKlxuICogQHBhcmFtIGlucHV0IFRoZSBvYmplY3QgdG8gYmUgbm9ybWFsaXplZC5cbiAqIEBwYXJhbSBkZXB0aCBUaGUgbWF4IGRlcHRoIHRvIHdoaWNoIHRvIG5vcm1hbGl6ZSB0aGUgb2JqZWN0LiAoQW55dGhpbmcgZGVlcGVyIHN0cmluZ2lmaWVkIHdob2xlLilcbiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvclxuICogb2JqZWN0IGluIHRoZSBub3JtYWxsaXplZCBvdXRwdXQuXG4gKiBAcmV0dXJucyBBIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgb2JqZWN0LCBvciBgXCIqKm5vbi1zZXJpYWxpemFibGUqKlwiYCBpZiBhbnkgZXJyb3JzIGFyZSB0aHJvd24gZHVyaW5nIG5vcm1hbGl6YXRpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoID0gMTAwLCBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5KSB7XG4gIHRyeSB7XG4gICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleVxuICAgIHJldHVybiB2aXNpdCgnJywgaW5wdXQsIGRlcHRoLCBtYXhQcm9wZXJ0aWVzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTtcbiAgfVxufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRvU2l6ZShcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgb2JqZWN0LFxuICAvLyBEZWZhdWx0IE5vZGUuanMgUkVQTCBkZXB0aFxuICBkZXB0aCA9IDMsXG4gIC8vIDEwMGtCLCBhcyAyMDBrQiBpcyBtYXggcGF5bG9hZCBzaXplLCBzbyBoYWxmIHNvdW5kcyByZWFzb25hYmxlXG4gIG1heFNpemUgPSAxMDAgKiAxMDI0LFxuKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUob2JqZWN0LCBkZXB0aCk7XG5cbiAgaWYgKGpzb25TaXplKG5vcm1hbGl6ZWQpID4gbWF4U2l6ZSkge1xuICAgIHJldHVybiBub3JtYWxpemVUb1NpemUob2JqZWN0LCBkZXB0aCAtIDEsIG1heFNpemUpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQgO1xufVxuXG4vKipcbiAqIFZpc2l0cyBhIG5vZGUgdG8gcGVyZm9ybSBub3JtYWxpemF0aW9uIG9uIGl0XG4gKlxuICogQHBhcmFtIGtleSBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG5vZGVcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgbm9kZSB0byBiZSB2aXNpdGVkXG4gKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoXG4gKiBAcGFyYW0gbWF4UHJvcGVydGllcyBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5XG4gKiBAcGFyYW0gbWVtbyBPcHRpb25hbCBNZW1vIGNsYXNzIGhhbmRsaW5nIGRlY3ljbGluZ1xuICovXG5mdW5jdGlvbiB2aXNpdChcbiAga2V5LFxuICB2YWx1ZSxcbiAgZGVwdGggPSArSW5maW5pdHksXG4gIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHksXG4gIG1lbW8kMSA9IG1lbW8ubWVtb0J1aWxkZXIoKSxcbikge1xuICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW8kMTtcblxuICAvLyBHZXQgdGhlIHNpbXBsZSBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdFxuICBpZiAoXG4gICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcVxuICAgIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgJiYgIWlzLmlzTmFOKHZhbHVlKSlcbiAgKSB7XG4gICAgcmV0dXJuIHZhbHVlIDtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5VmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYFwiW29iamVjdCBYWFhYXVwiYC5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS5cbiAgaWYgKCFzdHJpbmdpZmllZC5zdGFydHNXaXRoKCdbb2JqZWN0ICcpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmaWVkO1xuICB9XG5cbiAgLy8gRnJvbSBoZXJlIG9uLCB3ZSBjYW4gYXNzZXJ0IHRoYXQgYHZhbHVlYCBpcyBlaXRoZXIgYW4gb2JqZWN0IG9yIGFuIGFycmF5LlxuXG4gIC8vIERvIG5vdCBub3JtYWxpemUgb2JqZWN0cyB0aGF0IHdlIGtub3cgaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gQXMgYSBnZW5lcmFsIHJ1bGUsIHRoZVxuICAvLyBcIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fXCIgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgdXNlZCBzcGFyaW5nbHkgYW5kIG9ubHkgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIG9iamVjdHMgdGhhdFxuICAvLyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLlxuICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHtcbiAgICByZXR1cm4gdmFsdWUgO1xuICB9XG5cbiAgLy8gV2UgY2FuIHNldCBgX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fYCBvbiBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgZnJvbSB0aGVyZVxuICAvLyBXZSBrZWVwIGEgY2VydGFpbiBhbW91bnQgb2YgZGVwdGguXG4gIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS5cbiAgY29uc3QgcmVtYWluaW5nRGVwdGggPVxuICAgIHR5cGVvZiAodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gPT09ICdudW1iZXInXG4gICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKVxuICAgICAgOiBkZXB0aDtcblxuICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoXG4gIGlmIChyZW1haW5pbmdEZXB0aCA9PT0gMCkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyBgc2VyaWFsaXplZGAgaXMgYSBzdHJpbmcgb2YgdGhlIGZvcm0gYFwiW29iamVjdCBYWFhYXVwiYC4gQ2xlYW4gaXQgdXAgc28gaXQncyBqdXN0IGBcIltYWFhYXVwiYC5cbiAgICByZXR1cm4gc3RyaW5naWZpZWQucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbiAgfVxuXG4gIC8vIElmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlLiBJZiBub3QsIG5vdGUgdGhhdCB3ZSdyZSBzZWVpbmcgaXQgbm93LlxuICBpZiAobWVtb2l6ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7XG4gIH1cblxuICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvblxuICBjb25zdCB2YWx1ZVdpdGhUb0pTT04gPSB2YWx1ZSA7XG4gIGlmICh2YWx1ZVdpdGhUb0pTT04gJiYgdHlwZW9mIHZhbHVlV2l0aFRvSlNPTi50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvblZhbHVlID0gdmFsdWVXaXRoVG9KU09OLnRvSlNPTigpO1xuICAgICAgLy8gV2UgbmVlZCB0byBub3JtYWxpemUgdGhlIHJldHVybiB2YWx1ZSBvZiBgLnRvSlNPTigpYCBpbiBjYXNlIGl0IGhhcyBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vJDEpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gcGFzcyAoVGhlIGJ1aWx0LWluIGB0b0pTT05gIGZhaWxlZCwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gZG8gaXQgb3Vyc2VsdmVzKVxuICAgIH1cbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB3ZSBlaXRoZXIgaGF2ZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXksIHdlIGhhdmVuJ3Qgc2VlbiBpdCBiZWZvcmUsIGFuZCB3ZSdyZSBnb2luZyB0byByZWN1cnNlXG4gIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoXG4gIC8vIHByb3BlcnR5L2VudHJ5LCBhbmQga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdlIGFkZCB0byBpdC5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IFtdIDoge30pIDtcbiAgbGV0IG51bUFkZGVkID0gMDtcblxuICAvLyBCZWZvcmUgd2UgYmVnaW4sIGNvbnZlcnRgRXJyb3JgIGFuZGBFdmVudGAgaW5zdGFuY2VzIGludG8gcGxhaW4gb2JqZWN0cywgc2luY2Ugc29tZSBvZiBlYWNoIG9mIHRoZWlyIHJlbGV2YW50XG4gIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC5cbiAgY29uc3QgdmlzaXRhYmxlID0gb2JqZWN0LmNvbnZlcnRUb1BsYWluT2JqZWN0KHZhbHVlICk7XG5cbiAgZm9yIChjb25zdCB2aXNpdEtleSBpbiB2aXNpdGFibGUpIHtcbiAgICAvLyBBdm9pZCBpdGVyYXRpbmcgb3ZlciBmaWVsZHMgaW4gdGhlIHByb3RvdHlwZSBpZiB0aGV5J3ZlIHNvbWVob3cgYmVlbiBleHBvc2VkIHRvIGVudW1lcmF0aW9uLlxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobnVtQWRkZWQgPj0gbWF4UHJvcGVydGllcykge1xuICAgICAgbm9ybWFsaXplZFt2aXNpdEtleV0gPSAnW01heFByb3BlcnRpZXMgfl0nO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2Rlc1xuICAgIGNvbnN0IHZpc2l0VmFsdWUgPSB2aXNpdGFibGVbdmlzaXRLZXldO1xuICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gdmlzaXQodmlzaXRLZXksIHZpc2l0VmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyQxKTtcblxuICAgIG51bUFkZGVkKys7XG4gIH1cblxuICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2VcbiAgdW5tZW1vaXplKHZhbHVlKTtcblxuICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4vKipcbiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuXG4gKlxuICogTm90IG1lYW50IHRvIGJlIHVzZWQgb24gc2ltcGxlIHByaW1pdGl2ZXMgd2hpY2ggYWxyZWFkeSBoYXZlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBhcyBpdCB3aWxsLCBmb3IgZXhhbXBsZSwgdHVyblxuICogdGhlIG51bWJlciAxMjMxIGludG8gXCJbT2JqZWN0IE51bWJlcl1cIiwgbm9yIG9uIGBudWxsYCwgYXMgaXQgd2lsbCB0aHJvdy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMgQSBzdHJpbmdpZmllZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUoXG4gIGtleSxcbiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvclxuICAvLyBvdXIgaW50ZXJuYWwgdXNlLCBpdCdsbCBkb1xuICB2YWx1ZSxcbikge1xuICB0cnkge1xuICAgIGlmIChrZXkgPT09ICdkb21haW4nICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlICkuX2V2ZW50cykge1xuICAgICAgcmV0dXJuICdbRG9tYWluXSc7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7XG4gICAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7XG4gICAgfVxuXG4gICAgLy8gSXQncyBzYWZlIHRvIHVzZSBgZ2xvYmFsYCwgYHdpbmRvd2AsIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3RcbiAgICAvLyB3aGljaCB3b24ndCB0aHJvdyBpZiB0aGV5IGFyZSBub3QgcHJlc2VudC5cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZ2xvYmFsKSB7XG4gICAgICByZXR1cm4gJ1tHbG9iYWxdJztcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHtcbiAgICAgIHJldHVybiAnW1dpbmRvd10nO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7XG4gICAgfVxuXG4gICAgaWYgKGlzLmlzVnVlVmlld01vZGVsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICdbVnVlVmlld01vZGVsXSc7XG4gICAgfVxuXG4gICAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3lcbiAgICBpZiAoaXMuaXNTeW50aGV0aWNFdmVudCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gJ1tOYU5dJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gYFtGdW5jdGlvbjogJHtzdGFja3RyYWNlLmdldEZ1bmN0aW9uTmFtZSh2YWx1ZSl9XWA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiBgWyR7U3RyaW5nKHZhbHVlKX1dYDtcbiAgICB9XG5cbiAgICAvLyBzdHJpbmdpZmllZCBCaWdJbnRzIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHJlZ3VsYXIgbnVtYmVycywgc28gd2UgbmVlZCB0byBsYWJlbCB0aGVtIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDtcbiAgICB9XG5cbiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBrbm9ja2VkIG91dCBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgYW5kIHRoZSBwcmltaXRpdmVzLCBhbGwgd2UgaGF2ZSBsZWZ0IGFyZSBvYmplY3RzLiBTaW1wbHkgY2FzdGluZ1xuICAgIC8vIHRoZW0gdG8gc3RyaW5ncyBtZWFucyB0aGF0IGluc3RhbmNlcyBvZiBjbGFzc2VzIHdoaWNoIGhhdmVuJ3QgZGVmaW5lZCB0aGVpciBgdG9TdHJpbmdUYWdgIHdpbGwganVzdCBjb21lIG91dCBhc1xuICAgIC8vIGBcIltvYmplY3QgT2JqZWN0XVwiYC4gSWYgd2UgaW5zdGVhZCBsb29rIGF0IHRoZSBjb25zdHJ1Y3RvcidzIG5hbWUgKHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyksXG4gICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS5cbiAgICBjb25zdCBvYmpOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKTtcblxuICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzXG4gICAgaWYgKC9eSFRNTChcXHcqKUVsZW1lbnQkLy50ZXN0KG9iak5hbWUpKSB7XG4gICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gO1xuICAgIH1cblxuICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgO1xuICB9XG59XG4vKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKSB7XG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG5cbiAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogJ251bGwgcHJvdG90eXBlJztcbn1cblxuLyoqIENhbGN1bGF0ZXMgYnl0ZXMgc2l6ZSBvZiBpbnB1dCBzdHJpbmcgKi9cbmZ1bmN0aW9uIHV0ZjhMZW5ndGgodmFsdWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgcmV0dXJuIH4tZW5jb2RlVVJJKHZhbHVlKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGg7XG59XG5cbi8qKiBDYWxjdWxhdGVzIGJ5dGVzIHNpemUgb2YgaW5wdXQgb2JqZWN0ICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24ganNvblNpemUodmFsdWUpIHtcbiAgcmV0dXJuIHV0ZjhMZW5ndGgoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIFVSTHMgaW4gZXhjZXB0aW9ucyBhbmQgc3RhY2t0cmFjZXMgdG8gYSBiYXNlIHBhdGggc28gU2VudHJ5IGNhbiBmaW5nZXJwcmludFxuICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIGJlIG5vcm1hbGl6ZWQuXG4gKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHtcbiAgY29uc3QgZXNjYXBlZEJhc2UgPSBiYXNlUGF0aFxuICAgIC8vIEJhY2tzbGFzaCB0byBmb3J3YXJkXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzXG4gICAgLnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nLCAnXFxcXCQmJyk7XG5cbiAgbGV0IG5ld1VybCA9IHVybDtcbiAgdHJ5IHtcbiAgICBuZXdVcmwgPSBkZWNvZGVVUkkodXJsKTtcbiAgfSBjYXRjaCAoX09vKSB7XG4gICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3NcbiAgfVxuICByZXR1cm4gKFxuICAgIG5ld1VybFxuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgLnJlcGxhY2UoL3dlYnBhY2s6XFwvPy9nLCAnJykgLy8gUmVtb3ZlIGludGVybWVkaWF0ZSBiYXNlIHBhdGhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3JcbiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZXNjYXBlZEJhc2V9LypgLCAnaWcnKSwgJ2FwcDovLy8nKVxuICApO1xufVxuXG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbmV4cG9ydHMubm9ybWFsaXplVG9TaXplID0gbm9ybWFsaXplVG9TaXplO1xuZXhwb3J0cy5ub3JtYWxpemVVcmxUb0Jhc2UgPSBub3JtYWxpemVVcmxUb0Jhc2U7XG5leHBvcnRzLndhbGsgPSB2aXNpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vcm1hbGl6ZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2FsdmlubWV0Y2FsZi9yb2xsdXAtcGx1Z2luLW5vZGUtYnVpbHRpbnMvYmxvYi82M2FiOGFhY2QwMTM3Njc0NDVjYTI5OWU0NjhkOWE2MGE5NTMyOGQ3L3NyYy9lczYvcGF0aC5qc1xuLy9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy5hbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIGxldCB1cCA9IDA7XG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbmNvbnN0IHNwbGl0UGF0aFJlID0gL14oXFxTKzpcXFxcfFxcLz8pKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteL1xcXFxdKz98KShcXC5bXi4vXFxcXF0qfCkpKD86Wy9cXFxcXSopJC87XG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkge1xuICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L3B1bGwvODczNyNkaXNjdXNzaW9uX3IxMjg1NzE5MTcyXG4gIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7XG4gIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpO1xuICByZXR1cm4gcGFydHMgPyBwYXJ0cy5zbGljZSgxKSA6IFtdO1xufVxuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHJlc29sdmUoLi4uYXJncykge1xuICBsZXQgcmVzb2x2ZWRQYXRoID0gJyc7XG4gIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IGFyZ3MubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgY29uc3QgcGF0aCA9IGkgPj0gMCA/IGFyZ3NbaV0gOiAnLyc7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGVudHJpZXNcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShcbiAgICByZXNvbHZlZFBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiAhIXApLFxuICAgICFyZXNvbHZlZEFic29sdXRlLFxuICApLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGggfHwgJy4nO1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHRyaW0oYXJyKSB7XG4gIGxldCBzdGFydCA9IDA7XG4gIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gJycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBlbmQgPSBhcnIubGVuZ3RoIC0gMTtcbiAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydCA+IGVuZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xufVxuXG4vLyBwYXRoLnJlbGF0aXZlKGZyb20sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiByZWxhdGl2ZShmcm9tLCB0bykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICBmcm9tID0gcmVzb2x2ZShmcm9tKS5zbGljZSgxKTtcbiAgdG8gPSByZXNvbHZlKHRvKS5zbGljZSgxKTtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG4gIGNvbnN0IGZyb21QYXJ0cyA9IHRyaW0oZnJvbS5zcGxpdCgnLycpKTtcbiAgY29uc3QgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICBsZXQgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKGxldCBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn1cblxuLy8gcGF0aC5ub3JtYWxpemUocGF0aClcbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoKSB7XG4gIGNvbnN0IGlzUGF0aEFic29sdXRlID0gaXNBYnNvbHV0ZShwYXRoKTtcbiAgY29uc3QgdHJhaWxpbmdTbGFzaCA9IHBhdGguc2xpY2UoLTEpID09PSAnLyc7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIGxldCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KFxuICAgIHBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiAhIXApLFxuICAgICFpc1BhdGhBYnNvbHV0ZSxcbiAgKS5qb2luKCcvJyk7XG5cbiAgaWYgKCFub3JtYWxpemVkUGF0aCAmJiAhaXNQYXRoQWJzb2x1dGUpIHtcbiAgICBub3JtYWxpemVkUGF0aCA9ICcuJztcbiAgfVxuICBpZiAobm9ybWFsaXplZFBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIG5vcm1hbGl6ZWRQYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNQYXRoQWJzb2x1dGUgPyAnLycgOiAnJykgKyBub3JtYWxpemVkUGF0aDtcbn1cblxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpc0Fic29sdXRlKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59XG5cbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gam9pbiguLi5hcmdzKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGFyZ3Muam9pbignLycpKTtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgY29uc3QgcmVzdWx0ID0gc3BsaXRQYXRoKHBhdGgpO1xuICBjb25zdCByb290ID0gcmVzdWx0WzBdO1xuICBsZXQgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBleHQpIHtcbiAgbGV0IGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIGlmIChleHQgJiYgZi5zbGljZShleHQubGVuZ3RoICogLTEpID09PSBleHQpIHtcbiAgICBmID0gZi5zbGljZSgwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufVxuXG5leHBvcnRzLmJhc2VuYW1lID0gYmFzZW5hbWU7XG5leHBvcnRzLmRpcm5hbWUgPSBkaXJuYW1lO1xuZXhwb3J0cy5pc0Fic29sdXRlID0gaXNBYnNvbHV0ZTtcbmV4cG9ydHMuam9pbiA9IGpvaW47XG5leHBvcnRzLm5vcm1hbGl6ZVBhdGggPSBub3JtYWxpemVQYXRoO1xuZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuZXhwb3J0cy5yZXNvbHZlID0gcmVzb2x2ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdGguanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcy5qcycpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuLyoqIFN5bmNQcm9taXNlIGludGVybmFsIHN0YXRlcyAqL1xudmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHtcbiAgLyoqIFBlbmRpbmcgKi9cbiAgY29uc3QgUEVORElORyA9IDA7IFN0YXRlc1tTdGF0ZXNbXCJQRU5ESU5HXCJdID0gUEVORElOR10gPSBcIlBFTkRJTkdcIjtcbiAgLyoqIFJlc29sdmVkIC8gT0sgKi9cbiAgY29uc3QgUkVTT0xWRUQgPSAxOyBTdGF0ZXNbU3RhdGVzW1wiUkVTT0xWRURcIl0gPSBSRVNPTFZFRF0gPSBcIlJFU09MVkVEXCI7XG4gIC8qKiBSZWplY3RlZCAvIEVycm9yICovXG4gIGNvbnN0IFJFSkVDVEVEID0gMjsgU3RhdGVzW1N0YXRlc1tcIlJFSkVDVEVEXCJdID0gUkVKRUNURURdID0gXCJSRUpFQ1RFRFwiO1xufSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpO1xuXG4vLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudFxuXG4vKipcbiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuXG4gKlxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZXNvbHZlIHRoZSBwcm9taXNlIHdpdGhcbiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZWRTeW5jUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVqZWN0IHRoZSBwcm9taXNlIHdpdGhcbiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gcmVqZWN0ZWRTeW5jUHJvbWlzZShyZWFzb24pIHtcbiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZVxuICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5XG4gKi9cbmNsYXNzIFN5bmNQcm9taXNlIHtcblxuICAgY29uc3RydWN0b3IoXG4gICAgZXhlY3V0b3IsXG4gICkge1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTtcbiAgICB0aGlzLl9zdGF0ZSA9IFN0YXRlcy5QRU5ESU5HO1xuICAgIHRoaXMuX2hhbmRsZXJzID0gW107XG5cbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9yZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gICB0aGVuKFxuICAgIG9uZnVsZmlsbGVkLFxuICAgIG9ucmVqZWN0ZWQsXG4gICkge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbXG4gICAgICAgIGZhbHNlLFxuICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IMKvXFxfKOODhClfL8KvXG4gICAgICAgICAgICAvLyBUT0RPOiBGSVhNRVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoIW9ucmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gICBjYXRjaChcbiAgICBvbnJlamVjdGVkLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gICBmaW5hbGx5KG9uZmluYWxseSkge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHZhbDtcbiAgICAgIGxldCBpc1JlamVjdGVkO1xuXG4gICAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaXNSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIHZhbCA9IHZhbHVlO1xuICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHtcbiAgICAgICAgICAgIG9uZmluYWxseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWwgPSByZWFzb247XG4gICAgICAgICAgaWYgKG9uZmluYWxseSkge1xuICAgICAgICAgICAgb25maW5hbGx5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHtcbiAgICAgICAgICByZWplY3QodmFsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHZhbCApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTtcbiAgfTt9XG5cbiAgLyoqIEpTRG9jICovXG4gICAgX19pbml0MigpIHt0aGlzLl9yZWplY3QgPSAocmVhc29uKSA9PiB7XG4gICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTtcbiAgfTt9XG5cbiAgLyoqIEpTRG9jICovXG4gICAgX19pbml0MygpIHt0aGlzLl9zZXRSZXN1bHQgPSAoc3RhdGUsIHZhbHVlKSA9PiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSBTdGF0ZXMuUEVORElORykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpcy5pc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgdm9pZCAodmFsdWUgKS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7XG4gIH07fVxuXG4gIC8qKiBKU0RvYyAqL1xuICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlBFTkRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZWRIYW5kbGVycyA9IHRoaXMuX2hhbmRsZXJzLnNsaWNlKCk7XG4gICAgdGhpcy5faGFuZGxlcnMgPSBbXTtcblxuICAgIGNhY2hlZEhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICBpZiAoaGFuZGxlclswXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkge1xuICAgICAgICBoYW5kbGVyWzJdKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlclswXSA9IHRydWU7XG4gICAgfSk7XG4gIH07fVxufVxuXG5leHBvcnRzLlN5bmNQcm9taXNlID0gU3luY1Byb21pc2U7XG5leHBvcnRzLnJlamVjdGVkU3luY1Byb21pc2UgPSByZWplY3RlZFN5bmNQcm9taXNlO1xuZXhwb3J0cy5yZXNvbHZlZFN5bmNQcm9taXNlID0gcmVzb2x2ZWRTeW5jUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN5bmNwcm9taXNlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBlcnJvciA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcbmNvbnN0IHN5bmNwcm9taXNlID0gcmVxdWlyZSgnLi9zeW5jcHJvbWlzZS5qcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdFxuICogQHBhcmFtIGxpbWl0IG1heCBudW1iZXIgb2YgcHJvbWlzZXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHtcbiAgY29uc3QgYnVmZmVyID0gW107XG5cbiAgZnVuY3Rpb24gaXNSZWFkeSgpIHtcbiAgICByZXR1cm4gbGltaXQgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIubGVuZ3RoIDwgbGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgQ2FuIGJlIGFueSBQcm9taXNlTGlrZTxUPlxuICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUodGFzaykge1xuICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6XG4gICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yXG4gICAqICAgICAgICBmdW5jdGlvbnMgdGhlcmVmb3JlIHJhbiBpbW1lZGlhdGVseS4gVGh1cywgZXZlbiBpZiB0aGUgYnVmZmVyIHdhcyBmdWxsLCB0aGUgYWN0aW9uIHN0aWxsIGhhcHBlbmVkLiBCeVxuICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlclxuICAgKiAgICAgICAgbGltaXQgY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBwcm9taXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikge1xuICAgIGlmICghaXNSZWFkeSgpKSB7XG4gICAgICByZXR1cm4gc3luY3Byb21pc2UucmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgZXJyb3IuU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWVcbiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7XG4gICAgaWYgKGJ1ZmZlci5pbmRleE9mKHRhc2spID09PSAtMSkge1xuICAgICAgYnVmZmVyLnB1c2godGFzayk7XG4gICAgfVxuICAgIHZvaWQgdGFza1xuICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKVxuICAgICAgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgXG4gICAgICAvLyByYXRoZXIgdGhhbiBgUHJvbWlzZWAuIGBQcm9taXNlTGlrZWAgZG9lc24ndCBoYXZlIGEgYC5jYXRjaGAgbWV0aG9kLCBtYWtpbmcgaXRzIHBvbHlmaWxsIHNtYWxsZXIuIChFUzUgZGlkbid0XG4gICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pXG4gICAgICAudGhlbihudWxsLCAoKSA9PlxuICAgICAgICByZW1vdmUodGFzaykudGhlbihudWxsLCAoKSA9PiB7XG4gICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi5cbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIHJldHVybiB0YXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yXG4gICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0b1xuICAgKiBgdHJ1ZWAuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkge1xuICAgIHJldHVybiBuZXcgc3luY3Byb21pc2UuU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGNvdW50ZXIgPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBpZiAoIWNvdW50ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdhaXQgZm9yIGB0aW1lb3V0YCBtcyBhbmQgdGhlbiByZXNvbHZlIHRvIGBmYWxzZWAgKGlmIG5vdCBjYW5jZWxsZWQgZmlyc3QpXG4gICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgXG4gICAgICBidWZmZXIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdm9pZCBzeW5jcHJvbWlzZS5yZXNvbHZlZFN5bmNQcm9taXNlKGl0ZW0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgICQ6IGJ1ZmZlcixcbiAgICBhZGQsXG4gICAgZHJhaW4sXG4gIH07XG59XG5cbmV4cG9ydHMubWFrZVByb21pc2VCdWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21pc2VidWZmZXIuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGNvcGllZCBmcm9tIHRoZSAnY29va2llYCBtb2R1bGUgYXQgdjAuNS4wIGFuZCB3YXMgc2ltcGxpZmllZCBmb3Igb3VyIHVzZSBjYXNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pzaHR0cC9jb29raWUvYmxvYi9hMGM4NDE0N2FhYjYyNjZiZGIzOTk2Y2Y0MDYyZTkzOTA3YzBiMGZjL2luZGV4LmpzXG4gKiBJdCBoYWQgdGhlIGZvbGxvd2luZyBsaWNlbnNlOlxuICpcbiAqIChUaGUgTUlUIExpY2Vuc2UpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgUm9tYW4gU2h0eWxtYW4gPHNodHlsbWFuQGdtYWlsLmNvbT5cbiAqIENvcHlyaWdodCAoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvbiA8ZG91Z0Bzb21ldGhpbmdkb3VnLmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG4gKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcbiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICovXG5cbi8qKlxuICogUGFyc2VzIGEgY29va2llIHN0cmluZ1xuICovXG5mdW5jdGlvbiBwYXJzZUNvb2tpZShzdHIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIGNvbnN0IGVxSWR4ID0gc3RyLmluZGV4T2YoJz0nLCBpbmRleCk7XG5cbiAgICAvLyBubyBtb3JlIGNvb2tpZSBwYWlyc1xuICAgIGlmIChlcUlkeCA9PT0gLTEpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBlbmRJZHggPSBzdHIuaW5kZXhPZignOycsIGluZGV4KTtcblxuICAgIGlmIChlbmRJZHggPT09IC0xKSB7XG4gICAgICBlbmRJZHggPSBzdHIubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoZW5kSWR4IDwgZXFJZHgpIHtcbiAgICAgIC8vIGJhY2t0cmFjayBvbiBwcmlvciBzZW1pY29sb25cbiAgICAgIGluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCc7JywgZXFJZHggLSAxKSArIDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBzdHIuc2xpY2UoaW5kZXgsIGVxSWR4KS50cmltKCk7XG5cbiAgICAvLyBvbmx5IGFzc2lnbiBvbmNlXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gb2JqW2tleV0pIHtcbiAgICAgIGxldCB2YWwgPSBzdHIuc2xpY2UoZXFJZHggKyAxLCBlbmRJZHgpLnRyaW0oKTtcblxuICAgICAgLy8gcXVvdGVkIHZhbHVlc1xuICAgICAgaWYgKHZhbC5jaGFyQ29kZUF0KDApID09PSAweDIyKSB7XG4gICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsLmluZGV4T2YoJyUnKSAhPT0gLTEgPyBkZWNvZGVVUklDb21wb25lbnQodmFsKSA6IHZhbDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5kZXggPSBlbmRJZHggKyAxO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0cy5wYXJzZUNvb2tpZSA9IHBhcnNlQ29va2llO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29va2llLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIFBhcnNlcyBzdHJpbmcgZm9ybSBvZiBVUkwgaW50byBhbiBvYmplY3RcbiAqIC8vIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICogLy8gaW50ZW50aW9uYWxseSB1c2luZyByZWdleCBhbmQgbm90IDxhLz4gaHJlZiBwYXJzaW5nIHRyaWNrIGJlY2F1c2UgUmVhY3QgTmF0aXZlIGFuZCBvdGhlclxuICogLy8gZW52aXJvbm1lbnRzIHdoZXJlIERPTSBtaWdodCBub3QgYmUgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyBwYXJzZWQgVVJMIG9iamVjdFxuICovXG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCgvXigoW146Lz8jXSspOik/KFxcL1xcLyhbXi8/I10qKSk/KFtePyNdKikoXFw/KFteI10qKSk/KCMoLiopKT8kLyk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIGNvZXJjZSB0byB1bmRlZmluZWQgdmFsdWVzIHRvIGVtcHR5IHN0cmluZyBzbyB3ZSBkb24ndCBnZXQgJ3VuZGVmaW5lZCdcbiAgY29uc3QgcXVlcnkgPSBtYXRjaFs2XSB8fCAnJztcbiAgY29uc3QgZnJhZ21lbnQgPSBtYXRjaFs4XSB8fCAnJztcbiAgcmV0dXJuIHtcbiAgICBob3N0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XSxcbiAgICBwcm90b2NvbDogbWF0Y2hbMl0sXG4gICAgc2VhcmNoOiBxdWVyeSxcbiAgICBoYXNoOiBmcmFnbWVudCxcbiAgICByZWxhdGl2ZTogbWF0Y2hbNV0gKyBxdWVyeSArIGZyYWdtZW50LCAvLyBldmVyeXRoaW5nIG1pbnVzIG9yaWdpblxuICB9O1xufVxuXG4vKipcbiAqIFN0cmlwIHRoZSBxdWVyeSBzdHJpbmcgYW5kIGZyYWdtZW50IG9mZiBvZiBhIGdpdmVuIFVSTCBvciBwYXRoIChpZiBwcmVzZW50KVxuICpcbiAqIEBwYXJhbSB1cmxQYXRoIEZ1bGwgVVJMIG9yIHBhdGgsIGluY2x1ZGluZyBwb3NzaWJsZSBxdWVyeSBzdHJpbmcgYW5kL29yIGZyYWdtZW50XG4gKiBAcmV0dXJucyBVUkwgb3IgcGF0aCB3aXRob3V0IHF1ZXJ5IHN0cmluZyBvciBmcmFnbWVudFxuICovXG5mdW5jdGlvbiBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQodXJsUGF0aCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgcmV0dXJuIHVybFBhdGguc3BsaXQoL1tcXD8jXS8sIDEpWzBdO1xufVxuXG4vKipcbiAqIFJldHVybnMgbnVtYmVyIG9mIFVSTCBzZWdtZW50cyBvZiBhIHBhc3NlZCBzdHJpbmcgVVJMLlxuICovXG5mdW5jdGlvbiBnZXROdW1iZXJPZlVybFNlZ21lbnRzKHVybCkge1xuICAvLyBzcGxpdCBhdCAnLycgb3IgYXQgJ1xcLycgdG8gc3BsaXQgcmVnZXggdXJscyBjb3JyZWN0bHlcbiAgcmV0dXJuIHVybC5zcGxpdCgvXFxcXD9cXC8vKS5maWx0ZXIocyA9PiBzLmxlbmd0aCA+IDAgJiYgcyAhPT0gJywnKS5sZW5ndGg7XG59XG5cbi8qKlxuICogVGFrZXMgYSBVUkwgb2JqZWN0IGFuZCByZXR1cm5zIGEgc2FuaXRpemVkIHN0cmluZyB3aGljaCBpcyBzYWZlIHRvIHVzZSBhcyBzcGFuIGRlc2NyaXB0aW9uXG4gKiBzZWU6IGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9kYXRhLWhhbmRsaW5nLyNzdHJ1Y3R1cmluZy1kYXRhXG4gKi9cbmZ1bmN0aW9uIGdldFNhbml0aXplZFVybFN0cmluZyh1cmwpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdCwgcGF0aCB9ID0gdXJsO1xuXG4gIGNvbnN0IGZpbHRlcmVkSG9zdCA9XG4gICAgKGhvc3QgJiZcbiAgICAgIGhvc3RcbiAgICAgICAgLy8gQWx3YXlzIGZpbHRlciBvdXQgYXV0aG9yaXR5XG4gICAgICAgIC5yZXBsYWNlKC9eLipALywgJ1tmaWx0ZXJlZF06W2ZpbHRlcmVkXUAnKVxuICAgICAgICAvLyBEb24ndCBzaG93IHN0YW5kYXJkIDo4MCAoaHR0cCkgYW5kIDo0NDMgKGh0dHBzKSBwb3J0cyB0byByZWR1Y2UgdGhlIG5vaXNlXG4gICAgICAgIC8vIFRPRE86IFVzZSBuZXcgVVJMIGdsb2JhbCBpZiBpdCBleGlzdHNcbiAgICAgICAgLnJlcGxhY2UoLyg6ODApJC8sICcnKVxuICAgICAgICAucmVwbGFjZSgvKDo0NDMpJC8sICcnKSkgfHxcbiAgICAnJztcblxuICByZXR1cm4gYCR7cHJvdG9jb2wgPyBgJHtwcm90b2NvbH06Ly9gIDogJyd9JHtmaWx0ZXJlZEhvc3R9JHtwYXRofWA7XG59XG5cbmV4cG9ydHMuZ2V0TnVtYmVyT2ZVcmxTZWdtZW50cyA9IGdldE51bWJlck9mVXJsU2VnbWVudHM7XG5leHBvcnRzLmdldFNhbml0aXplZFVybFN0cmluZyA9IGdldFNhbml0aXplZFVybFN0cmluZztcbmV4cG9ydHMucGFyc2VVcmwgPSBwYXJzZVVybDtcbmV4cG9ydHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50ID0gc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJsLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb29raWUgPSByZXF1aXJlKCcuL2Nvb2tpZS5qcycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcy5qcycpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnLi9sb2dnZXIuanMnKTtcbmNvbnN0IG5vcm1hbGl6ZSA9IHJlcXVpcmUoJy4vbm9ybWFsaXplLmpzJyk7XG5jb25zdCB1cmwgPSByZXF1aXJlKCcuL3VybC5qcycpO1xuXG5jb25zdCBERUZBVUxUX0lOQ0xVREVTID0ge1xuICBpcDogZmFsc2UsXG4gIHJlcXVlc3Q6IHRydWUsXG4gIHRyYW5zYWN0aW9uOiB0cnVlLFxuICB1c2VyOiB0cnVlLFxufTtcbmNvbnN0IERFRkFVTFRfUkVRVUVTVF9JTkNMVURFUyA9IFsnY29va2llcycsICdkYXRhJywgJ2hlYWRlcnMnLCAnbWV0aG9kJywgJ3F1ZXJ5X3N0cmluZycsICd1cmwnXTtcbmNvbnN0IERFRkFVTFRfVVNFUl9JTkNMVURFUyA9IFsnaWQnLCAndXNlcm5hbWUnLCAnZW1haWwnXTtcblxuLyoqXG4gKiBTZXRzIHBhcmFtZXRlcml6ZWQgcm91dGUgYXMgdHJhbnNhY3Rpb24gbmFtZSBlLmcuOiBgR0VUIC91c2Vycy86aWRgXG4gKiBBbHNvIGFkZHMgbW9yZSBjb250ZXh0IGRhdGEgb24gdGhlIHRyYW5zYWN0aW9uIGZyb20gdGhlIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhpcyB1dGlsaXR5IHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZnVuY3Rpb24gYWRkUmVxdWVzdERhdGFUb1RyYW5zYWN0aW9uKFxuICB0cmFuc2FjdGlvbixcbiAgcmVxLFxuICBkZXBzLFxuKSB7XG4gIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGlmICghdHJhbnNhY3Rpb24ubWV0YWRhdGEuc291cmNlIHx8IHRyYW5zYWN0aW9uLm1ldGFkYXRhLnNvdXJjZSA9PT0gJ3VybCcpIHtcbiAgICAvLyBBdHRlbXB0IHRvIGdyYWIgYSBwYXJhbWV0ZXJpemVkIHJvdXRlIG9mZiBvZiB0aGUgcmVxdWVzdFxuICAgIGNvbnN0IFtuYW1lLCBzb3VyY2VdID0gZXh0cmFjdFBhdGhGb3JUcmFuc2FjdGlvbihyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlIH0pO1xuICAgIHRyYW5zYWN0aW9uLnVwZGF0ZU5hbWUobmFtZSk7XG4gICAgLy8gVE9ETzogU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UgaXMgaW4gY29yZSwgYWxpZ24gdGhpcyBvbmNlIHdlIG1lcmdlIHV0aWxzICYgY29yZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRyYW5zYWN0aW9uLnNldE1ldGFkYXRhKHsgc291cmNlIH0pO1xuICB9XG4gIHRyYW5zYWN0aW9uLnNldEF0dHJpYnV0ZSgndXJsJywgcmVxLm9yaWdpbmFsVXJsIHx8IHJlcS51cmwpO1xuICBpZiAocmVxLmJhc2VVcmwpIHtcbiAgICB0cmFuc2FjdGlvbi5zZXRBdHRyaWJ1dGUoJ2Jhc2VVcmwnLCByZXEuYmFzZVVybCk7XG4gIH1cbiAgLy8gVE9ETzogV2UgbmVlZCB0byByZXdyaXRlIHRoaXMgdG8gYSBmbGF0IGZvcm1hdD9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHRyYW5zYWN0aW9uLnNldERhdGEoJ3F1ZXJ5JywgZXh0cmFjdFF1ZXJ5UGFyYW1zKHJlcSwgZGVwcykpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgY29tcGxldGUgYW5kIHBhcmFtZXRlcml6ZWQgcGF0aCBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdCBhbmQgdXNlcyBpdCB0byBjb25zdHJ1Y3QgdHJhbnNhY3Rpb24gbmFtZS5cbiAqIElmIHRoZSBwYXJhbWV0ZXJpemVkIHRyYW5zYWN0aW9uIG5hbWUgY2Fubm90IGJlIGV4dHJhY3RlZCwgd2UgZmFsbCBiYWNrIHRvIHRoZSByYXcgVVJMLlxuICpcbiAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGFuZCByZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBuYW1lIHNvdXJjZVxuICpcbiAqIGVnLiBHRVQgL21vdW50cG9pbnQvdXNlci86aWRcbiAqXG4gKiBAcGFyYW0gcmVxIEEgcmVxdWVzdCBvYmplY3RcbiAqIEBwYXJhbSBvcHRpb25zIFdoYXQgdG8gaW5jbHVkZSBpbiB0aGUgdHJhbnNhY3Rpb24gbmFtZSAobWV0aG9kLCBwYXRoLCBvciBhIGN1c3RvbSByb3V0ZSBuYW1lIHRvIGJlXG4gKiAgICAgICAgICAgICAgICB1c2VkIGluc3RlYWQgb2YgdGhlIHJlcXVlc3QncyByb3V0ZSlcbiAqXG4gKiBAcmV0dXJucyBBIHR1cGxlIG9mIHRoZSBmdWxseSBjb25zdHJ1Y3RlZCB0cmFuc2FjdGlvbiBuYW1lIFswXSBhbmQgaXRzIHNvdXJjZSBbMV0gKGNhbiBiZSBlaXRoZXIgJ3JvdXRlJyBvciAndXJsJylcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFBhdGhGb3JUcmFuc2FjdGlvbihcbiAgcmVxLFxuICBvcHRpb25zID0ge30sXG4pIHtcbiAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZCAmJiByZXEubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cbiAgbGV0IHBhdGggPSAnJztcbiAgbGV0IHNvdXJjZSA9ICd1cmwnO1xuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGEgcGFyYW1ldGVyaXplZCByb3V0ZSB3ZSBjYW4gdXNlIChhcyB0aGVyZSBpcyBpbiBFeHByZXNzKVxuICBpZiAob3B0aW9ucy5jdXN0b21Sb3V0ZSB8fCByZXEucm91dGUpIHtcbiAgICBwYXRoID0gb3B0aW9ucy5jdXN0b21Sb3V0ZSB8fCBgJHtyZXEuYmFzZVVybCB8fCAnJ30ke3JlcS5yb3V0ZSAmJiByZXEucm91dGUucGF0aH1gO1xuICAgIHNvdXJjZSA9ICdyb3V0ZSc7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIGp1c3QgdGFrZSB0aGUgb3JpZ2luYWwgVVJMXG4gIGVsc2UgaWYgKHJlcS5vcmlnaW5hbFVybCB8fCByZXEudXJsKSB7XG4gICAgcGF0aCA9IHVybC5zdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQocmVxLm9yaWdpbmFsVXJsIHx8IHJlcS51cmwgfHwgJycpO1xuICB9XG5cbiAgbGV0IG5hbWUgPSAnJztcbiAgaWYgKG9wdGlvbnMubWV0aG9kICYmIG1ldGhvZCkge1xuICAgIG5hbWUgKz0gbWV0aG9kO1xuICB9XG4gIGlmIChvcHRpb25zLm1ldGhvZCAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICBuYW1lICs9ICcgJztcbiAgfVxuICBpZiAob3B0aW9ucy5wYXRoICYmIHBhdGgpIHtcbiAgICBuYW1lICs9IHBhdGg7XG4gIH1cblxuICByZXR1cm4gW25hbWUsIHNvdXJjZV07XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gZXh0cmFjdFRyYW5zYWN0aW9uKHJlcSwgdHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdwYXRoJzoge1xuICAgICAgcmV0dXJuIGV4dHJhY3RQYXRoRm9yVHJhbnNhY3Rpb24ocmVxLCB7IHBhdGg6IHRydWUgfSlbMF07XG4gICAgfVxuICAgIGNhc2UgJ2hhbmRsZXInOiB7XG4gICAgICByZXR1cm4gKHJlcS5yb3V0ZSAmJiByZXEucm91dGUuc3RhY2sgJiYgcmVxLnJvdXRlLnN0YWNrWzBdICYmIHJlcS5yb3V0ZS5zdGFja1swXS5uYW1lKSB8fCAnPGFub255bW91cz4nO1xuICAgIH1cbiAgICBjYXNlICdtZXRob2RQYXRoJzpcbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBpZiBleGlzdCBfcmVjb25zdHJ1Y3RlZFJvdXRlIHJldHVybiB0aGF0IHBhdGggaW5zdGVhZCBvZiByb3V0ZS5wYXRoXG4gICAgICBjb25zdCBjdXN0b21Sb3V0ZSA9IHJlcS5fcmVjb25zdHJ1Y3RlZFJvdXRlID8gcmVxLl9yZWNvbnN0cnVjdGVkUm91dGUgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gZXh0cmFjdFBhdGhGb3JUcmFuc2FjdGlvbihyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlLCBjdXN0b21Sb3V0ZSB9KVswXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBleHRyYWN0VXNlckRhdGEoXG4gIHVzZXJcblxuLFxuICBrZXlzLFxuKSB7XG4gIGNvbnN0IGV4dHJhY3RlZFVzZXIgPSB7fTtcbiAgY29uc3QgYXR0cmlidXRlcyA9IEFycmF5LmlzQXJyYXkoa2V5cykgPyBrZXlzIDogREVGQVVMVF9VU0VSX0lOQ0xVREVTO1xuXG4gIGF0dHJpYnV0ZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICh1c2VyICYmIGtleSBpbiB1c2VyKSB7XG4gICAgICBleHRyYWN0ZWRVc2VyW2tleV0gPSB1c2VyW2tleV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXh0cmFjdGVkVXNlcjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgZGF0YSBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdCwgYWNjb3VudGluZyBmb3IgZnJhbWV3b3JrIGRpZmZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSByZXEgVGhlIHJlcXVlc3Qgb2JqZWN0IGZyb20gd2hpY2ggdG8gZXh0cmFjdCBkYXRhXG4gKiBAcGFyYW0gb3B0aW9ucy5pbmNsdWRlIEFuIG9wdGlvbmFsIGFycmF5IG9mIGtleXMgdG8gaW5jbHVkZSBpbiB0aGUgbm9ybWFsaXplZCBkYXRhLiBEZWZhdWx0cyB0b1xuICogREVGQVVMVF9SRVFVRVNUX0lOQ0xVREVTIGlmIG5vdCBwcm92aWRlZC5cbiAqIEBwYXJhbSBvcHRpb25zLmRlcHMgSW5qZWN0ZWQsIHBsYXRmb3JtLXNwZWNpZmljIGRlcGVuZGVuY2llc1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgbm9ybWFsaXplZCByZXF1ZXN0IGRhdGFcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFJlcXVlc3REYXRhKFxuICByZXEsXG4gIG9wdGlvbnNcblxuLFxuKSB7XG4gIGNvbnN0IHsgaW5jbHVkZSA9IERFRkFVTFRfUkVRVUVTVF9JTkNMVURFUywgZGVwcyB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgcmVxdWVzdERhdGEgPSB7fTtcblxuICAvLyBoZWFkZXJzOlxuICAvLyAgIG5vZGUsIGV4cHJlc3MsIGtvYSwgbmV4dGpzOiByZXEuaGVhZGVyc1xuICBjb25zdCBoZWFkZXJzID0gKHJlcS5oZWFkZXJzIHx8IHt9KVxuXG47XG4gIC8vIG1ldGhvZDpcbiAgLy8gICBub2RlLCBleHByZXNzLCBrb2EsIG5leHRqczogcmVxLm1ldGhvZFxuICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kO1xuICAvLyBob3N0OlxuICAvLyAgIGV4cHJlc3M6IHJlcS5ob3N0bmFtZSBpbiA+IDQgYW5kIHJlcS5ob3N0IGluIDwgNFxuICAvLyAgIGtvYTogcmVxLmhvc3RcbiAgLy8gICBub2RlLCBuZXh0anM6IHJlcS5oZWFkZXJzLmhvc3RcbiAgLy8gRXhwcmVzcyA0IG1pc3Rha2VubHkgc3RyaXBzIG9mZiBwb3J0IG51bWJlciBmcm9tIHJlcS5ob3N0IC8gcmVxLmhvc3RuYW1lIHNvIHdlIGNhbid0IHJlbHkgb24gdGhlbVxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9leHByZXNzanMvZXhwcmVzcy9pc3N1ZXMvMzA0NyNpc3N1ZWNvbW1lbnQtMjM2NjUzMjIzXG4gIC8vIEFsc286IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzE5MTdcbiAgY29uc3QgaG9zdCA9IGhlYWRlcnMuaG9zdCB8fCByZXEuaG9zdG5hbWUgfHwgcmVxLmhvc3QgfHwgJzxubyBob3N0Pic7XG4gIC8vIHByb3RvY29sOlxuICAvLyAgIG5vZGUsIG5leHRqczogPG4vYT5cbiAgLy8gICBleHByZXNzLCBrb2E6IHJlcS5wcm90b2NvbFxuICBjb25zdCBwcm90b2NvbCA9IHJlcS5wcm90b2NvbCA9PT0gJ2h0dHBzJyB8fCAocmVxLnNvY2tldCAmJiByZXEuc29ja2V0LmVuY3J5cHRlZCkgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAvLyB1cmwgKGluY2x1ZGluZyBwYXRoIGFuZCBxdWVyeSBzdHJpbmcpOlxuICAvLyAgIG5vZGUsIGV4cHJlc3M6IHJlcS5vcmlnaW5hbFVybFxuICAvLyAgIGtvYSwgbmV4dGpzOiByZXEudXJsXG4gIGNvbnN0IG9yaWdpbmFsVXJsID0gcmVxLm9yaWdpbmFsVXJsIHx8IHJlcS51cmwgfHwgJyc7XG4gIC8vIGFic29sdXRlIHVybFxuICBjb25zdCBhYnNvbHV0ZVVybCA9IG9yaWdpbmFsVXJsLnN0YXJ0c1dpdGgocHJvdG9jb2wpID8gb3JpZ2luYWxVcmwgOiBgJHtwcm90b2NvbH06Ly8ke2hvc3R9JHtvcmlnaW5hbFVybH1gO1xuICBpbmNsdWRlLmZvckVhY2goa2V5ID0+IHtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnaGVhZGVycyc6IHtcbiAgICAgICAgcmVxdWVzdERhdGEuaGVhZGVycyA9IGhlYWRlcnM7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBDb29raWUgaGVhZGVyIGluIGNhc2UgY29va2llIGRhdGEgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZXZlbnRcbiAgICAgICAgaWYgKCFpbmNsdWRlLmluY2x1ZGVzKCdjb29raWVzJykpIHtcbiAgICAgICAgICBkZWxldGUgKHJlcXVlc3REYXRhLmhlYWRlcnMgKS5jb29raWU7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21ldGhvZCc6IHtcbiAgICAgICAgcmVxdWVzdERhdGEubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VybCc6IHtcbiAgICAgICAgcmVxdWVzdERhdGEudXJsID0gYWJzb2x1dGVVcmw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29va2llcyc6IHtcbiAgICAgICAgLy8gY29va2llczpcbiAgICAgICAgLy8gICBub2RlLCBleHByZXNzLCBrb2E6IHJlcS5oZWFkZXJzLmNvb2tpZVxuICAgICAgICAvLyAgIHZlcmNlbCwgc2FpbHMuanMsIGV4cHJlc3MgKHcvIGNvb2tpZSBtaWRkbGV3YXJlKSwgbmV4dGpzOiByZXEuY29va2llc1xuICAgICAgICByZXF1ZXN0RGF0YS5jb29raWVzID1cbiAgICAgICAgICAvLyBUT0RPICh2OCAvICM1MjU3KTogV2UncmUgb25seSBzZW5kaW5nIHRoZSBlbXB0eSBvYmplY3QgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBzbyB0aGUgbGFzdCBiaXQgY2FuXG4gICAgICAgICAgLy8gY29tZSBvZmYgaW4gdjhcbiAgICAgICAgICByZXEuY29va2llcyB8fCAoaGVhZGVycy5jb29raWUgJiYgY29va2llLnBhcnNlQ29va2llKGhlYWRlcnMuY29va2llKSkgfHwge307XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncXVlcnlfc3RyaW5nJzoge1xuICAgICAgICAvLyBxdWVyeSBzdHJpbmc6XG4gICAgICAgIC8vICAgbm9kZTogcmVxLnVybCAocmF3KVxuICAgICAgICAvLyAgIGV4cHJlc3MsIGtvYSwgbmV4dGpzOiByZXEucXVlcnlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICByZXF1ZXN0RGF0YS5xdWVyeV9zdHJpbmcgPSBleHRyYWN0UXVlcnlQYXJhbXMocmVxLCBkZXBzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkYXRhJzoge1xuICAgICAgICBpZiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJvZHkgZGF0YTpcbiAgICAgICAgLy8gICBleHByZXNzLCBrb2EsIG5leHRqczogcmVxLmJvZHlcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICB3aGVuIHVzaW5nIG5vZGUgYnkgaXRzZWxmLCB5b3UgaGF2ZSB0byByZWFkIHRoZSBpbmNvbWluZyBzdHJlYW0oc2VlXG4gICAgICAgIC8vICAgaHR0cHM6Ly9ub2RlanMuZGV2L2xlYXJuL2dldC1odHRwLXJlcXVlc3QtYm9keS1kYXRhLXVzaW5nLW5vZGVqcyk7IGlmIGEgdXNlciBpcyBkb2luZyB0aGF0LCB3ZSBjYW4ndCBrbm93XG4gICAgICAgIC8vICAgd2hlcmUgdGhleSdyZSBnb2luZyB0byBzdG9yZSB0aGUgZmluYWwgcmVzdWx0LCBzbyB0aGV5J2xsIGhhdmUgdG8gY2FwdHVyZSB0aGlzIGRhdGEgdGhlbXNlbHZlc1xuICAgICAgICBpZiAocmVxLmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlcXVlc3REYXRhLmRhdGEgPSBpcy5pc1N0cmluZyhyZXEuYm9keSkgPyByZXEuYm9keSA6IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZS5ub3JtYWxpemUocmVxLmJvZHkpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwocmVxLCBrZXkpKSB7XG4gICAgICAgICAgcmVxdWVzdERhdGFba2V5XSA9IChyZXEgKVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVxdWVzdERhdGE7XG59XG5cbi8qKlxuICogQWRkIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gcmVxdWVzdCB0byB0aGUgZ2l2ZW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHdoaWNoIHRoZSByZXF1ZXN0IGRhdGEgd2lsbCBiZSBhZGRlZFxuICogQHBhcmFtIHJlcSBSZXF1ZXN0IG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMuaW5jbHVkZSBGbGFncyB0byBjb250cm9sIHdoYXQgZGF0YSBpcyBpbmNsdWRlZFxuICogQHBhcmFtIG9wdGlvbnMuZGVwcyBJbmplY3RlZCBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXNcbiAqIEByZXR1cm5zIFRoZSBtdXRhdGVkIGBFdmVudGAgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFkZFJlcXVlc3REYXRhVG9FdmVudChcbiAgZXZlbnQsXG4gIHJlcSxcbiAgb3B0aW9ucyxcbikge1xuICBjb25zdCBpbmNsdWRlID0ge1xuICAgIC4uLkRFRkFVTFRfSU5DTFVERVMsXG4gICAgLi4uKG9wdGlvbnMgJiYgb3B0aW9ucy5pbmNsdWRlKSxcbiAgfTtcblxuICBpZiAoaW5jbHVkZS5yZXF1ZXN0KSB7XG4gICAgY29uc3QgZXh0cmFjdGVkUmVxdWVzdERhdGEgPSBBcnJheS5pc0FycmF5KGluY2x1ZGUucmVxdWVzdClcbiAgICAgID8gZXh0cmFjdFJlcXVlc3REYXRhKHJlcSwgeyBpbmNsdWRlOiBpbmNsdWRlLnJlcXVlc3QsIGRlcHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5kZXBzIH0pXG4gICAgICA6IGV4dHJhY3RSZXF1ZXN0RGF0YShyZXEsIHsgZGVwczogb3B0aW9ucyAmJiBvcHRpb25zLmRlcHMgfSk7XG5cbiAgICBldmVudC5yZXF1ZXN0ID0ge1xuICAgICAgLi4uZXZlbnQucmVxdWVzdCxcbiAgICAgIC4uLmV4dHJhY3RlZFJlcXVlc3REYXRhLFxuICAgIH07XG4gIH1cblxuICBpZiAoaW5jbHVkZS51c2VyKSB7XG4gICAgY29uc3QgZXh0cmFjdGVkVXNlciA9IHJlcS51c2VyICYmIGlzLmlzUGxhaW5PYmplY3QocmVxLnVzZXIpID8gZXh0cmFjdFVzZXJEYXRhKHJlcS51c2VyLCBpbmNsdWRlLnVzZXIpIDoge307XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZXh0cmFjdGVkVXNlcikubGVuZ3RoKSB7XG4gICAgICBldmVudC51c2VyID0ge1xuICAgICAgICAuLi5ldmVudC51c2VyLFxuICAgICAgICAuLi5leHRyYWN0ZWRVc2VyLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjbGllbnQgaXA6XG4gIC8vICAgbm9kZSwgbmV4dGpzOiByZXEuc29ja2V0LnJlbW90ZUFkZHJlc3NcbiAgLy8gICBleHByZXNzLCBrb2E6IHJlcS5pcFxuICBpZiAoaW5jbHVkZS5pcCkge1xuICAgIGNvbnN0IGlwID0gcmVxLmlwIHx8IChyZXEuc29ja2V0ICYmIHJlcS5zb2NrZXQucmVtb3RlQWRkcmVzcyk7XG4gICAgaWYgKGlwKSB7XG4gICAgICBldmVudC51c2VyID0ge1xuICAgICAgICAuLi5ldmVudC51c2VyLFxuICAgICAgICBpcF9hZGRyZXNzOiBpcCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGluY2x1ZGUudHJhbnNhY3Rpb24gJiYgIWV2ZW50LnRyYW5zYWN0aW9uKSB7XG4gICAgLy8gVE9ETyBkbyB3ZSBldmVuIG5lZWQgdGhpcyBhbnltb3JlP1xuICAgIC8vIFRPRE8gbWFrZSB0aGlzIHdvcmsgZm9yIG5leHRqc1xuICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gZXh0cmFjdFRyYW5zYWN0aW9uKHJlcSwgaW5jbHVkZS50cmFuc2FjdGlvbik7XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RRdWVyeVBhcmFtcyhcbiAgcmVxLFxuICBkZXBzLFxuKSB7XG4gIC8vIHVybCAoaW5jbHVkaW5nIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyk6XG4gIC8vICAgbm9kZSwgZXhwcmVzczogcmVxLm9yaWdpbmFsVXJsXG4gIC8vICAga29hLCBuZXh0anM6IHJlcS51cmxcbiAgbGV0IG9yaWdpbmFsVXJsID0gcmVxLm9yaWdpbmFsVXJsIHx8IHJlcS51cmwgfHwgJyc7XG5cbiAgaWYgKCFvcmlnaW5hbFVybCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSBgVVJMYCBjb25zdHJ1Y3RvciBjYW4ndCBoYW5kbGUgaW50ZXJuYWwgVVJMcyBvZiB0aGUgZm9ybSBgL3NvbWUvcGF0aC9oZXJlYCwgc28gc3RpY2sgYSBkdW1teSBwcm90b2NvbCBhbmRcbiAgLy8gaG9zdG5hbWUgb24gdGhlIGJlZ2lubmluZy4gU2luY2UgdGhlIHBvaW50IGhlcmUgaXMganVzdCB0byBncmFiIHRoZSBxdWVyeSBzdHJpbmcsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgdXNlLlxuICBpZiAob3JpZ2luYWxVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgb3JpZ2luYWxVcmwgPSBgaHR0cDovL2RvZ3MuYXJlLmdyZWF0JHtvcmlnaW5hbFVybH1gO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgcmVxLnF1ZXJ5IHx8XG4gICAgICAodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV3IFVSTChvcmlnaW5hbFVybCkuc2VhcmNoLnNsaWNlKDEpKSB8fFxuICAgICAgLy8gSW4gTm9kZSA4LCBgVVJMYCBpc24ndCBpbiB0aGUgZ2xvYmFsIHNjb3BlLCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUgYnVpbHQtaW4gbW9kdWxlIGZyb20gTm9kZVxuICAgICAgKGRlcHMgJiYgZGVwcy51cmwgJiYgZGVwcy51cmwucGFyc2Uob3JpZ2luYWxVcmwpLnF1ZXJ5KSB8fFxuICAgICAgdW5kZWZpbmVkXG4gICAgKTtcbiAgfSBjYXRjaCAoZTIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIGBIZWFkZXJzYCBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBgV2ViIEZldGNoIEFQSWAgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IZWFkZXJzKSBpbnRvIGEgc2ltcGxlIGtleS12YWx1ZSBkaWN0LlxuICogVGhlIGhlYWRlciBrZXlzIHdpbGwgYmUgbG93ZXIgY2FzZTogZS5nLiBBIFwiQ29udGVudC1UeXBlXCIgaGVhZGVyIHdpbGwgYmUgc3RvcmVkIGFzIFwiY29udGVudC10eXBlXCIuXG4gKi9cbi8vIFRPRE8odjgpOiBNYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHVuZGVmaW5lZCB3aGVuIHRoZSBleHRyYWN0aW9uIGZhaWxzLlxuZnVuY3Rpb24gd2ludGVyQ0dIZWFkZXJzVG9EaWN0KHdpbnRlckNHSGVhZGVycykge1xuICBjb25zdCBoZWFkZXJzID0ge307XG4gIHRyeSB7XG4gICAgd2ludGVyQ0dIZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFdlIGNoZWNrIHRoYXQgdmFsdWUgaXMgYSBzdHJpbmcgZXZlbiB0aG91Z2ggaXQgbWlnaHQgYmUgcmVkdW5kYW50IHRvIG1ha2Ugc3VyZSBwcm90b3R5cGUgcG9sbHV0aW9uIGlzIG5vdCBwb3NzaWJsZS5cbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICBsb2dnZXIubG9nZ2VyLndhcm4oJ1NlbnRyeSBmYWlsZWQgZXh0cmFjdGluZyBoZWFkZXJzIGZyb20gYSByZXF1ZXN0IG9iamVjdC4gSWYgeW91IHNlZSB0aGlzLCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYFJlcXVlc3RgIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGBXZWIgRmV0Y2ggQVBJYCAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMpIGludG8gdGhlIGZvcm1hdCB0aGF0IHRoZSBgUmVxdWVzdERhdGFgIGludGVncmF0aW9uIHVuZGVyc3RhbmRzLlxuICovXG5mdW5jdGlvbiB3aW50ZXJDR1JlcXVlc3RUb1JlcXVlc3REYXRhKHJlcSkge1xuICBjb25zdCBoZWFkZXJzID0gd2ludGVyQ0dIZWFkZXJzVG9EaWN0KHJlcS5oZWFkZXJzKTtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgdXJsOiByZXEudXJsLFxuICAgIGhlYWRlcnMsXG4gIH07XG59XG5cbmV4cG9ydHMuREVGQVVMVF9VU0VSX0lOQ0xVREVTID0gREVGQVVMVF9VU0VSX0lOQ0xVREVTO1xuZXhwb3J0cy5hZGRSZXF1ZXN0RGF0YVRvRXZlbnQgPSBhZGRSZXF1ZXN0RGF0YVRvRXZlbnQ7XG5leHBvcnRzLmFkZFJlcXVlc3REYXRhVG9UcmFuc2FjdGlvbiA9IGFkZFJlcXVlc3REYXRhVG9UcmFuc2FjdGlvbjtcbmV4cG9ydHMuZXh0cmFjdFBhdGhGb3JUcmFuc2FjdGlvbiA9IGV4dHJhY3RQYXRoRm9yVHJhbnNhY3Rpb247XG5leHBvcnRzLmV4dHJhY3RSZXF1ZXN0RGF0YSA9IGV4dHJhY3RSZXF1ZXN0RGF0YTtcbmV4cG9ydHMud2ludGVyQ0dIZWFkZXJzVG9EaWN0ID0gd2ludGVyQ0dIZWFkZXJzVG9EaWN0O1xuZXhwb3J0cy53aW50ZXJDR1JlcXVlc3RUb1JlcXVlc3REYXRhID0gd2ludGVyQ0dSZXF1ZXN0VG9SZXF1ZXN0RGF0YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3RkYXRhLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBOb3RlOiBJZGVhbGx5IHRoZSBgU2V2ZXJpdHlMZXZlbGAgdHlwZSB3b3VsZCBiZSBkZXJpdmVkIGZyb20gYHZhbGlkU2V2ZXJpdHlMZXZlbHNgLCBidXQgdGhhdCB3b3VsZCBtZWFuIGVpdGhlclxuLy9cbi8vIGEpIG1vdmluZyBgdmFsaWRTZXZlcml0eUxldmVsc2AgdG8gYEBzZW50cnkvdHlwZXNgLFxuLy8gYikgbW92aW5nIHRoZWBTZXZlcml0eUxldmVsYCB0eXBlIGhlcmUsIG9yXG4vLyBjKSBpbXBvcnRpbmcgYHZhbGlkU2V2ZXJpdHlMZXZlbHNgIGZyb20gaGVyZSBpbnRvIGBAc2VudHJ5L3R5cGVzYC5cbi8vXG4vLyBPcHRpb24gQSB3b3VsZCBtYWtlIGBAc2VudHJ5L3R5cGVzYCBhIHJ1bnRpbWUgZGVwZW5kZW5jeSBvZiBgQHNlbnRyeS91dGlsc2AgKG5vdCBnb29kKSwgYW5kIG9wdGlvbnMgQiBhbmQgQyB3b3VsZFxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGBAc2VudHJ5L3R5cGVzYCBhbmQgYEBzZW50cnkvdXRpbHNgIChhbHNvIG5vdCBnb29kKS4gU28gYSBUT0RPIGFjY29tcGFueWluZyB0aGVcbi8vIHR5cGUsIHJlbWluZGluZyBhbnlvbmUgd2hvIGNoYW5nZXMgaXQgdG8gY2hhbmdlIHRoaXMgbGlzdCBhbHNvLCB3aWxsIGhhdmUgdG8gZG8uXG5cbmNvbnN0IHZhbGlkU2V2ZXJpdHlMZXZlbHMgPSBbJ2ZhdGFsJywgJ2Vycm9yJywgJ3dhcm5pbmcnLCAnbG9nJywgJ2luZm8nLCAnZGVidWcnXTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZy1iYXNlZCBsZXZlbCBpbnRvIGEgbWVtYmVyIG9mIHRoZSBkZXByZWNhdGVkIHtAbGluayBTZXZlcml0eX0gZW51bS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBgc2V2ZXJpdHlGcm9tU3RyaW5nYCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGBzZXZlcml0eUxldmVsRnJvbVN0cmluZ2AgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gbGV2ZWwgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFNldmVyaXR5XG4gKiBAcmV0dXJucyBTZXZlcml0eVxuICovXG5mdW5jdGlvbiBzZXZlcml0eUZyb21TdHJpbmcobGV2ZWwpIHtcbiAgcmV0dXJuIHNldmVyaXR5TGV2ZWxGcm9tU3RyaW5nKGxldmVsKSA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmctYmFzZWQgbGV2ZWwgaW50byBhIGBTZXZlcml0eUxldmVsYCwgbm9ybWFsaXppbmcgaXQgYWxvbmcgdGhlIHdheS5cbiAqXG4gKiBAcGFyYW0gbGV2ZWwgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGRlc2lyZWQgYFNldmVyaXR5TGV2ZWxgLlxuICogQHJldHVybnMgVGhlIGBTZXZlcml0eUxldmVsYCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBzdHJpbmcsIG9yICdsb2cnIGlmIHRoZSBzdHJpbmcgaXNuJ3QgYSB2YWxpZCBsZXZlbC5cbiAqL1xuZnVuY3Rpb24gc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcobGV2ZWwpIHtcbiAgcmV0dXJuIChsZXZlbCA9PT0gJ3dhcm4nID8gJ3dhcm5pbmcnIDogdmFsaWRTZXZlcml0eUxldmVscy5pbmNsdWRlcyhsZXZlbCkgPyBsZXZlbCA6ICdsb2cnKSA7XG59XG5cbmV4cG9ydHMuc2V2ZXJpdHlGcm9tU3RyaW5nID0gc2V2ZXJpdHlGcm9tU3RyaW5nO1xuZXhwb3J0cy5zZXZlcml0eUxldmVsRnJvbVN0cmluZyA9IHNldmVyaXR5TGV2ZWxGcm9tU3RyaW5nO1xuZXhwb3J0cy52YWxpZFNldmVyaXR5TGV2ZWxzID0gdmFsaWRTZXZlcml0eUxldmVscztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldmVyaXR5LmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuL3dvcmxkd2lkZS5qcycpO1xuXG5jb25zdCBPTkVfU0VDT05EX0lOX01TID0gMTAwMDtcblxuLyoqXG4gKiBBIHBhcnRpYWwgZGVmaW5pdGlvbiBvZiB0aGUgW1BlcmZvcm1hbmNlIFdlYiBBUElde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QZXJmb3JtYW5jZX1cbiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS5cbiAqXG4gKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuXG4gKi9cbmZ1bmN0aW9uIGRhdGVUaW1lc3RhbXBJblNlY29uZHMoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdFxuICogc3VwcG9ydCB0aGUgQVBJLlxuICpcbiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7XG4gIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHdvcmxkd2lkZS5HTE9CQUxfT0JKIDtcbiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgcmV0dXJuIGRhdGVUaW1lc3RhbXBJblNlY29uZHM7XG4gIH1cblxuICAvLyBTb21lIGJyb3dzZXIgYW5kIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGEgdGltZU9yaWdpbiwgc28gd2UgZmFsbGJhY2sgdG9cbiAgLy8gdXNpbmcgRGF0ZS5ub3coKSB0byBjb21wdXRlIHRoZSBzdGFydGluZyB0aW1lLlxuICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHRpbWVPcmlnaW4gPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09IHVuZGVmaW5lZCA/IGFwcHJveFN0YXJ0aW5nVGltZU9yaWdpbiA6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47XG5cbiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnRcbiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC5cbiAgLy9cbiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZVxuICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZFxuICAvLyBjb3JyZWN0IGZvciB0aGlzLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTBcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTNcbiAgLy8gU2VlOiBodHRwczovL2Rldi50by9ub2Ftci93aGVuLWEtbWlsbGlzZWNvbmQtaXMtbm90LWEtbWlsbGlzZWNvbmQtM2g2XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUztcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGVcbiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLlxuICpcbiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpc1xuICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlXG4gKiBza2V3IGNhbiBncm93IHRvIGFyYml0cmFyeSBhbW91bnRzIGxpa2UgZGF5cywgd2Vla3Mgb3IgbW9udGhzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuXG4gKi9cbmNvbnN0IHRpbWVzdGFtcEluU2Vjb25kcyA9IGNyZWF0ZVVuaXhUaW1lc3RhbXBJblNlY29uZHNGdW5jKCk7XG5cbi8qKlxuICogUmUtZXhwb3J0ZWQgd2l0aCBhbiBvbGQgbmFtZSBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuXG4gKiBUT0RPICh2OCk6IFJlbW92ZSB0aGlzXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGB0aW1lc3RhbXBJblNlY29uZHNgIGluc3RlYWQuXG4gKi9cbmNvbnN0IHRpbWVzdGFtcFdpdGhNcyA9IHRpbWVzdGFtcEluU2Vjb25kcztcblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgdG8gc3RvcmUgd2hhdCBpcyB0aGUgc291cmNlIG9mIGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gYmVsb3cuIEZvciBkZWJ1Z2dpbmcgb25seS5cbiAqL1xuZXhwb3J0cy5fYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUgPSB2b2lkIDA7XG5cbi8qKlxuICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guIFRoaXMgdmFsdWUgaXMgb25seSB1c2FibGUgaW4gYSBicm93c2VyLCBhbmQgb25seSB3aGVuIHRoZVxuICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS5cbiAqL1xuY29uc3QgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiA9ICgoKSA9PiB7XG4gIC8vIFVuZm9ydHVuYXRlbHkgYnJvd3NlcnMgbWF5IHJlcG9ydCBhbiBpbmFjY3VyYXRlIHRpbWUgb3JpZ2luIGRhdGEsIHRocm91Z2ggZWl0aGVyIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gb3JcbiAgLy8gcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCwgd2hpY2ggcmVzdWx0cyBpbiBwb29yIHJlc3VsdHMgaW4gcGVyZm9ybWFuY2UgZGF0YS4gV2Ugb25seSB0cmVhdCB0aW1lIG9yaWdpblxuICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuXG5cbiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gd29ybGR3aWRlLkdMT0JBTF9PQkogO1xuICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICBleHBvcnRzLl9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZSA9ICdub25lJztcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGhyZXNob2xkID0gMzYwMCAqIDEwMDA7XG4gIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpO1xuXG4gIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZFxuICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luXG4gICAgPyBNYXRoLmFicyhwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KVxuICAgIDogdGhyZXNob2xkO1xuICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDtcblxuICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpblxuICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy5cbiAgLy8gQWxzbyBhcyBvZiB3cml0aW5nLCBwZXJmb3JtYW5jZS50aW1pbmcgaXMgbm90IGF2YWlsYWJsZSBpbiBXZWIgV29ya2VycyBpbiBtYWluc3RyZWFtIGJyb3dzZXJzLCBzbyBpdCBpcyBub3QgYWx3YXlzXG4gIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZVxuICAvLyBEYXRlIEFQSS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0O1xuICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJztcbiAgLy8gaWYgbmF2aWdhdGlvblN0YXJ0IGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWRcbiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkO1xuICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7XG5cbiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHtcbiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW5cbiAgICBpZiAodGltZU9yaWdpbkRlbHRhIDw9IG5hdmlnYXRpb25TdGFydERlbHRhKSB7XG4gICAgICBleHBvcnRzLl9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZSA9ICd0aW1lT3JpZ2luJztcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLl9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZSA9ICduYXZpZ2F0aW9uU3RhcnQnO1xuICAgICAgcmV0dXJuIG5hdmlnYXRpb25TdGFydDtcbiAgICB9XG4gIH1cblxuICAvLyBFaXRoZXIgYm90aCB0aW1lT3JpZ2luIGFuZCBuYXZpZ2F0aW9uU3RhcnQgYXJlIHNrZXdlZCBvciBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgZmFsbGJhY2sgdG8gRGF0ZS5cbiAgZXhwb3J0cy5fYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUgPSAnZGF0ZU5vdyc7XG4gIHJldHVybiBkYXRlTm93O1xufSkoKTtcblxuZXhwb3J0cy5icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luID0gYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbjtcbmV4cG9ydHMuZGF0ZVRpbWVzdGFtcEluU2Vjb25kcyA9IGRhdGVUaW1lc3RhbXBJblNlY29uZHM7XG5leHBvcnRzLnRpbWVzdGFtcEluU2Vjb25kcyA9IHRpbWVzdGFtcEluU2Vjb25kcztcbmV4cG9ydHMudGltZXN0YW1wV2l0aE1zID0gdGltZXN0YW1wV2l0aE1zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcy5qcycpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnLi9sb2dnZXIuanMnKTtcblxuY29uc3QgQkFHR0FHRV9IRUFERVJfTkFNRSA9ICdiYWdnYWdlJztcblxuY29uc3QgU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWCA9ICdzZW50cnktJztcblxuY29uc3QgU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWF9SRUdFWCA9IC9ec2VudHJ5LS87XG5cbi8qKlxuICogTWF4IGxlbmd0aCBvZiBhIHNlcmlhbGl6ZWQgYmFnZ2FnZSBzdHJpbmdcbiAqXG4gKiBodHRwczovL3d3dy53My5vcmcvVFIvYmFnZ2FnZS8jbGltaXRzXG4gKi9cbmNvbnN0IE1BWF9CQUdHQUdFX1NUUklOR19MRU5HVEggPSA4MTkyO1xuXG4vKipcbiAqIFRha2VzIGEgYmFnZ2FnZSBoZWFkZXIgYW5kIHR1cm5zIGl0IGludG8gRHluYW1pYyBTYW1wbGluZyBDb250ZXh0LCBieSBleHRyYWN0aW5nIGFsbCB0aGUgXCJzZW50cnktXCIgcHJlZml4ZWQgdmFsdWVzXG4gKiBmcm9tIGl0LlxuICpcbiAqIEBwYXJhbSBiYWdnYWdlSGVhZGVyIEEgdmVyeSBicmVhZCBkZWZpbml0aW9uIG9mIGEgYmFnZ2FnZSBoZWFkZXIgYXMgaXQgbWlnaHQgYXBwZWFyIGluIHZhcmlvdXMgZnJhbWV3b3Jrcy5cbiAqIEByZXR1cm5zIFRoZSBEeW5hbWljIFNhbXBsaW5nIENvbnRleHQgdGhhdCB3YXMgZm91bmQgb24gYGJhZ2dhZ2VIZWFkZXJgLCBpZiB0aGVyZSB3YXMgYW55LCBgdW5kZWZpbmVkYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGJhZ2dhZ2VIZWFkZXJUb0R5bmFtaWNTYW1wbGluZ0NvbnRleHQoXG4gIC8vIFZlcnkgbGliZXJhbCBkZWZpbml0aW9uIG9mIHdoYXQgYW55IGluY29taW5nIGhlYWRlciBtaWdodCBsb29rIGxpa2VcbiAgYmFnZ2FnZUhlYWRlcixcbikge1xuICBpZiAoIWlzLmlzU3RyaW5nKGJhZ2dhZ2VIZWFkZXIpICYmICFBcnJheS5pc0FycmF5KGJhZ2dhZ2VIZWFkZXIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEludGVybWVkaWFyeSBvYmplY3QgdG8gc3RvcmUgYmFnZ2FnZSBrZXkgdmFsdWUgcGFpcnMgb2YgaW5jb21pbmcgYmFnZ2FnZSBoZWFkZXJzIG9uLlxuICAvLyBJdCBpcyBsYXRlciB1c2VkIHRvIHJlYWQgU2VudHJ5LURTQy12YWx1ZXMgZnJvbS5cbiAgbGV0IGJhZ2dhZ2VPYmplY3QgPSB7fTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShiYWdnYWdlSGVhZGVyKSkge1xuICAgIC8vIENvbWJpbmUgYWxsIGJhZ2dhZ2UgaGVhZGVycyBpbnRvIG9uZSBvYmplY3QgY29udGFpbmluZyB0aGUgYmFnZ2FnZSB2YWx1ZXMgc28gd2UgY2FuIGxhdGVyIHJlYWQgdGhlIFNlbnRyeS1EU0MtdmFsdWVzIGZyb20gaXRcbiAgICBiYWdnYWdlT2JqZWN0ID0gYmFnZ2FnZUhlYWRlci5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgY29uc3QgY3VyckJhZ2dhZ2VPYmplY3QgPSBiYWdnYWdlSGVhZGVyVG9PYmplY3QoY3Vycik7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjdXJyQmFnZ2FnZU9iamVjdCkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBjdXJyQmFnZ2FnZU9iamVjdFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBiYWdnYWdlIGhlYWRlciBpcyBhbiBlbXB0eSBzdHJpbmcgKHRlY2huaWNhbGx5IGFuIGVtcHR5IGJhZ2dhZ2UgaGVhZGVyIGlzIG5vdCBzcGVjIGNvbmZvcm0gYnV0XG4gICAgLy8gdGhpcyBpcyBob3cgd2UgY2hvb3NlIHRvIGhhbmRsZSBpdClcbiAgICBpZiAoIWJhZ2dhZ2VIZWFkZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgYmFnZ2FnZU9iamVjdCA9IGJhZ2dhZ2VIZWFkZXJUb09iamVjdChiYWdnYWdlSGVhZGVyKTtcbiAgfVxuXG4gIC8vIFJlYWQgYWxsIFwic2VudHJ5LVwiIHByZWZpeGVkIHZhbHVlcyBvdXQgb2YgdGhlIGJhZ2dhZ2Ugb2JqZWN0IGFuZCBwdXQgaXQgb250byBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBvYmplY3QuXG4gIGNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBPYmplY3QuZW50cmllcyhiYWdnYWdlT2JqZWN0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYgKGtleS5tYXRjaChTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYX1JFR0VYKSkge1xuICAgICAgY29uc3Qgbm9uUHJlZml4ZWRLZXkgPSBrZXkuc2xpY2UoU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgYWNjW25vblByZWZpeGVkS2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gT25seSByZXR1cm4gYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgb2JqZWN0IGlmIHRoZXJlIGFyZSBrZXlzIGluIGl0LlxuICAvLyBBIGtleWxlc3Mgb2JqZWN0IG1lYW5zIHRoZXJlIHdlcmUgbm8gc2VudHJ5IHZhbHVlcyBvbiB0aGUgaGVhZGVyLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIERTQy5cbiAgaWYgKE9iamVjdC5rZXlzKGR5bmFtaWNTYW1wbGluZ0NvbnRleHQpLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZHluYW1pY1NhbXBsaW5nQ29udGV4dCA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFR1cm5zIGEgRHluYW1pYyBTYW1wbGluZyBPYmplY3QgaW50byBhIGJhZ2dhZ2UgaGVhZGVyIGJ5IHByZWZpeGluZyBhbGwgdGhlIGtleXMgb24gdGhlIG9iamVjdCB3aXRoIFwic2VudHJ5LVwiLlxuICpcbiAqIEBwYXJhbSBkeW5hbWljU2FtcGxpbmdDb250ZXh0IFRoZSBEeW5hbWljIFNhbXBsaW5nIENvbnRleHQgdG8gdHVybiBpbnRvIGEgaGVhZGVyLiBGb3IgY29udmVuaWVuY2UgYW5kIGNvbXBhdGliaWxpdHlcbiAqIHdpdGggdGhlIGBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0YCBtZXRob2Qgb24gdGhlIFRyYW5zYWN0aW9uIGNsYXNzICx0aGlzIGFyZ3VtZW50IGNhbiBhbHNvIGJlIGB1bmRlZmluZWRgLiBJZiBpdCBpc1xuICogYHVuZGVmaW5lZGAgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgYSBiYWdnYWdlIGhlYWRlciwgY3JlYXRlZCBmcm9tIGBkeW5hbWljU2FtcGxpbmdDb250ZXh0YCwgb3IgYHVuZGVmaW5lZGAgZWl0aGVyIGlmIGBkeW5hbWljU2FtcGxpbmdDb250ZXh0YFxuICogd2FzIGB1bmRlZmluZWRgLCBvciBpZiBgZHluYW1pY1NhbXBsaW5nQ29udGV4dGAgZGlkbid0IGNvbnRhaW4gYW55IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlcihcbiAgLy8gdGhpcyBhbHNvIHRha2VzIHVuZGVmaW5lZCBmb3IgY29udmVuaWVuY2UgYW5kIGJ1bmRsZSBzaXplIGluIG90aGVyIHBsYWNlc1xuICBkeW5hbWljU2FtcGxpbmdDb250ZXh0LFxuKSB7XG4gIGlmICghZHluYW1pY1NhbXBsaW5nQ29udGV4dCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBQcmVmaXggYWxsIERTQyBrZXlzIHdpdGggXCJzZW50cnktXCIgYW5kIHB1dCB0aGVtIGludG8gYSBuZXcgb2JqZWN0XG4gIGNvbnN0IHNlbnRyeVByZWZpeGVkRFNDID0gT2JqZWN0LmVudHJpZXMoZHluYW1pY1NhbXBsaW5nQ29udGV4dCkucmVkdWNlKFxuICAgIChhY2MsIFtkc2NLZXksIGRzY1ZhbHVlXSkgPT4ge1xuICAgICAgaWYgKGRzY1ZhbHVlKSB7XG4gICAgICAgIGFjY1tgJHtTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYfSR7ZHNjS2V5fWBdID0gZHNjVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30sXG4gICk7XG5cbiAgcmV0dXJuIG9iamVjdFRvQmFnZ2FnZUhlYWRlcihzZW50cnlQcmVmaXhlZERTQyk7XG59XG5cbi8qKlxuICogV2lsbCBwYXJzZSBhIGJhZ2dhZ2UgaGVhZGVyLCB3aGljaCBpcyBhIHNpbXBsZSBrZXktdmFsdWUgbWFwLCBpbnRvIGEgZmxhdCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGJhZ2dhZ2VIZWFkZXIgVGhlIGJhZ2dhZ2UgaGVhZGVyIHRvIHBhcnNlLlxuICogQHJldHVybnMgYSBmbGF0IG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUga2V5LXZhbHVlIHBhaXJzIGZyb20gYGJhZ2dhZ2VIZWFkZXJgLlxuICovXG5mdW5jdGlvbiBiYWdnYWdlSGVhZGVyVG9PYmplY3QoYmFnZ2FnZUhlYWRlcikge1xuICByZXR1cm4gYmFnZ2FnZUhlYWRlclxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcChiYWdnYWdlRW50cnkgPT4gYmFnZ2FnZUVudHJ5LnNwbGl0KCc9JykubWFwKGtleU9yVmFsdWUgPT4gZGVjb2RlVVJJQ29tcG9uZW50KGtleU9yVmFsdWUudHJpbSgpKSkpXG4gICAgLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIGZsYXQgb2JqZWN0IChrZXktdmFsdWUgcGFpcnMpIGludG8gYSBiYWdnYWdlIGhlYWRlciwgd2hpY2ggaXMgYWxzbyBqdXN0IGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gdHVybiBpbnRvIGEgYmFnZ2FnZSBoZWFkZXIuXG4gKiBAcmV0dXJucyBhIGJhZ2dhZ2UgaGVhZGVyIHN0cmluZywgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIG9iamVjdCBkaWRuJ3QgaGF2ZSBhbnkgdmFsdWVzLCBzaW5jZSBhbiBlbXB0eSBiYWdnYWdlIGhlYWRlclxuICogaXMgbm90IHNwZWMgY29tcGxpYW50LlxuICovXG5mdW5jdGlvbiBvYmplY3RUb0JhZ2dhZ2VIZWFkZXIob2JqZWN0KSB7XG4gIGlmIChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIEFuIGVtcHR5IGJhZ2dhZ2UgaGVhZGVyIGlzIG5vdCBzcGVjIGNvbXBsaWFudDogV2UgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iamVjdCkucmVkdWNlKChiYWdnYWdlSGVhZGVyLCBbb2JqZWN0S2V5LCBvYmplY3RWYWx1ZV0sIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgIGNvbnN0IGJhZ2dhZ2VFbnRyeSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3RLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3RWYWx1ZSl9YDtcbiAgICBjb25zdCBuZXdCYWdnYWdlSGVhZGVyID0gY3VycmVudEluZGV4ID09PSAwID8gYmFnZ2FnZUVudHJ5IDogYCR7YmFnZ2FnZUhlYWRlcn0sJHtiYWdnYWdlRW50cnl9YDtcbiAgICBpZiAobmV3QmFnZ2FnZUhlYWRlci5sZW5ndGggPiBNQVhfQkFHR0FHRV9TVFJJTkdfTEVOR1RIKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgIGxvZ2dlci5sb2dnZXIud2FybihcbiAgICAgICAgICBgTm90IGFkZGluZyBrZXk6ICR7b2JqZWN0S2V5fSB3aXRoIHZhbDogJHtvYmplY3RWYWx1ZX0gdG8gYmFnZ2FnZSBoZWFkZXIgZHVlIHRvIGV4Y2VlZGluZyBiYWdnYWdlIHNpemUgbGltaXRzLmAsXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gYmFnZ2FnZUhlYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ld0JhZ2dhZ2VIZWFkZXI7XG4gICAgfVxuICB9LCAnJyk7XG59XG5cbmV4cG9ydHMuQkFHR0FHRV9IRUFERVJfTkFNRSA9IEJBR0dBR0VfSEVBREVSX05BTUU7XG5leHBvcnRzLk1BWF9CQUdHQUdFX1NUUklOR19MRU5HVEggPSBNQVhfQkFHR0FHRV9TVFJJTkdfTEVOR1RIO1xuZXhwb3J0cy5TRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYID0gU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWDtcbmV4cG9ydHMuU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWF9SRUdFWCA9IFNFTlRSWV9CQUdHQUdFX0tFWV9QUkVGSVhfUkVHRVg7XG5leHBvcnRzLmJhZ2dhZ2VIZWFkZXJUb0R5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBiYWdnYWdlSGVhZGVyVG9EeW5hbWljU2FtcGxpbmdDb250ZXh0O1xuZXhwb3J0cy5keW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyID0gZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhZ2dhZ2UuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGJhZ2dhZ2UgPSByZXF1aXJlKCcuL2JhZ2dhZ2UuanMnKTtcbmNvbnN0IG1pc2MgPSByZXF1aXJlKCcuL21pc2MuanMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzZW50cnktaW50ZXJuYWwvc2RrL25vLXJlZ2V4cC1jb25zdHJ1Y3RvciAtLSBSZWdFeHAgaXMgdXNlZCBmb3IgcmVhZGFiaWxpdHkgaGVyZVxuY29uc3QgVFJBQ0VQQVJFTlRfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ15bIFxcXFx0XSonICsgLy8gd2hpdGVzcGFjZVxuICAgICcoWzAtOWEtZl17MzJ9KT8nICsgLy8gdHJhY2VfaWRcbiAgICAnLT8oWzAtOWEtZl17MTZ9KT8nICsgLy8gc3Bhbl9pZFxuICAgICctPyhbMDFdKT8nICsgLy8gc2FtcGxlZFxuICAgICdbIFxcXFx0XSokJywgLy8gd2hpdGVzcGFjZVxuKTtcblxuLyoqXG4gKiBFeHRyYWN0IHRyYW5zYWN0aW9uIGNvbnRleHQgZGF0YSBmcm9tIGEgYHNlbnRyeS10cmFjZWAgaGVhZGVyLlxuICpcbiAqIEBwYXJhbSB0cmFjZXBhcmVudCBUcmFjZXBhcmVudCBzdHJpbmdcbiAqXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkYXRhIGZyb20gdGhlIGhlYWRlciwgb3IgdW5kZWZpbmVkIGlmIHRyYWNlcGFyZW50IHN0cmluZyBpcyBtYWxmb3JtZWRcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRyYWNlcGFyZW50RGF0YSh0cmFjZXBhcmVudCkge1xuICBpZiAoIXRyYWNlcGFyZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSB0cmFjZXBhcmVudC5tYXRjaChUUkFDRVBBUkVOVF9SRUdFWFApO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHBhcmVudFNhbXBsZWQ7XG4gIGlmIChtYXRjaGVzWzNdID09PSAnMScpIHtcbiAgICBwYXJlbnRTYW1wbGVkID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChtYXRjaGVzWzNdID09PSAnMCcpIHtcbiAgICBwYXJlbnRTYW1wbGVkID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRyYWNlSWQ6IG1hdGNoZXNbMV0sXG4gICAgcGFyZW50U2FtcGxlZCxcbiAgICBwYXJlbnRTcGFuSWQ6IG1hdGNoZXNbMl0sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIHRyYWNpbmcgY29udGV4dCBmcm9tIGluY29taW5nIGhlYWRlcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBwcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVyc2AgaW5zdGVhZC5cbiAqL1xuLy8gVE9ETyh2OCk6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uXG5mdW5jdGlvbiB0cmFjaW5nQ29udGV4dEZyb21IZWFkZXJzKFxuICBzZW50cnlUcmFjZSxcbiAgYmFnZ2FnZSQxLFxuKVxuXG4ge1xuICBjb25zdCB0cmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHNlbnRyeVRyYWNlKTtcbiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGJhZ2dhZ2UuYmFnZ2FnZUhlYWRlclRvRHluYW1pY1NhbXBsaW5nQ29udGV4dChiYWdnYWdlJDEpO1xuXG4gIGNvbnN0IHsgdHJhY2VJZCwgcGFyZW50U3BhbklkLCBwYXJlbnRTYW1wbGVkIH0gPSB0cmFjZXBhcmVudERhdGEgfHwge307XG5cbiAgaWYgKCF0cmFjZXBhcmVudERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhY2VwYXJlbnREYXRhLFxuICAgICAgZHluYW1pY1NhbXBsaW5nQ29udGV4dDogdW5kZWZpbmVkLFxuICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiB7XG4gICAgICAgIHRyYWNlSWQ6IHRyYWNlSWQgfHwgbWlzYy51dWlkNCgpLFxuICAgICAgICBzcGFuSWQ6IG1pc2MudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0cmFjZXBhcmVudERhdGEsXG4gICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBkeW5hbWljU2FtcGxpbmdDb250ZXh0IHx8IHt9LCAvLyBJZiB3ZSBoYXZlIHRyYWNlcGFyZW50IGRhdGEgYnV0IG5vIERTQyBpdCBtZWFucyB3ZSBhcmUgbm90IGhlYWQgb2YgdHJhY2UgYW5kIHdlIG11c3QgZnJlZXplIGl0XG4gICAgICBwcm9wYWdhdGlvbkNvbnRleHQ6IHtcbiAgICAgICAgdHJhY2VJZDogdHJhY2VJZCB8fCBtaXNjLnV1aWQ0KCksXG4gICAgICAgIHBhcmVudFNwYW5JZDogcGFyZW50U3BhbklkIHx8IG1pc2MudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICAgICAgICBzcGFuSWQ6IG1pc2MudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICAgICAgICBzYW1wbGVkOiBwYXJlbnRTYW1wbGVkLFxuICAgICAgICBkc2M6IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgfHwge30sIC8vIElmIHdlIGhhdmUgdHJhY2VwYXJlbnQgZGF0YSBidXQgbm8gRFNDIGl0IG1lYW5zIHdlIGFyZSBub3QgaGVhZCBvZiB0cmFjZSBhbmQgd2UgbXVzdCBmcmVlemUgaXRcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHByb3BhZ2F0aW9uIGNvbnRleHQgZnJvbSBpbmNvbWluZyBoZWFkZXJzLlxuICovXG5mdW5jdGlvbiBwcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycyhcbiAgc2VudHJ5VHJhY2UsXG4gIGJhZ2dhZ2UkMSxcbikge1xuICBjb25zdCB0cmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHNlbnRyeVRyYWNlKTtcbiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGJhZ2dhZ2UuYmFnZ2FnZUhlYWRlclRvRHluYW1pY1NhbXBsaW5nQ29udGV4dChiYWdnYWdlJDEpO1xuXG4gIGNvbnN0IHsgdHJhY2VJZCwgcGFyZW50U3BhbklkLCBwYXJlbnRTYW1wbGVkIH0gPSB0cmFjZXBhcmVudERhdGEgfHwge307XG5cbiAgaWYgKCF0cmFjZXBhcmVudERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhY2VJZDogdHJhY2VJZCB8fCBtaXNjLnV1aWQ0KCksXG4gICAgICBzcGFuSWQ6IG1pc2MudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYWNlSWQ6IHRyYWNlSWQgfHwgbWlzYy51dWlkNCgpLFxuICAgICAgcGFyZW50U3BhbklkOiBwYXJlbnRTcGFuSWQgfHwgbWlzYy51dWlkNCgpLnN1YnN0cmluZygxNiksXG4gICAgICBzcGFuSWQ6IG1pc2MudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICAgICAgc2FtcGxlZDogcGFyZW50U2FtcGxlZCxcbiAgICAgIGRzYzogZHluYW1pY1NhbXBsaW5nQ29udGV4dCB8fCB7fSwgLy8gSWYgd2UgaGF2ZSB0cmFjZXBhcmVudCBkYXRhIGJ1dCBubyBEU0MgaXQgbWVhbnMgd2UgYXJlIG5vdCBoZWFkIG9mIHRyYWNlIGFuZCB3ZSBtdXN0IGZyZWV6ZSBpdFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgc2VudHJ5LXRyYWNlIGhlYWRlciBmcm9tIHNwYW4gY29udGV4dCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlU2VudHJ5VHJhY2VIZWFkZXIoXG4gIHRyYWNlSWQgPSBtaXNjLnV1aWQ0KCksXG4gIHNwYW5JZCA9IG1pc2MudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICBzYW1wbGVkLFxuKSB7XG4gIGxldCBzYW1wbGVkU3RyaW5nID0gJyc7XG4gIGlmIChzYW1wbGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzYW1wbGVkU3RyaW5nID0gc2FtcGxlZCA/ICctMScgOiAnLTAnO1xuICB9XG4gIHJldHVybiBgJHt0cmFjZUlkfS0ke3NwYW5JZH0ke3NhbXBsZWRTdHJpbmd9YDtcbn1cblxuZXhwb3J0cy5UUkFDRVBBUkVOVF9SRUdFWFAgPSBUUkFDRVBBUkVOVF9SRUdFWFA7XG5leHBvcnRzLmV4dHJhY3RUcmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhO1xuZXhwb3J0cy5nZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyID0gZ2VuZXJhdGVTZW50cnlUcmFjZUhlYWRlcjtcbmV4cG9ydHMucHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMgPSBwcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycztcbmV4cG9ydHMudHJhY2luZ0NvbnRleHRGcm9tSGVhZGVycyA9IHRyYWNpbmdDb250ZXh0RnJvbUhlYWRlcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjaW5nLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBkc24gPSByZXF1aXJlKCcuL2Rzbi5qcycpO1xuY29uc3Qgbm9ybWFsaXplID0gcmVxdWlyZSgnLi9ub3JtYWxpemUuanMnKTtcbmNvbnN0IG9iamVjdCA9IHJlcXVpcmUoJy4vb2JqZWN0LmpzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlbnZlbG9wZS5cbiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb25cbiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7XG4gIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaXRlbSB0byBhbiBlbnZlbG9wZS5cbiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb25cbiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LlxuICovXG5mdW5jdGlvbiBhZGRJdGVtVG9FbnZlbG9wZShlbnZlbG9wZSwgbmV3SXRlbSkge1xuICBjb25zdCBbaGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7XG4gIHJldHVybiBbaGVhZGVycywgWy4uLml0ZW1zLCBuZXdJdGVtXV0gO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuXG4gKiAoVGhpcyBmdW5jdGlvbiB3YXMgbW9zdGx5IGNyZWF0ZWQgYmVjYXVzZSB3b3JraW5nIHdpdGggZW52ZWxvcGUgdHlwZXMgaXMgcGFpbmZ1bCBhdCB0aGUgbW9tZW50KVxuICpcbiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oXG4gIGVudmVsb3BlLFxuICBjYWxsYmFjayxcbikge1xuICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07XG5cbiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykge1xuICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTtcbiAgICBjb25zdCByZXN1bHQgPSBjYWxsYmFjayhlbnZlbG9wZUl0ZW0sIGVudmVsb3BlSXRlbVR5cGUpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW52ZWxvcGUgY29udGFpbnMgYW55IG9mIHRoZSBnaXZlbiBlbnZlbG9wZSBpdGVtIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIGVudmVsb3BlQ29udGFpbnNJdGVtVHlwZShlbnZlbG9wZSwgdHlwZXMpIHtcbiAgcmV0dXJuIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChfLCB0eXBlKSA9PiB0eXBlcy5pbmNsdWRlcyh0eXBlKSk7XG59XG5cbi8qKlxuICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVVURjgoaW5wdXQsIHRleHRFbmNvZGVyKSB7XG4gIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTtcbiAgcmV0dXJuIHV0ZjguZW5jb2RlKGlucHV0KTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGFuIGVudmVsb3BlLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSwgdGV4dEVuY29kZXIpIHtcbiAgY29uc3QgW2VudkhlYWRlcnMsIGl0ZW1zXSA9IGVudmVsb3BlO1xuXG4gIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGFcbiAgbGV0IHBhcnRzID0gSlNPTi5zdHJpbmdpZnkoZW52SGVhZGVycyk7XG5cbiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHtcbiAgICBpZiAodHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJykge1xuICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydHMucHVzaCh0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBlbmNvZGVVVEY4KG5leHQsIHRleHRFbmNvZGVyKSA6IG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IFtpdGVtSGVhZGVycywgcGF5bG9hZF0gPSBpdGVtO1xuXG4gICAgYXBwZW5kKGBcXG4ke0pTT04uc3RyaW5naWZ5KGl0ZW1IZWFkZXJzKX1cXG5gKTtcblxuICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgfHwgcGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIGFwcGVuZChwYXlsb2FkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHN0cmluZ2lmaWVkUGF5bG9hZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJbiBjYXNlLCBkZXNwaXRlIGFsbCBvdXIgZWZmb3J0cyB0byBrZWVwIGBwYXlsb2FkYCBjaXJjdWxhci1kZXBlbmRlbmN5LWZyZWUsIGBKU09OLnN0cmluaWZ5KClgIHN0aWxsXG4gICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYVxuICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3QgYnV0IGluIHRoaXMgY2FzZSBhIHBlcmZvcm1hbmNlIGhpdCBpcyBiZXR0ZXIgdGhhbiB0aHJvd2luZy5cbiAgICAgICAgc3RyaW5naWZpZWRQYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplLm5vcm1hbGl6ZShwYXlsb2FkKSk7XG4gICAgICB9XG4gICAgICBhcHBlbmQoc3RyaW5naWZpZWRQYXlsb2FkKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7XG59XG5cbmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykge1xuICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7XG5cbiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW4gZW52ZWxvcGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VFbnZlbG9wZShcbiAgZW52LFxuICB0ZXh0RW5jb2RlcixcbiAgdGV4dERlY29kZXIsXG4pIHtcbiAgbGV0IGJ1ZmZlciA9IHR5cGVvZiBlbnYgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKGVudikgOiBlbnY7XG5cbiAgZnVuY3Rpb24gcmVhZEJpbmFyeShsZW5ndGgpIHtcbiAgICBjb25zdCBiaW4gPSBidWZmZXIuc3ViYXJyYXkoMCwgbGVuZ3RoKTtcbiAgICAvLyBSZXBsYWNlIHRoZSBidWZmZXIgd2l0aCB0aGUgcmVtYWluaW5nIGRhdGEgZXhjbHVkaW5nIHRyYWlsaW5nIG5ld2xpbmVcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkobGVuZ3RoICsgMSk7XG4gICAgcmV0dXJuIGJpbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRKc29uKCkge1xuICAgIGxldCBpID0gYnVmZmVyLmluZGV4T2YoMHhhKTtcbiAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaW5kIGEgbmV3bGluZSwgd2UgbXVzdCBoYXZlIGZvdW5kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICAgIGlmIChpIDwgMCkge1xuICAgICAgaSA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dERlY29kZXIuZGVjb2RlKHJlYWRCaW5hcnkoaSkpKSA7XG4gIH1cblxuICBjb25zdCBlbnZlbG9wZUhlYWRlciA9IHJlYWRKc29uKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGl0ZW1zID0gW107XG5cbiAgd2hpbGUgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBjb25zdCBpdGVtSGVhZGVyID0gcmVhZEpzb24oKTtcbiAgICBjb25zdCBiaW5hcnlMZW5ndGggPSB0eXBlb2YgaXRlbUhlYWRlci5sZW5ndGggPT09ICdudW1iZXInID8gaXRlbUhlYWRlci5sZW5ndGggOiB1bmRlZmluZWQ7XG5cbiAgICBpdGVtcy5wdXNoKFtpdGVtSGVhZGVyLCBiaW5hcnlMZW5ndGggPyByZWFkQmluYXJ5KGJpbmFyeUxlbmd0aCkgOiByZWFkSnNvbigpXSk7XG4gIH1cblxuICByZXR1cm4gW2VudmVsb3BlSGVhZGVyLCBpdGVtc107XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhdHRhY2htZW50IGVudmVsb3BlIGl0ZW1zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUF0dGFjaG1lbnRFbnZlbG9wZUl0ZW0oXG4gIGF0dGFjaG1lbnQsXG4gIHRleHRFbmNvZGVyLFxuKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBhdHRhY2htZW50LmRhdGEgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChhdHRhY2htZW50LmRhdGEsIHRleHRFbmNvZGVyKSA6IGF0dGFjaG1lbnQuZGF0YTtcblxuICByZXR1cm4gW1xuICAgIG9iamVjdC5kcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICB0eXBlOiAnYXR0YWNobWVudCcsXG4gICAgICBsZW5ndGg6IGJ1ZmZlci5sZW5ndGgsXG4gICAgICBmaWxlbmFtZTogYXR0YWNobWVudC5maWxlbmFtZSxcbiAgICAgIGNvbnRlbnRfdHlwZTogYXR0YWNobWVudC5jb250ZW50VHlwZSxcbiAgICAgIGF0dGFjaG1lbnRfdHlwZTogYXR0YWNobWVudC5hdHRhY2htZW50VHlwZSxcbiAgICB9KSxcbiAgICBidWZmZXIsXG4gIF07XG59XG5cbmNvbnN0IElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUCA9IHtcbiAgc2Vzc2lvbjogJ3Nlc3Npb24nLFxuICBzZXNzaW9uczogJ3Nlc3Npb24nLFxuICBhdHRhY2htZW50OiAnYXR0YWNobWVudCcsXG4gIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLFxuICBldmVudDogJ2Vycm9yJyxcbiAgY2xpZW50X3JlcG9ydDogJ2ludGVybmFsJyxcbiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JyxcbiAgcHJvZmlsZTogJ3Byb2ZpbGUnLFxuICByZXBsYXlfZXZlbnQ6ICdyZXBsYXknLFxuICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JyxcbiAgY2hlY2tfaW46ICdtb25pdG9yJyxcbiAgZmVlZGJhY2s6ICdmZWVkYmFjaycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3RhdHNkOiAnbWV0cmljX2J1Y2tldCcsXG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIHR5cGUgb2YgYW4gZW52ZWxvcGUgaXRlbSB0byBhIGRhdGEgY2F0ZWdvcnkuXG4gKi9cbmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7XG4gIHJldHVybiBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVBbdHlwZV07XG59XG5cbi8qKiBFeHRyYWN0cyB0aGUgbWluaW1hbCBTREsgaW5mbyBmcm9tIHRoZSBtZXRhZGF0YSBvciBhbiBldmVudHMgKi9cbmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7XG4gIGlmICghbWV0YWRhdGFPckV2ZW50IHx8ICFtZXRhZGF0YU9yRXZlbnQuc2RrKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkaztcbiAgcmV0dXJuIHsgbmFtZSwgdmVyc2lvbiB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWxcbiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKFxuICBldmVudCxcbiAgc2RrSW5mbyxcbiAgdHVubmVsLFxuICBkc24kMSxcbikge1xuICBjb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhICYmIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YS5keW5hbWljU2FtcGxpbmdDb250ZXh0O1xuICByZXR1cm4ge1xuICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCAsXG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLFxuICAgIC4uLighIXR1bm5lbCAmJiBkc24kMSAmJiB7IGRzbjogZHNuLmRzblRvU3RyaW5nKGRzbiQxKSB9KSxcbiAgICAuLi4oZHluYW1pY1NhbXBsaW5nQ29udGV4dCAmJiB7XG4gICAgICB0cmFjZTogb2JqZWN0LmRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSxcbiAgICB9KSxcbiAgfTtcbn1cblxuZXhwb3J0cy5hZGRJdGVtVG9FbnZlbG9wZSA9IGFkZEl0ZW1Ub0VudmVsb3BlO1xuZXhwb3J0cy5jcmVhdGVBdHRhY2htZW50RW52ZWxvcGVJdGVtID0gY3JlYXRlQXR0YWNobWVudEVudmVsb3BlSXRlbTtcbmV4cG9ydHMuY3JlYXRlRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZTtcbmV4cG9ydHMuY3JlYXRlRXZlbnRFbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycztcbmV4cG9ydHMuZW52ZWxvcGVDb250YWluc0l0ZW1UeXBlID0gZW52ZWxvcGVDb250YWluc0l0ZW1UeXBlO1xuZXhwb3J0cy5lbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkgPSBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnk7XG5leHBvcnRzLmZvckVhY2hFbnZlbG9wZUl0ZW0gPSBmb3JFYWNoRW52ZWxvcGVJdGVtO1xuZXhwb3J0cy5nZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyID0gZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlcjtcbmV4cG9ydHMucGFyc2VFbnZlbG9wZSA9IHBhcnNlRW52ZWxvcGU7XG5leHBvcnRzLnNlcmlhbGl6ZUVudmVsb3BlID0gc2VyaWFsaXplRW52ZWxvcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnZlbG9wZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZW52ZWxvcGUgPSByZXF1aXJlKCcuL2VudmVsb3BlLmpzJyk7XG5jb25zdCB0aW1lID0gcmVxdWlyZSgnLi90aW1lLmpzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGVudmVsb3BlXG4gKiBAcGFyYW0gZGlzY2FyZGVkX2V2ZW50cyBBbiBhcnJheSBvZiBkaXNjYXJkIGV2ZW50c1xuICogQHBhcmFtIGRzbiBBIERTTiB0aGF0IGNhbiBiZSBzZXQgb24gdGhlIGhlYWRlci4gT3B0aW9uYWwuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudFJlcG9ydEVudmVsb3BlKFxuICBkaXNjYXJkZWRfZXZlbnRzLFxuICBkc24sXG4gIHRpbWVzdGFtcCxcbikge1xuICBjb25zdCBjbGllbnRSZXBvcnRJdGVtID0gW1xuICAgIHsgdHlwZTogJ2NsaWVudF9yZXBvcnQnIH0sXG4gICAge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAgfHwgdGltZS5kYXRlVGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICAgICBkaXNjYXJkZWRfZXZlbnRzLFxuICAgIH0sXG4gIF07XG4gIHJldHVybiBlbnZlbG9wZS5jcmVhdGVFbnZlbG9wZShkc24gPyB7IGRzbiB9IDoge30sIFtjbGllbnRSZXBvcnRJdGVtXSk7XG59XG5cbmV4cG9ydHMuY3JlYXRlQ2xpZW50UmVwb3J0RW52ZWxvcGUgPSBjcmVhdGVDbGllbnRSZXBvcnRFbnZlbG9wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudHJlcG9ydC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gSW50ZW50aW9uYWxseSBrZWVwaW5nIHRoZSBrZXkgYnJvYWQsIGFzIHdlIGRvbid0IGtub3cgZm9yIHN1cmUgd2hhdCByYXRlIGxpbWl0IGhlYWRlcnMgZ2V0IHJldHVybmVkIGZyb20gYmFja2VuZFxuXG5jb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzXG5cbi8qKlxuICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gaGVhZGVyIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiAnUmV0cnktQWZ0ZXInIGhlYWRlclxuICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wXG4gKlxuICovXG5mdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7XG4gIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTtcbiAgaWYgKCFpc05hTihoZWFkZXJEZWxheSkpIHtcbiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApO1xuICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7XG4gICAgcmV0dXJuIGhlYWRlckRhdGUgLSBub3c7XG4gIH1cblxuICByZXR1cm4gREVGQVVMVF9SRVRSWV9BRlRFUjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLlxuICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsXG4gKiB0aGF0IHRpbWUgaXMgcmV0dXJuZWQuXG4gKlxuICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuXG4gKi9cbmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBkYXRhQ2F0ZWdvcnkpIHtcbiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjYXRlZ29yeSBpcyByYXRlIGxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkge1xuICByZXR1cm4gZGlzYWJsZWRVbnRpbChsaW1pdHMsIGRhdGFDYXRlZ29yeSkgPiBub3c7XG59XG5cbi8qKlxuICogVXBkYXRlIHJhdGVsaW1pdHMgZnJvbSBpbmNvbWluZyBoZWFkZXJzLlxuICpcbiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoXG4gIGxpbWl0cyxcbiAgeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0sXG4gIG5vdyA9IERhdGUubm93KCksXG4pIHtcbiAgY29uc3QgdXBkYXRlZFJhdGVMaW1pdHMgPSB7XG4gICAgLi4ubGltaXRzLFxuICB9O1xuXG4gIC8vIFwiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS5cIlxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXRcbiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddO1xuICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWydyZXRyeS1hZnRlciddO1xuXG4gIGlmIChyYXRlTGltaXRIZWFkZXIpIHtcbiAgICAvKipcbiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtXG4gICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uXG4gICAgICogd2hlcmUgZWFjaCA8aGVhZGVyPiBpcyBvZiB0aGUgZm9ybVxuICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPlxuICAgICAqIHdoZXJlXG4gICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzXG4gICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm1cbiAgICAgKiAgICAgICAgIDxjYXRlZ29yeT47PGNhdGVnb3J5PjsuLi5cbiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREtcbiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgXCJvcmdfcXVvdGFcIiAtIGlnbm9yZWQgYnkgU0RLXG4gICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC5cbiAgICAgKiAgICAgICAgIE9ubHkgcHJlc2VudCBpZiByYXRlIGxpbWl0IGFwcGxpZXMgdG8gdGhlIG1ldHJpY19idWNrZXQgZGF0YSBjYXRlZ29yeS5cbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkge1xuICAgICAgY29uc3QgW3JldHJ5QWZ0ZXIsIGNhdGVnb3JpZXMsICwgLCBuYW1lc3BhY2VzXSA9IGxpbWl0LnNwbGl0KCc6JywgNSk7XG4gICAgICBjb25zdCBoZWFkZXJEZWxheSA9IHBhcnNlSW50KHJldHJ5QWZ0ZXIsIDEwKTtcbiAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHRcbiAgICAgIGlmICghY2F0ZWdvcmllcykge1xuICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyBkZWxheTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7XG4gICAgICAgICAgaWYgKGNhdGVnb3J5ID09PSAnbWV0cmljX2J1Y2tldCcpIHtcbiAgICAgICAgICAgIC8vIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50IHdoZW4gY2F0ZWdvcnkgPT09ICdtZXRyaWNfYnVja2V0J1xuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2VzIHx8IG5hbWVzcGFjZXMuc3BsaXQoJzsnKS5pbmNsdWRlcygnY3VzdG9tJykpIHtcbiAgICAgICAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHNbY2F0ZWdvcnldID0gbm93ICsgZGVsYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChyZXRyeUFmdGVySGVhZGVyKSB7XG4gICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgcGFyc2VSZXRyeUFmdGVySGVhZGVyKHJldHJ5QWZ0ZXJIZWFkZXIsIG5vdyk7XG4gIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgNjAgKiAxMDAwO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZWRSYXRlTGltaXRzO1xufVxuXG5leHBvcnRzLkRFRkFVTFRfUkVUUllfQUZURVIgPSBERUZBVUxUX1JFVFJZX0FGVEVSO1xuZXhwb3J0cy5kaXNhYmxlZFVudGlsID0gZGlzYWJsZWRVbnRpbDtcbmV4cG9ydHMuaXNSYXRlTGltaXRlZCA9IGlzUmF0ZUxpbWl0ZWQ7XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlckhlYWRlciA9IHBhcnNlUmV0cnlBZnRlckhlYWRlcjtcbmV4cG9ydHMudXBkYXRlUmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYXRlbGltaXQuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGFuIG9iamVjdCB0byB1cGRhdGUgYW4gZXhpc3RpbmcgbmVzdGVkIGtleS5cbiAqIE5vdGU6IFRoZSBwcm92aWRlZCBrZXkgcGF0aCBtdXN0IGluY2x1ZGUgZXhpc3RpbmcgcHJvcGVydGllcyxcbiAqIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBjcmVhdGUgb2JqZWN0cyB3aGlsZSB0cmF2ZXJzaW5nLlxuICpcbiAqIEBwYXJhbSBvYmogQW4gb2JqZWN0IHRvIHVwZGF0ZVxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB1cGRhdGUgdGhlIG5lc3RlZCBrZXkgd2l0aFxuICogQHBhcmFtIGtleVBhdGggVGhlIHBhdGggdG8gdGhlIGtleSB0byB1cGRhdGUgZXguIGZpenouYnV6ei5mb29cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNldE5lc3RlZEtleShvYmosIGtleVBhdGgsIHZhbHVlKSB7XG4gIC8vIEV4LiBmb28uYmFyLnpvb3Agd2lsbCBleHRyYWN0IGZvbyBhbmQgYmFyLnpvb3BcbiAgY29uc3QgbWF0Y2ggPSBrZXlQYXRoLm1hdGNoKC8oW2Etel9dKylcXC4oLiopL2kpO1xuICAvLyBUaGUgbWF0Y2ggd2lsbCBiZSBudWxsIHdoZW4gdGhlcmUncyBubyBtb3JlIHJlY3Vyc2luZyB0byBkbywgaS5lLiwgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSByaWdodCBsZXZlbCBvZiB0aGUgb2JqZWN0XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgIG9ialtrZXlQYXRoXSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGBtYXRjaFsxXWAgaXMgdGhlIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgcGF0aCwgYW5kIGBtYXRjaFsyXWAgaXMgdGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0aFxuICAgIGNvbnN0IGlubmVyT2JqID0gb2JqW21hdGNoWzFdXTtcbiAgICBzZXROZXN0ZWRLZXkoaW5uZXJPYmosIG1hdGNoWzJdLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbmZvcmNlcyBpbmNsdXNpb24gb2YgYSBnaXZlbiBpbnRlZ3JhdGlvbiB3aXRoIHNwZWNpZmllZCBvcHRpb25zIGluIGFuIGludGVncmF0aW9uIGFycmF5IG9yaWdpbmFsbHkgZGV0ZXJtaW5lZCBieSB0aGVcbiAqIHVzZXIsIGJ5IGVpdGhlciBpbmNsdWRpbmcgdGhlIGdpdmVuIGRlZmF1bHQgaW5zdGFuY2Ugb3IgYnkgcGF0Y2hpbmcgYW4gZXhpc3RpbmcgdXNlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIElkZWFsbHkgdGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBpbnRlZ3JhdGlvbnMgYXJlIHNldCB1cCwgYnV0IHRoZXJlIGlzbid0IGN1cnJlbnRseSBhIG1lY2hhbmlzbSB0aGVyZSBmb3IgbWVyZ2luZ1xuICogb3B0aW9ucyBmcm9tIGEgZGVmYXVsdCBpbnRlZ3JhdGlvbiBpbnN0YW5jZSB3aXRoIHRob3NlIGZyb20gYSB1c2VyLXByb3ZpZGVkIGluc3RhbmNlIG9mIHRoZSBzYW1lIGludGVncmF0aW9uLCBvbmx5XG4gKiBmb3IgYWxsb3dpbmcgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgYSBkZWZhdWx0IGluc3RhbmNlIGVudGlyZWx5LiAoVE9ETzogRml4IHRoYXQuKVxuICpcbiAqIEBwYXJhbSBkZWZhdWx0SW50ZWdyYXRpb25JbnN0YW5jZSBBbiBpbnN0YW5jZSBvZiB0aGUgaW50ZWdyYXRpb24gd2l0aCB0aGUgY29ycmVjdCBvcHRpb25zIGFscmVhZHkgc2V0XG4gKiBAcGFyYW0gdXNlckludGVncmF0aW9ucyBJbnRlZ3JhdGlvbnMgZGVmaW5lZCBieSB0aGUgdXNlci5cbiAqIEBwYXJhbSBmb3JjZWRPcHRpb25zIE9wdGlvbnMgd2l0aCB3aGljaCB0byBwYXRjaCBhbiBleGlzdGluZyB1c2VyLWRlcml2ZWQgaW5zdGFuY2Ugb24gdGhlIGludGVncmF0aW9uLlxuICogQHJldHVybnMgQSBmaW5hbCBpbnRlZ3JhdGlvbnMgYXJyYXkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmZ1bmN0aW9uIGFkZE9yVXBkYXRlSW50ZWdyYXRpb24oXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbkluc3RhbmNlLFxuICB1c2VySW50ZWdyYXRpb25zLFxuICBmb3JjZWRPcHRpb25zID0ge30sXG4pIHtcbiAgcmV0dXJuIChcbiAgICBBcnJheS5pc0FycmF5KHVzZXJJbnRlZ3JhdGlvbnMpXG4gICAgICA/IGFkZE9yVXBkYXRlSW50ZWdyYXRpb25JbkFycmF5KGRlZmF1bHRJbnRlZ3JhdGlvbkluc3RhbmNlLCB1c2VySW50ZWdyYXRpb25zLCBmb3JjZWRPcHRpb25zKVxuICAgICAgOiBhZGRPclVwZGF0ZUludGVncmF0aW9uSW5GdW5jdGlvbihcbiAgICAgICAgICBkZWZhdWx0SW50ZWdyYXRpb25JbnN0YW5jZSxcbiAgICAgICAgICAvLyBTb21laG93IFRTIGNhbid0IGZpZ3VyZSBvdXQgdGhhdCBub3QgYmVpbmcgYW4gYXJyYXkgbWFrZXMgdGhpcyBuZWNlc3NhcmlseSBhIGZ1bmN0aW9uXG4gICAgICAgICAgdXNlckludGVncmF0aW9ucyAsXG4gICAgICAgICAgZm9yY2VkT3B0aW9ucyxcbiAgICAgICAgKVxuICApIDtcbn1cblxuZnVuY3Rpb24gYWRkT3JVcGRhdGVJbnRlZ3JhdGlvbkluQXJyYXkoXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbkluc3RhbmNlLFxuICB1c2VySW50ZWdyYXRpb25zLFxuICBmb3JjZWRPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHVzZXJJbnN0YW5jZSA9IHVzZXJJbnRlZ3JhdGlvbnMuZmluZChpbnRlZ3JhdGlvbiA9PiBpbnRlZ3JhdGlvbi5uYW1lID09PSBkZWZhdWx0SW50ZWdyYXRpb25JbnN0YW5jZS5uYW1lKTtcblxuICBpZiAodXNlckluc3RhbmNlKSB7XG4gICAgZm9yIChjb25zdCBba2V5UGF0aCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZvcmNlZE9wdGlvbnMpKSB7XG4gICAgICBzZXROZXN0ZWRLZXkodXNlckluc3RhbmNlLCBrZXlQYXRoLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXJJbnRlZ3JhdGlvbnM7XG4gIH1cblxuICByZXR1cm4gWy4uLnVzZXJJbnRlZ3JhdGlvbnMsIGRlZmF1bHRJbnRlZ3JhdGlvbkluc3RhbmNlXTtcbn1cblxuZnVuY3Rpb24gYWRkT3JVcGRhdGVJbnRlZ3JhdGlvbkluRnVuY3Rpb24oXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbkluc3RhbmNlLFxuICB1c2VySW50ZWdyYXRpb25zRnVuYyxcbiAgZm9yY2VkT3B0aW9ucyxcbikge1xuICBjb25zdCB3cmFwcGVyID0gZGVmYXVsdEludGVncmF0aW9ucyA9PiB7XG4gICAgY29uc3QgdXNlckZpbmFsSW50ZWdyYXRpb25zID0gdXNlckludGVncmF0aW9uc0Z1bmMoZGVmYXVsdEludGVncmF0aW9ucyk7XG5cbiAgICAvLyBUaGVyZSBhcmUgaW5zdGFuY2VzIHdoZXJlIHdlIHdhbnQgdGhlIHVzZXIgdG8gYmUgYWJsZSB0byBwcmV2ZW50IGFuIGludGVncmF0aW9uIGZyb20gYXBwZWFyaW5nIGF0IGFsbCwgd2hpY2ggdGhleVxuICAgIC8vIHdvdWxkIGRvIGJ5IHByb3ZpZGluZyBhIGZ1bmN0aW9uIHdoaWNoIGZpbHRlcnMgb3V0IHRoZSBpbnRlZ3JhdGlvbiBpbiBxdWVzdGlvbi4gSWYgdGhhdCdzIGhhcHBlbmVkIGluIG9uZSBvZlxuICAgIC8vIHRob3NlIGNhc2VzLCBkb24ndCBhZGQgb3VyIGRlZmF1bHQgYmFjayBpbi5cbiAgICBpZiAoZGVmYXVsdEludGVncmF0aW9uSW5zdGFuY2UuYWxsb3dFeGNsdXNpb25CeVVzZXIpIHtcbiAgICAgIGNvbnN0IHVzZXJGaW5hbEluc3RhbmNlID0gdXNlckZpbmFsSW50ZWdyYXRpb25zLmZpbmQoXG4gICAgICAgIGludGVncmF0aW9uID0+IGludGVncmF0aW9uLm5hbWUgPT09IGRlZmF1bHRJbnRlZ3JhdGlvbkluc3RhbmNlLm5hbWUsXG4gICAgICApO1xuICAgICAgaWYgKCF1c2VyRmluYWxJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gdXNlckZpbmFsSW50ZWdyYXRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRPclVwZGF0ZUludGVncmF0aW9uSW5BcnJheShkZWZhdWx0SW50ZWdyYXRpb25JbnN0YW5jZSwgdXNlckZpbmFsSW50ZWdyYXRpb25zLCBmb3JjZWRPcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZXhwb3J0cy5hZGRPclVwZGF0ZUludGVncmF0aW9uID0gYWRkT3JVcGRhdGVJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJJbnRlZ3JhdGlvbnMuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNhY2hlIHRoYXQgZXZpY3RzIGtleXMgaW4gZmlmbyBvcmRlclxuICogQHBhcmFtIHNpemUge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gbWFrZUZpZm9DYWNoZShcbiAgc2l6ZSxcbilcblxuIHtcbiAgLy8gTWFpbnRhaW4gYSBmaWZvIHF1ZXVlIG9mIGtleXMsIHdlIGNhbm5vdCByZWx5IG9uIE9iamVjdC5rZXlzIGFzIHRoZSBicm93c2VyIG1heSBub3Qgc3VwcG9ydCBpdC5cbiAgbGV0IGV2aWN0aW9uT3JkZXIgPSBbXTtcbiAgbGV0IGNhY2hlID0ge307XG5cbiAgcmV0dXJuIHtcbiAgICBhZGQoa2V5LCB2YWx1ZSkge1xuICAgICAgd2hpbGUgKGV2aWN0aW9uT3JkZXIubGVuZ3RoID49IHNpemUpIHtcbiAgICAgICAgLy8gc2hpZnQgaXMgTyhuKSBidXQgdGhpcyBpcyBzbWFsbCBzaXplIGFuZCBvbmx5IGhhcHBlbnMgaWYgd2UgYXJlXG4gICAgICAgIC8vIGV4Y2VlZGluZyB0aGUgY2FjaGUgc2l6ZSBzbyBpdCBzaG91bGQgYmUgZmluZS5cbiAgICAgICAgY29uc3QgZXZpY3RDYW5kaWRhdGUgPSBldmljdGlvbk9yZGVyLnNoaWZ0KCk7XG5cbiAgICAgICAgaWYgKGV2aWN0Q2FuZGlkYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgZGVsZXRlIGNhY2hlW2V2aWN0Q2FuZGlkYXRlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpbiBjYXNlIHdlIGhhdmUgYSBjb2xsaXNpb24sIGRlbGV0ZSB0aGUgb2xkIGtleS5cbiAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICB9XG5cbiAgICAgIGV2aWN0aW9uT3JkZXIucHVzaChrZXkpO1xuICAgICAgY2FjaGVba2V5XSA9IHZhbHVlO1xuICAgIH0sXG4gICAgY2xlYXIoKSB7XG4gICAgICBjYWNoZSA9IHt9O1xuICAgICAgZXZpY3Rpb25PcmRlciA9IFtdO1xuICAgIH0sXG4gICAgZ2V0KGtleSkge1xuICAgICAgcmV0dXJuIGNhY2hlW2tleV07XG4gICAgfSxcbiAgICBzaXplKCkge1xuICAgICAgcmV0dXJuIGV2aWN0aW9uT3JkZXIubGVuZ3RoO1xuICAgIH0sXG4gICAgLy8gRGVsZXRlIGNhY2hlIGtleSBhbmQgcmV0dXJuIHRydWUgaWYgaXQgZXhpc3RlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgIGlmICghY2FjaGVba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSBjYWNoZVtrZXldO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2aWN0aW9uT3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGV2aWN0aW9uT3JkZXJbaV0gPT09IGtleSkge1xuICAgICAgICAgIGV2aWN0aW9uT3JkZXIuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydHMubWFrZUZpZm9DYWNoZSA9IG1ha2VGaWZvQ2FjaGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYWNoZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzLmpzJyk7XG5jb25zdCBtaXNjID0gcmVxdWlyZSgnLi9taXNjLmpzJyk7XG5jb25zdCBub3JtYWxpemUgPSByZXF1aXJlKCcuL25vcm1hbGl6ZS5qcycpO1xuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi9vYmplY3QuanMnKTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdGFjayBmcmFtZXMgZnJvbSB0aGUgZXJyb3Iuc3RhY2sgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhY2tGcmFtZXMoc3RhY2tQYXJzZXIsIGVycm9yKSB7XG4gIHJldHVybiBzdGFja1BhcnNlcihlcnJvci5zdGFjayB8fCAnJywgMSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgc3RhY2sgZnJhbWVzIGZyb20gdGhlIGVycm9yIGFuZCBidWlsZHMgYSBTZW50cnkgRXhjZXB0aW9uXG4gKi9cbmZ1bmN0aW9uIGV4Y2VwdGlvbkZyb21FcnJvcihzdGFja1BhcnNlciwgZXJyb3IpIHtcbiAgY29uc3QgZXhjZXB0aW9uID0ge1xuICAgIHR5cGU6IGVycm9yLm5hbWUgfHwgZXJyb3IuY29uc3RydWN0b3IubmFtZSxcbiAgICB2YWx1ZTogZXJyb3IubWVzc2FnZSxcbiAgfTtcblxuICBjb25zdCBmcmFtZXMgPSBwYXJzZVN0YWNrRnJhbWVzKHN0YWNrUGFyc2VyLCBlcnJvcik7XG4gIGlmIChmcmFtZXMubGVuZ3RoKSB7XG4gICAgZXhjZXB0aW9uLnN0YWNrdHJhY2UgPSB7IGZyYW1lcyB9O1xuICB9XG5cbiAgcmV0dXJuIGV4Y2VwdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZUZvck9iamVjdChleGNlcHRpb24pIHtcbiAgaWYgKCduYW1lJyBpbiBleGNlcHRpb24gJiYgdHlwZW9mIGV4Y2VwdGlvbi5uYW1lID09PSAnc3RyaW5nJykge1xuICAgIGxldCBtZXNzYWdlID0gYCcke2V4Y2VwdGlvbi5uYW1lfScgY2FwdHVyZWQgYXMgZXhjZXB0aW9uYDtcblxuICAgIGlmICgnbWVzc2FnZScgaW4gZXhjZXB0aW9uICYmIHR5cGVvZiBleGNlcHRpb24ubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCB3aXRoIG1lc3NhZ2UgJyR7ZXhjZXB0aW9uLm1lc3NhZ2V9J2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAoJ21lc3NhZ2UnIGluIGV4Y2VwdGlvbiAmJiB0eXBlb2YgZXhjZXB0aW9uLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGV4Y2VwdGlvbi5tZXNzYWdlO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBncm91cCBldmVudHMgYmFzZWQgb24gdG9wLWxldmVsIGtleXNcbiAgICAvLyB3aGljaCBpcyBtdWNoIGJldHRlciB0aGFuIGNyZWF0aW5nIG5ldyBncm91cCB3aGVuIGFueSBrZXkvdmFsdWUgY2hhbmdlXG4gICAgcmV0dXJuIGBPYmplY3QgY2FwdHVyZWQgYXMgZXhjZXB0aW9uIHdpdGgga2V5czogJHtvYmplY3QuZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlKFxuICAgICAgZXhjZXB0aW9uICxcbiAgICApfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIEV2ZW50IGZyb20gYSBFeGNlcHRpb25cbiAqXG4gKiBUT0RPKHY4KTogUmVtb3ZlIGdldEh1YiBmYWxsYmFja1xuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBldmVudEZyb21Vbmtub3duSW5wdXQoXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBnZXRIdWJPckNsaWVudCxcbiAgc3RhY2tQYXJzZXIsXG4gIGV4Y2VwdGlvbixcbiAgaGludCxcbikge1xuICBjb25zdCBjbGllbnQgPVxuICAgIHR5cGVvZiBnZXRIdWJPckNsaWVudCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgZ2V0SHViT3JDbGllbnQoKS5nZXRDbGllbnQoKVxuICAgICAgOiBnZXRIdWJPckNsaWVudDtcblxuICBsZXQgZXggPSBleGNlcHRpb247XG4gIGNvbnN0IHByb3ZpZGVkTWVjaGFuaXNtID1cbiAgICBoaW50ICYmIGhpbnQuZGF0YSAmJiAoaGludC5kYXRhICkubWVjaGFuaXNtO1xuICBjb25zdCBtZWNoYW5pc20gPSBwcm92aWRlZE1lY2hhbmlzbSB8fCB7XG4gICAgaGFuZGxlZDogdHJ1ZSxcbiAgICB0eXBlOiAnZ2VuZXJpYycsXG4gIH07XG5cbiAgbGV0IGV4dHJhcztcblxuICBpZiAoIWlzLmlzRXJyb3IoZXhjZXB0aW9uKSkge1xuICAgIGlmIChpcy5pc1BsYWluT2JqZWN0KGV4Y2VwdGlvbikpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZURlcHRoID0gY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCkubm9ybWFsaXplRGVwdGg7XG4gICAgICBleHRyYXMgPSB7IFsnX19zZXJpYWxpemVkX18nXTogbm9ybWFsaXplLm5vcm1hbGl6ZVRvU2l6ZShleGNlcHRpb24gLCBub3JtYWxpemVEZXB0aCkgfTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2VGb3JPYmplY3QoZXhjZXB0aW9uKTtcbiAgICAgIGV4ID0gKGhpbnQgJiYgaGludC5zeW50aGV0aWNFeGNlcHRpb24pIHx8IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIChleCApLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGhhbmRsZXMgd2hlbiBzb21lb25lIGRvZXM6IGB0aHJvdyBcInNvbWV0aGluZyBhd2Vzb21lXCI7YFxuICAgICAgLy8gV2UgdXNlIHN5bnRoZXNpemVkIEVycm9yIGhlcmUgc28gd2UgY2FuIGV4dHJhY3QgYSAocm91Z2gpIHN0YWNrIHRyYWNlLlxuICAgICAgZXggPSAoaGludCAmJiBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbikgfHwgbmV3IEVycm9yKGV4Y2VwdGlvbiApO1xuICAgICAgKGV4ICkubWVzc2FnZSA9IGV4Y2VwdGlvbiA7XG4gICAgfVxuICAgIG1lY2hhbmlzbS5zeW50aGV0aWMgPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgZXhjZXB0aW9uOiB7XG4gICAgICB2YWx1ZXM6IFtleGNlcHRpb25Gcm9tRXJyb3Ioc3RhY2tQYXJzZXIsIGV4ICldLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKGV4dHJhcykge1xuICAgIGV2ZW50LmV4dHJhID0gZXh0cmFzO1xuICB9XG5cbiAgbWlzYy5hZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgbWlzYy5hZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIG1lY2hhbmlzbSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5ldmVudCxcbiAgICBldmVudF9pZDogaGludCAmJiBoaW50LmV2ZW50X2lkLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgRXZlbnQgZnJvbSBhIE1lc3NhZ2VcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZXZlbnRGcm9tTWVzc2FnZShcbiAgc3RhY2tQYXJzZXIsXG4gIG1lc3NhZ2UsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBsZXZlbCA9ICdpbmZvJyxcbiAgaGludCxcbiAgYXR0YWNoU3RhY2t0cmFjZSxcbikge1xuICBjb25zdCBldmVudCA9IHtcbiAgICBldmVudF9pZDogaGludCAmJiBoaW50LmV2ZW50X2lkLFxuICAgIGxldmVsLFxuICB9O1xuXG4gIGlmIChhdHRhY2hTdGFja3RyYWNlICYmIGhpbnQgJiYgaGludC5zeW50aGV0aWNFeGNlcHRpb24pIHtcbiAgICBjb25zdCBmcmFtZXMgPSBwYXJzZVN0YWNrRnJhbWVzKHN0YWNrUGFyc2VyLCBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbik7XG4gICAgaWYgKGZyYW1lcy5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmV4Y2VwdGlvbiA9IHtcbiAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IG1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFja3RyYWNlOiB7IGZyYW1lcyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcy5pc1BhcmFtZXRlcml6ZWRTdHJpbmcobWVzc2FnZSkpIHtcbiAgICBjb25zdCB7IF9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fLCBfX3NlbnRyeV90ZW1wbGF0ZV92YWx1ZXNfXyB9ID0gbWVzc2FnZTtcblxuICAgIGV2ZW50LmxvZ2VudHJ5ID0ge1xuICAgICAgbWVzc2FnZTogX19zZW50cnlfdGVtcGxhdGVfc3RyaW5nX18sXG4gICAgICBwYXJhbXM6IF9fc2VudHJ5X3RlbXBsYXRlX3ZhbHVlc19fLFxuICAgIH07XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgZXZlbnQubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHJldHVybiBldmVudDtcbn1cblxuZXhwb3J0cy5ldmVudEZyb21NZXNzYWdlID0gZXZlbnRGcm9tTWVzc2FnZTtcbmV4cG9ydHMuZXZlbnRGcm9tVW5rbm93bklucHV0ID0gZXZlbnRGcm9tVW5rbm93bklucHV0O1xuZXhwb3J0cy5leGNlcHRpb25Gcm9tRXJyb3IgPSBleGNlcHRpb25Gcm9tRXJyb3I7XG5leHBvcnRzLnBhcnNlU3RhY2tGcmFtZXMgPSBwYXJzZVN0YWNrRnJhbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnRidWlsZGVyLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBvYmplY3QgPSByZXF1aXJlKCcuL29iamVjdC5qcycpO1xuY29uc3Qgbm9kZVN0YWNrVHJhY2UgPSByZXF1aXJlKCcuL25vZGUtc3RhY2stdHJhY2UuanMnKTtcblxuLyoqXG4gKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXJcbiAqIEBwYXJhbSBwb2xsSW50ZXJ2YWwgVGhlIGludGVydmFsIHRoYXQgd2UgZXhwZWN0IHRvIGdldCBwb2xsZWQgYXRcbiAqIEBwYXJhbSBhbnJUaHJlc2hvbGQgVGhlIHRocmVzaG9sZCBmb3Igd2hlbiB3ZSBjb25zaWRlciBBTlJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgcG9sbGAgYW5kIGBlbmFibGVkYCBmdW5jdGlvbnMge0BsaW5rIFdhdGNoZG9nUmV0dXJufVxuICovXG5mdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKFxuICBjcmVhdGVUaW1lcixcbiAgcG9sbEludGVydmFsLFxuICBhbnJUaHJlc2hvbGQsXG4gIGNhbGxiYWNrLFxuKSB7XG4gIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTtcbiAgbGV0IHRyaWdnZXJlZCA9IGZhbHNlO1xuICBsZXQgZW5hYmxlZCA9IHRydWU7XG5cbiAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IGRpZmZNcyA9IHRpbWVyLmdldFRpbWVNcygpO1xuXG4gICAgaWYgKHRyaWdnZXJlZCA9PT0gZmFsc2UgJiYgZGlmZk1zID4gcG9sbEludGVydmFsICsgYW5yVGhyZXNob2xkKSB7XG4gICAgICB0cmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlmZk1zIDwgcG9sbEludGVydmFsICsgYW5yVGhyZXNob2xkKSB7XG4gICAgICB0cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIDIwKTtcblxuICByZXR1cm4ge1xuICAgIHBvbGw6ICgpID0+IHtcbiAgICAgIHRpbWVyLnJlc2V0KCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoc3RhdGUpID0+IHtcbiAgICAgIGVuYWJsZWQgPSBzdGF0ZTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyB0eXBlcyBjb3BpZWQgZnJvbSBpbnNwZWN0b3IuZC50c1xuXG4vKipcbiAqIENvbnZlcnRzIERlYnVnZ2VyLkNhbGxGcmFtZSB0byBTZW50cnkgU3RhY2tGcmFtZVxuICovXG5mdW5jdGlvbiBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoXG4gIGZyYW1lLFxuICB1cmwsXG4gIGdldE1vZHVsZUZyb21GaWxlbmFtZSxcbikge1xuICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCAnJykgOiB1bmRlZmluZWQ7XG5cbiAgLy8gQ2FsbEZyYW1lIHJvdy9jb2wgYXJlIDAgYmFzZWQsIHdoZXJlYXMgU3RhY2tGcmFtZSBhcmUgMSBiYXNlZFxuICBjb25zdCBjb2xubyA9IGZyYW1lLmxvY2F0aW9uLmNvbHVtbk51bWJlciA/IGZyYW1lLmxvY2F0aW9uLmNvbHVtbk51bWJlciArIDEgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gb2JqZWN0LmRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICBmaWxlbmFtZSxcbiAgICBtb2R1bGU6IGdldE1vZHVsZUZyb21GaWxlbmFtZShmaWxlbmFtZSksXG4gICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsXG4gICAgY29sbm8sXG4gICAgbGluZW5vLFxuICAgIGluX2FwcDogZmlsZW5hbWUgPyBub2RlU3RhY2tUcmFjZS5maWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLFxuICB9KTtcbn1cblxuZXhwb3J0cy5jYWxsRnJhbWVUb1N0YWNrRnJhbWUgPSBjYWxsRnJhbWVUb1N0YWNrRnJhbWU7XG5leHBvcnRzLndhdGNoZG9nVGltZXIgPSB3YXRjaGRvZ1RpbWVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5yLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKiogQSBzaW1wbGUgTGVhc3QgUmVjZW50bHkgVXNlZCBtYXAgKi9cbmNsYXNzIExSVU1hcCB7XG5cbiAgIGNvbnN0cnVjdG9yKCAgX21heFNpemUpIHt0aGlzLl9tYXhTaXplID0gX21heFNpemU7XG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgTWFwKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGNhY2hlICovXG4gICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGUuc2l6ZTtcbiAgfVxuXG4gIC8qKiBHZXQgYW4gZW50cnkgb3IgdW5kZWZpbmVkIGlmIGl0IHdhcyBub3QgaW4gdGhlIGNhY2hlLiBSZS1pbnNlcnRzIHRvIHVwZGF0ZSB0aGUgcmVjZW50bHkgdXNlZCBvcmRlciAqL1xuICAgZ2V0KGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBhbmQgcmUtaW5zZXJ0IHRvIHVwZGF0ZSB0aGUgb3JkZXJcbiAgICB0aGlzLl9jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB0aGlzLl9jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqIEluc2VydCBhbiBlbnRyeSBhbmQgZXZpY3QgYW4gb2xkZXIgZW50cnkgaWYgd2UndmUgcmVhY2hlZCBtYXhTaXplICovXG4gICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9jYWNoZS5zaXplID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgIC8vIGtleXMoKSByZXR1cm5zIGFuIGl0ZXJhdG9yIGluIGluc2VydGlvbiBvcmRlciBzbyBrZXlzKCkubmV4dCgpIGdpdmVzIHVzIHRoZSBvbGRlc3Qga2V5XG4gICAgICB0aGlzLl9jYWNoZS5kZWxldGUodGhpcy5fY2FjaGUua2V5cygpLm5leHQoKS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2NhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYW4gZW50cnkgYW5kIHJldHVybiB0aGUgZW50cnkgaWYgaXQgd2FzIGluIHRoZSBjYWNoZSAqL1xuICAgcmVtb3ZlKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCBlbnRyaWVzICovXG4gICBjbGVhcigpIHtcbiAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgdGhlIGtleXMgKi9cbiAgIGtleXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fY2FjaGUua2V5cygpKTtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIHRoZSB2YWx1ZXMgKi9cbiAgIHZhbHVlcygpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9jYWNoZS5mb3JFYWNoKHZhbHVlID0+IHZhbHVlcy5wdXNoKHZhbHVlKSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxufVxuXG5leHBvcnRzLkxSVU1hcCA9IExSVU1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxydS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvdHJlZS8yNjU4ODc4Njg5NjY5MTdmM2I5MjRjZTM4ZGZhZDAxZmJhYjEzMjlmXG4vL1xuLy8gVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTggdmFyaW91cyBjb250cmlidXRvcnMgKHNlZSBBVVRIT1JTKVxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuLy8gU09GVFdBUkUuXG5cbi8qKlxuICogUG9seWZpbGwgZm9yIHRoZSBudWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0b3IgKGA/P2ApLlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgUkhTIGlzIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiBzbyB0aGF0IGlmIGl0J3MgYSBjb21wdXRlZCB2YWx1ZSwgdGhhdCBldmFsdWF0aW9uIHdvbid0IGhhcHBlbiB1bmxlc3MgdGhlXG4gKiBMSFMgZXZhbHVhdGVzIHRvIGEgbnVsbGlzaCB2YWx1ZSwgdG8gbWltaWMgdGhlIG9wZXJhdG9yJ3Mgc2hvcnQtY2lyY3VpdGluZyBiZWhhdmlvci5cbiAqXG4gKiBBZGFwdGVkIGZyb20gU3VjcmFzZSAoaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UpXG4gKlxuICogQHBhcmFtIGxocyBUaGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gdG8gdGhlIGxlZnQgb2YgdGhlIGA/P2BcbiAqIEBwYXJhbSByaHNGbiBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBgPz9gXG4gKiBAcmV0dXJucyBUaGUgTEhTIHZhbHVlLCB1bmxlc3MgaXQncyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIGluIHdoaWNoIGNhc2UsIHRoZSBSSFMgdmFsdWVcbiAqL1xuZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7XG4gIC8vIGJ5IGNoZWNraW5nIGZvciBsb29zZSBlcXVhbGl0eSB0byBgbnVsbGAsIHdlIGNhdGNoIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICByZXR1cm4gbGhzICE9IG51bGwgPyBsaHMgOiByaHNGbigpO1xufVxuXG4vLyBTdWNyYXNlIHZlcnNpb246XG4vLyBmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHtcbi8vICAgaWYgKGxocyAhPSBudWxsKSB7XG4vLyAgICAgcmV0dXJuIGxocztcbi8vICAgfSBlbHNlIHtcbi8vICAgICByZXR1cm4gcmhzRm4oKTtcbi8vICAgfVxuLy8gfVxuXG5leHBvcnRzLl9udWxsaXNoQ29hbGVzY2UgPSBfbnVsbGlzaENvYWxlc2NlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X251bGxpc2hDb2FsZXNjZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgX251bGxpc2hDb2FsZXNjZSA9IHJlcXVpcmUoJy4vX251bGxpc2hDb2FsZXNjZS5qcycpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS90cmVlLzI2NTg4Nzg2ODk2NjkxN2YzYjkyNGNlMzhkZmFkMDFmYmFiMTMyOWZcblxuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgdGhlIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRvciAoYD8/YCksIHdoZW4gdXNlZCBpbiBzaXR1YXRpb25zIHdoZXJlIGF0IGxlYXN0IG9uZSBvZiB0aGUgdmFsdWVzIGlzIHRoZVxuICogcmVzdWx0IG9mIGFuIGFzeW5jIG9wZXJhdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIFJIUyBpcyB3cmFwcGVkIGluIGEgZnVuY3Rpb24gc28gdGhhdCBpZiBpdCdzIGEgY29tcHV0ZWQgdmFsdWUsIHRoYXQgZXZhbHVhdGlvbiB3b24ndCBoYXBwZW4gdW5sZXNzIHRoZVxuICogTEhTIGV2YWx1YXRlcyB0byBhIG51bGxpc2ggdmFsdWUsIHRvIG1pbWljIHRoZSBvcGVyYXRvcidzIHNob3J0LWNpcmN1aXRpbmcgYmVoYXZpb3IuXG4gKlxuICogQWRhcHRlZCBmcm9tIFN1Y3Jhc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlKVxuICpcbiAqIEBwYXJhbSBsaHMgVGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHRvIHRoZSBsZWZ0IG9mIHRoZSBgPz9gXG4gKiBAcGFyYW0gcmhzRm4gQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHRvIHRoZSByaWdodCBvZiB0aGUgYD8/YFxuICogQHJldHVybnMgVGhlIExIUyB2YWx1ZSwgdW5sZXNzIGl0J3MgYG51bGxgIG9yIGB1bmRlZmluZWRgLCBpbiB3aGljaCBjYXNlLCB0aGUgUkhTIHZhbHVlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9hc3luY051bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7XG4gIHJldHVybiBfbnVsbGlzaENvYWxlc2NlLl9udWxsaXNoQ29hbGVzY2UobGhzLCByaHNGbik7XG59XG5cbi8vIFN1Y3Jhc2UgdmVyc2lvbjpcbi8vIGFzeW5jIGZ1bmN0aW9uIF9hc3luY051bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7XG4vLyAgIGlmIChsaHMgIT0gbnVsbCkge1xuLy8gICAgIHJldHVybiBsaHM7XG4vLyAgIH0gZWxzZSB7XG4vLyAgICAgcmV0dXJuIGF3YWl0IHJoc0ZuKCk7XG4vLyAgIH1cbi8vIH1cblxuZXhwb3J0cy5fYXN5bmNOdWxsaXNoQ29hbGVzY2UgPSBfYXN5bmNOdWxsaXNoQ29hbGVzY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fYXN5bmNOdWxsaXNoQ29hbGVzY2UuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogUG9seWZpbGwgZm9yIHRoZSBvcHRpb25hbCBjaGFpbiBvcGVyYXRvciwgYD8uYCwgZ2l2ZW4gcHJldmlvdXMgY29udmVyc2lvbiBvZiB0aGUgZXhwcmVzc2lvbiBpbnRvIGFuIGFycmF5IG9mIHZhbHVlcyxcbiAqIGRlc2NyaXB0b3JzLCBhbmQgZnVuY3Rpb25zLCBmb3Igc2l0dWF0aW9ucyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydCBvZiB0aGUgZXhwcmVzc2lvbiBpcyBhc3luYy5cbiAqXG4gKiBBZGFwdGVkIGZyb20gU3VjcmFzZSAoaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UpIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvYmxvYi8yNjU4ODc4Njg5NjY5MTdmM2I5MjRjZTM4ZGZhZDAxZmJhYjEzMjlmL3NyYy90cmFuc2Zvcm1lcnMvT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lci50cyNMMTVcbiAqXG4gKiBAcGFyYW0gb3BzIEFycmF5IHJlc3VsdCBvZiBleHByZXNzaW9uIGNvbnZlcnNpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvblxuICovXG5hc3luYyBmdW5jdGlvbiBfYXN5bmNPcHRpb25hbENoYWluKG9wcykge1xuICBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbiAgbGV0IHZhbHVlID0gb3BzWzBdO1xuICBsZXQgaSA9IDE7XG4gIHdoaWxlIChpIDwgb3BzLmxlbmd0aCkge1xuICAgIGNvbnN0IG9wID0gb3BzW2ldIDtcbiAgICBjb25zdCBmbiA9IG9wc1tpICsgMV0gO1xuICAgIGkgKz0gMjtcbiAgICAvLyBieSBjaGVja2luZyBmb3IgbG9vc2UgZXF1YWxpdHkgdG8gYG51bGxgLCB3ZSBjYXRjaCBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgLy8gcmVhbGx5IHdlJ3JlIG1lYW5pbmcgdG8gcmV0dXJuIGB1bmRlZmluZWRgIGFzIGFuIGFjdHVhbCB2YWx1ZSBoZXJlLCBidXQgaXQgc2F2ZXMgYnl0ZXMgbm90IHRvIHdyaXRlIGl0XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHtcbiAgICAgIGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTtcbiAgICAgIHZhbHVlID0gYXdhaXQgZm4odmFsdWUpO1xuICAgIH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHtcbiAgICAgIHZhbHVlID0gYXdhaXQgZm4oKC4uLmFyZ3MpID0+ICh2YWx1ZSApLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpO1xuICAgICAgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyBTdWNyYXNlIHZlcnNpb246XG4vLyBhc3luYyBmdW5jdGlvbiBfYXN5bmNPcHRpb25hbENoYWluKG9wcykge1xuLy8gICBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbi8vICAgbGV0IHZhbHVlID0gb3BzWzBdO1xuLy8gICBsZXQgaSA9IDE7XG4vLyAgIHdoaWxlIChpIDwgb3BzLmxlbmd0aCkge1xuLy8gICAgIGNvbnN0IG9wID0gb3BzW2ldO1xuLy8gICAgIGNvbnN0IGZuID0gb3BzW2kgKyAxXTtcbi8vICAgICBpICs9IDI7XG4vLyAgICAgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHtcbi8vICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4vLyAgICAgfVxuLy8gICAgIGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHtcbi8vICAgICAgIGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTtcbi8vICAgICAgIHZhbHVlID0gYXdhaXQgZm4odmFsdWUpO1xuLy8gICAgIH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHtcbi8vICAgICAgIHZhbHVlID0gYXdhaXQgZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpO1xuLy8gICAgICAgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbi8vICAgICB9XG4vLyAgIH1cbi8vICAgcmV0dXJuIHZhbHVlO1xuLy8gfVxuXG5leHBvcnRzLl9hc3luY09wdGlvbmFsQ2hhaW4gPSBfYXN5bmNPcHRpb25hbENoYWluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2FzeW5jT3B0aW9uYWxDaGFpbi5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgX2FzeW5jT3B0aW9uYWxDaGFpbiA9IHJlcXVpcmUoJy4vX2FzeW5jT3B0aW9uYWxDaGFpbi5qcycpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS90cmVlLzI2NTg4Nzg2ODk2NjkxN2YzYjkyNGNlMzhkZmFkMDFmYmFiMTMyOWZcblxuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgdGhlIG9wdGlvbmFsIGNoYWluIG9wZXJhdG9yLCBgPy5gLCBnaXZlbiBwcmV2aW91cyBjb252ZXJzaW9uIG9mIHRoZSBleHByZXNzaW9uIGludG8gYW4gYXJyYXkgb2YgdmFsdWVzLFxuICogZGVzY3JpcHRvcnMsIGFuZCBmdW5jdGlvbnMsIGluIGNhc2VzIHdoZXJlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyB0byBiZSBkZWxldGVkLlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBTdWNyYXNlIChodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZSkgU2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS9ibG9iLzI2NTg4Nzg2ODk2NjkxN2YzYjkyNGNlMzhkZmFkMDFmYmFiMTMyOWYvc3JjL3RyYW5zZm9ybWVycy9PcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyLnRzI0wxNVxuICpcbiAqIEBwYXJhbSBvcHMgQXJyYXkgcmVzdWx0IG9mIGV4cHJlc3Npb24gY29udmVyc2lvblxuICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYGRlbGV0ZWAgb3BlcmF0b3I6IGB0cnVlYCwgdW5sZXNzIHRoZSBkZWxldGlvbiB0YXJnZXQgaXMgYW4gb3duLCBub24tY29uZmlndXJhYmxlXG4gKiBwcm9wZXJ0eSAob25lIHdoaWNoIGNhbid0IGJlIGRlbGV0ZWQgb3IgdHVybmVkIGludG8gYW4gYWNjZXNzb3IsIGFuZCB3aG9zZSBlbnVtZXJhYmlsaXR5IGNhbid0IGJlIGNoYW5nZWQpLCBpbiB3aGljaFxuICogY2FzZSBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiBfYXN5bmNPcHRpb25hbENoYWluRGVsZXRlKG9wcykge1xuICBjb25zdCByZXN1bHQgPSAoYXdhaXQgX2FzeW5jT3B0aW9uYWxDaGFpbi5fYXN5bmNPcHRpb25hbENoYWluKG9wcykpIDtcbiAgLy8gSWYgYHJlc3VsdGAgaXMgYG51bGxgLCBpdCBtZWFucyB3ZSBkaWRuJ3QgZ2V0IHRvIHRoZSBlbmQgb2YgdGhlIGNoYWluIGFuZCBzbyBub3RoaW5nIHdhcyBkZWxldGVkIChpbiB3aGljaCBjYXNlLFxuICAvLyByZXR1cm4gYHRydWVgIHNpbmNlIHRoYXQncyB3aGF0IGBkZWxldGVgIGRvZXMgd2hlbiBpdCBuby1vcHMpLiBJZiBpdCdzIG5vbi1udWxsLCB3ZSBrbm93IHRoZSBkZWxldGUgaGFwcGVuZWQsIGluXG4gIC8vIHdoaWNoIGNhc2Ugd2UgcmV0dXJuIHdoYXRldmVyIHRoZSBgZGVsZXRlYCByZXR1cm5lZCwgd2hpY2ggd2lsbCBiZSBhIGJvb2xlYW4uXG4gIHJldHVybiByZXN1bHQgPT0gbnVsbCA/IHRydWUgOiAocmVzdWx0ICk7XG59XG5cbi8vIFN1Y3Jhc2UgdmVyc2lvbjpcbi8vIGFzeW5jIGZ1bmN0aW9uIGFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZShvcHMpIHtcbi8vICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgQVNZTkNfT1BUSU9OQUxfQ0hBSU5fTkFNRShvcHMpO1xuLy8gICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyB0cnVlIDogcmVzdWx0O1xuLy8gfVxuXG5leHBvcnRzLl9hc3luY09wdGlvbmFsQ2hhaW5EZWxldGUgPSBfYXN5bmNPcHRpb25hbENoYWluRGVsZXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2FzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgdGhlIG9wdGlvbmFsIGNoYWluIG9wZXJhdG9yLCBgPy5gLCBnaXZlbiBwcmV2aW91cyBjb252ZXJzaW9uIG9mIHRoZSBleHByZXNzaW9uIGludG8gYW4gYXJyYXkgb2YgdmFsdWVzLFxuICogZGVzY3JpcHRvcnMsIGFuZCBmdW5jdGlvbnMuXG4gKlxuICogQWRhcHRlZCBmcm9tIFN1Y3Jhc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlKVxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlL2Jsb2IvMjY1ODg3ODY4OTY2OTE3ZjNiOTI0Y2UzOGRmYWQwMWZiYWIxMzI5Zi9zcmMvdHJhbnNmb3JtZXJzL09wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIudHMjTDE1XG4gKlxuICogQHBhcmFtIG9wcyBBcnJheSByZXN1bHQgb2YgZXhwcmVzc2lvbiBjb252ZXJzaW9uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7XG4gIGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWUgPSBvcHNbMF07XG4gIGxldCBpID0gMTtcbiAgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7XG4gICAgY29uc3Qgb3AgPSBvcHNbaV0gO1xuICAgIGNvbnN0IGZuID0gb3BzW2kgKyAxXSA7XG4gICAgaSArPSAyO1xuICAgIC8vIGJ5IGNoZWNraW5nIGZvciBsb29zZSBlcXVhbGl0eSB0byBgbnVsbGAsIHdlIGNhdGNoIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAvLyByZWFsbHkgd2UncmUgbWVhbmluZyB0byByZXR1cm4gYHVuZGVmaW5lZGAgYXMgYW4gYWN0dWFsIHZhbHVlIGhlcmUsIGJ1dCBpdCBzYXZlcyBieXRlcyBub3QgdG8gd3JpdGUgaXRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykge1xuICAgICAgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlO1xuICAgICAgdmFsdWUgPSBmbih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykge1xuICAgICAgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gKHZhbHVlICkuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7XG4gICAgICBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIFN1Y3Jhc2UgdmVyc2lvblxuLy8gZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7XG4vLyAgIGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuLy8gICBsZXQgdmFsdWUgPSBvcHNbMF07XG4vLyAgIGxldCBpID0gMTtcbi8vICAgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7XG4vLyAgICAgY29uc3Qgb3AgPSBvcHNbaV07XG4vLyAgICAgY29uc3QgZm4gPSBvcHNbaSArIDFdO1xuLy8gICAgIGkgKz0gMjtcbi8vICAgICBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkge1xuLy8gICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbi8vICAgICB9XG4vLyAgICAgaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykge1xuLy8gICAgICAgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlO1xuLy8gICAgICAgdmFsdWUgPSBmbih2YWx1ZSk7XG4vLyAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykge1xuLy8gICAgICAgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7XG4vLyAgICAgICBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuLy8gICAgIH1cbi8vICAgfVxuLy8gICByZXR1cm4gdmFsdWU7XG4vLyB9XG5cbmV4cG9ydHMuX29wdGlvbmFsQ2hhaW4gPSBfb3B0aW9uYWxDaGFpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9vcHRpb25hbENoYWluLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBfb3B0aW9uYWxDaGFpbiA9IHJlcXVpcmUoJy4vX29wdGlvbmFsQ2hhaW4uanMnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvdHJlZS8yNjU4ODc4Njg5NjY5MTdmM2I5MjRjZTM4ZGZhZDAxZmJhYjEzMjlmXG5cbi8qKlxuICogUG9seWZpbGwgZm9yIHRoZSBvcHRpb25hbCBjaGFpbiBvcGVyYXRvciwgYD8uYCwgZ2l2ZW4gcHJldmlvdXMgY29udmVyc2lvbiBvZiB0aGUgZXhwcmVzc2lvbiBpbnRvIGFuIGFycmF5IG9mIHZhbHVlcyxcbiAqIGRlc2NyaXB0b3JzLCBhbmQgZnVuY3Rpb25zLCBpbiBjYXNlcyB3aGVyZSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgdG8gYmUgZGVsZXRlZC5cbiAqXG4gKiBBZGFwdGVkIGZyb20gU3VjcmFzZSAoaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UpIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvYmxvYi8yNjU4ODc4Njg5NjY5MTdmM2I5MjRjZTM4ZGZhZDAxZmJhYjEzMjlmL3NyYy90cmFuc2Zvcm1lcnMvT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lci50cyNMMTVcbiAqXG4gKiBAcGFyYW0gb3BzIEFycmF5IHJlc3VsdCBvZiBleHByZXNzaW9uIGNvbnZlcnNpb25cbiAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGBkZWxldGVgIG9wZXJhdG9yOiBgdHJ1ZWAsIHVubGVzcyB0aGUgZGVsZXRpb24gdGFyZ2V0IGlzIGFuIG93biwgbm9uLWNvbmZpZ3VyYWJsZVxuICogcHJvcGVydHkgKG9uZSB3aGljaCBjYW4ndCBiZSBkZWxldGVkIG9yIHR1cm5lZCBpbnRvIGFuIGFjY2Vzc29yLCBhbmQgd2hvc2UgZW51bWVyYWJpbGl0eSBjYW4ndCBiZSBjaGFuZ2VkKSwgaW4gd2hpY2hcbiAqIGNhc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW5EZWxldGUob3BzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IF9vcHRpb25hbENoYWluLl9vcHRpb25hbENoYWluKG9wcykgO1xuICAvLyBJZiBgcmVzdWx0YCBpcyBgbnVsbGAsIGl0IG1lYW5zIHdlIGRpZG4ndCBnZXQgdG8gdGhlIGVuZCBvZiB0aGUgY2hhaW4gYW5kIHNvIG5vdGhpbmcgd2FzIGRlbGV0ZWQgKGluIHdoaWNoIGNhc2UsXG4gIC8vIHJldHVybiBgdHJ1ZWAgc2luY2UgdGhhdCdzIHdoYXQgYGRlbGV0ZWAgZG9lcyB3aGVuIGl0IG5vLW9wcykuIElmIGl0J3Mgbm9uLW51bGwsIHdlIGtub3cgdGhlIGRlbGV0ZSBoYXBwZW5lZCwgaW5cbiAgLy8gd2hpY2ggY2FzZSB3ZSByZXR1cm4gd2hhdGV2ZXIgdGhlIGBkZWxldGVgIHJldHVybmVkLCB3aGljaCB3aWxsIGJlIGEgYm9vbGVhbi5cbiAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gdHJ1ZSA6IHJlc3VsdDtcbn1cblxuLy8gU3VjcmFzZSB2ZXJzaW9uOlxuLy8gZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW5EZWxldGUob3BzKSB7XG4vLyAgIGNvbnN0IHJlc3VsdCA9IF9vcHRpb25hbENoYWluKG9wcyk7XG4vLyAgIC8vIGJ5IGNoZWNraW5nIGZvciBsb29zZSBlcXVhbGl0eSB0byBgbnVsbGAsIHdlIGNhdGNoIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuLy8gICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyB0cnVlIDogcmVzdWx0O1xuLy8gfVxuXG5leHBvcnRzLl9vcHRpb25hbENoYWluRGVsZXRlID0gX29wdGlvbmFsQ2hhaW5EZWxldGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fb3B0aW9uYWxDaGFpbkRlbGV0ZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCBidXQgd2l0aCBtb2RpZmljYXRpb25zIHRvOlxuLy8gICBhKSByZWR1Y2UgdGhlIHNpemUgYnkgc2tpcHBpbmcgdGhlIHJ1bnRpbWUgdHlwZSAtIGNoZWNraW5nXG4vLyAgIGIpIGVuc3VyZSBpdCBnZXRzIGRvd24gLSBjb21waWxlZCBmb3Igb2xkIHZlcnNpb25zIG9mIE5vZGUodGhlIHB1Ymxpc2hlZCBwYWNrYWdlIG9ubHkgc3VwcG9ydHMgTm9kZSAxMispLlxuLy9cbi8vIE1JVCBMaWNlbnNlXG4vL1xuLy8gQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tKVxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gZG9jdW1lbnRhdGlvbiBmaWxlcyh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZCAvIG9yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Zcbi8vIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE9cbi8vIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5JTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcbi8vIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Ncbi8vIElOIFRIRSBTT0ZUV0FSRS5cblxuLyoqXG4gKiBHaXZlbiBhIHN0cmluZywgZXNjYXBlIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBtZWFuaW5nIGluIHRoZSByZWdleCBncmFtbWFyLCBzdWNoIHRoYXQgdGhlIHJlc3VsdCBpcyBzYWZlIHRvIGZlZWQgdG9cbiAqIGBuZXcgUmVnRXhwKClgLlxuICpcbiAqIEBwYXJhbSByZWdleFN0cmluZyBUaGUgc3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgQW4gdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBlc2NhcGVkXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0ZvclJlZ2V4KHJlZ2V4U3RyaW5nKSB7XG4gIC8vIGVzY2FwZSB0aGUgaHlwaGVuIHNlcGFyYXRlbHkgc28gd2UgY2FuIGFsc28gcmVwbGFjZSBpdCB3aXRoIGEgdW5pY29kZSBsaXRlcmFsIGh5cGhlbiwgdG8gYXZvaWQgdGhlIHByb2JsZW1zXG4gIC8vIGRpc2N1c3NlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VzY2FwZS1zdHJpbmctcmVnZXhwL2lzc3Vlcy8yMC5cbiAgcmV0dXJuIHJlZ2V4U3RyaW5nLnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nLCAnXFxcXCQmJykucmVwbGFjZSgvLS9nLCAnXFxcXHgyZCcpO1xufVxuXG5leHBvcnRzLmVzY2FwZVN0cmluZ0ZvclJlZ2V4ID0gZXNjYXBlU3RyaW5nRm9yUmVnZXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lc2NhcGVTdHJpbmdGb3JSZWdleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgYWdncmVnYXRlRXJyb3JzID0gcmVxdWlyZSgnLi9hZ2dyZWdhdGUtZXJyb3JzLmpzJyk7XG5jb25zdCBicm93c2VyID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG5jb25zdCBkc24gPSByZXF1aXJlKCcuL2Rzbi5qcycpO1xuY29uc3QgZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5jb25zdCB3b3JsZHdpZGUgPSByZXF1aXJlKCcuL3dvcmxkd2lkZS5qcycpO1xuY29uc3QgaW5kZXggPSByZXF1aXJlKCcuL2luc3RydW1lbnQvaW5kZXguanMnKTtcbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcy5qcycpO1xuY29uc3QgaXNCcm93c2VyID0gcmVxdWlyZSgnLi9pc0Jyb3dzZXIuanMnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJy4vbG9nZ2VyLmpzJyk7XG5jb25zdCBtZW1vID0gcmVxdWlyZSgnLi9tZW1vLmpzJyk7XG5jb25zdCBtaXNjID0gcmVxdWlyZSgnLi9taXNjLmpzJyk7XG5jb25zdCBub2RlID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG5jb25zdCBub3JtYWxpemUgPSByZXF1aXJlKCcuL25vcm1hbGl6ZS5qcycpO1xuY29uc3Qgb2JqZWN0ID0gcmVxdWlyZSgnLi9vYmplY3QuanMnKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCcuL3BhdGguanMnKTtcbmNvbnN0IHByb21pc2VidWZmZXIgPSByZXF1aXJlKCcuL3Byb21pc2VidWZmZXIuanMnKTtcbmNvbnN0IHJlcXVlc3RkYXRhID0gcmVxdWlyZSgnLi9yZXF1ZXN0ZGF0YS5qcycpO1xuY29uc3Qgc2V2ZXJpdHkgPSByZXF1aXJlKCcuL3NldmVyaXR5LmpzJyk7XG5jb25zdCBzdGFja3RyYWNlID0gcmVxdWlyZSgnLi9zdGFja3RyYWNlLmpzJyk7XG5jb25zdCBzdHJpbmcgPSByZXF1aXJlKCcuL3N0cmluZy5qcycpO1xuY29uc3Qgc3VwcG9ydHMgPSByZXF1aXJlKCcuL3N1cHBvcnRzLmpzJyk7XG5jb25zdCBzeW5jcHJvbWlzZSA9IHJlcXVpcmUoJy4vc3luY3Byb21pc2UuanMnKTtcbmNvbnN0IHRpbWUgPSByZXF1aXJlKCcuL3RpbWUuanMnKTtcbmNvbnN0IHRyYWNpbmcgPSByZXF1aXJlKCcuL3RyYWNpbmcuanMnKTtcbmNvbnN0IGVudiA9IHJlcXVpcmUoJy4vZW52LmpzJyk7XG5jb25zdCBlbnZlbG9wZSA9IHJlcXVpcmUoJy4vZW52ZWxvcGUuanMnKTtcbmNvbnN0IGNsaWVudHJlcG9ydCA9IHJlcXVpcmUoJy4vY2xpZW50cmVwb3J0LmpzJyk7XG5jb25zdCByYXRlbGltaXQgPSByZXF1aXJlKCcuL3JhdGVsaW1pdC5qcycpO1xuY29uc3QgYmFnZ2FnZSA9IHJlcXVpcmUoJy4vYmFnZ2FnZS5qcycpO1xuY29uc3QgdXJsID0gcmVxdWlyZSgnLi91cmwuanMnKTtcbmNvbnN0IHVzZXJJbnRlZ3JhdGlvbnMgPSByZXF1aXJlKCcuL3VzZXJJbnRlZ3JhdGlvbnMuanMnKTtcbmNvbnN0IGNhY2hlID0gcmVxdWlyZSgnLi9jYWNoZS5qcycpO1xuY29uc3QgZXZlbnRidWlsZGVyID0gcmVxdWlyZSgnLi9ldmVudGJ1aWxkZXIuanMnKTtcbmNvbnN0IGFuciA9IHJlcXVpcmUoJy4vYW5yLmpzJyk7XG5jb25zdCBscnUgPSByZXF1aXJlKCcuL2xydS5qcycpO1xuY29uc3QgX2FzeW5jTnVsbGlzaENvYWxlc2NlID0gcmVxdWlyZSgnLi9idWlsZFBvbHlmaWxscy9fYXN5bmNOdWxsaXNoQ29hbGVzY2UuanMnKTtcbmNvbnN0IF9hc3luY09wdGlvbmFsQ2hhaW4gPSByZXF1aXJlKCcuL2J1aWxkUG9seWZpbGxzL19hc3luY09wdGlvbmFsQ2hhaW4uanMnKTtcbmNvbnN0IF9hc3luY09wdGlvbmFsQ2hhaW5EZWxldGUgPSByZXF1aXJlKCcuL2J1aWxkUG9seWZpbGxzL19hc3luY09wdGlvbmFsQ2hhaW5EZWxldGUuanMnKTtcbmNvbnN0IF9udWxsaXNoQ29hbGVzY2UgPSByZXF1aXJlKCcuL2J1aWxkUG9seWZpbGxzL19udWxsaXNoQ29hbGVzY2UuanMnKTtcbmNvbnN0IF9vcHRpb25hbENoYWluID0gcmVxdWlyZSgnLi9idWlsZFBvbHlmaWxscy9fb3B0aW9uYWxDaGFpbi5qcycpO1xuY29uc3QgX29wdGlvbmFsQ2hhaW5EZWxldGUgPSByZXF1aXJlKCcuL2J1aWxkUG9seWZpbGxzL19vcHRpb25hbENoYWluRGVsZXRlLmpzJyk7XG5jb25zdCBjb25zb2xlID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50L2NvbnNvbGUuanMnKTtcbmNvbnN0IGRvbSA9IHJlcXVpcmUoJy4vaW5zdHJ1bWVudC9kb20uanMnKTtcbmNvbnN0IHhociA9IHJlcXVpcmUoJy4vaW5zdHJ1bWVudC94aHIuanMnKTtcbmNvbnN0IGZldGNoID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50L2ZldGNoLmpzJyk7XG5jb25zdCBoaXN0b3J5ID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50L2hpc3RvcnkuanMnKTtcbmNvbnN0IGdsb2JhbEVycm9yID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50L2dsb2JhbEVycm9yLmpzJyk7XG5jb25zdCBnbG9iYWxVbmhhbmRsZWRSZWplY3Rpb24gPSByZXF1aXJlKCcuL2luc3RydW1lbnQvZ2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uLmpzJyk7XG5jb25zdCBfaGFuZGxlcnMgPSByZXF1aXJlKCcuL2luc3RydW1lbnQvX2hhbmRsZXJzLmpzJyk7XG5jb25zdCBub2RlU3RhY2tUcmFjZSA9IHJlcXVpcmUoJy4vbm9kZS1zdGFjay10cmFjZS5qcycpO1xuY29uc3QgZXNjYXBlU3RyaW5nRm9yUmVnZXggPSByZXF1aXJlKCcuL3ZlbmRvci9lc2NhcGVTdHJpbmdGb3JSZWdleC5qcycpO1xuY29uc3Qgc3VwcG9ydHNIaXN0b3J5ID0gcmVxdWlyZSgnLi92ZW5kb3Ivc3VwcG9ydHNIaXN0b3J5LmpzJyk7XG5cblxuXG5leHBvcnRzLmFwcGx5QWdncmVnYXRlRXJyb3JzVG9FdmVudCA9IGFnZ3JlZ2F0ZUVycm9ycy5hcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQ7XG5leHBvcnRzLmdldENvbXBvbmVudE5hbWUgPSBicm93c2VyLmdldENvbXBvbmVudE5hbWU7XG5leHBvcnRzLmdldERvbUVsZW1lbnQgPSBicm93c2VyLmdldERvbUVsZW1lbnQ7XG5leHBvcnRzLmdldExvY2F0aW9uSHJlZiA9IGJyb3dzZXIuZ2V0TG9jYXRpb25IcmVmO1xuZXhwb3J0cy5odG1sVHJlZUFzU3RyaW5nID0gYnJvd3Nlci5odG1sVHJlZUFzU3RyaW5nO1xuZXhwb3J0cy5kc25Gcm9tU3RyaW5nID0gZHNuLmRzbkZyb21TdHJpbmc7XG5leHBvcnRzLmRzblRvU3RyaW5nID0gZHNuLmRzblRvU3RyaW5nO1xuZXhwb3J0cy5tYWtlRHNuID0gZHNuLm1ha2VEc247XG5leHBvcnRzLlNlbnRyeUVycm9yID0gZXJyb3IuU2VudHJ5RXJyb3I7XG5leHBvcnRzLkdMT0JBTF9PQkogPSB3b3JsZHdpZGUuR0xPQkFMX09CSjtcbmV4cG9ydHMuZ2V0R2xvYmFsT2JqZWN0ID0gd29ybGR3aWRlLmdldEdsb2JhbE9iamVjdDtcbmV4cG9ydHMuZ2V0R2xvYmFsU2luZ2xldG9uID0gd29ybGR3aWRlLmdldEdsb2JhbFNpbmdsZXRvbjtcbmV4cG9ydHMuYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGluZGV4LmFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmlzRE9NRXJyb3IgPSBpcy5pc0RPTUVycm9yO1xuZXhwb3J0cy5pc0RPTUV4Y2VwdGlvbiA9IGlzLmlzRE9NRXhjZXB0aW9uO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpcy5pc0VsZW1lbnQ7XG5leHBvcnRzLmlzRXJyb3IgPSBpcy5pc0Vycm9yO1xuZXhwb3J0cy5pc0Vycm9yRXZlbnQgPSBpcy5pc0Vycm9yRXZlbnQ7XG5leHBvcnRzLmlzRXZlbnQgPSBpcy5pc0V2ZW50O1xuZXhwb3J0cy5pc0luc3RhbmNlT2YgPSBpcy5pc0luc3RhbmNlT2Y7XG5leHBvcnRzLmlzTmFOID0gaXMuaXNOYU47XG5leHBvcnRzLmlzUGFyYW1ldGVyaXplZFN0cmluZyA9IGlzLmlzUGFyYW1ldGVyaXplZFN0cmluZztcbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzLmlzUGxhaW5PYmplY3Q7XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXMuaXNQcmltaXRpdmU7XG5leHBvcnRzLmlzUmVnRXhwID0gaXMuaXNSZWdFeHA7XG5leHBvcnRzLmlzU3RyaW5nID0gaXMuaXNTdHJpbmc7XG5leHBvcnRzLmlzU3ludGhldGljRXZlbnQgPSBpcy5pc1N5bnRoZXRpY0V2ZW50O1xuZXhwb3J0cy5pc1RoZW5hYmxlID0gaXMuaXNUaGVuYWJsZTtcbmV4cG9ydHMuaXNWdWVWaWV3TW9kZWwgPSBpcy5pc1Z1ZVZpZXdNb2RlbDtcbmV4cG9ydHMuaXNCcm93c2VyID0gaXNCcm93c2VyLmlzQnJvd3NlcjtcbmV4cG9ydHMuQ09OU09MRV9MRVZFTFMgPSBsb2dnZXIuQ09OU09MRV9MRVZFTFM7XG5leHBvcnRzLmNvbnNvbGVTYW5kYm94ID0gbG9nZ2VyLmNvbnNvbGVTYW5kYm94O1xuZXhwb3J0cy5sb2dnZXIgPSBsb2dnZXIubG9nZ2VyO1xuZXhwb3J0cy5vcmlnaW5hbENvbnNvbGVNZXRob2RzID0gbG9nZ2VyLm9yaWdpbmFsQ29uc29sZU1ldGhvZHM7XG5leHBvcnRzLm1lbW9CdWlsZGVyID0gbWVtby5tZW1vQnVpbGRlcjtcbmV4cG9ydHMuYWRkQ29udGV4dFRvRnJhbWUgPSBtaXNjLmFkZENvbnRleHRUb0ZyYW1lO1xuZXhwb3J0cy5hZGRFeGNlcHRpb25NZWNoYW5pc20gPSBtaXNjLmFkZEV4Y2VwdGlvbk1lY2hhbmlzbTtcbmV4cG9ydHMuYWRkRXhjZXB0aW9uVHlwZVZhbHVlID0gbWlzYy5hZGRFeGNlcHRpb25UeXBlVmFsdWU7XG5leHBvcnRzLmFycmF5aWZ5ID0gbWlzYy5hcnJheWlmeTtcbmV4cG9ydHMuY2hlY2tPclNldEFscmVhZHlDYXVnaHQgPSBtaXNjLmNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0O1xuZXhwb3J0cy5nZXRFdmVudERlc2NyaXB0aW9uID0gbWlzYy5nZXRFdmVudERlc2NyaXB0aW9uO1xuZXhwb3J0cy5wYXJzZVNlbXZlciA9IG1pc2MucGFyc2VTZW12ZXI7XG5leHBvcnRzLnV1aWQ0ID0gbWlzYy51dWlkNDtcbmV4cG9ydHMuZHluYW1pY1JlcXVpcmUgPSBub2RlLmR5bmFtaWNSZXF1aXJlO1xuZXhwb3J0cy5pc05vZGVFbnYgPSBub2RlLmlzTm9kZUVudjtcbmV4cG9ydHMubG9hZE1vZHVsZSA9IG5vZGUubG9hZE1vZHVsZTtcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplLm5vcm1hbGl6ZTtcbmV4cG9ydHMubm9ybWFsaXplVG9TaXplID0gbm9ybWFsaXplLm5vcm1hbGl6ZVRvU2l6ZTtcbmV4cG9ydHMubm9ybWFsaXplVXJsVG9CYXNlID0gbm9ybWFsaXplLm5vcm1hbGl6ZVVybFRvQmFzZTtcbmV4cG9ydHMud2FsayA9IG5vcm1hbGl6ZS53YWxrO1xuZXhwb3J0cy5hZGROb25FbnVtZXJhYmxlUHJvcGVydHkgPSBvYmplY3QuYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5O1xuZXhwb3J0cy5jb252ZXJ0VG9QbGFpbk9iamVjdCA9IG9iamVjdC5jb252ZXJ0VG9QbGFpbk9iamVjdDtcbmV4cG9ydHMuZHJvcFVuZGVmaW5lZEtleXMgPSBvYmplY3QuZHJvcFVuZGVmaW5lZEtleXM7XG5leHBvcnRzLmV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZSA9IG9iamVjdC5leHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2U7XG5leHBvcnRzLmZpbGwgPSBvYmplY3QuZmlsbDtcbmV4cG9ydHMuZ2V0T3JpZ2luYWxGdW5jdGlvbiA9IG9iamVjdC5nZXRPcmlnaW5hbEZ1bmN0aW9uO1xuZXhwb3J0cy5tYXJrRnVuY3Rpb25XcmFwcGVkID0gb2JqZWN0Lm1hcmtGdW5jdGlvbldyYXBwZWQ7XG5leHBvcnRzLm9iamVjdGlmeSA9IG9iamVjdC5vYmplY3RpZnk7XG5leHBvcnRzLnVybEVuY29kZSA9IG9iamVjdC51cmxFbmNvZGU7XG5leHBvcnRzLmJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZTtcbmV4cG9ydHMuZGlybmFtZSA9IHBhdGguZGlybmFtZTtcbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IHBhdGguaXNBYnNvbHV0ZTtcbmV4cG9ydHMuam9pbiA9IHBhdGguam9pbjtcbmV4cG9ydHMubm9ybWFsaXplUGF0aCA9IHBhdGgubm9ybWFsaXplUGF0aDtcbmV4cG9ydHMucmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlO1xuZXhwb3J0cy5yZXNvbHZlID0gcGF0aC5yZXNvbHZlO1xuZXhwb3J0cy5tYWtlUHJvbWlzZUJ1ZmZlciA9IHByb21pc2VidWZmZXIubWFrZVByb21pc2VCdWZmZXI7XG5leHBvcnRzLkRFRkFVTFRfVVNFUl9JTkNMVURFUyA9IHJlcXVlc3RkYXRhLkRFRkFVTFRfVVNFUl9JTkNMVURFUztcbmV4cG9ydHMuYWRkUmVxdWVzdERhdGFUb0V2ZW50ID0gcmVxdWVzdGRhdGEuYWRkUmVxdWVzdERhdGFUb0V2ZW50O1xuZXhwb3J0cy5hZGRSZXF1ZXN0RGF0YVRvVHJhbnNhY3Rpb24gPSByZXF1ZXN0ZGF0YS5hZGRSZXF1ZXN0RGF0YVRvVHJhbnNhY3Rpb247XG5leHBvcnRzLmV4dHJhY3RQYXRoRm9yVHJhbnNhY3Rpb24gPSByZXF1ZXN0ZGF0YS5leHRyYWN0UGF0aEZvclRyYW5zYWN0aW9uO1xuZXhwb3J0cy5leHRyYWN0UmVxdWVzdERhdGEgPSByZXF1ZXN0ZGF0YS5leHRyYWN0UmVxdWVzdERhdGE7XG5leHBvcnRzLndpbnRlckNHSGVhZGVyc1RvRGljdCA9IHJlcXVlc3RkYXRhLndpbnRlckNHSGVhZGVyc1RvRGljdDtcbmV4cG9ydHMud2ludGVyQ0dSZXF1ZXN0VG9SZXF1ZXN0RGF0YSA9IHJlcXVlc3RkYXRhLndpbnRlckNHUmVxdWVzdFRvUmVxdWVzdERhdGE7XG5leHBvcnRzLnNldmVyaXR5RnJvbVN0cmluZyA9IHNldmVyaXR5LnNldmVyaXR5RnJvbVN0cmluZztcbmV4cG9ydHMuc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcgPSBzZXZlcml0eS5zZXZlcml0eUxldmVsRnJvbVN0cmluZztcbmV4cG9ydHMudmFsaWRTZXZlcml0eUxldmVscyA9IHNldmVyaXR5LnZhbGlkU2V2ZXJpdHlMZXZlbHM7XG5leHBvcnRzLmNyZWF0ZVN0YWNrUGFyc2VyID0gc3RhY2t0cmFjZS5jcmVhdGVTdGFja1BhcnNlcjtcbmV4cG9ydHMuZ2V0RnVuY3Rpb25OYW1lID0gc3RhY2t0cmFjZS5nZXRGdW5jdGlvbk5hbWU7XG5leHBvcnRzLm5vZGVTdGFja0xpbmVQYXJzZXIgPSBzdGFja3RyYWNlLm5vZGVTdGFja0xpbmVQYXJzZXI7XG5leHBvcnRzLnN0YWNrUGFyc2VyRnJvbVN0YWNrUGFyc2VyT3B0aW9ucyA9IHN0YWNrdHJhY2Uuc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zO1xuZXhwb3J0cy5zdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2UgPSBzdGFja3RyYWNlLnN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZTtcbmV4cG9ydHMuaXNNYXRjaGluZ1BhdHRlcm4gPSBzdHJpbmcuaXNNYXRjaGluZ1BhdHRlcm47XG5leHBvcnRzLnNhZmVKb2luID0gc3RyaW5nLnNhZmVKb2luO1xuZXhwb3J0cy5zbmlwTGluZSA9IHN0cmluZy5zbmlwTGluZTtcbmV4cG9ydHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuID0gc3RyaW5nLnN0cmluZ01hdGNoZXNTb21lUGF0dGVybjtcbmV4cG9ydHMudHJ1bmNhdGUgPSBzdHJpbmcudHJ1bmNhdGU7XG5leHBvcnRzLmlzTmF0aXZlRmV0Y2ggPSBzdXBwb3J0cy5pc05hdGl2ZUZldGNoO1xuZXhwb3J0cy5zdXBwb3J0c0RPTUVycm9yID0gc3VwcG9ydHMuc3VwcG9ydHNET01FcnJvcjtcbmV4cG9ydHMuc3VwcG9ydHNET01FeGNlcHRpb24gPSBzdXBwb3J0cy5zdXBwb3J0c0RPTUV4Y2VwdGlvbjtcbmV4cG9ydHMuc3VwcG9ydHNFcnJvckV2ZW50ID0gc3VwcG9ydHMuc3VwcG9ydHNFcnJvckV2ZW50O1xuZXhwb3J0cy5zdXBwb3J0c0ZldGNoID0gc3VwcG9ydHMuc3VwcG9ydHNGZXRjaDtcbmV4cG9ydHMuc3VwcG9ydHNOYXRpdmVGZXRjaCA9IHN1cHBvcnRzLnN1cHBvcnRzTmF0aXZlRmV0Y2g7XG5leHBvcnRzLnN1cHBvcnRzUmVmZXJyZXJQb2xpY3kgPSBzdXBwb3J0cy5zdXBwb3J0c1JlZmVycmVyUG9saWN5O1xuZXhwb3J0cy5zdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyID0gc3VwcG9ydHMuc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlcjtcbmV4cG9ydHMuU3luY1Byb21pc2UgPSBzeW5jcHJvbWlzZS5TeW5jUHJvbWlzZTtcbmV4cG9ydHMucmVqZWN0ZWRTeW5jUHJvbWlzZSA9IHN5bmNwcm9taXNlLnJlamVjdGVkU3luY1Byb21pc2U7XG5leHBvcnRzLnJlc29sdmVkU3luY1Byb21pc2UgPSBzeW5jcHJvbWlzZS5yZXNvbHZlZFN5bmNQcm9taXNlO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUnLCB7XG5cdGVudW1lcmFibGU6IHRydWUsXG5cdGdldDogKCkgPT4gdGltZS5fYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGVcbn0pO1xuZXhwb3J0cy5icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luID0gdGltZS5icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luO1xuZXhwb3J0cy5kYXRlVGltZXN0YW1wSW5TZWNvbmRzID0gdGltZS5kYXRlVGltZXN0YW1wSW5TZWNvbmRzO1xuZXhwb3J0cy50aW1lc3RhbXBJblNlY29uZHMgPSB0aW1lLnRpbWVzdGFtcEluU2Vjb25kcztcbmV4cG9ydHMudGltZXN0YW1wV2l0aE1zID0gdGltZS50aW1lc3RhbXBXaXRoTXM7XG5leHBvcnRzLlRSQUNFUEFSRU5UX1JFR0VYUCA9IHRyYWNpbmcuVFJBQ0VQQVJFTlRfUkVHRVhQO1xuZXhwb3J0cy5leHRyYWN0VHJhY2VwYXJlbnREYXRhID0gdHJhY2luZy5leHRyYWN0VHJhY2VwYXJlbnREYXRhO1xuZXhwb3J0cy5nZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyID0gdHJhY2luZy5nZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyO1xuZXhwb3J0cy5wcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycyA9IHRyYWNpbmcucHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnM7XG5leHBvcnRzLnRyYWNpbmdDb250ZXh0RnJvbUhlYWRlcnMgPSB0cmFjaW5nLnRyYWNpbmdDb250ZXh0RnJvbUhlYWRlcnM7XG5leHBvcnRzLmdldFNES1NvdXJjZSA9IGVudi5nZXRTREtTb3VyY2U7XG5leHBvcnRzLmlzQnJvd3NlckJ1bmRsZSA9IGVudi5pc0Jyb3dzZXJCdW5kbGU7XG5leHBvcnRzLmFkZEl0ZW1Ub0VudmVsb3BlID0gZW52ZWxvcGUuYWRkSXRlbVRvRW52ZWxvcGU7XG5leHBvcnRzLmNyZWF0ZUF0dGFjaG1lbnRFbnZlbG9wZUl0ZW0gPSBlbnZlbG9wZS5jcmVhdGVBdHRhY2htZW50RW52ZWxvcGVJdGVtO1xuZXhwb3J0cy5jcmVhdGVFbnZlbG9wZSA9IGVudmVsb3BlLmNyZWF0ZUVudmVsb3BlO1xuZXhwb3J0cy5jcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyA9IGVudmVsb3BlLmNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzO1xuZXhwb3J0cy5lbnZlbG9wZUNvbnRhaW5zSXRlbVR5cGUgPSBlbnZlbG9wZS5lbnZlbG9wZUNvbnRhaW5zSXRlbVR5cGU7XG5leHBvcnRzLmVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSA9IGVudmVsb3BlLmVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeTtcbmV4cG9ydHMuZm9yRWFjaEVudmVsb3BlSXRlbSA9IGVudmVsb3BlLmZvckVhY2hFbnZlbG9wZUl0ZW07XG5leHBvcnRzLmdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIgPSBlbnZlbG9wZS5nZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyO1xuZXhwb3J0cy5wYXJzZUVudmVsb3BlID0gZW52ZWxvcGUucGFyc2VFbnZlbG9wZTtcbmV4cG9ydHMuc2VyaWFsaXplRW52ZWxvcGUgPSBlbnZlbG9wZS5zZXJpYWxpemVFbnZlbG9wZTtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50UmVwb3J0RW52ZWxvcGUgPSBjbGllbnRyZXBvcnQuY3JlYXRlQ2xpZW50UmVwb3J0RW52ZWxvcGU7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfQUZURVIgPSByYXRlbGltaXQuREVGQVVMVF9SRVRSWV9BRlRFUjtcbmV4cG9ydHMuZGlzYWJsZWRVbnRpbCA9IHJhdGVsaW1pdC5kaXNhYmxlZFVudGlsO1xuZXhwb3J0cy5pc1JhdGVMaW1pdGVkID0gcmF0ZWxpbWl0LmlzUmF0ZUxpbWl0ZWQ7XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlckhlYWRlciA9IHJhdGVsaW1pdC5wYXJzZVJldHJ5QWZ0ZXJIZWFkZXI7XG5leHBvcnRzLnVwZGF0ZVJhdGVMaW1pdHMgPSByYXRlbGltaXQudXBkYXRlUmF0ZUxpbWl0cztcbmV4cG9ydHMuQkFHR0FHRV9IRUFERVJfTkFNRSA9IGJhZ2dhZ2UuQkFHR0FHRV9IRUFERVJfTkFNRTtcbmV4cG9ydHMuTUFYX0JBR0dBR0VfU1RSSU5HX0xFTkdUSCA9IGJhZ2dhZ2UuTUFYX0JBR0dBR0VfU1RSSU5HX0xFTkdUSDtcbmV4cG9ydHMuU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWCA9IGJhZ2dhZ2UuU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWDtcbmV4cG9ydHMuU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWF9SRUdFWCA9IGJhZ2dhZ2UuU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWF9SRUdFWDtcbmV4cG9ydHMuYmFnZ2FnZUhlYWRlclRvRHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGJhZ2dhZ2UuYmFnZ2FnZUhlYWRlclRvRHluYW1pY1NhbXBsaW5nQ29udGV4dDtcbmV4cG9ydHMuZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlciA9IGJhZ2dhZ2UuZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlcjtcbmV4cG9ydHMuZ2V0TnVtYmVyT2ZVcmxTZWdtZW50cyA9IHVybC5nZXROdW1iZXJPZlVybFNlZ21lbnRzO1xuZXhwb3J0cy5nZXRTYW5pdGl6ZWRVcmxTdHJpbmcgPSB1cmwuZ2V0U2FuaXRpemVkVXJsU3RyaW5nO1xuZXhwb3J0cy5wYXJzZVVybCA9IHVybC5wYXJzZVVybDtcbmV4cG9ydHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50ID0gdXJsLnN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudDtcbmV4cG9ydHMuYWRkT3JVcGRhdGVJbnRlZ3JhdGlvbiA9IHVzZXJJbnRlZ3JhdGlvbnMuYWRkT3JVcGRhdGVJbnRlZ3JhdGlvbjtcbmV4cG9ydHMubWFrZUZpZm9DYWNoZSA9IGNhY2hlLm1ha2VGaWZvQ2FjaGU7XG5leHBvcnRzLmV2ZW50RnJvbU1lc3NhZ2UgPSBldmVudGJ1aWxkZXIuZXZlbnRGcm9tTWVzc2FnZTtcbmV4cG9ydHMuZXZlbnRGcm9tVW5rbm93bklucHV0ID0gZXZlbnRidWlsZGVyLmV2ZW50RnJvbVVua25vd25JbnB1dDtcbmV4cG9ydHMuZXhjZXB0aW9uRnJvbUVycm9yID0gZXZlbnRidWlsZGVyLmV4Y2VwdGlvbkZyb21FcnJvcjtcbmV4cG9ydHMucGFyc2VTdGFja0ZyYW1lcyA9IGV2ZW50YnVpbGRlci5wYXJzZVN0YWNrRnJhbWVzO1xuZXhwb3J0cy5jYWxsRnJhbWVUb1N0YWNrRnJhbWUgPSBhbnIuY2FsbEZyYW1lVG9TdGFja0ZyYW1lO1xuZXhwb3J0cy53YXRjaGRvZ1RpbWVyID0gYW5yLndhdGNoZG9nVGltZXI7XG5leHBvcnRzLkxSVU1hcCA9IGxydS5MUlVNYXA7XG5leHBvcnRzLl9hc3luY051bGxpc2hDb2FsZXNjZSA9IF9hc3luY051bGxpc2hDb2FsZXNjZS5fYXN5bmNOdWxsaXNoQ29hbGVzY2U7XG5leHBvcnRzLl9hc3luY09wdGlvbmFsQ2hhaW4gPSBfYXN5bmNPcHRpb25hbENoYWluLl9hc3luY09wdGlvbmFsQ2hhaW47XG5leHBvcnRzLl9hc3luY09wdGlvbmFsQ2hhaW5EZWxldGUgPSBfYXN5bmNPcHRpb25hbENoYWluRGVsZXRlLl9hc3luY09wdGlvbmFsQ2hhaW5EZWxldGU7XG5leHBvcnRzLl9udWxsaXNoQ29hbGVzY2UgPSBfbnVsbGlzaENvYWxlc2NlLl9udWxsaXNoQ29hbGVzY2U7XG5leHBvcnRzLl9vcHRpb25hbENoYWluID0gX29wdGlvbmFsQ2hhaW4uX29wdGlvbmFsQ2hhaW47XG5leHBvcnRzLl9vcHRpb25hbENoYWluRGVsZXRlID0gX29wdGlvbmFsQ2hhaW5EZWxldGUuX29wdGlvbmFsQ2hhaW5EZWxldGU7XG5leHBvcnRzLmFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gY29uc29sZS5hZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkQ2xpY2tLZXlwcmVzc0luc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBkb20uYWRkQ2xpY2tLZXlwcmVzc0luc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLlNFTlRSWV9YSFJfREFUQV9LRVkgPSB4aHIuU0VOVFJZX1hIUl9EQVRBX0tFWTtcbmV4cG9ydHMuYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IHhoci5hZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5hZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBmZXRjaC5hZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gaGlzdG9yeS5hZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkR2xvYmFsRXJyb3JJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gZ2xvYmFsRXJyb3IuYWRkR2xvYmFsRXJyb3JJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5hZGRHbG9iYWxVbmhhbmRsZWRSZWplY3Rpb25JbnN0cnVtZW50YXRpb25IYW5kbGVyID0gZ2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uLmFkZEdsb2JhbFVuaGFuZGxlZFJlamVjdGlvbkluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLnJlc2V0SW5zdHJ1bWVudGF0aW9uSGFuZGxlcnMgPSBfaGFuZGxlcnMucmVzZXRJbnN0cnVtZW50YXRpb25IYW5kbGVycztcbmV4cG9ydHMuZmlsZW5hbWVJc0luQXBwID0gbm9kZVN0YWNrVHJhY2UuZmlsZW5hbWVJc0luQXBwO1xuZXhwb3J0cy5lc2NhcGVTdHJpbmdGb3JSZWdleCA9IGVzY2FwZVN0cmluZ0ZvclJlZ2V4LmVzY2FwZVN0cmluZ0ZvclJlZ2V4O1xuZXhwb3J0cy5zdXBwb3J0c0hpc3RvcnkgPSBzdXBwb3J0c0hpc3Rvcnkuc3VwcG9ydHNIaXN0b3J5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuXG4gKlxuICogQVRURU5USU9OOiBUaGlzIGNvbnN0YW50IG11c3QgbmV2ZXIgY3Jvc3MgcGFja2FnZSBib3VuZGFyaWVzIChpLmUuIGJlIGV4cG9ydGVkKSB0byBndWFyYW50ZWUgdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgdHJlZSBzaGFraW5nLlxuICovXG5jb25zdCBERUJVR19CVUlMRCA9ICh0eXBlb2YgX19TRU5UUllfREVCVUdfXyA9PT0gJ3VuZGVmaW5lZCcgfHwgX19TRU5UUllfREVCVUdfXyk7XG5cbmV4cG9ydHMuREVCVUdfQlVJTEQgPSBERUJVR19CVUlMRDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWJ1aWxkLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBERUZBVUxUX0VOVklST05NRU5UID0gJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnRzLkRFRkFVTFRfRU5WSVJPTk1FTlQgPSBERUZBVUxUX0VOVklST05NRU5UO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuL2RlYnVnLWJ1aWxkLmpzJyk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuXG4gKiBAZGVwcmVjYXRlZCBHbG9iYWwgZXZlbnQgcHJvY2Vzc29ycyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpIHtcbiAgcmV0dXJuIHV0aWxzLmdldEdsb2JhbFNpbmdsZXRvbignZ2xvYmFsRXZlbnRQcm9jZXNzb3JzJywgKCkgPT4gW10pO1xufVxuXG4vKipcbiAqIEFkZCBhIEV2ZW50UHJvY2Vzc29yIHRvIGJlIGtlcHQgZ2xvYmFsbHkuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGFkZEV2ZW50UHJvY2Vzc29yYCBpbnN0ZWFkLiBHbG9iYWwgZXZlbnQgcHJvY2Vzc29ycyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmZ1bmN0aW9uIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBnZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKS5wdXNoKGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIGFuIGFycmF5IG9mIGV2ZW50IHByb2Nlc3NvcnMsIHJldHVybmluZyB0aGUgcHJvY2Vzc2VkIGV2ZW50IChvciBgbnVsbGAgaWYgdGhlIGV2ZW50IHdhcyBkcm9wcGVkKS5cbiAqL1xuZnVuY3Rpb24gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKFxuICBwcm9jZXNzb3JzLFxuICBldmVudCxcbiAgaGludCxcbiAgaW5kZXggPSAwLFxuKSB7XG4gIHJldHVybiBuZXcgdXRpbHMuU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdO1xuICAgIGlmIChldmVudCA9PT0gbnVsbCB8fCB0eXBlb2YgcHJvY2Vzc29yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc29yKHsgLi4uZXZlbnQgfSwgaGludCkgO1xuXG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHByb2Nlc3Nvci5pZCAmJiByZXN1bHQgPT09IG51bGwgJiYgdXRpbHMubG9nZ2VyLmxvZyhgRXZlbnQgcHJvY2Vzc29yIFwiJHtwcm9jZXNzb3IuaWR9XCIgZHJvcHBlZCBldmVudGApO1xuXG4gICAgICBpZiAodXRpbHMuaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIHZvaWQgcmVzdWx0XG4gICAgICAgICAgLnRoZW4oZmluYWwgPT4gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKHByb2Nlc3NvcnMsIGZpbmFsLCBoaW50LCBpbmRleCArIDEpLnRoZW4ocmVzb2x2ZSkpXG4gICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZvaWQgbm90aWZ5RXZlbnRQcm9jZXNzb3JzKHByb2Nlc3NvcnMsIHJlc3VsdCwgaGludCwgaW5kZXggKyAxKVxuICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnRzLmFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yID0gYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I7XG5leHBvcnRzLmdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycyA9IGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycztcbmV4cG9ydHMubm90aWZ5RXZlbnRQcm9jZXNzb3JzID0gbm90aWZ5RXZlbnRQcm9jZXNzb3JzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnRQcm9jZXNzb3JzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHRcbiAqIGlzIHBhc3NlZCwgdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIHRvIHRoZSBzZXNzaW9uIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIGEgbmV3IGBTZXNzaW9uYCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWFrZVNlc3Npb24oY29udGV4dCkge1xuICAvLyBCb3RoIHRpbWVzdGFtcCBhbmQgc3RhcnRlZCBhcmUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC5cbiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdXRpbHMudGltZXN0YW1wSW5TZWNvbmRzKCk7XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICBzaWQ6IHV0aWxzLnV1aWQ0KCksXG4gICAgaW5pdDogdHJ1ZSxcbiAgICB0aW1lc3RhbXA6IHN0YXJ0aW5nVGltZSxcbiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsXG4gICAgZHVyYXRpb246IDAsXG4gICAgc3RhdHVzOiAnb2snLFxuICAgIGVycm9yczogMCxcbiAgICBpZ25vcmVEdXJhdGlvbjogZmFsc2UsXG4gICAgdG9KU09OOiAoKSA9PiBzZXNzaW9uVG9KU09OKHNlc3Npb24pLFxuICB9O1xuXG4gIGlmIChjb250ZXh0KSB7XG4gICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBzZXNzaW9uIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIHBhc3NlZCBpbiB0aGUgY29udGV4dC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuXG4gKiAoSGFkIHRvIGRvIHRoaXMgaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBuZXcgYW5kIHVwZGF0ZWQgc2Vzc2lvbiBiZWNhdXNlIGNsb3NpbmcgYW5kIHNlbmRpbmcgYSBzZXNzaW9uXG4gKiBtYWtlcyBhbiB1cGRhdGUgdG8gdGhlIHNlc3Npb24gYWZ0ZXIgaXQgd2FzIHBhc3NlZCB0byB0aGUgc2VuZGluZyBsb2dpYy5cbiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApXG4gKlxuICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCB0byB1cGRhdGVcbiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvblxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKGNvbnRleHQudXNlcikge1xuICAgIGlmICghc2Vzc2lvbi5pcEFkZHJlc3MgJiYgY29udGV4dC51c2VyLmlwX2FkZHJlc3MpIHtcbiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7XG4gICAgfVxuXG4gICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHtcbiAgICAgIHNlc3Npb24uZGlkID0gY29udGV4dC51c2VyLmlkIHx8IGNvbnRleHQudXNlci5lbWFpbCB8fCBjb250ZXh0LnVzZXIudXNlcm5hbWU7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbi50aW1lc3RhbXAgPSBjb250ZXh0LnRpbWVzdGFtcCB8fCB1dGlscy50aW1lc3RhbXBJblNlY29uZHMoKTtcblxuICBpZiAoY29udGV4dC5hYm5vcm1hbF9tZWNoYW5pc20pIHtcbiAgICBzZXNzaW9uLmFibm9ybWFsX21lY2hhbmlzbSA9IGNvbnRleHQuYWJub3JtYWxfbWVjaGFuaXNtO1xuICB9XG5cbiAgaWYgKGNvbnRleHQuaWdub3JlRHVyYXRpb24pIHtcbiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjtcbiAgfVxuICBpZiAoY29udGV4dC5zaWQpIHtcbiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbFxuICAgIHNlc3Npb24uc2lkID0gY29udGV4dC5zaWQubGVuZ3RoID09PSAzMiA/IGNvbnRleHQuc2lkIDogdXRpbHMudXVpZDQoKTtcbiAgfVxuICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXNzaW9uLmluaXQgPSBjb250ZXh0LmluaXQ7XG4gIH1cbiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkge1xuICAgIHNlc3Npb24uZGlkID0gYCR7Y29udGV4dC5kaWR9YDtcbiAgfVxuICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHtcbiAgICBzZXNzaW9uLnN0YXJ0ZWQgPSBjb250ZXh0LnN0YXJ0ZWQ7XG4gIH1cbiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHtcbiAgICBzZXNzaW9uLmR1cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0LmR1cmF0aW9uID09PSAnbnVtYmVyJykge1xuICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGR1cmF0aW9uID0gc2Vzc2lvbi50aW1lc3RhbXAgLSBzZXNzaW9uLnN0YXJ0ZWQ7XG4gICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7XG4gIH1cbiAgaWYgKGNvbnRleHQucmVsZWFzZSkge1xuICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTtcbiAgfVxuICBpZiAoY29udGV4dC5lbnZpcm9ubWVudCkge1xuICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50O1xuICB9XG4gIGlmICghc2Vzc2lvbi5pcEFkZHJlc3MgJiYgY29udGV4dC5pcEFkZHJlc3MpIHtcbiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzO1xuICB9XG4gIGlmICghc2Vzc2lvbi51c2VyQWdlbnQgJiYgY29udGV4dC51c2VyQWdlbnQpIHtcbiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50O1xuICB9XG4gIGlmICh0eXBlb2YgY29udGV4dC5lcnJvcnMgPT09ICdudW1iZXInKSB7XG4gICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9ycztcbiAgfVxuICBpZiAoY29udGV4dC5zdGF0dXMpIHtcbiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzO1xuICB9XG59XG5cbi8qKlxuICogQ2xvc2VzIGEgc2Vzc2lvbiBieSBzZXR0aW5nIGl0cyBzdGF0dXMgYW5kIHVwZGF0aW5nIHRoZSBzZXNzaW9uIG9iamVjdCB3aXRoIGl0LlxuICogSW50ZXJuYWxseSBjYWxscyBgdXBkYXRlU2Vzc2lvbmAgdG8gdXBkYXRlIHRoZSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbXV0YXRlcyB0aGUgcGFzc2VkIHNlc3Npb24gKEBzZWUgdXBkYXRlU2Vzc2lvbiBmb3IgZXhwbGFuYXRpb24pLlxuICpcbiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgb2JqZWN0IHRvIGJlIGNsb3NlZFxuICogQHBhcmFtIHN0YXR1cyB0aGUgYFNlc3Npb25TdGF0dXNgIHdpdGggd2hpY2ggdGhlIHNlc3Npb24gd2FzIGNsb3NlZC4gSWYgeW91IGRvbid0IHBhc3MgYSBzdGF0dXMsXG4gKiAgICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBwcmV2aW91c2x5IHNldCBzdGF0dXMsIHVubGVzcyBpdCB3YXMgYCdvaydgIGluIHdoaWNoIGNhc2VcbiAqICAgICAgICAgICAgICAgaXQgaXMgY2hhbmdlZCB0byBgJ2V4aXRlZCdgLlxuICovXG5mdW5jdGlvbiBjbG9zZVNlc3Npb24oc2Vzc2lvbiwgc3RhdHVzKSB7XG4gIGxldCBjb250ZXh0ID0ge307XG4gIGlmIChzdGF0dXMpIHtcbiAgICBjb250ZXh0ID0geyBzdGF0dXMgfTtcbiAgfSBlbHNlIGlmIChzZXNzaW9uLnN0YXR1cyA9PT0gJ29rJykge1xuICAgIGNvbnRleHQgPSB7IHN0YXR1czogJ2V4aXRlZCcgfTtcbiAgfVxuXG4gIHVwZGF0ZVNlc3Npb24oc2Vzc2lvbiwgY29udGV4dCk7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIHBhc3NlZCBzZXNzaW9uIG9iamVjdCB0byBhIEpTT04gb2JqZWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3RydWN0dXJlLlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvblxuICogdGhhbiB0aGUgb25lIHRoZSBKUyBTREtzIHVzZSBpbnRlcm5hbGx5LlxuICpcbiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZFxuICpcbiAqIEByZXR1cm5zIGEgSlNPTiBvYmplY3Qgb2YgdGhlIHBhc3NlZCBzZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHNlc3Npb25Ub0pTT04oc2Vzc2lvbikge1xuICByZXR1cm4gdXRpbHMuZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCxcbiAgICBpbml0OiBzZXNzaW9uLmluaXQsXG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgc2VjIGlzIGNvbnZlcnRlZCB0byBtcyBmb3IgZGF0ZSBjb25zdHJ1Y3RvclxuICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZShzZXNzaW9uLnRpbWVzdGFtcCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgc3RhdHVzOiBzZXNzaW9uLnN0YXR1cyxcbiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLFxuICAgIGRpZDogdHlwZW9mIHNlc3Npb24uZGlkID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdzdHJpbmcnID8gYCR7c2Vzc2lvbi5kaWR9YCA6IHVuZGVmaW5lZCxcbiAgICBkdXJhdGlvbjogc2Vzc2lvbi5kdXJhdGlvbixcbiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLFxuICAgIGF0dHJzOiB7XG4gICAgICByZWxlYXNlOiBzZXNzaW9uLnJlbGVhc2UsXG4gICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCxcbiAgICAgIGlwX2FkZHJlc3M6IHNlc3Npb24uaXBBZGRyZXNzLFxuICAgICAgdXNlcl9hZ2VudDogc2Vzc2lvbi51c2VyQWdlbnQsXG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydHMuY2xvc2VTZXNzaW9uID0gY2xvc2VTZXNzaW9uO1xuZXhwb3J0cy5tYWtlU2Vzc2lvbiA9IG1ha2VTZXNzaW9uO1xuZXhwb3J0cy51cGRhdGVTZXNzaW9uID0gdXBkYXRlU2Vzc2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlc3Npb24uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG4vLyBUaGVzZSBhcmUgYWxpZ25lZCB3aXRoIE9wZW5UZWxlbWV0cnkgdHJhY2UgZmxhZ3NcbmNvbnN0IFRSQUNFX0ZMQUdfTk9ORSA9IDB4MDtcbmNvbnN0IFRSQUNFX0ZMQUdfU0FNUExFRCA9IDB4MTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgc3BhbiB0byBhIHRyYWNlIGNvbnRleHQsIHdoaWNoIGNhbiBiZSBzZW50IGFzIHRoZSBgdHJhY2VgIGNvbnRleHQgaW4gYW4gZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Ub1RyYWNlQ29udGV4dChzcGFuKSB7XG4gIGNvbnN0IHsgc3BhbklkOiBzcGFuX2lkLCB0cmFjZUlkOiB0cmFjZV9pZCB9ID0gc3Bhbi5zcGFuQ29udGV4dCgpO1xuICBjb25zdCB7IGRhdGEsIG9wLCBwYXJlbnRfc3Bhbl9pZCwgc3RhdHVzLCB0YWdzLCBvcmlnaW4gfSA9IHNwYW5Ub0pTT04oc3Bhbik7XG5cbiAgcmV0dXJuIHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICBkYXRhLFxuICAgIG9wLFxuICAgIHBhcmVudF9zcGFuX2lkLFxuICAgIHNwYW5faWQsXG4gICAgc3RhdHVzLFxuICAgIHRhZ3MsXG4gICAgdHJhY2VfaWQsXG4gICAgb3JpZ2luLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgU3BhbiB0byBhIFNlbnRyeSB0cmFjZSBoZWFkZXIuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Ub1RyYWNlSGVhZGVyKHNwYW4pIHtcbiAgY29uc3QgeyB0cmFjZUlkLCBzcGFuSWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgY29uc3Qgc2FtcGxlZCA9IHNwYW5Jc1NhbXBsZWQoc3Bhbik7XG4gIHJldHVybiB1dGlscy5nZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyKHRyYWNlSWQsIHNwYW5JZCwgc2FtcGxlZCk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNwYW4gdGltZSBpbnB1dCBpbnRwIGEgdGltZXN0YW1wIGluIHNlY29uZHMuXG4gKi9cbmZ1bmN0aW9uIHNwYW5UaW1lSW5wdXRUb1NlY29uZHMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZW5zdXJlVGltZXN0YW1wSW5TZWNvbmRzKGlucHV0KTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIC8vIFNlZSB7QGxpbmsgSHJUaW1lfSBmb3IgdGhlIGFycmF5LWJhc2VkIHRpbWUgZm9ybWF0XG4gICAgcmV0dXJuIGlucHV0WzBdICsgaW5wdXRbMV0gLyAxZTk7XG4gIH1cblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGVuc3VyZVRpbWVzdGFtcEluU2Vjb25kcyhpbnB1dC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLnRpbWVzdGFtcEluU2Vjb25kcygpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgdGltZXN0YW1wIHRvIHNlY29uZCwgaWYgaXQgd2FzIGluIG1pbGxpc2Vjb25kcywgb3Iga2VlcHMgaXQgYXMgc2Vjb25kLlxuICovXG5mdW5jdGlvbiBlbnN1cmVUaW1lc3RhbXBJblNlY29uZHModGltZXN0YW1wKSB7XG4gIGNvbnN0IGlzTXMgPSB0aW1lc3RhbXAgPiA5OTk5OTk5OTk5O1xuICByZXR1cm4gaXNNcyA/IHRpbWVzdGFtcCAvIDEwMDAgOiB0aW1lc3RhbXA7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNwYW4gdG8gYSBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogTm90ZSB0aGF0IGFsbCBmaWVsZHMgcmV0dXJuZWQgaGVyZSBhcmUgb3B0aW9uYWwgYW5kIG5lZWQgdG8gYmUgZ3VhcmRlZCBhZ2FpbnN0LlxuICpcbiAqIE5vdGU6IEJlY2F1c2Ugb2YgdGhpcywgd2UgY3VycmVudGx5IGhhdmUgYSBjaXJjdWxhciB0eXBlIGRlcGVuZGVuY3kgKHdoaWNoIHdlIG9wdGVkIG91dCBvZiBpbiBwYWNrYWdlLmpzb24pLlxuICogVGhpcyBpcyBub3QgYXZvaWRhYmxlIGFzIHdlIG5lZWQgYHNwYW5Ub0pTT05gIGluIGBzcGFuVXRpbHMudHNgLCB3aGljaCBpbiB0dXJuIGlzIG5lZWRlZCBieSBgc3Bhbi50c2AgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICogQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLlxuICogVE9ETyB2ODogV2hlbiB3ZSByZW1vdmUgdGhlIGRlcHJlY2F0ZWQgc3R1ZmYgZnJvbSBgc3Bhbi50c2AsIHdlIGNhbiByZW1vdmUgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kgYWdhaW4uXG4gKi9cbmZ1bmN0aW9uIHNwYW5Ub0pTT04oc3Bhbikge1xuICBpZiAoc3BhbklzU3BhbkNsYXNzKHNwYW4pKSB7XG4gICAgcmV0dXJuIHNwYW4uZ2V0U3BhbkpTT04oKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBXZSBhbHNvIGNoZWNrIGZvciBgLnRvSlNPTigpYCBoZXJlLi4uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBpZiAodHlwZW9mIHNwYW4udG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgcmV0dXJuIHNwYW4udG9KU09OKCk7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogU2FkbHksIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmN5IGNoZWNrcyB3ZSBjYW5ub3QgYWN0dWFsbHkgaW1wb3J0IHRoZSBTcGFuIGNsYXNzIGhlcmUgYW5kIGNoZWNrIGZvciBpbnN0YW5jZW9mLlxuICogOiggU28gaW5zdGVhZCB3ZSBhcHByb3hpbWF0ZSB0aGlzIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyB0aGUgYGdldFNwYW5KU09OYCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Jc1NwYW5DbGFzcyhzcGFuKSB7XG4gIHJldHVybiB0eXBlb2YgKHNwYW4gKS5nZXRTcGFuSlNPTiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBzcGFuIGlzIHNhbXBsZWQuXG4gKiBJbiBtb3N0IGNhc2VzLCB5b3Ugc2hvdWxkIGp1c3QgdXNlIGBzcGFuLmlzUmVjb3JkaW5nKClgIGluc3RlYWQuXG4gKiBIb3dldmVyLCB0aGlzIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpYywgYXMgaXQgYWxzbyByZXR1cm5zIGZhbHNlIGlmIHRoZSBzcGFuIGlzIGZpbmlzaGVkLlxuICogU28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIHVzZSB0aGlzIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gc3BhbklzU2FtcGxlZChzcGFuKSB7XG4gIC8vIFdlIGFsaWduIG91ciB0cmFjZSBmbGFncyB3aXRoIHRoZSBvbmVzIE9wZW5UZWxlbWV0cnkgdXNlXG4gIC8vIFNvIHdlIGFsc28gY2hlY2sgZm9yIHNhbXBsZWQgdGhlIHNhbWUgd2F5IHRoZXkgZG8uXG4gIGNvbnN0IHsgdHJhY2VGbGFncyB9ID0gc3Bhbi5zcGFuQ29udGV4dCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICByZXR1cm4gQm9vbGVhbih0cmFjZUZsYWdzICYgVFJBQ0VfRkxBR19TQU1QTEVEKTtcbn1cblxuZXhwb3J0cy5UUkFDRV9GTEFHX05PTkUgPSBUUkFDRV9GTEFHX05PTkU7XG5leHBvcnRzLlRSQUNFX0ZMQUdfU0FNUExFRCA9IFRSQUNFX0ZMQUdfU0FNUExFRDtcbmV4cG9ydHMuc3BhbklzU2FtcGxlZCA9IHNwYW5Jc1NhbXBsZWQ7XG5leHBvcnRzLnNwYW5UaW1lSW5wdXRUb1NlY29uZHMgPSBzcGFuVGltZUlucHV0VG9TZWNvbmRzO1xuZXhwb3J0cy5zcGFuVG9KU09OID0gc3BhblRvSlNPTjtcbmV4cG9ydHMuc3BhblRvVHJhY2VDb250ZXh0ID0gc3BhblRvVHJhY2VDb250ZXh0O1xuZXhwb3J0cy5zcGFuVG9UcmFjZUhlYWRlciA9IHNwYW5Ub1RyYWNlSGVhZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3BhblV0aWxzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpO1xuY29uc3QgZXZlbnRQcm9jZXNzb3JzID0gcmVxdWlyZSgnLi4vZXZlbnRQcm9jZXNzb3JzLmpzJyk7XG5jb25zdCBzY29wZSA9IHJlcXVpcmUoJy4uL3Njb3BlLmpzJyk7XG5jb25zdCBhcHBseVNjb3BlRGF0YVRvRXZlbnQgPSByZXF1aXJlKCcuL2FwcGx5U2NvcGVEYXRhVG9FdmVudC5qcycpO1xuY29uc3Qgc3BhblV0aWxzID0gcmVxdWlyZSgnLi9zcGFuVXRpbHMuanMnKTtcblxuLyoqXG4gKiBUaGlzIHR5cGUgbWFrZXMgc3VyZSB0aGF0IHdlIGdldCBlaXRoZXIgYSBDYXB0dXJlQ29udGV4dCwgT1IgYW4gRXZlbnRIaW50LlxuICogSXQgZG9lcyBub3QgYWxsb3cgbWl4aW5nIHRoZW0sIHdoaWNoIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBvdXRjb21lcywgZS5nLiB0aGlzIGlzIGRpc2FsbG93ZWQ6XG4gKiB7IHVzZXI6IHsgaWQ6ICcxMjMnIH0sIG1lY2hhbmlzbTogeyBoYW5kbGVkOiBmYWxzZSB9IH1cbiAqL1xuXG4vKipcbiAqIEFkZHMgY29tbW9uIGluZm9ybWF0aW9uIHRvIGV2ZW50cy5cbiAqXG4gKiBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgcmVsZWFzZSBhbmQgZW52aXJvbm1lbnQgZnJvbSBgb3B0aW9uc2AsXG4gKiBicmVhZGNydW1icyBhbmQgY29udGV4dCAoZXh0cmEsIHRhZ3MgYW5kIHVzZXIpIGZyb20gdGhlIHNjb3BlLlxuICpcbiAqIEluZm9ybWF0aW9uIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBldmVudCBpcyBuZXZlciBvdmVyd3JpdHRlbi4gRm9yXG4gKiBuZXN0ZWQgb2JqZWN0cywgc3VjaCBhcyB0aGUgY29udGV4dCwga2V5cyBhcmUgbWVyZ2VkLlxuICpcbiAqIE5vdGU6IFRoaXMgYWxzbyB0cmlnZ2VycyBjYWxsYmFja3MgZm9yIGBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcmAsIGJ1dCBub3QgYGJlZm9yZVNlbmRgLlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gKiBAcGFyYW0gc2NvcGUgQSBzY29wZSBjb250YWluaW5nIGV2ZW50IG1ldGFkYXRhLlxuICogQHJldHVybnMgQSBuZXcgZXZlbnQgd2l0aCBtb3JlIGluZm9ybWF0aW9uLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBwcmVwYXJlRXZlbnQoXG4gIG9wdGlvbnMsXG4gIGV2ZW50LFxuICBoaW50LFxuICBzY29wZSQxLFxuICBjbGllbnQsXG4gIGlzb2xhdGlvblNjb3BlLFxuKSB7XG4gIGNvbnN0IHsgbm9ybWFsaXplRGVwdGggPSAzLCBub3JtYWxpemVNYXhCcmVhZHRoID0gMTAwMCB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJlcGFyZWQgPSB7XG4gICAgLi4uZXZlbnQsXG4gICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkIHx8IGhpbnQuZXZlbnRfaWQgfHwgdXRpbHMudXVpZDQoKSxcbiAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCB8fCB1dGlscy5kYXRlVGltZXN0YW1wSW5TZWNvbmRzKCksXG4gIH07XG4gIGNvbnN0IGludGVncmF0aW9ucyA9IGhpbnQuaW50ZWdyYXRpb25zIHx8IG9wdGlvbnMuaW50ZWdyYXRpb25zLm1hcChpID0+IGkubmFtZSk7XG5cbiAgYXBwbHlDbGllbnRPcHRpb25zKHByZXBhcmVkLCBvcHRpb25zKTtcbiAgYXBwbHlJbnRlZ3JhdGlvbnNNZXRhZGF0YShwcmVwYXJlZCwgaW50ZWdyYXRpb25zKTtcblxuICAvLyBPbmx5IHB1dCBkZWJ1ZyBJRHMgb250byBmcmFtZXMgZm9yIGVycm9yIGV2ZW50cy5cbiAgaWYgKGV2ZW50LnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGFwcGx5RGVidWdJZHMocHJlcGFyZWQsIG9wdGlvbnMuc3RhY2tQYXJzZXIpO1xuICB9XG5cbiAgLy8gSWYgd2UgaGF2ZSBzY29wZSBnaXZlbiB0byB1cywgdXNlIGl0IGFzIHRoZSBiYXNlIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGlmIGBjYXB0dXJlQ29udGV4dGAgaXMgbm90IHByb3ZpZGVkLlxuICBjb25zdCBmaW5hbFNjb3BlID0gZ2V0RmluYWxTY29wZShzY29wZSQxLCBoaW50LmNhcHR1cmVDb250ZXh0KTtcblxuICBpZiAoaGludC5tZWNoYW5pc20pIHtcbiAgICB1dGlscy5hZGRFeGNlcHRpb25NZWNoYW5pc20ocHJlcGFyZWQsIGhpbnQubWVjaGFuaXNtKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudEV2ZW50UHJvY2Vzc29ycyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0RXZlbnRQcm9jZXNzb3JzID8gY2xpZW50LmdldEV2ZW50UHJvY2Vzc29ycygpIDogW107XG5cbiAgLy8gVGhpcyBzaG91bGQgYmUgdGhlIGxhc3QgdGhpbmcgY2FsbGVkLCBzaW5jZSB3ZSB3YW50IHRoYXRcbiAgLy8ge0BsaW5rIEh1Yi5hZGRFdmVudFByb2Nlc3Nvcn0gZ2V0cyB0aGUgZmluaXNoZWQgcHJlcGFyZWQgZXZlbnQuXG4gIC8vIE1lcmdlIHNjb3BlIGRhdGEgdG9nZXRoZXJcbiAgY29uc3QgZGF0YSA9IHNjb3BlLmdldEdsb2JhbFNjb3BlKCkuZ2V0U2NvcGVEYXRhKCk7XG5cbiAgaWYgKGlzb2xhdGlvblNjb3BlKSB7XG4gICAgY29uc3QgaXNvbGF0aW9uRGF0YSA9IGlzb2xhdGlvblNjb3BlLmdldFNjb3BlRGF0YSgpO1xuICAgIGFwcGx5U2NvcGVEYXRhVG9FdmVudC5tZXJnZVNjb3BlRGF0YShkYXRhLCBpc29sYXRpb25EYXRhKTtcbiAgfVxuXG4gIGlmIChmaW5hbFNjb3BlKSB7XG4gICAgY29uc3QgZmluYWxTY29wZURhdGEgPSBmaW5hbFNjb3BlLmdldFNjb3BlRGF0YSgpO1xuICAgIGFwcGx5U2NvcGVEYXRhVG9FdmVudC5tZXJnZVNjb3BlRGF0YShkYXRhLCBmaW5hbFNjb3BlRGF0YSk7XG4gIH1cblxuICBjb25zdCBhdHRhY2htZW50cyA9IFsuLi4oaGludC5hdHRhY2htZW50cyB8fCBbXSksIC4uLmRhdGEuYXR0YWNobWVudHNdO1xuICBpZiAoYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgaGludC5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzO1xuICB9XG5cbiAgYXBwbHlTY29wZURhdGFUb0V2ZW50LmFwcGx5U2NvcGVEYXRhVG9FdmVudChwcmVwYXJlZCwgZGF0YSk7XG5cbiAgLy8gVE9ETyAodjgpOiBVcGRhdGUgdGhpcyBvcmRlciB0byBiZTogR2xvYmFsID4gQ2xpZW50ID4gU2NvcGVcbiAgY29uc3QgZXZlbnRQcm9jZXNzb3JzJDEgPSBbXG4gICAgLi4uY2xpZW50RXZlbnRQcm9jZXNzb3JzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIC4uLmV2ZW50UHJvY2Vzc29ycy5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSxcbiAgICAvLyBSdW4gc2NvcGUgZXZlbnQgcHJvY2Vzc29ycyBfYWZ0ZXJfIGFsbCBvdGhlciBwcm9jZXNzb3JzXG4gICAgLi4uZGF0YS5ldmVudFByb2Nlc3NvcnMsXG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gZXZlbnRQcm9jZXNzb3JzLm5vdGlmeUV2ZW50UHJvY2Vzc29ycyhldmVudFByb2Nlc3NvcnMkMSwgcHJlcGFyZWQsIGhpbnQpO1xuXG4gIHJldHVybiByZXN1bHQudGhlbihldnQgPT4ge1xuICAgIGlmIChldnQpIHtcbiAgICAgIC8vIFdlIGFwcGx5IHRoZSBkZWJ1Z19tZXRhIGZpZWxkIG9ubHkgYWZ0ZXIgYWxsIGV2ZW50IHByb2Nlc3NvcnMgaGF2ZSByYW4sIHNvIHRoYXQgaWYgYW55IGV2ZW50IHByb2Nlc3NvcnMgbW9kaWZpZWRcbiAgICAgIC8vIGZpbGUgbmFtZXMgKGUuZy50aGUgUmV3cml0ZUZyYW1lcyBpbnRlZ3JhdGlvbikgdGhlIGZpbGVuYW1lIC0+IGRlYnVnIElEIHJlbGF0aW9uc2hpcCBpc24ndCBkZXN0cm95ZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZCBub3QgY2F1c2UgYW55IFBJSSBpc3N1ZXMsIHNpbmNlIHdlJ3JlIG9ubHkgbW92aW5nIGRhdGEgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBldmVudCBhbmQgbm90IGFkZGluZ1xuICAgICAgLy8gYW55IG5ldyBkYXRhXG4gICAgICBhcHBseURlYnVnTWV0YShldnQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplRGVwdGggPT09ICdudW1iZXInICYmIG5vcm1hbGl6ZURlcHRoID4gMCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZUV2ZW50KGV2dCwgbm9ybWFsaXplRGVwdGgsIG5vcm1hbGl6ZU1heEJyZWFkdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZXZ0O1xuICB9KTtcbn1cblxuLyoqXG4gKiAgRW5oYW5jZXMgZXZlbnQgdXNpbmcgdGhlIGNsaWVudCBjb25maWd1cmF0aW9uLlxuICogIEl0IHRha2VzIGNhcmUgb2YgYWxsIFwic3RhdGljXCIgdmFsdWVzIGxpa2UgZW52aXJvbm1lbnQsIHJlbGVhc2UgYW5kIGBkaXN0YCxcbiAqICBhcyB3ZWxsIGFzIHRydW5jYXRpbmcgb3Zlcmx5IGxvbmcgdmFsdWVzLlxuICogQHBhcmFtIGV2ZW50IGV2ZW50IGluc3RhbmNlIHRvIGJlIGVuaGFuY2VkXG4gKi9cbmZ1bmN0aW9uIGFwcGx5Q2xpZW50T3B0aW9ucyhldmVudCwgb3B0aW9ucykge1xuICBjb25zdCB7IGVudmlyb25tZW50LCByZWxlYXNlLCBkaXN0LCBtYXhWYWx1ZUxlbmd0aCA9IDI1MCB9ID0gb3B0aW9ucztcblxuICBpZiAoISgnZW52aXJvbm1lbnQnIGluIGV2ZW50KSkge1xuICAgIGV2ZW50LmVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyBpbiBvcHRpb25zID8gZW52aXJvbm1lbnQgOiBjb25zdGFudHMuREVGQVVMVF9FTlZJUk9OTUVOVDtcbiAgfVxuXG4gIGlmIChldmVudC5yZWxlYXNlID09PSB1bmRlZmluZWQgJiYgcmVsZWFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnQucmVsZWFzZSA9IHJlbGVhc2U7XG4gIH1cblxuICBpZiAoZXZlbnQuZGlzdCA9PT0gdW5kZWZpbmVkICYmIGRpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50LmRpc3QgPSBkaXN0O1xuICB9XG5cbiAgaWYgKGV2ZW50Lm1lc3NhZ2UpIHtcbiAgICBldmVudC5tZXNzYWdlID0gdXRpbHMudHJ1bmNhdGUoZXZlbnQubWVzc2FnZSwgbWF4VmFsdWVMZW5ndGgpO1xuICB9XG5cbiAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcbiAgaWYgKGV4Y2VwdGlvbiAmJiBleGNlcHRpb24udmFsdWUpIHtcbiAgICBleGNlcHRpb24udmFsdWUgPSB1dGlscy50cnVuY2F0ZShleGNlcHRpb24udmFsdWUsIG1heFZhbHVlTGVuZ3RoKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xuICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnVybCkge1xuICAgIHJlcXVlc3QudXJsID0gdXRpbHMudHJ1bmNhdGUocmVxdWVzdC51cmwsIG1heFZhbHVlTGVuZ3RoKTtcbiAgfVxufVxuXG5jb25zdCBkZWJ1Z0lkU3RhY2tQYXJzZXJDYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogUHV0cyBkZWJ1ZyBJRHMgaW50byB0aGUgc3RhY2sgZnJhbWVzIG9mIGFuIGVycm9yIGV2ZW50LlxuICovXG5mdW5jdGlvbiBhcHBseURlYnVnSWRzKGV2ZW50LCBzdGFja1BhcnNlcikge1xuICBjb25zdCBkZWJ1Z0lkTWFwID0gdXRpbHMuR0xPQkFMX09CSi5fc2VudHJ5RGVidWdJZHM7XG5cbiAgaWYgKCFkZWJ1Z0lkTWFwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGRlYnVnSWRTdGFja0ZyYW1lc0NhY2hlO1xuICBjb25zdCBjYWNoZWREZWJ1Z0lkU3RhY2tGcmFtZUNhY2hlID0gZGVidWdJZFN0YWNrUGFyc2VyQ2FjaGUuZ2V0KHN0YWNrUGFyc2VyKTtcbiAgaWYgKGNhY2hlZERlYnVnSWRTdGFja0ZyYW1lQ2FjaGUpIHtcbiAgICBkZWJ1Z0lkU3RhY2tGcmFtZXNDYWNoZSA9IGNhY2hlZERlYnVnSWRTdGFja0ZyYW1lQ2FjaGU7XG4gIH0gZWxzZSB7XG4gICAgZGVidWdJZFN0YWNrRnJhbWVzQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgZGVidWdJZFN0YWNrUGFyc2VyQ2FjaGUuc2V0KHN0YWNrUGFyc2VyLCBkZWJ1Z0lkU3RhY2tGcmFtZXNDYWNoZSk7XG4gIH1cblxuICAvLyBCdWlsZCBhIG1hcCBvZiBmaWxlbmFtZSAtPiBkZWJ1Z19pZFxuICBjb25zdCBmaWxlbmFtZURlYnVnSWRNYXAgPSBPYmplY3Qua2V5cyhkZWJ1Z0lkTWFwKS5yZWR1Y2UoKGFjYywgZGVidWdJZFN0YWNrVHJhY2UpID0+IHtcbiAgICBsZXQgcGFyc2VkU3RhY2s7XG4gICAgY29uc3QgY2FjaGVkUGFyc2VkU3RhY2sgPSBkZWJ1Z0lkU3RhY2tGcmFtZXNDYWNoZS5nZXQoZGVidWdJZFN0YWNrVHJhY2UpO1xuICAgIGlmIChjYWNoZWRQYXJzZWRTdGFjaykge1xuICAgICAgcGFyc2VkU3RhY2sgPSBjYWNoZWRQYXJzZWRTdGFjaztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkU3RhY2sgPSBzdGFja1BhcnNlcihkZWJ1Z0lkU3RhY2tUcmFjZSk7XG4gICAgICBkZWJ1Z0lkU3RhY2tGcmFtZXNDYWNoZS5zZXQoZGVidWdJZFN0YWNrVHJhY2UsIHBhcnNlZFN0YWNrKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFyc2VkU3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHN0YWNrRnJhbWUgPSBwYXJzZWRTdGFja1tpXTtcbiAgICAgIGlmIChzdGFja0ZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICAgIGFjY1tzdGFja0ZyYW1lLmZpbGVuYW1lXSA9IGRlYnVnSWRNYXBbZGVidWdJZFN0YWNrVHJhY2VdO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzLmZvckVhY2goZXhjZXB0aW9uID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBleGNlcHRpb24uc3RhY2t0cmFjZS5mcmFtZXMuZm9yRWFjaChmcmFtZSA9PiB7XG4gICAgICAgIGlmIChmcmFtZS5maWxlbmFtZSkge1xuICAgICAgICAgIGZyYW1lLmRlYnVnX2lkID0gZmlsZW5hbWVEZWJ1Z0lkTWFwW2ZyYW1lLmZpbGVuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUbyBzYXZlIGJ1bmRsZSBzaXplIHdlJ3JlIGp1c3QgdHJ5IGNhdGNoaW5nIGhlcmUgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3RzLlxuICB9XG59XG5cbi8qKlxuICogTW92ZXMgZGVidWcgSURzIGZyb20gdGhlIHN0YWNrIGZyYW1lcyBvZiBhbiBlcnJvciBldmVudCBpbnRvIHRoZSBkZWJ1Z19tZXRhIGZpZWxkLlxuICovXG5mdW5jdGlvbiBhcHBseURlYnVnTWV0YShldmVudCkge1xuICAvLyBFeHRyYWN0IGRlYnVnIElEcyBhbmQgZmlsZW5hbWVzIGZyb20gdGhlIHN0YWNrIGZyYW1lcyBvbiB0aGUgZXZlbnQuXG4gIGNvbnN0IGZpbGVuYW1lRGVidWdJZE1hcCA9IHt9O1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5mb3JFYWNoKGV4Y2VwdGlvbiA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgZXhjZXB0aW9uLnN0YWNrdHJhY2UuZnJhbWVzLmZvckVhY2goZnJhbWUgPT4ge1xuICAgICAgICBpZiAoZnJhbWUuZGVidWdfaWQpIHtcbiAgICAgICAgICBpZiAoZnJhbWUuYWJzX3BhdGgpIHtcbiAgICAgICAgICAgIGZpbGVuYW1lRGVidWdJZE1hcFtmcmFtZS5hYnNfcGF0aF0gPSBmcmFtZS5kZWJ1Z19pZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICAgICAgICBmaWxlbmFtZURlYnVnSWRNYXBbZnJhbWUuZmlsZW5hbWVdID0gZnJhbWUuZGVidWdfaWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBmcmFtZS5kZWJ1Z19pZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUbyBzYXZlIGJ1bmRsZSBzaXplIHdlJ3JlIGp1c3QgdHJ5IGNhdGNoaW5nIGhlcmUgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3RzLlxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZpbGVuYW1lRGVidWdJZE1hcCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRmlsbCBkZWJ1Z19tZXRhIGluZm9ybWF0aW9uXG4gIGV2ZW50LmRlYnVnX21ldGEgPSBldmVudC5kZWJ1Z19tZXRhIHx8IHt9O1xuICBldmVudC5kZWJ1Z19tZXRhLmltYWdlcyA9IGV2ZW50LmRlYnVnX21ldGEuaW1hZ2VzIHx8IFtdO1xuICBjb25zdCBpbWFnZXMgPSBldmVudC5kZWJ1Z19tZXRhLmltYWdlcztcbiAgT2JqZWN0LmtleXMoZmlsZW5hbWVEZWJ1Z0lkTWFwKS5mb3JFYWNoKGZpbGVuYW1lID0+IHtcbiAgICBpbWFnZXMucHVzaCh7XG4gICAgICB0eXBlOiAnc291cmNlbWFwJyxcbiAgICAgIGNvZGVfZmlsZTogZmlsZW5hbWUsXG4gICAgICBkZWJ1Z19pZDogZmlsZW5hbWVEZWJ1Z0lkTWFwW2ZpbGVuYW1lXSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhZGRzIGFsbCB1c2VkIGludGVncmF0aW9ucyB0byB0aGUgU0RLIGluZm8gaW4gdGhlIGV2ZW50LlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGggYWxsIGludGVncmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYXBwbHlJbnRlZ3JhdGlvbnNNZXRhZGF0YShldmVudCwgaW50ZWdyYXRpb25OYW1lcykge1xuICBpZiAoaW50ZWdyYXRpb25OYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgZXZlbnQuc2RrID0gZXZlbnQuc2RrIHx8IHt9O1xuICAgIGV2ZW50LnNkay5pbnRlZ3JhdGlvbnMgPSBbLi4uKGV2ZW50LnNkay5pbnRlZ3JhdGlvbnMgfHwgW10pLCAuLi5pbnRlZ3JhdGlvbk5hbWVzXTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgYG5vcm1hbGl6ZWAgZnVuY3Rpb24gb24gbmVjZXNzYXJ5IGBFdmVudGAgYXR0cmlidXRlcyB0byBtYWtlIHRoZW0gc2FmZSBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIE5vcm1hbGl6ZWQga2V5czpcbiAqIC0gYGJyZWFkY3J1bWJzLmRhdGFgXG4gKiAtIGB1c2VyYFxuICogLSBgY29udGV4dHNgXG4gKiAtIGBleHRyYWBcbiAqIEBwYXJhbSBldmVudCBFdmVudFxuICogQHJldHVybnMgTm9ybWFsaXplZCBldmVudFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudChldmVudCwgZGVwdGgsIG1heEJyZWFkdGgpIHtcbiAgaWYgKCFldmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAuLi5ldmVudCxcbiAgICAuLi4oZXZlbnQuYnJlYWRjcnVtYnMgJiYge1xuICAgICAgYnJlYWRjcnVtYnM6IGV2ZW50LmJyZWFkY3J1bWJzLm1hcChiID0+ICh7XG4gICAgICAgIC4uLmIsXG4gICAgICAgIC4uLihiLmRhdGEgJiYge1xuICAgICAgICAgIGRhdGE6IHV0aWxzLm5vcm1hbGl6ZShiLmRhdGEsIGRlcHRoLCBtYXhCcmVhZHRoKSxcbiAgICAgICAgfSksXG4gICAgICB9KSksXG4gICAgfSksXG4gICAgLi4uKGV2ZW50LnVzZXIgJiYge1xuICAgICAgdXNlcjogdXRpbHMubm9ybWFsaXplKGV2ZW50LnVzZXIsIGRlcHRoLCBtYXhCcmVhZHRoKSxcbiAgICB9KSxcbiAgICAuLi4oZXZlbnQuY29udGV4dHMgJiYge1xuICAgICAgY29udGV4dHM6IHV0aWxzLm5vcm1hbGl6ZShldmVudC5jb250ZXh0cywgZGVwdGgsIG1heEJyZWFkdGgpLFxuICAgIH0pLFxuICAgIC4uLihldmVudC5leHRyYSAmJiB7XG4gICAgICBleHRyYTogdXRpbHMubm9ybWFsaXplKGV2ZW50LmV4dHJhLCBkZXB0aCwgbWF4QnJlYWR0aCksXG4gICAgfSksXG4gIH07XG5cbiAgLy8gZXZlbnQuY29udGV4dHMudHJhY2Ugc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgVHJhbnNhY3Rpb24uIFNpbWlsYXJseSxcbiAgLy8gZXZlbnQuc3BhbnNbXSBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgY2hpbGQgU3BhbnMuIEdpdmVuIHRoYXQgYVxuICAvLyBUcmFuc2FjdGlvbiBpcyBjb25jZXB0dWFsbHkgYSBTcGFuLCBub3JtYWxpemF0aW9uIHNob3VsZCBhcHBseSB0byBib3RoXG4gIC8vIFRyYW5zYWN0aW9ucyBhbmQgU3BhbnMgY29uc2lzdGVudGx5LlxuICAvLyBGb3Igbm93IHRoZSBkZWNpc2lvbiBpcyB0byBza2lwIG5vcm1hbGl6YXRpb24gb2YgVHJhbnNhY3Rpb25zIGFuZCBTcGFucyxcbiAgLy8gc28gdGhpcyBibG9jayBvdmVyd3JpdGVzIHRoZSBub3JtYWxpemVkIGV2ZW50IHRvIGFkZCBiYWNrIHRoZSBvcmlnaW5hbFxuICAvLyBUcmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBwcmlvciB0byBub3JtYWxpemF0aW9uLlxuICBpZiAoZXZlbnQuY29udGV4dHMgJiYgZXZlbnQuY29udGV4dHMudHJhY2UgJiYgbm9ybWFsaXplZC5jb250ZXh0cykge1xuICAgIG5vcm1hbGl6ZWQuY29udGV4dHMudHJhY2UgPSBldmVudC5jb250ZXh0cy50cmFjZTtcblxuICAgIC8vIGV2ZW50LmNvbnRleHRzLnRyYWNlLmRhdGEgbWF5IGNvbnRhaW4gY2lyY3VsYXIvZGFuZ2Vyb3VzIGRhdGEgc28gd2UgbmVlZCB0byBub3JtYWxpemUgaXRcbiAgICBpZiAoZXZlbnQuY29udGV4dHMudHJhY2UuZGF0YSkge1xuICAgICAgbm9ybWFsaXplZC5jb250ZXh0cy50cmFjZS5kYXRhID0gdXRpbHMubm9ybWFsaXplKGV2ZW50LmNvbnRleHRzLnRyYWNlLmRhdGEsIGRlcHRoLCBtYXhCcmVhZHRoKTtcbiAgICB9XG4gIH1cblxuICAvLyBldmVudC5zcGFuc1tdLmRhdGEgbWF5IGNvbnRhaW4gY2lyY3VsYXIvZGFuZ2Vyb3VzIGRhdGEgc28gd2UgbmVlZCB0byBub3JtYWxpemUgaXRcbiAgaWYgKGV2ZW50LnNwYW5zKSB7XG4gICAgbm9ybWFsaXplZC5zcGFucyA9IGV2ZW50LnNwYW5zLm1hcChzcGFuID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBzcGFuVXRpbHMuc3BhblRvSlNPTihzcGFuKS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkLCBhcyB3ZSBnZW5lcmFsbHkgaGF2ZSBgU3BhbmAgaW5zdGFuY2VzIGhlcmUsIGJ1dCB0byBiZSBzYWZlIHdlIGRvIG5vdCBhc3N1bWUgc29cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIHNwYW4uZGF0YSA9IHV0aWxzLm5vcm1hbGl6ZShkYXRhLCBkZXB0aCwgbWF4QnJlYWR0aCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzcGFuO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEZpbmFsU2NvcGUoc2NvcGUkMSwgY2FwdHVyZUNvbnRleHQpIHtcbiAgaWYgKCFjYXB0dXJlQ29udGV4dCkge1xuICAgIHJldHVybiBzY29wZSQxO1xuICB9XG5cbiAgY29uc3QgZmluYWxTY29wZSA9IHNjb3BlJDEgPyBzY29wZSQxLmNsb25lKCkgOiBuZXcgc2NvcGUuU2NvcGUoKTtcbiAgZmluYWxTY29wZS51cGRhdGUoY2FwdHVyZUNvbnRleHQpO1xuICByZXR1cm4gZmluYWxTY29wZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBlaXRoZXIgYW4gYEV2ZW50SGludGAgZGlyZWN0bHksIG9yIGNvbnZlcnQgYSBgQ2FwdHVyZUNvbnRleHRgIHRvIGFuIGBFdmVudEhpbnRgLlxuICogVGhpcyBpcyB1c2VkIHRvIGFsbG93IHRvIHVwZGF0ZSBtZXRob2Qgc2lnbmF0dXJlcyB0aGF0IHVzZWQgdG8gYWNjZXB0IGEgYENhcHR1cmVDb250ZXh0YCBidXQgc2hvdWxkIG5vdyBhY2NlcHQgYW4gYEV2ZW50SGludGAuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRXZlbnRIaW50T3JDYXB0dXJlQ29udGV4dChcbiAgaGludCxcbikge1xuICBpZiAoIWhpbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSWYgeW91IHBhc3MgYSBTY29wZSBvciBgKCkgPT4gU2NvcGVgIGFzIENhcHR1cmVDb250ZXh0LCB3ZSBqdXN0IHJldHVybiB0aGlzIGFzIGNhcHR1cmVDb250ZXh0XG4gIGlmIChoaW50SXNTY29wZU9yRnVuY3Rpb24oaGludCkpIHtcbiAgICByZXR1cm4geyBjYXB0dXJlQ29udGV4dDogaGludCB9O1xuICB9XG5cbiAgaWYgKGhpbnRJc1Njb3BlQ29udGV4dChoaW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBjYXB0dXJlQ29udGV4dDogaGludCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGhpbnQ7XG59XG5cbmZ1bmN0aW9uIGhpbnRJc1Njb3BlT3JGdW5jdGlvbihcbiAgaGludCxcbikge1xuICByZXR1cm4gaGludCBpbnN0YW5jZW9mIHNjb3BlLlNjb3BlIHx8IHR5cGVvZiBoaW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG5jb25zdCBjYXB0dXJlQ29udGV4dEtleXMgPSBbXG4gICd1c2VyJyxcbiAgJ2xldmVsJyxcbiAgJ2V4dHJhJyxcbiAgJ2NvbnRleHRzJyxcbiAgJ3RhZ3MnLFxuICAnZmluZ2VycHJpbnQnLFxuICAncmVxdWVzdFNlc3Npb24nLFxuICAncHJvcGFnYXRpb25Db250ZXh0Jyxcbl0gO1xuXG5mdW5jdGlvbiBoaW50SXNTY29wZUNvbnRleHQoaGludCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoaGludCkuc29tZShrZXkgPT4gY2FwdHVyZUNvbnRleHRLZXlzLmluY2x1ZGVzKGtleSApKTtcbn1cblxuZXhwb3J0cy5hcHBseURlYnVnSWRzID0gYXBwbHlEZWJ1Z0lkcztcbmV4cG9ydHMuYXBwbHlEZWJ1Z01ldGEgPSBhcHBseURlYnVnTWV0YTtcbmV4cG9ydHMucGFyc2VFdmVudEhpbnRPckNhcHR1cmVDb250ZXh0ID0gcGFyc2VFdmVudEhpbnRPckNhcHR1cmVDb250ZXh0O1xuZXhwb3J0cy5wcmVwYXJlRXZlbnQgPSBwcmVwYXJlRXZlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVwYXJlRXZlbnQuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMuanMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBodWIgPSByZXF1aXJlKCcuL2h1Yi5qcycpO1xuY29uc3Qgc2Vzc2lvbiA9IHJlcXVpcmUoJy4vc2Vzc2lvbi5qcycpO1xuY29uc3QgcHJlcGFyZUV2ZW50ID0gcmVxdWlyZSgnLi91dGlscy9wcmVwYXJlRXZlbnQuanMnKTtcblxuLyoqXG4gKiBDYXB0dXJlcyBhbiBleGNlcHRpb24gZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBleGNlcHRpb24gdG8gY2FwdHVyZS5cbiAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC5cbiAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgU2VudHJ5IGV2ZW50LlxuICovXG5mdW5jdGlvbiBjYXB0dXJlRXhjZXB0aW9uKFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBleGNlcHRpb24sXG4gIGhpbnQsXG4pIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHJldHVybiBodWIuZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBwcmVwYXJlRXZlbnQucGFyc2VFdmVudEhpbnRPckNhcHR1cmVDb250ZXh0KGhpbnQpKTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIG1lc3NhZ2UgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBleGNlcHRpb24gdG8gY2FwdHVyZS5cbiAqIEBwYXJhbSBjYXB0dXJlQ29udGV4dCBEZWZpbmUgdGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlIG9yIHBhc3MgaW4gYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZU1lc3NhZ2UoXG4gIG1lc3NhZ2UsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjYXB0dXJlQ29udGV4dCxcbikge1xuICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcm92aWRlIGV4cGxpY2l0IHNjb3BlcyB1cGdyYWRlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmlnaW5hbFxuICAvLyBhcml0eSBvZiB0aGUgYGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2UsIGxldmVsKWAgbWV0aG9kLlxuICBjb25zdCBsZXZlbCA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ3N0cmluZycgPyBjYXB0dXJlQ29udGV4dCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29udGV4dCA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCAhPT0gJ3N0cmluZycgPyB7IGNhcHR1cmVDb250ZXh0IH0gOiB1bmRlZmluZWQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gaHViLmdldEN1cnJlbnRIdWIoKS5jYXB0dXJlTWVzc2FnZShtZXNzYWdlLCBsZXZlbCwgY29udGV4dCk7XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGFuZCBzZW5kcyBpdCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXZlbnQgdG8gc2VuZCB0byBTZW50cnkuXG4gKiBAcGFyYW0gaGludCBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuXG4gKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LlxuICovXG5mdW5jdGlvbiBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHJldHVybiBodWIuZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFdmVudChldmVudCwgaGludCk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gc2V0IGNvbnRleHQgaW5mb3JtYXRpb24gb250byB0aGUgc2NvcGUuXG4gKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBTY29wZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ2V0Q3VycmVudFNjb3BlKCkgZGlyZWN0bHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGh1Yi5nZXRDdXJyZW50SHViKCkuY29uZmlndXJlU2NvcGUoY2FsbGJhY2spO1xufVxuXG4vKipcbiAqIFJlY29yZHMgYSBuZXcgYnJlYWRjcnVtYiB3aGljaCB3aWxsIGJlIGF0dGFjaGVkIHRvIGZ1dHVyZSBldmVudHMuXG4gKlxuICogQnJlYWRjcnVtYnMgd2lsbCBiZSBhZGRlZCB0byBzdWJzZXF1ZW50IGV2ZW50cyB0byBwcm92aWRlIG1vcmUgY29udGV4dCBvblxuICogdXNlcidzIGFjdGlvbnMgcHJpb3IgdG8gYW4gZXJyb3Igb3IgY3Jhc2guXG4gKlxuICogQHBhcmFtIGJyZWFkY3J1bWIgVGhlIGJyZWFkY3J1bWIgdG8gcmVjb3JkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgaGludCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaHViLmdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKGJyZWFkY3J1bWIsIGhpbnQpO1xufVxuXG4vKipcbiAqIFNldHMgY29udGV4dCBkYXRhIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gKiBAcGFyYW0gbmFtZSBvZiB0aGUgY29udGV4dFxuICogQHBhcmFtIGNvbnRleHQgQW55IGtpbmQgb2YgZGF0YS4gVGhpcyBkYXRhIHdpbGwgYmUgbm9ybWFsaXplZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGh1Yi5nZXRDdXJyZW50SHViKCkuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBTZXQgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQgc2VudCBhcyBleHRyYSBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIGV4dHJhcyBFeHRyYXMgb2JqZWN0IHRvIG1lcmdlIGludG8gY3VycmVudCBjb250ZXh0LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIHNldEV4dHJhcyhleHRyYXMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGh1Yi5nZXRDdXJyZW50SHViKCkuc2V0RXh0cmFzKGV4dHJhcyk7XG59XG5cbi8qKlxuICogU2V0IGtleTp2YWx1ZSB0aGF0IHdpbGwgYmUgc2VudCBhcyBleHRyYSBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIGtleSBTdHJpbmcgb2YgZXh0cmFcbiAqIEBwYXJhbSBleHRyYSBBbnkga2luZCBvZiBkYXRhLiBUaGlzIGRhdGEgd2lsbCBiZSBub3JtYWxpemVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIHNldEV4dHJhKGtleSwgZXh0cmEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGh1Yi5nZXRDdXJyZW50SHViKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7XG59XG5cbi8qKlxuICogU2V0IGFuIG9iamVjdCB0aGF0IHdpbGwgYmUgbWVyZ2VkIHNlbnQgYXMgdGFncyBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIHRhZ3MgVGFncyBjb250ZXh0IG9iamVjdCB0byBtZXJnZSBpbnRvIGN1cnJlbnQgY29udGV4dC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBzZXRUYWdzKHRhZ3MpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGh1Yi5nZXRDdXJyZW50SHViKCkuc2V0VGFncyh0YWdzKTtcbn1cblxuLyoqXG4gKiBTZXQga2V5OnZhbHVlIHRoYXQgd2lsbCBiZSBzZW50IGFzIHRhZ3MgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAqXG4gKiBDYW4gYWxzbyBiZSB1c2VkIHRvIHVuc2V0IGEgdGFnLCBieSBwYXNzaW5nIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwYXJhbSBrZXkgU3RyaW5nIGtleSBvZiB0YWdcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0YWdcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBzZXRUYWcoa2V5LCB2YWx1ZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaHViLmdldEN1cnJlbnRIdWIoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyB1c2VyIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZSBldmVudHMuXG4gKlxuICogQHBhcmFtIHVzZXIgVXNlciBjb250ZXh0IG9iamVjdCB0byBiZSBzZXQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gUGFzcyBgbnVsbGAgdG8gdW5zZXQgdGhlIHVzZXIuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gc2V0VXNlcih1c2VyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBodWIuZ2V0Q3VycmVudEh1YigpLnNldFVzZXIodXNlcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBzY29wZSB3aXRoIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gb3BlcmF0aW9uIHdpdGhpbi5cbiAqIFRoZSBzY29wZSBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgb25jZSB0aGUgb3BlcmF0aW9uXG4gKiBmaW5pc2hlcyBvciB0aHJvd3MuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvcjpcbiAqXG4gKiAgICAgcHVzaFNjb3BlKCk7XG4gKiAgICAgY2FsbGJhY2soKTtcbiAqICAgICBwb3BTY29wZSgpO1xuICovXG5cbi8qKlxuICogRWl0aGVyIGNyZWF0ZXMgYSBuZXcgYWN0aXZlIHNjb3BlLCBvciBzZXRzIHRoZSBnaXZlbiBzY29wZSBhcyBhY3RpdmUgc2NvcGUgaW4gdGhlIGdpdmVuIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiB3aXRoU2NvcGUoXG4gIC4uLnJlc3Rcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgaHViJDEgPSBodWIuZ2V0Q3VycmVudEh1YigpO1xuXG4gIC8vIElmIGEgc2NvcGUgaXMgZGVmaW5lZCwgd2Ugd2FudCB0byBtYWtlIHRoaXMgdGhlIGFjdGl2ZSBzY29wZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAocmVzdC5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBbc2NvcGUsIGNhbGxiYWNrXSA9IHJlc3Q7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICByZXR1cm4gaHViJDEud2l0aFNjb3BlKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICByZXR1cm4gaHViJDEud2l0aFNjb3BlKCgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgaHViJDEuZ2V0U3RhY2tUb3AoKS5zY29wZSA9IHNjb3BlIDtcbiAgICAgIHJldHVybiBjYWxsYmFjayhzY29wZSApO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHJldHVybiBodWIkMS53aXRoU2NvcGUocmVzdFswXSk7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZm9yayB0aGUgY3VycmVudCBpc29sYXRpb24gc2NvcGUgYW5kIHRoZSBjdXJyZW50IHNjb3BlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFzeW5jIGNvbnRleHQgc3RyYXRlZ3kuIElmIG5vXG4gKiBhc3luYyBjb250ZXh0IHN0cmF0ZWd5IGlzIHNldCwgdGhlIGlzb2xhdGlvbiBzY29wZSBhbmQgdGhlIGN1cnJlbnQgc2NvcGUgd2lsbCBub3QgYmUgZm9ya2VkICh0aGlzIGlzIGN1cnJlbnRseSB0aGVcbiAqIGNhc2UsIGZvciBleGFtcGxlLCBpbiB0aGUgYnJvd3NlcikuXG4gKlxuICogVXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiBlbnZpcm9ubWVudHMgd2l0aG91dCBhc3luYyBjb250ZXh0IHN0cmF0ZWd5IGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW91ci5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBTZW50cnkgU0RLIGFuZCBTREsgaW50ZWdyYXRpb24gZGV2ZWxvcG1lbnQuIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBiZSB1c2VkIGluIFwibm9ybWFsXCJcbiAqIGFwcGxpY2F0aW9ucyBkaXJlY3RseSBiZWNhdXNlIGl0IGNvbWVzIHdpdGggcGl0ZmFsbHMuIFVzZSBhdCB5b3VyIG93biByaXNrIVxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgaW4gd2hpY2ggdGhlIHBhc3NlZCBpc29sYXRpb24gc2NvcGUgaXMgYWN0aXZlLiAoTm90ZTogSW4gZW52aXJvbm1lbnRzIHdpdGhvdXQgYXN5bmNcbiAqIGNvbnRleHQgc3RyYXRlZ3ksIHRoZSBjdXJyZW50bHkgYWN0aXZlIGlzb2xhdGlvbiBzY29wZSBtYXkgY2hhbmdlIHdpdGhpbiBleGVjdXRpb24gb2YgdGhlIGNhbGxiYWNrLilcbiAqIEByZXR1cm5zIFRoZSBzYW1lIHZhbHVlIHRoYXQgYGNhbGxiYWNrYCByZXR1cm5zLlxuICovXG5mdW5jdGlvbiB3aXRoSXNvbGF0aW9uU2NvcGUoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGh1Yi5ydW5XaXRoQXN5bmNDb250ZXh0KCgpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soaHViLmdldElzb2xhdGlvblNjb3BlKCkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGb3JrcyB0aGUgY3VycmVudCBzY29wZSBhbmQgc2V0cyB0aGUgcHJvdmlkZWQgc3BhbiBhcyBhY3RpdmUgc3BhbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvdmlkZWQgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHNwYW4gU3BhbnMgc3RhcnRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2lsbCBiZSBjaGlsZHJlbiBvZiB0aGlzIHNwYW4uXG4gKiBAcGFyYW0gY2FsbGJhY2sgRXhlY3V0aW9uIGNvbnRleHQgaW4gd2hpY2ggdGhlIHByb3ZpZGVkIHNwYW4gd2lsbCBiZSBhY3RpdmUuIElzIHBhc3NlZCB0aGUgbmV3bHkgZm9ya2VkIHNjb3BlLlxuICogQHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB3aXRoQWN0aXZlU3BhbihzcGFuLCBjYWxsYmFjaykge1xuICByZXR1cm4gd2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBzY29wZS5zZXRTcGFuKHNwYW4pO1xuICAgIHJldHVybiBjYWxsYmFjayhzY29wZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uXG4gKlxuICogQSB0cmVlIHN0cnVjdHVyZSBjYW4gYmUgYnVpbHQgYnkgYWRkaW5nIGNoaWxkIHNwYW5zIHRvIHRoZSB0cmFuc2FjdGlvbiwgYW5kIGNoaWxkIHNwYW5zIHRvIG90aGVyIHNwYW5zLiBUbyBzdGFydCBhXG4gKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuXG4gKlxuICogRXZlcnkgY2hpbGQgc3BhbiBtdXN0IGJlIGZpbmlzaGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQsIG90aGVyd2lzZSB0aGUgdW5maW5pc2hlZCBzcGFucyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoZSB0cmFuc2FjdGlvbiBtdXN0IGJlIGZpbmlzaGVkIHdpdGggYSBjYWxsIHRvIGl0cyBgLmVuZCgpYCBtZXRob2QsIGF0IHdoaWNoIHBvaW50IHRoZSB0cmFuc2FjdGlvbiB3aXRoIGFsbCBpdHNcbiAqIGZpbmlzaGVkIGNoaWxkIHNwYW5zIHdpbGwgYmUgc2VudCB0byBTZW50cnkuXG4gKlxuICogTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciAqbWFudWFsKiBpbnN0cnVtZW50YXRpb24uIEF1dG8taW5zdHJ1bWVudGF0aW9uIHNob3VsZCBjYWxsXG4gKiBgc3RhcnRUcmFuc2FjdGlvbmAgZGlyZWN0bHkgb24gdGhlIGh1Yi5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCBQcm9wZXJ0aWVzIG9mIHRoZSBuZXcgYFRyYW5zYWN0aW9uYC5cbiAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50XG4gKiBkZWZhdWx0IHZhbHVlcykuIFNlZSB7QGxpbmsgT3B0aW9ucy50cmFjZXNTYW1wbGVyfS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZFxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgc3RhcnRTcGFuKClgLCBgc3RhcnRTcGFuTWFudWFsKClgIG9yIGBzdGFydEluYWN0aXZlU3BhbigpYCBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiBzdGFydFRyYW5zYWN0aW9uKFxuICBjb250ZXh0LFxuICBjdXN0b21TYW1wbGluZ0NvbnRleHQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gaHViLmdldEN1cnJlbnRIdWIoKS5zdGFydFRyYW5zYWN0aW9uKHsgLi4uY29udGV4dCB9LCBjdXN0b21TYW1wbGluZ0NvbnRleHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNyb24gbW9uaXRvciBjaGVjayBpbiBhbmQgc2VuZCBpdCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIGNoZWNrSW4gQW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgY2hlY2sgaW4uXG4gKiBAcGFyYW0gdXBzZXJ0TW9uaXRvckNvbmZpZyBBbiBvcHRpb25hbCBvYmplY3QgdGhhdCBkZXNjcmliZXMgYSBtb25pdG9yIGNvbmZpZy4gVXNlIHRoaXMgaWYgeW91IHdhbnRcbiAqIHRvIGNyZWF0ZSBhIG1vbml0b3IgYXV0b21hdGljYWxseSB3aGVuIHNlbmRpbmcgYSBjaGVjayBpbi5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUNoZWNrSW4oY2hlY2tJbiwgdXBzZXJ0TW9uaXRvckNvbmZpZykge1xuICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgaWYgKCFjbGllbnQpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdDYW5ub3QgY2FwdHVyZSBjaGVjay1pbi4gTm8gY2xpZW50IGRlZmluZWQuJyk7XG4gIH0gZWxzZSBpZiAoIWNsaWVudC5jYXB0dXJlQ2hlY2tJbikge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ0Nhbm5vdCBjYXB0dXJlIGNoZWNrLWluLiBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBzZW5kaW5nIGNoZWNrLWlucy4nKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2xpZW50LmNhcHR1cmVDaGVja0luKGNoZWNrSW4sIHVwc2VydE1vbml0b3JDb25maWcsIHNjb3BlKTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy51dWlkNCgpO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgY2FsbGJhY2sgd2l0aCBhIGNyb24gbW9uaXRvciBjaGVjayBpbi4gVGhlIGNoZWNrIGluIHdpbGwgYmUgc2VudCB0byBTZW50cnkgd2hlbiB0aGUgY2FsbGJhY2sgZmluaXNoZXMuXG4gKlxuICogQHBhcmFtIG1vbml0b3JTbHVnIFRoZSBkaXN0aW5jdCBzbHVnIG9mIHRoZSBtb25pdG9yLlxuICogQHBhcmFtIHVwc2VydE1vbml0b3JDb25maWcgQW4gb3B0aW9uYWwgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgbW9uaXRvciBjb25maWcuIFVzZSB0aGlzIGlmIHlvdSB3YW50XG4gKiB0byBjcmVhdGUgYSBtb25pdG9yIGF1dG9tYXRpY2FsbHkgd2hlbiBzZW5kaW5nIGEgY2hlY2sgaW4uXG4gKi9cbmZ1bmN0aW9uIHdpdGhNb25pdG9yKFxuICBtb25pdG9yU2x1ZyxcbiAgY2FsbGJhY2ssXG4gIHVwc2VydE1vbml0b3JDb25maWcsXG4pIHtcbiAgY29uc3QgY2hlY2tJbklkID0gY2FwdHVyZUNoZWNrSW4oeyBtb25pdG9yU2x1Zywgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnIH0sIHVwc2VydE1vbml0b3JDb25maWcpO1xuICBjb25zdCBub3cgPSB1dGlscy50aW1lc3RhbXBJblNlY29uZHMoKTtcblxuICBmdW5jdGlvbiBmaW5pc2hDaGVja0luKHN0YXR1cykge1xuICAgIGNhcHR1cmVDaGVja0luKHsgbW9uaXRvclNsdWcsIHN0YXR1cywgY2hlY2tJbklkLCBkdXJhdGlvbjogdXRpbHMudGltZXN0YW1wSW5TZWNvbmRzKCkgLSBub3cgfSk7XG4gIH1cblxuICBsZXQgbWF5YmVQcm9taXNlUmVzdWx0O1xuICB0cnkge1xuICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBmaW5pc2hDaGVja0luKCdlcnJvcicpO1xuICAgIHRocm93IGU7XG4gIH1cblxuICBpZiAodXRpbHMuaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZVJlc3VsdCkudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgZmluaXNoQ2hlY2tJbignb2snKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGZpbmlzaENoZWNrSW4oJ2Vycm9yJyk7XG4gICAgICB9LFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoQ2hlY2tJbignb2snKTtcbiAgfVxuXG4gIHJldHVybiBtYXliZVByb21pc2VSZXN1bHQ7XG59XG5cbi8qKlxuICogQ2FsbCBgZmx1c2goKWAgb24gdGhlIGN1cnJlbnQgY2xpZW50LCBpZiB0aGVyZSBpcyBvbmUuIFNlZSB7QGxpbmsgQ2xpZW50LmZsdXNofS5cbiAqXG4gKiBAcGFyYW0gdGltZW91dCBNYXhpbXVtIHRpbWUgaW4gbXMgdGhlIGNsaWVudCBzaG91bGQgd2FpdCB0byBmbHVzaCBpdHMgZXZlbnQgcXVldWUuIE9taXR0aW5nIHRoaXMgcGFyYW1ldGVyIHdpbGwgY2F1c2VcbiAqIHRoZSBjbGllbnQgdG8gd2FpdCB1bnRpbCBhbGwgZXZlbnRzIGFyZSBzZW50IGJlZm9yZSByZXNvbHZpbmcgdGhlIHByb21pc2UuXG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBzdWNjZXNzZnVsbHkgZHJhaW5zIGJlZm9yZSB0aGUgdGltZW91dCwgb3IgYGZhbHNlYCBpZiBpdFxuICogZG9lc24ndCAob3IgaWYgdGhlcmUncyBubyBjbGllbnQgZGVmaW5lZCkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZsdXNoKHRpbWVvdXQpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50LmZsdXNoKHRpbWVvdXQpO1xuICB9XG4gIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ0Nhbm5vdCBmbHVzaCBldmVudHMuIE5vIGNsaWVudCBkZWZpbmVkLicpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbn1cblxuLyoqXG4gKiBDYWxsIGBjbG9zZSgpYCBvbiB0aGUgY3VycmVudCBjbGllbnQsIGlmIHRoZXJlIGlzIG9uZS4gU2VlIHtAbGluayBDbGllbnQuY2xvc2V9LlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0IHRvIGZsdXNoIGl0cyBldmVudCBxdWV1ZSBiZWZvcmUgc2h1dHRpbmcgZG93bi4gT21pdHRpbmcgdGhpc1xuICogcGFyYW1ldGVyIHdpbGwgY2F1c2UgdGhlIGNsaWVudCB0byB3YWl0IHVudGlsIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIGRpc2FibGluZyBpdHNlbGYuXG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBzdWNjZXNzZnVsbHkgZHJhaW5zIGJlZm9yZSB0aGUgdGltZW91dCwgb3IgYGZhbHNlYCBpZiBpdFxuICogZG9lc24ndCAob3IgaWYgdGhlcmUncyBubyBjbGllbnQgZGVmaW5lZCkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsb3NlKHRpbWVvdXQpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50LmNsb3NlKHRpbWVvdXQpO1xuICB9XG4gIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ0Nhbm5vdCBmbHVzaCBldmVudHMgYW5kIGRpc2FibGUgU0RLLiBObyBjbGllbnQgZGVmaW5lZC4nKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgZ2V0dGVyIGZvciBsYXN0RXZlbnRJZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LlxuICovXG5mdW5jdGlvbiBsYXN0RXZlbnRJZCgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHJldHVybiBodWIuZ2V0Q3VycmVudEh1YigpLmxhc3RFdmVudElkKCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNsaWVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xpZW50KCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgcmV0dXJuIGh1Yi5nZXRDdXJyZW50SHViKCkuZ2V0Q2xpZW50KCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIFNlbnRyeSBoYXMgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC5cbiAqL1xuZnVuY3Rpb24gaXNJbml0aWFsaXplZCgpIHtcbiAgcmV0dXJuICEhZ2V0Q2xpZW50KCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjb3BlLlxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50U2NvcGUoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gaHViLmdldEN1cnJlbnRIdWIoKS5nZXRTY29wZSgpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgc2Vzc2lvbiBvbiB0aGUgY3VycmVudCBpc29sYXRpb24gc2NvcGUuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgKG9wdGlvbmFsKSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgcmV0dXJuZWQgc2Vzc2lvbiBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB0aGUgbmV3IGFjdGl2ZSBzZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U2Vzc2lvbihjb250ZXh0KSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBpc29sYXRpb25TY29wZSA9IGh1Yi5nZXRJc29sYXRpb25TY29wZSgpO1xuICBjb25zdCBjdXJyZW50U2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcblxuICBjb25zdCB7IHJlbGVhc2UsIGVudmlyb25tZW50ID0gY29uc3RhbnRzLkRFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307XG5cbiAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGtcbiAgY29uc3QgeyB1c2VyQWdlbnQgfSA9IHV0aWxzLkdMT0JBTF9PQkoubmF2aWdhdG9yIHx8IHt9O1xuXG4gIGNvbnN0IHNlc3Npb24kMSA9IHNlc3Npb24ubWFrZVNlc3Npb24oe1xuICAgIHJlbGVhc2UsXG4gICAgZW52aXJvbm1lbnQsXG4gICAgdXNlcjogY3VycmVudFNjb3BlLmdldFVzZXIoKSB8fCBpc29sYXRpb25TY29wZS5nZXRVc2VyKCksXG4gICAgLi4uKHVzZXJBZ2VudCAmJiB7IHVzZXJBZ2VudCB9KSxcbiAgICAuLi5jb250ZXh0LFxuICB9KTtcblxuICAvLyBFbmQgZXhpc3Rpbmcgc2Vzc2lvbiBpZiB0aGVyZSdzIG9uZVxuICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IGlzb2xhdGlvblNjb3BlLmdldFNlc3Npb24oKTtcbiAgaWYgKGN1cnJlbnRTZXNzaW9uICYmIGN1cnJlbnRTZXNzaW9uLnN0YXR1cyA9PT0gJ29rJykge1xuICAgIHNlc3Npb24udXBkYXRlU2Vzc2lvbihjdXJyZW50U2Vzc2lvbiwgeyBzdGF0dXM6ICdleGl0ZWQnIH0pO1xuICB9XG5cbiAgZW5kU2Vzc2lvbigpO1xuXG4gIC8vIEFmdGVyd2FyZHMgd2Ugc2V0IHRoZSBuZXcgc2Vzc2lvbiBvbiB0aGUgc2NvcGVcbiAgaXNvbGF0aW9uU2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uJDEpO1xuXG4gIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYW5kIG9ubHkgdXNlIHRoZSBpc29sYXRpb24gc2NvcGUoPykuXG4gIC8vIEZvciB2NyB0aG91Z2gsIHdlIGNhbid0IFwic29mdC1icmVha1wiIHBlb3BsZSB1c2luZyBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKS5zZXRTZXNzaW9uKClcbiAgY3VycmVudFNjb3BlLnNldFNlc3Npb24oc2Vzc2lvbiQxKTtcblxuICByZXR1cm4gc2Vzc2lvbiQxO1xufVxuXG4vKipcbiAqIEVuZCB0aGUgc2Vzc2lvbiBvbiB0aGUgY3VycmVudCBpc29sYXRpb24gc2NvcGUuXG4gKi9cbmZ1bmN0aW9uIGVuZFNlc3Npb24oKSB7XG4gIGNvbnN0IGlzb2xhdGlvblNjb3BlID0gaHViLmdldElzb2xhdGlvblNjb3BlKCk7XG4gIGNvbnN0IGN1cnJlbnRTY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuXG4gIGNvbnN0IHNlc3Npb24kMSA9IGN1cnJlbnRTY29wZS5nZXRTZXNzaW9uKCkgfHwgaXNvbGF0aW9uU2NvcGUuZ2V0U2Vzc2lvbigpO1xuICBpZiAoc2Vzc2lvbiQxKSB7XG4gICAgc2Vzc2lvbi5jbG9zZVNlc3Npb24oc2Vzc2lvbiQxKTtcbiAgfVxuICBfc2VuZFNlc3Npb25VcGRhdGUoKTtcblxuICAvLyB0aGUgc2Vzc2lvbiBpcyBvdmVyOyB0YWtlIGl0IG9mZiBvZiB0aGUgc2NvcGVcbiAgaXNvbGF0aW9uU2NvcGUuc2V0U2Vzc2lvbigpO1xuXG4gIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYW5kIG9ubHkgdXNlIHRoZSBpc29sYXRpb24gc2NvcGUoPykuXG4gIC8vIEZvciB2NyB0aG91Z2gsIHdlIGNhbid0IFwic29mdC1icmVha1wiIHBlb3BsZSB1c2luZyBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKS5zZXRTZXNzaW9uKClcbiAgY3VycmVudFNjb3BlLnNldFNlc3Npb24oKTtcbn1cblxuLyoqXG4gKiBTZW5kcyB0aGUgY3VycmVudCBTZXNzaW9uIG9uIHRoZSBzY29wZVxuICovXG5mdW5jdGlvbiBfc2VuZFNlc3Npb25VcGRhdGUoKSB7XG4gIGNvbnN0IGlzb2xhdGlvblNjb3BlID0gaHViLmdldElzb2xhdGlvblNjb3BlKCk7XG4gIGNvbnN0IGN1cnJlbnRTY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgY3VycmVudFNjb3BlIGFuZCBvbmx5IHVzZSB0aGUgaXNvbGF0aW9uIHNjb3BlKD8pLlxuICAvLyBGb3IgdjcgdGhvdWdoLCB3ZSBjYW4ndCBcInNvZnQtYnJlYWtcIiBwZW9wbGUgdXNpbmcgZ2V0Q3VycmVudEh1YigpLmdldFNjb3BlKCkuc2V0U2Vzc2lvbigpXG4gIGNvbnN0IHNlc3Npb24gPSBjdXJyZW50U2NvcGUuZ2V0U2Vzc2lvbigpIHx8IGlzb2xhdGlvblNjb3BlLmdldFNlc3Npb24oKTtcbiAgaWYgKHNlc3Npb24gJiYgY2xpZW50ICYmIGNsaWVudC5jYXB0dXJlU2Vzc2lvbikge1xuICAgIGNsaWVudC5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbmRzIHRoZSBjdXJyZW50IHNlc3Npb24gb24gdGhlIHNjb3BlIHRvIFNlbnRyeVxuICpcbiAqIEBwYXJhbSBlbmQgSWYgc2V0IHRoZSBzZXNzaW9uIHdpbGwgYmUgbWFya2VkIGFzIGV4aXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBzY29wZS5cbiAqICAgICAgICAgICAgRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZVNlc3Npb24oZW5kID0gZmFsc2UpIHtcbiAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGVcbiAgaWYgKGVuZCkge1xuICAgIGVuZFNlc3Npb24oKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBvbmx5IHNlbmQgdGhlIHVwZGF0ZVxuICBfc2VuZFNlc3Npb25VcGRhdGUoKTtcbn1cblxuZXhwb3J0cy5hZGRCcmVhZGNydW1iID0gYWRkQnJlYWRjcnVtYjtcbmV4cG9ydHMuY2FwdHVyZUNoZWNrSW4gPSBjYXB0dXJlQ2hlY2tJbjtcbmV4cG9ydHMuY2FwdHVyZUV2ZW50ID0gY2FwdHVyZUV2ZW50O1xuZXhwb3J0cy5jYXB0dXJlRXhjZXB0aW9uID0gY2FwdHVyZUV4Y2VwdGlvbjtcbmV4cG9ydHMuY2FwdHVyZU1lc3NhZ2UgPSBjYXB0dXJlTWVzc2FnZTtcbmV4cG9ydHMuY2FwdHVyZVNlc3Npb24gPSBjYXB0dXJlU2Vzc2lvbjtcbmV4cG9ydHMuY2xvc2UgPSBjbG9zZTtcbmV4cG9ydHMuY29uZmlndXJlU2NvcGUgPSBjb25maWd1cmVTY29wZTtcbmV4cG9ydHMuZW5kU2Vzc2lvbiA9IGVuZFNlc3Npb247XG5leHBvcnRzLmZsdXNoID0gZmx1c2g7XG5leHBvcnRzLmdldENsaWVudCA9IGdldENsaWVudDtcbmV4cG9ydHMuZ2V0Q3VycmVudFNjb3BlID0gZ2V0Q3VycmVudFNjb3BlO1xuZXhwb3J0cy5pc0luaXRpYWxpemVkID0gaXNJbml0aWFsaXplZDtcbmV4cG9ydHMubGFzdEV2ZW50SWQgPSBsYXN0RXZlbnRJZDtcbmV4cG9ydHMuc2V0Q29udGV4dCA9IHNldENvbnRleHQ7XG5leHBvcnRzLnNldEV4dHJhID0gc2V0RXh0cmE7XG5leHBvcnRzLnNldEV4dHJhcyA9IHNldEV4dHJhcztcbmV4cG9ydHMuc2V0VGFnID0gc2V0VGFnO1xuZXhwb3J0cy5zZXRUYWdzID0gc2V0VGFncztcbmV4cG9ydHMuc2V0VXNlciA9IHNldFVzZXI7XG5leHBvcnRzLnN0YXJ0U2Vzc2lvbiA9IHN0YXJ0U2Vzc2lvbjtcbmV4cG9ydHMuc3RhcnRUcmFuc2FjdGlvbiA9IHN0YXJ0VHJhbnNhY3Rpb247XG5leHBvcnRzLndpdGhBY3RpdmVTcGFuID0gd2l0aEFjdGl2ZVNwYW47XG5leHBvcnRzLndpdGhJc29sYXRpb25TY29wZSA9IHdpdGhJc29sYXRpb25TY29wZTtcbmV4cG9ydHMud2l0aE1vbml0b3IgPSB3aXRoTW9uaXRvcjtcbmV4cG9ydHMud2l0aFNjb3BlID0gd2l0aFNjb3BlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb3J0cy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByb290IHNwYW4gb2YgYSBnaXZlbiBzcGFuLlxuICpcbiAqIEFzIGxvbmcgYXMgd2UgdXNlIGBUcmFuc2FjdGlvbmBzIGludGVybmFsbHksIHRoZSByZXR1cm5lZCByb290IHNwYW5cbiAqIHdpbGwgYmUgYSBgVHJhbnNhY3Rpb25gIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4gKlxuICogSWYgdGhlIGdpdmVuIHNwYW4gaGFzIG5vIHJvb3Qgc3BhbiBvciB0cmFuc2FjdGlvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJvb3RTcGFuKHNwYW4pIHtcbiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdGhpcyBjaGVjayBhbmQganVzdCByZXR1cm4gc3BhblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgcmV0dXJuIHNwYW4udHJhbnNhY3Rpb247XG59XG5cbmV4cG9ydHMuZ2V0Um9vdFNwYW4gPSBnZXRSb290U3Bhbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldFJvb3RTcGFuLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpO1xuY29uc3QgZXhwb3J0cyQxID0gcmVxdWlyZSgnLi4vZXhwb3J0cy5qcycpO1xuY29uc3QgZ2V0Um9vdFNwYW4gPSByZXF1aXJlKCcuLi91dGlscy9nZXRSb290U3Bhbi5qcycpO1xuY29uc3Qgc3BhblV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvc3BhblV0aWxzLmpzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgY2xpZW50LlxuICpcbiAqIERpc3BhdGNoZXMgdGhlIGBjcmVhdGVEc2NgIGxpZmVjeWNsZSBob29rIGFzIGEgc2lkZSBlZmZlY3QuXG4gKi9cbmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KFxuICB0cmFjZV9pZCxcbiAgY2xpZW50LFxuICBzY29wZSxcbikge1xuICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTtcblxuICBjb25zdCB7IHB1YmxpY0tleTogcHVibGljX2tleSB9ID0gY2xpZW50LmdldERzbigpIHx8IHt9O1xuICAvLyBUT0RPKHY4KTogUmVtb3ZlIHNlZ21lbnQgZnJvbSBVc2VyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCB7IHNlZ21lbnQ6IHVzZXJfc2VnbWVudCB9ID0gKHNjb3BlICYmIHNjb3BlLmdldFVzZXIoKSkgfHwge307XG5cbiAgY29uc3QgZHNjID0gdXRpbHMuZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50IHx8IGNvbnN0YW50cy5ERUZBVUxUX0VOVklST05NRU5ULFxuICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSxcbiAgICB1c2VyX3NlZ21lbnQsXG4gICAgcHVibGljX2tleSxcbiAgICB0cmFjZV9pZCxcbiAgfSkgO1xuXG4gIGNsaWVudC5lbWl0ICYmIGNsaWVudC5lbWl0KCdjcmVhdGVEc2MnLCBkc2MpO1xuXG4gIHJldHVybiBkc2M7XG59XG5cbi8qKlxuICogQSBTcGFuIHdpdGggYSBmcm96ZW4gZHluYW1pYyBzYW1wbGluZyBjb250ZXh0LlxuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgc3BhbiAoYW5kIGNsaWVudCBhbmQgc2NvcGUpXG4gKlxuICogQHBhcmFtIHNwYW4gdGhlIHNwYW4gZnJvbSB3aGljaCBhIGZldyB2YWx1ZXMgbGlrZSB0aGUgcm9vdCBzcGFuIG5hbWUgYW5kIHNhbXBsZSByYXRlIGFyZSBleHRyYWN0ZWQuXG4gKlxuICogQHJldHVybnMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuKHNwYW4pIHtcbiAgY29uc3QgY2xpZW50ID0gZXhwb3J0cyQxLmdldENsaWVudCgpO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIHBhc3NpbmcgZW1pdD1mYWxzZSBoZXJlIHRvIG9ubHkgZW1pdCBsYXRlciBvbmNlIHRoZSBEU0MgaXMgYWN0dWFsbHkgcG9wdWxhdGVkXG4gIGNvbnN0IGRzYyA9IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KHNwYW5VdGlscy5zcGFuVG9KU09OKHNwYW4pLnRyYWNlX2lkIHx8ICcnLCBjbGllbnQsIGV4cG9ydHMkMS5nZXRDdXJyZW50U2NvcGUoKSk7XG5cbiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdjdGcm96ZW5Ec2MgYXMgYSBUcmFuc2FjdGlvbiB3aWxsIG5vIGxvbmdlciBoYXZlIF9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0XG4gIGNvbnN0IHR4biA9IGdldFJvb3RTcGFuLmdldFJvb3RTcGFuKHNwYW4pIDtcbiAgaWYgKCF0eG4pIHtcbiAgICByZXR1cm4gZHNjO1xuICB9XG5cbiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdjdGcm96ZW5Ec2MgYXMgYSBUcmFuc2FjdGlvbiB3aWxsIG5vIGxvbmdlciBoYXZlIF9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0XG4gIC8vIEZvciBub3cgd2UgbmVlZCB0byBhdm9pZCBicmVha2luZyB1c2VycyB3aG8gZGlyZWN0bHkgY3JlYXRlZCBhIHR4biB3aXRoIGEgRFNDLCB3aGVyZSB0aGlzIGZpZWxkIGlzIHN0aWxsIHNldC5cbiAgLy8gQHNlZSBUcmFuc2FjdGlvbiBjbGFzcyBjb25zdHJ1Y3RvclxuICBjb25zdCB2N0Zyb3plbkRzYyA9IHR4biAmJiB0eG4uX2Zyb3plbkR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7XG4gIGlmICh2N0Zyb3plbkRzYykge1xuICAgIHJldHVybiB2N0Zyb3plbkRzYztcbiAgfVxuXG4gIC8vIFRPRE8gKHY4KTogUmVwbGFjZSB0eG4ubWV0YWRhdGEgd2l0aCB0eG4uYXR0cmlidXRlc1tdXG4gIC8vIFdlIGNhbid0IGRvIHRoaXMgeWV0IGJlY2F1c2UgYXR0cmlidXRlcyBhcmVuJ3QgYWx3YXlzIHNldCB5ZXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCB7IHNhbXBsZVJhdGU6IG1heWJlU2FtcGxlUmF0ZSwgc291cmNlIH0gPSB0eG4ubWV0YWRhdGE7XG4gIGlmIChtYXliZVNhbXBsZVJhdGUgIT0gbnVsbCkge1xuICAgIGRzYy5zYW1wbGVfcmF0ZSA9IGAke21heWJlU2FtcGxlUmF0ZX1gO1xuICB9XG5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgdHJhbnNhY3Rpb24gbmFtZSBpbiB0aGUgRFNDIGlmIHRoZSBzb3VyY2UgaXMgXCJ1cmxcIiBiZWNhdXNlIFVSTHMgbWlnaHQgY29udGFpbiBQSUlcbiAgY29uc3QganNvblNwYW4gPSBzcGFuVXRpbHMuc3BhblRvSlNPTih0eG4pO1xuXG4gIC8vIGFmdGVyIEpTT04gY29udmVyc2lvbiwgdHhuLm5hbWUgYmVjb21lcyBqc29uU3Bhbi5kZXNjcmlwdGlvblxuICBpZiAoc291cmNlICYmIHNvdXJjZSAhPT0gJ3VybCcpIHtcbiAgICBkc2MudHJhbnNhY3Rpb24gPSBqc29uU3Bhbi5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGRzYy5zYW1wbGVkID0gU3RyaW5nKHNwYW5VdGlscy5zcGFuSXNTYW1wbGVkKHR4bikpO1xuXG4gIGNsaWVudC5lbWl0ICYmIGNsaWVudC5lbWl0KCdjcmVhdGVEc2MnLCBkc2MpO1xuXG4gIHJldHVybiBkc2M7XG59XG5cbmV4cG9ydHMuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQgPSBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbUNsaWVudDtcbmV4cG9ydHMuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gcmVxdWlyZSgnLi4vdHJhY2luZy9keW5hbWljU2FtcGxpbmdDb250ZXh0LmpzJyk7XG5jb25zdCBnZXRSb290U3BhbiA9IHJlcXVpcmUoJy4vZ2V0Um9vdFNwYW4uanMnKTtcbmNvbnN0IHNwYW5VdGlscyA9IHJlcXVpcmUoJy4vc3BhblV0aWxzLmpzJyk7XG5cbi8qKlxuICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKSB7XG4gIGNvbnN0IHsgZmluZ2VycHJpbnQsIHNwYW4sIGJyZWFkY3J1bWJzLCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEgfSA9IGRhdGE7XG5cbiAgLy8gQXBwbHkgZ2VuZXJhbCBkYXRhXG4gIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpO1xuXG4gIC8vIFdlIHdhbnQgdG8gc2V0IHRoZSB0cmFjZSBjb250ZXh0IGZvciBub3JtYWwgZXZlbnRzIG9ubHkgaWYgdGhlcmUgaXNuJ3QgYWxyZWFkeVxuICAvLyBhIHRyYWNlIGNvbnRleHQgb24gdGhlIGV2ZW50LiBUaGVyZSBpcyBhIHByb2R1Y3QgZmVhdHVyZSBpbiBwbGFjZSB3aGVyZSB3ZSBsaW5rXG4gIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC5cbiAgaWYgKHNwYW4pIHtcbiAgICBhcHBseVNwYW5Ub0V2ZW50KGV2ZW50LCBzcGFuKTtcbiAgfVxuXG4gIGFwcGx5RmluZ2VycHJpbnRUb0V2ZW50KGV2ZW50LCBmaW5nZXJwcmludCk7XG4gIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7XG4gIGFwcGx5U2RrTWV0YWRhdGFUb0V2ZW50KGV2ZW50LCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEpO1xufVxuXG4vKiogTWVyZ2UgZGF0YSBvZiB0d28gc2NvcGVzIHRvZ2V0aGVyLiAqL1xuZnVuY3Rpb24gbWVyZ2VTY29wZURhdGEoZGF0YSwgbWVyZ2VEYXRhKSB7XG4gIGNvbnN0IHtcbiAgICBleHRyYSxcbiAgICB0YWdzLFxuICAgIHVzZXIsXG4gICAgY29udGV4dHMsXG4gICAgbGV2ZWwsXG4gICAgc2RrUHJvY2Vzc2luZ01ldGFkYXRhLFxuICAgIGJyZWFkY3J1bWJzLFxuICAgIGZpbmdlcnByaW50LFxuICAgIGV2ZW50UHJvY2Vzc29ycyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBwcm9wYWdhdGlvbkNvbnRleHQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdHJhbnNhY3Rpb25OYW1lLFxuICAgIHNwYW4sXG4gIH0gPSBtZXJnZURhdGE7XG5cbiAgbWVyZ2VBbmRPdmVyd3JpdGVTY29wZURhdGEoZGF0YSwgJ2V4dHJhJywgZXh0cmEpO1xuICBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YShkYXRhLCAndGFncycsIHRhZ3MpO1xuICBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YShkYXRhLCAndXNlcicsIHVzZXIpO1xuICBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YShkYXRhLCAnY29udGV4dHMnLCBjb250ZXh0cyk7XG4gIG1lcmdlQW5kT3ZlcndyaXRlU2NvcGVEYXRhKGRhdGEsICdzZGtQcm9jZXNzaW5nTWV0YWRhdGEnLCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEpO1xuXG4gIGlmIChsZXZlbCkge1xuICAgIGRhdGEubGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIGlmICh0cmFuc2FjdGlvbk5hbWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBkYXRhLnRyYW5zYWN0aW9uTmFtZSA9IHRyYW5zYWN0aW9uTmFtZTtcbiAgfVxuXG4gIGlmIChzcGFuKSB7XG4gICAgZGF0YS5zcGFuID0gc3BhbjtcbiAgfVxuXG4gIGlmIChicmVhZGNydW1icy5sZW5ndGgpIHtcbiAgICBkYXRhLmJyZWFkY3J1bWJzID0gWy4uLmRhdGEuYnJlYWRjcnVtYnMsIC4uLmJyZWFkY3J1bWJzXTtcbiAgfVxuXG4gIGlmIChmaW5nZXJwcmludC5sZW5ndGgpIHtcbiAgICBkYXRhLmZpbmdlcnByaW50ID0gWy4uLmRhdGEuZmluZ2VycHJpbnQsIC4uLmZpbmdlcnByaW50XTtcbiAgfVxuXG4gIGlmIChldmVudFByb2Nlc3NvcnMubGVuZ3RoKSB7XG4gICAgZGF0YS5ldmVudFByb2Nlc3NvcnMgPSBbLi4uZGF0YS5ldmVudFByb2Nlc3NvcnMsIC4uLmV2ZW50UHJvY2Vzc29yc107XG4gIH1cblxuICBpZiAoYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgZGF0YS5hdHRhY2htZW50cyA9IFsuLi5kYXRhLmF0dGFjaG1lbnRzLCAuLi5hdHRhY2htZW50c107XG4gIH1cblxuICBkYXRhLnByb3BhZ2F0aW9uQ29udGV4dCA9IHsgLi4uZGF0YS5wcm9wYWdhdGlvbkNvbnRleHQsIC4uLnByb3BhZ2F0aW9uQ29udGV4dCB9O1xufVxuXG4vKipcbiAqIE1lcmdlcyBjZXJ0YWluIHNjb3BlIGRhdGEuIFVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBvdmVyd3JpdGUgYW55IGV4aXN0aW5nIHZhbHVlcy5cbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RzLlxuICovXG5mdW5jdGlvbiBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YVxuXG4oZGF0YSwgcHJvcCwgbWVyZ2VWYWwpIHtcbiAgaWYgKG1lcmdlVmFsICYmIE9iamVjdC5rZXlzKG1lcmdlVmFsKS5sZW5ndGgpIHtcbiAgICAvLyBDbG9uZSBvYmplY3RcbiAgICBkYXRhW3Byb3BdID0geyAuLi5kYXRhW3Byb3BdIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWVyZ2VWYWwpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWVyZ2VWYWwsIGtleSkpIHtcbiAgICAgICAgZGF0YVtwcm9wXVtrZXldID0gbWVyZ2VWYWxba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlEYXRhVG9FdmVudChldmVudCwgZGF0YSkge1xuICBjb25zdCB7XG4gICAgZXh0cmEsXG4gICAgdGFncyxcbiAgICB1c2VyLFxuICAgIGNvbnRleHRzLFxuICAgIGxldmVsLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRyYW5zYWN0aW9uTmFtZSxcbiAgfSA9IGRhdGE7XG5cbiAgY29uc3QgY2xlYW5lZEV4dHJhID0gdXRpbHMuZHJvcFVuZGVmaW5lZEtleXMoZXh0cmEpO1xuICBpZiAoY2xlYW5lZEV4dHJhICYmIE9iamVjdC5rZXlzKGNsZWFuZWRFeHRyYSkubGVuZ3RoKSB7XG4gICAgZXZlbnQuZXh0cmEgPSB7IC4uLmNsZWFuZWRFeHRyYSwgLi4uZXZlbnQuZXh0cmEgfTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuZWRUYWdzID0gdXRpbHMuZHJvcFVuZGVmaW5lZEtleXModGFncyk7XG4gIGlmIChjbGVhbmVkVGFncyAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVGFncykubGVuZ3RoKSB7XG4gICAgZXZlbnQudGFncyA9IHsgLi4uY2xlYW5lZFRhZ3MsIC4uLmV2ZW50LnRhZ3MgfTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuZWRVc2VyID0gdXRpbHMuZHJvcFVuZGVmaW5lZEtleXModXNlcik7XG4gIGlmIChjbGVhbmVkVXNlciAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVXNlcikubGVuZ3RoKSB7XG4gICAgZXZlbnQudXNlciA9IHsgLi4uY2xlYW5lZFVzZXIsIC4uLmV2ZW50LnVzZXIgfTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuZWRDb250ZXh0cyA9IHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKGNvbnRleHRzKTtcbiAgaWYgKGNsZWFuZWRDb250ZXh0cyAmJiBPYmplY3Qua2V5cyhjbGVhbmVkQ29udGV4dHMpLmxlbmd0aCkge1xuICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi5jbGVhbmVkQ29udGV4dHMsIC4uLmV2ZW50LmNvbnRleHRzIH07XG4gIH1cblxuICBpZiAobGV2ZWwpIHtcbiAgICBldmVudC5sZXZlbCA9IGxldmVsO1xuICB9XG5cbiAgaWYgKHRyYW5zYWN0aW9uTmFtZSkge1xuICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25OYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icykge1xuICBjb25zdCBtZXJnZWRCcmVhZGNydW1icyA9IFsuLi4oZXZlbnQuYnJlYWRjcnVtYnMgfHwgW10pLCAuLi5icmVhZGNydW1ic107XG4gIGV2ZW50LmJyZWFkY3J1bWJzID0gbWVyZ2VkQnJlYWRjcnVtYnMubGVuZ3RoID8gbWVyZ2VkQnJlYWRjcnVtYnMgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U2RrTWV0YWRhdGFUb0V2ZW50KGV2ZW50LCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEpIHtcbiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0ge1xuICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSxcbiAgICAuLi5zZGtQcm9jZXNzaW5nTWV0YWRhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3BhblRvRXZlbnQoZXZlbnQsIHNwYW4pIHtcbiAgZXZlbnQuY29udGV4dHMgPSB7IHRyYWNlOiBzcGFuVXRpbHMuc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pLCAuLi5ldmVudC5jb250ZXh0cyB9O1xuICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuLmdldFJvb3RTcGFuKHNwYW4pO1xuICBpZiAocm9vdFNwYW4pIHtcbiAgICBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7XG4gICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBkeW5hbWljU2FtcGxpbmdDb250ZXh0LmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSxcbiAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSxcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uTmFtZSA9IHNwYW5VdGlscy5zcGFuVG9KU09OKHJvb3RTcGFuKS5kZXNjcmlwdGlvbjtcbiAgICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7XG4gICAgICBldmVudC50YWdzID0geyB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb25OYW1lLCAuLi5ldmVudC50YWdzIH07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwbGllcyBmaW5nZXJwcmludCBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgaWYgdGhlcmUncyBvbmUsXG4gKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50XG4gKi9cbmZ1bmN0aW9uIGFwcGx5RmluZ2VycHJpbnRUb0V2ZW50KGV2ZW50LCBmaW5nZXJwcmludCkge1xuICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2VcbiAgZXZlbnQuZmluZ2VycHJpbnQgPSBldmVudC5maW5nZXJwcmludCA/IHV0aWxzLmFycmF5aWZ5KGV2ZW50LmZpbmdlcnByaW50KSA6IFtdO1xuXG4gIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50XG4gIGlmIChmaW5nZXJwcmludCkge1xuICAgIGV2ZW50LmZpbmdlcnByaW50ID0gZXZlbnQuZmluZ2VycHJpbnQuY29uY2F0KGZpbmdlcnByaW50KTtcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgbm8gZGF0YSBhdCBhbGwsIHJlbW92ZSBlbXB0eSBhcnJheSBkZWZhdWx0XG4gIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7XG4gICAgZGVsZXRlIGV2ZW50LmZpbmdlcnByaW50O1xuICB9XG59XG5cbmV4cG9ydHMuYXBwbHlTY29wZURhdGFUb0V2ZW50ID0gYXBwbHlTY29wZURhdGFUb0V2ZW50O1xuZXhwb3J0cy5tZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YSA9IG1lcmdlQW5kT3ZlcndyaXRlU2NvcGVEYXRhO1xuZXhwb3J0cy5tZXJnZVNjb3BlRGF0YSA9IG1lcmdlU2NvcGVEYXRhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwbHlTY29wZURhdGFUb0V2ZW50LmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGV2ZW50UHJvY2Vzc29ycyA9IHJlcXVpcmUoJy4vZXZlbnRQcm9jZXNzb3JzLmpzJyk7XG5jb25zdCBzZXNzaW9uID0gcmVxdWlyZSgnLi9zZXNzaW9uLmpzJyk7XG5jb25zdCBhcHBseVNjb3BlRGF0YVRvRXZlbnQgPSByZXF1aXJlKCcuL3V0aWxzL2FwcGx5U2NvcGVEYXRhVG9FdmVudC5qcycpO1xuXG4vKipcbiAqIERlZmF1bHQgdmFsdWUgZm9yIG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIGFkZGVkIHRvIGFuIGV2ZW50LlxuICovXG5jb25zdCBERUZBVUxUX01BWF9CUkVBRENSVU1CUyA9IDEwMDtcblxuLyoqXG4gKiBUaGUgZ2xvYmFsIHNjb3BlIGlzIGtlcHQgaW4gdGhpcyBtb2R1bGUuXG4gKiBXaGVuIGFjY2Vzc2luZyB0aGlzIHZpYSBgZ2V0R2xvYmFsU2NvcGUoKWAgd2UnbGwgbWFrZSBzdXJlIHRvIHNldCBvbmUgaWYgbm9uZSBpcyBjdXJyZW50bHkgcHJlc2VudC5cbiAqL1xubGV0IGdsb2JhbFNjb3BlO1xuXG4vKipcbiAqIEhvbGRzIGFkZGl0aW9uYWwgZXZlbnQgaW5mb3JtYXRpb24uIHtAbGluayBTY29wZS5hcHBseVRvRXZlbnR9IHdpbGwgYmVcbiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuXG4gKi9cbmNsYXNzIFNjb3BlICB7XG4gIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovXG5cbiAgLyoqIENhbGxiYWNrIGZvciBjbGllbnQgdG8gcmVjZWl2ZSBzY29wZSBjaGFuZ2VzLiAqL1xuXG4gIC8qKiBDYWxsYmFjayBsaXN0IHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIge0BsaW5rIGFwcGx5VG9FdmVudH0uICovXG5cbiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqL1xuXG4gIC8qKiBVc2VyICovXG5cbiAgLyoqIFRhZ3MgKi9cblxuICAvKiogRXh0cmEgKi9cblxuICAvKiogQ29udGV4dHMgKi9cblxuICAvKiogQXR0YWNobWVudHMgKi9cblxuICAvKiogUHJvcGFnYXRpb24gQ29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAqL1xuXG4gIC8qKlxuICAgKiBBIHBsYWNlIHRvIHN0YXNoIGRhdGEgd2hpY2ggaXMgbmVlZGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIFNESydzIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgYnV0IHdoaWNoIHNob3VsZG4ndCBnZXRcbiAgICogc2VudCB0byBTZW50cnlcbiAgICovXG5cbiAgLyoqIEZpbmdlcnByaW50ICovXG5cbiAgLyoqIFNldmVyaXR5ICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbiBOYW1lXG4gICAqL1xuXG4gIC8qKiBTcGFuICovXG5cbiAgLyoqIFNlc3Npb24gKi9cblxuICAvKiogUmVxdWVzdCBNb2RlIFNlc3Npb24gU3RhdHVzICovXG5cbiAgLyoqIFRoZSBjbGllbnQgb24gdGhpcyBzY29wZSAqL1xuXG4gIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLlxuXG4gICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTtcbiAgICB0aGlzLl9zY29wZUxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX2V2ZW50UHJvY2Vzc29ycyA9IFtdO1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTtcbiAgICB0aGlzLl91c2VyID0ge307XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fY29udGV4dHMgPSB7fTtcbiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTtcbiAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaGVyaXQgdmFsdWVzIGZyb20gdGhlIHBhcmVudCBzY29wZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzY29wZS5jbG9uZSgpYCBhbmQgYG5ldyBTY29wZSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHN0YXRpYyBjbG9uZShzY29wZSkge1xuICAgIHJldHVybiBzY29wZSA/IHNjb3BlLmNsb25lKCkgOiBuZXcgU2NvcGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZSB0aGlzIHNjb3BlIGluc3RhbmNlLlxuICAgKi9cbiAgIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1Njb3BlID0gbmV3IFNjb3BlKCk7XG4gICAgbmV3U2NvcGUuX2JyZWFkY3J1bWJzID0gWy4uLnRoaXMuX2JyZWFkY3J1bWJzXTtcbiAgICBuZXdTY29wZS5fdGFncyA9IHsgLi4udGhpcy5fdGFncyB9O1xuICAgIG5ld1Njb3BlLl9leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEgfTtcbiAgICBuZXdTY29wZS5fY29udGV4dHMgPSB7IC4uLnRoaXMuX2NvbnRleHRzIH07XG4gICAgbmV3U2NvcGUuX3VzZXIgPSB0aGlzLl91c2VyO1xuICAgIG5ld1Njb3BlLl9sZXZlbCA9IHRoaXMuX2xldmVsO1xuICAgIG5ld1Njb3BlLl9zcGFuID0gdGhpcy5fc3BhbjtcbiAgICBuZXdTY29wZS5fc2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb247XG4gICAgbmV3U2NvcGUuX3RyYW5zYWN0aW9uTmFtZSA9IHRoaXMuX3RyYW5zYWN0aW9uTmFtZTtcbiAgICBuZXdTY29wZS5fZmluZ2VycHJpbnQgPSB0aGlzLl9maW5nZXJwcmludDtcbiAgICBuZXdTY29wZS5fZXZlbnRQcm9jZXNzb3JzID0gWy4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc107XG4gICAgbmV3U2NvcGUuX3JlcXVlc3RTZXNzaW9uID0gdGhpcy5fcmVxdWVzdFNlc3Npb247XG4gICAgbmV3U2NvcGUuX2F0dGFjaG1lbnRzID0gWy4uLnRoaXMuX2F0dGFjaG1lbnRzXTtcbiAgICBuZXdTY29wZS5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0geyAuLi50aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfTtcbiAgICBuZXdTY29wZS5fcHJvcGFnYXRpb25Db250ZXh0ID0geyAuLi50aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgfTtcbiAgICBuZXdTY29wZS5fY2xpZW50ID0gdGhpcy5fY2xpZW50O1xuXG4gICAgcmV0dXJuIG5ld1Njb3BlO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSB0aGUgY2xpZW50IG9uIHRoZSBzY29wZS4gKi9cbiAgIHNldENsaWVudChjbGllbnQpIHtcbiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjbGllbnQgYXNzaWduZWQgdG8gdGhpcyBzY29wZS5cbiAgICpcbiAgICogSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICAgZ2V0Q2xpZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGludGVybmFsIG9uIGNoYW5nZSBsaXN0ZW5lci4gVXNlZCBmb3Igc3ViIFNES3MgdGhhdCBuZWVkIHRvIHN0b3JlIHRoZSBzY29wZS5cbiAgICogQGhpZGRlblxuICAgKi9cbiAgIGFkZFNjb3BlTGlzdGVuZXIoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9zY29wZUxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGFkZEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0VXNlcih1c2VyKSB7XG4gICAgLy8gSWYgbnVsbCBpcyBwYXNzZWQgd2Ugd2FudCB0byB1bnNldCBldmVyeXRoaW5nLCBidXQgc3RpbGwgZGVmaW5lIGtleXMsXG4gICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLlxuICAgIHRoaXMuX3VzZXIgPSB1c2VyIHx8IHtcbiAgICAgIGVtYWlsOiB1bmRlZmluZWQsXG4gICAgICBpZDogdW5kZWZpbmVkLFxuICAgICAgaXBfYWRkcmVzczogdW5kZWZpbmVkLFxuICAgICAgc2VnbWVudDogdW5kZWZpbmVkLFxuICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24pIHtcbiAgICAgIHNlc3Npb24udXBkYXRlU2Vzc2lvbih0aGlzLl9zZXNzaW9uLCB7IHVzZXIgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGdldFVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBnZXRSZXF1ZXN0U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBzZXRSZXF1ZXN0U2Vzc2lvbihyZXF1ZXN0U2Vzc2lvbikge1xuICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gcmVxdWVzdFNlc3Npb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBzZXRUYWdzKHRhZ3MpIHtcbiAgICB0aGlzLl90YWdzID0ge1xuICAgICAgLi4udGhpcy5fdGFncyxcbiAgICAgIC4uLnRhZ3MsXG4gICAgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0VGFnKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0RXh0cmFzKGV4dHJhcykge1xuICAgIHRoaXMuX2V4dHJhID0ge1xuICAgICAgLi4udGhpcy5fZXh0cmEsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0RXh0cmEoa2V5LCBleHRyYSkge1xuICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHNldEZpbmdlcnByaW50KGZpbmdlcnByaW50KSB7XG4gICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0TGV2ZWwoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgbGV2ZWwsXG4gICkge1xuICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy5cbiAgICovXG4gICBzZXRUcmFuc2FjdGlvbk5hbWUobmFtZSkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHNldENvbnRleHQoa2V5LCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0c1trZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIFNwYW4gb24gdGhlIHNjb3BlLlxuICAgKiBAcGFyYW0gc3BhbiBTcGFuXG4gICAqIEBkZXByZWNhdGVkIEluc3RlYWQgb2Ygc2V0dGluZyBhIHNwYW4gb24gYSBzY29wZSwgdXNlIGBzdGFydFNwYW4oKWAvYHN0YXJ0U3Bhbk1hbnVhbCgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldFNwYW4oc3Bhbikge1xuICAgIHRoaXMuX3NwYW4gPSBzcGFuO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYFNwYW5gIGlmIHRoZXJlIGlzIG9uZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRBY3RpdmVTcGFuKClgIGluc3RlYWQuXG4gICAqL1xuICAgZ2V0U3BhbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc3BhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgVHJhbnNhY3Rpb25gIGF0dGFjaGVkIHRvIHRoZSBzY29wZSAoaWYgdGhlcmUgaXMgb25lKS5cbiAgICogQGRlcHJlY2F0ZWQgWW91IHNob3VsZCBub3QgcmVseSBvbiB0aGUgdHJhbnNhY3Rpb24sIGJ1dCBqdXN0IHVzZSBgc3RhcnRTcGFuKClgIEFQSXMgaW5zdGVhZC5cbiAgICovXG4gICBnZXRUcmFuc2FjdGlvbigpIHtcbiAgICAvLyBPZnRlbiwgdGhpcyBzcGFuIChpZiBpdCBleGlzdHMgYXQgYWxsKSB3aWxsIGJlIGEgdHJhbnNhY3Rpb24sIGJ1dCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIGJlLiBSZWdhcmRsZXNzLCBpdCB3aWxsXG4gICAgLy8gaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnRseS1hY3RpdmUgdHJhbnNhY3Rpb24uXG4gICAgY29uc3Qgc3BhbiA9IHRoaXMuX3NwYW47XG4gICAgLy8gQ2Fubm90IHJlcGxhY2Ugd2l0aCBnZXRSb290U3BhbiBiZWNhdXNlIGdldFJvb3RTcGFuIHJldHVybnMgYSBzcGFuLCBub3QgYSB0cmFuc2FjdGlvblxuICAgIC8vIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBhbnl3YXkuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgcmV0dXJuIHNwYW4gJiYgc3Bhbi50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHNldFNlc3Npb24oc2Vzc2lvbikge1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgZGVsZXRlIHRoaXMuX3Nlc3Npb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uO1xuICAgIH1cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZ2V0U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHVwZGF0ZShjYXB0dXJlQ29udGV4dCkge1xuICAgIGlmICghY2FwdHVyZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IHNjb3BlVG9NZXJnZSA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGNhcHR1cmVDb250ZXh0KHRoaXMpIDogY2FwdHVyZUNvbnRleHQ7XG5cbiAgICBpZiAoc2NvcGVUb01lcmdlIGluc3RhbmNlb2YgU2NvcGUpIHtcbiAgICAgIGNvbnN0IHNjb3BlRGF0YSA9IHNjb3BlVG9NZXJnZS5nZXRTY29wZURhdGEoKTtcblxuICAgICAgdGhpcy5fdGFncyA9IHsgLi4udGhpcy5fdGFncywgLi4uc2NvcGVEYXRhLnRhZ3MgfTtcbiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVEYXRhLmV4dHJhIH07XG4gICAgICB0aGlzLl9jb250ZXh0cyA9IHsgLi4udGhpcy5fY29udGV4dHMsIC4uLnNjb3BlRGF0YS5jb250ZXh0cyB9O1xuICAgICAgaWYgKHNjb3BlRGF0YS51c2VyICYmIE9iamVjdC5rZXlzKHNjb3BlRGF0YS51c2VyKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlRGF0YS51c2VyO1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlRGF0YS5sZXZlbCkge1xuICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlRGF0YS5sZXZlbDtcbiAgICAgIH1cbiAgICAgIGlmIChzY29wZURhdGEuZmluZ2VycHJpbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVEYXRhLmZpbmdlcnByaW50O1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlVG9NZXJnZS5nZXRSZXF1ZXN0U2Vzc2lvbigpKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVUb01lcmdlLmdldFJlcXVlc3RTZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGVEYXRhLnByb3BhZ2F0aW9uQ29udGV4dCkge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZURhdGEucHJvcGFnYXRpb25Db250ZXh0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzY29wZVRvTWVyZ2UpKSB7XG4gICAgICBjb25zdCBzY29wZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCA7XG4gICAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCAuLi5zY29wZUNvbnRleHQudGFncyB9O1xuICAgICAgdGhpcy5fZXh0cmEgPSB7IC4uLnRoaXMuX2V4dHJhLCAuLi5zY29wZUNvbnRleHQuZXh0cmEgfTtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVDb250ZXh0LmNvbnRleHRzIH07XG4gICAgICBpZiAoc2NvcGVDb250ZXh0LnVzZXIpIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlQ29udGV4dC51c2VyO1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlQ29udGV4dC5sZXZlbCkge1xuICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlQ29udGV4dC5sZXZlbDtcbiAgICAgIH1cbiAgICAgIGlmIChzY29wZUNvbnRleHQuZmluZ2VycHJpbnQpIHtcbiAgICAgICAgdGhpcy5fZmluZ2VycHJpbnQgPSBzY29wZUNvbnRleHQuZmluZ2VycHJpbnQ7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGVDb250ZXh0LnJlcXVlc3RTZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVDb250ZXh0LnJlcXVlc3RTZXNzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlQ29udGV4dC5wcm9wYWdhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gc2NvcGVDb250ZXh0LnByb3BhZ2F0aW9uQ29udGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGNsZWFyKCkge1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fdXNlciA9IHt9O1xuICAgIHRoaXMuX2NvbnRleHRzID0ge307XG4gICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NwYW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107XG4gICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gZ2VuZXJhdGVQcm9wYWdhdGlvbkNvbnRleHQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHtcbiAgICBjb25zdCBtYXhDcnVtYnMgPSB0eXBlb2YgbWF4QnJlYWRjcnVtYnMgPT09ICdudW1iZXInID8gbWF4QnJlYWRjcnVtYnMgOiBERUZBVUxUX01BWF9CUkVBRENSVU1CUztcblxuICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVyc1xuICAgIGlmIChtYXhDcnVtYnMgPD0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkQnJlYWRjcnVtYiA9IHtcbiAgICAgIHRpbWVzdGFtcDogdXRpbHMuZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLFxuICAgICAgLi4uYnJlYWRjcnVtYixcbiAgICB9O1xuXG4gICAgY29uc3QgYnJlYWRjcnVtYnMgPSB0aGlzLl9icmVhZGNydW1icztcbiAgICBicmVhZGNydW1icy5wdXNoKG1lcmdlZEJyZWFkY3J1bWIpO1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMubGVuZ3RoID4gbWF4Q3J1bWJzID8gYnJlYWRjcnVtYnMuc2xpY2UoLW1heENydW1icykgOiBicmVhZGNydW1icztcblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGdldExhc3RCcmVhZGNydW1iKCkge1xuICAgIHJldHVybiB0aGlzLl9icmVhZGNydW1ic1t0aGlzLl9icmVhZGNydW1icy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGNsZWFyQnJlYWRjcnVtYnMoKSB7XG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgYWRkQXR0YWNobWVudChhdHRhY2htZW50KSB7XG4gICAgdGhpcy5fYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdldFNjb3BlRGF0YSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldEF0dGFjaG1lbnRzKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNjb3BlRGF0YSgpO1xuXG4gICAgcmV0dXJuIGRhdGEuYXR0YWNobWVudHM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjbGVhckF0dGFjaG1lbnRzKCkge1xuICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgIGdldFNjb3BlRGF0YSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBfYnJlYWRjcnVtYnMsXG4gICAgICBfYXR0YWNobWVudHMsXG4gICAgICBfY29udGV4dHMsXG4gICAgICBfdGFncyxcbiAgICAgIF9leHRyYSxcbiAgICAgIF91c2VyLFxuICAgICAgX2xldmVsLFxuICAgICAgX2ZpbmdlcnByaW50LFxuICAgICAgX2V2ZW50UHJvY2Vzc29ycyxcbiAgICAgIF9wcm9wYWdhdGlvbkNvbnRleHQsXG4gICAgICBfc2RrUHJvY2Vzc2luZ01ldGFkYXRhLFxuICAgICAgX3RyYW5zYWN0aW9uTmFtZSxcbiAgICAgIF9zcGFuLFxuICAgIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJyZWFkY3J1bWJzOiBfYnJlYWRjcnVtYnMsXG4gICAgICBhdHRhY2htZW50czogX2F0dGFjaG1lbnRzLFxuICAgICAgY29udGV4dHM6IF9jb250ZXh0cyxcbiAgICAgIHRhZ3M6IF90YWdzLFxuICAgICAgZXh0cmE6IF9leHRyYSxcbiAgICAgIHVzZXI6IF91c2VyLFxuICAgICAgbGV2ZWw6IF9sZXZlbCxcbiAgICAgIGZpbmdlcnByaW50OiBfZmluZ2VycHJpbnQgfHwgW10sXG4gICAgICBldmVudFByb2Nlc3NvcnM6IF9ldmVudFByb2Nlc3NvcnMsXG4gICAgICBwcm9wYWdhdGlvbkNvbnRleHQ6IF9wcm9wYWdhdGlvbkNvbnRleHQsXG4gICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IF9zZGtQcm9jZXNzaW5nTWV0YWRhdGEsXG4gICAgICB0cmFuc2FjdGlvbk5hbWU6IF90cmFuc2FjdGlvbk5hbWUsXG4gICAgICBzcGFuOiBfc3BhbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZGF0YSBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgYW5kIHJ1bnMgYWxsIGV2ZW50IHByb2Nlc3NvcnMgb24gaXQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBFdmVudFxuICAgKiBAcGFyYW0gaGludCBPYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24sIGZvciB1c2UgYnkgdGhlIGV2ZW50IHByb2Nlc3NvcnMuXG4gICAqIEBoaWRkZW5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhcHBseVNjb3BlRGF0YVRvRXZlbnQoKWAgZGlyZWN0bHlcbiAgICovXG4gICBhcHBseVRvRXZlbnQoXG4gICAgZXZlbnQsXG4gICAgaGludCA9IHt9LFxuICAgIGFkZGl0aW9uYWxFdmVudFByb2Nlc3NvcnMgPSBbXSxcbiAgKSB7XG4gICAgYXBwbHlTY29wZURhdGFUb0V2ZW50LmFwcGx5U2NvcGVEYXRhVG9FdmVudChldmVudCwgdGhpcy5nZXRTY29wZURhdGEoKSk7XG5cbiAgICAvLyBUT0RPICh2OCk6IFVwZGF0ZSB0aGlzIG9yZGVyIHRvIGJlOiBHbG9iYWwgPiBDbGllbnQgPiBTY29wZVxuICAgIGNvbnN0IGV2ZW50UHJvY2Vzc29ycyQxID0gW1xuICAgICAgLi4uYWRkaXRpb25hbEV2ZW50UHJvY2Vzc29ycyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgLi4uZXZlbnRQcm9jZXNzb3JzLmdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpLFxuICAgICAgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzLFxuICAgIF07XG5cbiAgICByZXR1cm4gZXZlbnRQcm9jZXNzb3JzLm5vdGlmeUV2ZW50UHJvY2Vzc29ycyhldmVudFByb2Nlc3NvcnMkMSwgZXZlbnQsIGhpbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBkYXRhIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBkdXJpbmcgZXZlbnQgcHJvY2Vzc2luZyBidXQgd29uJ3QgZ2V0IHNlbnQgdG8gU2VudHJ5XG4gICAqL1xuICAgc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKG5ld0RhdGEpIHtcbiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7IC4uLnRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSwgLi4ubmV3RGF0YSB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkge1xuICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBnZXRQcm9wYWdhdGlvbkNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBzY29wZS5cbiAgICpcbiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIHRvIGNhcHR1cmUuXG4gICAqIEBwYXJhbSBoaW50IE9wdGluYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LlxuICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIFNlbnRyeSBldmVudC5cbiAgICovXG4gICBjYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludCkge1xuICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXRpbHMudXVpZDQoKTtcblxuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICB1dGlscy5sb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV4Y2VwdGlvbiEnKTtcbiAgICAgIHJldHVybiBldmVudElkO1xuICAgIH1cblxuICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpO1xuXG4gICAgdGhpcy5fY2xpZW50LmNhcHR1cmVFeGNlcHRpb24oXG4gICAgICBleGNlcHRpb24sXG4gICAgICB7XG4gICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sXG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgICAgICAgLi4uaGludCxcbiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsXG4gICAgICB9LFxuICAgICAgdGhpcyxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhIG1lc3NhZ2UgZm9yIHRoaXMgc2NvcGUuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGNhcHR1cmUuXG4gICAqIEBwYXJhbSBsZXZlbCBBbiBvcHRpb25hbCBzZXZlcml0eSBsZXZlbCB0byByZXBvcnQgdGhlIG1lc3NhZ2Ugd2l0aC5cbiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LlxuICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIG1lc3NhZ2UuXG4gICAqL1xuICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHtcbiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV0aWxzLnV1aWQ0KCk7XG5cbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgdXRpbHMubG9nZ2VyLndhcm4oJ05vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBtZXNzYWdlIScpO1xuICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5fY2xpZW50LmNhcHR1cmVNZXNzYWdlKFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGxldmVsLFxuICAgICAge1xuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogbWVzc2FnZSxcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLFxuICAgICAgICAuLi5oaW50LFxuICAgICAgICBldmVudF9pZDogZXZlbnRJZCxcbiAgICAgIH0sXG4gICAgICB0aGlzLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlcyBhIG1hbnVhbGx5IGNyZWF0ZWQgZXZlbnQgZm9yIHRoaXMgc2NvcGUgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAgICpcbiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXZlbnQgdG8gY2FwdHVyZS5cbiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LlxuICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LlxuICAgKi9cbiAgIGNhcHR1cmVFdmVudChldmVudCwgaGludCkge1xuICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXRpbHMudXVpZDQoKTtcblxuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICB1dGlscy5sb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpO1xuICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xpZW50LmNhcHR1cmVFdmVudChldmVudCwgeyAuLi5oaW50LCBldmVudF9pZDogZXZlbnRJZCB9LCB0aGlzKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgc2V0IGNhbGwuXG4gICAqL1xuICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkge1xuICAgIC8vIFdlIG5lZWQgdGhpcyBjaGVjayBmb3IgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzIHRvIGJlIGFibGUgdG8gd29yayBvbiBzY29wZSBkdXJpbmcgdXBkYXRlc1xuICAgIC8vIElmIHRoaXMgY2hlY2sgaXMgbm90IGhlcmUgd2UnbGwgcHJvZHVjZSBlbmRsZXNzIHJlY3Vyc2lvbiB3aGVuIHNvbWV0aGluZyBpcyBkb25lIHdpdGggdGhlIHNjb3BlXG4gICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay5cbiAgICBpZiAoIXRoaXMuX25vdGlmeWluZ0xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4ge1xuICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBnbG9iYWwgc2NvcGUuXG4gKiBUaGlzIHNjb3BlIGlzIGFwcGxpZWQgdG8gX2FsbF8gZXZlbnRzLlxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxTY29wZSgpIHtcbiAgaWYgKCFnbG9iYWxTY29wZSkge1xuICAgIGdsb2JhbFNjb3BlID0gbmV3IFNjb3BlKCk7XG4gIH1cblxuICByZXR1cm4gZ2xvYmFsU2NvcGU7XG59XG5cbi8qKlxuICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGZvciB0ZXN0cy5cbiAqIERPIE5PVCBVU0UgdGhpcywgYXMgdGhpcyBpcyBhbiBpbnRlcm5hbCBBUEkgYW5kIHN1YmplY3QgdG8gY2hhbmdlLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBzZXRHbG9iYWxTY29wZShzY29wZSkge1xuICBnbG9iYWxTY29wZSA9IHNjb3BlO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFjZUlkOiB1dGlscy51dWlkNCgpLFxuICAgIHNwYW5JZDogdXRpbHMudXVpZDQoKS5zdWJzdHJpbmcoMTYpLFxuICB9O1xufVxuXG5leHBvcnRzLlNjb3BlID0gU2NvcGU7XG5leHBvcnRzLmdldEdsb2JhbFNjb3BlID0gZ2V0R2xvYmFsU2NvcGU7XG5leHBvcnRzLnNldEdsb2JhbFNjb3BlID0gc2V0R2xvYmFsU2NvcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgU0RLX1ZFUlNJT04gPSAnNy4xMjAuMCc7XG5cbmV4cG9ydHMuU0RLX1ZFUlNJT04gPSBTREtfVkVSU0lPTjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMuanMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBzY29wZSA9IHJlcXVpcmUoJy4vc2NvcGUuanMnKTtcbmNvbnN0IHNlc3Npb24gPSByZXF1aXJlKCcuL3Nlc3Npb24uanMnKTtcbmNvbnN0IHZlcnNpb24gPSByZXF1aXJlKCcuL3ZlcnNpb24uanMnKTtcblxuLyoqXG4gKiBBUEkgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIG9mIHRoaXMgaHViLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3JlYXNlZCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJmYWNlXG4gKiBjaGFuZ2VzIGFuZCBuZXcgbWV0aG9kcyBhcmUgaW50cm9kdWNlZC5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IEFQSV9WRVJTSU9OID0gcGFyc2VGbG9hdCh2ZXJzaW9uLlNES19WRVJTSU9OKTtcblxuLyoqXG4gKiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIGFkZGVkIHRvIGFuIGV2ZW50LiBDYW4gYmUgb3ZlcndyaXR0ZW5cbiAqIHdpdGgge0BsaW5rIE9wdGlvbnMubWF4QnJlYWRjcnVtYnN9LlxuICovXG5jb25zdCBERUZBVUxUX0JSRUFEQ1JVTUJTID0gMTAwO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBgSHViYCBjbGFzcyB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA4IG9mIHRoZSBTREsgaW4gZmF2b3VyIG9mIGBTY29wZWAgYW5kIGBDbGllbnRgIG9iamVjdHMuXG4gKlxuICogSWYgeW91IHByZXZpb3VzbHkgdXNlZCB0aGUgYEh1YmAgY2xhc3MgZGlyZWN0bHksIHJlcGxhY2UgaXQgd2l0aCBgU2NvcGVgIGFuZCBgQ2xpZW50YCBvYmplY3RzLiBNb3JlIGluZm9ybWF0aW9uOlxuICogLSBbTXVsdGlwbGUgU2VudHJ5IEluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLnNlbnRyeS5pby9wbGF0Zm9ybXMvamF2YXNjcmlwdC9iZXN0LXByYWN0aWNlcy9tdWx0aXBsZS1zZW50cnktaW5zdGFuY2VzLylcbiAqIC0gW0Jyb3dzZXIgRXh0ZW5zaW9uc10oaHR0cHM6Ly9kb2NzLnNlbnRyeS5pby9wbGF0Zm9ybXMvamF2YXNjcmlwdC9iZXN0LXByYWN0aWNlcy9icm93c2VyLWV4dGVuc2lvbnMvKVxuICpcbiAqIFNvbWUgb2Ygb3VyIEFQSXMgYXJlIHR5cGVkIHdpdGggdGhlIEh1YiBjbGFzcyBpbnN0ZWFkIG9mIHRoZSBpbnRlcmZhY2UgKGUuZy4gYGdldEN1cnJlbnRIdWJgKS4gTW9zdCBvZiB0aGVtIGFyZSBkZXByZWNhdGVkXG4gKiB0aGVtc2VsdmVzIGFuZCB3aWxsIGFsc28gYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDguIE1vcmUgaW5mb3JtYXRpb246XG4gKiAtIFtNaWdyYXRpb24gR3VpZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvYmxvYi9kZXZlbG9wL01JR1JBVElPTi5tZCNkZXByZWNhdGUtaHViKVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNsYXNzIEh1YiAge1xuICAvKiogSXMgYSB7QGxpbmsgTGF5ZXJ9W10gY29udGFpbmluZyB0aGUgY2xpZW50IGFuZCBzY29wZSAqL1xuXG4gIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi9cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGVcbiAgICogaW50ZXJuYWwgc3RhY2sgb24gY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi5cbiAgICogQHBhcmFtIHNjb3BlIGJvdW5kIHRvIHRoZSBodWIuXG4gICAqIEBwYXJhbSB2ZXJzaW9uIG51bWJlciwgaGlnaGVyIG51bWJlciBtZWFucyBoaWdoZXIgcHJpb3JpdHkuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIEluc3RhbnRpYXRpb24gb2YgSHViIG9iamVjdHMgaXMgZGVwcmVjYXRlZCBhbmQgdGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDggb2YgdGhlIFNESy5cbiAgICpcbiAgICogSWYgeW91IGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEh1YiBmb3IgbXVsdGktY2xpZW50IHVzZSBsaWtlIHNvOlxuICAgKlxuICAgKiBgYGBcbiAgICogLy8gT0xEXG4gICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoKTtcbiAgICogaHViLmJpbmRDbGllbnQoY2xpZW50KTtcbiAgICogbWFrZU1haW4oaHViKVxuICAgKiBgYGBcbiAgICpcbiAgICogaW5zdGVhZCBpbml0aWFsaXplIHRoZSBjbGllbnQgYXMgZm9sbG93czpcbiAgICpcbiAgICogYGBgXG4gICAqIC8vIE5FV1xuICAgKiBTZW50cnkud2l0aElzb2xhdGlvblNjb3BlKCgpID0+IHtcbiAgICogICAgU2VudHJ5LnNldEN1cnJlbnRDbGllbnQoY2xpZW50KTtcbiAgICogICAgY2xpZW50LmluaXQoKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBIdWIgdG8gY2FwdHVyZSBldmVudHMgbGlrZSBzbzpcbiAgICpcbiAgICogYGBgXG4gICAqIC8vIE9MRFxuICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7XG4gICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoY2xpZW50KTtcbiAgICogaHViLmNhcHR1cmVFeGNlcHRpb24oKVxuICAgKiBgYGBcbiAgICpcbiAgICogaW5zdGVhZCBjYXB0dXJlIGlzb2xhdGVkIGV2ZW50cyBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiBgYGBcbiAgICogLy8gTkVXXG4gICAqIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoKTtcbiAgICogY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUoKTtcbiAgICogc2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7XG4gICAqIHNjb3BlLmNhcHR1cmVFeGNlcHRpb24oKTtcbiAgICogYGBgXG4gICAqL1xuICAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50LFxuICAgIHNjb3BlJDEsXG4gICAgaXNvbGF0aW9uU2NvcGUsXG4gICAgICBfdmVyc2lvbiA9IEFQSV9WRVJTSU9OLFxuICApIHt0aGlzLl92ZXJzaW9uID0gX3ZlcnNpb247XG4gICAgbGV0IGFzc2lnbmVkU2NvcGU7XG4gICAgaWYgKCFzY29wZSQxKSB7XG4gICAgICBhc3NpZ25lZFNjb3BlID0gbmV3IHNjb3BlLlNjb3BlKCk7XG4gICAgICBhc3NpZ25lZFNjb3BlLnNldENsaWVudChjbGllbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25lZFNjb3BlID0gc2NvcGUkMTtcbiAgICB9XG5cbiAgICBsZXQgYXNzaWduZWRJc29sYXRpb25TY29wZTtcbiAgICBpZiAoIWlzb2xhdGlvblNjb3BlKSB7XG4gICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gbmV3IHNjb3BlLlNjb3BlKCk7XG4gICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlLnNldENsaWVudChjbGllbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gaXNvbGF0aW9uU2NvcGU7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTtcblxuICAgIGlmIChjbGllbnQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgdGhpcy5iaW5kQ2xpZW50KGNsaWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNvbGF0aW9uU2NvcGUgPSBhc3NpZ25lZElzb2xhdGlvblNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGh1YidzIHZlcnNpb24gaXMgb2xkZXIgdGhhbiB0aGUgZ2l2ZW4gdmVyc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gQSB2ZXJzaW9uIG51bWJlciB0byBjb21wYXJlIHRvLlxuICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIHZlcnNpb24gaXMgbmV3ZXI7IG90aGVyd2lzZSBmYWxzZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICAgaXNPbGRlclRoYW4odmVyc2lvbikge1xuICAgIHJldHVybiB0aGlzLl92ZXJzaW9uIDwgdmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGJpbmRzIHRoZSBnaXZlbiBjbGllbnQgdG8gdGhlIGN1cnJlbnQgc2NvcGUuXG4gICAqIEBwYXJhbSBjbGllbnQgQW4gU0RLIGNsaWVudCAoY2xpZW50KSBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBpbml0QW5kQmluZCgpYCBkaXJlY3RseSwgb3IgYHNldEN1cnJlbnRDbGllbnQoKWAgYW5kL29yIGBjbGllbnQuaW5pdCgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGJpbmRDbGllbnQoY2xpZW50KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIHRvcC5jbGllbnQgPSBjbGllbnQ7XG4gICAgdG9wLnNjb3BlLnNldENsaWVudChjbGllbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGlmIChjbGllbnQgJiYgY2xpZW50LnNldHVwSW50ZWdyYXRpb25zKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHdpdGhTY29wZWAgaW5zdGVhZC5cbiAgICovXG4gICBwdXNoU2NvcGUoKSB7XG4gICAgLy8gV2Ugd2FudCB0byBjbG9uZSB0aGUgY29udGVudCBvZiBwcmV2IHNjb3BlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCkuY2xvbmUoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldFN0YWNrKCkucHVzaCh7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNsaWVudDogdGhpcy5nZXRDbGllbnQoKSxcbiAgICAgIHNjb3BlLFxuICAgIH0pO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHdpdGhTY29wZWAgaW5zdGVhZC5cbiAgICovXG4gICBwb3BTY29wZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBpZiAodGhpcy5nZXRTdGFjaygpLmxlbmd0aCA8PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgcmV0dXJuICEhdGhpcy5nZXRTdGFjaygpLnBvcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LndpdGhTY29wZSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHdpdGhTY29wZShjYWxsYmFjaykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wdXNoU2NvcGUoKTtcblxuICAgIGxldCBtYXliZVByb21pc2VSZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzVGhlbmFibGUobWF5YmVQcm9taXNlUmVzdWx0KSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGlzVGhlbmFibGUgcmV0dXJucyB0aGUgd3JvbmcgdHlwZVxuICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdC50aGVuKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgICAgICBlID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdGhpcy5wb3BTY29wZSgpO1xuICAgIHJldHVybiBtYXliZVByb21pc2VSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQuXG4gICAqL1xuICAgZ2V0Q2xpZW50KCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHJldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuY2xpZW50IDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDdXJyZW50U2NvcGUoKWAgaW5zdGVhZC5cbiAgICovXG4gICBnZXRTY29wZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmdldElzb2xhdGlvblNjb3BlKClgIGluc3RlYWQuXG4gICAqL1xuICAgZ2V0SXNvbGF0aW9uU2NvcGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzb2xhdGlvblNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNjb3BlIHN0YWNrIGZvciBkb21haW5zIG9yIHRoZSBwcm9jZXNzLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAgICovXG4gICBnZXRTdGFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2s7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wbW9zdCBzY29wZSBsYXllciBpbiB0aGUgb3JkZXIgZG9tYWluID4gbG9jYWwgPiBwcm9jZXNzLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAgICovXG4gICBnZXRTdGFja1RvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbigpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7XG4gICAgY29uc3QgZXZlbnRJZCA9ICh0aGlzLl9sYXN0RXZlbnRJZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZCA/IGhpbnQuZXZlbnRfaWQgOiB1dGlscy51dWlkNCgpKTtcbiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIHtcbiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sXG4gICAgICBzeW50aGV0aWNFeGNlcHRpb24sXG4gICAgICAuLi5oaW50LFxuICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgIGBTZW50cnkuY2FwdHVyZU1lc3NhZ2UoKWAgaW5zdGVhZC5cbiAgICovXG4gICBjYXB0dXJlTWVzc2FnZShcbiAgICBtZXNzYWdlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGxldmVsLFxuICAgIGhpbnQsXG4gICkge1xuICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXRpbHMudXVpZDQoKSk7XG4gICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0U2NvcGUoKS5jYXB0dXJlTWVzc2FnZShtZXNzYWdlLCBsZXZlbCwge1xuICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsXG4gICAgICBzeW50aGV0aWNFeGNlcHRpb24sXG4gICAgICAuLi5oaW50LFxuICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5jYXB0dXJlRXZlbnQoKWAgaW5zdGVhZC5cbiAgICovXG4gICBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHtcbiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV0aWxzLnV1aWQ0KCk7XG4gICAgaWYgKCFldmVudC50eXBlKSB7XG4gICAgICB0aGlzLl9sYXN0RXZlbnRJZCA9IGV2ZW50SWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0U2NvcGUoKS5jYXB0dXJlRXZlbnQoZXZlbnQsIHsgLi4uaGludCwgZXZlbnRfaWQ6IGV2ZW50SWQgfSk7XG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICAgbGFzdEV2ZW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgaW5zdGVhZC5cbiAgICovXG4gICBhZGRCcmVhZGNydW1iKGJyZWFkY3J1bWIsIGhpbnQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB7IHNjb3BlLCBjbGllbnQgfSA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcblxuICAgIGlmICghY2xpZW50KSByZXR1cm47XG5cbiAgICBjb25zdCB7IGJlZm9yZUJyZWFkY3J1bWIgPSBudWxsLCBtYXhCcmVhZGNydW1icyA9IERFRkFVTFRfQlJFQURDUlVNQlMgfSA9XG4gICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307XG5cbiAgICBpZiAobWF4QnJlYWRjcnVtYnMgPD0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGltZXN0YW1wID0gdXRpbHMuZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7IHRpbWVzdGFtcCwgLi4uYnJlYWRjcnVtYiB9O1xuICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWJcbiAgICAgID8gKHV0aWxzLmNvbnNvbGVTYW5kYm94KCgpID0+IGJlZm9yZUJyZWFkY3J1bWIobWVyZ2VkQnJlYWRjcnVtYiwgaGludCkpIClcbiAgICAgIDogbWVyZ2VkQnJlYWRjcnVtYjtcblxuICAgIGlmIChmaW5hbEJyZWFkY3J1bWIgPT09IG51bGwpIHJldHVybjtcblxuICAgIGlmIChjbGllbnQuZW1pdCkge1xuICAgICAgY2xpZW50LmVtaXQoJ2JlZm9yZUFkZEJyZWFkY3J1bWInLCBmaW5hbEJyZWFkY3J1bWIsIGhpbnQpO1xuICAgIH1cblxuICAgIC8vIFRPRE8odjgpOiBJIGtub3cgdGhpcyBjb21tZW50IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIGJlY2F1c2UgdGhlIGh1YiB3aWxsIGJlIGRlcHJlY2F0ZWQgYnV0IEkgc3RpbGwgd2FudGVkIHRvXG4gICAgLy8gd3JpdGUgaXQgZG93bi4gSW4gdGhlb3J5LCB3ZSB3b3VsZCBoYXZlIHRvIGFkZCB0aGUgYnJlYWRjcnVtYnMgdG8gdGhlIGlzb2xhdGlvbiBzY29wZSBoZXJlLCBob3dldmVyLCB0aGF0IHdvdWxkXG4gICAgLy8gZHVwbGljYXRlIGFsbCBvZiB0aGUgYnJlYWRjcnVtYnMuIFRoZXJlIHdhcyB0aGUgcG9zc2liaWxpdHkgb2YgYWRkaW5nIGJyZWFkY3J1bWJzIHRvIGJvdGgsIHRoZSBpc29sYXRpb24gc2NvcGVcbiAgICAvLyBhbmQgdGhlIG5vcm1hbCBzY29wZSwgYW5kIGRlZHVwbGljYXRpbmcgaXQgZG93biB0aGUgbGluZSBpbiB0aGUgZXZlbnQgcHJvY2Vzc2luZyBwaXBlbGluZS4gSG93ZXZlciwgdGhhdCB3b3VsZFxuICAgIC8vIGhhdmUgYmVlbiB2ZXJ5IGZyYWdpbGUsIGJlY2F1c2UgdGhlIGJyZWFkY3J1bWIgb2JqZWN0cyB3b3VsZCBoYXZlIG5lZWRlZCB0byBrZWVwIHRoZWlyIGlkZW50aXR5IGFsbCB0aHJvdWdob3V0XG4gICAgLy8gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuXG4gICAgLy8gSW4gdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiwgdGhlIHRvcCBsZXZlbCBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgc2hvdWxkIE9OTFkgd3JpdGUgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS5cblxuICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0VXNlcigpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldFVzZXIodXNlcikge1xuICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0VXNlcigpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRVc2VyKHVzZXIpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRVc2VyKHVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFRhZ3MoKWAgaW5zdGVhZC5cbiAgICovXG4gICBzZXRUYWdzKHRhZ3MpIHtcbiAgICAvLyBUT0RPKHY4KTogVGhlIHRvcCBsZXZlbCBgU2VudHJ5LnNldFRhZ3MoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldFNjb3BlKCkuc2V0VGFncyh0YWdzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0VGFncyh0YWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRFeHRyYXMoKWAgaW5zdGVhZC5cbiAgICovXG4gICBzZXRFeHRyYXMoZXh0cmFzKSB7XG4gICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRFeHRyYXMoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldFNjb3BlKCkuc2V0RXh0cmFzKGV4dHJhcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhcyhleHRyYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFRhZygpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldFRhZyhrZXksIHZhbHVlKSB7XG4gICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRUYWcoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldFNjb3BlKCkuc2V0VGFnKGtleSwgdmFsdWUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0RXh0cmEoKWAgaW5zdGVhZC5cbiAgICovXG4gICBzZXRFeHRyYShrZXksIGV4dHJhKSB7XG4gICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRFeHRyYSgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRFeHRyYShrZXksIGV4dHJhKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0Q29udGV4dCgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgIHNldENvbnRleHQobmFtZSwgY29udGV4dCkge1xuICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0Q29udGV4dCgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZ2V0U2NvcGUoKWAgZGlyZWN0bHkuXG4gICAqL1xuICAgY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB7IHNjb3BlLCBjbGllbnQgfSA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICBjYWxsYmFjayhzY29wZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgIHJ1bihjYWxsYmFjaykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IG9sZEh1YiA9IG1ha2VNYWluKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBtYWtlTWFpbihvbGRIdWIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDbGllbnQoKS5nZXRJbnRlZ3JhdGlvbkJ5TmFtZSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldEludGVncmF0aW9uKGludGVncmF0aW9uKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTtcbiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgcmV0dXJuIGNsaWVudC5nZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKGBDYW5ub3QgcmV0cmlldmUgaW50ZWdyYXRpb24gJHtpbnRlZ3JhdGlvbi5pZH0gZnJvbSB0aGUgY3VycmVudCBIdWJgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgYSBuZXcgYFRyYW5zYWN0aW9uYCBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gbWFudWFsIHRyYWNpbmcgaW5zdHJ1bWVudGF0aW9uLlxuICAgKlxuICAgKiBBIHRyZWUgc3RydWN0dXJlIGNhbiBiZSBidWlsdCBieSBhZGRpbmcgY2hpbGQgc3BhbnMgdG8gdGhlIHRyYW5zYWN0aW9uLCBhbmQgY2hpbGQgc3BhbnMgdG8gb3RoZXIgc3BhbnMuIFRvIHN0YXJ0IGFcbiAgICogbmV3IGNoaWxkIHNwYW4gd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBvciBhbnkgc3BhbiwgY2FsbCB0aGUgcmVzcGVjdGl2ZSBgLnN0YXJ0Q2hpbGQoKWAgbWV0aG9kLlxuICAgKlxuICAgKiBFdmVyeSBjaGlsZCBzcGFuIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgb3RoZXJ3aXNlIHRoZSB1bmZpbmlzaGVkIHNwYW5zIGFyZSBkaXNjYXJkZWQuXG4gICAqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiBtdXN0IGJlIGZpbmlzaGVkIHdpdGggYSBjYWxsIHRvIGl0cyBgLmVuZCgpYCBtZXRob2QsIGF0IHdoaWNoIHBvaW50IHRoZSB0cmFuc2FjdGlvbiB3aXRoIGFsbCBpdHNcbiAgICogZmluaXNoZWQgY2hpbGQgc3BhbnMgd2lsbCBiZSBzZW50IHRvIFNlbnRyeS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgUHJvcGVydGllcyBvZiB0aGUgbmV3IGBUcmFuc2FjdGlvbmAuXG4gICAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50XG4gICAqIGRlZmF1bHQgdmFsdWVzKS4gU2VlIHtAbGluayBPcHRpb25zLnRyYWNlc1NhbXBsZXJ9LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHN0YXJ0U3BhbigpYCwgYHN0YXJ0U3Bhbk1hbnVhbCgpYCBvciBgc3RhcnRJbmFjdGl2ZVNwYW4oKWAgaW5zdGVhZC5cbiAgICovXG4gICBzdGFydFRyYW5zYWN0aW9uKGNvbnRleHQsIGN1c3RvbVNhbXBsaW5nQ29udGV4dCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoJ3N0YXJ0VHJhbnNhY3Rpb24nLCBjb250ZXh0LCBjdXN0b21TYW1wbGluZ0NvbnRleHQpO1xuXG4gICAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgIXJlc3VsdCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpO1xuICAgICAgaWYgKCFjbGllbnQpIHtcbiAgICAgICAgdXRpbHMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgXCJUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaXMgbWlzc2luZy4gWW91IHNob3VsZCAnaW5pdCcgdGhlIFNESyBiZWZvcmUgY2FsbGluZyAnc3RhcnRUcmFuc2FjdGlvbidcIixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKGBUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaGFzIG5vdCBiZWVuIGFkZGVkLiBDYWxsICdhZGRUcmFjaW5nRXh0ZW5zaW9ucycgYmVmb3JlIGNhbGxpbmcgJ2luaXQnOlxuU2VudHJ5LmFkZFRyYWNpbmdFeHRlbnNpb25zKCk7XG5TZW50cnkuaW5pdCh7Li4ufSk7XG5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvVHJhY2VIZWFkZXIoKWAgaW5zdGVhZC5cbiAgICovXG4gICB0cmFjZUhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoJ3RyYWNlSGVhZGVycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0b3AgbGV2ZWwgYGNhcHR1cmVTZXNzaW9uYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb24gPSBmYWxzZSkge1xuICAgIC8vIGJvdGggc2VuZCB0aGUgdXBkYXRlIGFuZCBwdWxsIHRoZSBzZXNzaW9uIGZyb20gdGhlIHNjb3BlXG4gICAgaWYgKGVuZFNlc3Npb24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgcmV0dXJuIHRoaXMuZW5kU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIC8vIG9ubHkgc2VuZCB0aGUgdXBkYXRlXG4gICAgdGhpcy5fc2VuZFNlc3Npb25VcGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBlbmRTZXNzaW9uYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGVuZFNlc3Npb24oKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgY29uc3Qgc2NvcGUgPSBsYXllci5zY29wZTtcbiAgICBjb25zdCBzZXNzaW9uJDEgPSBzY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKHNlc3Npb24kMSkge1xuICAgICAgc2Vzc2lvbi5jbG9zZVNlc3Npb24oc2Vzc2lvbiQxKTtcbiAgICB9XG4gICAgdGhpcy5fc2VuZFNlc3Npb25VcGRhdGUoKTtcblxuICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZVxuICAgIHNjb3BlLnNldFNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBzdGFydFNlc3Npb25gIGluc3RlYWQuXG4gICAqL1xuICAgc3RhcnRTZXNzaW9uKGNvbnRleHQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB7IHNjb3BlLCBjbGllbnQgfSA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcbiAgICBjb25zdCB7IHJlbGVhc2UsIGVudmlyb25tZW50ID0gY29uc3RhbnRzLkRFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307XG5cbiAgICAvLyBXaWxsIGZldGNoIHVzZXJBZ2VudCBpZiBjYWxsZWQgZnJvbSBicm93c2VyIHNka1xuICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSB1dGlscy5HTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTtcblxuICAgIGNvbnN0IHNlc3Npb24kMSA9IHNlc3Npb24ubWFrZVNlc3Npb24oe1xuICAgICAgcmVsZWFzZSxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgdXNlcjogc2NvcGUuZ2V0VXNlcigpLFxuICAgICAgLi4uKHVzZXJBZ2VudCAmJiB7IHVzZXJBZ2VudCB9KSxcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgfSk7XG5cbiAgICAvLyBFbmQgZXhpc3Rpbmcgc2Vzc2lvbiBpZiB0aGVyZSdzIG9uZVxuICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKGN1cnJlbnRTZXNzaW9uICYmIGN1cnJlbnRTZXNzaW9uLnN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgc2Vzc2lvbi51cGRhdGVTZXNzaW9uKGN1cnJlbnRTZXNzaW9uLCB7IHN0YXR1czogJ2V4aXRlZCcgfSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuZW5kU2Vzc2lvbigpO1xuXG4gICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZVxuICAgIHNjb3BlLnNldFNlc3Npb24oc2Vzc2lvbiQxKTtcblxuICAgIHJldHVybiBzZXNzaW9uJDE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpZiBkZWZhdWx0IFBJSSBzaG91bGQgYmUgc2VudCB0byBTZW50cnkgYW5kIHByb3BhZ2F0ZWQgaW4gb3VyZ29pbmcgcmVxdWVzdHNcbiAgICogd2hlbiBUcmFjaW5nIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0b3AtbGV2ZWwgYGdldENsaWVudCgpLmdldE9wdGlvbnMoKS5zZW5kRGVmYXVsdFBpaWAgaW5zdGVhZC4gVGhpcyBmdW5jdGlvblxuICAgKiBvbmx5IHVubmVjZXNzYXJpbHkgaW5jcmVhc2VkIEFQSSBzdXJmYWNlIGJ1dCBvbmx5IHdyYXBwZWQgYWNjZXNzaW5nIHRoZSBvcHRpb24uXG4gICAqL1xuICAgc2hvdWxkU2VuZERlZmF1bHRQaWkoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTtcbiAgICBjb25zdCBvcHRpb25zID0gY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCk7XG4gICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnNlbmREZWZhdWx0UGlpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgY3VycmVudCBTZXNzaW9uIG9uIHRoZSBzY29wZVxuICAgKi9cbiAgIF9zZW5kU2Vzc2lvblVwZGF0ZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB7IHNjb3BlLCBjbGllbnQgfSA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKHNlc3Npb24gJiYgY2xpZW50ICYmIGNsaWVudC5jYXB0dXJlU2Vzc2lvbikge1xuICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBnbG9iYWwgZXh0ZW5zaW9uIG1ldGhvZCBhbmQgYmluZGluZyBjdXJyZW50IGluc3RhbmNlIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIEZ1bmN0aW9uIGxhY2tzIGVuZGluZyByZXR1cm4gc3RhdGVtZW50IGFuZCByZXR1cm4gdHlwZSBkb2VzIG5vdCBpbmNsdWRlICd1bmRlZmluZWQnLiB0cygyMzY2KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgX2NhbGxFeHRlbnNpb25NZXRob2QobWV0aG9kLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gICAgY29uc3Qgc2VudHJ5ID0gY2Fycmllci5fX1NFTlRSWV9fO1xuICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzZW50cnkuZXh0ZW5zaW9uc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKGBFeHRlbnNpb24gbWV0aG9kICR7bWV0aG9kfSBjb3VsZG4ndCBiZSBmb3VuZCwgZG9pbmcgbm90aGluZy5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBzaGltIHJlZ2lzdHJ5LlxuICpcbiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsXG4gKiBpdCBoYXMgYW4gb3B0aW9uYWwgYF9fU0VOVFJZX19gIHByb3BlcnR5LCB3aGljaCB0aGVuIGluIHR1cm4gcmVxdWlyZXMgdXMgdG8gYWx3YXlzIHBlcmZvcm0gYW4gdW5uZWNlc3NhcnkgY2hlY2tcbiAqIGF0IHRoZSBjYWxsLXNpdGUuIFdlIGFsd2F5cyBhY2Nlc3MgdGhlIGNhcnJpZXIgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCBzbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgYF9fU0VOVFJZX19gIGlzIHRoZXJlLlxuICoqL1xuZnVuY3Rpb24gZ2V0TWFpbkNhcnJpZXIoKSB7XG4gIHV0aWxzLkdMT0JBTF9PQkouX19TRU5UUllfXyA9IHV0aWxzLkdMT0JBTF9PQkouX19TRU5UUllfXyB8fCB7XG4gICAgZXh0ZW5zaW9uczoge30sXG4gICAgaHViOiB1bmRlZmluZWQsXG4gIH07XG4gIHJldHVybiB1dGlscy5HTE9CQUxfT0JKO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHRoZSBjdXJyZW50IG1haW4gaHViIHdpdGggdGhlIHBhc3NlZCBvbmUgb24gdGhlIGdsb2JhbCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgc2V0Q3VycmVudENsaWVudCgpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIG1ha2VNYWluKGh1Yikge1xuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGNvbnN0IG9sZEh1YiA9IGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbiAgc2V0SHViT25DYXJyaWVyKHJlZ2lzdHJ5LCBodWIpO1xuICByZXR1cm4gb2xkSHViO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgaHViIGluc3RhbmNlLlxuICpcbiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlXG4gKiBjb250YWlucyBhIG1vcmUgcmVjZW50IHZlcnNpb24sIGl0IHJlcGxhY2VzIHRoZSByZWdpc3RlcmVkIHZlcnNpb24uXG4gKiBPdGhlcndpc2UsIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBodWIgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHJlc3BlY3RpdmUgcmVwbGFjZW1lbnQgbWV0aG9kIGRpcmVjdGx5IGluc3RlYWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gZ2V0Q3VycmVudEh1YigpIHtcbiAgLy8gR2V0IG1haW4gY2FycmllciAoZ2xvYmFsIGZvciBldmVyeSBlbnZpcm9ubWVudClcbiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpO1xuXG4gIGlmIChyZWdpc3RyeS5fX1NFTlRSWV9fICYmIHJlZ2lzdHJ5Ll9fU0VOVFJZX18uYWNzKSB7XG4gICAgY29uc3QgaHViID0gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MuZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgaWYgKGh1Yikge1xuICAgICAgcmV0dXJuIGh1YjtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0XG4gIHJldHVybiBnZXRHbG9iYWxIdWIocmVnaXN0cnkpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBpc29sYXRpb24gc2NvcGUuXG4gKiBUaGUgaXNvbGF0aW9uIHNjb3BlIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZXhlY3Rpb24gY29udGV4dCxcbiAqIG1lYW5pbmcgdGhhdCBpdCB3aWxsIHJlbWFpbiBzdGFibGUgZm9yIHRoZSBzYW1lIEh1Yi5cbiAqL1xuZnVuY3Rpb24gZ2V0SXNvbGF0aW9uU2NvcGUoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmdldElzb2xhdGlvblNjb3BlKCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gZ2V0R2xvYmFsSHViKHJlZ2lzdHJ5ID0gZ2V0TWFpbkNhcnJpZXIoKSkge1xuICAvLyBJZiB0aGVyZSdzIG5vIGh1Yiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmVcblxuICBpZiAoXG4gICAgIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSkuaXNPbGRlclRoYW4oQVBJX1ZFUlNJT04pXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgbmV3IEh1YigpKTtcbiAgfVxuXG4gIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3RcbiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZSBQcml2YXRlIEFQSSB3aXRoIG5vIHNlbXZlciBndWFyYW50ZWVzIVxuICpcbiAqIElmIHRoZSBjYXJyaWVyIGRvZXMgbm90IGNvbnRhaW4gYSBodWIsIGEgbmV3IGh1YiBpcyBjcmVhdGVkIHdpdGggdGhlIGdsb2JhbCBodWIgY2xpZW50IGFuZCBzY29wZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBlbnN1cmVIdWJPbkNhcnJpZXIoY2FycmllciwgcGFyZW50ID0gZ2V0R2xvYmFsSHViKCkpIHtcbiAgLy8gSWYgdGhlcmUncyBubyBodWIgb24gY3VycmVudCBkb21haW4sIG9yIGl0J3MgYW4gb2xkIEFQSSwgYXNzaWduIGEgbmV3IG9uZVxuICBpZiAoXG4gICAgIWhhc0h1Yk9uQ2FycmllcihjYXJyaWVyKSB8fFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGdldEh1YkZyb21DYXJyaWVyKGNhcnJpZXIpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKVxuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBjbGllbnQgPSBwYXJlbnQuZ2V0Q2xpZW50KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3Qgc2NvcGUgPSBwYXJlbnQuZ2V0U2NvcGUoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBpc29sYXRpb25TY29wZSA9IHBhcmVudC5nZXRJc29sYXRpb25TY29wZSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHNldEh1Yk9uQ2FycmllcihjYXJyaWVyLCBuZXcgSHViKGNsaWVudCwgc2NvcGUuY2xvbmUoKSwgaXNvbGF0aW9uU2NvcGUuY2xvbmUoKSkpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGUgUHJpdmF0ZSBBUEkgd2l0aCBubyBzZW12ZXIgZ3VhcmFudGVlcyFcbiAqXG4gKiBTZXRzIHRoZSBnbG9iYWwgYXN5bmMgY29udGV4dCBzdHJhdGVneVxuICovXG5mdW5jdGlvbiBzZXRBc3luY0NvbnRleHRTdHJhdGVneShzdHJhdGVneSkge1xuICAvLyBHZXQgbWFpbiBjYXJyaWVyIChnbG9iYWwgZm9yIGV2ZXJ5IGVudmlyb25tZW50KVxuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG4gIHJlZ2lzdHJ5Ll9fU0VOVFJZX18gPSByZWdpc3RyeS5fX1NFTlRSWV9fIHx8IHt9O1xuICByZWdpc3RyeS5fX1NFTlRSWV9fLmFjcyA9IHN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHN1cHBsaWVkIGNhbGxiYWNrIGluIGl0cyBvd24gYXN5bmMgY29udGV4dC4gQXN5bmMgQ29udGV4dCBzdHJhdGVnaWVzIGFyZSBkZWZpbmVkIHBlciBTREsuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gaW4gaXRzIG93biBhc3luYyBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGFzeW5jIGNvbnRleHQgc3RyYXRlZ3lcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIHJ1bldpdGhBc3luY0NvbnRleHQoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG5cbiAgaWYgKHJlZ2lzdHJ5Ll9fU0VOVFJZX18gJiYgcmVnaXN0cnkuX19TRU5UUllfXy5hY3MpIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MucnVuV2l0aEFzeW5jQ29udGV4dChjYWxsYmFjaywgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBpZiB0aGVyZSB3YXMgbm8gc3RyYXRlZ3ksIGZhbGxiYWNrIHRvIGp1c3QgY2FsbGluZyB0aGUgY2FsbGJhY2tcbiAgcmV0dXJuIGNhbGxiYWNrKCk7XG59XG5cbi8qKlxuICogVGhpcyB3aWxsIHRlbGwgd2hldGhlciBhIGNhcnJpZXIgaGFzIGEgaHViIG9uIGl0IG9yIG5vdFxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGhhc0h1Yk9uQ2FycmllcihjYXJyaWVyKSB7XG4gIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTtcbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHtAbGluayBIdWJ9IGFuZCBhZGQgdG8gdGhlIHBhc3NlZCBvYmplY3Qgb25cbiAqIF9fU0VOVFJZX18uaHViLlxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKiBAaGlkZGVuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gZ2V0SHViRnJvbUNhcnJpZXIoY2Fycmllcikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgcmV0dXJuIHV0aWxzLmdldEdsb2JhbFNpbmdsZXRvbignaHViJywgKCkgPT4gbmV3IEh1YigpLCBjYXJyaWVyKTtcbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgc2V0IHBhc3NlZCB7QGxpbmsgSHVifSBvbiB0aGUgcGFzc2VkIG9iamVjdCdzIF9fU0VOVFJZX18uaHViIGF0dHJpYnV0ZVxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKiBAcGFyYW0gaHViIEh1YlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gc2V0SHViT25DYXJyaWVyKGNhcnJpZXIsIGh1Yikge1xuICBpZiAoIWNhcnJpZXIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgX19TRU5UUllfXyA9IChjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge30pO1xuICBfX1NFTlRSWV9fLmh1YiA9IGh1YjtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuQVBJX1ZFUlNJT04gPSBBUElfVkVSU0lPTjtcbmV4cG9ydHMuSHViID0gSHViO1xuZXhwb3J0cy5lbnN1cmVIdWJPbkNhcnJpZXIgPSBlbnN1cmVIdWJPbkNhcnJpZXI7XG5leHBvcnRzLmdldEN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViO1xuZXhwb3J0cy5nZXRIdWJGcm9tQ2FycmllciA9IGdldEh1YkZyb21DYXJyaWVyO1xuZXhwb3J0cy5nZXRJc29sYXRpb25TY29wZSA9IGdldElzb2xhdGlvblNjb3BlO1xuZXhwb3J0cy5nZXRNYWluQ2FycmllciA9IGdldE1haW5DYXJyaWVyO1xuZXhwb3J0cy5tYWtlTWFpbiA9IG1ha2VNYWluO1xuZXhwb3J0cy5ydW5XaXRoQXN5bmNDb250ZXh0ID0gcnVuV2l0aEFzeW5jQ29udGV4dDtcbmV4cG9ydHMuc2V0QXN5bmNDb250ZXh0U3RyYXRlZ3kgPSBzZXRBc3luY0NvbnRleHRTdHJhdGVneTtcbmV4cG9ydHMuc2V0SHViT25DYXJyaWVyID0gc2V0SHViT25DYXJyaWVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHViLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGh1YiA9IHJlcXVpcmUoJy4uL2h1Yi5qcycpO1xuXG4vKipcbiAqIEdyYWJzIGFjdGl2ZSB0cmFuc2FjdGlvbiBvZmYgc2NvcGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgWW91IHNob3VsZCBub3QgcmVseSBvbiB0aGUgdHJhbnNhY3Rpb24sIGJ1dCBqdXN0IHVzZSBgc3RhcnRTcGFuKClgIEFQSXMgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBnZXRBY3RpdmVUcmFuc2FjdGlvbihtYXliZUh1Yikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgaHViJDEgPSBtYXliZUh1YiB8fCBodWIuZ2V0Q3VycmVudEh1YigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3Qgc2NvcGUgPSBodWIkMS5nZXRTY29wZSgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgcmV0dXJuIHNjb3BlLmdldFRyYW5zYWN0aW9uKCkgO1xufVxuXG4vKipcbiAqIFRoZSBgZXh0cmFjdFRyYWNlcGFyZW50RGF0YWAgZnVuY3Rpb24gYW5kIGBUUkFDRVBBUkVOVF9SRUdFWFBgIGNvbnN0YW50IHVzZWRcbiAqIHRvIGJlIGRlY2xhcmVkIGluIHRoaXMgZmlsZS4gSXQgd2FzIGxhdGVyIG1vdmVkIGludG8gYEBzZW50cnkvdXRpbHNgIGFzIHBhcnQgb2YgYVxuICogbW92ZSB0byByZW1vdmUgYEBzZW50cnkvdHJhY2luZ2AgZGVwZW5kZW5jaWVzIGZyb20gYEBzZW50cnkvbm9kZWAgKGBleHRyYWN0VHJhY2VwYXJlbnREYXRhYFxuICogaXMgdGhlIG9ubHkgdHJhY2luZyBmdW5jdGlvbiB1c2VkIGJ5IGBAc2VudHJ5L25vZGVgKS5cbiAqXG4gKiBUaGVzZSBleHBvcnRzIGFyZSBrZXB0IGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5J3Mgc2FrZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvNDY0MiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBkZXByZWNhdGVkIEltcG9ydCB0aGlzIGZ1bmN0aW9uIGZyb20gYEBzZW50cnkvdXRpbHNgIGluc3RlYWRcbiAqL1xuY29uc3QgZXh0cmFjdFRyYWNlcGFyZW50RGF0YSA9IHV0aWxzLmV4dHJhY3RUcmFjZXBhcmVudERhdGE7XG5cbmV4cG9ydHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50ID0gdXRpbHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50O1xuZXhwb3J0cy5leHRyYWN0VHJhY2VwYXJlbnREYXRhID0gZXh0cmFjdFRyYWNlcGFyZW50RGF0YTtcbmV4cG9ydHMuZ2V0QWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3QgdXRpbHMkMSA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcblxubGV0IGVycm9yc0luc3RydW1lbnRlZCA9IGZhbHNlO1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgZ2xvYmFsIGVycm9yIGxpc3RlbmVyc1xuICovXG5mdW5jdGlvbiByZWdpc3RlckVycm9ySW5zdHJ1bWVudGF0aW9uKCkge1xuICBpZiAoZXJyb3JzSW5zdHJ1bWVudGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXJyb3JzSW5zdHJ1bWVudGVkID0gdHJ1ZTtcbiAgdXRpbHMuYWRkR2xvYmFsRXJyb3JJbnN0cnVtZW50YXRpb25IYW5kbGVyKGVycm9yQ2FsbGJhY2spO1xuICB1dGlscy5hZGRHbG9iYWxVbmhhbmRsZWRSZWplY3Rpb25JbnN0cnVtZW50YXRpb25IYW5kbGVyKGVycm9yQ2FsbGJhY2spO1xufVxuXG4vKipcbiAqIElmIGFuIGVycm9yIG9yIHVuaGFuZGxlZCBwcm9taXNlIG9jY3Vycywgd2UgbWFyayB0aGUgYWN0aXZlIHRyYW5zYWN0aW9uIGFzIGZhaWxlZFxuICovXG5mdW5jdGlvbiBlcnJvckNhbGxiYWNrKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSB1dGlscyQxLmdldEFjdGl2ZVRyYW5zYWN0aW9uKCk7XG4gIGlmIChhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgIGNvbnN0IHN0YXR1cyA9ICdpbnRlcm5hbF9lcnJvcic7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKGBbVHJhY2luZ10gVHJhbnNhY3Rpb246ICR7c3RhdHVzfSAtPiBHbG9iYWwgZXJyb3Igb2NjdXJlZGApO1xuICAgIGFjdGl2ZVRyYW5zYWN0aW9uLnNldFN0YXR1cyhzdGF0dXMpO1xuICB9XG59XG5cbi8vIFRoZSBmdW5jdGlvbiBuYW1lIHdpbGwgYmUgbG9zdCB3aGVuIGJ1bmRsaW5nIGJ1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhpcyBsaXN0ZW5lciBsYXRlciB0byBtYWludGFpbiB0aGVcbi8vIG5vZGUuanMgZGVmYXVsdCBleGl0IGJlaGF2aW91clxuZXJyb3JDYWxsYmFjay50YWcgPSAnc2VudHJ5X3RyYWNpbmdFcnJvckNhbGxiYWNrJztcblxuZXhwb3J0cy5yZWdpc3RlckVycm9ySW5zdHJ1bWVudGF0aW9uID0gcmVnaXN0ZXJFcnJvckluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqIFRoZSBzdGF0dXMgb2YgYW4gU3Bhbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc3RyaW5nIGxpdGVyYWxzIC0gaWYgeW91IHJlcXVpcmUgdHlwZSBjYXN0aW5nLCBjYXN0IHRvIFNwYW5TdGF0dXNUeXBlIHR5cGVcbiAqL1xuZXhwb3J0cy5TcGFuU3RhdHVzID0gdm9pZCAwOyAoZnVuY3Rpb24gKFNwYW5TdGF0dXMpIHtcbiAgLyoqIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi9cbiAgY29uc3QgT2sgPSAnb2snOyBTcGFuU3RhdHVzW1wiT2tcIl0gPSBPaztcbiAgLyoqIERlYWRsaW5lIGV4cGlyZWQgYmVmb3JlIG9wZXJhdGlvbiBjb3VsZCBjb21wbGV0ZS4gKi9cbiAgY29uc3QgRGVhZGxpbmVFeGNlZWRlZCA9ICdkZWFkbGluZV9leGNlZWRlZCc7IFNwYW5TdGF0dXNbXCJEZWFkbGluZUV4Y2VlZGVkXCJdID0gRGVhZGxpbmVFeGNlZWRlZDtcbiAgLyoqIDQwMSBVbmF1dGhvcml6ZWQgKGFjdHVhbGx5IGRvZXMgbWVhbiB1bmF1dGhlbnRpY2F0ZWQgYWNjb3JkaW5nIHRvIFJGQyA3MjM1KSAqL1xuICBjb25zdCBVbmF1dGhlbnRpY2F0ZWQgPSAndW5hdXRoZW50aWNhdGVkJzsgU3BhblN0YXR1c1tcIlVuYXV0aGVudGljYXRlZFwiXSA9IFVuYXV0aGVudGljYXRlZDtcbiAgLyoqIDQwMyBGb3JiaWRkZW4gKi9cbiAgY29uc3QgUGVybWlzc2lvbkRlbmllZCA9ICdwZXJtaXNzaW9uX2RlbmllZCc7IFNwYW5TdGF0dXNbXCJQZXJtaXNzaW9uRGVuaWVkXCJdID0gUGVybWlzc2lvbkRlbmllZDtcbiAgLyoqIDQwNCBOb3QgRm91bmQuIFNvbWUgcmVxdWVzdGVkIGVudGl0eSAoZmlsZSBvciBkaXJlY3RvcnkpIHdhcyBub3QgZm91bmQuICovXG4gIGNvbnN0IE5vdEZvdW5kID0gJ25vdF9mb3VuZCc7IFNwYW5TdGF0dXNbXCJOb3RGb3VuZFwiXSA9IE5vdEZvdW5kO1xuICAvKiogNDI5IFRvbyBNYW55IFJlcXVlc3RzICovXG4gIGNvbnN0IFJlc291cmNlRXhoYXVzdGVkID0gJ3Jlc291cmNlX2V4aGF1c3RlZCc7IFNwYW5TdGF0dXNbXCJSZXNvdXJjZUV4aGF1c3RlZFwiXSA9IFJlc291cmNlRXhoYXVzdGVkO1xuICAvKiogQ2xpZW50IHNwZWNpZmllZCBhbiBpbnZhbGlkIGFyZ3VtZW50LiA0eHguICovXG4gIGNvbnN0IEludmFsaWRBcmd1bWVudCA9ICdpbnZhbGlkX2FyZ3VtZW50JzsgU3BhblN0YXR1c1tcIkludmFsaWRBcmd1bWVudFwiXSA9IEludmFsaWRBcmd1bWVudDtcbiAgLyoqIDUwMSBOb3QgSW1wbGVtZW50ZWQgKi9cbiAgY29uc3QgVW5pbXBsZW1lbnRlZCA9ICd1bmltcGxlbWVudGVkJzsgU3BhblN0YXR1c1tcIlVuaW1wbGVtZW50ZWRcIl0gPSBVbmltcGxlbWVudGVkO1xuICAvKiogNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUgKi9cbiAgY29uc3QgVW5hdmFpbGFibGUgPSAndW5hdmFpbGFibGUnOyBTcGFuU3RhdHVzW1wiVW5hdmFpbGFibGVcIl0gPSBVbmF2YWlsYWJsZTtcbiAgLyoqIE90aGVyL2dlbmVyaWMgNXh4LiAqL1xuICBjb25zdCBJbnRlcm5hbEVycm9yID0gJ2ludGVybmFsX2Vycm9yJzsgU3BhblN0YXR1c1tcIkludGVybmFsRXJyb3JcIl0gPSBJbnRlcm5hbEVycm9yO1xuICAvKiogVW5rbm93bi4gQW55IG5vbi1zdGFuZGFyZCBIVFRQIHN0YXR1cyBjb2RlLiAqL1xuICBjb25zdCBVbmtub3duRXJyb3IgPSAndW5rbm93bl9lcnJvcic7IFNwYW5TdGF0dXNbXCJVbmtub3duRXJyb3JcIl0gPSBVbmtub3duRXJyb3I7XG4gIC8qKiBUaGUgb3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQgKHR5cGljYWxseSBieSB0aGUgdXNlcikuICovXG4gIGNvbnN0IENhbmNlbGxlZCA9ICdjYW5jZWxsZWQnOyBTcGFuU3RhdHVzW1wiQ2FuY2VsbGVkXCJdID0gQ2FuY2VsbGVkO1xuICAvKiogQWxyZWFkeSBleGlzdHMgKDQwOSkgKi9cbiAgY29uc3QgQWxyZWFkeUV4aXN0cyA9ICdhbHJlYWR5X2V4aXN0cyc7IFNwYW5TdGF0dXNbXCJBbHJlYWR5RXhpc3RzXCJdID0gQWxyZWFkeUV4aXN0cztcbiAgLyoqIE9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgKi9cbiAgY29uc3QgRmFpbGVkUHJlY29uZGl0aW9uID0gJ2ZhaWxlZF9wcmVjb25kaXRpb24nOyBTcGFuU3RhdHVzW1wiRmFpbGVkUHJlY29uZGl0aW9uXCJdID0gRmFpbGVkUHJlY29uZGl0aW9uO1xuICAvKiogVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCwgdHlwaWNhbGx5IGR1ZSB0byBhIGNvbmN1cnJlbmN5IGlzc3VlLiAqL1xuICBjb25zdCBBYm9ydGVkID0gJ2Fib3J0ZWQnOyBTcGFuU3RhdHVzW1wiQWJvcnRlZFwiXSA9IEFib3J0ZWQ7XG4gIC8qKiBPcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBwYXN0IHRoZSB2YWxpZCByYW5nZS4gKi9cbiAgY29uc3QgT3V0T2ZSYW5nZSA9ICdvdXRfb2ZfcmFuZ2UnOyBTcGFuU3RhdHVzW1wiT3V0T2ZSYW5nZVwiXSA9IE91dE9mUmFuZ2U7XG4gIC8qKiBVbnJlY292ZXJhYmxlIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uICovXG4gIGNvbnN0IERhdGFMb3NzID0gJ2RhdGFfbG9zcyc7IFNwYW5TdGF0dXNbXCJEYXRhTG9zc1wiXSA9IERhdGFMb3NzO1xufSkoZXhwb3J0cy5TcGFuU3RhdHVzIHx8IChleHBvcnRzLlNwYW5TdGF0dXMgPSB7fSkpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgSFRUUCBzdGF0dXMgY29kZSBpbnRvIGEge0BsaW5rIFNwYW5TdGF0dXNUeXBlfS5cbiAqXG4gKiBAcGFyYW0gaHR0cFN0YXR1cyBUaGUgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZS5cbiAqIEByZXR1cm5zIFRoZSBzcGFuIHN0YXR1cyBvciB1bmtub3duX2Vycm9yLlxuICovXG5mdW5jdGlvbiBnZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlKGh0dHBTdGF0dXMpIHtcbiAgaWYgKGh0dHBTdGF0dXMgPCA0MDAgJiYgaHR0cFN0YXR1cyA+PSAxMDApIHtcbiAgICByZXR1cm4gJ29rJztcbiAgfVxuXG4gIGlmIChodHRwU3RhdHVzID49IDQwMCAmJiBodHRwU3RhdHVzIDwgNTAwKSB7XG4gICAgc3dpdGNoIChodHRwU3RhdHVzKSB7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhlbnRpY2F0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAncGVybWlzc2lvbl9kZW5pZWQnO1xuICAgICAgY2FzZSA0MDQ6XG4gICAgICAgIHJldHVybiAnbm90X2ZvdW5kJztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ2FscmVhZHlfZXhpc3RzJztcbiAgICAgIGNhc2UgNDEzOlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZF9wcmVjb25kaXRpb24nO1xuICAgICAgY2FzZSA0Mjk6XG4gICAgICAgIHJldHVybiAncmVzb3VyY2VfZXhoYXVzdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnaW52YWxpZF9hcmd1bWVudCc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGh0dHBTdGF0dXMgPj0gNTAwICYmIGh0dHBTdGF0dXMgPCA2MDApIHtcbiAgICBzd2l0Y2ggKGh0dHBTdGF0dXMpIHtcbiAgICAgIGNhc2UgNTAxOlxuICAgICAgICByZXR1cm4gJ3VuaW1wbGVtZW50ZWQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAndW5hdmFpbGFibGUnO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAnZGVhZGxpbmVfZXhjZWVkZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdpbnRlcm5hbF9lcnJvcic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICd1bmtub3duX2Vycm9yJztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEhUVFAgc3RhdHVzIGNvZGUgaW50byBhIHtAbGluayBTcGFuU3RhdHVzVHlwZX0uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBzcGFuU3RhdHVzRnJvbUh0dHBDb2RlfSBpbnN0ZWFkLlxuICogVGhpcyBleHBvcnQgd2lsbCBiZSByZW1vdmVkIGluIHY4IGFzIHRoZSBzaWduYXR1cmUgY29udGFpbnMgYSB0eXBvLlxuICpcbiAqIEBwYXJhbSBodHRwU3RhdHVzIFRoZSBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlLlxuICogQHJldHVybnMgVGhlIHNwYW4gc3RhdHVzIG9yIHVua25vd25fZXJyb3IuXG4gKi9cbmNvbnN0IHNwYW5TdGF0dXNmcm9tSHR0cENvZGUgPSBnZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlO1xuXG4vKipcbiAqIFNldHMgdGhlIEh0dHAgc3RhdHVzIGF0dHJpYnV0ZXMgb24gdGhlIGN1cnJlbnQgc3BhbiBiYXNlZCBvbiB0aGUgaHR0cCBjb2RlLlxuICogQWRkaXRpb25hbGx5LCB0aGUgc3BhbidzIHN0YXR1cyBpcyB1cGRhdGVkLCBkZXBlbmRpbmcgb24gdGhlIGh0dHAgY29kZS5cbiAqL1xuZnVuY3Rpb24gc2V0SHR0cFN0YXR1cyhzcGFuLCBodHRwU3RhdHVzKSB7XG4gIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoZXNlIGNhbGxzXG4gIC8vIFJlbGF5IGRvZXMgbm90IHJlcXVpcmUgdXMgdG8gc2VuZCB0aGUgc3RhdHVzIGNvZGUgYXMgYSB0YWdcbiAgLy8gRm9yIG5vdywganVzdCBiZWNhdXNlIHVzZXJzIG1pZ2h0IGV4cGVjdCBpdCB0byBsYW5kIGFzIGEgdGFnIHdlIGtlZXAgc2VuZGluZyBpdC5cbiAgLy8gU2FtZSB3aXRoIGRhdGEuXG4gIC8vIEluIHY4LCB3ZSByZXBsYWNlIGJvdGgsIHNpbXBseSB3aXRoXG4gIC8vIHNwYW4uc2V0QXR0cmlidXRlKCdodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlJywgaHR0cFN0YXR1cyk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHNwYW4uc2V0VGFnKCdodHRwLnN0YXR1c19jb2RlJywgU3RyaW5nKGh0dHBTdGF0dXMpKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHNwYW4uc2V0RGF0YSgnaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZScsIGh0dHBTdGF0dXMpO1xuXG4gIGNvbnN0IHNwYW5TdGF0dXMgPSBnZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlKGh0dHBTdGF0dXMpO1xuICBpZiAoc3BhblN0YXR1cyAhPT0gJ3Vua25vd25fZXJyb3InKSB7XG4gICAgc3Bhbi5zZXRTdGF0dXMoc3BhblN0YXR1cyk7XG4gIH1cbn1cblxuZXhwb3J0cy5nZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlID0gZ2V0U3BhblN0YXR1c0Zyb21IdHRwQ29kZTtcbmV4cG9ydHMuc2V0SHR0cFN0YXR1cyA9IHNldEh0dHBTdGF0dXM7XG5leHBvcnRzLnNwYW5TdGF0dXNmcm9tSHR0cENvZGUgPSBzcGFuU3RhdHVzZnJvbUh0dHBDb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3BhbnN0YXR1cy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbi8qKlxuICogV3JhcCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggZXJyb3IgaGFuZGxpbmcuXG4gKiBJZiBhbiBlcnJvciBpcyB0aHJvd24sIGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgb25FcnJvcmAgY2FsbGJhY2sgYW5kIHJlLXRocm93bi5cbiAqXG4gKiBJZiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBhIHByb21pc2UsIGl0IHdpbGwgYmUgaGFuZGxlZCB3aXRoIGBtYXliZUhhbmRsZVByb21pc2VSZWplY3Rpb25gLlxuICpcbiAqIElmIGFuIGBvbkZpbmFsbHlgIGNhbGxiYWNrIGlzIHByb3ZpZGVkLCB0aGlzIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGNhbGxiYWNrIGhhcyBmaW5pc2hlZFxuICogLSBzbyBpZiBpdCByZXR1cm5zIGEgcHJvbWlzZSwgb25jZSB0aGUgcHJvbWlzZSByZXNvbHZlZC9yZWplY3RlZCxcbiAqIGVsc2Ugb25jZSB0aGUgY2FsbGJhY2sgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZy5cbiAqIFRoZSBgb25GaW5hbGx5YCBjYWxsYmFjayB3aWxsIF9hbHdheXNfIGJlIGNhbGxlZCwgbm8gbWF0dGVyIGlmIGFuIGVycm9yIHdhcyB0aHJvd24gb3Igbm90LlxuICovXG5mdW5jdGlvbiBoYW5kbGVDYWxsYmFja0Vycm9yc1xuXG4oXG4gIGZuLFxuICBvbkVycm9yLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uRmluYWxseSA9ICgpID0+IHt9LFxuKSB7XG4gIGxldCBtYXliZVByb21pc2VSZXN1bHQ7XG4gIHRyeSB7XG4gICAgbWF5YmVQcm9taXNlUmVzdWx0ID0gZm4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIG9uRXJyb3IoZSk7XG4gICAgb25GaW5hbGx5KCk7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiBtYXliZUhhbmRsZVByb21pc2VSZWplY3Rpb24obWF5YmVQcm9taXNlUmVzdWx0LCBvbkVycm9yLCBvbkZpbmFsbHkpO1xufVxuXG4vKipcbiAqIE1heWJlIGhhbmRsZSBhIHByb21pc2UgcmVqZWN0aW9uLlxuICogVGhpcyBleHBlY3RzIHRvIGJlIGdpdmVuIGEgdmFsdWUgdGhhdCBfbWF5XyBiZSBhIHByb21pc2UsIG9yIGFueSBvdGhlciB2YWx1ZS5cbiAqIElmIGl0IGlzIGEgcHJvbWlzZSwgYW5kIGl0IHJlamVjdHMsIGl0IHdpbGwgY2FsbCB0aGUgYG9uRXJyb3JgIGNhbGxiYWNrLlxuICogT3RoZXIgdGhhbiB0aGlzLCBpdCB3aWxsIGdlbmVyYWxseSByZXR1cm4gdGhlIGdpdmVuIHZhbHVlIGFzLWlzLlxuICovXG5mdW5jdGlvbiBtYXliZUhhbmRsZVByb21pc2VSZWplY3Rpb24oXG4gIHZhbHVlLFxuICBvbkVycm9yLFxuICBvbkZpbmFsbHksXG4pIHtcbiAgaWYgKHV0aWxzLmlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHRoZSBpc1RoZW5hYmxlIGNoZWNrIHJldHVybnMgdGhlIFwid3JvbmdcIiB0eXBlIGhlcmVcbiAgICByZXR1cm4gdmFsdWUudGhlbihcbiAgICAgIHJlcyA9PiB7XG4gICAgICAgIG9uRmluYWxseSgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICAgIGUgPT4ge1xuICAgICAgICBvbkVycm9yKGUpO1xuICAgICAgICBvbkZpbmFsbHkoKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIG9uRmluYWxseSgpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydHMuaGFuZGxlQ2FsbGJhY2tFcnJvcnMgPSBoYW5kbGVDYWxsYmFja0Vycm9ycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZUNhbGxiYWNrRXJyb3JzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBleHBvcnRzJDEgPSByZXF1aXJlKCcuLi9leHBvcnRzLmpzJyk7XG5cbi8vIFRyZWVzaGFrYWJsZSBndWFyZCB0byByZW1vdmUgYWxsIGNvZGUgcmVsYXRlZCB0byB0cmFjaW5nXG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0cmFjaW5nIGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICpcbiAqIFRyYWNpbmcgaXMgZW5hYmxlZCB3aGVuIGF0IGxlYXN0IG9uZSBvZiBgdHJhY2VzU2FtcGxlUmF0ZWAgYW5kIGB0cmFjZXNTYW1wbGVyYCBpcyBkZWZpbmVkIGluIHRoZSBTREsgY29uZmlnLlxuICovXG5mdW5jdGlvbiBoYXNUcmFjaW5nRW5hYmxlZChcbiAgbWF5YmVPcHRpb25zLFxuKSB7XG4gIGlmICh0eXBlb2YgX19TRU5UUllfVFJBQ0lOR19fID09PSAnYm9vbGVhbicgJiYgIV9fU0VOVFJZX1RSQUNJTkdfXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IGV4cG9ydHMkMS5nZXRDbGllbnQoKTtcbiAgY29uc3Qgb3B0aW9ucyA9IG1heWJlT3B0aW9ucyB8fCAoY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCkpO1xuICByZXR1cm4gISFvcHRpb25zICYmIChvcHRpb25zLmVuYWJsZVRyYWNpbmcgfHwgJ3RyYWNlc1NhbXBsZVJhdGUnIGluIG9wdGlvbnMgfHwgJ3RyYWNlc1NhbXBsZXInIGluIG9wdGlvbnMpO1xufVxuXG5leHBvcnRzLmhhc1RyYWNpbmdFbmFibGVkID0gaGFzVHJhY2luZ0VuYWJsZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXNUcmFjaW5nRW5hYmxlZC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGh1YiA9IHJlcXVpcmUoJy4uL2h1Yi5qcycpO1xuY29uc3Qgc3BhblV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvc3BhblV0aWxzLmpzJyk7XG5yZXF1aXJlKCcuL2Vycm9ycy5qcycpO1xucmVxdWlyZSgnLi9zcGFuc3RhdHVzLmpzJyk7XG5jb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gcmVxdWlyZSgnLi9keW5hbWljU2FtcGxpbmdDb250ZXh0LmpzJyk7XG5jb25zdCBleHBvcnRzJDEgPSByZXF1aXJlKCcuLi9leHBvcnRzLmpzJyk7XG5jb25zdCBoYW5kbGVDYWxsYmFja0Vycm9ycyA9IHJlcXVpcmUoJy4uL3V0aWxzL2hhbmRsZUNhbGxiYWNrRXJyb3JzLmpzJyk7XG5jb25zdCBoYXNUcmFjaW5nRW5hYmxlZCA9IHJlcXVpcmUoJy4uL3V0aWxzL2hhc1RyYWNpbmdFbmFibGVkLmpzJyk7XG5cbi8qKlxuICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJhbnNhY3Rpb24vc3BhbiBhbmQgZmluaXNoZXMgdGhlIHNwYW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIGlzIGRvbmUuXG4gKlxuICogTm90ZSB0aGF0IGlmIHlvdSBoYXZlIG5vdCBlbmFibGVkIHRyYWNpbmcgZXh0ZW5zaW9ucyB2aWEgYGFkZFRyYWNpbmdFeHRlbnNpb25zYFxuICogb3IgeW91IGRpZG4ndCBzZXQgYHRyYWNlc1NhbXBsZVJhdGVgLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGdlbmVyYXRlIHNwYW5zXG4gKiBhbmQgdGhlIGBzcGFuYCByZXR1cm5lZCBmcm9tIHRoZSBjYWxsYmFjayB3aWxsIGJlIHVuZGVmaW5lZC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIHVzZWQgaW50ZXJuYWxseSBhbmQgbWF5IGJyZWFrIGF0IGFueSB0aW1lLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwcml2YXRlXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW5gIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIHRyYWNlKFxuICBjb250ZXh0LFxuICBjYWxsYmFjayxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkVycm9yID0gKCkgPT4ge30sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgYWZ0ZXJGaW5pc2ggPSAoKSA9PiB7fSxcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgaHViJDEgPSBodWIuZ2V0Q3VycmVudEh1YigpO1xuICBjb25zdCBzY29wZSA9IGV4cG9ydHMkMS5nZXRDdXJyZW50U2NvcGUoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZS5nZXRTcGFuKCk7XG5cbiAgY29uc3Qgc3BhbkNvbnRleHQgPSBub3JtYWxpemVDb250ZXh0KGNvbnRleHQpO1xuICBjb25zdCBhY3RpdmVTcGFuID0gY3JlYXRlQ2hpbGRTcGFuT3JUcmFuc2FjdGlvbihodWIkMSwge1xuICAgIHBhcmVudFNwYW4sXG4gICAgc3BhbkNvbnRleHQsXG4gICAgZm9yY2VUcmFuc2FjdGlvbjogZmFsc2UsXG4gICAgc2NvcGUsXG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBzY29wZS5zZXRTcGFuKGFjdGl2ZVNwYW4pO1xuXG4gIHJldHVybiBoYW5kbGVDYWxsYmFja0Vycm9ycy5oYW5kbGVDYWxsYmFja0Vycm9ycyhcbiAgICAoKSA9PiBjYWxsYmFjayhhY3RpdmVTcGFuKSxcbiAgICBlcnJvciA9PiB7XG4gICAgICBhY3RpdmVTcGFuICYmIGFjdGl2ZVNwYW4uc2V0U3RhdHVzKCdpbnRlcm5hbF9lcnJvcicpO1xuICAgICAgb25FcnJvcihlcnJvciwgYWN0aXZlU3Bhbik7XG4gICAgfSxcbiAgICAoKSA9PiB7XG4gICAgICBhY3RpdmVTcGFuICYmIGFjdGl2ZVNwYW4uZW5kKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHNjb3BlLnNldFNwYW4ocGFyZW50U3Bhbik7XG4gICAgICBhZnRlckZpbmlzaCgpO1xuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJhbnNhY3Rpb24vc3BhbiBhbmQgZmluaXNoZXMgdGhlIHNwYW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIGlzIGRvbmUuXG4gKiBUaGUgY3JlYXRlZCBzcGFuIGlzIHRoZSBhY3RpdmUgc3BhbiBhbmQgd2lsbCBiZSB1c2VkIGFzIHBhcmVudCBieSBvdGhlciBzcGFucyBjcmVhdGVkIGluc2lkZSB0aGUgZnVuY3Rpb25cbiAqIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhIGBTZW50cnkuZ2V0U3BhbigpYCwgYXMgbG9uZyBhcyB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgd2hpbGUgdGhlIHNjb3BlIGlzIGFjdGl2ZS5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBzcGFuIHRoYXQgaXMgbm90IHNldCBhcyBhY3RpdmUsIHVzZSB7QGxpbmsgc3RhcnRJbmFjdGl2ZVNwYW59LlxuICpcbiAqIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSBub3QgZW5hYmxlZCB0cmFjaW5nIGV4dGVuc2lvbnMgdmlhIGBhZGRUcmFjaW5nRXh0ZW5zaW9uc2BcbiAqIG9yIHlvdSBkaWRuJ3Qgc2V0IGB0cmFjZXNTYW1wbGVSYXRlYCwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBnZW5lcmF0ZSBzcGFuc1xuICogYW5kIHRoZSBgc3BhbmAgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbGJhY2sgd2lsbCBiZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U3Bhbihjb250ZXh0LCBjYWxsYmFjaykge1xuICBjb25zdCBzcGFuQ29udGV4dCA9IG5vcm1hbGl6ZUNvbnRleHQoY29udGV4dCk7XG5cbiAgcmV0dXJuIGh1Yi5ydW5XaXRoQXN5bmNDb250ZXh0KCgpID0+IHtcbiAgICByZXR1cm4gZXhwb3J0cyQxLndpdGhTY29wZShjb250ZXh0LnNjb3BlLCBzY29wZSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvbnN0IGh1YiQxID0gaHViLmdldEN1cnJlbnRIdWIoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgY29uc3QgcGFyZW50U3BhbiA9IHNjb3BlLmdldFNwYW4oKTtcblxuICAgICAgY29uc3Qgc2hvdWxkU2tpcFNwYW4gPSBjb250ZXh0Lm9ubHlJZlBhcmVudCAmJiAhcGFyZW50U3BhbjtcbiAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBzaG91bGRTa2lwU3BhblxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IGNyZWF0ZUNoaWxkU3Bhbk9yVHJhbnNhY3Rpb24oaHViJDEsIHtcbiAgICAgICAgICAgIHBhcmVudFNwYW4sXG4gICAgICAgICAgICBzcGFuQ29udGV4dCxcbiAgICAgICAgICAgIGZvcmNlVHJhbnNhY3Rpb246IGNvbnRleHQuZm9yY2VUcmFuc2FjdGlvbixcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaGFuZGxlQ2FsbGJhY2tFcnJvcnMuaGFuZGxlQ2FsbGJhY2tFcnJvcnMoXG4gICAgICAgICgpID0+IGNhbGxiYWNrKGFjdGl2ZVNwYW4pLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIHNwYW4gc3RhdHVzIGlmIGl0IGhhc24ndCBiZWVuIGNoYW5nZWQgeWV0XG4gICAgICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBzcGFuVXRpbHMuc3BhblRvSlNPTihhY3RpdmVTcGFuKTtcbiAgICAgICAgICAgIGlmICghc3RhdHVzIHx8IHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgICBhY3RpdmVTcGFuLnNldFN0YXR1cygnaW50ZXJuYWxfZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IGFjdGl2ZVNwYW4gJiYgYWN0aXZlU3Bhbi5lbmQoKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgc3RhcnRTcGFufSBpbnN0ZWFkLlxuICovXG5jb25zdCBzdGFydEFjdGl2ZVNwYW4gPSBzdGFydFNwYW47XG5cbi8qKlxuICogU2ltaWxhciB0byBgU2VudHJ5LnN0YXJ0U3BhbmAuIFdyYXBzIGEgZnVuY3Rpb24gd2l0aCBhIHRyYW5zYWN0aW9uL3NwYW4sIGJ1dCBkb2VzIG5vdCBmaW5pc2ggdGhlIHNwYW5cbiAqIGFmdGVyIHRoZSBmdW5jdGlvbiBpcyBkb25lIGF1dG9tYXRpY2FsbHkuIFlvdSdsbCBoYXZlIHRvIGNhbGwgYHNwYW4uZW5kKClgIG1hbnVhbGx5LlxuICpcbiAqIFRoZSBjcmVhdGVkIHNwYW4gaXMgdGhlIGFjdGl2ZSBzcGFuIGFuZCB3aWxsIGJlIHVzZWQgYXMgcGFyZW50IGJ5IG90aGVyIHNwYW5zIGNyZWF0ZWQgaW5zaWRlIHRoZSBmdW5jdGlvblxuICogYW5kIGNhbiBiZSBhY2Nlc3NlZCB2aWEgYFNlbnRyeS5nZXRBY3RpdmVTcGFuKClgLCBhcyBsb25nIGFzIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aGlsZSB0aGUgc2NvcGUgaXMgYWN0aXZlLlxuICpcbiAqIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSBub3QgZW5hYmxlZCB0cmFjaW5nIGV4dGVuc2lvbnMgdmlhIGBhZGRUcmFjaW5nRXh0ZW5zaW9uc2BcbiAqIG9yIHlvdSBkaWRuJ3Qgc2V0IGB0cmFjZXNTYW1wbGVSYXRlYCwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBnZW5lcmF0ZSBzcGFuc1xuICogYW5kIHRoZSBgc3BhbmAgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbGJhY2sgd2lsbCBiZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U3Bhbk1hbnVhbChcbiAgY29udGV4dCxcbiAgY2FsbGJhY2ssXG4pIHtcbiAgY29uc3Qgc3BhbkNvbnRleHQgPSBub3JtYWxpemVDb250ZXh0KGNvbnRleHQpO1xuXG4gIHJldHVybiBodWIucnVuV2l0aEFzeW5jQ29udGV4dCgoKSA9PiB7XG4gICAgcmV0dXJuIGV4cG9ydHMkMS53aXRoU2NvcGUoY29udGV4dC5zY29wZSwgc2NvcGUgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCBodWIkMSA9IGh1Yi5nZXRDdXJyZW50SHViKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZS5nZXRTcGFuKCk7XG5cbiAgICAgIGNvbnN0IHNob3VsZFNraXBTcGFuID0gY29udGV4dC5vbmx5SWZQYXJlbnQgJiYgIXBhcmVudFNwYW47XG4gICAgICBjb25zdCBhY3RpdmVTcGFuID0gc2hvdWxkU2tpcFNwYW5cbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBjcmVhdGVDaGlsZFNwYW5PclRyYW5zYWN0aW9uKGh1YiQxLCB7XG4gICAgICAgICAgICBwYXJlbnRTcGFuLFxuICAgICAgICAgICAgc3BhbkNvbnRleHQsXG4gICAgICAgICAgICBmb3JjZVRyYW5zYWN0aW9uOiBjb250ZXh0LmZvcmNlVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gZmluaXNoQW5kU2V0U3BhbigpIHtcbiAgICAgICAgYWN0aXZlU3BhbiAmJiBhY3RpdmVTcGFuLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFuZGxlQ2FsbGJhY2tFcnJvcnMuaGFuZGxlQ2FsbGJhY2tFcnJvcnMoXG4gICAgICAgICgpID0+IGNhbGxiYWNrKGFjdGl2ZVNwYW4sIGZpbmlzaEFuZFNldFNwYW4pLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIHNwYW4gc3RhdHVzIGlmIGl0IGhhc24ndCBiZWVuIGNoYW5nZWQgeWV0LCBhbmQgdGhlIHNwYW4gaXMgbm90IHlldCBmaW5pc2hlZFxuICAgICAgICAgIGlmIChhY3RpdmVTcGFuICYmIGFjdGl2ZVNwYW4uaXNSZWNvcmRpbmcoKSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHNwYW5VdGlscy5zcGFuVG9KU09OKGFjdGl2ZVNwYW4pO1xuICAgICAgICAgICAgaWYgKCFzdGF0dXMgfHwgc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICAgIGFjdGl2ZVNwYW4uc2V0U3RhdHVzKCdpbnRlcm5hbF9lcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFuLiBUaGlzIHNwYW4gaXMgbm90IHNldCBhcyBhY3RpdmUsIHNvIHdpbGwgbm90IGdldCBhdXRvbWF0aWMgaW5zdHJ1bWVudGF0aW9uIHNwYW5zXG4gKiBhcyBjaGlsZHJlbiBvciBiZSBhYmxlIHRvIGJlIGFjY2Vzc2VkIHZpYSBgU2VudHJ5LmdldFNwYW4oKWAuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgc3BhbiB0aGF0IGlzIHNldCBhcyBhY3RpdmUsIHVzZSB7QGxpbmsgc3RhcnRTcGFufS5cbiAqXG4gKiBOb3RlIHRoYXQgaWYgeW91IGhhdmUgbm90IGVuYWJsZWQgdHJhY2luZyBleHRlbnNpb25zIHZpYSBgYWRkVHJhY2luZ0V4dGVuc2lvbnNgXG4gKiBvciB5b3UgZGlkbid0IHNldCBgdHJhY2VzU2FtcGxlUmF0ZWAgb3IgYHRyYWNlc1NhbXBsZXJgLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGdlbmVyYXRlIHNwYW5zXG4gKiBhbmQgdGhlIGBzcGFuYCByZXR1cm5lZCBmcm9tIHRoZSBjYWxsYmFjayB3aWxsIGJlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gc3RhcnRJbmFjdGl2ZVNwYW4oY29udGV4dCkge1xuICBpZiAoIWhhc1RyYWNpbmdFbmFibGVkLmhhc1RyYWNpbmdFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc3BhbkNvbnRleHQgPSBub3JtYWxpemVDb250ZXh0KGNvbnRleHQpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgaHViJDEgPSBodWIuZ2V0Q3VycmVudEh1YigpO1xuICBjb25zdCBwYXJlbnRTcGFuID0gY29udGV4dC5zY29wZVxuICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb250ZXh0LnNjb3BlLmdldFNwYW4oKVxuICAgIDogZ2V0QWN0aXZlU3BhbigpO1xuXG4gIGNvbnN0IHNob3VsZFNraXBTcGFuID0gY29udGV4dC5vbmx5SWZQYXJlbnQgJiYgIXBhcmVudFNwYW47XG5cbiAgaWYgKHNob3VsZFNraXBTcGFuKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHNjb3BlID0gY29udGV4dC5zY29wZSB8fCBleHBvcnRzJDEuZ2V0Q3VycmVudFNjb3BlKCk7XG5cbiAgLy8gRXZlbiB0aG91Z2ggd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBtYWtlIHRoaXMgc3BhbiBhY3RpdmUgb24gdGhlIGN1cnJlbnQgc2NvcGUsXG4gIC8vIHdlIG5lZWQgdG8gbWFrZSBpdCBhY3RpdmUgb24gYSB0ZW1wb3Jhcnkgc2NvcGUgdGhhdCB3ZSB1c2UgZm9yIGV2ZW50IHByb2Nlc3NpbmdcbiAgLy8gYXMgb3RoZXJ3aXNlLCBpdCB3b24ndCBwaWNrIHRoZSBjb3JyZWN0IHNwYW4gZm9yIHRoZSBldmVudCB3aGVuIHByb2Nlc3NpbmcgaXRcbiAgY29uc3QgdGVtcG9yYXJ5U2NvcGUgPSAoc2NvcGUgKS5jbG9uZSgpO1xuXG4gIHJldHVybiBjcmVhdGVDaGlsZFNwYW5PclRyYW5zYWN0aW9uKGh1YiQxLCB7XG4gICAgcGFyZW50U3BhbixcbiAgICBzcGFuQ29udGV4dCxcbiAgICBmb3JjZVRyYW5zYWN0aW9uOiBjb250ZXh0LmZvcmNlVHJhbnNhY3Rpb24sXG4gICAgc2NvcGU6IHRlbXBvcmFyeVNjb3BlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNwYW4uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gZXhwb3J0cyQxLmdldEN1cnJlbnRTY29wZSgpLmdldFNwYW4oKTtcbn1cblxuY29uc3QgY29udGludWVUcmFjZSA9IChcbiAge1xuICAgIHNlbnRyeVRyYWNlLFxuICAgIGJhZ2dhZ2UsXG4gIH1cblxuLFxuICBjYWxsYmFjayxcbikgPT4ge1xuICAvLyBUT0RPKHY4KTogQ2hhbmdlIHRoaXMgZnVuY3Rpb24gc28gaXQgZG9lc24ndCBkbyBhbnl0aGluZyBiZXNpZGVzIHNldHRpbmcgdGhlIHByb3BhZ2F0aW9uIGNvbnRleHQgb24gdGhlIGN1cnJlbnQgc2NvcGU6XG4gIC8qXG4gICAgcmV0dXJuIHdpdGhTY29wZSgoc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IHByb3BhZ2F0aW9uQ29udGV4dCA9IHByb3BhZ2F0aW9uQ29udGV4dEZyb21IZWFkZXJzKHNlbnRyeVRyYWNlLCBiYWdnYWdlKTtcbiAgICAgIHNjb3BlLnNldFByb3BhZ2F0aW9uQ29udGV4dChwcm9wYWdhdGlvbkNvbnRleHQpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfSlcbiAgKi9cblxuICBjb25zdCBjdXJyZW50U2NvcGUgPSBleHBvcnRzJDEuZ2V0Q3VycmVudFNjb3BlKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IHsgdHJhY2VwYXJlbnREYXRhLCBkeW5hbWljU2FtcGxpbmdDb250ZXh0LCBwcm9wYWdhdGlvbkNvbnRleHQgfSA9IHV0aWxzLnRyYWNpbmdDb250ZXh0RnJvbUhlYWRlcnMoXG4gICAgc2VudHJ5VHJhY2UsXG4gICAgYmFnZ2FnZSxcbiAgKTtcblxuICBjdXJyZW50U2NvcGUuc2V0UHJvcGFnYXRpb25Db250ZXh0KHByb3BhZ2F0aW9uQ29udGV4dCk7XG5cbiAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdHJhY2VwYXJlbnREYXRhKSB7XG4gICAgdXRpbHMubG9nZ2VyLmxvZyhgW1RyYWNpbmddIENvbnRpbnVpbmcgdHJhY2UgJHt0cmFjZXBhcmVudERhdGEudHJhY2VJZH0uYCk7XG4gIH1cblxuICBjb25zdCB0cmFuc2FjdGlvbkNvbnRleHQgPSB7XG4gICAgLi4udHJhY2VwYXJlbnREYXRhLFxuICAgIG1ldGFkYXRhOiB1dGlscy5kcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0LFxuICAgIH0pLFxuICB9O1xuXG4gIGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb25Db250ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGh1Yi5ydW5XaXRoQXN5bmNDb250ZXh0KCgpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2sodHJhbnNhY3Rpb25Db250ZXh0KTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDaGlsZFNwYW5PclRyYW5zYWN0aW9uKFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaHViJDEsXG4gIHtcbiAgICBwYXJlbnRTcGFuLFxuICAgIHNwYW5Db250ZXh0LFxuICAgIGZvcmNlVHJhbnNhY3Rpb24sXG4gICAgc2NvcGUsXG4gIH1cblxuLFxuKSB7XG4gIGlmICghaGFzVHJhY2luZ0VuYWJsZWQuaGFzVHJhY2luZ0VuYWJsZWQoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBpc29sYXRpb25TY29wZSA9IGh1Yi5nZXRJc29sYXRpb25TY29wZSgpO1xuXG4gIGxldCBzcGFuO1xuICBpZiAocGFyZW50U3BhbiAmJiAhZm9yY2VUcmFuc2FjdGlvbikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHNwYW4gPSBwYXJlbnRTcGFuLnN0YXJ0Q2hpbGQoc3BhbkNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHBhcmVudFNwYW4pIHtcbiAgICAvLyBJZiB3ZSBmb3JjZWQgYSB0cmFuc2FjdGlvbiBidXQgaGF2ZSBhIHBhcmVudCBzcGFuLCBtYWtlIHN1cmUgdG8gY29udGludWUgZnJvbSB0aGUgcGFyZW50IHNwYW4sIG5vdCB0aGUgc2NvcGVcbiAgICBjb25zdCBkc2MgPSBkeW5hbWljU2FtcGxpbmdDb250ZXh0LmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihwYXJlbnRTcGFuKTtcbiAgICBjb25zdCB7IHRyYWNlSWQsIHNwYW5JZDogcGFyZW50U3BhbklkIH0gPSBwYXJlbnRTcGFuLnNwYW5Db250ZXh0KCk7XG4gICAgY29uc3Qgc2FtcGxlZCA9IHNwYW5VdGlscy5zcGFuSXNTYW1wbGVkKHBhcmVudFNwYW4pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgc3BhbiA9IGh1YiQxLnN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgdHJhY2VJZCxcbiAgICAgIHBhcmVudFNwYW5JZCxcbiAgICAgIHBhcmVudFNhbXBsZWQ6IHNhbXBsZWQsXG4gICAgICAuLi5zcGFuQ29udGV4dCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQ6IGRzYyxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIC4uLnNwYW5Db250ZXh0Lm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHRyYWNlSWQsIGRzYywgcGFyZW50U3BhbklkLCBzYW1wbGVkIH0gPSB7XG4gICAgICAuLi5pc29sYXRpb25TY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKSxcbiAgICAgIC4uLnNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpLFxuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBzcGFuID0gaHViJDEuc3RhcnRUcmFuc2FjdGlvbih7XG4gICAgICB0cmFjZUlkLFxuICAgICAgcGFyZW50U3BhbklkLFxuICAgICAgcGFyZW50U2FtcGxlZDogc2FtcGxlZCxcbiAgICAgIC4uLnNwYW5Db250ZXh0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZHluYW1pY1NhbXBsaW5nQ29udGV4dDogZHNjLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgLi4uc3BhbkNvbnRleHQubWV0YWRhdGEsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gV2UgYWx3YXlzIHNldCB0aGlzIGFzIGFjdGl2ZSBzcGFuIG9uIHRoZSBzY29wZVxuICAvLyBJbiB0aGUgY2FzZSBvZiB0aGlzIGJlaW5nIGFuIGluYWN0aXZlIHNwYW4sIHdlIGVuc3VyZSB0byBwYXNzIGEgZGV0YWNoZWQgc2NvcGUgaW4gaGVyZSBpbiB0aGUgZmlyc3QgcGxhY2VcbiAgLy8gQnV0IGJ5IGhhdmluZyB0aGlzIGhlcmUsIHdlIGNhbiBlbnN1cmUgdGhhdCB0aGUgbG9va3VwIHRocm91Z2ggYGdldENhcHR1cmVkU2NvcGVzT25TcGFuYCByZXN1bHRzIGluIHRoZSBjb3JyZWN0IHNjb3BlICYgc3BhbiBjb21ib1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgc2NvcGUuc2V0U3BhbihzcGFuKTtcblxuICBzZXRDYXB0dXJlZFNjb3Blc09uU3BhbihzcGFuLCBzY29wZSwgaXNvbGF0aW9uU2NvcGUpO1xuXG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIFRoaXMgY29udmVydHMgU3RhcnRTcGFuT3B0aW9ucyB0byBUcmFuc2FjdGlvbkNvbnRleHQuXG4gKiBGb3IgdGhlIG1vc3QgcGFydCAoZm9yIG5vdykgd2UgYWNjZXB0IHRoZSBzYW1lIG9wdGlvbnMsXG4gKiBidXQgc29tZSBvZiB0aGVtIG5lZWQgdG8gYmUgdHJhbnNmb3JtZWQuXG4gKlxuICogRXZlbnR1YWxseSB0aGUgU3RhcnRTcGFuT3B0aW9ucyB3aWxsIGJlIG1vcmUgYWxpZ25lZCB3aXRoIE9wZW5UZWxlbWV0cnkuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnRleHQoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5zdGFydFRpbWUpIHtcbiAgICBjb25zdCBjdHggPSB7IC4uLmNvbnRleHQgfTtcbiAgICBjdHguc3RhcnRUaW1lc3RhbXAgPSBzcGFuVXRpbHMuc3BhblRpbWVJbnB1dFRvU2Vjb25kcyhjb250ZXh0LnN0YXJ0VGltZSk7XG4gICAgZGVsZXRlIGN0eC5zdGFydFRpbWU7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5jb25zdCBTQ09QRV9PTl9TVEFSVF9TUEFOX0ZJRUxEID0gJ19zZW50cnlTY29wZSc7XG5jb25zdCBJU09MQVRJT05fU0NPUEVfT05fU1RBUlRfU1BBTl9GSUVMRCA9ICdfc2VudHJ5SXNvbGF0aW9uU2NvcGUnO1xuXG5mdW5jdGlvbiBzZXRDYXB0dXJlZFNjb3Blc09uU3BhbihzcGFuLCBzY29wZSwgaXNvbGF0aW9uU2NvcGUpIHtcbiAgaWYgKHNwYW4pIHtcbiAgICB1dGlscy5hZGROb25FbnVtZXJhYmxlUHJvcGVydHkoc3BhbiwgSVNPTEFUSU9OX1NDT1BFX09OX1NUQVJUX1NQQU5fRklFTEQsIGlzb2xhdGlvblNjb3BlKTtcbiAgICB1dGlscy5hZGROb25FbnVtZXJhYmxlUHJvcGVydHkoc3BhbiwgU0NPUEVfT05fU1RBUlRfU1BBTl9GSUVMRCwgc2NvcGUpO1xuICB9XG59XG5cbi8qKlxuICogR3JhYnMgdGhlIHNjb3BlIGFuZCBpc29sYXRpb24gc2NvcGUgb2ZmIGEgc3BhbiB0aGF0IHdlcmUgYWN0aXZlIHdoZW4gdGhlIHNwYW4gd2FzIHN0YXJ0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldENhcHR1cmVkU2NvcGVzT25TcGFuKHNwYW4pIHtcbiAgcmV0dXJuIHtcbiAgICBzY29wZTogKHNwYW4gKVtTQ09QRV9PTl9TVEFSVF9TUEFOX0ZJRUxEXSxcbiAgICBpc29sYXRpb25TY29wZTogKHNwYW4gKVtJU09MQVRJT05fU0NPUEVfT05fU1RBUlRfU1BBTl9GSUVMRF0sXG4gIH07XG59XG5cbmV4cG9ydHMuY29udGludWVUcmFjZSA9IGNvbnRpbnVlVHJhY2U7XG5leHBvcnRzLmdldEFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuO1xuZXhwb3J0cy5nZXRDYXB0dXJlZFNjb3Blc09uU3BhbiA9IGdldENhcHR1cmVkU2NvcGVzT25TcGFuO1xuZXhwb3J0cy5zdGFydEFjdGl2ZVNwYW4gPSBzdGFydEFjdGl2ZVNwYW47XG5leHBvcnRzLnN0YXJ0SW5hY3RpdmVTcGFuID0gc3RhcnRJbmFjdGl2ZVNwYW47XG5leHBvcnRzLnN0YXJ0U3BhbiA9IHN0YXJ0U3BhbjtcbmV4cG9ydHMuc3RhcnRTcGFuTWFudWFsID0gc3RhcnRTcGFuTWFudWFsO1xuZXhwb3J0cy50cmFjZSA9IHRyYWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2UuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xucmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbnJlcXVpcmUoJy4uL3RyYWNpbmcvZXJyb3JzLmpzJyk7XG5yZXF1aXJlKCcuLi90cmFjaW5nL3NwYW5zdGF0dXMuanMnKTtcbmNvbnN0IHRyYWNlID0gcmVxdWlyZSgnLi4vdHJhY2luZy90cmFjZS5qcycpO1xuXG4vKipcbiAqIGtleTogYnVja2V0S2V5XG4gKiB2YWx1ZTogW2V4cG9ydEtleSwgTWV0cmljU3VtbWFyeV1cbiAqL1xuXG5sZXQgU1BBTl9NRVRSSUNfU1VNTUFSWTtcblxuZnVuY3Rpb24gZ2V0TWV0cmljU3RvcmFnZUZvclNwYW4oc3Bhbikge1xuICByZXR1cm4gU1BBTl9NRVRSSUNfU1VNTUFSWSA/IFNQQU5fTUVUUklDX1NVTU1BUlkuZ2V0KHNwYW4pIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZldGNoZXMgdGhlIG1ldHJpYyBzdW1tYXJ5IGlmIGl0IGV4aXN0cyBmb3IgdGhlIHBhc3NlZCBzcGFuXG4gKi9cbmZ1bmN0aW9uIGdldE1ldHJpY1N1bW1hcnlKc29uRm9yU3BhbihzcGFuKSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSBnZXRNZXRyaWNTdG9yYWdlRm9yU3BhbihzcGFuKTtcblxuICBpZiAoIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuXG4gIGZvciAoY29uc3QgWywgW2V4cG9ydEtleSwgc3VtbWFyeV1dIG9mIHN0b3JhZ2UpIHtcbiAgICBpZiAoIW91dHB1dFtleHBvcnRLZXldKSB7XG4gICAgICBvdXRwdXRbZXhwb3J0S2V5XSA9IFtdO1xuICAgIH1cblxuICAgIG91dHB1dFtleHBvcnRLZXldLnB1c2godXRpbHMuZHJvcFVuZGVmaW5lZEtleXMoc3VtbWFyeSkpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBtZXRyaWMgc3VtbWFyeSBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzcGFuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU1ldHJpY1N1bW1hcnlPbkFjdGl2ZVNwYW4oXG4gIG1ldHJpY1R5cGUsXG4gIHNhbml0aXplZE5hbWUsXG4gIHZhbHVlLFxuICB1bml0LFxuICB0YWdzLFxuICBidWNrZXRLZXksXG4pIHtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlLmdldEFjdGl2ZVNwYW4oKTtcbiAgaWYgKHNwYW4pIHtcbiAgICBjb25zdCBzdG9yYWdlID0gZ2V0TWV0cmljU3RvcmFnZUZvclNwYW4oc3BhbikgfHwgbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgZXhwb3J0S2V5ID0gYCR7bWV0cmljVHlwZX06JHtzYW5pdGl6ZWROYW1lfUAke3VuaXR9YDtcbiAgICBjb25zdCBidWNrZXRJdGVtID0gc3RvcmFnZS5nZXQoYnVja2V0S2V5KTtcblxuICAgIGlmIChidWNrZXRJdGVtKSB7XG4gICAgICBjb25zdCBbLCBzdW1tYXJ5XSA9IGJ1Y2tldEl0ZW07XG4gICAgICBzdG9yYWdlLnNldChidWNrZXRLZXksIFtcbiAgICAgICAgZXhwb3J0S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgbWluOiBNYXRoLm1pbihzdW1tYXJ5Lm1pbiwgdmFsdWUpLFxuICAgICAgICAgIG1heDogTWF0aC5tYXgoc3VtbWFyeS5tYXgsIHZhbHVlKSxcbiAgICAgICAgICBjb3VudDogKHN1bW1hcnkuY291bnQgKz0gMSksXG4gICAgICAgICAgc3VtOiAoc3VtbWFyeS5zdW0gKz0gdmFsdWUpLFxuICAgICAgICAgIHRhZ3M6IHN1bW1hcnkudGFncyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG9yYWdlLnNldChidWNrZXRLZXksIFtcbiAgICAgICAgZXhwb3J0S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgbWluOiB2YWx1ZSxcbiAgICAgICAgICBtYXg6IHZhbHVlLFxuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIHN1bTogdmFsdWUsXG4gICAgICAgICAgdGFncyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmICghU1BBTl9NRVRSSUNfU1VNTUFSWSkge1xuICAgICAgU1BBTl9NRVRSSUNfU1VNTUFSWSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuXG4gICAgU1BBTl9NRVRSSUNfU1VNTUFSWS5zZXQoc3Bhbiwgc3RvcmFnZSk7XG4gIH1cbn1cblxuZXhwb3J0cy5nZXRNZXRyaWNTdW1tYXJ5SnNvbkZvclNwYW4gPSBnZXRNZXRyaWNTdW1tYXJ5SnNvbkZvclNwYW47XG5leHBvcnRzLnVwZGF0ZU1ldHJpY1N1bW1hcnlPbkFjdGl2ZVNwYW4gPSB1cGRhdGVNZXRyaWNTdW1tYXJ5T25BY3RpdmVTcGFuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0cmljLXN1bW1hcnkuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogVXNlIHRoaXMgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgc291cmNlIG9mIGEgc3Bhbi5cbiAqIFNob3VsZCBiZSBvbmUgb2Y6IGN1c3RvbSwgdXJsLCByb3V0ZSwgdmlldywgY29tcG9uZW50LCB0YXNrLCB1bmtub3duXG4gKlxuICovXG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSA9ICdzZW50cnkuc291cmNlJztcblxuLyoqXG4gKiBVc2UgdGhpcyBhdHRyaWJ1dGUgdG8gcmVwcmVzZW50IHRoZSBzYW1wbGUgcmF0ZSB1c2VkIGZvciBhIHNwYW4uXG4gKi9cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEUgPSAnc2VudHJ5LnNhbXBsZV9yYXRlJztcblxuLyoqXG4gKiBVc2UgdGhpcyBhdHRyaWJ1dGUgdG8gcmVwcmVzZW50IHRoZSBvcGVyYXRpb24gb2YgYSBzcGFuLlxuICovXG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QID0gJ3NlbnRyeS5vcCc7XG5cbi8qKlxuICogVXNlIHRoaXMgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgb3JpZ2luIG9mIGEgc3Bhbi5cbiAqL1xuY29uc3QgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4gPSAnc2VudHJ5Lm9yaWdpbic7XG5cbi8qKlxuICogVGhlIGlkIG9mIHRoZSBwcm9maWxlIHRoYXQgdGhpcyBzcGFuIG9jY3VyZWQgaW4uXG4gKi9cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9QUk9GSUxFX0lEID0gJ3Byb2ZpbGVfaWQnO1xuXG5leHBvcnRzLlNFTUFOVElDX0FUVFJJQlVURV9QUk9GSUxFX0lEID0gU0VNQU5USUNfQVRUUklCVVRFX1BST0ZJTEVfSUQ7XG5leHBvcnRzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AgPSBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiA9IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NBTVBMRV9SQVRFID0gU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURTtcbmV4cG9ydHMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UgPSBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWFudGljQXR0cmlidXRlcy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IG1ldHJpY1N1bW1hcnkgPSByZXF1aXJlKCcuLi9tZXRyaWNzL21ldHJpYy1zdW1tYXJ5LmpzJyk7XG5jb25zdCBzZW1hbnRpY0F0dHJpYnV0ZXMgPSByZXF1aXJlKCcuLi9zZW1hbnRpY0F0dHJpYnV0ZXMuanMnKTtcbmNvbnN0IGdldFJvb3RTcGFuID0gcmVxdWlyZSgnLi4vdXRpbHMvZ2V0Um9vdFNwYW4uanMnKTtcbmNvbnN0IHNwYW5VdGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL3NwYW5VdGlscy5qcycpO1xuY29uc3Qgc3BhbnN0YXR1cyA9IHJlcXVpcmUoJy4vc3BhbnN0YXR1cy5qcycpO1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIGZpbmlzaGVkIHNwYW5zIGZvciBhIGdpdmVuIHRyYW5zYWN0aW9uXG4gKiBAaW50ZXJuYWxcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU3BhblJlY29yZGVyIHtcblxuICAgY29uc3RydWN0b3IobWF4bGVuID0gMTAwMCkge1xuICAgIHRoaXMuX21heGxlbiA9IG1heGxlbjtcbiAgICB0aGlzLnNwYW5zID0gW107XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBqdXN0IHNvIHRoYXQgd2UgZG9uJ3QgcnVuIG91dCBvZiBtZW1vcnkgd2hpbGUgcmVjb3JkaW5nIGEgbG90XG4gICAqIG9mIHNwYW5zLiBBdCBzb21lIHBvaW50IHdlIGp1c3Qgc3RvcCBhbmQgZmx1c2ggb3V0IHRoZSBzdGFydCBvZiB0aGVcbiAgICogdHJhY2UgdHJlZSAoaS5lLnRoZSBmaXJzdCBuIHNwYW5zIHdpdGggdGhlIHNtYWxsZXN0XG4gICAqIHN0YXJ0X3RpbWVzdGFtcCkuXG4gICAqL1xuICAgYWRkKHNwYW4pIHtcbiAgICBpZiAodGhpcy5zcGFucy5sZW5ndGggPiB0aGlzLl9tYXhsZW4pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgc3Bhbi5zcGFuUmVjb3JkZXIgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3BhbnMucHVzaChzcGFuKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFuIGNvbnRhaW5zIGFsbCBkYXRhIGFib3V0IGEgc3BhblxuICovXG5jbGFzcyBTcGFuICB7XG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGUgc3Bhbi5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9KU09OKHNwYW4pLmF0dHRyaWJ1dGVzYCBpbnN0ZWFkLlxuICAgKi9cblxuICAvKipcbiAgICogRGF0YSBmb3IgdGhlIHNwYW4uXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTihzcGFuKS5hdHR0cmlidXRlc2AgaW5zdGVhZC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3BhbnMgdGhhdCB3ZXJlIGZpbmFsaXplZFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIHByb3BlcnR5IHdpbGwgbm8gbG9uZ2VyIGJlIHB1YmxpYy4gU3BhbiByZWNvcmRpbmcgd2lsbCBiZSBoYW5kbGVkIGludGVybmFsbHkuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBTZW50cnkuZ2V0Um9vdFNwYW4oKWAgaW5zdGVhZFxuICAgKi9cblxuICAvKipcbiAgICogVGhlIGluc3RydW1lbnRlciB0aGF0IGNyZWF0ZWQgdGhpcyBzcGFuLlxuICAgKlxuICAgKiBUT0RPICh2OCk6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIGBpbnN0YW5jZU9mYCBjaGVjayBvZiB0aGUgc3BhbiBjbGFzcy5cbiAgICogICAgICAgICAgICB0aGUgaW5zdHJ1bWVudGVyIGNhbiBvbmx5IGJlIHNlbnRyeSBvciBvdGVsIHNvIHdlIGNhbiBjaGVjayB0aGUgc3BhbiBpbnN0YW5jZVxuICAgKiAgICAgICAgICAgIHRvIHZlcmlmeSB3aGljaCBvbmUgaXQgaXMgYW5kIHJlbW92ZSB0aGlzIGZpZWxkIGVudGlyZWx5LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICovXG5cbiAgLyoqIEVwb2NoIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHdoZW4gdGhlIHNwYW4gc3RhcnRlZC4gKi9cblxuICAvKiogRXBvY2ggdGltZXN0YW1wIGluIHNlY29uZHMgd2hlbiB0aGUgc3BhbiBlbmRlZC4gKi9cblxuICAvKiogSW50ZXJuYWwga2VlcGVyIG9mIHRoZSBzdGF0dXMgKi9cblxuICAvKipcbiAgICogWW91IHNob3VsZCBuZXZlciBjYWxsIHRoZSBjb25zdHJ1Y3RvciBtYW51YWxseSwgYWx3YXlzIHVzZSBgU2VudHJ5LnN0YXJ0VHJhbnNhY3Rpb24oKWBcbiAgICogb3IgY2FsbCBgc3RhcnRDaGlsZCgpYCBvbiBhbiBleGlzdGluZyBzcGFuLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQGhpZGVjb25zdHJ1Y3RvclxuICAgKiBAaGlkZGVuXG4gICAqL1xuICAgY29uc3RydWN0b3Ioc3BhbkNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMuX3RyYWNlSWQgPSBzcGFuQ29udGV4dC50cmFjZUlkIHx8IHV0aWxzLnV1aWQ0KCk7XG4gICAgdGhpcy5fc3BhbklkID0gc3BhbkNvbnRleHQuc3BhbklkIHx8IHV0aWxzLnV1aWQ0KCkuc3Vic3RyaW5nKDE2KTtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBzcGFuQ29udGV4dC5zdGFydFRpbWVzdGFtcCB8fCB1dGlscy50aW1lc3RhbXBJblNlY29uZHMoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLnRhZ3MgPSBzcGFuQ29udGV4dC50YWdzID8geyAuLi5zcGFuQ29udGV4dC50YWdzIH0gOiB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmRhdGEgPSBzcGFuQ29udGV4dC5kYXRhID8geyAuLi5zcGFuQ29udGV4dC5kYXRhIH0gOiB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmluc3RydW1lbnRlciA9IHNwYW5Db250ZXh0Lmluc3RydW1lbnRlciB8fCAnc2VudHJ5JztcblxuICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSB7fTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgW3NlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06IHNwYW5Db250ZXh0Lm9yaWdpbiB8fCAnbWFudWFsJyxcbiAgICAgIFtzZW1hbnRpY0F0dHJpYnV0ZXMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06IHNwYW5Db250ZXh0Lm9wLFxuICAgICAgLi4uc3BhbkNvbnRleHQuYXR0cmlidXRlcyxcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuX25hbWUgPSBzcGFuQ29udGV4dC5uYW1lIHx8IHNwYW5Db250ZXh0LmRlc2NyaXB0aW9uO1xuXG4gICAgaWYgKHNwYW5Db250ZXh0LnBhcmVudFNwYW5JZCkge1xuICAgICAgdGhpcy5fcGFyZW50U3BhbklkID0gc3BhbkNvbnRleHQucGFyZW50U3BhbklkO1xuICAgIH1cbiAgICAvLyBXZSB3YW50IHRvIGluY2x1ZGUgYm9vbGVhbnMgYXMgd2VsbCBoZXJlXG4gICAgaWYgKCdzYW1wbGVkJyBpbiBzcGFuQ29udGV4dCkge1xuICAgICAgdGhpcy5fc2FtcGxlZCA9IHNwYW5Db250ZXh0LnNhbXBsZWQ7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5zdGF0dXMpIHtcbiAgICAgIHRoaXMuX3N0YXR1cyA9IHNwYW5Db250ZXh0LnN0YXR1cztcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LmVuZFRpbWVzdGFtcCkge1xuICAgICAgdGhpcy5fZW5kVGltZSA9IHNwYW5Db250ZXh0LmVuZFRpbWVzdGFtcDtcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LmV4Y2x1c2l2ZVRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZXhjbHVzaXZlVGltZSA9IHNwYW5Db250ZXh0LmV4Y2x1c2l2ZVRpbWU7XG4gICAgfVxuICAgIHRoaXMuX21lYXN1cmVtZW50cyA9IHNwYW5Db250ZXh0Lm1lYXN1cmVtZW50cyA/IHsgLi4uc3BhbkNvbnRleHQubWVhc3VyZW1lbnRzIH0gOiB7fTtcbiAgfVxuXG4gIC8vIFRoaXMgcnVsZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIGVzbGludCBydWxlIDooXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuICAvKipcbiAgICogQW4gYWxpYXMgZm9yIGBkZXNjcmlwdGlvbmAgb2YgdGhlIFNwYW4uXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTihzcGFuKS5kZXNjcmlwdGlvbmAgaW5zdGVhZC5cbiAgICovXG4gICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIG5hbWUgb2YgdGhlIHNwYW4uXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTihzcGFuKS5kZXNjcmlwdGlvbmAgaW5zdGVhZC5cbiAgICovXG4gICBzZXQgbmFtZShuYW1lKSB7XG4gICAgdGhpcy51cGRhdGVOYW1lKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNwYW4uXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTihzcGFuKS5kZXNjcmlwdGlvbmAgaW5zdGVhZC5cbiAgICovXG4gICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU3Bhbi5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9KU09OKHNwYW4pLmRlc2NyaXB0aW9uYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldCBkZXNjcmlwdGlvbihkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuX25hbWUgPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHRyYWNlLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5Db250ZXh0KCkudHJhY2VJZGAgaW5zdGVhZC5cbiAgICovXG4gICBnZXQgdHJhY2VJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhY2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHRyYWNlLlxuICAgKiBAZGVwcmVjYXRlZCBZb3UgY2Fubm90IHVwZGF0ZSB0aGUgdHJhY2VJZCBvZiBhIHNwYW4gYWZ0ZXIgc3BhbiBjcmVhdGlvbi5cbiAgICovXG4gICBzZXQgdHJhY2VJZCh0cmFjZUlkKSB7XG4gICAgdGhpcy5fdHJhY2VJZCA9IHRyYWNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBzcGFuLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5Db250ZXh0KCkuc3BhbklkYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldCBzcGFuSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NwYW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHNwYW4uXG4gICAqIEBkZXByZWNhdGVkIFlvdSBjYW5ub3QgdXBkYXRlIHRoZSBzcGFuSWQgb2YgYSBzcGFuIGFmdGVyIHNwYW4gY3JlYXRpb24uXG4gICAqL1xuICAgc2V0IHNwYW5JZChzcGFuSWQpIHtcbiAgICB0aGlzLl9zcGFuSWQgPSBzcGFuSWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW5gIGZ1bmN0aW9ucyBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldCBwYXJlbnRTcGFuSWQoc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFyZW50U3BhbklkID0gc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTihzcGFuKS5wYXJlbnRfc3Bhbl9pZGAgaW5zdGVhZC5cbiAgICovXG4gICBnZXQgcGFyZW50U3BhbklkKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRTcGFuSWQ7XG4gIH1cblxuICAvKipcbiAgICogV2FzIHRoaXMgc3BhbiBjaG9zZW4gdG8gYmUgc2VudCBhcyBwYXJ0IG9mIHRoZSBzYW1wbGU/XG4gICAqIEBkZXByZWNhdGVkIFVzZSBgaXNSZWNvcmRpbmcoKWAgaW5zdGVhZC5cbiAgICovXG4gICBnZXQgc2FtcGxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXMgdGhpcyBzcGFuIGNob3NlbiB0byBiZSBzZW50IGFzIHBhcnQgb2YgdGhlIHNhbXBsZT9cbiAgICogQGRlcHJlY2F0ZWQgWW91IGNhbm5vdCB1cGRhdGUgdGhlIHNhbXBsaW5nIGRlY2lzaW9uIG9mIGEgc3BhbiBhZnRlciBzcGFuIGNyZWF0aW9uLlxuICAgKi9cbiAgIHNldCBzYW1wbGVkKHNhbXBsZWQpIHtcbiAgICB0aGlzLl9zYW1wbGVkID0gc2FtcGxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGVzIGZvciB0aGUgc3Bhbi5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9KU09OKHNwYW4pLmF0dHRyaWJ1dGVzYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldCBhdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgZm9yIHRoZSBzcGFuLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNldEF0dHJpYnV0ZXMoKWAgaW5zdGVhZC5cbiAgICovXG4gICBzZXQgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgdGhpcy5fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gIH1cblxuICAvKipcbiAgICogVGltZXN0YW1wIGluIHNlY29uZHMgKGVwb2NoIHRpbWUpIGluZGljYXRpbmcgd2hlbiB0aGUgc3BhbiBzdGFydGVkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5Ub0pTT04oKWAgaW5zdGVhZC5cbiAgICovXG4gICBnZXQgc3RhcnRUaW1lc3RhbXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgaW4gc2Vjb25kcyAoZXBvY2ggdGltZSkgaW5kaWNhdGluZyB3aGVuIHRoZSBzcGFuIHN0YXJ0ZWQuXG4gICAqIEBkZXByZWNhdGVkIEluIHY4LCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1cGRhdGUgdGhlIHNwYW4gc3RhcnQgdGltZSBhZnRlciBjcmVhdGlvbi5cbiAgICovXG4gICBzZXQgc3RhcnRUaW1lc3RhbXAoc3RhcnRUaW1lKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCBpbiBzZWNvbmRzIHdoZW4gdGhlIHNwYW4gZW5kZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTigpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldCBlbmRUaW1lc3RhbXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogVGltZXN0YW1wIGluIHNlY29uZHMgd2hlbiB0aGUgc3BhbiBlbmRlZC5cbiAgICogQGRlcHJlY2F0ZWQgU2V0IHRoZSBlbmQgdGltZSB2aWEgYHNwYW4uZW5kKClgIGluc3RlYWQuXG4gICAqL1xuICAgc2V0IGVuZFRpbWVzdGFtcChlbmRUaW1lKSB7XG4gICAgdGhpcy5fZW5kVGltZSA9IGVuZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgc3Bhbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9KU09OKCkuc3RhdHVzYCBpbnN0ZWFkIHRvIGdldCB0aGUgc3RhdHVzLlxuICAgKi9cbiAgIGdldCBzdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBzcGFuLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYC5zZXRTdGF0dXMoKWAgaW5zdGVhZCB0byBzZXQgb3IgdXBkYXRlIHRoZSBzdGF0dXMuXG4gICAqL1xuICAgc2V0IHN0YXR1cyhzdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogT3BlcmF0aW9uIG9mIHRoZSBzcGFuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTigpLm9wYCB0byByZWFkIHRoZSBvcCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldCBvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRlc1tzZW1hbnRpY0F0dHJpYnV0ZXMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF0gO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZXJhdGlvbiBvZiB0aGUgc3BhblxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHN0YXJ0U3BhbigpYCBmdW5jdGlvbnMgdG8gc2V0IG9yIGBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnb3AnKVxuICAgKiAgICAgICAgICAgICB0byB1cGRhdGUgdGhlIHNwYW4gaW5zdGVhZC5cbiAgICovXG4gICBzZXQgb3Aob3ApIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShzZW1hbnRpY0F0dHJpYnV0ZXMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgb3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gb2YgdGhlIHNwYW4sIGdpdmluZyBjb250ZXh0IGFib3V0IHdoYXQgY3JlYXRlZCB0aGUgc3Bhbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9KU09OKCkub3JpZ2luYCB0byByZWFkIHRoZSBvcmlnaW4gaW5zdGVhZC5cbiAgICovXG4gICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzW3NlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl0gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gb2YgdGhlIHNwYW4sIGdpdmluZyBjb250ZXh0IGFib3V0IHdoYXQgY3JlYXRlZCB0aGUgc3Bhbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW4oKWAgZnVuY3Rpb25zIHRvIHNldCB0aGUgb3JpZ2luIGluc3RlYWQuXG4gICAqL1xuICAgc2V0IG9yaWdpbihvcmlnaW4pIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShzZW1hbnRpY0F0dHJpYnV0ZXMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIG9yaWdpbik7XG4gIH1cblxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHNwYW5Db250ZXh0KCkge1xuICAgIGNvbnN0IHsgX3NwYW5JZDogc3BhbklkLCBfdHJhY2VJZDogdHJhY2VJZCwgX3NhbXBsZWQ6IHNhbXBsZWQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwYW5JZCxcbiAgICAgIHRyYWNlSWQsXG4gICAgICB0cmFjZUZsYWdzOiBzYW1wbGVkID8gc3BhblV0aWxzLlRSQUNFX0ZMQUdfU0FNUExFRCA6IHNwYW5VdGlscy5UUkFDRV9GTEFHX05PTkUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGBTcGFuYCB3aGlsZSBzZXR0aW5nIHRoZSBjdXJyZW50IGBTcGFuLmlkYCBhcyBgcGFyZW50U3BhbklkYC5cbiAgICogQWxzbyB0aGUgYHNhbXBsZWRgIGRlY2lzaW9uIHdpbGwgYmUgaW5oZXJpdGVkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHN0YXJ0U3BhbigpYCwgYHN0YXJ0U3Bhbk1hbnVhbCgpYCBvciBgc3RhcnRJbmFjdGl2ZVNwYW4oKWAgaW5zdGVhZC5cbiAgICovXG4gICBzdGFydENoaWxkKFxuICAgIHNwYW5Db250ZXh0LFxuICApIHtcbiAgICBjb25zdCBjaGlsZFNwYW4gPSBuZXcgU3Bhbih7XG4gICAgICAuLi5zcGFuQ29udGV4dCxcbiAgICAgIHBhcmVudFNwYW5JZDogdGhpcy5fc3BhbklkLFxuICAgICAgc2FtcGxlZDogdGhpcy5fc2FtcGxlZCxcbiAgICAgIHRyYWNlSWQ6IHRoaXMuX3RyYWNlSWQsXG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjaGlsZFNwYW4uc3BhblJlY29yZGVyID0gdGhpcy5zcGFuUmVjb3JkZXI7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgaWYgKGNoaWxkU3Bhbi5zcGFuUmVjb3JkZXIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgY2hpbGRTcGFuLnNwYW5SZWNvcmRlci5hZGQoY2hpbGRTcGFuKTtcbiAgICB9XG5cbiAgICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuLmdldFJvb3RTcGFuKHRoaXMpO1xuICAgIC8vIFRPRE86IHN0aWxsIHNldCBzcGFuLnRyYW5zYWN0aW9uIGhlcmUgdW50aWwgd2UgaGF2ZSBhIG1vcmUgcGVybWFuZW50IHNvbHV0aW9uXG4gICAgLy8gUHJvYmFibHkgc2ltaWxhcmx5IHRvIHRoZSB3ZWFrbWFwIHdlIGhvbGQgaW4gbm9kZS1leHBlcmltZW50YWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjaGlsZFNwYW4udHJhbnNhY3Rpb24gPSByb290U3BhbiA7XG5cbiAgICBpZiAoZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiByb290U3Bhbikge1xuICAgICAgY29uc3Qgb3BTdHIgPSAoc3BhbkNvbnRleHQgJiYgc3BhbkNvbnRleHQub3ApIHx8ICc8IHVua25vd24gb3AgPic7XG4gICAgICBjb25zdCBuYW1lU3RyID0gc3BhblV0aWxzLnNwYW5Ub0pTT04oY2hpbGRTcGFuKS5kZXNjcmlwdGlvbiB8fCAnPCB1bmtub3duIG5hbWUgPic7XG4gICAgICBjb25zdCBpZFN0ciA9IHJvb3RTcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuXG4gICAgICBjb25zdCBsb2dNZXNzYWdlID0gYFtUcmFjaW5nXSBTdGFydGluZyAnJHtvcFN0cn0nIHNwYW4gb24gdHJhbnNhY3Rpb24gJyR7bmFtZVN0cn0nICgke2lkU3RyfSkuYDtcbiAgICAgIHV0aWxzLmxvZ2dlci5sb2cobG9nTWVzc2FnZSk7XG4gICAgICB0aGlzLl9sb2dNZXNzYWdlID0gbG9nTWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRTcGFuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRhZyBhdHRyaWJ1dGUgb24gdGhlIGN1cnJlbnQgc3Bhbi5cbiAgICpcbiAgICogQ2FuIGFsc28gYmUgdXNlZCB0byB1bnNldCBhIHRhZywgYnkgcGFzc2luZyBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUYWcga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSBUYWcgdmFsdWVcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzZXRBdHRyaWJ1dGUoKWAgaW5zdGVhZC5cbiAgICovXG4gICBzZXRUYWcoa2V5LCB2YWx1ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMudGFncyA9IHsgLi4udGhpcy50YWdzLCBba2V5XTogdmFsdWUgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgY3VycmVudCBzcGFuXG4gICAqIEBwYXJhbSBrZXkgRGF0YSBrZXlcbiAgICogQHBhcmFtIHZhbHVlIERhdGEgdmFsdWVcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzZXRBdHRyaWJ1dGUoKWAgaW5zdGVhZC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICBzZXREYXRhKGtleSwgdmFsdWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmRhdGEgPSB7IC4uLnRoaXMuZGF0YSwgW2tleV06IHZhbHVlIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSB0aGlzLl9hdHRyaWJ1dGVzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2F0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChrZXkgPT4gdGhpcy5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHNldFN0YXR1cyh2YWx1ZSkge1xuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0b3AtbGV2ZWwgYHNldEh0dHBTdGF0dXMoKWAgaW5zdGVhZC5cbiAgICovXG4gICBzZXRIdHRwU3RhdHVzKGh0dHBTdGF0dXMpIHtcbiAgICBzcGFuc3RhdHVzLnNldEh0dHBTdGF0dXModGhpcywgaHR0cFN0YXR1cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGAudXBkYXRlTmFtZSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMudXBkYXRlTmFtZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHVwZGF0ZU5hbWUobmFtZSkge1xuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3BhblRvSlNPTihzcGFuKS5zdGF0dXMgPT09ICdvaydgIGluc3RlYWQuXG4gICAqL1xuICAgaXNTdWNjZXNzKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMgPT09ICdvayc7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGAuZW5kKClgIGluc3RlYWQuXG4gICAqL1xuICAgZmluaXNoKGVuZFRpbWVzdGFtcCkge1xuICAgIHJldHVybiB0aGlzLmVuZChlbmRUaW1lc3RhbXApO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBlbmQoZW5kVGltZXN0YW1wKSB7XG4gICAgLy8gSWYgYWxyZWFkeSBlbmRlZCwgc2tpcFxuICAgIGlmICh0aGlzLl9lbmRUaW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvb3RTcGFuID0gZ2V0Um9vdFNwYW4uZ2V0Um9vdFNwYW4odGhpcyk7XG4gICAgaWYgKFxuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgLy8gRG9uJ3QgY2FsbCB0aGlzIGZvciB0cmFuc2FjdGlvbnNcbiAgICAgIHJvb3RTcGFuICYmXG4gICAgICByb290U3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCAhPT0gdGhpcy5fc3BhbklkXG4gICAgKSB7XG4gICAgICBjb25zdCBsb2dNZXNzYWdlID0gdGhpcy5fbG9nTWVzc2FnZTtcbiAgICAgIGlmIChsb2dNZXNzYWdlKSB7XG4gICAgICAgIHV0aWxzLmxvZ2dlci5sb2coKGxvZ01lc3NhZ2UgKS5yZXBsYWNlKCdTdGFydGluZycsICdGaW5pc2hpbmcnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZW5kVGltZSA9IHNwYW5VdGlscy5zcGFuVGltZUlucHV0VG9TZWNvbmRzKGVuZFRpbWVzdGFtcCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUhlYWRlcigpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHRvVHJhY2VwYXJlbnQoKSB7XG4gICAgcmV0dXJuIHNwYW5VdGlscy5zcGFuVG9UcmFjZUhlYWRlcih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5Ub0pTT04oKWAgb3IgYWNjZXNzIHRoZSBmaWVsZHMgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICovXG4gICB0b0NvbnRleHQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIGRhdGE6IHRoaXMuX2dldERhdGEoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLl9uYW1lLFxuICAgICAgZW5kVGltZXN0YW1wOiB0aGlzLl9lbmRUaW1lLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHBhcmVudFNwYW5JZDogdGhpcy5fcGFyZW50U3BhbklkLFxuICAgICAgc2FtcGxlZDogdGhpcy5fc2FtcGxlZCxcbiAgICAgIHNwYW5JZDogdGhpcy5fc3BhbklkLFxuICAgICAgc3RhcnRUaW1lc3RhbXA6IHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgIHN0YXR1czogdGhpcy5fc3RhdHVzLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICB0cmFjZUlkOiB0aGlzLl90cmFjZUlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVwZGF0ZSB0aGUgZmllbGRzIGRpcmVjdGx5IGluc3RlYWQuXG4gICAqL1xuICAgdXBkYXRlV2l0aENvbnRleHQoc3BhbkNvbnRleHQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLmRhdGEgPSBzcGFuQ29udGV4dC5kYXRhIHx8IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuX25hbWUgPSBzcGFuQ29udGV4dC5uYW1lIHx8IHNwYW5Db250ZXh0LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2VuZFRpbWUgPSBzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdGhpcy5vcCA9IHNwYW5Db250ZXh0Lm9wO1xuICAgIHRoaXMuX3BhcmVudFNwYW5JZCA9IHNwYW5Db250ZXh0LnBhcmVudFNwYW5JZDtcbiAgICB0aGlzLl9zYW1wbGVkID0gc3BhbkNvbnRleHQuc2FtcGxlZDtcbiAgICB0aGlzLl9zcGFuSWQgPSBzcGFuQ29udGV4dC5zcGFuSWQgfHwgdGhpcy5fc3BhbklkO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHNwYW5Db250ZXh0LnN0YXJ0VGltZXN0YW1wIHx8IHRoaXMuX3N0YXJ0VGltZTtcbiAgICB0aGlzLl9zdGF0dXMgPSBzcGFuQ29udGV4dC5zdGF0dXM7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdGhpcy50YWdzID0gc3BhbkNvbnRleHQudGFncyB8fCB7fTtcbiAgICB0aGlzLl90cmFjZUlkID0gc3BhbkNvbnRleHQudHJhY2VJZCB8fCB0aGlzLl90cmFjZUlkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUNvbnRleHQoKWAgdXRpbCBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldFRyYWNlQ29udGV4dCgpIHtcbiAgICByZXR1cm4gc3BhblV0aWxzLnNwYW5Ub1RyYWNlQ29udGV4dCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNwYW4uXG4gICAqXG4gICAqIEBoaWRkZW5cbiAgICogQGludGVybmFsIFRoaXMgbWV0aG9kIGlzIHB1cmVseSBmb3IgaW50ZXJuYWwgcHVycG9zZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlXG4gICAqIG9mIFNESyBjb2RlLiBJZiB5b3UgbmVlZCB0byBnZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgc3BhbixcbiAgICogdXNlIGBzcGFuVG9KU09OKHNwYW4pYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldFNwYW5KU09OKCkge1xuICAgIHJldHVybiB1dGlscy5kcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICBkYXRhOiB0aGlzLl9nZXREYXRhKCksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5fbmFtZSxcbiAgICAgIG9wOiB0aGlzLl9hdHRyaWJ1dGVzW3NlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXSAsXG4gICAgICBwYXJlbnRfc3Bhbl9pZDogdGhpcy5fcGFyZW50U3BhbklkLFxuICAgICAgc3Bhbl9pZDogdGhpcy5fc3BhbklkLFxuICAgICAgc3RhcnRfdGltZXN0YW1wOiB0aGlzLl9zdGFydFRpbWUsXG4gICAgICBzdGF0dXM6IHRoaXMuX3N0YXR1cyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgdGFnczogT2JqZWN0LmtleXModGhpcy50YWdzKS5sZW5ndGggPiAwID8gdGhpcy50YWdzIDogdW5kZWZpbmVkLFxuICAgICAgdGltZXN0YW1wOiB0aGlzLl9lbmRUaW1lLFxuICAgICAgdHJhY2VfaWQ6IHRoaXMuX3RyYWNlSWQsXG4gICAgICBvcmlnaW46IHRoaXMuX2F0dHJpYnV0ZXNbc2VtYW50aWNBdHRyaWJ1dGVzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXSAsXG4gICAgICBfbWV0cmljc19zdW1tYXJ5OiBtZXRyaWNTdW1tYXJ5LmdldE1ldHJpY1N1bW1hcnlKc29uRm9yU3Bhbih0aGlzKSxcbiAgICAgIHByb2ZpbGVfaWQ6IHRoaXMuX2F0dHJpYnV0ZXNbc2VtYW50aWNBdHRyaWJ1dGVzLlNFTUFOVElDX0FUVFJJQlVURV9QUk9GSUxFX0lEXSAsXG4gICAgICBleGNsdXNpdmVfdGltZTogdGhpcy5fZXhjbHVzaXZlVGltZSxcbiAgICAgIG1lYXN1cmVtZW50czogT2JqZWN0LmtleXModGhpcy5fbWVhc3VyZW1lbnRzKS5sZW5ndGggPiAwID8gdGhpcy5fbWVhc3VyZW1lbnRzIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBpc1JlY29yZGluZygpIHtcbiAgICByZXR1cm4gIXRoaXMuX2VuZFRpbWUgJiYgISF0aGlzLl9zYW1wbGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIG9iamVjdCB0byBKU09OLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5Ub0pTT04oc3BhbilgIGluc3RlYWQuXG4gICAqL1xuICAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLmdldFNwYW5KU09OKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtZXJnZWQgZGF0YSBmb3IgdGhpcyBzcGFuLlxuICAgKiBGb3Igbm93LCB0aGlzIGNvbWJpbmVzIGBkYXRhYCBhbmQgYGF0dHJpYnV0ZXNgIHRvZ2V0aGVyLFxuICAgKiB1bnRpbCBldmVudHVhbGx5IHdlIGNhbiBpbmdlc3QgYGF0dHJpYnV0ZXNgIGRpcmVjdGx5LlxuICAgKi9cbiAgIF9nZXREYXRhKClcblxuIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB7IGRhdGEsIF9hdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgaGFzRGF0YSA9IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoIWhhc0RhdGEgJiYgIWhhc0F0dHJpYnV0ZXMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGhhc0RhdGEgJiYgaGFzQXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0RhdGEgPyBkYXRhIDogYXR0cmlidXRlcztcbiAgfVxufVxuXG5leHBvcnRzLlNwYW4gPSBTcGFuO1xuZXhwb3J0cy5TcGFuUmVjb3JkZXIgPSBTcGFuUmVjb3JkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGFuLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3QgaHViID0gcmVxdWlyZSgnLi4vaHViLmpzJyk7XG5jb25zdCBtZXRyaWNTdW1tYXJ5ID0gcmVxdWlyZSgnLi4vbWV0cmljcy9tZXRyaWMtc3VtbWFyeS5qcycpO1xuY29uc3Qgc2VtYW50aWNBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJyk7XG5jb25zdCBzcGFuVXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9zcGFuVXRpbHMuanMnKTtcbmNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSByZXF1aXJlKCcuL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMnKTtcbmNvbnN0IHNwYW4gPSByZXF1aXJlKCcuL3NwYW4uanMnKTtcbmNvbnN0IHRyYWNlID0gcmVxdWlyZSgnLi90cmFjZS5qcycpO1xuXG4vKiogSlNEb2MgKi9cbmNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgc3Bhbi5TcGFuICB7XG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGh1Yi5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gIC8vIERPIE5PVCB5ZXQgcmVtb3ZlIHRoaXMgcHJvcGVydHksIGl0IGlzIHVzZWQgaW4gYSBoYWNrIGZvciB2NyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblxuICAvKipcbiAgICogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG1hbnVhbGx5LiBUaG9zZSBpbnN0cnVtZW50aW5nIHRyYWNpbmcgc2hvdWxkIHVzZVxuICAgKiBgU2VudHJ5LnN0YXJ0VHJhbnNhY3Rpb24oKWAsIGFuZCBpbnRlcm5hbCBtZXRob2RzIHNob3VsZCB1c2UgYGh1Yi5zdGFydFRyYW5zYWN0aW9uKClgLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQGhpZGVjb25zdHJ1Y3RvclxuICAgKiBAaGlkZGVuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRyYW5zYWN0aW9ucyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBzcGFucyBpbnN0ZWFkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbkNvbnRleHQsIGh1YiQxKSB7XG4gICAgc3VwZXIodHJhbnNhY3Rpb25Db250ZXh0KTtcbiAgICB0aGlzLl9jb250ZXh0cyA9IHt9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdGhpcy5faHViID0gaHViJDEgfHwgaHViLmdldEN1cnJlbnRIdWIoKTtcblxuICAgIHRoaXMuX25hbWUgPSB0cmFuc2FjdGlvbkNvbnRleHQubmFtZSB8fCAnJztcblxuICAgIHRoaXMuX21ldGFkYXRhID0ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAuLi50cmFuc2FjdGlvbkNvbnRleHQubWV0YWRhdGEsXG4gICAgfTtcblxuICAgIHRoaXMuX3RyaW1FbmQgPSB0cmFuc2FjdGlvbkNvbnRleHQudHJpbUVuZDtcblxuICAgIC8vIHRoaXMgaXMgYmVjYXVzZSB0cmFuc2FjdGlvbnMgYXJlIGFsc28gc3BhbnMsIGFuZCBzcGFucyBoYXZlIGEgdHJhbnNhY3Rpb24gcG9pbnRlclxuICAgIC8vIFRPRE8gKHY4KTogUmVwbGFjZSB0aGlzIHdpdGggYW5vdGhlciB3YXkgdG8gc2V0IHRoZSByb290IHNwYW5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcztcblxuICAgIC8vIElmIER5bmFtaWMgU2FtcGxpbmcgQ29udGV4dCBpcyBwcm92aWRlZCBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSB0cmFuc2FjdGlvbiwgd2UgZnJlZXplIGl0IGFzIGl0IHVzdWFsbHkgbWVhbnNcbiAgICAvLyB0aGVyZSBpcyBpbmNvbWluZyBEeW5hbWljIFNhbXBsaW5nIENvbnRleHQuIChFaXRoZXIgdGhyb3VnaCBhbiBpbmNvbWluZyByZXF1ZXN0LCBhIGJhZ2dhZ2UgbWV0YS10YWcsIG9yIG90aGVyIG1lYW5zKVxuICAgIGNvbnN0IGluY29taW5nRHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IHRoaXMuX21ldGFkYXRhLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7XG4gICAgaWYgKGluY29taW5nRHluYW1pY1NhbXBsaW5nQ29udGV4dCkge1xuICAgICAgLy8gV2Ugc2hhbGxvdyBjb3B5IHRoaXMgaW4gY2FzZSBhbnl0aGluZyB3cml0ZXMgdG8gdGhlIG9yaWdpbmFsIHJlZmVyZW5jZSBvZiB0aGUgcGFzc2VkIGluIGBkeW5hbWljU2FtcGxpbmdDb250ZXh0YFxuICAgICAgdGhpcy5fZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IHsgLi4uaW5jb21pbmdEeW5hbWljU2FtcGxpbmdDb250ZXh0IH07XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBzYWRseSBjb25mbGljdHMgd2l0aCB0aGUgZ2V0dGVyL3NldHRlciBvcmRlcmluZyA6KFxuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgYG5hbWVgIHByb3BlcnR5LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5Ub0pTT04oc3BhbikuZGVzY3JpcHRpb25gIGluc3RlYWQuXG4gICAqL1xuICAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0dGVyIGZvciBgbmFtZWAgcHJvcGVydHksIHdoaWNoIGFsc28gc2V0cyBgc291cmNlYCBhcyBjdXN0b20uXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgdXBkYXRlTmFtZSgpYCBhbmQgYHNldE1ldGFkYXRhKClgIGluc3RlYWQuXG4gICAqL1xuICAgc2V0IG5hbWUobmV3TmFtZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRoaXMuc2V0TmFtZShuZXdOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1ldGFkYXRhIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNwYW5HZXRNZXRhZGF0YSh0cmFuc2FjdGlvbilgIGluc3RlYWQuXG4gICAqL1xuICAgZ2V0IG1ldGFkYXRhKCkge1xuICAgIC8vIFdlIG1lcmdlIGF0dHJpYnV0ZXMgaW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERlZmF1bHRzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHNvdXJjZTogJ2N1c3RvbScsXG4gICAgICBzcGFuTWV0YWRhdGE6IHt9LFxuXG4gICAgICAvLyBMZWdhY3kgbWV0YWRhdGFcbiAgICAgIC4uLnRoaXMuX21ldGFkYXRhLFxuXG4gICAgICAvLyBGcm9tIGF0dHJpYnV0ZXNcbiAgICAgIC4uLih0aGlzLl9hdHRyaWJ1dGVzW3NlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV0gJiYge1xuICAgICAgICBzb3VyY2U6IHRoaXMuX2F0dHJpYnV0ZXNbc2VtYW50aWNBdHRyaWJ1dGVzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXSAsXG4gICAgICB9KSxcbiAgICAgIC4uLih0aGlzLl9hdHRyaWJ1dGVzW3NlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NBTVBMRV9SQVRFXSAmJiB7XG4gICAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2F0dHJpYnV0ZXNbc2VtYW50aWNBdHRyaWJ1dGVzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEVdICxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBtZXRhZGF0YSBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuR2V0TWV0YWRhdGEodHJhbnNhY3Rpb24pYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldCBtZXRhZGF0YShtZXRhZGF0YSkge1xuICAgIHRoaXMuX21ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuICAvKipcbiAgICogU2V0dGVyIGZvciBgbmFtZWAgcHJvcGVydHksIHdoaWNoIGFsc28gc2V0cyBgc291cmNlYCBvbiB0aGUgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgLnVwZGF0ZU5hbWUoKWAgYW5kIGAuc2V0QXR0cmlidXRlKClgIGluc3RlYWQuXG4gICAqL1xuICAgc2V0TmFtZShuYW1lLCBzb3VyY2UgPSAnY3VzdG9tJykge1xuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgc291cmNlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgdXBkYXRlTmFtZShuYW1lKSB7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgU3BhblJlY29yZGVyIHRvIHRoZSBzcGFuIGl0c2VsZlxuICAgKiBAcGFyYW0gbWF4bGVuIG1heGltdW0gbnVtYmVyIG9mIHNwYW5zIHRoYXQgY2FuIGJlIHJlY29yZGVkXG4gICAqL1xuICAgaW5pdFNwYW5SZWNvcmRlcihtYXhsZW4gPSAxMDAwKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgaWYgKCF0aGlzLnNwYW5SZWNvcmRlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0aGlzLnNwYW5SZWNvcmRlciA9IG5ldyBzcGFuLlNwYW5SZWNvcmRlcihtYXhsZW4pO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLnNwYW5SZWNvcmRlci5hZGQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24gZXZlbnQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBlaXRoZXIgYC5zZXRBdHRyaWJ1dGUoKWAsIG9yIHNldCB0aGUgY29udGV4dCBvbiB0aGUgc2NvcGUgYmVmb3JlIGNyZWF0aW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAgICovXG4gICBzZXRDb250ZXh0KGtleSwgY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29udGV4dHNba2V5XSA9IGNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0b3AtbGV2ZWwgYHNldE1lYXN1cmVtZW50KClgIGluc3RlYWQuXG4gICAqL1xuICAgc2V0TWVhc3VyZW1lbnQobmFtZSwgdmFsdWUsIHVuaXQgPSAnJykge1xuICAgIHRoaXMuX21lYXN1cmVtZW50c1tuYW1lXSA9IHsgdmFsdWUsIHVuaXQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBtZXRhZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYXR0cmlidXRlcyBvciBzdG9yZSBkYXRhIG9uIHRoZSBzY29wZSBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldE1ldGFkYXRhKG5ld01ldGFkYXRhKSB7XG4gICAgdGhpcy5fbWV0YWRhdGEgPSB7IC4uLnRoaXMuX21ldGFkYXRhLCAuLi5uZXdNZXRhZGF0YSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZW5kKGVuZFRpbWVzdGFtcCkge1xuICAgIGNvbnN0IHRpbWVzdGFtcEluUyA9IHNwYW5VdGlscy5zcGFuVGltZUlucHV0VG9TZWNvbmRzKGVuZFRpbWVzdGFtcCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLl9maW5pc2hUcmFuc2FjdGlvbih0aW1lc3RhbXBJblMpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHJldHVybiB0aGlzLl9odWIuY2FwdHVyZUV2ZW50KHRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHRvQ29udGV4dCgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBzcGFuQ29udGV4dCA9IHN1cGVyLnRvQ29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIC4uLnNwYW5Db250ZXh0LFxuICAgICAgbmFtZTogdGhpcy5fbmFtZSxcbiAgICAgIHRyaW1FbmQ6IHRoaXMuX3RyaW1FbmQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICB1cGRhdGVXaXRoQ29udGV4dCh0cmFuc2FjdGlvbkNvbnRleHQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBzdXBlci51cGRhdGVXaXRoQ29udGV4dCh0cmFuc2FjdGlvbkNvbnRleHQpO1xuXG4gICAgdGhpcy5fbmFtZSA9IHRyYW5zYWN0aW9uQ29udGV4dC5uYW1lIHx8ICcnO1xuICAgIHRoaXMuX3RyaW1FbmQgPSB0cmFuc2FjdGlvbkNvbnRleHQudHJpbUVuZDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRvcC1sZXZlbCBgZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHQoKSB7XG4gICAgcmV0dXJuIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBjdXJyZW50IGh1YiB3aXRoIGEgbmV3IG9uZS5cbiAgICogVXNlZCBpZiB5b3Ugd2FudCBhbm90aGVyIGh1YiB0byBmaW5pc2ggdGhlIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgc2V0SHViKGh1Yikge1xuICAgIHRoaXMuX2h1YiA9IGh1YjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByb2ZpbGUgaWQgb2YgdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgIGdldFByb2ZpbGVJZCgpIHtcbiAgICBpZiAodGhpcy5fY29udGV4dHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jb250ZXh0c1sncHJvZmlsZSddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0c1sncHJvZmlsZSddLnByb2ZpbGVfaWQgO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmlzaCB0aGUgdHJhbnNhY3Rpb24gJiBwcmVwYXJlIHRoZSBldmVudCB0byBzZW5kIHRvIFNlbnRyeS5cbiAgICovXG4gICBfZmluaXNoVHJhbnNhY3Rpb24oZW5kVGltZXN0YW1wKSB7XG4gICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IGZpbmlzaGVkLCBzbyB3ZSBzaG91bGQgbm90IGZsdXNoIGl0IGFnYWluLlxuICAgIGlmICh0aGlzLl9lbmRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9uYW1lKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdUcmFuc2FjdGlvbiBoYXMgbm8gbmFtZSwgZmFsbGluZyBiYWNrIHRvIGA8dW5sYWJlbGVkIHRyYW5zYWN0aW9uPmAuJyk7XG4gICAgICB0aGlzLl9uYW1lID0gJzx1bmxhYmVsZWQgdHJhbnNhY3Rpb24+JztcbiAgICB9XG5cbiAgICAvLyBqdXN0IHNldHMgdGhlIGVuZCB0aW1lc3RhbXBcbiAgICBzdXBlci5lbmQoZW5kVGltZXN0YW1wKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuX2h1Yi5nZXRDbGllbnQoKTtcbiAgICBpZiAoY2xpZW50ICYmIGNsaWVudC5lbWl0KSB7XG4gICAgICBjbGllbnQuZW1pdCgnZmluaXNoVHJhbnNhY3Rpb24nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2FtcGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgLy8gQXQgdGhpcyBwb2ludCBpZiBgc2FtcGxlZCAhPT0gdHJ1ZWAgd2Ugd2FudCB0byBkaXNjYXJkIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW1RyYWNpbmddIERpc2NhcmRpbmcgdHJhbnNhY3Rpb24gYmVjYXVzZSBpdHMgdHJhY2Ugd2FzIG5vdCBjaG9zZW4gdG8gYmUgc2FtcGxlZC4nKTtcblxuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBjbGllbnQucmVjb3JkRHJvcHBlZEV2ZW50KCdzYW1wbGVfcmF0ZScsICd0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IGZpbmlzaGVkU3BhbnMgPSB0aGlzLnNwYW5SZWNvcmRlclxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgdGhpcy5zcGFuUmVjb3JkZXIuc3BhbnMuZmlsdGVyKHNwYW4gPT4gc3BhbiAhPT0gdGhpcyAmJiBzcGFuVXRpbHMuc3BhblRvSlNPTihzcGFuKS50aW1lc3RhbXApXG4gICAgICA6IFtdO1xuXG4gICAgaWYgKHRoaXMuX3RyaW1FbmQgJiYgZmluaXNoZWRTcGFucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbmRUaW1lcyA9IGZpbmlzaGVkU3BhbnMubWFwKHNwYW4gPT4gc3BhblV0aWxzLnNwYW5Ub0pTT04oc3BhbikudGltZXN0YW1wKS5maWx0ZXIoQm9vbGVhbikgO1xuICAgICAgdGhpcy5fZW5kVGltZSA9IGVuZFRpbWVzLnJlZHVjZSgocHJldiwgY3VycmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gcHJldiA+IGN1cnJlbnQgPyBwcmV2IDogY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NvcGU6IGNhcHR1cmVkU3BhblNjb3BlLCBpc29sYXRpb25TY29wZTogY2FwdHVyZWRTcGFuSXNvbGF0aW9uU2NvcGUgfSA9IHRyYWNlLmdldENhcHR1cmVkU2NvcGVzT25TcGFuKHRoaXMpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gdGhpcztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB7IHNvdXJjZSB9ID0gbWV0YWRhdGE7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHtcbiAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgIC4uLnRoaXMuX2NvbnRleHRzLFxuICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIHRyYWNlIGNvbnRleHRcbiAgICAgICAgdHJhY2U6IHNwYW5VdGlscy5zcGFuVG9UcmFjZUNvbnRleHQodGhpcyksXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogUGFzcyBzcGFucyBzZXJpYWxpemVkIHZpYSBgc3BhblRvSlNPTigpYCBoZXJlIGluc3RlYWQgaW4gdjguXG4gICAgICBzcGFuczogZmluaXNoZWRTcGFucyxcbiAgICAgIHN0YXJ0X3RpbWVzdGFtcDogdGhpcy5fc3RhcnRUaW1lLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICB0aW1lc3RhbXA6IHRoaXMuX2VuZFRpbWUsXG4gICAgICB0cmFuc2FjdGlvbjogdGhpcy5fbmFtZSxcbiAgICAgIHR5cGU6ICd0cmFuc2FjdGlvbicsXG4gICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IHtcbiAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgIGNhcHR1cmVkU3BhblNjb3BlLFxuICAgICAgICBjYXB0dXJlZFNwYW5Jc29sYXRpb25TY29wZSxcbiAgICAgICAgLi4udXRpbHMuZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgICAgIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQ6IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuKHRoaXMpLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBfbWV0cmljc19zdW1tYXJ5OiBtZXRyaWNTdW1tYXJ5LmdldE1ldHJpY1N1bW1hcnlKc29uRm9yU3Bhbih0aGlzKSxcbiAgICAgIC4uLihzb3VyY2UgJiYge1xuICAgICAgICB0cmFuc2FjdGlvbl9pbmZvOiB7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IGhhc01lYXN1cmVtZW50cyA9IE9iamVjdC5rZXlzKHRoaXMuX21lYXN1cmVtZW50cykubGVuZ3RoID4gMDtcblxuICAgIGlmIChoYXNNZWFzdXJlbWVudHMpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgICAgdXRpbHMubG9nZ2VyLmxvZyhcbiAgICAgICAgICAnW01lYXN1cmVtZW50c10gQWRkaW5nIG1lYXN1cmVtZW50cyB0byB0cmFuc2FjdGlvbicsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5fbWVhc3VyZW1lbnRzLCB1bmRlZmluZWQsIDIpLFxuICAgICAgICApO1xuICAgICAgdHJhbnNhY3Rpb24ubWVhc3VyZW1lbnRzID0gdGhpcy5fbWVhc3VyZW1lbnRzO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgW1RyYWNpbmddIEZpbmlzaGluZyAke3RoaXMub3B9IHRyYW5zYWN0aW9uOiAke3RoaXMuX25hbWV9LmApO1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG59XG5cbmV4cG9ydHMuVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYW5zYWN0aW9uLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3Qgc3BhblV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvc3BhblV0aWxzLmpzJyk7XG5jb25zdCBzcGFuID0gcmVxdWlyZSgnLi9zcGFuLmpzJyk7XG5jb25zdCB0cmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vdHJhbnNhY3Rpb24uanMnKTtcblxuY29uc3QgVFJBQ0lOR19ERUZBVUxUUyA9IHtcbiAgaWRsZVRpbWVvdXQ6IDEwMDAsXG4gIGZpbmFsVGltZW91dDogMzAwMDAsXG4gIGhlYXJ0YmVhdEludGVydmFsOiA1MDAwLFxufTtcblxuY29uc3QgRklOSVNIX1JFQVNPTl9UQUcgPSAnZmluaXNoUmVhc29uJztcblxuY29uc3QgSURMRV9UUkFOU0FDVElPTl9GSU5JU0hfUkVBU09OUyA9IFtcbiAgJ2hlYXJ0YmVhdEZhaWxlZCcsXG4gICdpZGxlVGltZW91dCcsXG4gICdkb2N1bWVudEhpZGRlbicsXG4gICdmaW5hbFRpbWVvdXQnLFxuICAnZXh0ZXJuYWxGaW5pc2gnLFxuICAnY2FuY2VsbGVkJyxcbl07XG5cbi8qKlxuICogQGluaGVyaXREb2NcbiAqL1xuY2xhc3MgSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyIGV4dGVuZHMgc3Bhbi5TcGFuUmVjb3JkZXIge1xuICAgY29uc3RydWN0b3IoXG4gICAgICBfcHVzaEFjdGl2aXR5LFxuICAgICAgX3BvcEFjdGl2aXR5LFxuICAgICB0cmFuc2FjdGlvblNwYW5JZCxcbiAgICBtYXhsZW4sXG4gICkge1xuICAgIHN1cGVyKG1heGxlbik7dGhpcy5fcHVzaEFjdGl2aXR5ID0gX3B1c2hBY3Rpdml0eTt0aGlzLl9wb3BBY3Rpdml0eSA9IF9wb3BBY3Rpdml0eTt0aGlzLnRyYW5zYWN0aW9uU3BhbklkID0gdHJhbnNhY3Rpb25TcGFuSWQ7ICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgYWRkKHNwYW4pIHtcbiAgICAvLyBXZSBzaG91bGQgbWFrZSBzdXJlIHdlIGRvIG5vdCBwdXNoIGFuZCBwb3AgYWN0aXZpdGllcyBmb3JcbiAgICAvLyB0aGUgdHJhbnNhY3Rpb24gdGhhdCB0aGlzIHNwYW4gcmVjb3JkZXIgYmVsb25ncyB0by5cbiAgICBpZiAoc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCAhPT0gdGhpcy50cmFuc2FjdGlvblNwYW5JZCkge1xuICAgICAgLy8gV2UgcGF0Y2ggc3Bhbi5lbmQoKSB0byBwb3AgYW4gYWN0aXZpdHkgYWZ0ZXIgc2V0dGluZyBhbiBlbmRUaW1lc3RhbXAuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICBjb25zdCBvcmlnaW5hbEVuZCA9IHNwYW4uZW5kO1xuICAgICAgc3Bhbi5lbmQgPSAoLi4ucmVzdCkgPT4ge1xuICAgICAgICB0aGlzLl9wb3BBY3Rpdml0eShzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkKTtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsRW5kLmFwcGx5KHNwYW4sIHJlc3QpO1xuICAgICAgfTtcblxuICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgcHVzaCBuZXcgYWN0aXZpdGllcyBpZiB0aGUgc3BhbiBkb2VzIG5vdCBoYXZlIGFuIGVuZCB0aW1lc3RhbXAuXG4gICAgICBpZiAoc3BhblV0aWxzLnNwYW5Ub0pTT04oc3BhbikudGltZXN0YW1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcHVzaEFjdGl2aXR5KHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyLmFkZChzcGFuKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIElkbGVUcmFuc2FjdGlvbiBpcyBhIHRyYW5zYWN0aW9uIHRoYXQgYXV0b21hdGljYWxseSBmaW5pc2hlcy4gSXQgZG9lcyB0aGlzIGJ5IHRyYWNraW5nIGNoaWxkIHNwYW5zIGFzIGFjdGl2aXRpZXMuXG4gKiBZb3UgY2FuIGhhdmUgbXVsdGlwbGUgSWRsZVRyYW5zYWN0aW9ucyBhY3RpdmUsIGJ1dCBpZiB0aGUgYG9uU2NvcGVgIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdpbGxcbiAqIHB1dCBpdHNlbGYgb24gdGhlIHNjb3BlIG9uIGNyZWF0aW9uLlxuICovXG5jbGFzcyBJZGxlVHJhbnNhY3Rpb24gZXh0ZW5kcyB0cmFuc2FjdGlvbi5UcmFuc2FjdGlvbiB7XG4gIC8vIEFjdGl2aXRpZXMgc3RvcmUgYSBsaXN0IG9mIGFjdGl2ZSBzcGFuc1xuXG4gIC8vIFRyYWNrIHN0YXRlIG9mIGFjdGl2aXRpZXMgaW4gcHJldmlvdXMgaGVhcnRiZWF0XG5cbiAgLy8gQW1vdW50IG9mIHRpbWVzIGhlYXJ0YmVhdCBoYXMgY291bnRlZC4gV2lsbCBjYXVzZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggYWZ0ZXIgMyBiZWF0cy5cblxuICAvLyBXZSBzaG91bGQgbm90IHVzZSBoZWFydGJlYXQgaWYgd2UgZmluaXNoZWQgYSB0cmFuc2FjdGlvblxuXG4gIC8vIElkbGUgdGltZW91dCB3YXMgY2FuY2VsZWQgYW5kIHdlIHNob3VsZCBmaW5pc2ggdGhlIHRyYW5zYWN0aW9uIHdpdGggdGhlIGxhc3Qgc3BhbiBlbmQuXG5cbiAgLyoqXG4gICAqIFRpbWVyIHRoYXQgdHJhY2tzIFRyYW5zYWN0aW9uIGlkbGVUaW1lb3V0XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUcmFuc2FjdGlvbnMgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2Ugc3BhbnMgaW5zdGVhZC5cbiAgICovXG4gICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2FjdGlvbkNvbnRleHQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBfaWRsZUh1YixcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSB0byB3YWl0IGluIG1zIHVudGlsIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdpbGwgYmUgZmluaXNoZWQuIFRoaXMgdGltZXIgaXMgc3RhcnRlZCBlYWNoIHRpbWVcbiAgICAgKiB0aGVyZSBhcmUgbm8gYWN0aXZlIHNwYW5zIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAgICovXG4gICAgICBfaWRsZVRpbWVvdXQgPSBUUkFDSU5HX0RFRkFVTFRTLmlkbGVUaW1lb3V0LFxuICAgIC8qKlxuICAgICAqIFRoZSBmaW5hbCB2YWx1ZSBpbiBtcyB0aGF0IGEgdHJhbnNhY3Rpb24gY2Fubm90IGV4Y2VlZFxuICAgICAqL1xuICAgICAgX2ZpbmFsVGltZW91dCA9IFRSQUNJTkdfREVGQVVMVFMuZmluYWxUaW1lb3V0LFxuICAgICAgX2hlYXJ0YmVhdEludGVydmFsID0gVFJBQ0lOR19ERUZBVUxUUy5oZWFydGJlYXRJbnRlcnZhbCxcbiAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIHB1dCBpdHNlbGYgb24gdGhlIHNjb3BlIHdoZW4gaXQgc3RhcnRzIGFuZCBwb3AgaXRzZWxmIG9mZiB3aGVuIGl0IGVuZHNcbiAgICAgIF9vblNjb3BlID0gZmFsc2UsXG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgdG8gYHRydWVgLCB3aWxsIGRpc2FibGUgdGhlIGlkbGUgdGltZW91dCAoYF9pZGxlVGltZW91dGAgb3B0aW9uKSBhbmQgaGVhcnRiZWF0IG1lY2hhbmlzbXMgKGBfaGVhcnRiZWF0SW50ZXJ2YWxgXG4gICAgICogb3B0aW9uKSB1bnRpbCB0aGUgYHNlbmRBdXRvRmluaXNoU2lnbmFsKClgIG1ldGhvZCBpcyBjYWxsZWQuIFRoZSBmaW5hbCB0aW1lb3V0IG1lY2hhbmlzbSAoYF9maW5hbFRpbWVvdXRgIG9wdGlvbilcbiAgICAgKiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbiwgbWVhbmluZyB0aGUgdHJhbnNhY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGJlIGZpbmlzaGVkIHdoZW4gdGhlIGZpbmFsIHRpbWVvdXQgaXNcbiAgICAgKiByZWFjaGVkLCBubyBtYXR0ZXIgd2hhdCB0aGlzIG9wdGlvbiBpcyBjb25maWd1cmVkIHRvLlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICBkZWxheUF1dG9GaW5pc2hVbnRpbFNpZ25hbCA9IGZhbHNlLFxuICApIHtcbiAgICBzdXBlcih0cmFuc2FjdGlvbkNvbnRleHQsIF9pZGxlSHViKTt0aGlzLl9pZGxlSHViID0gX2lkbGVIdWI7dGhpcy5faWRsZVRpbWVvdXQgPSBfaWRsZVRpbWVvdXQ7dGhpcy5fZmluYWxUaW1lb3V0ID0gX2ZpbmFsVGltZW91dDt0aGlzLl9oZWFydGJlYXRJbnRlcnZhbCA9IF9oZWFydGJlYXRJbnRlcnZhbDt0aGlzLl9vblNjb3BlID0gX29uU2NvcGU7XG4gICAgdGhpcy5hY3Rpdml0aWVzID0ge307XG4gICAgdGhpcy5faGVhcnRiZWF0Q291bnRlciA9IDA7XG4gICAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pZGxlVGltZW91dENhbmNlbGVkUGVybWFuZW50bHkgPSBmYWxzZTtcbiAgICB0aGlzLl9iZWZvcmVGaW5pc2hDYWxsYmFja3MgPSBbXTtcbiAgICB0aGlzLl9maW5pc2hSZWFzb24gPSBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TWzRdO1xuICAgIHRoaXMuX2F1dG9GaW5pc2hBbGxvd2VkID0gIWRlbGF5QXV0b0ZpbmlzaFVudGlsU2lnbmFsO1xuXG4gICAgaWYgKF9vblNjb3BlKSB7XG4gICAgICAvLyBXZSBzZXQgdGhlIHRyYW5zYWN0aW9uIGhlcmUgb24gdGhlIHNjb3BlIHNvIGVycm9yIGV2ZW50cyBwaWNrIHVwIHRoZSB0cmFjZVxuICAgICAgLy8gY29udGV4dCBhbmQgYXR0YWNoIGl0IHRvIHRoZSBlcnJvci5cbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgU2V0dGluZyBpZGxlIHRyYW5zYWN0aW9uIG9uIHNjb3BlLiBTcGFuIElEOiAke3RoaXMuc3BhbkNvbnRleHQoKS5zcGFuSWR9YCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIF9pZGxlSHViLmdldFNjb3BlKCkuc2V0U3Bhbih0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlbGF5QXV0b0ZpbmlzaFVudGlsU2lnbmFsKSB7XG4gICAgICB0aGlzLl9yZXN0YXJ0SWRsZVRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0dXMoJ2RlYWRsaW5lX2V4Y2VlZGVkJyk7XG4gICAgICAgIHRoaXMuX2ZpbmlzaFJlYXNvbiA9IElETEVfVFJBTlNBQ1RJT05fRklOSVNIX1JFQVNPTlNbM107XG4gICAgICAgIHRoaXMuZW5kKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5fZmluYWxUaW1lb3V0KTtcbiAgfVxuXG4gIC8qKiB7QGluaGVyaXREb2N9ICovXG4gICBlbmQoZW5kVGltZXN0YW1wKSB7XG4gICAgY29uc3QgZW5kVGltZXN0YW1wSW5TID0gc3BhblV0aWxzLnNwYW5UaW1lSW5wdXRUb1NlY29uZHMoZW5kVGltZXN0YW1wKTtcblxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2aXRpZXMgPSB7fTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGlmICh0aGlzLm9wID09PSAndWkuYWN0aW9uLmNsaWNrJykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoRklOSVNIX1JFQVNPTl9UQUcsIHRoaXMuX2ZpbmlzaFJlYXNvbik7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgaWYgKHRoaXMuc3BhblJlY29yZGVyKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICB1dGlscy5sb2dnZXIubG9nKCdbVHJhY2luZ10gZmluaXNoaW5nIElkbGVUcmFuc2FjdGlvbicsIG5ldyBEYXRlKGVuZFRpbWVzdGFtcEluUyAqIDEwMDApLnRvSVNPU3RyaW5nKCksIHRoaXMub3ApO1xuXG4gICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2JlZm9yZUZpbmlzaENhbGxiYWNrcykge1xuICAgICAgICBjYWxsYmFjayh0aGlzLCBlbmRUaW1lc3RhbXBJblMpO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHRoaXMuc3BhblJlY29yZGVyLnNwYW5zID0gdGhpcy5zcGFuUmVjb3JkZXIuc3BhbnMuZmlsdGVyKChzcGFuKSA9PiB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiwgd2UganVzdCByZXR1cm4gaXRcbiAgICAgICAgaWYgKHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQgPT09IHRoaXMuc3BhbkNvbnRleHQoKS5zcGFuSWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGNhbmNlbCBhbGwgcGVuZGluZyBzcGFucyB3aXRoIHN0YXR1cyBcImNhbmNlbGxlZFwiIHRvIGluZGljYXRlIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdhcyBmaW5pc2hlZCBlYXJseVxuICAgICAgICBpZiAoIXNwYW5VdGlscy5zcGFuVG9KU09OKHNwYW4pLnRpbWVzdGFtcCkge1xuICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKCdjYW5jZWxsZWQnKTtcbiAgICAgICAgICBzcGFuLmVuZChlbmRUaW1lc3RhbXBJblMpO1xuICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgICAgICAgIHV0aWxzLmxvZ2dlci5sb2coJ1tUcmFjaW5nXSBjYW5jZWxsaW5nIHNwYW4gc2luY2UgdHJhbnNhY3Rpb24gZW5kZWQgZWFybHknLCBKU09OLnN0cmluZ2lmeShzcGFuLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhcnRfdGltZXN0YW1wOiBzdGFydFRpbWUsIHRpbWVzdGFtcDogZW5kVGltZSB9ID0gc3BhblV0aWxzLnNwYW5Ub0pTT04oc3Bhbik7XG4gICAgICAgIGNvbnN0IHNwYW5TdGFydGVkQmVmb3JlVHJhbnNhY3Rpb25GaW5pc2ggPSBzdGFydFRpbWUgJiYgc3RhcnRUaW1lIDwgZW5kVGltZXN0YW1wSW5TO1xuXG4gICAgICAgIC8vIEFkZCBhIGRlbHRhIHdpdGggaWRsZSB0aW1lb3V0IHNvIHRoYXQgd2UgcHJldmVudCBmYWxzZSBwb3NpdGl2ZXNcbiAgICAgICAgY29uc3QgdGltZW91dFdpdGhNYXJnaW5PZkVycm9yID0gKHRoaXMuX2ZpbmFsVGltZW91dCArIHRoaXMuX2lkbGVUaW1lb3V0KSAvIDEwMDA7XG4gICAgICAgIGNvbnN0IHNwYW5FbmRlZEJlZm9yZUZpbmFsVGltZW91dCA9IGVuZFRpbWUgJiYgc3RhcnRUaW1lICYmIGVuZFRpbWUgLSBzdGFydFRpbWUgPCB0aW1lb3V0V2l0aE1hcmdpbk9mRXJyb3I7XG5cbiAgICAgICAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQpIHtcbiAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZFNwYW4gPSBKU09OLnN0cmluZ2lmeShzcGFuLCB1bmRlZmluZWQsIDIpO1xuICAgICAgICAgIGlmICghc3BhblN0YXJ0ZWRCZWZvcmVUcmFuc2FjdGlvbkZpbmlzaCkge1xuICAgICAgICAgICAgdXRpbHMubG9nZ2VyLmxvZygnW1RyYWNpbmddIGRpc2NhcmRpbmcgU3BhbiBzaW5jZSBpdCBoYXBwZW5lZCBhZnRlciBUcmFuc2FjdGlvbiB3YXMgZmluaXNoZWQnLCBzdHJpbmdpZmllZFNwYW4pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXNwYW5FbmRlZEJlZm9yZUZpbmFsVGltZW91dCkge1xuICAgICAgICAgICAgdXRpbHMubG9nZ2VyLmxvZygnW1RyYWNpbmddIGRpc2NhcmRpbmcgU3BhbiBzaW5jZSBpdCBmaW5pc2hlZCBhZnRlciBUcmFuc2FjdGlvbiBmaW5hbCB0aW1lb3V0Jywgc3RyaW5naWZpZWRTcGFuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3BhblN0YXJ0ZWRCZWZvcmVUcmFuc2FjdGlvbkZpbmlzaCAmJiBzcGFuRW5kZWRCZWZvcmVGaW5hbFRpbWVvdXQ7XG4gICAgICB9KTtcblxuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKCdbVHJhY2luZ10gZmx1c2hpbmcgSWRsZVRyYW5zYWN0aW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW1RyYWNpbmddIE5vIGFjdGl2ZSBJZGxlVHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyBpZiBgdGhpcy5fb25TY29wZWAgaXMgYHRydWVgLCB0aGUgdHJhbnNhY3Rpb24gcHV0IGl0c2VsZiBvbiB0aGUgc2NvcGUgd2hlbiBpdCBzdGFydGVkXG4gICAgaWYgKHRoaXMuX29uU2NvcGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLl9pZGxlSHViLmdldFNjb3BlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGlmIChzY29wZS5nZXRUcmFuc2FjdGlvbigpID09PSB0aGlzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBzY29wZS5zZXRTcGFuKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmVuZChlbmRUaW1lc3RhbXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gZmluaXNoZXMuXG4gICAqIFVzZWZ1bCBmb3IgY2xlYW51cCBvciBpZiB5b3Ugd2FudCB0byBhZGQgYW55IGFkZGl0aW9uYWwgc3BhbnMgYmFzZWQgb24gY3VycmVudCBjb250ZXh0LlxuICAgKlxuICAgKiBUaGlzIGlzIGV4cG9zZWQgYmVjYXVzZSB1c2VycyBoYXZlIG5vIG90aGVyIHdheSBvZiBydW5uaW5nIHNvbWV0aGluZyBiZWZvcmUgYW4gaWRsZSB0cmFuc2FjdGlvblxuICAgKiBmaW5pc2hlcy5cbiAgICovXG4gICByZWdpc3RlckJlZm9yZUZpbmlzaENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fYmVmb3JlRmluaXNoQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgaW5pdFNwYW5SZWNvcmRlcihtYXhsZW4pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBpZiAoIXRoaXMuc3BhblJlY29yZGVyKSB7XG4gICAgICBjb25zdCBwdXNoQWN0aXZpdHkgPSAoaWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3B1c2hBY3Rpdml0eShpZCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcG9wQWN0aXZpdHkgPSAoaWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BvcEFjdGl2aXR5KGlkKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgdGhpcy5zcGFuUmVjb3JkZXIgPSBuZXcgSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyKHB1c2hBY3Rpdml0eSwgcG9wQWN0aXZpdHksIHRoaXMuc3BhbkNvbnRleHQoKS5zcGFuSWQsIG1heGxlbik7XG5cbiAgICAgIC8vIFN0YXJ0IGhlYXJ0YmVhdCBzbyB0aGF0IHRyYW5zYWN0aW9ucyBkbyBub3QgcnVuIGZvcmV2ZXIuXG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1N0YXJ0aW5nIGhlYXJ0YmVhdCcpO1xuICAgICAgdGhpcy5fcGluZ0hlYXJ0YmVhdCgpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0aGlzLnNwYW5SZWNvcmRlci5hZGQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgZXhpc3RpbmcgaWRsZSB0aW1lb3V0LCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqIEBwYXJhbSByZXN0YXJ0T25DaGlsZFNwYW5DaGFuZ2UgRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGZhbHNlIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGxhc3QgY2hpbGQgc3Bhbi5cbiAgICovXG4gICBjYW5jZWxJZGxlVGltZW91dChcbiAgICBlbmRUaW1lc3RhbXAsXG4gICAge1xuICAgICAgcmVzdGFydE9uQ2hpbGRTcGFuQ2hhbmdlLFxuICAgIH1cblxuID0ge1xuICAgICAgcmVzdGFydE9uQ2hpbGRTcGFuQ2hhbmdlOiB0cnVlLFxuICAgIH0sXG4gICkge1xuICAgIHRoaXMuX2lkbGVUaW1lb3V0Q2FuY2VsZWRQZXJtYW5lbnRseSA9IHJlc3RhcnRPbkNoaWxkU3BhbkNoYW5nZSA9PT0gZmFsc2U7XG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lb3V0SUQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pZGxlVGltZW91dElEKTtcbiAgICAgIHRoaXMuX2lkbGVUaW1lb3V0SUQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9pZGxlVGltZW91dENhbmNlbGVkUGVybWFuZW50bHkpIHtcbiAgICAgICAgdGhpcy5fZmluaXNoUmVhc29uID0gSURMRV9UUkFOU0FDVElPTl9GSU5JU0hfUkVBU09OU1s1XTtcbiAgICAgICAgdGhpcy5lbmQoZW5kVGltZXN0YW1wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVtcG9yYXJ5IG1ldGhvZCB1c2VkIHRvIGV4dGVybmFsbHkgc2V0IHRoZSB0cmFuc2FjdGlvbidzIGBmaW5pc2hSZWFzb25gXG4gICAqXG4gICAqICoqIFdBUk5JTkcqKlxuICAgKiBUaGlzIGlzIGZvciB0aGUgcHVycG9zZSBvZiBleHBlcmltZW50YXRpb24gb25seSBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSwgZG8gbm90IHVzZSFcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqXG4gICAqL1xuICAgc2V0RmluaXNoUmVhc29uKHJlYXNvbikge1xuICAgIHRoaXMuX2ZpbmlzaFJlYXNvbiA9IHJlYXNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIHRoZSBJZGxlVHJhbnNhY3Rpb24gdG8gYXV0b21hdGljYWxseSBlbmQgaXRzZWxmIHZpYSB0aGUgaWRsZSB0aW1lb3V0IGFuZCBoZWFydGJlYXQgbWVjaGFuaXNtcyB3aGVuIHRoZSBgZGVsYXlBdXRvRmluaXNoVW50aWxTaWduYWxgIG9wdGlvbiB3YXMgc2V0IHRvIGB0cnVlYC5cbiAgICovXG4gICBzZW5kQXV0b0ZpbmlzaFNpZ25hbCgpIHtcbiAgICBpZiAoIXRoaXMuX2F1dG9GaW5pc2hBbGxvd2VkKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1tUcmFjaW5nXSBSZWNlaXZlZCBmaW5pc2ggc2lnbmFsIGZvciBpZGxlIHRyYW5zYWN0aW9uLicpO1xuICAgICAgdGhpcy5fcmVzdGFydElkbGVUaW1lb3V0KCk7XG4gICAgICB0aGlzLl9hdXRvRmluaXNoQWxsb3dlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RhcnRzIGlkbGUgdGltZW91dCwgaWYgdGhlcmUgaXMgbm8gcnVubmluZyBpZGxlIHRpbWVvdXQgaXQgd2lsbCBzdGFydCBvbmUuXG4gICAqL1xuICAgX3Jlc3RhcnRJZGxlVGltZW91dChlbmRUaW1lc3RhbXApIHtcbiAgICB0aGlzLmNhbmNlbElkbGVUaW1lb3V0KCk7XG4gICAgdGhpcy5faWRsZVRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maW5pc2hlZCAmJiBPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9maW5pc2hSZWFzb24gPSBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TWzFdO1xuICAgICAgICB0aGlzLmVuZChlbmRUaW1lc3RhbXApO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2lkbGVUaW1lb3V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0cmFja2luZyBhIHNwZWNpZmljIGFjdGl2aXR5LlxuICAgKiBAcGFyYW0gc3BhbklkIFRoZSBzcGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgYWN0aXZpdHlcbiAgICovXG4gICBfcHVzaEFjdGl2aXR5KHNwYW5JZCkge1xuICAgIHRoaXMuY2FuY2VsSWRsZVRpbWVvdXQodW5kZWZpbmVkLCB7IHJlc3RhcnRPbkNoaWxkU3BhbkNoYW5nZTogIXRoaXMuX2lkbGVUaW1lb3V0Q2FuY2VsZWRQZXJtYW5lbnRseSB9KTtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYFtUcmFjaW5nXSBwdXNoQWN0aXZpdHk6ICR7c3BhbklkfWApO1xuICAgIHRoaXMuYWN0aXZpdGllc1tzcGFuSWRdID0gdHJ1ZTtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1tUcmFjaW5nXSBuZXcgYWN0aXZpdGllcyBjb3VudCcsIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYWN0aXZpdHkgZnJvbSB1c2FnZVxuICAgKiBAcGFyYW0gc3BhbklkIFRoZSBzcGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgYWN0aXZpdHlcbiAgICovXG4gICBfcG9wQWN0aXZpdHkoc3BhbklkKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZpdGllc1tzcGFuSWRdKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYFtUcmFjaW5nXSBwb3BBY3Rpdml0eSAke3NwYW5JZH1gKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2aXRpZXNbc3BhbklkXTtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW1RyYWNpbmddIG5ldyBhY3Rpdml0aWVzIGNvdW50JywgT2JqZWN0LmtleXModGhpcy5hY3Rpdml0aWVzKS5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZW5kVGltZXN0YW1wID0gdXRpbHMudGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgICBpZiAodGhpcy5faWRsZVRpbWVvdXRDYW5jZWxlZFBlcm1hbmVudGx5KSB7XG4gICAgICAgIGlmICh0aGlzLl9hdXRvRmluaXNoQWxsb3dlZCkge1xuICAgICAgICAgIHRoaXMuX2ZpbmlzaFJlYXNvbiA9IElETEVfVFJBTlNBQ1RJT05fRklOSVNIX1JFQVNPTlNbNV07XG4gICAgICAgICAgdGhpcy5lbmQoZW5kVGltZXN0YW1wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBhZGQgdGhlIHRpbWVvdXQgaGVyZSB0byBoYXZlIHRoZSByZWFsIGVuZHRpbWVzdGFtcCBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgLy8gUmVtZW1iZXIgdGltZXN0YW1wSW5TZWNvbmRzIGlzIGluIHNlY29uZHMsIHRpbWVvdXQgaXMgaW4gbXNcbiAgICAgICAgdGhpcy5fcmVzdGFydElkbGVUaW1lb3V0KGVuZFRpbWVzdGFtcCArIHRoaXMuX2lkbGVUaW1lb3V0IC8gMTAwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGVudHJpZXMgb2YgdGhpcy5hY3Rpdml0aWVzIGFyZSBub3QgY2hhbmdpbmcgZm9yIDMgYmVhdHMuXG4gICAqIElmIHRoaXMgb2NjdXJzIHdlIGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuICAgX2JlYXQoKSB7XG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBydW5uaW5nIGhlYXJ0YmVhdCBpZiB0aGUgaWRsZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC5cbiAgICBpZiAodGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFydGJlYXRTdHJpbmcgPSBPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmpvaW4oJycpO1xuXG4gICAgaWYgKGhlYXJ0YmVhdFN0cmluZyA9PT0gdGhpcy5fcHJldkhlYXJ0YmVhdFN0cmluZykge1xuICAgICAgdGhpcy5faGVhcnRiZWF0Q291bnRlcisrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oZWFydGJlYXRDb3VudGVyID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLl9wcmV2SGVhcnRiZWF0U3RyaW5nID0gaGVhcnRiZWF0U3RyaW5nO1xuXG4gICAgaWYgKHRoaXMuX2hlYXJ0YmVhdENvdW50ZXIgPj0gMykge1xuICAgICAgaWYgKHRoaXMuX2F1dG9GaW5pc2hBbGxvd2VkKSB7XG4gICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW1RyYWNpbmddIFRyYW5zYWN0aW9uIGZpbmlzaGVkIGJlY2F1c2Ugb2Ygbm8gY2hhbmdlIGZvciAzIGhlYXJ0IGJlYXRzJyk7XG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKCdkZWFkbGluZV9leGNlZWRlZCcpO1xuICAgICAgICB0aGlzLl9maW5pc2hSZWFzb24gPSBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TWzBdO1xuICAgICAgICB0aGlzLmVuZCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9waW5nSGVhcnRiZWF0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBpbmdzIHRoZSBoZWFydGJlYXRcbiAgICovXG4gICBfcGluZ0hlYXJ0YmVhdCgpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYHBpbmdpbmcgSGVhcnRiZWF0IC0+IGN1cnJlbnQgY291bnRlcjogJHt0aGlzLl9oZWFydGJlYXRDb3VudGVyfWApO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fYmVhdCgpO1xuICAgIH0sIHRoaXMuX2hlYXJ0YmVhdEludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnRzLklkbGVUcmFuc2FjdGlvbiA9IElkbGVUcmFuc2FjdGlvbjtcbmV4cG9ydHMuSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyID0gSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyO1xuZXhwb3J0cy5UUkFDSU5HX0RFRkFVTFRTID0gVFJBQ0lOR19ERUZBVUxUUztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkbGV0cmFuc2FjdGlvbi5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IHNlbWFudGljQXR0cmlidXRlcyA9IHJlcXVpcmUoJy4uL3NlbWFudGljQXR0cmlidXRlcy5qcycpO1xuY29uc3QgaGFzVHJhY2luZ0VuYWJsZWQgPSByZXF1aXJlKCcuLi91dGlscy9oYXNUcmFjaW5nRW5hYmxlZC5qcycpO1xuY29uc3Qgc3BhblV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvc3BhblV0aWxzLmpzJyk7XG5cbi8qKlxuICogTWFrZXMgYSBzYW1wbGluZyBkZWNpc2lvbiBmb3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uIGFuZCBzdG9yZXMgaXQgb24gdGhlIHRyYW5zYWN0aW9uLlxuICpcbiAqIENhbGxlZCBldmVyeSB0aW1lIGEgdHJhbnNhY3Rpb24gaXMgY3JlYXRlZC4gT25seSB0cmFuc2FjdGlvbnMgd2hpY2ggZW1lcmdlIHdpdGggYSBgc2FtcGxlZGAgdmFsdWUgb2YgYHRydWVgIHdpbGwgYmVcbiAqIHNlbnQgdG8gU2VudHJ5LlxuICpcbiAqIFRoaXMgbWV0aG9kIG11dHRlcyB0aGUgZ2l2ZW4gYHRyYW5zYWN0aW9uYCBhbmQgd2lsbCBzZXQgdGhlIGBzYW1wbGVkYCB2YWx1ZSBvbiBpdC5cbiAqIEl0IHJldHVybnMgdGhlIHNhbWUgdHJhbnNhY3Rpb24sIGZvciBjb252ZW5pZW5jZS5cbiAqL1xuZnVuY3Rpb24gc2FtcGxlVHJhbnNhY3Rpb24oXG4gIHRyYW5zYWN0aW9uLFxuICBvcHRpb25zLFxuICBzYW1wbGluZ0NvbnRleHQsXG4pIHtcbiAgLy8gbm90aGluZyB0byBkbyBpZiB0cmFjaW5nIGlzIG5vdCBlbmFibGVkXG4gIGlmICghaGFzVHJhY2luZ0VuYWJsZWQuaGFzVHJhY2luZ0VuYWJsZWQob3B0aW9ucykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLy8gaWYgdGhlIHVzZXIgaGFzIGZvcmNlZCBhIHNhbXBsaW5nIGRlY2lzaW9uIGJ5IHBhc3NpbmcgYSBgc2FtcGxlZGAgdmFsdWUgaW4gdGhlaXIgdHJhbnNhY3Rpb24gY29udGV4dCwgZ28gd2l0aCB0aGF0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBpZiAodHJhbnNhY3Rpb24uc2FtcGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdHJhbnNhY3Rpb24uc2V0QXR0cmlidXRlKHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NBTVBMRV9SQVRFLCBOdW1iZXIodHJhbnNhY3Rpb24uc2FtcGxlZCkpO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIHdlIHdvdWxkIGhhdmUgYmFpbGVkIGFscmVhZHkgaWYgbmVpdGhlciBgdHJhY2VzU2FtcGxlcmAgbm9yIGB0cmFjZXNTYW1wbGVSYXRlYCBub3IgYGVuYWJsZVRyYWNpbmdgIHdlcmUgZGVmaW5lZCwgc28gb25lIG9mIHRoZXNlIHNob3VsZFxuICAvLyB3b3JrOyBwcmVmZXIgdGhlIGhvb2sgaWYgc29cbiAgbGV0IHNhbXBsZVJhdGU7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFjZXNTYW1wbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2FtcGxlUmF0ZSA9IG9wdGlvbnMudHJhY2VzU2FtcGxlcihzYW1wbGluZ0NvbnRleHQpO1xuICAgIHRyYW5zYWN0aW9uLnNldEF0dHJpYnV0ZShzZW1hbnRpY0F0dHJpYnV0ZXMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURSwgTnVtYmVyKHNhbXBsZVJhdGUpKTtcbiAgfSBlbHNlIGlmIChzYW1wbGluZ0NvbnRleHQucGFyZW50U2FtcGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2FtcGxlUmF0ZSA9IHNhbXBsaW5nQ29udGV4dC5wYXJlbnRTYW1wbGVkO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnRyYWNlc1NhbXBsZVJhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2FtcGxlUmF0ZSA9IG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZTtcbiAgICB0cmFuc2FjdGlvbi5zZXRBdHRyaWJ1dGUoc2VtYW50aWNBdHRyaWJ1dGVzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEUsIE51bWJlcihzYW1wbGVSYXRlKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2hlbiBgZW5hYmxlVHJhY2luZyA9PT0gdHJ1ZWAsIHdlIHVzZSBhIHNhbXBsZSByYXRlIG9mIDEwMCVcbiAgICBzYW1wbGVSYXRlID0gMTtcbiAgICB0cmFuc2FjdGlvbi5zZXRBdHRyaWJ1dGUoc2VtYW50aWNBdHRyaWJ1dGVzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEUsIHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgLy8gU2luY2UgdGhpcyBpcyBjb21pbmcgZnJvbSB0aGUgdXNlciAob3IgZnJvbSBhIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSB1c2VyKSwgd2hvIGtub3dzIHdoYXQgd2UgbWlnaHQgZ2V0LiAoVGhlXG4gIC8vIG9ubHkgdmFsaWQgdmFsdWVzIGFyZSBib29sZWFucyBvciBudW1iZXJzIGJldHdlZW4gMCBhbmQgMS4pXG4gIGlmICghaXNWYWxpZFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIG9mIGludmFsaWQgc2FtcGxlIHJhdGUuJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdHJhbnNhY3Rpb24uc2FtcGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5lZCAwIChvciBmYWxzZSksIG9yIGlmIGB0cmFjZXNTYW1wbGVSYXRlYCBpcyAwLCBpdCdzIGEgc2lnbiB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIGRyb3BwZWRcbiAgaWYgKCFzYW1wbGVSYXRlKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgdXRpbHMubG9nZ2VyLmxvZyhcbiAgICAgICAgYFtUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2UgJHtcbiAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy50cmFjZXNTYW1wbGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/ICd0cmFjZXNTYW1wbGVyIHJldHVybmVkIDAgb3IgZmFsc2UnXG4gICAgICAgICAgICA6ICdhIG5lZ2F0aXZlIHNhbXBsaW5nIGRlY2lzaW9uIHdhcyBpbmhlcml0ZWQgb3IgdHJhY2VzU2FtcGxlUmF0ZSBpcyBzZXQgdG8gMCdcbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHRyYW5zYWN0aW9uLnNhbXBsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvLyBOb3cgd2Ugcm9sbCB0aGUgZGljZS4gTWF0aC5yYW5kb20gaXMgaW5jbHVzaXZlIG9mIDAsIGJ1dCBub3Qgb2YgMSwgc28gc3RyaWN0IDwgaXMgc2FmZSBoZXJlLiBJbiBjYXNlIHNhbXBsZVJhdGUgaXNcbiAgLy8gYSBib29sZWFuLCB0aGUgPCBjb21wYXJpc29uIHdpbGwgY2F1c2UgaXQgdG8gYmUgYXV0b21hdGljYWxseSBjYXN0IHRvIDEgaWYgaXQncyB0cnVlIGFuZCAwIGlmIGl0J3MgZmFsc2UuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gTWF0aC5yYW5kb20oKSA8IChzYW1wbGVSYXRlICk7XG5cbiAgLy8gaWYgd2UncmUgbm90IGdvaW5nIHRvIGtlZXAgaXQsIHdlJ3JlIGRvbmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGlmICghdHJhbnNhY3Rpb24uc2FtcGxlZCkge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgIHV0aWxzLmxvZ2dlci5sb2coXG4gICAgICAgIGBbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gJHtOdW1iZXIoXG4gICAgICAgICAgc2FtcGxlUmF0ZSxcbiAgICAgICAgKX0pYCxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIHV0aWxzLmxvZ2dlci5sb2coYFtUcmFjaW5nXSBzdGFydGluZyAke3RyYW5zYWN0aW9uLm9wfSB0cmFuc2FjdGlvbiAtICR7c3BhblV0aWxzLnNwYW5Ub0pTT04odHJhbnNhY3Rpb24pLmRlc2NyaXB0aW9ufWApO1xuICByZXR1cm4gdHJhbnNhY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBnaXZlbiBzYW1wbGUgcmF0ZSB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgdHlwZSBhbmQgdmFsdWUgKGEgYm9vbGVhbiwgb3IgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxKS5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFNhbXBsZVJhdGUocmF0ZSkge1xuICAvLyB3ZSBuZWVkIHRvIGNoZWNrIE5hTiBleHBsaWNpdGx5IGJlY2F1c2UgaXQncyBvZiB0eXBlICdudW1iZXInIGFuZCB0aGVyZWZvcmUgd291bGRuJ3QgZ2V0IGNhdWdodCBieSB0aGlzIHR5cGVjaGVja1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBpZiAodXRpbHMuaXNOYU4ocmF0ZSkgfHwgISh0eXBlb2YgcmF0ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHJhdGUgPT09ICdib29sZWFuJykpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICB1dGlscy5sb2dnZXIud2FybihcbiAgICAgICAgYFtUcmFjaW5nXSBHaXZlbiBzYW1wbGUgcmF0ZSBpcyBpbnZhbGlkLiBTYW1wbGUgcmF0ZSBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuIEdvdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHJhdGUsXG4gICAgICAgICl9IG9mIHR5cGUgJHtKU09OLnN0cmluZ2lmeSh0eXBlb2YgcmF0ZSl9LmAsXG4gICAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGluIGNhc2Ugc2FtcGxlUmF0ZSBpcyBhIGJvb2xlYW4sIGl0IHdpbGwgZ2V0IGF1dG9tYXRpY2FsbHkgY2FzdCB0byAxIGlmIGl0J3MgdHJ1ZSBhbmQgMCBpZiBpdCdzIGZhbHNlXG4gIGlmIChyYXRlIDwgMCB8fCByYXRlID4gMSkge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgIHV0aWxzLmxvZ2dlci53YXJuKGBbVHJhY2luZ10gR2l2ZW4gc2FtcGxlIHJhdGUgaXMgaW52YWxpZC4gU2FtcGxlIHJhdGUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIEdvdCAke3JhdGV9LmApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5pc1ZhbGlkU2FtcGxlUmF0ZSA9IGlzVmFsaWRTYW1wbGVSYXRlO1xuZXhwb3J0cy5zYW1wbGVUcmFuc2FjdGlvbiA9IHNhbXBsZVRyYW5zYWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxpbmcuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBodWIgPSByZXF1aXJlKCcuLi9odWIuanMnKTtcbmNvbnN0IHNwYW5VdGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL3NwYW5VdGlscy5qcycpO1xuY29uc3QgZXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMuanMnKTtcbmNvbnN0IGlkbGV0cmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vaWRsZXRyYW5zYWN0aW9uLmpzJyk7XG5jb25zdCBzYW1wbGluZyA9IHJlcXVpcmUoJy4vc2FtcGxpbmcuanMnKTtcbmNvbnN0IHRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi90cmFuc2FjdGlvbi5qcycpO1xuXG4vKiogUmV0dXJucyBhbGwgdHJhY2UgaGVhZGVycyB0aGF0IGFyZSBjdXJyZW50bHkgb24gdGhlIHRvcCBzY29wZS4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gdHJhY2VIZWFkZXJzKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBzcGFuID0gc2NvcGUuZ2V0U3BhbigpO1xuXG4gIHJldHVybiBzcGFuXG4gICAgPyB7XG4gICAgICAgICdzZW50cnktdHJhY2UnOiBzcGFuVXRpbHMuc3BhblRvVHJhY2VIZWFkZXIoc3BhbiksXG4gICAgICB9XG4gICAgOiB7fTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYW5zYWN0aW9uIGFuZCBhZGRzIGEgc2FtcGxpbmcgZGVjaXNpb24gaWYgaXQgZG9lc24ndCB5ZXQgaGF2ZSBvbmUuXG4gKlxuICogVGhlIEh1Yi5zdGFydFRyYW5zYWN0aW9uIG1ldGhvZCBkZWxlZ2F0ZXMgdG8gdGhpcyBtZXRob2QgdG8gZG8gaXRzIHdvcmssIHBhc3NpbmcgdGhlIEh1YiBpbnN0YW5jZSBpbiBhcyBgdGhpc2AsIGFzIGlmXG4gKiBpdCBoYWQgYmVlbiBjYWxsZWQgb24gdGhlIGh1YiBkaXJlY3RseS4gRXhpc3RzIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gYmUgaW5qZWN0ZWQgaW50byB0aGUgY2xhc3MgYXMgYW5cbiAqIFwiZXh0ZW5zaW9uIG1ldGhvZC5cIlxuICpcbiAqIEBwYXJhbSB0aGlzOiBUaGUgSHViIHN0YXJ0aW5nIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHRyYW5zYWN0aW9uQ29udGV4dDogRGF0YSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBDdXN0b21TYW1wbGluZ0NvbnRleHQ6IE9wdGlvbmFsIGRhdGEgdG8gYmUgcHJvdmlkZWQgdG8gdGhlIGB0cmFjZXNTYW1wbGVyYCBmdW5jdGlvbiAoaWYgYW55KVxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgdHJhbnNhY3Rpb25cbiAqXG4gKiBAc2VlIHtAbGluayBIdWIuc3RhcnRUcmFuc2FjdGlvbn1cbiAqL1xuZnVuY3Rpb24gX3N0YXJ0VHJhbnNhY3Rpb24oXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gIHRyYW5zYWN0aW9uQ29udGV4dCxcbiAgY3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpO1xuICBjb25zdCBvcHRpb25zID0gKGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpKSB8fCB7fTtcblxuICBjb25zdCBjb25maWdJbnN0cnVtZW50ZXIgPSBvcHRpb25zLmluc3RydW1lbnRlciB8fCAnc2VudHJ5JztcbiAgY29uc3QgdHJhbnNhY3Rpb25JbnN0cnVtZW50ZXIgPSB0cmFuc2FjdGlvbkNvbnRleHQuaW5zdHJ1bWVudGVyIHx8ICdzZW50cnknO1xuXG4gIGlmIChjb25maWdJbnN0cnVtZW50ZXIgIT09IHRyYW5zYWN0aW9uSW5zdHJ1bWVudGVyKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgdXRpbHMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgQSB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCB3aXRoIGluc3RydW1lbnRlcj1cXGAke3RyYW5zYWN0aW9uSW5zdHJ1bWVudGVyfVxcYCwgYnV0IHRoZSBTREsgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBcXGAke2NvbmZpZ0luc3RydW1lbnRlcn1cXGAgaW5zdHJ1bWVudGVyLlxuVGhlIHRyYW5zYWN0aW9uIHdpbGwgbm90IGJlIHNhbXBsZWQuIFBsZWFzZSB1c2UgdGhlICR7Y29uZmlnSW5zdHJ1bWVudGVyfSBpbnN0cnVtZW50YXRpb24gdG8gc3RhcnQgdHJhbnNhY3Rpb25zLmAsXG4gICAgICApO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdHJhbnNhY3Rpb25Db250ZXh0LnNhbXBsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBsZXQgdHJhbnNhY3Rpb24kMSA9IG5ldyB0cmFuc2FjdGlvbi5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbkNvbnRleHQsIHRoaXMpO1xuICB0cmFuc2FjdGlvbiQxID0gc2FtcGxpbmcuc2FtcGxlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24kMSwgb3B0aW9ucywge1xuICAgIG5hbWU6IHRyYW5zYWN0aW9uQ29udGV4dC5uYW1lLFxuICAgIHBhcmVudFNhbXBsZWQ6IHRyYW5zYWN0aW9uQ29udGV4dC5wYXJlbnRTYW1wbGVkLFxuICAgIHRyYW5zYWN0aW9uQ29udGV4dCxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIC4uLnRyYW5zYWN0aW9uQ29udGV4dC5kYXRhLFxuICAgICAgLi4udHJhbnNhY3Rpb25Db250ZXh0LmF0dHJpYnV0ZXMsXG4gICAgfSxcbiAgICAuLi5jdXN0b21TYW1wbGluZ0NvbnRleHQsXG4gIH0pO1xuICBpZiAodHJhbnNhY3Rpb24kMS5pc1JlY29yZGluZygpKSB7XG4gICAgdHJhbnNhY3Rpb24kMS5pbml0U3BhblJlY29yZGVyKG9wdGlvbnMuX2V4cGVyaW1lbnRzICYmIChvcHRpb25zLl9leHBlcmltZW50cy5tYXhTcGFucyApKTtcbiAgfVxuICBpZiAoY2xpZW50ICYmIGNsaWVudC5lbWl0KSB7XG4gICAgY2xpZW50LmVtaXQoJ3N0YXJ0VHJhbnNhY3Rpb24nLCB0cmFuc2FjdGlvbiQxKTtcbiAgfVxuICByZXR1cm4gdHJhbnNhY3Rpb24kMTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgbmV3IGlkbGUgdHJhbnNhY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0SWRsZVRyYW5zYWN0aW9uKFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaHViLFxuICB0cmFuc2FjdGlvbkNvbnRleHQsXG4gIGlkbGVUaW1lb3V0LFxuICBmaW5hbFRpbWVvdXQsXG4gIG9uU2NvcGUsXG4gIGN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbiAgaGVhcnRiZWF0SW50ZXJ2YWwsXG4gIGRlbGF5QXV0b0ZpbmlzaFVudGlsU2lnbmFsID0gZmFsc2UsXG4pIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IGNsaWVudCA9IGh1Yi5nZXRDbGllbnQoKTtcbiAgY29uc3Qgb3B0aW9ucyA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGxldCB0cmFuc2FjdGlvbiA9IG5ldyBpZGxldHJhbnNhY3Rpb24uSWRsZVRyYW5zYWN0aW9uKFxuICAgIHRyYW5zYWN0aW9uQ29udGV4dCxcbiAgICBodWIsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAgZmluYWxUaW1lb3V0LFxuICAgIGhlYXJ0YmVhdEludGVydmFsLFxuICAgIG9uU2NvcGUsXG4gICAgZGVsYXlBdXRvRmluaXNoVW50aWxTaWduYWwsXG4gICk7XG4gIHRyYW5zYWN0aW9uID0gc2FtcGxpbmcuc2FtcGxlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIG9wdGlvbnMsIHtcbiAgICBuYW1lOiB0cmFuc2FjdGlvbkNvbnRleHQubmFtZSxcbiAgICBwYXJlbnRTYW1wbGVkOiB0cmFuc2FjdGlvbkNvbnRleHQucGFyZW50U2FtcGxlZCxcbiAgICB0cmFuc2FjdGlvbkNvbnRleHQsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAuLi50cmFuc2FjdGlvbkNvbnRleHQuZGF0YSxcbiAgICAgIC4uLnRyYW5zYWN0aW9uQ29udGV4dC5hdHRyaWJ1dGVzLFxuICAgIH0sXG4gICAgLi4uY3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuICB9KTtcbiAgaWYgKHRyYW5zYWN0aW9uLmlzUmVjb3JkaW5nKCkpIHtcbiAgICB0cmFuc2FjdGlvbi5pbml0U3BhblJlY29yZGVyKG9wdGlvbnMuX2V4cGVyaW1lbnRzICYmIChvcHRpb25zLl9leHBlcmltZW50cy5tYXhTcGFucyApKTtcbiAgfVxuICBpZiAoY2xpZW50ICYmIGNsaWVudC5lbWl0KSB7XG4gICAgY2xpZW50LmVtaXQoJ3N0YXJ0VHJhbnNhY3Rpb24nLCB0cmFuc2FjdGlvbik7XG4gIH1cbiAgcmV0dXJuIHRyYW5zYWN0aW9uO1xufVxuXG4vKipcbiAqIEFkZHMgdHJhY2luZyBleHRlbnNpb25zIHRvIHRoZSBnbG9iYWwgaHViLlxuICovXG5mdW5jdGlvbiBhZGRUcmFjaW5nRXh0ZW5zaW9ucygpIHtcbiAgY29uc3QgY2FycmllciA9IGh1Yi5nZXRNYWluQ2FycmllcigpO1xuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXykge1xuICAgIHJldHVybjtcbiAgfVxuICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucyA9IGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zIHx8IHt9O1xuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLnN0YXJ0VHJhbnNhY3Rpb24pIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy5zdGFydFRyYW5zYWN0aW9uID0gX3N0YXJ0VHJhbnNhY3Rpb247XG4gIH1cbiAgaWYgKCFjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy50cmFjZUhlYWRlcnMpIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy50cmFjZUhlYWRlcnMgPSB0cmFjZUhlYWRlcnM7XG4gIH1cblxuICBlcnJvcnMucmVnaXN0ZXJFcnJvckluc3RydW1lbnRhdGlvbigpO1xufVxuXG5leHBvcnRzLmFkZFRyYWNpbmdFeHRlbnNpb25zID0gYWRkVHJhY2luZ0V4dGVuc2lvbnM7XG5leHBvcnRzLnN0YXJ0SWRsZVRyYW5zYWN0aW9uID0gc3RhcnRJZGxlVHJhbnNhY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odWJleHRlbnNpb25zLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcblxuLyoqXG4gKiBBZGRzIGEgbWVhc3VyZW1lbnQgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIHRyYW5zYWN0aW9uLlxuICovXG5mdW5jdGlvbiBzZXRNZWFzdXJlbWVudChuYW1lLCB2YWx1ZSwgdW5pdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSB1dGlscy5nZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFuc2FjdGlvbi5zZXRNZWFzdXJlbWVudChuYW1lLCB2YWx1ZSwgdW5pdCk7XG4gIH1cbn1cblxuZXhwb3J0cy5zZXRNZWFzdXJlbWVudCA9IHNldE1lYXN1cmVtZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVhc3VyZW1lbnQuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG4vKipcbiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS5cbiAqIE1lcmdlIHdpdGggZXhpc3RpbmcgZGF0YSBpZiBhbnkuXG4gKiovXG5mdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykge1xuICBpZiAoIXNka0luZm8pIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cbiAgZXZlbnQuc2RrID0gZXZlbnQuc2RrIHx8IHt9O1xuICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTtcbiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247XG4gIGV2ZW50LnNkay5pbnRlZ3JhdGlvbnMgPSBbLi4uKGV2ZW50LnNkay5pbnRlZ3JhdGlvbnMgfHwgW10pLCAuLi4oc2RrSW5mby5pbnRlZ3JhdGlvbnMgfHwgW10pXTtcbiAgZXZlbnQuc2RrLnBhY2thZ2VzID0gWy4uLihldmVudC5zZGsucGFja2FnZXMgfHwgW10pLCAuLi4oc2RrSW5mby5wYWNrYWdlcyB8fCBbXSldO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovXG5mdW5jdGlvbiBjcmVhdGVTZXNzaW9uRW52ZWxvcGUoXG4gIHNlc3Npb24sXG4gIGRzbixcbiAgbWV0YWRhdGEsXG4gIHR1bm5lbCxcbikge1xuICBjb25zdCBzZGtJbmZvID0gdXRpbHMuZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlcihtZXRhZGF0YSk7XG4gIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IHtcbiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgLi4uKHNka0luZm8gJiYgeyBzZGs6IHNka0luZm8gfSksXG4gICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogdXRpbHMuZHNuVG9TdHJpbmcoZHNuKSB9KSxcbiAgfTtcblxuICBjb25zdCBlbnZlbG9wZUl0ZW0gPVxuICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTtcblxuICByZXR1cm4gdXRpbHMuY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZW52ZWxvcGVJdGVtXSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGUoXG4gIGV2ZW50LFxuICBkc24sXG4gIG1ldGFkYXRhLFxuICB0dW5uZWwsXG4pIHtcbiAgY29uc3Qgc2RrSW5mbyA9IHV0aWxzLmdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpO1xuXG4gIC8qXG4gICAgTm90ZTogRHVlIHRvIFRTLCBldmVudC50eXBlIG1heSBiZSBgcmVwbGF5X2V2ZW50YCwgdGhlb3JldGljYWxseS5cbiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLFxuICAgIGFuZCB3ZSdkIGhhdmUgdG8gYWRqdXQgYSBsb29vdCBvZiB0eXBlcyB0byBtYWtlIHRoaXMgd29yayBwcm9wZXJseS5cbiAgICBXZSB3YW50IHRvIGF2b2lkIGNhc3RpbmcgdGhpcyBhcm91bmQsIGFzIHRoYXQgY291bGQgbGVhZCB0byBidWdzIChlLmcuIHdoZW4gd2UgYWRkIGFub3RoZXIgdHlwZSlcbiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuXG4gICovXG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gJ3JlcGxheV9ldmVudCcgPyBldmVudC50eXBlIDogJ2V2ZW50JztcblxuICBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgbWV0YWRhdGEgJiYgbWV0YWRhdGEuc2RrKTtcblxuICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB1dGlscy5jcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pO1xuXG4gIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG9cbiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXlcbiAgLy8gaGF2ZSB0ZW1wb3JhcmlseSBhZGRlZCwgZXRjLiBFdmVuIGlmIHdlIGRvbid0IGhhcHBlbiB0byBiZSB1c2luZyBpdCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIGxldCdzIG5vdCBnZXQgcmlkXG4gIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLilcbiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTtcblxuICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdO1xuICByZXR1cm4gdXRpbHMuY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7XG59XG5cbmV4cG9ydHMuY3JlYXRlRXZlbnRFbnZlbG9wZSA9IGNyZWF0ZUV2ZW50RW52ZWxvcGU7XG5leHBvcnRzLmNyZWF0ZVNlc3Npb25FbnZlbG9wZSA9IGNyZWF0ZVNlc3Npb25FbnZlbG9wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudmVsb3BlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGV4cG9ydHMkMSA9IHJlcXVpcmUoJy4vZXhwb3J0cy5qcycpO1xuXG4vKipcbiAqIEBpbmhlcml0ZG9jXG4gKi9cbmNsYXNzIFNlc3Npb25GbHVzaGVyICB7XG5cbiAgLy8gQ2FzdCB0byBhbnkgc28gdGhhdCBpdCBjYW4gdXNlIE5vZGUuanMgdGltZW91dFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG4gICBjb25zdHJ1Y3RvcihjbGllbnQsIGF0dHJzKSB7XG4gICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuZmx1c2hUaW1lb3V0ID0gNjA7XG4gICAgdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXMgPSB7fTtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuXG4gICAgLy8gQ2FsbCB0byBzZXRJbnRlcnZhbCwgc28gdGhhdCBmbHVzaCBpcyBjYWxsZWQgZXZlcnkgNjAgc2Vjb25kcy5cbiAgICB0aGlzLl9pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5mbHVzaCgpLCB0aGlzLmZsdXNoVGltZW91dCAqIDEwMDApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICBpZiAodGhpcy5faW50ZXJ2YWxJZC51bnJlZikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgdGhpcy5faW50ZXJ2YWxJZC51bnJlZigpO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9uQXR0cnMgPSBhdHRycztcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgYHBlbmRpbmdBZ2dyZWdhdGVzYCBoYXMgZW50cmllcywgYW5kIGlmIGl0IGRvZXMgZmx1c2hlcyB0aGVtIGJ5IGNhbGxpbmcgYHNlbmRTZXNzaW9uYCAqL1xuICAgZmx1c2goKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkFnZ3JlZ2F0ZXMgPSB0aGlzLmdldFNlc3Npb25BZ2dyZWdhdGVzKCk7XG4gICAgaWYgKHNlc3Npb25BZ2dyZWdhdGVzLmFnZ3JlZ2F0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3BlbmRpbmdBZ2dyZWdhdGVzID0ge307XG4gICAgdGhpcy5fY2xpZW50LnNlbmRTZXNzaW9uKHNlc3Npb25BZ2dyZWdhdGVzKTtcbiAgfVxuXG4gIC8qKiBNYXNzYWdlcyB0aGUgZW50cmllcyBpbiBgcGVuZGluZ0FnZ3JlZ2F0ZXNgIGFuZCByZXR1cm5zIGFnZ3JlZ2F0ZWQgc2Vzc2lvbnMgKi9cbiAgIGdldFNlc3Npb25BZ2dyZWdhdGVzKCkge1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9wZW5kaW5nQWdncmVnYXRlcykubWFwKChrZXkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQWdncmVnYXRlc1twYXJzZUludChrZXkpXTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlc3Npb25BZ2dyZWdhdGVzID0ge1xuICAgICAgYXR0cnM6IHRoaXMuX3Nlc3Npb25BdHRycyxcbiAgICAgIGFnZ3JlZ2F0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gdXRpbHMuZHJvcFVuZGVmaW5lZEtleXMoc2Vzc2lvbkFnZ3JlZ2F0ZXMpO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gICBjbG9zZSgpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsSWQpO1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmx1c2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBfaW5jcmVtZW50U2Vzc2lvblN0YXR1c0NvdW50IHRoYXQgY2hlY2tzIGlmIHRoZSBpbnN0YW5jZSBvZiBTZXNzaW9uRmx1c2hlciBpcyBlbmFibGVkIHRoZW5cbiAgICogZmV0Y2hlcyB0aGUgc2Vzc2lvbiBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgZnJvbSBgU2NvcGUuZ2V0UmVxdWVzdFNlc3Npb24oKS5zdGF0dXNgIG9uIHRoZSBzY29wZSBhbmQgcGFzc2VzIHRoZW0gdG9cbiAgICogYF9pbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnRgIGFsb25nIHdpdGggdGhlIHN0YXJ0IGRhdGVcbiAgICovXG4gICBpbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBleHBvcnRzJDEuZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgY29uc3QgcmVxdWVzdFNlc3Npb24gPSBzY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuXG4gICAgaWYgKHJlcXVlc3RTZXNzaW9uICYmIHJlcXVlc3RTZXNzaW9uLnN0YXR1cykge1xuICAgICAgdGhpcy5faW5jcmVtZW50U2Vzc2lvblN0YXR1c0NvdW50KHJlcXVlc3RTZXNzaW9uLnN0YXR1cywgbmV3IERhdGUoKSk7XG4gICAgICAvLyBUaGlzIGlzIG5vdCBlbnRpcmVseSBuZWNlc3NhcmlseSBidXQgaXMgYWRkZWQgYXMgYSBzYWZlIGd1YXJkIHRvIGluZGljYXRlIHRoZSBib3VuZHMgb2YgYSByZXF1ZXN0IGFuZCBzbyBpblxuICAgICAgLy8gY2FzZSBjYXB0dXJlUmVxdWVzdFNlc3Npb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHRvIHByZXZlbnQgZG91YmxlIGNvdW50XG4gICAgICBzY29wZS5zZXRSZXF1ZXN0U2Vzc2lvbih1bmRlZmluZWQpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50cyBzdGF0dXMgYnVja2V0IGluIHBlbmRpbmdBZ2dyZWdhdGVzIGJ1ZmZlciAoaW50ZXJuYWwgc3RhdGUpIGNvcnJlc3BvbmRpbmcgdG8gc3RhdHVzIG9mXG4gICAqIHRoZSBzZXNzaW9uIHJlY2VpdmVkXG4gICAqL1xuICAgX2luY3JlbWVudFNlc3Npb25TdGF0dXNDb3VudChzdGF0dXMsIGRhdGUpIHtcbiAgICAvLyBUcnVuY2F0ZSBtaW51dGVzIGFuZCBzZWNvbmRzIG9uIFNlc3Npb24gU3RhcnRlZCBhdHRyaWJ1dGUgdG8gaGF2ZSBvbmUgbWludXRlIGJ1Y2tldCBrZXlzXG4gICAgY29uc3Qgc2Vzc2lvblN0YXJ0ZWRUcnVuYyA9IG5ldyBEYXRlKGRhdGUpLnNldFNlY29uZHMoMCwgMCk7XG4gICAgdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXNbc2Vzc2lvblN0YXJ0ZWRUcnVuY10gPSB0aGlzLl9wZW5kaW5nQWdncmVnYXRlc1tzZXNzaW9uU3RhcnRlZFRydW5jXSB8fCB7fTtcblxuICAgIC8vIGNvcnJlc3BvbmRzIHRvIGFnZ3JlZ2F0ZWQgc2Vzc2lvbnMgaW4gb25lIHNwZWNpZmljIG1pbnV0ZSBidWNrZXRcbiAgICAvLyBmb3IgZXhhbXBsZSwge1wic3RhcnRlZFwiOlwiMjAyMS0wMy0xNlQwODowMDowMC4wMDBaXCIsXCJleGl0ZWRcIjo0LCBcImVycm9yZWRcIjogMX1cbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvdW50cyA9IHRoaXMuX3BlbmRpbmdBZ2dyZWdhdGVzW3Nlc3Npb25TdGFydGVkVHJ1bmNdO1xuICAgIGlmICghYWdncmVnYXRpb25Db3VudHMuc3RhcnRlZCkge1xuICAgICAgYWdncmVnYXRpb25Db3VudHMuc3RhcnRlZCA9IG5ldyBEYXRlKHNlc3Npb25TdGFydGVkVHJ1bmMpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ2Vycm9yZWQnOlxuICAgICAgICBhZ2dyZWdhdGlvbkNvdW50cy5lcnJvcmVkID0gKGFnZ3JlZ2F0aW9uQ291bnRzLmVycm9yZWQgfHwgMCkgKyAxO1xuICAgICAgICByZXR1cm4gYWdncmVnYXRpb25Db3VudHMuZXJyb3JlZDtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYWdncmVnYXRpb25Db3VudHMuZXhpdGVkID0gKGFnZ3JlZ2F0aW9uQ291bnRzLmV4aXRlZCB8fCAwKSArIDE7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGlvbkNvdW50cy5leGl0ZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhZ2dyZWdhdGlvbkNvdW50cy5jcmFzaGVkID0gKGFnZ3JlZ2F0aW9uQ291bnRzLmNyYXNoZWQgfHwgMCkgKyAxO1xuICAgICAgICByZXR1cm4gYWdncmVnYXRpb25Db3VudHMuY3Jhc2hlZDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5TZXNzaW9uRmx1c2hlciA9IFNlc3Npb25GbHVzaGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Vzc2lvbmZsdXNoZXIuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBTRU5UUllfQVBJX1ZFUlNJT04gPSAnNyc7XG5cbi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi9cbmZ1bmN0aW9uIGdldEJhc2VBcGlFbmRwb2ludChkc24pIHtcbiAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJztcbiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJztcbiAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtkc24uaG9zdH0ke3BvcnR9JHtkc24ucGF0aCA/IGAvJHtkc24ucGF0aH1gIDogJyd9L2FwaS9gO1xufVxuXG4vKiogUmV0dXJucyB0aGUgaW5nZXN0IEFQSSBlbmRwb2ludCBmb3IgdGFyZ2V0LiAqL1xuZnVuY3Rpb24gX2dldEluZ2VzdEVuZHBvaW50KGRzbikge1xuICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gO1xufVxuXG4vKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi9cbmZ1bmN0aW9uIF9lbmNvZGVkQXV0aChkc24sIHNka0luZm8pIHtcbiAgcmV0dXJuIHV0aWxzLnVybEVuY29kZSh7XG4gICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjU3Mi5cbiAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LFxuICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sXG4gICAgLi4uKHNka0luZm8gJiYgeyBzZW50cnlfY2xpZW50OiBgJHtzZGtJbmZvLm5hbWV9LyR7c2RrSW5mby52ZXJzaW9ufWAgfSksXG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBTZW5kaW5nIGF1dGggYXMgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGFuZCBub3QgYXMgY3VzdG9tIEhUVFAgaGVhZGVycyBhdm9pZHMgQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoXG4gIGRzbixcbiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3dcbiAgLy8gb3B0aW9uczogQ2xpZW50T3B0aW9ucyA9IHt9IGFzIENsaWVudE9wdGlvbnMsXG4gIHR1bm5lbE9yT3B0aW9ucyA9IHt9ICxcbikge1xuICAvLyBUT0RPICh2OCk6IFVzZSB0aGlzIGNvZGUgaW5zdGVhZFxuICAvLyBjb25zdCB7IHR1bm5lbCwgX21ldGFkYXRhID0ge30gfSA9IG9wdGlvbnM7XG4gIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gO1xuXG4gIGNvbnN0IHR1bm5lbCA9IHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gdHVubmVsT3JPcHRpb25zIDogdHVubmVsT3JPcHRpb25zLnR1bm5lbDtcbiAgY29uc3Qgc2RrSW5mbyA9XG4gICAgdHlwZW9mIHR1bm5lbE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgfHwgIXR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEgPyB1bmRlZmluZWQgOiB0dW5uZWxPck9wdGlvbnMuX21ldGFkYXRhLnNkaztcblxuICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDtcbn1cblxuLyoqIFJldHVybnMgdGhlIHVybCB0byB0aGUgcmVwb3J0IGRpYWxvZyBlbmRwb2ludC4gKi9cbmZ1bmN0aW9uIGdldFJlcG9ydERpYWxvZ0VuZHBvaW50KFxuICBkc25MaWtlLFxuICBkaWFsb2dPcHRpb25zXG5cbixcbikge1xuICBjb25zdCBkc24gPSB1dGlscy5tYWtlRHNuKGRzbkxpa2UpO1xuICBpZiAoIWRzbikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50ID0gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9ZW1iZWQvZXJyb3ItcGFnZS9gO1xuXG4gIGxldCBlbmNvZGVkT3B0aW9ucyA9IGBkc249JHt1dGlscy5kc25Ub1N0cmluZyhkc24pfWA7XG4gIGZvciAoY29uc3Qga2V5IGluIGRpYWxvZ09wdGlvbnMpIHtcbiAgICBpZiAoa2V5ID09PSAnZHNuJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ29uQ2xvc2UnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAndXNlcicpIHtcbiAgICAgIGNvbnN0IHVzZXIgPSBkaWFsb2dPcHRpb25zLnVzZXI7XG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodXNlci5uYW1lKSB7XG4gICAgICAgIGVuY29kZWRPcHRpb25zICs9IGAmbmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCh1c2VyLm5hbWUpfWA7XG4gICAgICB9XG4gICAgICBpZiAodXNlci5lbWFpbCkge1xuICAgICAgICBlbmNvZGVkT3B0aW9ucyArPSBgJmVtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuZW1haWwpfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZWRPcHRpb25zICs9IGAmJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlhbG9nT3B0aW9uc1trZXldICl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7ZW5kcG9pbnR9PyR7ZW5jb2RlZE9wdGlvbnN9YDtcbn1cblxuZXhwb3J0cy5nZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoID0gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aDtcbmV4cG9ydHMuZ2V0UmVwb3J0RGlhbG9nRW5kcG9pbnQgPSBnZXRSZXBvcnREaWFsb2dFbmRwb2ludDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3QgZXZlbnRQcm9jZXNzb3JzID0gcmVxdWlyZSgnLi9ldmVudFByb2Nlc3NvcnMuanMnKTtcbmNvbnN0IGV4cG9ydHMkMSA9IHJlcXVpcmUoJy4vZXhwb3J0cy5qcycpO1xuY29uc3QgaHViID0gcmVxdWlyZSgnLi9odWIuanMnKTtcblxuY29uc3QgaW5zdGFsbGVkSW50ZWdyYXRpb25zID0gW107XG5cbi8qKiBNYXAgb2YgaW50ZWdyYXRpb25zIGFzc2lnbmVkIHRvIGEgY2xpZW50ICovXG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXksIHByZWZlcnJpbmcgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYW55IGR1cGxpY2F0ZS4gTm90IGd1YXJhbnRlZWQgdG9cbiAqIHByZXNldmUgdGhlIG9yZGVyIG9mIGludGVncmF0aW9ucyBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZmlsdGVyRHVwbGljYXRlcyhpbnRlZ3JhdGlvbnMpIHtcbiAgY29uc3QgaW50ZWdyYXRpb25zQnlOYW1lID0ge307XG5cbiAgaW50ZWdyYXRpb25zLmZvckVhY2goY3VycmVudEluc3RhbmNlID0+IHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGN1cnJlbnRJbnN0YW5jZTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSBpbnRlZ3JhdGlvbnNCeU5hbWVbbmFtZV07XG5cbiAgICAvLyBXZSB3YW50IGludGVncmF0aW9ucyBsYXRlciBpbiB0aGUgYXJyYXkgdG8gb3ZlcndyaXRlIGVhcmxpZXIgb25lcyBvZiB0aGUgc2FtZSB0eXBlLCBleGNlcHQgdGhhdCB3ZSBuZXZlciB3YW50IGFcbiAgICAvLyBkZWZhdWx0IGluc3RhbmNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB1c2VyIGluc3RhbmNlXG4gICAgaWYgKGV4aXN0aW5nSW5zdGFuY2UgJiYgIWV4aXN0aW5nSW5zdGFuY2UuaXNEZWZhdWx0SW5zdGFuY2UgJiYgY3VycmVudEluc3RhbmNlLmlzRGVmYXVsdEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZWdyYXRpb25zQnlOYW1lW25hbWVdID0gY3VycmVudEluc3RhbmNlO1xuICB9KTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoaW50ZWdyYXRpb25zQnlOYW1lKS5tYXAoayA9PiBpbnRlZ3JhdGlvbnNCeU5hbWVba10pO1xufVxuXG4vKiogR2V0cyBpbnRlZ3JhdGlvbnMgdG8gaW5zdGFsbCAqL1xuZnVuY3Rpb24gZ2V0SW50ZWdyYXRpb25zVG9TZXR1cChvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbnMgPSBvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgfHwgW107XG4gIGNvbnN0IHVzZXJJbnRlZ3JhdGlvbnMgPSBvcHRpb25zLmludGVncmF0aW9ucztcblxuICAvLyBXZSBmbGFnIGRlZmF1bHQgaW5zdGFuY2VzLCBzbyB0aGF0IGxhdGVyIHdlIGNhbiB0ZWxsIHRoZW0gYXBhcnQgZnJvbSBhbnkgdXNlci1jcmVhdGVkIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzc1xuICBkZWZhdWx0SW50ZWdyYXRpb25zLmZvckVhY2goaW50ZWdyYXRpb24gPT4ge1xuICAgIGludGVncmF0aW9uLmlzRGVmYXVsdEluc3RhbmNlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgbGV0IGludGVncmF0aW9ucztcblxuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VySW50ZWdyYXRpb25zKSkge1xuICAgIGludGVncmF0aW9ucyA9IFsuLi5kZWZhdWx0SW50ZWdyYXRpb25zLCAuLi51c2VySW50ZWdyYXRpb25zXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXNlckludGVncmF0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGludGVncmF0aW9ucyA9IHV0aWxzLmFycmF5aWZ5KHVzZXJJbnRlZ3JhdGlvbnMoZGVmYXVsdEludGVncmF0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIGludGVncmF0aW9ucyA9IGRlZmF1bHRJbnRlZ3JhdGlvbnM7XG4gIH1cblxuICBjb25zdCBmaW5hbEludGVncmF0aW9ucyA9IGZpbHRlckR1cGxpY2F0ZXMoaW50ZWdyYXRpb25zKTtcblxuICAvLyBUaGUgYERlYnVnYCBpbnRlZ3JhdGlvbiBwcmludHMgY29waWVzIG9mIHRoZSBgZXZlbnRgIGFuZCBgaGludGAgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gYGJlZm9yZVNlbmRgIG9yXG4gIC8vIGBiZWZvcmVTZW5kVHJhbnNhY3Rpb25gLiBJdCB0aGVyZWZvcmUgaGFzIHRvIHJ1biBhZnRlciBhbGwgb3RoZXIgaW50ZWdyYXRpb25zLCBzbyB0aGF0IHRoZSBjaGFuZ2VzIG9mIGFsbCBldmVudFxuICAvLyBwcm9jZXNzb3JzIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBwcmludGVkIHZhbHVlcy4gRm9yIGxhY2sgb2YgYSBtb3JlIGVsZWdhbnQgd2F5IHRvIGd1YXJhbnRlZSB0aGF0LCB3ZSB0aGVyZWZvcmVcbiAgLy8gbG9jYXRlIGl0IGFuZCwgYXNzdW1pbmcgaXQgZXhpc3RzLCBwb3AgaXQgb3V0IG9mIGl0cyBjdXJyZW50IHNwb3QgYW5kIHNob3ZlIGl0IG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuXG4gIGNvbnN0IGRlYnVnSW5kZXggPSBmaW5kSW5kZXgoZmluYWxJbnRlZ3JhdGlvbnMsIGludGVncmF0aW9uID0+IGludGVncmF0aW9uLm5hbWUgPT09ICdEZWJ1ZycpO1xuICBpZiAoZGVidWdJbmRleCAhPT0gLTEpIHtcbiAgICBjb25zdCBbZGVidWdJbnN0YW5jZV0gPSBmaW5hbEludGVncmF0aW9ucy5zcGxpY2UoZGVidWdJbmRleCwgMSk7XG4gICAgZmluYWxJbnRlZ3JhdGlvbnMucHVzaChkZWJ1Z0luc3RhbmNlKTtcbiAgfVxuXG4gIHJldHVybiBmaW5hbEludGVncmF0aW9ucztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgaW50ZWdyYXRpb24gaW5zdGFuY2VzIHRoaXMgaW5zdGFsbHMgdGhlbSBhbGwuIFdoZW4gYHdpdGhEZWZhdWx0c2AgaXMgc2V0IHRvIGB0cnVlYCB0aGVuIGFsbCBkZWZhdWx0XG4gKiBpbnRlZ3JhdGlvbnMgYXJlIGFkZGVkIHVubGVzcyB0aGV5IHdlcmUgYWxyZWFkeSBwcm92aWRlZCBiZWZvcmUuXG4gKiBAcGFyYW0gaW50ZWdyYXRpb25zIGFycmF5IG9mIGludGVncmF0aW9uIGluc3RhbmNlc1xuICogQHBhcmFtIHdpdGhEZWZhdWx0IHNob3VsZCBlbmFibGUgZGVmYXVsdCBpbnRlZ3JhdGlvbnNcbiAqL1xuZnVuY3Rpb24gc2V0dXBJbnRlZ3JhdGlvbnMoY2xpZW50LCBpbnRlZ3JhdGlvbnMpIHtcbiAgY29uc3QgaW50ZWdyYXRpb25JbmRleCA9IHt9O1xuXG4gIGludGVncmF0aW9ucy5mb3JFYWNoKGludGVncmF0aW9uID0+IHtcbiAgICAvLyBndWFyZCBhZ2FpbnN0IGVtcHR5IHByb3ZpZGVkIGludGVncmF0aW9uc1xuICAgIGlmIChpbnRlZ3JhdGlvbikge1xuICAgICAgc2V0dXBJbnRlZ3JhdGlvbihjbGllbnQsIGludGVncmF0aW9uLCBpbnRlZ3JhdGlvbkluZGV4KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbnRlZ3JhdGlvbkluZGV4O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGBhZnRlckFsbFNldHVwYCBob29rcyBvZiB0aGUgZ2l2ZW4gaW50ZWdyYXRpb25zLlxuICovXG5mdW5jdGlvbiBhZnRlclNldHVwSW50ZWdyYXRpb25zKGNsaWVudCwgaW50ZWdyYXRpb25zKSB7XG4gIGZvciAoY29uc3QgaW50ZWdyYXRpb24gb2YgaW50ZWdyYXRpb25zKSB7XG4gICAgLy8gZ3VhcmQgYWdhaW5zdCBlbXB0eSBwcm92aWRlZCBpbnRlZ3JhdGlvbnNcbiAgICBpZiAoaW50ZWdyYXRpb24gJiYgaW50ZWdyYXRpb24uYWZ0ZXJBbGxTZXR1cCkge1xuICAgICAgaW50ZWdyYXRpb24uYWZ0ZXJBbGxTZXR1cChjbGllbnQpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogU2V0dXAgYSBzaW5nbGUgaW50ZWdyYXRpb24uICAqL1xuZnVuY3Rpb24gc2V0dXBJbnRlZ3JhdGlvbihjbGllbnQsIGludGVncmF0aW9uLCBpbnRlZ3JhdGlvbkluZGV4KSB7XG4gIGlmIChpbnRlZ3JhdGlvbkluZGV4W2ludGVncmF0aW9uLm5hbWVdKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKGBJbnRlZ3JhdGlvbiBza2lwcGVkIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgaW5zdGFsbGVkOiAke2ludGVncmF0aW9uLm5hbWV9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGludGVncmF0aW9uSW5kZXhbaW50ZWdyYXRpb24ubmFtZV0gPSBpbnRlZ3JhdGlvbjtcblxuICAvLyBgc2V0dXBPbmNlYCBpcyBvbmx5IGNhbGxlZCB0aGUgZmlyc3QgdGltZVxuICBpZiAoaW5zdGFsbGVkSW50ZWdyYXRpb25zLmluZGV4T2YoaW50ZWdyYXRpb24ubmFtZSkgPT09IC0xKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgaW50ZWdyYXRpb24uc2V0dXBPbmNlKGV2ZW50UHJvY2Vzc29ycy5hZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgaHViLmdldEN1cnJlbnRIdWIpO1xuICAgIGluc3RhbGxlZEludGVncmF0aW9ucy5wdXNoKGludGVncmF0aW9uLm5hbWUpO1xuICB9XG5cbiAgLy8gYHNldHVwYCBpcyBydW4gZm9yIGVhY2ggY2xpZW50XG4gIGlmIChpbnRlZ3JhdGlvbi5zZXR1cCAmJiB0eXBlb2YgaW50ZWdyYXRpb24uc2V0dXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnRlZ3JhdGlvbi5zZXR1cChjbGllbnQpO1xuICB9XG5cbiAgaWYgKGNsaWVudC5vbiAmJiB0eXBlb2YgaW50ZWdyYXRpb24ucHJlcHJvY2Vzc0V2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSBpbnRlZ3JhdGlvbi5wcmVwcm9jZXNzRXZlbnQuYmluZChpbnRlZ3JhdGlvbikgO1xuICAgIGNsaWVudC5vbigncHJlcHJvY2Vzc0V2ZW50JywgKGV2ZW50LCBoaW50KSA9PiBjYWxsYmFjayhldmVudCwgaGludCwgY2xpZW50KSk7XG4gIH1cblxuICBpZiAoY2xpZW50LmFkZEV2ZW50UHJvY2Vzc29yICYmIHR5cGVvZiBpbnRlZ3JhdGlvbi5wcm9jZXNzRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IGludGVncmF0aW9uLnByb2Nlc3NFdmVudC5iaW5kKGludGVncmF0aW9uKSA7XG5cbiAgICBjb25zdCBwcm9jZXNzb3IgPSBPYmplY3QuYXNzaWduKChldmVudCwgaGludCkgPT4gY2FsbGJhY2soZXZlbnQsIGhpbnQsIGNsaWVudCksIHtcbiAgICAgIGlkOiBpbnRlZ3JhdGlvbi5uYW1lLFxuICAgIH0pO1xuXG4gICAgY2xpZW50LmFkZEV2ZW50UHJvY2Vzc29yKHByb2Nlc3Nvcik7XG4gIH1cblxuICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYEludGVncmF0aW9uIGluc3RhbGxlZDogJHtpbnRlZ3JhdGlvbi5uYW1lfWApO1xufVxuXG4vKiogQWRkIGFuIGludGVncmF0aW9uIHRvIHRoZSBjdXJyZW50IGh1YidzIGNsaWVudC4gKi9cbmZ1bmN0aW9uIGFkZEludGVncmF0aW9uKGludGVncmF0aW9uKSB7XG4gIGNvbnN0IGNsaWVudCA9IGV4cG9ydHMkMS5nZXRDbGllbnQoKTtcblxuICBpZiAoIWNsaWVudCB8fCAhY2xpZW50LmFkZEludGVncmF0aW9uKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybihgQ2Fubm90IGFkZCBpbnRlZ3JhdGlvbiBcIiR7aW50ZWdyYXRpb24ubmFtZX1cIiBiZWNhdXNlIG5vIFNESyBDbGllbnQgaXMgYXZhaWxhYmxlLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNsaWVudC5hZGRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7XG59XG5cbi8vIFBvbHlmaWxsIGZvciBBcnJheS5maW5kSW5kZXgoKSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBpbiBFUzVcbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIGNhbGxiYWNrKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNhbGxiYWNrKGFycltpXSkgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgbmV3IGludGVncmF0aW9uIGZ1bmN0aW9uIHRvIHRoZSBsZWdhY3kgY2xhc3Mgc3ludGF4LlxuICogSW4gdjgsIHdlIGNhbiByZW1vdmUgdGhpcyBhbmQgaW5zdGVhZCBleHBvcnQgdGhlIGludGVncmF0aW9uIGZ1bmN0aW9ucyBkaXJlY3RseS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OCFcbiAqL1xuZnVuY3Rpb24gY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKFxuICBuYW1lLFxuICBmbixcbikge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICBmdW5jdGlvbiBDb252ZXJ0ZWRJbnRlZ3JhdGlvbiguLi5hcmdzKSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSxcbiAgICB7IGlkOiBuYW1lIH0sXG4gICkgO1xufVxuXG4vKipcbiAqIERlZmluZSBhbiBpbnRlZ3JhdGlvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBpbnRlZ3JhdGlvbiBpbnN0YW5jZS5cbiAqIE5vdGUgdGhhdCB0aGlzIGJ5IGRlc2lnbiBoaWRlcyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgaW50ZWdyYXRpb24sIGFzIHRoZXkgYXJlIGNvbnNpZGVyZWQgaW50ZXJuYWwuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUludGVncmF0aW9uKGZuKSB7XG4gIHJldHVybiBmbjtcbn1cblxuZXhwb3J0cy5hZGRJbnRlZ3JhdGlvbiA9IGFkZEludGVncmF0aW9uO1xuZXhwb3J0cy5hZnRlclNldHVwSW50ZWdyYXRpb25zID0gYWZ0ZXJTZXR1cEludGVncmF0aW9ucztcbmV4cG9ydHMuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzID0gY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzO1xuZXhwb3J0cy5kZWZpbmVJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uO1xuZXhwb3J0cy5nZXRJbnRlZ3JhdGlvbnNUb1NldHVwID0gZ2V0SW50ZWdyYXRpb25zVG9TZXR1cDtcbmV4cG9ydHMuaW5zdGFsbGVkSW50ZWdyYXRpb25zID0gaW5zdGFsbGVkSW50ZWdyYXRpb25zO1xuZXhwb3J0cy5zZXR1cEludGVncmF0aW9uID0gc2V0dXBJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuc2V0dXBJbnRlZ3JhdGlvbnMgPSBzZXR1cEludGVncmF0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVncmF0aW9uLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBidWNrZXQga2V5IGZyb20gbWV0cmljIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEJ1Y2tldEtleShcbiAgbWV0cmljVHlwZSxcbiAgbmFtZSxcbiAgdW5pdCxcbiAgdGFncyxcbikge1xuICBjb25zdCBzdHJpbmdpZmllZFRhZ3MgPSBPYmplY3QuZW50cmllcyh1dGlscy5kcm9wVW5kZWZpbmVkS2V5cyh0YWdzKSkuc29ydCgoYSwgYikgPT4gYVswXS5sb2NhbGVDb21wYXJlKGJbMF0pKTtcbiAgcmV0dXJuIGAke21ldHJpY1R5cGV9JHtuYW1lfSR7dW5pdH0ke3N0cmluZ2lmaWVkVGFnc31gO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4vKipcbiAqIFNpbXBsZSBoYXNoIGZ1bmN0aW9uIGZvciBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBzaW1wbGVIYXNoKHMpIHtcbiAgbGV0IHJ2ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBydiA9IChydiA8PCA1KSAtIHJ2ICsgYztcbiAgICBydiAmPSBydjtcbiAgfVxuICByZXR1cm4gcnYgPj4+IDA7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblxuLyoqXG4gKiBTZXJpYWxpemUgbWV0cmljcyBidWNrZXRzIGludG8gYSBzdHJpbmcgYmFzZWQgb24gc3RhdHNkIGZvcm1hdC5cbiAqXG4gKiBFeGFtcGxlIG9mIGZvcm1hdDpcbiAqIG1ldHJpYy5uYW1lQHNlY29uZDoxOjEuMnxkfCNhOnZhbHVlLGI6YW5vdGhlcnZhbHVlfFQxMjM0NTY3N1xuICogU2VnbWVudHM6XG4gKiBuYW1lOiBtZXRyaWMubmFtZVxuICogdW5pdDogc2Vjb25kXG4gKiB2YWx1ZTogWzEsIDEuMl1cbiAqIHR5cGUgb2YgbWV0cmljOiBkIChkaXN0cmlidXRpb24pXG4gKiB0YWdzOiB7IGE6IHZhbHVlLCBiOiBhbm90aGVydmFsdWUgfVxuICogdGltZXN0YW1wOiAxMjM0NTY3N1xuICovXG5mdW5jdGlvbiBzZXJpYWxpemVNZXRyaWNCdWNrZXRzKG1ldHJpY0J1Y2tldEl0ZW1zKSB7XG4gIGxldCBvdXQgPSAnJztcbiAgZm9yIChjb25zdCBpdGVtIG9mIG1ldHJpY0J1Y2tldEl0ZW1zKSB7XG4gICAgY29uc3QgdGFnRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGl0ZW0udGFncyk7XG4gICAgY29uc3QgbWF5YmVUYWdzID0gdGFnRW50cmllcy5sZW5ndGggPiAwID8gYHwjJHt0YWdFbnRyaWVzLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YCkuam9pbignLCcpfWAgOiAnJztcbiAgICBvdXQgKz0gYCR7aXRlbS5uYW1lfUAke2l0ZW0udW5pdH06JHtpdGVtLm1ldHJpY318JHtpdGVtLm1ldHJpY1R5cGV9JHttYXliZVRhZ3N9fFQke2l0ZW0udGltZXN0YW1wfVxcbmA7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFNhbml0aXplcyB1bml0cyAqL1xuZnVuY3Rpb24gc2FuaXRpemVVbml0KHVuaXQpIHtcbiAgcmV0dXJuIHVuaXQucmVwbGFjZSgvW15cXHddKy9naSwgJ18nKTtcbn1cblxuLyoqIFNhbml0aXplcyBtZXRyaWMga2V5cyAqL1xuZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNLZXkoa2V5KSB7XG4gIHJldHVybiBrZXkucmVwbGFjZSgvW15cXHdcXC0uXSsvZ2ksICdfJyk7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplVGFnS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1teXFx3XFwtLi9dKy9naSwgJycpO1xufVxuXG5jb25zdCB0YWdWYWx1ZVJlcGxhY2VtZW50cyA9IFtcbiAgWydcXG4nLCAnXFxcXG4nXSxcbiAgWydcXHInLCAnXFxcXHInXSxcbiAgWydcXHQnLCAnXFxcXHQnXSxcbiAgWydcXFxcJywgJ1xcXFxcXFxcJ10sXG4gIFsnfCcsICdcXFxcdXs3Y30nXSxcbiAgWycsJywgJ1xcXFx1ezJjfSddLFxuXTtcblxuZnVuY3Rpb24gZ2V0Q2hhck9yUmVwbGFjZW1lbnQoaW5wdXQpIHtcbiAgZm9yIChjb25zdCBbc2VhcmNoLCByZXBsYWNlbWVudF0gb2YgdGFnVmFsdWVSZXBsYWNlbWVudHMpIHtcbiAgICBpZiAoaW5wdXQgPT09IHNlYXJjaCkge1xuICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVUYWdWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gWy4uLnZhbHVlXS5yZWR1Y2UoKGFjYywgY2hhcikgPT4gYWNjICsgZ2V0Q2hhck9yUmVwbGFjZW1lbnQoY2hhciksICcnKTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZXMgdGFncy5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVUYWdzKHVuc2FuaXRpemVkVGFncykge1xuICBjb25zdCB0YWdzID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHVuc2FuaXRpemVkVGFncykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodW5zYW5pdGl6ZWRUYWdzLCBrZXkpKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRLZXkgPSBzYW5pdGl6ZVRhZ0tleShrZXkpO1xuICAgICAgdGFnc1tzYW5pdGl6ZWRLZXldID0gc2FuaXRpemVUYWdWYWx1ZShTdHJpbmcodW5zYW5pdGl6ZWRUYWdzW2tleV0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ3M7XG59XG5cbmV4cG9ydHMuZ2V0QnVja2V0S2V5ID0gZ2V0QnVja2V0S2V5O1xuZXhwb3J0cy5zYW5pdGl6ZU1ldHJpY0tleSA9IHNhbml0aXplTWV0cmljS2V5O1xuZXhwb3J0cy5zYW5pdGl6ZVRhZ3MgPSBzYW5pdGl6ZVRhZ3M7XG5leHBvcnRzLnNhbml0aXplVW5pdCA9IHNhbml0aXplVW5pdDtcbmV4cG9ydHMuc2VyaWFsaXplTWV0cmljQnVja2V0cyA9IHNlcmlhbGl6ZU1ldHJpY0J1Y2tldHM7XG5leHBvcnRzLnNpbXBsZUhhc2ggPSBzaW1wbGVIYXNoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgdXRpbHMkMSA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcblxuLyoqXG4gKiBDcmVhdGUgZW52ZWxvcGUgZnJvbSBhIG1ldHJpYyBhZ2dyZWdhdGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1ldHJpY0VudmVsb3BlKFxuICBtZXRyaWNCdWNrZXRJdGVtcyxcbiAgZHNuLFxuICBtZXRhZGF0YSxcbiAgdHVubmVsLFxuKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9O1xuXG4gIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspIHtcbiAgICBoZWFkZXJzLnNkayA9IHtcbiAgICAgIG5hbWU6IG1ldGFkYXRhLnNkay5uYW1lLFxuICAgICAgdmVyc2lvbjogbWV0YWRhdGEuc2RrLnZlcnNpb24sXG4gICAgfTtcbiAgfVxuXG4gIGlmICghIXR1bm5lbCAmJiBkc24pIHtcbiAgICBoZWFkZXJzLmRzbiA9IHV0aWxzLmRzblRvU3RyaW5nKGRzbik7XG4gIH1cblxuICBjb25zdCBpdGVtID0gY3JlYXRlTWV0cmljRW52ZWxvcGVJdGVtKG1ldHJpY0J1Y2tldEl0ZW1zKTtcbiAgcmV0dXJuIHV0aWxzLmNyZWF0ZUVudmVsb3BlKGhlYWRlcnMsIFtpdGVtXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1ldHJpY0VudmVsb3BlSXRlbShtZXRyaWNCdWNrZXRJdGVtcykge1xuICBjb25zdCBwYXlsb2FkID0gdXRpbHMkMS5zZXJpYWxpemVNZXRyaWNCdWNrZXRzKG1ldHJpY0J1Y2tldEl0ZW1zKTtcbiAgY29uc3QgbWV0cmljSGVhZGVycyA9IHtcbiAgICB0eXBlOiAnc3RhdHNkJyxcbiAgICBsZW5ndGg6IHBheWxvYWQubGVuZ3RoLFxuICB9O1xuICByZXR1cm4gW21ldHJpY0hlYWRlcnMsIHBheWxvYWRdO1xufVxuXG5leHBvcnRzLmNyZWF0ZU1ldHJpY0VudmVsb3BlID0gY3JlYXRlTWV0cmljRW52ZWxvcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnZlbG9wZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2FwaS5qcycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGVudmVsb3BlID0gcmVxdWlyZSgnLi9lbnZlbG9wZS5qcycpO1xuY29uc3QgZXhwb3J0cyQxID0gcmVxdWlyZSgnLi9leHBvcnRzLmpzJyk7XG5jb25zdCBodWIgPSByZXF1aXJlKCcuL2h1Yi5qcycpO1xuY29uc3QgaW50ZWdyYXRpb24gPSByZXF1aXJlKCcuL2ludGVncmF0aW9uLmpzJyk7XG5jb25zdCBlbnZlbG9wZSQxID0gcmVxdWlyZSgnLi9tZXRyaWNzL2VudmVsb3BlLmpzJyk7XG5jb25zdCBzZXNzaW9uID0gcmVxdWlyZSgnLi9zZXNzaW9uLmpzJyk7XG5jb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gcmVxdWlyZSgnLi90cmFjaW5nL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMnKTtcbmNvbnN0IHByZXBhcmVFdmVudCA9IHJlcXVpcmUoJy4vdXRpbHMvcHJlcGFyZUV2ZW50LmpzJyk7XG5cbmNvbnN0IEFMUkVBRFlfU0VFTl9FUlJPUiA9IFwiTm90IGNhcHR1cmluZyBleGNlcHRpb24gYmVjYXVzZSBpdCdzIGFscmVhZHkgYmVlbiBjYXB0dXJlZC5cIjtcblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgSmF2YVNjcmlwdCBTREsgY2xpZW50cy5cbiAqXG4gKiBDYWxsIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbnNcbiAqIHNwZWNpZmljIHRvIHRoZSBjbGllbnQgc3ViY2xhc3MuIFRvIGFjY2VzcyB0aGVzZSBvcHRpb25zIGxhdGVyLCB1c2VcbiAqIHtAbGluayBDbGllbnQuZ2V0T3B0aW9uc30uXG4gKlxuICogSWYgYSBEc24gaXMgc3BlY2lmaWVkIGluIHRoZSBvcHRpb25zLCBpdCB3aWxsIGJlIHBhcnNlZCBhbmQgc3RvcmVkLiBVc2VcbiAqIHtAbGluayBDbGllbnQuZ2V0RHNufSB0byByZXRyaWV2ZSB0aGUgRHNuIGF0IGFueSBtb21lbnQuIEluIGNhc2UgdGhlIERzbiBpc1xuICogaW52YWxpZCwgdGhlIGNvbnN0cnVjdG9yIHdpbGwgdGhyb3cgYSB7QGxpbmsgU2VudHJ5RXhjZXB0aW9ufS4gTm90ZSB0aGF0XG4gKiB3aXRob3V0IGEgdmFsaWQgRHNuLCB0aGUgU0RLIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cyB0byBTZW50cnkuXG4gKlxuICogQmVmb3JlIHNlbmRpbmcgYW4gZXZlbnQsIGl0IGlzIHBhc3NlZCB0aHJvdWdoXG4gKiB7QGxpbmsgQmFzZUNsaWVudC5fcHJlcGFyZUV2ZW50fSB0byBhZGQgU0RLIGluZm9ybWF0aW9uIGFuZCBzY29wZSBkYXRhXG4gKiAoYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQpLiBUbyBhZGQgbW9yZSBjdXN0b20gaW5mb3JtYXRpb24sIG92ZXJyaWRlIHRoaXNcbiAqIG1ldGhvZCBhbmQgZXh0ZW5kIHRoZSByZXN1bHRpbmcgcHJlcGFyZWQgZXZlbnQuXG4gKlxuICogVG8gaXNzdWUgYXV0b21hdGljYWxseSBjcmVhdGVkIGV2ZW50cyAoZS5nLiB2aWEgaW5zdHJ1bWVudGF0aW9uKSwgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmNhcHR1cmVFdmVudH0uIEl0IHdpbGwgcHJlcGFyZSB0aGUgZXZlbnQgYW5kIHBhc3MgaXQgdGhyb3VnaFxuICogdGhlIGNhbGxiYWNrIGxpZmVjeWNsZS4gVG8gaXNzdWUgYXV0by1icmVhZGNydW1icywgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmFkZEJyZWFkY3J1bWJ9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjbGFzcyBOb2RlQ2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudDxOb2RlT3B0aW9ucz4ge1xuICogICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogTm9kZU9wdGlvbnMpIHtcbiAqICAgICBzdXBlcihvcHRpb25zKTtcbiAqICAgfVxuICpcbiAqICAgLy8gLi4uXG4gKiB9XG4gKi9cbmNsYXNzIEJhc2VDbGllbnQge1xuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSBtZXRyaWNzIGFnZ3JlZ2F0b3JcbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbCBOb3RlIHRoaXMgaXMgYWxwaGEgQVBJLiBJdCBtYXkgZXhwZXJpZW5jZSBicmVha2luZyBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuXG4gICAqL1xuXG4gIC8qKiBPcHRpb25zIHBhc3NlZCB0byB0aGUgU0RLLiAqL1xuXG4gIC8qKiBUaGUgY2xpZW50IERzbiwgaWYgc3BlY2lmaWVkIGluIG9wdGlvbnMuIFdpdGhvdXQgdGhpcyBEc24sIHRoZSBTREsgd2lsbCBiZSBkaXNhYmxlZC4gKi9cblxuICAvKiogQXJyYXkgb2Ygc2V0IHVwIGludGVncmF0aW9ucy4gKi9cblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjbGllbnQncyBpbnRlZ3JhdGlvbnMgaGF2ZSBiZWVuIHNldCB1cC4gKi9cblxuICAvKiogTnVtYmVyIG9mIGNhbGxzIGJlaW5nIHByb2Nlc3NlZCAqL1xuXG4gIC8qKiBIb2xkcyBmbHVzaGFibGUgICovXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhpcyBjbGllbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBjbGllbnQuXG4gICAqL1xuICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuX2ludGVncmF0aW9ucyA9IHt9O1xuICAgIHRoaXMuX2ludGVncmF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5fbnVtUHJvY2Vzc2luZyA9IDA7XG4gICAgdGhpcy5fb3V0Y29tZXMgPSB7fTtcbiAgICB0aGlzLl9ob29rcyA9IHt9O1xuICAgIHRoaXMuX2V2ZW50UHJvY2Vzc29ycyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMuZHNuKSB7XG4gICAgICB0aGlzLl9kc24gPSB1dGlscy5tYWtlRHNuKG9wdGlvbnMuZHNuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybignTm8gRFNOIHByb3ZpZGVkLCBjbGllbnQgd2lsbCBub3Qgc2VuZCBldmVudHMuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Rzbikge1xuICAgICAgY29uc3QgdXJsID0gYXBpLmdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgodGhpcy5fZHNuLCBvcHRpb25zKTtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IG9wdGlvbnMudHJhbnNwb3J0KHtcbiAgICAgICAgdHVubmVsOiB0aGlzLl9vcHRpb25zLnR1bm5lbCxcbiAgICAgICAgcmVjb3JkRHJvcHBlZEV2ZW50OiB0aGlzLnJlY29yZERyb3BwZWRFdmVudC5iaW5kKHRoaXMpLFxuICAgICAgICAuLi5vcHRpb25zLnRyYW5zcG9ydE9wdGlvbnMsXG4gICAgICAgIHVybCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50LCBzY29wZSkge1xuICAgIC8vIGVuc3VyZSB3ZSBoYXZlbid0IGNhcHR1cmVkIHRoaXMgdmVyeSBvYmplY3QgYmVmb3JlXG4gICAgaWYgKHV0aWxzLmNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0KGV4Y2VwdGlvbikpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhBTFJFQURZX1NFRU5fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkO1xuXG4gICAgdGhpcy5fcHJvY2VzcyhcbiAgICAgIHRoaXMuZXZlbnRGcm9tRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludClcbiAgICAgICAgLnRoZW4oZXZlbnQgPT4gdGhpcy5fY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkpXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgZXZlbnRJZCA9IHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgY2FwdHVyZU1lc3NhZ2UoXG4gICAgbWVzc2FnZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBsZXZlbCxcbiAgICBoaW50LFxuICAgIHNjb3BlLFxuICApIHtcbiAgICBsZXQgZXZlbnRJZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcblxuICAgIGNvbnN0IGV2ZW50TWVzc2FnZSA9IHV0aWxzLmlzUGFyYW1ldGVyaXplZFN0cmluZyhtZXNzYWdlKSA/IG1lc3NhZ2UgOiBTdHJpbmcobWVzc2FnZSk7XG5cbiAgICBjb25zdCBwcm9taXNlZEV2ZW50ID0gdXRpbHMuaXNQcmltaXRpdmUobWVzc2FnZSlcbiAgICAgID8gdGhpcy5ldmVudEZyb21NZXNzYWdlKGV2ZW50TWVzc2FnZSwgbGV2ZWwsIGhpbnQpXG4gICAgICA6IHRoaXMuZXZlbnRGcm9tRXhjZXB0aW9uKG1lc3NhZ2UsIGhpbnQpO1xuXG4gICAgdGhpcy5fcHJvY2VzcyhcbiAgICAgIHByb21pc2VkRXZlbnRcbiAgICAgICAgLnRoZW4oZXZlbnQgPT4gdGhpcy5fY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkpXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgZXZlbnRJZCA9IHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkge1xuICAgIC8vIGVuc3VyZSB3ZSBoYXZlbid0IGNhcHR1cmVkIHRoaXMgdmVyeSBvYmplY3QgYmVmb3JlXG4gICAgaWYgKGhpbnQgJiYgaGludC5vcmlnaW5hbEV4Y2VwdGlvbiAmJiB1dGlscy5jaGVja09yU2V0QWxyZWFkeUNhdWdodChoaW50Lm9yaWdpbmFsRXhjZXB0aW9uKSkge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKEFMUkVBRFlfU0VFTl9FUlJPUik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQ7XG5cbiAgICBjb25zdCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfHwge307XG4gICAgY29uc3QgY2FwdHVyZWRTcGFuU2NvcGUgPSBzZGtQcm9jZXNzaW5nTWV0YWRhdGEuY2FwdHVyZWRTcGFuU2NvcGU7XG5cbiAgICB0aGlzLl9wcm9jZXNzKFxuICAgICAgdGhpcy5fY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBjYXB0dXJlZFNwYW5TY29wZSB8fCBzY29wZSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBldmVudElkID0gcmVzdWx0O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgY2FwdHVyZVNlc3Npb24oc2Vzc2lvbiQxKSB7XG4gICAgaWYgKCEodHlwZW9mIHNlc3Npb24kMS5yZWxlYXNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ0Rpc2NhcmRlZCBzZXNzaW9uIGJlY2F1c2Ugb2YgbWlzc2luZyBvciBub24tc3RyaW5nIHJlbGVhc2UnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kU2Vzc2lvbihzZXNzaW9uJDEpO1xuICAgICAgLy8gQWZ0ZXIgc2VuZGluZywgd2Ugc2V0IGluaXQgZmFsc2UgdG8gaW5kaWNhdGUgaXQncyBub3QgdGhlIGZpcnN0IG9jY3VycmVuY2VcbiAgICAgIHNlc3Npb24udXBkYXRlU2Vzc2lvbihzZXNzaW9uJDEsIHsgaW5pdDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZ2V0RHNuKCkge1xuICAgIHJldHVybiB0aGlzLl9kc247XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBnZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgU2RrTWV0YWRhdGEgaW4gQHNlbnRyeS90eXBlc1xuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBtZXRhZGF0YSBvZiB0aGUgU0RLXG4gICAqL1xuICAgZ2V0U2RrTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuX21ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZ2V0VHJhbnNwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBmbHVzaCh0aW1lb3V0KSB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdGhpcy5fdHJhbnNwb3J0O1xuICAgIGlmICh0cmFuc3BvcnQpIHtcbiAgICAgIGlmICh0aGlzLm1ldHJpY3NBZ2dyZWdhdG9yKSB7XG4gICAgICAgIHRoaXMubWV0cmljc0FnZ3JlZ2F0b3IuZmx1c2goKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9pc0NsaWVudERvbmVQcm9jZXNzaW5nKHRpbWVvdXQpLnRoZW4oY2xpZW50RmluaXNoZWQgPT4ge1xuICAgICAgICByZXR1cm4gdHJhbnNwb3J0LmZsdXNoKHRpbWVvdXQpLnRoZW4odHJhbnNwb3J0Rmx1c2hlZCA9PiBjbGllbnRGaW5pc2hlZCAmJiB0cmFuc3BvcnRGbHVzaGVkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdXRpbHMucmVzb2x2ZWRTeW5jUHJvbWlzZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjbG9zZSh0aW1lb3V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZmx1c2godGltZW91dCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5nZXRPcHRpb25zKCkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMubWV0cmljc0FnZ3JlZ2F0b3IpIHtcbiAgICAgICAgdGhpcy5tZXRyaWNzQWdncmVnYXRvci5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIGluc3RhbGxlZCBldmVudCBwcm9jZXNzb3JzLiAqL1xuICAgZ2V0RXZlbnRQcm9jZXNzb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFByb2Nlc3NvcnM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgIGFkZEV2ZW50UHJvY2Vzc29yKGV2ZW50UHJvY2Vzc29yKSB7XG4gICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goZXZlbnRQcm9jZXNzb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0dXAgYWxsIGludGVncmF0aW9ucyB0aGF0IHNob3VsZCBydW4gb24gdGhlIGNsaWVudC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBjbGllbnQuaW5pdCgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIHNldHVwSW50ZWdyYXRpb25zKGZvcmNlSW5pdGlhbGl6ZSkge1xuICAgIGlmICgoZm9yY2VJbml0aWFsaXplICYmICF0aGlzLl9pbnRlZ3JhdGlvbnNJbml0aWFsaXplZCkgfHwgKHRoaXMuX2lzRW5hYmxlZCgpICYmICF0aGlzLl9pbnRlZ3JhdGlvbnNJbml0aWFsaXplZCkpIHtcbiAgICAgIHRoaXMuX3NldHVwSW50ZWdyYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBpbml0KCkge1xuICAgIGlmICh0aGlzLl9pc0VuYWJsZWQoKSkge1xuICAgICAgdGhpcy5fc2V0dXBJbnRlZ3JhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBpbnN0YWxsZWQgaW50ZWdyYXRpb24gYnkgaXRzIGBpZGAuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YWxsZWQgaW50ZWdyYXRpb24gb3IgYHVuZGVmaW5lZGAgaWYgbm8gaW50ZWdyYXRpb24gd2l0aCB0aGF0IGBpZGAgd2FzIGluc3RhbGxlZC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRJbnRlZ3JhdGlvbkJ5TmFtZSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldEludGVncmF0aW9uQnlJZChpbnRlZ3JhdGlvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50ZWdyYXRpb25CeU5hbWUoaW50ZWdyYXRpb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBpbnN0YWxsZWQgaW50ZWdyYXRpb24gYnkgaXRzIG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YWxsZWQgaW50ZWdyYXRpb24gb3IgYHVuZGVmaW5lZGAgaWYgbm8gaW50ZWdyYXRpb24gd2l0aCB0aGF0IGBuYW1lYCB3YXMgaW5zdGFsbGVkLlxuICAgKi9cbiAgIGdldEludGVncmF0aW9uQnlOYW1lKGludGVncmF0aW9uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlZ3JhdGlvbnNbaW50ZWdyYXRpb25OYW1lXSA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2xpZW50J3MgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGludGVncmF0aW9uIGNsYXNzLCBpdCBhbnkuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZ2V0SW50ZWdyYXRpb25CeU5hbWUoKWAgaW5zdGVhZC5cbiAgICovXG4gICBnZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2ludGVncmF0aW9uc1tpbnRlZ3JhdGlvbi5pZF0gKSB8fCBudWxsO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybihgQ2Fubm90IHJldHJpZXZlIGludGVncmF0aW9uICR7aW50ZWdyYXRpb24uaWR9IGZyb20gdGhlIGN1cnJlbnQgQ2xpZW50YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBhZGRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbiQxKSB7XG4gICAgY29uc3QgaXNBbHJlYWR5SW5zdGFsbGVkID0gdGhpcy5faW50ZWdyYXRpb25zW2ludGVncmF0aW9uJDEubmFtZV07XG5cbiAgICAvLyBUaGlzIGhvb2sgdGFrZXMgY2FyZSBvZiBvbmx5IGluc3RhbGxpbmcgaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaW50ZWdyYXRpb24uc2V0dXBJbnRlZ3JhdGlvbih0aGlzLCBpbnRlZ3JhdGlvbiQxLCB0aGlzLl9pbnRlZ3JhdGlvbnMpO1xuICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjaGVjayBtYW51YWxseSB0byBtYWtlIHN1cmUgdG8gbm90IHJ1biB0aGlzIG11bHRpcGxlIHRpbWVzXG4gICAgaWYgKCFpc0FscmVhZHlJbnN0YWxsZWQpIHtcbiAgICAgIGludGVncmF0aW9uLmFmdGVyU2V0dXBJbnRlZ3JhdGlvbnModGhpcywgW2ludGVncmF0aW9uJDFdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBzZW5kRXZlbnQoZXZlbnQsIGhpbnQgPSB7fSkge1xuICAgIHRoaXMuZW1pdCgnYmVmb3JlU2VuZEV2ZW50JywgZXZlbnQsIGhpbnQpO1xuXG4gICAgbGV0IGVudiA9IGVudmVsb3BlLmNyZWF0ZUV2ZW50RW52ZWxvcGUoZXZlbnQsIHRoaXMuX2RzbiwgdGhpcy5fb3B0aW9ucy5fbWV0YWRhdGEsIHRoaXMuX29wdGlvbnMudHVubmVsKTtcblxuICAgIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBoaW50LmF0dGFjaG1lbnRzIHx8IFtdKSB7XG4gICAgICBlbnYgPSB1dGlscy5hZGRJdGVtVG9FbnZlbG9wZShcbiAgICAgICAgZW52LFxuICAgICAgICB1dGlscy5jcmVhdGVBdHRhY2htZW50RW52ZWxvcGVJdGVtKFxuICAgICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgICAgdGhpcy5fb3B0aW9ucy50cmFuc3BvcnRPcHRpb25zICYmIHRoaXMuX29wdGlvbnMudHJhbnNwb3J0T3B0aW9ucy50ZXh0RW5jb2RlcixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX3NlbmRFbnZlbG9wZShlbnYpO1xuICAgIGlmIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlLnRoZW4oc2VuZFJlc3BvbnNlID0+IHRoaXMuZW1pdCgnYWZ0ZXJTZW5kRXZlbnQnLCBldmVudCwgc2VuZFJlc3BvbnNlKSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2VuZFNlc3Npb24oc2Vzc2lvbikge1xuICAgIGNvbnN0IGVudiA9IGVudmVsb3BlLmNyZWF0ZVNlc3Npb25FbnZlbG9wZShzZXNzaW9uLCB0aGlzLl9kc24sIHRoaXMuX29wdGlvbnMuX21ldGFkYXRhLCB0aGlzLl9vcHRpb25zLnR1bm5lbCk7XG5cbiAgICAvLyBfc2VuZEVudmVsb3BlIHNob3VsZCBub3QgdGhyb3dcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgdGhpcy5fc2VuZEVudmVsb3BlKGVudik7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICByZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBjYXRlZ29yeSwgZXZlbnRPckNvdW50KSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2VuZENsaWVudFJlcG9ydHMpIHtcbiAgICAgIC8vIFRPRE8gdjk6IFdlIGRvIG5vdCBuZWVkIHRoZSBgZXZlbnRgIHBhc3NlZCBhcyB0aGlyZCBhcmd1bWVudCBhbnltb3JlLCBhbmQgY2FuIHBvc3NpYmx5IHJlbW92ZSB0aGlzIG92ZXJsb2FkXG4gICAgICAvLyBJZiBldmVudCBpcyBwYXNzZWQgYXMgdGhpcmQgYXJndW1lbnQsIHdlIGFzc3VtZSB0aGlzIGlzIGEgY291bnQgb2YgMVxuICAgICAgY29uc3QgY291bnQgPSB0eXBlb2YgZXZlbnRPckNvdW50ID09PSAnbnVtYmVyJyA/IGV2ZW50T3JDb3VudCA6IDE7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8gdHJhY2sgZWFjaCBjYXRlZ29yeSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBzZXNzaW9uLCByZXBsYXlfZXZlbnQpIHNlcGFyYXRlbHlcbiAgICAgIC8vIGJ1dCBzdGlsbCBrZWVwIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlIG9mIG91dGNvbWVzLlxuICAgICAgLy8gV2UgY291bGQgdXNlIG5lc3RlZCBtYXBzLCBidXQgaXQncyBtdWNoIGVhc2llciB0byByZWFkIGFuZCB0eXBlIHRoaXMgd2F5LlxuICAgICAgLy8gQSBjb3JyZWN0IHR5cGUgZm9yIG1hcC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBpZiB3ZSB3YW50IHRvIGdvIHRoYXQgcm91dGVcbiAgICAgIC8vIHdvdWxkIGJlIGBQYXJ0aWFsPFJlY29yZDxTZW50cnlSZXF1ZXN0VHlwZSwgUGFydGlhbDxSZWNvcmQ8T3V0Y29tZSwgbnVtYmVyPj4+PmBcbiAgICAgIC8vIFdpdGggdHlwZXNjcmlwdCA0LjEgd2UgY291bGQgZXZlbiB1c2UgdGVtcGxhdGUgbGl0ZXJhbCB0eXBlc1xuICAgICAgY29uc3Qga2V5ID0gYCR7cmVhc29ufToke2NhdGVnb3J5fWA7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYFJlY29yZGluZyBvdXRjb21lOiBcIiR7a2V5fVwiJHtjb3VudCA+IDEgPyBgICgke2NvdW50fSB0aW1lcylgIDogJyd9YCk7XG4gICAgICB0aGlzLl9vdXRjb21lc1trZXldID0gKHRoaXMuX291dGNvbWVzW2tleV0gfHwgMCkgKyBjb3VudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjYXB0dXJlQWdncmVnYXRlTWV0cmljcyhtZXRyaWNCdWNrZXRJdGVtcykge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgRmx1c2hpbmcgYWdncmVnYXRlZCBtZXRyaWNzLCBudW1iZXIgb2YgbWV0cmljczogJHttZXRyaWNCdWNrZXRJdGVtcy5sZW5ndGh9YCk7XG4gICAgY29uc3QgbWV0cmljc0VudmVsb3BlID0gZW52ZWxvcGUkMS5jcmVhdGVNZXRyaWNFbnZlbG9wZShcbiAgICAgIG1ldHJpY0J1Y2tldEl0ZW1zLFxuICAgICAgdGhpcy5fZHNuLFxuICAgICAgdGhpcy5fb3B0aW9ucy5fbWV0YWRhdGEsXG4gICAgICB0aGlzLl9vcHRpb25zLnR1bm5lbCxcbiAgICApO1xuXG4gICAgLy8gX3NlbmRFbnZlbG9wZSBzaG91bGQgbm90IHRocm93XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIHRoaXMuX3NlbmRFbnZlbG9wZShtZXRyaWNzRW52ZWxvcGUpO1xuICB9XG5cbiAgLy8gS2VlcCBvbigpICYgZW1pdCgpIHNpZ25hdHVyZXMgaW4gc3luYyB3aXRoIHR5cGVzJyBjbGllbnQudHMgaW50ZXJmYWNlXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmlmaWVkLXNpZ25hdHVyZXMgKi9cblxuICAvKiogQGluaGVyaXRkb2MgKi9cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIG9uKGhvb2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9ob29rc1tob29rXSkge1xuICAgICAgdGhpcy5faG9va3NbaG9va10gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGFzc3VlIHRoZSB0eXBlcyBhcmUgY29ycmVjdFxuICAgIHRoaXMuX2hvb2tzW2hvb2tdLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBlbWl0KGhvb2ssIC4uLnJlc3QpIHtcbiAgICBpZiAodGhpcy5faG9va3NbaG9va10pIHtcbiAgICAgIHRoaXMuX2hvb2tzW2hvb2tdLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soLi4ucmVzdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuaWZpZWQtc2lnbmF0dXJlcyAqL1xuXG4gIC8qKiBTZXR1cCBpbnRlZ3JhdGlvbnMgZm9yIHRoaXMgY2xpZW50LiAqL1xuICAgX3NldHVwSW50ZWdyYXRpb25zKCkge1xuICAgIGNvbnN0IHsgaW50ZWdyYXRpb25zIH0gPSB0aGlzLl9vcHRpb25zO1xuICAgIHRoaXMuX2ludGVncmF0aW9ucyA9IGludGVncmF0aW9uLnNldHVwSW50ZWdyYXRpb25zKHRoaXMsIGludGVncmF0aW9ucyk7XG4gICAgaW50ZWdyYXRpb24uYWZ0ZXJTZXR1cEludGVncmF0aW9ucyh0aGlzLCBpbnRlZ3JhdGlvbnMpO1xuXG4gICAgLy8gVE9ETyB2ODogV2UgZG9uJ3QgbmVlZCB0aGlzIGZsYWcgYW55bW9yZVxuICAgIHRoaXMuX2ludGVncmF0aW9uc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIGV4aXN0aW5nIHNlc3Npb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGV2ZW50ICovXG4gICBfdXBkYXRlU2Vzc2lvbkZyb21FdmVudChzZXNzaW9uJDEsIGV2ZW50KSB7XG4gICAgbGV0IGNyYXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgZXJyb3JlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGV4Y2VwdGlvbnMgPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcztcblxuICAgIGlmIChleGNlcHRpb25zKSB7XG4gICAgICBlcnJvcmVkID0gdHJ1ZTtcblxuICAgICAgZm9yIChjb25zdCBleCBvZiBleGNlcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG1lY2hhbmlzbSA9IGV4Lm1lY2hhbmlzbTtcbiAgICAgICAgaWYgKG1lY2hhbmlzbSAmJiBtZWNoYW5pc20uaGFuZGxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjcmFzaGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEEgc2Vzc2lvbiBpcyB1cGRhdGVkIGFuZCB0aGF0IHNlc3Npb24gdXBkYXRlIGlzIHNlbnQgaW4gb25seSBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICAgIC8vIDEuIFNlc3Npb24gd2l0aCBub24gdGVybWluYWwgc3RhdHVzIGFuZCAwIGVycm9ycyArIGFuIGVycm9yIG9jY3VycmVkIC0+IFdpbGwgc2V0IGVycm9yIGNvdW50IHRvIDEgYW5kIHNlbmQgdXBkYXRlXG4gICAgLy8gMi4gU2Vzc2lvbiB3aXRoIG5vbiB0ZXJtaW5hbCBzdGF0dXMgYW5kIDEgZXJyb3IgKyBhIGNyYXNoIG9jY3VycmVkIC0+IFdpbGwgc2V0IHN0YXR1cyBjcmFzaGVkIGFuZCBzZW5kIHVwZGF0ZVxuICAgIGNvbnN0IHNlc3Npb25Ob25UZXJtaW5hbCA9IHNlc3Npb24kMS5zdGF0dXMgPT09ICdvayc7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlQW5kU2VuZCA9IChzZXNzaW9uTm9uVGVybWluYWwgJiYgc2Vzc2lvbiQxLmVycm9ycyA9PT0gMCkgfHwgKHNlc3Npb25Ob25UZXJtaW5hbCAmJiBjcmFzaGVkKTtcblxuICAgIGlmIChzaG91bGRVcGRhdGVBbmRTZW5kKSB7XG4gICAgICBzZXNzaW9uLnVwZGF0ZVNlc3Npb24oc2Vzc2lvbiQxLCB7XG4gICAgICAgIC4uLihjcmFzaGVkICYmIHsgc3RhdHVzOiAnY3Jhc2hlZCcgfSksXG4gICAgICAgIGVycm9yczogc2Vzc2lvbiQxLmVycm9ycyB8fCBOdW1iZXIoZXJyb3JlZCB8fCBjcmFzaGVkKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uJDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGNsaWVudCBpcyBmaW5pc2hlZCBwcm9jZXNzaW5nLiBSZXR1cm5zIGEgcHJvbWlzZSBiZWNhdXNlIGl0IHdpbGwgd2FpdCBgdGltZW91dGAgbXMgYmVmb3JlIHNheWluZ1xuICAgKiBcIm5vXCIgKHJlc29sdmluZyB0byBgZmFsc2VgKSBpbiBvcmRlciB0byBnaXZlIHRoZSBjbGllbnQgYSBjaGFuY2UgdG8gcG90ZW50aWFsbHkgZmluaXNoIGZpcnN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCBUaGUgdGltZSwgaW4gbXMsIGFmdGVyIHdoaWNoIHRvIHJlc29sdmUgdG8gYGZhbHNlYCBpZiB0aGUgY2xpZW50IGlzIHN0aWxsIGJ1c3kuIFBhc3NpbmcgYDBgIChvciBub3RcbiAgICogcGFzc2luZyBhbnl0aGluZykgd2lsbCBtYWtlIHRoZSBwcm9taXNlIHdhaXQgYXMgbG9uZyBhcyBpdCB0YWtlcyBmb3IgcHJvY2Vzc2luZyB0byBmaW5pc2ggYmVmb3JlIHJlc29sdmluZyB0b1xuICAgKiBgdHJ1ZWAuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHByb2Nlc3NpbmcgaXMgYWxyZWFkeSBkb25lIG9yIGZpbmlzaGVzIGJlZm9yZSB0aGUgdGltZW91dCwgYW5kXG4gICAqIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICAgX2lzQ2xpZW50RG9uZVByb2Nlc3NpbmcodGltZW91dCkge1xuICAgIHJldHVybiBuZXcgdXRpbHMuU3luY1Byb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBsZXQgdGlja2VkID0gMDtcbiAgICAgIGNvbnN0IHRpY2sgPSAxO1xuXG4gICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX251bVByb2Nlc3NpbmcgPT0gMCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGlja2VkICs9IHRpY2s7XG4gICAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGlja2VkID49IHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0aWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBTREsgaXMgZW5hYmxlZCBhbmQgYSB0cmFuc3BvcnQgaXMgcHJlc2VudC4gKi9cbiAgIF9pc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9ucygpLmVuYWJsZWQgIT09IGZhbHNlICYmIHRoaXMuX3RyYW5zcG9ydCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY29tbW9uIGluZm9ybWF0aW9uIHRvIGV2ZW50cy5cbiAgICpcbiAgICogVGhlIGluZm9ybWF0aW9uIGluY2x1ZGVzIHJlbGVhc2UgYW5kIGVudmlyb25tZW50IGZyb20gYG9wdGlvbnNgLFxuICAgKiBicmVhZGNydW1icyBhbmQgY29udGV4dCAoZXh0cmEsIHRhZ3MgYW5kIHVzZXIpIGZyb20gdGhlIHNjb3BlLlxuICAgKlxuICAgKiBJbmZvcm1hdGlvbiB0aGF0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgZXZlbnQgaXMgbmV2ZXIgb3ZlcndyaXR0ZW4uIEZvclxuICAgKiBuZXN0ZWQgb2JqZWN0cywgc3VjaCBhcyB0aGUgY29udGV4dCwga2V5cyBhcmUgbWVyZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50LlxuICAgKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBwYXJhbSBzY29wZSBBIHNjb3BlIGNvbnRhaW5pbmcgZXZlbnQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIEEgbmV3IGV2ZW50IHdpdGggbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gICBfcHJlcGFyZUV2ZW50KFxuICAgIGV2ZW50LFxuICAgIGhpbnQsXG4gICAgc2NvcGUsXG4gICAgaXNvbGF0aW9uU2NvcGUgPSBodWIuZ2V0SXNvbGF0aW9uU2NvcGUoKSxcbiAgKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IGludGVncmF0aW9ucyA9IE9iamVjdC5rZXlzKHRoaXMuX2ludGVncmF0aW9ucyk7XG4gICAgaWYgKCFoaW50LmludGVncmF0aW9ucyAmJiBpbnRlZ3JhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgaGludC5pbnRlZ3JhdGlvbnMgPSBpbnRlZ3JhdGlvbnM7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdwcmVwcm9jZXNzRXZlbnQnLCBldmVudCwgaGludCk7XG5cbiAgICByZXR1cm4gcHJlcGFyZUV2ZW50LnByZXBhcmVFdmVudChvcHRpb25zLCBldmVudCwgaGludCwgc2NvcGUsIHRoaXMsIGlzb2xhdGlvblNjb3BlKS50aGVuKGV2dCA9PiB7XG4gICAgICBpZiAoZXZ0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBldnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3BhZ2F0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgLi4uaXNvbGF0aW9uU2NvcGUuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCksXG4gICAgICAgIC4uLihzY29wZSA/IHNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpIDogdW5kZWZpbmVkKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRyYWNlID0gZXZ0LmNvbnRleHRzICYmIGV2dC5jb250ZXh0cy50cmFjZTtcbiAgICAgIGlmICghdHJhY2UgJiYgcHJvcGFnYXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHsgdHJhY2VJZDogdHJhY2VfaWQsIHNwYW5JZCwgcGFyZW50U3BhbklkLCBkc2MgfSA9IHByb3BhZ2F0aW9uQ29udGV4dDtcbiAgICAgICAgZXZ0LmNvbnRleHRzID0ge1xuICAgICAgICAgIHRyYWNlOiB7XG4gICAgICAgICAgICB0cmFjZV9pZCxcbiAgICAgICAgICAgIHNwYW5faWQ6IHNwYW5JZCxcbiAgICAgICAgICAgIHBhcmVudF9zcGFuX2lkOiBwYXJlbnRTcGFuSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5ldnQuY29udGV4dHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCQxID0gZHNjID8gZHNjIDogZHluYW1pY1NhbXBsaW5nQ29udGV4dC5nZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbUNsaWVudCh0cmFjZV9pZCwgdGhpcywgc2NvcGUpO1xuXG4gICAgICAgIGV2dC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7XG4gICAgICAgICAgZHluYW1pY1NhbXBsaW5nQ29udGV4dDogZHluYW1pY1NhbXBsaW5nQ29udGV4dCQxLFxuICAgICAgICAgIC4uLmV2dC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZ0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyB0aGUgZXZlbnQgYW5kIGxvZ3MgYW4gZXJyb3IgaW4gY2FzZSBvZiByZWplY3Rpb25cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBoaW50XG4gICAqIEBwYXJhbSBzY29wZVxuICAgKi9cbiAgIF9jYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQgPSB7fSwgc2NvcGUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0V2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkudGhlbihcbiAgICAgIGZpbmFsRXZlbnQgPT4ge1xuICAgICAgICByZXR1cm4gZmluYWxFdmVudC5ldmVudF9pZDtcbiAgICAgIH0sXG4gICAgICByZWFzb24gPT4ge1xuICAgICAgICBpZiAoZGVidWdCdWlsZC5ERUJVR19CVUlMRCkge1xuICAgICAgICAgIC8vIElmIHNvbWV0aGluZydzIGdvbmUgd3JvbmcsIGxvZyB0aGUgZXJyb3IgYXMgYSB3YXJuaW5nLiBJZiBpdCdzIGp1c3QgdXMgaGF2aW5nIHVzZWQgYSBgU2VudHJ5RXJyb3JgIGZvclxuICAgICAgICAgIC8vIGNvbnRyb2wgZmxvdywgbG9nIGp1c3QgdGhlIG1lc3NhZ2UgKG5vIHN0YWNrKSBhcyBhIGxvZy1sZXZlbCBsb2cuXG4gICAgICAgICAgY29uc3Qgc2VudHJ5RXJyb3IgPSByZWFzb24gO1xuICAgICAgICAgIGlmIChzZW50cnlFcnJvci5sb2dMZXZlbCA9PT0gJ2xvZycpIHtcbiAgICAgICAgICAgIHV0aWxzLmxvZ2dlci5sb2coc2VudHJ5RXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKHNlbnRyeUVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgYW4gZXZlbnQgKGVpdGhlciBlcnJvciBvciBtZXNzYWdlKSBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICAgKlxuICAgKiBUaGlzIGFsc28gYWRkcyBicmVhZGNydW1icyBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiB0byB0aGUgZXZlbnQuIEhvd2V2ZXIsXG4gICAqIHBsYXRmb3JtIHNwZWNpZmljIG1ldGEgZGF0YSAoc3VjaCBhcyB0aGUgVXNlcidzIElQIGFkZHJlc3MpIG11c3QgYmUgYWRkZWRcbiAgICogYnkgdGhlIFNESyBpbXBsZW1lbnRvci5cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0byBzZW5kIHRvIFNlbnRyeS5cbiAgICogQHBhcmFtIGhpbnQgTWF5IGNvbnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLlxuICAgKiBAcGFyYW0gc2NvcGUgQSBzY29wZSBjb250YWluaW5nIGV2ZW50IG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyBBIFN5bmNQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXZlbnQgb3IgcmVqZWN0cyBpbiBjYXNlIGV2ZW50IHdhcy93aWxsIG5vdCBiZSBzZW5kLlxuICAgKi9cbiAgIF9wcm9jZXNzRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IHsgc2FtcGxlUmF0ZSB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb24gPSBpc1RyYW5zYWN0aW9uRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGlzRXJyb3IgPSBpc0Vycm9yRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgfHwgJ2Vycm9yJztcbiAgICBjb25zdCBiZWZvcmVTZW5kTGFiZWwgPSBgYmVmb3JlIHNlbmQgZm9yIHR5cGUgXFxgJHtldmVudFR5cGV9XFxgYDtcblxuICAgIC8vIDEuMCA9PT0gMTAwJSBldmVudHMgYXJlIHNlbnRcbiAgICAvLyAwLjAgPT09IDAlIGV2ZW50cyBhcmUgc2VudFxuICAgIC8vIFNhbXBsaW5nIGZvciB0cmFuc2FjdGlvbiBoYXBwZW5zIHNvbWV3aGVyZSBlbHNlXG4gICAgaWYgKGlzRXJyb3IgJiYgdHlwZW9mIHNhbXBsZVJhdGUgPT09ICdudW1iZXInICYmIE1hdGgucmFuZG9tKCkgPiBzYW1wbGVSYXRlKSB7XG4gICAgICB0aGlzLnJlY29yZERyb3BwZWRFdmVudCgnc2FtcGxlX3JhdGUnLCAnZXJyb3InLCBldmVudCk7XG4gICAgICByZXR1cm4gdXRpbHMucmVqZWN0ZWRTeW5jUHJvbWlzZShcbiAgICAgICAgbmV3IHV0aWxzLlNlbnRyeUVycm9yKFxuICAgICAgICAgIGBEaXNjYXJkaW5nIGV2ZW50IGJlY2F1c2UgaXQncyBub3QgaW5jbHVkZWQgaW4gdGhlIHJhbmRvbSBzYW1wbGUgKHNhbXBsaW5nIHJhdGUgPSAke3NhbXBsZVJhdGV9KWAsXG4gICAgICAgICAgJ2xvZycsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFDYXRlZ29yeSA9IGV2ZW50VHlwZSA9PT0gJ3JlcGxheV9ldmVudCcgPyAncmVwbGF5JyA6IGV2ZW50VHlwZTtcblxuICAgIGNvbnN0IHNka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSB8fCB7fTtcbiAgICBjb25zdCBjYXB0dXJlZFNwYW5Jc29sYXRpb25TY29wZSA9IHNka1Byb2Nlc3NpbmdNZXRhZGF0YS5jYXB0dXJlZFNwYW5Jc29sYXRpb25TY29wZTtcblxuICAgIHJldHVybiB0aGlzLl9wcmVwYXJlRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlLCBjYXB0dXJlZFNwYW5Jc29sYXRpb25TY29wZSlcbiAgICAgIC50aGVuKHByZXBhcmVkID0+IHtcbiAgICAgICAgaWYgKHByZXBhcmVkID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5yZWNvcmREcm9wcGVkRXZlbnQoJ2V2ZW50X3Byb2Nlc3NvcicsIGRhdGFDYXRlZ29yeSwgZXZlbnQpO1xuICAgICAgICAgIHRocm93IG5ldyB1dGlscy5TZW50cnlFcnJvcignQW4gZXZlbnQgcHJvY2Vzc29yIHJldHVybmVkIGBudWxsYCwgd2lsbCBub3Qgc2VuZCBldmVudC4nLCAnbG9nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0ludGVybmFsRXhjZXB0aW9uID0gaGludC5kYXRhICYmIChoaW50LmRhdGEgKS5fX3NlbnRyeV9fID09PSB0cnVlO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbEV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBwcmVwYXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NCZWZvcmVTZW5kKG9wdGlvbnMsIHByZXBhcmVkLCBoaW50KTtcbiAgICAgICAgcmV0dXJuIF92YWxpZGF0ZUJlZm9yZVNlbmRSZXN1bHQocmVzdWx0LCBiZWZvcmVTZW5kTGFiZWwpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHByb2Nlc3NlZEV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NlZEV2ZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5yZWNvcmREcm9wcGVkRXZlbnQoJ2JlZm9yZV9zZW5kJywgZGF0YUNhdGVnb3J5LCBldmVudCk7XG4gICAgICAgICAgaWYgKGlzVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5zID0gZXZlbnQuc3BhbnMgfHwgW107XG4gICAgICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gaXRzZWxmIGNvdW50cyBhcyBvbmUgc3BhbiwgcGx1cyBhbGwgdGhlIGNoaWxkIHNwYW5zIHRoYXQgYXJlIGFkZGVkXG4gICAgICAgICAgICBjb25zdCBzcGFuQ291bnQgPSAxICsgc3BhbnMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5yZWNvcmREcm9wcGVkRXZlbnQoJ2JlZm9yZV9zZW5kJywgJ3NwYW4nLCBzcGFuQ291bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgdXRpbHMuU2VudHJ5RXJyb3IoYCR7YmVmb3JlU2VuZExhYmVsfSByZXR1cm5lZCBcXGBudWxsXFxgLCB3aWxsIG5vdCBzZW5kIGV2ZW50LmAsICdsb2cnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZSAmJiBzY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgICAgIGlmICghaXNUcmFuc2FjdGlvbiAmJiBzZXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlU2Vzc2lvbkZyb21FdmVudChzZXNzaW9uLCBwcm9jZXNzZWRFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUcmFuc2FjdGlvbikge1xuICAgICAgICAgIGNvbnN0IHNwYW5Db3VudEJlZm9yZSA9XG4gICAgICAgICAgICAocHJvY2Vzc2VkRXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhICYmIHByb2Nlc3NlZEV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YS5zcGFuQ291bnRCZWZvcmVQcm9jZXNzaW5nKSB8fFxuICAgICAgICAgICAgMDtcbiAgICAgICAgICBjb25zdCBzcGFuQ291bnRBZnRlciA9IHByb2Nlc3NlZEV2ZW50LnNwYW5zID8gcHJvY2Vzc2VkRXZlbnQuc3BhbnMubGVuZ3RoIDogMDtcblxuICAgICAgICAgIGNvbnN0IGRyb3BwZWRTcGFuQ291bnQgPSBzcGFuQ291bnRCZWZvcmUgLSBzcGFuQ291bnRBZnRlcjtcbiAgICAgICAgICBpZiAoZHJvcHBlZFNwYW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkRHJvcHBlZEV2ZW50KCdiZWZvcmVfc2VuZCcsICdzcGFuJywgZHJvcHBlZFNwYW5Db3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm9uZSBvZiB0aGUgU2VudHJ5IGJ1aWx0IGV2ZW50IHByb2Nlc3NvciB3aWxsIHVwZGF0ZSB0cmFuc2FjdGlvbiBuYW1lLFxuICAgICAgICAvLyBzbyBpZiB0aGUgdHJhbnNhY3Rpb24gbmFtZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IGFuIGV2ZW50IHByb2Nlc3Nvciwgd2Uga25vd1xuICAgICAgICAvLyBpdCBoYXMgdG8gY29tZSBmcm9tIGN1c3RvbSBldmVudCBwcm9jZXNzb3IgYWRkZWQgYnkgYSB1c2VyXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mbyA9IHByb2Nlc3NlZEV2ZW50LnRyYW5zYWN0aW9uX2luZm87XG4gICAgICAgIGlmIChpc1RyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uSW5mbyAmJiBwcm9jZXNzZWRFdmVudC50cmFuc2FjdGlvbiAhPT0gZXZlbnQudHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSAnY3VzdG9tJztcbiAgICAgICAgICBwcm9jZXNzZWRFdmVudC50cmFuc2FjdGlvbl9pbmZvID0ge1xuICAgICAgICAgICAgLi4udHJhbnNhY3Rpb25JbmZvLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbmRFdmVudChwcm9jZXNzZWRFdmVudCwgaGludCk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRFdmVudDtcbiAgICAgIH0pXG4gICAgICAudGhlbihudWxsLCByZWFzb24gPT4ge1xuICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgdXRpbHMuU2VudHJ5RXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhcHR1cmVFeGNlcHRpb24ocmVhc29uLCB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgX19zZW50cnlfXzogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiByZWFzb24sXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgdXRpbHMuU2VudHJ5RXJyb3IoXG4gICAgICAgICAgYEV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgdGhyZXcgYW4gZXJyb3IsIG9yaWdpbmFsIGV2ZW50IHdpbGwgbm90IGJlIHNlbnQuIERldGFpbHMgaGF2ZSBiZWVuIHNlbnQgYXMgYSBuZXcgZXZlbnQuXFxuUmVhc29uOiAke3JlYXNvbn1gLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXBpZXMgdGhlIGNsaWVudCB3aXRoIHByb2Nlc3NpbmcgYW5kIGV2ZW50XG4gICAqL1xuICAgX3Byb2Nlc3MocHJvbWlzZSkge1xuICAgIHRoaXMuX251bVByb2Nlc3NpbmcrKztcbiAgICB2b2lkIHByb21pc2UudGhlbihcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5fbnVtUHJvY2Vzc2luZy0tO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5fbnVtUHJvY2Vzc2luZy0tO1xuICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICAgX3NlbmRFbnZlbG9wZShlbnZlbG9wZSkge1xuICAgIHRoaXMuZW1pdCgnYmVmb3JlRW52ZWxvcGUnLCBlbnZlbG9wZSk7XG5cbiAgICBpZiAodGhpcy5faXNFbmFibGVkKCkgJiYgdGhpcy5fdHJhbnNwb3J0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNlbmQoZW52ZWxvcGUpLnRoZW4obnVsbCwgcmVhc29uID0+IHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNlbmRpbmcgZXZlbnQ6JywgcmVhc29uKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5lcnJvcignVHJhbnNwb3J0IGRpc2FibGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBvdXRjb21lcyBvbiB0aGlzIGNsaWVudCBhbmQgcmV0dXJucyB0aGVtLlxuICAgKi9cbiAgIF9jbGVhck91dGNvbWVzKCkge1xuICAgIGNvbnN0IG91dGNvbWVzID0gdGhpcy5fb3V0Y29tZXM7XG4gICAgdGhpcy5fb3V0Y29tZXMgPSB7fTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob3V0Y29tZXMpLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3QgW3JlYXNvbiwgY2F0ZWdvcnldID0ga2V5LnNwbGl0KCc6JykgO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgcXVhbnRpdHk6IG91dGNvbWVzW2tleV0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuXG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCByZXR1cm4gdmFsdWUgb2YgY29uZmlndXJlZCBgYmVmb3JlU2VuZGAgb3IgYGJlZm9yZVNlbmRUcmFuc2FjdGlvbmAgaXMgb2YgZXhwZWN0ZWQgdHlwZSwgYW5kIHJldHVybnMgdGhlIHZhbHVlIGlmIHNvLlxuICovXG5mdW5jdGlvbiBfdmFsaWRhdGVCZWZvcmVTZW5kUmVzdWx0KFxuICBiZWZvcmVTZW5kUmVzdWx0LFxuICBiZWZvcmVTZW5kTGFiZWwsXG4pIHtcbiAgY29uc3QgaW52YWxpZFZhbHVlRXJyb3IgPSBgJHtiZWZvcmVTZW5kTGFiZWx9IG11c3QgcmV0dXJuIFxcYG51bGxcXGAgb3IgYSB2YWxpZCBldmVudC5gO1xuICBpZiAodXRpbHMuaXNUaGVuYWJsZShiZWZvcmVTZW5kUmVzdWx0KSkge1xuICAgIHJldHVybiBiZWZvcmVTZW5kUmVzdWx0LnRoZW4oXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGlmICghdXRpbHMuaXNQbGFpbk9iamVjdChldmVudCkgJiYgZXZlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgdXRpbHMuU2VudHJ5RXJyb3IoaW52YWxpZFZhbHVlRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH0sXG4gICAgICBlID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IHV0aWxzLlNlbnRyeUVycm9yKGAke2JlZm9yZVNlbmRMYWJlbH0gcmVqZWN0ZWQgd2l0aCAke2V9YCk7XG4gICAgICB9LFxuICAgICk7XG4gIH0gZWxzZSBpZiAoIXV0aWxzLmlzUGxhaW5PYmplY3QoYmVmb3JlU2VuZFJlc3VsdCkgJiYgYmVmb3JlU2VuZFJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyB1dGlscy5TZW50cnlFcnJvcihpbnZhbGlkVmFsdWVFcnJvcik7XG4gIH1cbiAgcmV0dXJuIGJlZm9yZVNlbmRSZXN1bHQ7XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgbWF0Y2hpbmcgYGJlZm9yZVNlbmRYWFhgIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzQmVmb3JlU2VuZChcbiAgb3B0aW9ucyxcbiAgZXZlbnQsXG4gIGhpbnQsXG4pIHtcbiAgY29uc3QgeyBiZWZvcmVTZW5kLCBiZWZvcmVTZW5kVHJhbnNhY3Rpb24gfSA9IG9wdGlvbnM7XG5cbiAgaWYgKGlzRXJyb3JFdmVudChldmVudCkgJiYgYmVmb3JlU2VuZCkge1xuICAgIHJldHVybiBiZWZvcmVTZW5kKGV2ZW50LCBoaW50KTtcbiAgfVxuXG4gIGlmIChpc1RyYW5zYWN0aW9uRXZlbnQoZXZlbnQpICYmIGJlZm9yZVNlbmRUcmFuc2FjdGlvbikge1xuICAgIGlmIChldmVudC5zcGFucykge1xuICAgICAgLy8gV2Ugc3RvcmUgdGhlICMgb2Ygc3BhbnMgYmVmb3JlIHByb2Nlc3NpbmcgaW4gU0RLIG1ldGFkYXRhLFxuICAgICAgLy8gc28gd2UgY2FuIGNvbXBhcmUgaXQgYWZ0ZXJ3YXJkcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgc3BhbnMgd2VyZSBkcm9wcGVkXG4gICAgICBjb25zdCBzcGFuQ291bnRCZWZvcmUgPSBldmVudC5zcGFucy5sZW5ndGg7XG4gICAgICBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSxcbiAgICAgICAgc3BhbkNvdW50QmVmb3JlUHJvY2Vzc2luZzogc3BhbkNvdW50QmVmb3JlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJlZm9yZVNlbmRUcmFuc2FjdGlvbihldmVudCwgaGludCk7XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JFdmVudChldmVudCkge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zYWN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbic7XG59XG5cbi8qKlxuICogQWRkIGFuIGV2ZW50IHByb2Nlc3NvciB0byB0aGUgY3VycmVudCBjbGllbnQuXG4gKiBUaGlzIGV2ZW50IHByb2Nlc3NvciB3aWxsIHJ1biBmb3IgYWxsIGV2ZW50cyBwcm9jZXNzZWQgYnkgdGhpcyBjbGllbnQuXG4gKi9cbmZ1bmN0aW9uIGFkZEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGNsaWVudCA9IGV4cG9ydHMkMS5nZXRDbGllbnQoKTtcblxuICBpZiAoIWNsaWVudCB8fCAhY2xpZW50LmFkZEV2ZW50UHJvY2Vzc29yKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2xpZW50LmFkZEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0cy5CYXNlQ2xpZW50ID0gQmFzZUNsaWVudDtcbmV4cG9ydHMuYWRkRXZlbnRQcm9jZXNzb3IgPSBhZGRFdmVudFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2VjbGllbnQuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG4vKipcbiAqIENyZWF0ZSBlbnZlbG9wZSBmcm9tIGNoZWNrIGluIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrSW5FbnZlbG9wZShcbiAgY2hlY2tJbixcbiAgZHluYW1pY1NhbXBsaW5nQ29udGV4dCxcbiAgbWV0YWRhdGEsXG4gIHR1bm5lbCxcbiAgZHNuLFxuKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9O1xuXG4gIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspIHtcbiAgICBoZWFkZXJzLnNkayA9IHtcbiAgICAgIG5hbWU6IG1ldGFkYXRhLnNkay5uYW1lLFxuICAgICAgdmVyc2lvbjogbWV0YWRhdGEuc2RrLnZlcnNpb24sXG4gICAgfTtcbiAgfVxuXG4gIGlmICghIXR1bm5lbCAmJiAhIWRzbikge1xuICAgIGhlYWRlcnMuZHNuID0gdXRpbHMuZHNuVG9TdHJpbmcoZHNuKTtcbiAgfVxuXG4gIGlmIChkeW5hbWljU2FtcGxpbmdDb250ZXh0KSB7XG4gICAgaGVhZGVycy50cmFjZSA9IHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKGR5bmFtaWNTYW1wbGluZ0NvbnRleHQpIDtcbiAgfVxuXG4gIGNvbnN0IGl0ZW0gPSBjcmVhdGVDaGVja0luRW52ZWxvcGVJdGVtKGNoZWNrSW4pO1xuICByZXR1cm4gdXRpbHMuY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgW2l0ZW1dKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2hlY2tJbkVudmVsb3BlSXRlbShjaGVja0luKSB7XG4gIGNvbnN0IGNoZWNrSW5IZWFkZXJzID0ge1xuICAgIHR5cGU6ICdjaGVja19pbicsXG4gIH07XG4gIHJldHVybiBbY2hlY2tJbkhlYWRlcnMsIGNoZWNrSW5dO1xufVxuXG5leHBvcnRzLmNyZWF0ZUNoZWNrSW5FbnZlbG9wZSA9IGNyZWF0ZUNoZWNrSW5FbnZlbG9wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoZWNraW4uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IENPVU5URVJfTUVUUklDX1RZUEUgPSAnYycgO1xuY29uc3QgR0FVR0VfTUVUUklDX1RZUEUgPSAnZycgO1xuY29uc3QgU0VUX01FVFJJQ19UWVBFID0gJ3MnIDtcbmNvbnN0IERJU1RSSUJVVElPTl9NRVRSSUNfVFlQRSA9ICdkJyA7XG5cbi8qKlxuICogVGhpcyBkb2VzIG5vdCBtYXRjaCBzcGVjIGluIGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9tZXRyaWNzXG4gKiBidXQgd2FzIGNob3NlbiB0byBvcHRpbWl6ZSBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2UgaW4gYnJvd3NlciBlbnZpcm9ubWVudHMuXG4gKi9cbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9GTFVTSF9JTlRFUlZBTCA9IDUwMDA7XG5cbi8qKlxuICogU0RLcyBhcmUgcmVxdWlyZWQgdG8gYnVja2V0IGludG8gMTAgc2Vjb25kIGludGVydmFscyAocm9sbHVwIGluIHNlY29uZHMpXG4gKiB3aGljaCBpcyB0aGUgY3VycmVudCBsb3dlciBib3VuZCBvZiBtZXRyaWMgYWNjdXJhY3kuXG4gKi9cbmNvbnN0IERFRkFVTFRfRkxVU0hfSU5URVJWQUwgPSAxMDAwMDtcblxuLyoqXG4gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWV0cmljcyB0aGF0IHNob3VsZCBiZSBzdG9yZWQgaW4gbWVtb3J5LlxuICovXG5jb25zdCBNQVhfV0VJR0hUID0gMTAwMDA7XG5cbmV4cG9ydHMuQ09VTlRFUl9NRVRSSUNfVFlQRSA9IENPVU5URVJfTUVUUklDX1RZUEU7XG5leHBvcnRzLkRFRkFVTFRfQlJPV1NFUl9GTFVTSF9JTlRFUlZBTCA9IERFRkFVTFRfQlJPV1NFUl9GTFVTSF9JTlRFUlZBTDtcbmV4cG9ydHMuREVGQVVMVF9GTFVTSF9JTlRFUlZBTCA9IERFRkFVTFRfRkxVU0hfSU5URVJWQUw7XG5leHBvcnRzLkRJU1RSSUJVVElPTl9NRVRSSUNfVFlQRSA9IERJU1RSSUJVVElPTl9NRVRSSUNfVFlQRTtcbmV4cG9ydHMuR0FVR0VfTUVUUklDX1RZUEUgPSBHQVVHRV9NRVRSSUNfVFlQRTtcbmV4cG9ydHMuTUFYX1dFSUdIVCA9IE1BWF9XRUlHSFQ7XG5leHBvcnRzLlNFVF9NRVRSSUNfVFlQRSA9IFNFVF9NRVRSSUNfVFlQRTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMuanMnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscy5qcycpO1xuXG4vKipcbiAqIEEgbWV0cmljIGluc3RhbmNlIHJlcHJlc2VudGluZyBhIGNvdW50ZXIuXG4gKi9cbmNsYXNzIENvdW50ZXJNZXRyaWMgIHtcbiAgIGNvbnN0cnVjdG9yKCBfdmFsdWUpIHt0aGlzLl92YWx1ZSA9IF92YWx1ZTt9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBnZXQgd2VpZ2h0KCkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBhZGQodmFsdWUpIHtcbiAgICB0aGlzLl92YWx1ZSArPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuX3ZhbHVlfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG1ldHJpYyBpbnN0YW5jZSByZXByZXNlbnRpbmcgYSBnYXVnZS5cbiAqL1xuY2xhc3MgR2F1Z2VNZXRyaWMgIHtcblxuICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICB0aGlzLl9sYXN0ID0gdmFsdWU7XG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgdGhpcy5fc3VtID0gdmFsdWU7XG4gICAgdGhpcy5fY291bnQgPSAxO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBnZXQgd2VpZ2h0KCkge1xuICAgIHJldHVybiA1O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBhZGQodmFsdWUpIHtcbiAgICB0aGlzLl9sYXN0ID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlIDwgdGhpcy5fbWluKSB7XG4gICAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID4gdGhpcy5fbWF4KSB7XG4gICAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fc3VtICs9IHZhbHVlO1xuICAgIHRoaXMuX2NvdW50Kys7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgJHt0aGlzLl9sYXN0fToke3RoaXMuX21pbn06JHt0aGlzLl9tYXh9OiR7dGhpcy5fc3VtfToke3RoaXMuX2NvdW50fWA7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG1ldHJpYyBpbnN0YW5jZSByZXByZXNlbnRpbmcgYSBkaXN0cmlidXRpb24uXG4gKi9cbmNsYXNzIERpc3RyaWJ1dGlvbk1ldHJpYyAge1xuXG4gICBjb25zdHJ1Y3RvcihmaXJzdCkge1xuICAgIHRoaXMuX3ZhbHVlID0gW2ZpcnN0XTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUubGVuZ3RoO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBhZGQodmFsdWUpIHtcbiAgICB0aGlzLl92YWx1ZS5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlLmpvaW4oJzonKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbWV0cmljIGluc3RhbmNlIHJlcHJlc2VudGluZyBhIHNldC5cbiAqL1xuY2xhc3MgU2V0TWV0cmljICB7XG5cbiAgIGNvbnN0cnVjdG9yKCBmaXJzdCkge3RoaXMuZmlyc3QgPSBmaXJzdDtcbiAgICB0aGlzLl92YWx1ZSA9IG5ldyBTZXQoW2ZpcnN0XSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgIGdldCB3ZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlLnNpemU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGFkZCh2YWx1ZSkge1xuICAgIHRoaXMuX3ZhbHVlLmFkZCh2YWx1ZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3ZhbHVlKVxuICAgICAgLm1hcCh2YWwgPT4gKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdXRpbHMuc2ltcGxlSGFzaCh2YWwpIDogdmFsKSlcbiAgICAgIC5qb2luKCc6Jyk7XG4gIH1cbn1cblxuY29uc3QgTUVUUklDX01BUCA9IHtcbiAgW2NvbnN0YW50cy5DT1VOVEVSX01FVFJJQ19UWVBFXTogQ291bnRlck1ldHJpYyxcbiAgW2NvbnN0YW50cy5HQVVHRV9NRVRSSUNfVFlQRV06IEdhdWdlTWV0cmljLFxuICBbY29uc3RhbnRzLkRJU1RSSUJVVElPTl9NRVRSSUNfVFlQRV06IERpc3RyaWJ1dGlvbk1ldHJpYyxcbiAgW2NvbnN0YW50cy5TRVRfTUVUUklDX1RZUEVdOiBTZXRNZXRyaWMsXG59O1xuXG5leHBvcnRzLkNvdW50ZXJNZXRyaWMgPSBDb3VudGVyTWV0cmljO1xuZXhwb3J0cy5EaXN0cmlidXRpb25NZXRyaWMgPSBEaXN0cmlidXRpb25NZXRyaWM7XG5leHBvcnRzLkdhdWdlTWV0cmljID0gR2F1Z2VNZXRyaWM7XG5leHBvcnRzLk1FVFJJQ19NQVAgPSBNRVRSSUNfTUFQO1xuZXhwb3J0cy5TZXRNZXRyaWMgPSBTZXRNZXRyaWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0YW5jZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMkMSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzLmpzJyk7XG5jb25zdCBpbnN0YW5jZSA9IHJlcXVpcmUoJy4vaW5zdGFuY2UuanMnKTtcbmNvbnN0IG1ldHJpY1N1bW1hcnkgPSByZXF1aXJlKCcuL21ldHJpYy1zdW1tYXJ5LmpzJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcblxuLyoqXG4gKiBBIG1ldHJpY3MgYWdncmVnYXRvciB0aGF0IGFnZ3JlZ2F0ZXMgbWV0cmljcyBpbiBtZW1vcnkgYW5kIGZsdXNoZXMgdGhlbSBwZXJpb2RpY2FsbHkuXG4gKi9cbmNsYXNzIE1ldHJpY3NBZ2dyZWdhdG9yICB7XG4gIC8vIFRPRE8oQGFub25yaWcpOiBVc2UgRmluYWxpemF0aW9uUmVnaXN0cnkgdG8gaGF2ZSBhIHByb3BlciB3YXkgb2YgZmx1c2hpbmcgdGhlIGJ1Y2tldHNcbiAgLy8gd2hlbiB0aGUgYWdncmVnYXRvciBpcyBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GaW5hbGl6YXRpb25SZWdpc3RyeVxuXG4gIC8vIERpZmZlcmVudCBtZXRyaWNzIGhhdmUgZGlmZmVyZW50IHdlaWdodHMuIFdlIHVzZSB0aGlzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWV0cmljc1xuICAvLyB0aGF0IHdlIHN0b3JlIGluIG1lbW9yeS5cblxuICAvLyBDYXN0IHRvIGFueSBzbyB0aGF0IGl0IGNhbiB1c2UgTm9kZS5qcyB0aW1lb3V0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cbiAgLy8gU0RLcyBhcmUgcmVxdWlyZWQgdG8gc2hpZnQgdGhlIGZsdXNoIGludGVydmFsIGJ5IHJhbmRvbSgpICogcm9sbHVwX2luX3NlY29uZHMuXG4gIC8vIFRoYXQgc2hpZnQgaXMgZGV0ZXJtaW5lZCBvbmNlIHBlciBzdGFydHVwIHRvIGNyZWF0ZSBqaXR0ZXJpbmcuXG5cbiAgLy8gQW4gU0RLIGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gZm9yY2UgZmx1c2hpbmcgYWhlYWQgb2Ygc2NoZWR1bGVkIHRpbWUgaWYgdGhlIG1lbW9yeVxuICAvLyBwcmVzc3VyZSBpcyB0b28gaGlnaC4gVGhlcmUgaXMgbm8gcnVsZSBmb3IgdGhpcyBvdGhlciB0aGFuIHRoYXQgU0RLcyBzaG91bGQgYmUgdHJhY2tpbmdcbiAgLy8gYWJzdHJhY3QgYWdncmVnYXRpb24gY29tcGxleGl0eSAoZWc6IGEgY291bnRlciBvbmx5IGNhcnJpZXMgYSBzaW5nbGUgZmxvYXQsIHdoZXJlYXMgYVxuICAvLyBkaXN0cmlidXRpb24gaXMgYSBmbG9hdCBwZXIgZW1pc3Npb24pLlxuICAvL1xuICAvLyBGb3JjZSBmbHVzaCBpcyB1c2VkIG9uIGVpdGhlciBzaHV0ZG93biwgZmx1c2goKSBvciB3aGVuIHdlIGV4Y2VlZCB0aGUgbWF4IHdlaWdodC5cblxuICAgY29uc3RydWN0b3IoICBfY2xpZW50KSB7dGhpcy5fY2xpZW50ID0gX2NsaWVudDtcbiAgICB0aGlzLl9idWNrZXRzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2J1Y2tldHNUb3RhbFdlaWdodCA9IDA7XG5cbiAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuX2ZsdXNoKCksIGNvbnN0YW50cy5ERUZBVUxUX0ZMVVNIX0lOVEVSVkFMKSA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIGlmICh0aGlzLl9pbnRlcnZhbC51bnJlZikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgdGhpcy5faW50ZXJ2YWwudW5yZWYoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mbHVzaFNoaWZ0ID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIGNvbnN0YW50cy5ERUZBVUxUX0ZMVVNIX0lOVEVSVkFMKSAvIDEwMDApO1xuICAgIHRoaXMuX2ZvcmNlRmx1c2ggPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGFkZChcbiAgICBtZXRyaWNUeXBlLFxuICAgIHVuc2FuaXRpemVkTmFtZSxcbiAgICB2YWx1ZSxcbiAgICB1bnNhbml0aXplZFVuaXQgPSAnbm9uZScsXG4gICAgdW5zYW5pdGl6ZWRUYWdzID0ge30sXG4gICAgbWF5YmVGbG9hdFRpbWVzdGFtcCA9IHV0aWxzJDEudGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGguZmxvb3IobWF5YmVGbG9hdFRpbWVzdGFtcCk7XG4gICAgY29uc3QgbmFtZSA9IHV0aWxzLnNhbml0aXplTWV0cmljS2V5KHVuc2FuaXRpemVkTmFtZSk7XG4gICAgY29uc3QgdGFncyA9IHV0aWxzLnNhbml0aXplVGFncyh1bnNhbml0aXplZFRhZ3MpO1xuICAgIGNvbnN0IHVuaXQgPSB1dGlscy5zYW5pdGl6ZVVuaXQodW5zYW5pdGl6ZWRVbml0ICk7XG5cbiAgICBjb25zdCBidWNrZXRLZXkgPSB1dGlscy5nZXRCdWNrZXRLZXkobWV0cmljVHlwZSwgbmFtZSwgdW5pdCwgdGFncyk7XG5cbiAgICBsZXQgYnVja2V0SXRlbSA9IHRoaXMuX2J1Y2tldHMuZ2V0KGJ1Y2tldEtleSk7XG4gICAgLy8gSWYgdGhpcyBpcyBhIHNldCBtZXRyaWMsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBkZWx0YSBmcm9tIHRoZSBwcmV2aW91cyB3ZWlnaHQuXG4gICAgY29uc3QgcHJldmlvdXNXZWlnaHQgPSBidWNrZXRJdGVtICYmIG1ldHJpY1R5cGUgPT09IGNvbnN0YW50cy5TRVRfTUVUUklDX1RZUEUgPyBidWNrZXRJdGVtLm1ldHJpYy53ZWlnaHQgOiAwO1xuXG4gICAgaWYgKGJ1Y2tldEl0ZW0pIHtcbiAgICAgIGJ1Y2tldEl0ZW0ubWV0cmljLmFkZCh2YWx1ZSk7XG4gICAgICAvLyBUT0RPKGFiaGkpOiBEbyB3ZSBuZWVkIHRoaXMgY2hlY2s/XG4gICAgICBpZiAoYnVja2V0SXRlbS50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgICAgYnVja2V0SXRlbS50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Y2tldEl0ZW0gPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igd2UgZG9uJ3QgbmVlZCB0byBuYXJyb3cgZG93biB0aGUgdHlwZSBvZiB2YWx1ZSBoZXJlLCBzYXZlcyBidW5kbGUgc2l6ZS5cbiAgICAgICAgbWV0cmljOiBuZXcgaW5zdGFuY2UuTUVUUklDX01BUFttZXRyaWNUeXBlXSh2YWx1ZSksXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgbWV0cmljVHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdW5pdCxcbiAgICAgICAgdGFncyxcbiAgICAgIH07XG4gICAgICB0aGlzLl9idWNrZXRzLnNldChidWNrZXRLZXksIGJ1Y2tldEl0ZW0pO1xuICAgIH1cblxuICAgIC8vIElmIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCdzIGEgc2V0IG1ldHJpYyBzbyBjYWxjdWxhdGUgdGhlIGRlbHRhIGZyb20gdGhlIHByZXZpb3VzIHdlaWdodC5cbiAgICBjb25zdCB2YWwgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gYnVja2V0SXRlbS5tZXRyaWMud2VpZ2h0IC0gcHJldmlvdXNXZWlnaHQgOiB2YWx1ZTtcbiAgICBtZXRyaWNTdW1tYXJ5LnVwZGF0ZU1ldHJpY1N1bW1hcnlPbkFjdGl2ZVNwYW4obWV0cmljVHlwZSwgbmFtZSwgdmFsLCB1bml0LCB1bnNhbml0aXplZFRhZ3MsIGJ1Y2tldEtleSk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgYnVja2V0cyBzbyB0aGF0IHdlIGNhblxuICAgIC8vIGZsdXNoIHRoZW0gd2hlbiB3ZSBleGNlZWQgdGhlIG1heCB3ZWlnaHQuXG4gICAgdGhpcy5fYnVja2V0c1RvdGFsV2VpZ2h0ICs9IGJ1Y2tldEl0ZW0ubWV0cmljLndlaWdodDtcblxuICAgIGlmICh0aGlzLl9idWNrZXRzVG90YWxXZWlnaHQgPj0gY29uc3RhbnRzLk1BWF9XRUlHSFQpIHtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2hlcyB0aGUgY3VycmVudCBtZXRyaWNzIHRvIHRoZSB0cmFuc3BvcnQgdmlhIHRoZSB0cmFuc3BvcnQuXG4gICAqL1xuICAgZmx1c2goKSB7XG4gICAgdGhpcy5fZm9yY2VGbHVzaCA9IHRydWU7XG4gICAgdGhpcy5fZmx1c2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0cyBkb3duIG1ldHJpY3MgYWdncmVnYXRvciBhbmQgY2xlYXJzIGFsbCBtZXRyaWNzLlxuICAgKi9cbiAgIGNsb3NlKCkge1xuICAgIHRoaXMuX2ZvcmNlRmx1c2ggPSB0cnVlO1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgIHRoaXMuX2ZsdXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2hlcyB0aGUgYnVja2V0cyBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhZ2dyZWdhdG9yLlxuICAgKiBJZiBpdCBpcyBhIGZvcmNlIGZsdXNoLCB3aGljaCBoYXBwZW5zIG9uIHNodXRkb3duLCBpdCB3aWxsIGZsdXNoIGFsbCBidWNrZXRzLlxuICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgb25seSBmbHVzaCBidWNrZXRzIHRoYXQgYXJlIG9sZGVyIHRoYW4gdGhlIGZsdXNoIGludGVydmFsLFxuICAgKiBhbmQgYWNjb3JkaW5nIHRvIHRoZSBmbHVzaCBzaGlmdC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBtdXRhdGVzIGBfZm9yY2VGbHVzaGAgYW5kIGBfYnVja2V0c1RvdGFsV2VpZ2h0YCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgIF9mbHVzaCgpIHtcbiAgICAvLyBUT0RPKEBhbm9ucmlnKTogQWRkIEF0b21pY3MgZm9yIGxvY2tpbmcgdG8gYXZvaWQgaGF2aW5nIGZvcmNlIGZsdXNoIGFuZCByZWd1bGFyIGZsdXNoXG4gICAgLy8gcnVubmluZyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXRvbWljc1xuXG4gICAgLy8gVGhpcyBwYXRoIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGNoZWNraW5nIGZvciB0aW1lc3RhbXBzIHNpbmNlIHdlJ3JlIGZvcmNpbmcgYSBmbHVzaC5cbiAgICAvLyBSZW1lbWJlciB0byByZXNldCB0aGUgZmxhZywgb3IgaXQgd2lsbCBhbHdheXMgZmx1c2ggYWxsIG1ldHJpY3MuXG4gICAgaWYgKHRoaXMuX2ZvcmNlRmx1c2gpIHtcbiAgICAgIHRoaXMuX2ZvcmNlRmx1c2ggPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Y2tldHNUb3RhbFdlaWdodCA9IDA7XG4gICAgICB0aGlzLl9jYXB0dXJlTWV0cmljcyh0aGlzLl9idWNrZXRzKTtcbiAgICAgIHRoaXMuX2J1Y2tldHMuY2xlYXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3V0b2ZmU2Vjb25kcyA9IE1hdGguZmxvb3IodXRpbHMkMS50aW1lc3RhbXBJblNlY29uZHMoKSkgLSBjb25zdGFudHMuREVGQVVMVF9GTFVTSF9JTlRFUlZBTCAvIDEwMDAgLSB0aGlzLl9mbHVzaFNoaWZ0O1xuICAgIC8vIFRPRE8oQGFub25yaWcpOiBPcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuXG4gICAgLy8gQ29udmVydCB0aGlzIG1hcCB0byBhbiBhcnJheSBhbmQgc3RvcmUga2V5IGluIHRoZSBidWNrZXRJdGVtLlxuICAgIGNvbnN0IGZsdXNoZWRCdWNrZXRzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgW2tleSwgYnVja2V0XSBvZiB0aGlzLl9idWNrZXRzKSB7XG4gICAgICBpZiAoYnVja2V0LnRpbWVzdGFtcCA8PSBjdXRvZmZTZWNvbmRzKSB7XG4gICAgICAgIGZsdXNoZWRCdWNrZXRzLnNldChrZXksIGJ1Y2tldCk7XG4gICAgICAgIHRoaXMuX2J1Y2tldHNUb3RhbFdlaWdodCAtPSBidWNrZXQubWV0cmljLndlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXldIG9mIGZsdXNoZWRCdWNrZXRzKSB7XG4gICAgICB0aGlzLl9idWNrZXRzLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHRoaXMuX2NhcHR1cmVNZXRyaWNzKGZsdXNoZWRCdWNrZXRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGNhcHR1cmVzIGEgc3Vic2V0IG9mIHRoZSBidWNrZXRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gZmx1c2hlZEJ1Y2tldHNcbiAgICovXG4gICBfY2FwdHVyZU1ldHJpY3MoZmx1c2hlZEJ1Y2tldHMpIHtcbiAgICBpZiAoZmx1c2hlZEJ1Y2tldHMuc2l6ZSA+IDAgJiYgdGhpcy5fY2xpZW50LmNhcHR1cmVBZ2dyZWdhdGVNZXRyaWNzKSB7XG4gICAgICAvLyBUT0RPKEBhbm9ucmlnKTogT3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LlxuICAgICAgLy8gVGhpcyBjb3B5IG9wZXJhdGlvbiBjYW4gYmUgYXZvaWRlZCBpZiB3ZSBzdG9yZSB0aGUga2V5IGluIHRoZSBidWNrZXRJdGVtLlxuICAgICAgY29uc3QgYnVja2V0cyA9IEFycmF5LmZyb20oZmx1c2hlZEJ1Y2tldHMpLm1hcCgoWywgYnVja2V0SXRlbV0pID0+IGJ1Y2tldEl0ZW0pO1xuICAgICAgdGhpcy5fY2xpZW50LmNhcHR1cmVBZ2dyZWdhdGVNZXRyaWNzKGJ1Y2tldHMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLk1ldHJpY3NBZ2dyZWdhdG9yID0gTWV0cmljc0FnZ3JlZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZ2dyZWdhdG9yLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGJhc2VjbGllbnQgPSByZXF1aXJlKCcuL2Jhc2VjbGllbnQuanMnKTtcbmNvbnN0IGNoZWNraW4gPSByZXF1aXJlKCcuL2NoZWNraW4uanMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBleHBvcnRzJDEgPSByZXF1aXJlKCcuL2V4cG9ydHMuanMnKTtcbmNvbnN0IGFnZ3JlZ2F0b3IgPSByZXF1aXJlKCcuL21ldHJpY3MvYWdncmVnYXRvci5qcycpO1xuY29uc3Qgc2Vzc2lvbmZsdXNoZXIgPSByZXF1aXJlKCcuL3Nlc3Npb25mbHVzaGVyLmpzJyk7XG5jb25zdCBodWJleHRlbnNpb25zID0gcmVxdWlyZSgnLi90cmFjaW5nL2h1YmV4dGVuc2lvbnMuanMnKTtcbmNvbnN0IHNwYW5VdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvc3BhblV0aWxzLmpzJyk7XG5jb25zdCBnZXRSb290U3BhbiA9IHJlcXVpcmUoJy4vdXRpbHMvZ2V0Um9vdFNwYW4uanMnKTtcbnJlcXVpcmUoJy4vdHJhY2luZy9zcGFuc3RhdHVzLmpzJyk7XG5jb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gcmVxdWlyZSgnLi90cmFjaW5nL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMnKTtcblxuLyoqXG4gKiBUaGUgU2VudHJ5IFNlcnZlciBSdW50aW1lIENsaWVudCBTREsuXG4gKi9cbmNsYXNzIFNlcnZlclJ1bnRpbWVDbGllbnRcblxuIGV4dGVuZHMgYmFzZWNsaWVudC5CYXNlQ2xpZW50IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBFZGdlIFNESyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIFNESy5cbiAgICovXG4gICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgLy8gU2VydmVyIGNsaWVudHMgYWx3YXlzIHN1cHBvcnQgdHJhY2luZ1xuICAgIGh1YmV4dGVuc2lvbnMuYWRkVHJhY2luZ0V4dGVuc2lvbnMoKTtcblxuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMuX2V4cGVyaW1lbnRzICYmIG9wdGlvbnMuX2V4cGVyaW1lbnRzWydtZXRyaWNzQWdncmVnYXRvciddKSB7XG4gICAgICB0aGlzLm1ldHJpY3NBZ2dyZWdhdG9yID0gbmV3IGFnZ3JlZ2F0b3IuTWV0cmljc0FnZ3JlZ2F0b3IodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZXZlbnRGcm9tRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludCkge1xuICAgIHJldHVybiB1dGlscy5yZXNvbHZlZFN5bmNQcm9taXNlKHV0aWxzLmV2ZW50RnJvbVVua25vd25JbnB1dChleHBvcnRzJDEuZ2V0Q2xpZW50KCksIHRoaXMuX29wdGlvbnMuc3RhY2tQYXJzZXIsIGV4Y2VwdGlvbiwgaGludCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZXZlbnRGcm9tTWVzc2FnZShcbiAgICBtZXNzYWdlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGxldmVsID0gJ2luZm8nLFxuICAgIGhpbnQsXG4gICkge1xuICAgIHJldHVybiB1dGlscy5yZXNvbHZlZFN5bmNQcm9taXNlKFxuICAgICAgdXRpbHMuZXZlbnRGcm9tTWVzc2FnZSh0aGlzLl9vcHRpb25zLnN0YWNrUGFyc2VyLCBtZXNzYWdlLCBsZXZlbCwgaGludCwgdGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQsIHNjb3BlKSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZsYWcgYGF1dG9TZXNzaW9uVHJhY2tpbmdgIGlzIGVuYWJsZWQsIGFuZCBpZiBgX3Nlc3Npb25GbHVzaGVyYCBleGlzdHMgYmVjYXVzZSBpdCBpcyBpbml0aWFsaXNlZCBvbmx5XG4gICAgLy8gd2hlbiB0aGUgYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWQsIGFuZCBoZW5jZSB0aGUgZXhwZWN0YXRpb24gaXMgdG8gaGF2ZSBTZXNzaW9uQWdncmVnYXRlcyBwYXlsb2FkXG4gICAgLy8gc2VudCB0byB0aGUgU2VydmVyIG9ubHkgd2hlbiB0aGUgYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWRcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nICYmIHRoaXMuX3Nlc3Npb25GbHVzaGVyICYmIHNjb3BlKSB7XG4gICAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlLmdldFJlcXVlc3RTZXNzaW9uKCk7XG5cbiAgICAgIC8vIE5lY2Vzc2FyeSBjaGVja3MgdG8gZW5zdXJlIHRoaXMgaXMgY29kZSBibG9jayBpcyBleGVjdXRlZCBvbmx5IHdpdGhpbiBhIHJlcXVlc3RcbiAgICAgIC8vIFNob3VsZCBvdmVycmlkZSB0aGUgc3RhdHVzIG9ubHkgaWYgYHJlcXVlc3RTZXNzaW9uLnN0YXR1c2AgaXMgYE9rYCwgd2hpY2ggaXMgaXRzIGluaXRpYWwgc3RhZ2VcbiAgICAgIGlmIChyZXF1ZXN0U2Vzc2lvbiAmJiByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgcmVxdWVzdFNlc3Npb24uc3RhdHVzID0gJ2Vycm9yZWQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5jYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludCwgc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBmbGFnIGBhdXRvU2Vzc2lvblRyYWNraW5nYCBpcyBlbmFibGVkLCBhbmQgaWYgYF9zZXNzaW9uRmx1c2hlcmAgZXhpc3RzIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGlzZWQgb25seVxuICAgIC8vIHdoZW4gdGhlIGByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyB1c2VkLCBhbmQgaGVuY2UgdGhlIGV4cGVjdGF0aW9uIGlzIHRvIGhhdmUgU2Vzc2lvbkFnZ3JlZ2F0ZXMgcGF5bG9hZFxuICAgIC8vIHNlbnQgdG8gdGhlIFNlcnZlciBvbmx5IHdoZW4gdGhlIGByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyB1c2VkXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyAmJiB0aGlzLl9zZXNzaW9uRmx1c2hlciAmJiBzY29wZSkge1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZSB8fCAnZXhjZXB0aW9uJztcbiAgICAgIGNvbnN0IGlzRXhjZXB0aW9uID1cbiAgICAgICAgZXZlbnRUeXBlID09PSAnZXhjZXB0aW9uJyAmJiBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzLmxlbmd0aCA+IDA7XG5cbiAgICAgIC8vIElmIHRoZSBldmVudCBpcyBvZiB0eXBlIEV4Y2VwdGlvbiwgdGhlbiBhIHJlcXVlc3Qgc2Vzc2lvbiBzaG91bGQgYmUgY2FwdHVyZWRcbiAgICAgIGlmIChpc0V4Y2VwdGlvbikge1xuICAgICAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlLmdldFJlcXVlc3RTZXNzaW9uKCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBib3VuZHMgb2YgYSByZXF1ZXN0LCBhbmQgbWFrZSBzdXJlIG5vdCB0byBvdmVycmlkZVxuICAgICAgICAvLyBTZXNzaW9uIFN0YXR1cyBpZiBFcnJvcmVkIC8gQ3Jhc2hlZFxuICAgICAgICBpZiAocmVxdWVzdFNlc3Npb24gJiYgcmVxdWVzdFNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgcmVxdWVzdFNlc3Npb24uc3RhdHVzID0gJ2Vycm9yZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmNhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICAgY2xvc2UodGltZW91dCkge1xuICAgIGlmICh0aGlzLl9zZXNzaW9uRmx1c2hlcikge1xuICAgICAgdGhpcy5fc2Vzc2lvbkZsdXNoZXIuY2xvc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmNsb3NlKHRpbWVvdXQpO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0aGF0IGluaXRpYWxpc2VzIGFuIGluc3RhbmNlIG9mIFNlc3Npb25GbHVzaGVyIG9uIENsaWVudCAqL1xuICAgaW5pdFNlc3Npb25GbHVzaGVyKCkge1xuICAgIGNvbnN0IHsgcmVsZWFzZSwgZW52aXJvbm1lbnQgfSA9IHRoaXMuX29wdGlvbnM7XG4gICAgaWYgKCFyZWxlYXNlKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdDYW5ub3QgaW5pdGlhbGlzZSBhbiBpbnN0YW5jZSBvZiBTZXNzaW9uRmx1c2hlciBpZiBubyByZWxlYXNlIGlzIHByb3ZpZGVkIScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXNzaW9uRmx1c2hlciA9IG5ldyBzZXNzaW9uZmx1c2hlci5TZXNzaW9uRmx1c2hlcih0aGlzLCB7XG4gICAgICAgIHJlbGVhc2UsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyb24gbW9uaXRvciBjaGVjayBpbiBhbmQgc2VuZCBpdCB0byBTZW50cnkuXG4gICAqXG4gICAqIEBwYXJhbSBjaGVja0luIEFuIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBhIGNoZWNrIGluLlxuICAgKiBAcGFyYW0gdXBzZXJ0TW9uaXRvckNvbmZpZyBBbiBvcHRpb25hbCBvYmplY3QgdGhhdCBkZXNjcmliZXMgYSBtb25pdG9yIGNvbmZpZy4gVXNlIHRoaXMgaWYgeW91IHdhbnRcbiAgICogdG8gY3JlYXRlIGEgbW9uaXRvciBhdXRvbWF0aWNhbGx5IHdoZW4gc2VuZGluZyBhIGNoZWNrIGluLlxuICAgKi9cbiAgIGNhcHR1cmVDaGVja0luKGNoZWNrSW4sIG1vbml0b3JDb25maWcsIHNjb3BlKSB7XG4gICAgY29uc3QgaWQgPSAnY2hlY2tJbklkJyBpbiBjaGVja0luICYmIGNoZWNrSW4uY2hlY2tJbklkID8gY2hlY2tJbi5jaGVja0luSWQgOiB1dGlscy51dWlkNCgpO1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKCkpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ1NESyBub3QgZW5hYmxlZCwgd2lsbCBub3QgY2FwdHVyZSBjaGVja2luLicpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICBjb25zdCB7IHJlbGVhc2UsIGVudmlyb25tZW50LCB0dW5uZWwgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBzZXJpYWxpemVkQ2hlY2tJbiA9IHtcbiAgICAgIGNoZWNrX2luX2lkOiBpZCxcbiAgICAgIG1vbml0b3Jfc2x1ZzogY2hlY2tJbi5tb25pdG9yU2x1ZyxcbiAgICAgIHN0YXR1czogY2hlY2tJbi5zdGF0dXMsXG4gICAgICByZWxlYXNlLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgfTtcblxuICAgIGlmICgnZHVyYXRpb24nIGluIGNoZWNrSW4pIHtcbiAgICAgIHNlcmlhbGl6ZWRDaGVja0luLmR1cmF0aW9uID0gY2hlY2tJbi5kdXJhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAobW9uaXRvckNvbmZpZykge1xuICAgICAgc2VyaWFsaXplZENoZWNrSW4ubW9uaXRvcl9jb25maWcgPSB7XG4gICAgICAgIHNjaGVkdWxlOiBtb25pdG9yQ29uZmlnLnNjaGVkdWxlLFxuICAgICAgICBjaGVja2luX21hcmdpbjogbW9uaXRvckNvbmZpZy5jaGVja2luTWFyZ2luLFxuICAgICAgICBtYXhfcnVudGltZTogbW9uaXRvckNvbmZpZy5tYXhSdW50aW1lLFxuICAgICAgICB0aW1lem9uZTogbW9uaXRvckNvbmZpZy50aW1lem9uZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgW2R5bmFtaWNTYW1wbGluZ0NvbnRleHQsIHRyYWNlQ29udGV4dF0gPSB0aGlzLl9nZXRUcmFjZUluZm9Gcm9tU2NvcGUoc2NvcGUpO1xuICAgIGlmICh0cmFjZUNvbnRleHQpIHtcbiAgICAgIHNlcmlhbGl6ZWRDaGVja0luLmNvbnRleHRzID0ge1xuICAgICAgICB0cmFjZTogdHJhY2VDb250ZXh0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZlbG9wZSA9IGNoZWNraW4uY3JlYXRlQ2hlY2tJbkVudmVsb3BlKFxuICAgICAgc2VyaWFsaXplZENoZWNrSW4sXG4gICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0LFxuICAgICAgdGhpcy5nZXRTZGtNZXRhZGF0YSgpLFxuICAgICAgdHVubmVsLFxuICAgICAgdGhpcy5nZXREc24oKSxcbiAgICApO1xuXG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuaW5mbygnU2VuZGluZyBjaGVja2luOicsIGNoZWNrSW4ubW9uaXRvclNsdWcsIGNoZWNrSW4uc3RhdHVzKTtcblxuICAgIC8vIF9zZW5kRW52ZWxvcGUgc2hvdWxkIG5vdCB0aHJvd1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICB0aGlzLl9zZW5kRW52ZWxvcGUoZW52ZWxvcGUpO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgY2FwdHVyaW5nL2VuZGluZyBhIHJlcXVlc3Qgc2Vzc2lvbiBieSBjYWxsaW5nIGBpbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnRgIHRvIGluY3JlbWVudFxuICAgKiBhcHByb3ByaWF0ZSBzZXNzaW9uIGFnZ3JlZ2F0ZXMgYnVja2V0XG4gICAqL1xuICAgX2NhcHR1cmVSZXF1ZXN0U2Vzc2lvbigpIHtcbiAgICBpZiAoIXRoaXMuX3Nlc3Npb25GbHVzaGVyKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdEaXNjYXJkZWQgcmVxdWVzdCBtb2RlIHNlc3Npb24gYmVjYXVzZSBhdXRvU2Vzc2lvblRyYWNraW5nIG9wdGlvbiB3YXMgZGlzYWJsZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2Vzc2lvbkZsdXNoZXIuaW5jcmVtZW50U2Vzc2lvblN0YXR1c0NvdW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgX3ByZXBhcmVFdmVudChcbiAgICBldmVudCxcbiAgICBoaW50LFxuICAgIHNjb3BlLFxuICAgIGlzb2xhdGlvblNjb3BlLFxuICApIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5wbGF0Zm9ybSkge1xuICAgICAgZXZlbnQucGxhdGZvcm0gPSBldmVudC5wbGF0Zm9ybSB8fCB0aGlzLl9vcHRpb25zLnBsYXRmb3JtO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLnJ1bnRpbWUpIHtcbiAgICAgIGV2ZW50LmNvbnRleHRzID0ge1xuICAgICAgICAuLi5ldmVudC5jb250ZXh0cyxcbiAgICAgICAgcnVudGltZTogKGV2ZW50LmNvbnRleHRzIHx8IHt9KS5ydW50aW1lIHx8IHRoaXMuX29wdGlvbnMucnVudGltZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2VydmVyTmFtZSkge1xuICAgICAgZXZlbnQuc2VydmVyX25hbWUgPSBldmVudC5zZXJ2ZXJfbmFtZSB8fCB0aGlzLl9vcHRpb25zLnNlcnZlck5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLl9wcmVwYXJlRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlLCBpc29sYXRpb25TY29wZSk7XG4gIH1cblxuICAvKiogRXh0cmFjdCB0cmFjZSBpbmZvcm1hdGlvbiBmcm9tIHNjb3BlICovXG4gICBfZ2V0VHJhY2VJbmZvRnJvbVNjb3BlKFxuICAgIHNjb3BlLFxuICApIHtcbiAgICBpZiAoIXNjb3BlKSB7XG4gICAgICByZXR1cm4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBzcGFuID0gc2NvcGUuZ2V0U3BhbigpO1xuICAgIGlmIChzcGFuKSB7XG4gICAgICBjb25zdCBzYW1wbGluZ0NvbnRleHQgPSBnZXRSb290U3Bhbi5nZXRSb290U3BhbihzcGFuKSA/IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuKHNwYW4pIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIFtzYW1wbGluZ0NvbnRleHQsIHNwYW5VdGlscy5zcGFuVG9UcmFjZUNvbnRleHQoc3BhbildO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBwYXJlbnRTcGFuSWQsIGRzYyB9ID0gc2NvcGUuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7XG4gICAgY29uc3QgdHJhY2VDb250ZXh0ID0ge1xuICAgICAgdHJhY2VfaWQ6IHRyYWNlSWQsXG4gICAgICBzcGFuX2lkOiBzcGFuSWQsXG4gICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLFxuICAgIH07XG4gICAgaWYgKGRzYykge1xuICAgICAgcmV0dXJuIFtkc2MsIHRyYWNlQ29udGV4dF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtkeW5hbWljU2FtcGxpbmdDb250ZXh0LmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KHRyYWNlSWQsIHRoaXMsIHNjb3BlKSwgdHJhY2VDb250ZXh0XTtcbiAgfVxufVxuXG5leHBvcnRzLlNlcnZlclJ1bnRpbWVDbGllbnQgPSBTZXJ2ZXJSdW50aW1lQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyLXJ1bnRpbWUtY2xpZW50LmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBleHBvcnRzJDEgPSByZXF1aXJlKCcuL2V4cG9ydHMuanMnKTtcbmNvbnN0IGh1YiA9IHJlcXVpcmUoJy4vaHViLmpzJyk7XG5cbi8qKiBBIGNsYXNzIG9iamVjdCB0aGF0IGNhbiBpbnN0YW50aWF0ZSBDbGllbnQgb2JqZWN0cy4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgU0RLIGNsaWVudCBpbnN0YW5jZS4gVGhlIGNsaWVudCBpc1xuICogaW5zdGFsbGVkIGFuZCB0aGVuIGJvdW5kIHRvIHRoZSBjdXJyZW50IHNjb3BlLlxuICpcbiAqIEBwYXJhbSBjbGllbnRDbGFzcyBUaGUgY2xpZW50IGNsYXNzIHRvIGluc3RhbnRpYXRlLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjbGllbnQuXG4gKi9cbmZ1bmN0aW9uIGluaXRBbmRCaW5kKFxuICBjbGllbnRDbGFzcyxcbiAgb3B0aW9ucyxcbikge1xuICBpZiAob3B0aW9ucy5kZWJ1ZyA9PT0gdHJ1ZSkge1xuICAgIGlmIChkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEKSB7XG4gICAgICB1dGlscy5sb2dnZXIuZW5hYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSBgY29uc29sZS53YXJuYCByYXRoZXIgdGhhbiBgbG9nZ2VyLndhcm5gIHNpbmNlIGJ5IG5vbi1kZWJ1ZyBidW5kbGVzIGhhdmUgYWxsIGBsb2dnZXIueGAgc3RhdGVtZW50cyBzdHJpcHBlZFxuICAgICAgdXRpbHMuY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ1tTZW50cnldIENhbm5vdCBpbml0aWFsaXplIFNESyB3aXRoIGBkZWJ1Z2Agb3B0aW9uIHVzaW5nIGEgbm9uLWRlYnVnIGJ1bmRsZS4nKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBzY29wZSA9IGV4cG9ydHMkMS5nZXRDdXJyZW50U2NvcGUoKTtcbiAgc2NvcGUudXBkYXRlKG9wdGlvbnMuaW5pdGlhbFNjb3BlKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgY2xpZW50Q2xhc3Mob3B0aW9ucyk7XG4gIHNldEN1cnJlbnRDbGllbnQoY2xpZW50KTtcbiAgaW5pdGlhbGl6ZUNsaWVudChjbGllbnQpO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIGdpdmVuIGNsaWVudCB0aGUgY3VycmVudCBjbGllbnQuXG4gKi9cbmZ1bmN0aW9uIHNldEN1cnJlbnRDbGllbnQoY2xpZW50KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBodWIkMSA9IGh1Yi5nZXRDdXJyZW50SHViKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCB0b3AgPSBodWIkMS5nZXRTdGFja1RvcCgpO1xuICB0b3AuY2xpZW50ID0gY2xpZW50O1xuICB0b3Auc2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgY2xpZW50IGZvciB0aGUgY3VycmVudCBzY29wZS5cbiAqIE1ha2Ugc3VyZSB0byBjYWxsIHRoaXMgYWZ0ZXIgYHNldEN1cnJlbnRDbGllbnQoKWAuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVDbGllbnQoY2xpZW50KSB7XG4gIGlmIChjbGllbnQuaW5pdCkge1xuICAgIGNsaWVudC5pbml0KCk7XG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXMgZmFsbGJhY2tcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgfSBlbHNlIGlmIChjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMoKTtcbiAgfVxufVxuXG5leHBvcnRzLmluaXRBbmRCaW5kID0gaW5pdEFuZEJpbmQ7XG5leHBvcnRzLnNldEN1cnJlbnRDbGllbnQgPSBzZXRDdXJyZW50Q2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2RrLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi9kZWJ1Zy1idWlsZC5qcycpO1xuXG5jb25zdCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSA9IDMwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBTZW50cnkgYFRyYW5zcG9ydGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIG1ha2VSZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydChcbiAgb3B0aW9ucyxcbiAgbWFrZVJlcXVlc3QsXG4gIGJ1ZmZlciA9IHV0aWxzLm1ha2VQcm9taXNlQnVmZmVyKFxuICAgIG9wdGlvbnMuYnVmZmVyU2l6ZSB8fCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSxcbiAgKSxcbikge1xuICBsZXQgcmF0ZUxpbWl0cyA9IHt9O1xuICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7XG5cbiAgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSkge1xuICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdO1xuXG4gICAgLy8gRHJvcCByYXRlIGxpbWl0ZWQgaXRlbXMgZnJvbSBlbnZlbG9wZVxuICAgIHV0aWxzLmZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhQ2F0ZWdvcnkgPSB1dGlscy5lbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSk7XG4gICAgICBpZiAodXRpbHMuaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCBkYXRhQ2F0ZWdvcnkpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7XG4gICAgICAgIG9wdGlvbnMucmVjb3JkRHJvcHBlZEV2ZW50KCdyYXRlbGltaXRfYmFja29mZicsIGRhdGFDYXRlZ29yeSwgZXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTa2lwIHNlbmRpbmcgaWYgZW52ZWxvcGUgaXMgZW1wdHkgYWZ0ZXIgZmlsdGVyaW5nIG91dCByYXRlIGxpbWl0ZWQgZXZlbnRzXG4gICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1dGlscy5yZXNvbHZlZFN5bmNQcm9taXNlKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBmaWx0ZXJlZEVudmVsb3BlID0gdXRpbHMuY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVbMF0sIGZpbHRlcmVkRW52ZWxvcGVJdGVtcyApO1xuXG4gICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGVcbiAgICBjb25zdCByZWNvcmRFbnZlbG9wZUxvc3MgPSAocmVhc29uKSA9PiB7XG4gICAgICB1dGlscy5mb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7XG4gICAgICAgIG9wdGlvbnMucmVjb3JkRHJvcHBlZEV2ZW50KHJlYXNvbiwgdXRpbHMuZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVxdWVzdFRhc2sgPSAoKSA9PlxuICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiB1dGlscy5zZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBvbiBOT0sgcmVzcG9uc2VzLCBidXQgd2Ugd2FudCB0byBhdCBsZWFzdCBsb2cgdGhlbVxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7XG4gICAgICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJhdGVMaW1pdHMgPSB1dGlscy51cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICByZWNvcmRFbnZlbG9wZUxvc3MoJ25ldHdvcmtfZXJyb3InKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbihcbiAgICAgIHJlc3VsdCA9PiByZXN1bHQsXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIHV0aWxzLlNlbnRyeUVycm9yKSB7XG4gICAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpO1xuICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygncXVldWVfb3ZlcmZsb3cnKTtcbiAgICAgICAgICByZXR1cm4gdXRpbHMucmVzb2x2ZWRTeW5jUHJvbWlzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBXZSB1c2UgdGhpcyB0byBpZGVudGlmaWZ5IGlmIHRoZSB0cmFuc3BvcnQgaXMgdGhlIGJhc2UgdHJhbnNwb3J0XG4gIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYWdhaW4gYXMgd2UnbGwgbm8gbG9uZ2VyIG5lZWQgaXRcbiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTtcblxuICByZXR1cm4ge1xuICAgIHNlbmQsXG4gICAgZmx1c2gsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50Rm9yRW52ZWxvcGVJdGVtKGl0ZW0sIHR5cGUpIHtcbiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/IChpdGVtIClbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRTtcbmV4cG9ydHMuY3JlYXRlVHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcblxuY29uc3QgTUlOX0RFTEFZID0gMTAwOyAvLyAxMDAgbXNcbmNvbnN0IFNUQVJUX0RFTEFZID0gNTAwMDsgLy8gNSBzZWNvbmRzXG5jb25zdCBNQVhfREVMQVkgPSAzLjZlNjsgLy8gMSBob3VyXG5cbmZ1bmN0aW9uIGxvZyhtc2csIGVycm9yKSB7XG4gIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmluZm8oYFtPZmZsaW5lXTogJHttc2d9YCwgZXJyb3IpO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgdHJhbnNwb3J0IGFuZCBzdG9yZXMgYW5kIHJldHJpZXMgZXZlbnRzIHdoZW4gdGhleSBmYWlsIHRvIHNlbmQuXG4gKlxuICogQHBhcmFtIGNyZWF0ZVRyYW5zcG9ydCBUaGUgdHJhbnNwb3J0IHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPZmZsaW5lVHJhbnNwb3J0KFxuICBjcmVhdGVUcmFuc3BvcnQsXG4pIHtcbiAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgIGNvbnN0IHRyYW5zcG9ydCA9IGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zKTtcbiAgICBjb25zdCBzdG9yZSA9IG9wdGlvbnMuY3JlYXRlU3RvcmUgPyBvcHRpb25zLmNyZWF0ZVN0b3JlKG9wdGlvbnMpIDogdW5kZWZpbmVkO1xuXG4gICAgbGV0IHJldHJ5RGVsYXkgPSBTVEFSVF9ERUxBWTtcbiAgICBsZXQgZmx1c2hUaW1lcjtcblxuICAgIGZ1bmN0aW9uIHNob3VsZFF1ZXVlKGVudiwgZXJyb3IsIHJldHJ5RGVsYXkpIHtcbiAgICAgIC8vIFdlIGRvbid0IHF1ZXVlIFNlc3Npb24gUmVwbGF5IGVudmVsb3BlcyBiZWNhdXNlIHRoZXkgYXJlOlxuICAgICAgLy8gLSBPcmRlcmVkIGFuZCBSZXBsYXkgcmVsaWVzIG9uIHRoZSByZXNwb25zZSBzdGF0dXMgdG8ga25vdyB3aGVuIHRoZXkncmUgc3VjY2Vzc2Z1bGx5IHNlbnQuXG4gICAgICAvLyAtIExpa2VseSB0byBmaWxsIHRoZSBxdWV1ZSBxdWlja2x5IGFuZCBibG9jayBvdGhlciBldmVudHMgZnJvbSBiZWluZyBzZW50LlxuICAgICAgLy8gV2UgYWxzbyB3YW50IHRvIGRyb3AgY2xpZW50IHJlcG9ydHMgYmVjYXVzZSB0aGV5IGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiB3ZSByZXRyeSBzZW5kaW5nIGV2ZW50cyB3aGlsZSBvZmZsaW5lLlxuICAgICAgaWYgKHV0aWxzLmVudmVsb3BlQ29udGFpbnNJdGVtVHlwZShlbnYsIFsncmVwbGF5X2V2ZW50JywgJ3JlcGxheV9yZWNvcmRpbmcnLCAnY2xpZW50X3JlcG9ydCddKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNob3VsZFN0b3JlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnNob3VsZFN0b3JlKGVudiwgZXJyb3IsIHJldHJ5RGVsYXkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaEluKGRlbGF5KSB7XG4gICAgICBpZiAoIXN0b3JlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZsdXNoVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZsdXNoVGltZXIgKTtcbiAgICAgIH1cblxuICAgICAgZmx1c2hUaW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBmbHVzaFRpbWVyID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgc3RvcmUucG9wKCk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIGxvZygnQXR0ZW1wdGluZyB0byBzZW5kIHByZXZpb3VzbHkgcXVldWVkIGV2ZW50Jyk7XG4gICAgICAgICAgdm9pZCBzZW5kKGZvdW5kKS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIGxvZygnRmFpbGVkIHRvIHJldHJ5IHNlbmRpbmcnLCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgZGVsYXkpIDtcblxuICAgICAgLy8gV2UgbmVlZCB0byB1bnJlZiB0aGUgdGltZXIgaW4gbm9kZS5qcywgb3RoZXJ3aXNlIHRoZSBub2RlIHByb2Nlc3MgbmV2ZXIgZXhpdC5cbiAgICAgIGlmICh0eXBlb2YgZmx1c2hUaW1lciAhPT0gJ251bWJlcicgJiYgZmx1c2hUaW1lci51bnJlZikge1xuICAgICAgICBmbHVzaFRpbWVyLnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmx1c2hXaXRoQmFja09mZigpIHtcbiAgICAgIGlmIChmbHVzaFRpbWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmx1c2hJbihyZXRyeURlbGF5KTtcblxuICAgICAgcmV0cnlEZWxheSA9IE1hdGgubWluKHJldHJ5RGVsYXkgKiAyLCBNQVhfREVMQVkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTtcblxuICAgICAgICBsZXQgZGVsYXkgPSBNSU5fREVMQVk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByZXRyeS1hZnRlciBoZWFkZXIsIHVzZSB0aGF0IGFzIHRoZSBuZXh0IGRlbGF5LlxuICAgICAgICAgIGlmIChyZXN1bHQuaGVhZGVycyAmJiByZXN1bHQuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSkge1xuICAgICAgICAgICAgZGVsYXkgPSB1dGlscy5wYXJzZVJldHJ5QWZ0ZXJIZWFkZXIocmVzdWx0LmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10pO1xuICAgICAgICAgIH0gLy8gSWYgd2UgaGF2ZSBhIHNlcnZlciBlcnJvciwgcmV0dXJuIG5vdyBzbyB3ZSBkb24ndCBmbHVzaCB0aGUgcXVldWUuXG4gICAgICAgICAgZWxzZSBpZiAoKHJlc3VsdC5zdGF0dXNDb2RlIHx8IDApID49IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaEluKGRlbGF5KTtcbiAgICAgICAgcmV0cnlEZWxheSA9IFNUQVJUX0RFTEFZO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RvcmUgJiYgKGF3YWl0IHNob3VsZFF1ZXVlKGVudmVsb3BlLCBlICwgcmV0cnlEZWxheSkpKSB7XG4gICAgICAgICAgYXdhaXQgc3RvcmUuaW5zZXJ0KGVudmVsb3BlKTtcbiAgICAgICAgICBmbHVzaFdpdGhCYWNrT2ZmKCk7XG4gICAgICAgICAgbG9nKCdFcnJvciBzZW5kaW5nLiBFdmVudCBxdWV1ZWQnLCBlICk7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5mbHVzaEF0U3RhcnR1cCkge1xuICAgICAgZmx1c2hXaXRoQmFja09mZigpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZW5kLFxuICAgICAgZmx1c2g6IHQgPT4gdHJhbnNwb3J0LmZsdXNoKHQpLFxuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydHMuTUlOX0RFTEFZID0gTUlOX0RFTEFZO1xuZXhwb3J0cy5TVEFSVF9ERUxBWSA9IFNUQVJUX0RFTEFZO1xuZXhwb3J0cy5tYWtlT2ZmbGluZVRyYW5zcG9ydCA9IG1ha2VPZmZsaW5lVHJhbnNwb3J0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2ZmbGluZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBhcGkgPSByZXF1aXJlKCcuLi9hcGkuanMnKTtcblxuLyoqXG4gKiBHZXRzIGFuIGV2ZW50IGZyb20gYW4gZW52ZWxvcGUuXG4gKlxuICogVGhpcyBpcyBvbmx5IGV4cG9ydGVkIGZvciB1c2UgaW4gdGhlIHRlc3RzXG4gKi9cbmZ1bmN0aW9uIGV2ZW50RnJvbUVudmVsb3BlKGVudiwgdHlwZXMpIHtcbiAgbGV0IGV2ZW50O1xuXG4gIHV0aWxzLmZvckVhY2hFbnZlbG9wZUl0ZW0oZW52LCAoaXRlbSwgdHlwZSkgPT4ge1xuICAgIGlmICh0eXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgZXZlbnQgPSBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gYmFpbCBvdXQgaWYgd2UgZm91bmQgYW4gZXZlbnRcbiAgICByZXR1cm4gISFldmVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0cmFuc3BvcnQgdGhhdCBvdmVycmlkZXMgdGhlIHJlbGVhc2Ugb24gYWxsIGV2ZW50cy5cbiAqL1xuZnVuY3Rpb24gbWFrZU92ZXJyaWRlUmVsZWFzZVRyYW5zcG9ydChcbiAgY3JlYXRlVHJhbnNwb3J0LFxuICByZWxlYXNlLFxuKSB7XG4gIHJldHVybiBvcHRpb25zID0+IHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSBjcmVhdGVUcmFuc3BvcnQob3B0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udHJhbnNwb3J0LFxuICAgICAgc2VuZDogYXN5bmMgKGVudmVsb3BlKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRGcm9tRW52ZWxvcGUoZW52ZWxvcGUsIFsnZXZlbnQnLCAndHJhbnNhY3Rpb24nLCAncHJvZmlsZScsICdyZXBsYXlfZXZlbnQnXSk7XG5cbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucmVsZWFzZSA9IHJlbGVhc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcbn1cblxuLyoqIE92ZXJyaWRlcyB0aGUgRFNOIGluIHRoZSBlbnZlbG9wZSBoZWFkZXIgICovXG5mdW5jdGlvbiBvdmVycmlkZURzbihlbnZlbG9wZSwgZHNuKSB7XG4gIHJldHVybiB1dGlscy5jcmVhdGVFbnZlbG9wZShcbiAgICBkc25cbiAgICAgID8ge1xuICAgICAgICAgIC4uLmVudmVsb3BlWzBdLFxuICAgICAgICAgIGRzbixcbiAgICAgICAgfVxuICAgICAgOiBlbnZlbG9wZVswXSxcbiAgICBlbnZlbG9wZVsxXSxcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJhbnNwb3J0IHRoYXQgY2FuIHNlbmQgZXZlbnRzIHRvIGRpZmZlcmVudCBEU05zIGRlcGVuZGluZyBvbiB0aGUgZW52ZWxvcGUgY29udGVudHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNdWx0aXBsZXhlZFRyYW5zcG9ydChcbiAgY3JlYXRlVHJhbnNwb3J0LFxuICBtYXRjaGVyLFxuKSB7XG4gIHJldHVybiBvcHRpb25zID0+IHtcbiAgICBjb25zdCBmYWxsYmFja1RyYW5zcG9ydCA9IGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zKTtcbiAgICBjb25zdCBvdGhlclRyYW5zcG9ydHMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBnZXRUcmFuc3BvcnQoZHNuLCByZWxlYXNlKSB7XG4gICAgICAvLyBXZSBjcmVhdGUgYSB0cmFuc3BvcnQgZm9yIGV2ZXJ5IHVuaXF1ZSBkc24vcmVsZWFzZSBjb21iaW5hdGlvbiBhcyB0aGVyZSBtYXkgYmUgY29kZSBmcm9tIG11bHRpcGxlIHJlbGVhc2VzIGluXG4gICAgICAvLyB1c2UgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgY29uc3Qga2V5ID0gcmVsZWFzZSA/IGAke2Rzbn06JHtyZWxlYXNlfWAgOiBkc247XG5cbiAgICAgIGxldCB0cmFuc3BvcnQgPSBvdGhlclRyYW5zcG9ydHMuZ2V0KGtleSk7XG5cbiAgICAgIGlmICghdHJhbnNwb3J0KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZERzbiA9IHV0aWxzLmRzbkZyb21TdHJpbmcoZHNuKTtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZWREc24pIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsID0gYXBpLmdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgodmFsaWRhdGVkRHNuLCBvcHRpb25zLnR1bm5lbCk7XG5cbiAgICAgICAgdHJhbnNwb3J0ID0gcmVsZWFzZVxuICAgICAgICAgID8gbWFrZU92ZXJyaWRlUmVsZWFzZVRyYW5zcG9ydChjcmVhdGVUcmFuc3BvcnQsIHJlbGVhc2UpKHsgLi4ub3B0aW9ucywgdXJsIH0pXG4gICAgICAgICAgOiBjcmVhdGVUcmFuc3BvcnQoeyAuLi5vcHRpb25zLCB1cmwgfSk7XG5cbiAgICAgICAgb3RoZXJUcmFuc3BvcnRzLnNldChrZXksIHRyYW5zcG9ydCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbZHNuLCB0cmFuc3BvcnRdO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHtcbiAgICAgIGZ1bmN0aW9uIGdldEV2ZW50KHR5cGVzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50VHlwZXMgPSB0eXBlcyAmJiB0eXBlcy5sZW5ndGggPyB0eXBlcyA6IFsnZXZlbnQnXTtcbiAgICAgICAgcmV0dXJuIGV2ZW50RnJvbUVudmVsb3BlKGVudmVsb3BlLCBldmVudFR5cGVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNwb3J0cyA9IG1hdGNoZXIoeyBlbnZlbG9wZSwgZ2V0RXZlbnQgfSlcbiAgICAgICAgLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGdldFRyYW5zcG9ydChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRUcmFuc3BvcnQocmVzdWx0LmRzbiwgcmVzdWx0LnJlbGVhc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigodCkgPT4gISF0KTtcblxuICAgICAgLy8gSWYgd2UgaGF2ZSBubyB0cmFuc3BvcnRzIHRvIHNlbmQgdG8sIHVzZSB0aGUgZmFsbGJhY2sgdHJhbnNwb3J0XG4gICAgICBpZiAodHJhbnNwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhlIERTTiBpbiB0aGUgaGVhZGVyIGZvciB0aGUgZmFsbGJhY2sgdHJhbnNwb3J0LiAnJyBpcyBmYWxzeVxuICAgICAgICB0cmFuc3BvcnRzLnB1c2goWycnLCBmYWxsYmFja1RyYW5zcG9ydF0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHRyYW5zcG9ydHMubWFwKChbZHNuLCB0cmFuc3BvcnRdKSA9PiB0cmFuc3BvcnQuc2VuZChvdmVycmlkZURzbihlbnZlbG9wZSwgZHNuKSkpLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdHNbMF07XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmx1c2godGltZW91dCkge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbYXdhaXQgZmFsbGJhY2tUcmFuc3BvcnQuZmx1c2godGltZW91dCldO1xuICAgICAgZm9yIChjb25zdCBbLCB0cmFuc3BvcnRdIG9mIG90aGVyVHJhbnNwb3J0cykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKGF3YWl0IHRyYW5zcG9ydC5mbHVzaCh0aW1lb3V0KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlcy5ldmVyeShyID0+IHIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZW5kLFxuICAgICAgZmx1c2gsXG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0cy5ldmVudEZyb21FbnZlbG9wZSA9IGV2ZW50RnJvbUVudmVsb3BlO1xuZXhwb3J0cy5tYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQgPSBtYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBsZXhlZC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGVudmVsb3BlIGZyb20gU3BhbiBpdGVtLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTcGFuRW52ZWxvcGUoc3BhbnMsIGRzbikge1xuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcblxuICBpZiAoZHNuKSB7XG4gICAgaGVhZGVycy5kc24gPSB1dGlscy5kc25Ub1N0cmluZyhkc24pO1xuICB9XG5cbiAgY29uc3QgaXRlbXMgPSBzcGFucy5tYXAoY3JlYXRlU3Bhbkl0ZW0pO1xuICByZXR1cm4gdXRpbHMuY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgaXRlbXMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTcGFuSXRlbShzcGFuKSB7XG4gIGNvbnN0IHNwYW5IZWFkZXJzID0ge1xuICAgIHR5cGU6ICdzcGFuJyxcbiAgfTtcbiAgcmV0dXJuIFtzcGFuSGVhZGVycywgc3Bhbl07XG59XG5cbmV4cG9ydHMuY3JlYXRlU3BhbkVudmVsb3BlID0gY3JlYXRlU3BhbkVudmVsb3BlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bhbi5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB1cmwgcG9pbnRzIHRvIFNlbnRyeSBzZXJ2ZXJcbiAqIEBwYXJhbSB1cmwgdXJsIHRvIHZlcmlmeVxuICpcbiAqIFRPRE8odjgpOiBSZW1vdmUgSHViIGZhbGxiYWNrIHR5cGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBpc1NlbnRyeVJlcXVlc3RVcmwodXJsLCBodWJPckNsaWVudCkge1xuICBjb25zdCBjbGllbnQgPVxuICAgIGh1Yk9yQ2xpZW50ICYmIGlzSHViKGh1Yk9yQ2xpZW50KVxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgaHViT3JDbGllbnQuZ2V0Q2xpZW50KClcbiAgICAgIDogaHViT3JDbGllbnQ7XG4gIGNvbnN0IGRzbiA9IGNsaWVudCAmJiBjbGllbnQuZ2V0RHNuKCk7XG4gIGNvbnN0IHR1bm5lbCA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpLnR1bm5lbDtcblxuICByZXR1cm4gY2hlY2tEc24odXJsLCBkc24pIHx8IGNoZWNrVHVubmVsKHVybCwgdHVubmVsKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUdW5uZWwodXJsLCB0dW5uZWwpIHtcbiAgaWYgKCF0dW5uZWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlVHJhaWxpbmdTbGFzaCh1cmwpID09PSByZW1vdmVUcmFpbGluZ1NsYXNoKHR1bm5lbCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRHNuKHVybCwgZHNuKSB7XG4gIHJldHVybiBkc24gPyB1cmwuaW5jbHVkZXMoZHNuLmhvc3QpIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2goc3RyKSB7XG4gIHJldHVybiBzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnLycgPyBzdHIuc2xpY2UoMCwgLTEpIDogc3RyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIGlzSHViKGh1Yk9yQ2xpZW50KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gKGh1Yk9yQ2xpZW50ICkuZ2V0Q2xpZW50ICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydHMuaXNTZW50cnlSZXF1ZXN0VXJsID0gaXNTZW50cnlSZXF1ZXN0VXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTZW50cnlSZXF1ZXN0VXJsLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIFRhZ2dlZCB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHBhcmFtYXRlcml6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2VcbiAqIEZvciBleGFtcGxlOiBwYXJhbWV0ZXJpemVgVGhpcyBpcyBhIGxvZyBzdGF0ZW1lbnQgd2l0aCAke3h9IGFuZCAke3l9IHBhcmFtc2AsIHdvdWxkIHJldHVybjpcbiAqIFwiX19zZW50cnlfdGVtcGxhdGVfc3RyaW5nX19cIjogJ1RoaXMgaXMgYSBsb2cgc3RhdGVtZW50IHdpdGggJXMgYW5kICVzIHBhcmFtcycsXG4gKiBcIl9fc2VudHJ5X3RlbXBsYXRlX3ZhbHVlc19fXCI6IFsnZmlyc3QnLCAnc2Vjb25kJ11cbiAqIEBwYXJhbSBzdHJpbmdzIEFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMgc3BsaXR0ZWQgYmV0d2VlbiBleHByZXNzaW9uc1xuICogQHBhcmFtIHZhbHVlcyBFeHByZXNzaW9ucyBleHRyYWN0ZWQgZnJvbSB0ZW1wbGF0ZSBzdHJpbmdcbiAqIEByZXR1cm5zIFN0cmluZyB3aXRoIHRlbXBsYXRlIGluZm9ybWF0aW9uIGluIF9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fIGFuZCBfX3NlbnRyeV90ZW1wbGF0ZV92YWx1ZXNfXyBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIHBhcmFtZXRlcml6ZShzdHJpbmdzLCAuLi52YWx1ZXMpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gbmV3IFN0cmluZyhTdHJpbmcucmF3KHN0cmluZ3MsIC4uLnZhbHVlcykpIDtcbiAgZm9ybWF0dGVkLl9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fID0gc3RyaW5ncy5qb2luKCdcXHgwMCcpLnJlcGxhY2UoLyUvZywgJyUlJykucmVwbGFjZSgvXFwwL2csICclcycpO1xuICBmb3JtYXR0ZWQuX19zZW50cnlfdGVtcGxhdGVfdmFsdWVzX18gPSB2YWx1ZXM7XG4gIHJldHVybiBmb3JtYXR0ZWQ7XG59XG5cbmV4cG9ydHMucGFyYW1ldGVyaXplID0gcGFyYW1ldGVyaXplO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyYW1ldGVyaXplLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB2ZXJzaW9uID0gcmVxdWlyZSgnLi4vdmVyc2lvbi5qcycpO1xuXG4vKipcbiAqIEEgYnVpbGRlciBmb3IgdGhlIFNESyBtZXRhZGF0YSBpbiB0aGUgb3B0aW9ucyBmb3IgdGhlIFNESyBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBgYnVpbGRNZXRhZGF0YWAgaW4gUmVtaXggYW5kIE5leHRKUyBhbmQgU3ZlbHRlS2l0LlxuICogV2UgZG9uJ3QgZXh0cmFjdCBpdCBmb3IgYnVuZGxlIHNpemUgcmVhc29ucy5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzc0MDRcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzQxOTZcbiAqXG4gKiBJZiB5b3UgbWFrZSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24gY29uc2lkZXIgdXBkYXRpbmcgdGhlIG90aGVycyBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFNESyBvcHRpb25zIG9iamVjdCB0aGF0IGdldHMgbXV0YXRlZFxuICogQHBhcmFtIG5hbWVzIGxpc3Qgb2YgcGFja2FnZSBuYW1lc1xuICovXG5mdW5jdGlvbiBhcHBseVNka01ldGFkYXRhKG9wdGlvbnMsIG5hbWUsIG5hbWVzID0gW25hbWVdLCBzb3VyY2UgPSAnbnBtJykge1xuICBjb25zdCBtZXRhZGF0YSA9IG9wdGlvbnMuX21ldGFkYXRhIHx8IHt9O1xuXG4gIGlmICghbWV0YWRhdGEuc2RrKSB7XG4gICAgbWV0YWRhdGEuc2RrID0ge1xuICAgICAgbmFtZTogYHNlbnRyeS5qYXZhc2NyaXB0LiR7bmFtZX1gLFxuICAgICAgcGFja2FnZXM6IG5hbWVzLm1hcChuYW1lID0+ICh7XG4gICAgICAgIG5hbWU6IGAke3NvdXJjZX06QHNlbnRyeS8ke25hbWV9YCxcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbi5TREtfVkVSU0lPTixcbiAgICAgIH0pKSxcbiAgICAgIHZlcnNpb246IHZlcnNpb24uU0RLX1ZFUlNJT04sXG4gICAgfTtcbiAgfVxuXG4gIG9wdGlvbnMuX21ldGFkYXRhID0gbWV0YWRhdGE7XG59XG5cbmV4cG9ydHMuYXBwbHlTZGtNZXRhZGF0YSA9IGFwcGx5U2RrTWV0YWRhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZGtNZXRhZGF0YS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbi8qKiBLZXlzIGFyZSBzb3VyY2UgZmlsZW5hbWUvdXJsLCB2YWx1ZXMgYXJlIG1ldGFkYXRhIG9iamVjdHMuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgZmlsZW5hbWVNZXRhZGF0YU1hcCA9IG5ldyBNYXAoKTtcbi8qKiBTZXQgb2Ygc3RhY2sgc3RyaW5ncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZC4gKi9cbmNvbnN0IHBhcnNlZFN0YWNrcyA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZW5zdXJlTWV0YWRhdGFTdGFja3NBcmVQYXJzZWQocGFyc2VyKSB7XG4gIGlmICghdXRpbHMuR0xPQkFMX09CSi5fc2VudHJ5TW9kdWxlTWV0YWRhdGEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0YWNrIG9mIE9iamVjdC5rZXlzKHV0aWxzLkdMT0JBTF9PQkouX3NlbnRyeU1vZHVsZU1ldGFkYXRhKSkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdXRpbHMuR0xPQkFMX09CSi5fc2VudHJ5TW9kdWxlTWV0YWRhdGFbc3RhY2tdO1xuXG4gICAgaWYgKHBhcnNlZFN0YWNrcy5oYXMoc3RhY2spKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhpcyBzdGFjayBkb2Vzbid0IGdldCBwYXJzZWQgYWdhaW5cbiAgICBwYXJzZWRTdGFja3MuYWRkKHN0YWNrKTtcblxuICAgIGNvbnN0IGZyYW1lcyA9IHBhcnNlcihzdGFjayk7XG5cbiAgICAvLyBHbyB0aHJvdWdoIHRoZSBmcmFtZXMgc3RhcnRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQgZmluZCB0aGUgZmlyc3Qgb25lIHdpdGggYSBmaWxlbmFtZVxuICAgIGZvciAoY29uc3QgZnJhbWUgb2YgZnJhbWVzLnJldmVyc2UoKSkge1xuICAgICAgaWYgKGZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICAgIC8vIFNhdmUgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGZpbGVuYW1lXG4gICAgICAgIGZpbGVuYW1lTWV0YWRhdGFNYXAuc2V0KGZyYW1lLmZpbGVuYW1lLCBtZXRhZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIEphdmFTY3JpcHQgZmlsZSBVUkwuXG4gKlxuICogTWV0YWRhdGEgaXMgaW5qZWN0ZWQgYnkgdGhlIFNlbnRyeSBidW5kbGVyIHBsdWdpbnMgdXNpbmcgdGhlIGBfZXhwZXJpbWVudHMubW9kdWxlTWV0YWRhdGFgIGNvbmZpZyBvcHRpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBnZXRNZXRhZGF0YUZvclVybChwYXJzZXIsIGZpbGVuYW1lKSB7XG4gIGVuc3VyZU1ldGFkYXRhU3RhY2tzQXJlUGFyc2VkKHBhcnNlcik7XG4gIHJldHVybiBmaWxlbmFtZU1ldGFkYXRhTWFwLmdldChmaWxlbmFtZSk7XG59XG5cbi8qKlxuICogQWRkcyBtZXRhZGF0YSB0byBzdGFjayBmcmFtZXMuXG4gKlxuICogTWV0YWRhdGEgaXMgaW5qZWN0ZWQgYnkgdGhlIFNlbnRyeSBidW5kbGVyIHBsdWdpbnMgdXNpbmcgdGhlIGBfZXhwZXJpbWVudHMubW9kdWxlTWV0YWRhdGFgIGNvbmZpZyBvcHRpb24uXG4gKi9cbmZ1bmN0aW9uIGFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcyhwYXJzZXIsIGV2ZW50KSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzLmZvckVhY2goZXhjZXB0aW9uID0+IHtcbiAgICAgIGlmICghZXhjZXB0aW9uLnN0YWNrdHJhY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGV4Y2VwdGlvbi5zdGFja3RyYWNlLmZyYW1lcyB8fCBbXSkge1xuICAgICAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGdldE1ldGFkYXRhRm9yVXJsKHBhcnNlciwgZnJhbWUuZmlsZW5hbWUpO1xuXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgIGZyYW1lLm1vZHVsZV9tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBUbyBzYXZlIGJ1bmRsZSBzaXplIHdlJ3JlIGp1c3QgdHJ5IGNhdGNoaW5nIGhlcmUgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3RzLlxuICB9XG59XG5cbi8qKlxuICogU3RyaXBzIG1ldGFkYXRhIGZyb20gc3RhY2sgZnJhbWVzLlxuICovXG5mdW5jdGlvbiBzdHJpcE1ldGFkYXRhRnJvbVN0YWNrRnJhbWVzKGV2ZW50KSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzLmZvckVhY2goZXhjZXB0aW9uID0+IHtcbiAgICAgIGlmICghZXhjZXB0aW9uLnN0YWNrdHJhY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGV4Y2VwdGlvbi5zdGFja3RyYWNlLmZyYW1lcyB8fCBbXSkge1xuICAgICAgICBkZWxldGUgZnJhbWUubW9kdWxlX21ldGFkYXRhO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7XG4gICAgLy8gVG8gc2F2ZSBidW5kbGUgc2l6ZSB3ZSdyZSBqdXN0IHRyeSBjYXRjaGluZyBoZXJlIGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0cy5cbiAgfVxufVxuXG5leHBvcnRzLmFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcyA9IGFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcztcbmV4cG9ydHMuZ2V0TWV0YWRhdGFGb3JVcmwgPSBnZXRNZXRhZGF0YUZvclVybDtcbmV4cG9ydHMuc3RyaXBNZXRhZGF0YUZyb21TdGFja0ZyYW1lcyA9IHN0cmlwTWV0YWRhdGFGcm9tU3RhY2tGcmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRhZGF0YS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBpbnRlZ3JhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVncmF0aW9uLmpzJyk7XG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoJy4uL21ldGFkYXRhLmpzJyk7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnTW9kdWxlTWV0YWRhdGEnO1xuXG5jb25zdCBfbW9kdWxlTWV0YWRhdGFJbnRlZ3JhdGlvbiA9ICgoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHNldHVwKGNsaWVudCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGllbnQub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBuZWVkIHRvIHN0cmlwIG1ldGFkYXRhIGZyb20gc3RhY2sgZnJhbWVzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gU2VudHJ5IHNpbmNlIHRoZXNlIGFyZSBjbGllbnQgc2lkZSBvbmx5LlxuICAgICAgY2xpZW50Lm9uKCdiZWZvcmVFbnZlbG9wZScsIGVudmVsb3BlID0+IHtcbiAgICAgICAgdXRpbHMuZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICAgIG1ldGFkYXRhLnN0cmlwTWV0YWRhdGFGcm9tU3RhY2tGcmFtZXMoZXZlbnQpO1xuICAgICAgICAgICAgICBpdGVtWzFdID0gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQsIF9oaW50LCBjbGllbnQpIHtcbiAgICAgIGNvbnN0IHN0YWNrUGFyc2VyID0gY2xpZW50LmdldE9wdGlvbnMoKS5zdGFja1BhcnNlcjtcbiAgICAgIG1ldGFkYXRhLmFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcyhzdGFja1BhcnNlciwgZXZlbnQpO1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0sXG4gIH07XG59KSA7XG5cbmNvbnN0IG1vZHVsZU1ldGFkYXRhSW50ZWdyYXRpb24gPSBpbnRlZ3JhdGlvbi5kZWZpbmVJbnRlZ3JhdGlvbihfbW9kdWxlTWV0YWRhdGFJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogQWRkcyBtb2R1bGUgbWV0YWRhdGEgdG8gc3RhY2sgZnJhbWVzLlxuICpcbiAqIE1ldGFkYXRhIGNhbiBiZSBpbmplY3RlZCBieSB0aGUgU2VudHJ5IGJ1bmRsZXIgcGx1Z2lucyB1c2luZyB0aGUgYF9leHBlcmltZW50cy5tb2R1bGVNZXRhZGF0YWAgY29uZmlnIG9wdGlvbi5cbiAqXG4gKiBXaGVuIHRoaXMgaW50ZWdyYXRpb24gaXMgYWRkZWQsIHRoZSBtZXRhZGF0YSBwYXNzZWQgdG8gdGhlIGJ1bmRsZXIgcGx1Z2luIGlzIGFkZGVkIHRvIHRoZSBzdGFjayBmcmFtZXMgb2YgYWxsIGV2ZW50c1xuICogdW5kZXIgdGhlIGBtb2R1bGVfbWV0YWRhdGFgIHByb3BlcnR5LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGhlbHAgaW4gdGFnZ2luZyBvciByb3V0aW5nIG9mIGV2ZW50cyBmcm9tIGRpZmZlcmVudCB0ZWFtc1xuICogb3VyIHNvdXJjZXNcbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYG1vZHVsZU1ldGFkYXRhSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBNb2R1bGVNZXRhZGF0YSA9IGludGVncmF0aW9uLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhcbiAgSU5URUdSQVRJT05fTkFNRSxcbiAgbW9kdWxlTWV0YWRhdGFJbnRlZ3JhdGlvbixcbilcblxuO1xuXG5leHBvcnRzLk1vZHVsZU1ldGFkYXRhID0gTW9kdWxlTWV0YWRhdGE7XG5leHBvcnRzLm1vZHVsZU1ldGFkYXRhSW50ZWdyYXRpb24gPSBtb2R1bGVNZXRhZGF0YUludGVncmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0YWRhdGEuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgaW50ZWdyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlZ3JhdGlvbi5qcycpO1xuY29uc3Qgc3BhblV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvc3BhblV0aWxzLmpzJyk7XG5cbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgaW5jbHVkZToge1xuICAgIGNvb2tpZXM6IHRydWUsXG4gICAgZGF0YTogdHJ1ZSxcbiAgICBoZWFkZXJzOiB0cnVlLFxuICAgIGlwOiBmYWxzZSxcbiAgICBxdWVyeV9zdHJpbmc6IHRydWUsXG4gICAgdXJsOiB0cnVlLFxuICAgIHVzZXI6IHtcbiAgICAgIGlkOiB0cnVlLFxuICAgICAgdXNlcm5hbWU6IHRydWUsXG4gICAgICBlbWFpbDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICB0cmFuc2FjdGlvbk5hbWluZ1NjaGVtZTogJ21ldGhvZFBhdGgnLFxufTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdSZXF1ZXN0RGF0YSc7XG5cbmNvbnN0IF9yZXF1ZXN0RGF0YUludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgX2FkZFJlcXVlc3REYXRhID0gdXRpbHMuYWRkUmVxdWVzdERhdGFUb0V2ZW50O1xuICBjb25zdCBfb3B0aW9ucyA9IHtcbiAgICAuLi5ERUZBVUxUX09QVElPTlMsXG4gICAgLi4ub3B0aW9ucyxcbiAgICBpbmNsdWRlOiB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEl0J3MgbWFkIGJlY2F1c2UgYG1ldGhvZGAgaXNuJ3QgYSBrbm93biBgaW5jbHVkZWAga2V5LiAoSXQncyBvbmx5IGhlcmUgYW5kIG5vdCBzZXQgYnkgZGVmYXVsdCBpblxuICAgICAgLy8gYGFkZFJlcXVlc3REYXRhVG9FdmVudGAgZm9yIGxlZ2FjeSByZWFzb25zLiBUT0RPICh2OCk6IENoYW5nZSB0aGF0LilcbiAgICAgIG1ldGhvZDogdHJ1ZSxcbiAgICAgIC4uLkRFRkFVTFRfT1BUSU9OUy5pbmNsdWRlLFxuICAgICAgLi4ub3B0aW9ucy5pbmNsdWRlLFxuICAgICAgdXNlcjpcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmluY2x1ZGUudXNlciA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgPyBvcHRpb25zLmluY2x1ZGUudXNlclxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5ERUZBVUxUX09QVElPTlMuaW5jbHVkZS51c2VyLFxuICAgICAgICAgICAgICAvLyBVbmNsZWFyIHdoeSBUUyBzdGlsbCB0aGlua3MgYG9wdGlvbnMuaW5jbHVkZS51c2VyYCBjb3VsZCBiZSBhIGJvb2xlYW4gYXQgdGhpcyBwb2ludFxuICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMuaW5jbHVkZSB8fCB7fSkudXNlciApLFxuICAgICAgICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByb2Nlc3NFdmVudChldmVudCwgX2hpbnQsIGNsaWVudCkge1xuICAgICAgLy8gTm90ZTogSW4gdGhlIGxvbmcgcnVuLCBtb3N0IG9mIHRoZSBsb2dpYyBoZXJlIHNob3VsZCBwcm9iYWJseSBtb3ZlIGludG8gdGhlIHJlcXVlc3QgZGF0YSB1dGlsaXR5IGZ1bmN0aW9ucy4gRm9yXG4gICAgICAvLyB0aGUgbW9tZW50IGl0IGxpdmVzIGhlcmUsIHRob3VnaCwgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvNTcxOCBpcyBhZGRyZXNzZWQuXG4gICAgICAvLyAoVEw7RFI6IFRob3NlIGZ1bmN0aW9ucyB0b3VjaCBtYW55IHBhcnRzIG9mIHRoZSByZXBvIGluIG1hbnkgZGlmZmVyZW50IHdheXMsIGFuZCBuZWVkIHRvIGJlIGNsZW5lZCB1cC4gT25jZVxuICAgICAgLy8gdGhhdCdzIGhhcHBlbmVkLCBpdCB3aWxsIGJlIGVhc2llciB0byBhZGQgdGhpcyBsb2dpYyBpbiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLilcbiAgICAgIGNvbnN0IHsgdHJhbnNhY3Rpb25OYW1pbmdTY2hlbWUgfSA9IF9vcHRpb25zO1xuXG4gICAgICBjb25zdCB7IHNka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHt9IH0gPSBldmVudDtcbiAgICAgIGNvbnN0IHJlcSA9IHNka1Byb2Nlc3NpbmdNZXRhZGF0YS5yZXF1ZXN0O1xuXG4gICAgICBpZiAoIXJlcSkge1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBFeHByZXNzIHJlcXVlc3QgaGFuZGxlciB0YWtlcyBhIHNpbWlsYXIgYGluY2x1ZGVgIG9wdGlvbiB0byB0aGF0IHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBpbnRlZ3JhdGlvbi5cbiAgICAgIC8vIElmIHBhc3NlZCB0aGVyZSwgd2Ugc3RvcmUgaXQgaW4gYHNka1Byb2Nlc3NpbmdNZXRhZGF0YWAuIFRPRE8odjgpOiBGb3JjZSBleHByZXNzIGFuZCBHQ1AgcGVvcGxlIHRvIHVzZSB0aGlzXG4gICAgICAvLyBpbnRlZ3JhdGlvbiwgc28gdGhhdCBhbGwgb2YgdGhpcyBwYXNzaW5nIGFuZCBjb252ZXJzaW9uIGlzbid0IG5lY2Vzc2FyeVxuICAgICAgY29uc3QgYWRkUmVxdWVzdERhdGFPcHRpb25zID1cbiAgICAgICAgc2RrUHJvY2Vzc2luZ01ldGFkYXRhLnJlcXVlc3REYXRhT3B0aW9uc0Zyb21FeHByZXNzSGFuZGxlciB8fFxuICAgICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGEucmVxdWVzdERhdGFPcHRpb25zRnJvbUdDUFdyYXBwZXIgfHxcbiAgICAgICAgY29udmVydFJlcURhdGFJbnRlZ3JhdGlvbk9wdHNUb0FkZFJlcURhdGFPcHRzKF9vcHRpb25zKTtcblxuICAgICAgY29uc3QgcHJvY2Vzc2VkRXZlbnQgPSBfYWRkUmVxdWVzdERhdGEoZXZlbnQsIHJlcSwgYWRkUmVxdWVzdERhdGFPcHRpb25zKTtcblxuICAgICAgLy8gVHJhbnNhY3Rpb24gZXZlbnRzIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgYHRyYW5zYWN0aW9uYCB2YWx1ZVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicgfHwgdHJhbnNhY3Rpb25OYW1pbmdTY2hlbWUgPT09ICdoYW5kbGVyJykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgdXNlIHRoZSByZXF1ZXN0J3MgYXNzb2NpYXRlZCB0cmFuc2FjdGlvbiAoaWYgYW55KSB0byBvdmVyd3JpdGUgdGhlIGV2ZW50J3MgYHRyYW5zYWN0aW9uYFxuICAgICAgLy8gdmFsdWUgd2l0aCBhIGhpZ2gtcXVhbGl0eSBvbmVcbiAgICAgIGNvbnN0IHJlcVdpdGhUcmFuc2FjdGlvbiA9IHJlcSA7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHJlcVdpdGhUcmFuc2FjdGlvbi5fc2VudHJ5VHJhbnNhY3Rpb247XG4gICAgICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNwYW5VdGlscy5zcGFuVG9KU09OKHRyYW5zYWN0aW9uKS5kZXNjcmlwdGlvbiB8fCAnJztcblxuICAgICAgICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGUgbmV4dGpzIGNoZWNrIGFuZCBqdXN0IGJhc2UgaXQgb24gYHRyYW5zYWN0aW9uTmFtaW5nU2NoZW1lYCBmb3IgYWxsIFNES3MuIChXZSBoYXZlIHRvXG4gICAgICAgIC8vIGtlZXAgaXQgdGhlIHdheSBpdCBpcyBmb3IgdGhlIG1vbWVudCwgYmVjYXVzZSBjaGFuZ2luZyB0aGUgbmFtZXMgb2YgdHJhbnNhY3Rpb25zIGluIFNlbnRyeSBoYXMgdGhlIHBvdGVudGlhbFxuICAgICAgICAvLyB0byBicmVhayB0aGluZ3MgbGlrZSBhbGVydCBydWxlcy4pXG4gICAgICAgIGNvbnN0IHNob3VsZEluY2x1ZGVNZXRob2RJblRyYW5zYWN0aW9uTmFtZSA9XG4gICAgICAgICAgZ2V0U0RLTmFtZShjbGllbnQpID09PSAnc2VudHJ5LmphdmFzY3JpcHQubmV4dGpzJ1xuICAgICAgICAgICAgPyBuYW1lLnN0YXJ0c1dpdGgoJy9hcGknKVxuICAgICAgICAgICAgOiB0cmFuc2FjdGlvbk5hbWluZ1NjaGVtZSAhPT0gJ3BhdGgnO1xuXG4gICAgICAgIGNvbnN0IFt0cmFuc2FjdGlvblZhbHVlXSA9IHV0aWxzLmV4dHJhY3RQYXRoRm9yVHJhbnNhY3Rpb24ocmVxLCB7XG4gICAgICAgICAgcGF0aDogdHJ1ZSxcbiAgICAgICAgICBtZXRob2Q6IHNob3VsZEluY2x1ZGVNZXRob2RJblRyYW5zYWN0aW9uTmFtZSxcbiAgICAgICAgICBjdXN0b21Sb3V0ZTogbmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzc2VkRXZlbnQudHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgcmVxdWVzdERhdGFJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9uLmRlZmluZUludGVncmF0aW9uKF9yZXF1ZXN0RGF0YUludGVncmF0aW9uKTtcblxuLyoqXG4gKiBBZGQgZGF0YSBhYm91dCBhIHJlcXVlc3QgdG8gYW4gZXZlbnQuIFByaW1hcmlseSBmb3IgdXNlIGluIE5vZGUtYmFzZWQgU0RLcywgYnV0IGluY2x1ZGVkIGluIGBAc2VudHJ5L2ludGVncmF0aW9uc2BcbiAqIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNyb3NzLXBsYXRmb3JtIFNES3MgbGlrZSBgQHNlbnRyeS9uZXh0anNgLlxuICogQGRlcHJlY2F0ZWQgVXNlIGByZXF1ZXN0RGF0YUludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgUmVxdWVzdERhdGEgPSBpbnRlZ3JhdGlvbi5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoSU5URUdSQVRJT05fTkFNRSwgcmVxdWVzdERhdGFJbnRlZ3JhdGlvbilcblxuO1xuXG4vKiogQ29udmVydCB0aGlzIGludGVncmF0aW9uJ3Mgb3B0aW9ucyB0byBtYXRjaCB3aGF0IGBhZGRSZXF1ZXN0RGF0YVRvRXZlbnRgIGV4cGVjdHMgKi9cbi8qKiBUT0RPOiBDYW4gcG9zc2libHkgYmUgZGVsZXRlZCBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzU3MTggaXMgZml4ZWQgKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZXFEYXRhSW50ZWdyYXRpb25PcHRzVG9BZGRSZXFEYXRhT3B0cyhcbiAgaW50ZWdyYXRpb25PcHRpb25zLFxuKSB7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2FjdGlvbk5hbWluZ1NjaGVtZSxcbiAgICBpbmNsdWRlOiB7IGlwLCB1c2VyLCAuLi5yZXF1ZXN0T3B0aW9ucyB9LFxuICB9ID0gaW50ZWdyYXRpb25PcHRpb25zO1xuXG4gIGNvbnN0IHJlcXVlc3RJbmNsdWRlS2V5cyA9IFtdO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucykpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJlcXVlc3RJbmNsdWRlS2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFkZFJlcURhdGFVc2VyT3B0O1xuICBpZiAodXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYWRkUmVxRGF0YVVzZXJPcHQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB1c2VyID09PSAnYm9vbGVhbicpIHtcbiAgICBhZGRSZXFEYXRhVXNlck9wdCA9IHVzZXI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdXNlckluY2x1ZGVLZXlzID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXNlcikpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB1c2VySW5jbHVkZUtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBhZGRSZXFEYXRhVXNlck9wdCA9IHVzZXJJbmNsdWRlS2V5cztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5jbHVkZToge1xuICAgICAgaXAsXG4gICAgICB1c2VyOiBhZGRSZXFEYXRhVXNlck9wdCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RJbmNsdWRlS2V5cy5sZW5ndGggIT09IDAgPyByZXF1ZXN0SW5jbHVkZUtleXMgOiB1bmRlZmluZWQsXG4gICAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb25OYW1pbmdTY2hlbWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U0RLTmFtZShjbGllbnQpIHtcbiAgdHJ5IHtcbiAgICAvLyBGb3IgYSBsb25nIGNoYWluIGxpa2UgdGhpcywgaXQncyBmZXdlciBieXRlcyB0byBjb21iaW5lIGEgdHJ5LWNhdGNoIHdpdGggYXNzdW1pbmcgZXZlcnl0aGluZyBpcyB0aGVyZSB0aGFuIHRvXG4gICAgLy8gd3JpdGUgb3V0IGEgbG9uZyBjaGFpbiBvZiBgYSAmJiBhLmIgJiYgYS5iLmMgJiYgLi4uYFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgcmV0dXJuIGNsaWVudC5nZXRPcHRpb25zKCkuX21ldGFkYXRhLnNkay5uYW1lO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJbiB0aGVvcnkgd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnRzLlJlcXVlc3REYXRhID0gUmVxdWVzdERhdGE7XG5leHBvcnRzLnJlcXVlc3REYXRhSW50ZWdyYXRpb24gPSByZXF1ZXN0RGF0YUludGVncmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWVzdGRhdGEuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBpbnRlZ3JhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVncmF0aW9uLmpzJyk7XG5cbi8vIFwiU2NyaXB0IGVycm9yLlwiIGlzIGhhcmQgY29kZWQgaW50byBicm93c2VycyBmb3IgZXJyb3JzIHRoYXQgaXQgY2FuJ3QgcmVhZC5cbi8vIHRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIHNjcmlwdCBiZWluZyBwdWxsZWQgaW4gZnJvbSBhbiBleHRlcm5hbCBkb21haW4gYW5kIENPUlMuXG5jb25zdCBERUZBVUxUX0lHTk9SRV9FUlJPUlMgPSBbXG4gIC9eU2NyaXB0IGVycm9yXFwuPyQvLFxuICAvXkphdmFzY3JpcHQgZXJyb3I6IFNjcmlwdCBlcnJvclxcLj8gb24gbGluZSAwJC8sXG4gIC9eUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQgd2l0aCB1bmRlbGl2ZXJlZCBub3RpZmljYXRpb25zLiQvLFxuICAvXkNhbm5vdCByZWRlZmluZSBwcm9wZXJ0eTogZ29vZ2xldGFnJC8sXG5dO1xuXG5jb25zdCBERUZBVUxUX0lHTk9SRV9UUkFOU0FDVElPTlMgPSBbXG4gIC9eLipcXC9oZWFsdGhjaGVjayQvLFxuICAvXi4qXFwvaGVhbHRoeSQvLFxuICAvXi4qXFwvbGl2ZSQvLFxuICAvXi4qXFwvcmVhZHkkLyxcbiAgL14uKlxcL2hlYXJ0YmVhdCQvLFxuICAvXi4qXFwvaGVhbHRoJC8sXG4gIC9eLipcXC9oZWFsdGh6JC8sXG5dO1xuXG4vKiogT3B0aW9ucyBmb3IgdGhlIEluYm91bmRGaWx0ZXJzIGludGVncmF0aW9uICovXG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnSW5ib3VuZEZpbHRlcnMnO1xuY29uc3QgX2luYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQsIF9oaW50LCBjbGllbnQpIHtcbiAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuICAgICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IF9tZXJnZU9wdGlvbnMob3B0aW9ucywgY2xpZW50T3B0aW9ucyk7XG4gICAgICByZXR1cm4gX3Nob3VsZERyb3BFdmVudChldmVudCwgbWVyZ2VkT3B0aW9ucykgPyBudWxsIDogZXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9uLmRlZmluZUludGVncmF0aW9uKF9pbmJvdW5kRmlsdGVyc0ludGVncmF0aW9uKTtcblxuLyoqXG4gKiBJbmJvdW5kIGZpbHRlcnMgY29uZmlndXJhYmxlIGJ5IHRoZSB1c2VyLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBpbmJvdW5kRmlsdGVyc0ludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgSW5ib3VuZEZpbHRlcnMgPSBpbnRlZ3JhdGlvbi5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoXG4gIElOVEVHUkFUSU9OX05BTUUsXG4gIGluYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24sXG4pXG5cbjtcblxuZnVuY3Rpb24gX21lcmdlT3B0aW9ucyhcbiAgaW50ZXJuYWxPcHRpb25zID0ge30sXG4gIGNsaWVudE9wdGlvbnMgPSB7fSxcbikge1xuICByZXR1cm4ge1xuICAgIGFsbG93VXJsczogWy4uLihpbnRlcm5hbE9wdGlvbnMuYWxsb3dVcmxzIHx8IFtdKSwgLi4uKGNsaWVudE9wdGlvbnMuYWxsb3dVcmxzIHx8IFtdKV0sXG4gICAgZGVueVVybHM6IFsuLi4oaW50ZXJuYWxPcHRpb25zLmRlbnlVcmxzIHx8IFtdKSwgLi4uKGNsaWVudE9wdGlvbnMuZGVueVVybHMgfHwgW10pXSxcbiAgICBpZ25vcmVFcnJvcnM6IFtcbiAgICAgIC4uLihpbnRlcm5hbE9wdGlvbnMuaWdub3JlRXJyb3JzIHx8IFtdKSxcbiAgICAgIC4uLihjbGllbnRPcHRpb25zLmlnbm9yZUVycm9ycyB8fCBbXSksXG4gICAgICAuLi4oaW50ZXJuYWxPcHRpb25zLmRpc2FibGVFcnJvckRlZmF1bHRzID8gW10gOiBERUZBVUxUX0lHTk9SRV9FUlJPUlMpLFxuICAgIF0sXG4gICAgaWdub3JlVHJhbnNhY3Rpb25zOiBbXG4gICAgICAuLi4oaW50ZXJuYWxPcHRpb25zLmlnbm9yZVRyYW5zYWN0aW9ucyB8fCBbXSksXG4gICAgICAuLi4oY2xpZW50T3B0aW9ucy5pZ25vcmVUcmFuc2FjdGlvbnMgfHwgW10pLFxuICAgICAgLi4uKGludGVybmFsT3B0aW9ucy5kaXNhYmxlVHJhbnNhY3Rpb25EZWZhdWx0cyA/IFtdIDogREVGQVVMVF9JR05PUkVfVFJBTlNBQ1RJT05TKSxcbiAgICBdLFxuICAgIGlnbm9yZUludGVybmFsOiBpbnRlcm5hbE9wdGlvbnMuaWdub3JlSW50ZXJuYWwgIT09IHVuZGVmaW5lZCA/IGludGVybmFsT3B0aW9ucy5pZ25vcmVJbnRlcm5hbCA6IHRydWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9zaG91bGREcm9wRXZlbnQoZXZlbnQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuaWdub3JlSW50ZXJuYWwgJiYgX2lzU2VudHJ5RXJyb3IoZXZlbnQpKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgdXRpbHMubG9nZ2VyLndhcm4oYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIGludGVybmFsIFNlbnRyeSBFcnJvci5cXG5FdmVudDogJHt1dGlscy5nZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoX2lzSWdub3JlZEVycm9yKGV2ZW50LCBvcHRpb25zLmlnbm9yZUVycm9ycykpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICB1dGlscy5sb2dnZXIud2FybihcbiAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIG1hdGNoZWQgYnkgXFxgaWdub3JlRXJyb3JzXFxgIG9wdGlvbi5cXG5FdmVudDogJHt1dGlscy5nZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoX2lzSWdub3JlZFRyYW5zYWN0aW9uKGV2ZW50LCBvcHRpb25zLmlnbm9yZVRyYW5zYWN0aW9ucykpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICB1dGlscy5sb2dnZXIud2FybihcbiAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIG1hdGNoZWQgYnkgXFxgaWdub3JlVHJhbnNhY3Rpb25zXFxgIG9wdGlvbi5cXG5FdmVudDogJHt1dGlscy5nZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoX2lzRGVuaWVkVXJsKGV2ZW50LCBvcHRpb25zLmRlbnlVcmxzKSkge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgIHV0aWxzLmxvZ2dlci53YXJuKFxuICAgICAgICBgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgbWF0Y2hlZCBieSBcXGBkZW55VXJsc1xcYCBvcHRpb24uXFxuRXZlbnQ6ICR7dXRpbHMuZ2V0RXZlbnREZXNjcmlwdGlvbihcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgKX0uXFxuVXJsOiAke19nZXRFdmVudEZpbHRlclVybChldmVudCl9YCxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFfaXNBbGxvd2VkVXJsKGV2ZW50LCBvcHRpb25zLmFsbG93VXJscykpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICB1dGlscy5sb2dnZXIud2FybihcbiAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIG5vdCBiZWluZyBtYXRjaGVkIGJ5IFxcYGFsbG93VXJsc1xcYCBvcHRpb24uXFxuRXZlbnQ6ICR7dXRpbHMuZ2V0RXZlbnREZXNjcmlwdGlvbihcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgKX0uXFxuVXJsOiAke19nZXRFdmVudEZpbHRlclVybChldmVudCl9YCxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfaXNJZ25vcmVkRXJyb3IoZXZlbnQsIGlnbm9yZUVycm9ycykge1xuICAvLyBJZiBldmVudC50eXBlLCB0aGlzIGlzIG5vdCBhbiBlcnJvclxuICBpZiAoZXZlbnQudHlwZSB8fCAhaWdub3JlRXJyb3JzIHx8ICFpZ25vcmVFcnJvcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIF9nZXRQb3NzaWJsZUV2ZW50TWVzc2FnZXMoZXZlbnQpLnNvbWUobWVzc2FnZSA9PiB1dGlscy5zdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4obWVzc2FnZSwgaWdub3JlRXJyb3JzKSk7XG59XG5cbmZ1bmN0aW9uIF9pc0lnbm9yZWRUcmFuc2FjdGlvbihldmVudCwgaWdub3JlVHJhbnNhY3Rpb25zKSB7XG4gIGlmIChldmVudC50eXBlICE9PSAndHJhbnNhY3Rpb24nIHx8ICFpZ25vcmVUcmFuc2FjdGlvbnMgfHwgIWlnbm9yZVRyYW5zYWN0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBuYW1lID0gZXZlbnQudHJhbnNhY3Rpb247XG4gIHJldHVybiBuYW1lID8gdXRpbHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKG5hbWUsIGlnbm9yZVRyYW5zYWN0aW9ucykgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX2lzRGVuaWVkVXJsKGV2ZW50LCBkZW55VXJscykge1xuICAvLyBUT0RPOiBVc2UgR2xvYiBpbnN0ZWFkP1xuICBpZiAoIWRlbnlVcmxzIHx8ICFkZW55VXJscy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgdXJsID0gX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KTtcbiAgcmV0dXJuICF1cmwgPyBmYWxzZSA6IHV0aWxzLnN0cmluZ01hdGNoZXNTb21lUGF0dGVybih1cmwsIGRlbnlVcmxzKTtcbn1cblxuZnVuY3Rpb24gX2lzQWxsb3dlZFVybChldmVudCwgYWxsb3dVcmxzKSB7XG4gIC8vIFRPRE86IFVzZSBHbG9iIGluc3RlYWQ/XG4gIGlmICghYWxsb3dVcmxzIHx8ICFhbGxvd1VybHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgdXJsID0gX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KTtcbiAgcmV0dXJuICF1cmwgPyB0cnVlIDogdXRpbHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKHVybCwgYWxsb3dVcmxzKTtcbn1cblxuZnVuY3Rpb24gX2dldFBvc3NpYmxlRXZlbnRNZXNzYWdlcyhldmVudCkge1xuICBjb25zdCBwb3NzaWJsZU1lc3NhZ2VzID0gW107XG5cbiAgaWYgKGV2ZW50Lm1lc3NhZ2UpIHtcbiAgICBwb3NzaWJsZU1lc3NhZ2VzLnB1c2goZXZlbnQubWVzc2FnZSk7XG4gIH1cblxuICBsZXQgbGFzdEV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRyeSBjYXRjaGluZyB0byBzYXZlIGJ1bmRsZSBzaXplXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIGxhc3RFeGNlcHRpb24gPSBldmVudC5leGNlcHRpb24udmFsdWVzW2V2ZW50LmV4Y2VwdGlvbi52YWx1ZXMubGVuZ3RoIC0gMV07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyB0cnkgY2F0Y2hpbmcgdG8gc2F2ZSBidW5kbGUgc2l6ZSBjaGVja2luZyBleGlzdGVuY2Ugb2YgdmFyaWFibGVzXG4gIH1cblxuICBpZiAobGFzdEV4Y2VwdGlvbikge1xuICAgIGlmIChsYXN0RXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICBwb3NzaWJsZU1lc3NhZ2VzLnB1c2gobGFzdEV4Y2VwdGlvbi52YWx1ZSk7XG4gICAgICBpZiAobGFzdEV4Y2VwdGlvbi50eXBlKSB7XG4gICAgICAgIHBvc3NpYmxlTWVzc2FnZXMucHVzaChgJHtsYXN0RXhjZXB0aW9uLnR5cGV9OiAke2xhc3RFeGNlcHRpb24udmFsdWV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgcG9zc2libGVNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICB1dGlscy5sb2dnZXIuZXJyb3IoYENvdWxkIG5vdCBleHRyYWN0IG1lc3NhZ2UgZm9yIGV2ZW50ICR7dXRpbHMuZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCl9YCk7XG4gIH1cblxuICByZXR1cm4gcG9zc2libGVNZXNzYWdlcztcbn1cblxuZnVuY3Rpb24gX2lzU2VudHJ5RXJyb3IoZXZlbnQpIHtcbiAgdHJ5IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbid0IGJlIGEgc2VudHJ5IGVycm9yIGlmIHVuZGVmaW5lZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICByZXR1cm4gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS50eXBlID09PSAnU2VudHJ5RXJyb3InO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gaWdub3JlXG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfZ2V0TGFzdFZhbGlkVXJsKGZyYW1lcyA9IFtdKSB7XG4gIGZvciAobGV0IGkgPSBmcmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBmcmFtZSA9IGZyYW1lc1tpXTtcblxuICAgIGlmIChmcmFtZSAmJiBmcmFtZS5maWxlbmFtZSAhPT0gJzxhbm9ueW1vdXM+JyAmJiBmcmFtZS5maWxlbmFtZSAhPT0gJ1tuYXRpdmUgY29kZV0nKSB7XG4gICAgICByZXR1cm4gZnJhbWUuZmlsZW5hbWUgfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KSB7XG4gIHRyeSB7XG4gICAgbGV0IGZyYW1lcztcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSBvbmx5IGNhcmUgYWJvdXQgZnJhbWVzIGlmIHRoZSB3aG9sZSB0aGluZyBoZXJlIGlzIGRlZmluZWRcbiAgICAgIGZyYW1lcyA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIHJldHVybiBmcmFtZXMgPyBfZ2V0TGFzdFZhbGlkVXJsKGZyYW1lcykgOiBudWxsO1xuICB9IGNhdGNoIChvTykge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmVycm9yKGBDYW5ub3QgZXh0cmFjdCB1cmwgZm9yIGV2ZW50ICR7dXRpbHMuZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCl9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0cy5JbmJvdW5kRmlsdGVycyA9IEluYm91bmRGaWx0ZXJzO1xuZXhwb3J0cy5pbmJvdW5kRmlsdGVyc0ludGVncmF0aW9uID0gaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluYm91bmRmaWx0ZXJzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGV4cG9ydHMkMSA9IHJlcXVpcmUoJy4uL2V4cG9ydHMuanMnKTtcbmNvbnN0IGludGVncmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZWdyYXRpb24uanMnKTtcblxubGV0IG9yaWdpbmFsRnVuY3Rpb25Ub1N0cmluZztcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdGdW5jdGlvblRvU3RyaW5nJztcblxuY29uc3QgU0VUVVBfQ0xJRU5UUyA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IF9mdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24gPSAoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgc2V0dXBPbmNlKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgICAvLyBpbnRyaW5zaWNzIChsaWtlIEZ1bmN0aW9uLnByb3RvdHlwZSkgbWlnaHQgYmUgaW1tdXRhYmxlIGluIHNvbWUgZW52aXJvbm1lbnRzXG4gICAgICAvLyBlLmcuIE5vZGUgd2l0aCAtLWZyb3plbi1pbnRyaW5zaWNzLCBYUyAoYW4gZW1iZWRkZWQgSmF2YVNjcmlwdCBlbmdpbmUpIG9yIFNFUyAoYSBKYXZhU2NyaXB0IHByb3Bvc2FsKVxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxGdW5jdGlvbiA9IHV0aWxzLmdldE9yaWdpbmFsRnVuY3Rpb24odGhpcyk7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9XG4gICAgICAgICAgICBTRVRVUF9DTElFTlRTLmhhcyhleHBvcnRzJDEuZ2V0Q2xpZW50KCkgKSAmJiBvcmlnaW5hbEZ1bmN0aW9uICE9PSB1bmRlZmluZWQgPyBvcmlnaW5hbEZ1bmN0aW9uIDogdGhpcztcbiAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmUsIGp1c3QgZG9uJ3QgcGF0Y2ggdGhpc1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBTRVRVUF9DTElFTlRTLnNldChjbGllbnQsIHRydWUpO1xuICAgIH0sXG4gIH07XG59KSA7XG5cbi8qKlxuICogUGF0Y2ggdG9TdHJpbmcgY2FsbHMgdG8gcmV0dXJuIHByb3BlciBuYW1lIGZvciB3cmFwcGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBgYGBqc1xuICogU2VudHJ5LmluaXQoe1xuICogICBpbnRlZ3JhdGlvbnM6IFtcbiAqICAgICBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24oKSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9uLmRlZmluZUludGVncmF0aW9uKF9mdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIFBhdGNoIHRvU3RyaW5nIGNhbGxzIHRvIHJldHVybiBwcm9wZXIgbmFtZSBmb3Igd3JhcHBlZCBmdW5jdGlvbnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBGdW5jdGlvblRvU3RyaW5nID0gaW50ZWdyYXRpb24uY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKFxuICBJTlRFR1JBVElPTl9OQU1FLFxuICBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24sXG4pIDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cbmV4cG9ydHMuRnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uVG9TdHJpbmc7XG5leHBvcnRzLmZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiA9IGZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZ1bmN0aW9udG9zdHJpbmcuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgaW50ZWdyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlZ3JhdGlvbi5qcycpO1xuXG5jb25zdCBERUZBVUxUX0tFWSA9ICdjYXVzZSc7XG5jb25zdCBERUZBVUxUX0xJTUlUID0gNTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdMaW5rZWRFcnJvcnMnO1xuXG5jb25zdCBfbGlua2VkRXJyb3JzSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgfHwgREVGQVVMVF9MSU1JVDtcbiAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXkgfHwgREVGQVVMVF9LRVk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJlcHJvY2Vzc0V2ZW50KGV2ZW50LCBoaW50LCBjbGllbnQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gICAgICB1dGlscy5hcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQoXG4gICAgICAgIHV0aWxzLmV4Y2VwdGlvbkZyb21FcnJvcixcbiAgICAgICAgb3B0aW9ucy5zdGFja1BhcnNlcixcbiAgICAgICAgb3B0aW9ucy5tYXhWYWx1ZUxlbmd0aCxcbiAgICAgICAga2V5LFxuICAgICAgICBsaW1pdCxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGhpbnQsXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59KSA7XG5cbmNvbnN0IGxpbmtlZEVycm9yc0ludGVncmF0aW9uID0gaW50ZWdyYXRpb24uZGVmaW5lSW50ZWdyYXRpb24oX2xpbmtlZEVycm9yc0ludGVncmF0aW9uKTtcblxuLyoqXG4gKiBBZGRzIFNESyBpbmZvIHRvIGFuIGV2ZW50LlxuICogQGRlcHJlY2F0ZWQgVXNlIGBsaW5rZWRFcnJvcnNJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IExpbmtlZEVycm9ycyA9IGludGVncmF0aW9uLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhJTlRFR1JBVElPTl9OQU1FLCBsaW5rZWRFcnJvcnNJbnRlZ3JhdGlvbilcblxuO1xuXG5leHBvcnRzLkxpbmtlZEVycm9ycyA9IExpbmtlZEVycm9ycztcbmV4cG9ydHMubGlua2VkRXJyb3JzSW50ZWdyYXRpb24gPSBsaW5rZWRFcnJvcnNJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbmtlZGVycm9ycy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZnVuY3Rpb250b3N0cmluZyA9IHJlcXVpcmUoJy4vZnVuY3Rpb250b3N0cmluZy5qcycpO1xuY29uc3QgaW5ib3VuZGZpbHRlcnMgPSByZXF1aXJlKCcuL2luYm91bmRmaWx0ZXJzLmpzJyk7XG5jb25zdCBsaW5rZWRlcnJvcnMgPSByZXF1aXJlKCcuL2xpbmtlZGVycm9ycy5qcycpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbiAqL1xuXG5leHBvcnRzLkZ1bmN0aW9uVG9TdHJpbmcgPSBmdW5jdGlvbnRvc3RyaW5nLkZ1bmN0aW9uVG9TdHJpbmc7XG5leHBvcnRzLkluYm91bmRGaWx0ZXJzID0gaW5ib3VuZGZpbHRlcnMuSW5ib3VuZEZpbHRlcnM7XG5leHBvcnRzLkxpbmtlZEVycm9ycyA9IGxpbmtlZGVycm9ycy5MaW5rZWRFcnJvcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMkMSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzLmpzJyk7XG5jb25zdCBpbnN0YW5jZSA9IHJlcXVpcmUoJy4vaW5zdGFuY2UuanMnKTtcbmNvbnN0IG1ldHJpY1N1bW1hcnkgPSByZXF1aXJlKCcuL21ldHJpYy1zdW1tYXJ5LmpzJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcblxuLyoqXG4gKiBBIHNpbXBsZSBtZXRyaWNzIGFnZ3JlZ2F0b3IgdGhhdCBhZ2dyZWdhdGVzIG1ldHJpY3MgaW4gbWVtb3J5IGFuZCBmbHVzaGVzIHRoZW0gcGVyaW9kaWNhbGx5LlxuICogRGVmYXVsdCBmbHVzaCBpbnRlcnZhbCBpcyA1IHNlY29uZHMuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIEFQSSBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICovXG5jbGFzcyBCcm93c2VyTWV0cmljc0FnZ3JlZ2F0b3IgIHtcbiAgLy8gVE9ETyhAYW5vbnJpZyk6IFVzZSBGaW5hbGl6YXRpb25SZWdpc3RyeSB0byBoYXZlIGEgcHJvcGVyIHdheSBvZiBmbHVzaGluZyB0aGUgYnVja2V0c1xuICAvLyB3aGVuIHRoZSBhZ2dyZWdhdG9yIGlzIGdhcmJhZ2UgY29sbGVjdGVkLlxuICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ZpbmFsaXphdGlvblJlZ2lzdHJ5XG5cbiAgIGNvbnN0cnVjdG9yKCAgX2NsaWVudCkge3RoaXMuX2NsaWVudCA9IF9jbGllbnQ7XG4gICAgdGhpcy5fYnVja2V0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuZmx1c2goKSwgY29uc3RhbnRzLkRFRkFVTFRfQlJPV1NFUl9GTFVTSF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBhZGQoXG4gICAgbWV0cmljVHlwZSxcbiAgICB1bnNhbml0aXplZE5hbWUsXG4gICAgdmFsdWUsXG4gICAgdW5zYW5pdGl6ZWRVbml0ID0gJ25vbmUnLFxuICAgIHVuc2FuaXRpemVkVGFncyA9IHt9LFxuICAgIG1heWJlRmxvYXRUaW1lc3RhbXAgPSB1dGlscyQxLnRpbWVzdGFtcEluU2Vjb25kcygpLFxuICApIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG1heWJlRmxvYXRUaW1lc3RhbXApO1xuICAgIGNvbnN0IG5hbWUgPSB1dGlscy5zYW5pdGl6ZU1ldHJpY0tleSh1bnNhbml0aXplZE5hbWUpO1xuICAgIGNvbnN0IHRhZ3MgPSB1dGlscy5zYW5pdGl6ZVRhZ3ModW5zYW5pdGl6ZWRUYWdzKTtcbiAgICBjb25zdCB1bml0ID0gdXRpbHMuc2FuaXRpemVVbml0KHVuc2FuaXRpemVkVW5pdCApO1xuXG4gICAgY29uc3QgYnVja2V0S2V5ID0gdXRpbHMuZ2V0QnVja2V0S2V5KG1ldHJpY1R5cGUsIG5hbWUsIHVuaXQsIHRhZ3MpO1xuXG4gICAgbGV0IGJ1Y2tldEl0ZW0gPSB0aGlzLl9idWNrZXRzLmdldChidWNrZXRLZXkpO1xuICAgIC8vIElmIHRoaXMgaXMgYSBzZXQgbWV0cmljLCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgZGVsdGEgZnJvbSB0aGUgcHJldmlvdXMgd2VpZ2h0LlxuICAgIGNvbnN0IHByZXZpb3VzV2VpZ2h0ID0gYnVja2V0SXRlbSAmJiBtZXRyaWNUeXBlID09PSBjb25zdGFudHMuU0VUX01FVFJJQ19UWVBFID8gYnVja2V0SXRlbS5tZXRyaWMud2VpZ2h0IDogMDtcblxuICAgIGlmIChidWNrZXRJdGVtKSB7XG4gICAgICBidWNrZXRJdGVtLm1ldHJpYy5hZGQodmFsdWUpO1xuICAgICAgLy8gVE9ETyhhYmhpKTogRG8gd2UgbmVlZCB0aGlzIGNoZWNrP1xuICAgICAgaWYgKGJ1Y2tldEl0ZW0udGltZXN0YW1wIDwgdGltZXN0YW1wKSB7XG4gICAgICAgIGJ1Y2tldEl0ZW0udGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBidWNrZXRJdGVtID0ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlIGRvbid0IG5lZWQgdG8gbmFycm93IGRvd24gdGhlIHR5cGUgb2YgdmFsdWUgaGVyZSwgc2F2ZXMgYnVuZGxlIHNpemUuXG4gICAgICAgIG1ldHJpYzogbmV3IGluc3RhbmNlLk1FVFJJQ19NQVBbbWV0cmljVHlwZV0odmFsdWUpLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIG1ldHJpY1R5cGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHVuaXQsXG4gICAgICAgIHRhZ3MsXG4gICAgICB9O1xuICAgICAgdGhpcy5fYnVja2V0cy5zZXQoYnVja2V0S2V5LCBidWNrZXRJdGVtKTtcbiAgICB9XG5cbiAgICAvLyBJZiB2YWx1ZSBpcyBhIHN0cmluZywgaXQncyBhIHNldCBtZXRyaWMgc28gY2FsY3VsYXRlIHRoZSBkZWx0YSBmcm9tIHRoZSBwcmV2aW91cyB3ZWlnaHQuXG4gICAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IGJ1Y2tldEl0ZW0ubWV0cmljLndlaWdodCAtIHByZXZpb3VzV2VpZ2h0IDogdmFsdWU7XG4gICAgbWV0cmljU3VtbWFyeS51cGRhdGVNZXRyaWNTdW1tYXJ5T25BY3RpdmVTcGFuKG1ldHJpY1R5cGUsIG5hbWUsIHZhbCwgdW5pdCwgdW5zYW5pdGl6ZWRUYWdzLCBidWNrZXRLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgZmx1c2goKSB7XG4gICAgLy8gc2hvcnQgY2lyY3VpdCBpZiBidWNrZXRzIGFyZSBlbXB0eS5cbiAgICBpZiAodGhpcy5fYnVja2V0cy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NsaWVudC5jYXB0dXJlQWdncmVnYXRlTWV0cmljcykge1xuICAgICAgLy8gVE9ETyhAYW5vbnJpZyk6IFVzZSBPYmplY3QudmFsdWVzKCkgd2hlbiB3ZSBzdXBwb3J0IEVTNitcbiAgICAgIGNvbnN0IG1ldHJpY0J1Y2tldHMgPSBBcnJheS5mcm9tKHRoaXMuX2J1Y2tldHMpLm1hcCgoWywgYnVja2V0SXRlbV0pID0+IGJ1Y2tldEl0ZW0pO1xuICAgICAgdGhpcy5fY2xpZW50LmNhcHR1cmVBZ2dyZWdhdGVNZXRyaWNzKG1ldHJpY0J1Y2tldHMpO1xuICAgIH1cblxuICAgIHRoaXMuX2J1Y2tldHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGNsb3NlKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgIHRoaXMuZmx1c2goKTtcbiAgfVxufVxuXG5leHBvcnRzLkJyb3dzZXJNZXRyaWNzQWdncmVnYXRvciA9IEJyb3dzZXJNZXRyaWNzQWdncmVnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXItYWdncmVnYXRvci5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgaW50ZWdyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlZ3JhdGlvbi5qcycpO1xuY29uc3QgYnJvd3NlckFnZ3JlZ2F0b3IgPSByZXF1aXJlKCcuL2Jyb3dzZXItYWdncmVnYXRvci5qcycpO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ01ldHJpY3NBZ2dyZWdhdG9yJztcblxuY29uc3QgX21ldHJpY3NBZ2dyZWdhdG9ySW50ZWdyYXRpb24gPSAoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIGNsaWVudC5tZXRyaWNzQWdncmVnYXRvciA9IG5ldyBicm93c2VyQWdncmVnYXRvci5Ccm93c2VyTWV0cmljc0FnZ3JlZ2F0b3IoY2xpZW50KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBtZXRyaWNzQWdncmVnYXRvckludGVncmF0aW9uID0gaW50ZWdyYXRpb24uZGVmaW5lSW50ZWdyYXRpb24oX21ldHJpY3NBZ2dyZWdhdG9ySW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIEVuYWJsZXMgU2VudHJ5IG1ldHJpY3MgbW9uaXRvcmluZy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgQVBJIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWlnaHQgaGF2aW5nIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgbWV0cmljc0FnZ2VncmF0b3JJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IE1ldHJpY3NBZ2dyZWdhdG9yID0gaW50ZWdyYXRpb24uY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKFxuICBJTlRFR1JBVElPTl9OQU1FLFxuICBtZXRyaWNzQWdncmVnYXRvckludGVncmF0aW9uLFxuKSA7XG5cbmV4cG9ydHMuTWV0cmljc0FnZ3JlZ2F0b3IgPSBNZXRyaWNzQWdncmVnYXRvcjtcbmV4cG9ydHMubWV0cmljc0FnZ3JlZ2F0b3JJbnRlZ3JhdGlvbiA9IG1ldHJpY3NBZ2dyZWdhdG9ySW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlZ3JhdGlvbi5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGV4cG9ydHMkMSA9IHJlcXVpcmUoJy4uL2V4cG9ydHMuanMnKTtcbmNvbnN0IHNwYW5VdGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL3NwYW5VdGlscy5qcycpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMuanMnKTtcbmNvbnN0IGludGVncmF0aW9uID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbi5qcycpO1xuXG5mdW5jdGlvbiBhZGRUb01ldHJpY3NBZ2dyZWdhdG9yKFxuICBtZXRyaWNUeXBlLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgZGF0YSA9IHt9LFxuKSB7XG4gIGNvbnN0IGNsaWVudCA9IGV4cG9ydHMkMS5nZXRDbGllbnQoKTtcbiAgY29uc3Qgc2NvcGUgPSBleHBvcnRzJDEuZ2V0Q3VycmVudFNjb3BlKCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICBpZiAoIWNsaWVudC5tZXRyaWNzQWdncmVnYXRvcikge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgICB1dGlscy5sb2dnZXIud2FybignTm8gbWV0cmljcyBhZ2dyZWdhdG9yIGVuYWJsZWQuIFBsZWFzZSBhZGQgdGhlIE1ldHJpY3NBZ2dyZWdhdG9yIGludGVncmF0aW9uIHRvIHVzZSBtZXRyaWNzIEFQSXMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB1bml0LCB0YWdzLCB0aW1lc3RhbXAgfSA9IGRhdGE7XG4gICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCB9ID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHNjb3BlLmdldFRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgbWV0cmljVGFncyA9IHt9O1xuICAgIGlmIChyZWxlYXNlKSB7XG4gICAgICBtZXRyaWNUYWdzLnJlbGVhc2UgPSByZWxlYXNlO1xuICAgIH1cbiAgICBpZiAoZW52aXJvbm1lbnQpIHtcbiAgICAgIG1ldHJpY1RhZ3MuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICBtZXRyaWNUYWdzLnRyYW5zYWN0aW9uID0gc3BhblV0aWxzLnNwYW5Ub0pTT04odHJhbnNhY3Rpb24pLmRlc2NyaXB0aW9uIHx8ICcnO1xuICAgIH1cblxuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgQWRkaW5nIHZhbHVlIG9mICR7dmFsdWV9IHRvICR7bWV0cmljVHlwZX0gbWV0cmljICR7bmFtZX1gKTtcbiAgICBjbGllbnQubWV0cmljc0FnZ3JlZ2F0b3IuYWRkKG1ldHJpY1R5cGUsIG5hbWUsIHZhbHVlLCB1bml0LCB7IC4uLm1ldHJpY1RhZ3MsIC4uLnRhZ3MgfSwgdGltZXN0YW1wKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYSB2YWx1ZSB0byBhIGNvdW50ZXIgbWV0cmljXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIEFQSSBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGhhdmUgYnJlYWtpbmcgY2hhbmdlcyBpbiB0aGUgZnV0dXJlLlxuICovXG5mdW5jdGlvbiBpbmNyZW1lbnQobmFtZSwgdmFsdWUgPSAxLCBkYXRhKSB7XG4gIGFkZFRvTWV0cmljc0FnZ3JlZ2F0b3IoY29uc3RhbnRzLkNPVU5URVJfTUVUUklDX1RZUEUsIG5hbWUsIHZhbHVlLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgdmFsdWUgdG8gYSBkaXN0cmlidXRpb24gbWV0cmljXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIEFQSSBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGhhdmUgYnJlYWtpbmcgY2hhbmdlcyBpbiB0aGUgZnV0dXJlLlxuICovXG5mdW5jdGlvbiBkaXN0cmlidXRpb24obmFtZSwgdmFsdWUsIGRhdGEpIHtcbiAgYWRkVG9NZXRyaWNzQWdncmVnYXRvcihjb25zdGFudHMuRElTVFJJQlVUSU9OX01FVFJJQ19UWVBFLCBuYW1lLCB2YWx1ZSwgZGF0YSk7XG59XG5cbi8qKlxuICogQWRkcyBhIHZhbHVlIHRvIGEgc2V0IG1ldHJpYy4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBpbnRlZ2VyLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBBUEkgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBoYXZlIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZS5cbiAqL1xuZnVuY3Rpb24gc2V0KG5hbWUsIHZhbHVlLCBkYXRhKSB7XG4gIGFkZFRvTWV0cmljc0FnZ3JlZ2F0b3IoY29uc3RhbnRzLlNFVF9NRVRSSUNfVFlQRSwgbmFtZSwgdmFsdWUsIGRhdGEpO1xufVxuXG4vKipcbiAqIEFkZHMgYSB2YWx1ZSB0byBhIGdhdWdlIG1ldHJpY1xuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBBUEkgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBoYXZlIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZS5cbiAqL1xuZnVuY3Rpb24gZ2F1Z2UobmFtZSwgdmFsdWUsIGRhdGEpIHtcbiAgYWRkVG9NZXRyaWNzQWdncmVnYXRvcihjb25zdGFudHMuR0FVR0VfTUVUUklDX1RZUEUsIG5hbWUsIHZhbHVlLCBkYXRhKTtcbn1cblxuY29uc3QgbWV0cmljcyA9IHtcbiAgaW5jcmVtZW50LFxuICBkaXN0cmlidXRpb24sXG4gIHNldCxcbiAgZ2F1Z2UsXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYG1ldHJpY3MubWV0cmljc0FnZ3JlZ3JhdG9ySW50ZWdyYXRpb24oKWAgaW5zdGVhZC4gKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIE1ldHJpY3NBZ2dyZWdhdG9yOiBpbnRlZ3JhdGlvbi5NZXRyaWNzQWdncmVnYXRvcixcbiAgbWV0cmljc0FnZ3JlZ2F0b3JJbnRlZ3JhdGlvbjogaW50ZWdyYXRpb24ubWV0cmljc0FnZ3JlZ2F0b3JJbnRlZ3JhdGlvbixcbn07XG5cbmV4cG9ydHMuZGlzdHJpYnV0aW9uID0gZGlzdHJpYnV0aW9uO1xuZXhwb3J0cy5nYXVnZSA9IGdhdWdlO1xuZXhwb3J0cy5pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7XG5leHBvcnRzLm1ldHJpY3MgPSBtZXRyaWNzO1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBvcnRzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBodWJleHRlbnNpb25zID0gcmVxdWlyZSgnLi90cmFjaW5nL2h1YmV4dGVuc2lvbnMuanMnKTtcbmNvbnN0IGlkbGV0cmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vdHJhY2luZy9pZGxldHJhbnNhY3Rpb24uanMnKTtcbmNvbnN0IHNwYW4kMSA9IHJlcXVpcmUoJy4vdHJhY2luZy9zcGFuLmpzJyk7XG5jb25zdCB0cmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vdHJhY2luZy90cmFuc2FjdGlvbi5qcycpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3RyYWNpbmcvdXRpbHMuanMnKTtcbmNvbnN0IHNwYW5zdGF0dXMgPSByZXF1aXJlKCcuL3RyYWNpbmcvc3BhbnN0YXR1cy5qcycpO1xuY29uc3QgdHJhY2UgPSByZXF1aXJlKCcuL3RyYWNpbmcvdHJhY2UuanMnKTtcbmNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSByZXF1aXJlKCcuL3RyYWNpbmcvZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcycpO1xuY29uc3QgbWVhc3VyZW1lbnQgPSByZXF1aXJlKCcuL3RyYWNpbmcvbWVhc3VyZW1lbnQuanMnKTtcbmNvbnN0IHNhbXBsaW5nID0gcmVxdWlyZSgnLi90cmFjaW5nL3NhbXBsaW5nLmpzJyk7XG5jb25zdCBzZW1hbnRpY0F0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NlbWFudGljQXR0cmlidXRlcy5qcycpO1xuY29uc3QgZW52ZWxvcGUgPSByZXF1aXJlKCcuL2VudmVsb3BlLmpzJyk7XG5jb25zdCBleHBvcnRzJDEgPSByZXF1aXJlKCcuL2V4cG9ydHMuanMnKTtcbmNvbnN0IGh1YiA9IHJlcXVpcmUoJy4vaHViLmpzJyk7XG5jb25zdCBzZXNzaW9uID0gcmVxdWlyZSgnLi9zZXNzaW9uLmpzJyk7XG5jb25zdCBzZXNzaW9uZmx1c2hlciA9IHJlcXVpcmUoJy4vc2Vzc2lvbmZsdXNoZXIuanMnKTtcbmNvbnN0IHNjb3BlID0gcmVxdWlyZSgnLi9zY29wZS5qcycpO1xuY29uc3QgZXZlbnRQcm9jZXNzb3JzID0gcmVxdWlyZSgnLi9ldmVudFByb2Nlc3NvcnMuanMnKTtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vYXBpLmpzJyk7XG5jb25zdCBiYXNlY2xpZW50ID0gcmVxdWlyZSgnLi9iYXNlY2xpZW50LmpzJyk7XG5jb25zdCBzZXJ2ZXJSdW50aW1lQ2xpZW50ID0gcmVxdWlyZSgnLi9zZXJ2ZXItcnVudGltZS1jbGllbnQuanMnKTtcbmNvbnN0IHNkayA9IHJlcXVpcmUoJy4vc2RrLmpzJyk7XG5jb25zdCBiYXNlID0gcmVxdWlyZSgnLi90cmFuc3BvcnRzL2Jhc2UuanMnKTtcbmNvbnN0IG9mZmxpbmUgPSByZXF1aXJlKCcuL3RyYW5zcG9ydHMvb2ZmbGluZS5qcycpO1xuY29uc3QgbXVsdGlwbGV4ZWQgPSByZXF1aXJlKCcuL3RyYW5zcG9ydHMvbXVsdGlwbGV4ZWQuanMnKTtcbmNvbnN0IHZlcnNpb24gPSByZXF1aXJlKCcuL3ZlcnNpb24uanMnKTtcbmNvbnN0IGludGVncmF0aW9uID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbi5qcycpO1xuY29uc3QgYXBwbHlTY29wZURhdGFUb0V2ZW50ID0gcmVxdWlyZSgnLi91dGlscy9hcHBseVNjb3BlRGF0YVRvRXZlbnQuanMnKTtcbmNvbnN0IHByZXBhcmVFdmVudCA9IHJlcXVpcmUoJy4vdXRpbHMvcHJlcGFyZUV2ZW50LmpzJyk7XG5jb25zdCBjaGVja2luID0gcmVxdWlyZSgnLi9jaGVja2luLmpzJyk7XG5jb25zdCBzcGFuID0gcmVxdWlyZSgnLi9zcGFuLmpzJyk7XG5jb25zdCBoYXNUcmFjaW5nRW5hYmxlZCA9IHJlcXVpcmUoJy4vdXRpbHMvaGFzVHJhY2luZ0VuYWJsZWQuanMnKTtcbmNvbnN0IGlzU2VudHJ5UmVxdWVzdFVybCA9IHJlcXVpcmUoJy4vdXRpbHMvaXNTZW50cnlSZXF1ZXN0VXJsLmpzJyk7XG5jb25zdCBoYW5kbGVDYWxsYmFja0Vycm9ycyA9IHJlcXVpcmUoJy4vdXRpbHMvaGFuZGxlQ2FsbGJhY2tFcnJvcnMuanMnKTtcbmNvbnN0IHBhcmFtZXRlcml6ZSA9IHJlcXVpcmUoJy4vdXRpbHMvcGFyYW1ldGVyaXplLmpzJyk7XG5jb25zdCBzcGFuVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL3NwYW5VdGlscy5qcycpO1xuY29uc3QgZ2V0Um9vdFNwYW4gPSByZXF1aXJlKCcuL3V0aWxzL2dldFJvb3RTcGFuLmpzJyk7XG5jb25zdCBzZGtNZXRhZGF0YSA9IHJlcXVpcmUoJy4vdXRpbHMvc2RrTWV0YWRhdGEuanMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzLmpzJyk7XG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL21ldGFkYXRhLmpzJyk7XG5jb25zdCByZXF1ZXN0ZGF0YSA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL3JlcXVlc3RkYXRhLmpzJyk7XG5jb25zdCBpbmJvdW5kZmlsdGVycyA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2luYm91bmRmaWx0ZXJzLmpzJyk7XG5jb25zdCBmdW5jdGlvbnRvc3RyaW5nID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvZnVuY3Rpb250b3N0cmluZy5qcycpO1xuY29uc3QgbGlua2VkZXJyb3JzID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvbGlua2VkZXJyb3JzLmpzJyk7XG5jb25zdCBpbmRleCA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2luZGV4LmpzJyk7XG5jb25zdCBleHBvcnRzJDIgPSByZXF1aXJlKCcuL21ldHJpY3MvZXhwb3J0cy5qcycpO1xuXG4vKiogQGRlcHJlY2F0ZWQgSW1wb3J0IHRoZSBpbnRlZ3JhdGlvbiBmdW5jdGlvbiBkaXJlY3RseSwgZS5nLiBgaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkIG9mIGBuZXcgSW50ZWdyYXRpb25zLkluYm91bmRGaWx0ZXIoKS4gKi9cbmNvbnN0IEludGVncmF0aW9ucyA9IGluZGV4O1xuXG5leHBvcnRzLmFkZFRyYWNpbmdFeHRlbnNpb25zID0gaHViZXh0ZW5zaW9ucy5hZGRUcmFjaW5nRXh0ZW5zaW9ucztcbmV4cG9ydHMuc3RhcnRJZGxlVHJhbnNhY3Rpb24gPSBodWJleHRlbnNpb25zLnN0YXJ0SWRsZVRyYW5zYWN0aW9uO1xuZXhwb3J0cy5JZGxlVHJhbnNhY3Rpb24gPSBpZGxldHJhbnNhY3Rpb24uSWRsZVRyYW5zYWN0aW9uO1xuZXhwb3J0cy5UUkFDSU5HX0RFRkFVTFRTID0gaWRsZXRyYW5zYWN0aW9uLlRSQUNJTkdfREVGQVVMVFM7XG5leHBvcnRzLlNwYW4gPSBzcGFuJDEuU3BhbjtcbmV4cG9ydHMuVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbi5UcmFuc2FjdGlvbjtcbmV4cG9ydHMuZXh0cmFjdFRyYWNlcGFyZW50RGF0YSA9IHV0aWxzLmV4dHJhY3RUcmFjZXBhcmVudERhdGE7XG5leHBvcnRzLmdldEFjdGl2ZVRyYW5zYWN0aW9uID0gdXRpbHMuZ2V0QWN0aXZlVHJhbnNhY3Rpb247XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1NwYW5TdGF0dXMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogKCkgPT4gc3BhbnN0YXR1cy5TcGFuU3RhdHVzXG59KTtcbmV4cG9ydHMuZ2V0U3BhblN0YXR1c0Zyb21IdHRwQ29kZSA9IHNwYW5zdGF0dXMuZ2V0U3BhblN0YXR1c0Zyb21IdHRwQ29kZTtcbmV4cG9ydHMuc2V0SHR0cFN0YXR1cyA9IHNwYW5zdGF0dXMuc2V0SHR0cFN0YXR1cztcbmV4cG9ydHMuc3BhblN0YXR1c2Zyb21IdHRwQ29kZSA9IHNwYW5zdGF0dXMuc3BhblN0YXR1c2Zyb21IdHRwQ29kZTtcbmV4cG9ydHMuY29udGludWVUcmFjZSA9IHRyYWNlLmNvbnRpbnVlVHJhY2U7XG5leHBvcnRzLmdldEFjdGl2ZVNwYW4gPSB0cmFjZS5nZXRBY3RpdmVTcGFuO1xuZXhwb3J0cy5zdGFydEFjdGl2ZVNwYW4gPSB0cmFjZS5zdGFydEFjdGl2ZVNwYW47XG5leHBvcnRzLnN0YXJ0SW5hY3RpdmVTcGFuID0gdHJhY2Uuc3RhcnRJbmFjdGl2ZVNwYW47XG5leHBvcnRzLnN0YXJ0U3BhbiA9IHRyYWNlLnN0YXJ0U3BhbjtcbmV4cG9ydHMuc3RhcnRTcGFuTWFudWFsID0gdHJhY2Uuc3RhcnRTcGFuTWFudWFsO1xuZXhwb3J0cy50cmFjZSA9IHRyYWNlLnRyYWNlO1xuZXhwb3J0cy5nZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbUNsaWVudCA9IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQ7XG5leHBvcnRzLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbiA9IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuO1xuZXhwb3J0cy5zZXRNZWFzdXJlbWVudCA9IG1lYXN1cmVtZW50LnNldE1lYXN1cmVtZW50O1xuZXhwb3J0cy5pc1ZhbGlkU2FtcGxlUmF0ZSA9IHNhbXBsaW5nLmlzVmFsaWRTYW1wbGVSYXRlO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRCA9IHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRDtcbmV4cG9ydHMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCA9IHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiA9IHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTjtcbmV4cG9ydHMuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURSA9IHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NBTVBMRV9SQVRFO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSA9IHNlbWFudGljQXR0cmlidXRlcy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRTtcbmV4cG9ydHMuY3JlYXRlRXZlbnRFbnZlbG9wZSA9IGVudmVsb3BlLmNyZWF0ZUV2ZW50RW52ZWxvcGU7XG5leHBvcnRzLmNyZWF0ZVNlc3Npb25FbnZlbG9wZSA9IGVudmVsb3BlLmNyZWF0ZVNlc3Npb25FbnZlbG9wZTtcbmV4cG9ydHMuYWRkQnJlYWRjcnVtYiA9IGV4cG9ydHMkMS5hZGRCcmVhZGNydW1iO1xuZXhwb3J0cy5jYXB0dXJlQ2hlY2tJbiA9IGV4cG9ydHMkMS5jYXB0dXJlQ2hlY2tJbjtcbmV4cG9ydHMuY2FwdHVyZUV2ZW50ID0gZXhwb3J0cyQxLmNhcHR1cmVFdmVudDtcbmV4cG9ydHMuY2FwdHVyZUV4Y2VwdGlvbiA9IGV4cG9ydHMkMS5jYXB0dXJlRXhjZXB0aW9uO1xuZXhwb3J0cy5jYXB0dXJlTWVzc2FnZSA9IGV4cG9ydHMkMS5jYXB0dXJlTWVzc2FnZTtcbmV4cG9ydHMuY2FwdHVyZVNlc3Npb24gPSBleHBvcnRzJDEuY2FwdHVyZVNlc3Npb247XG5leHBvcnRzLmNsb3NlID0gZXhwb3J0cyQxLmNsb3NlO1xuZXhwb3J0cy5jb25maWd1cmVTY29wZSA9IGV4cG9ydHMkMS5jb25maWd1cmVTY29wZTtcbmV4cG9ydHMuZW5kU2Vzc2lvbiA9IGV4cG9ydHMkMS5lbmRTZXNzaW9uO1xuZXhwb3J0cy5mbHVzaCA9IGV4cG9ydHMkMS5mbHVzaDtcbmV4cG9ydHMuZ2V0Q2xpZW50ID0gZXhwb3J0cyQxLmdldENsaWVudDtcbmV4cG9ydHMuZ2V0Q3VycmVudFNjb3BlID0gZXhwb3J0cyQxLmdldEN1cnJlbnRTY29wZTtcbmV4cG9ydHMuaXNJbml0aWFsaXplZCA9IGV4cG9ydHMkMS5pc0luaXRpYWxpemVkO1xuZXhwb3J0cy5sYXN0RXZlbnRJZCA9IGV4cG9ydHMkMS5sYXN0RXZlbnRJZDtcbmV4cG9ydHMuc2V0Q29udGV4dCA9IGV4cG9ydHMkMS5zZXRDb250ZXh0O1xuZXhwb3J0cy5zZXRFeHRyYSA9IGV4cG9ydHMkMS5zZXRFeHRyYTtcbmV4cG9ydHMuc2V0RXh0cmFzID0gZXhwb3J0cyQxLnNldEV4dHJhcztcbmV4cG9ydHMuc2V0VGFnID0gZXhwb3J0cyQxLnNldFRhZztcbmV4cG9ydHMuc2V0VGFncyA9IGV4cG9ydHMkMS5zZXRUYWdzO1xuZXhwb3J0cy5zZXRVc2VyID0gZXhwb3J0cyQxLnNldFVzZXI7XG5leHBvcnRzLnN0YXJ0U2Vzc2lvbiA9IGV4cG9ydHMkMS5zdGFydFNlc3Npb247XG5leHBvcnRzLnN0YXJ0VHJhbnNhY3Rpb24gPSBleHBvcnRzJDEuc3RhcnRUcmFuc2FjdGlvbjtcbmV4cG9ydHMud2l0aEFjdGl2ZVNwYW4gPSBleHBvcnRzJDEud2l0aEFjdGl2ZVNwYW47XG5leHBvcnRzLndpdGhJc29sYXRpb25TY29wZSA9IGV4cG9ydHMkMS53aXRoSXNvbGF0aW9uU2NvcGU7XG5leHBvcnRzLndpdGhNb25pdG9yID0gZXhwb3J0cyQxLndpdGhNb25pdG9yO1xuZXhwb3J0cy53aXRoU2NvcGUgPSBleHBvcnRzJDEud2l0aFNjb3BlO1xuZXhwb3J0cy5IdWIgPSBodWIuSHViO1xuZXhwb3J0cy5lbnN1cmVIdWJPbkNhcnJpZXIgPSBodWIuZW5zdXJlSHViT25DYXJyaWVyO1xuZXhwb3J0cy5nZXRDdXJyZW50SHViID0gaHViLmdldEN1cnJlbnRIdWI7XG5leHBvcnRzLmdldEh1YkZyb21DYXJyaWVyID0gaHViLmdldEh1YkZyb21DYXJyaWVyO1xuZXhwb3J0cy5nZXRJc29sYXRpb25TY29wZSA9IGh1Yi5nZXRJc29sYXRpb25TY29wZTtcbmV4cG9ydHMuZ2V0TWFpbkNhcnJpZXIgPSBodWIuZ2V0TWFpbkNhcnJpZXI7XG5leHBvcnRzLm1ha2VNYWluID0gaHViLm1ha2VNYWluO1xuZXhwb3J0cy5ydW5XaXRoQXN5bmNDb250ZXh0ID0gaHViLnJ1bldpdGhBc3luY0NvbnRleHQ7XG5leHBvcnRzLnNldEFzeW5jQ29udGV4dFN0cmF0ZWd5ID0gaHViLnNldEFzeW5jQ29udGV4dFN0cmF0ZWd5O1xuZXhwb3J0cy5zZXRIdWJPbkNhcnJpZXIgPSBodWIuc2V0SHViT25DYXJyaWVyO1xuZXhwb3J0cy5jbG9zZVNlc3Npb24gPSBzZXNzaW9uLmNsb3NlU2Vzc2lvbjtcbmV4cG9ydHMubWFrZVNlc3Npb24gPSBzZXNzaW9uLm1ha2VTZXNzaW9uO1xuZXhwb3J0cy51cGRhdGVTZXNzaW9uID0gc2Vzc2lvbi51cGRhdGVTZXNzaW9uO1xuZXhwb3J0cy5TZXNzaW9uRmx1c2hlciA9IHNlc3Npb25mbHVzaGVyLlNlc3Npb25GbHVzaGVyO1xuZXhwb3J0cy5TY29wZSA9IHNjb3BlLlNjb3BlO1xuZXhwb3J0cy5nZXRHbG9iYWxTY29wZSA9IHNjb3BlLmdldEdsb2JhbFNjb3BlO1xuZXhwb3J0cy5zZXRHbG9iYWxTY29wZSA9IHNjb3BlLnNldEdsb2JhbFNjb3BlO1xuZXhwb3J0cy5hZGRHbG9iYWxFdmVudFByb2Nlc3NvciA9IGV2ZW50UHJvY2Vzc29ycy5hZGRHbG9iYWxFdmVudFByb2Nlc3NvcjtcbmV4cG9ydHMubm90aWZ5RXZlbnRQcm9jZXNzb3JzID0gZXZlbnRQcm9jZXNzb3JzLm5vdGlmeUV2ZW50UHJvY2Vzc29ycztcbmV4cG9ydHMuZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCA9IGFwaS5nZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoO1xuZXhwb3J0cy5nZXRSZXBvcnREaWFsb2dFbmRwb2ludCA9IGFwaS5nZXRSZXBvcnREaWFsb2dFbmRwb2ludDtcbmV4cG9ydHMuQmFzZUNsaWVudCA9IGJhc2VjbGllbnQuQmFzZUNsaWVudDtcbmV4cG9ydHMuYWRkRXZlbnRQcm9jZXNzb3IgPSBiYXNlY2xpZW50LmFkZEV2ZW50UHJvY2Vzc29yO1xuZXhwb3J0cy5TZXJ2ZXJSdW50aW1lQ2xpZW50ID0gc2VydmVyUnVudGltZUNsaWVudC5TZXJ2ZXJSdW50aW1lQ2xpZW50O1xuZXhwb3J0cy5pbml0QW5kQmluZCA9IHNkay5pbml0QW5kQmluZDtcbmV4cG9ydHMuc2V0Q3VycmVudENsaWVudCA9IHNkay5zZXRDdXJyZW50Q2xpZW50O1xuZXhwb3J0cy5jcmVhdGVUcmFuc3BvcnQgPSBiYXNlLmNyZWF0ZVRyYW5zcG9ydDtcbmV4cG9ydHMubWFrZU9mZmxpbmVUcmFuc3BvcnQgPSBvZmZsaW5lLm1ha2VPZmZsaW5lVHJhbnNwb3J0O1xuZXhwb3J0cy5tYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQgPSBtdWx0aXBsZXhlZC5tYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQ7XG5leHBvcnRzLlNES19WRVJTSU9OID0gdmVyc2lvbi5TREtfVkVSU0lPTjtcbmV4cG9ydHMuYWRkSW50ZWdyYXRpb24gPSBpbnRlZ3JhdGlvbi5hZGRJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzID0gaW50ZWdyYXRpb24uY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzO1xuZXhwb3J0cy5kZWZpbmVJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9uLmRlZmluZUludGVncmF0aW9uO1xuZXhwb3J0cy5nZXRJbnRlZ3JhdGlvbnNUb1NldHVwID0gaW50ZWdyYXRpb24uZ2V0SW50ZWdyYXRpb25zVG9TZXR1cDtcbmV4cG9ydHMuYXBwbHlTY29wZURhdGFUb0V2ZW50ID0gYXBwbHlTY29wZURhdGFUb0V2ZW50LmFwcGx5U2NvcGVEYXRhVG9FdmVudDtcbmV4cG9ydHMubWVyZ2VTY29wZURhdGEgPSBhcHBseVNjb3BlRGF0YVRvRXZlbnQubWVyZ2VTY29wZURhdGE7XG5leHBvcnRzLnByZXBhcmVFdmVudCA9IHByZXBhcmVFdmVudC5wcmVwYXJlRXZlbnQ7XG5leHBvcnRzLmNyZWF0ZUNoZWNrSW5FbnZlbG9wZSA9IGNoZWNraW4uY3JlYXRlQ2hlY2tJbkVudmVsb3BlO1xuZXhwb3J0cy5jcmVhdGVTcGFuRW52ZWxvcGUgPSBzcGFuLmNyZWF0ZVNwYW5FbnZlbG9wZTtcbmV4cG9ydHMuaGFzVHJhY2luZ0VuYWJsZWQgPSBoYXNUcmFjaW5nRW5hYmxlZC5oYXNUcmFjaW5nRW5hYmxlZDtcbmV4cG9ydHMuaXNTZW50cnlSZXF1ZXN0VXJsID0gaXNTZW50cnlSZXF1ZXN0VXJsLmlzU2VudHJ5UmVxdWVzdFVybDtcbmV4cG9ydHMuaGFuZGxlQ2FsbGJhY2tFcnJvcnMgPSBoYW5kbGVDYWxsYmFja0Vycm9ycy5oYW5kbGVDYWxsYmFja0Vycm9ycztcbmV4cG9ydHMucGFyYW1ldGVyaXplID0gcGFyYW1ldGVyaXplLnBhcmFtZXRlcml6ZTtcbmV4cG9ydHMuc3BhbklzU2FtcGxlZCA9IHNwYW5VdGlscy5zcGFuSXNTYW1wbGVkO1xuZXhwb3J0cy5zcGFuVG9KU09OID0gc3BhblV0aWxzLnNwYW5Ub0pTT047XG5leHBvcnRzLnNwYW5Ub1RyYWNlQ29udGV4dCA9IHNwYW5VdGlscy5zcGFuVG9UcmFjZUNvbnRleHQ7XG5leHBvcnRzLnNwYW5Ub1RyYWNlSGVhZGVyID0gc3BhblV0aWxzLnNwYW5Ub1RyYWNlSGVhZGVyO1xuZXhwb3J0cy5nZXRSb290U3BhbiA9IGdldFJvb3RTcGFuLmdldFJvb3RTcGFuO1xuZXhwb3J0cy5hcHBseVNka01ldGFkYXRhID0gc2RrTWV0YWRhdGEuYXBwbHlTZGtNZXRhZGF0YTtcbmV4cG9ydHMuREVGQVVMVF9FTlZJUk9OTUVOVCA9IGNvbnN0YW50cy5ERUZBVUxUX0VOVklST05NRU5UO1xuZXhwb3J0cy5Nb2R1bGVNZXRhZGF0YSA9IG1ldGFkYXRhLk1vZHVsZU1ldGFkYXRhO1xuZXhwb3J0cy5tb2R1bGVNZXRhZGF0YUludGVncmF0aW9uID0gbWV0YWRhdGEubW9kdWxlTWV0YWRhdGFJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuUmVxdWVzdERhdGEgPSByZXF1ZXN0ZGF0YS5SZXF1ZXN0RGF0YTtcbmV4cG9ydHMucmVxdWVzdERhdGFJbnRlZ3JhdGlvbiA9IHJlcXVlc3RkYXRhLnJlcXVlc3REYXRhSW50ZWdyYXRpb247XG5leHBvcnRzLkluYm91bmRGaWx0ZXJzID0gaW5ib3VuZGZpbHRlcnMuSW5ib3VuZEZpbHRlcnM7XG5leHBvcnRzLmluYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24gPSBpbmJvdW5kZmlsdGVycy5pbmJvdW5kRmlsdGVyc0ludGVncmF0aW9uO1xuZXhwb3J0cy5GdW5jdGlvblRvU3RyaW5nID0gZnVuY3Rpb250b3N0cmluZy5GdW5jdGlvblRvU3RyaW5nO1xuZXhwb3J0cy5mdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24gPSBmdW5jdGlvbnRvc3RyaW5nLmZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuTGlua2VkRXJyb3JzID0gbGlua2VkZXJyb3JzLkxpbmtlZEVycm9ycztcbmV4cG9ydHMubGlua2VkRXJyb3JzSW50ZWdyYXRpb24gPSBsaW5rZWRlcnJvcnMubGlua2VkRXJyb3JzSW50ZWdyYXRpb247XG5leHBvcnRzLm1ldHJpY3MgPSBleHBvcnRzJDIubWV0cmljcztcbmV4cG9ydHMuSW50ZWdyYXRpb25zID0gSW50ZWdyYXRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuXG4gKlxuICogQVRURU5USU9OOiBUaGlzIGNvbnN0YW50IG11c3QgbmV2ZXIgY3Jvc3MgcGFja2FnZSBib3VuZGFyaWVzIChpLmUuIGJlIGV4cG9ydGVkKSB0byBndWFyYW50ZWUgdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgdHJlZSBzaGFraW5nLlxuICovXG5jb25zdCBERUJVR19CVUlMRCA9ICh0eXBlb2YgX19TRU5UUllfREVCVUdfXyA9PT0gJ3VuZGVmaW5lZCcgfHwgX19TRU5UUllfREVCVUdfXyk7XG5cbmV4cG9ydHMuREVCVUdfQlVJTEQgPSBERUJVR19CVUlMRDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWJ1aWxkLmpzLm1hcFxuIiwKICAgICJ2YXIge1xuIF9vcHRpb25hbENoYWluXG59ID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIENoZWNrIGlmIFNlbnRyeSBhdXRvLWluc3RydW1lbnRhdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gKlxuICogQHBhcmFtIGdldEN1cnJlbnRIdWIgQSBtZXRob2QgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgaHViXG4gKiBAcmV0dXJucyBib29sZWFuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZnVuY3Rpb24gc2hvdWxkRGlzYWJsZUF1dG9JbnN0cnVtZW50YXRpb24oZ2V0Q3VycmVudEh1Yikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgY2xpZW50T3B0aW9ucyA9IF9vcHRpb25hbENoYWluKFtnZXRDdXJyZW50SHViLCAnY2FsbCcsIF8gPT4gXygpLCAnYWNjZXNzJywgXzIgPT4gXzIuZ2V0Q2xpZW50LCAnY2FsbCcsIF8zID0+IF8zKCksICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80LmdldE9wdGlvbnMsICdjYWxsJywgXzUgPT4gXzUoKV0pO1xuICBjb25zdCBpbnN0cnVtZW50ZXIgPSBfb3B0aW9uYWxDaGFpbihbY2xpZW50T3B0aW9ucywgJ29wdGlvbmFsQWNjZXNzJywgXzYgPT4gXzYuaW5zdHJ1bWVudGVyXSkgfHwgJ3NlbnRyeSc7XG5cbiAgcmV0dXJuIGluc3RydW1lbnRlciAhPT0gJ3NlbnRyeSc7XG59XG5cbmV4cG9ydHMuc2hvdWxkRGlzYWJsZUF1dG9JbnN0cnVtZW50YXRpb24gPSBzaG91bGREaXNhYmxlQXV0b0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGUtdXRpbHMuanMubWFwXG4iLAogICAgInZhciB7XG4gIF9vcHRpb25hbENoYWluXG59ID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi8uLi9jb21tb24vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IG5vZGVVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvbm9kZS11dGlscy5qcycpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuLyoqXG4gKiBFeHByZXNzIGludGVncmF0aW9uXG4gKlxuICogUHJvdmlkZXMgYW4gcmVxdWVzdCBhbmQgZXJyb3IgaGFuZGxlciBmb3IgRXhwcmVzcyBmcmFtZXdvcmsgYXMgd2VsbCBhcyB0cmFjaW5nIGNhcGFiaWxpdGllc1xuICovXG5jbGFzcyBFeHByZXNzICB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHN0YXRpYyBfX2luaXRTdGF0aWMoKSB7dGhpcy5pZCA9ICdFeHByZXNzJzt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG4gIC8qKlxuICAgKiBFeHByZXNzIEFwcCBpbnN0YW5jZVxuICAgKi9cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPSBFeHByZXNzLmlkO1xuICAgIHRoaXMuX3JvdXRlciA9IG9wdGlvbnMucm91dGVyIHx8IG9wdGlvbnMuYXBwO1xuICAgIHRoaXMuX21ldGhvZHMgPSAoQXJyYXkuaXNBcnJheShvcHRpb25zLm1ldGhvZHMpID8gb3B0aW9ucy5tZXRob2RzIDogW10pLmNvbmNhdCgndXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgc2V0dXBPbmNlKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICBpZiAoIXRoaXMuX3JvdXRlcikge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ0V4cHJlc3NJbnRlZ3JhdGlvbiBpcyBtaXNzaW5nIGFuIEV4cHJlc3MgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZVV0aWxzLnNob3VsZERpc2FibGVBdXRvSW5zdHJ1bWVudGF0aW9uKGdldEN1cnJlbnRIdWIpKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ0V4cHJlc3MgSW50ZWdyYXRpb24gaXMgc2tpcHBlZCBiZWNhdXNlIG9mIGluc3RydW1lbnRlciBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluc3RydW1lbnRNaWRkbGV3YXJlcyh0aGlzLl9yb3V0ZXIsIHRoaXMuX21ldGhvZHMpO1xuICAgIGluc3RydW1lbnRSb3V0ZXIodGhpcy5fcm91dGVyICk7XG4gIH1cbn1FeHByZXNzLl9faW5pdFN0YXRpYygpO1xuXG4vKipcbiAqIFdyYXBzIG9yaWdpbmFsIG1pZGRsZXdhcmUgZnVuY3Rpb24gaW4gYSB0cmFjaW5nIGNhbGwsIHdoaWNoIHN0b3JlcyB0aGUgaW5mbyBhYm91dCB0aGUgY2FsbCBhcyBhIHNwYW4sXG4gKiBhbmQgZmluaXNoZXMgaXQgb25jZSB0aGUgbWlkZGxld2FyZSBpcyBkb25lIGludm9raW5nLlxuICpcbiAqIEV4cHJlc3MgbWlkZGxld2FyZXMgaGF2ZSAzIHZhcmlvdXMgZm9ybXMsIHRodXMgd2UgaGF2ZSB0byB0YWtlIGNhcmUgb2YgYWxsIG9mIHRoZW06XG4gKiAvLyBzeW5jXG4gKiBhcHAudXNlKGZ1bmN0aW9uIChyZXEsIHJlcykgeyAuLi4gfSlcbiAqIC8vIGFzeW5jXG4gKiBhcHAudXNlKGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkgeyAuLi4gfSlcbiAqIC8vIGVycm9yIGhhbmRsZXJcbiAqIGFwcC51c2UoZnVuY3Rpb24gKGVyciwgcmVxLCByZXMsIG5leHQpIHsgLi4uIH0pXG4gKlxuICogVGhleSBhbGwgaW50ZXJuYWxseSBkZWxlZ2F0ZSB0byB0aGUgYHJvdXRlclttZXRob2RdYCBvZiB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiB3cmFwKGZuLCBtZXRob2QpIHtcbiAgY29uc3QgYXJpdHkgPSBmbi5sZW5ndGg7XG5cbiAgc3dpdGNoIChhcml0eSkge1xuICAgIGNhc2UgMjoge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICggcmVxLCByZXMpIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSByZXMuX19zZW50cnlfdHJhbnNhY3Rpb247XG4gICAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIGNvbnN0IHNwYW4gPSB0cmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmbi5uYW1lLFxuICAgICAgICAgICAgb3A6IGBtaWRkbGV3YXJlLmV4cHJlc3MuJHttZXRob2R9YCxcbiAgICAgICAgICAgIG9yaWdpbjogJ2F1dG8ubWlkZGxld2FyZS5leHByZXNzJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXMub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCByZXEsIHJlcyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIDM6IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoXG5cbiAgICAgICAgcmVxLFxuICAgICAgICByZXMsXG4gICAgICAgIG5leHQsXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSByZXMuX19zZW50cnlfdHJhbnNhY3Rpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBjb25zdCBzcGFuID0gX29wdGlvbmFsQ2hhaW4oW3RyYW5zYWN0aW9uLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5zdGFydENoaWxkLCAnY2FsbCcsIF8zID0+IF8zKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm4ubmFtZSxcbiAgICAgICAgICBvcDogYG1pZGRsZXdhcmUuZXhwcmVzcy4ke21ldGhvZH1gLFxuICAgICAgICAgIG9yaWdpbjogJ2F1dG8ubWlkZGxld2FyZS5leHByZXNzJyxcbiAgICAgICAgfSldKTtcbiAgICAgICAgZm4uY2FsbCh0aGlzLCByZXEsIHJlcywgZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3NwYW4sICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80LmVuZCwgJ2NhbGwnLCBfNSA9PiBfNSgpXSk7XG4gICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgNDoge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChcblxuICAgICAgICBlcnIsXG4gICAgICAgIHJlcSxcbiAgICAgICAgcmVzLFxuICAgICAgICBuZXh0LFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcmVzLl9fc2VudHJ5X3RyYW5zYWN0aW9uO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgY29uc3Qgc3BhbiA9IF9vcHRpb25hbENoYWluKFt0cmFuc2FjdGlvbiwgJ29wdGlvbmFsQWNjZXNzJywgXzYgPT4gXzYuc3RhcnRDaGlsZCwgJ2NhbGwnLCBfNyA9PiBfNyh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGZuLm5hbWUsXG4gICAgICAgICAgb3A6IGBtaWRkbGV3YXJlLmV4cHJlc3MuJHttZXRob2R9YCxcbiAgICAgICAgICBvcmlnaW46ICdhdXRvLm1pZGRsZXdhcmUuZXhwcmVzcycsXG4gICAgICAgIH0pXSk7XG4gICAgICAgIGZuLmNhbGwodGhpcywgZXJyLCByZXEsIHJlcywgZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3NwYW4sICdvcHRpb25hbEFjY2VzcycsIF84ID0+IF84LmVuZCwgJ2NhbGwnLCBfOSA9PiBfOSgpXSk7XG4gICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwcmVzcyBtaWRkbGV3YXJlIHRha2VzIDItNCBhcmd1bWVudHMuIEdvdDogJHthcml0eX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbGwgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIG9yaWdpbmFsIGBhcHBgIG9yIGByb3V0ZXJgIG1ldGhvZCwgZWcuIGBhcHAudXNlYCBvciBgcm91dGVyLnVzZWBcbiAqIGFuZCB3cmFwcyBldmVyeSBmdW5jdGlvbiwgYXMgd2VsbCBhcyBhcnJheSBvZiBmdW5jdGlvbnMgd2l0aCBhIGNhbGwgdG8gb3VyIGB3cmFwYCBtZXRob2QuXG4gKiBXZSBoYXZlIHRvIHRha2UgY2FyZSBvZiB0aGUgYXJyYXlzIGFzIHdlbGwgYXMgaXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgYXJndW1lbnRzLFxuICogYXMgYGFwcC51c2VgIGNhbiBhY2NlcHQgbWlkZGxld2FyZXMgaW4gZmV3IHZhcmlvdXMgZm9ybXMuXG4gKlxuICogYXBwLnVzZShbPHBhdGg+XSwgPGZuPilcbiAqIGFwcC51c2UoWzxwYXRoPl0sIDxmbj4sIC4uLjxmbj4pXG4gKiBhcHAudXNlKFs8cGF0aD5dLCAuLi48Zm4+W10pXG4gKi9cbmZ1bmN0aW9uIHdyYXBNaWRkbGV3YXJlQXJncyhhcmdzLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHdyYXAoYXJnLCBtZXRob2QpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgIHJldHVybiBhcmcubWFwKChhKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiB3cmFwKGEsIG1ldGhvZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQYXRjaGVzIG9yaWdpbmFsIHJvdXRlciB0byB1dGlsaXplIG91ciB0cmFjaW5nIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZnVuY3Rpb24gcGF0Y2hNaWRkbGV3YXJlKHJvdXRlciwgbWV0aG9kKSB7XG4gIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSByb3V0ZXJbbWV0aG9kXTtcblxuICByb3V0ZXJbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsQ2FsbGJhY2suY2FsbCh0aGlzLCAuLi53cmFwTWlkZGxld2FyZUFyZ3MoYXJncywgbWV0aG9kKSk7XG4gIH07XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuLyoqXG4gKiBQYXRjaGVzIG9yaWdpbmFsIHJvdXRlciBtZXRob2RzXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRNaWRkbGV3YXJlcyhyb3V0ZXIsIG1ldGhvZHMgPSBbXSkge1xuICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCkgPT4gcGF0Y2hNaWRkbGV3YXJlKHJvdXRlciwgbWV0aG9kKSk7XG59XG5cbi8qKlxuICogUGF0Y2hlcyB0aGUgcHJvdG90eXBlIG9mIEV4cHJlc3MuUm91dGVyIHRvIGFjY3VtdWxhdGUgdGhlIHJlc29sdmVkIHJvdXRlXG4gKiBpZiBhIGxheWVyIGluc3RhbmNlJ3MgYG1hdGNoYCBmdW5jdGlvbiB3YXMgY2FsbGVkIGFuZCBpdCByZXR1cm5lZCBhIHN1Y2Nlc3NmdWwgbWF0Y2guXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhwcmVzc2pzL2V4cHJlc3MvYmxvYi9tYXN0ZXIvbGliL3JvdXRlci9pbmRleC5qc1xuICpcbiAqIEBwYXJhbSBhcHBPclJvdXRlciB0aGUgcm91dGVyIGluc3RhbmNlIHdoaWNoIGNhbiBlaXRoZXIgYmUgYW4gYXBwIChpLmUuIHRvcC1sZXZlbCkgb3IgYSAobmVzdGVkKSByb3V0ZXIuXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRSb3V0ZXIoYXBwT3JSb3V0ZXIpIHtcbiAgLy8gVGhpcyBpcyBob3cgd2UgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gYXBwIGFuZCByb3V0ZXJzXG4gIGNvbnN0IGlzQXBwID0gJ3NldHRpbmdzJyBpbiBhcHBPclJvdXRlcjtcblxuICAvLyBJbiBjYXNlIHRoZSBhcHAncyB0b3AtbGV2ZWwgcm91dGVyIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldCwgd2UgaGF2ZSB0byBkbyBpdCBub3dcbiAgaWYgKGlzQXBwICYmIGFwcE9yUm91dGVyLl9yb3V0ZXIgPT09IHVuZGVmaW5lZCAmJiBhcHBPclJvdXRlci5sYXp5cm91dGVyKSB7XG4gICAgYXBwT3JSb3V0ZXIubGF6eXJvdXRlcigpO1xuICB9XG5cbiAgY29uc3Qgcm91dGVyID0gaXNBcHAgPyBhcHBPclJvdXRlci5fcm91dGVyIDogYXBwT3JSb3V0ZXI7XG5cbiAgaWYgKCFyb3V0ZXIpIHtcbiAgICAvKlxuICAgIElmIHdlIGVuZCB1cCBoZXJlLCB0aGlzIG1lYW5zIGxpa2VseSB0aGF0IHRoaXMgaW50ZWdyYXRpb24gaXMgdXNlZCB3aXRoIEV4cHJlc3MgMyBvciBFeHByZXNzIDUuXG4gICAgRm9yIG5vdywgd2UgZG9uJ3Qgc3VwcG9ydCB0aGVzZSB2ZXJzaW9ucyAoMyBpcyB2ZXJ5IG9sZCBhbmQgNSBpcyBzdGlsbCBpbiBiZXRhKS4gVG8gc3VwcG9ydCBFeHByZXNzIDUsXG4gICAgd2UnZCBuZWVkIHRvIG1ha2UgbW9yZSBjaGFuZ2VzIHRvIHRoZSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiBiZWNhdXNlIHRoZSByb3V0ZXIgaXMgbm8gbG9uZ2VyIHBhcnQgb2ZcbiAgICB0aGUgRXhwcmVzcyBjb3JlIHBhY2thZ2UgYnV0IG1haW50YWluZWQgaW4gaXRzIG93biBwYWNrYWdlLiBUaGUgbmV3IHJvdXRlciBoYXMgZGlmZmVyZW50IGZ1bmN0aW9uXG4gICAgc2lnbmF0dXJlcyBhbmQgd29ya3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHksIGRlbWFuZGluZyBtb3JlIGNoYW5nZXMgdGhhbiBqdXN0IHRha2luZyB0aGUgcm91dGVyIGZyb21cbiAgICBgYXBwLnJvdXRlcmAgaW5zdGVhZCBvZiBgYXBwLl9yb3V0ZXJgLlxuICAgIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BpbGxhcmpzL3JvdXRlclxuXG4gICAgVE9ETzogUHJvcGVyIEV4cHJlc3MgNSBzdXBwb3J0XG4gICAgKi9cbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5kZWJ1ZygnQ2Fubm90IGluc3RydW1lbnQgcm91dGVyIGZvciBVUkwgUGFyYW1ldGVyaXphdGlvbiAoZGlkIG5vdCBmaW5kIGEgdmFsaWQgcm91dGVyKS4nKTtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5kZWJ1ZygnUm91dGluZyBpbnN0cnVtZW50YXRpb24gaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGluIEV4cHJlc3MgNC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByb3V0ZXJQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihyb3V0ZXIpIDtcblxuICBjb25zdCBvcmlnaW5hbFByb2Nlc3NQYXJhbXMgPSByb3V0ZXJQcm90by5wcm9jZXNzX3BhcmFtcztcbiAgcm91dGVyUHJvdG8ucHJvY2Vzc19wYXJhbXMgPSBmdW5jdGlvbiBwcm9jZXNzX3BhcmFtcyhcbiAgICBsYXllcixcbiAgICBjYWxsZWQsXG4gICAgcmVxLFxuICAgIHJlcyxcbiAgICBkb25lLFxuICApIHtcbiAgICAvLyBCYXNlIGNhc2U6IFdlJ3JlIGluIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBVUkwgKHRodXMgd2Ugc3RhcnQgd2l0aCB0aGUgcm9vdCAnLycpXG4gICAgaWYgKCFyZXEuX3JlY29uc3RydWN0ZWRSb3V0ZSkge1xuICAgICAgcmVxLl9yZWNvbnN0cnVjdGVkUm91dGUgPSAnJztcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbGF5ZXIncyBwYXJ0aWFsIHJvdXRlIGhhcyBwYXJhbXMsIGlzIGEgcmVnZXggb3IgYW4gYXJyYXksIHRoZSByb3V0ZSBpcyBzdG9yZWQgaW4gbGF5ZXIucm91dGUuXG4gICAgY29uc3QgeyBsYXllclJvdXRlUGF0aCwgaXNSZWdleCwgaXNBcnJheSwgbnVtRXh0cmFTZWdtZW50cyB9ID0gZ2V0TGF5ZXJSb3V0ZVBhdGhJbmZvKGxheWVyKTtcblxuICAgIGlmIChsYXllclJvdXRlUGF0aCB8fCBpc1JlZ2V4IHx8IGlzQXJyYXkpIHtcbiAgICAgIHJlcS5faGFzUGFyYW1ldGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCB0aGUgaGFyZGNvZGVkIHBhdGggKGkuZS4gYSBwYXJ0aWFsIHJvdXRlIHdpdGhvdXQgcGFyYW1zKSBpcyBzdG9yZWQgaW4gbGF5ZXIucGF0aFxuICAgIGxldCBwYXJ0aWFsUm91dGU7XG5cbiAgICBpZiAobGF5ZXJSb3V0ZVBhdGgpIHtcbiAgICAgIHBhcnRpYWxSb3V0ZSA9IGxheWVyUm91dGVQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKipcbiAgICAgICAqIHByZXZlbnQgZHVwbGljYXRlIHNlZ21lbnQgaW4gX3JlY29uc3RydWN0ZWRSb3V0ZSBwYXJhbSBpZiByb3V0ZXIgbWF0Y2ggbXVsdGlwbGUgcm91dGVzIGJlZm9yZSBmaW5hbCBwYXRoXG4gICAgICAgKiBleGFtcGxlOlxuICAgICAgICogb3JpZ2luYWwgdXJsOiAvYXBpL3YxLzEyMzRcbiAgICAgICAqIHByZXZlbnQ6IC9hcGkvYXBpL3YxLzp1c2VySWRcbiAgICAgICAqIHJvdXRlciBzdHJ1Y3R1cmVcbiAgICAgICAqIC9hcGkgLT4gbWlkZGxld2FyZVxuICAgICAgICogL2FwaS92MSAtPiBtaWRkbGV3YXJlXG4gICAgICAgKiAvMTIzNCAtPiBlbmRwb2ludCB3aXRoIHBhcmFtIDp1c2VySWRcbiAgICAgICAqIGZpbmFsIF9yZWNvbnN0cnVjdGVkUm91dGUgaXMgL2FwaS92MS86dXNlcklkXG4gICAgICAgKi9cbiAgICAgIHBhcnRpYWxSb3V0ZSA9IHByZXZlbnREdXBsaWNhdGVTZWdtZW50cyhyZXEub3JpZ2luYWxVcmwsIHJlcS5fcmVjb25zdHJ1Y3RlZFJvdXRlLCBsYXllci5wYXRoKSB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIHBhcnRpYWwgcm91dGUgc28gdGhhdCBpdCBkb2Vzbid0IGNvbnRhaW4gbGVhZGluZyBvciB0cmFpbGluZyBzbGFzaGVzXG4gICAgLy8gYW5kIGV4Y2x1ZGUgZW1wdHkgb3IgJyonIHdpbGRjYXJkIHJvdXRlcy5cbiAgICAvLyBUaGUgZXhjbHVzaW9uIG9mICcqJyByb3V0ZXMgaXMgb3VyIGJlc3QgZWZmb3J0IHRvIG5vdCBcInBvbGx1dGVcIiB0aGUgdHJhbnNhY3Rpb24gbmFtZVxuICAgIC8vIHdpdGggaW50ZXJpbSBoYW5kbGVycyAoZS5nLiBvbmVzIHRoYXQgY2hlY2sgYXV0aGVudGljYXRpb24gb3IgZG8gb3RoZXIgbWlkZGxld2FyZSBzdHVmZikuXG4gICAgLy8gV2Ugd2FudCB0byBlbmQgdXAgd2l0aCB0aGUgcGFyYW1ldGVyaXplZCBVUkwgb2YgdGhlIGluY29taW5nIHJlcXVlc3Qgd2l0aG91dCBhbnkgZXh0cmFuZW91cyBwYXRoIHNlZ21lbnRzLlxuICAgIGNvbnN0IGZpbmFsUGFydGlhbFJvdXRlID0gcGFydGlhbFJvdXRlXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLmZpbHRlcihzZWdtZW50ID0+IHNlZ21lbnQubGVuZ3RoID4gMCAmJiAoaXNSZWdleCB8fCBpc0FycmF5IHx8ICFzZWdtZW50LmluY2x1ZGVzKCcqJykpKVxuICAgICAgLmpvaW4oJy8nKTtcblxuICAgIC8vIElmIHdlIGZvdW5kIGEgdmFsaWQgcGFydGlhbCBVUkwsIHdlIGFwcGVuZCBpdCB0byB0aGUgcmVjb25zdHJ1Y3RlZCByb3V0ZVxuICAgIGlmIChmaW5hbFBhcnRpYWxSb3V0ZSAmJiBmaW5hbFBhcnRpYWxSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJZiB0aGUgcGFydGlhbCByb3V0ZSBpcyBmcm9tIGEgcmVnZXggcm91dGUsIHdlIGFwcGVuZCBhICcvJyB0byBjbG9zZSB0aGUgcmVnZXhcbiAgICAgIHJlcS5fcmVjb25zdHJ1Y3RlZFJvdXRlICs9IGAvJHtmaW5hbFBhcnRpYWxSb3V0ZX0ke2lzUmVnZXggPyAnLycgOiAnJ31gO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBjaGVjayBpZiB3ZSBhcmUgaW4gdGhlIFwibGFzdFwiIHBhcnQgb2YgdGhlIHJvdXRlLiBXZSBkZXRlcm1pbmUgdGhpcyBieSBjb21wYXJpbmcgdGhlXG4gICAgLy8gbnVtYmVyIG9mIFVSTCBzZWdtZW50cyBmcm9tIHRoZSBvcmlnaW5hbCBVUkwgdG8gdGhhdCBvZiBvdXIgcmVjb25zdHJ1Y3RlZCBwYXJhbWV0ZXJpemVkIFVSTC5cbiAgICAvLyBJZiB3ZSd2ZSByZWFjaGVkIG91ciBmaW5hbCBkZXN0aW5hdGlvbiwgd2UgdXBkYXRlIHRoZSB0cmFuc2FjdGlvbiBuYW1lLlxuICAgIGNvbnN0IHVybExlbmd0aCA9IHV0aWxzLmdldE51bWJlck9mVXJsU2VnbWVudHModXRpbHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50KHJlcS5vcmlnaW5hbFVybCB8fCAnJykpICsgbnVtRXh0cmFTZWdtZW50cztcbiAgICBjb25zdCByb3V0ZUxlbmd0aCA9IHV0aWxzLmdldE51bWJlck9mVXJsU2VnbWVudHMocmVxLl9yZWNvbnN0cnVjdGVkUm91dGUpO1xuXG4gICAgaWYgKHVybExlbmd0aCA9PT0gcm91dGVMZW5ndGgpIHtcbiAgICAgIGlmICghcmVxLl9oYXNQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmIChyZXEuX3JlY29uc3RydWN0ZWRSb3V0ZSAhPT0gcmVxLm9yaWdpbmFsVXJsKSB7XG4gICAgICAgICAgcmVxLl9yZWNvbnN0cnVjdGVkUm91dGUgPSByZXEub3JpZ2luYWxVcmwgPyB1dGlscy5zdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQocmVxLm9yaWdpbmFsVXJsKSA6IHJlcS5vcmlnaW5hbFVybDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHJlcy5fX3NlbnRyeV90cmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAodHJhbnNhY3Rpb24gJiYgY29yZS5zcGFuVG9KU09OKHRyYW5zYWN0aW9uKS5kYXRhKSB8fCB7fTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbiAmJiBhdHRyaWJ1dGVzW2NvcmUuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdICE9PSAnY3VzdG9tJykge1xuICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBVUkwgaXMgJy8nIG9yIGVtcHR5LCB0aGUgcmVjb25zdHJ1Y3RlZCByb3V0ZSB3aWxsIGJlIGVtcHR5LlxuICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIGZhbGwgYmFjayB0byBzZXR0aW5nIHRoZSBmaW5hbCByb3V0ZSB0byAnLycgaW4gdGhpcyBjYXNlLlxuICAgICAgICBjb25zdCBmaW5hbFJvdXRlID0gcmVxLl9yZWNvbnN0cnVjdGVkUm91dGUgfHwgJy8nO1xuXG4gICAgICAgIGNvbnN0IFtuYW1lLCBzb3VyY2VdID0gdXRpbHMuZXh0cmFjdFBhdGhGb3JUcmFuc2FjdGlvbihyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlLCBjdXN0b21Sb3V0ZTogZmluYWxSb3V0ZSB9KTtcbiAgICAgICAgdHJhbnNhY3Rpb24udXBkYXRlTmFtZShuYW1lKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0QXR0cmlidXRlKGNvcmUuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsUHJvY2Vzc1BhcmFtcy5jYWxsKHRoaXMsIGxheWVyLCBjYWxsZWQsIHJlcSwgcmVzLCBkb25lKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWNyZWF0ZSBsYXllci5yb3V0ZS5wYXRoIGZyb20gbGF5ZXIucmVnZXhwIGFuZCBsYXllci5rZXlzLlxuICogV29ya3MgdW50aWwgZXhwcmVzcy5qcyB1c2VkIHBhY2thZ2UgcGF0aC10by1yZWdleHBAMC4xLjdcbiAqIG9yIHVudGlsIGxheWVyLmtleXMgY29udGFpbiBvZmZzZXQgYXR0cmlidXRlXG4gKlxuICogQHBhcmFtIGxheWVyIHRoZSBsYXllciB0byBleHRyYWN0IHRoZSBzdHJpbmdpZmllZCByb3V0ZSBmcm9tXG4gKlxuICogQHJldHVybnMgc3RyaW5nIGluIGxheWVyLnJvdXRlLnBhdGggc3RydWN0dXJlICdyb3V0ZXIvOnBhdGhQYXJhbScgb3IgdW5kZWZpbmVkXG4gKi9cbmNvbnN0IGV4dHJhY3RPcmlnaW5hbFJvdXRlID0gKFxuICBwYXRoLFxuICByZWdleHAsXG4gIGtleXMsXG4pID0+IHtcbiAgaWYgKCFwYXRoIHx8ICFyZWdleHAgfHwgIWtleXMgfHwgT2JqZWN0LmtleXMoa2V5cykubGVuZ3RoID09PSAwIHx8ICFfb3B0aW9uYWxDaGFpbihba2V5cywgJ2FjY2VzcycsIF8xMCA9PiBfMTBbMF0sICdvcHRpb25hbEFjY2VzcycsIF8xMSA9PiBfMTEub2Zmc2V0XSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgb3JkZXJlZEtleXMgPSBrZXlzLnNvcnQoKGEsIGIpID0+IGEub2Zmc2V0IC0gYi5vZmZzZXQpO1xuXG4gIC8vIGFkZCBkIGZsYWcgZm9yIGdldHRpbmcgaW5kaWNlcyBmcm9tIHJlZ2V4cCByZXN1bHRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzZW50cnktaW50ZXJuYWwvc2RrL25vLXJlZ2V4cC1jb25zdHJ1Y3RvciAtLSByZWdleHAgY29tZXMgZnJvbSBleHByZXNzLmpzXG4gIGNvbnN0IHBhdGhSZWdleCA9IG5ldyBSZWdFeHAocmVnZXhwLCBgJHtyZWdleHAuZmxhZ3N9ZGApO1xuICAvKipcbiAgICogdXNlIGN1c3RvbSB0eXBlIGNhdXNlIG9mIFRTIGVycm9yIHdpdGggbWlzc2luZyBpbmRpY2VzIGluIFJlZ0V4cEV4ZWNBcnJheVxuICAgKi9cbiAgY29uc3QgZXhlY1Jlc3VsdCA9IHBhdGhSZWdleC5leGVjKHBhdGgpIDtcblxuICBpZiAoIWV4ZWNSZXN1bHQgfHwgIWV4ZWNSZXN1bHQuaW5kaWNlcykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZSBmaXJzdCBtYXRjaCBmcm9tIHJlZ2V4IGNhdXNlIGNvbnRhaW4gd2hvbGUgbGF5ZXIucGF0aFxuICAgKi9cbiAgY29uc3QgWywgLi4ucGFyYW1JbmRpY2VzXSA9IGV4ZWNSZXN1bHQuaW5kaWNlcztcblxuICBpZiAocGFyYW1JbmRpY2VzLmxlbmd0aCAhPT0gb3JkZXJlZEtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgcmVzdWx0UGF0aCA9IHBhdGg7XG4gIGxldCBpbmRleFNoaWZ0ID0gMDtcblxuICAvKipcbiAgICogaXRlcmF0ZSBwYXJhbSBtYXRjaGVzIGZyb20gcmVnZXhwLmV4ZWNcbiAgICovXG4gIHBhcmFtSW5kaWNlcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIC8qKiBjaGVjayBpZiBvZmZzZXRzIGlzIGRlZmluZSBiZWNhdXNlIGluIHNvbWUgY2FzZXMgcmVnZXggZCBmbGFnIHJldHVybnMgdW5kZWZpbmVkICovXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGNvbnN0IFtzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSA9IGl0ZW07XG4gICAgICAvKipcbiAgICAgICAqIGlzb2xhdGUgcGFydCBiZWZvcmUgcGFyYW1cbiAgICAgICAqL1xuICAgICAgY29uc3Qgc3Vic3RyMSA9IHJlc3VsdFBhdGguc3Vic3RyaW5nKDAsIHN0YXJ0T2Zmc2V0IC0gaW5kZXhTaGlmdCk7XG4gICAgICAvKipcbiAgICAgICAqIGRlZmluZSBwYXJhbU5hbWUgYXMgcmVwbGFjZW1lbnQgaW4gZm9ybWF0IDpwYXRoUGFyYW1cbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBgOiR7b3JkZXJlZEtleXNbaW5kZXhdLm5hbWV9YDtcblxuICAgICAgLyoqXG4gICAgICAgKiBpc29sYXRlIHBhcnQgYWZ0ZXIgcGFyYW1cbiAgICAgICAqL1xuICAgICAgY29uc3Qgc3Vic3RyMiA9IHJlc3VsdFBhdGguc3Vic3RyaW5nKGVuZE9mZnNldCAtIGluZGV4U2hpZnQpO1xuXG4gICAgICAvKipcbiAgICAgICAqIHJlY3JlYXRlIG9yaWdpbmFsIHBhdGggYnV0IHdpdGggcGFyYW0gcmVwbGFjZW1lbnRcbiAgICAgICAqL1xuICAgICAgcmVzdWx0UGF0aCA9IHN1YnN0cjEgKyByZXBsYWNlbWVudCArIHN1YnN0cjI7XG5cbiAgICAgIC8qKlxuICAgICAgICogY2FsY3VsYXRlIG5ldyBpbmRleCBzaGlmdCBhZnRlciByZXN1bHRQYXRoIHdhcyBtb2RpZmllZFxuICAgICAgICovXG4gICAgICBpbmRleFNoaWZ0ID0gaW5kZXhTaGlmdCArIChlbmRPZmZzZXQgLSBzdGFydE9mZnNldCAtIHJlcGxhY2VtZW50Lmxlbmd0aCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0UGF0aDtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHN0cmluZ2lmaWVzIHRoZSBsYXllcidzIHJvdXRlIHdoaWNoIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBwYXJhbWV0ZXJzIChgdXNlcnMvOmlkYCksXG4gKiBhIFJlZ0V4IChgL3Rlc3QvYCkgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgcmVnZXhlcyAoYFsnL3BhdGgxJywgL1xcL3BhdGhbMi01XS8sIC9wYXRoLzppZF1gKS4gQWRkaXRpb25hbGx5XG4gKiByZXR1cm5zIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb3V0ZSwgc3VjaCBhcyBpZiB0aGUgcm91dGUgaXMgZGVmaW5lZCBhcyByZWdleCBvciBhcyBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0gbGF5ZXIgdGhlIGxheWVyIHRvIGV4dHJhY3QgdGhlIHN0cmluZ2lmaWVkIHJvdXRlIGZyb21cbiAqXG4gKiBAcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RyaW5naWZpZWQgcm91dGUsIGEgZmxhZyBkZXRlcm1pbmluZyBpZiB0aGUgcm91dGUgd2FzIGEgcmVnZXhcbiAqICAgICAgICAgIGFuZCB0aGUgbnVtYmVyIG9mIGV4dHJhIHNlZ21lbnRzIHRvIHRoZSBtYXRjaGVkIHBhdGggdGhhdCBhcmUgYWRkaXRpb25hbGx5IGluIHRoZSByb3V0ZSxcbiAqICAgICAgICAgIGlmIHRoZSByb3V0ZSB3YXMgYW4gYXJyYXkgKGRlZmF1bHRzIHRvIDApLlxuICovXG5mdW5jdGlvbiBnZXRMYXllclJvdXRlUGF0aEluZm8obGF5ZXIpIHtcbiAgbGV0IGxycCA9IF9vcHRpb25hbENoYWluKFtsYXllciwgJ2FjY2VzcycsIF8xMiA9PiBfMTIucm91dGUsICdvcHRpb25hbEFjY2VzcycsIF8xMyA9PiBfMTMucGF0aF0pO1xuXG4gIGNvbnN0IGlzUmVnZXggPSB1dGlscy5pc1JlZ0V4cChscnApO1xuICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShscnApO1xuXG4gIGlmICghbHJwKSB7XG4gICAgLy8gcGFyc2Ugbm9kZS5qcyBtYWpvciB2ZXJzaW9uXG4gICAgLy8gTmV4dC5qcyB3aWxsIGNvbXBsYWluIGlmIHdlIGRpcmVjdGx5IHVzZSBgcHJvY2VzLnZlcnNpb25zYCBoZXJlIGJlY2F1c2Ugb2YgZWRnZSBydW50aW1lLlxuICAgIGNvbnN0IFttYWpvcl0gPSAodXRpbHMuR0xPQkFMX09CSiApLnByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuXG4gICAgLy8gYWxsb3cgY2FsbCBleHRyYWN0T3JpZ2luYWxSb3V0ZSBvbmx5IGlmIG5vZGUgdmVyc2lvbiBzdXBwb3J0IFJlZ2V4IGQgZmxhZywgbm9kZSAxNitcbiAgICBpZiAobWFqb3IgPj0gMTYpIHtcbiAgICAgIC8qKlxuICAgICAgICogSWYgbHJwIGRvZXMgbm90IGV4aXN0IHRyeSB0byByZWNyZWF0ZSBvcmlnaW5hbCBsYXllciBwYXRoIGZyb20gcm91dGUgcmVnZXhwXG4gICAgICAgKi9cbiAgICAgIGxycCA9IGV4dHJhY3RPcmlnaW5hbFJvdXRlKGxheWVyLnBhdGgsIGxheWVyLnJlZ2V4cCwgbGF5ZXIua2V5cyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFscnApIHtcbiAgICByZXR1cm4geyBpc1JlZ2V4LCBpc0FycmF5LCBudW1FeHRyYVNlZ21lbnRzOiAwIH07XG4gIH1cblxuICBjb25zdCBudW1FeHRyYVNlZ21lbnRzID0gaXNBcnJheVxuICAgID8gTWF0aC5tYXgoZ2V0TnVtYmVyT2ZBcnJheVVybFNlZ21lbnRzKGxycCApIC0gdXRpbHMuZ2V0TnVtYmVyT2ZVcmxTZWdtZW50cyhsYXllci5wYXRoIHx8ICcnKSwgMClcbiAgICA6IDA7XG5cbiAgY29uc3QgbGF5ZXJSb3V0ZVBhdGggPSBnZXRMYXllclJvdXRlUGF0aFN0cmluZyhpc0FycmF5LCBscnApO1xuXG4gIHJldHVybiB7IGxheWVyUm91dGVQYXRoLCBpc1JlZ2V4LCBpc0FycmF5LCBudW1FeHRyYVNlZ21lbnRzIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIFVSTCBzZWdtZW50cyBpbiBhbiBhcnJheSBvZiByb3V0ZXNcbiAqXG4gKiBFeGFtcGxlOiBbJy9hcGkvdGVzdCcsIC9cXC9hcGlcXC9wb3N0WzAtOV0vLCAnL3VzZXJzLzppZC9kZXRhaWxzYF0gLT4gN1xuICovXG5mdW5jdGlvbiBnZXROdW1iZXJPZkFycmF5VXJsU2VnbWVudHMocm91dGVzQXJyYXkpIHtcbiAgcmV0dXJuIHJvdXRlc0FycmF5LnJlZHVjZSgoYWNjTnVtU2VnbWVudHMsIGN1cnJlbnRSb3V0ZSkgPT4ge1xuICAgIC8vIGFycmF5IG1lbWJlcnMgY2FuIGJlIGEgUmVnRXggLT4gY29udmVydCB0aGVtIHRvU3RyaW5nXG4gICAgcmV0dXJuIGFjY051bVNlZ21lbnRzICsgdXRpbHMuZ2V0TnVtYmVyT2ZVcmxTZWdtZW50cyhjdXJyZW50Um91dGUudG9TdHJpbmcoKSk7XG4gIH0sIDApO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSBsYXllcnMgcm91dGUgcGF0aFxuICogSGFuZGxlcyByb3V0ZSBhcnJheXMgKGJ5IGpvaW5pbmcgdGhlIHBhdGhzIHRvZ2V0aGVyKSBhcyB3ZWxsIGFzIFJlZ0V4cCBhbmQgbm9ybWFsXG4gKiBzdHJpbmcgdmFsdWVzIChpbiB0aGUgbGF0dGVyIGNhc2UgdGhlIHRvU3RyaW5nIGNvbnZlcnNpb24gaXMgdGVjaG5pY2FsbHkgdW5uZWNlc3NhcnkgYnV0XG4gKiBpdCBkb2Vzbid0IGh1cnQgdXMgZWl0aGVyKS5cbiAqL1xuZnVuY3Rpb24gZ2V0TGF5ZXJSb3V0ZVBhdGhTdHJpbmcoaXNBcnJheSwgbHJwKSB7XG4gIGlmIChpc0FycmF5KSB7XG4gICAgcmV0dXJuIChscnAgKS5tYXAociA9PiByLnRvU3RyaW5nKCkpLmpvaW4oJywnKTtcbiAgfVxuICByZXR1cm4gbHJwICYmIGxycC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIHJlbW92ZSBkdXBsaWNhdGUgc2VnbWVudCBjb250YWluIGluIGxheWVyUGF0aCBhZ2FpbnN0IHJlY29uc3RydWN0ZWRSb3V0ZSxcbiAqIGFuZCByZXR1cm4gb25seSB1bmlxdWUgc2VnbWVudCB0aGF0IGNhbiBiZSBhZGRlZCBpbnRvIHJlY29uc3RydWN0ZWRSb3V0ZVxuICovXG5mdW5jdGlvbiBwcmV2ZW50RHVwbGljYXRlU2VnbWVudHMoXG4gIG9yaWdpbmFsVXJsLFxuICByZWNvbnN0cnVjdGVkUm91dGUsXG4gIGxheWVyUGF0aCxcbikge1xuICAvLyBmaWx0ZXIgcXVlcnkgcGFyYW1zXG4gIGNvbnN0IG5vcm1hbGl6ZVVSTCA9IHV0aWxzLnN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudChvcmlnaW5hbFVybCB8fCAnJyk7XG4gIGNvbnN0IG9yaWdpbmFsVXJsU3BsaXQgPSBfb3B0aW9uYWxDaGFpbihbbm9ybWFsaXplVVJMLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTQgPT4gXzE0LnNwbGl0LCAnY2FsbCcsIF8xNSA9PiBfMTUoJy8nKSwgJ2FjY2VzcycsIF8xNiA9PiBfMTYuZmlsdGVyLCAnY2FsbCcsIF8xNyA9PiBfMTcodiA9PiAhIXYpXSk7XG4gIGxldCB0ZW1wQ291bnRlciA9IDA7XG4gIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBfb3B0aW9uYWxDaGFpbihbcmVjb25zdHJ1Y3RlZFJvdXRlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTggPT4gXzE4LnNwbGl0LCAnY2FsbCcsIF8xOSA9PiBfMTkoJy8nKSwgJ2FjY2VzcycsIF8yMCA9PiBfMjAuZmlsdGVyLCAnY2FsbCcsIF8yMSA9PiBfMjEodiA9PiAhIXYpLCAnYWNjZXNzJywgXzIyID0+IF8yMi5sZW5ndGhdKSB8fCAwO1xuICBjb25zdCByZXN1bHQgPSBfb3B0aW9uYWxDaGFpbihbbGF5ZXJQYXRoXG4sICdvcHRpb25hbEFjY2VzcycsIF8yMyA9PiBfMjMuc3BsaXQsICdjYWxsJywgXzI0ID0+IF8yNCgnLycpXG4sICdhY2Nlc3MnLCBfMjUgPT4gXzI1LmZpbHRlciwgJ2NhbGwnLCBfMjYgPT4gXzI2KHNlZ21lbnQgPT4ge1xuICAgICAgaWYgKF9vcHRpb25hbENoYWluKFtvcmlnaW5hbFVybFNwbGl0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMjcgPT4gXzI3W2N1cnJlbnRPZmZzZXQgKyB0ZW1wQ291bnRlcl1dKSA9PT0gc2VnbWVudCkge1xuICAgICAgICB0ZW1wQ291bnRlciArPSAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KVxuLCAnYWNjZXNzJywgXzI4ID0+IF8yOC5qb2luLCAnY2FsbCcsIF8yOSA9PiBfMjkoJy8nKV0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnRzLkV4cHJlc3MgPSBFeHByZXNzO1xuZXhwb3J0cy5leHRyYWN0T3JpZ2luYWxSb3V0ZSA9IGV4dHJhY3RPcmlnaW5hbFJvdXRlO1xuZXhwb3J0cy5wcmV2ZW50RHVwbGljYXRlU2VnbWVudHMgPSBwcmV2ZW50RHVwbGljYXRlU2VnbWVudHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHByZXNzLmpzLm1hcFxuIiwKICAgICJ2YXIge1xuICBfb3B0aW9uYWxDaGFpblxufSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBub2RlVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL25vZGUtdXRpbHMuanMnKTtcblxuLyoqIFRyYWNpbmcgaW50ZWdyYXRpb24gZm9yIG5vZGUtcG9zdGdyZXMgcGFja2FnZSAqL1xuY2xhc3MgUG9zdGdyZXMgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ1Bvc3RncmVzJzt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG4gICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPSBQb3N0Z3Jlcy5pZDtcbiAgICB0aGlzLl91c2VQZ05hdGl2ZSA9ICEhb3B0aW9ucy51c2VQZ05hdGl2ZTtcbiAgICB0aGlzLl9tb2R1bGUgPSBvcHRpb25zLm1vZHVsZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgbG9hZERlcGVuZGVuY3koKSB7XG4gICAgcmV0dXJuICh0aGlzLl9tb2R1bGUgPSB0aGlzLl9tb2R1bGUgfHwgdXRpbHMubG9hZE1vZHVsZSgncGcnKSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgc2V0dXBPbmNlKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICBpZiAobm9kZVV0aWxzLnNob3VsZERpc2FibGVBdXRvSW5zdHJ1bWVudGF0aW9uKGdldEN1cnJlbnRIdWIpKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1Bvc3RncmVzIEludGVncmF0aW9uIGlzIHNraXBwZWQgYmVjYXVzZSBvZiBpbnN0cnVtZW50ZXIgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwa2cgPSB0aGlzLmxvYWREZXBlbmRlbmN5KCk7XG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ1Bvc3RncmVzIEludGVncmF0aW9uIHdhcyB1bmFibGUgdG8gcmVxdWlyZSBgcGdgIHBhY2thZ2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgQ2xpZW50ID0gdGhpcy5fdXNlUGdOYXRpdmUgPyBfb3B0aW9uYWxDaGFpbihbcGtnLCAnYWNjZXNzJywgXzIgPT4gXzIubmF0aXZlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMyA9PiBfMy5DbGllbnRdKSA6IHBrZy5DbGllbnQ7XG5cbiAgICBpZiAoIUNsaWVudCkge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoXCJQb3N0Z3JlcyBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIGFjY2VzcyAncGctbmF0aXZlJyBiaW5kaW5ncy5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZnVuY3Rpb24gKHF1ZXJ5LCBjYWxsYmFjaykgPT4gdm9pZFxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSwgcGFyYW1zLCBjYWxsYmFjaykgPT4gdm9pZFxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSkgPT4gUHJvbWlzZVxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSwgcGFyYW1zKSA9PiBQcm9taXNlXG4gICAgICogZnVuY3Rpb24gKHBnLkN1cnNvcikgPT4gcGcuQ3Vyc29yXG4gICAgICovXG4gICAgdXRpbHMuZmlsbChDbGllbnQucHJvdG90eXBlLCAncXVlcnknLCBmdW5jdGlvbiAob3JpZykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICggY29uZmlnLCB2YWx1ZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRIdWIoKS5nZXRTY29wZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IHNjb3BlLmdldFNwYW4oKTtcblxuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICdkYi5zeXN0ZW0nOiAncG9zdGdyZXNxbCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhYmFzZSkge1xuICAgICAgICAgICAgZGF0YVsnZGIubmFtZSddID0gdGhpcy5kYXRhYmFzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaG9zdCkge1xuICAgICAgICAgICAgZGF0YVsnc2VydmVyLmFkZHJlc3MnXSA9IHRoaXMuaG9zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgICAgICAgZGF0YVsnc2VydmVyLnBvcnQnXSA9IHRoaXMucG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgZGF0YVsnZGIudXNlciddID0gdGhpcy51c2VyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHNwYW4gPSBfb3B0aW9uYWxDaGFpbihbcGFyZW50U3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzQgPT4gXzQuc3RhcnRDaGlsZCwgJ2NhbGwnLCBfNSA9PiBfNSh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnID8gY29uZmlnIDogKGNvbmZpZyApLnRleHQsXG4gICAgICAgICAgb3A6ICdkYicsXG4gICAgICAgICAgb3JpZ2luOiAnYXV0by5kYi5wb3N0Z3JlcycsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSldKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIHZhbHVlcywgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzYgPT4gXzYuZW5kLCAnY2FsbCcsIF83ID0+IF83KCldKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3NwYW4sICdvcHRpb25hbEFjY2VzcycsIF84ID0+IF84LmVuZCwgJ2NhbGwnLCBfOSA9PiBfOSgpXSk7XG4gICAgICAgICAgICB2YWx1ZXMoZXJyLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnYgPSB0eXBlb2YgdmFsdWVzICE9PSAndW5kZWZpbmVkJyA/IG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIHZhbHVlcykgOiBvcmlnLmNhbGwodGhpcywgY29uZmlnKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNUaGVuYWJsZShydikpIHtcbiAgICAgICAgICByZXR1cm4gcnYudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzEwID0+IF8xMC5lbmQsICdjYWxsJywgXzExID0+IF8xMSgpXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3NwYW4sICdvcHRpb25hbEFjY2VzcycsIF8xMiA9PiBfMTIuZW5kLCAnY2FsbCcsIF8xMyA9PiBfMTMoKV0pO1xuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59UG9zdGdyZXMuX19pbml0U3RhdGljKCk7XG5cbmV4cG9ydHMuUG9zdGdyZXMgPSBQb3N0Z3Jlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvc3RncmVzLmpzLm1hcFxuIiwKICAgICJ2YXIge1xuICBfb3B0aW9uYWxDaGFpblxufSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBub2RlVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL25vZGUtdXRpbHMuanMnKTtcblxuLyoqIFRyYWNpbmcgaW50ZWdyYXRpb24gZm9yIG5vZGUtbXlzcWwgcGFja2FnZSAqL1xuY2xhc3MgTXlzcWwgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ015c3FsJzt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG4gICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm5hbWUgPSBNeXNxbC5pZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgbG9hZERlcGVuZGVuY3koKSB7XG4gICAgcmV0dXJuICh0aGlzLl9tb2R1bGUgPSB0aGlzLl9tb2R1bGUgfHwgdXRpbHMubG9hZE1vZHVsZSgnbXlzcWwvbGliL0Nvbm5lY3Rpb24uanMnKSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgc2V0dXBPbmNlKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICBpZiAobm9kZVV0aWxzLnNob3VsZERpc2FibGVBdXRvSW5zdHJ1bWVudGF0aW9uKGdldEN1cnJlbnRIdWIpKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ015c3FsIEludGVncmF0aW9uIGlzIHNraXBwZWQgYmVjYXVzZSBvZiBpbnN0cnVtZW50ZXIgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwa2cgPSB0aGlzLmxvYWREZXBlbmRlbmN5KCk7XG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ015c3FsIEludGVncmF0aW9uIHdhcyB1bmFibGUgdG8gcmVxdWlyZSBgbXlzcWxgIHBhY2thZ2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG15U3FsQ29uZmlnID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBrZy5wcm90b3R5cGUuY29ubmVjdCA9IG5ldyBQcm94eShwa2cucHJvdG90eXBlLmNvbm5lY3QsIHtcbiAgICAgICAgYXBwbHkod3JhcHBpbmdUYXJnZXQsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgICAgICAgICBpZiAoIW15U3FsQ29uZmlnKSB7XG4gICAgICAgICAgICBteVNxbENvbmZpZyA9IHRoaXNBcmcuY29uZmlnO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gd3JhcHBpbmdUYXJnZXQuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5lcnJvcignTXlzcWwgSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byBpbnN0cnVtZW50IGBteXNxbGAgY29uZmlnLicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwYW5EYXRhRnJvbUNvbmZpZygpIHtcbiAgICAgIGlmICghbXlTcWxDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3NlcnZlci5hZGRyZXNzJzogbXlTcWxDb25maWcuaG9zdCxcbiAgICAgICAgJ3NlcnZlci5wb3J0JzogbXlTcWxDb25maWcucG9ydCxcbiAgICAgICAgJ2RiLnVzZXInOiBteVNxbENvbmZpZy51c2VyLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5pc2hTcGFuKHNwYW4pIHtcbiAgICAgIGlmICghc3Bhbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBzcGFuRGF0YUZyb21Db25maWcoKTtcbiAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoa2V5LCBkYXRhW2tleV0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpbGwgaGF2ZSBvbmUgb2YgdGhlc2Ugc2lnbmF0dXJlczpcbiAgICAvLyAgICBmdW5jdGlvbiAoY2FsbGJhY2spID0+IHZvaWRcbiAgICAvLyAgICBmdW5jdGlvbiAob3B0aW9ucywgY2FsbGJhY2spID0+IHZvaWRcbiAgICAvLyAgICBmdW5jdGlvbiAob3B0aW9ucywgdmFsdWVzLCBjYWxsYmFjaykgPT4gdm9pZFxuICAgIHV0aWxzLmZpbGwocGtnLCAnY3JlYXRlUXVlcnknLCBmdW5jdGlvbiAob3JpZykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICggb3B0aW9ucywgdmFsdWVzLCBjYWxsYmFjaykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZS5nZXRTcGFuKCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHNwYW4gPSBfb3B0aW9uYWxDaGFpbihbcGFyZW50U3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuc3RhcnRDaGlsZCwgJ2NhbGwnLCBfMyA9PiBfMyh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyA/IG9wdGlvbnMgOiAob3B0aW9ucyApLnNxbCxcbiAgICAgICAgICBvcDogJ2RiJyxcbiAgICAgICAgICBvcmlnaW46ICdhdXRvLmRiLm15c3FsJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAnZGIuc3lzdGVtJzogJ215c3FsJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KV0pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZy5jYWxsKHRoaXMsIG9wdGlvbnMsIHZhbHVlcywgZnVuY3Rpb24gKGVyciwgcmVzdWx0LCBmaWVsZHMpIHtcbiAgICAgICAgICAgIGZpbmlzaFNwYW4oc3Bhbik7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCwgZmllbGRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQsIGZpZWxkcykge1xuICAgICAgICAgICAgZmluaXNoU3BhbihzcGFuKTtcbiAgICAgICAgICAgIHZhbHVlcyhlcnIsIHJlc3VsdCwgZmllbGRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0cmVhbWluZywgbm8gY2FsbGJhY2shXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gb3JpZy5jYWxsKHRoaXMsIG9wdGlvbnMsIHZhbHVlcykgO1xuXG4gICAgICAgIHF1ZXJ5Lm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgZmluaXNoU3BhbihzcGFuKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufU15c3FsLl9faW5pdFN0YXRpYygpO1xuXG5leHBvcnRzLk15c3FsID0gTXlzcWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1teXNxbC5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3Qgbm9kZVV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ub2RlLXV0aWxzLmpzJyk7XG5cbi8vIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgc2FtZSBhcnJheSBmb3IgYm90aCBkZWZhdWx0cyBvcHRpb25zIGFuZCB0aGUgdHlwZSBpdHNlbGYuXG4vLyAobm90ZSBgYXMgY29uc3RgIGF0IHRoZSBlbmQgdG8gbWFrZSBpdCBhIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFsIHR5cGVzIChpLmUuIFwiYVwiIHwgXCJiXCIgfCAuLi4gKVxuLy8gYW5kIG5vdCBqdXN0IGEgc3RyaW5nW10pXG5cbmNvbnN0IE9QRVJBVElPTlMgPSBbXG4gICdhZ2dyZWdhdGUnLCAvLyBhZ2dyZWdhdGUocGlwZWxpbmUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnYnVsa1dyaXRlJywgLy8gYnVsa1dyaXRlKG9wZXJhdGlvbnMsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnY291bnREb2N1bWVudHMnLCAvLyBjb3VudERvY3VtZW50cyhxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdjcmVhdGVJbmRleCcsIC8vIGNyZWF0ZUluZGV4KGZpZWxkT3JTcGVjLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2NyZWF0ZUluZGV4ZXMnLCAvLyBjcmVhdGVJbmRleGVzKGluZGV4U3BlY3MsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZGVsZXRlTWFueScsIC8vIGRlbGV0ZU1hbnkoZmlsdGVyLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2RlbGV0ZU9uZScsIC8vIGRlbGV0ZU9uZShmaWx0ZXIsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZGlzdGluY3QnLCAvLyBkaXN0aW5jdChrZXksIHF1ZXJ5LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2Ryb3AnLCAvLyBkcm9wKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZHJvcEluZGV4JywgLy8gZHJvcEluZGV4KGluZGV4TmFtZSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdkcm9wSW5kZXhlcycsIC8vIGRyb3BJbmRleGVzKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZXN0aW1hdGVkRG9jdW1lbnRDb3VudCcsIC8vIGVzdGltYXRlZERvY3VtZW50Q291bnQob3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kJywgLy8gZmluZChxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kT25lJywgLy8gZmluZE9uZShxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kT25lQW5kRGVsZXRlJywgLy8gZmluZE9uZUFuZERlbGV0ZShmaWx0ZXIsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZmluZE9uZUFuZFJlcGxhY2UnLCAvLyBmaW5kT25lQW5kUmVwbGFjZShmaWx0ZXIsIHJlcGxhY2VtZW50LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2ZpbmRPbmVBbmRVcGRhdGUnLCAvLyBmaW5kT25lQW5kVXBkYXRlKGZpbHRlciwgdXBkYXRlLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luZGV4ZXMnLCAvLyBpbmRleGVzKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaW5kZXhFeGlzdHMnLCAvLyBpbmRleEV4aXN0cyhpbmRleGVzLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luZGV4SW5mb3JtYXRpb24nLCAvLyBpbmRleEluZm9ybWF0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaW5pdGlhbGl6ZU9yZGVyZWRCdWxrT3AnLCAvLyBpbml0aWFsaXplT3JkZXJlZEJ1bGtPcChvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luc2VydE1hbnknLCAvLyBpbnNlcnRNYW55KGRvY3MsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaW5zZXJ0T25lJywgLy8gaW5zZXJ0T25lKGRvYywgb3B0aW9ucywgY2FsbGJhY2spXG4gICdpc0NhcHBlZCcsIC8vIGlzQ2FwcGVkKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnbWFwUmVkdWNlJywgLy8gbWFwUmVkdWNlKG1hcCwgcmVkdWNlLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ29wdGlvbnMnLCAvLyBvcHRpb25zKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAncGFyYWxsZWxDb2xsZWN0aW9uU2NhbicsIC8vIHBhcmFsbGVsQ29sbGVjdGlvblNjYW4ob3B0aW9ucywgY2FsbGJhY2spXG4gICdyZW5hbWUnLCAvLyByZW5hbWUobmV3TmFtZSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdyZXBsYWNlT25lJywgLy8gcmVwbGFjZU9uZShmaWx0ZXIsIGRvYywgb3B0aW9ucywgY2FsbGJhY2spXG4gICdzdGF0cycsIC8vIHN0YXRzKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAndXBkYXRlTWFueScsIC8vIHVwZGF0ZU1hbnkoZmlsdGVyLCB1cGRhdGUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAndXBkYXRlT25lJywgLy8gdXBkYXRlT25lKGZpbHRlciwgdXBkYXRlLCBvcHRpb25zLCBjYWxsYmFjaylcbl0gO1xuXG4vLyBBbGwgb2YgdGhlIG9wZXJhdGlvbnMgYWJvdmUgdGFrZSBgb3B0aW9uc2AgYW5kIGBjYWxsYmFja2AgYXMgdGhlaXIgZmluYWwgcGFyYW1ldGVycywgYnV0IHNvbWUgb2YgdGhlbVxuLy8gdGFrZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXMgd2VsbC4gRm9yIHRob3NlIG9wZXJhdGlvbnMsIHRoaXMgaXMgYSBtYXAgb2Zcbi8vIHsgPG9wZXJhdGlvbiBuYW1lPjogIFs8bmFtZXMgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzPl0gfSwgYXMgYSB3YXkgdG8ga25vdyB3aGF0IHRvIGNhbGwgdGhlIG9wZXJhdGlvbidzXG4vLyBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIHdlIGFkZCB0aGVtIHRvIHRoZSBzcGFuJ3MgYGRhdGFgIG9iamVjdCBsYXRlclxuY29uc3QgT1BFUkFUSU9OX1NJR05BVFVSRVNcblxuID0ge1xuICAvLyBhZ2dyZWdhdGUgaW50ZW50aW9uYWxseSBub3QgaW5jbHVkZWQgYmVjYXVzZSBgcGlwZWxpbmVgIGFyZ3VtZW50cyBhcmUgdG9vIGNvbXBsZXggdG8gc2VyaWFsaXplIHdlbGxcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC8zMTAyXG4gIGJ1bGtXcml0ZTogWydvcGVyYXRpb25zJ10sXG4gIGNvdW50RG9jdW1lbnRzOiBbJ3F1ZXJ5J10sXG4gIGNyZWF0ZUluZGV4OiBbJ2ZpZWxkT3JTcGVjJ10sXG4gIGNyZWF0ZUluZGV4ZXM6IFsnaW5kZXhTcGVjcyddLFxuICBkZWxldGVNYW55OiBbJ2ZpbHRlciddLFxuICBkZWxldGVPbmU6IFsnZmlsdGVyJ10sXG4gIGRpc3RpbmN0OiBbJ2tleScsICdxdWVyeSddLFxuICBkcm9wSW5kZXg6IFsnaW5kZXhOYW1lJ10sXG4gIGZpbmQ6IFsncXVlcnknXSxcbiAgZmluZE9uZTogWydxdWVyeSddLFxuICBmaW5kT25lQW5kRGVsZXRlOiBbJ2ZpbHRlciddLFxuICBmaW5kT25lQW5kUmVwbGFjZTogWydmaWx0ZXInLCAncmVwbGFjZW1lbnQnXSxcbiAgZmluZE9uZUFuZFVwZGF0ZTogWydmaWx0ZXInLCAndXBkYXRlJ10sXG4gIGluZGV4RXhpc3RzOiBbJ2luZGV4ZXMnXSxcbiAgaW5zZXJ0TWFueTogWydkb2NzJ10sXG4gIGluc2VydE9uZTogWydkb2MnXSxcbiAgbWFwUmVkdWNlOiBbJ21hcCcsICdyZWR1Y2UnXSxcbiAgcmVuYW1lOiBbJ25ld05hbWUnXSxcbiAgcmVwbGFjZU9uZTogWydmaWx0ZXInLCAnZG9jJ10sXG4gIHVwZGF0ZU1hbnk6IFsnZmlsdGVyJywgJ3VwZGF0ZSddLFxuICB1cGRhdGVPbmU6IFsnZmlsdGVyJywgJ3VwZGF0ZSddLFxufTtcblxuZnVuY3Rpb24gaXNDdXJzb3IobWF5YmVDdXJzb3IpIHtcbiAgcmV0dXJuIG1heWJlQ3Vyc29yICYmIHR5cGVvZiBtYXliZUN1cnNvciA9PT0gJ29iamVjdCcgJiYgbWF5YmVDdXJzb3Iub25jZSAmJiB0eXBlb2YgbWF5YmVDdXJzb3Iub25jZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqIFRyYWNpbmcgaW50ZWdyYXRpb24gZm9yIG1vbmdvIHBhY2thZ2UgKi9cbmNsYXNzIE1vbmdvICB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHN0YXRpYyBfX2luaXRTdGF0aWMoKSB7dGhpcy5pZCA9ICdNb25nbyc7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPSBNb25nby5pZDtcbiAgICB0aGlzLl9vcGVyYXRpb25zID0gQXJyYXkuaXNBcnJheShvcHRpb25zLm9wZXJhdGlvbnMpID8gb3B0aW9ucy5vcGVyYXRpb25zIDogKE9QRVJBVElPTlMgKTtcbiAgICB0aGlzLl9kZXNjcmliZU9wZXJhdGlvbnMgPSAnZGVzY3JpYmVPcGVyYXRpb25zJyBpbiBvcHRpb25zID8gb3B0aW9ucy5kZXNjcmliZU9wZXJhdGlvbnMgOiB0cnVlO1xuICAgIHRoaXMuX3VzZU1vbmdvb3NlID0gISFvcHRpb25zLnVzZU1vbmdvb3NlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBsb2FkRGVwZW5kZW5jeSgpIHtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gdGhpcy5fdXNlTW9uZ29vc2UgPyAnbW9uZ29vc2UnIDogJ21vbmdvZGInO1xuICAgIHJldHVybiAodGhpcy5fbW9kdWxlID0gdGhpcy5fbW9kdWxlIHx8IHV0aWxzLmxvYWRNb2R1bGUobW9kdWxlTmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgIHNldHVwT25jZShfLCBnZXRDdXJyZW50SHViKSB7XG4gICAgaWYgKG5vZGVVdGlscy5zaG91bGREaXNhYmxlQXV0b0luc3RydW1lbnRhdGlvbihnZXRDdXJyZW50SHViKSkge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKCdNb25nbyBJbnRlZ3JhdGlvbiBpcyBza2lwcGVkIGJlY2F1c2Ugb2YgaW5zdHJ1bWVudGVyIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGtnID0gdGhpcy5sb2FkRGVwZW5kZW5jeSgpO1xuXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSB0aGlzLl91c2VNb25nb29zZSA/ICdtb25nb29zZScgOiAnbW9uZ29kYic7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5lcnJvcihgTW9uZ28gSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byByZXF1aXJlIFxcYCR7bW9kdWxlTmFtZX1cXGAgcGFja2FnZS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnN0cnVtZW50T3BlcmF0aW9ucyhwa2cuQ29sbGVjdGlvbiwgdGhpcy5fb3BlcmF0aW9ucywgZ2V0Q3VycmVudEh1Yik7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyBvcmlnaW5hbCBjb2xsZWN0aW9uIG1ldGhvZHNcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgX2luc3RydW1lbnRPcGVyYXRpb25zKGNvbGxlY3Rpb24sIG9wZXJhdGlvbnMsIGdldEN1cnJlbnRIdWIpIHtcbiAgICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbikgPT4gdGhpcy5fcGF0Y2hPcGVyYXRpb24oY29sbGVjdGlvbiwgb3BlcmF0aW9uLCBnZXRDdXJyZW50SHViKSk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyBvcmlnaW5hbCBjb2xsZWN0aW9uIHRvIHV0aWxpemUgb3VyIHRyYWNpbmcgZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICBfcGF0Y2hPcGVyYXRpb24oY29sbGVjdGlvbiwgb3BlcmF0aW9uLCBnZXRDdXJyZW50SHViKSB7XG4gICAgaWYgKCEob3BlcmF0aW9uIGluIGNvbGxlY3Rpb24ucHJvdG90eXBlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZ2V0U3BhbkNvbnRleHQgPSB0aGlzLl9nZXRTcGFuQ29udGV4dEZyb21PcGVyYXRpb25Bcmd1bWVudHMuYmluZCh0aGlzKTtcblxuICAgIHV0aWxzLmZpbGwoY29sbGVjdGlvbi5wcm90b3R5cGUsIG9wZXJhdGlvbiwgZnVuY3Rpb24gKG9yaWcpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHNjb3BlID0gaHViLmdldFNjb3BlKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBjb25zdCBjbGllbnQgPSBodWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBjb25zdCBwYXJlbnRTcGFuID0gc2NvcGUuZ2V0U3BhbigpO1xuXG4gICAgICAgIGNvbnN0IHNlbmREZWZhdWx0UGlpID0gX29wdGlvbmFsQ2hhaW4oW2NsaWVudCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuZ2V0T3B0aW9ucywgJ2NhbGwnLCBfMyA9PiBfMygpLCAnYWNjZXNzJywgXzQgPT4gXzQuc2VuZERlZmF1bHRQaWldKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgb3BlcmF0aW9uIHdhcyBwYXNzZWQgYSBjYWxsYmFjay4gKG1hcFJlZHVjZSByZXF1aXJlcyBhIGRpZmZlcmVudCBjaGVjaywgYXNcbiAgICAgICAgLy8gaXRzIChub24tY2FsbGJhY2spIGFyZ3VtZW50cyBjYW4gYWxzbyBiZSBmdW5jdGlvbnMuKVxuICAgICAgICBpZiAodHlwZW9mIGxhc3RBcmcgIT09ICdmdW5jdGlvbicgfHwgKG9wZXJhdGlvbiA9PT0gJ21hcFJlZHVjZScgJiYgYXJncy5sZW5ndGggPT09IDIpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgY29uc3Qgc3BhbiA9IF9vcHRpb25hbENoYWluKFtwYXJlbnRTcGFuLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5zdGFydENoaWxkLCAnY2FsbCcsIF82ID0+IF82KGdldFNwYW5Db250ZXh0KHRoaXMsIG9wZXJhdGlvbiwgYXJncywgc2VuZERlZmF1bHRQaWkpKV0pO1xuICAgICAgICAgIGNvbnN0IG1heWJlUHJvbWlzZU9yQ3Vyc29yID0gb3JpZy5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzVGhlbmFibGUobWF5YmVQcm9taXNlT3JDdXJzb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlT3JDdXJzb3IudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgIF9vcHRpb25hbENoYWluKFtzcGFuLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNyA9PiBfNy5lbmQsICdjYWxsJywgXzggPT4gXzgoKV0pO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIHRoZSBvcGVyYXRpb24gcmV0dXJucyBhIEN1cnNvclxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gYXR0YWNoIGEgbGlzdGVuZXIgdG8gaXQgdG8gZmluaXNoIHRoZSBzcGFuIHdoZW4gdGhlIGN1cnNvciBpcyBjbG9zZWQuXG4gICAgICAgICAgZWxzZSBpZiAoaXNDdXJzb3IobWF5YmVQcm9taXNlT3JDdXJzb3IpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJzb3IgPSBtYXliZVByb21pc2VPckN1cnNvciA7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGN1cnNvci5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzkgPT4gXzkuZW5kLCAnY2FsbCcsIF8xMCA9PiBfMTAoKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnNvciBpcyBhbHJlYWR5IGNsb3NlZCwgYG9uY2VgIHdpbGwgdGhyb3cgYW4gZXJyb3IuIEluIHRoYXQgY2FzZSwgd2UgY2FuXG4gICAgICAgICAgICAgIC8vIGZpbmlzaCB0aGUgc3BhbiBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3NwYW4sICdvcHRpb25hbEFjY2VzcycsIF8xMSA9PiBfMTEuZW5kLCAnY2FsbCcsIF8xMiA9PiBfMTIoKV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY3Vyc29yO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzEzID0+IF8xMy5lbmQsICdjYWxsJywgXzE0ID0+IF8xNCgpXSk7XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlT3JDdXJzb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHNwYW4gPSBfb3B0aW9uYWxDaGFpbihbcGFyZW50U3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzE1ID0+IF8xNS5zdGFydENoaWxkLCAnY2FsbCcsIF8xNiA9PiBfMTYoZ2V0U3BhbkNvbnRleHQodGhpcywgb3BlcmF0aW9uLCBhcmdzLnNsaWNlKDAsIC0xKSkpXSk7XG5cbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCAuLi5hcmdzLnNsaWNlKDAsIC0xKSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3NwYW4sICdvcHRpb25hbEFjY2VzcycsIF8xNyA9PiBfMTcuZW5kLCAnY2FsbCcsIF8xOCA9PiBfMTgoKV0pO1xuICAgICAgICAgIGxhc3RBcmcoZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybSBhIFNwYW5Db250ZXh0IGJhc2VkIG9uIHRoZSB1c2VyIGlucHV0IHRvIGEgZ2l2ZW4gb3BlcmF0aW9uLlxuICAgKi9cbiAgIF9nZXRTcGFuQ29udGV4dEZyb21PcGVyYXRpb25Bcmd1bWVudHMoXG4gICAgY29sbGVjdGlvbixcbiAgICBvcGVyYXRpb24sXG4gICAgYXJncyxcbiAgICBzZW5kRGVmYXVsdFBpaSA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgJ2RiLnN5c3RlbSc6ICdtb25nb2RiJyxcbiAgICAgICdkYi5uYW1lJzogY29sbGVjdGlvbi5kYk5hbWUsXG4gICAgICAnZGIub3BlcmF0aW9uJzogb3BlcmF0aW9uLFxuICAgICAgJ2RiLm1vbmdvZGIuY29sbGVjdGlvbic6IGNvbGxlY3Rpb24uY29sbGVjdGlvbk5hbWUsXG4gICAgfTtcbiAgICBjb25zdCBzcGFuQ29udGV4dCA9IHtcbiAgICAgIG9wOiAnZGInLFxuICAgICAgLy8gVE9ETyB2ODogVXNlIGAke2NvbGxlY3Rpb24uY29sbGVjdGlvbk5hbWV9LiR7b3BlcmF0aW9ufWBcbiAgICAgIG9yaWdpbjogJ2F1dG8uZGIubW9uZ28nLFxuICAgICAgZGVzY3JpcHRpb246IG9wZXJhdGlvbixcbiAgICAgIGRhdGEsXG4gICAgfTtcblxuICAgIC8vIElmIHRoZSBvcGVyYXRpb24gdGFrZXMgbm8gYXJndW1lbnRzIGJlc2lkZXMgYG9wdGlvbnNgIGFuZCBgY2FsbGJhY2tgLCBvciBpZiBhcmd1bWVudFxuICAgIC8vIGNvbGxlY3Rpb24gaXMgZGlzYWJsZWQgZm9yIHRoaXMgb3BlcmF0aW9uLCBqdXN0IHJldHVybiBlYXJseS5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBPUEVSQVRJT05fU0lHTkFUVVJFU1tvcGVyYXRpb25dO1xuICAgIGNvbnN0IHNob3VsZERlc2NyaWJlID0gQXJyYXkuaXNBcnJheSh0aGlzLl9kZXNjcmliZU9wZXJhdGlvbnMpXG4gICAgICA/IHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucy5pbmNsdWRlcyhvcGVyYXRpb24pXG4gICAgICA6IHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucztcblxuICAgIGlmICghc2lnbmF0dXJlIHx8ICFzaG91bGREZXNjcmliZSB8fCAhc2VuZERlZmF1bHRQaWkpIHtcbiAgICAgIHJldHVybiBzcGFuQ29udGV4dDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBgbWFwUmVkdWNlYCwgYXMgdGhlIG9ubHkgb25lIGFjY2VwdGluZyBmdW5jdGlvbnMgYXMgYXJndW1lbnRzLlxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ21hcFJlZHVjZScpIHtcbiAgICAgICAgY29uc3QgW21hcCwgcmVkdWNlXSA9IGFyZ3MgO1xuICAgICAgICBkYXRhW3NpZ25hdHVyZVswXV0gPSB0eXBlb2YgbWFwID09PSAnc3RyaW5nJyA/IG1hcCA6IG1hcC5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG4gICAgICAgIGRhdGFbc2lnbmF0dXJlWzFdXSA9IHR5cGVvZiByZWR1Y2UgPT09ICdzdHJpbmcnID8gcmVkdWNlIDogcmVkdWNlLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YVtgZGIubW9uZ29kYi4ke3NpZ25hdHVyZVtpXX1gXSA9IEpTT04uc3RyaW5naWZ5KGFyZ3NbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAvLyBuby1lbXB0eVxuICAgIH1cblxuICAgIHJldHVybiBzcGFuQ29udGV4dDtcbiAgfVxufU1vbmdvLl9faW5pdFN0YXRpYygpO1xuXG5leHBvcnRzLk1vbmdvID0gTW9uZ287XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb25nby5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBub2RlVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL25vZGUtdXRpbHMuanMnKTtcblxuZnVuY3Rpb24gaXNWYWxpZFByaXNtYUNsaWVudChwb3NzaWJsZUNsaWVudCkge1xuICByZXR1cm4gISFwb3NzaWJsZUNsaWVudCAmJiAhIShwb3NzaWJsZUNsaWVudCApWyckdXNlJ107XG59XG5cbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBAcHJpc21hL2NsaWVudCBwYWNrYWdlICovXG5jbGFzcyBQcmlzbWEgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ1ByaXNtYSc7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPSBQcmlzbWEuaWQ7XG5cbiAgICAvLyBXZSBpbnN0cnVtZW50IHRoZSBQcmlzbWFDbGllbnQgaW5zaWRlIHRoZSBjb25zdHJ1Y3RvciBhbmQgbm90IGluc2lkZSBgc2V0dXBPbmNlYCBiZWNhdXNlIGluIHNvbWUgY2FzZXMgb2Ygc2VydmVyLXNpZGVcbiAgICAvLyBidW5kbGluZyAoTmV4dC5qcykgbXVsdGlwbGUgUHJpc21hIGNsaWVudHMgY2FuIGJlIGluc3RhbnRpYXRlZCwgZXZlbiB0aG91Z2ggdXNlcnMgZG9uJ3QgaW50ZW5kIHRvLiBXaGVuIGluc3RydW1lbnRpbmdcbiAgICAvLyBpbiBzZXR1cE9uY2Ugd2UgY2FuIG9ubHkgZXZlciBpbnN0cnVtZW50IG9uZSBjbGllbnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvNzIxNiNpc3N1ZWNvbW1lbnQtMTYwMjM3NTAxMlxuICAgIC8vIEluIHRoZSBmdXR1cmUgd2UgbWlnaHQgZXhwbG9yZSBwcm92aWRpbmcgYSBkZWRpY2F0ZWQgUHJpc21hQ2xpZW50IG1pZGRsZXdhcmUgaW5zdGVhZCBvZiB0aGlzIGhhY2suXG4gICAgaWYgKGlzVmFsaWRQcmlzbWFDbGllbnQob3B0aW9ucy5jbGllbnQpICYmICFvcHRpb25zLmNsaWVudC5fc2VudHJ5SW5zdHJ1bWVudGVkKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgdXRpbHMuYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KG9wdGlvbnMuY2xpZW50ICwgJ19zZW50cnlJbnN0cnVtZW50ZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgY2xpZW50RGF0YSA9IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZW5naW5lQ29uZmlnID0gKG9wdGlvbnMuY2xpZW50ICkuX2VuZ2luZUNvbmZpZztcbiAgICAgICAgaWYgKGVuZ2luZUNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHsgYWN0aXZlUHJvdmlkZXIsIGNsaWVudFZlcnNpb24gfSA9IGVuZ2luZUNvbmZpZztcbiAgICAgICAgICBpZiAoYWN0aXZlUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNsaWVudERhdGFbJ2RiLnN5c3RlbSddID0gYWN0aXZlUHJvdmlkZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGllbnRWZXJzaW9uKSB7XG4gICAgICAgICAgICBjbGllbnREYXRhWydkYi5wcmlzbWEudmVyc2lvbiddID0gY2xpZW50VmVyc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuY2xpZW50LiR1c2UoKHBhcmFtcywgbmV4dCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgaWYgKG5vZGVVdGlscy5zaG91bGREaXNhYmxlQXV0b0luc3RydW1lbnRhdGlvbihjb3JlLmdldEN1cnJlbnRIdWIpKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQocGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHBhcmFtcy5hY3Rpb247XG4gICAgICAgIGNvbnN0IG1vZGVsID0gcGFyYW1zLm1vZGVsO1xuXG4gICAgICAgIHJldHVybiBjb3JlLnN0YXJ0U3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBtb2RlbCA/IGAke21vZGVsfSAke2FjdGlvbn1gIDogYWN0aW9uLFxuICAgICAgICAgICAgb25seUlmUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgb3A6ICdkYi5wcmlzbWEnLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLmRiLnByaXNtYScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0YTogeyAuLi5jbGllbnREYXRhLCAnZGIub3BlcmF0aW9uJzogYWN0aW9uIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiBuZXh0KHBhcmFtcyksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgICB1dGlscy5sb2dnZXIud2FybignVW5zdXBwb3J0ZWQgUHJpc21hIGNsaWVudCBwcm92aWRlZCB0byBQcmlzbWFJbnRlZ3JhdGlvbi4gUHJvdmlkZWQgY2xpZW50OicsIG9wdGlvbnMuY2xpZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBzZXR1cE9uY2UoKSB7XG4gICAgLy8gTm9vcCAtIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIH1cbn0gUHJpc21hLl9faW5pdFN0YXRpYygpO1xuXG5leHBvcnRzLlByaXNtYSA9IFByaXNtYTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByaXNtYS5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3Qgbm9kZVV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ub2RlLXV0aWxzLmpzJyk7XG5cbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBncmFwaHFsIHBhY2thZ2UgKi9cbmNsYXNzIEdyYXBoUUwgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ0dyYXBoUUwnO31cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cbiAgIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubmFtZSA9IEdyYXBoUUwuaWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGxvYWREZXBlbmRlbmN5KCkge1xuICAgIHJldHVybiAodGhpcy5fbW9kdWxlID0gdGhpcy5fbW9kdWxlIHx8IHV0aWxzLmxvYWRNb2R1bGUoJ2dyYXBocWwvZXhlY3V0aW9uL2V4ZWN1dGUuanMnKSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgc2V0dXBPbmNlKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICBpZiAobm9kZVV0aWxzLnNob3VsZERpc2FibGVBdXRvSW5zdHJ1bWVudGF0aW9uKGdldEN1cnJlbnRIdWIpKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ0dyYXBoUUwgSW50ZWdyYXRpb24gaXMgc2tpcHBlZCBiZWNhdXNlIG9mIGluc3RydW1lbnRlciBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBrZyA9IHRoaXMubG9hZERlcGVuZGVuY3koKTtcblxuICAgIGlmICghcGtnKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5lcnJvcignR3JhcGhRTCBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIHJlcXVpcmUgZ3JhcGhxbC9leGVjdXRpb24gcGFja2FnZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1dGlscy5maWxsKHBrZywgJ2V4ZWN1dGUnLCBmdW5jdGlvbiAob3JpZykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICggLi4uYXJncykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZS5nZXRTcGFuKCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IHNwYW4gPSBfb3B0aW9uYWxDaGFpbihbcGFyZW50U3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuc3RhcnRDaGlsZCwgJ2NhbGwnLCBfMyA9PiBfMyh7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdleGVjdXRlJyxcbiAgICAgICAgICBvcDogJ2dyYXBocWwuZXhlY3V0ZScsXG4gICAgICAgICAgb3JpZ2luOiAnYXV0by5ncmFwaHFsLmdyYXBocWwnLFxuICAgICAgICB9KV0pO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBfb3B0aW9uYWxDaGFpbihbc2NvcGUsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80LnNldFNwYW4sICdjYWxsJywgXzUgPT4gXzUoc3BhbildKTtcblxuICAgICAgICBjb25zdCBydiA9IG9yaWcuY2FsbCh0aGlzLCAuLi5hcmdzKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNUaGVuYWJsZShydikpIHtcbiAgICAgICAgICByZXR1cm4gcnYudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzYgPT4gXzYuZW5kLCAnY2FsbCcsIF83ID0+IF83KCldKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3Njb3BlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfOCA9PiBfOC5zZXRTcGFuLCAnY2FsbCcsIF85ID0+IF85KHBhcmVudFNwYW4pXSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzEwID0+IF8xMC5lbmQsICdjYWxsJywgXzExID0+IF8xMSgpXSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBfb3B0aW9uYWxDaGFpbihbc2NvcGUsICdvcHRpb25hbEFjY2VzcycsIF8xMiA9PiBfMTIuc2V0U3BhbiwgJ2NhbGwnLCBfMTMgPT4gXzEzKHBhcmVudFNwYW4pXSk7XG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1HcmFwaFFMLl9faW5pdFN0YXRpYygpO1xuXG5leHBvcnRzLkdyYXBoUUwgPSBHcmFwaFFMO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhcGhxbC5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3Qgbm9kZVV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ub2RlLXV0aWxzLmpzJyk7XG5cbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBBcG9sbG8gKi9cbmNsYXNzIEFwb2xsbyAge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBzdGF0aWMgX19pbml0U3RhdGljKCkge3RoaXMuaWQgPSAnQXBvbGxvJzt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMgPSB7XG4gICAgICB1c2VOZXN0anM6IGZhbHNlLFxuICAgIH0sXG4gICkge1xuICAgIHRoaXMubmFtZSA9IEFwb2xsby5pZDtcbiAgICB0aGlzLl91c2VOZXN0ID0gISFvcHRpb25zLnVzZU5lc3RqcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgbG9hZERlcGVuZGVuY3koKSB7XG4gICAgaWYgKHRoaXMuX3VzZU5lc3QpIHtcbiAgICAgIHRoaXMuX21vZHVsZSA9IHRoaXMuX21vZHVsZSB8fCB1dGlscy5sb2FkTW9kdWxlKCdAbmVzdGpzL2dyYXBocWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kdWxlID0gdGhpcy5fbW9kdWxlIHx8IHV0aWxzLmxvYWRNb2R1bGUoJ2Fwb2xsby1zZXJ2ZXItY29yZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tb2R1bGU7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgc2V0dXBPbmNlKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICBpZiAobm9kZVV0aWxzLnNob3VsZERpc2FibGVBdXRvSW5zdHJ1bWVudGF0aW9uKGdldEN1cnJlbnRIdWIpKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ0Fwb2xsbyBJbnRlZ3JhdGlvbiBpcyBza2lwcGVkIGJlY2F1c2Ugb2YgaW5zdHJ1bWVudGVyIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VzZU5lc3QpIHtcbiAgICAgIGNvbnN0IHBrZyA9IHRoaXMubG9hZERlcGVuZGVuY3koKTtcblxuICAgICAgaWYgKCFwa2cpIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ0Fwb2xsby1OZXN0SlMgSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byByZXF1aXJlIEBuZXN0anMvZ3JhcGhxbCBwYWNrYWdlLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSXRlcmF0ZSBvdmVyIHJlc29sdmVycyBvZiBOZXN0SlMgUmVzb2x2ZXJzRXhwbG9yZXJTZXJ2aWNlIGJlZm9yZSBzY2hlbWFzIGFyZSBjb25zdHJ1Y3RlZC5cbiAgICAgICAqL1xuICAgICAgdXRpbHMuZmlsbChcbiAgICAgICAgcGtnLkdyYXBoUUxGYWN0b3J5LnByb3RvdHlwZSxcbiAgICAgICAgJ21lcmdlV2l0aFNjaGVtYScsXG4gICAgICAgIGZ1bmN0aW9uIChvcmlnKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChcblxuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdXRpbHMuZmlsbCh0aGlzLnJlc29sdmVyc0V4cGxvcmVyU2VydmljZSwgJ2V4cGxvcmUnLCBmdW5jdGlvbiAob3JpZykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHV0aWxzLmFycmF5aWZ5KG9yaWcuY2FsbCh0aGlzKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50ZWRSZXNvbHZlcnMgPSBpbnN0cnVtZW50UmVzb2x2ZXJzKHJlc29sdmVycywgZ2V0Q3VycmVudEh1Yik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGVkUmVzb2x2ZXJzO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvcmlnLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBrZyA9IHRoaXMubG9hZERlcGVuZGVuY3koKTtcblxuICAgICAgaWYgKCFwa2cpIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ0Fwb2xsbyBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIHJlcXVpcmUgYXBvbGxvLXNlcnZlci1jb3JlIHBhY2thZ2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJdGVyYXRlIG92ZXIgcmVzb2x2ZXJzIG9mIHRoZSBBcG9sbG9TZXJ2ZXIgaW5zdGFuY2UgYmVmb3JlIHNjaGVtYXMgYXJlIGNvbnN0cnVjdGVkLlxuICAgICAgICovXG4gICAgICB1dGlscy5maWxsKHBrZy5BcG9sbG9TZXJ2ZXJCYXNlLnByb3RvdHlwZSwgJ2NvbnN0cnVjdFNjaGVtYScsIGZ1bmN0aW9uIChvcmlnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoXG5cbikge1xuICAgICAgICAgIGlmICghdGhpcy5jb25maWcucmVzb2x2ZXJzKSB7XG4gICAgICAgICAgICBpZiAoZGVidWdCdWlsZC5ERUJVR19CVUlMRCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAgICAgICAnQXBvbGxvIGludGVncmF0aW9uIGlzIG5vdCBhYmxlIHRvIHRyYWNlIGBBcG9sbG9TZXJ2ZXJgIGluc3RhbmNlcyBjb25zdHJ1Y3RlZCB2aWEgYHNjaGVtYWAgcHJvcGVydHkuJyArXG4gICAgICAgICAgICAgICAgICAgICdJZiB5b3UgYXJlIHVzaW5nIE5lc3RKUyB3aXRoIEFwb2xsbywgcGxlYXNlIHVzZSBgU2VudHJ5LkludGVncmF0aW9ucy5BcG9sbG8oeyB1c2VOZXN0anM6IHRydWUgfSlgIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcubW9kdWxlcykge1xuICAgICAgICAgICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgICAgJ0Fwb2xsbyBpbnRlZ3JhdGlvbiBpcyBub3QgYWJsZSB0byB0cmFjZSBgQXBvbGxvU2VydmVyYCBpbnN0YW5jZXMgY29uc3RydWN0ZWQgdmlhIGBtb2R1bGVzYCBwcm9wZXJ0eS4nLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB1dGlscy5sb2dnZXIuZXJyb3IoJ1NraXBwaW5nIHRyYWNpbmcgYXMgbm8gcmVzb2x2ZXJzIGZvdW5kIG9uIHRoZSBgQXBvbGxvU2VydmVyYCBpbnN0YW5jZS4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXNvbHZlcnMgPSB1dGlscy5hcnJheWlmeSh0aGlzLmNvbmZpZy5yZXNvbHZlcnMpO1xuXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzb2x2ZXJzID0gaW5zdHJ1bWVudFJlc29sdmVycyhyZXNvbHZlcnMsIGdldEN1cnJlbnRIdWIpO1xuXG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufUFwb2xsby5fX2luaXRTdGF0aWMoKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5mdW5jdGlvbiBpbnN0cnVtZW50UmVzb2x2ZXJzKHJlc29sdmVycywgZ2V0Q3VycmVudEh1Yikge1xuICByZXR1cm4gcmVzb2x2ZXJzLm1hcChtb2RlbCA9PiB7XG4gICAgT2JqZWN0LmtleXMobW9kZWwpLmZvckVhY2gocmVzb2x2ZXJHcm91cE5hbWUgPT4ge1xuICAgICAgT2JqZWN0LmtleXMobW9kZWxbcmVzb2x2ZXJHcm91cE5hbWVdKS5mb3JFYWNoKHJlc29sdmVyTmFtZSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWxbcmVzb2x2ZXJHcm91cE5hbWVdW3Jlc29sdmVyTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3cmFwUmVzb2x2ZXIobW9kZWwsIHJlc29sdmVyR3JvdXBOYW1lLCByZXNvbHZlck5hbWUsIGdldEN1cnJlbnRIdWIpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdyYXAgYSBzaW5nbGUgcmVzb2x2ZXIgd2hpY2ggY2FuIGJlIGEgcGFyZW50IG9mIG90aGVyIHJlc29sdmVycyBhbmQvb3IgZGIgb3BlcmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gd3JhcFJlc29sdmVyKFxuICBtb2RlbCxcbiAgcmVzb2x2ZXJHcm91cE5hbWUsXG4gIHJlc29sdmVyTmFtZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGdldEN1cnJlbnRIdWIsXG4pIHtcbiAgdXRpbHMuZmlsbChtb2RlbFtyZXNvbHZlckdyb3VwTmFtZV0sIHJlc29sdmVyTmFtZSwgZnVuY3Rpb24gKG9yaWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudEh1YigpLmdldFNjb3BlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZS5nZXRTcGFuKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvbnN0IHNwYW4gPSBfb3B0aW9uYWxDaGFpbihbcGFyZW50U3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuc3RhcnRDaGlsZCwgJ2NhbGwnLCBfMyA9PiBfMyh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtyZXNvbHZlckdyb3VwTmFtZX0uJHtyZXNvbHZlck5hbWV9YCxcbiAgICAgICAgb3A6ICdncmFwaHFsLnJlc29sdmUnLFxuICAgICAgICBvcmlnaW46ICdhdXRvLmdyYXBocWwuYXBvbGxvJyxcbiAgICAgIH0pXSk7XG5cbiAgICAgIGNvbnN0IHJ2ID0gb3JpZy5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuXG4gICAgICBpZiAodXRpbHMuaXNUaGVuYWJsZShydikpIHtcbiAgICAgICAgcmV0dXJuIHJ2LnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIF9vcHRpb25hbENoYWluKFtzcGFuLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBfNC5lbmQsICdjYWxsJywgXzUgPT4gXzUoKV0pO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfb3B0aW9uYWxDaGFpbihbc3BhbiwgJ29wdGlvbmFsQWNjZXNzJywgXzYgPT4gXzYuZW5kLCAnY2FsbCcsIF83ID0+IF83KCldKTtcblxuICAgICAgcmV0dXJuIHJ2O1xuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnRzLkFwb2xsbyA9IEFwb2xsbztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwb2xsby5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbmNvbnN0IGxhenlMb2FkZWROb2RlUGVyZm9ybWFuY2VNb25pdG9yaW5nSW50ZWdyYXRpb25zID0gW1xuICAoKSA9PiB7XG4gICAgY29uc3QgaW50ZWdyYXRpb24gPSB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICcuL2Fwb2xsbycpXG5cbjtcbiAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLkFwb2xsbygpO1xuICB9LFxuICAoKSA9PiB7XG4gICAgY29uc3QgaW50ZWdyYXRpb24gPSB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICcuL2Fwb2xsbycpXG5cbjtcbiAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLkFwb2xsbyh7IHVzZU5lc3RqczogdHJ1ZSB9KTtcbiAgfSxcbiAgKCkgPT4ge1xuICAgIGNvbnN0IGludGVncmF0aW9uID0gdXRpbHMuZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9ncmFwaHFsJylcblxuO1xuICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uR3JhcGhRTCgpO1xuICB9LFxuICAoKSA9PiB7XG4gICAgY29uc3QgaW50ZWdyYXRpb24gPSB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICcuL21vbmdvJylcblxuO1xuICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uTW9uZ28oKTtcbiAgfSxcbiAgKCkgPT4ge1xuICAgIGNvbnN0IGludGVncmF0aW9uID0gdXRpbHMuZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9tb25nbycpXG5cbjtcbiAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLk1vbmdvKHsgbW9uZ29vc2U6IHRydWUgfSk7XG4gIH0sXG4gICgpID0+IHtcbiAgICBjb25zdCBpbnRlZ3JhdGlvbiA9IHV0aWxzLmR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJy4vbXlzcWwnKVxuXG47XG4gICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbi5NeXNxbCgpO1xuICB9LFxuICAoKSA9PiB7XG4gICAgY29uc3QgaW50ZWdyYXRpb24gPSB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICcuL3Bvc3RncmVzJylcblxuO1xuICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uUG9zdGdyZXMoKTtcbiAgfSxcbl07XG5cbmV4cG9ydHMubGF6eUxvYWRlZE5vZGVQZXJmb3JtYW5jZU1vbml0b3JpbmdJbnRlZ3JhdGlvbnMgPSBsYXp5TG9hZGVkTm9kZVBlcmZvcm1hbmNlTW9uaXRvcmluZ0ludGVncmF0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhenkuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBXSU5ET1cgPSB1dGlscy5HTE9CQUxfT0JKXG5cbjtcblxuZXhwb3J0cy5XSU5ET1cgPSBXSU5ET1c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMuanMnKTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciB0aGF0IGNhbmNlbHMgYW5kIGZpbmlzaGVzIGEgdHJhbnNhY3Rpb24gd2hlbiB0aGUgZ2xvYmFsXG4gKiBkb2N1bWVudCBpcyBoaWRkZW4uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQmFja2dyb3VuZFRhYkRldGVjdGlvbigpIHtcbiAgaWYgKHR5cGVzLldJTkRPVy5kb2N1bWVudCkge1xuICAgIHR5cGVzLldJTkRPVy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCBhY3RpdmVUcmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKSA7XG4gICAgICBpZiAodHlwZXMuV0lORE9XLmRvY3VtZW50LmhpZGRlbiAmJiBhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgICAgICBjb25zdCBzdGF0dXNUeXBlID0gJ2NhbmNlbGxlZCc7XG5cbiAgICAgICAgY29uc3QgeyBvcCwgc3RhdHVzIH0gPSBjb3JlLnNwYW5Ub0pTT04oYWN0aXZlVHJhbnNhY3Rpb24pO1xuXG4gICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiZcbiAgICAgICAgICB1dGlscy5sb2dnZXIubG9nKGBbVHJhY2luZ10gVHJhbnNhY3Rpb246ICR7c3RhdHVzVHlwZX0gLT4gc2luY2UgdGFiIG1vdmVkIHRvIHRoZSBiYWNrZ3JvdW5kLCBvcDogJHtvcH1gKTtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBzZXQgc3RhdHVzIGlmIGl0IGlzIGFscmVhZHkgc2V0LCB0aGlzIHByZXZlbnQgaW1wb3J0YW50IHN0YXR1c2VzIGxpa2VcbiAgICAgICAgLy8gZXJyb3Igb3IgZGF0YSBsb3NzIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gb24gdHJhbnNhY3Rpb24uXG4gICAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uc2V0U3RhdHVzKHN0YXR1c1R5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlP1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uc2V0VGFnKCd2aXNpYmlsaXR5Y2hhbmdlJywgJ2RvY3VtZW50LmhpZGRlbicpO1xuICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbi5lbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdbVHJhY2luZ10gQ291bGQgbm90IHNldCB1cCBiYWNrZ3JvdW5kIHRhYiBkZXRlY3Rpb24gZHVlIHRvIGxhY2sgb2YgZ2xvYmFsIGRvY3VtZW50Jyk7XG4gIH1cbn1cblxuZXhwb3J0cy5yZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24gPSByZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrZ3JvdW5kdGFiLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBiaW5kUmVwb3J0ZXIgPSAoXG4gIGNhbGxiYWNrLFxuICBtZXRyaWMsXG4gIHJlcG9ydEFsbENoYW5nZXMsXG4pID0+IHtcbiAgbGV0IHByZXZWYWx1ZTtcbiAgbGV0IGRlbHRhO1xuICByZXR1cm4gKGZvcmNlUmVwb3J0KSA9PiB7XG4gICAgaWYgKG1ldHJpYy52YWx1ZSA+PSAwKSB7XG4gICAgICBpZiAoZm9yY2VSZXBvcnQgfHwgcmVwb3J0QWxsQ2hhbmdlcykge1xuICAgICAgICBkZWx0YSA9IG1ldHJpYy52YWx1ZSAtIChwcmV2VmFsdWUgfHwgMCk7XG5cbiAgICAgICAgLy8gUmVwb3J0IHRoZSBtZXRyaWMgaWYgdGhlcmUncyBhIG5vbi16ZXJvIGRlbHRhIG9yIGlmIG5vIHByZXZpb3VzXG4gICAgICAgIC8vIHZhbHVlIGV4aXN0cyAod2hpY2ggY2FuIGhhcHBlbiBpbiB0aGUgY2FzZSBvZiB0aGUgZG9jdW1lbnQgYmVjb21pbmdcbiAgICAgICAgLy8gaGlkZGVuIHdoZW4gdGhlIG1ldHJpYyB2YWx1ZSBpcyAwKS5cbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvaXNzdWVzLzE0XG4gICAgICAgIGlmIChkZWx0YSB8fCBwcmV2VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByZXZWYWx1ZSA9IG1ldHJpYy52YWx1ZTtcbiAgICAgICAgICBtZXRyaWMuZGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICBjYWxsYmFjayhtZXRyaWMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5iaW5kUmVwb3J0ZXIgPSBiaW5kUmVwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iaW5kUmVwb3J0ZXIuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1hbnRseSBnZW5lcmF0ZSBhIHVuaXF1ZSwgMzAtY2hhciBzdHJpbmcgYnkgY29tYmluaW5nIGEgdmVyc2lvblxuICogbnVtYmVyLCB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2l0aCBhIDEzLWRpZ2l0IG51bWJlciBpbnRlZ2VyLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5jb25zdCBnZW5lcmF0ZVVuaXF1ZUlEID0gKCkgPT4ge1xuICByZXR1cm4gYHYzLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoOWUxMiAtIDEpKSArIDFlMTJ9YDtcbn07XG5cbmV4cG9ydHMuZ2VuZXJhdGVVbmlxdWVJRCA9IGdlbmVyYXRlVW5pcXVlSUQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZVVuaXF1ZUlELmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzLmpzJyk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBnZXROYXZpZ2F0aW9uRW50cnlGcm9tUGVyZm9ybWFuY2VUaW1pbmcgPSAoKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCB0aW1pbmcgPSB0eXBlcy5XSU5ET1cucGVyZm9ybWFuY2UudGltaW5nO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgdHlwZSA9IHR5cGVzLldJTkRPVy5wZXJmb3JtYW5jZS5uYXZpZ2F0aW9uLnR5cGU7XG5cbiAgY29uc3QgbmF2aWdhdGlvbkVudHJ5ID0ge1xuICAgIGVudHJ5VHlwZTogJ25hdmlnYXRpb24nLFxuICAgIHN0YXJ0VGltZTogMCxcbiAgICB0eXBlOiB0eXBlID09IDIgPyAnYmFja19mb3J3YXJkJyA6IHR5cGUgPT09IDEgPyAncmVsb2FkJyA6ICduYXZpZ2F0ZScsXG4gIH07XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGltaW5nKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdmlnYXRpb25TdGFydCcgJiYga2V5ICE9PSAndG9KU09OJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBuYXZpZ2F0aW9uRW50cnlba2V5XSA9IE1hdGgubWF4KCh0aW1pbmdba2V5IF0gKSAtIHRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIDApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmF2aWdhdGlvbkVudHJ5IDtcbn07XG5cbmNvbnN0IGdldE5hdmlnYXRpb25FbnRyeSA9ICgpID0+IHtcbiAgaWYgKHR5cGVzLldJTkRPVy5fX1dFQl9WSVRBTFNfUE9MWUZJTExfXykge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlcy5XSU5ET1cucGVyZm9ybWFuY2UgJiZcbiAgICAgICgocGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSAmJiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKCduYXZpZ2F0aW9uJylbMF0pIHx8XG4gICAgICAgIGdldE5hdmlnYXRpb25FbnRyeUZyb21QZXJmb3JtYW5jZVRpbWluZygpKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHR5cGVzLldJTkRPVy5wZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlICYmIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoJ25hdmlnYXRpb24nKVswXTtcbiAgfVxufTtcblxuZXhwb3J0cy5nZXROYXZpZ2F0aW9uRW50cnkgPSBnZXROYXZpZ2F0aW9uRW50cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXROYXZpZ2F0aW9uRW50cnkuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGdldE5hdmlnYXRpb25FbnRyeSA9IHJlcXVpcmUoJy4vZ2V0TmF2aWdhdGlvbkVudHJ5LmpzJyk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBnZXRBY3RpdmF0aW9uU3RhcnQgPSAoKSA9PiB7XG4gIGNvbnN0IG5hdkVudHJ5ID0gZ2V0TmF2aWdhdGlvbkVudHJ5LmdldE5hdmlnYXRpb25FbnRyeSgpO1xuICByZXR1cm4gKG5hdkVudHJ5ICYmIG5hdkVudHJ5LmFjdGl2YXRpb25TdGFydCkgfHwgMDtcbn07XG5cbmV4cG9ydHMuZ2V0QWN0aXZhdGlvblN0YXJ0ID0gZ2V0QWN0aXZhdGlvblN0YXJ0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0QWN0aXZhdGlvblN0YXJ0LmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzLmpzJyk7XG5jb25zdCBnZW5lcmF0ZVVuaXF1ZUlEID0gcmVxdWlyZSgnLi9nZW5lcmF0ZVVuaXF1ZUlELmpzJyk7XG5jb25zdCBnZXRBY3RpdmF0aW9uU3RhcnQgPSByZXF1aXJlKCcuL2dldEFjdGl2YXRpb25TdGFydC5qcycpO1xuY29uc3QgZ2V0TmF2aWdhdGlvbkVudHJ5ID0gcmVxdWlyZSgnLi9nZXROYXZpZ2F0aW9uRW50cnkuanMnKTtcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmNvbnN0IGluaXRNZXRyaWMgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgY29uc3QgbmF2RW50cnkgPSBnZXROYXZpZ2F0aW9uRW50cnkuZ2V0TmF2aWdhdGlvbkVudHJ5KCk7XG4gIGxldCBuYXZpZ2F0aW9uVHlwZSA9ICduYXZpZ2F0ZSc7XG5cbiAgaWYgKG5hdkVudHJ5KSB7XG4gICAgaWYgKCh0eXBlcy5XSU5ET1cuZG9jdW1lbnQgJiYgdHlwZXMuV0lORE9XLmRvY3VtZW50LnByZXJlbmRlcmluZykgfHwgZ2V0QWN0aXZhdGlvblN0YXJ0LmdldEFjdGl2YXRpb25TdGFydCgpID4gMCkge1xuICAgICAgbmF2aWdhdGlvblR5cGUgPSAncHJlcmVuZGVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgbmF2aWdhdGlvblR5cGUgPSBuYXZFbnRyeS50eXBlLnJlcGxhY2UoL18vZywgJy0nKSA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gLTEgOiB2YWx1ZSxcbiAgICByYXRpbmc6ICdnb29kJywgLy8gV2lsbCBiZSB1cGRhdGVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgIGRlbHRhOiAwLFxuICAgIGVudHJpZXM6IFtdLFxuICAgIGlkOiBnZW5lcmF0ZVVuaXF1ZUlELmdlbmVyYXRlVW5pcXVlSUQoKSxcbiAgICBuYXZpZ2F0aW9uVHlwZSxcbiAgfTtcbn07XG5cbmV4cG9ydHMuaW5pdE1ldHJpYyA9IGluaXRNZXRyaWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbml0TWV0cmljLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIFRha2VzIGEgcGVyZm9ybWFuY2UgZW50cnkgdHlwZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIGNyZWF0ZXMgYVxuICogYFBlcmZvcm1hbmNlT2JzZXJ2ZXJgIGluc3RhbmNlIHRoYXQgd2lsbCBvYnNlcnZlIHRoZSBzcGVjaWZpZWQgZW50cnkgdHlwZVxuICogd2l0aCBidWZmZXJpbmcgZW5hYmxlZCBhbmQgY2FsbCB0aGUgY2FsbGJhY2sgX2ZvciBlYWNoIGVudHJ5Xy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGFsc28gZmVhdHVyZS1kZXRlY3RzIGVudHJ5IHN1cHBvcnQgYW5kIHdyYXBzIHRoZSBsb2dpYyBpbiBhXG4gKiB0cnkvY2F0Y2ggdG8gYXZvaWQgZXJyb3JzIGluIHVuc3VwcG9ydGluZyBicm93c2Vycy5cbiAqL1xuY29uc3Qgb2JzZXJ2ZSA9IChcbiAgdHlwZSxcbiAgY2FsbGJhY2ssXG4gIG9wdHMsXG4pID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAoUGVyZm9ybWFuY2VPYnNlcnZlci5zdXBwb3J0ZWRFbnRyeVR5cGVzLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICBjb25zdCBwbyA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGxpc3QgPT4ge1xuICAgICAgICBjYWxsYmFjayhsaXN0LmdldEVudHJpZXMoKSApO1xuICAgICAgfSk7XG4gICAgICBwby5vYnNlcnZlKFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBidWZmZXJlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdHMgfHwge30sXG4gICAgICAgICkgLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBwbztcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBEbyBub3RoaW5nLlxuICB9XG4gIHJldHVybjtcbn07XG5cbmV4cG9ydHMub2JzZXJ2ZSA9IG9ic2VydmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzLmpzJyk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBvbkhpZGRlbiA9IChjYiwgb25jZSkgPT4ge1xuICBjb25zdCBvbkhpZGRlbk9yUGFnZUhpZGUgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3BhZ2VoaWRlJyB8fCB0eXBlcy5XSU5ET1cuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgY2IoZXZlbnQpO1xuICAgICAgaWYgKG9uY2UpIHtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uSGlkZGVuT3JQYWdlSGlkZSwgdHJ1ZSk7XG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25IaWRkZW5PclBhZ2VIaWRlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgaWYgKHR5cGVzLldJTkRPVy5kb2N1bWVudCkge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvbkhpZGRlbk9yUGFnZUhpZGUsIHRydWUpO1xuICAgIC8vIFNvbWUgYnJvd3NlcnMgaGF2ZSBidWdneSBpbXBsZW1lbnRhdGlvbnMgb2YgdmlzaWJpbGl0eWNoYW5nZSxcbiAgICAvLyBzbyB3ZSB1c2UgcGFnZWhpZGUgaW4gYWRkaXRpb24sIGp1c3QgdG8gYmUgc2FmZS5cbiAgICBhZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uSGlkZGVuT3JQYWdlSGlkZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMub25IaWRkZW4gPSBvbkhpZGRlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uSGlkZGVuLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBiaW5kUmVwb3J0ZXIgPSByZXF1aXJlKCcuL2xpYi9iaW5kUmVwb3J0ZXIuanMnKTtcbmNvbnN0IGluaXRNZXRyaWMgPSByZXF1aXJlKCcuL2xpYi9pbml0TWV0cmljLmpzJyk7XG5jb25zdCBvYnNlcnZlID0gcmVxdWlyZSgnLi9saWIvb2JzZXJ2ZS5qcycpO1xuY29uc3Qgb25IaWRkZW4gPSByZXF1aXJlKCcuL2xpYi9vbkhpZGRlbi5qcycpO1xuXG4vKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBbQ0xTXShodHRwczovL3dlYi5kZXYvY2xzLykgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHBhZ2UgYW5kXG4gKiBjYWxscyB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBvbmNlIHRoZSB2YWx1ZSBpcyByZWFkeSB0byBiZSByZXBvcnRlZCwgYWxvbmdcbiAqIHdpdGggYWxsIGBsYXlvdXQtc2hpZnRgIHBlcmZvcm1hbmNlIGVudHJpZXMgdGhhdCB3ZXJlIHVzZWQgaW4gdGhlIG1ldHJpY1xuICogdmFsdWUgY2FsY3VsYXRpb24uIFRoZSByZXBvcnRlZCB2YWx1ZSBpcyBhIGBkb3VibGVgIChjb3JyZXNwb25kaW5nIHRvIGFcbiAqIFtsYXlvdXQgc2hpZnQgc2NvcmVdKGh0dHBzOi8vd2ViLmRldi9jbHMvI2xheW91dC1zaGlmdC1zY29yZSkpLlxuICpcbiAqIElmIHRoZSBgcmVwb3J0QWxsQ2hhbmdlc2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYCwgdGhlXG4gKiBgY2FsbGJhY2tgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIHZhbHVlIGlzIGluaXRpYWxseVxuICogZGV0ZXJtaW5lZCBhcyB3ZWxsIGFzIGFueSB0aW1lIHRoZSB2YWx1ZSBjaGFuZ2VzIHRocm91Z2hvdXQgdGhlIHBhZ2VcbiAqIGxpZmVzcGFuLlxuICpcbiAqIF8qKkltcG9ydGFudDoqKiBDTFMgc2hvdWxkIGJlIGNvbnRpbnVhbGx5IG1vbml0b3JlZCBmb3IgY2hhbmdlcyB0aHJvdWdob3V0XG4gKiB0aGUgZW50aXJlIGxpZmVzcGFuIG9mIGEgcGFnZeKAlGluY2x1ZGluZyBpZiB0aGUgdXNlciByZXR1cm5zIHRvIHRoZSBwYWdlIGFmdGVyXG4gKiBpdCdzIGJlZW4gaGlkZGVuL2JhY2tncm91bmRlZC4gSG93ZXZlciwgc2luY2UgYnJvd3NlcnMgb2Z0ZW4gW3dpbGwgbm90IGZpcmVcbiAqIGFkZGl0aW9uYWwgY2FsbGJhY2tzIG9uY2UgdGhlIHVzZXIgaGFzIGJhY2tncm91bmRlZCBhXG4gKiBwYWdlXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvcGFnZS1saWZlY3ljbGUtYXBpLyNhZHZpY2UtaGlkZGVuKSxcbiAqIGBjYWxsYmFja2AgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBzdGF0ZSBjaGFuZ2VzIHRvXG4gKiBoaWRkZW4uIEFzIGEgcmVzdWx0LCB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBtaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAqIGR1cmluZyB0aGUgc2FtZSBwYWdlIGxvYWQuX1xuICovXG5jb25zdCBvbkNMUyA9IChcbiAgb25SZXBvcnQsXG4gIG9wdGlvbnMgPSB7fSxcbikgPT4ge1xuICBjb25zdCBtZXRyaWMgPSBpbml0TWV0cmljLmluaXRNZXRyaWMoJ0NMUycsIDApO1xuICBsZXQgcmVwb3J0O1xuXG4gIGxldCBzZXNzaW9uVmFsdWUgPSAwO1xuICBsZXQgc2Vzc2lvbkVudHJpZXMgPSBbXTtcblxuICAvLyBjb25zdCBoYW5kbGVFbnRyaWVzID0gKGVudHJpZXM6IE1ldHJpY1snZW50cmllcyddKSA9PiB7XG4gIGNvbnN0IGhhbmRsZUVudHJpZXMgPSAoZW50cmllcykgPT4ge1xuICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAvLyBPbmx5IGNvdW50IGxheW91dCBzaGlmdHMgd2l0aG91dCByZWNlbnQgdXNlciBpbnB1dC5cbiAgICAgIGlmICghZW50cnkuaGFkUmVjZW50SW5wdXQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RTZXNzaW9uRW50cnkgPSBzZXNzaW9uRW50cmllc1swXTtcbiAgICAgICAgY29uc3QgbGFzdFNlc3Npb25FbnRyeSA9IHNlc3Npb25FbnRyaWVzW3Nlc3Npb25FbnRyaWVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIElmIHRoZSBlbnRyeSBvY2N1cnJlZCBsZXNzIHRoYW4gMSBzZWNvbmQgYWZ0ZXIgdGhlIHByZXZpb3VzIGVudHJ5IGFuZFxuICAgICAgICAvLyBsZXNzIHRoYW4gNSBzZWNvbmRzIGFmdGVyIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgc2Vzc2lvbiwgaW5jbHVkZSB0aGVcbiAgICAgICAgLy8gZW50cnkgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4gT3RoZXJ3aXNlLCBzdGFydCBhIG5ldyBzZXNzaW9uLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2Vzc2lvblZhbHVlICYmXG4gICAgICAgICAgc2Vzc2lvbkVudHJpZXMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgICAgZW50cnkuc3RhcnRUaW1lIC0gbGFzdFNlc3Npb25FbnRyeS5zdGFydFRpbWUgPCAxMDAwICYmXG4gICAgICAgICAgZW50cnkuc3RhcnRUaW1lIC0gZmlyc3RTZXNzaW9uRW50cnkuc3RhcnRUaW1lIDwgNTAwMFxuICAgICAgICApIHtcbiAgICAgICAgICBzZXNzaW9uVmFsdWUgKz0gZW50cnkudmFsdWU7XG4gICAgICAgICAgc2Vzc2lvbkVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vzc2lvblZhbHVlID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgc2Vzc2lvbkVudHJpZXMgPSBbZW50cnldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2Vzc2lvbiB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBDTFMgdmFsdWUsXG4gICAgICAgIC8vIHVwZGF0ZSBDTFMgYW5kIHRoZSBlbnRyaWVzIGNvbnRyaWJ1dGluZyB0byBpdC5cbiAgICAgICAgaWYgKHNlc3Npb25WYWx1ZSA+IG1ldHJpYy52YWx1ZSkge1xuICAgICAgICAgIG1ldHJpYy52YWx1ZSA9IHNlc3Npb25WYWx1ZTtcbiAgICAgICAgICBtZXRyaWMuZW50cmllcyA9IHNlc3Npb25FbnRyaWVzO1xuICAgICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICAgIHJlcG9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHBvID0gb2JzZXJ2ZS5vYnNlcnZlKCdsYXlvdXQtc2hpZnQnLCBoYW5kbGVFbnRyaWVzKTtcbiAgaWYgKHBvKSB7XG4gICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyLmJpbmRSZXBvcnRlcihvblJlcG9ydCwgbWV0cmljLCBvcHRpb25zLnJlcG9ydEFsbENoYW5nZXMpO1xuXG4gICAgY29uc3Qgc3RvcExpc3RlbmluZyA9ICgpID0+IHtcbiAgICAgIGhhbmRsZUVudHJpZXMocG8udGFrZVJlY29yZHMoKSApO1xuICAgICAgcmVwb3J0KHRydWUpO1xuICAgIH07XG5cbiAgICBvbkhpZGRlbi5vbkhpZGRlbihzdG9wTGlzdGVuaW5nKTtcblxuICAgIHJldHVybiBzdG9wTGlzdGVuaW5nO1xuICB9XG5cbiAgcmV0dXJuO1xufTtcblxuZXhwb3J0cy5vbkNMUyA9IG9uQ0xTO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0Q0xTLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzLmpzJyk7XG5jb25zdCBvbkhpZGRlbiA9IHJlcXVpcmUoJy4vb25IaWRkZW4uanMnKTtcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmxldCBmaXJzdEhpZGRlblRpbWUgPSAtMTtcblxuY29uc3QgaW5pdEhpZGRlblRpbWUgPSAoKSA9PiB7XG4gIC8vIElmIHRoZSBkb2N1bWVudCBpcyBoaWRkZW4gYW5kIG5vdCBwcmVyZW5kZXJpbmcsIGFzc3VtZSBpdCB3YXMgYWx3YXlzXG4gIC8vIGhpZGRlbiBhbmQgdGhlIHBhZ2Ugd2FzIGxvYWRlZCBpbiB0aGUgYmFja2dyb3VuZC5cbiAgaWYgKHR5cGVzLldJTkRPVy5kb2N1bWVudCAmJiB0eXBlcy5XSU5ET1cuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKSB7XG4gICAgZmlyc3RIaWRkZW5UaW1lID0gdHlwZXMuV0lORE9XLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicgJiYgIXR5cGVzLldJTkRPVy5kb2N1bWVudC5wcmVyZW5kZXJpbmcgPyAwIDogSW5maW5pdHk7XG4gIH1cbn07XG5cbmNvbnN0IHRyYWNrQ2hhbmdlcyA9ICgpID0+IHtcbiAgLy8gVXBkYXRlIHRoZSB0aW1lIGlmL3doZW4gdGhlIGRvY3VtZW50IGJlY29tZXMgaGlkZGVuLlxuICBvbkhpZGRlbi5vbkhpZGRlbigoeyB0aW1lU3RhbXAgfSkgPT4ge1xuICAgIGZpcnN0SGlkZGVuVGltZSA9IHRpbWVTdGFtcDtcbiAgfSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBnZXRWaXNpYmlsaXR5V2F0Y2hlciA9IChcblxuKSA9PiB7XG4gIGlmIChmaXJzdEhpZGRlblRpbWUgPCAwKSB7XG4gICAgLy8gSWYgdGhlIGRvY3VtZW50IGlzIGhpZGRlbiB3aGVuIHRoaXMgY29kZSBydW5zLCBhc3N1bWUgaXQgd2FzIGhpZGRlblxuICAgIC8vIHNpbmNlIG5hdmlnYXRpb24gc3RhcnQuIFRoaXMgaXNuJ3QgYSBwZXJmZWN0IGhldXJpc3RpYywgYnV0IGl0J3MgdGhlXG4gICAgLy8gYmVzdCB3ZSBjYW4gZG8gdW50aWwgYW4gQVBJIGlzIGF2YWlsYWJsZSB0byBzdXBwb3J0IHF1ZXJ5aW5nIHBhc3RcbiAgICAvLyB2aXNpYmlsaXR5U3RhdGUuXG4gICAgaW5pdEhpZGRlblRpbWUoKTtcbiAgICB0cmFja0NoYW5nZXMoKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGdldCBmaXJzdEhpZGRlblRpbWUoKSB7XG4gICAgICByZXR1cm4gZmlyc3RIaWRkZW5UaW1lO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnRzLmdldFZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRWaXNpYmlsaXR5V2F0Y2hlci5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgYmluZFJlcG9ydGVyID0gcmVxdWlyZSgnLi9saWIvYmluZFJlcG9ydGVyLmpzJyk7XG5jb25zdCBnZXRWaXNpYmlsaXR5V2F0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2dldFZpc2liaWxpdHlXYXRjaGVyLmpzJyk7XG5jb25zdCBpbml0TWV0cmljID0gcmVxdWlyZSgnLi9saWIvaW5pdE1ldHJpYy5qcycpO1xuY29uc3Qgb2JzZXJ2ZSA9IHJlcXVpcmUoJy4vbGliL29ic2VydmUuanMnKTtcbmNvbnN0IG9uSGlkZGVuID0gcmVxdWlyZSgnLi9saWIvb25IaWRkZW4uanMnKTtcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgW0ZJRF0oaHR0cHM6Ly93ZWIuZGV2L2ZpZC8pIHZhbHVlIGZvciB0aGUgY3VycmVudCBwYWdlIGFuZFxuICogY2FsbHMgdGhlIGBjYWxsYmFja2AgZnVuY3Rpb24gb25jZSB0aGUgdmFsdWUgaXMgcmVhZHksIGFsb25nIHdpdGggdGhlXG4gKiByZWxldmFudCBgZmlyc3QtaW5wdXRgIHBlcmZvcm1hbmNlIGVudHJ5IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZS4gVGhlXG4gKiByZXBvcnRlZCB2YWx1ZSBpcyBhIGBET01IaWdoUmVzVGltZVN0YW1wYC5cbiAqXG4gKiBfKipJbXBvcnRhbnQ6Kiogc2luY2UgRklEIGlzIG9ubHkgcmVwb3J0ZWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlXG4gKiBwYWdlLCBpdCdzIHBvc3NpYmxlIHRoYXQgaXQgd2lsbCBub3QgYmUgcmVwb3J0ZWQgZm9yIHNvbWUgcGFnZSBsb2Fkcy5fXG4gKi9cbmNvbnN0IG9uRklEID0gKG9uUmVwb3J0KSA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIuZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgY29uc3QgbWV0cmljID0gaW5pdE1ldHJpYy5pbml0TWV0cmljKCdGSUQnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQgcmVwb3J0O1xuXG4gIGNvbnN0IGhhbmRsZUVudHJ5ID0gKGVudHJ5KSA9PiB7XG4gICAgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byB0aGUgZmlyc3QgaW5wdXQuXG4gICAgaWYgKGVudHJ5LnN0YXJ0VGltZSA8IHZpc2liaWxpdHlXYXRjaGVyLmZpcnN0SGlkZGVuVGltZSkge1xuICAgICAgbWV0cmljLnZhbHVlID0gZW50cnkucHJvY2Vzc2luZ1N0YXJ0IC0gZW50cnkuc3RhcnRUaW1lO1xuICAgICAgbWV0cmljLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUVudHJpZXMgPSAoZW50cmllcykgPT4ge1xuICAgIChlbnRyaWVzICkuZm9yRWFjaChoYW5kbGVFbnRyeSk7XG4gIH07XG5cbiAgY29uc3QgcG8gPSBvYnNlcnZlLm9ic2VydmUoJ2ZpcnN0LWlucHV0JywgaGFuZGxlRW50cmllcyk7XG4gIHJlcG9ydCA9IGJpbmRSZXBvcnRlci5iaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYyk7XG5cbiAgaWYgKHBvKSB7XG4gICAgb25IaWRkZW4ub25IaWRkZW4oKCkgPT4ge1xuICAgICAgaGFuZGxlRW50cmllcyhwby50YWtlUmVjb3JkcygpICk7XG4gICAgICBwby5kaXNjb25uZWN0KCk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMub25GSUQgPSBvbkZJRDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldEZJRC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3Qgb2JzZXJ2ZSA9IHJlcXVpcmUoJy4uL29ic2VydmUuanMnKTtcblxubGV0IGludGVyYWN0aW9uQ291bnRFc3RpbWF0ZSA9IDA7XG5sZXQgbWluS25vd25JbnRlcmFjdGlvbklkID0gSW5maW5pdHk7XG5sZXQgbWF4S25vd25JbnRlcmFjdGlvbklkID0gMDtcblxuY29uc3QgdXBkYXRlRXN0aW1hdGUgPSAoZW50cmllcykgPT4ge1xuICAoZW50cmllcyApLmZvckVhY2goZSA9PiB7XG4gICAgaWYgKGUuaW50ZXJhY3Rpb25JZCkge1xuICAgICAgbWluS25vd25JbnRlcmFjdGlvbklkID0gTWF0aC5taW4obWluS25vd25JbnRlcmFjdGlvbklkLCBlLmludGVyYWN0aW9uSWQpO1xuICAgICAgbWF4S25vd25JbnRlcmFjdGlvbklkID0gTWF0aC5tYXgobWF4S25vd25JbnRlcmFjdGlvbklkLCBlLmludGVyYWN0aW9uSWQpO1xuXG4gICAgICBpbnRlcmFjdGlvbkNvdW50RXN0aW1hdGUgPSBtYXhLbm93bkludGVyYWN0aW9uSWQgPyAobWF4S25vd25JbnRlcmFjdGlvbklkIC0gbWluS25vd25JbnRlcmFjdGlvbklkKSAvIDcgKyAxIDogMDtcbiAgICB9XG4gIH0pO1xufTtcblxubGV0IHBvO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGBpbnRlcmFjdGlvbkNvdW50YCB2YWx1ZSB1c2luZyB0aGUgbmF0aXZlIEFQSSAoaWYgYXZhaWxhYmxlKVxuICogb3IgdGhlIHBvbHlmaWxsIGVzdGltYXRlIGluIHRoaXMgbW9kdWxlLlxuICovXG5jb25zdCBnZXRJbnRlcmFjdGlvbkNvdW50ID0gKCkgPT4ge1xuICByZXR1cm4gcG8gPyBpbnRlcmFjdGlvbkNvdW50RXN0aW1hdGUgOiBwZXJmb3JtYW5jZS5pbnRlcmFjdGlvbkNvdW50IHx8IDA7XG59O1xuXG4vKipcbiAqIEZlYXR1cmUgZGV0ZWN0cyBuYXRpdmUgc3VwcG9ydCBvciBpbml0aWFsaXplcyB0aGUgcG9seWZpbGwgaWYgbmVlZGVkLlxuICovXG5jb25zdCBpbml0SW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsID0gKCkgPT4ge1xuICBpZiAoJ2ludGVyYWN0aW9uQ291bnQnIGluIHBlcmZvcm1hbmNlIHx8IHBvKSByZXR1cm47XG5cbiAgcG8gPSBvYnNlcnZlLm9ic2VydmUoJ2V2ZW50JywgdXBkYXRlRXN0aW1hdGUsIHtcbiAgICB0eXBlOiAnZXZlbnQnLFxuICAgIGJ1ZmZlcmVkOiB0cnVlLFxuICAgIGR1cmF0aW9uVGhyZXNob2xkOiAwLFxuICB9ICk7XG59O1xuXG5leHBvcnRzLmdldEludGVyYWN0aW9uQ291bnQgPSBnZXRJbnRlcmFjdGlvbkNvdW50O1xuZXhwb3J0cy5pbml0SW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsID0gaW5pdEludGVyYWN0aW9uQ291bnRQb2x5ZmlsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyYWN0aW9uQ291bnRQb2x5ZmlsbC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgYmluZFJlcG9ydGVyID0gcmVxdWlyZSgnLi9saWIvYmluZFJlcG9ydGVyLmpzJyk7XG5jb25zdCBpbml0TWV0cmljID0gcmVxdWlyZSgnLi9saWIvaW5pdE1ldHJpYy5qcycpO1xuY29uc3Qgb2JzZXJ2ZSA9IHJlcXVpcmUoJy4vbGliL29ic2VydmUuanMnKTtcbmNvbnN0IG9uSGlkZGVuID0gcmVxdWlyZSgnLi9saWIvb25IaWRkZW4uanMnKTtcbmNvbnN0IGludGVyYWN0aW9uQ291bnRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vbGliL3BvbHlmaWxscy9pbnRlcmFjdGlvbkNvdW50UG9seWZpbGwuanMnKTtcblxuLypcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJhY3Rpb24gY291bnQgc2luY2UgdGhlIGxhc3QgYmZjYWNoZSByZXN0b3JlIChvciBmb3IgdGhlXG4gKiBmdWxsIHBhZ2UgbGlmZWN5Y2xlIGlmIHRoZXJlIHdlcmUgbm8gYmZjYWNoZSByZXN0b3JlcykuXG4gKi9cbmNvbnN0IGdldEludGVyYWN0aW9uQ291bnRGb3JOYXZpZ2F0aW9uID0gKCkgPT4ge1xuICByZXR1cm4gaW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsLmdldEludGVyYWN0aW9uQ291bnQoKTtcbn07XG5cbi8vIFRvIHByZXZlbnQgdW5uZWNlc3NhcnkgbWVtb3J5IHVzYWdlIG9uIHBhZ2VzIHdpdGggbG90cyBvZiBpbnRlcmFjdGlvbnMsXG4vLyBzdG9yZSBhdCBtb3N0IDEwIG9mIHRoZSBsb25nZXN0IGludGVyYWN0aW9ucyB0byBjb25zaWRlciBhcyBJTlAgY2FuZGlkYXRlcy5cbmNvbnN0IE1BWF9JTlRFUkFDVElPTlNfVE9fQ09OU0lERVIgPSAxMDtcblxuLy8gQSBsaXN0IG9mIGxvbmdlc3QgaW50ZXJhY3Rpb25zIG9uIHRoZSBwYWdlIChieSBsYXRlbmN5KSBzb3J0ZWQgc28gdGhlXG4vLyBsb25nZXN0IG9uZSBpcyBmaXJzdC4gVGhlIGxpc3QgaXMgYXMgbW9zdCBNQVhfSU5URVJBQ1RJT05TX1RPX0NPTlNJREVSIGxvbmcuXG5jb25zdCBsb25nZXN0SW50ZXJhY3Rpb25MaXN0ID0gW107XG5cbi8vIEEgbWFwcGluZyBvZiBsb25nZXN0IGludGVyYWN0aW9ucyBieSB0aGVpciBpbnRlcmFjdGlvbiBJRC5cbi8vIFRoaXMgaXMgdXNlZCBmb3IgZmFzdGVyIGxvb2t1cC5cbmNvbnN0IGxvbmdlc3RJbnRlcmFjdGlvbk1hcCA9IHt9O1xuXG4vKipcbiAqIFRha2VzIGEgcGVyZm9ybWFuY2UgZW50cnkgYW5kIGFkZHMgaXQgdG8gdGhlIGxpc3Qgb2Ygd29yc3QgaW50ZXJhY3Rpb25zXG4gKiBpZiBpdHMgZHVyYXRpb24gaXMgbG9uZyBlbm91Z2ggdG8gbWFrZSBpdCBhbW9uZyB0aGUgd29yc3QuIElmIHRoZVxuICogZW50cnkgaXMgcGFydCBvZiBhbiBleGlzdGluZyBpbnRlcmFjdGlvbiwgaXQgaXMgbWVyZ2VkIGFuZCB0aGUgbGF0ZW5jeVxuICogYW5kIGVudHJpZXMgbGlzdCBpcyB1cGRhdGVkIGFzIG5lZWRlZC5cbiAqL1xuY29uc3QgcHJvY2Vzc0VudHJ5ID0gKGVudHJ5KSA9PiB7XG4gIC8vIFRoZSBsZWFzdC1sb25nIG9mIHRoZSAxMCBsb25nZXN0IGludGVyYWN0aW9ucy5cbiAgY29uc3QgbWluTG9uZ2VzdEludGVyYWN0aW9uID0gbG9uZ2VzdEludGVyYWN0aW9uTGlzdFtsb25nZXN0SW50ZXJhY3Rpb25MaXN0Lmxlbmd0aCAtIDFdO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gIGNvbnN0IGV4aXN0aW5nSW50ZXJhY3Rpb24gPSBsb25nZXN0SW50ZXJhY3Rpb25NYXBbZW50cnkuaW50ZXJhY3Rpb25JZF07XG5cbiAgLy8gT25seSBwcm9jZXNzIHRoZSBlbnRyeSBpZiBpdCdzIHBvc3NpYmx5IG9uZSBvZiB0aGUgdGVuIGxvbmdlc3QsXG4gIC8vIG9yIGlmIGl0J3MgcGFydCBvZiBhbiBleGlzdGluZyBpbnRlcmFjdGlvbi5cbiAgaWYgKFxuICAgIGV4aXN0aW5nSW50ZXJhY3Rpb24gfHxcbiAgICBsb25nZXN0SW50ZXJhY3Rpb25MaXN0Lmxlbmd0aCA8IE1BWF9JTlRFUkFDVElPTlNfVE9fQ09OU0lERVIgfHxcbiAgICBlbnRyeS5kdXJhdGlvbiA+IG1pbkxvbmdlc3RJbnRlcmFjdGlvbi5sYXRlbmN5XG4gICkge1xuICAgIC8vIElmIHRoZSBpbnRlcmFjdGlvbiBhbHJlYWR5IGV4aXN0cywgdXBkYXRlIGl0LiBPdGhlcndpc2UgY3JlYXRlIG9uZS5cbiAgICBpZiAoZXhpc3RpbmdJbnRlcmFjdGlvbikge1xuICAgICAgZXhpc3RpbmdJbnRlcmFjdGlvbi5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgZXhpc3RpbmdJbnRlcmFjdGlvbi5sYXRlbmN5ID0gTWF0aC5tYXgoZXhpc3RpbmdJbnRlcmFjdGlvbi5sYXRlbmN5LCBlbnRyeS5kdXJhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uID0ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBpZDogZW50cnkuaW50ZXJhY3Rpb25JZCxcbiAgICAgICAgbGF0ZW5jeTogZW50cnkuZHVyYXRpb24sXG4gICAgICAgIGVudHJpZXM6IFtlbnRyeV0sXG4gICAgICB9O1xuICAgICAgbG9uZ2VzdEludGVyYWN0aW9uTWFwW2ludGVyYWN0aW9uLmlkXSA9IGludGVyYWN0aW9uO1xuICAgICAgbG9uZ2VzdEludGVyYWN0aW9uTGlzdC5wdXNoKGludGVyYWN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IHRoZSBlbnRyaWVzIGJ5IGxhdGVuY3kgKGRlc2NlbmRpbmcpIGFuZCBrZWVwIG9ubHkgdGhlIHRvcCB0ZW4uXG4gICAgbG9uZ2VzdEludGVyYWN0aW9uTGlzdC5zb3J0KChhLCBiKSA9PiBiLmxhdGVuY3kgLSBhLmxhdGVuY3kpO1xuICAgIGxvbmdlc3RJbnRlcmFjdGlvbkxpc3Quc3BsaWNlKE1BWF9JTlRFUkFDVElPTlNfVE9fQ09OU0lERVIpLmZvckVhY2goaSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgbG9uZ2VzdEludGVyYWN0aW9uTWFwW2kuaWRdO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBwOTggbG9uZ2VzdCBpbnRlcmFjdGlvbiBiYXNlZCBvbiB0aGUgc3RvcmVkXG4gKiBpbnRlcmFjdGlvbiBjYW5kaWRhdGVzIGFuZCB0aGUgaW50ZXJhY3Rpb24gY291bnQgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4gKi9cbmNvbnN0IGVzdGltYXRlUDk4TG9uZ2VzdEludGVyYWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBjYW5kaWRhdGVJbnRlcmFjdGlvbkluZGV4ID0gTWF0aC5taW4oXG4gICAgbG9uZ2VzdEludGVyYWN0aW9uTGlzdC5sZW5ndGggLSAxLFxuICAgIE1hdGguZmxvb3IoZ2V0SW50ZXJhY3Rpb25Db3VudEZvck5hdmlnYXRpb24oKSAvIDUwKSxcbiAgKTtcblxuICByZXR1cm4gbG9uZ2VzdEludGVyYWN0aW9uTGlzdFtjYW5kaWRhdGVJbnRlcmFjdGlvbkluZGV4XTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgW0lOUF0oaHR0cHM6Ly93ZWIuZGV2L3Jlc3BvbnNpdmVuZXNzLykgdmFsdWUgZm9yIHRoZSBjdXJyZW50XG4gKiBwYWdlIGFuZCBjYWxscyB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBvbmNlIHRoZSB2YWx1ZSBpcyByZWFkeSwgYWxvbmcgd2l0aFxuICogdGhlIGBldmVudGAgcGVyZm9ybWFuY2UgZW50cmllcyByZXBvcnRlZCBmb3IgdGhhdCBpbnRlcmFjdGlvbi4gVGhlIHJlcG9ydGVkXG4gKiB2YWx1ZSBpcyBhIGBET01IaWdoUmVzVGltZVN0YW1wYC5cbiAqXG4gKiBBIGN1c3RvbSBgZHVyYXRpb25UaHJlc2hvbGRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiBvcHRpb25hbGx5IGJlIHBhc3NlZCB0b1xuICogY29udHJvbCB3aGF0IGBldmVudC10aW1pbmdgIGVudHJpZXMgYXJlIGNvbnNpZGVyZWQgZm9yIElOUCByZXBvcnRpbmcuIFRoZVxuICogZGVmYXVsdCB0aHJlc2hvbGQgaXMgYDQwYCwgd2hpY2ggbWVhbnMgSU5QIHNjb3JlcyBvZiBsZXNzIHRoYW4gNDAgYXJlXG4gKiByZXBvcnRlZCBhcyAwLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBhZmZlY3QgeW91ciA3NXRoIHBlcmNlbnRpbGUgSU5QIHZhbHVlXG4gKiB1bmxlc3MgdGhhdCB2YWx1ZSBpcyBhbHNvIGxlc3MgdGhhbiA0MCAod2VsbCBiZWxvdyB0aGUgcmVjb21tZW5kZWRcbiAqIFtnb29kXShodHRwczovL3dlYi5kZXYvaW5wLyN3aGF0LWlzLWEtZ29vZC1pbnAtc2NvcmUpIHRocmVzaG9sZCkuXG4gKlxuICogSWYgdGhlIGByZXBvcnRBbGxDaGFuZ2VzYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLCB0aGVcbiAqIGBjYWxsYmFja2AgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYXMgc29vbiBhcyB0aGUgdmFsdWUgaXMgaW5pdGlhbGx5XG4gKiBkZXRlcm1pbmVkIGFzIHdlbGwgYXMgYW55IHRpbWUgdGhlIHZhbHVlIGNoYW5nZXMgdGhyb3VnaG91dCB0aGUgcGFnZVxuICogbGlmZXNwYW4uXG4gKlxuICogXyoqSW1wb3J0YW50OioqIElOUCBzaG91bGQgYmUgY29udGludWFsbHkgbW9uaXRvcmVkIGZvciBjaGFuZ2VzIHRocm91Z2hvdXRcbiAqIHRoZSBlbnRpcmUgbGlmZXNwYW4gb2YgYSBwYWdl4oCUaW5jbHVkaW5nIGlmIHRoZSB1c2VyIHJldHVybnMgdG8gdGhlIHBhZ2UgYWZ0ZXJcbiAqIGl0J3MgYmVlbiBoaWRkZW4vYmFja2dyb3VuZGVkLiBIb3dldmVyLCBzaW5jZSBicm93c2VycyBvZnRlbiBbd2lsbCBub3QgZmlyZVxuICogYWRkaXRpb25hbCBjYWxsYmFja3Mgb25jZSB0aGUgdXNlciBoYXMgYmFja2dyb3VuZGVkIGFcbiAqIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vYmxvZy9wYWdlLWxpZmVjeWNsZS1hcGkvI2FkdmljZS1oaWRkZW4pLFxuICogYGNhbGxiYWNrYCBpcyBhbHdheXMgY2FsbGVkIHdoZW4gdGhlIHBhZ2UncyB2aXNpYmlsaXR5IHN0YXRlIGNoYW5nZXMgdG9cbiAqIGhpZGRlbi4gQXMgYSByZXN1bHQsIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xuICogZHVyaW5nIHRoZSBzYW1lIHBhZ2UgbG9hZC5fXG4gKi9cbmNvbnN0IG9uSU5QID0gKG9uUmVwb3J0LCBvcHRzKSA9PiB7XG4gIC8vIFNldCBkZWZhdWx0c1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgLy8gaHR0cHM6Ly93ZWIuZGV2L2lucC8jd2hhdCdzLWEtJTIyZ29vZCUyMi1pbnAtdmFsdWVcbiAgLy8gY29uc3QgdGhyZXNob2xkcyA9IFsyMDAsIDUwMF07XG5cbiAgLy8gVE9ETyhwaGlsaXB3YWx0b24pOiByZW1vdmUgb25jZSB0aGUgcG9seWZpbGwgaXMgbm8gbG9uZ2VyIG5lZWRlZC5cbiAgaW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsLmluaXRJbnRlcmFjdGlvbkNvdW50UG9seWZpbGwoKTtcblxuICBjb25zdCBtZXRyaWMgPSBpbml0TWV0cmljLmluaXRNZXRyaWMoJ0lOUCcpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCByZXBvcnQ7XG5cbiAgY29uc3QgaGFuZGxlRW50cmllcyA9IChlbnRyaWVzKSA9PiB7XG4gICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgIGlmIChlbnRyeS5pbnRlcmFjdGlvbklkKSB7XG4gICAgICAgIHByb2Nlc3NFbnRyeShlbnRyeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVudHJpZXMgb2YgdHlwZSBgZmlyc3QtaW5wdXRgIGRvbid0IGN1cnJlbnRseSBoYXZlIGFuIGBpbnRlcmFjdGlvbklkYCxcbiAgICAgIC8vIHNvIHRvIGNvbnNpZGVyIHRoZW0gaW4gSU5QIHdlIGhhdmUgdG8gZmlyc3QgY2hlY2sgdGhhdCBhbiBleGlzdGluZ1xuICAgICAgLy8gZW50cnkgZG9lc24ndCBtYXRjaCB0aGUgYGR1cmF0aW9uYCBhbmQgYHN0YXJ0VGltZWAuXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpYyBhc3N1bWVzIHRoYXQgYGV2ZW50YCBlbnRyaWVzIGFyZSBkaXNwYXRjaGVkXG4gICAgICAvLyBiZWZvcmUgYGZpcnN0LWlucHV0YCBlbnRyaWVzLiBUaGlzIGlzIHRydWUgaW4gQ2hyb21lIGJ1dCBpdCBpcyBub3RcbiAgICAgIC8vIHRydWUgaW4gRmlyZWZveDsgaG93ZXZlciwgRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgaW50ZXJhY3Rpb25JZCwgc29cbiAgICAgIC8vIGl0J3Mgbm90IGFuIGlzc3VlIGF0IHRoZSBtb21lbnQuXG4gICAgICAvLyBUT0RPKHBoaWxpcHdhbHRvbik6IHJlbW92ZSBvbmNlIGNyYnVnLmNvbS8xMzI1ODI2IGlzIGZpeGVkLlxuICAgICAgaWYgKGVudHJ5LmVudHJ5VHlwZSA9PT0gJ2ZpcnN0LWlucHV0Jykge1xuICAgICAgICBjb25zdCBub01hdGNoaW5nRW50cnkgPSAhbG9uZ2VzdEludGVyYWN0aW9uTGlzdC5zb21lKGludGVyYWN0aW9uID0+IHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb24uZW50cmllcy5zb21lKHByZXZFbnRyeSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuZHVyYXRpb24gPT09IHByZXZFbnRyeS5kdXJhdGlvbiAmJiBlbnRyeS5zdGFydFRpbWUgPT09IHByZXZFbnRyeS5zdGFydFRpbWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm9NYXRjaGluZ0VudHJ5KSB7XG4gICAgICAgICAgcHJvY2Vzc0VudHJ5KGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wID0gZXN0aW1hdGVQOThMb25nZXN0SW50ZXJhY3Rpb24oKTtcblxuICAgIGlmIChpbnAgJiYgaW5wLmxhdGVuY3kgIT09IG1ldHJpYy52YWx1ZSkge1xuICAgICAgbWV0cmljLnZhbHVlID0gaW5wLmxhdGVuY3k7XG4gICAgICBtZXRyaWMuZW50cmllcyA9IGlucC5lbnRyaWVzO1xuICAgICAgcmVwb3J0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBvID0gb2JzZXJ2ZS5vYnNlcnZlKCdldmVudCcsIGhhbmRsZUVudHJpZXMsIHtcbiAgICAvLyBFdmVudCBUaW1pbmcgZW50cmllcyBoYXZlIHRoZWlyIGR1cmF0aW9ucyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IDhtcyxcbiAgICAvLyBzbyBhIGR1cmF0aW9uIG9mIDQwbXMgd291bGQgYmUgYW55IGV2ZW50IHRoYXQgc3BhbnMgMi41IG9yIG1vcmUgZnJhbWVzXG4gICAgLy8gYXQgNjBIei4gVGhpcyB0aHJlc2hvbGQgaXMgY2hvc2VuIHRvIHN0cmlrZSBhIGJhbGFuY2UgYmV0d2VlbiB1c2VmdWxuZXNzXG4gICAgLy8gYW5kIHBlcmZvcm1hbmNlLiBSdW5uaW5nIHRoaXMgY2FsbGJhY2sgZm9yIGFueSBpbnRlcmFjdGlvbiB0aGF0IHNwYW5zXG4gICAgLy8ganVzdCBvbmUgb3IgdHdvIGZyYW1lcyBpcyBsaWtlbHkgbm90IHdvcnRoIHRoZSBpbnNpZ2h0IHRoYXQgY291bGQgYmVcbiAgICAvLyBnYWluZWQuXG4gICAgZHVyYXRpb25UaHJlc2hvbGQ6IG9wdHMuZHVyYXRpb25UaHJlc2hvbGQgfHwgNDAsXG4gIH0gKTtcblxuICByZXBvcnQgPSBiaW5kUmVwb3J0ZXIuYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIG9wdHMucmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgaWYgKHBvKSB7XG4gICAgLy8gQWxzbyBvYnNlcnZlIGVudHJpZXMgb2YgdHlwZSBgZmlyc3QtaW5wdXRgLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlc1xuICAgIC8vIHdoZXJlIHRoZSBmaXJzdCBpbnRlcmFjdGlvbiBpcyBsZXNzIHRoYW4gdGhlIGBkdXJhdGlvblRocmVzaG9sZGAuXG4gICAgcG8ub2JzZXJ2ZSh7IHR5cGU6ICdmaXJzdC1pbnB1dCcsIGJ1ZmZlcmVkOiB0cnVlIH0pO1xuXG4gICAgb25IaWRkZW4ub25IaWRkZW4oKCkgPT4ge1xuICAgICAgaGFuZGxlRW50cmllcyhwby50YWtlUmVjb3JkcygpICk7XG5cbiAgICAgIC8vIElmIHRoZSBpbnRlcmFjdGlvbiBjb3VudCBzaG93cyB0aGF0IHRoZXJlIHdlcmUgaW50ZXJhY3Rpb25zIGJ1dFxuICAgICAgLy8gbm9uZSB3ZXJlIGNhcHR1cmVkIGJ5IHRoZSBQZXJmb3JtYW5jZU9ic2VydmVyLCByZXBvcnQgYSBsYXRlbmN5IG9mIDAuXG4gICAgICBpZiAobWV0cmljLnZhbHVlIDwgMCAmJiBnZXRJbnRlcmFjdGlvbkNvdW50Rm9yTmF2aWdhdGlvbigpID4gMCkge1xuICAgICAgICBtZXRyaWMudmFsdWUgPSAwO1xuICAgICAgICBtZXRyaWMuZW50cmllcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydHMub25JTlAgPSBvbklOUDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldElOUC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuLi90eXBlcy5qcycpO1xuY29uc3QgYmluZFJlcG9ydGVyID0gcmVxdWlyZSgnLi9saWIvYmluZFJlcG9ydGVyLmpzJyk7XG5jb25zdCBnZXRBY3RpdmF0aW9uU3RhcnQgPSByZXF1aXJlKCcuL2xpYi9nZXRBY3RpdmF0aW9uU3RhcnQuanMnKTtcbmNvbnN0IGdldFZpc2liaWxpdHlXYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXIuanMnKTtcbmNvbnN0IGluaXRNZXRyaWMgPSByZXF1aXJlKCcuL2xpYi9pbml0TWV0cmljLmpzJyk7XG5jb25zdCBvYnNlcnZlID0gcmVxdWlyZSgnLi9saWIvb2JzZXJ2ZS5qcycpO1xuY29uc3Qgb25IaWRkZW4gPSByZXF1aXJlKCcuL2xpYi9vbkhpZGRlbi5qcycpO1xuXG4vKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuY29uc3QgcmVwb3J0ZWRNZXRyaWNJRHMgPSB7fTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBbTENQXShodHRwczovL3dlYi5kZXYvbGNwLykgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHBhZ2UgYW5kXG4gKiBjYWxscyB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBvbmNlIHRoZSB2YWx1ZSBpcyByZWFkeSAoYWxvbmcgd2l0aCB0aGVcbiAqIHJlbGV2YW50IGBsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnRgIHBlcmZvcm1hbmNlIGVudHJ5IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZVxuICogdmFsdWUpLiBUaGUgcmVwb3J0ZWQgdmFsdWUgaXMgYSBgRE9NSGlnaFJlc1RpbWVTdGFtcGAuXG4gKi9cbmNvbnN0IG9uTENQID0gKG9uUmVwb3J0KSA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIuZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgY29uc3QgbWV0cmljID0gaW5pdE1ldHJpYy5pbml0TWV0cmljKCdMQ1AnKTtcbiAgbGV0IHJlcG9ydDtcblxuICBjb25zdCBoYW5kbGVFbnRyaWVzID0gKGVudHJpZXMpID0+IHtcbiAgICBjb25zdCBsYXN0RW50cnkgPSBlbnRyaWVzW2VudHJpZXMubGVuZ3RoIC0gMV0gO1xuICAgIGlmIChsYXN0RW50cnkpIHtcbiAgICAgIC8vIFRoZSBzdGFydFRpbWUgYXR0cmlidXRlIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZW5kZXJUaW1lIGlmIGl0IGlzXG4gICAgICAvLyBub3QgMCwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgbG9hZFRpbWUgb3RoZXJ3aXNlLiBUaGUgYWN0aXZhdGlvblN0YXJ0XG4gICAgICAvLyByZWZlcmVuY2UgaXMgdXNlZCBiZWNhdXNlIExDUCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gcGFnZSBhY3RpdmF0aW9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBuYXZpZ2F0aW9uIHN0YXJ0IGlmIHRoZSBwYWdlIHdhcyBwcmVyZW5kZXJlZC5cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgobGFzdEVudHJ5LnN0YXJ0VGltZSAtIGdldEFjdGl2YXRpb25TdGFydC5nZXRBY3RpdmF0aW9uU3RhcnQoKSwgMCk7XG5cbiAgICAgIC8vIE9ubHkgcmVwb3J0IGlmIHRoZSBwYWdlIHdhc24ndCBoaWRkZW4gcHJpb3IgdG8gTENQLlxuICAgICAgaWYgKHZhbHVlIDwgdmlzaWJpbGl0eVdhdGNoZXIuZmlyc3RIaWRkZW5UaW1lKSB7XG4gICAgICAgIG1ldHJpYy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBtZXRyaWMuZW50cmllcyA9IFtsYXN0RW50cnldO1xuICAgICAgICByZXBvcnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcG8gPSBvYnNlcnZlLm9ic2VydmUoJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcsIGhhbmRsZUVudHJpZXMpO1xuXG4gIGlmIChwbykge1xuICAgIHJlcG9ydCA9IGJpbmRSZXBvcnRlci5iaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYyk7XG5cbiAgICBjb25zdCBzdG9wTGlzdGVuaW5nID0gKCkgPT4ge1xuICAgICAgaWYgKCFyZXBvcnRlZE1ldHJpY0lEc1ttZXRyaWMuaWRdKSB7XG4gICAgICAgIGhhbmRsZUVudHJpZXMocG8udGFrZVJlY29yZHMoKSApO1xuICAgICAgICBwby5kaXNjb25uZWN0KCk7XG4gICAgICAgIHJlcG9ydGVkTWV0cmljSURzW21ldHJpYy5pZF0gPSB0cnVlO1xuICAgICAgICByZXBvcnQodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFN0b3AgbGlzdGVuaW5nIGFmdGVyIGlucHV0LiBOb3RlOiB3aGlsZSBzY3JvbGxpbmcgaXMgYW4gaW5wdXQgdGhhdFxuICAgIC8vIHN0b3AgTENQIG9ic2VydmF0aW9uLCBpdCdzIHVucmVsaWFibGUgc2luY2UgaXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHlcbiAgICAvLyBnZW5lcmF0ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy83NVxuICAgIFsna2V5ZG93bicsICdjbGljayddLmZvckVhY2godHlwZSA9PiB7XG4gICAgICBpZiAodHlwZXMuV0lORE9XLmRvY3VtZW50KSB7XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgc3RvcExpc3RlbmluZywgeyBvbmNlOiB0cnVlLCBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb25IaWRkZW4ub25IaWRkZW4oc3RvcExpc3RlbmluZywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gc3RvcExpc3RlbmluZztcbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbmV4cG9ydHMub25MQ1AgPSBvbkxDUDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldExDUC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuLi90eXBlcy5qcycpO1xuY29uc3QgYmluZFJlcG9ydGVyID0gcmVxdWlyZSgnLi9saWIvYmluZFJlcG9ydGVyLmpzJyk7XG5jb25zdCBnZXRBY3RpdmF0aW9uU3RhcnQgPSByZXF1aXJlKCcuL2xpYi9nZXRBY3RpdmF0aW9uU3RhcnQuanMnKTtcbmNvbnN0IGdldE5hdmlnYXRpb25FbnRyeSA9IHJlcXVpcmUoJy4vbGliL2dldE5hdmlnYXRpb25FbnRyeS5qcycpO1xuY29uc3QgaW5pdE1ldHJpYyA9IHJlcXVpcmUoJy4vbGliL2luaXRNZXRyaWMuanMnKTtcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogUnVucyBpbiB0aGUgbmV4dCB0YXNrIGFmdGVyIHRoZSBwYWdlIGlzIGRvbmUgbG9hZGluZyBhbmQvb3IgcHJlcmVuZGVyaW5nLlxuICogQHBhcmFtIGNhbGxiYWNrXG4gKi9cbmNvbnN0IHdoZW5SZWFkeSA9IChjYWxsYmFjaykgPT4ge1xuICBpZiAoIXR5cGVzLldJTkRPVy5kb2N1bWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlcy5XSU5ET1cuZG9jdW1lbnQucHJlcmVuZGVyaW5nKSB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcigncHJlcmVuZGVyaW5nY2hhbmdlJywgKCkgPT4gd2hlblJlYWR5KGNhbGxiYWNrKSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZXMuV0lORE9XLmRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdjb21wbGV0ZScpIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gd2hlblJlYWR5KGNhbGxiYWNrKSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUXVldWUgYSB0YXNrIHNvIHRoZSBjYWxsYmFjayBydW5zIGFmdGVyIGBsb2FkRXZlbnRFbmRgLlxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFtUVEZCXShodHRwczovL3dlYi5kZXYvdGltZS10by1maXJzdC1ieXRlLykgdmFsdWUgZm9yIHRoZVxuICogY3VycmVudCBwYWdlIGFuZCBjYWxscyB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBvbmNlIHRoZSBwYWdlIGhhcyBsb2FkZWQsXG4gKiBhbG9uZyB3aXRoIHRoZSByZWxldmFudCBgbmF2aWdhdGlvbmAgcGVyZm9ybWFuY2UgZW50cnkgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG4gKiB2YWx1ZS4gVGhlIHJlcG9ydGVkIHZhbHVlIGlzIGEgYERPTUhpZ2hSZXNUaW1lU3RhbXBgLlxuICpcbiAqIE5vdGUsIHRoaXMgZnVuY3Rpb24gd2FpdHMgdW50aWwgYWZ0ZXIgdGhlIHBhZ2UgaXMgbG9hZGVkIHRvIGNhbGwgYGNhbGxiYWNrYFxuICogaW4gb3JkZXIgdG8gZW5zdXJlIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBgbmF2aWdhdGlvbmAgZW50cnkgYXJlIHBvcHVsYXRlZC5cbiAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHJlcG9ydCBvbiBvdGhlciBtZXRyaWNzIGV4cG9zZWQgYnkgdGhlXG4gKiBbTmF2aWdhdGlvbiBUaW1pbmcgQVBJXShodHRwczovL3czYy5naXRodWIuaW8vbmF2aWdhdGlvbi10aW1pbmcvKS4gRm9yXG4gKiBleGFtcGxlLCB0aGUgVFRGQiBtZXRyaWMgc3RhcnRzIGZyb20gdGhlIHBhZ2UncyBbdGltZVxuICogb3JpZ2luXShodHRwczovL3d3dy53My5vcmcvVFIvaHItdGltZS0yLyNzZWMtdGltZS1vcmlnaW4pLCB3aGljaCBtZWFucyBpdFxuICogaW5jbHVkZXMgdGltZSBzcGVudCBvbiBETlMgbG9va3VwLCBjb25uZWN0aW9uIG5lZ290aWF0aW9uLCBuZXR3b3JrIGxhdGVuY3ksXG4gKiBhbmQgc2VydmVyIHByb2Nlc3NpbmcgdGltZS5cbiAqL1xuY29uc3Qgb25UVEZCID0gKG9uUmVwb3J0LCBvcHRzKSA9PiB7XG4gIC8vIFNldCBkZWZhdWx0c1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgLy8gaHR0cHM6Ly93ZWIuZGV2L3R0ZmIvI3doYXQtaXMtYS1nb29kLXR0ZmItc2NvcmVcbiAgLy8gY29uc3QgdGhyZXNob2xkcyA9IFs4MDAsIDE4MDBdO1xuXG4gIGNvbnN0IG1ldHJpYyA9IGluaXRNZXRyaWMuaW5pdE1ldHJpYygnVFRGQicpO1xuICBjb25zdCByZXBvcnQgPSBiaW5kUmVwb3J0ZXIuYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIG9wdHMucmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgd2hlblJlYWR5KCgpID0+IHtcbiAgICBjb25zdCBuYXZFbnRyeSA9IGdldE5hdmlnYXRpb25FbnRyeS5nZXROYXZpZ2F0aW9uRW50cnkoKSA7XG5cbiAgICBpZiAobmF2RW50cnkpIHtcbiAgICAgIC8vIFRoZSBhY3RpdmF0aW9uU3RhcnQgcmVmZXJlbmNlIGlzIHVzZWQgYmVjYXVzZSBUVEZCIHNob3VsZCBiZVxuICAgICAgLy8gcmVsYXRpdmUgdG8gcGFnZSBhY3RpdmF0aW9uIHJhdGhlciB0aGFuIG5hdmlnYXRpb24gc3RhcnQgaWYgdGhlXG4gICAgICAvLyBwYWdlIHdhcyBwcmVyZW5kZXJlZC4gQnV0IGluIGNhc2VzIHdoZXJlIGBhY3RpdmF0aW9uU3RhcnRgIG9jY3Vyc1xuICAgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQsIHRoaXMgdGltZSBzaG91bGQgYmUgY2xhbXBlZCBhdCAwLlxuICAgICAgbWV0cmljLnZhbHVlID0gTWF0aC5tYXgobmF2RW50cnkucmVzcG9uc2VTdGFydCAtIGdldEFjdGl2YXRpb25TdGFydC5nZXRBY3RpdmF0aW9uU3RhcnQoKSwgMCk7XG5cbiAgICAgIC8vIEluIHNvbWUgY2FzZXMgdGhlIHZhbHVlIHJlcG9ydGVkIGlzIG5lZ2F0aXZlIG9yIGlzIGxhcmdlclxuICAgICAgLy8gdGhhbiB0aGUgY3VycmVudCBwYWdlIHRpbWUuIElnbm9yZSB0aGVzZSBjYXNlczpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvMTM3XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvaXNzdWVzLzE2MlxuICAgICAgaWYgKG1ldHJpYy52YWx1ZSA8IDAgfHwgbWV0cmljLnZhbHVlID4gcGVyZm9ybWFuY2Uubm93KCkpIHJldHVybjtcblxuICAgICAgbWV0cmljLmVudHJpZXMgPSBbbmF2RW50cnldO1xuXG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydHMub25UVEZCID0gb25UVEZCO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25UVEZCLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi9jb21tb24vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGdldENMUyA9IHJlcXVpcmUoJy4vd2ViLXZpdGFscy9nZXRDTFMuanMnKTtcbmNvbnN0IGdldEZJRCA9IHJlcXVpcmUoJy4vd2ViLXZpdGFscy9nZXRGSUQuanMnKTtcbmNvbnN0IGdldElOUCA9IHJlcXVpcmUoJy4vd2ViLXZpdGFscy9nZXRJTlAuanMnKTtcbmNvbnN0IGdldExDUCA9IHJlcXVpcmUoJy4vd2ViLXZpdGFscy9nZXRMQ1AuanMnKTtcbmNvbnN0IG9ic2VydmUgPSByZXF1aXJlKCcuL3dlYi12aXRhbHMvbGliL29ic2VydmUuanMnKTtcbmNvbnN0IG9uVFRGQiA9IHJlcXVpcmUoJy4vd2ViLXZpdGFscy9vblRURkIuanMnKTtcblxuY29uc3QgaGFuZGxlcnMgPSB7fTtcbmNvbnN0IGluc3RydW1lbnRlZCA9IHt9O1xuXG5sZXQgX3ByZXZpb3VzQ2xzO1xubGV0IF9wcmV2aW91c0ZpZDtcbmxldCBfcHJldmlvdXNMY3A7XG5sZXQgX3ByZXZpb3VzVHRmYjtcbmxldCBfcHJldmlvdXNJbnA7XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgQ0xTIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKlxuICogUGFzcyBgc3RvcE9uQ2FsbGJhY2sgPSB0cnVlYCB0byBzdG9wIGxpc3RlbmluZyBmb3IgQ0xTIHdoZW4gdGhlIGNsZWFudXAgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICogVGhpcyB3aWxsIGxlYWQgdG8gdGhlIENMUyBiZWluZyBmaW5hbGl6ZWQgYW5kIGZyb3plbi5cbiAqL1xuZnVuY3Rpb24gYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgY2FsbGJhY2ssXG4gIHN0b3BPbkNhbGxiYWNrID0gZmFsc2UsXG4pIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdjbHMnLCBjYWxsYmFjaywgaW5zdHJ1bWVudENscywgX3ByZXZpb3VzQ2xzLCBzdG9wT25DYWxsYmFjayk7XG59XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgTENQIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKlxuICogUGFzcyBgc3RvcE9uQ2FsbGJhY2sgPSB0cnVlYCB0byBzdG9wIGxpc3RlbmluZyBmb3IgTENQIHdoZW4gdGhlIGNsZWFudXAgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICogVGhpcyB3aWxsIGxlYWQgdG8gdGhlIExDUCBiZWluZyBmaW5hbGl6ZWQgYW5kIGZyb3plbi5cbiAqL1xuZnVuY3Rpb24gYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgY2FsbGJhY2ssXG4gIHN0b3BPbkNhbGxiYWNrID0gZmFsc2UsXG4pIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdsY3AnLCBjYWxsYmFjaywgaW5zdHJ1bWVudExjcCwgX3ByZXZpb3VzTGNwLCBzdG9wT25DYWxsYmFjayk7XG59XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgRklEIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIGFkZFR0ZmJJbnN0cnVtZW50YXRpb25IYW5kbGVyKGNhbGxiYWNrKSB7XG4gIHJldHVybiBhZGRNZXRyaWNPYnNlcnZlcigndHRmYicsIGNhbGxiYWNrLCBpbnN0cnVtZW50VHRmYiwgX3ByZXZpb3VzVHRmYik7XG59XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgRklEIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGFkZEZpZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdmaWQnLCBjYWxsYmFjaywgaW5zdHJ1bWVudEZpZCwgX3ByZXZpb3VzRmlkKTtcbn1cblxuLyoqXG4gKiBBZGQgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYSBJTlAgbWV0cmljIGlzIGF2YWlsYWJsZS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGNhbGxiYWNrIHdoaWNoIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBpbnN0cnVtZW50YXRpb24gaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gYWRkSW5wSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgY2FsbGJhY2ssXG4pIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdpbnAnLCBjYWxsYmFjaywgaW5zdHJ1bWVudElucCwgX3ByZXZpb3VzSW5wKTtcbn1cblxuLyoqXG4gKiBBZGQgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYSBwZXJmb3JtYW5jZSBvYnNlcnZlciBpcyB0cmlnZ2VyZWQsXG4gKiBhbmQgcmVjZWl2ZXMgdGhlIGVudHJpZXMgb2YgdGhlIG9ic2VydmVyLlxuICogUmV0dXJucyBhIGNsZWFudXAgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIGNhbGxlZCB0byByZW1vdmUgdGhlIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBhZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoXG4gIHR5cGUsXG4gIGNhbGxiYWNrLFxuKSB7XG4gIGFkZEhhbmRsZXIodHlwZSwgY2FsbGJhY2spO1xuXG4gIGlmICghaW5zdHJ1bWVudGVkW3R5cGVdKSB7XG4gICAgaW5zdHJ1bWVudFBlcmZvcm1hbmNlT2JzZXJ2ZXIodHlwZSk7XG4gICAgaW5zdHJ1bWVudGVkW3R5cGVdID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGVhbnVwQ2FsbGJhY2sodHlwZSwgY2FsbGJhY2spO1xufVxuXG4vKiogVHJpZ2dlciBhbGwgaGFuZGxlcnMgb2YgYSBnaXZlbiB0eXBlLiAqL1xuZnVuY3Rpb24gdHJpZ2dlckhhbmRsZXJzKHR5cGUsIGRhdGEpIHtcbiAgY29uc3QgdHlwZUhhbmRsZXJzID0gaGFuZGxlcnNbdHlwZV07XG5cbiAgaWYgKCF0eXBlSGFuZGxlcnMgfHwgIXR5cGVIYW5kbGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdHlwZUhhbmRsZXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGhhbmRsZXIoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgICB1dGlscy5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgYEVycm9yIHdoaWxlIHRyaWdnZXJpbmcgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXFxuVHlwZTogJHt0eXBlfVxcbk5hbWU6ICR7dXRpbHMuZ2V0RnVuY3Rpb25OYW1lKGhhbmRsZXIpfVxcbkVycm9yOmAsXG4gICAgICAgICAgZSxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudENscygpIHtcbiAgcmV0dXJuIGdldENMUy5vbkNMUyhcbiAgICBtZXRyaWMgPT4ge1xuICAgICAgdHJpZ2dlckhhbmRsZXJzKCdjbHMnLCB7XG4gICAgICAgIG1ldHJpYyxcbiAgICAgIH0pO1xuICAgICAgX3ByZXZpb3VzQ2xzID0gbWV0cmljO1xuICAgIH0sXG4gICAgeyByZXBvcnRBbGxDaGFuZ2VzOiB0cnVlIH0sXG4gICk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRGaWQoKSB7XG4gIHJldHVybiBnZXRGSUQub25GSUQobWV0cmljID0+IHtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2ZpZCcsIHtcbiAgICAgIG1ldHJpYyxcbiAgICB9KTtcbiAgICBfcHJldmlvdXNGaWQgPSBtZXRyaWM7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50TGNwKCkge1xuICByZXR1cm4gZ2V0TENQLm9uTENQKG1ldHJpYyA9PiB7XG4gICAgdHJpZ2dlckhhbmRsZXJzKCdsY3AnLCB7XG4gICAgICBtZXRyaWMsXG4gICAgfSk7XG4gICAgX3ByZXZpb3VzTGNwID0gbWV0cmljO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudFR0ZmIoKSB7XG4gIHJldHVybiBvblRURkIub25UVEZCKG1ldHJpYyA9PiB7XG4gICAgdHJpZ2dlckhhbmRsZXJzKCd0dGZiJywge1xuICAgICAgbWV0cmljLFxuICAgIH0pO1xuICAgIF9wcmV2aW91c1R0ZmIgPSBtZXRyaWM7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50SW5wKCkge1xuICByZXR1cm4gZ2V0SU5QLm9uSU5QKG1ldHJpYyA9PiB7XG4gICAgdHJpZ2dlckhhbmRsZXJzKCdpbnAnLCB7XG4gICAgICBtZXRyaWMsXG4gICAgfSk7XG4gICAgX3ByZXZpb3VzSW5wID0gbWV0cmljO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkTWV0cmljT2JzZXJ2ZXIoXG4gIHR5cGUsXG4gIGNhbGxiYWNrLFxuICBpbnN0cnVtZW50Rm4sXG4gIHByZXZpb3VzVmFsdWUsXG4gIHN0b3BPbkNhbGxiYWNrID0gZmFsc2UsXG4pIHtcbiAgYWRkSGFuZGxlcih0eXBlLCBjYWxsYmFjayk7XG5cbiAgbGV0IHN0b3BMaXN0ZW5pbmc7XG5cbiAgaWYgKCFpbnN0cnVtZW50ZWRbdHlwZV0pIHtcbiAgICBzdG9wTGlzdGVuaW5nID0gaW5zdHJ1bWVudEZuKCk7XG4gICAgaW5zdHJ1bWVudGVkW3R5cGVdID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcmV2aW91c1ZhbHVlKSB7XG4gICAgY2FsbGJhY2soeyBtZXRyaWM6IHByZXZpb3VzVmFsdWUgfSk7XG4gIH1cblxuICByZXR1cm4gZ2V0Q2xlYW51cENhbGxiYWNrKHR5cGUsIGNhbGxiYWNrLCBzdG9wT25DYWxsYmFjayA/IHN0b3BMaXN0ZW5pbmcgOiB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50UGVyZm9ybWFuY2VPYnNlcnZlcih0eXBlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAvLyBTcGVjaWFsIHBlci10eXBlIG9wdGlvbnMgd2Ugd2FudCB0byB1c2VcbiAgaWYgKHR5cGUgPT09ICdldmVudCcpIHtcbiAgICBvcHRpb25zLmR1cmF0aW9uVGhyZXNob2xkID0gMDtcbiAgfVxuXG4gIG9ic2VydmUub2JzZXJ2ZShcbiAgICB0eXBlLFxuICAgIGVudHJpZXMgPT4ge1xuICAgICAgdHJpZ2dlckhhbmRsZXJzKHR5cGUsIHsgZW50cmllcyB9KTtcbiAgICB9LFxuICAgIG9wdGlvbnMsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIodHlwZSwgaGFuZGxlcikge1xuICBoYW5kbGVyc1t0eXBlXSA9IGhhbmRsZXJzW3R5cGVdIHx8IFtdO1xuICAoaGFuZGxlcnNbdHlwZV0gKS5wdXNoKGhhbmRsZXIpO1xufVxuXG4vLyBHZXQgYSBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXJcbmZ1bmN0aW9uIGdldENsZWFudXBDYWxsYmFjayhcbiAgdHlwZSxcbiAgY2FsbGJhY2ssXG4gIHN0b3BMaXN0ZW5pbmcsXG4pIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoc3RvcExpc3RlbmluZykge1xuICAgICAgc3RvcExpc3RlbmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVIYW5kbGVycyA9IGhhbmRsZXJzW3R5cGVdO1xuXG4gICAgaWYgKCF0eXBlSGFuZGxlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHR5cGVIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0eXBlSGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydHMuYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZENsc0luc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZEZpZEluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBhZGRGaWRJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5hZGRJbnBJbnN0cnVtZW50YXRpb25IYW5kbGVyID0gYWRkSW5wSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZExjcEluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbmV4cG9ydHMuYWRkVHRmYkluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBhZGRUdGZiSW5zdHJ1bWVudGF0aW9uSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnQuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBtZWFzdXJlbWVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNNZWFzdXJlbWVudFZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgY2hpbGQgb24gdHJhbnNhY3Rpb25zLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdpbGxcbiAqIHVzZSB0aGUgc3RhcnQgdGltZXN0YW1wIG9mIHRoZSBjcmVhdGVkIGNoaWxkIHNwYW4gaWYgaXQgaXMgZWFybGllciB0aGFuIHRoZSB0cmFuc2FjdGlvbnMgYWN0dWFsXG4gKiBzdGFydCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogdGhpcyB3aWxsIG5vdCBiZSBwb3NzaWJsZSBhbnltb3JlIGluIHY4LFxuICogdW5sZXNzIHdlIGRvIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBmb3IgYnJvd3NlciBoZXJlLi4uXG4gKi9cbmZ1bmN0aW9uIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7IHN0YXJ0VGltZXN0YW1wLCAuLi5jdHggfSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaWYgKHN0YXJ0VGltZXN0YW1wICYmIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wID4gc3RhcnRUaW1lc3RhbXApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCA9IHN0YXJ0VGltZXN0YW1wO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHJldHVybiB0cmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICBzdGFydFRpbWVzdGFtcCxcbiAgICAuLi5jdHgsXG4gIH0pO1xufVxuXG5leHBvcnRzLl9zdGFydENoaWxkID0gX3N0YXJ0Q2hpbGQ7XG5leHBvcnRzLmlzTWVhc3VyZW1lbnRWYWx1ZSA9IGlzTWVhc3VyZW1lbnRWYWx1ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi8uLi9jb21tb24vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGluc3RydW1lbnQgPSByZXF1aXJlKCcuLi9pbnN0cnVtZW50LmpzJyk7XG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4uL3R5cGVzLmpzJyk7XG5jb25zdCBnZXRWaXNpYmlsaXR5V2F0Y2hlciA9IHJlcXVpcmUoJy4uL3dlYi12aXRhbHMvbGliL2dldFZpc2liaWxpdHlXYXRjaGVyLmpzJyk7XG5jb25zdCB1dGlscyQxID0gcmVxdWlyZSgnLi91dGlscy5qcycpO1xuY29uc3QgZ2V0TmF2aWdhdGlvbkVudHJ5ID0gcmVxdWlyZSgnLi4vd2ViLXZpdGFscy9saWIvZ2V0TmF2aWdhdGlvbkVudHJ5LmpzJyk7XG5cbmNvbnN0IE1BWF9JTlRfQVNfQllURVMgPSAyMTQ3NDgzNjQ3O1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gbWlsbGlzZWNvbmRzIHRvIHNlY29uZHNcbiAqIEBwYXJhbSB0aW1lIHRpbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gbXNUb1NlYyh0aW1lKSB7XG4gIHJldHVybiB0aW1lIC8gMTAwMDtcbn1cblxuZnVuY3Rpb24gZ2V0QnJvd3NlclBlcmZvcm1hbmNlQVBJKCkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aGVzZSBhcmUgYXZhaWxhYmxlLCBldmVuIGlmIFRTIGlzIHN1cmUgdGhleSBhcmVcbiAgcmV0dXJuIHR5cGVzLldJTkRPVyAmJiB0eXBlcy5XSU5ET1cuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlcy5XSU5ET1cucGVyZm9ybWFuY2U7XG59XG5cbmxldCBfcGVyZm9ybWFuY2VDdXJzb3IgPSAwO1xuXG5sZXQgX21lYXN1cmVtZW50cyA9IHt9O1xubGV0IF9sY3BFbnRyeTtcbmxldCBfY2xzRW50cnk7XG5cbi8qKlxuICogU3RhcnQgdHJhY2tpbmcgd2ViIHZpdGFscy5cbiAqIFRoZSBjYWxsYmFjayByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHN0b3AgdHJhY2tpbmcgJiBlbnN1cmUgYWxsIG1lYXN1cmVtZW50cyBhcmUgZmluYWwgJiBjYXB0dXJlZC5cbiAqXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgZm9yY2VzIHdlYiB2aXRhbHMgY29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBzdGFydFRyYWNraW5nV2ViVml0YWxzKCkge1xuICBjb25zdCBwZXJmb3JtYW5jZSA9IGdldEJyb3dzZXJQZXJmb3JtYW5jZUFQSSgpO1xuICBpZiAocGVyZm9ybWFuY2UgJiYgdXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbikge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igd2Ugd2FudCB0byBtYWtlIHN1cmUgYWxsIG9mIHRoZXNlIGFyZSBhdmFpbGFibGUsIGV2ZW4gaWYgVFMgaXMgc3VyZSB0aGV5IGFyZVxuICAgIGlmIChwZXJmb3JtYW5jZS5tYXJrKSB7XG4gICAgICB0eXBlcy5XSU5ET1cucGVyZm9ybWFuY2UubWFyaygnc2VudHJ5LXRyYWNpbmctaW5pdCcpO1xuICAgIH1cbiAgICBjb25zdCBmaWRDYWxsYmFjayA9IF90cmFja0ZJRCgpO1xuICAgIGNvbnN0IGNsc0NhbGxiYWNrID0gX3RyYWNrQ0xTKCk7XG4gICAgY29uc3QgbGNwQ2FsbGJhY2sgPSBfdHJhY2tMQ1AoKTtcbiAgICBjb25zdCB0dGZiQ2FsbGJhY2sgPSBfdHJhY2tUdGZiKCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZmlkQ2FsbGJhY2soKTtcbiAgICAgIGNsc0NhbGxiYWNrKCk7XG4gICAgICBsY3BDYWxsYmFjaygpO1xuICAgICAgdHRmYkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU3RhcnQgdHJhY2tpbmcgbG9uZyB0YXNrcy5cbiAqL1xuZnVuY3Rpb24gc3RhcnRUcmFja2luZ0xvbmdUYXNrcygpIHtcbiAgaW5zdHJ1bWVudC5hZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoJ2xvbmd0YXNrJywgKHsgZW50cmllcyB9KSA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gY29yZS5nZXRBY3RpdmVUcmFuc2FjdGlvbigpIDtcbiAgICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYygodXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiApICsgZW50cnkuc3RhcnRUaW1lKTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gbXNUb1NlYyhlbnRyeS5kdXJhdGlvbik7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgdHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTWFpbiBVSSB0aHJlYWQgYmxvY2tlZCcsXG4gICAgICAgIG9wOiAndWkubG9uZy10YXNrJyxcbiAgICAgICAgb3JpZ2luOiAnYXV0by51aS5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogc3RhcnRUaW1lLFxuICAgICAgICBlbmRUaW1lc3RhbXA6IHN0YXJ0VGltZSArIGR1cmF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBTdGFydCB0cmFja2luZyBpbnRlcmFjdGlvbiBldmVudHMuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0VHJhY2tpbmdJbnRlcmFjdGlvbnMoKSB7XG4gIGluc3RydW1lbnQuYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyKCdldmVudCcsICh7IGVudHJpZXMgfSkgPT4ge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKSA7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYygodXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiApICsgZW50cnkuc3RhcnRUaW1lKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBtc1RvU2VjKGVudHJ5LmR1cmF0aW9uKTtcblxuICAgICAgICBjb25zdCBzcGFuID0ge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiB1dGlscy5odG1sVHJlZUFzU3RyaW5nKGVudHJ5LnRhcmdldCksXG4gICAgICAgICAgb3A6IGB1aS5pbnRlcmFjdGlvbi4ke2VudHJ5Lm5hbWV9YCxcbiAgICAgICAgICBvcmlnaW46ICdhdXRvLnVpLmJyb3dzZXIubWV0cmljcycsXG4gICAgICAgICAgc3RhcnRUaW1lc3RhbXA6IHN0YXJ0VGltZSxcbiAgICAgICAgICBlbmRUaW1lc3RhbXA6IHN0YXJ0VGltZSArIGR1cmF0aW9uLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB1dGlscy5nZXRDb21wb25lbnROYW1lKGVudHJ5LnRhcmdldCk7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgc3Bhbi5hdHRyaWJ1dGVzID0geyAndWkuY29tcG9uZW50X25hbWUnOiBjb21wb25lbnROYW1lIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgdHJhbnNhY3Rpb24uc3RhcnRDaGlsZChzcGFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRyYWNraW5nIElOUCB3ZWJ2aXRhbCBldmVudHMuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0VHJhY2tpbmdJTlAoXG4gIGludGVyYWN0aW9uSWR0b1JvdXRlTmFtZU1hcHBpbmcsXG4gIGludGVyYWN0aW9uc1NhbXBsZVJhdGUsXG4pIHtcbiAgY29uc3QgcGVyZm9ybWFuY2UgPSBnZXRCcm93c2VyUGVyZm9ybWFuY2VBUEkoKTtcbiAgaWYgKHBlcmZvcm1hbmNlICYmIHV0aWxzLmJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pIHtcbiAgICBjb25zdCBpbnBDYWxsYmFjayA9IF90cmFja0lOUChpbnRlcmFjdGlvbklkdG9Sb3V0ZU5hbWVNYXBwaW5nLCBpbnRlcmFjdGlvbnNTYW1wbGVSYXRlKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpbnBDYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuXG4vKiogU3RhcnRzIHRyYWNraW5nIHRoZSBDdW11bGF0aXZlIExheW91dCBTaGlmdCBvbiB0aGUgY3VycmVudCBwYWdlLiAqL1xuZnVuY3Rpb24gX3RyYWNrQ0xTKCkge1xuICByZXR1cm4gaW5zdHJ1bWVudC5hZGRDbHNJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IG1ldHJpYyB9KSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBtZXRyaWMuZW50cmllc1ttZXRyaWMuZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgQ0xTJyk7XG4gICAgX21lYXN1cmVtZW50c1snY2xzJ10gPSB7IHZhbHVlOiBtZXRyaWMudmFsdWUsIHVuaXQ6ICcnIH07XG4gICAgX2Nsc0VudHJ5ID0gZW50cnkgO1xuICB9LCB0cnVlKTtcbn1cblxuLyoqIFN0YXJ0cyB0cmFja2luZyB0aGUgTGFyZ2VzdCBDb250ZW50ZnVsIFBhaW50IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG5mdW5jdGlvbiBfdHJhY2tMQ1AoKSB7XG4gIHJldHVybiBpbnN0cnVtZW50LmFkZExjcEluc3RydW1lbnRhdGlvbkhhbmRsZXIoKHsgbWV0cmljIH0pID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzW21ldHJpYy5lbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AnKTtcbiAgICBfbWVhc3VyZW1lbnRzWydsY3AnXSA9IHsgdmFsdWU6IG1ldHJpYy52YWx1ZSwgdW5pdDogJ21pbGxpc2Vjb25kJyB9O1xuICAgIF9sY3BFbnRyeSA9IGVudHJ5IDtcbiAgfSwgdHJ1ZSk7XG59XG5cbi8qKiBTdGFydHMgdHJhY2tpbmcgdGhlIEZpcnN0IElucHV0IERlbGF5IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG5mdW5jdGlvbiBfdHJhY2tGSUQoKSB7XG4gIHJldHVybiBpbnN0cnVtZW50LmFkZEZpZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoKHsgbWV0cmljIH0pID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzW21ldHJpYy5lbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lT3JpZ2luID0gbXNUb1NlYyh1dGlscy5icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luICk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYyhlbnRyeS5zdGFydFRpbWUpO1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIEZJRCcpO1xuICAgIF9tZWFzdXJlbWVudHNbJ2ZpZCddID0geyB2YWx1ZTogbWV0cmljLnZhbHVlLCB1bml0OiAnbWlsbGlzZWNvbmQnIH07XG4gICAgX21lYXN1cmVtZW50c1snbWFyay5maWQnXSA9IHsgdmFsdWU6IHRpbWVPcmlnaW4gKyBzdGFydFRpbWUsIHVuaXQ6ICdzZWNvbmQnIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfdHJhY2tUdGZiKCkge1xuICByZXR1cm4gaW5zdHJ1bWVudC5hZGRUdGZiSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBtZXRyaWMgfSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gbWV0cmljLmVudHJpZXNbbWV0cmljLmVudHJpZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIFRURkInKTtcbiAgICBfbWVhc3VyZW1lbnRzWyd0dGZiJ10gPSB7IHZhbHVlOiBtZXRyaWMudmFsdWUsIHVuaXQ6ICdtaWxsaXNlY29uZCcgfTtcbiAgfSk7XG59XG5cbmNvbnN0IElOUF9FTlRSWV9NQVAgPSB7XG4gIGNsaWNrOiAnY2xpY2snLFxuICBwb2ludGVyZG93bjogJ2NsaWNrJyxcbiAgcG9pbnRlcnVwOiAnY2xpY2snLFxuICBtb3VzZWRvd246ICdjbGljaycsXG4gIG1vdXNldXA6ICdjbGljaycsXG4gIHRvdWNoc3RhcnQ6ICdjbGljaycsXG4gIHRvdWNoZW5kOiAnY2xpY2snLFxuICBtb3VzZW92ZXI6ICdob3ZlcicsXG4gIG1vdXNlb3V0OiAnaG92ZXInLFxuICBtb3VzZWVudGVyOiAnaG92ZXInLFxuICBtb3VzZWxlYXZlOiAnaG92ZXInLFxuICBwb2ludGVyb3ZlcjogJ2hvdmVyJyxcbiAgcG9pbnRlcm91dDogJ2hvdmVyJyxcbiAgcG9pbnRlcmVudGVyOiAnaG92ZXInLFxuICBwb2ludGVybGVhdmU6ICdob3ZlcicsXG4gIGRyYWdzdGFydDogJ2RyYWcnLFxuICBkcmFnZW5kOiAnZHJhZycsXG4gIGRyYWc6ICdkcmFnJyxcbiAgZHJhZ2VudGVyOiAnZHJhZycsXG4gIGRyYWdsZWF2ZTogJ2RyYWcnLFxuICBkcmFnb3ZlcjogJ2RyYWcnLFxuICBkcm9wOiAnZHJhZycsXG4gIGtleWRvd246ICdwcmVzcycsXG4gIGtleXVwOiAncHJlc3MnLFxuICBrZXlwcmVzczogJ3ByZXNzJyxcbiAgaW5wdXQ6ICdwcmVzcycsXG59O1xuXG4vKiogU3RhcnRzIHRyYWNraW5nIHRoZSBJbnRlcmFjdGlvbiB0byBOZXh0IFBhaW50IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG5mdW5jdGlvbiBfdHJhY2tJTlAoXG4gIGludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmcsXG4gIGludGVyYWN0aW9uc1NhbXBsZVJhdGUsXG4pIHtcbiAgcmV0dXJuIGluc3RydW1lbnQuYWRkSW5wSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBtZXRyaWMgfSkgPT4ge1xuICAgIGlmIChtZXRyaWMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLmZpbmQoXG4gICAgICBlbnRyeSA9PiBlbnRyeS5kdXJhdGlvbiA9PT0gbWV0cmljLnZhbHVlICYmIElOUF9FTlRSWV9NQVBbZW50cnkubmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCk7XG4gICAgaWYgKCFlbnRyeSB8fCAhY2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGludGVyYWN0aW9uVHlwZSA9IElOUF9FTlRSWV9NQVBbZW50cnkubmFtZV07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCk7XG4gICAgLyoqIEJ1aWxkIHRoZSBJTlAgc3BhbiwgY3JlYXRlIGFuIGVudmVsb3BlIGZyb20gdGhlIHNwYW4sIGFuZCB0aGVuIHNlbmQgdGhlIGVudmVsb3BlICovXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYygodXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiApICsgZW50cnkuc3RhcnRUaW1lKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IG1zVG9TZWMobWV0cmljLnZhbHVlKTtcbiAgICBjb25zdCBpbnRlcmFjdGlvbiA9XG4gICAgICBlbnRyeS5pbnRlcmFjdGlvbklkICE9PSB1bmRlZmluZWQgPyBpbnRlcmFjdGlvbklkVG9Sb3V0ZU5hbWVNYXBwaW5nW2VudHJ5LmludGVyYWN0aW9uSWRdIDogdW5kZWZpbmVkO1xuICAgIGlmIChpbnRlcmFjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgcm91dGVOYW1lLCBwYXJlbnRDb250ZXh0LCBhY3RpdmVUcmFuc2FjdGlvbiwgdXNlciwgcmVwbGF5SWQgfSA9IGludGVyYWN0aW9uO1xuICAgIGNvbnN0IHVzZXJEaXNwbGF5ID0gdXNlciAhPT0gdW5kZWZpbmVkID8gdXNlci5lbWFpbCB8fCB1c2VyLmlkIHx8IHVzZXIuaXBfYWRkcmVzcyA6IHVuZGVmaW5lZDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBwcm9maWxlSWQgPSBhY3RpdmVUcmFuc2FjdGlvbiAhPT0gdW5kZWZpbmVkID8gYWN0aXZlVHJhbnNhY3Rpb24uZ2V0UHJvZmlsZUlkKCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3BhbiA9IG5ldyBjb3JlLlNwYW4oe1xuICAgICAgc3RhcnRUaW1lc3RhbXA6IHN0YXJ0VGltZSxcbiAgICAgIGVuZFRpbWVzdGFtcDogc3RhcnRUaW1lICsgZHVyYXRpb24sXG4gICAgICBvcDogYHVpLmludGVyYWN0aW9uLiR7aW50ZXJhY3Rpb25UeXBlfWAsXG4gICAgICBuYW1lOiB1dGlscy5odG1sVHJlZUFzU3RyaW5nKGVudHJ5LnRhcmdldCksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIHRyYW5zYWN0aW9uOiByb3V0ZU5hbWUsXG4gICAgICAgIC4uLih1c2VyRGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIHVzZXJEaXNwbGF5ICE9PSAnJyA/IHsgdXNlcjogdXNlckRpc3BsYXkgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2ZpbGVJZCAhPT0gdW5kZWZpbmVkID8geyBwcm9maWxlX2lkOiBwcm9maWxlSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcGxheUlkICE9PSB1bmRlZmluZWQgPyB7IHJlcGxheV9pZDogcmVwbGF5SWQgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBleGNsdXNpdmVUaW1lOiBtZXRyaWMudmFsdWUsXG4gICAgICBtZWFzdXJlbWVudHM6IHtcbiAgICAgICAgaW5wOiB7IHZhbHVlOiBtZXRyaWMudmFsdWUsIHVuaXQ6ICdtaWxsaXNlY29uZCcgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvKiogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcGFuIHNob3VsZCBiZSBzYW1wbGVkICovXG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGdldFNhbXBsZVJhdGUocGFyZW50Q29udGV4dCwgb3B0aW9ucywgaW50ZXJhY3Rpb25zU2FtcGxlUmF0ZSk7XG5cbiAgICBpZiAoIXNhbXBsZVJhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoTWF0aC5yYW5kb20oKSA8IChzYW1wbGVSYXRlICkpIHtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gc3BhbiA/IGNvcmUuY3JlYXRlU3BhbkVudmVsb3BlKFtzcGFuXSwgY2xpZW50LmdldERzbigpKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IGNsaWVudCAmJiBjbGllbnQuZ2V0VHJhbnNwb3J0KCk7XG4gICAgICBpZiAodHJhbnNwb3J0ICYmIGVudmVsb3BlKSB7XG4gICAgICAgIHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKS50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNlbmRpbmcgaW50ZXJhY3Rpb246JywgcmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIEFkZCBwZXJmb3JtYW5jZSByZWxhdGVkIHNwYW5zIHRvIGEgdHJhbnNhY3Rpb24gKi9cbmZ1bmN0aW9uIGFkZFBlcmZvcm1hbmNlRW50cmllcyh0cmFuc2FjdGlvbikge1xuICBjb25zdCBwZXJmb3JtYW5jZSA9IGdldEJyb3dzZXJQZXJmb3JtYW5jZUFQSSgpO1xuICBpZiAoIXBlcmZvcm1hbmNlIHx8ICF0eXBlcy5XSU5ET1cucGVyZm9ybWFuY2UuZ2V0RW50cmllcyB8fCAhdXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbikge1xuICAgIC8vIEdhdGVrZWVwZXIgaWYgcGVyZm9ybWFuY2UgQVBJIG5vdCBhdmFpbGFibGVcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1tUcmFjaW5nXSBBZGRpbmcgJiBhZGp1c3Rpbmcgc3BhbnMgdXNpbmcgUGVyZm9ybWFuY2UgQVBJJyk7XG4gIGNvbnN0IHRpbWVPcmlnaW4gPSBtc1RvU2VjKHV0aWxzLmJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pO1xuXG4gIGNvbnN0IHBlcmZvcm1hbmNlRW50cmllcyA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXMoKTtcblxuICBjb25zdCB7IG9wLCBzdGFydF90aW1lc3RhbXA6IHRyYW5zYWN0aW9uU3RhcnRUaW1lIH0gPSBjb3JlLnNwYW5Ub0pTT04odHJhbnNhY3Rpb24pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHBlcmZvcm1hbmNlRW50cmllcy5zbGljZShfcGVyZm9ybWFuY2VDdXJzb3IpLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYyhlbnRyeS5zdGFydFRpbWUpO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gbXNUb1NlYyhlbnRyeS5kdXJhdGlvbik7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBpZiAodHJhbnNhY3Rpb24ub3AgPT09ICduYXZpZ2F0aW9uJyAmJiB0cmFuc2FjdGlvblN0YXJ0VGltZSAmJiB0aW1lT3JpZ2luICsgc3RhcnRUaW1lIDwgdHJhbnNhY3Rpb25TdGFydFRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGVudHJ5LmVudHJ5VHlwZSkge1xuICAgICAgY2FzZSAnbmF2aWdhdGlvbic6IHtcbiAgICAgICAgX2FkZE5hdmlnYXRpb25TcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21hcmsnOlxuICAgICAgY2FzZSAncGFpbnQnOlxuICAgICAgY2FzZSAnbWVhc3VyZSc6IHtcbiAgICAgICAgX2FkZE1lYXN1cmVTcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIHN0YXJ0VGltZSwgZHVyYXRpb24sIHRpbWVPcmlnaW4pO1xuXG4gICAgICAgIC8vIGNhcHR1cmUgd2ViIHZpdGFsc1xuICAgICAgICBjb25zdCBmaXJzdEhpZGRlbiA9IGdldFZpc2liaWxpdHlXYXRjaGVyLmdldFZpc2liaWxpdHlXYXRjaGVyKCk7XG4gICAgICAgIC8vIE9ubHkgcmVwb3J0IGlmIHRoZSBwYWdlIHdhc24ndCBoaWRkZW4gcHJpb3IgdG8gdGhlIHdlYiB2aXRhbC5cbiAgICAgICAgY29uc3Qgc2hvdWxkUmVjb3JkID0gZW50cnkuc3RhcnRUaW1lIDwgZmlyc3RIaWRkZW4uZmlyc3RIaWRkZW5UaW1lO1xuXG4gICAgICAgIGlmIChlbnRyeS5uYW1lID09PSAnZmlyc3QtcGFpbnQnICYmIHNob3VsZFJlY29yZCkge1xuICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIEZQJyk7XG4gICAgICAgICAgX21lYXN1cmVtZW50c1snZnAnXSA9IHsgdmFsdWU6IGVudHJ5LnN0YXJ0VGltZSwgdW5pdDogJ21pbGxpc2Vjb25kJyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5uYW1lID09PSAnZmlyc3QtY29udGVudGZ1bC1wYWludCcgJiYgc2hvdWxkUmVjb3JkKSB7XG4gICAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgRkNQJyk7XG4gICAgICAgICAgX21lYXN1cmVtZW50c1snZmNwJ10gPSB7IHZhbHVlOiBlbnRyeS5zdGFydFRpbWUsIHVuaXQ6ICdtaWxsaXNlY29uZCcgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Jlc291cmNlJzoge1xuICAgICAgICBfYWRkUmVzb3VyY2VTcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIGVudHJ5Lm5hbWUgLCBzdGFydFRpbWUsIGR1cmF0aW9uLCB0aW1lT3JpZ2luKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmUgb3RoZXIgZW50cnkgdHlwZXMuXG4gICAgfVxuICB9KTtcblxuICBfcGVyZm9ybWFuY2VDdXJzb3IgPSBNYXRoLm1heChwZXJmb3JtYW5jZUVudHJpZXMubGVuZ3RoIC0gMSwgMCk7XG5cbiAgX3RyYWNrTmF2aWdhdG9yKHRyYW5zYWN0aW9uKTtcblxuICAvLyBNZWFzdXJlbWVudHMgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciBwYWdlbG9hZCB0cmFuc2FjdGlvbnNcbiAgaWYgKG9wID09PSAncGFnZWxvYWQnKSB7XG4gICAgX2FkZFR0ZmJSZXF1ZXN0VGltZVRvTWVhc3VyZW1lbnRzKF9tZWFzdXJlbWVudHMpO1xuXG4gICAgWydmY3AnLCAnZnAnLCAnbGNwJ10uZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIGlmICghX21lYXN1cmVtZW50c1tuYW1lXSB8fCAhdHJhbnNhY3Rpb25TdGFydFRpbWUgfHwgdGltZU9yaWdpbiA+PSB0cmFuc2FjdGlvblN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBUaGUgd2ViIHZpdGFscywgZmNwLCBmcCwgbGNwLCBhbmQgdHRmYiwgYWxsIG1lYXN1cmUgcmVsYXRpdmUgdG8gdGltZU9yaWdpbi5cbiAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHRpbWVPcmlnaW4gaXMgbm90IGNhcHR1cmVkIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24gc3BhbiBkYXRhLCBzbyB0aGVzZSB3ZWIgdml0YWxzIHdpbGwgbmVlZFxuICAgICAgLy8gdG8gYmUgYWRqdXN0ZWQgdG8gYmUgcmVsYXRpdmUgdG8gdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXAuXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IF9tZWFzdXJlbWVudHNbbmFtZV0udmFsdWU7XG4gICAgICBjb25zdCBtZWFzdXJlbWVudFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBtc1RvU2VjKG9sZFZhbHVlKTtcblxuICAgICAgLy8gbm9ybWFsaXplZFZhbHVlIHNob3VsZCBiZSBpbiBtaWxsaXNlY29uZHNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IE1hdGguYWJzKChtZWFzdXJlbWVudFRpbWVzdGFtcCAtIHRyYW5zYWN0aW9uU3RhcnRUaW1lKSAqIDEwMDApO1xuICAgICAgY29uc3QgZGVsdGEgPSBub3JtYWxpemVkVmFsdWUgLSBvbGRWYWx1ZTtcblxuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKGBbTWVhc3VyZW1lbnRzXSBOb3JtYWxpemVkICR7bmFtZX0gZnJvbSAke29sZFZhbHVlfSB0byAke25vcm1hbGl6ZWRWYWx1ZX0gKCR7ZGVsdGF9KWApO1xuICAgICAgX21lYXN1cmVtZW50c1tuYW1lXS52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZE1hcmsgPSBfbWVhc3VyZW1lbnRzWydtYXJrLmZpZCddO1xuICAgIGlmIChmaWRNYXJrICYmIF9tZWFzdXJlbWVudHNbJ2ZpZCddKSB7XG4gICAgICAvLyBjcmVhdGUgc3BhbiBmb3IgRklEXG4gICAgICB1dGlscyQxLl9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnZmlyc3QgaW5wdXQgZGVsYXknLFxuICAgICAgICBlbmRUaW1lc3RhbXA6IGZpZE1hcmsudmFsdWUgKyBtc1RvU2VjKF9tZWFzdXJlbWVudHNbJ2ZpZCddLnZhbHVlKSxcbiAgICAgICAgb3A6ICd1aS5hY3Rpb24nLFxuICAgICAgICBvcmlnaW46ICdhdXRvLnVpLmJyb3dzZXIubWV0cmljcycsXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wOiBmaWRNYXJrLnZhbHVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIERlbGV0ZSBtYXJrLmZpZCBhcyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIHBhcnQgb2YgZmluYWwgcGF5bG9hZFxuICAgICAgZGVsZXRlIF9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ107XG4gICAgfVxuXG4gICAgLy8gSWYgRkNQIGlzIG5vdCByZWNvcmRlZCB3ZSBzaG91bGQgbm90IHJlY29yZCB0aGUgY2xzIHZhbHVlXG4gICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBDTFMuXG4gICAgaWYgKCEoJ2ZjcCcgaW4gX21lYXN1cmVtZW50cykpIHtcbiAgICAgIGRlbGV0ZSBfbWVhc3VyZW1lbnRzLmNscztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhfbWVhc3VyZW1lbnRzKS5mb3JFYWNoKG1lYXN1cmVtZW50TmFtZSA9PiB7XG4gICAgICBjb3JlLnNldE1lYXN1cmVtZW50KG1lYXN1cmVtZW50TmFtZSwgX21lYXN1cmVtZW50c1ttZWFzdXJlbWVudE5hbWVdLnZhbHVlLCBfbWVhc3VyZW1lbnRzW21lYXN1cmVtZW50TmFtZV0udW5pdCk7XG4gICAgfSk7XG5cbiAgICBfdGFnTWV0cmljSW5mbyh0cmFuc2FjdGlvbik7XG4gIH1cblxuICBfbGNwRW50cnkgPSB1bmRlZmluZWQ7XG4gIF9jbHNFbnRyeSA9IHVuZGVmaW5lZDtcbiAgX21lYXN1cmVtZW50cyA9IHt9O1xufVxuXG4vKiogQ3JlYXRlIG1lYXN1cmUgcmVsYXRlZCBzcGFucyAqL1xuZnVuY3Rpb24gX2FkZE1lYXN1cmVTcGFucyhcbiAgdHJhbnNhY3Rpb24sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGVudHJ5LFxuICBzdGFydFRpbWUsXG4gIGR1cmF0aW9uLFxuICB0aW1lT3JpZ2luLFxuKSB7XG4gIGNvbnN0IG1lYXN1cmVTdGFydFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBzdGFydFRpbWU7XG4gIGNvbnN0IG1lYXN1cmVFbmRUaW1lc3RhbXAgPSBtZWFzdXJlU3RhcnRUaW1lc3RhbXAgKyBkdXJhdGlvbjtcblxuICB1dGlscyQxLl9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgZGVzY3JpcHRpb246IGVudHJ5Lm5hbWUgLFxuICAgIGVuZFRpbWVzdGFtcDogbWVhc3VyZUVuZFRpbWVzdGFtcCxcbiAgICBvcDogZW50cnkuZW50cnlUeXBlICxcbiAgICBvcmlnaW46ICdhdXRvLnJlc291cmNlLmJyb3dzZXIubWV0cmljcycsXG4gICAgc3RhcnRUaW1lc3RhbXA6IG1lYXN1cmVTdGFydFRpbWVzdGFtcCxcbiAgfSk7XG5cbiAgcmV0dXJuIG1lYXN1cmVTdGFydFRpbWVzdGFtcDtcbn1cblxuLyoqIEluc3RydW1lbnQgbmF2aWdhdGlvbiBlbnRyaWVzICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gX2FkZE5hdmlnYXRpb25TcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pIHtcbiAgWyd1bmxvYWRFdmVudCcsICdyZWRpcmVjdCcsICdkb21Db250ZW50TG9hZGVkRXZlbnQnLCAnbG9hZEV2ZW50JywgJ2Nvbm5lY3QnXS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICBfYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHRyYW5zYWN0aW9uLCBlbnRyeSwgZXZlbnQsIHRpbWVPcmlnaW4pO1xuICB9KTtcbiAgX2FkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh0cmFuc2FjdGlvbiwgZW50cnksICdzZWN1cmVDb25uZWN0aW9uJywgdGltZU9yaWdpbiwgJ1RMUy9TU0wnLCAnY29ubmVjdEVuZCcpO1xuICBfYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHRyYW5zYWN0aW9uLCBlbnRyeSwgJ2ZldGNoJywgdGltZU9yaWdpbiwgJ2NhY2hlJywgJ2RvbWFpbkxvb2t1cFN0YXJ0Jyk7XG4gIF9hZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcodHJhbnNhY3Rpb24sIGVudHJ5LCAnZG9tYWluTG9va3VwJywgdGltZU9yaWdpbiwgJ0ROUycpO1xuICBfYWRkUmVxdWVzdCh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pO1xufVxuXG4vKiogQ3JlYXRlIHBlcmZvcm1hbmNlIG5hdmlnYXRpb24gcmVsYXRlZCBzcGFucyAqL1xuZnVuY3Rpb24gX2FkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyhcbiAgdHJhbnNhY3Rpb24sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGVudHJ5LFxuICBldmVudCxcbiAgdGltZU9yaWdpbixcbiAgZGVzY3JpcHRpb24sXG4gIGV2ZW50RW5kLFxuKSB7XG4gIGNvbnN0IGVuZCA9IGV2ZW50RW5kID8gKGVudHJ5W2V2ZW50RW5kXSApIDogKGVudHJ5W2Ake2V2ZW50fUVuZGBdICk7XG4gIGNvbnN0IHN0YXJ0ID0gZW50cnlbYCR7ZXZlbnR9U3RhcnRgXSA7XG4gIGlmICghc3RhcnQgfHwgIWVuZCkge1xuICAgIHJldHVybjtcbiAgfVxuICB1dGlscyQxLl9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgb3A6ICdicm93c2VyJyxcbiAgICBvcmlnaW46ICdhdXRvLmJyb3dzZXIuYnJvd3Nlci5tZXRyaWNzJyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gfHwgZXZlbnQsXG4gICAgc3RhcnRUaW1lc3RhbXA6IHRpbWVPcmlnaW4gKyBtc1RvU2VjKHN0YXJ0KSxcbiAgICBlbmRUaW1lc3RhbXA6IHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVuZCksXG4gIH0pO1xufVxuXG4vKiogQ3JlYXRlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJlbGF0ZWQgc3BhbnMgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBfYWRkUmVxdWVzdCh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pIHtcbiAgaWYgKGVudHJ5LnJlc3BvbnNlRW5kKSB7XG4gICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBhcmUgY29sbGVjdGluZyB0aGVzZSBtZXRyaWNzIHdoZW4gdGhlIHBhZ2UgaGFzbid0IGZpbmlzaGVkIGxvYWRpbmcgeWV0LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBIVE1MIHNsb3dseSBzdHJlYW1zIGluLlxuICAgIC8vIEluIHRoaXMgY2FzZSwgaWUuIHdoZW4gdGhlIGRvY3VtZW50IHJlcXVlc3QgaGFzbid0IGZpbmlzaGVkIHlldCwgYGVudHJ5LnJlc3BvbnNlRW5kYCB3aWxsIGJlIDAuXG4gICAgLy8gSW4gb3JkZXIgbm90IHRvIHByb2R1Y2UgZmF1bHR5IHNwYW5zLCB3aGVyZSB0aGUgZW5kIHRpbWVzdGFtcCBpcyBiZWZvcmUgdGhlIHN0YXJ0IHRpbWVzdGFtcCwgd2Ugd2lsbCBvbmx5IGNvbGxlY3RcbiAgICAvLyB0aGVzZSBzcGFucyB3aGVuIHRoZSByZXNwb25zZUVuZCB2YWx1ZSBpcyBhdmFpbGFibGUuIFRoZSBiYWNrZW5kIChSZWxheSkgd291bGQgZHJvcCB0aGUgZW50aXJlIHRyYW5zYWN0aW9uIGlmIGl0IGNvbnRhaW5lZCBmYXVsdHkgc3BhbnMuXG4gICAgdXRpbHMkMS5fc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwge1xuICAgICAgb3A6ICdicm93c2VyJyxcbiAgICAgIG9yaWdpbjogJ2F1dG8uYnJvd3Nlci5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdyZXF1ZXN0JyxcbiAgICAgIHN0YXJ0VGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXF1ZXN0U3RhcnQgKSxcbiAgICAgIGVuZFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VFbmQgKSxcbiAgICB9KTtcblxuICAgIHV0aWxzJDEuX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICAgIG9wOiAnYnJvd3NlcicsXG4gICAgICBvcmlnaW46ICdhdXRvLmJyb3dzZXIuYnJvd3Nlci5tZXRyaWNzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAncmVzcG9uc2UnLFxuICAgICAgc3RhcnRUaW1lc3RhbXA6IHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVudHJ5LnJlc3BvbnNlU3RhcnQgKSxcbiAgICAgIGVuZFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VFbmQgKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogQ3JlYXRlIHJlc291cmNlLXJlbGF0ZWQgc3BhbnMgKi9cbmZ1bmN0aW9uIF9hZGRSZXNvdXJjZVNwYW5zKFxuICB0cmFuc2FjdGlvbixcbiAgZW50cnksXG4gIHJlc291cmNlVXJsLFxuICBzdGFydFRpbWUsXG4gIGR1cmF0aW9uLFxuICB0aW1lT3JpZ2luLFxuKSB7XG4gIC8vIHdlIGFscmVhZHkgaW5zdHJ1bWVudCBiYXNlZCBvbiBmZXRjaCBhbmQgeGhyLCBzbyB3ZSBkb24ndCBuZWVkIHRvXG4gIC8vIGR1cGxpY2F0ZSBzcGFucyBoZXJlLlxuICBpZiAoZW50cnkuaW5pdGlhdG9yVHlwZSA9PT0gJ3htbGh0dHByZXF1ZXN0JyB8fCBlbnRyeS5pbml0aWF0b3JUeXBlID09PSAnZmV0Y2gnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkVXJsID0gdXRpbHMucGFyc2VVcmwocmVzb3VyY2VVcmwpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGRhdGEgPSB7fTtcbiAgc2V0UmVzb3VyY2VFbnRyeVNpemVEYXRhKGRhdGEsIGVudHJ5LCAndHJhbnNmZXJTaXplJywgJ2h0dHAucmVzcG9uc2VfdHJhbnNmZXJfc2l6ZScpO1xuICBzZXRSZXNvdXJjZUVudHJ5U2l6ZURhdGEoZGF0YSwgZW50cnksICdlbmNvZGVkQm9keVNpemUnLCAnaHR0cC5yZXNwb25zZV9jb250ZW50X2xlbmd0aCcpO1xuICBzZXRSZXNvdXJjZUVudHJ5U2l6ZURhdGEoZGF0YSwgZW50cnksICdkZWNvZGVkQm9keVNpemUnLCAnaHR0cC5kZWNvZGVkX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoJyk7XG5cbiAgaWYgKCdyZW5kZXJCbG9ja2luZ1N0YXR1cycgaW4gZW50cnkpIHtcbiAgICBkYXRhWydyZXNvdXJjZS5yZW5kZXJfYmxvY2tpbmdfc3RhdHVzJ10gPSBlbnRyeS5yZW5kZXJCbG9ja2luZ1N0YXR1cztcbiAgfVxuICBpZiAocGFyc2VkVXJsLnByb3RvY29sKSB7XG4gICAgZGF0YVsndXJsLnNjaGVtZSddID0gcGFyc2VkVXJsLnByb3RvY29sLnNwbGl0KCc6JykucG9wKCk7IC8vIHRoZSBwcm90b2NvbCByZXR1cm5lZCBieSBwYXJzZVVybCBpbmNsdWRlcyBhIDosIGJ1dCBPVEVMIHNwZWMgZG9lcyBub3QsIHNvIHdlIHJlbW92ZSBpdC5cbiAgfVxuXG4gIGlmIChwYXJzZWRVcmwuaG9zdCkge1xuICAgIGRhdGFbJ3NlcnZlci5hZGRyZXNzJ10gPSBwYXJzZWRVcmwuaG9zdDtcbiAgfVxuXG4gIGRhdGFbJ3VybC5zYW1lX29yaWdpbiddID0gcmVzb3VyY2VVcmwuaW5jbHVkZXModHlwZXMuV0lORE9XLmxvY2F0aW9uLm9yaWdpbik7XG5cbiAgY29uc3Qgc3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgc3RhcnRUaW1lO1xuICBjb25zdCBlbmRUaW1lc3RhbXAgPSBzdGFydFRpbWVzdGFtcCArIGR1cmF0aW9uO1xuXG4gIHV0aWxzJDEuX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBkZXNjcmlwdGlvbjogcmVzb3VyY2VVcmwucmVwbGFjZSh0eXBlcy5XSU5ET1cubG9jYXRpb24ub3JpZ2luLCAnJyksXG4gICAgZW5kVGltZXN0YW1wLFxuICAgIG9wOiBlbnRyeS5pbml0aWF0b3JUeXBlID8gYHJlc291cmNlLiR7ZW50cnkuaW5pdGlhdG9yVHlwZX1gIDogJ3Jlc291cmNlLm90aGVyJyxcbiAgICBvcmlnaW46ICdhdXRvLnJlc291cmNlLmJyb3dzZXIubWV0cmljcycsXG4gICAgc3RhcnRUaW1lc3RhbXAsXG4gICAgZGF0YSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ2FwdHVyZSB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHVzZXIgYWdlbnQuXG4gKi9cbmZ1bmN0aW9uIF90cmFja05hdmlnYXRvcih0cmFuc2FjdGlvbikge1xuICBjb25zdCBuYXZpZ2F0b3IgPSB0eXBlcy5XSU5ET1cubmF2aWdhdG9yIDtcbiAgaWYgKCFuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB0cmFjayBuZXR3b3JrIGNvbm5lY3Rpdml0eVxuICBjb25zdCBjb25uZWN0aW9uID0gbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gIGlmIChjb25uZWN0aW9uKSB7XG4gICAgaWYgKGNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkge1xuICAgICAgLy8gVE9ETzogQ2FuIHdlIHJld3JpdGUgdGhpcyB0byBhbiBhdHRyaWJ1dGU/XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnZWZmZWN0aXZlQ29ubmVjdGlvblR5cGUnLCBjb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpO1xuICAgIH1cblxuICAgIGlmIChjb25uZWN0aW9uLnR5cGUpIHtcbiAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlP1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2Nvbm5lY3Rpb25UeXBlJywgY29ubmVjdGlvbi50eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc01lYXN1cmVtZW50VmFsdWUoY29ubmVjdGlvbi5ydHQpKSB7XG4gICAgICBfbWVhc3VyZW1lbnRzWydjb25uZWN0aW9uLnJ0dCddID0geyB2YWx1ZTogY29ubmVjdGlvbi5ydHQsIHVuaXQ6ICdtaWxsaXNlY29uZCcgfTtcbiAgICB9XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc01lYXN1cmVtZW50VmFsdWUobmF2aWdhdG9yLmRldmljZU1lbW9yeSkpIHtcbiAgICAvLyBUT0RPOiBDYW4gd2UgcmV3cml0ZSB0aGlzIHRvIGFuIGF0dHJpYnV0ZT9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2RldmljZU1lbW9yeScsIGAke25hdmlnYXRvci5kZXZpY2VNZW1vcnl9IEdCYCk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc01lYXN1cmVtZW50VmFsdWUobmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kpKSB7XG4gICAgLy8gVE9ETzogQ2FuIHdlIHJld3JpdGUgdGhpcyB0byBhbiBhdHRyaWJ1dGU/XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdoYXJkd2FyZUNvbmN1cnJlbmN5JywgU3RyaW5nKG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5KSk7XG4gIH1cbn1cblxuLyoqIEFkZCBMQ1AgLyBDTFMgZGF0YSB0byB0cmFuc2FjdGlvbiB0byBhbGxvdyBkZWJ1Z2dpbmcgKi9cbmZ1bmN0aW9uIF90YWdNZXRyaWNJbmZvKHRyYW5zYWN0aW9uKSB7XG4gIGlmIChfbGNwRW50cnkpIHtcbiAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AgRGF0YScpO1xuXG4gICAgLy8gQ2FwdHVyZSBQcm9wZXJ0aWVzIG9mIHRoZSBMQ1AgZWxlbWVudCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBMQ1AuXG5cbiAgICBpZiAoX2xjcEVudHJ5LmVsZW1lbnQpIHtcbiAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlP1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC5lbGVtZW50JywgdXRpbHMuaHRtbFRyZWVBc1N0cmluZyhfbGNwRW50cnkuZWxlbWVudCkpO1xuICAgIH1cblxuICAgIGlmIChfbGNwRW50cnkuaWQpIHtcbiAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlP1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC5pZCcsIF9sY3BFbnRyeS5pZCk7XG4gICAgfVxuXG4gICAgaWYgKF9sY3BFbnRyeS51cmwpIHtcbiAgICAgIC8vIFRyaW0gVVJMIHRvIHRoZSBmaXJzdCAyMDAgY2hhcmFjdGVycy5cbiAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlP1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC51cmwnLCBfbGNwRW50cnkudXJsLnRyaW0oKS5zbGljZSgwLCAyMDApKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBDYW4gd2UgcmV3cml0ZSB0aGlzIHRvIGFuIGF0dHJpYnV0ZT9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC5zaXplJywgX2xjcEVudHJ5LnNpemUpO1xuICB9XG5cbiAgLy8gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTGF5b3V0U2hpZnRcbiAgaWYgKF9jbHNFbnRyeSAmJiBfY2xzRW50cnkuc291cmNlcykge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIENMUyBEYXRhJyk7XG4gICAgX2Nsc0VudHJ5LnNvdXJjZXMuZm9yRWFjaCgoc291cmNlLCBpbmRleCkgPT5cbiAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlP1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoYGNscy5zb3VyY2UuJHtpbmRleCArIDF9YCwgdXRpbHMuaHRtbFRyZWVBc1N0cmluZyhzb3VyY2Uubm9kZSkpLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzb3VyY2VFbnRyeVNpemVEYXRhKFxuICBkYXRhLFxuICBlbnRyeSxcbiAga2V5LFxuICBkYXRhS2V5LFxuKSB7XG4gIGNvbnN0IGVudHJ5VmFsID0gZW50cnlba2V5XTtcbiAgaWYgKGVudHJ5VmFsICE9IG51bGwgJiYgZW50cnlWYWwgPCBNQVhfSU5UX0FTX0JZVEVTKSB7XG4gICAgZGF0YVtkYXRhS2V5XSA9IGVudHJ5VmFsO1xuICB9XG59XG5cbi8qKlxuICogQWRkIHR0ZmIgcmVxdWVzdCB0aW1lIGluZm9ybWF0aW9uIHRvIG1lYXN1cmVtZW50cy5cbiAqXG4gKiB0dGZiIGluZm9ybWF0aW9uIGlzIGFkZGVkIHZpYSB2ZW5kb3JlZCB3ZWIgdml0YWxzIGxpYnJhcnkuXG4gKi9cbmZ1bmN0aW9uIF9hZGRUdGZiUmVxdWVzdFRpbWVUb01lYXN1cmVtZW50cyhfbWVhc3VyZW1lbnRzKSB7XG4gIGNvbnN0IG5hdkVudHJ5ID0gZ2V0TmF2aWdhdGlvbkVudHJ5LmdldE5hdmlnYXRpb25FbnRyeSgpO1xuICBpZiAoIW5hdkVudHJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyByZXNwb25zZVN0YXJ0LCByZXF1ZXN0U3RhcnQgfSA9IG5hdkVudHJ5O1xuXG4gIGlmIChyZXF1ZXN0U3RhcnQgPD0gcmVzcG9uc2VTdGFydCkge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIFRURkIgUmVxdWVzdCBUaW1lJyk7XG4gICAgX21lYXN1cmVtZW50c1sndHRmYi5yZXF1ZXN0VGltZSddID0ge1xuICAgICAgdmFsdWU6IHJlc3BvbnNlU3RhcnQgLSByZXF1ZXN0U3RhcnQsXG4gICAgICB1bml0OiAnbWlsbGlzZWNvbmQnLFxuICAgIH07XG4gIH1cbn1cblxuLyoqIFRha2VuIGZyb20gQHNlbnRyeS9jb3JlIHNhbXBsaW5nLnRzICovXG5mdW5jdGlvbiBnZXRTYW1wbGVSYXRlKFxuICB0cmFuc2FjdGlvbkNvbnRleHQsXG4gIG9wdGlvbnMsXG4gIGludGVyYWN0aW9uc1NhbXBsZVJhdGUsXG4pIHtcbiAgaWYgKCFjb3JlLmhhc1RyYWNpbmdFbmFibGVkKG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxldCBzYW1wbGVSYXRlO1xuICBpZiAodHJhbnNhY3Rpb25Db250ZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNhbXBsZVJhdGUgPSBvcHRpb25zLnRyYWNlc1NhbXBsZXIoe1xuICAgICAgdHJhbnNhY3Rpb25Db250ZXh0LFxuICAgICAgbmFtZTogdHJhbnNhY3Rpb25Db250ZXh0Lm5hbWUsXG4gICAgICBwYXJlbnRTYW1wbGVkOiB0cmFuc2FjdGlvbkNvbnRleHQucGFyZW50U2FtcGxlZCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIC4uLnRyYW5zYWN0aW9uQ29udGV4dC5kYXRhLFxuICAgICAgICAuLi50cmFuc2FjdGlvbkNvbnRleHQuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgICBsb2NhdGlvbjogdHlwZXMuV0lORE9XLmxvY2F0aW9uLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHRyYW5zYWN0aW9uQ29udGV4dC5zYW1wbGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzYW1wbGVSYXRlID0gdHJhbnNhY3Rpb25Db250ZXh0LnNhbXBsZWQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzYW1wbGVSYXRlID0gb3B0aW9ucy50cmFjZXNTYW1wbGVSYXRlO1xuICB9IGVsc2Uge1xuICAgIHNhbXBsZVJhdGUgPSAxO1xuICB9XG4gIGlmICghY29yZS5pc1ZhbGlkU2FtcGxlUmF0ZShzYW1wbGVSYXRlKSkge1xuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ1tUcmFjaW5nXSBEaXNjYXJkaW5nIGludGVyYWN0aW9uIHNwYW4gYmVjYXVzZSBvZiBpbnZhbGlkIHNhbXBsZSByYXRlLicpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc2FtcGxlUmF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBpbnRlcmFjdGlvbnNTYW1wbGVSYXRlO1xuICB9IGVsc2UgaWYgKHNhbXBsZVJhdGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHNhbXBsZVJhdGUgKiBpbnRlcmFjdGlvbnNTYW1wbGVSYXRlO1xufVxuXG5leHBvcnRzLl9hZGRNZWFzdXJlU3BhbnMgPSBfYWRkTWVhc3VyZVNwYW5zO1xuZXhwb3J0cy5fYWRkUmVzb3VyY2VTcGFucyA9IF9hZGRSZXNvdXJjZVNwYW5zO1xuZXhwb3J0cy5hZGRQZXJmb3JtYW5jZUVudHJpZXMgPSBhZGRQZXJmb3JtYW5jZUVudHJpZXM7XG5leHBvcnRzLnN0YXJ0VHJhY2tpbmdJTlAgPSBzdGFydFRyYWNraW5nSU5QO1xuZXhwb3J0cy5zdGFydFRyYWNraW5nSW50ZXJhY3Rpb25zID0gc3RhcnRUcmFja2luZ0ludGVyYWN0aW9ucztcbmV4cG9ydHMuc3RhcnRUcmFja2luZ0xvbmdUYXNrcyA9IHN0YXJ0VHJhY2tpbmdMb25nVGFza3M7XG5leHBvcnRzLnN0YXJ0VHJhY2tpbmdXZWJWaXRhbHMgPSBzdGFydFRyYWNraW5nV2ViVml0YWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbmQgdHJhY2sgZmV0Y2ggcmVxdWVzdCBzcGFucyBmb3IgdXNhZ2UgaW4gY29tYmluYXRpb24gd2l0aCBgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcmAuXG4gKlxuICogQHJldHVybnMgU3BhbiBpZiBhIHNwYW4gd2FzIGNyZWF0ZWQsIG90aGVyd2lzZSB2b2lkLlxuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50RmV0Y2hSZXF1ZXN0KFxuICBoYW5kbGVyRGF0YSxcbiAgc2hvdWxkQ3JlYXRlU3BhbixcbiAgc2hvdWxkQXR0YWNoSGVhZGVycyxcbiAgc3BhbnMsXG4gIHNwYW5PcmlnaW4gPSAnYXV0by5odHRwLmJyb3dzZXInLFxuKSB7XG4gIGlmICghY29yZS5oYXNUcmFjaW5nRW5hYmxlZCgpIHx8ICFoYW5kbGVyRGF0YS5mZXRjaERhdGEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2hvdWxkQ3JlYXRlU3BhblJlc3VsdCA9IHNob3VsZENyZWF0ZVNwYW4oaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybCk7XG5cbiAgaWYgKGhhbmRsZXJEYXRhLmVuZFRpbWVzdGFtcCAmJiBzaG91bGRDcmVhdGVTcGFuUmVzdWx0KSB7XG4gICAgY29uc3Qgc3BhbklkID0gaGFuZGxlckRhdGEuZmV0Y2hEYXRhLl9fc3BhbjtcbiAgICBpZiAoIXNwYW5JZCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3BhbiA9IHNwYW5zW3NwYW5JZF07XG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIGVuZFNwYW4oc3BhbiwgaGFuZGxlckRhdGEpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgZGVsZXRlIHNwYW5zW3NwYW5JZF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzY29wZSA9IGNvcmUuZ2V0Q3VycmVudFNjb3BlKCk7XG4gIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtZXRob2QsIHVybCB9ID0gaGFuZGxlckRhdGEuZmV0Y2hEYXRhO1xuXG4gIGNvbnN0IGZ1bGxVcmwgPSBnZXRGdWxsVVJMKHVybCk7XG4gIGNvbnN0IGhvc3QgPSBmdWxsVXJsID8gdXRpbHMucGFyc2VVcmwoZnVsbFVybCkuaG9zdCA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBzcGFuID0gc2hvdWxkQ3JlYXRlU3BhblJlc3VsdFxuICAgID8gY29yZS5zdGFydEluYWN0aXZlU3Bhbih7XG4gICAgICAgIG5hbWU6IGAke21ldGhvZH0gJHt1cmx9YCxcbiAgICAgICAgb25seUlmUGFyZW50OiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgICAgJ2h0dHAubWV0aG9kJzogbWV0aG9kLFxuICAgICAgICAgICdodHRwLnVybCc6IGZ1bGxVcmwsXG4gICAgICAgICAgJ3NlcnZlci5hZGRyZXNzJzogaG9zdCxcbiAgICAgICAgICBbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06IHNwYW5PcmlnaW4sXG4gICAgICAgIH0sXG4gICAgICAgIG9wOiAnaHR0cC5jbGllbnQnLFxuICAgICAgfSlcbiAgICA6IHVuZGVmaW5lZDtcblxuICBpZiAoc3Bhbikge1xuICAgIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW4gPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICAgIHNwYW5zW3NwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWRdID0gc3BhbjtcbiAgfVxuXG4gIGlmIChzaG91bGRBdHRhY2hIZWFkZXJzKGhhbmRsZXJEYXRhLmZldGNoRGF0YS51cmwpICYmIGNsaWVudCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBoYW5kbGVyRGF0YS5hcmdzWzBdO1xuXG4gICAgLy8gSW4gY2FzZSB0aGUgdXNlciBoYXNuJ3Qgc2V0IHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgYSBmZXRjaCBjYWxsIHdlIGRlZmF1bHQgaXQgdG8gYHt9YC5cbiAgICBoYW5kbGVyRGF0YS5hcmdzWzFdID0gaGFuZGxlckRhdGEuYXJnc1sxXSB8fCB7fTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3Qgb3B0aW9ucyA9IGhhbmRsZXJEYXRhLmFyZ3NbMV07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gYWRkVHJhY2luZ0hlYWRlcnNUb0ZldGNoUmVxdWVzdChyZXF1ZXN0LCBjbGllbnQsIHNjb3BlLCBvcHRpb25zLCBzcGFuKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIEFkZHMgc2VudHJ5LXRyYWNlIGFuZCBiYWdnYWdlIGhlYWRlcnMgdG8gdGhlIHZhcmlvdXMgZm9ybXMgb2YgZmV0Y2ggaGVhZGVyc1xuICovXG5mdW5jdGlvbiBhZGRUcmFjaW5nSGVhZGVyc1RvRmV0Y2hSZXF1ZXN0KFxuICByZXF1ZXN0LCAvLyB1bmtub3duIGlzIGFjdHVhbGx5IHR5cGUgUmVxdWVzdCBidXQgd2UgY2FuJ3QgZXhwb3J0IERPTSB0eXBlcyBmcm9tIHRoaXMgcGFja2FnZSxcbiAgY2xpZW50LFxuICBzY29wZSxcbiAgb3B0aW9uc1xuXG4sXG4gIHJlcXVlc3RTcGFuLFxuKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBzcGFuID0gcmVxdWVzdFNwYW4gfHwgc2NvcGUuZ2V0U3BhbigpO1xuXG4gIGNvbnN0IGlzb2xhdGlvblNjb3BlID0gY29yZS5nZXRJc29sYXRpb25TY29wZSgpO1xuXG4gIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBzYW1wbGVkLCBkc2MgfSA9IHtcbiAgICAuLi5pc29sYXRpb25TY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKSxcbiAgICAuLi5zY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKSxcbiAgfTtcblxuICBjb25zdCBzZW50cnlUcmFjZUhlYWRlciA9IHNwYW4gPyBjb3JlLnNwYW5Ub1RyYWNlSGVhZGVyKHNwYW4pIDogdXRpbHMuZ2VuZXJhdGVTZW50cnlUcmFjZUhlYWRlcih0cmFjZUlkLCBzcGFuSWQsIHNhbXBsZWQpO1xuXG4gIGNvbnN0IHNlbnRyeUJhZ2dhZ2VIZWFkZXIgPSB1dGlscy5keW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyKFxuICAgIGRzYyB8fFxuICAgICAgKHNwYW4gPyBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSA6IGNvcmUuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQodHJhY2VJZCwgY2xpZW50LCBzY29wZSkpLFxuICApO1xuXG4gIGNvbnN0IGhlYWRlcnMgPVxuICAgIG9wdGlvbnMuaGVhZGVycyB8fFxuICAgICh0eXBlb2YgUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdXRpbHMuaXNJbnN0YW5jZU9mKHJlcXVlc3QsIFJlcXVlc3QpID8gKHJlcXVlc3QgKS5oZWFkZXJzIDogdW5kZWZpbmVkKTtcblxuICBpZiAoIWhlYWRlcnMpIHtcbiAgICByZXR1cm4geyAnc2VudHJ5LXRyYWNlJzogc2VudHJ5VHJhY2VIZWFkZXIsIGJhZ2dhZ2U6IHNlbnRyeUJhZ2dhZ2VIZWFkZXIgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgSGVhZGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdXRpbHMuaXNJbnN0YW5jZU9mKGhlYWRlcnMsIEhlYWRlcnMpKSB7XG4gICAgY29uc3QgbmV3SGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlcnMgKTtcblxuICAgIG5ld0hlYWRlcnMuYXBwZW5kKCdzZW50cnktdHJhY2UnLCBzZW50cnlUcmFjZUhlYWRlcik7XG5cbiAgICBpZiAoc2VudHJ5QmFnZ2FnZUhlYWRlcikge1xuICAgICAgLy8gSWYgdGhlIHNhbWUgaGVhZGVyIGlzIGFwcGVuZGVkIG11bHRpcGxlIHRpbWVzIHRoZSBicm93c2VyIHdpbGwgbWVyZ2UgdGhlIHZhbHVlcyBpbnRvIGEgc2luZ2xlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAgLy8gSXRzIHRoZXJlZm9yZSBzYWZlIHRvIHNpbXBseSBwdXNoIGEgXCJiYWdnYWdlXCIgZW50cnksIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGFscmVhZHkgYmUgYW5vdGhlciBiYWdnYWdlIGhlYWRlci5cbiAgICAgIG5ld0hlYWRlcnMuYXBwZW5kKHV0aWxzLkJBR0dBR0VfSEVBREVSX05BTUUsIHNlbnRyeUJhZ2dhZ2VIZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdIZWFkZXJzIDtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgY29uc3QgbmV3SGVhZGVycyA9IFsuLi5oZWFkZXJzLCBbJ3NlbnRyeS10cmFjZScsIHNlbnRyeVRyYWNlSGVhZGVyXV07XG5cbiAgICBpZiAoc2VudHJ5QmFnZ2FnZUhlYWRlcikge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBrZXksIHRoZSBicm93c2VyIHdpbGwgbWVyZ2UgdGhlIHZhbHVlcyBpbnRvIGEgc2luZ2xlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAgLy8gSXRzIHRoZXJlZm9yZSBzYWZlIHRvIHNpbXBseSBwdXNoIGEgXCJiYWdnYWdlXCIgZW50cnksIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGFscmVhZHkgYmUgYW5vdGhlciBiYWdnYWdlIGhlYWRlci5cbiAgICAgIG5ld0hlYWRlcnMucHVzaChbdXRpbHMuQkFHR0FHRV9IRUFERVJfTkFNRSwgc2VudHJ5QmFnZ2FnZUhlYWRlcl0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdIZWFkZXJzIDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleGlzdGluZ0JhZ2dhZ2VIZWFkZXIgPSAnYmFnZ2FnZScgaW4gaGVhZGVycyA/IGhlYWRlcnMuYmFnZ2FnZSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBuZXdCYWdnYWdlSGVhZGVycyA9IFtdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdCYWdnYWdlSGVhZGVyKSkge1xuICAgICAgbmV3QmFnZ2FnZUhlYWRlcnMucHVzaCguLi5leGlzdGluZ0JhZ2dhZ2VIZWFkZXIpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdCYWdnYWdlSGVhZGVyKSB7XG4gICAgICBuZXdCYWdnYWdlSGVhZGVycy5wdXNoKGV4aXN0aW5nQmFnZ2FnZUhlYWRlcik7XG4gICAgfVxuXG4gICAgaWYgKHNlbnRyeUJhZ2dhZ2VIZWFkZXIpIHtcbiAgICAgIG5ld0JhZ2dhZ2VIZWFkZXJzLnB1c2goc2VudHJ5QmFnZ2FnZUhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihoZWFkZXJzICksXG4gICAgICAnc2VudHJ5LXRyYWNlJzogc2VudHJ5VHJhY2VIZWFkZXIsXG4gICAgICBiYWdnYWdlOiBuZXdCYWdnYWdlSGVhZGVycy5sZW5ndGggPiAwID8gbmV3QmFnZ2FnZUhlYWRlcnMuam9pbignLCcpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RnVsbFVSTCh1cmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHBhcnNlZC5ocmVmO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRTcGFuKHNwYW4sIGhhbmRsZXJEYXRhKSB7XG4gIGlmIChoYW5kbGVyRGF0YS5yZXNwb25zZSkge1xuICAgIGNvcmUuc2V0SHR0cFN0YXR1cyhzcGFuLCBoYW5kbGVyRGF0YS5yZXNwb25zZS5zdGF0dXMpO1xuXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9XG4gICAgICBoYW5kbGVyRGF0YS5yZXNwb25zZSAmJiBoYW5kbGVyRGF0YS5yZXNwb25zZS5oZWFkZXJzICYmIGhhbmRsZXJEYXRhLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpO1xuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhOdW0gPSBwYXJzZUludChjb250ZW50TGVuZ3RoKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoTnVtID4gMCkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnaHR0cC5yZXNwb25zZV9jb250ZW50X2xlbmd0aCcsIGNvbnRlbnRMZW5ndGhOdW0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoYW5kbGVyRGF0YS5lcnJvcikge1xuICAgIHNwYW4uc2V0U3RhdHVzKCdpbnRlcm5hbF9lcnJvcicpO1xuICB9XG4gIHNwYW4uZW5kKCk7XG59XG5cbmV4cG9ydHMuYWRkVHJhY2luZ0hlYWRlcnNUb0ZldGNoUmVxdWVzdCA9IGFkZFRyYWNpbmdIZWFkZXJzVG9GZXRjaFJlcXVlc3Q7XG5leHBvcnRzLmluc3RydW1lbnRGZXRjaFJlcXVlc3QgPSBpbnN0cnVtZW50RmV0Y2hSZXF1ZXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmV0Y2guanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZmV0Y2ggPSByZXF1aXJlKCcuLi9jb21tb24vZmV0Y2guanMnKTtcbmNvbnN0IGluc3RydW1lbnQgPSByZXF1aXJlKCcuL2luc3RydW1lbnQuanMnKTtcbmNvbnN0IHR5cGVzID0gcmVxdWlyZSgnLi90eXBlcy5qcycpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuY29uc3QgREVGQVVMVF9UUkFDRV9QUk9QQUdBVElPTl9UQVJHRVRTID0gWydsb2NhbGhvc3QnLCAvXlxcLyg/IVxcLykvXTtcblxuLyoqIE9wdGlvbnMgZm9yIFJlcXVlc3QgSW5zdHJ1bWVudGF0aW9uICovXG5cbmNvbnN0IGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyA9IHtcbiAgdHJhY2VGZXRjaDogdHJ1ZSxcbiAgdHJhY2VYSFI6IHRydWUsXG4gIGVuYWJsZUhUVFBUaW1pbmdzOiB0cnVlLFxuICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIHByb3BlcnR5XG4gIHRyYWNpbmdPcmlnaW5zOiBERUZBVUxUX1RSQUNFX1BST1BBR0FUSU9OX1RBUkdFVFMsXG4gIHRyYWNlUHJvcGFnYXRpb25UYXJnZXRzOiBERUZBVUxUX1RSQUNFX1BST1BBR0FUSU9OX1RBUkdFVFMsXG59O1xuXG4vKiogUmVnaXN0ZXJzIHNwYW4gY3JlYXRvcnMgZm9yIHhociBhbmQgZmV0Y2ggcmVxdWVzdHMgICovXG5mdW5jdGlvbiBpbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyhfb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgdHJhY2VGZXRjaCxcbiAgICB0cmFjZVhIUixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICB0cmFjaW5nT3JpZ2lucyxcbiAgICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgICBlbmFibGVIVFRQVGltaW5ncyxcbiAgfSA9IHtcbiAgICB0cmFjZUZldGNoOiBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMudHJhY2VGZXRjaCxcbiAgICB0cmFjZVhIUjogZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLnRyYWNlWEhSLFxuICAgIC4uLl9vcHRpb25zLFxuICB9O1xuXG4gIGNvbnN0IHNob3VsZENyZWF0ZVNwYW4gPVxuICAgIHR5cGVvZiBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyA/IHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0IDogKF8pID0+IHRydWU7XG5cbiAgLy8gVE9ETyh2OCkgUmVtb3ZlIHRyYWNpbmdPcmlnaW5zIGhlcmVcbiAgLy8gVGhlIG9ubHkgcmVhc29uIHdlJ3JlIHBhc3NpbmcgaXQgaW4gaGVyZSBpcyBiZWNhdXNlIHRoaXMgaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMgZnVuY3Rpb24gaXMgcHVibGljbHkgZXhwb3J0ZWRcbiAgLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlIEFQSS4gV2UgY2FuIHJlbW92ZSBpdCBpbiB2OC5cbiAgY29uc3Qgc2hvdWxkQXR0YWNoSGVhZGVyc1dpdGhUYXJnZXRzID0gKHVybCkgPT5cbiAgICBzaG91bGRBdHRhY2hIZWFkZXJzKHVybCwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMgfHwgdHJhY2luZ09yaWdpbnMpO1xuXG4gIGNvbnN0IHNwYW5zID0ge307XG5cbiAgaWYgKHRyYWNlRmV0Y2gpIHtcbiAgICB1dGlscy5hZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlckRhdGEgPT4ge1xuICAgICAgY29uc3QgY3JlYXRlZFNwYW4gPSBmZXRjaC5pbnN0cnVtZW50RmV0Y2hSZXF1ZXN0KGhhbmRsZXJEYXRhLCBzaG91bGRDcmVhdGVTcGFuLCBzaG91bGRBdHRhY2hIZWFkZXJzV2l0aFRhcmdldHMsIHNwYW5zKTtcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYHdpbmRvdy5sb2NhdGlvbmAgaW4gdGhlIGdlbmVyaWMgZmV0Y2ggaW5zdHJ1bWVudGF0aW9uLFxuICAgICAgLy8gYnV0IHdlIG5lZWQgaXQgZm9yIHJlbGlhYmxlIGBzZXJ2ZXIuYWRkcmVzc2AgYXR0cmlidXRlLlxuICAgICAgLy8gc28gd2UgZXh0ZW5kIHRoaXMgaW4gaGVyZVxuICAgICAgaWYgKGNyZWF0ZWRTcGFuKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBnZXRGdWxsVVJMKGhhbmRsZXJEYXRhLmZldGNoRGF0YS51cmwpO1xuICAgICAgICBjb25zdCBob3N0ID0gZnVsbFVybCA/IHV0aWxzLnBhcnNlVXJsKGZ1bGxVcmwpLmhvc3QgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRTcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICdodHRwLnVybCc6IGZ1bGxVcmwsXG4gICAgICAgICAgJ3NlcnZlci5hZGRyZXNzJzogaG9zdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVIVFRQVGltaW5ncyAmJiBjcmVhdGVkU3Bhbikge1xuICAgICAgICBhZGRIVFRQVGltaW5ncyhjcmVhdGVkU3Bhbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAodHJhY2VYSFIpIHtcbiAgICB1dGlscy5hZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXJEYXRhID0+IHtcbiAgICAgIGNvbnN0IGNyZWF0ZWRTcGFuID0geGhyQ2FsbGJhY2soaGFuZGxlckRhdGEsIHNob3VsZENyZWF0ZVNwYW4sIHNob3VsZEF0dGFjaEhlYWRlcnNXaXRoVGFyZ2V0cywgc3BhbnMpO1xuICAgICAgaWYgKGVuYWJsZUhUVFBUaW1pbmdzICYmIGNyZWF0ZWRTcGFuKSB7XG4gICAgICAgIGFkZEhUVFBUaW1pbmdzKGNyZWF0ZWRTcGFuKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcoZW50cnkpIHtcbiAgcmV0dXJuIChcbiAgICBlbnRyeS5lbnRyeVR5cGUgPT09ICdyZXNvdXJjZScgJiZcbiAgICAnaW5pdGlhdG9yVHlwZScgaW4gZW50cnkgJiZcbiAgICB0eXBlb2YgKGVudHJ5ICkubmV4dEhvcFByb3RvY29sID09PSAnc3RyaW5nJyAmJlxuICAgIChlbnRyeS5pbml0aWF0b3JUeXBlID09PSAnZmV0Y2gnIHx8IGVudHJ5LmluaXRpYXRvclR5cGUgPT09ICd4bWxodHRwcmVxdWVzdCcpXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBvYnNlcnZlciB0byBsaXN0ZW4gdG8gdGhlIG5leHQgZmV0Y2gveGhyIHJlc291cmNpbmcgdGltaW5ncyxcbiAqIHNvIHRoYXQgd2hlbiB0aW1pbmdzIGhpdCB0aGVpciBwZXItYnJvd3NlciBsaW1pdCB0aGV5IGRvbid0IG5lZWQgdG8gYmUgcmVtb3ZlZC5cbiAqXG4gKiBAcGFyYW0gc3BhbiBBIHNwYW4gdGhhdCBoYXMgeWV0IHRvIGJlIGZpbmlzaGVkLCBtdXN0IGNvbnRhaW4gYHVybGAgb24gZGF0YS5cbiAqL1xuZnVuY3Rpb24gYWRkSFRUUFRpbWluZ3Moc3Bhbikge1xuICBjb25zdCB7IHVybCB9ID0gY29yZS5zcGFuVG9KU09OKHNwYW4pLmRhdGEgfHwge307XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjbGVhbnVwID0gaW5zdHJ1bWVudC5hZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoJ3Jlc291cmNlJywgKHsgZW50cmllcyB9KSA9PiB7XG4gICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgIGlmIChpc1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcoZW50cnkpICYmIGVudHJ5Lm5hbWUuZW5kc1dpdGgodXJsKSkge1xuICAgICAgICBjb25zdCBzcGFuRGF0YSA9IHJlc291cmNlVGltaW5nRW50cnlUb1NwYW5EYXRhKGVudHJ5KTtcbiAgICAgICAgc3BhbkRhdGEuZm9yRWFjaChkYXRhID0+IHNwYW4uc2V0QXR0cmlidXRlKC4uLmRhdGEpKTtcbiAgICAgICAgLy8gSW4gdGhlIG5leHQgdGljaywgY2xlYW4gdGhpcyBoYW5kbGVyIHVwXG4gICAgICAgIC8vIFdlIGhhdmUgdG8gd2FpdCBoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoaXMgY2xlYW5zIGl0c2VsZiB1cCBiZWZvcmUgaXQgaXMgZnVsbHkgZG9uZVxuICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBBTFBOIHByb3RvY29sIGlkcyB0byBuYW1lIGFuZCB2ZXJzaW9uLlxuICpcbiAqIChodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtZXh0ZW5zaW9udHlwZS12YWx1ZXMvdGxzLWV4dGVuc2lvbnR5cGUtdmFsdWVzLnhodG1sI2FscG4tcHJvdG9jb2wtaWRzKVxuICogQHBhcmFtIG5leHRIb3BQcm90b2NvbCBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLm5leHRIb3BQcm90b2NvbFxuICovXG5mdW5jdGlvbiBleHRyYWN0TmV0d29ya1Byb3RvY29sKG5leHRIb3BQcm90b2NvbCkge1xuICBsZXQgbmFtZSA9ICd1bmtub3duJztcbiAgbGV0IHZlcnNpb24gPSAndW5rbm93bic7XG4gIGxldCBfbmFtZSA9ICcnO1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmV4dEhvcFByb3RvY29sKSB7XG4gICAgLy8gaHR0cC8xLjEgZXRjLlxuICAgIGlmIChjaGFyID09PSAnLycpIHtcbiAgICAgIFtuYW1lLCB2ZXJzaW9uXSA9IG5leHRIb3BQcm90b2NvbC5zcGxpdCgnLycpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIGgyLCBoMyBldGMuXG4gICAgaWYgKCFpc05hTihOdW1iZXIoY2hhcikpKSB7XG4gICAgICBuYW1lID0gX25hbWUgPT09ICdoJyA/ICdodHRwJyA6IF9uYW1lO1xuICAgICAgdmVyc2lvbiA9IG5leHRIb3BQcm90b2NvbC5zcGxpdChfbmFtZSlbMV07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgX25hbWUgKz0gY2hhcjtcbiAgfVxuICBpZiAoX25hbWUgPT09IG5leHRIb3BQcm90b2NvbCkge1xuICAgIC8vIHdlYnJ0YywgZnRwLCBldGMuXG4gICAgbmFtZSA9IF9uYW1lO1xuICB9XG4gIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTtcbn1cblxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVUaW1lKHRpbWUgPSAwKSB7XG4gIHJldHVybiAoKHV0aWxzLmJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gfHwgcGVyZm9ybWFuY2UudGltZU9yaWdpbikgKyB0aW1lKSAvIDEwMDA7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlVGltaW5nRW50cnlUb1NwYW5EYXRhKHJlc291cmNlVGltaW5nKSB7XG4gIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZXh0cmFjdE5ldHdvcmtQcm90b2NvbChyZXNvdXJjZVRpbWluZy5uZXh0SG9wUHJvdG9jb2wpO1xuXG4gIGNvbnN0IHRpbWluZ1NwYW5EYXRhID0gW107XG5cbiAgdGltaW5nU3BhbkRhdGEucHVzaChbJ25ldHdvcmsucHJvdG9jb2wudmVyc2lvbicsIHZlcnNpb25dLCBbJ25ldHdvcmsucHJvdG9jb2wubmFtZScsIG5hbWVdKTtcblxuICBpZiAoIXV0aWxzLmJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pIHtcbiAgICByZXR1cm4gdGltaW5nU3BhbkRhdGE7XG4gIH1cbiAgcmV0dXJuIFtcbiAgICAuLi50aW1pbmdTcGFuRGF0YSxcbiAgICBbJ2h0dHAucmVxdWVzdC5yZWRpcmVjdF9zdGFydCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5yZWRpcmVjdFN0YXJ0KV0sXG4gICAgWydodHRwLnJlcXVlc3QuZmV0Y2hfc3RhcnQnLCBnZXRBYnNvbHV0ZVRpbWUocmVzb3VyY2VUaW1pbmcuZmV0Y2hTdGFydCldLFxuICAgIFsnaHR0cC5yZXF1ZXN0LmRvbWFpbl9sb29rdXBfc3RhcnQnLCBnZXRBYnNvbHV0ZVRpbWUocmVzb3VyY2VUaW1pbmcuZG9tYWluTG9va3VwU3RhcnQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5kb21haW5fbG9va3VwX2VuZCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5kb21haW5Mb29rdXBFbmQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5jb25uZWN0X3N0YXJ0JywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLmNvbm5lY3RTdGFydCldLFxuICAgIFsnaHR0cC5yZXF1ZXN0LnNlY3VyZV9jb25uZWN0aW9uX3N0YXJ0JywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLnNlY3VyZUNvbm5lY3Rpb25TdGFydCldLFxuICAgIFsnaHR0cC5yZXF1ZXN0LmNvbm5lY3Rpb25fZW5kJywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLmNvbm5lY3RFbmQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5yZXF1ZXN0X3N0YXJ0JywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLnJlcXVlc3RTdGFydCldLFxuICAgIFsnaHR0cC5yZXF1ZXN0LnJlc3BvbnNlX3N0YXJ0JywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLnJlc3BvbnNlU3RhcnQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5yZXNwb25zZV9lbmQnLCBnZXRBYnNvbHV0ZVRpbWUocmVzb3VyY2VUaW1pbmcucmVzcG9uc2VFbmQpXSxcbiAgXTtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGF0dGFjaCB0cmFjaW5nIGhlYWRlcnMgdG8gYSByZXF1ZXN0LlxuICogVGhpcyB3YXMgZXh0cmFjdGVkIGZyb20gYGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzYCB0byBtYWtlIGl0IGVhc2llciB0byB0ZXN0IHNob3VsZEF0dGFjaEhlYWRlcnMuXG4gKiBXZSBvbmx5IGV4cG9ydCB0aGlzIGZ1Y3Rpb24gZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEF0dGFjaEhlYWRlcnModXJsLCB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cykge1xuICByZXR1cm4gdXRpbHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKHVybCwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMgfHwgREVGQVVMVF9UUkFDRV9QUk9QQUdBVElPTl9UQVJHRVRTKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW5kIHRyYWNrIHhociByZXF1ZXN0IHNwYW5zXG4gKlxuICogQHJldHVybnMgU3BhbiBpZiBhIHNwYW4gd2FzIGNyZWF0ZWQsIG90aGVyd2lzZSB2b2lkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24geGhyQ2FsbGJhY2soXG4gIGhhbmRsZXJEYXRhLFxuICBzaG91bGRDcmVhdGVTcGFuLFxuICBzaG91bGRBdHRhY2hIZWFkZXJzLFxuICBzcGFucyxcbikge1xuICBjb25zdCB4aHIgPSBoYW5kbGVyRGF0YS54aHI7XG4gIGNvbnN0IHNlbnRyeVhockRhdGEgPSB4aHIgJiYgeGhyW3V0aWxzLlNFTlRSWV9YSFJfREFUQV9LRVldO1xuXG4gIGlmICghY29yZS5oYXNUcmFjaW5nRW5hYmxlZCgpIHx8ICF4aHIgfHwgeGhyLl9fc2VudHJ5X293bl9yZXF1ZXN0X18gfHwgIXNlbnRyeVhockRhdGEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2hvdWxkQ3JlYXRlU3BhblJlc3VsdCA9IHNob3VsZENyZWF0ZVNwYW4oc2VudHJ5WGhyRGF0YS51cmwpO1xuXG4gIC8vIGNoZWNrIGZpcnN0IGlmIHRoZSByZXF1ZXN0IGhhcyBmaW5pc2hlZCBhbmQgaXMgdHJhY2tlZCBieSBhbiBleGlzdGluZyBzcGFuIHdoaWNoIHNob3VsZCBub3cgZW5kXG4gIGlmIChoYW5kbGVyRGF0YS5lbmRUaW1lc3RhbXAgJiYgc2hvdWxkQ3JlYXRlU3BhblJlc3VsdCkge1xuICAgIGNvbnN0IHNwYW5JZCA9IHhoci5fX3NlbnRyeV94aHJfc3Bhbl9pZF9fO1xuICAgIGlmICghc3BhbklkKSByZXR1cm47XG5cbiAgICBjb25zdCBzcGFuID0gc3BhbnNbc3BhbklkXTtcbiAgICBpZiAoc3BhbiAmJiBzZW50cnlYaHJEYXRhLnN0YXR1c19jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcmUuc2V0SHR0cFN0YXR1cyhzcGFuLCBzZW50cnlYaHJEYXRhLnN0YXR1c19jb2RlKTtcbiAgICAgIHNwYW4uZW5kKCk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSBzcGFuc1tzcGFuSWRdO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2NvcGUgPSBjb3JlLmdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCBpc29sYXRpb25TY29wZSA9IGNvcmUuZ2V0SXNvbGF0aW9uU2NvcGUoKTtcblxuICBjb25zdCBmdWxsVXJsID0gZ2V0RnVsbFVSTChzZW50cnlYaHJEYXRhLnVybCk7XG4gIGNvbnN0IGhvc3QgPSBmdWxsVXJsID8gdXRpbHMucGFyc2VVcmwoZnVsbFVybCkuaG9zdCA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBzcGFuID0gc2hvdWxkQ3JlYXRlU3BhblJlc3VsdFxuICAgID8gY29yZS5zdGFydEluYWN0aXZlU3Bhbih7XG4gICAgICAgIG5hbWU6IGAke3NlbnRyeVhockRhdGEubWV0aG9kfSAke3NlbnRyeVhockRhdGEudXJsfWAsXG4gICAgICAgIG9ubHlJZlBhcmVudDogdHJ1ZSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIHR5cGU6ICd4aHInLFxuICAgICAgICAgICdodHRwLm1ldGhvZCc6IHNlbnRyeVhockRhdGEubWV0aG9kLFxuICAgICAgICAgICdodHRwLnVybCc6IGZ1bGxVcmwsXG4gICAgICAgICAgdXJsOiBzZW50cnlYaHJEYXRhLnVybCxcbiAgICAgICAgICAnc2VydmVyLmFkZHJlc3MnOiBob3N0LFxuICAgICAgICAgIFtjb3JlLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8uaHR0cC5icm93c2VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3A6ICdodHRwLmNsaWVudCcsXG4gICAgICB9KVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmIChzcGFuKSB7XG4gICAgeGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX18gPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICAgIHNwYW5zW3hoci5fX3NlbnRyeV94aHJfc3Bhbl9pZF9fXSA9IHNwYW47XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBjb3JlLmdldENsaWVudCgpO1xuXG4gIGlmICh4aHIuc2V0UmVxdWVzdEhlYWRlciAmJiBzaG91bGRBdHRhY2hIZWFkZXJzKHNlbnRyeVhockRhdGEudXJsKSAmJiBjbGllbnQpIHtcbiAgICBjb25zdCB7IHRyYWNlSWQsIHNwYW5JZCwgc2FtcGxlZCwgZHNjIH0gPSB7XG4gICAgICAuLi5pc29sYXRpb25TY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKSxcbiAgICAgIC4uLnNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpLFxuICAgIH07XG5cbiAgICBjb25zdCBzZW50cnlUcmFjZUhlYWRlciA9IHNwYW4gPyBjb3JlLnNwYW5Ub1RyYWNlSGVhZGVyKHNwYW4pIDogdXRpbHMuZ2VuZXJhdGVTZW50cnlUcmFjZUhlYWRlcih0cmFjZUlkLCBzcGFuSWQsIHNhbXBsZWQpO1xuXG4gICAgY29uc3Qgc2VudHJ5QmFnZ2FnZUhlYWRlciA9IHV0aWxzLmR5bmFtaWNTYW1wbGluZ0NvbnRleHRUb1NlbnRyeUJhZ2dhZ2VIZWFkZXIoXG4gICAgICBkc2MgfHxcbiAgICAgICAgKHNwYW4gPyBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSA6IGNvcmUuZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQodHJhY2VJZCwgY2xpZW50LCBzY29wZSkpLFxuICAgICk7XG5cbiAgICBzZXRIZWFkZXJPblhocih4aHIsIHNlbnRyeVRyYWNlSGVhZGVyLCBzZW50cnlCYWdnYWdlSGVhZGVyKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufVxuXG5mdW5jdGlvbiBzZXRIZWFkZXJPblhocihcbiAgeGhyLFxuICBzZW50cnlUcmFjZUhlYWRlcixcbiAgc2VudHJ5QmFnZ2FnZUhlYWRlcixcbikge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ3NlbnRyeS10cmFjZScsIHNlbnRyeVRyYWNlSGVhZGVyKTtcbiAgICBpZiAoc2VudHJ5QmFnZ2FnZUhlYWRlcikge1xuICAgICAgLy8gRnJvbSBNRE46IFwiSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMgd2l0aCB0aGUgc2FtZSBoZWFkZXIsIHRoZSB2YWx1ZXMgYXJlIG1lcmdlZCBpbnRvIG9uZSBzaW5nbGUgcmVxdWVzdCBoZWFkZXIuXCJcbiAgICAgIC8vIFdlIGNhbiB0aGVyZWZvcmUgc2ltcGx5IHNldCBhIGJhZ2dhZ2UgaGVhZGVyIHdpdGhvdXQgY2hlY2tpbmcgd2hhdCB3YXMgdGhlcmUgYmVmb3JlXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3Qvc2V0UmVxdWVzdEhlYWRlclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKHV0aWxzLkJBR0dBR0VfSEVBREVSX05BTUUsIHNlbnRyeUJhZ2dhZ2VIZWFkZXIpO1xuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFJlcXVlc3RIZWFkZXInIG9uICdYTUxIdHRwUmVxdWVzdCc6IFRoZSBvYmplY3QncyBzdGF0ZSBtdXN0IGJlIE9QRU5FRC5cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGdWxsVVJMKHVybCkge1xuICB0cnkge1xuICAgIC8vIEJ5IGFkZGluZyBhIGJhc2UgVVJMIHRvIG5ldyBVUkwoKSwgdGhpcyB3aWxsIGFsc28gd29yayBmb3IgcmVsYXRpdmUgdXJsc1xuICAgIC8vIElmIGB1cmxgIGlzIGEgZnVsbCBVUkwsIHRoZSBiYXNlIFVSTCBpcyBpZ25vcmVkIGFueWhvd1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsLCB0eXBlcy5XSU5ET1cubG9jYXRpb24ub3JpZ2luKTtcbiAgICByZXR1cm4gcGFyc2VkLmhyZWY7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydHMuREVGQVVMVF9UUkFDRV9QUk9QQUdBVElPTl9UQVJHRVRTID0gREVGQVVMVF9UUkFDRV9QUk9QQUdBVElPTl9UQVJHRVRTO1xuZXhwb3J0cy5kZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMgPSBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnM7XG5leHBvcnRzLmV4dHJhY3ROZXR3b3JrUHJvdG9jb2wgPSBleHRyYWN0TmV0d29ya1Byb3RvY29sO1xuZXhwb3J0cy5pbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyA9IGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzO1xuZXhwb3J0cy5zaG91bGRBdHRhY2hIZWFkZXJzID0gc2hvdWxkQXR0YWNoSGVhZGVycztcbmV4cG9ydHMueGhyQ2FsbGJhY2sgPSB4aHJDYWxsYmFjaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3QuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzLmpzJyk7XG5cbi8qKlxuICogRGVmYXVsdCBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgcGFnZWxvYWQgYW5kIG5hdmlnYXRpb24gdHJhbnNhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRSb3V0aW5nV2l0aERlZmF1bHRzKFxuICBjdXN0b21TdGFydFRyYW5zYWN0aW9uLFxuICBzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCA9IHRydWUsXG4gIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlID0gdHJ1ZSxcbikge1xuICBpZiAoIXR5cGVzLldJTkRPVyB8fCAhdHlwZXMuV0lORE9XLmxvY2F0aW9uKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybignQ291bGQgbm90IGluaXRpYWxpemUgcm91dGluZyBpbnN0cnVtZW50YXRpb24gZHVlIHRvIGludmFsaWQgbG9jYXRpb24nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc3RhcnRpbmdVcmwgPSB0eXBlcy5XSU5ET1cubG9jYXRpb24uaHJlZjtcblxuICBsZXQgYWN0aXZlVHJhbnNhY3Rpb247XG4gIGlmIChzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCkge1xuICAgIGFjdGl2ZVRyYW5zYWN0aW9uID0gY3VzdG9tU3RhcnRUcmFuc2FjdGlvbih7XG4gICAgICBuYW1lOiB0eXBlcy5XSU5ET1cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAvLyBwYWdlbG9hZCBzaG91bGQgYWx3YXlzIHN0YXJ0IGF0IHRpbWVPcmlnaW4gKGFuZCBuZWVkcyB0byBiZSBpbiBzLCBub3QgbXMpXG4gICAgICBzdGFydFRpbWVzdGFtcDogdXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiA/IHV0aWxzLmJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gLyAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgb3A6ICdwYWdlbG9hZCcsXG4gICAgICBvcmlnaW46ICdhdXRvLnBhZ2Vsb2FkLmJyb3dzZXInLFxuICAgICAgbWV0YWRhdGE6IHsgc291cmNlOiAndXJsJyB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlKSB7XG4gICAgdXRpbHMuYWRkSGlzdG9yeUluc3RydW1lbnRhdGlvbkhhbmRsZXIoKHsgdG8sIGZyb20gfSkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGVhcmx5IHJldHVybiBpcyB0aGVyZSB0byBhY2NvdW50IGZvciBzb21lIGNhc2VzIHdoZXJlIGEgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbiBzdGFydHMgcmlnaHQgYWZ0ZXJcbiAgICAgICAqIGxvbmctcnVubmluZyBwYWdlbG9hZC4gV2UgbWFrZSBzdXJlIHRoYXQgaWYgYGZyb21gIGlzIHVuZGVmaW5lZCBhbmQgYSB2YWxpZCBgc3RhcnRpbmdVUkxgIGV4aXN0cywgd2UgZG9uJ3RcbiAgICAgICAqIGNyZWF0ZSBhbiB1bmVjY2Vzc2FyeSBuYXZpZ2F0aW9uIHRyYW5zYWN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIFRoaXMgd2FzIGhhcmQgdG8gZHVwbGljYXRlLCBidXQgdGhpcyBiZWhhdmlvciBzdG9wcGVkIGFzIHNvb24gYXMgdGhpcyBmaXggd2FzIGFwcGxpZWQuIFRoaXMgaXNzdWUgbWlnaHQgYWxzb1xuICAgICAgICogb25seSBiZSBjYXVzZWQgaW4gY2VydGFpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIHVzYWdlIG9mIGEgaG90IG1vZHVsZSByZWxvYWRlciBpcyBjYXVzaW5nXG4gICAgICAgKiBlcnJvcnMuXG4gICAgICAgKi9cbiAgICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQgJiYgc3RhcnRpbmdVcmwgJiYgc3RhcnRpbmdVcmwuaW5kZXhPZih0bykgIT09IC0xKSB7XG4gICAgICAgIHN0YXJ0aW5nVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChmcm9tICE9PSB0bykge1xuICAgICAgICBzdGFydGluZ1VybCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKGBbVHJhY2luZ10gRmluaXNoaW5nIGN1cnJlbnQgdHJhbnNhY3Rpb24gd2l0aCBvcDogJHthY3RpdmVUcmFuc2FjdGlvbi5vcH1gKTtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG9wZW4gdHJhbnNhY3Rpb24gb24gdGhlIHNjb3BlLCB3ZSBuZWVkIHRvIGZpbmlzaCBpdCBiZWZvcmUgY3JlYXRpbmcgYW4gbmV3IG9uZS5cbiAgICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbi5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbiA9IGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIG5hbWU6IHR5cGVzLldJTkRPVy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICBvcDogJ25hdmlnYXRpb24nLFxuICAgICAgICAgIG9yaWdpbjogJ2F1dG8ubmF2aWdhdGlvbi5icm93c2VyJyxcbiAgICAgICAgICBtZXRhZGF0YTogeyBzb3VyY2U6ICd1cmwnIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydHMuaW5zdHJ1bWVudFJvdXRpbmdXaXRoRGVmYXVsdHMgPSBpbnN0cnVtZW50Um91dGluZ1dpdGhEZWZhdWx0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvdXRlci5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBiYWNrZ3JvdW5kdGFiID0gcmVxdWlyZSgnLi9iYWNrZ3JvdW5kdGFiLmpzJyk7XG5jb25zdCBpbnN0cnVtZW50ID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50LmpzJyk7XG5jb25zdCBpbmRleCA9IHJlcXVpcmUoJy4vbWV0cmljcy9pbmRleC5qcycpO1xuY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoJy4vcmVxdWVzdC5qcycpO1xuY29uc3Qgcm91dGVyID0gcmVxdWlyZSgnLi9yb3V0ZXIuanMnKTtcbmNvbnN0IHR5cGVzID0gcmVxdWlyZSgnLi90eXBlcy5qcycpO1xuXG5jb25zdCBCUk9XU0VSX1RSQUNJTkdfSU5URUdSQVRJT05fSUQgPSAnQnJvd3NlclRyYWNpbmcnO1xuXG4vKiogT3B0aW9ucyBmb3IgQnJvd3NlciBUcmFjaW5nIGludGVncmF0aW9uICovXG5cbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9UUkFDSU5HX09QVElPTlMgPSB7XG4gIC4uLmNvcmUuVFJBQ0lOR19ERUZBVUxUUyxcbiAgbWFya0JhY2tncm91bmRUcmFuc2FjdGlvbnM6IHRydWUsXG4gIHJvdXRpbmdJbnN0cnVtZW50YXRpb246IHJvdXRlci5pbnN0cnVtZW50Um91dGluZ1dpdGhEZWZhdWx0cyxcbiAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U6IHRydWUsXG4gIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkOiB0cnVlLFxuICBlbmFibGVMb25nVGFzazogdHJ1ZSxcbiAgZW5hYmxlSW5wOiBmYWxzZSxcbiAgaW50ZXJhY3Rpb25zU2FtcGxlUmF0ZTogMSxcbiAgX2V4cGVyaW1lbnRzOiB7fSxcbiAgLi4ucmVxdWVzdC5kZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsXG59O1xuXG4vKiogV2Ugc3RvcmUgdXAgdG8gMTAgaW50ZXJhY3Rpb24gY2FuZGlkYXRlcyBtYXggdG8gY2FwIG1lbW9yeSB1c2FnZS4gVGhpcyBpcyB0aGUgc2FtZSBjYXAgYXMgZ2V0SU5QIGZyb20gd2ViLXZpdGFscyAqL1xuY29uc3QgTUFYX0lOVEVSQUNUSU9OUyA9IDEwO1xuXG4vKipcbiAqIFRoZSBCcm93c2VyIFRyYWNpbmcgaW50ZWdyYXRpb24gYXV0b21hdGljYWxseSBpbnN0cnVtZW50cyBicm93c2VyIHBhZ2Vsb2FkL25hdmlnYXRpb25cbiAqIGFjdGlvbnMgYXMgdHJhbnNhY3Rpb25zLCBhbmQgY2FwdHVyZXMgcmVxdWVzdHMsIG1ldHJpY3MgYW5kIGVycm9ycyBhcyBzcGFucy5cbiAqXG4gKiBUaGUgaW50ZWdyYXRpb24gY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucywgYW5kIGNhbiBiZSBleHRlbmRlZCB0byB1c2VcbiAqIGFueSByb3V0aW5nIGxpYnJhcnkuIFRoaXMgaW50ZWdyYXRpb24gdXNlcyB7QHNlZSBJZGxlVHJhbnNhY3Rpb259IHRvIGNyZWF0ZSB0cmFuc2FjdGlvbnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbmNsYXNzIEJyb3dzZXJUcmFjaW5nICB7XG4gIC8vIFRoaXMgY2xhc3MgY3VycmVudGx5IGRvZXNuJ3QgaGF2ZSBhIHN0YXRpYyBgaWRgIGZpZWxkIGxpa2UgdGhlIG90aGVyIGludGVncmF0aW9uIGNsYXNzZXMsIGJlY2F1c2UgaXQgcHJldmVudGVkXG4gIC8vIEBzZW50cnkvdHJhY2luZyBmcm9tIGJlaW5nIHRyZWVzaGFrZW4uIFRyZWUgc2hha2VycyBkbyBub3QgbGlrZSBzdGF0aWMgZmllbGRzLCBiZWNhdXNlIHRoZXkgYmVoYXZlIGxpa2Ugc2lkZSBlZmZlY3RzLlxuICAvLyBUT0RPOiBDb21lIHVwIHdpdGggYSBiZXR0ZXIgcGxhbiwgdGhhbiB1c2luZyBzdGF0aWMgZmllbGRzIG9uIGludGVncmF0aW9uIGNsYXNzZXMsIGFuZCB1c2UgdGhhdCBwbGFuIG9uIGFsbFxuICAvLyBpbnRlZ3JhdGlvbnMuXG5cbiAgLyoqIEJyb3dzZXIgVHJhY2luZyBpbnRlZ3JhdGlvbiBvcHRpb25zICovXG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gICBjb25zdHJ1Y3Rvcihfb3B0aW9ucykge1xuICAgIHRoaXMubmFtZSA9IEJST1dTRVJfVFJBQ0lOR19JTlRFR1JBVElPTl9JRDtcbiAgICB0aGlzLl9oYXNTZXRUcmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9IGZhbHNlO1xuXG4gICAgY29yZS5hZGRUcmFjaW5nRXh0ZW5zaW9ucygpO1xuXG4gICAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQpIHtcbiAgICAgIHRoaXMuX2hhc1NldFRyYWNlUHJvcGFnYXRpb25UYXJnZXRzID0gISEoXG4gICAgICAgIF9vcHRpb25zICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAoX29wdGlvbnMudHJhY2VQcm9wYWdhdGlvblRhcmdldHMgfHwgX29wdGlvbnMudHJhY2luZ09yaWdpbnMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfQlJPV1NFUl9UUkFDSU5HX09QVElPTlMsXG4gICAgICAuLi5fb3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBlbmFibGVMb25nVGFzayBjYW4gYmUgc2V0IGluIF9leHBlcmltZW50c1xuICAgIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgaW4gdjhcbiAgICBpZiAodGhpcy5vcHRpb25zLl9leHBlcmltZW50cy5lbmFibGVMb25nVGFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlTG9uZ1Rhc2sgPSB0aGlzLm9wdGlvbnMuX2V4cGVyaW1lbnRzLmVuYWJsZUxvbmdUYXNrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gKHY4KTogcmVtb3ZlIHRoaXMgYmxvY2sgYWZ0ZXIgdHJhY2luZ09yaWdpbnMgaXMgcmVtb3ZlZFxuICAgIC8vIFNldCB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyB0byB0cmFjaW5nT3JpZ2lucyBpZiBzcGVjaWZpZWQgYnkgdGhlIHVzZXJcbiAgICAvLyBJbiBjYXNlIGJvdGggYXJlIHNwZWNpZmllZCwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMgdGFrZXMgcHJlY2VkZW5jZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGlmIChfb3B0aW9ucyAmJiAhX29wdGlvbnMudHJhY2VQcm9wYWdhdGlvblRhcmdldHMgJiYgX29wdGlvbnMudHJhY2luZ09yaWdpbnMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgdGhpcy5vcHRpb25zLnRyYWNlUHJvcGFnYXRpb25UYXJnZXRzID0gX29wdGlvbnMudHJhY2luZ09yaWdpbnM7XG4gICAgfVxuXG4gICAgdGhpcy5fY29sbGVjdFdlYlZpdGFscyA9IGluZGV4LnN0YXJ0VHJhY2tpbmdXZWJWaXRhbHMoKTtcbiAgICAvKiogU3RvcmVzIGEgbWFwcGluZyBvZiBpbnRlcmFjdGlvbklkcyBmcm9tIFBlcmZvcm1hbmNlRXZlbnRUaW1pbmdzIHRvIHRoZSBvcmlnaW4gaW50ZXJhY3Rpb24gcGF0aCAqL1xuICAgIHRoaXMuX2ludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmcgPSB7fTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlSW5wKSB7XG4gICAgICBpbmRleC5zdGFydFRyYWNraW5nSU5QKHRoaXMuX2ludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmcsIHRoaXMub3B0aW9ucy5pbnRlcmFjdGlvbnNTYW1wbGVSYXRlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb25nVGFzaykge1xuICAgICAgaW5kZXguc3RhcnRUcmFja2luZ0xvbmdUYXNrcygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLl9leHBlcmltZW50cy5lbmFibGVJbnRlcmFjdGlvbnMpIHtcbiAgICAgIGluZGV4LnN0YXJ0VHJhY2tpbmdJbnRlcmFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXRlc3RSb3V0ZSA9IHtcbiAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIGNvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgIHNldHVwT25jZShfLCBnZXRDdXJyZW50SHViKSB7XG4gICAgdGhpcy5fZ2V0Q3VycmVudEh1YiA9IGdldEN1cnJlbnRIdWI7XG4gICAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IGNsaWVudCA9IGh1Yi5nZXRDbGllbnQoKTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICByb3V0aW5nSW5zdHJ1bWVudGF0aW9uOiBpbnN0cnVtZW50Um91dGluZyxcbiAgICAgIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlLFxuICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQsXG4gICAgICBtYXJrQmFja2dyb3VuZFRyYW5zYWN0aW9ucyxcbiAgICAgIHRyYWNlRmV0Y2gsXG4gICAgICB0cmFjZVhIUixcbiAgICAgIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0LFxuICAgICAgZW5hYmxlSFRUUFRpbWluZ3MsXG4gICAgICBfZXhwZXJpbWVudHMsXG4gICAgfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGNvbnN0IGNsaWVudE9wdGlvbnNUcmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9IGNsaWVudE9wdGlvbnMgJiYgY2xpZW50T3B0aW9ucy50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cztcbiAgICAvLyBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBjb25maWd1cmUgdHJhY2VQcm9wYWdhdGlvblRhcmdldHM6XG4gICAgLy8gMS4gdmlhIHRvcCBsZXZlbCBjbGllbnQgb3B0aW9uIGB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0c2BcbiAgICAvLyAyLiB2aWEgQnJvd3NlclRyYWNpbmcgb3B0aW9uIGB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0c2BcbiAgICAvLyAzLiB2aWEgQnJvd3NlclRyYWNpbmcgb3B0aW9uIGB0cmFjaW5nT3JpZ2luc2AgKGRlcHJlY2F0ZWQpXG4gICAgLy9cbiAgICAvLyBUbyBhdm9pZCBjb25mdXNpb24sIGZhdm91ciB0b3AgbGV2ZWwgY2xpZW50IG9wdGlvbiBgdHJhY2VQcm9wYWdhdGlvblRhcmdldHNgLCBhbmQgZmFsbGJhY2sgdG9cbiAgICAvLyBCcm93c2VyVHJhY2luZyBvcHRpb24gYHRyYWNlUHJvcGFnYXRpb25UYXJnZXRzYCBhbmQgdGhlbiBgdHJhY2luZ09yaWdpbnNgIChkZXByZWNhdGVkKS5cbiAgICAvLyBUaGlzIGlzIGRvbmUgYXMgaXQgbWluaW1pemVzIGJ1bmRsZSBzaXplICh3ZSBkb24ndCBoYXZlIHRvIGhhdmUgdW5kZWZpbmVkIGNoZWNrcykuXG4gICAgLy9cbiAgICAvLyBJZiBib3RoIDEgYW5kIGVpdGhlciBvbmUgb2YgMiBvciAzIGFyZSBzZXQgKGZyb20gYWJvdmUpLCB3ZSBsb2cgb3V0IGEgd2FybmluZy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9IGNsaWVudE9wdGlvbnNUcmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyB8fCB0aGlzLm9wdGlvbnMudHJhY2VQcm9wYWdhdGlvblRhcmdldHM7XG4gICAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdGhpcy5faGFzU2V0VHJhY2VQcm9wYWdhdGlvblRhcmdldHMgJiYgY2xpZW50T3B0aW9uc1RyYWNlUHJvcGFnYXRpb25UYXJnZXRzKSB7XG4gICAgICB1dGlscy5sb2dnZXIud2FybihcbiAgICAgICAgJ1tUcmFjaW5nXSBUaGUgYHRyYWNlUHJvcGFnYXRpb25UYXJnZXRzYCBvcHRpb24gd2FzIHNldCBpbiB0aGUgQnJvd3NlclRyYWNpbmcgaW50ZWdyYXRpb24gYW5kIHRvcCBsZXZlbCBgU2VudHJ5LmluaXRgLiBUaGUgdG9wIGxldmVsIGBTZW50cnkuaW5pdGAgdmFsdWUgaXMgYmVpbmcgdXNlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpbnN0cnVtZW50Um91dGluZyhcbiAgICAgIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5fY3JlYXRlUm91dGVUcmFuc2FjdGlvbihjb250ZXh0KTtcblxuICAgICAgICB0aGlzLm9wdGlvbnMuX2V4cGVyaW1lbnRzLm9uU3RhcnRSb3V0ZVRyYW5zYWN0aW9uICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLl9leHBlcmltZW50cy5vblN0YXJ0Um91dGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgY29udGV4dCwgZ2V0Q3VycmVudEh1Yik7XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICAgICAgfSxcbiAgICAgIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkLFxuICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UsXG4gICAgKTtcblxuICAgIGlmIChtYXJrQmFja2dyb3VuZFRyYW5zYWN0aW9ucykge1xuICAgICAgYmFja2dyb3VuZHRhYi5yZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoX2V4cGVyaW1lbnRzLmVuYWJsZUludGVyYWN0aW9ucykge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJJbnRlcmFjdGlvbkxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVJbnApIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVySW5wSW50ZXJhY3Rpb25MaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJlcXVlc3QuaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMoe1xuICAgICAgdHJhY2VGZXRjaCxcbiAgICAgIHRyYWNlWEhSLFxuICAgICAgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMsXG4gICAgICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgICAgIGVuYWJsZUhUVFBUaW1pbmdzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZSByb3V0aW5nIGlkbGUgdHJhbnNhY3Rpb24uICovXG4gICBfY3JlYXRlUm91dGVUcmFuc2FjdGlvbihjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLl9nZXRDdXJyZW50SHViKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKGBbVHJhY2luZ10gRGlkIG5vdCBjcmVhdGUgJHtjb250ZXh0Lm9wfSB0cmFuc2FjdGlvbiBiZWNhdXNlIF9nZXRDdXJyZW50SHViIGlzIGludmFsaWQuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGh1YiA9IHRoaXMuX2dldEN1cnJlbnRIdWIoKTtcblxuICAgIGNvbnN0IHsgYmVmb3JlTmF2aWdhdGUsIGlkbGVUaW1lb3V0LCBmaW5hbFRpbWVvdXQsIGhlYXJ0YmVhdEludGVydmFsIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBjb25zdCBpc1BhZ2Vsb2FkVHJhbnNhY3Rpb24gPSBjb250ZXh0Lm9wID09PSAncGFnZWxvYWQnO1xuXG4gICAgbGV0IGV4cGFuZGVkQ29udGV4dDtcbiAgICBpZiAoaXNQYWdlbG9hZFRyYW5zYWN0aW9uKSB7XG4gICAgICBjb25zdCBzZW50cnlUcmFjZSA9IGlzUGFnZWxvYWRUcmFuc2FjdGlvbiA/IGdldE1ldGFDb250ZW50KCdzZW50cnktdHJhY2UnKSA6ICcnO1xuICAgICAgY29uc3QgYmFnZ2FnZSA9IGlzUGFnZWxvYWRUcmFuc2FjdGlvbiA/IGdldE1ldGFDb250ZW50KCdiYWdnYWdlJykgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB7IHRyYWNlSWQsIGRzYywgcGFyZW50U3BhbklkLCBzYW1wbGVkIH0gPSB1dGlscy5wcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycyhzZW50cnlUcmFjZSwgYmFnZ2FnZSk7XG4gICAgICBleHBhbmRlZENvbnRleHQgPSB7XG4gICAgICAgIHRyYWNlSWQsXG4gICAgICAgIHBhcmVudFNwYW5JZCxcbiAgICAgICAgcGFyZW50U2FtcGxlZDogc2FtcGxlZCxcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICAuLi5jb250ZXh0Lm1ldGFkYXRhLFxuICAgICAgICAgIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQ6IGRzYyxcbiAgICAgICAgfSxcbiAgICAgICAgdHJpbUVuZDogdHJ1ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkQ29udGV4dCA9IHtcbiAgICAgICAgdHJpbUVuZDogdHJ1ZSxcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZWRDb250ZXh0ID0gdHlwZW9mIGJlZm9yZU5hdmlnYXRlID09PSAnZnVuY3Rpb24nID8gYmVmb3JlTmF2aWdhdGUoZXhwYW5kZWRDb250ZXh0KSA6IGV4cGFuZGVkQ29udGV4dDtcblxuICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLCBiZWZvcmVOYXZpZ2F0ZSBjYW4gcmV0dXJuIHVuZGVmaW5lZCB0byBcImRyb3BcIiB0aGUgdHJhbnNhY3Rpb24gKHByZXZlbnQgaXRcbiAgICAvLyBmcm9tIGJlaW5nIHNlbnQgdG8gU2VudHJ5KS5cbiAgICBjb25zdCBmaW5hbENvbnRleHQgPSBtb2RpZmllZENvbnRleHQgPT09IHVuZGVmaW5lZCA/IHsgLi4uZXhwYW5kZWRDb250ZXh0LCBzYW1wbGVkOiBmYWxzZSB9IDogbW9kaWZpZWRDb250ZXh0O1xuXG4gICAgLy8gSWYgYGJlZm9yZU5hdmlnYXRlYCBzZXQgYSBjdXN0b20gbmFtZSwgcmVjb3JkIHRoYXQgZmFjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGZpbmFsQ29udGV4dC5tZXRhZGF0YSA9XG4gICAgICBmaW5hbENvbnRleHQubmFtZSAhPT0gZXhwYW5kZWRDb250ZXh0Lm5hbWVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICB7IC4uLmZpbmFsQ29udGV4dC5tZXRhZGF0YSwgc291cmNlOiAnY3VzdG9tJyB9XG4gICAgICAgIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgZmluYWxDb250ZXh0Lm1ldGFkYXRhO1xuXG4gICAgdGhpcy5fbGF0ZXN0Um91dGUubmFtZSA9IGZpbmFsQ29udGV4dC5uYW1lO1xuICAgIHRoaXMuX2xhdGVzdFJvdXRlLmNvbnRleHQgPSBmaW5hbENvbnRleHQ7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBpZiAoZmluYWxDb250ZXh0LnNhbXBsZWQgPT09IGZhbHNlKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYFtUcmFjaW5nXSBXaWxsIG5vdCBzZW5kICR7ZmluYWxDb250ZXh0Lm9wfSB0cmFuc2FjdGlvbiBiZWNhdXNlIG9mIGJlZm9yZU5hdmlnYXRlLmApO1xuICAgIH1cblxuICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgW1RyYWNpbmddIFN0YXJ0aW5nICR7ZmluYWxDb250ZXh0Lm9wfSB0cmFuc2FjdGlvbiBvbiBzY29wZWApO1xuXG4gICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gdHlwZXMuV0lORE9XO1xuXG4gICAgY29uc3QgaWRsZVRyYW5zYWN0aW9uID0gY29yZS5zdGFydElkbGVUcmFuc2FjdGlvbihcbiAgICAgIGh1YixcbiAgICAgIGZpbmFsQ29udGV4dCxcbiAgICAgIGlkbGVUaW1lb3V0LFxuICAgICAgZmluYWxUaW1lb3V0LFxuICAgICAgdHJ1ZSxcbiAgICAgIHsgbG9jYXRpb24gfSwgLy8gZm9yIHVzZSBpbiB0aGUgdHJhY2VzU2FtcGxlclxuICAgICAgaGVhcnRiZWF0SW50ZXJ2YWwsXG4gICAgICBpc1BhZ2Vsb2FkVHJhbnNhY3Rpb24sIC8vIHNob3VsZCB3YWl0IGZvciBmaW5pc2ggc2lnbmFsIGlmIGl0J3MgYSBwYWdlbG9hZCB0cmFuc2FjdGlvblxuICAgICk7XG5cbiAgICBpZiAoaXNQYWdlbG9hZFRyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAodHlwZXMuV0lORE9XLmRvY3VtZW50KSB7XG4gICAgICAgIHR5cGVzLldJTkRPVy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgIGlmIChbJ2ludGVyYWN0aXZlJywgJ2NvbXBsZXRlJ10uaW5jbHVkZXModHlwZXMuV0lORE9XLmRvY3VtZW50LnJlYWR5U3RhdGUpKSB7XG4gICAgICAgICAgICBpZGxlVHJhbnNhY3Rpb24uc2VuZEF1dG9GaW5pc2hTaWduYWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChbJ2ludGVyYWN0aXZlJywgJ2NvbXBsZXRlJ10uaW5jbHVkZXModHlwZXMuV0lORE9XLmRvY3VtZW50LnJlYWR5U3RhdGUpKSB7XG4gICAgICAgICAgaWRsZVRyYW5zYWN0aW9uLnNlbmRBdXRvRmluaXNoU2lnbmFsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZGxlVHJhbnNhY3Rpb24ucmVnaXN0ZXJCZWZvcmVGaW5pc2hDYWxsYmFjayh0cmFuc2FjdGlvbiA9PiB7XG4gICAgICB0aGlzLl9jb2xsZWN0V2ViVml0YWxzKCk7XG4gICAgICBpbmRleC5hZGRQZXJmb3JtYW5jZUVudHJpZXModHJhbnNhY3Rpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkbGVUcmFuc2FjdGlvbiA7XG4gIH1cblxuICAvKiogU3RhcnQgbGlzdGVuZXIgZm9yIGludGVyYWN0aW9uIHRyYW5zYWN0aW9ucyAqL1xuICAgX3JlZ2lzdGVySW50ZXJhY3Rpb25MaXN0ZW5lcigpIHtcbiAgICBsZXQgaW5mbGlnaHRJbnRlcmFjdGlvblRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHJlZ2lzdGVySW50ZXJhY3Rpb25UcmFuc2FjdGlvbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaWRsZVRpbWVvdXQsIGZpbmFsVGltZW91dCwgaGVhcnRiZWF0SW50ZXJ2YWwgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IG9wID0gJ3VpLmFjdGlvbi5jbGljayc7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgY29uc3QgY3VycmVudFRyYW5zYWN0aW9uID0gY29yZS5nZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuICAgICAgaWYgKGN1cnJlbnRUcmFuc2FjdGlvbiAmJiBjdXJyZW50VHJhbnNhY3Rpb24ub3AgJiYgWyduYXZpZ2F0aW9uJywgJ3BhZ2Vsb2FkJ10uaW5jbHVkZXMoY3VycmVudFRyYW5zYWN0aW9uLm9wKSkge1xuICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgICAgdXRpbHMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgW1RyYWNpbmddIERpZCBub3QgY3JlYXRlICR7b3B9IHRyYW5zYWN0aW9uIGJlY2F1c2UgYSBwYWdlbG9hZCBvciBuYXZpZ2F0aW9uIHRyYW5zYWN0aW9uIGlzIGluIHByb2dyZXNzLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZmxpZ2h0SW50ZXJhY3Rpb25UcmFuc2FjdGlvbikge1xuICAgICAgICBpbmZsaWdodEludGVyYWN0aW9uVHJhbnNhY3Rpb24uc2V0RmluaXNoUmVhc29uKCdpbnRlcmFjdGlvbkludGVycnVwdGVkJyk7XG4gICAgICAgIGluZmxpZ2h0SW50ZXJhY3Rpb25UcmFuc2FjdGlvbi5lbmQoKTtcbiAgICAgICAgaW5mbGlnaHRJbnRlcmFjdGlvblRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2dldEN1cnJlbnRIdWIpIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybihgW1RyYWNpbmddIERpZCBub3QgY3JlYXRlICR7b3B9IHRyYW5zYWN0aW9uIGJlY2F1c2UgX2dldEN1cnJlbnRIdWIgaXMgaW52YWxpZC5gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9sYXRlc3RSb3V0ZS5uYW1lKSB7XG4gICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oYFtUcmFjaW5nXSBEaWQgbm90IGNyZWF0ZSAke29wfSB0cmFuc2FjdGlvbiBiZWNhdXNlIF9sYXRlc3RSb3V0ZU5hbWUgaXMgbWlzc2luZy5gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaHViID0gdGhpcy5fZ2V0Q3VycmVudEh1YigpO1xuICAgICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gdHlwZXMuV0lORE9XO1xuXG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICBuYW1lOiB0aGlzLl9sYXRlc3RSb3V0ZS5uYW1lLFxuICAgICAgICBvcCxcbiAgICAgICAgdHJpbUVuZDogdHJ1ZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIFtjb3JlLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogdGhpcy5fbGF0ZXN0Um91dGUuY29udGV4dFxuICAgICAgICAgICAgPyBnZXRTb3VyY2UodGhpcy5fbGF0ZXN0Um91dGUuY29udGV4dClcbiAgICAgICAgICAgIDogJ3VybCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpbmZsaWdodEludGVyYWN0aW9uVHJhbnNhY3Rpb24gPSBjb3JlLnN0YXJ0SWRsZVRyYW5zYWN0aW9uKFxuICAgICAgICBodWIsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGlkbGVUaW1lb3V0LFxuICAgICAgICBmaW5hbFRpbWVvdXQsXG4gICAgICAgIHRydWUsXG4gICAgICAgIHsgbG9jYXRpb24gfSwgLy8gZm9yIHVzZSBpbiB0aGUgdHJhY2VzU2FtcGxlclxuICAgICAgICBoZWFydGJlYXRJbnRlcnZhbCxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIFsnY2xpY2snXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgaWYgKHR5cGVzLldJTkRPVy5kb2N1bWVudCkge1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIHJlZ2lzdGVySW50ZXJhY3Rpb25UcmFuc2FjdGlvbiwgeyBvbmNlOiBmYWxzZSwgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgbGlzdGVuZXIgb24gaW50ZXJhY3Rpb24gZW50cmllcywgYW5kIG1hcHMgaW50ZXJhY3Rpb25JZHMgdG8gdGhlIG9yaWdpbiBwYXRoIG9mIHRoZSBpbnRlcmFjdGlvbiAqL1xuICAgX3JlZ2lzdGVySW5wSW50ZXJhY3Rpb25MaXN0ZW5lcigpIHtcbiAgICBjb25zdCBoYW5kbGVFbnRyaWVzID0gKHsgZW50cmllcyB9KSA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBjb3JlLmdldENsaWVudCgpO1xuICAgICAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIHJlcGxheSwgdXNlciwgYW5kIGFjdGl2ZVRyYW5zYWN0aW9uIGZyb20gdGhlIGN1cnJlbnQgc2NvcGVcbiAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGFzc29jaWF0ZSByZXBsYXkgaWQsIHByb2ZpbGUgaWQsIGFuZCBhIHVzZXIgZGlzcGxheSB0byB0aGUgc3BhblxuICAgICAgY29uc3QgcmVwbGF5ID1cbiAgICAgICAgY2xpZW50ICE9PSB1bmRlZmluZWQgJiYgY2xpZW50LmdldEludGVncmF0aW9uQnlOYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChjbGllbnQuZ2V0SW50ZWdyYXRpb25CeU5hbWUoJ1JlcGxheScpIClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlcGxheUlkID0gcmVwbGF5ICE9PSB1bmRlZmluZWQgPyByZXBsYXkuZ2V0UmVwbGF5SWQoKSA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSBjb3JlLmdldEFjdGl2ZVRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBjdXJyZW50U2NvcGUgPSBjb3JlLmdldEN1cnJlbnRTY29wZSgpO1xuICAgICAgY29uc3QgdXNlciA9IGN1cnJlbnRTY29wZSAhPT0gdW5kZWZpbmVkID8gY3VycmVudFNjb3BlLmdldFVzZXIoKSA6IHVuZGVmaW5lZDtcbiAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgIGlmIChpc1BlcmZvcm1hbmNlRXZlbnRUaW1pbmcoZW50cnkpKSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZCA9IGVudHJ5LmludGVyYWN0aW9uSWQ7XG4gICAgICAgICAgaWYgKGludGVyYWN0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBleGlzdGluZ0ludGVyYWN0aW9uID0gdGhpcy5faW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZ1tpbnRlcmFjdGlvbklkXTtcbiAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGVudHJ5LmR1cmF0aW9uO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGVudHJ5LnN0YXJ0VGltZTtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5faW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZyk7XG4gICAgICAgICAgY29uc3QgbWluSW50ZXJhY3Rpb25JZCA9XG4gICAgICAgICAgICBrZXlzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBrZXlzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmdbYV0uZHVyYXRpb24gPFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcmFjdGlvbklkVG9Sb3V0ZU5hbWVNYXBwaW5nW2JdLmR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gYVxuICAgICAgICAgICAgICAgICAgICA6IGI7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gRm9yIGEgZmlyc3QgaW5wdXQgZXZlbnQgdG8gYmUgY29uc2lkZXJlZCwgd2UgbXVzdCBjaGVjayB0aGF0IGFuIGludGVyYWN0aW9uIGV2ZW50IGRvZXMgbm90IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBkdXJhdGlvbiBhbmQgc3RhcnQgdGltZS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGFsc28gY2hlY2tlZCBpbiB0aGUgd2ViLXZpdGFscyBsaWJyYXJ5LlxuICAgICAgICAgIGlmIChlbnRyeS5lbnRyeVR5cGUgPT09ICdmaXJzdC1pbnB1dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nRW50cnkgPSBrZXlzXG4gICAgICAgICAgICAgIC5tYXAoa2V5ID0+IHRoaXMuX2ludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmdba2V5XSlcbiAgICAgICAgICAgICAgLnNvbWUoaW50ZXJhY3Rpb24gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGlvbi5kdXJhdGlvbiA9PT0gZHVyYXRpb24gJiYgaW50ZXJhY3Rpb24uc3RhcnRUaW1lID09PSBzdGFydFRpbWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nRW50cnkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJbnRlcmFjdGlvbnMgd2l0aCBhbiBpZCBvZiAwIGFuZCBhcmUgbm90IGZpcnN0LWlucHV0IGFyZSBub3QgdmFsaWQuXG4gICAgICAgICAgaWYgKCFpbnRlcmFjdGlvbklkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIHRoZSBpbnRlcmFjdGlvbiBhbHJlYWR5IGV4aXN0cywgd2Ugd2FudCB0byB1c2UgdGhlIGR1cmF0aW9uIG9mIHRoZSBsb25nZXN0IGVudHJ5LCBzaW5jZSB0aGF0IGlzIHdoYXQgdGhlIElOUCBtZXRyaWMgdXNlcy5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgZXhpc3RpbmdJbnRlcmFjdGlvbi5kdXJhdGlvbiA9IE1hdGgubWF4KGV4aXN0aW5nSW50ZXJhY3Rpb24uZHVyYXRpb24sIGR1cmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAga2V5cy5sZW5ndGggPCBNQVhfSU5URVJBQ1RJT05TIHx8XG4gICAgICAgICAgICBtaW5JbnRlcmFjdGlvbklkID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGR1cmF0aW9uID4gdGhpcy5faW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZ1ttaW5JbnRlcmFjdGlvbklkXS5kdXJhdGlvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGludGVyYWN0aW9uIGRvZXMgbm90IGV4aXN0LCB3ZSB3YW50IHRvIGFkZCBpdCB0byB0aGUgbWFwcGluZyBpZiB0aGVyZSBpcyBzcGFjZSwgb3IgaWYgdGhlIGR1cmF0aW9uIGlzIGxvbmdlciB0aGFuIHRoZSBzaG9ydGVzdCBlbnRyeS5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlTmFtZSA9IHRoaXMuX2xhdGVzdFJvdXRlLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gdGhpcy5fbGF0ZXN0Um91dGUuY29udGV4dDtcbiAgICAgICAgICAgIGlmIChyb3V0ZU5hbWUgJiYgcGFyZW50Q29udGV4dCkge1xuICAgICAgICAgICAgICBpZiAobWluSW50ZXJhY3Rpb25JZCAmJiBPYmplY3Qua2V5cyh0aGlzLl9pbnRlcmFjdGlvbklkVG9Sb3V0ZU5hbWVNYXBwaW5nKS5sZW5ndGggPj0gTUFYX0lOVEVSQUNUSU9OUykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5faW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZ1ttaW5JbnRlcmFjdGlvbklkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl9pbnRlcmFjdGlvbklkVG9Sb3V0ZU5hbWVNYXBwaW5nW2ludGVyYWN0aW9uSWRdID0ge1xuICAgICAgICAgICAgICAgIHJvdXRlTmFtZSxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVwbGF5SWQsXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpbnN0cnVtZW50LmFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcignZXZlbnQnLCBoYW5kbGVFbnRyaWVzKTtcbiAgICBpbnN0cnVtZW50LmFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcignZmlyc3QtaW5wdXQnLCBoYW5kbGVFbnRyaWVzKTtcbiAgfVxufVxuXG4vKiogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZyAqL1xuZnVuY3Rpb24gZ2V0TWV0YUNvbnRlbnQobWV0YU5hbWUpIHtcbiAgLy8gQ2FuJ3Qgc3BlY2lmeSBnZW5lcmljIHRvIGBnZXREb21FbGVtZW50YCBiZWNhdXNlIHRyYWNpbmcgY2FuIGJlIHVzZWRcbiAgLy8gaW4gYSB2YXJpZXR5IG9mIGVudmlyb25tZW50cywgaGF2ZSB0byBkaXNhYmxlIGBuby11bnNhZmUtbWVtYmVyLWFjY2Vzc2BcbiAgLy8gYXMgYSByZXN1bHQuXG4gIGNvbnN0IG1ldGFUYWcgPSB1dGlscy5nZXREb21FbGVtZW50KGBtZXRhW25hbWU9JHttZXRhTmFtZX1dYCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgcmV0dXJuIG1ldGFUYWcgPyBtZXRhVGFnLmdldEF0dHJpYnV0ZSgnY29udGVudCcpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2UoY29udGV4dCkge1xuICBjb25zdCBzb3VyY2VGcm9tQXR0cmlidXRlcyA9IGNvbnRleHQuYXR0cmlidXRlcyAmJiBjb250ZXh0LmF0dHJpYnV0ZXNbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBzb3VyY2VGcm9tRGF0YSA9IGNvbnRleHQuZGF0YSAmJiBjb250ZXh0LmRhdGFbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBzb3VyY2VGcm9tTWV0YWRhdGEgPSBjb250ZXh0Lm1ldGFkYXRhICYmIGNvbnRleHQubWV0YWRhdGEuc291cmNlO1xuXG4gIHJldHVybiBzb3VyY2VGcm9tQXR0cmlidXRlcyB8fCBzb3VyY2VGcm9tRGF0YSB8fCBzb3VyY2VGcm9tTWV0YWRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzUGVyZm9ybWFuY2VFdmVudFRpbWluZyhlbnRyeSkge1xuICByZXR1cm4gJ2R1cmF0aW9uJyBpbiBlbnRyeTtcbn1cblxuZXhwb3J0cy5CUk9XU0VSX1RSQUNJTkdfSU5URUdSQVRJT05fSUQgPSBCUk9XU0VSX1RSQUNJTkdfSU5URUdSQVRJT05fSUQ7XG5leHBvcnRzLkJyb3dzZXJUcmFjaW5nID0gQnJvd3NlclRyYWNpbmc7XG5leHBvcnRzLmdldE1ldGFDb250ZW50ID0gZ2V0TWV0YUNvbnRlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icm93c2VydHJhY2luZy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJyk7XG5jb25zdCBiYWNrZ3JvdW5kdGFiID0gcmVxdWlyZSgnLi9iYWNrZ3JvdW5kdGFiLmpzJyk7XG5jb25zdCBpbnN0cnVtZW50ID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50LmpzJyk7XG5jb25zdCBpbmRleCA9IHJlcXVpcmUoJy4vbWV0cmljcy9pbmRleC5qcycpO1xuY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoJy4vcmVxdWVzdC5qcycpO1xuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzLmpzJyk7XG5cbmNvbnN0IEJST1dTRVJfVFJBQ0lOR19JTlRFR1JBVElPTl9JRCA9ICdCcm93c2VyVHJhY2luZyc7XG5cbi8qKiBPcHRpb25zIGZvciBCcm93c2VyIFRyYWNpbmcgaW50ZWdyYXRpb24gKi9cblxuY29uc3QgREVGQVVMVF9CUk9XU0VSX1RSQUNJTkdfT1BUSU9OUyA9IHtcbiAgLi4uY29yZS5UUkFDSU5HX0RFRkFVTFRTLFxuICBpbnN0cnVtZW50TmF2aWdhdGlvbjogdHJ1ZSxcbiAgaW5zdHJ1bWVudFBhZ2VMb2FkOiB0cnVlLFxuICBtYXJrQmFja2dyb3VuZFNwYW46IHRydWUsXG4gIGVuYWJsZUxvbmdUYXNrOiB0cnVlLFxuICBlbmFibGVJbnA6IGZhbHNlLFxuICBpbnRlcmFjdGlvbnNTYW1wbGVSYXRlOiAxLFxuICBfZXhwZXJpbWVudHM6IHt9LFxuICAuLi5yZXF1ZXN0LmRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbn07XG5cbi8qKlxuICogVGhlIEJyb3dzZXIgVHJhY2luZyBpbnRlZ3JhdGlvbiBhdXRvbWF0aWNhbGx5IGluc3RydW1lbnRzIGJyb3dzZXIgcGFnZWxvYWQvbmF2aWdhdGlvblxuICogYWN0aW9ucyBhcyB0cmFuc2FjdGlvbnMsIGFuZCBjYXB0dXJlcyByZXF1ZXN0cywgbWV0cmljcyBhbmQgZXJyb3JzIGFzIHNwYW5zLlxuICpcbiAqIFRoZSBpbnRlZ3JhdGlvbiBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLCBhbmQgY2FuIGJlIGV4dGVuZGVkIHRvIHVzZVxuICogYW55IHJvdXRpbmcgbGlicmFyeS4gVGhpcyBpbnRlZ3JhdGlvbiB1c2VzIHtAc2VlIElkbGVUcmFuc2FjdGlvbn0gdG8gY3JlYXRlIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBXZSBleHBsaWNpdGx5IGV4cG9ydCB0aGUgcHJvcGVyIHR5cGUgaGVyZSwgYXMgdGhpcyBoYXMgdG8gYmUgZXh0ZW5kZWQgaW4gc29tZSBjYXNlcy5cbiAqL1xuY29uc3QgYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiA9ICgoX29wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBfaGFzU2V0VHJhY2VQcm9wYWdhdGlvblRhcmdldHMgPSBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEXG4gICAgPyAhIShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIChfb3B0aW9ucy50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyB8fCBfb3B0aW9ucy50cmFjaW5nT3JpZ2lucylcbiAgICAgIClcbiAgICA6IGZhbHNlO1xuXG4gIGNvcmUuYWRkVHJhY2luZ0V4dGVuc2lvbnMoKTtcblxuICAvLyBUT0RPICh2OCk6IHJlbW92ZSB0aGlzIGJsb2NrIGFmdGVyIHRyYWNpbmdPcmlnaW5zIGlzIHJlbW92ZWRcbiAgLy8gU2V0IHRyYWNlUHJvcGFnYXRpb25UYXJnZXRzIHRvIHRyYWNpbmdPcmlnaW5zIGlmIHNwZWNpZmllZCBieSB0aGUgdXNlclxuICAvLyBJbiBjYXNlIGJvdGggYXJlIHNwZWNpZmllZCwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMgdGFrZXMgcHJlY2VkZW5jZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaWYgKCFfb3B0aW9ucy50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyAmJiBfb3B0aW9ucy50cmFjaW5nT3JpZ2lucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIF9vcHRpb25zLnRyYWNlUHJvcGFnYXRpb25UYXJnZXRzID0gX29wdGlvbnMudHJhY2luZ09yaWdpbnM7XG4gIH1cblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLkRFRkFVTFRfQlJPV1NFUl9UUkFDSU5HX09QVElPTlMsXG4gICAgLi4uX29wdGlvbnMsXG4gIH07XG5cbiAgY29uc3QgX2NvbGxlY3RXZWJWaXRhbHMgPSBpbmRleC5zdGFydFRyYWNraW5nV2ViVml0YWxzKCk7XG5cbiAgLyoqIFN0b3JlcyBhIG1hcHBpbmcgb2YgaW50ZXJhY3Rpb25JZHMgZnJvbSBQZXJmb3JtYW5jZUV2ZW50VGltaW5ncyB0byB0aGUgb3JpZ2luIGludGVyYWN0aW9uIHBhdGggKi9cbiAgY29uc3QgaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZyA9IHt9O1xuICBpZiAob3B0aW9ucy5lbmFibGVJbnApIHtcbiAgICBpbmRleC5zdGFydFRyYWNraW5nSU5QKGludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmcsIG9wdGlvbnMuaW50ZXJhY3Rpb25zU2FtcGxlUmF0ZSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5lbmFibGVMb25nVGFzaykge1xuICAgIGluZGV4LnN0YXJ0VHJhY2tpbmdMb25nVGFza3MoKTtcbiAgfVxuICBpZiAob3B0aW9ucy5fZXhwZXJpbWVudHMuZW5hYmxlSW50ZXJhY3Rpb25zKSB7XG4gICAgaW5kZXguc3RhcnRUcmFja2luZ0ludGVyYWN0aW9ucygpO1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0Um91dGVcblxuID0ge1xuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gIH07XG5cbiAgLyoqIENyZWF0ZSByb3V0aW5nIGlkbGUgdHJhbnNhY3Rpb24uICovXG4gIGZ1bmN0aW9uIF9jcmVhdGVSb3V0ZVRyYW5zYWN0aW9uKGNvbnRleHQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBodWIgPSBjb3JlLmdldEN1cnJlbnRIdWIoKTtcblxuICAgIGNvbnN0IHsgYmVmb3JlU3RhcnRTcGFuLCBpZGxlVGltZW91dCwgZmluYWxUaW1lb3V0LCBoZWFydGJlYXRJbnRlcnZhbCB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGlzUGFnZWxvYWRUcmFuc2FjdGlvbiA9IGNvbnRleHQub3AgPT09ICdwYWdlbG9hZCc7XG5cbiAgICBsZXQgZXhwYW5kZWRDb250ZXh0O1xuICAgIGlmIChpc1BhZ2Vsb2FkVHJhbnNhY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbnRyeVRyYWNlID0gaXNQYWdlbG9hZFRyYW5zYWN0aW9uID8gZ2V0TWV0YUNvbnRlbnQoJ3NlbnRyeS10cmFjZScpIDogJyc7XG4gICAgICBjb25zdCBiYWdnYWdlID0gaXNQYWdlbG9hZFRyYW5zYWN0aW9uID8gZ2V0TWV0YUNvbnRlbnQoJ2JhZ2dhZ2UnKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHsgdHJhY2VJZCwgZHNjLCBwYXJlbnRTcGFuSWQsIHNhbXBsZWQgfSA9IHV0aWxzLnByb3BhZ2F0aW9uQ29udGV4dEZyb21IZWFkZXJzKHNlbnRyeVRyYWNlLCBiYWdnYWdlKTtcbiAgICAgIGV4cGFuZGVkQ29udGV4dCA9IHtcbiAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgcGFyZW50U3BhbklkLFxuICAgICAgICBwYXJlbnRTYW1wbGVkOiBzYW1wbGVkLFxuICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIC4uLmNvbnRleHQubWV0YWRhdGEsXG4gICAgICAgICAgZHluYW1pY1NhbXBsaW5nQ29udGV4dDogZHNjLFxuICAgICAgICB9LFxuICAgICAgICB0cmltRW5kOiB0cnVlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWRDb250ZXh0ID0ge1xuICAgICAgICB0cmltRW5kOiB0cnVlLFxuICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbENvbnRleHQgPSBiZWZvcmVTdGFydFNwYW4gPyBiZWZvcmVTdGFydFNwYW4oZXhwYW5kZWRDb250ZXh0KSA6IGV4cGFuZGVkQ29udGV4dDtcblxuICAgIC8vIElmIGBiZWZvcmVTdGFydFNwYW5gIHNldCBhIGN1c3RvbSBuYW1lLCByZWNvcmQgdGhhdCBmYWN0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgZmluYWxDb250ZXh0Lm1ldGFkYXRhID1cbiAgICAgIGZpbmFsQ29udGV4dC5uYW1lICE9PSBleHBhbmRlZENvbnRleHQubmFtZVxuICAgICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIHsgLi4uZmluYWxDb250ZXh0Lm1ldGFkYXRhLCBzb3VyY2U6ICdjdXN0b20nIH1cbiAgICAgICAgOiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICBmaW5hbENvbnRleHQubWV0YWRhdGE7XG5cbiAgICBsYXRlc3RSb3V0ZS5uYW1lID0gZmluYWxDb250ZXh0Lm5hbWU7XG4gICAgbGF0ZXN0Um91dGUuY29udGV4dCA9IGZpbmFsQ29udGV4dDtcblxuICAgIGlmIChmaW5hbENvbnRleHQuc2FtcGxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgW1RyYWNpbmddIFdpbGwgbm90IHNlbmQgJHtmaW5hbENvbnRleHQub3B9IHRyYW5zYWN0aW9uIGJlY2F1c2Ugb2YgYmVmb3JlTmF2aWdhdGUuYCk7XG4gICAgfVxuXG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKGBbVHJhY2luZ10gU3RhcnRpbmcgJHtmaW5hbENvbnRleHQub3B9IHRyYW5zYWN0aW9uIG9uIHNjb3BlYCk7XG5cbiAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSB0eXBlcy5XSU5ET1c7XG5cbiAgICBjb25zdCBpZGxlVHJhbnNhY3Rpb24gPSBjb3JlLnN0YXJ0SWRsZVRyYW5zYWN0aW9uKFxuICAgICAgaHViLFxuICAgICAgZmluYWxDb250ZXh0LFxuICAgICAgaWRsZVRpbWVvdXQsXG4gICAgICBmaW5hbFRpbWVvdXQsXG4gICAgICB0cnVlLFxuICAgICAgeyBsb2NhdGlvbiB9LCAvLyBmb3IgdXNlIGluIHRoZSB0cmFjZXNTYW1wbGVyXG4gICAgICBoZWFydGJlYXRJbnRlcnZhbCxcbiAgICAgIGlzUGFnZWxvYWRUcmFuc2FjdGlvbiwgLy8gc2hvdWxkIHdhaXQgZm9yIGZpbmlzaCBzaWduYWwgaWYgaXQncyBhIHBhZ2Vsb2FkIHRyYW5zYWN0aW9uXG4gICAgKTtcblxuICAgIGlmIChpc1BhZ2Vsb2FkVHJhbnNhY3Rpb24gJiYgdHlwZXMuV0lORE9XLmRvY3VtZW50KSB7XG4gICAgICB0eXBlcy5XSU5ET1cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsICgpID0+IHtcbiAgICAgICAgaWYgKFsnaW50ZXJhY3RpdmUnLCAnY29tcGxldGUnXS5pbmNsdWRlcyh0eXBlcy5XSU5ET1cuZG9jdW1lbnQucmVhZHlTdGF0ZSkpIHtcbiAgICAgICAgICBpZGxlVHJhbnNhY3Rpb24uc2VuZEF1dG9GaW5pc2hTaWduYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChbJ2ludGVyYWN0aXZlJywgJ2NvbXBsZXRlJ10uaW5jbHVkZXModHlwZXMuV0lORE9XLmRvY3VtZW50LnJlYWR5U3RhdGUpKSB7XG4gICAgICAgIGlkbGVUcmFuc2FjdGlvbi5zZW5kQXV0b0ZpbmlzaFNpZ25hbCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlkbGVUcmFuc2FjdGlvbi5yZWdpc3RlckJlZm9yZUZpbmlzaENhbGxiYWNrKHRyYW5zYWN0aW9uID0+IHtcbiAgICAgIF9jb2xsZWN0V2ViVml0YWxzKCk7XG4gICAgICBpbmRleC5hZGRQZXJmb3JtYW5jZUVudHJpZXModHJhbnNhY3Rpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkbGVUcmFuc2FjdGlvbiA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IEJST1dTRVJfVFJBQ0lOR19JTlRFR1JBVElPTl9JRCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgc2V0dXBPbmNlOiAoKSA9PiB7fSxcbiAgICBhZnRlckFsbFNldHVwKGNsaWVudCkge1xuICAgICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAgIGNvbnN0IHsgbWFya0JhY2tncm91bmRTcGFuLCB0cmFjZUZldGNoLCB0cmFjZVhIUiwgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QsIGVuYWJsZUhUVFBUaW1pbmdzLCBfZXhwZXJpbWVudHMgfSA9XG4gICAgICAgIG9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnNUcmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9IGNsaWVudE9wdGlvbnMgJiYgY2xpZW50T3B0aW9ucy50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cztcbiAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGNvbmZpZ3VyZSB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0czpcbiAgICAgIC8vIDEuIHZpYSB0b3AgbGV2ZWwgY2xpZW50IG9wdGlvbiBgdHJhY2VQcm9wYWdhdGlvblRhcmdldHNgXG4gICAgICAvLyAyLiB2aWEgQnJvd3NlclRyYWNpbmcgb3B0aW9uIGB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0c2BcbiAgICAgIC8vIDMuIHZpYSBCcm93c2VyVHJhY2luZyBvcHRpb24gYHRyYWNpbmdPcmlnaW5zYCAoZGVwcmVjYXRlZClcbiAgICAgIC8vXG4gICAgICAvLyBUbyBhdm9pZCBjb25mdXNpb24sIGZhdm91ciB0b3AgbGV2ZWwgY2xpZW50IG9wdGlvbiBgdHJhY2VQcm9wYWdhdGlvblRhcmdldHNgLCBhbmQgZmFsbGJhY2sgdG9cbiAgICAgIC8vIEJyb3dzZXJUcmFjaW5nIG9wdGlvbiBgdHJhY2VQcm9wYWdhdGlvblRhcmdldHNgIGFuZCB0aGVuIGB0cmFjaW5nT3JpZ2luc2AgKGRlcHJlY2F0ZWQpLlxuICAgICAgLy8gVGhpcyBpcyBkb25lIGFzIGl0IG1pbmltaXplcyBidW5kbGUgc2l6ZSAod2UgZG9uJ3QgaGF2ZSB0byBoYXZlIHVuZGVmaW5lZCBjaGVja3MpLlxuICAgICAgLy9cbiAgICAgIC8vIElmIGJvdGggMSBhbmQgZWl0aGVyIG9uZSBvZiAyIG9yIDMgYXJlIHNldCAoZnJvbSBhYm92ZSksIHdlIGxvZyBvdXQgYSB3YXJuaW5nLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9IGNsaWVudE9wdGlvbnNUcmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyB8fCBvcHRpb25zLnRyYWNlUHJvcGFnYXRpb25UYXJnZXRzO1xuICAgICAgaWYgKGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgX2hhc1NldFRyYWNlUHJvcGFnYXRpb25UYXJnZXRzICYmIGNsaWVudE9wdGlvbnNUcmFjZVByb3BhZ2F0aW9uVGFyZ2V0cykge1xuICAgICAgICB1dGlscy5sb2dnZXIud2FybihcbiAgICAgICAgICAnW1RyYWNpbmddIFRoZSBgdHJhY2VQcm9wYWdhdGlvblRhcmdldHNgIG9wdGlvbiB3YXMgc2V0IGluIHRoZSBCcm93c2VyVHJhY2luZyBpbnRlZ3JhdGlvbiBhbmQgdG9wIGxldmVsIGBTZW50cnkuaW5pdGAuIFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5pbml0YCB2YWx1ZSBpcyBiZWluZyB1c2VkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBhY3RpdmVTcGFuO1xuICAgICAgbGV0IHN0YXJ0aW5nVXJsID0gdHlwZXMuV0lORE9XLmxvY2F0aW9uICYmIHR5cGVzLldJTkRPVy5sb2NhdGlvbi5ocmVmO1xuXG4gICAgICBpZiAoY2xpZW50Lm9uKSB7XG4gICAgICAgIGNsaWVudC5vbignc3RhcnROYXZpZ2F0aW9uU3BhbicsIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZyhgW1RyYWNpbmddIEZpbmlzaGluZyBjdXJyZW50IHRyYW5zYWN0aW9uIHdpdGggb3A6ICR7Y29yZS5zcGFuVG9KU09OKGFjdGl2ZVNwYW4pLm9wfWApO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBvcGVuIHRyYW5zYWN0aW9uIG9uIHRoZSBzY29wZSwgd2UgbmVlZCB0byBmaW5pc2ggaXQgYmVmb3JlIGNyZWF0aW5nIGFuIG5ldyBvbmUuXG4gICAgICAgICAgICBhY3RpdmVTcGFuLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3RpdmVTcGFuID0gX2NyZWF0ZVJvdXRlVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgb3A6ICduYXZpZ2F0aW9uJyxcbiAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsaWVudC5vbignc3RhcnRQYWdlTG9hZFNwYW4nLCAoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmVTcGFuKSB7XG4gICAgICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5sb2coYFtUcmFjaW5nXSBGaW5pc2hpbmcgY3VycmVudCB0cmFuc2FjdGlvbiB3aXRoIG9wOiAke2NvcmUuc3BhblRvSlNPTihhY3RpdmVTcGFuKS5vcH1gKTtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gb3BlbiB0cmFuc2FjdGlvbiBvbiB0aGUgc2NvcGUsIHdlIG5lZWQgdG8gZmluaXNoIGl0IGJlZm9yZSBjcmVhdGluZyBhbiBuZXcgb25lLlxuICAgICAgICAgICAgYWN0aXZlU3Bhbi5lbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aXZlU3BhbiA9IF9jcmVhdGVSb3V0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIG9wOiAncGFnZWxvYWQnLFxuICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmluc3RydW1lbnRQYWdlTG9hZCAmJiBjbGllbnQuZW1pdCAmJiB0eXBlcy5XSU5ET1cubG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICBuYW1lOiB0eXBlcy5XSU5ET1cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgLy8gcGFnZWxvYWQgc2hvdWxkIGFsd2F5cyBzdGFydCBhdCB0aW1lT3JpZ2luIChhbmQgbmVlZHMgdG8gYmUgaW4gcywgbm90IG1zKVxuICAgICAgICAgIHN0YXJ0VGltZXN0YW1wOiB1dGlscy5icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luID8gdXRpbHMuYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiAvIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgb3JpZ2luOiAnYXV0by5wYWdlbG9hZC5icm93c2VyJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06ICd1cmwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4oY2xpZW50LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaW5zdHJ1bWVudE5hdmlnYXRpb24gJiYgY2xpZW50LmVtaXQgJiYgdHlwZXMuV0lORE9XLmxvY2F0aW9uKSB7XG4gICAgICAgIHV0aWxzLmFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IHRvLCBmcm9tIH0pID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBUaGlzIGVhcmx5IHJldHVybiBpcyB0aGVyZSB0byBhY2NvdW50IGZvciBzb21lIGNhc2VzIHdoZXJlIGEgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbiBzdGFydHMgcmlnaHQgYWZ0ZXJcbiAgICAgICAgICAgKiBsb25nLXJ1bm5pbmcgcGFnZWxvYWQuIFdlIG1ha2Ugc3VyZSB0aGF0IGlmIGBmcm9tYCBpcyB1bmRlZmluZWQgYW5kIGEgdmFsaWQgYHN0YXJ0aW5nVVJMYCBleGlzdHMsIHdlIGRvbid0XG4gICAgICAgICAgICogY3JlYXRlIGFuIHVuZWNjZXNzYXJ5IG5hdmlnYXRpb24gdHJhbnNhY3Rpb24uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaGlzIHdhcyBoYXJkIHRvIGR1cGxpY2F0ZSwgYnV0IHRoaXMgYmVoYXZpb3Igc3RvcHBlZCBhcyBzb29uIGFzIHRoaXMgZml4IHdhcyBhcHBsaWVkLiBUaGlzIGlzc3VlIG1pZ2h0IGFsc29cbiAgICAgICAgICAgKiBvbmx5IGJlIGNhdXNlZCBpbiBjZXJ0YWluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyB3aGVyZSB0aGUgdXNhZ2Ugb2YgYSBob3QgbW9kdWxlIHJlbG9hZGVyIGlzIGNhdXNpbmdcbiAgICAgICAgICAgKiBlcnJvcnMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgaWYgKGZyb20gPT09IHVuZGVmaW5lZCAmJiBzdGFydGluZ1VybCAmJiBzdGFydGluZ1VybC5pbmRleE9mKHRvKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmcm9tICE9PSB0bykge1xuICAgICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICBuYW1lOiB0eXBlcy5XSU5ET1cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICAgIG9yaWdpbjogJ2F1dG8ubmF2aWdhdGlvbi5icm93c2VyJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtjb3JlLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogJ3VybCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4oY2xpZW50LCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobWFya0JhY2tncm91bmRTcGFuKSB7XG4gICAgICAgIGJhY2tncm91bmR0YWIucmVnaXN0ZXJCYWNrZ3JvdW5kVGFiRGV0ZWN0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfZXhwZXJpbWVudHMuZW5hYmxlSW50ZXJhY3Rpb25zKSB7XG4gICAgICAgIHJlZ2lzdGVySW50ZXJhY3Rpb25MaXN0ZW5lcihvcHRpb25zLCBsYXRlc3RSb3V0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmVuYWJsZUlucCkge1xuICAgICAgICByZWdpc3RlcklucEludGVyYWN0aW9uTGlzdGVuZXIoaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZywgbGF0ZXN0Um91dGUpO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0Lmluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzKHtcbiAgICAgICAgdHJhY2VGZXRjaCxcbiAgICAgICAgdHJhY2VYSFIsXG4gICAgICAgIHRyYWNlUHJvcGFnYXRpb25UYXJnZXRzLFxuICAgICAgICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgICAgICAgZW5hYmxlSFRUUFRpbWluZ3MsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzIGFnYWluXG4gICAgLy8gVGhpcyBpcyBwcml2YXRlIEFQSSB0aGF0IHdlIHVzZSB0byBmaXggY29udmVydGVkIEJyb3dzZXJUcmFjaW5nIGludGVncmF0aW9ucyBpbiBOZXh0LmpzICYgU3ZlbHRlS2l0XG4gICAgb3B0aW9ucyxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBNYW51YWxseSBzdGFydCBhIHBhZ2UgbG9hZCBzcGFuLlxuICogVGhpcyB3aWxsIG9ubHkgZG8gc29tZXRoaW5nIGlmIHRoZSBCcm93c2VyVHJhY2luZyBpbnRlZ3JhdGlvbiBoYXMgYmVlbiBzZXR1cC5cbiAqL1xuZnVuY3Rpb24gc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3BhbihjbGllbnQsIHNwYW5PcHRpb25zKSB7XG4gIGlmICghY2xpZW50LmVtaXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjbGllbnQuZW1pdCgnc3RhcnRQYWdlTG9hZFNwYW4nLCBzcGFuT3B0aW9ucyk7XG5cbiAgY29uc3Qgc3BhbiA9IGNvcmUuZ2V0QWN0aXZlU3BhbigpO1xuICBjb25zdCBvcCA9IHNwYW4gJiYgY29yZS5zcGFuVG9KU09OKHNwYW4pLm9wO1xuICByZXR1cm4gb3AgPT09ICdwYWdlbG9hZCcgPyBzcGFuIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hbnVhbGx5IHN0YXJ0IGEgbmF2aWdhdGlvbiBzcGFuLlxuICogVGhpcyB3aWxsIG9ubHkgZG8gc29tZXRoaW5nIGlmIHRoZSBCcm93c2VyVHJhY2luZyBpbnRlZ3JhdGlvbiBoYXMgYmVlbiBzZXR1cC5cbiAqL1xuZnVuY3Rpb24gc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuKGNsaWVudCwgc3Bhbk9wdGlvbnMpIHtcbiAgaWYgKCFjbGllbnQuZW1pdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNsaWVudC5lbWl0KCdzdGFydE5hdmlnYXRpb25TcGFuJywgc3Bhbk9wdGlvbnMpO1xuXG4gIGNvbnN0IHNwYW4gPSBjb3JlLmdldEFjdGl2ZVNwYW4oKTtcbiAgY29uc3Qgb3AgPSBzcGFuICYmIGNvcmUuc3BhblRvSlNPTihzcGFuKS5vcDtcbiAgcmV0dXJuIG9wID09PSAnbmF2aWdhdGlvbicgPyBzcGFuIDogdW5kZWZpbmVkO1xufVxuXG4vKiogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZyAqL1xuZnVuY3Rpb24gZ2V0TWV0YUNvbnRlbnQobWV0YU5hbWUpIHtcbiAgLy8gQ2FuJ3Qgc3BlY2lmeSBnZW5lcmljIHRvIGBnZXREb21FbGVtZW50YCBiZWNhdXNlIHRyYWNpbmcgY2FuIGJlIHVzZWRcbiAgLy8gaW4gYSB2YXJpZXR5IG9mIGVudmlyb25tZW50cywgaGF2ZSB0byBkaXNhYmxlIGBuby11bnNhZmUtbWVtYmVyLWFjY2Vzc2BcbiAgLy8gYXMgYSByZXN1bHQuXG4gIGNvbnN0IG1ldGFUYWcgPSB1dGlscy5nZXREb21FbGVtZW50KGBtZXRhW25hbWU9JHttZXRhTmFtZX1dYCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgcmV0dXJuIG1ldGFUYWcgPyBtZXRhVGFnLmdldEF0dHJpYnV0ZSgnY29udGVudCcpIDogdW5kZWZpbmVkO1xufVxuXG4vKiogU3RhcnQgbGlzdGVuZXIgZm9yIGludGVyYWN0aW9uIHRyYW5zYWN0aW9ucyAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJJbnRlcmFjdGlvbkxpc3RlbmVyKFxuICBvcHRpb25zLFxuICBsYXRlc3RSb3V0ZVxuXG4sXG4pIHtcbiAgbGV0IGluZmxpZ2h0SW50ZXJhY3Rpb25UcmFuc2FjdGlvbjtcbiAgY29uc3QgcmVnaXN0ZXJJbnRlcmFjdGlvblRyYW5zYWN0aW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgaWRsZVRpbWVvdXQsIGZpbmFsVGltZW91dCwgaGVhcnRiZWF0SW50ZXJ2YWwgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgb3AgPSAndWkuYWN0aW9uLmNsaWNrJztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IGN1cnJlbnRUcmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcbiAgICBpZiAoY3VycmVudFRyYW5zYWN0aW9uICYmIGN1cnJlbnRUcmFuc2FjdGlvbi5vcCAmJiBbJ25hdmlnYXRpb24nLCAncGFnZWxvYWQnXS5pbmNsdWRlcyhjdXJyZW50VHJhbnNhY3Rpb24ub3ApKSB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGBbVHJhY2luZ10gRGlkIG5vdCBjcmVhdGUgJHtvcH0gdHJhbnNhY3Rpb24gYmVjYXVzZSBhIHBhZ2Vsb2FkIG9yIG5hdmlnYXRpb24gdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MuYCxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGluZmxpZ2h0SW50ZXJhY3Rpb25UcmFuc2FjdGlvbikge1xuICAgICAgaW5mbGlnaHRJbnRlcmFjdGlvblRyYW5zYWN0aW9uLnNldEZpbmlzaFJlYXNvbignaW50ZXJhY3Rpb25JbnRlcnJ1cHRlZCcpO1xuICAgICAgaW5mbGlnaHRJbnRlcmFjdGlvblRyYW5zYWN0aW9uLmVuZCgpO1xuICAgICAgaW5mbGlnaHRJbnRlcmFjdGlvblRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghbGF0ZXN0Um91dGUubmFtZSkge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybihgW1RyYWNpbmddIERpZCBub3QgY3JlYXRlICR7b3B9IHRyYW5zYWN0aW9uIGJlY2F1c2UgX2xhdGVzdFJvdXRlTmFtZSBpcyBtaXNzaW5nLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSB0eXBlcy5XSU5ET1c7XG5cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgbmFtZTogbGF0ZXN0Um91dGUubmFtZSxcbiAgICAgIG9wLFxuICAgICAgdHJpbUVuZDogdHJ1ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2NvcmUuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBsYXRlc3RSb3V0ZS5jb250ZXh0ID8gZ2V0U291cmNlKGxhdGVzdFJvdXRlLmNvbnRleHQpIDogJ3VybCcsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpbmZsaWdodEludGVyYWN0aW9uVHJhbnNhY3Rpb24gPSBjb3JlLnN0YXJ0SWRsZVRyYW5zYWN0aW9uKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb3JlLmdldEN1cnJlbnRIdWIoKSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBpZGxlVGltZW91dCxcbiAgICAgIGZpbmFsVGltZW91dCxcbiAgICAgIHRydWUsXG4gICAgICB7IGxvY2F0aW9uIH0sIC8vIGZvciB1c2UgaW4gdGhlIHRyYWNlc1NhbXBsZXJcbiAgICAgIGhlYXJ0YmVhdEludGVydmFsLFxuICAgICk7XG4gIH07XG5cbiAgWydjbGljayddLmZvckVhY2godHlwZSA9PiB7XG4gICAgaWYgKHR5cGVzLldJTkRPVy5kb2N1bWVudCkge1xuICAgICAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCByZWdpc3RlckludGVyYWN0aW9uVHJhbnNhY3Rpb24sIHsgb25jZTogZmFsc2UsIGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNQZXJmb3JtYW5jZUV2ZW50VGltaW5nKGVudHJ5KSB7XG4gIHJldHVybiAnZHVyYXRpb24nIGluIGVudHJ5O1xufVxuXG4vKiogV2Ugc3RvcmUgdXAgdG8gMTAgaW50ZXJhY3Rpb24gY2FuZGlkYXRlcyBtYXggdG8gY2FwIG1lbW9yeSB1c2FnZS4gVGhpcyBpcyB0aGUgc2FtZSBjYXAgYXMgZ2V0SU5QIGZyb20gd2ViLXZpdGFscyAqL1xuY29uc3QgTUFYX0lOVEVSQUNUSU9OUyA9IDEwO1xuXG4vKiogQ3JlYXRlcyBhIGxpc3RlbmVyIG9uIGludGVyYWN0aW9uIGVudHJpZXMsIGFuZCBtYXBzIGludGVyYWN0aW9uSWRzIHRvIHRoZSBvcmlnaW4gcGF0aCBvZiB0aGUgaW50ZXJhY3Rpb24gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVySW5wSW50ZXJhY3Rpb25MaXN0ZW5lcihcbiAgaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZyxcbiAgbGF0ZXN0Um91dGVcblxuLFxuKSB7XG4gIGNvbnN0IGhhbmRsZUVudHJpZXMgPSAoeyBlbnRyaWVzIH0pID0+IHtcbiAgICBjb25zdCBjbGllbnQgPSBjb3JlLmdldENsaWVudCgpO1xuICAgIC8vIFdlIG5lZWQgdG8gZ2V0IHRoZSByZXBsYXksIHVzZXIsIGFuZCBhY3RpdmVUcmFuc2FjdGlvbiBmcm9tIHRoZSBjdXJyZW50IHNjb3BlXG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gYXNzb2NpYXRlIHJlcGxheSBpZCwgcHJvZmlsZSBpZCwgYW5kIGEgdXNlciBkaXNwbGF5IHRvIHRoZSBzcGFuXG4gICAgY29uc3QgcmVwbGF5ID1cbiAgICAgIGNsaWVudCAhPT0gdW5kZWZpbmVkICYmIGNsaWVudC5nZXRJbnRlZ3JhdGlvbkJ5TmFtZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gKGNsaWVudC5nZXRJbnRlZ3JhdGlvbkJ5TmFtZSgnUmVwbGF5JykgKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXBsYXlJZCA9IHJlcGxheSAhPT0gdW5kZWZpbmVkID8gcmVwbGF5LmdldFJlcGxheUlkKCkgOiB1bmRlZmluZWQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSBjb3JlLmdldEFjdGl2ZVRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgY3VycmVudFNjb3BlID0gY29yZS5nZXRDdXJyZW50U2NvcGUoKTtcbiAgICBjb25zdCB1c2VyID0gY3VycmVudFNjb3BlICE9PSB1bmRlZmluZWQgPyBjdXJyZW50U2NvcGUuZ2V0VXNlcigpIDogdW5kZWZpbmVkO1xuICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICBpZiAoaXNQZXJmb3JtYW5jZUV2ZW50VGltaW5nKGVudHJ5KSkge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbklkID0gZW50cnkuaW50ZXJhY3Rpb25JZDtcbiAgICAgICAgaWYgKGludGVyYWN0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdGluZ0ludGVyYWN0aW9uID0gaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZ1tpbnRlcmFjdGlvbklkXTtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBlbnRyeS5kdXJhdGlvbjtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZW50cnkuc3RhcnRUaW1lO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZyk7XG4gICAgICAgIGNvbnN0IG1pbkludGVyYWN0aW9uSWQgPVxuICAgICAgICAgIGtleXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBrZXlzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGlvbklkVG9Sb3V0ZU5hbWVNYXBwaW5nW2FdLmR1cmF0aW9uIDwgaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZ1tiXS5kdXJhdGlvblxuICAgICAgICAgICAgICAgICAgPyBhXG4gICAgICAgICAgICAgICAgICA6IGI7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gRm9yIGEgZmlyc3QgaW5wdXQgZXZlbnQgdG8gYmUgY29uc2lkZXJlZCwgd2UgbXVzdCBjaGVjayB0aGF0IGFuIGludGVyYWN0aW9uIGV2ZW50IGRvZXMgbm90IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBkdXJhdGlvbiBhbmQgc3RhcnQgdGltZS5cbiAgICAgICAgLy8gVGhpcyBpcyBhbHNvIGNoZWNrZWQgaW4gdGhlIHdlYi12aXRhbHMgbGlicmFyeS5cbiAgICAgICAgaWYgKGVudHJ5LmVudHJ5VHlwZSA9PT0gJ2ZpcnN0LWlucHV0Jykge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nRW50cnkgPSBrZXlzXG4gICAgICAgICAgICAubWFwKGtleSA9PiBpbnRlcmFjdGlvbklkVG9Sb3V0ZU5hbWVNYXBwaW5nW2tleV0pXG4gICAgICAgICAgICAuc29tZShpbnRlcmFjdGlvbiA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGlvbi5kdXJhdGlvbiA9PT0gZHVyYXRpb24gJiYgaW50ZXJhY3Rpb24uc3RhcnRUaW1lID09PSBzdGFydFRpbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdFbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJbnRlcmFjdGlvbnMgd2l0aCBhbiBpZCBvZiAwIGFuZCBhcmUgbm90IGZpcnN0LWlucHV0IGFyZSBub3QgdmFsaWQuXG4gICAgICAgIGlmICghaW50ZXJhY3Rpb25JZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgaW50ZXJhY3Rpb24gYWxyZWFkeSBleGlzdHMsIHdlIHdhbnQgdG8gdXNlIHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9uZ2VzdCBlbnRyeSwgc2luY2UgdGhhdCBpcyB3aGF0IHRoZSBJTlAgbWV0cmljIHVzZXMuXG4gICAgICAgIGlmIChleGlzdGluZ0ludGVyYWN0aW9uKSB7XG4gICAgICAgICAgZXhpc3RpbmdJbnRlcmFjdGlvbi5kdXJhdGlvbiA9IE1hdGgubWF4KGV4aXN0aW5nSW50ZXJhY3Rpb24uZHVyYXRpb24sIGR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBrZXlzLmxlbmd0aCA8IE1BWF9JTlRFUkFDVElPTlMgfHxcbiAgICAgICAgICBtaW5JbnRlcmFjdGlvbklkID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBkdXJhdGlvbiA+IGludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmdbbWluSW50ZXJhY3Rpb25JZF0uZHVyYXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGludGVyYWN0aW9uIGRvZXMgbm90IGV4aXN0LCB3ZSB3YW50IHRvIGFkZCBpdCB0byB0aGUgbWFwcGluZyBpZiB0aGVyZSBpcyBzcGFjZSwgb3IgaWYgdGhlIGR1cmF0aW9uIGlzIGxvbmdlciB0aGFuIHRoZSBzaG9ydGVzdCBlbnRyeS5cbiAgICAgICAgICBjb25zdCByb3V0ZU5hbWUgPSBsYXRlc3RSb3V0ZS5uYW1lO1xuICAgICAgICAgIGNvbnN0IHBhcmVudENvbnRleHQgPSBsYXRlc3RSb3V0ZS5jb250ZXh0O1xuICAgICAgICAgIGlmIChyb3V0ZU5hbWUgJiYgcGFyZW50Q29udGV4dCkge1xuICAgICAgICAgICAgaWYgKG1pbkludGVyYWN0aW9uSWQgJiYgT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZykubGVuZ3RoID49IE1BWF9JTlRFUkFDVElPTlMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgICAgICAgICBkZWxldGUgaW50ZXJhY3Rpb25JZFRvUm91dGVOYW1lTWFwcGluZ1ttaW5JbnRlcmFjdGlvbklkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludGVyYWN0aW9uSWRUb1JvdXRlTmFtZU1hcHBpbmdbaW50ZXJhY3Rpb25JZF0gPSB7XG4gICAgICAgICAgICAgIHJvdXRlTmFtZSxcbiAgICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICAgIHBhcmVudENvbnRleHQsXG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgICByZXBsYXlJZCxcbiAgICAgICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgaW5zdHJ1bWVudC5hZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoJ2V2ZW50JywgaGFuZGxlRW50cmllcyk7XG4gIGluc3RydW1lbnQuYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyKCdmaXJzdC1pbnB1dCcsIGhhbmRsZUVudHJpZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2UoY29udGV4dCkge1xuICBjb25zdCBzb3VyY2VGcm9tQXR0cmlidXRlcyA9IGNvbnRleHQuYXR0cmlidXRlcyAmJiBjb250ZXh0LmF0dHJpYnV0ZXNbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBzb3VyY2VGcm9tRGF0YSA9IGNvbnRleHQuZGF0YSAmJiBjb250ZXh0LmRhdGFbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBzb3VyY2VGcm9tTWV0YWRhdGEgPSBjb250ZXh0Lm1ldGFkYXRhICYmIGNvbnRleHQubWV0YWRhdGEuc291cmNlO1xuXG4gIHJldHVybiBzb3VyY2VGcm9tQXR0cmlidXRlcyB8fCBzb3VyY2VGcm9tRGF0YSB8fCBzb3VyY2VGcm9tTWV0YWRhdGE7XG59XG5cbmV4cG9ydHMuQlJPV1NFUl9UUkFDSU5HX0lOVEVHUkFUSU9OX0lEID0gQlJPV1NFUl9UUkFDSU5HX0lOVEVHUkFUSU9OX0lEO1xuZXhwb3J0cy5icm93c2VyVHJhY2luZ0ludGVncmF0aW9uID0gYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuZ2V0TWV0YUNvbnRlbnQgPSBnZXRNZXRhQ29udGVudDtcbmV4cG9ydHMuc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuID0gc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuO1xuZXhwb3J0cy5zdGFydEJyb3dzZXJUcmFjaW5nUGFnZUxvYWRTcGFuID0gc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3Bhbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9hdXRvbG9hZERhdGFiYXNlSW50ZWdyYXRpb25zKCkge1xuICBjb25zdCBjYXJyaWVyID0gY29yZS5nZXRNYWluQ2FycmllcigpO1xuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VUb0ludGVncmF0aW9uTWFwcGluZyA9IHtcbiAgICBtb25nb2RiKCkge1xuICAgICAgY29uc3QgaW50ZWdyYXRpb24gPSB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICcuL25vZGUvaW50ZWdyYXRpb25zL21vbmdvJylcblxuO1xuICAgICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbi5Nb25nbygpO1xuICAgIH0sXG4gICAgbW9uZ29vc2UoKSB7XG4gICAgICBjb25zdCBpbnRlZ3JhdGlvbiA9IHV0aWxzLmR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJy4vbm9kZS9pbnRlZ3JhdGlvbnMvbW9uZ28nKVxuXG47XG4gICAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLk1vbmdvKCk7XG4gICAgfSxcbiAgICBteXNxbCgpIHtcbiAgICAgIGNvbnN0IGludGVncmF0aW9uID0gdXRpbHMuZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9ub2RlL2ludGVncmF0aW9ucy9teXNxbCcpXG5cbjtcbiAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uTXlzcWwoKTtcbiAgICB9LFxuICAgIHBnKCkge1xuICAgICAgY29uc3QgaW50ZWdyYXRpb24gPSB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICcuL25vZGUvaW50ZWdyYXRpb25zL3Bvc3RncmVzJylcblxuO1xuICAgICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbi5Qb3N0Z3JlcygpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbWFwcGVkUGFja2FnZXMgPSBPYmplY3Qua2V5cyhwYWNrYWdlVG9JbnRlZ3JhdGlvbk1hcHBpbmcpXG4gICAgLmZpbHRlcihtb2R1bGVOYW1lID0+ICEhdXRpbHMubG9hZE1vZHVsZShtb2R1bGVOYW1lKSlcbiAgICAubWFwKHBrZyA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcGFja2FnZVRvSW50ZWdyYXRpb25NYXBwaW5nW3BrZ10oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIocCA9PiBwKSA7XG5cbiAgaWYgKG1hcHBlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uaW50ZWdyYXRpb25zID0gWy4uLihjYXJyaWVyLl9fU0VOVFJZX18uaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4ubWFwcGVkUGFja2FnZXNdO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBwYXRjaGVzIHRoZSBnbG9iYWwgb2JqZWN0IGFuZCBpbmplY3RzIHRoZSBUcmFjaW5nIGV4dGVuc2lvbnMgbWV0aG9kc1xuICovXG5mdW5jdGlvbiBhZGRFeHRlbnNpb25NZXRob2RzKCkge1xuICBjb3JlLmFkZFRyYWNpbmdFeHRlbnNpb25zKCk7XG5cbiAgLy8gRGV0ZWN0IGFuZCBhdXRvbWF0aWNhbGx5IGxvYWQgc3BlY2lmaWVkIGludGVncmF0aW9ucy5cbiAgaWYgKHV0aWxzLmlzTm9kZUVudigpKSB7XG4gICAgX2F1dG9sb2FkRGF0YWJhc2VJbnRlZ3JhdGlvbnMoKTtcbiAgfVxufVxuXG5leHBvcnRzLmFkZEV4dGVuc2lvbk1ldGhvZHMgPSBhZGRFeHRlbnNpb25NZXRob2RzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0ZW5zaW9ucy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBleHByZXNzID0gcmVxdWlyZSgnLi9ub2RlL2ludGVncmF0aW9ucy9leHByZXNzLmpzJyk7XG5jb25zdCBwb3N0Z3JlcyA9IHJlcXVpcmUoJy4vbm9kZS9pbnRlZ3JhdGlvbnMvcG9zdGdyZXMuanMnKTtcbmNvbnN0IG15c3FsID0gcmVxdWlyZSgnLi9ub2RlL2ludGVncmF0aW9ucy9teXNxbC5qcycpO1xuY29uc3QgbW9uZ28gPSByZXF1aXJlKCcuL25vZGUvaW50ZWdyYXRpb25zL21vbmdvLmpzJyk7XG5jb25zdCBwcmlzbWEgPSByZXF1aXJlKCcuL25vZGUvaW50ZWdyYXRpb25zL3ByaXNtYS5qcycpO1xuY29uc3QgZ3JhcGhxbCA9IHJlcXVpcmUoJy4vbm9kZS9pbnRlZ3JhdGlvbnMvZ3JhcGhxbC5qcycpO1xuY29uc3QgYXBvbGxvID0gcmVxdWlyZSgnLi9ub2RlL2ludGVncmF0aW9ucy9hcG9sbG8uanMnKTtcbmNvbnN0IGxhenkgPSByZXF1aXJlKCcuL25vZGUvaW50ZWdyYXRpb25zL2xhenkuanMnKTtcbmNvbnN0IGJyb3dzZXJ0cmFjaW5nID0gcmVxdWlyZSgnLi9icm93c2VyL2Jyb3dzZXJ0cmFjaW5nLmpzJyk7XG5jb25zdCBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uID0gcmVxdWlyZSgnLi9icm93c2VyL2Jyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24uanMnKTtcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCcuL2Jyb3dzZXIvcmVxdWVzdC5qcycpO1xuY29uc3QgaW5zdHJ1bWVudCA9IHJlcXVpcmUoJy4vYnJvd3Nlci9pbnN0cnVtZW50LmpzJyk7XG5jb25zdCBmZXRjaCA9IHJlcXVpcmUoJy4vY29tbW9uL2ZldGNoLmpzJyk7XG5jb25zdCBleHRlbnNpb25zID0gcmVxdWlyZSgnLi9leHRlbnNpb25zLmpzJyk7XG5cblxuXG5leHBvcnRzLklkbGVUcmFuc2FjdGlvbiA9IGNvcmUuSWRsZVRyYW5zYWN0aW9uO1xuZXhwb3J0cy5TcGFuID0gY29yZS5TcGFuO1xuZXhwb3J0cy5TcGFuU3RhdHVzID0gY29yZS5TcGFuU3RhdHVzO1xuZXhwb3J0cy5UcmFuc2FjdGlvbiA9IGNvcmUuVHJhbnNhY3Rpb247XG5leHBvcnRzLmV4dHJhY3RUcmFjZXBhcmVudERhdGEgPSBjb3JlLmV4dHJhY3RUcmFjZXBhcmVudERhdGE7XG5leHBvcnRzLmdldEFjdGl2ZVRyYW5zYWN0aW9uID0gY29yZS5nZXRBY3RpdmVUcmFuc2FjdGlvbjtcbmV4cG9ydHMuaGFzVHJhY2luZ0VuYWJsZWQgPSBjb3JlLmhhc1RyYWNpbmdFbmFibGVkO1xuZXhwb3J0cy5zcGFuU3RhdHVzZnJvbUh0dHBDb2RlID0gY29yZS5zcGFuU3RhdHVzZnJvbUh0dHBDb2RlO1xuZXhwb3J0cy5zdGFydElkbGVUcmFuc2FjdGlvbiA9IGNvcmUuc3RhcnRJZGxlVHJhbnNhY3Rpb247XG5leHBvcnRzLlRSQUNFUEFSRU5UX1JFR0VYUCA9IHV0aWxzLlRSQUNFUEFSRU5UX1JFR0VYUDtcbmV4cG9ydHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50ID0gdXRpbHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50O1xuZXhwb3J0cy5FeHByZXNzID0gZXhwcmVzcy5FeHByZXNzO1xuZXhwb3J0cy5Qb3N0Z3JlcyA9IHBvc3RncmVzLlBvc3RncmVzO1xuZXhwb3J0cy5NeXNxbCA9IG15c3FsLk15c3FsO1xuZXhwb3J0cy5Nb25nbyA9IG1vbmdvLk1vbmdvO1xuZXhwb3J0cy5QcmlzbWEgPSBwcmlzbWEuUHJpc21hO1xuZXhwb3J0cy5HcmFwaFFMID0gZ3JhcGhxbC5HcmFwaFFMO1xuZXhwb3J0cy5BcG9sbG8gPSBhcG9sbG8uQXBvbGxvO1xuZXhwb3J0cy5sYXp5TG9hZGVkTm9kZVBlcmZvcm1hbmNlTW9uaXRvcmluZ0ludGVncmF0aW9ucyA9IGxhenkubGF6eUxvYWRlZE5vZGVQZXJmb3JtYW5jZU1vbml0b3JpbmdJbnRlZ3JhdGlvbnM7XG5leHBvcnRzLkJST1dTRVJfVFJBQ0lOR19JTlRFR1JBVElPTl9JRCA9IGJyb3dzZXJ0cmFjaW5nLkJST1dTRVJfVFJBQ0lOR19JTlRFR1JBVElPTl9JRDtcbmV4cG9ydHMuQnJvd3NlclRyYWNpbmcgPSBicm93c2VydHJhY2luZy5Ccm93c2VyVHJhY2luZztcbmV4cG9ydHMuYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiA9IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24uYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuID0gYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbi5zdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW47XG5leHBvcnRzLnN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4gPSBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uLnN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW47XG5leHBvcnRzLmRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyA9IHJlcXVlc3QuZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zO1xuZXhwb3J0cy5pbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyA9IHJlcXVlc3QuaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHM7XG5leHBvcnRzLmFkZENsc0luc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBpbnN0cnVtZW50LmFkZENsc0luc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZEZpZEluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBpbnN0cnVtZW50LmFkZEZpZEluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZExjcEluc3RydW1lbnRhdGlvbkhhbmRsZXIgPSBpbnN0cnVtZW50LmFkZExjcEluc3RydW1lbnRhdGlvbkhhbmRsZXI7XG5leHBvcnRzLmFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciA9IGluc3RydW1lbnQuYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyO1xuZXhwb3J0cy5hZGRUcmFjaW5nSGVhZGVyc1RvRmV0Y2hSZXF1ZXN0ID0gZmV0Y2guYWRkVHJhY2luZ0hlYWRlcnNUb0ZldGNoUmVxdWVzdDtcbmV4cG9ydHMuaW5zdHJ1bWVudEZldGNoUmVxdWVzdCA9IGZldGNoLmluc3RydW1lbnRGZXRjaFJlcXVlc3Q7XG5leHBvcnRzLmFkZEV4dGVuc2lvbk1ldGhvZHMgPSBleHRlbnNpb25zLmFkZEV4dGVuc2lvbk1ldGhvZHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdHJhY2luZyA9IHJlcXVpcmUoJ0BzZW50cnktaW50ZXJuYWwvdHJhY2luZycpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbi8qKlxuICogQXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCByZXR1cm5zIGludGVncmF0aW9ucyB0aGF0IHdpbGwgd29yayB3aXRoIHlvdXIgZGVwZW5kZW5jaWVzLlxuICovXG5mdW5jdGlvbiBhdXRvRGlzY292ZXJOb2RlUGVyZm9ybWFuY2VNb25pdG9yaW5nSW50ZWdyYXRpb25zKCkge1xuICBjb25zdCBsb2FkZWRJbnRlZ3JhdGlvbnMgPSB0cmFjaW5nLmxhenlMb2FkZWROb2RlUGVyZm9ybWFuY2VNb25pdG9yaW5nSW50ZWdyYXRpb25zXG4gICAgLm1hcCh0cnlMb2FkID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0cnlMb2FkKCk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKGludGVncmF0aW9uID0+ICEhaW50ZWdyYXRpb24pIDtcblxuICBpZiAobG9hZGVkSW50ZWdyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHV0aWxzLmxvZ2dlci53YXJuKCdQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVncmF0aW9ucyBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBsb2FkZWQuJyk7XG4gIH1cblxuICAvLyBPbmx5IHJldHVybiBpbnRlZ3JhdGlvbnMgd2hlcmUgdGhlaXIgZGVwZW5kZW5jaWVzIGxvYWRlZCBzdWNjZXNzZnVsbHkuXG4gIHJldHVybiBsb2FkZWRJbnRlZ3JhdGlvbnMuZmlsdGVyKGludGVncmF0aW9uID0+ICEhaW50ZWdyYXRpb24ubG9hZERlcGVuZGVuY3koKSk7XG59XG5cbmV4cG9ydHMuYXV0b0Rpc2NvdmVyTm9kZVBlcmZvcm1hbmNlTW9uaXRvcmluZ0ludGVncmF0aW9ucyA9IGF1dG9EaXNjb3Zlck5vZGVQZXJmb3JtYW5jZU1vbml0b3JpbmdJbnRlZ3JhdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgU2VudHJ5IE5vZGUgU0RLIENsaWVudC5cbiAqXG4gKiBAc2VlIE5vZGVDbGllbnRPcHRpb25zIGZvciBkb2N1bWVudGF0aW9uIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBzZWUgU2VudHJ5Q2xpZW50IGZvciB1c2FnZSBkb2N1bWVudGF0aW9uLlxuICovXG5jbGFzcyBOb2RlQ2xpZW50IGV4dGVuZHMgY29yZS5TZXJ2ZXJSdW50aW1lQ2xpZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTm9kZSBTREsgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBTREsuXG4gICAqL1xuICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIGNvcmUuYXBwbHlTZGtNZXRhZGF0YShvcHRpb25zLCAnbm9kZScpO1xuXG4gICAgLy8gVW50aWwgbm9kZSBzdXBwb3J0cyBnbG9iYWwgVGV4dEVuY29kZXIgaW4gYWxsIHZlcnNpb25zIHdlIHN1cHBvcnQsIHdlIGFyZSBmb3JjZWQgdG8gcGFzcyBpdCBmcm9tIHV0aWxcbiAgICBvcHRpb25zLnRyYW5zcG9ydE9wdGlvbnMgPSB7XG4gICAgICB0ZXh0RW5jb2RlcjogbmV3IHV0aWwuVGV4dEVuY29kZXIoKSxcbiAgICAgIC4uLm9wdGlvbnMudHJhbnNwb3J0T3B0aW9ucyxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgcnVudGltZTogeyBuYW1lOiAnbm9kZScsIHZlcnNpb246IGdsb2JhbC5wcm9jZXNzLnZlcnNpb24gfSxcbiAgICAgIHNlcnZlck5hbWU6IG9wdGlvbnMuc2VydmVyTmFtZSB8fCBnbG9iYWwucHJvY2Vzcy5lbnYuU0VOVFJZX05BTUUgfHwgb3MuaG9zdG5hbWUoKSxcbiAgICB9O1xuXG4gICAgc3VwZXIoY2xpZW50T3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0cy5Ob2RlQ2xpZW50ID0gTm9kZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudC5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX251bGxpc2hDb2FsZXNjZVxufSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnJlcXVpcmUoJ2h0dHBzJyk7XG5cbi8qKlxuKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3Byb3h5LWFnZW50cy90cmVlL2IxMzMyOTVmZDE2ZjY0NzU1NzhiNmIxNWJkOWI0ZTMzZWNiMGQwYjdcbiogV2l0aCB0aGUgZm9sbG93aW5nIGxpY2VuY2U6XG4qXG4qIChUaGUgTUlUIExpY2Vuc2UpXG4qXG4qIENvcHlyaWdodCAoYykgMjAxMyBOYXRoYW4gUmFqbGljaCA8bmF0aGFuQHRvb3RhbGxuYXRlLm5ldD4qXG4qXG4qIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbiogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4qIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xuKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOipcbipcbiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuKlxuKlxuKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4qIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcbiogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcbiogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuXG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnQWdlbnRCYXNlSW50ZXJuYWxTdGF0ZScpO1xuXG5jbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQge1xuXG4gIC8vIFNldCBieSBgaHR0cC5BZ2VudGAgLSBtaXNzaW5nIGZyb20gYEB0eXBlcy9ub2RlYFxuXG4gIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYW4gYGh0dHBgIG9yIGBodHRwc2AgcmVxdWVzdC5cbiAgICovXG4gIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzXG4gICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgXCJwYXNzaW5nIHRocm91Z2hcIiB0byB0aGlzIGluc3RhbmNlLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgaWYgKHR5cGVvZiAob3B0aW9ucyApLnNlY3VyZUVuZHBvaW50ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGBzZWN1cmVgIGVuZHBvaW50LCBjaGVjayBpZiBgcHJvdG9jb2xgIHByb3BlcnR5IGlzXG4gICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMXG4gICAgICAvLyBvciBgVVJMYCBpbnN0YW5jZSBzaG91bGQgYmUgdGhlIG1vc3QgY29tbW9uIHVzYWdlLlxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvY29sID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmluYWxseSwgaWYgbm8gYHByb3RvY29sYCBwcm9wZXJ0eSB3YXMgc2V0LCB0aGVuIGZhbGwgYmFjayB0b1xuICAgIC8vIGNoZWNraW5nIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgY3VycmVudCBjYWxsIHN0YWNrLCBhbmQgdHJ5IHRvXG4gICAgLy8gZGV0ZWN0IHRoZSBcImh0dHBzXCIgbW9kdWxlLlxuICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpO1xuICAgIGlmICh0eXBlb2Ygc3RhY2sgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN0YWNrLnNwbGl0KCdcXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpO1xuICB9XG5cbiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHtcbiAgICBjb25zdCBjb25uZWN0T3B0cyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLFxuICAgIH07XG4gICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSlcbiAgICAgIC50aGVuKHNvY2tldCA9PiB7XG4gICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICByZXR1cm4gc29ja2V0LmFkZFJlcXVlc3QocmVxLCBjb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgY3JlYXRlU29ja2V0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7XG4gICAgICB9LCBjYik7XG4gIH1cblxuICBjcmVhdGVDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQ7XG4gICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNvY2tldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzb2NrZXQgd2FzIHJldHVybmVkIGluIHRoZSBgY29ubmVjdCgpYCBmdW5jdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gc29ja2V0O1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRQb3J0KCkge1xuICAgIHJldHVybiBfbnVsbGlzaENvYWxlc2NlKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0LCAoKSA9PiAoICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSkpO1xuICB9XG5cbiAgc2V0IGRlZmF1bHRQb3J0KHYpIHtcbiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHtcbiAgICAgIHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0ID0gdjtcbiAgICB9XG4gIH1cblxuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UodGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wsICgpID0+ICggKHRoaXMuaXNTZWN1cmVFbmRwb2ludCgpID8gJ2h0dHBzOicgOiAnaHR0cDonKSkpO1xuICB9XG5cbiAgc2V0IHByb3RvY29sKHYpIHtcbiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHtcbiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5BZ2VudCA9IEFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcbiAgdXRpbHMubG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXScsIC4uLmFyZ3MpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gd2UgbmVlZCB0byBidWZmZXIgYW55IEhUVFAgdHJhZmZpYyB0aGF0IGhhcHBlbnMgd2l0aCB0aGUgcHJveHkgYmVmb3JlIHdlIGdldFxuICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuIFwiMjAwXCJcbiAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSBcImRhdGFcIiBldmVudHMgb24gdGhlIHNvY2tldCBvbmNlIHRoZVxuICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLlxuICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICBjb25zdCBidWZmZXJzID0gW107XG5cbiAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgY29uc3QgYiA9IHNvY2tldC5yZWFkKCk7XG4gICAgICBpZiAoYikgb25kYXRhKGIpO1xuICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Byb3h5IGNvbm5lY3Rpb24gZW5kZWQgYmVmb3JlIHJlY2VpdmluZyBDT05ORUNUIHJlc3BvbnNlJykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBkZWJ1Zygnb25lcnJvciAlbycsIGVycik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmRhdGEoYikge1xuICAgICAgYnVmZmVycy5wdXNoKGIpO1xuICAgICAgYnVmZmVyc0xlbmd0aCArPSBiLmxlbmd0aDtcblxuICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpO1xuICAgICAgY29uc3QgZW5kT2ZIZWFkZXJzID0gYnVmZmVyZWQuaW5kZXhPZignXFxyXFxuXFxyXFxuJyk7XG5cbiAgICAgIGlmIChlbmRPZkhlYWRlcnMgPT09IC0xKSB7XG4gICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nXG4gICAgICAgIGRlYnVnKCdoYXZlIG5vdCByZWNlaXZlZCBlbmQgb2YgSFRUUCBoZWFkZXJzIHlldC4uLicpO1xuICAgICAgICByZWFkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7XG4gICAgICBpZiAoIWZpcnN0TGluZSkge1xuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7XG4gICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGZpcnN0TGluZVBhcnRzLnNsaWNlKDIpLmpvaW4oJyAnKTtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7XG4gICAgICAgIGlmICghaGVhZGVyKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkge1xuICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogXCIke2hlYWRlcn1cImApKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuc2xpY2UoZmlyc3RDb2xvbiArIDEpLnRyaW1TdGFydCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gW2N1cnJlbnQsIHZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVidWcoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBjb25uZWN0OiB7XG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGJ1ZmZlcmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHNvY2tldC5vbignZW5kJywgb25lbmQpO1xuXG4gICAgcmVhZCgpO1xuICB9KTtcbn1cblxuZXhwb3J0cy5wYXJzZVByb3h5UmVzcG9uc2UgPSBwYXJzZVByb3h5UmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZS1wcm94eS1yZXNwb25zZS5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX251bGxpc2hDb2FsZXNjZSxcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xuY29uc3QgdGxzID0gcmVxdWlyZSgndGxzJyk7XG5jb25zdCB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgYmFzZSA9IHJlcXVpcmUoJy4vYmFzZS5qcycpO1xuY29uc3QgcGFyc2VQcm94eVJlc3BvbnNlID0gcmVxdWlyZSgnLi9wYXJzZS1wcm94eS1yZXNwb25zZS5qcycpO1xuXG5mdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG4gIHV0aWxzLmxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudF0nLCAuLi5hcmdzKTtcbn1cblxuLyoqXG4gKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG9cbiAqIHRoZSBzcGVjaWZpZWQgXCJIVFRQKHMpIHByb3h5IHNlcnZlclwiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLlxuICpcbiAqIE91dGdvaW5nIEhUVFAgcmVxdWVzdHMgYXJlIGZpcnN0IHR1bm5lbGVkIHRocm91Z2ggdGhlIHByb3h5IHNlcnZlciB1c2luZyB0aGVcbiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlcixcbiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZVxuICogSFRUUCByZXF1ZXN0IGZyb20gdGhlIHByb3h5IHNlcnZlci5cbiAqXG4gKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlXG4gKiB0aGUgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuICovXG5jbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBiYXNlLkFnZW50IHtcbiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9XG5cbiAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyB1cmwuVVJMKHByb3h5KSA6IHByb3h5O1xuICAgIHRoaXMucHJveHlIZWFkZXJzID0gX251bGxpc2hDb2FsZXNjZShfb3B0aW9uYWxDaGFpbihbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7XG4gICAgZGVidWcoJ0NyZWF0aW5nIG5ldyBIdHRwc1Byb3h5QWdlbnQgaW5zdGFuY2U6ICVvJywgdGhpcy5wcm94eS5ocmVmKTtcblxuICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgY29uc3QgaG9zdCA9ICh0aGlzLnByb3h5Lmhvc3RuYW1lIHx8IHRoaXMucHJveHkuaG9zdCkucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0ID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMCkgOiB0aGlzLnByb3h5LnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yXG4gICAgICBBTFBOUHJvdG9jb2xzOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgaG9zdCxcbiAgICAgIHBvcnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYVxuICAgKiBuZXcgSFRUUCByZXF1ZXN0LlxuICAgKi9cbiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFvcHRzLmhvc3QpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIFwiaG9zdFwiIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICBsZXQgc29ja2V0O1xuICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gdGhpcy5jb25uZWN0T3B0cy5zZXJ2ZXJuYW1lIHx8IHRoaXMuY29ubmVjdE9wdHMuaG9zdDtcbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cyxcbiAgICAgICAgc2VydmVybmFtZTogc2VydmVybmFtZSAmJiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ0NyZWF0aW5nIGBuZXQuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPVxuICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTtcbiAgICBjb25zdCBob3N0ID0gbmV0LmlzSVB2NihvcHRzLmhvc3QpID8gYFske29wdHMuaG9zdH1dYCA6IG9wdHMuaG9zdDtcbiAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXFxyXFxuYDtcblxuICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuXG4gICAgaWYgKHByb3h5LnVzZXJuYW1lIHx8IHByb3h5LnBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7XG4gICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICB9XG5cbiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gO1xuXG4gICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHtcbiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XFxyXFxuYDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm94eVJlc3BvbnNlUHJvbWlzZSA9IHBhcnNlUHJveHlSZXNwb25zZS5wYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTtcblxuICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxcclxcbmApO1xuXG4gICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7XG4gICAgcmVxLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlc1xuICAgIHRoaXMuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCwgcmVxKTtcblxuICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIHJlc3VtZSk7XG5cbiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7XG4gICAgICAgIC8vIFRoZSBwcm94eSBpcyBjb25uZWN0aW5nIHRvIGEgVExTIHNlcnZlciwgc28gdXBncmFkZVxuICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uXG4gICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7XG4gICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWUgfHwgb3B0cy5ob3N0O1xuICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksXG4gICAgICAgICAgc29ja2V0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuXG4gICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFBcbiAgICAvLyBoZWFkZXIgXCJkYXRhXCIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpc1xuICAgIC8vIGF0dGFjaGVkIHNvIHRoYXQgdGhlIG5vZGUgY29yZSBgaHR0cGAgY2FuIHBhcnNlIGFuZCBoYW5kbGUgdGhlXG4gICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuXG5cbiAgICAvLyBDbG9zZSB0aGUgb3JpZ2luYWwgc29ja2V0LCBhbmQgYSBuZXcgXCJmYWtlXCIgc29ja2V0IGlzIHJldHVybmVkXG4gICAgLy8gaW5zdGVhZCwgc28gdGhhdCB0aGUgcHJveHkgZG9lc24ndCBnZXQgdGhlIEhUVFAgcmVxdWVzdFxuICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyXG4gICAgLy8gc2Vuc2l0aXZlIGRhdGEpLlxuICAgIC8vXG4gICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDJcbiAgICBzb2NrZXQuZGVzdHJveSgpO1xuXG4gICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgXCJzb2NrZXRcIiBldmVudCB0byByZS1wbGF5IHRoZSBcImRhdGFcIiBldmVudHMuXG4gICAgcmVxLm9uY2UoJ3NvY2tldCcsIChzKSA9PiB7XG4gICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTtcbiAgICAgIC8vIFJlcGxheSB0aGUgXCJidWZmZXJlZFwiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdFxuICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3JcbiAgICAgIC8vIHRoZSB1c2VyLlxuICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTtcbiAgICAgIHMucHVzaChudWxsKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWtlU29ja2V0O1xuICB9XG59SHR0cHNQcm94eUFnZW50Ll9faW5pdFN0YXRpYygpO1xuXG5mdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7XG4gIHNvY2tldC5yZXN1bWUoKTtcbn1cblxuZnVuY3Rpb24gb21pdChcbiAgb2JqLFxuICAuLi5rZXlzXG4pXG5cbiB7XG4gIGNvbnN0IHJldCA9IHt9XG5cbjtcbiAgbGV0IGtleTtcbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydHMuSHR0cHNQcm94eUFnZW50ID0gSHR0cHNQcm94eUFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgInZhciB7XG4gIF9udWxsaXNoQ29hbGVzY2Vcbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgaW5kZXggPSByZXF1aXJlKCcuLi9wcm94eS9pbmRleC5qcycpO1xuXG4vLyBFc3RpbWF0ZWQgbWF4aW11bSBzaXplIGZvciByZWFzb25hYmxlIHN0YW5kYWxvbmUgZXZlbnRcbmNvbnN0IEdaSVBfVEhSRVNIT0xEID0gMTAyNCAqIDMyO1xuXG4vKipcbiAqIEdldHMgYSBzdHJlYW0gZnJvbSBhIFVpbnQ4QXJyYXkgb3Igc3RyaW5nXG4gKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMFxuICovXG5mdW5jdGlvbiBzdHJlYW1Gcm9tQm9keShib2R5KSB7XG4gIHJldHVybiBuZXcgc3RyZWFtLlJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgdGhpcy5wdXNoKGJvZHkpO1xuICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUcmFuc3BvcnQgdGhhdCB1c2VzIG5hdGl2ZSB0aGUgbmF0aXZlICdodHRwJyBhbmQgJ2h0dHBzJyBtb2R1bGVzIHRvIHNlbmQgZXZlbnRzIHRvIFNlbnRyeS5cbiAqL1xuZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykge1xuICBsZXQgdXJsU2VnbWVudHM7XG5cbiAgdHJ5IHtcbiAgICB1cmxTZWdtZW50cyA9IG5ldyB1cmwuVVJMKG9wdGlvbnMudXJsKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHV0aWxzLmNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbQHNlbnRyeS9ub2RlXTogSW52YWxpZCBkc24gb3IgdHVubmVsIG9wdGlvbiwgd2lsbCBub3Qgc2VuZCBhbnkgZXZlbnRzLiBUaGUgdHVubmVsIG9wdGlvbiBtdXN0IGJlIGEgZnVsbCBVUkwgd2hlbiB1c2VkLicsXG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiBjb3JlLmNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTtcbiAgfVxuXG4gIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG5cbiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHAgPT4gYG9wdGlvbnMucHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgXG4gIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgXG4gIGNvbnN0IHByb3h5ID0gYXBwbHlOb1Byb3h5T3B0aW9uKFxuICAgIHVybFNlZ21lbnRzLFxuICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSxcbiAgKTtcblxuICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDtcbiAgY29uc3Qga2VlcEFsaXZlID0gb3B0aW9ucy5rZWVwQWxpdmUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9ucy5rZWVwQWxpdmU7XG5cbiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZVxuICAvLyB2ZXJzaW9ucyg+PSA4KSBhcyB0aGV5IGhhZCBtZW1vcnkgbGVha3Mgd2hlbiB1c2luZyBpdDogIzI1NTVcbiAgY29uc3QgYWdlbnQgPSBwcm94eVxuICAgID8gKG5ldyBpbmRleC5IdHRwc1Byb3h5QWdlbnQocHJveHkpIClcbiAgICA6IG5ldyBuYXRpdmVIdHRwTW9kdWxlLkFnZW50KHsga2VlcEFsaXZlLCBtYXhTb2NrZXRzOiAzMCwgdGltZW91dDogMjAwMCB9KTtcblxuICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7XG4gIHJldHVybiBjb3JlLmNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpO1xufVxuXG4vKipcbiAqIEhvbm9ycyB0aGUgYG5vX3Byb3h5YCBlbnYgdmFyaWFibGUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0byBhbGxvdyBmb3IgaG9zdHMgZXhjbHVzaW9uLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uXG4gKiBAcGFyYW0gcHJveHkgVGhlIGNsaWVudCBjb25maWd1cmVkIHByb3h5LlxuICogQHJldHVybnMgQSBwcm94eSB0aGUgdHJhbnNwb3J0IHNob3VsZCB1c2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5Tm9Qcm94eU9wdGlvbih0cmFuc3BvcnRVcmxTZWdtZW50cywgcHJveHkpIHtcbiAgY29uc3QgeyBub19wcm94eSB9ID0gcHJvY2Vzcy5lbnY7XG5cbiAgY29uc3QgdXJsSXNFeGVtcHRGcm9tUHJveHkgPVxuICAgIG5vX3Byb3h5ICYmXG4gICAgbm9fcHJveHlcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAuc29tZShcbiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLFxuICAgICAgKTtcblxuICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcm94eTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBSZXF1ZXN0RXhlY3V0b3IgdG8gYmUgdXNlZCB3aXRoIGBjcmVhdGVUcmFuc3BvcnRgLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0RXhlY3V0b3IoXG4gIG9wdGlvbnMsXG4gIGh0dHBNb2R1bGUsXG4gIGFnZW50LFxuKSB7XG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgdXJsLlVSTChvcHRpb25zLnVybCk7XG4gIHJldHVybiBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBib2R5ID0gc3RyZWFtRnJvbUJvZHkocmVxdWVzdC5ib2R5KTtcblxuICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07XG5cbiAgICAgIGlmIChyZXF1ZXN0LmJvZHkubGVuZ3RoID4gR1pJUF9USFJFU0hPTEQpIHtcbiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnO1xuICAgICAgICBib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlR3ppcCgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyBEcmFpbiBzb2NrZXRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcblxuICAgICAgICAgIC8vIFwiS2V5LXZhbHVlIHBhaXJzIG9mIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzLiBIZWFkZXIgbmFtZXMgYXJlIGxvd2VyLWNhc2VkLlwiXG4gICAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgKCkgPT4gKCBudWxsKSk7XG4gICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpO1xuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmV0cnlBZnRlckhlYWRlcixcbiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgYm9keS5waXBlKHJlcSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydHMubWFrZU5vZGVUcmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHAuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBOT0RFX1ZFUlNJT04gPSB1dGlscy5wYXJzZVNlbXZlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUpIDtcblxuZXhwb3J0cy5OT0RFX1ZFUlNJT04gPSBOT0RFX1ZFUlNJT047XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlVmVyc2lvbi5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGRvbWFpbiA9IHJlcXVpcmUoJ2RvbWFpbicpO1xuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuXG5mdW5jdGlvbiBnZXRBY3RpdmVEb21haW4oKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChkb21haW4gKS5hY3RpdmUgO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIGdldEN1cnJlbnRIdWIoKSB7XG4gIGNvbnN0IGFjdGl2ZURvbWFpbiA9IGdldEFjdGl2ZURvbWFpbigpO1xuXG4gIC8vIElmIHRoZXJlJ3Mgbm8gYWN0aXZlIGRvbWFpbiwganVzdCByZXR1cm4gdW5kZWZpbmVkIGFuZCB0aGUgZ2xvYmFsIGh1YiB3aWxsIGJlIHVzZWRcbiAgaWYgKCFhY3RpdmVEb21haW4pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29yZS5lbnN1cmVIdWJPbkNhcnJpZXIoYWN0aXZlRG9tYWluKTtcblxuICByZXR1cm4gY29yZS5nZXRIdWJGcm9tQ2FycmllcihhY3RpdmVEb21haW4pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmZ1bmN0aW9uIGNyZWF0ZU5ld0h1YihwYXJlbnQpIHtcbiAgY29uc3QgY2FycmllciA9IHt9O1xuICBjb3JlLmVuc3VyZUh1Yk9uQ2FycmllcihjYXJyaWVyLCBwYXJlbnQpO1xuICByZXR1cm4gY29yZS5nZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKTtcbn1cblxuZnVuY3Rpb24gcnVuV2l0aEFzeW5jQ29udGV4dChjYWxsYmFjaywgb3B0aW9ucykge1xuICBjb25zdCBhY3RpdmVEb21haW4gPSBnZXRBY3RpdmVEb21haW4oKTtcblxuICBpZiAoYWN0aXZlRG9tYWluICYmIF9vcHRpb25hbENoYWluKFtvcHRpb25zLCAnb3B0aW9uYWxBY2Nlc3MnLCBfID0+IF8ucmV1c2VFeGlzdGluZ10pKSB7XG4gICAgLy8gV2UncmUgYWxyZWFkeSBpbiBhIGRvbWFpbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBuZXcgb25lLCBqdXN0IGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgaHViXG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICBjb25zdCBsb2NhbCA9IGRvbWFpbi5jcmVhdGUoKSA7XG5cbiAgY29uc3QgcGFyZW50SHViID0gYWN0aXZlRG9tYWluID8gY29yZS5nZXRIdWJGcm9tQ2FycmllcihhY3RpdmVEb21haW4pIDogdW5kZWZpbmVkO1xuICBjb25zdCBuZXdIdWIgPSBjcmVhdGVOZXdIdWIocGFyZW50SHViKTtcbiAgY29yZS5zZXRIdWJPbkNhcnJpZXIobG9jYWwsIG5ld0h1Yik7XG5cbiAgcmV0dXJuIGxvY2FsLmJpbmQoKCkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9KSgpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGFzeW5jIGNvbnRleHQgc3RyYXRlZ3kgdG8gdXNlIE5vZGUuanMgZG9tYWlucy5cbiAqL1xuZnVuY3Rpb24gc2V0RG9tYWluQXN5bmNDb250ZXh0U3RyYXRlZ3koKSB7XG4gIGNvcmUuc2V0QXN5bmNDb250ZXh0U3RyYXRlZ3koeyBnZXRDdXJyZW50SHViLCBydW5XaXRoQXN5bmNDb250ZXh0IH0pO1xufVxuXG5leHBvcnRzLnNldERvbWFpbkFzeW5jQ29udGV4dFN0cmF0ZWd5ID0gc2V0RG9tYWluQXN5bmNDb250ZXh0U3RyYXRlZ3k7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb21haW4uanMubWFwXG4iLAogICAgInZhciB7XG4gIF9vcHRpb25hbENoYWluXG59ID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCBhc3luY19ob29rcyA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxubGV0IGFzeW5jU3RvcmFnZTtcblxuLyoqXG4gKiBTZXRzIHRoZSBhc3luYyBjb250ZXh0IHN0cmF0ZWd5IHRvIHVzZSBBc3luY0xvY2FsU3RvcmFnZSB3aGljaCByZXF1aXJlcyBOb2RlIHYxMi4xNy4wIG9yIHYxMy4xMC4wLlxuICovXG5mdW5jdGlvbiBzZXRIb29rc0FzeW5jQ29udGV4dFN0cmF0ZWd5KCkge1xuICBpZiAoIWFzeW5jU3RvcmFnZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGFzeW5jU3RvcmFnZSA9IG5ldyAoYXN5bmNfaG9va3MgKS5Bc3luY0xvY2FsU3RvcmFnZSgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnRIdWIoKSB7XG4gICAgcmV0dXJuIGFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGZ1bmN0aW9uIGNyZWF0ZU5ld0h1YihwYXJlbnQpIHtcbiAgICBjb25zdCBjYXJyaWVyID0ge307XG4gICAgY29yZS5lbnN1cmVIdWJPbkNhcnJpZXIoY2FycmllciwgcGFyZW50KTtcbiAgICByZXR1cm4gY29yZS5nZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bldpdGhBc3luY0NvbnRleHQoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBjb25zdCBleGlzdGluZ0h1YiA9IGdldEN1cnJlbnRIdWIoKTtcblxuICAgIGlmIChleGlzdGluZ0h1YiAmJiBfb3B0aW9uYWxDaGFpbihbb3B0aW9ucywgJ29wdGlvbmFsQWNjZXNzJywgXyA9PiBfLnJldXNlRXhpc3RpbmddKSkge1xuICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbiBhbiBhc3luYyBjb250ZXh0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICAgIC8vIGp1c3QgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgY3VycmVudCBodWJcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0h1YiA9IGNyZWF0ZU5ld0h1YihleGlzdGluZ0h1Yik7XG5cbiAgICByZXR1cm4gYXN5bmNTdG9yYWdlLnJ1bihuZXdIdWIsICgpID0+IHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgY29yZS5zZXRBc3luY0NvbnRleHRTdHJhdGVneSh7IGdldEN1cnJlbnRIdWIsIHJ1bldpdGhBc3luY0NvbnRleHQgfSk7XG59XG5cbmV4cG9ydHMuc2V0SG9va3NBc3luY0NvbnRleHRTdHJhdGVneSA9IHNldEhvb2tzQXN5bmNDb250ZXh0U3RyYXRlZ3k7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3Qgbm9kZVZlcnNpb24gPSByZXF1aXJlKCcuLi9ub2RlVmVyc2lvbi5qcycpO1xuY29uc3QgZG9tYWluID0gcmVxdWlyZSgnLi9kb21haW4uanMnKTtcbmNvbnN0IGhvb2tzID0gcmVxdWlyZSgnLi9ob29rcy5qcycpO1xuXG4vKipcbiAqIFNldHMgdGhlIGNvcnJlY3QgYXN5bmMgY29udGV4dCBzdHJhdGVneSBmb3IgTm9kZS5qc1xuICpcbiAqIE5vZGUuanMgPj0gMTQgdXNlcyBBc3luY0xvY2FsU3RvcmFnZVxuICogTm9kZS5qcyA8IDE0IHVzZXMgZG9tYWluc1xuICovXG5mdW5jdGlvbiBzZXROb2RlQXN5bmNDb250ZXh0U3RyYXRlZ3koKSB7XG4gIGlmIChub2RlVmVyc2lvbi5OT0RFX1ZFUlNJT04ubWFqb3IgPj0gMTQpIHtcbiAgICBob29rcy5zZXRIb29rc0FzeW5jQ29udGV4dFN0cmF0ZWd5KCk7XG4gIH0gZWxzZSB7XG4gICAgZG9tYWluLnNldERvbWFpbkFzeW5jQ29udGV4dFN0cmF0ZWd5KCk7XG4gIH1cbn1cblxuZXhwb3J0cy5zZXROb2RlQXN5bmNDb250ZXh0U3RyYXRlZ3kgPSBzZXROb2RlQXN5bmNDb250ZXh0U3RyYXRlZ3k7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0NvbnNvbGUnO1xuXG5jb25zdCBfY29uc29sZUludGVncmF0aW9uID0gKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICB1dGlscy5hZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBhcmdzLCBsZXZlbCB9KSA9PiB7XG4gICAgICAgIGlmIChjb3JlLmdldENsaWVudCgpICE9PSBjbGllbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb3JlLmFkZEJyZWFkY3J1bWIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2F0ZWdvcnk6ICdjb25zb2xlJyxcbiAgICAgICAgICAgIGxldmVsOiB1dGlscy5zZXZlcml0eUxldmVsRnJvbVN0cmluZyhsZXZlbCksXG4gICAgICAgICAgICBtZXNzYWdlOiB1dGlsLmZvcm1hdC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IFsuLi5hcmdzXSxcbiAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBjb25zb2xlSW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9jb25zb2xlSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIENvbnNvbGUgbW9kdWxlIGludGVncmF0aW9uLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb25zb2xlSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBDb25zb2xlID0gY29yZS5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoSU5URUdSQVRJT05fTkFNRSwgY29uc29sZUludGVncmF0aW9uKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG5leHBvcnRzLkNvbnNvbGUgPSBDb25zb2xlO1xuZXhwb3J0cy5jb25zb2xlSW50ZWdyYXRpb24gPSBjb25zb2xlSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zb2xlLmpzLm1hcFxuIiwKICAgICJ2YXIge1xuICBfb3B0aW9uYWxDaGFpblxufSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuLy8gVE9ETzogUmVxdWlyZWQgdW50aWwgd2UgZHJvcCBzdXBwb3J0IGZvciBOb2RlIHY4XG5jb25zdCByZWFkRmlsZUFzeW5jID0gdXRpbC5wcm9taXNpZnkoZnMucmVhZEZpbGUpO1xuY29uc3QgcmVhZERpckFzeW5jID0gdXRpbC5wcm9taXNpZnkoZnMucmVhZGRpcik7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnQ29udGV4dCc7XG5cbmNvbnN0IF9ub2RlQ29udGV4dEludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IGNhY2hlZENvbnRleHQ7XG5cbiAgY29uc3QgX29wdGlvbnMgPSB7XG4gICAgYXBwOiB0cnVlLFxuICAgIG9zOiB0cnVlLFxuICAgIGRldmljZTogdHJ1ZSxcbiAgICBjdWx0dXJlOiB0cnVlLFxuICAgIGNsb3VkUmVzb3VyY2U6IHRydWUsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICAvKiogQWRkIGNvbnRleHRzIHRvIHRoZSBldmVudC4gQ2FjaGVzIHRoZSBjb250ZXh0IHNvIHdlIG9ubHkgbG9vayBpdCB1cCBvbmNlLiAqL1xuICBhc3luYyBmdW5jdGlvbiBhZGRDb250ZXh0KGV2ZW50KSB7XG4gICAgaWYgKGNhY2hlZENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVkQ29udGV4dCA9IF9nZXRDb250ZXh0cygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRDb250ZXh0ID0gX3VwZGF0ZUNvbnRleHQoYXdhaXQgY2FjaGVkQ29udGV4dCk7XG5cbiAgICBldmVudC5jb250ZXh0cyA9IHtcbiAgICAgIC4uLmV2ZW50LmNvbnRleHRzLFxuICAgICAgYXBwOiB7IC4uLnVwZGF0ZWRDb250ZXh0LmFwcCwgLi4uX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXyA9PiBfLmNvbnRleHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5hcHBdKSB9LFxuICAgICAgb3M6IHsgLi4udXBkYXRlZENvbnRleHQub3MsIC4uLl9vcHRpb25hbENoYWluKFtldmVudCwgJ2FjY2VzcycsIF8zID0+IF8zLmNvbnRleHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBfNC5vc10pIH0sXG4gICAgICBkZXZpY2U6IHsgLi4udXBkYXRlZENvbnRleHQuZGV2aWNlLCAuLi5fb3B0aW9uYWxDaGFpbihbZXZlbnQsICdhY2Nlc3MnLCBfNSA9PiBfNS5jb250ZXh0cywgJ29wdGlvbmFsQWNjZXNzJywgXzYgPT4gXzYuZGV2aWNlXSkgfSxcbiAgICAgIGN1bHR1cmU6IHsgLi4udXBkYXRlZENvbnRleHQuY3VsdHVyZSwgLi4uX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzcgPT4gXzcuY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF84ID0+IF84LmN1bHR1cmVdKSB9LFxuICAgICAgY2xvdWRfcmVzb3VyY2U6IHsgLi4udXBkYXRlZENvbnRleHQuY2xvdWRfcmVzb3VyY2UsIC4uLl9vcHRpb25hbENoYWluKFtldmVudCwgJ2FjY2VzcycsIF85ID0+IF85LmNvbnRleHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTAgPT4gXzEwLmNsb3VkX3Jlc291cmNlXSkgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgLyoqIEdldCB0aGUgY29udGV4dHMgZnJvbSBub2RlLiAqL1xuICBhc3luYyBmdW5jdGlvbiBfZ2V0Q29udGV4dHMoKSB7XG4gICAgY29uc3QgY29udGV4dHMgPSB7fTtcblxuICAgIGlmIChfb3B0aW9ucy5vcykge1xuICAgICAgY29udGV4dHMub3MgPSBhd2FpdCBnZXRPc0NvbnRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoX29wdGlvbnMuYXBwKSB7XG4gICAgICBjb250ZXh0cy5hcHAgPSBnZXRBcHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKF9vcHRpb25zLmRldmljZSkge1xuICAgICAgY29udGV4dHMuZGV2aWNlID0gZ2V0RGV2aWNlQ29udGV4dChfb3B0aW9ucy5kZXZpY2UpO1xuICAgIH1cblxuICAgIGlmIChfb3B0aW9ucy5jdWx0dXJlKSB7XG4gICAgICBjb25zdCBjdWx0dXJlID0gZ2V0Q3VsdHVyZUNvbnRleHQoKTtcblxuICAgICAgaWYgKGN1bHR1cmUpIHtcbiAgICAgICAgY29udGV4dHMuY3VsdHVyZSA9IGN1bHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKF9vcHRpb25zLmNsb3VkUmVzb3VyY2UpIHtcbiAgICAgIGNvbnRleHRzLmNsb3VkX3Jlc291cmNlID0gZ2V0Q2xvdWRSZXNvdXJjZUNvbnRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dHM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQpIHtcbiAgICAgIHJldHVybiBhZGRDb250ZXh0KGV2ZW50KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBub2RlQ29udGV4dEludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfbm9kZUNvbnRleHRJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogQWRkIG5vZGUgbW9kdWxlcyAvIHBhY2thZ2VzIHRvIHRoZSBldmVudC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgbm9kZUNvbnRleHRJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IENvbnRleHQgPSBjb3JlLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhJTlRFR1JBVElPTl9OQU1FLCBub2RlQ29udGV4dEludGVncmF0aW9uKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbnRleHQgd2l0aCBkeW5hbWljIHZhbHVlcyB0aGF0IGNhbiBjaGFuZ2VcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUNvbnRleHQoY29udGV4dHMpIHtcbiAgLy8gT25seSB1cGRhdGUgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0XG4gIGlmIChfb3B0aW9uYWxDaGFpbihbY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF8xMSA9PiBfMTEuYXBwLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTIgPT4gXzEyLmFwcF9tZW1vcnldKSkge1xuICAgIGNvbnRleHRzLmFwcC5hcHBfbWVtb3J5ID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLnJzcztcbiAgfVxuXG4gIGlmIChfb3B0aW9uYWxDaGFpbihbY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF8xMyA9PiBfMTMuZGV2aWNlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTQgPT4gXzE0LmZyZWVfbWVtb3J5XSkpIHtcbiAgICBjb250ZXh0cy5kZXZpY2UuZnJlZV9tZW1vcnkgPSBvcy5mcmVlbWVtKCk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dHM7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjb250ZXh0LlxuICpcbiAqIEJhc2VkIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLCB0aGlzIHVzZXMgYSBkaWZmZXJlbnQgc3RyYXRlZ3kgdG8gcHJvdmlkZSB0aGVcbiAqIG1vc3QgYWNjdXJhdGUgT1MgaW5mb3JtYXRpb24uIFNpbmNlIHRoaXMgbWlnaHQgaW52b2x2ZSBzcGF3bmluZyBzdWJwcm9jZXNzZXNcbiAqIG9yIGFjY2Vzc2luZyB0aGUgZmlsZSBzeXN0ZW0sIHRoaXMgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgbGF6aWx5IGFuZCBjYWNoZWQuXG4gKlxuICogIC0gT24gbWFjT1MgKERhcndpbiksIHRoaXMgd2lsbCBleGVjdXRlIHRoZSBgc3dfdmVyc2AgdXRpbGl0eS4gVGhlIGNvbnRleHRcbiAqICAgIGhhcyBhIGBuYW1lYCwgYHZlcnNpb25gLCBgYnVpbGRgIGFuZCBga2VybmVsX3ZlcnNpb25gIHNldC5cbiAqICAtIE9uIExpbnV4LCB0aGlzIHdpbGwgdHJ5IHRvIGxvYWQgYSBkaXN0cmlidXRpb24gcmVsZWFzZSBmcm9tIGAvZXRjYCBhbmQgc2V0XG4gKiAgICB0aGUgYG5hbWVgLCBgdmVyc2lvbmAgYW5kIGBrZXJuZWxfdmVyc2lvbmAgZmllbGRzLlxuICogIC0gT24gYWxsIG90aGVyIHBsYXRmb3Jtcywgb25seSBhIGBuYW1lYCBhbmQgYHZlcnNpb25gIHdpbGwgYmUgcmV0dXJuZWQuIE5vdGVcbiAqICAgIHRoYXQgYHZlcnNpb25gIG1pZ2h0IGFjdHVhbGx5IGJlIHRoZSBrZXJuZWwgdmVyc2lvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0T3NDb250ZXh0KCkge1xuICBjb25zdCBwbGF0Zm9ybUlkID0gb3MucGxhdGZvcm0oKTtcbiAgc3dpdGNoIChwbGF0Zm9ybUlkKSB7XG4gICAgY2FzZSAnZGFyd2luJzpcbiAgICAgIHJldHVybiBnZXREYXJ3aW5JbmZvKCk7XG4gICAgY2FzZSAnbGludXgnOlxuICAgICAgcmV0dXJuIGdldExpbnV4SW5mbygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBQTEFURk9STV9OQU1FU1twbGF0Zm9ybUlkXSB8fCBwbGF0Zm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiBvcy5yZWxlYXNlKCksXG4gICAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1bHR1cmVDb250ZXh0KCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAodHlwZW9mIChwcm9jZXNzLnZlcnNpb25zICkuaWN1ICE9PSAnc3RyaW5nJykge1xuICAgICAgLy8gTm9kZSB3YXMgYnVpbHQgd2l0aG91dCBJQ1Ugc3VwcG9ydFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIHRoYXQgbm9kZSB3YXMgYnVpbHQgd2l0aCBmdWxsIEludGwgc3VwcG9ydC4gSXRzIHBvc3NpYmxlIGl0IHdhcyBidWlsdCB3aXRob3V0IHN1cHBvcnQgZm9yIG5vbi1FbmdsaXNoXG4gICAgLy8gbG9jYWxlcyB3aGljaCB3aWxsIG1ha2UgcmVzb2x2ZWRPcHRpb25zIGluYWNjdXJhdGVcbiAgICAvL1xuICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaW50bC5odG1sI2RldGVjdGluZy1pbnRlcm5hdGlvbmFsaXphdGlvbi1zdXBwb3J0XG4gICAgY29uc3QgamFudWFyeSA9IG5ldyBEYXRlKDllOCk7XG4gICAgY29uc3Qgc3BhbmlzaCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlcycsIHsgbW9udGg6ICdsb25nJyB9KTtcbiAgICBpZiAoc3BhbmlzaC5mb3JtYXQoamFudWFyeSkgPT09ICdlbmVybycpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogb3B0aW9ucy5sb2NhbGUsXG4gICAgICAgIHRpbWV6b25lOiBvcHRpb25zLnRpbWVab25lLFxuICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vXG4gIH1cblxuICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIGdldEFwcENvbnRleHQoKSB7XG4gIGNvbnN0IGFwcF9tZW1vcnkgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkucnNzO1xuICBjb25zdCBhcHBfc3RhcnRfdGltZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSBwcm9jZXNzLnVwdGltZSgpICogMTAwMCkudG9JU09TdHJpbmcoKTtcblxuICByZXR1cm4geyBhcHBfc3RhcnRfdGltZSwgYXBwX21lbW9yeSB9O1xufVxuXG4vKipcbiAqIEdldHMgZGV2aWNlIGluZm9ybWF0aW9uIGZyb20gb3NcbiAqL1xuZnVuY3Rpb24gZ2V0RGV2aWNlQ29udGV4dChkZXZpY2VPcHQpIHtcbiAgY29uc3QgZGV2aWNlID0ge307XG5cbiAgLy8gU29tZXRpbWVzIG9zLnVwdGltZSgpIHRocm93cyBkdWUgdG8gbGFja2luZyBwZXJtaXNzaW9uczogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvODIwMlxuICBsZXQgdXB0aW1lO1xuICB0cnkge1xuICAgIHVwdGltZSA9IG9zLnVwdGltZSAmJiBvcy51cHRpbWUoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIG5vb3BcbiAgfVxuXG4gIC8vIG9zLnVwdGltZSBvciBpdHMgcmV0dXJuIHZhbHVlIHNlZW0gdG8gYmUgdW5kZWZpbmVkIGluIGNlcnRhaW4gZW52aXJvbm1lbnRzIChlLmcuIEF6dXJlIGZ1bmN0aW9ucykuXG4gIC8vIEhlbmNlLCB3ZSBvbmx5IHNldCBib290IHRpbWUsIGlmIHdlIGdldCBhIHZhbGlkIHVwdGltZSB2YWx1ZS5cbiAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy81ODU2XG4gIGlmICh0eXBlb2YgdXB0aW1lID09PSAnbnVtYmVyJykge1xuICAgIGRldmljZS5ib290X3RpbWUgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdXB0aW1lICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIGRldmljZS5hcmNoID0gb3MuYXJjaCgpO1xuXG4gIGlmIChkZXZpY2VPcHQgPT09IHRydWUgfHwgZGV2aWNlT3B0Lm1lbW9yeSkge1xuICAgIGRldmljZS5tZW1vcnlfc2l6ZSA9IG9zLnRvdGFsbWVtKCk7XG4gICAgZGV2aWNlLmZyZWVfbWVtb3J5ID0gb3MuZnJlZW1lbSgpO1xuICB9XG5cbiAgaWYgKGRldmljZU9wdCA9PT0gdHJ1ZSB8fCBkZXZpY2VPcHQuY3B1KSB7XG4gICAgY29uc3QgY3B1SW5mbyA9IG9zLmNwdXMoKTtcbiAgICBpZiAoY3B1SW5mbyAmJiBjcHVJbmZvLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RDcHUgPSBjcHVJbmZvWzBdO1xuXG4gICAgICBkZXZpY2UucHJvY2Vzc29yX2NvdW50ID0gY3B1SW5mby5sZW5ndGg7XG4gICAgICBkZXZpY2UuY3B1X2Rlc2NyaXB0aW9uID0gZmlyc3RDcHUubW9kZWw7XG4gICAgICBkZXZpY2UucHJvY2Vzc29yX2ZyZXF1ZW5jeSA9IGZpcnN0Q3B1LnNwZWVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXZpY2U7XG59XG5cbi8qKiBNYXBwaW5nIG9mIE5vZGUncyBwbGF0Zm9ybSBuYW1lcyB0byBhY3R1YWwgT1MgbmFtZXMuICovXG5jb25zdCBQTEFURk9STV9OQU1FUyA9IHtcbiAgYWl4OiAnSUJNIEFJWCcsXG4gIGZyZWVic2Q6ICdGcmVlQlNEJyxcbiAgb3BlbmJzZDogJ09wZW5CU0QnLFxuICBzdW5vczogJ1N1bk9TJyxcbiAgd2luMzI6ICdXaW5kb3dzJyxcbn07XG5cbi8qKiBMaW51eCB2ZXJzaW9uIGZpbGUgdG8gY2hlY2sgZm9yIGEgZGlzdHJpYnV0aW9uLiAqL1xuXG4vKiogTWFwcGluZyBvZiBsaW51eCByZWxlYXNlIGZpbGVzIGxvY2F0ZWQgaW4gL2V0YyB0byBkaXN0cmlidXRpb25zLiAqL1xuY29uc3QgTElOVVhfRElTVFJPUyA9IFtcbiAgeyBuYW1lOiAnZmVkb3JhLXJlbGVhc2UnLCBkaXN0cm9zOiBbJ0ZlZG9yYSddIH0sXG4gIHsgbmFtZTogJ3JlZGhhdC1yZWxlYXNlJywgZGlzdHJvczogWydSZWQgSGF0IExpbnV4JywgJ0NlbnRvcyddIH0sXG4gIHsgbmFtZTogJ3JlZGhhdF92ZXJzaW9uJywgZGlzdHJvczogWydSZWQgSGF0IExpbnV4J10gfSxcbiAgeyBuYW1lOiAnU3VTRS1yZWxlYXNlJywgZGlzdHJvczogWydTVVNFIExpbnV4J10gfSxcbiAgeyBuYW1lOiAnbHNiLXJlbGVhc2UnLCBkaXN0cm9zOiBbJ1VidW50dSBMaW51eCcsICdBcmNoIExpbnV4J10gfSxcbiAgeyBuYW1lOiAnZGViaWFuX3ZlcnNpb24nLCBkaXN0cm9zOiBbJ0RlYmlhbiddIH0sXG4gIHsgbmFtZTogJ2RlYmlhbl9yZWxlYXNlJywgZGlzdHJvczogWydEZWJpYW4nXSB9LFxuICB7IG5hbWU6ICdhcmNoLXJlbGVhc2UnLCBkaXN0cm9zOiBbJ0FyY2ggTGludXgnXSB9LFxuICB7IG5hbWU6ICdnZW50b28tcmVsZWFzZScsIGRpc3Ryb3M6IFsnR2VudG9vIExpbnV4J10gfSxcbiAgeyBuYW1lOiAnbm92ZWxsLXJlbGVhc2UnLCBkaXN0cm9zOiBbJ1NVU0UgTGludXgnXSB9LFxuICB7IG5hbWU6ICdhbHBpbmUtcmVsZWFzZScsIGRpc3Ryb3M6IFsnQWxwaW5lIExpbnV4J10gfSxcbl07XG5cbi8qKiBGdW5jdGlvbnMgdG8gZXh0cmFjdCB0aGUgT1MgdmVyc2lvbiBmcm9tIExpbnV4IHJlbGVhc2UgZmlsZXMuICovXG5jb25zdCBMSU5VWF9WRVJTSU9OU1xuXG4gPSB7XG4gIGFscGluZTogY29udGVudCA9PiBjb250ZW50LFxuICBhcmNoOiBjb250ZW50ID0+IG1hdGNoRmlyc3QoL2Rpc3RyaWJfcmVsZWFzZT0oLiopLywgY29udGVudCksXG4gIGNlbnRvczogY29udGVudCA9PiBtYXRjaEZpcnN0KC9yZWxlYXNlIChbXiBdKykvLCBjb250ZW50KSxcbiAgZGViaWFuOiBjb250ZW50ID0+IGNvbnRlbnQsXG4gIGZlZG9yYTogY29udGVudCA9PiBtYXRjaEZpcnN0KC9yZWxlYXNlICguLikvLCBjb250ZW50KSxcbiAgbWludDogY29udGVudCA9PiBtYXRjaEZpcnN0KC9kaXN0cmliX3JlbGVhc2U9KC4qKS8sIGNvbnRlbnQpLFxuICByZWQ6IGNvbnRlbnQgPT4gbWF0Y2hGaXJzdCgvcmVsZWFzZSAoW14gXSspLywgY29udGVudCksXG4gIHN1c2U6IGNvbnRlbnQgPT4gbWF0Y2hGaXJzdCgvVkVSU0lPTiA9ICguKilcXG4vLCBjb250ZW50KSxcbiAgdWJ1bnR1OiBjb250ZW50ID0+IG1hdGNoRmlyc3QoL2Rpc3RyaWJfcmVsZWFzZT0oLiopLywgY29udGVudCksXG59O1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggb25lIGNhcHR1cmUgZ3JvdXAuXG4gKlxuICogQHBhcmFtIHJlZ2V4IEEgcmVndWxhciBleHByZXNzaW9uIHRvIGV4ZWN1dGUuXG4gKiBAcGFyYW0gdGV4dCBDb250ZW50IHRvIGV4ZWN1dGUgdGhlIFJlZ0V4IG9uLlxuICogQHJldHVybnMgVGhlIGNhcHR1cmVkIHN0cmluZyBpZiBtYXRjaGVkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBtYXRjaEZpcnN0KHJlZ2V4LCB0ZXh0KSB7XG4gIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBMb2FkcyB0aGUgbWFjT1Mgb3BlcmF0aW5nIHN5c3RlbSBjb250ZXh0LiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RGFyd2luSW5mbygpIHtcbiAgLy8gRGVmYXVsdCB2YWx1ZXMgdGhhdCB3aWxsIGJlIHVzZWQgaW4gY2FzZSBubyBvcGVyYXRpbmcgc3lzdGVtIGluZm9ybWF0aW9uXG4gIC8vIGNhbiBiZSBsb2FkZWQuIFRoZSBkZWZhdWx0IHZlcnNpb24gaXMgY29tcHV0ZWQgdmlhIGhldXJpc3RpY3MgZnJvbSB0aGVcbiAgLy8ga2VybmVsIHZlcnNpb24sIGJ1dCB0aGUgYnVpbGQgSUQgaXMgbWlzc2luZy5cbiAgY29uc3QgZGFyd2luSW5mbyA9IHtcbiAgICBrZXJuZWxfdmVyc2lvbjogb3MucmVsZWFzZSgpLFxuICAgIG5hbWU6ICdNYWMgT1MgWCcsXG4gICAgdmVyc2lvbjogYDEwLiR7TnVtYmVyKG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdKSAtIDR9YCxcbiAgfTtcblxuICB0cnkge1xuICAgIC8vIFdlIHRyeSB0byBsb2FkIHRoZSBhY3R1YWwgbWFjT1MgdmVyc2lvbiBieSBleGVjdXRpbmcgdGhlIGBzd192ZXJzYCB0b29sLlxuICAgIC8vIFRoaXMgdG9vbCBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIGV2ZXJ5IHN0YW5kYXJkIG1hY09TIGluc3RhbGxhdGlvbi4gSW5cbiAgICAvLyBjYXNlIHRoaXMgZmFpbHMsIHdlIHN0aWNrIHdpdGggdGhlIHZhbHVlcyBjb21wdXRlZCBhYm92ZS5cblxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY0ZpbGUoJy91c3IvYmluL3N3X3ZlcnMnLCAoZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRhcndpbkluZm8ubmFtZSA9IG1hdGNoRmlyc3QoL15Qcm9kdWN0TmFtZTpcXHMrKC4qKSQvbSwgb3V0cHV0KTtcbiAgICBkYXJ3aW5JbmZvLnZlcnNpb24gPSBtYXRjaEZpcnN0KC9eUHJvZHVjdFZlcnNpb246XFxzKyguKikkL20sIG91dHB1dCk7XG4gICAgZGFyd2luSW5mby5idWlsZCA9IG1hdGNoRmlyc3QoL15CdWlsZFZlcnNpb246XFxzKyguKikkL20sIG91dHB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuXG4gIHJldHVybiBkYXJ3aW5JbmZvO1xufVxuXG4vKiogUmV0dXJucyBhIGRpc3RyaWJ1dGlvbiBpZGVudGlmaWVyIHRvIGxvb2sgdXAgdmVyc2lvbiBjYWxsYmFja3MuICovXG5mdW5jdGlvbiBnZXRMaW51eERpc3Ryb0lkKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuc3BsaXQoJyAnKVswXS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKiogTG9hZHMgdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0gY29udGV4dC4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExpbnV4SW5mbygpIHtcbiAgLy8gQnkgZGVmYXVsdCwgd2UgY2Fubm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCB0aGUgZGlzdHJpYnV0aW9uIG9yIExpbnV4XG4gIC8vIHZlcnNpb24uIGBvcy5yZWxlYXNlKClgIHJldHVybnMgdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB3ZSBhc3N1bWUgYSBnZW5lcmljXG4gIC8vIFwiTGludXhcIiBuYW1lLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGRvd24gYmVsb3cuXG4gIGNvbnN0IGxpbnV4SW5mbyA9IHtcbiAgICBrZXJuZWxfdmVyc2lvbjogb3MucmVsZWFzZSgpLFxuICAgIG5hbWU6ICdMaW51eCcsXG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBzdGFydCBndWVzc2luZyB0aGUgZGlzdHJpYnV0aW9uIGJ5IGxpc3RpbmcgZmlsZXMgaW4gdGhlIC9ldGNcbiAgICAvLyBkaXJlY3RvcnkuIFRoaXMgaXMgd2VyZSBtb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMgKGV4Y2VwdCBLbm9wcGl4KSBzdG9yZVxuICAgIC8vIHJlbGVhc2UgZmlsZXMgd2l0aCBjZXJ0YWluIGRpc3RyaWJ1dGlvbi1kZXBlbmRlbnQgbWV0YSBkYXRhLiBXZSBzZWFyY2hcbiAgICAvLyBmb3IgZXhhY3RseSBvbmUga25vd24gZmlsZSBkZWZpbmVkIGluIGBMSU5VWF9ESVNUUk9TYCBhbmQgZXhpdCBpZiBub25lXG4gICAgLy8gYXJlIGZvdW5kLiBJbiBjYXNlIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGZpbGUsIHdlIGp1c3Qgc3RpY2sgd2l0aCB0aGVcbiAgICAvLyBmaXJzdCBvbmUuXG4gICAgY29uc3QgZXRjRmlsZXMgPSBhd2FpdCByZWFkRGlyQXN5bmMoJy9ldGMnKTtcbiAgICBjb25zdCBkaXN0cm9GaWxlID0gTElOVVhfRElTVFJPUy5maW5kKGZpbGUgPT4gZXRjRmlsZXMuaW5jbHVkZXMoZmlsZS5uYW1lKSk7XG4gICAgaWYgKCFkaXN0cm9GaWxlKSB7XG4gICAgICByZXR1cm4gbGludXhJbmZvO1xuICAgIH1cblxuICAgIC8vIE9uY2UgdGhhdCBmaWxlIGlzIGtub3duLCBsb2FkIGl0cyBjb250ZW50cy4gVG8gbWFrZSBzZWFyY2hpbmcgaW4gdGhvc2VcbiAgICAvLyBmaWxlcyBlYXNpZXIsIHdlIGxvd2VyY2FzZSB0aGUgZmlsZSBjb250ZW50cy4gU2luY2UgdGhlc2UgZmlsZXMgYXJlXG4gICAgLy8gdXN1YWxseSBxdWl0ZSBzbWFsbCwgdGhpcyBzaG91bGQgbm90IGFsbG9jYXRlIHRvbyBtdWNoIG1lbW9yeSBhbmQgd2Ugb25seVxuICAgIC8vIGhvbGQgb24gdG8gaXQgZm9yIGEgdmVyeSBzaG9ydCBhbW91bnQgb2YgdGltZS5cbiAgICBjb25zdCBkaXN0cm9QYXRoID0gcGF0aC5qb2luKCcvZXRjJywgZGlzdHJvRmlsZS5uYW1lKTtcbiAgICBjb25zdCBjb250ZW50cyA9ICgoYXdhaXQgcmVhZEZpbGVBc3luYyhkaXN0cm9QYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKSApLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBTb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgc3RvcmUgdGhlaXIgcmVsZWFzZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2FtZSBmaWxlXG4gICAgLy8gKGUuZy4gUkhFTCBhbmQgQ2VudG9zKS4gSW4gdGhvc2UgY2FzZXMsIHdlIHNjYW4gdGhlIGZpbGUgZm9yIGFuXG4gICAgLy8gaWRlbnRpZmllciwgdGhhdCBiYXNpY2FsbHkgY29uc2lzdHMgb2YgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbnV4XG4gICAgLy8gZGlzdHJpYnV0aW9uIG5hbWUgKGUuZy4gXCJyZWRcIiBmb3IgUmVkIEhhdCkuIEluIGNhc2UgdGhlcmUgaXMgbm8gbWF0Y2gsIHdlXG4gICAgLy8ganVzdCBhc3N1bWUgdGhlIGZpcnN0IGRpc3RyaWJ1dGlvbiBpbiBvdXIgbGlzdC5cbiAgICBjb25zdCB7IGRpc3Ryb3MgfSA9IGRpc3Ryb0ZpbGU7XG4gICAgbGludXhJbmZvLm5hbWUgPSBkaXN0cm9zLmZpbmQoZCA9PiBjb250ZW50cy5pbmRleE9mKGdldExpbnV4RGlzdHJvSWQoZCkpID49IDApIHx8IGRpc3Ryb3NbMF07XG5cbiAgICAvLyBCYXNlZCBvbiB0aGUgZm91bmQgZGlzdHJpYnV0aW9uLCB3ZSBjYW4gbm93IGNvbXB1dGUgdGhlIGFjdHVhbCB2ZXJzaW9uXG4gICAgLy8gbnVtYmVyLiBUaGlzIGlzIGRpZmZlcmVudCBmb3IgZXZlcnkgZGlzdHJpYnV0aW9uLCBzbyBzZXZlcmFsIHN0cmF0ZWdpZXNcbiAgICAvLyBhcmUgY29tcHV0ZWQgaW4gYExJTlVYX1ZFUlNJT05TYC5cbiAgICBjb25zdCBpZCA9IGdldExpbnV4RGlzdHJvSWQobGludXhJbmZvLm5hbWUpO1xuICAgIGxpbnV4SW5mby52ZXJzaW9uID0gTElOVVhfVkVSU0lPTlNbaWRdKGNvbnRlbnRzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGlnbm9yZVxuICB9XG5cbiAgcmV0dXJuIGxpbnV4SW5mbztcbn1cblxuLyoqXG4gKiBHcmFicyBzb21lIGluZm9ybWF0aW9uIGFib3V0IGhvc3RpbmcgcHJvdmlkZXIgYmFzZWQgb24gYmVzdCBlZmZvcnQuXG4gKi9cbmZ1bmN0aW9uIGdldENsb3VkUmVzb3VyY2VDb250ZXh0KCkge1xuICBpZiAocHJvY2Vzcy5lbnYuVkVSQ0VMKSB7XG4gICAgLy8gaHR0cHM6Ly92ZXJjZWwuY29tL2RvY3MvY29uY2VwdHMvcHJvamVjdHMvZW52aXJvbm1lbnQtdmFyaWFibGVzL3N5c3RlbS1lbnZpcm9ubWVudC12YXJpYWJsZXMjc3lzdGVtLWVudmlyb25tZW50LXZhcmlhYmxlc1xuICAgIHJldHVybiB7XG4gICAgICAnY2xvdWQucHJvdmlkZXInOiAndmVyY2VsJyxcbiAgICAgICdjbG91ZC5yZWdpb24nOiBwcm9jZXNzLmVudi5WRVJDRUxfUkVHSU9OLFxuICAgIH07XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuQVdTX1JFR0lPTikge1xuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2NvbmZpZ3VyYXRpb24tZW52dmFycy5odG1sXG4gICAgcmV0dXJuIHtcbiAgICAgICdjbG91ZC5wcm92aWRlcic6ICdhd3MnLFxuICAgICAgJ2Nsb3VkLnJlZ2lvbic6IHByb2Nlc3MuZW52LkFXU19SRUdJT04sXG4gICAgICAnY2xvdWQucGxhdGZvcm0nOiBwcm9jZXNzLmVudi5BV1NfRVhFQ1VUSU9OX0VOVixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LkdDUF9QUk9KRUNUKSB7XG4gICAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXBvc2VyL2RvY3MvaG93LXRvL21hbmFnaW5nL2Vudmlyb25tZW50LXZhcmlhYmxlcyNyZXNlcnZlZF92YXJpYWJsZXNcbiAgICByZXR1cm4ge1xuICAgICAgJ2Nsb3VkLnByb3ZpZGVyJzogJ2djcCcsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5BTElZVU5fUkVHSU9OX0lEKSB7XG4gICAgLy8gVE9ETzogZmluZCB3aGVyZSBJIGZvdW5kIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyAtIGF0IGxlYXN0IGdjLmdpdGh1Yi5jb20gcmV0dXJucyBzb21ldGhpbmdcbiAgICByZXR1cm4ge1xuICAgICAgJ2Nsb3VkLnByb3ZpZGVyJzogJ2FsaWJhYmFfY2xvdWQnLFxuICAgICAgJ2Nsb3VkLnJlZ2lvbic6IHByb2Nlc3MuZW52LkFMSVlVTl9SRUdJT05fSUQsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5XRUJTSVRFX1NJVEVfTkFNRSAmJiBwcm9jZXNzLmVudi5SRUdJT05fTkFNRSkge1xuICAgIC8vIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hcHAtc2VydmljZS9yZWZlcmVuY2UtYXBwLXNldHRpbmdzP3RhYnM9a3VkdSUyQ2RvdG5ldCNhcHAtZW52aXJvbm1lbnRcbiAgICByZXR1cm4ge1xuICAgICAgJ2Nsb3VkLnByb3ZpZGVyJzogJ2F6dXJlJyxcbiAgICAgICdjbG91ZC5yZWdpb24nOiBwcm9jZXNzLmVudi5SRUdJT05fTkFNRSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LklCTV9DTE9VRF9SRUdJT04pIHtcbiAgICAvLyBUT0RPOiBmaW5kIHdoZXJlIEkgZm91bmQgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIC0gYXQgbGVhc3QgZ2MuZ2l0aHViLmNvbSByZXR1cm5zIHNvbWV0aGluZ1xuICAgIHJldHVybiB7XG4gICAgICAnY2xvdWQucHJvdmlkZXInOiAnaWJtX2Nsb3VkJyxcbiAgICAgICdjbG91ZC5yZWdpb24nOiBwcm9jZXNzLmVudi5JQk1fQ0xPVURfUkVHSU9OLFxuICAgIH07XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuVEVOQ0VOVENMT1VEX1JFR0lPTikge1xuICAgIC8vIGh0dHBzOi8vd3d3LnRlbmNlbnRjbG91ZC5jb20vZG9jdW1lbnQvcHJvZHVjdC81ODMvMzI3NDhcbiAgICByZXR1cm4ge1xuICAgICAgJ2Nsb3VkLnByb3ZpZGVyJzogJ3RlbmNlbnRfY2xvdWQnLFxuICAgICAgJ2Nsb3VkLnJlZ2lvbic6IHByb2Nlc3MuZW52LlRFTkNFTlRDTE9VRF9SRUdJT04sXG4gICAgICAnY2xvdWQuYWNjb3VudC5pZCc6IHByb2Nlc3MuZW52LlRFTkNFTlRDTE9VRF9BUFBJRCxcbiAgICAgICdjbG91ZC5hdmFpbGFiaWxpdHlfem9uZSc6IHByb2Nlc3MuZW52LlRFTkNFTlRDTE9VRF9aT05FLFxuICAgIH07XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTkVUTElGWSkge1xuICAgIC8vIGh0dHBzOi8vZG9jcy5uZXRsaWZ5LmNvbS9jb25maWd1cmUtYnVpbGRzL2Vudmlyb25tZW50LXZhcmlhYmxlcy8jcmVhZC1vbmx5LXZhcmlhYmxlc1xuICAgIHJldHVybiB7XG4gICAgICAnY2xvdWQucHJvdmlkZXInOiAnbmV0bGlmeScsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5GTFlfUkVHSU9OKSB7XG4gICAgLy8gaHR0cHM6Ly9mbHkuaW8vZG9jcy9yZWZlcmVuY2UvcnVudGltZS1lbnZpcm9ubWVudC9cbiAgICByZXR1cm4ge1xuICAgICAgJ2Nsb3VkLnByb3ZpZGVyJzogJ2ZseS5pbycsXG4gICAgICAnY2xvdWQucmVnaW9uJzogcHJvY2Vzcy5lbnYuRkxZX1JFR0lPTixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LkRZTk8pIHtcbiAgICAvLyBodHRwczovL2RldmNlbnRlci5oZXJva3UuY29tL2FydGljbGVzL2R5bm9zI2xvY2FsLWVudmlyb25tZW50LXZhcmlhYmxlc1xuICAgIHJldHVybiB7XG4gICAgICAnY2xvdWQucHJvdmlkZXInOiAnaGVyb2t1JyxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0cy5Db250ZXh0ID0gQ29udGV4dDtcbmV4cG9ydHMuZ2V0RGV2aWNlQ29udGV4dCA9IGdldERldmljZUNvbnRleHQ7XG5leHBvcnRzLm5vZGVDb250ZXh0SW50ZWdyYXRpb24gPSBub2RlQ29udGV4dEludGVncmF0aW9uO1xuZXhwb3J0cy5yZWFkRGlyQXN5bmMgPSByZWFkRGlyQXN5bmM7XG5leHBvcnRzLnJlYWRGaWxlQXN5bmMgPSByZWFkRmlsZUFzeW5jO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBGSUxFX0NPTlRFTlRfQ0FDSEUgPSBuZXcgdXRpbHMuTFJVTWFwKDEwMCk7XG5jb25zdCBERUZBVUxUX0xJTkVTX09GX0NPTlRFWFQgPSA3O1xuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdDb250ZXh0TGluZXMnO1xuXG4vLyBUT0RPOiBSZXBsYWNlIHdpdGggcHJvbWlzaWZ5IHdoZW4gbWluaW11bSBzdXBwb3J0ZWQgbm9kZSA+PSB2OFxuZnVuY3Rpb24gcmVhZFRleHRGaWxlQXN5bmMocGF0aCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWRGaWxlKHBhdGgsICd1dGY4JywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICBlbHNlIHJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBfY29udGV4dExpbmVzSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBjb250ZXh0TGluZXMgPSBvcHRpb25zLmZyYW1lQ29udGV4dExpbmVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmZyYW1lQ29udGV4dExpbmVzIDogREVGQVVMVF9MSU5FU19PRl9DT05URVhUO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByb2Nlc3NFdmVudChldmVudCkge1xuICAgICAgcmV0dXJuIGFkZFNvdXJjZUNvbnRleHQoZXZlbnQsIGNvbnRleHRMaW5lcyk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgY29udGV4dExpbmVzSW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9jb250ZXh0TGluZXNJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogQWRkIG5vZGUgbW9kdWxlcyAvIHBhY2thZ2VzIHRvIHRoZSBldmVudC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udGV4dExpbmVzSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBDb250ZXh0TGluZXMgPSBjb3JlLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhJTlRFR1JBVElPTl9OQU1FLCBjb250ZXh0TGluZXNJbnRlZ3JhdGlvbilcblxuO1xuXG5hc3luYyBmdW5jdGlvbiBhZGRTb3VyY2VDb250ZXh0KGV2ZW50LCBjb250ZXh0TGluZXMpIHtcbiAgLy8ga2VlcCBhIGxvb2t1cCBtYXAgb2Ygd2hpY2ggZmlsZXMgd2UndmUgYWxyZWFkeSBlbnF1ZXVlZCB0byByZWFkLFxuICAvLyBzbyB3ZSBkb24ndCBlbnF1ZXVlIHRoZSBzYW1lIGZpbGUgbXVsdGlwbGUgdGltZXMgd2hpY2ggd291bGQgY2F1c2UgbXVsdGlwbGUgaS9vIHJlYWRzXG4gIGNvbnN0IGVucXVldWVkUmVhZFNvdXJjZUZpbGVUYXNrcyA9IHt9O1xuICBjb25zdCByZWFkU291cmNlRmlsZVRhc2tzID0gW107XG5cbiAgaWYgKGNvbnRleHRMaW5lcyA+IDAgJiYgX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzIgPT4gXzIuZXhjZXB0aW9uLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMyA9PiBfMy52YWx1ZXNdKSkge1xuICAgIGZvciAoY29uc3QgZXhjZXB0aW9uIG9mIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgIGlmICghX29wdGlvbmFsQ2hhaW4oW2V4Y2VwdGlvbiwgJ2FjY2VzcycsIF80ID0+IF80LnN0YWNrdHJhY2UsICdvcHRpb25hbEFjY2VzcycsIF81ID0+IF81LmZyYW1lc10pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSB3YW50IHRvIGl0ZXJhdGUgaW4gcmV2ZXJzZSBvcmRlciBhcyBjYWxsaW5nIGNhY2hlLmdldCB3aWxsIGJ1bXAgdGhlIGZpbGUgaW4gb3VyIExSVSBjYWNoZS5cbiAgICAgIC8vIFRoaXMgZW5kcyB1cCBwcmlvcml0aXplcyBzb3VyY2UgY29udGV4dCBmb3IgZnJhbWVzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGluc3RlYWQgb2YgdGhlIGJvdHRvbS5cbiAgICAgIGZvciAobGV0IGkgPSBleGNlcHRpb24uc3RhY2t0cmFjZS5mcmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBleGNlcHRpb24uc3RhY2t0cmFjZS5mcmFtZXNbaV07XG4gICAgICAgIC8vIENhbGwgY2FjaGUuZ2V0IHRvIGJ1bXAgdGhlIGZpbGUgdG8gdGhlIHRvcCBvZiB0aGUgY2FjaGUgYW5kIGVuc3VyZSB3ZSBoYXZlIG5vdCBhbHJlYWR5XG4gICAgICAgIC8vIGVucXVldWVkIGEgcmVhZCBvcGVyYXRpb24gZm9yIHRoaXMgZmlsZW5hbWVcbiAgICAgICAgaWYgKGZyYW1lLmZpbGVuYW1lICYmICFlbnF1ZXVlZFJlYWRTb3VyY2VGaWxlVGFza3NbZnJhbWUuZmlsZW5hbWVdICYmICFGSUxFX0NPTlRFTlRfQ0FDSEUuZ2V0KGZyYW1lLmZpbGVuYW1lKSkge1xuICAgICAgICAgIHJlYWRTb3VyY2VGaWxlVGFza3MucHVzaChfcmVhZFNvdXJjZUZpbGUoZnJhbWUuZmlsZW5hbWUpKTtcbiAgICAgICAgICBlbnF1ZXVlZFJlYWRTb3VyY2VGaWxlVGFza3NbZnJhbWUuZmlsZW5hbWVdID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIGlmIGZpbGVzIHRvIHJlYWQgPiAwLCBpZiBzbywgYXdhaXQgYWxsIG9mIHRoZW0gdG8gYmUgcmVhZCBiZWZvcmUgYWRkaW5nIHNvdXJjZSBjb250ZXh0cy5cbiAgLy8gTm9ybWFsbHksIFByb21pc2UuYWxsIGhlcmUgY291bGQgYmUgc2hvcnQgY2lyY3VpdGVkIGlmIG9uZSBvZiB0aGUgcHJvbWlzZXMgcmVqZWN0cywgYnV0IHdlXG4gIC8vIGFyZSBndWFyZGluZyBmcm9tIHRoYXQgYnkgd3JhcHBpbmcgdGhlIGkvbyByZWFkIG9wZXJhdGlvbiBpbiBhIHRyeS9jYXRjaC5cbiAgaWYgKHJlYWRTb3VyY2VGaWxlVGFza3MubGVuZ3RoID4gMCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHJlYWRTb3VyY2VGaWxlVGFza3MpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlLCBidXQgdGhpcyB0aW1lIHdlIGNhbiBhc3N1bWUgYWxsIGZpbGVzIGFyZSBpbiB0aGUgY2FjaGVcbiAgLy8gYW5kIGF0dGVtcHQgdG8gYWRkIHNvdXJjZSBjb250ZXh0IHRvIGZyYW1lcy5cbiAgaWYgKGNvbnRleHRMaW5lcyA+IDAgJiYgX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzYgPT4gXzYuZXhjZXB0aW9uLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNyA9PiBfNy52YWx1ZXNdKSkge1xuICAgIGZvciAoY29uc3QgZXhjZXB0aW9uIG9mIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgIGlmIChleGNlcHRpb24uc3RhY2t0cmFjZSAmJiBleGNlcHRpb24uc3RhY2t0cmFjZS5mcmFtZXMpIHtcbiAgICAgICAgYXdhaXQgYWRkU291cmNlQ29udGV4dFRvRnJhbWVzKGV4Y2VwdGlvbi5zdGFja3RyYWNlLmZyYW1lcywgY29udGV4dExpbmVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKiBBZGRzIGNvbnRleHQgbGluZXMgdG8gZnJhbWVzICovXG5mdW5jdGlvbiBhZGRTb3VyY2VDb250ZXh0VG9GcmFtZXMoZnJhbWVzLCBjb250ZXh0TGluZXMpIHtcbiAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMpIHtcbiAgICAvLyBPbmx5IGFkZCBjb250ZXh0IGlmIHdlIGhhdmUgYSBmaWxlbmFtZSBhbmQgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBhZGRlZFxuICAgIGlmIChmcmFtZS5maWxlbmFtZSAmJiBmcmFtZS5jb250ZXh0X2xpbmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc291cmNlRmlsZUxpbmVzID0gRklMRV9DT05URU5UX0NBQ0hFLmdldChmcmFtZS5maWxlbmFtZSk7XG5cbiAgICAgIGlmIChzb3VyY2VGaWxlTGluZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1dGlscy5hZGRDb250ZXh0VG9GcmFtZShzb3VyY2VGaWxlTGluZXMsIGZyYW1lLCBjb250ZXh0TGluZXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gYW5vbWFseSwgYmVpbmcgZGVmZW5zaXZlIGluIGNhc2VcbiAgICAgICAgICAvLyB1bmxpa2VseSB0byBldmVyIGhhcHBlbiBpbiBwcmFjdGljZSBidXQgY2FuIGRlZmluaXRlbHkgaGFwcGVuIGluIHRoZW9yeVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4vKipcbiAqIFJlYWRzIGZpbGUgY29udGVudHMgYW5kIGNhY2hlcyB0aGVtIGluIGEgZ2xvYmFsIExSVSBjYWNoZS5cbiAqIElmIHJlYWRpbmcgZmFpbHMsIG1hcmsgdGhlIGZpbGUgYXMgbnVsbCBpbiB0aGUgY2FjaGUgc28gd2UgZG9uJ3QgdHJ5IGFnYWluLlxuICpcbiAqIEBwYXJhbSBmaWxlbmFtZSBmaWxlcGF0aCB0byByZWFkIGNvbnRlbnQgZnJvbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX3JlYWRTb3VyY2VGaWxlKGZpbGVuYW1lKSB7XG4gIGNvbnN0IGNhY2hlZEZpbGUgPSBGSUxFX0NPTlRFTlRfQ0FDSEUuZ2V0KGZpbGVuYW1lKTtcblxuICAvLyBXZSBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJlYWQgdGhpcyBmaWxlIGFuZCBmYWlsZWQsIGRvIG5vdCB0cnkgYWdhaW5cbiAgaWYgKGNhY2hlZEZpbGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgYSBjYWNoZSBoaXQsIHJldHVybiBpdFxuICBpZiAoY2FjaGVkRmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZEZpbGU7XG4gIH1cblxuICAvLyBHdWFyZCBmcm9tIHRocm93aW5nIGlmIHJlYWRGaWxlIGZhaWxzLCB0aGlzIGVuYWJsZXMgdXMgdG8gdXNlIFByb21pc2UuYWxsIGFuZFxuICAvLyBub3QgaGF2ZSBpdCBzaG9ydCBjaXJjdWl0aW5nIGlmIG9uZSBvZiB0aGUgcHJvbWlzZXMgcmVqZWN0cyArIHNpbmNlIGNvbnRleHQgbGluZXMgYXJlIGFkZGVkXG4gIC8vIG9uIGEgYmVzdCBlZmZvcnQgYmFzaXMsIHdlIHdhbnQgdG8gdGhyb3cgaGVyZSBhbnl3YXlzLlxuXG4gIC8vIElmIHdlIG1hZGUgaXQgdG8gaGVyZSwgaXQgbWVhbnMgdGhhdCBvdXIgZmlsZSBpcyBub3QgY2FjaGUgbm9yIG1hcmtlZCBhcyBmYWlsZWQsIHNvIGF0dGVtcHQgdG8gcmVhZCBpdFxuICBsZXQgY29udGVudCA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3RmlsZUNvbnRlbnRzID0gYXdhaXQgcmVhZFRleHRGaWxlQXN5bmMoZmlsZW5hbWUpO1xuICAgIGNvbnRlbnQgPSByYXdGaWxlQ29udGVudHMuc3BsaXQoJ1xcbicpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgLy8gaWYgd2UgZmFpbCwgd2Ugd2lsbCBtYXJrIHRoZSBmaWxlIGFzIG51bGwgaW4gdGhlIGNhY2hlIGFuZCBzaG9ydCBjaXJjdWl0IG5leHQgdGltZSB3ZSB0cnkgdG8gcmVhZCBpdFxuICB9XG5cbiAgRklMRV9DT05URU5UX0NBQ0hFLnNldChmaWxlbmFtZSwgY29udGVudCk7XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5leHBvcnRzLkNvbnRleHRMaW5lcyA9IENvbnRleHRMaW5lcztcbmV4cG9ydHMuY29udGV4dExpbmVzSW50ZWdyYXRpb24gPSBjb250ZXh0TGluZXNJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHRsaW5lcy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBUaGlzIHNlcnZlcyBhcyBhIGJ1aWxkIHRpbWUgZmxhZyB0aGF0IHdpbGwgYmUgdHJ1ZSBieSBkZWZhdWx0LCBidXQgZmFsc2UgaW4gbm9uLWRlYnVnIGJ1aWxkcyBvciBpZiB1c2VycyByZXBsYWNlIGBfX1NFTlRSWV9ERUJVR19fYCBpbiB0aGVpciBnZW5lcmF0ZWQgY29kZS5cbiAqXG4gKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuXG4gKi9cbmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTtcblxuZXhwb3J0cy5ERUJVR19CVUlMRCA9IERFQlVHX0JVSUxEO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWctYnVpbGQuanMubWFwXG4iLAogICAgInZhciB7XG4gIF9vcHRpb25hbENoYWluXG59ID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IG5vZGVWZXJzaW9uID0gcmVxdWlyZSgnLi4vLi4vbm9kZVZlcnNpb24uanMnKTtcblxuLyoqXG4gKiBBc3NlbWJsZXMgYSBVUkwgdGhhdCdzIHBhc3NlZCB0byB0aGUgdXNlcnMgdG8gZmlsdGVyIG9uLlxuICogSXQgY2FuIGluY2x1ZGUgcmF3IChwb3RlbnRpYWxseSBQSUkgY29udGFpbmluZykgZGF0YSwgd2hpY2ggd2UnbGwgYWxsb3cgdXNlcnMgdG8gYWNjZXNzIHRvIGZpbHRlclxuICogYnV0IHdvbid0IGluY2x1ZGUgaW4gc3BhbnMgb3IgYnJlYWRjcnVtYnMuXG4gKlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIFJlcXVlc3RPcHRpb25zIG9iamVjdCBjb250YWluaW5nIHRoZSBjb21wb25lbnQgcGFydHMgZm9yIGEgVVJMXG4gKiBAcmV0dXJucyBGdWxseS1mb3JtZWQgVVJMXG4gKi9cbi8vIFRPRE8gKHY4KTogVGhpcyBmdW5jdGlvbiBzaG91bGQgaW5jbHVkZSBhdXRoLCBxdWVyeSBhbmQgZnJhZ21lbnQgKGl0J3MgYnJlYWtpbmcsIHNvIHdlIG5lZWQgdG8gd2FpdCBmb3IgdjgpXG5mdW5jdGlvbiBleHRyYWN0UmF3VXJsKHJlcXVlc3RPcHRpb25zKSB7XG4gIGNvbnN0IHsgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0IH0gPSBwYXJzZVJlcXVlc3RPcHRpb25zKHJlcXVlc3RPcHRpb25zKTtcbiAgY29uc3QgcGF0aCA9IHJlcXVlc3RPcHRpb25zLnBhdGggPyByZXF1ZXN0T3B0aW9ucy5wYXRoIDogJy8nO1xuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydH0ke3BhdGh9YDtcbn1cblxuLyoqXG4gKiBBc3NlbWJsZSBhIFVSTCB0byBiZSB1c2VkIGZvciBicmVhZGNydW1icyBhbmQgc3BhbnMuXG4gKlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIFJlcXVlc3RPcHRpb25zIG9iamVjdCBjb250YWluaW5nIHRoZSBjb21wb25lbnQgcGFydHMgZm9yIGEgVVJMXG4gKiBAcmV0dXJucyBGdWxseS1mb3JtZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RVcmwocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHBhcnNlUmVxdWVzdE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpO1xuXG4gIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy5wYXRobmFtZSB8fCAnLyc7XG5cbiAgLy8gYWx3YXlzIGZpbHRlciBhdXRob3JpdHksIHNlZSBodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvZGF0YS1oYW5kbGluZy8jc3RydWN0dXJpbmctZGF0YVxuICBjb25zdCBhdXRob3JpdHkgPSByZXF1ZXN0T3B0aW9ucy5hdXRoID8gcmVkYWN0QXV0aG9yaXR5KHJlcXVlc3RPcHRpb25zLmF1dGgpIDogJyc7XG5cbiAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHthdXRob3JpdHl9JHtob3N0bmFtZX0ke3BvcnR9JHtwYXRofWA7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdEF1dGhvcml0eShhdXRoKSB7XG4gIGNvbnN0IFt1c2VyLCBwYXNzd29yZF0gPSBhdXRoLnNwbGl0KCc6Jyk7XG4gIHJldHVybiBgJHt1c2VyID8gJ1tGaWx0ZXJlZF0nIDogJyd9OiR7cGFzc3dvcmQgPyAnW0ZpbHRlcmVkXScgOiAnJ31AYDtcbn1cblxuLyoqXG4gKiBIYW5kbGUgdmFyaW91cyBlZGdlIGNhc2VzIGluIHRoZSBzcGFuIGRlc2NyaXB0aW9uIChmb3Igc3BhbnMgcmVwcmVzZW50aW5nIGh0dHAocykgcmVxdWVzdHMpLlxuICpcbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiBjdXJyZW50IGBkZXNjcmlwdGlvbmAgcHJvcGVydHkgb2YgdGhlIHNwYW4gcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIFJlcXVlc3QgUmVxdWVzdCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBUaGUgY2xlYW5lZCBkZXNjcmlwdGlvblxuICovXG5mdW5jdGlvbiBjbGVhblNwYW5EZXNjcmlwdGlvbihcbiAgZGVzY3JpcHRpb24sXG4gIHJlcXVlc3RPcHRpb25zLFxuICByZXF1ZXN0LFxuKSB7XG4gIC8vIG5vdGhpbmcgdG8gY2xlYW5cbiAgaWYgKCFkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgbGV0IFttZXRob2QsIHJlcXVlc3RVcmxdID0gZGVzY3JpcHRpb24uc3BsaXQoJyAnKTtcblxuICAvLyBzdXBlcmFnZW50IHN0aWNrcyB0aGUgcHJvdG9jb2wgaW4gYSB3ZWlyZCBwbGFjZSAod2UgY2hlY2sgZm9yIGhvc3QgYmVjYXVzZSBpZiBib3RoIGhvc3QgKmFuZCogcHJvdG9jb2wgYXJlIG1pc3NpbmcsXG4gIC8vIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gaW50ZXJuYWwgcm91dGUgYW5kIHRoaXMgZG9lc24ndCBhcHBseSlcbiAgaWYgKHJlcXVlc3RPcHRpb25zLmhvc3QgJiYgIXJlcXVlc3RPcHRpb25zLnByb3RvY29sKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID0gX29wdGlvbmFsQ2hhaW4oWyhyZXF1ZXN0ICksICdvcHRpb25hbEFjY2VzcycsIF8gPT4gXy5hZ2VudCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucHJvdG9jb2xdKTsgLy8gd29yc3QgY29tZXMgdG8gd29yc3QsIHRoaXMgaXMgdW5kZWZpbmVkIGFuZCBub3RoaW5nIGNoYW5nZXNcbiAgICAvLyBUaGlzIFVSTCBjb250YWlucyB0aGUgZmlsdGVyZWQgYXV0aG9yaXR5IChbZmlsdGVyZWRdOltmaWx0ZXJlZF1AZXhhbXBsZS5jb20pIGJ1dCBubyBmcmFnbWVudCBvciBxdWVyeSBwYXJhbXNcbiAgICByZXF1ZXN0VXJsID0gZXh0cmFjdFVybChyZXF1ZXN0T3B0aW9ucyk7XG4gIH1cblxuICAvLyBpbnRlcm5hbCByb3V0ZXMgY2FuIGVuZCB1cCBzdGFydGluZyB3aXRoIGEgdHJpcGxlIHNsYXNoIHJhdGhlciB0aGFuIGEgc2luZ2xlIG9uZVxuICBpZiAoX29wdGlvbmFsQ2hhaW4oW3JlcXVlc3RVcmwsICdvcHRpb25hbEFjY2VzcycsIF8zID0+IF8zLnN0YXJ0c1dpdGgsICdjYWxsJywgXzQgPT4gXzQoJy8vLycpXSkpIHtcbiAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5zbGljZSgyKTtcbiAgfVxuXG4gIHJldHVybiBgJHttZXRob2R9ICR7cmVxdWVzdFVybH1gO1xufVxuXG4vLyB0aGUgbm9kZSB0eXBlcyBhcmUgbWlzc2luZyBhIGZldyBwcm9wZXJ0aWVzIHdoaWNoIG5vZGUncyBgdXJsVG9PcHRpb25zYCBmdW5jdGlvbiBzcGl0cyBvdXRcblxuLyoqXG4gKiBDb252ZXJ0IGEgVVJMIG9iamVjdCBpbnRvIGEgUmVxdWVzdE9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIENvcGllZCBmcm9tIE5vZGUncyBpbnRlcm5hbHMgKHdoZXJlIGl0J3MgdXNlZCBpbiBodHRwKHMpLnJlcXVlc3QoKSBhbmQgaHR0cChzKS5nZXQoKSksIG1vZGlmaWVkIG9ubHkgdG8gdXNlIHRoZVxuICogUmVxdWVzdE9wdGlvbnMgdHlwZSBhYm92ZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC91cmwuanMuXG4gKi9cbmZ1bmN0aW9uIHVybFRvT3B0aW9ucyh1cmwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBwcm90b2NvbDogdXJsLnByb3RvY29sLFxuICAgIGhvc3RuYW1lOlxuICAgICAgdHlwZW9mIHVybC5ob3N0bmFtZSA9PT0gJ3N0cmluZycgJiYgdXJsLmhvc3RuYW1lLnN0YXJ0c1dpdGgoJ1snKSA/IHVybC5ob3N0bmFtZS5zbGljZSgxLCAtMSkgOiB1cmwuaG9zdG5hbWUsXG4gICAgaGFzaDogdXJsLmhhc2gsXG4gICAgc2VhcmNoOiB1cmwuc2VhcmNoLFxuICAgIHBhdGhuYW1lOiB1cmwucGF0aG5hbWUsXG4gICAgcGF0aDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gLFxuICAgIGhyZWY6IHVybC5ocmVmLFxuICB9O1xuICBpZiAodXJsLnBvcnQgIT09ICcnKSB7XG4gICAgb3B0aW9ucy5wb3J0ID0gTnVtYmVyKHVybC5wb3J0KTtcbiAgfVxuICBpZiAodXJsLnVzZXJuYW1lIHx8IHVybC5wYXNzd29yZCkge1xuICAgIG9wdGlvbnMuYXV0aCA9IGAke3VybC51c2VybmFtZX06JHt1cmwucGFzc3dvcmR9YDtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgaW5wdXRzIHRvIGBodHRwKHMpLnJlcXVlc3QoKWAgYW5kIGBodHRwKHMpLmdldCgpYC5cbiAqXG4gKiBMZWdhbCBpbnB1dHMgdG8gYGh0dHAocykucmVxdWVzdCgpYCBhbmQgYGh0dHAocykuZ2V0KClgIGNhbiB0YWtlIG9uZSBvZiB0ZW4gZm9ybXM6XG4gKiAgICAgWyBSZXF1ZXN0T3B0aW9ucyB8IHN0cmluZyB8IFVSTCBdLFxuICogICAgIFsgUmVxdWVzdE9wdGlvbnMgfCBzdHJpbmcgfCBVUkwsIFJlcXVlc3RDYWxsYmFjayBdLFxuICogICAgIFsgc3RyaW5nIHwgVVJMLCBSZXF1ZXN0T3B0aW9ucyBdLCBhbmRcbiAqICAgICBbIHN0cmluZyB8IFVSTCwgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RDYWxsYmFjayBdLlxuICpcbiAqIFRoaXMgc3RhbmRhcmRpemVzIHRvIG9uZSBvZiB0d28gZm9ybXM6IFsgUmVxdWVzdE9wdGlvbnMgXSBhbmQgWyBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENhbGxiYWNrIF0uIEEgc2ltaWxhciB0aGluZyBpc1xuICogZG9uZSBhcyB0aGUgZmlyc3Qgc3RlcCBvZiBgaHR0cChzKS5yZXF1ZXN0KClgIGFuZCBgaHR0cChzKS5nZXQoKWA7IHRoaXMganVzdCBkb2VzIGl0IGVhcmx5IHNvIHRoYXQgd2UgY2FuIGludGVyYWN0XG4gKiB3aXRoIHRoZSBhcmdzIGluIGEgc3RhbmRhcmQgd2F5LlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0QXJncyBUaGUgaW5wdXRzIHRvIGBodHRwKHMpLnJlcXVlc3QoKWAgb3IgYGh0dHAocykuZ2V0KClgLCBhcyBhbiBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyBFcXVpdmFsZW50IGFyZ3Mgb2YgdGhlIGZvcm0gWyBSZXF1ZXN0T3B0aW9ucyBdIG9yIFsgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RDYWxsYmFjayBdLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZXF1ZXN0QXJncyhcbiAgaHR0cE1vZHVsZSxcbiAgcmVxdWVzdEFyZ3MsXG4pIHtcbiAgbGV0IGNhbGxiYWNrLCByZXF1ZXN0T3B0aW9ucztcblxuICAvLyBwb3Agb2ZmIHRoZSBjYWxsYmFjaywgaWYgdGhlcmUgaXMgb25lXG4gIGlmICh0eXBlb2YgcmVxdWVzdEFyZ3NbcmVxdWVzdEFyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHJlcXVlc3RBcmdzLnBvcCgpIDtcbiAgfVxuXG4gIC8vIGNyZWF0ZSBhIFJlcXVlc3RPcHRpb25zIG9iamVjdCBvZiB3aGF0ZXZlcidzIGF0IGluZGV4IDBcbiAgaWYgKHR5cGVvZiByZXF1ZXN0QXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXF1ZXN0T3B0aW9ucyA9IHVybFRvT3B0aW9ucyhuZXcgdXJsLlVSTChyZXF1ZXN0QXJnc1swXSkpO1xuICB9IGVsc2UgaWYgKHJlcXVlc3RBcmdzWzBdIGluc3RhbmNlb2YgdXJsLlVSTCkge1xuICAgIHJlcXVlc3RPcHRpb25zID0gdXJsVG9PcHRpb25zKHJlcXVlc3RBcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RBcmdzWzBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyB1cmwuVVJMKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXRoIHx8ICcnLFxuICAgICAgICBgJHtyZXF1ZXN0T3B0aW9ucy5wcm90b2NvbCB8fCAnaHR0cDonfS8vJHtyZXF1ZXN0T3B0aW9ucy5ob3N0bmFtZX1gLFxuICAgICAgKTtcbiAgICAgIHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBwYXRobmFtZTogcGFyc2VkLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IHBhcnNlZC5zZWFyY2gsXG4gICAgICAgIGhhc2g6IHBhcnNlZC5oYXNoLFxuICAgICAgICAuLi5yZXF1ZXN0T3B0aW9ucyxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIG9wdGlvbnMgd2VyZSBnaXZlbiBzZXBhcmF0ZWx5IGZyb20gdGhlIFVSTCwgZm9sZCB0aGVtIGluXG4gIGlmIChyZXF1ZXN0QXJncy5sZW5ndGggPT09IDIpIHtcbiAgICByZXF1ZXN0T3B0aW9ucyA9IHsgLi4ucmVxdWVzdE9wdGlvbnMsIC4uLnJlcXVlc3RBcmdzWzFdIH07XG4gIH1cblxuICAvLyBGaWd1cmUgb3V0IHRoZSBwcm90b2NvbCBpZiBpdCdzIGN1cnJlbnRseSBtaXNzaW5nXG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5wcm90b2NvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV29yc3QgY2FzZSB3ZSBlbmQgdXAgcG9wdWxhdGluZyBwcm90b2NvbCB3aXRoIHVuZGVmaW5lZCwgd2hpY2ggaXQgYWxyZWFkeSBpc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG4gICAgLy8gTk9URTogUHJpb3IgdG8gTm9kZSA5LCBgaHR0cHNgIHVzZWQgaW50ZXJuYWxzIG9mIGBodHRwYCBtb2R1bGUsIHRodXMgd2UgZG9uJ3QgcGF0Y2ggaXQuXG4gICAgLy8gQmVjYXVzZSBvZiB0aGF0LCB3ZSBjYW5ub3QgcmVseSBvbiBgaHR0cE1vZHVsZWAgdG8gcHJvdmlkZSB1cyB3aXRoIHZhbGlkIHByb3RvY29sLFxuICAgIC8vIGFzIGl0IHdpbGwgYWx3YXlzIHJldHVybiBgaHR0cGAsIGV2ZW4gd2hlbiB1c2luZyBgaHR0cHNgIG1vZHVsZS5cbiAgICAvL1xuICAgIC8vIFNlZSB0ZXN0L2ludGVncmF0aW9ucy9odHRwLnRlc3QudHMgZm9yIG1vcmUgZGV0YWlscyBvbiBOb2RlIDw9djggcHJvdG9jb2wgaXNzdWUuXG4gICAgaWYgKG5vZGVWZXJzaW9uLk5PREVfVkVSU0lPTi5tYWpvciA+IDgpIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID1cbiAgICAgICAgX29wdGlvbmFsQ2hhaW4oWyhfb3B0aW9uYWxDaGFpbihbaHR0cE1vZHVsZSwgJ29wdGlvbmFsQWNjZXNzJywgXzUgPT4gXzUuZ2xvYmFsQWdlbnRdKSApLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi5wcm90b2NvbF0pIHx8XG4gICAgICAgIF9vcHRpb25hbENoYWluKFsocmVxdWVzdE9wdGlvbnMuYWdlbnQgKSwgJ29wdGlvbmFsQWNjZXNzJywgXzcgPT4gXzcucHJvdG9jb2xdKSB8fFxuICAgICAgICBfb3B0aW9uYWxDaGFpbihbKHJlcXVlc3RPcHRpb25zLl9kZWZhdWx0QWdlbnQgKSwgJ29wdGlvbmFsQWNjZXNzJywgXzggPT4gXzgucHJvdG9jb2xdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wgPVxuICAgICAgICBfb3B0aW9uYWxDaGFpbihbKHJlcXVlc3RPcHRpb25zLmFnZW50ICksICdvcHRpb25hbEFjY2VzcycsIF85ID0+IF85LnByb3RvY29sXSkgfHxcbiAgICAgICAgX29wdGlvbmFsQ2hhaW4oWyhyZXF1ZXN0T3B0aW9ucy5fZGVmYXVsdEFnZW50ICksICdvcHRpb25hbEFjY2VzcycsIF8xMCA9PiBfMTAucHJvdG9jb2xdKSB8fFxuICAgICAgICBfb3B0aW9uYWxDaGFpbihbKF9vcHRpb25hbENoYWluKFtodHRwTW9kdWxlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTEgPT4gXzExLmdsb2JhbEFnZW50XSkgKSwgJ29wdGlvbmFsQWNjZXNzJywgXzEyID0+IF8xMi5wcm90b2NvbF0pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICB9XG5cbiAgLy8gcmV0dXJuIGFyZ3MgaW4gc3RhbmRhcmRpemVkIGZvcm1cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFtyZXF1ZXN0T3B0aW9ucywgY2FsbGJhY2tdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbcmVxdWVzdE9wdGlvbnNdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVxdWVzdE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpXG5cbiB7XG4gIGNvbnN0IHByb3RvY29sID0gcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wgfHwgJyc7XG4gIGNvbnN0IGhvc3RuYW1lID0gcmVxdWVzdE9wdGlvbnMuaG9zdG5hbWUgfHwgcmVxdWVzdE9wdGlvbnMuaG9zdCB8fCAnJztcbiAgLy8gRG9uJ3QgbG9nIHN0YW5kYXJkIDo4MCAoaHR0cCkgYW5kIDo0NDMgKGh0dHBzKSBwb3J0cyB0byByZWR1Y2UgdGhlIG5vaXNlXG4gIC8vIEFsc28gZG9uJ3QgYWRkIHBvcnQgaWYgdGhlIGhvc3RuYW1lIGFscmVhZHkgaW5jbHVkZXMgYSBwb3J0XG4gIGNvbnN0IHBvcnQgPVxuICAgICFyZXF1ZXN0T3B0aW9ucy5wb3J0IHx8IHJlcXVlc3RPcHRpb25zLnBvcnQgPT09IDgwIHx8IHJlcXVlc3RPcHRpb25zLnBvcnQgPT09IDQ0MyB8fCAvXiguKik6KFxcZCspJC8udGVzdChob3N0bmFtZSlcbiAgICAgID8gJydcbiAgICAgIDogYDoke3JlcXVlc3RPcHRpb25zLnBvcnR9YDtcblxuICByZXR1cm4geyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfTtcbn1cblxuZXhwb3J0cy5jbGVhblNwYW5EZXNjcmlwdGlvbiA9IGNsZWFuU3BhbkRlc2NyaXB0aW9uO1xuZXhwb3J0cy5leHRyYWN0UmF3VXJsID0gZXh0cmFjdFJhd1VybDtcbmV4cG9ydHMuZXh0cmFjdFVybCA9IGV4dHJhY3RVcmw7XG5leHBvcnRzLm5vcm1hbGl6ZVJlcXVlc3RBcmdzID0gbm9ybWFsaXplUmVxdWVzdEFyZ3M7XG5leHBvcnRzLnVybFRvT3B0aW9ucyA9IHVybFRvT3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHAuanMubWFwXG4iLAogICAgInZhciB7XG4gIF9vcHRpb25hbENoYWluXG59ID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi9kZWJ1Zy1idWlsZC5qcycpO1xuY29uc3Qgbm9kZVZlcnNpb24gPSByZXF1aXJlKCcuLi9ub2RlVmVyc2lvbi5qcycpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJy4vdXRpbHMvaHR0cC5qcycpO1xuXG5jb25zdCBfaHR0cEludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBicmVhZGNydW1icywgdHJhY2luZywgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgY29udmVydGVkT3B0aW9ucyA9IHtcbiAgICBicmVhZGNydW1icyxcbiAgICB0cmFjaW5nOlxuICAgICAgdHJhY2luZyA9PT0gZmFsc2VcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgICAgICAgIC8vIElmIHRyYWNpbmcgaXMgZm9yY2VkIHRvIGB0cnVlYCwgd2UgZG9uJ3Qgd2FudCB0byBzZXQgYGVuYWJsZUlmSGFzVHJhY2luZ0VuYWJsZWRgXG4gICAgICAgICAgICBlbmFibGVJZkhhc1RyYWNpbmdFbmFibGVkOiB0cmFjaW5nID09PSB0cnVlID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICAgICAgICAgIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0LFxuICAgICAgICAgIH0pLFxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICByZXR1cm4gbmV3IEh0dHAoY29udmVydGVkT3B0aW9ucykgO1xufSkgO1xuXG4vKipcbiAqIFRoZSBodHRwIG1vZHVsZSBpbnRlZ3JhdGlvbiBpbnN0cnVtZW50cyBOb2RlJ3MgaW50ZXJuYWwgaHR0cCBtb2R1bGUuIEl0IGNyZWF0ZXMgYnJlYWRjcnVtYnMsIHNwYW5zIGZvciBvdXRnb2luZ1xuICogaHR0cCByZXF1ZXN0cywgYW5kIGF0dGFjaGVzIHRyYWNlIGRhdGEgd2hlbiB0cmFjaW5nIGlzIGVuYWJsZWQgdmlhIGl0cyBgdHJhY2luZ2Agb3B0aW9uLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBhbHdheXMgY3JlYXRlIGJyZWFkY3J1bWJzLCBhbmQgd2lsbCBjcmVhdGUgc3BhbnMgaWYgdHJhY2luZyBpcyBlbmFibGVkLlxuICovXG5jb25zdCBodHRwSW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9odHRwSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIFRoZSBodHRwIG1vZHVsZSBpbnRlZ3JhdGlvbiBpbnN0cnVtZW50cyBOb2RlJ3MgaW50ZXJuYWwgaHR0cCBtb2R1bGUuIEl0IGNyZWF0ZXMgYnJlYWRjcnVtYnMsIHRyYW5zYWN0aW9ucyBmb3Igb3V0Z29pbmdcbiAqIGh0dHAgcmVxdWVzdHMgYW5kIGF0dGFjaGVzIHRyYWNlIGRhdGEgd2hlbiB0cmFjaW5nIGlzIGVuYWJsZWQgdmlhIGl0cyBgdHJhY2luZ2Agb3B0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgaHR0cEludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbmNsYXNzIEh0dHAgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ0h0dHAnO31cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgX19pbml0KCkge3RoaXMubmFtZSA9IEh0dHAuaWQ7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge0h0dHAucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gdHlwZW9mIG9wdGlvbnMuYnJlYWRjcnVtYnMgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuYnJlYWRjcnVtYnM7XG4gICAgdGhpcy5fdHJhY2luZyA9ICFvcHRpb25zLnRyYWNpbmcgPyB1bmRlZmluZWQgOiBvcHRpb25zLnRyYWNpbmcgPT09IHRydWUgPyB7fSA6IG9wdGlvbnMudHJhY2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIHNldHVwT25jZShcbiAgICBfYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgc2V0dXBPbmNlR2V0Q3VycmVudEh1YixcbiAgKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IF9vcHRpb25hbENoYWluKFtzZXR1cE9uY2VHZXRDdXJyZW50SHViLCAnY2FsbCcsIF8gPT4gXygpLCAnYWNjZXNzJywgXzIgPT4gXzIuZ2V0Q2xpZW50LCAnY2FsbCcsIF8zID0+IF8zKCksICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80LmdldE9wdGlvbnMsICdjYWxsJywgXzUgPT4gXzUoKV0pO1xuXG4gICAgLy8gSWYgYHRyYWNpbmdgIGlzIG5vdCBleHBsaWNpdGx5IHNldCwgd2UgZGVmYXVsdCB0aGlzIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRyYWNpbmcgaXMgZW5hYmxlZC5cbiAgICAvLyBCdXQgZm9yIGNvbXBhdGliaWxpdHksIHdlIG9ubHkgZG8gdGhhdCBpZiBgZW5hYmxlSWZIYXNUcmFjaW5nRW5hYmxlZGAgaXMgc2V0LlxuICAgIGNvbnN0IHNob3VsZENyZWF0ZVNwYW5zID0gX3Nob3VsZENyZWF0ZVNwYW5zKHRoaXMuX3RyYWNpbmcsIGNsaWVudE9wdGlvbnMpO1xuXG4gICAgLy8gTm8gbmVlZCB0byBpbnN0cnVtZW50IGlmIHdlIGRvbid0IHdhbnQgdG8gdHJhY2sgYW55dGhpbmdcbiAgICBpZiAoIXRoaXMuX2JyZWFkY3J1bWJzICYmICFzaG91bGRDcmVhdGVTcGFucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBhdXRvLWluc3RydW1lbnQgZm9yIG90aGVyIGluc3RydW1lbnRlclxuICAgIGlmIChjbGllbnRPcHRpb25zICYmIGNsaWVudE9wdGlvbnMuaW5zdHJ1bWVudGVyICE9PSAnc2VudHJ5Jykge1xuICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKCdIVFRQIEludGVncmF0aW9uIGlzIHNraXBwZWQgYmVjYXVzZSBvZiBpbnN0cnVtZW50ZXIgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCA9IF9nZXRTaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdChzaG91bGRDcmVhdGVTcGFucywgdGhpcy5fdHJhY2luZywgY2xpZW50T3B0aW9ucyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9IF9vcHRpb25hbENoYWluKFtjbGllbnRPcHRpb25zLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0c10pIHx8IF9vcHRpb25hbENoYWluKFt0aGlzLCAnYWNjZXNzJywgXzcgPT4gXzcuX3RyYWNpbmcsICdvcHRpb25hbEFjY2VzcycsIF84ID0+IF84LnRyYWNlUHJvcGFnYXRpb25UYXJnZXRzXSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IGh0dHBNb2R1bGUgPSByZXF1aXJlKCdodHRwJyk7XG4gICAgY29uc3Qgd3JhcHBlZEh0dHBIYW5kbGVyTWFrZXIgPSBfY3JlYXRlV3JhcHBlZFJlcXVlc3RNZXRob2RGYWN0b3J5KFxuICAgICAgaHR0cE1vZHVsZSxcbiAgICAgIHRoaXMuX2JyZWFkY3J1bWJzLFxuICAgICAgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QsXG4gICAgICB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyxcbiAgICApO1xuICAgIHV0aWxzLmZpbGwoaHR0cE1vZHVsZSwgJ2dldCcsIHdyYXBwZWRIdHRwSGFuZGxlck1ha2VyKTtcbiAgICB1dGlscy5maWxsKGh0dHBNb2R1bGUsICdyZXF1ZXN0Jywgd3JhcHBlZEh0dHBIYW5kbGVyTWFrZXIpO1xuXG4gICAgLy8gTk9URTogUHJpb3IgdG8gTm9kZSA5LCBgaHR0cHNgIHVzZWQgaW50ZXJuYWxzIG9mIGBodHRwYCBtb2R1bGUsIHRodXMgd2UgZG9uJ3QgcGF0Y2ggaXQuXG4gICAgLy8gSWYgd2UgZG8sIHdlJ2QgZ2V0IGRvdWJsZSBicmVhZGNydW1icyBhbmQgZG91YmxlIHNwYW5zIGZvciBgaHR0cHNgIGNhbGxzLlxuICAgIC8vIEl0IGhhcyBiZWVuIGNoYW5nZWQgaW4gTm9kZSA5LCBzbyBmb3IgYWxsIHZlcnNpb25zIGVxdWFsIGFuZCBhYm92ZSwgd2UgcGF0Y2ggYGh0dHBzYCBzZXBhcmF0ZWx5LlxuICAgIGlmIChub2RlVmVyc2lvbi5OT0RFX1ZFUlNJT04ubWFqb3IgPiA4KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgY29uc3QgaHR0cHNNb2R1bGUgPSByZXF1aXJlKCdodHRwcycpO1xuICAgICAgY29uc3Qgd3JhcHBlZEh0dHBzSGFuZGxlck1ha2VyID0gX2NyZWF0ZVdyYXBwZWRSZXF1ZXN0TWV0aG9kRmFjdG9yeShcbiAgICAgICAgaHR0cHNNb2R1bGUsXG4gICAgICAgIHRoaXMuX2JyZWFkY3J1bWJzLFxuICAgICAgICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgICAgICAgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMsXG4gICAgICApO1xuICAgICAgdXRpbHMuZmlsbChodHRwc01vZHVsZSwgJ2dldCcsIHdyYXBwZWRIdHRwc0hhbmRsZXJNYWtlcik7XG4gICAgICB1dGlscy5maWxsKGh0dHBzTW9kdWxlLCAncmVxdWVzdCcsIHdyYXBwZWRIdHRwc0hhbmRsZXJNYWtlcik7XG4gICAgfVxuICB9XG59SHR0cC5fX2luaXRTdGF0aWMoKTtcblxuLy8gZm9yIGVhc2Ugb2YgcmVhZGluZyBiZWxvd1xuXG4vKipcbiAqIEZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIHdyYXBwZWQgdmVyc2lvbnMgb2YgaW50ZXJuYWwgYHJlcXVlc3RgIGFuZCBgZ2V0YCBjYWxscyB3aXRoaW4gYGh0dHBgXG4gKiBhbmQgYGh0dHBzYCBtb2R1bGVzLiAoTkI6IE5vdCBhIHR5cG8gLSB0aGlzIGlzIGEgY3JlYXRvcl4yISlcbiAqXG4gKiBAcGFyYW0gYnJlYWRjcnVtYnNFbmFibGVkIFdoZXRoZXIgb3Igbm90IHRvIHJlY29yZCBvdXRnb2luZyByZXF1ZXN0cyBhcyBicmVhZGNydW1ic1xuICogQHBhcmFtIHRyYWNpbmdFbmFibGVkIFdoZXRoZXIgb3Igbm90IHRvIHJlY29yZCBvdXRnb2luZyByZXF1ZXN0cyBhcyB0cmFjaW5nIHNwYW5zXG4gKlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSBleGl0aW5nIGhhbmRsZXIgYW5kIHJldHVybnMgYSB3cmFwcGVkIGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gX2NyZWF0ZVdyYXBwZWRSZXF1ZXN0TWV0aG9kRmFjdG9yeShcbiAgaHR0cE1vZHVsZSxcbiAgYnJlYWRjcnVtYnNFbmFibGVkLFxuICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMsXG4pIHtcbiAgLy8gV2UncmUgY2FjaGluZyByZXN1bHRzIHNvIHdlIGRvbid0IGhhdmUgdG8gcmVjb21wdXRlIHJlZ2V4cCBldmVyeSB0aW1lIHdlIGNyZWF0ZSBhIHJlcXVlc3QuXG4gIGNvbnN0IGNyZWF0ZVNwYW5VcmxNYXAgPSBuZXcgdXRpbHMuTFJVTWFwKDEwMCk7XG4gIGNvbnN0IGhlYWRlcnNVcmxNYXAgPSBuZXcgdXRpbHMuTFJVTWFwKDEwMCk7XG5cbiAgY29uc3Qgc2hvdWxkQ3JlYXRlU3BhbiA9ICh1cmwpID0+IHtcbiAgICBpZiAoc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVkRGVjaXNpb24gPSBjcmVhdGVTcGFuVXJsTWFwLmdldCh1cmwpO1xuICAgIGlmIChjYWNoZWREZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRGVjaXNpb247XG4gICAgfVxuXG4gICAgY29uc3QgZGVjaXNpb24gPSBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCh1cmwpO1xuICAgIGNyZWF0ZVNwYW5VcmxNYXAuc2V0KHVybCwgZGVjaXNpb24pO1xuICAgIHJldHVybiBkZWNpc2lvbjtcbiAgfTtcblxuICBjb25zdCBzaG91bGRBdHRhY2hUcmFjZURhdGEgPSAodXJsKSA9PiB7XG4gICAgaWYgKHRyYWNlUHJvcGFnYXRpb25UYXJnZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlZERlY2lzaW9uID0gaGVhZGVyc1VybE1hcC5nZXQodXJsKTtcbiAgICBpZiAoY2FjaGVkRGVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZERlY2lzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2lzaW9uID0gdXRpbHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKHVybCwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMpO1xuICAgIGhlYWRlcnNVcmxNYXAuc2V0KHVybCwgZGVjaXNpb24pO1xuICAgIHJldHVybiBkZWNpc2lvbjtcbiAgfTtcblxuICAvKipcbiAgICogQ2FwdHVyZXMgQnJlYWRjcnVtYiBiYXNlZCBvbiBwcm92aWRlZCByZXF1ZXN0L3Jlc3BvbnNlIHBhaXJcbiAgICovXG4gIGZ1bmN0aW9uIGFkZFJlcXVlc3RCcmVhZGNydW1iKFxuICAgIGV2ZW50LFxuICAgIHJlcXVlc3RTcGFuRGF0YSxcbiAgICByZXEsXG4gICAgcmVzLFxuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBpZiAoIWNvcmUuZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKEh0dHApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS5hZGRCcmVhZGNydW1iKFxuICAgICAge1xuICAgICAgICBjYXRlZ29yeTogJ2h0dHAnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc3RhdHVzX2NvZGU6IHJlcyAmJiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAuLi5yZXF1ZXN0U3BhbkRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICByZXF1ZXN0OiByZXEsXG4gICAgICAgIHJlc3BvbnNlOiByZXMsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZFJlcXVlc3RNZXRob2RGYWN0b3J5KG9yaWdpbmFsUmVxdWVzdE1ldGhvZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVkTWV0aG9kKCAuLi5hcmdzKSB7XG4gICAgICBjb25zdCByZXF1ZXN0QXJncyA9IGh0dHAubm9ybWFsaXplUmVxdWVzdEFyZ3MoaHR0cE1vZHVsZSwgYXJncyk7XG4gICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RBcmdzWzBdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCByYXdSZXF1ZXN0VXJsID0gaHR0cC5leHRyYWN0UmF3VXJsKHJlcXVlc3RPcHRpb25zKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBodHRwLmV4dHJhY3RVcmwocmVxdWVzdE9wdGlvbnMpO1xuICAgICAgY29uc3QgY2xpZW50ID0gY29yZS5nZXRDbGllbnQoKTtcblxuICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgcmVxdWVzdHMgdG8gU2VudHJ5IGFzIGVpdGhlciBicmVhZGNydW1icyBvciBzcGFucywgc28ganVzdCB1c2UgdGhlIG9yaWdpbmFsIG1ldGhvZFxuICAgICAgaWYgKGNvcmUuaXNTZW50cnlSZXF1ZXN0VXJsKHJlcXVlc3RVcmwsIGNsaWVudCkpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVxdWVzdE1ldGhvZC5hcHBseShodHRwTW9kdWxlLCByZXF1ZXN0QXJncyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gY29yZS5nZXRDdXJyZW50U2NvcGUoKTtcbiAgICAgIGNvbnN0IGlzb2xhdGlvblNjb3BlID0gY29yZS5nZXRJc29sYXRpb25TY29wZSgpO1xuICAgICAgY29uc3QgcGFyZW50U3BhbiA9IGNvcmUuZ2V0QWN0aXZlU3BhbigpO1xuXG4gICAgICBjb25zdCBkYXRhID0gZ2V0UmVxdWVzdFNwYW5EYXRhKHJlcXVlc3RVcmwsIHJlcXVlc3RPcHRpb25zKTtcblxuICAgICAgY29uc3QgcmVxdWVzdFNwYW4gPSBzaG91bGRDcmVhdGVTcGFuKHJhd1JlcXVlc3RVcmwpXG4gICAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3BhcmVudFNwYW4sICdvcHRpb25hbEFjY2VzcycsIF85ID0+IF85LnN0YXJ0Q2hpbGQsICdjYWxsJywgXzEwID0+IF8xMCh7XG4gICAgICAgICAgICBvcDogJ2h0dHAuY2xpZW50JyxcbiAgICAgICAgICAgIG9yaWdpbjogJ2F1dG8uaHR0cC5ub2RlLmh0dHAnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2RhdGFbJ2h0dHAubWV0aG9kJ119ICR7ZGF0YS51cmx9YCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgfSldKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGNsaWVudCAmJiBzaG91bGRBdHRhY2hUcmFjZURhdGEocmF3UmVxdWVzdFVybCkpIHtcbiAgICAgICAgY29uc3QgeyB0cmFjZUlkLCBzcGFuSWQsIHNhbXBsZWQsIGRzYyB9ID0ge1xuICAgICAgICAgIC4uLmlzb2xhdGlvblNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpLFxuICAgICAgICAgIC4uLnNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNlbnRyeVRyYWNlSGVhZGVyID0gcmVxdWVzdFNwYW5cbiAgICAgICAgICA/IGNvcmUuc3BhblRvVHJhY2VIZWFkZXIocmVxdWVzdFNwYW4pXG4gICAgICAgICAgOiB1dGlscy5nZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyKHRyYWNlSWQsIHNwYW5JZCwgc2FtcGxlZCk7XG5cbiAgICAgICAgY29uc3Qgc2VudHJ5QmFnZ2FnZUhlYWRlciA9IHV0aWxzLmR5bmFtaWNTYW1wbGluZ0NvbnRleHRUb1NlbnRyeUJhZ2dhZ2VIZWFkZXIoXG4gICAgICAgICAgZHNjIHx8XG4gICAgICAgICAgICAocmVxdWVzdFNwYW5cbiAgICAgICAgICAgICAgPyBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihyZXF1ZXN0U3BhbilcbiAgICAgICAgICAgICAgOiBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KHRyYWNlSWQsIGNsaWVudCwgc2NvcGUpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBhZGRIZWFkZXJzVG9SZXF1ZXN0T3B0aW9ucyhyZXF1ZXN0T3B0aW9ucywgcmVxdWVzdFVybCwgc2VudHJ5VHJhY2VIZWFkZXIsIHNlbnRyeUJhZ2dhZ2VIZWFkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgICAgICAgIHV0aWxzLmxvZ2dlci5sb2coXG4gICAgICAgICAgICBgW1RyYWNpbmddIE5vdCBhZGRpbmcgc2VudHJ5LXRyYWNlIGhlYWRlciB0byBvdXRnb2luZyByZXF1ZXN0ICgke3JlcXVlc3RVcmx9KSBkdWUgdG8gbWlzbWF0Y2hpbmcgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMgb3B0aW9uLmAsXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUmVxdWVzdE1ldGhvZFxuICAgICAgICAuYXBwbHkoaHR0cE1vZHVsZSwgcmVxdWVzdEFyZ3MpXG4gICAgICAgIC5vbmNlKCdyZXNwb25zZScsIGZ1bmN0aW9uICggcmVzKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgY29uc3QgcmVxID0gdGhpcztcbiAgICAgICAgICBpZiAoYnJlYWRjcnVtYnNFbmFibGVkKSB7XG4gICAgICAgICAgICBhZGRSZXF1ZXN0QnJlYWRjcnVtYigncmVzcG9uc2UnLCBkYXRhLCByZXEsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXF1ZXN0U3Bhbikge1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIGNvcmUuc2V0SHR0cFN0YXR1cyhyZXF1ZXN0U3BhbiwgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdFNwYW4udXBkYXRlTmFtZShcbiAgICAgICAgICAgICAgaHR0cC5jbGVhblNwYW5EZXNjcmlwdGlvbihjb3JlLnNwYW5Ub0pTT04ocmVxdWVzdFNwYW4pLmRlc2NyaXB0aW9uIHx8ICcnLCByZXF1ZXN0T3B0aW9ucywgcmVxKSB8fCAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXF1ZXN0U3Bhbi5lbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICBjb25zdCByZXEgPSB0aGlzO1xuXG4gICAgICAgICAgaWYgKGJyZWFkY3J1bWJzRW5hYmxlZCkge1xuICAgICAgICAgICAgYWRkUmVxdWVzdEJyZWFkY3J1bWIoJ2Vycm9yJywgZGF0YSwgcmVxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcXVlc3RTcGFuKSB7XG4gICAgICAgICAgICBjb3JlLnNldEh0dHBTdGF0dXMocmVxdWVzdFNwYW4sIDUwMCk7XG4gICAgICAgICAgICByZXF1ZXN0U3Bhbi51cGRhdGVOYW1lKFxuICAgICAgICAgICAgICBodHRwLmNsZWFuU3BhbkRlc2NyaXB0aW9uKGNvcmUuc3BhblRvSlNPTihyZXF1ZXN0U3BhbikuZGVzY3JpcHRpb24gfHwgJycsIHJlcXVlc3RPcHRpb25zLCByZXEpIHx8ICcnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlcXVlc3RTcGFuLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRkSGVhZGVyc1RvUmVxdWVzdE9wdGlvbnMoXG4gIHJlcXVlc3RPcHRpb25zLFxuICByZXF1ZXN0VXJsLFxuICBzZW50cnlUcmFjZUhlYWRlcixcbiAgc2VudHJ5QmFnZ2FnZUhlYWRlcixcbikge1xuICAvLyBEb24ndCBvdmVyd3JpdGUgc2VudHJ5LXRyYWNlIGFuZCBiYWdnYWdlIGhlYWRlciBpZiBpdCdzIGFscmVhZHkgc2V0LlxuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgaWYgKGhlYWRlcnNbJ3NlbnRyeS10cmFjZSddKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJlxuICAgIHV0aWxzLmxvZ2dlci5sb2coYFtUcmFjaW5nXSBBZGRpbmcgc2VudHJ5LXRyYWNlIGhlYWRlciAke3NlbnRyeVRyYWNlSGVhZGVyfSB0byBvdXRnb2luZyByZXF1ZXN0IHRvIFwiJHtyZXF1ZXN0VXJsfVwiOiBgKTtcblxuICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgIC4uLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMsXG4gICAgJ3NlbnRyeS10cmFjZSc6IHNlbnRyeVRyYWNlSGVhZGVyLFxuICAgIC8vIFNldHRpbmcgYSBoZWFkZXIgdG8gYHVuZGVmaW5lZGAgd2lsbCBjcmFzaCBpbiBub2RlIHNvIHdlIG9ubHkgc2V0IHRoZSBiYWdnYWdlIGhlYWRlciB3aGVuIGl0J3MgZGVmaW5lZFxuICAgIC4uLihzZW50cnlCYWdnYWdlSGVhZGVyICYmXG4gICAgICBzZW50cnlCYWdnYWdlSGVhZGVyLmxlbmd0aCA+IDAgJiYgeyBiYWdnYWdlOiBub3JtYWxpemVCYWdnYWdlSGVhZGVyKHJlcXVlc3RPcHRpb25zLCBzZW50cnlCYWdnYWdlSGVhZGVyKSB9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWVzdFNwYW5EYXRhKHJlcXVlc3RVcmwsIHJlcXVlc3RPcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3RPcHRpb25zLm1ldGhvZCB8fCAnR0VUJztcbiAgY29uc3QgZGF0YSA9IHtcbiAgICB1cmw6IHJlcXVlc3RVcmwsXG4gICAgJ2h0dHAubWV0aG9kJzogbWV0aG9kLFxuICB9O1xuICBpZiAocmVxdWVzdE9wdGlvbnMuaGFzaCkge1xuICAgIC8vIHN0cmlwIGxlYWRpbmcgXCIjXCJcbiAgICBkYXRhWydodHRwLmZyYWdtZW50J10gPSByZXF1ZXN0T3B0aW9ucy5oYXNoLnN1YnN0cmluZygxKTtcbiAgfVxuICBpZiAocmVxdWVzdE9wdGlvbnMuc2VhcmNoKSB7XG4gICAgLy8gc3RyaXAgbGVhZGluZyBcIj9cIlxuICAgIGRhdGFbJ2h0dHAucXVlcnknXSA9IHJlcXVlc3RPcHRpb25zLnNlYXJjaC5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJhZ2dhZ2VIZWFkZXIoXG4gIHJlcXVlc3RPcHRpb25zLFxuICBzZW50cnlCYWdnYWdlSGVhZGVyLFxuKSB7XG4gIGlmICghcmVxdWVzdE9wdGlvbnMuaGVhZGVycyB8fCAhcmVxdWVzdE9wdGlvbnMuaGVhZGVycy5iYWdnYWdlKSB7XG4gICAgcmV0dXJuIHNlbnRyeUJhZ2dhZ2VIZWFkZXI7XG4gIH0gZWxzZSBpZiAoIXNlbnRyeUJhZ2dhZ2VIZWFkZXIpIHtcbiAgICByZXR1cm4gcmVxdWVzdE9wdGlvbnMuaGVhZGVycy5iYWdnYWdlIDtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmhlYWRlcnMuYmFnZ2FnZSkpIHtcbiAgICByZXR1cm4gWy4uLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMuYmFnZ2FnZSwgc2VudHJ5QmFnZ2FnZUhlYWRlcl07XG4gIH1cbiAgLy8gVHlwZS1jYXN0IGV4cGxhbmF0aW9uOlxuICAvLyBUZWNobmljYWxseSB0aGlzIHRoZSBmb2xsb3dpbmcgY291bGQgYmUgb2YgdHlwZSBgKG51bWJlciB8IHN0cmluZylbXWAgYnV0IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5XG4gIC8vIHdlIHNheSB0aGlzIGlzIHVuZGVmaW5lZCBiZWhhdmlvdXIsIHNpbmNlIGl0IHdvdWxkIG5vdCBiZSBiYWdnYWdlIHNwZWMgY29uZm9ybSBpZiB0aGUgdXNlciBkaWQgdGhpcy5cbiAgcmV0dXJuIFtyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLmJhZ2dhZ2UsIHNlbnRyeUJhZ2dhZ2VIZWFkZXJdIDtcbn1cblxuLyoqIEV4cG9ydGVkIGZvciB0ZXN0cyBvbmx5LiAqL1xuZnVuY3Rpb24gX3Nob3VsZENyZWF0ZVNwYW5zKFxuICB0cmFjaW5nT3B0aW9ucyxcbiAgY2xpZW50T3B0aW9ucyxcbikge1xuICByZXR1cm4gdHJhY2luZ09wdGlvbnMgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6IHRyYWNpbmdPcHRpb25zLmVuYWJsZUlmSGFzVHJhY2luZ0VuYWJsZWRcbiAgICAgID8gY29yZS5oYXNUcmFjaW5nRW5hYmxlZChjbGllbnRPcHRpb25zKVxuICAgICAgOiB0cnVlO1xufVxuXG4vKiogRXhwb3J0ZWQgZm9yIHRlc3RzIG9ubHkuICovXG5mdW5jdGlvbiBfZ2V0U2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QoXG4gIHNob3VsZENyZWF0ZVNwYW5zLFxuICB0cmFjaW5nT3B0aW9ucyxcbiAgY2xpZW50T3B0aW9ucyxcbikge1xuICBjb25zdCBoYW5kbGVyID0gc2hvdWxkQ3JlYXRlU3BhbnNcbiAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgX29wdGlvbmFsQ2hhaW4oW3RyYWNpbmdPcHRpb25zLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTEgPT4gXzExLnNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0XSkgfHwgX29wdGlvbmFsQ2hhaW4oW2NsaWVudE9wdGlvbnMsICdvcHRpb25hbEFjY2VzcycsIF8xMiA9PiBfMTIuc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3RdKVxuICAgIDogKCkgPT4gZmFsc2U7XG5cbiAgcmV0dXJuIGhhbmRsZXI7XG59XG5cbmV4cG9ydHMuSHR0cCA9IEh0dHA7XG5leHBvcnRzLl9nZXRTaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCA9IF9nZXRTaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdDtcbmV4cG9ydHMuX3Nob3VsZENyZWF0ZVNwYW5zID0gX3Nob3VsZENyZWF0ZVNwYW5zO1xuZXhwb3J0cy5odHRwSW50ZWdyYXRpb24gPSBodHRwSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odHRwLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYSByYXRlIGxpbWl0ZXIgdGhhdCB3aWxsIGNhbGwgdGhlIGRpc2FibGUgY2FsbGJhY2sgd2hlbiB0aGUgcmF0ZSBsaW1pdCBpcyByZWFjaGVkIGFuZCB0aGUgZW5hYmxlIGNhbGxiYWNrXG4gKiB3aGVuIGEgdGltZW91dCBoYXMgb2NjdXJyZWQuXG4gKiBAcGFyYW0gbWF4UGVyU2Vjb25kIE1heGltdW0gbnVtYmVyIG9mIGNhbGxzIHBlciBzZWNvbmRcbiAqIEBwYXJhbSBlbmFibGUgQ2FsbGJhY2sgdG8gZW5hYmxlIGNhcHR1cmVcbiAqIEBwYXJhbSBkaXNhYmxlIENhbGxiYWNrIHRvIGRpc2FibGUgY2FwdHVyZVxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0byBjYWxsIHRvIGluY3JlbWVudCB0aGUgcmF0ZSBsaW1pdGVyIGNvdW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhdGVMaW1pdGVyKFxuICBtYXhQZXJTZWNvbmQsXG4gIGVuYWJsZSxcbiAgZGlzYWJsZSxcbikge1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgcmV0cnlTZWNvbmRzID0gNTtcbiAgbGV0IGRpc2FibGVkVGltZW91dCA9IDA7XG5cbiAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZFRpbWVvdXQgPT09IDApIHtcbiAgICAgIGlmIChjb3VudCA+IG1heFBlclNlY29uZCkge1xuICAgICAgICByZXRyeVNlY29uZHMgKj0gMjtcbiAgICAgICAgZGlzYWJsZShyZXRyeVNlY29uZHMpO1xuXG4gICAgICAgIC8vIENhcCBhdCBvbmUgZGF5XG4gICAgICAgIGlmIChyZXRyeVNlY29uZHMgPiA4NjQwMCkge1xuICAgICAgICAgIHJldHJ5U2Vjb25kcyA9IDg2NDAwO1xuICAgICAgICB9XG4gICAgICAgIGRpc2FibGVkVGltZW91dCA9IHJldHJ5U2Vjb25kcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlzYWJsZWRUaW1lb3V0IC09IDE7XG5cbiAgICAgIGlmIChkaXNhYmxlZFRpbWVvdXQgPT09IDApIHtcbiAgICAgICAgZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY291bnQgPSAwO1xuICB9LCAxMDAwKS51bnJlZigpO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY291bnQgKz0gMTtcbiAgfTtcbn1cblxuLy8gQWRkIHR5cGVzIGZvciB0aGUgZXhjZXB0aW9uIGV2ZW50IGRhdGFcblxuLyoqIENvdWxkIHRoaXMgYmUgYW4gYW5vbnltb3VzIGZ1bmN0aW9uPyAqL1xuZnVuY3Rpb24gaXNBbm9ueW1vdXMobmFtZSkge1xuICByZXR1cm4gbmFtZSAhPT0gdW5kZWZpbmVkICYmIChuYW1lLmxlbmd0aCA9PT0gMCB8fCBuYW1lID09PSAnPycgfHwgbmFtZSA9PT0gJzxhbm9ueW1vdXM+Jyk7XG59XG5cbi8qKiBEbyB0aGUgZnVuY3Rpb24gbmFtZXMgYXBwZWFyIHRvIG1hdGNoPyAqL1xuZnVuY3Rpb24gZnVuY3Rpb25OYW1lc01hdGNoKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGIgfHwgKGlzQW5vbnltb3VzKGEpICYmIGlzQW5vbnltb3VzKGIpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSB1bmlxdWUgaGFzaCBmcm9tIHN0YWNrIGZyYW1lcyAqL1xuZnVuY3Rpb24gaGFzaEZyYW1lcyhmcmFtZXMpIHtcbiAgaWYgKGZyYW1lcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gT25seSBoYXNoIHRoZSAxMCBtb3N0IHJlY2VudCBmcmFtZXMgKGllLiB0aGUgbGFzdCAxMClcbiAgcmV0dXJuIGZyYW1lcy5zbGljZSgtMTApLnJlZHVjZSgoYWNjLCBmcmFtZSkgPT4gYCR7YWNjfSwke2ZyYW1lLmZ1bmN0aW9ufSwke2ZyYW1lLmxpbmVub30sJHtmcmFtZS5jb2xub31gLCAnJyk7XG59XG5cbi8qKlxuICogV2UgdXNlIHRoZSBzdGFjayBwYXJzZXIgdG8gY3JlYXRlIGEgdW5pcXVlIGhhc2ggZnJvbSB0aGUgZXhjZXB0aW9uIHN0YWNrIHRyYWNlXG4gKiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHZhcnMgd2hlbiB0aGUgZXhjZXB0aW9uIHBhc3NlcyB0aHJvdWdoIHRoZSBldmVudCBwcm9jZXNzb3JcbiAqL1xuZnVuY3Rpb24gaGFzaEZyb21TdGFjayhzdGFja1BhcnNlciwgc3RhY2spIHtcbiAgaWYgKHN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcmFtZXMoc3RhY2tQYXJzZXIoc3RhY2ssIDEpKTtcbn1cblxuZXhwb3J0cy5jcmVhdGVSYXRlTGltaXRlciA9IGNyZWF0ZVJhdGVMaW1pdGVyO1xuZXhwb3J0cy5mdW5jdGlvbk5hbWVzTWF0Y2ggPSBmdW5jdGlvbk5hbWVzTWF0Y2g7XG5leHBvcnRzLmhhc2hGcmFtZXMgPSBoYXNoRnJhbWVzO1xuZXhwb3J0cy5oYXNoRnJvbVN0YWNrID0gaGFzaEZyb21TdGFjaztcbmV4cG9ydHMuaXNBbm9ueW1vdXMgPSBpc0Fub255bW91cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbW1vbi5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3Qgbm9kZVZlcnNpb24gPSByZXF1aXJlKCcuLi8uLi9ub2RlVmVyc2lvbi5qcycpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24uanMnKTtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG5cbi8qKiBDcmVhdGVzIGEgY29udGFpbmVyIGZvciBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIHNlcXVlbnRpYWxseSAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FsbGJhY2tMaXN0KGNvbXBsZXRlKSB7XG4gIC8vIEEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gYmUgZXhlY3V0ZWQgbGFzdCB0byBmaXJzdFxuICBsZXQgY2FsbGJhY2tzID0gW107XG5cbiAgbGV0IGNvbXBsZXRlZENhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjaGVja2VkQ29tcGxldGUocmVzdWx0KSB7XG4gICAgY2FsbGJhY2tzID0gW107XG4gICAgaWYgKGNvbXBsZXRlZENhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb21wbGV0ZWRDYWxsZWQgPSB0cnVlO1xuICAgIGNvbXBsZXRlKHJlc3VsdCk7XG4gIH1cblxuICAvLyBjb21wbGV0ZSBzaG91bGQgYmUgY2FsbGVkIGxhc3RcbiAgY2FsbGJhY2tzLnB1c2goY2hlY2tlZENvbXBsZXRlKTtcblxuICBmdW5jdGlvbiBhZGQoZm4pIHtcbiAgICBjYWxsYmFja3MucHVzaChmbik7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KHJlc3VsdCkge1xuICAgIGNvbnN0IHBvcHBlZCA9IGNhbGxiYWNrcy5wb3AoKSB8fCBjaGVja2VkQ29tcGxldGU7XG5cbiAgICB0cnkge1xuICAgICAgcG9wcGVkKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHdlIHN0aWxsIHdhbnQgdG8gY2FsbCB0aGUgY29tcGxldGUgY2FsbGJhY2tcbiAgICAgIGNoZWNrZWRDb21wbGV0ZShyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgbmV4dCB9O1xufVxuXG4vKipcbiAqIFByb21pc2UgQVBJIGlzIGF2YWlsYWJsZSBhcyBgRXhwZXJpbWVudGFsYCBhbmQgaW4gTm9kZSAxOSBvbmx5LlxuICpcbiAqIENhbGxiYWNrLWJhc2VkIEFQSSBpcyBgU3RhYmxlYCBzaW5jZSB2MTQgYW5kIGBFeHBlcmltZW50YWxgIHNpbmNlIHY4LlxuICogQmVjYXVzZSBvZiB0aGF0LCB3ZSBhcmUgY3JlYXRpbmcgb3VyIG93biBgQXN5bmNTZXNzaW9uYCBjbGFzcy5cbiAqXG4gKiBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QtdjE5LngvYXBpL2luc3BlY3Rvci5odG1sI3Byb21pc2VzLWFwaVxuICogaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0LXYxNC54L2FwaS9pbnNwZWN0b3IuaHRtbFxuICovXG5jbGFzcyBBc3luY1Nlc3Npb24gIHtcblxuICAvKiogVGhyb3dzIGlmIGluc3BlY3RvciBBUEkgaXMgbm90IGF2YWlsYWJsZSAqL1xuICAgY29uc3RydWN0b3IoKSB7XG4gICAgLypcbiAgICBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGdldCByaWQgb2YgdGhpcyByZXF1aXJlIHN0YXRlbWVudCBiZWxvdyBmb3IgYSBjb3VwbGUgb2YgcmVhc29uczpcbiAgICAxLiBJdCBtYWtlcyB0aGUgaW50ZWdyYXRpb24gdW51c2FibGUgaW4gdGhlIFN2ZWx0ZUtpdCBTREssIGFzIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgcmVxdWlyZWBcbiAgICAgICBpbiBTdmVsdGVLaXQgc2VydmVyIGNvZGUgKGF0IGxlYXN0IG5vdCBieSBkZWZhdWx0KS5cbiAgICAyLiBUaHJvd2luZyBpbiBhIGNvbnN0cnVjdG9yIGlzIGJhZCBwcmFjdGljZVxuXG4gICAgTW9yZSBjb250ZXh0IGZvciBhIGZ1dHVyZSBhdHRlbXB0IHRvIGZpeCB0aGlzOlxuICAgIFdlIGFscmVhZHkgdHJpZWQgcmVwbGFjaW5nIGl0IHdpdGggaW1wb3J0IGJ1dCBkaWRuJ3QgZ2V0IGl0IHRvIHdvcmsgYmVjYXVzZSBvZiBhc3luYyBwcm9ibGVtcy5cbiAgICBXZSBzdGlsbCBjYWxsZWQgaW1wb3J0IGluIHRoZSBjb25zdHJ1Y3RvciBidXQgYXNzaWduZWQgdG8gYSBwcm9taXNlIHdoaWNoIHdlIFwiYXdhaXRlZFwiIGluXG4gICAgYGNvbmZpZ3VyZUFuZENvbm5lY3RgLiBIb3dldmVyLCB0aGlzIGJyb2tlIHRoZSBOb2RlIGludGVncmF0aW9uIHRlc3RzIGFzIG5vIGxvY2FsIHZhcmlhYmxlc1xuICAgIHdlcmUgcmVwb3J0ZWQgYW55IG1vcmUuIFdlIHByb2JhYmx5IG1pc3NlZCBhIHBsYWNlIHdoZXJlIHdlIG5lZWQgdG8gYXdhaXQgdGhlIHByb21pc2UsIHRvby5cbiAgICAqL1xuXG4gICAgLy8gTm9kZSBjYW4gYmUgYnVpbHQgd2l0aG91dCBpbnNwZWN0b3Igc3VwcG9ydCBzbyB0aGlzIGNhbiB0aHJvd1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgeyBTZXNzaW9uIH0gPSByZXF1aXJlKCdpbnNwZWN0b3InKTtcbiAgICB0aGlzLl9zZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgY29uZmlndXJlQW5kQ29ubmVjdChvblBhdXNlLCBjYXB0dXJlQWxsKSB7XG4gICAgdGhpcy5fc2Vzc2lvbi5jb25uZWN0KCk7XG5cbiAgICB0aGlzLl9zZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7XG4gICAgICBvblBhdXNlKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIC8vIEFmdGVyIHRoZSBwYXVzZSB3b3JrIGlzIGNvbXBsZXRlLCByZXN1bWUgZXhlY3V0aW9uIG9yIHRoZSBleGNlcHRpb24gY29udGV4dCBtZW1vcnkgaXMgbGVha2VkXG4gICAgICAgIHRoaXMuX3Nlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3Nlc3Npb24ucG9zdCgnRGVidWdnZXIuZW5hYmxlJyk7XG4gICAgdGhpcy5fc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucycsIHsgc3RhdGU6IGNhcHR1cmVBbGwgPyAnYWxsJyA6ICd1bmNhdWdodCcgfSk7XG4gIH1cblxuICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoY2FwdHVyZUFsbCkge1xuICAgIHRoaXMuX3Nlc3Npb24ucG9zdCgnRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMnLCB7IHN0YXRlOiBjYXB0dXJlQWxsID8gJ2FsbCcgOiAndW5jYXVnaHQnIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBnZXRMb2NhbFZhcmlhYmxlcyhvYmplY3RJZCwgY29tcGxldGUpIHtcbiAgICB0aGlzLl9nZXRQcm9wZXJ0aWVzKG9iamVjdElkLCBwcm9wcyA9PiB7XG4gICAgICBjb25zdCB7IGFkZCwgbmV4dCB9ID0gY3JlYXRlQ2FsbGJhY2tMaXN0KGNvbXBsZXRlKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgIGlmIChfb3B0aW9uYWxDaGFpbihbcHJvcCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIudmFsdWUsICdvcHRpb25hbEFjY2VzcycsIF8zID0+IF8zLm9iamVjdElkXSkgJiYgX29wdGlvbmFsQ2hhaW4oW3Byb3AsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80LnZhbHVlLCAnYWNjZXNzJywgXzUgPT4gXzUuY2xhc3NOYW1lXSkgPT09ICdBcnJheScpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHByb3AudmFsdWUub2JqZWN0SWQ7XG4gICAgICAgICAgYWRkKHZhcnMgPT4gdGhpcy5fdW5yb2xsQXJyYXkoaWQsIHByb3AubmFtZSwgdmFycywgbmV4dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25hbENoYWluKFtwcm9wLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi52YWx1ZSwgJ29wdGlvbmFsQWNjZXNzJywgXzcgPT4gXzcub2JqZWN0SWRdKSAmJiBfb3B0aW9uYWxDaGFpbihbcHJvcCwgJ29wdGlvbmFsQWNjZXNzJywgXzggPT4gXzgudmFsdWUsICdvcHRpb25hbEFjY2VzcycsIF85ID0+IF85LmNsYXNzTmFtZV0pID09PSAnT2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IGlkID0gcHJvcC52YWx1ZS5vYmplY3RJZDtcbiAgICAgICAgICBhZGQodmFycyA9PiB0aGlzLl91bnJvbGxPYmplY3QoaWQsIHByb3AubmFtZSwgdmFycywgbmV4dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25hbENoYWluKFtwcm9wLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTAgPT4gXzEwLnZhbHVlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTEgPT4gXzExLnZhbHVlXSkgIT0gbnVsbCB8fCBfb3B0aW9uYWxDaGFpbihbcHJvcCwgJ29wdGlvbmFsQWNjZXNzJywgXzEyID0+IF8xMi52YWx1ZSwgJ29wdGlvbmFsQWNjZXNzJywgXzEzID0+IF8xMy5kZXNjcmlwdGlvbl0pICE9IG51bGwpIHtcbiAgICAgICAgICBhZGQodmFycyA9PiB0aGlzLl91bnJvbGxPdGhlcihwcm9wLCB2YXJzLCBuZXh0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV4dCh7fSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgdGhlIFByb3BlcnR5RGVzY3JpcHRvcnMgb2YgYW4gb2JqZWN0XG4gICAqL1xuICAgX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIG5leHQpIHtcbiAgICB0aGlzLl9zZXNzaW9uLnBvc3QoXG4gICAgICAnUnVudGltZS5nZXRQcm9wZXJ0aWVzJyxcbiAgICAgIHtcbiAgICAgICAgb2JqZWN0SWQsXG4gICAgICAgIG93blByb3BlcnRpZXM6IHRydWUsXG4gICAgICB9LFxuICAgICAgKGVyciwgcGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBuZXh0KFtdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0KHBhcmFtcy5yZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVW5yb2xscyBhbiBhcnJheSBwcm9wZXJ0eVxuICAgKi9cbiAgIF91bnJvbGxBcnJheShvYmplY3RJZCwgbmFtZSwgdmFycywgbmV4dCkge1xuICAgIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIHByb3BzID0+IHtcbiAgICAgIHZhcnNbbmFtZV0gPSBwcm9wc1xuICAgICAgICAuZmlsdGVyKHYgPT4gdi5uYW1lICE9PSAnbGVuZ3RoJyAmJiAhaXNOYU4ocGFyc2VJbnQodi5uYW1lLCAxMCkpKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gcGFyc2VJbnQoYS5uYW1lLCAxMCkgLSBwYXJzZUludChiLm5hbWUsIDEwKSlcbiAgICAgICAgLm1hcCh2ID0+IF9vcHRpb25hbENoYWluKFt2LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTQgPT4gXzE0LnZhbHVlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTUgPT4gXzE1LnZhbHVlXSkpO1xuXG4gICAgICBuZXh0KHZhcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucm9sbHMgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqL1xuICAgX3Vucm9sbE9iamVjdChvYmplY3RJZCwgbmFtZSwgdmFycywgbmV4dCkge1xuICAgIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIHByb3BzID0+IHtcbiAgICAgIHZhcnNbbmFtZV0gPSBwcm9wc1xuICAgICAgICAubWFwKHYgPT4gW3YubmFtZSwgX29wdGlvbmFsQ2hhaW4oW3YsICdvcHRpb25hbEFjY2VzcycsIF8xNiA9PiBfMTYudmFsdWUsICdvcHRpb25hbEFjY2VzcycsIF8xNyA9PiBfMTcudmFsdWVdKV0pXG4gICAgICAgIC5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sIHt9ICk7XG5cbiAgICAgIG5leHQodmFycyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yb2xscyBvdGhlciBwcm9wZXJ0aWVzXG4gICAqL1xuICAgX3Vucm9sbE90aGVyKHByb3AsIHZhcnMsIG5leHQpIHtcbiAgICBpZiAoX29wdGlvbmFsQ2hhaW4oW3Byb3AsICdvcHRpb25hbEFjY2VzcycsIF8xOCA9PiBfMTgudmFsdWUsICdvcHRpb25hbEFjY2VzcycsIF8xOSA9PiBfMTkudmFsdWVdKSAhPSBudWxsKSB7XG4gICAgICB2YXJzW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoX29wdGlvbmFsQ2hhaW4oW3Byb3AsICdvcHRpb25hbEFjY2VzcycsIF8yMCA9PiBfMjAudmFsdWUsICdvcHRpb25hbEFjY2VzcycsIF8yMSA9PiBfMjEuZGVzY3JpcHRpb25dKSAhPSBudWxsICYmIF9vcHRpb25hbENoYWluKFtwcm9wLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMjIgPT4gXzIyLnZhbHVlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMjMgPT4gXzIzLnR5cGVdKSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyc1twcm9wLm5hbWVdID0gYDwke3Byb3AudmFsdWUuZGVzY3JpcHRpb259PmA7XG4gICAgfVxuXG4gICAgbmV4dCh2YXJzKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZW4gdXNpbmcgVmVyY2VsIHBrZywgdGhlIGluc3BlY3RvciBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzY3NjlcbiAqL1xuZnVuY3Rpb24gdHJ5TmV3QXN5bmNTZXNzaW9uKCkge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgQXN5bmNTZXNzaW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnTG9jYWxWYXJpYWJsZXMnO1xuXG4vKipcbiAqIEFkZHMgbG9jYWwgdmFyaWFibGVzIHRvIGV4Y2VwdGlvbiBmcmFtZXNcbiAqL1xuY29uc3QgX2xvY2FsVmFyaWFibGVzU3luY0ludGVncmF0aW9uID0gKChcbiAgb3B0aW9ucyA9IHt9LFxuICBzZXNzaW9uID0gdHJ5TmV3QXN5bmNTZXNzaW9uKCksXG4pID0+IHtcbiAgY29uc3QgY2FjaGVkRnJhbWVzID0gbmV3IHV0aWxzLkxSVU1hcCgyMCk7XG4gIGxldCByYXRlTGltaXRlcjtcbiAgbGV0IHNob3VsZFByb2Nlc3NFdmVudCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVBhdXNlZChcbiAgICBzdGFja1BhcnNlcixcbiAgICB7IHBhcmFtczogeyByZWFzb24sIGRhdGEsIGNhbGxGcmFtZXMgfSB9LFxuICAgIGNvbXBsZXRlLFxuICApIHtcbiAgICBpZiAocmVhc29uICE9PSAnZXhjZXB0aW9uJyAmJiByZWFzb24gIT09ICdwcm9taXNlUmVqZWN0aW9uJykge1xuICAgICAgY29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfb3B0aW9uYWxDaGFpbihbcmF0ZUxpbWl0ZXIsICdvcHRpb25hbENhbGwnLCBfMjQgPT4gXzI0KCldKTtcblxuICAgIC8vIGRhdGEuZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIG9yaWdpbmFsIGVycm9yLnN0YWNrXG4gICAgY29uc3QgZXhjZXB0aW9uSGFzaCA9IGNvbW1vbi5oYXNoRnJvbVN0YWNrKHN0YWNrUGFyc2VyLCBfb3B0aW9uYWxDaGFpbihbZGF0YSwgJ29wdGlvbmFsQWNjZXNzJywgXzI1ID0+IF8yNS5kZXNjcmlwdGlvbl0pKTtcblxuICAgIGlmIChleGNlcHRpb25IYXNoID09IHVuZGVmaW5lZCkge1xuICAgICAgY29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGFkZCwgbmV4dCB9ID0gY3JlYXRlQ2FsbGJhY2tMaXN0KGZyYW1lcyA9PiB7XG4gICAgICBjYWNoZWRGcmFtZXMuc2V0KGV4Y2VwdGlvbkhhc2gsIGZyYW1lcyk7XG4gICAgICBjb21wbGV0ZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gQmVjYXVzZSB3ZSdyZSBxdWV1aW5nIHVwIGFuZCBtYWtpbmcgYWxsIHRoZXNlIGNhbGxzIHN5bmNocm9ub3VzbHksIHdlIGNhbiBwb3RlbnRpYWxseSBvdmVyZmxvdyB0aGUgc3RhY2tcbiAgICAvLyBGb3IgdGhpcyByZWFzb24gd2Ugb25seSBhdHRlbXB0IHRvIGdldCBsb2NhbCB2YXJpYWJsZXMgZm9yIHRoZSBmaXJzdCA1IGZyYW1lc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oY2FsbEZyYW1lcy5sZW5ndGgsIDUpOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgc2NvcGVDaGFpbiwgZnVuY3Rpb25OYW1lLCB0aGlzOiBvYmogfSA9IGNhbGxGcmFtZXNbaV07XG5cbiAgICAgIGNvbnN0IGxvY2FsU2NvcGUgPSBzY29wZUNoYWluLmZpbmQoc2NvcGUgPT4gc2NvcGUudHlwZSA9PT0gJ2xvY2FsJyk7XG5cbiAgICAgIC8vIG9iai5jbGFzc05hbWUgaXMgdW5kZWZpbmVkIGluIEVTTSBtb2R1bGVzXG4gICAgICBjb25zdCBmbiA9IG9iai5jbGFzc05hbWUgPT09ICdnbG9iYWwnIHx8ICFvYmouY2xhc3NOYW1lID8gZnVuY3Rpb25OYW1lIDogYCR7b2JqLmNsYXNzTmFtZX0uJHtmdW5jdGlvbk5hbWV9YDtcblxuICAgICAgaWYgKF9vcHRpb25hbENoYWluKFtsb2NhbFNjb3BlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMjYgPT4gXzI2Lm9iamVjdCwgJ2FjY2VzcycsIF8yNyA9PiBfMjcub2JqZWN0SWRdKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZChmcmFtZXMgPT4ge1xuICAgICAgICAgIGZyYW1lc1tpXSA9IHsgZnVuY3Rpb246IGZuIH07XG4gICAgICAgICAgbmV4dChmcmFtZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGlkID0gbG9jYWxTY29wZS5vYmplY3Qub2JqZWN0SWQ7XG4gICAgICAgIGFkZChmcmFtZXMgPT5cbiAgICAgICAgICBfb3B0aW9uYWxDaGFpbihbc2Vzc2lvbiwgJ29wdGlvbmFsQWNjZXNzJywgXzI4ID0+IF8yOC5nZXRMb2NhbFZhcmlhYmxlcywgJ2NhbGwnLCBfMjkgPT4gXzI5KGlkLCB2YXJzID0+IHtcbiAgICAgICAgICAgIGZyYW1lc1tpXSA9IHsgZnVuY3Rpb246IGZuLCB2YXJzIH07XG4gICAgICAgICAgICBuZXh0KGZyYW1lcyk7XG4gICAgICAgICAgfSldKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KFtdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExvY2FsVmFyaWFibGVzVG9FeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgaGFzaCA9IGNvbW1vbi5oYXNoRnJhbWVzKF9vcHRpb25hbENoYWluKFtleGNlcHRpb24sICdvcHRpb25hbEFjY2VzcycsIF8zMCA9PiBfMzAuc3RhY2t0cmFjZSwgJ29wdGlvbmFsQWNjZXNzJywgXzMxID0+IF8zMS5mcmFtZXNdKSk7XG5cbiAgICBpZiAoaGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBsb2NhbCB2YXJpYWJsZXMgZm9yIGFuIGV4Y2VwdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGhhc2hcbiAgICAvLyByZW1vdmUgaXMgaWRlbnRpY2FsIHRvIGdldCBidXQgYWxzbyByZW1vdmVzIHRoZSBlbnRyeSBmcm9tIHRoZSBjYWNoZVxuICAgIGNvbnN0IGNhY2hlZEZyYW1lID0gY2FjaGVkRnJhbWVzLnJlbW92ZShoYXNoKTtcblxuICAgIGlmIChjYWNoZWRGcmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG91dCBmcmFtZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIG5hbWUgaXMgYG5ldyBQcm9taXNlYCBzaW5jZSB0aGVzZSBhcmUgaW4gdGhlIGVycm9yLnN0YWNrIGZyYW1lc1xuICAgIC8vIGJ1dCBkbyBub3QgYXBwZWFyIGluIHRoZSBkZWJ1Z2dlciBjYWxsIGZyYW1lc1xuICAgIGNvbnN0IGZyYW1lcyA9IChfb3B0aW9uYWxDaGFpbihbZXhjZXB0aW9uLCAnYWNjZXNzJywgXzMyID0+IF8zMi5zdGFja3RyYWNlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMzMgPT4gXzMzLmZyYW1lc10pIHx8IFtdKS5maWx0ZXIoZnJhbWUgPT4gZnJhbWUuZnVuY3Rpb24gIT09ICduZXcgUHJvbWlzZScpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFNlbnRyeSBmcmFtZXMgYXJlIGluIHJldmVyc2Ugb3JkZXJcbiAgICAgIGNvbnN0IGZyYW1lSW5kZXggPSBmcmFtZXMubGVuZ3RoIC0gaSAtIDE7XG5cbiAgICAgIC8vIERyb3Agb3V0IGlmIHdlIHJ1biBvdXQgb2YgZnJhbWVzIHRvIG1hdGNoIHVwXG4gICAgICBpZiAoIWZyYW1lc1tmcmFtZUluZGV4XSB8fCAhY2FjaGVkRnJhbWVbaV0pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIHZhcnMgdG8gYWRkXG4gICAgICAgIGNhY2hlZEZyYW1lW2ldLnZhcnMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAvLyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBmcmFtZXMgdGhhdCBhcmUgbm90IGluX2FwcCBiZWNhdXNlIHRoZSB2YXJzIGFyZSBub3QgcmVsZXZhbnRcbiAgICAgICAgZnJhbWVzW2ZyYW1lSW5kZXhdLmluX2FwcCA9PT0gZmFsc2UgfHxcbiAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIG5hbWVzIG5lZWQgdG8gbWF0Y2hcbiAgICAgICAgIWNvbW1vbi5mdW5jdGlvbk5hbWVzTWF0Y2goZnJhbWVzW2ZyYW1lSW5kZXhdLmZ1bmN0aW9uLCBjYWNoZWRGcmFtZVtpXS5mdW5jdGlvbilcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZnJhbWVzW2ZyYW1lSW5kZXhdLnZhcnMgPSBjYWNoZWRGcmFtZVtpXS52YXJzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExvY2FsVmFyaWFibGVzVG9FdmVudChldmVudCkge1xuICAgIGZvciAoY29uc3QgZXhjZXB0aW9uIG9mIF9vcHRpb25hbENoYWluKFtldmVudCwgJ29wdGlvbmFsQWNjZXNzJywgXzM0ID0+IF8zNC5leGNlcHRpb24sICdvcHRpb25hbEFjY2VzcycsIF8zNSA9PiBfMzUudmFsdWVzXSkgfHwgW10pIHtcbiAgICAgIGFkZExvY2FsVmFyaWFibGVzVG9FeGNlcHRpb24oZXhjZXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgc2V0dXBPbmNlKCkge1xuICAgICAgY29uc3QgY2xpZW50ID0gY29yZS5nZXRDbGllbnQoKTtcbiAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBfb3B0aW9uYWxDaGFpbihbY2xpZW50LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMzYgPT4gXzM2LmdldE9wdGlvbnMsICdjYWxsJywgXzM3ID0+IF8zNygpXSk7XG5cbiAgICAgIGlmIChzZXNzaW9uICYmIF9vcHRpb25hbENoYWluKFtjbGllbnRPcHRpb25zLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMzggPT4gXzM4LmluY2x1ZGVMb2NhbFZhcmlhYmxlc10pKSB7XG4gICAgICAgIC8vIE9ubHkgc2V0dXAgdGhpcyBpbnRlZ3JhdGlvbiBpZiB0aGUgTm9kZSB2ZXJzaW9uIGlzID49IHYxOFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy83Njk3XG4gICAgICAgIGNvbnN0IHVuc3VwcG9ydGVkTm9kZVZlcnNpb24gPSBub2RlVmVyc2lvbi5OT0RFX1ZFUlNJT04ubWFqb3IgPCAxODtcblxuICAgICAgICBpZiAodW5zdXBwb3J0ZWROb2RlVmVyc2lvbikge1xuICAgICAgICAgIHV0aWxzLmxvZ2dlci5sb2coJ1RoZSBgTG9jYWxWYXJpYWJsZXNgIGludGVncmF0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIE5vZGUgPj0gdjE4LicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhcHR1cmVBbGwgPSBvcHRpb25zLmNhcHR1cmVBbGxFeGNlcHRpb25zICE9PSBmYWxzZTtcblxuICAgICAgICBzZXNzaW9uLmNvbmZpZ3VyZUFuZENvbm5lY3QoXG4gICAgICAgICAgKGV2LCBjb21wbGV0ZSkgPT5cbiAgICAgICAgICAgIGhhbmRsZVBhdXNlZChjbGllbnRPcHRpb25zLnN0YWNrUGFyc2VyLCBldiAsIGNvbXBsZXRlKSxcbiAgICAgICAgICBjYXB0dXJlQWxsLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjYXB0dXJlQWxsKSB7XG4gICAgICAgICAgY29uc3QgbWF4ID0gb3B0aW9ucy5tYXhFeGNlcHRpb25zUGVyU2Vjb25kIHx8IDUwO1xuXG4gICAgICAgICAgcmF0ZUxpbWl0ZXIgPSBjb21tb24uY3JlYXRlUmF0ZUxpbWl0ZXIoXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHV0aWxzLmxvZ2dlci5sb2coJ0xvY2FsIHZhcmlhYmxlcyByYXRlLWxpbWl0IGxpZnRlZC4nKTtcbiAgICAgICAgICAgICAgX29wdGlvbmFsQ2hhaW4oW3Nlc3Npb24sICdvcHRpb25hbEFjY2VzcycsIF8zOSA9PiBfMzkuc2V0UGF1c2VPbkV4Y2VwdGlvbnMsICdjYWxsJywgXzQwID0+IF80MCh0cnVlKV0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY29uZHMgPT4ge1xuICAgICAgICAgICAgICB1dGlscy5sb2dnZXIubG9nKFxuICAgICAgICAgICAgICAgIGBMb2NhbCB2YXJpYWJsZXMgcmF0ZS1saW1pdCBleGNlZWRlZC4gRGlzYWJsaW5nIGNhcHR1cmluZyBvZiBjYXVnaHQgZXhjZXB0aW9ucyBmb3IgJHtzZWNvbmRzfSBzZWNvbmRzLmAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIF9vcHRpb25hbENoYWluKFtzZXNzaW9uLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNDEgPT4gXzQxLnNldFBhdXNlT25FeGNlcHRpb25zLCAnY2FsbCcsIF80MiA9PiBfNDIoZmFsc2UpXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBzaG91bGRQcm9jZXNzRXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvY2Vzc0V2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAoc2hvdWxkUHJvY2Vzc0V2ZW50KSB7XG4gICAgICAgIHJldHVybiBhZGRMb2NhbFZhcmlhYmxlc1RvRXZlbnQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcbiAgICAvLyBUaGVzZSBhcmUgZW50aXJlbHkgZm9yIHRlc3RpbmdcbiAgICBfZ2V0Q2FjaGVkRnJhbWVzQ291bnQoKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRnJhbWVzLnNpemU7XG4gICAgfSxcbiAgICBfZ2V0Rmlyc3RDYWNoZWRGcmFtZSgpIHtcbiAgICAgIHJldHVybiBjYWNoZWRGcmFtZXMudmFsdWVzKClbMF07XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgbG9jYWxWYXJpYWJsZXNTeW5jSW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9sb2NhbFZhcmlhYmxlc1N5bmNJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogQWRkcyBsb2NhbCB2YXJpYWJsZXMgdG8gZXhjZXB0aW9uIGZyYW1lcy5cbiAqIEBkZXByZWNhdGVkIFVzZSBgbG9jYWxWYXJpYWJsZXNTeW5jSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBMb2NhbFZhcmlhYmxlc1N5bmMgPSBjb3JlLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhcbiAgSU5URUdSQVRJT05fTkFNRSxcbiAgbG9jYWxWYXJpYWJsZXNTeW5jSW50ZWdyYXRpb24sXG4pXG5cbjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cbmV4cG9ydHMuTG9jYWxWYXJpYWJsZXNTeW5jID0gTG9jYWxWYXJpYWJsZXNTeW5jO1xuZXhwb3J0cy5jcmVhdGVDYWxsYmFja0xpc3QgPSBjcmVhdGVDYWxsYmFja0xpc3Q7XG5leHBvcnRzLmxvY2FsVmFyaWFibGVzU3luY0ludGVncmF0aW9uID0gbG9jYWxWYXJpYWJsZXNTeW5jSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2NhbC12YXJpYWJsZXMtc3luYy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgbG9jYWxWYXJpYWJsZXNTeW5jID0gcmVxdWlyZSgnLi9sb2NhbC12YXJpYWJsZXMtc3luYy5qcycpO1xuXG4vKipcbiAqIEFkZHMgbG9jYWwgdmFyaWFibGVzIHRvIGV4Y2VwdGlvbiBmcmFtZXMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBsb2NhbFZhcmlhYmxlc0ludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgTG9jYWxWYXJpYWJsZXMgPSBsb2NhbFZhcmlhYmxlc1N5bmMuTG9jYWxWYXJpYWJsZXNTeW5jO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cbmNvbnN0IGxvY2FsVmFyaWFibGVzSW50ZWdyYXRpb24gPSBsb2NhbFZhcmlhYmxlc1N5bmMubG9jYWxWYXJpYWJsZXNTeW5jSW50ZWdyYXRpb247XG5cbmV4cG9ydHMuTG9jYWxWYXJpYWJsZXMgPSBMb2NhbFZhcmlhYmxlcztcbmV4cG9ydHMubG9jYWxWYXJpYWJsZXNJbnRlZ3JhdGlvbiA9IGxvY2FsVmFyaWFibGVzSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcblxubGV0IG1vZHVsZUNhY2hlO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ01vZHVsZXMnO1xuXG4vKiogRXh0cmFjdCBpbmZvcm1hdGlvbiBhYm91dCBwYXRocyAqL1xuZnVuY3Rpb24gZ2V0UGF0aHMoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUuY2FjaGUgPyBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlICkgOiBbXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKiogRXh0cmFjdCBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlLmpzb24gbW9kdWxlcyAqL1xuZnVuY3Rpb24gY29sbGVjdE1vZHVsZXMoKVxuXG4ge1xuICBjb25zdCBtYWluUGF0aHMgPSAocmVxdWlyZS5tYWluICYmIHJlcXVpcmUubWFpbi5wYXRocykgfHwgW107XG4gIGNvbnN0IHBhdGhzID0gZ2V0UGF0aHMoKTtcbiAgY29uc3QgaW5mb3NcblxuID0ge307XG4gIGNvbnN0IHNlZW5cblxuID0ge307XG5cbiAgcGF0aHMuZm9yRWFjaChwYXRoJDEgPT4ge1xuICAgIGxldCBkaXIgPSBwYXRoJDE7XG5cbiAgICAvKiogVHJhdmVyc2UgZGlyZWN0b3JpZXMgdXB3YXJkIGluIHRoZSBzZWFyY2ggb2YgcGFja2FnZS5qc29uIGZpbGUgKi9cbiAgICBjb25zdCB1cGRpciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG9yaWcgPSBkaXI7XG4gICAgICBkaXIgPSBwYXRoLmRpcm5hbWUob3JpZyk7XG5cbiAgICAgIGlmICghZGlyIHx8IG9yaWcgPT09IGRpciB8fCBzZWVuW29yaWddKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAobWFpblBhdGhzLmluZGV4T2YoZGlyKSA8IDApIHtcbiAgICAgICAgcmV0dXJuIHVwZGlyKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBrZ2ZpbGUgPSBwYXRoLmpvaW4ob3JpZywgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgc2VlbltvcmlnXSA9IHRydWU7XG5cbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwa2dmaWxlKSkge1xuICAgICAgICByZXR1cm4gdXBkaXIoKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ2ZpbGUsICd1dGY4JykpXG5cbjtcbiAgICAgICAgaW5mb3NbaW5mby5uYW1lXSA9IGluZm8udmVyc2lvbjtcbiAgICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgICAvLyBuby1lbXB0eVxuICAgICAgfVxuICAgIH07XG5cbiAgICB1cGRpcigpO1xuICB9KTtcblxuICByZXR1cm4gaW5mb3M7XG59XG5cbi8qKiBGZXRjaGVzIHRoZSBsaXN0IG9mIG1vZHVsZXMgYW5kIHRoZSB2ZXJzaW9ucyBsb2FkZWQgYnkgdGhlIGVudHJ5IGZpbGUgZm9yIHlvdXIgbm9kZS5qcyBhcHAuICovXG5mdW5jdGlvbiBfZ2V0TW9kdWxlcygpIHtcbiAgaWYgKCFtb2R1bGVDYWNoZSkge1xuICAgIG1vZHVsZUNhY2hlID0gY29sbGVjdE1vZHVsZXMoKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlQ2FjaGU7XG59XG5cbmNvbnN0IF9tb2R1bGVzSW50ZWdyYXRpb24gPSAoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQpIHtcbiAgICAgIGV2ZW50Lm1vZHVsZXMgPSB7XG4gICAgICAgIC4uLmV2ZW50Lm1vZHVsZXMsXG4gICAgICAgIC4uLl9nZXRNb2R1bGVzKCksXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgbW9kdWxlc0ludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfbW9kdWxlc0ludGVncmF0aW9uKTtcblxuLyoqXG4gKiBBZGQgbm9kZSBtb2R1bGVzIC8gcGFja2FnZXMgdG8gdGhlIGV2ZW50LlxuICogQGRlcHJlY2F0ZWQgVXNlIGBtb2R1bGVzSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBNb2R1bGVzID0gY29yZS5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoSU5URUdSQVRJT05fTkFNRSwgbW9kdWxlc0ludGVncmF0aW9uKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG5leHBvcnRzLk1vZHVsZXMgPSBNb2R1bGVzO1xuZXhwb3J0cy5tb2R1bGVzSW50ZWdyYXRpb24gPSBtb2R1bGVzSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2R1bGVzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGRlYnVnQnVpbGQgPSByZXF1aXJlKCcuLi8uLi9kZWJ1Zy1idWlsZC5qcycpO1xuXG5jb25zdCBERUZBVUxUX1NIVVRET1dOX1RJTUVPVVQgPSAyMDAwO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gbG9nQW5kRXhpdFByb2Nlc3MoZXJyb3IpIHtcbiAgdXRpbHMuY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gIH0pO1xuXG4gIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCk7XG5cbiAgaWYgKGNsaWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybignTm8gTm9kZUNsaWVudCB3YXMgZGVmaW5lZCwgd2UgYXJlIGV4aXRpbmcgdGhlIHByb2Nlc3Mgbm93LicpO1xuICAgIGdsb2JhbC5wcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgY29uc3QgdGltZW91dCA9XG4gICAgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaHV0ZG93blRpbWVvdXQgJiYgb3B0aW9ucy5zaHV0ZG93blRpbWVvdXQgPiAwICYmIG9wdGlvbnMuc2h1dGRvd25UaW1lb3V0KSB8fFxuICAgIERFRkFVTFRfU0hVVERPV05fVElNRU9VVDtcbiAgY2xpZW50LmNsb3NlKHRpbWVvdXQpLnRoZW4oXG4gICAgKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2FybignV2UgcmVhY2hlZCB0aGUgdGltZW91dCBmb3IgZW1wdHlpbmcgdGhlIHJlcXVlc3QgYnVmZmVyLCBzdGlsbCBleGl0aW5nIG5vdyEnKTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbC5wcm9jZXNzLmV4aXQoMSk7XG4gICAgfSxcbiAgICBlcnJvciA9PiB7XG4gICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0cy5sb2dBbmRFeGl0UHJvY2VzcyA9IGxvZ0FuZEV4aXRQcm9jZXNzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JoYW5kbGluZy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IGVycm9yaGFuZGxpbmcgPSByZXF1aXJlKCcuL3V0aWxzL2Vycm9yaGFuZGxpbmcuanMnKTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdPblVuY2F1Z2h0RXhjZXB0aW9uJztcblxuY29uc3QgX29uVW5jYXVnaHRFeGNlcHRpb25JbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IF9vcHRpb25zID0ge1xuICAgIGV4aXRFdmVuSWZPdGhlckhhbmRsZXJzQXJlUmVnaXN0ZXJlZDogdHJ1ZSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHNldHVwKGNsaWVudCkge1xuICAgICAgZ2xvYmFsLnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgbWFrZUVycm9ySGFuZGxlcihjbGllbnQsIF9vcHRpb25zKSk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3Qgb25VbmNhdWdodEV4Y2VwdGlvbkludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfb25VbmNhdWdodEV4Y2VwdGlvbkludGVncmF0aW9uKTtcblxuLyoqXG4gKiBHbG9iYWwgRXhjZXB0aW9uIGhhbmRsZXIuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYG9uVW5jYXVnaHRFeGNlcHRpb25JbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IE9uVW5jYXVnaHRFeGNlcHRpb24gPSBjb3JlLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhcbiAgSU5URUdSQVRJT05fTkFNRSxcbiAgb25VbmNhdWdodEV4Y2VwdGlvbkludGVncmF0aW9uLFxuKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4vKiogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMgKi9cbmZ1bmN0aW9uIG1ha2VFcnJvckhhbmRsZXIoY2xpZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHRpbWVvdXQgPSAyMDAwO1xuICBsZXQgY2F1Z2h0Rmlyc3RFcnJvciA9IGZhbHNlO1xuICBsZXQgY2F1Z2h0U2Vjb25kRXJyb3IgPSBmYWxzZTtcbiAgbGV0IGNhbGxlZEZhdGFsRXJyb3IgPSBmYWxzZTtcbiAgbGV0IGZpcnN0RXJyb3I7XG5cbiAgY29uc3QgY2xpZW50T3B0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBsZXQgb25GYXRhbEVycm9yID0gZXJyb3JoYW5kbGluZy5sb2dBbmRFeGl0UHJvY2VzcztcblxuICAgICAgaWYgKG9wdGlvbnMub25GYXRhbEVycm9yKSB7XG4gICAgICAgIG9uRmF0YWxFcnJvciA9IG9wdGlvbnMub25GYXRhbEVycm9yO1xuICAgICAgfSBlbHNlIGlmIChjbGllbnRPcHRpb25zLm9uRmF0YWxFcnJvcikge1xuICAgICAgICBvbkZhdGFsRXJyb3IgPSBjbGllbnRPcHRpb25zLm9uRmF0YWxFcnJvciA7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0dGFjaGluZyBhIGxpc3RlbmVyIHRvIGB1bmNhdWdodEV4Y2VwdGlvbmAgd2lsbCBwcmV2ZW50IHRoZSBub2RlIHByb2Nlc3MgZnJvbSBleGl0aW5nLiBXZSBnZW5lcmFsbHkgZG8gbm90XG4gICAgICAvLyB3YW50IHRvIGFsdGVyIHRoaXMgYmVoYXZpb3VyIHNvIHdlIGNoZWNrIGZvciBvdGhlciBsaXN0ZW5lcnMgdGhhdCB1c2VycyBtYXkgaGF2ZSBhdHRhY2hlZCB0aGVtc2VsdmVzIGFuZCBhZGp1c3RcbiAgICAgIC8vIGV4aXQgYmVoYXZpb3VyIG9mIHRoZSBTREsgYWNjb3JkaW5nbHk6XG4gICAgICAvLyAtIElmIG90aGVyIGxpc3RlbmVycyBhcmUgYXR0YWNoZWQsIGRvIG5vdCBleGl0LlxuICAgICAgLy8gLSBJZiB0aGUgb25seSBsaXN0ZW5lciBhdHRhY2hlZCBpcyBvdXJzLCBleGl0LlxuICAgICAgY29uc3QgdXNlclByb3ZpZGVkTGlzdGVuZXJzQ291bnQgPSAoXG4gICAgICAgIGdsb2JhbC5wcm9jZXNzLmxpc3RlbmVycygndW5jYXVnaHRFeGNlcHRpb24nKVxuICAgICAgKS5yZWR1Y2UoKGFjYywgbGlzdGVuZXIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFRoZXJlIGFyZSAzIGxpc3RlbmVycyB3ZSBpZ25vcmU6XG4gICAgICAgICAgbGlzdGVuZXIubmFtZSA9PT0gJ2RvbWFpblVuY2F1Z2h0RXhjZXB0aW9uQ2xlYXInIHx8IC8vIGFzIHNvb24gYXMgd2UncmUgdXNpbmcgZG9tYWlucyB0aGlzIGxpc3RlbmVyIGlzIGF0dGFjaGVkIGJ5IG5vZGUgaXRzZWxmXG4gICAgICAgICAgKGxpc3RlbmVyLnRhZyAmJiBsaXN0ZW5lci50YWcgPT09ICdzZW50cnlfdHJhY2luZ0Vycm9yQ2FsbGJhY2snKSB8fCAvLyB0aGUgaGFuZGxlciB3ZSByZWdpc3RlciBmb3IgdHJhY2luZ1xuICAgICAgICAgIChsaXN0ZW5lciApLl9lcnJvckhhbmRsZXIgLy8gdGhlIGhhbmRsZXIgd2UgcmVnaXN0ZXIgaW4gdGhpcyBpbnRlZ3JhdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcblxuICAgICAgY29uc3QgcHJvY2Vzc1dvdWxkRXhpdCA9IHVzZXJQcm92aWRlZExpc3RlbmVyc0NvdW50ID09PSAwO1xuICAgICAgY29uc3Qgc2hvdWxkQXBwbHlGYXRhbEhhbmRsaW5nTG9naWMgPSBvcHRpb25zLmV4aXRFdmVuSWZPdGhlckhhbmRsZXJzQXJlUmVnaXN0ZXJlZCB8fCBwcm9jZXNzV291bGRFeGl0O1xuXG4gICAgICBpZiAoIWNhdWdodEZpcnN0RXJyb3IpIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmlyc3QgdW5jYXVnaHQgZXJyb3IgYW5kIHRoZSB1bHRpbWF0ZSByZWFzb24gZm9yIHNodXR0aW5nIGRvd25cbiAgICAgICAgLy8gd2Ugd2FudCB0byBkbyBhYnNvbHV0ZWx5IGV2ZXJ5dGhpbmcgcG9zc2libGUgdG8gZW5zdXJlIGl0IGdldHMgY2FwdHVyZWRcbiAgICAgICAgLy8gYWxzbyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyByZWN1cnNpb24gY3JhenkgaWYgbW9yZSBlcnJvcnMgaGFwcGVuIGFmdGVyIHRoaXMgb25lXG4gICAgICAgIGZpcnN0RXJyb3IgPSBlcnJvcjtcbiAgICAgICAgY2F1Z2h0Rmlyc3RFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGNvcmUuZ2V0Q2xpZW50KCkgPT09IGNsaWVudCkge1xuICAgICAgICAgIGNvcmUuY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwge1xuICAgICAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGVycm9yLFxuICAgICAgICAgICAgY2FwdHVyZUNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgbGV2ZWw6ICdmYXRhbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0eXBlOiAnb251bmNhdWdodGV4Y2VwdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYWxsZWRGYXRhbEVycm9yICYmIHNob3VsZEFwcGx5RmF0YWxIYW5kbGluZ0xvZ2ljKSB7XG4gICAgICAgICAgY2FsbGVkRmF0YWxFcnJvciA9IHRydWU7XG4gICAgICAgICAgb25GYXRhbEVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNob3VsZEFwcGx5RmF0YWxIYW5kbGluZ0xvZ2ljKSB7XG4gICAgICAgICAgaWYgKGNhbGxlZEZhdGFsRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHdlIGhpdCBhbiBlcnJvciAqYWZ0ZXIqIGNhbGxpbmcgb25GYXRhbEVycm9yIC0gcHJldHR5IGJvbmVkIGF0IHRoaXMgcG9pbnQsIGp1c3Qgc2h1dCBpdCBkb3duXG4gICAgICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmXG4gICAgICAgICAgICAgIHV0aWxzLmxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgICd1bmNhdWdodCBleGNlcHRpb24gYWZ0ZXIgY2FsbGluZyBmYXRhbCBlcnJvciBzaHV0ZG93biBjYWxsYmFjayAtIHRoaXMgaXMgYmFkISBmb3JjaW5nIHNodXRkb3duJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVycm9yaGFuZGxpbmcubG9nQW5kRXhpdFByb2Nlc3MoZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNhdWdodFNlY29uZEVycm9yKSB7XG4gICAgICAgICAgICAvLyB0d28gY2FzZXMgZm9yIGhvdyB3ZSBjYW4gaGl0IHRoaXMgYnJhbmNoOlxuICAgICAgICAgICAgLy8gICAtIGNhcHR1cmluZyBvZiBmaXJzdCBlcnJvciBibGV3IHVwIGFuZCB3ZSBqdXN0IGNhdWdodCB0aGUgZXhjZXB0aW9uIGZyb20gdGhhdFxuICAgICAgICAgICAgLy8gICAgIC0gcXVpdCB0cnlpbmcgdG8gY2FwdHVyZSwgcHJvY2VlZCB3aXRoIHNodXRkb3duXG4gICAgICAgICAgICAvLyAgIC0gYSBzZWNvbmQgaW5kZXBlbmRlbnQgZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgZmlyc3QgZXJyb3IgdG8gY2FwdHVyZVxuICAgICAgICAgICAgLy8gICAgIC0gd2FudCB0byBhdm9pZCBjYXVzaW5nIHByZW1hdHVyZSBzaHV0ZG93biBiZWZvcmUgZmlyc3QgZXJyb3IgY2FwdHVyZSBmaW5pc2hlc1xuICAgICAgICAgICAgLy8gaXQncyBoYXJkIHRvIGltbWVkaWF0ZWx5IHRlbGwgY2FzZSAxIGZyb20gY2FzZSAyIHdpdGhvdXQgZG9pbmcgc29tZSBmYW5jeS9xdWVzdGlvbmFibGUgZG9tYWluIHN0dWZmXG4gICAgICAgICAgICAvLyBzbyBsZXQncyBpbnN0ZWFkIGp1c3QgZGVsYXkgYSBiaXQgYmVmb3JlIHdlIHByb2NlZWQgd2l0aCBvdXIgYWN0aW9uIGhlcmVcbiAgICAgICAgICAgIC8vIGluIGNhc2UgMSwgd2UganVzdCB3YWl0IGEgYml0IHVubmVjZXNzYXJpbHkgYnV0IHVsdGltYXRlbHkgZG8gdGhlIHNhbWUgdGhpbmdcbiAgICAgICAgICAgIC8vIGluIGNhc2UgMiwgdGhlIGRlbGF5IGhvcGVmdWxseSBtYWRlIHVzIHdhaXQgbG9uZyBlbm91Z2ggZm9yIHRoZSBjYXB0dXJlIHRvIGZpbmlzaFxuICAgICAgICAgICAgLy8gdHdvIHBvdGVudGlhbCBub25pZGVhbCBvdXRjb21lczpcbiAgICAgICAgICAgIC8vICAgbm9uaWRlYWwgY2FzZSAxOiBjYXB0dXJpbmcgZmFpbHMgZmFzdCwgd2Ugc2l0IGFyb3VuZCBmb3IgYSBmZXcgc2Vjb25kcyB1bm5lY2Vzc2FyaWx5IGJlZm9yZSBwcm9jZWVkaW5nIGNvcnJlY3RseSBieSBjYWxsaW5nIG9uRmF0YWxFcnJvclxuICAgICAgICAgICAgLy8gICBub25pZGVhbCBjYXNlIDI6IGNhc2UgMiBoYXBwZW5zLCAxc3QgZXJyb3IgaXMgY2FwdHVyZWQgYnV0IHNsb3dseSwgdGltZW91dCBjb21wbGV0ZXMgYmVmb3JlIGNhcHR1cmUgYW5kIHdlIHRyZWF0IHNlY29uZCBlcnJvciBhcyB0aGUgc2VuZEVyciBvZiAobm9uZXhpc3RlbnQpIGZhaWx1cmUgZnJvbSB0cnlpbmcgdG8gY2FwdHVyZSBmaXJzdCBlcnJvclxuICAgICAgICAgICAgLy8gbm90ZSB0aGF0IGFmdGVyIGhpdHRpbmcgdGhpcyBicmFuY2gsIHdlIG1pZ2h0IGNhdGNoIG1vcmUgZXJyb3JzIHdoZXJlIChjYXVnaHRTZWNvbmRFcnJvciAmJiAhY2FsbGVkRmF0YWxFcnJvcilcbiAgICAgICAgICAgIC8vICAgd2UgaWdub3JlIHRoZW0gLSB0aGV5IGRvbid0IG1hdHRlciB0byB1cywgd2UncmUganVzdCB3YWl0aW5nIGZvciB0aGUgc2Vjb25kIGVycm9yIHRpbWVvdXQgdG8gZmluaXNoXG4gICAgICAgICAgICBjYXVnaHRTZWNvbmRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjYWxsZWRGYXRhbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gaXQgd2FzIHByb2JhYmx5IGNhc2UgMSwgbGV0J3MgdHJlYXQgZXJyIGFzIHRoZSBzZW5kRXJyIGFuZCBjYWxsIG9uRmF0YWxFcnJvclxuICAgICAgICAgICAgICAgIGNhbGxlZEZhdGFsRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uRmF0YWxFcnJvcihmaXJzdEVycm9yLCBlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRpbWVvdXQpOyAvLyBjYXB0dXJpbmcgY291bGQgdGFrZSBhdCBsZWFzdCBzZW5kVGltZW91dCB0byBmYWlsLCBwbHVzIGFuIGFyYml0cmFyeSBzZWNvbmQgZm9yIGhvdyBsb25nIGl0IHRha2VzIHRvIGNvbGxlY3Qgc3Vycm91bmRpbmcgc291cmNlIGV0Y1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBfZXJyb3JIYW5kbGVyOiB0cnVlIH0sXG4gICk7XG59XG5cbmV4cG9ydHMuT25VbmNhdWdodEV4Y2VwdGlvbiA9IE9uVW5jYXVnaHRFeGNlcHRpb247XG5leHBvcnRzLm1ha2VFcnJvckhhbmRsZXIgPSBtYWtlRXJyb3JIYW5kbGVyO1xuZXhwb3J0cy5vblVuY2F1Z2h0RXhjZXB0aW9uSW50ZWdyYXRpb24gPSBvblVuY2F1Z2h0RXhjZXB0aW9uSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbnVuY2F1Z2h0ZXhjZXB0aW9uLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IGVycm9yaGFuZGxpbmcgPSByZXF1aXJlKCcuL3V0aWxzL2Vycm9yaGFuZGxpbmcuanMnKTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdPblVuaGFuZGxlZFJlamVjdGlvbic7XG5cbmNvbnN0IF9vblVuaGFuZGxlZFJlamVjdGlvbkludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZSB8fCAnd2Fybic7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBnbG9iYWwucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgbWFrZVVuaGFuZGxlZFByb21pc2VIYW5kbGVyKGNsaWVudCwgeyBtb2RlIH0pKTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfb25VbmhhbmRsZWRSZWplY3Rpb25JbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogR2xvYmFsIFByb21pc2UgUmVqZWN0aW9uIGhhbmRsZXIuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYG9uVW5oYW5kbGVkUmVqZWN0aW9uSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBPblVuaGFuZGxlZFJlamVjdGlvbiA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKFxuICBJTlRFR1JBVElPTl9OQU1FLFxuICBvblVuaGFuZGxlZFJlamVjdGlvbkludGVncmF0aW9uLFxuKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4vKipcbiAqIFNlbmQgYW4gZXhjZXB0aW9uIHdpdGggcmVhc29uXG4gKiBAcGFyYW0gcmVhc29uIHN0cmluZ1xuICogQHBhcmFtIHByb21pc2UgcHJvbWlzZVxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RzLlxuICovXG5mdW5jdGlvbiBtYWtlVW5oYW5kbGVkUHJvbWlzZUhhbmRsZXIoXG4gIGNsaWVudCxcbiAgb3B0aW9ucyxcbikge1xuICByZXR1cm4gZnVuY3Rpb24gc2VuZFVuaGFuZGxlZFByb21pc2UocmVhc29uLCBwcm9taXNlKSB7XG4gICAgaWYgKGNvcmUuZ2V0Q2xpZW50KCkgIT09IGNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUuY2FwdHVyZUV4Y2VwdGlvbihyZWFzb24sIHtcbiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBwcm9taXNlLFxuICAgICAgY2FwdHVyZUNvbnRleHQ6IHtcbiAgICAgICAgZXh0cmE6IHsgdW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbjogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ29udW5oYW5kbGVkcmVqZWN0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBoYW5kbGVSZWplY3Rpb24ocmVhc29uLCBvcHRpb25zKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBIYW5kbGVyIGZvciBgbW9kZWAgb3B0aW9uXG5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlUmVqZWN0aW9uKFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICByZWFzb24sXG4gIG9wdGlvbnMsXG4pIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvN2NmNmY5ZTk2NGFhMDA3NzI5NjUzOTFjMjNhY2RhNmQ3MTk3MmE5YS9saWIvaW50ZXJuYWwvcHJvY2Vzcy9wcm9taXNlcy5qcyNMMjM0LUwyNDBcbiAgY29uc3QgcmVqZWN0aW9uV2FybmluZyA9XG4gICAgJ1RoaXMgZXJyb3Igb3JpZ2luYXRlZCBlaXRoZXIgYnkgJyArXG4gICAgJ3Rocm93aW5nIGluc2lkZSBvZiBhbiBhc3luYyBmdW5jdGlvbiB3aXRob3V0IGEgY2F0Y2ggYmxvY2ssICcgK1xuICAgICdvciBieSByZWplY3RpbmcgYSBwcm9taXNlIHdoaWNoIHdhcyBub3QgaGFuZGxlZCB3aXRoIC5jYXRjaCgpLicgK1xuICAgICcgVGhlIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcmVhc29uOic7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICBpZiAob3B0aW9ucy5tb2RlID09PSAnd2FybicpIHtcbiAgICB1dGlscy5jb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4ocmVqZWN0aW9uV2FybmluZyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICBjb25zb2xlLmVycm9yKHJlYXNvbiAmJiByZWFzb24uc3RhY2sgPyByZWFzb24uc3RhY2sgOiByZWFzb24pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMubW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICB1dGlscy5jb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4ocmVqZWN0aW9uV2FybmluZyk7XG4gICAgfSk7XG4gICAgZXJyb3JoYW5kbGluZy5sb2dBbmRFeGl0UHJvY2VzcyhyZWFzb24pO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xufVxuXG5leHBvcnRzLk9uVW5oYW5kbGVkUmVqZWN0aW9uID0gT25VbmhhbmRsZWRSZWplY3Rpb247XG5leHBvcnRzLm1ha2VVbmhhbmRsZWRQcm9taXNlSGFuZGxlciA9IG1ha2VVbmhhbmRsZWRQcm9taXNlSGFuZGxlcjtcbmV4cG9ydHMub25VbmhhbmRsZWRSZWplY3Rpb25JbnRlZ3JhdGlvbiA9IG9uVW5oYW5kbGVkUmVqZWN0aW9uSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbnVuaGFuZGxlZHJlamVjdGlvbi5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbmNvbnN0IHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnU3BvdGxpZ2h0JztcblxuY29uc3QgX3Nwb3RsaWdodEludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgX29wdGlvbnMgPSB7XG4gICAgc2lkZWNhclVybDogb3B0aW9ucy5zaWRlY2FyVXJsIHx8ICdodHRwOi8vbG9jYWxob3N0Ojg5Njkvc3RyZWFtJyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgdXRpbHMubG9nZ2VyLndhcm4oXCJbU3BvdGxpZ2h0XSBJdCBzZWVtcyB5b3UncmUgbm90IGluIGRldiBtb2RlLiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gaGF2ZSBTcG90bGlnaHQgZW5hYmxlZD9cIik7XG4gICAgICB9XG4gICAgICBjb25uZWN0VG9TcG90bGlnaHQoY2xpZW50LCBfb3B0aW9ucyk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3Qgc3BvdGxpZ2h0SW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9zcG90bGlnaHRJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogVXNlIHRoaXMgaW50ZWdyYXRpb24gdG8gc2VuZCBlcnJvcnMgYW5kIHRyYW5zYWN0aW9ucyB0byBTcG90bGlnaHQuXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBzcG90bGlnaHQgYXQgaHR0cHM6Ly9zcG90bGlnaHRqcy5jb21cbiAqXG4gKiBJbXBvcnRhbnQ6IFRoaXMgaW50ZWdyYXRpb24gb25seSB3b3JrcyB3aXRoIE5vZGUgMTggb3IgbmV3ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBzcG90bGlnaHRJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IFNwb3RsaWdodCA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKElOVEVHUkFUSU9OX05BTUUsIHNwb3RsaWdodEludGVncmF0aW9uKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG5mdW5jdGlvbiBjb25uZWN0VG9TcG90bGlnaHQoY2xpZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHNwb3RsaWdodFVybCA9IHBhcnNlU2lkZWNhclVybChvcHRpb25zLnNpZGVjYXJVcmwpO1xuICBpZiAoIXNwb3RsaWdodFVybCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG5cbiAgaWYgKHR5cGVvZiBjbGllbnQub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICB1dGlscy5sb2dnZXIud2FybignW1Nwb3RsaWdodF0gQ2Fubm90IGNvbm5lY3QgdG8gc3BvdGxpZ2h0IGR1ZSB0byBtaXNzaW5nIG1ldGhvZCBvbiBTREsgY2xpZW50IChgY2xpZW50Lm9uYCknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjbGllbnQub24oJ2JlZm9yZUVudmVsb3BlJywgKGVudmVsb3BlKSA9PiB7XG4gICAgaWYgKGZhaWxlZFJlcXVlc3RzID4gMykge1xuICAgICAgdXRpbHMubG9nZ2VyLndhcm4oJ1tTcG90bGlnaHRdIERpc2FibGVkIFNlbnRyeSAtPiBTcG90bGlnaHQgaW50ZWdyYXRpb24gZHVlIHRvIHRvbyBtYW55IGZhaWxlZCByZXF1ZXN0cycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZWRFbnZlbG9wZSA9IHV0aWxzLnNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlKTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBnZXROYXRpdmVIdHRwUmVxdWVzdCgpO1xuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBwYXRoOiBzcG90bGlnaHRVcmwucGF0aG5hbWUsXG4gICAgICAgIGhvc3RuYW1lOiBzcG90bGlnaHRVcmwuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHNwb3RsaWdodFVybC5wb3J0LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXNlbnRyeS1lbnZlbG9wZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVzID0+IHtcbiAgICAgICAgcmVzLm9uKCdkYXRhJywgKCkgPT4ge1xuICAgICAgICAgIC8vIERyYWluIHNvY2tldFxuICAgICAgICB9KTtcblxuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAvLyBEcmFpbiBzb2NrZXRcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5zZXRFbmNvZGluZygndXRmOCcpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmVxLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG4gICAgICB1dGlscy5sb2dnZXIud2FybignW1Nwb3RsaWdodF0gRmFpbGVkIHRvIHNlbmQgZW52ZWxvcGUgdG8gU3BvdGxpZ2h0IFNpZGVjYXInKTtcbiAgICB9KTtcbiAgICByZXEud3JpdGUoc2VyaWFsaXplZEVudmVsb3BlKTtcbiAgICByZXEuZW5kKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNpZGVjYXJVcmwodXJsJDEpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IHVybC5VUkwoYCR7dXJsJDF9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB1dGlscy5sb2dnZXIud2FybihgW1Nwb3RsaWdodF0gSW52YWxpZCBzaWRlY2FyIFVSTDogJHt1cmwkMX1gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogV2Ugd2FudCB0byBnZXQgYW4gdW5wYXRjaGVkIGh0dHAgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBjYXB0dXJpbmcgb3VyIG93biBjYWxscy5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlSHR0cFJlcXVlc3QoKSB7XG4gIGNvbnN0IHsgcmVxdWVzdCB9ID0gaHR0cDtcbiAgaWYgKGlzV3JhcHBlZChyZXF1ZXN0KSkge1xuICAgIHJldHVybiByZXF1ZXN0Ll9fc2VudHJ5X29yaWdpbmFsX187XG4gIH1cblxuICByZXR1cm4gcmVxdWVzdDtcbn1cblxuZnVuY3Rpb24gaXNXcmFwcGVkKGltcGwpIHtcbiAgcmV0dXJuICdfX3NlbnRyeV9vcmlnaW5hbF9fJyBpbiBpbXBsO1xufVxuXG5leHBvcnRzLlNwb3RsaWdodCA9IFNwb3RsaWdodDtcbmV4cG9ydHMuZ2V0TmF0aXZlSHR0cFJlcXVlc3QgPSBnZXROYXRpdmVIdHRwUmVxdWVzdDtcbmV4cG9ydHMuc3BvdGxpZ2h0SW50ZWdyYXRpb24gPSBzcG90bGlnaHRJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwb3RsaWdodC5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3Qgbm9kZVZlcnNpb24gPSByZXF1aXJlKCcuLi8uLi9ub2RlVmVyc2lvbi5qcycpO1xuXG5leHBvcnRzLkNoYW5uZWxOYW1lID0gdm9pZCAwOyhmdW5jdGlvbiAoQ2hhbm5lbE5hbWUpIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9lNmZjODBmODA5ZDEyMTc4MTRjMDQ0ZjUyZWQ0MGVmMTNmMjFlNDNjL2RvY3MvYXBpL0RpYWdub3N0aWNzQ2hhbm5lbC5tZCN1bmRpY2lyZXF1ZXN0Y3JlYXRlXG4gIGNvbnN0IFJlcXVlc3RDcmVhdGUgPSAndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJzsgQ2hhbm5lbE5hbWVbXCJSZXF1ZXN0Q3JlYXRlXCJdID0gUmVxdWVzdENyZWF0ZTtcbiAgY29uc3QgUmVxdWVzdEVuZCA9ICd1bmRpY2k6cmVxdWVzdDpoZWFkZXJzJzsgQ2hhbm5lbE5hbWVbXCJSZXF1ZXN0RW5kXCJdID0gUmVxdWVzdEVuZDtcbiAgY29uc3QgUmVxdWVzdEVycm9yID0gJ3VuZGljaTpyZXF1ZXN0OmVycm9yJzsgQ2hhbm5lbE5hbWVbXCJSZXF1ZXN0RXJyb3JcIl0gPSBSZXF1ZXN0RXJyb3I7XG59KShleHBvcnRzLkNoYW5uZWxOYW1lIHx8IChleHBvcnRzLkNoYW5uZWxOYW1lID0ge30pKTtcblxuLy8gUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSBgY29uc29sZS5sb2dgIHRvIGRlYnVnIHRoZSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB0byB0aGUgYGRpYWdub3N0aWNzX2NoYW5uZWxgIEFQSS5cbi8vIFRvIGRlYnVnLCB5b3UgY2FuIHVzZSBgd3JpdGVGaWxlU3luY2AgdG8gd3JpdGUgdG8gYSBmaWxlOlxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9hc3luY19ob29rcy5odG1sI3ByaW50aW5nLWluLWFzeW5jaG9vay1jYWxsYmFja3Ncbi8vXG4vLyBpbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuLy8gaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG4vL1xuLy8gZnVuY3Rpb24gZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4vLyAgIC8vIFVzZSBhIGZ1bmN0aW9uIGxpa2UgdGhpcyBvbmUgd2hlbiBkZWJ1Z2dpbmcgaW5zaWRlIGFuIEFzeW5jSG9vayBjYWxsYmFja1xuLy8gICAvLyBAdHMtZXhwZWN0LWVycm9yIGFueVxuLy8gICB3cml0ZUZpbGVTeW5jKCdsb2cub3V0JywgYCR7Zm9ybWF0KC4uLmFyZ3MpfVxcbmAsIHsgZmxhZzogJ2EnIH0pO1xuLy8gfVxuXG5jb25zdCBfbmF0aXZlTm9kZUZldGNoaW50ZWdyYXRpb24gPSAoKG9wdGlvbnMpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIHJldHVybiBuZXcgVW5kaWNpKG9wdGlvbnMpIDtcbn0pIDtcblxuY29uc3QgbmF0aXZlTm9kZUZldGNoaW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9uYXRpdmVOb2RlRmV0Y2hpbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogSW5zdHJ1bWVudHMgb3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBtYWRlIHdpdGggdGhlIGB1bmRpY2lgIHBhY2thZ2UgdmlhXG4gKiBOb2RlJ3MgYGRpYWdub3N0aWNzX2NoYW5uZWxgIEFQSS5cbiAqXG4gKiBTdXBwb3J0cyBVbmRpY2kgNC43LjAgb3IgaGlnaGVyLlxuICpcbiAqIFJlcXVpcmVzIE5vZGUgMTYuMTcuMCBvciBoaWdoZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBuYXRpdmVOb2RlRmV0Y2hpbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG5jbGFzcyBVbmRpY2kgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ1VuZGljaSc7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICBfX2luaXQoKSB7dGhpcy5uYW1lID0gVW5kaWNpLmlkO31cblxuICAgIF9faW5pdDIoKSB7dGhpcy5fY3JlYXRlU3BhblVybE1hcCA9IG5ldyB1dGlscy5MUlVNYXAoMTAwKTt9XG4gICAgX19pbml0MygpIHt0aGlzLl9oZWFkZXJzVXJsTWFwID0gbmV3IHV0aWxzLkxSVU1hcCgxMDApO31cblxuICAgY29uc3RydWN0b3IoX29wdGlvbnMgPSB7fSkge1VuZGljaS5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7VW5kaWNpLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7VW5kaWNpLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7VW5kaWNpLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7VW5kaWNpLnByb3RvdHlwZS5fX2luaXQ1LmNhbGwodGhpcyk7VW5kaWNpLnByb3RvdHlwZS5fX2luaXQ2LmNhbGwodGhpcyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgIGJyZWFkY3J1bWJzOiBfb3B0aW9ucy5icmVhZGNydW1icyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9vcHRpb25zLmJyZWFkY3J1bWJzLFxuICAgICAgdHJhY2luZzogX29wdGlvbnMudHJhY2luZyxcbiAgICAgIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0OiBfb3B0aW9ucy5zaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0dXBPbmNlKF9hZGRHbG9iYWxFdmVudFByb2Nlc3Nvcikge1xuICAgIC8vIFJlcXVpcmVzIE5vZGUgMTYrIHRvIHVzZSB0aGUgZGlhZ25vc3RpY3NfY2hhbm5lbCBBUEkuXG4gICAgaWYgKG5vZGVWZXJzaW9uLk5PREVfVkVSU0lPTi5tYWpvciA8IDE2KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGRzO1xuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgZHMgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJykgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfVxuXG4gICAgaWYgKCFkcyB8fCAhZHMuc3Vic2NyaWJlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9lNmZjODBmODA5ZDEyMTc4MTRjMDQ0ZjUyZWQ0MGVmMTNmMjFlNDNjL2RvY3MvYXBpL0RpYWdub3N0aWNzQ2hhbm5lbC5tZFxuICAgIGRzLnN1YnNjcmliZShleHBvcnRzLkNoYW5uZWxOYW1lLlJlcXVlc3RDcmVhdGUsIHRoaXMuX29uUmVxdWVzdENyZWF0ZSk7XG4gICAgZHMuc3Vic2NyaWJlKGV4cG9ydHMuQ2hhbm5lbE5hbWUuUmVxdWVzdEVuZCwgdGhpcy5fb25SZXF1ZXN0RW5kKTtcbiAgICBkcy5zdWJzY3JpYmUoZXhwb3J0cy5DaGFubmVsTmFtZS5SZXF1ZXN0RXJyb3IsIHRoaXMuX29uUmVxdWVzdEVycm9yKTtcbiAgfVxuXG4gIC8qKiBIZWxwZXIgdGhhdCB3cmFwcyBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCBvcHRpb24gKi9cbiAgIF9zaG91bGRDcmVhdGVTcGFuKHVybCkge1xuICAgIGlmICh0aGlzLl9vcHRpb25zLnRyYWNpbmcgPT09IGZhbHNlIHx8ICh0aGlzLl9vcHRpb25zLnRyYWNpbmcgPT09IHVuZGVmaW5lZCAmJiAhY29yZS5oYXNUcmFjaW5nRW5hYmxlZCgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlZERlY2lzaW9uID0gdGhpcy5fY3JlYXRlU3BhblVybE1hcC5nZXQodXJsKTtcbiAgICBpZiAoY2FjaGVkRGVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZERlY2lzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2lzaW9uID0gdGhpcy5fb3B0aW9ucy5zaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCh1cmwpO1xuICAgIHRoaXMuX2NyZWF0ZVNwYW5VcmxNYXAuc2V0KHVybCwgZGVjaXNpb24pO1xuICAgIHJldHVybiBkZWNpc2lvbjtcbiAgfVxuXG4gICBfX2luaXQ0KCkge3RoaXMuX29uUmVxdWVzdENyZWF0ZSA9IChtZXNzYWdlKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgaWYgKCFfb3B0aW9uYWxDaGFpbihbY29yZS5nZXRDbGllbnQsICdjYWxsJywgXzEwID0+IF8xMCgpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTEgPT4gXzExLmdldEludGVncmF0aW9uLCAnY2FsbCcsIF8xMiA9PiBfMTIoVW5kaWNpKV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBtZXNzYWdlIDtcblxuICAgIGNvbnN0IHN0cmluZ1VybCA9IHJlcXVlc3Qub3JpZ2luID8gcmVxdWVzdC5vcmlnaW4udG9TdHJpbmcoKSArIHJlcXVlc3QucGF0aCA6IHJlcXVlc3QucGF0aDtcblxuICAgIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCk7XG4gICAgaWYgKCFjbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29yZS5pc1NlbnRyeVJlcXVlc3RVcmwoc3RyaW5nVXJsLCBjbGllbnQpIHx8IHJlcXVlc3QuX19zZW50cnlfc3Bhbl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgICBjb25zdCBzY29wZSA9IGNvcmUuZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgY29uc3QgaXNvbGF0aW9uU2NvcGUgPSBjb3JlLmdldElzb2xhdGlvblNjb3BlKCk7XG4gICAgY29uc3QgcGFyZW50U3BhbiA9IGNvcmUuZ2V0QWN0aXZlU3BhbigpO1xuXG4gICAgY29uc3Qgc3BhbiA9IHRoaXMuX3Nob3VsZENyZWF0ZVNwYW4oc3RyaW5nVXJsKSA/IGNyZWF0ZVJlcXVlc3RTcGFuKHBhcmVudFNwYW4sIHJlcXVlc3QsIHN0cmluZ1VybCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHJlcXVlc3QuX19zZW50cnlfc3Bhbl9fID0gc3BhbjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRBdHRhY2hUcmFjZURhdGEgPSAodXJsKSA9PiB7XG4gICAgICBpZiAoY2xpZW50T3B0aW9ucy50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWNoZWREZWNpc2lvbiA9IHRoaXMuX2hlYWRlcnNVcmxNYXAuZ2V0KHVybCk7XG4gICAgICBpZiAoY2FjaGVkRGVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkRGVjaXNpb247XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gdXRpbHMuc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKHVybCwgY2xpZW50T3B0aW9ucy50cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyk7XG4gICAgICB0aGlzLl9oZWFkZXJzVXJsTWFwLnNldCh1cmwsIGRlY2lzaW9uKTtcbiAgICAgIHJldHVybiBkZWNpc2lvbjtcbiAgICB9O1xuXG4gICAgaWYgKHNob3VsZEF0dGFjaFRyYWNlRGF0YShzdHJpbmdVcmwpKSB7XG4gICAgICBjb25zdCB7IHRyYWNlSWQsIHNwYW5JZCwgc2FtcGxlZCwgZHNjIH0gPSB7XG4gICAgICAgIC4uLmlzb2xhdGlvblNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpLFxuICAgICAgICAuLi5zY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlbnRyeVRyYWNlSGVhZGVyID0gc3BhbiA/IGNvcmUuc3BhblRvVHJhY2VIZWFkZXIoc3BhbikgOiB1dGlscy5nZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyKHRyYWNlSWQsIHNwYW5JZCwgc2FtcGxlZCk7XG5cbiAgICAgIGNvbnN0IHNlbnRyeUJhZ2dhZ2VIZWFkZXIgPSB1dGlscy5keW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyKFxuICAgICAgICBkc2MgfHxcbiAgICAgICAgICAoc3BhblxuICAgICAgICAgICAgPyBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKVxuICAgICAgICAgICAgOiBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KHRyYWNlSWQsIGNsaWVudCwgc2NvcGUpKSxcbiAgICAgICk7XG5cbiAgICAgIHNldEhlYWRlcnNPblJlcXVlc3QocmVxdWVzdCwgc2VudHJ5VHJhY2VIZWFkZXIsIHNlbnRyeUJhZ2dhZ2VIZWFkZXIpO1xuICAgIH1cbiAgfTt9XG5cbiAgIF9faW5pdDUoKSB7dGhpcy5fb25SZXF1ZXN0RW5kID0gKG1lc3NhZ2UpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBpZiAoIV9vcHRpb25hbENoYWluKFtjb3JlLmdldENsaWVudCwgJ2NhbGwnLCBfMTMgPT4gXzEzKCksICdvcHRpb25hbEFjY2VzcycsIF8xNCA9PiBfMTQuZ2V0SW50ZWdyYXRpb24sICdjYWxsJywgXzE1ID0+IF8xNShVbmRpY2kpXSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlcXVlc3QsIHJlc3BvbnNlIH0gPSBtZXNzYWdlIDtcblxuICAgIGNvbnN0IHN0cmluZ1VybCA9IHJlcXVlc3Qub3JpZ2luID8gcmVxdWVzdC5vcmlnaW4udG9TdHJpbmcoKSArIHJlcXVlc3QucGF0aCA6IHJlcXVlc3QucGF0aDtcblxuICAgIGlmIChjb3JlLmlzU2VudHJ5UmVxdWVzdFVybChzdHJpbmdVcmwsIGNvcmUuZ2V0Q2xpZW50KCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhbiA9IHJlcXVlc3QuX19zZW50cnlfc3Bhbl9fO1xuICAgIGlmIChzcGFuKSB7XG4gICAgICBjb3JlLnNldEh0dHBTdGF0dXMoc3BhbiwgcmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLmJyZWFkY3J1bWJzKSB7XG4gICAgICBjb3JlLmFkZEJyZWFkY3J1bWIoXG4gICAgICAgIHtcbiAgICAgICAgICBjYXRlZ29yeTogJ2h0dHAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICBzdGF0dXNfY29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHVybDogc3RyaW5nVXJsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogJ2h0dHAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZXZlbnQ6ICdyZXNwb25zZScsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O31cblxuICAgX19pbml0NigpIHt0aGlzLl9vblJlcXVlc3RFcnJvciA9IChtZXNzYWdlKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgaWYgKCFfb3B0aW9uYWxDaGFpbihbY29yZS5nZXRDbGllbnQsICdjYWxsJywgXzE2ID0+IF8xNigpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTcgPT4gXzE3LmdldEludGVncmF0aW9uLCAnY2FsbCcsIF8xOCA9PiBfMTgoVW5kaWNpKV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBtZXNzYWdlIDtcblxuICAgIGNvbnN0IHN0cmluZ1VybCA9IHJlcXVlc3Qub3JpZ2luID8gcmVxdWVzdC5vcmlnaW4udG9TdHJpbmcoKSArIHJlcXVlc3QucGF0aCA6IHJlcXVlc3QucGF0aDtcblxuICAgIGlmIChjb3JlLmlzU2VudHJ5UmVxdWVzdFVybChzdHJpbmdVcmwsIGNvcmUuZ2V0Q2xpZW50KCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhbiA9IHJlcXVlc3QuX19zZW50cnlfc3Bhbl9fO1xuICAgIGlmIChzcGFuKSB7XG4gICAgICBzcGFuLnNldFN0YXR1cygnaW50ZXJuYWxfZXJyb3InKTtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuYnJlYWRjcnVtYnMpIHtcbiAgICAgIGNvcmUuYWRkQnJlYWRjcnVtYihcbiAgICAgICAge1xuICAgICAgICAgIGNhdGVnb3J5OiAnaHR0cCcsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogc3RyaW5nVXJsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgdHlwZTogJ2h0dHAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZXZlbnQ6ICdlcnJvcicsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O31cbn1VbmRpY2kuX19pbml0U3RhdGljKCk7XG5cbmZ1bmN0aW9uIHNldEhlYWRlcnNPblJlcXVlc3QoXG4gIHJlcXVlc3QsXG4gIHNlbnRyeVRyYWNlLFxuICBzZW50cnlCYWdnYWdlSGVhZGVyLFxuKSB7XG4gIGxldCBoYXNTZW50cnlIZWFkZXJzO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXF1ZXN0LmhlYWRlcnMpKSB7XG4gICAgaGFzU2VudHJ5SGVhZGVycyA9IHJlcXVlc3QuaGVhZGVycy5zb21lKGhlYWRlckxpbmUgPT4gaGVhZGVyTGluZSA9PT0gJ3NlbnRyeS10cmFjZScpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGhlYWRlckxpbmVzID0gcmVxdWVzdC5oZWFkZXJzLnNwbGl0KCdcXHJcXG4nKTtcbiAgICBoYXNTZW50cnlIZWFkZXJzID0gaGVhZGVyTGluZXMuc29tZShoZWFkZXJMaW5lID0+IGhlYWRlckxpbmUuc3RhcnRzV2l0aCgnc2VudHJ5LXRyYWNlOicpKTtcbiAgfVxuXG4gIGlmIChoYXNTZW50cnlIZWFkZXJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVxdWVzdC5hZGRIZWFkZXIoJ3NlbnRyeS10cmFjZScsIHNlbnRyeVRyYWNlKTtcbiAgaWYgKHNlbnRyeUJhZ2dhZ2VIZWFkZXIpIHtcbiAgICByZXF1ZXN0LmFkZEhlYWRlcignYmFnZ2FnZScsIHNlbnRyeUJhZ2dhZ2VIZWFkZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RTcGFuKFxuICBhY3RpdmVTcGFuLFxuICByZXF1ZXN0LFxuICBzdHJpbmdVcmwsXG4pIHtcbiAgY29uc3QgdXJsID0gdXRpbHMucGFyc2VVcmwoc3RyaW5nVXJsKTtcblxuICBjb25zdCBtZXRob2QgPSByZXF1ZXN0Lm1ldGhvZCB8fCAnR0VUJztcbiAgY29uc3QgZGF0YSA9IHtcbiAgICAnaHR0cC5tZXRob2QnOiBtZXRob2QsXG4gIH07XG4gIGlmICh1cmwuc2VhcmNoKSB7XG4gICAgZGF0YVsnaHR0cC5xdWVyeSddID0gdXJsLnNlYXJjaDtcbiAgfVxuICBpZiAodXJsLmhhc2gpIHtcbiAgICBkYXRhWydodHRwLmZyYWdtZW50J10gPSB1cmwuaGFzaDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgcmV0dXJuIF9vcHRpb25hbENoYWluKFthY3RpdmVTcGFuLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMTkgPT4gXzE5LnN0YXJ0Q2hpbGQsICdjYWxsJywgXzIwID0+IF8yMCh7XG4gICAgb3A6ICdodHRwLmNsaWVudCcsXG4gICAgb3JpZ2luOiAnYXV0by5odHRwLm5vZGUudW5kaWNpJyxcbiAgICBkZXNjcmlwdGlvbjogYCR7bWV0aG9kfSAke3V0aWxzLmdldFNhbml0aXplZFVybFN0cmluZyh1cmwpfWAsXG4gICAgZGF0YSxcbiAgfSldKTtcbn1cblxuZXhwb3J0cy5VbmRpY2kgPSBVbmRpY2k7XG5leHBvcnRzLm5hdGl2ZU5vZGVGZXRjaGludGVncmF0aW9uID0gbmF0aXZlTm9kZUZldGNoaW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG4vKiogbm9ybWFsaXplcyBXaW5kb3dzIHBhdGhzICovXG5mdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoXG4gICAgLnJlcGxhY2UoL15bQS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4XG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKTsgLy8gcmVwbGFjZSBhbGwgYFxcYCBpbnN0YW5jZXMgd2l0aCBgL2Bcbn1cblxuLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqL1xuZnVuY3Rpb24gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKFxuICBiYXNlUGF0aCA9IHByb2Nlc3MuYXJndlsxXSA/IHV0aWxzLmRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6IHByb2Nlc3MuY3dkKCksXG4gIGlzV2luZG93cyA9IHBhdGguc2VwID09PSAnXFxcXCcsXG4pIHtcbiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDtcblxuICByZXR1cm4gKGZpbGVuYW1lKSA9PiB7XG4gICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGlzV2luZG93cyA/IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGZpbGVuYW1lKSA6IGZpbGVuYW1lO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGRpciwgYmFzZTogZmlsZSwgZXh0IH0gPSBwYXRoLnBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7XG5cbiAgICBpZiAoZXh0ID09PSAnLmpzJyB8fCBleHQgPT09ICcubWpzJyB8fCBleHQgPT09ICcuY2pzJykge1xuICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoIWRpcikge1xuICAgICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgICBkaXIgPSAnLic7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IGRpci5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcycpO1xuICAgIGlmIChuID4gLTEpIHtcbiAgICAgIHJldHVybiBgJHtkaXIuc2xpY2UobiArIDE0KS5yZXBsYWNlKC9cXC8vZywgJy4nKX06JHtmaWxlfWA7XG4gICAgfVxuXG4gICAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZVxuICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2VcbiAgICBpZiAoZGlyLnN0YXJ0c1dpdGgobm9ybWFsaXplZEJhc2UpKSB7XG4gICAgICBsZXQgbW9kdWxlTmFtZSA9IGRpci5zbGljZShub3JtYWxpemVkQmFzZS5sZW5ndGggKyAxKS5yZXBsYWNlKC9cXC8vZywgJy4nKTtcblxuICAgICAgaWYgKG1vZHVsZU5hbWUpIHtcbiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7XG4gICAgICB9XG4gICAgICBtb2R1bGVOYW1lICs9IGZpbGU7XG5cbiAgICAgIHJldHVybiBtb2R1bGVOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlO1xuICB9O1xufVxuXG5leHBvcnRzLmNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZSA9IGNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vZHVsZS5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgaW5kZXgkMiA9IHJlcXVpcmUoJy4vYXN5bmMvaW5kZXguanMnKTtcbmNvbnN0IGNsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50LmpzJyk7XG5jb25zdCBjb25zb2xlID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvY29uc29sZS5qcycpO1xuY29uc3QgY29udGV4dCA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2NvbnRleHQuanMnKTtcbmNvbnN0IGNvbnRleHRsaW5lcyA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2NvbnRleHRsaW5lcy5qcycpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2h0dHAuanMnKTtcbmNvbnN0IGluZGV4JDEgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9sb2NhbC12YXJpYWJsZXMvaW5kZXguanMnKTtcbmNvbnN0IG1vZHVsZXMgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9tb2R1bGVzLmpzJyk7XG5jb25zdCBvbnVuY2F1Z2h0ZXhjZXB0aW9uID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvb251bmNhdWdodGV4Y2VwdGlvbi5qcycpO1xuY29uc3Qgb251bmhhbmRsZWRyZWplY3Rpb24gPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9vbnVuaGFuZGxlZHJlamVjdGlvbi5qcycpO1xuY29uc3Qgc3BvdGxpZ2h0ID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvc3BvdGxpZ2h0LmpzJyk7XG5jb25zdCBpbmRleCA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL3VuZGljaS9pbmRleC5qcycpO1xuY29uc3QgbW9kdWxlJDEgPSByZXF1aXJlKCcuL21vZHVsZS5qcycpO1xuY29uc3QgaHR0cCQxID0gcmVxdWlyZSgnLi90cmFuc3BvcnRzL2h0dHAuanMnKTtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYGdldERlZmF1bHRJbnRlZ3JhdGlvbnMob3B0aW9ucylgIGluc3RlYWQuICovXG5jb25zdCBkZWZhdWx0SW50ZWdyYXRpb25zID0gW1xuICAvLyBDb21tb25cbiAgY29yZS5pbmJvdW5kRmlsdGVyc0ludGVncmF0aW9uKCksXG4gIGNvcmUuZnVuY3Rpb25Ub1N0cmluZ0ludGVncmF0aW9uKCksXG4gIGNvcmUubGlua2VkRXJyb3JzSW50ZWdyYXRpb24oKSxcbiAgY29yZS5yZXF1ZXN0RGF0YUludGVncmF0aW9uKCksXG4gIC8vIE5hdGl2ZSBXcmFwcGVyc1xuICBjb25zb2xlLmNvbnNvbGVJbnRlZ3JhdGlvbigpLFxuICBodHRwLmh0dHBJbnRlZ3JhdGlvbigpLFxuICBpbmRleC5uYXRpdmVOb2RlRmV0Y2hpbnRlZ3JhdGlvbigpLFxuICAvLyBHbG9iYWwgSGFuZGxlcnNcbiAgb251bmNhdWdodGV4Y2VwdGlvbi5vblVuY2F1Z2h0RXhjZXB0aW9uSW50ZWdyYXRpb24oKSxcbiAgb251bmhhbmRsZWRyZWplY3Rpb24ub25VbmhhbmRsZWRSZWplY3Rpb25JbnRlZ3JhdGlvbigpLFxuICAvLyBFdmVudCBJbmZvXG4gIGNvbnRleHRsaW5lcy5jb250ZXh0TGluZXNJbnRlZ3JhdGlvbigpLFxuICBpbmRleCQxLmxvY2FsVmFyaWFibGVzSW50ZWdyYXRpb24oKSxcbiAgY29udGV4dC5ub2RlQ29udGV4dEludGVncmF0aW9uKCksXG4gIG1vZHVsZXMubW9kdWxlc0ludGVncmF0aW9uKCksXG5dO1xuXG4vKiogR2V0IHRoZSBkZWZhdWx0IGludGVncmF0aW9ucyBmb3IgdGhlIE5vZGUgU0RLLiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEludGVncmF0aW9ucyhfb3B0aW9ucykge1xuICBjb25zdCBjYXJyaWVyID0gY29yZS5nZXRNYWluQ2FycmllcigpO1xuXG4gIGNvbnN0IGF1dG9sb2FkZWRJbnRlZ3JhdGlvbnMgPSBfb3B0aW9uYWxDaGFpbihbY2FycmllciwgJ2FjY2VzcycsIF8gPT4gXy5fX1NFTlRSWV9fLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5pbnRlZ3JhdGlvbnNdKSB8fCBbXTtcblxuICByZXR1cm4gW1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIC4uLmRlZmF1bHRJbnRlZ3JhdGlvbnMsXG4gICAgLi4uYXV0b2xvYWRlZEludGVncmF0aW9ucyxcbiAgXTtcbn1cblxuLyoqXG4gKiBUaGUgU2VudHJ5IE5vZGUgU0RLIENsaWVudC5cbiAqXG4gKiBUbyB1c2UgdGhpcyBTREssIGNhbGwgdGhlIHtAbGluayBpbml0fSBmdW5jdGlvbiBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiB0aGVcbiAqIG1haW4gZW50cnkgbW9kdWxlLiBUbyBzZXQgY29udGV4dCBpbmZvcm1hdGlvbiBvciBzZW5kIG1hbnVhbCBldmVudHMsIHVzZSB0aGVcbiAqIHByb3ZpZGVkIG1ldGhvZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IHsgaW5pdCB9ID0gcmVxdWlyZSgnQHNlbnRyeS9ub2RlJyk7XG4gKlxuICogaW5pdCh7XG4gKiAgIGRzbjogJ19fRFNOX18nLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IHsgY29uZmlndXJlU2NvcGUgfSA9IHJlcXVpcmUoJ0BzZW50cnkvbm9kZScpO1xuICogY29uZmlndXJlU2NvcGUoKHNjb3BlOiBTY29wZSkgPT4ge1xuICogICBzY29wZS5zZXRFeHRyYSh7IGJhdHRlcnk6IDAuNyB9KTtcbiAqICAgc2NvcGUuc2V0VGFnKHsgdXNlcl9tb2RlOiAnYWRtaW4nIH0pO1xuICogICBzY29wZS5zZXRVc2VyKHsgaWQ6ICc0NzExJyB9KTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IHsgYWRkQnJlYWRjcnVtYiB9ID0gcmVxdWlyZSgnQHNlbnRyeS9ub2RlJyk7XG4gKiBhZGRCcmVhZGNydW1iKHtcbiAqICAgbWVzc2FnZTogJ015IEJyZWFkY3J1bWInLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IFNlbnRyeSA9IHJlcXVpcmUoJ0BzZW50cnkvbm9kZScpO1xuICogU2VudHJ5LmNhcHR1cmVNZXNzYWdlKCdIZWxsbywgd29ybGQhJyk7XG4gKiBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihuZXcgRXJyb3IoJ0dvb2QgYnllJykpO1xuICogU2VudHJ5LmNhcHR1cmVFdmVudCh7XG4gKiAgIG1lc3NhZ2U6ICdNYW51YWwnLFxuICogICBzdGFja3RyYWNlOiBbXG4gKiAgICAgLy8gLi4uXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIE5vZGVPcHRpb25zfSBmb3IgZG9jdW1lbnRhdGlvbiBvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBpbml0KG9wdGlvbnMgPSB7fSkge1xuICBpbmRleCQyLnNldE5vZGVBc3luY0NvbnRleHRTdHJhdGVneSgpO1xuXG4gIGlmIChvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyA9IGdldERlZmF1bHRJbnRlZ3JhdGlvbnMoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmRzbiA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52LlNFTlRSWV9EU04pIHtcbiAgICBvcHRpb25zLmRzbiA9IHByb2Nlc3MuZW52LlNFTlRSWV9EU047XG4gIH1cblxuICBjb25zdCBzZW50cnlUcmFjZXNTYW1wbGVSYXRlID0gcHJvY2Vzcy5lbnYuU0VOVFJZX1RSQUNFU19TQU1QTEVfUkFURTtcbiAgaWYgKG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbnRyeVRyYWNlc1NhbXBsZVJhdGUpIHtcbiAgICBjb25zdCB0cmFjZXNTYW1wbGVSYXRlID0gcGFyc2VGbG9hdChzZW50cnlUcmFjZXNTYW1wbGVSYXRlKTtcbiAgICBpZiAoaXNGaW5pdGUodHJhY2VzU2FtcGxlUmF0ZSkpIHtcbiAgICAgIG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZSA9IHRyYWNlc1NhbXBsZVJhdGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVsZWFzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZGV0ZWN0ZWRSZWxlYXNlID0gZ2V0U2VudHJ5UmVsZWFzZSgpO1xuICAgIGlmIChkZXRlY3RlZFJlbGVhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5yZWxlYXNlID0gZGV0ZWN0ZWRSZWxlYXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiByZWxlYXNlIGlzIG5vdCBwcm92aWRlZCwgdGhlbiB3ZSBzaG91bGQgZGlzYWJsZSBhdXRvU2Vzc2lvblRyYWNraW5nXG4gICAgICBvcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudCA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52LlNFTlRSWV9FTlZJUk9OTUVOVCkge1xuICAgIG9wdGlvbnMuZW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudi5TRU5UUllfRU5WSVJPTk1FTlQ7XG4gIH1cblxuICBpZiAob3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5kc24gIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyA9IHRydWU7XG4gIH1cblxuICBpZiAob3B0aW9ucy5pbnN0cnVtZW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMuaW5zdHJ1bWVudGVyID0gJ3NlbnRyeSc7XG4gIH1cblxuICAvLyBUT0RPKHY3KTogUmVmYWN0b3IgdGhpcyB0byByZWR1Y2UgdGhlIGxvZ2ljIGFib3ZlXG4gIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBzdGFja1BhcnNlcjogdXRpbHMuc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zKG9wdGlvbnMuc3RhY2tQYXJzZXIgfHwgZGVmYXVsdFN0YWNrUGFyc2VyKSxcbiAgICBpbnRlZ3JhdGlvbnM6IGNvcmUuZ2V0SW50ZWdyYXRpb25zVG9TZXR1cChvcHRpb25zKSxcbiAgICB0cmFuc3BvcnQ6IG9wdGlvbnMudHJhbnNwb3J0IHx8IGh0dHAkMS5tYWtlTm9kZVRyYW5zcG9ydCxcbiAgfTtcblxuICBjb3JlLmluaXRBbmRCaW5kKG9wdGlvbnMuY2xpZW50Q2xhc3MgfHwgY2xpZW50Lk5vZGVDbGllbnQsIGNsaWVudE9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcpIHtcbiAgICBzdGFydFNlc3Npb25UcmFja2luZygpO1xuICB9XG5cbiAgdXBkYXRlU2NvcGVGcm9tRW52VmFyaWFibGVzKCk7XG5cbiAgaWYgKG9wdGlvbnMuc3BvdGxpZ2h0KSB7XG4gICAgY29uc3QgY2xpZW50ID0gY29yZS5nZXRDbGllbnQoKTtcbiAgICBpZiAoY2xpZW50ICYmIGNsaWVudC5hZGRJbnRlZ3JhdGlvbikge1xuICAgICAgLy8gZm9yY2UgaW50ZWdyYXRpb25zIHRvIGJlIHNldHVwIGV2ZW4gaWYgbm8gRFNOIHdhcyBzZXRcbiAgICAgIC8vIElmIHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgYmVmb3JlLCB0aGV5IHdpbGwgYmUgaWdub3JlZCBhbnlob3dcbiAgICAgIGNvbnN0IGludGVncmF0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCkuaW50ZWdyYXRpb25zO1xuICAgICAgZm9yIChjb25zdCBpbnRlZ3JhdGlvbiBvZiBpbnRlZ3JhdGlvbnMpIHtcbiAgICAgICAgY2xpZW50LmFkZEludGVncmF0aW9uKGludGVncmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNsaWVudC5hZGRJbnRlZ3JhdGlvbihcbiAgICAgICAgc3BvdGxpZ2h0LnNwb3RsaWdodEludGVncmF0aW9uKHsgc2lkZWNhclVybDogdHlwZW9mIG9wdGlvbnMuc3BvdGxpZ2h0ID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuc3BvdGxpZ2h0IDogdW5kZWZpbmVkIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHRha2VzIGFuIGluc3RhbmNlIG9mIE5vZGVDbGllbnQgYW5kIGNoZWNrcyBpZiBhdXRvU2Vzc2lvblRyYWNraW5nIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGF0IGNsaWVudFxuICovXG5mdW5jdGlvbiBpc0F1dG9TZXNzaW9uVHJhY2tpbmdFbmFibGVkKGNsaWVudCkge1xuICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50T3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpO1xuICBpZiAoY2xpZW50T3B0aW9ucyAmJiBjbGllbnRPcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjbGllbnRPcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByZWxlYXNlIGR5bmFtaWNhbGx5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5mdW5jdGlvbiBnZXRTZW50cnlSZWxlYXNlKGZhbGxiYWNrKSB7XG4gIC8vIEFsd2F5cyByZWFkIGZpcnN0IGFzIFNlbnRyeSB0YWtlcyB0aGlzIGFzIHByZWNlZGVuY2VcbiAgaWYgKHByb2Nlc3MuZW52LlNFTlRSWV9SRUxFQVNFKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlNFTlRSWV9SRUxFQVNFO1xuICB9XG5cbiAgLy8gVGhpcyBzdXBwb3J0cyB0aGUgdmFyaWFibGUgdGhhdCBzZW50cnktd2VicGFjay1wbHVnaW4gaW5qZWN0c1xuICBpZiAodXRpbHMuR0xPQkFMX09CSi5TRU5UUllfUkVMRUFTRSAmJiB1dGlscy5HTE9CQUxfT0JKLlNFTlRSWV9SRUxFQVNFLmlkKSB7XG4gICAgcmV0dXJuIHV0aWxzLkdMT0JBTF9PQkouU0VOVFJZX1JFTEVBU0UuaWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8vIEdpdEh1YiBBY3Rpb25zIC0gaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9jb25maWd1cmluZy1hbmQtbWFuYWdpbmctd29ya2Zsb3dzL3VzaW5nLWVudmlyb25tZW50LXZhcmlhYmxlcyNkZWZhdWx0LWVudmlyb25tZW50LXZhcmlhYmxlc1xuICAgIHByb2Nlc3MuZW52LkdJVEhVQl9TSEEgfHxcbiAgICAvLyBOZXRsaWZ5IC0gaHR0cHM6Ly9kb2NzLm5ldGxpZnkuY29tL2NvbmZpZ3VyZS1idWlsZHMvZW52aXJvbm1lbnQtdmFyaWFibGVzLyNidWlsZC1tZXRhZGF0YVxuICAgIHByb2Nlc3MuZW52LkNPTU1JVF9SRUYgfHxcbiAgICAvLyBWZXJjZWwgLSBodHRwczovL3ZlcmNlbC5jb20vZG9jcy92Mi9idWlsZC1zdGVwI3N5c3RlbS1lbnZpcm9ubWVudC12YXJpYWJsZXNcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfR0lUX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfR0lUSFVCX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfR0lUTEFCX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfQklUQlVDS0VUX0NPTU1JVF9TSEEgfHxcbiAgICAvLyBaZWl0IChub3cga25vd24gYXMgVmVyY2VsKVxuICAgIHByb2Nlc3MuZW52LlpFSVRfR0lUSFVCX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5aRUlUX0dJVExBQl9DT01NSVRfU0hBIHx8XG4gICAgcHJvY2Vzcy5lbnYuWkVJVF9CSVRCVUNLRVRfQ09NTUlUX1NIQSB8fFxuICAgIC8vIENsb3VkZmxhcmUgUGFnZXMgLSBodHRwczovL2RldmVsb3BlcnMuY2xvdWRmbGFyZS5jb20vcGFnZXMvcGxhdGZvcm0vYnVpbGQtY29uZmlndXJhdGlvbi8jZW52aXJvbm1lbnQtdmFyaWFibGVzXG4gICAgcHJvY2Vzcy5lbnYuQ0ZfUEFHRVNfQ09NTUlUX1NIQSB8fFxuICAgIGZhbGxiYWNrXG4gICk7XG59XG5cbi8qKiBOb2RlLmpzIHN0YWNrIHBhcnNlciAqL1xuY29uc3QgZGVmYXVsdFN0YWNrUGFyc2VyID0gdXRpbHMuY3JlYXRlU3RhY2tQYXJzZXIodXRpbHMubm9kZVN0YWNrTGluZVBhcnNlcihtb2R1bGUkMS5jcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoKSkpO1xuXG4vKipcbiAqIEVuYWJsZSBhdXRvbWF0aWMgU2Vzc2lvbiBUcmFja2luZyBmb3IgdGhlIG5vZGUgcHJvY2Vzcy5cbiAqL1xuZnVuY3Rpb24gc3RhcnRTZXNzaW9uVHJhY2tpbmcoKSB7XG4gIGNvcmUuc3RhcnRTZXNzaW9uKCk7XG4gIC8vIEVtaXR0ZWQgaW4gdGhlIGNhc2Ugb2YgaGVhbHRoeSBzZXNzaW9ucywgZXJyb3Igb2YgYG1lY2hhbmlzbS5oYW5kbGVkOiB0cnVlYCBhbmQgdW5oYW5kbGVkcmVqZWN0aW9ucyBiZWNhdXNlXG4gIC8vIFRoZSAnYmVmb3JlRXhpdCcgZXZlbnQgaXMgbm90IGVtaXR0ZWQgZm9yIGNvbmRpdGlvbnMgY2F1c2luZyBleHBsaWNpdCB0ZXJtaW5hdGlvbixcbiAgLy8gc3VjaCBhcyBjYWxsaW5nIHByb2Nlc3MuZXhpdCgpIG9yIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuXG4gIC8vIFJlZjogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19ldmVudF9iZWZvcmVleGl0XG4gIHByb2Nlc3Mub24oJ2JlZm9yZUV4aXQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGNvcmUuZ2V0SXNvbGF0aW9uU2NvcGUoKS5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2V4aXRlZCcsICdjcmFzaGVkJ107XG4gICAgLy8gT25seSBjYWxsIGVuZFNlc3Npb24sIGlmIHRoZSBTZXNzaW9uIGV4aXN0cyBvbiBTY29wZSBhbmQgU2Vzc2lvblN0YXR1cyBpcyBub3QgYVxuICAgIC8vIFRlcm1pbmFsIFN0YXR1cyBpLmUuIEV4aXRlZCBvciBDcmFzaGVkIGJlY2F1c2VcbiAgICAvLyBcIldoZW4gYSBzZXNzaW9uIGlzIG1vdmVkIGF3YXkgZnJvbSBvayBpdCBtdXN0IG5vdCBiZSB1cGRhdGVkIGFueW1vcmUuXCJcbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9zZXNzaW9ucy9cbiAgICBpZiAoc2Vzc2lvbiAmJiAhdGVybWluYWxTdGF0ZXMuaW5jbHVkZXMoc2Vzc2lvbi5zdGF0dXMpKSB7XG4gICAgICBjb3JlLmVuZFNlc3Npb24oKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzY29wZSBhbmQgcHJvcGFnYXRpb24gY29udGV4dCBiYXNlZCBvbiBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yZmNzL2Jsb2IvbWFpbi90ZXh0LzAwNzEtY29udGludWUtdHJhY2Utb3Zlci1wcm9jZXNzLWJvdW5kYXJpZXMubWRcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVNjb3BlRnJvbUVudlZhcmlhYmxlcygpIHtcbiAgY29uc3Qgc2VudHJ5VXNlRW52aXJvbm1lbnQgPSAocHJvY2Vzcy5lbnYuU0VOVFJZX1VTRV9FTlZJUk9OTUVOVCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFbJ2ZhbHNlJywgJ24nLCAnbm8nLCAnb2ZmJywgJzAnXS5pbmNsdWRlcyhzZW50cnlVc2VFbnZpcm9ubWVudCkpIHtcbiAgICBjb25zdCBzZW50cnlUcmFjZUVudiA9IHByb2Nlc3MuZW52LlNFTlRSWV9UUkFDRTtcbiAgICBjb25zdCBiYWdnYWdlRW52ID0gcHJvY2Vzcy5lbnYuU0VOVFJZX0JBR0dBR0U7XG4gICAgY29uc3QgcHJvcGFnYXRpb25Db250ZXh0ID0gdXRpbHMucHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMoc2VudHJ5VHJhY2VFbnYsIGJhZ2dhZ2VFbnYpO1xuICAgIGNvcmUuZ2V0Q3VycmVudFNjb3BlKCkuc2V0UHJvcGFnYXRpb25Db250ZXh0KHByb3BhZ2F0aW9uQ29udGV4dCk7XG4gIH1cbn1cblxuZXhwb3J0cy5kZWZhdWx0SW50ZWdyYXRpb25zID0gZGVmYXVsdEludGVncmF0aW9ucztcbmV4cG9ydHMuZGVmYXVsdFN0YWNrUGFyc2VyID0gZGVmYXVsdFN0YWNrUGFyc2VyO1xuZXhwb3J0cy5nZXREZWZhdWx0SW50ZWdyYXRpb25zID0gZ2V0RGVmYXVsdEludGVncmF0aW9ucztcbmV4cG9ydHMuZ2V0U2VudHJ5UmVsZWFzZSA9IGdldFNlbnRyeVJlbGVhc2U7XG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5pc0F1dG9TZXNzaW9uVHJhY2tpbmdFbmFibGVkID0gaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNkay5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSByZWFkIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0RGlyIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSB0byBzY2FuLiBBbGwgcmV0dXJuZWQgcGF0aHMgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzXG4gKiBkaXJlY3RvcnkuXG4gKiBAcmV0dXJucyBBcnJheSBob2xkaW5nIGFsbCByZWxhdGl2ZSBwYXRoc1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gZGVlcFJlYWREaXJTeW5jKHRhcmdldERpcikge1xuICBjb25zdCB0YXJnZXREaXJBYnNQYXRoID0gcGF0aC5yZXNvbHZlKHRhcmdldERpcik7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldERpckFic1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVhZCBjb250ZW50cyBvZiAke3RhcmdldERpckFic1BhdGh9LiBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuYCk7XG4gIH1cblxuICBpZiAoIWZzLnN0YXRTeW5jKHRhcmdldERpckFic1BhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkIGNvbnRlbnRzIG9mICR7dGFyZ2V0RGlyQWJzUGF0aH0sIGJlY2F1c2UgaXQgaXMgbm90IGEgZGlyZWN0b3J5LmApO1xuICB9XG5cbiAgLy8gVGhpcyBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGl0cyBjb250YWluaW5nIGZ1bmN0aW9uLCBgZGVlcFJlYWREaXJTeW5jYCAoZXhjZXB0IHRoYXQgLSBwdXJlbHkgZm9yIGNvbnZlbmllbmNlIC0gaXRcbiAgLy8gZGVhbHMgaW4gYWJzb2x1dGUgcGF0aHMgcmF0aGVyIHRoYW4gcmVsYXRpdmUgb25lcykuIFdlIG5lZWQgdGhpcyB0byBiZSBzZXBhcmF0ZSBmcm9tIHRoZSBvdXRlciBmdW5jdGlvbiB0byBwcmVzZXJ2ZVxuICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGB0YXJnZXREaXJBYnNQYXRoYCBhbmQgYGN1cnJlbnREaXJBYnNQYXRoYC5cbiAgY29uc3QgZGVlcFJlYWRDdXJyZW50RGlyID0gKGN1cnJlbnREaXJBYnNQYXRoKSA9PiB7XG4gICAgcmV0dXJuIGZzLnJlYWRkaXJTeW5jKGN1cnJlbnREaXJBYnNQYXRoKS5yZWR1Y2UoKGFic1BhdGhzLCBpdGVtTmFtZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbUFic1BhdGggPSBwYXRoLmpvaW4oY3VycmVudERpckFic1BhdGgsIGl0ZW1OYW1lKTtcblxuICAgICAgaWYgKGZzLnN0YXRTeW5jKGl0ZW1BYnNQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHJldHVybiBhYnNQYXRocy5jb25jYXQoZGVlcFJlYWRDdXJyZW50RGlyKGl0ZW1BYnNQYXRoKSk7XG4gICAgICB9XG5cbiAgICAgIGFic1BhdGhzLnB1c2goaXRlbUFic1BhdGgpO1xuICAgICAgcmV0dXJuIGFic1BhdGhzO1xuICAgIH0sIFtdKTtcbiAgfTtcblxuICByZXR1cm4gZGVlcFJlYWRDdXJyZW50RGlyKHRhcmdldERpckFic1BhdGgpLm1hcChhYnNQYXRoID0+IHBhdGgucmVsYXRpdmUodGFyZ2V0RGlyQWJzUGF0aCwgYWJzUGF0aCkpO1xufVxuXG5leHBvcnRzLmRlZXBSZWFkRGlyU3luYyA9IGRlZXBSZWFkRGlyU3luYztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxuIiwKICAgICIvKiEgQHNlbnRyeS9ub2RlIDcuMTIwLjAgKDYxMTI4MmUpIHwgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdCAqL1xuZXhwb3J0cy5iYXNlNjRXb3JrZXJTY3JpcHQ9XCJhVzF3YjNKMElIc2dVMlZ6YzJsdmJpQjlJR1p5YjIwZ0oybHVjM0JsWTNSdmNpYzdDbWx0Y0c5eWRDQjdJSGR2Y210bGNrUmhkR0VzSUhCaGNtVnVkRkJ2Y25RZ2ZTQm1jbTl0SUNkM2IzSnJaWEpmZEdoeVpXRmtjeWM3Q21sdGNHOXlkQ0I3SUhCdmMybDRMQ0J6WlhBZ2ZTQm1jbTl0SUNkd1lYUm9KenNLYVcxd2IzSjBJQ29nWVhNZ2FIUjBjQ0JtY205dElDZG9kSFJ3SnpzS2FXMXdiM0owSUNvZ1lYTWdhSFIwY0hNZ1puSnZiU0FuYUhSMGNITW5Pd3BwYlhCdmNuUWdleUJTWldGa1lXSnNaU0I5SUdaeWIyMGdKM04wY21WaGJTYzdDbWx0Y0c5eWRDQjdJRlZTVENCOUlHWnliMjBnSjNWeWJDYzdDbWx0Y0c5eWRDQjdJR055WldGMFpVZDZhWEFnZlNCbWNtOXRJQ2Q2YkdsaUp6c0thVzF3YjNKMElDb2dZWE1nYm1WMElHWnliMjBnSjI1bGRDYzdDbWx0Y0c5eWRDQXFJR0Z6SUhSc2N5Qm1jbTl0SUNkMGJITW5Pd29LTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5MWJtSnZkVzVrTFcxbGRHaHZaQXBqYjI1emRDQnZZbXBsWTNSVWIxTjBjbWx1WnlBOUlFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jN0Nnb3ZLaW9LSUNvZ1EyaGxZMnR6SUhkb1pYUm9aWElnWjJsMlpXNGdkbUZzZFdVbmN5QjBlWEJsSUdseklHOXVaU0J2WmlCaElHWmxkeUJGY25KdmNpQnZjaUJGY25KdmNpMXNhV3RsQ2lBcUlIdEFiR2x1YXlCcGMwVnljbTl5ZlM0S0lDb0tJQ29nUUhCaGNtRnRJSGRoZENCQklIWmhiSFZsSUhSdklHSmxJR05vWldOclpXUXVDaUFxSUVCeVpYUjFjbTV6SUVFZ1ltOXZiR1ZoYmlCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUhKbGMzVnNkQzRLSUNvdkNtWjFibU4wYVc5dUlHbHpSWEp5YjNJb2QyRjBLU0I3Q2lBZ2MzZHBkR05vSUNodlltcGxZM1JVYjFOMGNtbHVaeTVqWVd4c0tIZGhkQ2twSUhzS0lDQWdJR05oYzJVZ0oxdHZZbXBsWTNRZ1JYSnliM0pkSnpvS0lDQWdJR05oYzJVZ0oxdHZZbXBsWTNRZ1JYaGpaWEIwYVc5dVhTYzZDaUFnSUNCallYTmxJQ2RiYjJKcVpXTjBJRVJQVFVWNFkyVndkR2x2Ymwwbk9nb2dJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUc0tJQ0FnSUdSbFptRjFiSFE2Q2lBZ0lDQWdJSEpsZEhWeWJpQnBjMGx1YzNSaGJtTmxUMllvZDJGMExDQkZjbkp2Y2lrN0NpQWdmUXA5Q2k4cUtnb2dLaUJEYUdWamEzTWdkMmhsZEdobGNpQm5hWFpsYmlCMllXeDFaU0JwY3lCaGJpQnBibk4wWVc1alpTQnZaaUIwYUdVZ1oybDJaVzRnWW5WcGJIUXRhVzRnWTJ4aGMzTXVDaUFxQ2lBcUlFQndZWEpoYlNCM1lYUWdWR2hsSUhaaGJIVmxJSFJ2SUdKbElHTm9aV05yWldRS0lDb2dRSEJoY21GdElHTnNZWE56VG1GdFpRb2dLaUJBY21WMGRYSnVjeUJCSUdKdmIyeGxZVzRnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0J5WlhOMWJIUXVDaUFxTHdwbWRXNWpkR2x2YmlCcGMwSjFhV3gwYVc0b2QyRjBMQ0JqYkdGemMwNWhiV1VwSUhzS0lDQnlaWFIxY200Z2IySnFaV04wVkc5VGRISnBibWN1WTJGc2JDaDNZWFFwSUQwOVBTQmdXMjlpYW1WamRDQWtlMk5zWVhOelRtRnRaWDFkWURzS2ZRb0tMeW9xQ2lBcUlFTm9aV05yY3lCM2FHVjBhR1Z5SUdkcGRtVnVJSFpoYkhWbEozTWdkSGx3WlNCcGN5QmhJSE4wY21sdVp3b2dLaUI3UUd4cGJtc2dhWE5UZEhKcGJtZDlMZ29nS2dvZ0tpQkFjR0Z5WVcwZ2QyRjBJRUVnZG1Gc2RXVWdkRzhnWW1VZ1kyaGxZMnRsWkM0S0lDb2dRSEpsZEhWeWJuTWdRU0JpYjI5c1pXRnVJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdjbVZ6ZFd4MExnb2dLaThLWm5WdVkzUnBiMjRnYVhOVGRISnBibWNvZDJGMEtTQjdDaUFnY21WMGRYSnVJR2x6UW5WcGJIUnBiaWgzWVhRc0lDZFRkSEpwYm1jbktUc0tmUW9LTHlvcUNpQXFJRU5vWldOcmN5QjNhR1YwYUdWeUlHZHBkbVZ1SUhaaGJIVmxKM01nZEhsd1pTQnBjeUJoYmlCdlltcGxZM1FnYkdsMFpYSmhiQ3dnYjNJZ1lTQmpiR0Z6Y3lCcGJuTjBZVzVqWlM0S0lDb2dlMEJzYVc1cklHbHpVR3hoYVc1UFltcGxZM1I5TGdvZ0tnb2dLaUJBY0dGeVlXMGdkMkYwSUVFZ2RtRnNkV1VnZEc4Z1ltVWdZMmhsWTJ0bFpDNEtJQ29nUUhKbGRIVnlibk1nUVNCaWIyOXNaV0Z1SUhKbGNISmxjMlZ1ZEdsdVp5QjBhR1VnY21WemRXeDBMZ29nS2k4S1puVnVZM1JwYjI0Z2FYTlFiR0ZwYms5aWFtVmpkQ2gzWVhRcElIc0tJQ0J5WlhSMWNtNGdhWE5DZFdsc2RHbHVLSGRoZEN3Z0owOWlhbVZqZENjcE93cDlDZ292S2lvS0lDb2dRMmhsWTJ0eklIZG9aWFJvWlhJZ1oybDJaVzRnZG1Gc2RXVW5jeUIwZVhCbElHbHpJR0Z1SUVWMlpXNTBJR2x1YzNSaGJtTmxDaUFxSUh0QWJHbHVheUJwYzBWMlpXNTBmUzRLSUNvS0lDb2dRSEJoY21GdElIZGhkQ0JCSUhaaGJIVmxJSFJ2SUdKbElHTm9aV05yWldRdUNpQXFJRUJ5WlhSMWNtNXpJRUVnWW05dmJHVmhiaUJ5WlhCeVpYTmxiblJwYm1jZ2RHaGxJSEpsYzNWc2RDNEtJQ292Q21aMWJtTjBhVzl1SUdselJYWmxiblFvZDJGMEtTQjdDaUFnY21WMGRYSnVJSFI1Y0dWdlppQkZkbVZ1ZENBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlZZ2FYTkpibk4wWVc1alpVOW1LSGRoZEN3Z1JYWmxiblFwT3dwOUNnb3ZLaW9LSUNvZ1EyaGxZMnR6SUhkb1pYUm9aWElnWjJsMlpXNGdkbUZzZFdVbmN5QjBlWEJsSUdseklHRnVJRVZzWlcxbGJuUWdhVzV6ZEdGdVkyVUtJQ29nZTBCc2FXNXJJR2x6Uld4bGJXVnVkSDB1Q2lBcUNpQXFJRUJ3WVhKaGJTQjNZWFFnUVNCMllXeDFaU0IwYnlCaVpTQmphR1ZqYTJWa0xnb2dLaUJBY21WMGRYSnVjeUJCSUdKdmIyeGxZVzRnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0J5WlhOMWJIUXVDaUFxTHdwbWRXNWpkR2x2YmlCcGMwVnNaVzFsYm5Rb2QyRjBLU0I3Q2lBZ2NtVjBkWEp1SUhSNWNHVnZaaUJGYkdWdFpXNTBJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KaUJwYzBsdWMzUmhibU5sVDJZb2QyRjBMQ0JGYkdWdFpXNTBLVHNLZlFvS0x5b3FDaUFxSUVOb1pXTnJjeUIzYUdWMGFHVnlJR2RwZG1WdUlIWmhiSFZsSUdoaGN5QmhJSFJvWlc0Z1puVnVZM1JwYjI0dUNpQXFJRUJ3WVhKaGJTQjNZWFFnUVNCMllXeDFaU0IwYnlCaVpTQmphR1ZqYTJWa0xnb2dLaThLWm5WdVkzUnBiMjRnYVhOVWFHVnVZV0pzWlNoM1lYUXBJSHNLSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMWFZ1YzJGbVpTMXRaVzFpWlhJdFlXTmpaWE56Q2lBZ2NtVjBkWEp1SUVKdmIyeGxZVzRvZDJGMElDWW1JSGRoZEM1MGFHVnVJQ1ltSUhSNWNHVnZaaUIzWVhRdWRHaGxiaUE5UFQwZ0oyWjFibU4wYVc5dUp5azdDbjBLQ2k4cUtnb2dLaUJEYUdWamEzTWdkMmhsZEdobGNpQm5hWFpsYmlCMllXeDFaU2R6SUhSNWNHVWdhWE1nWVNCVGVXNTBhR1YwYVdORmRtVnVkQW9nS2lCN1FHeHBibXNnYVhOVGVXNTBhR1YwYVdORmRtVnVkSDB1Q2lBcUNpQXFJRUJ3WVhKaGJTQjNZWFFnUVNCMllXeDFaU0IwYnlCaVpTQmphR1ZqYTJWa0xnb2dLaUJBY21WMGRYSnVjeUJCSUdKdmIyeGxZVzRnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0J5WlhOMWJIUXVDaUFxTHdwbWRXNWpkR2x2YmlCcGMxTjViblJvWlhScFkwVjJaVzUwS0hkaGRDa2dld29nSUhKbGRIVnliaUJwYzFCc1lXbHVUMkpxWldOMEtIZGhkQ2tnSmlZZ0oyNWhkR2wyWlVWMlpXNTBKeUJwYmlCM1lYUWdKaVlnSjNCeVpYWmxiblJFWldaaGRXeDBKeUJwYmlCM1lYUWdKaVlnSjNOMGIzQlFjbTl3WVdkaGRHbHZiaWNnYVc0Z2QyRjBPd3A5Q2dvdktpb0tJQ29nUTJobFkydHpJSGRvWlhSb1pYSWdaMmwyWlc0Z2RtRnNkV1VnYVhNZ1RtRk9DaUFxSUh0QWJHbHVheUJwYzA1aFRuMHVDaUFxQ2lBcUlFQndZWEpoYlNCM1lYUWdRU0IyWVd4MVpTQjBieUJpWlNCamFHVmphMlZrTGdvZ0tpQkFjbVYwZFhKdWN5QkJJR0p2YjJ4bFlXNGdjbVZ3Y21WelpXNTBhVzVuSUhSb1pTQnlaWE4xYkhRdUNpQXFMd3BtZFc1amRHbHZiaUJwYzA1aFRpUXhLSGRoZENrZ2V3b2dJSEpsZEhWeWJpQjBlWEJsYjJZZ2QyRjBJRDA5UFNBbmJuVnRZbVZ5SnlBbUppQjNZWFFnSVQwOUlIZGhkRHNLZlFvS0x5b3FDaUFxSUVOb1pXTnJjeUIzYUdWMGFHVnlJR2RwZG1WdUlIWmhiSFZsSjNNZ2RIbHdaU0JwY3lCaGJpQnBibk4wWVc1alpTQnZaaUJ3Y205MmFXUmxaQ0JqYjI1emRISjFZM1J2Y2k0S0lDb2dlMEJzYVc1cklHbHpTVzV6ZEdGdVkyVlBabjB1Q2lBcUNpQXFJRUJ3WVhKaGJTQjNZWFFnUVNCMllXeDFaU0IwYnlCaVpTQmphR1ZqYTJWa0xnb2dLaUJBY0dGeVlXMGdZbUZ6WlNCQklHTnZibk4wY25WamRHOXlJSFJ2SUdKbElIVnpaV1FnYVc0Z1lTQmphR1ZqYXk0S0lDb2dRSEpsZEhWeWJuTWdRU0JpYjI5c1pXRnVJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdjbVZ6ZFd4MExnb2dLaThLWm5WdVkzUnBiMjRnYVhOSmJuTjBZVzVqWlU5bUtIZGhkQ3dnWW1GelpTa2dld29nSUhSeWVTQjdDaUFnSUNCeVpYUjFjbTRnZDJGMElHbHVjM1JoYm1ObGIyWWdZbUZ6WlRzS0lDQjlJR05oZEdOb0lDaGZaU2tnZXdvZ0lDQWdjbVYwZFhKdUlHWmhiSE5sT3dvZ0lIMEtmUW9LTHlvcUNpQXFJRU5vWldOcmN5QjNhR1YwYUdWeUlHZHBkbVZ1SUhaaGJIVmxKM01nZEhsd1pTQnBjeUJoSUZaMVpTQldhV1YzVFc5a1pXd3VDaUFxQ2lBcUlFQndZWEpoYlNCM1lYUWdRU0IyWVd4MVpTQjBieUJpWlNCamFHVmphMlZrTGdvZ0tpQkFjbVYwZFhKdWN5QkJJR0p2YjJ4bFlXNGdjbVZ3Y21WelpXNTBhVzVuSUhSb1pTQnlaWE4xYkhRdUNpQXFMd3BtZFc1amRHbHZiaUJwYzFaMVpWWnBaWGROYjJSbGJDaDNZWFFwSUhzS0lDQXZMeUJPYjNRZ2RYTnBibWNnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzUwYjFOMGNtbHVaeUJpWldOaGRYTmxJR2x1SUZaMVpTQXpJR2wwSUhkdmRXeGtJSEpsWVdRZ2RHaGxJR2x1YzNSaGJtTmxKM01nVTNsdFltOXNLRk41YldKdmJDNTBiMU4wY21sdVoxUmhaeWtnY0hKdmNHVnlkSGt1Q2lBZ2NtVjBkWEp1SUNFaEtIUjVjR1Z2WmlCM1lYUWdQVDA5SUNkdlltcGxZM1FuSUNZbUlIZGhkQ0FoUFQwZ2JuVnNiQ0FtSmlBb0tIZGhkQ0FwTGw5ZmFYTldkV1VnZkh3Z0tIZGhkQ0FwTGw5cGMxWjFaU2twT3dwOUNnb3ZLaW9nU1c1MFpYSnVZV3dnWjJ4dlltRnNJSGRwZEdnZ1kyOXRiVzl1SUhCeWIzQmxjblJwWlhNZ1lXNWtJRk5sYm5SeWVTQmxlSFJsYm5OcGIyNXpJQ0FxTHdvS0x5OGdWR2hsSUdOdlpHVWdZbVZzYjNjZ1ptOXlJQ2RwYzBkc2IySmhiRTlpYWljZ1lXNWtJQ2RIVEU5Q1FVeGZUMEpLSnlCM1lYTWdZMjl3YVdWa0lHWnliMjBnWTI5eVpTMXFjeUJpWldadmNtVWdiVzlrYVdacFkyRjBhVzl1Q2k4dklHaDBkSEJ6T2k4dloybDBhSFZpTG1OdmJTOTZiRzlwY205amF5OWpiM0psTFdwekwySnNiMkl2TVdJNU5EUmtaalUxTWpneVkyUmpPVGxqT1RCa1lqVm1ORGxsWWpCaU5tVmtZVEpqWXpCaE15OXdZV05yWVdkbGN5OWpiM0psTFdwekwybHVkR1Z5Ym1Gc2N5OW5iRzlpWVd3dWFuTUtMeThnWTI5eVpTMXFjeUJvWVhNZ2RHaGxJR1p2Ykd4dmQybHVaeUJzYVdObGJtTmxPZ292THdvdkx5QkRiM0I1Y21sbmFIUWdLR01wSURJd01UUXRNakF5TWlCRVpXNXBjeUJRZFhOb2EyRnlaWFlLTHk4S0x5OGdVR1Z5YldsemMybHZiaUJwY3lCb1pYSmxZbmtnWjNKaGJuUmxaQ3dnWm5KbFpTQnZaaUJqYUdGeVoyVXNJSFJ2SUdGdWVTQndaWEp6YjI0Z2IySjBZV2x1YVc1bklHRWdZMjl3ZVFvdkx5QnZaaUIwYUdseklITnZablIzWVhKbElHRnVaQ0JoYzNOdlkybGhkR1ZrSUdSdlkzVnRaVzUwWVhScGIyNGdabWxzWlhNZ0tIUm9aU0FpVTI5bWRIZGhjbVVpS1N3Z2RHOGdaR1ZoYkFvdkx5QnBiaUIwYUdVZ1UyOW1kSGRoY21VZ2QybDBhRzkxZENCeVpYTjBjbWxqZEdsdmJpd2dhVzVqYkhWa2FXNW5JSGRwZEdodmRYUWdiR2x0YVhSaGRHbHZiaUIwYUdVZ2NtbG5hSFJ6Q2k4dklIUnZJSFZ6WlN3Z1kyOXdlU3dnYlc5a2FXWjVMQ0J0WlhKblpTd2djSFZpYkdsemFDd2daR2x6ZEhKcFluVjBaU3dnYzNWaWJHbGpaVzV6WlN3Z1lXNWtMMjl5SUhObGJHd0tMeThnWTI5d2FXVnpJRzltSUhSb1pTQlRiMlowZDJGeVpTd2dZVzVrSUhSdklIQmxjbTFwZENCd1pYSnpiMjV6SUhSdklIZG9iMjBnZEdobElGTnZablIzWVhKbElHbHpDaTh2SUdaMWNtNXBjMmhsWkNCMGJ5QmtieUJ6Ynl3Z2MzVmlhbVZqZENCMGJ5QjBhR1VnWm05c2JHOTNhVzVuSUdOdmJtUnBkR2x2Ym5NNkNpOHZDaTh2SUZSb1pTQmhZbTkyWlNCamIzQjVjbWxuYUhRZ2JtOTBhV05sSUdGdVpDQjBhR2x6SUhCbGNtMXBjM05wYjI0Z2JtOTBhV05sSUhOb1lXeHNJR0psSUdsdVkyeDFaR1ZrSUdsdUNpOHZJR0ZzYkNCamIzQnBaWE1nYjNJZ2MzVmljM1JoYm5ScFlXd2djRzl5ZEdsdmJuTWdiMllnZEdobElGTnZablIzWVhKbExnb3ZMd292THlCVVNFVWdVMDlHVkZkQlVrVWdTVk1nVUZKUFZrbEVSVVFnSWtGVElFbFRJaXdnVjBsVVNFOVZWQ0JYUVZKU1FVNVVXU0JQUmlCQlRsa2dTMGxPUkN3Z1JWaFFVa1ZUVXlCUFVnb3ZMeUJKVFZCTVNVVkVMQ0JKVGtOTVZVUkpUa2NnUWxWVUlFNVBWQ0JNU1UxSlZFVkVJRlJQSUZSSVJTQlhRVkpTUVU1VVNVVlRJRTlHSUUxRlVrTklRVTVVUVVKSlRFbFVXU3dLTHk4Z1JrbFVUa1ZUVXlCR1QxSWdRU0JRUVZKVVNVTlZURUZTSUZCVlVsQlBVMFVnUVU1RUlFNVBUa2xPUmxKSlRrZEZUVVZPVkM0Z1NVNGdUazhnUlZaRlRsUWdVMGhCVEV3Z1ZFaEZDaTh2SUVGVlZFaFBVbE1nVDFJZ1EwOVFXVkpKUjBoVUlFaFBURVJGVWxNZ1FrVWdURWxCUWt4RklFWlBVaUJCVGxrZ1EweEJTVTBzSUVSQlRVRkhSVk1nVDFJZ1QxUklSVklLTHk4Z1RFbEJRa2xNU1ZSWkxDQlhTRVZVU0VWU0lFbE9JRUZPSUVGRFZFbFBUaUJQUmlCRFQwNVVVa0ZEVkN3Z1ZFOVNWQ0JQVWlCUFZFaEZVbGRKVTBVc0lFRlNTVk5KVGtjZ1JsSlBUU3dLTHk4Z1QxVlVJRTlHSUU5U0lFbE9JRU5QVGs1RlExUkpUMDRnVjBsVVNDQlVTRVVnVTA5R1ZGZEJVa1VnVDFJZ1ZFaEZJRlZUUlNCUFVpQlBWRWhGVWlCRVJVRk1TVTVIVXlCSlRnb3ZMeUJVU0VVZ1UwOUdWRmRCVWtVdUNnb3ZLaW9nVW1WMGRYSnVjeUFuYjJKcUp5QnBaaUJwZENkeklIUm9aU0JuYkc5aVlXd2diMkpxWldOMExDQnZkR2hsY25kcGMyVWdjbVYwZFhKdWN5QjFibVJsWm1sdVpXUWdLaThLWm5WdVkzUnBiMjRnYVhOSGJHOWlZV3hQWW1vb2IySnFLU0I3Q2lBZ2NtVjBkWEp1SUc5aWFpQW1KaUJ2WW1vdVRXRjBhQ0E5UFNCTllYUm9JRDhnYjJKcUlEb2dkVzVrWldacGJtVmtPd3A5Q2dvdktpb2dSMlYwSjNNZ2RHaGxJR2RzYjJKaGJDQnZZbXBsWTNRZ1ptOXlJSFJvWlNCamRYSnlaVzUwSUVwaGRtRlRZM0pwY0hRZ2NuVnVkR2x0WlNBcUx3cGpiMjV6ZENCSFRFOUNRVXhmVDBKS0lEMEtJQ0FvZEhsd1pXOW1JR2RzYjJKaGJGUm9hWE1nUFQwZ0oyOWlhbVZqZENjZ0ppWWdhWE5IYkc5aVlXeFBZbW9vWjJ4dlltRnNWR2hwY3lrcElIeDhDaUFnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUc1dkxYSmxjM1J5YVdOMFpXUXRaMnh2WW1Gc2N3b2dJQ2gwZVhCbGIyWWdkMmx1Wkc5M0lEMDlJQ2R2WW1wbFkzUW5JQ1ltSUdselIyeHZZbUZzVDJKcUtIZHBibVJ2ZHlrcElIeDhDaUFnS0hSNWNHVnZaaUJ6Wld4bUlEMDlJQ2R2WW1wbFkzUW5JQ1ltSUdselIyeHZZbUZzVDJKcUtITmxiR1lwS1NCOGZBb2dJQ2gwZVhCbGIyWWdaMnh2WW1Gc0lEMDlJQ2R2WW1wbFkzUW5JQ1ltSUdselIyeHZZbUZzVDJKcUtHZHNiMkpoYkNrcElIeDhDaUFnS0daMWJtTjBhVzl1SUNncElIc0tJQ0FnSUhKbGRIVnliaUIwYUdsek93b2dJSDBwS0NrZ2ZId0tJQ0I3ZlRzS0NpOHFLZ29nS2lCQVpHVndjbVZqWVhSbFpDQlZjMlVnUjB4UFFrRk1YMDlDU2lCcGJuTjBaV0ZrSUc5eUlGZEpUa1JQVnlCbWNtOXRJRUJ6Wlc1MGNua3ZZbkp2ZDNObGNpNGdWR2hwY3lCM2FXeHNJR0psSUhKbGJXOTJaV1FnYVc0Z2RqZ0tJQ292Q21aMWJtTjBhVzl1SUdkbGRFZHNiMkpoYkU5aWFtVmpkQ2dwSUhzS0lDQnlaWFIxY200Z1IweFBRa0ZNWDA5Q1NpQTdDbjBLQ2k4cUtnb2dLaUJTWlhSMWNtNXpJR0VnWjJ4dlltRnNJSE5wYm1kc1pYUnZiaUJqYjI1MFlXbHVaV1FnYVc0Z2RHaGxJR2RzYjJKaGJDQmdYMTlUUlU1VVVsbGZYMkFnYjJKcVpXTjBMZ29nS2dvZ0tpQkpaaUIwYUdVZ2MybHVaMnhsZEc5dUlHUnZaWE51SjNRZ1lXeHlaV0ZrZVNCbGVHbHpkQ0JwYmlCZ1gxOVRSVTVVVWxsZlgyQXNJR2wwSUhkcGJHd2dZbVVnWTNKbFlYUmxaQ0IxYzJsdVp5QjBhR1VnWjJsMlpXNGdabUZqZEc5eWVRb2dLaUJtZFc1amRHbHZiaUJoYm1RZ1lXUmtaV1FnZEc4Z2RHaGxJR0JmWDFORlRsUlNXVjlmWUNCdlltcGxZM1F1Q2lBcUNpQXFJRUJ3WVhKaGJTQnVZVzFsSUc1aGJXVWdiMllnZEdobElHZHNiMkpoYkNCemFXNW5iR1YwYjI0Z2IyNGdYMTlUUlU1VVVsbGZYd29nS2lCQWNHRnlZVzBnWTNKbFlYUnZjaUJqY21WaGRHOXlJRVpoWTNSdmNua2dablZ1WTNScGIyNGdkRzhnWTNKbFlYUmxJSFJvWlNCemFXNW5iR1YwYjI0Z2FXWWdhWFFnWkc5bGMyNG5kQ0JoYkhKbFlXUjVJR1Y0YVhOMElHOXVJR0JmWDFORlRsUlNXVjlmWUFvZ0tpQkFjR0Z5WVcwZ2IySnFJQ2hQY0hScGIyNWhiQ2tnVkdobElHZHNiMkpoYkNCdlltcGxZM1FnYjI0Z2QyaHBZMmdnZEc4Z2JHOXZheUJtYjNJZ1lGOWZVMFZPVkZKWlgxOWdMQ0JwWmlCdWIzUWdZRWRNVDBKQlRGOVBRa3BnSjNNZ2NtVjBkWEp1SUhaaGJIVmxDaUFxSUVCeVpYUjFjbTV6SUhSb1pTQnphVzVuYkdWMGIyNEtJQ292Q21aMWJtTjBhVzl1SUdkbGRFZHNiMkpoYkZOcGJtZHNaWFJ2YmlodVlXMWxMQ0JqY21WaGRHOXlMQ0J2WW1vcElIc0tJQ0JqYjI1emRDQm5ZbXdnUFNBb2IySnFJSHg4SUVkTVQwSkJURjlQUWtvcElEc0tJQ0JqYjI1emRDQmZYMU5GVGxSU1dWOWZJRDBnS0dkaWJDNWZYMU5GVGxSU1dWOWZJRDBnWjJKc0xsOWZVMFZPVkZKWlgxOGdmSHdnZTMwcE93b2dJR052Ym5OMElITnBibWRzWlhSdmJpQTlJRjlmVTBWT1ZGSlpYMTliYm1GdFpWMGdmSHdnS0Y5ZlUwVk9WRkpaWDE5YmJtRnRaVjBnUFNCamNtVmhkRzl5S0NrcE93b2dJSEpsZEhWeWJpQnphVzVuYkdWMGIyNDdDbjBLQ2k4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ3BqYjI1emRDQlhTVTVFVDFjZ1BTQm5aWFJIYkc5aVlXeFBZbXBsWTNRb0tUc0tDbU52Ym5OMElFUkZSa0ZWVEZSZlRVRllYMU5VVWtsT1IxOU1SVTVIVkVnZ1BTQTRNRHNLQ2k4cUtnb2dLaUJIYVhabGJpQmhJR05vYVd4a0lFUlBUU0JsYkdWdFpXNTBMQ0J5WlhSMWNtNXpJR0VnY1hWbGNua3RjMlZzWldOMGIzSWdjM1JoZEdWdFpXNTBJR1JsYzJOeWFXSnBibWNnZEdoaGRBb2dLaUJoYm1RZ2FYUnpJR0Z1WTJWemRHOXljd29nS2lCbExtY3VJRnRJVkUxTVJXeGxiV1Z1ZEYwZ1BUNGdZbTlrZVNBK0lHUnBkaUErSUdsdWNIVjBJMlp2Ynk1aWRHNWJibUZ0WlQxaVlYcGRDaUFxSUVCeVpYUjFjbTV6SUdkbGJtVnlZWFJsWkNCRVQwMGdjR0YwYUFvZ0tpOEtablZ1WTNScGIyNGdhSFJ0YkZSeVpXVkJjMU4wY21sdVp5Z0tJQ0JsYkdWdExBb2dJRzl3ZEdsdmJuTWdQU0I3ZlN3S0tTQjdDaUFnYVdZZ0tDRmxiR1Z0S1NCN0NpQWdJQ0J5WlhSMWNtNGdKengxYm10dWIzZHVQaWM3Q2lBZ2ZRb0tJQ0F2THlCMGNua3ZZMkYwWTJnZ1ltOTBhRG9LSUNBdkx5QXRJR0ZqWTJWemMybHVaeUJsZG1WdWRDNTBZWEpuWlhRZ0tITmxaU0JuWlhSelpXNTBjbmt2Y21GMlpXNHRhbk1qT0RNNExDQWpOelk0S1FvZ0lDOHZJQzBnWUdoMGJXeFVjbVZsUVhOVGRISnBibWRnSUdKbFkyRjFjMlVnYVhRbmN5QmpiMjF3YkdWNExDQmhibVFnYW5WemRDQmhZMk5sYzNOcGJtY2dkR2hsSUVSUFRTQnBibU52Y25KbFkzUnNlUW9nSUM4dklDMGdZMkZ1SUhSb2NtOTNJR0Z1SUdWNFkyVndkR2x2YmlCcGJpQnpiMjFsSUdOcGNtTjFiWE4wWVc1alpYTXVDaUFnZEhKNUlIc0tJQ0FnSUd4bGRDQmpkWEp5Wlc1MFJXeGxiU0E5SUdWc1pXMGdPd29nSUNBZ1kyOXVjM1FnVFVGWVgxUlNRVlpGVWxORlgwaEZTVWRJVkNBOUlEVTdDaUFnSUNCamIyNXpkQ0J2ZFhRZ1BTQmJYVHNLSUNBZ0lHeGxkQ0JvWldsbmFIUWdQU0F3T3dvZ0lDQWdiR1YwSUd4bGJpQTlJREE3Q2lBZ0lDQmpiMjV6ZENCelpYQmhjbUYwYjNJZ1BTQW5JRDRnSnpzS0lDQWdJR052Ym5OMElITmxjRXhsYm1kMGFDQTlJSE5sY0dGeVlYUnZjaTVzWlc1bmRHZzdDaUFnSUNCc1pYUWdibVY0ZEZOMGNqc0tJQ0FnSUdOdmJuTjBJR3RsZVVGMGRISnpJRDBnUVhKeVlYa3VhWE5CY25KaGVTaHZjSFJwYjI1ektTQS9JRzl3ZEdsdmJuTWdPaUJ2Y0hScGIyNXpMbXRsZVVGMGRISnpPd29nSUNBZ1kyOXVjM1FnYldGNFUzUnlhVzVuVEdWdVozUm9JRDBnS0NGQmNuSmhlUzVwYzBGeWNtRjVLRzl3ZEdsdmJuTXBJQ1ltSUc5d2RHbHZibk11YldGNFUzUnlhVzVuVEdWdVozUm9LU0I4ZkNCRVJVWkJWVXhVWDAxQldGOVRWRkpKVGtkZlRFVk9SMVJJT3dvS0lDQWdJSGRvYVd4bElDaGpkWEp5Wlc1MFJXeGxiU0FtSmlCb1pXbG5hSFFyS3lBOElFMUJXRjlVVWtGV1JWSlRSVjlJUlVsSFNGUXBJSHNLSUNBZ0lDQWdibVY0ZEZOMGNpQTlJRjlvZEcxc1JXeGxiV1Z1ZEVGelUzUnlhVzVuS0dOMWNuSmxiblJGYkdWdExDQnJaWGxCZEhSeWN5azdDaUFnSUNBZ0lDOHZJR0poYVd3Z2IzVjBJR2xtQ2lBZ0lDQWdJQzh2SUMwZ2JtVjRkRk4wY2lCcGN5QjBhR1VnSjJoMGJXd25JR1ZzWlcxbGJuUUtJQ0FnSUNBZ0x5OGdMU0IwYUdVZ2JHVnVaM1JvSUc5bUlIUm9aU0J6ZEhKcGJtY2dkR2hoZENCM2IzVnNaQ0JpWlNCamNtVmhkR1ZrSUdWNFkyVmxaSE1nYldGNFUzUnlhVzVuVEdWdVozUm9DaUFnSUNBZ0lDOHZJQ0FnS0dsbmJtOXlaU0IwYUdseklHeHBiV2wwSUdsbUlIZGxJR0Z5WlNCdmJpQjBhR1VnWm1seWMzUWdhWFJsY21GMGFXOXVLUW9nSUNBZ0lDQnBaaUFvYm1WNGRGTjBjaUE5UFQwZ0oyaDBiV3duSUh4OElDaG9aV2xuYUhRZ1BpQXhJQ1ltSUd4bGJpQXJJRzkxZEM1c1pXNW5kR2dnS2lCelpYQk1aVzVuZEdnZ0t5QnVaWGgwVTNSeUxteGxibWQwYUNBK1BTQnRZWGhUZEhKcGJtZE1aVzVuZEdncEtTQjdDaUFnSUNBZ0lDQWdZbkpsWVdzN0NpQWdJQ0FnSUgwS0NpQWdJQ0FnSUc5MWRDNXdkWE5vS0c1bGVIUlRkSElwT3dvS0lDQWdJQ0FnYkdWdUlDczlJRzVsZUhSVGRISXViR1Z1WjNSb093b2dJQ0FnSUNCamRYSnlaVzUwUld4bGJTQTlJR04xY25KbGJuUkZiR1Z0TG5CaGNtVnVkRTV2WkdVN0NpQWdJQ0I5Q2dvZ0lDQWdjbVYwZFhKdUlHOTFkQzV5WlhabGNuTmxLQ2t1YW05cGJpaHpaWEJoY21GMGIzSXBPd29nSUgwZ1kyRjBZMmdnS0Y5dlR5a2dld29nSUNBZ2NtVjBkWEp1SUNjOGRXNXJibTkzYmo0bk93b2dJSDBLZlFvS0x5b3FDaUFxSUZKbGRIVnlibk1nWVNCemFXMXdiR1VzSUhGMVpYSjVMWE5sYkdWamRHOXlJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JR0VnUkU5TklHVnNaVzFsYm5RS0lDb2daUzVuTGlCYlNGUk5URVZzWlcxbGJuUmRJRDArSUdsdWNIVjBJMlp2Ynk1aWRHNWJibUZ0WlQxaVlYcGRDaUFxSUVCeVpYUjFjbTV6SUdkbGJtVnlZWFJsWkNCRVQwMGdjR0YwYUFvZ0tpOEtablZ1WTNScGIyNGdYMmgwYld4RmJHVnRaVzUwUVhOVGRISnBibWNvWld3c0lHdGxlVUYwZEhKektTQjdDaUFnWTI5dWMzUWdaV3hsYlNBOUlHVnNDZ283Q2dvZ0lHTnZibk4wSUc5MWRDQTlJRnRkT3dvZ0lHeGxkQ0JqYkdGemMwNWhiV1U3Q2lBZ2JHVjBJR05zWVhOelpYTTdDaUFnYkdWMElHdGxlVHNLSUNCc1pYUWdZWFIwY2pzS0lDQnNaWFFnYVRzS0NpQWdhV1lnS0NGbGJHVnRJSHg4SUNGbGJHVnRMblJoWjA1aGJXVXBJSHNLSUNBZ0lISmxkSFZ5YmlBbkp6c0tJQ0I5Q2dvZ0lDOHZJRUIwY3kxbGVIQmxZM1F0WlhKeWIzSWdWMGxPUkU5WElHaGhjeUJJVkUxTVJXeGxiV1Z1ZEFvZ0lHbG1JQ2hYU1U1RVQxY3VTRlJOVEVWc1pXMWxiblFwSUhzS0lDQWdJQzh2SUVsbUlIVnphVzVuSUhSb1pTQmpiMjF3YjI1bGJuUWdibUZ0WlNCaGJtNXZkR0YwYVc5dUlIQnNkV2RwYml3Z2RHaHBjeUIyWVd4MVpTQnRZWGtnWW1VZ1lYWmhhV3hoWW14bElHOXVJSFJvWlNCRVQwMGdibTlrWlFvZ0lDQWdhV1lnS0dWc1pXMGdhVzV6ZEdGdVkyVnZaaUJJVkUxTVJXeGxiV1Z1ZENBbUppQmxiR1Z0TG1SaGRHRnpaWFFnSmlZZ1pXeGxiUzVrWVhSaGMyVjBXeWR6Wlc1MGNubERiMjF3YjI1bGJuUW5YU2tnZXdvZ0lDQWdJQ0J5WlhSMWNtNGdaV3hsYlM1a1lYUmhjMlYwV3lkelpXNTBjbmxEYjIxd2IyNWxiblFuWFRzS0lDQWdJSDBLSUNCOUNnb2dJRzkxZEM1d2RYTm9LR1ZzWlcwdWRHRm5UbUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BLVHNLQ2lBZ0x5OGdVR0ZwY25NZ2IyWWdZWFIwY21saWRYUmxJR3RsZVhNZ1pHVm1hVzVsWkNCcGJpQmdjMlZ5YVdGc2FYcGxRWFIwY21saWRYUmxZQ0JoYm1RZ2RHaGxhWElnZG1Gc2RXVnpJRzl1SUdWc1pXMWxiblF1Q2lBZ1kyOXVjM1FnYTJWNVFYUjBjbEJoYVhKeklEMEtJQ0FnSUd0bGVVRjBkSEp6SUNZbUlHdGxlVUYwZEhKekxteGxibWQwYUFvZ0lDQWdJQ0EvSUd0bGVVRjBkSEp6TG1acGJIUmxjaWhyWlhsQmRIUnlJRDArSUdWc1pXMHVaMlYwUVhSMGNtbGlkWFJsS0d0bGVVRjBkSElwS1M1dFlYQW9hMlY1UVhSMGNpQTlQaUJiYTJWNVFYUjBjaXdnWld4bGJTNW5aWFJCZEhSeWFXSjFkR1VvYTJWNVFYUjBjaWxkS1FvZ0lDQWdJQ0E2SUc1MWJHdzdDZ29nSUdsbUlDaHJaWGxCZEhSeVVHRnBjbk1nSmlZZ2EyVjVRWFIwY2xCaGFYSnpMbXhsYm1kMGFDa2dld29nSUNBZ2EyVjVRWFIwY2xCaGFYSnpMbVp2Y2tWaFkyZ29hMlY1UVhSMGNsQmhhWElnUFQ0Z2V3b2dJQ0FnSUNCdmRYUXVjSFZ6YUNoZ1d5UjdhMlY1UVhSMGNsQmhhWEpiTUYxOVBTSWtlMnRsZVVGMGRISlFZV2x5V3pGZGZTSmRZQ2s3Q2lBZ0lDQjlLVHNLSUNCOUlHVnNjMlVnZXdvZ0lDQWdhV1lnS0dWc1pXMHVhV1FwSUhzS0lDQWdJQ0FnYjNWMExuQjFjMmdvWUNNa2UyVnNaVzB1YVdSOVlDazdDaUFnSUNCOUNnb2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUhCeVpXWmxjaTFqYjI1emRBb2dJQ0FnWTJ4aGMzTk9ZVzFsSUQwZ1pXeGxiUzVqYkdGemMwNWhiV1U3Q2lBZ0lDQnBaaUFvWTJ4aGMzTk9ZVzFsSUNZbUlHbHpVM1J5YVc1bktHTnNZWE56VG1GdFpTa3BJSHNLSUNBZ0lDQWdZMnhoYzNObGN5QTlJR05zWVhOelRtRnRaUzV6Y0d4cGRDZ3ZYSE1yTHlrN0NpQWdJQ0FnSUdadmNpQW9hU0E5SURBN0lHa2dQQ0JqYkdGemMyVnpMbXhsYm1kMGFEc2dhU3NyS1NCN0NpQWdJQ0FnSUNBZ2IzVjBMbkIxYzJnb1lDNGtlMk5zWVhOelpYTmJhVjE5WUNrN0NpQWdJQ0FnSUgwS0lDQWdJSDBLSUNCOUNpQWdZMjl1YzNRZ1lXeHNiM2RsWkVGMGRISnpJRDBnV3lkaGNtbGhMV3hoWW1Wc0p5d2dKM1I1Y0dVbkxDQW5ibUZ0WlNjc0lDZDBhWFJzWlNjc0lDZGhiSFFuWFRzS0lDQm1iM0lnS0drZ1BTQXdPeUJwSUR3Z1lXeHNiM2RsWkVGMGRISnpMbXhsYm1kMGFEc2dhU3NyS1NCN0NpQWdJQ0JyWlhrZ1BTQmhiR3h2ZDJWa1FYUjBjbk5iYVYwN0NpQWdJQ0JoZEhSeUlEMGdaV3hsYlM1blpYUkJkSFJ5YVdKMWRHVW9hMlY1S1RzS0lDQWdJR2xtSUNoaGRIUnlLU0I3Q2lBZ0lDQWdJRzkxZEM1d2RYTm9LR0JiSkh0clpYbDlQU0lrZTJGMGRISjlJbDFnS1RzS0lDQWdJSDBLSUNCOUNpQWdjbVYwZFhKdUlHOTFkQzVxYjJsdUtDY25LVHNLZlFvS0x5b3FDaUFxSUZSb2FYTWdjMlZ5ZG1WeklHRnpJR0VnWW5WcGJHUWdkR2x0WlNCbWJHRm5JSFJvWVhRZ2QybHNiQ0JpWlNCMGNuVmxJR0o1SUdSbFptRjFiSFFzSUdKMWRDQm1ZV3h6WlNCcGJpQnViMjR0WkdWaWRXY2dZblZwYkdSeklHOXlJR2xtSUhWelpYSnpJSEpsY0d4aFkyVWdZRjlmVTBWT1ZGSlpYMFJGUWxWSFgxOWdJR2x1SUhSb1pXbHlJR2RsYm1WeVlYUmxaQ0JqYjJSbExnb2dLZ29nS2lCQlZGUkZUbFJKVDA0NklGUm9hWE1nWTI5dWMzUmhiblFnYlhWemRDQnVaWFpsY2lCamNtOXpjeUJ3WVdOcllXZGxJR0p2ZFc1a1lYSnBaWE1nS0drdVpTNGdZbVVnWlhod2IzSjBaV1FwSUhSdklHZDFZWEpoYm5SbFpTQjBhR0YwSUdsMElHTmhiaUJpWlNCMWMyVmtJR1p2Y2lCMGNtVmxJSE5vWVd0cGJtY3VDaUFxTHdwamIyNXpkQ0JFUlVKVlIxOUNWVWxNUkNReElEMGdLSFI1Y0dWdlppQmZYMU5GVGxSU1dWOUVSVUpWUjE5ZklEMDlQU0FuZFc1a1pXWnBibVZrSnlCOGZDQmZYMU5GVGxSU1dWOUVSVUpWUjE5ZktUc0tDaThxS2lCUWNtVm1hWGdnWm05eUlHeHZaMmRwYm1jZ2MzUnlhVzVuY3lBcUx3cGpiMjV6ZENCUVVrVkdTVmdnUFNBblUyVnVkSEo1SUV4dloyZGxjaUFuT3dvS1kyOXVjM1FnUTA5T1UwOU1SVjlNUlZaRlRGTWdQU0JiQ2lBZ0oyUmxZblZuSnl3S0lDQW5hVzVtYnljc0NpQWdKM2RoY200bkxBb2dJQ2RsY25KdmNpY3NDaUFnSjJ4dlp5Y3NDaUFnSjJGemMyVnlkQ2NzQ2lBZ0ozUnlZV05sSnl3S1hTQTdDZ292S2lvZ1ZHaHBjeUJ0WVhrZ1ltVWdiWFYwWVhSbFpDQmllU0IwYUdVZ1kyOXVjMjlzWlNCcGJuTjBjblZ0Wlc1MFlYUnBiMjR1SUNvdkNtTnZibk4wSUc5eWFXZHBibUZzUTI5dWMyOXNaVTFsZEdodlpITUtDaUE5SUh0OU93b0tMeW9xSUVwVFJHOWpJQ292Q2dvdktpb0tJQ29nVkdWdGNHOXlZWEpwYkhrZ1pHbHpZV0pzWlNCelpXNTBjbmtnWTI5dWMyOXNaU0JwYm5OMGNuVnRaVzUwWVhScGIyNXpMZ29nS2dvZ0tpQkFjR0Z5WVcwZ1kyRnNiR0poWTJzZ1ZHaGxJR1oxYm1OMGFXOXVJSFJ2SUhKMWJpQmhaMkZwYm5OMElIUm9aU0J2Y21sbmFXNWhiQ0JnWTI5dWMyOXNaV0FnYldWemMyRm5aWE1LSUNvZ1FISmxkSFZ5Ym5NZ1ZHaGxJSEpsYzNWc2RITWdiMllnZEdobElHTmhiR3hpWVdOckNpQXFMd3BtZFc1amRHbHZiaUJqYjI1emIyeGxVMkZ1WkdKdmVDaGpZV3hzWW1GamF5a2dld29nSUdsbUlDZ2hLQ2RqYjI1emIyeGxKeUJwYmlCSFRFOUNRVXhmVDBKS0tTa2dld29nSUNBZ2NtVjBkWEp1SUdOaGJHeGlZV05yS0NrN0NpQWdmUW9LSUNCamIyNXpkQ0JqYjI1emIyeGxJRDBnUjB4UFFrRk1YMDlDU2k1amIyNXpiMnhsSURzS0lDQmpiMjV6ZENCM2NtRndjR1ZrUm5WdVkzTWdQU0I3ZlRzS0NpQWdZMjl1YzNRZ2QzSmhjSEJsWkV4bGRtVnNjeUE5SUU5aWFtVmpkQzVyWlhsektHOXlhV2RwYm1Gc1EyOXVjMjlzWlUxbGRHaHZaSE1wSURzS0NpQWdMeThnVW1WemRHOXlaU0JoYkd3Z2QzSmhjSEJsWkNCamIyNXpiMnhsSUcxbGRHaHZaSE1LSUNCM2NtRndjR1ZrVEdWMlpXeHpMbVp2Y2tWaFkyZ29iR1YyWld3Z1BUNGdld29nSUNBZ1kyOXVjM1FnYjNKcFoybHVZV3hEYjI1emIyeGxUV1YwYUc5a0lEMGdiM0pwWjJsdVlXeERiMjV6YjJ4bFRXVjBhRzlrYzF0c1pYWmxiRjBnT3dvZ0lDQWdkM0poY0hCbFpFWjFibU56VzJ4bGRtVnNYU0E5SUdOdmJuTnZiR1ZiYkdWMlpXeGRJRHNLSUNBZ0lHTnZibk52YkdWYmJHVjJaV3hkSUQwZ2IzSnBaMmx1WVd4RGIyNXpiMnhsVFdWMGFHOWtPd29nSUgwcE93b0tJQ0IwY25rZ2V3b2dJQ0FnY21WMGRYSnVJR05oYkd4aVlXTnJLQ2s3Q2lBZ2ZTQm1hVzVoYkd4NUlIc0tJQ0FnSUM4dklGSmxkbVZ5ZENCeVpYTjBiM0poZEdsdmJpQjBieUIzY21Gd2NHVmtJSE4wWVhSbENpQWdJQ0IzY21Gd2NHVmtUR1YyWld4ekxtWnZja1ZoWTJnb2JHVjJaV3dnUFQ0Z2V3b2dJQ0FnSUNCamIyNXpiMnhsVzJ4bGRtVnNYU0E5SUhkeVlYQndaV1JHZFc1amMxdHNaWFpsYkYwZ093b2dJQ0FnZlNrN0NpQWdmUXA5Q2dwbWRXNWpkR2x2YmlCdFlXdGxURzluWjJWeUtDa2dld29nSUd4bGRDQmxibUZpYkdWa0lEMGdabUZzYzJVN0NpQWdZMjl1YzNRZ2JHOW5aMlZ5SUQwZ2V3b2dJQ0FnWlc1aFlteGxPaUFvS1NBOVBpQjdDaUFnSUNBZ0lHVnVZV0pzWldRZ1BTQjBjblZsT3dvZ0lDQWdmU3dLSUNBZ0lHUnBjMkZpYkdVNklDZ3BJRDArSUhzS0lDQWdJQ0FnWlc1aFlteGxaQ0E5SUdaaGJITmxPd29nSUNBZ2ZTd0tJQ0FnSUdselJXNWhZbXhsWkRvZ0tDa2dQVDRnWlc1aFlteGxaQ3dLSUNCOU93b0tJQ0JwWmlBb1JFVkNWVWRmUWxWSlRFUWtNU2tnZXdvZ0lDQWdRMDlPVTA5TVJWOU1SVlpGVEZNdVptOXlSV0ZqYUNodVlXMWxJRDArSUhzS0lDQWdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dWJ5MWxlSEJzYVdOcGRDMWhibmtLSUNBZ0lDQWdiRzluWjJWeVcyNWhiV1ZkSUQwZ0tDNHVMbUZ5WjNNcElEMCtJSHNLSUNBZ0lDQWdJQ0JwWmlBb1pXNWhZbXhsWkNrZ2V3b2dJQ0FnSUNBZ0lDQWdZMjl1YzI5c1pWTmhibVJpYjNnb0tDa2dQVDRnZXdvZ0lDQWdJQ0FnSUNBZ0lDQkhURTlDUVV4ZlQwSktMbU52Ym5OdmJHVmJibUZ0WlYwb1lDUjdVRkpGUmtsWWZWc2tlMjVoYldWOVhUcGdMQ0F1TGk1aGNtZHpLVHNLSUNBZ0lDQWdJQ0FnSUgwcE93b2dJQ0FnSUNBZ0lIMEtJQ0FnSUNBZ2ZUc0tJQ0FnSUgwcE93b2dJSDBnWld4elpTQjdDaUFnSUNCRFQwNVRUMHhGWDB4RlZrVk1VeTVtYjNKRllXTm9LRzVoYldVZ1BUNGdld29nSUNBZ0lDQnNiMmRuWlhKYmJtRnRaVjBnUFNBb0tTQTlQaUIxYm1SbFptbHVaV1E3Q2lBZ0lDQjlLVHNLSUNCOUNnb2dJSEpsZEhWeWJpQnNiMmRuWlhJZ093cDlDZ3BqYjI1emRDQnNiMmRuWlhJZ1BTQnRZV3RsVEc5bloyVnlLQ2s3Q2dvdktpb0tJQ29nVW1WdVpHVnljeUIwYUdVZ2MzUnlhVzVuSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdSSE51TGdvZ0tnb2dLaUJDZVNCa1pXWmhkV3gwTENCMGFHbHpJSGRwYkd3Z2NtVnVaR1Z5SUhSb1pTQndkV0pzYVdNZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnZDJsMGFHOTFkQ0IwYUdVZ2NHRnpjM2R2Y21RS0lDb2dZMjl0Y0c5dVpXNTBMaUJVYnlCblpYUWdkR2hsSUdSbGNISmxZMkYwWldRZ2NISnBkbUYwWlNCeVpYQnlaWE5sYm5SaGRHbHZiaXdnYzJWMElHQjNhWFJvVUdGemMzZHZjbVJnQ2lBcUlIUnZJSFJ5ZFdVdUNpQXFDaUFxSUVCd1lYSmhiU0IzYVhSb1VHRnpjM2R2Y21RZ1YyaGxiaUJ6WlhRZ2RHOGdkSEoxWlN3Z2RHaGxJSEJoYzNOM2IzSmtJSGRwYkd3Z1ltVWdhVzVqYkhWa1pXUXVDaUFxTHdwbWRXNWpkR2x2YmlCa2MyNVViMU4wY21sdVp5aGtjMjRzSUhkcGRHaFFZWE56ZDI5eVpDQTlJR1poYkhObEtTQjdDaUFnWTI5dWMzUWdleUJvYjNOMExDQndZWFJvTENCd1lYTnpMQ0J3YjNKMExDQndjbTlxWldOMFNXUXNJSEJ5YjNSdlkyOXNMQ0J3ZFdKc2FXTkxaWGtnZlNBOUlHUnpianNLSUNCeVpYUjFjbTRnS0FvZ0lDQWdZQ1I3Y0hKdmRHOWpiMng5T2k4dkpIdHdkV0pzYVdOTFpYbDlKSHQzYVhSb1VHRnpjM2R2Y21RZ0ppWWdjR0Z6Y3lBL0lHQTZKSHR3WVhOemZXQWdPaUFuSjMxZ0lDc0tJQ0FnSUdCQUpIdG9iM04wZlNSN2NHOXlkQ0EvSUdBNkpIdHdiM0owZldBZ09pQW5KMzB2Skh0d1lYUm9JRDhnWUNSN2NHRjBhSDB2WUNBNklIQmhkR2g5Skh0d2NtOXFaV04wU1dSOVlBb2dJQ2s3Q24wS0NpOHFLaUJCYmlCbGNuSnZjaUJsYldsMGRHVmtJR0o1SUZObGJuUnllU0JUUkV0eklHRnVaQ0J5Wld4aGRHVmtJSFYwYVd4cGRHbGxjeTRnS2k4S1kyeGhjM01nVTJWdWRISjVSWEp5YjNJZ1pYaDBaVzVrY3lCRmNuSnZjaUI3Q2lBZ0x5b3FJRVJwYzNCc1lYa2dibUZ0WlNCdlppQjBhR2x6SUdWeWNtOXlJR2x1YzNSaGJtTmxMaUFxTHdvS0lDQWdZMjl1YzNSeWRXTjBiM0lvSUcxbGMzTmhaMlVzSUd4dloweGxkbVZzSUQwZ0ozZGhjbTRuS1NCN0NpQWdJQ0J6ZFhCbGNpaHRaWE56WVdkbEtUdDBhR2x6TG0xbGMzTmhaMlVnUFNCdFpYTnpZV2RsT3dvZ0lDQWdkR2hwY3k1dVlXMWxJRDBnYm1WM0xuUmhjbWRsZEM1d2NtOTBiM1I1Y0dVdVkyOXVjM1J5ZFdOMGIzSXVibUZ0WlRzS0lDQWdJQzh2SUZSb2FYTWdjMlYwY3lCMGFHVWdjSEp2ZEc5MGVYQmxJSFJ2SUdKbElHQkZjbkp2Y21Bc0lHNXZkQ0JnVTJWdWRISjVSWEp5YjNKZ0xpQkpkQ2R6SUhWdVkyeGxZWElnZDJoNUlIZGxJR1J2SUhSb2FYTXNJR0oxZENCamIyMXRaVzUwYVc1bklIUm9hWE1nYkdsdVpRb2dJQ0FnTHk4Z2IzVjBJR05oZFhObGN5QjJZWEpwYjNWeklDaHpaV1Z0YVc1bmJIa2dkRzkwWVd4c2VTQjFibkpsYkdGMFpXUXBJSEJzWVhsM2NtbG5hSFFnZEdWemRITWdZMjl1YzJsemRHVnVkR3g1SUhScGJXVWdiM1YwTGlCR1dVa3NJSFJvYVhNZ2JXRnJaWE1LSUNBZ0lDOHZJR2x1YzNSaGJtTmxjeUJ2WmlCZ1UyVnVkSEo1UlhKeWIzSmdJR1poYVd3Z1lHOWlhaUJwYm5OMFlXNWpaVzltSUZObGJuUnllVVZ5Y205eVlDQmphR1ZqYTNNdUNpQWdJQ0JQWW1wbFkzUXVjMlYwVUhKdmRHOTBlWEJsVDJZb2RHaHBjeXdnYm1WM0xuUmhjbWRsZEM1d2NtOTBiM1I1Y0dVcE93b2dJQ0FnZEdocGN5NXNiMmRNWlhabGJDQTlJR3h2WjB4bGRtVnNPd29nSUgwS2ZRb0tMeW9xQ2lBcUlFVnVZMjlrWlhNZ1oybDJaVzRnYjJKcVpXTjBJR2x1ZEc4Z2RYSnNMV1p5YVdWdVpHeDVJR1p2Y20xaGRBb2dLZ29nS2lCQWNHRnlZVzBnYjJKcVpXTjBJRUZ1SUc5aWFtVmpkQ0IwYUdGMElHTnZiblJoYVc1eklITmxjbWxoYkdsNllXSnNaU0IyWVd4MVpYTUtJQ29nUUhKbGRIVnlibk1nYzNSeWFXNW5JRVZ1WTI5a1pXUUtJQ292Q21aMWJtTjBhVzl1SUhWeWJFVnVZMjlrWlNodlltcGxZM1FwSUhzS0lDQnlaWFIxY200Z1QySnFaV04wTG10bGVYTW9iMkpxWldOMEtRb2dJQ0FnTG0xaGNDaHJaWGtnUFQ0Z1lDUjdaVzVqYjJSbFZWSkpRMjl0Y0c5dVpXNTBLR3RsZVNsOVBTUjdaVzVqYjJSbFZWSkpRMjl0Y0c5dVpXNTBLRzlpYW1WamRGdHJaWGxkS1gxZ0tRb2dJQ0FnTG1wdmFXNG9KeVluS1RzS2ZRb0tMeW9xQ2lBcUlGUnlZVzV6Wm05eWJYTWdZVzU1SUdCRmNuSnZjbUFnYjNJZ1lFVjJaVzUwWUNCcGJuUnZJR0VnY0d4aGFXNGdiMkpxWldOMElIZHBkR2dnWVd4c0lHOW1JSFJvWldseUlHVnVkVzFsY21GaWJHVWdjSEp2Y0dWeWRHbGxjeXdnWVc1a0lITnZiV1VnYjJZZ2RHaGxhWElLSUNvZ2JtOXVMV1Z1ZFcxbGNtRmliR1VnY0hKdmNHVnlkR2xsY3lCaGRIUmhZMmhsWkM0S0lDb0tJQ29nUUhCaGNtRnRJSFpoYkhWbElFbHVhWFJwWVd3Z2MyOTFjbU5sSUhSb1lYUWdkMlVnYUdGMlpTQjBieUIwY21GdWMyWnZjbTBnYVc0Z2IzSmtaWElnWm05eUlHbDBJSFJ2SUdKbElIVnpZV0pzWlNCaWVTQjBhR1VnYzJWeWFXRnNhWHBsY2dvZ0tpQkFjbVYwZFhKdWN5QkJiaUJGZG1WdWRDQnZjaUJGY25KdmNpQjBkWEp1WldRZ2FXNTBieUJoYmlCdlltcGxZM1FnTFNCdmNpQjBhR1VnZG1Gc2RXVWdZWEpuZFhKdFpXNTBJR2wwYzJWc1ppd2dkMmhsYmlCMllXeDFaU0JwY3lCdVpXbDBhR1Z5SUdGdUlFVjJaVzUwSUc1dmNnb2dLaUFnWVc0Z1JYSnliM0l1Q2lBcUx3cG1kVzVqZEdsdmJpQmpiMjUyWlhKMFZHOVFiR0ZwYms5aWFtVmpkQ2dLSUNCMllXeDFaU3dLS1FvS0lIc0tJQ0JwWmlBb2FYTkZjbkp2Y2loMllXeDFaU2twSUhzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lHMWxjM05oWjJVNklIWmhiSFZsTG0xbGMzTmhaMlVzQ2lBZ0lDQWdJRzVoYldVNklIWmhiSFZsTG01aGJXVXNDaUFnSUNBZ0lITjBZV05yT2lCMllXeDFaUzV6ZEdGamF5d0tJQ0FnSUNBZ0xpNHVaMlYwVDNkdVVISnZjR1Z5ZEdsbGN5aDJZV3gxWlNrc0NpQWdJQ0I5T3dvZ0lIMGdaV3h6WlNCcFppQW9hWE5GZG1WdWRDaDJZV3gxWlNrcElIc0tJQ0FnSUdOdmJuTjBJRzVsZDA5aWFnb0tJRDBnZXdvZ0lDQWdJQ0IwZVhCbE9pQjJZV3gxWlM1MGVYQmxMQW9nSUNBZ0lDQjBZWEpuWlhRNklITmxjbWxoYkdsNlpVVjJaVzUwVkdGeVoyVjBLSFpoYkhWbExuUmhjbWRsZENrc0NpQWdJQ0FnSUdOMWNuSmxiblJVWVhKblpYUTZJSE5sY21saGJHbDZaVVYyWlc1MFZHRnlaMlYwS0haaGJIVmxMbU4xY25KbGJuUlVZWEpuWlhRcExBb2dJQ0FnSUNBdUxpNW5aWFJQZDI1UWNtOXdaWEowYVdWektIWmhiSFZsS1N3S0lDQWdJSDA3Q2dvZ0lDQWdhV1lnS0hSNWNHVnZaaUJEZFhOMGIyMUZkbVZ1ZENBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlZZ2FYTkpibk4wWVc1alpVOW1LSFpoYkhWbExDQkRkWE4wYjIxRmRtVnVkQ2twSUhzS0lDQWdJQ0FnYm1WM1QySnFMbVJsZEdGcGJDQTlJSFpoYkhWbExtUmxkR0ZwYkRzS0lDQWdJSDBLQ2lBZ0lDQnlaWFIxY200Z2JtVjNUMkpxT3dvZ0lIMGdaV3h6WlNCN0NpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN0NpQWdmUXA5Q2dvdktpb2dRM0psWVhSbGN5QmhJSE4wY21sdVp5QnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR1VnZEdGeVoyVjBJRzltSUdGdUlHQkZkbVZ1ZEdBZ2IySnFaV04wSUNvdkNtWjFibU4wYVc5dUlITmxjbWxoYkdsNlpVVjJaVzUwVkdGeVoyVjBLSFJoY21kbGRDa2dld29nSUhSeWVTQjdDaUFnSUNCeVpYUjFjbTRnYVhORmJHVnRaVzUwS0hSaGNtZGxkQ2tnUHlCb2RHMXNWSEpsWlVGelUzUnlhVzVuS0hSaGNtZGxkQ2tnT2lCUFltcGxZM1F1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuTG1OaGJHd29kR0Z5WjJWMEtUc0tJQ0I5SUdOaGRHTm9JQ2hmYjA4cElIc0tJQ0FnSUhKbGRIVnliaUFuUEhWdWEyNXZkMjQrSnpzS0lDQjlDbjBLQ2k4cUtpQkdhV3gwWlhKeklHOTFkQ0JoYkd3Z1luVjBJR0Z1SUc5aWFtVmpkQ2R6SUc5M2JpQndjbTl3WlhKMGFXVnpJQ292Q21aMWJtTjBhVzl1SUdkbGRFOTNibEJ5YjNCbGNuUnBaWE1vYjJKcUtTQjdDaUFnYVdZZ0tIUjVjR1Z2WmlCdlltb2dQVDA5SUNkdlltcGxZM1FuSUNZbUlHOWlhaUFoUFQwZ2JuVnNiQ2tnZXdvZ0lDQWdZMjl1YzNRZ1pYaDBjbUZqZEdWa1VISnZjSE1nUFNCN2ZUc0tJQ0FnSUdadmNpQW9ZMjl1YzNRZ2NISnZjR1Z5ZEhrZ2FXNGdiMkpxS1NCN0NpQWdJQ0FnSUdsbUlDaFBZbXBsWTNRdWNISnZkRzkwZVhCbExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29iMkpxTENCd2NtOXdaWEowZVNrcElIc0tJQ0FnSUNBZ0lDQmxlSFJ5WVdOMFpXUlFjbTl3YzF0d2NtOXdaWEowZVYwZ1BTQW9iMkpxSUNsYmNISnZjR1Z5ZEhsZE93b2dJQ0FnSUNCOUNpQWdJQ0I5Q2lBZ0lDQnlaWFIxY200Z1pYaDBjbUZqZEdWa1VISnZjSE03Q2lBZ2ZTQmxiSE5sSUhzS0lDQWdJSEpsZEhWeWJpQjdmVHNLSUNCOUNuMEtDaThxS2dvZ0tpQkhhWFpsYmlCaGJua2diMkpxWldOMExDQnlaWFIxY200Z1lTQnVaWGNnYjJKcVpXTjBJR2hoZG1sdVp5QnlaVzF2ZG1Wa0lHRnNiQ0JtYVdWc1pITWdkMmh2YzJVZ2RtRnNkV1VnZDJGeklHQjFibVJsWm1sdVpXUmdMZ29nS2lCWGIzSnJjeUJ5WldOMWNuTnBkbVZzZVNCdmJpQnZZbXBsWTNSeklHRnVaQ0JoY25KaGVYTXVDaUFxQ2lBcUlFRjBkR1Z1ZEdsdmJqb2dWR2hwY3lCbWRXNWpkR2x2YmlCclpXVndjeUJqYVhKamRXeGhjaUJ5WldabGNtVnVZMlZ6SUdsdUlIUm9aU0J5WlhSMWNtNWxaQ0J2WW1wbFkzUXVDaUFxTHdwbWRXNWpkR2x2YmlCa2NtOXdWVzVrWldacGJtVmtTMlY1Y3locGJuQjFkRlpoYkhWbEtTQjdDaUFnTHk4Z1ZHaHBjeUJ0WVhBZ2EyVmxjSE1nZEhKaFkyc2diMllnZDJoaGRDQmhiSEpsWVdSNUlIWnBjMmwwWldRZ2JtOWtaWE1nYldGd0lIUnZMZ29nSUM4dklFOTFjaUJUWlhRZ0xTQmlZWE5sWkNCdFpXMXZRblZwYkdSbGNpQmtiMlZ6YmlkMElIZHZjbXNnYUdWeVpTQmlaV05oZFhObElIZGxJSGRoYm5RZ2RHOGdkR2hsSUc5MWRIQjFkQ0J2WW1wbFkzUWdkRzhnYUdGMlpTQjBhR1VnYzJGdFpTQmphWEpqZFd4aGNnb2dJQzh2SUhKbFptVnlaVzVqWlhNZ1lYTWdkR2hsSUdsdWNIVjBJRzlpYW1WamRDNEtJQ0JqYjI1emRDQnRaVzF2YVhwaGRHbHZiazFoY0NBOUlHNWxkeUJOWVhBb0tUc0tDaUFnTHk4Z1ZHaHBjeUJtZFc1amRHbHZiaUJxZFhOMElIQnliM2hwWlhNZ1lGOWtjbTl3Vlc1a1pXWnBibVZrUzJWNWMyQWdkRzhnYTJWbGNDQjBhR1VnWUcxbGJXOUNkV2xzWkdWeVlDQnZkWFFnYjJZZ2RHaHBjeUJtZFc1amRHbHZiaWR6SUVGUVNRb2dJSEpsZEhWeWJpQmZaSEp2Y0ZWdVpHVm1hVzVsWkV0bGVYTW9hVzV3ZFhSV1lXeDFaU3dnYldWdGIybDZZWFJwYjI1TllYQXBPd3A5Q2dwbWRXNWpkR2x2YmlCZlpISnZjRlZ1WkdWbWFXNWxaRXRsZVhNb2FXNXdkWFJXWVd4MVpTd2diV1Z0YjJsNllYUnBiMjVOWVhBcElIc0tJQ0JwWmlBb2FYTlFiMnB2S0dsdWNIVjBWbUZzZFdVcEtTQjdDaUFnSUNBdkx5QkpaaUIwYUdseklHNXZaR1VnYUdGeklHRnNjbVZoWkhrZ1ltVmxiaUIyYVhOcGRHVmtJR1IxWlNCMGJ5QmhJR05wY21OMWJHRnlJSEpsWm1WeVpXNWpaU3dnY21WMGRYSnVJSFJvWlNCdlltcGxZM1FnYVhRZ2QyRnpJRzFoY0hCbFpDQjBieUJwYmlCMGFHVWdibVYzSUc5aWFtVmpkQW9nSUNBZ1kyOXVjM1FnYldWdGIxWmhiQ0E5SUcxbGJXOXBlbUYwYVc5dVRXRndMbWRsZENocGJuQjFkRlpoYkhWbEtUc0tJQ0FnSUdsbUlDaHRaVzF2Vm1Gc0lDRTlQU0IxYm1SbFptbHVaV1FwSUhzS0lDQWdJQ0FnY21WMGRYSnVJRzFsYlc5V1lXd2dPd29nSUNBZ2ZRb0tJQ0FnSUdOdmJuTjBJSEpsZEhWeWJsWmhiSFZsSUQwZ2UzMDdDaUFnSUNBdkx5QlRkRzl5WlNCMGFHVWdiV0Z3Y0dsdVp5QnZaaUIwYUdseklIWmhiSFZsSUdsdUlHTmhjMlVnZDJVZ2RtbHphWFFnYVhRZ1lXZGhhVzRzSUdsdUlHTmhjMlVnYjJZZ1kybHlZM1ZzWVhJZ1pHRjBZUW9nSUNBZ2JXVnRiMmw2WVhScGIyNU5ZWEF1YzJWMEtHbHVjSFYwVm1Gc2RXVXNJSEpsZEhWeWJsWmhiSFZsS1RzS0NpQWdJQ0JtYjNJZ0tHTnZibk4wSUd0bGVTQnZaaUJQWW1wbFkzUXVhMlY1Y3locGJuQjFkRlpoYkhWbEtTa2dld29nSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR2x1Y0hWMFZtRnNkV1ZiYTJWNVhTQWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIc0tJQ0FnSUNBZ0lDQnlaWFIxY201V1lXeDFaVnRyWlhsZElEMGdYMlJ5YjNCVmJtUmxabWx1WldSTFpYbHpLR2x1Y0hWMFZtRnNkV1ZiYTJWNVhTd2diV1Z0YjJsNllYUnBiMjVOWVhBcE93b2dJQ0FnSUNCOUNpQWdJQ0I5Q2dvZ0lDQWdjbVYwZFhKdUlISmxkSFZ5YmxaaGJIVmxJRHNLSUNCOUNnb2dJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLR2x1Y0hWMFZtRnNkV1VwS1NCN0NpQWdJQ0F2THlCSlppQjBhR2x6SUc1dlpHVWdhR0Z6SUdGc2NtVmhaSGtnWW1WbGJpQjJhWE5wZEdWa0lHUjFaU0IwYnlCaElHTnBjbU4xYkdGeUlISmxabVZ5Wlc1alpTd2djbVYwZFhKdUlIUm9aU0JoY25KaGVTQnBkQ0IzWVhNZ2JXRndjR1ZrSUhSdklHbHVJSFJvWlNCdVpYY2diMkpxWldOMENpQWdJQ0JqYjI1emRDQnRaVzF2Vm1Gc0lEMGdiV1Z0YjJsNllYUnBiMjVOWVhBdVoyVjBLR2x1Y0hWMFZtRnNkV1VwT3dvZ0lDQWdhV1lnS0cxbGJXOVdZV3dnSVQwOUlIVnVaR1ZtYVc1bFpDa2dld29nSUNBZ0lDQnlaWFIxY200Z2JXVnRiMVpoYkNBN0NpQWdJQ0I5Q2dvZ0lDQWdZMjl1YzNRZ2NtVjBkWEp1Vm1Gc2RXVWdQU0JiWFRzS0lDQWdJQzh2SUZOMGIzSmxJSFJvWlNCdFlYQndhVzVuSUc5bUlIUm9hWE1nZG1Gc2RXVWdhVzRnWTJGelpTQjNaU0IyYVhOcGRDQnBkQ0JoWjJGcGJpd2dhVzRnWTJGelpTQnZaaUJqYVhKamRXeGhjaUJrWVhSaENpQWdJQ0J0WlcxdmFYcGhkR2x2YmsxaGNDNXpaWFFvYVc1d2RYUldZV3gxWlN3Z2NtVjBkWEp1Vm1Gc2RXVXBPd29LSUNBZ0lHbHVjSFYwVm1Gc2RXVXVabTl5UldGamFDZ29hWFJsYlNrZ1BUNGdld29nSUNBZ0lDQnlaWFIxY201V1lXeDFaUzV3ZFhOb0tGOWtjbTl3Vlc1a1pXWnBibVZrUzJWNWN5aHBkR1Z0TENCdFpXMXZhWHBoZEdsdmJrMWhjQ2twT3dvZ0lDQWdmU2s3Q2dvZ0lDQWdjbVYwZFhKdUlISmxkSFZ5YmxaaGJIVmxJRHNLSUNCOUNnb2dJSEpsZEhWeWJpQnBibkIxZEZaaGJIVmxPd3A5Q2dwbWRXNWpkR2x2YmlCcGMxQnZhbThvYVc1d2RYUXBJSHNLSUNCcFppQW9JV2x6VUd4aGFXNVBZbXBsWTNRb2FXNXdkWFFwS1NCN0NpQWdJQ0J5WlhSMWNtNGdabUZzYzJVN0NpQWdmUW9LSUNCMGNua2dld29nSUNBZ1kyOXVjM1FnYm1GdFpTQTlJQ2hQWW1wbFkzUXVaMlYwVUhKdmRHOTBlWEJsVDJZb2FXNXdkWFFwSUNrdVkyOXVjM1J5ZFdOMGIzSXVibUZ0WlRzS0lDQWdJSEpsZEhWeWJpQWhibUZ0WlNCOGZDQnVZVzFsSUQwOVBTQW5UMkpxWldOMEp6c0tJQ0I5SUdOaGRHTm9JQ2hsS1NCN0NpQWdJQ0J5WlhSMWNtNGdkSEoxWlRzS0lDQjlDbjBLQ2k4cUtnb2dLaUJFYjJWeklIUm9hWE1nWm1sc1pXNWhiV1VnYkc5dmF5QnNhV3RsSUdsMEozTWdjR0Z5ZENCdlppQjBhR1VnWVhCd0lHTnZaR1UvQ2lBcUx3cG1kVzVqZEdsdmJpQm1hV3hsYm1GdFpVbHpTVzVCY0hBb1ptbHNaVzVoYldVc0lHbHpUbUYwYVhabElEMGdabUZzYzJVcElIc0tJQ0JqYjI1emRDQnBjMGx1ZEdWeWJtRnNJRDBLSUNBZ0lHbHpUbUYwYVhabElIeDhDaUFnSUNBb1ptbHNaVzVoYldVZ0ppWUtJQ0FnSUNBZ0x5OGdTWFFuY3lCdWIzUWdhVzUwWlhKdVlXd2dhV1lnYVhRbmN5QmhiaUJoWW5OdmJIVjBaU0JzYVc1MWVDQndZWFJvQ2lBZ0lDQWdJQ0ZtYVd4bGJtRnRaUzV6ZEdGeWRITlhhWFJvS0Njdkp5a2dKaVlLSUNBZ0lDQWdMeThnU1hRbmN5QnViM1FnYVc1MFpYSnVZV3dnYVdZZ2FYUW5jeUJoYmlCaFluTnZiSFYwWlNCM2FXNWtiM2R6SUhCaGRHZ0tJQ0FnSUNBZ0lXWnBiR1Z1WVcxbExtMWhkR05vS0M5ZVcwRXRXbDA2THlrZ0ppWUtJQ0FnSUNBZ0x5OGdTWFFuY3lCdWIzUWdhVzUwWlhKdVlXd2dhV1lnZEdobElIQmhkR2dnYVhNZ2MzUmhjblJwYm1jZ2QybDBhQ0JoSUdSdmRBb2dJQ0FnSUNBaFptbHNaVzVoYldVdWMzUmhjblJ6VjJsMGFDZ25MaWNwSUNZbUNpQWdJQ0FnSUM4dklFbDBKM01nYm05MElHbHVkR1Z5Ym1Gc0lHbG1JSFJvWlNCbWNtRnRaU0JvWVhNZ1lTQndjbTkwYjJOdmJDNGdTVzRnYm05a1pTd2dkR2hwY3lCcGN5QjFjM1ZoYkd4NUlIUm9aU0JqWVhObElHbG1JSFJvWlNCbWFXeGxJR2R2ZENCd2NtVXRjSEp2WTJWemMyVmtJSGRwZEdnZ1lTQmlkVzVrYkdWeUlHeHBhMlVnZDJWaWNHRmphd29nSUNBZ0lDQWhabWxzWlc1aGJXVXViV0YwWTJnb0wxNWJZUzE2UVMxYVhTaGJZUzE2UVMxYU1DMDVMbHd0SzEwcEtqcGNMMXd2THlrcE95QXZMeUJUWTJobGJXRWdabkp2YlRvZ2FIUjBjSE02THk5emRHRmphMjkyWlhKbWJHOTNMbU52YlM5aEx6TTJOREUzT0RJS0NpQWdMeThnYVc1ZllYQndJR2x6SUdGc2JDQjBhR0YwSjNNZ2JtOTBJR0Z1SUdsdWRHVnlibUZzSUU1dlpHVWdablZ1WTNScGIyNGdiM0lnWVNCdGIyUjFiR1VnZDJsMGFHbHVJRzV2WkdWZmJXOWtkV3hsY3dvZ0lDOHZJRzV2ZEdVZ2RHaGhkQ0JwYzA1aGRHbDJaU0JoY0hCbFlYSnpJSFJ2SUhKbGRIVnliaUIwY25WbElHVjJaVzRnWm05eUlHNXZaR1VnWTI5eVpTQnNhV0p5WVhKcFpYTUtJQ0F2THlCelpXVWdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMmRsZEhObGJuUnllUzl5WVhabGJpMXViMlJsTDJsemMzVmxjeTh4TnpZS0NpQWdjbVYwZFhKdUlDRnBjMGx1ZEdWeWJtRnNJQ1ltSUdacGJHVnVZVzFsSUNFOVBTQjFibVJsWm1sdVpXUWdKaVlnSVdacGJHVnVZVzFsTG1sdVkyeDFaR1Z6S0NkdWIyUmxYMjF2WkhWc1pYTXZKeWs3Q24wS0NtTnZibk4wSUZOVVFVTkxWRkpCUTBWZlJsSkJUVVZmVEVsTlNWUWdQU0ExTURzS1kyOXVjM1FnVTFSU1NWQmZSbEpCVFVWZlVrVkhSVmhRSUQwZ0wyTmhjSFIxY21WTlpYTnpZV2RsZkdOaGNIUjFjbVZGZUdObGNIUnBiMjR2T3dvS0x5b3FDaUFxSUZKbGJXOTJaWE1nVTJWdWRISjVJR1p5WVcxbGN5Qm1jbTl0SUhSb1pTQjBiM0FnWVc1a0lHSnZkSFJ2YlNCdlppQjBhR1VnYzNSaFkyc2dhV1lnY0hKbGMyVnVkQ0JoYm1RZ1pXNW1iM0pqWlhNZ1lTQnNhVzFwZENCdlppQnRZWGdnYm5WdFltVnlJRzltSUdaeVlXMWxjeTRLSUNvZ1FYTnpkVzFsY3lCemRHRmpheUJwYm5CMWRDQnBjeUJ2Y21SbGNtVmtJR1p5YjIwZ2RHOXdJSFJ2SUdKdmRIUnZiU0JoYm1RZ2NtVjBkWEp1Y3lCMGFHVWdjbVYyWlhKelpTQnlaWEJ5WlhObGJuUmhkR2x2YmlCemJ5QmpZV3hzSUhOcGRHVWdiMllnZEdobENpQXFJR1oxYm1OMGFXOXVJSFJvWVhRZ1kyRjFjMlZrSUhSb1pTQmpjbUZ6YUNCcGN5QjBhR1VnYkdGemRDQm1jbUZ0WlNCcGJpQjBhR1VnWVhKeVlYa3VDaUFxSUVCb2FXUmtaVzRLSUNvdkNtWjFibU4wYVc5dUlITjBjbWx3VTJWdWRISjVSbkpoYldWelFXNWtVbVYyWlhKelpTaHpkR0ZqYXlrZ2V3b2dJR2xtSUNnaGMzUmhZMnN1YkdWdVozUm9LU0I3Q2lBZ0lDQnlaWFIxY200Z1cxMDdDaUFnZlFvS0lDQmpiMjV6ZENCc2IyTmhiRk4wWVdOcklEMGdRWEp5WVhrdVpuSnZiU2h6ZEdGamF5azdDZ29nSUM4dklFbG1JSE4wWVdOcklITjBZWEowY3lCM2FYUm9JRzl1WlNCdlppQnZkWElnUVZCSklHTmhiR3h6TENCeVpXMXZkbVVnYVhRZ0tITjBZWEowY3l3Z2JXVmhibWx1WnlCcGRDZHpJSFJvWlNCMGIzQWdiMllnZEdobElITjBZV05ySUMwZ1lXdGhJR3hoYzNRZ1kyRnNiQ2tLSUNCcFppQW9MM05sYm5SeWVWZHlZWEJ3WldRdkxuUmxjM1FvYkc5allXeFRkR0ZqYTF0c2IyTmhiRk4wWVdOckxteGxibWQwYUNBdElERmRMbVoxYm1OMGFXOXVJSHg4SUNjbktTa2dld29nSUNBZ2JHOWpZV3hUZEdGamF5NXdiM0FvS1RzS0lDQjlDZ29nSUM4dklGSmxkbVZ5YzJsdVp5QnBiaUIwYUdVZ2JXbGtaR3hsSUc5bUlIUm9aU0J3Y205alpXUjFjbVVnWVd4c2IzZHpJSFZ6SUhSdklHcDFjM1FnY0c5d0lIUm9aU0IyWVd4MVpYTWdiMlptSUhSb1pTQnpkR0ZqYXdvZ0lHeHZZMkZzVTNSaFkyc3VjbVYyWlhKelpTZ3BPd29LSUNBdkx5QkpaaUJ6ZEdGamF5QmxibVJ6SUhkcGRHZ2diMjVsSUc5bUlHOTFjaUJwYm5SbGNtNWhiQ0JCVUVrZ1kyRnNiSE1zSUhKbGJXOTJaU0JwZENBb1pXNWtjeXdnYldWaGJtbHVaeUJwZENkeklIUm9aU0JpYjNSMGIyMGdiMllnZEdobElITjBZV05ySUMwZ1lXdGhJSFJ2Y0MxdGIzTjBJR05oYkd3cENpQWdhV1lnS0ZOVVVrbFFYMFpTUVUxRlgxSkZSMFZZVUM1MFpYTjBLR3h2WTJGc1UzUmhZMnRiYkc5allXeFRkR0ZqYXk1c1pXNW5kR2dnTFNBeFhTNW1kVzVqZEdsdmJpQjhmQ0FuSnlrcElIc0tJQ0FnSUd4dlkyRnNVM1JoWTJzdWNHOXdLQ2s3Q2dvZ0lDQWdMeThnVjJobGJpQjFjMmx1WnlCemVXNTBhR1YwYVdNZ1pYWmxiblJ6TENCM1pTQjNhV3hzSUdoaGRtVWdZU0F5SUd4bGRtVnNjeUJrWldWd0lITjBZV05yTENCaGN5QmdibVYzSUVWeWNtOXlLQ2RUWlc1MGNua2djM2x1ZEdobGRHbGpSWGhqWlhCMGFXOXVKeWxnQ2lBZ0lDQXZMeUJwY3lCd2NtOWtkV05sWkNCM2FYUm9hVzRnZEdobElHaDFZaUJwZEhObGJHWXNJRzFoYTJsdVp5QnBkRG9LSUNBZ0lDOHZDaUFnSUNBdkx5QWdJRk5sYm5SeWVTNWpZWEIwZFhKbFJYaGpaWEIwYVc5dUtDa0tJQ0FnSUM4dklDQWdaMlYwUTNWeWNtVnVkRWgxWWlncExtTmhjSFIxY21WRmVHTmxjSFJwYjI0b0tRb2dJQ0FnTHk4S0lDQWdJQzh2SUdsdWMzUmxZV1FnYjJZZ2FuVnpkQ0IwYUdVZ2RHOXdJR0JUWlc1MGNubGdJR05oYkd3Z2FYUnpaV3htTGdvZ0lDQWdMeThnVkdocGN5Qm1iM0pqWlhNZ2RYTWdkRzhnY0c5emMybGliSGtnYzNSeWFYQWdZVzRnWVdSa2FYUnBiMjVoYkNCbWNtRnRaU0JwYmlCMGFHVWdaWGhoWTNRZ2MyRnRaU0IzWVhNZ1lYTWdZV0p2ZG1VdUNpQWdJQ0JwWmlBb1UxUlNTVkJmUmxKQlRVVmZVa1ZIUlZoUUxuUmxjM1FvYkc5allXeFRkR0ZqYTF0c2IyTmhiRk4wWVdOckxteGxibWQwYUNBdElERmRMbVoxYm1OMGFXOXVJSHg4SUNjbktTa2dld29nSUNBZ0lDQnNiMk5oYkZOMFlXTnJMbkJ2Y0NncE93b2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJR3h2WTJGc1UzUmhZMnN1YzJ4cFkyVW9NQ3dnVTFSQlEwdFVVa0ZEUlY5R1VrRk5SVjlNU1UxSlZDa3ViV0Z3S0daeVlXMWxJRDArSUNoN0NpQWdJQ0F1TGk1bWNtRnRaU3dLSUNBZ0lHWnBiR1Z1WVcxbE9pQm1jbUZ0WlM1bWFXeGxibUZ0WlNCOGZDQnNiMk5oYkZOMFlXTnJXMnh2WTJGc1UzUmhZMnN1YkdWdVozUm9JQzBnTVYwdVptbHNaVzVoYldVc0NpQWdJQ0JtZFc1amRHbHZiam9nWm5KaGJXVXVablZ1WTNScGIyNGdmSHdnSno4bkxBb2dJSDBwS1RzS2ZRb0tZMjl1YzNRZ1pHVm1ZWFZzZEVaMWJtTjBhVzl1VG1GdFpTQTlJQ2M4WVc1dmJubHRiM1Z6UGljN0Nnb3ZLaW9LSUNvZ1UyRm1aV3g1SUdWNGRISmhZM1FnWm5WdVkzUnBiMjRnYm1GdFpTQm1jbTl0SUdsMGMyVnNaZ29nS2k4S1puVnVZM1JwYjI0Z1oyVjBSblZ1WTNScGIyNU9ZVzFsS0dadUtTQjdDaUFnZEhKNUlIc0tJQ0FnSUdsbUlDZ2habTRnZkh3Z2RIbHdaVzltSUdadUlDRTlQU0FuWm5WdVkzUnBiMjRuS1NCN0NpQWdJQ0FnSUhKbGRIVnliaUJrWldaaGRXeDBSblZ1WTNScGIyNU9ZVzFsT3dvZ0lDQWdmUW9nSUNBZ2NtVjBkWEp1SUdadUxtNWhiV1VnZkh3Z1pHVm1ZWFZzZEVaMWJtTjBhVzl1VG1GdFpUc0tJQ0I5SUdOaGRHTm9JQ2hsS1NCN0NpQWdJQ0F2THlCS2RYTjBJR0ZqWTJWemMybHVaeUJqZFhOMGIyMGdjSEp2Y0hNZ2FXNGdjMjl0WlNCVFpXeGxibWwxYlNCbGJuWnBjbTl1YldWdWRITUtJQ0FnSUM4dklHTmhiaUJqWVhWelpTQmhJQ0pRWlhKdGFYTnphVzl1SUdSbGJtbGxaQ0lnWlhoalpYQjBhVzl1SUNoelpXVWdjbUYyWlc0dGFuTWpORGsxS1M0S0lDQWdJSEpsZEhWeWJpQmtaV1poZFd4MFJuVnVZM1JwYjI1T1lXMWxPd29nSUgwS2ZRb0tMeW9xQ2lBcUlGVlZTVVEwSUdkbGJtVnlZWFJ2Y2dvZ0tnb2dLaUJBY21WMGRYSnVjeUJ6ZEhKcGJtY2dSMlZ1WlhKaGRHVmtJRlZWU1VRMExnb2dLaThLWm5WdVkzUnBiMjRnZFhWcFpEUW9LU0I3Q2lBZ1kyOXVjM1FnWjJKc0lEMGdSMHhQUWtGTVgwOUNTaUE3Q2lBZ1kyOXVjM1FnWTNKNWNIUnZJRDBnWjJKc0xtTnllWEIwYnlCOGZDQm5ZbXd1YlhORGNubHdkRzg3Q2dvZ0lHeGxkQ0JuWlhSU1lXNWtiMjFDZVhSbElEMGdLQ2tnUFQ0Z1RXRjBhQzV5WVc1a2IyMG9LU0FxSURFMk93b2dJSFJ5ZVNCN0NpQWdJQ0JwWmlBb1kzSjVjSFJ2SUNZbUlHTnllWEIwYnk1eVlXNWtiMjFWVlVsRUtTQjdDaUFnSUNBZ0lISmxkSFZ5YmlCamNubHdkRzh1Y21GdVpHOXRWVlZKUkNncExuSmxjR3hoWTJVb0x5MHZaeXdnSnljcE93b2dJQ0FnZlFvZ0lDQWdhV1lnS0dOeWVYQjBieUFtSmlCamNubHdkRzh1WjJWMFVtRnVaRzl0Vm1Gc2RXVnpLU0I3Q2lBZ0lDQWdJR2RsZEZKaGJtUnZiVUo1ZEdVZ1BTQW9LU0E5UGlCN0NpQWdJQ0FnSUNBZ0x5OGdZM0o1Y0hSdkxtZGxkRkpoYm1SdmJWWmhiSFZsY3lCdGFXZG9kQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtJR2x1YzNSbFlXUWdiMllnZEdobElIUjVjR1ZrSUdGeWNtRjVDaUFnSUNBZ0lDQWdMeThnYVc0Z2IyeGtJRU5vY205dGFYVnRJSFpsY25OcGIyNXpJQ2hsTG1jdUlESXpMakF1TVRJek5TNHdJQ2d4TlRFME1qSXBLUW9nSUNBZ0lDQWdJQzh2SUVodmQyVjJaWElzSUdCMGVYQmxaRUZ5Y21GNVlDQnBjeUJ6ZEdsc2JDQm1hV3hzWldRZ2FXNHRjR3hoWTJVdUNpQWdJQ0FnSUNBZ0x5OGdRSE5sWlNCb2RIUndjem92TDJSbGRtVnNiM0JsY2k1dGIzcHBiR3hoTG05eVp5OWxiaTFWVXk5a2IyTnpMMWRsWWk5QlVFa3ZRM0o1Y0hSdkwyZGxkRkpoYm1SdmJWWmhiSFZsY3lOMGVYQmxaR0Z5Y21GNUNpQWdJQ0FnSUNBZ1kyOXVjM1FnZEhsd1pXUkJjbkpoZVNBOUlHNWxkeUJWYVc1ME9FRnljbUY1S0RFcE93b2dJQ0FnSUNBZ0lHTnllWEIwYnk1blpYUlNZVzVrYjIxV1lXeDFaWE1vZEhsd1pXUkJjbkpoZVNrN0NpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSNWNHVmtRWEp5WVhsYk1GMDdDaUFnSUNBZ0lIMDdDaUFnSUNCOUNpQWdmU0JqWVhSamFDQW9YeWtnZXdvZ0lDQWdMeThnYzI5dFpTQnlkVzUwYVcxbGN5QmpZVzRnWTNKaGMyZ2dhVzUyYjJ0cGJtY2dZM0o1Y0hSdkNpQWdJQ0F2THlCb2RIUndjem92TDJkcGRHaDFZaTVqYjIwdloyVjBjMlZ1ZEhKNUwzTmxiblJ5ZVMxcVlYWmhjMk55YVhCMEwybHpjM1ZsY3k4NE9UTTFDaUFnZlFvS0lDQXZMeUJvZEhSd09pOHZjM1JoWTJ0dmRtVnlabXh2ZHk1amIyMHZjWFZsYzNScGIyNXpMekV3TlRBek5DOW9iM2N0ZEc4dFkzSmxZWFJsTFdFdFozVnBaQzExZFdsa0xXbHVMV3BoZG1GelkzSnBjSFF2TWpFeE56VXlNeU15TVRFM05USXpDaUFnTHk4Z1EyOXVZMkYwWlc1aGRHbHVaeUIwYUdVZ1ptOXNiRzkzYVc1bklHNTFiV0psY25NZ1lYTWdjM1J5YVc1bmN5QnlaWE4xYkhSeklHbHVJQ2N4TURBd01EQXdNREV3TURBME1EQXdPREF3TURFd01EQXdNREF3TURBd01DY0tJQ0J5WlhSMWNtNGdLQ2hiTVdVM1hTQXBJQ3NnTVdVeklDc2dOR1V6SUNzZ09HVXpJQ3NnTVdVeE1Ta3VjbVZ3YkdGalpTZ3ZXekF4T0Ywdlp5d2dZeUE5UGdvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRzV2TFdKcGRIZHBjMlVLSUNBZ0lDZ29ZeUFwSUY0Z0tDaG5aWFJTWVc1a2IyMUNlWFJsS0NrZ0ppQXhOU2tnUGo0Z0tDaGpJQ2tnTHlBMEtTa3BMblJ2VTNSeWFXNW5LREUyS1N3S0lDQXBPd3A5Q2dvdktpb0tJQ29nUTJobFkydHpJSGRvWlhSb1pYSWdkR2hsSUdkcGRtVnVJR2x1Y0hWMElHbHpJR0ZzY21WaFpIa2dZVzRnWVhKeVlYa3NJR0Z1WkNCcFppQnBkQ0JwYzI0bmRDd2dkM0poY0hNZ2FYUWdhVzRnYjI1bExnb2dLZ29nS2lCQWNHRnlZVzBnYldGNVltVkJjbkpoZVNCSmJuQjFkQ0IwYnlCMGRYSnVJR2x1ZEc4Z1lXNGdZWEp5WVhrc0lHbG1JRzVsWTJWemMyRnllUW9nS2lCQWNtVjBkWEp1Y3lCVWFHVWdhVzV3ZFhRc0lHbG1JR0ZzY21WaFpIa2dZVzRnWVhKeVlYa3NJRzl5SUdGdUlHRnljbUY1SUhkcGRHZ2dkR2hsSUdsdWNIVjBJR0Z6SUhSb1pTQnZibXg1SUdWc1pXMWxiblFzSUdsbUlHNXZkQW9nS2k4S1puVnVZM1JwYjI0Z1lYSnlZWGxwWm5rb2JXRjVZbVZCY25KaGVTa2dld29nSUhKbGRIVnliaUJCY25KaGVTNXBjMEZ5Y21GNUtHMWhlV0psUVhKeVlYa3BJRDhnYldGNVltVkJjbkpoZVNBNklGdHRZWGxpWlVGeWNtRjVYVHNLZlFvS0x5b2daWE5zYVc1MExXUnBjMkZpYkdVZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMWFZ1YzJGbVpTMXRaVzFpWlhJdFlXTmpaWE56SUNvdkNpOHFJR1Z6YkdsdWRDMWthWE5oWW14bElFQjBlWEJsYzJOeWFYQjBMV1Z6YkdsdWRDOXVieTFsZUhCc2FXTnBkQzFoYm5rZ0tpOEtDaThxS2dvZ0tpQklaV3h3WlhJZ2RHOGdaR1ZqZVdOc1pTQnFjMjl1SUc5aWFtVmpkSE1LSUNvdkNtWjFibU4wYVc5dUlHMWxiVzlDZFdsc1pHVnlLQ2tnZXdvZ0lHTnZibk4wSUdoaGMxZGxZV3RUWlhRZ1BTQjBlWEJsYjJZZ1YyVmhhMU5sZENBOVBUMGdKMloxYm1OMGFXOXVKenNLSUNCamIyNXpkQ0JwYm01bGNpQTlJR2hoYzFkbFlXdFRaWFFnUHlCdVpYY2dWMlZoYTFObGRDZ3BJRG9nVzEwN0NpQWdablZ1WTNScGIyNGdiV1Z0YjJsNlpTaHZZbW9wSUhzS0lDQWdJR2xtSUNob1lYTlhaV0ZyVTJWMEtTQjdDaUFnSUNBZ0lHbG1JQ2hwYm01bGNpNW9ZWE1vYjJKcUtTa2dld29nSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsT3dvZ0lDQWdJQ0I5Q2lBZ0lDQWdJR2x1Ym1WeUxtRmtaQ2h2WW1vcE93b2dJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdDaUFnSUNCOUNpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDNCeVpXWmxjaTFtYjNJdGIyWUtJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FXNXVaWEl1YkdWdVozUm9PeUJwS3lzcElIc0tJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVWdQU0JwYm01bGNsdHBYVHNLSUNBZ0lDQWdhV1lnS0haaGJIVmxJRDA5UFNCdlltb3BJSHNLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlRzS0lDQWdJQ0FnZlFvZ0lDQWdmUW9nSUNBZ2FXNXVaWEl1Y0hWemFDaHZZbW9wT3dvZ0lDQWdjbVYwZFhKdUlHWmhiSE5sT3dvZ0lIMEtDaUFnWm5WdVkzUnBiMjRnZFc1dFpXMXZhWHBsS0c5aWFpa2dld29nSUNBZ2FXWWdLR2hoYzFkbFlXdFRaWFFwSUhzS0lDQWdJQ0FnYVc1dVpYSXVaR1ZzWlhSbEtHOWlhaWs3Q2lBZ0lDQjlJR1ZzYzJVZ2V3b2dJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVibVZ5TG14bGJtZDBhRHNnYVNzcktTQjdDaUFnSUNBZ0lDQWdhV1lnS0dsdWJtVnlXMmxkSUQwOVBTQnZZbW9wSUhzS0lDQWdJQ0FnSUNBZ0lHbHVibVZ5TG5Od2JHbGpaU2hwTENBeEtUc0tJQ0FnSUNBZ0lDQWdJR0p5WldGck93b2dJQ0FnSUNBZ0lIMEtJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtJQ0J5WlhSMWNtNGdXMjFsYlc5cGVtVXNJSFZ1YldWdGIybDZaVjA3Q24wS0NpOHFLZ29nS2lCU1pXTjFjbk5wZG1Wc2VTQnViM0p0WVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ2WW1wbFkzUXVDaUFxQ2lBcUlDMGdRM0psWVhSbGN5QmhJR052Y0hrZ2RHOGdjSEpsZG1WdWRDQnZjbWxuYVc1aGJDQnBibkIxZENCdGRYUmhkR2x2YmdvZ0tpQXRJRk5yYVhCeklHNXZiaTFsYm5WdFpYSmhZbXhsSUhCeWIzQmxjblJwWlhNS0lDb2dMU0JYYUdWdUlITjBjbWx1WjJsbWVXbHVaeXdnWTJGc2JITWdZSFJ2U2xOUFRtQWdhV1lnYVcxd2JHVnRaVzUwWldRS0lDb2dMU0JTWlcxdmRtVnpJR05wY21OMWJHRnlJSEpsWm1WeVpXNWpaWE1LSUNvZ0xTQlVjbUZ1YzJ4aGRHVnpJRzV2YmkxelpYSnBZV3hwZW1GaWJHVWdkbUZzZFdWeklDaGdkVzVrWldacGJtVmtZQzlnVG1GT1lDOW1kVzVqZEdsdmJuTXBJSFJ2SUhObGNtbGhiR2w2WVdKc1pTQm1iM0p0WVhRS0lDb2dMU0JVY21GdWMyeGhkR1Z6SUd0dWIzZHVJR2RzYjJKaGJDQnZZbXBsWTNSekwyTnNZWE56WlhNZ2RHOGdZU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBZWFJwYjI1ekNpQXFJQzBnVkdGclpYTWdZMkZ5WlNCdlppQmdSWEp5YjNKZ0lHOWlhbVZqZENCelpYSnBZV3hwZW1GMGFXOXVDaUFxSUMwZ1QzQjBhVzl1WVd4c2VTQnNhVzFwZEhNZ1pHVndkR2dnYjJZZ1ptbHVZV3dnYjNWMGNIVjBDaUFxSUMwZ1QzQjBhVzl1WVd4c2VTQnNhVzFwZEhNZ2JuVnRZbVZ5SUc5bUlIQnliM0JsY25ScFpYTXZaV3hsYldWdWRITWdhVzVqYkhWa1pXUWdhVzRnWVc1NUlITnBibWRzWlNCdlltcGxZM1F2WVhKeVlYa0tJQ29LSUNvZ1FIQmhjbUZ0SUdsdWNIVjBJRlJvWlNCdlltcGxZM1FnZEc4Z1ltVWdibTl5YldGc2FYcGxaQzRLSUNvZ1FIQmhjbUZ0SUdSbGNIUm9JRlJvWlNCdFlYZ2daR1Z3ZEdnZ2RHOGdkMmhwWTJnZ2RHOGdibTl5YldGc2FYcGxJSFJvWlNCdlltcGxZM1F1SUNoQmJubDBhR2x1WnlCa1pXVndaWElnYzNSeWFXNW5hV1pwWldRZ2QyaHZiR1V1S1FvZ0tpQkFjR0Z5WVcwZ2JXRjRVSEp2Y0dWeWRHbGxjeUJVYUdVZ2JXRjRJRzUxYldKbGNpQnZaaUJsYkdWdFpXNTBjeUJ2Y2lCd2NtOXdaWEowYVdWeklIUnZJR0psSUdsdVkyeDFaR1ZrSUdsdUlHRnVlU0J6YVc1bmJHVWdZWEp5WVhrZ2IzSUtJQ29nYjJKcVpXTjBJR2x1SUhSb1pTQnViM0p0WVd4c2FYcGxaQ0J2ZFhSd2RYUXVDaUFxSUVCeVpYUjFjbTV6SUVFZ2JtOXliV0ZzYVhwbFpDQjJaWEp6YVc5dUlHOW1JSFJvWlNCdlltcGxZM1FzSUc5eUlHQWlLaXB1YjI0dGMyVnlhV0ZzYVhwaFlteGxLaW9pWUNCcFppQmhibmtnWlhKeWIzSnpJR0Z5WlNCMGFISnZkMjRnWkhWeWFXNW5JRzV2Y20xaGJHbDZZWFJwYjI0dUNpQXFMd292THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxXVjRjR3hwWTJsMExXRnVlUXBtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVVvYVc1d2RYUXNJR1JsY0hSb0lEMGdNVEF3TENCdFlYaFFjbTl3WlhKMGFXVnpJRDBnSzBsdVptbHVhWFI1S1NCN0NpQWdkSEo1SUhzS0lDQWdJQzh2SUhOcGJtTmxJSGRsSjNKbElHRjBJSFJvWlNCdmRYUmxjbTF2YzNRZ2JHVjJaV3dzSUhkbElHUnZiaWQwSUhCeWIzWnBaR1VnWVNCclpYa0tJQ0FnSUhKbGRIVnliaUIyYVhOcGRDZ25KeXdnYVc1d2RYUXNJR1JsY0hSb0xDQnRZWGhRY205d1pYSjBhV1Z6S1RzS0lDQjlJR05oZEdOb0lDaGxjbklwSUhzS0lDQWdJSEpsZEhWeWJpQjdJRVZTVWs5U09pQmdLaXB1YjI0dGMyVnlhV0ZzYVhwaFlteGxLaW9nS0NSN1pYSnlmU2xnSUgwN0NpQWdmUXA5Q2dvdktpb0tJQ29nVm1semFYUnpJR0VnYm05a1pTQjBieUJ3WlhKbWIzSnRJRzV2Y20xaGJHbDZZWFJwYjI0Z2IyNGdhWFFLSUNvS0lDb2dRSEJoY21GdElHdGxlU0JVYUdVZ2EyVjVJR052Y25KbGMzQnZibVJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRzV2WkdVS0lDb2dRSEJoY21GdElIWmhiSFZsSUZSb1pTQnViMlJsSUhSdklHSmxJSFpwYzJsMFpXUUtJQ29nUUhCaGNtRnRJR1JsY0hSb0lFOXdkR2x2Ym1Gc0lHNTFiV0psY2lCcGJtUnBZMkYwYVc1bklIUm9aU0J0WVhocGJYVnRJSEpsWTNWeWMybHZiaUJrWlhCMGFBb2dLaUJBY0dGeVlXMGdiV0Y0VUhKdmNHVnlkR2xsY3lCUGNIUnBiMjVoYkNCdFlYaHBiWFZ0SUc1MWJXSmxjaUJ2WmlCd2NtOXdaWEowYVdWekwyVnNaVzFsYm5SeklHbHVZMngxWkdWa0lHbHVJR0Z1ZVNCemFXNW5iR1VnYjJKcVpXTjBMMkZ5Y21GNUNpQXFJRUJ3WVhKaGJTQnRaVzF2SUU5d2RHbHZibUZzSUUxbGJXOGdZMnhoYzNNZ2FHRnVaR3hwYm1jZ1pHVmplV05zYVc1bkNpQXFMd3BtZFc1amRHbHZiaUIyYVhOcGRDZ0tJQ0JyWlhrc0NpQWdkbUZzZFdVc0NpQWdaR1Z3ZEdnZ1BTQXJTVzVtYVc1cGRIa3NDaUFnYldGNFVISnZjR1Z5ZEdsbGN5QTlJQ3RKYm1acGJtbDBlU3dLSUNCdFpXMXZJRDBnYldWdGIwSjFhV3hrWlhJb0tTd0tLU0I3Q2lBZ1kyOXVjM1FnVzIxbGJXOXBlbVVzSUhWdWJXVnRiMmw2WlYwZ1BTQnRaVzF2T3dvS0lDQXZMeUJIWlhRZ2RHaGxJSE5wYlhCc1pTQmpZWE5sY3lCdmRYUWdiMllnZEdobElIZGhlU0JtYVhKemRBb2dJR2xtSUNnS0lDQWdJSFpoYkhWbElEMDlJRzUxYkd3Z2ZId2dMeThnZEdocGN5QnRZWFJqYUdWeklHNTFiR3dnWVc1a0lIVnVaR1ZtYVc1bFpDQXRQaUJsY1dWeElHNXZkQ0JsY1dWeFpYRUtJQ0FnSUNoYkoyNTFiV0psY2ljc0lDZGliMjlzWldGdUp5d2dKM04wY21sdVp5ZGRMbWx1WTJ4MVpHVnpLSFI1Y0dWdlppQjJZV3gxWlNrZ0ppWWdJV2x6VG1GT0pERW9kbUZzZFdVcEtRb2dJQ2tnZXdvZ0lDQWdjbVYwZFhKdUlIWmhiSFZsSURzS0lDQjlDZ29nSUdOdmJuTjBJSE4wY21sdVoybG1hV1ZrSUQwZ2MzUnlhVzVuYVdaNVZtRnNkV1VvYTJWNUxDQjJZV3gxWlNrN0Nnb2dJQzh2SUVGdWVYUm9hVzVuSUhkbElHTnZkV3hrSUhCdmRHVnVkR2xoYkd4NUlHUnBaeUJwYm5SdklHMXZjbVVnS0c5aWFtVmpkSE1nYjNJZ1lYSnlZWGx6S1NCM2FXeHNJR2hoZG1VZ1kyOXRaU0JpWVdOcklHRnpJR0FpVzI5aWFtVmpkQ0JZV0ZoWVhTSmdMZ29nSUM4dklFVjJaWEo1ZEdocGJtY2daV3h6WlNCM2FXeHNJR2hoZG1VZ1lXeHlaV0ZrZVNCaVpXVnVJSE5sY21saGJHbDZaV1FzSUhOdklHbG1JSGRsSUdSdmJpZDBJSE5sWlNCMGFHRjBJSEJoZEhSbGNtNHNJSGRsSjNKbElHUnZibVV1Q2lBZ2FXWWdLQ0Z6ZEhKcGJtZHBabWxsWkM1emRHRnlkSE5YYVhSb0tDZGJiMkpxWldOMElDY3BLU0I3Q2lBZ0lDQnlaWFIxY200Z2MzUnlhVzVuYVdacFpXUTdDaUFnZlFvS0lDQXZMeUJHY205dElHaGxjbVVnYjI0c0lIZGxJR05oYmlCaGMzTmxjblFnZEdoaGRDQmdkbUZzZFdWZ0lHbHpJR1ZwZEdobGNpQmhiaUJ2WW1wbFkzUWdiM0lnWVc0Z1lYSnlZWGt1Q2dvZ0lDOHZJRVJ2SUc1dmRDQnViM0p0WVd4cGVtVWdiMkpxWldOMGN5QjBhR0YwSUhkbElHdHViM2NnYUdGMlpTQmhiSEpsWVdSNUlHSmxaVzRnYm05eWJXRnNhWHBsWkM0Z1FYTWdZU0JuWlc1bGNtRnNJSEoxYkdVc0lIUm9aUW9nSUM4dklDSmZYM05sYm5SeWVWOXphMmx3WDI1dmNtMWhiR2w2WVhScGIyNWZYeUlnY0hKdmNHVnlkSGtnYzJodmRXeGtJRzl1YkhrZ1ltVWdkWE5sWkNCemNHRnlhVzVuYkhrZ1lXNWtJRzl1YkhrZ2MyaHZkV3hrSUc5dWJIa2dZbVVnYzJWMElHOXVJRzlpYW1WamRITWdkR2hoZEFvZ0lDOHZJR2hoZG1VZ1lXeHlaV0ZrZVNCaVpXVnVJRzV2Y20xaGJHbDZaV1F1Q2lBZ2FXWWdLQ2gyWVd4MVpTQXBXeWRmWDNObGJuUnllVjl6YTJsd1gyNXZjbTFoYkdsNllYUnBiMjVmWHlkZEtTQjdDaUFnSUNCeVpYUjFjbTRnZG1Gc2RXVWdPd29nSUgwS0NpQWdMeThnVjJVZ1kyRnVJSE5sZENCZ1gxOXpaVzUwY25sZmIzWmxjbkpwWkdWZmJtOXliV0ZzYVhwaGRHbHZibDlrWlhCMGFGOWZZQ0J2YmlCaGJpQnZZbXBsWTNRZ2RHOGdaVzV6ZFhKbElIUm9ZWFFnWm5KdmJTQjBhR1Z5WlFvZ0lDOHZJRmRsSUd0bFpYQWdZU0JqWlhKMFlXbHVJR0Z0YjNWdWRDQnZaaUJrWlhCMGFDNEtJQ0F2THlCVWFHbHpJSE5vYjNWc1pDQmlaU0IxYzJWa0lITndZWEpwYm1kc2VTd2daUzVuTGlCM1pTQjFjMlVnYVhRZ1ptOXlJSFJvWlNCeVpXUjFlQ0JwYm5SbFozSmhkR2x2YmlCMGJ5Qmxibk4xY21VZ2QyVWdaMlYwSUdFZ1kyVnlkR0ZwYmlCaGJXOTFiblFnYjJZZ2MzUmhkR1V1Q2lBZ1kyOXVjM1FnY21WdFlXbHVhVzVuUkdWd2RHZ2dQUW9nSUNBZ2RIbHdaVzltSUNoMllXeDFaU0FwV3lkZlgzTmxiblJ5ZVY5dmRtVnljbWxrWlY5dWIzSnRZV3hwZW1GMGFXOXVYMlJsY0hSb1gxOG5YU0E5UFQwZ0oyNTFiV0psY2ljS0lDQWdJQ0FnUHlBb0tIWmhiSFZsSUNsYkoxOWZjMlZ1ZEhKNVgyOTJaWEp5YVdSbFgyNXZjbTFoYkdsNllYUnBiMjVmWkdWd2RHaGZYeWRkSUNrS0lDQWdJQ0FnT2lCa1pYQjBhRHNLQ2lBZ0x5OGdWMlVuY21VZ1lXeHpieUJrYjI1bElHbG1JSGRsSjNabElISmxZV05vWldRZ2RHaGxJRzFoZUNCa1pYQjBhQW9nSUdsbUlDaHlaVzFoYVc1cGJtZEVaWEIwYUNBOVBUMGdNQ2tnZXdvZ0lDQWdMeThnUVhRZ2RHaHBjeUJ3YjJsdWRDQjNaU0JyYm05M0lHQnpaWEpwWVd4cGVtVmtZQ0JwY3lCaElITjBjbWx1WnlCdlppQjBhR1VnWm05eWJTQmdJbHR2WW1wbFkzUWdXRmhZV0YwaVlDNGdRMnhsWVc0Z2FYUWdkWEFnYzI4Z2FYUW5jeUJxZFhOMElHQWlXMWhZV0ZoZEltQXVDaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5hV1pwWldRdWNtVndiR0ZqWlNnbmIySnFaV04wSUNjc0lDY25LVHNLSUNCOUNnb2dJQzh2SUVsbUlIZGxKM1psSUdGc2NtVmhaSGtnZG1semFYUmxaQ0IwYUdseklHSnlZVzVqYUN3Z1ltRnBiQ0J2ZFhRc0lHRnpJR2wwSjNNZ1kybHlZM1ZzWVhJZ2NtVm1aWEpsYm1ObExpQkpaaUJ1YjNRc0lHNXZkR1VnZEdoaGRDQjNaU2R5WlNCelpXVnBibWNnYVhRZ2JtOTNMZ29nSUdsbUlDaHRaVzF2YVhwbEtIWmhiSFZsS1NrZ2V3b2dJQ0FnY21WMGRYSnVJQ2RiUTJseVkzVnNZWElnZmwwbk93b2dJSDBLQ2lBZ0x5OGdTV1lnZEdobElIWmhiSFZsSUdoaGN5QmhJR0IwYjBwVFQwNWdJRzFsZEdodlpDd2dkMlVnWTJGc2JDQnBkQ0IwYnlCbGVIUnlZV04wSUcxdmNtVWdhVzVtYjNKdFlYUnBiMjRLSUNCamIyNXpkQ0IyWVd4MVpWZHBkR2hVYjBwVFQwNGdQU0IyWVd4MVpTQTdDaUFnYVdZZ0tIWmhiSFZsVjJsMGFGUnZTbE5QVGlBbUppQjBlWEJsYjJZZ2RtRnNkV1ZYYVhSb1ZHOUtVMDlPTG5SdlNsTlBUaUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dld29nSUNBZ2RISjVJSHNLSUNBZ0lDQWdZMjl1YzNRZ2FuTnZibFpoYkhWbElEMGdkbUZzZFdWWGFYUm9WRzlLVTA5T0xuUnZTbE5QVGlncE93b2dJQ0FnSUNBdkx5QlhaU0J1WldWa0lIUnZJRzV2Y20xaGJHbDZaU0IwYUdVZ2NtVjBkWEp1SUhaaGJIVmxJRzltSUdBdWRHOUtVMDlPS0NsZ0lHbHVJR05oYzJVZ2FYUWdhR0Z6SUdOcGNtTjFiR0Z5SUhKbFptVnlaVzVqWlhNS0lDQWdJQ0FnY21WMGRYSnVJSFpwYzJsMEtDY25MQ0JxYzI5dVZtRnNkV1VzSUhKbGJXRnBibWx1WjBSbGNIUm9JQzBnTVN3Z2JXRjRVSEp2Y0dWeWRHbGxjeXdnYldWdGJ5azdDaUFnSUNCOUlHTmhkR05vSUNobGNuSXBJSHNLSUNBZ0lDQWdMeThnY0dGemN5QW9WR2hsSUdKMWFXeDBMV2x1SUdCMGIwcFRUMDVnSUdaaGFXeGxaQ3dnWW5WMElIZGxJR05oYmlCemRHbHNiQ0IwY25rZ2RHOGdaRzhnYVhRZ2IzVnljMlZzZG1WektRb2dJQ0FnZlFvZ0lIMEtDaUFnTHk4Z1FYUWdkR2hwY3lCd2IybHVkQ0IzWlNCcmJtOTNJSGRsSUdWcGRHaGxjaUJvWVhabElHRnVJRzlpYW1WamRDQnZjaUJoYmlCaGNuSmhlU3dnZDJVZ2FHRjJaVzRuZENCelpXVnVJR2wwSUdKbFptOXlaU3dnWVc1a0lIZGxKM0psSUdkdmFXNW5JSFJ2SUhKbFkzVnljMlVLSUNBdkx5QmlaV05oZFhObElIZGxJR2hoZG1WdUozUWdlV1YwSUhKbFlXTm9aV1FnZEdobElHMWhlQ0JrWlhCMGFDNGdRM0psWVhSbElHRnVJR0ZqWTNWdGRXeGhkRzl5SUhSdklHaHZiR1FnZEdobElISmxjM1ZzZEhNZ2IyWWdkbWx6YVhScGJtY2daV0ZqYUFvZ0lDOHZJSEJ5YjNCbGNuUjVMMlZ1ZEhKNUxDQmhibVFnYTJWbGNDQjBjbUZqYXlCdlppQjBhR1VnYm5WdFltVnlJRzltSUdsMFpXMXpJSGRsSUdGa1pDQjBieUJwZEM0S0lDQmpiMjV6ZENCdWIzSnRZV3hwZW1Wa0lEMGdLRUZ5Y21GNUxtbHpRWEp5WVhrb2RtRnNkV1VwSUQ4Z1cxMGdPaUI3ZlNrZ093b2dJR3hsZENCdWRXMUJaR1JsWkNBOUlEQTdDZ29nSUM4dklFSmxabTl5WlNCM1pTQmlaV2RwYml3Z1kyOXVkbVZ5ZEdCRmNuSnZjbUFnWVc1a1lFVjJaVzUwWUNCcGJuTjBZVzVqWlhNZ2FXNTBieUJ3YkdGcGJpQnZZbXBsWTNSekxDQnphVzVqWlNCemIyMWxJRzltSUdWaFkyZ2diMllnZEdobGFYSWdjbVZzWlhaaGJuUUtJQ0F2THlCd2NtOXdaWEowYVdWeklHRnlaU0J1YjI0dFpXNTFiV1Z5WVdKc1pTQmhibVFnYjNSb1pYSjNhWE5sSUhkdmRXeGtJR2RsZENCdGFYTnpaV1F1Q2lBZ1kyOXVjM1FnZG1semFYUmhZbXhsSUQwZ1kyOXVkbVZ5ZEZSdlVHeGhhVzVQWW1wbFkzUW9kbUZzZFdVZ0tUc0tDaUFnWm05eUlDaGpiMjV6ZENCMmFYTnBkRXRsZVNCcGJpQjJhWE5wZEdGaWJHVXBJSHNLSUNBZ0lDOHZJRUYyYjJsa0lHbDBaWEpoZEdsdVp5QnZkbVZ5SUdacFpXeGtjeUJwYmlCMGFHVWdjSEp2ZEc5MGVYQmxJR2xtSUhSb1pYa25kbVVnYzI5dFpXaHZkeUJpWldWdUlHVjRjRzl6WldRZ2RHOGdaVzUxYldWeVlYUnBiMjR1Q2lBZ0lDQnBaaUFvSVU5aWFtVmpkQzV3Y205MGIzUjVjR1V1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoMmFYTnBkR0ZpYkdVc0lIWnBjMmwwUzJWNUtTa2dld29nSUNBZ0lDQmpiMjUwYVc1MVpUc0tJQ0FnSUgwS0NpQWdJQ0JwWmlBb2JuVnRRV1JrWldRZ1BqMGdiV0Y0VUhKdmNHVnlkR2xsY3lrZ2V3b2dJQ0FnSUNCdWIzSnRZV3hwZW1Wa1czWnBjMmwwUzJWNVhTQTlJQ2RiVFdGNFVISnZjR1Z5ZEdsbGN5QitYU2M3Q2lBZ0lDQWdJR0p5WldGck93b2dJQ0FnZlFvS0lDQWdJQzh2SUZKbFkzVnljMmwyWld4NUlIWnBjMmwwSUdGc2JDQjBhR1VnWTJocGJHUWdibTlrWlhNS0lDQWdJR052Ym5OMElIWnBjMmwwVm1Gc2RXVWdQU0IyYVhOcGRHRmliR1ZiZG1semFYUkxaWGxkT3dvZ0lDQWdibTl5YldGc2FYcGxaRnQyYVhOcGRFdGxlVjBnUFNCMmFYTnBkQ2gyYVhOcGRFdGxlU3dnZG1semFYUldZV3gxWlN3Z2NtVnRZV2x1YVc1blJHVndkR2dnTFNBeExDQnRZWGhRY205d1pYSjBhV1Z6TENCdFpXMXZLVHNLQ2lBZ0lDQnVkVzFCWkdSbFpDc3JPd29nSUgwS0NpQWdMeThnVDI1alpTQjNaU2QyWlNCMmFYTnBkR1ZrSUdGc2JDQjBhR1VnWW5KaGJtTm9aWE1zSUhKbGJXOTJaU0IwYUdVZ2NHRnlaVzUwSUdaeWIyMGdiV1Z0YnlCemRHOXlZV2RsQ2lBZ2RXNXRaVzF2YVhwbEtIWmhiSFZsS1RzS0NpQWdMeThnVW1WMGRYSnVJR0ZqWTNWdGRXeGhkR1ZrSUhaaGJIVmxjd29nSUhKbGRIVnliaUJ1YjNKdFlXeHBlbVZrT3dwOUNnb3ZLaUJsYzJ4cGJuUXRaR2x6WVdKc1pTQmpiMjF3YkdWNGFYUjVJQ292Q2k4cUtnb2dLaUJUZEhKcGJtZHBabmtnZEdobElHZHBkbVZ1SUhaaGJIVmxMaUJJWVc1a2JHVnpJSFpoY21sdmRYTWdhMjV2ZDI0Z2MzQmxZMmxoYkNCMllXeDFaWE1nWVc1a0lIUjVjR1Z6TGdvZ0tnb2dLaUJPYjNRZ2JXVmhiblFnZEc4Z1ltVWdkWE5sWkNCdmJpQnphVzF3YkdVZ2NISnBiV2wwYVhabGN5QjNhR2xqYUNCaGJISmxZV1I1SUdoaGRtVWdZU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBZWFJwYjI0c0lHRnpJR2wwSUhkcGJHd3NJR1p2Y2lCbGVHRnRjR3hsTENCMGRYSnVDaUFxSUhSb1pTQnVkVzFpWlhJZ01USXpNU0JwYm5SdklDSmJUMkpxWldOMElFNTFiV0psY2wwaUxDQnViM0lnYjI0Z1lHNTFiR3hnTENCaGN5QnBkQ0IzYVd4c0lIUm9jbTkzTGdvZ0tnb2dLaUJBY0dGeVlXMGdkbUZzZFdVZ1ZHaGxJSFpoYkhWbElIUnZJSE4wY21sdVoybG1lUW9nS2lCQWNtVjBkWEp1Y3lCQklITjBjbWx1WjJsbWFXVmtJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvWlNCbmFYWmxiaUIyWVd4MVpRb2dLaThLWm5WdVkzUnBiMjRnYzNSeWFXNW5hV1o1Vm1Gc2RXVW9DaUFnYTJWNUxBb2dJQzh2SUhSb2FYTWdkSGx3WlNCcGN5QmhJSFJwYm5rZ1ltbDBJRzltSUdFZ1kyaGxZWFFzSUhOcGJtTmxJSFJvYVhNZ1puVnVZM1JwYjI0Z1pHOWxjeUJvWVc1a2JHVWdUbUZPSUNoM2FHbGphQ0JwY3lCMFpXTm9ibWxqWVd4c2VTQmhJRzUxYldKbGNpa3NJR0oxZENCbWIzSUtJQ0F2THlCdmRYSWdhVzUwWlhKdVlXd2dkWE5sTENCcGRDZHNiQ0JrYndvZ0lIWmhiSFZsTEFvcElIc0tJQ0IwY25rZ2V3b2dJQ0FnYVdZZ0tHdGxlU0E5UFQwZ0oyUnZiV0ZwYmljZ0ppWWdkbUZzZFdVZ0ppWWdkSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUFvZG1Gc2RXVWdLUzVmWlhabGJuUnpLU0I3Q2lBZ0lDQWdJSEpsZEhWeWJpQW5XMFJ2YldGcGJsMG5Pd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHJaWGtnUFQwOUlDZGtiMjFoYVc1RmJXbDBkR1Z5SnlrZ2V3b2dJQ0FnSUNCeVpYUjFjbTRnSjF0RWIyMWhhVzVGYldsMGRHVnlYU2M3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdTWFFuY3lCellXWmxJSFJ2SUhWelpTQmdaMnh2WW1Gc1lDd2dZSGRwYm1SdmQyQXNJR0Z1WkNCZ1pHOWpkVzFsYm5SZ0lHaGxjbVVnYVc0Z2RHaHBjeUJ0WVc1dVpYSXNJR0Z6SUhkbElHRnlaU0JoYzNObGNuUnBibWNnZFhOcGJtY2dZSFI1Y0dWdlptQWdabWx5YzNRS0lDQWdJQzh2SUhkb2FXTm9JSGR2YmlkMElIUm9jbTkzSUdsbUlIUm9aWGtnWVhKbElHNXZkQ0J3Y21WelpXNTBMZ29LSUNBZ0lHbG1JQ2gwZVhCbGIyWWdaMnh2WW1Gc0lDRTlQU0FuZFc1a1pXWnBibVZrSnlBbUppQjJZV3gxWlNBOVBUMGdaMnh2WW1Gc0tTQjdDaUFnSUNBZ0lISmxkSFZ5YmlBblcwZHNiMkpoYkYwbk93b2dJQ0FnZlFvS0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxeVpYTjBjbWxqZEdWa0xXZHNiMkpoYkhNS0lDQWdJR2xtSUNoMGVYQmxiMllnZDJsdVpHOTNJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KaUIyWVd4MVpTQTlQVDBnZDJsdVpHOTNLU0I3Q2lBZ0lDQWdJSEpsZEhWeWJpQW5XMWRwYm1SdmQxMG5Pd29nSUNBZ2ZRb0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MXlaWE4wY21samRHVmtMV2RzYjJKaGJITUtJQ0FnSUdsbUlDaDBlWEJsYjJZZ1pHOWpkVzFsYm5RZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbUlIWmhiSFZsSUQwOVBTQmtiMk4xYldWdWRDa2dld29nSUNBZ0lDQnlaWFIxY200Z0oxdEViMk4xYldWdWRGMG5Pd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHBjMVoxWlZacFpYZE5iMlJsYkNoMllXeDFaU2twSUhzS0lDQWdJQ0FnY21WMGRYSnVJQ2RiVm5WbFZtbGxkMDF2WkdWc1hTYzdDaUFnSUNCOUNnb2dJQ0FnTHk4Z1VtVmhZM1FuY3lCVGVXNTBhR1YwYVdORmRtVnVkQ0IwYUdsdVoza0tJQ0FnSUdsbUlDaHBjMU41Ym5Sb1pYUnBZMFYyWlc1MEtIWmhiSFZsS1NrZ2V3b2dJQ0FnSUNCeVpYUjFjbTRnSjF0VGVXNTBhR1YwYVdORmRtVnVkRjBuT3dvZ0lDQWdmUW9LSUNBZ0lHbG1JQ2gwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R1ZFcxaVpYSW5JQ1ltSUhaaGJIVmxJQ0U5UFNCMllXeDFaU2tnZXdvZ0lDQWdJQ0J5WlhSMWNtNGdKMXRPWVU1ZEp6c0tJQ0FnSUgwS0NpQWdJQ0JwWmlBb2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdDaUFnSUNBZ0lISmxkSFZ5YmlCZ1cwWjFibU4wYVc5dU9pQWtlMmRsZEVaMWJtTjBhVzl1VG1GdFpTaDJZV3gxWlNsOVhXQTdDaUFnSUNCOUNnb2dJQ0FnYVdZZ0tIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ0ozTjViV0p2YkNjcElIc0tJQ0FnSUNBZ2NtVjBkWEp1SUdCYkpIdFRkSEpwYm1jb2RtRnNkV1VwZlYxZ093b2dJQ0FnZlFvS0lDQWdJQzh2SUhOMGNtbHVaMmxtYVdWa0lFSnBaMGx1ZEhNZ1lYSmxJR2x1WkdsemRHbHVaM1ZwYzJoaFlteGxJR1p5YjIwZ2NtVm5kV3hoY2lCdWRXMWlaWEp6TENCemJ5QjNaU0J1WldWa0lIUnZJR3hoWW1Wc0lIUm9aVzBnZEc4Z1lYWnZhV1FnWTI5dVpuVnphVzl1Q2lBZ0lDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuWW1sbmFXNTBKeWtnZXdvZ0lDQWdJQ0J5WlhSMWNtNGdZRnRDYVdkSmJuUTZJQ1I3VTNSeWFXNW5LSFpoYkhWbEtYMWRZRHNLSUNBZ0lIMEtDaUFnSUNBdkx5Qk9iM2NnZEdoaGRDQjNaU2QyWlNCcmJtOWphMlZrSUc5MWRDQmhiR3dnZEdobElITndaV05wWVd3Z1kyRnpaWE1nWVc1a0lIUm9aU0J3Y21sdGFYUnBkbVZ6TENCaGJHd2dkMlVnYUdGMlpTQnNaV1owSUdGeVpTQnZZbXBsWTNSekxpQlRhVzF3YkhrZ1kyRnpkR2x1WndvZ0lDQWdMeThnZEdobGJTQjBieUJ6ZEhKcGJtZHpJRzFsWVc1eklIUm9ZWFFnYVc1emRHRnVZMlZ6SUc5bUlHTnNZWE56WlhNZ2QyaHBZMmdnYUdGMlpXNG5kQ0JrWldacGJtVmtJSFJvWldseUlHQjBiMU4wY21sdVoxUmhaMkFnZDJsc2JDQnFkWE4wSUdOdmJXVWdiM1YwSUdGekNpQWdJQ0F2THlCZ0lsdHZZbXBsWTNRZ1QySnFaV04wWFNKZ0xpQkpaaUIzWlNCcGJuTjBaV0ZrSUd4dmIyc2dZWFFnZEdobElHTnZibk4wY25WamRHOXlKM01nYm1GdFpTQW9kMmhwWTJnZ2FYTWdkR2hsSUhOaGJXVWdZWE1nZEdobElHNWhiV1VnYjJZZ2RHaGxJR05zWVhOektTd0tJQ0FnSUM4dklIZGxJR05oYmlCdFlXdGxJSE4xY21VZ2RHaGhkQ0J2Ym14NUlIQnNZV2x1SUc5aWFtVmpkSE1nWTI5dFpTQnZkWFFnZEdoaGRDQjNZWGt1Q2lBZ0lDQmpiMjV6ZENCdlltcE9ZVzFsSUQwZ1oyVjBRMjl1YzNSeWRXTjBiM0pPWVcxbEtIWmhiSFZsS1RzS0NpQWdJQ0F2THlCSVlXNWtiR1VnU0ZSTlRDQkZiR1Z0Wlc1MGN3b2dJQ0FnYVdZZ0tDOWVTRlJOVENoY2R5b3BSV3hsYldWdWRDUXZMblJsYzNRb2IySnFUbUZ0WlNrcElIc0tJQ0FnSUNBZ2NtVjBkWEp1SUdCYlNGUk5URVZzWlcxbGJuUTZJQ1I3YjJKcVRtRnRaWDFkWURzS0lDQWdJSDBLQ2lBZ0lDQnlaWFIxY200Z1lGdHZZbXBsWTNRZ0pIdHZZbXBPWVcxbGZWMWdPd29nSUgwZ1kyRjBZMmdnS0dWeWNpa2dld29nSUNBZ2NtVjBkWEp1SUdBcUttNXZiaTF6WlhKcFlXeHBlbUZpYkdVcUtpQW9KSHRsY25KOUtXQTdDaUFnZlFwOUNpOHFJR1Z6YkdsdWRDMWxibUZpYkdVZ1kyOXRjR3hsZUdsMGVTQXFMd29LWm5WdVkzUnBiMjRnWjJWMFEyOXVjM1J5ZFdOMGIzSk9ZVzFsS0haaGJIVmxLU0I3Q2lBZ1kyOXVjM1FnY0hKdmRHOTBlWEJsSUQwZ1QySnFaV04wTG1kbGRGQnliM1J2ZEhsd1pVOW1LSFpoYkhWbEtUc0tDaUFnY21WMGRYSnVJSEJ5YjNSdmRIbHdaU0EvSUhCeWIzUnZkSGx3WlM1amIyNXpkSEoxWTNSdmNpNXVZVzFsSURvZ0oyNTFiR3dnY0hKdmRHOTBlWEJsSnpzS2ZRb0tMeW9xQ2lBcUlFNXZjbTFoYkdsNlpYTWdWVkpNY3lCcGJpQmxlR05sY0hScGIyNXpJR0Z1WkNCemRHRmphM1J5WVdObGN5QjBieUJoSUdKaGMyVWdjR0YwYUNCemJ5QlRaVzUwY25rZ1kyRnVJR1pwYm1kbGNuQnlhVzUwQ2lBcUlHRmpjbTl6Y3lCd2JHRjBabTl5YlhNZ1lXNWtJSGR2Y210cGJtY2daR2x5WldOMGIzSjVMZ29nS2dvZ0tpQkFjR0Z5WVcwZ2RYSnNJRlJvWlNCVlVrd2dkRzhnWW1VZ2JtOXliV0ZzYVhwbFpDNEtJQ29nUUhCaGNtRnRJR0poYzJWUVlYUm9JRlJvWlNCaGNIQnNhV05oZEdsdmJpQmlZWE5sSUhCaGRHZ3VDaUFxSUVCeVpYUjFjbTV6SUZSb1pTQnViM0p0WVd4cGVtVmtJRlZTVEM0S0lDb3ZDbVoxYm1OMGFXOXVJRzV2Y20xaGJHbDZaVlZ5YkZSdlFtRnpaU2gxY213c0lHSmhjMlZRWVhSb0tTQjdDaUFnWTI5dWMzUWdaWE5qWVhCbFpFSmhjMlVnUFNCaVlYTmxVR0YwYUFvZ0lDQWdMeThnUW1GamEzTnNZWE5vSUhSdklHWnZjbmRoY21RS0lDQWdJQzV5WlhCc1lXTmxLQzljWEM5bkxDQW5MeWNwQ2lBZ0lDQXZMeUJGYzJOaGNHVWdVbVZuUlhod0lITndaV05wWVd3Z1kyaGhjbUZqZEdWeWN3b2dJQ0FnTG5KbGNHeGhZMlVvTDF0OFhGeDdmU2dwVzF4ZFhpUXJLajh1WFM5bkxDQW5YRndrSmljcE93b0tJQ0JzWlhRZ2JtVjNWWEpzSUQwZ2RYSnNPd29nSUhSeWVTQjdDaUFnSUNCdVpYZFZjbXdnUFNCa1pXTnZaR1ZWVWtrb2RYSnNLVHNLSUNCOUlHTmhkR05vSUNoZlQyOHBJSHNLSUNBZ0lDOHZJRk52YldWMGFXMWxJSFJvYVhNZ1luSmxZV3R6Q2lBZ2ZRb2dJSEpsZEhWeWJpQW9DaUFnSUNCdVpYZFZjbXdLSUNBZ0lDQWdMbkpsY0d4aFkyVW9MMXhjTDJjc0lDY3ZKeWtLSUNBZ0lDQWdMbkpsY0d4aFkyVW9MM2RsWW5CaFkyczZYQzgvTDJjc0lDY25LU0F2THlCU1pXMXZkbVVnYVc1MFpYSnRaV1JwWVhSbElHSmhjMlVnY0dGMGFBb2dJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FITmxiblJ5ZVMxcGJuUmxjbTVoYkM5elpHc3ZibTh0Y21WblpYaHdMV052Ym5OMGNuVmpkRzl5Q2lBZ0lDQWdJQzV5WlhCc1lXTmxLRzVsZHlCU1pXZEZlSEFvWUNobWFXeGxPaTh2S1Q4dktpUjdaWE5qWVhCbFpFSmhjMlY5THlwZ0xDQW5hV2NuS1N3Z0oyRndjRG92THk4bktRb2dJQ2s3Q24wS0NpOHZJRk5zYVdkb2RHeDVJRzF2WkdsbWFXVmtJQ2h1YnlCSlJUZ2djM1Z3Y0c5eWRDd2dSVk0yS1NCaGJtUWdkSEpoYm5OamNtbGlaV1FnZEc4Z1ZIbHdaVk5qY21sd2RBb0tMeThnVTNCc2FYUWdZU0JtYVd4bGJtRnRaU0JwYm5SdklGdHliMjkwTENCa2FYSXNJR0poYzJWdVlXMWxMQ0JsZUhSZExDQjFibWw0SUhabGNuTnBiMjRLTHk4Z0ozSnZiM1FuSUdseklHcDFjM1FnWVNCemJHRnphQ3dnYjNJZ2JtOTBhR2x1Wnk0S1kyOXVjM1FnYzNCc2FYUlFZWFJvVW1VZ1BTQXZYaWhjVXlzNlhGeDhYQzgvS1NoYlhITmNVMTBxUHlrb0tEODZYQzU3TVN3eWZYeGJYaTljWEYwclAzd3BLRnd1VzE0dUwxeGNYU3A4S1Nrb1B6cGJMMXhjWFNvcEpDODdDaThxS2lCS1UwUnZZeUFxTHdwbWRXNWpkR2x2YmlCemNHeHBkRkJoZEdnb1ptbHNaVzVoYldVcElIc0tJQ0F2THlCVWNuVnVZMkYwWlNCbWFXeGxjeUJ1WVcxbGN5Qm5jbVZoZEdWeUlIUm9ZVzRnTVRBeU5DQmphR0Z5WVdOMFpYSnpJSFJ2SUdGMmIybGtJSEpsWjJWNElHUnZjd29nSUM4dklHaDBkSEJ6T2k4dloybDBhSFZpTG1OdmJTOW5aWFJ6Wlc1MGNua3ZjMlZ1ZEhKNUxXcGhkbUZ6WTNKcGNIUXZjSFZzYkM4NE56TTNJMlJwYzJOMWMzTnBiMjVmY2pFeU9EVTNNVGt4TnpJS0lDQmpiMjV6ZENCMGNuVnVZMkYwWldRZ1BTQm1hV3hsYm1GdFpTNXNaVzVuZEdnZ1BpQXhNREkwSUQ4Z1lEeDBjblZ1WTJGMFpXUStKSHRtYVd4bGJtRnRaUzV6YkdsalpTZ3RNVEF5TkNsOVlDQTZJR1pwYkdWdVlXMWxPd29nSUdOdmJuTjBJSEJoY25SeklEMGdjM0JzYVhSUVlYUm9VbVV1WlhobFl5aDBjblZ1WTJGMFpXUXBPd29nSUhKbGRIVnliaUJ3WVhKMGN5QS9JSEJoY25SekxuTnNhV05sS0RFcElEb2dXMTA3Q24wS0NpOHFLaUJLVTBSdll5QXFMd3BtZFc1amRHbHZiaUJrYVhKdVlXMWxLSEJoZEdncElIc0tJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQnpjR3hwZEZCaGRHZ29jR0YwYUNrN0NpQWdZMjl1YzNRZ2NtOXZkQ0E5SUhKbGMzVnNkRnN3WFRzS0lDQnNaWFFnWkdseUlEMGdjbVZ6ZFd4MFd6RmRPd29LSUNCcFppQW9JWEp2YjNRZ0ppWWdJV1JwY2lrZ2V3b2dJQ0FnTHk4Z1RtOGdaR2x5Ym1GdFpTQjNhR0YwYzI5bGRtVnlDaUFnSUNCeVpYUjFjbTRnSnk0bk93b2dJSDBLQ2lBZ2FXWWdLR1JwY2lrZ2V3b2dJQ0FnTHk4Z1NYUWdhR0Z6SUdFZ1pHbHlibUZ0WlN3Z2MzUnlhWEFnZEhKaGFXeHBibWNnYzJ4aGMyZ0tJQ0FnSUdScGNpQTlJR1JwY2k1emJHbGpaU2d3TENCa2FYSXViR1Z1WjNSb0lDMGdNU2s3Q2lBZ2ZRb0tJQ0J5WlhSMWNtNGdjbTl2ZENBcklHUnBjanNLZlFvS0x5b2daWE5zYVc1MExXUnBjMkZpYkdVZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyVjRjR3hwWTJsMExXWjFibU4wYVc5dUxYSmxkSFZ5YmkxMGVYQmxJQ292Q2dvdktpb2dVM2x1WTFCeWIyMXBjMlVnYVc1MFpYSnVZV3dnYzNSaGRHVnpJQ292Q25aaGNpQlRkR0YwWlhNN0lDaG1kVzVqZEdsdmJpQW9VM1JoZEdWektTQjdDaUFnTHlvcUlGQmxibVJwYm1jZ0tpOEtJQ0JqYjI1emRDQlFSVTVFU1U1SElEMGdNRHNnVTNSaGRHVnpXMU4wWVhSbGMxc2lVRVZPUkVsT1J5SmRJRDBnVUVWT1JFbE9SMTBnUFNBaVVFVk9SRWxPUnlJN0NpQWdMeW9xSUZKbGMyOXNkbVZrSUM4Z1Qwc2dLaThLSUNCamIyNXpkQ0JTUlZOUFRGWkZSQ0E5SURFN0lGTjBZWFJsYzF0VGRHRjBaWE5iSWxKRlUwOU1Wa1ZFSWwwZ1BTQlNSVk5QVEZaRlJGMGdQU0FpVWtWVFQweFdSVVFpT3dvZ0lDOHFLaUJTWldwbFkzUmxaQ0F2SUVWeWNtOXlJQ292Q2lBZ1kyOXVjM1FnVWtWS1JVTlVSVVFnUFNBeU95QlRkR0YwWlhOYlUzUmhkR1Z6V3lKU1JVcEZRMVJGUkNKZElEMGdVa1ZLUlVOVVJVUmRJRDBnSWxKRlNrVkRWRVZFSWpzS2ZTa29VM1JoZEdWeklIeDhJQ2hUZEdGMFpYTWdQU0I3ZlNrcE93b0tMeThnVDNabGNteHZZV1J6SUhOdklIZGxJR05oYmlCallXeHNJSEpsYzI5c2RtVmtVM2x1WTFCeWIyMXBjMlVnZDJsMGFHOTFkQ0JoY21kMWJXVnVkSE1nWVc1a0lHZGxibVZ5YVdNZ1lYSm5kVzFsYm5RS0NpOHFLZ29nS2lCRGNtVmhkR1Z6SUdFZ2NtVnpiMngyWldRZ2MzbHVZeUJ3Y205dGFYTmxMZ29nS2dvZ0tpQkFjR0Z5WVcwZ2RtRnNkV1VnZEdobElIWmhiSFZsSUhSdklISmxjMjlzZG1VZ2RHaGxJSEJ5YjIxcGMyVWdkMmwwYUFvZ0tpQkFjbVYwZFhKdWN5QjBhR1VnY21WemIyeDJaV1FnYzNsdVl5QndjbTl0YVhObENpQXFMd3BtZFc1amRHbHZiaUJ5WlhOdmJIWmxaRk41Ym1OUWNtOXRhWE5sS0haaGJIVmxLU0I3Q2lBZ2NtVjBkWEp1SUc1bGR5QlRlVzVqVUhKdmJXbHpaU2h5WlhOdmJIWmxJRDArSUhzS0lDQWdJSEpsYzI5c2RtVW9kbUZzZFdVcE93b2dJSDBwT3dwOUNnb3ZLaW9LSUNvZ1EzSmxZWFJsY3lCaElISmxhbVZqZEdWa0lITjVibU1nY0hKdmJXbHpaUzRLSUNvS0lDb2dRSEJoY21GdElIWmhiSFZsSUhSb1pTQjJZV3gxWlNCMGJ5QnlaV3BsWTNRZ2RHaGxJSEJ5YjIxcGMyVWdkMmwwYUFvZ0tpQkFjbVYwZFhKdWN5QjBhR1VnY21WcVpXTjBaV1FnYzNsdVl5QndjbTl0YVhObENpQXFMd3BtZFc1amRHbHZiaUJ5WldwbFkzUmxaRk41Ym1OUWNtOXRhWE5sS0hKbFlYTnZiaWtnZXdvZ0lISmxkSFZ5YmlCdVpYY2dVM2x1WTFCeWIyMXBjMlVvS0Y4c0lISmxhbVZqZENrZ1BUNGdld29nSUNBZ2NtVnFaV04wS0hKbFlYTnZiaWs3Q2lBZ2ZTazdDbjBLQ2k4cUtnb2dLaUJVYUdWdVlXSnNaU0JqYkdGemN5QjBhR0YwSUdKbGFHRjJaWE1nYkdsclpTQmhJRkJ5YjIxcGMyVWdZVzVrSUdadmJHeHZkM01nYVhRbmN5QnBiblJsY21aaFkyVUtJQ29nWW5WMElHbHpJRzV2ZENCaGMzbHVZeUJwYm5SbGNtNWhiR3g1Q2lBcUx3cGpiR0Z6Y3lCVGVXNWpVSEp2YldselpTQjdDZ29nSUNCamIyNXpkSEoxWTNSdmNpZ0tJQ0FnSUdWNFpXTjFkRzl5TEFvZ0lDa2dlMU41Ym1OUWNtOXRhWE5sTG5CeWIzUnZkSGx3WlM1ZlgybHVhWFF1WTJGc2JDaDBhR2x6S1R0VGVXNWpVSEp2YldselpTNXdjbTkwYjNSNWNHVXVYMTlwYm1sME1pNWpZV3hzS0hSb2FYTXBPMU41Ym1OUWNtOXRhWE5sTG5CeWIzUnZkSGx3WlM1ZlgybHVhWFF6TG1OaGJHd29kR2hwY3lrN1UzbHVZMUJ5YjIxcGMyVXVjSEp2ZEc5MGVYQmxMbDlmYVc1cGREUXVZMkZzYkNoMGFHbHpLVHNLSUNBZ0lIUm9hWE11WDNOMFlYUmxJRDBnVTNSaGRHVnpMbEJGVGtSSlRrYzdDaUFnSUNCMGFHbHpMbDlvWVc1a2JHVnljeUE5SUZ0ZE93b0tJQ0FnSUhSeWVTQjdDaUFnSUNBZ0lHVjRaV04xZEc5eUtIUm9hWE11WDNKbGMyOXNkbVVzSUhSb2FYTXVYM0psYW1WamRDazdDaUFnSUNCOUlHTmhkR05vSUNobEtTQjdDaUFnSUNBZ0lIUm9hWE11WDNKbGFtVmpkQ2hsS1RzS0lDQWdJSDBLSUNCOUNnb2dJQzhxS2lCS1UwUnZZeUFxTHdvZ0lDQjBhR1Z1S0FvZ0lDQWdiMjVtZFd4bWFXeHNaV1FzQ2lBZ0lDQnZibkpsYW1WamRHVmtMQW9nSUNrZ2V3b2dJQ0FnY21WMGRYSnVJRzVsZHlCVGVXNWpVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3Q2lBZ0lDQWdJSFJvYVhNdVgyaGhibVJzWlhKekxuQjFjMmdvV3dvZ0lDQWdJQ0FnSUdaaGJITmxMQW9nSUNBZ0lDQWdJSEpsYzNWc2RDQTlQaUI3Q2lBZ0lDQWdJQ0FnSUNCcFppQW9JVzl1Wm5Wc1ptbHNiR1ZrS1NCN0NpQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSUFJFODZJTUt2WEY4bzQ0T0VLVjh2d3E4S0lDQWdJQ0FnSUNBZ0lDQWdMeThnVkU5RVR6b2dSa2xZVFVVS0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6YjJ4MlpTaHlaWE4xYkhRZ0tUc0tJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdDaUFnSUNBZ0lDQWdJQ0FnSUhSeWVTQjdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnpiMngyWlNodmJtWjFiR1pwYkd4bFpDaHlaWE4xYkhRcEtUc0tJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2V3b2dJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2hsS1RzS0lDQWdJQ0FnSUNBZ0lDQWdmUW9nSUNBZ0lDQWdJQ0FnZlFvZ0lDQWdJQ0FnSUgwc0NpQWdJQ0FnSUNBZ2NtVmhjMjl1SUQwK0lIc0tJQ0FnSUNBZ0lDQWdJR2xtSUNnaGIyNXlaV3BsWTNSbFpDa2dld29nSUNBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvY21WaGMyOXVLVHNLSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3Q2lBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3Q2lBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6YjJ4MlpTaHZibkpsYW1WamRHVmtLSEpsWVhOdmJpa3BPd29nSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnFaV04wS0dVcE93b2dJQ0FnSUNBZ0lDQWdJQ0I5Q2lBZ0lDQWdJQ0FnSUNCOUNpQWdJQ0FnSUNBZ2ZTd0tJQ0FnSUNBZ1hTazdDaUFnSUNBZ0lIUm9hWE11WDJWNFpXTjFkR1ZJWVc1a2JHVnljeWdwT3dvZ0lDQWdmU2s3Q2lBZ2ZRb0tJQ0F2S2lvZ1NsTkViMk1nS2k4S0lDQWdZMkYwWTJnb0NpQWdJQ0J2Ym5KbGFtVmpkR1ZrTEFvZ0lDa2dld29nSUNBZ2NtVjBkWEp1SUhSb2FYTXVkR2hsYmloMllXd2dQVDRnZG1Gc0xDQnZibkpsYW1WamRHVmtLVHNLSUNCOUNnb2dJQzhxS2lCS1UwUnZZeUFxTHdvZ0lDQm1hVzVoYkd4NUtHOXVabWx1WVd4c2VTa2dld29nSUNBZ2NtVjBkWEp1SUc1bGR5QlRlVzVqVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN0NpQWdJQ0FnSUd4bGRDQjJZV3c3Q2lBZ0lDQWdJR3hsZENCcGMxSmxhbVZqZEdWa093b0tJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkR2hsYmlnS0lDQWdJQ0FnSUNCMllXeDFaU0E5UGlCN0NpQWdJQ0FnSUNBZ0lDQnBjMUpsYW1WamRHVmtJRDBnWm1Gc2MyVTdDaUFnSUNBZ0lDQWdJQ0IyWVd3Z1BTQjJZV3gxWlRzS0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2Ym1acGJtRnNiSGtwSUhzS0lDQWdJQ0FnSUNBZ0lDQWdiMjVtYVc1aGJHeDVLQ2s3Q2lBZ0lDQWdJQ0FnSUNCOUNpQWdJQ0FnSUNBZ2ZTd0tJQ0FnSUNBZ0lDQnlaV0Z6YjI0Z1BUNGdld29nSUNBZ0lDQWdJQ0FnYVhOU1pXcGxZM1JsWkNBOUlIUnlkV1U3Q2lBZ0lDQWdJQ0FnSUNCMllXd2dQU0J5WldGemIyNDdDaUFnSUNBZ0lDQWdJQ0JwWmlBb2IyNW1hVzVoYkd4NUtTQjdDaUFnSUNBZ0lDQWdJQ0FnSUc5dVptbHVZV3hzZVNncE93b2dJQ0FnSUNBZ0lDQWdmUW9nSUNBZ0lDQWdJSDBzQ2lBZ0lDQWdJQ2t1ZEdobGJpZ29LU0E5UGlCN0NpQWdJQ0FnSUNBZ2FXWWdLR2x6VW1WcVpXTjBaV1FwSUhzS0lDQWdJQ0FnSUNBZ0lISmxhbVZqZENoMllXd3BPd29nSUNBZ0lDQWdJQ0FnY21WMGRYSnVPd29nSUNBZ0lDQWdJSDBLQ2lBZ0lDQWdJQ0FnY21WemIyeDJaU2gyWVd3Z0tUc0tJQ0FnSUNBZ2ZTazdDaUFnSUNCOUtUc0tJQ0I5Q2dvZ0lDOHFLaUJLVTBSdll5QXFMd29nSUNBZ1gxOXBibWwwS0NrZ2UzUm9hWE11WDNKbGMyOXNkbVVnUFNBb2RtRnNkV1VwSUQwK0lIc0tJQ0FnSUhSb2FYTXVYM05sZEZKbGMzVnNkQ2hUZEdGMFpYTXVVa1ZUVDB4V1JVUXNJSFpoYkhWbEtUc0tJQ0I5TzMwS0NpQWdMeW9xSUVwVFJHOWpJQ292Q2lBZ0lDQmZYMmx1YVhReUtDa2dlM1JvYVhNdVgzSmxhbVZqZENBOUlDaHlaV0Z6YjI0cElEMCtJSHNLSUNBZ0lIUm9hWE11WDNObGRGSmxjM1ZzZENoVGRHRjBaWE11VWtWS1JVTlVSVVFzSUhKbFlYTnZiaWs3Q2lBZ2ZUdDlDZ29nSUM4cUtpQktVMFJ2WXlBcUx3b2dJQ0FnWDE5cGJtbDBNeWdwSUh0MGFHbHpMbDl6WlhSU1pYTjFiSFFnUFNBb2MzUmhkR1VzSUhaaGJIVmxLU0E5UGlCN0NpQWdJQ0JwWmlBb2RHaHBjeTVmYzNSaGRHVWdJVDA5SUZOMFlYUmxjeTVRUlU1RVNVNUhLU0I3Q2lBZ0lDQWdJSEpsZEhWeWJqc0tJQ0FnSUgwS0NpQWdJQ0JwWmlBb2FYTlVhR1Z1WVdKc1pTaDJZV3gxWlNrcElIc0tJQ0FnSUNBZ2RtOXBaQ0FvZG1Gc2RXVWdLUzUwYUdWdUtIUm9hWE11WDNKbGMyOXNkbVVzSUhSb2FYTXVYM0psYW1WamRDazdDaUFnSUNBZ0lISmxkSFZ5YmpzS0lDQWdJSDBLQ2lBZ0lDQjBhR2x6TGw5emRHRjBaU0E5SUhOMFlYUmxPd29nSUNBZ2RHaHBjeTVmZG1Gc2RXVWdQU0IyWVd4MVpUc0tDaUFnSUNCMGFHbHpMbDlsZUdWamRYUmxTR0Z1Wkd4bGNuTW9LVHNLSUNCOU8zMEtDaUFnTHlvcUlFcFRSRzlqSUNvdkNpQWdJQ0JmWDJsdWFYUTBLQ2tnZTNSb2FYTXVYMlY0WldOMWRHVklZVzVrYkdWeWN5QTlJQ2dwSUQwK0lIc0tJQ0FnSUdsbUlDaDBhR2x6TGw5emRHRjBaU0E5UFQwZ1UzUmhkR1Z6TGxCRlRrUkpUa2NwSUhzS0lDQWdJQ0FnY21WMGRYSnVPd29nSUNBZ2ZRb0tJQ0FnSUdOdmJuTjBJR05oWTJobFpFaGhibVJzWlhKeklEMGdkR2hwY3k1ZmFHRnVaR3hsY25NdWMyeHBZMlVvS1RzS0lDQWdJSFJvYVhNdVgyaGhibVJzWlhKeklEMGdXMTA3Q2dvZ0lDQWdZMkZqYUdWa1NHRnVaR3hsY25NdVptOXlSV0ZqYUNob1lXNWtiR1Z5SUQwK0lIc0tJQ0FnSUNBZ2FXWWdLR2hoYm1Sc1pYSmJNRjBwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTQ3Q2lBZ0lDQWdJSDBLQ2lBZ0lDQWdJR2xtSUNoMGFHbHpMbDl6ZEdGMFpTQTlQVDBnVTNSaGRHVnpMbEpGVTA5TVZrVkVLU0I3Q2lBZ0lDQWdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dWJ5MW1iRzloZEdsdVp5MXdjbTl0YVhObGN3b2dJQ0FnSUNBZ0lHaGhibVJzWlhKYk1WMG9kR2hwY3k1ZmRtRnNkV1VnS1RzS0lDQWdJQ0FnZlFvS0lDQWdJQ0FnYVdZZ0tIUm9hWE11WDNOMFlYUmxJRDA5UFNCVGRHRjBaWE11VWtWS1JVTlVSVVFwSUhzS0lDQWdJQ0FnSUNCb1lXNWtiR1Z5V3pKZEtIUm9hWE11WDNaaGJIVmxLVHNLSUNBZ0lDQWdmUW9LSUNBZ0lDQWdhR0Z1Wkd4bGNsc3dYU0E5SUhSeWRXVTdDaUFnSUNCOUtUc0tJQ0I5TzMwS2ZRb0tMeW9xQ2lBcUlFTnlaV0YwWlhNZ1lXNGdibVYzSUZCeWIyMXBjMlZDZFdabVpYSWdiMkpxWldOMElIZHBkR2dnZEdobElITndaV05wWm1sbFpDQnNhVzFwZEFvZ0tpQkFjR0Z5WVcwZ2JHbHRhWFFnYldGNElHNTFiV0psY2lCdlppQndjbTl0YVhObGN5QjBhR0YwSUdOaGJpQmlaU0J6ZEc5eVpXUWdhVzRnZEdobElHSjFabVpsY2dvZ0tpOEtablZ1WTNScGIyNGdiV0ZyWlZCeWIyMXBjMlZDZFdabVpYSW9iR2x0YVhRcElIc0tJQ0JqYjI1emRDQmlkV1ptWlhJZ1BTQmJYVHNLQ2lBZ1puVnVZM1JwYjI0Z2FYTlNaV0ZrZVNncElIc0tJQ0FnSUhKbGRIVnliaUJzYVcxcGRDQTlQVDBnZFc1a1pXWnBibVZrSUh4OElHSjFabVpsY2k1c1pXNW5kR2dnUENCc2FXMXBkRHNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRkpsYlc5MlpTQmhJSEJ5YjIxcGMyVWdabkp2YlNCMGFHVWdjWFZsZFdVdUNpQWdJQ29LSUNBZ0tpQkFjR0Z5WVcwZ2RHRnpheUJEWVc0Z1ltVWdZVzU1SUZCeWIyMXBjMlZNYVd0bFBGUStDaUFnSUNvZ1FISmxkSFZ5Ym5NZ1VtVnRiM1psWkNCd2NtOXRhWE5sTGdvZ0lDQXFMd29nSUdaMWJtTjBhVzl1SUhKbGJXOTJaU2gwWVhOcktTQjdDaUFnSUNCeVpYUjFjbTRnWW5WbVptVnlMbk53YkdsalpTaGlkV1ptWlhJdWFXNWtaWGhQWmloMFlYTnJLU3dnTVNsYk1GMDdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkJaR1FnWVNCd2NtOXRhWE5sSUNoeVpYQnlaWE5sYm5ScGJtY2dZVzRnYVc0dFpteHBaMmgwSUdGamRHbHZiaWtnZEc4Z2RHaGxJSEYxWlhWbExDQmhibVFnYzJWMElHbDBJSFJ2SUhKbGJXOTJaU0JwZEhObGJHWWdiMjRnWm5Wc1ptbHNiRzFsYm5RdUNpQWdJQ29LSUNBZ0tpQkFjR0Z5WVcwZ2RHRnphMUJ5YjJSMVkyVnlJRUVnWm5WdVkzUnBiMjRnY0hKdlpIVmphVzVuSUdGdWVTQlFjbTl0YVhObFRHbHJaVHhVUGpzZ1NXNGdjSEpsZG1sdmRYTWdkbVZ5YzJsdmJuTWdkR2hwY3lCMWMyVmtJSFJ2SUdKbElHQjBZWE5yT2dvZ0lDQXFJQ0FnSUNBZ0lDQlFjbTl0YVhObFRHbHJaVHhVUG1Bc0lHSjFkQ0IxYm1SbGNpQjBhR0YwSUcxdlpHVnNMQ0JRY205dGFYTmxjeUIzWlhKbElHbHVjM1JoYm5Sc2VTQmpjbVZoZEdWa0lHOXVJSFJvWlNCallXeHNMWE5wZEdVZ1lXNWtJSFJvWldseUlHVjRaV04xZEc5eUNpQWdJQ29nSUNBZ0lDQWdJR1oxYm1OMGFXOXVjeUIwYUdWeVpXWnZjbVVnY21GdUlHbHRiV1ZrYVdGMFpXeDVMaUJVYUhWekxDQmxkbVZ1SUdsbUlIUm9aU0JpZFdabVpYSWdkMkZ6SUdaMWJHd3NJSFJvWlNCaFkzUnBiMjRnYzNScGJHd2dhR0Z3Y0dWdVpXUXVJRUo1Q2lBZ0lDb2dJQ0FnSUNBZ0lISmxjWFZwY21sdVp5QjBhR1VnY0hKdmJXbHpaU0IwYnlCaVpTQjNjbUZ3Y0dWa0lHbHVJR0VnWm5WdVkzUnBiMjRzSUhkbElHTmhiaUJrWldabGNpQndjbTl0YVhObElHTnlaV0YwYVc5dUlIVnVkR2xzSUdGbWRHVnlJSFJvWlNCaWRXWm1aWElLSUNBZ0tpQWdJQ0FnSUNBZ2JHbHRhWFFnWTJobFkyc3VDaUFnSUNvZ1FISmxkSFZ5Ym5NZ1ZHaGxJRzl5YVdkcGJtRnNJSEJ5YjIxcGMyVXVDaUFnSUNvdkNpQWdablZ1WTNScGIyNGdZV1JrS0hSaGMydFFjbTlrZFdObGNpa2dld29nSUNBZ2FXWWdLQ0ZwYzFKbFlXUjVLQ2twSUhzS0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRHVmtVM2x1WTFCeWIyMXBjMlVvYm1WM0lGTmxiblJ5ZVVWeWNtOXlLQ2RPYjNRZ1lXUmthVzVuSUZCeWIyMXBjMlVnWW1WallYVnpaU0JpZFdabVpYSWdiR2x0YVhRZ2QyRnpJSEpsWVdOb1pXUXVKeWtwT3dvZ0lDQWdmUW9LSUNBZ0lDOHZJSE4wWVhKMElIUm9aU0IwWVhOcklHRnVaQ0JoWkdRZ2FYUnpJSEJ5YjIxcGMyVWdkRzhnZEdobElIRjFaWFZsQ2lBZ0lDQmpiMjV6ZENCMFlYTnJJRDBnZEdGemExQnliMlIxWTJWeUtDazdDaUFnSUNCcFppQW9ZblZtWm1WeUxtbHVaR1Y0VDJZb2RHRnpheWtnUFQwOUlDMHhLU0I3Q2lBZ0lDQWdJR0oxWm1abGNpNXdkWE5vS0hSaGMyc3BPd29nSUNBZ2ZRb2dJQ0FnZG05cFpDQjBZWE5yQ2lBZ0lDQWdJQzUwYUdWdUtDZ3BJRDArSUhKbGJXOTJaU2gwWVhOcktTa0tJQ0FnSUNBZ0x5OGdWWE5sSUdCMGFHVnVLRzUxYkd3c0lISmxhbVZqZEdsdmJraGhibVJzWlhJcFlDQnlZWFJvWlhJZ2RHaGhiaUJnWTJGMFkyZ29jbVZxWldOMGFXOXVTR0Z1Wkd4bGNpbGdJSE52SUhSb1lYUWdkMlVnWTJGdUlIVnpaU0JnVUhKdmJXbHpaVXhwYTJWZ0NpQWdJQ0FnSUM4dklISmhkR2hsY2lCMGFHRnVJR0JRY205dGFYTmxZQzRnWUZCeWIyMXBjMlZNYVd0bFlDQmtiMlZ6YmlkMElHaGhkbVVnWVNCZ0xtTmhkR05vWUNCdFpYUm9iMlFzSUcxaGEybHVaeUJwZEhNZ2NHOXNlV1pwYkd3Z2MyMWhiR3hsY2k0Z0tFVlROU0JrYVdSdUozUUtJQ0FnSUNBZ0x5OGdhR0YyWlNCd2NtOXRhWE5sY3l3Z2MyOGdWRk1nYUdGeklIUnZJSEJ2YkhsbWFXeHNJSGRvWlc0Z1pHOTNiaTFqYjIxd2FXeHBibWN1S1FvZ0lDQWdJQ0F1ZEdobGJpaHVkV3hzTENBb0tTQTlQZ29nSUNBZ0lDQWdJSEpsYlc5MlpTaDBZWE5yS1M1MGFHVnVLRzUxYkd3c0lDZ3BJRDArSUhzS0lDQWdJQ0FnSUNBZ0lDOHZJRmRsSUdoaGRtVWdkRzhnWVdSa0lHRnViM1JvWlhJZ1kyRjBZMmdnYUdWeVpTQmlaV05oZFhObElHQnlaVzF2ZG1Vb0tXQWdjM1JoY25SeklHRWdibVYzSUhCeWIyMXBjMlVnWTJoaGFXNHVDaUFnSUNBZ0lDQWdmU2tzQ2lBZ0lDQWdJQ2s3Q2lBZ0lDQnlaWFIxY200Z2RHRnphenNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRmRoYVhRZ1ptOXlJR0ZzYkNCd2NtOXRhWE5sY3lCcGJpQjBhR1VnY1hWbGRXVWdkRzhnY21WemIyeDJaU0J2Y2lCbWIzSWdkR2x0Wlc5MWRDQjBieUJsZUhCcGNtVXNJSGRvYVdOb1pYWmxjaUJqYjIxbGN5Qm1hWEp6ZEM0S0lDQWdLZ29nSUNBcUlFQndZWEpoYlNCMGFXMWxiM1YwSUZSb1pTQjBhVzFsTENCcGJpQnRjeXdnWVdaMFpYSWdkMmhwWTJnZ2RHOGdjbVZ6YjJ4MlpTQjBieUJnWm1Gc2MyVmdJR2xtSUhSb1pTQnhkV1YxWlNCcGN5QnpkR2xzYkNCdWIyNHRaVzF3ZEhrdUlGQmhjM05wYm1jZ1lEQmdJQ2h2Y2dvZ0lDQXFJRzV2ZENCd1lYTnphVzVuSUdGdWVYUm9hVzVuS1NCM2FXeHNJRzFoYTJVZ2RHaGxJSEJ5YjIxcGMyVWdkMkZwZENCaGN5QnNiMjVuSUdGeklHbDBJSFJoYTJWeklHWnZjaUIwYUdVZ2NYVmxkV1VnZEc4Z1pISmhhVzRnWW1WbWIzSmxJSEpsYzI5c2RtbHVaeUIwYndvZ0lDQXFJR0IwY25WbFlDNEtJQ0FnS2lCQWNtVjBkWEp1Y3lCQklIQnliMjFwYzJVZ2QyaHBZMmdnZDJsc2JDQnlaWE52YkhabElIUnZJR0IwY25WbFlDQnBaaUIwYUdVZ2NYVmxkV1VnYVhNZ1lXeHlaV0ZrZVNCbGJYQjBlU0J2Y2lCa2NtRnBibk1nWW1WbWIzSmxJSFJvWlNCMGFXMWxiM1YwTENCaGJtUUtJQ0FnS2lCZ1ptRnNjMlZnSUc5MGFHVnlkMmx6WlFvZ0lDQXFMd29nSUdaMWJtTjBhVzl1SUdSeVlXbHVLSFJwYldWdmRYUXBJSHNLSUNBZ0lISmxkSFZ5YmlCdVpYY2dVM2x1WTFCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2V3b2dJQ0FnSUNCc1pYUWdZMjkxYm5SbGNpQTlJR0oxWm1abGNpNXNaVzVuZEdnN0Nnb2dJQ0FnSUNCcFppQW9JV052ZFc1MFpYSXBJSHNLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaDBjblZsS1RzS0lDQWdJQ0FnZlFvS0lDQWdJQ0FnTHk4Z2QyRnBkQ0JtYjNJZ1lIUnBiV1Z2ZFhSZ0lHMXpJR0Z1WkNCMGFHVnVJSEpsYzI5c2RtVWdkRzhnWUdaaGJITmxZQ0FvYVdZZ2JtOTBJR05oYm1ObGJHeGxaQ0JtYVhKemRDa0tJQ0FnSUNBZ1kyOXVjM1FnWTJGd2RIVnlaV1JUWlhSVWFXMWxiM1YwSUQwZ2MyVjBWR2x0Wlc5MWRDZ29LU0E5UGlCN0NpQWdJQ0FnSUNBZ2FXWWdLSFJwYldWdmRYUWdKaVlnZEdsdFpXOTFkQ0ErSURBcElIc0tJQ0FnSUNBZ0lDQWdJSEpsYzI5c2RtVW9abUZzYzJVcE93b2dJQ0FnSUNBZ0lIMEtJQ0FnSUNBZ2ZTd2dkR2x0Wlc5MWRDazdDZ29nSUNBZ0lDQXZMeUJwWmlCaGJHd2djSEp2YldselpYTWdjbVZ6YjJ4MlpTQnBiaUIwYVcxbExDQmpZVzVqWld3Z2RHaGxJSFJwYldWeUlHRnVaQ0J5WlhOdmJIWmxJSFJ2SUdCMGNuVmxZQW9nSUNBZ0lDQmlkV1ptWlhJdVptOXlSV0ZqYUNocGRHVnRJRDArSUhzS0lDQWdJQ0FnSUNCMmIybGtJSEpsYzI5c2RtVmtVM2x1WTFCeWIyMXBjMlVvYVhSbGJTa3VkR2hsYmlnb0tTQTlQaUI3Q2lBZ0lDQWdJQ0FnSUNCcFppQW9JUzB0WTI5MWJuUmxjaWtnZXdvZ0lDQWdJQ0FnSUNBZ0lDQmpiR1ZoY2xScGJXVnZkWFFvWTJGd2RIVnlaV1JUWlhSVWFXMWxiM1YwS1RzS0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6YjJ4MlpTaDBjblZsS1RzS0lDQWdJQ0FnSUNBZ0lIMEtJQ0FnSUNBZ0lDQjlMQ0J5WldwbFkzUXBPd29nSUNBZ0lDQjlLVHNLSUNBZ0lIMHBPd29nSUgwS0NpQWdjbVYwZFhKdUlIc0tJQ0FnSUNRNklHSjFabVpsY2l3S0lDQWdJR0ZrWkN3S0lDQWdJR1J5WVdsdUxBb2dJSDA3Q24wS0NtTnZibk4wSUU5T1JWOVRSVU5QVGtSZlNVNWZUVk1nUFNBeE1EQXdPd29LTHlvcUNpQXFJRUVnY0dGeWRHbGhiQ0JrWldacGJtbDBhVzl1SUc5bUlIUm9aU0JiVUdWeVptOXliV0Z1WTJVZ1YyVmlJRUZRU1YxN1FHeHBibXNnYUhSMGNITTZMeTlrWlhabGJHOXdaWEl1Ylc5NmFXeHNZUzV2Y21jdlpXNHRWVk12Wkc5amN5OVhaV0l2UVZCSkwxQmxjbVp2Y20xaGJtTmxmUW9nS2lCbWIzSWdZV05qWlhOemFXNW5JR0VnYUdsbmFDMXlaWE52YkhWMGFXOXVJRzF2Ym05MGIyNXBZeUJqYkc5amF5NEtJQ292Q2dvdktpb0tJQ29nVW1WMGRYSnVjeUJoSUhScGJXVnpkR0Z0Y0NCcGJpQnpaV052Ym1SeklITnBibU5sSUhSb1pTQlZUa2xZSUdWd2IyTm9JSFZ6YVc1bklIUm9aU0JFWVhSbElFRlFTUzRLSUNvS0lDb2dWRTlFVHloMk9DazZJRkpsZEhWeWJpQjBlWEJsSUhOb2IzVnNaQ0JpWlNCeWIzVnVaR1ZrTGdvZ0tpOEtablZ1WTNScGIyNGdaR0YwWlZScGJXVnpkR0Z0Y0VsdVUyVmpiMjVrY3lncElIc0tJQ0J5WlhSMWNtNGdSR0YwWlM1dWIzY29LU0F2SUU5T1JWOVRSVU5QVGtSZlNVNWZUVk03Q24wS0NpOHFLZ29nS2lCU1pYUjFjbTV6SUdFZ2QzSmhjSEJsY2lCaGNtOTFibVFnZEdobElHNWhkR2wyWlNCUVpYSm1iM0p0WVc1alpTQkJVRWtnWW5KdmQzTmxjaUJwYlhCc1pXMWxiblJoZEdsdmJpd2diM0lnZFc1a1pXWnBibVZrSUdadmNpQmljbTkzYzJWeWN5QjBhR0YwSUdSdklHNXZkQW9nS2lCemRYQndiM0owSUhSb1pTQkJVRWt1Q2lBcUNpQXFJRmR5WVhCd2FXNW5JSFJvWlNCdVlYUnBkbVVnUVZCSklIZHZjbXR6SUdGeWIzVnVaQ0JrYVdabVpYSmxibU5sY3lCcGJpQmlaV2hoZG1sdmNpQm1jbTl0SUdScFptWmxjbVZ1ZENCaWNtOTNjMlZ5Y3k0S0lDb3ZDbVoxYm1OMGFXOXVJR055WldGMFpWVnVhWGhVYVcxbGMzUmhiWEJKYmxObFkyOXVaSE5HZFc1aktDa2dld29nSUdOdmJuTjBJSHNnY0dWeVptOXliV0Z1WTJVZ2ZTQTlJRWRNVDBKQlRGOVBRa29nT3dvZ0lHbG1JQ2doY0dWeVptOXliV0Z1WTJVZ2ZId2dJWEJsY21admNtMWhibU5sTG01dmR5a2dld29nSUNBZ2NtVjBkWEp1SUdSaGRHVlVhVzFsYzNSaGJYQkpibE5sWTI5dVpITTdDaUFnZlFvS0lDQXZMeUJUYjIxbElHSnliM2R6WlhJZ1lXNWtJR1Z1ZG1seWIyNXRaVzUwY3lCa2IyNG5kQ0JvWVhabElHRWdkR2x0WlU5eWFXZHBiaXdnYzI4Z2QyVWdabUZzYkdKaFkyc2dkRzhLSUNBdkx5QjFjMmx1WnlCRVlYUmxMbTV2ZHlncElIUnZJR052YlhCMWRHVWdkR2hsSUhOMFlYSjBhVzVuSUhScGJXVXVDaUFnWTI5dWMzUWdZWEJ3Y205NFUzUmhjblJwYm1kVWFXMWxUM0pwWjJsdUlEMGdSR0YwWlM1dWIzY29LU0F0SUhCbGNtWnZjbTFoYm1ObExtNXZkeWdwT3dvZ0lHTnZibk4wSUhScGJXVlBjbWxuYVc0Z1BTQndaWEptYjNKdFlXNWpaUzUwYVcxbFQzSnBaMmx1SUQwOUlIVnVaR1ZtYVc1bFpDQS9JR0Z3Y0hKdmVGTjBZWEowYVc1blZHbHRaVTl5YVdkcGJpQTZJSEJsY21admNtMWhibU5sTG5ScGJXVlBjbWxuYVc0N0Nnb2dJQzh2SUhCbGNtWnZjbTFoYm1ObExtNXZkeWdwSUdseklHRWdiVzl1YjNSdmJtbGpJR05zYjJOckxDQjNhR2xqYUNCdFpXRnVjeUJwZENCemRHRnlkSE1nWVhRZ01DQjNhR1Z1SUhSb1pTQndjbTlqWlhOeklHSmxaMmx1Y3k0Z1ZHOGdaMlYwSUhSb1pTQmpkWEp5Wlc1MENpQWdMeThnZDJGc2JDQmpiRzlqYXlCMGFXMWxJQ2hoWTNSMVlXd2dWVTVKV0NCMGFXMWxjM1JoYlhBcExDQjNaU0J1WldWa0lIUnZJR0ZrWkNCMGFHVWdjM1JoY25ScGJtY2dkR2x0WlNCdmNtbG5hVzRnWVc1a0lIUm9aU0JqZFhKeVpXNTBJSFJwYldVZ1pXeGhjSE5sWkM0S0lDQXZMd29nSUM4dklGUlBSRTg2SUZSb2FYTWdaRzlsY3lCdWIzUWdZV05qYjNWdWRDQm1iM0lnZEdobElHTmhjMlVnZDJobGNtVWdkR2hsSUcxdmJtOTBiMjVwWXlCamJHOWpheUIwYUdGMElIQnZkMlZ5Y3lCd1pYSm1iM0p0WVc1alpTNXViM2NvS1NCa2NtbG1kSE1nWm5KdmJTQjBhR1VLSUNBdkx5QjNZV3hzSUdOc2IyTnJJSFJwYldVc0lIZG9hV05vSUdOaGRYTmxjeUIwYUdVZ2NtVjBkWEp1WldRZ2RHbHRaWE4wWVcxd0lIUnZJR0psSUdsdVlXTmpkWEpoZEdVdUlGZGxJSE5vYjNWc1pDQnBiblpsYzNScFoyRjBaU0JvYjNjZ2RHOGdaR1YwWldOMElHRnVaQW9nSUM4dklHTnZjbkpsWTNRZ1ptOXlJSFJvYVhNdUNpQWdMeThnVTJWbE9pQm9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZaMlYwYzJWdWRISjVMM05sYm5SeWVTMXFZWFpoYzJOeWFYQjBMMmx6YzNWbGN5OHlOVGt3Q2lBZ0x5OGdVMlZsT2lCb2RIUndjem92TDJkcGRHaDFZaTVqYjIwdmJXUnVMMk52Ym5SbGJuUXZhWE56ZFdWekx6UTNNVE1LSUNBdkx5QlRaV1U2SUdoMGRIQnpPaTh2WkdWMkxuUnZMMjV2WVcxeUwzZG9aVzR0WVMxdGFXeHNhWE5sWTI5dVpDMXBjeTF1YjNRdFlTMXRhV3hzYVhObFkyOXVaQzB6YURZS0lDQnlaWFIxY200Z0tDa2dQVDRnZXdvZ0lDQWdjbVYwZFhKdUlDaDBhVzFsVDNKcFoybHVJQ3NnY0dWeVptOXliV0Z1WTJVdWJtOTNLQ2twSUM4Z1QwNUZYMU5GUTA5T1JGOUpUbDlOVXpzS0lDQjlPd3A5Q2dvdktpb0tJQ29nVW1WMGRYSnVjeUJoSUhScGJXVnpkR0Z0Y0NCcGJpQnpaV052Ym1SeklITnBibU5sSUhSb1pTQlZUa2xZSUdWd2IyTm9JSFZ6YVc1bklHVnBkR2hsY2lCMGFHVWdVR1Z5Wm05eWJXRnVZMlVnYjNJZ1JHRjBaU0JCVUVsekxDQmtaWEJsYm1ScGJtY2diMjRnZEdobENpQXFJR0YyWVdsc1lXSnBiR2wwZVNCdlppQjBhR1VnVUdWeVptOXliV0Z1WTJVZ1FWQkpMZ29nS2dvZ0tpQkNWVWM2SUU1dmRHVWdkR2hoZENCaVpXTmhkWE5sSUc5bUlHaHZkeUJpY205M2MyVnljeUJwYlhCc1pXMWxiblFnZEdobElGQmxjbVp2Y20xaGJtTmxJRUZRU1N3Z2RHaGxJR05zYjJOcklHMXBaMmgwSUhOMGIzQWdkMmhsYmlCMGFHVWdZMjl0Y0hWMFpYSWdhWE1LSUNvZ1lYTnNaV1Z3TGlCVWFHbHpJR055WldGMFpYTWdZU0J6YTJWM0lHSmxkSGRsWlc0Z1lHUmhkR1ZVYVcxbGMzUmhiWEJKYmxObFkyOXVaSE5nSUdGdVpDQmdkR2x0WlhOMFlXMXdTVzVUWldOdmJtUnpZQzRnVkdobENpQXFJSE5yWlhjZ1kyRnVJR2R5YjNjZ2RHOGdZWEppYVhSeVlYSjVJR0Z0YjNWdWRITWdiR2xyWlNCa1lYbHpMQ0IzWldWcmN5QnZjaUJ0YjI1MGFITXVDaUFxSUZObFpTQm9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZaMlYwYzJWdWRISjVMM05sYm5SeWVTMXFZWFpoYzJOeWFYQjBMMmx6YzNWbGN5OHlOVGt3TGdvZ0tpOEtZMjl1YzNRZ2RHbHRaWE4wWVcxd1NXNVRaV052Ym1SeklEMGdZM0psWVhSbFZXNXBlRlJwYldWemRHRnRjRWx1VTJWamIyNWtjMFoxYm1Nb0tUc0tDaThxS2dvZ0tpQlVhR1VnYm5WdFltVnlJRzltSUcxcGJHeHBjMlZqYjI1a2N5QnphVzVqWlNCMGFHVWdWVTVKV0NCbGNHOWphQzRnVkdocGN5QjJZV3gxWlNCcGN5QnZibXg1SUhWellXSnNaU0JwYmlCaElHSnliM2R6WlhJc0lHRnVaQ0J2Ym14NUlIZG9aVzRnZEdobENpQXFJSEJsY21admNtMWhibU5sSUVGUVNTQnBjeUJoZG1GcGJHRmliR1V1Q2lBcUx3b29LQ2tnUFQ0Z2V3b2dJQzh2SUZWdVptOXlkSFZ1WVhSbGJIa2dZbkp2ZDNObGNuTWdiV0Y1SUhKbGNHOXlkQ0JoYmlCcGJtRmpZM1Z5WVhSbElIUnBiV1VnYjNKcFoybHVJR1JoZEdFc0lIUm9jbTkxWjJnZ1pXbDBhR1Z5SUhCbGNtWnZjbTFoYm1ObExuUnBiV1ZQY21sbmFXNGdiM0lLSUNBdkx5QndaWEptYjNKdFlXNWpaUzUwYVcxcGJtY3VibUYyYVdkaGRHbHZibE4wWVhKMExDQjNhR2xqYUNCeVpYTjFiSFJ6SUdsdUlIQnZiM0lnY21WemRXeDBjeUJwYmlCd1pYSm1iM0p0WVc1alpTQmtZWFJoTGlCWFpTQnZibXg1SUhSeVpXRjBJSFJwYldVZ2IzSnBaMmx1Q2lBZ0x5OGdaR0YwWVNCaGN5QnlaV3hwWVdKc1pTQnBaaUIwYUdWNUlHRnlaU0IzYVhSb2FXNGdZU0J5WldGemIyNWhZbXhsSUhSb2NtVnphRzlzWkNCdlppQjBhR1VnWTNWeWNtVnVkQ0IwYVcxbExnb0tJQ0JqYjI1emRDQjdJSEJsY21admNtMWhibU5sSUgwZ1BTQkhURTlDUVV4ZlQwSktJRHNLSUNCcFppQW9JWEJsY21admNtMWhibU5sSUh4OElDRndaWEptYjNKdFlXNWpaUzV1YjNjcElIc0tJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3Q2lBZ2ZRb0tJQ0JqYjI1emRDQjBhSEpsYzJodmJHUWdQU0F6TmpBd0lDb2dNVEF3TURzS0lDQmpiMjV6ZENCd1pYSm1iM0p0WVc1alpVNXZkeUE5SUhCbGNtWnZjbTFoYm1ObExtNXZkeWdwT3dvZ0lHTnZibk4wSUdSaGRHVk9iM2NnUFNCRVlYUmxMbTV2ZHlncE93b0tJQ0F2THlCcFppQjBhVzFsVDNKcFoybHVJR2x6YmlkMElHRjJZV2xzWVdKc1pTQnpaWFFnWkdWc2RHRWdkRzhnZEdoeVpYTm9iMnhrSUhOdklHbDBJR2x6YmlkMElIVnpaV1FLSUNCamIyNXpkQ0IwYVcxbFQzSnBaMmx1UkdWc2RHRWdQU0J3WlhKbWIzSnRZVzVqWlM1MGFXMWxUM0pwWjJsdUNpQWdJQ0EvSUUxaGRHZ3VZV0p6S0hCbGNtWnZjbTFoYm1ObExuUnBiV1ZQY21sbmFXNGdLeUJ3WlhKbWIzSnRZVzVqWlU1dmR5QXRJR1JoZEdWT2IzY3BDaUFnSUNBNklIUm9jbVZ6YUc5c1pEc0tJQ0JqYjI1emRDQjBhVzFsVDNKcFoybHVTWE5TWld4cFlXSnNaU0E5SUhScGJXVlBjbWxuYVc1RVpXeDBZU0E4SUhSb2NtVnphRzlzWkRzS0NpQWdMeThnVjJocGJHVWdjR1Z5Wm05eWJXRnVZMlV1ZEdsdGFXNW5MbTVoZG1sbllYUnBiMjVUZEdGeWRDQnBjeUJrWlhCeVpXTmhkR1ZrSUdsdUlHWmhkbTl5SUc5bUlIQmxjbVp2Y20xaGJtTmxMblJwYldWUGNtbG5hVzRzSUhCbGNtWnZjbTFoYm1ObExuUnBiV1ZQY21sbmFXNEtJQ0F2THlCcGN5QnViM1FnWVhNZ2QybGtaV3g1SUhOMWNIQnZjblJsWkM0Z1RtRnRaV3g1TENCd1pYSm1iM0p0WVc1alpTNTBhVzFsVDNKcFoybHVJR2x6SUhWdVpHVm1hVzVsWkNCcGJpQlRZV1poY21rZ1lYTWdiMllnZDNKcGRHbHVaeTRLSUNBdkx5QkJiSE52SUdGeklHOW1JSGR5YVhScGJtY3NJSEJsY21admNtMWhibU5sTG5ScGJXbHVaeUJwY3lCdWIzUWdZWFpoYVd4aFlteGxJR2x1SUZkbFlpQlhiM0pyWlhKeklHbHVJRzFoYVc1emRISmxZVzBnWW5KdmQzTmxjbk1zSUhOdklHbDBJR2x6SUc1dmRDQmhiSGRoZVhNS0lDQXZMeUJoSUhaaGJHbGtJR1poYkd4aVlXTnJMaUJKYmlCMGFHVWdZV0p6Wlc1alpTQnZaaUJoYmlCcGJtbDBhV0ZzSUhScGJXVWdjSEp2ZG1sa1pXUWdZbmtnZEdobElHSnliM2R6WlhJc0lHWmhiR3hpWVdOcklIUnZJSFJvWlNCamRYSnlaVzUwSUhScGJXVWdabkp2YlNCMGFHVUtJQ0F2THlCRVlYUmxJRUZRU1M0S0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdaR1Z3Y21WallYUnBiMjR2WkdWd2NtVmpZWFJwYjI0S0lDQmpiMjV6ZENCdVlYWnBaMkYwYVc5dVUzUmhjblFnUFNCd1pYSm1iM0p0WVc1alpTNTBhVzFwYm1jZ0ppWWdjR1Z5Wm05eWJXRnVZMlV1ZEdsdGFXNW5MbTVoZG1sbllYUnBiMjVUZEdGeWREc0tJQ0JqYjI1emRDQm9ZWE5PWVhacFoyRjBhVzl1VTNSaGNuUWdQU0IwZVhCbGIyWWdibUYyYVdkaGRHbHZibE4wWVhKMElEMDlQU0FuYm5WdFltVnlKenNLSUNBdkx5QnBaaUJ1WVhacFoyRjBhVzl1VTNSaGNuUWdhWE51SjNRZ1lYWmhhV3hoWW14bElITmxkQ0JrWld4MFlTQjBieUIwYUhKbGMyaHZiR1FnYzI4Z2FYUWdhWE51SjNRZ2RYTmxaQW9nSUdOdmJuTjBJRzVoZG1sbllYUnBiMjVUZEdGeWRFUmxiSFJoSUQwZ2FHRnpUbUYyYVdkaGRHbHZibE4wWVhKMElEOGdUV0YwYUM1aFluTW9ibUYyYVdkaGRHbHZibE4wWVhKMElDc2djR1Z5Wm05eWJXRnVZMlZPYjNjZ0xTQmtZWFJsVG05M0tTQTZJSFJvY21WemFHOXNaRHNLSUNCamIyNXpkQ0J1WVhacFoyRjBhVzl1VTNSaGNuUkpjMUpsYkdsaFlteGxJRDBnYm1GMmFXZGhkR2x2YmxOMFlYSjBSR1ZzZEdFZ1BDQjBhSEpsYzJodmJHUTdDZ29nSUdsbUlDaDBhVzFsVDNKcFoybHVTWE5TWld4cFlXSnNaU0I4ZkNCdVlYWnBaMkYwYVc5dVUzUmhjblJKYzFKbGJHbGhZbXhsS1NCN0NpQWdJQ0F2THlCVmMyVWdkR2hsSUcxdmNtVWdjbVZzYVdGaWJHVWdkR2x0WlNCdmNtbG5hVzRLSUNBZ0lHbG1JQ2gwYVcxbFQzSnBaMmx1UkdWc2RHRWdQRDBnYm1GMmFXZGhkR2x2YmxOMFlYSjBSR1ZzZEdFcElIc0tJQ0FnSUNBZ2NtVjBkWEp1SUhCbGNtWnZjbTFoYm1ObExuUnBiV1ZQY21sbmFXNDdDaUFnSUNCOUlHVnNjMlVnZXdvZ0lDQWdJQ0J5WlhSMWNtNGdibUYyYVdkaGRHbHZibE4wWVhKME93b2dJQ0FnZlFvZ0lIMEtJQ0J5WlhSMWNtNGdaR0YwWlU1dmR6c0tmU2tvS1RzS0NpOHFLZ29nS2lCRGNtVmhkR1Z6SUdGdUlHVnVkbVZzYjNCbExnb2dLaUJOWVd0bElITjFjbVVnZEc4Z1lXeDNZWGx6SUdWNGNHeHBZMmwwYkhrZ2NISnZkbWxrWlNCMGFHVWdaMlZ1WlhKcFl5QjBieUIwYUdseklHWjFibU4wYVc5dUNpQXFJSE52SUhSb1lYUWdkR2hsSUdWdWRtVnNiM0JsSUhSNWNHVnpJSEpsYzI5c2RtVWdZMjl5Y21WamRHeDVMZ29nS2k4S1puVnVZM1JwYjI0Z1kzSmxZWFJsUlc1MlpXeHZjR1VvYUdWaFpHVnljeXdnYVhSbGJYTWdQU0JiWFNrZ2V3b2dJSEpsZEhWeWJpQmJhR1ZoWkdWeWN5d2dhWFJsYlhOZElEc0tmUW9LTHlvcUNpQXFJRU52Ym5abGJtbGxibU5sSUdaMWJtTjBhVzl1SUhSdklHeHZiM0FnZEdoeWIzVm5hQ0IwYUdVZ2FYUmxiWE1nWVc1a0lHbDBaVzBnZEhsd1pYTWdiMllnWVc0Z1pXNTJaV3h2Y0dVdUNpQXFJQ2hVYUdseklHWjFibU4wYVc5dUlIZGhjeUJ0YjNOMGJIa2dZM0psWVhSbFpDQmlaV05oZFhObElIZHZjbXRwYm1jZ2QybDBhQ0JsYm5abGJHOXdaU0IwZVhCbGN5QnBjeUJ3WVdsdVpuVnNJR0YwSUhSb1pTQnRiMjFsYm5RcENpQXFDaUFxSUVsbUlIUm9aU0JqWVd4c1ltRmpheUJ5WlhSMWNtNXpJSFJ5ZFdVc0lIUm9aU0J5WlhOMElHOW1JSFJvWlNCcGRHVnRjeUIzYVd4c0lHSmxJSE5yYVhCd1pXUXVDaUFxTHdwbWRXNWpkR2x2YmlCbWIzSkZZV05vUlc1MlpXeHZjR1ZKZEdWdEtBb2dJR1Z1ZG1Wc2IzQmxMQW9nSUdOaGJHeGlZV05yTEFvcElIc0tJQ0JqYjI1emRDQmxiblpsYkc5d1pVbDBaVzF6SUQwZ1pXNTJaV3h2Y0dWYk1WMDdDZ29nSUdadmNpQW9ZMjl1YzNRZ1pXNTJaV3h2Y0dWSmRHVnRJRzltSUdWdWRtVnNiM0JsU1hSbGJYTXBJSHNLSUNBZ0lHTnZibk4wSUdWdWRtVnNiM0JsU1hSbGJWUjVjR1VnUFNCbGJuWmxiRzl3WlVsMFpXMWJNRjB1ZEhsd1pUc0tJQ0FnSUdOdmJuTjBJSEpsYzNWc2RDQTlJR05oYkd4aVlXTnJLR1Z1ZG1Wc2IzQmxTWFJsYlN3Z1pXNTJaV3h2Y0dWSmRHVnRWSGx3WlNrN0Nnb2dJQ0FnYVdZZ0tISmxjM1ZzZENrZ2V3b2dJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUc0tJQ0FnSUgwS0lDQjlDZ29nSUhKbGRIVnliaUJtWVd4elpUc0tmUW9LTHlvcUNpQXFJRVZ1WTI5a1pTQmhJSE4wY21sdVp5QjBieUJWVkVZNExnb2dLaThLWm5WdVkzUnBiMjRnWlc1amIyUmxWVlJHT0NocGJuQjFkQ3dnZEdWNGRFVnVZMjlrWlhJcElIc0tJQ0JqYjI1emRDQjFkR1k0SUQwZ2RHVjRkRVZ1WTI5a1pYSWdmSHdnYm1WM0lGUmxlSFJGYm1OdlpHVnlLQ2s3Q2lBZ2NtVjBkWEp1SUhWMFpqZ3VaVzVqYjJSbEtHbHVjSFYwS1RzS2ZRb0tMeW9xQ2lBcUlGTmxjbWxoYkdsNlpYTWdZVzRnWlc1MlpXeHZjR1V1Q2lBcUx3cG1kVzVqZEdsdmJpQnpaWEpwWVd4cGVtVkZiblpsYkc5d1pTaGxiblpsYkc5d1pTd2dkR1Y0ZEVWdVkyOWtaWElwSUhzS0lDQmpiMjV6ZENCYlpXNTJTR1ZoWkdWeWN5d2dhWFJsYlhOZElEMGdaVzUyWld4dmNHVTdDZ29nSUM4dklFbHVhWFJwWVd4c2VTQjNaU0JqYjI1emRISjFZM1FnYjNWeUlHVnVkbVZzYjNCbElHRnpJR0VnYzNSeWFXNW5JR0Z1WkNCdmJteDVJR052Ym5abGNuUWdkRzhnWW1sdVlYSjVJR05vZFc1cmN5QnBaaUIzWlNCbGJtTnZkVzUwWlhJZ1ltbHVZWEo1SUdSaGRHRUtJQ0JzWlhRZ2NHRnlkSE1nUFNCS1UwOU9Mbk4wY21sdVoybG1lU2hsYm5aSVpXRmtaWEp6S1RzS0NpQWdablZ1WTNScGIyNGdZWEJ3Wlc1a0tHNWxlSFFwSUhzS0lDQWdJR2xtSUNoMGVYQmxiMllnY0dGeWRITWdQVDA5SUNkemRISnBibWNuS1NCN0NpQWdJQ0FnSUhCaGNuUnpJRDBnZEhsd1pXOW1JRzVsZUhRZ1BUMDlJQ2R6ZEhKcGJtY25JRDhnY0dGeWRITWdLeUJ1WlhoMElEb2dXMlZ1WTI5a1pWVlVSamdvY0dGeWRITXNJSFJsZUhSRmJtTnZaR1Z5S1N3Z2JtVjRkRjA3Q2lBZ0lDQjlJR1ZzYzJVZ2V3b2dJQ0FnSUNCd1lYSjBjeTV3ZFhOb0tIUjVjR1Z2WmlCdVpYaDBJRDA5UFNBbmMzUnlhVzVuSnlBL0lHVnVZMjlrWlZWVVJqZ29ibVY0ZEN3Z2RHVjRkRVZ1WTI5a1pYSXBJRG9nYm1WNGRDazdDaUFnSUNCOUNpQWdmUW9LSUNCbWIzSWdLR052Ym5OMElHbDBaVzBnYjJZZ2FYUmxiWE1wSUhzS0lDQWdJR052Ym5OMElGdHBkR1Z0U0dWaFpHVnljeXdnY0dGNWJHOWhaRjBnUFNCcGRHVnRPd29LSUNBZ0lHRndjR1Z1WkNoZ1hHNGtlMHBUVDA0dWMzUnlhVzVuYVdaNUtHbDBaVzFJWldGa1pYSnpLWDFjYm1BcE93b0tJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NHRjViRzloWkNBOVBUMGdKM04wY21sdVp5Y2dmSHdnY0dGNWJHOWhaQ0JwYm5OMFlXNWpaVzltSUZWcGJuUTRRWEp5WVhrcElIc0tJQ0FnSUNBZ1lYQndaVzVrS0hCaGVXeHZZV1FwT3dvZ0lDQWdmU0JsYkhObElIc0tJQ0FnSUNBZ2JHVjBJSE4wY21sdVoybG1hV1ZrVUdGNWJHOWhaRHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCemRISnBibWRwWm1sbFpGQmhlV3h2WVdRZ1BTQktVMDlPTG5OMGNtbHVaMmxtZVNod1lYbHNiMkZrS1RzS0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2V3b2dJQ0FnSUNBZ0lDOHZJRWx1SUdOaGMyVXNJR1JsYzNCcGRHVWdZV3hzSUc5MWNpQmxabVp2Y25SeklIUnZJR3RsWlhBZ1lIQmhlV3h2WVdSZ0lHTnBjbU4xYkdGeUxXUmxjR1Z1WkdWdVkza3RabkpsWlN3Z1lFcFRUMDR1YzNSeWFXNXBabmtvS1dBZ2MzUnBiR3dLSUNBZ0lDQWdJQ0F2THlCbVlXbHNjeXdnZDJVZ2RISjVJR0ZuWVdsdUlHRm1kR1Z5SUc1dmNtMWhiR2w2YVc1bklHbDBJR0ZuWVdsdUlIZHBkR2dnYVc1bWFXNXBkR1VnYm05eWJXRnNhWHBoZEdsdmJpQmtaWEIwYUM0Z1ZHaHBjeUJ2WmlCamIzVnljMlVnYUdGeklHRUtJQ0FnSUNBZ0lDQXZMeUJ3WlhKbWIzSnRZVzVqWlNCcGJYQmhZM1FnWW5WMElHbHVJSFJvYVhNZ1kyRnpaU0JoSUhCbGNtWnZjbTFoYm1ObElHaHBkQ0JwY3lCaVpYUjBaWElnZEdoaGJpQjBhSEp2ZDJsdVp5NEtJQ0FnSUNBZ0lDQnpkSEpwYm1kcFptbGxaRkJoZVd4dllXUWdQU0JLVTA5T0xuTjBjbWx1WjJsbWVTaHViM0p0WVd4cGVtVW9jR0Y1Ykc5aFpDa3BPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHRndjR1Z1WkNoemRISnBibWRwWm1sbFpGQmhlV3h2WVdRcE93b2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSFI1Y0dWdlppQndZWEowY3lBOVBUMGdKM04wY21sdVp5Y2dQeUJ3WVhKMGN5QTZJR052Ym1OaGRFSjFabVpsY25Nb2NHRnlkSE1wT3dwOUNncG1kVzVqZEdsdmJpQmpiMjVqWVhSQ2RXWm1aWEp6S0dKMVptWmxjbk1wSUhzS0lDQmpiMjV6ZENCMGIzUmhiRXhsYm1kMGFDQTlJR0oxWm1abGNuTXVjbVZrZFdObEtDaGhZMk1zSUdKMVppa2dQVDRnWVdOaklDc2dZblZtTG14bGJtZDBhQ3dnTUNrN0Nnb2dJR052Ym5OMElHMWxjbWRsWkNBOUlHNWxkeUJWYVc1ME9FRnljbUY1S0hSdmRHRnNUR1Z1WjNSb0tUc0tJQ0JzWlhRZ2IyWm1jMlYwSUQwZ01Ec0tJQ0JtYjNJZ0tHTnZibk4wSUdKMVptWmxjaUJ2WmlCaWRXWm1aWEp6S1NCN0NpQWdJQ0J0WlhKblpXUXVjMlYwS0dKMVptWmxjaXdnYjJabWMyVjBLVHNLSUNBZ0lHOW1abk5sZENBclBTQmlkV1ptWlhJdWJHVnVaM1JvT3dvZ0lIMEtDaUFnY21WMGRYSnVJRzFsY21kbFpEc0tmUW9LWTI5dWMzUWdTVlJGVFY5VVdWQkZYMVJQWDBSQlZFRmZRMEZVUlVkUFVsbGZUVUZRSUQwZ2V3b2dJSE5sYzNOcGIyNDZJQ2R6WlhOemFXOXVKeXdLSUNCelpYTnphVzl1Y3pvZ0ozTmxjM05wYjI0bkxBb2dJR0YwZEdGamFHMWxiblE2SUNkaGRIUmhZMmh0Wlc1MEp5d0tJQ0IwY21GdWMyRmpkR2x2YmpvZ0ozUnlZVzV6WVdOMGFXOXVKeXdLSUNCbGRtVnVkRG9nSjJWeWNtOXlKeXdLSUNCamJHbGxiblJmY21Wd2IzSjBPaUFuYVc1MFpYSnVZV3duTEFvZ0lIVnpaWEpmY21Wd2IzSjBPaUFuWkdWbVlYVnNkQ2NzQ2lBZ2NISnZabWxzWlRvZ0ozQnliMlpwYkdVbkxBb2dJSEpsY0d4aGVWOWxkbVZ1ZERvZ0ozSmxjR3hoZVNjc0NpQWdjbVZ3YkdGNVgzSmxZMjl5WkdsdVp6b2dKM0psY0d4aGVTY3NDaUFnWTJobFkydGZhVzQ2SUNkdGIyNXBkRzl5Snl3S0lDQm1aV1ZrWW1GamF6b2dKMlpsWldSaVlXTnJKeXdLSUNCemNHRnVPaUFuYzNCaGJpY3NDaUFnYzNSaGRITmtPaUFuYldWMGNtbGpYMkoxWTJ0bGRDY3NDbjA3Q2dvdktpb0tJQ29nVFdGd2N5QjBhR1VnZEhsd1pTQnZaaUJoYmlCbGJuWmxiRzl3WlNCcGRHVnRJSFJ2SUdFZ1pHRjBZU0JqWVhSbFoyOXllUzRLSUNvdkNtWjFibU4wYVc5dUlHVnVkbVZzYjNCbFNYUmxiVlI1Y0dWVWIwUmhkR0ZEWVhSbFoyOXllU2gwZVhCbEtTQjdDaUFnY21WMGRYSnVJRWxVUlUxZlZGbFFSVjlVVDE5RVFWUkJYME5CVkVWSFQxSlpYMDFCVUZ0MGVYQmxYVHNLZlFvS0x5b3FJRVY0ZEhKaFkzUnpJSFJvWlNCdGFXNXBiV0ZzSUZORVN5QnBibVp2SUdaeWIyMGdkR2hsSUcxbGRHRmtZWFJoSUc5eUlHRnVJR1YyWlc1MGN5QXFMd3BtZFc1amRHbHZiaUJuWlhSVFpHdE5aWFJoWkdGMFlVWnZja1Z1ZG1Wc2IzQmxTR1ZoWkdWeUtHMWxkR0ZrWVhSaFQzSkZkbVZ1ZENrZ2V3b2dJR2xtSUNnaGJXVjBZV1JoZEdGUGNrVjJaVzUwSUh4OElDRnRaWFJoWkdGMFlVOXlSWFpsYm5RdWMyUnJLU0I3Q2lBZ0lDQnlaWFIxY200N0NpQWdmUW9nSUdOdmJuTjBJSHNnYm1GdFpTd2dkbVZ5YzJsdmJpQjlJRDBnYldWMFlXUmhkR0ZQY2tWMlpXNTBMbk5rYXpzS0lDQnlaWFIxY200Z2V5QnVZVzFsTENCMlpYSnphVzl1SUgwN0NuMEtDaThxS2dvZ0tpQkRjbVZoZEdWeklHVjJaVzUwSUdWdWRtVnNiM0JsSUdobFlXUmxjbk1zSUdKaGMyVmtJRzl1SUdWMlpXNTBMQ0J6WkdzZ2FXNW1ieUJoYm1RZ2RIVnVibVZzQ2lBcUlFNXZkR1U2SUZSb2FYTWdablZ1WTNScGIyNGdkMkZ6SUdWNGRISmhZM1JsWkNCbWNtOXRJSFJvWlNCamIzSmxJSEJoWTJ0aFoyVWdkRzhnYldGclpTQnBkQ0JoZG1GcGJHRmliR1VnYVc0Z1VtVndiR0Y1Q2lBcUx3cG1kVzVqZEdsdmJpQmpjbVZoZEdWRmRtVnVkRVZ1ZG1Wc2IzQmxTR1ZoWkdWeWN5Z0tJQ0JsZG1WdWRDd0tJQ0J6Wkd0SmJtWnZMQW9nSUhSMWJtNWxiQ3dLSUNCa2MyNHNDaWtnZXdvZ0lHTnZibk4wSUdSNWJtRnRhV05UWVcxd2JHbHVaME52Ym5SbGVIUWdQU0JsZG1WdWRDNXpaR3RRY205alpYTnphVzVuVFdWMFlXUmhkR0VnSmlZZ1pYWmxiblF1YzJSclVISnZZMlZ6YzJsdVowMWxkR0ZrWVhSaExtUjVibUZ0YVdOVFlXMXdiR2x1WjBOdmJuUmxlSFE3Q2lBZ2NtVjBkWEp1SUhzS0lDQWdJR1YyWlc1MFgybGtPaUJsZG1WdWRDNWxkbVZ1ZEY5cFpDQXNDaUFnSUNCelpXNTBYMkYwT2lCdVpYY2dSR0YwWlNncExuUnZTVk5QVTNSeWFXNW5LQ2tzQ2lBZ0lDQXVMaTRvYzJSclNXNW1ieUFtSmlCN0lITmthem9nYzJSclNXNW1ieUI5S1N3S0lDQWdJQzR1TGlnaElYUjFibTVsYkNBbUppQmtjMjRnSmlZZ2V5QmtjMjQ2SUdSemJsUnZVM1J5YVc1bktHUnpiaWtnZlNrc0NpQWdJQ0F1TGk0b1pIbHVZVzFwWTFOaGJYQnNhVzVuUTI5dWRHVjRkQ0FtSmlCN0NpQWdJQ0FnSUhSeVlXTmxPaUJrY205d1ZXNWtaV1pwYm1Wa1MyVjVjeWg3SUM0dUxtUjVibUZ0YVdOVFlXMXdiR2x1WjBOdmJuUmxlSFFnZlNrc0NpQWdJQ0I5S1N3S0lDQjlPd3A5Q2dvdkx5QkpiblJsYm5ScGIyNWhiR3g1SUd0bFpYQnBibWNnZEdobElHdGxlU0JpY205aFpDd2dZWE1nZDJVZ1pHOXVKM1FnYTI1dmR5Qm1iM0lnYzNWeVpTQjNhR0YwSUhKaGRHVWdiR2x0YVhRZ2FHVmhaR1Z5Y3lCblpYUWdjbVYwZFhKdVpXUWdabkp2YlNCaVlXTnJaVzVrQ2dwamIyNXpkQ0JFUlVaQlZVeFVYMUpGVkZKWlgwRkdWRVZTSUQwZ05qQWdLaUF4TURBd095QXZMeUEyTUNCelpXTnZibVJ6Q2dvdktpb0tJQ29nUlhoMGNtRmpkSE1nVW1WMGNua3RRV1owWlhJZ2RtRnNkV1VnWm5KdmJTQjBhR1VnY21WeGRXVnpkQ0JvWldGa1pYSWdiM0lnY21WMGRYSnVjeUJrWldaaGRXeDBJSFpoYkhWbENpQXFJRUJ3WVhKaGJTQm9aV0ZrWlhJZ2MzUnlhVzVuSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUNkU1pYUnllUzFCWm5SbGNpY2dhR1ZoWkdWeUNpQXFJRUJ3WVhKaGJTQnViM2NnWTNWeWNtVnVkQ0IxYm1sNElIUnBiV1Z6ZEdGdGNBb2dLZ29nS2k4S1puVnVZM1JwYjI0Z2NHRnljMlZTWlhSeWVVRm1kR1Z5U0dWaFpHVnlLR2hsWVdSbGNpd2dibTkzSUQwZ1JHRjBaUzV1YjNjb0tTa2dld29nSUdOdmJuTjBJR2hsWVdSbGNrUmxiR0Y1SUQwZ2NHRnljMlZKYm5Rb1lDUjdhR1ZoWkdWeWZXQXNJREV3S1RzS0lDQnBaaUFvSVdselRtRk9LR2hsWVdSbGNrUmxiR0Y1S1NrZ2V3b2dJQ0FnY21WMGRYSnVJR2hsWVdSbGNrUmxiR0Y1SUNvZ01UQXdNRHNLSUNCOUNnb2dJR052Ym5OMElHaGxZV1JsY2tSaGRHVWdQU0JFWVhSbExuQmhjbk5sS0dBa2UyaGxZV1JsY24xZ0tUc0tJQ0JwWmlBb0lXbHpUbUZPS0dobFlXUmxja1JoZEdVcEtTQjdDaUFnSUNCeVpYUjFjbTRnYUdWaFpHVnlSR0YwWlNBdElHNXZkenNLSUNCOUNnb2dJSEpsZEhWeWJpQkVSVVpCVlV4VVgxSkZWRkpaWDBGR1ZFVlNPd3A5Q2dvdktpb0tJQ29nUjJWMGN5QjBhR1VnZEdsdFpTQjBhR0YwSUhSb1pTQm5hWFpsYmlCallYUmxaMjl5ZVNCcGN5QmthWE5oWW14bFpDQjFiblJwYkNCbWIzSWdjbUYwWlNCc2FXMXBkR2x1Wnk0S0lDb2dTVzRnWTJGelpTQnVieUJqWVhSbFoyOXllUzF6Y0dWamFXWnBZeUJzYVcxcGRDQnBjeUJ6WlhRZ1luVjBJR0VnWjJWdVpYSmhiQ0J5WVhSbElHeHBiV2wwSUdGamNtOXpjeUJoYkd3Z1kyRjBaV2R2Y21sbGN5QnBjeUJoWTNScGRtVXNDaUFxSUhSb1lYUWdkR2x0WlNCcGN5QnlaWFIxY201bFpDNEtJQ29LSUNvZ1FISmxkSFZ5YmlCMGFHVWdkR2x0WlNCcGJpQnRjeUIwYUdGMElIUm9aU0JqWVhSbFoyOXllU0JwY3lCa2FYTmhZbXhsWkNCMWJuUnBiQ0J2Y2lBd0lHbG1JSFJvWlhKbEozTWdibThnWVdOMGFYWmxJSEpoZEdVZ2JHbHRhWFF1Q2lBcUx3cG1kVzVqZEdsdmJpQmthWE5oWW14bFpGVnVkR2xzS0d4cGJXbDBjeXdnWkdGMFlVTmhkR1ZuYjNKNUtTQjdDaUFnY21WMGRYSnVJR3hwYldsMGMxdGtZWFJoUTJGMFpXZHZjbmxkSUh4OElHeHBiV2wwY3k1aGJHd2dmSHdnTURzS2ZRb0tMeW9xQ2lBcUlFTm9aV05yY3lCcFppQmhJR05oZEdWbmIzSjVJR2x6SUhKaGRHVWdiR2x0YVhSbFpBb2dLaThLWm5WdVkzUnBiMjRnYVhOU1lYUmxUR2x0YVhSbFpDaHNhVzFwZEhNc0lHUmhkR0ZEWVhSbFoyOXllU3dnYm05M0lEMGdSR0YwWlM1dWIzY29LU2tnZXdvZ0lISmxkSFZ5YmlCa2FYTmhZbXhsWkZWdWRHbHNLR3hwYldsMGN5d2daR0YwWVVOaGRHVm5iM0o1S1NBK0lHNXZkenNLZlFvS0x5b3FDaUFxSUZWd1pHRjBaU0J5WVhSbGJHbHRhWFJ6SUdaeWIyMGdhVzVqYjIxcGJtY2dhR1ZoWkdWeWN5NEtJQ29LSUNvZ1FISmxkSFZ5YmlCMGFHVWdkWEJrWVhSbFpDQlNZWFJsVEdsdGFYUnpJRzlpYW1WamRDNEtJQ292Q21aMWJtTjBhVzl1SUhWd1pHRjBaVkpoZEdWTWFXMXBkSE1vQ2lBZ2JHbHRhWFJ6TEFvZ0lIc2djM1JoZEhWelEyOWtaU3dnYUdWaFpHVnljeUI5TEFvZ0lHNXZkeUE5SUVSaGRHVXVibTkzS0Nrc0Npa2dld29nSUdOdmJuTjBJSFZ3WkdGMFpXUlNZWFJsVEdsdGFYUnpJRDBnZXdvZ0lDQWdMaTR1YkdsdGFYUnpMQW9nSUgwN0Nnb2dJQzh2SUNKVWFHVWdibUZ0WlNCcGN5QmpZWE5sTFdsdWMyVnVjMmwwYVhabExpSUtJQ0F2THlCb2RIUndjem92TDJSbGRtVnNiM0JsY2k1dGIzcHBiR3hoTG05eVp5OWxiaTFWVXk5a2IyTnpMMWRsWWk5QlVFa3ZTR1ZoWkdWeWN5OW5aWFFLSUNCamIyNXpkQ0J5WVhSbFRHbHRhWFJJWldGa1pYSWdQU0JvWldGa1pYSnpJQ1ltSUdobFlXUmxjbk5iSjNndGMyVnVkSEo1TFhKaGRHVXRiR2x0YVhSekoxMDdDaUFnWTI5dWMzUWdjbVYwY25sQlpuUmxja2hsWVdSbGNpQTlJR2hsWVdSbGNuTWdKaVlnYUdWaFpHVnljMXNuY21WMGNua3RZV1owWlhJblhUc0tDaUFnYVdZZ0tISmhkR1ZNYVcxcGRFaGxZV1JsY2lrZ2V3b2dJQ0FnTHlvcUNpQWdJQ0FnS2lCeVlYUmxJR3hwYldsMElHaGxZV1JsY25NZ1lYSmxJRzltSUhSb1pTQm1iM0p0Q2lBZ0lDQWdLaUFnSUNBZ1BHaGxZV1JsY2o0c1BHaGxZV1JsY2o0c0xpNEtJQ0FnSUNBcUlIZG9aWEpsSUdWaFkyZ2dQR2hsWVdSbGNqNGdhWE1nYjJZZ2RHaGxJR1p2Y20wS0lDQWdJQ0FxSUNBZ0lDQThjbVYwY25sZllXWjBaWEkrT2lBOFkyRjBaV2R2Y21sbGN6NDZJRHh6WTI5d1pUNDZJRHh5WldGemIyNWZZMjlrWlQ0NklEeHVZVzFsYzNCaFkyVnpQZ29nSUNBZ0lDb2dkMmhsY21VS0lDQWdJQ0FxSUNBZ0lDQThjbVYwY25sZllXWjBaWEkrSUdseklHRWdaR1ZzWVhrZ2FXNGdjMlZqYjI1a2N3b2dJQ0FnSUNvZ0lDQWdJRHhqWVhSbFoyOXlhV1Z6UGlCcGN5QjBhR1VnWlhabGJuUWdkSGx3WlNoektTQW9aWEp5YjNJc0lIUnlZVzV6WVdOMGFXOXVMQ0JsZEdNcElHSmxhVzVuSUhKaGRHVWdiR2x0YVhSbFpDQmhibVFnYVhNZ2IyWWdkR2hsSUdadmNtMEtJQ0FnSUNBcUlDQWdJQ0FnSUNBZ1BHTmhkR1ZuYjNKNVBqczhZMkYwWldkdmNuaytPeTR1TGdvZ0lDQWdJQ29nSUNBZ0lEeHpZMjl3WlQ0Z2FYTWdkMmhoZENkeklHSmxhVzVuSUd4cGJXbDBaV1FnS0c5eVp5d2djSEp2YW1WamRDd2diM0lnYTJWNUtTQXRJR2xuYm05eVpXUWdZbmtnVTBSTENpQWdJQ0FnS2lBZ0lDQWdQSEpsWVhOdmJsOWpiMlJsUGlCcGN5QmhiaUJoY21KcGRISmhjbmtnYzNSeWFXNW5JR3hwYTJVZ0ltOXlaMTl4ZFc5MFlTSWdMU0JwWjI1dmNtVmtJR0o1SUZORVN3b2dJQ0FnSUNvZ0lDQWdJRHh1WVcxbGMzQmhZMlZ6UGlCVFpXMXBZMjlzYjI0dGMyVndZWEpoZEdWa0lHeHBjM1FnYjJZZ2JXVjBjbWxqSUc1aGJXVnpjR0ZqWlNCcFpHVnVkR2xtYVdWeWN5NGdSR1ZtYVc1bGN5QjNhR2xqYUNCdVlXMWxjM0JoWTJVb2N5a2dkMmxzYkNCaVpTQmhabVpsWTNSbFpDNEtJQ0FnSUNBcUlDQWdJQ0FnSUNBZ1QyNXNlU0J3Y21WelpXNTBJR2xtSUhKaGRHVWdiR2x0YVhRZ1lYQndiR2xsY3lCMGJ5QjBhR1VnYldWMGNtbGpYMkoxWTJ0bGRDQmtZWFJoSUdOaGRHVm5iM0o1TGdvZ0lDQWdJQ292Q2lBZ0lDQm1iM0lnS0dOdmJuTjBJR3hwYldsMElHOW1JSEpoZEdWTWFXMXBkRWhsWVdSbGNpNTBjbWx0S0NrdWMzQnNhWFFvSnl3bktTa2dld29nSUNBZ0lDQmpiMjV6ZENCYmNtVjBjbmxCWm5SbGNpd2dZMkYwWldkdmNtbGxjeXdnTENBc0lHNWhiV1Z6Y0dGalpYTmRJRDBnYkdsdGFYUXVjM0JzYVhRb0p6b25MQ0ExS1RzS0lDQWdJQ0FnWTI5dWMzUWdhR1ZoWkdWeVJHVnNZWGtnUFNCd1lYSnpaVWx1ZENoeVpYUnllVUZtZEdWeUxDQXhNQ2s3Q2lBZ0lDQWdJR052Ym5OMElHUmxiR0Y1SUQwZ0tDRnBjMDVoVGlob1pXRmtaWEpFWld4aGVTa2dQeUJvWldGa1pYSkVaV3hoZVNBNklEWXdLU0FxSURFd01EQTdJQzh2SURZd2MyVmpJR1JsWm1GMWJIUUtJQ0FnSUNBZ2FXWWdLQ0ZqWVhSbFoyOXlhV1Z6S1NCN0NpQWdJQ0FnSUNBZ2RYQmtZWFJsWkZKaGRHVk1hVzFwZEhNdVlXeHNJRDBnYm05M0lDc2daR1ZzWVhrN0NpQWdJQ0FnSUgwZ1pXeHpaU0I3Q2lBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCallYUmxaMjl5ZVNCdlppQmpZWFJsWjI5eWFXVnpMbk53YkdsMEtDYzdKeWtwSUhzS0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqWVhSbFoyOXllU0E5UFQwZ0oyMWxkSEpwWTE5aWRXTnJaWFFuS1NCN0NpQWdJQ0FnSUNBZ0lDQWdJQzh2SUc1aGJXVnpjR0ZqWlhNZ2QybHNiQ0JpWlNCd2NtVnpaVzUwSUhkb1pXNGdZMkYwWldkdmNua2dQVDA5SUNkdFpYUnlhV05mWW5WamEyVjBKd29nSUNBZ0lDQWdJQ0FnSUNCcFppQW9JVzVoYldWemNHRmpaWE1nZkh3Z2JtRnRaWE53WVdObGN5NXpjR3hwZENnbk95Y3BMbWx1WTJ4MVpHVnpLQ2RqZFhOMGIyMG5LU2tnZXdvZ0lDQWdJQ0FnSUNBZ0lDQWdJSFZ3WkdGMFpXUlNZWFJsVEdsdGFYUnpXMk5oZEdWbmIzSjVYU0E5SUc1dmR5QXJJR1JsYkdGNU93b2dJQ0FnSUNBZ0lDQWdJQ0I5Q2lBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZXdvZ0lDQWdJQ0FnSUNBZ0lDQjFjR1JoZEdWa1VtRjBaVXhwYldsMGMxdGpZWFJsWjI5eWVWMGdQU0J1YjNjZ0t5QmtaV3hoZVRzS0lDQWdJQ0FnSUNBZ0lIMEtJQ0FnSUNBZ0lDQjlDaUFnSUNBZ0lIMEtJQ0FnSUgwS0lDQjlJR1ZzYzJVZ2FXWWdLSEpsZEhKNVFXWjBaWEpJWldGa1pYSXBJSHNLSUNBZ0lIVndaR0YwWldSU1lYUmxUR2x0YVhSekxtRnNiQ0E5SUc1dmR5QXJJSEJoY25ObFVtVjBjbmxCWm5SbGNraGxZV1JsY2loeVpYUnllVUZtZEdWeVNHVmhaR1Z5TENCdWIzY3BPd29nSUgwZ1pXeHpaU0JwWmlBb2MzUmhkSFZ6UTI5a1pTQTlQVDBnTkRJNUtTQjdDaUFnSUNCMWNHUmhkR1ZrVW1GMFpVeHBiV2wwY3k1aGJHd2dQU0J1YjNjZ0t5QTJNQ0FxSURFd01EQTdDaUFnZlFvS0lDQnlaWFIxY200Z2RYQmtZWFJsWkZKaGRHVk1hVzFwZEhNN0NuMEtDaThxS2dvZ0tpQkJJRzV2WkdVdWFuTWdkMkYwWTJoa2IyY2dkR2x0WlhJS0lDb2dRSEJoY21GdElIQnZiR3hKYm5SbGNuWmhiQ0JVYUdVZ2FXNTBaWEoyWVd3Z2RHaGhkQ0IzWlNCbGVIQmxZM1FnZEc4Z1oyVjBJSEJ2Ykd4bFpDQmhkQW9nS2lCQWNHRnlZVzBnWVc1eVZHaHlaWE5vYjJ4a0lGUm9aU0IwYUhKbGMyaHZiR1FnWm05eUlIZG9aVzRnZDJVZ1kyOXVjMmxrWlhJZ1FVNVNDaUFxSUVCd1lYSmhiU0JqWVd4c1ltRmpheUJVYUdVZ1kyRnNiR0poWTJzZ2RHOGdZMkZzYkNCbWIzSWdRVTVTQ2lBcUlFQnlaWFIxY201eklFRnVJRzlpYW1WamRDQjNhWFJvSUdCd2IyeHNZQ0JoYm1RZ1lHVnVZV0pzWldSZ0lHWjFibU4wYVc5dWN5QjdRR3hwYm1zZ1YyRjBZMmhrYjJkU1pYUjFjbTU5Q2lBcUx3cG1kVzVqZEdsdmJpQjNZWFJqYUdSdloxUnBiV1Z5S0FvZ0lHTnlaV0YwWlZScGJXVnlMQW9nSUhCdmJHeEpiblJsY25aaGJDd0tJQ0JoYm5KVWFISmxjMmh2YkdRc0NpQWdZMkZzYkdKaFkyc3NDaWtnZXdvZ0lHTnZibk4wSUhScGJXVnlJRDBnWTNKbFlYUmxWR2x0WlhJb0tUc0tJQ0JzWlhRZ2RISnBaMmRsY21Wa0lEMGdabUZzYzJVN0NpQWdiR1YwSUdWdVlXSnNaV1FnUFNCMGNuVmxPd29LSUNCelpYUkpiblJsY25aaGJDZ29LU0E5UGlCN0NpQWdJQ0JqYjI1emRDQmthV1ptVFhNZ1BTQjBhVzFsY2k1blpYUlVhVzFsVFhNb0tUc0tDaUFnSUNCcFppQW9kSEpwWjJkbGNtVmtJRDA5UFNCbVlXeHpaU0FtSmlCa2FXWm1UWE1nUGlCd2IyeHNTVzUwWlhKMllXd2dLeUJoYm5KVWFISmxjMmh2YkdRcElIc0tJQ0FnSUNBZ2RISnBaMmRsY21Wa0lEMGdkSEoxWlRzS0lDQWdJQ0FnYVdZZ0tHVnVZV0pzWldRcElIc0tJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5Z3BPd29nSUNBZ0lDQjlDaUFnSUNCOUNnb2dJQ0FnYVdZZ0tHUnBabVpOY3lBOElIQnZiR3hKYm5SbGNuWmhiQ0FySUdGdWNsUm9jbVZ6YUc5c1pDa2dld29nSUNBZ0lDQjBjbWxuWjJWeVpXUWdQU0JtWVd4elpUc0tJQ0FnSUgwS0lDQjlMQ0F5TUNrN0Nnb2dJSEpsZEhWeWJpQjdDaUFnSUNCd2IyeHNPaUFvS1NBOVBpQjdDaUFnSUNBZ0lIUnBiV1Z5TG5KbGMyVjBLQ2s3Q2lBZ0lDQjlMQW9nSUNBZ1pXNWhZbXhsWkRvZ0tITjBZWFJsS1NBOVBpQjdDaUFnSUNBZ0lHVnVZV0pzWldRZ1BTQnpkR0YwWlRzS0lDQWdJSDBzQ2lBZ2ZUc0tmUW9LTHk4Z2RIbHdaWE1nWTI5d2FXVmtJR1p5YjIwZ2FXNXpjR1ZqZEc5eUxtUXVkSE1LQ2k4cUtnb2dLaUJEYjI1MlpYSjBjeUJFWldKMVoyZGxjaTVEWVd4c1JuSmhiV1VnZEc4Z1UyVnVkSEo1SUZOMFlXTnJSbkpoYldVS0lDb3ZDbVoxYm1OMGFXOXVJR05oYkd4R2NtRnRaVlJ2VTNSaFkydEdjbUZ0WlNnS0lDQm1jbUZ0WlN3S0lDQjFjbXdzQ2lBZ1oyVjBUVzlrZFd4bFJuSnZiVVpwYkdWdVlXMWxMQW9wSUhzS0lDQmpiMjV6ZENCbWFXeGxibUZ0WlNBOUlIVnliQ0EvSUhWeWJDNXlaWEJzWVdObEtDOWVabWxzWlRwY0wxd3ZMeXdnSnljcElEb2dkVzVrWldacGJtVmtPd29LSUNBdkx5QkRZV3hzUm5KaGJXVWdjbTkzTDJOdmJDQmhjbVVnTUNCaVlYTmxaQ3dnZDJobGNtVmhjeUJUZEdGamEwWnlZVzFsSUdGeVpTQXhJR0poYzJWa0NpQWdZMjl1YzNRZ1kyOXNibThnUFNCbWNtRnRaUzVzYjJOaGRHbHZiaTVqYjJ4MWJXNU9kVzFpWlhJZ1B5Qm1jbUZ0WlM1c2IyTmhkR2x2Ymk1amIyeDFiVzVPZFcxaVpYSWdLeUF4SURvZ2RXNWtaV1pwYm1Wa093b2dJR052Ym5OMElHeHBibVZ1YnlBOUlHWnlZVzFsTG14dlkyRjBhVzl1TG14cGJtVk9kVzFpWlhJZ1B5Qm1jbUZ0WlM1c2IyTmhkR2x2Ymk1c2FXNWxUblZ0WW1WeUlDc2dNU0E2SUhWdVpHVm1hVzVsWkRzS0NpQWdjbVYwZFhKdUlHUnliM0JWYm1SbFptbHVaV1JMWlhsektIc0tJQ0FnSUdacGJHVnVZVzFsTEFvZ0lDQWdiVzlrZFd4bE9pQm5aWFJOYjJSMWJHVkdjbTl0Um1sc1pXNWhiV1VvWm1sc1pXNWhiV1VwTEFvZ0lDQWdablZ1WTNScGIyNDZJR1p5WVcxbExtWjFibU4wYVc5dVRtRnRaU0I4ZkNBblB5Y3NDaUFnSUNCamIyeHVieXdLSUNBZ0lHeHBibVZ1Ynl3S0lDQWdJR2x1WDJGd2NEb2dabWxzWlc1aGJXVWdQeUJtYVd4bGJtRnRaVWx6U1c1QmNIQW9abWxzWlc1aGJXVXBJRG9nZFc1a1pXWnBibVZrTEFvZ0lIMHBPd3A5Q2dvdktpb0tJQ29nVkdocGN5QnpaWEoyWlhNZ1lYTWdZU0JpZFdsc1pDQjBhVzFsSUdac1lXY2dkR2hoZENCM2FXeHNJR0psSUhSeWRXVWdZbmtnWkdWbVlYVnNkQ3dnWW5WMElHWmhiSE5sSUdsdUlHNXZiaTFrWldKMVp5QmlkV2xzWkhNZ2IzSWdhV1lnZFhObGNuTWdjbVZ3YkdGalpTQmdYMTlUUlU1VVVsbGZSRVZDVlVkZlgyQWdhVzRnZEdobGFYSWdaMlZ1WlhKaGRHVmtJR052WkdVdUNpQXFDaUFxSUVGVVZFVk9WRWxQVGpvZ1ZHaHBjeUJqYjI1emRHRnVkQ0J0ZFhOMElHNWxkbVZ5SUdOeWIzTnpJSEJoWTJ0aFoyVWdZbTkxYm1SaGNtbGxjeUFvYVM1bExpQmlaU0JsZUhCdmNuUmxaQ2tnZEc4Z1ozVmhjbUZ1ZEdWbElIUm9ZWFFnYVhRZ1kyRnVJR0psSUhWelpXUWdabTl5SUhSeVpXVWdjMmhoYTJsdVp5NEtJQ292Q21OdmJuTjBJRVJGUWxWSFgwSlZTVXhFSUQwZ0tIUjVjR1Z2WmlCZlgxTkZUbFJTV1Y5RVJVSlZSMTlmSUQwOVBTQW5kVzVrWldacGJtVmtKeUI4ZkNCZlgxTkZUbFJTV1Y5RVJVSlZSMTlmS1RzS0NtTnZibk4wSUVSRlJrRlZURlJmUlU1V1NWSlBUazFGVGxRZ1BTQW5jSEp2WkhWamRHbHZiaWM3Q2dvdktpb0tJQ29nVW1WMGRYSnVjeUIwYUdVZ1oyeHZZbUZzSUdWMlpXNTBJSEJ5YjJObGMzTnZjbk11Q2lBcUlFQmtaWEJ5WldOaGRHVmtJRWRzYjJKaGJDQmxkbVZ1ZENCd2NtOWpaWE56YjNKeklIZHBiR3dnWW1VZ2NtVnRiM1psWkNCcGJpQjJPQzRLSUNvdkNtWjFibU4wYVc5dUlHZGxkRWRzYjJKaGJFVjJaVzUwVUhKdlkyVnpjMjl5Y3lncElIc0tJQ0J5WlhSMWNtNGdaMlYwUjJ4dlltRnNVMmx1WjJ4bGRHOXVLQ2RuYkc5aVlXeEZkbVZ1ZEZCeWIyTmxjM052Y25NbkxDQW9LU0E5UGlCYlhTazdDbjBLQ2k4cUtnb2dLaUJRY205alpYTnpJR0Z1SUdGeWNtRjVJRzltSUdWMlpXNTBJSEJ5YjJObGMzTnZjbk1zSUhKbGRIVnlibWx1WnlCMGFHVWdjSEp2WTJWemMyVmtJR1YyWlc1MElDaHZjaUJnYm5Wc2JHQWdhV1lnZEdobElHVjJaVzUwSUhkaGN5QmtjbTl3Y0dWa0tTNEtJQ292Q21aMWJtTjBhVzl1SUc1dmRHbG1lVVYyWlc1MFVISnZZMlZ6YzI5eWN5Z0tJQ0J3Y205alpYTnpiM0p6TEFvZ0lHVjJaVzUwTEFvZ0lHaHBiblFzQ2lBZ2FXNWtaWGdnUFNBd0xBb3BJSHNLSUNCeVpYUjFjbTRnYm1WM0lGTjVibU5RY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUhzS0lDQWdJR052Ym5OMElIQnliMk5sYzNOdmNpQTlJSEJ5YjJObGMzTnZjbk5iYVc1a1pYaGRPd29nSUNBZ2FXWWdLR1YyWlc1MElEMDlQU0J1ZFd4c0lIeDhJSFI1Y0dWdlppQndjbTlqWlhOemIzSWdJVDA5SUNkbWRXNWpkR2x2YmljcElIc0tJQ0FnSUNBZ2NtVnpiMngyWlNobGRtVnVkQ2s3Q2lBZ0lDQjlJR1ZzYzJVZ2V3b2dJQ0FnSUNCamIyNXpkQ0J5WlhOMWJIUWdQU0J3Y205alpYTnpiM0lvZXlBdUxpNWxkbVZ1ZENCOUxDQm9hVzUwS1NBN0Nnb2dJQ0FnSUNCRVJVSlZSMTlDVlVsTVJDQW1KaUJ3Y205alpYTnpiM0l1YVdRZ0ppWWdjbVZ6ZFd4MElEMDlQU0J1ZFd4c0lDWW1JR3h2WjJkbGNpNXNiMmNvWUVWMlpXNTBJSEJ5YjJObGMzTnZjaUFpSkh0d2NtOWpaWE56YjNJdWFXUjlJaUJrY205d2NHVmtJR1YyWlc1MFlDazdDZ29nSUNBZ0lDQnBaaUFvYVhOVWFHVnVZV0pzWlNoeVpYTjFiSFFwS1NCN0NpQWdJQ0FnSUNBZ2RtOXBaQ0J5WlhOMWJIUUtJQ0FnSUNBZ0lDQWdJQzUwYUdWdUtHWnBibUZzSUQwK0lHNXZkR2xtZVVWMlpXNTBVSEp2WTJWemMyOXljeWh3Y205alpYTnpiM0p6TENCbWFXNWhiQ3dnYUdsdWRDd2dhVzVrWlhnZ0t5QXhLUzUwYUdWdUtISmxjMjlzZG1VcEtRb2dJQ0FnSUNBZ0lDQWdMblJvWlc0b2JuVnNiQ3dnY21WcVpXTjBLVHNLSUNBZ0lDQWdmU0JsYkhObElIc0tJQ0FnSUNBZ0lDQjJiMmxrSUc1dmRHbG1lVVYyWlc1MFVISnZZMlZ6YzI5eWN5aHdjbTlqWlhOemIzSnpMQ0J5WlhOMWJIUXNJR2hwYm5Rc0lHbHVaR1Y0SUNzZ01Ta0tJQ0FnSUNBZ0lDQWdJQzUwYUdWdUtISmxjMjlzZG1VcENpQWdJQ0FnSUNBZ0lDQXVkR2hsYmlodWRXeHNMQ0J5WldwbFkzUXBPd29nSUNBZ0lDQjlDaUFnSUNCOUNpQWdmU2s3Q24wS0NpOHFLZ29nS2lCRGNtVmhkR1Z6SUdFZ2JtVjNJR0JUWlhOemFXOXVZQ0J2WW1wbFkzUWdZbmtnYzJWMGRHbHVaeUJqWlhKMFlXbHVJR1JsWm1GMWJIUWdjR0Z5WVcxbGRHVnljeTRnU1dZZ2IzQjBhVzl1WVd3Z1FIQmhjbUZ0SUdOdmJuUmxlSFFLSUNvZ2FYTWdjR0Z6YzJWa0xDQjBhR1VnY0dGemMyVmtJSEJ5YjNCbGNuUnBaWE1nWVhKbElHRndjR3hwWldRZ2RHOGdkR2hsSUhObGMzTnBiMjRnYjJKcVpXTjBMZ29nS2dvZ0tpQkFjR0Z5WVcwZ1kyOXVkR1Y0ZENBb2IzQjBhVzl1WVd3cElHRmtaR2wwYVc5dVlXd2djSEp2Y0dWeWRHbGxjeUIwYnlCaVpTQmhjSEJzYVdWa0lIUnZJSFJvWlNCeVpYUjFjbTVsWkNCelpYTnphVzl1SUc5aWFtVmpkQW9nS2dvZ0tpQkFjbVYwZFhKdWN5QmhJRzVsZHlCZ1UyVnpjMmx2Ym1BZ2IySnFaV04wQ2lBcUx3cG1kVzVqZEdsdmJpQnRZV3RsVTJWemMybHZiaWhqYjI1MFpYaDBLU0I3Q2lBZ0x5OGdRbTkwYUNCMGFXMWxjM1JoYlhBZ1lXNWtJSE4wWVhKMFpXUWdZWEpsSUdsdUlITmxZMjl1WkhNZ2MybHVZMlVnZEdobElGVk9TVmdnWlhCdlkyZ3VDaUFnWTI5dWMzUWdjM1JoY25ScGJtZFVhVzFsSUQwZ2RHbHRaWE4wWVcxd1NXNVRaV052Ym1SektDazdDZ29nSUdOdmJuTjBJSE5sYzNOcGIyNGdQU0I3Q2lBZ0lDQnphV1E2SUhWMWFXUTBLQ2tzQ2lBZ0lDQnBibWwwT2lCMGNuVmxMQW9nSUNBZ2RHbHRaWE4wWVcxd09pQnpkR0Z5ZEdsdVoxUnBiV1VzQ2lBZ0lDQnpkR0Z5ZEdWa09pQnpkR0Z5ZEdsdVoxUnBiV1VzQ2lBZ0lDQmtkWEpoZEdsdmJqb2dNQ3dLSUNBZ0lITjBZWFIxY3pvZ0oyOXJKeXdLSUNBZ0lHVnljbTl5Y3pvZ01Dd0tJQ0FnSUdsbmJtOXlaVVIxY21GMGFXOXVPaUJtWVd4elpTd0tJQ0FnSUhSdlNsTlBUam9nS0NrZ1BUNGdjMlZ6YzJsdmJsUnZTbE5QVGloelpYTnphVzl1S1N3S0lDQjlPd29LSUNCcFppQW9ZMjl1ZEdWNGRDa2dld29nSUNBZ2RYQmtZWFJsVTJWemMybHZiaWh6WlhOemFXOXVMQ0JqYjI1MFpYaDBLVHNLSUNCOUNnb2dJSEpsZEhWeWJpQnpaWE56YVc5dU93cDlDZ292S2lvS0lDb2dWWEJrWVhSbGN5QmhJSE5sYzNOcGIyNGdiMkpxWldOMElIZHBkR2dnZEdobElIQnliM0JsY25ScFpYTWdjR0Z6YzJWa0lHbHVJSFJvWlNCamIyNTBaWGgwTGdvZ0tnb2dLaUJPYjNSbElIUm9ZWFFnZEdocGN5Qm1kVzVqZEdsdmJpQnRkWFJoZEdWeklIUm9aU0J3WVhOelpXUWdiMkpxWldOMElHRnVaQ0J5WlhSMWNtNXpJSFp2YVdRdUNpQXFJQ2hJWVdRZ2RHOGdaRzhnZEdocGN5QnBibk4wWldGa0lHOW1JSEpsZEhWeWJtbHVaeUJoSUc1bGR5QmhibVFnZFhCa1lYUmxaQ0J6WlhOemFXOXVJR0psWTJGMWMyVWdZMnh2YzJsdVp5QmhibVFnYzJWdVpHbHVaeUJoSUhObGMzTnBiMjRLSUNvZ2JXRnJaWE1nWVc0Z2RYQmtZWFJsSUhSdklIUm9aU0J6WlhOemFXOXVJR0ZtZEdWeUlHbDBJSGRoY3lCd1lYTnpaV1FnZEc4Z2RHaGxJSE5sYm1ScGJtY2diRzluYVdNdUNpQXFJRUJ6WldVZ1FtRnpaVU5zYVdWdWRDNWpZWEIwZFhKbFUyVnpjMmx2YmlBcENpQXFDaUFxSUVCd1lYSmhiU0J6WlhOemFXOXVJSFJvWlNCZ1UyVnpjMmx2Ym1BZ2RHOGdkWEJrWVhSbENpQXFJRUJ3WVhKaGJTQmpiMjUwWlhoMElIUm9aU0JnVTJWemMybHZia052Ym5SbGVIUmdJR2h2YkdScGJtY2dkR2hsSUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0J6YUc5MWJHUWdZbVVnZFhCa1lYUmxaQ0JwYmlCQWNHRnlZVzBnYzJWemMybHZiZ29nS2k4S0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHTnZiWEJzWlhocGRIa0tablZ1WTNScGIyNGdkWEJrWVhSbFUyVnpjMmx2YmloelpYTnphVzl1TENCamIyNTBaWGgwSUQwZ2UzMHBJSHNLSUNCcFppQW9ZMjl1ZEdWNGRDNTFjMlZ5S1NCN0NpQWdJQ0JwWmlBb0lYTmxjM05wYjI0dWFYQkJaR1J5WlhOeklDWW1JR052Ym5SbGVIUXVkWE5sY2k1cGNGOWhaR1J5WlhOektTQjdDaUFnSUNBZ0lITmxjM05wYjI0dWFYQkJaR1J5WlhOeklEMGdZMjl1ZEdWNGRDNTFjMlZ5TG1sd1gyRmtaSEpsYzNNN0NpQWdJQ0I5Q2dvZ0lDQWdhV1lnS0NGelpYTnphVzl1TG1ScFpDQW1KaUFoWTI5dWRHVjRkQzVrYVdRcElIc0tJQ0FnSUNBZ2MyVnpjMmx2Ymk1a2FXUWdQU0JqYjI1MFpYaDBMblZ6WlhJdWFXUWdmSHdnWTI5dWRHVjRkQzUxYzJWeUxtVnRZV2xzSUh4OElHTnZiblJsZUhRdWRYTmxjaTUxYzJWeWJtRnRaVHNLSUNBZ0lIMEtJQ0I5Q2dvZ0lITmxjM05wYjI0dWRHbHRaWE4wWVcxd0lEMGdZMjl1ZEdWNGRDNTBhVzFsYzNSaGJYQWdmSHdnZEdsdFpYTjBZVzF3U1c1VFpXTnZibVJ6S0NrN0Nnb2dJR2xtSUNoamIyNTBaWGgwTG1GaWJtOXliV0ZzWDIxbFkyaGhibWx6YlNrZ2V3b2dJQ0FnYzJWemMybHZiaTVoWW01dmNtMWhiRjl0WldOb1lXNXBjMjBnUFNCamIyNTBaWGgwTG1GaWJtOXliV0ZzWDIxbFkyaGhibWx6YlRzS0lDQjlDZ29nSUdsbUlDaGpiMjUwWlhoMExtbG5ibTl5WlVSMWNtRjBhVzl1S1NCN0NpQWdJQ0J6WlhOemFXOXVMbWxuYm05eVpVUjFjbUYwYVc5dUlEMGdZMjl1ZEdWNGRDNXBaMjV2Y21WRWRYSmhkR2x2YmpzS0lDQjlDaUFnYVdZZ0tHTnZiblJsZUhRdWMybGtLU0I3Q2lBZ0lDQXZMeUJIYjI5a0lHVnViM1ZuYUNCMWRXbGtJSFpoYkdsa1lYUnBiMjR1SU9LQWxDQkxZVzFwYkFvZ0lDQWdjMlZ6YzJsdmJpNXphV1FnUFNCamIyNTBaWGgwTG5OcFpDNXNaVzVuZEdnZ1BUMDlJRE15SUQ4Z1kyOXVkR1Y0ZEM1emFXUWdPaUIxZFdsa05DZ3BPd29nSUgwS0lDQnBaaUFvWTI5dWRHVjRkQzVwYm1sMElDRTlQU0IxYm1SbFptbHVaV1FwSUhzS0lDQWdJSE5sYzNOcGIyNHVhVzVwZENBOUlHTnZiblJsZUhRdWFXNXBkRHNLSUNCOUNpQWdhV1lnS0NGelpYTnphVzl1TG1ScFpDQW1KaUJqYjI1MFpYaDBMbVJwWkNrZ2V3b2dJQ0FnYzJWemMybHZiaTVrYVdRZ1BTQmdKSHRqYjI1MFpYaDBMbVJwWkgxZ093b2dJSDBLSUNCcFppQW9kSGx3Wlc5bUlHTnZiblJsZUhRdWMzUmhjblJsWkNBOVBUMGdKMjUxYldKbGNpY3BJSHNLSUNBZ0lITmxjM05wYjI0dWMzUmhjblJsWkNBOUlHTnZiblJsZUhRdWMzUmhjblJsWkRzS0lDQjlDaUFnYVdZZ0tITmxjM05wYjI0dWFXZHViM0psUkhWeVlYUnBiMjRwSUhzS0lDQWdJSE5sYzNOcGIyNHVaSFZ5WVhScGIyNGdQU0IxYm1SbFptbHVaV1E3Q2lBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVkR1Y0ZEM1a2RYSmhkR2x2YmlBOVBUMGdKMjUxYldKbGNpY3BJSHNLSUNBZ0lITmxjM05wYjI0dVpIVnlZWFJwYjI0Z1BTQmpiMjUwWlhoMExtUjFjbUYwYVc5dU93b2dJSDBnWld4elpTQjdDaUFnSUNCamIyNXpkQ0JrZFhKaGRHbHZiaUE5SUhObGMzTnBiMjR1ZEdsdFpYTjBZVzF3SUMwZ2MyVnpjMmx2Ymk1emRHRnlkR1ZrT3dvZ0lDQWdjMlZ6YzJsdmJpNWtkWEpoZEdsdmJpQTlJR1IxY21GMGFXOXVJRDQ5SURBZ1B5QmtkWEpoZEdsdmJpQTZJREE3Q2lBZ2ZRb2dJR2xtSUNoamIyNTBaWGgwTG5KbGJHVmhjMlVwSUhzS0lDQWdJSE5sYzNOcGIyNHVjbVZzWldGelpTQTlJR052Ym5SbGVIUXVjbVZzWldGelpUc0tJQ0I5Q2lBZ2FXWWdLR052Ym5SbGVIUXVaVzUyYVhKdmJtMWxiblFwSUhzS0lDQWdJSE5sYzNOcGIyNHVaVzUyYVhKdmJtMWxiblFnUFNCamIyNTBaWGgwTG1WdWRtbHliMjV0Wlc1ME93b2dJSDBLSUNCcFppQW9JWE5sYzNOcGIyNHVhWEJCWkdSeVpYTnpJQ1ltSUdOdmJuUmxlSFF1YVhCQlpHUnlaWE56S1NCN0NpQWdJQ0J6WlhOemFXOXVMbWx3UVdSa2NtVnpjeUE5SUdOdmJuUmxlSFF1YVhCQlpHUnlaWE56T3dvZ0lIMEtJQ0JwWmlBb0lYTmxjM05wYjI0dWRYTmxja0ZuWlc1MElDWW1JR052Ym5SbGVIUXVkWE5sY2tGblpXNTBLU0I3Q2lBZ0lDQnpaWE56YVc5dUxuVnpaWEpCWjJWdWRDQTlJR052Ym5SbGVIUXVkWE5sY2tGblpXNTBPd29nSUgwS0lDQnBaaUFvZEhsd1pXOW1JR052Ym5SbGVIUXVaWEp5YjNKeklEMDlQU0FuYm5WdFltVnlKeWtnZXdvZ0lDQWdjMlZ6YzJsdmJpNWxjbkp2Y25NZ1BTQmpiMjUwWlhoMExtVnljbTl5Y3pzS0lDQjlDaUFnYVdZZ0tHTnZiblJsZUhRdWMzUmhkSFZ6S1NCN0NpQWdJQ0J6WlhOemFXOXVMbk4wWVhSMWN5QTlJR052Ym5SbGVIUXVjM1JoZEhWek93b2dJSDBLZlFvS0x5b3FDaUFxSUVOc2IzTmxjeUJoSUhObGMzTnBiMjRnWW5rZ2MyVjBkR2x1WnlCcGRITWdjM1JoZEhWeklHRnVaQ0IxY0dSaGRHbHVaeUIwYUdVZ2MyVnpjMmx2YmlCdlltcGxZM1FnZDJsMGFDQnBkQzRLSUNvZ1NXNTBaWEp1WVd4c2VTQmpZV3hzY3lCZ2RYQmtZWFJsVTJWemMybHZibUFnZEc4Z2RYQmtZWFJsSUhSb1pTQndZWE56WldRZ2MyVnpjMmx2YmlCdlltcGxZM1F1Q2lBcUNpQXFJRTV2ZEdVZ2RHaGhkQ0IwYUdseklHWjFibU4wYVc5dUlHMTFkR0YwWlhNZ2RHaGxJSEJoYzNObFpDQnpaWE56YVc5dUlDaEFjMlZsSUhWd1pHRjBaVk5sYzNOcGIyNGdabTl5SUdWNGNHeGhibUYwYVc5dUtTNEtJQ29LSUNvZ1FIQmhjbUZ0SUhObGMzTnBiMjRnZEdobElHQlRaWE56YVc5dVlDQnZZbXBsWTNRZ2RHOGdZbVVnWTJ4dmMyVmtDaUFxSUVCd1lYSmhiU0J6ZEdGMGRYTWdkR2hsSUdCVFpYTnphVzl1VTNSaGRIVnpZQ0IzYVhSb0lIZG9hV05vSUhSb1pTQnpaWE56YVc5dUlIZGhjeUJqYkc5elpXUXVJRWxtSUhsdmRTQmtiMjRuZENCd1lYTnpJR0VnYzNSaGRIVnpMQW9nS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNZ1puVnVZM1JwYjI0Z2QybHNiQ0JyWldWd0lIUm9aU0J3Y21WMmFXOTFjMng1SUhObGRDQnpkR0YwZFhNc0lIVnViR1Z6Y3lCcGRDQjNZWE1nWUNkdmF5ZGdJR2x1SUhkb2FXTm9JR05oYzJVS0lDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGRDQnBjeUJqYUdGdVoyVmtJSFJ2SUdBblpYaHBkR1ZrSjJBdUNpQXFMd3BtZFc1amRHbHZiaUJqYkc5elpWTmxjM05wYjI0b2MyVnpjMmx2Yml3Z2MzUmhkSFZ6S1NCN0NpQWdiR1YwSUdOdmJuUmxlSFFnUFNCN2ZUc0tJQ0JwWmlBb2MzUmhkSFZ6S1NCN0NpQWdJQ0JqYjI1MFpYaDBJRDBnZXlCemRHRjBkWE1nZlRzS0lDQjlJR1ZzYzJVZ2FXWWdLSE5sYzNOcGIyNHVjM1JoZEhWeklEMDlQU0FuYjJzbktTQjdDaUFnSUNCamIyNTBaWGgwSUQwZ2V5QnpkR0YwZFhNNklDZGxlR2wwWldRbklIMDdDaUFnZlFvS0lDQjFjR1JoZEdWVFpYTnphVzl1S0hObGMzTnBiMjRzSUdOdmJuUmxlSFFwT3dwOUNnb3ZLaW9LSUNvZ1UyVnlhV0ZzYVhwbGN5QmhJSEJoYzNObFpDQnpaWE56YVc5dUlHOWlhbVZqZENCMGJ5QmhJRXBUVDA0Z2IySnFaV04wSUhkcGRHZ2dZU0J6YkdsbmFIUnNlU0JrYVdabVpYSmxiblFnYzNSeWRXTjBkWEpsTGdvZ0tpQlVhR2x6SUdseklHNWxZMlZ6YzJGeWVTQmlaV05oZFhObElIUm9aU0JUWlc1MGNua2dZbUZqYTJWdVpDQnlaWEYxYVhKbGN5QmhJSE5zYVdkb2RHeDVJR1JwWm1abGNtVnVkQ0J6WTJobGJXRWdiMllnWVNCelpYTnphVzl1Q2lBcUlIUm9ZVzRnZEdobElHOXVaU0IwYUdVZ1NsTWdVMFJMY3lCMWMyVWdhVzUwWlhKdVlXeHNlUzRLSUNvS0lDb2dRSEJoY21GdElITmxjM05wYjI0Z2RHaGxJSE5sYzNOcGIyNGdkRzhnWW1VZ1kyOXVkbVZ5ZEdWa0NpQXFDaUFxSUVCeVpYUjFjbTV6SUdFZ1NsTlBUaUJ2WW1wbFkzUWdiMllnZEdobElIQmhjM05sWkNCelpYTnphVzl1Q2lBcUx3cG1kVzVqZEdsdmJpQnpaWE56YVc5dVZHOUtVMDlPS0hObGMzTnBiMjRwSUhzS0lDQnlaWFIxY200Z1pISnZjRlZ1WkdWbWFXNWxaRXRsZVhNb2V3b2dJQ0FnYzJsa09pQmdKSHR6WlhOemFXOXVMbk5wWkgxZ0xBb2dJQ0FnYVc1cGREb2djMlZ6YzJsdmJpNXBibWwwTEFvZ0lDQWdMeThnVFdGclpTQnpkWEpsSUhSb1lYUWdjMlZqSUdseklHTnZiblpsY25SbFpDQjBieUJ0Y3lCbWIzSWdaR0YwWlNCamIyNXpkSEoxWTNSdmNnb2dJQ0FnYzNSaGNuUmxaRG9nYm1WM0lFUmhkR1VvYzJWemMybHZiaTV6ZEdGeWRHVmtJQ29nTVRBd01Da3VkRzlKVTA5VGRISnBibWNvS1N3S0lDQWdJSFJwYldWemRHRnRjRG9nYm1WM0lFUmhkR1VvYzJWemMybHZiaTUwYVcxbGMzUmhiWEFnS2lBeE1EQXdLUzUwYjBsVFQxTjBjbWx1WnlncExBb2dJQ0FnYzNSaGRIVnpPaUJ6WlhOemFXOXVMbk4wWVhSMWN5d0tJQ0FnSUdWeWNtOXljem9nYzJWemMybHZiaTVsY25KdmNuTXNDaUFnSUNCa2FXUTZJSFI1Y0dWdlppQnpaWE56YVc5dUxtUnBaQ0E5UFQwZ0oyNTFiV0psY2ljZ2ZId2dkSGx3Wlc5bUlITmxjM05wYjI0dVpHbGtJRDA5UFNBbmMzUnlhVzVuSnlBL0lHQWtlM05sYzNOcGIyNHVaR2xrZldBZ09pQjFibVJsWm1sdVpXUXNDaUFnSUNCa2RYSmhkR2x2YmpvZ2MyVnpjMmx2Ymk1a2RYSmhkR2x2Yml3S0lDQWdJR0ZpYm05eWJXRnNYMjFsWTJoaGJtbHpiVG9nYzJWemMybHZiaTVoWW01dmNtMWhiRjl0WldOb1lXNXBjMjBzQ2lBZ0lDQmhkSFJ5Y3pvZ2V3b2dJQ0FnSUNCeVpXeGxZWE5sT2lCelpYTnphVzl1TG5KbGJHVmhjMlVzQ2lBZ0lDQWdJR1Z1ZG1seWIyNXRaVzUwT2lCelpYTnphVzl1TG1WdWRtbHliMjV0Wlc1MExBb2dJQ0FnSUNCcGNGOWhaR1J5WlhOek9pQnpaWE56YVc5dUxtbHdRV1JrY21WemN5d0tJQ0FnSUNBZ2RYTmxjbDloWjJWdWREb2djMlZ6YzJsdmJpNTFjMlZ5UVdkbGJuUXNDaUFnSUNCOUxBb2dJSDBwT3dwOUNncGpiMjV6ZENCVVVrRkRSVjlHVEVGSFgxTkJUVkJNUlVRZ1BTQXdlREU3Q2dvdktpb0tJQ29nUTI5dWRtVnlkQ0JoSUhOd1lXNGdkRzhnWVNCMGNtRmpaU0JqYjI1MFpYaDBMQ0IzYUdsamFDQmpZVzRnWW1VZ2MyVnVkQ0JoY3lCMGFHVWdZSFJ5WVdObFlDQmpiMjUwWlhoMElHbHVJR0Z1SUdWMlpXNTBMZ29nS2k4S1puVnVZM1JwYjI0Z2MzQmhibFJ2VkhKaFkyVkRiMjUwWlhoMEtITndZVzRwSUhzS0lDQmpiMjV6ZENCN0lITndZVzVKWkRvZ2MzQmhibDlwWkN3Z2RISmhZMlZKWkRvZ2RISmhZMlZmYVdRZ2ZTQTlJSE53WVc0dWMzQmhia052Ym5SbGVIUW9LVHNLSUNCamIyNXpkQ0I3SUdSaGRHRXNJRzl3TENCd1lYSmxiblJmYzNCaGJsOXBaQ3dnYzNSaGRIVnpMQ0IwWVdkekxDQnZjbWxuYVc0Z2ZTQTlJSE53WVc1VWIwcFRUMDRvYzNCaGJpazdDZ29nSUhKbGRIVnliaUJrY205d1ZXNWtaV1pwYm1Wa1MyVjVjeWg3Q2lBZ0lDQmtZWFJoTEFvZ0lDQWdiM0FzQ2lBZ0lDQndZWEpsYm5SZmMzQmhibDlwWkN3S0lDQWdJSE53WVc1ZmFXUXNDaUFnSUNCemRHRjBkWE1zQ2lBZ0lDQjBZV2R6TEFvZ0lDQWdkSEpoWTJWZmFXUXNDaUFnSUNCdmNtbG5hVzRzQ2lBZ2ZTazdDbjBLQ2k4cUtnb2dLaUJEYjI1MlpYSjBJR0VnYzNCaGJpQjBieUJoSUVwVFQwNGdjbVZ3Y21WelpXNTBZWFJwYjI0dUNpQXFJRTV2ZEdVZ2RHaGhkQ0JoYkd3Z1ptbGxiR1J6SUhKbGRIVnlibVZrSUdobGNtVWdZWEpsSUc5d2RHbHZibUZzSUdGdVpDQnVaV1ZrSUhSdklHSmxJR2QxWVhKa1pXUWdZV2RoYVc1emRDNEtJQ29LSUNvZ1RtOTBaVG9nUW1WallYVnpaU0J2WmlCMGFHbHpMQ0IzWlNCamRYSnlaVzUwYkhrZ2FHRjJaU0JoSUdOcGNtTjFiR0Z5SUhSNWNHVWdaR1Z3Wlc1a1pXNWplU0FvZDJocFkyZ2dkMlVnYjNCMFpXUWdiM1YwSUc5bUlHbHVJSEJoWTJ0aFoyVXVhbk52YmlrdUNpQXFJRlJvYVhNZ2FYTWdibTkwSUdGMmIybGtZV0pzWlNCaGN5QjNaU0J1WldWa0lHQnpjR0Z1Vkc5S1UwOU9ZQ0JwYmlCZ2MzQmhibFYwYVd4ekxuUnpZQ3dnZDJocFkyZ2dhVzRnZEhWeWJpQnBjeUJ1WldWa1pXUWdZbmtnWUhOd1lXNHVkSE5nSUdadmNpQmlZV05yZDJGeVpITWdZMjl0Y0dGMGFXSnBiR2wwZVM0S0lDb2dRVzVrSUdCemNHRnVWRzlLVTA5T1lDQnVaV1ZrY3lCMGFHVWdVM0JoYmlCamJHRnpjeUJtY205dElHQnpjR0Z1TG5SellDQjBieUJqYUdWamF5Qm9aWEpsTGdvZ0tpQlVUMFJQSUhZNE9pQlhhR1Z1SUhkbElISmxiVzkyWlNCMGFHVWdaR1Z3Y21WallYUmxaQ0J6ZEhWbVppQm1jbTl0SUdCemNHRnVMblJ6WUN3Z2QyVWdZMkZ1SUhKbGJXOTJaU0IwYUdVZ1kybHlZM1ZzWVhJZ1pHVndaVzVrWlc1amVTQmhaMkZwYmk0S0lDb3ZDbVoxYm1OMGFXOXVJSE53WVc1VWIwcFRUMDRvYzNCaGJpa2dld29nSUdsbUlDaHpjR0Z1U1hOVGNHRnVRMnhoYzNNb2MzQmhiaWtwSUhzS0lDQWdJSEpsZEhWeWJpQnpjR0Z1TG1kbGRGTndZVzVLVTA5T0tDazdDaUFnZlFvS0lDQXZMeUJHWVd4c1ltRmphem9nVjJVZ1lXeHpieUJqYUdWamF5Qm1iM0lnWUM1MGIwcFRUMDRvS1dBZ2FHVnlaUzR1TGdvZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lHbG1JQ2gwZVhCbGIyWWdjM0JoYmk1MGIwcFRUMDRnUFQwOUlDZG1kVzVqZEdsdmJpY3BJSHNLSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lDQWdjbVYwZFhKdUlITndZVzR1ZEc5S1UwOU9LQ2s3Q2lBZ2ZRb0tJQ0J5WlhSMWNtNGdlMzA3Q24wS0NpOHFLZ29nS2lCVFlXUnNlU3dnWkhWbElIUnZJR05wY21OMWJHRnlJR1JsY0dWdVpHVnVZM2tnWTJobFkydHpJSGRsSUdOaGJtNXZkQ0JoWTNSMVlXeHNlU0JwYlhCdmNuUWdkR2hsSUZOd1lXNGdZMnhoYzNNZ2FHVnlaU0JoYm1RZ1kyaGxZMnNnWm05eUlHbHVjM1JoYm1ObGIyWXVDaUFxSURvb0lGTnZJR2x1YzNSbFlXUWdkMlVnWVhCd2NtOTRhVzFoZEdVZ2RHaHBjeUJpZVNCamFHVmphMmx1WnlCcFppQnBkQ0JvWVhNZ2RHaGxJR0JuWlhSVGNHRnVTbE5QVG1BZ2JXVjBhRzlrTGdvZ0tpOEtablZ1WTNScGIyNGdjM0JoYmtselUzQmhia05zWVhOektITndZVzRwSUhzS0lDQnlaWFIxY200Z2RIbHdaVzltSUNoemNHRnVJQ2t1WjJWMFUzQmhia3BUVDA0Z1BUMDlJQ2RtZFc1amRHbHZiaWM3Q24wS0NpOHFLZ29nS2lCU1pYUjFjbTV6SUhSeWRXVWdhV1lnWVNCemNHRnVJR2x6SUhOaGJYQnNaV1F1Q2lBcUlFbHVJRzF2YzNRZ1kyRnpaWE1zSUhsdmRTQnphRzkxYkdRZ2FuVnpkQ0IxYzJVZ1lITndZVzR1YVhOU1pXTnZjbVJwYm1jb0tXQWdhVzV6ZEdWaFpDNEtJQ29nU0c5M1pYWmxjaXdnZEdocGN5Qm9ZWE1nWVNCemJHbG5hSFJzZVNCa2FXWm1aWEpsYm5RZ2MyVnRZVzUwYVdNc0lHRnpJR2wwSUdGc2MyOGdjbVYwZFhKdWN5Qm1ZV3h6WlNCcFppQjBhR1VnYzNCaGJpQnBjeUJtYVc1cGMyaGxaQzRLSUNvZ1UyOGdhVzRnZEdobElHTmhjMlVnZDJobGNtVWdkR2hwY3lCa2FYTjBhVzVqZEdsdmJpQnBjeUJwYlhCdmNuUmhiblFzSUhWelpTQjBhR2x6SUcxbGRHaHZaQzRLSUNvdkNtWjFibU4wYVc5dUlITndZVzVKYzFOaGJYQnNaV1FvYzNCaGJpa2dld29nSUM4dklGZGxJR0ZzYVdkdUlHOTFjaUIwY21GalpTQm1iR0ZuY3lCM2FYUm9JSFJvWlNCdmJtVnpJRTl3Wlc1VVpXeGxiV1YwY25rZ2RYTmxDaUFnTHk4Z1UyOGdkMlVnWVd4emJ5QmphR1ZqYXlCbWIzSWdjMkZ0Y0d4bFpDQjBhR1VnYzJGdFpTQjNZWGtnZEdobGVTQmtieTRLSUNCamIyNXpkQ0I3SUhSeVlXTmxSbXhoWjNNZ2ZTQTlJSE53WVc0dWMzQmhia052Ym5SbGVIUW9LVHNLSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ2JtOHRZbWwwZDJselpRb2dJSEpsZEhWeWJpQkNiMjlzWldGdUtIUnlZV05sUm14aFozTWdKaUJVVWtGRFJWOUdURUZIWDFOQlRWQk1SVVFwT3dwOUNnb3ZLaW9LSUNvZ1IyVjBJSFJvWlNCamRYSnlaVzUwYkhrZ1lXTjBhWFpsSUdOc2FXVnVkQzRLSUNvdkNtWjFibU4wYVc5dUlHZGxkRU5zYVdWdWRDZ3BJSHNLSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1pHVndjbVZqWVhScGIyNHZaR1Z3Y21WallYUnBiMjRLSUNCeVpYUjFjbTRnWjJWMFEzVnljbVZ1ZEVoMVlpZ3BMbWRsZEVOc2FXVnVkQ2dwT3dwOUNnb3ZLaW9LSUNvZ1IyVjBJSFJvWlNCamRYSnlaVzUwYkhrZ1lXTjBhWFpsSUhOamIzQmxMZ29nS2k4S1puVnVZM1JwYjI0Z1oyVjBRM1Z5Y21WdWRGTmpiM0JsS0NrZ2V3b2dJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJSEpsZEhWeWJpQm5aWFJEZFhKeVpXNTBTSFZpS0NrdVoyVjBVMk52Y0dVb0tUc0tmUW9LTHlvcUNpQXFJRkpsZEhWeWJuTWdkR2hsSUhKdmIzUWdjM0JoYmlCdlppQmhJR2RwZG1WdUlITndZVzR1Q2lBcUNpQXFJRUZ6SUd4dmJtY2dZWE1nZDJVZ2RYTmxJR0JVY21GdWMyRmpkR2x2Ym1CeklHbHVkR1Z5Ym1Gc2JIa3NJSFJvWlNCeVpYUjFjbTVsWkNCeWIyOTBJSE53WVc0S0lDb2dkMmxzYkNCaVpTQmhJR0JVY21GdWMyRmpkR2x2Ym1BZ1luVjBJR0psSUdGM1lYSmxJSFJvWVhRZ2RHaHBjeUJ0YVdkb2RDQmphR0Z1WjJVZ2FXNGdkR2hsSUdaMWRIVnlaUzRLSUNvS0lDb2dTV1lnZEdobElHZHBkbVZ1SUhOd1lXNGdhR0Z6SUc1dklISnZiM1FnYzNCaGJpQnZjaUIwY21GdWMyRmpkR2x2Yml3Z1lIVnVaR1ZtYVc1bFpHQWdhWE1nY21WMGRYSnVaV1F1Q2lBcUx3cG1kVzVqZEdsdmJpQm5aWFJTYjI5MFUzQmhiaWh6Y0dGdUtTQjdDaUFnTHk4Z1ZFOUVUeUFvZGpncE9pQlNaVzF2ZG1VZ2RHaHBjeUJqYUdWamF5QmhibVFnYW5WemRDQnlaWFIxY200Z2MzQmhiZ29nSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUhKbGRIVnliaUJ6Y0dGdUxuUnlZVzV6WVdOMGFXOXVPd3A5Q2dvdktpb0tJQ29nUTNKbFlYUmxjeUJoSUdSNWJtRnRhV01nYzJGdGNHeHBibWNnWTI5dWRHVjRkQ0JtY205dElHRWdZMnhwWlc1MExnb2dLZ29nS2lCRWFYTndZWFJqYUdWeklIUm9aU0JnWTNKbFlYUmxSSE5qWUNCc2FXWmxZM2xqYkdVZ2FHOXZheUJoY3lCaElITnBaR1VnWldabVpXTjBMZ29nS2k4S1puVnVZM1JwYjI0Z1oyVjBSSGx1WVcxcFkxTmhiWEJzYVc1blEyOXVkR1Y0ZEVaeWIyMURiR2xsYm5Rb0NpQWdkSEpoWTJWZmFXUXNDaUFnWTJ4cFpXNTBMQW9nSUhOamIzQmxMQW9wSUhzS0lDQmpiMjV6ZENCdmNIUnBiMjV6SUQwZ1kyeHBaVzUwTG1kbGRFOXdkR2x2Ym5Nb0tUc0tDaUFnWTI5dWMzUWdleUJ3ZFdKc2FXTkxaWGs2SUhCMVlteHBZMTlyWlhrZ2ZTQTlJR05zYVdWdWRDNW5aWFJFYzI0b0tTQjhmQ0I3ZlRzS0lDQXZMeUJVVDBSUEtIWTRLVG9nVW1WdGIzWmxJSE5sWjIxbGJuUWdabkp2YlNCVmMyVnlDaUFnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnWTI5dWMzUWdleUJ6WldkdFpXNTBPaUIxYzJWeVgzTmxaMjFsYm5RZ2ZTQTlJQ2h6WTI5d1pTQW1KaUJ6WTI5d1pTNW5aWFJWYzJWeUtDa3BJSHg4SUh0OU93b0tJQ0JqYjI1emRDQmtjMk1nUFNCa2NtOXdWVzVrWldacGJtVmtTMlY1Y3loN0NpQWdJQ0JsYm5acGNtOXViV1Z1ZERvZ2IzQjBhVzl1Y3k1bGJuWnBjbTl1YldWdWRDQjhmQ0JFUlVaQlZVeFVYMFZPVmtsU1QwNU5SVTVVTEFvZ0lDQWdjbVZzWldGelpUb2diM0IwYVc5dWN5NXlaV3hsWVhObExBb2dJQ0FnZFhObGNsOXpaV2R0Wlc1MExBb2dJQ0FnY0hWaWJHbGpYMnRsZVN3S0lDQWdJSFJ5WVdObFgybGtMQW9nSUgwcElEc0tDaUFnWTJ4cFpXNTBMbVZ0YVhRZ0ppWWdZMnhwWlc1MExtVnRhWFFvSjJOeVpXRjBaVVJ6WXljc0lHUnpZeWs3Q2dvZ0lISmxkSFZ5YmlCa2MyTTdDbjBLQ2k4cUtnb2dLaUJCSUZOd1lXNGdkMmwwYUNCaElHWnliM3BsYmlCa2VXNWhiV2xqSUhOaGJYQnNhVzVuSUdOdmJuUmxlSFF1Q2lBcUx3b0tMeW9xQ2lBcUlFTnlaV0YwWlhNZ1lTQmtlVzVoYldsaklITmhiWEJzYVc1bklHTnZiblJsZUhRZ1puSnZiU0JoSUhOd1lXNGdLR0Z1WkNCamJHbGxiblFnWVc1a0lITmpiM0JsS1FvZ0tnb2dLaUJBY0dGeVlXMGdjM0JoYmlCMGFHVWdjM0JoYmlCbWNtOXRJSGRvYVdOb0lHRWdabVYzSUhaaGJIVmxjeUJzYVd0bElIUm9aU0J5YjI5MElITndZVzRnYm1GdFpTQmhibVFnYzJGdGNHeGxJSEpoZEdVZ1lYSmxJR1Y0ZEhKaFkzUmxaQzRLSUNvS0lDb2dRSEpsZEhWeWJuTWdZU0JrZVc1aGJXbGpJSE5oYlhCc2FXNW5JR052Ym5SbGVIUUtJQ292Q21aMWJtTjBhVzl1SUdkbGRFUjVibUZ0YVdOVFlXMXdiR2x1WjBOdmJuUmxlSFJHY205dFUzQmhiaWh6Y0dGdUtTQjdDaUFnWTI5dWMzUWdZMnhwWlc1MElEMGdaMlYwUTJ4cFpXNTBLQ2s3Q2lBZ2FXWWdLQ0ZqYkdsbGJuUXBJSHNLSUNBZ0lISmxkSFZ5YmlCN2ZUc0tJQ0I5Q2dvZ0lDOHZJSEJoYzNOcGJtY2daVzFwZEQxbVlXeHpaU0JvWlhKbElIUnZJRzl1YkhrZ1pXMXBkQ0JzWVhSbGNpQnZibU5sSUhSb1pTQkVVME1nYVhNZ1lXTjBkV0ZzYkhrZ2NHOXdkV3hoZEdWa0NpQWdZMjl1YzNRZ1pITmpJRDBnWjJWMFJIbHVZVzFwWTFOaGJYQnNhVzVuUTI5dWRHVjRkRVp5YjIxRGJHbGxiblFvYzNCaGJsUnZTbE5QVGloemNHRnVLUzUwY21GalpWOXBaQ0I4ZkNBbkp5d2dZMnhwWlc1MExDQm5aWFJEZFhKeVpXNTBVMk52Y0dVb0tTazdDZ29nSUM4dklGUlBSRThnS0hZNEtUb2dVbVZ0YjNabElIWTNSbkp2ZW1WdVJITmpJR0Z6SUdFZ1ZISmhibk5oWTNScGIyNGdkMmxzYkNCdWJ5QnNiMjVuWlhJZ2FHRjJaU0JmWm5KdmVtVnVSSGx1WVcxcFkxTmhiWEJzYVc1blEyOXVkR1Y0ZEFvZ0lHTnZibk4wSUhSNGJpQTlJR2RsZEZKdmIzUlRjR0Z1S0hOd1lXNHBJRHNLSUNCcFppQW9JWFI0YmlrZ2V3b2dJQ0FnY21WMGRYSnVJR1J6WXpzS0lDQjlDZ29nSUM4dklGUlBSRThnS0hZNEtUb2dVbVZ0YjNabElIWTNSbkp2ZW1WdVJITmpJR0Z6SUdFZ1ZISmhibk5oWTNScGIyNGdkMmxzYkNCdWJ5QnNiMjVuWlhJZ2FHRjJaU0JmWm5KdmVtVnVSSGx1WVcxcFkxTmhiWEJzYVc1blEyOXVkR1Y0ZEFvZ0lDOHZJRVp2Y2lCdWIzY2dkMlVnYm1WbFpDQjBieUJoZG05cFpDQmljbVZoYTJsdVp5QjFjMlZ5Y3lCM2FHOGdaR2x5WldOMGJIa2dZM0psWVhSbFpDQmhJSFI0YmlCM2FYUm9JR0VnUkZORExDQjNhR1Z5WlNCMGFHbHpJR1pwWld4a0lHbHpJSE4wYVd4c0lITmxkQzRLSUNBdkx5QkFjMlZsSUZSeVlXNXpZV04wYVc5dUlHTnNZWE56SUdOdmJuTjBjblZqZEc5eUNpQWdZMjl1YzNRZ2RqZEdjbTk2Wlc1RWMyTWdQU0IwZUc0Z0ppWWdkSGh1TGw5bWNtOTZaVzVFZVc1aGJXbGpVMkZ0Y0d4cGJtZERiMjUwWlhoME93b2dJR2xtSUNoMk4wWnliM3BsYmtSell5a2dld29nSUNBZ2NtVjBkWEp1SUhZM1JuSnZlbVZ1UkhOak93b2dJSDBLQ2lBZ0x5OGdWRTlFVHlBb2RqZ3BPaUJTWlhCc1lXTmxJSFI0Ymk1dFpYUmhaR0YwWVNCM2FYUm9JSFI0Ymk1aGRIUnlhV0oxZEdWelcxMEtJQ0F2THlCWFpTQmpZVzRuZENCa2J5QjBhR2x6SUhsbGRDQmlaV05oZFhObElHRjBkSEpwWW5WMFpYTWdZWEpsYmlkMElHRnNkMkY1Y3lCelpYUWdlV1YwTGdvZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lHTnZibk4wSUhzZ2MyRnRjR3hsVW1GMFpUb2diV0Y1WW1WVFlXMXdiR1ZTWVhSbExDQnpiM1Z5WTJVZ2ZTQTlJSFI0Ymk1dFpYUmhaR0YwWVRzS0lDQnBaaUFvYldGNVltVlRZVzF3YkdWU1lYUmxJQ0U5SUc1MWJHd3BJSHNLSUNBZ0lHUnpZeTV6WVcxd2JHVmZjbUYwWlNBOUlHQWtlMjFoZVdKbFUyRnRjR3hsVW1GMFpYMWdPd29nSUgwS0NpQWdMeThnVjJVZ1pHOXVKM1FnZDJGdWRDQjBieUJvWVhabElHRWdkSEpoYm5OaFkzUnBiMjRnYm1GdFpTQnBiaUIwYUdVZ1JGTkRJR2xtSUhSb1pTQnpiM1Z5WTJVZ2FYTWdJblZ5YkNJZ1ltVmpZWFZ6WlNCVlVreHpJRzFwWjJoMElHTnZiblJoYVc0Z1VFbEpDaUFnWTI5dWMzUWdhbk52YmxOd1lXNGdQU0J6Y0dGdVZHOUtVMDlPS0hSNGJpazdDZ29nSUM4dklHRm1kR1Z5SUVwVFQwNGdZMjl1ZG1WeWMybHZiaXdnZEhodUxtNWhiV1VnWW1WamIyMWxjeUJxYzI5dVUzQmhiaTVrWlhOamNtbHdkR2x2YmdvZ0lHbG1JQ2h6YjNWeVkyVWdKaVlnYzI5MWNtTmxJQ0U5UFNBbmRYSnNKeWtnZXdvZ0lDQWdaSE5qTG5SeVlXNXpZV04wYVc5dUlEMGdhbk52YmxOd1lXNHVaR1Z6WTNKcGNIUnBiMjQ3Q2lBZ2ZRb0tJQ0JrYzJNdWMyRnRjR3hsWkNBOUlGTjBjbWx1WnloemNHRnVTWE5UWVcxd2JHVmtLSFI0YmlrcE93b0tJQ0JqYkdsbGJuUXVaVzFwZENBbUppQmpiR2xsYm5RdVpXMXBkQ2duWTNKbFlYUmxSSE5qSnl3Z1pITmpLVHNLQ2lBZ2NtVjBkWEp1SUdSell6c0tmUW9LTHlvcUNpQXFJRUZ3Y0d4cFpYTWdaR0YwWVNCbWNtOXRJSFJvWlNCelkyOXdaU0IwYnlCMGFHVWdaWFpsYm5RZ1lXNWtJSEoxYm5NZ1lXeHNJR1YyWlc1MElIQnliMk5sYzNOdmNuTWdiMjRnYVhRdUNpQXFMd3BtZFc1amRHbHZiaUJoY0hCc2VWTmpiM0JsUkdGMFlWUnZSWFpsYm5Rb1pYWmxiblFzSUdSaGRHRXBJSHNLSUNCamIyNXpkQ0I3SUdacGJtZGxjbkJ5YVc1MExDQnpjR0Z1TENCaWNtVmhaR055ZFcxaWN5d2djMlJyVUhKdlkyVnpjMmx1WjAxbGRHRmtZWFJoSUgwZ1BTQmtZWFJoT3dvS0lDQXZMeUJCY0hCc2VTQm5aVzVsY21Gc0lHUmhkR0VLSUNCaGNIQnNlVVJoZEdGVWIwVjJaVzUwS0dWMlpXNTBMQ0JrWVhSaEtUc0tDaUFnTHk4Z1YyVWdkMkZ1ZENCMGJ5QnpaWFFnZEdobElIUnlZV05sSUdOdmJuUmxlSFFnWm05eUlHNXZjbTFoYkNCbGRtVnVkSE1nYjI1c2VTQnBaaUIwYUdWeVpTQnBjMjRuZENCaGJISmxZV1I1Q2lBZ0x5OGdZU0IwY21GalpTQmpiMjUwWlhoMElHOXVJSFJvWlNCbGRtVnVkQzRnVkdobGNtVWdhWE1nWVNCd2NtOWtkV04wSUdabFlYUjFjbVVnYVc0Z2NHeGhZMlVnZDJobGNtVWdkMlVnYkdsdWF3b2dJQzh2SUdWeWNtOXljeUIzYVhSb0lIUnlZVzV6WVdOMGFXOXVJR0Z1WkNCcGRDQnlaV3hwWlhNZ2IyNGdkR2hoZEM0S0lDQnBaaUFvYzNCaGJpa2dld29nSUNBZ1lYQndiSGxUY0dGdVZHOUZkbVZ1ZENobGRtVnVkQ3dnYzNCaGJpazdDaUFnZlFvS0lDQmhjSEJzZVVacGJtZGxjbkJ5YVc1MFZHOUZkbVZ1ZENobGRtVnVkQ3dnWm1sdVoyVnljSEpwYm5RcE93b2dJR0Z3Y0d4NVFuSmxZV1JqY25WdFluTlViMFYyWlc1MEtHVjJaVzUwTENCaWNtVmhaR055ZFcxaWN5azdDaUFnWVhCd2JIbFRaR3ROWlhSaFpHRjBZVlJ2UlhabGJuUW9aWFpsYm5Rc0lITmthMUJ5YjJObGMzTnBibWROWlhSaFpHRjBZU2s3Q24wS0NtWjFibU4wYVc5dUlHRndjR3g1UkdGMFlWUnZSWFpsYm5Rb1pYWmxiblFzSUdSaGRHRXBJSHNLSUNCamIyNXpkQ0I3Q2lBZ0lDQmxlSFJ5WVN3S0lDQWdJSFJoWjNNc0NpQWdJQ0IxYzJWeUxBb2dJQ0FnWTI5dWRHVjRkSE1zQ2lBZ0lDQnNaWFpsYkN3S0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnZEhKaGJuTmhZM1JwYjI1T1lXMWxMQW9nSUgwZ1BTQmtZWFJoT3dvS0lDQmpiMjV6ZENCamJHVmhibVZrUlhoMGNtRWdQU0JrY205d1ZXNWtaV1pwYm1Wa1MyVjVjeWhsZUhSeVlTazdDaUFnYVdZZ0tHTnNaV0Z1WldSRmVIUnlZU0FtSmlCUFltcGxZM1F1YTJWNWN5aGpiR1ZoYm1Wa1JYaDBjbUVwTG14bGJtZDBhQ2tnZXdvZ0lDQWdaWFpsYm5RdVpYaDBjbUVnUFNCN0lDNHVMbU5zWldGdVpXUkZlSFJ5WVN3Z0xpNHVaWFpsYm5RdVpYaDBjbUVnZlRzS0lDQjlDZ29nSUdOdmJuTjBJR05zWldGdVpXUlVZV2R6SUQwZ1pISnZjRlZ1WkdWbWFXNWxaRXRsZVhNb2RHRm5jeWs3Q2lBZ2FXWWdLR05zWldGdVpXUlVZV2R6SUNZbUlFOWlhbVZqZEM1clpYbHpLR05zWldGdVpXUlVZV2R6S1M1c1pXNW5kR2dwSUhzS0lDQWdJR1YyWlc1MExuUmhaM01nUFNCN0lDNHVMbU5zWldGdVpXUlVZV2R6TENBdUxpNWxkbVZ1ZEM1MFlXZHpJSDA3Q2lBZ2ZRb0tJQ0JqYjI1emRDQmpiR1ZoYm1Wa1ZYTmxjaUE5SUdSeWIzQlZibVJsWm1sdVpXUkxaWGx6S0hWelpYSXBPd29nSUdsbUlDaGpiR1ZoYm1Wa1ZYTmxjaUFtSmlCUFltcGxZM1F1YTJWNWN5aGpiR1ZoYm1Wa1ZYTmxjaWt1YkdWdVozUm9LU0I3Q2lBZ0lDQmxkbVZ1ZEM1MWMyVnlJRDBnZXlBdUxpNWpiR1ZoYm1Wa1ZYTmxjaXdnTGk0dVpYWmxiblF1ZFhObGNpQjlPd29nSUgwS0NpQWdZMjl1YzNRZ1kyeGxZVzVsWkVOdmJuUmxlSFJ6SUQwZ1pISnZjRlZ1WkdWbWFXNWxaRXRsZVhNb1kyOXVkR1Y0ZEhNcE93b2dJR2xtSUNoamJHVmhibVZrUTI5dWRHVjRkSE1nSmlZZ1QySnFaV04wTG10bGVYTW9ZMnhsWVc1bFpFTnZiblJsZUhSektTNXNaVzVuZEdncElIc0tJQ0FnSUdWMlpXNTBMbU52Ym5SbGVIUnpJRDBnZXlBdUxpNWpiR1ZoYm1Wa1EyOXVkR1Y0ZEhNc0lDNHVMbVYyWlc1MExtTnZiblJsZUhSeklIMDdDaUFnZlFvS0lDQnBaaUFvYkdWMlpXd3BJSHNLSUNBZ0lHVjJaVzUwTG14bGRtVnNJRDBnYkdWMlpXdzdDaUFnZlFvS0lDQnBaaUFvZEhKaGJuTmhZM1JwYjI1T1lXMWxLU0I3Q2lBZ0lDQmxkbVZ1ZEM1MGNtRnVjMkZqZEdsdmJpQTlJSFJ5WVc1ellXTjBhVzl1VG1GdFpUc0tJQ0I5Q24wS0NtWjFibU4wYVc5dUlHRndjR3g1UW5KbFlXUmpjblZ0WW5OVWIwVjJaVzUwS0dWMlpXNTBMQ0JpY21WaFpHTnlkVzFpY3lrZ2V3b2dJR052Ym5OMElHMWxjbWRsWkVKeVpXRmtZM0oxYldKeklEMGdXeTR1TGlobGRtVnVkQzVpY21WaFpHTnlkVzFpY3lCOGZDQmJYU2tzSUM0dUxtSnlaV0ZrWTNKMWJXSnpYVHNLSUNCbGRtVnVkQzVpY21WaFpHTnlkVzFpY3lBOUlHMWxjbWRsWkVKeVpXRmtZM0oxYldKekxteGxibWQwYUNBL0lHMWxjbWRsWkVKeVpXRmtZM0oxYldKeklEb2dkVzVrWldacGJtVmtPd3A5Q2dwbWRXNWpkR2x2YmlCaGNIQnNlVk5rYTAxbGRHRmtZWFJoVkc5RmRtVnVkQ2hsZG1WdWRDd2djMlJyVUhKdlkyVnpjMmx1WjAxbGRHRmtZWFJoS1NCN0NpQWdaWFpsYm5RdWMyUnJVSEp2WTJWemMybHVaMDFsZEdGa1lYUmhJRDBnZXdvZ0lDQWdMaTR1WlhabGJuUXVjMlJyVUhKdlkyVnpjMmx1WjAxbGRHRmtZWFJoTEFvZ0lDQWdMaTR1YzJSclVISnZZMlZ6YzJsdVowMWxkR0ZrWVhSaExBb2dJSDA3Q24wS0NtWjFibU4wYVc5dUlHRndjR3g1VTNCaGJsUnZSWFpsYm5Rb1pYWmxiblFzSUhOd1lXNHBJSHNLSUNCbGRtVnVkQzVqYjI1MFpYaDBjeUE5SUhzZ2RISmhZMlU2SUhOd1lXNVViMVJ5WVdObFEyOXVkR1Y0ZENoemNHRnVLU3dnTGk0dVpYWmxiblF1WTI5dWRHVjRkSE1nZlRzS0lDQmpiMjV6ZENCeWIyOTBVM0JoYmlBOUlHZGxkRkp2YjNSVGNHRnVLSE53WVc0cE93b2dJR2xtSUNoeWIyOTBVM0JoYmlrZ2V3b2dJQ0FnWlhabGJuUXVjMlJyVUhKdlkyVnpjMmx1WjAxbGRHRmtZWFJoSUQwZ2V3b2dJQ0FnSUNCa2VXNWhiV2xqVTJGdGNHeHBibWREYjI1MFpYaDBPaUJuWlhSRWVXNWhiV2xqVTJGdGNHeHBibWREYjI1MFpYaDBSbkp2YlZOd1lXNG9jM0JoYmlrc0NpQWdJQ0FnSUM0dUxtVjJaVzUwTG5Oa2ExQnliMk5sYzNOcGJtZE5aWFJoWkdGMFlTd0tJQ0FnSUgwN0NpQWdJQ0JqYjI1emRDQjBjbUZ1YzJGamRHbHZiazVoYldVZ1BTQnpjR0Z1Vkc5S1UwOU9LSEp2YjNSVGNHRnVLUzVrWlhOamNtbHdkR2x2YmpzS0lDQWdJR2xtSUNoMGNtRnVjMkZqZEdsdmJrNWhiV1VwSUhzS0lDQWdJQ0FnWlhabGJuUXVkR0ZuY3lBOUlIc2dkSEpoYm5OaFkzUnBiMjQ2SUhSeVlXNXpZV04wYVc5dVRtRnRaU3dnTGk0dVpYWmxiblF1ZEdGbmN5QjlPd29nSUNBZ2ZRb2dJSDBLZlFvS0x5b3FDaUFxSUVGd2NHeHBaWE1nWm1sdVoyVnljSEpwYm5RZ1puSnZiU0IwYUdVZ2MyTnZjR1VnZEc4Z2RHaGxJR1YyWlc1MElHbG1JSFJvWlhKbEozTWdiMjVsTEFvZ0tpQjFjMlZ6SUcxbGMzTmhaMlVnYVdZZ2RHaGxjbVVuY3lCdmJtVWdhVzV6ZEdWaFpDQnZjaUJuWlhRZ2NtbGtJRzltSUdWdGNIUjVJR1pwYm1kbGNuQnlhVzUwQ2lBcUx3cG1kVzVqZEdsdmJpQmhjSEJzZVVacGJtZGxjbkJ5YVc1MFZHOUZkbVZ1ZENobGRtVnVkQ3dnWm1sdVoyVnljSEpwYm5RcElIc0tJQ0F2THlCTllXdGxJSE4xY21VZ2FYUW5jeUJoYmlCaGNuSmhlU0JtYVhKemRDQmhibVFnZDJVZ1lXTjBkV0ZzYkhrZ2FHRjJaU0J6YjIxbGRHaHBibWNnYVc0Z2NHeGhZMlVLSUNCbGRtVnVkQzVtYVc1blpYSndjbWx1ZENBOUlHVjJaVzUwTG1acGJtZGxjbkJ5YVc1MElEOGdZWEp5WVhscFpua29aWFpsYm5RdVptbHVaMlZ5Y0hKcGJuUXBJRG9nVzEwN0Nnb2dJQzh2SUVsbUlIZGxJR2hoZG1VZ2MyOXRaWFJvYVc1bklHOXVJSFJvWlNCelkyOXdaU3dnZEdobGJpQnRaWEpuWlNCcGRDQjNhWFJvSUdWMlpXNTBDaUFnYVdZZ0tHWnBibWRsY25CeWFXNTBLU0I3Q2lBZ0lDQmxkbVZ1ZEM1bWFXNW5aWEp3Y21sdWRDQTlJR1YyWlc1MExtWnBibWRsY25CeWFXNTBMbU52Ym1OaGRDaG1hVzVuWlhKd2NtbHVkQ2s3Q2lBZ2ZRb0tJQ0F2THlCSlppQjNaU0JvWVhabElHNXZJR1JoZEdFZ1lYUWdZV3hzTENCeVpXMXZkbVVnWlcxd2RIa2dZWEp5WVhrZ1pHVm1ZWFZzZEFvZ0lHbG1JQ2hsZG1WdWRDNW1hVzVuWlhKd2NtbHVkQ0FtSmlBaFpYWmxiblF1Wm1sdVoyVnljSEpwYm5RdWJHVnVaM1JvS1NCN0NpQWdJQ0JrWld4bGRHVWdaWFpsYm5RdVptbHVaMlZ5Y0hKcGJuUTdDaUFnZlFwOUNnb3ZLaW9LSUNvZ1JHVm1ZWFZzZENCMllXeDFaU0JtYjNJZ2JXRjRhVzExYlNCdWRXMWlaWElnYjJZZ1luSmxZV1JqY25WdFluTWdZV1JrWldRZ2RHOGdZVzRnWlhabGJuUXVDaUFxTHdwamIyNXpkQ0JFUlVaQlZVeFVYMDFCV0Y5Q1VrVkJSRU5TVlUxQ1V5QTlJREV3TURzS0NpOHFLZ29nS2lCSWIyeGtjeUJoWkdScGRHbHZibUZzSUdWMlpXNTBJR2x1Wm05eWJXRjBhVzl1TGlCN1FHeHBibXNnVTJOdmNHVXVZWEJ3YkhsVWIwVjJaVzUwZlNCM2FXeHNJR0psQ2lBcUlHTmhiR3hsWkNCaWVTQjBhR1VnWTJ4cFpXNTBJR0psWm05eVpTQmhiaUJsZG1WdWRDQjNhV3hzSUdKbElITmxiblF1Q2lBcUx3cGpiR0Z6Y3lCVFkyOXdaU0FnZXdvZ0lDOHFLaUJHYkdGbklHbG1JRzV2ZEdsbWVXbHVaeUJwY3lCb1lYQndaVzVwYm1jdUlDb3ZDZ29nSUM4cUtpQkRZV3hzWW1GamF5Qm1iM0lnWTJ4cFpXNTBJSFJ2SUhKbFkyVnBkbVVnYzJOdmNHVWdZMmhoYm1kbGN5NGdLaThLQ2lBZ0x5b3FJRU5oYkd4aVlXTnJJR3hwYzNRZ2RHaGhkQ0IzYVd4c0lHSmxJR05oYkd4bFpDQmhablJsY2lCN1FHeHBibXNnWVhCd2JIbFViMFYyWlc1MGZTNGdLaThLQ2lBZ0x5b3FJRUZ5Y21GNUlHOW1JR0p5WldGa1kzSjFiV0p6TGlBcUx3b0tJQ0F2S2lvZ1ZYTmxjaUFxTHdvS0lDQXZLaW9nVkdGbmN5QXFMd29LSUNBdktpb2dSWGgwY21FZ0tpOEtDaUFnTHlvcUlFTnZiblJsZUhSeklDb3ZDZ29nSUM4cUtpQkJkSFJoWTJodFpXNTBjeUFxTHdvS0lDQXZLaW9nVUhKdmNHRm5ZWFJwYjI0Z1EyOXVkR1Y0ZENCbWIzSWdaR2x6ZEhKcFluVjBaV1FnZEhKaFkybHVaeUFxTHdvS0lDQXZLaW9LSUNBZ0tpQkJJSEJzWVdObElIUnZJSE4wWVhOb0lHUmhkR0VnZDJocFkyZ2dhWE1nYm1WbFpHVmtJR0YwSUhOdmJXVWdjRzlwYm5RZ2FXNGdkR2hsSUZORVN5ZHpJR1YyWlc1MElIQnliMk5sYzNOcGJtY2djR2x3Wld4cGJtVWdZblYwSUhkb2FXTm9JSE5vYjNWc1pHNG5kQ0JuWlhRS0lDQWdLaUJ6Wlc1MElIUnZJRk5sYm5SeWVRb2dJQ0FxTHdvS0lDQXZLaW9nUm1sdVoyVnljSEpwYm5RZ0tpOEtDaUFnTHlvcUlGTmxkbVZ5YVhSNUlDb3ZDaUFnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDZ29nSUM4cUtnb2dJQ0FxSUZSeVlXNXpZV04wYVc5dUlFNWhiV1VLSUNBZ0tpOEtDaUFnTHlvcUlGTndZVzRnS2k4S0NpQWdMeW9xSUZObGMzTnBiMjRnS2k4S0NpQWdMeW9xSUZKbGNYVmxjM1FnVFc5a1pTQlRaWE56YVc5dUlGTjBZWFIxY3lBcUx3b0tJQ0F2S2lvZ1ZHaGxJR05zYVdWdWRDQnZiaUIwYUdseklITmpiM0JsSUNvdkNnb2dJQzh2SUU1UFZFVTZJRUZ1ZVNCbWFXVnNaQ0IzYUdsamFDQm5aWFJ6SUdGa1pHVmtJR2hsY21VZ2MyaHZkV3hrSUdkbGRDQmhaR1JsWkNCdWIzUWdiMjVzZVNCMGJ5QjBhR1VnWTI5dWMzUnlkV04wYjNJZ1luVjBJR0ZzYzI4Z2RHOGdkR2hsSUdCamJHOXVaV0FnYldWMGFHOWtMZ29LSUNBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3Q2lBZ0lDQjBhR2x6TGw5dWIzUnBabmxwYm1kTWFYTjBaVzVsY25NZ1BTQm1ZV3h6WlRzS0lDQWdJSFJvYVhNdVgzTmpiM0JsVEdsemRHVnVaWEp6SUQwZ1cxMDdDaUFnSUNCMGFHbHpMbDlsZG1WdWRGQnliMk5sYzNOdmNuTWdQU0JiWFRzS0lDQWdJSFJvYVhNdVgySnlaV0ZrWTNKMWJXSnpJRDBnVzEwN0NpQWdJQ0IwYUdsekxsOWhkSFJoWTJodFpXNTBjeUE5SUZ0ZE93b2dJQ0FnZEdocGN5NWZkWE5sY2lBOUlIdDlPd29nSUNBZ2RHaHBjeTVmZEdGbmN5QTlJSHQ5T3dvZ0lDQWdkR2hwY3k1ZlpYaDBjbUVnUFNCN2ZUc0tJQ0FnSUhSb2FYTXVYMk52Ym5SbGVIUnpJRDBnZTMwN0NpQWdJQ0IwYUdsekxsOXpaR3RRY205alpYTnphVzVuVFdWMFlXUmhkR0VnUFNCN2ZUc0tJQ0FnSUhSb2FYTXVYM0J5YjNCaFoyRjBhVzl1UTI5dWRHVjRkQ0E5SUdkbGJtVnlZWFJsVUhKdmNHRm5ZWFJwYjI1RGIyNTBaWGgwS0NrN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCSmJtaGxjbWwwSUhaaGJIVmxjeUJtY205dElIUm9aU0J3WVhKbGJuUWdjMk52Y0dVdUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZYTmxJR0J6WTI5d1pTNWpiRzl1WlNncFlDQmhibVFnWUc1bGR5QlRZMjl3WlNncFlDQnBibk4wWldGa0xnb2dJQ0FxTHdvZ0lDQnpkR0YwYVdNZ1kyeHZibVVvYzJOdmNHVXBJSHNLSUNBZ0lISmxkSFZ5YmlCelkyOXdaU0EvSUhOamIzQmxMbU5zYjI1bEtDa2dPaUJ1WlhjZ1UyTnZjR1VvS1RzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUVOc2IyNWxJSFJvYVhNZ2MyTnZjR1VnYVc1emRHRnVZMlV1Q2lBZ0lDb3ZDaUFnSUdOc2IyNWxLQ2tnZXdvZ0lDQWdZMjl1YzNRZ2JtVjNVMk52Y0dVZ1BTQnVaWGNnVTJOdmNHVW9LVHNLSUNBZ0lHNWxkMU5qYjNCbExsOWljbVZoWkdOeWRXMWljeUE5SUZzdUxpNTBhR2x6TGw5aWNtVmhaR055ZFcxaWMxMDdDaUFnSUNCdVpYZFRZMjl3WlM1ZmRHRm5jeUE5SUhzZ0xpNHVkR2hwY3k1ZmRHRm5jeUI5T3dvZ0lDQWdibVYzVTJOdmNHVXVYMlY0ZEhKaElEMGdleUF1TGk1MGFHbHpMbDlsZUhSeVlTQjlPd29nSUNBZ2JtVjNVMk52Y0dVdVgyTnZiblJsZUhSeklEMGdleUF1TGk1MGFHbHpMbDlqYjI1MFpYaDBjeUI5T3dvZ0lDQWdibVYzVTJOdmNHVXVYM1Z6WlhJZ1BTQjBhR2x6TGw5MWMyVnlPd29nSUNBZ2JtVjNVMk52Y0dVdVgyeGxkbVZzSUQwZ2RHaHBjeTVmYkdWMlpXdzdDaUFnSUNCdVpYZFRZMjl3WlM1ZmMzQmhiaUE5SUhSb2FYTXVYM053WVc0N0NpQWdJQ0J1WlhkVFkyOXdaUzVmYzJWemMybHZiaUE5SUhSb2FYTXVYM05sYzNOcGIyNDdDaUFnSUNCdVpYZFRZMjl3WlM1ZmRISmhibk5oWTNScGIyNU9ZVzFsSUQwZ2RHaHBjeTVmZEhKaGJuTmhZM1JwYjI1T1lXMWxPd29nSUNBZ2JtVjNVMk52Y0dVdVgyWnBibWRsY25CeWFXNTBJRDBnZEdocGN5NWZabWx1WjJWeWNISnBiblE3Q2lBZ0lDQnVaWGRUWTI5d1pTNWZaWFpsYm5SUWNtOWpaWE56YjNKeklEMGdXeTR1TG5Sb2FYTXVYMlYyWlc1MFVISnZZMlZ6YzI5eWMxMDdDaUFnSUNCdVpYZFRZMjl3WlM1ZmNtVnhkV1Z6ZEZObGMzTnBiMjRnUFNCMGFHbHpMbDl5WlhGMVpYTjBVMlZ6YzJsdmJqc0tJQ0FnSUc1bGQxTmpiM0JsTGw5aGRIUmhZMmh0Wlc1MGN5QTlJRnN1TGk1MGFHbHpMbDloZEhSaFkyaHRaVzUwYzEwN0NpQWdJQ0J1WlhkVFkyOXdaUzVmYzJSclVISnZZMlZ6YzJsdVowMWxkR0ZrWVhSaElEMGdleUF1TGk1MGFHbHpMbDl6Wkd0UWNtOWpaWE56YVc1blRXVjBZV1JoZEdFZ2ZUc0tJQ0FnSUc1bGQxTmpiM0JsTGw5d2NtOXdZV2RoZEdsdmJrTnZiblJsZUhRZ1BTQjdJQzR1TG5Sb2FYTXVYM0J5YjNCaFoyRjBhVzl1UTI5dWRHVjRkQ0I5T3dvZ0lDQWdibVYzVTJOdmNHVXVYMk5zYVdWdWRDQTlJSFJvYVhNdVgyTnNhV1Z1ZERzS0NpQWdJQ0J5WlhSMWNtNGdibVYzVTJOdmNHVTdDaUFnZlFvS0lDQXZLaW9nVlhCa1lYUmxJSFJvWlNCamJHbGxiblFnYjI0Z2RHaGxJSE5qYjNCbExpQXFMd29nSUNCelpYUkRiR2xsYm5Rb1kyeHBaVzUwS1NCN0NpQWdJQ0IwYUdsekxsOWpiR2xsYm5RZ1BTQmpiR2xsYm5RN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCSFpYUWdkR2hsSUdOc2FXVnVkQ0JoYzNOcFoyNWxaQ0IwYnlCMGFHbHpJSE5qYjNCbExnb2dJQ0FxQ2lBZ0lDb2dTWFFnYVhNZ1oyVnVaWEpoYkd4NUlISmxZMjl0YldWdVpHVmtJSFJ2SUhWelpTQjBhR1VnWjJ4dlltRnNJR1oxYm1OMGFXOXVJR0JUWlc1MGNua3VaMlYwUTJ4cFpXNTBLQ2xnSUdsdWMzUmxZV1FzSUhWdWJHVnpjeUI1YjNVZ2EyNXZkeUIzYUdGMElIbHZkU0JoY21VZ1pHOXBibWN1Q2lBZ0lDb3ZDaUFnSUdkbGRFTnNhV1Z1ZENncElIc0tJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWpiR2xsYm5RN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCQlpHUWdhVzUwWlhKdVlXd2diMjRnWTJoaGJtZGxJR3hwYzNSbGJtVnlMaUJWYzJWa0lHWnZjaUJ6ZFdJZ1UwUkxjeUIwYUdGMElHNWxaV1FnZEc4Z2MzUnZjbVVnZEdobElITmpiM0JsTGdvZ0lDQXFJRUJvYVdSa1pXNEtJQ0FnS2k4S0lDQWdZV1JrVTJOdmNHVk1hWE4wWlc1bGNpaGpZV3hzWW1GamF5a2dld29nSUNBZ2RHaHBjeTVmYzJOdmNHVk1hWE4wWlc1bGNuTXVjSFZ6YUNoallXeHNZbUZqYXlrN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCQWFXNW9aWEpwZEVSdll3b2dJQ0FxTHdvZ0lDQmhaR1JGZG1WdWRGQnliMk5sYzNOdmNpaGpZV3hzWW1GamF5a2dld29nSUNBZ2RHaHBjeTVmWlhabGJuUlFjbTlqWlhOemIzSnpMbkIxYzJnb1kyRnNiR0poWTJzcE93b2dJQ0FnY21WMGRYSnVJSFJvYVhNN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCQWFXNW9aWEpwZEVSdll3b2dJQ0FxTHdvZ0lDQnpaWFJWYzJWeUtIVnpaWElwSUhzS0lDQWdJQzh2SUVsbUlHNTFiR3dnYVhNZ2NHRnpjMlZrSUhkbElIZGhiblFnZEc4Z2RXNXpaWFFnWlhabGNubDBhR2x1Wnl3Z1luVjBJSE4wYVd4c0lHUmxabWx1WlNCclpYbHpMQW9nSUNBZ0x5OGdjMjhnZEdoaGRDQnNZWFJsY2lCa2IzZHVJR2x1SUhSb1pTQndhWEJsYkdsdVpTQmhibmtnWlhocGMzUnBibWNnZG1Gc2RXVnpJR0Z5WlNCamJHVmhjbVZrTGdvZ0lDQWdkR2hwY3k1ZmRYTmxjaUE5SUhWelpYSWdmSHdnZXdvZ0lDQWdJQ0JsYldGcGJEb2dkVzVrWldacGJtVmtMQW9nSUNBZ0lDQnBaRG9nZFc1a1pXWnBibVZrTEFvZ0lDQWdJQ0JwY0Y5aFpHUnlaWE56T2lCMWJtUmxabWx1WldRc0NpQWdJQ0FnSUhObFoyMWxiblE2SUhWdVpHVm1hVzVsWkN3S0lDQWdJQ0FnZFhObGNtNWhiV1U2SUhWdVpHVm1hVzVsWkN3S0lDQWdJSDA3Q2dvZ0lDQWdhV1lnS0hSb2FYTXVYM05sYzNOcGIyNHBJSHNLSUNBZ0lDQWdkWEJrWVhSbFUyVnpjMmx2YmloMGFHbHpMbDl6WlhOemFXOXVMQ0I3SUhWelpYSWdmU2s3Q2lBZ0lDQjlDZ29nSUNBZ2RHaHBjeTVmYm05MGFXWjVVMk52Y0dWTWFYTjBaVzVsY25Nb0tUc0tJQ0FnSUhKbGRIVnliaUIwYUdsek93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2k4S0lDQWdaMlYwVlhObGNpZ3BJSHNLSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkxYzJWeU93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2k4S0lDQWdaMlYwVW1WeGRXVnpkRk5sYzNOcGIyNG9LU0I3Q2lBZ0lDQnlaWFIxY200Z2RHaHBjeTVmY21WeGRXVnpkRk5sYzNOcGIyNDdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUx3b2dJQ0J6WlhSU1pYRjFaWE4wVTJWemMybHZiaWh5WlhGMVpYTjBVMlZ6YzJsdmJpa2dld29nSUNBZ2RHaHBjeTVmY21WeGRXVnpkRk5sYzNOcGIyNGdQU0J5WlhGMVpYTjBVMlZ6YzJsdmJqc0tJQ0FnSUhKbGRIVnliaUIwYUdsek93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2k4S0lDQWdjMlYwVkdGbmN5aDBZV2R6S1NCN0NpQWdJQ0IwYUdsekxsOTBZV2R6SUQwZ2V3b2dJQ0FnSUNBdUxpNTBhR2x6TGw5MFlXZHpMQW9nSUNBZ0lDQXVMaTUwWVdkekxBb2dJQ0FnZlRzS0lDQWdJSFJvYVhNdVgyNXZkR2xtZVZOamIzQmxUR2x6ZEdWdVpYSnpLQ2s3Q2lBZ0lDQnlaWFIxY200Z2RHaHBjenNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRUJwYm1obGNtbDBSRzlqQ2lBZ0lDb3ZDaUFnSUhObGRGUmhaeWhyWlhrc0lIWmhiSFZsS1NCN0NpQWdJQ0IwYUdsekxsOTBZV2R6SUQwZ2V5QXVMaTUwYUdsekxsOTBZV2R6TENCYmEyVjVYVG9nZG1Gc2RXVWdmVHNLSUNBZ0lIUm9hWE11WDI1dmRHbG1lVk5qYjNCbFRHbHpkR1Z1WlhKektDazdDaUFnSUNCeVpYUjFjbTRnZEdocGN6c0tJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlFQnBibWhsY21sMFJHOWpDaUFnSUNvdkNpQWdJSE5sZEVWNGRISmhjeWhsZUhSeVlYTXBJSHNLSUNBZ0lIUm9hWE11WDJWNGRISmhJRDBnZXdvZ0lDQWdJQ0F1TGk1MGFHbHpMbDlsZUhSeVlTd0tJQ0FnSUNBZ0xpNHVaWGgwY21GekxBb2dJQ0FnZlRzS0lDQWdJSFJvYVhNdVgyNXZkR2xtZVZOamIzQmxUR2x6ZEdWdVpYSnpLQ2s3Q2lBZ0lDQnlaWFIxY200Z2RHaHBjenNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRUJwYm1obGNtbDBSRzlqQ2lBZ0lDb3ZDaUFnSUhObGRFVjRkSEpoS0d0bGVTd2daWGgwY21FcElIc0tJQ0FnSUhSb2FYTXVYMlY0ZEhKaElEMGdleUF1TGk1MGFHbHpMbDlsZUhSeVlTd2dXMnRsZVYwNklHVjRkSEpoSUgwN0NpQWdJQ0IwYUdsekxsOXViM1JwWm5sVFkyOXdaVXhwYzNSbGJtVnljeWdwT3dvZ0lDQWdjbVYwZFhKdUlIUm9hWE03Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJBYVc1b1pYSnBkRVJ2WXdvZ0lDQXFMd29nSUNCelpYUkdhVzVuWlhKd2NtbHVkQ2htYVc1blpYSndjbWx1ZENrZ2V3b2dJQ0FnZEdocGN5NWZabWx1WjJWeWNISnBiblFnUFNCbWFXNW5aWEp3Y21sdWREc0tJQ0FnSUhSb2FYTXVYMjV2ZEdsbWVWTmpiM0JsVEdsemRHVnVaWEp6S0NrN0NpQWdJQ0J5WlhSMWNtNGdkR2hwY3pzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUVCcGJtaGxjbWwwUkc5akNpQWdJQ292Q2lBZ0lITmxkRXhsZG1Wc0tBb2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnSUNCc1pYWmxiQ3dLSUNBcElIc0tJQ0FnSUhSb2FYTXVYMnhsZG1Wc0lEMGdiR1YyWld3N0NpQWdJQ0IwYUdsekxsOXViM1JwWm5sVFkyOXdaVXhwYzNSbGJtVnljeWdwT3dvZ0lDQWdjbVYwZFhKdUlIUm9hWE03Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJUWlhSeklIUm9aU0IwY21GdWMyRmpkR2x2YmlCdVlXMWxJRzl1SUhSb1pTQnpZMjl3WlNCbWIzSWdablYwZFhKbElHVjJaVzUwY3k0S0lDQWdLaThLSUNBZ2MyVjBWSEpoYm5OaFkzUnBiMjVPWVcxbEtHNWhiV1VwSUhzS0lDQWdJSFJvYVhNdVgzUnlZVzV6WVdOMGFXOXVUbUZ0WlNBOUlHNWhiV1U3Q2lBZ0lDQjBhR2x6TGw5dWIzUnBabmxUWTI5d1pVeHBjM1JsYm1WeWN5Z3BPd29nSUNBZ2NtVjBkWEp1SUhSb2FYTTdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUx3b2dJQ0J6WlhSRGIyNTBaWGgwS0d0bGVTd2dZMjl1ZEdWNGRDa2dld29nSUNBZ2FXWWdLR052Ym5SbGVIUWdQVDA5SUc1MWJHd3BJSHNLSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRUIwZVhCbGMyTnlhWEIwTFdWemJHbHVkQzl1Ynkxa2VXNWhiV2xqTFdSbGJHVjBaUW9nSUNBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVmWTI5dWRHVjRkSE5iYTJWNVhUc0tJQ0FnSUgwZ1pXeHpaU0I3Q2lBZ0lDQWdJSFJvYVhNdVgyTnZiblJsZUhSelcydGxlVjBnUFNCamIyNTBaWGgwT3dvZ0lDQWdmUW9LSUNBZ0lIUm9hWE11WDI1dmRHbG1lVk5qYjNCbFRHbHpkR1Z1WlhKektDazdDaUFnSUNCeVpYUjFjbTRnZEdocGN6c0tJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlGTmxkSE1nZEdobElGTndZVzRnYjI0Z2RHaGxJSE5qYjNCbExnb2dJQ0FxSUVCd1lYSmhiU0J6Y0dGdUlGTndZVzRLSUNBZ0tpQkFaR1Z3Y21WallYUmxaQ0JKYm5OMFpXRmtJRzltSUhObGRIUnBibWNnWVNCemNHRnVJRzl1SUdFZ2MyTnZjR1VzSUhWelpTQmdjM1JoY25SVGNHRnVLQ2xnTDJCemRHRnlkRk53WVc1TllXNTFZV3dvS1dBZ2FXNXpkR1ZoWkM0S0lDQWdLaThLSUNBZ2MyVjBVM0JoYmloemNHRnVLU0I3Q2lBZ0lDQjBhR2x6TGw5emNHRnVJRDBnYzNCaGJqc0tJQ0FnSUhSb2FYTXVYMjV2ZEdsbWVWTmpiM0JsVEdsemRHVnVaWEp6S0NrN0NpQWdJQ0J5WlhSMWNtNGdkR2hwY3pzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUZKbGRIVnlibk1nZEdobElHQlRjR0Z1WUNCcFppQjBhR1Z5WlNCcGN5QnZibVV1Q2lBZ0lDb2dRR1JsY0hKbFkyRjBaV1FnVlhObElHQm5aWFJCWTNScGRtVlRjR0Z1S0NsZ0lHbHVjM1JsWVdRdUNpQWdJQ292Q2lBZ0lHZGxkRk53WVc0b0tTQjdDaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZjM0JoYmpzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUZKbGRIVnlibk1nZEdobElHQlVjbUZ1YzJGamRHbHZibUFnWVhSMFlXTm9aV1FnZEc4Z2RHaGxJSE5qYjNCbElDaHBaaUIwYUdWeVpTQnBjeUJ2Ym1VcExnb2dJQ0FxSUVCa1pYQnlaV05oZEdWa0lGbHZkU0J6YUc5MWJHUWdibTkwSUhKbGJIa2diMjRnZEdobElIUnlZVzV6WVdOMGFXOXVMQ0JpZFhRZ2FuVnpkQ0IxYzJVZ1lITjBZWEowVTNCaGJpZ3BZQ0JCVUVseklHbHVjM1JsWVdRdUNpQWdJQ292Q2lBZ0lHZGxkRlJ5WVc1ellXTjBhVzl1S0NrZ2V3b2dJQ0FnTHk4Z1QyWjBaVzRzSUhSb2FYTWdjM0JoYmlBb2FXWWdhWFFnWlhocGMzUnpJR0YwSUdGc2JDa2dkMmxzYkNCaVpTQmhJSFJ5WVc1ellXTjBhVzl1TENCaWRYUWdhWFFuY3lCdWIzUWdaM1ZoY21GdWRHVmxaQ0IwYnlCaVpTNGdVbVZuWVhKa2JHVnpjeXdnYVhRZ2QybHNiQW9nSUNBZ0x5OGdhR0YyWlNCaElIQnZhVzUwWlhJZ2RHOGdkR2hsSUdOMWNuSmxiblJzZVMxaFkzUnBkbVVnZEhKaGJuTmhZM1JwYjI0dUNpQWdJQ0JqYjI1emRDQnpjR0Z1SUQwZ2RHaHBjeTVmYzNCaGJqc0tJQ0FnSUM4dklFTmhibTV2ZENCeVpYQnNZV05sSUhkcGRHZ2daMlYwVW05dmRGTndZVzRnWW1WallYVnpaU0JuWlhSU2IyOTBVM0JoYmlCeVpYUjFjbTV6SUdFZ2MzQmhiaXdnYm05MElHRWdkSEpoYm5OaFkzUnBiMjRLSUNBZ0lDOHZJRUZzYzI4c0lIUm9hWE1nYldWMGFHOWtJSGRwYkd3Z1ltVWdjbVZ0YjNabFpDQmhibmwzWVhrdUNpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnWkdWd2NtVmpZWFJwYjI0dlpHVndjbVZqWVhScGIyNEtJQ0FnSUhKbGRIVnliaUJ6Y0dGdUlDWW1JSE53WVc0dWRISmhibk5oWTNScGIyNDdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUx3b2dJQ0J6WlhSVFpYTnphVzl1S0hObGMzTnBiMjRwSUhzS0lDQWdJR2xtSUNnaGMyVnpjMmx2YmlrZ2V3b2dJQ0FnSUNCa1pXeGxkR1VnZEdocGN5NWZjMlZ6YzJsdmJqc0tJQ0FnSUgwZ1pXeHpaU0I3Q2lBZ0lDQWdJSFJvYVhNdVgzTmxjM05wYjI0Z1BTQnpaWE56YVc5dU93b2dJQ0FnZlFvZ0lDQWdkR2hwY3k1ZmJtOTBhV1o1VTJOdmNHVk1hWE4wWlc1bGNuTW9LVHNLSUNBZ0lISmxkSFZ5YmlCMGFHbHpPd29nSUgwS0NpQWdMeW9xQ2lBZ0lDb2dRR2x1YUdWeWFYUkViMk1LSUNBZ0tpOEtJQ0FnWjJWMFUyVnpjMmx2YmlncElIc0tJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXpaWE56YVc5dU93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2k4S0lDQWdkWEJrWVhSbEtHTmhjSFIxY21WRGIyNTBaWGgwS1NCN0NpQWdJQ0JwWmlBb0lXTmhjSFIxY21WRGIyNTBaWGgwS1NCN0NpQWdJQ0FnSUhKbGRIVnliaUIwYUdsek93b2dJQ0FnZlFvS0lDQWdJR052Ym5OMElITmpiM0JsVkc5TlpYSm5aU0E5SUhSNWNHVnZaaUJqWVhCMGRYSmxRMjl1ZEdWNGRDQTlQVDBnSjJaMWJtTjBhVzl1SnlBL0lHTmhjSFIxY21WRGIyNTBaWGgwS0hSb2FYTXBJRG9nWTJGd2RIVnlaVU52Ym5SbGVIUTdDZ29nSUNBZ2FXWWdLSE5qYjNCbFZHOU5aWEpuWlNCcGJuTjBZVzVqWlc5bUlGTmpiM0JsS1NCN0NpQWdJQ0FnSUdOdmJuTjBJSE5qYjNCbFJHRjBZU0E5SUhOamIzQmxWRzlOWlhKblpTNW5aWFJUWTI5d1pVUmhkR0VvS1RzS0NpQWdJQ0FnSUhSb2FYTXVYM1JoWjNNZ1BTQjdJQzR1TG5Sb2FYTXVYM1JoWjNNc0lDNHVMbk5qYjNCbFJHRjBZUzUwWVdkeklIMDdDaUFnSUNBZ0lIUm9hWE11WDJWNGRISmhJRDBnZXlBdUxpNTBhR2x6TGw5bGVIUnlZU3dnTGk0dWMyTnZjR1ZFWVhSaExtVjRkSEpoSUgwN0NpQWdJQ0FnSUhSb2FYTXVYMk52Ym5SbGVIUnpJRDBnZXlBdUxpNTBhR2x6TGw5amIyNTBaWGgwY3l3Z0xpNHVjMk52Y0dWRVlYUmhMbU52Ym5SbGVIUnpJSDA3Q2lBZ0lDQWdJR2xtSUNoelkyOXdaVVJoZEdFdWRYTmxjaUFtSmlCUFltcGxZM1F1YTJWNWN5aHpZMjl3WlVSaGRHRXVkWE5sY2lrdWJHVnVaM1JvS1NCN0NpQWdJQ0FnSUNBZ2RHaHBjeTVmZFhObGNpQTlJSE5qYjNCbFJHRjBZUzUxYzJWeU93b2dJQ0FnSUNCOUNpQWdJQ0FnSUdsbUlDaHpZMjl3WlVSaGRHRXViR1YyWld3cElIc0tJQ0FnSUNBZ0lDQjBhR2x6TGw5c1pYWmxiQ0E5SUhOamIzQmxSR0YwWVM1c1pYWmxiRHNLSUNBZ0lDQWdmUW9nSUNBZ0lDQnBaaUFvYzJOdmNHVkVZWFJoTG1acGJtZGxjbkJ5YVc1MExteGxibWQwYUNrZ2V3b2dJQ0FnSUNBZ0lIUm9hWE11WDJacGJtZGxjbkJ5YVc1MElEMGdjMk52Y0dWRVlYUmhMbVpwYm1kbGNuQnlhVzUwT3dvZ0lDQWdJQ0I5Q2lBZ0lDQWdJR2xtSUNoelkyOXdaVlJ2VFdWeVoyVXVaMlYwVW1WeGRXVnpkRk5sYzNOcGIyNG9LU2tnZXdvZ0lDQWdJQ0FnSUhSb2FYTXVYM0psY1hWbGMzUlRaWE56YVc5dUlEMGdjMk52Y0dWVWIwMWxjbWRsTG1kbGRGSmxjWFZsYzNSVFpYTnphVzl1S0NrN0NpQWdJQ0FnSUgwS0lDQWdJQ0FnYVdZZ0tITmpiM0JsUkdGMFlTNXdjbTl3WVdkaGRHbHZia052Ym5SbGVIUXBJSHNLSUNBZ0lDQWdJQ0IwYUdsekxsOXdjbTl3WVdkaGRHbHZia052Ym5SbGVIUWdQU0J6WTI5d1pVUmhkR0V1Y0hKdmNHRm5ZWFJwYjI1RGIyNTBaWGgwT3dvZ0lDQWdJQ0I5Q2lBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x6VUd4aGFXNVBZbXBsWTNRb2MyTnZjR1ZVYjAxbGNtZGxLU2tnZXdvZ0lDQWdJQ0JqYjI1emRDQnpZMjl3WlVOdmJuUmxlSFFnUFNCallYQjBkWEpsUTI5dWRHVjRkQ0E3Q2lBZ0lDQWdJSFJvYVhNdVgzUmhaM01nUFNCN0lDNHVMblJvYVhNdVgzUmhaM01zSUM0dUxuTmpiM0JsUTI5dWRHVjRkQzUwWVdkeklIMDdDaUFnSUNBZ0lIUm9hWE11WDJWNGRISmhJRDBnZXlBdUxpNTBhR2x6TGw5bGVIUnlZU3dnTGk0dWMyTnZjR1ZEYjI1MFpYaDBMbVY0ZEhKaElIMDdDaUFnSUNBZ0lIUm9hWE11WDJOdmJuUmxlSFJ6SUQwZ2V5QXVMaTUwYUdsekxsOWpiMjUwWlhoMGN5d2dMaTR1YzJOdmNHVkRiMjUwWlhoMExtTnZiblJsZUhSeklIMDdDaUFnSUNBZ0lHbG1JQ2h6WTI5d1pVTnZiblJsZUhRdWRYTmxjaWtnZXdvZ0lDQWdJQ0FnSUhSb2FYTXVYM1Z6WlhJZ1BTQnpZMjl3WlVOdmJuUmxlSFF1ZFhObGNqc0tJQ0FnSUNBZ2ZRb2dJQ0FnSUNCcFppQW9jMk52Y0dWRGIyNTBaWGgwTG14bGRtVnNLU0I3Q2lBZ0lDQWdJQ0FnZEdocGN5NWZiR1YyWld3Z1BTQnpZMjl3WlVOdmJuUmxlSFF1YkdWMlpXdzdDaUFnSUNBZ0lIMEtJQ0FnSUNBZ2FXWWdLSE5qYjNCbFEyOXVkR1Y0ZEM1bWFXNW5aWEp3Y21sdWRDa2dld29nSUNBZ0lDQWdJSFJvYVhNdVgyWnBibWRsY25CeWFXNTBJRDBnYzJOdmNHVkRiMjUwWlhoMExtWnBibWRsY25CeWFXNTBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHbG1JQ2h6WTI5d1pVTnZiblJsZUhRdWNtVnhkV1Z6ZEZObGMzTnBiMjRwSUhzS0lDQWdJQ0FnSUNCMGFHbHpMbDl5WlhGMVpYTjBVMlZ6YzJsdmJpQTlJSE5qYjNCbFEyOXVkR1Y0ZEM1eVpYRjFaWE4wVTJWemMybHZianNLSUNBZ0lDQWdmUW9nSUNBZ0lDQnBaaUFvYzJOdmNHVkRiMjUwWlhoMExuQnliM0JoWjJGMGFXOXVRMjl1ZEdWNGRDa2dld29nSUNBZ0lDQWdJSFJvYVhNdVgzQnliM0JoWjJGMGFXOXVRMjl1ZEdWNGRDQTlJSE5qYjNCbFEyOXVkR1Y0ZEM1d2NtOXdZV2RoZEdsdmJrTnZiblJsZUhRN0NpQWdJQ0FnSUgwS0lDQWdJSDBLQ2lBZ0lDQnlaWFIxY200Z2RHaHBjenNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRUJwYm1obGNtbDBSRzlqQ2lBZ0lDb3ZDaUFnSUdOc1pXRnlLQ2tnZXdvZ0lDQWdkR2hwY3k1ZlluSmxZV1JqY25WdFluTWdQU0JiWFRzS0lDQWdJSFJvYVhNdVgzUmhaM01nUFNCN2ZUc0tJQ0FnSUhSb2FYTXVYMlY0ZEhKaElEMGdlMzA3Q2lBZ0lDQjBhR2x6TGw5MWMyVnlJRDBnZTMwN0NpQWdJQ0IwYUdsekxsOWpiMjUwWlhoMGN5QTlJSHQ5T3dvZ0lDQWdkR2hwY3k1ZmJHVjJaV3dnUFNCMWJtUmxabWx1WldRN0NpQWdJQ0IwYUdsekxsOTBjbUZ1YzJGamRHbHZiazVoYldVZ1BTQjFibVJsWm1sdVpXUTdDaUFnSUNCMGFHbHpMbDltYVc1blpYSndjbWx1ZENBOUlIVnVaR1ZtYVc1bFpEc0tJQ0FnSUhSb2FYTXVYM0psY1hWbGMzUlRaWE56YVc5dUlEMGdkVzVrWldacGJtVmtPd29nSUNBZ2RHaHBjeTVmYzNCaGJpQTlJSFZ1WkdWbWFXNWxaRHNLSUNBZ0lIUm9hWE11WDNObGMzTnBiMjRnUFNCMWJtUmxabWx1WldRN0NpQWdJQ0IwYUdsekxsOXViM1JwWm5sVFkyOXdaVXhwYzNSbGJtVnljeWdwT3dvZ0lDQWdkR2hwY3k1ZllYUjBZV05vYldWdWRITWdQU0JiWFRzS0lDQWdJSFJvYVhNdVgzQnliM0JoWjJGMGFXOXVRMjl1ZEdWNGRDQTlJR2RsYm1WeVlYUmxVSEp2Y0dGbllYUnBiMjVEYjI1MFpYaDBLQ2s3Q2lBZ0lDQnlaWFIxY200Z2RHaHBjenNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRUJwYm1obGNtbDBSRzlqQ2lBZ0lDb3ZDaUFnSUdGa1pFSnlaV0ZrWTNKMWJXSW9ZbkpsWVdSamNuVnRZaXdnYldGNFFuSmxZV1JqY25WdFluTXBJSHNLSUNBZ0lHTnZibk4wSUcxaGVFTnlkVzFpY3lBOUlIUjVjR1Z2WmlCdFlYaENjbVZoWkdOeWRXMWljeUE5UFQwZ0oyNTFiV0psY2ljZ1B5QnRZWGhDY21WaFpHTnlkVzFpY3lBNklFUkZSa0ZWVEZSZlRVRllYMEpTUlVGRVExSlZUVUpUT3dvS0lDQWdJQzh2SUU1dklHUmhkR0VnYUdGeklHSmxaVzRnWTJoaGJtZGxaQ3dnYzI4Z1pHOXVKM1FnYm05MGFXWjVJSE5qYjNCbElHeHBjM1JsYm1WeWN3b2dJQ0FnYVdZZ0tHMWhlRU55ZFcxaWN5QThQU0F3S1NCN0NpQWdJQ0FnSUhKbGRIVnliaUIwYUdsek93b2dJQ0FnZlFvS0lDQWdJR052Ym5OMElHMWxjbWRsWkVKeVpXRmtZM0oxYldJZ1BTQjdDaUFnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2daR0YwWlZScGJXVnpkR0Z0Y0VsdVUyVmpiMjVrY3lncExBb2dJQ0FnSUNBdUxpNWljbVZoWkdOeWRXMWlMQW9nSUNBZ2ZUc0tDaUFnSUNCamIyNXpkQ0JpY21WaFpHTnlkVzFpY3lBOUlIUm9hWE11WDJKeVpXRmtZM0oxYldKek93b2dJQ0FnWW5KbFlXUmpjblZ0WW5NdWNIVnphQ2h0WlhKblpXUkNjbVZoWkdOeWRXMWlLVHNLSUNBZ0lIUm9hWE11WDJKeVpXRmtZM0oxYldKeklEMGdZbkpsWVdSamNuVnRZbk11YkdWdVozUm9JRDRnYldGNFEzSjFiV0p6SUQ4Z1luSmxZV1JqY25WdFluTXVjMnhwWTJVb0xXMWhlRU55ZFcxaWN5a2dPaUJpY21WaFpHTnlkVzFpY3pzS0NpQWdJQ0IwYUdsekxsOXViM1JwWm5sVFkyOXdaVXhwYzNSbGJtVnljeWdwT3dvS0lDQWdJSEpsZEhWeWJpQjBhR2x6T3dvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUUdsdWFHVnlhWFJFYjJNS0lDQWdLaThLSUNBZ1oyVjBUR0Z6ZEVKeVpXRmtZM0oxYldJb0tTQjdDaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZZbkpsWVdSamNuVnRZbk5iZEdocGN5NWZZbkpsWVdSamNuVnRZbk11YkdWdVozUm9JQzBnTVYwN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCQWFXNW9aWEpwZEVSdll3b2dJQ0FxTHdvZ0lDQmpiR1ZoY2tKeVpXRmtZM0oxYldKektDa2dld29nSUNBZ2RHaHBjeTVmWW5KbFlXUmpjblZ0WW5NZ1BTQmJYVHNLSUNBZ0lIUm9hWE11WDI1dmRHbG1lVk5qYjNCbFRHbHpkR1Z1WlhKektDazdDaUFnSUNCeVpYUjFjbTRnZEdocGN6c0tJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlFQnBibWhsY21sMFJHOWpDaUFnSUNvdkNpQWdJR0ZrWkVGMGRHRmphRzFsYm5Rb1lYUjBZV05vYldWdWRDa2dld29nSUNBZ2RHaHBjeTVmWVhSMFlXTm9iV1Z1ZEhNdWNIVnphQ2hoZEhSaFkyaHRaVzUwS1RzS0lDQWdJSEpsZEhWeWJpQjBhR2x6T3dvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUUdsdWFHVnlhWFJFYjJNS0lDQWdLaUJBWkdWd2NtVmpZWFJsWkNCVmMyVWdZR2RsZEZOamIzQmxSR0YwWVNncFlDQnBibk4wWldGa0xnb2dJQ0FxTHdvZ0lDQm5aWFJCZEhSaFkyaHRaVzUwY3lncElIc0tJQ0FnSUdOdmJuTjBJR1JoZEdFZ1BTQjBhR2x6TG1kbGRGTmpiM0JsUkdGMFlTZ3BPd29LSUNBZ0lISmxkSFZ5YmlCa1lYUmhMbUYwZEdGamFHMWxiblJ6T3dvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUUdsdWFHVnlhWFJFYjJNS0lDQWdLaThLSUNBZ1kyeGxZWEpCZEhSaFkyaHRaVzUwY3lncElIc0tJQ0FnSUhSb2FYTXVYMkYwZEdGamFHMWxiblJ6SUQwZ1cxMDdDaUFnSUNCeVpYUjFjbTRnZEdocGN6c0tJQ0I5Q2dvZ0lDOHFLaUJBYVc1b1pYSnBkRVJ2WXlBcUx3b2dJQ0JuWlhSVFkyOXdaVVJoZEdFb0tTQjdDaUFnSUNCamIyNXpkQ0I3Q2lBZ0lDQWdJRjlpY21WaFpHTnlkVzFpY3l3S0lDQWdJQ0FnWDJGMGRHRmphRzFsYm5SekxBb2dJQ0FnSUNCZlkyOXVkR1Y0ZEhNc0NpQWdJQ0FnSUY5MFlXZHpMQW9nSUNBZ0lDQmZaWGgwY21Fc0NpQWdJQ0FnSUY5MWMyVnlMQW9nSUNBZ0lDQmZiR1YyWld3c0NpQWdJQ0FnSUY5bWFXNW5aWEp3Y21sdWRDd0tJQ0FnSUNBZ1gyVjJaVzUwVUhKdlkyVnpjMjl5Y3l3S0lDQWdJQ0FnWDNCeWIzQmhaMkYwYVc5dVEyOXVkR1Y0ZEN3S0lDQWdJQ0FnWDNOa2ExQnliMk5sYzNOcGJtZE5aWFJoWkdGMFlTd0tJQ0FnSUNBZ1gzUnlZVzV6WVdOMGFXOXVUbUZ0WlN3S0lDQWdJQ0FnWDNOd1lXNHNDaUFnSUNCOUlEMGdkR2hwY3pzS0NpQWdJQ0J5WlhSMWNtNGdld29nSUNBZ0lDQmljbVZoWkdOeWRXMWljem9nWDJKeVpXRmtZM0oxYldKekxBb2dJQ0FnSUNCaGRIUmhZMmh0Wlc1MGN6b2dYMkYwZEdGamFHMWxiblJ6TEFvZ0lDQWdJQ0JqYjI1MFpYaDBjem9nWDJOdmJuUmxlSFJ6TEFvZ0lDQWdJQ0IwWVdkek9pQmZkR0ZuY3l3S0lDQWdJQ0FnWlhoMGNtRTZJRjlsZUhSeVlTd0tJQ0FnSUNBZ2RYTmxjam9nWDNWelpYSXNDaUFnSUNBZ0lHeGxkbVZzT2lCZmJHVjJaV3dzQ2lBZ0lDQWdJR1pwYm1kbGNuQnlhVzUwT2lCZlptbHVaMlZ5Y0hKcGJuUWdmSHdnVzEwc0NpQWdJQ0FnSUdWMlpXNTBVSEp2WTJWemMyOXljem9nWDJWMlpXNTBVSEp2WTJWemMyOXljeXdLSUNBZ0lDQWdjSEp2Y0dGbllYUnBiMjVEYjI1MFpYaDBPaUJmY0hKdmNHRm5ZWFJwYjI1RGIyNTBaWGgwTEFvZ0lDQWdJQ0J6Wkd0UWNtOWpaWE56YVc1blRXVjBZV1JoZEdFNklGOXpaR3RRY205alpYTnphVzVuVFdWMFlXUmhkR0VzQ2lBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1VG1GdFpUb2dYM1J5WVc1ellXTjBhVzl1VG1GdFpTd0tJQ0FnSUNBZ2MzQmhiam9nWDNOd1lXNHNDaUFnSUNCOU93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FYQndiR2xsY3lCa1lYUmhJR1p5YjIwZ2RHaGxJSE5qYjNCbElIUnZJSFJvWlNCbGRtVnVkQ0JoYm1RZ2NuVnVjeUJoYkd3Z1pYWmxiblFnY0hKdlkyVnpjMjl5Y3lCdmJpQnBkQzRLSUNBZ0tnb2dJQ0FxSUVCd1lYSmhiU0JsZG1WdWRDQkZkbVZ1ZEFvZ0lDQXFJRUJ3WVhKaGJTQm9hVzUwSUU5aWFtVmpkQ0JqYjI1MFlXbHVhVzVuSUdGa1pHbDBhVzl1WVd3Z2FXNW1iM0p0WVhScGIyNGdZV0p2ZFhRZ2RHaGxJRzl5YVdkcGJtRnNJR1Y0WTJWd2RHbHZiaXdnWm05eUlIVnpaU0JpZVNCMGFHVWdaWFpsYm5RZ2NISnZZMlZ6YzI5eWN5NEtJQ0FnS2lCQWFHbGtaR1Z1Q2lBZ0lDb2dRR1JsY0hKbFkyRjBaV1FnVlhObElHQmhjSEJzZVZOamIzQmxSR0YwWVZSdlJYWmxiblFvS1dBZ1pHbHlaV04wYkhrS0lDQWdLaThLSUNBZ1lYQndiSGxVYjBWMlpXNTBLQW9nSUNBZ1pYWmxiblFzQ2lBZ0lDQm9hVzUwSUQwZ2UzMHNDaUFnSUNCaFpHUnBkR2x2Ym1Gc1JYWmxiblJRY205alpYTnpiM0p6SUQwZ1cxMHNDaUFnS1NCN0NpQWdJQ0JoY0hCc2VWTmpiM0JsUkdGMFlWUnZSWFpsYm5Rb1pYWmxiblFzSUhSb2FYTXVaMlYwVTJOdmNHVkVZWFJoS0NrcE93b0tJQ0FnSUM4dklGUlBSRThnS0hZNEtUb2dWWEJrWVhSbElIUm9hWE1nYjNKa1pYSWdkRzhnWW1VNklFZHNiMkpoYkNBK0lFTnNhV1Z1ZENBK0lGTmpiM0JsQ2lBZ0lDQmpiMjV6ZENCbGRtVnVkRkJ5YjJObGMzTnZjbk1nUFNCYkNpQWdJQ0FnSUM0dUxtRmtaR2wwYVc5dVlXeEZkbVZ1ZEZCeWIyTmxjM052Y25Nc0NpQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ0lDQXVMaTVuWlhSSGJHOWlZV3hGZG1WdWRGQnliMk5sYzNOdmNuTW9LU3dLSUNBZ0lDQWdMaTR1ZEdocGN5NWZaWFpsYm5SUWNtOWpaWE56YjNKekxBb2dJQ0FnWFRzS0NpQWdJQ0J5WlhSMWNtNGdibTkwYVdaNVJYWmxiblJRY205alpYTnpiM0p6S0dWMlpXNTBVSEp2WTJWemMyOXljeXdnWlhabGJuUXNJR2hwYm5RcE93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FXUmtJR1JoZEdFZ2QyaHBZMmdnZDJsc2JDQmlaU0JoWTJObGMzTnBZbXhsSUdSMWNtbHVaeUJsZG1WdWRDQndjbTlqWlhOemFXNW5JR0oxZENCM2IyNG5kQ0JuWlhRZ2MyVnVkQ0IwYnlCVFpXNTBjbmtLSUNBZ0tpOEtJQ0FnYzJWMFUwUkxVSEp2WTJWemMybHVaMDFsZEdGa1lYUmhLRzVsZDBSaGRHRXBJSHNLSUNBZ0lIUm9hWE11WDNOa2ExQnliMk5sYzNOcGJtZE5aWFJoWkdGMFlTQTlJSHNnTGk0dWRHaHBjeTVmYzJSclVISnZZMlZ6YzJsdVowMWxkR0ZrWVhSaExDQXVMaTV1WlhkRVlYUmhJSDA3Q2dvZ0lDQWdjbVYwZFhKdUlIUm9hWE03Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJBYVc1b1pYSnBkRVJ2WXdvZ0lDQXFMd29nSUNCelpYUlFjbTl3WVdkaGRHbHZia052Ym5SbGVIUW9ZMjl1ZEdWNGRDa2dld29nSUNBZ2RHaHBjeTVmY0hKdmNHRm5ZWFJwYjI1RGIyNTBaWGgwSUQwZ1kyOXVkR1Y0ZERzS0lDQWdJSEpsZEhWeWJpQjBhR2x6T3dvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUUdsdWFHVnlhWFJFYjJNS0lDQWdLaThLSUNBZ1oyVjBVSEp2Y0dGbllYUnBiMjVEYjI1MFpYaDBLQ2tnZXdvZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDNCeWIzQmhaMkYwYVc5dVEyOXVkR1Y0ZERzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUVOaGNIUjFjbVVnWVc0Z1pYaGpaWEIwYVc5dUlHWnZjaUIwYUdseklITmpiM0JsTGdvZ0lDQXFDaUFnSUNvZ1FIQmhjbUZ0SUdWNFkyVndkR2x2YmlCVWFHVWdaWGhqWlhCMGFXOXVJSFJ2SUdOaGNIUjFjbVV1Q2lBZ0lDb2dRSEJoY21GdElHaHBiblFnVDNCMGFXNWhiQ0JoWkdScGRHbHZibUZzSUdSaGRHRWdkRzhnWVhSMFlXTm9JSFJ2SUhSb1pTQlRaVzUwY25rZ1pYWmxiblF1Q2lBZ0lDb2dRSEpsZEhWeWJuTWdkR2hsSUdsa0lHOW1JSFJvWlNCallYQjBkWEpsWkNCVFpXNTBjbmtnWlhabGJuUXVDaUFnSUNvdkNpQWdJR05oY0hSMWNtVkZlR05sY0hScGIyNG9aWGhqWlhCMGFXOXVMQ0JvYVc1MEtTQjdDaUFnSUNCamIyNXpkQ0JsZG1WdWRFbGtJRDBnYUdsdWRDQW1KaUJvYVc1MExtVjJaVzUwWDJsa0lEOGdhR2x1ZEM1bGRtVnVkRjlwWkNBNklIVjFhV1EwS0NrN0Nnb2dJQ0FnYVdZZ0tDRjBhR2x6TGw5amJHbGxiblFwSUhzS0lDQWdJQ0FnYkc5bloyVnlMbmRoY200b0owNXZJR05zYVdWdWRDQmpiMjVtYVdkMWNtVmtJRzl1SUhOamIzQmxJQzBnZDJsc2JDQnViM1FnWTJGd2RIVnlaU0JsZUdObGNIUnBiMjRoSnlrN0NpQWdJQ0FnSUhKbGRIVnliaUJsZG1WdWRFbGtPd29nSUNBZ2ZRb0tJQ0FnSUdOdmJuTjBJSE41Ym5Sb1pYUnBZMFY0WTJWd2RHbHZiaUE5SUc1bGR5QkZjbkp2Y2lnblUyVnVkSEo1SUhONWJuUm9aWFJwWTBWNFkyVndkR2x2YmljcE93b0tJQ0FnSUhSb2FYTXVYMk5zYVdWdWRDNWpZWEIwZFhKbFJYaGpaWEIwYVc5dUtBb2dJQ0FnSUNCbGVHTmxjSFJwYjI0c0NpQWdJQ0FnSUhzS0lDQWdJQ0FnSUNCdmNtbG5hVzVoYkVWNFkyVndkR2x2YmpvZ1pYaGpaWEIwYVc5dUxBb2dJQ0FnSUNBZ0lITjViblJvWlhScFkwVjRZMlZ3ZEdsdmJpd0tJQ0FnSUNBZ0lDQXVMaTVvYVc1MExBb2dJQ0FnSUNBZ0lHVjJaVzUwWDJsa09pQmxkbVZ1ZEVsa0xBb2dJQ0FnSUNCOUxBb2dJQ0FnSUNCMGFHbHpMQW9nSUNBZ0tUc0tDaUFnSUNCeVpYUjFjbTRnWlhabGJuUkpaRHNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRU5oY0hSMWNtVWdZU0J0WlhOellXZGxJR1p2Y2lCMGFHbHpJSE5qYjNCbExnb2dJQ0FxQ2lBZ0lDb2dRSEJoY21GdElHMWxjM05oWjJVZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWTJGd2RIVnlaUzRLSUNBZ0tpQkFjR0Z5WVcwZ2JHVjJaV3dnUVc0Z2IzQjBhVzl1WVd3Z2MyVjJaWEpwZEhrZ2JHVjJaV3dnZEc4Z2NtVndiM0owSUhSb1pTQnRaWE56WVdkbElIZHBkR2d1Q2lBZ0lDb2dRSEJoY21GdElHaHBiblFnVDNCMGFXOXVZV3dnWVdSa2FYUnBiMjVoYkNCa1lYUmhJSFJ2SUdGMGRHRmphQ0IwYnlCMGFHVWdVMlZ1ZEhKNUlHVjJaVzUwTGdvZ0lDQXFJRUJ5WlhSMWNtNXpJSFJvWlNCcFpDQnZaaUIwYUdVZ1kyRndkSFZ5WldRZ2JXVnpjMkZuWlM0S0lDQWdLaThLSUNBZ1kyRndkSFZ5WlUxbGMzTmhaMlVvYldWemMyRm5aU3dnYkdWMlpXd3NJR2hwYm5RcElIc0tJQ0FnSUdOdmJuTjBJR1YyWlc1MFNXUWdQU0JvYVc1MElDWW1JR2hwYm5RdVpYWmxiblJmYVdRZ1B5Qm9hVzUwTG1WMlpXNTBYMmxrSURvZ2RYVnBaRFFvS1RzS0NpQWdJQ0JwWmlBb0lYUm9hWE11WDJOc2FXVnVkQ2tnZXdvZ0lDQWdJQ0JzYjJkblpYSXVkMkZ5YmlnblRtOGdZMnhwWlc1MElHTnZibVpwWjNWeVpXUWdiMjRnYzJOdmNHVWdMU0IzYVd4c0lHNXZkQ0JqWVhCMGRYSmxJRzFsYzNOaFoyVWhKeWs3Q2lBZ0lDQWdJSEpsZEhWeWJpQmxkbVZ1ZEVsa093b2dJQ0FnZlFvS0lDQWdJR052Ym5OMElITjViblJvWlhScFkwVjRZMlZ3ZEdsdmJpQTlJRzVsZHlCRmNuSnZjaWh0WlhOellXZGxLVHNLQ2lBZ0lDQjBhR2x6TGw5amJHbGxiblF1WTJGd2RIVnlaVTFsYzNOaFoyVW9DaUFnSUNBZ0lHMWxjM05oWjJVc0NpQWdJQ0FnSUd4bGRtVnNMQW9nSUNBZ0lDQjdDaUFnSUNBZ0lDQWdiM0pwWjJsdVlXeEZlR05sY0hScGIyNDZJRzFsYzNOaFoyVXNDaUFnSUNBZ0lDQWdjM2x1ZEdobGRHbGpSWGhqWlhCMGFXOXVMQW9nSUNBZ0lDQWdJQzR1TG1ocGJuUXNDaUFnSUNBZ0lDQWdaWFpsYm5SZmFXUTZJR1YyWlc1MFNXUXNDaUFnSUNBZ0lIMHNDaUFnSUNBZ0lIUm9hWE1zQ2lBZ0lDQXBPd29LSUNBZ0lISmxkSFZ5YmlCbGRtVnVkRWxrT3dvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUTJGd2RIVnlaWE1nWVNCdFlXNTFZV3hzZVNCamNtVmhkR1ZrSUdWMlpXNTBJR1p2Y2lCMGFHbHpJSE5qYjNCbElHRnVaQ0J6Wlc1a2N5QnBkQ0IwYnlCVFpXNTBjbmt1Q2lBZ0lDb0tJQ0FnS2lCQWNHRnlZVzBnWlhoalpYQjBhVzl1SUZSb1pTQmxkbVZ1ZENCMGJ5QmpZWEIwZFhKbExnb2dJQ0FxSUVCd1lYSmhiU0JvYVc1MElFOXdkR2x2Ym1Gc0lHRmtaR2wwYVc5dVlXd2daR0YwWVNCMGJ5QmhkSFJoWTJnZ2RHOGdkR2hsSUZObGJuUnllU0JsZG1WdWRDNEtJQ0FnS2lCQWNtVjBkWEp1Y3lCMGFHVWdhV1FnYjJZZ2RHaGxJR05oY0hSMWNtVmtJR1YyWlc1MExnb2dJQ0FxTHdvZ0lDQmpZWEIwZFhKbFJYWmxiblFvWlhabGJuUXNJR2hwYm5RcElIc0tJQ0FnSUdOdmJuTjBJR1YyWlc1MFNXUWdQU0JvYVc1MElDWW1JR2hwYm5RdVpYWmxiblJmYVdRZ1B5Qm9hVzUwTG1WMlpXNTBYMmxrSURvZ2RYVnBaRFFvS1RzS0NpQWdJQ0JwWmlBb0lYUm9hWE11WDJOc2FXVnVkQ2tnZXdvZ0lDQWdJQ0JzYjJkblpYSXVkMkZ5YmlnblRtOGdZMnhwWlc1MElHTnZibVpwWjNWeVpXUWdiMjRnYzJOdmNHVWdMU0IzYVd4c0lHNXZkQ0JqWVhCMGRYSmxJR1YyWlc1MElTY3BPd29nSUNBZ0lDQnlaWFIxY200Z1pYWmxiblJKWkRzS0lDQWdJSDBLQ2lBZ0lDQjBhR2x6TGw5amJHbGxiblF1WTJGd2RIVnlaVVYyWlc1MEtHVjJaVzUwTENCN0lDNHVMbWhwYm5Rc0lHVjJaVzUwWDJsa09pQmxkbVZ1ZEVsa0lIMHNJSFJvYVhNcE93b0tJQ0FnSUhKbGRIVnliaUJsZG1WdWRFbGtPd29nSUgwS0NpQWdMeW9xQ2lBZ0lDb2dWR2hwY3lCM2FXeHNJR0psSUdOaGJHeGxaQ0J2YmlCbGRtVnllU0J6WlhRZ1kyRnNiQzRLSUNBZ0tpOEtJQ0FnWDI1dmRHbG1lVk5qYjNCbFRHbHpkR1Z1WlhKektDa2dld29nSUNBZ0x5OGdWMlVnYm1WbFpDQjBhR2x6SUdOb1pXTnJJR1p2Y2lCMGFHbHpMbDl1YjNScFpubHBibWRNYVhOMFpXNWxjbk1nZEc4Z1ltVWdZV0pzWlNCMGJ5QjNiM0pySUc5dUlITmpiM0JsSUdSMWNtbHVaeUIxY0dSaGRHVnpDaUFnSUNBdkx5QkpaaUIwYUdseklHTm9aV05ySUdseklHNXZkQ0JvWlhKbElIZGxKMnhzSUhCeWIyUjFZMlVnWlc1a2JHVnpjeUJ5WldOMWNuTnBiMjRnZDJobGJpQnpiMjFsZEdocGJtY2dhWE1nWkc5dVpTQjNhWFJvSUhSb1pTQnpZMjl3WlFvZ0lDQWdMeThnWkhWeWFXNW5JSFJvWlNCallXeHNZbUZqYXk0S0lDQWdJR2xtSUNnaGRHaHBjeTVmYm05MGFXWjVhVzVuVEdsemRHVnVaWEp6S1NCN0NpQWdJQ0FnSUhSb2FYTXVYMjV2ZEdsbWVXbHVaMHhwYzNSbGJtVnljeUE5SUhSeWRXVTdDaUFnSUNBZ0lIUm9hWE11WDNOamIzQmxUR2x6ZEdWdVpYSnpMbVp2Y2tWaFkyZ29ZMkZzYkdKaFkyc2dQVDRnZXdvZ0lDQWdJQ0FnSUdOaGJHeGlZV05yS0hSb2FYTXBPd29nSUNBZ0lDQjlLVHNLSUNBZ0lDQWdkR2hwY3k1ZmJtOTBhV1o1YVc1blRHbHpkR1Z1WlhKeklEMGdabUZzYzJVN0NpQWdJQ0I5Q2lBZ2ZRcDlDZ3BtZFc1amRHbHZiaUJuWlc1bGNtRjBaVkJ5YjNCaFoyRjBhVzl1UTI5dWRHVjRkQ2dwSUhzS0lDQnlaWFIxY200Z2V3b2dJQ0FnZEhKaFkyVkpaRG9nZFhWcFpEUW9LU3dLSUNBZ0lITndZVzVKWkRvZ2RYVnBaRFFvS1M1emRXSnpkSEpwYm1jb01UWXBMQW9nSUgwN0NuMEtDbU52Ym5OMElGTkVTMTlXUlZKVFNVOU9JRDBnSnpjdU1USXdMakFuT3dvS0x5b3FDaUFxSUVGUVNTQmpiMjF3WVhScFltbHNhWFI1SUhabGNuTnBiMjRnYjJZZ2RHaHBjeUJvZFdJdUNpQXFDaUFxSUZkQlVrNUpUa2M2SUZSb2FYTWdiblZ0WW1WeUlITm9iM1ZzWkNCdmJteDVJR0psSUdsdVkzSmxZWE5sWkNCM2FHVnVJSFJvWlNCbmJHOWlZV3dnYVc1MFpYSm1ZV05sQ2lBcUlHTm9ZVzVuWlhNZ1lXNWtJRzVsZHlCdFpYUm9iMlJ6SUdGeVpTQnBiblJ5YjJSMVkyVmtMZ29nS2dvZ0tpQkFhR2xrWkdWdUNpQXFMd3BqYjI1emRDQkJVRWxmVmtWU1UwbFBUaUE5SUhCaGNuTmxSbXh2WVhRb1UwUkxYMVpGVWxOSlQwNHBPd29LTHlvcUNpQXFJRVJsWm1GMWJIUWdiV0Y0YVcxMWJTQnVkVzFpWlhJZ2IyWWdZbkpsWVdSamNuVnRZbk1nWVdSa1pXUWdkRzhnWVc0Z1pYWmxiblF1SUVOaGJpQmlaU0J2ZG1WeWQzSnBkSFJsYmdvZ0tpQjNhWFJvSUh0QWJHbHVheUJQY0hScGIyNXpMbTFoZUVKeVpXRmtZM0oxYldKemZTNEtJQ292Q21OdmJuTjBJRVJGUmtGVlRGUmZRbEpGUVVSRFVsVk5RbE1nUFNBeE1EQTdDZ292S2lvS0lDb2dRR1JsY0hKbFkyRjBaV1FnVkdobElHQklkV0pnSUdOc1lYTnpJSGRwYkd3Z1ltVWdjbVZ0YjNabFpDQnBiaUIyWlhKemFXOXVJRGdnYjJZZ2RHaGxJRk5FU3lCcGJpQm1ZWFp2ZFhJZ2IyWWdZRk5qYjNCbFlDQmhibVFnWUVOc2FXVnVkR0FnYjJKcVpXTjBjeTRLSUNvS0lDb2dTV1lnZVc5MUlIQnlaWFpwYjNWemJIa2dkWE5sWkNCMGFHVWdZRWgxWW1BZ1kyeGhjM01nWkdseVpXTjBiSGtzSUhKbGNHeGhZMlVnYVhRZ2QybDBhQ0JnVTJOdmNHVmdJR0Z1WkNCZ1EyeHBaVzUwWUNCdlltcGxZM1J6TGlCTmIzSmxJR2x1Wm05eWJXRjBhVzl1T2dvZ0tpQXRJRnROZFd4MGFYQnNaU0JUWlc1MGNua2dTVzV6ZEdGdVkyVnpYU2hvZEhSd2N6b3ZMMlJ2WTNNdWMyVnVkSEo1TG1sdkwzQnNZWFJtYjNKdGN5OXFZWFpoYzJOeWFYQjBMMkpsYzNRdGNISmhZM1JwWTJWekwyMTFiSFJwY0d4bExYTmxiblJ5ZVMxcGJuTjBZVzVqWlhNdktRb2dLaUF0SUZ0Q2NtOTNjMlZ5SUVWNGRHVnVjMmx2Ym5OZEtHaDBkSEJ6T2k4dlpHOWpjeTV6Wlc1MGNua3VhVzh2Y0d4aGRHWnZjbTF6TDJwaGRtRnpZM0pwY0hRdlltVnpkQzF3Y21GamRHbGpaWE12WW5KdmQzTmxjaTFsZUhSbGJuTnBiMjV6THlrS0lDb0tJQ29nVTI5dFpTQnZaaUJ2ZFhJZ1FWQkpjeUJoY21VZ2RIbHdaV1FnZDJsMGFDQjBhR1VnU0hWaUlHTnNZWE56SUdsdWMzUmxZV1FnYjJZZ2RHaGxJR2x1ZEdWeVptRmpaU0FvWlM1bkxpQmdaMlYwUTNWeWNtVnVkRWgxWW1BcExpQk5iM04wSUc5bUlIUm9aVzBnWVhKbElHUmxjSEpsWTJGMFpXUUtJQ29nZEdobGJYTmxiSFpsY3lCaGJtUWdkMmxzYkNCaGJITnZJR0psSUhKbGJXOTJaV1FnYVc0Z2RtVnljMmx2YmlBNExpQk5iM0psSUdsdVptOXliV0YwYVc5dU9nb2dLaUF0SUZ0TmFXZHlZWFJwYjI0Z1IzVnBaR1ZkS0doMGRIQnpPaTh2WjJsMGFIVmlMbU52YlM5blpYUnpaVzUwY25rdmMyVnVkSEo1TFdwaGRtRnpZM0pwY0hRdllteHZZaTlrWlhabGJHOXdMMDFKUjFKQlZFbFBUaTV0WkNOa1pYQnlaV05oZEdVdGFIVmlLUW9nS2k4S0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHUmxjSEpsWTJGMGFXOXVMMlJsY0hKbFkyRjBhVzl1Q21Oc1lYTnpJRWgxWWlBZ2V3b2dJQzhxS2lCSmN5QmhJSHRBYkdsdWF5Qk1ZWGxsY24xYlhTQmpiMjUwWVdsdWFXNW5JSFJvWlNCamJHbGxiblFnWVc1a0lITmpiM0JsSUNvdkNnb2dJQzhxS2lCRGIyNTBZV2x1Y3lCMGFHVWdiR0Z6ZENCbGRtVnVkQ0JwWkNCdlppQmhJR05oY0hSMWNtVmtJR1YyWlc1MExpQWdLaThLQ2lBZ0x5b3FDaUFnSUNvZ1EzSmxZWFJsY3lCaElHNWxkeUJwYm5OMFlXNWpaU0J2WmlCMGFHVWdhSFZpTENCM2FXeHNJSEIxYzJnZ2IyNWxJSHRBYkdsdWF5Qk1ZWGxsY24wZ2FXNTBieUIwYUdVS0lDQWdLaUJwYm5SbGNtNWhiQ0J6ZEdGamF5QnZiaUJqY21WaGRHbHZiaTRLSUNBZ0tnb2dJQ0FxSUVCd1lYSmhiU0JqYkdsbGJuUWdZbTkxYm1RZ2RHOGdkR2hsSUdoMVlpNEtJQ0FnS2lCQWNHRnlZVzBnYzJOdmNHVWdZbTkxYm1RZ2RHOGdkR2hsSUdoMVlpNEtJQ0FnS2lCQWNHRnlZVzBnZG1WeWMybHZiaUJ1ZFcxaVpYSXNJR2hwWjJobGNpQnVkVzFpWlhJZ2JXVmhibk1nYUdsbmFHVnlJSEJ5YVc5eWFYUjVMZ29nSUNBcUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1NXNXpkR0Z1ZEdsaGRHbHZiaUJ2WmlCSWRXSWdiMkpxWldOMGN5QnBjeUJrWlhCeVpXTmhkR1ZrSUdGdVpDQjBhR1VnWTI5dWMzUnlkV04wYjNJZ2QybHNiQ0JpWlNCeVpXMXZkbVZrSUdsdUlIWmxjbk5wYjI0Z09DQnZaaUIwYUdVZ1UwUkxMZ29nSUNBcUNpQWdJQ29nU1dZZ2VXOTFJR0Z5WlNCamRYSnlaVzUwYkhrZ2RYTnBibWNnZEdobElFaDFZaUJtYjNJZ2JYVnNkR2t0WTJ4cFpXNTBJSFZ6WlNCc2FXdGxJSE52T2dvZ0lDQXFDaUFnSUNvZ1lHQmdDaUFnSUNvZ0x5OGdUMHhFQ2lBZ0lDb2dZMjl1YzNRZ2FIVmlJRDBnYm1WM0lFaDFZaWdwT3dvZ0lDQXFJR2gxWWk1aWFXNWtRMnhwWlc1MEtHTnNhV1Z1ZENrN0NpQWdJQ29nYldGclpVMWhhVzRvYUhWaUtRb2dJQ0FxSUdCZ1lBb2dJQ0FxQ2lBZ0lDb2dhVzV6ZEdWaFpDQnBibWwwYVdGc2FYcGxJSFJvWlNCamJHbGxiblFnWVhNZ1ptOXNiRzkzY3pvS0lDQWdLZ29nSUNBcUlHQmdZQW9nSUNBcUlDOHZJRTVGVndvZ0lDQXFJRk5sYm5SeWVTNTNhWFJvU1hOdmJHRjBhVzl1VTJOdmNHVW9LQ2tnUFQ0Z2V3b2dJQ0FxSUNBZ0lGTmxiblJ5ZVM1elpYUkRkWEp5Wlc1MFEyeHBaVzUwS0dOc2FXVnVkQ2s3Q2lBZ0lDb2dJQ0FnWTJ4cFpXNTBMbWx1YVhRb0tUc0tJQ0FnS2lCOUtUc0tJQ0FnS2lCZ1lHQUtJQ0FnS2dvZ0lDQXFJRWxtSUhsdmRTQmhjbVVnZFhOcGJtY2dkR2hsSUVoMVlpQjBieUJqWVhCMGRYSmxJR1YyWlc1MGN5QnNhV3RsSUhOdk9nb2dJQ0FxQ2lBZ0lDb2dZR0JnQ2lBZ0lDb2dMeThnVDB4RUNpQWdJQ29nWTI5dWMzUWdZMnhwWlc1MElEMGdibVYzSUVOc2FXVnVkQ2dwT3dvZ0lDQXFJR052Ym5OMElHaDFZaUE5SUc1bGR5QklkV0lvWTJ4cFpXNTBLVHNLSUNBZ0tpQm9kV0l1WTJGd2RIVnlaVVY0WTJWd2RHbHZiaWdwQ2lBZ0lDb2dZR0JnQ2lBZ0lDb0tJQ0FnS2lCcGJuTjBaV0ZrSUdOaGNIUjFjbVVnYVhOdmJHRjBaV1FnWlhabGJuUnpJR0Z6SUdadmJHeHZkM002Q2lBZ0lDb0tJQ0FnS2lCZ1lHQUtJQ0FnS2lBdkx5Qk9SVmNLSUNBZ0tpQmpiMjV6ZENCamJHbGxiblFnUFNCdVpYY2dRMnhwWlc1MEtDazdDaUFnSUNvZ1kyOXVjM1FnYzJOdmNHVWdQU0J1WlhjZ1UyTnZjR1VvS1RzS0lDQWdLaUJ6WTI5d1pTNXpaWFJEYkdsbGJuUW9ZMnhwWlc1MEtUc0tJQ0FnS2lCelkyOXdaUzVqWVhCMGRYSmxSWGhqWlhCMGFXOXVLQ2s3Q2lBZ0lDb2dZR0JnQ2lBZ0lDb3ZDaUFnSUdOdmJuTjBjblZqZEc5eUtBb2dJQ0FnWTJ4cFpXNTBMQW9nSUNBZ2MyTnZjR1VzQ2lBZ0lDQnBjMjlzWVhScGIyNVRZMjl3WlN3S0lDQWdJQ0FnWDNabGNuTnBiMjRnUFNCQlVFbGZWa1ZTVTBsUFRpd0tJQ0FwSUh0MGFHbHpMbDkyWlhKemFXOXVJRDBnWDNabGNuTnBiMjQ3Q2lBZ0lDQnNaWFFnWVhOemFXZHVaV1JUWTI5d1pUc0tJQ0FnSUdsbUlDZ2hjMk52Y0dVcElIc0tJQ0FnSUNBZ1lYTnphV2R1WldSVFkyOXdaU0E5SUc1bGR5QlRZMjl3WlNncE93b2dJQ0FnSUNCaGMzTnBaMjVsWkZOamIzQmxMbk5sZEVOc2FXVnVkQ2hqYkdsbGJuUXBPd29nSUNBZ2ZTQmxiSE5sSUhzS0lDQWdJQ0FnWVhOemFXZHVaV1JUWTI5d1pTQTlJSE5qYjNCbE93b2dJQ0FnZlFvS0lDQWdJR3hsZENCaGMzTnBaMjVsWkVsemIyeGhkR2x2YmxOamIzQmxPd29nSUNBZ2FXWWdLQ0ZwYzI5c1lYUnBiMjVUWTI5d1pTa2dld29nSUNBZ0lDQmhjM05wWjI1bFpFbHpiMnhoZEdsdmJsTmpiM0JsSUQwZ2JtVjNJRk5qYjNCbEtDazdDaUFnSUNBZ0lHRnpjMmxuYm1Wa1NYTnZiR0YwYVc5dVUyTnZjR1V1YzJWMFEyeHBaVzUwS0dOc2FXVnVkQ2s3Q2lBZ0lDQjlJR1ZzYzJVZ2V3b2dJQ0FnSUNCaGMzTnBaMjVsWkVsemIyeGhkR2x2YmxOamIzQmxJRDBnYVhOdmJHRjBhVzl1VTJOdmNHVTdDaUFnSUNCOUNnb2dJQ0FnZEdocGN5NWZjM1JoWTJzZ1BTQmJleUJ6WTI5d1pUb2dZWE56YVdkdVpXUlRZMjl3WlNCOVhUc0tDaUFnSUNCcFppQW9ZMnhwWlc1MEtTQjdDaUFnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lDQWdJQ0IwYUdsekxtSnBibVJEYkdsbGJuUW9ZMnhwWlc1MEtUc0tJQ0FnSUgwS0NpQWdJQ0IwYUdsekxsOXBjMjlzWVhScGIyNVRZMjl3WlNBOUlHRnpjMmxuYm1Wa1NYTnZiR0YwYVc5dVUyTnZjR1U3Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJEYUdWamEzTWdhV1lnZEdocGN5Qm9kV0luY3lCMlpYSnphVzl1SUdseklHOXNaR1Z5SUhSb1lXNGdkR2hsSUdkcGRtVnVJSFpsY25OcGIyNHVDaUFnSUNvS0lDQWdLaUJBY0dGeVlXMGdkbVZ5YzJsdmJpQkJJSFpsY25OcGIyNGdiblZ0WW1WeUlIUnZJR052YlhCaGNtVWdkRzh1Q2lBZ0lDb2dRSEpsZEhWeWJpQlVjblZsSUdsbUlIUm9aU0JuYVhabGJpQjJaWEp6YVc5dUlHbHpJRzVsZDJWeU95QnZkR2hsY25kcGMyVWdabUZzYzJVdUNpQWdJQ29LSUNBZ0tpQkFaR1Z3Y21WallYUmxaQ0JVYUdseklIZHBiR3dnWW1VZ2NtVnRiM1psWkNCcGJpQjJPQzRLSUNBZ0tpOEtJQ0FnYVhOUGJHUmxjbFJvWVc0b2RtVnljMmx2YmlrZ2V3b2dJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmxjbk5wYjI0Z1BDQjJaWEp6YVc5dU93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1ZHaHBjeUJpYVc1a2N5QjBhR1VnWjJsMlpXNGdZMnhwWlc1MElIUnZJSFJvWlNCamRYSnlaVzUwSUhOamIzQmxMZ29nSUNBcUlFQndZWEpoYlNCamJHbGxiblFnUVc0Z1UwUkxJR05zYVdWdWRDQW9ZMnhwWlc1MEtTQnBibk4wWVc1alpTNEtJQ0FnS2dvZ0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUZWelpTQmdhVzVwZEVGdVpFSnBibVFvS1dBZ1pHbHlaV04wYkhrc0lHOXlJR0J6WlhSRGRYSnlaVzUwUTJ4cFpXNTBLQ2xnSUdGdVpDOXZjaUJnWTJ4cFpXNTBMbWx1YVhRb0tXQWdhVzV6ZEdWaFpDNEtJQ0FnS2k4S0lDQWdZbWx1WkVOc2FXVnVkQ2hqYkdsbGJuUXBJSHNLSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lDQWdZMjl1YzNRZ2RHOXdJRDBnZEdocGN5NW5aWFJUZEdGamExUnZjQ2dwT3dvZ0lDQWdkRzl3TG1Oc2FXVnVkQ0E5SUdOc2FXVnVkRHNLSUNBZ0lIUnZjQzV6WTI5d1pTNXpaWFJEYkdsbGJuUW9ZMnhwWlc1MEtUc0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ2FXWWdLR05zYVdWdWRDQW1KaUJqYkdsbGJuUXVjMlYwZFhCSmJuUmxaM0poZEdsdmJuTXBJSHNLSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0FnSUdOc2FXVnVkQzV6WlhSMWNFbHVkR1ZuY21GMGFXOXVjeWdwT3dvZ0lDQWdmUW9nSUgwS0NpQWdMeW9xQ2lBZ0lDb2dRR2x1YUdWeWFYUkViMk1LSUNBZ0tnb2dJQ0FxSUVCa1pYQnlaV05oZEdWa0lGVnpaU0JnZDJsMGFGTmpiM0JsWUNCcGJuTjBaV0ZrTGdvZ0lDQXFMd29nSUNCd2RYTm9VMk52Y0dVb0tTQjdDaUFnSUNBdkx5QlhaU0IzWVc1MElIUnZJR05zYjI1bElIUm9aU0JqYjI1MFpXNTBJRzltSUhCeVpYWWdjMk52Y0dVS0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnWTI5dWMzUWdjMk52Y0dVZ1BTQjBhR2x6TG1kbGRGTmpiM0JsS0NrdVkyeHZibVVvS1RzS0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnZEdocGN5NW5aWFJUZEdGamF5Z3BMbkIxYzJnb2V3b2dJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1pHVndjbVZqWVhScGIyNHZaR1Z3Y21WallYUnBiMjRLSUNBZ0lDQWdZMnhwWlc1ME9pQjBhR2x6TG1kbGRFTnNhV1Z1ZENncExBb2dJQ0FnSUNCelkyOXdaU3dLSUNBZ0lIMHBPd29nSUNBZ2NtVjBkWEp1SUhOamIzQmxPd29nSUgwS0NpQWdMeW9xQ2lBZ0lDb2dRR2x1YUdWeWFYUkViMk1LSUNBZ0tnb2dJQ0FxSUVCa1pYQnlaV05oZEdWa0lGVnpaU0JnZDJsMGFGTmpiM0JsWUNCcGJuTjBaV0ZrTGdvZ0lDQXFMd29nSUNCd2IzQlRZMjl3WlNncElIc0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ2FXWWdLSFJvYVhNdVoyVjBVM1JoWTJzb0tTNXNaVzVuZEdnZ1BEMGdNU2tnY21WMGRYSnVJR1poYkhObE93b2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnSUNCeVpYUjFjbTRnSVNGMGFHbHpMbWRsZEZOMFlXTnJLQ2t1Y0c5d0tDazdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZYTmxJR0JUWlc1MGNua3VkMmwwYUZOamIzQmxLQ2xnSUdsdWMzUmxZV1F1Q2lBZ0lDb3ZDaUFnSUhkcGRHaFRZMjl3WlNoallXeHNZbUZqYXlrZ2V3b2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnSUNCamIyNXpkQ0J6WTI5d1pTQTlJSFJvYVhNdWNIVnphRk5qYjNCbEtDazdDZ29nSUNBZ2JHVjBJRzFoZVdKbFVISnZiV2x6WlZKbGMzVnNkRHNLSUNBZ0lIUnllU0I3Q2lBZ0lDQWdJRzFoZVdKbFVISnZiV2x6WlZKbGMzVnNkQ0E5SUdOaGJHeGlZV05yS0hOamIzQmxLVHNLSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHNLSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0FnSUhSb2FYTXVjRzl3VTJOdmNHVW9LVHNLSUNBZ0lDQWdkR2h5YjNjZ1pUc0tJQ0FnSUgwS0NpQWdJQ0JwWmlBb2FYTlVhR1Z1WVdKc1pTaHRZWGxpWlZCeWIyMXBjMlZTWlhOMWJIUXBLU0I3Q2lBZ0lDQWdJQzh2SUVCMGN5MWxlSEJsWTNRdFpYSnliM0lnTFNCcGMxUm9aVzVoWW14bElISmxkSFZ5Ym5NZ2RHaGxJSGR5YjI1bklIUjVjR1VLSUNBZ0lDQWdjbVYwZFhKdUlHMWhlV0psVUhKdmJXbHpaVkpsYzNWc2RDNTBhR1Z1S0FvZ0lDQWdJQ0FnSUhKbGN5QTlQaUI3Q2lBZ0lDQWdJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1pHVndjbVZqWVhScGIyNHZaR1Z3Y21WallYUnBiMjRLSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjRzl3VTJOdmNHVW9LVHNLSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhNN0NpQWdJQ0FnSUNBZ2ZTd0tJQ0FnSUNBZ0lDQmxJRDArSUhzS0lDQWdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV3YjNCVFkyOXdaU2dwT3dvZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnWlRzS0lDQWdJQ0FnSUNCOUxBb2dJQ0FnSUNBcE93b2dJQ0FnZlFvS0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnZEdocGN5NXdiM0JUWTI5d1pTZ3BPd29nSUNBZ2NtVjBkWEp1SUcxaGVXSmxVSEp2YldselpWSmxjM1ZzZERzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUVCcGJtaGxjbWwwUkc5akNpQWdJQ29LSUNBZ0tpQkFaR1Z3Y21WallYUmxaQ0JWYzJVZ1lGTmxiblJ5ZVM1blpYUkRiR2xsYm5Rb0tXQWdhVzV6ZEdWaFpDNEtJQ0FnS2k4S0lDQWdaMlYwUTJ4cFpXNTBLQ2tnZXdvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1blpYUlRkR0ZqYTFSdmNDZ3BMbU5zYVdWdWRDQTdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQlNaWFIxY201eklIUm9aU0J6WTI5d1pTQnZaaUIwYUdVZ2RHOXdJSE4wWVdOckxnb2dJQ0FxQ2lBZ0lDb2dRR1JsY0hKbFkyRjBaV1FnVlhObElHQlRaVzUwY25rdVoyVjBRM1Z5Y21WdWRGTmpiM0JsS0NsZ0lHbHVjM1JsWVdRdUNpQWdJQ292Q2lBZ0lHZGxkRk5qYjNCbEtDa2dld29nSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHUmxjSEpsWTJGMGFXOXVMMlJsY0hKbFkyRjBhVzl1Q2lBZ0lDQnlaWFIxY200Z2RHaHBjeTVuWlhSVGRHRmphMVJ2Y0NncExuTmpiM0JsT3dvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZYTmxJR0JUWlc1MGNua3VaMlYwU1hOdmJHRjBhVzl1VTJOdmNHVW9LV0FnYVc1emRHVmhaQzRLSUNBZ0tpOEtJQ0FnWjJWMFNYTnZiR0YwYVc5dVUyTnZjR1VvS1NCN0NpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmFYTnZiR0YwYVc5dVUyTnZjR1U3Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJTWlhSMWNtNXpJSFJvWlNCelkyOXdaU0J6ZEdGamF5Qm1iM0lnWkc5dFlXbHVjeUJ2Y2lCMGFHVWdjSEp2WTJWemN5NEtJQ0FnS2lCQVpHVndjbVZqWVhSbFpDQlVhR2x6SUhkcGJHd2dZbVVnY21WdGIzWmxaQ0JwYmlCMk9DNEtJQ0FnS2k4S0lDQWdaMlYwVTNSaFkyc29LU0I3Q2lBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYzNSaFkyczdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQlNaWFIxY201eklIUm9aU0IwYjNCdGIzTjBJSE5qYjNCbElHeGhlV1Z5SUdsdUlIUm9aU0J2Y21SbGNpQmtiMjFoYVc0Z1BpQnNiMk5oYkNBK0lIQnliMk5sYzNNdUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZHaHBjeUIzYVd4c0lHSmxJSEpsYlc5MlpXUWdhVzRnZGpndUNpQWdJQ292Q2lBZ0lHZGxkRk4wWVdOclZHOXdLQ2tnZXdvZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDNOMFlXTnJXM1JvYVhNdVgzTjBZV05yTG14bGJtZDBhQ0F0SURGZE93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2dvZ0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUZWelpTQmdVMlZ1ZEhKNUxtTmhjSFIxY21WRmVHTmxjSFJwYjI0b0tXQWdhVzV6ZEdWaFpDNEtJQ0FnS2k4S0lDQWdZMkZ3ZEhWeVpVVjRZMlZ3ZEdsdmJpaGxlR05sY0hScGIyNHNJR2hwYm5RcElIc0tJQ0FnSUdOdmJuTjBJR1YyWlc1MFNXUWdQU0FvZEdocGN5NWZiR0Z6ZEVWMlpXNTBTV1FnUFNCb2FXNTBJQ1ltSUdocGJuUXVaWFpsYm5SZmFXUWdQeUJvYVc1MExtVjJaVzUwWDJsa0lEb2dkWFZwWkRRb0tTazdDaUFnSUNCamIyNXpkQ0J6ZVc1MGFHVjBhV05GZUdObGNIUnBiMjRnUFNCdVpYY2dSWEp5YjNJb0oxTmxiblJ5ZVNCemVXNTBhR1YwYVdORmVHTmxjSFJwYjI0bktUc0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ2RHaHBjeTVuWlhSVFkyOXdaU2dwTG1OaGNIUjFjbVZGZUdObGNIUnBiMjRvWlhoalpYQjBhVzl1TENCN0NpQWdJQ0FnSUc5eWFXZHBibUZzUlhoalpYQjBhVzl1T2lCbGVHTmxjSFJwYjI0c0NpQWdJQ0FnSUhONWJuUm9aWFJwWTBWNFkyVndkR2x2Yml3S0lDQWdJQ0FnTGk0dWFHbHVkQ3dLSUNBZ0lDQWdaWFpsYm5SZmFXUTZJR1YyWlc1MFNXUXNDaUFnSUNCOUtUc0tDaUFnSUNCeVpYUjFjbTRnWlhabGJuUkpaRHNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRUJwYm1obGNtbDBSRzlqQ2lBZ0lDb0tJQ0FnS2lCQVpHVndjbVZqWVhSbFpDQlZjMlVnSUdCVFpXNTBjbmt1WTJGd2RIVnlaVTFsYzNOaFoyVW9LV0FnYVc1emRHVmhaQzRLSUNBZ0tpOEtJQ0FnWTJGd2RIVnlaVTFsYzNOaFoyVW9DaUFnSUNCdFpYTnpZV2RsTEFvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0JzWlhabGJDd0tJQ0FnSUdocGJuUXNDaUFnS1NCN0NpQWdJQ0JqYjI1emRDQmxkbVZ1ZEVsa0lEMGdLSFJvYVhNdVgyeGhjM1JGZG1WdWRFbGtJRDBnYUdsdWRDQW1KaUJvYVc1MExtVjJaVzUwWDJsa0lEOGdhR2x1ZEM1bGRtVnVkRjlwWkNBNklIVjFhV1EwS0NrcE93b2dJQ0FnWTI5dWMzUWdjM2x1ZEdobGRHbGpSWGhqWlhCMGFXOXVJRDBnYm1WM0lFVnljbTl5S0cxbGMzTmhaMlVwT3dvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0IwYUdsekxtZGxkRk5qYjNCbEtDa3VZMkZ3ZEhWeVpVMWxjM05oWjJVb2JXVnpjMkZuWlN3Z2JHVjJaV3dzSUhzS0lDQWdJQ0FnYjNKcFoybHVZV3hGZUdObGNIUnBiMjQ2SUcxbGMzTmhaMlVzQ2lBZ0lDQWdJSE41Ym5Sb1pYUnBZMFY0WTJWd2RHbHZiaXdLSUNBZ0lDQWdMaTR1YUdsdWRDd0tJQ0FnSUNBZ1pYWmxiblJmYVdRNklHVjJaVzUwU1dRc0NpQWdJQ0I5S1RzS0NpQWdJQ0J5WlhSMWNtNGdaWFpsYm5SSlpEc0tJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlFQnBibWhsY21sMFJHOWpDaUFnSUNvS0lDQWdLaUJBWkdWd2NtVmpZWFJsWkNCVmMyVWdZRk5sYm5SeWVTNWpZWEIwZFhKbFJYWmxiblFvS1dBZ2FXNXpkR1ZoWkM0S0lDQWdLaThLSUNBZ1kyRndkSFZ5WlVWMlpXNTBLR1YyWlc1MExDQm9hVzUwS1NCN0NpQWdJQ0JqYjI1emRDQmxkbVZ1ZEVsa0lEMGdhR2x1ZENBbUppQm9hVzUwTG1WMlpXNTBYMmxrSUQ4Z2FHbHVkQzVsZG1WdWRGOXBaQ0E2SUhWMWFXUTBLQ2s3Q2lBZ0lDQnBaaUFvSVdWMlpXNTBMblI1Y0dVcElIc0tJQ0FnSUNBZ2RHaHBjeTVmYkdGemRFVjJaVzUwU1dRZ1BTQmxkbVZ1ZEVsa093b2dJQ0FnZlFvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0IwYUdsekxtZGxkRk5qYjNCbEtDa3VZMkZ3ZEhWeVpVVjJaVzUwS0dWMlpXNTBMQ0I3SUM0dUxtaHBiblFzSUdWMlpXNTBYMmxrT2lCbGRtVnVkRWxrSUgwcE93b2dJQ0FnY21WMGRYSnVJR1YyWlc1MFNXUTdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZHaHBjeUIzYVd4c0lHSmxJSEpsYlc5MlpXUWdhVzRnZGpndUNpQWdJQ292Q2lBZ0lHeGhjM1JGZG1WdWRFbGtLQ2tnZXdvZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDJ4aGMzUkZkbVZ1ZEVsa093b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2dvZ0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUZWelpTQmdVMlZ1ZEhKNUxtRmtaRUp5WldGa1kzSjFiV0lvS1dBZ2FXNXpkR1ZoWkM0S0lDQWdLaThLSUNBZ1lXUmtRbkpsWVdSamNuVnRZaWhpY21WaFpHTnlkVzFpTENCb2FXNTBLU0I3Q2lBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdaR1Z3Y21WallYUnBiMjR2WkdWd2NtVmpZWFJwYjI0S0lDQWdJR052Ym5OMElIc2djMk52Y0dVc0lHTnNhV1Z1ZENCOUlEMGdkR2hwY3k1blpYUlRkR0ZqYTFSdmNDZ3BPd29LSUNBZ0lHbG1JQ2doWTJ4cFpXNTBLU0J5WlhSMWNtNDdDZ29nSUNBZ1kyOXVjM1FnZXlCaVpXWnZjbVZDY21WaFpHTnlkVzFpSUQwZ2JuVnNiQ3dnYldGNFFuSmxZV1JqY25WdFluTWdQU0JFUlVaQlZVeFVYMEpTUlVGRVExSlZUVUpUSUgwZ1BRb2dJQ0FnSUNBb1kyeHBaVzUwTG1kbGRFOXdkR2x2Ym5NZ0ppWWdZMnhwWlc1MExtZGxkRTl3ZEdsdmJuTW9LU2tnZkh3Z2UzMDdDZ29nSUNBZ2FXWWdLRzFoZUVKeVpXRmtZM0oxYldKeklEdzlJREFwSUhKbGRIVnlianNLQ2lBZ0lDQmpiMjV6ZENCMGFXMWxjM1JoYlhBZ1BTQmtZWFJsVkdsdFpYTjBZVzF3U1c1VFpXTnZibVJ6S0NrN0NpQWdJQ0JqYjI1emRDQnRaWEpuWldSQ2NtVmhaR055ZFcxaUlEMGdleUIwYVcxbGMzUmhiWEFzSUM0dUxtSnlaV0ZrWTNKMWJXSWdmVHNLSUNBZ0lHTnZibk4wSUdacGJtRnNRbkpsWVdSamNuVnRZaUE5SUdKbFptOXlaVUp5WldGa1kzSjFiV0lLSUNBZ0lDQWdQeUFvWTI5dWMyOXNaVk5oYm1SaWIzZ29LQ2tnUFQ0Z1ltVm1iM0psUW5KbFlXUmpjblZ0WWlodFpYSm5aV1JDY21WaFpHTnlkVzFpTENCb2FXNTBLU2tnS1FvZ0lDQWdJQ0E2SUcxbGNtZGxaRUp5WldGa1kzSjFiV0k3Q2dvZ0lDQWdhV1lnS0dacGJtRnNRbkpsWVdSamNuVnRZaUE5UFQwZ2JuVnNiQ2tnY21WMGRYSnVPd29LSUNBZ0lHbG1JQ2hqYkdsbGJuUXVaVzFwZENrZ2V3b2dJQ0FnSUNCamJHbGxiblF1WlcxcGRDZ25ZbVZtYjNKbFFXUmtRbkpsWVdSamNuVnRZaWNzSUdacGJtRnNRbkpsWVdSamNuVnRZaXdnYUdsdWRDazdDaUFnSUNCOUNnb2dJQ0FnTHk4Z1ZFOUVUeWgyT0NrNklFa2dhMjV2ZHlCMGFHbHpJR052YlcxbGJuUWdaRzlsYzI0bmRDQnRZV3RsSUcxMVkyZ2djMlZ1YzJVZ1ltVmpZWFZ6WlNCMGFHVWdhSFZpSUhkcGJHd2dZbVVnWkdWd2NtVmpZWFJsWkNCaWRYUWdTU0J6ZEdsc2JDQjNZVzUwWldRZ2RHOEtJQ0FnSUM4dklIZHlhWFJsSUdsMElHUnZkMjR1SUVsdUlIUm9aVzl5ZVN3Z2QyVWdkMjkxYkdRZ2FHRjJaU0IwYnlCaFpHUWdkR2hsSUdKeVpXRmtZM0oxYldKeklIUnZJSFJvWlNCcGMyOXNZWFJwYjI0Z2MyTnZjR1VnYUdWeVpTd2dhRzkzWlhabGNpd2dkR2hoZENCM2IzVnNaQW9nSUNBZ0x5OGdaSFZ3YkdsallYUmxJR0ZzYkNCdlppQjBhR1VnWW5KbFlXUmpjblZ0WW5NdUlGUm9aWEpsSUhkaGN5QjBhR1VnY0c5emMybGlhV3hwZEhrZ2IyWWdZV1JrYVc1bklHSnlaV0ZrWTNKMWJXSnpJSFJ2SUdKdmRHZ3NJSFJvWlNCcGMyOXNZWFJwYjI0Z2MyTnZjR1VLSUNBZ0lDOHZJR0Z1WkNCMGFHVWdibTl5YldGc0lITmpiM0JsTENCaGJtUWdaR1ZrZFhCc2FXTmhkR2x1WnlCcGRDQmtiM2R1SUhSb1pTQnNhVzVsSUdsdUlIUm9aU0JsZG1WdWRDQndjbTlqWlhOemFXNW5JSEJwY0dWc2FXNWxMaUJJYjNkbGRtVnlMQ0IwYUdGMElIZHZkV3hrQ2lBZ0lDQXZMeUJvWVhabElHSmxaVzRnZG1WeWVTQm1jbUZuYVd4bExDQmlaV05oZFhObElIUm9aU0JpY21WaFpHTnlkVzFpSUc5aWFtVmpkSE1nZDI5MWJHUWdhR0YyWlNCdVpXVmtaV1FnZEc4Z2EyVmxjQ0IwYUdWcGNpQnBaR1Z1ZEdsMGVTQmhiR3dnZEdoeWIzVm5hRzkxZEFvZ0lDQWdMeThnZEdobElHVjJaVzUwSUhCeWIyTmxjM05wYm1jZ2NHbHdaV3hwYm1VdUNpQWdJQ0F2THlCSmJpQjBhR1VnYm1WM0lHbHRjR3hsYldWdWRHRjBhVzl1TENCMGFHVWdkRzl3SUd4bGRtVnNJR0JUWlc1MGNua3VZV1JrUW5KbFlXUmpjblZ0WWlncFlDQnphRzkxYkdRZ1QwNU1XU0IzY21sMFpTQjBieUIwYUdVZ2FYTnZiR0YwYVc5dUlITmpiM0JsTGdvS0lDQWdJSE5qYjNCbExtRmtaRUp5WldGa1kzSjFiV0lvWm1sdVlXeENjbVZoWkdOeWRXMWlMQ0J0WVhoQ2NtVmhaR055ZFcxaWN5azdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUlFQmtaWEJ5WldOaGRHVmtJRlZ6WlNCZ1UyVnVkSEo1TG5ObGRGVnpaWElvS1dBZ2FXNXpkR1ZoWkM0S0lDQWdLaThLSUNBZ2MyVjBWWE5sY2loMWMyVnlLU0I3Q2lBZ0lDQXZMeUJVVDBSUEtIWTRLVG9nVkdobElIUnZjQ0JzWlhabGJDQmdVMlZ1ZEhKNUxuTmxkRlZ6WlhJb0tXQWdablZ1WTNScGIyNGdjMmh2ZFd4a0lIZHlhWFJsSUU5T1RGa2dkRzhnZEdobElHbHpiMnhoZEdsdmJpQnpZMjl3WlM0S0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnZEdocGN5NW5aWFJUWTI5d1pTZ3BMbk5sZEZWelpYSW9kWE5sY2lrN0NpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnWkdWd2NtVmpZWFJwYjI0dlpHVndjbVZqWVhScGIyNEtJQ0FnSUhSb2FYTXVaMlYwU1hOdmJHRjBhVzl1VTJOdmNHVW9LUzV6WlhSVmMyVnlLSFZ6WlhJcE93b2dJSDBLQ2lBZ0x5b3FDaUFnSUNvZ1FHbHVhR1Z5YVhSRWIyTUtJQ0FnS2lCQVpHVndjbVZqWVhSbFpDQlZjMlVnWUZObGJuUnllUzV6WlhSVVlXZHpLQ2xnSUdsdWMzUmxZV1F1Q2lBZ0lDb3ZDaUFnSUhObGRGUmhaM01vZEdGbmN5a2dld29nSUNBZ0x5OGdWRTlFVHloMk9DazZJRlJvWlNCMGIzQWdiR1YyWld3Z1lGTmxiblJ5ZVM1elpYUlVZV2R6S0NsZ0lHWjFibU4wYVc5dUlITm9iM1ZzWkNCM2NtbDBaU0JQVGt4WklIUnZJSFJvWlNCcGMyOXNZWFJwYjI0Z2MyTnZjR1V1Q2lBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdaR1Z3Y21WallYUnBiMjR2WkdWd2NtVmpZWFJwYjI0S0lDQWdJSFJvYVhNdVoyVjBVMk52Y0dVb0tTNXpaWFJVWVdkektIUmhaM01wT3dvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0IwYUdsekxtZGxkRWx6YjJ4aGRHbHZibE5qYjNCbEtDa3VjMlYwVkdGbmN5aDBZV2R6S1RzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUVCcGJtaGxjbWwwUkc5akNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZYTmxJR0JUWlc1MGNua3VjMlYwUlhoMGNtRnpLQ2xnSUdsdWMzUmxZV1F1Q2lBZ0lDb3ZDaUFnSUhObGRFVjRkSEpoY3lobGVIUnlZWE1wSUhzS0lDQWdJQzh2SUZSUFJFOG9kamdwT2lCVWFHVWdkRzl3SUd4bGRtVnNJR0JUWlc1MGNua3VjMlYwUlhoMGNtRnpLQ2xnSUdaMWJtTjBhVzl1SUhOb2IzVnNaQ0IzY21sMFpTQlBUa3haSUhSdklIUm9aU0JwYzI5c1lYUnBiMjRnYzJOdmNHVXVDaUFnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1pHVndjbVZqWVhScGIyNHZaR1Z3Y21WallYUnBiMjRLSUNBZ0lIUm9hWE11WjJWMFUyTnZjR1VvS1M1elpYUkZlSFJ5WVhNb1pYaDBjbUZ6S1RzS0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnZEdocGN5NW5aWFJKYzI5c1lYUnBiMjVUWTI5d1pTZ3BMbk5sZEVWNGRISmhjeWhsZUhSeVlYTXBPd29nSUgwS0NpQWdMeW9xQ2lBZ0lDb2dRR2x1YUdWeWFYUkViMk1LSUNBZ0tpQkFaR1Z3Y21WallYUmxaQ0JWYzJVZ1lGTmxiblJ5ZVM1elpYUlVZV2NvS1dBZ2FXNXpkR1ZoWkM0S0lDQWdLaThLSUNBZ2MyVjBWR0ZuS0d0bGVTd2dkbUZzZFdVcElIc0tJQ0FnSUM4dklGUlBSRThvZGpncE9pQlVhR1VnZEc5d0lHeGxkbVZzSUdCVFpXNTBjbmt1YzJWMFZHRm5LQ2xnSUdaMWJtTjBhVzl1SUhOb2IzVnNaQ0IzY21sMFpTQlBUa3haSUhSdklIUm9aU0JwYzI5c1lYUnBiMjRnYzJOdmNHVXVDaUFnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1pHVndjbVZqWVhScGIyNHZaR1Z3Y21WallYUnBiMjRLSUNBZ0lIUm9hWE11WjJWMFUyTnZjR1VvS1M1elpYUlVZV2NvYTJWNUxDQjJZV3gxWlNrN0NpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnWkdWd2NtVmpZWFJwYjI0dlpHVndjbVZqWVhScGIyNEtJQ0FnSUhSb2FYTXVaMlYwU1hOdmJHRjBhVzl1VTJOdmNHVW9LUzV6WlhSVVlXY29hMlY1TENCMllXeDFaU2s3Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJBYVc1b1pYSnBkRVJ2WXdvZ0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUZWelpTQmdVMlZ1ZEhKNUxuTmxkRVY0ZEhKaEtDbGdJR2x1YzNSbFlXUXVDaUFnSUNvdkNpQWdJSE5sZEVWNGRISmhLR3RsZVN3Z1pYaDBjbUVwSUhzS0lDQWdJQzh2SUZSUFJFOG9kamdwT2lCVWFHVWdkRzl3SUd4bGRtVnNJR0JUWlc1MGNua3VjMlYwUlhoMGNtRW9LV0FnWm5WdVkzUnBiMjRnYzJodmRXeGtJSGR5YVhSbElFOU9URmtnZEc4Z2RHaGxJR2x6YjJ4aGRHbHZiaUJ6WTI5d1pTNEtJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ2RHaHBjeTVuWlhSVFkyOXdaU2dwTG5ObGRFVjRkSEpoS0d0bGVTd2daWGgwY21FcE93b2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnSUNCMGFHbHpMbWRsZEVsemIyeGhkR2x2YmxOamIzQmxLQ2t1YzJWMFJYaDBjbUVvYTJWNUxDQmxlSFJ5WVNrN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCQWFXNW9aWEpwZEVSdll3b2dJQ0FxSUVCa1pYQnlaV05oZEdWa0lGVnpaU0JnVTJWdWRISjVMbk5sZEVOdmJuUmxlSFFvS1dBZ2FXNXpkR1ZoWkM0S0lDQWdLaThLSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMV1Y0Y0d4cFkybDBMV0Z1ZVFvZ0lDQnpaWFJEYjI1MFpYaDBLRzVoYldVc0lHTnZiblJsZUhRcElIc0tJQ0FnSUM4dklGUlBSRThvZGpncE9pQlVhR1VnZEc5d0lHeGxkbVZzSUdCVFpXNTBjbmt1YzJWMFEyOXVkR1Y0ZENncFlDQm1kVzVqZEdsdmJpQnphRzkxYkdRZ2QzSnBkR1VnVDA1TVdTQjBieUIwYUdVZ2FYTnZiR0YwYVc5dUlITmpiM0JsTGdvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0IwYUdsekxtZGxkRk5qYjNCbEtDa3VjMlYwUTI5dWRHVjRkQ2h1WVcxbExDQmpiMjUwWlhoMEtUc0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ2RHaHBjeTVuWlhSSmMyOXNZWFJwYjI1VFkyOXdaU2dwTG5ObGRFTnZiblJsZUhRb2JtRnRaU3dnWTI5dWRHVjRkQ2s3Q2lBZ2ZRb0tJQ0F2S2lvS0lDQWdLaUJBYVc1b1pYSnBkRVJ2WXdvZ0lDQXFDaUFnSUNvZ1FHUmxjSEpsWTJGMFpXUWdWWE5sSUdCblpYUlRZMjl3WlNncFlDQmthWEpsWTNSc2VTNEtJQ0FnS2k4S0lDQWdZMjl1Wm1sbmRYSmxVMk52Y0dVb1kyRnNiR0poWTJzcElIc0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ1kyOXVjM1FnZXlCelkyOXdaU3dnWTJ4cFpXNTBJSDBnUFNCMGFHbHpMbWRsZEZOMFlXTnJWRzl3S0NrN0NpQWdJQ0JwWmlBb1kyeHBaVzUwS1NCN0NpQWdJQ0FnSUdOaGJHeGlZV05yS0hOamIzQmxLVHNLSUNBZ0lIMEtJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlFQnBibWhsY21sMFJHOWpDaUFnSUNvdkNpQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJSEoxYmloallXeHNZbUZqYXlrZ2V3b2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnSUNCamIyNXpkQ0J2YkdSSWRXSWdQU0J0WVd0bFRXRnBiaWgwYUdsektUc0tJQ0FnSUhSeWVTQjdDaUFnSUNBZ0lHTmhiR3hpWVdOcktIUm9hWE1wT3dvZ0lDQWdmU0JtYVc1aGJHeDVJSHNLSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0FnSUcxaGEyVk5ZV2x1S0c5c1pFaDFZaWs3Q2lBZ0lDQjlDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUlFQmtaWEJ5WldOaGRHVmtJRlZ6WlNCZ1UyVnVkSEo1TG1kbGRFTnNhV1Z1ZENncExtZGxkRWx1ZEdWbmNtRjBhVzl1UW5sT1lXMWxLQ2xnSUdsdWMzUmxZV1F1Q2lBZ0lDb3ZDaUFnSUdkbGRFbHVkR1ZuY21GMGFXOXVLR2x1ZEdWbmNtRjBhVzl1S1NCN0NpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnWkdWd2NtVmpZWFJwYjI0dlpHVndjbVZqWVhScGIyNEtJQ0FnSUdOdmJuTjBJR05zYVdWdWRDQTlJSFJvYVhNdVoyVjBRMnhwWlc1MEtDazdDaUFnSUNCcFppQW9JV05zYVdWdWRDa2djbVYwZFhKdUlHNTFiR3c3Q2lBZ0lDQjBjbmtnZXdvZ0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnWkdWd2NtVmpZWFJwYjI0dlpHVndjbVZqWVhScGIyNEtJQ0FnSUNBZ2NtVjBkWEp1SUdOc2FXVnVkQzVuWlhSSmJuUmxaM0poZEdsdmJpaHBiblJsWjNKaGRHbHZiaWs3Q2lBZ0lDQjlJR05oZEdOb0lDaGZiMDhwSUhzS0lDQWdJQ0FnUkVWQ1ZVZGZRbFZKVEVRZ0ppWWdiRzluWjJWeUxuZGhjbTRvWUVOaGJtNXZkQ0J5WlhSeWFXVjJaU0JwYm5SbFozSmhkR2x2YmlBa2UybHVkR1ZuY21GMGFXOXVMbWxrZlNCbWNtOXRJSFJvWlNCamRYSnlaVzUwSUVoMVltQXBPd29nSUNBZ0lDQnlaWFIxY200Z2JuVnNiRHNLSUNBZ0lIMEtJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlGTjBZWEowY3lCaElHNWxkeUJnVkhKaGJuTmhZM1JwYjI1Z0lHRnVaQ0J5WlhSMWNtNXpJR2wwTGlCVWFHbHpJR2x6SUhSb1pTQmxiblJ5ZVNCd2IybHVkQ0IwYnlCdFlXNTFZV3dnZEhKaFkybHVaeUJwYm5OMGNuVnRaVzUwWVhScGIyNHVDaUFnSUNvS0lDQWdLaUJCSUhSeVpXVWdjM1J5ZFdOMGRYSmxJR05oYmlCaVpTQmlkV2xzZENCaWVTQmhaR1JwYm1jZ1kyaHBiR1FnYzNCaGJuTWdkRzhnZEdobElIUnlZVzV6WVdOMGFXOXVMQ0JoYm1RZ1kyaHBiR1FnYzNCaGJuTWdkRzhnYjNSb1pYSWdjM0JoYm5NdUlGUnZJSE4wWVhKMElHRUtJQ0FnS2lCdVpYY2dZMmhwYkdRZ2MzQmhiaUIzYVhSb2FXNGdkR2hsSUhSeVlXNXpZV04wYVc5dUlHOXlJR0Z1ZVNCemNHRnVMQ0JqWVd4c0lIUm9aU0J5WlhOd1pXTjBhWFpsSUdBdWMzUmhjblJEYUdsc1pDZ3BZQ0J0WlhSb2IyUXVDaUFnSUNvS0lDQWdLaUJGZG1WeWVTQmphR2xzWkNCemNHRnVJRzExYzNRZ1ltVWdabWx1YVhOb1pXUWdZbVZtYjNKbElIUm9aU0IwY21GdWMyRmpkR2x2YmlCcGN5Qm1hVzVwYzJobFpDd2diM1JvWlhKM2FYTmxJSFJvWlNCMWJtWnBibWx6YUdWa0lITndZVzV6SUdGeVpTQmthWE5qWVhKa1pXUXVDaUFnSUNvS0lDQWdLaUJVYUdVZ2RISmhibk5oWTNScGIyNGdiWFZ6ZENCaVpTQm1hVzVwYzJobFpDQjNhWFJvSUdFZ1kyRnNiQ0IwYnlCcGRITWdZQzVsYm1Rb0tXQWdiV1YwYUc5a0xDQmhkQ0IzYUdsamFDQndiMmx1ZENCMGFHVWdkSEpoYm5OaFkzUnBiMjRnZDJsMGFDQmhiR3dnYVhSekNpQWdJQ29nWm1sdWFYTm9aV1FnWTJocGJHUWdjM0JoYm5NZ2QybHNiQ0JpWlNCelpXNTBJSFJ2SUZObGJuUnllUzRLSUNBZ0tnb2dJQ0FxSUVCd1lYSmhiU0JqYjI1MFpYaDBJRkJ5YjNCbGNuUnBaWE1nYjJZZ2RHaGxJRzVsZHlCZ1ZISmhibk5oWTNScGIyNWdMZ29nSUNBcUlFQndZWEpoYlNCamRYTjBiMjFUWVcxd2JHbHVaME52Ym5SbGVIUWdTVzVtYjNKdFlYUnBiMjRnWjJsMlpXNGdkRzhnZEdobElIUnlZVzV6WVdOMGFXOXVJSE5oYlhCc2FXNW5JR1oxYm1OMGFXOXVJQ2hoYkc5dVp5QjNhWFJvSUdOdmJuUmxlSFF0WkdWd1pXNWtaVzUwQ2lBZ0lDb2daR1ZtWVhWc2RDQjJZV3gxWlhNcExpQlRaV1VnZTBCc2FXNXJJRTl3ZEdsdmJuTXVkSEpoWTJWelUyRnRjR3hsY24wdUNpQWdJQ29LSUNBZ0tpQkFjbVYwZFhKdWN5QlVhR1VnZEhKaGJuTmhZM1JwYjI0Z2QyaHBZMmdnZDJGeklHcDFjM1FnYzNSaGNuUmxaQW9nSUNBcUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZYTmxJR0J6ZEdGeWRGTndZVzRvS1dBc0lHQnpkR0Z5ZEZOd1lXNU5ZVzUxWVd3b0tXQWdiM0lnWUhOMFlYSjBTVzVoWTNScGRtVlRjR0Z1S0NsZ0lHbHVjM1JsWVdRdUNpQWdJQ292Q2lBZ0lITjBZWEowVkhKaGJuTmhZM1JwYjI0b1kyOXVkR1Y0ZEN3Z1kzVnpkRzl0VTJGdGNHeHBibWREYjI1MFpYaDBLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTjFiSFFnUFNCMGFHbHpMbDlqWVd4c1JYaDBaVzV6YVc5dVRXVjBhRzlrS0NkemRHRnlkRlJ5WVc1ellXTjBhVzl1Snl3Z1kyOXVkR1Y0ZEN3Z1kzVnpkRzl0VTJGdGNHeHBibWREYjI1MFpYaDBLVHNLQ2lBZ0lDQnBaaUFvUkVWQ1ZVZGZRbFZKVEVRZ0ppWWdJWEpsYzNWc2RDa2dld29nSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdaR1Z3Y21WallYUnBiMjR2WkdWd2NtVmpZWFJwYjI0S0lDQWdJQ0FnWTI5dWMzUWdZMnhwWlc1MElEMGdkR2hwY3k1blpYUkRiR2xsYm5Rb0tUc0tJQ0FnSUNBZ2FXWWdLQ0ZqYkdsbGJuUXBJSHNLSUNBZ0lDQWdJQ0JzYjJkblpYSXVkMkZ5YmlnS0lDQWdJQ0FnSUNBZ0lDSlVjbUZqYVc1bklHVjRkR1Z1YzJsdmJpQW5jM1JoY25SVWNtRnVjMkZqZEdsdmJpY2dhWE1nYldsemMybHVaeTRnV1c5MUlITm9iM1ZzWkNBbmFXNXBkQ2NnZEdobElGTkVTeUJpWldadmNtVWdZMkZzYkdsdVp5QW5jM1JoY25SVWNtRnVjMkZqZEdsdmJpY2lMQW9nSUNBZ0lDQWdJQ2s3Q2lBZ0lDQWdJSDBnWld4elpTQjdDaUFnSUNBZ0lDQWdiRzluWjJWeUxuZGhjbTRvWUZSeVlXTnBibWNnWlhoMFpXNXphVzl1SUNkemRHRnlkRlJ5WVc1ellXTjBhVzl1SnlCb1lYTWdibTkwSUdKbFpXNGdZV1JrWldRdUlFTmhiR3dnSjJGa1pGUnlZV05wYm1kRmVIUmxibk5wYjI1ekp5QmlaV1p2Y21VZ1kyRnNiR2x1WnlBbmFXNXBkQ2M2Q2xObGJuUnllUzVoWkdSVWNtRmphVzVuUlhoMFpXNXphVzl1Y3lncE93cFRaVzUwY25rdWFXNXBkQ2g3TGk0dWZTazdDbUFwT3dvZ0lDQWdJQ0I5Q2lBZ0lDQjlDZ29nSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRUJwYm1obGNtbDBSRzlqQ2lBZ0lDb2dRR1JsY0hKbFkyRjBaV1FnVlhObElHQnpjR0Z1Vkc5VWNtRmpaVWhsWVdSbGNpZ3BZQ0JwYm5OMFpXRmtMZ29nSUNBcUx3b2dJQ0IwY21GalpVaGxZV1JsY25Nb0tTQjdDaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZZMkZzYkVWNGRHVnVjMmx2YmsxbGRHaHZaQ2duZEhKaFkyVklaV0ZrWlhKekp5azdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUNpQWdJQ29nUUdSbGNISmxZMkYwWldRZ1ZYTmxJSFJ2Y0NCc1pYWmxiQ0JnWTJGd2RIVnlaVk5sYzNOcGIyNWdJR2x1YzNSbFlXUXVDaUFnSUNvdkNpQWdJR05oY0hSMWNtVlRaWE56YVc5dUtHVnVaRk5sYzNOcGIyNGdQU0JtWVd4elpTa2dld29nSUNBZ0x5OGdZbTkwYUNCelpXNWtJSFJvWlNCMWNHUmhkR1VnWVc1a0lIQjFiR3dnZEdobElITmxjM05wYjI0Z1puSnZiU0IwYUdVZ2MyTnZjR1VLSUNBZ0lHbG1JQ2hsYm1SVFpYTnphVzl1S1NCN0NpQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCa1pYQnlaV05oZEdsdmJpOWtaWEJ5WldOaGRHbHZiZ29nSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVsYm1SVFpYTnphVzl1S0NrN0NpQWdJQ0I5Q2dvZ0lDQWdMeThnYjI1c2VTQnpaVzVrSUhSb1pTQjFjR1JoZEdVS0lDQWdJSFJvYVhNdVgzTmxibVJUWlhOemFXOXVWWEJrWVhSbEtDazdDaUFnZlFvS0lDQXZLaW9LSUNBZ0tpQkFhVzVvWlhKcGRFUnZZd29nSUNBcUlFQmtaWEJ5WldOaGRHVmtJRlZ6WlNCMGIzQWdiR1YyWld3Z1lHVnVaRk5sYzNOcGIyNWdJR2x1YzNSbFlXUXVDaUFnSUNvdkNpQWdJR1Z1WkZObGMzTnBiMjRvS1NCN0NpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnWkdWd2NtVmpZWFJwYjI0dlpHVndjbVZqWVhScGIyNEtJQ0FnSUdOdmJuTjBJR3hoZVdWeUlEMGdkR2hwY3k1blpYUlRkR0ZqYTFSdmNDZ3BPd29nSUNBZ1kyOXVjM1FnYzJOdmNHVWdQU0JzWVhsbGNpNXpZMjl3WlRzS0lDQWdJR052Ym5OMElITmxjM05wYjI0Z1BTQnpZMjl3WlM1blpYUlRaWE56YVc5dUtDazdDaUFnSUNCcFppQW9jMlZ6YzJsdmJpa2dld29nSUNBZ0lDQmpiRzl6WlZObGMzTnBiMjRvYzJWemMybHZiaWs3Q2lBZ0lDQjlDaUFnSUNCMGFHbHpMbDl6Wlc1a1UyVnpjMmx2YmxWd1pHRjBaU2dwT3dvS0lDQWdJQzh2SUhSb1pTQnpaWE56YVc5dUlHbHpJRzkyWlhJN0lIUmhhMlVnYVhRZ2IyWm1JRzltSUhSb1pTQnpZMjl3WlFvZ0lDQWdjMk52Y0dVdWMyVjBVMlZ6YzJsdmJpZ3BPd29nSUgwS0NpQWdMeW9xQ2lBZ0lDb2dRR2x1YUdWeWFYUkViMk1LSUNBZ0tpQkFaR1Z3Y21WallYUmxaQ0JWYzJVZ2RHOXdJR3hsZG1Wc0lHQnpkR0Z5ZEZObGMzTnBiMjVnSUdsdWMzUmxZV1F1Q2lBZ0lDb3ZDaUFnSUhOMFlYSjBVMlZ6YzJsdmJpaGpiMjUwWlhoMEtTQjdDaUFnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1pHVndjbVZqWVhScGIyNHZaR1Z3Y21WallYUnBiMjRLSUNBZ0lHTnZibk4wSUhzZ2MyTnZjR1VzSUdOc2FXVnVkQ0I5SUQwZ2RHaHBjeTVuWlhSVGRHRmphMVJ2Y0NncE93b2dJQ0FnWTI5dWMzUWdleUJ5Wld4bFlYTmxMQ0JsYm5acGNtOXViV1Z1ZENBOUlFUkZSa0ZWVEZSZlJVNVdTVkpQVGsxRlRsUWdmU0E5SUNoamJHbGxiblFnSmlZZ1kyeHBaVzUwTG1kbGRFOXdkR2x2Ym5Nb0tTa2dmSHdnZTMwN0Nnb2dJQ0FnTHk4Z1YybHNiQ0JtWlhSamFDQjFjMlZ5UVdkbGJuUWdhV1lnWTJGc2JHVmtJR1p5YjIwZ1luSnZkM05sY2lCelpHc0tJQ0FnSUdOdmJuTjBJSHNnZFhObGNrRm5aVzUwSUgwZ1BTQkhURTlDUVV4ZlQwSktMbTVoZG1sbllYUnZjaUI4ZkNCN2ZUc0tDaUFnSUNCamIyNXpkQ0J6WlhOemFXOXVJRDBnYldGclpWTmxjM05wYjI0b2V3b2dJQ0FnSUNCeVpXeGxZWE5sTEFvZ0lDQWdJQ0JsYm5acGNtOXViV1Z1ZEN3S0lDQWdJQ0FnZFhObGNqb2djMk52Y0dVdVoyVjBWWE5sY2lncExBb2dJQ0FnSUNBdUxpNG9kWE5sY2tGblpXNTBJQ1ltSUhzZ2RYTmxja0ZuWlc1MElIMHBMQW9nSUNBZ0lDQXVMaTVqYjI1MFpYaDBMQW9nSUNBZ2ZTazdDZ29nSUNBZ0x5OGdSVzVrSUdWNGFYTjBhVzVuSUhObGMzTnBiMjRnYVdZZ2RHaGxjbVVuY3lCdmJtVUtJQ0FnSUdOdmJuTjBJR04xY25KbGJuUlRaWE56YVc5dUlEMGdjMk52Y0dVdVoyVjBVMlZ6YzJsdmJpQW1KaUJ6WTI5d1pTNW5aWFJUWlhOemFXOXVLQ2s3Q2lBZ0lDQnBaaUFvWTNWeWNtVnVkRk5sYzNOcGIyNGdKaVlnWTNWeWNtVnVkRk5sYzNOcGIyNHVjM1JoZEhWeklEMDlQU0FuYjJzbktTQjdDaUFnSUNBZ0lIVndaR0YwWlZObGMzTnBiMjRvWTNWeWNtVnVkRk5sYzNOcGIyNHNJSHNnYzNSaGRIVnpPaUFuWlhocGRHVmtKeUI5S1RzS0lDQWdJSDBLSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lDQWdkR2hwY3k1bGJtUlRaWE56YVc5dUtDazdDZ29nSUNBZ0x5OGdRV1owWlhKM1lYSmtjeUIzWlNCelpYUWdkR2hsSUc1bGR5QnpaWE56YVc5dUlHOXVJSFJvWlNCelkyOXdaUW9nSUNBZ2MyTnZjR1V1YzJWMFUyVnpjMmx2YmloelpYTnphVzl1S1RzS0NpQWdJQ0J5WlhSMWNtNGdjMlZ6YzJsdmJqc0tJQ0I5Q2dvZ0lDOHFLZ29nSUNBcUlGSmxkSFZ5Ym5NZ2FXWWdaR1ZtWVhWc2RDQlFTVWtnYzJodmRXeGtJR0psSUhObGJuUWdkRzhnVTJWdWRISjVJR0Z1WkNCd2NtOXdZV2RoZEdWa0lHbHVJRzkxY21kdmFXNW5JSEpsY1hWbGMzUnpDaUFnSUNvZ2QyaGxiaUJVY21GamFXNW5JR2x6SUhWelpXUXVDaUFnSUNvS0lDQWdLaUJBWkdWd2NtVmpZWFJsWkNCVmMyVWdkRzl3TFd4bGRtVnNJR0JuWlhSRGJHbGxiblFvS1M1blpYUlBjSFJwYjI1ektDa3VjMlZ1WkVSbFptRjFiSFJRYVdsZ0lHbHVjM1JsWVdRdUlGUm9hWE1nWm5WdVkzUnBiMjRLSUNBZ0tpQnZibXg1SUhWdWJtVmpaWE56WVhKcGJIa2dhVzVqY21WaGMyVmtJRUZRU1NCemRYSm1ZV05sSUdKMWRDQnZibXg1SUhkeVlYQndaV1FnWVdOalpYTnphVzVuSUhSb1pTQnZjSFJwYjI0dUNpQWdJQ292Q2lBZ0lITm9iM1ZzWkZObGJtUkVaV1poZFd4MFVHbHBLQ2tnZXdvZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJR1JsY0hKbFkyRjBhVzl1TDJSbGNISmxZMkYwYVc5dUNpQWdJQ0JqYjI1emRDQmpiR2xsYm5RZ1BTQjBhR2x6TG1kbGRFTnNhV1Z1ZENncE93b2dJQ0FnWTI5dWMzUWdiM0IwYVc5dWN5QTlJR05zYVdWdWRDQW1KaUJqYkdsbGJuUXVaMlYwVDNCMGFXOXVjeWdwT3dvZ0lDQWdjbVYwZFhKdUlFSnZiMnhsWVc0b2IzQjBhVzl1Y3lBbUppQnZjSFJwYjI1ekxuTmxibVJFWldaaGRXeDBVR2xwS1RzS0lDQjlDZ29nSUM4cUtnb2dJQ0FxSUZObGJtUnpJSFJvWlNCamRYSnlaVzUwSUZObGMzTnBiMjRnYjI0Z2RHaGxJSE5qYjNCbENpQWdJQ292Q2lBZ0lGOXpaVzVrVTJWemMybHZibFZ3WkdGMFpTZ3BJSHNLSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQmtaWEJ5WldOaGRHbHZiaTlrWlhCeVpXTmhkR2x2YmdvZ0lDQWdZMjl1YzNRZ2V5QnpZMjl3WlN3Z1kyeHBaVzUwSUgwZ1BTQjBhR2x6TG1kbGRGTjBZV05yVkc5d0tDazdDZ29nSUNBZ1kyOXVjM1FnYzJWemMybHZiaUE5SUhOamIzQmxMbWRsZEZObGMzTnBiMjRvS1RzS0lDQWdJR2xtSUNoelpYTnphVzl1SUNZbUlHTnNhV1Z1ZENBbUppQmpiR2xsYm5RdVkyRndkSFZ5WlZObGMzTnBiMjRwSUhzS0lDQWdJQ0FnWTJ4cFpXNTBMbU5oY0hSMWNtVlRaWE56YVc5dUtITmxjM05wYjI0cE93b2dJQ0FnZlFvZ0lIMEtDaUFnTHlvcUNpQWdJQ29nUTJGc2JITWdaMnh2WW1Gc0lHVjRkR1Z1YzJsdmJpQnRaWFJvYjJRZ1lXNWtJR0pwYm1ScGJtY2dZM1Z5Y21WdWRDQnBibk4wWVc1alpTQjBieUIwYUdVZ1puVnVZM1JwYjI0Z1kyRnNiQW9nSUNBcUx3b2dJQzh2SUVCMGN5MWxlSEJsWTNRdFpYSnliM0lnUm5WdVkzUnBiMjRnYkdGamEzTWdaVzVrYVc1bklISmxkSFZ5YmlCemRHRjBaVzFsYm5RZ1lXNWtJSEpsZEhWeWJpQjBlWEJsSUdSdlpYTWdibTkwSUdsdVkyeDFaR1VnSjNWdVpHVm1hVzVsWkNjdUlIUnpLREl6TmpZcENpQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRUIwZVhCbGMyTnlhWEIwTFdWemJHbHVkQzl1YnkxbGVIQnNhV05wZEMxaGJua0tJQ0FnWDJOaGJHeEZlSFJsYm5OcGIyNU5aWFJvYjJRb2JXVjBhRzlrTENBdUxpNWhjbWR6S1NCN0NpQWdJQ0JqYjI1emRDQmpZWEp5YVdWeUlEMGdaMlYwVFdGcGJrTmhjbkpwWlhJb0tUc0tJQ0FnSUdOdmJuTjBJSE5sYm5SeWVTQTlJR05oY25KcFpYSXVYMTlUUlU1VVVsbGZYenNLSUNBZ0lHbG1JQ2h6Wlc1MGNua2dKaVlnYzJWdWRISjVMbVY0ZEdWdWMybHZibk1nSmlZZ2RIbHdaVzltSUhObGJuUnllUzVsZUhSbGJuTnBiMjV6VzIxbGRHaHZaRjBnUFQwOUlDZG1kVzVqZEdsdmJpY3BJSHNLSUNBZ0lDQWdjbVYwZFhKdUlITmxiblJ5ZVM1bGVIUmxibk5wYjI1elcyMWxkR2h2WkYwdVlYQndiSGtvZEdocGN5d2dZWEpuY3lrN0NpQWdJQ0I5Q2lBZ0lDQkVSVUpWUjE5Q1ZVbE1SQ0FtSmlCc2IyZG5aWEl1ZDJGeWJpaGdSWGgwWlc1emFXOXVJRzFsZEdodlpDQWtlMjFsZEdodlpIMGdZMjkxYkdSdUozUWdZbVVnWm05MWJtUXNJR1J2YVc1bklHNXZkR2hwYm1jdVlDazdDaUFnZlFwOUNnb3ZLaW9LSUNvZ1VtVjBkWEp1Y3lCMGFHVWdaMnh2WW1Gc0lITm9hVzBnY21WbmFYTjBjbmt1Q2lBcUNpQXFJRVpKV0UxRk9pQlVhR2x6SUdaMWJtTjBhVzl1SUdseklIQnliMkpzWlcxaGRHbGpMQ0JpWldOaGRYTmxJR1JsYzNCcGRHVWdZV3gzWVhseklISmxkSFZ5Ym1sdVp5QmhJSFpoYkdsa0lFTmhjbkpwWlhJc0NpQXFJR2wwSUdoaGN5QmhiaUJ2Y0hScGIyNWhiQ0JnWDE5VFJVNVVVbGxmWDJBZ2NISnZjR1Z5ZEhrc0lIZG9hV05vSUhSb1pXNGdhVzRnZEhWeWJpQnlaWEYxYVhKbGN5QjFjeUIwYnlCaGJIZGhlWE1nY0dWeVptOXliU0JoYmlCMWJtNWxZMlZ6YzJGeWVTQmphR1ZqYXdvZ0tpQmhkQ0IwYUdVZ1kyRnNiQzF6YVhSbExpQlhaU0JoYkhkaGVYTWdZV05qWlhOeklIUm9aU0JqWVhKeWFXVnlJSFJvY205MVoyZ2dkR2hwY3lCbWRXNWpkR2x2Yml3Z2MyOGdkMlVnWTJGdUlHZDFZWEpoYm5SbFpTQjBhR0YwSUdCZlgxTkZUbFJTV1Y5ZllDQnBjeUIwYUdWeVpTNEtJQ29xTHdwbWRXNWpkR2x2YmlCblpYUk5ZV2x1UTJGeWNtbGxjaWdwSUhzS0lDQkhURTlDUVV4ZlQwSktMbDlmVTBWT1ZGSlpYMThnUFNCSFRFOUNRVXhmVDBKS0xsOWZVMFZPVkZKWlgxOGdmSHdnZXdvZ0lDQWdaWGgwWlc1emFXOXVjem9nZTMwc0NpQWdJQ0JvZFdJNklIVnVaR1ZtYVc1bFpDd0tJQ0I5T3dvZ0lISmxkSFZ5YmlCSFRFOUNRVXhmVDBKS093cDlDZ292S2lvS0lDb2dVbVZ3YkdGalpYTWdkR2hsSUdOMWNuSmxiblFnYldGcGJpQm9kV0lnZDJsMGFDQjBhR1VnY0dGemMyVmtJRzl1WlNCdmJpQjBhR1VnWjJ4dlltRnNJRzlpYW1WamRBb2dLZ29nS2lCQWNtVjBkWEp1Y3lCVWFHVWdiMnhrSUhKbGNHeGhZMlZrSUdoMVlnb2dLZ29nS2lCQVpHVndjbVZqWVhSbFpDQlZjMlVnWUhObGRFTjFjbkpsYm5SRGJHbGxiblFvS1dBZ2FXNXpkR1ZoWkM0S0lDb3ZDaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJncG1kVzVqZEdsdmJpQnRZV3RsVFdGcGJpaG9kV0lwSUhzS0lDQmpiMjV6ZENCeVpXZHBjM1J5ZVNBOUlHZGxkRTFoYVc1RFlYSnlhV1Z5S0NrN0NpQWdZMjl1YzNRZ2IyeGtTSFZpSUQwZ1oyVjBTSFZpUm5KdmJVTmhjbkpwWlhJb2NtVm5hWE4wY25rcE93b2dJSE5sZEVoMVlrOXVRMkZ5Y21sbGNpaHlaV2RwYzNSeWVTd2dhSFZpS1RzS0lDQnlaWFIxY200Z2IyeGtTSFZpT3dwOUNnb3ZLaW9LSUNvZ1VtVjBkWEp1Y3lCMGFHVWdaR1ZtWVhWc2RDQm9kV0lnYVc1emRHRnVZMlV1Q2lBcUNpQXFJRWxtSUdFZ2FIVmlJR2x6SUdGc2NtVmhaSGtnY21WbmFYTjBaWEpsWkNCcGJpQjBhR1VnWjJ4dlltRnNJR05oY25KcFpYSWdZblYwSUhSb2FYTWdiVzlrZFd4bENpQXFJR052Ym5SaGFXNXpJR0VnYlc5eVpTQnlaV05sYm5RZ2RtVnljMmx2Yml3Z2FYUWdjbVZ3YkdGalpYTWdkR2hsSUhKbFoybHpkR1Z5WldRZ2RtVnljMmx2Ymk0S0lDb2dUM1JvWlhKM2FYTmxMQ0IwYUdVZ1kzVnljbVZ1ZEd4NUlISmxaMmx6ZEdWeVpXUWdhSFZpSUhkcGJHd2dZbVVnY21WMGRYSnVaV1F1Q2lBcUNpQXFJRUJrWlhCeVpXTmhkR1ZrSUZWelpTQjBhR1VnY21WemNHVmpkR2wyWlNCeVpYQnNZV05sYldWdWRDQnRaWFJvYjJRZ1pHbHlaV04wYkhrZ2FXNXpkR1ZoWkM0S0lDb3ZDaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJncG1kVzVqZEdsdmJpQm5aWFJEZFhKeVpXNTBTSFZpS0NrZ2V3b2dJQzh2SUVkbGRDQnRZV2x1SUdOaGNuSnBaWElnS0dkc2IySmhiQ0JtYjNJZ1pYWmxjbmtnWlc1MmFYSnZibTFsYm5RcENpQWdZMjl1YzNRZ2NtVm5hWE4wY25rZ1BTQm5aWFJOWVdsdVEyRnljbWxsY2lncE93b0tJQ0JwWmlBb2NtVm5hWE4wY25rdVgxOVRSVTVVVWxsZlh5QW1KaUJ5WldkcGMzUnllUzVmWDFORlRsUlNXVjlmTG1GamN5a2dld29nSUNBZ1kyOXVjM1FnYUhWaUlEMGdjbVZuYVhOMGNua3VYMTlUUlU1VVVsbGZYeTVoWTNNdVoyVjBRM1Z5Y21WdWRFaDFZaWdwT3dvS0lDQWdJR2xtSUNob2RXSXBJSHNLSUNBZ0lDQWdjbVYwZFhKdUlHaDFZanNLSUNBZ0lIMEtJQ0I5Q2dvZ0lDOHZJRkpsZEhWeWJpQm9kV0lnZEdoaGRDQnNhWFpsY3lCdmJpQmhJR2RzYjJKaGJDQnZZbXBsWTNRS0lDQnlaWFIxY200Z1oyVjBSMnh2WW1Gc1NIVmlLSEpsWjJsemRISjVLVHNLZlFvS0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHUmxjSEpsWTJGMGFXOXVMMlJsY0hKbFkyRjBhVzl1Q21aMWJtTjBhVzl1SUdkbGRFZHNiMkpoYkVoMVlpaHlaV2RwYzNSeWVTQTlJR2RsZEUxaGFXNURZWEp5YVdWeUtDa3BJSHNLSUNBdkx5QkpaaUIwYUdWeVpTZHpJRzV2SUdoMVlpd2diM0lnYVhSeklHRnVJRzlzWkNCQlVFa3NJR0Z6YzJsbmJpQmhJRzVsZHlCdmJtVUtDaUFnYVdZZ0tBb2dJQ0FnSVdoaGMwaDFZazl1UTJGeWNtbGxjaWh5WldkcGMzUnllU2tnZkh3S0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJnb2dJQ0FnWjJWMFNIVmlSbkp2YlVOaGNuSnBaWElvY21WbmFYTjBjbmtwTG1selQyeGtaWEpVYUdGdUtFRlFTVjlXUlZKVFNVOU9LUW9nSUNrZ2V3b2dJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnSUNCelpYUklkV0pQYmtOaGNuSnBaWElvY21WbmFYTjBjbmtzSUc1bGR5QklkV0lvS1NrN0NpQWdmUW9LSUNBdkx5QlNaWFIxY200Z2FIVmlJSFJvWVhRZ2JHbDJaWE1nYjI0Z1lTQm5iRzlpWVd3Z2IySnFaV04wQ2lBZ2NtVjBkWEp1SUdkbGRFaDFZa1p5YjIxRFlYSnlhV1Z5S0hKbFoybHpkSEo1S1RzS2ZRb0tMeW9xQ2lBcUlGUm9hWE1nZDJsc2JDQjBaV3hzSUhkb1pYUm9aWElnWVNCallYSnlhV1Z5SUdoaGN5QmhJR2gxWWlCdmJpQnBkQ0J2Y2lCdWIzUUtJQ29nUUhCaGNtRnRJR05oY25KcFpYSWdiMkpxWldOMENpQXFMd3BtZFc1amRHbHZiaUJvWVhOSWRXSlBia05oY25KcFpYSW9ZMkZ5Y21sbGNpa2dld29nSUhKbGRIVnliaUFoSVNoallYSnlhV1Z5SUNZbUlHTmhjbkpwWlhJdVgxOVRSVTVVVWxsZlh5QW1KaUJqWVhKeWFXVnlMbDlmVTBWT1ZGSlpYMTh1YUhWaUtUc0tmUW9LTHlvcUNpQXFJRlJvYVhNZ2QybHNiQ0JqY21WaGRHVWdZU0J1WlhjZ2UwQnNhVzVySUVoMVluMGdZVzVrSUdGa1pDQjBieUIwYUdVZ2NHRnpjMlZrSUc5aWFtVmpkQ0J2YmdvZ0tpQmZYMU5GVGxSU1dWOWZMbWgxWWk0S0lDb2dRSEJoY21GdElHTmhjbkpwWlhJZ2IySnFaV04wQ2lBcUlFQm9hV1JrWlc0S0lDb3ZDaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJncG1kVzVqZEdsdmJpQm5aWFJJZFdKR2NtOXRRMkZ5Y21sbGNpaGpZWEp5YVdWeUtTQjdDaUFnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdSbGNISmxZMkYwYVc5dUwyUmxjSEpsWTJGMGFXOXVDaUFnY21WMGRYSnVJR2RsZEVkc2IySmhiRk5wYm1kc1pYUnZiaWduYUhWaUp5d2dLQ2tnUFQ0Z2JtVjNJRWgxWWlncExDQmpZWEp5YVdWeUtUc0tmUW9LTHlvcUNpQXFJRlJvYVhNZ2QybHNiQ0J6WlhRZ2NHRnpjMlZrSUh0QWJHbHVheUJJZFdKOUlHOXVJSFJvWlNCd1lYTnpaV1FnYjJKcVpXTjBKM01nWDE5VFJVNVVVbGxmWHk1b2RXSWdZWFIwY21saWRYUmxDaUFxSUVCd1lYSmhiU0JqWVhKeWFXVnlJRzlpYW1WamRBb2dLaUJBY0dGeVlXMGdhSFZpSUVoMVlnb2dLaUJBY21WMGRYSnVjeUJCSUdKdmIyeGxZVzRnYVc1a2FXTmhkR2x1WnlCemRXTmpaWE56SUc5eUlHWmhhV3gxY21VS0lDb3ZDaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JrWlhCeVpXTmhkR2x2Ymk5a1pYQnlaV05oZEdsdmJncG1kVzVqZEdsdmJpQnpaWFJJZFdKUGJrTmhjbkpwWlhJb1kyRnljbWxsY2l3Z2FIVmlLU0I3Q2lBZ2FXWWdLQ0ZqWVhKeWFXVnlLU0J5WlhSMWNtNGdabUZzYzJVN0NpQWdZMjl1YzNRZ1gxOVRSVTVVVWxsZlh5QTlJQ2hqWVhKeWFXVnlMbDlmVTBWT1ZGSlpYMThnUFNCallYSnlhV1Z5TGw5ZlUwVk9WRkpaWDE4Z2ZId2dlMzBwT3dvZ0lGOWZVMFZPVkZKWlgxOHVhSFZpSUQwZ2FIVmlPd29nSUhKbGRIVnliaUIwY25WbE93cDlDZ292S2lvS0lDb2dRWEJ3YkhrZ1UyUnJTVzVtYnlBb2JtRnRaU3dnZG1WeWMybHZiaXdnY0dGamEyRm5aWE1zSUdsdWRHVm5jbUYwYVc5dWN5a2dkRzhnZEdobElHTnZjbkpsYzNCdmJtUnBibWNnWlhabGJuUWdhMlY1TGdvZ0tpQk5aWEpuWlNCM2FYUm9JR1Y0YVhOMGFXNW5JR1JoZEdFZ2FXWWdZVzU1TGdvZ0tpb3ZDbVoxYm1OMGFXOXVJR1Z1YUdGdVkyVkZkbVZ1ZEZkcGRHaFRaR3RKYm1adktHVjJaVzUwTENCelpHdEpibVp2S1NCN0NpQWdhV1lnS0NGelpHdEpibVp2S1NCN0NpQWdJQ0J5WlhSMWNtNGdaWFpsYm5RN0NpQWdmUW9nSUdWMlpXNTBMbk5rYXlBOUlHVjJaVzUwTG5Oa2F5QjhmQ0I3ZlRzS0lDQmxkbVZ1ZEM1elpHc3VibUZ0WlNBOUlHVjJaVzUwTG5Oa2F5NXVZVzFsSUh4OElITmthMGx1Wm04dWJtRnRaVHNLSUNCbGRtVnVkQzV6WkdzdWRtVnljMmx2YmlBOUlHVjJaVzUwTG5Oa2F5NTJaWEp6YVc5dUlIeDhJSE5rYTBsdVptOHVkbVZ5YzJsdmJqc0tJQ0JsZG1WdWRDNXpaR3N1YVc1MFpXZHlZWFJwYjI1eklEMGdXeTR1TGlobGRtVnVkQzV6WkdzdWFXNTBaV2R5WVhScGIyNXpJSHg4SUZ0ZEtTd2dMaTR1S0hOa2EwbHVabTh1YVc1MFpXZHlZWFJwYjI1eklIeDhJRnRkS1YwN0NpQWdaWFpsYm5RdWMyUnJMbkJoWTJ0aFoyVnpJRDBnV3k0dUxpaGxkbVZ1ZEM1elpHc3VjR0ZqYTJGblpYTWdmSHdnVzEwcExDQXVMaTRvYzJSclNXNW1ieTV3WVdOcllXZGxjeUI4ZkNCYlhTbGRPd29nSUhKbGRIVnliaUJsZG1WdWREc0tmUW9LTHlvcUlFTnlaV0YwWlhNZ1lXNGdaVzUyWld4dmNHVWdabkp2YlNCaElGTmxjM05wYjI0Z0tpOEtablZ1WTNScGIyNGdZM0psWVhSbFUyVnpjMmx2YmtWdWRtVnNiM0JsS0FvZ0lITmxjM05wYjI0c0NpQWdaSE51TEFvZ0lHMWxkR0ZrWVhSaExBb2dJSFIxYm01bGJDd0tLU0I3Q2lBZ1kyOXVjM1FnYzJSclNXNW1ieUE5SUdkbGRGTmthMDFsZEdGa1lYUmhSbTl5Ulc1MlpXeHZjR1ZJWldGa1pYSW9iV1YwWVdSaGRHRXBPd29nSUdOdmJuTjBJR1Z1ZG1Wc2IzQmxTR1ZoWkdWeWN5QTlJSHNLSUNBZ0lITmxiblJmWVhRNklHNWxkeUJFWVhSbEtDa3VkRzlKVTA5VGRISnBibWNvS1N3S0lDQWdJQzR1TGloelpHdEpibVp2SUNZbUlIc2djMlJyT2lCelpHdEpibVp2SUgwcExBb2dJQ0FnTGk0dUtDRWhkSFZ1Ym1Wc0lDWW1JR1J6YmlBbUppQjdJR1J6YmpvZ1pITnVWRzlUZEhKcGJtY29aSE51S1NCOUtTd0tJQ0I5T3dvS0lDQmpiMjV6ZENCbGJuWmxiRzl3WlVsMFpXMGdQUW9nSUNBZ0oyRm5aM0psWjJGMFpYTW5JR2x1SUhObGMzTnBiMjRnUHlCYmV5QjBlWEJsT2lBbmMyVnpjMmx2Ym5NbklIMHNJSE5sYzNOcGIyNWRJRG9nVzNzZ2RIbHdaVG9nSjNObGMzTnBiMjRuSUgwc0lITmxjM05wYjI0dWRHOUtVMDlPS0NsZE93b0tJQ0J5WlhSMWNtNGdZM0psWVhSbFJXNTJaV3h2Y0dVb1pXNTJaV3h2Y0dWSVpXRmtaWEp6TENCYlpXNTJaV3h2Y0dWSmRHVnRYU2s3Q24wS0NpOHFLZ29nS2lCRGNtVmhkR1VnWVc0Z1JXNTJaV3h2Y0dVZ1puSnZiU0JoYmlCbGRtVnVkQzRLSUNvdkNtWjFibU4wYVc5dUlHTnlaV0YwWlVWMlpXNTBSVzUyWld4dmNHVW9DaUFnWlhabGJuUXNDaUFnWkhOdUxBb2dJRzFsZEdGa1lYUmhMQW9nSUhSMWJtNWxiQ3dLS1NCN0NpQWdZMjl1YzNRZ2MyUnJTVzVtYnlBOUlHZGxkRk5rYTAxbGRHRmtZWFJoUm05eVJXNTJaV3h2Y0dWSVpXRmtaWElvYldWMFlXUmhkR0VwT3dvS0lDQXZLZ29nSUNBZ1RtOTBaVG9nUkhWbElIUnZJRlJUTENCbGRtVnVkQzUwZVhCbElHMWhlU0JpWlNCZ2NtVndiR0Y1WDJWMlpXNTBZQ3dnZEdobGIzSmxkR2xqWVd4c2VTNEtJQ0FnSUVsdUlIQnlZV04wYVdObExDQjNaU0J1WlhabGNpQmpZV3hzSUdCamNtVmhkR1ZGZG1WdWRFVnVkbVZzYjNCbFlDQjNhWFJvSUdCeVpYQnNZWGxmWlhabGJuUmdJSFI1Y0dVc0NpQWdJQ0JoYm1RZ2QyVW5aQ0JvWVhabElIUnZJR0ZrYW5WMElHRWdiRzl2YjNRZ2IyWWdkSGx3WlhNZ2RHOGdiV0ZyWlNCMGFHbHpJSGR2Y21zZ2NISnZjR1Z5YkhrdUNpQWdJQ0JYWlNCM1lXNTBJSFJ2SUdGMmIybGtJR05oYzNScGJtY2dkR2hwY3lCaGNtOTFibVFzSUdGeklIUm9ZWFFnWTI5MWJHUWdiR1ZoWkNCMGJ5QmlkV2R6SUNobExtY3VJSGRvWlc0Z2QyVWdZV1JrSUdGdWIzUm9aWElnZEhsd1pTa0tJQ0FnSUZOdklIUm9aU0J6WVdabElHTm9iMmxqWlNCcGN5QjBieUJ5WldGc2JIa2daM1ZoY21RZ1lXZGhhVzV6ZENCMGFHVWdjbVZ3YkdGNVgyVjJaVzUwSUhSNWNHVWdhR1Z5WlM0S0lDQXFMd29nSUdOdmJuTjBJR1YyWlc1MFZIbHdaU0E5SUdWMlpXNTBMblI1Y0dVZ0ppWWdaWFpsYm5RdWRIbHdaU0FoUFQwZ0ozSmxjR3hoZVY5bGRtVnVkQ2NnUHlCbGRtVnVkQzUwZVhCbElEb2dKMlYyWlc1MEp6c0tDaUFnWlc1b1lXNWpaVVYyWlc1MFYybDBhRk5rYTBsdVptOG9aWFpsYm5Rc0lHMWxkR0ZrWVhSaElDWW1JRzFsZEdGa1lYUmhMbk5rYXlrN0Nnb2dJR052Ym5OMElHVnVkbVZzYjNCbFNHVmhaR1Z5Y3lBOUlHTnlaV0YwWlVWMlpXNTBSVzUyWld4dmNHVklaV0ZrWlhKektHVjJaVzUwTENCelpHdEpibVp2TENCMGRXNXVaV3dzSUdSemJpazdDZ29nSUM4dklGQnlaWFpsYm5RZ2RHaHBjeUJrWVhSaElDaDNhR2xqYUN3Z2FXWWdhWFFnWlhocGMzUnpMQ0IzWVhNZ2RYTmxaQ0JwYmlCbFlYSnNhV1Z5SUhOMFpYQnpJR2x1SUhSb1pTQndjbTlqWlhOemFXNW5JSEJwY0dWc2FXNWxLU0JtY205dElHSmxhVzVuSUhObGJuUWdkRzhLSUNBdkx5QnpaVzUwY25rdUlDaE9iM1JsT2lCUGRYSWdkWE5sSUc5bUlIUm9hWE1nY0hKdmNHVnlkSGtnWTI5dFpYTWdZVzVrSUdkdlpYTWdkMmwwYUNCM2FHRjBaWFpsY2lCM1pTQnRhV2RvZENCaVpTQmtaV0oxWjJkcGJtY3NJSGRvWVhSbGRtVnlJR2hoWTJ0eklIZGxJRzFoZVFvZ0lDOHZJR2hoZG1VZ2RHVnRjRzl5WVhKcGJIa2dZV1JrWldRc0lHVjBZeTRnUlhabGJpQnBaaUIzWlNCa2IyNG5kQ0JvWVhCd1pXNGdkRzhnWW1VZ2RYTnBibWNnYVhRZ1lYUWdjMjl0WlNCd2IybHVkQ0JwYmlCMGFHVWdablYwZFhKbExDQnNaWFFuY3lCdWIzUWdaMlYwSUhKcFpBb2dJQzh2SUc5bUlIUm9hWE1nWUdSbGJHVjBaV0FzSUd4bGMzUWdkMlVnYldsemN5QndkWFIwYVc1bklHbDBJR0poWTJzZ2FXNGdkR2hsSUc1bGVIUWdkR2x0WlNCMGFHVWdjSEp2Y0dWeWRIa2dhWE1nYVc0Z2RYTmxMaWtLSUNCa1pXeGxkR1VnWlhabGJuUXVjMlJyVUhKdlkyVnpjMmx1WjAxbGRHRmtZWFJoT3dvS0lDQmpiMjV6ZENCbGRtVnVkRWwwWlcwZ1BTQmJleUIwZVhCbE9pQmxkbVZ1ZEZSNWNHVWdmU3dnWlhabGJuUmRPd29nSUhKbGRIVnliaUJqY21WaGRHVkZiblpsYkc5d1pTaGxiblpsYkc5d1pVaGxZV1JsY25Nc0lGdGxkbVZ1ZEVsMFpXMWRLVHNLZlFvS1kyOXVjM1FnVTBWT1ZGSlpYMEZRU1Y5V1JWSlRTVTlPSUQwZ0p6Y25Pd29LTHlvcUlGSmxkSFZ5Ym5NZ2RHaGxJSEJ5WldacGVDQjBieUJqYjI1emRISjFZM1FnVTJWdWRISjVJR2x1WjJWemRHbHZiaUJCVUVrZ1pXNWtjRzlwYm5SekxpQXFMd3BtZFc1amRHbHZiaUJuWlhSQ1lYTmxRWEJwUlc1a2NHOXBiblFvWkhOdUtTQjdDaUFnWTI5dWMzUWdjSEp2ZEc5amIyd2dQU0JrYzI0dWNISnZkRzlqYjJ3Z1B5QmdKSHRrYzI0dWNISnZkRzlqYjJ4OU9tQWdPaUFuSnpzS0lDQmpiMjV6ZENCd2IzSjBJRDBnWkhOdUxuQnZjblFnUHlCZ09pUjdaSE51TG5CdmNuUjlZQ0E2SUNjbk93b2dJSEpsZEhWeWJpQmdKSHR3Y205MGIyTnZiSDB2THlSN1pITnVMbWh2YzNSOUpIdHdiM0owZlNSN1pITnVMbkJoZEdnZ1B5QmdMeVI3WkhOdUxuQmhkR2g5WUNBNklDY25mUzloY0drdllEc0tmUW9LTHlvcUlGSmxkSFZ5Ym5NZ2RHaGxJR2x1WjJWemRDQkJVRWtnWlc1a2NHOXBiblFnWm05eUlIUmhjbWRsZEM0Z0tpOEtablZ1WTNScGIyNGdYMmRsZEVsdVoyVnpkRVZ1WkhCdmFXNTBLR1J6YmlrZ2V3b2dJSEpsZEhWeWJpQmdKSHRuWlhSQ1lYTmxRWEJwUlc1a2NHOXBiblFvWkhOdUtYMGtlMlJ6Ymk1d2NtOXFaV04wU1dSOUwyVnVkbVZzYjNCbEwyQTdDbjBLQ2k4cUtpQlNaWFIxY201eklHRWdWVkpNTFdWdVkyOWtaV1FnYzNSeWFXNW5JSGRwZEdnZ1lYVjBhQ0JqYjI1bWFXY2djM1ZwZEdGaWJHVWdabTl5SUdFZ2NYVmxjbmtnYzNSeWFXNW5MaUFxTHdwbWRXNWpkR2x2YmlCZlpXNWpiMlJsWkVGMWRHZ29aSE51TENCelpHdEpibVp2S1NCN0NpQWdjbVYwZFhKdUlIVnliRVZ1WTI5a1pTaDdDaUFnSUNBdkx5QlhaU0J6Wlc1a0lHOXViSGtnZEdobElHMXBibWx0ZFcwZ2MyVjBJRzltSUhKbGNYVnBjbVZrSUdsdVptOXliV0YwYVc5dUxpQlRaV1VLSUNBZ0lDOHZJR2gwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzluWlhSelpXNTBjbmt2YzJWdWRISjVMV3BoZG1GelkzSnBjSFF2YVhOemRXVnpMekkxTnpJdUNpQWdJQ0J6Wlc1MGNubGZhMlY1T2lCa2MyNHVjSFZpYkdsalMyVjVMQW9nSUNBZ2MyVnVkSEo1WDNabGNuTnBiMjQ2SUZORlRsUlNXVjlCVUVsZlZrVlNVMGxQVGl3S0lDQWdJQzR1TGloelpHdEpibVp2SUNZbUlIc2djMlZ1ZEhKNVgyTnNhV1Z1ZERvZ1lDUjdjMlJyU1c1bWJ5NXVZVzFsZlM4a2UzTmthMGx1Wm04dWRtVnljMmx2Ym4xZ0lIMHBMQW9nSUgwcE93cDlDZ292S2lvS0lDb2dVbVYwZFhKdWN5QjBhR1VnWlc1MlpXeHZjR1VnWlc1a2NHOXBiblFnVlZKTUlIZHBkR2dnWVhWMGFDQnBiaUIwYUdVZ2NYVmxjbmtnYzNSeWFXNW5MZ29nS2dvZ0tpQlRaVzVrYVc1bklHRjFkR2dnWVhNZ2NHRnlkQ0J2WmlCMGFHVWdjWFZsY25rZ2MzUnlhVzVuSUdGdVpDQnViM1FnWVhNZ1kzVnpkRzl0SUVoVVZGQWdhR1ZoWkdWeWN5QmhkbTlwWkhNZ1EwOVNVeUJ3Y21WbWJHbG5hSFFnY21WeGRXVnpkSE11Q2lBcUx3cG1kVzVqZEdsdmJpQm5aWFJGYm5abGJHOXdaVVZ1WkhCdmFXNTBWMmwwYUZWeWJFVnVZMjlrWldSQmRYUm9LQW9nSUdSemJpd0tJQ0F2THlCVVQwUlBJQ2gyT0NrNklGSmxiVzkyWlNCZ2RIVnVibVZzVDNKUGNIUnBiMjV6WUNCcGJpQm1ZWFp2Y2lCdlppQmdiM0IwYVc5dWMyQXNJR0Z1WkNCMWMyVWdkR2hsSUhOMVluTjBhWFIxZEdVZ1kyOWtaU0JpWld4dmR3b2dJQzh2SUc5d2RHbHZibk02SUVOc2FXVnVkRTl3ZEdsdmJuTWdQU0I3ZlNCaGN5QkRiR2xsYm5SUGNIUnBiMjV6TEFvZ0lIUjFibTVsYkU5eVQzQjBhVzl1Y3lBOUlIdDlJQ3dLS1NCN0NpQWdMeThnVkU5RVR5QW9kamdwT2lCVmMyVWdkR2hwY3lCamIyUmxJR2x1YzNSbFlXUUtJQ0F2THlCamIyNXpkQ0I3SUhSMWJtNWxiQ3dnWDIxbGRHRmtZWFJoSUQwZ2UzMGdmU0E5SUc5d2RHbHZibk03Q2lBZ0x5OGdjbVYwZFhKdUlIUjFibTVsYkNBL0lIUjFibTVsYkNBNklHQWtlMTluWlhSSmJtZGxjM1JGYm1Sd2IybHVkQ2hrYzI0cGZUOGtlMTlsYm1OdlpHVmtRWFYwYUNoa2MyNHNJRjl0WlhSaFpHRjBZUzV6WkdzcGZXQTdDZ29nSUdOdmJuTjBJSFIxYm01bGJDQTlJSFI1Y0dWdlppQjBkVzV1Wld4UGNrOXdkR2x2Ym5NZ1BUMDlJQ2R6ZEhKcGJtY25JRDhnZEhWdWJtVnNUM0pQY0hScGIyNXpJRG9nZEhWdWJtVnNUM0pQY0hScGIyNXpMblIxYm01bGJEc0tJQ0JqYjI1emRDQnpaR3RKYm1adklEMEtJQ0FnSUhSNWNHVnZaaUIwZFc1dVpXeFBjazl3ZEdsdmJuTWdQVDA5SUNkemRISnBibWNuSUh4OElDRjBkVzV1Wld4UGNrOXdkR2x2Ym5NdVgyMWxkR0ZrWVhSaElEOGdkVzVrWldacGJtVmtJRG9nZEhWdWJtVnNUM0pQY0hScGIyNXpMbDl0WlhSaFpHRjBZUzV6WkdzN0Nnb2dJSEpsZEhWeWJpQjBkVzV1Wld3Z1B5QjBkVzV1Wld3Z09pQmdKSHRmWjJWMFNXNW5aWE4wUlc1a2NHOXBiblFvWkhOdUtYMC9KSHRmWlc1amIyUmxaRUYxZEdnb1pITnVMQ0J6Wkd0SmJtWnZLWDFnT3dwOUNncGpiMjV6ZENCRVJVWkJWVXhVWDFSU1FVNVRVRTlTVkY5Q1ZVWkdSVkpmVTBsYVJTQTlJRE13T3dvS0x5b3FDaUFxSUVOeVpXRjBaWE1nWVc0Z2FXNXpkR0Z1WTJVZ2IyWWdZU0JUWlc1MGNua2dZRlJ5WVc1emNHOXlkR0FLSUNvS0lDb2dRSEJoY21GdElHOXdkR2x2Ym5NS0lDb2dRSEJoY21GdElHMWhhMlZTWlhGMVpYTjBDaUFxTHdwbWRXNWpkR2x2YmlCamNtVmhkR1ZVY21GdWMzQnZjblFvQ2lBZ2IzQjBhVzl1Y3l3S0lDQnRZV3RsVW1WeGRXVnpkQ3dLSUNCaWRXWm1aWElnUFNCdFlXdGxVSEp2YldselpVSjFabVpsY2lnS0lDQWdJRzl3ZEdsdmJuTXVZblZtWm1WeVUybDZaU0I4ZkNCRVJVWkJWVXhVWDFSU1FVNVRVRTlTVkY5Q1ZVWkdSVkpmVTBsYVJTd0tJQ0FwTEFvcElIc0tJQ0JzWlhRZ2NtRjBaVXhwYldsMGN5QTlJSHQ5T3dvZ0lHTnZibk4wSUdac2RYTm9JRDBnS0hScGJXVnZkWFFwSUQwK0lHSjFabVpsY2k1a2NtRnBiaWgwYVcxbGIzVjBLVHNLQ2lBZ1puVnVZM1JwYjI0Z2MyVnVaQ2hsYm5abGJHOXdaU2tnZXdvZ0lDQWdZMjl1YzNRZ1ptbHNkR1Z5WldSRmJuWmxiRzl3WlVsMFpXMXpJRDBnVzEwN0Nnb2dJQ0FnTHk4Z1JISnZjQ0J5WVhSbElHeHBiV2wwWldRZ2FYUmxiWE1nWm5KdmJTQmxiblpsYkc5d1pRb2dJQ0FnWm05eVJXRmphRVZ1ZG1Wc2IzQmxTWFJsYlNobGJuWmxiRzl3WlN3Z0tHbDBaVzBzSUhSNWNHVXBJRDArSUhzS0lDQWdJQ0FnWTI5dWMzUWdaR0YwWVVOaGRHVm5iM0o1SUQwZ1pXNTJaV3h2Y0dWSmRHVnRWSGx3WlZSdlJHRjBZVU5oZEdWbmIzSjVLSFI1Y0dVcE93b2dJQ0FnSUNCcFppQW9hWE5TWVhSbFRHbHRhWFJsWkNoeVlYUmxUR2x0YVhSekxDQmtZWFJoUTJGMFpXZHZjbmtwS1NCN0NpQWdJQ0FnSUNBZ1kyOXVjM1FnWlhabGJuUWdQU0JuWlhSRmRtVnVkRVp2Y2tWdWRtVnNiM0JsU1hSbGJTaHBkR1Z0TENCMGVYQmxLVHNLSUNBZ0lDQWdJQ0J2Y0hScGIyNXpMbkpsWTI5eVpFUnliM0J3WldSRmRtVnVkQ2duY21GMFpXeHBiV2wwWDJKaFkydHZabVluTENCa1lYUmhRMkYwWldkdmNua3NJR1YyWlc1MEtUc0tJQ0FnSUNBZ2ZTQmxiSE5sSUhzS0lDQWdJQ0FnSUNCbWFXeDBaWEpsWkVWdWRtVnNiM0JsU1hSbGJYTXVjSFZ6YUNocGRHVnRLVHNLSUNBZ0lDQWdmUW9nSUNBZ2ZTazdDZ29nSUNBZ0x5OGdVMnRwY0NCelpXNWthVzVuSUdsbUlHVnVkbVZzYjNCbElHbHpJR1Z0Y0hSNUlHRm1kR1Z5SUdacGJIUmxjbWx1WnlCdmRYUWdjbUYwWlNCc2FXMXBkR1ZrSUdWMlpXNTBjd29nSUNBZ2FXWWdLR1pwYkhSbGNtVmtSVzUyWld4dmNHVkpkR1Z0Y3k1c1pXNW5kR2dnUFQwOUlEQXBJSHNLSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Wa1UzbHVZMUJ5YjIxcGMyVW9LVHNLSUNBZ0lIMEtDaUFnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMV1Y0Y0d4cFkybDBMV0Z1ZVFvZ0lDQWdZMjl1YzNRZ1ptbHNkR1Z5WldSRmJuWmxiRzl3WlNBOUlHTnlaV0YwWlVWdWRtVnNiM0JsS0dWdWRtVnNiM0JsV3pCZExDQm1hV3gwWlhKbFpFVnVkbVZzYjNCbFNYUmxiWE1nS1RzS0NpQWdJQ0F2THlCRGNtVmhkR1Z6SUdOc2FXVnVkQ0J5WlhCdmNuUWdabTl5SUdWaFkyZ2dhWFJsYlNCcGJpQmhiaUJsYm5abGJHOXdaUW9nSUNBZ1kyOXVjM1FnY21WamIzSmtSVzUyWld4dmNHVk1iM056SUQwZ0tISmxZWE52YmlrZ1BUNGdld29nSUNBZ0lDQm1iM0pGWVdOb1JXNTJaV3h2Y0dWSmRHVnRLR1pwYkhSbGNtVmtSVzUyWld4dmNHVXNJQ2hwZEdWdExDQjBlWEJsS1NBOVBpQjdDaUFnSUNBZ0lDQWdZMjl1YzNRZ1pYWmxiblFnUFNCblpYUkZkbVZ1ZEVadmNrVnVkbVZzYjNCbFNYUmxiU2hwZEdWdExDQjBlWEJsS1RzS0lDQWdJQ0FnSUNCdmNIUnBiMjV6TG5KbFkyOXlaRVJ5YjNCd1pXUkZkbVZ1ZENoeVpXRnpiMjRzSUdWdWRtVnNiM0JsU1hSbGJWUjVjR1ZVYjBSaGRHRkRZWFJsWjI5eWVTaDBlWEJsS1N3Z1pYWmxiblFwT3dvZ0lDQWdJQ0I5S1RzS0lDQWdJSDA3Q2dvZ0lDQWdZMjl1YzNRZ2NtVnhkV1Z6ZEZSaGMyc2dQU0FvS1NBOVBnb2dJQ0FnSUNCdFlXdGxVbVZ4ZFdWemRDaDdJR0p2WkhrNklITmxjbWxoYkdsNlpVVnVkbVZzYjNCbEtHWnBiSFJsY21Wa1JXNTJaV3h2Y0dVc0lHOXdkR2x2Ym5NdWRHVjRkRVZ1WTI5a1pYSXBJSDBwTG5Sb1pXNG9DaUFnSUNBZ0lDQWdjbVZ6Y0c5dWMyVWdQVDRnZXdvZ0lDQWdJQ0FnSUNBZ0x5OGdWMlVnWkc5dUozUWdkMkZ1ZENCMGJ5QjBhSEp2ZHlCdmJpQk9UMHNnY21WemNHOXVjMlZ6TENCaWRYUWdkMlVnZDJGdWRDQjBieUJoZENCc1pXRnpkQ0JzYjJjZ2RHaGxiUW9nSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjM0J2Ym5ObExuTjBZWFIxYzBOdlpHVWdJVDA5SUhWdVpHVm1hVzVsWkNBbUppQW9jbVZ6Y0c5dWMyVXVjM1JoZEhWelEyOWtaU0E4SURJd01DQjhmQ0J5WlhOd2IyNXpaUzV6ZEdGMGRYTkRiMlJsSUQ0OUlETXdNQ2twSUhzS0lDQWdJQ0FnSUNBZ0lDQWdSRVZDVlVkZlFsVkpURVFnSmlZZ2JHOW5aMlZ5TG5kaGNtNG9ZRk5sYm5SeWVTQnlaWE53YjI1a1pXUWdkMmwwYUNCemRHRjBkWE1nWTI5a1pTQWtlM0psYzNCdmJuTmxMbk4wWVhSMWMwTnZaR1Y5SUhSdklITmxiblFnWlhabGJuUXVZQ2s3Q2lBZ0lDQWdJQ0FnSUNCOUNnb2dJQ0FnSUNBZ0lDQWdjbUYwWlV4cGJXbDBjeUE5SUhWd1pHRjBaVkpoZEdWTWFXMXBkSE1vY21GMFpVeHBiV2wwY3l3Z2NtVnpjRzl1YzJVcE93b2dJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM0J2Ym5ObE93b2dJQ0FnSUNBZ0lIMHNDaUFnSUNBZ0lDQWdaWEp5YjNJZ1BUNGdld29nSUNBZ0lDQWdJQ0FnY21WamIzSmtSVzUyWld4dmNHVk1iM056S0NkdVpYUjNiM0pyWDJWeWNtOXlKeWs3Q2lBZ0lDQWdJQ0FnSUNCMGFISnZkeUJsY25KdmNqc0tJQ0FnSUNBZ0lDQjlMQW9nSUNBZ0lDQXBPd29LSUNBZ0lISmxkSFZ5YmlCaWRXWm1aWEl1WVdSa0tISmxjWFZsYzNSVVlYTnJLUzUwYUdWdUtBb2dJQ0FnSUNCeVpYTjFiSFFnUFQ0Z2NtVnpkV3gwTEFvZ0lDQWdJQ0JsY25KdmNpQTlQaUI3Q2lBZ0lDQWdJQ0FnYVdZZ0tHVnljbTl5SUdsdWMzUmhibU5sYjJZZ1UyVnVkSEo1UlhKeWIzSXBJSHNLSUNBZ0lDQWdJQ0FnSUVSRlFsVkhYMEpWU1V4RUlDWW1JR3h2WjJkbGNpNWxjbkp2Y2lnblUydHBjSEJsWkNCelpXNWthVzVuSUdWMlpXNTBJR0psWTJGMWMyVWdZblZtWm1WeUlHbHpJR1oxYkd3dUp5azdDaUFnSUNBZ0lDQWdJQ0J5WldOdmNtUkZiblpsYkc5d1pVeHZjM01vSjNGMVpYVmxYMjkyWlhKbWJHOTNKeWs3Q2lBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaV1JUZVc1alVISnZiV2x6WlNncE93b2dJQ0FnSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCbGNuSnZjanNLSUNBZ0lDQWdJQ0I5Q2lBZ0lDQWdJSDBzQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVjJVZ2RYTmxJSFJvYVhNZ2RHOGdhV1JsYm5ScFptbG1lU0JwWmlCMGFHVWdkSEpoYm5Od2IzSjBJR2x6SUhSb1pTQmlZWE5sSUhSeVlXNXpjRzl5ZEFvZ0lDOHZJRlJQUkU4Z0tIWTRLVG9nVW1WdGIzWmxJSFJvYVhNZ1lXZGhhVzRnWVhNZ2QyVW5iR3dnYm04Z2JHOXVaMlZ5SUc1bFpXUWdhWFFLSUNCelpXNWtMbDlmYzJWdWRISjVYMTlpWVhObFZISmhibk53YjNKMFgxOGdQU0IwY25WbE93b0tJQ0J5WlhSMWNtNGdld29nSUNBZ2MyVnVaQ3dLSUNBZ0lHWnNkWE5vTEFvZ0lIMDdDbjBLQ21aMWJtTjBhVzl1SUdkbGRFVjJaVzUwUm05eVJXNTJaV3h2Y0dWSmRHVnRLR2wwWlcwc0lIUjVjR1VwSUhzS0lDQnBaaUFvZEhsd1pTQWhQVDBnSjJWMlpXNTBKeUFtSmlCMGVYQmxJQ0U5UFNBbmRISmhibk5oWTNScGIyNG5LU0I3Q2lBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa093b2dJSDBLQ2lBZ2NtVjBkWEp1SUVGeWNtRjVMbWx6UVhKeVlYa29hWFJsYlNrZ1B5QW9hWFJsYlNBcFd6RmRJRG9nZFc1a1pXWnBibVZrT3dwOUNnb3ZLaW9nYm05eWJXRnNhWHBsY3lCWGFXNWtiM2R6SUhCaGRHaHpJQ292Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZkcGJtUnZkM05RWVhSb0tIQmhkR2dwSUhzS0lDQnlaWFIxY200Z2NHRjBhQW9nSUNBZ0xuSmxjR3hoWTJVb0wxNWJRUzFhWFRvdkxDQW5KeWtnTHk4Z2NtVnRiM1psSUZkcGJtUnZkM010YzNSNWJHVWdjSEpsWm1sNENpQWdJQ0F1Y21Wd2JHRmpaU2d2WEZ3dlp5d2dKeThuS1RzZ0x5OGdjbVZ3YkdGalpTQmhiR3dnWUZ4Z0lHbHVjM1JoYm1ObGN5QjNhWFJvSUdBdllBcDlDZ292S2lvZ1EzSmxZWFJsY3lCaElHWjFibU4wYVc5dUlIUm9ZWFFnWjJWMGN5QjBhR1VnYlc5a2RXeGxJRzVoYldVZ1puSnZiU0JoSUdacGJHVnVZVzFsSUNvdkNtWjFibU4wYVc5dUlHTnlaV0YwWlVkbGRFMXZaSFZzWlVaeWIyMUdhV3hsYm1GdFpTZ0tJQ0JpWVhObFVHRjBhQ0E5SUhCeWIyTmxjM011WVhKbmRsc3hYU0EvSUdScGNtNWhiV1VvY0hKdlkyVnpjeTVoY21kMld6RmRLU0E2SUhCeWIyTmxjM011WTNka0tDa3NDaUFnYVhOWGFXNWtiM2R6SUQwZ2MyVndJRDA5UFNBblhGd25MQW9wSUhzS0lDQmpiMjV6ZENCdWIzSnRZV3hwZW1Wa1FtRnpaU0E5SUdselYybHVaRzkzY3lBL0lHNXZjbTFoYkdsNlpWZHBibVJ2ZDNOUVlYUm9LR0poYzJWUVlYUm9LU0E2SUdKaGMyVlFZWFJvT3dvS0lDQnlaWFIxY200Z0tHWnBiR1Z1WVcxbEtTQTlQaUI3Q2lBZ0lDQnBaaUFvSVdacGJHVnVZVzFsS1NCN0NpQWdJQ0FnSUhKbGRIVnlianNLSUNBZ0lIMEtDaUFnSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrUm1sc1pXNWhiV1VnUFNCcGMxZHBibVJ2ZDNNZ1B5QnViM0p0WVd4cGVtVlhhVzVrYjNkelVHRjBhQ2htYVd4bGJtRnRaU2tnT2lCbWFXeGxibUZ0WlRzS0NpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnY0hKbFptVnlMV052Ym5OMENpQWdJQ0JzWlhRZ2V5QmthWElzSUdKaGMyVTZJR1pwYkdVc0lHVjRkQ0I5SUQwZ2NHOXphWGd1Y0dGeWMyVW9ibTl5YldGc2FYcGxaRVpwYkdWdVlXMWxLVHNLQ2lBZ0lDQnBaaUFvWlhoMElEMDlQU0FuTG1wekp5QjhmQ0JsZUhRZ1BUMDlJQ2N1Yldwekp5QjhmQ0JsZUhRZ1BUMDlJQ2N1WTJwekp5a2dld29nSUNBZ0lDQm1hV3hsSUQwZ1ptbHNaUzV6YkdsalpTZ3dMQ0JsZUhRdWJHVnVaM1JvSUNvZ0xURXBPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDZ2haR2x5S1NCN0NpQWdJQ0FnSUM4dklFNXZJR1JwY201aGJXVWdkMmhoZEhOdlpYWmxjZ29nSUNBZ0lDQmthWElnUFNBbkxpYzdDaUFnSUNCOUNnb2dJQ0FnWTI5dWMzUWdiaUE5SUdScGNpNXNZWE4wU1c1a1pYaFBaaWduTDI1dlpHVmZiVzlrZFd4bGN5Y3BPd29nSUNBZ2FXWWdLRzRnUGlBdE1Ta2dld29nSUNBZ0lDQnlaWFIxY200Z1lDUjdaR2x5TG5Oc2FXTmxLRzRnS3lBeE5Da3VjbVZ3YkdGalpTZ3ZYQzh2Wnl3Z0p5NG5LWDA2Skh0bWFXeGxmV0E3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdUR1YwSjNNZ2MyVmxJR2xtSUdsMEozTWdZU0J3WVhKMElHOW1JSFJvWlNCdFlXbHVJRzF2WkhWc1pRb2dJQ0FnTHk4Z1ZHOGdZbVVnWVNCd1lYSjBJRzltSUcxaGFXNGdiVzlrZFd4bExDQnBkQ0JvWVhNZ2RHOGdjMmhoY21VZ2RHaGxJSE5oYldVZ1ltRnpaUW9nSUNBZ2FXWWdLR1JwY2k1emRHRnlkSE5YYVhSb0tHNXZjbTFoYkdsNlpXUkNZWE5sS1NrZ2V3b2dJQ0FnSUNCc1pYUWdiVzlrZFd4bFRtRnRaU0E5SUdScGNpNXpiR2xqWlNodWIzSnRZV3hwZW1Wa1FtRnpaUzVzWlc1bmRHZ2dLeUF4S1M1eVpYQnNZV05sS0M5Y0x5OW5MQ0FuTGljcE93b0tJQ0FnSUNBZ2FXWWdLRzF2WkhWc1pVNWhiV1VwSUhzS0lDQWdJQ0FnSUNCdGIyUjFiR1ZPWVcxbElDczlJQ2M2SnpzS0lDQWdJQ0FnZlFvZ0lDQWdJQ0J0YjJSMWJHVk9ZVzFsSUNzOUlHWnBiR1U3Q2dvZ0lDQWdJQ0J5WlhSMWNtNGdiVzlrZFd4bFRtRnRaVHNLSUNBZ0lIMEtDaUFnSUNCeVpYUjFjbTRnWm1sc1pUc0tJQ0I5T3dwOUNncG1kVzVqZEdsdmJpQmZiblZzYkdsemFFTnZZV3hsYzJObEpESW9iR2h6TENCeWFITkdiaWtnZXlCcFppQW9iR2h6SUNFOUlHNTFiR3dwSUhzZ2NtVjBkWEp1SUd4b2N6c2dmU0JsYkhObElIc2djbVYwZFhKdUlISm9jMFp1S0NrN0lIMGdmUzhxS2dvZ0tpQlVhR2x6SUdOdlpHVWdkMkZ6SUc5eWFXZHBibUZzYkhrZ1ptOXlhMlZrSUdaeWIyMGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMVJ2YjFSaGJHeE9ZWFJsTDNCeWIzaDVMV0ZuWlc1MGN5OTBjbVZsTDJJeE16TXlPVFZtWkRFMlpqWTBOelUxTnpoaU5tSXhOV0prT1dJMFpUTXpaV05pTUdRd1lqY0tJQ29nVjJsMGFDQjBhR1VnWm05c2JHOTNhVzVuSUd4cFkyVnVZMlU2Q2lBcUNpQXFJQ2hVYUdVZ1RVbFVJRXhwWTJWdWMyVXBDaUFxQ2lBcUlFTnZjSGx5YVdkb2RDQW9ZeWtnTWpBeE15Qk9ZWFJvWVc0Z1VtRnFiR2xqYUNBOGJtRjBhR0Z1UUhSdmIzUmhiR3h1WVhSbExtNWxkRDRxQ2lBcUNpQXFJRkJsY20xcGMzTnBiMjRnYVhNZ2FHVnlaV0o1SUdkeVlXNTBaV1FzSUdaeVpXVWdiMllnWTJoaGNtZGxMQ0IwYnlCaGJua2djR1Z5YzI5dUlHOWlkR0ZwYm1sdVp3b2dLaUJoSUdOdmNIa2diMllnZEdocGN5QnpiMlowZDJGeVpTQmhibVFnWVhOemIyTnBZWFJsWkNCa2IyTjFiV1Z1ZEdGMGFXOXVJR1pwYkdWeklDaDBhR1VLSUNvZ0oxTnZablIzWVhKbEp5a3NJSFJ2SUdSbFlXd2dhVzRnZEdobElGTnZablIzWVhKbElIZHBkR2h2ZFhRZ2NtVnpkSEpwWTNScGIyNHNJR2x1WTJ4MVpHbHVad29nS2lCM2FYUm9iM1YwSUd4cGJXbDBZWFJwYjI0Z2RHaGxJSEpwWjJoMGN5QjBieUIxYzJVc0lHTnZjSGtzSUcxdlpHbG1lU3dnYldWeVoyVXNJSEIxWW14cGMyZ3NDaUFxSUdScGMzUnlhV0oxZEdVc0lITjFZbXhwWTJWdWMyVXNJR0Z1WkM5dmNpQnpaV3hzSUdOdmNHbGxjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXNJR0Z1WkNCMGJ3b2dLaUJ3WlhKdGFYUWdjR1Z5YzI5dWN5QjBieUIzYUc5dElIUm9aU0JUYjJaMGQyRnlaU0JwY3lCbWRYSnVhWE5vWldRZ2RHOGdaRzhnYzI4c0lITjFZbXBsWTNRZ2RHOEtJQ29nZEdobElHWnZiR3h2ZDJsdVp5QmpiMjVrYVhScGIyNXpPaW9LSUNvS0lDb2dWR2hsSUdGaWIzWmxJR052Y0hseWFXZG9kQ0J1YjNScFkyVWdZVzVrSUhSb2FYTWdjR1Z5YldsemMybHZiaUJ1YjNScFkyVWdjMmhoYkd3Z1ltVUtJQ29nYVc1amJIVmtaV1FnYVc0Z1lXeHNJR052Y0dsbGN5QnZjaUJ6ZFdKemRHRnVkR2xoYkNCd2IzSjBhVzl1Y3lCdlppQjBhR1VnVTI5bWRIZGhjbVV1S2dvZ0tnb2dLaUJVU0VVZ1UwOUdWRmRCVWtVZ1NWTWdVRkpQVmtsRVJVUWdKMEZUSUVsVEp5d2dWMGxVU0U5VlZDQlhRVkpTUVU1VVdTQlBSaUJCVGxrZ1MwbE9SQ3dLSUNvZ1JWaFFVa1ZUVXlCUFVpQkpUVkJNU1VWRUxDQkpUa05NVlVSSlRrY2dRbFZVSUU1UFZDQk1TVTFKVkVWRUlGUlBJRlJJUlNCWFFWSlNRVTVVU1VWVElFOUdDaUFxSUUxRlVrTklRVTVVUVVKSlRFbFVXU3dnUmtsVVRrVlRVeUJHVDFJZ1FTQlFRVkpVU1VOVlRFRlNJRkJWVWxCUFUwVWdRVTVFSUU1UFRrbE9SbEpKVGtkRlRVVk9WQzRLSUNvZ1NVNGdUazhnUlZaRlRsUWdVMGhCVEV3Z1ZFaEZJRUZWVkVoUFVsTWdUMUlnUTA5UVdWSkpSMGhVSUVoUFRFUkZVbE1nUWtVZ1RFbEJRa3hGSUVaUFVpQkJUbGtLSUNvZ1EweEJTVTBzSUVSQlRVRkhSVk1nVDFJZ1QxUklSVklnVEVsQlFrbE1TVlJaTENCWFNFVlVTRVZTSUVsT0lFRk9JRUZEVkVsUFRpQlBSaUJEVDA1VVVrRkRWQ3dLSUNvZ1ZFOVNWQ0JQVWlCUFZFaEZVbGRKVTBVc0lFRlNTVk5KVGtjZ1JsSlBUU3dnVDFWVUlFOUdJRTlTSUVsT0lFTlBUazVGUTFSSlQwNGdWMGxVU0NCVVNFVUtJQ29nVTA5R1ZGZEJVa1VnVDFJZ1ZFaEZJRlZUUlNCUFVpQlBWRWhGVWlCRVJVRk1TVTVIVXlCSlRpQlVTRVVnVTA5R1ZGZEJVa1V1Q2lBcUx3b0tZMjl1YzNRZ1NVNVVSVkpPUVV3Z1BTQlRlVzFpYjJ3b0owRm5aVzUwUW1GelpVbHVkR1Z5Ym1Gc1UzUmhkR1VuS1RzS0NtTnNZWE56SUVGblpXNTBJR1Y0ZEdWdVpITWdhSFIwY0M1QloyVnVkQ0I3Q2dvZ0lDOHZJRk5sZENCaWVTQmdhSFIwY0M1QloyVnVkR0FnTFNCdGFYTnphVzVuSUdaeWIyMGdZRUIwZVhCbGN5OXViMlJsWUFvS0lDQmpiMjV6ZEhKMVkzUnZjaWh2Y0hSektTQjdDaUFnSUNCemRYQmxjaWh2Y0hSektUc0tJQ0FnSUhSb2FYTmJTVTVVUlZKT1FVeGRJRDBnZTMwN0NpQWdmUW9LSUNBdktpb0tJQ0FnS2lCRVpYUmxjbTFwYm1VZ2QyaGxkR2hsY2lCMGFHbHpJR2x6SUdGdUlHQm9kSFJ3WUNCdmNpQmdhSFIwY0hOZ0lISmxjWFZsYzNRdUNpQWdJQ292Q2lBZ2FYTlRaV04xY21WRmJtUndiMmx1ZENodmNIUnBiMjV6S1NCN0NpQWdJQ0JwWmlBb2IzQjBhVzl1Y3lrZ2V3b2dJQ0FnSUNBdkx5QkdhWEp6ZENCamFHVmpheUIwYUdVZ1lITmxZM1Z5WlVWdVpIQnZhVzUwWUNCd2NtOXdaWEowZVNCbGVIQnNhV05wZEd4NUxDQnphVzVqWlNCMGFHbHpDaUFnSUNBZ0lDOHZJRzFsWVc1eklIUm9ZWFFnWVNCd1lYSmxiblFnWUVGblpXNTBZQ0JwY3lBaWNHRnpjMmx1WnlCMGFISnZkV2RvSWlCMGJ5QjBhR2x6SUdsdWMzUmhibU5sTGdvZ0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxXVjRjR3hwWTJsMExXRnVlU3dnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxYVnVjMkZtWlMxdFpXMWlaWEl0WVdOalpYTnpDaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdLRzl3ZEdsdmJuTWdLUzV6WldOMWNtVkZibVJ3YjJsdWRDQTlQVDBnSjJKdmIyeGxZVzRuS1NCN0NpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5d2RHbHZibk11YzJWamRYSmxSVzVrY0c5cGJuUTdDaUFnSUNBZ0lIMEtDaUFnSUNBZ0lDOHZJRWxtSUc1dklHVjRjR3hwWTJsMElHQnpaV04xY21WZ0lHVnVaSEJ2YVc1MExDQmphR1ZqYXlCcFppQmdjSEp2ZEc5amIyeGdJSEJ5YjNCbGNuUjVJR2x6Q2lBZ0lDQWdJQzh2SUhObGRDNGdWR2hwY3lCM2FXeHNJSFZ6ZFdGc2JIa2dZbVVnZEdobElHTmhjMlVnYzJsdVkyVWdkWE5wYm1jZ1lTQm1kV3hzSUhOMGNtbHVaeUJWVWt3S0lDQWdJQ0FnTHk4Z2IzSWdZRlZTVEdBZ2FXNXpkR0Z1WTJVZ2MyaHZkV3hrSUdKbElIUm9aU0J0YjNOMElHTnZiVzF2YmlCMWMyRm5aUzRLSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2Y0hScGIyNXpMbkJ5YjNSdlkyOXNJRDA5UFNBbmMzUnlhVzVuSnlrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCdmNIUnBiMjV6TG5CeWIzUnZZMjlzSUQwOVBTQW5hSFIwY0hNNkp6c0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvS0lDQWdJQzh2SUVacGJtRnNiSGtzSUdsbUlHNXZJR0J3Y205MGIyTnZiR0FnY0hKdmNHVnlkSGtnZDJGeklITmxkQ3dnZEdobGJpQm1ZV3hzSUdKaFkyc2dkRzhLSUNBZ0lDOHZJR05vWldOcmFXNW5JSFJvWlNCemRHRmpheUIwY21GalpTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCallXeHNJSE4wWVdOckxDQmhibVFnZEhKNUlIUnZDaUFnSUNBdkx5QmtaWFJsWTNRZ2RHaGxJQ0pvZEhSd2N5SWdiVzlrZFd4bExnb2dJQ0FnWTI5dWMzUWdleUJ6ZEdGamF5QjlJRDBnYm1WM0lFVnljbTl5S0NrN0NpQWdJQ0JwWmlBb2RIbHdaVzltSUhOMFlXTnJJQ0U5UFNBbmMzUnlhVzVuSnlrZ2NtVjBkWEp1SUdaaGJITmxPd29nSUNBZ2NtVjBkWEp1SUhOMFlXTnJMbk53YkdsMEtDZGNiaWNwTG5OdmJXVW9iQ0E5UGlCc0xtbHVaR1Y0VDJZb0p5aG9kSFJ3Y3k1cWN6b25LU0FoUFQwZ0xURWdmSHdnYkM1cGJtUmxlRTltS0NkdWIyUmxPbWgwZEhCek9pY3BJQ0U5UFNBdE1TazdDaUFnZlFvS0lDQmpjbVZoZEdWVGIyTnJaWFFvY21WeExDQnZjSFJwYjI1ekxDQmpZaWtnZXdvZ0lDQWdZMjl1YzNRZ1kyOXVibVZqZEU5d2RITWdQU0I3Q2lBZ0lDQWdJQzR1TG05d2RHbHZibk1zQ2lBZ0lDQWdJSE5sWTNWeVpVVnVaSEJ2YVc1ME9pQjBhR2x6TG1selUyVmpkWEpsUlc1a2NHOXBiblFvYjNCMGFXOXVjeWtzQ2lBZ0lDQjlPd29nSUNBZ1VISnZiV2x6WlM1eVpYTnZiSFpsS0NrS0lDQWdJQ0FnTG5Sb1pXNG9LQ2tnUFQ0Z2RHaHBjeTVqYjI1dVpXTjBLSEpsY1N3Z1kyOXVibVZqZEU5d2RITXBLUW9nSUNBZ0lDQXVkR2hsYmloemIyTnJaWFFnUFQ0Z2V3b2dJQ0FnSUNBZ0lHbG1JQ2h6YjJOclpYUWdhVzV6ZEdGdVkyVnZaaUJvZEhSd0xrRm5aVzUwS1NCN0NpQWdJQ0FnSUNBZ0lDQXZMeUJBZEhNdFpYaHdaV04wTFdWeWNtOXlJR0JoWkdSU1pYRjFaWE4wS0NsZ0lHbHpiaWQwSUdSbFptbHVaV1FnYVc0Z1lFQjBlWEJsY3k5dWIyUmxZQW9nSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSE52WTJ0bGRDNWhaR1JTWlhGMVpYTjBLSEpsY1N3Z1kyOXVibVZqZEU5d2RITXBPd29nSUNBZ0lDQWdJSDBLSUNBZ0lDQWdJQ0IwYUdselcwbE9WRVZTVGtGTVhTNWpkWEp5Wlc1MFUyOWphMlYwSUQwZ2MyOWphMlYwT3dvZ0lDQWdJQ0FnSUM4dklFQjBjeTFsZUhCbFkzUXRaWEp5YjNJZ1lHTnlaV0YwWlZOdlkydGxkQ2dwWUNCcGMyNG5kQ0JrWldacGJtVmtJR2x1SUdCQWRIbHdaWE12Ym05a1pXQUtJQ0FnSUNBZ0lDQnpkWEJsY2k1amNtVmhkR1ZUYjJOclpYUW9jbVZ4TENCdmNIUnBiMjV6TENCallpazdDaUFnSUNBZ0lIMHNJR05pS1RzS0lDQjlDZ29nSUdOeVpXRjBaVU52Ym01bFkzUnBiMjRvS1NCN0NpQWdJQ0JqYjI1emRDQnpiMk5yWlhRZ1BTQjBhR2x6VzBsT1ZFVlNUa0ZNWFM1amRYSnlaVzUwVTI5amEyVjBPd29nSUNBZ2RHaHBjMXRKVGxSRlVrNUJURjB1WTNWeWNtVnVkRk52WTJ0bGRDQTlJSFZ1WkdWbWFXNWxaRHNLSUNBZ0lHbG1JQ2doYzI5amEyVjBLU0I3Q2lBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UbThnYzI5amEyVjBJSGRoY3lCeVpYUjFjbTVsWkNCcGJpQjBhR1VnWUdOdmJtNWxZM1FvS1dBZ1puVnVZM1JwYjI0bktUc0tJQ0FnSUgwS0lDQWdJSEpsZEhWeWJpQnpiMk5yWlhRN0NpQWdmUW9LSUNCblpYUWdaR1ZtWVhWc2RGQnZjblFvS1NCN0NpQWdJQ0J5WlhSMWNtNGdYMjUxYkd4cGMyaERiMkZzWlhOalpTUXlLSFJvYVhOYlNVNVVSVkpPUVV4ZExtUmxabUYxYkhSUWIzSjBMQ0FvS1NBOVBpQW9JQ2gwYUdsekxuQnliM1J2WTI5c0lEMDlQU0FuYUhSMGNITTZKeUEvSURRME15QTZJRGd3S1NrcE93b2dJSDBLQ2lBZ2MyVjBJR1JsWm1GMWJIUlFiM0owS0hZcElIc0tJQ0FnSUdsbUlDaDBhR2x6VzBsT1ZFVlNUa0ZNWFNrZ2V3b2dJQ0FnSUNCMGFHbHpXMGxPVkVWU1RrRk1YUzVrWldaaGRXeDBVRzl5ZENBOUlIWTdDaUFnSUNCOUNpQWdmUW9LSUNCblpYUWdjSEp2ZEc5amIyd29LU0I3Q2lBZ0lDQnlaWFIxY200Z1gyNTFiR3hwYzJoRGIyRnNaWE5qWlNReUtIUm9hWE5iU1U1VVJWSk9RVXhkTG5CeWIzUnZZMjlzTENBb0tTQTlQaUFvSUNoMGFHbHpMbWx6VTJWamRYSmxSVzVrY0c5cGJuUW9LU0EvSUNkb2RIUndjem9uSURvZ0oyaDBkSEE2SnlrcEtUc0tJQ0I5Q2dvZ0lITmxkQ0J3Y205MGIyTnZiQ2gyS1NCN0NpQWdJQ0JwWmlBb2RHaHBjMXRKVGxSRlVrNUJURjBwSUhzS0lDQWdJQ0FnZEdocGMxdEpUbFJGVWs1QlRGMHVjSEp2ZEc5amIyd2dQU0IyT3dvZ0lDQWdmUW9nSUgwS2ZRb0tablZ1WTNScGIyNGdaR1ZpZFdja01TZ3VMaTVoY21kektTQjdDaUFnYkc5bloyVnlMbXh2WnlnblcyaDBkSEJ6TFhCeWIzaDVMV0ZuWlc1ME9uQmhjbk5sTFhCeWIzaDVMWEpsYzNCdmJuTmxYU2NzSUM0dUxtRnlaM01wT3dwOUNncG1kVzVqZEdsdmJpQndZWEp6WlZCeWIzaDVVbVZ6Y0c5dWMyVW9jMjlqYTJWMEtTQjdDaUFnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIc0tJQ0FnSUM4dklIZGxJRzVsWldRZ2RHOGdZblZtWm1WeUlHRnVlU0JJVkZSUUlIUnlZV1ptYVdNZ2RHaGhkQ0JvWVhCd1pXNXpJSGRwZEdnZ2RHaGxJSEJ5YjNoNUlHSmxabTl5WlNCM1pTQm5aWFFLSUNBZ0lDOHZJSFJvWlNCRFQwNU9SVU5VSUhKbGMzQnZibk5sTENCemJ5QjBhR0YwSUdsbUlIUm9aU0J5WlhOd2IyNXpaU0JwY3lCaGJubDBhR2x1WnlCdmRHaGxjaUIwYUdGdUlHRnVJQ0l5TURBaUNpQWdJQ0F2THlCeVpYTndiMjV6WlNCamIyUmxMQ0IwYUdWdUlIZGxJR05oYmlCeVpTMXdiR0Y1SUhSb1pTQWlaR0YwWVNJZ1pYWmxiblJ6SUc5dUlIUm9aU0J6YjJOclpYUWdiMjVqWlNCMGFHVUtJQ0FnSUM4dklFaFVWRkFnY0dGeWMyVnlJR2x6SUdodmIydGxaQ0IxY0M0dUxnb2dJQ0FnYkdWMElHSjFabVpsY25OTVpXNW5kR2dnUFNBd093b2dJQ0FnWTI5dWMzUWdZblZtWm1WeWN5QTlJRnRkT3dvS0lDQWdJR1oxYm1OMGFXOXVJSEpsWVdRb0tTQjdDaUFnSUNBZ0lHTnZibk4wSUdJZ1BTQnpiMk5yWlhRdWNtVmhaQ2dwT3dvZ0lDQWdJQ0JwWmlBb1lpa2diMjVrWVhSaEtHSXBPd29nSUNBZ0lDQmxiSE5sSUhOdlkydGxkQzV2Ym1ObEtDZHlaV0ZrWVdKc1pTY3NJSEpsWVdRcE93b2dJQ0FnZlFvS0lDQWdJR1oxYm1OMGFXOXVJR05zWldGdWRYQW9LU0I3Q2lBZ0lDQWdJSE52WTJ0bGRDNXlaVzF2ZG1WTWFYTjBaVzVsY2lnblpXNWtKeXdnYjI1bGJtUXBPd29nSUNBZ0lDQnpiMk5yWlhRdWNtVnRiM1psVEdsemRHVnVaWElvSjJWeWNtOXlKeXdnYjI1bGNuSnZjaWs3Q2lBZ0lDQWdJSE52WTJ0bGRDNXlaVzF2ZG1WTWFYTjBaVzVsY2lnbmNtVmhaR0ZpYkdVbkxDQnlaV0ZrS1RzS0lDQWdJSDBLQ2lBZ0lDQm1kVzVqZEdsdmJpQnZibVZ1WkNncElIc0tJQ0FnSUNBZ1kyeGxZVzUxY0NncE93b2dJQ0FnSUNCa1pXSjFaeVF4S0NkdmJtVnVaQ2NwT3dvZ0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLQ2RRY205NGVTQmpiMjV1WldOMGFXOXVJR1Z1WkdWa0lHSmxabTl5WlNCeVpXTmxhWFpwYm1jZ1EwOU9Ua1ZEVkNCeVpYTndiMjV6WlNjcEtUc0tJQ0FnSUgwS0NpQWdJQ0JtZFc1amRHbHZiaUJ2Ym1WeWNtOXlLR1Z5Y2lrZ2V3b2dJQ0FnSUNCamJHVmhiblZ3S0NrN0NpQWdJQ0FnSUdSbFluVm5KREVvSjI5dVpYSnliM0lnSlc4bkxDQmxjbklwT3dvZ0lDQWdJQ0J5WldwbFkzUW9aWEp5S1RzS0lDQWdJSDBLQ2lBZ0lDQm1kVzVqZEdsdmJpQnZibVJoZEdFb1lpa2dld29nSUNBZ0lDQmlkV1ptWlhKekxuQjFjMmdvWWlrN0NpQWdJQ0FnSUdKMVptWmxjbk5NWlc1bmRHZ2dLejBnWWk1c1pXNW5kR2c3Q2dvZ0lDQWdJQ0JqYjI1emRDQmlkV1ptWlhKbFpDQTlJRUoxWm1abGNpNWpiMjVqWVhRb1luVm1abVZ5Y3l3Z1luVm1abVZ5YzB4bGJtZDBhQ2s3Q2lBZ0lDQWdJR052Ym5OMElHVnVaRTltU0dWaFpHVnljeUE5SUdKMVptWmxjbVZrTG1sdVpHVjRUMllvSjF4eVhHNWNjbHh1SnlrN0Nnb2dJQ0FnSUNCcFppQW9aVzVrVDJaSVpXRmtaWEp6SUQwOVBTQXRNU2tnZXdvZ0lDQWdJQ0FnSUM4dklHdGxaWEFnWW5WbVptVnlhVzVuQ2lBZ0lDQWdJQ0FnWkdWaWRXY2tNU2duYUdGMlpTQnViM1FnY21WalpXbDJaV1FnWlc1a0lHOW1JRWhVVkZBZ2FHVmhaR1Z5Y3lCNVpYUXVMaTRuS1RzS0lDQWdJQ0FnSUNCeVpXRmtLQ2s3Q2lBZ0lDQWdJQ0FnY21WMGRYSnVPd29nSUNBZ0lDQjlDZ29nSUNBZ0lDQmpiMjV6ZENCb1pXRmtaWEpRWVhKMGN5QTlJR0oxWm1abGNtVmtMbk5zYVdObEtEQXNJR1Z1WkU5bVNHVmhaR1Z5Y3lrdWRHOVRkSEpwYm1jb0oyRnpZMmxwSnlrdWMzQnNhWFFvSjF4eVhHNG5LVHNLSUNBZ0lDQWdZMjl1YzNRZ1ptbHljM1JNYVc1bElEMGdhR1ZoWkdWeVVHRnlkSE11YzJocFpuUW9LVHNLSUNBZ0lDQWdhV1lnS0NGbWFYSnpkRXhwYm1VcElIc0tJQ0FnSUNBZ0lDQnpiMk5yWlhRdVpHVnpkSEp2ZVNncE93b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvYm1WM0lFVnljbTl5S0NkT2J5Qm9aV0ZrWlhJZ2NtVmpaV2wyWldRZ1puSnZiU0J3Y205NGVTQkRUMDVPUlVOVUlISmxjM0J2Ym5ObEp5a3BPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdacGNuTjBUR2x1WlZCaGNuUnpJRDBnWm1seWMzUk1hVzVsTG5Od2JHbDBLQ2NnSnlrN0NpQWdJQ0FnSUdOdmJuTjBJSE4wWVhSMWMwTnZaR1VnUFNBclptbHljM1JNYVc1bFVHRnlkSE5iTVYwN0NpQWdJQ0FnSUdOdmJuTjBJSE4wWVhSMWMxUmxlSFFnUFNCbWFYSnpkRXhwYm1WUVlYSjBjeTV6YkdsalpTZ3lLUzVxYjJsdUtDY2dKeWs3Q2lBZ0lDQWdJR052Ym5OMElHaGxZV1JsY25NZ1BTQjdmVHNLSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JvWldGa1pYSWdiMllnYUdWaFpHVnlVR0Z5ZEhNcElIc0tJQ0FnSUNBZ0lDQnBaaUFvSVdobFlXUmxjaWtnWTI5dWRHbHVkV1U3Q2lBZ0lDQWdJQ0FnWTI5dWMzUWdabWx5YzNSRGIyeHZiaUE5SUdobFlXUmxjaTVwYm1SbGVFOW1LQ2M2SnlrN0NpQWdJQ0FnSUNBZ2FXWWdLR1pwY25OMFEyOXNiMjRnUFQwOUlDMHhLU0I3Q2lBZ0lDQWdJQ0FnSUNCemIyTnJaWFF1WkdWemRISnZlU2dwT3dvZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvWUVsdWRtRnNhV1FnYUdWaFpHVnlJR1p5YjIwZ2NISnZlSGtnUTA5T1RrVkRWQ0J5WlhOd2IyNXpaVG9nSWlSN2FHVmhaR1Z5ZlNKZ0tTazdDaUFnSUNBZ0lDQWdmUW9nSUNBZ0lDQWdJR052Ym5OMElHdGxlU0E5SUdobFlXUmxjaTV6YkdsalpTZ3dMQ0JtYVhKemRFTnZiRzl1S1M1MGIweHZkMlZ5UTJGelpTZ3BPd29nSUNBZ0lDQWdJR052Ym5OMElIWmhiSFZsSUQwZ2FHVmhaR1Z5TG5Oc2FXTmxLR1pwY25OMFEyOXNiMjRnS3lBeEtTNTBjbWx0VTNSaGNuUW9LVHNLSUNBZ0lDQWdJQ0JqYjI1emRDQmpkWEp5Wlc1MElEMGdhR1ZoWkdWeWMxdHJaWGxkT3dvZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kzVnljbVZ1ZENBOVBUMGdKM04wY21sdVp5Y3BJSHNLSUNBZ0lDQWdJQ0FnSUdobFlXUmxjbk5iYTJWNVhTQTlJRnRqZFhKeVpXNTBMQ0IyWVd4MVpWMDdDaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hCY25KaGVTNXBjMEZ5Y21GNUtHTjFjbkpsYm5RcEtTQjdDaUFnSUNBZ0lDQWdJQ0JqZFhKeVpXNTBMbkIxYzJnb2RtRnNkV1VwT3dvZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3Q2lBZ0lDQWdJQ0FnSUNCb1pXRmtaWEp6VzJ0bGVWMGdQU0IyWVd4MVpUc0tJQ0FnSUNBZ0lDQjlDaUFnSUNBZ0lIMEtJQ0FnSUNBZ1pHVmlkV2NrTVNnbloyOTBJSEJ5YjNoNUlITmxjblpsY2lCeVpYTndiMjV6WlRvZ0pXOGdKVzhuTENCbWFYSnpkRXhwYm1Vc0lHaGxZV1JsY25NcE93b2dJQ0FnSUNCamJHVmhiblZ3S0NrN0NpQWdJQ0FnSUhKbGMyOXNkbVVvZXdvZ0lDQWdJQ0FnSUdOdmJtNWxZM1E2SUhzS0lDQWdJQ0FnSUNBZ0lITjBZWFIxYzBOdlpHVXNDaUFnSUNBZ0lDQWdJQ0J6ZEdGMGRYTlVaWGgwTEFvZ0lDQWdJQ0FnSUNBZ2FHVmhaR1Z5Y3l3S0lDQWdJQ0FnSUNCOUxBb2dJQ0FnSUNBZ0lHSjFabVpsY21Wa0xBb2dJQ0FnSUNCOUtUc0tJQ0FnSUgwS0NpQWdJQ0J6YjJOclpYUXViMjRvSjJWeWNtOXlKeXdnYjI1bGNuSnZjaWs3Q2lBZ0lDQnpiMk5yWlhRdWIyNG9KMlZ1WkNjc0lHOXVaVzVrS1RzS0NpQWdJQ0J5WldGa0tDazdDaUFnZlNrN0NuMEtDbVoxYm1OMGFXOXVJRjl1ZFd4c2FYTm9RMjloYkdWelkyVWtNU2hzYUhNc0lISm9jMFp1S1NCN0lHbG1JQ2hzYUhNZ0lUMGdiblZzYkNrZ2V5QnlaWFIxY200Z2JHaHpPeUI5SUdWc2MyVWdleUJ5WlhSMWNtNGdjbWh6Um00b0tUc2dmU0I5SUdaMWJtTjBhVzl1SUY5dmNIUnBiMjVoYkVOb1lXbHVKREVvYjNCektTQjdJR3hsZENCc1lYTjBRV05qWlhOelRFaFRJRDBnZFc1a1pXWnBibVZrT3lCc1pYUWdkbUZzZFdVZ1BTQnZjSE5iTUYwN0lHeGxkQ0JwSUQwZ01Uc2dkMmhwYkdVZ0tHa2dQQ0J2Y0hNdWJHVnVaM1JvS1NCN0lHTnZibk4wSUc5d0lEMGdiM0J6VzJsZE95QmpiMjV6ZENCbWJpQTlJRzl3YzF0cElDc2dNVjA3SUdrZ0t6MGdNanNnYVdZZ0tDaHZjQ0E5UFQwZ0oyOXdkR2x2Ym1Gc1FXTmpaWE56SnlCOGZDQnZjQ0E5UFQwZ0oyOXdkR2x2Ym1Gc1EyRnNiQ2NwSUNZbUlIWmhiSFZsSUQwOUlHNTFiR3dwSUhzZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkRzZ2ZTQnBaaUFvYjNBZ1BUMDlJQ2RoWTJObGMzTW5JSHg4SUc5d0lEMDlQU0FuYjNCMGFXOXVZV3hCWTJObGMzTW5LU0I3SUd4aGMzUkJZMk5sYzNOTVNGTWdQU0IyWVd4MVpUc2dkbUZzZFdVZ1BTQm1iaWgyWVd4MVpTazdJSDBnWld4elpTQnBaaUFvYjNBZ1BUMDlJQ2RqWVd4c0p5QjhmQ0J2Y0NBOVBUMGdKMjl3ZEdsdmJtRnNRMkZzYkNjcElIc2dkbUZzZFdVZ1BTQm1iaWdvTGk0dVlYSm5jeWtnUFQ0Z2RtRnNkV1V1WTJGc2JDaHNZWE4wUVdOalpYTnpURWhUTENBdUxpNWhjbWR6S1NrN0lHeGhjM1JCWTJObGMzTk1TRk1nUFNCMWJtUmxabWx1WldRN0lIMGdmU0J5WlhSMWNtNGdkbUZzZFdVN0lIMEtDbVoxYm1OMGFXOXVJR1JsWW5WbktDNHVMbUZ5WjNNcElIc0tJQ0JzYjJkblpYSXViRzluS0NkYmFIUjBjSE10Y0hKdmVIa3RZV2RsYm5SZEp5d2dMaTR1WVhKbmN5azdDbjBLQ2k4cUtnb2dLaUJVYUdVZ1lFaDBkSEJ6VUhKdmVIbEJaMlZ1ZEdBZ2FXMXdiR1Z0Wlc1MGN5QmhiaUJJVkZSUUlFRm5aVzUwSUhOMVltTnNZWE56SUhSb1lYUWdZMjl1Ym1WamRITWdkRzhLSUNvZ2RHaGxJSE53WldOcFptbGxaQ0FpU0ZSVVVDaHpLU0J3Y205NGVTQnpaWEoyWlhJaUlHbHVJRzl5WkdWeUlIUnZJSEJ5YjNoNUlFaFVWRkJUSUhKbGNYVmxjM1J6TGdvZ0tnb2dLaUJQZFhSbmIybHVaeUJJVkZSUUlISmxjWFZsYzNSeklHRnlaU0JtYVhKemRDQjBkVzV1Wld4bFpDQjBhSEp2ZFdkb0lIUm9aU0J3Y205NGVTQnpaWEoyWlhJZ2RYTnBibWNnZEdobENpQXFJR0JEVDA1T1JVTlVZQ0JJVkZSUUlISmxjWFZsYzNRZ2JXVjBhRzlrSUhSdklHVnpkR0ZpYkdsemFDQmhJR052Ym01bFkzUnBiMjRnZEc4Z2RHaGxJSEJ5YjNoNUlITmxjblpsY2l3S0lDb2dZVzVrSUhSb1pXNGdkR2hsSUhCeWIzaDVJSE5sY25abGNpQmpiMjV1WldOMGN5QjBieUIwYUdVZ1pHVnpkR2x1WVhScGIyNGdkR0Z5WjJWMElHRnVaQ0JwYzNOMVpYTWdkR2hsQ2lBcUlFaFVWRkFnY21WeGRXVnpkQ0JtY205dElIUm9aU0J3Y205NGVTQnpaWEoyWlhJdUNpQXFDaUFxSUdCb2RIUndjenBnSUhKbGNYVmxjM1J6SUdoaGRtVWdkR2hsYVhJZ2MyOWphMlYwSUdOdmJtNWxZM1JwYjI0Z2RYQm5jbUZrWldRZ2RHOGdWRXhUSUc5dVkyVUtJQ29nZEdobElHTnZibTVsWTNScGIyNGdkRzhnZEdobElIQnliM2g1SUhObGNuWmxjaUJvWVhNZ1ltVmxiaUJsYzNSaFlteHBjMmhsWkM0S0lDb3ZDbU5zWVhOeklFaDBkSEJ6VUhKdmVIbEJaMlZ1ZENCbGVIUmxibVJ6SUVGblpXNTBJSHNLSUNCemRHRjBhV01nWDE5cGJtbDBVM1JoZEdsaktDa2dlM1JvYVhNdWNISnZkRzlqYjJ4eklEMGdXeWRvZEhSd0p5d2dKMmgwZEhCekoxMDdJSDBLQ2lBZ1kyOXVjM1J5ZFdOMGIzSW9jSEp2ZUhrc0lHOXdkSE1wSUhzS0lDQWdJSE4xY0dWeUtHOXdkSE1wT3dvZ0lDQWdkR2hwY3k1dmNIUnBiMjV6SUQwZ2UzMDdDaUFnSUNCMGFHbHpMbkJ5YjNoNUlEMGdkSGx3Wlc5bUlIQnliM2g1SUQwOVBTQW5jM1J5YVc1bkp5QS9JRzVsZHlCVlVrd29jSEp2ZUhrcElEb2djSEp2ZUhrN0NpQWdJQ0IwYUdsekxuQnliM2g1U0dWaFpHVnljeUE5SUY5dWRXeHNhWE5vUTI5aGJHVnpZMlVrTVNoZmIzQjBhVzl1WVd4RGFHRnBiaVF4S0Z0dmNIUnpMQ0FuYjNCMGFXOXVZV3hCWTJObGMzTW5MQ0JmTWlBOVBpQmZNaTVvWldGa1pYSnpYU2tzSUNncElEMCtJQ2dnZTMwcEtUc0tJQ0FnSUdSbFluVm5LQ2REY21WaGRHbHVaeUJ1WlhjZ1NIUjBjSE5RY205NGVVRm5aVzUwSUdsdWMzUmhibU5sT2lBbGJ5Y3NJSFJvYVhNdWNISnZlSGt1YUhKbFppazdDZ29nSUNBZ0x5OGdWSEpwYlNCdlptWWdkR2hsSUdKeVlXTnJaWFJ6SUdaeWIyMGdTVkIyTmlCaFpHUnlaWE56WlhNS0lDQWdJR052Ym5OMElHaHZjM1FnUFNBb2RHaHBjeTV3Y205NGVTNW9iM04wYm1GdFpTQjhmQ0IwYUdsekxuQnliM2g1TG1odmMzUXBMbkpsY0d4aFkyVW9MMTVjVzN4Y1hTUXZaeXdnSnljcE93b2dJQ0FnWTI5dWMzUWdjRzl5ZENBOUlIUm9hWE11Y0hKdmVIa3VjRzl5ZENBL0lIQmhjbk5sU1c1MEtIUm9hWE11Y0hKdmVIa3VjRzl5ZEN3Z01UQXBJRG9nZEdocGN5NXdjbTk0ZVM1d2NtOTBiMk52YkNBOVBUMGdKMmgwZEhCek9pY2dQeUEwTkRNZ09pQTRNRHNLSUNBZ0lIUm9hWE11WTI5dWJtVmpkRTl3ZEhNZ1BTQjdDaUFnSUNBZ0lDOHZJRUYwZEdWdGNIUWdkRzhnYm1WbmIzUnBZWFJsSUdoMGRIQXZNUzR4SUdadmNpQndjbTk0ZVNCelpYSjJaWEp6SUhSb1lYUWdjM1Z3Y0c5eWRDQm9kSFJ3THpJS0lDQWdJQ0FnUVV4UVRsQnliM1J2WTI5c2N6b2dXeWRvZEhSd0x6RXVNU2RkTEFvZ0lDQWdJQ0F1TGk0b2IzQjBjeUEvSUc5dGFYUW9iM0IwY3l3Z0oyaGxZV1JsY25NbktTQTZJRzUxYkd3cExBb2dJQ0FnSUNCb2IzTjBMQW9nSUNBZ0lDQndiM0owTEFvZ0lDQWdmVHNLSUNCOUNnb2dJQzhxS2dvZ0lDQXFJRU5oYkd4bFpDQjNhR1Z1SUhSb1pTQnViMlJsTFdOdmNtVWdTRlJVVUNCamJHbGxiblFnYkdsaWNtRnllU0JwY3lCamNtVmhkR2x1WnlCaENpQWdJQ29nYm1WM0lFaFVWRkFnY21WeGRXVnpkQzRLSUNBZ0tpOEtJQ0JoYzNsdVl5QmpiMjV1WldOMEtISmxjU3dnYjNCMGN5a2dld29nSUNBZ1kyOXVjM1FnZXlCd2NtOTRlU0I5SUQwZ2RHaHBjenNLQ2lBZ0lDQnBaaUFvSVc5d2RITXVhRzl6ZENrZ2V3b2dJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZE9ieUFpYUc5emRDSWdjSEp2ZG1sa1pXUW5LVHNLSUNBZ0lIMEtDaUFnSUNBdkx5QkRjbVZoZEdVZ1lTQnpiMk5yWlhRZ1kyOXVibVZqZEdsdmJpQjBieUIwYUdVZ2NISnZlSGtnYzJWeWRtVnlMZ29nSUNBZ2JHVjBJSE52WTJ0bGREc0tJQ0FnSUdsbUlDaHdjbTk0ZVM1d2NtOTBiMk52YkNBOVBUMGdKMmgwZEhCek9pY3BJSHNLSUNBZ0lDQWdaR1ZpZFdjb0owTnlaV0YwYVc1bklHQjBiSE11VTI5amEyVjBZRG9nSlc4bkxDQjBhR2x6TG1OdmJtNWxZM1JQY0hSektUc0tJQ0FnSUNBZ1kyOXVjM1FnYzJWeWRtVnlibUZ0WlNBOUlIUm9hWE11WTI5dWJtVmpkRTl3ZEhNdWMyVnlkbVZ5Ym1GdFpTQjhmQ0IwYUdsekxtTnZibTVsWTNSUGNIUnpMbWh2YzNRN0NpQWdJQ0FnSUhOdlkydGxkQ0E5SUhSc2N5NWpiMjV1WldOMEtIc0tJQ0FnSUNBZ0lDQXVMaTUwYUdsekxtTnZibTVsWTNSUGNIUnpMQW9nSUNBZ0lDQWdJSE5sY25abGNtNWhiV1U2SUhObGNuWmxjbTVoYldVZ0ppWWdibVYwTG1selNWQW9jMlZ5ZG1WeWJtRnRaU2tnUHlCMWJtUmxabWx1WldRZ09pQnpaWEoyWlhKdVlXMWxMQW9nSUNBZ0lDQjlLVHNLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdSbFluVm5LQ2REY21WaGRHbHVaeUJnYm1WMExsTnZZMnRsZEdBNklDVnZKeXdnZEdocGN5NWpiMjV1WldOMFQzQjBjeWs3Q2lBZ0lDQWdJSE52WTJ0bGRDQTlJRzVsZEM1amIyNXVaV04wS0hSb2FYTXVZMjl1Ym1WamRFOXdkSE1wT3dvZ0lDQWdmUW9LSUNBZ0lHTnZibk4wSUdobFlXUmxjbk1nUFFvZ0lDQWdJQ0IwZVhCbGIyWWdkR2hwY3k1d2NtOTRlVWhsWVdSbGNuTWdQVDA5SUNkbWRXNWpkR2x2YmljZ1B5QjBhR2x6TG5CeWIzaDVTR1ZoWkdWeWN5Z3BJRG9nZXlBdUxpNTBhR2x6TG5CeWIzaDVTR1ZoWkdWeWN5QjlPd29nSUNBZ1kyOXVjM1FnYUc5emRDQTlJRzVsZEM1cGMwbFFkallvYjNCMGN5NW9iM04wS1NBL0lHQmJKSHR2Y0hSekxtaHZjM1I5WFdBZ09pQnZjSFJ6TG1odmMzUTdDaUFnSUNCc1pYUWdjR0Y1Ykc5aFpDQTlJR0JEVDA1T1JVTlVJQ1I3YUc5emRIMDZKSHR2Y0hSekxuQnZjblI5SUVoVVZGQXZNUzR4WEhKY2JtQTdDZ29nSUNBZ0x5OGdTVzVxWldOMElIUm9aU0JnVUhKdmVIa3RRWFYwYUc5eWFYcGhkR2x2Ym1BZ2FHVmhaR1Z5SUdsbUlHNWxZMlZ6YzJGeWVTNEtJQ0FnSUdsbUlDaHdjbTk0ZVM1MWMyVnlibUZ0WlNCOGZDQndjbTk0ZVM1d1lYTnpkMjl5WkNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0JoZFhSb0lEMGdZQ1I3WkdWamIyUmxWVkpKUTI5dGNHOXVaVzUwS0hCeWIzaDVMblZ6WlhKdVlXMWxLWDA2Skh0a1pXTnZaR1ZWVWtsRGIyMXdiMjVsYm5Rb2NISnZlSGt1Y0dGemMzZHZjbVFwZldBN0NpQWdJQ0FnSUdobFlXUmxjbk5iSjFCeWIzaDVMVUYxZEdodmNtbDZZWFJwYjI0blhTQTlJR0JDWVhOcFl5QWtlMEoxWm1abGNpNW1jbTl0S0dGMWRHZ3BMblJ2VTNSeWFXNW5LQ2RpWVhObE5qUW5LWDFnT3dvZ0lDQWdmUW9LSUNBZ0lHaGxZV1JsY25NdVNHOXpkQ0E5SUdBa2UyaHZjM1I5T2lSN2IzQjBjeTV3YjNKMGZXQTdDZ29nSUNBZ2FXWWdLQ0ZvWldGa1pYSnpXeWRRY205NGVTMURiMjV1WldOMGFXOXVKMTBwSUhzS0lDQWdJQ0FnYUdWaFpHVnljMXNuVUhKdmVIa3RRMjl1Ym1WamRHbHZiaWRkSUQwZ2RHaHBjeTVyWldWd1FXeHBkbVVnUHlBblMyVmxjQzFCYkdsMlpTY2dPaUFuWTJ4dmMyVW5Pd29nSUNBZ2ZRb2dJQ0FnWm05eUlDaGpiMjV6ZENCdVlXMWxJRzltSUU5aWFtVmpkQzVyWlhsektHaGxZV1JsY25NcEtTQjdDaUFnSUNBZ0lIQmhlV3h2WVdRZ0t6MGdZQ1I3Ym1GdFpYMDZJQ1I3YUdWaFpHVnljMXR1WVcxbFhYMWNjbHh1WURzS0lDQWdJSDBLQ2lBZ0lDQmpiMjV6ZENCd2NtOTRlVkpsYzNCdmJuTmxVSEp2YldselpTQTlJSEJoY25ObFVISnZlSGxTWlhOd2IyNXpaU2h6YjJOclpYUXBPd29LSUNBZ0lITnZZMnRsZEM1M2NtbDBaU2hnSkh0d1lYbHNiMkZrZlZ4eVhHNWdLVHNLQ2lBZ0lDQmpiMjV6ZENCN0lHTnZibTVsWTNRc0lHSjFabVpsY21Wa0lIMGdQU0JoZDJGcGRDQndjbTk0ZVZKbGMzQnZibk5sVUhKdmJXbHpaVHNLSUNBZ0lISmxjUzVsYldsMEtDZHdjbTk0ZVVOdmJtNWxZM1FuTENCamIyNXVaV04wS1RzS0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JBZEhsd1pYTmpjbWx3ZEMxbGMyeHBiblF2WW1GdUxYUnpMV052YlcxbGJuUUtJQ0FnSUM4dklFQjBjeTFwWjI1dmNtVWdUbTkwSUVWMlpXNTBSVzFwZEhSbGNpQnBiaUJPYjJSbElIUjVjR1Z6Q2lBZ0lDQjBhR2x6TG1WdGFYUW9KM0J5YjNoNVEyOXVibVZqZENjc0lHTnZibTVsWTNRc0lISmxjU2s3Q2dvZ0lDQWdhV1lnS0dOdmJtNWxZM1F1YzNSaGRIVnpRMjlrWlNBOVBUMGdNakF3S1NCN0NpQWdJQ0FnSUhKbGNTNXZibU5sS0NkemIyTnJaWFFuTENCeVpYTjFiV1VwT3dvS0lDQWdJQ0FnYVdZZ0tHOXdkSE11YzJWamRYSmxSVzVrY0c5cGJuUXBJSHNLSUNBZ0lDQWdJQ0F2THlCVWFHVWdjSEp2ZUhrZ2FYTWdZMjl1Ym1WamRHbHVaeUIwYnlCaElGUk1VeUJ6WlhKMlpYSXNJSE52SUhWd1ozSmhaR1VLSUNBZ0lDQWdJQ0F2THlCMGFHbHpJSE52WTJ0bGRDQmpiMjV1WldOMGFXOXVJSFJ2SUdFZ1ZFeFRJR052Ym01bFkzUnBiMjR1Q2lBZ0lDQWdJQ0FnWkdWaWRXY29KMVZ3WjNKaFpHbHVaeUJ6YjJOclpYUWdZMjl1Ym1WamRHbHZiaUIwYnlCVVRGTW5LVHNLSUNBZ0lDQWdJQ0JqYjI1emRDQnpaWEoyWlhKdVlXMWxJRDBnYjNCMGN5NXpaWEoyWlhKdVlXMWxJSHg4SUc5d2RITXVhRzl6ZERzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEd4ekxtTnZibTVsWTNRb2V3b2dJQ0FnSUNBZ0lDQWdMaTR1YjIxcGRDaHZjSFJ6TENBbmFHOXpkQ2NzSUNkd1lYUm9KeXdnSjNCdmNuUW5LU3dLSUNBZ0lDQWdJQ0FnSUhOdlkydGxkQ3dLSUNBZ0lDQWdJQ0FnSUhObGNuWmxjbTVoYldVNklHNWxkQzVwYzBsUUtITmxjblpsY201aGJXVXBJRDhnZFc1a1pXWnBibVZrSURvZ2MyVnlkbVZ5Ym1GdFpTd0tJQ0FnSUNBZ0lDQjlLVHNLSUNBZ0lDQWdmUW9LSUNBZ0lDQWdjbVYwZFhKdUlITnZZMnRsZERzS0lDQWdJSDBLQ2lBZ0lDQXZMeUJUYjIxbElHOTBhR1Z5SUhOMFlYUjFjeUJqYjJSbElIUm9ZWFFuY3lCdWIzUWdNakF3TGk0dUlHNWxaV1FnZEc4Z2NtVXRjR3hoZVNCMGFHVWdTRlJVVUFvZ0lDQWdMeThnYUdWaFpHVnlJQ0prWVhSaElpQmxkbVZ1ZEhNZ2IyNTBieUIwYUdVZ2MyOWphMlYwSUc5dVkyVWdkR2hsSUVoVVZGQWdiV0ZqYUdsdVpYSjVJR2x6Q2lBZ0lDQXZMeUJoZEhSaFkyaGxaQ0J6YnlCMGFHRjBJSFJvWlNCdWIyUmxJR052Y21VZ1lHaDBkSEJnSUdOaGJpQndZWEp6WlNCaGJtUWdhR0Z1Wkd4bElIUm9aUW9nSUNBZ0x5OGdaWEp5YjNJZ2MzUmhkSFZ6SUdOdlpHVXVDZ29nSUNBZ0x5OGdRMnh2YzJVZ2RHaGxJRzl5YVdkcGJtRnNJSE52WTJ0bGRDd2dZVzVrSUdFZ2JtVjNJQ0ptWVd0bElpQnpiMk5yWlhRZ2FYTWdjbVYwZFhKdVpXUUtJQ0FnSUM4dklHbHVjM1JsWVdRc0lITnZJSFJvWVhRZ2RHaGxJSEJ5YjNoNUlHUnZaWE51SjNRZ1oyVjBJSFJvWlNCSVZGUlFJSEpsY1hWbGMzUUtJQ0FnSUM4dklIZHlhWFIwWlc0Z2RHOGdhWFFnS0hkb2FXTm9JRzFoZVNCamIyNTBZV2x1SUdCQmRYUm9iM0pwZW1GMGFXOXVZQ0JvWldGa1pYSnpJRzl5SUc5MGFHVnlDaUFnSUNBdkx5QnpaVzV6YVhScGRtVWdaR0YwWVNrdUNpQWdJQ0F2THdvZ0lDQWdMeThnVTJWbE9pQm9kSFJ3Y3pvdkwyaGhZMnRsY205dVpTNWpiMjB2Y21Wd2IzSjBjeTgxTkRFMU1ESUtJQ0FnSUhOdlkydGxkQzVrWlhOMGNtOTVLQ2s3Q2dvZ0lDQWdZMjl1YzNRZ1ptRnJaVk52WTJ0bGRDQTlJRzVsZHlCdVpYUXVVMjlqYTJWMEtIc2dkM0pwZEdGaWJHVTZJR1poYkhObElIMHBPd29nSUNBZ1ptRnJaVk52WTJ0bGRDNXlaV0ZrWVdKc1pTQTlJSFJ5ZFdVN0Nnb2dJQ0FnTHk4Z1RtVmxaQ0IwYnlCM1lXbDBJR1p2Y2lCMGFHVWdJbk52WTJ0bGRDSWdaWFpsYm5RZ2RHOGdjbVV0Y0d4aGVTQjBhR1VnSW1SaGRHRWlJR1YyWlc1MGN5NEtJQ0FnSUhKbGNTNXZibU5sS0NkemIyTnJaWFFuTENBb2N5a2dQVDRnZXdvZ0lDQWdJQ0JrWldKMVp5Z25VbVZ3YkdGNWFXNW5JSEJ5YjNoNUlHSjFabVpsY2lCbWIzSWdabUZwYkdWa0lISmxjWFZsYzNRbktUc0tJQ0FnSUNBZ0x5OGdVbVZ3YkdGNUlIUm9aU0FpWW5WbVptVnlaV1FpSUVKMVptWmxjaUJ2Ym5SdklIUm9aU0JtWVd0bElHQnpiMk5yWlhSZ0xDQnphVzVqWlNCaGRBb2dJQ0FnSUNBdkx5QjBhR2x6SUhCdmFXNTBJSFJvWlNCSVZGUlFJRzF2WkhWc1pTQnRZV05vYVc1bGNua2dhR0Z6SUdKbFpXNGdhRzl2YTJWa0lIVndJR1p2Y2dvZ0lDQWdJQ0F2THlCMGFHVWdkWE5sY2k0S0lDQWdJQ0FnY3k1d2RYTm9LR0oxWm1abGNtVmtLVHNLSUNBZ0lDQWdjeTV3ZFhOb0tHNTFiR3dwT3dvZ0lDQWdmU2s3Q2dvZ0lDQWdjbVYwZFhKdUlHWmhhMlZUYjJOclpYUTdDaUFnZlFwOUlFaDBkSEJ6VUhKdmVIbEJaMlZ1ZEM1ZlgybHVhWFJUZEdGMGFXTW9LVHNLQ21aMWJtTjBhVzl1SUhKbGMzVnRaU2h6YjJOclpYUXBJSHNLSUNCemIyTnJaWFF1Y21WemRXMWxLQ2s3Q24wS0NtWjFibU4wYVc5dUlHOXRhWFFvQ2lBZ2IySnFMQW9nSUM0dUxtdGxlWE1LS1FvS0lIc0tJQ0JqYjI1emRDQnlaWFFnUFNCN2ZRb0tPd29nSUd4bGRDQnJaWGs3Q2lBZ1ptOXlJQ2hyWlhrZ2FXNGdiMkpxS1NCN0NpQWdJQ0JwWmlBb0lXdGxlWE11YVc1amJIVmtaWE1vYTJWNUtTa2dld29nSUNBZ0lDQnlaWFJiYTJWNVhTQTlJRzlpYWx0clpYbGRPd29nSUNBZ2ZRb2dJSDBLSUNCeVpYUjFjbTRnY21WME93cDlDZ3BtZFc1amRHbHZiaUJmYm5Wc2JHbHphRU52WVd4bGMyTmxLR3hvY3l3Z2NtaHpSbTRwSUhzZ2FXWWdLR3hvY3lBaFBTQnVkV3hzS1NCN0lISmxkSFZ5YmlCc2FITTdJSDBnWld4elpTQjdJSEpsZEhWeWJpQnlhSE5HYmlncE95QjlJSDBLTHk4Z1JYTjBhVzFoZEdWa0lHMWhlR2x0ZFcwZ2MybDZaU0JtYjNJZ2NtVmhjMjl1WVdKc1pTQnpkR0Z1WkdGc2IyNWxJR1YyWlc1MENtTnZibk4wSUVkYVNWQmZWRWhTUlZOSVQweEVJRDBnTVRBeU5DQXFJRE15T3dvS0x5b3FDaUFxSUVkbGRITWdZU0J6ZEhKbFlXMGdabkp2YlNCaElGVnBiblE0UVhKeVlYa2diM0lnYzNSeWFXNW5DaUFxSUZKbFlXUmhZbXhsTG1aeWIyMGdhWE1nYVdSbFlXd2dZblYwSUhkaGN5QmhaR1JsWkNCcGJpQnViMlJsTG1weklIWXhNaTR6TGpBZ1lXNWtJSFl4TUM0eE55NHdDaUFxTHdwbWRXNWpkR2x2YmlCemRISmxZVzFHY205dFFtOWtlU2hpYjJSNUtTQjdDaUFnY21WMGRYSnVJRzVsZHlCU1pXRmtZV0pzWlNoN0NpQWdJQ0J5WldGa0tDa2dld29nSUNBZ0lDQjBhR2x6TG5CMWMyZ29ZbTlrZVNrN0NpQWdJQ0FnSUhSb2FYTXVjSFZ6YUNodWRXeHNLVHNLSUNBZ0lIMHNDaUFnZlNrN0NuMEtDaThxS2dvZ0tpQkRjbVZoZEdWeklHRWdWSEpoYm5Od2IzSjBJSFJvWVhRZ2RYTmxjeUJ1WVhScGRtVWdkR2hsSUc1aGRHbDJaU0FuYUhSMGNDY2dZVzVrSUNkb2RIUndjeWNnYlc5a2RXeGxjeUIwYnlCelpXNWtJR1YyWlc1MGN5QjBieUJUWlc1MGNua3VDaUFxTHdwbWRXNWpkR2x2YmlCdFlXdGxUbTlrWlZSeVlXNXpjRzl5ZENodmNIUnBiMjV6S1NCN0NpQWdiR1YwSUhWeWJGTmxaMjFsYm5Sek93b0tJQ0IwY25rZ2V3b2dJQ0FnZFhKc1UyVm5iV1Z1ZEhNZ1BTQnVaWGNnVlZKTUtHOXdkR2x2Ym5NdWRYSnNLVHNLSUNCOUlHTmhkR05vSUNobEtTQjdDaUFnSUNCamIyNXpiMnhsVTJGdVpHSnZlQ2dvS1NBOVBpQjdDaUFnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTFqYjI1emIyeGxDaUFnSUNBZ0lHTnZibk52YkdVdWQyRnliaWdLSUNBZ0lDQWdJQ0FuVzBCelpXNTBjbmt2Ym05a1pWMDZJRWx1ZG1Gc2FXUWdaSE51SUc5eUlIUjFibTVsYkNCdmNIUnBiMjRzSUhkcGJHd2dibTkwSUhObGJtUWdZVzU1SUdWMlpXNTBjeTRnVkdobElIUjFibTVsYkNCdmNIUnBiMjRnYlhWemRDQmlaU0JoSUdaMWJHd2dWVkpNSUhkb1pXNGdkWE5sWkM0bkxBb2dJQ0FnSUNBcE93b2dJQ0FnZlNrN0NpQWdJQ0J5WlhSMWNtNGdZM0psWVhSbFZISmhibk53YjNKMEtHOXdkR2x2Ym5Nc0lDZ3BJRDArSUZCeWIyMXBjMlV1Y21WemIyeDJaU2g3ZlNrcE93b2dJSDBLQ2lBZ1kyOXVjM1FnYVhOSWRIUndjeUE5SUhWeWJGTmxaMjFsYm5SekxuQnliM1J2WTI5c0lEMDlQU0FuYUhSMGNITTZKenNLQ2lBZ0x5OGdVSEp2ZUhrZ2NISnBiM0pwZEdsNllYUnBiMjQ2SUdoMGRIQWdQVDRnWUc5d2RHbHZibk11Y0hKdmVIbGdJSHdnWUhCeWIyTmxjM011Wlc1MkxtaDBkSEJmY0hKdmVIbGdDaUFnTHk4Z1VISnZlSGtnY0hKcGIzSnBkR2w2WVhScGIyNDZJR2gwZEhCeklEMCtJR0J2Y0hScGIyNXpMbkJ5YjNoNVlDQjhJR0J3Y205alpYTnpMbVZ1ZGk1b2RIUndjMTl3Y205NGVXQWdmQ0JnY0hKdlkyVnpjeTVsYm5ZdWFIUjBjRjl3Y205NGVXQUtJQ0JqYjI1emRDQndjbTk0ZVNBOUlHRndjR3g1VG05UWNtOTRlVTl3ZEdsdmJpZ0tJQ0FnSUhWeWJGTmxaMjFsYm5SekxBb2dJQ0FnYjNCMGFXOXVjeTV3Y205NGVTQjhmQ0FvYVhOSWRIUndjeUEvSUhCeWIyTmxjM011Wlc1MkxtaDBkSEJ6WDNCeWIzaDVJRG9nZFc1a1pXWnBibVZrS1NCOGZDQndjbTlqWlhOekxtVnVkaTVvZEhSd1gzQnliM2g1TEFvZ0lDazdDZ29nSUdOdmJuTjBJRzVoZEdsMlpVaDBkSEJOYjJSMWJHVWdQU0JwYzBoMGRIQnpJRDhnYUhSMGNITWdPaUJvZEhSd093b2dJR052Ym5OMElHdGxaWEJCYkdsMlpTQTlJRzl3ZEdsdmJuTXVhMlZsY0VGc2FYWmxJRDA5UFNCMWJtUmxabWx1WldRZ1B5Qm1ZV3h6WlNBNklHOXdkR2x2Ym5NdWEyVmxjRUZzYVhabE93b0tJQ0F2THlCVVQwUlBLSFkzS1RvZ1JYWmhiSFZoZEdVZ2FXWWdkMlVnWTJGdUlITmxkQ0JyWldWd1FXeHBkbVVnZEc4Z2RISjFaUzRnVkdocGN5QjNiM1ZzWkNCcGJuWnZiSFpsSUhSbGMzUnBibWNnWm05eUlHMWxiVzl5ZVNCc1pXRnJjeUJwYmlCdmJHUmxjaUJ1YjJSbENpQWdMeThnZG1WeWMybHZibk1vUGowZ09Da2dZWE1nZEdobGVTQm9ZV1FnYldWdGIzSjVJR3hsWVd0eklIZG9aVzRnZFhOcGJtY2dhWFE2SUNNeU5UVTFDaUFnWTI5dWMzUWdZV2RsYm5RZ1BTQndjbTk0ZVFvZ0lDQWdQeUFvYm1WM0lFaDBkSEJ6VUhKdmVIbEJaMlZ1ZENod2NtOTRlU2tnS1FvZ0lDQWdPaUJ1WlhjZ2JtRjBhWFpsU0hSMGNFMXZaSFZzWlM1QloyVnVkQ2g3SUd0bFpYQkJiR2wyWlN3Z2JXRjRVMjlqYTJWMGN6b2dNekFzSUhScGJXVnZkWFE2SURJd01EQWdmU2s3Q2dvZ0lHTnZibk4wSUhKbGNYVmxjM1JGZUdWamRYUnZjaUE5SUdOeVpXRjBaVkpsY1hWbGMzUkZlR1ZqZFhSdmNpaHZjSFJwYjI1ekxDQmZiblZzYkdsemFFTnZZV3hsYzJObEtHOXdkR2x2Ym5NdWFIUjBjRTF2WkhWc1pTd2dLQ2tnUFQ0Z0tDQnVZWFJwZG1WSWRIUndUVzlrZFd4bEtTa3NJR0ZuWlc1MEtUc0tJQ0J5WlhSMWNtNGdZM0psWVhSbFZISmhibk53YjNKMEtHOXdkR2x2Ym5Nc0lISmxjWFZsYzNSRmVHVmpkWFJ2Y2lrN0NuMEtDaThxS2dvZ0tpQkliMjV2Y25NZ2RHaGxJR0J1YjE5d2NtOTRlV0FnWlc1MklIWmhjbWxoWW14bElIZHBkR2dnZEdobElHaHBaMmhsYzNRZ2NISnBiM0pwZEhrZ2RHOGdZV3hzYjNjZ1ptOXlJR2h2YzNSeklHVjRZMngxYzJsdmJpNEtJQ29LSUNvZ1FIQmhjbUZ0SUhSeVlXNXpjRzl5ZEZWeWJDQlVhR1VnVlZKTUlIUm9aU0IwY21GdWMzQnZjblFnYVc1MFpXNWtjeUIwYnlCelpXNWtJR1YyWlc1MGN5QjBieTRLSUNvZ1FIQmhjbUZ0SUhCeWIzaDVJRlJvWlNCamJHbGxiblFnWTI5dVptbG5kWEpsWkNCd2NtOTRlUzRLSUNvZ1FISmxkSFZ5Ym5NZ1FTQndjbTk0ZVNCMGFHVWdkSEpoYm5Od2IzSjBJSE5vYjNWc1pDQjFjMlV1Q2lBcUx3cG1kVzVqZEdsdmJpQmhjSEJzZVU1dlVISnZlSGxQY0hScGIyNG9kSEpoYm5Od2IzSjBWWEpzVTJWbmJXVnVkSE1zSUhCeWIzaDVLU0I3Q2lBZ1kyOXVjM1FnZXlCdWIxOXdjbTk0ZVNCOUlEMGdjSEp2WTJWemN5NWxiblk3Q2dvZ0lHTnZibk4wSUhWeWJFbHpSWGhsYlhCMFJuSnZiVkJ5YjNoNUlEMEtJQ0FnSUc1dlgzQnliM2g1SUNZbUNpQWdJQ0J1YjE5d2NtOTRlUW9nSUNBZ0lDQXVjM0JzYVhRb0p5d25LUW9nSUNBZ0lDQXVjMjl0WlNnS0lDQWdJQ0FnSUNCbGVHVnRjSFJwYjI0Z1BUNGdkSEpoYm5Od2IzSjBWWEpzVTJWbmJXVnVkSE11YUc5emRDNWxibVJ6VjJsMGFDaGxlR1Z0Y0hScGIyNHBJSHg4SUhSeVlXNXpjRzl5ZEZWeWJGTmxaMjFsYm5SekxtaHZjM1J1WVcxbExtVnVaSE5YYVhSb0tHVjRaVzF3ZEdsdmJpa3NDaUFnSUNBZ0lDazdDZ29nSUdsbUlDaDFjbXhKYzBWNFpXMXdkRVp5YjIxUWNtOTRlU2tnZXdvZ0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpEc0tJQ0I5SUdWc2MyVWdld29nSUNBZ2NtVjBkWEp1SUhCeWIzaDVPd29nSUgwS2ZRb0tMeW9xQ2lBcUlFTnlaV0YwWlhNZ1lTQlNaWEYxWlhOMFJYaGxZM1YwYjNJZ2RHOGdZbVVnZFhObFpDQjNhWFJvSUdCamNtVmhkR1ZVY21GdWMzQnZjblJnTGdvZ0tpOEtablZ1WTNScGIyNGdZM0psWVhSbFVtVnhkV1Z6ZEVWNFpXTjFkRzl5S0FvZ0lHOXdkR2x2Ym5Nc0NpQWdhSFIwY0UxdlpIVnNaU3dLSUNCaFoyVnVkQ3dLS1NCN0NpQWdZMjl1YzNRZ2V5Qm9iM04wYm1GdFpTd2djR0YwYUc1aGJXVXNJSEJ2Y25Rc0lIQnliM1J2WTI5c0xDQnpaV0Z5WTJnZ2ZTQTlJRzVsZHlCVlVrd29iM0IwYVc5dWN5NTFjbXdwT3dvZ0lISmxkSFZ5YmlCbWRXNWpkR2x2YmlCdFlXdGxVbVZ4ZFdWemRDaHlaWEYxWlhOMEtTQjdDaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdld29nSUNBZ0lDQnNaWFFnWW05a2VTQTlJSE4wY21WaGJVWnliMjFDYjJSNUtISmxjWFZsYzNRdVltOWtlU2s3Q2dvZ0lDQWdJQ0JqYjI1emRDQm9aV0ZrWlhKeklEMGdleUF1TGk1dmNIUnBiMjV6TG1obFlXUmxjbk1nZlRzS0NpQWdJQ0FnSUdsbUlDaHlaWEYxWlhOMExtSnZaSGt1YkdWdVozUm9JRDRnUjFwSlVGOVVTRkpGVTBoUFRFUXBJSHNLSUNBZ0lDQWdJQ0JvWldGa1pYSnpXeWRqYjI1MFpXNTBMV1Z1WTI5a2FXNW5KMTBnUFNBblozcHBjQ2M3Q2lBZ0lDQWdJQ0FnWW05a2VTQTlJR0p2WkhrdWNHbHdaU2hqY21WaGRHVkhlbWx3S0NrcE93b2dJQ0FnSUNCOUNnb2dJQ0FnSUNCamIyNXpkQ0J5WlhFZ1BTQm9kSFJ3VFc5a2RXeGxMbkpsY1hWbGMzUW9DaUFnSUNBZ0lDQWdld29nSUNBZ0lDQWdJQ0FnYldWMGFHOWtPaUFuVUU5VFZDY3NDaUFnSUNBZ0lDQWdJQ0JoWjJWdWRDd0tJQ0FnSUNBZ0lDQWdJR2hsWVdSbGNuTXNDaUFnSUNBZ0lDQWdJQ0JvYjNOMGJtRnRaU3dLSUNBZ0lDQWdJQ0FnSUhCaGRHZzZJR0FrZTNCaGRHaHVZVzFsZlNSN2MyVmhjbU5vZldBc0NpQWdJQ0FnSUNBZ0lDQndiM0owTEFvZ0lDQWdJQ0FnSUNBZ2NISnZkRzlqYjJ3c0NpQWdJQ0FnSUNBZ0lDQmpZVG9nYjNCMGFXOXVjeTVqWVVObGNuUnpMQW9nSUNBZ0lDQWdJSDBzQ2lBZ0lDQWdJQ0FnY21WeklEMCtJSHNLSUNBZ0lDQWdJQ0FnSUhKbGN5NXZiaWduWkdGMFlTY3NJQ2dwSUQwK0lIc0tJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1JISmhhVzRnYzI5amEyVjBDaUFnSUNBZ0lDQWdJQ0I5S1RzS0NpQWdJQ0FnSUNBZ0lDQnlaWE11YjI0b0oyVnVaQ2NzSUNncElEMCtJSHNLSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdSSEpoYVc0Z2MyOWphMlYwQ2lBZ0lDQWdJQ0FnSUNCOUtUc0tDaUFnSUNBZ0lDQWdJQ0J5WlhNdWMyVjBSVzVqYjJScGJtY29KM1YwWmpnbktUc0tDaUFnSUNBZ0lDQWdJQ0F2THlBaVMyVjVMWFpoYkhWbElIQmhhWEp6SUc5bUlHaGxZV1JsY2lCdVlXMWxjeUJoYm1RZ2RtRnNkV1Z6TGlCSVpXRmtaWElnYm1GdFpYTWdZWEpsSUd4dmQyVnlMV05oYzJWa0xpSUtJQ0FnSUNBZ0lDQWdJQzh2SUdoMGRIQnpPaTh2Ym05a1pXcHpMbTl5Wnk5aGNHa3ZhSFIwY0M1b2RHMXNJMmgwZEhCZmJXVnpjMkZuWlY5b1pXRmtaWEp6Q2lBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J5WlhSeWVVRm1kR1Z5U0dWaFpHVnlJRDBnWDI1MWJHeHBjMmhEYjJGc1pYTmpaU2h5WlhNdWFHVmhaR1Z5YzFzbmNtVjBjbmt0WVdaMFpYSW5YU3dnS0NrZ1BUNGdLQ0J1ZFd4c0tTazdDaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnlZWFJsVEdsdGFYUnpTR1ZoWkdWeUlEMGdYMjUxYkd4cGMyaERiMkZzWlhOalpTaHlaWE11YUdWaFpHVnljMXNuZUMxelpXNTBjbmt0Y21GMFpTMXNhVzFwZEhNblhTd2dLQ2tnUFQ0Z0tDQnVkV3hzS1NrN0Nnb2dJQ0FnSUNBZ0lDQWdjbVZ6YjJ4MlpTaDdDaUFnSUNBZ0lDQWdJQ0FnSUhOMFlYUjFjME52WkdVNklISmxjeTV6ZEdGMGRYTkRiMlJsTEFvZ0lDQWdJQ0FnSUNBZ0lDQm9aV0ZrWlhKek9pQjdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0ozSmxkSEo1TFdGbWRHVnlKem9nY21WMGNubEJablJsY2tobFlXUmxjaXdLSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5lQzF6Wlc1MGNua3RjbUYwWlMxc2FXMXBkSE1uT2lCQmNuSmhlUzVwYzBGeWNtRjVLSEpoZEdWTWFXMXBkSE5JWldGa1pYSXBJRDhnY21GMFpVeHBiV2wwYzBobFlXUmxjbHN3WFNBNklISmhkR1ZNYVcxcGRITklaV0ZrWlhJc0NpQWdJQ0FnSUNBZ0lDQWdJSDBzQ2lBZ0lDQWdJQ0FnSUNCOUtUc0tJQ0FnSUNBZ0lDQjlMQW9nSUNBZ0lDQXBPd29LSUNBZ0lDQWdjbVZ4TG05dUtDZGxjbkp2Y2ljc0lISmxhbVZqZENrN0NpQWdJQ0FnSUdKdlpIa3VjR2x3WlNoeVpYRXBPd29nSUNBZ2ZTazdDaUFnZlRzS2ZRb0tablZ1WTNScGIyNGdYMjl3ZEdsdmJtRnNRMmhoYVc0b2IzQnpLU0I3SUd4bGRDQnNZWE4wUVdOalpYTnpURWhUSUQwZ2RXNWtaV1pwYm1Wa095QnNaWFFnZG1Gc2RXVWdQU0J2Y0hOYk1GMDdJR3hsZENCcElEMGdNVHNnZDJocGJHVWdLR2tnUENCdmNITXViR1Z1WjNSb0tTQjdJR052Ym5OMElHOXdJRDBnYjNCelcybGRPeUJqYjI1emRDQm1iaUE5SUc5d2MxdHBJQ3NnTVYwN0lHa2dLejBnTWpzZ2FXWWdLQ2h2Y0NBOVBUMGdKMjl3ZEdsdmJtRnNRV05qWlhOekp5QjhmQ0J2Y0NBOVBUMGdKMjl3ZEdsdmJtRnNRMkZzYkNjcElDWW1JSFpoYkhWbElEMDlJRzUxYkd3cElIc2djbVYwZFhKdUlIVnVaR1ZtYVc1bFpEc2dmU0JwWmlBb2IzQWdQVDA5SUNkaFkyTmxjM01uSUh4OElHOXdJRDA5UFNBbmIzQjBhVzl1WVd4QlkyTmxjM01uS1NCN0lHeGhjM1JCWTJObGMzTk1TRk1nUFNCMllXeDFaVHNnZG1Gc2RXVWdQU0JtYmloMllXeDFaU2s3SUgwZ1pXeHpaU0JwWmlBb2IzQWdQVDA5SUNkallXeHNKeUI4ZkNCdmNDQTlQVDBnSjI5d2RHbHZibUZzUTJGc2JDY3BJSHNnZG1Gc2RXVWdQU0JtYmlnb0xpNHVZWEpuY3lrZ1BUNGdkbUZzZFdVdVkyRnNiQ2hzWVhOMFFXTmpaWE56VEVoVExDQXVMaTVoY21kektTazdJR3hoYzNSQlkyTmxjM05NU0ZNZ1BTQjFibVJsWm1sdVpXUTdJSDBnZlNCeVpYUjFjbTRnZG1Gc2RXVTdJSDBLWTI5dWMzUWdiM0IwYVc5dWN5QTlJSGR2Y210bGNrUmhkR0U3Q214bGRDQnpaWE56YVc5dU93cHNaWFFnYUdGelUyVnVkRUZ1Y2tWMlpXNTBJRDBnWm1Gc2MyVTdDZ3BtZFc1amRHbHZiaUJzYjJjb2JYTm5LU0I3Q2lBZ2FXWWdLRzl3ZEdsdmJuTXVaR1ZpZFdjcElIc0tJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MWpiMjV6YjJ4bENpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1cwRk9VaUJYYjNKclpYSmRJQ1I3YlhObmZXQXBPd29nSUgwS2ZRb0tZMjl1YzNRZ2RYSnNJRDBnWjJWMFJXNTJaV3h2Y0dWRmJtUndiMmx1ZEZkcGRHaFZjbXhGYm1OdlpHVmtRWFYwYUNodmNIUnBiMjV6TG1SemJpazdDbU52Ym5OMElIUnlZVzV6Y0c5eWRDQTlJRzFoYTJWT2IyUmxWSEpoYm5Od2IzSjBLSHNLSUNCMWNtd3NDaUFnY21WamIzSmtSSEp2Y0hCbFpFVjJaVzUwT2lBb0tTQTlQaUI3Q2lBZ0lDQXZMd29nSUgwc0NuMHBPd29LWVhONWJtTWdablZ1WTNScGIyNGdjMlZ1WkVGaWJtOXliV0ZzVTJWemMybHZiaWdwSUhzS0lDQXZMeUJ2WmlCM1pTQm9ZWFpsSUdGdUlHVjRhWE4wYVc1bklITmxjM05wYjI0Z2NHRnpjMlZrSUdaeWIyMGdkR2hsSUcxaGFXNGdkR2h5WldGa0xDQnpaVzVrSUdsMElHRnpJR0ZpYm05eWJXRnNDaUFnYVdZZ0tITmxjM05wYjI0cElIc0tJQ0FnSUd4dlp5Z25VMlZ1WkdsdVp5QmhZbTV2Y20xaGJDQnpaWE56YVc5dUp5azdDaUFnSUNCMWNHUmhkR1ZUWlhOemFXOXVLSE5sYzNOcGIyNHNJSHNnYzNSaGRIVnpPaUFuWVdKdWIzSnRZV3duTENCaFltNXZjbTFoYkY5dFpXTm9ZVzVwYzIwNklDZGhibkpmWm05eVpXZHliM1Z1WkNjZ2ZTazdDZ29nSUNBZ1kyOXVjM1FnWlc1MlpXeHZjR1VnUFNCamNtVmhkR1ZUWlhOemFXOXVSVzUyWld4dmNHVW9jMlZ6YzJsdmJpd2diM0IwYVc5dWN5NWtjMjRzSUc5d2RHbHZibk11YzJSclRXVjBZV1JoZEdFcE93b2dJQ0FnTHk4Z1RHOW5JSFJvWlNCbGJuWmxiRzl3WlNCemJ5QjBieUJoYVdRZ2FXNGdkR1Z6ZEdsdVp3b2dJQ0FnYkc5bktFcFRUMDR1YzNSeWFXNW5hV1o1S0dWdWRtVnNiM0JsS1NrN0Nnb2dJQ0FnWVhkaGFYUWdkSEpoYm5Od2IzSjBMbk5sYm1Rb1pXNTJaV3h2Y0dVcE93b0tJQ0FnSUhSeWVTQjdDaUFnSUNBZ0lDOHZJRTV2ZEdsbWVTQjBhR1VnYldGcGJpQndjbTlqWlhOeklIUm9ZWFFnZEdobElITmxjM05wYjI0Z2FHRnpJR1Z1WkdWa0lITnZJSFJvWlNCelpYTnphVzl1SUdOaGJpQmlaU0JqYkdWaGNtVmtJR1p5YjIwZ2RHaGxJSE5qYjNCbENpQWdJQ0FnSUY5dmNIUnBiMjVoYkVOb1lXbHVLRnR3WVhKbGJuUlFiM0owTENBbmIzQjBhVzl1WVd4QlkyTmxjM01uTENCZk1pQTlQaUJmTWk1d2IzTjBUV1Z6YzJGblpTd2dKMk5oYkd3bkxDQmZNeUE5UGlCZk15Z25jMlZ6YzJsdmJpMWxibVJsWkNjcFhTazdDaUFnSUNCOUlHTmhkR05vSUNoZktTQjdDaUFnSUNBZ0lDOHZJR2xuYm05eVpRb2dJQ0FnZlFvZ0lIMEtmUW9LYkc5bktDZFRkR0Z5ZEdWa0p5azdDZ3BtZFc1amRHbHZiaUJ3Y21Wd1lYSmxVM1JoWTJ0R2NtRnRaWE1vYzNSaFkydEdjbUZ0WlhNcElIc0tJQ0JwWmlBb0lYTjBZV05yUm5KaGJXVnpLU0I3Q2lBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa093b2dJSDBLQ2lBZ0x5OGdVM1J5YVhBZ1UyVnVkSEo1SUdaeVlXMWxjeUJoYm1RZ2NtVjJaWEp6WlNCMGFHVWdjM1JoWTJzZ1puSmhiV1Z6SUhOdklIUm9aWGtnWVhKbElHbHVJSFJvWlNCamIzSnlaV04wSUc5eVpHVnlDaUFnWTI5dWMzUWdjM1J5YVhCd1pXUkdjbUZ0WlhNZ1BTQnpkSEpwY0ZObGJuUnllVVp5WVcxbGMwRnVaRkpsZG1WeWMyVW9jM1JoWTJ0R2NtRnRaWE1wT3dvS0lDQXZMeUJKWmlCM1pTQm9ZWFpsSUdGdUlHRndjQ0J5YjI5MElIQmhkR2dzSUhKbGQzSnBkR1VnZEdobElHWnBiR1Z1WVcxbGN5QjBieUJpWlNCeVpXeGhkR2wyWlNCMGJ5QjBhR1VnWVhCd0lISnZiM1FLSUNCcFppQW9iM0IwYVc5dWN5NWhjSEJTYjI5MFVHRjBhQ2tnZXdvZ0lDQWdabTl5SUNoamIyNXpkQ0JtY21GdFpTQnZaaUJ6ZEhKcGNIQmxaRVp5WVcxbGN5a2dld29nSUNBZ0lDQnBaaUFvSVdaeVlXMWxMbVpwYkdWdVlXMWxLU0I3Q2lBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQWdJSDBLQ2lBZ0lDQWdJR1p5WVcxbExtWnBiR1Z1WVcxbElEMGdibTl5YldGc2FYcGxWWEpzVkc5Q1lYTmxLR1p5WVcxbExtWnBiR1Z1WVcxbExDQnZjSFJwYjI1ekxtRndjRkp2YjNSUVlYUm9LVHNLSUNBZ0lIMEtJQ0I5Q2dvZ0lISmxkSFZ5YmlCemRISnBjSEJsWkVaeVlXMWxjenNLZlFvS1puVnVZM1JwYjI0Z1lYQndiSGxUWTI5d1pWUnZSWFpsYm5Rb1pYWmxiblFzSUhOamIzQmxLU0I3Q2lBZ1lYQndiSGxUWTI5d1pVUmhkR0ZVYjBWMlpXNTBLR1YyWlc1MExDQnpZMjl3WlNrN0Nnb2dJR2xtSUNnaFgyOXdkR2x2Ym1Gc1EyaGhhVzRvVzJWMlpXNTBMQ0FuWVdOalpYTnpKeXdnWHpRZ1BUNGdYelF1WTI5dWRHVjRkSE1zSUNkdmNIUnBiMjVoYkVGalkyVnpjeWNzSUY4MUlEMCtJRjgxTG5SeVlXTmxYU2twSUhzS0lDQWdJR052Ym5OMElIc2dkSEpoWTJWSlpDd2djM0JoYmtsa0xDQndZWEpsYm5SVGNHRnVTV1FnZlNBOUlITmpiM0JsTG5CeWIzQmhaMkYwYVc5dVEyOXVkR1Y0ZERzS0lDQWdJR1YyWlc1MExtTnZiblJsZUhSeklEMGdld29nSUNBZ0lDQjBjbUZqWlRvZ2V3b2dJQ0FnSUNBZ0lIUnlZV05sWDJsa09pQjBjbUZqWlVsa0xBb2dJQ0FnSUNBZ0lITndZVzVmYVdRNklITndZVzVKWkN3S0lDQWdJQ0FnSUNCd1lYSmxiblJmYzNCaGJsOXBaRG9nY0dGeVpXNTBVM0JoYmtsa0xBb2dJQ0FnSUNCOUxBb2dJQ0FnSUNBdUxpNWxkbVZ1ZEM1amIyNTBaWGgwY3l3S0lDQWdJSDA3Q2lBZ2ZRcDlDZ3BoYzNsdVl5Qm1kVzVqZEdsdmJpQnpaVzVrUVc1eVJYWmxiblFvWm5KaGJXVnpMQ0J6WTI5d1pTa2dld29nSUdsbUlDaG9ZWE5UWlc1MFFXNXlSWFpsYm5RcElIc0tJQ0FnSUhKbGRIVnlianNLSUNCOUNnb2dJR2hoYzFObGJuUkJibkpGZG1WdWRDQTlJSFJ5ZFdVN0Nnb2dJR0YzWVdsMElITmxibVJCWW01dmNtMWhiRk5sYzNOcGIyNG9LVHNLQ2lBZ2JHOW5LQ2RUWlc1a2FXNW5JR1YyWlc1MEp5azdDZ29nSUdOdmJuTjBJR1YyWlc1MElEMGdld29nSUNBZ1pYWmxiblJmYVdRNklIVjFhV1EwS0Nrc0NpQWdJQ0JqYjI1MFpYaDBjem9nYjNCMGFXOXVjeTVqYjI1MFpYaDBjeXdLSUNBZ0lISmxiR1ZoYzJVNklHOXdkR2x2Ym5NdWNtVnNaV0Z6WlN3S0lDQWdJR1Z1ZG1seWIyNXRaVzUwT2lCdmNIUnBiMjV6TG1WdWRtbHliMjV0Wlc1MExBb2dJQ0FnWkdsemREb2diM0IwYVc5dWN5NWthWE4wTEFvZ0lDQWdjR3hoZEdadmNtMDZJQ2R1YjJSbEp5d0tJQ0FnSUd4bGRtVnNPaUFuWlhKeWIzSW5MQW9nSUNBZ1pYaGpaWEIwYVc5dU9pQjdDaUFnSUNBZ0lIWmhiSFZsY3pvZ1d3b2dJQ0FnSUNBZ0lIc0tJQ0FnSUNBZ0lDQWdJSFI1Y0dVNklDZEJjSEJzYVdOaGRHbHZiazV2ZEZKbGMzQnZibVJwYm1jbkxBb2dJQ0FnSUNBZ0lDQWdkbUZzZFdVNklHQkJjSEJzYVdOaGRHbHZiaUJPYjNRZ1VtVnpjRzl1WkdsdVp5Qm1iM0lnWVhRZ2JHVmhjM1FnSkh0dmNIUnBiMjV6TG1GdWNsUm9jbVZ6YUc5c1pIMGdiWE5nTEFvZ0lDQWdJQ0FnSUNBZ2MzUmhZMnQwY21GalpUb2dleUJtY21GdFpYTTZJSEJ5WlhCaGNtVlRkR0ZqYTBaeVlXMWxjeWhtY21GdFpYTXBJSDBzQ2lBZ0lDQWdJQ0FnSUNBdkx5QlVhR2x6SUdWdWMzVnlaWE1nZEdobElGVkpJR1J2WlhOdUozUWdjMkY1SUNkRGNtRnphR1ZrSUdsdUp5Qm1iM0lnZEdobElITjBZV05ySUhSeVlXTmxDaUFnSUNBZ0lDQWdJQ0J0WldOb1lXNXBjMjA2SUhzZ2RIbHdaVG9nSjBGT1VpY2dmU3dLSUNBZ0lDQWdJQ0I5TEFvZ0lDQWdJQ0JkTEFvZ0lDQWdmU3dLSUNBZ0lIUmhaM002SUc5d2RHbHZibk11YzNSaGRHbGpWR0ZuY3l3S0lDQjlPd29LSUNCcFppQW9jMk52Y0dVcElIc0tJQ0FnSUdGd2NHeDVVMk52Y0dWVWIwVjJaVzUwS0dWMlpXNTBMQ0J6WTI5d1pTazdDaUFnZlFvS0lDQmpiMjV6ZENCbGJuWmxiRzl3WlNBOUlHTnlaV0YwWlVWMlpXNTBSVzUyWld4dmNHVW9aWFpsYm5Rc0lHOXdkR2x2Ym5NdVpITnVMQ0J2Y0hScGIyNXpMbk5rYTAxbGRHRmtZWFJoS1RzS0lDQXZMeUJNYjJjZ2RHaGxJR1Z1ZG1Wc2IzQmxJSFJ2SUdGcFpDQnBiaUIwWlhOMGFXNW5DaUFnYkc5bktFcFRUMDR1YzNSeWFXNW5hV1o1S0dWdWRtVnNiM0JsS1NrN0Nnb2dJR0YzWVdsMElIUnlZVzV6Y0c5eWRDNXpaVzVrS0dWdWRtVnNiM0JsS1RzS0lDQmhkMkZwZENCMGNtRnVjM0J2Y25RdVpteDFjMmdvTWpBd01DazdDZ29nSUM4dklFUmxiR0Y1SUdadmNpQTFJSE5sWTI5dVpITWdjMjhnZEdoaGRDQnpkR1JwYnlCallXNGdabXgxYzJnZ2FXNGdkR2hsSUcxaGFXNGdaWFpsYm5RZ2JHOXZjQ0JsZG1WeUlISmxjM1JoY25Sekxnb2dJQzh2SUZSb2FYTWdhWE1nYldGcGJteDVJR1p2Y2lCMGFHVWdZbVZ1WldacGRDQnZaaUJzYjJkbmFXNW5MMlJsWW5WbloybHVaeUJwYzNOMVpYTXVDaUFnYzJWMFZHbHRaVzkxZENnb0tTQTlQaUI3Q2lBZ0lDQndjbTlqWlhOekxtVjRhWFFvTUNrN0NpQWdmU3dnTlRBd01DazdDbjBLQ214bGRDQmtaV0oxWjJkbGNsQmhkWE5sT3dvS2FXWWdLRzl3ZEdsdmJuTXVZMkZ3ZEhWeVpWTjBZV05yVkhKaFkyVXBJSHNLSUNCc2IyY29KME52Ym01bFkzUnBibWNnZEc4Z1pHVmlkV2RuWlhJbktUc0tDaUFnWTI5dWMzUWdjMlZ6YzJsdmJpQTlJRzVsZHlCVFpYTnphVzl1S0NrZ093b2dJSE5sYzNOcGIyNHVZMjl1Ym1WamRGUnZUV0ZwYmxSb2NtVmhaQ2dwT3dvS0lDQnNiMmNvSjBOdmJtNWxZM1JsWkNCMGJ5QmtaV0oxWjJkbGNpY3BPd29LSUNBdkx5QkRiMnhzWldOMElITmpjbWx3ZEVsa0lDMCtJSFZ5YkNCdFlYQWdjMjhnZDJVZ1kyRnVJR3h2YjJzZ2RYQWdkR2hsSUdacGJHVnVZVzFsY3lCc1lYUmxjZ29nSUdOdmJuTjBJSE5qY21sd2RITWdQU0J1WlhjZ1RXRndLQ2s3Q2dvZ0lITmxjM05wYjI0dWIyNG9KMFJsWW5WbloyVnlMbk5qY21sd2RGQmhjbk5sWkNjc0lHVjJaVzUwSUQwK0lIc0tJQ0FnSUhOamNtbHdkSE11YzJWMEtHVjJaVzUwTG5CaGNtRnRjeTV6WTNKcGNIUkpaQ3dnWlhabGJuUXVjR0Z5WVcxekxuVnliQ2s3Q2lBZ2ZTazdDZ29nSUhObGMzTnBiMjR1YjI0b0owUmxZblZuWjJWeUxuQmhkWE5sWkNjc0lHVjJaVzUwSUQwK0lIc0tJQ0FnSUdsbUlDaGxkbVZ1ZEM1d1lYSmhiWE11Y21WaGMyOXVJQ0U5UFNBbmIzUm9aWEluS1NCN0NpQWdJQ0FnSUhKbGRIVnlianNLSUNBZ0lIMEtDaUFnSUNCMGNua2dld29nSUNBZ0lDQnNiMmNvSjBSbFluVm5aMlZ5SUhCaGRYTmxaQ2NwT3dvS0lDQWdJQ0FnTHk4Z1kyOXdlU0IwYUdVZ1puSmhiV1Z6Q2lBZ0lDQWdJR052Ym5OMElHTmhiR3hHY21GdFpYTWdQU0JiTGk0dVpYWmxiblF1Y0dGeVlXMXpMbU5oYkd4R2NtRnRaWE5kT3dvS0lDQWdJQ0FnWTI5dWMzUWdaMlYwVFc5a2RXeGxUbUZ0WlNBOUlHOXdkR2x2Ym5NdVlYQndVbTl2ZEZCaGRHZ2dQeUJqY21WaGRHVkhaWFJOYjJSMWJHVkdjbTl0Um1sc1pXNWhiV1VvYjNCMGFXOXVjeTVoY0hCU2IyOTBVR0YwYUNrZ09pQW9LU0E5UGlCMWJtUmxabWx1WldRN0NpQWdJQ0FnSUdOdmJuTjBJSE4wWVdOclJuSmhiV1Z6SUQwZ1kyRnNiRVp5WVcxbGN5NXRZWEFvWm5KaGJXVWdQVDRLSUNBZ0lDQWdJQ0JqWVd4c1JuSmhiV1ZVYjFOMFlXTnJSbkpoYldVb1puSmhiV1VzSUhOamNtbHdkSE11WjJWMEtHWnlZVzFsTG14dlkyRjBhVzl1TG5OamNtbHdkRWxrS1N3Z1oyVjBUVzlrZFd4bFRtRnRaU2tzQ2lBZ0lDQWdJQ2s3Q2dvZ0lDQWdJQ0F2THlCRmRtRnNkV0YwWlNCaElITmpjbWx3ZENCcGJpQjBhR1VnWTNWeWNtVnVkR3g1SUhCaGRYTmxaQ0JqYjI1MFpYaDBDaUFnSUNBZ0lITmxjM05wYjI0dWNHOXpkQ2dLSUNBZ0lDQWdJQ0FuVW5WdWRHbHRaUzVsZG1Gc2RXRjBaU2NzQ2lBZ0lDQWdJQ0FnZXdvZ0lDQWdJQ0FnSUNBZ0x5OGdSM0poWWlCMGFHVWdkSEpoWTJVZ1kyOXVkR1Y0ZENCbWNtOXRJSFJvWlNCamRYSnlaVzUwSUhOamIzQmxDaUFnSUNBZ0lDQWdJQ0JsZUhCeVpYTnphVzl1T2lBbloyeHZZbUZzTGw5ZlUwVk9WRkpaWDBkRlZGOVRRMDlRUlZOZlh5Z3BPeWNzQ2lBZ0lDQWdJQ0FnSUNBdkx5QkViMjRuZENCeVpTMTBjbWxuWjJWeUlIUm9aU0JrWldKMVoyZGxjaUJwWmlCMGFHbHpJR05oZFhObGN5QmhiaUJsY25KdmNnb2dJQ0FnSUNBZ0lDQWdjMmxzWlc1ME9pQjBjblZsTEFvZ0lDQWdJQ0FnSUNBZ0x5OGdVMlZ5YVdGc2FYcGxJSFJvWlNCeVpYTjFiSFFnZEc4Z2FuTnZiaUJ2ZEdobGNuZHBjMlVnYjI1c2VTQndjbWx0YVhScGRtVnpJR0Z5WlNCemRYQndiM0owWldRS0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmtKNVZtRnNkV1U2SUhSeWRXVXNDaUFnSUNBZ0lDQWdmU3dLSUNBZ0lDQWdJQ0FvWlhKeUxDQndZWEpoYlNrZ1BUNGdld29nSUNBZ0lDQWdJQ0FnYVdZZ0tHVnljaWtnZXdvZ0lDQWdJQ0FnSUNBZ0lDQnNiMmNvWUVWeWNtOXlJR1Y0WldOMWRHbHVaeUJ6WTNKcGNIUTZJQ2NrZTJWeWNpNXRaWE56WVdkbGZTZGdLVHNLSUNBZ0lDQWdJQ0FnSUgwS0NpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCelkyOXdaWE1nUFNCd1lYSmhiU0FtSmlCd1lYSmhiUzV5WlhOMWJIUWdQeUFvY0dGeVlXMHVjbVZ6ZFd4MExuWmhiSFZsSUNrZ09pQjFibVJsWm1sdVpXUTdDZ29nSUNBZ0lDQWdJQ0FnYzJWemMybHZiaTV3YjNOMEtDZEVaV0oxWjJkbGNpNXlaWE4xYldVbktUc0tJQ0FnSUNBZ0lDQWdJSE5sYzNOcGIyNHVjRzl6ZENnblJHVmlkV2RuWlhJdVpHbHpZV0pzWlNjcE93b0tJQ0FnSUNBZ0lDQWdJSE5sYm1SQmJuSkZkbVZ1ZENoemRHRmphMFp5WVcxbGN5d2djMk52Y0dWektTNTBhR1Z1S0c1MWJHd3NJQ2dwSUQwK0lIc0tJQ0FnSUNBZ0lDQWdJQ0FnYkc5bktDZFRaVzVrYVc1bklFRk9VaUJsZG1WdWRDQm1ZV2xzWldRdUp5azdDaUFnSUNBZ0lDQWdJQ0I5S1RzS0lDQWdJQ0FnSUNCOUxBb2dJQ0FnSUNBcE93b2dJQ0FnZlNCallYUmphQ0FvWlNrZ2V3b2dJQ0FnSUNCelpYTnphVzl1TG5CdmMzUW9KMFJsWW5WbloyVnlMbkpsYzNWdFpTY3BPd29nSUNBZ0lDQnpaWE56YVc5dUxuQnZjM1FvSjBSbFluVm5aMlZ5TG1ScGMyRmliR1VuS1RzS0lDQWdJQ0FnZEdoeWIzY2daVHNLSUNBZ0lIMEtJQ0I5S1RzS0NpQWdaR1ZpZFdkblpYSlFZWFZ6WlNBOUlDZ3BJRDArSUhzS0lDQWdJSFJ5ZVNCN0NpQWdJQ0FnSUhObGMzTnBiMjR1Y0c5emRDZ25SR1ZpZFdkblpYSXVaVzVoWW14bEp5d2dLQ2tnUFQ0Z2V3b2dJQ0FnSUNBZ0lITmxjM05wYjI0dWNHOXpkQ2duUkdWaWRXZG5aWEl1Y0dGMWMyVW5LVHNLSUNBZ0lDQWdmU2s3Q2lBZ0lDQjlJR05oZEdOb0lDaGZLU0I3Q2lBZ0lDQWdJQzh2Q2lBZ0lDQjlDaUFnZlRzS2ZRb0tablZ1WTNScGIyNGdZM0psWVhSbFNISlVhVzFsY2lncElIc0tJQ0F2THlCVVQwUlBJQ2gyT0NrNklGZGxJR05oYmlCMWMyVWdjSEp2WTJWemN5NW9jblJwYldVdVltbG5hVzUwS0NrZ1lXWjBaWElnZDJVZ1pISnZjQ0J1YjJSbElIWTRDaUFnYkdWMElHeGhjM1JRYjJ4c0lEMGdjSEp2WTJWemN5NW9jblJwYldVb0tUc0tDaUFnY21WMGRYSnVJSHNLSUNBZ0lHZGxkRlJwYldWTmN6b2dLQ2tnUFQ0Z2V3b2dJQ0FnSUNCamIyNXpkQ0JiYzJWamIyNWtjeXdnYm1GdWIxTmxZMjl1WkhOZElEMGdjSEp2WTJWemN5NW9jblJwYldVb2JHRnpkRkJ2Ykd3cE93b2dJQ0FnSUNCeVpYUjFjbTRnVFdGMGFDNW1iRzl2Y2loelpXTnZibVJ6SUNvZ01XVXpJQ3NnYm1GdWIxTmxZMjl1WkhNZ0x5QXhaVFlwT3dvZ0lDQWdmU3dLSUNBZ0lISmxjMlYwT2lBb0tTQTlQaUI3Q2lBZ0lDQWdJR3hoYzNSUWIyeHNJRDBnY0hKdlkyVnpjeTVvY25ScGJXVW9LVHNLSUNBZ0lIMHNDaUFnZlRzS2ZRb0tablZ1WTNScGIyNGdkMkYwWTJoa2IyZFVhVzFsYjNWMEtDa2dld29nSUd4dlp5Z25WMkYwWTJoa2IyY2dkR2x0Wlc5MWRDY3BPd29LSUNCcFppQW9aR1ZpZFdkblpYSlFZWFZ6WlNrZ2V3b2dJQ0FnYkc5bktDZFFZWFZ6YVc1bklHUmxZblZuWjJWeUlIUnZJR05oY0hSMWNtVWdjM1JoWTJzZ2RISmhZMlVuS1RzS0lDQWdJR1JsWW5WbloyVnlVR0YxYzJVb0tUc0tJQ0I5SUdWc2MyVWdld29nSUNBZ2JHOW5LQ2REWVhCMGRYSnBibWNnWlhabGJuUWdkMmwwYUc5MWRDQmhJSE4wWVdOcklIUnlZV05sSnlrN0NpQWdJQ0J6Wlc1a1FXNXlSWFpsYm5Rb0tTNTBhR1Z1S0c1MWJHd3NJQ2dwSUQwK0lIc0tJQ0FnSUNBZ2JHOW5LQ2RUWlc1a2FXNW5JRUZPVWlCbGRtVnVkQ0JtWVdsc1pXUWdiMjRnZDJGMFkyaGtiMmNnZEdsdFpXOTFkQzRuS1RzS0lDQWdJSDBwT3dvZ0lIMEtmUW9LWTI5dWMzUWdleUJ3YjJ4c0lIMGdQU0IzWVhSamFHUnZaMVJwYldWeUtHTnlaV0YwWlVoeVZHbHRaWElzSUc5d2RHbHZibk11Y0c5c2JFbHVkR1Z5ZG1Gc0xDQnZjSFJwYjI1ekxtRnVjbFJvY21WemFHOXNaQ3dnZDJGMFkyaGtiMmRVYVcxbGIzVjBLVHNLQ2w5dmNIUnBiMjVoYkVOb1lXbHVLRnR3WVhKbGJuUlFiM0owTENBbmIzQjBhVzl1WVd4QlkyTmxjM01uTENCZk5pQTlQaUJmTmk1dmJpd2dKMk5oYkd3bkxDQmZOeUE5UGlCZk55Z25iV1Z6YzJGblpTY3NJQ2h0YzJjcElEMCtJSHNLSUNCcFppQW9iWE5uTG5ObGMzTnBiMjRwSUhzS0lDQWdJSE5sYzNOcGIyNGdQU0J0WVd0bFUyVnpjMmx2YmlodGMyY3VjMlZ6YzJsdmJpazdDaUFnZlFvS0lDQndiMnhzS0NrN0NuMHBYU2s3XCI7XG4iLAogICAgInZhciB7XG4gIF9vcHRpb25hbENoYWluLFxuICBfb3B0aW9uYWxDaGFpbkRlbGV0ZVxufSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcbmNvbnN0IG5vZGVWZXJzaW9uID0gcmVxdWlyZSgnLi4vLi4vbm9kZVZlcnNpb24uanMnKTtcbmNvbnN0IHdvcmtlclNjcmlwdCA9IHJlcXVpcmUoJy4vd29ya2VyLXNjcmlwdC5qcycpO1xuXG5jb25zdCBERUZBVUxUX0lOVEVSVkFMID0gNTA7XG5jb25zdCBERUZBVUxUX0hBTkdfVEhSRVNIT0xEID0gNTAwMDtcblxuZnVuY3Rpb24gbG9nKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgdXRpbHMubG9nZ2VyLmxvZyhgW0FOUl0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xufVxuXG5mdW5jdGlvbiBnbG9iYWxXaXRoU2NvcGVGZXRjaEZuKCkge1xuICByZXR1cm4gdXRpbHMuR0xPQkFMX09CSjtcbn1cblxuLyoqIEZldGNoZXMgbWVyZ2VkIHNjb3BlIGRhdGEgKi9cbmZ1bmN0aW9uIGdldFNjb3BlRGF0YSgpIHtcbiAgY29uc3Qgc2NvcGUgPSBjb3JlLmdldEdsb2JhbFNjb3BlKCkuZ2V0U2NvcGVEYXRhKCk7XG4gIGNvcmUubWVyZ2VTY29wZURhdGEoc2NvcGUsIGNvcmUuZ2V0SXNvbGF0aW9uU2NvcGUoKS5nZXRTY29wZURhdGEoKSk7XG4gIGNvcmUubWVyZ2VTY29wZURhdGEoc2NvcGUsIGNvcmUuZ2V0Q3VycmVudFNjb3BlKCkuZ2V0U2NvcGVEYXRhKCkpO1xuXG4gIC8vIFdlIHJlbW92ZSBhdHRhY2htZW50cyBiZWNhdXNlIHRoZXkgbGlrZWx5IHdvbid0IHNlcmlhbGl6ZSB3ZWxsIGFzIGpzb25cbiAgc2NvcGUuYXR0YWNobWVudHMgPSBbXTtcbiAgLy8gV2UgY2FuJ3Qgc2VyaWFsaXplIGV2ZW50IHByb2Nlc3NvciBmdW5jdGlvbnNcbiAgc2NvcGUuZXZlbnRQcm9jZXNzb3JzID0gW107XG5cbiAgcmV0dXJuIHNjb3BlO1xufVxuXG4vKipcbiAqIFdlIG5lZWQgdG8gdXNlIGR5bmFtaWNSZXF1aXJlIGJlY2F1c2Ugd29ya2VyX3RocmVhZHMgaXMgbm90IGF2YWlsYWJsZSBpbiBub2RlIDwgdjEyIGFuZCB3ZWJwYWNrIGVycm9yIHdpbGwgd2hlblxuICogdGFyZ2V0aW5nIHRob3NlIHZlcnNpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFdvcmtlclRocmVhZHMoKSB7XG4gIHJldHVybiB1dGlscy5keW5hbWljUmVxdWlyZShtb2R1bGUsICd3b3JrZXJfdGhyZWFkcycpO1xufVxuXG4vKipcbiAqIEdldHMgY29udGV4dHMgYnkgY2FsbGluZyBhbGwgZXZlbnQgcHJvY2Vzc29ycy4gVGhpcyByZWxpZXMgb24gYmVpbmcgY2FsbGVkIGFmdGVyIGFsbCBpbnRlZ3JhdGlvbnMgYXJlIHNldHVwXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzKGNsaWVudCkge1xuICBsZXQgZXZlbnQgPSB7IG1lc3NhZ2U6ICdBTlInIH07XG4gIGNvbnN0IGV2ZW50SGludCA9IHt9O1xuXG4gIGZvciAoY29uc3QgcHJvY2Vzc29yIG9mIGNsaWVudC5nZXRFdmVudFByb2Nlc3NvcnMoKSkge1xuICAgIGlmIChldmVudCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgZXZlbnQgPSBhd2FpdCBwcm9jZXNzb3IoZXZlbnQsIGV2ZW50SGludCk7XG4gIH1cblxuICByZXR1cm4gX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5jb250ZXh0c10pIHx8IHt9O1xufVxuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0Fucic7XG5cbmNvbnN0IF9hbnJJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChub2RlVmVyc2lvbi5OT0RFX1ZFUlNJT04ubWFqb3IgPCAxNiB8fCAobm9kZVZlcnNpb24uTk9ERV9WRVJTSU9OLm1ham9yID09PSAxNiAmJiBub2RlVmVyc2lvbi5OT0RFX1ZFUlNJT04ubWlub3IgPCAxNykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FOUiBkZXRlY3Rpb24gcmVxdWlyZXMgTm9kZSAxNi4xNy4wIG9yIGxhdGVyJyk7XG4gIH1cblxuICBsZXQgd29ya2VyO1xuICBsZXQgY2xpZW50O1xuXG4gIC8vIEhvb2t1cCB0aGUgc2NvcGUgZmV0Y2ggZnVuY3Rpb24gdG8gdGhlIGdsb2JhbCBvYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQgdmlhIHRoZVxuICAvLyBkZWJ1Z2dlciB3aGVuIGl0IHBhdXNlc1xuICBjb25zdCBnYmwgPSBnbG9iYWxXaXRoU2NvcGVGZXRjaEZuKCk7XG4gIGdibC5fX1NFTlRSWV9HRVRfU0NPUEVTX18gPSBnZXRTY29wZURhdGE7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgc3RhcnRXb3JrZXI6ICgpID0+IHtcbiAgICAgIGlmICh3b3JrZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHdvcmtlciA9IF9zdGFydFdvcmtlcihjbGllbnQsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RvcFdvcmtlcjogKCkgPT4ge1xuICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHdvcmtlci50aGVuKHN0b3AgPT4ge1xuICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICB3b3JrZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0dXAoaW5pdENsaWVudCkge1xuICAgICAgY2xpZW50ID0gaW5pdENsaWVudDtcblxuICAgICAgLy8gc2V0SW1tZWRpYXRlIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYWxsIG90aGVyIGludGVncmF0aW9ucyBoYXZlIGhhZCB0aGVpciBzZXR1cCBjYWxsZWQgZmlyc3QuXG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBjYWxsIGludG8gYWxsIGludGVncmF0aW9ucyB0byBmZXRjaCB0aGUgZnVsbCBjb250ZXh0XG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gdGhpcy5zdGFydFdvcmtlcigpKTtcbiAgICB9LFxuICB9IDtcbn0pIDtcblxuY29uc3QgYW5ySW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9hbnJJbnRlZ3JhdGlvbikgO1xuXG4vKipcbiAqIFN0YXJ0cyBhIHRocmVhZCB0byBkZXRlY3QgQXBwIE5vdCBSZXNwb25kaW5nIChBTlIpIGV2ZW50c1xuICpcbiAqIEFOUiBkZXRlY3Rpb24gcmVxdWlyZXMgTm9kZSAxNi4xNy4wIG9yIGxhdGVyXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBhbnJJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IEFuciA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKElOVEVHUkFUSU9OX05BTUUsIGFuckludGVncmF0aW9uKVxuXG47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4vKipcbiAqIFN0YXJ0cyB0aGUgQU5SIHdvcmtlciB0aHJlYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX3N0YXJ0V29ya2VyKFxuICBjbGllbnQsXG4gIGludGVncmF0aW9uT3B0aW9ucyxcbikge1xuICBjb25zdCBkc24gPSBjbGllbnQuZ2V0RHNuKCk7XG5cbiAgaWYgKCFkc24pIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLy9cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgY29udGV4dHMgPSBhd2FpdCBnZXRDb250ZXh0cyhjbGllbnQpO1xuXG4gIC8vIFRoZXNlIHdpbGwgbm90IGJlIGFjY3VyYXRlIGlmIHNlbnQgbGF0ZXIgZnJvbSB0aGUgd29ya2VyIHRocmVhZFxuICAgX29wdGlvbmFsQ2hhaW5EZWxldGUoW2NvbnRleHRzLCAnYWNjZXNzJywgXzMgPT4gXzMuYXBwLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBkZWxldGUgXzQuYXBwX21lbW9yeV0pO1xuICAgX29wdGlvbmFsQ2hhaW5EZWxldGUoW2NvbnRleHRzLCAnYWNjZXNzJywgXzUgPT4gXzUuZGV2aWNlLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBkZWxldGUgXzYuZnJlZV9tZW1vcnldKTtcblxuICBjb25zdCBpbml0T3B0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgY29uc3Qgc2RrTWV0YWRhdGEgPSBjbGllbnQuZ2V0U2RrTWV0YWRhdGEoKSB8fCB7fTtcbiAgaWYgKHNka01ldGFkYXRhLnNkaykge1xuICAgIHNka01ldGFkYXRhLnNkay5pbnRlZ3JhdGlvbnMgPSBpbml0T3B0aW9ucy5pbnRlZ3JhdGlvbnMubWFwKGkgPT4gaS5uYW1lKTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgZGVidWc6IHV0aWxzLmxvZ2dlci5pc0VuYWJsZWQoKSxcbiAgICBkc24sXG4gICAgZW52aXJvbm1lbnQ6IGluaXRPcHRpb25zLmVudmlyb25tZW50IHx8ICdwcm9kdWN0aW9uJyxcbiAgICByZWxlYXNlOiBpbml0T3B0aW9ucy5yZWxlYXNlLFxuICAgIGRpc3Q6IGluaXRPcHRpb25zLmRpc3QsXG4gICAgc2RrTWV0YWRhdGEsXG4gICAgYXBwUm9vdFBhdGg6IGludGVncmF0aW9uT3B0aW9ucy5hcHBSb290UGF0aCxcbiAgICBwb2xsSW50ZXJ2YWw6IGludGVncmF0aW9uT3B0aW9ucy5wb2xsSW50ZXJ2YWwgfHwgREVGQVVMVF9JTlRFUlZBTCxcbiAgICBhbnJUaHJlc2hvbGQ6IGludGVncmF0aW9uT3B0aW9ucy5hbnJUaHJlc2hvbGQgfHwgREVGQVVMVF9IQU5HX1RIUkVTSE9MRCxcbiAgICBjYXB0dXJlU3RhY2tUcmFjZTogISFpbnRlZ3JhdGlvbk9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UsXG4gICAgc3RhdGljVGFnczogaW50ZWdyYXRpb25PcHRpb25zLnN0YXRpY1RhZ3MgfHwge30sXG4gICAgY29udGV4dHMsXG4gIH07XG5cbiAgaWYgKG9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IGluc3BlY3RvciA9IHJlcXVpcmUoJ2luc3BlY3RvcicpO1xuICAgIGlmICghaW5zcGVjdG9yLnVybCgpKSB7XG4gICAgICBpbnNwZWN0b3Iub3BlbigwKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB7IFdvcmtlciB9ID0gZ2V0V29ya2VyVGhyZWFkcygpO1xuXG4gIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IHVybC5VUkwoYGRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsJHt3b3JrZXJTY3JpcHQuYmFzZTY0V29ya2VyU2NyaXB0fWApLCB7XG4gICAgd29ya2VyRGF0YTogb3B0aW9ucyxcbiAgfSk7XG5cbiAgcHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICB9KTtcblxuICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudFNlc3Npb24gPSBjb3JlLmdldEN1cnJlbnRTY29wZSgpLmdldFNlc3Npb24oKTtcbiAgICAgIC8vIFdlIG5lZWQgdG8gY29weSB0aGUgc2Vzc2lvbiBvYmplY3QgYW5kIHJlbW92ZSB0aGUgdG9KU09OIG1ldGhvZCBzbyBpdCBjYW4gYmUgc2VudCB0byB0aGUgd29ya2VyXG4gICAgICAvLyBzZXJpYWxpemVkIHdpdGhvdXQgbWFraW5nIGl0IGEgU2VyaWFsaXplZFNlc3Npb25cbiAgICAgIGNvbnN0IHNlc3Npb24gPSBjdXJyZW50U2Vzc2lvbiA/IHsgLi4uY3VycmVudFNlc3Npb24sIHRvSlNPTjogdW5kZWZpbmVkIH0gOiB1bmRlZmluZWQ7XG4gICAgICAvLyBtZXNzYWdlIHRoZSB3b3JrZXIgdG8gdGVsbCBpdCB0aGUgbWFpbiBldmVudCBsb29wIGlzIHN0aWxsIHJ1bm5pbmdcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7IHNlc3Npb24gfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy9cbiAgICB9XG4gIH0sIG9wdGlvbnMucG9sbEludGVydmFsKTtcbiAgLy8gVGltZXIgc2hvdWxkIG5vdCBibG9jayBleGl0XG4gIHRpbWVyLnVucmVmKCk7XG5cbiAgd29ya2VyLm9uKCdtZXNzYWdlJywgKG1zZykgPT4ge1xuICAgIGlmIChtc2cgPT09ICdzZXNzaW9uLWVuZGVkJykge1xuICAgICAgbG9nKCdBTlIgZXZlbnQgc2VudCBmcm9tIEFOUiB3b3JrZXIuIENsZWFyaW5nIHNlc3Npb24gaW4gdGhpcyB0aHJlYWQuJyk7XG4gICAgICBjb3JlLmdldEN1cnJlbnRTY29wZSgpLnNldFNlc3Npb24odW5kZWZpbmVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHdvcmtlci5vbmNlKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICBsb2coJ0FOUiB3b3JrZXIgZXJyb3InLCBlcnIpO1xuICB9KTtcblxuICB3b3JrZXIub25jZSgnZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgbG9nKCdBTlIgd29ya2VyIGV4aXQnLCBjb2RlKTtcbiAgfSk7XG5cbiAgLy8gRW5zdXJlIHRoaXMgdGhyZWFkIGNhbid0IGJsb2NrIGFwcCBleGl0XG4gIHdvcmtlci51bnJlZigpO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgfTtcbn1cblxuZXhwb3J0cy5BbnIgPSBBbnI7XG5leHBvcnRzLmFuckludGVncmF0aW9uID0gYW5ySW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgaW5kZXggPSByZXF1aXJlKCcuL2luZGV4LmpzJyk7XG5cbi8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgZW50aXJlIGZpbGUgYW5kIHRoZSBgZW5hYmxlQW5yRGV0ZWN0aW9uYCBleHBvcnRcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBBbnJgIGludGVncmF0aW9uIGluc3RlYWQuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L25vZGUnO1xuICpcbiAqIFNlbnRyeS5pbml0KHtcbiAqICAgZHNuOiAnX19EU05fXycsXG4gKiAgIGludGVncmF0aW9uczogW25ldyBTZW50cnkuSW50ZWdyYXRpb25zLkFucih7IGNhcHR1cmVTdGFja1RyYWNlOiB0cnVlIH0pXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGVuYWJsZUFuckRldGVjdGlvbihvcHRpb25zKSB7XG4gIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCkgO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgY29uc3QgaW50ZWdyYXRpb24gPSBuZXcgaW5kZXguQW5yKG9wdGlvbnMpO1xuICBpbnRlZ3JhdGlvbi5zZXR1cChjbGllbnQpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbmV4cG9ydHMuZW5hYmxlQW5yRGV0ZWN0aW9uID0gZW5hYmxlQW5yRGV0ZWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGVnYWN5LmpzLm1hcFxuIiwKICAgICJ2YXIge1xuICBfb3B0aW9uYWxDaGFpblxufSA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbi8qKlxuICogU2VudHJ5IHRSUEMgbWlkZGxld2FyZSB0aGF0IG5hbWVzIHRoZSBoYW5kbGluZyB0cmFuc2FjdGlvbiBhZnRlciB0aGUgY2FsbGVkIHByb2NlZHVyZS5cbiAqXG4gKiBVc2UgdGhlIFNlbnRyeSB0UlBDIG1pZGRsZXdhcmUgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgU2VudHJ5IHNlcnZlciBpbnRlZ3JhdGlvbixcbiAqIGUuZy4gRXhwcmVzcyBSZXF1ZXN0IEhhbmRsZXJzIG9yIE5leHQuanMgU0RLLlxuICovXG5mdW5jdGlvbiB0cnBjTWlkZGxld2FyZShvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh7IHBhdGgsIHR5cGUsIG5leHQsIHJhd0lucHV0IH0pIHtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gX29wdGlvbmFsQ2hhaW4oW2NvcmUuZ2V0Q2xpZW50LCAnY2FsbCcsIF8gPT4gXygpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5nZXRPcHRpb25zLCAnY2FsbCcsIF8zID0+IF8zKCldKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBzZW50cnlUcmFuc2FjdGlvbiA9IGNvcmUuZ2V0Q3VycmVudFNjb3BlKCkuZ2V0VHJhbnNhY3Rpb24oKTtcblxuICAgIGlmIChzZW50cnlUcmFuc2FjdGlvbikge1xuICAgICAgc2VudHJ5VHJhbnNhY3Rpb24udXBkYXRlTmFtZShgdHJwYy8ke3BhdGh9YCk7XG4gICAgICBzZW50cnlUcmFuc2FjdGlvbi5zZXRBdHRyaWJ1dGUoY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgJ3JvdXRlJyk7XG4gICAgICBzZW50cnlUcmFuc2FjdGlvbi5vcCA9ICdycGMuc2VydmVyJztcblxuICAgICAgY29uc3QgdHJwY0NvbnRleHQgPSB7XG4gICAgICAgIHByb2NlZHVyZV90eXBlOiB0eXBlLFxuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMuYXR0YWNoUnBjSW5wdXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXR0YWNoUnBjSW5wdXQgOiBfb3B0aW9uYWxDaGFpbihbY2xpZW50T3B0aW9ucywgJ29wdGlvbmFsQWNjZXNzJywgXzQgPT4gXzQuc2VuZERlZmF1bHRQaWldKSkge1xuICAgICAgICB0cnBjQ29udGV4dC5pbnB1dCA9IHV0aWxzLm5vcm1hbGl6ZShyYXdJbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IENhbiB3ZSByZXdyaXRlIHRoaXMgdG8gYW4gYXR0cmlidXRlPyBPciBzZXQgdGhpcyBvbiB0aGUgc2NvcGU/XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHNlbnRyeVRyYW5zYWN0aW9uLnNldENvbnRleHQoJ3RycGMnLCB0cnBjQ29udGV4dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FwdHVyZUlmRXJyb3IobmV4dFJlc3VsdCkge1xuICAgICAgaWYgKCFuZXh0UmVzdWx0Lm9rKSB7XG4gICAgICAgIGNvcmUuY2FwdHVyZUV4Y2VwdGlvbihuZXh0UmVzdWx0LmVycm9yLCB7IG1lY2hhbmlzbTogeyBoYW5kbGVkOiBmYWxzZSwgZGF0YTogeyBmdW5jdGlvbjogJ3RycGNNaWRkbGV3YXJlJyB9IH0gfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1heWJlUHJvbWlzZVJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgbWF5YmVQcm9taXNlUmVzdWx0ID0gbmV4dCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvcmUuY2FwdHVyZUV4Y2VwdGlvbihlLCB7IG1lY2hhbmlzbTogeyBoYW5kbGVkOiBmYWxzZSwgZGF0YTogeyBmdW5jdGlvbjogJ3RycGNNaWRkbGV3YXJlJyB9IH0gfSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1RoZW5hYmxlKG1heWJlUHJvbWlzZVJlc3VsdCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2VSZXN1bHQpLnRoZW4oXG4gICAgICAgIG5leHRSZXN1bHQgPT4ge1xuICAgICAgICAgIGNhcHR1cmVJZkVycm9yKG5leHRSZXN1bHQgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZSA9PiB7XG4gICAgICAgICAgY29yZS5jYXB0dXJlRXhjZXB0aW9uKGUsIHsgbWVjaGFuaXNtOiB7IGhhbmRsZWQ6IGZhbHNlLCBkYXRhOiB7IGZ1bmN0aW9uOiAndHJwY01pZGRsZXdhcmUnIH0gfSB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcHR1cmVJZkVycm9yKG1heWJlUHJvbWlzZVJlc3VsdCApO1xuICAgIH1cblxuICAgIC8vIFdlIHJldHVybiB0aGUgb3JpZ2luYWwgcHJvbWlzZSBqdXN0IHRvIGJlIHNhZmUuXG4gICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0cy50cnBjTWlkZGxld2FyZSA9IHRycGNNaWRkbGV3YXJlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJwYy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgYEhhbmRsZXJzLkV4cHJlc3NSZXF1ZXN0YCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBgUG9seW1vcnBoaWNSZXF1ZXN0YCBpbnN0ZWFkLlxuICovXG5cbi8qKlxuICogTm9ybWFsaXplcyBkYXRhIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0LCBhY2NvdW50aW5nIGZvciBmcmFtZXdvcmsgZGlmZmVyZW5jZXMuXG4gKlxuICogQGRlcHJlY2F0ZWQgYEhhbmRsZXJzLmV4dHJhY3RSZXF1ZXN0RGF0YWAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgYGV4dHJhY3RSZXF1ZXN0RGF0YWAgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IG9iamVjdCBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgZGF0YVxuICogQHBhcmFtIGtleXMgQW4gb3B0aW9uYWwgYXJyYXkgb2Yga2V5cyB0byBpbmNsdWRlIGluIHRoZSBub3JtYWxpemVkIGRhdGEuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBub3JtYWxpemVkIHJlcXVlc3QgZGF0YVxuICovXG5mdW5jdGlvbiBleHRyYWN0UmVxdWVzdERhdGEocmVxLCBrZXlzKSB7XG4gIHJldHVybiB1dGlscy5leHRyYWN0UmVxdWVzdERhdGEocmVxLCB7IGluY2x1ZGU6IGtleXMgfSk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBkZWNpZGluZyB3aGF0IHBhcnRzIG9mIHRoZSByZXF1ZXN0IHRvIHVzZSB3aGVuIGVuaGFuY2luZyBhbiBldmVudFxuICpcbiAqIEBkZXByZWNhdGVkIGBIYW5kbGVycy5QYXJzZVJlcXVlc3RPcHRpb25zYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZVxuICogYEFkZFJlcXVlc3REYXRhVG9FdmVudE9wdGlvbnNgIGluIGBAc2VudHJ5L3V0aWxzYCBpbnN0ZWFkLlxuICovXG5cbi8qKlxuICogRW5yaWNoZXMgcGFzc2VkIGV2ZW50IHdpdGggcmVxdWVzdCBkYXRhLlxuICpcbiAqIEBkZXByZWNhdGVkIGBIYW5kbGVycy5wYXJzZVJlcXVlc3RgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGBhZGRSZXF1ZXN0RGF0YVRvRXZlbnRgIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIGV2ZW50IFdpbGwgYmUgbXV0YXRlZCBhbmQgZW5yaWNoZWQgd2l0aCByZXEgZGF0YVxuICogQHBhcmFtIHJlcSBSZXF1ZXN0IG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgZmxhZ3MgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHlcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gcGFyc2VSZXF1ZXN0KGV2ZW50LCByZXEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gdXRpbHMuYWRkUmVxdWVzdERhdGFUb0V2ZW50KGV2ZW50LCByZXEsIHsgaW5jbHVkZTogb3B0aW9ucyB9KTtcbn1cblxuZXhwb3J0cy5leHRyYWN0UmVxdWVzdERhdGEgPSBleHRyYWN0UmVxdWVzdERhdGE7XG5leHBvcnRzLnBhcnNlUmVxdWVzdCA9IHBhcnNlUmVxdWVzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3REYXRhRGVwcmVjYXRlZC5qcy5tYXBcbiIsCiAgICAidmFyIHtcbiAgX29wdGlvbmFsQ2hhaW5cbn0gPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcbmNvbnN0IHNkayA9IHJlcXVpcmUoJy4vc2RrLmpzJyk7XG5jb25zdCB0cnBjID0gcmVxdWlyZSgnLi90cnBjLmpzJyk7XG5jb25zdCByZXF1ZXN0RGF0YURlcHJlY2F0ZWQgPSByZXF1aXJlKCcuL3JlcXVlc3REYXRhRGVwcmVjYXRlZC5qcycpO1xuXG4vKipcbiAqIEV4cHJlc3MtY29tcGF0aWJsZSB0cmFjaW5nIGhhbmRsZXIuXG4gKiBAc2VlIEV4cG9zZWQgYXMgYEhhbmRsZXJzLnRyYWNpbmdIYW5kbGVyYFxuICovXG5mdW5jdGlvbiB0cmFjaW5nSGFuZGxlcigpXG5cbiB7XG4gIHJldHVybiBmdW5jdGlvbiBzZW50cnlUcmFjaW5nTWlkZGxld2FyZShcbiAgICByZXEsXG4gICAgcmVzLFxuICAgIG5leHQsXG4gICkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBfb3B0aW9uYWxDaGFpbihbY29yZS5nZXRDbGllbnQsICdjYWxsJywgXyA9PiBfKCksICdvcHRpb25hbEFjY2VzcycsIF8yID0+IF8yLmdldE9wdGlvbnMsICdjYWxsJywgXzMgPT4gXzMoKV0pO1xuXG4gICAgaWYgKFxuICAgICAgIW9wdGlvbnMgfHxcbiAgICAgIG9wdGlvbnMuaW5zdHJ1bWVudGVyICE9PSAnc2VudHJ5JyB8fFxuICAgICAgX29wdGlvbmFsQ2hhaW4oW3JlcSwgJ2FjY2VzcycsIF80ID0+IF80Lm1ldGhvZCwgJ29wdGlvbmFsQWNjZXNzJywgXzUgPT4gXzUudG9VcHBlckNhc2UsICdjYWxsJywgXzYgPT4gXzYoKV0pID09PSAnT1BUSU9OUycgfHxcbiAgICAgIF9vcHRpb25hbENoYWluKFtyZXEsICdhY2Nlc3MnLCBfNyA9PiBfNy5tZXRob2QsICdvcHRpb25hbEFjY2VzcycsIF84ID0+IF84LnRvVXBwZXJDYXNlLCAnY2FsbCcsIF85ID0+IF85KCldKSA9PT0gJ0hFQUQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbnRyeVRyYWNlID0gcmVxLmhlYWRlcnMgJiYgdXRpbHMuaXNTdHJpbmcocmVxLmhlYWRlcnNbJ3NlbnRyeS10cmFjZSddKSA/IHJlcS5oZWFkZXJzWydzZW50cnktdHJhY2UnXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBiYWdnYWdlID0gX29wdGlvbmFsQ2hhaW4oW3JlcSwgJ2FjY2VzcycsIF8xMCA9PiBfMTAuaGVhZGVycywgJ29wdGlvbmFsQWNjZXNzJywgXzExID0+IF8xMS5iYWdnYWdlXSk7XG4gICAgaWYgKCFjb3JlLmhhc1RyYWNpbmdFbmFibGVkKG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cblxuICAgIGNvbnN0IFtuYW1lLCBzb3VyY2VdID0gdXRpbHMuZXh0cmFjdFBhdGhGb3JUcmFuc2FjdGlvbihyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlIH0pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gY29yZS5jb250aW51ZVRyYWNlKHsgc2VudHJ5VHJhY2UsIGJhZ2dhZ2UgfSwgY3R4ID0+XG4gICAgICAvLyBUT0RPOiBSZWZhY3RvciB0aGlzIHRvIHVzZSBgc3RhcnRTcGFuKClgXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIGNvcmUuc3RhcnRUcmFuc2FjdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgb3A6ICdodHRwLnNlcnZlcicsXG4gICAgICAgICAgb3JpZ2luOiAnYXV0by5odHRwLm5vZGUudHJhY2luZ0hhbmRsZXInLFxuICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBbY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06IHNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICAgIC4uLmN0eC5tZXRhZGF0YSxcbiAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzdG9yZWQgaW4gYHNjb3BlLnNka1Byb2Nlc3NpbmdNZXRhZGF0YWAgKHdoaWNoIHdpbGwgYmVjb21lXG4gICAgICAgICAgICAvLyBgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhYCB0aGUgc2FtZSB3YXkgdGhlIG1ldGFkYXRhIGhlcmUgd2lsbCkgYnkgYHNlbnRyeVJlcXVlc3RNaWRkbGV3YXJlYCwgYnV0IG9uIHRoZVxuICAgICAgICAgICAgLy8gb2ZmIGNoYW5jZSBzb21lb25lIGlzIHVzaW5nIGBzZW50cnlUcmFjaW5nTWlkZGxld2FyZWAgd2l0aG91dCBgc2VudHJ5UmVxdWVzdE1pZGRsZXdhcmVgLCBpdCBkb2Vzbid0IGh1cnQgdG9cbiAgICAgICAgICAgIC8vIGJlIHN1cmVcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBleHRyYSBjb250ZXh0IHBhc3NlZCB0byB0aGUgdHJhY2VzU2FtcGxlclxuICAgICAgICB7IHJlcXVlc3Q6IHV0aWxzLmV4dHJhY3RSZXF1ZXN0RGF0YShyZXEpIH0sXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyBXZSBwdXQgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBzY29wZSBzbyB1c2VycyBjYW4gYXR0YWNoIGNoaWxkcmVuIHRvIGl0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgY29yZS5nZXRDdXJyZW50U2NvcGUoKS5zZXRTcGFuKHRyYW5zYWN0aW9uKTtcblxuICAgIC8vIFdlIGFsc28gc2V0IF9fc2VudHJ5X3RyYW5zYWN0aW9uIG9uIHRoZSByZXNwb25zZSBzbyBwZW9wbGUgY2FuIGdyYWIgdGhlIHRyYW5zYWN0aW9uIHRoZXJlIHRvIGFkZFxuICAgIC8vIHNwYW5zIHRvIGl0IGxhdGVyLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAocmVzICkuX19zZW50cnlfdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcblxuICAgIHJlcy5vbmNlKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAvLyBQdXNoIGB0cmFuc2FjdGlvbi5maW5pc2hgIHRvIHRoZSBuZXh0IGV2ZW50IGxvb3Agc28gb3BlbiBzcGFucyBoYXZlIGEgY2hhbmNlIHRvIGZpbmlzaCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAvLyBjbG9zZXNcbiAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICB1dGlscy5hZGRSZXF1ZXN0RGF0YVRvVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHJlcSk7XG4gICAgICAgIGNvcmUuc2V0SHR0cFN0YXR1cyh0cmFuc2FjdGlvbiwgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgICB0cmFuc2FjdGlvbi5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbmV4dCgpO1xuICB9O1xufVxuXG4vKipcbiAqIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNoaW0gd2hpY2ggY2FuIGJlIHJlbW92ZWQgaW4gdjguIEZvcmNlcyB0aGUgZ2l2ZW4gb3B0aW9ucyB0byBmb2xsb3cgdGhlXG4gKiBgQWRkUmVxdWVzdERhdGFUb0V2ZW50T3B0aW9uc2AgaW50ZXJmYWNlLlxuICpcbiAqIFRPRE8gKHY4KTogR2V0IHJpZCBvZiB0aGlzLCBhbmQgc3RvcCBwYXNzaW5nIGByZXF1ZXN0RGF0YU9wdGlvbnNGcm9tRXhwcmVzc0hhbmRsZXJgIHRvIGBzZXRTREtQcm9jZXNzaW5nTWV0YWRhdGFgLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmVxSGFuZGxlck9wdHNUb0FkZFJlcURhdGFPcHRzKFxuICByZXFIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKSB7XG4gIGxldCBhZGRSZXF1ZXN0RGF0YU9wdGlvbnM7XG5cbiAgaWYgKCdpbmNsdWRlJyBpbiByZXFIYW5kbGVyT3B0aW9ucykge1xuICAgIGFkZFJlcXVlc3REYXRhT3B0aW9ucyA9IHsgaW5jbHVkZTogcmVxSGFuZGxlck9wdGlvbnMuaW5jbHVkZSB9O1xuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IHsgaXAsIHJlcXVlc3QsIHRyYW5zYWN0aW9uLCB1c2VyIH0gPSByZXFIYW5kbGVyT3B0aW9ucyA7XG5cbiAgICBpZiAoaXAgfHwgcmVxdWVzdCB8fCB0cmFuc2FjdGlvbiB8fCB1c2VyKSB7XG4gICAgICBhZGRSZXF1ZXN0RGF0YU9wdGlvbnMgPSB7IGluY2x1ZGU6IHV0aWxzLmRyb3BVbmRlZmluZWRLZXlzKHsgaXAsIHJlcXVlc3QsIHRyYW5zYWN0aW9uLCB1c2VyIH0pIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFkZFJlcXVlc3REYXRhT3B0aW9ucztcbn1cblxuLyoqXG4gKiBFeHByZXNzIGNvbXBhdGlibGUgcmVxdWVzdCBoYW5kbGVyLlxuICogQHNlZSBFeHBvc2VkIGFzIGBIYW5kbGVycy5yZXF1ZXN0SGFuZGxlcmBcbiAqL1xuZnVuY3Rpb24gcmVxdWVzdEhhbmRsZXIoXG4gIG9wdGlvbnMsXG4pIHtcbiAgLy8gVE9ETyAodjgpOiBHZXQgcmlkIG9mIHRoaXNcbiAgY29uc3QgcmVxdWVzdERhdGFPcHRpb25zID0gY29udmVydFJlcUhhbmRsZXJPcHRzVG9BZGRSZXFEYXRhT3B0cyhvcHRpb25zKTtcblxuICBjb25zdCBjbGllbnQgPSBjb3JlLmdldENsaWVudCgpO1xuICAvLyBJbml0aWFsaXNlIGFuIGluc3RhbmNlIG9mIFNlc3Npb25GbHVzaGVyIG9uIHRoZSBjbGllbnQgd2hlbiBgYXV0b1Nlc3Npb25UcmFja2luZ2AgaXMgZW5hYmxlZCBhbmQgdGhlXG4gIC8vIGByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyB1c2VkIGluZGljYXRpbmcgdGhhdCB3ZSBhcmUgcnVubmluZyBpbiBTZXNzaW9uQWdncmVnYXRlcyBtb2RlXG4gIGlmIChjbGllbnQgJiYgc2RrLmlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQoY2xpZW50KSkge1xuICAgIGNsaWVudC5pbml0U2Vzc2lvbkZsdXNoZXIoKTtcblxuICAgIC8vIElmIFNjb3BlIGNvbnRhaW5zIGEgU2luZ2xlIG1vZGUgU2Vzc2lvbiwgaXQgaXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB1c2luZyBTZXNzaW9uIEFnZ3JlZ2F0ZXMgbW9kZVxuICAgIGNvbnN0IHNjb3BlID0gY29yZS5nZXRDdXJyZW50U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUuZ2V0U2Vzc2lvbigpKSB7XG4gICAgICBzY29wZS5zZXRTZXNzaW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHNlbnRyeVJlcXVlc3RNaWRkbGV3YXJlKFxuICAgIHJlcSxcbiAgICByZXMsXG4gICAgbmV4dCxcbiAgKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5mbHVzaFRpbWVvdXQgJiYgb3B0aW9ucy5mbHVzaFRpbWVvdXQgPiAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICBjb25zdCBfZW5kID0gcmVzLmVuZDtcbiAgICAgIHJlcy5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICB2b2lkIGNvcmUuZmx1c2gob3B0aW9ucy5mbHVzaFRpbWVvdXQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgX2VuZC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4obnVsbCwgZSA9PiB7XG4gICAgICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci5lcnJvcihlKTtcbiAgICAgICAgICAgIF9lbmQuY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvcmUucnVuV2l0aEFzeW5jQ29udGV4dCgoKSA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IGNvcmUuZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgICBzY29wZS5zZXRTREtQcm9jZXNzaW5nTWV0YWRhdGEoe1xuICAgICAgICByZXF1ZXN0OiByZXEsXG4gICAgICAgIC8vIFRPRE8gKHY4KTogU3RvcCBwYXNzaW5nIHRoaXNcbiAgICAgICAgcmVxdWVzdERhdGFPcHRpb25zRnJvbUV4cHJlc3NIYW5kbGVyOiByZXF1ZXN0RGF0YU9wdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2xpZW50ID0gY29yZS5nZXRDbGllbnQoKTtcbiAgICAgIGlmIChzZGsuaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZChjbGllbnQpKSB7XG4gICAgICAgIC8vIFNldCBgc3RhdHVzYCBvZiBgUmVxdWVzdFNlc3Npb25gIHRvIE9rLCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXF1ZXN0XG4gICAgICAgIHNjb3BlLnNldFJlcXVlc3RTZXNzaW9uKHsgc3RhdHVzOiAnb2snIH0pO1xuICAgICAgfVxuXG4gICAgICByZXMub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjb3JlLmdldENsaWVudCgpO1xuICAgICAgICBpZiAoc2RrLmlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQoY2xpZW50KSkge1xuICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgICBpZiAoY2xpZW50ICYmIChjbGllbnQgKS5fY2FwdHVyZVJlcXVlc3RTZXNzaW9uKSB7XG4gICAgICAgICAgICAgIC8vIENhbGxpbmcgX2NhcHR1cmVSZXF1ZXN0U2Vzc2lvbiB0byBjYXB0dXJlIHJlcXVlc3Qgc2Vzc2lvbiBhdCB0aGUgZW5kIG9mIHRoZSByZXF1ZXN0IGJ5IGluY3JlbWVudGluZ1xuICAgICAgICAgICAgICAvLyB0aGUgY29ycmVjdCBTZXNzaW9uQWdncmVnYXRlcyBidWNrZXQgaS5lLiBjcmFzaGVkLCBlcnJvcmVkIG9yIGV4aXRlZFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgICAgIChjbGllbnQgKS5fY2FwdHVyZVJlcXVlc3RTZXNzaW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9O1xufVxuXG4vKiogSlNEb2MgKi9cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBnZXRTdGF0dXNDb2RlRnJvbVJlc3BvbnNlKGVycm9yKSB7XG4gIGNvbnN0IHN0YXR1c0NvZGUgPSBlcnJvci5zdGF0dXMgfHwgZXJyb3Iuc3RhdHVzQ29kZSB8fCBlcnJvci5zdGF0dXNfY29kZSB8fCAoZXJyb3Iub3V0cHV0ICYmIGVycm9yLm91dHB1dC5zdGF0dXNDb2RlKTtcbiAgcmV0dXJuIHN0YXR1c0NvZGUgPyBwYXJzZUludChzdGF0dXNDb2RlICwgMTApIDogNTAwO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHJlc3BvbnNlIGNvZGUgaXMgaW50ZXJuYWwgc2VydmVyIGVycm9yICovXG5mdW5jdGlvbiBkZWZhdWx0U2hvdWxkSGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZUZyb21SZXNwb25zZShlcnJvcik7XG4gIHJldHVybiBzdGF0dXMgPj0gNTAwO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgY29tcGF0aWJsZSBlcnJvciBoYW5kbGVyLlxuICogQHNlZSBFeHBvc2VkIGFzIGBIYW5kbGVycy5lcnJvckhhbmRsZXJgXG4gKi9cbmZ1bmN0aW9uIGVycm9ySGFuZGxlcihvcHRpb25zXG5cbilcblxuIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlbnRyeUVycm9yTWlkZGxld2FyZShcbiAgICBlcnJvcixcbiAgICBfcmVxLFxuICAgIHJlcyxcbiAgICBuZXh0LFxuICApIHtcbiAgICBjb25zdCBzaG91bGRIYW5kbGVFcnJvciA9IChvcHRpb25zICYmIG9wdGlvbnMuc2hvdWxkSGFuZGxlRXJyb3IpIHx8IGRlZmF1bHRTaG91bGRIYW5kbGVFcnJvcjtcblxuICAgIGlmIChzaG91bGRIYW5kbGVFcnJvcihlcnJvcikpIHtcbiAgICAgIGNvcmUud2l0aFNjb3BlKF9zY29wZSA9PiB7XG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzdG9yZWQgaW4gYHNjb3BlLnNka1Byb2Nlc3NpbmdNZXRhZGF0YWAgYnkgYHNlbnRyeVJlcXVlc3RNaWRkbGV3YXJlYCxcbiAgICAgICAgLy8gYnV0IG9uIHRoZSBvZmYgY2hhbmNlIHNvbWVvbmUgaXMgdXNpbmcgYHNlbnRyeUVycm9yTWlkZGxld2FyZWAgd2l0aG91dCBgc2VudHJ5UmVxdWVzdE1pZGRsZXdhcmVgLCBpdCBkb2Vzbid0XG4gICAgICAgIC8vIGh1cnQgdG8gYmUgc3VyZVxuICAgICAgICBfc2NvcGUuc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKHsgcmVxdWVzdDogX3JlcSB9KTtcblxuICAgICAgICAvLyBGb3Igc29tZSByZWFzb24gd2UgbmVlZCB0byBzZXQgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBzY29wZSBhZ2FpblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gKHJlcyApLl9fc2VudHJ5X3RyYW5zYWN0aW9uIDtcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uICYmICFjb3JlLmdldEFjdGl2ZVNwYW4oKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIF9zY29wZS5zZXRTcGFuKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCk7XG4gICAgICAgIGlmIChjbGllbnQgJiYgc2RrLmlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQoY2xpZW50KSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBgU2Vzc2lvbkZsdXNoZXJgIGlzIGluc3RhbnRpYXRlZCBvbiB0aGUgY2xpZW50IHRvIGdvIGludG8gdGhpcyBicmFuY2ggdGhhdCBtYXJrcyB0aGVcbiAgICAgICAgICAvLyBgcmVxdWVzdFNlc3Npb24uc3RhdHVzYCBhcyBgQ3Jhc2hlZGAsIGFuZCB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBgU2Vzc2lvbkZsdXNoZXJgIGlzIG9ubHlcbiAgICAgICAgICAvLyBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgdGhlYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIGluaXRpYWxpc2VkLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgYmVcbiAgICAgICAgICAvLyBydW5uaW5nIGluIFNlc3Npb25BZ2dyZWdhdGVzIG1vZGVcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgY29uc3QgaXNTZXNzaW9uQWdncmVnYXRlc01vZGUgPSAoY2xpZW50ICkuX3Nlc3Npb25GbHVzaGVyICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGlzU2Vzc2lvbkFnZ3JlZ2F0ZXNNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IF9zY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuICAgICAgICAgICAgLy8gSWYgYW4gZXJyb3IgYnViYmxlcyB0byB0aGUgYGVycm9ySGFuZGxlcmAsIHRoZW4gdGhpcyBpcyBhbiB1bmhhbmRsZWQgZXJyb3IsIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgYVxuICAgICAgICAgICAgLy8gQ3Jhc2hlZCBzZXNzaW9uLiBUaGUgYF9yZXF1ZXN0U2Vzc2lvbi5zdGF0dXNgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBlcnJvciBpcyBoYXBwZW5pbmcgd2l0aGluXG4gICAgICAgICAgICAvLyB0aGUgYm91bmRzIG9mIGEgcmVxdWVzdCwgYW5kIGlmIHNvIHRoZSBzdGF0dXMgaXMgdXBkYXRlZFxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTZXNzaW9uICYmIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyA9ICdjcmFzaGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudElkID0gY29yZS5jYXB0dXJlRXhjZXB0aW9uKGVycm9yLCB7IG1lY2hhbmlzbTogeyB0eXBlOiAnbWlkZGxld2FyZScsIGhhbmRsZWQ6IGZhbHNlIH0gfSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgKHJlcyApLnNlbnRyeSA9IGV2ZW50SWQ7XG4gICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXh0KGVycm9yKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBTZW50cnkgdFJQQyBtaWRkbGV3YXJlIHRoYXQgbmFtZXMgdGhlIGhhbmRsaW5nIHRyYW5zYWN0aW9uIGFmdGVyIHRoZSBjYWxsZWQgcHJvY2VkdXJlLlxuICpcbiAqIFVzZSB0aGUgU2VudHJ5IHRSUEMgbWlkZGxld2FyZSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBTZW50cnkgc2VydmVyIGludGVncmF0aW9uLFxuICogZS5nLiBFeHByZXNzIFJlcXVlc3QgSGFuZGxlcnMgb3IgTmV4dC5qcyBTREsuXG4gKlxuICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSB0aGUgdG9wIGxldmVsIGV4cG9ydCBpbnN0ZWFkOlxuICogYGBgXG4gKiAvLyBPTERcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L25vZGUnO1xuICogU2VudHJ5LkhhbmRsZXJzLnRycGNNaWRkbGV3YXJlKCk7XG4gKlxuICogLy8gTkVXXG4gKiBpbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS9ub2RlJztcbiAqIFNlbnRyeS50cnBjTWlkZGxld2FyZSgpO1xuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgdHJwY01pZGRsZXdhcmUgPSB0cnBjLnRycGNNaWRkbGV3YXJlO1xuXG5leHBvcnRzLmV4dHJhY3RSZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhRGVwcmVjYXRlZC5leHRyYWN0UmVxdWVzdERhdGE7XG5leHBvcnRzLnBhcnNlUmVxdWVzdCA9IHJlcXVlc3REYXRhRGVwcmVjYXRlZC5wYXJzZVJlcXVlc3Q7XG5leHBvcnRzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbmV4cG9ydHMucmVxdWVzdEhhbmRsZXIgPSByZXF1ZXN0SGFuZGxlcjtcbmV4cG9ydHMudHJhY2luZ0hhbmRsZXIgPSB0cmFjaW5nSGFuZGxlcjtcbmV4cG9ydHMudHJwY01pZGRsZXdhcmUgPSB0cnBjTWlkZGxld2FyZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZXJzLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuZnVuY3Rpb24gaXNSZXNwb25zZU9iamVjdChyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UgJiYgKHJlc3BvbnNlICkuc3RhdHVzQ29kZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50ICYmIChldmVudCApLmVycm9yICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRFcnJvclRvU2VudHJ5KGVycm9yRGF0YSkge1xuICBjb3JlLmNhcHR1cmVFeGNlcHRpb24oZXJyb3JEYXRhLCB7XG4gICAgbWVjaGFuaXNtOiB7XG4gICAgICB0eXBlOiAnaGFwaScsXG4gICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnVuY3Rpb246ICdoYXBpRXJyb3JQbHVnaW4nLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cblxuY29uc3QgaGFwaUVycm9yUGx1Z2luID0ge1xuICBuYW1lOiAnU2VudHJ5SGFwaUVycm9yUGx1Z2luJyxcbiAgdmVyc2lvbjogY29yZS5TREtfVkVSU0lPTixcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmVnaXN0ZXI6IGFzeW5jIGZ1bmN0aW9uIChzZXJ2ZXJBcmcpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBzZXJ2ZXJBcmcgO1xuXG4gICAgc2VydmVyLmV2ZW50cy5vbigncmVxdWVzdCcsIChyZXF1ZXN0LCBldmVudCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcblxuICAgICAgaWYgKGlzRXJyb3JFdmVudChldmVudCkpIHtcbiAgICAgICAgc2VuZEVycm9yVG9TZW50cnkoZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0U3RhdHVzKCdpbnRlcm5hbF9lcnJvcicpO1xuICAgICAgICB0cmFuc2FjdGlvbi5lbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbn07XG5cbmNvbnN0IGhhcGlUcmFjaW5nUGx1Z2luID0ge1xuICBuYW1lOiAnU2VudHJ5SGFwaVRyYWNpbmdQbHVnaW4nLFxuICB2ZXJzaW9uOiBjb3JlLlNES19WRVJTSU9OLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICByZWdpc3RlcjogYXN5bmMgZnVuY3Rpb24gKHNlcnZlckFyZykge1xuICAgIGNvbnN0IHNlcnZlciA9IHNlcnZlckFyZyA7XG5cbiAgICBzZXJ2ZXIuZXh0KCdvblByZUhhbmRsZXInLCAocmVxdWVzdCwgaCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBjb3JlLmNvbnRpbnVlVHJhY2UoXG4gICAgICAgIHtcbiAgICAgICAgICBzZW50cnlUcmFjZTogcmVxdWVzdC5oZWFkZXJzWydzZW50cnktdHJhY2UnXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgYmFnZ2FnZTogcmVxdWVzdC5oZWFkZXJzWydiYWdnYWdlJ10gfHwgdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2FjdGlvbkNvbnRleHQgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIHJldHVybiBjb3JlLnN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgLi4udHJhbnNhY3Rpb25Db250ZXh0LFxuICAgICAgICAgICAgb3A6ICdoYXBpLnJlcXVlc3QnLFxuICAgICAgICAgICAgbmFtZTogcmVxdWVzdC5yb3V0ZS5wYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3JlcXVlc3Qucm91dGUubWV0aG9kfSAke3JlcXVlc3QucGF0aH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb3JlLmdldEN1cnJlbnRTY29wZSgpLnNldFNwYW4odHJhbnNhY3Rpb24pO1xuXG4gICAgICByZXR1cm4gaC5jb250aW51ZTtcbiAgICB9KTtcblxuICAgIHNlcnZlci5leHQoJ29uUHJlUmVzcG9uc2UnLCAocmVxdWVzdCwgaCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcblxuICAgICAgaWYgKHJlcXVlc3QucmVzcG9uc2UgJiYgaXNSZXNwb25zZU9iamVjdChyZXF1ZXN0LnJlc3BvbnNlKSAmJiB0cmFuc2FjdGlvbikge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uc2UgO1xuICAgICAgICByZXNwb25zZS5oZWFkZXIoJ3NlbnRyeS10cmFjZScsIGNvcmUuc3BhblRvVHJhY2VIZWFkZXIodHJhbnNhY3Rpb24pKTtcblxuICAgICAgICBjb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gdXRpbHMuZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlcihcbiAgICAgICAgICBjb3JlLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3Bhbih0cmFuc2FjdGlvbiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGR5bmFtaWNTYW1wbGluZ0NvbnRleHQpIHtcbiAgICAgICAgICByZXNwb25zZS5oZWFkZXIoJ2JhZ2dhZ2UnLCBkeW5hbWljU2FtcGxpbmdDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaC5jb250aW51ZTtcbiAgICB9KTtcblxuICAgIHNlcnZlci5leHQoJ29uUG9zdEhhbmRsZXInLCAocmVxdWVzdCwgaCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcblxuICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlICYmIGlzUmVzcG9uc2VPYmplY3QocmVxdWVzdC5yZXNwb25zZSkpIHtcbiAgICAgICAgICBjb3JlLnNldEh0dHBTdGF0dXModHJhbnNhY3Rpb24sIHJlcXVlc3QucmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFuc2FjdGlvbi5lbmQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGguY29udGludWU7XG4gICAgfSk7XG4gIH0sXG59O1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0hhcGknO1xuXG5jb25zdCBfaGFwaUludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qgc2VydmVyID0gb3B0aW9ucy5zZXJ2ZXIgO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBzZXR1cE9uY2UoKSB7XG4gICAgICBpZiAoIXNlcnZlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZpbGwoc2VydmVyLCAnc3RhcnQnLCAob3JpZ2luYWxTdGFydCkgPT4ge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoaGFwaVRyYWNpbmdQbHVnaW4pO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoaGFwaUVycm9yUGx1Z2luKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbFN0YXJ0LmFwcGx5KHRoaXMpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBoYXBpSW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9oYXBpSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIEhhcGkgRnJhbWV3b3JrIEludGVncmF0aW9uLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBoYXBpSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBIYXBpID0gY29yZS5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoSU5URUdSQVRJT05fTkFNRSwgaGFwaUludGVncmF0aW9uKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cbmV4cG9ydHMuSGFwaSA9IEhhcGk7XG5leHBvcnRzLmhhcGlFcnJvclBsdWdpbiA9IGhhcGlFcnJvclBsdWdpbjtcbmV4cG9ydHMuaGFwaUludGVncmF0aW9uID0gaGFwaUludGVncmF0aW9uO1xuZXhwb3J0cy5oYXBpVHJhY2luZ1BsdWdpbiA9IGhhcGlUcmFjaW5nUGx1Z2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvbnNvbGUgPSByZXF1aXJlKCcuL2NvbnNvbGUuanMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCcuL2h0dHAuanMnKTtcbmNvbnN0IG9udW5jYXVnaHRleGNlcHRpb24gPSByZXF1aXJlKCcuL29udW5jYXVnaHRleGNlcHRpb24uanMnKTtcbmNvbnN0IG9udW5oYW5kbGVkcmVqZWN0aW9uID0gcmVxdWlyZSgnLi9vbnVuaGFuZGxlZHJlamVjdGlvbi5qcycpO1xuY29uc3QgbW9kdWxlcyA9IHJlcXVpcmUoJy4vbW9kdWxlcy5qcycpO1xuY29uc3QgY29udGV4dGxpbmVzID0gcmVxdWlyZSgnLi9jb250ZXh0bGluZXMuanMnKTtcbmNvbnN0IGNvbnRleHQgPSByZXF1aXJlKCcuL2NvbnRleHQuanMnKTtcbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IGluZGV4ID0gcmVxdWlyZSgnLi9sb2NhbC12YXJpYWJsZXMvaW5kZXguanMnKTtcbmNvbnN0IGluZGV4JDEgPSByZXF1aXJlKCcuL3VuZGljaS9pbmRleC5qcycpO1xuY29uc3Qgc3BvdGxpZ2h0ID0gcmVxdWlyZSgnLi9zcG90bGlnaHQuanMnKTtcbmNvbnN0IGluZGV4JDIgPSByZXF1aXJlKCcuL2Fuci9pbmRleC5qcycpO1xuY29uc3QgaW5kZXgkMyA9IHJlcXVpcmUoJy4vaGFwaS9pbmRleC5qcycpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbiAqL1xuXG5leHBvcnRzLkNvbnNvbGUgPSBjb25zb2xlLkNvbnNvbGU7XG5leHBvcnRzLkh0dHAgPSBodHRwLkh0dHA7XG5leHBvcnRzLk9uVW5jYXVnaHRFeGNlcHRpb24gPSBvbnVuY2F1Z2h0ZXhjZXB0aW9uLk9uVW5jYXVnaHRFeGNlcHRpb247XG5leHBvcnRzLk9uVW5oYW5kbGVkUmVqZWN0aW9uID0gb251bmhhbmRsZWRyZWplY3Rpb24uT25VbmhhbmRsZWRSZWplY3Rpb247XG5leHBvcnRzLk1vZHVsZXMgPSBtb2R1bGVzLk1vZHVsZXM7XG5leHBvcnRzLkNvbnRleHRMaW5lcyA9IGNvbnRleHRsaW5lcy5Db250ZXh0TGluZXM7XG5leHBvcnRzLkNvbnRleHQgPSBjb250ZXh0LkNvbnRleHQ7XG5leHBvcnRzLlJlcXVlc3REYXRhID0gY29yZS5SZXF1ZXN0RGF0YTtcbmV4cG9ydHMuTG9jYWxWYXJpYWJsZXMgPSBpbmRleC5Mb2NhbFZhcmlhYmxlcztcbmV4cG9ydHMuVW5kaWNpID0gaW5kZXgkMS5VbmRpY2k7XG5leHBvcnRzLlNwb3RsaWdodCA9IHNwb3RsaWdodC5TcG90bGlnaHQ7XG5leHBvcnRzLkFuciA9IGluZGV4JDIuQW5yO1xuZXhwb3J0cy5IYXBpID0gaW5kZXgkMy5IYXBpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHRyYWNpbmcgPSByZXF1aXJlKCdAc2VudHJ5LWludGVybmFsL3RyYWNpbmcnKTtcblxuXG5cbmV4cG9ydHMuQXBvbGxvID0gdHJhY2luZy5BcG9sbG87XG5leHBvcnRzLkV4cHJlc3MgPSB0cmFjaW5nLkV4cHJlc3M7XG5leHBvcnRzLkdyYXBoUUwgPSB0cmFjaW5nLkdyYXBoUUw7XG5leHBvcnRzLk1vbmdvID0gdHJhY2luZy5Nb25nbztcbmV4cG9ydHMuTXlzcWwgPSB0cmFjaW5nLk15c3FsO1xuZXhwb3J0cy5Qb3N0Z3JlcyA9IHRyYWNpbmcuUG9zdGdyZXM7XG5leHBvcnRzLlByaXNtYSA9IHRyYWNpbmcuUHJpc21hO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZWdyYXRpb25zLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdDYXB0dXJlQ29uc29sZSc7XG5cbmNvbnN0IF9jYXB0dXJlQ29uc29sZUludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgbGV2ZWxzID0gb3B0aW9ucy5sZXZlbHMgfHwgdXRpbHMuQ09OU09MRV9MRVZFTFM7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBpZiAoISgnY29uc29sZScgaW4gdXRpbHMuR0xPQkFMX09CSikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5hZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBhcmdzLCBsZXZlbCB9KSA9PiB7XG4gICAgICAgIGlmIChjb3JlLmdldENsaWVudCgpICE9PSBjbGllbnQgfHwgIWxldmVscy5pbmNsdWRlcyhsZXZlbCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlSGFuZGxlcihhcmdzLCBsZXZlbCk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBjYXB0dXJlQ29uc29sZUludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfY2FwdHVyZUNvbnNvbGVJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogU2VuZCBDb25zb2xlIEFQSSBjYWxscyBhcyBTZW50cnkgRXZlbnRzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjYXB0dXJlQ29uc29sZUludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgQ2FwdHVyZUNvbnNvbGUgPSBjb3JlLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhcbiAgSU5URUdSQVRJT05fTkFNRSxcbiAgY2FwdHVyZUNvbnNvbGVJbnRlZ3JhdGlvbixcbilcblxuO1xuXG5mdW5jdGlvbiBjb25zb2xlSGFuZGxlcihhcmdzLCBsZXZlbCkge1xuICBjb25zdCBjYXB0dXJlQ29udGV4dCA9IHtcbiAgICBsZXZlbDogdXRpbHMuc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcobGV2ZWwpLFxuICAgIGV4dHJhOiB7XG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgfSxcbiAgfTtcblxuICBjb3JlLndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgc2NvcGUuYWRkRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgZXZlbnQubG9nZ2VyID0gJ2NvbnNvbGUnO1xuXG4gICAgICB1dGlscy5hZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICdjb25zb2xlJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG5cbiAgICBpZiAobGV2ZWwgPT09ICdhc3NlcnQnICYmIGFyZ3NbMF0gPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEFzc2VydGlvbiBmYWlsZWQ6ICR7dXRpbHMuc2FmZUpvaW4oYXJncy5zbGljZSgxKSwgJyAnKSB8fCAnY29uc29sZS5hc3NlcnQnfWA7XG4gICAgICBzY29wZS5zZXRFeHRyYSgnYXJndW1lbnRzJywgYXJncy5zbGljZSgxKSk7XG4gICAgICBjb3JlLmNhcHR1cmVNZXNzYWdlKG1lc3NhZ2UsIGNhcHR1cmVDb250ZXh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IGFyZ3MuZmluZChhcmcgPT4gYXJnIGluc3RhbmNlb2YgRXJyb3IpO1xuICAgIGlmIChsZXZlbCA9PT0gJ2Vycm9yJyAmJiBlcnJvcikge1xuICAgICAgY29yZS5jYXB0dXJlRXhjZXB0aW9uKGVycm9yLCBjYXB0dXJlQ29udGV4dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHV0aWxzLnNhZmVKb2luKGFyZ3MsICcgJyk7XG4gICAgY29yZS5jYXB0dXJlTWVzc2FnZShtZXNzYWdlLCBjYXB0dXJlQ29udGV4dCk7XG4gIH0pO1xufVxuXG5leHBvcnRzLkNhcHR1cmVDb25zb2xlID0gQ2FwdHVyZUNvbnNvbGU7XG5leHBvcnRzLmNhcHR1cmVDb25zb2xlSW50ZWdyYXRpb24gPSBjYXB0dXJlQ29uc29sZUludGVncmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FwdHVyZWNvbnNvbGUuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0RlYnVnJztcblxuY29uc3QgX2RlYnVnSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBfb3B0aW9ucyA9IHtcbiAgICBkZWJ1Z2dlcjogZmFsc2UsXG4gICAgc3RyaW5naWZ5OiBmYWxzZSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHNldHVwKGNsaWVudCkge1xuICAgICAgaWYgKCFjbGllbnQub24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGllbnQub24oJ2JlZm9yZVNlbmRFdmVudCcsIChldmVudCwgaGludCkgPT4ge1xuICAgICAgICBpZiAoX29wdGlvbnMuZGVidWdnZXIpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVidWdnZXJcbiAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgICAgdXRpbHMuY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgICAgIGlmIChfb3B0aW9ucy5zdHJpbmdpZnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKSk7XG4gICAgICAgICAgICBpZiAoaGludCAmJiBPYmplY3Qua2V5cyhoaW50KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoaGludCwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgICAgICBpZiAoaGludCAmJiBPYmplY3Qua2V5cyhoaW50KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coaGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBkZWJ1Z0ludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfZGVidWdJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdG8gZGVidWcgc2VudCBTZW50cnkgZXZlbnRzLlxuICogVGhpcyBpbnRlZ3JhdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGRlYnVnSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBEZWJ1ZyA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKElOVEVHUkFUSU9OX05BTUUsIGRlYnVnSW50ZWdyYXRpb24pXG5cbjtcblxuZXhwb3J0cy5EZWJ1ZyA9IERlYnVnO1xuZXhwb3J0cy5kZWJ1Z0ludGVncmF0aW9uID0gZGVidWdJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLlxuICpcbiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy5cbiAqL1xuY29uc3QgREVCVUdfQlVJTEQgPSAodHlwZW9mIF9fU0VOVFJZX0RFQlVHX18gPT09ICd1bmRlZmluZWQnIHx8IF9fU0VOVFJZX0RFQlVHX18pO1xuXG5leHBvcnRzLkRFQlVHX0JVSUxEID0gREVCVUdfQlVJTEQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJ1Zy1idWlsZC5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi9kZWJ1Zy1idWlsZC5qcycpO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0RlZHVwZSc7XG5cbmNvbnN0IF9kZWR1cGVJbnRlZ3JhdGlvbiA9ICgoKSA9PiB7XG4gIGxldCBwcmV2aW91c0V2ZW50O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByb2Nlc3NFdmVudChjdXJyZW50RXZlbnQpIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gaWdub3JlIGFueSBub24tZXJyb3IgdHlwZSBldmVudHMsIGUuZy4gdHJhbnNhY3Rpb25zIG9yIHJlcGxheXNcbiAgICAgIC8vIFRoZXNlIHNob3VsZCBuZXZlciBiZSBkZWR1cGVkLCBhbmQgYWxzbyBub3QgYmUgY29tcGFyZWQgYWdhaW5zdCBhcyBfcHJldmlvdXNFdmVudC5cbiAgICAgIGlmIChjdXJyZW50RXZlbnQudHlwZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudEV2ZW50O1xuICAgICAgfVxuXG4gICAgICAvLyBKdXV1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZ1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKF9zaG91bGREcm9wRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ0V2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIGEgZHVwbGljYXRlIG9mIHByZXZpb3VzbHkgY2FwdHVyZWQgZXZlbnQuJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF9vTykge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG4gICAgICByZXR1cm4gKHByZXZpb3VzRXZlbnQgPSBjdXJyZW50RXZlbnQpO1xuICAgIH0sXG4gIH07XG59KSA7XG5cbmNvbnN0IGRlZHVwZUludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfZGVkdXBlSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIERlZHVwbGljYXRpb24gZmlsdGVyLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBkZWR1cGVJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IERlZHVwZSA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKElOVEVHUkFUSU9OX05BTUUsIGRlZHVwZUludGVncmF0aW9uKVxuXG47XG5cbi8qKiBvbmx5IGV4cG9ydGVkIGZvciB0ZXN0cy4gKi9cbmZ1bmN0aW9uIF9zaG91bGREcm9wRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gIGlmICghcHJldmlvdXNFdmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChfaXNTYW1lTWVzc2FnZUV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChfaXNTYW1lRXhjZXB0aW9uRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfaXNTYW1lTWVzc2FnZUV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkge1xuICBjb25zdCBjdXJyZW50TWVzc2FnZSA9IGN1cnJlbnRFdmVudC5tZXNzYWdlO1xuICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c0V2ZW50Lm1lc3NhZ2U7XG5cbiAgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBtZXNzYWdlIHByb3BlcnR5LCB0aGV5IHdlcmUgYm90aCBleGNlcHRpb25zLCBzbyBiYWlsIG91dFxuICBpZiAoIWN1cnJlbnRNZXNzYWdlICYmICFwcmV2aW91c01lc3NhZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBvbmx5IG9uZSBldmVudCBoYXMgYSBzdGFja3RyYWNlLCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICBpZiAoKGN1cnJlbnRNZXNzYWdlICYmICFwcmV2aW91c01lc3NhZ2UpIHx8ICghY3VycmVudE1lc3NhZ2UgJiYgcHJldmlvdXNNZXNzYWdlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjdXJyZW50TWVzc2FnZSAhPT0gcHJldmlvdXNNZXNzYWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFfaXNTYW1lRmluZ2VycHJpbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghX2lzU2FtZVN0YWNrdHJhY2UoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBfaXNTYW1lRXhjZXB0aW9uRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gIGNvbnN0IHByZXZpb3VzRXhjZXB0aW9uID0gX2dldEV4Y2VwdGlvbkZyb21FdmVudChwcmV2aW91c0V2ZW50KTtcbiAgY29uc3QgY3VycmVudEV4Y2VwdGlvbiA9IF9nZXRFeGNlcHRpb25Gcm9tRXZlbnQoY3VycmVudEV2ZW50KTtcblxuICBpZiAoIXByZXZpb3VzRXhjZXB0aW9uIHx8ICFjdXJyZW50RXhjZXB0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzRXhjZXB0aW9uLnR5cGUgIT09IGN1cnJlbnRFeGNlcHRpb24udHlwZSB8fCBwcmV2aW91c0V4Y2VwdGlvbi52YWx1ZSAhPT0gY3VycmVudEV4Y2VwdGlvbi52YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghX2lzU2FtZUZpbmdlcnByaW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIV9pc1NhbWVTdGFja3RyYWNlKGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX2lzU2FtZVN0YWNrdHJhY2UoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gIGxldCBjdXJyZW50RnJhbWVzID0gX2dldEZyYW1lc0Zyb21FdmVudChjdXJyZW50RXZlbnQpO1xuICBsZXQgcHJldmlvdXNGcmFtZXMgPSBfZ2V0RnJhbWVzRnJvbUV2ZW50KHByZXZpb3VzRXZlbnQpO1xuXG4gIC8vIElmIG5laXRoZXIgZXZlbnQgaGFzIGEgc3RhY2t0cmFjZSwgdGhleSBhcmUgYXNzdW1lZCB0byBiZSB0aGUgc2FtZVxuICBpZiAoIWN1cnJlbnRGcmFtZXMgJiYgIXByZXZpb3VzRnJhbWVzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJZiBvbmx5IG9uZSBldmVudCBoYXMgYSBzdGFja3RyYWNlLCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICBpZiAoKGN1cnJlbnRGcmFtZXMgJiYgIXByZXZpb3VzRnJhbWVzKSB8fCAoIWN1cnJlbnRGcmFtZXMgJiYgcHJldmlvdXNGcmFtZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY3VycmVudEZyYW1lcyA9IGN1cnJlbnRGcmFtZXMgO1xuICBwcmV2aW91c0ZyYW1lcyA9IHByZXZpb3VzRnJhbWVzIDtcblxuICAvLyBJZiBudW1iZXIgb2YgZnJhbWVzIGRpZmZlciwgdGhleSBhcmUgbm90IHRoZSBzYW1lXG4gIGlmIChwcmV2aW91c0ZyYW1lcy5sZW5ndGggIT09IGN1cnJlbnRGcmFtZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBjb21wYXJlIHRoZSB0d29cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0ZyYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGZyYW1lQSA9IHByZXZpb3VzRnJhbWVzW2ldO1xuICAgIGNvbnN0IGZyYW1lQiA9IGN1cnJlbnRGcmFtZXNbaV07XG5cbiAgICBpZiAoXG4gICAgICBmcmFtZUEuZmlsZW5hbWUgIT09IGZyYW1lQi5maWxlbmFtZSB8fFxuICAgICAgZnJhbWVBLmxpbmVubyAhPT0gZnJhbWVCLmxpbmVubyB8fFxuICAgICAgZnJhbWVBLmNvbG5vICE9PSBmcmFtZUIuY29sbm8gfHxcbiAgICAgIGZyYW1lQS5mdW5jdGlvbiAhPT0gZnJhbWVCLmZ1bmN0aW9uXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIF9pc1NhbWVGaW5nZXJwcmludChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpIHtcbiAgbGV0IGN1cnJlbnRGaW5nZXJwcmludCA9IGN1cnJlbnRFdmVudC5maW5nZXJwcmludDtcbiAgbGV0IHByZXZpb3VzRmluZ2VycHJpbnQgPSBwcmV2aW91c0V2ZW50LmZpbmdlcnByaW50O1xuXG4gIC8vIElmIG5laXRoZXIgZXZlbnQgaGFzIGEgZmluZ2VycHJpbnQsIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWVcbiAgaWYgKCFjdXJyZW50RmluZ2VycHJpbnQgJiYgIXByZXZpb3VzRmluZ2VycHJpbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIElmIG9ubHkgb25lIGV2ZW50IGhhcyBhIGZpbmdlcnByaW50LCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICBpZiAoKGN1cnJlbnRGaW5nZXJwcmludCAmJiAhcHJldmlvdXNGaW5nZXJwcmludCkgfHwgKCFjdXJyZW50RmluZ2VycHJpbnQgJiYgcHJldmlvdXNGaW5nZXJwcmludCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjdXJyZW50RmluZ2VycHJpbnQgPSBjdXJyZW50RmluZ2VycHJpbnQgO1xuICBwcmV2aW91c0ZpbmdlcnByaW50ID0gcHJldmlvdXNGaW5nZXJwcmludCA7XG5cbiAgLy8gT3RoZXJ3aXNlLCBjb21wYXJlIHRoZSB0d29cbiAgdHJ5IHtcbiAgICByZXR1cm4gISEoY3VycmVudEZpbmdlcnByaW50LmpvaW4oJycpID09PSBwcmV2aW91c0ZpbmdlcnByaW50LmpvaW4oJycpKTtcbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRFeGNlcHRpb25Gcm9tRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF07XG59XG5cbmZ1bmN0aW9uIF9nZXRGcmFtZXNGcm9tRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uO1xuXG4gIGlmIChleGNlcHRpb24pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBPYmplY3QgY291bGQgYmUgdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcztcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydHMuRGVkdXBlID0gRGVkdXBlO1xuZXhwb3J0cy5fc2hvdWxkRHJvcEV2ZW50ID0gX3Nob3VsZERyb3BFdmVudDtcbmV4cG9ydHMuZGVkdXBlSW50ZWdyYXRpb24gPSBkZWR1cGVJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZHVwZS5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCdAc2VudHJ5L3V0aWxzJyk7XG5jb25zdCBkZWJ1Z0J1aWxkID0gcmVxdWlyZSgnLi9kZWJ1Zy1idWlsZC5qcycpO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0V4dHJhRXJyb3JEYXRhJztcblxuY29uc3QgX2V4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBkZXB0aCA9IG9wdGlvbnMuZGVwdGggfHwgMztcblxuICAvLyBUT0RPKHY4KTogRmxpcCB0aGUgZGVmYXVsdCBmb3IgdGhpcyBvcHRpb24gdG8gdHJ1ZVxuICBjb25zdCBjYXB0dXJlRXJyb3JDYXVzZSA9IG9wdGlvbnMuY2FwdHVyZUVycm9yQ2F1c2UgfHwgZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJvY2Vzc0V2ZW50KGV2ZW50LCBoaW50KSB7XG4gICAgICByZXR1cm4gX2VuaGFuY2VFdmVudFdpdGhFcnJvckRhdGEoZXZlbnQsIGhpbnQsIGRlcHRoLCBjYXB0dXJlRXJyb3JDYXVzZSk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgZXh0cmFFcnJvckRhdGFJbnRlZ3JhdGlvbiA9IGNvcmUuZGVmaW5lSW50ZWdyYXRpb24oX2V4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIEV4dHJhY3QgYWRkaXRpb25hbCBkYXRhIGZvciBmcm9tIG9yaWdpbmFsIGV4Y2VwdGlvbnMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGV4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBFeHRyYUVycm9yRGF0YSA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKFxuICBJTlRFR1JBVElPTl9OQU1FLFxuICBleHRyYUVycm9yRGF0YUludGVncmF0aW9uLFxuKVxuXG47XG5cbmZ1bmN0aW9uIF9lbmhhbmNlRXZlbnRXaXRoRXJyb3JEYXRhKFxuICBldmVudCxcbiAgaGludCA9IHt9LFxuICBkZXB0aCxcbiAgY2FwdHVyZUVycm9yQ2F1c2UsXG4pIHtcbiAgaWYgKCFoaW50Lm9yaWdpbmFsRXhjZXB0aW9uIHx8ICF1dGlscy5pc0Vycm9yKGhpbnQub3JpZ2luYWxFeGNlcHRpb24pKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG4gIGNvbnN0IGV4Y2VwdGlvbk5hbWUgPSAoaGludC5vcmlnaW5hbEV4Y2VwdGlvbiApLm5hbWUgfHwgaGludC5vcmlnaW5hbEV4Y2VwdGlvbi5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gIGNvbnN0IGVycm9yRGF0YSA9IF9leHRyYWN0RXJyb3JEYXRhKGhpbnQub3JpZ2luYWxFeGNlcHRpb24gLCBjYXB0dXJlRXJyb3JDYXVzZSk7XG5cbiAgaWYgKGVycm9yRGF0YSkge1xuICAgIGNvbnN0IGNvbnRleHRzID0ge1xuICAgICAgLi4uZXZlbnQuY29udGV4dHMsXG4gICAgfTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFcnJvckRhdGEgPSB1dGlscy5ub3JtYWxpemUoZXJyb3JEYXRhLCBkZXB0aCk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChub3JtYWxpemVkRXJyb3JEYXRhKSkge1xuICAgICAgLy8gV2UgbWFyayB0aGUgZXJyb3IgZGF0YSBhcyBcImFscmVhZHkgbm9ybWFsaXplZFwiIGhlcmUsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBvdGhlciBub3JtYWxpemF0aW9uIHByb2NlZHVyZXMgdG9cbiAgICAgIC8vIHBvdGVudGlhbGx5IHRydW5jYXRlIHRoZSBkYXRhIHdlIGp1c3QgYWxyZWFkeSBub3JtYWxpemVkLCB3aXRoIGEgY2VydGFpbiBkZXB0aCBzZXR0aW5nLlxuICAgICAgdXRpbHMuYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KG5vcm1hbGl6ZWRFcnJvckRhdGEsICdfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXycsIHRydWUpO1xuICAgICAgY29udGV4dHNbZXhjZXB0aW9uTmFtZV0gPSBub3JtYWxpemVkRXJyb3JEYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGNvbnRleHRzLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogRXh0cmFjdCBleHRyYSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBFcnJvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2V4dHJhY3RFcnJvckRhdGEoZXJyb3IsIGNhcHR1cmVFcnJvckNhdXNlKSB7XG4gIC8vIFdlIGFyZSB0cnlpbmcgdG8gZW5oYW5jZSBhbHJlYWR5IGV4aXN0aW5nIGV2ZW50LCBzbyBubyBoYXJtIGRvbmUgaWYgaXQgd29uJ3Qgc3VjY2VlZFxuICB0cnkge1xuICAgIGNvbnN0IG5hdGl2ZUtleXMgPSBbXG4gICAgICAnbmFtZScsXG4gICAgICAnbWVzc2FnZScsXG4gICAgICAnc3RhY2snLFxuICAgICAgJ2xpbmUnLFxuICAgICAgJ2NvbHVtbicsXG4gICAgICAnZmlsZU5hbWUnLFxuICAgICAgJ2xpbmVOdW1iZXInLFxuICAgICAgJ2NvbHVtbk51bWJlcicsXG4gICAgICAndG9KU09OJyxcbiAgICBdO1xuXG4gICAgY29uc3QgZXh0cmFFcnJvckluZm8gPSB7fTtcblxuICAgIC8vIFdlIHdhbnQgb25seSBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHRodXMgYGdldE93blByb3BlcnR5TmFtZXNgIGlzIHJlZHVuZGFudCBoZXJlLCBhcyB3ZSBmaWx0ZXIga2V5cyBhbnl3YXkuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXJyb3IpKSB7XG4gICAgICBpZiAobmF0aXZlS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBlcnJvcltrZXldO1xuICAgICAgZXh0cmFFcnJvckluZm9ba2V5XSA9IHV0aWxzLmlzRXJyb3IodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEVycm9yLmNhdXNlIGlzIGEgc3RhbmRhcmQgcHJvcGVydHkgdGhhdCBpcyBub24gZW51bWVyYWJsZSwgd2UgdGhlcmVmb3JlIG5lZWQgdG8gYWNjZXNzIGl0IHNlcGFyYXRlbHkuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgICBpZiAoY2FwdHVyZUVycm9yQ2F1c2UgJiYgZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFFcnJvckluZm8uY2F1c2UgPSB1dGlscy5pc0Vycm9yKGVycm9yLmNhdXNlKSA/IGVycm9yLmNhdXNlLnRvU3RyaW5nKCkgOiBlcnJvci5jYXVzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBzb21lb25lIGF0dGFjaGVkIGB0b0pTT05gIG1ldGhvZCB0byBncmFiIGV2ZW4gbW9yZSBwcm9wZXJ0aWVzIChlZy4gYXhpb3MgaXMgZG9pbmcgdGhhdClcbiAgICBpZiAodHlwZW9mIGVycm9yLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZEVycm9yID0gZXJyb3IudG9KU09OKCkgO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJpYWxpemVkRXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2VyaWFsaXplZEVycm9yW2tleV07XG4gICAgICAgIGV4dHJhRXJyb3JJbmZvW2tleV0gPSB1dGlscy5pc0Vycm9yKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXh0cmFFcnJvckluZm87XG4gIH0gY2F0Y2ggKG9PKSB7XG4gICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IGV4dHJhIGRhdGEgZnJvbSB0aGUgRXJyb3Igb2JqZWN0OicsIG9PKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnRzLkV4dHJhRXJyb3JEYXRhID0gRXh0cmFFcnJvckRhdGE7XG5leHBvcnRzLmV4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb24gPSBleHRyYUVycm9yRGF0YUludGVncmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0cmFlcnJvcmRhdGEuanMubWFwXG4iLAogICAgIi8qIVxuICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWRcbiAgICBWZXJzaW9uIDEuMTAuMFxuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiIHx8ICFpZGIub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pbWljIFBvdWNoREIgaGVyZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgdGVzdCBmb3Igb3BlbkRhdGFiYXNlIGJlY2F1c2UgSUUgTW9iaWxlIGlkZW50aWZpZXMgaXRzZWxmXG4gICAgICAgIC8vIGFzIFNhZmFyaS4gT2ggdGhlIGx1bHouLi5cbiAgICAgICAgdmFyIGlzU2FmYXJpID0gdHlwZW9mIG9wZW5EYXRhYmFzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9CbGFja0JlcnJ5Ly50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbiAgICAgICAgdmFyIGhhc0ZldGNoID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIGZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgIT09IC0xO1xuXG4gICAgICAgIC8vIFNhZmFyaSA8MTAuMSBkb2VzIG5vdCBtZWV0IG91ciByZXF1aXJlbWVudHMgZm9yIElEQiBzdXBwb3J0XG4gICAgICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvaXNzdWVzLzU1NzIpLlxuICAgICAgICAvLyBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXQuXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY3JlYXRlcyBpc3N1ZXMgd2l0aCBgd2luZG93LmZldGNoYCBwb2x5ZmlsbHMgYW5kXG4gICAgICAgIC8vIG92ZXJyaWRlczsgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9jYWxGb3JhZ2UvbG9jYWxGb3JhZ2UvaXNzdWVzLzg1NlxuICAgICAgICByZXR1cm4gKCFpc1NhZmFyaSB8fCBoYXNGZXRjaCkgJiYgdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gc29tZSBvdXRkYXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIHRoYXQgYXBwZWFyIG9uIFNhbXN1bmdcbiAgICAgICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xMjhcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMjcyXG4gICAgICAgIHR5cGVvZiBJREJLZXlSYW5nZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIC8qIGdsb2JhbCBCbG9iQnVpbGRlcixNU0Jsb2JCdWlsZGVyLE1vekJsb2JCdWlsZGVyLFdlYktpdEJsb2JCdWlsZGVyICovXG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgaXMgQ29tbW9uSlMgYmVjYXVzZSBsaWUgaXMgYW4gZXh0ZXJuYWwgZGVwZW5kZW5jeSwgc28gUm9sbHVwXG4vLyBjYW4ganVzdCBpZ25vcmUgaXQuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gdGhlIFwibm9wcm9taXNlc1wiIGJ1aWxkIHRoaXMgd2lsbCBqdXN0IHRocm93IGlmIHlvdSBkb24ndCBoYXZlXG4gICAgLy8gYSBnbG9iYWwgcHJvbWlzZSBvYmplY3QsIGJ1dCBpdCB3b3VsZCB0aHJvdyBhbnl3YXkgbGF0ZXIuXG4gICAgX2RlcmVxXygzKTtcbn1cbnZhciBQcm9taXNlJDEgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2UudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VbXCJjYXRjaFwiXShlcnJvckNhbGxiYWNrKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICAvLyBDYXN0IHRoZSBrZXkgdG8gYSBzdHJpbmcsIGFzIHRoYXQncyBhbGwgd2UgY2FuIHNldCBhcyBhIGtleS5cbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGtleSArICcgdXNlZCBhcyBhIGtleSwgYnV0IGl0IGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuXG4vLyBTb21lIGNvZGUgb3JpZ2luYWxseSBmcm9tIGFzeW5jX3N0b3JhZ2UuanMgaW5cbi8vIFtHYWlhXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS1iMmcvZ2FpYSkuXG5cbnZhciBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbnZhciBzdXBwb3J0c0Jsb2JzID0gdm9pZCAwO1xudmFyIGRiQ29udGV4dHMgPSB7fTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFRyYW5zYWN0aW9uIE1vZGVzXG52YXIgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbnZhciBSRUFEX1dSSVRFID0gJ3JlYWR3cml0ZSc7XG5cbi8vIFRyYW5zZm9ybSBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYXJyYXkgYnVmZmVyLCBiZWNhdXNlIG90aGVyd2lzZVxuLy8gd2VpcmQgc3R1ZmYgaGFwcGVucyB3aGVuIHlvdSB0cnkgdG8gd29yayB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nIGRpcmVjdGx5LlxuLy8gSXQgaXMga25vd24uXG4vLyBGcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQ5Njc2NDcvIChjb250aW51ZXMgb24gbmV4dCBsaW5lKVxuLy8gZW5jb2RlLWRlY29kZS1pbWFnZS13aXRoLWJhc2U2NC1icmVha3MtaW1hZ2UgKDIwMTMtMDQtMjEpXG5mdW5jdGlvbiBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihiaW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluLmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcgYW5kIEFuZHJvaWQgPDUuIEluIHRob3NlIHZlcnNpb25zLCBzdG9yaW5nIGEgYmxvYiB3aWxsIHRocm93LlxuLy9cbi8vIFZhcmlvdXMgb3RoZXIgYmxvYiBidWdzIGV4aXN0IGluIENocm9tZSB2MzctNDIgKGluY2x1c2l2ZSkuXG4vLyBEZXRlY3RpbmcgdGhlbSBpcyBleHBlbnNpdmUgYW5kIGNvbmZ1c2luZyB0byB1c2VycywgYW5kIENocm9tZSAzNy00MlxuLy8gaXMgYXQgdmVyeSBsb3cgdXNhZ2Ugd29ybGR3aWRlLCBzbyB3ZSBkbyBhIGhhY2t5IHVzZXJBZ2VudCBjaGVjayBpbnN0ZWFkLlxuLy9cbi8vIGNvbnRlbnQtdHlwZSBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00MDgxMjBcbi8vIDQwNCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc5MTZcbi8vIEZpbGVSZWFkZXIgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3ODM2XG4vL1xuLy8gQ29kZSBib3Jyb3dlZCBmcm9tIFBvdWNoREIuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvbm9kZV9tb2R1bGVzL3BvdWNoZGItYWRhcHRlci1pZGIvc3JjL2Jsb2JTdXBwb3J0LmpzXG4vL1xuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgdHhuID0gaWRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgICAgICB2YXIgYmxvYiA9IGNyZWF0ZUJsb2IoWycnXSk7XG4gICAgICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgICAgIHR4bi5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgbm93IGl0cyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG9cbiAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoZSBkYXRhYmFzZSwgbGlrZWx5IGR1ZSB0byB0aGUgZGlzayBiZWluZyBmdWxsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZENocm9tZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgICAgICAgLy8gTVMgRWRnZSBwcmV0ZW5kcyB0byBiZSBDaHJvbWUgNDI6XG4gICAgICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODY5MzAxJTI4dj12cy44NSUyOS5hc3B4XG4gICAgICAgICAgICByZXNvbHZlKG1hdGNoZWRFZGdlIHx8ICFtYXRjaGVkQ2hyb21lIHx8IHBhcnNlSW50KG1hdGNoZWRDaHJvbWVbMV0sIDEwKSA+PSA0Myk7XG4gICAgICAgIH07XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXJyb3IsIHNvIGFzc3VtZSB1bnN1cHBvcnRlZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydChpZGIpIHtcbiAgICBpZiAodHlwZW9mIHN1cHBvcnRzQmxvYnMgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoc3VwcG9ydHNCbG9icyk7XG4gICAgfVxuICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3VwcG9ydHNCbG9icyA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNCbG9icztcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2RlZmVyUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IHt9O1xuXG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5xdWV1ZSB0aGUgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgICAvLyBDaGFpbiBpdHMgcHJvbWlzZSB0byB0aGUgZGF0YWJhc2UgcmVhZGluZXNzLlxuICAgIGlmICghZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZXNvbHZlIGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0UmVhZGluZXNzKGRiSW5mbywgZXJyKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVqZWN0IGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgdXBncmFkZU5lZWRlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICAgICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYkluZm8uZGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRiQXJncyA9IFtkYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIGRiQXJncy5wdXNoKGRiSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVucmVxID0gaWRiLm9wZW4uYXBwbHkoaWRiLCBkYkFyZ3MpO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgd2hlbiBzdXBwb3J0IGZvciBibG9iIHNoaW1zIHdhcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ0NvbnN0cmFpbnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArICcgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcgKyBlLm9sZFZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGUubmV3VmVyc2lvbiArICcsIGJ1dCB0aGUgc3RvcmFnZSBcIicgKyBkYkluZm8uc3RvcmVOYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbnJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJlamVjdChvcGVucmVxLmVycm9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvcGVucmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgbW9kaWZpZWQgKGUuZy4gYWRkaW5nIGFuIG9iamVjdFN0b3JlKSBvclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgKGV2ZW4gd2hlbiBpbml0aWF0ZWQgYnkgb3RoZXIgc2Vzc2lvbnMgaW4gZGlmZmVyZW50IHRhYnMpLlxuICAgICAgICAgICAgICAgIC8vIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGVyZSBwcmV2ZW50cyB0aG9zZSBvcGVyYXRpb25zIGZyb20gYmVpbmcgYmxvY2tlZC5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaXMgYWNjZXNzZWQgYWdhaW4gbGF0ZXIgYnkgdGhpcyBpbnN0YW5jZSwgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlb3BlbmVkIG9yIHRoZSBkYXRhYmFzZSByZWNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pIHtcbiAgICByZXR1cm4gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgdmFyIGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24gPCBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB2YXIgaXNVcGdyYWRlID0gZGJJbmZvLnZlcnNpb24gPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyBub3QgdGhlIGRlZmF1bHQgb25lXG4gICAgICAgIC8vIHRoZW4gd2FybiBmb3IgaW1wb3NzaWJsZSBkb3duZ3JhZGUuXG4gICAgICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArIFwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uIFwiICsgZGJJbmZvLmRiLnZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGRiSW5mby52ZXJzaW9uICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbGlnbiB0aGUgdmVyc2lvbnMgdG8gcHJldmVudCBlcnJvcnMuXG4gICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdG9yZSBpcyBuZXcgdGhlbiBpbmNyZW1lbnQgdGhlIHZlcnNpb24gKGlmIG5lZWRlZCkuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIFwidXBncmFkZW5lZWRlZFwiIGV2ZW50IHdoaWNoIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIGZvciBjcmVhdGluZyBhIHN0b3JlLlxuICAgICAgICBpZiAoaXNOZXdTdG9yZSkge1xuICAgICAgICAgICAgdmFyIGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBlbmNvZGUgYSBibG9iIGZvciBpbmRleGVkZGIgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgYmxvYnNcbmZ1bmN0aW9uIF9lbmNvZGVCbG9iKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgYmFzZTY0ID0gYnRvYShlLnRhcmdldC5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgIH0pO1xufVxuXG4vLyBkZWNvZGUgYW4gZW5jb2RlZCBibG9iXG5mdW5jdGlvbiBfZGVjb2RlQmxvYihlbmNvZGVkQmxvYikge1xuICAgIHZhciBhcnJheUJ1ZmYgPSBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGVuY29kZWRCbG9iLmRhdGEpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYXJyYXlCdWZmXSwgeyB0eXBlOiBlbmNvZGVkQmxvYi50eXBlIH0pO1xufVxuXG4vLyBpcyB0aGlzIG9uZSBvZiBvdXIgZmFuY3kgZW5jb2RlZCBibG9icz9cbmZ1bmN0aW9uIF9pc0VuY29kZWRCbG9iKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuLy8gU3BlY2lhbGl6ZSB0aGUgZGVmYXVsdCBgcmVhZHkoKWAgZnVuY3Rpb24gYnkgbWFraW5nIGl0IGRlcGVuZGVudFxuLy8gb24gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9ucy4gVGh1cywgdGhlIGRyaXZlciB3aWxsIGJlIGFjdHVhbGx5XG4vLyByZWFkeSB3aGVuIGl0J3MgYmVlbiBpbml0aWFsaXplZCAoZGVmYXVsdCkgKmFuZCogdGhlcmUgYXJlIG5vIHBlbmRpbmdcbi8vIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlIChpbml0aWF0ZWQgYnkgc29tZSBvdGhlciBpbnN0YW5jZXMpLlxuZnVuY3Rpb24gX2Z1bGx5UmVhZHkoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2luaXRSZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tzZWxmLl9kYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFRyeSB0byBlc3RhYmxpc2ggYSBuZXcgZGIgY29ubmVjdGlvbiB0byByZXBsYWNlIHRoZVxuLy8gY3VycmVudCBvbmUgd2hpY2ggaXMgYnJva2VuIChpLmUuIGV4cGVyaWVuY2luZ1xuLy8gSW52YWxpZFN0YXRlRXJyb3Igd2hpbGUgY3JlYXRpbmcgYSB0cmFuc2FjdGlvbikuXG5mdW5jdGlvbiBfdHJ5UmVjb25uZWN0KGRiSW5mbykge1xuICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuXG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYkluZm8uZGIgPSBudWxsO1xuXG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvKSkge1xuICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgcmV0dXJuIF9nZXRVcGdyYWRlZENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGI7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGxhdGVzdCBkYiByZWZlcmVuY2VcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgZGIgd2FzIHVwZ3JhZGVkXG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbi8vIEZGIGRvZXNuJ3QgbGlrZSBQcm9taXNlcyAobWljcm8tdGFza3MpIGFuZCBJRERCIHN0b3JlIG9wZXJhdGlvbnMsXG4vLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IHdpdGggY2FsbGJhY2tzXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzKSB7XG4gICAgaWYgKHJldHJpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRyaWVzID0gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSBkYkluZm8uZGIudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSwgbW9kZSk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJldHJpZXMgPiAwICYmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiSW5mby5kYiB8fCBlcnIubmFtZSA9PT0gJ05vdEZvdW5kRXJyb3InICYmICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKSAmJiBkYkluZm8udmVyc2lvbiA8PSBkYkluZm8uZGIudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgZGIgdmVyc2lvbiwgdG8gY3JlYXRlIHRoZSBuZXcgT2JqZWN0U3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSdW5uaW5nIGxvY2FsRm9yYWdlcyBzaGFyaW5nIGEgZGF0YWJhc2UuXG4gICAgICAgIGZvcmFnZXM6IFtdLFxuICAgICAgICAvLyBTaGFyZWQgZGF0YWJhc2UuXG4gICAgICAgIGRiOiBudWxsLFxuICAgICAgICAvLyBEYXRhYmFzZSByZWFkaW5lc3MgKHByb21pc2UpLlxuICAgICAgICBkYlJlYWR5OiBudWxsLFxuICAgICAgICAvLyBEZWZlcnJlZCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhYmFzZS5cbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXVxuICAgIH07XG59XG5cbi8vIE9wZW4gdGhlIEluZGV4ZWREQiBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2Uob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgZGF0YWJhc2U7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gLi4ub3IgY3JlYXRlIGEgbmV3IGNvbnRleHQuXG4gICAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICAgICAgZGJDb250ZXh0ID0gY3JlYXRlRGJDb250ZXh0KCk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgcnVubmluZyBsb2NhbEZvcmFnZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWFsaXplZCBvbmUuXG4gICAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICAgICAgc2VsZi5faW5pdFJlYWR5ID0gc2VsZi5yZWFkeTtcbiAgICAgICAgc2VsZi5yZWFkeSA9IF9mdWxseVJlYWR5O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBzdGF0ZXMgb2YgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgIHZhciBpbml0UHJvbWlzZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIGVycm9ycyBoZXJlLFxuICAgICAgICAvLyBqdXN0IG1ha2VzIHN1cmUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGJDb250ZXh0LmZvcmFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGRiQ29udGV4dC5mb3JhZ2VzW2pdO1xuICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciBpdHNlbGYuLi5cbiAgICAgICAgICAgIGluaXRQcm9taXNlcy5wdXNoKGZvcmFnZS5faW5pdFJlYWR5KClbXCJjYXRjaFwiXShpZ25vcmVFcnJvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBvbmx5IHdoZW5cbiAgICAvLyBhbGwgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzIGFyZW4ndCBwZW5kaW5nLlxuICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGluaXRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgICAgICAgLy8gR2V0IHRoZSBjb25uZWN0aW9uIG9yIG9wZW4gYSBuZXcgb25lIHdpdGhvdXQgdXBncmFkZS5cbiAgICAgICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAvLyBTaGFyZSB0aGUgZmluYWwgY29ubmVjdGlvbiBhbW9uZ3N0IHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZvcmFnZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2tdO1xuICAgICAgICAgICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFNlbGYgaXMgYWxyZWFkeSB1cC10by1kYXRlLlxuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGJJbmZvLmRiO1xuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuZnVuY3Rpb24gaXRlcmF0ZShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvcih2YWx1ZSwgY3Vyc29yLmtleSwgaXRlcmF0aW9uTnVtYmVyKyspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgcmV0dXJucyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm9uLWB1bmRlZmluZWRgKSB2YWx1ZSwgdGhlbiB3ZSBzdG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGl0ZXJhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBkYkluZm87XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYikudGhlbihmdW5jdGlvbiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IF9zYXZlXyBudWxsIGlzIGJlY2F1c2UgSUUgMTAgZG9lc1xuICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydCBzYXZpbmcgdGhlIGBudWxsYCB0eXBlIGluIEluZGV4ZWREQi4gSG93XG4gICAgICAgICAgICAgICAgICAgIC8vIGlyb25pYywgZ2l2ZW4gdGhlIGJ1ZyBiZWxvdyFcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTYxXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHVuZGVmaW5lZCBzbyB0aGUgdmFsdWUgcGFzc2VkIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjay9wcm9taXNlIGlzIHRoZSBzYW1lIGFzIHdoYXQgb25lIHdvdWxkIGdldCBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGBnZXRJdGVtKClgIGxhdGVyLiBUaGlzIGxlYWRzIHRvIHNvbWUgd2VpcmRuZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoc2V0SXRlbSgnZm9vJywgdW5kZWZpbmVkKSB3aWxsIHJldHVybiBgbnVsbGApLCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IG15IGZhdWx0IGxvY2FsU3RvcmFnZSBpcyBvdXIgYmFzZWxpbmUgYW5kIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd2VpcmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgR3J1bnQgdGFzayB0byBtYWtlIHRoaXMgc2FmZSBmb3IgSUUgYW5kIHNvbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgQW5kcm9pZCAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgQ29yZG92YSkuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGx5IElFIHdvbid0IGxpa2UgYC5kZWxldGUoKWAgYW5kIHdpbGwgaW5zaXN0IG9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGBbJ2RlbGV0ZSddKClgLCBidXQgd2UgaGF2ZSBhIGJ1aWxkIHN0ZXAgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyBmaXhlcyB0aGlzIGZvciB1cyBub3cuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZVtcImRlbGV0ZVwiXShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCB3aWxsIGJlIGFsc28gYmUgYWJvcnRlZCBpZiB3ZSd2ZSBleGNlZWRlZCBvdXIgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZS5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2xlYXIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkobiwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZW4ndCBlbm91Z2gga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0aGUgZmlyc3Qga2V5LCByZXR1cm4gaXQgaWYgdGhhdCdzIHdoYXQgdGhleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhbnRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNrIHRoZSBjdXJzb3IgdG8gc2tpcCBhaGVhZCBuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2Uobik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IHRoZSBudGgga2V5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNDdXJyZW50RGIgPSBvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBzZWxmLl9kYkluZm8uZGI7XG5cbiAgICAgICAgdmFyIGRiUHJvbWlzZSA9IGlzQ3VycmVudERiID8gUHJvbWlzZSQxLnJlc29sdmUoc2VsZi5fZGJJbmZvLmRiKSA6IF9nZXRPcmlnaW5hbENvbm5lY3Rpb24ob3B0aW9ucykudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JhZ2VzW2ldLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BEQlByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IGlkYi5kZWxldGVEYXRhYmFzZShvcHRpb25zLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBhbGwgb3BlbiBjb25uZWN0aW9ucyBpbiBvbnZlcnNpb25jaGFuZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCB0aGlzIHNpdHVhdGlvbiwgYnV0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkbyBnZXQgaGVyZSwgaXQganVzdCBtZWFucyB0aGUgcmVxdWVzdCByZW1haW5zIHBlbmRpbmcgLSBldmVudHVhbGx5IGl0IHdpbGwgc3VjY2VlZCBvciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkcm9wSW5zdGFuY2UgYmxvY2tlZCBmb3IgZGF0YWJhc2UgXCInICsgb3B0aW9ucy5uYW1lICsgJ1wiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wREJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG9wdGlvbnMuc3RvcmVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLm9wZW4ob3B0aW9ucy5uYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShvcHRpb25zLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UyID0gZm9yYWdlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JhZ2UyLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UyLl9kYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIChfcmVqZWN0UmVhZGluZXNzKG9wdGlvbnMsIGVycikgfHwgUHJvbWlzZSQxLnJlc29sdmUoKSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGFzeW5jU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgICBfaW5pdFN0b3JhZ2U6IF9pbml0U3RvcmFnZSxcbiAgICBfc3VwcG9ydDogaXNJbmRleGVkREJWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSxcbiAgICBzZXRJdGVtOiBzZXRJdGVtLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0sXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgIGtleToga2V5LFxuICAgIGtleXM6IGtleXMsXG4gICAgZHJvcEluc3RhbmNlOiBkcm9wSW5zdGFuY2Vcbn07XG5cbmZ1bmN0aW9uIGlzV2ViU1FMVmFsaWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcGVuRGF0YWJhc2UgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIFNhZGx5LCB0aGUgYmVzdCB3YXkgdG8gc2F2ZSBiaW5hcnkgZGF0YSBpbiBXZWJTUUwvbG9jYWxTdG9yYWdlIGlzIHNlcmlhbGl6aW5nXG4vLyBpdCB0byBCYXNlNjQsIHNvIHRoaXMgaXMgaG93IHdlIHN0b3JlIGl0IHRvIHByZXZlbnQgdmVyeSBzdHJhbmdlIGVycm9ycyB3aXRoIGxlc3Ncbi8vIHZlcmJvc2Ugd2F5cyBvZiBiaW5hcnkgPC0+IHN0cmluZyBkYXRhIHN0b3JhZ2UuXG52YXIgQkFTRV9DSEFSUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxudmFyIEJMT0JfVFlQRV9QUkVGSVggPSAnfn5sb2NhbF9mb3JhZ2VfdHlwZX4nO1xudmFyIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVggPSAvXn5+bG9jYWxfZm9yYWdlX3R5cGV+KFtefl0rKX4vO1xuXG52YXIgU0VSSUFMSVpFRF9NQVJLRVIgPSAnX19sZnNjX186JztcbnZhciBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUi5sZW5ndGg7XG5cbi8vIE9NRyB0aGUgc2VyaWFsaXphdGlvbnMhXG52YXIgVFlQRV9BUlJBWUJVRkZFUiA9ICdhcmJmJztcbnZhciBUWVBFX0JMT0IgPSAnYmxvYic7XG52YXIgVFlQRV9JTlQ4QVJSQVkgPSAnc2kwOCc7XG52YXIgVFlQRV9VSU5UOEFSUkFZID0gJ3VpMDgnO1xudmFyIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVkgPSAndWljOCc7XG52YXIgVFlQRV9JTlQxNkFSUkFZID0gJ3NpMTYnO1xudmFyIFRZUEVfSU5UMzJBUlJBWSA9ICdzaTMyJztcbnZhciBUWVBFX1VJTlQxNkFSUkFZID0gJ3VyMTYnO1xudmFyIFRZUEVfVUlOVDMyQVJSQVkgPSAndWkzMic7XG52YXIgVFlQRV9GTE9BVDMyQVJSQVkgPSAnZmwzMic7XG52YXIgVFlQRV9GTE9BVDY0QVJSQVkgPSAnZmw2NCc7XG52YXIgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggKyBUWVBFX0FSUkFZQlVGRkVSLmxlbmd0aDtcblxudmFyIHRvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihzZXJpYWxpemVkU3RyaW5nKSB7XG4gICAgLy8gRmlsbCB0aGUgc3RyaW5nIGludG8gYSBBcnJheUJ1ZmZlci5cbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gc2VyaWFsaXplZFN0cmluZy5sZW5ndGggKiAwLjc1O1xuICAgIHZhciBsZW4gPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKHNlcmlhbGl6ZWRTdHJpbmdbc2VyaWFsaXplZFN0cmluZy5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpXSk7XG4gICAgICAgIGVuY29kZWQyID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDFdKTtcbiAgICAgICAgZW5jb2RlZDMgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMl0pO1xuICAgICAgICBlbmNvZGVkNCA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAzXSk7XG5cbiAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuICAgICAgICBieXRlc1twKytdID0gZW5jb2RlZDEgPDwgMiB8IGVuY29kZWQyID4+IDQ7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDMgJiAzKSA8PCA2IHwgZW5jb2RlZDQgJiA2MztcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLy8gQ29udmVydHMgYSBidWZmZXIgdG8gYSBzdHJpbmcgdG8gc3RvcmUsIHNlcmlhbGl6ZWQsIGluIHRoZSBiYWNrZW5kXG4vLyBzdG9yYWdlIGxpYnJhcnkuXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXIpIHtcbiAgICAvLyBiYXNlNjQtYXJyYXlidWZmZXJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBiYXNlNjRTdHJpbmcgPSAnJztcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnN1YnN0cmluZygwLCBiYXNlNjRTdHJpbmcubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG59XG5cbi8vIFNlcmlhbGl6ZSBhIHZhbHVlLCBhZnRlcndhcmRzIGV4ZWN1dGluZyBhIGNhbGxiYWNrICh3aGljaCB1c3VhbGx5XG4vLyBpbnN0cnVjdHMgdGhlIGBzZXRJdGVtKClgIGNhbGxiYWNrL3Byb21pc2UgdG8gYmUgZXhlY3V0ZWQpLiBUaGlzIGlzIGhvd1xuLy8gd2Ugc3RvcmUgYmluYXJ5IGRhdGEgd2l0aCBsb2NhbFN0b3JhZ2UuXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZVR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbm5vdCB1c2UgYHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJgIG9yIHN1Y2ggaGVyZSwgYXMgdGhlc2VcbiAgICAvLyBjaGVja3MgZmFpbCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIHVzaW5nIGNhc3Blci5qcy4uLlxuICAgIC8vXG4gICAgLy8gVE9ETzogU2VlIHdoeSB0aG9zZSB0ZXN0cyBmYWlsIGFuZCB1c2UgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScgfHwgdmFsdWUuYnVmZmVyICYmIHRvU3RyaW5nJDEuY2FsbCh2YWx1ZS5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGJpbmFyeSBhcnJheXMgdG8gYSBzdHJpbmcgYW5kIHByZWZpeCB0aGUgc3RyaW5nIHdpdGhcbiAgICAgICAgLy8gYSBzcGVjaWFsIG1hcmtlci5cbiAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgdmFyIG1hcmtlciA9IFNFUklBTElaRURfTUFSS0VSO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0FSUkFZQlVGRkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gdmFsdWUuYnVmZmVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDhBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBVaW50OEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOENMQU1QRURBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMTZBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDY0QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUNjRBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIEJpbmFyeUFycmF5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobWFya2VyICsgYnVmZmVyVG9TdHJpbmcoYnVmZmVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAvLyBDb252ZXIgdGhlIGJsb2IgdG8gYSBiaW5hcnlBcnJheSBhbmQgdGhlbiB0byBhIHN0cmluZy5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgcHJlZml4IGZvciB0aGUgYmxvYiB0eXBlLlxuICAgICAgICAgICAgdmFyIHN0ciA9IEJMT0JfVFlQRV9QUkVGSVggKyB2YWx1ZS50eXBlICsgJ34nICsgYnVmZmVyVG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhTRVJJQUxJWkVEX01BUktFUiArIFRZUEVfQkxPQiArIHN0cik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBjb252ZXJ0IHZhbHVlIGludG8gYSBKU09OIHN0cmluZzogXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERlc2VyaWFsaXplIGRhdGEgd2UndmUgaW5zZXJ0ZWQgaW50byBhIHZhbHVlIGNvbHVtbi9maWVsZC4gV2UgcGxhY2Vcbi8vIHNwZWNpYWwgbWFya2VycyBpbnRvIG91ciBzdHJpbmdzIHRvIG1hcmsgdGhlbSBhcyBlbmNvZGVkOyB0aGlzIGlzbid0XG4vLyBhcyBuaWNlIGFzIGEgbWV0YSBmaWVsZCwgYnV0IGl0J3MgdGhlIG9ubHkgc2FuZSB0aGluZyB3ZSBjYW4gZG8gd2hpbHN0XG4vLyBrZWVwaW5nIGxvY2FsU3RvcmFnZSBzdXBwb3J0IGludGFjdC5cbi8vXG4vLyBPZnRlbnRpbWVzIHRoaXMgd2lsbCBqdXN0IGRlc2VyaWFsaXplIEpTT04gY29udGVudCwgYnV0IGlmIHdlIGhhdmUgYVxuLy8gc3BlY2lhbCBtYXJrZXIgKFNFUklBTElaRURfTUFSS0VSLCBkZWZpbmVkIGFib3ZlKSwgd2Ugd2lsbCBleHRyYWN0XG4vLyBzb21lIGtpbmQgb2YgYXJyYXlidWZmZXIvYmluYXJ5IGRhdGEvdHlwZWQgYXJyYXkgb3V0IG9mIHRoZSBzdHJpbmcuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgbWFya2VkIHRoaXMgc3RyaW5nIGFzIGJlaW5nIHNwZWNpYWxseSBzZXJpYWxpemVkIChpLmUuXG4gICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2VyaWFsaXplZCBKU09OKSwgd2UgY2FuIGp1c3QgcmV0dXJuIGl0IGFuZCBiZVxuICAgIC8vIGRvbmUgd2l0aCBpdC5cbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCkgIT09IFNFUklBTElaRURfTUFSS0VSKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGVhbHMgd2l0aCBkZXNlcmlhbGl6aW5nIHNvbWUga2luZCBvZiBCbG9iIG9yXG4gICAgLy8gVHlwZWRBcnJheS4gRmlyc3Qgd2Ugc2VwYXJhdGUgb3V0IHRoZSB0eXBlIG9mIGRhdGEgd2UncmUgZGVhbGluZ1xuICAgIC8vIHdpdGggZnJvbSB0aGUgZGF0YSBpdHNlbGYuXG4gICAgdmFyIHNlcmlhbGl6ZWRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcoVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuICAgIHZhciB0eXBlID0gdmFsdWUuc3Vic3RyaW5nKFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCwgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuXG4gICAgdmFyIGJsb2JUeXBlO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGJsb2IgdHlwZSBzZXJpYWxpemF0aW9uIHN0cmF0ZWd5LlxuICAgIC8vIERCcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgbG9jYWxGb3JhZ2Ugd2lsbCBzaW1wbHkgbm90IGhhdmUgdGhlIGJsb2IgdHlwZS5cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CTE9CICYmIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVgudGVzdChzZXJpYWxpemVkU3RyaW5nKSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IHNlcmlhbGl6ZWRTdHJpbmcubWF0Y2goQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCk7XG4gICAgICAgIGJsb2JUeXBlID0gbWF0Y2hlclsxXTtcbiAgICAgICAgc2VyaWFsaXplZFN0cmluZyA9IHNlcmlhbGl6ZWRTdHJpbmcuc3Vic3RyaW5nKG1hdGNoZXJbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByaWdodCB0eXBlIGJhc2VkIG9uIHRoZSBjb2RlL3R5cGUgc2V0IGR1cmluZ1xuICAgIC8vIHNlcmlhbGl6YXRpb24uXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVFlQRV9BUlJBWUJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIGNhc2UgVFlQRV9CTE9COlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogYmxvYlR5cGUgfSk7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQ4QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UMTZBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0ZMT0FUNjRBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG52YXIgbG9jYWxmb3JhZ2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIGRlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG4gICAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nXG59O1xuXG4vKlxuICogSW5jbHVkZXMgY29kZSBmcm9tOlxuICpcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSknLCBbXSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xufVxuXG4vLyBPcGVuIHRoZSBXZWJTUUwgZGF0YWJhc2UgKGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgaWYgb25lIGRpZG4ndFxuLy8gcHJldmlvdXNseSBleGlzdCksIHVzaW5nIGFueSBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDEob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IHR5cGVvZiBvcHRpb25zW2ldICE9PSAnc3RyaW5nJyA/IG9wdGlvbnNbaV0udG9TdHJpbmcoKSA6IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGJJbmZvUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBPcGVuIHRoZSBkYXRhYmFzZTsgdGhlIG9wZW5EYXRhYmFzZSBBUEkgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGNyZWF0ZSBpdCBmb3IgdXMgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiSW5mby5kYiA9IG9wZW5EYXRhYmFzZShkYkluZm8ubmFtZSwgU3RyaW5nKGRiSW5mby52ZXJzaW9uKSwgZGJJbmZvLmRlc2NyaXB0aW9uLCBkYkluZm8uc2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3VyIGtleS92YWx1ZSB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuICAgIHJldHVybiBkYkluZm9Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgc3FsU3RhdGVtZW50LCBhcmdzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGVycm9yLlNZTlRBWF9FUlIpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA9ID9cIiwgW2RiSW5mby5zdG9yZU5hbWVdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5yb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbWlzc2luZyAod2FzIGRlbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlLWNyZWF0ZSBpdCB0YWJsZSBhbmQgcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sIGVycm9yQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtJDEoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUICogRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPyBMSU1JVCAxJywgW2tleV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkudmFsdWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHVucGFjay5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlJDEoaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSByZXN1bHRzLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJvd3MuaXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBzZXJpYWxpemVkIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgaXRlbS5rZXksIGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCgwKSBwcmV2ZW50cyBwcm9ibGVtcyB3aXRoIHJlZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIF9zZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVGhlIGxvY2FsU3RvcmFnZSBBUEkgZG9lc24ndCByZXR1cm4gdW5kZWZpbmVkIHZhbHVlcyBpbiBhblxuICAgICAgICAgICAgLy8gXCJleHBlY3RlZFwiIHdheSwgc28gdW5kZWZpbmVkIGlzIGFsd2F5cyBjYXN0IHRvIG51bGwgaW4gYWxsXG4gICAgICAgICAgICAvLyBkcml2ZXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgJyArICcoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KScsIFtrZXksIHZhbHVlXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChzcWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIGZhaWxlZDsgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgcXVvdGEgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3FsRXJyb3IuY29kZSA9PT0gc3FsRXJyb3IuUVVPVEFfRVJSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVqZWN0IHRoZSBjYWxsYmFjayBvdXRyaWdodCBmb3Igbm93LCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdvcnRoIHRyeWluZyB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgYWNjZXB0cyB0aGUgcHJvbXB0IHRvIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgc3RvcmFnZSBvbiBTYWZhcmksIHRoaXMgZXJyb3Igd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNhbGxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyaWVzTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfc2V0SXRlbS5hcHBseShzZWxmLCBba2V5LCBvcmlnaW5hbFZhbHVlLCBjYWxsYmFjaywgcmV0cmllc0xlZnQgLSAxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtJDEoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gX3NldEl0ZW0uYXBwbHkodGhpcywgW2tleSwgdmFsdWUsIGNhbGxiYWNrLCAxXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPycsIFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBEZWxldGVzIGV2ZXJ5IGl0ZW0gaW4gdGhlIHRhYmxlLlxuLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyByZXNldHMgdGhlIEFVVE9fSU5DUkVNRU5UIG51bWJlci5cbmZ1bmN0aW9uIGNsZWFyJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERvZXMgYSBzaW1wbGUgYENPVU5UKGtleSlgIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpblxuLy8gbG9jYWxGb3JhZ2UuXG5mdW5jdGlvbiBsZW5ndGgkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBBaGhoLCBTUUwgbWFrZXMgdGhpcyBvbmUgc29vb29vbyBlYXN5LlxuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5pdGVtKDApLmM7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXR1cm4gdGhlIGtleSBsb2NhdGVkIGF0IGtleSBpbmRleCBYOyBlc3NlbnRpYWxseSBnZXRzIHRoZSBrZXkgZnJvbSBhXG4vLyBgV0hFUkUgaWQgPSA/YC4gVGhpcyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IEkgY2FuIHRoaW5rIHRvIGltcGxlbWVudFxuLy8gdGhpcyByYXJlbHktdXNlZCAoaW4gbXkgZXhwZXJpZW5jZSkgcGFydCBvZiB0aGUgQVBJLCBidXQgaXQgY2FuIHNlZW1cbi8vIGluY29uc2lzdGVudCwgYmVjYXVzZSB3ZSBkbyBgSU5TRVJUIE9SIFJFUExBQ0UgSU5UT2Agb24gYHNldEl0ZW0oKWAsIHNvXG4vLyB0aGUgSUQgb2YgZWFjaCBrZXkgd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSBpdCdzIHVwZGF0ZWQuIFBlcmhhcHMgYSBzdG9yZWRcbi8vIHByb2NlZHVyZSBmb3IgdGhlIGBzZXRJdGVtKClgIFNRTCB3b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0/XG4vLyBUT0RPOiBEb24ndCBjaGFuZ2UgSUQgb24gYHNldEl0ZW0oKWAuXG5mdW5jdGlvbiBrZXkkMShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLCBbbiArIDFdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLmxlbmd0aCA/IHJlc3VsdHMucm93cy5pdGVtKDApLmtleSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1Qga2V5IEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRhdGFiYXNlLyNkYXRhYmFzZXNcbi8vID4gVGhlcmUgaXMgbm8gd2F5IHRvIGVudW1lcmF0ZSBvciBkZWxldGUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIGFuIG9yaWdpbiBmcm9tIHRoaXMgQVBJLlxuZnVuY3Rpb24gZ2V0QWxsU3RvcmVOYW1lcyhkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJ1wiLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVOYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lcy5wdXNoKHJlc3VsdHMucm93cy5pdGVtKGkpLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHN0b3JlTmFtZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3FsRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDEob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHZhciBkYjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGIgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZGIgPSBzZWxmLl9kYkluZm8uZGI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKG9wdGlvbnMubmFtZSwgJycsICcnLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGRyb3AgYWxsIGRhdGFiYXNlIHRhYmxlc1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZ2V0QWxsU3RvcmVOYW1lcyhkYikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZGI6IGRiLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzOiBbb3B0aW9ucy5zdG9yZU5hbWVdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyb3BUYWJsZShzdG9yZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoJ0RST1AgVEFCTEUgSUYgRVhJU1RTICcgKyBzdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGRyb3BUYWJsZShvcGVyYXRpb25JbmZvLnN0b3JlTmFtZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIHdlYlNRTFN0b3JhZ2UgPSB7XG4gICAgX2RyaXZlcjogJ3dlYlNRTFN0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDEsXG4gICAgX3N1cHBvcnQ6IGlzV2ViU1FMVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDEsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQxLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMSxcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDEsXG4gICAgY2xlYXI6IGNsZWFyJDEsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMSxcbiAgICBrZXk6IGtleSQxLFxuICAgIGtleXM6IGtleXMkMSxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQxXG59O1xuXG5mdW5jdGlvbiBpc0xvY2FsU3RvcmFnZVZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAnc2V0SXRlbScgaW4gbG9jYWxTdG9yYWdlICYmXG4gICAgICAgIC8vIGluIElFOCB0eXBlb2YgbG9jYWxTdG9yYWdlLnNldEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICEhbG9jYWxTdG9yYWdlLnNldEl0ZW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIGRlZmF1bHRDb25maWcpIHtcbiAgICB2YXIga2V5UHJlZml4ID0gb3B0aW9ucy5uYW1lICsgJy8nO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmVOYW1lICE9PSBkZWZhdWx0Q29uZmlnLnN0b3JlTmFtZSkge1xuICAgICAgICBrZXlQcmVmaXggKz0gb3B0aW9ucy5zdG9yZU5hbWUgKyAnLyc7XG4gICAgfVxuICAgIHJldHVybiBrZXlQcmVmaXg7XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSB0aHJvd3Mgd2hlbiBzYXZpbmcgYW4gaXRlbVxuZnVuY3Rpb24gY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHtcbiAgICB2YXIgbG9jYWxTdG9yYWdlVGVzdEtleSA9ICdfbG9jYWxmb3JhZ2Vfc3VwcG9ydF90ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXksIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VUZXN0S2V5KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgYW5kIGFsbG93cyB0byBzYXZlIGFuIGl0ZW1cbi8vIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBsb2NhbFN0b3JhZ2UgaXMgdXNhYmxlIGluIFNhZmFyaSBQcml2YXRlIEJyb3dzaW5nXG4vLyBtb2RlLCBvciBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZSB0aGUgYXZhaWxhYmxlIHF1b3RhIGZvciBsb2NhbFN0b3JhZ2Vcbi8vIGlzIDAgYW5kIHRoZXJlIHdhc24ndCBhbnkgc2F2ZWQgaXRlbXMgeWV0LlxuZnVuY3Rpb24gX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkge1xuICAgIHJldHVybiAhY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHx8IGxvY2FsU3RvcmFnZS5sZW5ndGggPiAwO1xufVxuXG4vLyBDb25maWcgdGhlIGxvY2FsU3RvcmFnZSBiYWNrZW5kLCB1c2luZyBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDIob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge307XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYkluZm9baV0gPSBvcHRpb25zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGJJbmZvLmtleVByZWZpeCA9IF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZyk7XG5cbiAgICBpZiAoIV9pc0xvY2FsU3RvcmFnZVVzYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuXG4gICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG59XG5cbi8vIFJlbW92ZSBhbGwga2V5cyBmcm9tIHRoZSBkYXRhc3RvcmUsIGVmZmVjdGl2ZWx5IGRlc3Ryb3lpbmcgYWxsIGRhdGEgaW5cbi8vIHRoZSBhcHAncyBrZXkvdmFsdWUgc3RvcmUhXG5mdW5jdGlvbiBjbGVhciQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gc2VsZi5fZGJJbmZvLmtleVByZWZpeDtcblxuICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXRyaWV2ZSBhbiBpdGVtIGZyb20gdGhlIHN0b3JlLiBVbmxpa2UgdGhlIG9yaWdpbmFsIGFzeW5jX3N0b3JhZ2Vcbi8vIGxpYnJhcnkgaW4gR2FpYSwgd2UgZG9uJ3QgbW9kaWZ5IHJldHVybiB2YWx1ZXMgYXQgYWxsLiBJZiBhIGtleSdzIHZhbHVlXG4vLyBpcyBgdW5kZWZpbmVkYCwgd2UgcGFzcyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXkpO1xuXG4gICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBzdHJpbmcgaW50byBhIEpTIG9iamVjdC4gSWYgcmVzdWx0IGlzbid0IHRydXRoeSwgdGhlIGtleVxuICAgICAgICAvLyBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0IHRvIHRoZVxuICAgICAgICAvLyBjYWxsYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBJdGVyYXRlIG92ZXIgYWxsIGl0ZW1zIGluIHRoZSBzdG9yZS5cbmZ1bmN0aW9uIGl0ZXJhdGUkMihpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGRiSW5mby5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlQcmVmaXhMZW5ndGggPSBrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcblxuICAgICAgICAvLyBXZSB1c2UgYSBkZWRpY2F0ZWQgaXRlcmF0b3IgaW5zdGVhZCBvZiB0aGUgYGlgIHZhcmlhYmxlIGJlbG93XG4gICAgICAgIC8vIHNvIG90aGVyIGtleXMgd2UgZmV0Y2ggaW4gbG9jYWxTdG9yYWdlIGFyZW4ndCBjb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBgaXRlcmF0aW9uTnVtYmVyYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlKClgXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGdpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQzNSNkaXNjdXNzaW9uX3IzODA2MTUzMFxuICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgICAgICAvLyBJZiBhIHJlc3VsdCB3YXMgZm91bmQsIHBhcnNlIGl0IGZyb20gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGVcbiAgICAgICAgICAgIC8vIGtleSBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0XG4gICAgICAgICAgICAvLyB0byB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwga2V5LnN1YnN0cmluZyhrZXlQcmVmaXhMZW5ndGgpLCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTYW1lIGFzIGxvY2FsU3RvcmFnZSdzIGtleSgpIG1ldGhvZCwgZXhjZXB0IHRha2VzIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBrZXkkMihuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5rZXkobik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUga2V5LCBpZiBhIGtleSBpcyBmb3VuZC5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhkYkluZm8ua2V5UHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICAgICAgICBpZiAoaXRlbUtleS5pbmRleE9mKGRiSW5mby5rZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGl0ZW1LZXkuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFN1cHBseSB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGRhdGFzdG9yZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5mdW5jdGlvbiBsZW5ndGgkMihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYua2V5cygpLnRoZW4oZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUsIG5pY2UgYW5kIHNpbXBsZS5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTZXQgYSBrZXkncyB2YWx1ZSBhbmQgcnVuIGFuIG9wdGlvbmFsIGNhbGxiYWNrIG9uY2UgdGhlIHZhbHVlIGlzIHNldC5cbi8vIFVubGlrZSBHYWlhJ3MgaW1wbGVtZW50YXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHZhbHVlLFxuLy8gaW4gY2FzZSB5b3Ugd2FudCB0byBvcGVyYXRlIG9uIHRoYXQgdmFsdWUgb25seSBhZnRlciB5b3UncmUgc3VyZSBpdFxuLy8gc2F2ZWQsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5mdW5jdGlvbiBzZXRJdGVtJDIoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDb252ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gbnVsbC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgY2FwYWNpdHkgZXhjZWVkZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYSBzcGVjaWZpYyBlcnJvci9ldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGUubmFtZSA9PT0gJ05TX0VSUk9SX0RPTV9RVU9UQV9SRUFDSEVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZSQyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUob3B0aW9ucy5uYW1lICsgJy8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIHNlbGYuX2RlZmF1bHRDb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGxvY2FsU3RvcmFnZVdyYXBwZXIgPSB7XG4gICAgX2RyaXZlcjogJ2xvY2FsU3RvcmFnZVdyYXBwZXInLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDIsXG4gICAgX3N1cHBvcnQ6IGlzTG9jYWxTdG9yYWdlVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDIsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQyLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMixcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDIsXG4gICAgY2xlYXI6IGNsZWFyJDIsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMixcbiAgICBrZXk6IGtleSQyLFxuICAgIGtleXM6IGtleXMkMixcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQyXG59O1xuXG52YXIgc2FtZVZhbHVlID0gZnVuY3Rpb24gc2FtZVZhbHVlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0geSB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT09ICdudW1iZXInICYmIGlzTmFOKHgpICYmIGlzTmFOKHkpO1xufTtcblxudmFyIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBpZiAoc2FtZVZhbHVlKGFycmF5W2ldLCBzZWFyY2hFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLy8gRHJpdmVycyBhcmUgc3RvcmVkIGhlcmUgd2hlbiBgZGVmaW5lRHJpdmVyKClgIGlzIGNhbGxlZC5cbi8vIFRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiBsb2NhbEZvcmFnZS5cbnZhciBEZWZpbmVkRHJpdmVycyA9IHt9O1xuXG52YXIgRHJpdmVyU3VwcG9ydCA9IHt9O1xuXG52YXIgRGVmYXVsdERyaXZlcnMgPSB7XG4gICAgSU5ERVhFRERCOiBhc3luY1N0b3JhZ2UsXG4gICAgV0VCU1FMOiB3ZWJTUUxTdG9yYWdlLFxuICAgIExPQ0FMU1RPUkFHRTogbG9jYWxTdG9yYWdlV3JhcHBlclxufTtcblxudmFyIERlZmF1bHREcml2ZXJPcmRlciA9IFtEZWZhdWx0RHJpdmVycy5JTkRFWEVEREIuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuV0VCU1FMLl9kcml2ZXIsIERlZmF1bHREcml2ZXJzLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXTtcblxudmFyIE9wdGlvbmFsRHJpdmVyTWV0aG9kcyA9IFsnZHJvcEluc3RhbmNlJ107XG5cbnZhciBMaWJyYXJ5TWV0aG9kcyA9IFsnY2xlYXInLCAnZ2V0SXRlbScsICdpdGVyYXRlJywgJ2tleScsICdrZXlzJywgJ2xlbmd0aCcsICdyZW1vdmVJdGVtJywgJ3NldEl0ZW0nXS5jb25jYXQoT3B0aW9uYWxEcml2ZXJNZXRob2RzKTtcblxudmFyIERlZmF1bHRDb25maWcgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRyaXZlcjogRGVmYXVsdERyaXZlck9yZGVyLnNsaWNlKCksXG4gICAgbmFtZTogJ2xvY2FsZm9yYWdlJyxcbiAgICAvLyBEZWZhdWx0IERCIHNpemUgaXMgX0pVU1QgVU5ERVJfIDVNQiwgYXMgaXQncyB0aGUgaGlnaGVzdCBzaXplXG4gICAgLy8gd2UgY2FuIHVzZSB3aXRob3V0IGEgcHJvbXB0LlxuICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgc3RvcmVOYW1lOiAna2V5dmFsdWVwYWlycycsXG4gICAgdmVyc2lvbjogMS4wXG59O1xuXG5mdW5jdGlvbiBjYWxsV2hlblJlYWR5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIGxpYnJhcnlNZXRob2QpIHtcbiAgICBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGb3JhZ2VJbnN0YW5jZVtsaWJyYXJ5TWV0aG9kXS5hcHBseShsb2NhbEZvcmFnZUluc3RhbmNlLCBfYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShhcmdbX2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bX2tleV0gPSBhcmdbX2tleV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG59XG5cbnZhciBMb2NhbEZvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbEZvcmFnZShvcHRpb25zKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2NhbEZvcmFnZSk7XG5cbiAgICAgICAgZm9yICh2YXIgZHJpdmVyVHlwZUtleSBpbiBEZWZhdWx0RHJpdmVycykge1xuICAgICAgICAgICAgaWYgKERlZmF1bHREcml2ZXJzLmhhc093blByb3BlcnR5KGRyaXZlclR5cGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlciA9IERlZmF1bHREcml2ZXJzW2RyaXZlclR5cGVLZXldO1xuICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyLl9kcml2ZXI7XG4gICAgICAgICAgICAgICAgdGhpc1tkcml2ZXJUeXBlS2V5XSA9IGRyaXZlck5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoIURlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IGRyaXZlcnMgY2FuIGJlIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEcml2ZXIoZHJpdmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29uZmlnID0gZXh0ZW5kKHt9LCBEZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZXh0ZW5kKHt9LCB0aGlzLl9kZWZhdWx0Q29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW5pdERyaXZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RiSW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgIH1cblxuICAgIC8vIFNldCBhbnkgY29uZmlnIHZhbHVlcyBmb3IgbG9jYWxGb3JhZ2U7IGNhbiBiZSBjYWxsZWQgYW55dGltZSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgQVBJIGNhbGwgKGUuZy4gYGdldEl0ZW1gLCBgc2V0SXRlbWApLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBvcHRpb25zIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWdcbiAgICAvLyB2YWx1ZXMuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jb25maWcgPSBmdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICAgICAgICAvLyBJZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpcyBhbiBvYmplY3QsIHdlIHVzZSBpdCB0byBzZXQgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiBlaXRoZXIgYSBzcGVjaWZpZWQgY29uZmlnIHZhbHVlIG9yIGFsbFxuICAgICAgICAvLyBjb25maWcgdmFsdWVzLlxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvcHRpb25zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGZvcmFnZSBpcyByZWFkeSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQsIHdlIGNhbid0IHNldFxuICAgICAgICAgICAgLy8gYW55IG5ldyBjb25maWd1cmF0aW9uIHZhbHVlcy4gSW5zdGVhZCwgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgXCIgKyAnaGFzIGJlZW4gdXNlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICdzdG9yZU5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBvcHRpb25zW2ldLnJlcGxhY2UoL1xcVy9nLCAnXycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAndmVyc2lvbicgJiYgdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0RhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWdbaV0gPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZnRlciBhbGwgY29uZmlnIG9wdGlvbnMgYXJlIHNldCBhbmRcbiAgICAgICAgICAgIC8vIHRoZSBkcml2ZXIgb3B0aW9uIGlzIHVzZWQsIHRyeSBzZXR0aW5nIGl0XG4gICAgICAgICAgICBpZiAoJ2RyaXZlcicgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmRyaXZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnW29wdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBVc2VkIHRvIGRlZmluZSBhIGN1c3RvbSBkcml2ZXIsIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZlxuICAgIC8vIGxvY2FsRm9yYWdlLlxuXG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyID0gZnVuY3Rpb24gZGVmaW5lRHJpdmVyKGRyaXZlck9iamVjdCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJPYmplY3QuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxpYW5jZUVycm9yID0gbmV3IEVycm9yKCdDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSAnICsgJ2h0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbG9jYWxGb3JhZ2UvI2RlZmluZWRyaXZlcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbm90IG92ZXJsYXAgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBsaWJyYXJ5LWRlZmluZWQsIGRlZmF1bHQgZHJpdmVycy5cbiAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdC5fZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZHMgPSBMaWJyYXJ5TWV0aG9kcy5jb25jYXQoJ19pbml0U3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkcml2ZXJNZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJNZXRob2ROYW1lID0gZHJpdmVyTWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGEgbWV0aG9kIGV2ZW4gd2hlbiBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZXF1aXJlZCA9ICFpbmNsdWRlcyhPcHRpb25hbERyaXZlck1ldGhvZHMsIGRyaXZlck1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUmVxdWlyZWQgfHwgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdKSAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29tcGxpYW5jZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmVNaXNzaW5nTWV0aG9kcyA9IGZ1bmN0aW9uIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5ID0gZnVuY3Rpb24gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdNZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gT3B0aW9uYWxEcml2ZXJNZXRob2RzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxEcml2ZXJNZXRob2QgPSBPcHRpb25hbERyaXZlck1ldGhvZHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0W29wdGlvbmFsRHJpdmVyTWV0aG9kXSA9IG1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeShvcHRpb25hbERyaXZlck1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREcml2ZXJTdXBwb3J0ID0gZnVuY3Rpb24gc2V0RHJpdmVyU3VwcG9ydChzdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogJyArIGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdID0gZHJpdmVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBEcml2ZXJTdXBwb3J0W2RyaXZlck5hbWVdID0gc3VwcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgdGhlbiwgc28gdGhhdCB3ZSBjYW4gZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlcnMgdGhhdCBoYXZlIHNpbXBsZSBfc3VwcG9ydCBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGEgYmxvY2tpbmcgbWFubmVyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCdfc3VwcG9ydCcgaW4gZHJpdmVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJPYmplY3QuX3N1cHBvcnQgJiYgdHlwZW9mIGRyaXZlck9iamVjdC5fc3VwcG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KCkudGhlbihzZXREcml2ZXJTdXBwb3J0LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyU3VwcG9ydCghIWRyaXZlck9iamVjdC5fc3VwcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmRyaXZlciA9IGZ1bmN0aW9uIGRyaXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyaXZlciB8fCBudWxsO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0RHJpdmVyID0gZnVuY3Rpb24gZ2V0RHJpdmVyKGRyaXZlck5hbWUsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBnZXREcml2ZXJQcm9taXNlID0gRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPyBQcm9taXNlJDEucmVzb2x2ZShEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkgOiBQcm9taXNlJDEucmVqZWN0KG5ldyBFcnJvcignRHJpdmVyIG5vdCBmb3VuZC4nKSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhnZXREcml2ZXJQcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBnZXREcml2ZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplciA9IGZ1bmN0aW9uIGdldFNlcmlhbGl6ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZXJQcm9taXNlID0gUHJvbWlzZSQxLnJlc29sdmUobG9jYWxmb3JhZ2VTZXJpYWxpemVyKTtcbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhzZXJpYWxpemVyUHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9yZWFkeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdERyaXZlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zZXREcml2ZXIgPSBmdW5jdGlvbiBzZXREcml2ZXIoZHJpdmVycywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghaXNBcnJheShkcml2ZXJzKSkge1xuICAgICAgICAgICAgZHJpdmVycyA9IFtkcml2ZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ZWREcml2ZXJzID0gdGhpcy5fZ2V0U3VwcG9ydGVkRHJpdmVycyhkcml2ZXJzKTtcblxuICAgICAgICBmdW5jdGlvbiBzZXREcml2ZXJUb0NvbmZpZygpIHtcbiAgICAgICAgICAgIHNlbGYuX2NvbmZpZy5kcml2ZXIgPSBzZWxmLmRyaXZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VsZldpdGhEcml2ZXIoZHJpdmVyKSB7XG4gICAgICAgICAgICBzZWxmLl9leHRlbmQoZHJpdmVyKTtcbiAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdFN0b3JhZ2Uoc2VsZi5fY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudERyaXZlckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyaXZlclByb21pc2VMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERyaXZlckluZGV4IDwgc3VwcG9ydGVkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1tjdXJyZW50RHJpdmVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERyaXZlckluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGV4dGVuZFNlbGZXaXRoRHJpdmVyKVtcImNhdGNoXCJdKGRyaXZlclByb21pc2VMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlclNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJpdmVyUHJvbWlzZUxvb3AoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzc1xuICAgICAgICAvLyBzbyB3YWl0IGZvciBpdCB0byBmaW5pc2ggaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZVxuICAgICAgICAvLyByYWNlIGNvbmRpdGlvbiB0byBzZXQgX2RiSW5mb1xuICAgICAgICB2YXIgb2xkRHJpdmVyU2V0RG9uZSA9IHRoaXMuX2RyaXZlclNldCAhPT0gbnVsbCA/IHRoaXMuX2RyaXZlclNldFtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9KSA6IFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gb2xkRHJpdmVyU2V0RG9uZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1swXTtcbiAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChkcml2ZXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXREcml2ZXIgPSBpbml0RHJpdmVyKHN1cHBvcnRlZERyaXZlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgc2VsZi5fZHJpdmVyU2V0ID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHRoaXMuX2RyaXZlclNldCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyU2V0O1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiBzdXBwb3J0cyhkcml2ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIURyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV07XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZXh0ZW5kID0gZnVuY3Rpb24gX2V4dGVuZChsaWJyYXJ5TWV0aG9kc0FuZFByb3BlcnRpZXMpIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycyA9IGZ1bmN0aW9uIF9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpIHtcbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRzKGRyaXZlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkRHJpdmVycy5wdXNoKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWREcml2ZXJzO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSA9IGZ1bmN0aW9uIF93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSB7XG4gICAgICAgIC8vIEFkZCBhIHN0dWIgZm9yIGVhY2ggZHJpdmVyIEFQSSBtZXRob2QgdGhhdCBkZWxheXMgdGhlIGNhbGwgdG8gdGhlXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ldGhvZCB1bnRpbCBsb2NhbEZvcmFnZSBpcyByZWFkeS4gVGhlc2Ugc3R1YnNcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZHJpdmVyIG1ldGhvZHMgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzXG4gICAgICAgIC8vIGxvYWRlZCwgc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gTGlicmFyeU1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGxXaGVuUmVhZHkodGhpcywgTGlicmFyeU1ldGhvZHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEZvcmFnZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExvY2FsRm9yYWdlO1xufSgpO1xuXG4vLyBUaGUgYWN0dWFsIGxvY2FsRm9yYWdlIG9iamVjdCB0aGF0IHdlIGV4cG9zZSBhcyBhIG1vZHVsZSBvciB2aWEgYVxuLy8gZ2xvYmFsLiBJdCdzIGV4dGVuZGVkIGJ5IHB1bGxpbmcgaW4gb25lIG9mIG91ciBvdGhlciBsaWJyYXJpZXMuXG5cblxudmFyIGxvY2FsZm9yYWdlX2pzID0gbmV3IExvY2FsRm9yYWdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYWxmb3JhZ2VfanM7XG5cbn0se1wiM1wiOjN9XX0se30sWzRdKSg0KVxufSk7XG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgbG9jYWxGb3JhZ2UgPSByZXF1aXJlKCdsb2NhbGZvcmFnZScpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcblxuY29uc3QgV0lORE9XID0gdXRpbHMuR0xPQkFMX09CSiA7XG5cbi8qKlxuICogY2FjaGUgb2ZmbGluZSBlcnJvcnMgYW5kIHNlbmQgd2hlbiBjb25uZWN0ZWRcbiAqIEBkZXByZWNhdGVkIFRoZSBvZmZsaW5lIGludGVncmF0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG9mZmxpbmUgdHJhbnNwb3J0IHdyYXBwZXIuXG4gKlxuICogaHR0cDovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2NvbmZpZ3VyYXRpb24vdHJhbnNwb3J0cy8jb2ZmbGluZS1jYWNoaW5nXG4gKi9cbmNsYXNzIE9mZmxpbmUgIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLmlkID0gJ09mZmxpbmUnO31cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cbiAgLyoqXG4gICAqIHRoZSBjdXJyZW50IGh1YiBpbnN0YW5jZVxuICAgKi9cblxuICAvKipcbiAgICogbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHRvIHN0b3JlIHdoaWxlIG9mZmxpbmVcbiAgICovXG5cbiAgLyoqXG4gICAqIGV2ZW50IGNhY2hlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubmFtZSA9IE9mZmxpbmUuaWQ7XG5cbiAgICB0aGlzLm1heFN0b3JlZEV2ZW50cyA9IG9wdGlvbnMubWF4U3RvcmVkRXZlbnRzIHx8IDMwOyAvLyBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgdGhpcy5vZmZsaW5lRXZlbnRTdG9yZSA9IGxvY2FsRm9yYWdlLmNyZWF0ZUluc3RhbmNlKHtcbiAgICAgIG5hbWU6ICdzZW50cnkvb2ZmbGluZUV2ZW50U3RvcmUnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViKSB7XG4gICAgdGhpcy5odWIgPSBnZXRDdXJyZW50SHViKCk7XG5cbiAgICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIFdJTkRPVykge1xuICAgICAgV0lORE9XLmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICgpID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLl9zZW5kRXZlbnRzKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBzZW5kIGNhY2hlZCBldmVudHMnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudFByb2Nlc3NvciA9IGV2ZW50ID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgaWYgKHRoaXMuaHViICYmIHRoaXMuaHViLmdldEludGVncmF0aW9uKE9mZmxpbmUpKSB7XG4gICAgICAgIC8vIGNhY2hlIGlmIHdlIGFyZSBwb3NpdGl2ZWx5IG9mZmxpbmVcbiAgICAgICAgaWYgKCduYXZpZ2F0b3InIGluIFdJTkRPVyAmJiAnb25MaW5lJyBpbiBXSU5ET1cubmF2aWdhdG9yICYmICFXSU5ET1cubmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgYSBvZmZsaW5lIC0gY2FjaGluZyBpbnN0ZWFkJyk7XG5cbiAgICAgICAgICB2b2lkIHRoaXMuX2NhY2hlRXZlbnQoZXZlbnQpXG4gICAgICAgICAgICAudGhlbigoX2V2ZW50KSA9PiB0aGlzLl9lbmZvcmNlTWF4RXZlbnRzKCkpXG4gICAgICAgICAgICAuY2F0Y2goKF9lcnJvcikgPT4ge1xuICAgICAgICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdjb3VsZCBub3QgY2FjaGUgZXZlbnQgd2hpbGUgb2ZmbGluZScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyByZXR1cm4gbnVsbCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUsIGJlY2F1c2UgYmVpbmcgb2ZmbGluZSB3aWxsIHN0aWxsIHJlc3VsdCBpbiBhbiBlcnJvclxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9O1xuXG4gICAgZXZlbnRQcm9jZXNzb3IuaWQgPSB0aGlzLm5hbWU7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoZXZlbnRQcm9jZXNzb3IpO1xuXG4gICAgLy8gaWYgb25saW5lIG5vdywgc2VuZCBhbnkgZXZlbnRzIHN0b3JlZCBpbiBhIHByZXZpb3VzIG9mZmxpbmUgc2Vzc2lvblxuICAgIGlmICgnbmF2aWdhdG9yJyBpbiBXSU5ET1cgJiYgJ29uTGluZScgaW4gV0lORE9XLm5hdmlnYXRvciAmJiBXSU5ET1cubmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgdm9pZCB0aGlzLl9zZW5kRXZlbnRzKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdjb3VsZCBub3Qgc2VuZCBjYWNoZWQgZXZlbnRzJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FjaGUgYW4gZXZlbnQgdG8gc2VuZCBsYXRlclxuICAgKiBAcGFyYW0gZXZlbnQgYW4gZXZlbnRcbiAgICovXG4gICBhc3luYyBfY2FjaGVFdmVudChldmVudCkge1xuICAgIHJldHVybiB0aGlzLm9mZmxpbmVFdmVudFN0b3JlLnNldEl0ZW0odXRpbHMudXVpZDQoKSwgdXRpbHMubm9ybWFsaXplKGV2ZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogcHVyZ2UgZXhjZXNzIGV2ZW50cyBpZiBuZWNlc3NhcnlcbiAgICovXG4gICBhc3luYyBfZW5mb3JjZU1heEV2ZW50cygpIHtcbiAgICBjb25zdCBldmVudHMgPSBbXTtcblxuICAgIHJldHVybiB0aGlzLm9mZmxpbmVFdmVudFN0b3JlXG4gICAgICAuaXRlcmF0ZSgoZXZlbnQsIGNhY2hlS2V5LCBfaW5kZXgpID0+IHtcbiAgICAgICAgLy8gYWdncmVnYXRlIGV2ZW50c1xuICAgICAgICBldmVudHMucHVzaCh7IGNhY2hlS2V5LCBldmVudCB9KTtcbiAgICAgIH0pXG4gICAgICAudGhlbihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAvLyB0aGlzIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgaXRlcmF0aW9uIGlzIGZpbmlzaGVkXG4gICAgICAgICAgdGhpcy5fcHVyZ2VFdmVudHMoXG4gICAgICAgICAgICAvLyBwdXJnZSBhbGwgZXZlbnRzIHBhc3QgbWF4U3RvcmVkRXZlbnRzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlclxuICAgICAgICAgICAgZXZlbnRzXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiAoYi5ldmVudC50aW1lc3RhbXAgfHwgMCkgLSAoYS5ldmVudC50aW1lc3RhbXAgfHwgMCkpXG4gICAgICAgICAgICAgIC5zbGljZSh0aGlzLm1heFN0b3JlZEV2ZW50cyA8IGV2ZW50cy5sZW5ndGggPyB0aGlzLm1heFN0b3JlZEV2ZW50cyA6IGV2ZW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgIC5tYXAoZXZlbnQgPT4gZXZlbnQuY2FjaGVLZXkpLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAuY2F0Y2goKF9lcnJvcikgPT4ge1xuICAgICAgICBkZWJ1Z0J1aWxkLkRFQlVHX0JVSUxEICYmIHV0aWxzLmxvZ2dlci53YXJuKCdjb3VsZCBub3QgZW5mb3JjZSBtYXggZXZlbnRzJyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXJnZSBldmVudCBmcm9tIGNhY2hlXG4gICAqL1xuICAgYXN5bmMgX3B1cmdlRXZlbnQoY2FjaGVLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5vZmZsaW5lRXZlbnRTdG9yZS5yZW1vdmVJdGVtKGNhY2hlS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXJnZSBldmVudHMgZnJvbSBjYWNoZVxuICAgKi9cbiAgIGFzeW5jIF9wdXJnZUV2ZW50cyhjYWNoZUtleXMpIHtcbiAgICAvLyB0cmFpbCB3aXRoIC50aGVuIHRvIGVuc3VyZSB0aGUgcmV0dXJuIHR5cGUgYXMgdm9pZCBhbmQgbm90IHZvaWR8dm9pZFtdXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGNhY2hlS2V5cy5tYXAoY2FjaGVLZXkgPT4gdGhpcy5fcHVyZ2VFdmVudChjYWNoZUtleSkpKS50aGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogc2VuZCBhbGwgZXZlbnRzXG4gICAqL1xuICAgYXN5bmMgX3NlbmRFdmVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmbGluZUV2ZW50U3RvcmUuaXRlcmF0ZSgoZXZlbnQsIGNhY2hlS2V5LCBfaW5kZXgpID0+IHtcbiAgICAgIGlmICh0aGlzLmh1Yikge1xuICAgICAgICB0aGlzLmh1Yi5jYXB0dXJlRXZlbnQoZXZlbnQpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5fcHVyZ2VFdmVudChjYWNoZUtleSkuY2F0Y2goKF9lcnJvcikgPT4ge1xuICAgICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBwdXJnZSBldmVudCBmcm9tIGNhY2hlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIud2Fybignbm8gaHViIGZvdW5kIC0gY291bGQgbm90IHNlbmQgY2FjaGVkIGV2ZW50Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gT2ZmbGluZS5fX2luaXRTdGF0aWMoKTtcblxuZXhwb3J0cy5PZmZsaW5lID0gT2ZmbGluZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9mZmxpbmUuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBXSU5ET1cgPSB1dGlscy5HTE9CQUxfT0JKIDtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdSZXBvcnRpbmdPYnNlcnZlcic7XG5cbmNvbnN0IFNFVFVQX0NMSUVOVFMgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBfcmVwb3J0aW5nT2JzZXJ2ZXJJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHR5cGVzID0gb3B0aW9ucy50eXBlcyB8fCBbJ2NyYXNoJywgJ2RlcHJlY2F0aW9uJywgJ2ludGVydmVudGlvbiddO1xuXG4gIC8qKiBIYW5kbGVyIGZvciB0aGUgcmVwb3J0aW5nIG9ic2VydmVyLiAqL1xuICBmdW5jdGlvbiBoYW5kbGVyKHJlcG9ydHMpIHtcbiAgICBpZiAoIVNFVFVQX0NMSUVOVFMuaGFzKGNvcmUuZ2V0Q2xpZW50KCkgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVwb3J0IG9mIHJlcG9ydHMpIHtcbiAgICAgIGNvcmUud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgc2NvcGUuc2V0RXh0cmEoJ3VybCcsIHJlcG9ydC51cmwpO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gYFJlcG9ydGluZ09ic2VydmVyIFske3JlcG9ydC50eXBlfV1gO1xuICAgICAgICBsZXQgZGV0YWlscyA9ICdObyBkZXRhaWxzIGF2YWlsYWJsZSc7XG5cbiAgICAgICAgaWYgKHJlcG9ydC5ib2R5KSB7XG4gICAgICAgICAgLy8gT2JqZWN0LmtleXMgZG9lc24ndCB3b3JrIG9uIFJlcG9ydEJvZHksIGFzIGFsbCBwcm9wZXJ0aWVzIGFyZSBpbmhlaXJ0ZWRcbiAgICAgICAgICBjb25zdCBwbGFpbkJvZHlcblxuID0ge307XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHJlcG9ydC5ib2R5KSB7XG4gICAgICAgICAgICBwbGFpbkJvZHlbcHJvcF0gPSByZXBvcnQuYm9keVtwcm9wXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY29wZS5zZXRFeHRyYSgnYm9keScsIHBsYWluQm9keSk7XG5cbiAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjcmFzaCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXBvcnQuYm9keSA7XG4gICAgICAgICAgICAvLyBBIGZhbmN5IHdheSB0byBjcmVhdGUgYSBtZXNzYWdlIG91dCBvZiBjcmFzaElkIE9SIHJlYXNvbiBPUiBib3RoIE9SIGZhbGxiYWNrXG4gICAgICAgICAgICBkZXRhaWxzID0gW2JvZHkuY3Jhc2hJZCB8fCAnJywgYm9keS5yZWFzb24gfHwgJyddLmpvaW4oJyAnKS50cmltKCkgfHwgZGV0YWlscztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcG9ydC5ib2R5IDtcbiAgICAgICAgICAgIGRldGFpbHMgPSBib2R5Lm1lc3NhZ2UgfHwgZGV0YWlscztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb3JlLmNhcHR1cmVNZXNzYWdlKGAke2xhYmVsfTogJHtkZXRhaWxzfWApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHNldHVwT25jZSgpIHtcbiAgICAgIGlmICghdXRpbHMuc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgKFdJTkRPVyApLlJlcG9ydGluZ09ic2VydmVyKGhhbmRsZXIsIHtcbiAgICAgICAgYnVmZmVyZWQ6IHRydWUsXG4gICAgICAgIHR5cGVzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoKTtcbiAgICB9LFxuXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBTRVRVUF9DTElFTlRTLnNldChjbGllbnQsIHRydWUpO1xuICAgIH0sXG4gIH07XG59KSA7XG5cbmNvbnN0IHJlcG9ydGluZ09ic2VydmVySW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9yZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uKTtcblxuLyoqXG4gKiBSZXBvcnRpbmcgQVBJIGludGVncmF0aW9uIC0gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3JlcG9ydGluZy9cbiAqIEBkZXByZWNhdGVkIFVzZSBgcmVwb3J0aW5nT2JzZXJ2ZXJJbnRlZ3JhdGlvbigpYCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmNvbnN0IFJlcG9ydGluZ09ic2VydmVyID0gY29yZS5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoXG4gIElOVEVHUkFUSU9OX05BTUUsXG4gIHJlcG9ydGluZ09ic2VydmVySW50ZWdyYXRpb24sXG4pXG5cbjtcblxuZXhwb3J0cy5SZXBvcnRpbmdPYnNlcnZlciA9IFJlcG9ydGluZ09ic2VydmVyO1xuZXhwb3J0cy5yZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uID0gcmVwb3J0aW5nT2JzZXJ2ZXJJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcG9ydGluZ29ic2VydmVyLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ0BzZW50cnkvdXRpbHMnKTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdSZXdyaXRlRnJhbWVzJztcblxuY29uc3QgX3Jld3JpdGVGcmFtZXNJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHJvb3QgPSBvcHRpb25zLnJvb3Q7XG4gIGNvbnN0IHByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdhcHA6Ly8vJztcblxuICBjb25zdCBpdGVyYXRlZSA9XG4gICAgb3B0aW9ucy5pdGVyYXRlZSB8fFxuICAgICgoZnJhbWUpID0+IHtcbiAgICAgIGlmICghZnJhbWUuZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyYW1lO1xuICAgICAgfVxuICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBXaW5kb3dzIGZyYW1lIGJ5IGNoZWNraW5nIGZvciBhIFdpbmRvd3Mtc3R5bGUgcHJlZml4IHN1Y2ggYXMgYEM6XFxgXG4gICAgICBjb25zdCBpc1dpbmRvd3NGcmFtZSA9XG4gICAgICAgIC9eW2EtekEtWl06XFxcXC8udGVzdChmcmFtZS5maWxlbmFtZSkgfHxcbiAgICAgICAgLy8gb3IgdGhlIHByZXNlbmNlIG9mIGEgYmFja3NsYXNoIHdpdGhvdXQgYSBmb3J3YXJkIHNsYXNoICh3aGljaCBhcmUgbm90IGFsbG93ZWQgb24gV2luZG93cylcbiAgICAgICAgKGZyYW1lLmZpbGVuYW1lLmluY2x1ZGVzKCdcXFxcJykgJiYgIWZyYW1lLmZpbGVuYW1lLmluY2x1ZGVzKCcvJykpO1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lIGZpbGVuYW1lIGJlZ2lucyB3aXRoIGAvYFxuICAgICAgY29uc3Qgc3RhcnRzV2l0aFNsYXNoID0gL15cXC8vLnRlc3QoZnJhbWUuZmlsZW5hbWUpO1xuICAgICAgaWYgKGlzV2luZG93c0ZyYW1lIHx8IHN0YXJ0c1dpdGhTbGFzaCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGlzV2luZG93c0ZyYW1lXG4gICAgICAgICAgPyBmcmFtZS5maWxlbmFtZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXlthLXpBLVpdOi8sICcnKSAvLyByZW1vdmUgV2luZG93cy1zdHlsZSBwcmVmaXhcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKSAvLyByZXBsYWNlIGFsbCBgXFxcXGAgaW5zdGFuY2VzIHdpdGggYC9gXG4gICAgICAgICAgOiBmcmFtZS5maWxlbmFtZTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHJvb3QgPyB1dGlscy5yZWxhdGl2ZShyb290LCBmaWxlbmFtZSkgOiB1dGlscy5iYXNlbmFtZShmaWxlbmFtZSk7XG4gICAgICAgIGZyYW1lLmZpbGVuYW1lID0gYCR7cHJlZml4fSR7YmFzZX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH0pO1xuXG4gIC8qKiBQcm9jZXNzIGFuIGV4Y2VwdGlvbiBldmVudC4gKi9cbiAgZnVuY3Rpb24gX3Byb2Nlc3NFeGNlcHRpb25zRXZlbnQoZXZlbnQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGV4Y2VwdGlvbjoge1xuICAgICAgICAgIC4uLmV2ZW50LmV4Y2VwdGlvbixcbiAgICAgICAgICAvLyBUaGUgY2hlY2sgZm9yIHRoaXMgaXMgcGVyZm9ybWVkIGluc2lkZSBgcHJvY2Vzc2AgY2FsbCBpdHNlbGYsIHNhZmUgdG8gc2tpcCBoZXJlXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICB2YWx1ZXM6IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgIC4uLih2YWx1ZS5zdGFja3RyYWNlICYmIHsgc3RhY2t0cmFjZTogX3Byb2Nlc3NTdGFja3RyYWNlKHZhbHVlLnN0YWNrdHJhY2UpIH0pLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgYSBzdGFjayB0cmFjZS4gKi9cbiAgZnVuY3Rpb24gX3Byb2Nlc3NTdGFja3RyYWNlKHN0YWNrdHJhY2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhY2t0cmFjZSxcbiAgICAgIGZyYW1lczogc3RhY2t0cmFjZSAmJiBzdGFja3RyYWNlLmZyYW1lcyAmJiBzdGFja3RyYWNlLmZyYW1lcy5tYXAoZiA9PiBpdGVyYXRlZShmKSksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByb2Nlc3NFdmVudChvcmlnaW5hbEV2ZW50KSB7XG4gICAgICBsZXQgcHJvY2Vzc2VkRXZlbnQgPSBvcmlnaW5hbEV2ZW50O1xuXG4gICAgICBpZiAob3JpZ2luYWxFdmVudC5leGNlcHRpb24gJiYgQXJyYXkuaXNBcnJheShvcmlnaW5hbEV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpKSB7XG4gICAgICAgIHByb2Nlc3NlZEV2ZW50ID0gX3Byb2Nlc3NFeGNlcHRpb25zRXZlbnQocHJvY2Vzc2VkRXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgcmV3cml0ZUZyYW1lc0ludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfcmV3cml0ZUZyYW1lc0ludGVncmF0aW9uKTtcblxuLyoqXG4gKiBSZXdyaXRlIGV2ZW50IGZyYW1lcyBwYXRocy5cbiAqIEBkZXByZWNhdGVkIFVzZSBgcmV3cml0ZUZyYW1lc0ludGVncmF0aW9uKClgIGluc3RlYWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuY29uc3QgUmV3cml0ZUZyYW1lcyA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKFxuICBJTlRFR1JBVElPTl9OQU1FLFxuICByZXdyaXRlRnJhbWVzSW50ZWdyYXRpb24sXG4pXG5cbjtcblxuZXhwb3J0cy5SZXdyaXRlRnJhbWVzID0gUmV3cml0ZUZyYW1lcztcbmV4cG9ydHMucmV3cml0ZUZyYW1lc0ludGVncmF0aW9uID0gcmV3cml0ZUZyYW1lc0ludGVncmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV3cml0ZWZyYW1lcy5qcy5tYXBcbiIsCiAgICAiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BzZW50cnkvY29yZScpO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ1Nlc3Npb25UaW1pbmcnO1xuXG5jb25zdCBfc2Vzc2lvblRpbWluZ0ludGVncmF0aW9uID0gKCgpID0+IHtcbiAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgIC4uLmV2ZW50LmV4dHJhLFxuICAgICAgICAgIFsnc2Vzc2lvbjpzdGFydCddOiBzdGFydFRpbWUsXG4gICAgICAgICAgWydzZXNzaW9uOmR1cmF0aW9uJ106IG5vdyAtIHN0YXJ0VGltZSxcbiAgICAgICAgICBbJ3Nlc3Npb246ZW5kJ106IG5vdyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3Qgc2Vzc2lvblRpbWluZ0ludGVncmF0aW9uID0gY29yZS5kZWZpbmVJbnRlZ3JhdGlvbihfc2Vzc2lvblRpbWluZ0ludGVncmF0aW9uKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFkZHMgZHVyYXRpb24gc2luY2UgU2VudHJ5IHdhcyBpbml0aWFsaXplZCB0aWxsIHRoZSB0aW1lIGV2ZW50IHdhcyBzZW50LlxuICogQGRlcHJlY2F0ZWQgVXNlIGBzZXNzaW9uVGltaW5nSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBTZXNzaW9uVGltaW5nID0gY29yZS5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoXG4gIElOVEVHUkFUSU9OX05BTUUsXG4gIHNlc3Npb25UaW1pbmdJbnRlZ3JhdGlvbixcbikgO1xuXG5leHBvcnRzLlNlc3Npb25UaW1pbmcgPSBTZXNzaW9uVGltaW5nO1xuZXhwb3J0cy5zZXNzaW9uVGltaW5nSW50ZWdyYXRpb24gPSBzZXNzaW9uVGltaW5nSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXNzaW9udGltaW5nLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnVHJhbnNhY3Rpb24nO1xuXG5jb25zdCB0cmFuc2FjdGlvbkludGVncmF0aW9uID0gKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE8gdjg6IFJlbW92ZSB0aGlzXG4gICAgc2V0dXBPbmNlKCkge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJvY2Vzc0V2ZW50KGV2ZW50KSB7XG4gICAgICBjb25zdCBmcmFtZXMgPSBfZ2V0RnJhbWVzRnJvbUV2ZW50KGV2ZW50KTtcblxuICAgICAgLy8gdXNlIGZvciBsb29wIHNvIHdlIGRvbid0IGhhdmUgdG8gcmV2ZXJzZSB3aG9sZSBmcmFtZXMgYXJyYXlcbiAgICAgIGZvciAobGV0IGkgPSBmcmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG5cbiAgICAgICAgaWYgKGZyYW1lLmluX2FwcCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gX2dldFRyYW5zYWN0aW9uKGZyYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBBZGQgbm9kZSB0cmFuc2FjdGlvbiB0byB0aGUgZXZlbnQuXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGludGVncmF0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBUcmFuc2FjdGlvbiA9IGNvcmUuY29udmVydEludGVncmF0aW9uRm5Ub0NsYXNzKElOVEVHUkFUSU9OX05BTUUsIHRyYW5zYWN0aW9uSW50ZWdyYXRpb24pXG5cbjtcblxuZnVuY3Rpb24gX2dldEZyYW1lc0Zyb21FdmVudChldmVudCkge1xuICBjb25zdCBleGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdO1xuICByZXR1cm4gKGV4Y2VwdGlvbiAmJiBleGNlcHRpb24uc3RhY2t0cmFjZSAmJiBleGNlcHRpb24uc3RhY2t0cmFjZS5mcmFtZXMpIHx8IFtdO1xufVxuXG5mdW5jdGlvbiBfZ2V0VHJhbnNhY3Rpb24oZnJhbWUpIHtcbiAgcmV0dXJuIGZyYW1lLm1vZHVsZSB8fCBmcmFtZS5mdW5jdGlvbiA/IGAke2ZyYW1lLm1vZHVsZSB8fCAnPyd9LyR7ZnJhbWUuZnVuY3Rpb24gfHwgJz8nfWAgOiAnPHVua25vd24+Jztcbn1cblxuZXhwb3J0cy5UcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhbnNhY3Rpb24uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgZGVidWdCdWlsZCA9IHJlcXVpcmUoJy4vZGVidWctYnVpbGQuanMnKTtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdIdHRwQ2xpZW50JztcblxuY29uc3QgX2h0dHBDbGllbnRJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IF9vcHRpb25zID0ge1xuICAgIGZhaWxlZFJlcXVlc3RTdGF0dXNDb2RlczogW1s1MDAsIDU5OV1dLFxuICAgIGZhaWxlZFJlcXVlc3RUYXJnZXRzOiBbLy4qL10sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgLy8gVE9ETyB2ODogUmVtb3ZlIHRoaXNcbiAgICBzZXR1cE9uY2UoKSB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIF93cmFwRmV0Y2goY2xpZW50LCBfb3B0aW9ucyk7XG4gICAgICBfd3JhcFhIUihjbGllbnQsIF9vcHRpb25zKTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBodHRwQ2xpZW50SW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9odHRwQ2xpZW50SW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIENyZWF0ZSBldmVudHMgZm9yIGZhaWxlZCBjbGllbnQgc2lkZSBIVFRQIHJlcXVlc3RzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBodHRwQ2xpZW50SW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBIdHRwQ2xpZW50ID0gY29yZS5jb252ZXJ0SW50ZWdyYXRpb25GblRvQ2xhc3MoSU5URUdSQVRJT05fTkFNRSwgaHR0cENsaWVudEludGVncmF0aW9uKVxuXG47XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgZnVuY3Rpb24gZm9yIGZldGNoIHJlcXVlc3RzXG4gKlxuICogQHBhcmFtIHJlcXVlc3RJbmZvIFRoZSBGZXRjaCBBUEkgcmVxdWVzdCBpbmZvXG4gKiBAcGFyYW0gcmVzcG9uc2UgVGhlIEZldGNoIEFQSSByZXNwb25zZVxuICogQHBhcmFtIHJlcXVlc3RJbml0IFRoZSByZXF1ZXN0IGluaXQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9mZXRjaFJlc3BvbnNlSGFuZGxlcihcbiAgb3B0aW9ucyxcbiAgcmVxdWVzdEluZm8sXG4gIHJlc3BvbnNlLFxuICByZXF1ZXN0SW5pdCxcbikge1xuICBpZiAoX3Nob3VsZENhcHR1cmVSZXNwb25zZShvcHRpb25zLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnVybCkpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gX2dldFJlcXVlc3QocmVxdWVzdEluZm8sIHJlcXVlc3RJbml0KTtcblxuICAgIGxldCByZXF1ZXN0SGVhZGVycywgcmVzcG9uc2VIZWFkZXJzLCByZXF1ZXN0Q29va2llcywgcmVzcG9uc2VDb29raWVzO1xuXG4gICAgaWYgKF9zaG91bGRTZW5kRGVmYXVsdFBpaSgpKSB7XG4gICAgICBbeyBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycywgY29va2llczogcmVxdWVzdENvb2tpZXMgfSwgeyBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsIGNvb2tpZXM6IHJlc3BvbnNlQ29va2llcyB9XSA9IFtcbiAgICAgICAgeyBjb29raWVIZWFkZXI6ICdDb29raWUnLCBvYmo6IHJlcXVlc3QgfSxcbiAgICAgICAgeyBjb29raWVIZWFkZXI6ICdTZXQtQ29va2llJywgb2JqOiByZXNwb25zZSB9LFxuICAgICAgXS5tYXAoKHsgY29va2llSGVhZGVyLCBvYmogfSkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gX2V4dHJhY3RGZXRjaEhlYWRlcnMob2JqLmhlYWRlcnMpO1xuICAgICAgICBsZXQgY29va2llcztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvb2tpZVN0cmluZyA9IGhlYWRlcnNbY29va2llSGVhZGVyXSB8fCBoZWFkZXJzW2Nvb2tpZUhlYWRlci50b0xvd2VyQ2FzZSgpXSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoY29va2llU3RyaW5nKSB7XG4gICAgICAgICAgICBjb29raWVzID0gX3BhcnNlQ29va2llU3RyaW5nKGNvb2tpZVN0cmluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKGBDb3VsZCBub3QgZXh0cmFjdCBjb29raWVzIGZyb20gaGVhZGVyICR7Y29va2llSGVhZGVyfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGNvb2tpZXMsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IF9jcmVhdGVFdmVudCh7XG4gICAgICB1cmw6IHJlcXVlc3QudXJsLFxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVxdWVzdEhlYWRlcnMsXG4gICAgICByZXNwb25zZUhlYWRlcnMsXG4gICAgICByZXF1ZXN0Q29va2llcyxcbiAgICAgIHJlc3BvbnNlQ29va2llcyxcbiAgICB9KTtcblxuICAgIGNvcmUuY2FwdHVyZUV2ZW50KGV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyY2VwdG9yIGZ1bmN0aW9uIGZvciBYSFIgcmVxdWVzdHNcbiAqXG4gKiBAcGFyYW0geGhyIFRoZSBYSFIgcmVxdWVzdFxuICogQHBhcmFtIG1ldGhvZCBUaGUgSFRUUCBtZXRob2RcbiAqIEBwYXJhbSBoZWFkZXJzIFRoZSBIVFRQIGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gX3hoclJlc3BvbnNlSGFuZGxlcihcbiAgb3B0aW9ucyxcbiAgeGhyLFxuICBtZXRob2QsXG4gIGhlYWRlcnMsXG4pIHtcbiAgaWYgKF9zaG91bGRDYXB0dXJlUmVzcG9uc2Uob3B0aW9ucywgeGhyLnN0YXR1cywgeGhyLnJlc3BvbnNlVVJMKSkge1xuICAgIGxldCByZXF1ZXN0SGVhZGVycywgcmVzcG9uc2VDb29raWVzLCByZXNwb25zZUhlYWRlcnM7XG5cbiAgICBpZiAoX3Nob3VsZFNlbmREZWZhdWx0UGlpKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvb2tpZVN0cmluZyA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignU2V0LUNvb2tpZScpIHx8IHhoci5nZXRSZXNwb25zZUhlYWRlcignc2V0LWNvb2tpZScpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoY29va2llU3RyaW5nKSB7XG4gICAgICAgICAgcmVzcG9uc2VDb29raWVzID0gX3BhcnNlQ29va2llU3RyaW5nKGNvb2tpZVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVidWdCdWlsZC5ERUJVR19CVUlMRCAmJiB1dGlscy5sb2dnZXIubG9nKCdDb3VsZCBub3QgZXh0cmFjdCBjb29raWVzIGZyb20gcmVzcG9uc2UgaGVhZGVycycpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZUhlYWRlcnMgPSBfZ2V0WEhSUmVzcG9uc2VIZWFkZXJzKHhocik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLmxvZygnQ291bGQgbm90IGV4dHJhY3QgaGVhZGVycyBmcm9tIHJlc3BvbnNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RIZWFkZXJzID0gaGVhZGVycztcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IF9jcmVhdGVFdmVudCh7XG4gICAgICB1cmw6IHhoci5yZXNwb25zZVVSTCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgIHJlcXVlc3RIZWFkZXJzLFxuICAgICAgLy8gQ2FuJ3QgYWNjZXNzIHJlcXVlc3QgY29va2llcyBmcm9tIFhIUlxuICAgICAgcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgcmVzcG9uc2VDb29raWVzLFxuICAgIH0pO1xuXG4gICAgY29yZS5jYXB0dXJlRXZlbnQoZXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdHMgcmVzcG9uc2Ugc2l6ZSBmcm9tIGBDb250ZW50LUxlbmd0aGAgaGVhZGVyIHdoZW4gcG9zc2libGVcbiAqXG4gKiBAcGFyYW0gaGVhZGVyc1xuICogQHJldHVybnMgVGhlIHJlc3BvbnNlIHNpemUgaW4gYnl0ZXMgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZXNwb25zZVNpemVGcm9tSGVhZGVycyhoZWFkZXJzKSB7XG4gIGlmIChoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gfHwgaGVhZGVyc1snY29udGVudC1sZW5ndGgnXTtcblxuICAgIGlmIChjb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyBjb29raWVzIGZyb20gdGhlIGdpdmVuIGNvb2tpZSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gY29va2llU3RyaW5nIFRoZSBjb29raWUgc3RyaW5nIHRvIHBhcnNlXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGNvb2tpZXNcbiAqL1xuZnVuY3Rpb24gX3BhcnNlQ29va2llU3RyaW5nKGNvb2tpZVN0cmluZykge1xuICByZXR1cm4gY29va2llU3RyaW5nLnNwbGl0KCc7ICcpLnJlZHVjZSgoYWNjLCBjb29raWUpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjb29raWUuc3BsaXQoJz0nKTtcbiAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgaGVhZGVycyBhcyBhbiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gRmV0Y2ggQVBJIHJlcXVlc3Qgb3IgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gZXh0cmFjdFxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBoZWFkZXJzIGFzIGFuIG9iamVjdFxuICovXG5mdW5jdGlvbiBfZXh0cmFjdEZldGNoSGVhZGVycyhoZWFkZXJzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIGhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMgYXMgYW4gb2JqZWN0IGZyb20gdGhlIGdpdmVuIFhIUiBvYmplY3RcbiAqXG4gKiBAcGFyYW0geGhyIFRoZSBYSFIgb2JqZWN0IHRvIGV4dHJhY3QgdGhlIHJlc3BvbnNlIGhlYWRlcnMgZnJvbVxuICogQHJldHVybnMgVGhlIHJlc3BvbnNlIGhlYWRlcnMgYXMgYW4gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9nZXRYSFJSZXNwb25zZUhlYWRlcnMoeGhyKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnMuc3BsaXQoJ1xcclxcbicpLnJlZHVjZSgoYWNjLCBsaW5lKSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gbGluZS5zcGxpdCgnOiAnKTtcbiAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIHRhcmdldCB1cmwgaXMgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdGFyZ2V0c1xuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB1cmwgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRhcmdldCB1cmwgaXMgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdGFyZ2V0cywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIF9pc0luR2l2ZW5SZXF1ZXN0VGFyZ2V0cyhcbiAgZmFpbGVkUmVxdWVzdFRhcmdldHMsXG4gIHRhcmdldCxcbikge1xuICByZXR1cm4gZmFpbGVkUmVxdWVzdFRhcmdldHMuc29tZSgoZ2l2ZW5SZXF1ZXN0VGFyZ2V0KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBnaXZlblJlcXVlc3RUYXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LmluY2x1ZGVzKGdpdmVuUmVxdWVzdFRhcmdldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdpdmVuUmVxdWVzdFRhcmdldC50ZXN0KHRhcmdldCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3RhdHVzIGNvZGUgaXMgaW4gdGhlIGdpdmVuIHJhbmdlXG4gKlxuICogQHBhcmFtIHN0YXR1cyBUaGUgc3RhdHVzIGNvZGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGluIHRoZSBnaXZlbiByYW5nZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIF9pc0luR2l2ZW5TdGF0dXNSYW5nZXMoXG4gIGZhaWxlZFJlcXVlc3RTdGF0dXNDb2RlcyxcbiAgc3RhdHVzLFxuKSB7XG4gIHJldHVybiBmYWlsZWRSZXF1ZXN0U3RhdHVzQ29kZXMuc29tZSgocmFuZ2UpID0+IHtcbiAgICBpZiAodHlwZW9mIHJhbmdlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHJhbmdlID09PSBzdGF0dXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXR1cyA+PSByYW5nZVswXSAmJiBzdGF0dXMgPD0gcmFuZ2VbMV07XG4gIH0pO1xufVxuXG4vKipcbiAqIFdyYXBzIGBmZXRjaGAgZnVuY3Rpb24gdG8gY2FwdHVyZSByZXF1ZXN0IGFuZCByZXNwb25zZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIF93cmFwRmV0Y2goY2xpZW50LCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuc3VwcG9ydHNOYXRpdmVGZXRjaCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdXRpbHMuYWRkRmV0Y2hJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXJEYXRhID0+IHtcbiAgICBpZiAoY29yZS5nZXRDbGllbnQoKSAhPT0gY2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyByZXNwb25zZSwgYXJncyB9ID0gaGFuZGxlckRhdGE7XG4gICAgY29uc3QgW3JlcXVlc3RJbmZvLCByZXF1ZXN0SW5pdF0gPSBhcmdzIDtcblxuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfZmV0Y2hSZXNwb25zZUhhbmRsZXIob3B0aW9ucywgcmVxdWVzdEluZm8sIHJlc3BvbnNlICwgcmVxdWVzdEluaXQpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcyBYTUxIdHRwUmVxdWVzdCB0byBjYXB0dXJlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGRhdGFcbiAqL1xuZnVuY3Rpb24gX3dyYXBYSFIoY2xpZW50LCBvcHRpb25zKSB7XG4gIGlmICghKCdYTUxIdHRwUmVxdWVzdCcgaW4gdXRpbHMuR0xPQkFMX09CSikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB1dGlscy5hZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXJEYXRhID0+IHtcbiAgICBpZiAoY29yZS5nZXRDbGllbnQoKSAhPT0gY2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeGhyID0gaGFuZGxlckRhdGEueGhyIDtcblxuICAgIGNvbnN0IHNlbnRyeVhockRhdGEgPSB4aHJbdXRpbHMuU0VOVFJZX1hIUl9EQVRBX0tFWV07XG5cbiAgICBpZiAoIXNlbnRyeVhockRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IG1ldGhvZCwgcmVxdWVzdF9oZWFkZXJzOiBoZWFkZXJzIH0gPSBzZW50cnlYaHJEYXRhO1xuXG4gICAgdHJ5IHtcbiAgICAgIF94aHJSZXNwb25zZUhhbmRsZXIob3B0aW9ucywgeGhyLCBtZXRob2QsIGhlYWRlcnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnQnVpbGQuREVCVUdfQlVJTEQgJiYgdXRpbHMubG9nZ2VyLndhcm4oJ0Vycm9yIHdoaWxlIGV4dHJhY3RpbmcgcmVzcG9uc2UgZXZlbnQgZm9ybSBYSFIgcmVzcG9uc2UnLCBlKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRvIGNhcHR1cmUgZ2l2ZW4gcmVzcG9uc2UgYXMgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0gc3RhdHVzIHJlc3BvbnNlIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0gdXJsIHJlc3BvbnNlIHVybFxuICovXG5mdW5jdGlvbiBfc2hvdWxkQ2FwdHVyZVJlc3BvbnNlKG9wdGlvbnMsIHN0YXR1cywgdXJsKSB7XG4gIHJldHVybiAoXG4gICAgX2lzSW5HaXZlblN0YXR1c1JhbmdlcyhvcHRpb25zLmZhaWxlZFJlcXVlc3RTdGF0dXNDb2Rlcywgc3RhdHVzKSAmJlxuICAgIF9pc0luR2l2ZW5SZXF1ZXN0VGFyZ2V0cyhvcHRpb25zLmZhaWxlZFJlcXVlc3RUYXJnZXRzLCB1cmwpICYmXG4gICAgIWNvcmUuaXNTZW50cnlSZXF1ZXN0VXJsKHVybCwgY29yZS5nZXRDbGllbnQoKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3ludGhldGljIFNlbnRyeSBldmVudCBmcm9tIGdpdmVuIHJlc3BvbnNlIGRhdGFcbiAqXG4gKiBAcGFyYW0gZGF0YSByZXNwb25zZSBkYXRhXG4gKiBAcmV0dXJucyBldmVudFxuICovXG5mdW5jdGlvbiBfY3JlYXRlRXZlbnQoZGF0YVxuXG4pIHtcbiAgY29uc3QgbWVzc2FnZSA9IGBIVFRQIENsaWVudCBFcnJvciB3aXRoIHN0YXR1cyBjb2RlOiAke2RhdGEuc3RhdHVzfWA7XG5cbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgbWVzc2FnZSxcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ0Vycm9yJyxcbiAgICAgICAgICB2YWx1ZTogbWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICByZXF1ZXN0OiB7XG4gICAgICB1cmw6IGRhdGEudXJsLFxuICAgICAgbWV0aG9kOiBkYXRhLm1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGRhdGEucmVxdWVzdEhlYWRlcnMsXG4gICAgICBjb29raWVzOiBkYXRhLnJlcXVlc3RDb29raWVzLFxuICAgIH0sXG4gICAgY29udGV4dHM6IHtcbiAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgIHN0YXR1c19jb2RlOiBkYXRhLnN0YXR1cyxcbiAgICAgICAgaGVhZGVyczogZGF0YS5yZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvb2tpZXM6IGRhdGEucmVzcG9uc2VDb29raWVzLFxuICAgICAgICBib2R5X3NpemU6IF9nZXRSZXNwb25zZVNpemVGcm9tSGVhZGVycyhkYXRhLnJlc3BvbnNlSGVhZGVycyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdXRpbHMuYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50LCB7XG4gICAgdHlwZTogJ2h0dHAuY2xpZW50JyxcbiAgICBoYW5kbGVkOiBmYWxzZSxcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5mdW5jdGlvbiBfZ2V0UmVxdWVzdChyZXF1ZXN0SW5mbywgcmVxdWVzdEluaXQpIHtcbiAgaWYgKCFyZXF1ZXN0SW5pdCAmJiByZXF1ZXN0SW5mbyBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gcmVxdWVzdEluZm87XG4gIH1cblxuICAvLyBJZiBib3RoIGFyZSBzZXQsIHdlIHRyeSB0byBjb25zdHJ1Y3QgYSBuZXcgUmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcbiAgLy8gSG93ZXZlciwgaWYgZS5nLiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBoYXMgYSBgYm9keWAsIHRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5IGFjY2Vzc2VkXG4gIC8vIEluIHRoaXMgY2FzZSwgYXMgYSBmYWxsYmFjaywgd2UganVzdCB1c2UgdGhlIG9yaWdpbmFsIHJlcXVlc3QgLSB1c2luZyBib3RoIGlzIHJhdGhlciBhbiBlZGdlIGNhc2VcbiAgaWYgKHJlcXVlc3RJbmZvIGluc3RhbmNlb2YgUmVxdWVzdCAmJiByZXF1ZXN0SW5mby5ib2R5VXNlZCkge1xuICAgIHJldHVybiByZXF1ZXN0SW5mbztcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVxdWVzdChyZXF1ZXN0SW5mbywgcmVxdWVzdEluaXQpO1xufVxuXG5mdW5jdGlvbiBfc2hvdWxkU2VuZERlZmF1bHRQaWkoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGNvcmUuZ2V0Q2xpZW50KCk7XG4gIHJldHVybiBjbGllbnQgPyBCb29sZWFuKGNsaWVudC5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWkpIDogZmFsc2U7XG59XG5cbmV4cG9ydHMuSHR0cENsaWVudCA9IEh0dHBDbGllbnQ7XG5leHBvcnRzLmh0dHBDbGllbnRJbnRlZ3JhdGlvbiA9IGh0dHBDbGllbnRJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBjbGllbnQuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5jb25zdCBXSU5ET1cgPSB1dGlscy5HTE9CQUxfT0JKIDtcblxuY29uc3QgREVGQVVMVF9MSU5FU19PRl9DT05URVhUID0gNztcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdDb250ZXh0TGluZXMnO1xuXG5jb25zdCBfY29udGV4dExpbmVzSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBjb250ZXh0TGluZXMgPSBvcHRpb25zLmZyYW1lQ29udGV4dExpbmVzICE9IG51bGwgPyBvcHRpb25zLmZyYW1lQ29udGV4dExpbmVzIDogREVGQVVMVF9MSU5FU19PRl9DT05URVhUO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICAvLyBUT0RPIHY4OiBSZW1vdmUgdGhpc1xuICAgIHNldHVwT25jZSgpIHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByb2Nlc3NFdmVudChldmVudCkge1xuICAgICAgcmV0dXJuIGFkZFNvdXJjZUNvbnRleHQoZXZlbnQsIGNvbnRleHRMaW5lcyk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgY29udGV4dExpbmVzSW50ZWdyYXRpb24gPSBjb3JlLmRlZmluZUludGVncmF0aW9uKF9jb250ZXh0TGluZXNJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogQ29sbGVjdHMgc291cmNlIGNvbnRleHQgbGluZXMgYXJvdW5kIHRoZSBsaW5lcyBvZiBzdGFja2ZyYW1lcyBwb2ludGluZyB0byBKUyBlbWJlZGRlZCBpblxuICogdGhlIGN1cnJlbnQgcGFnZSdzIEhUTUwuXG4gKlxuICogVGhpcyBpbnRlZ3JhdGlvbiBET0VTIE5PVCB3b3JrIGZvciBzdGFjayBmcmFtZXMgcG9pbnRpbmcgdG8gSlMgZmlsZXMgdGhhdCBhcmUgbG9hZGVkIGJ5IHRoZSBicm93c2VyLlxuICogRm9yIGZyYW1lcyBwb2ludGluZyB0byBmaWxlcywgY29udGV4dCBsaW5lcyBhcmUgYWRkZWQgZHVyaW5nIGluZ2VzdGlvbiBhbmQgc3ltYm9saWNhdGlvblxuICogYnkgYXR0ZW1wdGluZyB0byBkb3dubG9hZCB0aGUgSlMgZmlsZXMgdG8gdGhlIFNlbnRyeSBiYWNrZW5kLlxuICpcbiAqIFVzZSB0aGlzIGludGVncmF0aW9uIGlmIHlvdSBoYXZlIGlubGluZSBKUyBjb2RlIGluIEhUTUwgcGFnZXMgdGhhdCBjYW4ndCBiZSBhY2Nlc3NlZFxuICogYnkgb3VyIGJhY2tlbmQgKGUuZy4gZHVlIHRvIGEgbG9naW4tcHJvdGVjdGVkIHBhZ2UpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udGV4dExpbmVzSW50ZWdyYXRpb24oKWAgaW5zdGVhZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5jb25zdCBDb250ZXh0TGluZXMgPSBjb3JlLmNvbnZlcnRJbnRlZ3JhdGlvbkZuVG9DbGFzcyhJTlRFR1JBVElPTl9OQU1FLCBjb250ZXh0TGluZXNJbnRlZ3JhdGlvbilcblxuO1xuXG4vKipcbiAqIFByb2Nlc3NlcyBhbiBldmVudCBhbmQgYWRkcyBjb250ZXh0IGxpbmVzLlxuICovXG5mdW5jdGlvbiBhZGRTb3VyY2VDb250ZXh0KGV2ZW50LCBjb250ZXh0TGluZXMpIHtcbiAgY29uc3QgZG9jID0gV0lORE9XLmRvY3VtZW50O1xuICBjb25zdCBodG1sRmlsZW5hbWUgPSBXSU5ET1cubG9jYXRpb24gJiYgdXRpbHMuc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50KFdJTkRPVy5sb2NhdGlvbi5ocmVmKTtcbiAgaWYgKCFkb2MgfHwgIWh0bWxGaWxlbmFtZSkge1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIGNvbnN0IGV4Y2VwdGlvbnMgPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcztcbiAgaWYgKCFleGNlcHRpb25zIHx8ICFleGNlcHRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIGNvbnN0IGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDtcbiAgaWYgKCFodG1sKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgY29uc3QgaHRtbExpbmVzID0gWyc8IURPQ1RZUEUgaHRtbD4nLCAnPGh0bWw+JywgLi4uaHRtbC5zcGxpdCgnXFxuJyksICc8L2h0bWw+J107XG5cbiAgZXhjZXB0aW9ucy5mb3JFYWNoKGV4Y2VwdGlvbiA9PiB7XG4gICAgY29uc3Qgc3RhY2t0cmFjZSA9IGV4Y2VwdGlvbi5zdGFja3RyYWNlO1xuICAgIGlmIChzdGFja3RyYWNlICYmIHN0YWNrdHJhY2UuZnJhbWVzKSB7XG4gICAgICBzdGFja3RyYWNlLmZyYW1lcyA9IHN0YWNrdHJhY2UuZnJhbWVzLm1hcChmcmFtZSA9PlxuICAgICAgICBhcHBseVNvdXJjZUNvbnRleHRUb0ZyYW1lKGZyYW1lLCBodG1sTGluZXMsIGh0bWxGaWxlbmFtZSwgY29udGV4dExpbmVzKSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogT25seSBleHBvcnRlZCBmb3IgdGVzdGluZ1xuICovXG5mdW5jdGlvbiBhcHBseVNvdXJjZUNvbnRleHRUb0ZyYW1lKFxuICBmcmFtZSxcbiAgaHRtbExpbmVzLFxuICBodG1sRmlsZW5hbWUsXG4gIGxpbmVzT2ZDb250ZXh0LFxuKSB7XG4gIGlmIChmcmFtZS5maWxlbmFtZSAhPT0gaHRtbEZpbGVuYW1lIHx8ICFmcmFtZS5saW5lbm8gfHwgIWh0bWxMaW5lcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICB1dGlscy5hZGRDb250ZXh0VG9GcmFtZShodG1sTGluZXMsIGZyYW1lLCBsaW5lc09mQ29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnRzLkNvbnRleHRMaW5lcyA9IENvbnRleHRMaW5lcztcbmV4cG9ydHMuYXBwbHlTb3VyY2VDb250ZXh0VG9GcmFtZSA9IGFwcGx5U291cmNlQ29udGV4dFRvRnJhbWU7XG5leHBvcnRzLmNvbnRleHRMaW5lc0ludGVncmF0aW9uID0gY29udGV4dExpbmVzSW50ZWdyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250ZXh0bGluZXMuanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNhcHR1cmVjb25zb2xlID0gcmVxdWlyZSgnLi9jYXB0dXJlY29uc29sZS5qcycpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnLmpzJyk7XG5jb25zdCBkZWR1cGUgPSByZXF1aXJlKCcuL2RlZHVwZS5qcycpO1xuY29uc3QgZXh0cmFlcnJvcmRhdGEgPSByZXF1aXJlKCcuL2V4dHJhZXJyb3JkYXRhLmpzJyk7XG5jb25zdCBvZmZsaW5lID0gcmVxdWlyZSgnLi9vZmZsaW5lLmpzJyk7XG5jb25zdCByZXBvcnRpbmdvYnNlcnZlciA9IHJlcXVpcmUoJy4vcmVwb3J0aW5nb2JzZXJ2ZXIuanMnKTtcbmNvbnN0IHJld3JpdGVmcmFtZXMgPSByZXF1aXJlKCcuL3Jld3JpdGVmcmFtZXMuanMnKTtcbmNvbnN0IHNlc3Npb250aW1pbmcgPSByZXF1aXJlKCcuL3Nlc3Npb250aW1pbmcuanMnKTtcbmNvbnN0IHRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi90cmFuc2FjdGlvbi5qcycpO1xuY29uc3QgaHR0cGNsaWVudCA9IHJlcXVpcmUoJy4vaHR0cGNsaWVudC5qcycpO1xuY29uc3QgY29udGV4dGxpbmVzID0gcmVxdWlyZSgnLi9jb250ZXh0bGluZXMuanMnKTtcblxuXG5cbmV4cG9ydHMuQ2FwdHVyZUNvbnNvbGUgPSBjYXB0dXJlY29uc29sZS5DYXB0dXJlQ29uc29sZTtcbmV4cG9ydHMuY2FwdHVyZUNvbnNvbGVJbnRlZ3JhdGlvbiA9IGNhcHR1cmVjb25zb2xlLmNhcHR1cmVDb25zb2xlSW50ZWdyYXRpb247XG5leHBvcnRzLkRlYnVnID0gZGVidWcuRGVidWc7XG5leHBvcnRzLmRlYnVnSW50ZWdyYXRpb24gPSBkZWJ1Zy5kZWJ1Z0ludGVncmF0aW9uO1xuZXhwb3J0cy5EZWR1cGUgPSBkZWR1cGUuRGVkdXBlO1xuZXhwb3J0cy5kZWR1cGVJbnRlZ3JhdGlvbiA9IGRlZHVwZS5kZWR1cGVJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuRXh0cmFFcnJvckRhdGEgPSBleHRyYWVycm9yZGF0YS5FeHRyYUVycm9yRGF0YTtcbmV4cG9ydHMuZXh0cmFFcnJvckRhdGFJbnRlZ3JhdGlvbiA9IGV4dHJhZXJyb3JkYXRhLmV4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb247XG5leHBvcnRzLk9mZmxpbmUgPSBvZmZsaW5lLk9mZmxpbmU7XG5leHBvcnRzLlJlcG9ydGluZ09ic2VydmVyID0gcmVwb3J0aW5nb2JzZXJ2ZXIuUmVwb3J0aW5nT2JzZXJ2ZXI7XG5leHBvcnRzLnJlcG9ydGluZ09ic2VydmVySW50ZWdyYXRpb24gPSByZXBvcnRpbmdvYnNlcnZlci5yZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uO1xuZXhwb3J0cy5SZXdyaXRlRnJhbWVzID0gcmV3cml0ZWZyYW1lcy5SZXdyaXRlRnJhbWVzO1xuZXhwb3J0cy5yZXdyaXRlRnJhbWVzSW50ZWdyYXRpb24gPSByZXdyaXRlZnJhbWVzLnJld3JpdGVGcmFtZXNJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuU2Vzc2lvblRpbWluZyA9IHNlc3Npb250aW1pbmcuU2Vzc2lvblRpbWluZztcbmV4cG9ydHMuc2Vzc2lvblRpbWluZ0ludGVncmF0aW9uID0gc2Vzc2lvbnRpbWluZy5zZXNzaW9uVGltaW5nSW50ZWdyYXRpb247XG5leHBvcnRzLlRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24uVHJhbnNhY3Rpb247XG5leHBvcnRzLkh0dHBDbGllbnQgPSBodHRwY2xpZW50Lkh0dHBDbGllbnQ7XG5leHBvcnRzLmh0dHBDbGllbnRJbnRlZ3JhdGlvbiA9IGh0dHBjbGllbnQuaHR0cENsaWVudEludGVncmF0aW9uO1xuZXhwb3J0cy5Db250ZXh0TGluZXMgPSBjb250ZXh0bGluZXMuQ29udGV4dExpbmVzO1xuZXhwb3J0cy5jb250ZXh0TGluZXNJbnRlZ3JhdGlvbiA9IGNvbnRleHRsaW5lcy5jb250ZXh0TGluZXNJbnRlZ3JhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCByZXBsYWNlbWVudHMgPSBbXG4gIFsnamFudWFyeScsICcxJ10sXG4gIFsnZmVicnVhcnknLCAnMiddLFxuICBbJ21hcmNoJywgJzMnXSxcbiAgWydhcHJpbCcsICc0J10sXG4gIFsnbWF5JywgJzUnXSxcbiAgWydqdW5lJywgJzYnXSxcbiAgWydqdWx5JywgJzcnXSxcbiAgWydhdWd1c3QnLCAnOCddLFxuICBbJ3NlcHRlbWJlcicsICc5J10sXG4gIFsnb2N0b2JlcicsICcxMCddLFxuICBbJ25vdmVtYmVyJywgJzExJ10sXG4gIFsnZGVjZW1iZXInLCAnMTInXSxcbiAgWydqYW4nLCAnMSddLFxuICBbJ2ZlYicsICcyJ10sXG4gIFsnbWFyJywgJzMnXSxcbiAgWydhcHInLCAnNCddLFxuICBbJ21heScsICc1J10sXG4gIFsnanVuJywgJzYnXSxcbiAgWydqdWwnLCAnNyddLFxuICBbJ2F1ZycsICc4J10sXG4gIFsnc2VwJywgJzknXSxcbiAgWydvY3QnLCAnMTAnXSxcbiAgWydub3YnLCAnMTEnXSxcbiAgWydkZWMnLCAnMTInXSxcbiAgWydzdW5kYXknLCAnMCddLFxuICBbJ21vbmRheScsICcxJ10sXG4gIFsndHVlc2RheScsICcyJ10sXG4gIFsnd2VkbmVzZGF5JywgJzMnXSxcbiAgWyd0aHVyc2RheScsICc0J10sXG4gIFsnZnJpZGF5JywgJzUnXSxcbiAgWydzYXR1cmRheScsICc2J10sXG4gIFsnc3VuJywgJzAnXSxcbiAgWydtb24nLCAnMSddLFxuICBbJ3R1ZScsICcyJ10sXG4gIFsnd2VkJywgJzMnXSxcbiAgWyd0aHUnLCAnNCddLFxuICBbJ2ZyaScsICc1J10sXG4gIFsnc2F0JywgJzYnXSxcbl07XG5cbi8qKlxuICogUmVwbGFjZXMgbmFtZXMgaW4gY3JvbiBleHByZXNzaW9uc1xuICovXG5mdW5jdGlvbiByZXBsYWNlQ3Jvbk5hbWVzKGNyb25FeHByZXNzaW9uKSB7XG4gIHJldHVybiByZXBsYWNlbWVudHMucmVkdWNlKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3JcbiAgICAoYWNjLCBbbmFtZSwgcmVwbGFjZW1lbnRdKSA9PiBhY2MucmVwbGFjZShuZXcgUmVnRXhwKG5hbWUsICdnaScpLCByZXBsYWNlbWVudCksXG4gICAgY3JvbkV4cHJlc3Npb24sXG4gICk7XG59XG5cbmV4cG9ydHMucmVwbGFjZUNyb25OYW1lcyA9IHJlcGxhY2VDcm9uTmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tb24uanMubWFwXG4iLAogICAgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAc2VudHJ5L2NvcmUnKTtcbmNvbnN0IGNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uLmpzJyk7XG5cbmNvbnN0IEVSUk9SX1RFWFQgPSAnQXV0b21hdGljIGluc3RydW1lbnRhdGlvbiBvZiBDcm9uSm9iIG9ubHkgc3VwcG9ydHMgY3JvbnRhYiBzdHJpbmcnO1xuXG4vKipcbiAqIEluc3RydW1lbnRzIHRoZSBgY3JvbmAgbGlicmFyeSB0byBzZW5kIGEgY2hlY2staW4gZXZlbnQgdG8gU2VudHJ5IGZvciBlYWNoIGpvYiBleGVjdXRpb24uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L25vZGUnO1xuICogaW1wb3J0IHsgQ3JvbkpvYiB9IGZyb20gJ2Nyb24nO1xuICpcbiAqIGNvbnN0IENyb25Kb2JXaXRoQ2hlY2tJbiA9IFNlbnRyeS5jcm9uLmluc3RydW1lbnRDcm9uKENyb25Kb2IsICdteS1jcm9uLWpvYicpO1xuICpcbiAqIC8vIHVzZSB0aGUgY29uc3RydWN0b3JcbiAqIGNvbnN0IGpvYiA9IG5ldyBDcm9uSm9iV2l0aENoZWNrSW4oJyogKiAqICogKicsICgpID0+IHtcbiAqICBjb25zb2xlLmxvZygnWW91IHdpbGwgc2VlIHRoaXMgbWVzc2FnZSBldmVyeSBtaW51dGUnKTtcbiAqIH0pO1xuICpcbiAqIC8vIG9yIGZyb21cbiAqIGNvbnN0IGpvYiA9IENyb25Kb2JXaXRoQ2hlY2tJbi5mcm9tKHsgY3JvblRpbWU6ICcqICogKiAqIConLCBvblRpY2s6ICgpID0+IHtcbiAqICAgY29uc29sZS5sb2coJ1lvdSB3aWxsIHNlZSB0aGlzIG1lc3NhZ2UgZXZlcnkgbWludXRlJyk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50Q3JvbihsaWIsIG1vbml0b3JTbHVnKSB7XG4gIGxldCBqb2JTY2hlZHVsZWQgPSBmYWxzZTtcblxuICByZXR1cm4gbmV3IFByb3h5KGxpYiwge1xuICAgIGNvbnN0cnVjdCh0YXJnZXQsIGFyZ3MpIHtcbiAgICAgIGNvbnN0IFtjcm9uVGltZSwgb25UaWNrLCBvbkNvbXBsZXRlLCBzdGFydCwgdGltZVpvbmUsIC4uLnJlc3RdID0gYXJncztcblxuICAgICAgaWYgKHR5cGVvZiBjcm9uVGltZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX1RFWFQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoam9iU2NoZWR1bGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQSBqb2IgbmFtZWQgJyR7bW9uaXRvclNsdWd9JyBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZGApO1xuICAgICAgfVxuXG4gICAgICBqb2JTY2hlZHVsZWQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBjcm9uU3RyaW5nID0gY29tbW9uLnJlcGxhY2VDcm9uTmFtZXMoY3JvblRpbWUpO1xuXG4gICAgICBmdW5jdGlvbiBtb25pdG9yZWRUaWNrKGNvbnRleHQsIG9uQ29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIGNvcmUud2l0aE1vbml0b3IoXG4gICAgICAgICAgbW9uaXRvclNsdWcsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9uVGljayhjb250ZXh0LCBvbkNvbXBsZXRlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjaGVkdWxlOiB7IHR5cGU6ICdjcm9udGFiJywgdmFsdWU6IGNyb25TdHJpbmcgfSxcbiAgICAgICAgICAgIHRpbWV6b25lOiB0aW1lWm9uZSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyB0YXJnZXQoY3JvblRpbWUsIG1vbml0b3JlZFRpY2ssIG9uQ29tcGxldGUsIHN0YXJ0LCB0aW1lWm9uZSwgLi4ucmVzdCk7XG4gICAgfSxcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAocHJvcCA9PT0gJ2Zyb20nKSB7XG4gICAgICAgIHJldHVybiAocGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNyb25UaW1lLCBvblRpY2ssIHRpbWVab25lIH0gPSBwYXJhbTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgY3JvblRpbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfVEVYVCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGpvYlNjaGVkdWxlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGpvYiBuYW1lZCAnJHttb25pdG9yU2x1Z30nIGhhcyBhbHJlYWR5IGJlZW4gc2NoZWR1bGVkYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgam9iU2NoZWR1bGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGNvbnN0IGNyb25TdHJpbmcgPSBjb21tb24ucmVwbGFjZUNyb25OYW1lcyhjcm9uVGltZSk7XG5cbiAgICAgICAgICBwYXJhbS5vblRpY2sgPSAoY29udGV4dCwgb25Db21wbGV0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUud2l0aE1vbml0b3IoXG4gICAgICAgICAgICAgIG1vbml0b3JTbHVnLFxuICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9uVGljayhjb250ZXh0LCBvbkNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlOiB7IHR5cGU6ICdjcm9udGFiJywgdmFsdWU6IGNyb25TdHJpbmcgfSxcbiAgICAgICAgICAgICAgICB0aW1lem9uZTogdGltZVpvbmUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKHBhcmFtKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydHMuaW5zdHJ1bWVudENyb24gPSBpbnN0cnVtZW50Q3Jvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyb24uanMubWFwXG4iLAogICAgInZhciB7XG4gIF9vcHRpb25hbENoYWluXG59ID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCBjb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbi5qcycpO1xuXG4vKipcbiAqIFdyYXBzIHRoZSBgbm9kZS1jcm9uYCBsaWJyYXJ5IHdpdGggY2hlY2staW4gbW9uaXRvcmluZy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gXCJAc2VudHJ5L25vZGVcIjtcbiAqIGltcG9ydCBjcm9uIGZyb20gXCJub2RlLWNyb25cIjtcbiAqXG4gKiBjb25zdCBjcm9uV2l0aENoZWNrSW4gPSBTZW50cnkuY3Jvbi5pbnN0cnVtZW50Tm9kZUNyb24oY3Jvbik7XG4gKlxuICogY3JvbldpdGhDaGVja0luLnNjaGVkdWxlKFxuICogICBcIiogKiAqICogKlwiLFxuICogICAoKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coXCJydW5uaW5nIGEgdGFzayBldmVyeSBtaW51dGVcIik7XG4gKiAgIH0sXG4gKiAgIHsgbmFtZTogXCJteS1jcm9uLWpvYlwiIH0sXG4gKiApO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnROb2RlQ3JvbihsaWIpIHtcbiAgcmV0dXJuIG5ldyBQcm94eShsaWIsIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAocHJvcCA9PT0gJ3NjaGVkdWxlJyAmJiB0YXJnZXQuc2NoZWR1bGUpIHtcbiAgICAgICAgLy8gV2hlbiAnZ2V0JyBpcyBjYWxsZWQgZm9yIHNjaGVkdWxlLCByZXR1cm4gYSBwcm94aWVkIHZlcnNpb24gb2YgdGhlIHNjaGVkdWxlIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LnNjaGVkdWxlLCB7XG4gICAgICAgICAgYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJheSkge1xuICAgICAgICAgICAgY29uc3QgW2V4cHJlc3Npb24sICwgb3B0aW9uc10gPSBhcmdBcnJheTtcblxuICAgICAgICAgICAgaWYgKCFfb3B0aW9uYWxDaGFpbihbb3B0aW9ucywgJ29wdGlvbmFsQWNjZXNzJywgXyA9PiBfLm5hbWVdKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgXCJuYW1lXCIgZm9yIHNjaGVkdWxlZCBqb2IuIEEgbmFtZSBpcyByZXF1aXJlZCBmb3IgU2VudHJ5IGNoZWNrLWluIG1vbml0b3JpbmcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb3JlLndpdGhNb25pdG9yKFxuICAgICAgICAgICAgICBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ0FycmF5KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlOiB7IHR5cGU6ICdjcm9udGFiJywgdmFsdWU6IGNvbW1vbi5yZXBsYWNlQ3Jvbk5hbWVzKGV4cHJlc3Npb24pIH0sXG4gICAgICAgICAgICAgICAgdGltZXpvbmU6IF9vcHRpb25hbENoYWluKFtvcHRpb25zLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi50aW1lem9uZV0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydHMuaW5zdHJ1bWVudE5vZGVDcm9uID0gaW5zdHJ1bWVudE5vZGVDcm9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9kZS1jcm9uLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCBjb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbi5qcycpO1xuXG4vKipcbiAqIEluc3RydW1lbnRzIHRoZSBgbm9kZS1zY2hlZHVsZWAgbGlicmFyeSB0byBzZW5kIGEgY2hlY2staW4gZXZlbnQgdG8gU2VudHJ5IGZvciBlYWNoIGpvYiBleGVjdXRpb24uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L25vZGUnO1xuICogaW1wb3J0ICogYXMgc2NoZWR1bGUgZnJvbSAnbm9kZS1zY2hlZHVsZSc7XG4gKlxuICogY29uc3Qgc2NoZWR1bGVXaXRoQ2hlY2tJbiA9IFNlbnRyeS5jcm9uLmluc3RydW1lbnROb2RlU2NoZWR1bGUoc2NoZWR1bGUpO1xuICpcbiAqIGNvbnN0IGpvYiA9IHNjaGVkdWxlV2l0aENoZWNrSW4uc2NoZWR1bGVKb2IoJ215LWNyb24tam9iJywgJyogKiAqICogKicsICgpID0+IHtcbiAqICBjb25zb2xlLmxvZygnWW91IHdpbGwgc2VlIHRoaXMgbWVzc2FnZSBldmVyeSBtaW51dGUnKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnROb2RlU2NoZWR1bGUobGliKSB7XG4gIHJldHVybiBuZXcgUHJveHkobGliLCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHByb3AgPT09ICdzY2hlZHVsZUpvYicpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldC5zY2hlZHVsZUpvYiwge1xuICAgICAgICAgIGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuYW1lT3JFeHByZXNzaW9uLCBleHByZXNzaW9uT3JDYWxsYmFja10gPSBhcmdBcnJheTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lT3JFeHByZXNzaW9uICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZXhwcmVzc2lvbk9yQ2FsbGJhY2sgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkF1dG9tYXRpYyBpbnN0cnVtZW50YXRpb24gb2YgJ25vZGUtc2NoZWR1bGUnIHJlcXVpcmVzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgJ3NjaGVkdWxlSm9iJyB0byBiZSBhIGpvYiBuYW1lIHN0cmluZyBhbmQgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gYmUgYSBjcm9udGFiIHN0cmluZ1wiLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtb25pdG9yU2x1ZyA9IG5hbWVPckV4cHJlc3Npb247XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZXhwcmVzc2lvbk9yQ2FsbGJhY2s7XG5cbiAgICAgICAgICAgIHJldHVybiBjb3JlLndpdGhNb25pdG9yKFxuICAgICAgICAgICAgICBtb25pdG9yU2x1ZyxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkodGhpc0FyZywgYXJnQXJyYXkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGU6IHsgdHlwZTogJ2Nyb250YWInLCB2YWx1ZTogY29tbW9uLnJlcGxhY2VDcm9uTmFtZXMoZXhwcmVzc2lvbikgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydHMuaW5zdHJ1bWVudE5vZGVTY2hlZHVsZSA9IGluc3RydW1lbnROb2RlU2NoZWR1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlLXNjaGVkdWxlLmpzLm1hcFxuIiwKICAgICJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBjb3JlID0gcmVxdWlyZSgnQHNlbnRyeS9jb3JlJyk7XG5jb25zdCBpbmRleCA9IHJlcXVpcmUoJy4vdHJhY2luZy9pbmRleC5qcycpO1xuY29uc3QgY2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQuanMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCcuL3RyYW5zcG9ydHMvaHR0cC5qcycpO1xuY29uc3Qgc2RrID0gcmVxdWlyZSgnLi9zZGsuanMnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnQHNlbnRyeS91dGlscycpO1xuY29uc3QgdXRpbHMkMSA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcbmNvbnN0IG1vZHVsZSQxID0gcmVxdWlyZSgnLi9tb2R1bGUuanMnKTtcbmNvbnN0IGxlZ2FjeSA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2Fuci9sZWdhY3kuanMnKTtcbmNvbnN0IGhhbmRsZXJzID0gcmVxdWlyZSgnLi9oYW5kbGVycy5qcycpO1xuY29uc3QgaW5kZXgkNSA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL2luZGV4LmpzJyk7XG5jb25zdCBpbnRlZ3JhdGlvbnMkMSA9IHJlcXVpcmUoJy4vdHJhY2luZy9pbnRlZ3JhdGlvbnMuanMnKTtcbmNvbnN0IGludGVncmF0aW9ucyA9IHJlcXVpcmUoJ0BzZW50cnkvaW50ZWdyYXRpb25zJyk7XG5jb25zdCBjb25zb2xlID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvY29uc29sZS5qcycpO1xuY29uc3Qgb251bmNhdWdodGV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vaW50ZWdyYXRpb25zL29udW5jYXVnaHRleGNlcHRpb24uanMnKTtcbmNvbnN0IG9udW5oYW5kbGVkcmVqZWN0aW9uID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvb251bmhhbmRsZWRyZWplY3Rpb24uanMnKTtcbmNvbnN0IG1vZHVsZXMgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9tb2R1bGVzLmpzJyk7XG5jb25zdCBjb250ZXh0bGluZXMgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9jb250ZXh0bGluZXMuanMnKTtcbmNvbnN0IGNvbnRleHQgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9jb250ZXh0LmpzJyk7XG5jb25zdCBpbmRleCQxID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvbG9jYWwtdmFyaWFibGVzL2luZGV4LmpzJyk7XG5jb25zdCBzcG90bGlnaHQgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9zcG90bGlnaHQuanMnKTtcbmNvbnN0IGluZGV4JDIgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9hbnIvaW5kZXguanMnKTtcbmNvbnN0IGluZGV4JDMgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9oYXBpL2luZGV4LmpzJyk7XG5jb25zdCBpbmRleCQ0ID0gcmVxdWlyZSgnLi9pbnRlZ3JhdGlvbnMvdW5kaWNpL2luZGV4LmpzJyk7XG5jb25zdCBodHRwJDEgPSByZXF1aXJlKCcuL2ludGVncmF0aW9ucy9odHRwLmpzJyk7XG5jb25zdCB0cnBjID0gcmVxdWlyZSgnLi90cnBjLmpzJyk7XG5jb25zdCBjcm9uJDEgPSByZXF1aXJlKCcuL2Nyb24vY3Jvbi5qcycpO1xuY29uc3Qgbm9kZUNyb24gPSByZXF1aXJlKCcuL2Nyb24vbm9kZS1jcm9uLmpzJyk7XG5jb25zdCBub2RlU2NoZWR1bGUgPSByZXF1aXJlKCcuL2Nyb24vbm9kZS1zY2hlZHVsZS5qcycpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lYCBpbnN0ZWFkLlxuICovXG5jb25zdCBnZXRNb2R1bGVGcm9tRmlsZW5hbWUgPSBtb2R1bGUkMS5jcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoKTtcblxuLy8gVE9ETzogRGVwcmVjYXRlIHRoaXMgb25jZSB3ZSBtaWdyYXRlZCB0cmFjaW5nIGludGVncmF0aW9uc1xuY29uc3QgSW50ZWdyYXRpb25zID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgLi4uY29yZS5JbnRlZ3JhdGlvbnMsXG4gIC4uLmluZGV4JDUsXG4gIC4uLmludGVncmF0aW9ucyQxLFxufTtcblxuLyoqIE1ldGhvZHMgdG8gaW5zdHJ1bWVudCBjcm9uIGxpYnJhcmllcyBmb3IgU2VudHJ5IGNoZWNrLWlucyAqL1xuY29uc3QgY3JvbiA9IHtcbiAgaW5zdHJ1bWVudENyb246IGNyb24kMS5pbnN0cnVtZW50Q3JvbixcbiAgaW5zdHJ1bWVudE5vZGVDcm9uOiBub2RlQ3Jvbi5pbnN0cnVtZW50Tm9kZUNyb24sXG4gIGluc3RydW1lbnROb2RlU2NoZWR1bGU6IG5vZGVTY2hlZHVsZS5pbnN0cnVtZW50Tm9kZVNjaGVkdWxlLFxufTtcblxuZXhwb3J0cy5IdWIgPSBjb3JlLkh1YjtcbmV4cG9ydHMuU0RLX1ZFUlNJT04gPSBjb3JlLlNES19WRVJTSU9OO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QID0gY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QO1xuZXhwb3J0cy5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiA9IGNvcmUuU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU47XG5leHBvcnRzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEUgPSBjb3JlLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEU7XG5leHBvcnRzLlNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFID0gY29yZS5TRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRTtcbmV4cG9ydHMuU2NvcGUgPSBjb3JlLlNjb3BlO1xuZXhwb3J0cy5hZGRCcmVhZGNydW1iID0gY29yZS5hZGRCcmVhZGNydW1iO1xuZXhwb3J0cy5hZGRFdmVudFByb2Nlc3NvciA9IGNvcmUuYWRkRXZlbnRQcm9jZXNzb3I7XG5leHBvcnRzLmFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yID0gY29yZS5hZGRHbG9iYWxFdmVudFByb2Nlc3NvcjtcbmV4cG9ydHMuYWRkSW50ZWdyYXRpb24gPSBjb3JlLmFkZEludGVncmF0aW9uO1xuZXhwb3J0cy5jYXB0dXJlQ2hlY2tJbiA9IGNvcmUuY2FwdHVyZUNoZWNrSW47XG5leHBvcnRzLmNhcHR1cmVFdmVudCA9IGNvcmUuY2FwdHVyZUV2ZW50O1xuZXhwb3J0cy5jYXB0dXJlRXhjZXB0aW9uID0gY29yZS5jYXB0dXJlRXhjZXB0aW9uO1xuZXhwb3J0cy5jYXB0dXJlTWVzc2FnZSA9IGNvcmUuY2FwdHVyZU1lc3NhZ2U7XG5leHBvcnRzLmNhcHR1cmVTZXNzaW9uID0gY29yZS5jYXB0dXJlU2Vzc2lvbjtcbmV4cG9ydHMuY2xvc2UgPSBjb3JlLmNsb3NlO1xuZXhwb3J0cy5jb25maWd1cmVTY29wZSA9IGNvcmUuY29uZmlndXJlU2NvcGU7XG5leHBvcnRzLmNvbnRpbnVlVHJhY2UgPSBjb3JlLmNvbnRpbnVlVHJhY2U7XG5leHBvcnRzLmNyZWF0ZVRyYW5zcG9ydCA9IGNvcmUuY3JlYXRlVHJhbnNwb3J0O1xuZXhwb3J0cy5lbmRTZXNzaW9uID0gY29yZS5lbmRTZXNzaW9uO1xuZXhwb3J0cy5leHRyYWN0VHJhY2VwYXJlbnREYXRhID0gY29yZS5leHRyYWN0VHJhY2VwYXJlbnREYXRhO1xuZXhwb3J0cy5mbHVzaCA9IGNvcmUuZmx1c2g7XG5leHBvcnRzLmZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiA9IGNvcmUuZnVuY3Rpb25Ub1N0cmluZ0ludGVncmF0aW9uO1xuZXhwb3J0cy5nZXRBY3RpdmVTcGFuID0gY29yZS5nZXRBY3RpdmVTcGFuO1xuZXhwb3J0cy5nZXRBY3RpdmVUcmFuc2FjdGlvbiA9IGNvcmUuZ2V0QWN0aXZlVHJhbnNhY3Rpb247XG5leHBvcnRzLmdldENsaWVudCA9IGNvcmUuZ2V0Q2xpZW50O1xuZXhwb3J0cy5nZXRDdXJyZW50SHViID0gY29yZS5nZXRDdXJyZW50SHViO1xuZXhwb3J0cy5nZXRDdXJyZW50U2NvcGUgPSBjb3JlLmdldEN1cnJlbnRTY29wZTtcbmV4cG9ydHMuZ2V0R2xvYmFsU2NvcGUgPSBjb3JlLmdldEdsb2JhbFNjb3BlO1xuZXhwb3J0cy5nZXRIdWJGcm9tQ2FycmllciA9IGNvcmUuZ2V0SHViRnJvbUNhcnJpZXI7XG5leHBvcnRzLmdldElzb2xhdGlvblNjb3BlID0gY29yZS5nZXRJc29sYXRpb25TY29wZTtcbmV4cG9ydHMuZ2V0U3BhblN0YXR1c0Zyb21IdHRwQ29kZSA9IGNvcmUuZ2V0U3BhblN0YXR1c0Zyb21IdHRwQ29kZTtcbmV4cG9ydHMuaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbiA9IGNvcmUuaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuaXNJbml0aWFsaXplZCA9IGNvcmUuaXNJbml0aWFsaXplZDtcbmV4cG9ydHMubGFzdEV2ZW50SWQgPSBjb3JlLmxhc3RFdmVudElkO1xuZXhwb3J0cy5saW5rZWRFcnJvcnNJbnRlZ3JhdGlvbiA9IGNvcmUubGlua2VkRXJyb3JzSW50ZWdyYXRpb247XG5leHBvcnRzLm1ha2VNYWluID0gY29yZS5tYWtlTWFpbjtcbmV4cG9ydHMubWV0cmljcyA9IGNvcmUubWV0cmljcztcbmV4cG9ydHMucGFyYW1ldGVyaXplID0gY29yZS5wYXJhbWV0ZXJpemU7XG5leHBvcnRzLnJlcXVlc3REYXRhSW50ZWdyYXRpb24gPSBjb3JlLnJlcXVlc3REYXRhSW50ZWdyYXRpb247XG5leHBvcnRzLnJ1bldpdGhBc3luY0NvbnRleHQgPSBjb3JlLnJ1bldpdGhBc3luY0NvbnRleHQ7XG5leHBvcnRzLnNldENvbnRleHQgPSBjb3JlLnNldENvbnRleHQ7XG5leHBvcnRzLnNldEN1cnJlbnRDbGllbnQgPSBjb3JlLnNldEN1cnJlbnRDbGllbnQ7XG5leHBvcnRzLnNldEV4dHJhID0gY29yZS5zZXRFeHRyYTtcbmV4cG9ydHMuc2V0RXh0cmFzID0gY29yZS5zZXRFeHRyYXM7XG5leHBvcnRzLnNldEh0dHBTdGF0dXMgPSBjb3JlLnNldEh0dHBTdGF0dXM7XG5leHBvcnRzLnNldE1lYXN1cmVtZW50ID0gY29yZS5zZXRNZWFzdXJlbWVudDtcbmV4cG9ydHMuc2V0VGFnID0gY29yZS5zZXRUYWc7XG5leHBvcnRzLnNldFRhZ3MgPSBjb3JlLnNldFRhZ3M7XG5leHBvcnRzLnNldFVzZXIgPSBjb3JlLnNldFVzZXI7XG5leHBvcnRzLnNwYW5TdGF0dXNmcm9tSHR0cENvZGUgPSBjb3JlLnNwYW5TdGF0dXNmcm9tSHR0cENvZGU7XG5leHBvcnRzLnN0YXJ0QWN0aXZlU3BhbiA9IGNvcmUuc3RhcnRBY3RpdmVTcGFuO1xuZXhwb3J0cy5zdGFydEluYWN0aXZlU3BhbiA9IGNvcmUuc3RhcnRJbmFjdGl2ZVNwYW47XG5leHBvcnRzLnN0YXJ0U2Vzc2lvbiA9IGNvcmUuc3RhcnRTZXNzaW9uO1xuZXhwb3J0cy5zdGFydFNwYW4gPSBjb3JlLnN0YXJ0U3BhbjtcbmV4cG9ydHMuc3RhcnRTcGFuTWFudWFsID0gY29yZS5zdGFydFNwYW5NYW51YWw7XG5leHBvcnRzLnN0YXJ0VHJhbnNhY3Rpb24gPSBjb3JlLnN0YXJ0VHJhbnNhY3Rpb247XG5leHBvcnRzLnRyYWNlID0gY29yZS50cmFjZTtcbmV4cG9ydHMud2l0aEFjdGl2ZVNwYW4gPSBjb3JlLndpdGhBY3RpdmVTcGFuO1xuZXhwb3J0cy53aXRoSXNvbGF0aW9uU2NvcGUgPSBjb3JlLndpdGhJc29sYXRpb25TY29wZTtcbmV4cG9ydHMud2l0aE1vbml0b3IgPSBjb3JlLndpdGhNb25pdG9yO1xuZXhwb3J0cy53aXRoU2NvcGUgPSBjb3JlLndpdGhTY29wZTtcbmV4cG9ydHMuYXV0b0Rpc2NvdmVyTm9kZVBlcmZvcm1hbmNlTW9uaXRvcmluZ0ludGVncmF0aW9ucyA9IGluZGV4LmF1dG9EaXNjb3Zlck5vZGVQZXJmb3JtYW5jZU1vbml0b3JpbmdJbnRlZ3JhdGlvbnM7XG5leHBvcnRzLk5vZGVDbGllbnQgPSBjbGllbnQuTm9kZUNsaWVudDtcbmV4cG9ydHMubWFrZU5vZGVUcmFuc3BvcnQgPSBodHRwLm1ha2VOb2RlVHJhbnNwb3J0O1xuZXhwb3J0cy5kZWZhdWx0SW50ZWdyYXRpb25zID0gc2RrLmRlZmF1bHRJbnRlZ3JhdGlvbnM7XG5leHBvcnRzLmRlZmF1bHRTdGFja1BhcnNlciA9IHNkay5kZWZhdWx0U3RhY2tQYXJzZXI7XG5leHBvcnRzLmdldERlZmF1bHRJbnRlZ3JhdGlvbnMgPSBzZGsuZ2V0RGVmYXVsdEludGVncmF0aW9ucztcbmV4cG9ydHMuZ2V0U2VudHJ5UmVsZWFzZSA9IHNkay5nZXRTZW50cnlSZWxlYXNlO1xuZXhwb3J0cy5pbml0ID0gc2RrLmluaXQ7XG5leHBvcnRzLkRFRkFVTFRfVVNFUl9JTkNMVURFUyA9IHV0aWxzLkRFRkFVTFRfVVNFUl9JTkNMVURFUztcbmV4cG9ydHMuYWRkUmVxdWVzdERhdGFUb0V2ZW50ID0gdXRpbHMuYWRkUmVxdWVzdERhdGFUb0V2ZW50O1xuZXhwb3J0cy5leHRyYWN0UmVxdWVzdERhdGEgPSB1dGlscy5leHRyYWN0UmVxdWVzdERhdGE7XG5leHBvcnRzLmRlZXBSZWFkRGlyU3luYyA9IHV0aWxzJDEuZGVlcFJlYWREaXJTeW5jO1xuZXhwb3J0cy5jcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUgPSBtb2R1bGUkMS5jcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWU7XG5leHBvcnRzLmVuYWJsZUFuckRldGVjdGlvbiA9IGxlZ2FjeS5lbmFibGVBbnJEZXRlY3Rpb247XG5leHBvcnRzLkhhbmRsZXJzID0gaGFuZGxlcnM7XG5leHBvcnRzLmNhcHR1cmVDb25zb2xlSW50ZWdyYXRpb24gPSBpbnRlZ3JhdGlvbnMuY2FwdHVyZUNvbnNvbGVJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuZGVidWdJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9ucy5kZWJ1Z0ludGVncmF0aW9uO1xuZXhwb3J0cy5kZWR1cGVJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9ucy5kZWR1cGVJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuZXh0cmFFcnJvckRhdGFJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9ucy5leHRyYUVycm9yRGF0YUludGVncmF0aW9uO1xuZXhwb3J0cy5odHRwQ2xpZW50SW50ZWdyYXRpb24gPSBpbnRlZ3JhdGlvbnMuaHR0cENsaWVudEludGVncmF0aW9uO1xuZXhwb3J0cy5yZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uID0gaW50ZWdyYXRpb25zLnJlcG9ydGluZ09ic2VydmVySW50ZWdyYXRpb247XG5leHBvcnRzLnJld3JpdGVGcmFtZXNJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9ucy5yZXdyaXRlRnJhbWVzSW50ZWdyYXRpb247XG5leHBvcnRzLnNlc3Npb25UaW1pbmdJbnRlZ3JhdGlvbiA9IGludGVncmF0aW9ucy5zZXNzaW9uVGltaW5nSW50ZWdyYXRpb247XG5leHBvcnRzLmNvbnNvbGVJbnRlZ3JhdGlvbiA9IGNvbnNvbGUuY29uc29sZUludGVncmF0aW9uO1xuZXhwb3J0cy5vblVuY2F1Z2h0RXhjZXB0aW9uSW50ZWdyYXRpb24gPSBvbnVuY2F1Z2h0ZXhjZXB0aW9uLm9uVW5jYXVnaHRFeGNlcHRpb25JbnRlZ3JhdGlvbjtcbmV4cG9ydHMub25VbmhhbmRsZWRSZWplY3Rpb25JbnRlZ3JhdGlvbiA9IG9udW5oYW5kbGVkcmVqZWN0aW9uLm9uVW5oYW5kbGVkUmVqZWN0aW9uSW50ZWdyYXRpb247XG5leHBvcnRzLm1vZHVsZXNJbnRlZ3JhdGlvbiA9IG1vZHVsZXMubW9kdWxlc0ludGVncmF0aW9uO1xuZXhwb3J0cy5jb250ZXh0TGluZXNJbnRlZ3JhdGlvbiA9IGNvbnRleHRsaW5lcy5jb250ZXh0TGluZXNJbnRlZ3JhdGlvbjtcbmV4cG9ydHMubm9kZUNvbnRleHRJbnRlZ3JhdGlvbiA9IGNvbnRleHQubm9kZUNvbnRleHRJbnRlZ3JhdGlvbjtcbmV4cG9ydHMubG9jYWxWYXJpYWJsZXNJbnRlZ3JhdGlvbiA9IGluZGV4JDEubG9jYWxWYXJpYWJsZXNJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuc3BvdGxpZ2h0SW50ZWdyYXRpb24gPSBzcG90bGlnaHQuc3BvdGxpZ2h0SW50ZWdyYXRpb247XG5leHBvcnRzLmFuckludGVncmF0aW9uID0gaW5kZXgkMi5hbnJJbnRlZ3JhdGlvbjtcbmV4cG9ydHMuaGFwaUVycm9yUGx1Z2luID0gaW5kZXgkMy5oYXBpRXJyb3JQbHVnaW47XG5leHBvcnRzLmhhcGlJbnRlZ3JhdGlvbiA9IGluZGV4JDMuaGFwaUludGVncmF0aW9uO1xuZXhwb3J0cy5VbmRpY2kgPSBpbmRleCQ0LlVuZGljaTtcbmV4cG9ydHMubmF0aXZlTm9kZUZldGNoaW50ZWdyYXRpb24gPSBpbmRleCQ0Lm5hdGl2ZU5vZGVGZXRjaGludGVncmF0aW9uO1xuZXhwb3J0cy5IdHRwID0gaHR0cCQxLkh0dHA7XG5leHBvcnRzLmh0dHBJbnRlZ3JhdGlvbiA9IGh0dHAkMS5odHRwSW50ZWdyYXRpb247XG5leHBvcnRzLnRycGNNaWRkbGV3YXJlID0gdHJwYy50cnBjTWlkZGxld2FyZTtcbmV4cG9ydHMuSW50ZWdyYXRpb25zID0gSW50ZWdyYXRpb25zO1xuZXhwb3J0cy5jcm9uID0gY3JvbjtcbmV4cG9ydHMuZ2V0TW9kdWxlRnJvbUZpbGVuYW1lID0gZ2V0TW9kdWxlRnJvbUZpbGVuYW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBxdW90ZSh4cykge1xuXHRyZXR1cm4geHMubWFwKGZ1bmN0aW9uIChzKSB7XG5cdFx0aWYgKHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gcy5vcC5yZXBsYWNlKC8oLikvZywgJ1xcXFwkMScpO1xuXHRcdH1cblx0XHRpZiAoKC9bXCJcXHNdLykudGVzdChzKSAmJiAhKC8nLykudGVzdChzKSkge1xuXHRcdFx0cmV0dXJuIFwiJ1wiICsgcy5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpICsgXCInXCI7XG5cdFx0fVxuXHRcdGlmICgoL1tcIidcXHNdLykudGVzdChzKSkge1xuXHRcdFx0cmV0dXJuICdcIicgKyBzLnJlcGxhY2UoLyhbXCJcXFxcJGAhXSkvZywgJ1xcXFwkMScpICsgJ1wiJztcblx0XHR9XG5cdFx0cmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC8oW0EtWmEtel06KT8oWyMhXCIkJicoKSosOjs8PT4/QFtcXFxcXFxdXmB7fH1dKS9nLCAnJDFcXFxcJDInKTtcblx0fSkuam9pbignICcpO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vLyAnPCgnIGlzIHByb2Nlc3Mgc3Vic3RpdHV0aW9uIG9wZXJhdG9yIGFuZFxuLy8gY2FuIGJlIHBhcnNlZCB0aGUgc2FtZSBhcyBjb250cm9sIG9wZXJhdG9yXG52YXIgQ09OVFJPTCA9ICcoPzonICsgW1xuXHQnXFxcXHxcXFxcfCcsXG5cdCdcXFxcJlxcXFwmJyxcblx0Jzs7Jyxcblx0J1xcXFx8XFxcXCYnLFxuXHQnXFxcXDxcXFxcKCcsXG5cdCdcXFxcPFxcXFw8XFxcXDwnLFxuXHQnPj4nLFxuXHQnPlxcXFwmJyxcblx0JzxcXFxcJicsXG5cdCdbJjsoKXw8Pl0nXG5dLmpvaW4oJ3wnKSArICcpJztcbnZhciBjb250cm9sUkUgPSBuZXcgUmVnRXhwKCdeJyArIENPTlRST0wgKyAnJCcpO1xudmFyIE1FVEEgPSAnfCY7KCk8PiBcXFxcdCc7XG52YXIgU0lOR0xFX1FVT1RFID0gJ1wiKChcXFxcXFxcXFwifFteXCJdKSo/KVwiJztcbnZhciBET1VCTEVfUVVPVEUgPSAnXFwnKChcXFxcXFxcXFxcJ3xbXlxcJ10pKj8pXFwnJztcbnZhciBoYXNoID0gL14jJC87XG5cbnZhciBTUSA9IFwiJ1wiO1xudmFyIERRID0gJ1wiJztcbnZhciBEUyA9ICckJztcblxudmFyIFRPS0VOID0gJyc7XG52YXIgbXVsdCA9IDB4MTAwMDAwMDAwOyAvLyBNYXRoLnBvdygxNiwgOCk7XG5mb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHRUT0tFTiArPSAobXVsdCAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDE2KTtcbn1cbnZhciBzdGFydHNXaXRoVG9rZW4gPSBuZXcgUmVnRXhwKCdeJyArIFRPS0VOKTtcblxuZnVuY3Rpb24gbWF0Y2hBbGwocywgcikge1xuXHR2YXIgb3JpZ0luZGV4ID0gci5sYXN0SW5kZXg7XG5cblx0dmFyIG1hdGNoZXMgPSBbXTtcblx0dmFyIG1hdGNoT2JqO1xuXG5cdHdoaWxlICgobWF0Y2hPYmogPSByLmV4ZWMocykpKSB7XG5cdFx0bWF0Y2hlcy5wdXNoKG1hdGNoT2JqKTtcblx0XHRpZiAoci5sYXN0SW5kZXggPT09IG1hdGNoT2JqLmluZGV4KSB7XG5cdFx0XHRyLmxhc3RJbmRleCArPSAxO1xuXHRcdH1cblx0fVxuXG5cdHIubGFzdEluZGV4ID0gb3JpZ0luZGV4O1xuXG5cdHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBnZXRWYXIoZW52LCBwcmUsIGtleSkge1xuXHR2YXIgciA9IHR5cGVvZiBlbnYgPT09ICdmdW5jdGlvbicgPyBlbnYoa2V5KSA6IGVudltrZXldO1xuXHRpZiAodHlwZW9mIHIgPT09ICd1bmRlZmluZWQnICYmIGtleSAhPSAnJykge1xuXHRcdHIgPSAnJztcblx0fSBlbHNlIGlmICh0eXBlb2YgciA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyID0gJyQnO1xuXHR9XG5cblx0aWYgKHR5cGVvZiByID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBwcmUgKyBUT0tFTiArIEpTT04uc3RyaW5naWZ5KHIpICsgVE9LRU47XG5cdH1cblx0cmV0dXJuIHByZSArIHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW50ZXJuYWwoc3RyaW5nLCBlbnYsIG9wdHMpIHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0b3B0cyA9IHt9O1xuXHR9XG5cdHZhciBCUyA9IG9wdHMuZXNjYXBlIHx8ICdcXFxcJztcblx0dmFyIEJBUkVXT1JEID0gJyhcXFxcJyArIEJTICsgJ1tcXCdcIicgKyBNRVRBICsgJ118W15cXFxcc1xcJ1wiJyArIE1FVEEgKyAnXSkrJztcblxuXHR2YXIgY2h1bmtlciA9IG5ldyBSZWdFeHAoW1xuXHRcdCcoJyArIENPTlRST0wgKyAnKScsIC8vIGNvbnRyb2wgY2hhcnNcblx0XHQnKCcgKyBCQVJFV09SRCArICd8JyArIFNJTkdMRV9RVU9URSArICd8JyArIERPVUJMRV9RVU9URSArICcpKydcblx0XS5qb2luKCd8JyksICdnJyk7XG5cblx0dmFyIG1hdGNoZXMgPSBtYXRjaEFsbChzdHJpbmcsIGNodW5rZXIpO1xuXG5cdGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIWVudikge1xuXHRcdGVudiA9IHt9O1xuXHR9XG5cblx0dmFyIGNvbW1lbnRlZCA9IGZhbHNlO1xuXG5cdHJldHVybiBtYXRjaGVzLm1hcChmdW5jdGlvbiAobWF0Y2gpIHtcblx0XHR2YXIgcyA9IG1hdGNoWzBdO1xuXHRcdGlmICghcyB8fCBjb21tZW50ZWQpIHtcblx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2xSRS50ZXN0KHMpKSB7XG5cdFx0XHRyZXR1cm4geyBvcDogcyB9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmQtd3JpdHRlbiBzY2FubmVyL3BhcnNlciBmb3IgQmFzaCBxdW90aW5nIHJ1bGVzOlxuXHRcdC8vXG5cdFx0Ly8gMS4gaW5zaWRlIHNpbmdsZSBxdW90ZXMsIGFsbCBjaGFyYWN0ZXJzIGFyZSBwcmludGVkIGxpdGVyYWxseS5cblx0XHQvLyAyLiBpbnNpZGUgZG91YmxlIHF1b3RlcywgYWxsIGNoYXJhY3RlcnMgYXJlIHByaW50ZWQgbGl0ZXJhbGx5XG5cdFx0Ly8gICAgZXhjZXB0IHZhcmlhYmxlcyBwcmVmaXhlZCBieSAnJCcgYW5kIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5XG5cdFx0Ly8gICAgZWl0aGVyIGEgZG91YmxlIHF1b3RlIG9yIGFub3RoZXIgYmFja3NsYXNoLlxuXHRcdC8vIDMuIG91dHNpZGUgb2YgYW55IHF1b3RlcywgYmFja3NsYXNoZXMgYXJlIHRyZWF0ZWQgYXMgZXNjYXBlXG5cdFx0Ly8gICAgY2hhcmFjdGVycyBhbmQgbm90IHByaW50ZWQgKHVubGVzcyB0aGV5IGFyZSB0aGVtc2VsdmVzIGVzY2FwZWQpXG5cdFx0Ly8gNC4gcXVvdGUgY29udGV4dCBjYW4gc3dpdGNoIG1pZC10b2tlbiBpZiB0aGVyZSBpcyBubyB3aGl0ZXNwYWNlXG5cdFx0Ly8gICAgIGJldHdlZW4gdGhlIHR3byBxdW90ZSBjb250ZXh0cyAoZS5nLiBhbGwnb25lJ1widG9rZW5cIiBwYXJzZXMgYXNcblx0XHQvLyAgICAgXCJhbGxvbmV0b2tlblwiKVxuXHRcdHZhciBxdW90ZSA9IGZhbHNlO1xuXHRcdHZhciBlc2MgPSBmYWxzZTtcblx0XHR2YXIgb3V0ID0gJyc7XG5cdFx0dmFyIGlzR2xvYiA9IGZhbHNlO1xuXHRcdHZhciBpO1xuXG5cdFx0ZnVuY3Rpb24gcGFyc2VFbnZWYXIoKSB7XG5cdFx0XHRpICs9IDE7XG5cdFx0XHR2YXIgdmFyZW5kO1xuXHRcdFx0dmFyIHZhcm5hbWU7XG5cdFx0XHR2YXIgY2hhciA9IHMuY2hhckF0KGkpO1xuXG5cdFx0XHRpZiAoY2hhciA9PT0gJ3snKSB7XG5cdFx0XHRcdGkgKz0gMTtcblx0XHRcdFx0aWYgKHMuY2hhckF0KGkpID09PSAnfScpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzdWJzdGl0dXRpb246ICcgKyBzLnNsaWNlKGkgLSAyLCBpICsgMSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhcmVuZCA9IHMuaW5kZXhPZignfScsIGkpO1xuXHRcdFx0XHRpZiAodmFyZW5kIDwgMCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignQmFkIHN1YnN0aXR1dGlvbjogJyArIHMuc2xpY2UoaSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhcm5hbWUgPSBzLnNsaWNlKGksIHZhcmVuZCk7XG5cdFx0XHRcdGkgPSB2YXJlbmQ7XG5cdFx0XHR9IGVsc2UgaWYgKCgvWypAIz8kIV8tXS8pLnRlc3QoY2hhcikpIHtcblx0XHRcdFx0dmFybmFtZSA9IGNoYXI7XG5cdFx0XHRcdGkgKz0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBzbGljZWRGcm9tSSA9IHMuc2xpY2UoaSk7XG5cdFx0XHRcdHZhcmVuZCA9IHNsaWNlZEZyb21JLm1hdGNoKC9bXlxcd1xcZF9dLyk7XG5cdFx0XHRcdGlmICghdmFyZW5kKSB7XG5cdFx0XHRcdFx0dmFybmFtZSA9IHNsaWNlZEZyb21JO1xuXHRcdFx0XHRcdGkgPSBzLmxlbmd0aDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXJuYW1lID0gc2xpY2VkRnJvbUkuc2xpY2UoMCwgdmFyZW5kLmluZGV4KTtcblx0XHRcdFx0XHRpICs9IHZhcmVuZC5pbmRleCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBnZXRWYXIoZW52LCAnJywgdmFybmFtZSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjID0gcy5jaGFyQXQoaSk7XG5cdFx0XHRpc0dsb2IgPSBpc0dsb2IgfHwgKCFxdW90ZSAmJiAoYyA9PT0gJyonIHx8IGMgPT09ICc/JykpO1xuXHRcdFx0aWYgKGVzYykge1xuXHRcdFx0XHRvdXQgKz0gYztcblx0XHRcdFx0ZXNjID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKHF1b3RlKSB7XG5cdFx0XHRcdGlmIChjID09PSBxdW90ZSkge1xuXHRcdFx0XHRcdHF1b3RlID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAocXVvdGUgPT0gU1EpIHtcblx0XHRcdFx0XHRvdXQgKz0gYztcblx0XHRcdFx0fSBlbHNlIHsgLy8gRG91YmxlIHF1b3RlXG5cdFx0XHRcdFx0aWYgKGMgPT09IEJTKSB7XG5cdFx0XHRcdFx0XHRpICs9IDE7XG5cdFx0XHRcdFx0XHRjID0gcy5jaGFyQXQoaSk7XG5cdFx0XHRcdFx0XHRpZiAoYyA9PT0gRFEgfHwgYyA9PT0gQlMgfHwgYyA9PT0gRFMpIHtcblx0XHRcdFx0XHRcdFx0b3V0ICs9IGM7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvdXQgKz0gQlMgKyBjO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYyA9PT0gRFMpIHtcblx0XHRcdFx0XHRcdG91dCArPSBwYXJzZUVudlZhcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvdXQgKz0gYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYyA9PT0gRFEgfHwgYyA9PT0gU1EpIHtcblx0XHRcdFx0cXVvdGUgPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sUkUudGVzdChjKSkge1xuXHRcdFx0XHRyZXR1cm4geyBvcDogcyB9O1xuXHRcdFx0fSBlbHNlIGlmIChoYXNoLnRlc3QoYykpIHtcblx0XHRcdFx0Y29tbWVudGVkID0gdHJ1ZTtcblx0XHRcdFx0dmFyIGNvbW1lbnRPYmogPSB7IGNvbW1lbnQ6IHN0cmluZy5zbGljZShtYXRjaC5pbmRleCArIGkgKyAxKSB9O1xuXHRcdFx0XHRpZiAob3V0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldHVybiBbb3V0LCBjb21tZW50T2JqXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gW2NvbW1lbnRPYmpdO1xuXHRcdFx0fSBlbHNlIGlmIChjID09PSBCUykge1xuXHRcdFx0XHRlc2MgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChjID09PSBEUykge1xuXHRcdFx0XHRvdXQgKz0gcGFyc2VFbnZWYXIoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc0dsb2IpIHtcblx0XHRcdHJldHVybiB7IG9wOiAnZ2xvYicsIHBhdHRlcm46IG91dCB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH0pLnJlZHVjZShmdW5jdGlvbiAocHJldiwgYXJnKSB7IC8vIGZpbmFsaXplIHBhcnNlZCBhcmd1bWVudHNcblx0XHQvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2hvbGUgcmVkdWNlIHdpdGggYSBjb25jYXRcblx0XHRyZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCcgPyBwcmV2IDogcHJldi5jb25jYXQoYXJnKTtcblx0fSwgW10pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlKHMsIGVudiwgb3B0cykge1xuXHR2YXIgbWFwcGVkID0gcGFyc2VJbnRlcm5hbChzLCBlbnYsIG9wdHMpO1xuXHRpZiAodHlwZW9mIGVudiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBtYXBwZWQ7XG5cdH1cblx0cmV0dXJuIG1hcHBlZC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcykge1xuXHRcdGlmICh0eXBlb2YgcyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBhY2MuY29uY2F0KHMpO1xuXHRcdH1cblx0XHR2YXIgeHMgPSBzLnNwbGl0KFJlZ0V4cCgnKCcgKyBUT0tFTiArICcuKj8nICsgVE9LRU4gKyAnKScsICdnJykpO1xuXHRcdGlmICh4cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBhY2MuY29uY2F0KHhzWzBdKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFjYy5jb25jYXQoeHMuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbiAoeCkge1xuXHRcdFx0aWYgKHN0YXJ0c1dpdGhUb2tlbi50ZXN0KHgpKSB7XG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKHguc3BsaXQoVE9LRU4pWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB4O1xuXHRcdH0pKTtcblx0fSwgW10pO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLnF1b3RlID0gcmVxdWlyZSgnLi9xdW90ZScpO1xuZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbiIsCiAgICAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBsPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxyPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSx0PVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSx1PVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLHY9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHc9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLHg9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIikseT1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSx6PVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBBKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT16JiZhW3pdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9XG52YXIgQj17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sQz1PYmplY3QuYXNzaWduLEQ9e307ZnVuY3Rpb24gRShhLGIsZSl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1EO3RoaXMudXBkYXRlcj1lfHxCfUUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307XG5FLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGIpe2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJm51bGwhPWEpdGhyb3cgRXJyb3IoXCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtFLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtmdW5jdGlvbiBGKCl7fUYucHJvdG90eXBlPUUucHJvdG90eXBlO2Z1bmN0aW9uIEcoYSxiLGUpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9RDt0aGlzLnVwZGF0ZXI9ZXx8Qn12YXIgSD1HLnByb3RvdHlwZT1uZXcgRjtcbkguY29uc3RydWN0b3I9RztDKEgsRS5wcm90b3R5cGUpO0guaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEk9QXJyYXkuaXNBcnJheSxKPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksSz17Y3VycmVudDpudWxsfSxMPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBNKGEsYixlKXt2YXIgZCxjPXt9LGs9bnVsbCxoPW51bGw7aWYobnVsbCE9Yilmb3IoZCBpbiB2b2lkIDAhPT1iLnJlZiYmKGg9Yi5yZWYpLHZvaWQgMCE9PWIua2V5JiYoaz1cIlwiK2Iua2V5KSxiKUouY2FsbChiLGQpJiYhTC5oYXNPd25Qcm9wZXJ0eShkKSYmKGNbZF09YltkXSk7dmFyIGc9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1nKWMuY2hpbGRyZW49ZTtlbHNlIGlmKDE8Zyl7Zm9yKHZhciBmPUFycmF5KGcpLG09MDttPGc7bSsrKWZbbV09YXJndW1lbnRzW20rMl07Yy5jaGlsZHJlbj1mfWlmKGEmJmEuZGVmYXVsdFByb3BzKWZvcihkIGluIGc9YS5kZWZhdWx0UHJvcHMsZyl2b2lkIDA9PT1jW2RdJiYoY1tkXT1nW2RdKTtyZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEsa2V5OmsscmVmOmgscHJvcHM6Yyxfb3duZXI6Sy5jdXJyZW50fX1cbmZ1bmN0aW9uIE4oYSxiKXtyZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIE8oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWx9ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIithLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXX0pfXZhciBQPS9cXC8rL2c7ZnVuY3Rpb24gUShhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShcIlwiK2Eua2V5KTpiLnRvU3RyaW5nKDM2KX1cbmZ1bmN0aW9uIFIoYSxiLGUsZCxjKXt2YXIgaz10eXBlb2YgYTtpZihcInVuZGVmaW5lZFwiPT09a3x8XCJib29sZWFuXCI9PT1rKWE9bnVsbDt2YXIgaD0hMTtpZihudWxsPT09YSloPSEwO2Vsc2Ugc3dpdGNoKGspe2Nhc2UgXCJzdHJpbmdcIjpjYXNlIFwibnVtYmVyXCI6aD0hMDticmVhaztjYXNlIFwib2JqZWN0XCI6c3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgbDpjYXNlIG46aD0hMH19aWYoaClyZXR1cm4gaD1hLGM9YyhoKSxhPVwiXCI9PT1kP1wiLlwiK1EoaCwwKTpkLEkoYyk/KGU9XCJcIixudWxsIT1hJiYoZT1hLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIiksUihjLGIsZSxcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfSkpOm51bGwhPWMmJihPKGMpJiYoYz1OKGMsZSsoIWMua2V5fHxoJiZoLmtleT09PWMua2V5P1wiXCI6KFwiXCIrYy5rZXkpLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIikrYSkpLGIucHVzaChjKSksMTtoPTA7ZD1cIlwiPT09ZD9cIi5cIjpkK1wiOlwiO2lmKEkoYSkpZm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe2s9XG5hW2ddO3ZhciBmPWQrUShrLGcpO2grPVIoayxiLGUsZixjKX1lbHNlIGlmKGY9QShhKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZilmb3IoYT1mLmNhbGwoYSksZz0wOyEoaz1hLm5leHQoKSkuZG9uZTspaz1rLnZhbHVlLGY9ZCtRKGssZysrKSxoKz1SKGssYixlLGYsYyk7ZWxzZSBpZihcIm9iamVjdFwiPT09ayl0aHJvdyBiPVN0cmluZyhhKSxFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIrKFwiW29iamVjdCBPYmplY3RdXCI9PT1iP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoYSkuam9pbihcIiwgXCIpK1wifVwiOmIpK1wiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiKTtyZXR1cm4gaH1cbmZ1bmN0aW9uIFMoYSxiLGUpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGQ9W10sYz0wO1IoYSxkLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGUsYSxjKyspfSk7cmV0dXJuIGR9ZnVuY3Rpb24gVChhKXtpZigtMT09PWEuX3N0YXR1cyl7dmFyIGI9YS5fcmVzdWx0O2I9YigpO2IudGhlbihmdW5jdGlvbihiKXtpZigwPT09YS5fc3RhdHVzfHwtMT09PWEuX3N0YXR1cylhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yn0sZnVuY3Rpb24oYil7aWYoMD09PWEuX3N0YXR1c3x8LTE9PT1hLl9zdGF0dXMpYS5fc3RhdHVzPTIsYS5fcmVzdWx0PWJ9KTstMT09PWEuX3N0YXR1cyYmKGEuX3N0YXR1cz0wLGEuX3Jlc3VsdD1iKX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBhLl9yZXN1bHQ7fVxudmFyIFU9e2N1cnJlbnQ6bnVsbH0sVj17dHJhbnNpdGlvbjpudWxsfSxXPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOlUsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6VixSZWFjdEN1cnJlbnRPd25lcjpLfTtmdW5jdGlvbiBYKCl7dGhyb3cgRXJyb3IoXCJhY3QoLi4uKSBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIFJlYWN0LlwiKTt9XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6Uyxmb3JFYWNoOmZ1bmN0aW9uKGEsYixlKXtTKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZSl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UyhhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFMoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTyhhKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gYX19O2V4cG9ydHMuQ29tcG9uZW50PUU7ZXhwb3J0cy5GcmFnbWVudD1wO2V4cG9ydHMuUHJvZmlsZXI9cjtleHBvcnRzLlB1cmVDb21wb25lbnQ9RztleHBvcnRzLlN0cmljdE1vZGU9cTtleHBvcnRzLlN1c3BlbnNlPXc7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVc7ZXhwb3J0cy5hY3Q9WDtcbmV4cG9ydHMuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGEsYixlKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl0aHJvdyBFcnJvcihcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiK2ErXCIuXCIpO3ZhciBkPUMoe30sYS5wcm9wcyksYz1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Sy5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGM9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilKLmNhbGwoYixmKSYmIUwuaGFzT3duUHJvcGVydHkoZikmJihkW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZC5jaGlsZHJlbj1lO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO1xuZm9yKHZhciBtPTA7bTxmO20rKylnW21dPWFyZ3VtZW50c1ttKzJdO2QuY2hpbGRyZW49Z31yZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEudHlwZSxrZXk6YyxyZWY6ayxwcm9wczpkLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEpe2E9eyQkdHlwZW9mOnUsX2N1cnJlbnRWYWx1ZTphLF9jdXJyZW50VmFsdWUyOmEsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsLF9kZWZhdWx0VmFsdWU6bnVsbCxfZ2xvYmFsTmFtZTpudWxsfTthLlByb3ZpZGVyPXskJHR5cGVvZjp0LF9jb250ZXh0OmF9O3JldHVybiBhLkNvbnN1bWVyPWF9O2V4cG9ydHMuY3JlYXRlRWxlbWVudD1NO2V4cG9ydHMuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihhKXt2YXIgYj1NLmJpbmQobnVsbCxhKTtiLnR5cGU9YTtyZXR1cm4gYn07ZXhwb3J0cy5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX07XG5leHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PU87ZXhwb3J0cy5sYXp5PWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp5LF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6YX0sX2luaXQ6VH19O2V4cG9ydHMubWVtbz1mdW5jdGlvbihhLGIpe3JldHVybnskJHR5cGVvZjp4LHR5cGU6YSxjb21wYXJlOnZvaWQgMD09PWI/bnVsbDpifX07ZXhwb3J0cy5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9Vi50cmFuc2l0aW9uO1YudHJhbnNpdGlvbj17fTt0cnl7YSgpfWZpbmFsbHl7Vi50cmFuc2l0aW9uPWJ9fTtleHBvcnRzLnVuc3RhYmxlX2FjdD1YO2V4cG9ydHMudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUNhbGxiYWNrKGEsYil9O2V4cG9ydHMudXNlQ29udGV4dD1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZUNvbnRleHQoYSl9O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oYSl7cmV0dXJuIFUuY3VycmVudC51c2VEZWZlcnJlZFZhbHVlKGEpfTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBVLmN1cnJlbnQudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gVS5jdXJyZW50LnVzZUlkKCl9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsZSl7cmV0dXJuIFUuY3VycmVudC51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixlKX07ZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChhLGIpfTtleHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBVLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGEsYil9O1xuZXhwb3J0cy51c2VNZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VNZW1vKGEsYil9O2V4cG9ydHMudXNlUmVkdWNlcj1mdW5jdGlvbihhLGIsZSl7cmV0dXJuIFUuY3VycmVudC51c2VSZWR1Y2VyKGEsYixlKX07ZXhwb3J0cy51c2VSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIFUuY3VycmVudC51c2VSZWYoYSl9O2V4cG9ydHMudXNlU3RhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIFUuY3VycmVudC51c2VTdGF0ZShhKX07ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbihhLGIsZSl7cmV0dXJuIFUuY3VycmVudC51c2VTeW5jRXh0ZXJuYWxTdG9yZShhLGIsZSl9O2V4cG9ydHMudXNlVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiBVLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtleHBvcnRzLnZlcnNpb249XCIxOC4zLjFcIjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZyA9IGV4cG9ydHMuTG9nTGV2ZWwgPSB2b2lkIDA7XG4vLyBpbnRlbnRpb25hbGx5IHNwYWNlZCBmb3IgZm9ybWF0dGluZ1xuY29uc3QgREVCVUcgPSAnIERFQlVHICc7XG5jb25zdCBfSU5GTyA9ICcgIElORk8gJztcbmNvbnN0IF9XQVJOID0gJyAgV0FSTiAnO1xuY29uc3QgRVJST1IgPSAnIEVSUk9SICc7XG5mdW5jdGlvbiBhZGRUYWcoYXJncykge1xuICAgIGFyZ3MudW5zaGlmdCgnW1N0YXRzaWddJyk7XG4gICAgcmV0dXJuIGFyZ3M7IC8vIFsnW1N0YXRzaWddJywgLi4uYXJnc107XG59XG5leHBvcnRzLkxvZ0xldmVsID0ge1xuICAgIE5vbmU6IDAsXG4gICAgRXJyb3I6IDEsXG4gICAgV2FybjogMixcbiAgICBJbmZvOiAzLFxuICAgIERlYnVnOiA0LFxufTtcbmNsYXNzIExvZyB7XG4gICAgc3RhdGljIGluZm8oLi4uYXJncykge1xuICAgICAgICBpZiAoTG9nLmxldmVsID49IGV4cG9ydHMuTG9nTGV2ZWwuSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKF9JTkZPLCAuLi5hZGRUYWcoYXJncykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkZWJ1ZyguLi5hcmdzKSB7XG4gICAgICAgIGlmIChMb2cubGV2ZWwgPj0gZXhwb3J0cy5Mb2dMZXZlbC5EZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhERUJVRywgLi4uYWRkVGFnKGFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKSB7XG4gICAgICAgIGlmIChMb2cubGV2ZWwgPj0gZXhwb3J0cy5Mb2dMZXZlbC5XYXJuKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oX1dBUk4sIC4uLmFkZFRhZyhhcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKExvZy5sZXZlbCA+PSBleHBvcnRzLkxvZ0xldmVsLkVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKEVSUk9SLCAuLi5hZGRUYWcoYXJncykpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Mb2cgPSBMb2c7XG5Mb2cubGV2ZWwgPSBleHBvcnRzLkxvZ0xldmVsLldhcm47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG52YXIgX2EsIF9iLCBfYztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2dldEluc3RhbmNlID0gZXhwb3J0cy5fZ2V0U3RhdHNpZ0dsb2JhbEZsYWcgPSBleHBvcnRzLl9nZXRTdGF0c2lnR2xvYmFsID0gdm9pZCAwO1xuY29uc3QgTG9nXzEgPSByZXF1aXJlKFwiLi9Mb2dcIik7XG5jb25zdCBfZ2V0U3RhdHNpZ0dsb2JhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gX19TVEFUU0lHX18gPyBfX1NUQVRTSUdfXyA6IHN0YXRzaWdHbG9iYWw7XG59O1xuZXhwb3J0cy5fZ2V0U3RhdHNpZ0dsb2JhbCA9IF9nZXRTdGF0c2lnR2xvYmFsO1xuY29uc3QgX2dldFN0YXRzaWdHbG9iYWxGbGFnID0gKGZsYWcpID0+IHtcbiAgICByZXR1cm4gKDAsIGV4cG9ydHMuX2dldFN0YXRzaWdHbG9iYWwpKClbZmxhZ107XG59O1xuZXhwb3J0cy5fZ2V0U3RhdHNpZ0dsb2JhbEZsYWcgPSBfZ2V0U3RhdHNpZ0dsb2JhbEZsYWc7XG5jb25zdCBfZ2V0SW5zdGFuY2UgPSAoc2RrS2V5KSA9PiB7XG4gICAgY29uc3QgZ2JsID0gKDAsIGV4cG9ydHMuX2dldFN0YXRzaWdHbG9iYWwpKCk7XG4gICAgaWYgKCFzZGtLZXkpIHtcbiAgICAgICAgaWYgKGdibC5pbnN0YW5jZXMgJiYgT2JqZWN0LmtleXMoZ2JsLmluc3RhbmNlcykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgTG9nXzEuTG9nLndhcm4oJ0NhbGwgbWFkZSB0byBTdGF0c2lnIGdsb2JhbCBpbnN0YW5jZSB3aXRob3V0IGFuIFNESyBrZXkgYnV0IHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY2xpZW50IGluc3RhbmNlLiBJZiB5b3UgYXJlIHVzaW5nIG11bGl0cGxlIGNsaWVudHMsIHBsZWFzZSBzcGVjaWZ5IHRoZSBTREsga2V5LicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnYmwuZmlyc3RJbnN0YW5jZTtcbiAgICB9XG4gICAgcmV0dXJuIGdibC5pbnN0YW5jZXMgJiYgZ2JsLmluc3RhbmNlc1tzZGtLZXldO1xufTtcbmV4cG9ydHMuX2dldEluc3RhbmNlID0gX2dldEluc3RhbmNlO1xuY29uc3QgR0xPQkFMX0tFWSA9ICdfX1NUQVRTSUdfXyc7XG5jb25zdCBfd2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbmNvbnN0IF9nbG9iYWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHt9O1xuY29uc3QgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDoge307XG5jb25zdCBzdGF0c2lnR2xvYmFsID0gKF9jID0gKF9iID0gKF9hID0gX3dpbmRvd1tHTE9CQUxfS0VZXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogX2dsb2JhbFtHTE9CQUxfS0VZXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogX2dsb2JhbFRoaXNbR0xPQkFMX0tFWV0pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHtcbiAgICBpbnN0YW5jZTogZXhwb3J0cy5fZ2V0SW5zdGFuY2UsXG59O1xuX3dpbmRvd1tHTE9CQUxfS0VZXSA9IHN0YXRzaWdHbG9iYWw7XG5fZ2xvYmFsW0dMT0JBTF9LRVldID0gc3RhdHNpZ0dsb2JhbDtcbl9nbG9iYWxUaGlzW0dMT0JBTF9LRVldID0gc3RhdHNpZ0dsb2JhbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRpYWdub3N0aWNzID0gdm9pZCAwO1xuY29uc3QgTUFSS0VSX01BUCA9IG5ldyBNYXAoKTtcbmNvbnN0IEFDVF9TVEFSVCA9ICdzdGFydCc7XG5jb25zdCBBQ1RfRU5EID0gJ2VuZCc7XG5jb25zdCBESUFHTk9TVElDU19FVkVOVCA9ICdzdGF0c2lnOjpkaWFnbm9zdGljcyc7XG5leHBvcnRzLkRpYWdub3N0aWNzID0ge1xuICAgIF9nZXRNYXJrZXJzOiAoc2RrS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBNQVJLRVJfTUFQLmdldChzZGtLZXkpO1xuICAgIH0sXG4gICAgX21hcmtJbml0T3ZlcmFsbFN0YXJ0OiAoc2RrS2V5KSA9PiB7XG4gICAgICAgIF9hZGRNYXJrZXIoc2RrS2V5LCBfY3JlYXRlTWFya2VyKHt9LCBBQ1RfU1RBUlQsICdvdmVyYWxsJykpO1xuICAgIH0sXG4gICAgX21hcmtJbml0T3ZlcmFsbEVuZDogKHNka0tleSwgc3VjY2VzcywgZXZhbHVhdGlvbkRldGFpbHMpID0+IHtcbiAgICAgICAgX2FkZE1hcmtlcihzZGtLZXksIF9jcmVhdGVNYXJrZXIoe1xuICAgICAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgICAgIGVycm9yOiBzdWNjZXNzXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHsgbmFtZTogJ0luaXRpYWxpemVFcnJvcicsIG1lc3NhZ2U6ICdGYWlsZWQgdG8gaW5pdGlhbGl6ZScgfSxcbiAgICAgICAgICAgIGV2YWx1YXRpb25EZXRhaWxzLFxuICAgICAgICB9LCBBQ1RfRU5ELCAnb3ZlcmFsbCcpKTtcbiAgICB9LFxuICAgIF9tYXJrSW5pdE5ldHdvcmtSZXFTdGFydDogKHNka0tleSwgZGF0YSkgPT4ge1xuICAgICAgICBfYWRkTWFya2VyKHNka0tleSwgX2NyZWF0ZU1hcmtlcihkYXRhLCBBQ1RfU1RBUlQsICdpbml0aWFsaXplJywgJ25ldHdvcmtfcmVxdWVzdCcpKTtcbiAgICB9LFxuICAgIF9tYXJrSW5pdE5ldHdvcmtSZXFFbmQ6IChzZGtLZXksIGRhdGEpID0+IHtcbiAgICAgICAgX2FkZE1hcmtlcihzZGtLZXksIF9jcmVhdGVNYXJrZXIoZGF0YSwgQUNUX0VORCwgJ2luaXRpYWxpemUnLCAnbmV0d29ya19yZXF1ZXN0JykpO1xuICAgIH0sXG4gICAgX21hcmtJbml0UHJvY2Vzc1N0YXJ0OiAoc2RrS2V5KSA9PiB7XG4gICAgICAgIF9hZGRNYXJrZXIoc2RrS2V5LCBfY3JlYXRlTWFya2VyKHt9LCBBQ1RfU1RBUlQsICdpbml0aWFsaXplJywgJ3Byb2Nlc3MnKSk7XG4gICAgfSxcbiAgICBfbWFya0luaXRQcm9jZXNzRW5kOiAoc2RrS2V5LCBkYXRhKSA9PiB7XG4gICAgICAgIF9hZGRNYXJrZXIoc2RrS2V5LCBfY3JlYXRlTWFya2VyKGRhdGEsIEFDVF9FTkQsICdpbml0aWFsaXplJywgJ3Byb2Nlc3MnKSk7XG4gICAgfSxcbiAgICBfY2xlYXJNYXJrZXJzOiAoc2RrS2V5KSA9PiB7XG4gICAgICAgIE1BUktFUl9NQVAuZGVsZXRlKHNka0tleSk7XG4gICAgfSxcbiAgICBfZm9ybWF0RXJyb3IoZSkge1xuICAgICAgICBpZiAoIShlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogX3NhZmVHZXRGaWVsZChlLCAnY29kZScpLFxuICAgICAgICAgICAgbmFtZTogX3NhZmVHZXRGaWVsZChlLCAnbmFtZScpLFxuICAgICAgICAgICAgbWVzc2FnZTogX3NhZmVHZXRGaWVsZChlLCAnbWVzc2FnZScpLFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgX2dldERpYWdub3N0aWNzRGF0YShyZXMsIGF0dGVtcHQsIGJvZHksIGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogKHJlcyA9PT0gbnVsbCB8fCByZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlcy5vaykgPT09IHRydWUsXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuc3RhdHVzLFxuICAgICAgICAgICAgc2RrUmVnaW9uOiAoX2EgPSByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuaGVhZGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldCgneC1zdGF0c2lnLXJlZ2lvbicpLFxuICAgICAgICAgICAgaXNEZWx0YTogYm9keS5pbmNsdWRlcygnXCJpc19kZWx0YVwiOnRydWUnKSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhdHRlbXB0LFxuICAgICAgICAgICAgZXJyb3I6IGV4cG9ydHMuRGlhZ25vc3RpY3MuX2Zvcm1hdEVycm9yKGUpLFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgX2VucXVldWVEaWFnbm9zdGljc0V2ZW50KHVzZXIsIGxvZ2dlciwgc2RrLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlcnMgPSBleHBvcnRzLkRpYWdub3N0aWNzLl9nZXRNYXJrZXJzKHNkayk7XG4gICAgICAgIGlmIChtYXJrZXJzID09IG51bGwgfHwgbWFya2Vycy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG92ZXJhbGxJbml0RHVyYXRpb24gPSBtYXJrZXJzW21hcmtlcnMubGVuZ3RoIC0gMV0udGltZXN0YW1wIC0gbWFya2Vyc1swXS50aW1lc3RhbXA7XG4gICAgICAgIGV4cG9ydHMuRGlhZ25vc3RpY3MuX2NsZWFyTWFya2VycyhzZGspO1xuICAgICAgICBjb25zdCBldmVudCA9IF9tYWtlRGlhZ25vc3RpY3NFdmVudCh1c2VyLCB7XG4gICAgICAgICAgICBjb250ZXh0OiAnaW5pdGlhbGl6ZScsXG4gICAgICAgICAgICBtYXJrZXJzOiBtYXJrZXJzLnNsaWNlKCksXG4gICAgICAgICAgICBzdGF0c2lnT3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5lbnF1ZXVlKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIG92ZXJhbGxJbml0RHVyYXRpb247XG4gICAgfSxcbn07XG5mdW5jdGlvbiBfY3JlYXRlTWFya2VyKGRhdGEsIGFjdGlvbiwga2V5LCBzdGVwKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyBrZXk6IGtleSwgYWN0aW9uOiBhY3Rpb24sIHN0ZXA6IHN0ZXAsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9LCBkYXRhKTtcbn1cbmZ1bmN0aW9uIF9tYWtlRGlhZ25vc3RpY3NFdmVudCh1c2VyLCBkYXRhKSB7XG4gICAgY29uc3QgbGF0ZW5jeUV2ZW50ID0ge1xuICAgICAgICBldmVudE5hbWU6IERJQUdOT1NUSUNTX0VWRU5ULFxuICAgICAgICB1c2VyLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgbWV0YWRhdGE6IGRhdGEsXG4gICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgfTtcbiAgICByZXR1cm4gbGF0ZW5jeUV2ZW50O1xufVxuZnVuY3Rpb24gX2FkZE1hcmtlcihzZGtLZXksIG1hcmtlcikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBtYXJrZXJzID0gKF9hID0gTUFSS0VSX01BUC5nZXQoc2RrS2V5KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgbWFya2Vycy5wdXNoKG1hcmtlcik7XG4gICAgTUFSS0VSX01BUC5zZXQoc2RrS2V5LCBtYXJrZXJzKTtcbn1cbmZ1bmN0aW9uIF9zYWZlR2V0RmllbGQoZGF0YSwgZmllbGQpIHtcbiAgICBpZiAoZmllbGQgaW4gZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YVtmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5faXNUeXBlTWF0Y2ggPSBleHBvcnRzLl90eXBlT2YgPSB2b2lkIDA7XG5mdW5jdGlvbiBfdHlwZU9mKGlucHV0KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaW5wdXQpID8gJ2FycmF5JyA6IHR5cGVvZiBpbnB1dDtcbn1cbmV4cG9ydHMuX3R5cGVPZiA9IF90eXBlT2Y7XG5mdW5jdGlvbiBfaXNUeXBlTWF0Y2goYSwgYikge1xuICAgIGNvbnN0IHR5cGVPZiA9ICh4KSA9PiAoQXJyYXkuaXNBcnJheSh4KSA/ICdhcnJheScgOiB0eXBlb2YgeCk7XG4gICAgcmV0dXJuIHR5cGVPZihhKSA9PT0gdHlwZU9mKGIpO1xufVxuZXhwb3J0cy5faXNUeXBlTWF0Y2ggPSBfaXNUeXBlTWF0Y2g7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fZ2V0U29ydGVkT2JqZWN0ID0gZXhwb3J0cy5fREpCMk9iamVjdCA9IGV4cG9ydHMuX0RKQjIgPSB2b2lkIDA7XG5jb25zdCBUeXBpbmdVdGlsc18xID0gcmVxdWlyZShcIi4vVHlwaW5nVXRpbHNcIik7XG5jb25zdCBfREpCMiA9ICh2YWx1ZSkgPT4ge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXJhY3RlciA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyYWN0ZXI7XG4gICAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoaGFzaCA+Pj4gMCk7XG59O1xuZXhwb3J0cy5fREpCMiA9IF9ESkIyO1xuY29uc3QgX0RKQjJPYmplY3QgPSAodmFsdWUsIG1heExldmVscykgPT4ge1xuICAgIHJldHVybiAoMCwgZXhwb3J0cy5fREpCMikoSlNPTi5zdHJpbmdpZnkoKDAsIGV4cG9ydHMuX2dldFNvcnRlZE9iamVjdCkodmFsdWUsIG1heExldmVscykpKTtcbn07XG5leHBvcnRzLl9ESkIyT2JqZWN0ID0gX0RKQjJPYmplY3Q7XG5jb25zdCBfZ2V0U29ydGVkT2JqZWN0ID0gKG9iamVjdCwgbWF4RGVwdGgpID0+IHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpLnNvcnQoKTtcbiAgICBjb25zdCBzb3J0ZWRPYmplY3QgPSB7fTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgICBpZiAobWF4RGVwdGggPT09IDAgfHwgKDAsIFR5cGluZ1V0aWxzXzEuX3R5cGVPZikodmFsdWUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc29ydGVkT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzb3J0ZWRPYmplY3Rba2V5XSA9ICgwLCBleHBvcnRzLl9nZXRTb3J0ZWRPYmplY3QpKHZhbHVlLCBtYXhEZXB0aCAhPSBudWxsID8gbWF4RGVwdGggLSAxIDogbWF4RGVwdGgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzb3J0ZWRPYmplY3Q7XG59O1xuZXhwb3J0cy5fZ2V0U29ydGVkT2JqZWN0ID0gX2dldFNvcnRlZE9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nZXRTdG9yYWdlS2V5ID0gZXhwb3J0cy5fZ2V0VXNlclN0b3JhZ2VLZXkgPSB2b2lkIDA7XG5jb25zdCBIYXNoaW5nXzEgPSByZXF1aXJlKFwiLi9IYXNoaW5nXCIpO1xuZnVuY3Rpb24gX2dldFVzZXJTdG9yYWdlS2V5KHNka0tleSwgdXNlciwgY3VzdG9tS2V5R2VuZXJhdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChjdXN0b21LZXlHZW5lcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGN1c3RvbUtleUdlbmVyYXRvcihzZGtLZXksIHVzZXIpO1xuICAgIH1cbiAgICBjb25zdCBjaWRzID0gdXNlciAmJiB1c2VyLmN1c3RvbUlEcyA/IHVzZXIuY3VzdG9tSURzIDoge307XG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIGB1aWQ6JHsoX2EgPSB1c2VyID09PSBudWxsIHx8IHVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXIudXNlcklEKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJ31gLFxuICAgICAgICBgY2lkczoke09iamVjdC5rZXlzKGNpZHMpXG4gICAgICAgICAgICAuc29ydCgobGVmdEtleSwgcmlnaHRLZXkpID0+IGxlZnRLZXkubG9jYWxlQ29tcGFyZShyaWdodEtleSkpXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IGAke2tleX0tJHtjaWRzW2tleV19YClcbiAgICAgICAgICAgIC5qb2luKCcsJyl9YCxcbiAgICAgICAgYGs6JHtzZGtLZXl9YCxcbiAgICBdO1xuICAgIHJldHVybiAoMCwgSGFzaGluZ18xLl9ESkIyKShwYXJ0cy5qb2luKCd8JykpO1xufVxuZXhwb3J0cy5fZ2V0VXNlclN0b3JhZ2VLZXkgPSBfZ2V0VXNlclN0b3JhZ2VLZXk7XG5mdW5jdGlvbiBfZ2V0U3RvcmFnZUtleShzZGtLZXksIHVzZXIsIGN1c3RvbUtleUdlbmVyYXRvcikge1xuICAgIGlmICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBfZ2V0VXNlclN0b3JhZ2VLZXkoc2RrS2V5LCB1c2VyLCBjdXN0b21LZXlHZW5lcmF0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIEhhc2hpbmdfMS5fREpCMikoYGs6JHtzZGtLZXl9YCk7XG59XG5leHBvcnRzLl9nZXRTdG9yYWdlS2V5ID0gX2dldFN0b3JhZ2VLZXk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OZXR3b3JrUGFyYW0gPSBleHBvcnRzLk5ldHdvcmtEZWZhdWx0ID0gZXhwb3J0cy5FbmRwb2ludCA9IHZvaWQgMDtcbmV4cG9ydHMuRW5kcG9pbnQgPSB7XG4gICAgX2luaXRpYWxpemU6ICdpbml0aWFsaXplJyxcbiAgICBfcmdzdHI6ICdyZ3N0cicsXG4gICAgX2Rvd25sb2FkX2NvbmZpZ19zcGVjczogJ2Rvd25sb2FkX2NvbmZpZ19zcGVjcycsXG59O1xuZXhwb3J0cy5OZXR3b3JrRGVmYXVsdCA9IHtcbiAgICBbZXhwb3J0cy5FbmRwb2ludC5fcmdzdHJdOiAnaHR0cHM6Ly9wcm9kcmVnaXN0cnl2Mi5vcmcvdjEnLFxuICAgIFtleHBvcnRzLkVuZHBvaW50Ll9pbml0aWFsaXplXTogJ2h0dHBzOi8vZmVhdHVyZWFzc2V0cy5vcmcvdjEnLFxuICAgIFtleHBvcnRzLkVuZHBvaW50Ll9kb3dubG9hZF9jb25maWdfc3BlY3NdOiAnaHR0cHM6Ly9hcGkuc3RhdHNpZ2Nkbi5jb20vdjEnLFxufTtcbmV4cG9ydHMuTmV0d29ya1BhcmFtID0ge1xuICAgIEV2ZW50Q291bnQ6ICdlYycsXG4gICAgU2RrS2V5OiAnaycsXG4gICAgU2RrVHlwZTogJ3N0JyxcbiAgICBTZGtWZXJzaW9uOiAnc3YnLFxuICAgIFRpbWU6ICd0JyxcbiAgICBTZXNzaW9uSUQ6ICdzaWQnLFxuICAgIFN0YXRzaWdFbmNvZGVkOiAnc2UnLFxuICAgIElzR3ppcHBlZDogJ2d6Jyxcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fZ2V0Q3VycmVudFBhZ2VVcmxTYWZlID0gZXhwb3J0cy5fYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyU2FmZSA9IGV4cG9ydHMuX2FkZFdpbmRvd0V2ZW50TGlzdGVuZXJTYWZlID0gZXhwb3J0cy5faXNTZXJ2ZXJFbnYgPSBleHBvcnRzLl9nZXREb2N1bWVudFNhZmUgPSBleHBvcnRzLl9nZXRXaW5kb3dTYWZlID0gdm9pZCAwO1xuY29uc3QgX2dldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogbnVsbDtcbn07XG5leHBvcnRzLl9nZXRXaW5kb3dTYWZlID0gX2dldFdpbmRvd1NhZmU7XG5jb25zdCBfZ2V0RG9jdW1lbnRTYWZlID0gKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB3aW4gPSAoMCwgZXhwb3J0cy5fZ2V0V2luZG93U2FmZSkoKTtcbiAgICByZXR1cm4gKF9hID0gd2luID09PSBudWxsIHx8IHdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luLmRvY3VtZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xufTtcbmV4cG9ydHMuX2dldERvY3VtZW50U2FmZSA9IF9nZXREb2N1bWVudFNhZmU7XG5jb25zdCBfaXNTZXJ2ZXJFbnYgPSAoKSA9PiB7XG4gICAgaWYgKCgwLCBleHBvcnRzLl9nZXREb2N1bWVudFNhZmUpKCkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgcHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG4gICAgICAgIHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsO1xuICAgIGNvbnN0IGlzVmVyY2VsID0gdHlwZW9mIEVkZ2VSdW50aW1lID09PSAnc3RyaW5nJztcbiAgICByZXR1cm4gaXNWZXJjZWwgfHwgaXNOb2RlO1xufTtcbmV4cG9ydHMuX2lzU2VydmVyRW52ID0gX2lzU2VydmVyRW52O1xuY29uc3QgX2FkZFdpbmRvd0V2ZW50TGlzdGVuZXJTYWZlID0gKGtleSwgbGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB3aW4gPSAoMCwgZXhwb3J0cy5fZ2V0V2luZG93U2FmZSkoKTtcbiAgICBpZiAodHlwZW9mICh3aW4gPT09IG51bGwgfHwgd2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW4uYWRkRXZlbnRMaXN0ZW5lcikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2luLmFkZEV2ZW50TGlzdGVuZXIoa2V5LCBsaXN0ZW5lcik7XG4gICAgfVxufTtcbmV4cG9ydHMuX2FkZFdpbmRvd0V2ZW50TGlzdGVuZXJTYWZlID0gX2FkZFdpbmRvd0V2ZW50TGlzdGVuZXJTYWZlO1xuY29uc3QgX2FkZERvY3VtZW50RXZlbnRMaXN0ZW5lclNhZmUgPSAoa2V5LCBsaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IGRvYyA9ICgwLCBleHBvcnRzLl9nZXREb2N1bWVudFNhZmUpKCk7XG4gICAgaWYgKHR5cGVvZiAoZG9jID09PSBudWxsIHx8IGRvYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZG9jLmFkZEV2ZW50TGlzdGVuZXIpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKGtleSwgbGlzdGVuZXIpO1xuICAgIH1cbn07XG5leHBvcnRzLl9hZGREb2N1bWVudEV2ZW50TGlzdGVuZXJTYWZlID0gX2FkZERvY3VtZW50RXZlbnRMaXN0ZW5lclNhZmU7XG5jb25zdCBfZ2V0Q3VycmVudFBhZ2VVcmxTYWZlID0gKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gKF9hID0gKDAsIGV4cG9ydHMuX2dldFdpbmRvd1NhZmUpKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sb2NhdGlvbi5ocmVmLnNwbGl0KC9bPyNdLylbMF07XG4gICAgfVxuICAgIGNhdGNoIChfYikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxufTtcbmV4cG9ydHMuX2dldEN1cnJlbnRQYWdlVXJsU2FmZSA9IF9nZXRDdXJyZW50UGFnZVVybFNhZmU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fY3JlYXRlTGF5ZXJQYXJhbWV0ZXJFeHBvc3VyZSA9IGV4cG9ydHMuX2NyZWF0ZUNvbmZpZ0V4cG9zdXJlID0gZXhwb3J0cy5fY3JlYXRlR2F0ZUV4cG9zdXJlID0gZXhwb3J0cy5faXNFeHBvc3VyZUV2ZW50ID0gdm9pZCAwO1xuY29uc3QgQ09ORklHX0VYUE9TVVJFX05BTUUgPSAnc3RhdHNpZzo6Y29uZmlnX2V4cG9zdXJlJztcbmNvbnN0IEdBVEVfRVhQT1NVUkVfTkFNRSA9ICdzdGF0c2lnOjpnYXRlX2V4cG9zdXJlJztcbmNvbnN0IExBWUVSX0VYUE9TVVJFX05BTUUgPSAnc3RhdHNpZzo6bGF5ZXJfZXhwb3N1cmUnO1xuY29uc3QgX2NyZWF0ZUV4cG9zdXJlID0gKGV2ZW50TmFtZSwgdXNlciwgZGV0YWlscywgbWV0YWRhdGEsIHNlY29uZGFyeUV4cG9zdXJlcykgPT4ge1xuICAgIGlmIChkZXRhaWxzLmJvb3RzdHJhcE1ldGFkYXRhKSB7XG4gICAgICAgIG1ldGFkYXRhWydib290c3RyYXBNZXRhZGF0YSddID0gZGV0YWlscy5ib290c3RyYXBNZXRhZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICB1c2VyLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgbWV0YWRhdGE6IF9hZGRFdmFsdWF0aW9uRGV0YWlsc1RvTWV0YWRhdGEoZGV0YWlscywgbWV0YWRhdGEpLFxuICAgICAgICBzZWNvbmRhcnlFeHBvc3VyZXMsXG4gICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgfTtcbn07XG5jb25zdCBfaXNFeHBvc3VyZUV2ZW50ID0gKHsgZXZlbnROYW1lLCB9KSA9PiB7XG4gICAgcmV0dXJuIChldmVudE5hbWUgPT09IEdBVEVfRVhQT1NVUkVfTkFNRSB8fFxuICAgICAgICBldmVudE5hbWUgPT09IENPTkZJR19FWFBPU1VSRV9OQU1FIHx8XG4gICAgICAgIGV2ZW50TmFtZSA9PT0gTEFZRVJfRVhQT1NVUkVfTkFNRSk7XG59O1xuZXhwb3J0cy5faXNFeHBvc3VyZUV2ZW50ID0gX2lzRXhwb3N1cmVFdmVudDtcbmNvbnN0IF9jcmVhdGVHYXRlRXhwb3N1cmUgPSAodXNlciwgZ2F0ZSkgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgICAgICBnYXRlOiBnYXRlLm5hbWUsXG4gICAgICAgIGdhdGVWYWx1ZTogU3RyaW5nKGdhdGUudmFsdWUpLFxuICAgICAgICBydWxlSUQ6IGdhdGUucnVsZUlELFxuICAgIH07XG4gICAgaWYgKCgoX2EgPSBnYXRlLl9fZXZhbHVhdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb24pICE9IG51bGwpIHtcbiAgICAgICAgbWV0YWRhdGFbJ2NvbmZpZ1ZlcnNpb24nXSA9IGdhdGUuX19ldmFsdWF0aW9uLnZlcnNpb247XG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlRXhwb3N1cmUoR0FURV9FWFBPU1VSRV9OQU1FLCB1c2VyLCBnYXRlLmRldGFpbHMsIG1ldGFkYXRhLCAoX2MgPSAoX2IgPSBnYXRlLl9fZXZhbHVhdGlvbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNlY29uZGFyeV9leHBvc3VyZXMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IFtdKTtcbn07XG5leHBvcnRzLl9jcmVhdGVHYXRlRXhwb3N1cmUgPSBfY3JlYXRlR2F0ZUV4cG9zdXJlO1xuY29uc3QgX2NyZWF0ZUNvbmZpZ0V4cG9zdXJlID0gKHVzZXIsIGNvbmZpZykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICAgICAgY29uZmlnOiBjb25maWcubmFtZSxcbiAgICAgICAgcnVsZUlEOiBjb25maWcucnVsZUlELFxuICAgIH07XG4gICAgaWYgKCgoX2EgPSBjb25maWcuX19ldmFsdWF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmVyc2lvbikgIT0gbnVsbCkge1xuICAgICAgICBtZXRhZGF0YVsnY29uZmlnVmVyc2lvbiddID0gY29uZmlnLl9fZXZhbHVhdGlvbi52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAoKChfYiA9IGNvbmZpZy5fX2V2YWx1YXRpb24pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXNzZWQpICE9IG51bGwpIHtcbiAgICAgICAgbWV0YWRhdGFbJ3J1bGVQYXNzZWQnXSA9IFN0cmluZyhjb25maWcuX19ldmFsdWF0aW9uLnBhc3NlZCk7XG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlRXhwb3N1cmUoQ09ORklHX0VYUE9TVVJFX05BTUUsIHVzZXIsIGNvbmZpZy5kZXRhaWxzLCBtZXRhZGF0YSwgKF9kID0gKF9jID0gY29uZmlnLl9fZXZhbHVhdGlvbikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnNlY29uZGFyeV9leHBvc3VyZXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdKTtcbn07XG5leHBvcnRzLl9jcmVhdGVDb25maWdFeHBvc3VyZSA9IF9jcmVhdGVDb25maWdFeHBvc3VyZTtcbmNvbnN0IF9jcmVhdGVMYXllclBhcmFtZXRlckV4cG9zdXJlID0gKHVzZXIsIGxheWVyLCBwYXJhbWV0ZXJOYW1lKSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGNvbnN0IGV2YWx1YXRpb24gPSBsYXllci5fX2V2YWx1YXRpb247XG4gICAgY29uc3QgaXNFeHBsaWNpdCA9ICgoX2EgPSBldmFsdWF0aW9uID09PSBudWxsIHx8IGV2YWx1YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2YWx1YXRpb24uZXhwbGljaXRfcGFyYW1ldGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluY2x1ZGVzKHBhcmFtZXRlck5hbWUpKSA9PT0gdHJ1ZTtcbiAgICBsZXQgYWxsb2NhdGVkRXhwZXJpbWVudCA9ICcnO1xuICAgIGxldCBzZWNvbmRhcnlFeHBvc3VyZXMgPSAoX2IgPSBldmFsdWF0aW9uID09PSBudWxsIHx8IGV2YWx1YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2YWx1YXRpb24udW5kZWxlZ2F0ZWRfc2Vjb25kYXJ5X2V4cG9zdXJlcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgaWYgKGlzRXhwbGljaXQpIHtcbiAgICAgICAgYWxsb2NhdGVkRXhwZXJpbWVudCA9IChfYyA9IGV2YWx1YXRpb24uYWxsb2NhdGVkX2V4cGVyaW1lbnRfbmFtZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJyc7XG4gICAgICAgIHNlY29uZGFyeUV4cG9zdXJlcyA9IGV2YWx1YXRpb24uc2Vjb25kYXJ5X2V4cG9zdXJlcztcbiAgICB9XG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgIGNvbmZpZzogbGF5ZXIubmFtZSxcbiAgICAgICAgcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgcnVsZUlEOiBsYXllci5ydWxlSUQsXG4gICAgICAgIGFsbG9jYXRlZEV4cGVyaW1lbnQsXG4gICAgICAgIGlzRXhwbGljaXRQYXJhbWV0ZXI6IFN0cmluZyhpc0V4cGxpY2l0KSxcbiAgICB9O1xuICAgIGlmICgoKF9kID0gbGF5ZXIuX19ldmFsdWF0aW9uKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudmVyc2lvbikgIT0gbnVsbCkge1xuICAgICAgICBtZXRhZGF0YVsnY29uZmlnVmVyc2lvbiddID0gbGF5ZXIuX19ldmFsdWF0aW9uLnZlcnNpb247XG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlRXhwb3N1cmUoTEFZRVJfRVhQT1NVUkVfTkFNRSwgdXNlciwgbGF5ZXIuZGV0YWlscywgbWV0YWRhdGEsIHNlY29uZGFyeUV4cG9zdXJlcyk7XG59O1xuZXhwb3J0cy5fY3JlYXRlTGF5ZXJQYXJhbWV0ZXJFeHBvc3VyZSA9IF9jcmVhdGVMYXllclBhcmFtZXRlckV4cG9zdXJlO1xuY29uc3QgX2FkZEV2YWx1YXRpb25EZXRhaWxzVG9NZXRhZGF0YSA9IChkZXRhaWxzLCBtZXRhZGF0YSkgPT4ge1xuICAgIG1ldGFkYXRhWydyZWFzb24nXSA9IGRldGFpbHMucmVhc29uO1xuICAgIGlmIChkZXRhaWxzLmxjdXQpIHtcbiAgICAgICAgbWV0YWRhdGFbJ2xjdXQnXSA9IFN0cmluZyhkZXRhaWxzLmxjdXQpO1xuICAgIH1cbiAgICBpZiAoZGV0YWlscy5yZWNlaXZlZEF0KSB7XG4gICAgICAgIG1ldGFkYXRhWydyZWNlaXZlZEF0J10gPSBTdHJpbmcoZGV0YWlscy5yZWNlaXZlZEF0KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9zZXRPYmplY3RJblN0b3JhZ2UgPSBleHBvcnRzLl9nZXRPYmplY3RGcm9tU3RvcmFnZSA9IGV4cG9ydHMuU3RvcmFnZSA9IHZvaWQgMDtcbmNvbnN0IExvZ18xID0gcmVxdWlyZShcIi4vTG9nXCIpO1xuY29uc3QgU2FmZUpzXzEgPSByZXF1aXJlKFwiLi9TYWZlSnNcIik7XG5jb25zdCBpbk1lbW9yeVN0b3JlID0ge307XG5jb25zdCBfaW5NZW1vcnlQcm92aWRlciA9IHtcbiAgICBpc1JlYWR5OiAoKSA9PiB0cnVlLFxuICAgIGlzUmVhZHlSZXNvbHZlcjogKCkgPT4gbnVsbCxcbiAgICBnZXRQcm92aWRlck5hbWU6ICgpID0+ICdJbk1lbW9yeScsXG4gICAgZ2V0SXRlbTogKGtleSkgPT4gaW5NZW1vcnlTdG9yZVtrZXldID8gaW5NZW1vcnlTdG9yZVtrZXldIDogbnVsbCxcbiAgICBzZXRJdGVtOiAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpbk1lbW9yeVN0b3JlW2tleV0gPSB2YWx1ZTtcbiAgICB9LFxuICAgIHJlbW92ZUl0ZW06IChrZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIGluTWVtb3J5U3RvcmVba2V5XTtcbiAgICB9LFxuICAgIGdldEFsbEtleXM6ICgpID0+IE9iamVjdC5rZXlzKGluTWVtb3J5U3RvcmUpLFxufTtcbmxldCBfbG9jYWxTdG9yYWdlUHJvdmlkZXIgPSBudWxsO1xudHJ5IHtcbiAgICBjb25zdCB3aW4gPSAoMCwgU2FmZUpzXzEuX2dldFdpbmRvd1NhZmUpKCk7XG4gICAgaWYgKHdpbiAmJlxuICAgICAgICB3aW4ubG9jYWxTdG9yYWdlICYmXG4gICAgICAgIHR5cGVvZiB3aW4ubG9jYWxTdG9yYWdlLmdldEl0ZW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgX2xvY2FsU3RvcmFnZVByb3ZpZGVyID0ge1xuICAgICAgICAgICAgaXNSZWFkeTogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgIGlzUmVhZHlSZXNvbHZlcjogKCkgPT4gbnVsbCxcbiAgICAgICAgICAgIGdldFByb3ZpZGVyTmFtZTogKCkgPT4gJ0xvY2FsU3RvcmFnZScsXG4gICAgICAgICAgICBnZXRJdGVtOiAoa2V5KSA9PiB3aW4ubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSxcbiAgICAgICAgICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiB3aW4ubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICByZW1vdmVJdGVtOiAoa2V5KSA9PiB3aW4ubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KSxcbiAgICAgICAgICAgIGdldEFsbEtleXM6ICgpID0+IE9iamVjdC5rZXlzKHdpbi5sb2NhbFN0b3JhZ2UpLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmNhdGNoIChlcnJvcikge1xuICAgIExvZ18xLkxvZy53YXJuKCdGYWlsZWQgdG8gc2V0dXAgbG9jYWxTdG9yYWdlUHJvdmlkZXIuJyk7XG59XG5sZXQgX21haW4gPSBfbG9jYWxTdG9yYWdlUHJvdmlkZXIgIT09IG51bGwgJiYgX2xvY2FsU3RvcmFnZVByb3ZpZGVyICE9PSB2b2lkIDAgPyBfbG9jYWxTdG9yYWdlUHJvdmlkZXIgOiBfaW5NZW1vcnlQcm92aWRlcjtcbmxldCBfY3VycmVudCA9IF9tYWluO1xuZnVuY3Rpb24gX2luTWVtb3J5QnJlYWtlcihnZXQpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0KCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnU2VjdXJpdHlFcnJvcicpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuU3RvcmFnZS5fc2V0UHJvdmlkZXIoX2luTWVtb3J5UHJvdmlkZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuZXhwb3J0cy5TdG9yYWdlID0ge1xuICAgIGlzUmVhZHk6ICgpID0+IF9jdXJyZW50LmlzUmVhZHkoKSxcbiAgICBpc1JlYWR5UmVzb2x2ZXI6ICgpID0+IF9jdXJyZW50LmlzUmVhZHlSZXNvbHZlcigpLFxuICAgIGdldFByb3ZpZGVyTmFtZTogKCkgPT4gX2N1cnJlbnQuZ2V0UHJvdmlkZXJOYW1lKCksXG4gICAgZ2V0SXRlbTogKGtleSkgPT4gX2luTWVtb3J5QnJlYWtlcigoKSA9PiBfY3VycmVudC5nZXRJdGVtKGtleSkpLFxuICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiBfY3VycmVudC5zZXRJdGVtKGtleSwgdmFsdWUpLFxuICAgIHJlbW92ZUl0ZW06IChrZXkpID0+IF9jdXJyZW50LnJlbW92ZUl0ZW0oa2V5KSxcbiAgICBnZXRBbGxLZXlzOiAoKSA9PiBfY3VycmVudC5nZXRBbGxLZXlzKCksXG4gICAgLy8gU3RvcmFnZVByb3ZpZGVyTWFuYWdtZW50XG4gICAgX3NldFByb3ZpZGVyOiAobmV3UHJvdmlkZXIpID0+IHtcbiAgICAgICAgX21haW4gPSBuZXdQcm92aWRlcjtcbiAgICAgICAgX2N1cnJlbnQgPSBuZXdQcm92aWRlcjtcbiAgICB9LFxuICAgIF9zZXREaXNhYmxlZDogKGlzRGlzYWJsZWQpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIF9jdXJyZW50ID0gX2luTWVtb3J5UHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfY3VycmVudCA9IF9tYWluO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5mdW5jdGlvbiBfZ2V0T2JqZWN0RnJvbVN0b3JhZ2Uoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSBleHBvcnRzLlN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6ICdudWxsJyk7XG59XG5leHBvcnRzLl9nZXRPYmplY3RGcm9tU3RvcmFnZSA9IF9nZXRPYmplY3RGcm9tU3RvcmFnZTtcbmZ1bmN0aW9uIF9zZXRPYmplY3RJblN0b3JhZ2Uoa2V5LCBvYmopIHtcbiAgICBleHBvcnRzLlN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KG9iaikpO1xufVxuZXhwb3J0cy5fc2V0T2JqZWN0SW5TdG9yYWdlID0gX3NldE9iamVjdEluU3RvcmFnZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVybENvbmZpZ3VyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBOZXR3b3JrQ29uZmlnXzEgPSByZXF1aXJlKFwiLi9OZXR3b3JrQ29uZmlnXCIpO1xuY29uc3QgRU5EUE9JTlRfRE5TX0tFWV9NQVAgPSB7XG4gICAgW05ldHdvcmtDb25maWdfMS5FbmRwb2ludC5faW5pdGlhbGl6ZV06ICdpJyxcbiAgICBbTmV0d29ya0NvbmZpZ18xLkVuZHBvaW50Ll9yZ3N0cl06ICdlJyxcbiAgICBbTmV0d29ya0NvbmZpZ18xLkVuZHBvaW50Ll9kb3dubG9hZF9jb25maWdfc3BlY3NdOiAnZCcsXG59O1xuY2xhc3MgVXJsQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3RydWN0b3IoZW5kcG9pbnQsIGN1c3RvbVVybCwgY3VzdG9tQXBpLCBmYWxsYmFja1VybHMpIHtcbiAgICAgICAgdGhpcy5jdXN0b21VcmwgPSBudWxsO1xuICAgICAgICB0aGlzLmZhbGxiYWNrVXJscyA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDtcbiAgICAgICAgdGhpcy5lbmRwb2ludERuc0tleSA9IEVORFBPSU5UX0ROU19LRVlfTUFQW2VuZHBvaW50XTtcbiAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21VcmwgPSBjdXN0b21Vcmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXN0b21VcmwgJiYgY3VzdG9tQXBpKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbVVybCA9IGN1c3RvbUFwaS5lbmRzV2l0aCgnLycpXG4gICAgICAgICAgICAgICAgPyBgJHtjdXN0b21BcGl9JHtlbmRwb2ludH1gXG4gICAgICAgICAgICAgICAgOiBgJHtjdXN0b21BcGl9LyR7ZW5kcG9pbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFsbGJhY2tVcmxzKSB7XG4gICAgICAgICAgICB0aGlzLmZhbGxiYWNrVXJscyA9IGZhbGxiYWNrVXJscztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0QXBpID0gTmV0d29ya0NvbmZpZ18xLk5ldHdvcmtEZWZhdWx0W2VuZHBvaW50XTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VXJsID0gYCR7ZGVmYXVsdEFwaX0vJHtlbmRwb2ludH1gO1xuICAgIH1cbiAgICBnZXRVcmwoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY3VzdG9tVXJsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmRlZmF1bHRVcmw7XG4gICAgfVxufVxuZXhwb3J0cy5VcmxDb25maWd1cmF0aW9uID0gVXJsQ29uZmlndXJhdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9ub3RpZnlWaXNpYmlsaXR5Q2hhbmdlZCA9IGV4cG9ydHMuX3N1YnNjcmliZVRvVmlzaWJsaXR5Q2hhbmdlZCA9IGV4cG9ydHMuX2lzVW5sb2FkaW5nID0gZXhwb3J0cy5faXNDdXJyZW50bHlWaXNpYmxlID0gdm9pZCAwO1xuY29uc3QgU2FmZUpzXzEgPSByZXF1aXJlKFwiLi9TYWZlSnNcIik7XG5jb25zdCBGT1JFR1JPVU5EID0gJ2ZvcmVncm91bmQnO1xuY29uc3QgQkFDS0dST1VORCA9ICdiYWNrZ3JvdW5kJztcbmNvbnN0IExJU1RFTkVSUyA9IFtdO1xubGV0IGN1cnJlbnQgPSBGT1JFR1JPVU5EO1xubGV0IGlzVW5sb2FkaW5nID0gZmFsc2U7XG5jb25zdCBfaXNDdXJyZW50bHlWaXNpYmxlID0gKCkgPT4ge1xuICAgIHJldHVybiBjdXJyZW50ID09PSBGT1JFR1JPVU5EO1xufTtcbmV4cG9ydHMuX2lzQ3VycmVudGx5VmlzaWJsZSA9IF9pc0N1cnJlbnRseVZpc2libGU7XG5jb25zdCBfaXNVbmxvYWRpbmcgPSAoKSA9PiBpc1VubG9hZGluZztcbmV4cG9ydHMuX2lzVW5sb2FkaW5nID0gX2lzVW5sb2FkaW5nO1xuY29uc3QgX3N1YnNjcmliZVRvVmlzaWJsaXR5Q2hhbmdlZCA9IChsaXN0ZW5lcikgPT4ge1xuICAgIExJU1RFTkVSUy51bnNoaWZ0KGxpc3RlbmVyKTtcbn07XG5leHBvcnRzLl9zdWJzY3JpYmVUb1Zpc2libGl0eUNoYW5nZWQgPSBfc3Vic2NyaWJlVG9WaXNpYmxpdHlDaGFuZ2VkO1xuY29uc3QgX25vdGlmeVZpc2liaWxpdHlDaGFuZ2VkID0gKHZpc2liaWxpdHkpID0+IHtcbiAgICBpZiAodmlzaWJpbGl0eSA9PT0gY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnQgPSB2aXNpYmlsaXR5O1xuICAgIExJU1RFTkVSUy5mb3JFYWNoKChsKSA9PiBsKHZpc2liaWxpdHkpKTtcbn07XG5leHBvcnRzLl9ub3RpZnlWaXNpYmlsaXR5Q2hhbmdlZCA9IF9ub3RpZnlWaXNpYmlsaXR5Q2hhbmdlZDtcbigwLCBTYWZlSnNfMS5fYWRkV2luZG93RXZlbnRMaXN0ZW5lclNhZmUpKCdmb2N1cycsICgpID0+IHtcbiAgICBpc1VubG9hZGluZyA9IGZhbHNlO1xuICAgICgwLCBleHBvcnRzLl9ub3RpZnlWaXNpYmlsaXR5Q2hhbmdlZCkoRk9SRUdST1VORCk7XG59KTtcbigwLCBTYWZlSnNfMS5fYWRkV2luZG93RXZlbnRMaXN0ZW5lclNhZmUpKCdibHVyJywgKCkgPT4gKDAsIGV4cG9ydHMuX25vdGlmeVZpc2liaWxpdHlDaGFuZ2VkKShCQUNLR1JPVU5EKSk7XG4oMCwgU2FmZUpzXzEuX2FkZFdpbmRvd0V2ZW50TGlzdGVuZXJTYWZlKSgnYmVmb3JldW5sb2FkJywgKCkgPT4ge1xuICAgIGlzVW5sb2FkaW5nID0gdHJ1ZTtcbiAgICAoMCwgZXhwb3J0cy5fbm90aWZ5VmlzaWJpbGl0eUNoYW5nZWQpKEJBQ0tHUk9VTkQpO1xufSk7XG4oMCwgU2FmZUpzXzEuX2FkZERvY3VtZW50RXZlbnRMaXN0ZW5lclNhZmUpKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xuICAgICgwLCBleHBvcnRzLl9ub3RpZnlWaXNpYmlsaXR5Q2hhbmdlZCkoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScgPyBGT1JFR1JPVU5EIDogQkFDS0dST1VORCk7XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXZlbnRMb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBDYWNoZUtleV8xID0gcmVxdWlyZShcIi4vQ2FjaGVLZXlcIik7XG5jb25zdCBIYXNoaW5nXzEgPSByZXF1aXJlKFwiLi9IYXNoaW5nXCIpO1xuY29uc3QgTG9nXzEgPSByZXF1aXJlKFwiLi9Mb2dcIik7XG5jb25zdCBOZXR3b3JrQ29uZmlnXzEgPSByZXF1aXJlKFwiLi9OZXR3b3JrQ29uZmlnXCIpO1xuY29uc3QgU2FmZUpzXzEgPSByZXF1aXJlKFwiLi9TYWZlSnNcIik7XG5jb25zdCBTdGF0c2lnRXZlbnRfMSA9IHJlcXVpcmUoXCIuL1N0YXRzaWdFdmVudFwiKTtcbmNvbnN0IFN0b3JhZ2VQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vU3RvcmFnZVByb3ZpZGVyXCIpO1xuY29uc3QgVXJsQ29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vVXJsQ29uZmlndXJhdGlvblwiKTtcbmNvbnN0IFZpc2liaWxpdHlPYnNlcnZpbmdfMSA9IHJlcXVpcmUoXCIuL1Zpc2liaWxpdHlPYnNlcnZpbmdcIik7XG5jb25zdCBERUZBVUxUX1FVRVVFX1NJWkUgPSAxMDA7XG5jb25zdCBERUZBVUxUX0ZMVVNIX0lOVEVSVkFMX01TID0gMTAwMDA7XG5jb25zdCBNQVhfREVEVVBFUl9LRVlTID0gMTAwMDtcbmNvbnN0IERFRFVQRVJfV0lORE9XX0RVUkFUSU9OX01TID0gNjAwMDAwO1xuY29uc3QgTUFYX0ZBSUxFRF9MT0dTID0gNTAwO1xuY29uc3QgUVVJQ0tfRkxVU0hfV0lORE9XX01TID0gMjAwO1xuY29uc3QgRVZFTlRfTE9HR0VSX01BUCA9IHt9O1xuY29uc3QgUmV0cnlGYWlsZWRMb2dzVHJpZ2dlciA9IHtcbiAgICBTdGFydHVwOiAnc3RhcnR1cCcsXG4gICAgR2FpbmVkRm9jdXM6ICdnYWluZWRfZm9jdXMnLFxufTtcbmNsYXNzIEV2ZW50TG9nZ2VyIHtcbiAgICBzdGF0aWMgX3NhZmVGbHVzaEFuZEZvcmdldChzZGtLZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBFVkVOVF9MT0dHRVJfTUFQW3Nka0tleV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mbHVzaCgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBfc2FmZVJldHJ5RmFpbGVkTG9ncyhzZGtLZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBFVkVOVF9MT0dHRVJfTUFQW3Nka0tleV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5fcmV0cnlGYWlsZWRMb2dzKFJldHJ5RmFpbGVkTG9nc1RyaWdnZXIuR2FpbmVkRm9jdXMpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihfc2RrS2V5LCBfZW1pdHRlciwgX25ldHdvcmssIF9vcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fc2RrS2V5ID0gX3Nka0tleTtcbiAgICAgICAgdGhpcy5fZW1pdHRlciA9IF9lbWl0dGVyO1xuICAgICAgICB0aGlzLl9uZXR3b3JrID0gX25ldHdvcms7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5fbGFzdEV4cG9zdXJlVGltZU1hcCA9IHt9O1xuICAgICAgICB0aGlzLl9ub25FeHBvc2VkQ2hlY2tzID0ge307XG4gICAgICAgIHRoaXMuX2hhc1J1blF1aWNrRmx1c2ggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3JlYXRpb25UaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5faXNMb2dnaW5nRGlzYWJsZWQgPSAoX29wdGlvbnMgPT09IG51bGwgfHwgX29wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zLmRpc2FibGVMb2dnaW5nKSA9PT0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWF4UXVldWVTaXplID0gKF9hID0gX29wdGlvbnMgPT09IG51bGwgfHwgX29wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zLmxvZ2dpbmdCdWZmZXJNYXhTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1FVRVVFX1NJWkU7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IF9vcHRpb25zID09PSBudWxsIHx8IF9vcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucy5uZXR3b3JrQ29uZmlnO1xuICAgICAgICB0aGlzLl9sb2dFdmVudFVybENvbmZpZyA9IG5ldyBVcmxDb25maWd1cmF0aW9uXzEuVXJsQ29uZmlndXJhdGlvbihOZXR3b3JrQ29uZmlnXzEuRW5kcG9pbnQuX3Jnc3RyLCBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcubG9nRXZlbnRVcmwsIGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5hcGksIGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5sb2dFdmVudEZhbGxiYWNrVXJscyk7XG4gICAgfVxuICAgIHNldExvZ2dpbmdEaXNhYmxlZChpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuX2lzTG9nZ2luZ0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgZW5xdWV1ZShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZExvZ0V2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZUFuZEFwcGVuZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgdGhpcy5fcXVpY2tGbHVzaElmTmVlZGVkKCk7XG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiB0aGlzLl9tYXhRdWV1ZVNpemUpIHtcbiAgICAgICAgICAgIEV2ZW50TG9nZ2VyLl9zYWZlRmx1c2hBbmRGb3JnZXQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbmNyZW1lbnROb25FeHBvc3VyZUNvdW50KG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gKF9hID0gdGhpcy5fbm9uRXhwb3NlZENoZWNrc1tuYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgdGhpcy5fbm9uRXhwb3NlZENoZWNrc1tuYW1lXSA9IGN1cnJlbnQgKyAxO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fbGFzdEV4cG9zdXJlVGltZU1hcCA9IHt9O1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCgwLCBTYWZlSnNfMS5faXNTZXJ2ZXJFbnYpKCkpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gZG8gbm90IHJ1biBpbiBzZXJ2ZXIgZW52aXJvbm1lbnRzXG4gICAgICAgIH1cbiAgICAgICAgRVZFTlRfTE9HR0VSX01BUFt0aGlzLl9zZGtLZXldID0gdGhpcztcbiAgICAgICAgKDAsIFZpc2liaWxpdHlPYnNlcnZpbmdfMS5fc3Vic2NyaWJlVG9WaXNpYmxpdHlDaGFuZ2VkKSgodmlzaWJpbGl0eSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZpc2liaWxpdHkgPT09ICdiYWNrZ3JvdW5kJykge1xuICAgICAgICAgICAgICAgIEV2ZW50TG9nZ2VyLl9zYWZlRmx1c2hBbmRGb3JnZXQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZpc2liaWxpdHkgPT09ICdmb3JlZ3JvdW5kJykge1xuICAgICAgICAgICAgICAgIEV2ZW50TG9nZ2VyLl9zYWZlUmV0cnlGYWlsZWRMb2dzKHRoaXMuX3Nka0tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXRyeUZhaWxlZExvZ3MoUmV0cnlGYWlsZWRMb2dzVHJpZ2dlci5TdGFydHVwKTtcbiAgICAgICAgdGhpcy5fc3RhcnRCYWNrZ3JvdW5kRmx1c2hJbnRlcnZhbCgpO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZsdXNoSW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZmx1c2hJbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mbHVzaEludGVydmFsSWQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIEVWRU5UX0xPR0dFUl9NQVBbdGhpcy5fc2RrS2V5XTtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuZmx1c2goKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZsdXNoKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdGhpcy5fYXBwZW5kQW5kUmVzZXROb25FeHBvc2VkQ2hlY2tzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5fcXVldWU7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5fc2VuZEV2ZW50cyhldmVudHMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2UgJ1F1aWNrIEZsdXNoJyBmb2xsb3dpbmcgdGhlIHZlcnkgZmlyc3QgZXZlbnQgZW5xdWV1ZWRcbiAgICAgKiB3aXRoaW4gdGhlIHF1aWNrIGZsdXNoIHdpbmRvd1xuICAgICAqL1xuICAgIF9xdWlja0ZsdXNoSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXNSdW5RdWlja0ZsdXNoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGFzUnVuUXVpY2tGbHVzaCA9IHRydWU7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5fY3JlYXRpb25UaW1lID4gUVVJQ0tfRkxVU0hfV0lORE9XX01TKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBFdmVudExvZ2dlci5fc2FmZUZsdXNoQW5kRm9yZ2V0KHRoaXMuX3Nka0tleSksIFFVSUNLX0ZMVVNIX1dJTkRPV19NUyk7XG4gICAgfVxuICAgIF9zaG91bGRMb2dFdmVudChldmVudCkge1xuICAgICAgICBpZiAoKDAsIFNhZmVKc18xLl9pc1NlcnZlckVudikoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBkbyBub3QgcnVuIGluIHNlcnZlciBlbnZpcm9ubWVudHNcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBTdGF0c2lnRXZlbnRfMS5faXNFeHBvc3VyZUV2ZW50KShldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVzZXIgPSBldmVudC51c2VyID8gZXZlbnQudXNlciA6IHsgc3RhdHNpZ0Vudmlyb25tZW50OiB1bmRlZmluZWQgfTtcbiAgICAgICAgY29uc3QgdXNlcktleSA9ICgwLCBDYWNoZUtleV8xLl9nZXRVc2VyU3RvcmFnZUtleSkodGhpcy5fc2RrS2V5LCB1c2VyKTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBldmVudC5tZXRhZGF0YSA/IGV2ZW50Lm1ldGFkYXRhIDoge307XG4gICAgICAgIGNvbnN0IGtleSA9IFtcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIHVzZXJLZXksXG4gICAgICAgICAgICBtZXRhZGF0YVsnZ2F0ZSddLFxuICAgICAgICAgICAgbWV0YWRhdGFbJ2NvbmZpZyddLFxuICAgICAgICAgICAgbWV0YWRhdGFbJ3J1bGVJRCddLFxuICAgICAgICAgICAgbWV0YWRhdGFbJ2FsbG9jYXRlZEV4cGVyaW1lbnQnXSxcbiAgICAgICAgICAgIG1ldGFkYXRhWydwYXJhbWV0ZXJOYW1lJ10sXG4gICAgICAgICAgICBTdHJpbmcobWV0YWRhdGFbJ2lzRXhwbGljaXRQYXJhbWV0ZXInXSksXG4gICAgICAgICAgICBtZXRhZGF0YVsncmVhc29uJ10sXG4gICAgICAgIF0uam9pbignfCcpO1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX2xhc3RFeHBvc3VyZVRpbWVNYXBba2V5XTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIG5vdyAtIHByZXZpb3VzIDwgREVEVVBFUl9XSU5ET1dfRFVSQVRJT05fTVMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fbGFzdEV4cG9zdXJlVGltZU1hcCkubGVuZ3RoID4gTUFYX0RFRFVQRVJfS0VZUykge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEV4cG9zdXJlVGltZU1hcCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RFeHBvc3VyZVRpbWVNYXBba2V5XSA9IG5vdztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIF9zZW5kRXZlbnRzKGV2ZW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTG9nZ2luZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2F2ZUZhaWxlZExvZ3NUb1N0b3JhZ2UoZXZlbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2xvc2luZyA9ICgwLCBWaXNpYmlsaXR5T2JzZXJ2aW5nXzEuX2lzVW5sb2FkaW5nKSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZUJlYWNvbiA9IGlzQ2xvc2luZyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXR3b3JrLmlzQmVhY29uU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IHRoaXMuX29wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXR3b3JrQ29uZmlnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubmV0d29ya092ZXJyaWRlRnVuYykgPT0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ByZV9sb2dzX2ZsdXNoZWQnLFxuICAgICAgICAgICAgICAgICAgICBldmVudHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBzaG91bGRVc2VCZWFjb25cbiAgICAgICAgICAgICAgICAgICAgPyB5aWVsZCB0aGlzLl9zZW5kRXZlbnRzVmlhQmVhY29uKGV2ZW50cylcbiAgICAgICAgICAgICAgICAgICAgOiB5aWVsZCB0aGlzLl9zZW5kRXZlbnRzVmlhUG9zdChldmVudHMpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xvZ3NfZmx1c2hlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIExvZ18xLkxvZy53YXJuKCdGYWlsZWQgdG8gZmx1c2ggZXZlbnRzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYXZlRmFpbGVkTG9nc1RvU3RvcmFnZShldmVudHMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9jKSB7XG4gICAgICAgICAgICAgICAgTG9nXzEuTG9nLndhcm4oJ0ZhaWxlZCB0byBmbHVzaCBldmVudHMuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NlbmRFdmVudHNWaWFQb3N0KGV2ZW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB0aGlzLl9uZXR3b3JrLnBvc3QodGhpcy5fZ2V0UmVxdWVzdERhdGEoZXZlbnRzKSk7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gKF9hID0gcmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzdWx0LmNvZGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IC0xO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogY29kZSA+PSAyMDAgJiYgY29kZSA8IDMwMCB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NlbmRFdmVudHNWaWFCZWFjb24oZXZlbnRzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHlpZWxkIHRoaXMuX25ldHdvcmsuYmVhY29uKHRoaXMuX2dldFJlcXVlc3REYXRhKGV2ZW50cykpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRSZXF1ZXN0RGF0YShldmVudHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNka0tleTogdGhpcy5fc2RrS2V5LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cmxDb25maWc6IHRoaXMuX2xvZ0V2ZW50VXJsQ29uZmlnLFxuICAgICAgICAgICAgcmV0cmllczogMyxcbiAgICAgICAgICAgIGlzQ29tcHJlc3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgW05ldHdvcmtDb25maWdfMS5OZXR3b3JrUGFyYW0uRXZlbnRDb3VudF06IFN0cmluZyhldmVudHMubGVuZ3RoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9zYXZlRmFpbGVkTG9nc1RvU3RvcmFnZShldmVudHMpIHtcbiAgICAgICAgd2hpbGUgKGV2ZW50cy5sZW5ndGggPiBNQVhfRkFJTEVEX0xPR1MpIHtcbiAgICAgICAgICAgIGV2ZW50cy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSB0aGlzLl9nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAoMCwgU3RvcmFnZVByb3ZpZGVyXzEuX3NldE9iamVjdEluU3RvcmFnZSkoc3RvcmFnZUtleSwgZXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIExvZ18xLkxvZy53YXJuKCdVbmFibGUgdG8gc2F2ZSBmYWlsZWQgbG9ncyB0byBzdG9yYWdlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3JldHJ5RmFpbGVkTG9ncyh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSB0aGlzLl9nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgICgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIVN0b3JhZ2VQcm92aWRlcl8xLlN0b3JhZ2UuaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgU3RvcmFnZVByb3ZpZGVyXzEuU3RvcmFnZS5pc1JlYWR5UmVzb2x2ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9ICgwLCBTdG9yYWdlUHJvdmlkZXJfMS5fZ2V0T2JqZWN0RnJvbVN0b3JhZ2UpKHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlciA9PT0gUmV0cnlGYWlsZWRMb2dzVHJpZ2dlci5TdGFydHVwKSB7XG4gICAgICAgICAgICAgICAgU3RvcmFnZVByb3ZpZGVyXzEuU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNTdWNjZXNzID0geWllbGQgdGhpcy5fc2VuZEV2ZW50cyhldmVudHMpO1xuICAgICAgICAgICAgaWYgKGlzU3VjY2VzcyAmJiB0cmlnZ2VyID09PSBSZXRyeUZhaWxlZExvZ3NUcmlnZ2VyLkdhaW5lZEZvY3VzKSB7XG4gICAgICAgICAgICAgICAgU3RvcmFnZVByb3ZpZGVyXzEuU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSkoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICBMb2dfMS5Mb2cud2FybignRmFpbGVkIHRvIGZsdXNoIHN0b3JlZCBsb2dzJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0U3RvcmFnZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIGBzdGF0c2lnLmZhaWxlZF9sb2dzLiR7KDAsIEhhc2hpbmdfMS5fREpCMikodGhpcy5fc2RrS2V5KX1gO1xuICAgIH1cbiAgICBfbm9ybWFsaXplQW5kQXBwZW5kRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnVzZXIpIHtcbiAgICAgICAgICAgIGV2ZW50LnVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC51c2VyKTtcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudC51c2VyLnByaXZhdGVBdHRyaWJ1dGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4dHJhcyA9IHt9O1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuX2dldEN1cnJlbnRQYWdlVXJsKCk7XG4gICAgICAgIGlmIChjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgZXh0cmFzLnN0YXRzaWdNZXRhZGF0YSA9IHsgY3VycmVudFBhZ2UgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQpLCBleHRyYXMpO1xuICAgICAgICBMb2dfMS5Mb2cuZGVidWcoJ0VucXVldWVkIEV2ZW50OicsIGZpbmFsKTtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaChmaW5hbCk7XG4gICAgfVxuICAgIF9hcHBlbmRBbmRSZXNldE5vbkV4cG9zZWRDaGVja3MoKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9ub25FeHBvc2VkQ2hlY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub3JtYWxpemVBbmRBcHBlbmRFdmVudCh7XG4gICAgICAgICAgICBldmVudE5hbWU6ICdzdGF0c2lnOjpub25fZXhwb3NlZF9jaGVja3MnLFxuICAgICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIGNoZWNrczogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fbm9uRXhwb3NlZENoZWNrcyksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbm9uRXhwb3NlZENoZWNrcyA9IHt9O1xuICAgIH1cbiAgICBfZ2V0Q3VycmVudFBhZ2VVcmwoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCgoX2EgPSB0aGlzLl9vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5jbHVkZUN1cnJlbnRQYWdlVXJsV2l0aEV2ZW50cykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgwLCBTYWZlSnNfMS5fZ2V0Q3VycmVudFBhZ2VVcmxTYWZlKSgpO1xuICAgIH1cbiAgICBfc3RhcnRCYWNrZ3JvdW5kRmx1c2hJbnRlcnZhbCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZmx1c2hJbnRlcnZhbCA9IChfYiA9IChfYSA9IHRoaXMuX29wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sb2dnaW5nSW50ZXJ2YWxNcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogREVGQVVMVF9GTFVTSF9JTlRFUlZBTF9NUztcbiAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IEVWRU5UX0xPR0dFUl9NQVBbdGhpcy5fc2RrS2V5XTtcbiAgICAgICAgICAgIGlmICghbG9nZ2VyIHx8IGxvZ2dlci5fZmx1c2hJbnRlcnZhbElkICE9PSBpbnRlcnZhbElkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIEV2ZW50TG9nZ2VyLl9zYWZlRmx1c2hBbmRGb3JnZXQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZmx1c2hJbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuX2ZsdXNoSW50ZXJ2YWxJZCA9IGludGVydmFsSWQ7XG4gICAgfVxufVxuZXhwb3J0cy5FdmVudExvZ2dlciA9IEV2ZW50TG9nZ2VyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RhdHNpZ01ldGFkYXRhUHJvdmlkZXIgPSBleHBvcnRzLlNES19WRVJTSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5TREtfVkVSU0lPTiA9ICczLjEyLjAnO1xubGV0IG1ldGFkYXRhID0ge1xuICAgIHNka1ZlcnNpb246IGV4cG9ydHMuU0RLX1ZFUlNJT04sXG4gICAgc2RrVHlwZTogJ2pzLW1vbm8nLCAvLyBqcy1tb25vIGlzIG92ZXJ3cml0dGVuIGJ5IFByZWNvbXAgYW5kIE9uRGV2aWNlIGNsaWVudHNcbn07XG5leHBvcnRzLlN0YXRzaWdNZXRhZGF0YVByb3ZpZGVyID0ge1xuICAgIGdldDogKCkgPT4gbWV0YWRhdGEsXG4gICAgYWRkOiAoYWRkaXRpb25zKSA9PiB7XG4gICAgICAgIG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZXRhZGF0YSksIGFkZGl0aW9ucyk7XG4gICAgfSxcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VVVJRCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGdldFVVSUQoKSB7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICB9XG4gICAgbGV0IGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgZDIgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBwZXJmb3JtYW5jZS5ub3cgJiZcbiAgICAgICAgcGVyZm9ybWFuY2Uubm93KCkgKiAxMDAwKSB8fFxuICAgICAgICAwO1xuICAgIGNvbnN0IHkgPSAnODlhYidbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldO1xuICAgIHJldHVybiBgeHh4eHh4eHgteHh4eC00eHh4LSR7eX14eHgteHh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XG4gICAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2O1xuICAgICAgICBpZiAoZCA+IDApIHtcbiAgICAgICAgICAgIHIgPSAoZCArIHIpICUgMTYgfCAwO1xuICAgICAgICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHIgPSAoZDIgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgICAgIGQyID0gTWF0aC5mbG9vcihkMiAvIDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGMgPT09ICd4JyA/IHIgOiAociAmIDB4NykgfCAweDgpLnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0VVVJRCA9IGdldFVVSUQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdGFibGVJRCA9IHZvaWQgMDtcbmNvbnN0IENhY2hlS2V5XzEgPSByZXF1aXJlKFwiLi9DYWNoZUtleVwiKTtcbmNvbnN0IExvZ18xID0gcmVxdWlyZShcIi4vTG9nXCIpO1xuY29uc3QgU3RvcmFnZVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9TdG9yYWdlUHJvdmlkZXJcIik7XG5jb25zdCBVVUlEXzEgPSByZXF1aXJlKFwiLi9VVUlEXCIpO1xuY29uc3QgUFJPTUlTRV9NQVAgPSB7fTtcbmV4cG9ydHMuU3RhYmxlSUQgPSB7XG4gICAgZ2V0OiAoc2RrS2V5KSA9PiB7XG4gICAgICAgIGlmIChQUk9NSVNFX01BUFtzZGtLZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBzdGFibGVJRCA9IF9sb2FkRnJvbVN0b3JhZ2Uoc2RrS2V5KTtcbiAgICAgICAgICAgIGlmIChzdGFibGVJRCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3RhYmxlSUQgPSAoMCwgVVVJRF8xLmdldFVVSUQpKCk7XG4gICAgICAgICAgICAgICAgX3BlcnNpc3RUb1N0b3JhZ2Uoc3RhYmxlSUQsIHNka0tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBQUk9NSVNFX01BUFtzZGtLZXldID0gc3RhYmxlSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBST01JU0VfTUFQW3Nka0tleV07XG4gICAgfSxcbiAgICBzZXRPdmVycmlkZTogKG92ZXJyaWRlLCBzZGtLZXkpID0+IHtcbiAgICAgICAgUFJPTUlTRV9NQVBbc2RrS2V5XSA9IG92ZXJyaWRlO1xuICAgICAgICBfcGVyc2lzdFRvU3RvcmFnZShvdmVycmlkZSwgc2RrS2V5KTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIF9nZXRTdGFibGVJRFN0b3JhZ2VLZXkoc2RrS2V5KSB7XG4gICAgcmV0dXJuIGBzdGF0c2lnLnN0YWJsZV9pZC4keygwLCBDYWNoZUtleV8xLl9nZXRTdG9yYWdlS2V5KShzZGtLZXkpfWA7XG59XG5mdW5jdGlvbiBfcGVyc2lzdFRvU3RvcmFnZShzdGFibGVJRCwgc2RrS2V5KSB7XG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IF9nZXRTdGFibGVJRFN0b3JhZ2VLZXkoc2RrS2V5KTtcbiAgICB0cnkge1xuICAgICAgICAoMCwgU3RvcmFnZVByb3ZpZGVyXzEuX3NldE9iamVjdEluU3RvcmFnZSkoc3RvcmFnZUtleSwgc3RhYmxlSUQpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBMb2dfMS5Mb2cud2FybignRmFpbGVkIHRvIHNhdmUgU3RhYmxlSUQnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfbG9hZEZyb21TdG9yYWdlKHNka0tleSkge1xuICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBfZ2V0U3RhYmxlSURTdG9yYWdlS2V5KHNka0tleSk7XG4gICAgcmV0dXJuICgwLCBTdG9yYWdlUHJvdmlkZXJfMS5fZ2V0T2JqZWN0RnJvbVN0b3JhZ2UpKHN0b3JhZ2VLZXkpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2dldEZ1bGxVc2VySGFzaCA9IGV4cG9ydHMuX25vcm1hbGl6ZVVzZXIgPSB2b2lkIDA7XG5jb25zdCBIYXNoaW5nXzEgPSByZXF1aXJlKFwiLi9IYXNoaW5nXCIpO1xuY29uc3QgTG9nXzEgPSByZXF1aXJlKFwiLi9Mb2dcIik7XG5mdW5jdGlvbiBfbm9ybWFsaXplVXNlcihvcmlnaW5hbCwgb3B0aW9ucywgZmFsbGJhY2tFbnZpcm9ubWVudCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsKSk7XG4gICAgICAgIGlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5lbnZpcm9ubWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb3B5LnN0YXRzaWdFbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tFbnZpcm9ubWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb3B5LnN0YXRzaWdFbnZpcm9ubWVudCA9IHsgdGllcjogZmFsbGJhY2tFbnZpcm9ubWVudCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgTG9nXzEuTG9nLmVycm9yKCdGYWlsZWQgdG8gSlNPTi5zdHJpbmdpZnkgdXNlcicpO1xuICAgICAgICByZXR1cm4geyBzdGF0c2lnRW52aXJvbm1lbnQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbn1cbmV4cG9ydHMuX25vcm1hbGl6ZVVzZXIgPSBfbm9ybWFsaXplVXNlcjtcbmZ1bmN0aW9uIF9nZXRGdWxsVXNlckhhc2godXNlcikge1xuICAgIHJldHVybiB1c2VyID8gKDAsIEhhc2hpbmdfMS5fREpCMk9iamVjdCkodXNlcikgOiBudWxsO1xufVxuZXhwb3J0cy5fZ2V0RnVsbFVzZXJIYXNoID0gX2dldEZ1bGxVc2VySGFzaDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl90eXBlZEpzb25QYXJzZSA9IHZvaWQgMDtcbmNvbnN0IExvZ18xID0gcmVxdWlyZShcIi4vTG9nXCIpO1xuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIHZhbHVlcyB0byBwYXJzZSBpbnRvIFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBndWFyZCBBIGZpZWxkIHRoYXQgbXVzdCBleGlzdHMgb24gdGhlIHBhcnNlZCBvYmplY3QgZm9yIHRoZSBwYXJzZSB0byBiZSB2YWxpZFxuICogQHBhcmFtIHtzdHJpbmd9IGVycm9yIEFuIGVycm9yIHRvIHByaW50IHZpYSBMb2cuZXJyb3IoKSB3aGVuIHBhcnNpbmcgZmFpbHNcbiAqIEByZXR1cm5zIHtUIHwgbnVsbH0gVGhlIHBhcnNlIG9iamVjdCBUIG9yIG51bGwgaWYgaXQgZmFpbGVkXG4gKi9cbmZ1bmN0aW9uIF90eXBlZEpzb25QYXJzZShkYXRhLCBndWFyZCwgdHlwZU5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICBpZiAocmVzdWx0ICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgZ3VhcmQgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICAvLyBub29wXG4gICAgfVxuICAgIExvZ18xLkxvZy5lcnJvcihgRmFpbGVkIHRvIHBhcnNlICR7dHlwZU5hbWV9YCk7XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLl90eXBlZEpzb25QYXJzZSA9IF90eXBlZEpzb25QYXJzZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX21ha2VEYXRhQWRhcHRlclJlc3VsdCA9IGV4cG9ydHMuRGF0YUFkYXB0ZXJDb3JlID0gdm9pZCAwO1xuY29uc3QgTG9nXzEgPSByZXF1aXJlKFwiLi9Mb2dcIik7XG5jb25zdCBTdGFibGVJRF8xID0gcmVxdWlyZShcIi4vU3RhYmxlSURcIik7XG5jb25zdCBTdGF0c2lnVXNlcl8xID0gcmVxdWlyZShcIi4vU3RhdHNpZ1VzZXJcIik7XG5jb25zdCBTdG9yYWdlUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL1N0b3JhZ2VQcm92aWRlclwiKTtcbmNvbnN0IFR5cGVkSnNvblBhcnNlXzEgPSByZXF1aXJlKFwiLi9UeXBlZEpzb25QYXJzZVwiKTtcbmNvbnN0IENBQ0hFX0xJTUlUID0gMTA7XG5jbGFzcyBEYXRhQWRhcHRlckNvcmUge1xuICAgIGNvbnN0cnVjdG9yKF9hZGFwdGVyTmFtZSwgX2NhY2hlU3VmZml4KSB7XG4gICAgICAgIHRoaXMuX2FkYXB0ZXJOYW1lID0gX2FkYXB0ZXJOYW1lO1xuICAgICAgICB0aGlzLl9jYWNoZVN1ZmZpeCA9IF9jYWNoZVN1ZmZpeDtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Nka0tleSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhc3RNb2RpZmllZFN0b3JlS2V5ID0gYHN0YXRzaWcubGFzdF9tb2RpZmllZF90aW1lLiR7X2NhY2hlU3VmZml4fWA7XG4gICAgICAgIHRoaXMuX2luTWVtb3J5Q2FjaGUgPSBuZXcgSW5NZW1vcnlDYWNoZSgpO1xuICAgIH1cbiAgICBhdHRhY2goc2RrS2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3Nka0tleSA9IHNka0tleTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldERhdGFTeW5jKHVzZXIpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHVzZXIgJiYgKDAsIFN0YXRzaWdVc2VyXzEuX25vcm1hbGl6ZVVzZXIpKHVzZXIsIHRoaXMuX29wdGlvbnMpO1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuX2dldENhY2hlS2V5KG5vcm1hbGl6ZWQpO1xuICAgICAgICBjb25zdCBpbk1lbSA9IHRoaXMuX2luTWVtb3J5Q2FjaGUuZ2V0KGNhY2hlS2V5LCBub3JtYWxpemVkKTtcbiAgICAgICAgaWYgKGluTWVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5NZW07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLl9sb2FkRnJvbUNhY2hlKGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbk1lbW9yeUNhY2hlLmFkZChjYWNoZUtleSwgY2FjaGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luTWVtb3J5Q2FjaGUuZ2V0KGNhY2hlS2V5LCBub3JtYWxpemVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0RGF0YShkYXRhLCB1c2VyKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB1c2VyICYmICgwLCBTdGF0c2lnVXNlcl8xLl9ub3JtYWxpemVVc2VyKSh1c2VyLCB0aGlzLl9vcHRpb25zKTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLl9nZXRDYWNoZUtleShub3JtYWxpemVkKTtcbiAgICAgICAgdGhpcy5faW5NZW1vcnlDYWNoZS5hZGQoY2FjaGVLZXksIF9tYWtlRGF0YUFkYXB0ZXJSZXN1bHQoJ0Jvb3RzdHJhcCcsIGRhdGEsIG51bGwsIG5vcm1hbGl6ZWQpKTtcbiAgICB9XG4gICAgX2dldERhdGFBc3luY0ltcGwoY3VycmVudCwgdXNlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKCFTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFN0b3JhZ2VQcm92aWRlcl8xLlN0b3JhZ2UuaXNSZWFkeVJlc29sdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYWNoZSA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdm9pZCAwID8gY3VycmVudCA6IHRoaXMuZ2V0RGF0YVN5bmModXNlcik7XG4gICAgICAgICAgICBjb25zdCBvcHMgPSBbdGhpcy5fZmV0Y2hBbmRQcmVwRnJvbU5ldHdvcmsoY2FjaGUsIHVzZXIsIG9wdGlvbnMpXTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGltZW91dE1zKSB7XG4gICAgICAgICAgICAgICAgb3BzLnB1c2gobmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgb3B0aW9ucy50aW1lb3V0TXMpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgTG9nXzEuTG9nLmRlYnVnKCdGZXRjaGluZyBsYXRlc3QgdmFsdWUgdGltZWQgb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBQcm9taXNlLnJhY2Uob3BzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9wcmVmZXRjaERhdGFJbXBsKHVzZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB1c2VyICYmICgwLCBTdGF0c2lnVXNlcl8xLl9ub3JtYWxpemVVc2VyKSh1c2VyLCB0aGlzLl9vcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5fZ2V0Q2FjaGVLZXkobm9ybWFsaXplZCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB0aGlzLl9nZXREYXRhQXN5bmNJbXBsKG51bGwsIG5vcm1hbGl6ZWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luTWVtb3J5Q2FjaGUuYWRkKGNhY2hlS2V5LCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdCksIHsgc291cmNlOiAnUHJlZmV0Y2gnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9mZXRjaEFuZFByZXBGcm9tTmV0d29yayhjYWNoZWRSZXN1bHQsIHVzZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBjYWNoZWREYXRhID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjYWNoZWRSZXN1bHQgJiYgdGhpcy5faXNDYWNoZWRSZXN1bHRWYWxpZEZvcjIwNChjYWNoZWRSZXN1bHQsIHVzZXIpKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVkRGF0YSA9IGNhY2hlZFJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGF0ZXN0ID0geWllbGQgdGhpcy5fZmV0Y2hGcm9tTmV0d29yayhjYWNoZWREYXRhLCB1c2VyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbGF0ZXN0KSB7XG4gICAgICAgICAgICAgICAgTG9nXzEuTG9nLmRlYnVnKCdObyByZXNwb25zZSByZXR1cm5lZCBmb3IgbGF0ZXN0IHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9ICgwLCBUeXBlZEpzb25QYXJzZV8xLl90eXBlZEpzb25QYXJzZSkobGF0ZXN0LCAnaGFzX3VwZGF0ZXMnLCAnUmVzcG9uc2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHNka0tleSA9IHRoaXMuX2dldFNka0tleSgpO1xuICAgICAgICAgICAgY29uc3Qgc3RhYmxlSUQgPSBTdGFibGVJRF8xLlN0YWJsZUlELmdldChzZGtLZXkpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5oYXNfdXBkYXRlcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBfbWFrZURhdGFBZGFwdGVyUmVzdWx0KCdOZXR3b3JrJywgbGF0ZXN0LCBzdGFibGVJRCwgdXNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjYWNoZWREYXRhICYmIChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2UuaGFzX3VwZGF0ZXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9tYWtlRGF0YUFkYXB0ZXJSZXN1bHQoJ05ldHdvcmtOb3RNb2RpZmllZCcsIGNhY2hlZERhdGEsIHN0YWJsZUlELCB1c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLl9nZXRDYWNoZUtleSh1c2VyKTtcbiAgICAgICAgICAgIHRoaXMuX2luTWVtb3J5Q2FjaGUuYWRkKGNhY2hlS2V5LCByZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5fd3JpdGVUb0NhY2hlKGNhY2hlS2V5LCByZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRTZGtLZXkoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZGtLZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nka0tleTtcbiAgICAgICAgfVxuICAgICAgICBMb2dfMS5Mb2cuZXJyb3IoYCR7dGhpcy5fYWRhcHRlck5hbWV9IGlzIG5vdCBhdHRhY2hlZCB0byBhIENsaWVudGApO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIF9sb2FkRnJvbUNhY2hlKGNhY2hlS2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY2FjaGUgPSAoX2EgPSBTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlLmdldEl0ZW0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKFN0b3JhZ2VQcm92aWRlcl8xLlN0b3JhZ2UsIGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKGNhY2hlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICgwLCBUeXBlZEpzb25QYXJzZV8xLl90eXBlZEpzb25QYXJzZSkoY2FjaGUsICdzb3VyY2UnLCAnQ2FjaGVkIFJlc3VsdCcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN1bHQpLCB7IHNvdXJjZTogJ0NhY2hlJyB9KSA6IG51bGw7XG4gICAgfVxuICAgIF93cml0ZVRvQ2FjaGUoY2FjaGVLZXksIHJlc3VsdCkge1xuICAgICAgICBTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlLnNldEl0ZW0oY2FjaGVLZXksIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICB0aGlzLl9ydW5Mb2NhbFN0b3JhZ2VDYWNoZUV2aWN0aW9uKGNhY2hlS2V5KTtcbiAgICB9XG4gICAgX3J1bkxvY2FsU3RvcmFnZUNhY2hlRXZpY3Rpb24oY2FjaGVLZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBsYXN0TW9kaWZpZWRUaW1lTWFwID0gKF9hID0gKDAsIFN0b3JhZ2VQcm92aWRlcl8xLl9nZXRPYmplY3RGcm9tU3RvcmFnZSkodGhpcy5fbGFzdE1vZGlmaWVkU3RvcmVLZXkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgbGFzdE1vZGlmaWVkVGltZU1hcFtjYWNoZUtleV0gPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBldmljdGFibGUgPSBfZ2V0RXZpY3RhYmxlS2V5KGxhc3RNb2RpZmllZFRpbWVNYXAsIENBQ0hFX0xJTUlUKTtcbiAgICAgICAgaWYgKGV2aWN0YWJsZSkge1xuICAgICAgICAgICAgZGVsZXRlIGxhc3RNb2RpZmllZFRpbWVNYXBbZXZpY3RhYmxlXTtcbiAgICAgICAgICAgIFN0b3JhZ2VQcm92aWRlcl8xLlN0b3JhZ2UucmVtb3ZlSXRlbShldmljdGFibGUpO1xuICAgICAgICB9XG4gICAgICAgICgwLCBTdG9yYWdlUHJvdmlkZXJfMS5fc2V0T2JqZWN0SW5TdG9yYWdlKSh0aGlzLl9sYXN0TW9kaWZpZWRTdG9yZUtleSwgbGFzdE1vZGlmaWVkVGltZU1hcCk7XG4gICAgfVxufVxuZXhwb3J0cy5EYXRhQWRhcHRlckNvcmUgPSBEYXRhQWRhcHRlckNvcmU7XG5mdW5jdGlvbiBfbWFrZURhdGFBZGFwdGVyUmVzdWx0KHNvdXJjZSwgZGF0YSwgc3RhYmxlSUQsIHVzZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHJlY2VpdmVkQXQ6IERhdGUubm93KCksXG4gICAgICAgIHN0YWJsZUlELFxuICAgICAgICBmdWxsVXNlckhhc2g6ICgwLCBTdGF0c2lnVXNlcl8xLl9nZXRGdWxsVXNlckhhc2gpKHVzZXIpLFxuICAgIH07XG59XG5leHBvcnRzLl9tYWtlRGF0YUFkYXB0ZXJSZXN1bHQgPSBfbWFrZURhdGFBZGFwdGVyUmVzdWx0O1xuY2xhc3MgSW5NZW1vcnlDYWNoZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgICB9XG4gICAgZ2V0KGNhY2hlS2V5LCB1c2VyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGF0YVtjYWNoZUtleV07XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5zdGFibGVJRDtcbiAgICAgICAgY29uc3QgcHJvdmlkZWQgPSAoX2EgPSB1c2VyID09PSBudWxsIHx8IHVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXIuY3VzdG9tSURzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RhYmxlSUQ7XG4gICAgICAgIGlmIChwcm92aWRlZCAmJiBjYWNoZWQgJiYgcHJvdmlkZWQgIT09IGNhY2hlZCkge1xuICAgICAgICAgICAgTG9nXzEuTG9nLndhcm4oXCInU3RhdHNpZ1VzZXIuY3VzdG9tSURzLnN0YWJsZUlEJyBtaXNtYXRjaFwiKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFkZChjYWNoZUtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb2xkZXN0ID0gX2dldEV2aWN0YWJsZUtleSh0aGlzLl9kYXRhLCBDQUNIRV9MSU1JVCAtIDEpO1xuICAgICAgICBpZiAob2xkZXN0KSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZGF0YVtvbGRlc3RdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFbY2FjaGVLZXldID0gdmFsdWU7XG4gICAgfVxuICAgIG1lcmdlKHZhbHVlcykge1xuICAgICAgICB0aGlzLl9kYXRhID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhKSwgdmFsdWVzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZ2V0RXZpY3RhYmxlS2V5KGRhdGEsIGxpbWl0KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA8PSBsaW1pdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGtleXMucmVkdWNlKChwcmV2S2V5LCBjdXJyS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBkYXRhW3ByZXZLZXldO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZGF0YVtjdXJyS2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBwcmV2ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnJlY2VpdmVkQXQgPCBwcmV2LnJlY2VpdmVkQXQgPyBjdXJyS2V5IDogcHJldktleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudCA8IHByZXYgPyBjdXJyS2V5IDogcHJldktleTtcbiAgICB9KTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TREtUeXBlID0gdm9pZCAwO1xuY29uc3QgU0RLX0NMSUVOVCA9IHt9O1xubGV0IHN1ZmZpeDtcbmV4cG9ydHMuU0RLVHlwZSA9IHtcbiAgICBfZ2V0OiAoc2RrS2V5KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSBTREtfQ0xJRU5UW3Nka0tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdqcy1tb25vJykgKyAoc3VmZml4ICE9PSBudWxsICYmIHN1ZmZpeCAhPT0gdm9pZCAwID8gc3VmZml4IDogJycpO1xuICAgIH0sXG4gICAgX3NldENsaWVudFR5cGUoc2RrS2V5LCBjbGllbnQpIHtcbiAgICAgICAgU0RLX0NMSUVOVFtzZGtLZXldID0gY2xpZW50O1xuICAgIH0sXG4gICAgX3NldEJpbmRpbmdUeXBlKGJpbmRpbmcpIHtcbiAgICAgICAgaWYgKCFzdWZmaXggfHwgc3VmZml4ID09PSAnLXJlYWN0Jykge1xuICAgICAgICAgICAgc3VmZml4ID0gJy0nICsgYmluZGluZztcbiAgICAgICAgfVxuICAgIH0sXG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FcnJvckJvdW5kYXJ5ID0gZXhwb3J0cy5FWENFUFRJT05fRU5EUE9JTlQgPSB2b2lkIDA7XG5jb25zdCBMb2dfMSA9IHJlcXVpcmUoXCIuL0xvZ1wiKTtcbmNvbnN0IFNES1R5cGVfMSA9IHJlcXVpcmUoXCIuL1NES1R5cGVcIik7XG5jb25zdCBTdGF0c2lnTWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL1N0YXRzaWdNZXRhZGF0YVwiKTtcbmV4cG9ydHMuRVhDRVBUSU9OX0VORFBPSU5UID0gJ2h0dHBzOi8vc3RhdHNpZ2FwaS5uZXQvdjEvc2RrX2V4Y2VwdGlvbic7XG5jb25zdCBVTktOT1dOX0VSUk9SID0gJ1tTdGF0c2lnXSBVbmtub3duRXJyb3InO1xuY2xhc3MgRXJyb3JCb3VuZGFyeSB7XG4gICAgY29uc3RydWN0b3IoX3Nka0tleSwgX29wdGlvbnMsIF9lbWl0dGVyLCBfbGFzdFNlZW5FcnJvcikge1xuICAgICAgICB0aGlzLl9zZGtLZXkgPSBfc2RrS2V5O1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBfZW1pdHRlcjtcbiAgICAgICAgdGhpcy5fbGFzdFNlZW5FcnJvciA9IF9sYXN0U2VlbkVycm9yO1xuICAgICAgICB0aGlzLl9zZWVuID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICB3cmFwKGluc3RhbmNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIF9nZXRBbGxJbnN0YW5jZU1ldGhvZE5hbWVzKG9iaikuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gb2JqW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICgnJEVCJyBpbiBvcmlnaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ialtuYW1lXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXB0dXJlKG5hbWUsICgpID0+IG9yaWdpbmFsLmFwcGx5KGluc3RhbmNlLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZV0uJEVCID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uRXJyb3IoJ2ViOndyYXAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxvZ0Vycm9yKHRhZywgZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fb25FcnJvcih0YWcsIGVycm9yKTtcbiAgICB9XG4gICAgZ2V0TGFzdFNlZW5FcnJvckFuZFJlc2V0KCkge1xuICAgICAgICBjb25zdCB0ZW1wRXJyb3IgPSB0aGlzLl9sYXN0U2VlbkVycm9yO1xuICAgICAgICB0aGlzLl9sYXN0U2VlbkVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGVtcEVycm9yICE9PSBudWxsICYmIHRlbXBFcnJvciAhPT0gdm9pZCAwID8gdGVtcEVycm9yIDogbnVsbDtcbiAgICB9XG4gICAgYXR0YWNoRXJyb3JJZk5vbmVFeGlzdHMoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RTZWVuRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYXN0U2VlbkVycm9yID0gX3Jlc29sdmVFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIF9jYXB0dXJlKHRhZywgdGFzaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gdGFzaygpO1xuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5jYXRjaCgoZXJyKSA9PiB0aGlzLl9vbkVycm9yKHRhZywgZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fb25FcnJvcih0YWcsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9vbkVycm9yKHRhZywgZXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIExvZ18xLkxvZy53YXJuKGBDYXVnaHQgZXJyb3IgaW4gJHt0YWd9YCwgeyBlcnJvciB9KTtcbiAgICAgICAgICAgIGNvbnN0IGltcGwgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IChlcnJvciA/IGVycm9yIDogRXJyb3IoVU5LTk9XTl9FUlJPUikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRXJyb3IgPSB1bndyYXBwZWQgaW5zdGFuY2VvZiBFcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gaXNFcnJvciA/IHVud3JhcHBlZC5uYW1lIDogJ05vIE5hbWUnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkRXJyb3IgPSBfcmVzb2x2ZUVycm9yKHVud3JhcHBlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFNlZW5FcnJvciA9IHJlc29sdmVkRXJyb3I7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlZW4uaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Vlbi5hZGQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKChfYiA9IChfYSA9IHRoaXMuX29wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXR3b3JrQ29uZmlnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHJldmVudEFsbE5ldHdvcmtUcmFmZmljKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYyA9IHRoaXMuX2VtaXR0ZXIpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2RrVHlwZSA9IFNES1R5cGVfMS5TREtUeXBlLl9nZXQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0c2lnTWV0YWRhdGEgPSBTdGF0c2lnTWV0YWRhdGFfMS5TdGF0c2lnTWV0YWRhdGFQcm92aWRlci5nZXQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gaXNFcnJvciA/IHVud3JhcHBlZC5zdGFjayA6IF9nZXREZXNjcmlwdGlvbih1bndyYXBwZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKHsgdGFnLCBleGNlcHRpb246IG5hbWUsIGluZm8gfSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0c2lnTWV0YWRhdGEpLCB7IHNka1R5cGUgfSkpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jID0gKF9mID0gKF9lID0gKF9kID0gdGhpcy5fb3B0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm5ldHdvcmtDb25maWcpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5uZXR3b3JrT3ZlcnJpZGVGdW5jKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmZXRjaDtcbiAgICAgICAgICAgICAgICB5aWVsZCBmdW5jKGV4cG9ydHMuRVhDRVBUSU9OX0VORFBPSU5ULCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnU1RBVFNJRy1BUEktS0VZJzogdGhpcy5fc2RrS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1NUQVRTSUctU0RLLVRZUEUnOiBTdHJpbmcoc2RrVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnU1RBVFNJRy1TREstVkVSU0lPTic6IFN0cmluZyhzdGF0c2lnTWV0YWRhdGEuc2RrVmVyc2lvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIChfZyA9IHRoaXMuX2VtaXR0ZXIpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW1wbCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qIG5vb3AgKi9cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBub29wICovXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgICAvKiBub29wICovXG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkVycm9yQm91bmRhcnkgPSBFcnJvckJvdW5kYXJ5O1xuZnVuY3Rpb24gX3Jlc29sdmVFcnJvcihlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gX2dldERlc2NyaXB0aW9uKG9iaikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7XG4gICAgfVxufVxuZnVuY3Rpb24gX2dldEFsbEluc3RhbmNlTWV0aG9kTmFtZXMoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoKTtcbiAgICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2UpO1xuICAgIHdoaWxlIChwcm90byAmJiBwcm90byAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bylcbiAgICAgICAgICAgIC5maWx0ZXIoKHByb3ApID0+IHR5cGVvZiAocHJvdG8gPT09IG51bGwgfHwgcHJvdG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3RvW3Byb3BdKSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIC5mb3JFYWNoKChuYW1lKSA9PiBuYW1lcy5hZGQobmFtZSkpO1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKG5hbWVzKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU1lbW9LZXkgPSBleHBvcnRzLk1lbW9QcmVmaXggPSB2b2lkIDA7XG5leHBvcnRzLk1lbW9QcmVmaXggPSB7XG4gICAgX2dhdGU6ICdnJyxcbiAgICBfZHluYW1pY0NvbmZpZzogJ2MnLFxuICAgIF9leHBlcmltZW50OiAnZScsXG4gICAgX2xheWVyOiAnbCcsXG4gICAgX3BhcmFtU3RvcmU6ICdwJyxcbn07XG5jb25zdCBFWElTVF9LRVlTID0gbmV3IFNldChbXG4vLyBBZGQga2V5cyB0aGF0IHNob3VsZCBiZSBtZW1vaXplZCBiYXNlZCBvbmx5IG9uIHRoZWlyIGV4aXN0ZW5jZSwgbm90IHRoZWlyIHZhbHVlXG5dKTtcbmNvbnN0IERPX05PVF9NRU1PX0tFWVMgPSBuZXcgU2V0KFtcbiAgICAvLyBBZGQga2V5cyB0aGF0IGlmIGV4aXN0LCBzaG91bGQgbm90IGJlIG1lbW9pemVkXG4gICAgJ3VzZXJQZXJzaXN0ZWRWYWx1ZXMnLFxuXSk7XG5mdW5jdGlvbiBjcmVhdGVNZW1vS2V5KHByZWZpeCwgbmFtZSwgb3B0aW9ucykge1xuICAgIGxldCBjYWNoZUtleSA9IGAke3ByZWZpeH18JHtuYW1lfWA7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBjYWNoZUtleTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob3B0aW9ucykpIHtcbiAgICAgICAgaWYgKERPX05PVF9NRU1PX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEVYSVNUX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGNhY2hlS2V5ICs9IGB8JHtrZXl9PXRydWVgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVLZXkgKz0gYHwke2tleX09JHtvcHRpb25zW2tleV19YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FjaGVLZXk7XG59XG5leHBvcnRzLmNyZWF0ZU1lbW9LZXkgPSBjcmVhdGVNZW1vS2V5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fZmV0Y2hUeHRSZWNvcmRzID0gdm9pZCAwO1xuLy8gU2VlIGV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGF0c2lnLWlvL3ByaXZhdGUtanMtY2xpZW50LW1vbm9yZXBvL3B1bGwvMzQwXG5jb25zdCBGRUFUVVJFX0FTU0VUU19ETlNfUVVFUlkgPSBuZXcgVWludDhBcnJheShbXG4gICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCxcbiAgICAweDY2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDYxLCAweDczLCAweDczLCAweDY1LCAweDc0LCAweDczLFxuICAgIDB4MDMsIDB4NmYsIDB4NzIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDEsXG5dKTtcbmNvbnN0IEROU19RVUVSWV9FTkRQT0lOVCA9ICdodHRwczovL2Nsb3VkZmxhcmUtZG5zLmNvbS9kbnMtcXVlcnknO1xuY29uc3QgRE9NQUlOX0NIQVJTID0gW1xuICAgICdpJywgLy8gaW5pdGlhbGl6ZVxuICAgICdlJywgLy8gZXZlbnRzXG4gICAgJ2QnLCAvLyBkY3Ncbl07XG5jb25zdCBNQVhfU1RBUlRfTE9PS1VQID0gMjAwO1xuZnVuY3Rpb24gX2ZldGNoVHh0UmVjb3JkcyhuZXR3b3JrRnVuYykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgbmV0d29ya0Z1bmMoRE5TX1FVRVJZX0VORFBPSU5ULCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2Rucy1tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9kbnMtbWVzc2FnZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogRkVBVFVSRV9BU1NFVFNfRE5TX1FVRVJZLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggVFhUIHJlY29yZHMgZnJvbSBETlMnKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0Ruc1R4dEZldGNoRXJyb3InO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICAgICAgICByZXR1cm4gX3BhcnNlRG5zUmVzcG9uc2UoYnl0ZXMpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5fZmV0Y2hUeHRSZWNvcmRzID0gX2ZldGNoVHh0UmVjb3JkcztcbmZ1bmN0aW9uIF9wYXJzZURuc1Jlc3BvbnNlKGlucHV0KSB7XG4gICAgLy8gbG9vcCB1bnRpbCB3ZSBmaW5kIHRoZSBmaXJzdCB2YWxpZCBkb21haW4gY2hhci4gT25lIG9mIFtpPSwgZT0sIGQ9XVxuICAgIGNvbnN0IHN0YXJ0ID0gaW5wdXQuZmluZEluZGV4KChieXRlLCBpbmRleCkgPT4gaW5kZXggPCBNQVhfU1RBUlRfTE9PS1VQICYmXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSkgPT09ICc9JyAmJlxuICAgICAgICBET01BSU5fQ0hBUlMuaW5jbHVkZXMoU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpbmRleCAtIDFdKSkpO1xuICAgIGlmIChzdGFydCA9PT0gLTEpIHtcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVFhUIHJlY29yZHMgZnJvbSBETlMnKTtcbiAgICAgICAgZXJyLm5hbWUgPSAnRG5zVHh0UGFyc2VFcnJvcic7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgLy8gZGVjb2RlIHRoZSByZW1haW5pbmcgYnl0ZXMgYXMgYSBzdHJpbmdcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0IC0gMTsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zcGxpdCgnLCcpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5faXNEb21haW5GYWlsdXJlID0gZXhwb3J0cy5OZXR3b3JrRmFsbGJhY2tSZXNvbHZlciA9IHZvaWQgMDtcbmNvbnN0IERuc1R4dFF1ZXJ5XzEgPSByZXF1aXJlKFwiLi9EbnNUeHRRdWVyeVwiKTtcbmNvbnN0IEhhc2hpbmdfMSA9IHJlcXVpcmUoXCIuL0hhc2hpbmdcIik7XG5jb25zdCBMb2dfMSA9IHJlcXVpcmUoXCIuL0xvZ1wiKTtcbmNvbnN0IFN0b3JhZ2VQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vU3RvcmFnZVByb3ZpZGVyXCIpO1xuY29uc3QgREVGQVVMVF9UVExfTVMgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDsgLy8gNyBkYXlzXG5jb25zdCBDT09MRE9XTl9USU1FX01TID0gNCAqIDYwICogNjAgKiAxMDAwOyAvLyA0IGhvdXJzXG5jbGFzcyBOZXR3b3JrRmFsbGJhY2tSZXNvbHZlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuX2ZhbGxiYWNrSW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkgPSBudWxsO1xuICAgICAgICB0aGlzLl9kbnNRdWVyeUNvb2xkb3ducyA9IHt9O1xuICAgICAgICB0aGlzLl9uZXR3b3JrT3ZlcnJpZGVGdW5jID0gKF9hID0gb3B0aW9ucy5uZXR3b3JrQ29uZmlnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV0d29ya092ZXJyaWRlRnVuYztcbiAgICB9XG4gICAgc2V0RXJyb3JCb3VuZGFyeShlcnJvckJvdW5kYXJ5KSB7XG4gICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkgPSBlcnJvckJvdW5kYXJ5O1xuICAgIH1cbiAgICB0cnlCdW1wRXhwaXJ5VGltZShzZGtLZXksIHVybENvbmZpZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGluZm8gPSAoX2EgPSB0aGlzLl9mYWxsYmFja0luZm8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt1cmxDb25maWcuZW5kcG9pbnRdO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLmV4cGlyeVRpbWUgPSBEYXRlLm5vdygpICsgREVGQVVMVF9UVExfTVM7XG4gICAgICAgIF90cnlXcml0ZUZhbGxiYWNrSW5mb1RvQ2FjaGUoc2RrS2V5LCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2ZhbGxiYWNrSW5mbyksIHsgW3VybENvbmZpZy5lbmRwb2ludF06IGluZm8gfSkpO1xuICAgIH1cbiAgICBnZXRBY3RpdmVGYWxsYmFja1VybChzZGtLZXksIHVybENvbmZpZykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgaW5mbyA9IHRoaXMuX2ZhbGxiYWNrSW5mbztcbiAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkge1xuICAgICAgICAgICAgaW5mbyA9IChfYSA9IF9yZWFkRmFsbGJhY2tJbmZvRnJvbUNhY2hlKHNka0tleSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICAgICAgdGhpcy5fZmFsbGJhY2tJbmZvID0gaW5mbztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyeSA9IGluZm9bdXJsQ29uZmlnLmVuZHBvaW50XTtcbiAgICAgICAgaWYgKCFlbnRyeSB8fCBEYXRlLm5vdygpID4gKChfYiA9IGVudHJ5LmV4cGlyeVRpbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApKSB7XG4gICAgICAgICAgICBkZWxldGUgaW5mb1t1cmxDb25maWcuZW5kcG9pbnRdO1xuICAgICAgICAgICAgdGhpcy5fZmFsbGJhY2tJbmZvID0gaW5mbztcbiAgICAgICAgICAgIF90cnlXcml0ZUZhbGxiYWNrSW5mb1RvQ2FjaGUoc2RrS2V5LCB0aGlzLl9mYWxsYmFja0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LnVybCkge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0RmFsbGJhY2tGcm9tUHJvdmlkZWQodXJsKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBfZXh0cmFjdFBhdGhGcm9tVXJsKHVybCk7XG4gICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UocGF0aCwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnlGZXRjaFVwZGF0ZWRGYWxsYmFja0luZm8oc2RrS2V5LCB1cmxDb25maWcsIGVycm9yTWVzc2FnZSwgdGltZWRPdXQpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNEb21haW5GYWlsdXJlKGVycm9yTWVzc2FnZSwgdGltZWRPdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2FuVXNlTmV0d29ya0ZhbGxiYWNrcyA9IHVybENvbmZpZy5jdXN0b21VcmwgPT0gbnVsbCAmJiB1cmxDb25maWcuZmFsbGJhY2tVcmxzID09IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJscyA9IGNhblVzZU5ldHdvcmtGYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgICAgPyB5aWVsZCB0aGlzLl90cnlGZXRjaEZhbGxiYWNrVXJsc0Zyb21OZXR3b3JrKHVybENvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgOiB1cmxDb25maWcuZmFsbGJhY2tVcmxzO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1VybCA9IHRoaXMuX3BpY2tOZXdGYWxsYmFja1VybCgoX2EgPSB0aGlzLl9mYWxsYmFja0luZm8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt1cmxDb25maWcuZW5kcG9pbnRdLCB1cmxzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5ld1VybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZhbGxiYWNrSW5mb1dpdGhOZXdVcmwoc2RrS2V5LCB1cmxDb25maWcuZW5kcG9pbnQsIG5ld1VybCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoX2IgPSB0aGlzLl9lcnJvckJvdW5kYXJ5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubG9nRXJyb3IoJ3RyeUZldGNoVXBkYXRlZEZhbGxiYWNrSW5mbycsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfdXBkYXRlRmFsbGJhY2tJbmZvV2l0aE5ld1VybChzZGtLZXksIGVuZHBvaW50LCBuZXdVcmwpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IG5ld0ZhbGxiYWNrSW5mbyA9IHtcbiAgICAgICAgICAgIHVybDogbmV3VXJsLFxuICAgICAgICAgICAgZXhwaXJ5VGltZTogRGF0ZS5ub3coKSArIERFRkFVTFRfVFRMX01TLFxuICAgICAgICAgICAgcHJldmlvdXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwcmV2aW91c0luZm8gPSAoX2EgPSB0aGlzLl9mYWxsYmFja0luZm8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtlbmRwb2ludF07XG4gICAgICAgIGlmIChwcmV2aW91c0luZm8pIHtcbiAgICAgICAgICAgIG5ld0ZhbGxiYWNrSW5mby5wcmV2aW91cy5wdXNoKC4uLnByZXZpb3VzSW5mby5wcmV2aW91cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0ZhbGxiYWNrSW5mby5wcmV2aW91cy5sZW5ndGggPiAxMCkge1xuICAgICAgICAgICAgbmV3RmFsbGJhY2tJbmZvLnByZXZpb3VzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldmlvdXNVcmwgPSAoX2MgPSAoX2IgPSB0aGlzLl9mYWxsYmFja0luZm8pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltlbmRwb2ludF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy51cmw7XG4gICAgICAgIGlmIChwcmV2aW91c1VybCAhPSBudWxsKSB7XG4gICAgICAgICAgICBuZXdGYWxsYmFja0luZm8ucHJldmlvdXMucHVzaChwcmV2aW91c1VybCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmFsbGJhY2tJbmZvID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9mYWxsYmFja0luZm8pLCB7IFtlbmRwb2ludF06IG5ld0ZhbGxiYWNrSW5mbyB9KTtcbiAgICAgICAgX3RyeVdyaXRlRmFsbGJhY2tJbmZvVG9DYWNoZShzZGtLZXksIHRoaXMuX2ZhbGxiYWNrSW5mbyk7XG4gICAgfVxuICAgIF90cnlGZXRjaEZhbGxiYWNrVXJsc0Zyb21OZXR3b3JrKHVybENvbmZpZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjb29sZG93biA9IHRoaXMuX2Ruc1F1ZXJ5Q29vbGRvd25zW3VybENvbmZpZy5lbmRwb2ludF07XG4gICAgICAgICAgICBpZiAoY29vbGRvd24gJiYgRGF0ZS5ub3coKSA8IGNvb2xkb3duKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9kbnNRdWVyeUNvb2xkb3duc1t1cmxDb25maWcuZW5kcG9pbnRdID0gRGF0ZS5ub3coKSArIENPT0xET1dOX1RJTUVfTVM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZHMgPSB5aWVsZCAoMCwgRG5zVHh0UXVlcnlfMS5fZmV0Y2hUeHRSZWNvcmRzKSgoX2EgPSB0aGlzLl9uZXR3b3JrT3ZlcnJpZGVGdW5jKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmZXRjaCk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gX2V4dHJhY3RQYXRoRnJvbVVybCh1cmxDb25maWcuZGVmYXVsdFVybCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNvcmQuc3RhcnRzV2l0aCh1cmxDb25maWcuZW5kcG9pbnREbnNLZXkgKyAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHJlY29yZC5zcGxpdCgnPScpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBiYXNlVXJsID0gcGFydHNbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgaHR0cHM6Ly8ke2Jhc2VVcmx9JHtwYXRofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcGlja05ld0ZhbGxiYWNrVXJsKGN1cnJlbnRGYWxsYmFja0luZm8sIHVybHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodXJscyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2aW91c2x5VXNlZCA9IG5ldyBTZXQoKF9hID0gY3VycmVudEZhbGxiYWNrSW5mbyA9PT0gbnVsbCB8fCBjdXJyZW50RmFsbGJhY2tJbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50RmFsbGJhY2tJbmZvLnByZXZpb3VzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGYWxsYmFja1VybCA9IGN1cnJlbnRGYWxsYmFja0luZm8gPT09IG51bGwgfHwgY3VycmVudEZhbGxiYWNrSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudEZhbGxiYWNrSW5mby51cmw7XG4gICAgICAgIGxldCBmb3VuZCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgbG9vcFVybCBvZiB1cmxzKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBsb29wVXJsLmVuZHNXaXRoKCcvJykgPyBsb29wVXJsLnNsaWNlKDAsIC0xKSA6IGxvb3BVcmw7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzbHlVc2VkLmhhcyhsb29wVXJsKSAmJiB1cmwgIT09IGN1cnJlbnRGYWxsYmFja1VybCkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdXJsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG59XG5leHBvcnRzLk5ldHdvcmtGYWxsYmFja1Jlc29sdmVyID0gTmV0d29ya0ZhbGxiYWNrUmVzb2x2ZXI7XG5mdW5jdGlvbiBfaXNEb21haW5GYWlsdXJlKGVycm9yTXNnLCB0aW1lZE91dCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsb3dlckVycm9yTXNnID0gKF9hID0gZXJyb3JNc2cgPT09IG51bGwgfHwgZXJyb3JNc2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yTXNnLnRvTG93ZXJDYXNlKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIHJldHVybiAodGltZWRPdXQgfHxcbiAgICAgICAgbG93ZXJFcnJvck1zZy5pbmNsdWRlcygndW5jYXVnaHQgZXhjZXB0aW9uJykgfHxcbiAgICAgICAgbG93ZXJFcnJvck1zZy5pbmNsdWRlcygnZmFpbGVkIHRvIGZldGNoJykgfHxcbiAgICAgICAgbG93ZXJFcnJvck1zZy5pbmNsdWRlcygnbmV0d29ya2Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZScpKTtcbn1cbmV4cG9ydHMuX2lzRG9tYWluRmFpbHVyZSA9IF9pc0RvbWFpbkZhaWx1cmU7XG5mdW5jdGlvbiBfZ2V0RmFsbGJhY2tJbmZvU3RvcmFnZUtleShzZGtLZXkpIHtcbiAgICByZXR1cm4gYHN0YXRzaWcubmV0d29ya19mYWxsYmFjay4keygwLCBIYXNoaW5nXzEuX0RKQjIpKHNka0tleSl9YDtcbn1cbmZ1bmN0aW9uIF90cnlXcml0ZUZhbGxiYWNrSW5mb1RvQ2FjaGUoc2RrS2V5LCBpbmZvKSB7XG4gICAgY29uc3QgaGFzaEtleSA9IF9nZXRGYWxsYmFja0luZm9TdG9yYWdlS2V5KHNka0tleSk7XG4gICAgaWYgKCFpbmZvIHx8IE9iamVjdC5rZXlzKGluZm8pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlLnJlbW92ZUl0ZW0oaGFzaEtleSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgU3RvcmFnZVByb3ZpZGVyXzEuU3RvcmFnZS5zZXRJdGVtKGhhc2hLZXksIEpTT04uc3RyaW5naWZ5KGluZm8pKTtcbn1cbmZ1bmN0aW9uIF9yZWFkRmFsbGJhY2tJbmZvRnJvbUNhY2hlKHNka0tleSkge1xuICAgIGNvbnN0IGhhc2hLZXkgPSBfZ2V0RmFsbGJhY2tJbmZvU3RvcmFnZUtleShzZGtLZXkpO1xuICAgIGNvbnN0IGRhdGEgPSBTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlLmdldEl0ZW0oaGFzaEtleSk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIExvZ18xLkxvZy5lcnJvcignRmFpbGVkIHRvIHBhcnNlIEZhbGxiYWNrSW5mbycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5mdW5jdGlvbiBfZXh0cmFjdFBhdGhGcm9tVXJsKHVybFN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHVybC5wYXRobmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN0YXRzaWdTZXNzaW9uID0gZXhwb3J0cy5TZXNzaW9uSUQgPSB2b2lkIDA7XG5jb25zdCBDYWNoZUtleV8xID0gcmVxdWlyZShcIi4vQ2FjaGVLZXlcIik7XG5jb25zdCBMb2dfMSA9IHJlcXVpcmUoXCIuL0xvZ1wiKTtcbmNvbnN0IFN0b3JhZ2VQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vU3RvcmFnZVByb3ZpZGVyXCIpO1xuY29uc3QgVVVJRF8xID0gcmVxdWlyZShcIi4vVVVJRFwiKTtcbmNvbnN0IE1BWF9TRVNTSU9OX0lETEVfVElNRSA9IDMwICogNjAgKiAxMDAwOyAvLyAzMCBtaW51dGVzXG5jb25zdCBNQVhfU0VTU0lPTl9BR0UgPSA0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDQgaG91cnNcbmNvbnN0IFBST01JU0VfTUFQID0ge307XG5leHBvcnRzLlNlc3Npb25JRCA9IHtcbiAgICBnZXQ6IChzZGtLZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuU3RhdHNpZ1Nlc3Npb24uZ2V0KHNka0tleSkuZGF0YS5zZXNzaW9uSUQ7XG4gICAgfSxcbn07XG5leHBvcnRzLlN0YXRzaWdTZXNzaW9uID0ge1xuICAgIGdldDogKHNka0tleSkgPT4ge1xuICAgICAgICBpZiAoUFJPTUlTRV9NQVBbc2RrS2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICBQUk9NSVNFX01BUFtzZGtLZXldID0gX2xvYWRTZXNzaW9uKHNka0tleSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IFBST01JU0VfTUFQW3Nka0tleV07XG4gICAgICAgIHJldHVybiBfYnVtcFNlc3Npb24oc2Vzc2lvbik7XG4gICAgfSxcbiAgICBvdmVycmlkZUluaXRpYWxTZXNzaW9uSUQ6IChvdmVycmlkZSwgc2RrS2V5KSA9PiB7XG4gICAgICAgIFBST01JU0VfTUFQW3Nka0tleV0gPSBfb3ZlcnJpZGVTZXNzaW9uSWQob3ZlcnJpZGUsIHNka0tleSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiBfbG9hZFNlc3Npb24oc2RrS2V5KSB7XG4gICAgbGV0IGRhdGEgPSBfbG9hZEZyb21TdG9yYWdlKHNka0tleSk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JRDogKDAsIFVVSURfMS5nZXRVVUlEKSgpLFxuICAgICAgICAgICAgc3RhcnRUaW1lOiBub3csXG4gICAgICAgICAgICBsYXN0VXBkYXRlOiBub3csXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNka0tleSxcbiAgICB9O1xufVxuZnVuY3Rpb24gX292ZXJyaWRlU2Vzc2lvbklkKG92ZXJyaWRlLCBzZGtLZXkpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHNlc3Npb25JRDogb3ZlcnJpZGUsXG4gICAgICAgICAgICBzdGFydFRpbWU6IG5vdyxcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IG5vdyxcbiAgICAgICAgfSxcbiAgICAgICAgc2RrS2V5LFxuICAgIH07XG59XG5mdW5jdGlvbiBfYnVtcFNlc3Npb24oc2Vzc2lvbikge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGF0YSA9IHNlc3Npb24uZGF0YTtcbiAgICBpZiAoX2lzSWRsZShkYXRhKSB8fCBfaGFzUnVuVG9vTG9uZyhkYXRhKSkge1xuICAgICAgICBkYXRhLnNlc3Npb25JRCA9ICgwLCBVVUlEXzEuZ2V0VVVJRCkoKTtcbiAgICAgICAgZGF0YS5zdGFydFRpbWUgPSBub3c7XG4gICAgfVxuICAgIGRhdGEubGFzdFVwZGF0ZSA9IG5vdztcbiAgICBfcGVyc2lzdFRvU3RvcmFnZShkYXRhLCBzZXNzaW9uLnNka0tleSk7XG4gICAgY2xlYXJUaW1lb3V0KHNlc3Npb24uaWRsZVRpbWVvdXRJRCk7XG4gICAgY2xlYXJUaW1lb3V0KHNlc3Npb24uYWdlVGltZW91dElEKTtcbiAgICBjb25zdCBsaWZldGltZSA9IG5vdyAtIGRhdGEuc3RhcnRUaW1lO1xuICAgIGNvbnN0IHNka0tleSA9IHNlc3Npb24uc2RrS2V5O1xuICAgIHNlc3Npb24uaWRsZVRpbWVvdXRJRCA9IF9jcmVhdGVTZXNzaW9uVGltZW91dChzZGtLZXksIE1BWF9TRVNTSU9OX0lETEVfVElNRSk7XG4gICAgc2Vzc2lvbi5hZ2VUaW1lb3V0SUQgPSBfY3JlYXRlU2Vzc2lvblRpbWVvdXQoc2RrS2V5LCBNQVhfU0VTU0lPTl9BR0UgLSBsaWZldGltZSk7XG4gICAgcmV0dXJuIHNlc3Npb247XG59XG5mdW5jdGlvbiBfY3JlYXRlU2Vzc2lvblRpbWVvdXQoc2RrS2V5LCBkdXJhdGlvbikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gX19TVEFUU0lHX18gPT09IG51bGwgfHwgX19TVEFUU0lHX18gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9fU1RBVFNJR19fLmluc3RhbmNlKHNka0tleSk7XG4gICAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgICAgIGNsaWVudC4kZW10KHsgbmFtZTogJ3Nlc3Npb25fZXhwaXJlZCcgfSk7XG4gICAgICAgIH1cbiAgICB9LCBkdXJhdGlvbik7XG59XG5mdW5jdGlvbiBfaXNJZGxlKHsgbGFzdFVwZGF0ZSB9KSB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSBsYXN0VXBkYXRlID4gTUFYX1NFU1NJT05fSURMRV9USU1FO1xufVxuZnVuY3Rpb24gX2hhc1J1blRvb0xvbmcoeyBzdGFydFRpbWUgfSkge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gTUFYX1NFU1NJT05fQUdFO1xufVxuZnVuY3Rpb24gX2dldFNlc3Npb25JRFN0b3JhZ2VLZXkoc2RrS2V5KSB7XG4gICAgcmV0dXJuIGBzdGF0c2lnLnNlc3Npb25faWQuJHsoMCwgQ2FjaGVLZXlfMS5fZ2V0U3RvcmFnZUtleSkoc2RrS2V5KX1gO1xufVxuZnVuY3Rpb24gX3BlcnNpc3RUb1N0b3JhZ2Uoc2Vzc2lvbiwgc2RrS2V5KSB7XG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IF9nZXRTZXNzaW9uSURTdG9yYWdlS2V5KHNka0tleSk7XG4gICAgdHJ5IHtcbiAgICAgICAgKDAsIFN0b3JhZ2VQcm92aWRlcl8xLl9zZXRPYmplY3RJblN0b3JhZ2UpKHN0b3JhZ2VLZXksIHNlc3Npb24pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBMb2dfMS5Mb2cud2FybignRmFpbGVkIHRvIHNhdmUgU2Vzc2lvbklEJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gX2xvYWRGcm9tU3RvcmFnZShzZGtLZXkpIHtcbiAgICBjb25zdCBzdG9yYWdlS2V5ID0gX2dldFNlc3Npb25JRFN0b3JhZ2VLZXkoc2RrS2V5KTtcbiAgICByZXR1cm4gKDAsIFN0b3JhZ2VQcm92aWRlcl8xLl9nZXRPYmplY3RGcm9tU3RvcmFnZSkoc3RvcmFnZUtleSk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FcnJvclRhZyA9IHZvaWQgMDtcbmV4cG9ydHMuRXJyb3JUYWcgPSB7XG4gICAgTmV0d29ya0Vycm9yOiAnTmV0d29ya0Vycm9yJyxcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5ldHdvcmtDb3JlID0gdm9pZCAwO1xucmVxdWlyZShcIi4vJF9TdGF0c2lnR2xvYmFsXCIpO1xuY29uc3QgX19TdGF0c2lnR2xvYmFsXzEgPSByZXF1aXJlKFwiLi8kX1N0YXRzaWdHbG9iYWxcIik7XG5jb25zdCBEaWFnbm9zdGljc18xID0gcmVxdWlyZShcIi4vRGlhZ25vc3RpY3NcIik7XG5jb25zdCBMb2dfMSA9IHJlcXVpcmUoXCIuL0xvZ1wiKTtcbmNvbnN0IE5ldHdvcmtDb25maWdfMSA9IHJlcXVpcmUoXCIuL05ldHdvcmtDb25maWdcIik7XG5jb25zdCBOZXR3b3JrRmFsbGJhY2tSZXNvbHZlcl8xID0gcmVxdWlyZShcIi4vTmV0d29ya0ZhbGxiYWNrUmVzb2x2ZXJcIik7XG5jb25zdCBTREtUeXBlXzEgPSByZXF1aXJlKFwiLi9TREtUeXBlXCIpO1xuY29uc3QgU2FmZUpzXzEgPSByZXF1aXJlKFwiLi9TYWZlSnNcIik7XG5jb25zdCBTZXNzaW9uSURfMSA9IHJlcXVpcmUoXCIuL1Nlc3Npb25JRFwiKTtcbmNvbnN0IFN0YWJsZUlEXzEgPSByZXF1aXJlKFwiLi9TdGFibGVJRFwiKTtcbmNvbnN0IFN0YXRzaWdDbGllbnRFdmVudEVtaXR0ZXJfMSA9IHJlcXVpcmUoXCIuL1N0YXRzaWdDbGllbnRFdmVudEVtaXR0ZXJcIik7XG5jb25zdCBTdGF0c2lnTWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL1N0YXRzaWdNZXRhZGF0YVwiKTtcbmNvbnN0IFZpc2liaWxpdHlPYnNlcnZpbmdfMSA9IHJlcXVpcmUoXCIuL1Zpc2liaWxpdHlPYnNlcnZpbmdcIik7XG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAxMDAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfTUFYX01TID0gMzAwMDA7XG5jb25zdCBSQVRFX0xJTUlUX1dJTkRPV19NUyA9IDEwMDA7XG5jb25zdCBSQVRFX0xJTUlUX01BWF9SRVFfQ09VTlQgPSA1MDtcbmNvbnN0IExFQUtfUkFURSA9IFJBVEVfTElNSVRfTUFYX1JFUV9DT1VOVCAvIFJBVEVfTElNSVRfV0lORE9XX01TO1xuY29uc3QgUkVUUllBQkxFX0NPREVTID0gbmV3IFNldChbNDA4LCA1MDAsIDUwMiwgNTAzLCA1MDQsIDUyMiwgNTI0LCA1OTldKTtcbmNsYXNzIE5ldHdvcmtDb3JlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBfZW1pdHRlcikge1xuICAgICAgICB0aGlzLl9lbWl0dGVyID0gX2VtaXR0ZXI7XG4gICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkgPSBudWxsO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUX01TO1xuICAgICAgICB0aGlzLl9uZXRDb25maWcgPSB7fTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLl9sZWFreUJ1Y2tldCA9IHt9O1xuICAgICAgICB0aGlzLl9sYXN0VXNlZEluaXRVcmwgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubmV0d29ya0NvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5fbmV0Q29uZmlnID0gdGhpcy5fb3B0aW9ucy5uZXR3b3JrQ29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9uZXRDb25maWcubmV0d29ya1RpbWVvdXRNcykge1xuICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IHRoaXMuX25ldENvbmZpZy5uZXR3b3JrVGltZW91dE1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZhbGxiYWNrUmVzb2x2ZXIgPSBuZXcgTmV0d29ya0ZhbGxiYWNrUmVzb2x2ZXJfMS5OZXR3b3JrRmFsbGJhY2tSZXNvbHZlcih0aGlzLl9vcHRpb25zKTtcbiAgICB9XG4gICAgc2V0RXJyb3JCb3VuZGFyeShlcnJvckJvdW5kYXJ5KSB7XG4gICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkgPSBlcnJvckJvdW5kYXJ5O1xuICAgICAgICB0aGlzLl9lcnJvckJvdW5kYXJ5LndyYXAodGhpcyk7XG4gICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkud3JhcCh0aGlzLl9mYWxsYmFja1Jlc29sdmVyKTtcbiAgICAgICAgdGhpcy5fZmFsbGJhY2tSZXNvbHZlci5zZXRFcnJvckJvdW5kYXJ5KGVycm9yQm91bmRhcnkpO1xuICAgIH1cbiAgICBpc0JlYWNvblN1cHBvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIG5hdmlnYXRvci5zZW5kQmVhY29uID09PSAnZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgZ2V0TGFzdFVzZWRJbml0VXJsQW5kUmVzZXQoKSB7XG4gICAgICAgIGNvbnN0IHRlbXBVcmwgPSB0aGlzLl9sYXN0VXNlZEluaXRVcmw7XG4gICAgICAgIHRoaXMuX2xhc3RVc2VkSW5pdFVybCA9IG51bGw7XG4gICAgICAgIHJldHVybiB0ZW1wVXJsO1xuICAgIH1cbiAgICBiZWFjb24oYXJncykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKCFfZW5zdXJlVmFsaWRTZGtLZXkoYXJncykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcmdzSW50ZXJuYWwgPSB0aGlzLl9nZXRJbnRlcm5hbFJlcXVlc3RBcmdzKCdQT1NUJywgYXJncyk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgdGhpcy5fZ2V0UG9wdWxhdGVkQm9keShhcmdzSW50ZXJuYWwsIGFyZ3MuZGF0YSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB5aWVsZCB0aGlzLl9nZXRQb3B1bGF0ZWRVUkwoYXJnc0ludGVybmFsKTtcbiAgICAgICAgICAgIGNvbnN0IG5hdiA9IG5hdmlnYXRvcjtcbiAgICAgICAgICAgIHJldHVybiBuYXYuc2VuZEJlYWNvbi5iaW5kKG5hdikodXJsLCBib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QoYXJncykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgYXJnc0ludGVybmFsID0gdGhpcy5fZ2V0SW50ZXJuYWxSZXF1ZXN0QXJncygnUE9TVCcsIGFyZ3MpO1xuICAgICAgICAgICAgYXJnc0ludGVybmFsLmJvZHkgPSB5aWVsZCB0aGlzLl9nZXRQb3B1bGF0ZWRCb2R5KGFyZ3NJbnRlcm5hbCwgYXJncy5kYXRhKTtcbiAgICAgICAgICAgIGlmIChhcmdzLmlzU3RhdHNpZ0VuY29kYWJsZSkge1xuICAgICAgICAgICAgICAgIGFyZ3NJbnRlcm5hbC5ib2R5ID0gdGhpcy5fYXR0ZW1wdFRvRW5jb2RlU3RyaW5nKGFyZ3NJbnRlcm5hbCwgYXJnc0ludGVybmFsLmJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KGFyZ3NJbnRlcm5hbCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQoYXJncykge1xuICAgICAgICBjb25zdCBhcmdzSW50ZXJuYWwgPSB0aGlzLl9nZXRJbnRlcm5hbFJlcXVlc3RBcmdzKCdHRVQnLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KGFyZ3NJbnRlcm5hbCk7XG4gICAgfVxuICAgIF9zZW5kUmVxdWVzdChhcmdzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghX2Vuc3VyZVZhbGlkU2RrS2V5KGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fbmV0Q29uZmlnLnByZXZlbnRBbGxOZXR3b3JrVHJhZmZpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBtZXRob2QsIGJvZHksIHJldHJpZXMsIGF0dGVtcHQgfSA9IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IGFyZ3MudXJsQ29uZmlnLmVuZHBvaW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzUmF0ZUxpbWl0ZWQoZW5kcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgTG9nXzEuTG9nLndhcm4oYFJlcXVlc3QgdG8gJHtlbmRwb2ludH0gd2FzIGJsb2NrZWQgYmVjYXVzZSB5b3UgYXJlIG1ha2luZyByZXF1ZXN0cyB0b28gZnJlcXVlbnRseS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBdHRlbXB0ID0gYXR0ZW1wdCAhPT0gbnVsbCAmJiBhdHRlbXB0ICE9PSB2b2lkIDAgPyBhdHRlbXB0IDogMTtcbiAgICAgICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09ICd1bmRlZmluZWQnID8gbmV3IEFib3J0Q29udHJvbGxlcigpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIgPT09IG51bGwgfHwgYWJvcnRDb250cm9sbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoYFRpbWVvdXQgb2YgJHt0aGlzLl90aW1lb3V0fW1zIGV4cGlyZWQuYCk7XG4gICAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlZFVybCA9IHlpZWxkIHRoaXMuX2dldFBvcHVsYXRlZFVSTChhcmdzKTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBrZWVwYWxpdmUgPSAoMCwgVmlzaWJpbGl0eU9ic2VydmluZ18xLl9pc1VubG9hZGluZykoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MuaGVhZGVycyksXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyID09PSBudWxsIHx8IGFib3J0Q29udHJvbGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IGFyZ3MucHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGtlZXBhbGl2ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIF90cnlNYXJrSW5pdFN0YXJ0KGFyZ3MsIGN1cnJlbnRBdHRlbXB0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLl9sZWFreUJ1Y2tldFtlbmRwb2ludF07XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQubGFzdFJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVha3lCdWNrZXRbZW5kcG9pbnRdID0gYnVja2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jID0gKF9hID0gdGhpcy5fbmV0Q29uZmlnLm5ldHdvcmtPdmVycmlkZUZ1bmMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZldGNoO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgZnVuYyhwb3B1bGF0ZWRVcmwsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHlpZWxkIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiAnTm8gVGV4dCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYE5ldHdvcmtFcnJvcjogJHtwb3B1bGF0ZWRVcmx9ICR7dGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyLm5hbWUgPSAnTmV0d29ya0Vycm9yJztcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0geWllbGQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgICAgIF90cnlNYXJrSW5pdEVuZChhcmdzLCByZXNwb25zZSwgY3VycmVudEF0dGVtcHQsIHRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZhbGxiYWNrUmVzb2x2ZXIudHJ5QnVtcEV4cGlyeVRpbWUoYXJncy5zZGtLZXksIGFyZ3MudXJsQ29uZmlnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBib2R5OiB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IF9nZXRFcnJvck1lc3NhZ2UoYWJvcnRDb250cm9sbGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZWRPdXQgPSBfZGlkVGltZW91dChhYm9ydENvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIF90cnlNYXJrSW5pdEVuZChhcmdzLCByZXNwb25zZSwgY3VycmVudEF0dGVtcHQsICcnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tVcGRhdGVkID0geWllbGQgdGhpcy5fZmFsbGJhY2tSZXNvbHZlci50cnlGZXRjaFVwZGF0ZWRGYWxsYmFja0luZm8oYXJncy5zZGtLZXksIGFyZ3MudXJsQ29uZmlnLCBlcnJvck1lc3NhZ2UsIHRpbWVkT3V0KTtcbiAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuZmFsbGJhY2tVcmwgPSB0aGlzLl9mYWxsYmFja1Jlc29sdmVyLmdldEFjdGl2ZUZhbGxiYWNrVXJsKGFyZ3Muc2RrS2V5LCBhcmdzLnVybENvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmV0cmllcyB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QXR0ZW1wdCA+IHJldHJpZXMgfHxcbiAgICAgICAgICAgICAgICAgICAgIVJFVFJZQUJMRV9DT0RFUy5oYXMoKF9iID0gcmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogNTAwKSkge1xuICAgICAgICAgICAgICAgICAgICAoX2MgPSB0aGlzLl9lbWl0dGVyKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFN0YXRzaWdDbGllbnRFdmVudEVtaXR0ZXJfMS5FcnJvclRhZy5OZXR3b3JrRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yTXNnID0gYEEgbmV0d29ya2luZyBlcnJvciBvY2N1cnJlZCBkdXJpbmcgJHttZXRob2R9IHJlcXVlc3QgdG8gJHtwb3B1bGF0ZWRVcmx9LmA7XG4gICAgICAgICAgICAgICAgICAgIExvZ18xLkxvZy5lcnJvcihmb3JtYXR0ZWRFcnJvck1zZywgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIChfZCA9IHRoaXMuX2Vycm9yQm91bmRhcnkpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5hdHRhY2hFcnJvcklmTm9uZUV4aXN0cyhmb3JtYXR0ZWRFcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCBfZXhwb25lbnRpYWxCYWNrb2ZmKGN1cnJlbnRBdHRlbXB0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhcmdzKSwgeyByZXRyaWVzLCBhdHRlbXB0OiBjdXJyZW50QXR0ZW1wdCArIDEgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2lzUmF0ZUxpbWl0ZWQoZW5kcG9pbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBidWNrZXQgPSAoX2EgPSB0aGlzLl9sZWFreUJ1Y2tldFtlbmRwb2ludF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgbGFzdFJlcXVlc3RUaW1lOiBub3csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBub3cgLSBidWNrZXQubGFzdFJlcXVlc3RUaW1lO1xuICAgICAgICBjb25zdCBsZWFrZWRSZXF1ZXN0cyA9IE1hdGguZmxvb3IoZWxhcHNlZCAqIExFQUtfUkFURSk7XG4gICAgICAgIGJ1Y2tldC5jb3VudCA9IE1hdGgubWF4KDAsIGJ1Y2tldC5jb3VudCAtIGxlYWtlZFJlcXVlc3RzKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5jb3VudCA+PSBSQVRFX0xJTUlUX01BWF9SRVFfQ09VTlQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJ1Y2tldC5jb3VudCArPSAxO1xuICAgICAgICBidWNrZXQubGFzdFJlcXVlc3RUaW1lID0gbm93O1xuICAgICAgICB0aGlzLl9sZWFreUJ1Y2tldFtlbmRwb2ludF0gPSBidWNrZXQ7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgX2dldFBvcHVsYXRlZFVSTChhcmdzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IChfYSA9IGFyZ3MuZmFsbGJhY2tVcmwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGFyZ3MudXJsQ29uZmlnLmdldFVybCgpO1xuICAgICAgICAgICAgaWYgKGFyZ3MudXJsQ29uZmlnLmVuZHBvaW50ID09PSBOZXR3b3JrQ29uZmlnXzEuRW5kcG9pbnQuX2luaXRpYWxpemUgfHxcbiAgICAgICAgICAgICAgICBhcmdzLnVybENvbmZpZy5lbmRwb2ludCA9PT0gTmV0d29ya0NvbmZpZ18xLkVuZHBvaW50Ll9kb3dubG9hZF9jb25maWdfc3BlY3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0VXNlZEluaXRVcmwgPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgW05ldHdvcmtDb25maWdfMS5OZXR3b3JrUGFyYW0uU2RrS2V5XTogYXJncy5zZGtLZXksIFtOZXR3b3JrQ29uZmlnXzEuTmV0d29ya1BhcmFtLlNka1R5cGVdOiBTREtUeXBlXzEuU0RLVHlwZS5fZ2V0KGFyZ3Muc2RrS2V5KSwgW05ldHdvcmtDb25maWdfMS5OZXR3b3JrUGFyYW0uU2RrVmVyc2lvbl06IFN0YXRzaWdNZXRhZGF0YV8xLlNES19WRVJTSU9OLCBbTmV0d29ya0NvbmZpZ18xLk5ldHdvcmtQYXJhbS5UaW1lXTogU3RyaW5nKERhdGUubm93KCkpLCBbTmV0d29ya0NvbmZpZ18xLk5ldHdvcmtQYXJhbS5TZXNzaW9uSURdOiBTZXNzaW9uSURfMS5TZXNzaW9uSUQuZ2V0KGFyZ3Muc2RrS2V5KSB9LCBhcmdzLnBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgICAgICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1trZXldKX1gO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignJicpO1xuICAgICAgICAgICAgcmV0dXJuIGAke3VybH0ke3F1ZXJ5ID8gYD8ke3F1ZXJ5fWAgOiAnJ31gO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2dldFBvcHVsYXRlZEJvZHkoYXJncywgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgeyBzZGtLZXksIGZhbGxiYWNrVXJsIH0gPSBhcmdzO1xuICAgICAgICAgICAgY29uc3Qgc3RhYmxlSUQgPSBTdGFibGVJRF8xLlN0YWJsZUlELmdldChzZGtLZXkpO1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklEID0gU2Vzc2lvbklEXzEuU2Vzc2lvbklELmdldChzZGtLZXkpO1xuICAgICAgICAgICAgY29uc3Qgc2RrVHlwZSA9IFNES1R5cGVfMS5TREtUeXBlLl9nZXQoc2RrS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCB7IHN0YXRzaWdNZXRhZGF0YTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBTdGF0c2lnTWV0YWRhdGFfMS5TdGF0c2lnTWV0YWRhdGFQcm92aWRlci5nZXQoKSksIHsgc3RhYmxlSUQsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JRCxcbiAgICAgICAgICAgICAgICAgICAgc2RrVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tVcmwgfSkgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2F0dGVtcHRUb0VuY29kZVN0cmluZyhhcmdzLCBpbnB1dCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB3aW4gPSAoMCwgU2FmZUpzXzEuX2dldFdpbmRvd1NhZmUpKCk7XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRpc2FibGVTdGF0c2lnRW5jb2RpbmcgfHxcbiAgICAgICAgICAgICgwLCBfX1N0YXRzaWdHbG9iYWxfMS5fZ2V0U3RhdHNpZ0dsb2JhbEZsYWcpKCduby1lbmNvZGUnKSAhPSBudWxsIHx8XG4gICAgICAgICAgICAhKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5idG9hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAoX2EgPSB3aW4uYnRvYShpbnB1dCkuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW5wdXQ7XG4gICAgICAgICAgICBhcmdzLnBhcmFtcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKChfYiA9IGFyZ3MucGFyYW1zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fSkpLCB7IFtOZXR3b3JrQ29uZmlnXzEuTmV0d29ya1BhcmFtLlN0YXRzaWdFbmNvZGVkXTogJzEnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2MpIHtcbiAgICAgICAgICAgIExvZ18xLkxvZy53YXJuKGBSZXF1ZXN0IGVuY29kaW5nIGZhaWxlZCBmb3IgJHthcmdzLnVybENvbmZpZy5nZXRVcmwoKX1gKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0SW50ZXJuYWxSZXF1ZXN0QXJncyhtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tVcmwgPSB0aGlzLl9mYWxsYmFja1Jlc29sdmVyLmdldEFjdGl2ZUZhbGxiYWNrVXJsKGFyZ3Muc2RrS2V5LCBhcmdzLnVybENvbmZpZyk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpLCB7IG1ldGhvZCxcbiAgICAgICAgICAgIGZhbGxiYWNrVXJsIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTmV0d29ya0NvcmUgPSBOZXR3b3JrQ29yZTtcbmNvbnN0IF9lbnN1cmVWYWxpZFNka0tleSA9IChhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzLnNka0tleSkge1xuICAgICAgICBMb2dfMS5Mb2cud2FybignVW5hYmxlIHRvIG1ha2UgcmVxdWVzdCB3aXRob3V0IGFuIFNESyBrZXknKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5mdW5jdGlvbiBfZ2V0RXJyb3JNZXNzYWdlKGNvbnRyb2xsZXIsIGVycm9yKSB7XG4gICAgaWYgKChjb250cm9sbGVyID09PSBudWxsIHx8IGNvbnRyb2xsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpICYmXG4gICAgICAgIHR5cGVvZiBjb250cm9sbGVyLnNpZ25hbC5yZWFzb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbC5yZWFzb247XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9XG4gICAgcmV0dXJuICdVbmtub3duIEVycm9yJztcbn1cbmZ1bmN0aW9uIF9kaWRUaW1lb3V0KGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCB0aW1lb3V0ID0gKGNvbnRyb2xsZXIgPT09IG51bGwgfHwgY29udHJvbGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgJiZcbiAgICAgICAgdHlwZW9mIGNvbnRyb2xsZXIuc2lnbmFsLnJlYXNvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgY29udHJvbGxlci5zaWduYWwucmVhc29uLmluY2x1ZGVzKCdUaW1lb3V0Jyk7XG4gICAgcmV0dXJuIHRpbWVvdXQgfHwgZmFsc2U7XG59XG5mdW5jdGlvbiBfdHJ5TWFya0luaXRTdGFydChhcmdzLCBhdHRlbXB0KSB7XG4gICAgaWYgKGFyZ3MudXJsQ29uZmlnLmVuZHBvaW50ICE9PSBOZXR3b3JrQ29uZmlnXzEuRW5kcG9pbnQuX2luaXRpYWxpemUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBEaWFnbm9zdGljc18xLkRpYWdub3N0aWNzLl9tYXJrSW5pdE5ldHdvcmtSZXFTdGFydChhcmdzLnNka0tleSwge1xuICAgICAgICBhdHRlbXB0LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gX3RyeU1hcmtJbml0RW5kKGFyZ3MsIHJlc3BvbnNlLCBhdHRlbXB0LCBib2R5LCBlcnIpIHtcbiAgICBpZiAoYXJncy51cmxDb25maWcuZW5kcG9pbnQgIT09IE5ldHdvcmtDb25maWdfMS5FbmRwb2ludC5faW5pdGlhbGl6ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIERpYWdub3N0aWNzXzEuRGlhZ25vc3RpY3MuX21hcmtJbml0TmV0d29ya1JlcUVuZChhcmdzLnNka0tleSwgRGlhZ25vc3RpY3NfMS5EaWFnbm9zdGljcy5fZ2V0RGlhZ25vc3RpY3NEYXRhKHJlc3BvbnNlLCBhdHRlbXB0LCBib2R5LCBlcnIpKTtcbn1cbmZ1bmN0aW9uIF9leHBvbmVudGlhbEJhY2tvZmYoYXR0ZW1wdCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIDEqMSoxMDAwIDFzXG4gICAgICAgIC8vIDIqMioxMDAwIDRzXG4gICAgICAgIC8vIDMqMyoxMDAwIDlzXG4gICAgICAgIC8vIDQqNCoxMDAwIDE2c1xuICAgICAgICAvLyA1KjUqMTAwMCAyNXNcbiAgICAgICAgeWllbGQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgTWF0aC5taW4oQkFDS09GRl9CQVNFX01TICogKGF0dGVtcHQgKiBhdHRlbXB0KSwgQkFDS09GRl9NQVhfTVMpKSk7XG4gICAgfSk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RhdHNpZ0NsaWVudEJhc2UgPSB2b2lkIDA7XG5yZXF1aXJlKFwiLi8kX1N0YXRzaWdHbG9iYWxcIik7XG5jb25zdCBfX1N0YXRzaWdHbG9iYWxfMSA9IHJlcXVpcmUoXCIuLyRfU3RhdHNpZ0dsb2JhbFwiKTtcbmNvbnN0IEVycm9yQm91bmRhcnlfMSA9IHJlcXVpcmUoXCIuL0Vycm9yQm91bmRhcnlcIik7XG5jb25zdCBFdmVudExvZ2dlcl8xID0gcmVxdWlyZShcIi4vRXZlbnRMb2dnZXJcIik7XG5jb25zdCBMb2dfMSA9IHJlcXVpcmUoXCIuL0xvZ1wiKTtcbmNvbnN0IE1lbW9LZXlfMSA9IHJlcXVpcmUoXCIuL01lbW9LZXlcIik7XG5jb25zdCBTYWZlSnNfMSA9IHJlcXVpcmUoXCIuL1NhZmVKc1wiKTtcbmNvbnN0IFNlc3Npb25JRF8xID0gcmVxdWlyZShcIi4vU2Vzc2lvbklEXCIpO1xuY29uc3QgU3RvcmFnZVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9TdG9yYWdlUHJvdmlkZXJcIik7XG5jb25zdCBNQVhfTUVNT19DQUNIRV9TSVpFID0gMzAwMDtcbmNsYXNzIFN0YXRzaWdDbGllbnRCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihzZGtLZXksIGFkYXB0ZXIsIG5ldHdvcmssIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0dXMgPSAnVW5pbml0aWFsaXplZCc7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVQcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0ge307XG4gICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLiRlbXQuYmluZCh0aGlzKTtcbiAgICAgICAgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2dMZXZlbCkgIT0gbnVsbCAmJiAoTG9nXzEuTG9nLmxldmVsID0gb3B0aW9ucy5sb2dMZXZlbCk7XG4gICAgICAgIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGlzYWJsZVN0b3JhZ2UpICYmIFN0b3JhZ2VQcm92aWRlcl8xLlN0b3JhZ2UuX3NldERpc2FibGVkKHRydWUpO1xuICAgICAgICAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmluaXRpYWxTZXNzaW9uSUQpICYmXG4gICAgICAgICAgICBTZXNzaW9uSURfMS5TdGF0c2lnU2Vzc2lvbi5vdmVycmlkZUluaXRpYWxTZXNzaW9uSUQob3B0aW9ucy5pbml0aWFsU2Vzc2lvbklELCBzZGtLZXkpO1xuICAgICAgICAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnN0b3JhZ2VQcm92aWRlcikgJiYgU3RvcmFnZVByb3ZpZGVyXzEuU3RvcmFnZS5fc2V0UHJvdmlkZXIob3B0aW9ucy5zdG9yYWdlUHJvdmlkZXIpO1xuICAgICAgICB0aGlzLl9zZGtLZXkgPSBzZGtLZXk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgdGhpcy5fbWVtb0NhY2hlID0ge307XG4gICAgICAgIHRoaXMub3ZlcnJpZGVBZGFwdGVyID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm92ZXJyaWRlQWRhcHRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyID0gbmV3IEV2ZW50TG9nZ2VyXzEuRXZlbnRMb2dnZXIoc2RrS2V5LCBlbWl0dGVyLCBuZXR3b3JrLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZXJyb3JCb3VuZGFyeSA9IG5ldyBFcnJvckJvdW5kYXJ5XzEuRXJyb3JCb3VuZGFyeShzZGtLZXksIG9wdGlvbnMsIGVtaXR0ZXIpO1xuICAgICAgICB0aGlzLl9lcnJvckJvdW5kYXJ5LndyYXAodGhpcyk7XG4gICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkud3JhcChhZGFwdGVyKTtcbiAgICAgICAgdGhpcy5fZXJyb3JCb3VuZGFyeS53cmFwKHRoaXMuX2xvZ2dlcik7XG4gICAgICAgIG5ldHdvcmsuc2V0RXJyb3JCb3VuZGFyeSh0aGlzLl9lcnJvckJvdW5kYXJ5KTtcbiAgICAgICAgdGhpcy5kYXRhQWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgICAgIHRoaXMuZGF0YUFkYXB0ZXIuYXR0YWNoKHNka0tleSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVByb3ZpZGVyID0gU3RvcmFnZVByb3ZpZGVyXzEuU3RvcmFnZTtcbiAgICAgICAgdGhpcy5fcHJpbWVSZWFkeVJpcGNvcmQoKTtcbiAgICAgICAgX2Fzc2lnbkdsb2JhbEluc3RhbmNlKHNka0tleSwgdGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgcnVudGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTREssIGFsbG93aW5nIHRvZ2dsaW5nIG9mIGNlcnRhaW4gYmVoYXZpb3JzIHN1Y2ggYXMgbG9nZ2luZyBhbmQgc3RvcmFnZSB0byBjb21wbHkgd2l0aCB1c2VyIHByZWZlcmVuY2VzIG9yIHJlZ3VsYXRpb25zIHN1Y2ggYXMgR0RQUi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RhdHNpZ1J1bnRpbWVNdXRhYmxlT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBkaWN0YXRlIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBTREsuXG4gICAgICovXG4gICAgdXBkYXRlUnVudGltZU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5kaXNhYmxlTG9nZ2luZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLmRpc2FibGVMb2dnaW5nID0gb3B0aW9ucy5kaXNhYmxlTG9nZ2luZztcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5zZXRMb2dnaW5nRGlzYWJsZWQob3B0aW9ucy5kaXNhYmxlTG9nZ2luZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZGlzYWJsZVN0b3JhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5kaXNhYmxlU3RvcmFnZSA9IG9wdGlvbnMuZGlzYWJsZVN0b3JhZ2U7XG4gICAgICAgICAgICBTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlLl9zZXREaXNhYmxlZChvcHRpb25zLmRpc2FibGVTdG9yYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFueSBjdXJyZW50bHkgcXVldWVkIGV2ZW50cy5cbiAgICAgKi9cbiAgICBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ2dlci5mbHVzaCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHcmFjZWZ1bGx5IHNodXRzIGRvd24gdGhlIFNESywgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyBldmVudHMgYXJlIHNlbmQgYmVmb3JlIHRoZSBTREsgc3RvcHMuXG4gICAgICogVGhpcyBmdW5jdGlvbiBlbWl0cyBhICdwcmVfc2h1dGRvd24nIGV2ZW50IGFuZCB0aGVuIHdhaXRzIGZvciB0aGUgbG9nZ2VyIHRvIGNvbXBsZXRlIGl0cyBzaHV0ZG93biBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIHNodXRkb3duIHByb2NlZHVyZXMsIGluY2x1ZGluZyBsb2dnaW5nIHNodXRkb3duLCBoYXZlIGJlZW4gY29tcGxldGVkLlxuICAgICAqL1xuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdGhpcy4kZW10KHsgbmFtZTogJ3ByZV9zaHV0ZG93bicgfSk7XG4gICAgICAgICAgICB0aGlzLl9zZXRTdGF0dXMoJ1VuaW5pdGlhbGl6ZWQnLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuX2xvZ2dlci5zdG9wKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBzcGVjaWZpYyB7QGxpbmsgU3RhdHNpZ0NsaWVudEV2ZW50fSBvciBhbGwgU3RhdHNpZ0NsaWVudEV2ZW50cyBpZiB0aGUgd2lsZGNhcmQgJyonIGlzIHVzZWQuXG4gICAgICogT25jZSBzdWJzY3JpYmVkLCB0aGUgbGlzdGVuZXIgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdoZW5ldmVyIHRoZSBzcGVjaWZpZWQgZXZlbnQgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RhdHNpZ0NsaWVudEV2ZW50TmFtZX0gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gc3Vic2NyaWJlIHRvLCBvciAnKicgdG8gc3Vic2NyaWJlIHRvIGFsbCBldmVudHMuXG4gICAgICogQHBhcmFtIHtTdGF0c2lnQ2xpZW50RXZlbnRDYWxsYmFjazxUPn0gbGlzdGVuZXIgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBvY2N1cnMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBldmVudC1zcGVjaWZpYyBkYXRhIGFzIGl0cyBwYXJhbWV0ZXIuXG4gICAgICogQHNlZSB7QGxpbmsgb2ZmfSBmb3IgdW5zdWJzY3JpYmluZyBmcm9tIGV2ZW50cy5cbiAgICAgKi9cbiAgICBvbihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmVzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZyb20gYSBzcGVjaWZpYyB7QGxpbmsgU3RhdHNpZ0NsaWVudEV2ZW50fSBvciBhbGwgU3RhdHNpZ0NsaWVudEV2ZW50cyBpZiB0aGUgd2lsZGNhcmQgJyonIGlzIHVzZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0YXRzaWdDbGllbnRFdmVudE5hbWV9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IGZyb20gd2hpY2ggdG8gdW5zdWJzY3JpYmUsIG9yICcqJyB0byB1bnN1YnNjcmliZSBmcm9tIGFsbCBldmVudHMuXG4gICAgICogQHBhcmFtIHtTdGF0c2lnQ2xpZW50RXZlbnRDYWxsYmFjazxUPn0gbGlzdGVuZXIgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIGV2ZW50J3Mgbm90aWZpY2F0aW9uIGxpc3QuXG4gICAgICogQHNlZSB7QGxpbmsgb259IGZvciBzdWJzY3JpYmluZyB0byBldmVudHMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAkb24oZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyLl9faXNJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgIHRoaXMub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgJGVtdChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSAobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLl9faXNJbnRlcm5hbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvckJvdW5kYXJ5LmxvZ0Vycm9yKGBfX2VtaXQ6JHtldmVudC5uYW1lfWAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBMb2dfMS5Mb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIGluIGEgU3RhdHNpZ0NsaWVudEV2ZW50IGxpc3RlbmVyLiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSB3aXRoIFN0YXRzaWcuYCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzW2V2ZW50Lm5hbWVdKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnQubmFtZV0uZm9yRWFjaCgobCkgPT4gYmFycmllcihsKSk7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gdGhpcy5fbGlzdGVuZXJzWycqJ10pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKGJhcnJpZXIpO1xuICAgIH1cbiAgICBfc2V0U3RhdHVzKG5ld1N0YXR1cywgdmFsdWVzKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXR1cyA9IG5ld1N0YXR1cztcbiAgICAgICAgdGhpcy5fbWVtb0NhY2hlID0ge307XG4gICAgICAgIHRoaXMuJGVtdCh7IG5hbWU6ICd2YWx1ZXNfdXBkYXRlZCcsIHN0YXR1czogbmV3U3RhdHVzLCB2YWx1ZXMgfSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlRXhwb3N1cmUobmFtZSwgZXhwb3N1cmUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGlzYWJsZUV4cG9zdXJlTG9nKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluY3JlbWVudE5vbkV4cG9zdXJlQ291bnQobmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVucXVldWUoZXhwb3N1cmUpO1xuICAgIH1cbiAgICBfbWVtb2l6ZShwcmVmaXgsIGZuKSB7XG4gICAgICAgIHJldHVybiAobmFtZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZGlzYWJsZUV2YWx1YXRpb25NZW1vaXphdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbihuYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lbW9LZXkgPSAoMCwgTWVtb0tleV8xLmNyZWF0ZU1lbW9LZXkpKHByZWZpeCwgbmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIW1lbW9LZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4obmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShtZW1vS2V5IGluIHRoaXMuX21lbW9DYWNoZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fbWVtb0NhY2hlKS5sZW5ndGggPj0gTUFYX01FTU9fQ0FDSEVfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZW1vQ2FjaGUgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbWVtb0NhY2hlW21lbW9LZXldID0gZm4obmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVtb0NhY2hlW21lbW9LZXldO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU3RhdHNpZ0NsaWVudEJhc2UgPSBTdGF0c2lnQ2xpZW50QmFzZTtcbmZ1bmN0aW9uIF9hc3NpZ25HbG9iYWxJbnN0YW5jZShzZGtLZXksIGNsaWVudCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKDAsIFNhZmVKc18xLl9pc1NlcnZlckVudikoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXRzaWdHbG9iYWwgPSAoMCwgX19TdGF0c2lnR2xvYmFsXzEuX2dldFN0YXRzaWdHbG9iYWwpKCk7XG4gICAgY29uc3QgaW5zdGFuY2VzID0gKF9hID0gc3RhdHNpZ0dsb2JhbC5pbnN0YW5jZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgIGNvbnN0IGluc3QgPSBjbGllbnQ7XG4gICAgaWYgKGluc3RhbmNlc1tzZGtLZXldICE9IG51bGwpIHtcbiAgICAgICAgTG9nXzEuTG9nLndhcm4oJ0NyZWF0aW5nIG11bHRpcGxlIFN0YXRzaWcgY2xpZW50cyB3aXRoIHRoZSBzYW1lIFNESyBrZXkgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gTXVsdGktaW5zdGFuY2Ugc3VwcG9ydCByZXF1aXJlcyBkaWZmZXJlbnQgU0RLIGtleXMuJyk7XG4gICAgfVxuICAgIGluc3RhbmNlc1tzZGtLZXldID0gaW5zdDtcbiAgICBpZiAoIXN0YXRzaWdHbG9iYWwuZmlyc3RJbnN0YW5jZSkge1xuICAgICAgICBzdGF0c2lnR2xvYmFsLmZpcnN0SW5zdGFuY2UgPSBpbnN0O1xuICAgIH1cbiAgICBzdGF0c2lnR2xvYmFsLmluc3RhbmNlcyA9IGluc3RhbmNlcztcbiAgICBfX1NUQVRTSUdfXyA9IHN0YXRzaWdHbG9iYWw7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EYXRhQWRhcHRlckNhY2hlUHJlZml4ID0gdm9pZCAwO1xuZXhwb3J0cy5EYXRhQWRhcHRlckNhY2hlUHJlZml4ID0gJ3N0YXRzaWcuY2FjaGVkJztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX21ha2VUeXBlZEdldCA9IGV4cG9ydHMuX21lcmdlT3ZlcnJpZGUgPSBleHBvcnRzLl9tYWtlTGF5ZXIgPSBleHBvcnRzLl9tYWtlRXhwZXJpbWVudCA9IGV4cG9ydHMuX21ha2VEeW5hbWljQ29uZmlnID0gZXhwb3J0cy5fbWFrZUZlYXR1cmVHYXRlID0gdm9pZCAwO1xuY29uc3QgTG9nXzEgPSByZXF1aXJlKFwiLi9Mb2dcIik7XG5jb25zdCBUeXBpbmdVdGlsc18xID0gcmVxdWlyZShcIi4vVHlwaW5nVXRpbHNcIik7XG5jb25zdCBERUZBVUxUX1JVTEUgPSAnZGVmYXVsdCc7XG5mdW5jdGlvbiBfbWFrZUV2YWx1YXRpb24obmFtZSwgZGV0YWlscywgZXZhbHVhdGlvbiwgdmFsdWUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGV0YWlscyxcbiAgICAgICAgcnVsZUlEOiAoX2EgPSBldmFsdWF0aW9uID09PSBudWxsIHx8IGV2YWx1YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2YWx1YXRpb24ucnVsZV9pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9SVUxFLFxuICAgICAgICBfX2V2YWx1YXRpb246IGV2YWx1YXRpb24sXG4gICAgICAgIHZhbHVlLFxuICAgIH07XG59XG5mdW5jdGlvbiBfbWFrZUZlYXR1cmVHYXRlKG5hbWUsIGRldGFpbHMsIGV2YWx1YXRpb24pIHtcbiAgICByZXR1cm4gX21ha2VFdmFsdWF0aW9uKG5hbWUsIGRldGFpbHMsIGV2YWx1YXRpb24sIChldmFsdWF0aW9uID09PSBudWxsIHx8IGV2YWx1YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2YWx1YXRpb24udmFsdWUpID09PSB0cnVlKTtcbn1cbmV4cG9ydHMuX21ha2VGZWF0dXJlR2F0ZSA9IF9tYWtlRmVhdHVyZUdhdGU7XG5mdW5jdGlvbiBfbWFrZUR5bmFtaWNDb25maWcobmFtZSwgZGV0YWlscywgZXZhbHVhdGlvbikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB2YWx1ZSA9IChfYSA9IGV2YWx1YXRpb24gPT09IG51bGwgfHwgZXZhbHVhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXZhbHVhdGlvbi52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgX21ha2VFdmFsdWF0aW9uKG5hbWUsIGRldGFpbHMsIGV2YWx1YXRpb24sIHZhbHVlKSksIHsgZ2V0OiBfbWFrZVR5cGVkR2V0KG5hbWUsIGV2YWx1YXRpb24gPT09IG51bGwgfHwgZXZhbHVhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXZhbHVhdGlvbi52YWx1ZSkgfSk7XG59XG5leHBvcnRzLl9tYWtlRHluYW1pY0NvbmZpZyA9IF9tYWtlRHluYW1pY0NvbmZpZztcbmZ1bmN0aW9uIF9tYWtlRXhwZXJpbWVudChuYW1lLCBkZXRhaWxzLCBldmFsdWF0aW9uKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IF9tYWtlRHluYW1pY0NvbmZpZyhuYW1lLCBkZXRhaWxzLCBldmFsdWF0aW9uKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN1bHQpLCB7IGdyb3VwTmFtZTogKF9hID0gZXZhbHVhdGlvbiA9PT0gbnVsbCB8fCBldmFsdWF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBldmFsdWF0aW9uLmdyb3VwX25hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwgfSk7XG59XG5leHBvcnRzLl9tYWtlRXhwZXJpbWVudCA9IF9tYWtlRXhwZXJpbWVudDtcbmZ1bmN0aW9uIF9tYWtlTGF5ZXIobmFtZSwgZGV0YWlscywgZXZhbHVhdGlvbiwgZXhwb3NlRnVuYykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgX21ha2VFdmFsdWF0aW9uKG5hbWUsIGRldGFpbHMsIGV2YWx1YXRpb24sIHVuZGVmaW5lZCkpLCB7IGdldDogX21ha2VUeXBlZEdldChuYW1lLCBldmFsdWF0aW9uID09PSBudWxsIHx8IGV2YWx1YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2YWx1YXRpb24udmFsdWUsIGV4cG9zZUZ1bmMpLCBncm91cE5hbWU6IChfYSA9IGV2YWx1YXRpb24gPT09IG51bGwgfHwgZXZhbHVhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXZhbHVhdGlvbi5ncm91cF9uYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsLCBfX3ZhbHVlOiAoX2IgPSBldmFsdWF0aW9uID09PSBudWxsIHx8IGV2YWx1YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2YWx1YXRpb24udmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9IH0pO1xufVxuZXhwb3J0cy5fbWFrZUxheWVyID0gX21ha2VMYXllcjtcbmZ1bmN0aW9uIF9tZXJnZU92ZXJyaWRlKG9yaWdpbmFsLCBvdmVycmlkZGVuLCB2YWx1ZSwgZXhwb3NlRnVuYykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwpLCBvdmVycmlkZGVuKSwgeyBnZXQ6IF9tYWtlVHlwZWRHZXQob3JpZ2luYWwubmFtZSwgdmFsdWUsIGV4cG9zZUZ1bmMpIH0pO1xufVxuZXhwb3J0cy5fbWVyZ2VPdmVycmlkZSA9IF9tZXJnZU92ZXJyaWRlO1xuZnVuY3Rpb24gX21ha2VUeXBlZEdldChuYW1lLCB2YWx1ZSwgZXhwb3NlRnVuYykge1xuICAgIHJldHVybiAocGFyYW0sIGZhbGxiYWNrKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZm91bmQgPSAoX2EgPSB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWVbcGFyYW1dKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICBpZiAoZm91bmQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIChmYWxsYmFjayAhPT0gbnVsbCAmJiBmYWxsYmFjayAhPT0gdm9pZCAwID8gZmFsbGJhY2sgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFsbGJhY2sgIT0gbnVsbCAmJiAhKDAsIFR5cGluZ1V0aWxzXzEuX2lzVHlwZU1hdGNoKShmb3VuZCwgZmFsbGJhY2spKSB7XG4gICAgICAgICAgICBMb2dfMS5Mb2cud2FybihgUGFyYW1ldGVyIHR5cGUgbWlzbWF0Y2guICcke25hbWV9LiR7cGFyYW19JyB3YXMgZm91bmQgdG8gYmUgdHlwZSAnJHt0eXBlb2YgZm91bmR9JyBidXQgZmFsbGJhY2svcmV0dXJuIHR5cGUgaXMgJyR7dHlwZW9mIGZhbGxiYWNrfScuIFNlZSBodHRwczovL2RvY3Muc3RhdHNpZy5jb20vY2xpZW50L2phdmFzY3JpcHQtc2RrLyN0eXBlZC1nZXR0ZXJzYCk7XG4gICAgICAgICAgICByZXR1cm4gKGZhbGxiYWNrICE9PSBudWxsICYmIGZhbGxiYWNrICE9PSB2b2lkIDAgPyBmYWxsYmFjayA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9zZUZ1bmMgPT09IG51bGwgfHwgZXhwb3NlRnVuYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwb3NlRnVuYyhwYXJhbSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9O1xufVxuZXhwb3J0cy5fbWFrZVR5cGVkR2V0ID0gX21ha2VUeXBlZEdldDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUERBVEVfREVUQUlMX0VSUk9SX01FU1NBR0VTID0gZXhwb3J0cy5jcmVhdGVVcGRhdGVEZXRhaWxzID0gdm9pZCAwO1xuY29uc3QgY3JlYXRlVXBkYXRlRGV0YWlscyA9IChzdWNjZXNzLCBzb3VyY2UsIGluaXREdXJhdGlvbiwgZXJyb3IsIHNvdXJjZVVybCwgd2FybmluZ3MpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkdXJhdGlvbjogaW5pdER1cmF0aW9uLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN1Y2Nlc3MsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHdhcm5pbmdzLFxuICAgIH07XG59O1xuZXhwb3J0cy5jcmVhdGVVcGRhdGVEZXRhaWxzID0gY3JlYXRlVXBkYXRlRGV0YWlscztcbmV4cG9ydHMuVVBEQVRFX0RFVEFJTF9FUlJPUl9NRVNTQUdFUyA9IHtcbiAgICBOT19ORVRXT1JLX0RBVEE6ICdObyBkYXRhIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBuZXR3b3JrLiBUaGlzIG1heSBiZSBkdWUgdG8gYSBuZXR3b3JrIHRpbWVvdXQgaWYgYSB0aW1lb3V0IHZhbHVlIHdhcyBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMgb3IgYWQgYmxvY2tlciBlcnJvci4nLFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNES0ZsYWdzID0gdm9pZCAwO1xuY29uc3QgRkxBR01BUCA9IHt9O1xuZXhwb3J0cy5TREtGbGFncyA9IHtcbiAgICBzZXRGbGFnczogKHNka0tleSwgZmxhZ3MpID0+IHtcbiAgICAgICAgRkxBR01BUFtzZGtLZXldID0gZmxhZ3M7XG4gICAgfSxcbiAgICBnZXQ6IChzZGtLZXksIGZsYWdLZXkpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IEZMQUdNQVBbc2RrS2V5XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2ZsYWdLZXldKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbiAgICB9LFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RvcmFnZSA9IGV4cG9ydHMuTG9nID0gZXhwb3J0cy5FdmVudExvZ2dlciA9IGV4cG9ydHMuRGlhZ25vc3RpY3MgPSB2b2lkIDA7XG4vKiogU3RhdHNpZyBHbG9iYWwgc2hvdWxkIGdvIGZpcnN0ICovXG5yZXF1aXJlKFwiLi8kX1N0YXRzaWdHbG9iYWxcIik7XG5jb25zdCBEaWFnbm9zdGljc18xID0gcmVxdWlyZShcIi4vRGlhZ25vc3RpY3NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaWFnbm9zdGljc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRGlhZ25vc3RpY3NfMS5EaWFnbm9zdGljczsgfSB9KTtcbmNvbnN0IEV2ZW50TG9nZ2VyXzEgPSByZXF1aXJlKFwiLi9FdmVudExvZ2dlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV2ZW50TG9nZ2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBFdmVudExvZ2dlcl8xLkV2ZW50TG9nZ2VyOyB9IH0pO1xuY29uc3QgTG9nXzEgPSByZXF1aXJlKFwiLi9Mb2dcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb2dcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExvZ18xLkxvZzsgfSB9KTtcbmNvbnN0IFN0YXRzaWdNZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vU3RhdHNpZ01ldGFkYXRhXCIpO1xuY29uc3QgU3RvcmFnZVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9TdG9yYWdlUHJvdmlkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdG9yYWdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTdG9yYWdlUHJvdmlkZXJfMS5TdG9yYWdlOyB9IH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuLyRfU3RhdHNpZ0dsb2JhbFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQ2FjaGVLZXlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0NsaWVudEludGVyZmFjZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0RhdGFBZGFwdGVyQ29yZVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRGlhZ25vc3RpY3NcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Rvd25sb2FkQ29uZmlnU3BlY3NSZXNwb25zZVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRXJyb3JCb3VuZGFyeVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRXZhbHVhdGlvbk9wdGlvbnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0V2YWx1YXRpb25UeXBlc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSGFzaGluZ1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSW5pdGlhbGl6ZVJlc3BvbnNlXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Mb2dcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL01lbW9LZXlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL05ldHdvcmtDb25maWdcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL05ldHdvcmtDb3JlXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9PdmVycmlkZUFkYXB0ZXJcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1BhcmFtU3RvcmVUeXBlc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU2FmZUpzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TREtUeXBlXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TZXNzaW9uSURcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0YWJsZUlEXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdGF0c2lnQ2xpZW50QmFzZVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU3RhdHNpZ0NsaWVudEV2ZW50RW1pdHRlclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU3RhdHNpZ0RhdGFBZGFwdGVyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdGF0c2lnRXZlbnRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0YXRzaWdNZXRhZGF0YVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU3RhdHNpZ09wdGlvbnNDb21tb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0YXRzaWdQbHVnaW5cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0YXRzaWdUeXBlRmFjdG9yaWVzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdGF0c2lnVHlwZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0YXRzaWdVc2VyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdG9yYWdlUHJvdmlkZXJcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1R5cGVkSnNvblBhcnNlXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9UeXBpbmdVdGlsc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVXJsQ29uZmlndXJhdGlvblwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVVVJRFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVmlzaWJpbGl0eU9ic2VydmluZ1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU3RhdHNpZ1VwZGF0ZURldGFpbHNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NES0ZsYWdzXCIpLCBleHBvcnRzKTtcbl9fU1RBVFNJR19fID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoX19TVEFUU0lHX18gIT09IG51bGwgJiYgX19TVEFUU0lHX18gIT09IHZvaWQgMCA/IF9fU1RBVFNJR19fIDoge30pKSwgeyBMb2c6IExvZ18xLkxvZyxcbiAgICBTREtfVkVSU0lPTjogU3RhdHNpZ01ldGFkYXRhXzEuU0RLX1ZFUlNJT04gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2xpZW50X2NvcmVfMSA9IHJlcXVpcmUoXCJAc3RhdHNpZy9jbGllbnQtY29yZVwiKTtcbmNsYXNzIEV2YWx1YXRpb25TdG9yZSB7XG4gICAgY29uc3RydWN0b3IoX3Nka0tleSkge1xuICAgICAgICB0aGlzLl9zZGtLZXkgPSBfc2RrS2V5O1xuICAgICAgICB0aGlzLl9yYXdWYWx1ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9zb3VyY2UgPSAnVW5pbml0aWFsaXplZCc7XG4gICAgICAgIHRoaXMuX2xjdXQgPSAwO1xuICAgICAgICB0aGlzLl9yZWNlaXZlZEF0ID0gMDtcbiAgICAgICAgdGhpcy5fYm9vdHN0cmFwTWV0YWRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLl93YXJuaW5ncyA9IG5ldyBTZXQoKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Jhd1ZhbHVlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NvdXJjZSA9ICdMb2FkaW5nJztcbiAgICAgICAgdGhpcy5fbGN1dCA9IDA7XG4gICAgICAgIHRoaXMuX3JlY2VpdmVkQXQgPSAwO1xuICAgICAgICB0aGlzLl9ib290c3RyYXBNZXRhZGF0YSA9IG51bGw7XG4gICAgfVxuICAgIGZpbmFsaXplKCkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlID0gJ05vVmFsdWVzJztcbiAgICB9XG4gICAgZ2V0VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmF3VmFsdWVzXG4gICAgICAgICAgICA/ICgwLCBjbGllbnRfY29yZV8xLl90eXBlZEpzb25QYXJzZSkodGhpcy5fcmF3VmFsdWVzLCAnaGFzX3VwZGF0ZXMnLCAnRXZhbHVhdGlvblN0b3JlVmFsdWVzJylcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgc2V0VmFsdWVzKHJlc3VsdCwgdXNlcikge1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9ICgwLCBjbGllbnRfY29yZV8xLl90eXBlZEpzb25QYXJzZSkocmVzdWx0LmRhdGEsICdoYXNfdXBkYXRlcycsICdFdmFsdWF0aW9uUmVzcG9uc2UnKTtcbiAgICAgICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlID0gcmVzdWx0LnNvdXJjZTtcbiAgICAgICAgaWYgKCh2YWx1ZXMgPT09IG51bGwgfHwgdmFsdWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZXMuaGFzX3VwZGF0ZXMpICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yYXdWYWx1ZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhpcy5fbGN1dCA9IHZhbHVlcy50aW1lO1xuICAgICAgICB0aGlzLl9yZWNlaXZlZEF0ID0gcmVzdWx0LnJlY2VpdmVkQXQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgdGhpcy5fYm9vdHN0cmFwTWV0YWRhdGEgPSB0aGlzLl9leHRyYWN0Qm9vdHN0cmFwTWV0YWRhdGEocmVzdWx0LnNvdXJjZSwgdmFsdWVzKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zb3VyY2UgJiYgdmFsdWVzLnVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFdhcm5pbmdTdGF0ZSh1c2VyLCB2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZXMuc2RrX2ZsYWdzKSB7XG4gICAgICAgICAgICBjbGllbnRfY29yZV8xLlNES0ZsYWdzLnNldEZsYWdzKHRoaXMuX3Nka0tleSwgdmFsdWVzLnNka19mbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjbGllbnRfY29yZV8xLlNES0ZsYWdzLnNldEZsYWdzKHRoaXMuX3Nka0tleSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRXYXJuaW5ncygpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dhcm5pbmdzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fd2FybmluZ3MpO1xuICAgIH1cbiAgICBnZXRHYXRlKG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RGV0YWlsZWRTdG9yZVJlc3VsdCgoX2EgPSB0aGlzLl92YWx1ZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mZWF0dXJlX2dhdGVzLCBuYW1lKTtcbiAgICB9XG4gICAgZ2V0Q29uZmlnKG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RGV0YWlsZWRTdG9yZVJlc3VsdCgoX2EgPSB0aGlzLl92YWx1ZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5keW5hbWljX2NvbmZpZ3MsIG5hbWUpO1xuICAgIH1cbiAgICBnZXRMYXllcihuYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldERldGFpbGVkU3RvcmVSZXN1bHQoKF9hID0gdGhpcy5fdmFsdWVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGF5ZXJfY29uZmlncywgbmFtZSk7XG4gICAgfVxuICAgIGdldFBhcmFtU3RvcmUobmFtZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXREZXRhaWxlZFN0b3JlUmVzdWx0KChfYSA9IHRoaXMuX3ZhbHVlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnBhcmFtX3N0b3JlcywgbmFtZSk7XG4gICAgfVxuICAgIGdldFNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICB9XG4gICAgX2V4dHJhY3RCb290c3RyYXBNZXRhZGF0YShzb3VyY2UsIHZhbHVlcykge1xuICAgICAgICBpZiAoc291cmNlICE9PSAnQm9vdHN0cmFwJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgaWYgKHZhbHVlcy51c2VyKSB7XG4gICAgICAgICAgICBib290c3RyYXBNZXRhZGF0YS51c2VyID0gdmFsdWVzLnVzZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5zZGtJbmZvKSB7XG4gICAgICAgICAgICBib290c3RyYXBNZXRhZGF0YS5nZW5lcmF0b3JTREtJbmZvID0gdmFsdWVzLnNka0luZm87XG4gICAgICAgIH1cbiAgICAgICAgYm9vdHN0cmFwTWV0YWRhdGEubGN1dCA9IHZhbHVlcy50aW1lO1xuICAgICAgICByZXR1cm4gYm9vdHN0cmFwTWV0YWRhdGE7XG4gICAgfVxuICAgIF9nZXREZXRhaWxlZFN0b3JlUmVzdWx0KGxvb2t1cCwgbmFtZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKGxvb2t1cCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbG9va3VwW25hbWVdID8gbG9va3VwW25hbWVdIDogbG9va3VwWygwLCBjbGllbnRfY29yZV8xLl9ESkIyKShuYW1lKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuX2dldERldGFpbHMocmVzdWx0ID09IG51bGwpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfc2V0V2FybmluZ1N0YXRlKHVzZXIsIHZhbHVlcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YWJsZUlEID0gY2xpZW50X2NvcmVfMS5TdGFibGVJRC5nZXQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgaWYgKCgoX2EgPSB1c2VyLmN1c3RvbUlEcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0YWJsZUlEKSAhPT0gc3RhYmxlSUQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dhcm5pbmdzLmFkZCgnU3RhYmxlSURNaXNtYXRjaCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgndXNlcicgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBib290c3RyYXBVc2VyID0gdmFsdWVzWyd1c2VyJ107XG4gICAgICAgICAgICBpZiAoKDAsIGNsaWVudF9jb3JlXzEuX2dldEZ1bGxVc2VySGFzaCkodXNlcikgIT09ICgwLCBjbGllbnRfY29yZV8xLl9nZXRGdWxsVXNlckhhc2gpKGJvb3RzdHJhcFVzZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FybmluZ3MuYWRkKCdQYXJ0aWFsVXNlck1hdGNoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q3VycmVudFNvdXJjZURldGFpbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgPT09ICdVbmluaXRpYWxpemVkJyB8fCB0aGlzLl9zb3VyY2UgPT09ICdOb1ZhbHVlcycpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlYXNvbjogdGhpcy5fc291cmNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlRGV0YWlscyA9IHtcbiAgICAgICAgICAgIHJlYXNvbjogdGhpcy5fc291cmNlLFxuICAgICAgICAgICAgbGN1dDogdGhpcy5fbGN1dCxcbiAgICAgICAgICAgIHJlY2VpdmVkQXQ6IHRoaXMuX3JlY2VpdmVkQXQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLl93YXJuaW5ncy5zaXplID4gMCkge1xuICAgICAgICAgICAgc291cmNlRGV0YWlscy53YXJuaW5ncyA9IEFycmF5LmZyb20odGhpcy5fd2FybmluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2VEZXRhaWxzO1xuICAgIH1cbiAgICBfZ2V0RGV0YWlscyhpc1VucmVjb2duaXplZCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBzb3VyY2VEZXRhaWxzID0gdGhpcy5nZXRDdXJyZW50U291cmNlRGV0YWlscygpO1xuICAgICAgICBsZXQgcmVhc29uID0gc291cmNlRGV0YWlscy5yZWFzb247XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzID0gKF9hID0gc291cmNlRGV0YWlscy53YXJuaW5ncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgPT09ICdCb290c3RyYXAnICYmIHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlYXNvbiA9IHJlYXNvbiArIHdhcm5pbmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWFzb24gIT09ICdVbmluaXRpYWxpemVkJyAmJiByZWFzb24gIT09ICdOb1ZhbHVlcycpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnJlYXNvbiA9IGlzVW5yZWNvZ25pemVkID8gJ1VucmVjb2duaXplZCcgOiAnUmVjb2duaXplZCc7XG4gICAgICAgICAgICByZWFzb24gPSBgJHtyZWFzb259OiR7c3VicmVhc29ufWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwTWV0YWRhdGEgPSB0aGlzLl9zb3VyY2UgPT09ICdCb290c3RyYXAnXG4gICAgICAgICAgICA/IChfYiA9IHRoaXMuX2Jvb3RzdHJhcE1ldGFkYXRhKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoYm9vdHN0cmFwTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHNvdXJjZURldGFpbHMuYm9vdHN0cmFwTWV0YWRhdGEgPSBib290c3RyYXBNZXRhZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzb3VyY2VEZXRhaWxzKSwgeyByZWFzb24gfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRXZhbHVhdGlvblN0b3JlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX3Jlc29sdmVEZWx0YXNSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9jb3JlXzEgPSByZXF1aXJlKFwiQHN0YXRzaWcvY2xpZW50LWNvcmVcIik7XG5jb25zdCBNQVhfREVMVEFTX1NPUlRfREVQVEggPSAyO1xuZnVuY3Rpb24gX3Jlc29sdmVEZWx0YXNSZXNwb25zZShjYWNoZSwgZGVsdGFzU3RyaW5nKSB7XG4gICAgY29uc3QgZGVsdGFzID0gKDAsIGNsaWVudF9jb3JlXzEuX3R5cGVkSnNvblBhcnNlKShkZWx0YXNTdHJpbmcsICdjaGVja3N1bScsICdEZWx0YXNFdmFsdWF0aW9uUmVzcG9uc2UnKTtcbiAgICBpZiAoIWRlbHRhcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGFkQmFkRGVsdGFDaGVja3N1bTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbWVyZ2VkID0gX21lcmdlRGVsdGFzSW50b0NhY2hlKGNhY2hlLCBkZWx0YXMpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gX2hhbmRsZURlbGV0ZWRFbnRyaWVzKG1lcmdlZCk7XG4gICAgY29uc3QgYWN0dWFsQ2hlY2tzdW0gPSAoMCwgY2xpZW50X2NvcmVfMS5fREpCMk9iamVjdCkoe1xuICAgICAgICBmZWF0dXJlX2dhdGVzOiByZXNvbHZlZC5mZWF0dXJlX2dhdGVzLFxuICAgICAgICBkeW5hbWljX2NvbmZpZ3M6IHJlc29sdmVkLmR5bmFtaWNfY29uZmlncyxcbiAgICAgICAgbGF5ZXJfY29uZmlnczogcmVzb2x2ZWQubGF5ZXJfY29uZmlncyxcbiAgICB9LCBNQVhfREVMVEFTX1NPUlRfREVQVEgpO1xuICAgIGNvbnN0IGlzTWF0Y2ggPSBhY3R1YWxDaGVja3N1bSA9PT0gZGVsdGFzLmNoZWNrc3VtVjI7XG4gICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoYWRCYWREZWx0YUNoZWNrc3VtOiB0cnVlLFxuICAgICAgICAgICAgYmFkQ2hlY2tzdW06IGFjdHVhbENoZWNrc3VtLFxuICAgICAgICAgICAgYmFkTWVyZ2VkQ29uZmlnczogcmVzb2x2ZWQsXG4gICAgICAgICAgICBiYWRGdWxsUmVzcG9uc2U6IGRlbHRhcy5kZWx0YXNfZnVsbF9yZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc29sdmVkKTtcbn1cbmV4cG9ydHMuX3Jlc29sdmVEZWx0YXNSZXNwb25zZSA9IF9yZXNvbHZlRGVsdGFzUmVzcG9uc2U7XG5mdW5jdGlvbiBfbWVyZ2VEZWx0YXNJbnRvQ2FjaGUoY2FjaGUsIGRlbHRhcykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY2FjaGUpLCBkZWx0YXMpLCB7IGZlYXR1cmVfZ2F0ZXM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY2FjaGUuZmVhdHVyZV9nYXRlcyksIGRlbHRhcy5mZWF0dXJlX2dhdGVzKSwgbGF5ZXJfY29uZmlnczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjYWNoZS5sYXllcl9jb25maWdzKSwgZGVsdGFzLmxheWVyX2NvbmZpZ3MpLCBkeW5hbWljX2NvbmZpZ3M6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY2FjaGUuZHluYW1pY19jb25maWdzKSwgZGVsdGFzLmR5bmFtaWNfY29uZmlncykgfSk7XG59XG5mdW5jdGlvbiBfaGFuZGxlRGVsZXRlZEVudHJpZXMoZGVsdGFzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZGVsdGFzO1xuICAgIF9kZWxldGVFbnRyaWVzSW5SZWNvcmQoZGVsdGFzLmRlbGV0ZWRfZ2F0ZXMsIHJlc3VsdC5mZWF0dXJlX2dhdGVzKTtcbiAgICBkZWxldGUgcmVzdWx0LmRlbGV0ZWRfZ2F0ZXM7XG4gICAgX2RlbGV0ZUVudHJpZXNJblJlY29yZChkZWx0YXMuZGVsZXRlZF9jb25maWdzLCByZXN1bHQuZHluYW1pY19jb25maWdzKTtcbiAgICBkZWxldGUgcmVzdWx0LmRlbGV0ZWRfY29uZmlncztcbiAgICBfZGVsZXRlRW50cmllc0luUmVjb3JkKGRlbHRhcy5kZWxldGVkX2xheWVycywgcmVzdWx0LmxheWVyX2NvbmZpZ3MpO1xuICAgIGRlbGV0ZSByZXN1bHQuZGVsZXRlZF9sYXllcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIF9kZWxldGVFbnRyaWVzSW5SZWNvcmQoa2V5cywgdmFsdWVzKSB7XG4gICAga2V5cyA9PT0gbnVsbCB8fCBrZXlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBkZWxldGUgdmFsdWVzW2tleV07XG4gICAgfSk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjbGllbnRfY29yZV8xID0gcmVxdWlyZShcIkBzdGF0c2lnL2NsaWVudC1jb3JlXCIpO1xuY29uc3QgRXZhbHVhdGlvblJlc3BvbnNlRGVsdGFzXzEgPSByZXF1aXJlKFwiLi9FdmFsdWF0aW9uUmVzcG9uc2VEZWx0YXNcIik7XG5jbGFzcyBTdGF0c2lnTmV0d29yayBleHRlbmRzIGNsaWVudF9jb3JlXzEuTmV0d29ya0NvcmUge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGVtaXR0ZXIpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgZW1pdHRlcik7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5uZXR3b3JrQ29uZmlnO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplVXJsQ29uZmlnID0gbmV3IGNsaWVudF9jb3JlXzEuVXJsQ29uZmlndXJhdGlvbihjbGllbnRfY29yZV8xLkVuZHBvaW50Ll9pbml0aWFsaXplLCBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuaW5pdGlhbGl6ZVVybCwgY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmFwaSwgY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmluaXRpYWxpemVGYWxsYmFja1VybHMpO1xuICAgIH1cbiAgICBmZXRjaEV2YWx1YXRpb25zKHNka0tleSwgY3VycmVudCwgcHJpb3JpdHksIHVzZXIpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gY3VycmVudFxuICAgICAgICAgICAgICAgID8gKDAsIGNsaWVudF9jb3JlXzEuX3R5cGVkSnNvblBhcnNlKShjdXJyZW50LCAnaGFzX3VwZGF0ZXMnLCAnSW5pdGlhbGl6ZVJlc3BvbnNlJylcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgIGhhc2g6ICdkamIyJyxcbiAgICAgICAgICAgICAgICBkZWx0YXNSZXNwb25zZVJlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZnVsbF9jaGVja3N1bTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwgfHwgY2FjaGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhY2hlLmhhc191cGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGF0YSksIHsgc2luY2VUaW1lOiBjYWNoZS50aW1lLCBwcmV2aW91c0Rlcml2ZWRGaWVsZHM6ICdkZXJpdmVkX2ZpZWxkcycgaW4gY2FjaGUgPyBjYWNoZS5kZXJpdmVkX2ZpZWxkcyA6IHt9LCBkZWx0YXNSZXNwb25zZVJlcXVlc3RlZDogdHJ1ZSwgZnVsbF9jaGVja3N1bTogY2FjaGUuZnVsbF9jaGVja3N1bSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEV2YWx1YXRpb25zKHNka0tleSwgY2FjaGUsIGRhdGEsIHByaW9yaXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9mZXRjaEV2YWx1YXRpb25zKHNka0tleSwgY2FjaGUsIGRhdGEsIHByaW9yaXR5KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucG9zdCh7XG4gICAgICAgICAgICAgICAgc2RrS2V5LFxuICAgICAgICAgICAgICAgIHVybENvbmZpZzogdGhpcy5faW5pdGlhbGl6ZVVybENvbmZpZyxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHJldHJpZXM6IDIsXG4gICAgICAgICAgICAgICAgaXNTdGF0c2lnRW5jb2RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5jb2RlKSA9PT0gMjA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd7XCJoYXNfdXBkYXRlc1wiOiBmYWxzZX0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2UuY29kZSkgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2EgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2UuYm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoY2FjaGUgPT09IG51bGwgfHwgY2FjaGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhY2hlLmhhc191cGRhdGVzKSAhPT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgICgoX2IgPSByZXNwb25zZS5ib2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5jbHVkZXMoJ1wiaXNfZGVsdGFcIjp0cnVlJykpICE9PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgZGF0YS5kZWx0YXNSZXNwb25zZVJlcXVlc3RlZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKDAsIEV2YWx1YXRpb25SZXNwb25zZURlbHRhc18xLl9yZXNvbHZlRGVsdGFzUmVzcG9uc2UpKGNhY2hlLCByZXNwb25zZS5ib2R5KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXRyeSB3aXRob3V0IGRlbHRhc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoRXZhbHVhdGlvbnMoc2RrS2V5LCBjYWNoZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCByZXN1bHQpLCB7IGRlbHRhc1Jlc3BvbnNlUmVxdWVzdGVkOiBmYWxzZSB9KSwgcHJpb3JpdHkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTdGF0c2lnTmV0d29yaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9tYWtlUGFyYW1TdG9yZUdldHRlciA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9jb3JlXzEgPSByZXF1aXJlKFwiQHN0YXRzaWcvY2xpZW50LWNvcmVcIik7XG5jb25zdCBOT19FWFBPU1VSRV9PUFQgPSB7XG4gICAgZGlzYWJsZUV4cG9zdXJlTG9nOiB0cnVlLFxufTtcbmZ1bmN0aW9uIF9zaG91bGRMb2dFeHBvc3VyZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT0gbnVsbCB8fCBvcHRpb25zLmRpc2FibGVFeHBvc3VyZUxvZyA9PT0gZmFsc2U7XG59XG5mdW5jdGlvbiBfc2hvdWxkUmV0dXJuRmFsbGJhY2sodmFsdWUsIGZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrICE9IG51bGwgJiYgISgwLCBjbGllbnRfY29yZV8xLl9pc1R5cGVNYXRjaCkodmFsdWUsIGZhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIF9nZXRNYXBwZWRTdGF0aWNWYWx1ZShwYXJhbSwgX29wdGlvbnMpIHtcbiAgICByZXR1cm4gcGFyYW0udmFsdWU7XG59XG5mdW5jdGlvbiBfZ2V0TWFwcGVkR2F0ZVZhbHVlKGNsaWVudCwgcGFyYW0sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBnYXRlID0gY2xpZW50LmdldEZlYXR1cmVHYXRlKHBhcmFtLmdhdGVfbmFtZSwgX3Nob3VsZExvZ0V4cG9zdXJlKG9wdGlvbnMpID8gdW5kZWZpbmVkIDogTk9fRVhQT1NVUkVfT1BUKTtcbiAgICBpZiAoZ2F0ZS52YWx1ZSkge1xuICAgICAgICByZXR1cm4gcGFyYW0ucGFzc192YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtLmZhaWxfdmFsdWU7XG59XG5mdW5jdGlvbiBfZ2V0TWFwcGVkRHluYW1pY0NvbmZpZ1ZhbHVlKGNsaWVudCwgcGFyYW0sIGZhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldER5bmFtaWNDb25maWcocGFyYW0uY29uZmlnX25hbWUsIE5PX0VYUE9TVVJFX09QVCk7XG4gICAgY29uc3QgdmFsdWUgPSBjb25maWcuZ2V0KHBhcmFtLnBhcmFtX25hbWUpO1xuICAgIGlmIChfc2hvdWxkUmV0dXJuRmFsbGJhY2sodmFsdWUsIGZhbGxiYWNrKSkge1xuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIGlmIChfc2hvdWxkTG9nRXhwb3N1cmUob3B0aW9ucykpIHtcbiAgICAgICAgY2xpZW50LmdldER5bmFtaWNDb25maWcocGFyYW0uY29uZmlnX25hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfZ2V0TWFwcGVkRXhwZXJpbWVudFZhbHVlKGNsaWVudCwgcGFyYW0sIGZhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZXhwZXJpbWVudCA9IGNsaWVudC5nZXRFeHBlcmltZW50KHBhcmFtLmV4cGVyaW1lbnRfbmFtZSwgTk9fRVhQT1NVUkVfT1BUKTtcbiAgICBjb25zdCB2YWx1ZSA9IGV4cGVyaW1lbnQuZ2V0KHBhcmFtLnBhcmFtX25hbWUpO1xuICAgIGlmIChfc2hvdWxkUmV0dXJuRmFsbGJhY2sodmFsdWUsIGZhbGxiYWNrKSkge1xuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIGlmIChfc2hvdWxkTG9nRXhwb3N1cmUob3B0aW9ucykpIHtcbiAgICAgICAgY2xpZW50LmdldEV4cGVyaW1lbnQocGFyYW0uZXhwZXJpbWVudF9uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2dldE1hcHBlZExheWVyVmFsdWUoY2xpZW50LCBwYXJhbSwgZmFsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IGNsaWVudC5nZXRMYXllcihwYXJhbS5sYXllcl9uYW1lLCBOT19FWFBPU1VSRV9PUFQpO1xuICAgIGNvbnN0IHZhbHVlID0gbGF5ZXIuZ2V0KHBhcmFtLnBhcmFtX25hbWUpO1xuICAgIGlmIChfc2hvdWxkUmV0dXJuRmFsbGJhY2sodmFsdWUsIGZhbGxiYWNrKSkge1xuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIGlmIChfc2hvdWxkTG9nRXhwb3N1cmUob3B0aW9ucykpIHtcbiAgICAgICAgY2xpZW50LmdldExheWVyKHBhcmFtLmxheWVyX25hbWUpLmdldChwYXJhbS5wYXJhbV9uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX21ha2VQYXJhbVN0b3JlR2V0dGVyKGNsaWVudCwgY29uZmlnLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChwYXJhbU5hbWUsIGZhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtID0gY29uZmlnW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbSA9PSBudWxsIHx8XG4gICAgICAgICAgICAoZmFsbGJhY2sgIT0gbnVsbCAmJiAoMCwgY2xpZW50X2NvcmVfMS5fdHlwZU9mKShmYWxsYmFjaykgIT09IHBhcmFtLnBhcmFtX3R5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwYXJhbS5yZWZfdHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RhdGljJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldE1hcHBlZFN0YXRpY1ZhbHVlKHBhcmFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgJ2dhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0TWFwcGVkR2F0ZVZhbHVlKGNsaWVudCwgcGFyYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSAnZHluYW1pY19jb25maWcnOlxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0TWFwcGVkRHluYW1pY0NvbmZpZ1ZhbHVlKGNsaWVudCwgcGFyYW0sIGZhbGxiYWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgJ2V4cGVyaW1lbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0TWFwcGVkRXhwZXJpbWVudFZhbHVlKGNsaWVudCwgcGFyYW0sIGZhbGxiYWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgJ2xheWVyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldE1hcHBlZExheWVyVmFsdWUoY2xpZW50LCBwYXJhbSwgZmFsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5fbWFrZVBhcmFtU3RvcmVHZXR0ZXIgPSBfbWFrZVBhcmFtU3RvcmVHZXR0ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN0YXRzaWdFdmFsdWF0aW9uc0RhdGFBZGFwdGVyID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X2NvcmVfMSA9IHJlcXVpcmUoXCJAc3RhdHNpZy9jbGllbnQtY29yZVwiKTtcbmNvbnN0IE5ldHdvcmtfMSA9IHJlcXVpcmUoXCIuL05ldHdvcmtcIik7XG5jbGFzcyBTdGF0c2lnRXZhbHVhdGlvbnNEYXRhQWRhcHRlciBleHRlbmRzIGNsaWVudF9jb3JlXzEuRGF0YUFkYXB0ZXJDb3JlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ0V2YWx1YXRpb25zRGF0YUFkYXB0ZXInLCAnZXZhbHVhdGlvbnMnKTtcbiAgICAgICAgdGhpcy5fbmV0d29yayA9IG51bGw7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBudWxsO1xuICAgIH1cbiAgICBhdHRhY2goc2RrS2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyLmF0dGFjaChzZGtLZXksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9uZXR3b3JrID0gbmV3IE5ldHdvcmtfMS5kZWZhdWx0KG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9KTtcbiAgICB9XG4gICAgZ2V0RGF0YUFzeW5jKGN1cnJlbnQsIHVzZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldERhdGFBc3luY0ltcGwoY3VycmVudCwgKDAsIGNsaWVudF9jb3JlXzEuX25vcm1hbGl6ZVVzZXIpKHVzZXIsIHRoaXMuX29wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcHJlZmV0Y2hEYXRhKHVzZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZldGNoRGF0YUltcGwodXNlciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSAoMCwgY2xpZW50X2NvcmVfMS5fdHlwZWRKc29uUGFyc2UpKGRhdGEsICdoYXNfdXBkYXRlcycsICdkYXRhJyk7XG4gICAgICAgIGlmICh2YWx1ZXMgJiYgJ3VzZXInIGluIHZhbHVlcykge1xuICAgICAgICAgICAgc3VwZXIuc2V0RGF0YShkYXRhLCB2YWx1ZXMudXNlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjbGllbnRfY29yZV8xLkxvZy5lcnJvcignU3RhdHNpZ1VzZXIgbm90IGZvdW5kLiBZb3UgbWF5IGJlIHVzaW5nIGFuIG9sZGVyIHNlcnZlciBTREsgdmVyc2lvbi4gUGxlYXNlIHVwZ3JhZGUgeW91ciBTREsgb3IgdXNlIHNldERhdGFMZWdhY3kuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0RGF0YUxlZ2FjeShkYXRhLCB1c2VyKSB7XG4gICAgICAgIHN1cGVyLnNldERhdGEoZGF0YSwgdXNlcik7XG4gICAgfVxuICAgIF9mZXRjaEZyb21OZXR3b3JrKGN1cnJlbnQsIHVzZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgKChfYSA9IHRoaXMuX25ldHdvcmspID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mZXRjaEV2YWx1YXRpb25zKHRoaXMuX2dldFNka0tleSgpLCBjdXJyZW50LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJpb3JpdHksIHVzZXIpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDAgPyByZXN1bHQgOiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2dldENhY2hlS2V5KHVzZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBrZXkgPSAoMCwgY2xpZW50X2NvcmVfMS5fZ2V0U3RvcmFnZUtleSkodGhpcy5fZ2V0U2RrS2V5KCksIHVzZXIsIChfYSA9IHRoaXMuX29wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXN0b21Vc2VyQ2FjaGVLZXlGdW5jKTtcbiAgICAgICAgcmV0dXJuIGAke2NsaWVudF9jb3JlXzEuRGF0YUFkYXB0ZXJDYWNoZVByZWZpeH0uJHt0aGlzLl9jYWNoZVN1ZmZpeH0uJHtrZXl9YDtcbiAgICB9XG4gICAgX2lzQ2FjaGVkUmVzdWx0VmFsaWRGb3IyMDQocmVzdWx0LCB1c2VyKSB7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmZ1bGxVc2VySGFzaCAhPSBudWxsICYmXG4gICAgICAgICAgICByZXN1bHQuZnVsbFVzZXJIYXNoID09PSAoMCwgY2xpZW50X2NvcmVfMS5fZ2V0RnVsbFVzZXJIYXNoKSh1c2VyKSk7XG4gICAgfVxufVxuZXhwb3J0cy5TdGF0c2lnRXZhbHVhdGlvbnNEYXRhQWRhcHRlciA9IFN0YXRzaWdFdmFsdWF0aW9uc0RhdGFBZGFwdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2xpZW50X2NvcmVfMSA9IHJlcXVpcmUoXCJAc3RhdHNpZy9jbGllbnQtY29yZVwiKTtcbmNvbnN0IEV2YWx1YXRpb25TdG9yZV8xID0gcmVxdWlyZShcIi4vRXZhbHVhdGlvblN0b3JlXCIpO1xuY29uc3QgTmV0d29ya18xID0gcmVxdWlyZShcIi4vTmV0d29ya1wiKTtcbmNvbnN0IFBhcmFtU3RvcmVHZXR0ZXJGYWN0b3J5XzEgPSByZXF1aXJlKFwiLi9QYXJhbVN0b3JlR2V0dGVyRmFjdG9yeVwiKTtcbmNvbnN0IFN0YXRzaWdFdmFsdWF0aW9uc0RhdGFBZGFwdGVyXzEgPSByZXF1aXJlKFwiLi9TdGF0c2lnRXZhbHVhdGlvbnNEYXRhQWRhcHRlclwiKTtcbmNsYXNzIFN0YXRzaWdDbGllbnQgZXh0ZW5kcyBjbGllbnRfY29yZV8xLlN0YXRzaWdDbGllbnRCYXNlIHtcbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFN0YXRzaWdDbGllbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIFNESyBrZXkuXG4gICAgICogIElmIG5vIFNESyBrZXkgaXMgcHJvdmlkZWQsIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkIGluc3RhbmNlIG9mIHRoZSBTdGF0c2lnQ2xpZW50LlxuICAgICAqICBUaGUgbWV0aG9kIGVuc3VyZXMgdGhhdCBlYWNoIHVuaXF1ZSBTREsga2V5IGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlIGluc3RhbmNlIG9mIFN0YXRzaWdDbGllbnQsIGVmZmVjdGl2ZWx5IGltcGxlbWVudGluZyBhIHNpbmdsZXRvbiBwYXR0ZXJuIGZvciBlYWNoIGtleS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2RrS2V5XSAtIE9wdGlvbmFsLiBUaGUgU0RLIGtleSB1c2VkIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIFN0YXRzaWdDbGllbnQuIElmIG9taXR0ZWQsIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgbGFzdCBjcmVhdGVkIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtTdGF0c2lnQ2xpZW50fHVuZGVmaW5lZH0gUmV0dXJucyB0aGUgU3RhdHNpZ0NsaWVudCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIFNESyBrZXksIG9yIHVuZGVmaW5lZCBpZiBubyBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBvciBpZiBubyBrZXkgaXMgcHJvdmlkZWQgYW5kIG5vIGluc3RhbmNlcyBleGlzdC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zdGFuY2Uoc2RrS2V5KSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNsaWVudF9jb3JlXzEuX2dldFN0YXRzaWdHbG9iYWwpKCkuaW5zdGFuY2Uoc2RrS2V5KTtcbiAgICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgU3RhdHNpZ0NsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGNsaWVudF9jb3JlXzEuTG9nLndhcm4oKDAsIGNsaWVudF9jb3JlXzEuX2lzU2VydmVyRW52KSgpXG4gICAgICAgICAgICA/ICdTdGF0c2lnQ2xpZW50Lmluc3RhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc2VydmVyIGVudmlyb25tZW50cydcbiAgICAgICAgICAgIDogJ1VuYWJsZSB0byBmaW5kIFN0YXRzaWdDbGllbnQgaW5zdGFuY2UnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGF0c2lnQ2xpZW50KHNka0tleSAhPT0gbnVsbCAmJiBzZGtLZXkgIT09IHZvaWQgMCA/IHNka0tleSA6ICcnLCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRzaWdDbGllbnQgY29uc3RydWN0b3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZGtLZXkgQSBTdGF0c2lnIGNsaWVudCBTREsga2V5LiBlZyBcImNsaWVudC14eXoxMjMuLi5cIlxuICAgICAqIEBwYXJhbSB7U3RhdHNpZ1VzZXJ9IHVzZXIgU3RhdHNpZ1VzZXIgb2JqZWN0IGNvbnRhaW5pbmcgdmFyaW91cyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gYSB1c2VyLlxuICAgICAqIEBwYXJhbSB7U3RhdHNpZ09wdGlvbnMgfCBudWxsfSBvcHRpb25zIFN0YXRzaWdPcHRpb25zLCB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIFNESy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzZGtLZXksIHVzZXIsIG9wdGlvbnMgPSBudWxsKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNsaWVudF9jb3JlXzEuU0RLVHlwZS5fc2V0Q2xpZW50VHlwZShzZGtLZXksICdqYXZhc2NyaXB0LWNsaWVudCcpO1xuICAgICAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmtfMS5kZWZhdWx0KG9wdGlvbnMsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRlbXQoZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdXBlcihzZGtLZXksIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kYXRhQWRhcHRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IFN0YXRzaWdFdmFsdWF0aW9uc0RhdGFBZGFwdGVyXzEuU3RhdHNpZ0V2YWx1YXRpb25zRGF0YUFkYXB0ZXIoKSwgbmV0d29yaywgb3B0aW9ucyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgZmVhdHVyZSBnYXRlIGZvciB0aGUgY3VycmVudCB1c2VyLCByZXByZXNlbnRlZCBhcyBhIHtAbGluayBGZWF0dXJlR2F0ZX0gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIGdhdGUgdG8gcmV0cmlldmUuXG4gICAgICAgICAqIEBwYXJhbSB7RmVhdHVyZUdhdGVFdmFsdWF0aW9uT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9uYWwuIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIG1ldGhvZCBjYWxsLlxuICAgICAgICAgKiBAcmV0dXJucyB7RmVhdHVyZUdhdGV9IC0gVGhlIHtAbGluayBGZWF0dXJlR2F0ZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2F0ZSdzIGN1cnJlbnQgZXZhbHVhdGlvbiByZXN1bHRzIGZvciB0aGUgdXNlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0RmVhdHVyZUdhdGUgPSB0aGlzLl9tZW1vaXplKGNsaWVudF9jb3JlXzEuTWVtb1ByZWZpeC5fZ2F0ZSwgdGhpcy5fZ2V0RmVhdHVyZUdhdGVJbXBsLmJpbmQodGhpcykpO1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIGR5bmFtaWMgY29uZmlnIGZvciB0aGUgY3VycmVudCB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZHluYW1pYyBjb25maWcgdG8gZ2V0LlxuICAgICAgICAgKiBAcGFyYW0ge0R5bmFtaWNDb25maWdFdmFsdWF0aW9uT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9uYWwuIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIG1ldGhvZCBjYWxsLlxuICAgICAgICAgKiBAcmV0dXJucyB7RHluYW1pY0NvbmZpZ30gLSBUaGUge0BsaW5rIER5bmFtaWNDb25maWd9IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGR5bmFtaWMgY29uZmlncydzIGN1cnJlbnQgZXZhbHVhdGlvbiByZXN1bHRzIGZvciB0aGUgdXNlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0RHluYW1pY0NvbmZpZyA9IHRoaXMuX21lbW9pemUoY2xpZW50X2NvcmVfMS5NZW1vUHJlZml4Ll9keW5hbWljQ29uZmlnLCB0aGlzLl9nZXREeW5hbWljQ29uZmlnSW1wbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBleHBlcmltZW50IGZvciB0aGUgY3VycmVudCB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZXhwZXJpbWVudCB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB7RXhwZXJpbWVudEV2YWx1YXRpb25PcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25hbC4gQWRkaXRpb25hbCBvcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgbWV0aG9kIGNhbGwuXG4gICAgICAgICAqIEByZXR1cm5zIHtFeHBlcmltZW50fSAtIFRoZSB7QGxpbmsgRXhwZXJpbWVudH0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZXhwZXJpbWVudHMncyBjdXJyZW50IGV2YWx1YXRpb24gcmVzdWx0cyBmb3IgdGhlIHVzZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldEV4cGVyaW1lbnQgPSB0aGlzLl9tZW1vaXplKGNsaWVudF9jb3JlXzEuTWVtb1ByZWZpeC5fZXhwZXJpbWVudCwgdGhpcy5fZ2V0RXhwZXJpbWVudEltcGwuYmluZCh0aGlzKSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgbGF5ZXIgZm9yIHRoZSBjdXJyZW50IHVzZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllciB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB7TGF5ZXJFdmFsdWF0aW9uT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9uYWwuIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIG1ldGhvZCBjYWxsLlxuICAgICAgICAgKiBAcmV0dXJucyB7TGF5ZXJ9IC0gVGhlIHtAbGluayBMYXllcn0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbGF5ZXJzJ3MgY3VycmVudCBldmFsdWF0aW9uIHJlc3VsdHMgZm9yIHRoZSB1c2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nZXRMYXllciA9IHRoaXMuX21lbW9pemUoY2xpZW50X2NvcmVfMS5NZW1vUHJlZml4Ll9sYXllciwgdGhpcy5fZ2V0TGF5ZXJJbXBsLmJpbmQodGhpcykpO1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIHBhcmFtZXRlciBzdG9yZSBmb3IgdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBzdG9yZSB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB7UGFyYW1ldGVyU3RvcmVFdmFsdWF0aW9uT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9uYWwuIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIG1ldGhvZCBjYWxsLlxuICAgICAgICAgKiBAcmV0dXJucyB7UGFyYW1ldGVyU3RvcmV9IC0gVGhlIHtAbGluayBQYXJhbWV0ZXJTdG9yZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyYW1ldGVyIHN0b3JlJ3MgY3VycmVudCBtYXBwaW5ncyBmb3IgdGhlIHVzZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldFBhcmFtZXRlclN0b3JlID0gdGhpcy5fbWVtb2l6ZShjbGllbnRfY29yZV8xLk1lbW9QcmVmaXguX3BhcmFtU3RvcmUsIHRoaXMuX2dldFBhcmFtZXRlclN0b3JlSW1wbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBuZXcgRXZhbHVhdGlvblN0b3JlXzEuZGVmYXVsdChzZGtLZXkpO1xuICAgICAgICB0aGlzLl9uZXR3b3JrID0gbmV0d29yaztcbiAgICAgICAgdGhpcy5fdXNlciA9IHRoaXMuX2NvbmZpZ3VyZVVzZXIodXNlciwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucGx1Z2lucykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgICAgICAgIHBsdWdpbi5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBTdGF0c2lnQ2xpZW50IHVzaW5nIGNhY2hlZCB2YWx1ZXMuIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGNsaWVudCBzeW5jaHJvbm91c2x5IGJ5IHV0aWxpemluZyBwcmV2aW91c2x5IGNhY2hlZCB2YWx1ZXMuXG4gICAgICogQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGNhY2hlIHZhbHVlcyBhcmUgdXBkYXRlZCBpbiB0aGUgYmFja2dyb3VuZCBmb3IgZnV0dXJlIHVzZSwgZWl0aGVyIGluIHN1YnNlcXVlbnQgc2Vzc2lvbnMgb3Igd2hlbiBgdXBkYXRlVXNlcmAgaXMgY2FsbGVkLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciBxdWlja2x5IHN0YXJ0aW5nIHdpdGggdGhlIGxhc3Qta25vd24tZ29vZCBjb25maWd1cmF0aW9ucyB3aGlsZSByZWZyZXNoaW5nIGRhdGEgdG8ga2VlcCBzZXR0aW5ncyB1cC10by1kYXRlLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaW5pdGlhbGl6ZUFzeW5jfSBmb3IgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIGluaXRpYWxpemVTeW5jKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3RhdHVzICE9PSAnVW5pbml0aWFsaXplZCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY2xpZW50X2NvcmVfMS5jcmVhdGVVcGRhdGVEZXRhaWxzKSh0cnVlLCB0aGlzLl9zdG9yZS5nZXRTb3VyY2UoKSwgLTEsIG51bGwsIG51bGwsIFsnTXVsdGlwbGVJbml0aWFsaXphdGlvbnMnLCAuLi4oKF9hID0gdGhpcy5fc3RvcmUuZ2V0V2FybmluZ3MoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbG9nZ2VyLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVVzZXJTeW5jKHRoaXMuX3VzZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgU3RhdHNpZ0NsaWVudCBhc3luY2hyb25vdXNseSBieSBmaXJzdCB1c2luZyBjYWNoZWQgdmFsdWVzIGFuZCB0aGVuIHVwZGF0aW5nIHRvIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gdGhlIG5ldHdvcmsuXG4gICAgICogT25jZSB0aGUgbmV0d29yayB2YWx1ZXMgYXJlIGZldGNoZWQsIHRoZXkgcmVwbGFjZSB0aGUgZXhpc3RpbmcgY2FjaGVkIHZhbHVlcy4gSWYgdGhpcyBtZXRob2QncyBwcm9taXNlIGlzIG5vdCBhd2FpdGVkLFxuICAgICAqIHRoZXJlIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiBmcm9tIGNhY2hlZCB0byBuZXR3b3JrIHZhbHVlcyBkdXJpbmcgdGhlIHNlc3Npb24sIHdoaWNoIGNhbiBhZmZlY3QgY29uc2lzdGVuY3kuXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4gaXQncyBhY2NlcHRhYmxlIHRvIGJlZ2luIHdpdGggcG90ZW50aWFsbHkgc3RhbGUgZGF0YSBhbmQgc3dpdGNoIHRvIHRoZSBsYXRlc3QgY29uZmlndXJhdGlvbiBhcyBpdCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXN5bmNVcGRhdGVPcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25hbC4gQWRkaXRpb25hbCBvcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgbWV0aG9kIGNhbGwuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWVudCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gdGhlIG5ldHdvcmsgb3IgYSB0aW1lb3V0IChpZiBzZXQpIGlzIGhpdC5cbiAgICAgKiBAc2VlIHtAbGluayBpbml0aWFsaXplU3luY30gZm9yIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIGluaXRpYWxpemVBc3luYyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZVByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplUHJvbWlzZSA9IHRoaXMuX2luaXRpYWxpemVBc3luY0ltcGwob3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91c2x5IHVwZGF0ZXMgdGhlIHVzZXIgaW4gdGhlIFN0YXRzaWcgY2xpZW50IGFuZCBzd2l0Y2hlcyB0aGUgaW50ZXJuYWwgc3RhdGUgdG8gdXNlIGNhY2hlZCB2YWx1ZXMgZm9yIHRoZSBuZXdseSBzcGVjaWZpZWQgdXNlci5cbiAgICAgKiBBZnRlciB0aGUgaW5pdGlhbCBzd2l0Y2ggdG8gY2FjaGVkIHZhbHVlcywgdGhpcyBtZXRob2QgdXBkYXRlcyB0aGVzZSB2YWx1ZXMgaW4gdGhlIGJhY2tncm91bmQsIHByZXBhcmluZyB0aGVtIGZvciBmdXR1cmUgc2Vzc2lvbnMgb3Igc3Vic2VxdWVudCBjYWxscyB0byB1cGRhdGVVc2VyLlxuICAgICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIGNsaWVudCBpcyBxdWlja2x5IHJlYWR5IHdpdGggYXZhaWxhYmxlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0YXRzaWdVc2VyfSB1c2VyIC0gVGhlIG5ldyBTdGF0c2lnVXNlciBmb3Igd2hpY2ggdGhlIGNsaWVudCBzaG91bGQgdXBkYXRlIGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgICAgKiBAc2VlIHtAbGluayB1cGRhdGVVc2VyQXN5bmN9IGZvciB0aGUgYXN5bmNocm9ub3VzIHZlcnNpb24gb2YgdGhpcyBtZXRob2QuXG4gICAgICovXG4gICAgdXBkYXRlVXNlclN5bmModXNlciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IFsuLi4oKF9hID0gdGhpcy5fc3RvcmUuZ2V0V2FybmluZ3MoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pXTtcbiAgICAgICAgdGhpcy5fcmVzZXRGb3JVc2VyKHVzZXIpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmRhdGFBZGFwdGVyLmdldERhdGFTeW5jKHRoaXMuX3VzZXIpO1xuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ05vQ2FjaGVkVmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0VmFsdWVzKHJlc3VsdCwgdGhpcy5fdXNlcik7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplVXBkYXRlKHJlc3VsdCk7XG4gICAgICAgIGNvbnN0IGRpc2FibGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGlzYWJsZUJhY2tncm91bmRDYWNoZVJlZnJlc2g7XG4gICAgICAgIGlmIChkaXNhYmxlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAoZGlzYWJsZSA9PSBudWxsICYmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuc291cmNlKSA9PT0gJ0Jvb3RzdHJhcCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNsaWVudF9jb3JlXzEuY3JlYXRlVXBkYXRlRGV0YWlscykodHJ1ZSwgdGhpcy5fc3RvcmUuZ2V0U291cmNlKCksIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lLCB0aGlzLl9lcnJvckJvdW5kYXJ5LmdldExhc3RTZWVuRXJyb3JBbmRSZXNldCgpLCB0aGlzLl9uZXR3b3JrLmdldExhc3RVc2VkSW5pdFVybEFuZFJlc2V0KCksIHdhcm5pbmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ydW5Qb3N0VXBkYXRlKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IG51bGwsIHRoaXMuX3VzZXIpO1xuICAgICAgICByZXR1cm4gKDAsIGNsaWVudF9jb3JlXzEuY3JlYXRlVXBkYXRlRGV0YWlscykodHJ1ZSwgdGhpcy5fc3RvcmUuZ2V0U291cmNlKCksIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lLCB0aGlzLl9lcnJvckJvdW5kYXJ5LmdldExhc3RTZWVuRXJyb3JBbmRSZXNldCgpLCB0aGlzLl9uZXR3b3JrLmdldExhc3RVc2VkSW5pdFVybEFuZFJlc2V0KCksIHdhcm5pbmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXN5bmNocm9ub3VzbHkgdXBkYXRlcyB0aGUgdXNlciBpbiB0aGUgU3RhdHNpZyBjbGllbnQgYnkgaW5pdGlhbGx5IHVzaW5nIGNhY2hlZCB2YWx1ZXMgYW5kIHRoZW4gZmV0Y2hpbmcgdGhlIGxhdGVzdCB2YWx1ZXMgZnJvbSB0aGUgbmV0d29yay5cbiAgICAgKiBXaGVuIHRoZSBsYXRlc3QgdmFsdWVzIGFyZSBmZXRjaGVkLCB0aGV5IHJlcGxhY2UgdGhlIGNhY2hlZCB2YWx1ZXMuIElmIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIGlzIG5vdCBhd2FpdGVkLFxuICAgICAqIHRoZSBjbGllbnQncyBzdGF0ZSBtYXkgc2hpZnQgZnJvbSBjYWNoZWQgdG8gdXBkYXRlZCBuZXR3b3JrIHZhbHVlcyBkdXJpbmcgdGhlIHNlc3Npb24sIHBvdGVudGlhbGx5IGFmZmVjdGluZyBjb25zaXN0ZW5jeS5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBiZXN0IHVzZWQgaW4gc2NlbmFyaW9zIHdoZXJlIHVwLXRvLWRhdGUgY29uZmlndXJhdGlvbiBpcyBjcml0aWNhbCBhbmQgaW5pdGlhbCBkZWxheXMgYXJlIGFjY2VwdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0YXRzaWdVc2VyfSB1c2VyIC0gVGhlIG5ldyBTdGF0c2lnVXNlciBmb3Igd2hpY2ggdGhlIGNsaWVudCBzaG91bGQgdXBkYXRlIGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jVXBkYXRlT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9uYWwuIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIG1ldGhvZCBjYWxsLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGllbnQgaXMgZnVsbHkgdXBkYXRlZCB3aXRoIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gdGhlIG5ldHdvcmsgb3IgYSB0aW1lb3V0IChpZiBzZXQpIGlzIGhpdC5cbiAgICAgKiBAc2VlIHtAbGluayB1cGRhdGVVc2VyU3luY30gZm9yIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIHVwZGF0ZVVzZXJBc3luYyh1c2VyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldEZvclVzZXIodXNlcik7XG4gICAgICAgICAgICBjb25zdCBpbml0aWF0b3IgPSB0aGlzLl91c2VyO1xuICAgICAgICAgICAgY2xpZW50X2NvcmVfMS5EaWFnbm9zdGljcy5fbWFya0luaXRPdmVyYWxsU3RhcnQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRhdGFBZGFwdGVyLmdldERhdGFTeW5jKGluaXRpYXRvcik7XG4gICAgICAgICAgICB0aGlzLl9zdG9yZS5zZXRWYWx1ZXMocmVzdWx0LCB0aGlzLl91c2VyKTtcbiAgICAgICAgICAgIHRoaXMuX3NldFN0YXR1cygnTG9hZGluZycsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXN1bHQgPSB5aWVsZCB0aGlzLmRhdGFBZGFwdGVyLmdldERhdGFBc3luYyhyZXN1bHQsIGluaXRpYXRvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhlIHVzZXIgaGFzbid0IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nXG4gICAgICAgICAgICBpZiAoaW5pdGlhdG9yICE9PSB0aGlzLl91c2VyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjbGllbnRfY29yZV8xLmNyZWF0ZVVwZGF0ZURldGFpbHMpKGZhbHNlLCB0aGlzLl9zdG9yZS5nZXRTb3VyY2UoKSwgLTEsIG5ldyBFcnJvcignVXNlciBjaGFuZ2VkIGR1cmluZyB1cGRhdGUnKSwgdGhpcy5fbmV0d29yay5nZXRMYXN0VXNlZEluaXRVcmxBbmRSZXNldCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpc1VzaW5nTmV0d29ya1ZhbHVlcyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2xpZW50X2NvcmVfMS5EaWFnbm9zdGljcy5fbWFya0luaXRQcm9jZXNzU3RhcnQodGhpcy5fc2RrS2V5KTtcbiAgICAgICAgICAgICAgICBpc1VzaW5nTmV0d29ya1ZhbHVlcyA9IHRoaXMuX3N0b3JlLnNldFZhbHVlcyhyZXN1bHQsIHRoaXMuX3VzZXIpO1xuICAgICAgICAgICAgICAgIGNsaWVudF9jb3JlXzEuRGlhZ25vc3RpY3MuX21hcmtJbml0UHJvY2Vzc0VuZCh0aGlzLl9zZGtLZXksIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogaXNVc2luZ05ldHdvcmtWYWx1ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9maW5hbGl6ZVVwZGF0ZShyZXN1bHQpO1xuICAgICAgICAgICAgaWYgKCFpc1VzaW5nTmV0d29ya1ZhbHVlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yQm91bmRhcnkuYXR0YWNoRXJyb3JJZk5vbmVFeGlzdHMoY2xpZW50X2NvcmVfMS5VUERBVEVfREVUQUlMX0VSUk9SX01FU1NBR0VTLk5PX05FVFdPUktfREFUQSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW10KHsgbmFtZTogJ2luaXRpYWxpemF0aW9uX2ZhaWx1cmUnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xpZW50X2NvcmVfMS5EaWFnbm9zdGljcy5fbWFya0luaXRPdmVyYWxsRW5kKHRoaXMuX3Nka0tleSwgaXNVc2luZ05ldHdvcmtWYWx1ZXMsIHRoaXMuX3N0b3JlLmdldEN1cnJlbnRTb3VyY2VEZXRhaWxzKCkpO1xuICAgICAgICAgICAgY29uc3QgaW5pdER1cmF0aW9uID0gY2xpZW50X2NvcmVfMS5EaWFnbm9zdGljcy5fZW5xdWV1ZURpYWdub3N0aWNzRXZlbnQodGhpcy5fdXNlciwgdGhpcy5fbG9nZ2VyLCB0aGlzLl9zZGtLZXksIHRoaXMuX29wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjbGllbnRfY29yZV8xLmNyZWF0ZVVwZGF0ZURldGFpbHMpKGlzVXNpbmdOZXR3b3JrVmFsdWVzLCB0aGlzLl9zdG9yZS5nZXRTb3VyY2UoKSwgaW5pdER1cmF0aW9uLCB0aGlzLl9lcnJvckJvdW5kYXJ5LmdldExhc3RTZWVuRXJyb3JBbmRSZXNldCgpLCB0aGlzLl9uZXR3b3JrLmdldExhc3RVc2VkSW5pdFVybEFuZFJlc2V0KCksIHRoaXMuX3N0b3JlLmdldFdhcm5pbmdzKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgc3luY2hyb25vdXMgY29udGV4dCBjb250YWluaW5nIGRhdGEgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIFNESy4gUmVwcmVzZW50ZWQgYXMgYSB7QGxpbmsgUHJlY29tcHV0ZWRFdmFsdWF0aW9uc0NvbnRleHR9IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcmVjb21wdXRlZEV2YWx1YXRpb25zQ29udGV4dH0gVGhlIGN1cnJlbnQgc3luY2hyb25vdXMgY29udGV4dCBmb3IgdGhlIHRoaXMgU3RhdHNpZ0NsaWVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2RrS2V5OiB0aGlzLl9zZGtLZXksXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLl9vcHRpb25zLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLl9zdG9yZS5nZXRWYWx1ZXMoKSxcbiAgICAgICAgICAgIHVzZXI6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5fdXNlcikpLFxuICAgICAgICAgICAgZXJyb3JCb3VuZGFyeTogdGhpcy5fZXJyb3JCb3VuZGFyeSxcbiAgICAgICAgICAgIHNlc3Npb246IGNsaWVudF9jb3JlXzEuU3RhdHNpZ1Nlc3Npb24uZ2V0KHRoaXMuX3Nka0tleSksXG4gICAgICAgICAgICBzdGFibGVJRDogY2xpZW50X2NvcmVfMS5TdGFibGVJRC5nZXQodGhpcy5fc2RrS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIGZlYXR1cmUgZ2F0ZSBmb3IgdGhlIGN1cnJlbnQgdXNlciwgcmVwcmVzZW50ZWQgYXMgYSBzaW1wbGUgYm9vbGVhbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgZ2F0ZSB0byByZXRyaWV2ZS5cbiAgICAgKiBAcGFyYW0ge0ZlYXR1cmVHYXRlRXZhbHVhdGlvbk9wdGlvbnN9IFtvcHRpb25zXSAtIE9wdGlvbmFsLiBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBtZXRob2QgY2FsbC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUaGUgYm9vbGVhbiB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGdhdGUncyBjdXJyZW50IGV2YWx1YXRpb24gcmVzdWx0cyBmb3IgdGhlIHVzZXIuXG4gICAgICovXG4gICAgY2hlY2tHYXRlKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmVhdHVyZUdhdGUobmFtZSwgb3B0aW9ucykudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZ3MgYW4gZXZlbnQgdG8gdGhlIGludGVybmFsIGxvZ2dpbmcgc3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBsb2dnaW5nIGJ5IGVpdGhlciBwYXNzaW5nIGEgZnVsbHkgZm9ybWVkIGV2ZW50IG9iamVjdCBvciBieSBzcGVjaWZ5aW5nIHRoZSBldmVudCBuYW1lIHdpdGggb3B0aW9uYWwgdmFsdWUgYW5kIG1ldGFkYXRhLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdGF0c2lnRXZlbnR8c3RyaW5nfSBldmVudE9yTmFtZSAtIFRoZSBldmVudCBvYmplY3QgY29uZm9ybWluZyB0byB0aGUgU3RhdHNpZ0V2ZW50IGludGVyZmFjZSwgb3IgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGFzIGEgc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgLSBPcHRpb25hbC4gVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQsIHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgU3RhdHNpZ0V2ZW50IG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IG1ldGFkYXRhIC0gT3B0aW9uYWwuIEEga2V5LXZhbHVlIHJlY29yZCBjb250YWluaW5nIG1ldGFkYXRhIGFib3V0IHRoZSBldmVudC4gVGhpcyBpcyBhbHNvIGlnbm9yZWQgaWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBldmVudCBvYmplY3QuXG4gICAgICovXG4gICAgbG9nRXZlbnQoZXZlbnRPck5hbWUsIHZhbHVlLCBtZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBldmVudCA9IHR5cGVvZiBldmVudE9yTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnRPck5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGV2ZW50T3JOYW1lO1xuICAgICAgICB0aGlzLl9sb2dnZXIuZW5xdWV1ZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV2ZW50KSwgeyB1c2VyOiB0aGlzLl91c2VyLCB0aW1lOiBEYXRlLm5vdygpIH0pKTtcbiAgICB9XG4gICAgX3ByaW1lUmVhZHlSaXBjb3JkKCkge1xuICAgICAgICB0aGlzLiRvbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0dXMgPT09ICdMb2FkaW5nJyAmJiB0aGlzLl9maW5hbGl6ZVVwZGF0ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9pbml0aWFsaXplQXN5bmNJbXBsKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghY2xpZW50X2NvcmVfMS5TdG9yYWdlLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNsaWVudF9jb3JlXzEuU3RvcmFnZS5pc1JlYWR5UmVzb2x2ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5zdGFydCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVXNlckFzeW5jKHRoaXMuX3VzZXIsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2ZpbmFsaXplVXBkYXRlKHZhbHVlcykge1xuICAgICAgICB0aGlzLl9zdG9yZS5maW5hbGl6ZSgpO1xuICAgICAgICB0aGlzLl9zZXRTdGF0dXMoJ1JlYWR5JywgdmFsdWVzKTtcbiAgICB9XG4gICAgX3J1blBvc3RVcGRhdGUoY3VycmVudCwgdXNlcikge1xuICAgICAgICB0aGlzLmRhdGFBZGFwdGVyXG4gICAgICAgICAgICAuZ2V0RGF0YUFzeW5jKGN1cnJlbnQsIHVzZXIsIHsgcHJpb3JpdHk6ICdsb3cnIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY2xpZW50X2NvcmVfMS5Mb2cuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGFmdGVyIHVwZGF0ZS4nLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3Jlc2V0Rm9yVXNlcih1c2VyKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5yZXNldCgpO1xuICAgICAgICB0aGlzLl9zdG9yZS5yZXNldCgpO1xuICAgICAgICB0aGlzLl91c2VyID0gdGhpcy5fY29uZmlndXJlVXNlcih1c2VyLCB0aGlzLl9vcHRpb25zKTtcbiAgICB9XG4gICAgX2NvbmZpZ3VyZVVzZXIob3JpZ2luYWxVc2VyLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXNlciA9ICgwLCBjbGllbnRfY29yZV8xLl9ub3JtYWxpemVVc2VyKShvcmlnaW5hbFVzZXIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFibGVJZE92ZXJyaWRlID0gKF9hID0gdXNlci5jdXN0b21JRHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdGFibGVJRDtcbiAgICAgICAgaWYgKHN0YWJsZUlkT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIGNsaWVudF9jb3JlXzEuU3RhYmxlSUQuc2V0T3ZlcnJpZGUoc3RhYmxlSWRPdmVycmlkZSwgdGhpcy5fc2RrS2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG4gICAgX2dldEZlYXR1cmVHYXRlSW1wbChuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBldmFsdWF0aW9uLCBkZXRhaWxzIH0gPSB0aGlzLl9zdG9yZS5nZXRHYXRlKG5hbWUpO1xuICAgICAgICBjb25zdCBnYXRlID0gKDAsIGNsaWVudF9jb3JlXzEuX21ha2VGZWF0dXJlR2F0ZSkobmFtZSwgZGV0YWlscywgZXZhbHVhdGlvbik7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRkZW4gPSAoX2IgPSAoX2EgPSB0aGlzLm92ZXJyaWRlQWRhcHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEdhdGVPdmVycmlkZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGdhdGUsIHRoaXMuX3VzZXIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBvdmVycmlkZGVuICE9PSBudWxsICYmIG92ZXJyaWRkZW4gIT09IHZvaWQgMCA/IG92ZXJyaWRkZW4gOiBnYXRlO1xuICAgICAgICB0aGlzLl9lbnF1ZXVlRXhwb3N1cmUobmFtZSwgKDAsIGNsaWVudF9jb3JlXzEuX2NyZWF0ZUdhdGVFeHBvc3VyZSkodGhpcy5fdXNlciwgcmVzdWx0KSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuJGVtdCh7IG5hbWU6ICdnYXRlX2V2YWx1YXRpb24nLCBnYXRlOiByZXN1bHQgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9nZXREeW5hbWljQ29uZmlnSW1wbChuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBldmFsdWF0aW9uLCBkZXRhaWxzIH0gPSB0aGlzLl9zdG9yZS5nZXRDb25maWcobmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9ICgwLCBjbGllbnRfY29yZV8xLl9tYWtlRHluYW1pY0NvbmZpZykobmFtZSwgZGV0YWlscywgZXZhbHVhdGlvbik7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRkZW4gPSAoX2IgPSAoX2EgPSB0aGlzLm92ZXJyaWRlQWRhcHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldER5bmFtaWNDb25maWdPdmVycmlkZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGNvbmZpZywgdGhpcy5fdXNlciwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG92ZXJyaWRkZW4gIT09IG51bGwgJiYgb3ZlcnJpZGRlbiAhPT0gdm9pZCAwID8gb3ZlcnJpZGRlbiA6IGNvbmZpZztcbiAgICAgICAgdGhpcy5fZW5xdWV1ZUV4cG9zdXJlKG5hbWUsICgwLCBjbGllbnRfY29yZV8xLl9jcmVhdGVDb25maWdFeHBvc3VyZSkodGhpcy5fdXNlciwgcmVzdWx0KSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuJGVtdCh7IG5hbWU6ICdkeW5hbWljX2NvbmZpZ19ldmFsdWF0aW9uJywgZHluYW1pY0NvbmZpZzogcmVzdWx0IH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0RXhwZXJpbWVudEltcGwobmFtZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB7IHJlc3VsdDogZXZhbHVhdGlvbiwgZGV0YWlscyB9ID0gdGhpcy5fc3RvcmUuZ2V0Q29uZmlnKG5hbWUpO1xuICAgICAgICBjb25zdCBleHBlcmltZW50ID0gKDAsIGNsaWVudF9jb3JlXzEuX21ha2VFeHBlcmltZW50KShuYW1lLCBkZXRhaWxzLCBldmFsdWF0aW9uKTtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGRlbiA9IChfYiA9IChfYSA9IHRoaXMub3ZlcnJpZGVBZGFwdGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RXhwZXJpbWVudE92ZXJyaWRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXhwZXJpbWVudCwgdGhpcy5fdXNlciwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG92ZXJyaWRkZW4gIT09IG51bGwgJiYgb3ZlcnJpZGRlbiAhPT0gdm9pZCAwID8gb3ZlcnJpZGRlbiA6IGV4cGVyaW1lbnQ7XG4gICAgICAgIHRoaXMuX2VucXVldWVFeHBvc3VyZShuYW1lLCAoMCwgY2xpZW50X2NvcmVfMS5fY3JlYXRlQ29uZmlnRXhwb3N1cmUpKHRoaXMuX3VzZXIsIHJlc3VsdCksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLiRlbXQoeyBuYW1lOiAnZXhwZXJpbWVudF9ldmFsdWF0aW9uJywgZXhwZXJpbWVudDogcmVzdWx0IH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0TGF5ZXJJbXBsKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBldmFsdWF0aW9uLCBkZXRhaWxzIH0gPSB0aGlzLl9zdG9yZS5nZXRMYXllcihuYW1lKTtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSAoMCwgY2xpZW50X2NvcmVfMS5fbWFrZUxheWVyKShuYW1lLCBkZXRhaWxzLCBldmFsdWF0aW9uKTtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGRlbiA9IChfYiA9IChfYSA9IHRoaXMub3ZlcnJpZGVBZGFwdGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0TGF5ZXJPdmVycmlkZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGxheWVyLCB0aGlzLl91c2VyLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kaXNhYmxlRXhwb3N1cmVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmNyZW1lbnROb25FeHBvc3VyZUNvdW50KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICgwLCBjbGllbnRfY29yZV8xLl9tZXJnZU92ZXJyaWRlKShsYXllciwgb3ZlcnJpZGRlbiwgKF9jID0gb3ZlcnJpZGRlbiA9PT0gbnVsbCB8fCBvdmVycmlkZGVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvdmVycmlkZGVuLl9fdmFsdWUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGxheWVyLl9fdmFsdWUsIChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kaXNhYmxlRXhwb3N1cmVMb2cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlRXhwb3N1cmUobmFtZSwgKDAsIGNsaWVudF9jb3JlXzEuX2NyZWF0ZUxheWVyUGFyYW1ldGVyRXhwb3N1cmUpKHRoaXMuX3VzZXIsIHJlc3VsdCwgcGFyYW0pLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVtdCh7IG5hbWU6ICdsYXllcl9ldmFsdWF0aW9uJywgbGF5ZXI6IHJlc3VsdCB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2dldFBhcmFtZXRlclN0b3JlSW1wbChuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBjb25maWd1cmF0aW9uLCBkZXRhaWxzIH0gPSB0aGlzLl9zdG9yZS5nZXRQYXJhbVN0b3JlKG5hbWUpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5jcmVtZW50Tm9uRXhwb3N1cmVDb3VudChuYW1lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXRhaWxzLFxuICAgICAgICAgICAgX19jb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZ2V0OiAoMCwgUGFyYW1TdG9yZUdldHRlckZhY3RvcnlfMS5fbWFrZVBhcmFtU3RvcmVHZXR0ZXIpKHRoaXMsIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFN0YXRzaWdDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN0YXRzaWdDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBTdGF0c2lnQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9TdGF0c2lnQ2xpZW50XCIpO1xuZXhwb3J0cy5TdGF0c2lnQ2xpZW50ID0gU3RhdHNpZ0NsaWVudF8xLmRlZmF1bHQ7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIkBzdGF0c2lnL2NsaWVudC1jb3JlXCIpLCBleHBvcnRzKTtcbl9fU1RBVFNJR19fID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoX19TVEFUU0lHX18gIT09IG51bGwgJiYgX19TVEFUU0lHX18gIT09IHZvaWQgMCA/IF9fU1RBVFNJR19fIDoge30pKSwgeyBTdGF0c2lnQ2xpZW50OiBTdGF0c2lnQ2xpZW50XzEuZGVmYXVsdCB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9fU1RBVFNJR19fO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvbnZlcnNpb25zID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnNpb25zO1xuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbmZ1bmN0aW9uIGV2ZW5Sb3VuZCh4KSB7XG4gICAgLy8gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGUgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3by5cbiAgICBpZiAoKHggJSAxKSA9PT0gMC41ICYmICh4ICYgMSkgPT09IDApIHsgLy8gW2V2ZW4gbnVtYmVyXS41OyByb3VuZCBkb3duIChpLmUuIGZsb29yKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh4KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU51bWJlckNvbnZlcnNpb24oYml0TGVuZ3RoLCB0eXBlT3B0cykge1xuICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgLS1iaXRMZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGxvd2VyQm91bmQgPSB0eXBlT3B0cy51bnNpZ25lZCA/IDAgOiAtTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDE7XG5cbiAgICBjb25zdCBtb2R1bG9WYWwgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGgpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCBtb2R1bG9Cb3VuZCA9IHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCA/IE1hdGgucG93KDIsIHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCAtIDEpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oViwgb3B0cykge1xuICAgICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgICAgICBsZXQgeCA9ICtWO1xuXG4gICAgICAgIGlmIChvcHRzLmVuZm9yY2VSYW5nZSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgZmluaXRlIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeCA9IHNpZ24oeCkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHgpKTtcbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgaW4gYnl0ZSByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKHgpICYmIG9wdHMuY2xhbXApIHtcbiAgICAgICAgICAgIHggPSBldmVuUm91bmQoeCk7XG5cbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCkgeCA9IGxvd2VyQm91bmQ7XG4gICAgICAgICAgICBpZiAoeCA+IHVwcGVyQm91bmQpIHggPSB1cHBlckJvdW5kO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSB8fCB4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgIHggPSB4ICUgbW9kdWxvVmFsO1xuXG4gICAgICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQgJiYgeCA+PSBtb2R1bG9Cb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSBtb2R1bG9WYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgICAgIGlmICh4IDwgMCkge1xuICAgICAgICAgICAgICB4ICs9IG1vZHVsb1ZhbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PT0gLTApIHsgLy8gZG9uJ3QgcmV0dXJuIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG59XG5cbmNvbnZlcnNpb25zW1widm9pZFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29udmVyc2lvbnNbXCJib29sZWFuXCJdID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiAhIXZhbDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYnl0ZVwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcIm9jdGV0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcInNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIHNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcImxvbmcgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuXG5jb252ZXJzaW9uc1tcImRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBmbG9hdGluZy1wb2ludCB2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKGlzTmFOKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBOYU5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG4vLyBub3QgcXVpdGUgdmFsaWQsIGJ1dCBnb29kIGVub3VnaCBmb3IgSlNcbmNvbnZlcnNpb25zW1wiZmxvYXRcIl0gPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXTtcbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdO1xuXG5jb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICBpZiAob3B0cy50cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhWKTtcbn07XG5cbmNvbnZlcnNpb25zW1wiQnl0ZVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgY29uc3QgeCA9IFN0cmluZyhWKTtcbiAgICBsZXQgYyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgKGMgPSB4LmNvZGVQb2ludEF0KGkpKSAhPT0gdW5kZWZpbmVkOyArK2kpIHtcbiAgICAgICAgaWYgKGMgPiAyNTUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSB2YWxpZCBieXRlc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgUyA9IFN0cmluZyhWKTtcbiAgICBjb25zdCBuID0gUy5sZW5ndGg7XG4gICAgY29uc3QgVSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBTLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFMuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBjICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBkICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgoMiA8PCAxNSkgKyAoMiA8PCA5KSAqIGEgKyBiKSk7XG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFUuam9pbignJyk7XG59O1xuXG5jb252ZXJzaW9uc1tcIkRhdGVcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgRGF0ZSBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChpc05hTihWKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcblxuY29udmVyc2lvbnNbXCJSZWdFeHBcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgIFYgPSBuZXcgUmVnRXhwKFYpO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzLm1peGluID0gZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleXNbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXlzW2ldKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2wgPSBTeW1ib2woXCJ3cmFwcGVyXCIpO1xubW9kdWxlLmV4cG9ydHMuaW1wbFN5bWJvbCA9IFN5bWJvbChcImltcGxcIik7XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJGb3JJbXBsID0gZnVuY3Rpb24gKGltcGwpIHtcbiAgcmV0dXJuIGltcGxbbW9kdWxlLmV4cG9ydHMud3JhcHBlclN5bWJvbF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pbXBsRm9yV3JhcHBlciA9IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gIHJldHVybiB3cmFwcGVyW21vZHVsZS5leHBvcnRzLmltcGxTeW1ib2xdO1xufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xudmFyIG1hcHBpbmdUYWJsZSA9IHJlcXVpcmUoXCIuL2xpYi9tYXBwaW5nVGFibGUuanNvblwiKTtcblxudmFyIFBST0NFU1NJTkdfT1BUSU9OUyA9IHtcbiAgVFJBTlNJVElPTkFMOiAwLFxuICBOT05UUkFOU0lUSU9OQUw6IDFcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShzdHIpIHsgLy8gZml4IGJ1ZyBpbiB2OFxuICByZXR1cm4gc3RyLnNwbGl0KCdcXHUwMDAwJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLm5vcm1hbGl6ZSgnTkZDJyk7IH0pLmpvaW4oJ1xcdTAwMDAnKTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXR1cyh2YWwpIHtcbiAgdmFyIHN0YXJ0ID0gMDtcbiAgdmFyIGVuZCA9IG1hcHBpbmdUYWJsZS5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoc3RhcnQgKyBlbmQpIC8gMik7XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFwcGluZ1RhYmxlW21pZF07XG4gICAgaWYgKHRhcmdldFswXVswXSA8PSB2YWwgJiYgdGFyZ2V0WzBdWzFdID49IHZhbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFswXVswXSA+IHZhbCkge1xuICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgLy8gcmVwbGFjZSBldmVyeSBzdXJyb2dhdGUgcGFpciB3aXRoIGEgQk1QIHN5bWJvbFxuICAgIC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgJ18nKVxuICAgIC8vIHRoZW4gZ2V0IHRoZSBsZW5ndGhcbiAgICAubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtYXBDaGFycyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gIHZhciBwcm9jZXNzZWQgPSBcIlwiO1xuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMoZG9tYWluX25hbWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IGRvbWFpbl9uYW1lLmNvZGVQb2ludEF0KGkpO1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGNvZGVQb2ludCk7XG5cbiAgICBzd2l0Y2ggKHN0YXR1c1sxXSkge1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRcIjpcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaWdub3JlZFwiOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtYXBwZWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGV2aWF0aW9uXCI6XG4gICAgICAgIGlmIChwcm9jZXNzaW5nX29wdGlvbiA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCkge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidmFsaWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IHByb2Nlc3NlZCxcbiAgICBlcnJvcjogaGFzRXJyb3JcbiAgfTtcbn1cblxudmFyIGNvbWJpbmluZ01hcmtzUmVnZXggPSAvW1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwODE2LVxcdTA4MTlcXHUwODFCLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MkRcXHUwODU5LVxcdTA4NUJcXHUwOEU0LVxcdTA5MDNcXHUwOTNBLVxcdTA5M0NcXHUwOTNFLVxcdTA5NEZcXHUwOTUxLVxcdTA5NTdcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDdcXHUwQzAwLVxcdTBDMDNcXHUwQzNFLVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNjJcXHUwQzYzXFx1MEM4MS1cXHUwQzgzXFx1MENCQ1xcdTBDQkUtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENFMlxcdTBDRTNcXHUwRDAxLVxcdTBEMDNcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgyXFx1MEQ4M1xcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCOVxcdTBFQkJcXHUwRUJDXFx1MEVDOC1cXHUwRUNEXFx1MEYxOFxcdTBGMTlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFXFx1MEYzRlxcdTBGNzEtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkItXFx1MTAzRVxcdTEwNTYtXFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4RFxcdTEwOEZcXHUxMDlBLVxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNC1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOUIwLVxcdTE5QzBcXHUxOUM4XFx1MTlDOVxcdTFBMTctXFx1MUExQlxcdTFBNTUtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkVcXHUxQjAwLVxcdTFCMDRcXHUxQjM0LVxcdTFCNDRcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCODJcXHUxQkExLVxcdTFCQURcXHUxQkU2LVxcdTFCRjNcXHUxQzI0LVxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRThcXHUxQ0VEXFx1MUNGMi1cXHUxQ0Y0XFx1MUNGOFxcdTFDRjlcXHUxREMwLVxcdTFERjVcXHUxREZDLVxcdTFERkZcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlGXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODIzLVxcdUE4MjdcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNFxcdUE4RTAtXFx1QThGMVxcdUE5MjYtXFx1QTkyRFxcdUE5NDctXFx1QTk1M1xcdUE5ODAtXFx1QTk4M1xcdUE5QjMtXFx1QTlDMFxcdUE5RTVcXHVBQTI5LVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBNERcXHVBQTdCLVxcdUFBN0RcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVCLVxcdUFBRUZcXHVBQUY1XFx1QUFGNlxcdUFCRTMtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1RkIxRVxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRF18XFx1RDgwMFtcXHVEREZEXFx1REVFMFxcdURGNzYtXFx1REY3QV18XFx1RDgwMltcXHVERTAxLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUwRlxcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERUU1XFx1REVFNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDMDJcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODJcXHVEQ0IwLVxcdURDQkFcXHVERDAwLVxcdUREMDJcXHVERDI3LVxcdUREMzRcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1REUyQy1cXHVERTM3XFx1REVERi1cXHVERUVBXFx1REYwMS1cXHVERjAzXFx1REYzQ1xcdURGM0UtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1N1xcdURGNjJcXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDQjAtXFx1RENDM1xcdUREQUYtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMzAtXFx1REU0MFxcdURFQUItXFx1REVCN118XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjdFXFx1REY4Ri1cXHVERjkyXXxcXHVEODJGW1xcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzQVtcXHVEQ0QwLVxcdURDRDZdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTGFiZWwobGFiZWwsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIGlmIChsYWJlbC5zdWJzdHIoMCwgNCkgPT09IFwieG4tLVwiKSB7XG4gICAgbGFiZWwgPSBwdW55Y29kZS50b1VuaWNvZGUobGFiZWwpO1xuICAgIHByb2Nlc3Npbmdfb3B0aW9uID0gUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTDtcbiAgfVxuXG4gIHZhciBlcnJvciA9IGZhbHNlO1xuXG4gIGlmIChub3JtYWxpemUobGFiZWwpICE9PSBsYWJlbCB8fFxuICAgICAgKGxhYmVsWzNdID09PSBcIi1cIiAmJiBsYWJlbFs0XSA9PT0gXCItXCIpIHx8XG4gICAgICBsYWJlbFswXSA9PT0gXCItXCIgfHwgbGFiZWxbbGFiZWwubGVuZ3RoIC0gMV0gPT09IFwiLVwiIHx8XG4gICAgICBsYWJlbC5pbmRleE9mKFwiLlwiKSAhPT0gLTEgfHxcbiAgICAgIGxhYmVsLnNlYXJjaChjb21iaW5pbmdNYXJrc1JlZ2V4KSA9PT0gMCkge1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMobGFiZWwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHN0YXR1cyA9IGZpbmRTdGF0dXMobGFiZWwuY29kZVBvaW50QXQoaSkpO1xuICAgIGlmICgocHJvY2Vzc2luZyA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCAmJiBzdGF0dXNbMV0gIT09IFwidmFsaWRcIikgfHxcbiAgICAgICAgKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwgJiZcbiAgICAgICAgIHN0YXR1c1sxXSAhPT0gXCJ2YWxpZFwiICYmIHN0YXR1c1sxXSAhPT0gXCJkZXZpYXRpb25cIikpIHtcbiAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGVycm9yOiBlcnJvclxuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICB2YXIgcmVzdWx0ID0gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKTtcbiAgcmVzdWx0LnN0cmluZyA9IG5vcm1hbGl6ZShyZXN1bHQuc3RyaW5nKTtcblxuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgKytpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWxpZGF0aW9uID0gdmFsaWRhdGVMYWJlbChsYWJlbHNbaV0pO1xuICAgICAgbGFiZWxzW2ldID0gdmFsaWRhdGlvbi5sYWJlbDtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHJlc3VsdC5lcnJvciB8fCB2YWxpZGF0aW9uLmVycm9yO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cmluZzogbGFiZWxzLmpvaW4oXCIuXCIpLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMudG9BU0NJSSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbiwgdmVyaWZ5RG5zTGVuZ3RoKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHZhciBsYWJlbHMgPSByZXN1bHQuc3RyaW5nLnNwbGl0KFwiLlwiKTtcbiAgbGFiZWxzID0gbGFiZWxzLm1hcChmdW5jdGlvbihsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwdW55Y29kZS50b0FTQ0lJKGwpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiBsO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHZlcmlmeURuc0xlbmd0aCkge1xuICAgIHZhciB0b3RhbCA9IGxhYmVscy5zbGljZSgwLCBsYWJlbHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIikubGVuZ3RoO1xuICAgIGlmICh0b3RhbC5sZW5ndGggPiAyNTMgfHwgdG90YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGxhYmVscy5sZW5ndGggPiA2MyB8fCBsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHQuZXJyb3IpIHJldHVybiBudWxsO1xuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIuXCIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMudG9Vbmljb2RlID0gZnVuY3Rpb24oZG9tYWluX25hbWUsIHVzZVNURDMpIHtcbiAgdmFyIHJlc3VsdCA9IHByb2Nlc3NpbmcoZG9tYWluX25hbWUsIHVzZVNURDMsIFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluOiByZXN1bHQuc3RyaW5nLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlBST0NFU1NJTkdfT1BUSU9OUyA9IFBST0NFU1NJTkdfT1BUSU9OUztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbmNvbnN0IHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xyXG5jb25zdCB0cjQ2ID0gcmVxdWlyZShcInRyNDZcIik7XHJcblxyXG5jb25zdCBzcGVjaWFsU2NoZW1lcyA9IHtcclxuICBmdHA6IDIxLFxyXG4gIGZpbGU6IG51bGwsXHJcbiAgZ29waGVyOiA3MCxcclxuICBodHRwOiA4MCxcclxuICBodHRwczogNDQzLFxyXG4gIHdzOiA4MCxcclxuICB3c3M6IDQ0M1xyXG59O1xyXG5cclxuY29uc3QgZmFpbHVyZSA9IFN5bWJvbChcImZhaWx1cmVcIik7XHJcblxyXG5mdW5jdGlvbiBjb3VudFN5bWJvbHMoc3RyKSB7XHJcbiAgcmV0dXJuIHB1bnljb2RlLnVjczIuZGVjb2RlKHN0cikubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdChpbnB1dCwgaWR4KSB7XHJcbiAgY29uc3QgYyA9IGlucHV0W2lkeF07XHJcbiAgcmV0dXJuIGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlEaWdpdChjKSB7XHJcbiAgcmV0dXJuIGMgPj0gMHgzMCAmJiBjIDw9IDB4Mzk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYShjKSB7XHJcbiAgcmV0dXJuIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoYykge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgaXNBU0NJSURpZ2l0KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJSGV4KGMpIHtcclxuICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDQ2KSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg2Nik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2luZ2xlRG90KGJ1ZmZlcikge1xyXG4gIHJldHVybiBidWZmZXIgPT09IFwiLlwiIHx8IGJ1ZmZlci50b0xvd2VyQ2FzZSgpID09PSBcIiUyZVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RvdWJsZURvdChidWZmZXIpIHtcclxuICBidWZmZXIgPSBidWZmZXIudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi4uXCIgfHwgYnVmZmVyID09PSBcIiUyZS5cIiB8fCBidWZmZXIgPT09IFwiLiUyZVwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGNwMSwgY3AyKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlBbHBoYShjcDEpICYmIChjcDIgPT09IDU4IHx8IGNwMiA9PT0gMTI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgKHN0cmluZ1sxXSA9PT0gXCI6XCIgfHwgc3RyaW5nWzFdID09PSBcInxcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyhzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBpc0FTQ0lJQWxwaGEoc3RyaW5nLmNvZGVQb2ludEF0KDApKSAmJiBzdHJpbmdbMV0gPT09IFwiOlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnQoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5zZWFyY2goL1xcdTAwMDB8XFx1MDAwOXxcXHUwMDBBfFxcdTAwMER8XFx1MDAyMHwjfCV8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnRFeGNsdWRpbmdQZXJjZW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3xcXC98OnxcXD98QHxcXFt8XFxcXHxcXF0vKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3BlY2lhbFNjaGVtZShzY2hlbWUpIHtcclxuICByZXR1cm4gc3BlY2lhbFNjaGVtZXNbc2NoZW1lXSAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWwodXJsKSB7XHJcbiAgcmV0dXJuIGlzU3BlY2lhbFNjaGVtZSh1cmwuc2NoZW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVmYXVsdFBvcnQoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGxldCBoZXggPSBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XHJcbiAgICBoZXggPSBcIjBcIiArIGhleDtcclxuICB9XHJcblxyXG4gIHJldHVybiBcIiVcIiArIGhleDtcclxufVxyXG5cclxuZnVuY3Rpb24gdXRmOFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoYyk7XHJcblxyXG4gIGxldCBzdHIgPSBcIlwiO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7ICsraSkge1xyXG4gICAgc3RyICs9IHBlcmNlbnRFbmNvZGUoYnVmW2ldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RGVjb2RlKHN0cikge1xyXG4gIGNvbnN0IGlucHV0ID0gbmV3IEJ1ZmZlcihzdHIpO1xyXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChpbnB1dFtpXSAhPT0gMzcpIHtcclxuICAgICAgb3V0cHV0LnB1c2goaW5wdXRbaV0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtpXSA9PT0gMzcgJiYgaXNBU0NJSUhleChpbnB1dFtpICsgMV0pICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDJdKSkge1xyXG4gICAgICBvdXRwdXQucHVzaChwYXJzZUludChpbnB1dC5zbGljZShpICsgMSwgaSArIDMpLnRvU3RyaW5nKCksIDE2KSk7XHJcbiAgICAgIGkgKz0gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0cHV0KS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBjIDw9IDB4MUYgfHwgYyA+IDB4N0U7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhUGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBuZXcgU2V0KFszMiwgMzQsIDM1LCA2MCwgNjIsIDYzLCA5NiwgMTIzLCAxMjVdKTtcclxuZnVuY3Rpb24gaXNQYXRoUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzQzBDb250cm9sUGVyY2VudEVuY29kZShjKSB8fCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuY29uc3QgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPVxyXG4gIG5ldyBTZXQoWzQ3LCA1OCwgNTksIDYxLCA2NCwgOTEsIDkyLCA5MywgOTQsIDEyNF0pO1xyXG5mdW5jdGlvbiBpc1VzZXJpbmZvUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQuaGFzKGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlQ2hhcihjLCBlbmNvZGVTZXRQcmVkaWNhdGUpIHtcclxuICBjb25zdCBjU3RyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gIGlmIChlbmNvZGVTZXRQcmVkaWNhdGUoYykpIHtcclxuICAgIHJldHVybiB1dGY4UGVyY2VudEVuY29kZShjU3RyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjU3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjROdW1iZXIoaW5wdXQpIHtcclxuICBsZXQgUiA9IDEwO1xyXG5cclxuICBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIiAmJiBpbnB1dC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ4XCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDIpO1xyXG4gICAgUiA9IDE2O1xyXG4gIH0gZWxzZSBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIikge1xyXG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMSk7XHJcbiAgICBSID0gODtcclxuICB9XHJcblxyXG4gIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZWdleCA9IFIgPT09IDEwID8gL1teMC05XS8gOiAoUiA9PT0gMTYgPyAvW14wLTlBLUZhLWZdLyA6IC9bXjAtN10vKTtcclxuICBpZiAocmVnZXgudGVzdChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCBSKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0KGlucHV0KSB7XHJcbiAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIik7XHJcbiAgaWYgKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICBwYXJ0cy5wb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChwYXJ0cy5sZW5ndGggPiA0KSB7XHJcbiAgICByZXR1cm4gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBudW1iZXJzID0gW107XHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBpZiAocGFydCA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gcGFyc2VJUHY0TnVtYmVyKHBhcnQpO1xyXG4gICAgaWYgKG4gPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIG51bWJlcnMucHVzaChuKTtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVycy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgIGlmIChudW1iZXJzW2ldID4gMjU1KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAobnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdID49IE1hdGgucG93KDI1NiwgNSAtIG51bWJlcnMubGVuZ3RoKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBsZXQgaXB2NCA9IG51bWJlcnMucG9wKCk7XHJcbiAgbGV0IGNvdW50ZXIgPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IG4gb2YgbnVtYmVycykge1xyXG4gICAgaXB2NCArPSBuICogTWF0aC5wb3coMjU2LCAzIC0gY291bnRlcik7XHJcbiAgICArK2NvdW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXB2NDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NChhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgbGV0IG4gPSBhZGRyZXNzO1xyXG5cclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA0OyArK2kpIHtcclxuICAgIG91dHB1dCA9IFN0cmluZyhuICUgMjU2KSArIG91dHB1dDtcclxuICAgIGlmIChpICE9PSA0KSB7XHJcbiAgICAgIG91dHB1dCA9IFwiLlwiICsgb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgbiA9IE1hdGguZmxvb3IobiAvIDI1Nik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjYoaW5wdXQpIHtcclxuICBjb25zdCBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gIGxldCBwaWVjZUluZGV4ID0gMDtcclxuICBsZXQgY29tcHJlc3MgPSBudWxsO1xyXG4gIGxldCBwb2ludGVyID0gMDtcclxuXHJcbiAgaW5wdXQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcblxyXG4gIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgIGlmIChpbnB1dFtwb2ludGVyICsgMV0gIT09IDU4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50ZXIgKz0gMjtcclxuICAgICsrcGllY2VJbmRleDtcclxuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcclxuICB9XHJcblxyXG4gIHdoaWxlIChwb2ludGVyIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBsZXQgbGVuZ3RoID0gMDtcclxuXHJcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBpc0FTQ0lJSGV4KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlICogMHgxMCArIHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSwgMTYpO1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYpIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbnVtYmVyc1NlZW4gPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgaXB2NFBpZWNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0NiAmJiBudW1iZXJzU2VlbiA8IDQpIHtcclxuICAgICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSk7XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IG51bWJlcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAweDEwMCArIGlwdjRQaWVjZTtcclxuXHJcbiAgICAgICAgKytudW1iZXJzU2VlbjtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSB7XHJcbiAgICAgICAgICArK3BpZWNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYnJlYWs7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9pbnRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdmFsdWU7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgIGxldCBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcclxuICAgIHBpZWNlSW5kZXggPSA3O1xyXG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcclxuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xyXG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdGVtcDtcclxuICAgICAgLS1waWVjZUluZGV4O1xyXG4gICAgICAtLXN3YXBzO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoY29tcHJlc3MgPT09IG51bGwgJiYgcGllY2VJbmRleCAhPT0gOCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWRkcmVzcztcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NihhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3Qgc2VxUmVzdWx0ID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7XHJcbiAgY29uc3QgY29tcHJlc3MgPSBzZXFSZXN1bHQuaWR4O1xyXG4gIGxldCBpZ25vcmUwID0gZmFsc2U7XHJcblxyXG4gIGZvciAobGV0IHBpZWNlSW5kZXggPSAwOyBwaWVjZUluZGV4IDw9IDc7ICsrcGllY2VJbmRleCkge1xyXG4gICAgaWYgKGlnbm9yZTAgJiYgYWRkcmVzc1twaWVjZUluZGV4XSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH0gZWxzZSBpZiAoaWdub3JlMCkge1xyXG4gICAgICBpZ25vcmUwID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXByZXNzID09PSBwaWVjZUluZGV4KSB7XHJcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHBpZWNlSW5kZXggPT09IDAgPyBcIjo6XCIgOiBcIjpcIjtcclxuICAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjtcclxuICAgICAgaWdub3JlMCA9IHRydWU7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBhZGRyZXNzW3BpZWNlSW5kZXhdLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICBpZiAocGllY2VJbmRleCAhPT0gNykge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUhvc3QoaW5wdXQsIGlzU3BlY2lhbEFyZykge1xyXG4gIGlmIChpbnB1dFswXSA9PT0gXCJbXCIpIHtcclxuICAgIGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSAhPT0gXCJdXCIpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSVB2NihpbnB1dC5zdWJzdHJpbmcoMSwgaW5wdXQubGVuZ3RoIC0gMSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc1NwZWNpYWxBcmcpIHtcclxuICAgIHJldHVybiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZG9tYWluID0gdXRmOFBlcmNlbnREZWNvZGUoaW5wdXQpO1xyXG4gIGNvbnN0IGFzY2lpRG9tYWluID0gdHI0Ni50b0FTQ0lJKGRvbWFpbiwgZmFsc2UsIHRyNDYuUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTCwgZmFsc2UpO1xyXG4gIGlmIChhc2NpaURvbWFpbiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KGFzY2lpRG9tYWluKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpcHY0SG9zdCA9IHBhcnNlSVB2NChhc2NpaURvbWFpbik7XHJcbiAgaWYgKHR5cGVvZiBpcHY0SG9zdCA9PT0gXCJudW1iZXJcIiB8fCBpcHY0SG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIGlwdjRIb3N0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzY2lpRG9tYWluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpIHtcclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIG91dHB1dCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhcnIpIHtcclxuICBsZXQgbWF4SWR4ID0gbnVsbDtcclxuICBsZXQgbWF4TGVuID0gMTsgLy8gb25seSBmaW5kIGVsZW1lbnRzID4gMVxyXG4gIGxldCBjdXJyU3RhcnQgPSBudWxsO1xyXG4gIGxldCBjdXJyTGVuID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChhcnJbaV0gIT09IDApIHtcclxuICAgICAgaWYgKGN1cnJMZW4gPiBtYXhMZW4pIHtcclxuICAgICAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICAgICAgbWF4TGVuID0gY3VyckxlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcclxuICAgICAgY3VyckxlbiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgY3VyclN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgICArK2N1cnJMZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB0cmFpbGluZyB6ZXJvc1xyXG4gIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICBtYXhMZW4gPSBjdXJyTGVuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkeDogbWF4SWR4LFxyXG4gICAgbGVuOiBtYXhMZW5cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVIb3N0KGhvc3QpIHtcclxuICBpZiAodHlwZW9mIGhvc3QgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBzZXJpYWxpemVJUHY0KGhvc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gSVB2NiBzZXJpYWxpemVyXHJcbiAgaWYgKGhvc3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgcmV0dXJuIFwiW1wiICsgc2VyaWFsaXplSVB2Nihob3N0KSArIFwiXVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhvc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1Db250cm9sQ2hhcnModXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9eW1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDFGXFx1MDAyMF0rJC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJpbVRhYkFuZE5ld2xpbmUodXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXHUwMDA5fFxcdTAwMEF8XFx1MDAwRC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvcnRlblBhdGgodXJsKSB7XHJcbiAgY29uc3QgcGF0aCA9IHVybC5wYXRoO1xyXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAodXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgcGF0aC5sZW5ndGggPT09IDEgJiYgaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwYXRoLnBvcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkge1xyXG4gIHJldHVybiB1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkge1xyXG4gIHJldHVybiB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZykge1xyXG4gIHJldHVybiAvXltBLVphLXpdOiQvLnRlc3Qoc3RyaW5nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBiYXNlLCBlbmNvZGluZ092ZXJyaWRlLCB1cmwsIHN0YXRlT3ZlcnJpZGUpIHtcclxuICB0aGlzLnBvaW50ZXIgPSAwO1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICB0aGlzLmJhc2UgPSBiYXNlIHx8IG51bGw7XHJcbiAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gZW5jb2RpbmdPdmVycmlkZSB8fCBcInV0Zi04XCI7XHJcbiAgdGhpcy5zdGF0ZU92ZXJyaWRlID0gc3RhdGVPdmVycmlkZTtcclxuICB0aGlzLnVybCA9IHVybDtcclxuICB0aGlzLmZhaWx1cmUgPSBmYWxzZTtcclxuICB0aGlzLnBhcnNlRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgdGhpcy51cmwgPSB7XHJcbiAgICAgIHNjaGVtZTogXCJcIixcclxuICAgICAgdXNlcm5hbWU6IFwiXCIsXHJcbiAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICBob3N0OiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBbXSxcclxuICAgICAgcXVlcnk6IG51bGwsXHJcbiAgICAgIGZyYWdtZW50OiBudWxsLFxyXG5cclxuICAgICAgY2Fubm90QmVBQmFzZVVSTDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzID0gdHJpbUNvbnRyb2xDaGFycyh0aGlzLmlucHV0KTtcclxuICAgIGlmIChyZXMgIT09IHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXQgPSByZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXMgPSB0cmltVGFiQW5kTmV3bGluZSh0aGlzLmlucHV0KTtcclxuICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuICB0aGlzLmlucHV0ID0gcmVzO1xyXG5cclxuICB0aGlzLnN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBcInNjaGVtZSBzdGFydFwiO1xyXG5cclxuICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgdGhpcy5hdEZsYWcgPSBmYWxzZTtcclxuICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IGZhbHNlO1xyXG5cclxuICB0aGlzLmlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUodGhpcy5pbnB1dCk7XHJcblxyXG4gIGZvciAoOyB0aGlzLnBvaW50ZXIgPD0gdGhpcy5pbnB1dC5sZW5ndGg7ICsrdGhpcy5wb2ludGVyKSB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXJdO1xyXG4gICAgY29uc3QgY1N0ciA9IGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gICAgLy8gZXhlYyBzdGF0ZSBtYWNoaW5lXHJcbiAgICBjb25zdCByZXQgPSB0aGlzW1wicGFyc2UgXCIgKyB0aGlzLnN0YXRlXShjLCBjU3RyKTtcclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIGJyZWFrOyAvLyB0ZXJtaW5hdGUgYWxnb3JpdGhtXHJcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICB0aGlzLmZhaWx1cmUgPSB0cnVlO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWUgc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZVN0YXJ0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzY2hlbWVcIjtcclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlU2NoZW1lKGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09PSA0MyB8fCBjID09PSA0NSB8fCBjID09PSA0Nikge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgIWlzU3BlY2lhbFNjaGVtZSh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpICYmIHRoaXMuYnVmZmVyID09PSBcImZpbGVcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgKHRoaXMudXJsLmhvc3QgPT09IFwiXCIgfHwgdGhpcy51cmwuaG9zdCA9PT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYnVmZmVyO1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSAhPT0gNDcgfHwgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSAhPT0gNDcpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gdGhpcy51cmwuc2NoZW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgc2xhc2hlc1wiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgICArK3RoaXMucG9pbnRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhbm5vdC1iZS1hLWJhc2UtVVJMIHBhdGhcIjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgdGhpcy5wb2ludGVyID0gLTE7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIG5vIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlTm9TY2hlbWUoYykge1xyXG4gIGlmICh0aGlzLmJhc2UgPT09IG51bGwgfHwgKHRoaXMuYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGMgIT09IDM1KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aE9yQXV0aG9yaXR5KGMpIHtcclxuICBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICBpZiAoaXNOYU4oYykpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmUgc2xhc2hcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgwLCB0aGlzLmJhc2UucGF0aC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlIHNsYXNoXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVNsYXNoKGMpIHtcclxuICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIl0gPSBmdW5jdGlvbiBwYXJzZVNwZWNpYWxBdXRob3JpdHlTbGFzaGVzKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgJiYgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICArK3RoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgIT09IDQ3ICYmIGMgIT09IDkyKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VBdXRob3JpdHkoYywgY1N0cikge1xyXG4gIGlmIChjID09PSA2NCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF0RmxhZykge1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiJTQwXCIgKyB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMuYXRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjYXJlZnVsLCB0aGlzIGlzIGJhc2VkIG9uIGJ1ZmZlciBhbmQgaGFzIGl0cyBvd24gcG9pbnRlciAodGhpcy5wb2ludGVyICE9IHBvaW50ZXIpIGFuZCBpbm5lciBjaGFyc1xyXG4gICAgY29uc3QgbGVuID0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKTtcclxuICAgIGZvciAobGV0IHBvaW50ZXIgPSAwOyBwb2ludGVyIDwgbGVuOyArK3BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgY29kZVBvaW50ID0gdGhpcy5idWZmZXIuY29kZVBvaW50QXQocG9pbnRlcik7XHJcblxyXG4gICAgICBpZiAoY29kZVBvaW50ID09PSA1OCAmJiAhdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcpIHtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlQ2hhcihjb2RlUG9pbnQsIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICAgICAgaWYgKHRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgIGlmICh0aGlzLmF0RmxhZyAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlciAtPSBjb3VudFN5bWJvbHModGhpcy5idWZmZXIpICsgMTtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImhvc3RcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RuYW1lXCJdID1cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUhvc3ROYW1lKGMsIGNTdHIpIHtcclxuICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA1OCAmJiAhdGhpcy5hcnJGbGFnKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBvcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgPT09IFwiaG9zdG5hbWVcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIgJiZcclxuICAgICAgICAgICAgICAgKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgIGlmIChob3N0ID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChjID09PSA5MSkge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA5Mykge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwb3J0XCJdID0gZnVuY3Rpb24gcGFyc2VQb3J0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSURpZ2l0KGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAgICAgICAgdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IFwiXCIpIHtcclxuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyKTtcclxuICAgICAgaWYgKHBvcnQgPiBNYXRoLnBvdygyLCAxNikgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybC5wb3J0ID0gcG9ydCA9PT0gZGVmYXVsdFBvcnQodGhpcy51cmwuc2NoZW1lKSA/IG51bGwgOiBwb3J0O1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IGZpbGVPdGhlcndpc2VDb2RlUG9pbnRzID0gbmV3IFNldChbNDcsIDkyLCA2MywgMzVdKTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlXCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlKGMpIHtcclxuICB0aGlzLnVybC5zY2hlbWUgPSBcImZpbGVcIjtcclxuXHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgc2xhc2hcIjtcclxuICB9IGVsc2UgaWYgKHRoaXMuYmFzZSAhPT0gbnVsbCAmJiB0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID09PSAwIHx8IC8vIHJlbWFpbmluZyBjb25zaXN0cyBvZiAwIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAhaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGMsIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID49IDIgJiYgLy8gcmVtYWluaW5nIGhhcyBhdCBsZWFzdCAyIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAgIWZpbGVPdGhlcndpc2VDb2RlUG9pbnRzLmhhcyh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZVNsYXNoKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyh0aGlzLmJhc2UucGF0aFswXSkpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2godGhpcy5iYXNlLnBhdGhbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVIb3N0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gOTIgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSB7XHJcbiAgICAgICAgaG9zdCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHBhdGggc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhTdGFydChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG5cclxuICAgIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICBpZiAoYyAhPT0gNDcpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoKGMpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHx8XHJcbiAgICAgICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIChjID09PSA2MyB8fCBjID09PSAzNSkpKSB7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RvdWJsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICBpZiAoYyAhPT0gNDcgJiYgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGgucHVzaChcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikgJiYgYyAhPT0gNDcgJiZcclxuICAgICAgICAgICAgICAgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgdGhpcy51cmwucGF0aC5sZW5ndGggPT09IDAgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmhvc3QgIT09IFwiXCIgJiYgdGhpcy51cmwuaG9zdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyWzBdICsgXCI6XCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIChjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLnVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdGhpcy51cmwucGF0aFswXSA9PT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5zaGlmdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNQYXRoUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VDYW5ub3RCZUFCYXNlVVJMUGF0aChjKSB7XHJcbiAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IEFkZDogbm90IGEgVVJMIGNvZGUgcG9pbnRcclxuICAgIGlmICghaXNOYU4oYykgJiYgYyAhPT0gMzcpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoWzBdID0gdGhpcy51cmwucGF0aFswXSArIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBxdWVyeVwiXSA9IGZ1bmN0aW9uIHBhcnNlUXVlcnkoYywgY1N0cikge1xyXG4gIGlmIChpc05hTihjKSB8fCAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkpIHtcclxuICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NcIiB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NzXCIpIHtcclxuICAgICAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gXCJ1dGYtOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWZmZXIpOyAvLyBUT0RPOiBVc2UgZW5jb2Rpbmcgb3ZlcnJpZGUgaW5zdGVhZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKGJ1ZmZlcltpXSA8IDB4MjEgfHwgYnVmZmVyW2ldID4gMHg3RSB8fCBidWZmZXJbaV0gPT09IDB4MjIgfHwgYnVmZmVyW2ldID09PSAweDIzIHx8XHJcbiAgICAgICAgICBidWZmZXJbaV0gPT09IDB4M0MgfHwgYnVmZmVyW2ldID09PSAweDNFKSB7XHJcbiAgICAgICAgdGhpcy51cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShidWZmZXJbaV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGJ1ZmZlcltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAoYyA9PT0gMzUpIHtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmcmFnbWVudFwiXSA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoYykge1xyXG4gIGlmIChpc05hTihjKSkgeyAvLyBkbyBub3RoaW5nXHJcbiAgfSBlbHNlIGlmIChjID09PSAweDApIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplVVJMKHVybCwgZXhjbHVkZUZyYWdtZW50KSB7XHJcbiAgbGV0IG91dHB1dCA9IHVybC5zY2hlbWUgKyBcIjpcIjtcclxuICBpZiAodXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIi8vXCI7XHJcblxyXG4gICAgaWYgKHVybC51c2VybmFtZSAhPT0gXCJcIiB8fCB1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgb3V0cHV0ICs9IHVybC51c2VybmFtZTtcclxuICAgICAgaWYgKHVybC5wYXNzd29yZCAhPT0gXCJcIikge1xyXG4gICAgICAgIG91dHB1dCArPSBcIjpcIiArIHVybC5wYXNzd29yZDtcclxuICAgICAgfVxyXG4gICAgICBvdXRwdXQgKz0gXCJAXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xyXG5cclxuICAgIGlmICh1cmwucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucG9ydDtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHVybC5ob3N0ID09PSBudWxsICYmIHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XHJcbiAgICBvdXRwdXQgKz0gdXJsLnBhdGhbMF07XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHVybC5wYXRoKSB7XHJcbiAgICAgIG91dHB1dCArPSBcIi9cIiArIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh1cmwucXVlcnkgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIj9cIiArIHVybC5xdWVyeTtcclxuICB9XHJcblxyXG4gIGlmICghZXhjbHVkZUZyYWdtZW50ICYmIHVybC5mcmFnbWVudCAhPT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ICs9IFwiI1wiICsgdXJsLmZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT3JpZ2luKHR1cGxlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IHR1cGxlLnNjaGVtZSArIFwiOi8vXCI7XHJcbiAgcmVzdWx0ICs9IHNlcmlhbGl6ZUhvc3QodHVwbGUuaG9zdCk7XHJcblxyXG4gIGlmICh0dXBsZS5wb3J0ICE9PSBudWxsKSB7XHJcbiAgICByZXN1bHQgKz0gXCI6XCIgKyB0dXBsZS5wb3J0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMID0gc2VyaWFsaXplVVJMO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luID0gZnVuY3Rpb24gKHVybCkge1xyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtb3JpZ2luXHJcbiAgc3dpdGNoICh1cmwuc2NoZW1lKSB7XHJcbiAgICBjYXNlIFwiYmxvYlwiOlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4obW9kdWxlLmV4cG9ydHMucGFyc2VVUkwodXJsLnBhdGhbMF0pKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgfVxyXG4gICAgY2FzZSBcImZ0cFwiOlxyXG4gICAgY2FzZSBcImdvcGhlclwiOlxyXG4gICAgY2FzZSBcImh0dHBcIjpcclxuICAgIGNhc2UgXCJodHRwc1wiOlxyXG4gICAgY2FzZSBcIndzXCI6XHJcbiAgICBjYXNlIFwid3NzXCI6XHJcbiAgICAgIHJldHVybiBzZXJpYWxpemVPcmlnaW4oe1xyXG4gICAgICAgIHNjaGVtZTogdXJsLnNjaGVtZSxcclxuICAgICAgICBob3N0OiB1cmwuaG9zdCxcclxuICAgICAgICBwb3J0OiB1cmwucG9ydFxyXG4gICAgICB9KTtcclxuICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgIC8vIHNwZWMgc2F5cyBcImV4ZXJjaXNlIHRvIHRoZSByZWFkZXJcIiwgY2hyb21lIHNheXMgXCJmaWxlOi8vXCJcclxuICAgICAgcmV0dXJuIFwiZmlsZTovL1wiO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIG9yaWdpbiByZXR1cm5zIFwibnVsbFwiXHJcbiAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdXNtID0gbmV3IFVSTFN0YXRlTWFjaGluZShpbnB1dCwgb3B0aW9ucy5iYXNlVVJMLCBvcHRpb25zLmVuY29kaW5nT3ZlcnJpZGUsIG9wdGlvbnMudXJsLCBvcHRpb25zLnN0YXRlT3ZlcnJpZGUpO1xyXG4gIGlmICh1c20uZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIFwiZmFpbHVyZVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVzbS51cmw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IGZ1bmN0aW9uICh1cmwsIHVzZXJuYW1lKSB7XHJcbiAgdXJsLnVzZXJuYW1lID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUodXNlcm5hbWUpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IGZ1bmN0aW9uICh1cmwsIHBhc3N3b3JkKSB7XHJcbiAgdXJsLnBhc3N3b3JkID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUocGFzc3dvcmQpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gc2VyaWFsaXplSG9zdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQgPSBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XHJcbiAgcmV0dXJuIFN0cmluZyhpbnRlZ2VyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnBhcnNlVVJMID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLy8gV2UgZG9uJ3QgaGFuZGxlIGJsb2JzLCBzbyB0aGlzIGp1c3QgZGVsZWdhdGVzOlxyXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCwgZW5jb2RpbmdPdmVycmlkZTogb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlIH0pO1xyXG59O1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdXNtID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIik7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBVUkxJbXBsIHtcbiAgY29uc3RydWN0b3IoY29uc3RydWN0b3JBcmdzKSB7XG4gICAgY29uc3QgdXJsID0gY29uc3RydWN0b3JBcmdzWzBdO1xuICAgIGNvbnN0IGJhc2UgPSBjb25zdHJ1Y3RvckFyZ3NbMV07XG5cbiAgICBsZXQgcGFyc2VkQmFzZSA9IG51bGw7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkQmFzZSA9IHVzbS5iYXNpY1VSTFBhcnNlKGJhc2UpO1xuICAgICAgaWYgKHBhcnNlZEJhc2UgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGJhc2UgVVJMXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHVybCwgeyBiYXNlVVJMOiBwYXJzZWRCYXNlIH0pO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuXG4gICAgLy8gVE9ETzogcXVlcnkgc3R1ZmZcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMKHRoaXMuX3VybCk7XG4gIH1cblxuICBzZXQgaHJlZih2KSB7XG4gICAgY29uc3QgcGFyc2VkVVJMID0gdXNtLmJhc2ljVVJMUGFyc2Uodik7XG4gICAgaWYgKHBhcnNlZFVSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwgPSBwYXJzZWRVUkw7XG4gIH1cblxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMT3JpZ2luKHRoaXMuX3VybCk7XG4gIH1cblxuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5zY2hlbWUgKyBcIjpcIjtcbiAgfVxuXG4gIHNldCBwcm90b2NvbCh2KSB7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiArIFwiOlwiLCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInNjaGVtZSBzdGFydFwiIH0pO1xuICB9XG5cbiAgZ2V0IHVzZXJuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwudXNlcm5hbWU7XG4gIH1cblxuICBzZXQgdXNlcm5hbWUodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVVzZXJuYW1lKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5wYXNzd29yZDtcbiAgfVxuXG4gIHNldCBwYXNzd29yZCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uc2V0VGhlUGFzc3dvcmQodGhpcy5fdXJsLCB2KTtcbiAgfVxuXG4gIGdldCBob3N0KCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHVybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh1cmwuaG9zdCkgKyBcIjpcIiArIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHVybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBob3N0KHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RcIiB9KTtcbiAgfVxuXG4gIGdldCBob3N0bmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh0aGlzLl91cmwuaG9zdCk7XG4gIH1cblxuICBzZXQgaG9zdG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdG5hbWVcIiB9KTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIGlmICh0aGlzLl91cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHRoaXMuX3VybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBwb3J0KHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwucG9ydCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwicG9ydFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybiB0aGlzLl91cmwucGF0aFswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdXJsLnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIvXCIgKyB0aGlzLl91cmwucGF0aC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHNldCBwYXRobmFtZSh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsLnBhdGggPSBbXTtcbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBhdGggc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5xdWVyeSA9PT0gbnVsbCB8fCB0aGlzLl91cmwucXVlcnkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIj9cIiArIHRoaXMuX3VybC5xdWVyeTtcbiAgfVxuXG4gIHNldCBzZWFyY2godikge1xuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiP1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHVybC5xdWVyeSA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInF1ZXJ5XCIgfSk7XG4gIH1cblxuICBnZXQgaGFzaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmZyYWdtZW50ID09PSBudWxsIHx8IHRoaXMuX3VybC5mcmFnbWVudCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy5fdXJsLmZyYWdtZW50O1xuICB9XG5cbiAgc2V0IGhhc2godikge1xuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCIjXCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gXCJcIjtcbiAgICB1c20uYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJmcmFnbWVudFwiIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLmhyZWY7XG4gIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLy9VUkwtaW1wbC5qc1wiKTtcblxuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFVSTCh1cmwpIHtcbiAgaWYgKCF0aGlzIHx8IHRoaXNbaW1wbF0gfHwgISh0aGlzIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VSTCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cy5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cblxuVVJMLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAwOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvSlNPTi5hcHBseSh0aGlzW2ltcGxdLCBhcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblVSTC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLmhyZWY7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInVzZXJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnVzZXJuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnVzZXJuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGFzc3dvcmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGFzc3dvcmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGFzc3dvcmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhvc3RuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3RuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3RuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwYXRobmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXRobmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXRobmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInNlYXJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFyY2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhcmNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpcyhvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgb2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbjtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShVUkwucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFVSTCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFVSTDogVVJMIH0sXG4gICAgV29ya2VyOiB7IFVSTDogVVJMIH1cbiAgfVxufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5VUkwgPSByZXF1aXJlKFwiLi9VUkxcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkw7XG5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZVVSTE9yaWdpbjtcbmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLmJhc2ljVVJMUGFyc2U7XG5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlVXNlcm5hbWU7XG5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlUGFzc3dvcmQ7XG5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVIb3N0O1xuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSW50ZWdlcjtcbmV4cG9ydHMucGFyc2VVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5wYXJzZVVSTDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIFN0cmVhbSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdzdHJlYW0nKSk7XG52YXIgaHR0cCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdodHRwJykpO1xudmFyIFVybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd1cmwnKSk7XG52YXIgd2hhdHdnVXJsID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3doYXR3Zy11cmwnKSk7XG52YXIgaHR0cHMgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cHMnKSk7XG52YXIgemxpYiA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd6bGliJykpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL2Jsb2IvYWE4NWIyYWJmMDc3NjZmZjdiZjVjMWY2ZGFhZmIzNzI2ZjJmMmRiNS9saWIvanNkb20vbGl2aW5nL2Jsb2IuanNcblxuLy8gZml4IGZvciBcIlJlYWRhYmxlXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgaXNzdWVcbmNvbnN0IFJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuXG5jb25zdCBCVUZGRVIgPSBTeW1ib2woJ2J1ZmZlcicpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuXG5jbGFzcyBCbG9iIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpc1tUWVBFXSA9ICcnO1xuXG5cdFx0Y29uc3QgYmxvYlBhcnRzID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG5cblx0XHRjb25zdCBidWZmZXJzID0gW107XG5cdFx0bGV0IHNpemUgPSAwO1xuXG5cdFx0aWYgKGJsb2JQYXJ0cykge1xuXHRcdFx0Y29uc3QgYSA9IGJsb2JQYXJ0cztcblx0XHRcdGNvbnN0IGxlbmd0aCA9IE51bWJlcihhLmxlbmd0aCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBhW2ldO1xuXHRcdFx0XHRsZXQgYnVmZmVyO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGVsZW1lbnQpKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50KTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnRbQlVGRkVSXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbSh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogU3RyaW5nKGVsZW1lbnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaXplICs9IGJ1ZmZlci5sZW5ndGg7XG5cdFx0XHRcdGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbQlVGRkVSXSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG5cblx0XHRsZXQgdHlwZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKG9wdGlvbnMudHlwZSkudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodHlwZSAmJiAhL1teXFx1MDAyMC1cXHUwMDdFXS8udGVzdCh0eXBlKSkge1xuXHRcdFx0dGhpc1tUWVBFXSA9IHR5cGU7XG5cdFx0fVxuXHR9XG5cdGdldCBzaXplKCkge1xuXHRcdHJldHVybiB0aGlzW0JVRkZFUl0ubGVuZ3RoO1xuXHR9XG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW1RZUEVdO1xuXHR9XG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzW0JVRkZFUl0udG9TdHJpbmcoKSk7XG5cdH1cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0Y29uc3QgYnVmID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IGFiID0gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhYik7XG5cdH1cblx0c3RyZWFtKCkge1xuXHRcdGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKCk7XG5cdFx0cmVhZGFibGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7fTtcblx0XHRyZWFkYWJsZS5wdXNoKHRoaXNbQlVGRkVSXSk7XG5cdFx0cmVhZGFibGUucHVzaChudWxsKTtcblx0XHRyZXR1cm4gcmVhZGFibGU7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdbb2JqZWN0IEJsb2JdJztcblx0fVxuXHRzbGljZSgpIHtcblx0XHRjb25zdCBzaXplID0gdGhpcy5zaXplO1xuXG5cdFx0Y29uc3Qgc3RhcnQgPSBhcmd1bWVudHNbMF07XG5cdFx0Y29uc3QgZW5kID0gYXJndW1lbnRzWzFdO1xuXHRcdGxldCByZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZUVuZDtcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IDA7XG5cdFx0fSBlbHNlIGlmIChzdGFydCA8IDApIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1heChzaXplICsgc3RhcnQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHNpemUpO1xuXHRcdH1cblx0XHRpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gc2l6ZTtcblx0XHR9IGVsc2UgaWYgKGVuZCA8IDApIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5tYXgoc2l6ZSArIGVuZCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5taW4oZW5kLCBzaXplKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3BhbiA9IE1hdGgubWF4KHJlbGF0aXZlRW5kIC0gcmVsYXRpdmVTdGFydCwgMCk7XG5cblx0XHRjb25zdCBidWZmZXIgPSB0aGlzW0JVRkZFUl07XG5cdFx0Y29uc3Qgc2xpY2VkQnVmZmVyID0gYnVmZmVyLnNsaWNlKHJlbGF0aXZlU3RhcnQsIHJlbGF0aXZlU3RhcnQgKyBzcGFuKTtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW10sIHsgdHlwZTogYXJndW1lbnRzWzJdIH0pO1xuXHRcdGJsb2JbQlVGRkVSXSA9IHNsaWNlZEJ1ZmZlcjtcblx0XHRyZXR1cm4gYmxvYjtcblx0fVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9iLnByb3RvdHlwZSwge1xuXHRzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dHlwZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNsaWNlOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnQmxvYicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogZmV0Y2gtZXJyb3IuanNcbiAqXG4gKiBGZXRjaEVycm9yIGludGVyZmFjZSBmb3Igb3BlcmF0aW9uYWwgZXJyb3JzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgRmV0Y2hFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHBhcmFtICAgU3RyaW5nICAgICAgdHlwZSAgICAgICAgIEVycm9yIHR5cGUgZm9yIG1hY2hpbmVcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHN5c3RlbUVycm9yICBGb3IgTm9kZS5qcyBzeXN0ZW0gZXJyb3JcbiAqIEByZXR1cm4gIEZldGNoRXJyb3JcbiAqL1xuZnVuY3Rpb24gRmV0Y2hFcnJvcihtZXNzYWdlLCB0eXBlLCBzeXN0ZW1FcnJvcikge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgLy8gd2hlbiBlcnIudHlwZSBpcyBgc3lzdGVtYCwgZXJyLmNvZGUgY29udGFpbnMgc3lzdGVtIGVycm9yIGNvZGVcbiAgaWYgKHN5c3RlbUVycm9yKSB7XG4gICAgdGhpcy5jb2RlID0gdGhpcy5lcnJubyA9IHN5c3RlbUVycm9yLmNvZGU7XG4gIH1cblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5GZXRjaEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkZldGNoRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmV0Y2hFcnJvcjtcbkZldGNoRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRmV0Y2hFcnJvcic7XG5cbmxldCBjb252ZXJ0O1xudHJ5IHtcblx0Y29udmVydCA9IHJlcXVpcmUoJ2VuY29kaW5nJykuY29udmVydDtcbn0gY2F0Y2ggKGUpIHt9XG5cbmNvbnN0IElOVEVSTkFMUyA9IFN5bWJvbCgnQm9keSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiBpc24ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IFBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG4vKipcbiAqIEJvZHkgbWl4aW5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5XG4gKlxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSAgIE9iamVjdCAgb3B0cyAgUmVzcG9uc2Ugb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiBCb2R5KGJvZHkpIHtcblx0dmFyIF90aGlzID0gdGhpcztcblxuXHR2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG5cdCAgICBfcmVmJHNpemUgPSBfcmVmLnNpemU7XG5cblx0bGV0IHNpemUgPSBfcmVmJHNpemUgPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmJHNpemU7XG5cdHZhciBfcmVmJHRpbWVvdXQgPSBfcmVmLnRpbWVvdXQ7XG5cdGxldCB0aW1lb3V0ID0gX3JlZiR0aW1lb3V0ID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiR0aW1lb3V0O1xuXG5cdGlmIChib2R5ID09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIHVuZGVmaW5lZCBvciBudWxsXG5cdFx0Ym9keSA9IG51bGw7XG5cdH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGEgVVJMU2VhcmNoUGFyYW1zXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkudG9TdHJpbmcoKSk7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSA7IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkgOyBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkpO1xuXHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJWaWV3XG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCk7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkgOyBlbHNlIHtcblx0XHQvLyBub25lIG9mIHRoZSBhYm92ZVxuXHRcdC8vIGNvZXJjZSB0byBzdHJpbmcgdGhlbiBidWZmZXJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oU3RyaW5nKGJvZHkpKTtcblx0fVxuXHR0aGlzW0lOVEVSTkFMU10gPSB7XG5cdFx0Ym9keSxcblx0XHRkaXN0dXJiZWQ6IGZhbHNlLFxuXHRcdGVycm9yOiBudWxsXG5cdH07XG5cdHRoaXMuc2l6ZSA9IHNpemU7XG5cdHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG5cblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGNvbnN0IGVycm9yID0gZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJyA/IGVyciA6IG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXMudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKTtcblx0XHRcdF90aGlzW0lOVEVSTkFMU10uZXJyb3IgPSBlcnJvcjtcblx0XHR9KTtcblx0fVxufVxuXG5Cb2R5LnByb3RvdHlwZSA9IHtcblx0Z2V0IGJvZHkoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5ib2R5O1xuXHR9LFxuXG5cdGdldCBib2R5VXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZDtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgQXJyYXlCdWZmZXJcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyByZXNwb25zZSBhcyBCbG9iXG4gICpcbiAgKiBAcmV0dXJuIFByb21pc2VcbiAgKi9cblx0YmxvYigpIHtcblx0XHRsZXQgY3QgPSB0aGlzLmhlYWRlcnMgJiYgdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJyc7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdC8vIFByZXZlbnQgY29weWluZ1xuXHRcdFx0bmV3IEJsb2IoW10sIHtcblx0XHRcdFx0dHlwZTogY3QudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSksIHtcblx0XHRcdFx0W0JVRkZFUl06IGJ1ZlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGpzb25cbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0anNvbigpIHtcblx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBGZXRjaEVycm9yKGBpbnZhbGlkIGpzb24gcmVzcG9uc2UgYm9keSBhdCAke190aGlzMi51cmx9IHJlYXNvbjogJHtlcnIubWVzc2FnZX1gLCAnaW52YWxpZC1qc29uJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0XG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGJ1ZmZlciAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHRidWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcyk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHQsIHdoaWxlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBhbmRcbiAgKiB0cnlpbmcgdG8gZGVjb2RlIHRvIFVURi04IChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHRDb252ZXJ0ZWQoKSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHJldHVybiBjb252ZXJ0Qm9keShidWZmZXIsIF90aGlzMy5oZWFkZXJzKTtcblx0XHR9KTtcblx0fVxufTtcblxuLy8gSW4gYnJvd3NlcnMsIGFsbCBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQm9keS5wcm90b3R5cGUsIHtcblx0Ym9keTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGJvZHlVc2VkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXJyYXlCdWZmZXI6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRibG9iOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0anNvbjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHRleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuQm9keS5taXhJbiA9IGZ1bmN0aW9uIChwcm90bykge1xuXHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQm9keS5wcm90b3R5cGUpKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGVsc2U6IGZ1dHVyZSBwcm9vZlxuXHRcdGlmICghKG5hbWUgaW4gcHJvdG8pKSB7XG5cdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCb2R5LnByb3RvdHlwZSwgbmFtZSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIGRlc2MpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBDb25zdW1lIGFuZCBjb252ZXJ0IGFuIGVudGlyZSBCb2R5IHRvIGEgQnVmZmVyLlxuICpcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVCb2R5KCkge1xuXHR2YXIgX3RoaXM0ID0gdGhpcztcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoYGJvZHkgdXNlZCBhbHJlYWR5IGZvcjogJHt0aGlzLnVybH1gKSk7XG5cdH1cblxuXHR0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkID0gdHJ1ZTtcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmVycm9yKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QodGhpc1tJTlRFUk5BTFNdLmVycm9yKTtcblx0fVxuXG5cdGxldCBib2R5ID0gdGhpcy5ib2R5O1xuXG5cdC8vIGJvZHkgaXMgbnVsbFxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuXHR9XG5cblx0Ly8gYm9keSBpcyBibG9iXG5cdGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5ID0gYm9keS5zdHJlYW0oKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYnVmZmVyXG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoYm9keSk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWY6IHNob3VsZCBuZXZlciBoYXBwZW5cblx0aWYgKCEoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgc3RyZWFtXG5cdC8vIGdldCByZWFkeSB0byBhY3R1YWxseSBjb25zdW1lIHRoZSBib2R5XG5cdGxldCBhY2N1bSA9IFtdO1xuXHRsZXQgYWNjdW1CeXRlcyA9IDA7XG5cdGxldCBhYm9ydCA9IGZhbHNlO1xuXG5cdHJldHVybiBuZXcgQm9keS5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgcmVzVGltZW91dDtcblxuXHRcdC8vIGFsbG93IHRpbWVvdXQgb24gc2xvdyByZXNwb25zZSBib2R5XG5cdFx0aWYgKF90aGlzNC50aW1lb3V0KSB7XG5cdFx0XHRyZXNUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBSZXNwb25zZSB0aW1lb3V0IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzNC51cmx9IChvdmVyICR7X3RoaXM0LnRpbWVvdXR9bXMpYCwgJ2JvZHktdGltZW91dCcpKTtcblx0XHRcdH0sIF90aGlzNC50aW1lb3V0KTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgc3RyZWFtIGVycm9yc1xuXHRcdGJvZHkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0aWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQsIHJlamVjdCB3aXRoIHRoaXMgRXJyb3Jcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG90aGVyIGVycm9ycywgc3VjaCBhcyBpbmNvcnJlY3QgY29udGVudC1lbmNvZGluZ1xuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgYm9keSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRib2R5Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRpZiAoYWJvcnQgfHwgY2h1bmsgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoX3RoaXM0LnNpemUgJiYgYWNjdW1CeXRlcyArIGNodW5rLmxlbmd0aCA+IF90aGlzNC5zaXplKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBjb250ZW50IHNpemUgYXQgJHtfdGhpczQudXJsfSBvdmVyIGxpbWl0OiAke190aGlzNC5zaXplfWAsICdtYXgtc2l6ZScpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRhY2N1bUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblx0XHRcdGFjY3VtLnB1c2goY2h1bmspO1xuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFib3J0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlc1RpbWVvdXQpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKEJ1ZmZlci5jb25jYXQoYWNjdW0sIGFjY3VtQnl0ZXMpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHQvLyBoYW5kbGUgc3RyZWFtcyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdG9vIG11Y2ggZGF0YSAoaXNzdWUgIzQxNClcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIEJ1ZmZlciBmcm9tIHJlc3BvbnNlIGJvZHkgZm9yICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYnVmZmVyIGVuY29kaW5nIGFuZCBjb252ZXJ0IHRvIHRhcmdldCBlbmNvZGluZ1xuICogcmVmOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3BhcnNpbmcuaHRtbCNkZXRlcm1pbmluZy10aGUtY2hhcmFjdGVyLWVuY29kaW5nXG4gKlxuICogQHBhcmFtICAgQnVmZmVyICBidWZmZXIgICAgSW5jb21pbmcgYnVmZmVyXG4gKiBAcGFyYW0gICBTdHJpbmcgIGVuY29kaW5nICBUYXJnZXQgZW5jb2RpbmdcbiAqIEByZXR1cm4gIFN0cmluZ1xuICovXG5mdW5jdGlvbiBjb252ZXJ0Qm9keShidWZmZXIsIGhlYWRlcnMpIHtcblx0aWYgKHR5cGVvZiBjb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcGFja2FnZSBgZW5jb2RpbmdgIG11c3QgYmUgaW5zdGFsbGVkIHRvIHVzZSB0aGUgdGV4dENvbnZlcnRlZCgpIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRjb25zdCBjdCA9IGhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblx0bGV0IGNoYXJzZXQgPSAndXRmLTgnO1xuXHRsZXQgcmVzLCBzdHI7XG5cblx0Ly8gaGVhZGVyXG5cdGlmIChjdCkge1xuXHRcdHJlcyA9IC9jaGFyc2V0PShbXjtdKikvaS5leGVjKGN0KTtcblx0fVxuXG5cdC8vIG5vIGNoYXJzZXQgaW4gY29udGVudCB0eXBlLCBwZWVrIGF0IHJlc3BvbnNlIGJvZHkgZm9yIGF0IG1vc3QgMTAyNCBieXRlc1xuXHRzdHIgPSBidWZmZXIuc2xpY2UoMCwgMTAyNCkudG9TdHJpbmcoKTtcblxuXHQvLyBodG1sNVxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGEuKz9jaGFyc2V0PShbJ1wiXSkoLis/KVxcMS9pLmV4ZWMoc3RyKTtcblx0fVxuXG5cdC8vIGh0bWw0XG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88bWV0YVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDIvaS5leGVjKHN0cik7XG5cdFx0aWYgKCFyZXMpIHtcblx0XHRcdHJlcyA9IC88bWV0YVtcXHNdKz9jb250ZW50PShbJ1wiXSkoLis/KVxcMVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDMvaS5leGVjKHN0cik7XG5cdFx0XHRpZiAocmVzKSB7XG5cdFx0XHRcdHJlcy5wb3AoKTsgLy8gZHJvcCBsYXN0IHF1b3RlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlcykge1xuXHRcdFx0cmVzID0gL2NoYXJzZXQ9KC4qKS9pLmV4ZWMocmVzLnBvcCgpKTtcblx0XHR9XG5cdH1cblxuXHQvLyB4bWxcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxcXD94bWwuKz9lbmNvZGluZz0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBmb3VuZCBjaGFyc2V0XG5cdGlmIChyZXMpIHtcblx0XHRjaGFyc2V0ID0gcmVzLnBvcCgpO1xuXG5cdFx0Ly8gcHJldmVudCBkZWNvZGUgaXNzdWVzIHdoZW4gc2l0ZXMgdXNlIGluY29ycmVjdCBlbmNvZGluZ1xuXHRcdC8vIHJlZjogaHR0cHM6Ly9oc2l2b25lbi5maS9lbmNvZGluZy1tZW51L1xuXHRcdGlmIChjaGFyc2V0ID09PSAnZ2IyMzEyJyB8fCBjaGFyc2V0ID09PSAnZ2JrJykge1xuXHRcdFx0Y2hhcnNldCA9ICdnYjE4MDMwJztcblx0XHR9XG5cdH1cblxuXHQvLyB0dXJuIHJhdyBidWZmZXJzIGludG8gYSBzaW5nbGUgdXRmLTggYnVmZmVyXG5cdHJldHVybiBjb252ZXJ0KGJ1ZmZlciwgJ1VURi04JywgY2hhcnNldCkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaC9pc3N1ZXMvMjk2I2lzc3VlY29tbWVudC0zMDc1OTgxNDNcbiAqXG4gKiBAcGFyYW0gICBPYmplY3QgIG9iaiAgICAgT2JqZWN0IHRvIGRldGVjdCBieSB0eXBlIG9yIGJyYW5kXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXMob2JqKSB7XG5cdC8vIER1Y2stdHlwaW5nIGFzIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbi5cblx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmouYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZGVsZXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0QWxsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouaGFzICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQnJhbmQtY2hlY2tpbmcgYW5kIG1vcmUgZHVjay10eXBpbmcgYXMgb3B0aW9uYWwgY29uZGl0aW9uLlxuXHRyZXR1cm4gb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVUkxTZWFyY2hQYXJhbXMnIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJyB8fCB0eXBlb2Ygb2JqLnNvcnQgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBXM0MgYEJsb2JgIG9iamVjdCAod2hpY2ggYEZpbGVgIGluaGVyaXRzIGZyb20pXG4gKiBAcGFyYW0gIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQmxvYihvYmopIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmouYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai50eXBlID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb2JqLnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ3N0cmluZycgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqLmNvbnN0cnVjdG9yLm5hbWUpICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbn1cblxuLyoqXG4gKiBDbG9uZSBib2R5IGdpdmVuIFJlcy9SZXEgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIFJlc3BvbnNlIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEByZXR1cm4gIE1peGVkXG4gKi9cbmZ1bmN0aW9uIGNsb25lKGluc3RhbmNlKSB7XG5cdGxldCBwMSwgcDI7XG5cdGxldCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXHQvLyBkb24ndCBhbGxvdyBjbG9uaW5nIGEgdXNlZCBib2R5XG5cdGlmIChpbnN0YW5jZS5ib2R5VXNlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2Fubm90IGNsb25lIGJvZHkgYWZ0ZXIgaXQgaXMgdXNlZCcpO1xuXHR9XG5cblx0Ly8gY2hlY2sgdGhhdCBib2R5IGlzIGEgc3RyZWFtIGFuZCBub3QgZm9ybS1kYXRhIG9iamVjdFxuXHQvLyBub3RlOiB3ZSBjYW4ndCBjbG9uZSB0aGUgZm9ybS1kYXRhIG9iamVjdCB3aXRob3V0IGhhdmluZyBpdCBhcyBhIGRlcGVuZGVuY3lcblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0gJiYgdHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgIT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyB0ZWUgaW5zdGFuY2UgYm9keVxuXHRcdHAxID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0cDIgPSBuZXcgUGFzc1Rocm91Z2goKTtcblx0XHRib2R5LnBpcGUocDEpO1xuXHRcdGJvZHkucGlwZShwMik7XG5cdFx0Ly8gc2V0IGluc3RhbmNlIGJvZHkgdG8gdGVlZCBib2R5IGFuZCByZXR1cm4gdGhlIG90aGVyIHRlZWQgYm9keVxuXHRcdGluc3RhbmNlW0lOVEVSTkFMU10uYm9keSA9IHAxO1xuXHRcdGJvZHkgPSBwMjtcblx0fVxuXG5cdHJldHVybiBib2R5O1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHRoZSBvcGVyYXRpb24gXCJleHRyYWN0IGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbSB8b2JqZWN0fFwiIGFzXG4gKiBzcGVjaWZpZWQgaW4gdGhlIHNwZWNpZmljYXRpb246XG4gKiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG4gKlxuICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaW5zdGFuY2UuYm9keSBpcyBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICBpbnN0YW5jZSAgQW55IG9wdGlvbnMuYm9keSBpbnB1dFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29udGVudFR5cGUoYm9keSkge1xuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuXHRcdC8vIGJvZHkgaXMgc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYmxvYlxuXHRcdHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRyZXR1cm4gYG11bHRpcGFydC9mb3JtLWRhdGE7Ym91bmRhcnk9JHtib2R5LmdldEJvdW5kYXJ5KCl9YDtcblx0fSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHQvLyBjYW4ndCByZWFsbHkgZG8gbXVjaCBhYm91dCB0aGlzXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQm9keSBjb25zdHJ1Y3RvciBkZWZhdWx0cyBvdGhlciB0aGluZ3MgdG8gc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIEZldGNoIFN0YW5kYXJkIHRyZWF0cyB0aGlzIGFzIGlmIFwidG90YWwgYnl0ZXNcIiBpcyBhIHByb3BlcnR5IG9uIHRoZSBib2R5LlxuICogRm9yIHVzLCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgZ2V0IGl0IHdpdGggYSBmdW5jdGlvbi5cbiAqXG4gKiByZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktdG90YWwtYnl0ZXNcbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgTnVtYmVyPyAgICAgICAgICAgIE51bWJlciBvZiBieXRlcywgb3IgbnVsbCBpZiBub3QgcG9zc2libGVcbiAqL1xuZnVuY3Rpb24gZ2V0VG90YWxCeXRlcyhpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0cmV0dXJuIDA7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0cmV0dXJuIGJvZHkuc2l6ZTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBib2R5Lmxlbmd0aDtcblx0fSBlbHNlIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LmdldExlbmd0aFN5bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBkZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRcdGlmIChib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzICYmIGJvZHkuX2xlbmd0aFJldHJpZXZlcnMubGVuZ3RoID09IDAgfHwgLy8gMS54XG5cdFx0Ym9keS5oYXNLbm93bkxlbmd0aCAmJiBib2R5Lmhhc0tub3duTGVuZ3RoKCkpIHtcblx0XHRcdC8vIDIueFxuXHRcdFx0cmV0dXJuIGJvZHkuZ2V0TGVuZ3RoU3luYygpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogV3JpdGUgYSBCb2R5IHRvIGEgTm9kZS5qcyBXcml0YWJsZVN0cmVhbSAoZS5nLiBodHRwLlJlcXVlc3QpIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiB3cml0ZVRvU3RyZWFtKGRlc3QsIGluc3RhbmNlKSB7XG5cdGNvbnN0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xuXG5cblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRkZXN0LmVuZCgpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdGJvZHkuc3RyZWFtKCkucGlwZShkZXN0KTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdGRlc3Qud3JpdGUoYm9keSk7XG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdGJvZHkucGlwZShkZXN0KTtcblx0fVxufVxuXG4vLyBleHBvc2UgUHJvbWlzZVxuQm9keS5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbi8qKlxuICogaGVhZGVycy5qc1xuICpcbiAqIEhlYWRlcnMgY2xhc3Mgb2ZmZXJzIGNvbnZlbmllbnQgaGVscGVyc1xuICovXG5cbmNvbnN0IGludmFsaWRUb2tlblJlZ2V4ID0gL1teXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0vO1xuY29uc3QgaW52YWxpZEhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdLztcblxuZnVuY3Rpb24gdmFsaWRhdGVOYW1lKG5hbWUpIHtcblx0bmFtZSA9IGAke25hbWV9YDtcblx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBhIGxlZ2FsIEhUVFAgaGVhZGVyIG5hbWVgKTtcblx0fVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKHZhbHVlKSB7XG5cdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciB2YWx1ZWApO1xuXHR9XG59XG5cbi8qKlxuICogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgb2JqZWN0IGdpdmVuIGEgaGVhZGVyIG5hbWUuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm4gIFN0cmluZ3xVbmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZmluZChtYXAsIG5hbWUpIHtcblx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gbWFwKSB7XG5cdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBNQVAgPSBTeW1ib2woJ21hcCcpO1xuY2xhc3MgSGVhZGVycyB7XG5cdC8qKlxuICAqIEhlYWRlcnMgY2xhc3NcbiAgKlxuICAqIEBwYXJhbSAgIE9iamVjdCAgaGVhZGVycyAgUmVzcG9uc2UgaGVhZGVyc1xuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXNbTUFQXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0XHRpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcblx0XHRcdGNvbnN0IHJhd0hlYWRlcnMgPSBpbml0LnJhdygpO1xuXHRcdFx0Y29uc3QgaGVhZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhyYXdIZWFkZXJzKTtcblxuXHRcdFx0Zm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIGhlYWRlck5hbWVzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSkge1xuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKGhlYWRlck5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgY29udmVydGluZyBwcm9wIHRvIEJ5dGVTdHJpbmcgaGVyZSBhcyBhcHBlbmQoKVxuXHRcdC8vIHdpbGwgaGFuZGxlIGl0LlxuXHRcdGlmIChpbml0ID09IG51bGwpIDsgZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBtZXRob2QgPSBpbml0W1N5bWJvbC5pdGVyYXRvcl07XG5cdFx0XHRpZiAobWV0aG9kICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXIgcGFpcnMgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+XG5cdFx0XHRcdC8vIE5vdGU6IHBlciBzcGVjIHdlIGhhdmUgdG8gZmlyc3QgZXhoYXVzdCB0aGUgbGlzdHMgdGhlbiBwcm9jZXNzIHRoZW1cblx0XHRcdFx0Y29uc3QgcGFpcnMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIGluaXQpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHBhaXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYWlyW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0VhY2ggaGVhZGVyIHBhaXIgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwYWlycy5wdXNoKEFycmF5LmZyb20ocGFpcikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG5cdFx0XHRcdFx0aWYgKHBhaXIubGVuZ3RoICE9PSAyKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgYSBuYW1lL3ZhbHVlIHR1cGxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKHBhaXJbMF0sIHBhaXJbMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5pdCkpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGluaXRba2V5XTtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBpbml0aWFsaXplciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIFJldHVybiBjb21iaW5lZCBoZWFkZXIgdmFsdWUgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIE1peGVkXG4gICovXG5cdGdldChuYW1lKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNbTUFQXVtrZXldLmpvaW4oJywgJyk7XG5cdH1cblxuXHQvKipcbiAgKiBJdGVyYXRlIG92ZXIgYWxsIGhlYWRlcnNcbiAgKlxuICAqIEBwYXJhbSAgIEZ1bmN0aW9uICBjYWxsYmFjayAgRXhlY3V0ZWQgZm9yIGVhY2ggaXRlbSB3aXRoIHBhcmFtZXRlcnMgKHZhbHVlLCBuYW1lLCB0aGlzQXJnKVxuICAqIEBwYXJhbSAgIEJvb2xlYW4gICB0aGlzQXJnICAgYHRoaXNgIGNvbnRleHQgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0bGV0IHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBwYWlycyA9IGdldEhlYWRlcnModGhpcyk7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdHdoaWxlIChpIDwgcGFpcnMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgX3BhaXJzJGkgPSBwYWlyc1tpXTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfcGFpcnMkaVswXSxcblx0XHRcdCAgICAgIHZhbHVlID0gX3BhaXJzJGlbMV07XG5cblx0XHRcdGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIG5hbWUsIHRoaXMpO1xuXHRcdFx0cGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdFx0aSsrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIE92ZXJ3cml0ZSBoZWFkZXIgdmFsdWVzIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgIEhlYWRlciBuYW1lXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRzZXQobmFtZSwgdmFsdWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0dmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdHRoaXNbTUFQXVtrZXkgIT09IHVuZGVmaW5lZCA/IGtleSA6IG5hbWVdID0gW3ZhbHVlXTtcblx0fVxuXG5cdC8qKlxuICAqIEFwcGVuZCBhIHZhbHVlIG9udG8gZXhpc3RpbmcgaGVhZGVyXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0YXBwZW5kKG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbTUFQXVtrZXldLnB1c2godmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW01BUF1bbmFtZV0gPSBbdmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIENoZWNrIGZvciBoZWFkZXIgbmFtZSBleGlzdGVuY2VcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgQm9vbGVhblxuICAqL1xuXHRoYXMobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHJldHVybiBmaW5kKHRoaXNbTUFQXSwgbmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuICAqIERlbGV0ZSBhbGwgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRkZWxldGUobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSB0aGlzW01BUF1ba2V5XTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gcmF3IGhlYWRlcnMgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIE9iamVjdFxuICAqL1xuXHRyYXcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbTUFQXTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBrZXlzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0a2V5cygpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXknKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiB2YWx1ZXMuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHR2YWx1ZXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAndmFsdWUnKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBlbnRyaWVzLlxuICAqXG4gICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpdGVyYXRvciBvZiB0aGUgSGVhZGVycyBvYmplY3QuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKTtcblx0fVxufVxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnSGVhZGVycycsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG5cdGdldDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGZvckVhY2g6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRhcHBlbmQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoYXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRkZWxldGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRrZXlzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dmFsdWVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZW50cmllczogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRIZWFkZXJzKGhlYWRlcnMpIHtcblx0bGV0IGtpbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXkrdmFsdWUnO1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzW01BUF0pLnNvcnQoKTtcblx0cmV0dXJuIGtleXMubWFwKGtpbmQgPT09ICdrZXknID8gZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gay50b0xvd2VyQ2FzZSgpO1xuXHR9IDoga2luZCA9PT0gJ3ZhbHVlJyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpO1xuXHR9IDogZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gW2sudG9Mb3dlckNhc2UoKSwgaGVhZGVyc1tNQVBdW2tdLmpvaW4oJywgJyldO1xuXHR9KTtcbn1cblxuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ2ludGVybmFsJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0YXJnZXQsIGtpbmQpIHtcblx0Y29uc3QgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSk7XG5cdGl0ZXJhdG9yW0lOVEVSTkFMXSA9IHtcblx0XHR0YXJnZXQsXG5cdFx0a2luZCxcblx0XHRpbmRleDogMFxuXHR9O1xuXHRyZXR1cm4gaXRlcmF0b3I7XG59XG5cbmNvbnN0IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZih7XG5cdG5leHQoKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGlmXG5cdFx0aWYgKCF0aGlzIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBvZiBgdGhpc2AgaXMgbm90IGEgSGVhZGVyc0l0ZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0dmFyIF9JTlRFUk5BTCA9IHRoaXNbSU5URVJOQUxdO1xuXHRcdGNvbnN0IHRhcmdldCA9IF9JTlRFUk5BTC50YXJnZXQsXG5cdFx0ICAgICAga2luZCA9IF9JTlRFUk5BTC5raW5kLFxuXHRcdCAgICAgIGluZGV4ID0gX0lOVEVSTkFMLmluZGV4O1xuXG5cdFx0Y29uc3QgdmFsdWVzID0gZ2V0SGVhZGVycyh0YXJnZXQsIGtpbmQpO1xuXHRcdGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0aWYgKGluZGV4ID49IGxlbikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZG9uZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMXS5pbmRleCA9IGluZGV4ICsgMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR2YWx1ZTogdmFsdWVzW2luZGV4XSxcblx0XHRcdGRvbmU6IGZhbHNlXG5cdFx0fTtcblx0fVxufSwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnNJdGVyYXRvcicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogRXhwb3J0IHRoZSBIZWFkZXJzIG9iamVjdCBpbiBhIGZvcm0gdGhhdCBOb2RlLmpzIGNhbiBjb25zdW1lLlxuICpcbiAqIEBwYXJhbSAgIEhlYWRlcnMgIGhlYWRlcnNcbiAqIEByZXR1cm4gIE9iamVjdFxuICovXG5mdW5jdGlvbiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycykge1xuXHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHsgX19wcm90b19fOiBudWxsIH0sIGhlYWRlcnNbTUFQXSk7XG5cblx0Ly8gaHR0cC5yZXF1ZXN0KCkgb25seSBzdXBwb3J0cyBzdHJpbmcgYXMgSG9zdCBoZWFkZXIuIFRoaXMgaGFjayBtYWtlc1xuXHQvLyBzcGVjaWZ5aW5nIGN1c3RvbSBIb3N0IGhlYWRlciBwb3NzaWJsZS5cblx0Y29uc3QgaG9zdEhlYWRlcktleSA9IGZpbmQoaGVhZGVyc1tNQVBdLCAnSG9zdCcpO1xuXHRpZiAoaG9zdEhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqW2hvc3RIZWFkZXJLZXldID0gb2JqW2hvc3RIZWFkZXJLZXldWzBdO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBIZWFkZXJzIG9iamVjdCBmcm9tIGFuIG9iamVjdCBvZiBoZWFkZXJzLCBpZ25vcmluZyB0aG9zZSB0aGF0IGRvXG4gKiBub3QgY29uZm9ybSB0byBIVFRQIGdyYW1tYXIgcHJvZHVjdGlvbnMuXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogIE9iamVjdCBvZiBoZWFkZXJzXG4gKiBAcmV0dXJuICBIZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNMZW5pZW50KG9iaikge1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcblx0XHRpZiAoaW52YWxpZFRva2VuUmVnZXgudGVzdChuYW1lKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9ialtuYW1lXSkpIHtcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIG9ialtuYW1lXSkge1xuXHRcdFx0XHRpZiAoaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KHZhbCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGVhZGVyc1tNQVBdW25hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbdmFsXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KG9ialtuYW1lXSkpIHtcblx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXSA9IFtvYmpbbmFtZV1dO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaGVhZGVycztcbn1cblxuY29uc3QgSU5URVJOQUxTJDEgPSBTeW1ib2woJ1Jlc3BvbnNlIGludGVybmFscycpO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJTVEFUVVNfQ09ERVNcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBTVEFUVVNfQ09ERVMgPSBodHRwLlNUQVRVU19DT0RFUztcblxuLyoqXG4gKiBSZXNwb25zZSBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVzcG9uc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRsZXQgYm9keSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcblx0XHRsZXQgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRCb2R5LmNhbGwodGhpcywgYm9keSwgb3B0cyk7XG5cblx0XHRjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cyB8fCAyMDA7XG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdHMuaGVhZGVycyk7XG5cblx0XHRpZiAoYm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMV0gPSB7XG5cdFx0XHR1cmw6IG9wdHMudXJsLFxuXHRcdFx0c3RhdHVzLFxuXHRcdFx0c3RhdHVzVGV4dDogb3B0cy5zdGF0dXNUZXh0IHx8IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGNvdW50ZXI6IG9wdHMuY291bnRlclxuXHRcdH07XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS51cmwgfHwgJyc7XG5cdH1cblxuXHRnZXQgc3RhdHVzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXM7XG5cdH1cblxuXHQvKipcbiAgKiBDb252ZW5pZW5jZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaWYgdGhlIHJlcXVlc3QgZW5kZWQgbm9ybWFsbHlcbiAgKi9cblx0Z2V0IG9rKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cyA8IDMwMDtcblx0fVxuXG5cdGdldCByZWRpcmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5jb3VudGVyID4gMDtcblx0fVxuXG5cdGdldCBzdGF0dXNUZXh0KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXNUZXh0O1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLmhlYWRlcnM7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlc3BvbnNlXG4gICpcbiAgKiBAcmV0dXJuICBSZXNwb25zZVxuICAqL1xuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKGNsb25lKHRoaXMpLCB7XG5cdFx0XHR1cmw6IHRoaXMudXJsLFxuXHRcdFx0c3RhdHVzOiB0aGlzLnN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdG9rOiB0aGlzLm9rLFxuXHRcdFx0cmVkaXJlY3RlZDogdGhpcy5yZWRpcmVjdGVkXG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5taXhJbihSZXNwb25zZS5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0b2s6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRyZWRpcmVjdGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzVGV4dDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGhlYWRlcnM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2UucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXNwb25zZScsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbmNvbnN0IElOVEVSTkFMUyQyID0gU3ltYm9sKCdSZXF1ZXN0IGludGVybmFscycpO1xuY29uc3QgVVJMID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJmb3JtYXRcIiwgXCJwYXJzZVwiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IHBhcnNlX3VybCA9IFVybC5wYXJzZTtcbmNvbnN0IGZvcm1hdF91cmwgPSBVcmwuZm9ybWF0O1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGBuZXcgVVJMYCB0byBoYW5kbGUgYXJiaXRyYXJ5IFVSTHNcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHVybFN0clxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VVUkwodXJsU3RyKSB7XG5cdC8qXG4gXHRDaGVjayB3aGV0aGVyIHRoZSBVUkwgaXMgYWJzb2x1dGUgb3Igbm90XG4gXHRcdFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcbiBcdEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcbiAqL1xuXHRpZiAoL15bYS16QS1aXVthLXpBLVpcXGQrXFwtLl0qOi8uZXhlYyh1cmxTdHIpKSB7XG5cdFx0dXJsU3RyID0gbmV3IFVSTCh1cmxTdHIpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHQvLyBGYWxsYmFjayB0byBvbGQgaW1wbGVtZW50YXRpb24gZm9yIGFyYml0cmFyeSBVUkxzXG5cdHJldHVybiBwYXJzZV91cmwodXJsU3RyKTtcbn1cblxuY29uc3Qgc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQgPSAnZGVzdHJveScgaW4gU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIFJlcXVlc3QuXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgICBpbnB1dFxuICogQHJldHVybiAgQm9vbGVhblxuICovXG5mdW5jdGlvbiBpc1JlcXVlc3QoaW5wdXQpIHtcblx0cmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGlucHV0W0lOVEVSTkFMUyQyXSA9PT0gJ29iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRTaWduYWwoc2lnbmFsKSB7XG5cdGNvbnN0IHByb3RvID0gc2lnbmFsICYmIHR5cGVvZiBzaWduYWwgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihzaWduYWwpO1xuXHRyZXR1cm4gISEocHJvdG8gJiYgcHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0Fib3J0U2lnbmFsJyk7XG59XG5cbi8qKlxuICogUmVxdWVzdCBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXQgIFVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgIGluaXQgICBDdXN0b20gb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5jbGFzcyBSZXF1ZXN0IHtcblx0Y29uc3RydWN0b3IoaW5wdXQpIHtcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRsZXQgcGFyc2VkVVJMO1xuXG5cdFx0Ly8gbm9ybWFsaXplIGlucHV0XG5cdFx0aWYgKCFpc1JlcXVlc3QoaW5wdXQpKSB7XG5cdFx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuaHJlZikge1xuXHRcdFx0XHQvLyBpbiBvcmRlciB0byBzdXBwb3J0IE5vZGUuanMnIFVybCBvYmplY3RzOyB0aG91Z2ggV0hBVFdHJ3MgVVJMIG9iamVjdHNcblx0XHRcdFx0Ly8gd2lsbCBmYWxsIGludG8gdGhpcyBicmFuY2ggYWxzbyAoc2luY2UgdGhlaXIgYHRvU3RyaW5nKClgIHdpbGwgcmV0dXJuXG5cdFx0XHRcdC8vIGBocmVmYCBwcm9wZXJ0eSBhbnl3YXkpXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LmhyZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gY29lcmNlIGlucHV0IHRvIGEgc3RyaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGAke2lucHV0fWApO1xuXHRcdFx0fVxuXHRcdFx0aW5wdXQgPSB7fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoaW5wdXQudXJsKTtcblx0XHR9XG5cblx0XHRsZXQgbWV0aG9kID0gaW5pdC5tZXRob2QgfHwgaW5wdXQubWV0aG9kIHx8ICdHRVQnO1xuXHRcdG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0aWYgKChpbml0LmJvZHkgIT0gbnVsbCB8fCBpc1JlcXVlc3QoaW5wdXQpICYmIGlucHV0LmJvZHkgIT09IG51bGwpICYmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5Jyk7XG5cdFx0fVxuXG5cdFx0bGV0IGlucHV0Qm9keSA9IGluaXQuYm9keSAhPSBudWxsID8gaW5pdC5ib2R5IDogaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsID8gY2xvbmUoaW5wdXQpIDogbnVsbDtcblxuXHRcdEJvZHkuY2FsbCh0aGlzLCBpbnB1dEJvZHksIHtcblx0XHRcdHRpbWVvdXQ6IGluaXQudGltZW91dCB8fCBpbnB1dC50aW1lb3V0IHx8IDAsXG5cdFx0XHRzaXplOiBpbml0LnNpemUgfHwgaW5wdXQuc2l6ZSB8fCAwXG5cdFx0fSk7XG5cblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzIHx8IGlucHV0LmhlYWRlcnMgfHwge30pO1xuXG5cdFx0aWYgKGlucHV0Qm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGlucHV0Qm9keSk7XG5cdFx0XHRpZiAoY29udGVudFR5cGUpIHtcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2lnbmFsID0gaXNSZXF1ZXN0KGlucHV0KSA/IGlucHV0LnNpZ25hbCA6IG51bGw7XG5cdFx0aWYgKCdzaWduYWwnIGluIGluaXQpIHNpZ25hbCA9IGluaXQuc2lnbmFsO1xuXG5cdFx0aWYgKHNpZ25hbCAhPSBudWxsICYmICFpc0Fib3J0U2lnbmFsKHNpZ25hbCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNpZ25hbCB0byBiZSBhbiBpbnN0YW5jZW9mIEFib3J0U2lnbmFsJyk7XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMl0gPSB7XG5cdFx0XHRtZXRob2QsXG5cdFx0XHRyZWRpcmVjdDogaW5pdC5yZWRpcmVjdCB8fCBpbnB1dC5yZWRpcmVjdCB8fCAnZm9sbG93Jyxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRwYXJzZWRVUkwsXG5cdFx0XHRzaWduYWxcblx0XHR9O1xuXG5cdFx0Ly8gbm9kZS1mZXRjaC1vbmx5IG9wdGlvbnNcblx0XHR0aGlzLmZvbGxvdyA9IGluaXQuZm9sbG93ICE9PSB1bmRlZmluZWQgPyBpbml0LmZvbGxvdyA6IGlucHV0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuZm9sbG93IDogMjA7XG5cdFx0dGhpcy5jb21wcmVzcyA9IGluaXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGluaXQuY29tcHJlc3MgOiBpbnB1dC5jb21wcmVzcyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY29tcHJlc3MgOiB0cnVlO1xuXHRcdHRoaXMuY291bnRlciA9IGluaXQuY291bnRlciB8fCBpbnB1dC5jb3VudGVyIHx8IDA7XG5cdFx0dGhpcy5hZ2VudCA9IGluaXQuYWdlbnQgfHwgaW5wdXQuYWdlbnQ7XG5cdH1cblxuXHRnZXQgbWV0aG9kKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5tZXRob2Q7XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiBmb3JtYXRfdXJsKHRoaXNbSU5URVJOQUxTJDJdLnBhcnNlZFVSTCk7XG5cdH1cblxuXHRnZXQgaGVhZGVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uaGVhZGVycztcblx0fVxuXG5cdGdldCByZWRpcmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ucmVkaXJlY3Q7XG5cdH1cblxuXHRnZXQgc2lnbmFsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5zaWduYWw7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlcXVlc3RcbiAgKlxuICAqIEByZXR1cm4gIFJlcXVlc3RcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMpO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVxdWVzdC5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVxdWVzdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ1JlcXVlc3QnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuXHRtZXRob2Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR1cmw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNpZ25hbDogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBSZXF1ZXN0IHRvIE5vZGUuanMgaHR0cCByZXF1ZXN0IG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICAgUmVxdWVzdCAgQSBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBPYmplY3QgICBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGh0dHAucmVxdWVzdFxuICovXG5mdW5jdGlvbiBnZXROb2RlUmVxdWVzdE9wdGlvbnMocmVxdWVzdCkge1xuXHRjb25zdCBwYXJzZWRVUkwgPSByZXF1ZXN0W0lOVEVSTkFMUyQyXS5wYXJzZWRVUkw7XG5cdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXF1ZXN0W0lOVEVSTkFMUyQyXS5oZWFkZXJzKTtcblxuXHQvLyBmZXRjaCBzdGVwIDEuM1xuXHRpZiAoIWhlYWRlcnMuaGFzKCdBY2NlcHQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnKi8qJyk7XG5cdH1cblxuXHQvLyBCYXNpYyBmZXRjaFxuXHRpZiAoIXBhcnNlZFVSTC5wcm90b2NvbCB8fCAhcGFyc2VkVVJMLmhvc3RuYW1lKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBhYnNvbHV0ZSBVUkxzIGFyZSBzdXBwb3J0ZWQnKTtcblx0fVxuXG5cdGlmICghL15odHRwcz86JC8udGVzdChwYXJzZWRVUkwucHJvdG9jb2wpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBIVFRQKFMpIHByb3RvY29scyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlICYmICFzdHJlYW1EZXN0cnVjdGlvblN1cHBvcnRlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGF0aW9uIG9mIHN0cmVhbWVkIHJlcXVlc3RzIHdpdGggQWJvcnRTaWduYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBub2RlIDwgOCcpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXBzIDIuNC0yLjdcblx0bGV0IGNvbnRlbnRMZW5ndGhWYWx1ZSA9IG51bGw7XG5cdGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiAvXihQT1NUfFBVVCkkL2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcblx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSAnMCc7XG5cdH1cblx0aWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgdG90YWxCeXRlcyA9IGdldFRvdGFsQnl0ZXMocmVxdWVzdCk7XG5cdFx0aWYgKHR5cGVvZiB0b3RhbEJ5dGVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0Y29udGVudExlbmd0aFZhbHVlID0gU3RyaW5nKHRvdGFsQnl0ZXMpO1xuXHRcdH1cblx0fVxuXHRpZiAoY29udGVudExlbmd0aFZhbHVlKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgY29udGVudExlbmd0aFZhbHVlKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTFcblx0aWYgKCFoZWFkZXJzLmhhcygnVXNlci1BZ2VudCcpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ1VzZXItQWdlbnQnLCAnbm9kZS1mZXRjaC8xLjAgKCtodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gpJyk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjE1XG5cdGlmIChyZXF1ZXN0LmNvbXByZXNzICYmICFoZWFkZXJzLmhhcygnQWNjZXB0LUVuY29kaW5nJykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0LUVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScpO1xuXHR9XG5cblx0bGV0IGFnZW50ID0gcmVxdWVzdC5hZ2VudDtcblx0aWYgKHR5cGVvZiBhZ2VudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGFnZW50ID0gYWdlbnQocGFyc2VkVVJMKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDQuMlxuXHQvLyBjaHVua2VkIGVuY29kaW5nIGlzIGhhbmRsZWQgYnkgTm9kZS5qc1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRVUkwsIHtcblx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdGhlYWRlcnM6IGV4cG9ydE5vZGVDb21wYXRpYmxlSGVhZGVycyhoZWFkZXJzKSxcblx0XHRhZ2VudFxuXHR9KTtcbn1cblxuLyoqXG4gKiBhYm9ydC1lcnJvci5qc1xuICpcbiAqIEFib3J0RXJyb3IgaW50ZXJmYWNlIGZvciBjYW5jZWxsZWQgcmVxdWVzdHNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBBYm9ydEVycm9yIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXG4gKiBAcmV0dXJuICBBYm9ydEVycm9yXG4gKi9cbmZ1bmN0aW9uIEFib3J0RXJyb3IobWVzc2FnZSkge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMudHlwZSA9ICdhYm9ydGVkJztcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5BYm9ydEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkFib3J0RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJvcnRFcnJvcjtcbkFib3J0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cbmNvbnN0IFVSTCQxID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJQYXNzVGhyb3VnaFwiLCBcInJlc29sdmVcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCQxID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG5jb25zdCBpc0RvbWFpbk9yU3ViZG9tYWluID0gZnVuY3Rpb24gaXNEb21haW5PclN1YmRvbWFpbihkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkuaG9zdG5hbWU7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLmhvc3RuYW1lO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0IHx8IG9yaWdbb3JpZy5sZW5ndGggLSBkZXN0Lmxlbmd0aCAtIDFdID09PSAnLicgJiYgb3JpZy5lbmRzV2l0aChkZXN0KTtcbn07XG5cbi8qKlxuICogaXNTYW1lUHJvdG9jb2wgcmVwb3J0cyB3aGV0aGVyIHRoZSB0d28gcHJvdmlkZWQgVVJMcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuXG4gKlxuICogQm90aCBkb21haW5zIG11c3QgYWxyZWFkeSBiZSBpbiBjYW5vbmljYWwgZm9ybS5cbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gb3JpZ2luYWxcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gZGVzdGluYXRpb25cbiAqL1xuY29uc3QgaXNTYW1lUHJvdG9jb2wgPSBmdW5jdGlvbiBpc1NhbWVQcm90b2NvbChkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkucHJvdG9jb2w7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLnByb3RvY29sO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0O1xufTtcblxuLyoqXG4gKiBGZXRjaCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgIHVybCAgIEFic29sdXRlIHVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgICBvcHRzICBGZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoKHVybCwgb3B0cykge1xuXG5cdC8vIGFsbG93IGN1c3RvbSBwcm9taXNlXG5cdGlmICghZmV0Y2guUHJvbWlzZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbmF0aXZlIHByb21pc2UgbWlzc2luZywgc2V0IGZldGNoLlByb21pc2UgdG8geW91ciBmYXZvcml0ZSBhbHRlcm5hdGl2ZScpO1xuXHR9XG5cblx0Qm9keS5Qcm9taXNlID0gZmV0Y2guUHJvbWlzZTtcblxuXHQvLyB3cmFwIGh0dHAucmVxdWVzdCBpbnRvIGZldGNoXG5cdHJldHVybiBuZXcgZmV0Y2guUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Ly8gYnVpbGQgcmVxdWVzdCBvYmplY3Rcblx0XHRjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBvcHRzKTtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpO1xuXG5cdFx0Y29uc3Qgc2VuZCA9IChvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzIDogaHR0cCkucmVxdWVzdDtcblx0XHRjb25zdCBzaWduYWwgPSByZXF1ZXN0LnNpZ25hbDtcblxuXHRcdGxldCByZXNwb25zZSA9IG51bGw7XG5cblx0XHRjb25zdCBhYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuXHRcdFx0bGV0IGVycm9yID0gbmV3IEFib3J0RXJyb3IoJ1RoZSB1c2VyIGFib3J0ZWQgYSByZXF1ZXN0LicpO1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdGlmIChyZXF1ZXN0LmJvZHkgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlKSB7XG5cdFx0XHRcdGRlc3Ryb3lTdHJlYW0ocmVxdWVzdC5ib2R5LCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSByZXR1cm47XG5cdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuXHRcdH07XG5cblx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRhYm9ydCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFib3J0QW5kRmluYWxpemUgPSBmdW5jdGlvbiBhYm9ydEFuZEZpbmFsaXplKCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fTtcblxuXHRcdC8vIHNlbmQgcmVxdWVzdFxuXHRcdGNvbnN0IHJlcSA9IHNlbmQob3B0aW9ucyk7XG5cdFx0bGV0IHJlcVRpbWVvdXQ7XG5cblx0XHRpZiAoc2lnbmFsKSB7XG5cdFx0XHRzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaW5hbGl6ZSgpIHtcblx0XHRcdHJlcS5hYm9ydCgpO1xuXHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3QudGltZW91dCkge1xuXHRcdFx0cmVxLm9uY2UoJ3NvY2tldCcsIGZ1bmN0aW9uIChzb2NrZXQpIHtcblx0XHRcdFx0cmVxVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgbmV0d29yayB0aW1lb3V0IGF0OiAke3JlcXVlc3QudXJsfWAsICdyZXF1ZXN0LXRpbWVvdXQnKSk7XG5cdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0fSwgcmVxdWVzdC50aW1lb3V0KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHJlcXVlc3QgdG8gJHtyZXF1ZXN0LnVybH0gZmFpbGVkLCByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fSk7XG5cblx0XHRmaXhSZXNwb25zZUNodW5rZWRUcmFuc2ZlckJhZEVuZGluZyhyZXEsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBjOCBpZ25vcmUgbmV4dCAxOCAqL1xuXHRcdGlmIChwYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3Vic3RyaW5nKDEpKSA8IDE0KSB7XG5cdFx0XHQvLyBCZWZvcmUgTm9kZS5qcyAxNCwgcGlwZWxpbmUoKSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGFzeW5jIGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgYWx3YXlzXG5cdFx0XHQvLyBwcm9wZXJseSBoYW5kbGUgd2hlbiB0aGUgc29ja2V0IGNsb3NlL2VuZCBldmVudHMgYXJlIG91dCBvZiBvcmRlci5cblx0XHRcdHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0cy5hZGRMaXN0ZW5lcignY2xvc2UnLCBmdW5jdGlvbiAoaGFkRXJyb3IpIHtcblx0XHRcdFx0XHQvLyBpZiBhIGRhdGEgbGlzdGVuZXIgaXMgc3RpbGwgcHJlc2VudCB3ZSBkaWRuJ3QgZW5kIGNsZWFubHlcblx0XHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0XHQvLyBpZiBlbmQgaGFwcGVuZWQgYmVmb3JlIGNsb3NlIGJ1dCB0aGUgc29ja2V0IGRpZG4ndCBlbWl0IGFuIGVycm9yLCBkbyBpdCBub3dcblx0XHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvciAmJiAhKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSA9ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSc7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmVxLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXMpIHtcblx0XHRcdGNsZWFyVGltZW91dChyZXFUaW1lb3V0KTtcblxuXHRcdFx0Y29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNMZW5pZW50KHJlcy5oZWFkZXJzKTtcblxuXHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDVcblx0XHRcdGlmIChmZXRjaC5pc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKSkge1xuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS4yXG5cdFx0XHRcdGNvbnN0IGxvY2F0aW9uID0gaGVhZGVycy5nZXQoJ0xvY2F0aW9uJyk7XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuM1xuXHRcdFx0XHRsZXQgbG9jYXRpb25VUkwgPSBudWxsO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvY2F0aW9uVVJMID0gbG9jYXRpb24gPT09IG51bGwgPyBudWxsIDogbmV3IFVSTCQxKGxvY2F0aW9uLCByZXF1ZXN0LnVybCkudG9TdHJpbmcoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgaGVyZSBjYW4gb25seSBiZSBpbnZhbGlkIFVSTCBpbiBMb2NhdGlvbjogaGVhZGVyXG5cdFx0XHRcdFx0Ly8gZG8gbm90IHRocm93IHdoZW4gb3B0aW9ucy5yZWRpcmVjdCA9PSBtYW51YWxcblx0XHRcdFx0XHQvLyBsZXQgdGhlIHVzZXIgZXh0cmFjdCB0aGUgZXJyb3JuZW91cyByZWRpcmVjdCBVUkxcblx0XHRcdFx0XHRpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGFuIGludmFsaWQgcmVkaXJlY3QgVVJMOiAke2xvY2F0aW9ufWAsICdpbnZhbGlkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS41XG5cdFx0XHRcdHN3aXRjaCAocmVxdWVzdC5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdGNhc2UgJ2Vycm9yJzpcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGEgcmVkaXJlY3QsIHJlZGlyZWN0IG1vZGUgaXMgc2V0IHRvIGVycm9yOiAke3JlcXVlc3QudXJsfWAsICduby1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Y2FzZSAnbWFudWFsJzpcblx0XHRcdFx0XHRcdC8vIG5vZGUtZmV0Y2gtc3BlY2lmaWMgc3RlcDogbWFrZSBtYW51YWwgcmVkaXJlY3QgYSBiaXQgZWFzaWVyIHRvIHVzZSBieSBzZXR0aW5nIHRoZSBMb2NhdGlvbiBoZWFkZXIgdmFsdWUgdG8gdGhlIHJlc29sdmVkIFVSTC5cblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHQvLyBoYW5kbGUgY29ycnVwdGVkIGhlYWRlclxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMuc2V0KCdMb2NhdGlvbicsIGxvY2F0aW9uVVJMKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vZGVqcyBzZXJ2ZXIgcHJldmVudCBpbnZhbGlkIHJlc3BvbnNlIGhlYWRlcnMsIHdlIGNhbid0IHRlc3QgdGhpcyB0aHJvdWdoIG5vcm1hbCByZXF1ZXN0XG5cdFx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2ZvbGxvdyc6XG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMlxuXHRcdFx0XHRcdFx0aWYgKGxvY2F0aW9uVVJMID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNVxuXHRcdFx0XHRcdFx0aWYgKHJlcXVlc3QuY291bnRlciA+PSByZXF1ZXN0LmZvbGxvdykge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG1heGltdW0gcmVkaXJlY3QgcmVhY2hlZCBhdDogJHtyZXF1ZXN0LnVybH1gLCAnbWF4LXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA2IChjb3VudGVyIGluY3JlbWVudClcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBSZXF1ZXN0IG9iamVjdC5cblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RPcHRzID0ge1xuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOiBuZXcgSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLFxuXHRcdFx0XHRcdFx0XHRmb2xsb3c6IHJlcXVlc3QuZm9sbG93LFxuXHRcdFx0XHRcdFx0XHRjb3VudGVyOiByZXF1ZXN0LmNvdW50ZXIgKyAxLFxuXHRcdFx0XHRcdFx0XHRhZ2VudDogcmVxdWVzdC5hZ2VudCxcblx0XHRcdFx0XHRcdFx0Y29tcHJlc3M6IHJlcXVlc3QuY29tcHJlc3MsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGJvZHk6IHJlcXVlc3QuYm9keSxcblx0XHRcdFx0XHRcdFx0c2lnbmFsOiByZXF1ZXN0LnNpZ25hbCxcblx0XHRcdFx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuXHRcdFx0XHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemVcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGlmICghaXNEb21haW5PclN1YmRvbWFpbihyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpIHx8ICFpc1NhbWVQcm90b2NvbChyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBbJ2F1dGhvcml6YXRpb24nLCAnd3d3LWF1dGhlbnRpY2F0ZScsICdjb29raWUnLCAnY29va2llMiddKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUobmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDlcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMzAzICYmIHJlcXVlc3QuYm9keSAmJiBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcignQ2Fubm90IGZvbGxvdyByZWRpcmVjdCB3aXRoIGJvZHkgYmVpbmcgYSByZWFkYWJsZSBzdHJlYW0nLCAndW5zdXBwb3J0ZWQtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDExXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMyB8fCAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLm1ldGhvZCA9ICdHRVQnO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5ib2R5ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC1sZW5ndGgnKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDE1XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZldGNoKG5ldyBSZXF1ZXN0KGxvY2F0aW9uVVJMLCByZXF1ZXN0T3B0cykpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJlcGFyZSByZXNwb25zZVxuXHRcdFx0cmVzLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBib2R5ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cblx0XHRcdGNvbnN0IHJlc3BvbnNlX29wdGlvbnMgPSB7XG5cdFx0XHRcdHVybDogcmVxdWVzdC51cmwsXG5cdFx0XHRcdHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG5cdFx0XHRcdHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuXHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemUsXG5cdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuM1xuXHRcdFx0Y29uc3QgY29kaW5ncyA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJyk7XG5cblx0XHRcdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDEyLjEuMS40OiBoYW5kbGUgY29udGVudCBjb2RpbmdzXG5cblx0XHRcdC8vIGluIGZvbGxvd2luZyBzY2VuYXJpb3Mgd2UgaWdub3JlIGNvbXByZXNzaW9uIHN1cHBvcnRcblx0XHRcdC8vIDEuIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZGlzYWJsZWRcblx0XHRcdC8vIDIuIEhFQUQgcmVxdWVzdFxuXHRcdFx0Ly8gMy4gbm8gQ29udGVudC1FbmNvZGluZyBoZWFkZXJcblx0XHRcdC8vIDQuIG5vIGNvbnRlbnQgcmVzcG9uc2UgKDIwNClcblx0XHRcdC8vIDUuIGNvbnRlbnQgbm90IG1vZGlmaWVkIHJlc3BvbnNlICgzMDQpXG5cdFx0XHRpZiAoIXJlcXVlc3QuY29tcHJlc3MgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fCBjb2RpbmdzID09PSBudWxsIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNCkge1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIE5vZGUgdjYrXG5cdFx0XHQvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcblx0XHRcdC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuXHRcdFx0Ly8gYnkgY29tbW9uIGJyb3dzZXJzLlxuXHRcdFx0Ly8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cblx0XHRcdGNvbnN0IHpsaWJPcHRpb25zID0ge1xuXHRcdFx0XHRmbHVzaDogemxpYi5aX1NZTkNfRkxVU0gsXG5cdFx0XHRcdGZpbmlzaEZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZm9yIGd6aXBcblx0XHRcdGlmIChjb2RpbmdzID09ICdnemlwJyB8fCBjb2RpbmdzID09ICd4LWd6aXAnKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVHdW56aXAoemxpYk9wdGlvbnMpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBkZWZsYXRlXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZGVmbGF0ZScgfHwgY29kaW5ncyA9PSAneC1kZWZsYXRlJykge1xuXHRcdFx0XHQvLyBoYW5kbGUgdGhlIGluZmFtb3VzIHJhdyBkZWZsYXRlIHJlc3BvbnNlIGZyb20gb2xkIHNlcnZlcnNcblx0XHRcdFx0Ly8gYSBoYWNrIGZvciBvbGQgSUlTIGFuZCBBcGFjaGUgc2VydmVyc1xuXHRcdFx0XHRjb25zdCByYXcgPSByZXMucGlwZShuZXcgUGFzc1Rocm91Z2gkMSgpKTtcblx0XHRcdFx0cmF3Lm9uY2UoJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdFx0XHQvLyBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzUxOTgyOFxuXHRcdFx0XHRcdGlmICgoY2h1bmtbMF0gJiAweDBGKSA9PT0gMHgwOCkge1xuXHRcdFx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUluZmxhdGUoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJhdy5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIHNvbWUgb2xkIElJUyBzZXJ2ZXJzIHJldHVybiB6ZXJvLWxlbmd0aCBPSyBkZWZsYXRlIHJlc3BvbnNlcywgc28gJ2RhdGEnIGlzIG5ldmVyIGVtaXR0ZWQuXG5cdFx0XHRcdFx0aWYgKCFyZXNwb25zZSkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBiclxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2JyJyAmJiB0eXBlb2YgemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpO1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gb3RoZXJ3aXNlLCB1c2UgcmVzcG9uc2UgYXMtaXNcblx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0fSk7XG5cblx0XHR3cml0ZVRvU3RyZWFtKHJlcSwgcmVxdWVzdCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxdWVzdCwgZXJyb3JDYWxsYmFjaykge1xuXHRsZXQgc29ja2V0O1xuXG5cdHJlcXVlc3Qub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0c29ja2V0ID0gcztcblx0fSk7XG5cblx0cmVxdWVzdC5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRjb25zdCBoZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVycztcblxuXHRcdGlmIChoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddID09PSAnY2h1bmtlZCcgJiYgIWhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pIHtcblx0XHRcdHJlc3BvbnNlLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdC8vIHRlc3RzIGZvciBzb2NrZXQgcHJlc2VuY2UsIGFzIGluIHNvbWUgc2l0dWF0aW9ucyB0aGVcblx0XHRcdFx0Ly8gdGhlICdzb2NrZXQnIGV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgZm9yIHRoZSByZXF1ZXN0XG5cdFx0XHRcdC8vIChoYXBwZW5zIGluIGRlbm8pLCBhdm9pZHMgYFR5cGVFcnJvcmBcblx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdGNvbnN0IGhhc0RhdGFMaXN0ZW5lciA9IHNvY2tldCAmJiBzb2NrZXQubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMDtcblxuXHRcdFx0XHRpZiAoaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvcikge1xuXHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveVN0cmVhbShzdHJlYW0sIGVycikge1xuXHRpZiAoc3RyZWFtLmRlc3Ryb3kpIHtcblx0XHRzdHJlYW0uZGVzdHJveShlcnIpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG5vZGUgPCA4XG5cdFx0c3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRzdHJlYW0uZW5kKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZWRpcmVjdCBjb2RlIG1hdGNoaW5nXG4gKlxuICogQHBhcmFtICAgTnVtYmVyICAgY29kZSAgU3RhdHVzIGNvZGVcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZmV0Y2guaXNSZWRpcmVjdCA9IGZ1bmN0aW9uIChjb2RlKSB7XG5cdHJldHVybiBjb2RlID09PSAzMDEgfHwgY29kZSA9PT0gMzAyIHx8IGNvZGUgPT09IDMwMyB8fCBjb2RlID09PSAzMDcgfHwgY29kZSA9PT0gMzA4O1xufTtcblxuLy8gZXhwb3NlIFByb21pc2VcbmZldGNoLlByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmV0Y2g7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzO1xuZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycztcbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5leHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG5leHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbiIsCiAgICAiLyoqXG4gKiBAbGljZW5zZVxuICogd2ViLXN0cmVhbXMtcG9seWZpbGwgdjQuMC4wLWJldGEuM1xuICogQ29weXJpZ2h0IDIwMjEgTWF0dGlhcyBCdWVsZW5zLCBEaXdhbmsgU2luZ2ggVG9tZXIgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy5cbiAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cbmNvbnN0IGU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP1N5bWJvbDplPT5gU3ltYm9sKCR7ZX0pYDtmdW5jdGlvbiB0KCl7fWZ1bmN0aW9uIHIoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWNvbnN0IG89dDtmdW5jdGlvbiBuKGUsdCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwibmFtZVwiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pfWNhdGNoKGUpe319Y29uc3QgYT1Qcm9taXNlLGk9UHJvbWlzZS5wcm90b3R5cGUudGhlbixsPVByb21pc2UucmVzb2x2ZS5iaW5kKGEpLHM9UHJvbWlzZS5yZWplY3QuYmluZChhKTtmdW5jdGlvbiB1KGUpe3JldHVybiBuZXcgYShlKX1mdW5jdGlvbiBjKGUpe3JldHVybiBsKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIHMoZSl9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIGkuY2FsbChlLHQscil9ZnVuY3Rpb24gYihlLHQscil7ZihmKGUsdCxyKSx2b2lkIDAsbyl9ZnVuY3Rpb24gaChlLHQpe2IoZSx0KX1mdW5jdGlvbiBfKGUsdCl7YihlLHZvaWQgMCx0KX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gZihlLHQscil9ZnVuY3Rpb24gbShlKXtmKGUsdm9pZCAwLG8pfWxldCB5PWU9PntpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBxdWV1ZU1pY3JvdGFzayl5PXF1ZXVlTWljcm90YXNrO2Vsc2V7Y29uc3QgZT1jKHZvaWQgMCk7eT10PT5mKGUsdCl9cmV0dXJuIHkoZSl9O2Z1bmN0aW9uIGcoZSx0LHIpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uXCIpO3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9ZnVuY3Rpb24gdyhlLHQscil7dHJ5e3JldHVybiBjKGcoZSx0LHIpKX1jYXRjaChlKXtyZXR1cm4gZChlKX19Y2xhc3MgU3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnNvcj0wLHRoaXMuX3NpemU9MCx0aGlzLl9mcm9udD17X2VsZW1lbnRzOltdLF9uZXh0OnZvaWQgMH0sdGhpcy5fYmFjaz10aGlzLl9mcm9udCx0aGlzLl9jdXJzb3I9MCx0aGlzLl9zaXplPTB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9zaXplfXB1c2goZSl7Y29uc3QgdD10aGlzLl9iYWNrO2xldCByPXQ7MTYzODM9PT10Ll9lbGVtZW50cy5sZW5ndGgmJihyPXtfZWxlbWVudHM6W10sX25leHQ6dm9pZCAwfSksdC5fZWxlbWVudHMucHVzaChlKSxyIT09dCYmKHRoaXMuX2JhY2s9cix0Ll9uZXh0PXIpLCsrdGhpcy5fc2l6ZX1zaGlmdCgpe2NvbnN0IGU9dGhpcy5fZnJvbnQ7bGV0IHQ9ZTtjb25zdCByPXRoaXMuX2N1cnNvcjtsZXQgbz1yKzE7Y29uc3Qgbj1lLl9lbGVtZW50cyxhPW5bcl07cmV0dXJuIDE2Mzg0PT09byYmKHQ9ZS5fbmV4dCxvPTApLC0tdGhpcy5fc2l6ZSx0aGlzLl9jdXJzb3I9byxlIT09dCYmKHRoaXMuX2Zyb250PXQpLG5bcl09dm9pZCAwLGF9Zm9yRWFjaChlKXtsZXQgdD10aGlzLl9jdXJzb3Iscj10aGlzLl9mcm9udCxvPXIuX2VsZW1lbnRzO2Zvcig7ISh0PT09by5sZW5ndGgmJnZvaWQgMD09PXIuX25leHR8fHQ9PT1vLmxlbmd0aCYmKHI9ci5fbmV4dCxvPXIuX2VsZW1lbnRzLHQ9MCwwPT09by5sZW5ndGgpKTspZShvW3RdKSwrK3R9cGVlaygpe2NvbnN0IGU9dGhpcy5fZnJvbnQsdD10aGlzLl9jdXJzb3I7cmV0dXJuIGUuX2VsZW1lbnRzW3RdfX1jb25zdCB2PWUoXCJbW0Fib3J0U3RlcHNdXVwiKSxSPWUoXCJbW0Vycm9yU3RlcHNdXVwiKSxUPWUoXCJbW0NhbmNlbFN0ZXBzXV1cIikscT1lKFwiW1tQdWxsU3RlcHNdXVwiKSxDPWUoXCJbW1JlbGVhc2VTdGVwc11dXCIpO2Z1bmN0aW9uIEUoZSx0KXtlLl9vd25lclJlYWRhYmxlU3RyZWFtPXQsdC5fcmVhZGVyPWUsXCJyZWFkYWJsZVwiPT09dC5fc3RhdGU/TyhlKTpcImNsb3NlZFwiPT09dC5fc3RhdGU/ZnVuY3Rpb24oZSl7TyhlKSxqKGUpfShlKTpCKGUsdC5fc3RvcmVkRXJyb3IpfWZ1bmN0aW9uIFAoZSx0KXtyZXR1cm4gR3QoZS5fb3duZXJSZWFkYWJsZVN0cmVhbSx0KX1mdW5jdGlvbiBXKGUpe2NvbnN0IHQ9ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtcInJlYWRhYmxlXCI9PT10Ll9zdGF0ZT9BKGUsbmV3IFR5cGVFcnJvcihcIlJlYWRlciB3YXMgcmVsZWFzZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCB0byBtb25pdG9yIHRoZSBzdHJlYW0ncyBjbG9zZWRuZXNzXCIpKTpmdW5jdGlvbihlLHQpe0IoZSx0KX0oZSxuZXcgVHlwZUVycm9yKFwiUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3NcIikpLHQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcltDXSgpLHQuX3JlYWRlcj12b2lkIDAsZS5fb3duZXJSZWFkYWJsZVN0cmVhbT12b2lkIDB9ZnVuY3Rpb24gayhlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBcIitlK1wiIGEgc3RyZWFtIHVzaW5nIGEgcmVsZWFzZWQgcmVhZGVyXCIpfWZ1bmN0aW9uIE8oZSl7ZS5fY2xvc2VkUHJvbWlzZT11KCgodCxyKT0+e2UuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT10LGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXJ9KSl9ZnVuY3Rpb24gQihlLHQpe08oZSksQShlLHQpfWZ1bmN0aW9uIEEoZSx0KXt2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCYmKG0oZS5fY2xvc2VkUHJvbWlzZSksZS5fY2xvc2VkUHJvbWlzZV9yZWplY3QodCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDApfWZ1bmN0aW9uIGooZSl7dm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlJiYoZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKHZvaWQgMCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDApfWNvbnN0IHo9TnVtYmVyLmlzRmluaXRlfHxmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSl9LEw9TWF0aC50cnVuY3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD9NYXRoLmNlaWwoZSk6TWF0aC5mbG9vcihlKX07ZnVuY3Rpb24gRihlLHQpe2lmKHZvaWQgMCE9PWUmJihcIm9iamVjdFwiIT10eXBlb2Yocj1lKSYmXCJmdW5jdGlvblwiIT10eXBlb2YgcikpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSBpcyBub3QgYW4gb2JqZWN0LmApO3ZhciByfWZ1bmN0aW9uIEkoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGEgZnVuY3Rpb24uYCl9ZnVuY3Rpb24gRChlLHQpe2lmKCFmdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGV9KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGFuIG9iamVjdC5gKX1mdW5jdGlvbiAkKGUsdCxyKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoYFBhcmFtZXRlciAke3R9IGlzIHJlcXVpcmVkIGluICcke3J9Jy5gKX1mdW5jdGlvbiBNKGUsdCxyKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgcmVxdWlyZWQgaW4gJyR7cn0nLmApfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIE51bWJlcihlKX1mdW5jdGlvbiBRKGUpe3JldHVybiAwPT09ZT8wOmV9ZnVuY3Rpb24gTihlLHQpe2NvbnN0IHI9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7bGV0IG89TnVtYmVyKGUpO2lmKG89UShvKSwheihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG5vdCBhIGZpbml0ZSBudW1iZXJgKTtpZihvPWZ1bmN0aW9uKGUpe3JldHVybiBRKEwoZSkpfShvKSxvPDB8fG8+cil0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG91dHNpZGUgdGhlIGFjY2VwdGVkIHJhbmdlIG9mIDAgdG8gJHtyfSwgaW5jbHVzaXZlYCk7cmV0dXJuIHoobykmJjAhPT1vP286MH1mdW5jdGlvbiBIKGUpe2lmKCFyKGUpKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuZ2V0UmVhZGVyKXJldHVybiExO3RyeXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUubG9ja2VkfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiB4KGUpe2lmKCFyKGUpKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuZ2V0V3JpdGVyKXJldHVybiExO3RyeXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUubG9ja2VkfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBWKGUsdCl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGEgUmVhZGFibGVTdHJlYW0uYCl9ZnVuY3Rpb24gVShlLHQpe2UuX3JlYWRlci5fcmVhZFJlcXVlc3RzLnB1c2godCl9ZnVuY3Rpb24gRyhlLHQscil7Y29uc3Qgbz1lLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5zaGlmdCgpO3I/by5fY2xvc2VTdGVwcygpOm8uX2NodW5rU3RlcHModCl9ZnVuY3Rpb24gWChlKXtyZXR1cm4gZS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RofWZ1bmN0aW9uIEooZSl7Y29uc3QgdD1lLl9yZWFkZXI7cmV0dXJuIHZvaWQgMCE9PXQmJiEhSyh0KX1jbGFzcyBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoJChlLDEsXCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJcIiksVihlLFwiRmlyc3QgcGFyYW1ldGVyXCIpLFV0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXJcIik7RSh0aGlzLGUpLHRoaXMuX3JlYWRSZXF1ZXN0cz1uZXcgU31nZXQgY2xvc2VkKCl7cmV0dXJuIEsodGhpcyk/dGhpcy5fY2xvc2VkUHJvbWlzZTpkKGVlKFwiY2xvc2VkXCIpKX1jYW5jZWwoZSl7cmV0dXJuIEsodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9kKGsoXCJjYW5jZWxcIikpOlAodGhpcyxlKTpkKGVlKFwiY2FuY2VsXCIpKX1yZWFkKCl7aWYoIUsodGhpcykpcmV0dXJuIGQoZWUoXCJyZWFkXCIpKTtpZih2b2lkIDA9PT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtKXJldHVybiBkKGsoXCJyZWFkIGZyb21cIikpO2xldCBlLHQ7Y29uc3Qgcj11KCgocixvKT0+e2U9cix0PW99KSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLl9vd25lclJlYWRhYmxlU3RyZWFtO3IuX2Rpc3R1cmJlZD0hMCxcImNsb3NlZFwiPT09ci5fc3RhdGU/dC5fY2xvc2VTdGVwcygpOlwiZXJyb3JlZFwiPT09ci5fc3RhdGU/dC5fZXJyb3JTdGVwcyhyLl9zdG9yZWRFcnJvcik6ci5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyW3FdKHQpfSh0aGlzLHtfY2h1bmtTdGVwczp0PT5lKHt2YWx1ZTp0LGRvbmU6ITF9KSxfY2xvc2VTdGVwczooKT0+ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KSxfZXJyb3JTdGVwczplPT50KGUpfSkscn1yZWxlYXNlTG9jaygpe2lmKCFLKHRoaXMpKXRocm93IGVlKFwicmVsZWFzZUxvY2tcIik7dm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSYmZnVuY3Rpb24oZSl7VyhlKTtjb25zdCB0PW5ldyBUeXBlRXJyb3IoXCJSZWFkZXIgd2FzIHJlbGVhc2VkXCIpO1ooZSx0KX0odGhpcyl9fWZ1bmN0aW9uIEsoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9yZWFkUmVxdWVzdHNcIikmJmUgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIpfWZ1bmN0aW9uIFooZSx0KXtjb25zdCByPWUuX3JlYWRSZXF1ZXN0cztlLl9yZWFkUmVxdWVzdHM9bmV3IFMsci5mb3JFYWNoKChlPT57ZS5fZXJyb3JTdGVwcyh0KX0pKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJgKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLHtjYW5jZWw6e2VudW1lcmFibGU6ITB9LHJlYWQ6e2VudW1lcmFibGU6ITB9LHJlbGVhc2VMb2NrOntlbnVtZXJhYmxlOiEwfSxjbG9zZWQ6e2VudW1lcmFibGU6ITB9fSksbihSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLmNhbmNlbCxcImNhbmNlbFwiKSxuKFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUucmVhZCxcInJlYWRcIiksbihSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLnJlbGVhc2VMb2NrLFwicmVsZWFzZUxvY2tcIiksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyXCIsY29uZmlndXJhYmxlOiEwfSk7Y2xhc3MgdGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9vbmdvaW5nUHJvbWlzZT12b2lkIDAsdGhpcy5faXNGaW5pc2hlZD0hMSx0aGlzLl9yZWFkZXI9ZSx0aGlzLl9wcmV2ZW50Q2FuY2VsPXR9bmV4dCgpe2NvbnN0IGU9KCk9PnRoaXMuX25leHRTdGVwcygpO3JldHVybiB0aGlzLl9vbmdvaW5nUHJvbWlzZT10aGlzLl9vbmdvaW5nUHJvbWlzZT9wKHRoaXMuX29uZ29pbmdQcm9taXNlLGUsZSk6ZSgpLHRoaXMuX29uZ29pbmdQcm9taXNlfXJldHVybihlKXtjb25zdCB0PSgpPT50aGlzLl9yZXR1cm5TdGVwcyhlKTtyZXR1cm4gdGhpcy5fb25nb2luZ1Byb21pc2U/cCh0aGlzLl9vbmdvaW5nUHJvbWlzZSx0LHQpOnQoKX1fbmV4dFN0ZXBzKCl7aWYodGhpcy5faXNGaW5pc2hlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2NvbnN0IGU9dGhpcy5fcmVhZGVyO3JldHVybiB2b2lkIDA9PT1lP2QoayhcIml0ZXJhdGVcIikpOmYoZS5yZWFkKCksKGU9Pnt2YXIgdDtyZXR1cm4gdGhpcy5fb25nb2luZ1Byb21pc2U9dm9pZCAwLGUuZG9uZSYmKHRoaXMuX2lzRmluaXNoZWQ9ITAsbnVsbD09PSh0PXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PXR8fHQucmVsZWFzZUxvY2soKSx0aGlzLl9yZWFkZXI9dm9pZCAwKSxlfSksKGU9Pnt2YXIgdDt0aHJvdyB0aGlzLl9vbmdvaW5nUHJvbWlzZT12b2lkIDAsdGhpcy5faXNGaW5pc2hlZD0hMCxudWxsPT09KHQ9dGhpcy5fcmVhZGVyKXx8dm9pZCAwPT09dHx8dC5yZWxlYXNlTG9jaygpLHRoaXMuX3JlYWRlcj12b2lkIDAsZX0pKX1fcmV0dXJuU3RlcHMoZSl7aWYodGhpcy5faXNGaW5pc2hlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITB9KTt0aGlzLl9pc0ZpbmlzaGVkPSEwO2NvbnN0IHQ9dGhpcy5fcmVhZGVyO2lmKHZvaWQgMD09PXQpcmV0dXJuIGQoayhcImZpbmlzaCBpdGVyYXRpbmdcIikpO2lmKHRoaXMuX3JlYWRlcj12b2lkIDAsIXRoaXMuX3ByZXZlbnRDYW5jZWwpe2NvbnN0IHI9dC5jYW5jZWwoZSk7cmV0dXJuIHQucmVsZWFzZUxvY2soKSxwKHIsKCgpPT4oe3ZhbHVlOmUsZG9uZTohMH0pKSl9cmV0dXJuIHQucmVsZWFzZUxvY2soKSxjKHt2YWx1ZTplLGRvbmU6ITB9KX19Y29uc3QgcmU9e25leHQoKXtyZXR1cm4gb2UodGhpcyk/dGhpcy5fYXN5bmNJdGVyYXRvckltcGwubmV4dCgpOmQobmUoXCJuZXh0XCIpKX0scmV0dXJuKGUpe3JldHVybiBvZSh0aGlzKT90aGlzLl9hc3luY0l0ZXJhdG9ySW1wbC5yZXR1cm4oZSk6ZChuZShcInJldHVyblwiKSl9fTtmdW5jdGlvbiBvZShlKXtpZighcihlKSlyZXR1cm4hMTtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfYXN5bmNJdGVyYXRvckltcGxcIikpcmV0dXJuITE7dHJ5e3JldHVybiBlLl9hc3luY0l0ZXJhdG9ySW1wbCBpbnN0YW5jZW9mIHRlfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBuZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RlYW1Bc3luY0l0ZXJhdG9yYCl9XCJzeW1ib2xcIj09dHlwZW9mIGUuYXN5bmNJdGVyYXRvciYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLGUuYXN5bmNJdGVyYXRvcix7dmFsdWUoKXtyZXR1cm4gdGhpc30sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgYWU9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX07ZnVuY3Rpb24gaWUoZSx0LHIsbyxuKXtuZXcgVWludDhBcnJheShlKS5zZXQobmV3IFVpbnQ4QXJyYXkocixvLG4pLHQpfWZ1bmN0aW9uIGxlKGUpe2NvbnN0IHQ9ZnVuY3Rpb24oZSx0LHIpe2lmKGUuc2xpY2UpcmV0dXJuIGUuc2xpY2UodCxyKTtjb25zdCBvPXItdCxuPW5ldyBBcnJheUJ1ZmZlcihvKTtyZXR1cm4gaWUobiwwLGUsdCxvKSxufShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlT2Zmc2V0K2UuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpfWZ1bmN0aW9uIHNlKGUpe2NvbnN0IHQ9ZS5fcXVldWUuc2hpZnQoKTtyZXR1cm4gZS5fcXVldWVUb3RhbFNpemUtPXQuc2l6ZSxlLl9xdWV1ZVRvdGFsU2l6ZTwwJiYoZS5fcXVldWVUb3RhbFNpemU9MCksdC52YWx1ZX1mdW5jdGlvbiB1ZShlLHQscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mKG89cil8fGFlKG8pfHxvPDB8fHI9PT0xLzApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJTaXplIG11c3QgYmUgYSBmaW5pdGUsIG5vbi1OYU4sIG5vbi1uZWdhdGl2ZSBudW1iZXIuXCIpO3ZhciBvO2UuX3F1ZXVlLnB1c2goe3ZhbHVlOnQsc2l6ZTpyfSksZS5fcXVldWVUb3RhbFNpemUrPXJ9ZnVuY3Rpb24gY2UoZSl7ZS5fcXVldWU9bmV3IFMsZS5fcXVldWVUb3RhbFNpemU9MH1jbGFzcyBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0e2NvbnN0cnVjdG9yKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIil9Z2V0IHZpZXcoKXtpZighZmUodGhpcykpdGhyb3cgQmUoXCJ2aWV3XCIpO3JldHVybiB0aGlzLl92aWV3fXJlc3BvbmQoZSl7aWYoIWZlKHRoaXMpKXRocm93IEJlKFwicmVzcG9uZFwiKTtpZigkKGUsMSxcInJlc3BvbmRcIiksZT1OKGUsXCJGaXJzdCBwYXJhbWV0ZXJcIiksdm9pZCAwPT09dGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkXCIpO3RoaXMuX3ZpZXcuYnVmZmVyLGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKTtpZihcImNsb3NlZFwiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbS5fc3RhdGUpe2lmKDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJieXRlc1dyaXR0ZW4gbXVzdCBiZSAwIHdoZW4gY2FsbGluZyByZXNwb25kKCkgb24gYSBjbG9zZWQgc3RyZWFtXCIpfWVsc2V7aWYoMD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImJ5dGVzV3JpdHRlbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIHdoZW4gY2FsbGluZyByZXNwb25kKCkgb24gYSByZWFkYWJsZSBzdHJlYW1cIik7aWYoci5ieXRlc0ZpbGxlZCt0PnIuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJ5dGVzV3JpdHRlbiBvdXQgb2YgcmFuZ2VcIil9ci5idWZmZXI9ci5idWZmZXIscWUoZSx0KX0odGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsZSl9cmVzcG9uZFdpdGhOZXdWaWV3KGUpe2lmKCFmZSh0aGlzKSl0aHJvdyBCZShcInJlc3BvbmRXaXRoTmV3Vmlld1wiKTtpZigkKGUsMSxcInJlc3BvbmRXaXRoTmV3Vmlld1wiKSwhQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgY2FuIG9ubHkgcmVzcG9uZCB3aXRoIGFycmF5IGJ1ZmZlciB2aWV3c1wiKTtpZih2b2lkIDA9PT10aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhpcyBCWU9CIHJlcXVlc3QgaGFzIGJlZW4gaW52YWxpZGF0ZWRcIik7ZS5idWZmZXIsZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuX3BlbmRpbmdQdWxsSW50b3MucGVlaygpO2lmKFwiY2xvc2VkXCI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZSl7aWYoMCE9PXQuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHZpZXcncyBsZW5ndGggbXVzdCBiZSAwIHdoZW4gY2FsbGluZyByZXNwb25kV2l0aE5ld1ZpZXcoKSBvbiBhIGNsb3NlZCBzdHJlYW1cIil9ZWxzZSBpZigwPT09dC5ieXRlTGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgdmlldydzIGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIHdoZW4gY2FsbGluZyByZXNwb25kV2l0aE5ld1ZpZXcoKSBvbiBhIHJlYWRhYmxlIHN0cmVhbVwiKTtpZihyLmJ5dGVPZmZzZXQrci5ieXRlc0ZpbGxlZCE9PXQuYnl0ZU9mZnNldCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3RcIik7aWYoci5idWZmZXJCeXRlTGVuZ3RoIT09dC5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3RcIik7aWYoci5ieXRlc0ZpbGxlZCt0LmJ5dGVMZW5ndGg+ci5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHJlZ2lvbiBzcGVjaWZpZWQgYnkgdmlldyBpcyBsYXJnZXIgdGhhbiBieW9iUmVxdWVzdFwiKTtjb25zdCBvPXQuYnl0ZUxlbmd0aDtyLmJ1ZmZlcj10LmJ1ZmZlcixxZShlLG8pfSh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcixlKX19T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5wcm90b3R5cGUse3Jlc3BvbmQ6e2VudW1lcmFibGU6ITB9LHJlc3BvbmRXaXRoTmV3Vmlldzp7ZW51bWVyYWJsZTohMH0sdmlldzp7ZW51bWVyYWJsZTohMH19KSxuKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLnJlc3BvbmQsXCJyZXNwb25kXCIpLG4oUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5wcm90b3R5cGUucmVzcG9uZFdpdGhOZXdWaWV3LFwicmVzcG9uZFdpdGhOZXdWaWV3XCIpLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0XCIsY29uZmlndXJhYmxlOiEwfSk7Y2xhc3MgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcntjb25zdHJ1Y3Rvcigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpfWdldCBieW9iUmVxdWVzdCgpe2lmKCFkZSh0aGlzKSl0aHJvdyBBZShcImJ5b2JSZXF1ZXN0XCIpO3JldHVybiBmdW5jdGlvbihlKXtpZihudWxsPT09ZS5fYnlvYlJlcXVlc3QmJmUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApe2NvbnN0IHQ9ZS5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCkscj1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrdC5ieXRlc0ZpbGxlZCx0LmJ5dGVMZW5ndGgtdC5ieXRlc0ZpbGxlZCksbz1PYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlKTshZnVuY3Rpb24oZSx0LHIpe2UuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyPXQsZS5fdmlldz1yfShvLGUsciksZS5fYnlvYlJlcXVlc3Q9b31yZXR1cm4gZS5fYnlvYlJlcXVlc3R9KHRoaXMpfWdldCBkZXNpcmVkU2l6ZSgpe2lmKCFkZSh0aGlzKSl0aHJvdyBBZShcImRlc2lyZWRTaXplXCIpO3JldHVybiBrZSh0aGlzKX1jbG9zZSgpe2lmKCFkZSh0aGlzKSl0aHJvdyBBZShcImNsb3NlXCIpO2lmKHRoaXMuX2Nsb3NlUmVxdWVzdGVkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkOyBkbyBub3QgY2xvc2UgaXQgYWdhaW4hXCIpO2NvbnN0IGU9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbS5fc3RhdGU7aWYoXCJyZWFkYWJsZVwiIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgc3RyZWFtIChpbiAke2V9IHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgY2xvc2VkYCk7IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtpZihlLl9jbG9zZVJlcXVlc3RlZHx8XCJyZWFkYWJsZVwiIT09dC5fc3RhdGUpcmV0dXJuO2lmKGUuX3F1ZXVlVG90YWxTaXplPjApcmV0dXJuIHZvaWQoZS5fY2xvc2VSZXF1ZXN0ZWQ9ITApO2lmKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApe2lmKGUuX3BlbmRpbmdQdWxsSW50b3MucGVlaygpLmJ5dGVzRmlsbGVkPjApe2NvbnN0IHQ9bmV3IFR5cGVFcnJvcihcIkluc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXJcIik7dGhyb3cgUGUoZSx0KSx0fX1FZShlKSxYdCh0KX0odGhpcyl9ZW5xdWV1ZShlKXtpZighZGUodGhpcykpdGhyb3cgQWUoXCJlbnF1ZXVlXCIpO2lmKCQoZSwxLFwiZW5xdWV1ZVwiKSwhQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJjaHVuayBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3XCIpO2lmKDA9PT1lLmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNodW5rIG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoXCIpO2lmKDA9PT1lLmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJjaHVuaydzIGJ1ZmZlciBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aFwiKTtpZih0aGlzLl9jbG9zZVJlcXVlc3RlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwic3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZ1wiKTtjb25zdCB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0uX3N0YXRlO2lmKFwicmVhZGFibGVcIiE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIHN0cmVhbSAoaW4gJHt0fSBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGVucXVldWVkIHRvYCk7IWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtO2lmKGUuX2Nsb3NlUmVxdWVzdGVkfHxcInJlYWRhYmxlXCIhPT1yLl9zdGF0ZSlyZXR1cm47Y29uc3Qgbz10LmJ1ZmZlcixuPXQuYnl0ZU9mZnNldCxhPXQuYnl0ZUxlbmd0aCxpPW87aWYoZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCl7Y29uc3QgdD1lLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKTt0LmJ1ZmZlciwwLFJlKGUpLHQuYnVmZmVyPXQuYnVmZmVyLFwibm9uZVwiPT09dC5yZWFkZXJUeXBlJiZnZShlLHQpfWlmKEoocikpaWYoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9yZWFkZXI7Zm9yKDt0Ll9yZWFkUmVxdWVzdHMubGVuZ3RoPjA7KXtpZigwPT09ZS5fcXVldWVUb3RhbFNpemUpcmV0dXJuO1dlKGUsdC5fcmVhZFJlcXVlc3RzLnNoaWZ0KCkpfX0oZSksMD09PVgocikpbWUoZSxpLG4sYSk7ZWxzZXtlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiZDZShlKTtHKHIsbmV3IFVpbnQ4QXJyYXkoaSxuLGEpLCExKX1lbHNlIExlKHIpPyhtZShlLGksbixhKSxUZShlKSk6bWUoZSxpLG4sYSk7YmUoZSl9KHRoaXMsZSl9ZXJyb3IoZSl7aWYoIWRlKHRoaXMpKXRocm93IEFlKFwiZXJyb3JcIik7UGUodGhpcyxlKX1bVF0oZSl7aGUodGhpcyksY2UodGhpcyk7Y29uc3QgdD10aGlzLl9jYW5jZWxBbGdvcml0aG0oZSk7cmV0dXJuIEVlKHRoaXMpLHR9W3FdKGUpe2NvbnN0IHQ9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtpZih0aGlzLl9xdWV1ZVRvdGFsU2l6ZT4wKXJldHVybiB2b2lkIFdlKHRoaXMsZSk7Y29uc3Qgcj10aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7aWYodm9pZCAwIT09cil7bGV0IHQ7dHJ5e3Q9bmV3IEFycmF5QnVmZmVyKHIpfWNhdGNoKHQpe3JldHVybiB2b2lkIGUuX2Vycm9yU3RlcHModCl9Y29uc3Qgbz17YnVmZmVyOnQsYnVmZmVyQnl0ZUxlbmd0aDpyLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOnIsYnl0ZXNGaWxsZWQ6MCxlbGVtZW50U2l6ZToxLHZpZXdDb25zdHJ1Y3RvcjpVaW50OEFycmF5LHJlYWRlclR5cGU6XCJkZWZhdWx0XCJ9O3RoaXMuX3BlbmRpbmdQdWxsSW50b3MucHVzaChvKX1VKHQsZSksYmUodGhpcyl9W0NdKCl7aWYodGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKTtlLnJlYWRlclR5cGU9XCJub25lXCIsdGhpcy5fcGVuZGluZ1B1bGxJbnRvcz1uZXcgUyx0aGlzLl9wZW5kaW5nUHVsbEludG9zLnB1c2goZSl9fX1mdW5jdGlvbiBkZShlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW1cIikmJmUgaW5zdGFuY2VvZiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKX1mdW5jdGlvbiBmZShlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyXCIpJiZlIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCl9ZnVuY3Rpb24gYmUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07aWYoXCJyZWFkYWJsZVwiIT09dC5fc3RhdGUpcmV0dXJuITE7aWYoZS5fY2xvc2VSZXF1ZXN0ZWQpcmV0dXJuITE7aWYoIWUuX3N0YXJ0ZWQpcmV0dXJuITE7aWYoSih0KSYmWCh0KT4wKXJldHVybiEwO2lmKExlKHQpJiZ6ZSh0KT4wKXJldHVybiEwO2lmKGtlKGUpPjApcmV0dXJuITA7cmV0dXJuITF9KGUpO2lmKCF0KXJldHVybjtpZihlLl9wdWxsaW5nKXJldHVybiB2b2lkKGUuX3B1bGxBZ2Fpbj0hMCk7ZS5fcHVsbGluZz0hMDtiKGUuX3B1bGxBbGdvcml0aG0oKSwoKCk9PihlLl9wdWxsaW5nPSExLGUuX3B1bGxBZ2FpbiYmKGUuX3B1bGxBZ2Fpbj0hMSxiZShlKSksbnVsbCkpLCh0PT4oUGUoZSx0KSxudWxsKSkpfWZ1bmN0aW9uIGhlKGUpe1JlKGUpLGUuX3BlbmRpbmdQdWxsSW50b3M9bmV3IFN9ZnVuY3Rpb24gX2UoZSx0KXtsZXQgcj0hMTtcImNsb3NlZFwiPT09ZS5fc3RhdGUmJihyPSEwKTtjb25zdCBvPXBlKHQpO1wiZGVmYXVsdFwiPT09dC5yZWFkZXJUeXBlP0coZSxvLHIpOmZ1bmN0aW9uKGUsdCxyKXtjb25zdCBvPWUuX3JlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5zaGlmdCgpO3I/by5fY2xvc2VTdGVwcyh0KTpvLl9jaHVua1N0ZXBzKHQpfShlLG8scil9ZnVuY3Rpb24gcGUoZSl7Y29uc3QgdD1lLmJ5dGVzRmlsbGVkLHI9ZS5lbGVtZW50U2l6ZTtyZXR1cm4gbmV3IGUudmlld0NvbnN0cnVjdG9yKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCx0L3IpfWZ1bmN0aW9uIG1lKGUsdCxyLG8pe2UuX3F1ZXVlLnB1c2goe2J1ZmZlcjp0LGJ5dGVPZmZzZXQ6cixieXRlTGVuZ3RoOm99KSxlLl9xdWV1ZVRvdGFsU2l6ZSs9b31mdW5jdGlvbiB5ZShlLHQscixvKXtsZXQgbjt0cnl7bj10LnNsaWNlKHIscitvKX1jYXRjaCh0KXt0aHJvdyBQZShlLHQpLHR9bWUoZSxuLDAsbyl9ZnVuY3Rpb24gZ2UoZSx0KXt0LmJ5dGVzRmlsbGVkPjAmJnllKGUsdC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZXNGaWxsZWQpLENlKGUpfWZ1bmN0aW9uIHdlKGUsdCl7Y29uc3Qgcj10LmVsZW1lbnRTaXplLG89dC5ieXRlc0ZpbGxlZC10LmJ5dGVzRmlsbGVkJXIsbj1NYXRoLm1pbihlLl9xdWV1ZVRvdGFsU2l6ZSx0LmJ5dGVMZW5ndGgtdC5ieXRlc0ZpbGxlZCksYT10LmJ5dGVzRmlsbGVkK24saT1hLWElcjtsZXQgbD1uLHM9ITE7aT5vJiYobD1pLXQuYnl0ZXNGaWxsZWQscz0hMCk7Y29uc3QgdT1lLl9xdWV1ZTtmb3IoO2w+MDspe2NvbnN0IHI9dS5wZWVrKCksbz1NYXRoLm1pbihsLHIuYnl0ZUxlbmd0aCksbj10LmJ5dGVPZmZzZXQrdC5ieXRlc0ZpbGxlZDtpZSh0LmJ1ZmZlcixuLHIuYnVmZmVyLHIuYnl0ZU9mZnNldCxvKSxyLmJ5dGVMZW5ndGg9PT1vP3Uuc2hpZnQoKTooci5ieXRlT2Zmc2V0Kz1vLHIuYnl0ZUxlbmd0aC09byksZS5fcXVldWVUb3RhbFNpemUtPW8sU2UoZSxvLHQpLGwtPW99cmV0dXJuIHN9ZnVuY3Rpb24gU2UoZSx0LHIpe3IuYnl0ZXNGaWxsZWQrPXR9ZnVuY3Rpb24gdmUoZSl7MD09PWUuX3F1ZXVlVG90YWxTaXplJiZlLl9jbG9zZVJlcXVlc3RlZD8oRWUoZSksWHQoZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbSkpOmJlKGUpfWZ1bmN0aW9uIFJlKGUpe251bGwhPT1lLl9ieW9iUmVxdWVzdCYmKGUuX2J5b2JSZXF1ZXN0Ll9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcj12b2lkIDAsZS5fYnlvYlJlcXVlc3QuX3ZpZXc9bnVsbCxlLl9ieW9iUmVxdWVzdD1udWxsKX1mdW5jdGlvbiBUZShlKXtmb3IoO2UuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjA7KXtpZigwPT09ZS5fcXVldWVUb3RhbFNpemUpcmV0dXJuO2NvbnN0IHQ9ZS5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7d2UoZSx0KSYmKENlKGUpLF9lKGUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0sdCkpfX1mdW5jdGlvbiBxZShlLHQpe2NvbnN0IHI9ZS5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7UmUoZSk7XCJjbG9zZWRcIj09PWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0uX3N0YXRlP2Z1bmN0aW9uKGUsdCl7XCJub25lXCI9PT10LnJlYWRlclR5cGUmJkNlKGUpO2NvbnN0IHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtpZihMZShyKSlmb3IoO3plKHIpPjA7KV9lKHIsQ2UoZSkpfShlLHIpOmZ1bmN0aW9uKGUsdCxyKXtpZihTZSgwLHQsciksXCJub25lXCI9PT1yLnJlYWRlclR5cGUpcmV0dXJuIGdlKGUsciksdm9pZCBUZShlKTtpZihyLmJ5dGVzRmlsbGVkPHIuZWxlbWVudFNpemUpcmV0dXJuO0NlKGUpO2NvbnN0IG89ci5ieXRlc0ZpbGxlZCVyLmVsZW1lbnRTaXplO2lmKG8+MCl7Y29uc3QgdD1yLmJ5dGVPZmZzZXQrci5ieXRlc0ZpbGxlZDt5ZShlLHIuYnVmZmVyLHQtbyxvKX1yLmJ5dGVzRmlsbGVkLT1vLF9lKGUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0sciksVGUoZSl9KGUsdCxyKSxiZShlKX1mdW5jdGlvbiBDZShlKXtyZXR1cm4gZS5fcGVuZGluZ1B1bGxJbnRvcy5zaGlmdCgpfWZ1bmN0aW9uIEVlKGUpe2UuX3B1bGxBbGdvcml0aG09dm9pZCAwLGUuX2NhbmNlbEFsZ29yaXRobT12b2lkIDB9ZnVuY3Rpb24gUGUoZSx0KXtjb25zdCByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07XCJyZWFkYWJsZVwiPT09ci5fc3RhdGUmJihoZShlKSxjZShlKSxFZShlKSxKdChyLHQpKX1mdW5jdGlvbiBXZShlLHQpe2NvbnN0IHI9ZS5fcXVldWUuc2hpZnQoKTtlLl9xdWV1ZVRvdGFsU2l6ZS09ci5ieXRlTGVuZ3RoLHZlKGUpO2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkoci5idWZmZXIsci5ieXRlT2Zmc2V0LHIuYnl0ZUxlbmd0aCk7dC5fY2h1bmtTdGVwcyhvKX1mdW5jdGlvbiBrZShlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0uX3N0YXRlO3JldHVyblwiZXJyb3JlZFwiPT09dD9udWxsOlwiY2xvc2VkXCI9PT10PzA6ZS5fc3RyYXRlZ3lIV00tZS5fcXVldWVUb3RhbFNpemV9ZnVuY3Rpb24gT2UoZSx0LHIpe2NvbnN0IG89T2JqZWN0LmNyZWF0ZShSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLnByb3RvdHlwZSk7bGV0IG4sYSxpO249dm9pZCAwIT09dC5zdGFydD8oKT0+dC5zdGFydChvKTooKT0+e30sYT12b2lkIDAhPT10LnB1bGw/KCk9PnQucHVsbChvKTooKT0+Yyh2b2lkIDApLGk9dm9pZCAwIT09dC5jYW5jZWw/ZT0+dC5jYW5jZWwoZSk6KCk9PmModm9pZCAwKTtjb25zdCBsPXQuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO2lmKDA9PT1sKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdXRvQWxsb2NhdGVDaHVua1NpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTshZnVuY3Rpb24oZSx0LHIsbyxuLGEsaSl7dC5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbT1lLHQuX3B1bGxBZ2Fpbj0hMSx0Ll9wdWxsaW5nPSExLHQuX2J5b2JSZXF1ZXN0PW51bGwsdC5fcXVldWU9dC5fcXVldWVUb3RhbFNpemU9dm9pZCAwLGNlKHQpLHQuX2Nsb3NlUmVxdWVzdGVkPSExLHQuX3N0YXJ0ZWQ9ITEsdC5fc3RyYXRlZ3lIV009YSx0Ll9wdWxsQWxnb3JpdGhtPW8sdC5fY2FuY2VsQWxnb3JpdGhtPW4sdC5fYXV0b0FsbG9jYXRlQ2h1bmtTaXplPWksdC5fcGVuZGluZ1B1bGxJbnRvcz1uZXcgUyxlLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9dCxiKGMocigpKSwoKCk9Pih0Ll9zdGFydGVkPSEwLGJlKHQpLG51bGwpKSwoZT0+KFBlKHQsZSksbnVsbCkpKX0oZSxvLG4sYSxpLHIsbCl9ZnVuY3Rpb24gQmUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3RgKX1mdW5jdGlvbiBBZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcmApfWZ1bmN0aW9uIGplKGUsdCl7ZS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLnB1c2godCl9ZnVuY3Rpb24gemUoZSl7cmV0dXJuIGUuX3JlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGh9ZnVuY3Rpb24gTGUoZSl7Y29uc3QgdD1lLl9yZWFkZXI7cmV0dXJuIHZvaWQgMCE9PXQmJiEhRmUodCl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUse2Nsb3NlOntlbnVtZXJhYmxlOiEwfSxlbnF1ZXVlOntlbnVtZXJhYmxlOiEwfSxlcnJvcjp7ZW51bWVyYWJsZTohMH0sYnlvYlJlcXVlc3Q6e2VudW1lcmFibGU6ITB9LGRlc2lyZWRTaXplOntlbnVtZXJhYmxlOiEwfX0pLG4oUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuY2xvc2UsXCJjbG9zZVwiKSxuKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLmVucXVldWUsXCJlbnF1ZXVlXCIpLG4oUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuZXJyb3IsXCJlcnJvclwiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclwiLGNvbmZpZ3VyYWJsZTohMH0pO2NsYXNzIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcntjb25zdHJ1Y3RvcihlKXtpZigkKGUsMSxcIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlclwiKSxWKGUsXCJGaXJzdCBwYXJhbWV0ZXJcIiksVXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlclwiKTtpZighZGUoZS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlIHNvdXJjZVwiKTtFKHRoaXMsZSksdGhpcy5fcmVhZEludG9SZXF1ZXN0cz1uZXcgU31nZXQgY2xvc2VkKCl7cmV0dXJuIEZlKHRoaXMpP3RoaXMuX2Nsb3NlZFByb21pc2U6ZChEZShcImNsb3NlZFwiKSl9Y2FuY2VsKGUpe3JldHVybiBGZSh0aGlzKT92b2lkIDA9PT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtP2QoayhcImNhbmNlbFwiKSk6UCh0aGlzLGUpOmQoRGUoXCJjYW5jZWxcIikpfXJlYWQoZSl7aWYoIUZlKHRoaXMpKXJldHVybiBkKERlKFwicmVhZFwiKSk7aWYoIUFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gZChuZXcgVHlwZUVycm9yKFwidmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3XCIpKTtpZigwPT09ZS5ieXRlTGVuZ3RoKXJldHVybiBkKG5ldyBUeXBlRXJyb3IoXCJ2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoXCIpKTtpZigwPT09ZS5idWZmZXIuYnl0ZUxlbmd0aClyZXR1cm4gZChuZXcgVHlwZUVycm9yKFwidmlldydzIGJ1ZmZlciBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aFwiKSk7aWYoZS5idWZmZXIsdm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSlyZXR1cm4gZChrKFwicmVhZCBmcm9tXCIpKTtsZXQgdCxyO2NvbnN0IG89dSgoKGUsbyk9Pnt0PWUscj1vfSkpO3JldHVybiBmdW5jdGlvbihlLHQscil7Y29uc3Qgbz1lLl9vd25lclJlYWRhYmxlU3RyZWFtO28uX2Rpc3R1cmJlZD0hMCxcImVycm9yZWRcIj09PW8uX3N0YXRlP3IuX2Vycm9yU3RlcHMoby5fc3RvcmVkRXJyb3IpOmZ1bmN0aW9uKGUsdCxyKXtjb25zdCBvPWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07bGV0IG49MTt0LmNvbnN0cnVjdG9yIT09RGF0YVZpZXcmJihuPXQuY29uc3RydWN0b3IuQllURVNfUEVSX0VMRU1FTlQpO2NvbnN0IGE9dC5jb25zdHJ1Y3RvcixpPXQuYnVmZmVyLGw9e2J1ZmZlcjppLGJ1ZmZlckJ5dGVMZW5ndGg6aS5ieXRlTGVuZ3RoLGJ5dGVPZmZzZXQ6dC5ieXRlT2Zmc2V0LGJ5dGVMZW5ndGg6dC5ieXRlTGVuZ3RoLGJ5dGVzRmlsbGVkOjAsZWxlbWVudFNpemU6bix2aWV3Q29uc3RydWN0b3I6YSxyZWFkZXJUeXBlOlwiYnlvYlwifTtpZihlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wKXJldHVybiBlLl9wZW5kaW5nUHVsbEludG9zLnB1c2gobCksdm9pZCBqZShvLHIpO2lmKFwiY2xvc2VkXCIhPT1vLl9zdGF0ZSl7aWYoZS5fcXVldWVUb3RhbFNpemU+MCl7aWYod2UoZSxsKSl7Y29uc3QgdD1wZShsKTtyZXR1cm4gdmUoZSksdm9pZCByLl9jaHVua1N0ZXBzKHQpfWlmKGUuX2Nsb3NlUmVxdWVzdGVkKXtjb25zdCB0PW5ldyBUeXBlRXJyb3IoXCJJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyXCIpO3JldHVybiBQZShlLHQpLHZvaWQgci5fZXJyb3JTdGVwcyh0KX19ZS5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGwpLGplKG8sciksYmUoZSl9ZWxzZXtjb25zdCBlPW5ldyBhKGwuYnVmZmVyLGwuYnl0ZU9mZnNldCwwKTtyLl9jbG9zZVN0ZXBzKGUpfX0oby5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLHQscil9KHRoaXMsZSx7X2NodW5rU3RlcHM6ZT0+dCh7dmFsdWU6ZSxkb25lOiExfSksX2Nsb3NlU3RlcHM6ZT0+dCh7dmFsdWU6ZSxkb25lOiEwfSksX2Vycm9yU3RlcHM6ZT0+cihlKX0pLG99cmVsZWFzZUxvY2soKXtpZighRmUodGhpcykpdGhyb3cgRGUoXCJyZWxlYXNlTG9ja1wiKTt2b2lkIDAhPT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtJiZmdW5jdGlvbihlKXtXKGUpO2NvbnN0IHQ9bmV3IFR5cGVFcnJvcihcIlJlYWRlciB3YXMgcmVsZWFzZWRcIik7SWUoZSx0KX0odGhpcyl9fWZ1bmN0aW9uIEZlKGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfcmVhZEludG9SZXF1ZXN0c1wiKSYmZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcil9ZnVuY3Rpb24gSWUoZSx0KXtjb25zdCByPWUuX3JlYWRJbnRvUmVxdWVzdHM7ZS5fcmVhZEludG9SZXF1ZXN0cz1uZXcgUyxyLmZvckVhY2goKGU9PntlLl9lcnJvclN0ZXBzKHQpfSkpfWZ1bmN0aW9uIERlKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcmApfWZ1bmN0aW9uICRlKGUsdCl7Y29uc3R7aGlnaFdhdGVyTWFyazpyfT1lO2lmKHZvaWQgMD09PXIpcmV0dXJuIHQ7aWYoYWUocil8fHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgaGlnaFdhdGVyTWFya1wiKTtyZXR1cm4gcn1mdW5jdGlvbiBNZShlKXtjb25zdHtzaXplOnR9PWU7cmV0dXJuIHR8fCgoKT0+MSl9ZnVuY3Rpb24gWWUoZSx0KXtGKGUsdCk7Y29uc3Qgcj1udWxsPT1lP3ZvaWQgMDplLmhpZ2hXYXRlck1hcmssbz1udWxsPT1lP3ZvaWQgMDplLnNpemU7cmV0dXJue2hpZ2hXYXRlck1hcms6dm9pZCAwPT09cj92b2lkIDA6WShyKSxzaXplOnZvaWQgMD09PW8/dm9pZCAwOlFlKG8sYCR7dH0gaGFzIG1lbWJlciAnc2l6ZScgdGhhdGApfX1mdW5jdGlvbiBRZShlLHQpe3JldHVybiBJKGUsdCksdD0+WShlKHQpKX1mdW5jdGlvbiBOZShlLHQscil7cmV0dXJuIEkoZSxyKSxyPT53KGUsdCxbcl0pfWZ1bmN0aW9uIEhlKGUsdCxyKXtyZXR1cm4gSShlLHIpLCgpPT53KGUsdCxbXSl9ZnVuY3Rpb24geGUoZSx0LHIpe3JldHVybiBJKGUscikscj0+ZyhlLHQsW3JdKX1mdW5jdGlvbiBWZShlLHQscil7cmV0dXJuIEkoZSxyKSwocixvKT0+dyhlLHQsW3Isb10pfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5wcm90b3R5cGUse2NhbmNlbDp7ZW51bWVyYWJsZTohMH0scmVhZDp7ZW51bWVyYWJsZTohMH0scmVsZWFzZUxvY2s6e2VudW1lcmFibGU6ITB9LGNsb3NlZDp7ZW51bWVyYWJsZTohMH19KSxuKFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5wcm90b3R5cGUuY2FuY2VsLFwiY2FuY2VsXCIpLG4oUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS5yZWFkLFwicmVhZFwiKSxuKFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5wcm90b3R5cGUucmVsZWFzZUxvY2ssXCJyZWxlYXNlTG9ja1wiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXJcIixjb25maWd1cmFibGU6ITB9KTtjb25zdCBVZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBBYm9ydENvbnRyb2xsZXI7Y2xhc3MgV3JpdGFibGVTdHJlYW17Y29uc3RydWN0b3IoZT17fSx0PXt9KXt2b2lkIDA9PT1lP2U9bnVsbDpEKGUsXCJGaXJzdCBwYXJhbWV0ZXJcIik7Y29uc3Qgcj1ZZSh0LFwiU2Vjb25kIHBhcmFtZXRlclwiKSxvPWZ1bmN0aW9uKGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5hYm9ydCxvPW51bGw9PWU/dm9pZCAwOmUuY2xvc2Usbj1udWxsPT1lP3ZvaWQgMDplLnN0YXJ0LGE9bnVsbD09ZT92b2lkIDA6ZS50eXBlLGk9bnVsbD09ZT92b2lkIDA6ZS53cml0ZTtyZXR1cm57YWJvcnQ6dm9pZCAwPT09cj92b2lkIDA6TmUocixlLGAke3R9IGhhcyBtZW1iZXIgJ2Fib3J0JyB0aGF0YCksY2xvc2U6dm9pZCAwPT09bz92b2lkIDA6SGUobyxlLGAke3R9IGhhcyBtZW1iZXIgJ2Nsb3NlJyB0aGF0YCksc3RhcnQ6dm9pZCAwPT09bj92b2lkIDA6eGUobixlLGAke3R9IGhhcyBtZW1iZXIgJ3N0YXJ0JyB0aGF0YCksd3JpdGU6dm9pZCAwPT09aT92b2lkIDA6VmUoaSxlLGAke3R9IGhhcyBtZW1iZXIgJ3dyaXRlJyB0aGF0YCksdHlwZTphfX0oZSxcIkZpcnN0IHBhcmFtZXRlclwiKTt2YXIgbjsobj10aGlzKS5fc3RhdGU9XCJ3cml0YWJsZVwiLG4uX3N0b3JlZEVycm9yPXZvaWQgMCxuLl93cml0ZXI9dm9pZCAwLG4uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcj12b2lkIDAsbi5fd3JpdGVSZXF1ZXN0cz1uZXcgUyxuLl9pbkZsaWdodFdyaXRlUmVxdWVzdD12b2lkIDAsbi5fY2xvc2VSZXF1ZXN0PXZvaWQgMCxuLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDAsbi5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDAsbi5fYmFja3ByZXNzdXJlPSExO2lmKHZvaWQgMCE9PW8udHlwZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWRcIik7Y29uc3QgYT1NZShyKTshZnVuY3Rpb24oZSx0LHIsbyl7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlKTtsZXQgYSxpLGwsczthPXZvaWQgMCE9PXQuc3RhcnQ/KCk9PnQuc3RhcnQobik6KCk9Pnt9O2k9dm9pZCAwIT09dC53cml0ZT9lPT50LndyaXRlKGUsbik6KCk9PmModm9pZCAwKTtsPXZvaWQgMCE9PXQuY2xvc2U/KCk9PnQuY2xvc2UoKTooKT0+Yyh2b2lkIDApO3M9dm9pZCAwIT09dC5hYm9ydD9lPT50LmFib3J0KGUpOigpPT5jKHZvaWQgMCk7IWZ1bmN0aW9uKGUsdCxyLG8sbixhLGksbCl7dC5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtPWUsZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyPXQsdC5fcXVldWU9dm9pZCAwLHQuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCxjZSh0KSx0Ll9hYm9ydFJlYXNvbj12b2lkIDAsdC5fYWJvcnRDb250cm9sbGVyPWZ1bmN0aW9uKCl7aWYoVWUpcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXJ9KCksdC5fc3RhcnRlZD0hMSx0Ll9zdHJhdGVneVNpemVBbGdvcml0aG09bCx0Ll9zdHJhdGVneUhXTT1pLHQuX3dyaXRlQWxnb3JpdGhtPW8sdC5fY2xvc2VBbGdvcml0aG09bix0Ll9hYm9ydEFsZ29yaXRobT1hO2NvbnN0IHM9YnQodCk7bnQoZSxzKTtjb25zdCB1PXIoKTtiKGModSksKCgpPT4odC5fc3RhcnRlZD0hMCxkdCh0KSxudWxsKSksKHI9Pih0Ll9zdGFydGVkPSEwLFplKGUsciksbnVsbCkpKX0oZSxuLGEsaSxsLHMscixvKX0odGhpcyxvLCRlKHIsMSksYSl9Z2V0IGxvY2tlZCgpe2lmKCFHZSh0aGlzKSl0aHJvdyBfdChcImxvY2tlZFwiKTtyZXR1cm4gWGUodGhpcyl9YWJvcnQoZSl7cmV0dXJuIEdlKHRoaXMpP1hlKHRoaXMpP2QobmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhYm9ydCBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgd3JpdGVyXCIpKTpKZSh0aGlzLGUpOmQoX3QoXCJhYm9ydFwiKSl9Y2xvc2UoKXtyZXR1cm4gR2UodGhpcyk/WGUodGhpcyk/ZChuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNsb3NlIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSB3cml0ZXJcIikpOnJ0KHRoaXMpP2QobmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjbG9zZSBhbiBhbHJlYWR5LWNsb3Npbmcgc3RyZWFtXCIpKTpLZSh0aGlzKTpkKF90KFwiY2xvc2VcIikpfWdldFdyaXRlcigpe2lmKCFHZSh0aGlzKSl0aHJvdyBfdChcImdldFdyaXRlclwiKTtyZXR1cm4gbmV3IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKX19ZnVuY3Rpb24gR2UoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXJcIikmJmUgaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbSl9ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIHZvaWQgMCE9PWUuX3dyaXRlcn1mdW5jdGlvbiBKZShlLHQpe3ZhciByO2lmKFwiY2xvc2VkXCI9PT1lLl9zdGF0ZXx8XCJlcnJvcmVkXCI9PT1lLl9zdGF0ZSlyZXR1cm4gYyh2b2lkIDApO2UuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fYWJvcnRSZWFzb249dCxudWxsPT09KHI9ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9hYm9ydENvbnRyb2xsZXIpfHx2b2lkIDA9PT1yfHxyLmFib3J0KHQpO2NvbnN0IG89ZS5fc3RhdGU7aWYoXCJjbG9zZWRcIj09PW98fFwiZXJyb3JlZFwiPT09bylyZXR1cm4gYyh2b2lkIDApO2lmKHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QpcmV0dXJuIGUuX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3Byb21pc2U7bGV0IG49ITE7XCJlcnJvcmluZ1wiPT09byYmKG49ITAsdD12b2lkIDApO2NvbnN0IGE9dSgoKHIsbyk9PntlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXtfcHJvbWlzZTp2b2lkIDAsX3Jlc29sdmU6cixfcmVqZWN0Om8sX3JlYXNvbjp0LF93YXNBbHJlYWR5RXJyb3Jpbmc6bn19KSk7cmV0dXJuIGUuX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3Byb21pc2U9YSxufHxldChlLHQpLGF9ZnVuY3Rpb24gS2UoZSl7Y29uc3QgdD1lLl9zdGF0ZTtpZihcImNsb3NlZFwiPT09dHx8XCJlcnJvcmVkXCI9PT10KXJldHVybiBkKG5ldyBUeXBlRXJyb3IoYFRoZSBzdHJlYW0gKGluICR7dH0gc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWRgKSk7Y29uc3Qgcj11KCgodCxyKT0+e2NvbnN0IG89e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9jbG9zZVJlcXVlc3Q9b30pKSxvPWUuX3dyaXRlcjt2YXIgbjtyZXR1cm4gdm9pZCAwIT09byYmZS5fYmFja3ByZXNzdXJlJiZcIndyaXRhYmxlXCI9PT10JiZFdChvKSx1ZShuPWUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcixsdCwwKSxkdChuKSxyfWZ1bmN0aW9uIFplKGUsdCl7XCJ3cml0YWJsZVwiIT09ZS5fc3RhdGU/dHQoZSk6ZXQoZSx0KX1mdW5jdGlvbiBldChlLHQpe2NvbnN0IHI9ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO2UuX3N0YXRlPVwiZXJyb3JpbmdcIixlLl9zdG9yZWRFcnJvcj10O2NvbnN0IG89ZS5fd3JpdGVyO3ZvaWQgMCE9PW8mJml0KG8sdCksIWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0JiZ2b2lkIDA9PT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdClyZXR1cm4hMTtyZXR1cm4hMH0oZSkmJnIuX3N0YXJ0ZWQmJnR0KGUpfWZ1bmN0aW9uIHR0KGUpe2UuX3N0YXRlPVwiZXJyb3JlZFwiLGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcltSXSgpO2NvbnN0IHQ9ZS5fc3RvcmVkRXJyb3I7aWYoZS5fd3JpdGVSZXF1ZXN0cy5mb3JFYWNoKChlPT57ZS5fcmVqZWN0KHQpfSkpLGUuX3dyaXRlUmVxdWVzdHM9bmV3IFMsdm9pZCAwPT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdClyZXR1cm4gdm9pZCBvdChlKTtjb25zdCByPWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q7aWYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDAsci5fd2FzQWxyZWFkeUVycm9yaW5nKXJldHVybiByLl9yZWplY3QodCksdm9pZCBvdChlKTtiKGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlclt2XShyLl9yZWFzb24pLCgoKT0+KHIuX3Jlc29sdmUoKSxvdChlKSxudWxsKSksKHQ9PihyLl9yZWplY3QodCksb3QoZSksbnVsbCkpKX1mdW5jdGlvbiBydChlKXtyZXR1cm4gdm9pZCAwIT09ZS5fY2xvc2VSZXF1ZXN0fHx2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdH1mdW5jdGlvbiBvdChlKXt2b2lkIDAhPT1lLl9jbG9zZVJlcXVlc3QmJihlLl9jbG9zZVJlcXVlc3QuX3JlamVjdChlLl9zdG9yZWRFcnJvciksZS5fY2xvc2VSZXF1ZXN0PXZvaWQgMCk7Y29uc3QgdD1lLl93cml0ZXI7dm9pZCAwIT09dCYmU3QodCxlLl9zdG9yZWRFcnJvcil9ZnVuY3Rpb24gbnQoZSx0KXtjb25zdCByPWUuX3dyaXRlcjt2b2lkIDAhPT1yJiZ0IT09ZS5fYmFja3ByZXNzdXJlJiYodD9mdW5jdGlvbihlKXtSdChlKX0ocik6RXQocikpLGUuX2JhY2twcmVzc3VyZT10fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZSx7YWJvcnQ6e2VudW1lcmFibGU6ITB9LGNsb3NlOntlbnVtZXJhYmxlOiEwfSxnZXRXcml0ZXI6e2VudW1lcmFibGU6ITB9LGxvY2tlZDp7ZW51bWVyYWJsZTohMH19KSxuKFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5hYm9ydCxcImFib3J0XCIpLG4oV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmNsb3NlLFwiY2xvc2VcIiksbihXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZ2V0V3JpdGVyLFwiZ2V0V3JpdGVyXCIpLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiV3JpdGFibGVTdHJlYW1cIixjb25maWd1cmFibGU6ITB9KTtjbGFzcyBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJ7Y29uc3RydWN0b3IoZSl7aWYoJChlLDEsXCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJcIiksZnVuY3Rpb24oZSx0KXtpZighR2UoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSBpcyBub3QgYSBXcml0YWJsZVN0cmVhbS5gKX0oZSxcIkZpcnN0IHBhcmFtZXRlclwiKSxYZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSB3cml0aW5nIGJ5IGFub3RoZXIgd3JpdGVyXCIpO3RoaXMuX293bmVyV3JpdGFibGVTdHJlYW09ZSxlLl93cml0ZXI9dGhpcztjb25zdCB0PWUuX3N0YXRlO2lmKFwid3JpdGFibGVcIj09PXQpIXJ0KGUpJiZlLl9iYWNrcHJlc3N1cmU/UnQodGhpcyk6cXQodGhpcyksZ3QodGhpcyk7ZWxzZSBpZihcImVycm9yaW5nXCI9PT10KVR0KHRoaXMsZS5fc3RvcmVkRXJyb3IpLGd0KHRoaXMpO2Vsc2UgaWYoXCJjbG9zZWRcIj09PXQpcXQodGhpcyksZ3Qocj10aGlzKSx2dChyKTtlbHNle2NvbnN0IHQ9ZS5fc3RvcmVkRXJyb3I7VHQodGhpcyx0KSx3dCh0aGlzLHQpfXZhciByfWdldCBjbG9zZWQoKXtyZXR1cm4gYXQodGhpcyk/dGhpcy5fY2xvc2VkUHJvbWlzZTpkKG10KFwiY2xvc2VkXCIpKX1nZXQgZGVzaXJlZFNpemUoKXtpZighYXQodGhpcykpdGhyb3cgbXQoXCJkZXNpcmVkU2l6ZVwiKTtpZih2b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtKXRocm93IHl0KFwiZGVzaXJlZFNpemVcIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbSxyPXQuX3N0YXRlO2lmKFwiZXJyb3JlZFwiPT09cnx8XCJlcnJvcmluZ1wiPT09cilyZXR1cm4gbnVsbDtpZihcImNsb3NlZFwiPT09cilyZXR1cm4gMDtyZXR1cm4gY3QodC5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyKX0odGhpcyl9Z2V0IHJlYWR5KCl7cmV0dXJuIGF0KHRoaXMpP3RoaXMuX3JlYWR5UHJvbWlzZTpkKG10KFwicmVhZHlcIikpfWFib3J0KGUpe3JldHVybiBhdCh0aGlzKT92b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtP2QoeXQoXCJhYm9ydFwiKSk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUoZS5fb3duZXJXcml0YWJsZVN0cmVhbSx0KX0odGhpcyxlKTpkKG10KFwiYWJvcnRcIikpfWNsb3NlKCl7aWYoIWF0KHRoaXMpKXJldHVybiBkKG10KFwiY2xvc2VcIikpO2NvbnN0IGU9dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTtyZXR1cm4gdm9pZCAwPT09ZT9kKHl0KFwiY2xvc2VcIikpOnJ0KGUpP2QobmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjbG9zZSBhbiBhbHJlYWR5LWNsb3Npbmcgc3RyZWFtXCIpKTpLZSh0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtKX1yZWxlYXNlTG9jaygpe2lmKCFhdCh0aGlzKSl0aHJvdyBtdChcInJlbGVhc2VMb2NrXCIpO3ZvaWQgMCE9PXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0mJmZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbSxyPW5ldyBUeXBlRXJyb3IoXCJXcml0ZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzc1wiKTtpdChlLHIpLGZ1bmN0aW9uKGUsdCl7XCJwZW5kaW5nXCI9PT1lLl9jbG9zZWRQcm9taXNlU3RhdGU/U3QoZSx0KTpmdW5jdGlvbihlLHQpe3d0KGUsdCl9KGUsdCl9KGUsciksdC5fd3JpdGVyPXZvaWQgMCxlLl9vd25lcldyaXRhYmxlU3RyZWFtPXZvaWQgMH0odGhpcyl9d3JpdGUoZSl7cmV0dXJuIGF0KHRoaXMpP3ZvaWQgMD09PXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0/ZCh5dChcIndyaXRlIHRvXCIpKTpmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5fb3duZXJXcml0YWJsZVN0cmVhbSxvPXIuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcixuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlLl9zdHJhdGVneVNpemVBbGdvcml0aG0odCl9Y2F0Y2godCl7cmV0dXJuIGZ0KGUsdCksMX19KG8sdCk7aWYociE9PWUuX293bmVyV3JpdGFibGVTdHJlYW0pcmV0dXJuIGQoeXQoXCJ3cml0ZSB0b1wiKSk7Y29uc3QgYT1yLl9zdGF0ZTtpZihcImVycm9yZWRcIj09PWEpcmV0dXJuIGQoci5fc3RvcmVkRXJyb3IpO2lmKHJ0KHIpfHxcImNsb3NlZFwiPT09YSlyZXR1cm4gZChuZXcgVHlwZUVycm9yKFwiVGhlIHN0cmVhbSBpcyBjbG9zaW5nIG9yIGNsb3NlZCBhbmQgY2Fubm90IGJlIHdyaXR0ZW4gdG9cIikpO2lmKFwiZXJyb3JpbmdcIj09PWEpcmV0dXJuIGQoci5fc3RvcmVkRXJyb3IpO2NvbnN0IGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoKCh0LHIpPT57Y29uc3Qgbz17X3Jlc29sdmU6dCxfcmVqZWN0OnJ9O2UuX3dyaXRlUmVxdWVzdHMucHVzaChvKX0pKX0ocik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt0cnl7dWUoZSx0LHIpfWNhdGNoKHQpe3JldHVybiB2b2lkIGZ0KGUsdCl9Y29uc3Qgbz1lLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07aWYoIXJ0KG8pJiZcIndyaXRhYmxlXCI9PT1vLl9zdGF0ZSl7bnQobyxidChlKSl9ZHQoZSl9KG8sdCxuKSxpfSh0aGlzLGUpOmQobXQoXCJ3cml0ZVwiKSl9fWZ1bmN0aW9uIGF0KGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfb3duZXJXcml0YWJsZVN0cmVhbVwiKSYmZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcil9ZnVuY3Rpb24gaXQoZSx0KXtcInBlbmRpbmdcIj09PWUuX3JlYWR5UHJvbWlzZVN0YXRlP0N0KGUsdCk6ZnVuY3Rpb24oZSx0KXtUdChlLHQpfShlLHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUse2Fib3J0OntlbnVtZXJhYmxlOiEwfSxjbG9zZTp7ZW51bWVyYWJsZTohMH0scmVsZWFzZUxvY2s6e2VudW1lcmFibGU6ITB9LHdyaXRlOntlbnVtZXJhYmxlOiEwfSxjbG9zZWQ6e2VudW1lcmFibGU6ITB9LGRlc2lyZWRTaXplOntlbnVtZXJhYmxlOiEwfSxyZWFkeTp7ZW51bWVyYWJsZTohMH19KSxuKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuYWJvcnQsXCJhYm9ydFwiKSxuKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuY2xvc2UsXCJjbG9zZVwiKSxuKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUucmVsZWFzZUxvY2ssXCJyZWxlYXNlTG9ja1wiKSxuKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUud3JpdGUsXCJ3cml0ZVwiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJcIixjb25maWd1cmFibGU6ITB9KTtjb25zdCBsdD17fTtjbGFzcyBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVye2NvbnN0cnVjdG9yKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIil9Z2V0IGFib3J0UmVhc29uKCl7aWYoIXN0KHRoaXMpKXRocm93IHB0KFwiYWJvcnRSZWFzb25cIik7cmV0dXJuIHRoaXMuX2Fib3J0UmVhc29ufWdldCBzaWduYWwoKXtpZighc3QodGhpcykpdGhyb3cgcHQoXCJzaWduYWxcIik7aWYodm9pZCAwPT09dGhpcy5fYWJvcnRDb250cm9sbGVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5zaWduYWwgaXMgbm90IHN1cHBvcnRlZFwiKTtyZXR1cm4gdGhpcy5fYWJvcnRDb250cm9sbGVyLnNpZ25hbH1lcnJvcihlKXtpZighc3QodGhpcykpdGhyb3cgcHQoXCJlcnJvclwiKTtcIndyaXRhYmxlXCI9PT10aGlzLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlJiZodCh0aGlzLGUpfVt2XShlKXtjb25zdCB0PXRoaXMuX2Fib3J0QWxnb3JpdGhtKGUpO3JldHVybiB1dCh0aGlzKSx0fVtSXSgpe2NlKHRoaXMpfX1mdW5jdGlvbiBzdChlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbVwiKSYmZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpfWZ1bmN0aW9uIHV0KGUpe2UuX3dyaXRlQWxnb3JpdGhtPXZvaWQgMCxlLl9jbG9zZUFsZ29yaXRobT12b2lkIDAsZS5fYWJvcnRBbGdvcml0aG09dm9pZCAwLGUuX3N0cmF0ZWd5U2l6ZUFsZ29yaXRobT12b2lkIDB9ZnVuY3Rpb24gY3QoZSl7cmV0dXJuIGUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIGR0KGUpe2NvbnN0IHQ9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2lmKCFlLl9zdGFydGVkKXJldHVybjtpZih2b2lkIDAhPT10Ll9pbkZsaWdodFdyaXRlUmVxdWVzdClyZXR1cm47aWYoXCJlcnJvcmluZ1wiPT09dC5fc3RhdGUpcmV0dXJuIHZvaWQgdHQodCk7aWYoMD09PWUuX3F1ZXVlLmxlbmd0aClyZXR1cm47Y29uc3Qgcj1lLl9xdWV1ZS5wZWVrKCkudmFsdWU7cj09PWx0P2Z1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtlLl9pbkZsaWdodENsb3NlUmVxdWVzdD1lLl9jbG9zZVJlcXVlc3QsZS5fY2xvc2VSZXF1ZXN0PXZvaWQgMH0pKHQpLHNlKGUpO2NvbnN0IHI9ZS5fY2xvc2VBbGdvcml0aG0oKTt1dChlKSxiKHIsKCgpPT4oZnVuY3Rpb24oZSl7ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QuX3Jlc29sdmUodm9pZCAwKSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDAsXCJlcnJvcmluZ1wiPT09ZS5fc3RhdGUmJihlLl9zdG9yZWRFcnJvcj12b2lkIDAsdm9pZCAwIT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdCYmKGUuX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3Jlc29sdmUoKSxlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXZvaWQgMCkpLGUuX3N0YXRlPVwiY2xvc2VkXCI7Y29uc3QgdD1lLl93cml0ZXI7dm9pZCAwIT09dCYmdnQodCl9KHQpLG51bGwpKSwoZT0+KGZ1bmN0aW9uKGUsdCl7ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QuX3JlamVjdCh0KSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDAsdm9pZCAwIT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdCYmKGUuX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3JlamVjdCh0KSxlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXZvaWQgMCksWmUoZSx0KX0odCxlKSxudWxsKSkpfShlKTpmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyFmdW5jdGlvbihlKXtlLl9pbkZsaWdodFdyaXRlUmVxdWVzdD1lLl93cml0ZVJlcXVlc3RzLnNoaWZ0KCl9KHIpO2IoZS5fd3JpdGVBbGdvcml0aG0odCksKCgpPT57IWZ1bmN0aW9uKGUpe2UuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0Ll9yZXNvbHZlKHZvaWQgMCksZS5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9dm9pZCAwfShyKTtjb25zdCB0PXIuX3N0YXRlO2lmKHNlKGUpLCFydChyKSYmXCJ3cml0YWJsZVwiPT09dCl7Y29uc3QgdD1idChlKTtudChyLHQpfXJldHVybiBkdChlKSxudWxsfSksKHQ9PihcIndyaXRhYmxlXCI9PT1yLl9zdGF0ZSYmdXQoZSksZnVuY3Rpb24oZSx0KXtlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCxaZShlLHQpfShyLHQpLG51bGwpKSl9KGUscil9ZnVuY3Rpb24gZnQoZSx0KXtcIndyaXRhYmxlXCI9PT1lLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlJiZodChlLHQpfWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBjdChlKTw9MH1mdW5jdGlvbiBodChlLHQpe2NvbnN0IHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO3V0KGUpLGV0KHIsdCl9ZnVuY3Rpb24gX3QoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbWApfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyYCl9ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyYCl9ZnVuY3Rpb24geXQoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgXCIrZStcIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHdyaXRlclwiKX1mdW5jdGlvbiBndChlKXtlLl9jbG9zZWRQcm9taXNlPXUoKCh0LHIpPT57ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXQsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9cixlLl9jbG9zZWRQcm9taXNlU3RhdGU9XCJwZW5kaW5nXCJ9KSl9ZnVuY3Rpb24gd3QoZSx0KXtndChlKSxTdChlLHQpfWZ1bmN0aW9uIFN0KGUsdCl7dm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZWplY3QmJihtKGUuX2Nsb3NlZFByb21pc2UpLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KHQpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT1cInJlamVjdGVkXCIpfWZ1bmN0aW9uIHZ0KGUpe3ZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSYmKGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT1cInJlc29sdmVkXCIpfWZ1bmN0aW9uIFJ0KGUpe2UuX3JlYWR5UHJvbWlzZT11KCgodCxyKT0+e2UuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXQsZS5fcmVhZHlQcm9taXNlX3JlamVjdD1yfSkpLGUuX3JlYWR5UHJvbWlzZVN0YXRlPVwicGVuZGluZ1wifWZ1bmN0aW9uIFR0KGUsdCl7UnQoZSksQ3QoZSx0KX1mdW5jdGlvbiBxdChlKXtSdChlKSxFdChlKX1mdW5jdGlvbiBDdChlLHQpe3ZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QmJihtKGUuX3JlYWR5UHJvbWlzZSksZS5fcmVhZHlQcm9taXNlX3JlamVjdCh0KSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fcmVhZHlQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fcmVhZHlQcm9taXNlU3RhdGU9XCJyZWplY3RlZFwiKX1mdW5jdGlvbiBFdChlKXt2b2lkIDAhPT1lLl9yZWFkeVByb21pc2VfcmVzb2x2ZSYmKGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlKHZvaWQgMCksZS5fcmVhZHlQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX3JlYWR5UHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX3JlYWR5UHJvbWlzZVN0YXRlPVwiZnVsZmlsbGVkXCIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLHthYm9ydFJlYXNvbjp7ZW51bWVyYWJsZTohMH0sc2lnbmFsOntlbnVtZXJhYmxlOiEwfSxlcnJvcjp7ZW51bWVyYWJsZTohMH19KSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclwiLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IFB0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBET01FeGNlcHRpb24/RE9NRXhjZXB0aW9uOnZvaWQgMDtjb25zdCBXdD1mdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZcIm9iamVjdFwiIT10eXBlb2YgZSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBlLCEwfWNhdGNoKGUpe3JldHVybiExfX0oUHQpP1B0OmZ1bmN0aW9uKCl7Y29uc3QgZT1mdW5jdGlvbihlLHQpe3RoaXMubWVzc2FnZT1lfHxcIlwiLHRoaXMubmFtZT10fHxcIkVycm9yXCIsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9O3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiY29uc3RydWN0b3JcIix7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfSgpO2Z1bmN0aW9uIGt0KGUsdCxyLG8sbixhKXtjb25zdCBpPWUuZ2V0UmVhZGVyKCksbD10LmdldFdyaXRlcigpO1Z0KGUpJiYoZS5fZGlzdHVyYmVkPSEwKTtsZXQgcyxfLGcsdz0hMSxTPSExLHY9XCJyZWFkYWJsZVwiLFI9XCJ3cml0YWJsZVwiLFQ9ITEscT0hMTtjb25zdCBDPXUoKGU9PntnPWV9KSk7bGV0IEU9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHUoKChQLFcpPT57bGV0IGs7ZnVuY3Rpb24gTygpe2lmKHcpcmV0dXJuO2NvbnN0IGU9dSgoKGUsdCk9PnshZnVuY3Rpb24gcihvKXtvP2UoKTpmKGZ1bmN0aW9uKCl7aWYodylyZXR1cm4gYyghMCk7cmV0dXJuIGYobC5yZWFkeSwoKCk9PmYoaS5yZWFkKCksKGU9PiEhZS5kb25lfHwoRT1sLndyaXRlKGUudmFsdWUpLG0oRSksITEpKSkpKX0oKSxyLHQpfSghMSl9KSk7bShlKX1mdW5jdGlvbiBCKCl7cmV0dXJuIHY9XCJjbG9zZWRcIixyP0woKTp6KCgoKT0+KEdlKHQpJiYoVD1ydCh0KSxSPXQuX3N0YXRlKSxUfHxcImNsb3NlZFwiPT09Uj9jKHZvaWQgMCk6XCJlcnJvcmluZ1wiPT09Unx8XCJlcnJvcmVkXCI9PT1SP2QoXyk6KFQ9ITAsbC5jbG9zZSgpKSkpLCExLHZvaWQgMCksbnVsbH1mdW5jdGlvbiBBKGUpe3JldHVybiB3fHwodj1cImVycm9yZWRcIixzPWUsbz9MKCEwLGUpOnooKCgpPT5sLmFib3J0KGUpKSwhMCxlKSksbnVsbH1mdW5jdGlvbiBqKGUpe3JldHVybiBTfHwoUj1cImVycm9yZWRcIixfPWUsbj9MKCEwLGUpOnooKCgpPT5pLmNhbmNlbChlKSksITAsZSkpLG51bGx9aWYodm9pZCAwIT09YSYmKGs9KCk9Pntjb25zdCBlPXZvaWQgMCE9PWEucmVhc29uP2EucmVhc29uOm5ldyBXdChcIkFib3J0ZWRcIixcIkFib3J0RXJyb3JcIiksdD1bXTtvfHx0LnB1c2goKCgpPT5cIndyaXRhYmxlXCI9PT1SP2wuYWJvcnQoZSk6Yyh2b2lkIDApKSksbnx8dC5wdXNoKCgoKT0+XCJyZWFkYWJsZVwiPT09dj9pLmNhbmNlbChlKTpjKHZvaWQgMCkpKSx6KCgoKT0+UHJvbWlzZS5hbGwodC5tYXAoKGU9PmUoKSkpKSksITAsZSl9LGEuYWJvcnRlZD9rKCk6YS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixrKSksVnQoZSkmJih2PWUuX3N0YXRlLHM9ZS5fc3RvcmVkRXJyb3IpLEdlKHQpJiYoUj10Ll9zdGF0ZSxfPXQuX3N0b3JlZEVycm9yLFQ9cnQodCkpLFZ0KGUpJiZHZSh0KSYmKHE9ITAsZygpKSxcImVycm9yZWRcIj09PXYpQShzKTtlbHNlIGlmKFwiZXJyb3JpbmdcIj09PVJ8fFwiZXJyb3JlZFwiPT09UilqKF8pO2Vsc2UgaWYoXCJjbG9zZWRcIj09PXYpQigpO2Vsc2UgaWYoVHx8XCJjbG9zZWRcIj09PVIpe2NvbnN0IGU9bmV3IFR5cGVFcnJvcihcInRoZSBkZXN0aW5hdGlvbiB3cml0YWJsZSBzdHJlYW0gY2xvc2VkIGJlZm9yZSBhbGwgZGF0YSBjb3VsZCBiZSBwaXBlZCB0byBpdFwiKTtuP0woITAsZSk6eigoKCk9PmkuY2FuY2VsKGUpKSwhMCxlKX1mdW5jdGlvbiB6KGUsdCxyKXtmdW5jdGlvbiBvKCl7cmV0dXJuXCJ3cml0YWJsZVwiIT09Unx8VD9uKCk6aChmdW5jdGlvbigpe2xldCBlO3JldHVybiBjKGZ1bmN0aW9uIHQoKXtpZihlIT09RSlyZXR1cm4gZT1FLHAoRSx0LHQpfSgpKX0oKSxuKSxudWxsfWZ1bmN0aW9uIG4oKXtyZXR1cm4gZT9iKGUoKSwoKCk9PkYodCxyKSksKGU9PkYoITAsZSkpKTpGKHQsciksbnVsbH13fHwodz0hMCxxP28oKTpoKEMsbykpfWZ1bmN0aW9uIEwoZSx0KXt6KHZvaWQgMCxlLHQpfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gUz0hMCxsLnJlbGVhc2VMb2NrKCksaS5yZWxlYXNlTG9jaygpLHZvaWQgMCE9PWEmJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsayksZT9XKHQpOlAodm9pZCAwKSxudWxsfXd8fChiKGkuY2xvc2VkLEIsQSksYihsLmNsb3NlZCwoZnVuY3Rpb24oKXtyZXR1cm4gU3x8KFI9XCJjbG9zZWRcIiksbnVsbH0pLGopKSxxP08oKTp5KCgoKT0+e3E9ITAsZygpLE8oKX0pKX0pKX1mdW5jdGlvbiBPdChlLHQpe3JldHVybiBmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGUuZ2V0UmVhZGVyKHttb2RlOlwiYnlvYlwifSkucmVsZWFzZUxvY2soKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KGUpP2Z1bmN0aW9uKGUpe2xldCB0LHIsbyxuLGEsaT1lLmdldFJlYWRlcigpLGw9ITEscz0hMSxkPSExLGY9ITEsaD0hMSxwPSExO2NvbnN0IG09dSgoZT0+e2E9ZX0pKTtmdW5jdGlvbiB5KGUpe18oZS5jbG9zZWQsKHQ9PihlIT09aXx8KG8uZXJyb3IodCksbi5lcnJvcih0KSxoJiZwfHxhKHZvaWQgMCkpLG51bGwpKSl9ZnVuY3Rpb24gZygpe2wmJihpLnJlbGVhc2VMb2NrKCksaT1lLmdldFJlYWRlcigpLHkoaSksbD0hMSksYihpLnJlYWQoKSwoZT0+e3ZhciB0LHI7aWYoZD0hMSxmPSExLGUuZG9uZSlyZXR1cm4gaHx8by5jbG9zZSgpLHB8fG4uY2xvc2UoKSxudWxsPT09KHQ9by5ieW9iUmVxdWVzdCl8fHZvaWQgMD09PXR8fHQucmVzcG9uZCgwKSxudWxsPT09KHI9bi5ieW9iUmVxdWVzdCl8fHZvaWQgMD09PXJ8fHIucmVzcG9uZCgwKSxoJiZwfHxhKHZvaWQgMCksbnVsbDtjb25zdCBsPWUudmFsdWUsdT1sO2xldCBjPWw7aWYoIWgmJiFwKXRyeXtjPWxlKGwpfWNhdGNoKGUpe3JldHVybiBvLmVycm9yKGUpLG4uZXJyb3IoZSksYShpLmNhbmNlbChlKSksbnVsbH1yZXR1cm4gaHx8by5lbnF1ZXVlKHUpLHB8fG4uZW5xdWV1ZShjKSxzPSExLGQ/UygpOmYmJnYoKSxudWxsfSksKCgpPT4ocz0hMSxudWxsKSkpfWZ1bmN0aW9uIHcodCxyKXtsfHwoaS5yZWxlYXNlTG9jaygpLGk9ZS5nZXRSZWFkZXIoe21vZGU6XCJieW9iXCJ9KSx5KGkpLGw9ITApO2NvbnN0IHU9cj9uOm8sYz1yP286bjtiKGkucmVhZCh0KSwoZT0+e3ZhciB0O2Q9ITEsZj0hMTtjb25zdCBvPXI/cDpoLG49cj9oOnA7aWYoZS5kb25lKXtvfHx1LmNsb3NlKCksbnx8Yy5jbG9zZSgpO2NvbnN0IHI9ZS52YWx1ZTtyZXR1cm4gdm9pZCAwIT09ciYmKG98fHUuYnlvYlJlcXVlc3QucmVzcG9uZFdpdGhOZXdWaWV3KHIpLG58fG51bGw9PT0odD1jLmJ5b2JSZXF1ZXN0KXx8dm9pZCAwPT09dHx8dC5yZXNwb25kKDApKSxvJiZufHxhKHZvaWQgMCksbnVsbH1jb25zdCBsPWUudmFsdWU7aWYobilvfHx1LmJ5b2JSZXF1ZXN0LnJlc3BvbmRXaXRoTmV3VmlldyhsKTtlbHNle2xldCBlO3RyeXtlPWxlKGwpfWNhdGNoKGUpe3JldHVybiB1LmVycm9yKGUpLGMuZXJyb3IoZSksYShpLmNhbmNlbChlKSksbnVsbH1vfHx1LmJ5b2JSZXF1ZXN0LnJlc3BvbmRXaXRoTmV3VmlldyhsKSxjLmVucXVldWUoZSl9cmV0dXJuIHM9ITEsZD9TKCk6ZiYmdigpLG51bGx9KSwoKCk9PihzPSExLG51bGwpKSl9ZnVuY3Rpb24gUygpe2lmKHMpcmV0dXJuIGQ9ITAsYyh2b2lkIDApO3M9ITA7Y29uc3QgZT1vLmJ5b2JSZXF1ZXN0O3JldHVybiBudWxsPT09ZT9nKCk6dyhlLnZpZXcsITEpLGModm9pZCAwKX1mdW5jdGlvbiB2KCl7aWYocylyZXR1cm4gZj0hMCxjKHZvaWQgMCk7cz0hMDtjb25zdCBlPW4uYnlvYlJlcXVlc3Q7cmV0dXJuIG51bGw9PT1lP2coKTp3KGUudmlldywhMCksYyh2b2lkIDApfWZ1bmN0aW9uIFIoZSl7aWYoaD0hMCx0PWUscCl7Y29uc3QgZT1bdCxyXSxvPWkuY2FuY2VsKGUpO2Eobyl9cmV0dXJuIG19ZnVuY3Rpb24gVChlKXtpZihwPSEwLHI9ZSxoKXtjb25zdCBlPVt0LHJdLG89aS5jYW5jZWwoZSk7YShvKX1yZXR1cm4gbX1jb25zdCBxPW5ldyBSZWFkYWJsZVN0cmVhbSh7dHlwZTpcImJ5dGVzXCIsc3RhcnQoZSl7bz1lfSxwdWxsOlMsY2FuY2VsOlJ9KSxDPW5ldyBSZWFkYWJsZVN0cmVhbSh7dHlwZTpcImJ5dGVzXCIsc3RhcnQoZSl7bj1lfSxwdWxsOnYsY2FuY2VsOlR9KTtyZXR1cm4geShpKSxbcSxDXX0oZSk6ZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZ2V0UmVhZGVyKCk7bGV0IG8sbixhLGksbCxzPSExLGQ9ITEsZj0hMSxoPSExO2NvbnN0IHA9dSgoZT0+e2w9ZX0pKTtmdW5jdGlvbiBtKCl7cmV0dXJuIHM/KGQ9ITAsYyh2b2lkIDApKToocz0hMCxiKHIucmVhZCgpLChlPT57aWYoZD0hMSxlLmRvbmUpcmV0dXJuIGZ8fGEuY2xvc2UoKSxofHxpLmNsb3NlKCksZiYmaHx8bCh2b2lkIDApLG51bGw7Y29uc3QgdD1lLnZhbHVlLHI9dCxvPXQ7cmV0dXJuIGZ8fGEuZW5xdWV1ZShyKSxofHxpLmVucXVldWUobykscz0hMSxkJiZtKCksbnVsbH0pLCgoKT0+KHM9ITEsbnVsbCkpKSxjKHZvaWQgMCkpfWZ1bmN0aW9uIHkoZSl7aWYoZj0hMCxvPWUsaCl7Y29uc3QgZT1bbyxuXSx0PXIuY2FuY2VsKGUpO2wodCl9cmV0dXJuIHB9ZnVuY3Rpb24gZyhlKXtpZihoPSEwLG49ZSxmKXtjb25zdCBlPVtvLG5dLHQ9ci5jYW5jZWwoZSk7bCh0KX1yZXR1cm4gcH1jb25zdCB3PW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoZSl7YT1lfSxwdWxsOm0sY2FuY2VsOnl9KSxTPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoZSl7aT1lfSxwdWxsOm0sY2FuY2VsOmd9KTtyZXR1cm4gXyhyLmNsb3NlZCwoZT0+KGEuZXJyb3IoZSksaS5lcnJvcihlKSxmJiZofHxsKHZvaWQgMCksbnVsbCkpKSxbdyxTXX0oZSl9Y2xhc3MgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcntjb25zdHJ1Y3Rvcigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpfWdldCBkZXNpcmVkU2l6ZSgpe2lmKCFCdCh0aGlzKSl0aHJvdyBEdChcImRlc2lyZWRTaXplXCIpO3JldHVybiBMdCh0aGlzKX1jbG9zZSgpe2lmKCFCdCh0aGlzKSl0aHJvdyBEdChcImNsb3NlXCIpO2lmKCFGdCh0aGlzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHN0cmVhbSBpcyBub3QgaW4gYSBzdGF0ZSB0aGF0IHBlcm1pdHMgY2xvc2VcIik7IWZ1bmN0aW9uKGUpe2lmKCFGdChlKSlyZXR1cm47Y29uc3QgdD1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07ZS5fY2xvc2VSZXF1ZXN0ZWQ9ITAsMD09PWUuX3F1ZXVlLmxlbmd0aCYmKGp0KGUpLFh0KHQpKX0odGhpcyl9ZW5xdWV1ZShlKXtpZighQnQodGhpcykpdGhyb3cgRHQoXCJlbnF1ZXVlXCIpO2lmKCFGdCh0aGlzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHN0cmVhbSBpcyBub3QgaW4gYSBzdGF0ZSB0aGF0IHBlcm1pdHMgZW5xdWV1ZVwiKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighRnQoZSkpcmV0dXJuO2NvbnN0IHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKFV0KHIpJiZYKHIpPjApRyhyLHQsITEpO2Vsc2V7bGV0IHI7dHJ5e3I9ZS5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtKHQpfWNhdGNoKHQpe3Rocm93IHp0KGUsdCksdH10cnl7dWUoZSx0LHIpfWNhdGNoKHQpe3Rocm93IHp0KGUsdCksdH19QXQoZSl9KHRoaXMsZSl9ZXJyb3IoZSl7aWYoIUJ0KHRoaXMpKXRocm93IER0KFwiZXJyb3JcIik7enQodGhpcyxlKX1bVF0oZSl7Y2UodGhpcyk7Y29uc3QgdD10aGlzLl9jYW5jZWxBbGdvcml0aG0oZSk7cmV0dXJuIGp0KHRoaXMpLHR9W3FdKGUpe2NvbnN0IHQ9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKHRoaXMuX3F1ZXVlLmxlbmd0aD4wKXtjb25zdCByPXNlKHRoaXMpO3RoaXMuX2Nsb3NlUmVxdWVzdGVkJiYwPT09dGhpcy5fcXVldWUubGVuZ3RoPyhqdCh0aGlzKSxYdCh0KSk6QXQodGhpcyksZS5fY2h1bmtTdGVwcyhyKX1lbHNlIFUodCxlKSxBdCh0aGlzKX1bQ10oKXt9fWZ1bmN0aW9uIEJ0KGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtXCIpJiZlIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcil9ZnVuY3Rpb24gQXQoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZighRnQoZSkpcmV0dXJuITE7aWYoIWUuX3N0YXJ0ZWQpcmV0dXJuITE7aWYoVXQodCkmJlgodCk+MClyZXR1cm4hMDtpZihMdChlKT4wKXJldHVybiEwO3JldHVybiExfShlKTtpZighdClyZXR1cm47aWYoZS5fcHVsbGluZylyZXR1cm4gdm9pZChlLl9wdWxsQWdhaW49ITApO2UuX3B1bGxpbmc9ITA7YihlLl9wdWxsQWxnb3JpdGhtKCksKCgpPT4oZS5fcHVsbGluZz0hMSxlLl9wdWxsQWdhaW4mJihlLl9wdWxsQWdhaW49ITEsQXQoZSkpLG51bGwpKSwodD0+KHp0KGUsdCksbnVsbCkpKX1mdW5jdGlvbiBqdChlKXtlLl9wdWxsQWxnb3JpdGhtPXZvaWQgMCxlLl9jYW5jZWxBbGdvcml0aG09dm9pZCAwLGUuX3N0cmF0ZWd5U2l6ZUFsZ29yaXRobT12b2lkIDB9ZnVuY3Rpb24genQoZSx0KXtjb25zdCByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcInJlYWRhYmxlXCI9PT1yLl9zdGF0ZSYmKGNlKGUpLGp0KGUpLEp0KHIsdCkpfWZ1bmN0aW9uIEx0KGUpe2NvbnN0IHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZTtyZXR1cm5cImVycm9yZWRcIj09PXQ/bnVsbDpcImNsb3NlZFwiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIEZ0KGUpe3JldHVybiFlLl9jbG9zZVJlcXVlc3RlZCYmXCJyZWFkYWJsZVwiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZX1mdW5jdGlvbiBJdChlLHQscixvKXtjb25zdCBuPU9iamVjdC5jcmVhdGUoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUpO2xldCBhLGksbDthPXZvaWQgMCE9PXQuc3RhcnQ/KCk9PnQuc3RhcnQobik6KCk9Pnt9LGk9dm9pZCAwIT09dC5wdWxsPygpPT50LnB1bGwobik6KCk9PmModm9pZCAwKSxsPXZvaWQgMCE9PXQuY2FuY2VsP2U9PnQuY2FuY2VsKGUpOigpPT5jKHZvaWQgMCksZnVuY3Rpb24oZSx0LHIsbyxuLGEsaSl7dC5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtPWUsdC5fcXVldWU9dm9pZCAwLHQuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCxjZSh0KSx0Ll9zdGFydGVkPSExLHQuX2Nsb3NlUmVxdWVzdGVkPSExLHQuX3B1bGxBZ2Fpbj0hMSx0Ll9wdWxsaW5nPSExLHQuX3N0cmF0ZWd5U2l6ZUFsZ29yaXRobT1pLHQuX3N0cmF0ZWd5SFdNPWEsdC5fcHVsbEFsZ29yaXRobT1vLHQuX2NhbmNlbEFsZ29yaXRobT1uLGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcj10LGIoYyhyKCkpLCgoKT0+KHQuX3N0YXJ0ZWQ9ITAsQXQodCksbnVsbCkpLChlPT4oenQodCxlKSxudWxsKSkpfShlLG4sYSxpLGwscixvKX1mdW5jdGlvbiBEdChlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcmApfWZ1bmN0aW9uICR0KGUsdCxyKXtyZXR1cm4gSShlLHIpLHI9PncoZSx0LFtyXSl9ZnVuY3Rpb24gTXQoZSx0LHIpe3JldHVybiBJKGUscikscj0+dyhlLHQsW3JdKX1mdW5jdGlvbiBZdChlLHQscil7cmV0dXJuIEkoZSxyKSxyPT5nKGUsdCxbcl0pfWZ1bmN0aW9uIFF0KGUsdCl7aWYoXCJieXRlc1wiIT09KGU9YCR7ZX1gKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9ICcke2V9JyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGlvbiB2YWx1ZSBmb3IgUmVhZGFibGVTdHJlYW1UeXBlYCk7cmV0dXJuIGV9ZnVuY3Rpb24gTnQoZSx0KXtpZihcImJ5b2JcIiE9PShlPWAke2V9YCkpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSAnJHtlfScgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgZm9yIFJlYWRhYmxlU3RyZWFtUmVhZGVyTW9kZWApO3JldHVybiBlfWZ1bmN0aW9uIEh0KGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5wcmV2ZW50QWJvcnQsbz1udWxsPT1lP3ZvaWQgMDplLnByZXZlbnRDYW5jZWwsbj1udWxsPT1lP3ZvaWQgMDplLnByZXZlbnRDbG9zZSxhPW51bGw9PWU/dm9pZCAwOmUuc2lnbmFsO3JldHVybiB2b2lkIDAhPT1hJiZmdW5jdGlvbihlLHQpe2lmKCFmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuITE7dHJ5e3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZS5hYm9ydGVkfWNhdGNoKGUpe3JldHVybiExfX0oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSBpcyBub3QgYW4gQWJvcnRTaWduYWwuYCl9KGEsYCR7dH0gaGFzIG1lbWJlciAnc2lnbmFsJyB0aGF0YCkse3ByZXZlbnRBYm9ydDpCb29sZWFuKHIpLHByZXZlbnRDYW5jZWw6Qm9vbGVhbihvKSxwcmV2ZW50Q2xvc2U6Qm9vbGVhbihuKSxzaWduYWw6YX19ZnVuY3Rpb24geHQoZSx0KXtGKGUsdCk7Y29uc3Qgcj1udWxsPT1lP3ZvaWQgMDplLnJlYWRhYmxlO00ocixcInJlYWRhYmxlXCIsXCJSZWFkYWJsZVdyaXRhYmxlUGFpclwiKSxmdW5jdGlvbihlLHQpe2lmKCFIKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGEgUmVhZGFibGVTdHJlYW0uYCl9KHIsYCR7dH0gaGFzIG1lbWJlciAncmVhZGFibGUnIHRoYXRgKTtjb25zdCBvPW51bGw9PWU/dm9pZCAwOmUud3JpdGFibGU7cmV0dXJuIE0obyxcIndyaXRhYmxlXCIsXCJSZWFkYWJsZVdyaXRhYmxlUGFpclwiKSxmdW5jdGlvbihlLHQpe2lmKCF4KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGEgV3JpdGFibGVTdHJlYW0uYCl9KG8sYCR7dH0gaGFzIG1lbWJlciAnd3JpdGFibGUnIHRoYXRgKSx7cmVhZGFibGU6cix3cml0YWJsZTpvfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSx7Y2xvc2U6e2VudW1lcmFibGU6ITB9LGVucXVldWU6e2VudW1lcmFibGU6ITB9LGVycm9yOntlbnVtZXJhYmxlOiEwfSxkZXNpcmVkU2l6ZTp7ZW51bWVyYWJsZTohMH19KSxuKFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLmNsb3NlLFwiY2xvc2VcIiksbihSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5lbnF1ZXVlLFwiZW5xdWV1ZVwiKSxuKFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLmVycm9yLFwiZXJyb3JcIiksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJcIixjb25maWd1cmFibGU6ITB9KTtjbGFzcyBSZWFkYWJsZVN0cmVhbXtjb25zdHJ1Y3RvcihlPXt9LHQ9e30pe3ZvaWQgMD09PWU/ZT1udWxsOkQoZSxcIkZpcnN0IHBhcmFtZXRlclwiKTtjb25zdCByPVllKHQsXCJTZWNvbmQgcGFyYW1ldGVyXCIpLG89ZnVuY3Rpb24oZSx0KXtGKGUsdCk7Y29uc3Qgcj1lLG89bnVsbD09cj92b2lkIDA6ci5hdXRvQWxsb2NhdGVDaHVua1NpemUsbj1udWxsPT1yP3ZvaWQgMDpyLmNhbmNlbCxhPW51bGw9PXI/dm9pZCAwOnIucHVsbCxpPW51bGw9PXI/dm9pZCAwOnIuc3RhcnQsbD1udWxsPT1yP3ZvaWQgMDpyLnR5cGU7cmV0dXJue2F1dG9BbGxvY2F0ZUNodW5rU2l6ZTp2b2lkIDA9PT1vP3ZvaWQgMDpOKG8sYCR7dH0gaGFzIG1lbWJlciAnYXV0b0FsbG9jYXRlQ2h1bmtTaXplJyB0aGF0YCksY2FuY2VsOnZvaWQgMD09PW4/dm9pZCAwOiR0KG4scixgJHt0fSBoYXMgbWVtYmVyICdjYW5jZWwnIHRoYXRgKSxwdWxsOnZvaWQgMD09PWE/dm9pZCAwOk10KGEscixgJHt0fSBoYXMgbWVtYmVyICdwdWxsJyB0aGF0YCksc3RhcnQ6dm9pZCAwPT09aT92b2lkIDA6WXQoaSxyLGAke3R9IGhhcyBtZW1iZXIgJ3N0YXJ0JyB0aGF0YCksdHlwZTp2b2lkIDA9PT1sP3ZvaWQgMDpRdChsLGAke3R9IGhhcyBtZW1iZXIgJ3R5cGUnIHRoYXRgKX19KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIik7dmFyIG47aWYoKG49dGhpcykuX3N0YXRlPVwicmVhZGFibGVcIixuLl9yZWFkZXI9dm9pZCAwLG4uX3N0b3JlZEVycm9yPXZvaWQgMCxuLl9kaXN0dXJiZWQ9ITEsXCJieXRlc1wiPT09by50eXBlKXtpZih2b2lkIDAhPT1yLnNpemUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgc3RyYXRlZ3kgZm9yIGEgYnl0ZSBzdHJlYW0gY2Fubm90IGhhdmUgYSBzaXplIGZ1bmN0aW9uXCIpO09lKHRoaXMsbywkZShyLDApKX1lbHNle2NvbnN0IGU9TWUocik7SXQodGhpcyxvLCRlKHIsMSksZSl9fWdldCBsb2NrZWQoKXtpZighVnQodGhpcykpdGhyb3cgS3QoXCJsb2NrZWRcIik7cmV0dXJuIFV0KHRoaXMpfWNhbmNlbChlKXtyZXR1cm4gVnQodGhpcyk/VXQodGhpcyk/ZChuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbmNlbCBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgcmVhZGVyXCIpKTpHdCh0aGlzLGUpOmQoS3QoXCJjYW5jZWxcIikpfWdldFJlYWRlcihlKXtpZighVnQodGhpcykpdGhyb3cgS3QoXCJnZXRSZWFkZXJcIik7cmV0dXJuIHZvaWQgMD09PWZ1bmN0aW9uKGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5tb2RlO3JldHVybnttb2RlOnZvaWQgMD09PXI/dm9pZCAwOk50KHIsYCR7dH0gaGFzIG1lbWJlciAnbW9kZScgdGhhdGApfX0oZSxcIkZpcnN0IHBhcmFtZXRlclwiKS5tb2RlP25ldyBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcyk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoZSl9KHRoaXMpfXBpcGVUaHJvdWdoKGUsdD17fSl7aWYoIUgodGhpcykpdGhyb3cgS3QoXCJwaXBlVGhyb3VnaFwiKTskKGUsMSxcInBpcGVUaHJvdWdoXCIpO2NvbnN0IHI9eHQoZSxcIkZpcnN0IHBhcmFtZXRlclwiKSxvPUh0KHQsXCJTZWNvbmQgcGFyYW1ldGVyXCIpO2lmKHRoaXMubG9ja2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRocm91Z2ggY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgUmVhZGFibGVTdHJlYW1cIik7aWYoci53cml0YWJsZS5sb2NrZWQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVGhyb3VnaCBjYW5ub3QgYmUgdXNlZCBvbiBhIGxvY2tlZCBXcml0YWJsZVN0cmVhbVwiKTtyZXR1cm4gbShrdCh0aGlzLHIud3JpdGFibGUsby5wcmV2ZW50Q2xvc2Usby5wcmV2ZW50QWJvcnQsby5wcmV2ZW50Q2FuY2VsLG8uc2lnbmFsKSksci5yZWFkYWJsZX1waXBlVG8oZSx0PXt9KXtpZighSCh0aGlzKSlyZXR1cm4gZChLdChcInBpcGVUb1wiKSk7aWYodm9pZCAwPT09ZSlyZXR1cm4gZChcIlBhcmFtZXRlciAxIGlzIHJlcXVpcmVkIGluICdwaXBlVG8nLlwiKTtpZigheChlKSlyZXR1cm4gZChuZXcgVHlwZUVycm9yKFwiUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbydzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXcml0YWJsZVN0cmVhbVwiKSk7bGV0IHI7dHJ5e3I9SHQodCxcIlNlY29uZCBwYXJhbWV0ZXJcIil9Y2F0Y2goZSl7cmV0dXJuIGQoZSl9cmV0dXJuIHRoaXMubG9ja2VkP2QobmV3IFR5cGVFcnJvcihcIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgUmVhZGFibGVTdHJlYW1cIikpOmUubG9ja2VkP2QobmV3IFR5cGVFcnJvcihcIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgV3JpdGFibGVTdHJlYW1cIikpOmt0KHRoaXMsZSxyLnByZXZlbnRDbG9zZSxyLnByZXZlbnRBYm9ydCxyLnByZXZlbnRDYW5jZWwsci5zaWduYWwpfXRlZSgpe2lmKCFIKHRoaXMpKXRocm93IEt0KFwidGVlXCIpO2lmKHRoaXMubG9ja2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdGVlIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXJcIik7cmV0dXJuIE90KHRoaXMpfXZhbHVlcyhlKXtpZighSCh0aGlzKSl0aHJvdyBLdChcInZhbHVlc1wiKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZ2V0UmVhZGVyKCksbz1uZXcgdGUocix0KSxuPU9iamVjdC5jcmVhdGUocmUpO3JldHVybiBuLl9hc3luY0l0ZXJhdG9ySW1wbD1vLG59KHRoaXMsZnVuY3Rpb24oZSx0KXtGKGUsdCk7Y29uc3Qgcj1udWxsPT1lP3ZvaWQgMDplLnByZXZlbnRDYW5jZWw7cmV0dXJue3ByZXZlbnRDYW5jZWw6Qm9vbGVhbihyKX19KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIikucHJldmVudENhbmNlbCl9fWZ1bmN0aW9uIFZ0KGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfcmVhZGFibGVTdHJlYW1Db250cm9sbGVyXCIpJiZlIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pfWZ1bmN0aW9uIFV0KGUpe3JldHVybiB2b2lkIDAhPT1lLl9yZWFkZXJ9ZnVuY3Rpb24gR3QoZSxyKXtpZihlLl9kaXN0dXJiZWQ9ITAsXCJjbG9zZWRcIj09PWUuX3N0YXRlKXJldHVybiBjKHZvaWQgMCk7aWYoXCJlcnJvcmVkXCI9PT1lLl9zdGF0ZSlyZXR1cm4gZChlLl9zdG9yZWRFcnJvcik7WHQoZSk7Y29uc3Qgbz1lLl9yZWFkZXI7aWYodm9pZCAwIT09byYmRmUobykpe2NvbnN0IGU9by5fcmVhZEludG9SZXF1ZXN0cztvLl9yZWFkSW50b1JlcXVlc3RzPW5ldyBTLGUuZm9yRWFjaCgoZT0+e2UuX2Nsb3NlU3RlcHModm9pZCAwKX0pKX1yZXR1cm4gcChlLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJbVF0ociksdCl9ZnVuY3Rpb24gWHQoZSl7ZS5fc3RhdGU9XCJjbG9zZWRcIjtjb25zdCB0PWUuX3JlYWRlcjtpZih2b2lkIDAhPT10JiYoaih0KSxLKHQpKSl7Y29uc3QgZT10Ll9yZWFkUmVxdWVzdHM7dC5fcmVhZFJlcXVlc3RzPW5ldyBTLGUuZm9yRWFjaCgoZT0+e2UuX2Nsb3NlU3RlcHMoKX0pKX19ZnVuY3Rpb24gSnQoZSx0KXtlLl9zdGF0ZT1cImVycm9yZWRcIixlLl9zdG9yZWRFcnJvcj10O2NvbnN0IHI9ZS5fcmVhZGVyO3ZvaWQgMCE9PXImJihBKHIsdCksSyhyKT9aKHIsdCk6SWUocix0KSl9ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbWApfWZ1bmN0aW9uIFp0KGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5oaWdoV2F0ZXJNYXJrO3JldHVybiBNKHIsXCJoaWdoV2F0ZXJNYXJrXCIsXCJRdWV1aW5nU3RyYXRlZ3lJbml0XCIpLHtoaWdoV2F0ZXJNYXJrOlkocil9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZSx7Y2FuY2VsOntlbnVtZXJhYmxlOiEwfSxnZXRSZWFkZXI6e2VudW1lcmFibGU6ITB9LHBpcGVUaHJvdWdoOntlbnVtZXJhYmxlOiEwfSxwaXBlVG86e2VudW1lcmFibGU6ITB9LHRlZTp7ZW51bWVyYWJsZTohMH0sdmFsdWVzOntlbnVtZXJhYmxlOiEwfSxsb2NrZWQ6e2VudW1lcmFibGU6ITB9fSksbihSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuY2FuY2VsLFwiY2FuY2VsXCIpLG4oUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLmdldFJlYWRlcixcImdldFJlYWRlclwiKSxuKFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVGhyb3VnaCxcInBpcGVUaHJvdWdoXCIpLG4oUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbyxcInBpcGVUb1wiKSxuKFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS50ZWUsXCJ0ZWVcIiksbihSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUudmFsdWVzLFwidmFsdWVzXCIpLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiUmVhZGFibGVTdHJlYW1cIixjb25maWd1cmFibGU6ITB9KSxcInN5bWJvbFwiPT10eXBlb2YgZS5hc3luY0l0ZXJhdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLGUuYXN5bmNJdGVyYXRvcix7dmFsdWU6UmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnZhbHVlcyx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBlcj1lPT5lLmJ5dGVMZW5ndGg7bihlcixcInNpemVcIik7Y2xhc3MgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneXtjb25zdHJ1Y3RvcihlKXskKGUsMSxcIkJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lcIiksZT1adChlLFwiRmlyc3QgcGFyYW1ldGVyXCIpLHRoaXMuX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lIaWdoV2F0ZXJNYXJrPWUuaGlnaFdhdGVyTWFya31nZXQgaGlnaFdhdGVyTWFyaygpe2lmKCFycih0aGlzKSl0aHJvdyB0cihcImhpZ2hXYXRlck1hcmtcIik7cmV0dXJuIHRoaXMuX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lIaWdoV2F0ZXJNYXJrfWdldCBzaXplKCl7aWYoIXJyKHRoaXMpKXRocm93IHRyKFwic2l6ZVwiKTtyZXR1cm4gZXJ9fWZ1bmN0aW9uIHRyKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5YCl9ZnVuY3Rpb24gcnIoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9ieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFya1wiKSYmZSBpbnN0YW5jZW9mIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kucHJvdG90eXBlLHtoaWdoV2F0ZXJNYXJrOntlbnVtZXJhYmxlOiEwfSxzaXplOntlbnVtZXJhYmxlOiEwfX0pLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5XCIsY29uZmlndXJhYmxlOiEwfSk7Y29uc3Qgb3I9KCk9PjE7bihvcixcInNpemVcIik7Y2xhc3MgQ291bnRRdWV1aW5nU3RyYXRlZ3l7Y29uc3RydWN0b3IoZSl7JChlLDEsXCJDb3VudFF1ZXVpbmdTdHJhdGVneVwiKSxlPVp0KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIiksdGhpcy5fY291bnRRdWV1aW5nU3RyYXRlZ3lIaWdoV2F0ZXJNYXJrPWUuaGlnaFdhdGVyTWFya31nZXQgaGlnaFdhdGVyTWFyaygpe2lmKCFhcih0aGlzKSl0aHJvdyBucihcImhpZ2hXYXRlck1hcmtcIik7cmV0dXJuIHRoaXMuX2NvdW50UXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFya31nZXQgc2l6ZSgpe2lmKCFhcih0aGlzKSl0aHJvdyBucihcInNpemVcIik7cmV0dXJuIG9yfX1mdW5jdGlvbiBucihlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgQ291bnRRdWV1aW5nU3RyYXRlZ3kucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIENvdW50UXVldWluZ1N0cmF0ZWd5YCl9ZnVuY3Rpb24gYXIoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9jb3VudFF1ZXVpbmdTdHJhdGVneUhpZ2hXYXRlck1hcmtcIikmJmUgaW5zdGFuY2VvZiBDb3VudFF1ZXVpbmdTdHJhdGVneSl9ZnVuY3Rpb24gaXIoZSx0LHIpe3JldHVybiBJKGUscikscj0+dyhlLHQsW3JdKX1mdW5jdGlvbiBscihlLHQscil7cmV0dXJuIEkoZSxyKSxyPT5nKGUsdCxbcl0pfWZ1bmN0aW9uIHNyKGUsdCxyKXtyZXR1cm4gSShlLHIpLChyLG8pPT53KGUsdCxbcixvXSl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ291bnRRdWV1aW5nU3RyYXRlZ3kucHJvdG90eXBlLHtoaWdoV2F0ZXJNYXJrOntlbnVtZXJhYmxlOiEwfSxzaXplOntlbnVtZXJhYmxlOiEwfX0pLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoQ291bnRRdWV1aW5nU3RyYXRlZ3kucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiQ291bnRRdWV1aW5nU3RyYXRlZ3lcIixjb25maWd1cmFibGU6ITB9KTtjbGFzcyBUcmFuc2Zvcm1TdHJlYW17Y29uc3RydWN0b3IoZT17fSx0PXt9LHI9e30pe3ZvaWQgMD09PWUmJihlPW51bGwpO2NvbnN0IG89WWUodCxcIlNlY29uZCBwYXJhbWV0ZXJcIiksbj1ZZShyLFwiVGhpcmQgcGFyYW1ldGVyXCIpLGE9ZnVuY3Rpb24oZSx0KXtGKGUsdCk7Y29uc3Qgcj1udWxsPT1lP3ZvaWQgMDplLmZsdXNoLG89bnVsbD09ZT92b2lkIDA6ZS5yZWFkYWJsZVR5cGUsbj1udWxsPT1lP3ZvaWQgMDplLnN0YXJ0LGE9bnVsbD09ZT92b2lkIDA6ZS50cmFuc2Zvcm0saT1udWxsPT1lP3ZvaWQgMDplLndyaXRhYmxlVHlwZTtyZXR1cm57Zmx1c2g6dm9pZCAwPT09cj92b2lkIDA6aXIocixlLGAke3R9IGhhcyBtZW1iZXIgJ2ZsdXNoJyB0aGF0YCkscmVhZGFibGVUeXBlOm8sc3RhcnQ6dm9pZCAwPT09bj92b2lkIDA6bHIobixlLGAke3R9IGhhcyBtZW1iZXIgJ3N0YXJ0JyB0aGF0YCksdHJhbnNmb3JtOnZvaWQgMD09PWE/dm9pZCAwOnNyKGEsZSxgJHt0fSBoYXMgbWVtYmVyICd0cmFuc2Zvcm0nIHRoYXRgKSx3cml0YWJsZVR5cGU6aX19KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIik7aWYodm9pZCAwIT09YS5yZWFkYWJsZVR5cGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHJlYWRhYmxlVHlwZSBzcGVjaWZpZWRcIik7aWYodm9pZCAwIT09YS53cml0YWJsZVR5cGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHdyaXRhYmxlVHlwZSBzcGVjaWZpZWRcIik7Y29uc3QgaT0kZShuLDApLGw9TWUobikscz0kZShvLDEpLGY9TWUobyk7bGV0IGI7IWZ1bmN0aW9uKGUsdCxyLG8sbixhKXtmdW5jdGlvbiBpKCl7cmV0dXJuIHR9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI7aWYoZS5fYmFja3ByZXNzdXJlKXtyZXR1cm4gcChlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlLCgoKT0+e2lmKFwiZXJyb3JpbmdcIj09PShHZShlLl93cml0YWJsZSk/ZS5fd3JpdGFibGUuX3N0YXRlOmUuX3dyaXRhYmxlU3RhdGUpKXRocm93IEdlKGUuX3dyaXRhYmxlKT9lLl93cml0YWJsZS5fc3RvcmVkRXJyb3I6ZS5fd3JpdGFibGVTdG9yZWRFcnJvcjtyZXR1cm4gcHIocix0KX0pKX1yZXR1cm4gcHIocix0KX0oZSx0KX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBjcihlLHQpLGModm9pZCAwKX0oZSx0KX1mdW5jdGlvbiB1KCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcixyPXQuX2ZsdXNoQWxnb3JpdGhtKCk7cmV0dXJuIGhyKHQpLHAociwoKCk9PntpZihcImVycm9yZWRcIj09PWUuX3JlYWRhYmxlU3RhdGUpdGhyb3cgZS5fcmVhZGFibGVTdG9yZWRFcnJvcjtncihlKSYmd3IoZSl9KSwodD0+e3Rocm93IGNyKGUsdCksZS5fcmVhZGFibGVTdG9yZWRFcnJvcn0pKX0oZSl9ZnVuY3Rpb24gZCgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnIoZSwhMSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZX0oZSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gZHIoZSx0KSxjKHZvaWQgMCl9ZS5fd3JpdGFibGVTdGF0ZT1cIndyaXRhYmxlXCIsZS5fd3JpdGFibGVTdG9yZWRFcnJvcj12b2lkIDAsZS5fd3JpdGFibGVIYXNJbkZsaWdodE9wZXJhdGlvbj0hMSxlLl93cml0YWJsZVN0YXJ0ZWQ9ITEsZS5fd3JpdGFibGU9ZnVuY3Rpb24oZSx0LHIsbyxuLGEsaSl7cmV0dXJuIG5ldyBXcml0YWJsZVN0cmVhbSh7c3RhcnQocil7ZS5fd3JpdGFibGVDb250cm9sbGVyPXI7dHJ5e2NvbnN0IHQ9ci5zaWduYWw7dm9pZCAwIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKCk9PntcIndyaXRhYmxlXCI9PT1lLl93cml0YWJsZVN0YXRlJiYoZS5fd3JpdGFibGVTdGF0ZT1cImVycm9yaW5nXCIsdC5yZWFzb24mJihlLl93cml0YWJsZVN0b3JlZEVycm9yPXQucmVhc29uKSl9KSl9Y2F0Y2goZSl7fXJldHVybiBwKHQoKSwoKCk9PihlLl93cml0YWJsZVN0YXJ0ZWQ9ITAsQ3IoZSksbnVsbCkpLCh0PT57dGhyb3cgZS5fd3JpdGFibGVTdGFydGVkPSEwLFJyKGUsdCksdH0pKX0sd3JpdGU6dD0+KGZ1bmN0aW9uKGUpe2UuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb249ITB9KGUpLHAocih0KSwoKCk9PihmdW5jdGlvbihlKXtlLl93cml0YWJsZUhhc0luRmxpZ2h0T3BlcmF0aW9uPSExfShlKSxDcihlKSxudWxsKSksKHQ9Pnt0aHJvdyBmdW5jdGlvbihlLHQpe2UuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb249ITEsUnIoZSx0KX0oZSx0KSx0fSkpKSxjbG9zZTooKT0+KGZ1bmN0aW9uKGUpe2UuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb249ITB9KGUpLHAobygpLCgoKT0+KGZ1bmN0aW9uKGUpe2UuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb249ITE7XCJlcnJvcmluZ1wiPT09ZS5fd3JpdGFibGVTdGF0ZSYmKGUuX3dyaXRhYmxlU3RvcmVkRXJyb3I9dm9pZCAwKTtlLl93cml0YWJsZVN0YXRlPVwiY2xvc2VkXCJ9KGUpLG51bGwpKSwodD0+e3Rocm93IGZ1bmN0aW9uKGUsdCl7ZS5fd3JpdGFibGVIYXNJbkZsaWdodE9wZXJhdGlvbj0hMSxlLl93cml0YWJsZVN0YXRlLFJyKGUsdCl9KGUsdCksdH0pKSksYWJvcnQ6dD0+KGUuX3dyaXRhYmxlU3RhdGU9XCJlcnJvcmVkXCIsZS5fd3JpdGFibGVTdG9yZWRFcnJvcj10LG4odCkpfSx7aGlnaFdhdGVyTWFyazphLHNpemU6aX0pfShlLGksbCx1LHMscixvKSxlLl9yZWFkYWJsZVN0YXRlPVwicmVhZGFibGVcIixlLl9yZWFkYWJsZVN0b3JlZEVycm9yPXZvaWQgMCxlLl9yZWFkYWJsZUNsb3NlUmVxdWVzdGVkPSExLGUuX3JlYWRhYmxlUHVsbGluZz0hMSxlLl9yZWFkYWJsZT1mdW5jdGlvbihlLHQscixvLG4sYSl7cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQ6cj0+KGUuX3JlYWRhYmxlQ29udHJvbGxlcj1yLHQoKS5jYXRjaCgodD0+e1NyKGUsdCl9KSkpLHB1bGw6KCk9PihlLl9yZWFkYWJsZVB1bGxpbmc9ITAscigpLmNhdGNoKCh0PT57U3IoZSx0KX0pKSksY2FuY2VsOnQ9PihlLl9yZWFkYWJsZVN0YXRlPVwiY2xvc2VkXCIsbyh0KSl9LHtoaWdoV2F0ZXJNYXJrOm4sc2l6ZTphfSl9KGUsaSxkLGYsbixhKSxlLl9iYWNrcHJlc3N1cmU9dm9pZCAwLGUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U9dm9pZCAwLGUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZT12b2lkIDAsZnIoZSwhMCksZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcj12b2lkIDB9KHRoaXMsdSgoZT0+e2I9ZX0pKSxzLGYsaSxsKSxmdW5jdGlvbihlLHQpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUpO2xldCBvLG47bz12b2lkIDAhPT10LnRyYW5zZm9ybT9lPT50LnRyYW5zZm9ybShlLHIpOmU9Pnt0cnl7cmV0dXJuIF9yKHIsZSksYyh2b2lkIDApfWNhdGNoKGUpe3JldHVybiBkKGUpfX07bj12b2lkIDAhPT10LmZsdXNoPygpPT50LmZsdXNoKHIpOigpPT5jKHZvaWQgMCk7IWZ1bmN0aW9uKGUsdCxyLG8pe3QuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW09ZSxlLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyPXQsdC5fdHJhbnNmb3JtQWxnb3JpdGhtPXIsdC5fZmx1c2hBbGdvcml0aG09b30oZSxyLG8sbil9KHRoaXMsYSksdm9pZCAwIT09YS5zdGFydD9iKGEuc3RhcnQodGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcikpOmIodm9pZCAwKX1nZXQgcmVhZGFibGUoKXtpZighdXIodGhpcykpdGhyb3cgeXIoXCJyZWFkYWJsZVwiKTtyZXR1cm4gdGhpcy5fcmVhZGFibGV9Z2V0IHdyaXRhYmxlKCl7aWYoIXVyKHRoaXMpKXRocm93IHlyKFwid3JpdGFibGVcIik7cmV0dXJuIHRoaXMuX3dyaXRhYmxlfX1mdW5jdGlvbiB1cihlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXJcIikmJmUgaW5zdGFuY2VvZiBUcmFuc2Zvcm1TdHJlYW0pfWZ1bmN0aW9uIGNyKGUsdCl7U3IoZSx0KSxkcihlLHQpfWZ1bmN0aW9uIGRyKGUsdCl7aHIoZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciksZnVuY3Rpb24oZSx0KXtlLl93cml0YWJsZUNvbnRyb2xsZXIuZXJyb3IodCk7XCJ3cml0YWJsZVwiPT09ZS5fd3JpdGFibGVTdGF0ZSYmVHIoZSx0KX0oZSx0KSxlLl9iYWNrcHJlc3N1cmUmJmZyKGUsITEpfWZ1bmN0aW9uIGZyKGUsdCl7dm9pZCAwIT09ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSYmZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlKCksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZT11KCh0PT57ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlPXR9KSksZS5fYmFja3ByZXNzdXJlPXR9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZSx7cmVhZGFibGU6e2VudW1lcmFibGU6ITB9LHdyaXRhYmxlOntlbnVtZXJhYmxlOiEwfX0pLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIlRyYW5zZm9ybVN0cmVhbVwiLGNvbmZpZ3VyYWJsZTohMH0pO2NsYXNzIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVye2NvbnN0cnVjdG9yKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIil9Z2V0IGRlc2lyZWRTaXplKCl7aWYoIWJyKHRoaXMpKXRocm93IG1yKFwiZGVzaXJlZFNpemVcIik7cmV0dXJuIHZyKHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0pfWVucXVldWUoZSl7aWYoIWJyKHRoaXMpKXRocm93IG1yKFwiZW5xdWV1ZVwiKTtfcih0aGlzLGUpfWVycm9yKGUpe2lmKCFicih0aGlzKSl0aHJvdyBtcihcImVycm9yXCIpO3ZhciB0O3Q9ZSxjcih0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLHQpfXRlcm1pbmF0ZSgpe2lmKCFicih0aGlzKSl0aHJvdyBtcihcInRlcm1pbmF0ZVwiKTshZnVuY3Rpb24oZSl7Y29uc3QgdD1lLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtO2dyKHQpJiZ3cih0KTtjb25zdCByPW5ldyBUeXBlRXJyb3IoXCJUcmFuc2Zvcm1TdHJlYW0gdGVybWluYXRlZFwiKTtkcih0LHIpfSh0aGlzKX19ZnVuY3Rpb24gYnIoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtXCIpJiZlIGluc3RhbmNlb2YgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpfWZ1bmN0aW9uIGhyKGUpe2UuX3RyYW5zZm9ybUFsZ29yaXRobT12b2lkIDAsZS5fZmx1c2hBbGdvcml0aG09dm9pZCAwfWZ1bmN0aW9uIF9yKGUsdCl7Y29uc3Qgcj1lLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtO2lmKCFncihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVhZGFibGUgc2lkZSBpcyBub3QgaW4gYSBzdGF0ZSB0aGF0IHBlcm1pdHMgZW5xdWV1ZVwiKTt0cnl7IWZ1bmN0aW9uKGUsdCl7ZS5fcmVhZGFibGVQdWxsaW5nPSExO3RyeXtlLl9yZWFkYWJsZUNvbnRyb2xsZXIuZW5xdWV1ZSh0KX1jYXRjaCh0KXt0aHJvdyBTcihlLHQpLHR9fShyLHQpfWNhdGNoKGUpe3Rocm93IGRyKHIsZSksci5fcmVhZGFibGVTdG9yZWRFcnJvcn1jb25zdCBvPWZ1bmN0aW9uKGUpe3JldHVybiFmdW5jdGlvbihlKXtpZighZ3IoZSkpcmV0dXJuITE7aWYoZS5fcmVhZGFibGVQdWxsaW5nKXJldHVybiEwO2lmKHZyKGUpPjApcmV0dXJuITA7cmV0dXJuITF9KGUpfShyKTtvIT09ci5fYmFja3ByZXNzdXJlJiZmcihyLCEwKX1mdW5jdGlvbiBwcihlLHQpe3JldHVybiBwKGUuX3RyYW5zZm9ybUFsZ29yaXRobSh0KSx2b2lkIDAsKHQ9Pnt0aHJvdyBjcihlLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLHQpLHR9KSl9ZnVuY3Rpb24gbXIoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcmApfWZ1bmN0aW9uIHlyKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFRyYW5zZm9ybVN0cmVhbWApfWZ1bmN0aW9uIGdyKGUpe3JldHVybiFlLl9yZWFkYWJsZUNsb3NlUmVxdWVzdGVkJiZcInJlYWRhYmxlXCI9PT1lLl9yZWFkYWJsZVN0YXRlfWZ1bmN0aW9uIHdyKGUpe2UuX3JlYWRhYmxlU3RhdGU9XCJjbG9zZWRcIixlLl9yZWFkYWJsZUNsb3NlUmVxdWVzdGVkPSEwLGUuX3JlYWRhYmxlQ29udHJvbGxlci5jbG9zZSgpfWZ1bmN0aW9uIFNyKGUsdCl7XCJyZWFkYWJsZVwiPT09ZS5fcmVhZGFibGVTdGF0ZSYmKGUuX3JlYWRhYmxlU3RhdGU9XCJlcnJvcmVkXCIsZS5fcmVhZGFibGVTdG9yZWRFcnJvcj10KSxlLl9yZWFkYWJsZUNvbnRyb2xsZXIuZXJyb3IodCl9ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUuX3JlYWRhYmxlQ29udHJvbGxlci5kZXNpcmVkU2l6ZX1mdW5jdGlvbiBScihlLHQpe1wid3JpdGFibGVcIiE9PWUuX3dyaXRhYmxlU3RhdGU/cXIoZSk6VHIoZSx0KX1mdW5jdGlvbiBUcihlLHQpe2UuX3dyaXRhYmxlU3RhdGU9XCJlcnJvcmluZ1wiLGUuX3dyaXRhYmxlU3RvcmVkRXJyb3I9dCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb259KGUpJiZlLl93cml0YWJsZVN0YXJ0ZWQmJnFyKGUpfWZ1bmN0aW9uIHFyKGUpe2UuX3dyaXRhYmxlU3RhdGU9XCJlcnJvcmVkXCJ9ZnVuY3Rpb24gQ3IoZSl7XCJlcnJvcmluZ1wiPT09ZS5fd3JpdGFibGVTdGF0ZSYmcXIoZSl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLHtlbnF1ZXVlOntlbnVtZXJhYmxlOiEwfSxlcnJvcjp7ZW51bWVyYWJsZTohMH0sdGVybWluYXRlOntlbnVtZXJhYmxlOiEwfSxkZXNpcmVkU2l6ZTp7ZW51bWVyYWJsZTohMH19KSxuKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5lbnF1ZXVlLFwiZW5xdWV1ZVwiKSxuKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5lcnJvcixcImVycm9yXCIpLG4oVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLnRlcm1pbmF0ZSxcInRlcm1pbmF0ZVwiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyXCIsY29uZmlndXJhYmxlOiEwfSk7ZXhwb3J0e0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3ksQ291bnRRdWV1aW5nU3RyYXRlZ3ksUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcixSZWFkYWJsZVN0cmVhbSxSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIsUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcixUcmFuc2Zvcm1TdHJlYW0sVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsV3JpdGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcixXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJ9O1xuIiwKICAgICJleHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9ICh2YWx1ZSkgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKTtcbiIsCiAgICAiLyohIEJhc2VkIG9uIGZldGNoLWJsb2IuIE1JVCBMaWNlbnNlLiBKaW1teSBXw6RydGluZyA8aHR0cHM6Ly9qaW1teS53YXJ0aW5nLnNlL29wZW5zb3VyY2U+ICYgRGF2aWQgRnJhbmsgKi9cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5jb25zdCBDSFVOS19TSVpFID0gNjU1MzY7XG5hc3luYyBmdW5jdGlvbiogY2xvbmVQYXJ0KHBhcnQpIHtcbiAgICBjb25zdCBlbmQgPSBwYXJ0LmJ5dGVPZmZzZXQgKyBwYXJ0LmJ5dGVMZW5ndGg7XG4gICAgbGV0IHBvc2l0aW9uID0gcGFydC5ieXRlT2Zmc2V0O1xuICAgIHdoaWxlIChwb3NpdGlvbiAhPT0gZW5kKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLm1pbihlbmQgLSBwb3NpdGlvbiwgQ0hVTktfU0laRSk7XG4gICAgICAgIGNvbnN0IGNodW5rID0gcGFydC5idWZmZXIuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgc2l6ZSk7XG4gICAgICAgIHBvc2l0aW9uICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgIHlpZWxkIG5ldyBVaW50OEFycmF5KGNodW5rKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiogY29uc3VtZU5vZGVCbG9iKGJsb2IpIHtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgIHdoaWxlIChwb3NpdGlvbiAhPT0gYmxvYi5zaXplKSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gYmxvYi5zbGljZShwb3NpdGlvbiwgTWF0aC5taW4oYmxvYi5zaXplLCBwb3NpdGlvbiArIENIVU5LX1NJWkUpKTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2h1bmsuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgcG9zaXRpb24gKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgICAgIHlpZWxkIG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBjb25zdW1lQmxvYlBhcnRzKHBhcnRzLCBjbG9uZSA9IGZhbHNlKSB7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkpIHtcbiAgICAgICAgICAgIGlmIChjbG9uZSkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBjbG9uZVBhcnQocGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBwYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocGFydC5zdHJlYW0pKSB7XG4gICAgICAgICAgICB5aWVsZCogcGFydC5zdHJlYW0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkKiBjb25zdW1lTm9kZUJsb2IocGFydCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24qIHNsaWNlQmxvYihibG9iUGFydHMsIGJsb2JTaXplLCBzdGFydCA9IDAsIGVuZCkge1xuICAgIGVuZCAhPT0gbnVsbCAmJiBlbmQgIT09IHZvaWQgMCA/IGVuZCA6IChlbmQgPSBibG9iU2l6ZSk7XG4gICAgbGV0IHJlbGF0aXZlU3RhcnQgPSBzdGFydCA8IDBcbiAgICAgICAgPyBNYXRoLm1heChibG9iU2l6ZSArIHN0YXJ0LCAwKVxuICAgICAgICA6IE1hdGgubWluKHN0YXJ0LCBibG9iU2l6ZSk7XG4gICAgbGV0IHJlbGF0aXZlRW5kID0gZW5kIDwgMFxuICAgICAgICA/IE1hdGgubWF4KGJsb2JTaXplICsgZW5kLCAwKVxuICAgICAgICA6IE1hdGgubWluKGVuZCwgYmxvYlNpemUpO1xuICAgIGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xuICAgIGxldCBhZGRlZCA9IDA7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAoYWRkZWQgPj0gc3Bhbikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydFNpemUgPSBBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkgPyBwYXJ0LmJ5dGVMZW5ndGggOiBwYXJ0LnNpemU7XG4gICAgICAgIGlmIChyZWxhdGl2ZVN0YXJ0ICYmIHBhcnRTaXplIDw9IHJlbGF0aXZlU3RhcnQpIHtcbiAgICAgICAgICAgIHJlbGF0aXZlU3RhcnQgLT0gcGFydFNpemU7XG4gICAgICAgICAgICByZWxhdGl2ZUVuZCAtPSBwYXJ0U2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjaHVuaztcbiAgICAgICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IHBhcnQuc3ViYXJyYXkocmVsYXRpdmVTdGFydCwgTWF0aC5taW4ocGFydFNpemUsIHJlbGF0aXZlRW5kKSk7XG4gICAgICAgICAgICAgICAgYWRkZWQgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rID0gcGFydC5zbGljZShyZWxhdGl2ZVN0YXJ0LCBNYXRoLm1pbihwYXJ0U2l6ZSwgcmVsYXRpdmVFbmQpKTtcbiAgICAgICAgICAgICAgICBhZGRlZCArPSBjaHVuay5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVsYXRpdmVFbmQgLT0gcGFydFNpemU7XG4gICAgICAgICAgICByZWxhdGl2ZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHlpZWxkIGNodW5rO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwKICAgICIvKiEgQmFzZWQgb24gZmV0Y2gtYmxvYi4gTUlUIExpY2Vuc2UuIEppbW15IFfDpHJ0aW5nIDxodHRwczovL2ppbW15LndhcnRpbmcuc2Uvb3BlbnNvdXJjZT4gJiBEYXZpZCBGcmFuayAqL1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9CbG9iX3BhcnRzLCBfQmxvYl90eXBlLCBfQmxvYl9zaXplO1xuaW1wb3J0IHsgUmVhZGFibGVTdHJlYW0gfSBmcm9tIFwid2ViLXN0cmVhbXMtcG9seWZpbGxcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lQmxvYlBhcnRzLCBzbGljZUJsb2IgfSBmcm9tIFwiLi9ibG9iSGVscGVycy5qc1wiO1xuZXhwb3J0IGNsYXNzIEJsb2Ige1xuICAgIGNvbnN0cnVjdG9yKGJsb2JQYXJ0cyA9IFtdLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgX0Jsb2JfcGFydHMuc2V0KHRoaXMsIFtdKTtcbiAgICAgICAgX0Jsb2JfdHlwZS5zZXQodGhpcywgXCJcIik7XG4gICAgICAgIF9CbG9iX3NpemUuc2V0KHRoaXMsIDApO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBibG9iUGFydHMgIT09IFwib2JqZWN0XCIgfHwgYmxvYlBhcnRzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnQmxvYic6IFwiXG4gICAgICAgICAgICAgICAgKyBcIlRoZSBwcm92aWRlZCB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNGdW5jdGlvbihibG9iUGFydHNbU3ltYm9sLml0ZXJhdG9yXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdCbG9iJzogXCJcbiAgICAgICAgICAgICAgICArIFwiVGhlIG9iamVjdCBtdXN0IGhhdmUgYSBjYWxsYWJsZSBAQGl0ZXJhdG9yIHByb3BlcnR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdCbG9iJzogcGFyYW1ldGVyIDIgY2Fubm90IGNvbnZlcnQgdG8gZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICBmb3IgKGNvbnN0IHJhdyBvZiBibG9iUGFydHMpIHtcbiAgICAgICAgICAgIGxldCBwYXJ0O1xuICAgICAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhyYXcpKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBVaW50OEFycmF5KHJhdy5idWZmZXIuc2xpY2UocmF3LmJ5dGVPZmZzZXQsIHJhdy5ieXRlT2Zmc2V0ICsgcmF3LmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJhdyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBVaW50OEFycmF5KHJhdy5zbGljZSgwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyYXcgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IHJhdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnQgPSBlbmNvZGVyLmVuY29kZShTdHJpbmcocmF3KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CbG9iX3NpemUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2Jfc2l6ZSwgXCJmXCIpICsgKEFycmF5QnVmZmVyLmlzVmlldyhwYXJ0KSA/IHBhcnQuYnl0ZUxlbmd0aCA6IHBhcnQuc2l6ZSksIFwiZlwiKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2JfcGFydHMsIFwiZlwiKS5wdXNoKHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGUgPSBvcHRpb25zLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBTdHJpbmcob3B0aW9ucy50eXBlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQmxvYl90eXBlLCAvXltcXHgyMC1cXHg3RV0qJC8udGVzdCh0eXBlKSA/IHR5cGUgOiBcIlwiLCBcImZcIik7XG4gICAgfVxuICAgIHN0YXRpYyBbKF9CbG9iX3BhcnRzID0gbmV3IFdlYWtNYXAoKSwgX0Jsb2JfdHlwZSA9IG5ldyBXZWFrTWFwKCksIF9CbG9iX3NpemUgPSBuZXcgV2Vha01hcCgpLCBTeW1ib2wuaGFzSW5zdGFuY2UpXSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZVxuICAgICAgICAgICAgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbnN0cnVjdG9yKVxuICAgICAgICAgICAgJiYgKGlzRnVuY3Rpb24odmFsdWUuc3RyZWFtKVxuICAgICAgICAgICAgICAgIHx8IGlzRnVuY3Rpb24odmFsdWUuYXJyYXlCdWZmZXIpKVxuICAgICAgICAgICAgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3QodmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkpO1xuICAgIH1cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2JfdHlwZSwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2Jfc2l6ZSwgXCJmXCIpO1xuICAgIH1cbiAgICBzbGljZShzdGFydCwgZW5kLCBjb250ZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2Ioc2xpY2VCbG9iKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2JfcGFydHMsIFwiZlwiKSwgdGhpcy5zaXplLCBzdGFydCwgZW5kKSwge1xuICAgICAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJsb2JQYXJ0cyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CbG9iX3BhcnRzLCBcImZcIikpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gZGVjb2Rlci5kZWNvZGUoY2h1bmssIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSBkZWNvZGVyLmRlY29kZSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBhcnJheUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuc2l6ZSk7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCbG9iUGFydHMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmxvYl9wYXJ0cywgXCJmXCIpKSkge1xuICAgICAgICAgICAgdmlldy5zZXQoY2h1bmssIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWV3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnN1bWVCbG9iUGFydHMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmxvYl9wYXJ0cywgXCJmXCIpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlTWljcm90YXNrKCgpID0+IGNvbnRyb2xsZXIuY2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJCbG9iXCI7XG4gICAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvYi5wcm90b3R5cGUsIHtcbiAgICB0eXBlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBzbGljZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgc3RyZWFtOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICB0ZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBhcnJheUJ1ZmZlcjogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuIiwKICAgICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0ZpbGVfbmFtZSwgX0ZpbGVfbGFzdE1vZGlmaWVkO1xuaW1wb3J0IHsgQmxvYiB9IGZyb20gXCIuL0Jsb2IuanNcIjtcbmV4cG9ydCBjbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gICAgY29uc3RydWN0b3IoZmlsZUJpdHMsIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihmaWxlQml0cywgb3B0aW9ucyk7XG4gICAgICAgIF9GaWxlX25hbWUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9GaWxlX2xhc3RNb2RpZmllZC5zZXQodGhpcywgMCk7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ZpbGUnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgXCJcbiAgICAgICAgICAgICAgICArIGBidXQgb25seSAke2FyZ3VtZW50cy5sZW5ndGh9IHByZXNlbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRmlsZV9uYW1lLCBTdHJpbmcobmFtZSksIFwiZlwiKTtcbiAgICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBEYXRlLm5vdygpXG4gICAgICAgICAgICA6IE51bWJlcihvcHRpb25zLmxhc3RNb2RpZmllZCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGxhc3RNb2RpZmllZCkpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0ZpbGVfbGFzdE1vZGlmaWVkLCBsYXN0TW9kaWZpZWQsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgWyhfRmlsZV9uYW1lID0gbmV3IFdlYWtNYXAoKSwgX0ZpbGVfbGFzdE1vZGlmaWVkID0gbmV3IFdlYWtNYXAoKSwgU3ltYm9sLmhhc0luc3RhbmNlKV0odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQmxvYlxuICAgICAgICAgICAgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gXCJGaWxlXCJcbiAgICAgICAgICAgICYmIHR5cGVvZiB2YWx1ZS5uYW1lID09PSBcInN0cmluZ1wiO1xuICAgIH1cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0ZpbGVfbmFtZSwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRmlsZV9sYXN0TW9kaWZpZWQsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IHdlYmtpdFJlbGF0aXZlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiRmlsZVwiO1xuICAgIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRmlsZSB9IGZyb20gXCIuL0ZpbGUuanNcIjtcbmV4cG9ydCBjb25zdCBpc0ZpbGUgPSAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgRmlsZTtcbiIsCiAgICAiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwKICAgICIvKiFcbiAqIGh1bWFuaXplLW1zIC0gaW5kZXguanNcbiAqIENvcHlyaWdodChjKSAyMDE0IGRlYWRfaG9yc2UgPGRlYWRfaG9yc2VAcXEuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgbXMgPSByZXF1aXJlKCdtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gIGlmICh0eXBlb2YgdCA9PT0gJ251bWJlcicpIHJldHVybiB0O1xuICB2YXIgciA9IG1zKHQpO1xuICBpZiAociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnaHVtYW5pemUtbXMoJWopIHJlc3VsdCB1bmRlZmluZWQnLCB0KSk7XG4gICAgY29uc29sZS53YXJuKGVyci5zdGFjayk7XG4gIH1cbiAgcmV0dXJuIHI7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBhZ2VudFxuICBDVVJSRU5UX0lEOiBTeW1ib2woJ2FnZW50a2VlcGFsaXZlI2N1cnJlbnRJZCcpLFxuICBDUkVBVEVfSUQ6IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjY3JlYXRlSWQnKSxcbiAgSU5JVF9TT0NLRVQ6IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjaW5pdFNvY2tldCcpLFxuICBDUkVBVEVfSFRUUFNfQ09OTkVDVElPTjogU3ltYm9sKCdhZ2VudGtlZXBhbGl2ZSNjcmVhdGVIdHRwc0Nvbm5lY3Rpb24nKSxcbiAgLy8gc29ja2V0XG4gIFNPQ0tFVF9DUkVBVEVEX1RJTUU6IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjc29ja2V0Q3JlYXRlZFRpbWUnKSxcbiAgU09DS0VUX05BTUU6IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjc29ja2V0TmFtZScpLFxuICBTT0NLRVRfUkVRVUVTVF9DT1VOVDogU3ltYm9sKCdhZ2VudGtlZXBhbGl2ZSNzb2NrZXRSZXF1ZXN0Q291bnQnKSxcbiAgU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlQ6IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjc29ja2V0UmVxdWVzdEZpbmlzaGVkQ291bnQnKSxcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgT3JpZ2luYWxBZ2VudCA9IHJlcXVpcmUoJ2h0dHAnKS5BZ2VudDtcbmNvbnN0IG1zID0gcmVxdWlyZSgnaHVtYW5pemUtbXMnKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgndXRpbCcpLmRlYnVnbG9nKCdhZ2VudGtlZXBhbGl2ZScpO1xuY29uc3Qge1xuICBJTklUX1NPQ0tFVCxcbiAgQ1VSUkVOVF9JRCxcbiAgQ1JFQVRFX0lELFxuICBTT0NLRVRfQ1JFQVRFRF9USU1FLFxuICBTT0NLRVRfTkFNRSxcbiAgU09DS0VUX1JFUVVFU1RfQ09VTlQsXG4gIFNPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5ULFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbi8vIE9yaWdpbmFsQWdlbnQgY29tZSBmcm9tXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3Y4LjEyLjAvbGliL19odHRwX2FnZW50LmpzXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC4xMi4wL2xpYi9faHR0cF9hZ2VudC5qc1xuXG4vLyBub2RlIDw9IDEwXG5sZXQgZGVmYXVsdFRpbWVvdXRMaXN0ZW5lckNvdW50ID0gMTtcbmNvbnN0IG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KHByb2Nlc3MudmVyc2lvbi5zcGxpdCgnLicsIDEpWzBdLnN1YnN0cmluZygxKSk7XG5pZiAobWFqb3JWZXJzaW9uID49IDExICYmIG1ham9yVmVyc2lvbiA8PSAxMikge1xuICBkZWZhdWx0VGltZW91dExpc3RlbmVyQ291bnQgPSAyO1xufSBlbHNlIGlmIChtYWpvclZlcnNpb24gPj0gMTMpIHtcbiAgZGVmYXVsdFRpbWVvdXRMaXN0ZW5lckNvdW50ID0gMztcbn1cblxuZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgY29uc29sZS5sb2coJ1thZ2VudGtlZXBhbGl2ZTpkZXByZWNhdGVkXSAlcycsIG1lc3NhZ2UpO1xufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIE9yaWdpbmFsQWdlbnQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5rZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSAhPT0gZmFsc2U7XG4gICAgLy8gZGVmYXVsdCBpcyBrZWVwLWFsaXZlIGFuZCA0cyBmcmVlIHNvY2tldCB0aW1lb3V0XG4gICAgLy8gc2VlIGh0dHBzOi8vbWVkaXVtLmNvbS9zc2Vuc2UtdGVjaC9yZWR1Y2UtbmV0d29ya2luZy1lcnJvcnMtaW4tbm9kZWpzLTIzYjRlYjlmMmQ4M1xuICAgIGlmIChvcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQgPSA0MDAwO1xuICAgIH1cbiAgICAvLyBMZWdhY3kgQVBJOiBrZWVwQWxpdmVUaW1lb3V0IHNob3VsZCBiZSByZW5hbWUgdG8gYGZyZWVTb2NrZXRUaW1lb3V0YFxuICAgIGlmIChvcHRpb25zLmtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICAgIGRlcHJlY2F0ZSgnb3B0aW9ucy5rZWVwQWxpdmVUaW1lb3V0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2Ugb3B0aW9ucy5mcmVlU29ja2V0VGltZW91dCBpbnN0ZWFkJyk7XG4gICAgICBvcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0ID0gb3B0aW9ucy5rZWVwQWxpdmVUaW1lb3V0O1xuICAgICAgZGVsZXRlIG9wdGlvbnMua2VlcEFsaXZlVGltZW91dDtcbiAgICB9XG4gICAgLy8gTGVnYWN5IEFQSTogZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQgc2hvdWxkIGJlIHJlbmFtZSB0byBgZnJlZVNvY2tldFRpbWVvdXRgXG4gICAgaWYgKG9wdGlvbnMuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICAgIGRlcHJlY2F0ZSgnb3B0aW9ucy5mcmVlU29ja2V0S2VlcEFsaXZlVGltZW91dCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQgaW5zdGVhZCcpO1xuICAgICAgb3B0aW9ucy5mcmVlU29ja2V0VGltZW91dCA9IG9wdGlvbnMuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQ7XG4gICAgICBkZWxldGUgb3B0aW9ucy5mcmVlU29ja2V0S2VlcEFsaXZlVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBzb2NrZXQgdG8gdGltZW91dCBhZnRlciB0aW1lb3V0IG1pbGxpc2Vjb25kcyBvZiBpbmFjdGl2aXR5IG9uIHRoZSBzb2NrZXQuXG4gICAgLy8gQnkgZGVmYXVsdCBpcyBkb3VibGUgZnJlZSBzb2NrZXQgdGltZW91dC5cbiAgICBpZiAob3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzb2NrZXQgZGVmYXVsdCBpbmFjdGl2aXR5IHRpbWVvdXQgPj0gOHNcbiAgICAgIG9wdGlvbnMudGltZW91dCA9IE1hdGgubWF4KG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQgKiAyLCA4MDAwKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGh1bWFuaXplIGZvcm1hdFxuICAgIG9wdGlvbnMudGltZW91dCA9IG1zKG9wdGlvbnMudGltZW91dCk7XG4gICAgb3B0aW9ucy5mcmVlU29ja2V0VGltZW91dCA9IG1zKG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQpO1xuICAgIG9wdGlvbnMuc29ja2V0QWN0aXZlVFRMID0gb3B0aW9ucy5zb2NrZXRBY3RpdmVUVEwgPyBtcyhvcHRpb25zLnNvY2tldEFjdGl2ZVRUTCkgOiAwO1xuXG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzW0NVUlJFTlRfSURdID0gMDtcblxuICAgIC8vIGNyZWF0ZSBzb2NrZXQgc3VjY2VzcyBjb3VudGVyXG4gICAgdGhpcy5jcmVhdGVTb2NrZXRDb3VudCA9IDA7XG4gICAgdGhpcy5jcmVhdGVTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnQgPSAwO1xuICAgIHRoaXMuY3JlYXRlU29ja2V0RXJyb3JDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICB0aGlzLmNsb3NlU29ja2V0Q291bnQgPSAwO1xuICAgIHRoaXMuY2xvc2VTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICAvLyBzb2NrZXQgZXJyb3IgZXZlbnQgY291bnRcbiAgICB0aGlzLmVycm9yU29ja2V0Q291bnQgPSAwO1xuICAgIHRoaXMuZXJyb3JTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICAvLyByZXF1ZXN0IGZpbmlzaGVkIGNvdW50ZXJcbiAgICB0aGlzLnJlcXVlc3RDb3VudCA9IDA7XG4gICAgdGhpcy5yZXF1ZXN0Q291bnRMYXN0Q2hlY2sgPSAwO1xuXG4gICAgLy8gaW5jbHVkaW5nIGZyZWUgc29ja2V0IHRpbWVvdXQgY291bnRlclxuICAgIHRoaXMudGltZW91dFNvY2tldENvdW50ID0gMDtcbiAgICB0aGlzLnRpbWVvdXRTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICB0aGlzLm9uKCdmcmVlJywgc29ja2V0ID0+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMyMDAwXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBhZ2VudCB3aWxsIGNoZWNrIHNvY2tldCB0aW1lb3V0IGVxcyBhZ2VudC5vcHRpb25zLnRpbWVvdXQuXG4gICAgICAvLyBVc2UgdGhlIHR0bCBvciBmcmVlU29ja2V0VGltZW91dCB0byBvdmVyd3JpdGUuXG4gICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jYWxjU29ja2V0VGltZW91dChzb2NrZXQpO1xuICAgICAgaWYgKHRpbWVvdXQgPiAwICYmIHNvY2tldC50aW1lb3V0ICE9PSB0aW1lb3V0KSB7XG4gICAgICAgIHNvY2tldC5zZXRUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZyZWVTb2NrZXRLZWVwQWxpdmVUaW1lb3V0KCkge1xuICAgIGRlcHJlY2F0ZSgnYWdlbnQuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBhZ2VudC5vcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0IGluc3RlYWQnKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0O1xuICB9XG5cbiAgZ2V0IHRpbWVvdXQoKSB7XG4gICAgZGVwcmVjYXRlKCdhZ2VudC50aW1lb3V0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgYWdlbnQub3B0aW9ucy50aW1lb3V0IGluc3RlYWQnKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpbWVvdXQ7XG4gIH1cblxuICBnZXQgc29ja2V0QWN0aXZlVFRMKCkge1xuICAgIGRlcHJlY2F0ZSgnYWdlbnQuc29ja2V0QWN0aXZlVFRMIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgYWdlbnQub3B0aW9ucy5zb2NrZXRBY3RpdmVUVEwgaW5zdGVhZCcpO1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc29ja2V0QWN0aXZlVFRMO1xuICB9XG5cbiAgY2FsY1NvY2tldFRpbWVvdXQoc29ja2V0KSB7XG4gICAgLyoqXG4gICAgICogcmV0dXJuIDw9IDA6IHNob3VsZCBmcmVlIHNvY2tldFxuICAgICAqIHJldHVybiA+IDA6IHNob3VsZCB1cGRhdGUgc29ja2V0IHRpbWVvdXRcbiAgICAgKiByZXR1cm4gdW5kZWZpbmVkOiBub3QgZmluZCBjdXN0b20gdGltZW91dFxuICAgICAqL1xuICAgIGxldCBmcmVlU29ja2V0VGltZW91dCA9IHRoaXMub3B0aW9ucy5mcmVlU29ja2V0VGltZW91dDtcbiAgICBjb25zdCBzb2NrZXRBY3RpdmVUVEwgPSB0aGlzLm9wdGlvbnMuc29ja2V0QWN0aXZlVFRMO1xuICAgIGlmIChzb2NrZXRBY3RpdmVUVEwpIHtcbiAgICAgIC8vIGNoZWNrIHNvY2tldEFjdGl2ZVRUTFxuICAgICAgY29uc3QgYWxpdmVUaW1lID0gRGF0ZS5ub3coKSAtIHNvY2tldFtTT0NLRVRfQ1JFQVRFRF9USU1FXTtcbiAgICAgIGNvbnN0IGRpZmYgPSBzb2NrZXRBY3RpdmVUVEwgLSBhbGl2ZVRpbWU7XG4gICAgICBpZiAoZGlmZiA8PSAwKSB7XG4gICAgICAgIHJldHVybiBkaWZmO1xuICAgICAgfVxuICAgICAgaWYgKGZyZWVTb2NrZXRUaW1lb3V0ICYmIGRpZmYgPCBmcmVlU29ja2V0VGltZW91dCkge1xuICAgICAgICBmcmVlU29ja2V0VGltZW91dCA9IGRpZmY7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBmcmVlU29ja2V0VGltZW91dFxuICAgIGlmIChmcmVlU29ja2V0VGltZW91dCkge1xuICAgICAgLy8gc2V0IGZyZWUga2VlcGFsaXZlIHRpbWVyXG4gICAgICAvLyB0cnkgdG8gdXNlIHNvY2tldCBjdXN0b20gZnJlZVNvY2tldFRpbWVvdXQgZmlyc3QsIHN1cHBvcnQgaGVhZGVyc1sna2VlcC1hbGl2ZSddXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1tb2R1bGVzL3VybGxpYi9ibG9iL2I3NjA1MzAyMDkyM2Y0ZDk5YTFjOTNjZjJlMTZlMGM1YmExMGJhY2YvbGliL3VybGxpYi5qcyNMNDk4XG4gICAgICBjb25zdCBjdXN0b21GcmVlU29ja2V0VGltZW91dCA9IHNvY2tldC5mcmVlU29ja2V0VGltZW91dCB8fCBzb2NrZXQuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQ7XG4gICAgICByZXR1cm4gY3VzdG9tRnJlZVNvY2tldFRpbWVvdXQgfHwgZnJlZVNvY2tldFRpbWVvdXQ7XG4gICAgfVxuICB9XG5cbiAga2VlcFNvY2tldEFsaXZlKHNvY2tldCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmtlZXBTb2NrZXRBbGl2ZShzb2NrZXQpO1xuICAgIC8vIHNob3VsZCBub3Qga2VlcEFsaXZlLCBkbyBub3RoaW5nXG4gICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cbiAgICBjb25zdCBjdXN0b21UaW1lb3V0ID0gdGhpcy5jYWxjU29ja2V0VGltZW91dChzb2NrZXQpO1xuICAgIGlmICh0eXBlb2YgY3VzdG9tVGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY3VzdG9tVGltZW91dCA8PSAwKSB7XG4gICAgICBkZWJ1ZygnJXMocmVxdWVzdHM6ICVzLCBmaW5pc2hlZDogJXMpIGZyZWUgYnV0IG5lZWQgdG8gZGVzdHJveSBieSBUVEwsIHJlcXVlc3QgY291bnQgJXMsIGRpZmYgaXMgJXMnLFxuICAgICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdLCBjdXN0b21UaW1lb3V0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHNvY2tldC50aW1lb3V0ICE9PSBjdXN0b21UaW1lb3V0KSB7XG4gICAgICBzb2NrZXQuc2V0VGltZW91dChjdXN0b21UaW1lb3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBvbmx5IGNhbGwgb24gYWRkUmVxdWVzdFxuICByZXVzZVNvY2tldCguLi5hcmdzKSB7XG4gICAgLy8gcmV1c2VTb2NrZXQoc29ja2V0LCByZXEpXG4gICAgc3VwZXIucmV1c2VTb2NrZXQoLi4uYXJncyk7XG4gICAgY29uc3Qgc29ja2V0ID0gYXJnc1swXTtcbiAgICBjb25zdCByZXEgPSBhcmdzWzFdO1xuICAgIHJlcS5yZXVzZWRTb2NrZXQgPSB0cnVlO1xuICAgIGNvbnN0IGFnZW50VGltZW91dCA9IHRoaXMub3B0aW9ucy50aW1lb3V0O1xuICAgIGlmIChnZXRTb2NrZXRUaW1lb3V0KHNvY2tldCkgIT09IGFnZW50VGltZW91dCkge1xuICAgICAgLy8gcmVzZXQgdGltZW91dCBiZWZvcmUgdXNlXG4gICAgICBzb2NrZXQuc2V0VGltZW91dChhZ2VudFRpbWVvdXQpO1xuICAgICAgZGVidWcoJyVzIHJlc2V0IHRpbWVvdXQgdG8gJXNtcycsIHNvY2tldFtTT0NLRVRfTkFNRV0sIGFnZW50VGltZW91dCk7XG4gICAgfVxuICAgIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0rKztcbiAgICBkZWJ1ZygnJXMocmVxdWVzdHM6ICVzLCBmaW5pc2hlZDogJXMpIHJldXNlIG9uIGFkZFJlcXVlc3QsIHRpbWVvdXQgJXNtcycsXG4gICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdLFxuICAgICAgZ2V0U29ja2V0VGltZW91dChzb2NrZXQpKTtcbiAgfVxuXG4gIFtDUkVBVEVfSURdKCkge1xuICAgIGNvbnN0IGlkID0gdGhpc1tDVVJSRU5UX0lEXSsrO1xuICAgIGlmICh0aGlzW0NVUlJFTlRfSURdID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgdGhpc1tDVVJSRU5UX0lEXSA9IDA7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgW0lOSVRfU09DS0VUXShzb2NrZXQsIG9wdGlvbnMpIHtcbiAgICAvLyBidWdmaXggaGVyZS5cbiAgICAvLyBodHRwcyBvbiBub2RlIDgsIDEwIHdvbid0IHNldCBhZ2VudC5vcHRpb25zLnRpbWVvdXQgYnkgZGVmYXVsdFxuICAgIC8vIFRPRE86IG5lZWQgdG8gZml4IG9uIG5vZGUgaXRzZWxmXG4gICAgaWYgKG9wdGlvbnMudGltZW91dCkge1xuICAgICAgY29uc3QgdGltZW91dCA9IGdldFNvY2tldFRpbWVvdXQoc29ja2V0KTtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICBzb2NrZXQuc2V0VGltZW91dChvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcEFsaXZlKSB7XG4gICAgICAvLyBEaXNhYmxlIE5hZ2xlJ3MgYWxnb3JpdGhtOiBodHRwOi8vYmxvZy5jYXVzdGlrLmNvbS8yMDEyLzA0LzA4L3NjYWxpbmctbm9kZS1qcy10by0xMDBrLWNvbmN1cnJlbnQtY29ubmVjdGlvbnMvXG4gICAgICAvLyBodHRwczovL2ZlbmdtazIuY29tL2JlbmNobWFyay9uYWdsZS1hbGdvcml0aG0tZGVsYXllZC1hY2stbW9jay5odG1sXG4gICAgICBzb2NrZXQuc2V0Tm9EZWxheSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVTb2NrZXRDb3VudCsrO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29ja2V0QWN0aXZlVFRMKSB7XG4gICAgICBzb2NrZXRbU09DS0VUX0NSRUFURURfVElNRV0gPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgICAvLyBkb24ndCBzaG93IHRoZSBob2xlICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLScga2V5IHN0cmluZ1xuICAgIHNvY2tldFtTT0NLRVRfTkFNRV0gPSBgc29ja1ske3RoaXNbQ1JFQVRFX0lEXSgpfSMke29wdGlvbnMuX2FnZW50S2V5fV1gLnNwbGl0KCctLS0tLUJFR0lOJywgMSlbMF07XG4gICAgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSA9IDE7XG4gICAgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSA9IDA7XG4gICAgaW5zdGFsbExpc3RlbmVycyh0aGlzLCBzb2NrZXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgY3JlYXRlQ29ubmVjdGlvbihvcHRpb25zLCBvbmNyZWF0ZSkge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvbk5ld0NyZWF0ZSA9IChlcnIsIHNvY2tldCkgPT4ge1xuICAgICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnQrKztcbiAgICAgICAgcmV0dXJuIG9uY3JlYXRlKGVycik7XG4gICAgICB9XG4gICAgICB0aGlzW0lOSVRfU09DS0VUXShzb2NrZXQsIG9wdGlvbnMpO1xuICAgICAgb25jcmVhdGUoZXJyLCBzb2NrZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdTb2NrZXQgPSBzdXBlci5jcmVhdGVDb25uZWN0aW9uKG9wdGlvbnMsIG9uTmV3Q3JlYXRlKTtcbiAgICBpZiAobmV3U29ja2V0KSBvbk5ld0NyZWF0ZShudWxsLCBuZXdTb2NrZXQpO1xuICAgIHJldHVybiBuZXdTb2NrZXQ7XG4gIH1cblxuICBnZXQgc3RhdHVzQ2hhbmdlZCgpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5jcmVhdGVTb2NrZXRDb3VudCAhPT0gdGhpcy5jcmVhdGVTb2NrZXRDb3VudExhc3RDaGVjayB8fFxuICAgICAgdGhpcy5jcmVhdGVTb2NrZXRFcnJvckNvdW50ICE9PSB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnRMYXN0Q2hlY2sgfHxcbiAgICAgIHRoaXMuY2xvc2VTb2NrZXRDb3VudCAhPT0gdGhpcy5jbG9zZVNvY2tldENvdW50TGFzdENoZWNrIHx8XG4gICAgICB0aGlzLmVycm9yU29ja2V0Q291bnQgIT09IHRoaXMuZXJyb3JTb2NrZXRDb3VudExhc3RDaGVjayB8fFxuICAgICAgdGhpcy50aW1lb3V0U29ja2V0Q291bnQgIT09IHRoaXMudGltZW91dFNvY2tldENvdW50TGFzdENoZWNrIHx8XG4gICAgICB0aGlzLnJlcXVlc3RDb3VudCAhPT0gdGhpcy5yZXF1ZXN0Q291bnRMYXN0Q2hlY2s7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlU29ja2V0Q291bnRMYXN0Q2hlY2sgPSB0aGlzLmNyZWF0ZVNvY2tldENvdW50O1xuICAgICAgdGhpcy5jcmVhdGVTb2NrZXRFcnJvckNvdW50TGFzdENoZWNrID0gdGhpcy5jcmVhdGVTb2NrZXRFcnJvckNvdW50O1xuICAgICAgdGhpcy5jbG9zZVNvY2tldENvdW50TGFzdENoZWNrID0gdGhpcy5jbG9zZVNvY2tldENvdW50O1xuICAgICAgdGhpcy5lcnJvclNvY2tldENvdW50TGFzdENoZWNrID0gdGhpcy5lcnJvclNvY2tldENvdW50O1xuICAgICAgdGhpcy50aW1lb3V0U29ja2V0Q291bnRMYXN0Q2hlY2sgPSB0aGlzLnRpbWVvdXRTb2NrZXRDb3VudDtcbiAgICAgIHRoaXMucmVxdWVzdENvdW50TGFzdENoZWNrID0gdGhpcy5yZXF1ZXN0Q291bnQ7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgZ2V0Q3VycmVudFN0YXR1cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlU29ja2V0Q291bnQ6IHRoaXMuY3JlYXRlU29ja2V0Q291bnQsXG4gICAgICBjcmVhdGVTb2NrZXRFcnJvckNvdW50OiB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnQsXG4gICAgICBjbG9zZVNvY2tldENvdW50OiB0aGlzLmNsb3NlU29ja2V0Q291bnQsXG4gICAgICBlcnJvclNvY2tldENvdW50OiB0aGlzLmVycm9yU29ja2V0Q291bnQsXG4gICAgICB0aW1lb3V0U29ja2V0Q291bnQ6IHRoaXMudGltZW91dFNvY2tldENvdW50LFxuICAgICAgcmVxdWVzdENvdW50OiB0aGlzLnJlcXVlc3RDb3VudCxcbiAgICAgIGZyZWVTb2NrZXRzOiBpbnNwZWN0KHRoaXMuZnJlZVNvY2tldHMpLFxuICAgICAgc29ja2V0czogaW5zcGVjdCh0aGlzLnNvY2tldHMpLFxuICAgICAgcmVxdWVzdHM6IGluc3BlY3QodGhpcy5yZXF1ZXN0cyksXG4gICAgfTtcbiAgfVxufVxuXG4vLyBub2RlIDggZG9uJ3QgaGFzIHRpbWVvdXQgYXR0cmlidXRlIG9uIHNvY2tldFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMjEyMDQvZmlsZXMjZGlmZi1lNmVmMDI0YzM3NzVkNzg3YzM4NDg3YTYzMDllNDkxZFI0MDhcbmZ1bmN0aW9uIGdldFNvY2tldFRpbWVvdXQoc29ja2V0KSB7XG4gIHJldHVybiBzb2NrZXQudGltZW91dCB8fCBzb2NrZXQuX2lkbGVUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsTGlzdGVuZXJzKGFnZW50LCBzb2NrZXQsIG9wdGlvbnMpIHtcbiAgZGVidWcoJyVzIGNyZWF0ZSwgdGltZW91dCAlc21zJywgc29ja2V0W1NPQ0tFVF9OQU1FXSwgZ2V0U29ja2V0VGltZW91dChzb2NrZXQpKTtcblxuICAvLyBsaXN0ZW5lciBzb2NrZXQgZXZlbnRzOiBjbG9zZSwgdGltZW91dCwgZXJyb3IsIGZyZWVcbiAgZnVuY3Rpb24gb25GcmVlKCkge1xuICAgIC8vIGNyZWF0ZSBhbmQgc29ja2V0LmVtaXQoJ2ZyZWUnKSBsb2dpY1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvX2h0dHBfYWdlbnQuanMjTDMxMVxuICAgIC8vIG5vIHJlcSBvbiB0aGUgc29ja2V0LCBpdCBzaG91bGQgYmUgdGhlIG5ldyBzb2NrZXRcbiAgICBpZiAoIXNvY2tldC5faHR0cE1lc3NhZ2UgJiYgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSA9PT0gMSkgcmV0dXJuO1xuXG4gICAgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSsrO1xuICAgIGFnZW50LnJlcXVlc3RDb3VudCsrO1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgZnJlZScsXG4gICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdKTtcblxuICAgIC8vIHNob3VsZCByZXVzZSBvbiBwZWRkaW5nIHJlcXVlc3RzP1xuICAgIGNvbnN0IG5hbWUgPSBhZ2VudC5nZXROYW1lKG9wdGlvbnMpO1xuICAgIGlmIChzb2NrZXQud3JpdGFibGUgJiYgYWdlbnQucmVxdWVzdHNbbmFtZV0gJiYgYWdlbnQucmVxdWVzdHNbbmFtZV0ubGVuZ3RoKSB7XG4gICAgICAvLyB3aWxsIGJlIHJldXNlIG9uIGFnZW50IGZyZWUgbGlzdGVuZXJcbiAgICAgIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0rKztcbiAgICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgd2lsbCBiZSByZXVzZSBvbiBhZ2VudCBmcmVlIGV2ZW50JyxcbiAgICAgICAgc29ja2V0W1NPQ0tFVF9OQU1FXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSk7XG4gICAgfVxuICB9XG4gIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG5cbiAgZnVuY3Rpb24gb25DbG9zZShpc0Vycm9yKSB7XG4gICAgZGVidWcoJyVzKHJlcXVlc3RzOiAlcywgZmluaXNoZWQ6ICVzKSBjbG9zZSwgaXNFcnJvcjogJXMnLFxuICAgICAgc29ja2V0W1NPQ0tFVF9OQU1FXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSwgaXNFcnJvcik7XG4gICAgYWdlbnQuY2xvc2VTb2NrZXRDb3VudCsrO1xuICB9XG4gIHNvY2tldC5vbignY2xvc2UnLCBvbkNsb3NlKTtcblxuICAvLyBzdGFydCBzb2NrZXQgdGltZW91dCBoYW5kbGVyXG4gIGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAvLyBvblRpbWVvdXQgYW5kIGVtaXRSZXF1ZXN0VGltZW91dChfaHR0cF9jbGllbnQuanMpXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjEyLngvbGliL19odHRwX2NsaWVudC5qcyNMNzExXG4gICAgY29uc3QgbGlzdGVuZXJDb3VudCA9IHNvY2tldC5saXN0ZW5lcnMoJ3RpbWVvdXQnKS5sZW5ndGg7XG4gICAgLy8gbm9kZSA8PSAxMCwgZGVmYXVsdCBsaXN0ZW5lckNvdW50IGlzIDEsIG9uVGltZW91dFxuICAgIC8vIDExIDwgbm9kZSA8PSAxMiwgZGVmYXVsdCBsaXN0ZW5lckNvdW50IGlzIDIsIG9uVGltZW91dCBhbmQgZW1pdFJlcXVlc3RUaW1lb3V0XG4gICAgLy8gbm9kZSA+PSAxMywgZGVmYXVsdCBsaXN0ZW5lckNvdW50IGlzIDMsIG9uVGltZW91dCxcbiAgICAvLyAgIG9uVGltZW91dChodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zMjAwMC9maWxlcyNkaWZmLTVmN2ZiMDg1MDQxMmM2YmUxODlmYWVkZGVhNmM1MzU5UjMzMylcbiAgICAvLyAgIGFuZCBlbWl0UmVxdWVzdFRpbWVvdXRcbiAgICBjb25zdCB0aW1lb3V0ID0gZ2V0U29ja2V0VGltZW91dChzb2NrZXQpO1xuICAgIGNvbnN0IHJlcSA9IHNvY2tldC5faHR0cE1lc3NhZ2U7XG4gICAgY29uc3QgcmVxVGltZW91dExpc3RlbmVyQ291bnQgPSByZXEgJiYgcmVxLmxpc3RlbmVycygndGltZW91dCcpLmxlbmd0aCB8fCAwO1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgdGltZW91dCBhZnRlciAlc21zLCBsaXN0ZW5lcnMgJXMsIGRlZmF1bHRUaW1lb3V0TGlzdGVuZXJDb3VudCAlcywgaGFzSHR0cFJlcXVlc3QgJXMsIEh0dHBSZXF1ZXN0IHRpbWVvdXRMaXN0ZW5lckNvdW50ICVzJyxcbiAgICAgIHNvY2tldFtTT0NLRVRfTkFNRV0sIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0sIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9GSU5JU0hFRF9DT1VOVF0sXG4gICAgICB0aW1lb3V0LCBsaXN0ZW5lckNvdW50LCBkZWZhdWx0VGltZW91dExpc3RlbmVyQ291bnQsICEhcmVxLCByZXFUaW1lb3V0TGlzdGVuZXJDb3VudCk7XG4gICAgaWYgKGRlYnVnLmVuYWJsZWQpIHtcbiAgICAgIGRlYnVnKCd0aW1lb3V0IGxpc3RlbmVyczogJXMnLCBzb2NrZXQubGlzdGVuZXJzKCd0aW1lb3V0JykubWFwKGYgPT4gZi5uYW1lKS5qb2luKCcsICcpKTtcbiAgICB9XG4gICAgYWdlbnQudGltZW91dFNvY2tldENvdW50Kys7XG4gICAgY29uc3QgbmFtZSA9IGFnZW50LmdldE5hbWUob3B0aW9ucyk7XG4gICAgaWYgKGFnZW50LmZyZWVTb2NrZXRzW25hbWVdICYmIGFnZW50LmZyZWVTb2NrZXRzW25hbWVdLmluZGV4T2Yoc29ja2V0KSAhPT0gLTEpIHtcbiAgICAgIC8vIGZyZWUgc29ja2V0IHRpbWVvdXQsIGRlc3Ryb3kgcXVpZXRseVxuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIC8vIFJlbW92ZSBpdCBmcm9tIGZyZWVTb2NrZXRzIGxpc3QgaW1tZWRpYXRlbHkgdG8gcHJldmVudCBuZXcgcmVxdWVzdHNcbiAgICAgIC8vIGZyb20gYmVpbmcgc2VudCB0aHJvdWdoIHRoaXMgc29ja2V0LlxuICAgICAgYWdlbnQucmVtb3ZlU29ja2V0KHNvY2tldCwgb3B0aW9ucyk7XG4gICAgICBkZWJ1ZygnJXMgaXMgZnJlZSwgZGVzdHJveSBxdWlldGx5Jywgc29ja2V0W1NPQ0tFVF9OQU1FXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGFueSByZXF1ZXN0IHNvY2tldCB0aW1lb3V0IGhhbmRsZXIsXG4gICAgICAvLyBhZ2VudCBuZWVkIHRvIGhhbmRsZSBzb2NrZXQgdGltZW91dCBpdHNlbGYuXG4gICAgICAvL1xuICAgICAgLy8gY3VzdG9tIHJlcXVlc3Qgc29ja2V0IHRpbWVvdXQgaGFuZGxlIGxvZ2ljIG11c3QgZm9sbG93IHRoZXNlIHJ1bGVzOlxuICAgICAgLy8gIDEuIERlc3Ryb3kgc29ja2V0IGZpcnN0XG4gICAgICAvLyAgMi4gTXVzdCBlbWl0IHNvY2tldCAnYWdlbnRSZW1vdmUnIGV2ZW50IHRlbGwgYWdlbnQgcmVtb3ZlIHNvY2tldFxuICAgICAgLy8gICAgIGZyb20gZnJlZVNvY2tldHMgbGlzdCBpbW1lZGlhdGVseS5cbiAgICAgIC8vICAgICBPdGhlcmlzZSB5b3UgbWF5IGJlIGdldCAnc29ja2V0IGhhbmcgdXAnIGVycm9yIHdoZW4gcmV1c2VcbiAgICAgIC8vICAgICBmcmVlIHNvY2tldCBhbmQgdGltZW91dCBoYXBwZW4gaW4gdGhlIHNhbWUgdGltZS5cbiAgICAgIGlmIChyZXFUaW1lb3V0TGlzdGVuZXJDb3VudCA9PT0gMCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignU29ja2V0IHRpbWVvdXQnKTtcbiAgICAgICAgZXJyb3IuY29kZSA9ICdFUlJfU09DS0VUX1RJTUVPVVQnO1xuICAgICAgICBlcnJvci50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgLy8gbXVzdCBtYW51YWxseSBjYWxsIHNvY2tldC5lbmQoKSBvciBzb2NrZXQuZGVzdHJveSgpIHRvIGVuZCB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxMC54L2RvY3MvYXBpL25ldC5odG1sI25ldF9zb2NrZXRfc2V0dGltZW91dF90aW1lb3V0X2NhbGxiYWNrXG4gICAgICAgIHNvY2tldC5kZXN0cm95KGVycm9yKTtcbiAgICAgICAgYWdlbnQucmVtb3ZlU29ja2V0KHNvY2tldCwgb3B0aW9ucyk7XG4gICAgICAgIGRlYnVnKCclcyBkZXN0cm95IHdpdGggdGltZW91dCBlcnJvcicsIHNvY2tldFtTT0NLRVRfTkFNRV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzb2NrZXQub24oJ3RpbWVvdXQnLCBvblRpbWVvdXQpO1xuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgY29uc3QgbGlzdGVuZXJDb3VudCA9IHNvY2tldC5saXN0ZW5lcnMoJ2Vycm9yJykubGVuZ3RoO1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgZXJyb3I6ICVzLCBsaXN0ZW5lckNvdW50OiAlcycsXG4gICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdLFxuICAgICAgZXJyLCBsaXN0ZW5lckNvdW50KTtcbiAgICBhZ2VudC5lcnJvclNvY2tldENvdW50Kys7XG4gICAgaWYgKGxpc3RlbmVyQ291bnQgPT09IDEpIHtcbiAgICAgIC8vIGlmIHNvY2tldCBkb24ndCBjb250YWluIGVycm9yIGV2ZW50IGhhbmRsZXIsIGRvbid0IGNhdGNoIGl0LCBlbWl0IGl0IGFnYWluXG4gICAgICBkZWJ1ZygnJXMgZW1pdCB1bmNhdWdodCBlcnJvciBldmVudCcsIHNvY2tldFtTT0NLRVRfTkFNRV0pO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc29ja2V0LmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9XG4gIH1cbiAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuXG4gIGZ1bmN0aW9uIG9uUmVtb3ZlKCkge1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgYWdlbnRSZW1vdmUnLFxuICAgICAgc29ja2V0W1NPQ0tFVF9OQU1FXSxcbiAgICAgIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0sIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9GSU5JU0hFRF9DT1VOVF0pO1xuICAgIC8vIFdlIG5lZWQgdGhpcyBmdW5jdGlvbiBmb3IgY2FzZXMgbGlrZSBIVFRQICd1cGdyYWRlJ1xuICAgIC8vIChkZWZpbmVkIGJ5IFdlYlNvY2tldHMpIHdoZXJlIHdlIG5lZWQgdG8gcmVtb3ZlIGEgc29ja2V0IGZyb20gdGhlXG4gICAgLy8gcG9vbCBiZWNhdXNlIGl0J2xsIGJlIGxvY2tlZCB1cCBpbmRlZmluaXRlbHlcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZSk7XG4gICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCd0aW1lb3V0Jywgb25UaW1lb3V0KTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25SZW1vdmUpO1xuICB9XG4gIHNvY2tldC5vbignYWdlbnRSZW1vdmUnLCBvblJlbW92ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnQ7XG5cbmZ1bmN0aW9uIGluc3BlY3Qob2JqKSB7XG4gIGNvbnN0IHJlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICByZXNba2V5XSA9IG9ialtrZXldLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IE9yaWdpbmFsSHR0cHNBZ2VudCA9IHJlcXVpcmUoJ2h0dHBzJykuQWdlbnQ7XG5jb25zdCBIdHRwQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50Jyk7XG5jb25zdCB7XG4gIElOSVRfU09DS0VULFxuICBDUkVBVEVfSFRUUFNfQ09OTkVDVElPTixcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5jbGFzcyBIdHRwc0FnZW50IGV4dGVuZHMgSHR0cEFnZW50IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgICB0aGlzLnByb3RvY29sID0gJ2h0dHBzOic7XG4gICAgdGhpcy5tYXhDYWNoZWRTZXNzaW9ucyA9IHRoaXMub3B0aW9ucy5tYXhDYWNoZWRTZXNzaW9ucztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLm1heENhY2hlZFNlc3Npb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWF4Q2FjaGVkU2Vzc2lvbnMgPSAxMDA7XG4gICAgfVxuXG4gICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0ge1xuICAgICAgbWFwOiB7fSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgIH07XG4gIH1cblxuICBjcmVhdGVDb25uZWN0aW9uKG9wdGlvbnMsIG9uY3JlYXRlKSB7XG4gICAgY29uc3Qgc29ja2V0ID0gdGhpc1tDUkVBVEVfSFRUUFNfQ09OTkVDVElPTl0ob3B0aW9ucywgb25jcmVhdGUpO1xuICAgIHRoaXNbSU5JVF9TT0NLRVRdKHNvY2tldCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfVxufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL2h0dHBzLmpzI0w4OVxuSHR0cHNBZ2VudC5wcm90b3R5cGVbQ1JFQVRFX0hUVFBTX0NPTk5FQ1RJT05dID0gT3JpZ2luYWxIdHRwc0FnZW50LnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uO1xuXG5bXG4gICdnZXROYW1lJyxcbiAgJ19nZXRTZXNzaW9uJyxcbiAgJ19jYWNoZVNlc3Npb24nLFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80OTgyXG4gICdfZXZpY3RTZXNzaW9uJyxcbl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBPcmlnaW5hbEh0dHBzQWdlbnQucHJvdG90eXBlW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBIdHRwc0FnZW50LnByb3RvdHlwZVttZXRob2RdID0gT3JpZ2luYWxIdHRwc0FnZW50LnByb3RvdHlwZVttZXRob2RdO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBIdHRwc0FnZW50O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKTtcbm1vZHVsZS5leHBvcnRzLkh0dHBzQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9odHRwc19hZ2VudCcpO1xubW9kdWxlLmV4cG9ydHMuY29uc3RhbnRzID0gcmVxdWlyZSgnLi9saWIvY29uc3RhbnRzJyk7XG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBAY29weXJpZ2h0IDIwMTUgVG9ydSBOYWdhc2hpbWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcml2YXRlRGF0YVxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBldmVudFBoYXNlIFRoZSBjdXJyZW50IGV2ZW50IHBoYXNlLlxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IFRoZSBjdXJyZW50IGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2FuY2VsZWQgVGhlIGZsYWcgdG8gcHJldmVudCBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBzdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVN0b3BwZWQgVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb258bnVsbH0gcGFzc2l2ZUxpc3RlbmVyIFRoZSBsaXN0ZW5lciBpZiB0aGUgY3VycmVudCBsaXN0ZW5lciBpcyBwYXNzaXZlLiBPdGhlcndpc2UgdGhpcyBpcyBudWxsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVTdGFtcCBUaGUgdW5peCB0aW1lLlxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIFByaXZhdGUgZGF0YSBmb3IgZXZlbnQgd3JhcHBlcnMuXG4gKiBAdHlwZSB7V2Vha01hcDxFdmVudCwgUHJpdmF0ZURhdGE+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIENhY2hlIGZvciB3cmFwcGVyIGNsYXNzZXMuXG4gKiBAdHlwZSB7V2Vha01hcDxPYmplY3QsIEZ1bmN0aW9uPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdyYXBwZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBHZXQgcHJpdmF0ZSBkYXRhLlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCB0byBnZXQgcHJpdmF0ZSBkYXRhLlxuICogQHJldHVybnMge1ByaXZhdGVEYXRhfSBUaGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBkKGV2ZW50KSB7XG4gICAgY29uc3QgcmV0diA9IHByaXZhdGVEYXRhLmdldChldmVudCk7XG4gICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHJldHYgIT0gbnVsbCxcbiAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnQgb2JqZWN0LCBidXQgZ290XCIsXG4gICAgICAgIGV2ZW50XG4gICAgKTtcbiAgICByZXR1cm4gcmV0dlxufVxuXG4vKipcbiAqIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2V0LXRoZS1jYW5jZWxlZC1mbGFnXG4gKiBAcGFyYW0gZGF0YSB7UHJpdmF0ZURhdGF9IHByaXZhdGUgZGF0YS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FuY2VsRmxhZyhkYXRhKSB7XG4gICAgaWYgKGRhdGEucGFzc2l2ZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5hYmxlIHRvIHByZXZlbnREZWZhdWx0IGluc2lkZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyIGludm9jYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgZGF0YS5wYXNzaXZlTGlzdGVuZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZGF0YS5ldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRhdGEuY2FuY2VsZWQgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5wcmV2ZW50RGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ldmVudFxuICogQHByaXZhdGVcbiAqL1xuLyoqXG4gKiBUaGUgZXZlbnQgd3JhcHBlci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgcHJpdmF0ZURhdGEuc2V0KHRoaXMsIHtcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFBoYXNlOiAyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgaW1tZWRpYXRlU3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHBhc3NpdmVMaXN0ZW5lcjogbnVsbCxcbiAgICAgICAgdGltZVN0YW1wOiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1VuZm9yZ2VhYmxlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNUcnVzdGVkXCIsIHsgdmFsdWU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29yc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhldmVudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50LnR5cGVcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmN1cnJlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge0V2ZW50VGFyZ2V0W119IFRoZSBjb21wb3NlZCBwYXRoIG9mIHRoaXMgZXZlbnQuXG4gICAgICovXG4gICAgY29tcG9zZWRQYXRoKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gcGQodGhpcykuY3VycmVudFRhcmdldDtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjdXJyZW50VGFyZ2V0XVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBOT05FLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IE5PTkUoKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIENBUFRVUklOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBDQVBUVVJJTkdfUEhBU0UoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEFUX1RBUkdFVC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBBVF9UQVJHRVQoKSB7XG4gICAgICAgIHJldHVybiAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEJVQkJMSU5HX1BIQVNFLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IEJVQkJMSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gM1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgZXZlbnRQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50UGhhc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBkYXRhLmltbWVkaWF0ZVN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgYnViYmxpbmcuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGJ1YmJsZXMoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmJ1YmJsZXMpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNhbmNlbGFibGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmNhbmNlbGFibGUpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbmNlbCB0aGlzIGV2ZW50LlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICBzZXRDYW5jZWxGbGFnKHBkKHRoaXMpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuY2FuY2VsZWRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgY29tcG9zZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNvbXBvc2VkKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jb21wb3NlZClcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaXggdGltZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IHRpbWVTdGFtcCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnRpbWVTdGFtcFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHNyY0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFRhcmdldFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBzdG9wIGV2ZW50IGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbEJ1YmJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnN0b3BwZWRcbiAgICB9LFxuICAgIHNldCBjYW5jZWxCdWJibGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHBkKHRoaXMpO1xuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHJldHVyblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gIXBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcbiAgICBzZXQgcmV0dXJuVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGV2ZW50IG9iamVjdC4gQnV0IGRvIG5vdGhpbmcgdW5kZXIgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYnViYmxlcz1mYWxzZV0gVGhlIGZsYWcgdG8gYmUgcG9zc2libGUgdG8gYnViYmxlIHVwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbmNlbGFibGU9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGNhbmNlbC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGluaXRFdmVudCgpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudGAgaXMgYHRydWVgLlxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5FdmVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudC5wcm90b3R5cGUpO1xuXG4gICAgLy8gTWFrZSBhc3NvY2lhdGlvbiBmb3Igd3JhcHBlcnMuXG4gICAgd3JhcHBlcnMuc2V0KHdpbmRvdy5FdmVudC5wcm90b3R5cGUsIEV2ZW50KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gcmVkaXJlY3QgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IHRoZSBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgIHBkKHRoaXMpLmV2ZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gY2FsbCBhIGdpdmVuIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgdGhlIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUNhbGxEZXNjcmlwdG9yKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlKCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBwZCh0aGlzKS5ldmVudDtcbiAgICAgICAgICAgIHJldHVybiBldmVudFtrZXldLmFwcGx5KGV2ZW50LCBhcmd1bWVudHMpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIG5ldyB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQmFzZUV2ZW50IFRoZSBiYXNlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBkZWZpbmVkIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVXcmFwcGVyKEJhc2VFdmVudCwgcHJvdG8pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQmFzZUV2ZW50XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbUV2ZW50ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgICAgIEJhc2VFdmVudC5jYWxsKHRoaXMsIGV2ZW50VGFyZ2V0LCBldmVudCk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBDdXN0b21FdmVudCwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCEoa2V5IGluIEJhc2VFdmVudC5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGlzRnVuYyA9IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBpc0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgPyBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXZlbnRcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdyYXBwZXIgY2xhc3Mgb2YgYSBnaXZlbiBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZ2V0IGl0cyB3cmFwcGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgd3JhcHBlciBjbGFzcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBwZXIocHJvdG8pIHtcbiAgICBpZiAocHJvdG8gPT0gbnVsbCB8fCBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4gRXZlbnRcbiAgICB9XG5cbiAgICBsZXQgd3JhcHBlciA9IHdyYXBwZXJzLmdldChwcm90byk7XG4gICAgaWYgKHdyYXBwZXIgPT0gbnVsbCkge1xuICAgICAgICB3cmFwcGVyID0gZGVmaW5lV3JhcHBlcihnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykpLCBwcm90byk7XG4gICAgICAgIHdyYXBwZXJzLnNldChwcm90bywgd3JhcHBlcik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyXG59XG5cbi8qKlxuICogV3JhcCBhIGdpdmVuIGV2ZW50IHRvIG1hbmFnZW1lbnQgYSBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtFdmVudH0gVGhlIHdyYXBwZXIgaW5zdGFuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB3cmFwRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgY29uc3QgV3JhcHBlciA9IGdldFdyYXBwZXIoT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSk7XG4gICAgcmV0dXJuIG5ldyBXcmFwcGVyKGV2ZW50VGFyZ2V0LCBldmVudClcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGltbWVkaWF0ZVN0b3BwZWQgZmxhZyBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIGdldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uIGltbWVkaWF0ZWx5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTdG9wcGVkKGV2ZW50KSB7XG4gICAgcmV0dXJuIHBkKGV2ZW50KS5pbW1lZGlhdGVTdG9wcGVkXG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IGV2ZW50IHBoYXNlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50UGhhc2UgTmV3IGV2ZW50IHBoYXNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudFBoYXNlKGV2ZW50LCBldmVudFBoYXNlKSB7XG4gICAgcGQoZXZlbnQpLmV2ZW50UGhhc2UgPSBldmVudFBoYXNlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCB0YXJnZXQgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fG51bGx9IGN1cnJlbnRUYXJnZXQgTmV3IGN1cnJlbnQgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRDdXJyZW50VGFyZ2V0KGV2ZW50LCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgcGQoZXZlbnQpLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xufVxuXG4vKipcbiAqIFNldCBhIHBhc3NpdmUgbGlzdGVuZXIgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBOZXcgcGFzc2l2ZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0UGFzc2l2ZUxpc3RlbmVyKGV2ZW50LCBwYXNzaXZlTGlzdGVuZXIpIHtcbiAgICBwZChldmVudCkucGFzc2l2ZUxpc3RlbmVyID0gcGFzc2l2ZUxpc3RlbmVyO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpc3RlbmVyTm9kZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwcm9wZXJ0eSB7MXwyfDN9IGxpc3RlbmVyVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXNzaXZlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9uY2VcbiAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJOb2RlfG51bGx9IG5leHRcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT4+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbGlzdGVuZXJzTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuLy8gTGlzdGVuZXIgdHlwZXNcbmNvbnN0IENBUFRVUkUgPSAxO1xuY29uc3QgQlVCQkxFID0gMjtcbmNvbnN0IEFUVFJJQlVURSA9IDM7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCBvciBub3QuXG4gKiBAcGFyYW0ge2FueX0geCBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbn1cblxuLyoqXG4gKiBHZXQgbGlzdGVuZXJzLlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCB0byBnZXQuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgTGlzdGVuZXJOb2RlPn0gVGhlIGxpc3RlbmVycy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldExpc3RlbmVycyhldmVudFRhcmdldCkge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IGxpc3RlbmVyc01hcC5nZXQoZXZlbnRUYXJnZXQpO1xuICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnRUYXJnZXQgb2JqZWN0LCBidXQgZ290IGFub3RoZXIgdmFsdWUuXCJcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gbGlzdGVuZXJzXG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgZXZlbnQgYXR0cmlidXRlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGdldCBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubGlzdGVuZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuXG4gICAgICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSByZW1vdmluZyBvbGQgdmFsdWUuXG4gICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb2xkIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgbmV3IHZhbHVlLlxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyVHlwZTogQVRUUklCVVRFLFxuICAgICAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb25jZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbmV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIGFuIGV2ZW50IGF0dHJpYnV0ZSAoZS5nLiBgZXZlbnRUYXJnZXQub25jbGlja2ApLlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50VGFyZ2V0UHJvdG90eXBlIFRoZSBldmVudCB0YXJnZXQgcHJvdG90eXBlIHRvIGRlZmluZSBhbiBldmVudCBhdHRyYml0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gZGVmaW5lLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlZmluZUV2ZW50QXR0cmlidXRlKGV2ZW50VGFyZ2V0UHJvdG90eXBlLCBldmVudE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGV2ZW50VGFyZ2V0UHJvdG90eXBlLFxuICAgICAgICBgb24ke2V2ZW50TmFtZX1gLFxuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKVxuICAgICk7XG59XG5cbi8qKlxuICogRGVmaW5lIGEgY3VzdG9tIEV2ZW50VGFyZ2V0IHdpdGggZXZlbnQgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV2ZW50TmFtZXMgRXZlbnQgbmFtZXMgZm9yIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcmV0dXJucyB7RXZlbnRUYXJnZXR9IFRoZSBjdXN0b20gRXZlbnRUYXJnZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChldmVudE5hbWVzKSB7XG4gICAgLyoqIEN1c3RvbUV2ZW50VGFyZ2V0ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnRUYXJnZXQoKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnRUYXJnZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudFRhcmdldC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBDdXN0b21FdmVudFRhcmdldCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGRlZmluZUV2ZW50QXR0cmlidXRlKEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgZXZlbnROYW1lc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50VGFyZ2V0XG59XG5cbi8qKlxuICogRXZlbnRUYXJnZXQuXG4gKlxuICogLSBUaGlzIGlzIGNvbnN0cnVjdG9yIGlmIG5vIGFyZ3VtZW50cy5cbiAqIC0gVGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBDdXN0b21FdmVudFRhcmdldCBjb25zdHJ1Y3RvciBpZiB0aGVyZSBhcmUgYXJndW1lbnRzLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBjbGFzcyBBIGV4dGVuZHMgRXZlbnRUYXJnZXQge31cbiAqICAgICBjbGFzcyBCIGV4dGVuZHMgRXZlbnRUYXJnZXQoXCJtZXNzYWdlXCIpIHt9XG4gKiAgICAgY2xhc3MgQyBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiLCBcImVycm9yXCIpIHt9XG4gKiAgICAgY2xhc3MgRCBleHRlbmRzIEV2ZW50VGFyZ2V0KFtcIm1lc3NhZ2VcIiwgXCJlcnJvclwiXSkge31cbiAqL1xuZnVuY3Rpb24gRXZlbnRUYXJnZXQoKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgbGlzdGVuZXJzTWFwLnNldCh0aGlzLCBuZXcgTWFwKCkpO1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChhcmd1bWVudHNbMF0pXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHR5cGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldCh0eXBlcylcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKVxuICAgIC8qZXNsaW50LWVuYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnRUYXJnZXQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGdpdmVuIGxpc3RlbmVyIHRvIHRoaXMgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtib29sZWFufHtjYXB0dXJlPzpib29sZWFuLHBhc3NpdmU/OmJvb2xlYW4sb25jZT86Ym9vbGVhbn19IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhaXNPYmplY3QobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiJ2xpc3RlbmVyJyBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNJc09iaiA9IGlzT2JqZWN0KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjYXB0dXJlID0gb3B0aW9uc0lzT2JqXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgbGlzdGVuZXJUeXBlLFxuICAgICAgICAgICAgcGFzc2l2ZTogb3B0aW9uc0lzT2JqICYmIEJvb2xlYW4ob3B0aW9ucy5wYXNzaXZlKSxcbiAgICAgICAgICAgIG9uY2U6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMub25jZSksXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFNldCBpdCBhcyB0aGUgZmlyc3Qgbm9kZSBpZiB0aGUgZmlyc3Qgbm9kZSBpcyBudWxsLlxuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSBjaGVja2luZyBkdXBsaWNhdGlvbi4uXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gU2hvdWxkIGlnbm9yZSBkdXBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBpdC5cbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgZ2l2ZW4gbGlzdGVuZXIgZnJvbSB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGlzT2JqZWN0KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcblxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lciA9PT0gbGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSA9PT0gbGlzdGVuZXJUeXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIGEgZ2l2ZW4gZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgZXZlbnQgdG8gZGlzcGF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgY2FuY2VsZWQuXG4gICAgICovXG4gICAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJldmVudC50eXBlXCIgc2hvdWxkIGJlIGEgc3RyaW5nLicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBsaXN0ZW5lcnMgYXJlbid0IHJlZ2lzdGVyZWQsIHRlcm1pbmF0ZS5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBldmVudE5hbWUgPSBldmVudC50eXBlO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXdyaXRlIHNldmVyYWwgcHJvcGVydGllcywgc28gd3JhcCBvYmplY3QuXG4gICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IHdyYXBFdmVudCh0aGlzLCBldmVudCk7XG5cbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHByb2Nlc3MgY2FwdHVyaW5nIHBoYXNlIGFuZCBidWJibGluZyBwaGFzZS5cbiAgICAgICAgLy8gVGhpcyBpc24ndCBwYXJ0aWNpcGF0aW5nIGluIGEgdHJlZS5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBsaXN0ZW5lciBpZiBpdCdzIG9uY2VcbiAgICAgICAgICAgIGlmIChub2RlLm9uY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhpcyBsaXN0ZW5lclxuICAgICAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFdmVudCxcbiAgICAgICAgICAgICAgICBub2RlLnBhc3NpdmUgPyBub2RlLmxpc3RlbmVyIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5saXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5jYWxsKHRoaXMsIHdyYXBwZWRFdmVudCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSAhPT0gQVRUUklCVVRFICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5oYW5kbGVFdmVudCh3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCcmVhayBpZiBgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uYCB3YXMgY2FsbGVkLlxuICAgICAgICAgICAgaWYgKGlzU3RvcHBlZCh3cmFwcGVkRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRQYXNzaXZlTGlzdGVuZXIod3JhcHBlZEV2ZW50LCBudWxsKTtcbiAgICAgICAgc2V0RXZlbnRQaGFzZSh3cmFwcGVkRXZlbnQsIDApO1xuICAgICAgICBzZXRDdXJyZW50VGFyZ2V0KHdyYXBwZWRFdmVudCwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuICF3cmFwcGVkRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgIH0sXG59O1xuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50VGFyZ2V0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pO1xuXG4vLyBFbnN1cmUgYGV2ZW50VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkV2ZW50VGFyZ2V0YCBpcyBgdHJ1ZWAuXG5pZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiB3aW5kb3cuRXZlbnRUYXJnZXQgIT09IFwidW5kZWZpbmVkXCJcbikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudFRhcmdldC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUpO1xufVxuXG5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGU7XG5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gRXZlbnRUYXJnZXQ7XG5leHBvcnRzLmRlZmF1bHQgPSBFdmVudFRhcmdldDtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuRXZlbnRUYXJnZXQgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuZGVmaW5lRXZlbnRBdHRyaWJ1dGUgPSBkZWZpbmVFdmVudEF0dHJpYnV0ZVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnQtdGFyZ2V0LXNoaW0uanMubWFwXG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGV2ZW50VGFyZ2V0U2hpbSA9IHJlcXVpcmUoJ2V2ZW50LXRhcmdldC1zaGltJyk7XG5cbi8qKlxuICogVGhlIHNpZ25hbCBjbGFzcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydHNpZ25hbFxuICovXG5jbGFzcyBBYm9ydFNpZ25hbCBleHRlbmRzIGV2ZW50VGFyZ2V0U2hpbS5FdmVudFRhcmdldCB7XG4gICAgLyoqXG4gICAgICogQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGBBYm9ydFNpZ25hbGAncyBgQWJvcnRDb250cm9sbGVyYCBoYXMgc2lnbmFsZWQgdG8gYWJvcnQsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBnZXQgYWJvcnRlZCgpIHtcbiAgICAgICAgY29uc3QgYWJvcnRlZCA9IGFib3J0ZWRGbGFncy5nZXQodGhpcyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWJvcnRlZCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRTaWduYWwnIG9iamVjdCwgYnV0IGdvdCAke3RoaXMgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB0aGlzfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydGVkO1xuICAgIH1cbn1cbmV2ZW50VGFyZ2V0U2hpbS5kZWZpbmVFdmVudEF0dHJpYnV0ZShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFwiYWJvcnRcIik7XG4vKipcbiAqIENyZWF0ZSBhbiBBYm9ydFNpZ25hbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IHNpZ25hbCA9IE9iamVjdC5jcmVhdGUoQWJvcnRTaWduYWwucHJvdG90eXBlKTtcbiAgICBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQuY2FsbChzaWduYWwpO1xuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCBmYWxzZSk7XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8qKlxuICogQWJvcnQgYSBnaXZlbiBzaWduYWwuXG4gKi9cbmZ1bmN0aW9uIGFib3J0U2lnbmFsKHNpZ25hbCkge1xuICAgIGlmIChhYm9ydGVkRmxhZ3MuZ2V0KHNpZ25hbCkgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRlZEZsYWdzLnNldChzaWduYWwsIHRydWUpO1xuICAgIHNpZ25hbC5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJhYm9ydFwiIH0pO1xufVxuLyoqXG4gKiBBYm9ydGVkIGZsYWcgZm9yIGVhY2ggaW5zdGFuY2VzLlxuICovXG5jb25zdCBhYm9ydGVkRmxhZ3MgPSBuZXcgV2Vha01hcCgpO1xuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0U2lnbmFsLnByb3RvdHlwZSwge1xuICAgIGFib3J0ZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxufSk7XG4vLyBgdG9TdHJpbmcoKWAgc2hvdWxkIHJldHVybiBgXCJbb2JqZWN0IEFib3J0U2lnbmFsXVwiYFxuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0U2lnbmFsLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFwiQWJvcnRTaWduYWxcIixcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgQWJvcnRDb250cm9sbGVyLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0Y29udHJvbGxlclxuICovXG5jbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzaWduYWxzLnNldCh0aGlzLCBjcmVhdGVBYm9ydFNpZ25hbCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYEFib3J0U2lnbmFsYCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldCBzaWduYWwoKSB7XG4gICAgICAgIHJldHVybiBnZXRTaWduYWwodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0IGFuZCBzaWduYWwgdG8gYW55IG9ic2VydmVycyB0aGF0IHRoZSBhc3NvY2lhdGVkIGFjdGl2aXR5IGlzIHRvIGJlIGFib3J0ZWQuXG4gICAgICovXG4gICAgYWJvcnQoKSB7XG4gICAgICAgIGFib3J0U2lnbmFsKGdldFNpZ25hbCh0aGlzKSk7XG4gICAgfVxufVxuLyoqXG4gKiBBc3NvY2lhdGVkIHNpZ25hbHMuXG4gKi9cbmNvbnN0IHNpZ25hbHMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0ZWQgc2lnbmFsIG9mIGEgZ2l2ZW4gY29udHJvbGxlci5cbiAqL1xuZnVuY3Rpb24gZ2V0U2lnbmFsKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzaWduYWwgPSBzaWduYWxzLmdldChjb250cm9sbGVyKTtcbiAgICBpZiAoc2lnbmFsID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJ3RoaXMnIHRvIGJlIGFuICdBYm9ydENvbnRyb2xsZXInIG9iamVjdCwgYnV0IGdvdCAke2NvbnRyb2xsZXIgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBjb250cm9sbGVyfWApO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmFsO1xufVxuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIHtcbiAgICBzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGFib3J0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0Q29udHJvbGxlclwiLFxuICAgIH0pO1xufVxuXG5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlcjtcbmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDtcbmV4cG9ydHMuZGVmYXVsdCA9IEFib3J0Q29udHJvbGxlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEFib3J0Q29udHJvbGxlclxubW9kdWxlLmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnQtY29udHJvbGxlci5qcy5tYXBcbiIsCiAgICAiLyohIG5vZGUtZG9tZXhjZXB0aW9uLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuXG5pZiAoIWdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKSxcbiAgICBwb3J0ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCkucG9ydDEsXG4gICAgYWIgPSBuZXcgQXJyYXlCdWZmZXIoKVxuICAgIHBvcnQucG9zdE1lc3NhZ2UoYWIsIFthYiwgYWJdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIuY29uc3RydWN0b3IubmFtZSA9PT0gJ0RPTUV4Y2VwdGlvbicgJiYgKFxuICAgICAgZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPSBlcnIuY29uc3RydWN0b3JcbiAgICApXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvblxuIiwKICAgICJjb25zdCBnZXRUeXBlID0gKHZhbHVlKSA9PiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIGlmIChwcCA9PT0gbnVsbCB8fCBwcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBDdG9yID0gcHAuY29uc3RydWN0b3IgJiYgcHAuY29uc3RydWN0b3IudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gQ3RvciA9PT0gT2JqZWN0LnRvU3RyaW5nKCk7XG59XG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwKICAgICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0ZpbGVGcm9tUGF0aF9wYXRoLCBfRmlsZUZyb21QYXRoX3N0YXJ0O1xuaW1wb3J0IHsgc3RhdFN5bmMsIGNyZWF0ZVJlYWRTdHJlYW0sIHByb21pc2VzIGFzIGZzIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgRE9NRXhjZXB0aW9uIGZyb20gXCJub2RlLWRvbWV4Y2VwdGlvblwiO1xuaW1wb3J0IHsgRmlsZSB9IGZyb20gXCIuL0ZpbGUuanNcIjtcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gXCIuL2lzUGxhaW5PYmplY3QuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzRmlsZS5qc1wiO1xuY29uc3QgTUVTU0FHRSA9IFwiVGhlIHJlcXVlc3RlZCBmaWxlIGNvdWxkIG5vdCBiZSByZWFkLCBcIlxuICAgICsgXCJ0eXBpY2FsbHkgZHVlIHRvIHBlcm1pc3Npb24gcHJvYmxlbXMgdGhhdCBoYXZlIG9jY3VycmVkIGFmdGVyIGEgcmVmZXJlbmNlIFwiXG4gICAgKyBcInRvIGEgZmlsZSB3YXMgYWNxdWlyZWQuXCI7XG5jbGFzcyBGaWxlRnJvbVBhdGgge1xuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIF9GaWxlRnJvbVBhdGhfcGF0aC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0ZpbGVGcm9tUGF0aF9zdGFydC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRmlsZUZyb21QYXRoX3BhdGgsIGlucHV0LnBhdGgsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRmlsZUZyb21QYXRoX3N0YXJ0LCBpbnB1dC5zdGFydCB8fCAwLCBcImZcIik7XG4gICAgICAgIHRoaXMubmFtZSA9IGJhc2VuYW1lKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0ZpbGVGcm9tUGF0aF9wYXRoLCBcImZcIikpO1xuICAgICAgICB0aGlzLnNpemUgPSBpbnB1dC5zaXplO1xuICAgICAgICB0aGlzLmxhc3RNb2RpZmllZCA9IGlucHV0Lmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGVGcm9tUGF0aCh7XG4gICAgICAgICAgICBwYXRoOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9GaWxlRnJvbVBhdGhfcGF0aCwgXCJmXCIpLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB0aGlzLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIHNpemU6IGVuZCAtIHN0YXJ0LFxuICAgICAgICAgICAgc3RhcnRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jICpzdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHsgbXRpbWVNcyB9ID0gYXdhaXQgZnMuc3RhdChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9GaWxlRnJvbVBhdGhfcGF0aCwgXCJmXCIpKTtcbiAgICAgICAgaWYgKG10aW1lTXMgPiB0aGlzLmxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihNRVNTQUdFLCBcIk5vdFJlYWRhYmxlRXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgICAgICAgeWllbGQqIGNyZWF0ZVJlYWRTdHJlYW0oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRmlsZUZyb21QYXRoX3BhdGgsIFwiZlwiKSwge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9GaWxlRnJvbVBhdGhfc3RhcnQsIFwiZlwiKSxcbiAgICAgICAgICAgICAgICBlbmQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0ZpbGVGcm9tUGF0aF9zdGFydCwgXCJmXCIpICsgdGhpcy5zaXplIC0gMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IFsoX0ZpbGVGcm9tUGF0aF9wYXRoID0gbmV3IFdlYWtNYXAoKSwgX0ZpbGVGcm9tUGF0aF9zdGFydCA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC50b1N0cmluZ1RhZyldKCkge1xuICAgICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRmlsZUZyb21QYXRoKHBhdGgsIHsgbXRpbWVNcywgc2l6ZSB9LCBmaWxlbmFtZU9yT3B0aW9ucywgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGZpbGVuYW1lO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGZpbGVuYW1lT3JPcHRpb25zKSkge1xuICAgICAgICBbb3B0aW9ucywgZmlsZW5hbWVdID0gW2ZpbGVuYW1lT3JPcHRpb25zLCB1bmRlZmluZWRdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZU9yT3B0aW9ucztcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlRnJvbVBhdGgoeyBwYXRoLCBzaXplLCBsYXN0TW9kaWZpZWQ6IG10aW1lTXMgfSk7XG4gICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IGZpbGUubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGaWxlKFtmaWxlXSwgZmlsZW5hbWUsIHtcbiAgICAgICAgLi4ub3B0aW9ucywgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVGcm9tUGF0aFN5bmMocGF0aCwgZmlsZW5hbWVPck9wdGlvbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMocGF0aCk7XG4gICAgcmV0dXJuIGNyZWF0ZUZpbGVGcm9tUGF0aChwYXRoLCBzdGF0cywgZmlsZW5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbGVGcm9tUGF0aChwYXRoLCBmaWxlbmFtZU9yT3B0aW9ucywgb3B0aW9ucykge1xuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChwYXRoKTtcbiAgICByZXR1cm4gY3JlYXRlRmlsZUZyb21QYXRoKHBhdGgsIHN0YXRzLCBmaWxlbmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG59XG4iLAogICAgIi8vIFRoaXMgaXMgbm90IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHNpZ25hbHMuXG4vL1xuLy8gSXQgSVMsIGhvd2V2ZXIsIHRoZSBzZXQgb2YgYWxsIHNpZ25hbHMgdGhhdCB0cmlnZ2VyXG4vLyBhbiBleGl0IG9uIGVpdGhlciBMaW51eCBvciBCU0Qgc3lzdGVtcy4gIExpbnV4IGlzIGFcbi8vIHN1cGVyc2V0IG9mIHRoZSBzaWduYWwgbmFtZXMgc3VwcG9ydGVkIG9uIEJTRCwgYW5kXG4vLyB0aGUgdW5rbm93biBzaWduYWxzIGp1c3QgZmFpbCB0byByZWdpc3Rlciwgc28gd2UgY2FuXG4vLyBjYXRjaCB0aGF0IGVhc2lseSBlbm91Z2guXG4vL1xuLy8gRG9uJ3QgYm90aGVyIHdpdGggU0lHS0lMTC4gIEl0J3MgdW5jYXRjaGFibGUsIHdoaWNoXG4vLyBtZWFucyB0aGF0IHdlIGNhbid0IGZpcmUgYW55IGNhbGxiYWNrcyBhbnl3YXkuXG4vL1xuLy8gSWYgYSB1c2VyIGRvZXMgaGFwcGVuIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBvbiBhIG5vbi1cbi8vIGZhdGFsIHNpZ25hbCBsaWtlIFNJR1dJTkNIIG9yIHNvbWV0aGluZywgYW5kIHRoZW5cbi8vIGV4aXQsIGl0J2xsIGVuZCB1cCBmaXJpbmcgYHByb2Nlc3MuZW1pdCgnZXhpdCcpYCwgc29cbi8vIHRoZSBoYW5kbGVyIHdpbGwgYmUgZmlyZWQgYW55d2F5LlxuLy9cbi8vIFNJR0JVUywgU0lHRlBFLCBTSUdTRUdWIGFuZCBTSUdJTEwsIHdoZW4gbm90IHJhaXNlZFxuLy8gYXJ0aWZpY2lhbGx5LCBpbmhlcmVudGx5IGxlYXZlIHRoZSBwcm9jZXNzIGluIGFcbi8vIHN0YXRlIGZyb20gd2hpY2ggaXQgaXMgbm90IHNhZmUgdG8gdHJ5IGFuZCBlbnRlciBKU1xuLy8gbGlzdGVuZXJzLlxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdTSUdBQlJUJyxcbiAgJ1NJR0FMUk0nLFxuICAnU0lHSFVQJyxcbiAgJ1NJR0lOVCcsXG4gICdTSUdURVJNJ1xuXVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdWVEFMUk0nLFxuICAgICdTSUdYQ1BVJyxcbiAgICAnU0lHWEZTWicsXG4gICAgJ1NJR1VTUjInLFxuICAgICdTSUdUUkFQJyxcbiAgICAnU0lHU1lTJyxcbiAgICAnU0lHUVVJVCcsXG4gICAgJ1NJR0lPVCdcbiAgICAvLyBzaG91bGQgZGV0ZWN0IHByb2ZpbGVyIGFuZCBlbmFibGUvZGlzYWJsZSBhY2NvcmRpbmdseS5cbiAgICAvLyBzZWUgIzIxXG4gICAgLy8gJ1NJR1BST0YnXG4gIClcbn1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHSU8nLFxuICAgICdTSUdQT0xMJyxcbiAgICAnU0lHUFdSJyxcbiAgICAnU0lHU1RLRkxUJyxcbiAgICAnU0lHVU5VU0VEJ1xuICApXG59XG4iLAogICAgIi8vIE5vdGU6IHNpbmNlIG55YyB1c2VzIHRoaXMgbW9kdWxlIHRvIG91dHB1dCBjb3ZlcmFnZSwgYW55IGxpbmVzXG4vLyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0IHN5bmMgZmxvdyBvZiBueWMncyBvdXRwdXRDb3ZlcmFnZSBhcmVcbi8vIGlnbm9yZWQsIHNpbmNlIHdlIGNhbiBuZXZlciBnZXQgY292ZXJhZ2UgZm9yIHRoZW0uXG4vLyBncmFiIGEgcmVmZXJlbmNlIHRvIG5vZGUncyByZWFsIHByb2Nlc3Mgb2JqZWN0IHJpZ2h0IGF3YXlcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3NcblxuY29uc3QgcHJvY2Vzc09rID0gZnVuY3Rpb24gKHByb2Nlc3MpIHtcbiAgcmV0dXJuIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVtaXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZWFsbHlFeGl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MubGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mua2lsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBpZCA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBzb21lIGtpbmQgb2Ygbm9uLW5vZGUgZW52aXJvbm1lbnQsIGp1c3Qgbm8tb3Bcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFwcm9jZXNzT2socHJvY2VzcykpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gIH1cbn0gZWxzZSB7XG4gIHZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuICB2YXIgc2lnbmFscyA9IHJlcXVpcmUoJy4vc2lnbmFscy5qcycpXG4gIHZhciBpc1dpbiA9IC9ed2luL2kudGVzdChwcm9jZXNzLnBsYXRmb3JtKVxuXG4gIHZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIEVFICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgRUUgPSBFRS5FdmVudEVtaXR0ZXJcbiAgfVxuXG4gIHZhciBlbWl0dGVyXG4gIGlmIChwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fKSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX19cbiAgfSBlbHNlIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXyA9IG5ldyBFRSgpXG4gICAgZW1pdHRlci5jb3VudCA9IDBcbiAgICBlbWl0dGVyLmVtaXR0ZWQgPSB7fVxuICB9XG5cbiAgLy8gQmVjYXVzZSB0aGlzIGVtaXR0ZXIgaXMgYSBnbG9iYWwsIHdlIGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIGFcbiAgLy8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgZmFpbGVkIHRvIGVuYWJsZSBpbmZpbml0ZSBsaXN0ZW5lcnMuXG4gIC8vIEkga25vdyB3aGF0IHlvdSdyZSBhYm91dCB0byBzYXkuICBCdXQgbGl0ZXJhbGx5IGV2ZXJ5dGhpbmcgYWJvdXRcbiAgLy8gc2lnbmFsLWV4aXQgaXMgYSBjb21wcm9taXNlIHdpdGggZXZpbC4gIEdldCB1c2VkIHRvIGl0LlxuICBpZiAoIWVtaXR0ZXIuaW5maW5pdGUpIHtcbiAgICBlbWl0dGVyLnNldE1heExpc3RlbmVycyhJbmZpbml0eSlcbiAgICBlbWl0dGVyLmluZmluaXRlID0gdHJ1ZVxuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2IsIG9wdHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnYSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIGZvciBleGl0IGhhbmRsZXInKVxuXG4gICAgaWYgKGxvYWRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGxvYWQoKVxuICAgIH1cblxuICAgIHZhciBldiA9ICdleGl0J1xuICAgIGlmIChvcHRzICYmIG9wdHMuYWx3YXlzTGFzdCkge1xuICAgICAgZXYgPSAnYWZ0ZXJleGl0J1xuICAgIH1cblxuICAgIHZhciByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKGV2LCBjYilcbiAgICAgIGlmIChlbWl0dGVyLmxpc3RlbmVycygnZXhpdCcpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIGVtaXR0ZXIubGlzdGVuZXJzKCdhZnRlcmV4aXQnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgIH1cbiAgICB9XG4gICAgZW1pdHRlci5vbihldiwgY2IpXG5cbiAgICByZXR1cm4gcmVtb3ZlXG4gIH1cblxuICB2YXIgdW5sb2FkID0gZnVuY3Rpb24gdW5sb2FkICgpIHtcbiAgICBpZiAoIWxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IGZhbHNlXG5cbiAgICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgfSlcbiAgICBwcm9jZXNzLmVtaXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdFxuICAgIGVtaXR0ZXIuY291bnQgLT0gMVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLnVubG9hZCA9IHVubG9hZFxuXG4gIHZhciBlbWl0ID0gZnVuY3Rpb24gZW1pdCAoZXZlbnQsIGNvZGUsIHNpZ25hbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdHRlci5lbWl0dGVkW2V2ZW50XSA9IHRydWVcbiAgICBlbWl0dGVyLmVtaXQoZXZlbnQsIGNvZGUsIHNpZ25hbClcbiAgfVxuXG4gIC8vIHsgPHNpZ25hbD46IDxsaXN0ZW5lciBmbj4sIC4uLiB9XG4gIHZhciBzaWdMaXN0ZW5lcnMgPSB7fVxuICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgIHNpZ0xpc3RlbmVyc1tzaWddID0gZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgbGlzdGVuZXJzLCBhbiBleGl0IGlzIGNvbWluZyFcbiAgICAgIC8vIFNpbXBsZXN0IHdheTogcmVtb3ZlIHVzIGFuZCB0aGVuIHJlLXNlbmQgdGhlIHNpZ25hbC5cbiAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHdpbGwga2lsbCB0aGUgcHJvY2Vzcywgc28gd2UgY2FuXG4gICAgICAvLyBzYWZlbHkgZW1pdCBub3cuXG4gICAgICB2YXIgbGlzdGVuZXJzID0gcHJvY2Vzcy5saXN0ZW5lcnMoc2lnKVxuICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IGVtaXR0ZXIuY291bnQpIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgICAgZW1pdCgnZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoaXNXaW4gJiYgc2lnID09PSAnU0lHSFVQJykge1xuICAgICAgICAgIC8vIFwiU0lHSFVQXCIgdGhyb3dzIGFuIGBFTk9TWVNgIGVycm9yIG9uIFdpbmRvd3MsXG4gICAgICAgICAgLy8gc28gdXNlIGEgc3VwcG9ydGVkIHNpZ25hbCBpbnN0ZWFkXG4gICAgICAgICAgc2lnID0gJ1NJR0lOVCdcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIHNpZylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2lnbmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2lnbmFsc1xuICB9XG5cbiAgdmFyIGxvYWRlZCA9IGZhbHNlXG5cbiAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkICgpIHtcbiAgICBpZiAobG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gdHJ1ZVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9uU2lnbmFsRXhpdCdzIHRoYXQgYXJlIGluIHBsYXkuXG4gICAgLy8gSXQncyBpbXBvcnRhbnQgc28gdGhhdCB3ZSBjYW4gY291bnQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mXG4gICAgLy8gbGlzdGVuZXJzIG9uIHNpZ25hbHMsIGFuZCBkb24ndCB3YWl0IGZvciB0aGUgb3RoZXIgb25lIHRvXG4gICAgLy8gaGFuZGxlIGl0IGluc3RlYWQgb2YgdXMuXG4gICAgZW1pdHRlci5jb3VudCArPSAxXG5cbiAgICBzaWduYWxzID0gc2lnbmFscy5maWx0ZXIoZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHByb2Nlc3MuZW1pdCA9IHByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gcHJvY2Vzc1JlYWxseUV4aXRcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZFxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0ID0gcHJvY2Vzcy5yZWFsbHlFeGl0XG4gIHZhciBwcm9jZXNzUmVhbGx5RXhpdCA9IGZ1bmN0aW9uIHByb2Nlc3NSZWFsbHlFeGl0IChjb2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gMFxuICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQuY2FsbChwcm9jZXNzLCBwcm9jZXNzLmV4aXRDb2RlKVxuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc0VtaXQgPSBwcm9jZXNzLmVtaXRcbiAgdmFyIHByb2Nlc3NFbWl0ID0gZnVuY3Rpb24gcHJvY2Vzc0VtaXQgKGV2LCBhcmcpIHtcbiAgICBpZiAoZXYgPT09ICdleGl0JyAmJiBwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhcmdcbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiByZXRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuIiwKICAgICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO2Z1bmN0aW9uIGYoYSxiKXt2YXIgYz1hLmxlbmd0aDthLnB1c2goYik7YTpmb3IoOzA8Yzspe3ZhciBkPWMtMT4+PjEsZT1hW2RdO2lmKDA8ZyhlLGIpKWFbZF09YixhW2NdPWUsYz1kO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gaChhKXtyZXR1cm4gMD09PWEubGVuZ3RoP251bGw6YVswXX1mdW5jdGlvbiBrKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgYj1hWzBdLGM9YS5wb3AoKTtpZihjIT09Yil7YVswXT1jO2E6Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCx3PWU+Pj4xO2Q8dzspe3ZhciBtPTIqKGQrMSktMSxDPWFbbV0sbj1tKzEseD1hW25dO2lmKDA+ZyhDLGMpKW48ZSYmMD5nKHgsQyk/KGFbZF09eCxhW25dPWMsZD1uKTooYVtkXT1DLGFbbV09YyxkPW0pO2Vsc2UgaWYobjxlJiYwPmcoeCxjKSlhW2RdPXgsYVtuXT1jLGQ9bjtlbHNlIGJyZWFrIGF9fXJldHVybiBifVxuZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWEuc29ydEluZGV4LWIuc29ydEluZGV4O3JldHVybiAwIT09Yz9jOmEuaWQtYi5pZH1pZihcIm9iamVjdFwiPT09dHlwZW9mIHBlcmZvcm1hbmNlJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgbD1wZXJmb3JtYW5jZTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpfX1lbHNle3ZhciBwPURhdGUscT1wLm5vdygpO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIHAubm93KCktcX19dmFyIHI9W10sdD1bXSx1PTEsdj1udWxsLHk9Myx6PSExLEE9ITEsQj0hMSxEPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCxFPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om51bGwsRj1cInVuZGVmaW5lZFwiIT09dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGU6bnVsbDtcblwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZ2b2lkIDAhPT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyYmdm9pZCAwIT09bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcmJm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nLmJpbmQobmF2aWdhdG9yLnNjaGVkdWxpbmcpO2Z1bmN0aW9uIEcoYSl7Zm9yKHZhciBiPWgodCk7bnVsbCE9PWI7KXtpZihudWxsPT09Yi5jYWxsYmFjaylrKHQpO2Vsc2UgaWYoYi5zdGFydFRpbWU8PWEpayh0KSxiLnNvcnRJbmRleD1iLmV4cGlyYXRpb25UaW1lLGYocixiKTtlbHNlIGJyZWFrO2I9aCh0KX19ZnVuY3Rpb24gSChhKXtCPSExO0coYSk7aWYoIUEpaWYobnVsbCE9PWgocikpQT0hMCxJKEopO2Vsc2V7dmFyIGI9aCh0KTtudWxsIT09YiYmSyhILGIuc3RhcnRUaW1lLWEpfX1cbmZ1bmN0aW9uIEooYSxiKXtBPSExO0ImJihCPSExLEUoTCksTD0tMSk7ej0hMDt2YXIgYz15O3RyeXtHKGIpO2Zvcih2PWgocik7bnVsbCE9PXYmJighKHYuZXhwaXJhdGlvblRpbWU+Yil8fGEmJiFNKCkpOyl7dmFyIGQ9di5jYWxsYmFjaztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCl7di5jYWxsYmFjaz1udWxsO3k9di5wcmlvcml0eUxldmVsO3ZhciBlPWQodi5leHBpcmF0aW9uVGltZTw9Yik7Yj1leHBvcnRzLnVuc3RhYmxlX25vdygpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlP3YuY2FsbGJhY2s9ZTp2PT09aChyKSYmayhyKTtHKGIpfWVsc2UgayhyKTt2PWgocil9aWYobnVsbCE9PXYpdmFyIHc9ITA7ZWxzZXt2YXIgbT1oKHQpO251bGwhPT1tJiZLKEgsbS5zdGFydFRpbWUtYik7dz0hMX1yZXR1cm4gd31maW5hbGx5e3Y9bnVsbCx5PWMsej0hMX19dmFyIE49ITEsTz1udWxsLEw9LTEsUD01LFE9LTE7XG5mdW5jdGlvbiBNKCl7cmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCktUTxQPyExOiEwfWZ1bmN0aW9uIFIoKXtpZihudWxsIT09Tyl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtRPWE7dmFyIGI9ITA7dHJ5e2I9TyghMCxhKX1maW5hbGx5e2I/UygpOihOPSExLE89bnVsbCl9fWVsc2UgTj0hMX12YXIgUztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgRilTPWZ1bmN0aW9uKCl7RihSKX07ZWxzZSBpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgVD1uZXcgTWVzc2FnZUNoYW5uZWwsVT1ULnBvcnQyO1QucG9ydDEub25tZXNzYWdlPVI7Uz1mdW5jdGlvbigpe1UucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgUz1mdW5jdGlvbigpe0QoUiwwKX07ZnVuY3Rpb24gSShhKXtPPWE7Tnx8KE49ITAsUygpKX1mdW5jdGlvbiBLKGEsYil7TD1EKGZ1bmN0aW9uKCl7YShleHBvcnRzLnVuc3RhYmxlX25vdygpKX0sYil9XG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eT01O2V4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTtleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQ7ZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zO2V4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7ZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT0yO2V4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7YS5jYWxsYmFjaz1udWxsfTtleHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7QXx8enx8KEE9ITAsSShKKSl9O1xuZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbihhKXswPmF8fDEyNTxhP2NvbnNvbGUuZXJyb3IoXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWRcIik6UD0wPGE/TWF0aC5mbG9vcigxRTMvYSk6NX07ZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5fTtleHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIGgocil9O2V4cG9ydHMudW5zdGFibGVfbmV4dD1mdW5jdGlvbihhKXtzd2l0Y2goeSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIGI9MzticmVhaztkZWZhdWx0OmI9eX12YXIgYz15O3k9Yjt0cnl7cmV0dXJuIGEoKX1maW5hbGx5e3k9Y319O2V4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPTN9dmFyIGM9eTt5PWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXt5PWN9fTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6dSsrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsZih0LGEpLG51bGw9PT1oKHIpJiZhPT09aCh0KSYmKEI/KEUoTCksTD0tMSk6Qj0hMCxLKEgsYy1kKSkpOihhLnNvcnRJbmRleD1lLGYocixhKSxBfHx6fHwoQT0hMCxJKEopKSk7cmV0dXJuIGF9O1xuZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1NO2V4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9eTt5PWI7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3k9Y319fTtcbiIsCiAgICAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtcmVjb25jaWxlci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICQkJHJlY29uY2lsZXIoJCQkaG9zdENvbmZpZykge1xuICAgIHZhciBleHBvcnRzID0ge307XG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxiYT1yZXF1aXJlKFwic2NoZWR1bGVyXCIpLGNhPU9iamVjdC5hc3NpZ247ZnVuY3Rpb24gbihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBkYT1hYS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxlYT1TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxmYT1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGhhPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxpYT1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksamE9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGthPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxsYT1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxtYT1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbmE9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLG9hPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLHBhPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLHFhPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTtTeW1ib2wuZm9yKFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTtcbnZhciByYT1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5jYWNoZVwiKTtTeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7dmFyIHNhPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiB0YShhKXtpZihudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBhKXJldHVybiBudWxsO2E9c2EmJmFbc2FdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9XG5mdW5jdGlvbiB1YShhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBhLmRpc3BsYXlOYW1lfHxhLm5hbWV8fG51bGw7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhKXJldHVybiBhO3N3aXRjaChhKXtjYXNlIGhhOnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIGZhOnJldHVyblwiUG9ydGFsXCI7Y2FzZSBqYTpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSBpYTpyZXR1cm5cIlN0cmljdE1vZGVcIjtjYXNlIG5hOnJldHVyblwiU3VzcGVuc2VcIjtjYXNlIG9hOnJldHVyblwiU3VzcGVuc2VMaXN0XCJ9aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhKXN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIGxhOnJldHVybihhLmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuQ29uc3VtZXJcIjtjYXNlIGthOnJldHVybihhLl9jb250ZXh0LmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuUHJvdmlkZXJcIjtjYXNlIG1hOnZhciBiPWEucmVuZGVyO2E9YS5kaXNwbGF5TmFtZTthfHwoYT1iLmRpc3BsYXlOYW1lfHxcbmIubmFtZXx8XCJcIixhPVwiXCIhPT1hP1wiRm9yd2FyZFJlZihcIithK1wiKVwiOlwiRm9yd2FyZFJlZlwiKTtyZXR1cm4gYTtjYXNlIHBhOnJldHVybiBiPWEuZGlzcGxheU5hbWV8fG51bGwsbnVsbCE9PWI/Yjp1YShhLnR5cGUpfHxcIk1lbW9cIjtjYXNlIHFhOmI9YS5fcGF5bG9hZDthPWEuX2luaXQ7dHJ5e3JldHVybiB1YShhKGIpKX1jYXRjaChjKXt9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gdmEoYSl7dmFyIGI9YS50eXBlO3N3aXRjaChhLnRhZyl7Y2FzZSAyNDpyZXR1cm5cIkNhY2hlXCI7Y2FzZSA5OnJldHVybihiLmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuQ29uc3VtZXJcIjtjYXNlIDEwOnJldHVybihiLl9jb250ZXh0LmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuUHJvdmlkZXJcIjtjYXNlIDE4OnJldHVyblwiRGVoeWRyYXRlZEZyYWdtZW50XCI7Y2FzZSAxMTpyZXR1cm4gYT1iLnJlbmRlcixhPWEuZGlzcGxheU5hbWV8fGEubmFtZXx8XCJcIixiLmRpc3BsYXlOYW1lfHwoXCJcIiE9PWE/XCJGb3J3YXJkUmVmKFwiK2ErXCIpXCI6XCJGb3J3YXJkUmVmXCIpO2Nhc2UgNzpyZXR1cm5cIkZyYWdtZW50XCI7Y2FzZSA1OnJldHVybiBiO2Nhc2UgNDpyZXR1cm5cIlBvcnRhbFwiO2Nhc2UgMzpyZXR1cm5cIlJvb3RcIjtjYXNlIDY6cmV0dXJuXCJUZXh0XCI7Y2FzZSAxNjpyZXR1cm4gdWEoYik7Y2FzZSA4OnJldHVybiBiPT09aWE/XCJTdHJpY3RNb2RlXCI6XCJNb2RlXCI7Y2FzZSAyMjpyZXR1cm5cIk9mZnNjcmVlblwiO1xuY2FzZSAxMjpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSAyMTpyZXR1cm5cIlNjb3BlXCI7Y2FzZSAxMzpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSAxOTpyZXR1cm5cIlN1c3BlbnNlTGlzdFwiO2Nhc2UgMjU6cmV0dXJuXCJUcmFjaW5nTWFya2VyXCI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpcmV0dXJuIGIuZGlzcGxheU5hbWV8fGIubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGIpcmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gd2EoYSl7dmFyIGI9YSxjPWE7aWYoYS5hbHRlcm5hdGUpZm9yKDtiLnJldHVybjspYj1iLnJldHVybjtlbHNle2E9YjtkbyBiPWEsMCE9PShiLmZsYWdzJjQwOTgpJiYoYz1iLnJldHVybiksYT1iLnJldHVybjt3aGlsZShhKX1yZXR1cm4gMz09PWIudGFnP2M6bnVsbH1mdW5jdGlvbiB4YShhKXtpZih3YShhKSE9PWEpdGhyb3cgRXJyb3IobigxODgpKTt9XG5mdW5jdGlvbiB6YShhKXt2YXIgYj1hLmFsdGVybmF0ZTtpZighYil7Yj13YShhKTtpZihudWxsPT09Yil0aHJvdyBFcnJvcihuKDE4OCkpO3JldHVybiBiIT09YT9udWxsOmF9Zm9yKHZhciBjPWEsZD1iOzspe3ZhciBlPWMucmV0dXJuO2lmKG51bGw9PT1lKWJyZWFrO3ZhciBmPWUuYWx0ZXJuYXRlO2lmKG51bGw9PT1mKXtkPWUucmV0dXJuO2lmKG51bGwhPT1kKXtjPWQ7Y29udGludWV9YnJlYWt9aWYoZS5jaGlsZD09PWYuY2hpbGQpe2ZvcihmPWUuY2hpbGQ7Zjspe2lmKGY9PT1jKXJldHVybiB4YShlKSxhO2lmKGY9PT1kKXJldHVybiB4YShlKSxiO2Y9Zi5zaWJsaW5nfXRocm93IEVycm9yKG4oMTg4KSk7fWlmKGMucmV0dXJuIT09ZC5yZXR1cm4pYz1lLGQ9ZjtlbHNle2Zvcih2YXIgZz0hMSxoPWUuY2hpbGQ7aDspe2lmKGg9PT1jKXtnPSEwO2M9ZTtkPWY7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1lO2M9ZjticmVha31oPWguc2libGluZ31pZighZyl7Zm9yKGg9Zi5jaGlsZDtoOyl7aWYoaD09PVxuYyl7Zz0hMDtjPWY7ZD1lO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZjtjPWU7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpdGhyb3cgRXJyb3IobigxODkpKTt9fWlmKGMuYWx0ZXJuYXRlIT09ZCl0aHJvdyBFcnJvcihuKDE5MCkpO31pZigzIT09Yy50YWcpdGhyb3cgRXJyb3IobigxODgpKTtyZXR1cm4gYy5zdGF0ZU5vZGUuY3VycmVudD09PWM/YTpifWZ1bmN0aW9uIEFhKGEpe2E9emEoYSk7cmV0dXJuIG51bGwhPT1hP0JhKGEpOm51bGx9ZnVuY3Rpb24gQmEoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGE7Zm9yKGE9YS5jaGlsZDtudWxsIT09YTspe3ZhciBiPUJhKGEpO2lmKG51bGwhPT1iKXJldHVybiBiO2E9YS5zaWJsaW5nfXJldHVybiBudWxsfVxuZnVuY3Rpb24gQ2EoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGE7Zm9yKGE9YS5jaGlsZDtudWxsIT09YTspe2lmKDQhPT1hLnRhZyl7dmFyIGI9Q2EoYSk7aWYobnVsbCE9PWIpcmV0dXJuIGJ9YT1hLnNpYmxpbmd9cmV0dXJuIG51bGx9XG52YXIgRGE9QXJyYXkuaXNBcnJheSxFYT0kJCRob3N0Q29uZmlnLmdldFB1YmxpY0luc3RhbmNlLEZhPSQkJGhvc3RDb25maWcuZ2V0Um9vdEhvc3RDb250ZXh0LEdhPSQkJGhvc3RDb25maWcuZ2V0Q2hpbGRIb3N0Q29udGV4dCxIYT0kJCRob3N0Q29uZmlnLnByZXBhcmVGb3JDb21taXQsSWE9JCQkaG9zdENvbmZpZy5yZXNldEFmdGVyQ29tbWl0LEphPSQkJGhvc3RDb25maWcuY3JlYXRlSW5zdGFuY2UsS2E9JCQkaG9zdENvbmZpZy5hcHBlbmRJbml0aWFsQ2hpbGQsTGE9JCQkaG9zdENvbmZpZy5maW5hbGl6ZUluaXRpYWxDaGlsZHJlbixNYT0kJCRob3N0Q29uZmlnLnByZXBhcmVVcGRhdGUsTmE9JCQkaG9zdENvbmZpZy5zaG91bGRTZXRUZXh0Q29udGVudCxPYT0kJCRob3N0Q29uZmlnLmNyZWF0ZVRleHRJbnN0YW5jZSxQYT0kJCRob3N0Q29uZmlnLnNjaGVkdWxlVGltZW91dCxRYT0kJCRob3N0Q29uZmlnLmNhbmNlbFRpbWVvdXQsUmE9JCQkaG9zdENvbmZpZy5ub1RpbWVvdXQsXG5TYT0kJCRob3N0Q29uZmlnLmlzUHJpbWFyeVJlbmRlcmVyLFRhPSQkJGhvc3RDb25maWcuc3VwcG9ydHNNdXRhdGlvbixVYT0kJCRob3N0Q29uZmlnLnN1cHBvcnRzUGVyc2lzdGVuY2UsVmE9JCQkaG9zdENvbmZpZy5zdXBwb3J0c0h5ZHJhdGlvbixXYT0kJCRob3N0Q29uZmlnLmdldEluc3RhbmNlRnJvbU5vZGUsWGE9JCQkaG9zdENvbmZpZy5wcmVwYXJlUG9ydGFsTW91bnQsWWE9JCQkaG9zdENvbmZpZy5nZXRDdXJyZW50RXZlbnRQcmlvcml0eSxaYT0kJCRob3N0Q29uZmlnLmRldGFjaERlbGV0ZWRJbnN0YW5jZSwkYT0kJCRob3N0Q29uZmlnLnN1cHBvcnRzTWljcm90YXNrcyxhYj0kJCRob3N0Q29uZmlnLnNjaGVkdWxlTWljcm90YXNrLGJiPSQkJGhvc3RDb25maWcuc3VwcG9ydHNUZXN0U2VsZWN0b3JzLGNiPSQkJGhvc3RDb25maWcuZmluZEZpYmVyUm9vdCxkYj0kJCRob3N0Q29uZmlnLmdldEJvdW5kaW5nUmVjdCxlYj0kJCRob3N0Q29uZmlnLmdldFRleHRDb250ZW50LGZiPVxuJCQkaG9zdENvbmZpZy5pc0hpZGRlblN1YnRyZWUsZ2I9JCQkaG9zdENvbmZpZy5tYXRjaEFjY2Vzc2liaWxpdHlSb2xlLGhiPSQkJGhvc3RDb25maWcuc2V0Rm9jdXNJZkZvY3VzYWJsZSxpYj0kJCRob3N0Q29uZmlnLnNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsamI9JCQkaG9zdENvbmZpZy5hcHBlbmRDaGlsZCxrYj0kJCRob3N0Q29uZmlnLmFwcGVuZENoaWxkVG9Db250YWluZXIsbGI9JCQkaG9zdENvbmZpZy5jb21taXRUZXh0VXBkYXRlLG1iPSQkJGhvc3RDb25maWcuY29tbWl0TW91bnQsbmI9JCQkaG9zdENvbmZpZy5jb21taXRVcGRhdGUsb2I9JCQkaG9zdENvbmZpZy5pbnNlcnRCZWZvcmUscGI9JCQkaG9zdENvbmZpZy5pbnNlcnRJbkNvbnRhaW5lckJlZm9yZSxxYj0kJCRob3N0Q29uZmlnLnJlbW92ZUNoaWxkLHJiPSQkJGhvc3RDb25maWcucmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyLHNiPSQkJGhvc3RDb25maWcucmVzZXRUZXh0Q29udGVudCx0Yj0kJCRob3N0Q29uZmlnLmhpZGVJbnN0YW5jZSxcbnViPSQkJGhvc3RDb25maWcuaGlkZVRleHRJbnN0YW5jZSx2Yj0kJCRob3N0Q29uZmlnLnVuaGlkZUluc3RhbmNlLHdiPSQkJGhvc3RDb25maWcudW5oaWRlVGV4dEluc3RhbmNlLHhiPSQkJGhvc3RDb25maWcuY2xlYXJDb250YWluZXIseWI9JCQkaG9zdENvbmZpZy5jbG9uZUluc3RhbmNlLHpiPSQkJGhvc3RDb25maWcuY3JlYXRlQ29udGFpbmVyQ2hpbGRTZXQsQWI9JCQkaG9zdENvbmZpZy5hcHBlbmRDaGlsZFRvQ29udGFpbmVyQ2hpbGRTZXQsQmI9JCQkaG9zdENvbmZpZy5maW5hbGl6ZUNvbnRhaW5lckNoaWxkcmVuLENiPSQkJGhvc3RDb25maWcucmVwbGFjZUNvbnRhaW5lckNoaWxkcmVuLEViPSQkJGhvc3RDb25maWcuY2xvbmVIaWRkZW5JbnN0YW5jZSxGYj0kJCRob3N0Q29uZmlnLmNsb25lSGlkZGVuVGV4dEluc3RhbmNlLEdiPSQkJGhvc3RDb25maWcuY2FuSHlkcmF0ZUluc3RhbmNlLEhiPSQkJGhvc3RDb25maWcuY2FuSHlkcmF0ZVRleHRJbnN0YW5jZSxJYj0kJCRob3N0Q29uZmlnLmNhbkh5ZHJhdGVTdXNwZW5zZUluc3RhbmNlLFxuSmI9JCQkaG9zdENvbmZpZy5pc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nLEtiPSQkJGhvc3RDb25maWcuaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2ssTGI9JCQkaG9zdENvbmZpZy5nZXRTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2tFcnJvckRldGFpbHMsTWI9JCQkaG9zdENvbmZpZy5yZWdpc3RlclN1c3BlbnNlSW5zdGFuY2VSZXRyeSxOYj0kJCRob3N0Q29uZmlnLmdldE5leHRIeWRyYXRhYmxlU2libGluZyxPYj0kJCRob3N0Q29uZmlnLmdldEZpcnN0SHlkcmF0YWJsZUNoaWxkLFBiPSQkJGhvc3RDb25maWcuZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGRXaXRoaW5Db250YWluZXIsUWI9JCQkaG9zdENvbmZpZy5nZXRGaXJzdEh5ZHJhdGFibGVDaGlsZFdpdGhpblN1c3BlbnNlSW5zdGFuY2UsUmI9JCQkaG9zdENvbmZpZy5oeWRyYXRlSW5zdGFuY2UsU2I9JCQkaG9zdENvbmZpZy5oeWRyYXRlVGV4dEluc3RhbmNlLFRiPSQkJGhvc3RDb25maWcuaHlkcmF0ZVN1c3BlbnNlSW5zdGFuY2UsXG5VYj0kJCRob3N0Q29uZmlnLmdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2UsVmI9JCQkaG9zdENvbmZpZy5jb21taXRIeWRyYXRlZENvbnRhaW5lcixXYj0kJCRob3N0Q29uZmlnLmNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSxYYj0kJCRob3N0Q29uZmlnLmNsZWFyU3VzcGVuc2VCb3VuZGFyeSxZYj0kJCRob3N0Q29uZmlnLmNsZWFyU3VzcGVuc2VCb3VuZGFyeUZyb21Db250YWluZXIsWmI9JCQkaG9zdENvbmZpZy5zaG91bGREZWxldGVVbmh5ZHJhdGVkVGFpbEluc3RhbmNlcywkYj0kJCRob3N0Q29uZmlnLmRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UsYWM9JCQkaG9zdENvbmZpZy5kaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlLGJjO1xuZnVuY3Rpb24gY2MoYSl7aWYodm9pZCAwPT09YmMpdHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGMpe3ZhciBiPWMuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7YmM9YiYmYlsxXXx8XCJcIn1yZXR1cm5cIlxcblwiK2JjK2F9dmFyIGRjPSExO1xuZnVuY3Rpb24gZWMoYSxiKXtpZighYXx8ZGMpcmV0dXJuXCJcIjtkYz0hMDt2YXIgYz1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e2lmKGIpaWYoYj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5wcm90b3R5cGUsXCJwcm9wc1wiLHtzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO319KSxcIm9iamVjdFwiPT09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoYixbXSl9Y2F0Y2gobCl7dmFyIGQ9bH1SZWZsZWN0LmNvbnN0cnVjdChhLFtdLGIpfWVsc2V7dHJ5e2IuY2FsbCgpfWNhdGNoKGwpe2Q9bH1hLmNhbGwoYi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGwpe2Q9bH1hKCl9fWNhdGNoKGwpe2lmKGwmJmQmJlwic3RyaW5nXCI9PT10eXBlb2YgbC5zdGFjayl7Zm9yKHZhciBlPWwuc3RhY2suc3BsaXQoXCJcXG5cIiksXG5mPWQuc3RhY2suc3BsaXQoXCJcXG5cIiksZz1lLmxlbmd0aC0xLGg9Zi5sZW5ndGgtMTsxPD1nJiYwPD1oJiZlW2ddIT09ZltoXTspaC0tO2Zvcig7MTw9ZyYmMDw9aDtnLS0saC0tKWlmKGVbZ10hPT1mW2hdKXtpZigxIT09Z3x8MSE9PWgpe2RvIGlmKGctLSxoLS0sMD5ofHxlW2ddIT09ZltoXSl7dmFyIGs9XCJcXG5cIitlW2ddLnJlcGxhY2UoXCIgYXQgbmV3IFwiLFwiIGF0IFwiKTthLmRpc3BsYXlOYW1lJiZrLmluY2x1ZGVzKFwiPGFub255bW91cz5cIikmJihrPWsucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsYS5kaXNwbGF5TmFtZSkpO3JldHVybiBrfXdoaWxlKDE8PWcmJjA8PWgpfWJyZWFrfX19ZmluYWxseXtkYz0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1jfXJldHVybihhPWE/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOlwiXCIpP2NjKGEpOlwiXCJ9dmFyIGZjPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZ2M9W10saGM9LTE7ZnVuY3Rpb24gaWMoYSl7cmV0dXJue2N1cnJlbnQ6YX19XG5mdW5jdGlvbiBxKGEpezA+aGN8fChhLmN1cnJlbnQ9Z2NbaGNdLGdjW2hjXT1udWxsLGhjLS0pfWZ1bmN0aW9uIHYoYSxiKXtoYysrO2djW2hjXT1hLmN1cnJlbnQ7YS5jdXJyZW50PWJ9dmFyIGpjPXt9LHg9aWMoamMpLHo9aWMoITEpLGtjPWpjO2Z1bmN0aW9uIG1jKGEsYil7dmFyIGM9YS50eXBlLmNvbnRleHRUeXBlcztpZighYylyZXR1cm4gamM7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoZCYmZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09YilyZXR1cm4gZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgZT17fSxmO2ZvcihmIGluIGMpZVtmXT1iW2ZdO2QmJihhPWEuc3RhdGVOb2RlLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1iLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9ZSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBBKGEpe2E9YS5jaGlsZENvbnRleHRUeXBlcztyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWF9ZnVuY3Rpb24gbmMoKXtxKHopO3EoeCl9ZnVuY3Rpb24gb2MoYSxiLGMpe2lmKHguY3VycmVudCE9PWpjKXRocm93IEVycm9yKG4oMTY4KSk7dih4LGIpO3YoeixjKX1mdW5jdGlvbiBwYyhhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7Yj1iLmNoaWxkQ29udGV4dFR5cGVzO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBkLmdldENoaWxkQ29udGV4dClyZXR1cm4gYztkPWQuZ2V0Q2hpbGRDb250ZXh0KCk7Zm9yKHZhciBlIGluIGQpaWYoIShlIGluIGIpKXRocm93IEVycm9yKG4oMTA4LHZhKGEpfHxcIlVua25vd25cIixlKSk7cmV0dXJuIGNhKHt9LGMsZCl9XG5mdW5jdGlvbiBxYyhhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8amM7a2M9eC5jdXJyZW50O3YoeCxhKTt2KHosei5jdXJyZW50KTtyZXR1cm4hMH1mdW5jdGlvbiByYyhhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoIWQpdGhyb3cgRXJyb3IobigxNjkpKTtjPyhhPXBjKGEsYixrYyksZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1hLHEoeikscSh4KSx2KHgsYSkpOnEoeik7dih6LGMpfXZhciB0Yz1NYXRoLmNsejMyP01hdGguY2x6MzI6c2MsdWM9TWF0aC5sb2csdmM9TWF0aC5MTjI7ZnVuY3Rpb24gc2MoYSl7YT4+Pj0wO3JldHVybiAwPT09YT8zMjozMS0odWMoYSkvdmN8MCl8MH12YXIgd2M9NjQseGM9NDE5NDMwNDtcbmZ1bmN0aW9uIHljKGEpe3N3aXRjaChhJi1hKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gYSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGEmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtcbmRlZmF1bHQ6cmV0dXJuIGF9fWZ1bmN0aW9uIHpjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXM7aWYoMD09PWMpcmV0dXJuIDA7dmFyIGQ9MCxlPWEuc3VzcGVuZGVkTGFuZXMsZj1hLnBpbmdlZExhbmVzLGc9YyYyNjg0MzU0NTU7aWYoMCE9PWcpe3ZhciBoPWcmfmU7MCE9PWg/ZD15YyhoKTooZiY9ZywwIT09ZiYmKGQ9eWMoZikpKX1lbHNlIGc9YyZ+ZSwwIT09Zz9kPXljKGcpOjAhPT1mJiYoZD15YyhmKSk7aWYoMD09PWQpcmV0dXJuIDA7aWYoMCE9PWImJmIhPT1kJiYwPT09KGImZSkmJihlPWQmLWQsZj1iJi1iLGU+PWZ8fDE2PT09ZSYmMCE9PShmJjQxOTQyNDApKSlyZXR1cm4gYjswIT09KGQmNCkmJihkfD1jJjE2KTtiPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLXRjKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfVxuZnVuY3Rpb24gQWMoYSxiKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIGIrMjUwO2Nhc2UgODpjYXNlIDE2OmNhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gYis1RTM7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6Y2FzZSA2NzEwODg2NDpyZXR1cm4tMTtjYXNlIDEzNDIxNzcyODpjYXNlIDI2ODQzNTQ1NjpjYXNlIDUzNjg3MDkxMjpjYXNlIDEwNzM3NDE4MjQ6cmV0dXJuLTE7ZGVmYXVsdDpyZXR1cm4tMX19XG5mdW5jdGlvbiBCYyhhLGIpe2Zvcih2YXIgYz1hLnN1c3BlbmRlZExhbmVzLGQ9YS5waW5nZWRMYW5lcyxlPWEuZXhwaXJhdGlvblRpbWVzLGY9YS5wZW5kaW5nTGFuZXM7MDxmOyl7dmFyIGc9MzEtdGMoZiksaD0xPDxnLGs9ZVtnXTtpZigtMT09PWspe2lmKDA9PT0oaCZjKXx8MCE9PShoJmQpKWVbZ109QWMoaCxiKX1lbHNlIGs8PWImJihhLmV4cGlyZWRMYW5lc3w9aCk7ZiY9fmh9fWZ1bmN0aW9uIENjKGEpe2E9YS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjU7cmV0dXJuIDAhPT1hP2E6YSYxMDczNzQxODI0PzEwNzM3NDE4MjQ6MH1mdW5jdGlvbiBEYygpe3ZhciBhPXdjO3djPDw9MTswPT09KHdjJjQxOTQyNDApJiYod2M9NjQpO3JldHVybiBhfWZ1bmN0aW9uIEVjKGEpe2Zvcih2YXIgYj1bXSxjPTA7MzE+YztjKyspYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gRmMoYSxiLGMpe2EucGVuZGluZ0xhbmVzfD1iOzUzNjg3MDkxMiE9PWImJihhLnN1c3BlbmRlZExhbmVzPTAsYS5waW5nZWRMYW5lcz0wKTthPWEuZXZlbnRUaW1lcztiPTMxLXRjKGIpO2FbYl09Y31mdW5jdGlvbiBHYyhhLGIpe3ZhciBjPWEucGVuZGluZ0xhbmVzJn5iO2EucGVuZGluZ0xhbmVzPWI7YS5zdXNwZW5kZWRMYW5lcz0wO2EucGluZ2VkTGFuZXM9MDthLmV4cGlyZWRMYW5lcyY9YjthLm11dGFibGVSZWFkTGFuZXMmPWI7YS5lbnRhbmdsZWRMYW5lcyY9YjtiPWEuZW50YW5nbGVtZW50czt2YXIgZD1hLmV2ZW50VGltZXM7Zm9yKGE9YS5leHBpcmF0aW9uVGltZXM7MDxjOyl7dmFyIGU9MzEtdGMoYyksZj0xPDxlO2JbZV09MDtkW2VdPS0xO2FbZV09LTE7YyY9fmZ9fVxuZnVuY3Rpb24gSGMoYSxiKXt2YXIgYz1hLmVudGFuZ2xlZExhbmVzfD1iO2ZvcihhPWEuZW50YW5nbGVtZW50cztjOyl7dmFyIGQ9MzEtdGMoYyksZT0xPDxkO2UmYnxhW2RdJmImJihhW2RdfD1iKTtjJj1+ZX19dmFyIEM9MDtmdW5jdGlvbiBJYyhhKXthJj0tYTtyZXR1cm4gMTxhPzQ8YT8wIT09KGEmMjY4NDM1NDU1KT8xNjo1MzY4NzA5MTI6NDoxfXZhciBKYz1iYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLEtjPWJhLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLExjPWJhLnVuc3RhYmxlX3Nob3VsZFlpZWxkLE1jPWJhLnVuc3RhYmxlX3JlcXVlc3RQYWludCxEPWJhLnVuc3RhYmxlX25vdyxOYz1iYS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxPYz1iYS51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxQYz1iYS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxRYz1iYS51bnN0YWJsZV9JZGxlUHJpb3JpdHksUmM9bnVsbCxTYz1udWxsO1xuZnVuY3Rpb24gVGMoYSl7aWYoU2MmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBTYy5vbkNvbW1pdEZpYmVyUm9vdCl0cnl7U2Mub25Db21taXRGaWJlclJvb3QoUmMsYSx2b2lkIDAsMTI4PT09KGEuY3VycmVudC5mbGFncyYxMjgpKX1jYXRjaChiKXt9fWZ1bmN0aW9uIFVjKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgVmM9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6VWMsV2M9bnVsbCxYYz0hMSxZYz0hMTtmdW5jdGlvbiBaYyhhKXtudWxsPT09V2M/V2M9W2FdOldjLnB1c2goYSl9ZnVuY3Rpb24gJGMoYSl7WGM9ITA7WmMoYSl9XG5mdW5jdGlvbiBhZCgpe2lmKCFZYyYmbnVsbCE9PVdjKXtZYz0hMDt2YXIgYT0wLGI9Qzt0cnl7dmFyIGM9V2M7Zm9yKEM9MTthPGMubGVuZ3RoO2ErKyl7dmFyIGQ9Y1thXTtkbyBkPWQoITApO3doaWxlKG51bGwhPT1kKX1XYz1udWxsO1hjPSExfWNhdGNoKGUpe3Rocm93IG51bGwhPT1XYyYmKFdjPVdjLnNsaWNlKGErMSkpLEpjKE5jLGFkKSxlO31maW5hbGx5e0M9YixZYz0hMX19cmV0dXJuIG51bGx9dmFyIGJkPVtdLGNkPTAsZGQ9bnVsbCxlZD0wLGZkPVtdLGdkPTAsaGQ9bnVsbCxpZD0xLGpkPVwiXCI7ZnVuY3Rpb24ga2QoYSxiKXtiZFtjZCsrXT1lZDtiZFtjZCsrXT1kZDtkZD1hO2VkPWJ9XG5mdW5jdGlvbiBsZChhLGIsYyl7ZmRbZ2QrK109aWQ7ZmRbZ2QrK109amQ7ZmRbZ2QrK109aGQ7aGQ9YTt2YXIgZD1pZDthPWpkO3ZhciBlPTMyLXRjKGQpLTE7ZCY9figxPDxlKTtjKz0xO3ZhciBmPTMyLXRjKGIpK2U7aWYoMzA8Zil7dmFyIGc9ZS1lJTU7Zj0oZCYoMTw8ZyktMSkudG9TdHJpbmcoMzIpO2Q+Pj1nO2UtPWc7aWQ9MTw8MzItdGMoYikrZXxjPDxlfGQ7amQ9ZithfWVsc2UgaWQ9MTw8ZnxjPDxlfGQsamQ9YX1mdW5jdGlvbiBtZChhKXtudWxsIT09YS5yZXR1cm4mJihrZChhLDEpLGxkKGEsMSwwKSl9ZnVuY3Rpb24gbmQoYSl7Zm9yKDthPT09ZGQ7KWRkPWJkWy0tY2RdLGJkW2NkXT1udWxsLGVkPWJkWy0tY2RdLGJkW2NkXT1udWxsO2Zvcig7YT09PWhkOyloZD1mZFstLWdkXSxmZFtnZF09bnVsbCxqZD1mZFstLWdkXSxmZFtnZF09bnVsbCxpZD1mZFstLWdkXSxmZFtnZF09bnVsbH12YXIgb2Q9bnVsbCxwZD1udWxsLEY9ITEscWQ9ITEscmQ9bnVsbDtcbmZ1bmN0aW9uIHNkKGEsYil7dmFyIGM9dGQoNSxudWxsLG51bGwsMCk7Yy5lbGVtZW50VHlwZT1cIkRFTEVURURcIjtjLnN0YXRlTm9kZT1iO2MucmV0dXJuPWE7Yj1hLmRlbGV0aW9ucztudWxsPT09Yj8oYS5kZWxldGlvbnM9W2NdLGEuZmxhZ3N8PTE2KTpiLnB1c2goYyl9XG5mdW5jdGlvbiB1ZChhLGIpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnJldHVybiBiPUdiKGIsYS50eXBlLGEucGVuZGluZ1Byb3BzKSxudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YixvZD1hLHBkPU9iKGIpLCEwKTohMTtjYXNlIDY6cmV0dXJuIGI9SGIoYixhLnBlbmRpbmdQcm9wcyksbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsb2Q9YSxwZD1udWxsLCEwKTohMTtjYXNlIDEzOmI9SWIoYik7aWYobnVsbCE9PWIpe3ZhciBjPW51bGwhPT1oZD97aWQ6aWQsb3ZlcmZsb3c6amR9Om51bGw7YS5tZW1vaXplZFN0YXRlPXtkZWh5ZHJhdGVkOmIsdHJlZUNvbnRleHQ6YyxyZXRyeUxhbmU6MTA3Mzc0MTgyNH07Yz10ZCgxOCxudWxsLG51bGwsMCk7Yy5zdGF0ZU5vZGU9YjtjLnJldHVybj1hO2EuY2hpbGQ9YztvZD1hO3BkPW51bGw7cmV0dXJuITB9cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gdmQoYSl7cmV0dXJuIDAhPT0oYS5tb2RlJjEpJiYwPT09KGEuZmxhZ3MmMTI4KX1cbmZ1bmN0aW9uIHdkKGEpe2lmKEYpe3ZhciBiPXBkO2lmKGIpe3ZhciBjPWI7aWYoIXVkKGEsYikpe2lmKHZkKGEpKXRocm93IEVycm9yKG4oNDE4KSk7Yj1OYihjKTt2YXIgZD1vZDtiJiZ1ZChhLGIpP3NkKGQsYyk6KGEuZmxhZ3M9YS5mbGFncyYtNDA5N3wyLEY9ITEsb2Q9YSl9fWVsc2V7aWYodmQoYSkpdGhyb3cgRXJyb3Iobig0MTgpKTthLmZsYWdzPWEuZmxhZ3MmLTQwOTd8MjtGPSExO29kPWF9fX1mdW5jdGlvbiB4ZChhKXtmb3IoYT1hLnJldHVybjtudWxsIT09YSYmNSE9PWEudGFnJiYzIT09YS50YWcmJjEzIT09YS50YWc7KWE9YS5yZXR1cm47b2Q9YX1cbmZ1bmN0aW9uIHlkKGEpe2lmKCFWYXx8YSE9PW9kKXJldHVybiExO2lmKCFGKXJldHVybiB4ZChhKSxGPSEwLCExO2lmKDMhPT1hLnRhZyYmKDUhPT1hLnRhZ3x8WmIoYS50eXBlKSYmIU5hKGEudHlwZSxhLm1lbW9pemVkUHJvcHMpKSl7dmFyIGI9cGQ7aWYoYil7aWYodmQoYSkpdGhyb3cgemQoKSxFcnJvcihuKDQxOCkpO2Zvcig7Yjspc2QoYSxiKSxiPU5iKGIpfX14ZChhKTtpZigxMz09PWEudGFnKXtpZighVmEpdGhyb3cgRXJyb3IobigzMTYpKTthPWEubWVtb2l6ZWRTdGF0ZTthPW51bGwhPT1hP2EuZGVoeWRyYXRlZDpudWxsO2lmKCFhKXRocm93IEVycm9yKG4oMzE3KSk7cGQ9VWIoYSl9ZWxzZSBwZD1vZD9OYihhLnN0YXRlTm9kZSk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiB6ZCgpe2Zvcih2YXIgYT1wZDthOylhPU5iKGEpfWZ1bmN0aW9uIEFkKCl7VmEmJihwZD1vZD1udWxsLHFkPUY9ITEpfWZ1bmN0aW9uIEJkKGEpe251bGw9PT1yZD9yZD1bYV06cmQucHVzaChhKX1cbnZhciBDZD1kYS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztmdW5jdGlvbiBEZChhLGIpe2lmKFZjKGEsYikpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhfHxudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBifHxudWxsPT09YilyZXR1cm4hMTt2YXIgYz1PYmplY3Qua2V5cyhhKSxkPU9iamVjdC5rZXlzKGIpO2lmKGMubGVuZ3RoIT09ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtpZighZmMuY2FsbChiLGUpfHwhVmMoYVtlXSxiW2VdKSlyZXR1cm4hMX1yZXR1cm4hMH1cbmZ1bmN0aW9uIEVkKGEpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnJldHVybiBjYyhhLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIGNjKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBjYyhcIlN1c3BlbnNlXCIpO2Nhc2UgMTk6cmV0dXJuIGNjKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gYT1lYyhhLnR5cGUsITEpLGE7Y2FzZSAxMTpyZXR1cm4gYT1lYyhhLnR5cGUucmVuZGVyLCExKSxhO2Nhc2UgMTpyZXR1cm4gYT1lYyhhLnR5cGUsITApLGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIEZkKGEsYixjKXthPWMucmVmO2lmKG51bGwhPT1hJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmXCJvYmplY3RcIiE9PXR5cGVvZiBhKXtpZihjLl9vd25lcil7Yz1jLl9vd25lcjtpZihjKXtpZigxIT09Yy50YWcpdGhyb3cgRXJyb3IobigzMDkpKTt2YXIgZD1jLnN0YXRlTm9kZX1pZighZCl0aHJvdyBFcnJvcihuKDE0NyxhKSk7dmFyIGU9ZCxmPVwiXCIrYTtpZihudWxsIT09YiYmbnVsbCE9PWIucmVmJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5yZWYmJmIucmVmLl9zdHJpbmdSZWY9PT1mKXJldHVybiBiLnJlZjtiPWZ1bmN0aW9uKGEpe3ZhciBiPWUucmVmcztudWxsPT09YT9kZWxldGUgYltmXTpiW2ZdPWF9O2IuX3N0cmluZ1JlZj1mO3JldHVybiBifWlmKFwic3RyaW5nXCIhPT10eXBlb2YgYSl0aHJvdyBFcnJvcihuKDI4NCkpO2lmKCFjLl9vd25lcil0aHJvdyBFcnJvcihuKDI5MCxhKSk7fXJldHVybiBhfVxuZnVuY3Rpb24gR2QoYSxiKXthPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKTt0aHJvdyBFcnJvcihuKDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1hP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoYikuam9pbihcIiwgXCIpK1wifVwiOmEpKTt9ZnVuY3Rpb24gSGQoYSl7dmFyIGI9YS5faW5pdDtyZXR1cm4gYihhLl9wYXlsb2FkKX1cbmZ1bmN0aW9uIElkKGEpe2Z1bmN0aW9uIGIoYixjKXtpZihhKXt2YXIgZD1iLmRlbGV0aW9ucztudWxsPT09ZD8oYi5kZWxldGlvbnM9W2NdLGIuZmxhZ3N8PTE2KTpkLnB1c2goYyl9fWZ1bmN0aW9uIGMoYyxkKXtpZighYSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1kOyliKGMsZCksZD1kLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChhLGIpe2ZvcihhPW5ldyBNYXA7bnVsbCE9PWI7KW51bGwhPT1iLmtleT9hLnNldChiLmtleSxiKTphLnNldChiLmluZGV4LGIpLGI9Yi5zaWJsaW5nO3JldHVybiBhfWZ1bmN0aW9uIGUoYSxiKXthPUpkKGEsYik7YS5pbmRleD0wO2Euc2libGluZz1udWxsO3JldHVybiBhfWZ1bmN0aW9uIGYoYixjLGQpe2IuaW5kZXg9ZDtpZighYSlyZXR1cm4gYi5mbGFnc3w9MTA0ODU3NixjO2Q9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWQpcmV0dXJuIGQ9ZC5pbmRleCxkPGM/KGIuZmxhZ3N8PTIsYyk6ZDtiLmZsYWdzfD0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmXG5udWxsPT09Yi5hbHRlcm5hdGUmJihiLmZsYWdzfD0yKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYixjLGQpe2lmKG51bGw9PT1ifHw2IT09Yi50YWcpcmV0dXJuIGI9S2QoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXt2YXIgZj1jLnR5cGU7aWYoZj09PWhhKXJldHVybiBtKGEsYixjLnByb3BzLmNoaWxkcmVuLGQsYy5rZXkpO2lmKG51bGwhPT1iJiYoYi5lbGVtZW50VHlwZT09PWZ8fFwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWYmJmYuJCR0eXBlb2Y9PT1xYSYmSGQoZik9PT1iLnR5cGUpKXJldHVybiBkPWUoYixjLnByb3BzKSxkLnJlZj1GZChhLGIsYyksZC5yZXR1cm49YSxkO2Q9TGQoYy50eXBlLGMua2V5LGMucHJvcHMsbnVsbCxhLm1vZGUsZCk7ZC5yZWY9RmQoYSxiLGMpO2QucmV0dXJuPWE7cmV0dXJuIGR9ZnVuY3Rpb24gbChhLGIsYyxkKXtpZihudWxsPT09Ynx8NCE9PWIudGFnfHxcbmIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT1jLmNvbnRhaW5lckluZm98fGIuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09Yy5pbXBsZW1lbnRhdGlvbilyZXR1cm4gYj1NZChjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYy5jaGlsZHJlbnx8W10pO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gbShhLGIsYyxkLGYpe2lmKG51bGw9PT1ifHw3IT09Yi50YWcpcmV0dXJuIGI9TmQoYyxhLm1vZGUsZCxmKSxiLnJldHVybj1hLGI7Yj1lKGIsYyk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiByKGEsYixjKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGImJlwiXCIhPT1ifHxcIm51bWJlclwiPT09dHlwZW9mIGIpcmV0dXJuIGI9S2QoXCJcIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBiJiZudWxsIT09Yil7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2UgZWE6cmV0dXJuIGM9TGQoYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxhLm1vZGUsYyksXG5jLnJlZj1GZChhLG51bGwsYiksYy5yZXR1cm49YSxjO2Nhc2UgZmE6cmV0dXJuIGI9TWQoYixhLm1vZGUsYyksYi5yZXR1cm49YSxiO2Nhc2UgcWE6dmFyIGQ9Yi5faW5pdDtyZXR1cm4gcihhLGQoYi5fcGF5bG9hZCksYyl9aWYoRGEoYil8fHRhKGIpKXJldHVybiBiPU5kKGIsYS5tb2RlLGMsbnVsbCksYi5yZXR1cm49YSxiO0dkKGEsYil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChhLGIsYyxkKXt2YXIgZT1udWxsIT09Yj9iLmtleTpudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYyYmXCJcIiE9PWN8fFwibnVtYmVyXCI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYixcIlwiK2MsZCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2UgZWE6cmV0dXJuIGMua2V5PT09ZT9rKGEsYixjLGQpOm51bGw7Y2FzZSBmYTpyZXR1cm4gYy5rZXk9PT1lP2woYSxiLGMsZCk6bnVsbDtjYXNlIHFhOnJldHVybiBlPWMuX2luaXQscChhLFxuYixlKGMuX3BheWxvYWQpLGQpfWlmKERhKGMpfHx0YShjKSlyZXR1cm4gbnVsbCE9PWU/bnVsbDptKGEsYixjLGQsbnVsbCk7R2QoYSxjKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBCKGEsYixjLGQsZSl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBkJiZcIlwiIT09ZHx8XCJudW1iZXJcIj09PXR5cGVvZiBkKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLGgoYixhLFwiXCIrZCxlKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBlYTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsayhiLGEsZCxlKTtjYXNlIGZhOnJldHVybiBhPWEuZ2V0KG51bGw9PT1kLmtleT9jOmQua2V5KXx8bnVsbCxsKGIsYSxkLGUpO2Nhc2UgcWE6dmFyIGY9ZC5faW5pdDtyZXR1cm4gQihhLGIsYyxmKGQuX3BheWxvYWQpLGUpfWlmKERhKGQpfHx0YShkKSlyZXR1cm4gYT1hLmdldChjKXx8bnVsbCxtKGIsYSxkLGUsbnVsbCk7R2QoYixkKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHcoZSxnLGgsayl7Zm9yKHZhciBsPW51bGwsbT1udWxsLHU9Zyx0PWc9MCxFPW51bGw7bnVsbCE9PXUmJnQ8aC5sZW5ndGg7dCsrKXt1LmluZGV4PnQ/KEU9dSx1PW51bGwpOkU9dS5zaWJsaW5nO3ZhciB5PXAoZSx1LGhbdF0sayk7aWYobnVsbD09PXkpe251bGw9PT11JiYodT1FKTticmVha31hJiZ1JiZudWxsPT09eS5hbHRlcm5hdGUmJmIoZSx1KTtnPWYoeSxnLHQpO251bGw9PT1tP2w9eTptLnNpYmxpbmc9eTttPXk7dT1FfWlmKHQ9PT1oLmxlbmd0aClyZXR1cm4gYyhlLHUpLEYmJmtkKGUsdCksbDtpZihudWxsPT09dSl7Zm9yKDt0PGgubGVuZ3RoO3QrKyl1PXIoZSxoW3RdLGspLG51bGwhPT11JiYoZz1mKHUsZyx0KSxudWxsPT09bT9sPXU6bS5zaWJsaW5nPXUsbT11KTtGJiZrZChlLHQpO3JldHVybiBsfWZvcih1PWQoZSx1KTt0PGgubGVuZ3RoO3QrKylFPUIodSxlLHQsaFt0XSxrKSxudWxsIT09RSYmKGEmJm51bGwhPT1FLmFsdGVybmF0ZSYmdS5kZWxldGUobnVsbD09PVxuRS5rZXk/dDpFLmtleSksZz1mKEUsZyx0KSxudWxsPT09bT9sPUU6bS5zaWJsaW5nPUUsbT1FKTthJiZ1LmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO0YmJmtkKGUsdCk7cmV0dXJuIGx9ZnVuY3Rpb24gWShlLGcsaCxrKXt2YXIgbD10YShoKTtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgbCl0aHJvdyBFcnJvcihuKDE1MCkpO2g9bC5jYWxsKGgpO2lmKG51bGw9PWgpdGhyb3cgRXJyb3IobigxNTEpKTtmb3IodmFyIHU9bD1udWxsLG09Zyx0PWc9MCxFPW51bGwseT1oLm5leHQoKTtudWxsIT09bSYmIXkuZG9uZTt0KysseT1oLm5leHQoKSl7bS5pbmRleD50PyhFPW0sbT1udWxsKTpFPW0uc2libGluZzt2YXIgdz1wKGUsbSx5LnZhbHVlLGspO2lmKG51bGw9PT13KXtudWxsPT09bSYmKG09RSk7YnJlYWt9YSYmbSYmbnVsbD09PXcuYWx0ZXJuYXRlJiZiKGUsbSk7Zz1mKHcsZyx0KTtudWxsPT09dT9sPXc6dS5zaWJsaW5nPXc7dT13O209RX1pZih5LmRvbmUpcmV0dXJuIGMoZSxcbm0pLEYmJmtkKGUsdCksbDtpZihudWxsPT09bSl7Zm9yKDsheS5kb25lO3QrKyx5PWgubmV4dCgpKXk9cihlLHkudmFsdWUsayksbnVsbCE9PXkmJihnPWYoeSxnLHQpLG51bGw9PT11P2w9eTp1LnNpYmxpbmc9eSx1PXkpO0YmJmtkKGUsdCk7cmV0dXJuIGx9Zm9yKG09ZChlLG0pOyF5LmRvbmU7dCsrLHk9aC5uZXh0KCkpeT1CKG0sZSx0LHkudmFsdWUsayksbnVsbCE9PXkmJihhJiZudWxsIT09eS5hbHRlcm5hdGUmJm0uZGVsZXRlKG51bGw9PT15LmtleT90Onkua2V5KSxnPWYoeSxnLHQpLG51bGw9PT11P2w9eTp1LnNpYmxpbmc9eSx1PXkpO2EmJm0uZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7RiYma2QoZSx0KTtyZXR1cm4gbH1mdW5jdGlvbiB5YShhLGQsZixoKXtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT1oYSYmbnVsbD09PWYua2V5JiYoZj1mLnByb3BzLmNoaWxkcmVuKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1cbmYpe3N3aXRjaChmLiQkdHlwZW9mKXtjYXNlIGVhOmE6e2Zvcih2YXIgaz1mLmtleSxsPWQ7bnVsbCE9PWw7KXtpZihsLmtleT09PWspe2s9Zi50eXBlO2lmKGs9PT1oYSl7aWYoNz09PWwudGFnKXtjKGEsbC5zaWJsaW5nKTtkPWUobCxmLnByb3BzLmNoaWxkcmVuKTtkLnJldHVybj1hO2E9ZDticmVhayBhfX1lbHNlIGlmKGwuZWxlbWVudFR5cGU9PT1rfHxcIm9iamVjdFwiPT09dHlwZW9mIGsmJm51bGwhPT1rJiZrLiQkdHlwZW9mPT09cWEmJkhkKGspPT09bC50eXBlKXtjKGEsbC5zaWJsaW5nKTtkPWUobCxmLnByb3BzKTtkLnJlZj1GZChhLGwsZik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1jKGEsbCk7YnJlYWt9ZWxzZSBiKGEsbCk7bD1sLnNpYmxpbmd9Zi50eXBlPT09aGE/KGQ9TmQoZi5wcm9wcy5jaGlsZHJlbixhLm1vZGUsaCxmLmtleSksZC5yZXR1cm49YSxhPWQpOihoPUxkKGYudHlwZSxmLmtleSxmLnByb3BzLG51bGwsYS5tb2RlLGgpLGgucmVmPUZkKGEsZCxmKSxoLnJldHVybj1cbmEsYT1oKX1yZXR1cm4gZyhhKTtjYXNlIGZhOmE6e2ZvcihsPWYua2V5O251bGwhPT1kOyl7aWYoZC5rZXk9PT1sKWlmKDQ9PT1kLnRhZyYmZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtjKGEsZC5zaWJsaW5nKTtkPWUoZCxmLmNoaWxkcmVufHxbXSk7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1lbHNle2MoYSxkKTticmVha31lbHNlIGIoYSxkKTtkPWQuc2libGluZ31kPU1kKGYsYS5tb2RlLGgpO2QucmV0dXJuPWE7YT1kfXJldHVybiBnKGEpO2Nhc2UgcWE6cmV0dXJuIGw9Zi5faW5pdCx5YShhLGQsbChmLl9wYXlsb2FkKSxoKX1pZihEYShmKSlyZXR1cm4gdyhhLGQsZixoKTtpZih0YShmKSlyZXR1cm4gWShhLGQsZixoKTtHZChhLGYpfXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgZiYmXCJcIiE9PWZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZj8oZj1cIlwiK2YsbnVsbCE9PWQmJlxuNj09PWQudGFnPyhjKGEsZC5zaWJsaW5nKSxkPWUoZCxmKSxkLnJldHVybj1hLGE9ZCk6KGMoYSxkKSxkPUtkKGYsYS5tb2RlLGgpLGQucmV0dXJuPWEsYT1kKSxnKGEpKTpjKGEsZCl9cmV0dXJuIHlhfXZhciBPZD1JZCghMCksUGQ9SWQoITEpLFFkPWljKG51bGwpLFJkPW51bGwsU2Q9bnVsbCxUZD1udWxsO2Z1bmN0aW9uIFVkKCl7VGQ9U2Q9UmQ9bnVsbH1mdW5jdGlvbiBWZChhLGIsYyl7U2E/KHYoUWQsYi5fY3VycmVudFZhbHVlKSxiLl9jdXJyZW50VmFsdWU9Yyk6KHYoUWQsYi5fY3VycmVudFZhbHVlMiksYi5fY3VycmVudFZhbHVlMj1jKX1mdW5jdGlvbiBXZChhKXt2YXIgYj1RZC5jdXJyZW50O3EoUWQpO1NhP2EuX2N1cnJlbnRWYWx1ZT1iOmEuX2N1cnJlbnRWYWx1ZTI9Yn1cbmZ1bmN0aW9uIFhkKGEsYixjKXtmb3IoO251bGwhPT1hOyl7dmFyIGQ9YS5hbHRlcm5hdGU7KGEuY2hpbGRMYW5lcyZiKSE9PWI/KGEuY2hpbGRMYW5lc3w9YixudWxsIT09ZCYmKGQuY2hpbGRMYW5lc3w9YikpOm51bGwhPT1kJiYoZC5jaGlsZExhbmVzJmIpIT09YiYmKGQuY2hpbGRMYW5lc3w9Yik7aWYoYT09PWMpYnJlYWs7YT1hLnJldHVybn19ZnVuY3Rpb24gWWQoYSxiKXtSZD1hO1RkPVNkPW51bGw7YT1hLmRlcGVuZGVuY2llcztudWxsIT09YSYmbnVsbCE9PWEuZmlyc3RDb250ZXh0JiYoMCE9PShhLmxhbmVzJmIpJiYoRz0hMCksYS5maXJzdENvbnRleHQ9bnVsbCl9XG5mdW5jdGlvbiBaZChhKXt2YXIgYj1TYT9hLl9jdXJyZW50VmFsdWU6YS5fY3VycmVudFZhbHVlMjtpZihUZCE9PWEpaWYoYT17Y29udGV4dDphLG1lbW9pemVkVmFsdWU6YixuZXh0Om51bGx9LG51bGw9PT1TZCl7aWYobnVsbD09PVJkKXRocm93IEVycm9yKG4oMzA4KSk7U2Q9YTtSZC5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmF9fWVsc2UgU2Q9U2QubmV4dD1hO3JldHVybiBifXZhciAkZD1udWxsO2Z1bmN0aW9uIGFlKGEpe251bGw9PT0kZD8kZD1bYV06JGQucHVzaChhKX1mdW5jdGlvbiBiZShhLGIsYyxkKXt2YXIgZT1iLmludGVybGVhdmVkO251bGw9PT1lPyhjLm5leHQ9YyxhZShiKSk6KGMubmV4dD1lLm5leHQsZS5uZXh0PWMpO2IuaW50ZXJsZWF2ZWQ9YztyZXR1cm4gY2UoYSxkKX1cbmZ1bmN0aW9uIGNlKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH12YXIgZGU9ITE7ZnVuY3Rpb24gZWUoYSl7YS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1cbmZ1bmN0aW9uIGZlKGEsYil7YT1hLnVwZGF0ZVF1ZXVlO2IudXBkYXRlUXVldWU9PT1hJiYoYi51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTphLmZpcnN0QmFzZVVwZGF0ZSxsYXN0QmFzZVVwZGF0ZTphLmxhc3RCYXNlVXBkYXRlLHNoYXJlZDphLnNoYXJlZCxlZmZlY3RzOmEuZWZmZWN0c30pfWZ1bmN0aW9uIGdlKGEsYil7cmV0dXJue2V2ZW50VGltZTphLGxhbmU6Yix0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fVxuZnVuY3Rpb24gaGUoYSxiLGMpe3ZhciBkPWEudXBkYXRlUXVldWU7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7ZD1kLnNoYXJlZDtpZigwIT09KEgmMikpe3ZhciBlPWQucGVuZGluZztudWxsPT09ZT9iLm5leHQ9YjooYi5uZXh0PWUubmV4dCxlLm5leHQ9Yik7ZC5wZW5kaW5nPWI7cmV0dXJuIGNlKGEsYyl9ZT1kLmludGVybGVhdmVkO251bGw9PT1lPyhiLm5leHQ9YixhZShkKSk6KGIubmV4dD1lLm5leHQsZS5uZXh0PWIpO2QuaW50ZXJsZWF2ZWQ9YjtyZXR1cm4gY2UoYSxjKX1mdW5jdGlvbiBpZShhLGIsYyl7Yj1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iJiYoYj1iLnNoYXJlZCwwIT09KGMmNDE5NDI0MCkpKXt2YXIgZD1iLmxhbmVzO2QmPWEucGVuZGluZ0xhbmVzO2N8PWQ7Yi5sYW5lcz1jO0hjKGEsYyl9fVxuZnVuY3Rpb24gamUoYSxiKXt2YXIgYz1hLnVwZGF0ZVF1ZXVlLGQ9YS5hbHRlcm5hdGU7aWYobnVsbCE9PWQmJihkPWQudXBkYXRlUXVldWUsYz09PWQpKXt2YXIgZT1udWxsLGY9bnVsbDtjPWMuZmlyc3RCYXNlVXBkYXRlO2lmKG51bGwhPT1jKXtkb3t2YXIgZz17ZXZlbnRUaW1lOmMuZXZlbnRUaW1lLGxhbmU6Yy5sYW5lLHRhZzpjLnRhZyxwYXlsb2FkOmMucGF5bG9hZCxjYWxsYmFjazpjLmNhbGxiYWNrLG5leHQ6bnVsbH07bnVsbD09PWY/ZT1mPWc6Zj1mLm5leHQ9ZztjPWMubmV4dH13aGlsZShudWxsIT09Yyk7bnVsbD09PWY/ZT1mPWI6Zj1mLm5leHQ9Yn1lbHNlIGU9Zj1iO2M9e2Jhc2VTdGF0ZTpkLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZSxsYXN0QmFzZVVwZGF0ZTpmLHNoYXJlZDpkLnNoYXJlZCxlZmZlY3RzOmQuZWZmZWN0c307YS51cGRhdGVRdWV1ZT1jO3JldHVybn1hPWMubGFzdEJhc2VVcGRhdGU7bnVsbD09PWE/Yy5maXJzdEJhc2VVcGRhdGU9YjphLm5leHQ9XG5iO2MubGFzdEJhc2VVcGRhdGU9Yn1cbmZ1bmN0aW9uIGtlKGEsYixjLGQpe3ZhciBlPWEudXBkYXRlUXVldWU7ZGU9ITE7dmFyIGY9ZS5maXJzdEJhc2VVcGRhdGUsZz1lLmxhc3RCYXNlVXBkYXRlLGg9ZS5zaGFyZWQucGVuZGluZztpZihudWxsIT09aCl7ZS5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBrPWgsbD1rLm5leHQ7ay5uZXh0PW51bGw7bnVsbD09PWc/Zj1sOmcubmV4dD1sO2c9azt2YXIgbT1hLmFsdGVybmF0ZTtudWxsIT09bSYmKG09bS51cGRhdGVRdWV1ZSxoPW0ubGFzdEJhc2VVcGRhdGUsaCE9PWcmJihudWxsPT09aD9tLmZpcnN0QmFzZVVwZGF0ZT1sOmgubmV4dD1sLG0ubGFzdEJhc2VVcGRhdGU9aykpfWlmKG51bGwhPT1mKXt2YXIgcj1lLmJhc2VTdGF0ZTtnPTA7bT1sPWs9bnVsbDtoPWY7ZG97dmFyIHA9aC5sYW5lLEI9aC5ldmVudFRpbWU7aWYoKGQmcCk9PT1wKXtudWxsIT09bSYmKG09bS5uZXh0PXtldmVudFRpbWU6QixsYW5lOjAsdGFnOmgudGFnLHBheWxvYWQ6aC5wYXlsb2FkLGNhbGxiYWNrOmguY2FsbGJhY2ssXG5uZXh0Om51bGx9KTthOnt2YXIgdz1hLFk9aDtwPWI7Qj1jO3N3aXRjaChZLnRhZyl7Y2FzZSAxOnc9WS5wYXlsb2FkO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiB3KXtyPXcuY2FsbChCLHIscCk7YnJlYWsgYX1yPXc7YnJlYWsgYTtjYXNlIDM6dy5mbGFncz13LmZsYWdzJi02NTUzN3wxMjg7Y2FzZSAwOnc9WS5wYXlsb2FkO3A9XCJmdW5jdGlvblwiPT09dHlwZW9mIHc/dy5jYWxsKEIscixwKTp3O2lmKG51bGw9PT1wfHx2b2lkIDA9PT1wKWJyZWFrIGE7cj1jYSh7fSxyLHApO2JyZWFrIGE7Y2FzZSAyOmRlPSEwfX1udWxsIT09aC5jYWxsYmFjayYmMCE9PWgubGFuZSYmKGEuZmxhZ3N8PTY0LHA9ZS5lZmZlY3RzLG51bGw9PT1wP2UuZWZmZWN0cz1baF06cC5wdXNoKGgpKX1lbHNlIEI9e2V2ZW50VGltZTpCLGxhbmU6cCx0YWc6aC50YWcscGF5bG9hZDpoLnBheWxvYWQsY2FsbGJhY2s6aC5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT1tPyhsPW09QixrPXIpOm09bS5uZXh0PUIsZ3w9XG5wO2g9aC5uZXh0O2lmKG51bGw9PT1oKWlmKGg9ZS5zaGFyZWQucGVuZGluZyxudWxsPT09aClicmVhaztlbHNlIHA9aCxoPXAubmV4dCxwLm5leHQ9bnVsbCxlLmxhc3RCYXNlVXBkYXRlPXAsZS5zaGFyZWQucGVuZGluZz1udWxsfXdoaWxlKDEpO251bGw9PT1tJiYoaz1yKTtlLmJhc2VTdGF0ZT1rO2UuZmlyc3RCYXNlVXBkYXRlPWw7ZS5sYXN0QmFzZVVwZGF0ZT1tO2I9ZS5zaGFyZWQuaW50ZXJsZWF2ZWQ7aWYobnVsbCE9PWIpe2U9YjtkbyBnfD1lLmxhbmUsZT1lLm5leHQ7d2hpbGUoZSE9PWIpfWVsc2UgbnVsbD09PWYmJihlLnNoYXJlZC5sYW5lcz0wKTtsZXw9ZzthLmxhbmVzPWc7YS5tZW1vaXplZFN0YXRlPXJ9fVxuZnVuY3Rpb24gbWUoYSxiLGMpe2E9Yi5lZmZlY3RzO2IuZWZmZWN0cz1udWxsO2lmKG51bGwhPT1hKWZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBkPWFbYl0sZT1kLmNhbGxiYWNrO2lmKG51bGwhPT1lKXtkLmNhbGxiYWNrPW51bGw7ZD1jO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlKXRocm93IEVycm9yKG4oMTkxLGUpKTtlLmNhbGwoZCl9fX12YXIgbmU9e30sb2U9aWMobmUpLHBlPWljKG5lKSxxZT1pYyhuZSk7ZnVuY3Rpb24gcmUoYSl7aWYoYT09PW5lKXRocm93IEVycm9yKG4oMTc0KSk7cmV0dXJuIGF9ZnVuY3Rpb24gc2UoYSxiKXt2KHFlLGIpO3YocGUsYSk7dihvZSxuZSk7YT1GYShiKTtxKG9lKTt2KG9lLGEpfWZ1bmN0aW9uIHRlKCl7cShvZSk7cShwZSk7cShxZSl9ZnVuY3Rpb24gdWUoYSl7dmFyIGI9cmUocWUuY3VycmVudCksYz1yZShvZS5jdXJyZW50KTtiPUdhKGMsYS50eXBlLGIpO2MhPT1iJiYodihwZSxhKSx2KG9lLGIpKX1cbmZ1bmN0aW9uIHZlKGEpe3BlLmN1cnJlbnQ9PT1hJiYocShvZSkscShwZSkpfXZhciBJPWljKDApO2Z1bmN0aW9uIHdlKGEpe2Zvcih2YXIgYj1hO251bGwhPT1iOyl7aWYoMTM9PT1iLnRhZyl7dmFyIGM9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbD09PWN8fEpiKGMpfHxLYihjKSkpcmV0dXJuIGJ9ZWxzZSBpZigxOT09PWIudGFnJiZ2b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpe2lmKDAhPT0oYi5mbGFncyYxMjgpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH12YXIgeGU9W107XG5mdW5jdGlvbiB5ZSgpe2Zvcih2YXIgYT0wO2E8eGUubGVuZ3RoO2ErKyl7dmFyIGI9eGVbYV07U2E/Yi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1udWxsOmIuX3dvcmtJblByb2dyZXNzVmVyc2lvblNlY29uZGFyeT1udWxsfXhlLmxlbmd0aD0wfXZhciB6ZT1kYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLEFlPWRhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLEJlPTAsSj1udWxsLEs9bnVsbCxMPW51bGwsQ2U9ITEsRGU9ITEsRWU9MCxGZT0wO2Z1bmN0aW9uIE0oKXt0aHJvdyBFcnJvcihuKDMyMSkpO31mdW5jdGlvbiBHZShhLGIpe2lmKG51bGw9PT1iKXJldHVybiExO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGgmJmM8YS5sZW5ndGg7YysrKWlmKCFWYyhhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfVxuZnVuY3Rpb24gSGUoYSxiLGMsZCxlLGYpe0JlPWY7Sj1iO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtiLmxhbmVzPTA7emUuY3VycmVudD1udWxsPT09YXx8bnVsbD09PWEubWVtb2l6ZWRTdGF0ZT9JZTpKZTthPWMoZCxlKTtpZihEZSl7Zj0wO2Rve0RlPSExO0VlPTA7aWYoMjU8PWYpdGhyb3cgRXJyb3IobigzMDEpKTtmKz0xO0w9Sz1udWxsO2IudXBkYXRlUXVldWU9bnVsbDt6ZS5jdXJyZW50PUtlO2E9YyhkLGUpfXdoaWxlKERlKX16ZS5jdXJyZW50PUxlO2I9bnVsbCE9PUsmJm51bGwhPT1LLm5leHQ7QmU9MDtMPUs9Sj1udWxsO0NlPSExO2lmKGIpdGhyb3cgRXJyb3IobigzMDApKTtyZXR1cm4gYX1mdW5jdGlvbiBNZSgpe3ZhciBhPTAhPT1FZTtFZT0wO3JldHVybiBhfVxuZnVuY3Rpb24gTmUoKXt2YXIgYT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtudWxsPT09TD9KLm1lbW9pemVkU3RhdGU9TD1hOkw9TC5uZXh0PWE7cmV0dXJuIEx9ZnVuY3Rpb24gT2UoKXtpZihudWxsPT09Syl7dmFyIGE9Si5hbHRlcm5hdGU7YT1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGE9Sy5uZXh0O3ZhciBiPW51bGw9PT1MP0oubWVtb2l6ZWRTdGF0ZTpMLm5leHQ7aWYobnVsbCE9PWIpTD1iLEs9YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKG4oMzEwKSk7Sz1hO2E9e21lbW9pemVkU3RhdGU6Sy5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpLLmJhc2VTdGF0ZSxiYXNlUXVldWU6Sy5iYXNlUXVldWUscXVldWU6Sy5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1MP0oubWVtb2l6ZWRTdGF0ZT1MPWE6TD1MLm5leHQ9YX1yZXR1cm4gTH1cbmZ1bmN0aW9uIFBlKGEsYil7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGI/YihhKTpifVxuZnVuY3Rpb24gUWUoYSl7dmFyIGI9T2UoKSxjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IobigzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1LLGU9ZC5iYXNlUXVldWUsZj1jLnBlbmRpbmc7aWYobnVsbCE9PWYpe2lmKG51bGwhPT1lKXt2YXIgZz1lLm5leHQ7ZS5uZXh0PWYubmV4dDtmLm5leHQ9Z31kLmJhc2VRdWV1ZT1lPWY7Yy5wZW5kaW5nPW51bGx9aWYobnVsbCE9PWUpe2Y9ZS5uZXh0O2Q9ZC5iYXNlU3RhdGU7dmFyIGg9Zz1udWxsLGs9bnVsbCxsPWY7ZG97dmFyIG09bC5sYW5lO2lmKChCZSZtKT09PW0pbnVsbCE9PWsmJihrPWsubmV4dD17bGFuZTowLGFjdGlvbjpsLmFjdGlvbixoYXNFYWdlclN0YXRlOmwuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOmwuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxkPWwuaGFzRWFnZXJTdGF0ZT9sLmVhZ2VyU3RhdGU6YShkLGwuYWN0aW9uKTtlbHNle3ZhciByPXtsYW5lOm0sYWN0aW9uOmwuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6bC5oYXNFYWdlclN0YXRlLFxuZWFnZXJTdGF0ZTpsLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtudWxsPT09az8oaD1rPXIsZz1kKTprPWsubmV4dD1yO0oubGFuZXN8PW07bGV8PW19bD1sLm5leHR9d2hpbGUobnVsbCE9PWwmJmwhPT1mKTtudWxsPT09az9nPWQ6ay5uZXh0PWg7VmMoZCxiLm1lbW9pemVkU3RhdGUpfHwoRz0hMCk7Yi5tZW1vaXplZFN0YXRlPWQ7Yi5iYXNlU3RhdGU9ZztiLmJhc2VRdWV1ZT1rO2MubGFzdFJlbmRlcmVkU3RhdGU9ZH1hPWMuaW50ZXJsZWF2ZWQ7aWYobnVsbCE9PWEpe2U9YTtkbyBmPWUubGFuZSxKLmxhbmVzfD1mLGxlfD1mLGU9ZS5uZXh0O3doaWxlKGUhPT1hKX1lbHNlIG51bGw9PT1lJiYoYy5sYW5lcz0wKTtyZXR1cm5bYi5tZW1vaXplZFN0YXRlLGMuZGlzcGF0Y2hdfVxuZnVuY3Rpb24gUmUoYSl7dmFyIGI9T2UoKSxjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IobigzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1jLmRpc3BhdGNoLGU9Yy5wZW5kaW5nLGY9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1lKXtjLnBlbmRpbmc9bnVsbDt2YXIgZz1lPWUubmV4dDtkbyBmPWEoZixnLmFjdGlvbiksZz1nLm5leHQ7d2hpbGUoZyE9PWUpO1ZjKGYsYi5tZW1vaXplZFN0YXRlKXx8KEc9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1mdW5jdGlvbiBTZSgpe31cbmZ1bmN0aW9uIFRlKGEsYil7dmFyIGM9SixkPU9lKCksZT1iKCksZj0hVmMoZC5tZW1vaXplZFN0YXRlLGUpO2YmJihkLm1lbW9pemVkU3RhdGU9ZSxHPSEwKTtkPWQucXVldWU7VWUoVmUuYmluZChudWxsLGMsZCxhKSxbYV0pO2lmKGQuZ2V0U25hcHNob3QhPT1ifHxmfHxudWxsIT09TCYmTC5tZW1vaXplZFN0YXRlLnRhZyYxKXtjLmZsYWdzfD0yMDQ4O1dlKDksWGUuYmluZChudWxsLGMsZCxlLGIpLHZvaWQgMCxudWxsKTtpZihudWxsPT09Til0aHJvdyBFcnJvcihuKDM0OSkpOzAhPT0oQmUmMzApfHxZZShjLGIsZSl9cmV0dXJuIGV9ZnVuY3Rpb24gWWUoYSxiLGMpe2EuZmxhZ3N8PTE2Mzg0O2E9e2dldFNuYXBzaG90OmIsdmFsdWU6Y307Yj1KLnVwZGF0ZVF1ZXVlO251bGw9PT1iPyhiPXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LEoudXBkYXRlUXVldWU9YixiLnN0b3Jlcz1bYV0pOihjPWIuc3RvcmVzLG51bGw9PT1jP2Iuc3RvcmVzPVthXTpjLnB1c2goYSkpfVxuZnVuY3Rpb24gWGUoYSxiLGMsZCl7Yi52YWx1ZT1jO2IuZ2V0U25hcHNob3Q9ZDtaZShiKSYmJGUoYSl9ZnVuY3Rpb24gVmUoYSxiLGMpe3JldHVybiBjKGZ1bmN0aW9uKCl7WmUoYikmJiRlKGEpfSl9ZnVuY3Rpb24gWmUoYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBjPWIoKTtyZXR1cm4hVmMoYSxjKX1jYXRjaChkKXtyZXR1cm4hMH19ZnVuY3Rpb24gJGUoYSl7dmFyIGI9Y2UoYSwxKTtudWxsIT09YiYmYWYoYixhLDEsLTEpfVxuZnVuY3Rpb24gYmYoYSl7dmFyIGI9TmUoKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSYmKGE9YSgpKTtiLm1lbW9pemVkU3RhdGU9Yi5iYXNlU3RhdGU9YTthPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpQZSxsYXN0UmVuZGVyZWRTdGF0ZTphfTtiLnF1ZXVlPWE7YT1hLmRpc3BhdGNoPWNmLmJpbmQobnVsbCxKLGEpO3JldHVybltiLm1lbW9pemVkU3RhdGUsYV19XG5mdW5jdGlvbiBXZShhLGIsYyxkKXthPXt0YWc6YSxjcmVhdGU6YixkZXN0cm95OmMsZGVwczpkLG5leHQ6bnVsbH07Yj1KLnVwZGF0ZVF1ZXVlO251bGw9PT1iPyhiPXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LEoudXBkYXRlUXVldWU9YixiLmxhc3RFZmZlY3Q9YS5uZXh0PWEpOihjPWIubGFzdEVmZmVjdCxudWxsPT09Yz9iLmxhc3RFZmZlY3Q9YS5uZXh0PWE6KGQ9Yy5uZXh0LGMubmV4dD1hLGEubmV4dD1kLGIubGFzdEVmZmVjdD1hKSk7cmV0dXJuIGF9ZnVuY3Rpb24gZGYoKXtyZXR1cm4gT2UoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGVmKGEsYixjLGQpe3ZhciBlPU5lKCk7Si5mbGFnc3w9YTtlLm1lbW9pemVkU3RhdGU9V2UoMXxiLGMsdm9pZCAwLHZvaWQgMD09PWQ/bnVsbDpkKX1cbmZ1bmN0aW9uIGZmKGEsYixjLGQpe3ZhciBlPU9lKCk7ZD12b2lkIDA9PT1kP251bGw6ZDt2YXIgZj12b2lkIDA7aWYobnVsbCE9PUspe3ZhciBnPUsubWVtb2l6ZWRTdGF0ZTtmPWcuZGVzdHJveTtpZihudWxsIT09ZCYmR2UoZCxnLmRlcHMpKXtlLm1lbW9pemVkU3RhdGU9V2UoYixjLGYsZCk7cmV0dXJufX1KLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1XZSgxfGIsYyxmLGQpfWZ1bmN0aW9uIGdmKGEsYil7cmV0dXJuIGVmKDgzOTA2NTYsOCxhLGIpfWZ1bmN0aW9uIFVlKGEsYil7cmV0dXJuIGZmKDIwNDgsOCxhLGIpfWZ1bmN0aW9uIGhmKGEsYil7cmV0dXJuIGZmKDQsMixhLGIpfWZ1bmN0aW9uIGpmKGEsYil7cmV0dXJuIGZmKDQsNCxhLGIpfVxuZnVuY3Rpb24ga2YoYSxiKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYilyZXR1cm4gYT1hKCksYihhKSxmdW5jdGlvbigpe2IobnVsbCl9O2lmKG51bGwhPT1iJiZ2b2lkIDAhPT1iKXJldHVybiBhPWEoKSxiLmN1cnJlbnQ9YSxmdW5jdGlvbigpe2IuY3VycmVudD1udWxsfX1mdW5jdGlvbiBsZihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIGZmKDQsNCxrZi5iaW5kKG51bGwsYixhKSxjKX1mdW5jdGlvbiBtZigpe31mdW5jdGlvbiBuZihhLGIpe3ZhciBjPU9lKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZHZShiLGRbMV0pKXJldHVybiBkWzBdO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1cbmZ1bmN0aW9uIG9mKGEsYil7dmFyIGM9T2UoKTtiPXZvaWQgMD09PWI/bnVsbDpiO3ZhciBkPWMubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZCYmbnVsbCE9PWImJkdlKGIsZFsxXSkpcmV0dXJuIGRbMF07YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfWZ1bmN0aW9uIHBmKGEsYixjKXtpZigwPT09KEJlJjIxKSlyZXR1cm4gYS5iYXNlU3RhdGUmJihhLmJhc2VTdGF0ZT0hMSxHPSEwKSxhLm1lbW9pemVkU3RhdGU9YztWYyhjLGIpfHwoYz1EYygpLEoubGFuZXN8PWMsbGV8PWMsYS5iYXNlU3RhdGU9ITApO3JldHVybiBifWZ1bmN0aW9uIHFmKGEsYil7dmFyIGM9QztDPTAhPT1jJiY0PmM/Yzo0O2EoITApO3ZhciBkPUFlLnRyYW5zaXRpb247QWUudHJhbnNpdGlvbj17fTt0cnl7YSghMSksYigpfWZpbmFsbHl7Qz1jLEFlLnRyYW5zaXRpb249ZH19ZnVuY3Rpb24gcmYoKXtyZXR1cm4gT2UoKS5tZW1vaXplZFN0YXRlfVxuZnVuY3Rpb24gc2YoYSxiLGMpe3ZhciBkPXRmKGEpO2M9e2xhbmU6ZCxhY3Rpb246YyxoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKHVmKGEpKXZmKGIsYyk7ZWxzZSBpZihjPWJlKGEsYixjLGQpLG51bGwhPT1jKXt2YXIgZT1PKCk7YWYoYyxhLGQsZSk7d2YoYyxiLGQpfX1cbmZ1bmN0aW9uIGNmKGEsYixjKXt2YXIgZD10ZihhKSxlPXtsYW5lOmQsYWN0aW9uOmMsaGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfTtpZih1ZihhKSl2ZihiLGUpO2Vsc2V7dmFyIGY9YS5hbHRlcm5hdGU7aWYoMD09PWEubGFuZXMmJihudWxsPT09Znx8MD09PWYubGFuZXMpJiYoZj1iLmxhc3RSZW5kZXJlZFJlZHVjZXIsbnVsbCE9PWYpKXRyeXt2YXIgZz1iLmxhc3RSZW5kZXJlZFN0YXRlLGg9ZihnLGMpO2UuaGFzRWFnZXJTdGF0ZT0hMDtlLmVhZ2VyU3RhdGU9aDtpZihWYyhoLGcpKXt2YXIgaz1iLmludGVybGVhdmVkO251bGw9PT1rPyhlLm5leHQ9ZSxhZShiKSk6KGUubmV4dD1rLm5leHQsay5uZXh0PWUpO2IuaW50ZXJsZWF2ZWQ9ZTtyZXR1cm59fWNhdGNoKGwpe31maW5hbGx5e31jPWJlKGEsYixlLGQpO251bGwhPT1jJiYoZT1PKCksYWYoYyxhLGQsZSksd2YoYyxiLGQpKX19XG5mdW5jdGlvbiB1ZihhKXt2YXIgYj1hLmFsdGVybmF0ZTtyZXR1cm4gYT09PUp8fG51bGwhPT1iJiZiPT09Sn1mdW5jdGlvbiB2ZihhLGIpe0RlPUNlPSEwO3ZhciBjPWEucGVuZGluZztudWxsPT09Yz9iLm5leHQ9YjooYi5uZXh0PWMubmV4dCxjLm5leHQ9Yik7YS5wZW5kaW5nPWJ9ZnVuY3Rpb24gd2YoYSxiLGMpe2lmKDAhPT0oYyY0MTk0MjQwKSl7dmFyIGQ9Yi5sYW5lcztkJj1hLnBlbmRpbmdMYW5lcztjfD1kO2IubGFuZXM9YztIYyhhLGMpfX1cbnZhciBMZT17cmVhZENvbnRleHQ6WmQsdXNlQ2FsbGJhY2s6TSx1c2VDb250ZXh0Ok0sdXNlRWZmZWN0Ok0sdXNlSW1wZXJhdGl2ZUhhbmRsZTpNLHVzZUluc2VydGlvbkVmZmVjdDpNLHVzZUxheW91dEVmZmVjdDpNLHVzZU1lbW86TSx1c2VSZWR1Y2VyOk0sdXNlUmVmOk0sdXNlU3RhdGU6TSx1c2VEZWJ1Z1ZhbHVlOk0sdXNlRGVmZXJyZWRWYWx1ZTpNLHVzZVRyYW5zaXRpb246TSx1c2VNdXRhYmxlU291cmNlOk0sdXNlU3luY0V4dGVybmFsU3RvcmU6TSx1c2VJZDpNLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sSWU9e3JlYWRDb250ZXh0OlpkLHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGEsYil7TmUoKS5tZW1vaXplZFN0YXRlPVthLHZvaWQgMD09PWI/bnVsbDpiXTtyZXR1cm4gYX0sdXNlQ29udGV4dDpaZCx1c2VFZmZlY3Q6Z2YsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIGVmKDQxOTQzMDgsXG40LGtmLmJpbmQobnVsbCxiLGEpLGMpfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZWYoNDE5NDMwOCw0LGEsYil9LHVzZUluc2VydGlvbkVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBlZig0LDIsYSxiKX0sdXNlTWVtbzpmdW5jdGlvbihhLGIpe3ZhciBjPU5lKCk7Yj12b2lkIDA9PT1iP251bGw6YjthPWEoKTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU5lKCk7Yj12b2lkIDAhPT1jP2MoYik6YjtkLm1lbW9pemVkU3RhdGU9ZC5iYXNlU3RhdGU9YjthPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphLGxhc3RSZW5kZXJlZFN0YXRlOmJ9O2QucXVldWU9YTthPWEuZGlzcGF0Y2g9c2YuYmluZChudWxsLEosYSk7cmV0dXJuW2QubWVtb2l6ZWRTdGF0ZSxhXX0sdXNlUmVmOmZ1bmN0aW9uKGEpe3ZhciBiPVxuTmUoKTthPXtjdXJyZW50OmF9O3JldHVybiBiLm1lbW9pemVkU3RhdGU9YX0sdXNlU3RhdGU6YmYsdXNlRGVidWdWYWx1ZTptZix1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBOZSgpLm1lbW9pemVkU3RhdGU9YX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPWJmKCExKSxiPWFbMF07YT1xZi5iaW5kKG51bGwsYVsxXSk7TmUoKS5tZW1vaXplZFN0YXRlPWE7cmV0dXJuW2IsYV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1KLGU9TmUoKTtpZihGKXtpZih2b2lkIDA9PT1jKXRocm93IEVycm9yKG4oNDA3KSk7Yz1jKCl9ZWxzZXtjPWIoKTtpZihudWxsPT09Til0aHJvdyBFcnJvcihuKDM0OSkpOzAhPT0oQmUmMzApfHxZZShkLGIsYyl9ZS5tZW1vaXplZFN0YXRlPWM7dmFyIGY9e3ZhbHVlOmMsZ2V0U25hcHNob3Q6Yn07ZS5xdWV1ZT1mO2dmKFZlLmJpbmQobnVsbCxkLFxuZixhKSxbYV0pO2QuZmxhZ3N8PTIwNDg7V2UoOSxYZS5iaW5kKG51bGwsZCxmLGMsYiksdm9pZCAwLG51bGwpO3JldHVybiBjfSx1c2VJZDpmdW5jdGlvbigpe3ZhciBhPU5lKCksYj1OLmlkZW50aWZpZXJQcmVmaXg7aWYoRil7dmFyIGM9amQ7dmFyIGQ9aWQ7Yz0oZCZ+KDE8PDMyLXRjKGQpLTEpKS50b1N0cmluZygzMikrYztiPVwiOlwiK2IrXCJSXCIrYztjPUVlKys7MDxjJiYoYis9XCJIXCIrYy50b1N0cmluZygzMikpO2IrPVwiOlwifWVsc2UgYz1GZSsrLGI9XCI6XCIrYitcInJcIitjLnRvU3RyaW5nKDMyKStcIjpcIjtyZXR1cm4gYS5tZW1vaXplZFN0YXRlPWJ9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sSmU9e3JlYWRDb250ZXh0OlpkLHVzZUNhbGxiYWNrOm5mLHVzZUNvbnRleHQ6WmQsdXNlRWZmZWN0OlVlLHVzZUltcGVyYXRpdmVIYW5kbGU6bGYsdXNlSW5zZXJ0aW9uRWZmZWN0OmhmLHVzZUxheW91dEVmZmVjdDpqZix1c2VNZW1vOm9mLHVzZVJlZHVjZXI6UWUsdXNlUmVmOmRmLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFFlKFBlKX0sXG51c2VEZWJ1Z1ZhbHVlOm1mLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9T2UoKTtyZXR1cm4gcGYoYixLLm1lbW9pemVkU3RhdGUsYSl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1RZShQZSlbMF0sYj1PZSgpLm1lbW9pemVkU3RhdGU7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6U2UsdXNlU3luY0V4dGVybmFsU3RvcmU6VGUsdXNlSWQ6cmYsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxLZT17cmVhZENvbnRleHQ6WmQsdXNlQ2FsbGJhY2s6bmYsdXNlQ29udGV4dDpaZCx1c2VFZmZlY3Q6VWUsdXNlSW1wZXJhdGl2ZUhhbmRsZTpsZix1c2VJbnNlcnRpb25FZmZlY3Q6aGYsdXNlTGF5b3V0RWZmZWN0OmpmLHVzZU1lbW86b2YsdXNlUmVkdWNlcjpSZSx1c2VSZWY6ZGYsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gUmUoUGUpfSx1c2VEZWJ1Z1ZhbHVlOm1mLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9T2UoKTtyZXR1cm4gbnVsbD09PVxuSz9iLm1lbW9pemVkU3RhdGU9YTpwZihiLEsubWVtb2l6ZWRTdGF0ZSxhKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPVJlKFBlKVswXSxiPU9lKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bYSxiXX0sdXNlTXV0YWJsZVNvdXJjZTpTZSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpUZSx1c2VJZDpyZix1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9O2Z1bmN0aW9uIHhmKGEsYil7aWYoYSYmYS5kZWZhdWx0UHJvcHMpe2I9Y2Eoe30sYik7YT1hLmRlZmF1bHRQcm9wcztmb3IodmFyIGMgaW4gYSl2b2lkIDA9PT1iW2NdJiYoYltjXT1hW2NdKTtyZXR1cm4gYn1yZXR1cm4gYn1mdW5jdGlvbiB5ZihhLGIsYyxkKXtiPWEubWVtb2l6ZWRTdGF0ZTtjPWMoZCxiKTtjPW51bGw9PT1jfHx2b2lkIDA9PT1jP2I6Y2Eoe30sYixjKTthLm1lbW9pemVkU3RhdGU9YzswPT09YS5sYW5lcyYmKGEudXBkYXRlUXVldWUuYmFzZVN0YXRlPWMpfVxudmFyIHpmPXtpc01vdW50ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5fcmVhY3RJbnRlcm5hbHMpP3dhKGEpPT09YTohMX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPU8oKSxlPXRmKGEpLGY9Z2UoZCxlKTtmLnBheWxvYWQ9Yjt2b2lkIDAhPT1jJiZudWxsIT09YyYmKGYuY2FsbGJhY2s9Yyk7Yj1oZShhLGYsZSk7bnVsbCE9PWImJihhZihiLGEsZSxkKSxpZShiLGEsZSkpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPU8oKSxlPXRmKGEpLGY9Z2UoZCxlKTtmLnRhZz0xO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtiPWhlKGEsZixlKTtudWxsIT09YiYmKGFmKGIsYSxlLGQpLGllKGIsYSxlKSl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihhLGIpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGM9TygpLGQ9XG50ZihhKSxlPWdlKGMsZCk7ZS50YWc9Mjt2b2lkIDAhPT1iJiZudWxsIT09YiYmKGUuY2FsbGJhY2s9Yik7Yj1oZShhLGUsZCk7bnVsbCE9PWImJihhZihiLGEsZCxjKSxpZShiLGEsZCkpfX07ZnVuY3Rpb24gQWYoYSxiLGMsZCxlLGYsZyl7YT1hLnN0YXRlTm9kZTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5zaG91bGRDb21wb25lbnRVcGRhdGU/YS5zaG91bGRDb21wb25lbnRVcGRhdGUoZCxmLGcpOmIucHJvdG90eXBlJiZiLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hRGQoYyxkKXx8IURkKGUsZik6ITB9XG5mdW5jdGlvbiBCZihhLGIsYyl7dmFyIGQ9ITEsZT1qYzt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/Zj1aZChmKTooZT1BKGIpP2tjOnguY3VycmVudCxkPWIuY29udGV4dFR5cGVzLGY9KGQ9bnVsbCE9PWQmJnZvaWQgMCE9PWQpP21jKGEsZSk6amMpO2I9bmV3IGIoYyxmKTthLm1lbW9pemVkU3RhdGU9bnVsbCE9PWIuc3RhdGUmJnZvaWQgMCE9PWIuc3RhdGU/Yi5zdGF0ZTpudWxsO2IudXBkYXRlcj16ZjthLnN0YXRlTm9kZT1iO2IuX3JlYWN0SW50ZXJuYWxzPWE7ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1mKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIENmKGEsYixjLGQpe2E9Yi5zdGF0ZTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO2Iuc3RhdGUhPT1hJiZ6Zi5lbnF1ZXVlUmVwbGFjZVN0YXRlKGIsYi5zdGF0ZSxudWxsKX1cbmZ1bmN0aW9uIERmKGEsYixjLGQpe3ZhciBlPWEuc3RhdGVOb2RlO2UucHJvcHM9YztlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtlLnJlZnM9e307ZWUoYSk7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2UuY29udGV4dD1aZChmKTooZj1BKGIpP2tjOnguY3VycmVudCxlLmNvbnRleHQ9bWMoYSxmKSk7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7Zj1iLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZiYmKHlmKGEsYixmLGMpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnR8fChiPWUuc3RhdGUsXG5cImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnQmJmUuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksYiE9PWUuc3RhdGUmJnpmLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpLGtlKGEsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnREaWRNb3VudCYmKGEuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIEVmKGEsYil7dHJ5e3ZhciBjPVwiXCIsZD1iO2RvIGMrPUVkKGQpLGQ9ZC5yZXR1cm47d2hpbGUoZCk7dmFyIGU9Y31jYXRjaChmKXtlPVwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIrZi5tZXNzYWdlK1wiXFxuXCIrZi5zdGFja31yZXR1cm57dmFsdWU6YSxzb3VyY2U6YixzdGFjazplLGRpZ2VzdDpudWxsfX1cbmZ1bmN0aW9uIEZmKGEsYixjKXtyZXR1cm57dmFsdWU6YSxzb3VyY2U6bnVsbCxzdGFjazpudWxsIT1jP2M6bnVsbCxkaWdlc3Q6bnVsbCE9Yj9iOm51bGx9fWZ1bmN0aW9uIEdmKGEsYil7dHJ5e2NvbnNvbGUuZXJyb3IoYi52YWx1ZSl9Y2F0Y2goYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGM7fSl9fXZhciBIZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcDtmdW5jdGlvbiBJZihhLGIsYyl7Yz1nZSgtMSxjKTtjLnRhZz0zO2MucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgZD1iLnZhbHVlO2MuY2FsbGJhY2s9ZnVuY3Rpb24oKXtKZnx8KEpmPSEwLEtmPWQpO0dmKGEsYil9O3JldHVybiBjfVxuZnVuY3Rpb24gTGYoYSxiLGMpe2M9Z2UoLTEsYyk7Yy50YWc9Mzt2YXIgZD1hLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZT1iLnZhbHVlO2MucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiBkKGUpfTtjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7R2YoYSxiKX19dmFyIGY9YS5zdGF0ZU5vZGU7bnVsbCE9PWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLmNvbXBvbmVudERpZENhdGNoJiYoYy5jYWxsYmFjaz1mdW5jdGlvbigpe0dmKGEsYik7XCJmdW5jdGlvblwiIT09dHlwZW9mIGQmJihudWxsPT09TWY/TWY9bmV3IFNldChbdGhpc10pOk1mLmFkZCh0aGlzKSk7dmFyIGM9Yi5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKGIudmFsdWUse2NvbXBvbmVudFN0YWNrOm51bGwhPT1jP2M6XCJcIn0pfSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBOZihhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7aWYobnVsbD09PWQpe2Q9YS5waW5nQ2FjaGU9bmV3IEhmO3ZhciBlPW5ldyBTZXQ7ZC5zZXQoYixlKX1lbHNlIGU9ZC5nZXQoYiksdm9pZCAwPT09ZSYmKGU9bmV3IFNldCxkLnNldChiLGUpKTtlLmhhcyhjKXx8KGUuYWRkKGMpLGE9T2YuYmluZChudWxsLGEsYixjKSxiLnRoZW4oYSxhKSl9ZnVuY3Rpb24gUGYoYSl7ZG97dmFyIGI7aWYoYj0xMz09PWEudGFnKWI9YS5tZW1vaXplZFN0YXRlLGI9bnVsbCE9PWI/bnVsbCE9PWIuZGVoeWRyYXRlZD8hMDohMTohMDtpZihiKXJldHVybiBhO2E9YS5yZXR1cm59d2hpbGUobnVsbCE9PWEpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gUWYoYSxiLGMsZCxlKXtpZigwPT09KGEubW9kZSYxKSlyZXR1cm4gYT09PWI/YS5mbGFnc3w9NjU1MzY6KGEuZmxhZ3N8PTEyOCxjLmZsYWdzfD0xMzEwNzIsYy5mbGFncyY9LTUyODA1LDE9PT1jLnRhZyYmKG51bGw9PT1jLmFsdGVybmF0ZT9jLnRhZz0xNzooYj1nZSgtMSwxKSxiLnRhZz0yLGhlKGMsYiwxKSkpLGMubGFuZXN8PTEpLGE7YS5mbGFnc3w9NjU1MzY7YS5sYW5lcz1lO3JldHVybiBhfXZhciBSZj1kYS5SZWFjdEN1cnJlbnRPd25lcixHPSExO2Z1bmN0aW9uIFAoYSxiLGMsZCl7Yi5jaGlsZD1udWxsPT09YT9QZChiLG51bGwsYyxkKTpPZChiLGEuY2hpbGQsYyxkKX1cbmZ1bmN0aW9uIFNmKGEsYixjLGQsZSl7Yz1jLnJlbmRlcjt2YXIgZj1iLnJlZjtZZChiLGUpO2Q9SGUoYSxiLGMsZCxmLGUpO2M9TWUoKTtpZihudWxsIT09YSYmIUcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tMjA1MyxhLmxhbmVzJj1+ZSxUZihhLGIsZSk7RiYmYyYmbWQoYik7Yi5mbGFnc3w9MTtQKGEsYixkLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gVWYoYSxiLGMsZCxlKXtpZihudWxsPT09YSl7dmFyIGY9Yy50eXBlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmJiYhVmYoZikmJnZvaWQgMD09PWYuZGVmYXVsdFByb3BzJiZudWxsPT09Yy5jb21wYXJlJiZ2b2lkIDA9PT1jLmRlZmF1bHRQcm9wcylyZXR1cm4gYi50YWc9MTUsYi50eXBlPWYsV2YoYSxiLGYsZCxlKTthPUxkKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZSk7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWY9YS5jaGlsZDtpZigwPT09KGEubGFuZXMmZSkpe3ZhciBnPWYubWVtb2l6ZWRQcm9wcztjPWMuY29tcGFyZTtjPW51bGwhPT1jP2M6RGQ7aWYoYyhnLGQpJiZhLnJlZj09PWIucmVmKXJldHVybiBUZihhLGIsZSl9Yi5mbGFnc3w9MTthPUpkKGYsZCk7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfVxuZnVuY3Rpb24gV2YoYSxiLGMsZCxlKXtpZihudWxsIT09YSl7dmFyIGY9YS5tZW1vaXplZFByb3BzO2lmKERkKGYsZCkmJmEucmVmPT09Yi5yZWYpaWYoRz0hMSxiLnBlbmRpbmdQcm9wcz1kPWYsMCE9PShhLmxhbmVzJmUpKTAhPT0oYS5mbGFncyYxMzEwNzIpJiYoRz0hMCk7ZWxzZSByZXR1cm4gYi5sYW5lcz1hLmxhbmVzLFRmKGEsYixlKX1yZXR1cm4gWGYoYSxiLGMsZCxlKX1cbmZ1bmN0aW9uIFlmKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQuY2hpbGRyZW4sZj1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbDtpZihcImhpZGRlblwiPT09ZC5tb2RlKWlmKDA9PT0oYi5tb2RlJjEpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH0sdihaZiwkZiksJGZ8PWM7ZWxzZXtpZigwPT09KGMmMTA3Mzc0MTgyNCkpcmV0dXJuIGE9bnVsbCE9PWY/Zi5iYXNlTGFuZXN8YzpjLGIubGFuZXM9Yi5jaGlsZExhbmVzPTEwNzM3NDE4MjQsYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6YSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxiLnVwZGF0ZVF1ZXVlPW51bGwsdihaZiwkZiksJGZ8PWEsbnVsbDtiLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9O2Q9bnVsbCE9PWY/Zi5iYXNlTGFuZXM6Yzt2KFpmLCRmKTskZnw9ZH1lbHNlIG51bGwhPT1cbmY/KGQ9Zi5iYXNlTGFuZXN8YyxiLm1lbW9pemVkU3RhdGU9bnVsbCk6ZD1jLHYoWmYsJGYpLCRmfD1kO1AoYSxiLGUsYyk7cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gYWcoYSxiKXt2YXIgYz1iLnJlZjtpZihudWxsPT09YSYmbnVsbCE9PWN8fG51bGwhPT1hJiZhLnJlZiE9PWMpYi5mbGFnc3w9NTEyLGIuZmxhZ3N8PTIwOTcxNTJ9ZnVuY3Rpb24gWGYoYSxiLGMsZCxlKXt2YXIgZj1BKGMpP2tjOnguY3VycmVudDtmPW1jKGIsZik7WWQoYixlKTtjPUhlKGEsYixjLGQsZixlKTtkPU1lKCk7aWYobnVsbCE9PWEmJiFHKXJldHVybiBiLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsYi5mbGFncyY9LTIwNTMsYS5sYW5lcyY9fmUsVGYoYSxiLGUpO0YmJmQmJm1kKGIpO2IuZmxhZ3N8PTE7UChhLGIsYyxlKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGJnKGEsYixjLGQsZSl7aWYoQShjKSl7dmFyIGY9ITA7cWMoYil9ZWxzZSBmPSExO1lkKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKWNnKGEsYiksQmYoYixjLGQpLERmKGIsYyxkLGUpLGQ9ITA7ZWxzZSBpZihudWxsPT09YSl7dmFyIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHM7Zy5wcm9wcz1oO3ZhciBrPWcuY29udGV4dCxsPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBsJiZudWxsIT09bD9sPVpkKGwpOihsPUEoYyk/a2M6eC5jdXJyZW50LGw9bWMoYixsKSk7dmFyIG09Yy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMscj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgbXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU7cnx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09XG5kfHxrIT09bCkmJkNmKGIsZyxkLGwpO2RlPSExO3ZhciBwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7a2UoYixkLGcsZSk7az1iLm1lbW9pemVkU3RhdGU7aCE9PWR8fHAhPT1rfHx6LmN1cnJlbnR8fGRlPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgbSYmKHlmKGIsYyxtLGQpLGs9Yi5tZW1vaXplZFN0YXRlKSwoaD1kZXx8QWYoYixjLGgsZCxwLGssbCkpPyhyfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnR8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnQmJmcuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NDE5NDMwOCkpOlxuKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NDE5NDMwOCksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPWspLGcucHJvcHM9ZCxnLnN0YXRlPWssZy5jb250ZXh0PWwsZD1oKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00MTk0MzA4KSxkPSExKX1lbHNle2c9Yi5zdGF0ZU5vZGU7ZmUoYSxiKTtoPWIubWVtb2l6ZWRQcm9wcztsPWIudHlwZT09PWIuZWxlbWVudFR5cGU/aDp4ZihiLnR5cGUsaCk7Zy5wcm9wcz1sO3I9Yi5wZW5kaW5nUHJvcHM7cD1nLmNvbnRleHQ7az1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgayYmbnVsbCE9PWs/az1aZChrKTooaz1BKGMpP2tjOnguY3VycmVudCxrPW1jKGIsaykpO3ZhciBCPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhtPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBCfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fFxuXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09cnx8cCE9PWspJiZDZihiLGcsZCxrKTtkZT0hMTtwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7a2UoYixkLGcsZSk7dmFyIHc9Yi5tZW1vaXplZFN0YXRlO2ghPT1yfHxwIT09d3x8ei5jdXJyZW50fHxkZT8oXCJmdW5jdGlvblwiPT09dHlwZW9mIEImJih5ZihiLGMsQixkKSx3PWIubWVtb2l6ZWRTdGF0ZSksKGw9ZGV8fEFmKGIsYyxsLGQscCx3LGspfHwhMSk/KG18fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlfHwoXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFVwZGF0ZSYmZy5jb21wb25lbnRXaWxsVXBkYXRlKGQsdyxrKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmXG5nLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKGQsdyxrKSksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlJiYoYi5mbGFnc3w9NCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihiLmZsYWdzfD0xMDI0KSk6KFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9MTAyNCksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPXcpLGcucHJvcHM9ZCxnLnN0YXRlPXcsZy5jb250ZXh0PWssZD1sKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09XG5hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTEwMjQpLGQ9ITEpfXJldHVybiBkZyhhLGIsYyxkLGYsZSl9XG5mdW5jdGlvbiBkZyhhLGIsYyxkLGUsZil7YWcoYSxiKTt2YXIgZz0wIT09KGIuZmxhZ3MmMTI4KTtpZighZCYmIWcpcmV0dXJuIGUmJnJjKGIsYywhMSksVGYoYSxiLGYpO2Q9Yi5zdGF0ZU5vZGU7UmYuY3VycmVudD1iO3ZhciBoPWcmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBjLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmQucmVuZGVyKCk7Yi5mbGFnc3w9MTtudWxsIT09YSYmZz8oYi5jaGlsZD1PZChiLGEuY2hpbGQsbnVsbCxmKSxiLmNoaWxkPU9kKGIsbnVsbCxoLGYpKTpQKGEsYixoLGYpO2IubWVtb2l6ZWRTdGF0ZT1kLnN0YXRlO2UmJnJjKGIsYywhMCk7cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gZWcoYSl7dmFyIGI9YS5zdGF0ZU5vZGU7Yi5wZW5kaW5nQ29udGV4dD9vYyhhLGIucGVuZGluZ0NvbnRleHQsYi5wZW5kaW5nQ29udGV4dCE9PWIuY29udGV4dCk6Yi5jb250ZXh0JiZvYyhhLGIuY29udGV4dCwhMSk7c2UoYSxiLmNvbnRhaW5lckluZm8pfVxuZnVuY3Rpb24gZmcoYSxiLGMsZCxlKXtBZCgpO0JkKGUpO2IuZmxhZ3N8PTI1NjtQKGEsYixjLGQpO3JldHVybiBiLmNoaWxkfXZhciBnZz17ZGVoeWRyYXRlZDpudWxsLHRyZWVDb250ZXh0Om51bGwscmV0cnlMYW5lOjB9O2Z1bmN0aW9uIGhnKGEpe3JldHVybntiYXNlTGFuZXM6YSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfX1cbmZ1bmN0aW9uIGlnKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPUkuY3VycmVudCxmPSExLGc9MCE9PShiLmZsYWdzJjEyOCksaDsoaD1nKXx8KGg9bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGU/ITE6MCE9PShlJjIpKTtpZihoKWY9ITAsYi5mbGFncyY9LTEyOTtlbHNlIGlmKG51bGw9PT1hfHxudWxsIT09YS5tZW1vaXplZFN0YXRlKWV8PTE7dihJLGUmMSk7aWYobnVsbD09PWEpe3dkKGIpO2E9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1hJiYoYT1hLmRlaHlkcmF0ZWQsbnVsbCE9PWEpKXJldHVybiAwPT09KGIubW9kZSYxKT9iLmxhbmVzPTE6S2IoYSk/Yi5sYW5lcz04OmIubGFuZXM9MTA3Mzc0MTgyNCxudWxsO2c9ZC5jaGlsZHJlbjthPWQuZmFsbGJhY2s7cmV0dXJuIGY/KGQ9Yi5tb2RlLGY9Yi5jaGlsZCxnPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Z30sMD09PShkJjEpJiZudWxsIT09Zj8oZi5jaGlsZExhbmVzPTAsZi5wZW5kaW5nUHJvcHM9Zyk6XG5mPWpnKGcsZCwwLG51bGwpLGE9TmQoYSxkLGMsbnVsbCksZi5yZXR1cm49YixhLnJldHVybj1iLGYuc2libGluZz1hLGIuY2hpbGQ9ZixiLmNoaWxkLm1lbW9pemVkU3RhdGU9aGcoYyksYi5tZW1vaXplZFN0YXRlPWdnLGEpOmtnKGIsZyl9ZT1hLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWUmJihoPWUuZGVoeWRyYXRlZCxudWxsIT09aCkpcmV0dXJuIGxnKGEsYixnLGQsaCxlLGMpO2lmKGYpe2Y9ZC5mYWxsYmFjaztnPWIubW9kZTtlPWEuY2hpbGQ7aD1lLnNpYmxpbmc7dmFyIGs9e21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpkLmNoaWxkcmVufTswPT09KGcmMSkmJmIuY2hpbGQhPT1lPyhkPWIuY2hpbGQsZC5jaGlsZExhbmVzPTAsZC5wZW5kaW5nUHJvcHM9ayxiLmRlbGV0aW9ucz1udWxsKTooZD1KZChlLGspLGQuc3VidHJlZUZsYWdzPWUuc3VidHJlZUZsYWdzJjE0NjgwMDY0KTtudWxsIT09aD9mPUpkKGgsZik6KGY9TmQoZixnLGMsbnVsbCksZi5mbGFnc3w9Mik7Zi5yZXR1cm49XG5iO2QucmV0dXJuPWI7ZC5zaWJsaW5nPWY7Yi5jaGlsZD1kO2Q9ZjtmPWIuY2hpbGQ7Zz1hLmNoaWxkLm1lbW9pemVkU3RhdGU7Zz1udWxsPT09Zz9oZyhjKTp7YmFzZUxhbmVzOmcuYmFzZUxhbmVzfGMsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6Zy50cmFuc2l0aW9uc307Zi5tZW1vaXplZFN0YXRlPWc7Zi5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcyZ+YztiLm1lbW9pemVkU3RhdGU9Z2c7cmV0dXJuIGR9Zj1hLmNoaWxkO2E9Zi5zaWJsaW5nO2Q9SmQoZix7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpkLmNoaWxkcmVufSk7MD09PShiLm1vZGUmMSkmJihkLmxhbmVzPWMpO2QucmV0dXJuPWI7ZC5zaWJsaW5nPW51bGw7bnVsbCE9PWEmJihjPWIuZGVsZXRpb25zLG51bGw9PT1jPyhiLmRlbGV0aW9ucz1bYV0sYi5mbGFnc3w9MTYpOmMucHVzaChhKSk7Yi5jaGlsZD1kO2IubWVtb2l6ZWRTdGF0ZT1udWxsO3JldHVybiBkfVxuZnVuY3Rpb24ga2coYSxiKXtiPWpnKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmJ9LGEubW9kZSwwLG51bGwpO2IucmV0dXJuPWE7cmV0dXJuIGEuY2hpbGQ9Yn1mdW5jdGlvbiBtZyhhLGIsYyxkKXtudWxsIT09ZCYmQmQoZCk7T2QoYixhLmNoaWxkLG51bGwsYyk7YT1rZyhiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuKTthLmZsYWdzfD0yO2IubWVtb2l6ZWRTdGF0ZT1udWxsO3JldHVybiBhfVxuZnVuY3Rpb24gbGcoYSxiLGMsZCxlLGYsZyl7aWYoYyl7aWYoYi5mbGFncyYyNTYpcmV0dXJuIGIuZmxhZ3MmPS0yNTcsZD1GZihFcnJvcihuKDQyMikpKSxtZyhhLGIsZyxkKTtpZihudWxsIT09Yi5tZW1vaXplZFN0YXRlKXJldHVybiBiLmNoaWxkPWEuY2hpbGQsYi5mbGFnc3w9MTI4LG51bGw7Zj1kLmZhbGxiYWNrO2U9Yi5tb2RlO2Q9amcoe21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46ZC5jaGlsZHJlbn0sZSwwLG51bGwpO2Y9TmQoZixlLGcsbnVsbCk7Zi5mbGFnc3w9MjtkLnJldHVybj1iO2YucmV0dXJuPWI7ZC5zaWJsaW5nPWY7Yi5jaGlsZD1kOzAhPT0oYi5tb2RlJjEpJiZPZChiLGEuY2hpbGQsbnVsbCxnKTtiLmNoaWxkLm1lbW9pemVkU3RhdGU9aGcoZyk7Yi5tZW1vaXplZFN0YXRlPWdnO3JldHVybiBmfWlmKDA9PT0oYi5tb2RlJjEpKXJldHVybiBtZyhhLGIsZyxudWxsKTtpZihLYihlKSlyZXR1cm4gZD1MYihlKS5kaWdlc3QsZj1FcnJvcihuKDQxOSkpLGQ9RmYoZixcbmQsdm9pZCAwKSxtZyhhLGIsZyxkKTtjPTAhPT0oZyZhLmNoaWxkTGFuZXMpO2lmKEd8fGMpe2Q9TjtpZihudWxsIT09ZCl7c3dpdGNoKGcmLWcpe2Nhc2UgNDplPTI7YnJlYWs7Y2FzZSAxNjplPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OmU9MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6ZT0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDplPTB9ZT0wIT09KGUmKGQuc3VzcGVuZGVkTGFuZXN8ZykpPzA6ZTswIT09ZSYmZSE9PWYucmV0cnlMYW5lJiYoZi5yZXRyeUxhbmU9ZSxjZShhLGUpLGFmKGQsYSxcbmUsLTEpKX1uZygpO2Q9RmYoRXJyb3Iobig0MjEpKSk7cmV0dXJuIG1nKGEsYixnLGQpfWlmKEpiKGUpKXJldHVybiBiLmZsYWdzfD0xMjgsYi5jaGlsZD1hLmNoaWxkLGI9b2cuYmluZChudWxsLGEpLE1iKGUsYiksbnVsbDthPWYudHJlZUNvbnRleHQ7VmEmJihwZD1RYihlKSxvZD1iLEY9ITAscmQ9bnVsbCxxZD0hMSxudWxsIT09YSYmKGZkW2dkKytdPWlkLGZkW2dkKytdPWpkLGZkW2dkKytdPWhkLGlkPWEuaWQsamQ9YS5vdmVyZmxvdyxoZD1iKSk7Yj1rZyhiLGQuY2hpbGRyZW4pO2IuZmxhZ3N8PTQwOTY7cmV0dXJuIGJ9ZnVuY3Rpb24gcGcoYSxiLGMpe2EubGFuZXN8PWI7dmFyIGQ9YS5hbHRlcm5hdGU7bnVsbCE9PWQmJihkLmxhbmVzfD1iKTtYZChhLnJldHVybixiLGMpfVxuZnVuY3Rpb24gcWcoYSxiLGMsZCxlKXt2YXIgZj1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWY/YS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpiLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6ZCx0YWlsOmMsdGFpbE1vZGU6ZX06KGYuaXNCYWNrd2FyZHM9YixmLnJlbmRlcmluZz1udWxsLGYucmVuZGVyaW5nU3RhcnRUaW1lPTAsZi5sYXN0PWQsZi50YWlsPWMsZi50YWlsTW9kZT1lKX1cbmZ1bmN0aW9uIHJnKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQucmV2ZWFsT3JkZXIsZj1kLnRhaWw7UChhLGIsZC5jaGlsZHJlbixjKTtkPUkuY3VycmVudDtpZigwIT09KGQmMikpZD1kJjF8MixiLmZsYWdzfD0xMjg7ZWxzZXtpZihudWxsIT09YSYmMCE9PShhLmZsYWdzJjEyOCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZwZyhhLGMsYik7ZWxzZSBpZigxOT09PWEudGFnKXBnKGEsYyxiKTtlbHNlIGlmKG51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1hO2E9YS5jaGlsZDtjb250aW51ZX1pZihhPT09YilicmVhayBhO2Zvcig7bnVsbD09PWEuc2libGluZzspe2lmKG51bGw9PT1hLnJldHVybnx8YS5yZXR1cm49PT1iKWJyZWFrIGE7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuO2E9YS5zaWJsaW5nfWQmPTF9dihJLGQpO2lmKDA9PT0oYi5tb2RlJjEpKWIubWVtb2l6ZWRTdGF0ZT1cbm51bGw7ZWxzZSBzd2l0Y2goZSl7Y2FzZSBcImZvcndhcmRzXCI6Yz1iLmNoaWxkO2ZvcihlPW51bGw7bnVsbCE9PWM7KWE9Yy5hbHRlcm5hdGUsbnVsbCE9PWEmJm51bGw9PT13ZShhKSYmKGU9YyksYz1jLnNpYmxpbmc7Yz1lO251bGw9PT1jPyhlPWIuY2hpbGQsYi5jaGlsZD1udWxsKTooZT1jLnNpYmxpbmcsYy5zaWJsaW5nPW51bGwpO3FnKGIsITEsZSxjLGYpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09d2UoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfXFnKGIsITAsYyxudWxsLGYpO2JyZWFrO2Nhc2UgXCJ0b2dldGhlclwiOnFnKGIsITEsbnVsbCxudWxsLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDpiLm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGNnKGEsYil7MD09PShiLm1vZGUmMSkmJm51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpfWZ1bmN0aW9uIFRmKGEsYixjKXtudWxsIT09YSYmKGIuZGVwZW5kZW5jaWVzPWEuZGVwZW5kZW5jaWVzKTtsZXw9Yi5sYW5lcztpZigwPT09KGMmYi5jaGlsZExhbmVzKSlyZXR1cm4gbnVsbDtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IobigxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9SmQoYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPUpkKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBzZyhhLGIsYyl7c3dpdGNoKGIudGFnKXtjYXNlIDM6ZWcoYik7QWQoKTticmVhaztjYXNlIDU6dWUoYik7YnJlYWs7Y2FzZSAxOkEoYi50eXBlKSYmcWMoYik7YnJlYWs7Y2FzZSA0OnNlKGIsYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDpWZChiLGIudHlwZS5fY29udGV4dCxiLm1lbW9pemVkUHJvcHMudmFsdWUpO2JyZWFrO2Nhc2UgMTM6dmFyIGQ9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kKXtpZihudWxsIT09ZC5kZWh5ZHJhdGVkKXJldHVybiB2KEksSS5jdXJyZW50JjEpLGIuZmxhZ3N8PTEyOCxudWxsO2lmKDAhPT0oYyZiLmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiBpZyhhLGIsYyk7dihJLEkuY3VycmVudCYxKTthPVRmKGEsYixjKTtyZXR1cm4gbnVsbCE9PWE/YS5zaWJsaW5nOm51bGx9dihJLEkuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjEyOCkpe2lmKGQpcmV0dXJuIHJnKGEsXG5iLGMpO2IuZmxhZ3N8PTEyOH12YXIgZT1iLm1lbW9pemVkU3RhdGU7bnVsbCE9PWUmJihlLnJlbmRlcmluZz1udWxsLGUudGFpbD1udWxsLGUubGFzdEVmZmVjdD1udWxsKTt2KEksSS5jdXJyZW50KTtpZihkKWJyZWFrO2Vsc2UgcmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBiLmxhbmVzPTAsWWYoYSxiLGMpfXJldHVybiBUZihhLGIsYyl9ZnVuY3Rpb24gdGcoYSl7YS5mbGFnc3w9NH1mdW5jdGlvbiB1ZyhhLGIpe2lmKG51bGwhPT1hJiZhLmNoaWxkPT09Yi5jaGlsZClyZXR1cm4hMDtpZigwIT09KGIuZmxhZ3MmMTYpKXJldHVybiExO2ZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtpZigwIT09KGEuZmxhZ3MmMTI4NTQpfHwwIT09KGEuc3VidHJlZUZsYWdzJjEyODU0KSlyZXR1cm4hMTthPWEuc2libGluZ31yZXR1cm4hMH12YXIgdmcsd2cseGcseWc7XG5pZihUYSl2Zz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1iLmNoaWxkO251bGwhPT1jOyl7aWYoNT09PWMudGFnfHw2PT09Yy50YWcpS2EoYSxjLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09Yy50YWcmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX0sd2c9ZnVuY3Rpb24oKXt9LHhnPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT1hLm1lbW9pemVkUHJvcHM7aWYoYSE9PWQpe3ZhciBmPWIuc3RhdGVOb2RlLGc9cmUob2UuY3VycmVudCk7Yz1NYShmLGMsYSxkLGUsZyk7KGIudXBkYXRlUXVldWU9YykmJnRnKGIpfX0seWc9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PWQmJnRnKGIpfTtlbHNlIGlmKFVhKXt2Zz1mdW5jdGlvbihhLFxuYixjLGQpe2Zvcih2YXIgZT1iLmNoaWxkO251bGwhPT1lOyl7aWYoNT09PWUudGFnKXt2YXIgZj1lLnN0YXRlTm9kZTtjJiZkJiYoZj1FYihmLGUudHlwZSxlLm1lbW9pemVkUHJvcHMsZSkpO0thKGEsZil9ZWxzZSBpZig2PT09ZS50YWcpZj1lLnN0YXRlTm9kZSxjJiZkJiYoZj1GYihmLGUubWVtb2l6ZWRQcm9wcyxlKSksS2EoYSxmKTtlbHNlIGlmKDQhPT1lLnRhZylpZigyMj09PWUudGFnJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlKWY9ZS5jaGlsZCxudWxsIT09ZiYmKGYucmV0dXJuPWUpLHZnKGEsZSwhMCwhMCk7ZWxzZSBpZihudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZTtlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PWIpYnJlYWs7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PWIpcmV0dXJuO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybjtlPWUuc2libGluZ319O3ZhciB6Zz1mdW5jdGlvbihhLFxuYixjLGQpe2Zvcih2YXIgZT1iLmNoaWxkO251bGwhPT1lOyl7aWYoNT09PWUudGFnKXt2YXIgZj1lLnN0YXRlTm9kZTtjJiZkJiYoZj1FYihmLGUudHlwZSxlLm1lbW9pemVkUHJvcHMsZSkpO0FiKGEsZil9ZWxzZSBpZig2PT09ZS50YWcpZj1lLnN0YXRlTm9kZSxjJiZkJiYoZj1GYihmLGUubWVtb2l6ZWRQcm9wcyxlKSksQWIoYSxmKTtlbHNlIGlmKDQhPT1lLnRhZylpZigyMj09PWUudGFnJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlKWY9ZS5jaGlsZCxudWxsIT09ZiYmKGYucmV0dXJuPWUpLHpnKGEsZSwhMCwhMCk7ZWxzZSBpZihudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZTtlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PWIpYnJlYWs7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PWIpcmV0dXJuO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybjtlPWUuc2libGluZ319O3dnPWZ1bmN0aW9uKGEsYil7dmFyIGM9XG5iLnN0YXRlTm9kZTtpZighdWcoYSxiKSl7YT1jLmNvbnRhaW5lckluZm87dmFyIGQ9emIoYSk7emcoZCxiLCExLCExKTtjLnBlbmRpbmdDaGlsZHJlbj1kO3RnKGIpO0JiKGEsZCl9fTt4Zz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWEuc3RhdGVOb2RlLGc9YS5tZW1vaXplZFByb3BzO2lmKChhPXVnKGEsYikpJiZnPT09ZCliLnN0YXRlTm9kZT1mO2Vsc2V7dmFyIGg9Yi5zdGF0ZU5vZGUsaz1yZShvZS5jdXJyZW50KSxsPW51bGw7ZyE9PWQmJihsPU1hKGgsYyxnLGQsZSxrKSk7YSYmbnVsbD09PWw/Yi5zdGF0ZU5vZGU9ZjooZj15YihmLGwsYyxnLGQsYixhLGgpLExhKGYsYyxkLGUsaykmJnRnKGIpLGIuc3RhdGVOb2RlPWYsYT90ZyhiKTp2ZyhmLGIsITEsITEpKX19O3lnPWZ1bmN0aW9uKGEsYixjLGQpe2MhPT1kPyhhPXJlKHFlLmN1cnJlbnQpLGM9cmUob2UuY3VycmVudCksYi5zdGF0ZU5vZGU9T2EoZCxhLGMsYiksdGcoYikpOmIuc3RhdGVOb2RlPWEuc3RhdGVOb2RlfX1lbHNlIHdnPVxuZnVuY3Rpb24oKXt9LHhnPWZ1bmN0aW9uKCl7fSx5Zz1mdW5jdGlvbigpe307ZnVuY3Rpb24gQWcoYSxiKXtpZighRilzd2l0Y2goYS50YWlsTW9kZSl7Y2FzZSBcImhpZGRlblwiOmI9YS50YWlsO2Zvcih2YXIgYz1udWxsO251bGwhPT1iOyludWxsIT09Yi5hbHRlcm5hdGUmJihjPWIpLGI9Yi5zaWJsaW5nO251bGw9PT1jP2EudGFpbD1udWxsOmMuc2libGluZz1udWxsO2JyZWFrO2Nhc2UgXCJjb2xsYXBzZWRcIjpjPWEudGFpbDtmb3IodmFyIGQ9bnVsbDtudWxsIT09YzspbnVsbCE9PWMuYWx0ZXJuYXRlJiYoZD1jKSxjPWMuc2libGluZztudWxsPT09ZD9ifHxudWxsPT09YS50YWlsP2EudGFpbD1udWxsOmEudGFpbC5zaWJsaW5nPW51bGw6ZC5zaWJsaW5nPW51bGx9fVxuZnVuY3Rpb24gUShhKXt2YXIgYj1udWxsIT09YS5hbHRlcm5hdGUmJmEuYWx0ZXJuYXRlLmNoaWxkPT09YS5jaGlsZCxjPTAsZD0wO2lmKGIpZm9yKHZhciBlPWEuY2hpbGQ7bnVsbCE9PWU7KWN8PWUubGFuZXN8ZS5jaGlsZExhbmVzLGR8PWUuc3VidHJlZUZsYWdzJjE0NjgwMDY0LGR8PWUuZmxhZ3MmMTQ2ODAwNjQsZS5yZXR1cm49YSxlPWUuc2libGluZztlbHNlIGZvcihlPWEuY2hpbGQ7bnVsbCE9PWU7KWN8PWUubGFuZXN8ZS5jaGlsZExhbmVzLGR8PWUuc3VidHJlZUZsYWdzLGR8PWUuZmxhZ3MsZS5yZXR1cm49YSxlPWUuc2libGluZzthLnN1YnRyZWVGbGFnc3w9ZDthLmNoaWxkTGFuZXM9YztyZXR1cm4gYn1cbmZ1bmN0aW9uIEJnKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcztuZChiKTtzd2l0Y2goYi50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBRKGIpLG51bGw7Y2FzZSAxOnJldHVybiBBKGIudHlwZSkmJm5jKCksUShiKSxudWxsO2Nhc2UgMzpjPWIuc3RhdGVOb2RlO3RlKCk7cSh6KTtxKHgpO3llKCk7Yy5wZW5kaW5nQ29udGV4dCYmKGMuY29udGV4dD1jLnBlbmRpbmdDb250ZXh0LGMucGVuZGluZ0NvbnRleHQ9bnVsbCk7aWYobnVsbD09PWF8fG51bGw9PT1hLmNoaWxkKXlkKGIpP3RnKGIpOm51bGw9PT1hfHxhLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYwPT09KGIuZmxhZ3MmMjU2KXx8KGIuZmxhZ3N8PTEwMjQsbnVsbCE9PXJkJiYoQ2cocmQpLHJkPW51bGwpKTt3ZyhhLGIpO1EoYik7cmV0dXJuIG51bGw7Y2FzZSA1OnZlKGIpO2M9cmUocWUuY3VycmVudCk7dmFyIGU9XG5iLnR5cGU7aWYobnVsbCE9PWEmJm51bGwhPWIuc3RhdGVOb2RlKXhnKGEsYixlLGQsYyksYS5yZWYhPT1iLnJlZiYmKGIuZmxhZ3N8PTUxMixiLmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFkKXtpZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobigxNjYpKTtRKGIpO3JldHVybiBudWxsfWE9cmUob2UuY3VycmVudCk7aWYoeWQoYikpe2lmKCFWYSl0aHJvdyBFcnJvcihuKDE3NSkpO2E9UmIoYi5zdGF0ZU5vZGUsYi50eXBlLGIubWVtb2l6ZWRQcm9wcyxjLGEsYiwhcWQpO2IudXBkYXRlUXVldWU9YTtudWxsIT09YSYmdGcoYil9ZWxzZXt2YXIgZj1KYShlLGQsYyxhLGIpO3ZnKGYsYiwhMSwhMSk7Yi5zdGF0ZU5vZGU9ZjtMYShmLGUsZCxjLGEpJiZ0ZyhiKX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD01MTIsYi5mbGFnc3w9MjA5NzE1Mil9UShiKTtyZXR1cm4gbnVsbDtjYXNlIDY6aWYoYSYmbnVsbCE9Yi5zdGF0ZU5vZGUpeWcoYSxiLGEubWVtb2l6ZWRQcm9wcyxkKTtcbmVsc2V7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobigxNjYpKTthPXJlKHFlLmN1cnJlbnQpO2M9cmUob2UuY3VycmVudCk7aWYoeWQoYikpe2lmKCFWYSl0aHJvdyBFcnJvcihuKDE3NikpO2E9Yi5zdGF0ZU5vZGU7Yz1iLm1lbW9pemVkUHJvcHM7aWYoZD1TYihhLGMsYiwhcWQpKWlmKGU9b2QsbnVsbCE9PWUpc3dpdGNoKGUudGFnKXtjYXNlIDM6JGIoZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxhLGMsMCE9PShlLm1vZGUmMSkpO2JyZWFrO2Nhc2UgNTphYyhlLnR5cGUsZS5tZW1vaXplZFByb3BzLGUuc3RhdGVOb2RlLGEsYywwIT09KGUubW9kZSYxKSl9ZCYmdGcoYil9ZWxzZSBiLnN0YXRlTm9kZT1PYShkLGEsYyxiKX1RKGIpO3JldHVybiBudWxsO2Nhc2UgMTM6cShJKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09YXx8bnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKXtpZihGJiZcbm51bGwhPT1wZCYmMCE9PShiLm1vZGUmMSkmJjA9PT0oYi5mbGFncyYxMjgpKXpkKCksQWQoKSxiLmZsYWdzfD05ODU2MCxlPSExO2Vsc2UgaWYoZT15ZChiKSxudWxsIT09ZCYmbnVsbCE9PWQuZGVoeWRyYXRlZCl7aWYobnVsbD09PWEpe2lmKCFlKXRocm93IEVycm9yKG4oMzE4KSk7aWYoIVZhKXRocm93IEVycm9yKG4oMzQ0KSk7ZT1iLm1lbW9pemVkU3RhdGU7ZT1udWxsIT09ZT9lLmRlaHlkcmF0ZWQ6bnVsbDtpZighZSl0aHJvdyBFcnJvcihuKDMxNykpO1RiKGUsYil9ZWxzZSBBZCgpLDA9PT0oYi5mbGFncyYxMjgpJiYoYi5tZW1vaXplZFN0YXRlPW51bGwpLGIuZmxhZ3N8PTQ7UShiKTtlPSExfWVsc2UgbnVsbCE9PXJkJiYoQ2cocmQpLHJkPW51bGwpLGU9ITA7aWYoIWUpcmV0dXJuIGIuZmxhZ3MmNjU1MzY/YjpudWxsfWlmKDAhPT0oYi5mbGFncyYxMjgpKXJldHVybiBiLmxhbmVzPWMsYjtjPW51bGwhPT1kO2MhPT0obnVsbCE9PWEmJm51bGwhPT1hLm1lbW9pemVkU3RhdGUpJiZcbmMmJihiLmNoaWxkLmZsYWdzfD04MTkyLDAhPT0oYi5tb2RlJjEpJiYobnVsbD09PWF8fDAhPT0oSS5jdXJyZW50JjEpPzA9PT1SJiYoUj0zKTpuZygpKSk7bnVsbCE9PWIudXBkYXRlUXVldWUmJihiLmZsYWdzfD00KTtRKGIpO3JldHVybiBudWxsO2Nhc2UgNDpyZXR1cm4gdGUoKSx3ZyhhLGIpLG51bGw9PT1hJiZYYShiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxRKGIpLG51bGw7Y2FzZSAxMDpyZXR1cm4gV2QoYi50eXBlLl9jb250ZXh0KSxRKGIpLG51bGw7Y2FzZSAxNzpyZXR1cm4gQShiLnR5cGUpJiZuYygpLFEoYiksbnVsbDtjYXNlIDE5OnEoSSk7ZT1iLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PWUpcmV0dXJuIFEoYiksbnVsbDtkPTAhPT0oYi5mbGFncyYxMjgpO2Y9ZS5yZW5kZXJpbmc7aWYobnVsbD09PWYpaWYoZClBZyhlLCExKTtlbHNle2lmKDAhPT1SfHxudWxsIT09YSYmMCE9PShhLmZsYWdzJjEyOCkpZm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2Y9d2UoYSk7aWYobnVsbCE9PVxuZil7Yi5mbGFnc3w9MTI4O0FnKGUsITEpO2E9Zi51cGRhdGVRdWV1ZTtudWxsIT09YSYmKGIudXBkYXRlUXVldWU9YSxiLmZsYWdzfD00KTtiLnN1YnRyZWVGbGFncz0wO2E9Yztmb3IoYz1iLmNoaWxkO251bGwhPT1jOylkPWMsZT1hLGQuZmxhZ3MmPTE0NjgwMDY2LGY9ZC5hbHRlcm5hdGUsbnVsbD09PWY/KGQuY2hpbGRMYW5lcz0wLGQubGFuZXM9ZSxkLmNoaWxkPW51bGwsZC5zdWJ0cmVlRmxhZ3M9MCxkLm1lbW9pemVkUHJvcHM9bnVsbCxkLm1lbW9pemVkU3RhdGU9bnVsbCxkLnVwZGF0ZVF1ZXVlPW51bGwsZC5kZXBlbmRlbmNpZXM9bnVsbCxkLnN0YXRlTm9kZT1udWxsKTooZC5jaGlsZExhbmVzPWYuY2hpbGRMYW5lcyxkLmxhbmVzPWYubGFuZXMsZC5jaGlsZD1mLmNoaWxkLGQuc3VidHJlZUZsYWdzPTAsZC5kZWxldGlvbnM9bnVsbCxkLm1lbW9pemVkUHJvcHM9Zi5tZW1vaXplZFByb3BzLGQubWVtb2l6ZWRTdGF0ZT1mLm1lbW9pemVkU3RhdGUsZC51cGRhdGVRdWV1ZT1mLnVwZGF0ZVF1ZXVlLFxuZC50eXBlPWYudHlwZSxlPWYuZGVwZW5kZW5jaWVzLGQuZGVwZW5kZW5jaWVzPW51bGw9PT1lP251bGw6e2xhbmVzOmUubGFuZXMsZmlyc3RDb250ZXh0OmUuZmlyc3RDb250ZXh0fSksYz1jLnNpYmxpbmc7dihJLEkuY3VycmVudCYxfDIpO3JldHVybiBiLmNoaWxkfWE9YS5zaWJsaW5nfW51bGwhPT1lLnRhaWwmJkQoKT5EZyYmKGIuZmxhZ3N8PTEyOCxkPSEwLEFnKGUsITEpLGIubGFuZXM9NDE5NDMwNCl9ZWxzZXtpZighZClpZihhPXdlKGYpLG51bGwhPT1hKXtpZihiLmZsYWdzfD0xMjgsZD0hMCxhPWEudXBkYXRlUXVldWUsbnVsbCE9PWEmJihiLnVwZGF0ZVF1ZXVlPWEsYi5mbGFnc3w9NCksQWcoZSwhMCksbnVsbD09PWUudGFpbCYmXCJoaWRkZW5cIj09PWUudGFpbE1vZGUmJiFmLmFsdGVybmF0ZSYmIUYpcmV0dXJuIFEoYiksbnVsbH1lbHNlIDIqRCgpLWUucmVuZGVyaW5nU3RhcnRUaW1lPkRnJiYxMDczNzQxODI0IT09YyYmKGIuZmxhZ3N8PTEyOCxkPSEwLEFnKGUsITEpLGIubGFuZXM9XG40MTk0MzA0KTtlLmlzQmFja3dhcmRzPyhmLnNpYmxpbmc9Yi5jaGlsZCxiLmNoaWxkPWYpOihhPWUubGFzdCxudWxsIT09YT9hLnNpYmxpbmc9ZjpiLmNoaWxkPWYsZS5sYXN0PWYpfWlmKG51bGwhPT1lLnRhaWwpcmV0dXJuIGI9ZS50YWlsLGUucmVuZGVyaW5nPWIsZS50YWlsPWIuc2libGluZyxlLnJlbmRlcmluZ1N0YXJ0VGltZT1EKCksYi5zaWJsaW5nPW51bGwsYT1JLmN1cnJlbnQsdihJLGQ/YSYxfDI6YSYxKSxiO1EoYik7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBFZygpLGM9bnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSxudWxsIT09YSYmbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSE9PWMmJihiLmZsYWdzfD04MTkyKSxjJiYwIT09KGIubW9kZSYxKT8wIT09KCRmJjEwNzM3NDE4MjQpJiYoUShiKSxUYSYmYi5zdWJ0cmVlRmxhZ3MmNiYmKGIuZmxhZ3N8PTgxOTIpKTpRKGIpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKG4oMTU2LFxuYi50YWcpKTt9XG5mdW5jdGlvbiBGZyhhLGIpe25kKGIpO3N3aXRjaChiLnRhZyl7Y2FzZSAxOnJldHVybiBBKGIudHlwZSkmJm5jKCksYT1iLmZsYWdzLGEmNjU1MzY/KGIuZmxhZ3M9YSYtNjU1Mzd8MTI4LGIpOm51bGw7Y2FzZSAzOnJldHVybiB0ZSgpLHEoeikscSh4KSx5ZSgpLGE9Yi5mbGFncywwIT09KGEmNjU1MzYpJiYwPT09KGEmMTI4KT8oYi5mbGFncz1hJi02NTUzN3wxMjgsYik6bnVsbDtjYXNlIDU6cmV0dXJuIHZlKGIpLG51bGw7Y2FzZSAxMzpxKEkpO2E9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1hJiZudWxsIT09YS5kZWh5ZHJhdGVkKXtpZihudWxsPT09Yi5hbHRlcm5hdGUpdGhyb3cgRXJyb3IobigzNDApKTtBZCgpfWE9Yi5mbGFncztyZXR1cm4gYSY2NTUzNj8oYi5mbGFncz1hJi02NTUzN3wxMjgsYik6bnVsbDtjYXNlIDE5OnJldHVybiBxKEkpLG51bGw7Y2FzZSA0OnJldHVybiB0ZSgpLG51bGw7Y2FzZSAxMDpyZXR1cm4gV2QoYi50eXBlLl9jb250ZXh0KSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gRWcoKSxcbm51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgR2c9ITEsUz0hMSxIZz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldCxUPW51bGw7ZnVuY3Rpb24gSWcoYSxiKXt2YXIgYz1hLnJlZjtpZihudWxsIT09YylpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYyl0cnl7YyhudWxsKX1jYXRjaChkKXtVKGEsYixkKX1lbHNlIGMuY3VycmVudD1udWxsfWZ1bmN0aW9uIEpnKGEsYixjKXt0cnl7YygpfWNhdGNoKGQpe1UoYSxiLGQpfX12YXIgS2c9ITE7XG5mdW5jdGlvbiBMZyhhLGIpe0hhKGEuY29udGFpbmVySW5mbyk7Zm9yKFQ9YjtudWxsIT09VDspaWYoYT1ULGI9YS5jaGlsZCwwIT09KGEuc3VidHJlZUZsYWdzJjEwMjgpJiZudWxsIT09YiliLnJldHVybj1hLFQ9YjtlbHNlIGZvcig7bnVsbCE9PVQ7KXthPVQ7dHJ5e3ZhciBjPWEuYWx0ZXJuYXRlO2lmKDAhPT0oYS5mbGFncyYxMDI0KSlzd2l0Y2goYS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6YnJlYWs7Y2FzZSAxOmlmKG51bGwhPT1jKXt2YXIgZD1jLm1lbW9pemVkUHJvcHMsZT1jLm1lbW9pemVkU3RhdGUsZj1hLnN0YXRlTm9kZSxnPWYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoYS5lbGVtZW50VHlwZT09PWEudHlwZT9kOnhmKGEudHlwZSxkKSxlKTtmLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWd9YnJlYWs7Y2FzZSAzOlRhJiZ4YihhLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO1xuZGVmYXVsdDp0aHJvdyBFcnJvcihuKDE2MykpO319Y2F0Y2goaCl7VShhLGEucmV0dXJuLGgpfWI9YS5zaWJsaW5nO2lmKG51bGwhPT1iKXtiLnJldHVybj1hLnJldHVybjtUPWI7YnJlYWt9VD1hLnJldHVybn1jPUtnO0tnPSExO3JldHVybiBjfWZ1bmN0aW9uIE1nKGEsYixjKXt2YXIgZD1iLnVwZGF0ZVF1ZXVlO2Q9bnVsbCE9PWQ/ZC5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWQpe3ZhciBlPWQ9ZC5uZXh0O2Rve2lmKChlLnRhZyZhKT09PWEpe3ZhciBmPWUuZGVzdHJveTtlLmRlc3Ryb3k9dm9pZCAwO3ZvaWQgMCE9PWYmJkpnKGIsYyxmKX1lPWUubmV4dH13aGlsZShlIT09ZCl9fWZ1bmN0aW9uIE5nKGEsYil7Yj1iLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe3ZhciBjPWI9Yi5uZXh0O2Rve2lmKChjLnRhZyZhKT09PWEpe3ZhciBkPWMuY3JlYXRlO2MuZGVzdHJveT1kKCl9Yz1jLm5leHR9d2hpbGUoYyE9PWIpfX1cbmZ1bmN0aW9uIE9nKGEpe3ZhciBiPWEucmVmO2lmKG51bGwhPT1iKXt2YXIgYz1hLnN0YXRlTm9kZTtzd2l0Y2goYS50YWcpe2Nhc2UgNTphPUVhKGMpO2JyZWFrO2RlZmF1bHQ6YT1jfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yi5jdXJyZW50PWF9fWZ1bmN0aW9uIFBnKGEpe3ZhciBiPWEuYWx0ZXJuYXRlO251bGwhPT1iJiYoYS5hbHRlcm5hdGU9bnVsbCxQZyhiKSk7YS5jaGlsZD1udWxsO2EuZGVsZXRpb25zPW51bGw7YS5zaWJsaW5nPW51bGw7NT09PWEudGFnJiYoYj1hLnN0YXRlTm9kZSxudWxsIT09YiYmWmEoYikpO2Euc3RhdGVOb2RlPW51bGw7YS5yZXR1cm49bnVsbDthLmRlcGVuZGVuY2llcz1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5zdGF0ZU5vZGU9bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9XG5mdW5jdGlvbiBRZyhhKXtyZXR1cm4gNT09PWEudGFnfHwzPT09YS50YWd8fDQ9PT1hLnRhZ31mdW5jdGlvbiBSZyhhKXthOmZvcig7Oyl7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxRZyhhLnJldHVybikpcmV0dXJuIG51bGw7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuO2ZvcihhPWEuc2libGluZzs1IT09YS50YWcmJjYhPT1hLnRhZyYmMTghPT1hLnRhZzspe2lmKGEuZmxhZ3MmMiljb250aW51ZSBhO2lmKG51bGw9PT1hLmNoaWxkfHw0PT09YS50YWcpY29udGludWUgYTtlbHNlIGEuY2hpbGQucmV0dXJuPWEsYT1hLmNoaWxkfWlmKCEoYS5mbGFncyYyKSlyZXR1cm4gYS5zdGF0ZU5vZGV9fVxuZnVuY3Rpb24gU2coYSxiLGMpe3ZhciBkPWEudGFnO2lmKDU9PT1kfHw2PT09ZClhPWEuc3RhdGVOb2RlLGI/cGIoYyxhLGIpOmtiKGMsYSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKFNnKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspU2coYSxiLGMpLGE9YS5zaWJsaW5nfWZ1bmN0aW9uIFRnKGEsYixjKXt2YXIgZD1hLnRhZztpZig1PT09ZHx8Nj09PWQpYT1hLnN0YXRlTm9kZSxiP29iKGMsYSxiKTpqYihjLGEpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihUZyhhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KVRnKGEsYixjKSxhPWEuc2libGluZ312YXIgVj1udWxsLFVnPSExO2Z1bmN0aW9uIFZnKGEsYixjKXtmb3IoYz1jLmNoaWxkO251bGwhPT1jOylXZyhhLGIsYyksYz1jLnNpYmxpbmd9XG5mdW5jdGlvbiBXZyhhLGIsYyl7aWYoU2MmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBTYy5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7U2Mub25Db21taXRGaWJlclVubW91bnQoUmMsYyl9Y2F0Y2goaCl7fXN3aXRjaChjLnRhZyl7Y2FzZSA1OlN8fElnKGMsYik7Y2FzZSA2OmlmKFRhKXt2YXIgZD1WLGU9VWc7Vj1udWxsO1ZnKGEsYixjKTtWPWQ7VWc9ZTtudWxsIT09ViYmKFVnP3JiKFYsYy5zdGF0ZU5vZGUpOnFiKFYsYy5zdGF0ZU5vZGUpKX1lbHNlIFZnKGEsYixjKTticmVhaztjYXNlIDE4OlRhJiZudWxsIT09ViYmKFVnP1liKFYsYy5zdGF0ZU5vZGUpOlhiKFYsYy5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6VGE/KGQ9VixlPVVnLFY9Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxVZz0hMCxWZyhhLGIsYyksVj1kLFVnPWUpOihVYSYmKGQ9Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxlPXpiKGQpLENiKGQsZSkpLFZnKGEsYixjKSk7YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFTJiZcbihkPWMudXBkYXRlUXVldWUsbnVsbCE9PWQmJihkPWQubGFzdEVmZmVjdCxudWxsIT09ZCkpKXtlPWQ9ZC5uZXh0O2Rve3ZhciBmPWUsZz1mLmRlc3Ryb3k7Zj1mLnRhZzt2b2lkIDAhPT1nJiYoMCE9PShmJjIpP0pnKGMsYixnKTowIT09KGYmNCkmJkpnKGMsYixnKSk7ZT1lLm5leHR9d2hpbGUoZSE9PWQpfVZnKGEsYixjKTticmVhaztjYXNlIDE6aWYoIVMmJihJZyhjLGIpLGQ9Yy5zdGF0ZU5vZGUsXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50V2lsbFVubW91bnQpKXRyeXtkLnByb3BzPWMubWVtb2l6ZWRQcm9wcyxkLnN0YXRlPWMubWVtb2l6ZWRTdGF0ZSxkLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goaCl7VShjLGIsaCl9VmcoYSxiLGMpO2JyZWFrO2Nhc2UgMjE6VmcoYSxiLGMpO2JyZWFrO2Nhc2UgMjI6Yy5tb2RlJjE/KFM9KGQ9Uyl8fG51bGwhPT1jLm1lbW9pemVkU3RhdGUsVmcoYSxiLGMpLFM9ZCk6VmcoYSxiLGMpO2JyZWFrO2RlZmF1bHQ6VmcoYSxiLFxuYyl9fWZ1bmN0aW9uIFhnKGEpe3ZhciBiPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2EudXBkYXRlUXVldWU9bnVsbDt2YXIgYz1hLnN0YXRlTm9kZTtudWxsPT09YyYmKGM9YS5zdGF0ZU5vZGU9bmV3IEhnKTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9WWcuYmluZChudWxsLGEsYik7Yy5oYXMoYil8fChjLmFkZChiKSxiLnRoZW4oZCxkKSl9KX19XG5mdW5jdGlvbiBaZyhhLGIpe3ZhciBjPWIuZGVsZXRpb25zO2lmKG51bGwhPT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO3RyeXt2YXIgZj1hLGc9YjtpZihUYSl7dmFyIGg9ZzthOmZvcig7bnVsbCE9PWg7KXtzd2l0Y2goaC50YWcpe2Nhc2UgNTpWPWguc3RhdGVOb2RlO1VnPSExO2JyZWFrIGE7Y2FzZSAzOlY9aC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztVZz0hMDticmVhayBhO2Nhc2UgNDpWPWguc3RhdGVOb2RlLmNvbnRhaW5lckluZm87VWc9ITA7YnJlYWsgYX1oPWgucmV0dXJufWlmKG51bGw9PT1WKXRocm93IEVycm9yKG4oMTYwKSk7V2coZixnLGUpO1Y9bnVsbDtVZz0hMX1lbHNlIFdnKGYsZyxlKTt2YXIgaz1lLmFsdGVybmF0ZTtudWxsIT09ayYmKGsucmV0dXJuPW51bGwpO2UucmV0dXJuPW51bGx9Y2F0Y2gobCl7VShlLGIsbCl9fWlmKGIuc3VidHJlZUZsYWdzJjEyODU0KWZvcihiPWIuY2hpbGQ7bnVsbCE9PWI7KSRnKGIsYSksYj1iLnNpYmxpbmd9XG5mdW5jdGlvbiAkZyhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlLGQ9YS5mbGFncztzd2l0Y2goYS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpaZyhiLGEpO2FoKGEpO2lmKGQmNCl7dHJ5e01nKDMsYSxhLnJldHVybiksTmcoMyxhKX1jYXRjaChwKXtVKGEsYS5yZXR1cm4scCl9dHJ5e01nKDUsYSxhLnJldHVybil9Y2F0Y2gocCl7VShhLGEucmV0dXJuLHApfX1icmVhaztjYXNlIDE6WmcoYixhKTthaChhKTtkJjUxMiYmbnVsbCE9PWMmJklnKGMsYy5yZXR1cm4pO2JyZWFrO2Nhc2UgNTpaZyhiLGEpO2FoKGEpO2QmNTEyJiZudWxsIT09YyYmSWcoYyxjLnJldHVybik7aWYoVGEpe2lmKGEuZmxhZ3MmMzIpe3ZhciBlPWEuc3RhdGVOb2RlO3RyeXtzYihlKX1jYXRjaChwKXtVKGEsYS5yZXR1cm4scCl9fWlmKGQmNCYmKGU9YS5zdGF0ZU5vZGUsbnVsbCE9ZSkpe3ZhciBmPWEubWVtb2l6ZWRQcm9wcztjPW51bGwhPT1jP2MubWVtb2l6ZWRQcm9wczpmO2Q9YS50eXBlO2I9XG5hLnVwZGF0ZVF1ZXVlO2EudXBkYXRlUXVldWU9bnVsbDtpZihudWxsIT09Yil0cnl7bmIoZSxiLGQsYyxmLGEpfWNhdGNoKHApe1UoYSxhLnJldHVybixwKX19fWJyZWFrO2Nhc2UgNjpaZyhiLGEpO2FoKGEpO2lmKGQmNCYmVGEpe2lmKG51bGw9PT1hLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihuKDE2MikpO2U9YS5zdGF0ZU5vZGU7Zj1hLm1lbW9pemVkUHJvcHM7Yz1udWxsIT09Yz9jLm1lbW9pemVkUHJvcHM6Zjt0cnl7bGIoZSxjLGYpfWNhdGNoKHApe1UoYSxhLnJldHVybixwKX19YnJlYWs7Y2FzZSAzOlpnKGIsYSk7YWgoYSk7aWYoZCY0KXtpZihUYSYmVmEmJm51bGwhPT1jJiZjLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXRyeXtWYihiLmNvbnRhaW5lckluZm8pfWNhdGNoKHApe1UoYSxhLnJldHVybixwKX1pZihVYSl7ZT1iLmNvbnRhaW5lckluZm87Zj1iLnBlbmRpbmdDaGlsZHJlbjt0cnl7Q2IoZSxmKX1jYXRjaChwKXtVKGEsYS5yZXR1cm4scCl9fX1icmVhaztjYXNlIDQ6WmcoYixcbmEpO2FoKGEpO2lmKGQmNCYmVWEpe2Y9YS5zdGF0ZU5vZGU7ZT1mLmNvbnRhaW5lckluZm87Zj1mLnBlbmRpbmdDaGlsZHJlbjt0cnl7Q2IoZSxmKX1jYXRjaChwKXtVKGEsYS5yZXR1cm4scCl9fWJyZWFrO2Nhc2UgMTM6WmcoYixhKTthaChhKTtlPWEuY2hpbGQ7ZS5mbGFncyY4MTkyJiYoZj1udWxsIT09ZS5tZW1vaXplZFN0YXRlLGUuc3RhdGVOb2RlLmlzSGlkZGVuPWYsIWZ8fG51bGwhPT1lLmFsdGVybmF0ZSYmbnVsbCE9PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGV8fChiaD1EKCkpKTtkJjQmJlhnKGEpO2JyZWFrO2Nhc2UgMjI6dmFyIGc9bnVsbCE9PWMmJm51bGwhPT1jLm1lbW9pemVkU3RhdGU7YS5tb2RlJjE/KFM9KGM9Uyl8fGcsWmcoYixhKSxTPWMpOlpnKGIsYSk7YWgoYSk7aWYoZCY4MTkyKXtjPW51bGwhPT1hLm1lbW9pemVkU3RhdGU7aWYoKGEuc3RhdGVOb2RlLmlzSGlkZGVuPWMpJiYhZyYmMCE9PShhLm1vZGUmMSkpZm9yKFQ9YSxkPWEuY2hpbGQ7bnVsbCE9PVxuZDspe2ZvcihiPVQ9ZDtudWxsIT09VDspe2c9VDt2YXIgaD1nLmNoaWxkO3N3aXRjaChnLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1Ok1nKDQsZyxnLnJldHVybik7YnJlYWs7Y2FzZSAxOklnKGcsZy5yZXR1cm4pO3ZhciBrPWcuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBrLmNvbXBvbmVudFdpbGxVbm1vdW50KXt2YXIgbD1nLG09Zy5yZXR1cm47dHJ5e3ZhciByPWw7ay5wcm9wcz1yLm1lbW9pemVkUHJvcHM7ay5zdGF0ZT1yLm1lbW9pemVkU3RhdGU7ay5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKHApe1UobCxtLHApfX1icmVhaztjYXNlIDU6SWcoZyxnLnJldHVybik7YnJlYWs7Y2FzZSAyMjppZihudWxsIT09Zy5tZW1vaXplZFN0YXRlKXtjaChiKTtjb250aW51ZX19bnVsbCE9PWg/KGgucmV0dXJuPWcsVD1oKTpjaChiKX1kPWQuc2libGluZ31pZihUYSlhOmlmKGQ9bnVsbCxUYSlmb3IoYj1hOzspe2lmKDU9PT1iLnRhZyl7aWYobnVsbD09PVxuZCl7ZD1iO3RyeXtlPWIuc3RhdGVOb2RlLGM/dGIoZSk6dmIoYi5zdGF0ZU5vZGUsYi5tZW1vaXplZFByb3BzKX1jYXRjaChwKXtVKGEsYS5yZXR1cm4scCl9fX1lbHNlIGlmKDY9PT1iLnRhZyl7aWYobnVsbD09PWQpdHJ5e2Y9Yi5zdGF0ZU5vZGUsYz91YihmKTp3YihmLGIubWVtb2l6ZWRQcm9wcyl9Y2F0Y2gocCl7VShhLGEucmV0dXJuLHApfX1lbHNlIGlmKCgyMiE9PWIudGFnJiYyMyE9PWIudGFnfHxudWxsPT09Yi5tZW1vaXplZFN0YXRlfHxiPT09YSkmJm51bGwhPT1iLmNoaWxkKXtiLmNoaWxkLnJldHVybj1iO2I9Yi5jaGlsZDtjb250aW51ZX1pZihiPT09YSlicmVhayBhO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKWJyZWFrIGE7ZD09PWImJihkPW51bGwpO2I9Yi5yZXR1cm59ZD09PWImJihkPW51bGwpO2Iuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9fWJyZWFrO2Nhc2UgMTk6WmcoYixhKTthaChhKTtcbmQmNCYmWGcoYSk7YnJlYWs7Y2FzZSAyMTpicmVhaztkZWZhdWx0OlpnKGIsYSksYWgoYSl9fWZ1bmN0aW9uIGFoKGEpe3ZhciBiPWEuZmxhZ3M7aWYoYiYyKXt0cnl7aWYoVGEpe2I6e2Zvcih2YXIgYz1hLnJldHVybjtudWxsIT09Yzspe2lmKFFnKGMpKXt2YXIgZD1jO2JyZWFrIGJ9Yz1jLnJldHVybn10aHJvdyBFcnJvcihuKDE2MCkpO31zd2l0Y2goZC50YWcpe2Nhc2UgNTp2YXIgZT1kLnN0YXRlTm9kZTtkLmZsYWdzJjMyJiYoc2IoZSksZC5mbGFncyY9LTMzKTt2YXIgZj1SZyhhKTtUZyhhLGYsZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgZz1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGg9UmcoYSk7U2coYSxoLGcpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobigxNjEpKTt9fX1jYXRjaChrKXtVKGEsYS5yZXR1cm4sayl9YS5mbGFncyY9LTN9YiY0MDk2JiYoYS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGRoKGEsYixjKXtUPWE7ZWgoYSxiLGMpfVxuZnVuY3Rpb24gZWgoYSxiLGMpe2Zvcih2YXIgZD0wIT09KGEubW9kZSYxKTtudWxsIT09VDspe3ZhciBlPVQsZj1lLmNoaWxkO2lmKDIyPT09ZS50YWcmJmQpe3ZhciBnPW51bGwhPT1lLm1lbW9pemVkU3RhdGV8fEdnO2lmKCFnKXt2YXIgaD1lLmFsdGVybmF0ZSxrPW51bGwhPT1oJiZudWxsIT09aC5tZW1vaXplZFN0YXRlfHxTO2g9R2c7dmFyIGw9UztHZz1nO2lmKChTPWspJiYhbClmb3IoVD1lO251bGwhPT1UOylnPVQsaz1nLmNoaWxkLDIyPT09Zy50YWcmJm51bGwhPT1nLm1lbW9pemVkU3RhdGU/ZmgoZSk6bnVsbCE9PWs/KGsucmV0dXJuPWcsVD1rKTpmaChlKTtmb3IoO251bGwhPT1mOylUPWYsZWgoZixiLGMpLGY9Zi5zaWJsaW5nO1Q9ZTtHZz1oO1M9bH1naChhLGIsYyl9ZWxzZSAwIT09KGUuc3VidHJlZUZsYWdzJjg3NzIpJiZudWxsIT09Zj8oZi5yZXR1cm49ZSxUPWYpOmdoKGEsYixjKX19XG5mdW5jdGlvbiBnaChhKXtmb3IoO251bGwhPT1UOyl7dmFyIGI9VDtpZigwIT09KGIuZmxhZ3MmODc3Mikpe3ZhciBjPWIuYWx0ZXJuYXRlO3RyeXtpZigwIT09KGIuZmxhZ3MmODc3Mikpc3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OlN8fE5nKDUsYik7YnJlYWs7Y2FzZSAxOnZhciBkPWIuc3RhdGVOb2RlO2lmKGIuZmxhZ3MmNCYmIVMpaWYobnVsbD09PWMpZC5jb21wb25lbnREaWRNb3VudCgpO2Vsc2V7dmFyIGU9Yi5lbGVtZW50VHlwZT09PWIudHlwZT9jLm1lbW9pemVkUHJvcHM6eGYoYi50eXBlLGMubWVtb2l6ZWRQcm9wcyk7ZC5jb21wb25lbnREaWRVcGRhdGUoZSxjLm1lbW9pemVkU3RhdGUsZC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9dmFyIGY9Yi51cGRhdGVRdWV1ZTtudWxsIT09ZiYmbWUoYixmLGQpO2JyZWFrO2Nhc2UgMzp2YXIgZz1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1nKXtjPW51bGw7aWYobnVsbCE9PWIuY2hpbGQpc3dpdGNoKGIuY2hpbGQudGFnKXtjYXNlIDU6Yz1cbkVhKGIuY2hpbGQuc3RhdGVOb2RlKTticmVhaztjYXNlIDE6Yz1iLmNoaWxkLnN0YXRlTm9kZX1tZShiLGcsYyl9YnJlYWs7Y2FzZSA1OnZhciBoPWIuc3RhdGVOb2RlO251bGw9PT1jJiZiLmZsYWdzJjQmJm1iKGgsYi50eXBlLGIubWVtb2l6ZWRQcm9wcyxiKTticmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihWYSYmbnVsbD09PWIubWVtb2l6ZWRTdGF0ZSl7dmFyIGs9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWspe3ZhciBsPWsubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09bCl7dmFyIG09bC5kZWh5ZHJhdGVkO251bGwhPT1tJiZXYihtKX19fWJyZWFrO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI1OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobigxNjMpKTt9U3x8Yi5mbGFncyY1MTImJk9nKGIpfWNhdGNoKHIpe1UoYixiLnJldHVybixyKX19aWYoYj09PWEpe1Q9bnVsbDticmVha31jPWIuc2libGluZztcbmlmKG51bGwhPT1jKXtjLnJldHVybj1iLnJldHVybjtUPWM7YnJlYWt9VD1iLnJldHVybn19ZnVuY3Rpb24gY2goYSl7Zm9yKDtudWxsIT09VDspe3ZhciBiPVQ7aWYoYj09PWEpe1Q9bnVsbDticmVha312YXIgYz1iLnNpYmxpbmc7aWYobnVsbCE9PWMpe2MucmV0dXJuPWIucmV0dXJuO1Q9YzticmVha31UPWIucmV0dXJufX1cbmZ1bmN0aW9uIGZoKGEpe2Zvcig7bnVsbCE9PVQ7KXt2YXIgYj1UO3RyeXtzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6dmFyIGM9Yi5yZXR1cm47dHJ5e05nKDQsYil9Y2F0Y2goayl7VShiLGMsayl9YnJlYWs7Y2FzZSAxOnZhciBkPWIuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZE1vdW50KXt2YXIgZT1iLnJldHVybjt0cnl7ZC5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGspe1UoYixlLGspfX12YXIgZj1iLnJldHVybjt0cnl7T2coYil9Y2F0Y2goayl7VShiLGYsayl9YnJlYWs7Y2FzZSA1OnZhciBnPWIucmV0dXJuO3RyeXtPZyhiKX1jYXRjaChrKXtVKGIsZyxrKX19fWNhdGNoKGspe1UoYixiLnJldHVybixrKX1pZihiPT09YSl7VD1udWxsO2JyZWFrfXZhciBoPWIuc2libGluZztpZihudWxsIT09aCl7aC5yZXR1cm49Yi5yZXR1cm47VD1oO2JyZWFrfVQ9Yi5yZXR1cm59fVxudmFyIGhoPTAsaWg9MSxqaD0yLGtoPTMsbGg9NDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgbWg9U3ltYm9sLmZvcjtoaD1taChcInNlbGVjdG9yLmNvbXBvbmVudFwiKTtpaD1taChcInNlbGVjdG9yLmhhc19wc2V1ZG9fY2xhc3NcIik7amg9bWgoXCJzZWxlY3Rvci5yb2xlXCIpO2toPW1oKFwic2VsZWN0b3IudGVzdF9pZFwiKTtsaD1taChcInNlbGVjdG9yLnRleHRcIil9ZnVuY3Rpb24gbmgoYSl7dmFyIGI9V2EoYSk7aWYobnVsbCE9Yil7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBiLm1lbW9pemVkUHJvcHNbXCJkYXRhLXRlc3RuYW1lXCJdKXRocm93IEVycm9yKG4oMzY0KSk7cmV0dXJuIGJ9YT1jYihhKTtpZihudWxsPT09YSl0aHJvdyBFcnJvcihuKDM2MikpO3JldHVybiBhLnN0YXRlTm9kZS5jdXJyZW50fVxuZnVuY3Rpb24gb2goYSxiKXtzd2l0Y2goYi4kJHR5cGVvZil7Y2FzZSBoaDppZihhLnR5cGU9PT1iLnZhbHVlKXJldHVybiEwO2JyZWFrO2Nhc2UgaWg6YTp7Yj1iLnZhbHVlO2E9W2EsMF07Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDspe3ZhciBkPWFbYysrXSxlPWFbYysrXSxmPWJbZV07aWYoNSE9PWQudGFnfHwhZmIoZCkpe2Zvcig7bnVsbCE9ZiYmb2goZCxmKTspZSsrLGY9YltlXTtpZihlPT09Yi5sZW5ndGgpe2I9ITA7YnJlYWsgYX1lbHNlIGZvcihkPWQuY2hpbGQ7bnVsbCE9PWQ7KWEucHVzaChkLGUpLGQ9ZC5zaWJsaW5nfX1iPSExfXJldHVybiBiO2Nhc2Ugamg6aWYoNT09PWEudGFnJiZnYihhLnN0YXRlTm9kZSxiLnZhbHVlKSlyZXR1cm4hMDticmVhaztjYXNlIGxoOmlmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKWlmKGE9ZWIoYSksbnVsbCE9PWEmJjA8PWEuaW5kZXhPZihiLnZhbHVlKSlyZXR1cm4hMDticmVhaztjYXNlIGtoOmlmKDU9PT1hLnRhZyYmKGE9YS5tZW1vaXplZFByb3BzW1wiZGF0YS10ZXN0bmFtZVwiXSxcblwic3RyaW5nXCI9PT10eXBlb2YgYSYmYS50b0xvd2VyQ2FzZSgpPT09Yi52YWx1ZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4hMDticmVhaztkZWZhdWx0OnRocm93IEVycm9yKG4oMzY1KSk7fXJldHVybiExfWZ1bmN0aW9uIHBoKGEpe3N3aXRjaChhLiQkdHlwZW9mKXtjYXNlIGhoOnJldHVyblwiPFwiKyh1YShhLnZhbHVlKXx8XCJVbmtub3duXCIpK1wiPlwiO2Nhc2UgaWg6cmV0dXJuXCI6aGFzKFwiKyhwaChhKXx8XCJcIikrXCIpXCI7Y2FzZSBqaDpyZXR1cm4nW3JvbGU9XCInK2EudmFsdWUrJ1wiXSc7Y2FzZSBsaDpyZXR1cm4nXCInK2EudmFsdWUrJ1wiJztjYXNlIGtoOnJldHVybidbZGF0YS10ZXN0bmFtZT1cIicrYS52YWx1ZSsnXCJdJztkZWZhdWx0OnRocm93IEVycm9yKG4oMzY1KSk7fX1cbmZ1bmN0aW9uIHFoKGEsYil7dmFyIGM9W107YT1bYSwwXTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoOyl7dmFyIGU9YVtkKytdLGY9YVtkKytdLGc9YltmXTtpZig1IT09ZS50YWd8fCFmYihlKSl7Zm9yKDtudWxsIT1nJiZvaChlLGcpOylmKyssZz1iW2ZdO2lmKGY9PT1iLmxlbmd0aCljLnB1c2goZSk7ZWxzZSBmb3IoZT1lLmNoaWxkO251bGwhPT1lOylhLnB1c2goZSxmKSxlPWUuc2libGluZ319cmV0dXJuIGN9ZnVuY3Rpb24gcmgoYSxiKXtpZighYmIpdGhyb3cgRXJyb3IobigzNjMpKTthPW5oKGEpO2E9cWgoYSxiKTtiPVtdO2E9QXJyYXkuZnJvbShhKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoOyl7dmFyIGQ9YVtjKytdO2lmKDU9PT1kLnRhZylmYihkKXx8Yi5wdXNoKGQuc3RhdGVOb2RlKTtlbHNlIGZvcihkPWQuY2hpbGQ7bnVsbCE9PWQ7KWEucHVzaChkKSxkPWQuc2libGluZ31yZXR1cm4gYn1cbnZhciBzaD1NYXRoLmNlaWwsdGg9ZGEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcix1aD1kYS5SZWFjdEN1cnJlbnRPd25lcixXPWRhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLEg9MCxOPW51bGwsWD1udWxsLFo9MCwkZj0wLFpmPWljKDApLFI9MCx2aD1udWxsLGxlPTAsd2g9MCx4aD0wLHloPW51bGwsemg9bnVsbCxiaD0wLERnPUluZmluaXR5LEFoPW51bGw7ZnVuY3Rpb24gQmgoKXtEZz1EKCkrNTAwfXZhciBKZj0hMSxLZj1udWxsLE1mPW51bGwsQ2g9ITEsRGg9bnVsbCxFaD0wLEZoPTAsR2g9bnVsbCxIaD0tMSxJaD0wO2Z1bmN0aW9uIE8oKXtyZXR1cm4gMCE9PShIJjYpP0QoKTotMSE9PUhoP0hoOkhoPUQoKX1mdW5jdGlvbiB0ZihhKXtpZigwPT09KGEubW9kZSYxKSlyZXR1cm4gMTtpZigwIT09KEgmMikmJjAhPT1aKXJldHVybiBaJi1aO2lmKG51bGwhPT1DZC50cmFuc2l0aW9uKXJldHVybiAwPT09SWgmJihJaD1EYygpKSxJaDthPUM7cmV0dXJuIDAhPT1hP2E6WWEoKX1cbmZ1bmN0aW9uIGFmKGEsYixjLGQpe2lmKDUwPEZoKXRocm93IEZoPTAsR2g9bnVsbCxFcnJvcihuKDE4NSkpO0ZjKGEsYyxkKTtpZigwPT09KEgmMil8fGEhPT1OKWE9PT1OJiYoMD09PShIJjIpJiYod2h8PWMpLDQ9PT1SJiZKaChhLFopKSxLaChhLGQpLDE9PT1jJiYwPT09SCYmMD09PShiLm1vZGUmMSkmJihCaCgpLFhjJiZhZCgpKX1cbmZ1bmN0aW9uIEtoKGEsYil7dmFyIGM9YS5jYWxsYmFja05vZGU7QmMoYSxiKTt2YXIgZD16YyhhLGE9PT1OP1o6MCk7aWYoMD09PWQpbnVsbCE9PWMmJktjKGMpLGEuY2FsbGJhY2tOb2RlPW51bGwsYS5jYWxsYmFja1ByaW9yaXR5PTA7ZWxzZSBpZihiPWQmLWQsYS5jYWxsYmFja1ByaW9yaXR5IT09Yil7bnVsbCE9YyYmS2MoYyk7aWYoMT09PWIpMD09PWEudGFnPyRjKExoLmJpbmQobnVsbCxhKSk6WmMoTGguYmluZChudWxsLGEpKSwkYT9hYihmdW5jdGlvbigpezA9PT0oSCY2KSYmYWQoKX0pOkpjKE5jLGFkKSxjPW51bGw7ZWxzZXtzd2l0Y2goSWMoZCkpe2Nhc2UgMTpjPU5jO2JyZWFrO2Nhc2UgNDpjPU9jO2JyZWFrO2Nhc2UgMTY6Yz1QYzticmVhaztjYXNlIDUzNjg3MDkxMjpjPVFjO2JyZWFrO2RlZmF1bHQ6Yz1QY31jPU1oKGMsTmguYmluZChudWxsLGEpKX1hLmNhbGxiYWNrUHJpb3JpdHk9YjthLmNhbGxiYWNrTm9kZT1jfX1cbmZ1bmN0aW9uIE5oKGEsYil7SGg9LTE7SWg9MDtpZigwIT09KEgmNikpdGhyb3cgRXJyb3IobigzMjcpKTt2YXIgYz1hLmNhbGxiYWNrTm9kZTtpZihPaCgpJiZhLmNhbGxiYWNrTm9kZSE9PWMpcmV0dXJuIG51bGw7dmFyIGQ9emMoYSxhPT09Tj9aOjApO2lmKDA9PT1kKXJldHVybiBudWxsO2lmKDAhPT0oZCYzMCl8fDAhPT0oZCZhLmV4cGlyZWRMYW5lcyl8fGIpYj1QaChhLGQpO2Vsc2V7Yj1kO3ZhciBlPUg7SHw9Mjt2YXIgZj1RaCgpO2lmKE4hPT1hfHxaIT09YilBaD1udWxsLEJoKCksUmgoYSxiKTtkbyB0cnl7U2goKTticmVha31jYXRjaChoKXtUaChhLGgpfXdoaWxlKDEpO1VkKCk7dGguY3VycmVudD1mO0g9ZTtudWxsIT09WD9iPTA6KE49bnVsbCxaPTAsYj1SKX1pZigwIT09Yil7Mj09PWImJihlPUNjKGEpLDAhPT1lJiYoZD1lLGI9VWgoYSxlKSkpO2lmKDE9PT1iKXRocm93IGM9dmgsUmgoYSwwKSxKaChhLGQpLEtoKGEsRCgpKSxjO2lmKDY9PT1iKUpoKGEsZCk7ZWxzZXtlPVxuYS5jdXJyZW50LmFsdGVybmF0ZTtpZigwPT09KGQmMzApJiYhVmgoZSkmJihiPVBoKGEsZCksMj09PWImJihmPUNjKGEpLDAhPT1mJiYoZD1mLGI9VWgoYSxmKSkpLDE9PT1iKSl0aHJvdyBjPXZoLFJoKGEsMCksSmgoYSxkKSxLaChhLEQoKSksYzthLmZpbmlzaGVkV29yaz1lO2EuZmluaXNoZWRMYW5lcz1kO3N3aXRjaChiKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKG4oMzQ1KSk7Y2FzZSAyOldoKGEsemgsQWgpO2JyZWFrO2Nhc2UgMzpKaChhLGQpO2lmKChkJjEzMDAyMzQyNCk9PT1kJiYoYj1iaCs1MDAtRCgpLDEwPGIpKXtpZigwIT09emMoYSwwKSlicmVhaztlPWEuc3VzcGVuZGVkTGFuZXM7aWYoKGUmZCkhPT1kKXtPKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1QYShXaC5iaW5kKG51bGwsYSx6aCxBaCksYik7YnJlYWt9V2goYSx6aCxBaCk7YnJlYWs7Y2FzZSA0OkpoKGEsZCk7aWYoKGQmNDE5NDI0MCk9PT1kKWJyZWFrO1xuYj1hLmV2ZW50VGltZXM7Zm9yKGU9LTE7MDxkOyl7dmFyIGc9MzEtdGMoZCk7Zj0xPDxnO2c9YltnXTtnPmUmJihlPWcpO2QmPX5mfWQ9ZTtkPUQoKS1kO2Q9KDEyMD5kPzEyMDo0ODA+ZD80ODA6MTA4MD5kPzEwODA6MTkyMD5kPzE5MjA6M0UzPmQ/M0UzOjQzMjA+ZD80MzIwOjE5NjAqc2goZC8xOTYwKSktZDtpZigxMDxkKXthLnRpbWVvdXRIYW5kbGU9UGEoV2guYmluZChudWxsLGEsemgsQWgpLGQpO2JyZWFrfVdoKGEsemgsQWgpO2JyZWFrO2Nhc2UgNTpXaChhLHpoLEFoKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKG4oMzI5KSk7fX19S2goYSxEKCkpO3JldHVybiBhLmNhbGxiYWNrTm9kZT09PWM/TmguYmluZChudWxsLGEpOm51bGx9XG5mdW5jdGlvbiBVaChhLGIpe3ZhciBjPXloO2EuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKFJoKGEsYikuZmxhZ3N8PTI1Nik7YT1QaChhLGIpOzIhPT1hJiYoYj16aCx6aD1jLG51bGwhPT1iJiZDZyhiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2coYSl7bnVsbD09PXpoP3poPWE6emgucHVzaC5hcHBseSh6aCxhKX1cbmZ1bmN0aW9uIFZoKGEpe2Zvcih2YXIgYj1hOzspe2lmKGIuZmxhZ3MmMTYzODQpe3ZhciBjPWIudXBkYXRlUXVldWU7aWYobnVsbCE9PWMmJihjPWMuc3RvcmVzLG51bGwhPT1jKSlmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXSxmPWUuZ2V0U25hcHNob3Q7ZT1lLnZhbHVlO3RyeXtpZighVmMoZigpLGUpKXJldHVybiExfWNhdGNoKGcpe3JldHVybiExfX19Yz1iLmNoaWxkO2lmKGIuc3VidHJlZUZsYWdzJjE2Mzg0JiZudWxsIT09YyljLnJldHVybj1iLGI9YztlbHNle2lmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiEwO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ319cmV0dXJuITB9XG5mdW5jdGlvbiBKaChhLGIpe2ImPX54aDtiJj1+d2g7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS10YyhiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19ZnVuY3Rpb24gTGgoYSl7aWYoMCE9PShIJjYpKXRocm93IEVycm9yKG4oMzI3KSk7T2goKTt2YXIgYj16YyhhLDApO2lmKDA9PT0oYiYxKSlyZXR1cm4gS2goYSxEKCkpLG51bGw7dmFyIGM9UGgoYSxiKTtpZigwIT09YS50YWcmJjI9PT1jKXt2YXIgZD1DYyhhKTswIT09ZCYmKGI9ZCxjPVVoKGEsZCkpfWlmKDE9PT1jKXRocm93IGM9dmgsUmgoYSwwKSxKaChhLGIpLEtoKGEsRCgpKSxjO2lmKDY9PT1jKXRocm93IEVycm9yKG4oMzQ1KSk7YS5maW5pc2hlZFdvcms9YS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkTGFuZXM9YjtXaChhLHpoLEFoKTtLaChhLEQoKSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBYaChhKXtudWxsIT09RGgmJjA9PT1EaC50YWcmJjA9PT0oSCY2KSYmT2goKTt2YXIgYj1IO0h8PTE7dmFyIGM9Vy50cmFuc2l0aW9uLGQ9Qzt0cnl7aWYoVy50cmFuc2l0aW9uPW51bGwsQz0xLGEpcmV0dXJuIGEoKX1maW5hbGx5e0M9ZCxXLnRyYW5zaXRpb249YyxIPWIsMD09PShIJjYpJiZhZCgpfX1mdW5jdGlvbiBFZygpeyRmPVpmLmN1cnJlbnQ7cShaZil9XG5mdW5jdGlvbiBSaChhLGIpe2EuZmluaXNoZWRXb3JrPW51bGw7YS5maW5pc2hlZExhbmVzPTA7dmFyIGM9YS50aW1lb3V0SGFuZGxlO2MhPT1SYSYmKGEudGltZW91dEhhbmRsZT1SYSxRYShjKSk7aWYobnVsbCE9PVgpZm9yKGM9WC5yZXR1cm47bnVsbCE9PWM7KXt2YXIgZD1jO25kKGQpO3N3aXRjaChkLnRhZyl7Y2FzZSAxOmQ9ZC50eXBlLmNoaWxkQ29udGV4dFR5cGVzO251bGwhPT1kJiZ2b2lkIDAhPT1kJiZuYygpO2JyZWFrO2Nhc2UgMzp0ZSgpO3Eoeik7cSh4KTt5ZSgpO2JyZWFrO2Nhc2UgNTp2ZShkKTticmVhaztjYXNlIDQ6dGUoKTticmVhaztjYXNlIDEzOnEoSSk7YnJlYWs7Y2FzZSAxOTpxKEkpO2JyZWFrO2Nhc2UgMTA6V2QoZC50eXBlLl9jb250ZXh0KTticmVhaztjYXNlIDIyOmNhc2UgMjM6RWcoKX1jPWMucmV0dXJufU49YTtYPWE9SmQoYS5jdXJyZW50LG51bGwpO1o9JGY9YjtSPTA7dmg9bnVsbDt4aD13aD1sZT0wO3poPXloPW51bGw7aWYobnVsbCE9PSRkKXtmb3IoYj1cbjA7YjwkZC5sZW5ndGg7YisrKWlmKGM9JGRbYl0sZD1jLmludGVybGVhdmVkLG51bGwhPT1kKXtjLmludGVybGVhdmVkPW51bGw7dmFyIGU9ZC5uZXh0LGY9Yy5wZW5kaW5nO2lmKG51bGwhPT1mKXt2YXIgZz1mLm5leHQ7Zi5uZXh0PWU7ZC5uZXh0PWd9Yy5wZW5kaW5nPWR9JGQ9bnVsbH1yZXR1cm4gYX1cbmZ1bmN0aW9uIFRoKGEsYil7ZG97dmFyIGM9WDt0cnl7VWQoKTt6ZS5jdXJyZW50PUxlO2lmKENlKXtmb3IodmFyIGQ9Si5tZW1vaXplZFN0YXRlO251bGwhPT1kOyl7dmFyIGU9ZC5xdWV1ZTtudWxsIT09ZSYmKGUucGVuZGluZz1udWxsKTtkPWQubmV4dH1DZT0hMX1CZT0wO0w9Sz1KPW51bGw7RGU9ITE7RWU9MDt1aC5jdXJyZW50PW51bGw7aWYobnVsbD09PWN8fG51bGw9PT1jLnJldHVybil7Uj0xO3ZoPWI7WD1udWxsO2JyZWFrfWE6e3ZhciBmPWEsZz1jLnJldHVybixoPWMsaz1iO2I9WjtoLmZsYWdzfD0zMjc2ODtpZihudWxsIT09ayYmXCJvYmplY3RcIj09PXR5cGVvZiBrJiZcImZ1bmN0aW9uXCI9PT10eXBlb2Ygay50aGVuKXt2YXIgbD1rLG09aCxyPW0udGFnO2lmKDA9PT0obS5tb2RlJjEpJiYoMD09PXJ8fDExPT09cnx8MTU9PT1yKSl7dmFyIHA9bS5hbHRlcm5hdGU7cD8obS51cGRhdGVRdWV1ZT1wLnVwZGF0ZVF1ZXVlLG0ubWVtb2l6ZWRTdGF0ZT1wLm1lbW9pemVkU3RhdGUsXG5tLmxhbmVzPXAubGFuZXMpOihtLnVwZGF0ZVF1ZXVlPW51bGwsbS5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBCPVBmKGcpO2lmKG51bGwhPT1CKXtCLmZsYWdzJj0tMjU3O1FmKEIsZyxoLGYsYik7Qi5tb2RlJjEmJk5mKGYsbCxiKTtiPUI7az1sO3ZhciB3PWIudXBkYXRlUXVldWU7aWYobnVsbD09PXcpe3ZhciBZPW5ldyBTZXQ7WS5hZGQoayk7Yi51cGRhdGVRdWV1ZT1ZfWVsc2Ugdy5hZGQoayk7YnJlYWsgYX1lbHNle2lmKDA9PT0oYiYxKSl7TmYoZixsLGIpO25nKCk7YnJlYWsgYX1rPUVycm9yKG4oNDI2KSl9fWVsc2UgaWYoRiYmaC5tb2RlJjEpe3ZhciB5YT1QZihnKTtpZihudWxsIT09eWEpezA9PT0oeWEuZmxhZ3MmNjU1MzYpJiYoeWEuZmxhZ3N8PTI1Nik7UWYoeWEsZyxoLGYsYik7QmQoRWYoayxoKSk7YnJlYWsgYX19Zj1rPUVmKGssaCk7NCE9PVImJihSPTIpO251bGw9PT15aD95aD1bZl06eWgucHVzaChmKTtmPWc7ZG97c3dpdGNoKGYudGFnKXtjYXNlIDM6Zi5mbGFnc3w9XG42NTUzNjtiJj0tYjtmLmxhbmVzfD1iO3ZhciBFPUlmKGYsayxiKTtqZShmLEUpO2JyZWFrIGE7Y2FzZSAxOmg9azt2YXIgdT1mLnR5cGUsdD1mLnN0YXRlTm9kZTtpZigwPT09KGYuZmxhZ3MmMTI4KSYmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiB1LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PXQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB0LmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PU1mfHwhTWYuaGFzKHQpKSkpe2YuZmxhZ3N8PTY1NTM2O2ImPS1iO2YubGFuZXN8PWI7dmFyIERiPUxmKGYsaCxiKTtqZShmLERiKTticmVhayBhfX1mPWYucmV0dXJufXdoaWxlKG51bGwhPT1mKX1ZaChjKX1jYXRjaChsYyl7Yj1sYztYPT09YyYmbnVsbCE9PWMmJihYPWM9Yy5yZXR1cm4pO2NvbnRpbnVlfWJyZWFrfXdoaWxlKDEpfWZ1bmN0aW9uIFFoKCl7dmFyIGE9dGguY3VycmVudDt0aC5jdXJyZW50PUxlO3JldHVybiBudWxsPT09YT9MZTphfVxuZnVuY3Rpb24gbmcoKXtpZigwPT09Unx8Mz09PVJ8fDI9PT1SKVI9NDtudWxsPT09Tnx8MD09PShsZSYyNjg0MzU0NTUpJiYwPT09KHdoJjI2ODQzNTQ1NSl8fEpoKE4sWil9ZnVuY3Rpb24gUGgoYSxiKXt2YXIgYz1IO0h8PTI7dmFyIGQ9UWgoKTtpZihOIT09YXx8WiE9PWIpQWg9bnVsbCxSaChhLGIpO2RvIHRyeXtaaCgpO2JyZWFrfWNhdGNoKGUpe1RoKGEsZSl9d2hpbGUoMSk7VWQoKTtIPWM7dGguY3VycmVudD1kO2lmKG51bGwhPT1YKXRocm93IEVycm9yKG4oMjYxKSk7Tj1udWxsO1o9MDtyZXR1cm4gUn1mdW5jdGlvbiBaaCgpe2Zvcig7bnVsbCE9PVg7KSRoKFgpfWZ1bmN0aW9uIFNoKCl7Zm9yKDtudWxsIT09WCYmIUxjKCk7KSRoKFgpfWZ1bmN0aW9uICRoKGEpe3ZhciBiPWFpKGEuYWx0ZXJuYXRlLGEsJGYpO2EubWVtb2l6ZWRQcm9wcz1hLnBlbmRpbmdQcm9wcztudWxsPT09Yj9ZaChhKTpYPWI7dWguY3VycmVudD1udWxsfVxuZnVuY3Rpb24gWWgoYSl7dmFyIGI9YTtkb3t2YXIgYz1iLmFsdGVybmF0ZTthPWIucmV0dXJuO2lmKDA9PT0oYi5mbGFncyYzMjc2OCkpe2lmKGM9QmcoYyxiLCRmKSxudWxsIT09Yyl7WD1jO3JldHVybn19ZWxzZXtjPUZnKGMsYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTMyNzY3O1g9YztyZXR1cm59aWYobnVsbCE9PWEpYS5mbGFnc3w9MzI3NjgsYS5zdWJ0cmVlRmxhZ3M9MCxhLmRlbGV0aW9ucz1udWxsO2Vsc2V7Uj02O1g9bnVsbDtyZXR1cm59fWI9Yi5zaWJsaW5nO2lmKG51bGwhPT1iKXtYPWI7cmV0dXJufVg9Yj1hfXdoaWxlKG51bGwhPT1iKTswPT09UiYmKFI9NSl9ZnVuY3Rpb24gV2goYSxiLGMpe3ZhciBkPUMsZT1XLnRyYW5zaXRpb247dHJ5e1cudHJhbnNpdGlvbj1udWxsLEM9MSxiaShhLGIsYyxkKX1maW5hbGx5e1cudHJhbnNpdGlvbj1lLEM9ZH1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGJpKGEsYixjLGQpe2RvIE9oKCk7d2hpbGUobnVsbCE9PURoKTtpZigwIT09KEgmNikpdGhyb3cgRXJyb3IobigzMjcpKTtjPWEuZmluaXNoZWRXb3JrO3ZhciBlPWEuZmluaXNoZWRMYW5lcztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IobigxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO2EuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBmPWMubGFuZXN8Yy5jaGlsZExhbmVzO0djKGEsZik7YT09PU4mJihYPU49bnVsbCxaPTApOzA9PT0oYy5zdWJ0cmVlRmxhZ3MmMjA2NCkmJjA9PT0oYy5mbGFncyYyMDY0KXx8Q2h8fChDaD0hMCxNaChQYyxmdW5jdGlvbigpe09oKCk7cmV0dXJuIG51bGx9KSk7Zj0wIT09KGMuZmxhZ3MmMTU5OTApO2lmKDAhPT0oYy5zdWJ0cmVlRmxhZ3MmMTU5OTApfHxmKXtmPVcudHJhbnNpdGlvbjtXLnRyYW5zaXRpb249bnVsbDt2YXIgZz1cbkM7Qz0xO3ZhciBoPUg7SHw9NDt1aC5jdXJyZW50PW51bGw7TGcoYSxjKTskZyhjLGEpO0lhKGEuY29udGFpbmVySW5mbyk7YS5jdXJyZW50PWM7ZGgoYyxhLGUpO01jKCk7SD1oO0M9ZztXLnRyYW5zaXRpb249Zn1lbHNlIGEuY3VycmVudD1jO0NoJiYoQ2g9ITEsRGg9YSxFaD1lKTtmPWEucGVuZGluZ0xhbmVzOzA9PT1mJiYoTWY9bnVsbCk7VGMoYy5zdGF0ZU5vZGUsZCk7S2goYSxEKCkpO2lmKG51bGwhPT1iKWZvcihkPWEub25SZWNvdmVyYWJsZUVycm9yLGM9MDtjPGIubGVuZ3RoO2MrKyllPWJbY10sZChlLnZhbHVlLHtjb21wb25lbnRTdGFjazplLnN0YWNrLGRpZ2VzdDplLmRpZ2VzdH0pO2lmKEpmKXRocm93IEpmPSExLGE9S2YsS2Y9bnVsbCxhOzAhPT0oRWgmMSkmJjAhPT1hLnRhZyYmT2goKTtmPWEucGVuZGluZ0xhbmVzOzAhPT0oZiYxKT9hPT09R2g/RmgrKzooRmg9MCxHaD1hKTpGaD0wO2FkKCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBPaCgpe2lmKG51bGwhPT1EaCl7dmFyIGE9SWMoRWgpLGI9Vy50cmFuc2l0aW9uLGM9Qzt0cnl7Vy50cmFuc2l0aW9uPW51bGw7Qz0xNj5hPzE2OmE7aWYobnVsbD09PURoKXZhciBkPSExO2Vsc2V7YT1EaDtEaD1udWxsO0VoPTA7aWYoMCE9PShIJjYpKXRocm93IEVycm9yKG4oMzMxKSk7dmFyIGU9SDtIfD00O2ZvcihUPWEuY3VycmVudDtudWxsIT09VDspe3ZhciBmPVQsZz1mLmNoaWxkO2lmKDAhPT0oVC5mbGFncyYxNikpe3ZhciBoPWYuZGVsZXRpb25zO2lmKG51bGwhPT1oKXtmb3IodmFyIGs9MDtrPGgubGVuZ3RoO2srKyl7dmFyIGw9aFtrXTtmb3IoVD1sO251bGwhPT1UOyl7dmFyIG09VDtzd2l0Y2gobS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6TWcoOCxtLGYpfXZhciByPW0uY2hpbGQ7aWYobnVsbCE9PXIpci5yZXR1cm49bSxUPXI7ZWxzZSBmb3IoO251bGwhPT1UOyl7bT1UO3ZhciBwPW0uc2libGluZyxCPW0ucmV0dXJuO1BnKG0pO2lmKG09PT1cbmwpe1Q9bnVsbDticmVha31pZihudWxsIT09cCl7cC5yZXR1cm49QjtUPXA7YnJlYWt9VD1CfX19dmFyIHc9Zi5hbHRlcm5hdGU7aWYobnVsbCE9PXcpe3ZhciBZPXcuY2hpbGQ7aWYobnVsbCE9PVkpe3cuY2hpbGQ9bnVsbDtkb3t2YXIgeWE9WS5zaWJsaW5nO1kuc2libGluZz1udWxsO1k9eWF9d2hpbGUobnVsbCE9PVkpfX1UPWZ9fWlmKDAhPT0oZi5zdWJ0cmVlRmxhZ3MmMjA2NCkmJm51bGwhPT1nKWcucmV0dXJuPWYsVD1nO2Vsc2UgYjpmb3IoO251bGwhPT1UOyl7Zj1UO2lmKDAhPT0oZi5mbGFncyYyMDQ4KSlzd2l0Y2goZi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6TWcoOSxmLGYucmV0dXJuKX12YXIgRT1mLnNpYmxpbmc7aWYobnVsbCE9PUUpe0UucmV0dXJuPWYucmV0dXJuO1Q9RTticmVhayBifVQ9Zi5yZXR1cm59fXZhciB1PWEuY3VycmVudDtmb3IoVD11O251bGwhPT1UOyl7Zz1UO3ZhciB0PWcuY2hpbGQ7aWYoMCE9PShnLnN1YnRyZWVGbGFncyYyMDY0KSYmbnVsbCE9PVxudCl0LnJldHVybj1nLFQ9dDtlbHNlIGI6Zm9yKGc9dTtudWxsIT09VDspe2g9VDtpZigwIT09KGguZmxhZ3MmMjA0OCkpdHJ5e3N3aXRjaChoLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpOZyg5LGgpfX1jYXRjaChsYyl7VShoLGgucmV0dXJuLGxjKX1pZihoPT09Zyl7VD1udWxsO2JyZWFrIGJ9dmFyIERiPWguc2libGluZztpZihudWxsIT09RGIpe0RiLnJldHVybj1oLnJldHVybjtUPURiO2JyZWFrIGJ9VD1oLnJldHVybn19SD1lO2FkKCk7aWYoU2MmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBTYy5vblBvc3RDb21taXRGaWJlclJvb3QpdHJ5e1NjLm9uUG9zdENvbW1pdEZpYmVyUm9vdChSYyxhKX1jYXRjaChsYyl7fWQ9ITB9cmV0dXJuIGR9ZmluYWxseXtDPWMsVy50cmFuc2l0aW9uPWJ9fXJldHVybiExfWZ1bmN0aW9uIGNpKGEsYixjKXtiPUVmKGMsYik7Yj1JZihhLGIsMSk7YT1oZShhLGIsMSk7Yj1PKCk7bnVsbCE9PWEmJihGYyhhLDEsYiksS2goYSxiKSl9XG5mdW5jdGlvbiBVKGEsYixjKXtpZigzPT09YS50YWcpY2koYSxhLGMpO2Vsc2UgZm9yKDtudWxsIT09Yjspe2lmKDM9PT1iLnRhZyl7Y2koYixhLGMpO2JyZWFrfWVsc2UgaWYoMT09PWIudGFnKXt2YXIgZD1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09TWZ8fCFNZi5oYXMoZCkpKXthPUVmKGMsYSk7YT1MZihiLGEsMSk7Yj1oZShiLGEsMSk7YT1PKCk7bnVsbCE9PWImJihGYyhiLDEsYSksS2goYixhKSk7YnJlYWt9fWI9Yi5yZXR1cm59fVxuZnVuY3Rpb24gT2YoYSxiLGMpe3ZhciBkPWEucGluZ0NhY2hlO251bGwhPT1kJiZkLmRlbGV0ZShiKTtiPU8oKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmM7Tj09PWEmJihaJmMpPT09YyYmKDQ9PT1SfHwzPT09UiYmKFomMTMwMDIzNDI0KT09PVomJjUwMD5EKCktYmg/UmgoYSwwKTp4aHw9Yyk7S2goYSxiKX1mdW5jdGlvbiBkaShhLGIpezA9PT1iJiYoMD09PShhLm1vZGUmMSk/Yj0xOihiPXhjLHhjPDw9MSwwPT09KHhjJjEzMDAyMzQyNCkmJih4Yz00MTk0MzA0KSkpO3ZhciBjPU8oKTthPWNlKGEsYik7bnVsbCE9PWEmJihGYyhhLGIsYyksS2goYSxjKSl9ZnVuY3Rpb24gb2coYSl7dmFyIGI9YS5tZW1vaXplZFN0YXRlLGM9MDtudWxsIT09YiYmKGM9Yi5yZXRyeUxhbmUpO2RpKGEsYyl9XG5mdW5jdGlvbiBZZyhhLGIpe3ZhciBjPTA7c3dpdGNoKGEudGFnKXtjYXNlIDEzOnZhciBkPWEuc3RhdGVOb2RlO3ZhciBlPWEubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZSYmKGM9ZS5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6ZD1hLnN0YXRlTm9kZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKG4oMzE0KSk7fW51bGwhPT1kJiZkLmRlbGV0ZShiKTtkaShhLGMpfXZhciBhaTtcbmFpPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsIT09YSlpZihhLm1lbW9pemVkUHJvcHMhPT1iLnBlbmRpbmdQcm9wc3x8ei5jdXJyZW50KUc9ITA7ZWxzZXtpZigwPT09KGEubGFuZXMmYykmJjA9PT0oYi5mbGFncyYxMjgpKXJldHVybiBHPSExLHNnKGEsYixjKTtHPTAhPT0oYS5mbGFncyYxMzEwNzIpPyEwOiExfWVsc2UgRz0hMSxGJiYwIT09KGIuZmxhZ3MmMTA0ODU3NikmJmxkKGIsZWQsYi5pbmRleCk7Yi5sYW5lcz0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOnZhciBkPWIudHlwZTtjZyhhLGIpO2E9Yi5wZW5kaW5nUHJvcHM7dmFyIGU9bWMoYix4LmN1cnJlbnQpO1lkKGIsYyk7ZT1IZShudWxsLGIsZCxhLGUsYyk7dmFyIGY9TWUoKTtiLmZsYWdzfD0xO1wib2JqZWN0XCI9PT10eXBlb2YgZSYmbnVsbCE9PWUmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLnJlbmRlciYmdm9pZCAwPT09ZS4kJHR5cGVvZj8oYi50YWc9MSxiLm1lbW9pemVkU3RhdGU9bnVsbCxiLnVwZGF0ZVF1ZXVlPW51bGwsXG5BKGQpPyhmPSEwLHFjKGIpKTpmPSExLGIubWVtb2l6ZWRTdGF0ZT1udWxsIT09ZS5zdGF0ZSYmdm9pZCAwIT09ZS5zdGF0ZT9lLnN0YXRlOm51bGwsZWUoYiksZS51cGRhdGVyPXpmLGIuc3RhdGVOb2RlPWUsZS5fcmVhY3RJbnRlcm5hbHM9YixEZihiLGQsYSxjKSxiPWRnKG51bGwsYixkLCEwLGYsYykpOihiLnRhZz0wLEYmJmYmJm1kKGIpLFAobnVsbCxiLGUsYyksYj1iLmNoaWxkKTtyZXR1cm4gYjtjYXNlIDE2OmQ9Yi5lbGVtZW50VHlwZTthOntjZyhhLGIpO2E9Yi5wZW5kaW5nUHJvcHM7ZT1kLl9pbml0O2Q9ZShkLl9wYXlsb2FkKTtiLnR5cGU9ZDtlPWIudGFnPWVpKGQpO2E9eGYoZCxhKTtzd2l0Y2goZSl7Y2FzZSAwOmI9WGYobnVsbCxiLGQsYSxjKTticmVhayBhO2Nhc2UgMTpiPWJnKG51bGwsYixkLGEsYyk7YnJlYWsgYTtjYXNlIDExOmI9U2YobnVsbCxiLGQsYSxjKTticmVhayBhO2Nhc2UgMTQ6Yj1VZihudWxsLGIsZCx4ZihkLnR5cGUsYSksYyk7YnJlYWsgYX10aHJvdyBFcnJvcihuKDMwNixcbmQsXCJcIikpO31yZXR1cm4gYjtjYXNlIDA6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOnhmKGQsZSksWGYoYSxiLGQsZSxjKTtjYXNlIDE6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOnhmKGQsZSksYmcoYSxiLGQsZSxjKTtjYXNlIDM6YTp7ZWcoYik7aWYobnVsbD09PWEpdGhyb3cgRXJyb3IobigzODcpKTtkPWIucGVuZGluZ1Byb3BzO2Y9Yi5tZW1vaXplZFN0YXRlO2U9Zi5lbGVtZW50O2ZlKGEsYik7a2UoYixkLG51bGwsYyk7dmFyIGc9Yi5tZW1vaXplZFN0YXRlO2Q9Zy5lbGVtZW50O2lmKFZhJiZmLmlzRGVoeWRyYXRlZClpZihmPXtlbGVtZW50OmQsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOmcuY2FjaGUscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczpnLnBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXMsdHJhbnNpdGlvbnM6Zy50cmFuc2l0aW9uc30sYi51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9XG5mLGIubWVtb2l6ZWRTdGF0ZT1mLGIuZmxhZ3MmMjU2KXtlPUVmKEVycm9yKG4oNDIzKSksYik7Yj1mZyhhLGIsZCxjLGUpO2JyZWFrIGF9ZWxzZSBpZihkIT09ZSl7ZT1FZihFcnJvcihuKDQyNCkpLGIpO2I9ZmcoYSxiLGQsYyxlKTticmVhayBhfWVsc2UgZm9yKFZhJiYocGQ9UGIoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksb2Q9YixGPSEwLHJkPW51bGwscWQ9ITEpLGM9UGQoYixudWxsLGQsYyksYi5jaGlsZD1jO2M7KWMuZmxhZ3M9Yy5mbGFncyYtM3w0MDk2LGM9Yy5zaWJsaW5nO2Vsc2V7QWQoKTtpZihkPT09ZSl7Yj1UZihhLGIsYyk7YnJlYWsgYX1QKGEsYixkLGMpfWI9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIHVlKGIpLG51bGw9PT1hJiZ3ZChiKSxkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGY9bnVsbCE9PWE/YS5tZW1vaXplZFByb3BzOm51bGwsZz1lLmNoaWxkcmVuLE5hKGQsZSk/Zz1udWxsOm51bGwhPT1mJiZOYShkLGYpJiYoYi5mbGFnc3w9MzIpLFxuYWcoYSxiKSxQKGEsYixnLGMpLGIuY2hpbGQ7Y2FzZSA2OnJldHVybiBudWxsPT09YSYmd2QoYiksbnVsbDtjYXNlIDEzOnJldHVybiBpZyhhLGIsYyk7Y2FzZSA0OnJldHVybiBzZShiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGQ9Yi5wZW5kaW5nUHJvcHMsbnVsbD09PWE/Yi5jaGlsZD1PZChiLG51bGwsZCxjKTpQKGEsYixkLGMpLGIuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6eGYoZCxlKSxTZihhLGIsZCxlLGMpO2Nhc2UgNzpyZXR1cm4gUChhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIFAoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gUChhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYyksYi5jaGlsZDtjYXNlIDEwOmE6e2Q9Yi50eXBlLl9jb250ZXh0O2U9Yi5wZW5kaW5nUHJvcHM7Zj1iLm1lbW9pemVkUHJvcHM7XG5nPWUudmFsdWU7VmQoYixkLGcpO2lmKG51bGwhPT1mKWlmKFZjKGYudmFsdWUsZykpe2lmKGYuY2hpbGRyZW49PT1lLmNoaWxkcmVuJiYhei5jdXJyZW50KXtiPVRmKGEsYixjKTticmVhayBhfX1lbHNlIGZvcihmPWIuY2hpbGQsbnVsbCE9PWYmJihmLnJldHVybj1iKTtudWxsIT09Zjspe3ZhciBoPWYuZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1oKXtnPWYuY2hpbGQ7Zm9yKHZhciBrPWguZmlyc3RDb250ZXh0O251bGwhPT1rOyl7aWYoay5jb250ZXh0PT09ZCl7aWYoMT09PWYudGFnKXtrPWdlKC0xLGMmLWMpO2sudGFnPTI7dmFyIGw9Zi51cGRhdGVRdWV1ZTtpZihudWxsIT09bCl7bD1sLnNoYXJlZDt2YXIgbT1sLnBlbmRpbmc7bnVsbD09PW0/ay5uZXh0PWs6KGsubmV4dD1tLm5leHQsbS5uZXh0PWspO2wucGVuZGluZz1rfX1mLmxhbmVzfD1jO2s9Zi5hbHRlcm5hdGU7bnVsbCE9PWsmJihrLmxhbmVzfD1jKTtYZChmLnJldHVybixjLGIpO2gubGFuZXN8PWM7YnJlYWt9az1rLm5leHR9fWVsc2UgaWYoMTA9PT1cbmYudGFnKWc9Zi50eXBlPT09Yi50eXBlP251bGw6Zi5jaGlsZDtlbHNlIGlmKDE4PT09Zi50YWcpe2c9Zi5yZXR1cm47aWYobnVsbD09PWcpdGhyb3cgRXJyb3IobigzNDEpKTtnLmxhbmVzfD1jO2g9Zy5hbHRlcm5hdGU7bnVsbCE9PWgmJihoLmxhbmVzfD1jKTtYZChnLGMsYik7Zz1mLnNpYmxpbmd9ZWxzZSBnPWYuY2hpbGQ7aWYobnVsbCE9PWcpZy5yZXR1cm49ZjtlbHNlIGZvcihnPWY7bnVsbCE9PWc7KXtpZihnPT09Yil7Zz1udWxsO2JyZWFrfWY9Zy5zaWJsaW5nO2lmKG51bGwhPT1mKXtmLnJldHVybj1nLnJldHVybjtnPWY7YnJlYWt9Zz1nLnJldHVybn1mPWd9UChhLGIsZS5jaGlsZHJlbixjKTtiPWIuY2hpbGR9cmV0dXJuIGI7Y2FzZSA5OnJldHVybiBlPWIudHlwZSxkPWIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFlkKGIsYyksZT1aZChlKSxkPWQoZSksYi5mbGFnc3w9MSxQKGEsYixkLGMpLGIuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gZD1iLnR5cGUsZT14ZihkLGIucGVuZGluZ1Byb3BzKSxcbmU9eGYoZC50eXBlLGUpLFVmKGEsYixkLGUsYyk7Y2FzZSAxNTpyZXR1cm4gV2YoYSxiLGIudHlwZSxiLnBlbmRpbmdQcm9wcyxjKTtjYXNlIDE3OnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTp4ZihkLGUpLGNnKGEsYiksYi50YWc9MSxBKGQpPyhhPSEwLHFjKGIpKTphPSExLFlkKGIsYyksQmYoYixkLGUpLERmKGIsZCxlLGMpLGRnKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gcmcoYSxiLGMpO2Nhc2UgMjI6cmV0dXJuIFlmKGEsYixjKX10aHJvdyBFcnJvcihuKDE1NixiLnRhZykpO307ZnVuY3Rpb24gTWgoYSxiKXtyZXR1cm4gSmMoYSxiKX1cbmZ1bmN0aW9uIGZpKGEsYixjLGQpe3RoaXMudGFnPWE7dGhpcy5rZXk9Yzt0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsO3RoaXMuaW5kZXg9MDt0aGlzLnJlZj1udWxsO3RoaXMucGVuZGluZ1Byb3BzPWI7dGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGw7dGhpcy5tb2RlPWQ7dGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wO3RoaXMuZGVsZXRpb25zPW51bGw7dGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIHRkKGEsYixjLGQpe3JldHVybiBuZXcgZmkoYSxiLGMsZCl9ZnVuY3Rpb24gVmYoYSl7YT1hLnByb3RvdHlwZTtyZXR1cm4hKCFhfHwhYS5pc1JlYWN0Q29tcG9uZW50KX1cbmZ1bmN0aW9uIGVpKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBWZihhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09bWEpcmV0dXJuIDExO2lmKGE9PT1wYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiBKZChhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPXRkKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMuc3VidHJlZUZsYWdzPTAsYy5kZWxldGlvbnM9bnVsbCk7Yy5mbGFncz1hLmZsYWdzJjE0NjgwMDY0O2MuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXM7Yy5sYW5lcz1hLmxhbmVzO2MuY2hpbGQ9YS5jaGlsZDtjLm1lbW9pemVkUHJvcHM9YS5tZW1vaXplZFByb3BzO2MubWVtb2l6ZWRTdGF0ZT1hLm1lbW9pemVkU3RhdGU7Yy51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlO2I9YS5kZXBlbmRlbmNpZXM7Yy5kZXBlbmRlbmNpZXM9bnVsbD09PWI/bnVsbDp7bGFuZXM6Yi5sYW5lcyxmaXJzdENvbnRleHQ6Yi5maXJzdENvbnRleHR9O1xuYy5zaWJsaW5nPWEuc2libGluZztjLmluZGV4PWEuaW5kZXg7Yy5yZWY9YS5yZWY7cmV0dXJuIGN9XG5mdW5jdGlvbiBMZChhLGIsYyxkLGUsZil7dmFyIGc9MjtkPWE7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpVmYoYSkmJihnPTEpO2Vsc2UgaWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhKWc9NTtlbHNlIGE6c3dpdGNoKGEpe2Nhc2UgaGE6cmV0dXJuIE5kKGMuY2hpbGRyZW4sZSxmLGIpO2Nhc2UgaWE6Zz04O2V8PTg7YnJlYWs7Y2FzZSBqYTpyZXR1cm4gYT10ZCgxMixjLGIsZXwyKSxhLmVsZW1lbnRUeXBlPWphLGEubGFuZXM9ZixhO2Nhc2UgbmE6cmV0dXJuIGE9dGQoMTMsYyxiLGUpLGEuZWxlbWVudFR5cGU9bmEsYS5sYW5lcz1mLGE7Y2FzZSBvYTpyZXR1cm4gYT10ZCgxOSxjLGIsZSksYS5lbGVtZW50VHlwZT1vYSxhLmxhbmVzPWYsYTtjYXNlIHJhOnJldHVybiBqZyhjLGUsZixiKTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2Uga2E6Zz0xMDticmVhayBhO2Nhc2UgbGE6Zz05O2JyZWFrIGE7Y2FzZSBtYTpnPTExO1xuYnJlYWsgYTtjYXNlIHBhOmc9MTQ7YnJlYWsgYTtjYXNlIHFhOmc9MTY7ZD1udWxsO2JyZWFrIGF9dGhyb3cgRXJyb3IobigxMzAsbnVsbD09YT9hOnR5cGVvZiBhLFwiXCIpKTt9Yj10ZChnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIE5kKGEsYixjLGQpe2E9dGQoNyxhLGQsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIGpnKGEsYixjLGQpe2E9dGQoMjIsYSxkLGIpO2EuZWxlbWVudFR5cGU9cmE7YS5sYW5lcz1jO2Euc3RhdGVOb2RlPXtpc0hpZGRlbjohMX07cmV0dXJuIGF9ZnVuY3Rpb24gS2QoYSxiLGMpe2E9dGQoNixhLG51bGwsYik7YS5sYW5lcz1jO3JldHVybiBhfVxuZnVuY3Rpb24gTWQoYSxiLGMpe2I9dGQoNCxudWxsIT09YS5jaGlsZHJlbj9hLmNoaWxkcmVuOltdLGEua2V5LGIpO2IubGFuZXM9YztiLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzphLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246YS5pbXBsZW1lbnRhdGlvbn07cmV0dXJuIGJ9XG5mdW5jdGlvbiBnaShhLGIsYyxkLGUpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPVJhO3RoaXMuY2FsbGJhY2tOb2RlPXRoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5jYWxsYmFja1ByaW9yaXR5PTA7dGhpcy5ldmVudFRpbWVzPUVjKDApO3RoaXMuZXhwaXJhdGlvblRpbWVzPUVjKC0xKTt0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLm11dGFibGVSZWFkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTA7dGhpcy5lbnRhbmdsZW1lbnRzPUVjKDApO3RoaXMuaWRlbnRpZmllclByZWZpeD1kO3RoaXMub25SZWNvdmVyYWJsZUVycm9yPWU7VmEmJih0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9XG5udWxsKX1mdW5jdGlvbiBoaShhLGIsYyxkLGUsZixnLGgsayl7YT1uZXcgZ2koYSxiLGMsaCxrKTsxPT09Yj8oYj0xLCEwPT09ZiYmKGJ8PTgpKTpiPTA7Zj10ZCgzLG51bGwsbnVsbCxiKTthLmN1cnJlbnQ9ZjtmLnN0YXRlTm9kZT1hO2YubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpkLGlzRGVoeWRyYXRlZDpjLGNhY2hlOm51bGwsdHJhbnNpdGlvbnM6bnVsbCxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOm51bGx9O2VlKGYpO3JldHVybiBhfVxuZnVuY3Rpb24gaWkoYSl7aWYoIWEpcmV0dXJuIGpjO2E9YS5fcmVhY3RJbnRlcm5hbHM7YTp7aWYod2EoYSkhPT1hfHwxIT09YS50YWcpdGhyb3cgRXJyb3IobigxNzApKTt2YXIgYj1hO2Rve3N3aXRjaChiLnRhZyl7Y2FzZSAzOmI9Yi5zdGF0ZU5vZGUuY29udGV4dDticmVhayBhO2Nhc2UgMTppZihBKGIudHlwZSkpe2I9Yi5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYX19Yj1iLnJldHVybn13aGlsZShudWxsIT09Yik7dGhyb3cgRXJyb3IobigxNzEpKTt9aWYoMT09PWEudGFnKXt2YXIgYz1hLnR5cGU7aWYoQShjKSlyZXR1cm4gcGMoYSxjLGIpfXJldHVybiBifVxuZnVuY3Rpb24gamkoYSl7dmFyIGI9YS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09Yil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEucmVuZGVyKXRocm93IEVycm9yKG4oMTg4KSk7YT1PYmplY3Qua2V5cyhhKS5qb2luKFwiLFwiKTt0aHJvdyBFcnJvcihuKDI2OCxhKSk7fWE9QWEoYik7cmV0dXJuIG51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGV9ZnVuY3Rpb24ga2koYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7dmFyIGM9YS5yZXRyeUxhbmU7YS5yZXRyeUxhbmU9MCE9PWMmJmM8Yj9jOmJ9fWZ1bmN0aW9uIGxpKGEsYil7a2koYSxiKTsoYT1hLmFsdGVybmF0ZSkmJmtpKGEsYil9ZnVuY3Rpb24gbWkoYSl7YT1BYShhKTtyZXR1cm4gbnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZX1mdW5jdGlvbiBuaSgpe3JldHVybiBudWxsfVxuZXhwb3J0cy5hdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbj1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1jZShhLDEzNDIxNzcyOCk7aWYobnVsbCE9PWIpe3ZhciBjPU8oKTthZihiLGEsMTM0MjE3NzI4LGMpfWxpKGEsMTM0MjE3NzI4KX19O2V4cG9ydHMuYXR0ZW1wdERpc2NyZXRlSHlkcmF0aW9uPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPWNlKGEsMSk7aWYobnVsbCE9PWIpe3ZhciBjPU8oKTthZihiLGEsMSxjKX1saShhLDEpfX07ZXhwb3J0cy5hdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHk9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9dGYoYSksYz1jZShhLGIpO2lmKG51bGwhPT1jKXt2YXIgZD1PKCk7YWYoYyxhLGIsZCl9bGkoYSxiKX19O1xuZXhwb3J0cy5hdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb249ZnVuY3Rpb24oYSl7c3dpdGNoKGEudGFnKXtjYXNlIDM6dmFyIGI9YS5zdGF0ZU5vZGU7aWYoYi5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgYz15YyhiLnBlbmRpbmdMYW5lcyk7MCE9PWMmJihIYyhiLGN8MSksS2goYixEKCkpLDA9PT0oSCY2KSYmKEJoKCksYWQoKSkpfWJyZWFrO2Nhc2UgMTM6WGgoZnVuY3Rpb24oKXt2YXIgYj1jZShhLDEpO2lmKG51bGwhPT1iKXt2YXIgYz1PKCk7YWYoYixhLDEsYyl9fSksbGkoYSwxKX19O2V4cG9ydHMuYmF0Y2hlZFVwZGF0ZXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1IO0h8PTE7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7SD1jLDA9PT1IJiYoQmgoKSxYYyYmYWQoKSl9fTtleHBvcnRzLmNyZWF0ZUNvbXBvbmVudFNlbGVjdG9yPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjpoaCx2YWx1ZTphfX07XG5leHBvcnRzLmNyZWF0ZUNvbnRhaW5lcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtyZXR1cm4gaGkoYSxiLCExLG51bGwsYyxkLGUsZixnKX07ZXhwb3J0cy5jcmVhdGVIYXNQc2V1ZG9DbGFzc1NlbGVjdG9yPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjppaCx2YWx1ZTphfX07ZXhwb3J0cy5jcmVhdGVIeWRyYXRpb25Db250YWluZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGspe2E9aGkoYyxkLCEwLGEsZSxmLGcsaCxrKTthLmNvbnRleHQ9aWkobnVsbCk7Yz1hLmN1cnJlbnQ7ZD1PKCk7ZT10ZihjKTtmPWdlKGQsZSk7Zi5jYWxsYmFjaz12b2lkIDAhPT1iJiZudWxsIT09Yj9iOm51bGw7aGUoYyxmLGUpO2EuY3VycmVudC5sYW5lcz1lO0ZjKGEsZSxkKTtLaChhLGQpO3JldHVybiBhfTtcbmV4cG9ydHMuY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6ZmEsa2V5Om51bGw9PWQ/bnVsbDpcIlwiK2QsY2hpbGRyZW46YSxjb250YWluZXJJbmZvOmIsaW1wbGVtZW50YXRpb246Y319O2V4cG9ydHMuY3JlYXRlUm9sZVNlbGVjdG9yPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjpqaCx2YWx1ZTphfX07ZXhwb3J0cy5jcmVhdGVUZXN0TmFtZVNlbGVjdG9yPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjpraCx2YWx1ZTphfX07ZXhwb3J0cy5jcmVhdGVUZXh0U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOmxoLHZhbHVlOmF9fTtcbmV4cG9ydHMuZGVmZXJyZWRVcGRhdGVzPWZ1bmN0aW9uKGEpe3ZhciBiPUMsYz1XLnRyYW5zaXRpb247dHJ5e3JldHVybiBXLnRyYW5zaXRpb249bnVsbCxDPTE2LGEoKX1maW5hbGx5e0M9YixXLnRyYW5zaXRpb249Y319O2V4cG9ydHMuZGlzY3JldGVVcGRhdGVzPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9QyxnPVcudHJhbnNpdGlvbjt0cnl7cmV0dXJuIFcudHJhbnNpdGlvbj1udWxsLEM9MSxhKGIsYyxkLGUpfWZpbmFsbHl7Qz1mLFcudHJhbnNpdGlvbj1nLDA9PT1IJiZCaCgpfX07ZXhwb3J0cy5maW5kQWxsTm9kZXM9cmg7XG5leHBvcnRzLmZpbmRCb3VuZGluZ1JlY3RzPWZ1bmN0aW9uKGEsYil7aWYoIWJiKXRocm93IEVycm9yKG4oMzYzKSk7Yj1yaChhLGIpO2E9W107Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspYS5wdXNoKGRiKGJbY10pKTtmb3IoYj1hLmxlbmd0aC0xOzA8YjtiLS0pe2M9YVtiXTtmb3IodmFyIGQ9Yy54LGU9ZCtjLndpZHRoLGY9Yy55LGc9ZitjLmhlaWdodCxoPWItMTswPD1oO2gtLSlpZihiIT09aCl7dmFyIGs9YVtoXSxsPWsueCxtPWwray53aWR0aCxyPWsueSxwPXIray5oZWlnaHQ7aWYoZD49bCYmZj49ciYmZTw9bSYmZzw9cCl7YS5zcGxpY2UoYiwxKTticmVha31lbHNlIGlmKCEoZCE9PWx8fGMud2lkdGghPT1rLndpZHRofHxwPGZ8fHI+Zykpe3I+ZiYmKGsuaGVpZ2h0Kz1yLWYsay55PWYpO3A8ZyYmKGsuaGVpZ2h0PWctcik7YS5zcGxpY2UoYiwxKTticmVha31lbHNlIGlmKCEoZiE9PXJ8fGMuaGVpZ2h0IT09ay5oZWlnaHR8fG08ZHx8bD5lKSl7bD5kJiYoay53aWR0aCs9XG5sLWQsay54PWQpO208ZSYmKGsud2lkdGg9ZS1sKTthLnNwbGljZShiLDEpO2JyZWFrfX19cmV0dXJuIGF9O2V4cG9ydHMuZmluZEhvc3RJbnN0YW5jZT1qaTtleHBvcnRzLmZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzPWZ1bmN0aW9uKGEpe2E9emEoYSk7YT1udWxsIT09YT9DYShhKTpudWxsO3JldHVybiBudWxsPT09YT9udWxsOmEuc3RhdGVOb2RlfTtleHBvcnRzLmZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZz1mdW5jdGlvbihhKXtyZXR1cm4gamkoYSl9O2V4cG9ydHMuZmx1c2hDb250cm9sbGVkPWZ1bmN0aW9uKGEpe3ZhciBiPUg7SHw9MTt2YXIgYz1XLnRyYW5zaXRpb24sZD1DO3RyeXtXLnRyYW5zaXRpb249bnVsbCxDPTEsYSgpfWZpbmFsbHl7Qz1kLFcudHJhbnNpdGlvbj1jLEg9YiwwPT09SCYmKEJoKCksYWQoKSl9fTtleHBvcnRzLmZsdXNoUGFzc2l2ZUVmZmVjdHM9T2g7ZXhwb3J0cy5mbHVzaFN5bmM9WGg7XG5leHBvcnRzLmZvY3VzV2l0aGluPWZ1bmN0aW9uKGEsYil7aWYoIWJiKXRocm93IEVycm9yKG4oMzYzKSk7YT1uaChhKTtiPXFoKGEsYik7Yj1BcnJheS5mcm9tKGIpO2ZvcihhPTA7YTxiLmxlbmd0aDspe3ZhciBjPWJbYSsrXTtpZighZmIoYykpe2lmKDU9PT1jLnRhZyYmaGIoYy5zdGF0ZU5vZGUpKXJldHVybiEwO2ZvcihjPWMuY2hpbGQ7bnVsbCE9PWM7KWIucHVzaChjKSxjPWMuc2libGluZ319cmV0dXJuITF9O2V4cG9ydHMuZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIEN9O1xuZXhwb3J0cy5nZXRGaW5kQWxsTm9kZXNGYWlsdXJlRGVzY3JpcHRpb249ZnVuY3Rpb24oYSxiKXtpZighYmIpdGhyb3cgRXJyb3IobigzNjMpKTt2YXIgYz0wLGQ9W107YT1bbmgoYSksMF07Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDspe3ZhciBmPWFbZSsrXSxnPWFbZSsrXSxoPWJbZ107aWYoNSE9PWYudGFnfHwhZmIoZikpaWYob2goZixoKSYmKGQucHVzaChwaChoKSksZysrLGc+YyYmKGM9ZykpLGc8Yi5sZW5ndGgpZm9yKGY9Zi5jaGlsZDtudWxsIT09ZjspYS5wdXNoKGYsZyksZj1mLnNpYmxpbmd9aWYoYzxiLmxlbmd0aCl7Zm9yKGE9W107YzxiLmxlbmd0aDtjKyspYS5wdXNoKHBoKGJbY10pKTtyZXR1cm5cImZpbmRBbGxOb2RlcyB3YXMgYWJsZSB0byBtYXRjaCBwYXJ0IG9mIHRoZSBzZWxlY3RvcjpcXG4gIFwiKyhkLmpvaW4oXCIgPiBcIikrXCJcXG5cXG5ObyBtYXRjaGluZyBjb21wb25lbnQgd2FzIGZvdW5kIGZvcjpcXG4gIFwiKSthLmpvaW4oXCIgPiBcIil9cmV0dXJuIG51bGx9O1xuZXhwb3J0cy5nZXRQdWJsaWNSb290SW5zdGFuY2U9ZnVuY3Rpb24oYSl7YT1hLmN1cnJlbnQ7aWYoIWEuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGEuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIEVhKGEuY2hpbGQuc3RhdGVOb2RlKTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19O1xuZXhwb3J0cy5pbmplY3RJbnRvRGV2VG9vbHM9ZnVuY3Rpb24oYSl7YT17YnVuZGxlVHlwZTphLmJ1bmRsZVR5cGUsdmVyc2lvbjphLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTphLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6YS5yZW5kZXJlckNvbmZpZyxvdmVycmlkZUhvb2tTdGF0ZTpudWxsLG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDpudWxsLG92ZXJyaWRlUHJvcHM6bnVsbCxvdmVycmlkZVByb3BzRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOm51bGwsc2V0RXJyb3JIYW5kbGVyOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjpkYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOm1pLGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOmEuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFxubmksZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbCxyZWNvbmNpbGVyVmVyc2lvbjpcIjE4LjMuMVwifTtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXylhPSExO2Vsc2V7dmFyIGI9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKGIuaXNEaXNhYmxlZHx8IWIuc3VwcG9ydHNGaWJlcilhPSEwO2Vsc2V7dHJ5e1JjPWIuaW5qZWN0KGEpLFNjPWJ9Y2F0Y2goYyl7fWE9Yi5jaGVja0RDRT8hMDohMX19cmV0dXJuIGF9O2V4cG9ydHMuaXNBbHJlYWR5UmVuZGVyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuITF9O1xuZXhwb3J0cy5vYnNlcnZlVmlzaWJsZVJlY3RzPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFiYil0aHJvdyBFcnJvcihuKDM2MykpO2E9cmgoYSxiKTt2YXIgZT1pYihhLGMsZCkuZGlzY29ubmVjdDtyZXR1cm57ZGlzY29ubmVjdDpmdW5jdGlvbigpe2UoKX19fTtleHBvcnRzLnJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPWIuX2dldFZlcnNpb247Yz1jKGIuX3NvdXJjZSk7bnVsbD09YS5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhP2EubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1bYixjXTphLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChiLGMpfTtleHBvcnRzLnJ1bldpdGhQcmlvcml0eT1mdW5jdGlvbihhLGIpe3ZhciBjPUM7dHJ5e3JldHVybiBDPWEsYigpfWZpbmFsbHl7Qz1jfX07ZXhwb3J0cy5zaG91bGRFcnJvcj1mdW5jdGlvbigpe3JldHVybiBudWxsfTtcbmV4cG9ydHMuc2hvdWxkU3VzcGVuZD1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLnVwZGF0ZUNvbnRhaW5lcj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iLmN1cnJlbnQsZj1PKCksZz10ZihlKTtjPWlpKGMpO251bGw9PT1iLmNvbnRleHQ/Yi5jb250ZXh0PWM6Yi5wZW5kaW5nQ29udGV4dD1jO2I9Z2UoZixnKTtiLnBheWxvYWQ9e2VsZW1lbnQ6YX07ZD12b2lkIDA9PT1kP251bGw6ZDtudWxsIT09ZCYmKGIuY2FsbGJhY2s9ZCk7YT1oZShlLGIsZyk7bnVsbCE9PWEmJihhZihhLGUsZyxmKSxpZShhLGUsZykpO3JldHVybiBnfTtcblxuICAgIHJldHVybiBleHBvcnRzO1xufTtcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAoKSA9PiB7XG5cdC8vIGh0dHBzOi8vbXRocy5iZS9lbW9qaVxuXHRyZXR1cm4gL1sjKjAtOV1cXHVGRTBGP1xcdTIwRTN8W1xceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFRC1cXHUyM0VGXFx1MjNGMVxcdTIzRjJcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkJcXHUyNUZDXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5MlxcdTI2OTQtXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkE3XFx1MjZBQVxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDOFxcdTI2Q0ZcXHUyNkQxXFx1MjZFOVxcdTI2RjAtXFx1MjZGNVxcdTI2RjdcXHUyNkY4XFx1MjZGQVxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzU3XFx1Mjc2M1xcdTI3QTFcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldXFx1RkUwRj98W1xcdTI2MURcXHUyNzBDXFx1MjcwRF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/fFtcXHUyNzBBXFx1MjcwQl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjY5M1xcdTI2QTFcXHUyNkFCXFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RkRcXHUyNzA1XFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjUwXXxcXHUyNkQzXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURDQTUpP3xcXHUyNkY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHUyNzY0XFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1RDgzRFxcdUREMjV8XFx1RDgzRVxcdURFNzkpKT98XFx1RDgzQyg/OltcXHVEQzA0XFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdURFMDJcXHVERTM3XFx1REYyMVxcdURGMjQtXFx1REYyQ1xcdURGMzZcXHVERjdEXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFXFx1REY5RlxcdURGQ0RcXHVERkNFXFx1REZENC1cXHVERkRGXFx1REZGNVxcdURGRjddXFx1RkUwRj98W1xcdURGODVcXHVERkMyXFx1REZDN10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REZDNFxcdURGQ0FdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURGQ0JcXHVERkNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGNDNcXHVERjQ1LVxcdURGNEFcXHVERjRDLVxcdURGN0NcXHVERjdFLVxcdURGODRcXHVERjg2LVxcdURGOTNcXHVERkEwLVxcdURGQzFcXHVERkM1XFx1REZDNlxcdURGQzhcXHVERkM5XFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGOC1cXHVERkZGXXxcXHVEREU2XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXXxcXHVEREU3XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERThcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGN1xcdURERkEtXFx1RERGRl18XFx1RERFOVxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl18XFx1RERFQVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdfFxcdURERUJcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN118XFx1RERFQ1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV18XFx1RERFRFxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXXxcXHVEREVFXFx1RDgzQ1tcXHVEREU4LVxcdURERUFcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjldfFxcdURERUZcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdfFxcdURERjBcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREYxXFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdfFxcdURERjJcXHVEODNDW1xcdURERTZcXHVEREU4LVxcdURERURcXHVEREYwLVxcdURERkZdfFxcdURERjNcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl18XFx1RERGNFxcdUQ4M0NcXHVEREYyfFxcdURERjVcXHVEODNDW1xcdURERTZcXHVEREVBLVxcdURERURcXHVEREYwLVxcdURERjNcXHVEREY3LVxcdURERjlcXHVEREZDXFx1RERGRV18XFx1RERGNlxcdUQ4M0NcXHVEREU2fFxcdURERjdcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXXxcXHVEREY4XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXXxcXHVEREY5XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERURcXHVEREVGLVxcdURERjRcXHVEREY3XFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRl18XFx1RERGQVxcdUQ4M0NbXFx1RERFNlxcdURERUNcXHVEREYyXFx1RERGM1xcdURERjhcXHVEREZFXFx1RERGRl18XFx1RERGQlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV18XFx1RERGQ1xcdUQ4M0NbXFx1RERFQlxcdURERjhdfFxcdURERkRcXHVEODNDXFx1RERGMHxcXHVEREZFXFx1RDgzQ1tcXHVEREVBXFx1RERGOV18XFx1RERGRlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXXxcXHVERjQ0KD86XFx1MjAwRFxcdUQ4M0RcXHVERkVCKT98XFx1REY0Qig/OlxcdTIwMERcXHVEODNEXFx1REZFOSk/fFxcdURGQzMoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/fFxcdURGRjNcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHUyNkE3XFx1RkUwRj98XFx1RDgzQ1xcdURGMDgpKT98XFx1REZGNCg/OlxcdTIwMERcXHUyNjIwXFx1RkUwRj98XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2MlxcdURCNDAoPzpcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3Rik/KXxcXHVEODNEKD86W1xcdURDM0ZcXHVEQ0ZEXFx1REQ0OVxcdURENEFcXHVERDZGXFx1REQ3MFxcdURENzNcXHVERDc2LVxcdURENzlcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkFcXHVERUNCXFx1REVDRC1cXHVERUNGXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRjBcXHVERUYzXVxcdUZFMEY/fFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNFxcdURFQjVdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURENzRcXHVERDkwXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT98W1xcdURDMDAtXFx1REMwN1xcdURDMDktXFx1REMxNFxcdURDMTYtXFx1REMyNVxcdURDMjctXFx1REMzQVxcdURDM0MtXFx1REMzRVxcdURDNDBcXHVEQzQ0XFx1REM0NVxcdURDNTEtXFx1REM2NVxcdURDNkFcXHVEQzc5LVxcdURDN0JcXHVEQzdELVxcdURDODBcXHVEQzg0XFx1REM4OC1cXHVEQzhFXFx1REM5MFxcdURDOTItXFx1RENBOVxcdURDQUItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREQTRcXHVEREZCLVxcdURFMkRcXHVERTJGLVxcdURFMzRcXHVERTM3LVxcdURFNDFcXHVERTQzXFx1REU0NFxcdURFNDgtXFx1REU0QVxcdURFODAtXFx1REVBMlxcdURFQTQtXFx1REVCM1xcdURFQjctXFx1REVCRlxcdURFQzEtXFx1REVDNVxcdURFRDAtXFx1REVEMlxcdURFRDUtXFx1REVEN1xcdURFREMtXFx1REVERlxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZDXFx1REZFMC1cXHVERkVCXFx1REZGMF18XFx1REMwOCg/OlxcdTIwMERcXHUyQjFCKT98XFx1REMxNSg/OlxcdTIwMERcXHVEODNFXFx1RERCQSk/fFxcdURDMjYoPzpcXHUyMDBEKD86XFx1MkIxQnxcXHVEODNEXFx1REQyNSkpP3xcXHVEQzNCKD86XFx1MjAwRFxcdTI3NDRcXHVGRTBGPyk/fFxcdURDNDFcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RERFOFxcdUZFMEY/KT98XFx1REM2OCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4fFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldXFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2OSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9bXFx1REM2OFxcdURDNjldfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/fFxcdURDNjlcXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzZGKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURENzUoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURFMkUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQTgpP3xcXHVERTM1KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0FCKT98XFx1REUzNig/OlxcdTIwMERcXHVEODNDXFx1REYyQlxcdUZFMEY/KT98XFx1REU0Mig/OlxcdTIwMERbXFx1MjE5NFxcdTIxOTVdXFx1RkUwRj8pP3xcXHVERUI2KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpPyl8XFx1RDgzRSg/OltcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMzAtXFx1REQzNFxcdUREMzZcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMlxcdURERDNcXHVEREQ1XFx1REVDMy1cXHVERUM1XFx1REVGMFxcdURFRjItXFx1REVGOF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRFxcdUREQ0ZcXHVEREQ0XFx1RERENi1cXHVEREREXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERERFXFx1RERERl0oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREMERcXHVERDBFXFx1REQxMC1cXHVERDE3XFx1REQyMC1cXHVERDI1XFx1REQyNy1cXHVERDJGXFx1REQzQVxcdUREM0YtXFx1REQ0NVxcdURENDctXFx1REQ3NlxcdURENzgtXFx1RERCNFxcdUREQjdcXHVEREJBXFx1RERCQy1cXHVERENDXFx1REREMFxcdURERTAtXFx1RERGRlxcdURFNzAtXFx1REU3Q1xcdURFODAtXFx1REU4OVxcdURFOEYtXFx1REVDMlxcdURFQzZcXHVERUNFLVxcdURFRENcXHVERURGLVxcdURFRTldfFxcdUREM0MoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/fFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFxcdUREQ0UoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/fFxcdURERDEoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdURERDFcXHUyMDBEXFx1RDgzRVxcdURERDIoPzpcXHUyMDBEXFx1RDgzRVxcdURERDIpP3xcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT8pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpPykpP3xcXHVERUYxKD86XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pP3xcXHVERkZDKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSk/fFxcdURGRkQoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKT98XFx1REZGRSg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pP3xcXHVERkZGKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKT8pKT8pL2c7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgRHVwbGV4IH0gPSByZXF1aXJlKCdzdHJlYW0nKTtcblxuLyoqXG4gKiBFbWl0cyB0aGUgYCdjbG9zZSdgIGV2ZW50IG9uIGEgc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB7RHVwbGV4fSBzdHJlYW0gVGhlIHN0cmVhbS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVtaXRDbG9zZShzdHJlYW0pIHtcbiAgc3RyZWFtLmVtaXQoJ2Nsb3NlJyk7XG59XG5cbi8qKlxuICogVGhlIGxpc3RlbmVyIG9mIHRoZSBgJ2VuZCdgIGV2ZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGR1cGxleE9uRW5kKCkge1xuICBpZiAoIXRoaXMuZGVzdHJveWVkICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgYCdlcnJvcidgIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyciBUaGUgZXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGR1cGxleE9uRXJyb3IoZXJyKSB7XG4gIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZHVwbGV4T25FcnJvcik7XG4gIHRoaXMuZGVzdHJveSgpO1xuICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdlcnJvcicpID09PSAwKSB7XG4gICAgLy8gRG8gbm90IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvci5cbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXBzIGEgYFdlYlNvY2tldGAgaW4gYSBkdXBsZXggc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB7V2ViU29ja2V0fSB3cyBUaGUgYFdlYlNvY2tldGAgdG8gd3JhcFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhlIGBEdXBsZXhgIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJuIHtEdXBsZXh9IFRoZSBkdXBsZXggc3RyZWFtXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdlYlNvY2tldFN0cmVhbSh3cywgb3B0aW9ucykge1xuICBsZXQgdGVybWluYXRlT25EZXN0cm95ID0gdHJ1ZTtcblxuICBjb25zdCBkdXBsZXggPSBuZXcgRHVwbGV4KHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGF1dG9EZXN0cm95OiBmYWxzZSxcbiAgICBlbWl0Q2xvc2U6IGZhbHNlLFxuICAgIG9iamVjdE1vZGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogZmFsc2VcbiAgfSk7XG5cbiAgd3Mub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiBtZXNzYWdlKG1zZywgaXNCaW5hcnkpIHtcbiAgICBjb25zdCBkYXRhID1cbiAgICAgICFpc0JpbmFyeSAmJiBkdXBsZXguX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZSA/IG1zZy50b1N0cmluZygpIDogbXNnO1xuXG4gICAgaWYgKCFkdXBsZXgucHVzaChkYXRhKSkgd3MucGF1c2UoKTtcbiAgfSk7XG5cbiAgd3Mub25jZSgnZXJyb3InLCBmdW5jdGlvbiBlcnJvcihlcnIpIHtcbiAgICBpZiAoZHVwbGV4LmRlc3Ryb3llZCkgcmV0dXJuO1xuXG4gICAgLy8gUHJldmVudCBgd3MudGVybWluYXRlKClgIGZyb20gYmVpbmcgY2FsbGVkIGJ5IGBkdXBsZXguX2Rlc3Ryb3koKWAuXG4gICAgLy9cbiAgICAvLyAtIElmIHRoZSBgJ2Vycm9yJ2AgZXZlbnQgaXMgZW1pdHRlZCBiZWZvcmUgdGhlIGAnb3BlbidgIGV2ZW50LCB0aGVuXG4gICAgLy8gICBgd3MudGVybWluYXRlKClgIGlzIGEgbm9vcCBhcyBubyBzb2NrZXQgaXMgYXNzaWduZWQuXG4gICAgLy8gLSBPdGhlcndpc2UsIHRoZSBlcnJvciBpcyByZS1lbWl0dGVkIGJ5IHRoZSBsaXN0ZW5lciBvZiB0aGUgYCdlcnJvcidgXG4gICAgLy8gICBldmVudCBvZiB0aGUgYFJlY2VpdmVyYCBvYmplY3QuIFRoZSBsaXN0ZW5lciBhbHJlYWR5IGNsb3NlcyB0aGVcbiAgICAvLyAgIGNvbm5lY3Rpb24gYnkgY2FsbGluZyBgd3MuY2xvc2UoKWAuIFRoaXMgYWxsb3dzIGEgY2xvc2UgZnJhbWUgdG8gYmVcbiAgICAvLyAgIHNlbnQgdG8gdGhlIG90aGVyIHBlZXIuIElmIGB3cy50ZXJtaW5hdGUoKWAgaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoaXMsXG4gICAgLy8gICB0aGVuIHRoZSBjbG9zZSBmcmFtZSBtaWdodCBub3QgYmUgc2VudC5cbiAgICB0ZXJtaW5hdGVPbkRlc3Ryb3kgPSBmYWxzZTtcbiAgICBkdXBsZXguZGVzdHJveShlcnIpO1xuICB9KTtcblxuICB3cy5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIGlmIChkdXBsZXguZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICBkdXBsZXgucHVzaChudWxsKTtcbiAgfSk7XG5cbiAgZHVwbGV4Ll9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gd3MuQ0xPU0VEKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2UsIGR1cGxleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuXG4gICAgd3Mub25jZSgnZXJyb3InLCBmdW5jdGlvbiBlcnJvcihlcnIpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xuXG4gICAgd3Mub25jZSgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIGlmICghY2FsbGVkKSBjYWxsYmFjayhlcnIpO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2UsIGR1cGxleCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybWluYXRlT25EZXN0cm95KSB3cy50ZXJtaW5hdGUoKTtcbiAgfTtcblxuICBkdXBsZXguX2ZpbmFsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgaWYgKHdzLnJlYWR5U3RhdGUgPT09IHdzLkNPTk5FQ1RJTkcpIHtcbiAgICAgIHdzLm9uY2UoJ29wZW4nLCBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgICBkdXBsZXguX2ZpbmFsKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgYF9zb2NrZXRgIHByb3BlcnR5IGlzIGBudWxsYCBpdCBtZWFucyB0aGF0IGB3c2AgaXMgYVxuICAgIC8vIGNsaWVudCB3ZWJzb2NrZXQgYW5kIHRoZSBoYW5kc2hha2UgZmFpbGVkLiBJbiBmYWN0LCB3aGVuIHRoaXMgaGFwcGVucywgYVxuICAgIC8vIHNvY2tldCBpcyBuZXZlciBhc3NpZ25lZCB0byB0aGUgd2Vic29ja2V0LiBXYWl0IGZvciB0aGUgYCdlcnJvcidgIGV2ZW50XG4gICAgLy8gdGhhdCB3aWxsIGJlIGVtaXR0ZWQgYnkgdGhlIHdlYnNvY2tldC5cbiAgICBpZiAod3MuX3NvY2tldCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKHdzLl9zb2NrZXQuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICBpZiAoZHVwbGV4Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIGR1cGxleC5kZXN0cm95KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdzLl9zb2NrZXQub25jZSgnZmluaXNoJywgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgICAgICAvLyBgZHVwbGV4YCBpcyBub3QgZGVzdHJveWVkIGhlcmUgYmVjYXVzZSB0aGUgYCdlbmQnYCBldmVudCB3aWxsIGJlXG4gICAgICAgIC8vIGVtaXR0ZWQgb24gYGR1cGxleGAgYWZ0ZXIgdGhpcyBgJ2ZpbmlzaCdgIGV2ZW50LiBUaGUgRU9GIHNpZ25hbGluZ1xuICAgICAgICAvLyBgbnVsbGAgY2h1bmsgaXMsIGluIGZhY3QsIHB1c2hlZCB3aGVuIHRoZSB3ZWJzb2NrZXQgZW1pdHMgYCdjbG9zZSdgLlxuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgICB3cy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBkdXBsZXguX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHdzLmlzUGF1c2VkKSB3cy5yZXN1bWUoKTtcbiAgfTtcblxuICBkdXBsZXguX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gd3MuQ09OTkVDVElORykge1xuICAgICAgd3Mub25jZSgnb3BlbicsIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICAgIGR1cGxleC5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3cy5zZW5kKGNodW5rLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgZHVwbGV4Lm9uKCdlbmQnLCBkdXBsZXhPbkVuZCk7XG4gIGR1cGxleC5vbignZXJyb3InLCBkdXBsZXhPbkVycm9yKTtcbiAgcmV0dXJuIGR1cGxleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVXZWJTb2NrZXRTdHJlYW07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQklOQVJZX1RZUEVTID0gWydub2RlYnVmZmVyJywgJ2FycmF5YnVmZmVyJywgJ2ZyYWdtZW50cyddO1xuY29uc3QgaGFzQmxvYiA9IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJztcblxuaWYgKGhhc0Jsb2IpIEJJTkFSWV9UWVBFUy5wdXNoKCdibG9iJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCSU5BUllfVFlQRVMsXG4gIEVNUFRZX0JVRkZFUjogQnVmZmVyLmFsbG9jKDApLFxuICBHVUlEOiAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJyxcbiAgaGFzQmxvYixcbiAga0Zvck9uRXZlbnRBdHRyaWJ1dGU6IFN5bWJvbCgna0lzRm9yT25FdmVudEF0dHJpYnV0ZScpLFxuICBrTGlzdGVuZXI6IFN5bWJvbCgna0xpc3RlbmVyJyksXG4gIGtTdGF0dXNDb2RlOiBTeW1ib2woJ3N0YXR1cy1jb2RlJyksXG4gIGtXZWJTb2NrZXQ6IFN5bWJvbCgnd2Vic29ja2V0JyksXG4gIE5PT1A6ICgpID0+IHt9XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgRU1QVFlfQlVGRkVSIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXTtcblxuLyoqXG4gKiBNZXJnZXMgYW4gYXJyYXkgb2YgYnVmZmVycyBpbnRvIGEgbmV3IGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcltdfSBsaXN0IFRoZSBhcnJheSBvZiBidWZmZXJzIHRvIGNvbmNhdFxuICogQHBhcmFtIHtOdW1iZXJ9IHRvdGFsTGVuZ3RoIFRoZSB0b3RhbCBsZW5ndGggb2YgYnVmZmVycyBpbiB0aGUgbGlzdFxuICogQHJldHVybiB7QnVmZmVyfSBUaGUgcmVzdWx0aW5nIGJ1ZmZlclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBjb25jYXQobGlzdCwgdG90YWxMZW5ndGgpIHtcbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHJldHVybiBsaXN0WzBdO1xuXG4gIGNvbnN0IHRhcmdldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSh0b3RhbExlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ1ZiA9IGxpc3RbaV07XG4gICAgdGFyZ2V0LnNldChidWYsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IGJ1Zi5sZW5ndGg7XG4gIH1cblxuICBpZiAob2Zmc2V0IDwgdG90YWxMZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IEZhc3RCdWZmZXIodGFyZ2V0LmJ1ZmZlciwgdGFyZ2V0LmJ5dGVPZmZzZXQsIG9mZnNldCk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIE1hc2tzIGEgYnVmZmVyIHVzaW5nIHRoZSBnaXZlbiBtYXNrLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBzb3VyY2UgVGhlIGJ1ZmZlciB0byBtYXNrXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbWFzayBUaGUgbWFzayB0byB1c2VcbiAqIEBwYXJhbSB7QnVmZmVyfSBvdXRwdXQgVGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IFRoZSBvZmZzZXQgYXQgd2hpY2ggdG8gc3RhcnQgd3JpdGluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1hc2suXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIF9tYXNrKHNvdXJjZSwgbWFzaywgb3V0cHV0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0W29mZnNldCArIGldID0gc291cmNlW2ldIF4gbWFza1tpICYgM107XG4gIH1cbn1cblxuLyoqXG4gKiBVbm1hc2tzIGEgYnVmZmVyIHVzaW5nIHRoZSBnaXZlbiBtYXNrLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byB1bm1hc2tcbiAqIEBwYXJhbSB7QnVmZmVyfSBtYXNrIFRoZSBtYXNrIHRvIHVzZVxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBfdW5tYXNrKGJ1ZmZlciwgbWFzaykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGJ1ZmZlcltpXSBePSBtYXNrW2kgJiAzXTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYnVmZmVyIHRvIGFuIGBBcnJheUJ1ZmZlcmAuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZiBUaGUgYnVmZmVyIHRvIGNvbnZlcnRcbiAqIEByZXR1cm4ge0FycmF5QnVmZmVyfSBDb252ZXJ0ZWQgYnVmZmVyXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXlCdWZmZXIoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSBidWYuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYnVmLmJ1ZmZlcjtcbiAgfVxuXG4gIHJldHVybiBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5sZW5ndGgpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBkYXRhYCB0byBhIGBCdWZmZXJgLlxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgZGF0YSB0byBjb252ZXJ0XG4gKiBAcmV0dXJuIHtCdWZmZXJ9IFRoZSBidWZmZXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdG9CdWZmZXIoZGF0YSkge1xuICB0b0J1ZmZlci5yZWFkT25seSA9IHRydWU7XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgcmV0dXJuIGRhdGE7XG5cbiAgbGV0IGJ1ZjtcblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgYnVmID0gbmV3IEZhc3RCdWZmZXIoZGF0YSk7XG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgYnVmID0gbmV3IEZhc3RCdWZmZXIoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICB0b0J1ZmZlci5yZWFkT25seSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGJ1Zjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbmNhdCxcbiAgbWFzazogX21hc2ssXG4gIHRvQXJyYXlCdWZmZXIsXG4gIHRvQnVmZmVyLFxuICB1bm1hc2s6IF91bm1hc2tcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICAqL1xuaWYgKCFwcm9jZXNzLmVudi5XU19OT19CVUZGRVJfVVRJTCkge1xuICB0cnkge1xuICAgIGNvbnN0IGJ1ZmZlclV0aWwgPSByZXF1aXJlKCdidWZmZXJ1dGlsJyk7XG5cbiAgICBtb2R1bGUuZXhwb3J0cy5tYXNrID0gZnVuY3Rpb24gKHNvdXJjZSwgbWFzaywgb3V0cHV0LCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgaWYgKGxlbmd0aCA8IDQ4KSBfbWFzayhzb3VyY2UsIG1hc2ssIG91dHB1dCwgb2Zmc2V0LCBsZW5ndGgpO1xuICAgICAgZWxzZSBidWZmZXJVdGlsLm1hc2soc291cmNlLCBtYXNrLCBvdXRwdXQsIG9mZnNldCwgbGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgbW9kdWxlLmV4cG9ydHMudW5tYXNrID0gZnVuY3Rpb24gKGJ1ZmZlciwgbWFzaykge1xuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAzMikgX3VubWFzayhidWZmZXIsIG1hc2spO1xuICAgICAgZWxzZSBidWZmZXJVdGlsLnVubWFzayhidWZmZXIsIG1hc2spO1xuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBDb250aW51ZSByZWdhcmRsZXNzIG9mIHRoZSBlcnJvci5cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGtEb25lID0gU3ltYm9sKCdrRG9uZScpO1xuY29uc3Qga1J1biA9IFN5bWJvbCgna1J1bicpO1xuXG4vKipcbiAqIEEgdmVyeSBzaW1wbGUgam9iIHF1ZXVlIHdpdGggYWRqdXN0YWJsZSBjb25jdXJyZW5jeS4gQWRhcHRlZCBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vU1RSTUwvYXN5bmMtbGltaXRlclxuICovXG5jbGFzcyBMaW1pdGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYExpbWl0ZXJgLlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gW2NvbmN1cnJlbmN5PUluZmluaXR5XSBUaGUgbWF4aW11bSBudW1iZXIgb2Ygam9icyBhbGxvd2VkXG4gICAqICAgICB0byBydW4gY29uY3VycmVudGx5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25jdXJyZW5jeSkge1xuICAgIHRoaXNba0RvbmVdID0gKCkgPT4ge1xuICAgICAgdGhpcy5wZW5kaW5nLS07XG4gICAgICB0aGlzW2tSdW5dKCk7XG4gICAgfTtcbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgSW5maW5pdHk7XG4gICAgdGhpcy5qb2JzID0gW107XG4gICAgdGhpcy5wZW5kaW5nID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgam9iIHRvIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gam9iIFRoZSBqb2IgdG8gcnVuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGFkZChqb2IpIHtcbiAgICB0aGlzLmpvYnMucHVzaChqb2IpO1xuICAgIHRoaXNba1J1bl0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgam9iIGZyb20gdGhlIHF1ZXVlIGFuZCBydW5zIGl0IGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgW2tSdW5dKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmcgPT09IHRoaXMuY29uY3VycmVuY3kpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmpvYnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBqb2IgPSB0aGlzLmpvYnMuc2hpZnQoKTtcblxuICAgICAgdGhpcy5wZW5kaW5nKys7XG4gICAgICBqb2IodGhpc1trRG9uZV0pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExpbWl0ZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcblxuY29uc3QgYnVmZmVyVXRpbCA9IHJlcXVpcmUoJy4vYnVmZmVyLXV0aWwnKTtcbmNvbnN0IExpbWl0ZXIgPSByZXF1aXJlKCcuL2xpbWl0ZXInKTtcbmNvbnN0IHsga1N0YXR1c0NvZGUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdO1xuY29uc3QgVFJBSUxFUiA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweGZmLCAweGZmXSk7XG5jb25zdCBrUGVyTWVzc2FnZURlZmxhdGUgPSBTeW1ib2woJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpO1xuY29uc3Qga1RvdGFsTGVuZ3RoID0gU3ltYm9sKCd0b3RhbC1sZW5ndGgnKTtcbmNvbnN0IGtDYWxsYmFjayA9IFN5bWJvbCgnY2FsbGJhY2snKTtcbmNvbnN0IGtCdWZmZXJzID0gU3ltYm9sKCdidWZmZXJzJyk7XG5jb25zdCBrRXJyb3IgPSBTeW1ib2woJ2Vycm9yJyk7XG5cbi8vXG4vLyBXZSBsaW1pdCB6bGliIGNvbmN1cnJlbmN5LCB3aGljaCBwcmV2ZW50cyBzZXZlcmUgbWVtb3J5IGZyYWdtZW50YXRpb25cbi8vIGFzIGRvY3VtZW50ZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84ODcxI2lzc3VlY29tbWVudC0yNTA5MTU5MTNcbi8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9pc3N1ZXMvMTIwMlxuLy9cbi8vIEludGVudGlvbmFsbHkgZ2xvYmFsOyBpdCdzIHRoZSBnbG9iYWwgdGhyZWFkIHBvb2wgdGhhdCdzIGFuIGlzc3VlLlxuLy9cbmxldCB6bGliTGltaXRlcjtcblxuLyoqXG4gKiBwZXJtZXNzYWdlLWRlZmxhdGUgaW1wbGVtZW50YXRpb24uXG4gKi9cbmNsYXNzIFBlck1lc3NhZ2VEZWZsYXRlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBQZXJNZXNzYWdlRGVmbGF0ZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBDb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHsoQm9vbGVhbnxOdW1iZXIpfSBbb3B0aW9ucy5jbGllbnRNYXhXaW5kb3dCaXRzXSBBZHZlcnRpc2Ugc3VwcG9ydFxuICAgKiAgICAgZm9yLCBvciByZXF1ZXN0LCBhIGN1c3RvbSBjbGllbnQgd2luZG93IHNpemVcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5jbGllbnROb0NvbnRleHRUYWtlb3Zlcj1mYWxzZV0gQWR2ZXJ0aXNlL1xuICAgKiAgICAgYWNrbm93bGVkZ2UgZGlzYWJsaW5nIG9mIGNsaWVudCBjb250ZXh0IHRha2VvdmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5jb25jdXJyZW5jeUxpbWl0PTEwXSBUaGUgbnVtYmVyIG9mIGNvbmN1cnJlbnRcbiAgICogICAgIGNhbGxzIHRvIHpsaWJcbiAgICogQHBhcmFtIHsoQm9vbGVhbnxOdW1iZXIpfSBbb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzXSBSZXF1ZXN0L2NvbmZpcm0gdGhlXG4gICAqICAgICB1c2Ugb2YgYSBjdXN0b20gc2VydmVyIHdpbmRvdyBzaXplXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2VydmVyTm9Db250ZXh0VGFrZW92ZXI9ZmFsc2VdIFJlcXVlc3QvYWNjZXB0XG4gICAqICAgICBkaXNhYmxpbmcgb2Ygc2VydmVyIGNvbnRleHQgdGFrZW92ZXJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnRocmVzaG9sZD0xMDI0XSBTaXplIChpbiBieXRlcykgYmVsb3cgd2hpY2hcbiAgICogICAgIG1lc3NhZ2VzIHNob3VsZCBub3QgYmUgY29tcHJlc3NlZCBpZiBjb250ZXh0IHRha2VvdmVyIGlzIGRpc2FibGVkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliRGVmbGF0ZU9wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB6bGliIG9uXG4gICAqICAgICBkZWZsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliSW5mbGF0ZU9wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB6bGliIG9uXG4gICAqICAgICBpbmZsYXRlXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2lzU2VydmVyPWZhbHNlXSBDcmVhdGUgdGhlIGluc3RhbmNlIGluIGVpdGhlciBzZXJ2ZXIgb3JcbiAgICogICAgIGNsaWVudCBtb2RlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbbWF4UGF5bG9hZD0wXSBUaGUgbWF4aW11bSBhbGxvd2VkIG1lc3NhZ2UgbGVuZ3RoXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBpc1NlcnZlciwgbWF4UGF5bG9hZCkge1xuICAgIHRoaXMuX21heFBheWxvYWQgPSBtYXhQYXlsb2FkIHwgMDtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl90aHJlc2hvbGQgPVxuICAgICAgdGhpcy5fb3B0aW9ucy50aHJlc2hvbGQgIT09IHVuZGVmaW5lZCA/IHRoaXMuX29wdGlvbnMudGhyZXNob2xkIDogMTAyNDtcbiAgICB0aGlzLl9pc1NlcnZlciA9ICEhaXNTZXJ2ZXI7XG4gICAgdGhpcy5fZGVmbGF0ZSA9IG51bGw7XG4gICAgdGhpcy5faW5mbGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmFtcyA9IG51bGw7XG5cbiAgICBpZiAoIXpsaWJMaW1pdGVyKSB7XG4gICAgICBjb25zdCBjb25jdXJyZW5jeSA9XG4gICAgICAgIHRoaXMuX29wdGlvbnMuY29uY3VycmVuY3lMaW1pdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLl9vcHRpb25zLmNvbmN1cnJlbmN5TGltaXRcbiAgICAgICAgICA6IDEwO1xuICAgICAgemxpYkxpbWl0ZXIgPSBuZXcgTGltaXRlcihjb25jdXJyZW5jeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGV4dGVuc2lvbk5hbWUoKSB7XG4gICAgcmV0dXJuICdwZXJtZXNzYWdlLWRlZmxhdGUnO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBleHRlbnNpb24gbmVnb3RpYXRpb24gb2ZmZXIuXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gRXh0ZW5zaW9uIHBhcmFtZXRlcnNcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgb2ZmZXIoKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5zZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcikge1xuICAgICAgcGFyYW1zLnNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29wdGlvbnMuY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpIHtcbiAgICAgIHBhcmFtcy5jbGllbnRfbm9fY29udGV4dF90YWtlb3ZlciA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNlcnZlck1heFdpbmRvd0JpdHMpIHtcbiAgICAgIHBhcmFtcy5zZXJ2ZXJfbWF4X3dpbmRvd19iaXRzID0gdGhpcy5fb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5jbGllbnRNYXhXaW5kb3dCaXRzKSB7XG4gICAgICBwYXJhbXMuY2xpZW50X21heF93aW5kb3dfYml0cyA9IHRoaXMuX29wdGlvbnMuY2xpZW50TWF4V2luZG93Qml0cztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29wdGlvbnMuY2xpZW50TWF4V2luZG93Qml0cyA9PSBudWxsKSB7XG4gICAgICBwYXJhbXMuY2xpZW50X21heF93aW5kb3dfYml0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgYW4gZXh0ZW5zaW9uIG5lZ290aWF0aW9uIG9mZmVyL3Jlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBjb25maWd1cmF0aW9ucyBUaGUgZXh0ZW5zaW9uIG5lZ290aWF0aW9uIG9mZmVycy9yZXBvbnNlXG4gICAqIEByZXR1cm4ge09iamVjdH0gQWNjZXB0ZWQgY29uZmlndXJhdGlvblxuICAgKiBAcHVibGljXG4gICAqL1xuICBhY2NlcHQoY29uZmlndXJhdGlvbnMpIHtcbiAgICBjb25maWd1cmF0aW9ucyA9IHRoaXMubm9ybWFsaXplUGFyYW1zKGNvbmZpZ3VyYXRpb25zKTtcblxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5faXNTZXJ2ZXJcbiAgICAgID8gdGhpcy5hY2NlcHRBc1NlcnZlcihjb25maWd1cmF0aW9ucylcbiAgICAgIDogdGhpcy5hY2NlcHRBc0NsaWVudChjb25maWd1cmF0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgYWxsIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsZWFudXAoKSB7XG4gICAgaWYgKHRoaXMuX2luZmxhdGUpIHtcbiAgICAgIHRoaXMuX2luZmxhdGUuY2xvc2UoKTtcbiAgICAgIHRoaXMuX2luZmxhdGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWZsYXRlKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuX2RlZmxhdGVba0NhbGxiYWNrXTtcblxuICAgICAgdGhpcy5fZGVmbGF0ZS5jbG9zZSgpO1xuICAgICAgdGhpcy5fZGVmbGF0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnVGhlIGRlZmxhdGUgc3RyZWFtIHdhcyBjbG9zZWQgd2hpbGUgZGF0YSB3YXMgYmVpbmcgcHJvY2Vzc2VkJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEFjY2VwdCBhbiBleHRlbnNpb24gbmVnb3RpYXRpb24gb2ZmZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IG9mZmVycyBUaGUgZXh0ZW5zaW9uIG5lZ290aWF0aW9uIG9mZmVyc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEFjY2VwdGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFjY2VwdEFzU2VydmVyKG9mZmVycykge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLl9vcHRpb25zO1xuICAgIGNvbnN0IGFjY2VwdGVkID0gb2ZmZXJzLmZpbmQoKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAob3B0cy5zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciA9PT0gZmFsc2UgJiZcbiAgICAgICAgICBwYXJhbXMuc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXIpIHx8XG4gICAgICAgIChwYXJhbXMuc2VydmVyX21heF93aW5kb3dfYml0cyAmJlxuICAgICAgICAgIChvcHRzLnNlcnZlck1heFdpbmRvd0JpdHMgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodHlwZW9mIG9wdHMuc2VydmVyTWF4V2luZG93Qml0cyA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgb3B0cy5zZXJ2ZXJNYXhXaW5kb3dCaXRzID4gcGFyYW1zLnNlcnZlcl9tYXhfd2luZG93X2JpdHMpKSkgfHxcbiAgICAgICAgKHR5cGVvZiBvcHRzLmNsaWVudE1heFdpbmRvd0JpdHMgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgIXBhcmFtcy5jbGllbnRfbWF4X3dpbmRvd19iaXRzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAoIWFjY2VwdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbmUgb2YgdGhlIGV4dGVuc2lvbiBvZmZlcnMgY2FuIGJlIGFjY2VwdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpIHtcbiAgICAgIGFjY2VwdGVkLnNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdHMuY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpIHtcbiAgICAgIGFjY2VwdGVkLmNsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnNlcnZlck1heFdpbmRvd0JpdHMgPT09ICdudW1iZXInKSB7XG4gICAgICBhY2NlcHRlZC5zZXJ2ZXJfbWF4X3dpbmRvd19iaXRzID0gb3B0cy5zZXJ2ZXJNYXhXaW5kb3dCaXRzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMuY2xpZW50TWF4V2luZG93Qml0cyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGFjY2VwdGVkLmNsaWVudF9tYXhfd2luZG93X2JpdHMgPSBvcHRzLmNsaWVudE1heFdpbmRvd0JpdHM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGFjY2VwdGVkLmNsaWVudF9tYXhfd2luZG93X2JpdHMgPT09IHRydWUgfHxcbiAgICAgIG9wdHMuY2xpZW50TWF4V2luZG93Qml0cyA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBhY2NlcHRlZC5jbGllbnRfbWF4X3dpbmRvd19iaXRzO1xuICAgIH1cblxuICAgIHJldHVybiBhY2NlcHRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgdGhlIGV4dGVuc2lvbiBuZWdvdGlhdGlvbiByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcmVzcG9uc2UgVGhlIGV4dGVuc2lvbiBuZWdvdGlhdGlvbiByZXNwb25zZVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEFjY2VwdGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFjY2VwdEFzQ2xpZW50KHJlc3BvbnNlKSB7XG4gICAgY29uc3QgcGFyYW1zID0gcmVzcG9uc2VbMF07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9vcHRpb25zLmNsaWVudE5vQ29udGV4dFRha2VvdmVyID09PSBmYWxzZSAmJlxuICAgICAgcGFyYW1zLmNsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgcGFyYW1ldGVyIFwiY2xpZW50X25vX2NvbnRleHRfdGFrZW92ZXJcIicpO1xuICAgIH1cblxuICAgIGlmICghcGFyYW1zLmNsaWVudF9tYXhfd2luZG93X2JpdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fb3B0aW9ucy5jbGllbnRNYXhXaW5kb3dCaXRzID09PSAnbnVtYmVyJykge1xuICAgICAgICBwYXJhbXMuY2xpZW50X21heF93aW5kb3dfYml0cyA9IHRoaXMuX29wdGlvbnMuY2xpZW50TWF4V2luZG93Qml0cztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fb3B0aW9ucy5jbGllbnRNYXhXaW5kb3dCaXRzID09PSBmYWxzZSB8fFxuICAgICAgKHR5cGVvZiB0aGlzLl9vcHRpb25zLmNsaWVudE1heFdpbmRvd0JpdHMgPT09ICdudW1iZXInICYmXG4gICAgICAgIHBhcmFtcy5jbGllbnRfbWF4X3dpbmRvd19iaXRzID4gdGhpcy5fb3B0aW9ucy5jbGllbnRNYXhXaW5kb3dCaXRzKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVW5leHBlY3RlZCBvciBpbnZhbGlkIHBhcmFtZXRlciBcImNsaWVudF9tYXhfd2luZG93X2JpdHNcIidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gY29uZmlndXJhdGlvbnMgVGhlIGV4dGVuc2lvbiBuZWdvdGlhdGlvbiBvZmZlcnMvcmVwb25zZVxuICAgKiBAcmV0dXJuIHtBcnJheX0gVGhlIG9mZmVycy9yZXNwb25zZSB3aXRoIG5vcm1hbGl6ZWQgcGFyYW1ldGVyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbm9ybWFsaXplUGFyYW1zKGNvbmZpZ3VyYXRpb25zKSB7XG4gICAgY29uZmlndXJhdGlvbnMuZm9yRWFjaCgocGFyYW1zKSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXJhbXNba2V5XTtcblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwiJHtrZXl9XCIgbXVzdCBoYXZlIG9ubHkgYSBzaW5nbGUgdmFsdWVgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gdmFsdWVbMF07XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsaWVudF9tYXhfd2luZG93X2JpdHMnKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBudW0gPSArdmFsdWU7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtKSB8fCBudW0gPCA4IHx8IG51bSA+IDE1KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciBcIiR7a2V5fVwiOiAke3ZhbHVlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gbnVtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzU2VydmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICBgSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyIFwiJHtrZXl9XCI6ICR7dmFsdWV9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2VydmVyX21heF93aW5kb3dfYml0cycpIHtcbiAgICAgICAgICBjb25zdCBudW0gPSArdmFsdWU7XG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG51bSkgfHwgbnVtIDwgOCB8fCBudW0gPiAxNSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgYEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciBcIiR7a2V5fVwiOiAke3ZhbHVlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gbnVtO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGtleSA9PT0gJ2NsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyJyB8fFxuICAgICAgICAgIGtleSA9PT0gJ3NlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgIGBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgXCIke2tleX1cIjogJHt2YWx1ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGFyYW1ldGVyIFwiJHtrZXl9XCJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtc1trZXldID0gdmFsdWU7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGRhdGEuIENvbmN1cnJlbmN5IGxpbWl0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIENvbXByZXNzZWQgZGF0YVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpbiBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhpcyBpcyB0aGUgbGFzdCBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFja1xuICAgKiBAcHVibGljXG4gICAqL1xuICBkZWNvbXByZXNzKGRhdGEsIGZpbiwgY2FsbGJhY2spIHtcbiAgICB6bGliTGltaXRlci5hZGQoKGRvbmUpID0+IHtcbiAgICAgIHRoaXMuX2RlY29tcHJlc3MoZGF0YSwgZmluLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wcmVzcyBkYXRhLiBDb25jdXJyZW5jeSBsaW1pdGVkLlxuICAgKlxuICAgKiBAcGFyYW0geyhCdWZmZXJ8U3RyaW5nKX0gZGF0YSBEYXRhIHRvIGNvbXByZXNzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmluIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHRoZSBsYXN0IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNvbXByZXNzKGRhdGEsIGZpbiwgY2FsbGJhY2spIHtcbiAgICB6bGliTGltaXRlci5hZGQoKGRvbmUpID0+IHtcbiAgICAgIHRoaXMuX2NvbXByZXNzKGRhdGEsIGZpbiwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb21wcmVzcyBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBDb21wcmVzc2VkIGRhdGFcbiAgICogQHBhcmFtIHtCb29sZWFufSBmaW4gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgdGhlIGxhc3QgZnJhZ21lbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWNvbXByZXNzKGRhdGEsIGZpbiwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuX2lzU2VydmVyID8gJ2NsaWVudCcgOiAnc2VydmVyJztcblxuICAgIGlmICghdGhpcy5faW5mbGF0ZSkge1xuICAgICAgY29uc3Qga2V5ID0gYCR7ZW5kcG9pbnR9X21heF93aW5kb3dfYml0c2A7XG4gICAgICBjb25zdCB3aW5kb3dCaXRzID1cbiAgICAgICAgdHlwZW9mIHRoaXMucGFyYW1zW2tleV0gIT09ICdudW1iZXInXG4gICAgICAgICAgPyB6bGliLlpfREVGQVVMVF9XSU5ET1dCSVRTXG4gICAgICAgICAgOiB0aGlzLnBhcmFtc1trZXldO1xuXG4gICAgICB0aGlzLl9pbmZsYXRlID0gemxpYi5jcmVhdGVJbmZsYXRlUmF3KHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucy56bGliSW5mbGF0ZU9wdGlvbnMsXG4gICAgICAgIHdpbmRvd0JpdHNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5mbGF0ZVtrUGVyTWVzc2FnZURlZmxhdGVdID0gdGhpcztcbiAgICAgIHRoaXMuX2luZmxhdGVba1RvdGFsTGVuZ3RoXSA9IDA7XG4gICAgICB0aGlzLl9pbmZsYXRlW2tCdWZmZXJzXSA9IFtdO1xuICAgICAgdGhpcy5faW5mbGF0ZS5vbignZXJyb3InLCBpbmZsYXRlT25FcnJvcik7XG4gICAgICB0aGlzLl9pbmZsYXRlLm9uKCdkYXRhJywgaW5mbGF0ZU9uRGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5mbGF0ZVtrQ2FsbGJhY2tdID0gY2FsbGJhY2s7XG5cbiAgICB0aGlzLl9pbmZsYXRlLndyaXRlKGRhdGEpO1xuICAgIGlmIChmaW4pIHRoaXMuX2luZmxhdGUud3JpdGUoVFJBSUxFUik7XG5cbiAgICB0aGlzLl9pbmZsYXRlLmZsdXNoKCgpID0+IHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuX2luZmxhdGVba0Vycm9yXTtcblxuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLl9pbmZsYXRlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX2luZmxhdGUgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBidWZmZXJVdGlsLmNvbmNhdChcbiAgICAgICAgdGhpcy5faW5mbGF0ZVtrQnVmZmVyc10sXG4gICAgICAgIHRoaXMuX2luZmxhdGVba1RvdGFsTGVuZ3RoXVxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuX2luZmxhdGUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICB0aGlzLl9pbmZsYXRlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX2luZmxhdGUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5mbGF0ZVtrVG90YWxMZW5ndGhdID0gMDtcbiAgICAgICAgdGhpcy5faW5mbGF0ZVtrQnVmZmVyc10gPSBbXTtcblxuICAgICAgICBpZiAoZmluICYmIHRoaXMucGFyYW1zW2Ake2VuZHBvaW50fV9ub19jb250ZXh0X3Rha2VvdmVyYF0pIHtcbiAgICAgICAgICB0aGlzLl9pbmZsYXRlLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHJlc3MgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHsoQnVmZmVyfFN0cmluZyl9IGRhdGEgRGF0YSB0byBjb21wcmVzc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpbiBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhpcyBpcyB0aGUgbGFzdCBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFja1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbXByZXNzKGRhdGEsIGZpbiwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuX2lzU2VydmVyID8gJ3NlcnZlcicgOiAnY2xpZW50JztcblxuICAgIGlmICghdGhpcy5fZGVmbGF0ZSkge1xuICAgICAgY29uc3Qga2V5ID0gYCR7ZW5kcG9pbnR9X21heF93aW5kb3dfYml0c2A7XG4gICAgICBjb25zdCB3aW5kb3dCaXRzID1cbiAgICAgICAgdHlwZW9mIHRoaXMucGFyYW1zW2tleV0gIT09ICdudW1iZXInXG4gICAgICAgICAgPyB6bGliLlpfREVGQVVMVF9XSU5ET1dCSVRTXG4gICAgICAgICAgOiB0aGlzLnBhcmFtc1trZXldO1xuXG4gICAgICB0aGlzLl9kZWZsYXRlID0gemxpYi5jcmVhdGVEZWZsYXRlUmF3KHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucy56bGliRGVmbGF0ZU9wdGlvbnMsXG4gICAgICAgIHdpbmRvd0JpdHNcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9kZWZsYXRlW2tUb3RhbExlbmd0aF0gPSAwO1xuICAgICAgdGhpcy5fZGVmbGF0ZVtrQnVmZmVyc10gPSBbXTtcblxuICAgICAgdGhpcy5fZGVmbGF0ZS5vbignZGF0YScsIGRlZmxhdGVPbkRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmxhdGVba0NhbGxiYWNrXSA9IGNhbGxiYWNrO1xuXG4gICAgdGhpcy5fZGVmbGF0ZS53cml0ZShkYXRhKTtcbiAgICB0aGlzLl9kZWZsYXRlLmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNILCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2RlZmxhdGUpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIGRlZmxhdGUgc3RyZWFtIHdhcyBjbG9zZWQgd2hpbGUgZGF0YSB3YXMgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAgICAvL1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYnVmZmVyVXRpbC5jb25jYXQoXG4gICAgICAgIHRoaXMuX2RlZmxhdGVba0J1ZmZlcnNdLFxuICAgICAgICB0aGlzLl9kZWZsYXRlW2tUb3RhbExlbmd0aF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmaW4pIHtcbiAgICAgICAgZGF0YSA9IG5ldyBGYXN0QnVmZmVyKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEubGVuZ3RoIC0gNCk7XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2FsbGVkIGFnYWluIGluXG4gICAgICAvLyBgUGVyTWVzc2FnZURlZmxhdGUjY2xlYW51cCgpYC5cbiAgICAgIC8vXG4gICAgICB0aGlzLl9kZWZsYXRlW2tDYWxsYmFja10gPSBudWxsO1xuXG4gICAgICB0aGlzLl9kZWZsYXRlW2tUb3RhbExlbmd0aF0gPSAwO1xuICAgICAgdGhpcy5fZGVmbGF0ZVtrQnVmZmVyc10gPSBbXTtcblxuICAgICAgaWYgKGZpbiAmJiB0aGlzLnBhcmFtc1tgJHtlbmRwb2ludH1fbm9fY29udGV4dF90YWtlb3ZlcmBdKSB7XG4gICAgICAgIHRoaXMuX2RlZmxhdGUucmVzZXQoKTtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQZXJNZXNzYWdlRGVmbGF0ZTtcblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2YgdGhlIGB6bGliLkRlZmxhdGVSYXdgIHN0cmVhbSBgJ2RhdGEnYCBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgQSBjaHVuayBvZiBkYXRhXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZsYXRlT25EYXRhKGNodW5rKSB7XG4gIHRoaXNba0J1ZmZlcnNdLnB1c2goY2h1bmspO1xuICB0aGlzW2tUb3RhbExlbmd0aF0gKz0gY2h1bmsubGVuZ3RoO1xufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgYHpsaWIuSW5mbGF0ZVJhd2Agc3RyZWFtIGAnZGF0YSdgIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBjaHVuayBBIGNodW5rIG9mIGRhdGFcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluZmxhdGVPbkRhdGEoY2h1bmspIHtcbiAgdGhpc1trVG90YWxMZW5ndGhdICs9IGNodW5rLmxlbmd0aDtcblxuICBpZiAoXG4gICAgdGhpc1trUGVyTWVzc2FnZURlZmxhdGVdLl9tYXhQYXlsb2FkIDwgMSB8fFxuICAgIHRoaXNba1RvdGFsTGVuZ3RoXSA8PSB0aGlzW2tQZXJNZXNzYWdlRGVmbGF0ZV0uX21heFBheWxvYWRcbiAgKSB7XG4gICAgdGhpc1trQnVmZmVyc10ucHVzaChjaHVuayk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpc1trRXJyb3JdID0gbmV3IFJhbmdlRXJyb3IoJ01heCBwYXlsb2FkIHNpemUgZXhjZWVkZWQnKTtcbiAgdGhpc1trRXJyb3JdLmNvZGUgPSAnV1NfRVJSX1VOU1VQUE9SVEVEX01FU1NBR0VfTEVOR1RIJztcbiAgdGhpc1trRXJyb3JdW2tTdGF0dXNDb2RlXSA9IDEwMDk7XG4gIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBpbmZsYXRlT25EYXRhKTtcbiAgdGhpcy5yZXNldCgpO1xufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgYHpsaWIuSW5mbGF0ZVJhd2Agc3RyZWFtIGAnZXJyb3InYCBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnIgVGhlIGVtaXR0ZWQgZXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluZmxhdGVPbkVycm9yKGVycikge1xuICAvL1xuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgYFpsaWIjY2xvc2UoKWAgYXMgdGhlIGhhbmRsZSBpcyBhdXRvbWF0aWNhbGx5XG4gIC8vIGNsb3NlZCB3aGVuIGFuIGVycm9yIGlzIGVtaXR0ZWQuXG4gIC8vXG4gIHRoaXNba1Blck1lc3NhZ2VEZWZsYXRlXS5faW5mbGF0ZSA9IG51bGw7XG4gIGVycltrU3RhdHVzQ29kZV0gPSAxMDA3O1xuICB0aGlzW2tDYWxsYmFja10oZXJyKTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGlzVXRmOCB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7XG5cbmNvbnN0IHsgaGFzQmxvYiB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcblxuLy9cbi8vIEFsbG93ZWQgdG9rZW4gY2hhcmFjdGVyczpcbi8vXG4vLyAnIScsICcjJywgJyQnLCAnJScsICcmJywgJycnLCAnKicsICcrJywgJy0nLFxuLy8gJy4nLCAwLTksIEEtWiwgJ14nLCAnXycsICdgJywgYS16LCAnfCcsICd+J1xuLy9cbi8vIHRva2VuQ2hhcnNbMzJdID09PSAwIC8vICcgJ1xuLy8gdG9rZW5DaGFyc1szM10gPT09IDEgLy8gJyEnXG4vLyB0b2tlbkNoYXJzWzM0XSA9PT0gMCAvLyAnXCInXG4vLyAuLi5cbi8vXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IHRva2VuQ2hhcnMgPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC8vIDAgLSAxNVxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAvLyAxNiAtIDMxXG4gIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIC8vIDMyIC0gNDdcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgLy8gNDggLSA2M1xuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAvLyA2NCAtIDc5XG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIC8vIDgwIC0gOTVcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgLy8gOTYgLSAxMTFcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMCAvLyAxMTIgLSAxMjdcbl07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhdHVzIGNvZGUgaXMgYWxsb3dlZCBpbiBhIGNsb3NlIGZyYW1lLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFRoZSBzdGF0dXMgY29kZVxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBzdGF0dXMgY29kZSBpcyB2YWxpZCwgZWxzZSBgZmFsc2VgXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSAxMDAwICYmXG4gICAgICBjb2RlIDw9IDEwMTQgJiZcbiAgICAgIGNvZGUgIT09IDEwMDQgJiZcbiAgICAgIGNvZGUgIT09IDEwMDUgJiZcbiAgICAgIGNvZGUgIT09IDEwMDYpIHx8XG4gICAgKGNvZGUgPj0gMzAwMCAmJiBjb2RlIDw9IDQ5OTkpXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYnVmZmVyIGNvbnRhaW5zIG9ubHkgY29ycmVjdCBVVEYtOC5cbiAqIFBvcnRlZCBmcm9tIGh0dHBzOi8vd3d3LmNsLmNhbS5hYy51ay8lN0VtZ2syNS91Y3MvdXRmOF9jaGVjay5jIGJ5XG4gKiBNYXJrdXMgS3Vobi5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIFRoZSBidWZmZXIgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgYnVmYCBjb250YWlucyBvbmx5IGNvcnJlY3QgVVRGLTgsIGVsc2UgYGZhbHNlYFxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBfaXNWYWxpZFVURjgoYnVmKSB7XG4gIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGg7XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIGlmICgoYnVmW2ldICYgMHg4MCkgPT09IDApIHtcbiAgICAgIC8vIDB4eHh4eHh4XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmICgoYnVmW2ldICYgMHhlMCkgPT09IDB4YzApIHtcbiAgICAgIC8vIDExMHh4eHh4IDEweHh4eHh4XG4gICAgICBpZiAoXG4gICAgICAgIGkgKyAxID09PSBsZW4gfHxcbiAgICAgICAgKGJ1ZltpICsgMV0gJiAweGMwKSAhPT0gMHg4MCB8fFxuICAgICAgICAoYnVmW2ldICYgMHhmZSkgPT09IDB4YzAgLy8gT3ZlcmxvbmdcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2UgaWYgKChidWZbaV0gJiAweGYwKSA9PT0gMHhlMCkge1xuICAgICAgLy8gMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHhcbiAgICAgIGlmIChcbiAgICAgICAgaSArIDIgPj0gbGVuIHx8XG4gICAgICAgIChidWZbaSArIDFdICYgMHhjMCkgIT09IDB4ODAgfHxcbiAgICAgICAgKGJ1ZltpICsgMl0gJiAweGMwKSAhPT0gMHg4MCB8fFxuICAgICAgICAoYnVmW2ldID09PSAweGUwICYmIChidWZbaSArIDFdICYgMHhlMCkgPT09IDB4ODApIHx8IC8vIE92ZXJsb25nXG4gICAgICAgIChidWZbaV0gPT09IDB4ZWQgJiYgKGJ1ZltpICsgMV0gJiAweGUwKSA9PT0gMHhhMCkgLy8gU3Vycm9nYXRlIChVK0Q4MDAgLSBVK0RGRkYpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpICs9IDM7XG4gICAgfSBlbHNlIGlmICgoYnVmW2ldICYgMHhmOCkgPT09IDB4ZjApIHtcbiAgICAgIC8vIDExMTEweHh4IDEweHh4eHh4IDEweHh4eHh4IDEweHh4eHh4XG4gICAgICBpZiAoXG4gICAgICAgIGkgKyAzID49IGxlbiB8fFxuICAgICAgICAoYnVmW2kgKyAxXSAmIDB4YzApICE9PSAweDgwIHx8XG4gICAgICAgIChidWZbaSArIDJdICYgMHhjMCkgIT09IDB4ODAgfHxcbiAgICAgICAgKGJ1ZltpICsgM10gJiAweGMwKSAhPT0gMHg4MCB8fFxuICAgICAgICAoYnVmW2ldID09PSAweGYwICYmIChidWZbaSArIDFdICYgMHhmMCkgPT09IDB4ODApIHx8IC8vIE92ZXJsb25nXG4gICAgICAgIChidWZbaV0gPT09IDB4ZjQgJiYgYnVmW2kgKyAxXSA+IDB4OGYpIHx8XG4gICAgICAgIGJ1ZltpXSA+IDB4ZjQgLy8gPiBVKzEwRkZGRlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaSArPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgdmFsdWUgaXMgYSBgQmxvYmAuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGBCbG9iYCwgZWxzZSBgZmFsc2VgXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICBoYXNCbG9iICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiB2YWx1ZS5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWx1ZS50eXBlID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiB2YWx1ZS5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiZcbiAgICAodmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Jsb2InIHx8XG4gICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZScpXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Jsb2IsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBpc1ZhbGlkVVRGODogX2lzVmFsaWRVVEY4LFxuICB0b2tlbkNoYXJzXG59O1xuXG5pZiAoaXNVdGY4KSB7XG4gIG1vZHVsZS5leHBvcnRzLmlzVmFsaWRVVEY4ID0gZnVuY3Rpb24gKGJ1Zikge1xuICAgIHJldHVybiBidWYubGVuZ3RoIDwgMjQgPyBfaXNWYWxpZFVURjgoYnVmKSA6IGlzVXRmOChidWYpO1xuICB9O1xufSAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAgKi8gZWxzZSBpZiAoIXByb2Nlc3MuZW52LldTX05PX1VURl84X1ZBTElEQVRFKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgaXNWYWxpZFVURjggPSByZXF1aXJlKCd1dGYtOC12YWxpZGF0ZScpO1xuXG4gICAgbW9kdWxlLmV4cG9ydHMuaXNWYWxpZFVURjggPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICByZXR1cm4gYnVmLmxlbmd0aCA8IDMyID8gX2lzVmFsaWRVVEY4KGJ1ZikgOiBpc1ZhbGlkVVRGOChidWYpO1xuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBDb250aW51ZSByZWdhcmRsZXNzIG9mIHRoZSBlcnJvci5cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuXG5jb25zdCBQZXJNZXNzYWdlRGVmbGF0ZSA9IHJlcXVpcmUoJy4vcGVybWVzc2FnZS1kZWZsYXRlJyk7XG5jb25zdCB7XG4gIEJJTkFSWV9UWVBFUyxcbiAgRU1QVFlfQlVGRkVSLFxuICBrU3RhdHVzQ29kZSxcbiAga1dlYlNvY2tldFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5jb25zdCB7IGNvbmNhdCwgdG9BcnJheUJ1ZmZlciwgdW5tYXNrIH0gPSByZXF1aXJlKCcuL2J1ZmZlci11dGlsJyk7XG5jb25zdCB7IGlzVmFsaWRTdGF0dXNDb2RlLCBpc1ZhbGlkVVRGOCB9ID0gcmVxdWlyZSgnLi92YWxpZGF0aW9uJyk7XG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdO1xuXG5jb25zdCBHRVRfSU5GTyA9IDA7XG5jb25zdCBHRVRfUEFZTE9BRF9MRU5HVEhfMTYgPSAxO1xuY29uc3QgR0VUX1BBWUxPQURfTEVOR1RIXzY0ID0gMjtcbmNvbnN0IEdFVF9NQVNLID0gMztcbmNvbnN0IEdFVF9EQVRBID0gNDtcbmNvbnN0IElORkxBVElORyA9IDU7XG5jb25zdCBERUZFUl9FVkVOVCA9IDY7XG5cbi8qKlxuICogSHlCaSBSZWNlaXZlciBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAZXh0ZW5kcyBXcml0YWJsZVxuICovXG5jbGFzcyBSZWNlaXZlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBSZWNlaXZlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbG93U3luY2hyb25vdXNFdmVudHM9dHJ1ZV0gU3BlY2lmaWVzIHdoZXRoZXJcbiAgICogICAgIGFueSBvZiB0aGUgYCdtZXNzYWdlJ2AsIGAncGluZydgLCBhbmQgYCdwb25nJ2AgZXZlbnRzIGNhbiBiZSBlbWl0dGVkXG4gICAqICAgICBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSB0aWNrXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5iaW5hcnlUeXBlPW5vZGVidWZmZXJdIFRoZSB0eXBlIGZvciBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZXh0ZW5zaW9uc10gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lZ290aWF0ZWRcbiAgICogICAgIGV4dGVuc2lvbnNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5pc1NlcnZlcj1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gb3BlcmF0ZSBpblxuICAgKiAgICAgY2xpZW50IG9yIHNlcnZlciBtb2RlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhQYXlsb2FkPTBdIFRoZSBtYXhpbXVtIGFsbG93ZWQgbWVzc2FnZSBsZW5ndGhcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5za2lwVVRGOFZhbGlkYXRpb249ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIG9yXG4gICAqICAgICBub3QgdG8gc2tpcCBVVEYtOCB2YWxpZGF0aW9uIGZvciB0ZXh0IGFuZCBjbG9zZSBtZXNzYWdlc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2FsbG93U3luY2hyb25vdXNFdmVudHMgPVxuICAgICAgb3B0aW9ucy5hbGxvd1N5bmNocm9ub3VzRXZlbnRzICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBvcHRpb25zLmFsbG93U3luY2hyb25vdXNFdmVudHNcbiAgICAgICAgOiB0cnVlO1xuICAgIHRoaXMuX2JpbmFyeVR5cGUgPSBvcHRpb25zLmJpbmFyeVR5cGUgfHwgQklOQVJZX1RZUEVTWzBdO1xuICAgIHRoaXMuX2V4dGVuc2lvbnMgPSBvcHRpb25zLmV4dGVuc2lvbnMgfHwge307XG4gICAgdGhpcy5faXNTZXJ2ZXIgPSAhIW9wdGlvbnMuaXNTZXJ2ZXI7XG4gICAgdGhpcy5fbWF4UGF5bG9hZCA9IG9wdGlvbnMubWF4UGF5bG9hZCB8IDA7XG4gICAgdGhpcy5fc2tpcFVURjhWYWxpZGF0aW9uID0gISFvcHRpb25zLnNraXBVVEY4VmFsaWRhdGlvbjtcbiAgICB0aGlzW2tXZWJTb2NrZXRdID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5fYnVmZmVyZWRCeXRlcyA9IDA7XG4gICAgdGhpcy5fYnVmZmVycyA9IFtdO1xuXG4gICAgdGhpcy5fY29tcHJlc3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3BheWxvYWRMZW5ndGggPSAwO1xuICAgIHRoaXMuX21hc2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZnJhZ21lbnRlZCA9IDA7XG4gICAgdGhpcy5fbWFza2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZmluID0gZmFsc2U7XG4gICAgdGhpcy5fb3Bjb2RlID0gMDtcblxuICAgIHRoaXMuX3RvdGFsUGF5bG9hZExlbmd0aCA9IDA7XG4gICAgdGhpcy5fbWVzc2FnZUxlbmd0aCA9IDA7XG4gICAgdGhpcy5fZnJhZ21lbnRzID0gW107XG5cbiAgICB0aGlzLl9lcnJvcmVkID0gZmFsc2U7XG4gICAgdGhpcy5fbG9vcCA9IGZhbHNlO1xuICAgIHRoaXMuX3N0YXRlID0gR0VUX0lORk87XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50cyBgV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSgpYC5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rIFRoZSBjaHVuayBvZiBkYXRhIHRvIHdyaXRlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBlbmNvZGluZyBUaGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIGBjaHVua2BcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgaWYgKHRoaXMuX29wY29kZSA9PT0gMHgwOCAmJiB0aGlzLl9zdGF0ZSA9PSBHRVRfSU5GTykgcmV0dXJuIGNiKCk7XG5cbiAgICB0aGlzLl9idWZmZXJlZEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICB0aGlzLl9idWZmZXJzLnB1c2goY2h1bmspO1xuICAgIHRoaXMuc3RhcnRMb29wKGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdW1lcyBgbmAgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG4gVGhlIG51bWJlciBvZiBieXRlcyB0byBjb25zdW1lXG4gICAqIEByZXR1cm4ge0J1ZmZlcn0gVGhlIGNvbnN1bWVkIGJ5dGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdW1lKG4pIHtcbiAgICB0aGlzLl9idWZmZXJlZEJ5dGVzIC09IG47XG5cbiAgICBpZiAobiA9PT0gdGhpcy5fYnVmZmVyc1swXS5sZW5ndGgpIHJldHVybiB0aGlzLl9idWZmZXJzLnNoaWZ0KCk7XG5cbiAgICBpZiAobiA8IHRoaXMuX2J1ZmZlcnNbMF0ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXJzWzBdO1xuICAgICAgdGhpcy5fYnVmZmVyc1swXSA9IG5ldyBGYXN0QnVmZmVyKFxuICAgICAgICBidWYuYnVmZmVyLFxuICAgICAgICBidWYuYnl0ZU9mZnNldCArIG4sXG4gICAgICAgIGJ1Zi5sZW5ndGggLSBuXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gbmV3IEZhc3RCdWZmZXIoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIG4pO1xuICAgIH1cblxuICAgIGNvbnN0IGRzdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2J1ZmZlcnNbMF07XG4gICAgICBjb25zdCBvZmZzZXQgPSBkc3QubGVuZ3RoIC0gbjtcblxuICAgICAgaWYgKG4gPj0gYnVmLmxlbmd0aCkge1xuICAgICAgICBkc3Quc2V0KHRoaXMuX2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRzdC5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIG4pLCBvZmZzZXQpO1xuICAgICAgICB0aGlzLl9idWZmZXJzWzBdID0gbmV3IEZhc3RCdWZmZXIoXG4gICAgICAgICAgYnVmLmJ1ZmZlcixcbiAgICAgICAgICBidWYuYnl0ZU9mZnNldCArIG4sXG4gICAgICAgICAgYnVmLmxlbmd0aCAtIG5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbiAtPSBidWYubGVuZ3RoO1xuICAgIH0gd2hpbGUgKG4gPiAwKTtcblxuICAgIHJldHVybiBkc3Q7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBwYXJzaW5nIGxvb3AuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIENhbGxiYWNrXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGFydExvb3AoY2IpIHtcbiAgICB0aGlzLl9sb29wID0gdHJ1ZTtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSBHRVRfSU5GTzpcbiAgICAgICAgICB0aGlzLmdldEluZm8oY2IpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEdFVF9QQVlMT0FEX0xFTkdUSF8xNjpcbiAgICAgICAgICB0aGlzLmdldFBheWxvYWRMZW5ndGgxNihjYik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgR0VUX1BBWUxPQURfTEVOR1RIXzY0OlxuICAgICAgICAgIHRoaXMuZ2V0UGF5bG9hZExlbmd0aDY0KGNiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBHRVRfTUFTSzpcbiAgICAgICAgICB0aGlzLmdldE1hc2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBHRVRfREFUQTpcbiAgICAgICAgICB0aGlzLmdldERhdGEoY2IpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIElORkxBVElORzpcbiAgICAgICAgY2FzZSBERUZFUl9FVkVOVDpcbiAgICAgICAgICB0aGlzLl9sb29wID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHRoaXMuX2xvb3ApO1xuXG4gICAgaWYgKCF0aGlzLl9lcnJvcmVkKSBjYigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgYSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEluZm8oY2IpIHtcbiAgICBpZiAodGhpcy5fYnVmZmVyZWRCeXRlcyA8IDIpIHtcbiAgICAgIHRoaXMuX2xvb3AgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWYgPSB0aGlzLmNvbnN1bWUoMik7XG5cbiAgICBpZiAoKGJ1ZlswXSAmIDB4MzApICE9PSAweDAwKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgIFJhbmdlRXJyb3IsXG4gICAgICAgICdSU1YyIGFuZCBSU1YzIG11c3QgYmUgY2xlYXInLFxuICAgICAgICB0cnVlLFxuICAgICAgICAxMDAyLFxuICAgICAgICAnV1NfRVJSX1VORVhQRUNURURfUlNWXzJfMydcbiAgICAgICk7XG5cbiAgICAgIGNiKGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wcmVzc2VkID0gKGJ1ZlswXSAmIDB4NDApID09PSAweDQwO1xuXG4gICAgaWYgKGNvbXByZXNzZWQgJiYgIXRoaXMuX2V4dGVuc2lvbnNbUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZV0pIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5jcmVhdGVFcnJvcihcbiAgICAgICAgUmFuZ2VFcnJvcixcbiAgICAgICAgJ1JTVjEgbXVzdCBiZSBjbGVhcicsXG4gICAgICAgIHRydWUsXG4gICAgICAgIDEwMDIsXG4gICAgICAgICdXU19FUlJfVU5FWFBFQ1RFRF9SU1ZfMSdcbiAgICAgICk7XG5cbiAgICAgIGNiKGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9maW4gPSAoYnVmWzBdICYgMHg4MCkgPT09IDB4ODA7XG4gICAgdGhpcy5fb3Bjb2RlID0gYnVmWzBdICYgMHgwZjtcbiAgICB0aGlzLl9wYXlsb2FkTGVuZ3RoID0gYnVmWzFdICYgMHg3ZjtcblxuICAgIGlmICh0aGlzLl9vcGNvZGUgPT09IDB4MDApIHtcbiAgICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5jcmVhdGVFcnJvcihcbiAgICAgICAgICBSYW5nZUVycm9yLFxuICAgICAgICAgICdSU1YxIG11c3QgYmUgY2xlYXInLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgMTAwMixcbiAgICAgICAgICAnV1NfRVJSX1VORVhQRUNURURfUlNWXzEnXG4gICAgICAgICk7XG5cbiAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fZnJhZ21lbnRlZCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgICAgUmFuZ2VFcnJvcixcbiAgICAgICAgICAnaW52YWxpZCBvcGNvZGUgMCcsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAxMDAyLFxuICAgICAgICAgICdXU19FUlJfSU5WQUxJRF9PUENPREUnXG4gICAgICAgICk7XG5cbiAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29wY29kZSA9IHRoaXMuX2ZyYWdtZW50ZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vcGNvZGUgPT09IDB4MDEgfHwgdGhpcy5fb3Bjb2RlID09PSAweDAyKSB7XG4gICAgICBpZiAodGhpcy5fZnJhZ21lbnRlZCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgICAgUmFuZ2VFcnJvcixcbiAgICAgICAgICBgaW52YWxpZCBvcGNvZGUgJHt0aGlzLl9vcGNvZGV9YCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIDEwMDIsXG4gICAgICAgICAgJ1dTX0VSUl9JTlZBTElEX09QQ09ERSdcbiAgICAgICAgKTtcblxuICAgICAgICBjYihlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29tcHJlc3NlZCA9IGNvbXByZXNzZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vcGNvZGUgPiAweDA3ICYmIHRoaXMuX29wY29kZSA8IDB4MGIpIHtcbiAgICAgIGlmICghdGhpcy5fZmluKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5jcmVhdGVFcnJvcihcbiAgICAgICAgICBSYW5nZUVycm9yLFxuICAgICAgICAgICdGSU4gbXVzdCBiZSBzZXQnLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgMTAwMixcbiAgICAgICAgICAnV1NfRVJSX0VYUEVDVEVEX0ZJTidcbiAgICAgICAgKTtcblxuICAgICAgICBjYihlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXByZXNzZWQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKFxuICAgICAgICAgIFJhbmdlRXJyb3IsXG4gICAgICAgICAgJ1JTVjEgbXVzdCBiZSBjbGVhcicsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAxMDAyLFxuICAgICAgICAgICdXU19FUlJfVU5FWFBFQ1RFRF9SU1ZfMSdcbiAgICAgICAgKTtcblxuICAgICAgICBjYihlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9wYXlsb2FkTGVuZ3RoID4gMHg3ZCB8fFxuICAgICAgICAodGhpcy5fb3Bjb2RlID09PSAweDA4ICYmIHRoaXMuX3BheWxvYWRMZW5ndGggPT09IDEpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKFxuICAgICAgICAgIFJhbmdlRXJyb3IsXG4gICAgICAgICAgYGludmFsaWQgcGF5bG9hZCBsZW5ndGggJHt0aGlzLl9wYXlsb2FkTGVuZ3RofWAsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAxMDAyLFxuICAgICAgICAgICdXU19FUlJfSU5WQUxJRF9DT05UUk9MX1BBWUxPQURfTEVOR1RIJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNiKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgIFJhbmdlRXJyb3IsXG4gICAgICAgIGBpbnZhbGlkIG9wY29kZSAke3RoaXMuX29wY29kZX1gLFxuICAgICAgICB0cnVlLFxuICAgICAgICAxMDAyLFxuICAgICAgICAnV1NfRVJSX0lOVkFMSURfT1BDT0RFJ1xuICAgICAgKTtcblxuICAgICAgY2IoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fZmluICYmICF0aGlzLl9mcmFnbWVudGVkKSB0aGlzLl9mcmFnbWVudGVkID0gdGhpcy5fb3Bjb2RlO1xuICAgIHRoaXMuX21hc2tlZCA9IChidWZbMV0gJiAweDgwKSA9PT0gMHg4MDtcblxuICAgIGlmICh0aGlzLl9pc1NlcnZlcikge1xuICAgICAgaWYgKCF0aGlzLl9tYXNrZWQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKFxuICAgICAgICAgIFJhbmdlRXJyb3IsXG4gICAgICAgICAgJ01BU0sgbXVzdCBiZSBzZXQnLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgMTAwMixcbiAgICAgICAgICAnV1NfRVJSX0VYUEVDVEVEX01BU0snXG4gICAgICAgICk7XG5cbiAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9tYXNrZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5jcmVhdGVFcnJvcihcbiAgICAgICAgUmFuZ2VFcnJvcixcbiAgICAgICAgJ01BU0sgbXVzdCBiZSBjbGVhcicsXG4gICAgICAgIHRydWUsXG4gICAgICAgIDEwMDIsXG4gICAgICAgICdXU19FUlJfVU5FWFBFQ1RFRF9NQVNLJ1xuICAgICAgKTtcblxuICAgICAgY2IoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXlsb2FkTGVuZ3RoID09PSAxMjYpIHRoaXMuX3N0YXRlID0gR0VUX1BBWUxPQURfTEVOR1RIXzE2O1xuICAgIGVsc2UgaWYgKHRoaXMuX3BheWxvYWRMZW5ndGggPT09IDEyNykgdGhpcy5fc3RhdGUgPSBHRVRfUEFZTE9BRF9MRU5HVEhfNjQ7XG4gICAgZWxzZSB0aGlzLmhhdmVMZW5ndGgoY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggKDcrMTYpLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiBDYWxsYmFja1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0UGF5bG9hZExlbmd0aDE2KGNiKSB7XG4gICAgaWYgKHRoaXMuX2J1ZmZlcmVkQnl0ZXMgPCAyKSB7XG4gICAgICB0aGlzLl9sb29wID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGF5bG9hZExlbmd0aCA9IHRoaXMuY29uc3VtZSgyKS5yZWFkVUludDE2QkUoMCk7XG4gICAgdGhpcy5oYXZlTGVuZ3RoKGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoICg3KzY0KS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldFBheWxvYWRMZW5ndGg2NChjYikge1xuICAgIGlmICh0aGlzLl9idWZmZXJlZEJ5dGVzIDwgOCkge1xuICAgICAgdGhpcy5fbG9vcCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuY29uc3VtZSg4KTtcbiAgICBjb25zdCBudW0gPSBidWYucmVhZFVJbnQzMkJFKDApO1xuXG4gICAgLy9cbiAgICAvLyBUaGUgbWF4aW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdCBpcyAyXjUzIC0gMS4gQW4gZXJyb3IgaXMgcmV0dXJuZWRcbiAgICAvLyBpZiBwYXlsb2FkIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhpcyBudW1iZXIuXG4gICAgLy9cbiAgICBpZiAobnVtID4gTWF0aC5wb3coMiwgNTMgLSAzMikgLSAxKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgIFJhbmdlRXJyb3IsXG4gICAgICAgICdVbnN1cHBvcnRlZCBXZWJTb2NrZXQgZnJhbWU6IHBheWxvYWQgbGVuZ3RoID4gMl41MyAtIDEnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgMTAwOSxcbiAgICAgICAgJ1dTX0VSUl9VTlNVUFBPUlRFRF9EQVRBX1BBWUxPQURfTEVOR1RIJ1xuICAgICAgKTtcblxuICAgICAgY2IoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BheWxvYWRMZW5ndGggPSBudW0gKiBNYXRoLnBvdygyLCAzMikgKyBidWYucmVhZFVJbnQzMkJFKDQpO1xuICAgIHRoaXMuaGF2ZUxlbmd0aChjYik7XG4gIH1cblxuICAvKipcbiAgICogUGF5bG9hZCBsZW5ndGggaGFzIGJlZW4gcmVhZC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhhdmVMZW5ndGgoY2IpIHtcbiAgICBpZiAodGhpcy5fcGF5bG9hZExlbmd0aCAmJiB0aGlzLl9vcGNvZGUgPCAweDA4KSB7XG4gICAgICB0aGlzLl90b3RhbFBheWxvYWRMZW5ndGggKz0gdGhpcy5fcGF5bG9hZExlbmd0aDtcbiAgICAgIGlmICh0aGlzLl90b3RhbFBheWxvYWRMZW5ndGggPiB0aGlzLl9tYXhQYXlsb2FkICYmIHRoaXMuX21heFBheWxvYWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5jcmVhdGVFcnJvcihcbiAgICAgICAgICBSYW5nZUVycm9yLFxuICAgICAgICAgICdNYXggcGF5bG9hZCBzaXplIGV4Y2VlZGVkJyxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAxMDA5LFxuICAgICAgICAgICdXU19FUlJfVU5TVVBQT1JURURfTUVTU0FHRV9MRU5HVEgnXG4gICAgICAgICk7XG5cbiAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2tlZCkgdGhpcy5fc3RhdGUgPSBHRVRfTUFTSztcbiAgICBlbHNlIHRoaXMuX3N0YXRlID0gR0VUX0RBVEE7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgbWFzayBieXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldE1hc2soKSB7XG4gICAgaWYgKHRoaXMuX2J1ZmZlcmVkQnl0ZXMgPCA0KSB7XG4gICAgICB0aGlzLl9sb29wID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWFzayA9IHRoaXMuY29uc3VtZSg0KTtcbiAgICB0aGlzLl9zdGF0ZSA9IEdFVF9EQVRBO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGRhdGEgYnl0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIENhbGxiYWNrXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXREYXRhKGNiKSB7XG4gICAgbGV0IGRhdGEgPSBFTVBUWV9CVUZGRVI7XG5cbiAgICBpZiAodGhpcy5fcGF5bG9hZExlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkQnl0ZXMgPCB0aGlzLl9wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2xvb3AgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gdGhpcy5jb25zdW1lKHRoaXMuX3BheWxvYWRMZW5ndGgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX21hc2tlZCAmJlxuICAgICAgICAodGhpcy5fbWFza1swXSB8IHRoaXMuX21hc2tbMV0gfCB0aGlzLl9tYXNrWzJdIHwgdGhpcy5fbWFza1szXSkgIT09IDBcbiAgICAgICkge1xuICAgICAgICB1bm1hc2soZGF0YSwgdGhpcy5fbWFzayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wY29kZSA+IDB4MDcpIHtcbiAgICAgIHRoaXMuY29udHJvbE1lc3NhZ2UoZGF0YSwgY2IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb21wcmVzc2VkKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9IElORkxBVElORztcbiAgICAgIHRoaXMuZGVjb21wcmVzcyhkYXRhLCBjYik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoKSB7XG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBtZXNzYWdlIGlzIG5vdCBjb21wcmVzc2VkIHNvIGl0cyBsZW5ndGggaXMgdGhlIHN1bSBvZiB0aGUgcGF5bG9hZFxuICAgICAgLy8gbGVuZ3RoIG9mIGFsbCBmcmFnbWVudHMuXG4gICAgICAvL1xuICAgICAgdGhpcy5fbWVzc2FnZUxlbmd0aCA9IHRoaXMuX3RvdGFsUGF5bG9hZExlbmd0aDtcbiAgICAgIHRoaXMuX2ZyYWdtZW50cy5wdXNoKGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YU1lc3NhZ2UoY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29tcHJlc3NlcyBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBDb21wcmVzc2VkIGRhdGFcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY29tcHJlc3MoZGF0YSwgY2IpIHtcbiAgICBjb25zdCBwZXJNZXNzYWdlRGVmbGF0ZSA9IHRoaXMuX2V4dGVuc2lvbnNbUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZV07XG5cbiAgICBwZXJNZXNzYWdlRGVmbGF0ZS5kZWNvbXByZXNzKGRhdGEsIHRoaXMuX2ZpbiwgKGVyciwgYnVmKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcblxuICAgICAgaWYgKGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUxlbmd0aCArPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fbWVzc2FnZUxlbmd0aCA+IHRoaXMuX21heFBheWxvYWQgJiYgdGhpcy5fbWF4UGF5bG9hZCA+IDApIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgICAgICBSYW5nZUVycm9yLFxuICAgICAgICAgICAgJ01heCBwYXlsb2FkIHNpemUgZXhjZWVkZWQnLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAxMDA5LFxuICAgICAgICAgICAgJ1dTX0VSUl9VTlNVUFBPUlRFRF9NRVNTQUdFX0xFTkdUSCdcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZyYWdtZW50cy5wdXNoKGJ1Zik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YU1lc3NhZ2UoY2IpO1xuICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBHRVRfSU5GTykgdGhpcy5zdGFydExvb3AoY2IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBkYXRhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIENhbGxiYWNrXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkYXRhTWVzc2FnZShjYikge1xuICAgIGlmICghdGhpcy5fZmluKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9IEdFVF9JTkZPO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSB0aGlzLl9tZXNzYWdlTGVuZ3RoO1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHRoaXMuX2ZyYWdtZW50cztcblxuICAgIHRoaXMuX3RvdGFsUGF5bG9hZExlbmd0aCA9IDA7XG4gICAgdGhpcy5fbWVzc2FnZUxlbmd0aCA9IDA7XG4gICAgdGhpcy5fZnJhZ21lbnRlZCA9IDA7XG4gICAgdGhpcy5fZnJhZ21lbnRzID0gW107XG5cbiAgICBpZiAodGhpcy5fb3Bjb2RlID09PSAyKSB7XG4gICAgICBsZXQgZGF0YTtcblxuICAgICAgaWYgKHRoaXMuX2JpbmFyeVR5cGUgPT09ICdub2RlYnVmZmVyJykge1xuICAgICAgICBkYXRhID0gY29uY2F0KGZyYWdtZW50cywgbWVzc2FnZUxlbmd0aCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JpbmFyeVR5cGUgPT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgZGF0YSA9IHRvQXJyYXlCdWZmZXIoY29uY2F0KGZyYWdtZW50cywgbWVzc2FnZUxlbmd0aCkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9iaW5hcnlUeXBlID09PSAnYmxvYicpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCbG9iKGZyYWdtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gZnJhZ21lbnRzO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYWxsb3dTeW5jaHJvbm91c0V2ZW50cykge1xuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBkYXRhLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBHRVRfSU5GTztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gREVGRVJfRVZFTlQ7XG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgZGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5fc3RhdGUgPSBHRVRfSU5GTztcbiAgICAgICAgICB0aGlzLnN0YXJ0TG9vcChjYik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidWYgPSBjb25jYXQoZnJhZ21lbnRzLCBtZXNzYWdlTGVuZ3RoKTtcblxuICAgICAgaWYgKCF0aGlzLl9za2lwVVRGOFZhbGlkYXRpb24gJiYgIWlzVmFsaWRVVEY4KGJ1ZikpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKFxuICAgICAgICAgIEVycm9yLFxuICAgICAgICAgICdpbnZhbGlkIFVURi04IHNlcXVlbmNlJyxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIDEwMDcsXG4gICAgICAgICAgJ1dTX0VSUl9JTlZBTElEX1VURjgnXG4gICAgICAgICk7XG5cbiAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gSU5GTEFUSU5HIHx8IHRoaXMuX2FsbG93U3luY2hyb25vdXNFdmVudHMpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgYnVmLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gR0VUX0lORk87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERFRkVSX0VWRU5UO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIGJ1ZiwgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX3N0YXRlID0gR0VUX0lORk87XG4gICAgICAgICAgdGhpcy5zdGFydExvb3AoY2IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIGNvbnRyb2wgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgRGF0YSB0byBoYW5kbGVcbiAgICogQHJldHVybiB7KEVycm9yfFJhbmdlRXJyb3J8dW5kZWZpbmVkKX0gQSBwb3NzaWJsZSBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29udHJvbE1lc3NhZ2UoZGF0YSwgY2IpIHtcbiAgICBpZiAodGhpcy5fb3Bjb2RlID09PSAweDA4KSB7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5fbG9vcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXQoJ2NvbmNsdWRlJywgMTAwNSwgRU1QVFlfQlVGRkVSKTtcbiAgICAgICAgdGhpcy5lbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKTtcblxuICAgICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKFxuICAgICAgICAgICAgUmFuZ2VFcnJvcixcbiAgICAgICAgICAgIGBpbnZhbGlkIHN0YXR1cyBjb2RlICR7Y29kZX1gLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIDEwMDIsXG4gICAgICAgICAgICAnV1NfRVJSX0lOVkFMSURfQ0xPU0VfQ09ERSdcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBGYXN0QnVmZmVyKFxuICAgICAgICAgIGRhdGEuYnVmZmVyLFxuICAgICAgICAgIGRhdGEuYnl0ZU9mZnNldCArIDIsXG4gICAgICAgICAgZGF0YS5sZW5ndGggLSAyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9za2lwVVRGOFZhbGlkYXRpb24gJiYgIWlzVmFsaWRVVEY4KGJ1ZikpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoXG4gICAgICAgICAgICBFcnJvcixcbiAgICAgICAgICAgICdpbnZhbGlkIFVURi04IHNlcXVlbmNlJyxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAxMDA3LFxuICAgICAgICAgICAgJ1dTX0VSUl9JTlZBTElEX1VURjgnXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNiKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb29wID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1pdCgnY29uY2x1ZGUnLCBjb2RlLCBidWYpO1xuICAgICAgICB0aGlzLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdGF0ZSA9IEdFVF9JTkZPO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hbGxvd1N5bmNocm9ub3VzRXZlbnRzKSB7XG4gICAgICB0aGlzLmVtaXQodGhpcy5fb3Bjb2RlID09PSAweDA5ID8gJ3BpbmcnIDogJ3BvbmcnLCBkYXRhKTtcbiAgICAgIHRoaXMuX3N0YXRlID0gR0VUX0lORk87XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gREVGRVJfRVZFTlQ7XG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5fb3Bjb2RlID09PSAweDA5ID8gJ3BpbmcnIDogJ3BvbmcnLCBkYXRhKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBHRVRfSU5GTztcbiAgICAgICAgdGhpcy5zdGFydExvb3AoY2IpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBlcnJvciBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obmV3OkVycm9yfFJhbmdlRXJyb3IpfSBFcnJvckN0b3IgVGhlIGVycm9yIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJlZml4IFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBhZGQgYSBkZWZhdWx0IHByZWZpeCB0b1xuICAgKiAgICAgYG1lc3NhZ2VgXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBzdGF0dXNDb2RlIFRoZSBzdGF0dXMgY29kZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXJyb3JDb2RlIFRoZSBleHBvc2VkIGVycm9yIGNvZGVcbiAgICogQHJldHVybiB7KEVycm9yfFJhbmdlRXJyb3IpfSBUaGUgZXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUVycm9yKEVycm9yQ3RvciwgbWVzc2FnZSwgcHJlZml4LCBzdGF0dXNDb2RlLCBlcnJvckNvZGUpIHtcbiAgICB0aGlzLl9sb29wID0gZmFsc2U7XG4gICAgdGhpcy5fZXJyb3JlZCA9IHRydWU7XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3JDdG9yKFxuICAgICAgcHJlZml4ID8gYEludmFsaWQgV2ViU29ja2V0IGZyYW1lOiAke21lc3NhZ2V9YCA6IG1lc3NhZ2VcbiAgICApO1xuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzLmNyZWF0ZUVycm9yKTtcbiAgICBlcnIuY29kZSA9IGVycm9yQ29kZTtcbiAgICBlcnJba1N0YXR1c0NvZGVdID0gc3RhdHVzQ29kZTtcbiAgICByZXR1cm4gZXJyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVjZWl2ZXI7XG4iLAogICAgIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwgeyBcInZhcnNJZ25vcmVQYXR0ZXJuXCI6IFwiXkR1cGxleFwiIH1dICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBEdXBsZXggfSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgeyByYW5kb21GaWxsU3luYyB9ID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbmNvbnN0IFBlck1lc3NhZ2VEZWZsYXRlID0gcmVxdWlyZSgnLi9wZXJtZXNzYWdlLWRlZmxhdGUnKTtcbmNvbnN0IHsgRU1QVFlfQlVGRkVSLCBrV2ViU29ja2V0LCBOT09QIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3QgeyBpc0Jsb2IsIGlzVmFsaWRTdGF0dXNDb2RlIH0gPSByZXF1aXJlKCcuL3ZhbGlkYXRpb24nKTtcbmNvbnN0IHsgbWFzazogYXBwbHlNYXNrLCB0b0J1ZmZlciB9ID0gcmVxdWlyZSgnLi9idWZmZXItdXRpbCcpO1xuXG5jb25zdCBrQnl0ZUxlbmd0aCA9IFN5bWJvbCgna0J5dGVMZW5ndGgnKTtcbmNvbnN0IG1hc2tCdWZmZXIgPSBCdWZmZXIuYWxsb2MoNCk7XG5jb25zdCBSQU5ET01fUE9PTF9TSVpFID0gOCAqIDEwMjQ7XG5sZXQgcmFuZG9tUG9vbDtcbmxldCByYW5kb21Qb29sUG9pbnRlciA9IFJBTkRPTV9QT09MX1NJWkU7XG5cbmNvbnN0IERFRkFVTFQgPSAwO1xuY29uc3QgREVGTEFUSU5HID0gMTtcbmNvbnN0IEdFVF9CTE9CX0RBVEEgPSAyO1xuXG4vKipcbiAqIEh5QmkgU2VuZGVyIGltcGxlbWVudGF0aW9uLlxuICovXG5jbGFzcyBTZW5kZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIFNlbmRlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtEdXBsZXh9IHNvY2tldCBUaGUgY29ubmVjdGlvbiBzb2NrZXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtleHRlbnNpb25zXSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbmVnb3RpYXRlZCBleHRlbnNpb25zXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtnZW5lcmF0ZU1hc2tdIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBtYXNraW5nXG4gICAqICAgICBrZXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvY2tldCwgZXh0ZW5zaW9ucywgZ2VuZXJhdGVNYXNrKSB7XG4gICAgdGhpcy5fZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMgfHwge307XG5cbiAgICBpZiAoZ2VuZXJhdGVNYXNrKSB7XG4gICAgICB0aGlzLl9nZW5lcmF0ZU1hc2sgPSBnZW5lcmF0ZU1hc2s7XG4gICAgICB0aGlzLl9tYXNrQnVmZmVyID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIH1cblxuICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcblxuICAgIHRoaXMuX2ZpcnN0RnJhZ21lbnQgPSB0cnVlO1xuICAgIHRoaXMuX2NvbXByZXNzID0gZmFsc2U7XG5cbiAgICB0aGlzLl9idWZmZXJlZEJ5dGVzID0gMDtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgIHRoaXMuX3N0YXRlID0gREVGQVVMVDtcbiAgICB0aGlzLm9uZXJyb3IgPSBOT09QO1xuICAgIHRoaXNba1dlYlNvY2tldF0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRnJhbWVzIGEgcGllY2Ugb2YgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIEh5QmkgV2ViU29ja2V0IHByb3RvY29sLlxuICAgKlxuICAgKiBAcGFyYW0geyhCdWZmZXJ8U3RyaW5nKX0gZGF0YSBUaGUgZGF0YSB0byBmcmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZpbj1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIHNldCB0aGVcbiAgICogICAgIEZJTiBiaXRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZ2VuZXJhdGVNYXNrXSBUaGUgZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGVcbiAgICogICAgIG1hc2tpbmcga2V5XG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWFzaz1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIG1hc2tcbiAgICogICAgIGBkYXRhYFxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gW29wdGlvbnMubWFza0J1ZmZlcl0gVGhlIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIHRoZSBtYXNraW5nXG4gICAqICAgICBrZXlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMub3Bjb2RlIFRoZSBvcGNvZGVcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yZWFkT25seT1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgYGRhdGFgIGNhbiBiZVxuICAgKiAgICAgbW9kaWZpZWRcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yc3YxPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gc2V0IHRoZVxuICAgKiAgICAgUlNWMSBiaXRcbiAgICogQHJldHVybiB7KEJ1ZmZlcnxTdHJpbmcpW119IFRoZSBmcmFtZWQgZGF0YVxuICAgKiBAcHVibGljXG4gICAqL1xuICBzdGF0aWMgZnJhbWUoZGF0YSwgb3B0aW9ucykge1xuICAgIGxldCBtYXNrO1xuICAgIGxldCBtZXJnZSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQgPSAyO1xuICAgIGxldCBza2lwTWFza2luZyA9IGZhbHNlO1xuXG4gICAgaWYgKG9wdGlvbnMubWFzaykge1xuICAgICAgbWFzayA9IG9wdGlvbnMubWFza0J1ZmZlciB8fCBtYXNrQnVmZmVyO1xuXG4gICAgICBpZiAob3B0aW9ucy5nZW5lcmF0ZU1hc2spIHtcbiAgICAgICAgb3B0aW9ucy5nZW5lcmF0ZU1hc2sobWFzayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmFuZG9tUG9vbFBvaW50ZXIgPT09IFJBTkRPTV9QT09MX1NJWkUpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAgKi9cbiAgICAgICAgICBpZiAocmFuZG9tUG9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBsYXppbHkgaW5pdGlhbGl6ZWQgYmVjYXVzZSBzZXJ2ZXItc2VudCBmcmFtZXMgbXVzdCBub3RcbiAgICAgICAgICAgIC8vIGJlIG1hc2tlZCBzbyBpdCBtYXkgbmV2ZXIgYmUgdXNlZC5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICByYW5kb21Qb29sID0gQnVmZmVyLmFsbG9jKFJBTkRPTV9QT09MX1NJWkUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJhbmRvbUZpbGxTeW5jKHJhbmRvbVBvb2wsIDAsIFJBTkRPTV9QT09MX1NJWkUpO1xuICAgICAgICAgIHJhbmRvbVBvb2xQb2ludGVyID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hc2tbMF0gPSByYW5kb21Qb29sW3JhbmRvbVBvb2xQb2ludGVyKytdO1xuICAgICAgICBtYXNrWzFdID0gcmFuZG9tUG9vbFtyYW5kb21Qb29sUG9pbnRlcisrXTtcbiAgICAgICAgbWFza1syXSA9IHJhbmRvbVBvb2xbcmFuZG9tUG9vbFBvaW50ZXIrK107XG4gICAgICAgIG1hc2tbM10gPSByYW5kb21Qb29sW3JhbmRvbVBvb2xQb2ludGVyKytdO1xuICAgICAgfVxuXG4gICAgICBza2lwTWFza2luZyA9IChtYXNrWzBdIHwgbWFza1sxXSB8IG1hc2tbMl0gfCBtYXNrWzNdKSA9PT0gMDtcbiAgICAgIG9mZnNldCA9IDY7XG4gICAgfVxuXG4gICAgbGV0IGRhdGFMZW5ndGg7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoXG4gICAgICAgICghb3B0aW9ucy5tYXNrIHx8IHNraXBNYXNraW5nKSAmJlxuICAgICAgICBvcHRpb25zW2tCeXRlTGVuZ3RoXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgZGF0YUxlbmd0aCA9IG9wdGlvbnNba0J5dGVMZW5ndGhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEpO1xuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICAgIG1lcmdlID0gb3B0aW9ucy5tYXNrICYmIG9wdGlvbnMucmVhZE9ubHkgJiYgIXNraXBNYXNraW5nO1xuICAgIH1cblxuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gZGF0YUxlbmd0aDtcblxuICAgIGlmIChkYXRhTGVuZ3RoID49IDY1NTM2KSB7XG4gICAgICBvZmZzZXQgKz0gODtcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjc7XG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID4gMTI1KSB7XG4gICAgICBvZmZzZXQgKz0gMjtcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjY7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG1lcmdlID8gZGF0YUxlbmd0aCArIG9mZnNldCA6IG9mZnNldCk7XG5cbiAgICB0YXJnZXRbMF0gPSBvcHRpb25zLmZpbiA/IG9wdGlvbnMub3Bjb2RlIHwgMHg4MCA6IG9wdGlvbnMub3Bjb2RlO1xuICAgIGlmIChvcHRpb25zLnJzdjEpIHRhcmdldFswXSB8PSAweDQwO1xuXG4gICAgdGFyZ2V0WzFdID0gcGF5bG9hZExlbmd0aDtcblxuICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgIHRhcmdldC53cml0ZVVJbnQxNkJFKGRhdGFMZW5ndGgsIDIpO1xuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICB0YXJnZXRbMl0gPSB0YXJnZXRbM10gPSAwO1xuICAgICAgdGFyZ2V0LndyaXRlVUludEJFKGRhdGFMZW5ndGgsIDQsIDYpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5tYXNrKSByZXR1cm4gW3RhcmdldCwgZGF0YV07XG5cbiAgICB0YXJnZXRbMV0gfD0gMHg4MDtcbiAgICB0YXJnZXRbb2Zmc2V0IC0gNF0gPSBtYXNrWzBdO1xuICAgIHRhcmdldFtvZmZzZXQgLSAzXSA9IG1hc2tbMV07XG4gICAgdGFyZ2V0W29mZnNldCAtIDJdID0gbWFza1syXTtcbiAgICB0YXJnZXRbb2Zmc2V0IC0gMV0gPSBtYXNrWzNdO1xuXG4gICAgaWYgKHNraXBNYXNraW5nKSByZXR1cm4gW3RhcmdldCwgZGF0YV07XG5cbiAgICBpZiAobWVyZ2UpIHtcbiAgICAgIGFwcGx5TWFzayhkYXRhLCBtYXNrLCB0YXJnZXQsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgICByZXR1cm4gW3RhcmdldF07XG4gICAgfVxuXG4gICAgYXBwbHlNYXNrKGRhdGEsIG1hc2ssIGRhdGEsIDAsIGRhdGFMZW5ndGgpO1xuICAgIHJldHVybiBbdGFyZ2V0LCBkYXRhXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNsb3NlIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHBlZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbY29kZV0gVGhlIHN0YXR1cyBjb2RlIGNvbXBvbmVudCBvZiB0aGUgYm9keVxuICAgKiBAcGFyYW0geyhTdHJpbmd8QnVmZmVyKX0gW2RhdGFdIFRoZSBtZXNzYWdlIGNvbXBvbmVudCBvZiB0aGUgYm9keVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFttYXNrPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gbWFzayB0aGUgbWVzc2FnZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2JdIENhbGxiYWNrXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsb3NlKGNvZGUsIGRhdGEsIG1hc2ssIGNiKSB7XG4gICAgbGV0IGJ1ZjtcblxuICAgIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1ZiA9IEVNUFRZX0JVRkZFUjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2RlICE9PSAnbnVtYmVyJyB8fCAhaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBlcnJvciBjb2RlIG51bWJlcicpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFkYXRhLmxlbmd0aCkge1xuICAgICAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpO1xuICAgICAgYnVmLndyaXRlVUludDE2QkUoY29kZSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpO1xuXG4gICAgICBpZiAobGVuZ3RoID4gMTIzKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgbWVzc2FnZSBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gMTIzIGJ5dGVzJyk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyICsgbGVuZ3RoKTtcbiAgICAgIGJ1Zi53cml0ZVVJbnQxNkJFKGNvZGUsIDApO1xuXG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGJ1Zi53cml0ZShkYXRhLCAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1Zi5zZXQoZGF0YSwgMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIFtrQnl0ZUxlbmd0aF06IGJ1Zi5sZW5ndGgsXG4gICAgICBmaW46IHRydWUsXG4gICAgICBnZW5lcmF0ZU1hc2s6IHRoaXMuX2dlbmVyYXRlTWFzayxcbiAgICAgIG1hc2ssXG4gICAgICBtYXNrQnVmZmVyOiB0aGlzLl9tYXNrQnVmZmVyLFxuICAgICAgb3Bjb2RlOiAweDA4LFxuICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgICAgcnN2MTogZmFsc2VcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSBERUZBVUxUKSB7XG4gICAgICB0aGlzLmVucXVldWUoW3RoaXMuZGlzcGF0Y2gsIGJ1ZiwgZmFsc2UsIG9wdGlvbnMsIGNiXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZEZyYW1lKFNlbmRlci5mcmFtZShidWYsIG9wdGlvbnMpLCBjYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyBtZXNzYWdlIHRvIHRoZSBvdGhlciBwZWVyLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1lc3NhZ2UgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFttYXNrPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gbWFzayBgZGF0YWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NiXSBDYWxsYmFja1xuICAgKiBAcHVibGljXG4gICAqL1xuICBwaW5nKGRhdGEsIG1hc2ssIGNiKSB7XG4gICAgbGV0IGJ5dGVMZW5ndGg7XG4gICAgbGV0IHJlYWRPbmx5O1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgYnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpO1xuICAgICAgcmVhZE9ubHkgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGlzQmxvYihkYXRhKSkge1xuICAgICAgYnl0ZUxlbmd0aCA9IGRhdGEuc2l6ZTtcbiAgICAgIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0b0J1ZmZlcihkYXRhKTtcbiAgICAgIGJ5dGVMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICAgIHJlYWRPbmx5ID0gdG9CdWZmZXIucmVhZE9ubHk7XG4gICAgfVxuXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAxMjUpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgZGF0YSBzaXplIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiAxMjUgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgW2tCeXRlTGVuZ3RoXTogYnl0ZUxlbmd0aCxcbiAgICAgIGZpbjogdHJ1ZSxcbiAgICAgIGdlbmVyYXRlTWFzazogdGhpcy5fZ2VuZXJhdGVNYXNrLFxuICAgICAgbWFzayxcbiAgICAgIG1hc2tCdWZmZXI6IHRoaXMuX21hc2tCdWZmZXIsXG4gICAgICBvcGNvZGU6IDB4MDksXG4gICAgICByZWFkT25seSxcbiAgICAgIHJzdjE6IGZhbHNlXG4gICAgfTtcblxuICAgIGlmIChpc0Jsb2IoZGF0YSkpIHtcbiAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gREVGQVVMVCkge1xuICAgICAgICB0aGlzLmVucXVldWUoW3RoaXMuZ2V0QmxvYkRhdGEsIGRhdGEsIGZhbHNlLCBvcHRpb25zLCBjYl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRCbG9iRGF0YShkYXRhLCBmYWxzZSwgb3B0aW9ucywgY2IpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgIT09IERFRkFVTFQpIHtcbiAgICAgIHRoaXMuZW5xdWV1ZShbdGhpcy5kaXNwYXRjaCwgZGF0YSwgZmFsc2UsIG9wdGlvbnMsIGNiXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZEZyYW1lKFNlbmRlci5mcmFtZShkYXRhLCBvcHRpb25zKSwgY2IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBvbmcgbWVzc2FnZSB0byB0aGUgb3RoZXIgcGVlci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXNzYWdlIHRvIHNlbmRcbiAgICogQHBhcmFtIHtCb29sZWFufSBbbWFzaz1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIG1hc2sgYGRhdGFgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYl0gQ2FsbGJhY2tcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcG9uZyhkYXRhLCBtYXNrLCBjYikge1xuICAgIGxldCBieXRlTGVuZ3RoO1xuICAgIGxldCByZWFkT25seTtcblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKTtcbiAgICAgIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChpc0Jsb2IoZGF0YSkpIHtcbiAgICAgIGJ5dGVMZW5ndGggPSBkYXRhLnNpemU7XG4gICAgICByZWFkT25seSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdG9CdWZmZXIoZGF0YSk7XG4gICAgICBieXRlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICByZWFkT25seSA9IHRvQnVmZmVyLnJlYWRPbmx5O1xuICAgIH1cblxuICAgIGlmIChieXRlTGVuZ3RoID4gMTI1KSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIGRhdGEgc2l6ZSBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gMTI1IGJ5dGVzJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIFtrQnl0ZUxlbmd0aF06IGJ5dGVMZW5ndGgsXG4gICAgICBmaW46IHRydWUsXG4gICAgICBnZW5lcmF0ZU1hc2s6IHRoaXMuX2dlbmVyYXRlTWFzayxcbiAgICAgIG1hc2ssXG4gICAgICBtYXNrQnVmZmVyOiB0aGlzLl9tYXNrQnVmZmVyLFxuICAgICAgb3Bjb2RlOiAweDBhLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByc3YxOiBmYWxzZVxuICAgIH07XG5cbiAgICBpZiAoaXNCbG9iKGRhdGEpKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGUgIT09IERFRkFVTFQpIHtcbiAgICAgICAgdGhpcy5lbnF1ZXVlKFt0aGlzLmdldEJsb2JEYXRhLCBkYXRhLCBmYWxzZSwgb3B0aW9ucywgY2JdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0QmxvYkRhdGEoZGF0YSwgZmFsc2UsIG9wdGlvbnMsIGNiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlICE9PSBERUZBVUxUKSB7XG4gICAgICB0aGlzLmVucXVldWUoW3RoaXMuZGlzcGF0Y2gsIGRhdGEsIGZhbHNlLCBvcHRpb25zLCBjYl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmRGcmFtZShTZW5kZXIuZnJhbWUoZGF0YSwgb3B0aW9ucyksIGNiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBkYXRhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHBlZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWVzc2FnZSB0byBzZW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYmluYXJ5PWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBgZGF0YWAgaXMgYmluYXJ5XG4gICAqICAgICBvciB0ZXh0XG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuY29tcHJlc3M9ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0b1xuICAgKiAgICAgY29tcHJlc3MgYGRhdGFgXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZmluPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciB0aGUgZnJhZ21lbnQgaXMgdGhlXG4gICAqICAgICBsYXN0IG9uZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1hc2s9ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBtYXNrXG4gICAqICAgICBgZGF0YWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NiXSBDYWxsYmFja1xuICAgKiBAcHVibGljXG4gICAqL1xuICBzZW5kKGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgY29uc3QgcGVyTWVzc2FnZURlZmxhdGUgPSB0aGlzLl9leHRlbnNpb25zW1Blck1lc3NhZ2VEZWZsYXRlLmV4dGVuc2lvbk5hbWVdO1xuICAgIGxldCBvcGNvZGUgPSBvcHRpb25zLmJpbmFyeSA/IDIgOiAxO1xuICAgIGxldCByc3YxID0gb3B0aW9ucy5jb21wcmVzcztcblxuICAgIGxldCBieXRlTGVuZ3RoO1xuICAgIGxldCByZWFkT25seTtcblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKTtcbiAgICAgIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChpc0Jsb2IoZGF0YSkpIHtcbiAgICAgIGJ5dGVMZW5ndGggPSBkYXRhLnNpemU7XG4gICAgICByZWFkT25seSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdG9CdWZmZXIoZGF0YSk7XG4gICAgICBieXRlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICByZWFkT25seSA9IHRvQnVmZmVyLnJlYWRPbmx5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9maXJzdEZyYWdtZW50KSB7XG4gICAgICB0aGlzLl9maXJzdEZyYWdtZW50ID0gZmFsc2U7XG4gICAgICBpZiAoXG4gICAgICAgIHJzdjEgJiZcbiAgICAgICAgcGVyTWVzc2FnZURlZmxhdGUgJiZcbiAgICAgICAgcGVyTWVzc2FnZURlZmxhdGUucGFyYW1zW1xuICAgICAgICAgIHBlck1lc3NhZ2VEZWZsYXRlLl9pc1NlcnZlclxuICAgICAgICAgICAgPyAnc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXInXG4gICAgICAgICAgICA6ICdjbGllbnRfbm9fY29udGV4dF90YWtlb3ZlcidcbiAgICAgICAgXVxuICAgICAgKSB7XG4gICAgICAgIHJzdjEgPSBieXRlTGVuZ3RoID49IHBlck1lc3NhZ2VEZWZsYXRlLl90aHJlc2hvbGQ7XG4gICAgICB9XG4gICAgICB0aGlzLl9jb21wcmVzcyA9IHJzdjE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJzdjEgPSBmYWxzZTtcbiAgICAgIG9wY29kZSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZmluKSB0aGlzLl9maXJzdEZyYWdtZW50ID0gdHJ1ZTtcblxuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICBba0J5dGVMZW5ndGhdOiBieXRlTGVuZ3RoLFxuICAgICAgZmluOiBvcHRpb25zLmZpbixcbiAgICAgIGdlbmVyYXRlTWFzazogdGhpcy5fZ2VuZXJhdGVNYXNrLFxuICAgICAgbWFzazogb3B0aW9ucy5tYXNrLFxuICAgICAgbWFza0J1ZmZlcjogdGhpcy5fbWFza0J1ZmZlcixcbiAgICAgIG9wY29kZSxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcnN2MVxuICAgIH07XG5cbiAgICBpZiAoaXNCbG9iKGRhdGEpKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGUgIT09IERFRkFVTFQpIHtcbiAgICAgICAgdGhpcy5lbnF1ZXVlKFt0aGlzLmdldEJsb2JEYXRhLCBkYXRhLCB0aGlzLl9jb21wcmVzcywgb3B0cywgY2JdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0QmxvYkRhdGEoZGF0YSwgdGhpcy5fY29tcHJlc3MsIG9wdHMsIGNiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlICE9PSBERUZBVUxUKSB7XG4gICAgICB0aGlzLmVucXVldWUoW3RoaXMuZGlzcGF0Y2gsIGRhdGEsIHRoaXMuX2NvbXByZXNzLCBvcHRzLCBjYl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKGRhdGEsIHRoaXMuX2NvbXByZXNzLCBvcHRzLCBjYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNvbnRlbnRzIG9mIGEgYmxvYiBhcyBiaW5hcnkgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtCbG9ifSBibG9iIFRoZSBibG9iXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2NvbXByZXNzPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gY29tcHJlc3NcbiAgICogICAgIHRoZSBkYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZmluPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gc2V0IHRoZVxuICAgKiAgICAgRklOIGJpdFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZW5lcmF0ZU1hc2tdIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZVxuICAgKiAgICAgbWFza2luZyBrZXlcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tYXNrPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gbWFza1xuICAgKiAgICAgYGRhdGFgXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBbb3B0aW9ucy5tYXNrQnVmZmVyXSBUaGUgYnVmZmVyIHVzZWQgdG8gc3RvcmUgdGhlIG1hc2tpbmdcbiAgICogICAgIGtleVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0aW9ucy5vcGNvZGUgVGhlIG9wY29kZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJlYWRPbmx5PWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBgZGF0YWAgY2FuIGJlXG4gICAqICAgICBtb2RpZmllZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJzdjE9ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBzZXQgdGhlXG4gICAqICAgICBSU1YxIGJpdFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2JdIENhbGxiYWNrXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRCbG9iRGF0YShibG9iLCBjb21wcmVzcywgb3B0aW9ucywgY2IpIHtcbiAgICB0aGlzLl9idWZmZXJlZEJ5dGVzICs9IG9wdGlvbnNba0J5dGVMZW5ndGhdO1xuICAgIHRoaXMuX3N0YXRlID0gR0VUX0JMT0JfREFUQTtcblxuICAgIGJsb2JcbiAgICAgIC5hcnJheUJ1ZmZlcigpXG4gICAgICAudGhlbigoYXJyYXlCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3NvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnVGhlIHNvY2tldCB3YXMgY2xvc2VkIHdoaWxlIHRoZSBibG9iIHdhcyBiZWluZyByZWFkJ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGBjYWxsQ2FsbGJhY2tzYCBpcyBjYWxsZWQgaW4gdGhlIG5leHQgdGljayB0byBlbnN1cmUgdGhhdCBlcnJvcnNcbiAgICAgICAgICAvLyB0aGF0IG1pZ2h0IGJlIHRocm93biBpbiB0aGUgY2FsbGJhY2tzIGJlaGF2ZSBsaWtlIGVycm9ycyB0aHJvd25cbiAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBwcm9taXNlIGNoYWluLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsQ2FsbGJhY2tzLCB0aGlzLCBlcnIsIGNiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9idWZmZXJlZEJ5dGVzIC09IG9wdGlvbnNba0J5dGVMZW5ndGhdO1xuICAgICAgICBjb25zdCBkYXRhID0gdG9CdWZmZXIoYXJyYXlCdWZmZXIpO1xuXG4gICAgICAgIGlmICghY29tcHJlc3MpIHtcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IERFRkFVTFQ7XG4gICAgICAgICAgdGhpcy5zZW5kRnJhbWUoU2VuZGVyLmZyYW1lKGRhdGEsIG9wdGlvbnMpLCBjYik7XG4gICAgICAgICAgdGhpcy5kZXF1ZXVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChkYXRhLCBjb21wcmVzcywgb3B0aW9ucywgY2IpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYG9uRXJyb3JgIGlzIGNhbGxlZCBpbiB0aGUgbmV4dCB0aWNrIGZvciB0aGUgc2FtZSByZWFzb24gdGhhdFxuICAgICAgICAvLyBgY2FsbENhbGxiYWNrc2AgYWJvdmUgaXMuXG4gICAgICAgIC8vXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2sob25FcnJvciwgdGhpcywgZXJyLCBjYik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHsoQnVmZmVyfFN0cmluZyl9IGRhdGEgVGhlIG1lc3NhZ2UgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtjb21wcmVzcz1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNvbXByZXNzXG4gICAqICAgICBgZGF0YWBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5maW49ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBzZXQgdGhlXG4gICAqICAgICBGSU4gYml0XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmdlbmVyYXRlTWFza10gVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhlXG4gICAqICAgICBtYXNraW5nIGtleVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1hc2s9ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBtYXNrXG4gICAqICAgICBgZGF0YWBcbiAgICogQHBhcmFtIHtCdWZmZXJ9IFtvcHRpb25zLm1hc2tCdWZmZXJdIFRoZSBidWZmZXIgdXNlZCB0byBzdG9yZSB0aGUgbWFza2luZ1xuICAgKiAgICAga2V5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLm9wY29kZSBUaGUgb3Bjb2RlXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmVhZE9ubHk9ZmFsc2VdIFNwZWNpZmllcyB3aGV0aGVyIGBkYXRhYCBjYW4gYmVcbiAgICogICAgIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucnN2MT1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIHNldCB0aGVcbiAgICogICAgIFJTVjEgYml0XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYl0gQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRpc3BhdGNoKGRhdGEsIGNvbXByZXNzLCBvcHRpb25zLCBjYikge1xuICAgIGlmICghY29tcHJlc3MpIHtcbiAgICAgIHRoaXMuc2VuZEZyYW1lKFNlbmRlci5mcmFtZShkYXRhLCBvcHRpb25zKSwgY2IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBlck1lc3NhZ2VEZWZsYXRlID0gdGhpcy5fZXh0ZW5zaW9uc1tQZXJNZXNzYWdlRGVmbGF0ZS5leHRlbnNpb25OYW1lXTtcblxuICAgIHRoaXMuX2J1ZmZlcmVkQnl0ZXMgKz0gb3B0aW9uc1trQnl0ZUxlbmd0aF07XG4gICAgdGhpcy5fc3RhdGUgPSBERUZMQVRJTkc7XG4gICAgcGVyTWVzc2FnZURlZmxhdGUuY29tcHJlc3MoZGF0YSwgb3B0aW9ucy5maW4sIChfLCBidWYpID0+IHtcbiAgICAgIGlmICh0aGlzLl9zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAnVGhlIHNvY2tldCB3YXMgY2xvc2VkIHdoaWxlIGRhdGEgd2FzIGJlaW5nIGNvbXByZXNzZWQnXG4gICAgICAgICk7XG5cbiAgICAgICAgY2FsbENhbGxiYWNrcyh0aGlzLCBlcnIsIGNiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9idWZmZXJlZEJ5dGVzIC09IG9wdGlvbnNba0J5dGVMZW5ndGhdO1xuICAgICAgdGhpcy5fc3RhdGUgPSBERUZBVUxUO1xuICAgICAgb3B0aW9ucy5yZWFkT25seSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZW5kRnJhbWUoU2VuZGVyLmZyYW1lKGJ1Ziwgb3B0aW9ucyksIGNiKTtcbiAgICAgIHRoaXMuZGVxdWV1ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHF1ZXVlZCBzZW5kIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXF1ZXVlKCkge1xuICAgIHdoaWxlICh0aGlzLl9zdGF0ZSA9PT0gREVGQVVMVCAmJiB0aGlzLl9xdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgIHRoaXMuX2J1ZmZlcmVkQnl0ZXMgLT0gcGFyYW1zWzNdW2tCeXRlTGVuZ3RoXTtcbiAgICAgIFJlZmxlY3QuYXBwbHkocGFyYW1zWzBdLCB0aGlzLCBwYXJhbXMuc2xpY2UoMSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIHNlbmQgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgU2VuZCBvcGVyYXRpb24gcGFyYW1ldGVycy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVucXVldWUocGFyYW1zKSB7XG4gICAgdGhpcy5fYnVmZmVyZWRCeXRlcyArPSBwYXJhbXNbM11ba0J5dGVMZW5ndGhdO1xuICAgIHRoaXMuX3F1ZXVlLnB1c2gocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGZyYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcltdfSBsaXN0IFRoZSBmcmFtZSB0byBzZW5kXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYl0gQ2FsbGJhY2tcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRGcmFtZShsaXN0LCBjYikge1xuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5fc29ja2V0LmNvcmsoKTtcbiAgICAgIHRoaXMuX3NvY2tldC53cml0ZShsaXN0WzBdKTtcbiAgICAgIHRoaXMuX3NvY2tldC53cml0ZShsaXN0WzFdLCBjYik7XG4gICAgICB0aGlzLl9zb2NrZXQudW5jb3JrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NvY2tldC53cml0ZShsaXN0WzBdLCBjYik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VuZGVyO1xuXG4vKipcbiAqIENhbGxzIHF1ZXVlZCBjYWxsYmFja3Mgd2l0aCBhbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0ge1NlbmRlcn0gc2VuZGVyIFRoZSBgU2VuZGVyYCBpbnN0YW5jZVxuICogQHBhcmFtIHtFcnJvcn0gZXJyIFRoZSBlcnJvciB0byBjYWxsIHRoZSBjYWxsYmFja3Mgd2l0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NiXSBUaGUgZmlyc3QgY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGxDYWxsYmFja3Moc2VuZGVyLCBlcnIsIGNiKSB7XG4gIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIGNiKGVycik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZW5kZXIuX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc2VuZGVyLl9xdWV1ZVtpXTtcbiAgICBjb25zdCBjYWxsYmFjayA9IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSBjYWxsYmFjayhlcnIpO1xuICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIGBTZW5kZXJgIGVycm9yLlxuICpcbiAqIEBwYXJhbSB7U2VuZGVyfSBzZW5kZXIgVGhlIGBTZW5kZXJgIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnIgVGhlIGVycm9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2JdIFRoZSBmaXJzdCBwZW5kaW5nIGNhbGxiYWNrXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBvbkVycm9yKHNlbmRlciwgZXJyLCBjYikge1xuICBjYWxsQ2FsbGJhY2tzKHNlbmRlciwgZXJyLCBjYik7XG4gIHNlbmRlci5vbmVycm9yKGVycik7XG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBrRm9yT25FdmVudEF0dHJpYnV0ZSwga0xpc3RlbmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5jb25zdCBrQ29kZSA9IFN5bWJvbCgna0NvZGUnKTtcbmNvbnN0IGtEYXRhID0gU3ltYm9sKCdrRGF0YScpO1xuY29uc3Qga0Vycm9yID0gU3ltYm9sKCdrRXJyb3InKTtcbmNvbnN0IGtNZXNzYWdlID0gU3ltYm9sKCdrTWVzc2FnZScpO1xuY29uc3Qga1JlYXNvbiA9IFN5bWJvbCgna1JlYXNvbicpO1xuY29uc3Qga1RhcmdldCA9IFN5bWJvbCgna1RhcmdldCcpO1xuY29uc3Qga1R5cGUgPSBTeW1ib2woJ2tUeXBlJyk7XG5jb25zdCBrV2FzQ2xlYW4gPSBTeW1ib2woJ2tXYXNDbGVhbicpO1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhbiBldmVudC5cbiAqL1xuY2xhc3MgRXZlbnQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGBFdmVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBgdHlwZWAgYXJndW1lbnQgaXMgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgY29uc3RydWN0b3IodHlwZSkge1xuICAgIHRoaXNba1RhcmdldF0gPSBudWxsO1xuICAgIHRoaXNba1R5cGVdID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Kn1cbiAgICovXG4gIGdldCB0YXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNba1RhcmdldF07XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzW2tUeXBlXTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCAndGFyZ2V0JywgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgJ3R5cGUnLCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgY2xvc2UgZXZlbnQuXG4gKlxuICogQGV4dGVuZHMgRXZlbnRcbiAqL1xuY2xhc3MgQ2xvc2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBgQ2xvc2VFdmVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEEgZGljdGlvbmFyeSBvYmplY3QgdGhhdCBhbGxvd3MgZm9yIHNldHRpbmdcbiAgICogICAgIGF0dHJpYnV0ZXMgdmlhIG9iamVjdCBtZW1iZXJzIG9mIHRoZSBzYW1lIG5hbWVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmNvZGU9MF0gVGhlIHN0YXR1cyBjb2RlIGV4cGxhaW5pbmcgd2h5IHRoZVxuICAgKiAgICAgY29ubmVjdGlvbiB3YXMgY2xvc2VkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yZWFzb249JyddIEEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGV4cGxhaW5pbmcgd2h5XG4gICAqICAgICB0aGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMud2FzQ2xlYW49ZmFsc2VdIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGVcbiAgICogICAgIGNvbm5lY3Rpb24gd2FzIGNsZWFubHkgY2xvc2VkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXNba0NvZGVdID0gb3B0aW9ucy5jb2RlID09PSB1bmRlZmluZWQgPyAwIDogb3B0aW9ucy5jb2RlO1xuICAgIHRoaXNba1JlYXNvbl0gPSBvcHRpb25zLnJlYXNvbiA9PT0gdW5kZWZpbmVkID8gJycgOiBvcHRpb25zLnJlYXNvbjtcbiAgICB0aGlzW2tXYXNDbGVhbl0gPSBvcHRpb25zLndhc0NsZWFuID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMud2FzQ2xlYW47XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge051bWJlcn1cbiAgICovXG4gIGdldCBjb2RlKCkge1xuICAgIHJldHVybiB0aGlzW2tDb2RlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IHJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpc1trUmVhc29uXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICovXG4gIGdldCB3YXNDbGVhbigpIHtcbiAgICByZXR1cm4gdGhpc1trV2FzQ2xlYW5dO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDbG9zZUV2ZW50LnByb3RvdHlwZSwgJ2NvZGUnLCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xvc2VFdmVudC5wcm90b3R5cGUsICdyZWFzb24nLCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xvc2VFdmVudC5wcm90b3R5cGUsICd3YXNDbGVhbicsIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgYW4gZXJyb3IgZXZlbnQuXG4gKlxuICogQGV4dGVuZHMgRXZlbnRcbiAqL1xuY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBgRXJyb3JFdmVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEEgZGljdGlvbmFyeSBvYmplY3QgdGhhdCBhbGxvd3MgZm9yIHNldHRpbmdcbiAgICogICAgIGF0dHJpYnV0ZXMgdmlhIG9iamVjdCBtZW1iZXJzIG9mIHRoZSBzYW1lIG5hbWVcbiAgICogQHBhcmFtIHsqfSBbb3B0aW9ucy5lcnJvcj1udWxsXSBUaGUgZXJyb3IgdGhhdCBnZW5lcmF0ZWQgdGhpcyBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubWVzc2FnZT0nJ10gVGhlIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpc1trRXJyb3JdID0gb3B0aW9ucy5lcnJvciA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG9wdGlvbnMuZXJyb3I7XG4gICAgdGhpc1trTWVzc2FnZV0gPSBvcHRpb25zLm1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/ICcnIDogb3B0aW9ucy5tZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHsqfVxuICAgKi9cbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiB0aGlzW2tFcnJvcl07XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIGdldCBtZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzW2tNZXNzYWdlXTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXJyb3JFdmVudC5wcm90b3R5cGUsICdlcnJvcicsIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckV2ZW50LnByb3RvdHlwZSwgJ21lc3NhZ2UnLCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgbWVzc2FnZSBldmVudC5cbiAqXG4gKiBAZXh0ZW5kcyBFdmVudFxuICovXG5jbGFzcyBNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYE1lc3NhZ2VFdmVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEEgZGljdGlvbmFyeSBvYmplY3QgdGhhdCBhbGxvd3MgZm9yIHNldHRpbmdcbiAgICogICAgIGF0dHJpYnV0ZXMgdmlhIG9iamVjdCBtZW1iZXJzIG9mIHRoZSBzYW1lIG5hbWVcbiAgICogQHBhcmFtIHsqfSBbb3B0aW9ucy5kYXRhPW51bGxdIFRoZSBtZXNzYWdlIGNvbnRlbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpc1trRGF0YV0gPSBvcHRpb25zLmRhdGEgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvcHRpb25zLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUgeyp9XG4gICAqL1xuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpc1trRGF0YV07XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsICdkYXRhJywgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vKipcbiAqIFRoaXMgcHJvdmlkZXMgbWV0aG9kcyBmb3IgZW11bGF0aW5nIHRoZSBgRXZlbnRUYXJnZXRgIGludGVyZmFjZS4gSXQncyBub3RcbiAqIG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHkuXG4gKlxuICogQG1peGluXG4gKi9cbmNvbnN0IEV2ZW50VGFyZ2V0ID0ge1xuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufE9iamVjdCl9IGhhbmRsZXIgVGhlIGxpc3RlbmVyIHRvIGFkZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEFuIG9wdGlvbnMgb2JqZWN0IHNwZWNpZmllcyBjaGFyYWN0ZXJpc3RpY3MgYWJvdXRcbiAgICogICAgIHRoZSBldmVudCBsaXN0ZW5lclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm9uY2U9ZmFsc2VdIEEgYEJvb2xlYW5gIGluZGljYXRpbmcgdGhhdCB0aGVcbiAgICogICAgIGxpc3RlbmVyIHNob3VsZCBiZSBpbnZva2VkIGF0IG1vc3Qgb25jZSBhZnRlciBiZWluZyBhZGRlZC4gSWYgYHRydWVgLFxuICAgKiAgICAgdGhlIGxpc3RlbmVyIHdvdWxkIGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB3aGVuIGludm9rZWQuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycyh0eXBlKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhb3B0aW9uc1trRm9yT25FdmVudEF0dHJpYnV0ZV0gJiZcbiAgICAgICAgbGlzdGVuZXJba0xpc3RlbmVyXSA9PT0gaGFuZGxlciAmJlxuICAgICAgICAhbGlzdGVuZXJba0Zvck9uRXZlbnRBdHRyaWJ1dGVdXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB3cmFwcGVyO1xuXG4gICAgaWYgKHR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgd3JhcHBlciA9IGZ1bmN0aW9uIG9uTWVzc2FnZShkYXRhLCBpc0JpbmFyeSkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNZXNzYWdlRXZlbnQoJ21lc3NhZ2UnLCB7XG4gICAgICAgICAgZGF0YTogaXNCaW5hcnkgPyBkYXRhIDogZGF0YS50b1N0cmluZygpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50W2tUYXJnZXRdID0gdGhpcztcbiAgICAgICAgY2FsbExpc3RlbmVyKGhhbmRsZXIsIHRoaXMsIGV2ZW50KTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2xvc2UnKSB7XG4gICAgICB3cmFwcGVyID0gZnVuY3Rpb24gb25DbG9zZShjb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IENsb3NlRXZlbnQoJ2Nsb3NlJywge1xuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgcmVhc29uOiBtZXNzYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgd2FzQ2xlYW46IHRoaXMuX2Nsb3NlRnJhbWVSZWNlaXZlZCAmJiB0aGlzLl9jbG9zZUZyYW1lU2VudFxuICAgICAgICB9KTtcblxuICAgICAgICBldmVudFtrVGFyZ2V0XSA9IHRoaXM7XG4gICAgICAgIGNhbGxMaXN0ZW5lcihoYW5kbGVyLCB0aGlzLCBldmVudCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgd3JhcHBlciA9IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXJyb3JFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZVxuICAgICAgICB9KTtcblxuICAgICAgICBldmVudFtrVGFyZ2V0XSA9IHRoaXM7XG4gICAgICAgIGNhbGxMaXN0ZW5lcihoYW5kbGVyLCB0aGlzLCBldmVudCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wZW4nKSB7XG4gICAgICB3cmFwcGVyID0gZnVuY3Rpb24gb25PcGVuKCkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnb3BlbicpO1xuXG4gICAgICAgIGV2ZW50W2tUYXJnZXRdID0gdGhpcztcbiAgICAgICAgY2FsbExpc3RlbmVyKGhhbmRsZXIsIHRoaXMsIGV2ZW50KTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3cmFwcGVyW2tGb3JPbkV2ZW50QXR0cmlidXRlXSA9ICEhb3B0aW9uc1trRm9yT25FdmVudEF0dHJpYnV0ZV07XG4gICAgd3JhcHBlcltrTGlzdGVuZXJdID0gaGFuZGxlcjtcblxuICAgIGlmIChvcHRpb25zLm9uY2UpIHtcbiAgICAgIHRoaXMub25jZSh0eXBlLCB3cmFwcGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbih0eXBlLCB3cmFwcGVyKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBldmVudCB0eXBlIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnxPYmplY3QpfSBoYW5kbGVyIFRoZSBsaXN0ZW5lciB0byByZW1vdmVcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyKSB7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycyh0eXBlKSkge1xuICAgICAgaWYgKGxpc3RlbmVyW2tMaXN0ZW5lcl0gPT09IGhhbmRsZXIgJiYgIWxpc3RlbmVyW2tGb3JPbkV2ZW50QXR0cmlidXRlXSkge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgRXZlbnQsXG4gIEV2ZW50VGFyZ2V0LFxuICBNZXNzYWdlRXZlbnRcbn07XG5cbi8qKlxuICogQ2FsbCBhbiBldmVudCBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7KEZ1bmN0aW9ufE9iamVjdCl9IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBjYWxsXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIHZhbHVlIHRvIHVzZSBhcyBgdGhpc2BgIHdoZW4gY2FsbGluZyB0aGUgbGlzdGVuZXJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBwYXNzIHRvIHRoZSBsaXN0ZW5lclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsbExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzQXJnLCBldmVudCkge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyID09PSAnb2JqZWN0JyAmJiBsaXN0ZW5lci5oYW5kbGVFdmVudCkge1xuICAgIGxpc3RlbmVyLmhhbmRsZUV2ZW50LmNhbGwobGlzdGVuZXIsIGV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0ZW5lci5jYWxsKHRoaXNBcmcsIGV2ZW50KTtcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgdG9rZW5DaGFycyB9ID0gcmVxdWlyZSgnLi92YWxpZGF0aW9uJyk7XG5cbi8qKlxuICogQWRkcyBhbiBvZmZlciB0byB0aGUgbWFwIG9mIGV4dGVuc2lvbiBvZmZlcnMgb3IgYSBwYXJhbWV0ZXIgdG8gdGhlIG1hcCBvZlxuICogcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdCBUaGUgbWFwIG9mIGV4dGVuc2lvbiBvZmZlcnMgb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIGV4dGVuc2lvbiBvciBwYXJhbWV0ZXIgbmFtZVxuICogQHBhcmFtIHsoT2JqZWN0fEJvb2xlYW58U3RyaW5nKX0gZWxlbSBUaGUgZXh0ZW5zaW9uIHBhcmFtZXRlcnMgb3IgdGhlXG4gKiAgICAgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwdXNoKGRlc3QsIG5hbWUsIGVsZW0pIHtcbiAgaWYgKGRlc3RbbmFtZV0gPT09IHVuZGVmaW5lZCkgZGVzdFtuYW1lXSA9IFtlbGVtXTtcbiAgZWxzZSBkZXN0W25hbWVdLnB1c2goZWxlbSk7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCBoZWFkZXIgaW50byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlciBUaGUgZmllbGQgdmFsdWUgb2YgdGhlIGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcGFyc2VkIG9iamVjdFxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBwYXJzZShoZWFkZXIpIHtcbiAgY29uc3Qgb2ZmZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGxldCBtdXN0VW5lc2NhcGUgPSBmYWxzZTtcbiAgbGV0IGlzRXNjYXBpbmcgPSBmYWxzZTtcbiAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gIGxldCBleHRlbnNpb25OYW1lO1xuICBsZXQgcGFyYW1OYW1lO1xuICBsZXQgc3RhcnQgPSAtMTtcbiAgbGV0IGNvZGUgPSAtMTtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgaSA9IDA7XG5cbiAgZm9yICg7IGkgPCBoZWFkZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlID0gaGVhZGVyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICBpZiAoZXh0ZW5zaW9uTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZW5kID09PSAtMSAmJiB0b2tlbkNoYXJzW2NvZGVdID09PSAxKSB7XG4gICAgICAgIGlmIChzdGFydCA9PT0gLTEpIHN0YXJ0ID0gaTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGkgIT09IDAgJiZcbiAgICAgICAgKGNvZGUgPT09IDB4MjAgLyogJyAnICovIHx8IGNvZGUgPT09IDB4MDkpIC8qICdcXHQnICovXG4gICAgICApIHtcbiAgICAgICAgaWYgKGVuZCA9PT0gLTEgJiYgc3RhcnQgIT09IC0xKSBlbmQgPSBpO1xuICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDNiIC8qICc7JyAqLyB8fCBjb2RlID09PSAweDJjIC8qICcsJyAqLykge1xuICAgICAgICBpZiAoc3RhcnQgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kID09PSAtMSkgZW5kID0gaTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGhlYWRlci5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgICAgaWYgKGNvZGUgPT09IDB4MmMpIHtcbiAgICAgICAgICBwdXNoKG9mZmVycywgbmFtZSwgcGFyYW1zKTtcbiAgICAgICAgICBwYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4dGVuc2lvbk5hbWUgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnQgPSBlbmQgPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5leHBlY3RlZCBjaGFyYWN0ZXIgYXQgaW5kZXggJHtpfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFyYW1OYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChlbmQgPT09IC0xICYmIHRva2VuQ2hhcnNbY29kZV0gPT09IDEpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSAtMSkgc3RhcnQgPSBpO1xuICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDIwIHx8IGNvZGUgPT09IDB4MDkpIHtcbiAgICAgICAgaWYgKGVuZCA9PT0gLTEgJiYgc3RhcnQgIT09IC0xKSBlbmQgPSBpO1xuICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDNiIHx8IGNvZGUgPT09IDB4MmMpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5leHBlY3RlZCBjaGFyYWN0ZXIgYXQgaW5kZXggJHtpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZCA9PT0gLTEpIGVuZCA9IGk7XG4gICAgICAgIHB1c2gocGFyYW1zLCBoZWFkZXIuc2xpY2Uoc3RhcnQsIGVuZCksIHRydWUpO1xuICAgICAgICBpZiAoY29kZSA9PT0gMHgyYykge1xuICAgICAgICAgIHB1c2gob2ZmZXJzLCBleHRlbnNpb25OYW1lLCBwYXJhbXMpO1xuICAgICAgICAgIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZXh0ZW5zaW9uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gZW5kID0gLTE7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4M2QgLyogJz0nICovICYmIHN0YXJ0ICE9PSAtMSAmJiBlbmQgPT09IC0xKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IGhlYWRlci5zbGljZShzdGFydCwgaSk7XG4gICAgICAgIHN0YXJ0ID0gZW5kID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGF0IGluZGV4ICR7aX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9cbiAgICAgIC8vIFRoZSB2YWx1ZSBvZiBhIHF1b3RlZC1zdHJpbmcgYWZ0ZXIgdW5lc2NhcGluZyBtdXN0IGNvbmZvcm0gdG8gdGhlXG4gICAgICAvLyB0b2tlbiBBQk5GLCBzbyBvbmx5IHRva2VuIGNoYXJhY3RlcnMgYXJlIHZhbGlkLlxuICAgICAgLy8gUmVmOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuICAgICAgLy9cbiAgICAgIGlmIChpc0VzY2FwaW5nKSB7XG4gICAgICAgIGlmICh0b2tlbkNoYXJzW2NvZGVdICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ID09PSAtMSkgc3RhcnQgPSBpO1xuICAgICAgICBlbHNlIGlmICghbXVzdFVuZXNjYXBlKSBtdXN0VW5lc2NhcGUgPSB0cnVlO1xuICAgICAgICBpc0VzY2FwaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGluUXVvdGVzKSB7XG4gICAgICAgIGlmICh0b2tlbkNoYXJzW2NvZGVdID09PSAxKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0ID09PSAtMSkgc3RhcnQgPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MjIgLyogJ1wiJyAqLyAmJiBzdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICBpblF1b3RlcyA9IGZhbHNlO1xuICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHg1YyAvKiAnXFwnICovKSB7XG4gICAgICAgICAgaXNFc2NhcGluZyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgyMiAmJiBoZWFkZXIuY2hhckNvZGVBdChpIC0gMSkgPT09IDB4M2QpIHtcbiAgICAgICAgaW5RdW90ZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xICYmIHRva2VuQ2hhcnNbY29kZV0gPT09IDEpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSAtMSkgc3RhcnQgPSBpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydCAhPT0gLTEgJiYgKGNvZGUgPT09IDB4MjAgfHwgY29kZSA9PT0gMHgwOSkpIHtcbiAgICAgICAgaWYgKGVuZCA9PT0gLTEpIGVuZCA9IGk7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4M2IgfHwgY29kZSA9PT0gMHgyYykge1xuICAgICAgICBpZiAoc3RhcnQgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kID09PSAtMSkgZW5kID0gaTtcbiAgICAgICAgbGV0IHZhbHVlID0gaGVhZGVyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgICBpZiAobXVzdFVuZXNjYXBlKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICAgICAgICBtdXN0VW5lc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwdXNoKHBhcmFtcywgcGFyYW1OYW1lLCB2YWx1ZSk7XG4gICAgICAgIGlmIChjb2RlID09PSAweDJjKSB7XG4gICAgICAgICAgcHVzaChvZmZlcnMsIGV4dGVuc2lvbk5hbWUsIHBhcmFtcyk7XG4gICAgICAgICAgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBleHRlbnNpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICBzdGFydCA9IGVuZCA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBpblF1b3RlcyB8fCBjb2RlID09PSAweDIwIHx8IGNvZGUgPT09IDB4MDkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0Jyk7XG4gIH1cblxuICBpZiAoZW5kID09PSAtMSkgZW5kID0gaTtcbiAgY29uc3QgdG9rZW4gPSBoZWFkZXIuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIGlmIChleHRlbnNpb25OYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBwdXNoKG9mZmVycywgdG9rZW4sIHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhcmFtTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwdXNoKHBhcmFtcywgdG9rZW4sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAobXVzdFVuZXNjYXBlKSB7XG4gICAgICBwdXNoKHBhcmFtcywgcGFyYW1OYW1lLCB0b2tlbi5yZXBsYWNlKC9cXFxcL2csICcnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2gocGFyYW1zLCBwYXJhbU5hbWUsIHRva2VuKTtcbiAgICB9XG4gICAgcHVzaChvZmZlcnMsIGV4dGVuc2lvbk5hbWUsIHBhcmFtcyk7XG4gIH1cblxuICByZXR1cm4gb2ZmZXJzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc2AgaGVhZGVyIGZpZWxkIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRlbnNpb25zIFRoZSBtYXAgb2YgZXh0ZW5zaW9ucyBhbmQgcGFyYW1ldGVycyB0byBmb3JtYXRcbiAqIEByZXR1cm4ge1N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBvYmplY3RcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZm9ybWF0KGV4dGVuc2lvbnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiB7XG4gICAgICBsZXQgY29uZmlndXJhdGlvbnMgPSBleHRlbnNpb25zW2V4dGVuc2lvbl07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlndXJhdGlvbnMpKSBjb25maWd1cmF0aW9ucyA9IFtjb25maWd1cmF0aW9uc107XG4gICAgICByZXR1cm4gY29uZmlndXJhdGlvbnNcbiAgICAgICAgLm1hcCgocGFyYW1zKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtleHRlbnNpb25dXG4gICAgICAgICAgICAuY29uY2F0KFxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBwYXJhbXNba107XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHYpID0+ICh2ID09PSB0cnVlID8gayA6IGAke2t9PSR7dn1gKSlcbiAgICAgICAgICAgICAgICAgIC5qb2luKCc7ICcpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJzsgJyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgIH0pXG4gICAgLmpvaW4oJywgJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBmb3JtYXQsIHBhcnNlIH07XG4iLAogICAgIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwgeyBcInZhcnNJZ25vcmVQYXR0ZXJuXCI6IFwiXkR1cGxleHxSZWFkYWJsZSRcIiwgXCJjYXVnaHRFcnJvcnNcIjogXCJub25lXCIgfV0gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKTtcbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKTtcbmNvbnN0IHRscyA9IHJlcXVpcmUoJ3RscycpO1xuY29uc3QgeyByYW5kb21CeXRlcywgY3JlYXRlSGFzaCB9ID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCB7IER1cGxleCwgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ3VybCcpO1xuXG5jb25zdCBQZXJNZXNzYWdlRGVmbGF0ZSA9IHJlcXVpcmUoJy4vcGVybWVzc2FnZS1kZWZsYXRlJyk7XG5jb25zdCBSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKTtcbmNvbnN0IFNlbmRlciA9IHJlcXVpcmUoJy4vc2VuZGVyJyk7XG5jb25zdCB7IGlzQmxvYiB9ID0gcmVxdWlyZSgnLi92YWxpZGF0aW9uJyk7XG5cbmNvbnN0IHtcbiAgQklOQVJZX1RZUEVTLFxuICBFTVBUWV9CVUZGRVIsXG4gIEdVSUQsXG4gIGtGb3JPbkV2ZW50QXR0cmlidXRlLFxuICBrTGlzdGVuZXIsXG4gIGtTdGF0dXNDb2RlLFxuICBrV2ViU29ja2V0LFxuICBOT09QXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IHtcbiAgRXZlbnRUYXJnZXQ6IHsgYWRkRXZlbnRMaXN0ZW5lciwgcmVtb3ZlRXZlbnRMaXN0ZW5lciB9XG59ID0gcmVxdWlyZSgnLi9ldmVudC10YXJnZXQnKTtcbmNvbnN0IHsgZm9ybWF0LCBwYXJzZSB9ID0gcmVxdWlyZSgnLi9leHRlbnNpb24nKTtcbmNvbnN0IHsgdG9CdWZmZXIgfSA9IHJlcXVpcmUoJy4vYnVmZmVyLXV0aWwnKTtcblxuY29uc3QgY2xvc2VUaW1lb3V0ID0gMzAgKiAxMDAwO1xuY29uc3Qga0Fib3J0ZWQgPSBTeW1ib2woJ2tBYm9ydGVkJyk7XG5jb25zdCBwcm90b2NvbFZlcnNpb25zID0gWzgsIDEzXTtcbmNvbnN0IHJlYWR5U3RhdGVzID0gWydDT05ORUNUSU5HJywgJ09QRU4nLCAnQ0xPU0lORycsICdDTE9TRUQnXTtcbmNvbnN0IHN1YnByb3RvY29sUmVnZXggPSAvXlshIyQlJicqK1xcLS4wLTlBLVpeX2B8YS16fl0rJC87XG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgV2ViU29ja2V0LlxuICpcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICovXG5jbGFzcyBXZWJTb2NrZXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGBXZWJTb2NrZXRgLlxuICAgKlxuICAgKiBAcGFyYW0geyhTdHJpbmd8VVJMKX0gYWRkcmVzcyBUaGUgVVJMIHRvIHdoaWNoIHRvIGNvbm5lY3RcbiAgICogQHBhcmFtIHsoU3RyaW5nfFN0cmluZ1tdKX0gW3Byb3RvY29sc10gVGhlIHN1YnByb3RvY29sc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIENvbm5lY3Rpb24gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYWRkcmVzcywgcHJvdG9jb2xzLCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2JpbmFyeVR5cGUgPSBCSU5BUllfVFlQRVNbMF07XG4gICAgdGhpcy5fY2xvc2VDb2RlID0gMTAwNjtcbiAgICB0aGlzLl9jbG9zZUZyYW1lUmVjZWl2ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9jbG9zZUZyYW1lU2VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2Nsb3NlTWVzc2FnZSA9IEVNUFRZX0JVRkZFUjtcbiAgICB0aGlzLl9jbG9zZVRpbWVyID0gbnVsbDtcbiAgICB0aGlzLl9lcnJvckVtaXR0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9leHRlbnNpb25zID0ge307XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5fcHJvdG9jb2wgPSAnJztcbiAgICB0aGlzLl9yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gICAgdGhpcy5fcmVjZWl2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3NlbmRlciA9IG51bGw7XG4gICAgdGhpcy5fc29ja2V0ID0gbnVsbDtcblxuICAgIGlmIChhZGRyZXNzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9idWZmZXJlZEFtb3VudCA9IDA7XG4gICAgICB0aGlzLl9pc1NlcnZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVkaXJlY3RzID0gMDtcblxuICAgICAgaWYgKHByb3RvY29scyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3RvY29scyA9IFtdO1xuICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShwcm90b2NvbHMpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvdG9jb2xzID09PSAnb2JqZWN0JyAmJiBwcm90b2NvbHMgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zID0gcHJvdG9jb2xzO1xuICAgICAgICAgIHByb3RvY29scyA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluaXRBc0NsaWVudCh0aGlzLCBhZGRyZXNzLCBwcm90b2NvbHMsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hdXRvUG9uZyA9IG9wdGlvbnMuYXV0b1Bvbmc7XG4gICAgICB0aGlzLl9pc1NlcnZlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZSBjdXN0b20gXCJub2RlYnVmZmVyXCIgdHlwZSBpcyB1c2VkIGJ5IHRoZSBkZWZhdWx0XG4gICAqIGluc3RlYWQgb2YgXCJibG9iXCIuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgYmluYXJ5VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmluYXJ5VHlwZTtcbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlKHR5cGUpIHtcbiAgICBpZiAoIUJJTkFSWV9UWVBFUy5pbmNsdWRlcyh0eXBlKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fYmluYXJ5VHlwZSA9IHR5cGU7XG5cbiAgICAvL1xuICAgIC8vIEFsbG93IHRvIGNoYW5nZSBgYmluYXJ5VHlwZWAgb24gdGhlIGZseS5cbiAgICAvL1xuICAgIGlmICh0aGlzLl9yZWNlaXZlcikgdGhpcy5fcmVjZWl2ZXIuX2JpbmFyeVR5cGUgPSB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBnZXQgYnVmZmVyZWRBbW91bnQoKSB7XG4gICAgaWYgKCF0aGlzLl9zb2NrZXQpIHJldHVybiB0aGlzLl9idWZmZXJlZEFtb3VudDtcblxuICAgIHJldHVybiB0aGlzLl9zb2NrZXQuX3dyaXRhYmxlU3RhdGUubGVuZ3RoICsgdGhpcy5fc2VuZGVyLl9idWZmZXJlZEJ5dGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgZXh0ZW5zaW9ucygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZXh0ZW5zaW9ucykuam9pbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKi9cbiAgZ2V0IGlzUGF1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZ2V0IG9uY2xvc2UoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZ2V0IG9uZXJyb3IoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZ2V0IG9ub3BlbigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBnZXQgb25tZXNzYWdlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3RvY29sO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBnZXQgcmVhZHlTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZHlTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IHVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCB0aGUgc29ja2V0IGFuZCB0aGUgaW50ZXJuYWwgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge0R1cGxleH0gc29ja2V0IFRoZSBuZXR3b3JrIHNvY2tldCBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIGNsaWVudFxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZCBUaGUgZmlyc3QgcGFja2V0IG9mIHRoZSB1cGdyYWRlZCBzdHJlYW1cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxvd1N5bmNocm9ub3VzRXZlbnRzPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlclxuICAgKiAgICAgYW55IG9mIHRoZSBgJ21lc3NhZ2UnYCwgYCdwaW5nJ2AsIGFuZCBgJ3BvbmcnYCBldmVudHMgY2FuIGJlIGVtaXR0ZWRcbiAgICogICAgIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIHRpY2tcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZ2VuZXJhdGVNYXNrXSBUaGUgZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGVcbiAgICogICAgIG1hc2tpbmcga2V5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhQYXlsb2FkPTBdIFRoZSBtYXhpbXVtIGFsbG93ZWQgbWVzc2FnZSBzaXplXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2tpcFVURjhWYWxpZGF0aW9uPWZhbHNlXSBTcGVjaWZpZXMgd2hldGhlciBvclxuICAgKiAgICAgbm90IHRvIHNraXAgVVRGLTggdmFsaWRhdGlvbiBmb3IgdGV4dCBhbmQgY2xvc2UgbWVzc2FnZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldFNvY2tldChzb2NrZXQsIGhlYWQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IG5ldyBSZWNlaXZlcih7XG4gICAgICBhbGxvd1N5bmNocm9ub3VzRXZlbnRzOiBvcHRpb25zLmFsbG93U3luY2hyb25vdXNFdmVudHMsXG4gICAgICBiaW5hcnlUeXBlOiB0aGlzLmJpbmFyeVR5cGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLl9leHRlbnNpb25zLFxuICAgICAgaXNTZXJ2ZXI6IHRoaXMuX2lzU2VydmVyLFxuICAgICAgbWF4UGF5bG9hZDogb3B0aW9ucy5tYXhQYXlsb2FkLFxuICAgICAgc2tpcFVURjhWYWxpZGF0aW9uOiBvcHRpb25zLnNraXBVVEY4VmFsaWRhdGlvblxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VuZGVyID0gbmV3IFNlbmRlcihzb2NrZXQsIHRoaXMuX2V4dGVuc2lvbnMsIG9wdGlvbnMuZ2VuZXJhdGVNYXNrKTtcblxuICAgIHRoaXMuX3JlY2VpdmVyID0gcmVjZWl2ZXI7XG4gICAgdGhpcy5fc2VuZGVyID0gc2VuZGVyO1xuICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcblxuICAgIHJlY2VpdmVyW2tXZWJTb2NrZXRdID0gdGhpcztcbiAgICBzZW5kZXJba1dlYlNvY2tldF0gPSB0aGlzO1xuICAgIHNvY2tldFtrV2ViU29ja2V0XSA9IHRoaXM7XG5cbiAgICByZWNlaXZlci5vbignY29uY2x1ZGUnLCByZWNlaXZlck9uQ29uY2x1ZGUpO1xuICAgIHJlY2VpdmVyLm9uKCdkcmFpbicsIHJlY2VpdmVyT25EcmFpbik7XG4gICAgcmVjZWl2ZXIub24oJ2Vycm9yJywgcmVjZWl2ZXJPbkVycm9yKTtcbiAgICByZWNlaXZlci5vbignbWVzc2FnZScsIHJlY2VpdmVyT25NZXNzYWdlKTtcbiAgICByZWNlaXZlci5vbigncGluZycsIHJlY2VpdmVyT25QaW5nKTtcbiAgICByZWNlaXZlci5vbigncG9uZycsIHJlY2VpdmVyT25Qb25nKTtcblxuICAgIHNlbmRlci5vbmVycm9yID0gc2VuZGVyT25FcnJvcjtcblxuICAgIC8vXG4gICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbm90IGJlIGF2YWlsYWJsZSBpZiBgc29ja2V0YCBpcyBqdXN0IGEgYER1cGxleGAuXG4gICAgLy9cbiAgICBpZiAoc29ja2V0LnNldFRpbWVvdXQpIHNvY2tldC5zZXRUaW1lb3V0KDApO1xuICAgIGlmIChzb2NrZXQuc2V0Tm9EZWxheSkgc29ja2V0LnNldE5vRGVsYXkoKTtcblxuICAgIGlmIChoZWFkLmxlbmd0aCA+IDApIHNvY2tldC51bnNoaWZ0KGhlYWQpO1xuXG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIHNvY2tldE9uQ2xvc2UpO1xuICAgIHNvY2tldC5vbignZGF0YScsIHNvY2tldE9uRGF0YSk7XG4gICAgc29ja2V0Lm9uKCdlbmQnLCBzb2NrZXRPbkVuZCk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIHNvY2tldE9uRXJyb3IpO1xuXG4gICAgdGhpcy5fcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5PUEVOO1xuICAgIHRoaXMuZW1pdCgnb3BlbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgdGhlIGAnY2xvc2UnYCBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRDbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX3NvY2tldCkge1xuICAgICAgdGhpcy5fcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TRUQ7XG4gICAgICB0aGlzLmVtaXQoJ2Nsb3NlJywgdGhpcy5fY2xvc2VDb2RlLCB0aGlzLl9jbG9zZU1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9leHRlbnNpb25zW1Blck1lc3NhZ2VEZWZsYXRlLmV4dGVuc2lvbk5hbWVdKSB7XG4gICAgICB0aGlzLl9leHRlbnNpb25zW1Blck1lc3NhZ2VEZWZsYXRlLmV4dGVuc2lvbk5hbWVdLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWNlaXZlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICB0aGlzLmVtaXQoJ2Nsb3NlJywgdGhpcy5fY2xvc2VDb2RlLCB0aGlzLl9jbG9zZU1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgY2xvc2luZyBoYW5kc2hha2UuXG4gICAqXG4gICAqICAgICAgICAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLStcbiAgICogICAgIC0gLSAtfHdzLmNsb3NlKCl8LS0+fGNsb3NlIGZyYW1lfC0tPnx3cy5jbG9zZSgpfC0gLSAtXG4gICAqICAgIHwgICAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICAgIHxcbiAgICogICAgICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tKyAgICAgICAgIHxcbiAgICogQ0xPU0lORyAgfHdzLmNsb3NlKCl8PC0tfGNsb3NlIGZyYW1lfDwtLSstLS0tLSsgICAgICAgQ0xPU0lOR1xuICAgKiAgICAgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0rICAgfFxuICAgKiAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICstLS0rICAgICAgICB8XG4gICAqICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0+fGZpbnwgLSAtIC0gLVxuICAgKiAgICB8ICAgICAgICAgKy0tLSsgICAgICAgICAgICAgICAgICAgICAgfCAgICstLS0rXG4gICAqICAgICAtIC0gLSAtIC18ZmlufDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICArLS0tK1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gW2NvZGVdIFN0YXR1cyBjb2RlIGV4cGxhaW5pbmcgd2h5IHRoZSBjb25uZWN0aW9uIGlzIGNsb3NpbmdcbiAgICogQHBhcmFtIHsoU3RyaW5nfEJ1ZmZlcil9IFtkYXRhXSBUaGUgcmVhc29uIHdoeSB0aGUgY29ubmVjdGlvbiBpc1xuICAgKiAgICAgY2xvc2luZ1xuICAgKiBAcHVibGljXG4gICAqL1xuICBjbG9zZShjb2RlLCBkYXRhKSB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NFRCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICBjb25zdCBtc2cgPSAnV2ViU29ja2V0IHdhcyBjbG9zZWQgYmVmb3JlIHRoZSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCc7XG4gICAgICBhYm9ydEhhbmRzaGFrZSh0aGlzLCB0aGlzLl9yZXEsIG1zZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NJTkcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fY2xvc2VGcmFtZVNlbnQgJiZcbiAgICAgICAgKHRoaXMuX2Nsb3NlRnJhbWVSZWNlaXZlZCB8fCB0aGlzLl9yZWNlaXZlci5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fc29ja2V0LmVuZCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TSU5HO1xuICAgIHRoaXMuX3NlbmRlci5jbG9zZShjb2RlLCBkYXRhLCAhdGhpcy5faXNTZXJ2ZXIsIChlcnIpID0+IHtcbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGVycm9yIGlzIGhhbmRsZWQgYnkgdGhlIGAnZXJyb3InYCBsaXN0ZW5lciBvbiB0aGUgc29ja2V0LiBXZSBvbmx5XG4gICAgICAvLyB3YW50IHRvIGtub3cgaWYgdGhlIGNsb3NlIGZyYW1lIGhhcyBiZWVuIHNlbnQgaGVyZS5cbiAgICAgIC8vXG4gICAgICBpZiAoZXJyKSByZXR1cm47XG5cbiAgICAgIHRoaXMuX2Nsb3NlRnJhbWVTZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9jbG9zZUZyYW1lUmVjZWl2ZWQgfHxcbiAgICAgICAgdGhpcy5fcmVjZWl2ZXIuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fc29ja2V0LmVuZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2V0Q2xvc2VUaW1lcih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXVzZSB0aGUgc29ja2V0LlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HIHx8XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DTE9TRURcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3NvY2tldC5wYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBwaW5nLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IFtkYXRhXSBUaGUgZGF0YSB0byBzZW5kXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW21hc2tdIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBtYXNrIGBkYXRhYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2JdIENhbGxiYWNrIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHBpbmcgaXMgc2VudFxuICAgKiBAcHVibGljXG4gICAqL1xuICBwaW5nKGRhdGEsIG1hc2ssIGNiKSB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2ViU29ja2V0IGlzIG5vdCBvcGVuOiByZWFkeVN0YXRlIDAgKENPTk5FQ1RJTkcpJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGRhdGE7XG4gICAgICBkYXRhID0gbWFzayA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYXNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IG1hc2s7XG4gICAgICBtYXNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgc2VuZEFmdGVyQ2xvc2UodGhpcywgZGF0YSwgY2IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYXNrID09PSB1bmRlZmluZWQpIG1hc2sgPSAhdGhpcy5faXNTZXJ2ZXI7XG4gICAgdGhpcy5fc2VuZGVyLnBpbmcoZGF0YSB8fCBFTVBUWV9CVUZGRVIsIG1hc2ssIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgcG9uZy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBbZGF0YV0gVGhlIGRhdGEgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFttYXNrXSBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gbWFzayBgZGF0YWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NiXSBDYWxsYmFjayB3aGljaCBpcyBleGVjdXRlZCB3aGVuIHRoZSBwb25nIGlzIHNlbnRcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcG9uZyhkYXRhLCBtYXNrLCBjYikge1xuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYlNvY2tldCBpcyBub3Qgb3BlbjogcmVhZHlTdGF0ZSAwIChDT05ORUNUSU5HKScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBkYXRhO1xuICAgICAgZGF0YSA9IG1hc2sgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWFzayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBtYXNrO1xuICAgICAgbWFzayA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuXG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHNlbmRBZnRlckNsb3NlKHRoaXMsIGRhdGEsIGNiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWFzayA9PT0gdW5kZWZpbmVkKSBtYXNrID0gIXRoaXMuX2lzU2VydmVyO1xuICAgIHRoaXMuX3NlbmRlci5wb25nKGRhdGEgfHwgRU1QVFlfQlVGRkVSLCBtYXNrLCBjYik7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIHRoZSBzb2NrZXQuXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HIHx8XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DTE9TRURcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuX3JlY2VpdmVyLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikgdGhpcy5fc29ja2V0LnJlc3VtZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBkYXRhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWVzc2FnZSB0byBzZW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5iaW5hcnldIFNwZWNpZmllcyB3aGV0aGVyIGBkYXRhYCBpcyBiaW5hcnkgb3JcbiAgICogICAgIHRleHRcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5jb21wcmVzc10gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNvbXByZXNzXG4gICAqICAgICBgZGF0YWBcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5maW49dHJ1ZV0gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGZyYWdtZW50IGlzIHRoZVxuICAgKiAgICAgbGFzdCBvbmVcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tYXNrXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gbWFzayBgZGF0YWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NiXSBDYWxsYmFjayB3aGljaCBpcyBleGVjdXRlZCB3aGVuIGRhdGEgaXMgd3JpdHRlbiBvdXRcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2VuZChkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYlNvY2tldCBpcyBub3Qgb3BlbjogcmVhZHlTdGF0ZSAwIChDT05ORUNUSU5HKScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgc2VuZEFmdGVyQ2xvc2UodGhpcywgZGF0YSwgY2IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICBiaW5hcnk6IHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyxcbiAgICAgIG1hc2s6ICF0aGlzLl9pc1NlcnZlcixcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgZmluOiB0cnVlLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuX2V4dGVuc2lvbnNbUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZV0pIHtcbiAgICAgIG9wdHMuY29tcHJlc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZW5kZXIuc2VuZChkYXRhIHx8IEVNUFRZX0JVRkZFUiwgb3B0cywgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNpYmx5IGNsb3NlIHRoZSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICB0ZXJtaW5hdGUoKSB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NFRCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICBjb25zdCBtc2cgPSAnV2ViU29ja2V0IHdhcyBjbG9zZWQgYmVmb3JlIHRoZSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCc7XG4gICAgICBhYm9ydEhhbmRzaGFrZSh0aGlzLCB0aGlzLl9yZXEsIG1zZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvY2tldCkge1xuICAgICAgdGhpcy5fcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TSU5HO1xuICAgICAgdGhpcy5fc29ja2V0LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAY29uc3RhbnQge051bWJlcn0gQ09OTkVDVElOR1xuICogQG1lbWJlcm9mIFdlYlNvY2tldFxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViU29ja2V0LCAnQ09OTkVDVElORycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgdmFsdWU6IHJlYWR5U3RhdGVzLmluZGV4T2YoJ0NPTk5FQ1RJTkcnKVxufSk7XG5cbi8qKlxuICogQGNvbnN0YW50IHtOdW1iZXJ9IENPTk5FQ1RJTkdcbiAqIEBtZW1iZXJvZiBXZWJTb2NrZXQucHJvdG90eXBlXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJTb2NrZXQucHJvdG90eXBlLCAnQ09OTkVDVElORycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgdmFsdWU6IHJlYWR5U3RhdGVzLmluZGV4T2YoJ0NPTk5FQ1RJTkcnKVxufSk7XG5cbi8qKlxuICogQGNvbnN0YW50IHtOdW1iZXJ9IE9QRU5cbiAqIEBtZW1iZXJvZiBXZWJTb2NrZXRcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlNvY2tldCwgJ09QRU4nLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHZhbHVlOiByZWFkeVN0YXRlcy5pbmRleE9mKCdPUEVOJylcbn0pO1xuXG4vKipcbiAqIEBjb25zdGFudCB7TnVtYmVyfSBPUEVOXG4gKiBAbWVtYmVyb2YgV2ViU29ja2V0LnByb3RvdHlwZVxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViU29ja2V0LnByb3RvdHlwZSwgJ09QRU4nLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHZhbHVlOiByZWFkeVN0YXRlcy5pbmRleE9mKCdPUEVOJylcbn0pO1xuXG4vKipcbiAqIEBjb25zdGFudCB7TnVtYmVyfSBDTE9TSU5HXG4gKiBAbWVtYmVyb2YgV2ViU29ja2V0XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJTb2NrZXQsICdDTE9TSU5HJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB2YWx1ZTogcmVhZHlTdGF0ZXMuaW5kZXhPZignQ0xPU0lORycpXG59KTtcblxuLyoqXG4gKiBAY29uc3RhbnQge051bWJlcn0gQ0xPU0lOR1xuICogQG1lbWJlcm9mIFdlYlNvY2tldC5wcm90b3R5cGVcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlNvY2tldC5wcm90b3R5cGUsICdDTE9TSU5HJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB2YWx1ZTogcmVhZHlTdGF0ZXMuaW5kZXhPZignQ0xPU0lORycpXG59KTtcblxuLyoqXG4gKiBAY29uc3RhbnQge051bWJlcn0gQ0xPU0VEXG4gKiBAbWVtYmVyb2YgV2ViU29ja2V0XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJTb2NrZXQsICdDTE9TRUQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHZhbHVlOiByZWFkeVN0YXRlcy5pbmRleE9mKCdDTE9TRUQnKVxufSk7XG5cbi8qKlxuICogQGNvbnN0YW50IHtOdW1iZXJ9IENMT1NFRFxuICogQG1lbWJlcm9mIFdlYlNvY2tldC5wcm90b3R5cGVcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlNvY2tldC5wcm90b3R5cGUsICdDTE9TRUQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHZhbHVlOiByZWFkeVN0YXRlcy5pbmRleE9mKCdDTE9TRUQnKVxufSk7XG5cbltcbiAgJ2JpbmFyeVR5cGUnLFxuICAnYnVmZmVyZWRBbW91bnQnLFxuICAnZXh0ZW5zaW9ucycsXG4gICdpc1BhdXNlZCcsXG4gICdwcm90b2NvbCcsXG4gICdyZWFkeVN0YXRlJyxcbiAgJ3VybCdcbl0uZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlNvY2tldC5wcm90b3R5cGUsIHByb3BlcnR5LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG59KTtcblxuLy9cbi8vIEFkZCB0aGUgYG9ub3BlbmAsIGBvbmVycm9yYCwgYG9uY2xvc2VgLCBhbmQgYG9ubWVzc2FnZWAgYXR0cmlidXRlcy5cbi8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jb21tcy5odG1sI3RoZS13ZWJzb2NrZXQtaW50ZXJmYWNlXG4vL1xuWydvcGVuJywgJ2Vycm9yJywgJ2Nsb3NlJywgJ21lc3NhZ2UnXS5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlNvY2tldC5wcm90b3R5cGUsIGBvbiR7bWV0aG9kfWAsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMobWV0aG9kKSkge1xuICAgICAgICBpZiAobGlzdGVuZXJba0Zvck9uRXZlbnRBdHRyaWJ1dGVdKSByZXR1cm4gbGlzdGVuZXJba0xpc3RlbmVyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBzZXQoaGFuZGxlcikge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycyhtZXRob2QpKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lcltrRm9yT25FdmVudEF0dHJpYnV0ZV0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKG1ldGhvZCwgbGlzdGVuZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIobWV0aG9kLCBoYW5kbGVyLCB7XG4gICAgICAgIFtrRm9yT25FdmVudEF0dHJpYnV0ZV06IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcblxuV2ViU29ja2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lcjtcbldlYlNvY2tldC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IHJlbW92ZUV2ZW50TGlzdGVuZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gV2ViU29ja2V0O1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBXZWJTb2NrZXQgY2xpZW50LlxuICpcbiAqIEBwYXJhbSB7V2ViU29ja2V0fSB3ZWJzb2NrZXQgVGhlIGNsaWVudCB0byBpbml0aWFsaXplXG4gKiBAcGFyYW0geyhTdHJpbmd8VVJMKX0gYWRkcmVzcyBUaGUgVVJMIHRvIHdoaWNoIHRvIGNvbm5lY3RcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3RvY29scyBUaGUgc3VicHJvdG9jb2xzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIENvbm5lY3Rpb24gb3B0aW9uc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxvd1N5bmNocm9ub3VzRXZlbnRzPXRydWVdIFNwZWNpZmllcyB3aGV0aGVyIGFueVxuICogICAgIG9mIHRoZSBgJ21lc3NhZ2UnYCwgYCdwaW5nJ2AsIGFuZCBgJ3BvbmcnYCBldmVudHMgY2FuIGJlIGVtaXR0ZWQgbXVsdGlwbGVcbiAqICAgICB0aW1lcyBpbiB0aGUgc2FtZSB0aWNrXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmF1dG9Qb25nPXRydWVdIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0b1xuICogICAgIGF1dG9tYXRpY2FsbHkgc2VuZCBhIHBvbmcgaW4gcmVzcG9uc2UgdG8gYSBwaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maW5pc2hSZXF1ZXN0XSBBIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvXG4gKiAgICAgY3VzdG9taXplIHRoZSBoZWFkZXJzIG9mIGVhY2ggaHR0cCByZXF1ZXN0IGJlZm9yZSBpdCBpcyBzZW50XG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvbGxvd1JlZGlyZWN0cz1mYWxzZV0gV2hldGhlciBvciBub3QgdG8gZm9sbG93XG4gKiAgICAgcmVkaXJlY3RzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZW5lcmF0ZU1hc2tdIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZVxuICogICAgIG1hc2tpbmcga2V5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuaGFuZHNoYWtlVGltZW91dF0gVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZVxuICogICAgIGhhbmRzaGFrZSByZXF1ZXN0XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4UGF5bG9hZD0xMDQ4NTc2MDBdIFRoZSBtYXhpbXVtIGFsbG93ZWQgbWVzc2FnZVxuICogICAgIHNpemVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhSZWRpcmVjdHM9MTBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHNcbiAqICAgICBhbGxvd2VkXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMub3JpZ2luXSBWYWx1ZSBvZiB0aGUgYE9yaWdpbmAgb3JcbiAqICAgICBgU2VjLVdlYlNvY2tldC1PcmlnaW5gIGhlYWRlclxuICogQHBhcmFtIHsoQm9vbGVhbnxPYmplY3QpfSBbb3B0aW9ucy5wZXJNZXNzYWdlRGVmbGF0ZT10cnVlXSBFbmFibGUvZGlzYWJsZVxuICogICAgIHBlcm1lc3NhZ2UtZGVmbGF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnByb3RvY29sVmVyc2lvbj0xM10gVmFsdWUgb2YgdGhlXG4gKiAgICAgYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAgaGVhZGVyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNraXBVVEY4VmFsaWRhdGlvbj1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3JcbiAqICAgICBub3QgdG8gc2tpcCBVVEYtOCB2YWxpZGF0aW9uIGZvciB0ZXh0IGFuZCBjbG9zZSBtZXNzYWdlc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEFzQ2xpZW50KHdlYnNvY2tldCwgYWRkcmVzcywgcHJvdG9jb2xzLCBvcHRpb25zKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYWxsb3dTeW5jaHJvbm91c0V2ZW50czogdHJ1ZSxcbiAgICBhdXRvUG9uZzogdHJ1ZSxcbiAgICBwcm90b2NvbFZlcnNpb246IHByb3RvY29sVmVyc2lvbnNbMV0sXG4gICAgbWF4UGF5bG9hZDogMTAwICogMTAyNCAqIDEwMjQsXG4gICAgc2tpcFVURjhWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICBwZXJNZXNzYWdlRGVmbGF0ZTogdHJ1ZSxcbiAgICBmb2xsb3dSZWRpcmVjdHM6IGZhbHNlLFxuICAgIG1heFJlZGlyZWN0czogMTAsXG4gICAgLi4ub3B0aW9ucyxcbiAgICBzb2NrZXRQYXRoOiB1bmRlZmluZWQsXG4gICAgaG9zdG5hbWU6IHVuZGVmaW5lZCxcbiAgICBwcm90b2NvbDogdW5kZWZpbmVkLFxuICAgIHRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhvc3Q6IHVuZGVmaW5lZCxcbiAgICBwYXRoOiB1bmRlZmluZWQsXG4gICAgcG9ydDogdW5kZWZpbmVkXG4gIH07XG5cbiAgd2Vic29ja2V0Ll9hdXRvUG9uZyA9IG9wdHMuYXV0b1Bvbmc7XG5cbiAgaWYgKCFwcm90b2NvbFZlcnNpb25zLmluY2x1ZGVzKG9wdHMucHJvdG9jb2xWZXJzaW9uKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgYFVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb246ICR7b3B0cy5wcm90b2NvbFZlcnNpb259IGAgK1xuICAgICAgICBgKHN1cHBvcnRlZCB2ZXJzaW9uczogJHtwcm90b2NvbFZlcnNpb25zLmpvaW4oJywgJyl9KWBcbiAgICApO1xuICB9XG5cbiAgbGV0IHBhcnNlZFVybDtcblxuICBpZiAoYWRkcmVzcyBpbnN0YW5jZW9mIFVSTCkge1xuICAgIHBhcnNlZFVybCA9IGFkZHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVybCA9IG5ldyBVUkwoYWRkcmVzcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIFVSTDogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICBwYXJzZWRVcmwucHJvdG9jb2wgPSAnd3M6JztcbiAgfSBlbHNlIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgcGFyc2VkVXJsLnByb3RvY29sID0gJ3dzczonO1xuICB9XG5cbiAgd2Vic29ja2V0Ll91cmwgPSBwYXJzZWRVcmwuaHJlZjtcblxuICBjb25zdCBpc1NlY3VyZSA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ3dzczonO1xuICBjb25zdCBpc0lwY1VybCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ3dzK3VuaXg6JztcbiAgbGV0IGludmFsaWRVcmxNZXNzYWdlO1xuXG4gIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgIT09ICd3czonICYmICFpc1NlY3VyZSAmJiAhaXNJcGNVcmwpIHtcbiAgICBpbnZhbGlkVXJsTWVzc2FnZSA9XG4gICAgICAnVGhlIFVSTFxcJ3MgcHJvdG9jb2wgbXVzdCBiZSBvbmUgb2YgXCJ3czpcIiwgXCJ3c3M6XCIsICcgK1xuICAgICAgJ1wiaHR0cDpcIiwgXCJodHRwc1wiLCBvciBcIndzK3VuaXg6XCInO1xuICB9IGVsc2UgaWYgKGlzSXBjVXJsICYmICFwYXJzZWRVcmwucGF0aG5hbWUpIHtcbiAgICBpbnZhbGlkVXJsTWVzc2FnZSA9IFwiVGhlIFVSTCdzIHBhdGhuYW1lIGlzIGVtcHR5XCI7XG4gIH0gZWxzZSBpZiAocGFyc2VkVXJsLmhhc2gpIHtcbiAgICBpbnZhbGlkVXJsTWVzc2FnZSA9ICdUaGUgVVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcic7XG4gIH1cblxuICBpZiAoaW52YWxpZFVybE1lc3NhZ2UpIHtcbiAgICBjb25zdCBlcnIgPSBuZXcgU3ludGF4RXJyb3IoaW52YWxpZFVybE1lc3NhZ2UpO1xuXG4gICAgaWYgKHdlYnNvY2tldC5fcmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXRFcnJvckFuZENsb3NlKHdlYnNvY2tldCwgZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZWZhdWx0UG9ydCA9IGlzU2VjdXJlID8gNDQzIDogODA7XG4gIGNvbnN0IGtleSA9IHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIGNvbnN0IHJlcXVlc3QgPSBpc1NlY3VyZSA/IGh0dHBzLnJlcXVlc3QgOiBodHRwLnJlcXVlc3Q7XG4gIGNvbnN0IHByb3RvY29sU2V0ID0gbmV3IFNldCgpO1xuICBsZXQgcGVyTWVzc2FnZURlZmxhdGU7XG5cbiAgb3B0cy5jcmVhdGVDb25uZWN0aW9uID1cbiAgICBvcHRzLmNyZWF0ZUNvbm5lY3Rpb24gfHwgKGlzU2VjdXJlID8gdGxzQ29ubmVjdCA6IG5ldENvbm5lY3QpO1xuICBvcHRzLmRlZmF1bHRQb3J0ID0gb3B0cy5kZWZhdWx0UG9ydCB8fCBkZWZhdWx0UG9ydDtcbiAgb3B0cy5wb3J0ID0gcGFyc2VkVXJsLnBvcnQgfHwgZGVmYXVsdFBvcnQ7XG4gIG9wdHMuaG9zdCA9IHBhcnNlZFVybC5ob3N0bmFtZS5zdGFydHNXaXRoKCdbJylcbiAgICA/IHBhcnNlZFVybC5ob3N0bmFtZS5zbGljZSgxLCAtMSlcbiAgICA6IHBhcnNlZFVybC5ob3N0bmFtZTtcbiAgb3B0cy5oZWFkZXJzID0ge1xuICAgIC4uLm9wdHMuaGVhZGVycyxcbiAgICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJzogb3B0cy5wcm90b2NvbFZlcnNpb24sXG4gICAgJ1NlYy1XZWJTb2NrZXQtS2V5Jzoga2V5LFxuICAgIENvbm5lY3Rpb246ICdVcGdyYWRlJyxcbiAgICBVcGdyYWRlOiAnd2Vic29ja2V0J1xuICB9O1xuICBvcHRzLnBhdGggPSBwYXJzZWRVcmwucGF0aG5hbWUgKyBwYXJzZWRVcmwuc2VhcmNoO1xuICBvcHRzLnRpbWVvdXQgPSBvcHRzLmhhbmRzaGFrZVRpbWVvdXQ7XG5cbiAgaWYgKG9wdHMucGVyTWVzc2FnZURlZmxhdGUpIHtcbiAgICBwZXJNZXNzYWdlRGVmbGF0ZSA9IG5ldyBQZXJNZXNzYWdlRGVmbGF0ZShcbiAgICAgIG9wdHMucGVyTWVzc2FnZURlZmxhdGUgIT09IHRydWUgPyBvcHRzLnBlck1lc3NhZ2VEZWZsYXRlIDoge30sXG4gICAgICBmYWxzZSxcbiAgICAgIG9wdHMubWF4UGF5bG9hZFxuICAgICk7XG4gICAgb3B0cy5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9IGZvcm1hdCh7XG4gICAgICBbUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZV06IHBlck1lc3NhZ2VEZWZsYXRlLm9mZmVyKClcbiAgICB9KTtcbiAgfVxuICBpZiAocHJvdG9jb2xzLmxlbmd0aCkge1xuICAgIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwcm90b2NvbCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgIXN1YnByb3RvY29sUmVnZXgudGVzdChwcm90b2NvbCkgfHxcbiAgICAgICAgcHJvdG9jb2xTZXQuaGFzKHByb3RvY29sKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBvciBkdXBsaWNhdGVkIHN1YnByb3RvY29sIHdhcyBzcGVjaWZpZWQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHByb3RvY29sU2V0LmFkZChwcm90b2NvbCk7XG4gICAgfVxuXG4gICAgb3B0cy5oZWFkZXJzWydTZWMtV2ViU29ja2V0LVByb3RvY29sJ10gPSBwcm90b2NvbHMuam9pbignLCcpO1xuICB9XG4gIGlmIChvcHRzLm9yaWdpbikge1xuICAgIGlmIChvcHRzLnByb3RvY29sVmVyc2lvbiA8IDEzKSB7XG4gICAgICBvcHRzLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtT3JpZ2luJ10gPSBvcHRzLm9yaWdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5oZWFkZXJzLk9yaWdpbiA9IG9wdHMub3JpZ2luO1xuICAgIH1cbiAgfVxuICBpZiAocGFyc2VkVXJsLnVzZXJuYW1lIHx8IHBhcnNlZFVybC5wYXNzd29yZCkge1xuICAgIG9wdHMuYXV0aCA9IGAke3BhcnNlZFVybC51c2VybmFtZX06JHtwYXJzZWRVcmwucGFzc3dvcmR9YDtcbiAgfVxuXG4gIGlmIChpc0lwY1VybCkge1xuICAgIGNvbnN0IHBhcnRzID0gb3B0cy5wYXRoLnNwbGl0KCc6Jyk7XG5cbiAgICBvcHRzLnNvY2tldFBhdGggPSBwYXJ0c1swXTtcbiAgICBvcHRzLnBhdGggPSBwYXJ0c1sxXTtcbiAgfVxuXG4gIGxldCByZXE7XG5cbiAgaWYgKG9wdHMuZm9sbG93UmVkaXJlY3RzKSB7XG4gICAgaWYgKHdlYnNvY2tldC5fcmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB3ZWJzb2NrZXQuX29yaWdpbmFsSXBjID0gaXNJcGNVcmw7XG4gICAgICB3ZWJzb2NrZXQuX29yaWdpbmFsU2VjdXJlID0gaXNTZWN1cmU7XG4gICAgICB3ZWJzb2NrZXQuX29yaWdpbmFsSG9zdE9yU29ja2V0UGF0aCA9IGlzSXBjVXJsXG4gICAgICAgID8gb3B0cy5zb2NrZXRQYXRoXG4gICAgICAgIDogcGFyc2VkVXJsLmhvc3Q7XG5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zICYmIG9wdGlvbnMuaGVhZGVycztcblxuICAgICAgLy9cbiAgICAgIC8vIFNoYWxsb3cgY29weSB0aGUgdXNlciBwcm92aWRlZCBvcHRpb25zIHNvIHRoYXQgaGVhZGVycyBjYW4gYmUgY2hhbmdlZFxuICAgICAgLy8gd2l0aG91dCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgLy9cbiAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGhlYWRlcnM6IHt9IH07XG5cbiAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3ZWJzb2NrZXQubGlzdGVuZXJDb3VudCgncmVkaXJlY3QnKSA9PT0gMCkge1xuICAgICAgY29uc3QgaXNTYW1lSG9zdCA9IGlzSXBjVXJsXG4gICAgICAgID8gd2Vic29ja2V0Ll9vcmlnaW5hbElwY1xuICAgICAgICAgID8gb3B0cy5zb2NrZXRQYXRoID09PSB3ZWJzb2NrZXQuX29yaWdpbmFsSG9zdE9yU29ja2V0UGF0aFxuICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgOiB3ZWJzb2NrZXQuX29yaWdpbmFsSXBjXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogcGFyc2VkVXJsLmhvc3QgPT09IHdlYnNvY2tldC5fb3JpZ2luYWxIb3N0T3JTb2NrZXRQYXRoO1xuXG4gICAgICBpZiAoIWlzU2FtZUhvc3QgfHwgKHdlYnNvY2tldC5fb3JpZ2luYWxTZWN1cmUgJiYgIWlzU2VjdXJlKSkge1xuICAgICAgICAvL1xuICAgICAgICAvLyBNYXRjaCBjdXJsIDcuNzcuMCBiZWhhdmlvciBhbmQgZHJvcCB0aGUgZm9sbG93aW5nIGhlYWRlcnMuIFRoZXNlXG4gICAgICAgIC8vIGhlYWRlcnMgYXJlIGFsc28gZHJvcHBlZCB3aGVuIGZvbGxvd2luZyBhIHJlZGlyZWN0IHRvIGEgc3ViZG9tYWluLlxuICAgICAgICAvL1xuICAgICAgICBkZWxldGUgb3B0cy5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgICAgIGRlbGV0ZSBvcHRzLmhlYWRlcnMuY29va2llO1xuXG4gICAgICAgIGlmICghaXNTYW1lSG9zdCkgZGVsZXRlIG9wdHMuaGVhZGVycy5ob3N0O1xuXG4gICAgICAgIG9wdHMuYXV0aCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE1hdGNoIGN1cmwgNy43Ny4wIGJlaGF2aW9yIGFuZCBtYWtlIHRoZSBmaXJzdCBgQXV0aG9yaXphdGlvbmAgaGVhZGVyIHdpbi5cbiAgICAvLyBJZiB0aGUgYEF1dGhvcml6YXRpb25gIGhlYWRlciBpcyBzZXQsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkbyBhcyBpdFxuICAgIC8vIHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICAgIC8vXG4gICAgaWYgKG9wdHMuYXV0aCAmJiAhb3B0aW9ucy5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5hdXRob3JpemF0aW9uID1cbiAgICAgICAgJ0Jhc2ljICcgKyBCdWZmZXIuZnJvbShvcHRzLmF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICByZXEgPSB3ZWJzb2NrZXQuX3JlcSA9IHJlcXVlc3Qob3B0cyk7XG5cbiAgICBpZiAod2Vic29ja2V0Ll9yZWRpcmVjdHMpIHtcbiAgICAgIC8vXG4gICAgICAvLyBVbmxpa2Ugd2hhdCBpcyBkb25lIGZvciB0aGUgYCd1cGdyYWRlJ2AgZXZlbnQsIG5vIGVhcmx5IGV4aXQgaXNcbiAgICAgIC8vIHRyaWdnZXJlZCBoZXJlIGlmIHRoZSB1c2VyIGNhbGxzIGB3ZWJzb2NrZXQuY2xvc2UoKWAgb3JcbiAgICAgIC8vIGB3ZWJzb2NrZXQudGVybWluYXRlKClgIGZyb20gYSBsaXN0ZW5lciBvZiB0aGUgYCdyZWRpcmVjdCdgIGV2ZW50LiBUaGlzXG4gICAgICAvLyBpcyBiZWNhdXNlIHRoZSB1c2VyIGNhbiBhbHNvIGNhbGwgYHJlcXVlc3QuZGVzdHJveSgpYCB3aXRoIGFuIGVycm9yXG4gICAgICAvLyBiZWZvcmUgY2FsbGluZyBgd2Vic29ja2V0LmNsb3NlKClgIG9yIGB3ZWJzb2NrZXQudGVybWluYXRlKClgIGFuZCB0aGlzXG4gICAgICAvLyB3b3VsZCByZXN1bHQgaW4gYW4gZXJyb3IgYmVpbmcgZW1pdHRlZCBvbiB0aGUgYHJlcXVlc3RgIG9iamVjdCB3aXRoIG5vXG4gICAgICAvLyBgJ2Vycm9yJ2AgZXZlbnQgbGlzdGVuZXJzIGF0dGFjaGVkLlxuICAgICAgLy9cbiAgICAgIHdlYnNvY2tldC5lbWl0KCdyZWRpcmVjdCcsIHdlYnNvY2tldC51cmwsIHJlcSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlcSA9IHdlYnNvY2tldC5fcmVxID0gcmVxdWVzdChvcHRzKTtcbiAgfVxuXG4gIGlmIChvcHRzLnRpbWVvdXQpIHtcbiAgICByZXEub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gICAgICBhYm9ydEhhbmRzaGFrZSh3ZWJzb2NrZXQsIHJlcSwgJ09wZW5pbmcgaGFuZHNoYWtlIGhhcyB0aW1lZCBvdXQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgaWYgKHJlcSA9PT0gbnVsbCB8fCByZXFba0Fib3J0ZWRdKSByZXR1cm47XG5cbiAgICByZXEgPSB3ZWJzb2NrZXQuX3JlcSA9IG51bGw7XG4gICAgZW1pdEVycm9yQW5kQ2xvc2Uod2Vic29ja2V0LCBlcnIpO1xuICB9KTtcblxuICByZXEub24oJ3Jlc3BvbnNlJywgKHJlcykgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzLmhlYWRlcnMubG9jYXRpb247XG4gICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlcy5zdGF0dXNDb2RlO1xuXG4gICAgaWYgKFxuICAgICAgbG9jYXRpb24gJiZcbiAgICAgIG9wdHMuZm9sbG93UmVkaXJlY3RzICYmXG4gICAgICBzdGF0dXNDb2RlID49IDMwMCAmJlxuICAgICAgc3RhdHVzQ29kZSA8IDQwMFxuICAgICkge1xuICAgICAgaWYgKCsrd2Vic29ja2V0Ll9yZWRpcmVjdHMgPiBvcHRzLm1heFJlZGlyZWN0cykge1xuICAgICAgICBhYm9ydEhhbmRzaGFrZSh3ZWJzb2NrZXQsIHJlcSwgJ01heGltdW0gcmVkaXJlY3RzIGV4Y2VlZGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVxLmFib3J0KCk7XG5cbiAgICAgIGxldCBhZGRyO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhZGRyID0gbmV3IFVSTChsb2NhdGlvbiwgYWRkcmVzcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBVUkw6ICR7bG9jYXRpb259YCk7XG4gICAgICAgIGVtaXRFcnJvckFuZENsb3NlKHdlYnNvY2tldCwgZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbml0QXNDbGllbnQod2Vic29ja2V0LCBhZGRyLCBwcm90b2NvbHMsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoIXdlYnNvY2tldC5lbWl0KCd1bmV4cGVjdGVkLXJlc3BvbnNlJywgcmVxLCByZXMpKSB7XG4gICAgICBhYm9ydEhhbmRzaGFrZShcbiAgICAgICAgd2Vic29ja2V0LFxuICAgICAgICByZXEsXG4gICAgICAgIGBVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZTogJHtyZXMuc3RhdHVzQ29kZX1gXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmVxLm9uKCd1cGdyYWRlJywgKHJlcywgc29ja2V0LCBoZWFkKSA9PiB7XG4gICAgd2Vic29ja2V0LmVtaXQoJ3VwZ3JhZGUnLCByZXMpO1xuXG4gICAgLy9cbiAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gZnJvbSBhIGxpc3RlbmVyIG9mIHRoZVxuICAgIC8vIGAndXBncmFkZSdgIGV2ZW50LlxuICAgIC8vXG4gICAgaWYgKHdlYnNvY2tldC5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuQ09OTkVDVElORykgcmV0dXJuO1xuXG4gICAgcmVxID0gd2Vic29ja2V0Ll9yZXEgPSBudWxsO1xuXG4gICAgY29uc3QgdXBncmFkZSA9IHJlcy5oZWFkZXJzLnVwZ3JhZGU7XG5cbiAgICBpZiAodXBncmFkZSA9PT0gdW5kZWZpbmVkIHx8IHVwZ3JhZGUudG9Mb3dlckNhc2UoKSAhPT0gJ3dlYnNvY2tldCcpIHtcbiAgICAgIGFib3J0SGFuZHNoYWtlKHdlYnNvY2tldCwgc29ja2V0LCAnSW52YWxpZCBVcGdyYWRlIGhlYWRlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goJ3NoYTEnKVxuICAgICAgLnVwZGF0ZShrZXkgKyBHVUlEKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0Jyk7XG5cbiAgICBpZiAocmVzLmhlYWRlcnNbJ3NlYy13ZWJzb2NrZXQtYWNjZXB0J10gIT09IGRpZ2VzdCkge1xuICAgICAgYWJvcnRIYW5kc2hha2Uod2Vic29ja2V0LCBzb2NrZXQsICdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtQWNjZXB0IGhlYWRlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZlclByb3QgPSByZXMuaGVhZGVyc1snc2VjLXdlYnNvY2tldC1wcm90b2NvbCddO1xuICAgIGxldCBwcm90RXJyb3I7XG5cbiAgICBpZiAoc2VydmVyUHJvdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXByb3RvY29sU2V0LnNpemUpIHtcbiAgICAgICAgcHJvdEVycm9yID0gJ1NlcnZlciBzZW50IGEgc3VicHJvdG9jb2wgYnV0IG5vbmUgd2FzIHJlcXVlc3RlZCc7XG4gICAgICB9IGVsc2UgaWYgKCFwcm90b2NvbFNldC5oYXMoc2VydmVyUHJvdCkpIHtcbiAgICAgICAgcHJvdEVycm9yID0gJ1NlcnZlciBzZW50IGFuIGludmFsaWQgc3VicHJvdG9jb2wnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvdG9jb2xTZXQuc2l6ZSkge1xuICAgICAgcHJvdEVycm9yID0gJ1NlcnZlciBzZW50IG5vIHN1YnByb3RvY29sJztcbiAgICB9XG5cbiAgICBpZiAocHJvdEVycm9yKSB7XG4gICAgICBhYm9ydEhhbmRzaGFrZSh3ZWJzb2NrZXQsIHNvY2tldCwgcHJvdEVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VydmVyUHJvdCkgd2Vic29ja2V0Ll9wcm90b2NvbCA9IHNlcnZlclByb3Q7XG5cbiAgICBjb25zdCBzZWNXZWJTb2NrZXRFeHRlbnNpb25zID0gcmVzLmhlYWRlcnNbJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucyddO1xuXG4gICAgaWYgKHNlY1dlYlNvY2tldEV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFwZXJNZXNzYWdlRGVmbGF0ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAnU2VydmVyIHNlbnQgYSBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyIGJ1dCBubyBleHRlbnNpb24gJyArXG4gICAgICAgICAgJ3dhcyByZXF1ZXN0ZWQnO1xuICAgICAgICBhYm9ydEhhbmRzaGFrZSh3ZWJzb2NrZXQsIHNvY2tldCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4dGVuc2lvbnM7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGV4dGVuc2lvbnMgPSBwYXJzZShzZWNXZWJTb2NrZXRFeHRlbnNpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlcic7XG4gICAgICAgIGFib3J0SGFuZHNoYWtlKHdlYnNvY2tldCwgc29ja2V0LCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHRlbnNpb25OYW1lcyA9IE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGV4dGVuc2lvbk5hbWVzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICBleHRlbnNpb25OYW1lc1swXSAhPT0gUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnU2VydmVyIGluZGljYXRlZCBhbiBleHRlbnNpb24gdGhhdCB3YXMgbm90IHJlcXVlc3RlZCc7XG4gICAgICAgIGFib3J0SGFuZHNoYWtlKHdlYnNvY2tldCwgc29ja2V0LCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBwZXJNZXNzYWdlRGVmbGF0ZS5hY2NlcHQoZXh0ZW5zaW9uc1tQZXJNZXNzYWdlRGVmbGF0ZS5leHRlbnNpb25OYW1lXSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXInO1xuICAgICAgICBhYm9ydEhhbmRzaGFrZSh3ZWJzb2NrZXQsIHNvY2tldCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2Vic29ja2V0Ll9leHRlbnNpb25zW1Blck1lc3NhZ2VEZWZsYXRlLmV4dGVuc2lvbk5hbWVdID1cbiAgICAgICAgcGVyTWVzc2FnZURlZmxhdGU7XG4gICAgfVxuXG4gICAgd2Vic29ja2V0LnNldFNvY2tldChzb2NrZXQsIGhlYWQsIHtcbiAgICAgIGFsbG93U3luY2hyb25vdXNFdmVudHM6IG9wdHMuYWxsb3dTeW5jaHJvbm91c0V2ZW50cyxcbiAgICAgIGdlbmVyYXRlTWFzazogb3B0cy5nZW5lcmF0ZU1hc2ssXG4gICAgICBtYXhQYXlsb2FkOiBvcHRzLm1heFBheWxvYWQsXG4gICAgICBza2lwVVRGOFZhbGlkYXRpb246IG9wdHMuc2tpcFVURjhWYWxpZGF0aW9uXG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChvcHRzLmZpbmlzaFJlcXVlc3QpIHtcbiAgICBvcHRzLmZpbmlzaFJlcXVlc3QocmVxLCB3ZWJzb2NrZXQpO1xuICB9IGVsc2Uge1xuICAgIHJlcS5lbmQoKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXQgdGhlIGAnZXJyb3InYCBhbmQgYCdjbG9zZSdgIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0ge1dlYlNvY2tldH0gd2Vic29ja2V0IFRoZSBXZWJTb2NrZXQgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RXJyb3J9IFRoZSBlcnJvciB0byBlbWl0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbWl0RXJyb3JBbmRDbG9zZSh3ZWJzb2NrZXQsIGVycikge1xuICB3ZWJzb2NrZXQuX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBhc3NpZ25tZW50IGlzIHByYWN0aWNhbGx5IHVzZWxlc3MgYW5kIGlzIGRvbmUgb25seSBmb3JcbiAgLy8gY29uc2lzdGVuY3kuXG4gIC8vXG4gIHdlYnNvY2tldC5fZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgd2Vic29ja2V0LmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgd2Vic29ja2V0LmVtaXRDbG9zZSgpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGBuZXQuU29ja2V0YCBhbmQgaW5pdGlhdGUgYSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIENvbm5lY3Rpb24gb3B0aW9uc1xuICogQHJldHVybiB7bmV0LlNvY2tldH0gVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IHVzZWQgdG8gc3RhcnQgdGhlIGNvbm5lY3Rpb25cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG5ldENvbm5lY3Qob3B0aW9ucykge1xuICBvcHRpb25zLnBhdGggPSBvcHRpb25zLnNvY2tldFBhdGg7XG4gIHJldHVybiBuZXQuY29ubmVjdChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBgdGxzLlRMU1NvY2tldGAgYW5kIGluaXRpYXRlIGEgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBDb25uZWN0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm4ge3Rscy5UTFNTb2NrZXR9IFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCB1c2VkIHRvIHN0YXJ0IHRoZSBjb25uZWN0aW9uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0bHNDb25uZWN0KG9wdGlvbnMpIHtcbiAgb3B0aW9ucy5wYXRoID0gdW5kZWZpbmVkO1xuXG4gIGlmICghb3B0aW9ucy5zZXJ2ZXJuYW1lICYmIG9wdGlvbnMuc2VydmVybmFtZSAhPT0gJycpIHtcbiAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSBuZXQuaXNJUChvcHRpb25zLmhvc3QpID8gJycgOiBvcHRpb25zLmhvc3Q7XG4gIH1cblxuICByZXR1cm4gdGxzLmNvbm5lY3Qob3B0aW9ucyk7XG59XG5cbi8qKlxuICogQWJvcnQgdGhlIGhhbmRzaGFrZSBhbmQgZW1pdCBhbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0ge1dlYlNvY2tldH0gd2Vic29ja2V0IFRoZSBXZWJTb2NrZXQgaW5zdGFuY2VcbiAqIEBwYXJhbSB7KGh0dHAuQ2xpZW50UmVxdWVzdHxuZXQuU29ja2V0fHRscy5Tb2NrZXQpfSBzdHJlYW0gVGhlIHJlcXVlc3QgdG9cbiAqICAgICBhYm9ydCBvciB0aGUgc29ja2V0IHRvIGRlc3Ryb3lcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhYm9ydEhhbmRzaGFrZSh3ZWJzb2NrZXQsIHN0cmVhbSwgbWVzc2FnZSkge1xuICB3ZWJzb2NrZXQuX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0lORztcblxuICBjb25zdCBlcnIgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgYWJvcnRIYW5kc2hha2UpO1xuXG4gIGlmIChzdHJlYW0uc2V0SGVhZGVyKSB7XG4gICAgc3RyZWFtW2tBYm9ydGVkXSA9IHRydWU7XG4gICAgc3RyZWFtLmFib3J0KCk7XG5cbiAgICBpZiAoc3RyZWFtLnNvY2tldCAmJiAhc3RyZWFtLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIC8vXG4gICAgICAvLyBPbiBOb2RlLmpzID49IDE0LjMuMCBgcmVxdWVzdC5hYm9ydCgpYCBkb2VzIG5vdCBkZXN0cm95IHRoZSBzb2NrZXQgaWZcbiAgICAgIC8vIGNhbGxlZCBhZnRlciB0aGUgcmVxdWVzdCBjb21wbGV0ZWQuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvaXNzdWVzLzE4NjkuXG4gICAgICAvL1xuICAgICAgc3RyZWFtLnNvY2tldC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZSwgd2Vic29ja2V0LCBlcnIpO1xuICB9IGVsc2Uge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycik7XG4gICAgc3RyZWFtLm9uY2UoJ2Vycm9yJywgd2Vic29ja2V0LmVtaXQuYmluZCh3ZWJzb2NrZXQsICdlcnJvcicpKTtcbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCB3ZWJzb2NrZXQuZW1pdENsb3NlLmJpbmQod2Vic29ja2V0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGBwaW5nKClgLCBgcG9uZygpYCwgb3IgYHNlbmQoKWAgbWV0aG9kcyBhcmUgY2FsbGVkXG4gKiB3aGVuIHRoZSBgcmVhZHlTdGF0ZWAgYXR0cmlidXRlIGlzIGBDTE9TSU5HYCBvciBgQ0xPU0VEYC5cbiAqXG4gKiBAcGFyYW0ge1dlYlNvY2tldH0gd2Vic29ja2V0IFRoZSBXZWJTb2NrZXQgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Kn0gW2RhdGFdIFRoZSBkYXRhIHRvIHNlbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYl0gQ2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNlbmRBZnRlckNsb3NlKHdlYnNvY2tldCwgZGF0YSwgY2IpIHtcbiAgaWYgKGRhdGEpIHtcbiAgICBjb25zdCBsZW5ndGggPSBpc0Jsb2IoZGF0YSkgPyBkYXRhLnNpemUgOiB0b0J1ZmZlcihkYXRhKS5sZW5ndGg7XG5cbiAgICAvL1xuICAgIC8vIFRoZSBgX2J1ZmZlcmVkQW1vdW50YCBwcm9wZXJ0eSBpcyB1c2VkIG9ubHkgd2hlbiB0aGUgcGVlciBpcyBhIGNsaWVudCBhbmRcbiAgICAvLyB0aGUgb3BlbmluZyBoYW5kc2hha2UgZmFpbHMuIFVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMsIGluIGZhY3QsIHRoZVxuICAgIC8vIGBzZXRTb2NrZXQoKWAgbWV0aG9kIGlzIG5vdCBjYWxsZWQsIHNvIHRoZSBgX3NvY2tldGAgYW5kIGBfc2VuZGVyYFxuICAgIC8vIHByb3BlcnRpZXMgYXJlIHNldCB0byBgbnVsbGAuXG4gICAgLy9cbiAgICBpZiAod2Vic29ja2V0Ll9zb2NrZXQpIHdlYnNvY2tldC5fc2VuZGVyLl9idWZmZXJlZEJ5dGVzICs9IGxlbmd0aDtcbiAgICBlbHNlIHdlYnNvY2tldC5fYnVmZmVyZWRBbW91bnQgKz0gbGVuZ3RoO1xuICB9XG5cbiAgaWYgKGNiKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFxuICAgICAgYFdlYlNvY2tldCBpcyBub3Qgb3BlbjogcmVhZHlTdGF0ZSAke3dlYnNvY2tldC5yZWFkeVN0YXRlfSBgICtcbiAgICAgICAgYCgke3JlYWR5U3RhdGVzW3dlYnNvY2tldC5yZWFkeVN0YXRlXX0pYFxuICAgICk7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgYFJlY2VpdmVyYCBgJ2NvbmNsdWRlJ2AgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGUgVGhlIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcmVhc29uIFRoZSByZWFzb24gZm9yIGNsb3NpbmdcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVyT25Db25jbHVkZShjb2RlLCByZWFzb24pIHtcbiAgY29uc3Qgd2Vic29ja2V0ID0gdGhpc1trV2ViU29ja2V0XTtcblxuICB3ZWJzb2NrZXQuX2Nsb3NlRnJhbWVSZWNlaXZlZCA9IHRydWU7XG4gIHdlYnNvY2tldC5fY2xvc2VNZXNzYWdlID0gcmVhc29uO1xuICB3ZWJzb2NrZXQuX2Nsb3NlQ29kZSA9IGNvZGU7XG5cbiAgaWYgKHdlYnNvY2tldC5fc29ja2V0W2tXZWJTb2NrZXRdID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICB3ZWJzb2NrZXQuX3NvY2tldC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIHNvY2tldE9uRGF0YSk7XG4gIHByb2Nlc3MubmV4dFRpY2socmVzdW1lLCB3ZWJzb2NrZXQuX3NvY2tldCk7XG5cbiAgaWYgKGNvZGUgPT09IDEwMDUpIHdlYnNvY2tldC5jbG9zZSgpO1xuICBlbHNlIHdlYnNvY2tldC5jbG9zZShjb2RlLCByZWFzb24pO1xufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgYFJlY2VpdmVyYCBgJ2RyYWluJ2AgZXZlbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZXJPbkRyYWluKCkge1xuICBjb25zdCB3ZWJzb2NrZXQgPSB0aGlzW2tXZWJTb2NrZXRdO1xuXG4gIGlmICghd2Vic29ja2V0LmlzUGF1c2VkKSB3ZWJzb2NrZXQuX3NvY2tldC5yZXN1bWUoKTtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2YgdGhlIGBSZWNlaXZlcmAgYCdlcnJvcidgIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFJhbmdlRXJyb3J8RXJyb3IpfSBlcnIgVGhlIGVtaXR0ZWQgZXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVyT25FcnJvcihlcnIpIHtcbiAgY29uc3Qgd2Vic29ja2V0ID0gdGhpc1trV2ViU29ja2V0XTtcblxuICBpZiAod2Vic29ja2V0Ll9zb2NrZXRba1dlYlNvY2tldF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHdlYnNvY2tldC5fc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgc29ja2V0T25EYXRhKTtcblxuICAgIC8vXG4gICAgLy8gT24gTm9kZS5qcyA8IDE0LjAuMCB0aGUgYCdlcnJvcidgIGV2ZW50IGlzIGVtaXR0ZWQgc3luY2hyb25vdXNseS4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvaXNzdWVzLzE5NDAuXG4gICAgLy9cbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgd2Vic29ja2V0Ll9zb2NrZXQpO1xuXG4gICAgd2Vic29ja2V0LmNsb3NlKGVycltrU3RhdHVzQ29kZV0pO1xuICB9XG5cbiAgaWYgKCF3ZWJzb2NrZXQuX2Vycm9yRW1pdHRlZCkge1xuICAgIHdlYnNvY2tldC5fZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICB3ZWJzb2NrZXQuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGxpc3RlbmVyIG9mIHRoZSBgUmVjZWl2ZXJgIGAnZmluaXNoJ2AgZXZlbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZXJPbkZpbmlzaCgpIHtcbiAgdGhpc1trV2ViU29ja2V0XS5lbWl0Q2xvc2UoKTtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2YgdGhlIGBSZWNlaXZlcmAgYCdtZXNzYWdlJ2AgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXlCdWZmZXJ8QnVmZmVyW10pfSBkYXRhIFRoZSBtZXNzYWdlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzQmluYXJ5IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBtZXNzYWdlIGlzIGJpbmFyeSBvciBub3RcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVyT25NZXNzYWdlKGRhdGEsIGlzQmluYXJ5KSB7XG4gIHRoaXNba1dlYlNvY2tldF0uZW1pdCgnbWVzc2FnZScsIGRhdGEsIGlzQmluYXJ5KTtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2YgdGhlIGBSZWNlaXZlcmAgYCdwaW5nJ2AgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgVGhlIGRhdGEgaW5jbHVkZWQgaW4gdGhlIHBpbmcgZnJhbWVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVyT25QaW5nKGRhdGEpIHtcbiAgY29uc3Qgd2Vic29ja2V0ID0gdGhpc1trV2ViU29ja2V0XTtcblxuICBpZiAod2Vic29ja2V0Ll9hdXRvUG9uZykgd2Vic29ja2V0LnBvbmcoZGF0YSwgIXRoaXMuX2lzU2VydmVyLCBOT09QKTtcbiAgd2Vic29ja2V0LmVtaXQoJ3BpbmcnLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2YgdGhlIGBSZWNlaXZlcmAgYCdwb25nJ2AgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgVGhlIGRhdGEgaW5jbHVkZWQgaW4gdGhlIHBvbmcgZnJhbWVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVyT25Qb25nKGRhdGEpIHtcbiAgdGhpc1trV2ViU29ja2V0XS5lbWl0KCdwb25nJywgZGF0YSk7XG59XG5cbi8qKlxuICogUmVzdW1lIGEgcmVhZGFibGUgc3RyZWFtXG4gKlxuICogQHBhcmFtIHtSZWFkYWJsZX0gc3RyZWFtIFRoZSByZWFkYWJsZSBzdHJlYW1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0pIHtcbiAgc3RyZWFtLnJlc3VtZSgpO1xufVxuXG4vKipcbiAqIFRoZSBgU2VuZGVyYCBlcnJvciBldmVudCBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IFRoZSBlcnJvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2VuZGVyT25FcnJvcihlcnIpIHtcbiAgY29uc3Qgd2Vic29ja2V0ID0gdGhpc1trV2ViU29ja2V0XTtcblxuICBpZiAod2Vic29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DTE9TRUQpIHJldHVybjtcbiAgaWYgKHdlYnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgIHdlYnNvY2tldC5fcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TSU5HO1xuICAgIHNldENsb3NlVGltZXIod2Vic29ja2V0KTtcbiAgfVxuXG4gIC8vXG4gIC8vIGBzb2NrZXQuZW5kKClgIGlzIHVzZWQgaW5zdGVhZCBvZiBgc29ja2V0LmRlc3Ryb3koKWAgdG8gYWxsb3cgdGhlIG90aGVyXG4gIC8vIHBlZXIgdG8gZmluaXNoIHNlbmRpbmcgcXVldWVkIGRhdGEuIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IGEgdGltZXIgaGVyZVxuICAvLyBiZWNhdXNlIGBDTE9TSU5HYCBtZWFucyB0aGF0IGl0IGlzIGFscmVhZHkgc2V0IG9yIG5vdCBuZWVkZWQuXG4gIC8vXG4gIHRoaXMuX3NvY2tldC5lbmQoKTtcblxuICBpZiAoIXdlYnNvY2tldC5fZXJyb3JFbWl0dGVkKSB7XG4gICAgd2Vic29ja2V0Ll9lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHdlYnNvY2tldC5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgYSB0aW1lciB0byBkZXN0cm95IHRoZSB1bmRlcmx5aW5nIHJhdyBzb2NrZXQgb2YgYSBXZWJTb2NrZXQuXG4gKlxuICogQHBhcmFtIHtXZWJTb2NrZXR9IHdlYnNvY2tldCBUaGUgV2ViU29ja2V0IGluc3RhbmNlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRDbG9zZVRpbWVyKHdlYnNvY2tldCkge1xuICB3ZWJzb2NrZXQuX2Nsb3NlVGltZXIgPSBzZXRUaW1lb3V0KFxuICAgIHdlYnNvY2tldC5fc29ja2V0LmRlc3Ryb3kuYmluZCh3ZWJzb2NrZXQuX3NvY2tldCksXG4gICAgY2xvc2VUaW1lb3V0XG4gICk7XG59XG5cbi8qKlxuICogVGhlIGxpc3RlbmVyIG9mIHRoZSBzb2NrZXQgYCdjbG9zZSdgIGV2ZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNvY2tldE9uQ2xvc2UoKSB7XG4gIGNvbnN0IHdlYnNvY2tldCA9IHRoaXNba1dlYlNvY2tldF07XG5cbiAgdGhpcy5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBzb2NrZXRPbkNsb3NlKTtcbiAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIHNvY2tldE9uRGF0YSk7XG4gIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHNvY2tldE9uRW5kKTtcblxuICB3ZWJzb2NrZXQuX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0lORztcblxuICBsZXQgY2h1bms7XG5cbiAgLy9cbiAgLy8gVGhlIGNsb3NlIGZyYW1lIG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgb3IgdGhlIGAnZW5kJ2AgZXZlbnQgZW1pdHRlZCxcbiAgLy8gZm9yIGV4YW1wbGUsIGlmIHRoZSBzb2NrZXQgd2FzIGRlc3Ryb3llZCBkdWUgdG8gYW4gZXJyb3IuIEVuc3VyZSB0aGF0IHRoZVxuICAvLyBgcmVjZWl2ZXJgIHN0cmVhbSBpcyBjbG9zZWQgYWZ0ZXIgd3JpdGluZyBhbnkgcmVtYWluaW5nIGJ1ZmZlcmVkIGRhdGEgdG9cbiAgLy8gaXQuIElmIHRoZSByZWFkYWJsZSBzaWRlIG9mIHRoZSBzb2NrZXQgaXMgaW4gZmxvd2luZyBtb2RlIHRoZW4gdGhlcmUgaXMgbm9cbiAgLy8gYnVmZmVyZWQgZGF0YSBhcyBldmVyeXRoaW5nIGhhcyBiZWVuIGFscmVhZHkgd3JpdHRlbiBhbmQgYHJlYWRhYmxlLnJlYWQoKWBcbiAgLy8gd2lsbCByZXR1cm4gYG51bGxgLiBJZiBpbnN0ZWFkLCB0aGUgc29ja2V0IGlzIHBhdXNlZCwgYW55IHBvc3NpYmxlIGJ1ZmZlcmVkXG4gIC8vIGRhdGEgd2lsbCBiZSByZWFkIGFzIGEgc2luZ2xlIGNodW5rLlxuICAvL1xuICBpZiAoXG4gICAgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCAmJlxuICAgICF3ZWJzb2NrZXQuX2Nsb3NlRnJhbWVSZWNlaXZlZCAmJlxuICAgICF3ZWJzb2NrZXQuX3JlY2VpdmVyLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCAmJlxuICAgIChjaHVuayA9IHdlYnNvY2tldC5fc29ja2V0LnJlYWQoKSkgIT09IG51bGxcbiAgKSB7XG4gICAgd2Vic29ja2V0Ll9yZWNlaXZlci53cml0ZShjaHVuayk7XG4gIH1cblxuICB3ZWJzb2NrZXQuX3JlY2VpdmVyLmVuZCgpO1xuXG4gIHRoaXNba1dlYlNvY2tldF0gPSB1bmRlZmluZWQ7XG5cbiAgY2xlYXJUaW1lb3V0KHdlYnNvY2tldC5fY2xvc2VUaW1lcik7XG5cbiAgaWYgKFxuICAgIHdlYnNvY2tldC5fcmVjZWl2ZXIuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgfHxcbiAgICB3ZWJzb2NrZXQuX3JlY2VpdmVyLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZFxuICApIHtcbiAgICB3ZWJzb2NrZXQuZW1pdENsb3NlKCk7XG4gIH0gZWxzZSB7XG4gICAgd2Vic29ja2V0Ll9yZWNlaXZlci5vbignZXJyb3InLCByZWNlaXZlck9uRmluaXNoKTtcbiAgICB3ZWJzb2NrZXQuX3JlY2VpdmVyLm9uKCdmaW5pc2gnLCByZWNlaXZlck9uRmluaXNoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgc29ja2V0IGAnZGF0YSdgIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBjaHVuayBBIGNodW5rIG9mIGRhdGFcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNvY2tldE9uRGF0YShjaHVuaykge1xuICBpZiAoIXRoaXNba1dlYlNvY2tldF0uX3JlY2VpdmVyLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0ZW5lciBvZiB0aGUgc29ja2V0IGAnZW5kJ2AgZXZlbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc29ja2V0T25FbmQoKSB7XG4gIGNvbnN0IHdlYnNvY2tldCA9IHRoaXNba1dlYlNvY2tldF07XG5cbiAgd2Vic29ja2V0Ll9yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NJTkc7XG4gIHdlYnNvY2tldC5fcmVjZWl2ZXIuZW5kKCk7XG4gIHRoaXMuZW5kKCk7XG59XG5cbi8qKlxuICogVGhlIGxpc3RlbmVyIG9mIHRoZSBzb2NrZXQgYCdlcnJvcidgIGV2ZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNvY2tldE9uRXJyb3IoKSB7XG4gIGNvbnN0IHdlYnNvY2tldCA9IHRoaXNba1dlYlNvY2tldF07XG5cbiAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBzb2NrZXRPbkVycm9yKTtcbiAgdGhpcy5vbignZXJyb3InLCBOT09QKTtcblxuICBpZiAod2Vic29ja2V0KSB7XG4gICAgd2Vic29ja2V0Ll9yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NJTkc7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IHRva2VuQ2hhcnMgfSA9IHJlcXVpcmUoJy4vdmFsaWRhdGlvbicpO1xuXG4vKipcbiAqIFBhcnNlcyB0aGUgYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGhlYWRlciBpbnRvIGEgc2V0IG9mIHN1YnByb3RvY29sIG5hbWVzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXIgVGhlIGZpZWxkIHZhbHVlIG9mIHRoZSBoZWFkZXJcbiAqIEByZXR1cm4ge1NldH0gVGhlIHN1YnByb3RvY29sIG5hbWVzXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKGhlYWRlcikge1xuICBjb25zdCBwcm90b2NvbHMgPSBuZXcgU2V0KCk7XG4gIGxldCBzdGFydCA9IC0xO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBpID0gMDtcblxuICBmb3IgKGk7IGkgPCBoZWFkZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gaGVhZGVyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICBpZiAoZW5kID09PSAtMSAmJiB0b2tlbkNoYXJzW2NvZGVdID09PSAxKSB7XG4gICAgICBpZiAoc3RhcnQgPT09IC0xKSBzdGFydCA9IGk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgIT09IDAgJiZcbiAgICAgIChjb2RlID09PSAweDIwIC8qICcgJyAqLyB8fCBjb2RlID09PSAweDA5KSAvKiAnXFx0JyAqL1xuICAgICkge1xuICAgICAgaWYgKGVuZCA9PT0gLTEgJiYgc3RhcnQgIT09IC0xKSBlbmQgPSBpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgyYyAvKiAnLCcgKi8pIHtcbiAgICAgIGlmIChzdGFydCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmQgPT09IC0xKSBlbmQgPSBpO1xuXG4gICAgICBjb25zdCBwcm90b2NvbCA9IGhlYWRlci5zbGljZShzdGFydCwgZW5kKTtcblxuICAgICAgaWYgKHByb3RvY29scy5oYXMocHJvdG9jb2wpKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgVGhlIFwiJHtwcm90b2NvbH1cIiBzdWJwcm90b2NvbCBpcyBkdXBsaWNhdGVkYCk7XG4gICAgICB9XG5cbiAgICAgIHByb3RvY29scy5hZGQocHJvdG9jb2wpO1xuICAgICAgc3RhcnQgPSBlbmQgPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhdCBpbmRleCAke2l9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcpO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBoZWFkZXIuc2xpY2Uoc3RhcnQsIGkpO1xuXG4gIGlmIChwcm90b2NvbHMuaGFzKHByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgVGhlIFwiJHtwcm90b2NvbH1cIiBzdWJwcm90b2NvbCBpcyBkdXBsaWNhdGVkYCk7XG4gIH1cblxuICBwcm90b2NvbHMuYWRkKHByb3RvY29sKTtcbiAgcmV0dXJuIHByb3RvY29scztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHBhcnNlIH07XG4iLAogICAgIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwgeyBcInZhcnNJZ25vcmVQYXR0ZXJuXCI6IFwiXkR1cGxleCRcIiwgXCJjYXVnaHRFcnJvcnNcIjogXCJub25lXCIgfV0gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5jb25zdCB7IER1cGxleCB9ID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCB7IGNyZWF0ZUhhc2ggfSA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuXG5jb25zdCBleHRlbnNpb24gPSByZXF1aXJlKCcuL2V4dGVuc2lvbicpO1xuY29uc3QgUGVyTWVzc2FnZURlZmxhdGUgPSByZXF1aXJlKCcuL3Blcm1lc3NhZ2UtZGVmbGF0ZScpO1xuY29uc3Qgc3VicHJvdG9jb2wgPSByZXF1aXJlKCcuL3N1YnByb3RvY29sJyk7XG5jb25zdCBXZWJTb2NrZXQgPSByZXF1aXJlKCcuL3dlYnNvY2tldCcpO1xuY29uc3QgeyBHVUlELCBrV2ViU29ja2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5jb25zdCBrZXlSZWdleCA9IC9eWysvMC05QS1aYS16XXsyMn09PSQvO1xuXG5jb25zdCBSVU5OSU5HID0gMDtcbmNvbnN0IENMT1NJTkcgPSAxO1xuY29uc3QgQ0xPU0VEID0gMjtcblxuLyoqXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgYSBXZWJTb2NrZXQgc2VydmVyLlxuICpcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICovXG5jbGFzcyBXZWJTb2NrZXRTZXJ2ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlIGEgYFdlYlNvY2tldFNlcnZlcmAgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbG93U3luY2hyb25vdXNFdmVudHM9dHJ1ZV0gU3BlY2lmaWVzIHdoZXRoZXJcbiAgICogICAgIGFueSBvZiB0aGUgYCdtZXNzYWdlJ2AsIGAncGluZydgLCBhbmQgYCdwb25nJ2AgZXZlbnRzIGNhbiBiZSBlbWl0dGVkXG4gICAqICAgICBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSB0aWNrXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYXV0b1Bvbmc9dHJ1ZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvXG4gICAqICAgICBhdXRvbWF0aWNhbGx5IHNlbmQgYSBwb25nIGluIHJlc3BvbnNlIHRvIGEgcGluZ1xuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuYmFja2xvZz01MTFdIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgcXVldWUgb2ZcbiAgICogICAgIHBlbmRpbmcgY29ubmVjdGlvbnNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5jbGllbnRUcmFja2luZz10cnVlXSBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG9cbiAgICogICAgIHRyYWNrIGNsaWVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuaGFuZGxlUHJvdG9jb2xzXSBBIGhvb2sgdG8gaGFuZGxlIHByb3RvY29sc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaG9zdF0gVGhlIGhvc3RuYW1lIHdoZXJlIHRvIGJpbmQgdGhlIHNlcnZlclxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4UGF5bG9hZD0xMDQ4NTc2MDBdIFRoZSBtYXhpbXVtIGFsbG93ZWQgbWVzc2FnZVxuICAgKiAgICAgc2l6ZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm5vU2VydmVyPWZhbHNlXSBFbmFibGUgbm8gc2VydmVyIG1vZGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBhdGhdIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb25zIG1hdGNoaW5nIHRoaXMgcGF0aFxuICAgKiBAcGFyYW0geyhCb29sZWFufE9iamVjdCl9IFtvcHRpb25zLnBlck1lc3NhZ2VEZWZsYXRlPWZhbHNlXSBFbmFibGUvZGlzYWJsZVxuICAgKiAgICAgcGVybWVzc2FnZS1kZWZsYXRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5wb3J0XSBUaGUgcG9ydCB3aGVyZSB0byBiaW5kIHRoZSBzZXJ2ZXJcbiAgICogQHBhcmFtIHsoaHR0cC5TZXJ2ZXJ8aHR0cHMuU2VydmVyKX0gW29wdGlvbnMuc2VydmVyXSBBIHByZS1jcmVhdGVkIEhUVFAvU1xuICAgKiAgICAgc2VydmVyIHRvIHVzZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNraXBVVEY4VmFsaWRhdGlvbj1mYWxzZV0gU3BlY2lmaWVzIHdoZXRoZXIgb3JcbiAgICogICAgIG5vdCB0byBza2lwIFVURi04IHZhbGlkYXRpb24gZm9yIHRleHQgYW5kIGNsb3NlIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZlcmlmeUNsaWVudF0gQSBob29rIHRvIHJlamVjdCBjb25uZWN0aW9uc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5XZWJTb2NrZXQ9V2ViU29ja2V0XSBTcGVjaWZpZXMgdGhlIGBXZWJTb2NrZXRgXG4gICAqICAgICBjbGFzcyB0byB1c2UuIEl0IG11c3QgYmUgdGhlIGBXZWJTb2NrZXRgIGNsYXNzIG9yIGNsYXNzIHRoYXQgZXh0ZW5kcyBpdFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIEEgbGlzdGVuZXIgZm9yIHRoZSBgbGlzdGVuaW5nYCBldmVudFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBzdXBlcigpO1xuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGFsbG93U3luY2hyb25vdXNFdmVudHM6IHRydWUsXG4gICAgICBhdXRvUG9uZzogdHJ1ZSxcbiAgICAgIG1heFBheWxvYWQ6IDEwMCAqIDEwMjQgKiAxMDI0LFxuICAgICAgc2tpcFVURjhWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICAgIHBlck1lc3NhZ2VEZWZsYXRlOiBmYWxzZSxcbiAgICAgIGhhbmRsZVByb3RvY29sczogbnVsbCxcbiAgICAgIGNsaWVudFRyYWNraW5nOiB0cnVlLFxuICAgICAgdmVyaWZ5Q2xpZW50OiBudWxsLFxuICAgICAgbm9TZXJ2ZXI6IGZhbHNlLFxuICAgICAgYmFja2xvZzogbnVsbCwgLy8gdXNlIGRlZmF1bHQgKDUxMSBhcyBpbXBsZW1lbnRlZCBpbiBuZXQuanMpXG4gICAgICBzZXJ2ZXI6IG51bGwsXG4gICAgICBob3N0OiBudWxsLFxuICAgICAgcGF0aDogbnVsbCxcbiAgICAgIHBvcnQ6IG51bGwsXG4gICAgICBXZWJTb2NrZXQsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIGlmIChcbiAgICAgIChvcHRpb25zLnBvcnQgPT0gbnVsbCAmJiAhb3B0aW9ucy5zZXJ2ZXIgJiYgIW9wdGlvbnMubm9TZXJ2ZXIpIHx8XG4gICAgICAob3B0aW9ucy5wb3J0ICE9IG51bGwgJiYgKG9wdGlvbnMuc2VydmVyIHx8IG9wdGlvbnMubm9TZXJ2ZXIpKSB8fFxuICAgICAgKG9wdGlvbnMuc2VydmVyICYmIG9wdGlvbnMubm9TZXJ2ZXIpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnT25lIGFuZCBvbmx5IG9uZSBvZiB0aGUgXCJwb3J0XCIsIFwic2VydmVyXCIsIG9yIFwibm9TZXJ2ZXJcIiBvcHRpb25zICcgK1xuICAgICAgICAgICdtdXN0IGJlIHNwZWNpZmllZCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucG9ydCAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9zZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcigocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGh0dHAuU1RBVFVTX0NPREVTWzQyNl07XG5cbiAgICAgICAgcmVzLndyaXRlSGVhZCg0MjYsIHtcbiAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuZW5kKGJvZHkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9zZXJ2ZXIubGlzdGVuKFxuICAgICAgICBvcHRpb25zLnBvcnQsXG4gICAgICAgIG9wdGlvbnMuaG9zdCxcbiAgICAgICAgb3B0aW9ucy5iYWNrbG9nLFxuICAgICAgICBjYWxsYmFja1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc2VydmVyKSB7XG4gICAgICB0aGlzLl9zZXJ2ZXIgPSBvcHRpb25zLnNlcnZlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2VydmVyKSB7XG4gICAgICBjb25zdCBlbWl0Q29ubmVjdGlvbiA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdjb25uZWN0aW9uJyk7XG5cbiAgICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVycyA9IGFkZExpc3RlbmVycyh0aGlzLl9zZXJ2ZXIsIHtcbiAgICAgICAgbGlzdGVuaW5nOiB0aGlzLmVtaXQuYmluZCh0aGlzLCAnbGlzdGVuaW5nJyksXG4gICAgICAgIGVycm9yOiB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKSxcbiAgICAgICAgdXBncmFkZTogKHJlcSwgc29ja2V0LCBoZWFkKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVVcGdyYWRlKHJlcSwgc29ja2V0LCBoZWFkLCBlbWl0Q29ubmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBlck1lc3NhZ2VEZWZsYXRlID09PSB0cnVlKSBvcHRpb25zLnBlck1lc3NhZ2VEZWZsYXRlID0ge307XG4gICAgaWYgKG9wdGlvbnMuY2xpZW50VHJhY2tpbmcpIHtcbiAgICAgIHRoaXMuY2xpZW50cyA9IG5ldyBTZXQoKTtcbiAgICAgIHRoaXMuX3Nob3VsZEVtaXRDbG9zZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5fc3RhdGUgPSBSVU5OSU5HO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJvdW5kIGFkZHJlc3MsIHRoZSBhZGRyZXNzIGZhbWlseSBuYW1lLCBhbmQgcG9ydCBvZiB0aGUgc2VydmVyXG4gICAqIGFzIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlmIGxpc3RlbmluZyBvbiBhbiBJUCBzb2NrZXQuXG4gICAqIElmIHRoZSBzZXJ2ZXIgaXMgbGlzdGVuaW5nIG9uIGEgcGlwZSBvciBVTklYIGRvbWFpbiBzb2NrZXQsIHRoZSBuYW1lIGlzXG4gICAqIHJldHVybmVkIGFzIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJuIHsoT2JqZWN0fFN0cmluZ3xudWxsKX0gVGhlIGFkZHJlc3Mgb2YgdGhlIHNlcnZlclxuICAgKiBAcHVibGljXG4gICAqL1xuICBhZGRyZXNzKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubm9TZXJ2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNlcnZlciBpcyBvcGVyYXRpbmcgaW4gXCJub1NlcnZlclwiIG1vZGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NlcnZlcikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlci5hZGRyZXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgc2VydmVyIGZyb20gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucyBhbmQgZW1pdCB0aGUgYCdjbG9zZSdgIGV2ZW50XG4gICAqIHdoZW4gYWxsIGV4aXN0aW5nIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYl0gQSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgdGhlIGAnY2xvc2UnYCBldmVudFxuICAgKiBAcHVibGljXG4gICAqL1xuICBjbG9zZShjYikge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gQ0xPU0VEKSB7XG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICBjYihuZXcgRXJyb3IoJ1RoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmcnKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZSwgdGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNiKSB0aGlzLm9uY2UoJ2Nsb3NlJywgY2IpO1xuXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBDTE9TSU5HKSByZXR1cm47XG4gICAgdGhpcy5fc3RhdGUgPSBDTE9TSU5HO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub1NlcnZlciB8fCB0aGlzLm9wdGlvbnMuc2VydmVyKSB7XG4gICAgICBpZiAodGhpcy5fc2VydmVyKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVMaXN0ZW5lcnMgPSB0aGlzLl9zZXJ2ZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jbGllbnRzKSB7XG4gICAgICAgIGlmICghdGhpcy5jbGllbnRzLnNpemUpIHtcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc2hvdWxkRW1pdENsb3NlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2UsIHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLl9zZXJ2ZXI7XG5cbiAgICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVycygpO1xuICAgICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXJzID0gdGhpcy5fc2VydmVyID0gbnVsbDtcblxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBIVFRQL1Mgc2VydmVyIHdhcyBjcmVhdGVkIGludGVybmFsbHkuIENsb3NlIGl0LCBhbmQgcmVseSBvbiBpdHNcbiAgICAgIC8vIGAnY2xvc2UnYCBldmVudC5cbiAgICAgIC8vXG4gICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICBlbWl0Q2xvc2UodGhpcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VlIGlmIGEgZ2l2ZW4gcmVxdWVzdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGlzIHNlcnZlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtodHRwLkluY29taW5nTWVzc2FnZX0gcmVxIFJlcXVlc3Qgb2JqZWN0IHRvIGluc3BlY3RcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSByZXF1ZXN0IGlzIHZhbGlkLCBlbHNlIGBmYWxzZWBcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2hvdWxkSGFuZGxlKHJlcSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGF0aCkge1xuICAgICAgY29uc3QgaW5kZXggPSByZXEudXJsLmluZGV4T2YoJz8nKTtcbiAgICAgIGNvbnN0IHBhdGhuYW1lID0gaW5kZXggIT09IC0xID8gcmVxLnVybC5zbGljZSgwLCBpbmRleCkgOiByZXEudXJsO1xuXG4gICAgICBpZiAocGF0aG5hbWUgIT09IHRoaXMub3B0aW9ucy5wYXRoKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgSFRUUCBVcGdyYWRlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7aHR0cC5JbmNvbWluZ01lc3NhZ2V9IHJlcSBUaGUgcmVxdWVzdCBvYmplY3RcbiAgICogQHBhcmFtIHtEdXBsZXh9IHNvY2tldCBUaGUgbmV0d29yayBzb2NrZXQgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCBjbGllbnRcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGhlYWQgVGhlIGZpcnN0IHBhY2tldCBvZiB0aGUgdXBncmFkZWQgc3RyZWFtXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIENhbGxiYWNrXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGhhbmRsZVVwZ3JhZGUocmVxLCBzb2NrZXQsIGhlYWQsIGNiKSB7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIHNvY2tldE9uRXJyb3IpO1xuXG4gICAgY29uc3Qga2V5ID0gcmVxLmhlYWRlcnNbJ3NlYy13ZWJzb2NrZXQta2V5J107XG4gICAgY29uc3QgdXBncmFkZSA9IHJlcS5oZWFkZXJzLnVwZ3JhZGU7XG4gICAgY29uc3QgdmVyc2lvbiA9ICtyZXEuaGVhZGVyc1snc2VjLXdlYnNvY2tldC12ZXJzaW9uJ107XG5cbiAgICBpZiAocmVxLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnSW52YWxpZCBIVFRQIG1ldGhvZCc7XG4gICAgICBhYm9ydEhhbmRzaGFrZU9yRW1pdHdzQ2xpZW50RXJyb3IodGhpcywgcmVxLCBzb2NrZXQsIDQwNSwgbWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUgPT09IHVuZGVmaW5lZCB8fCB1cGdyYWRlLnRvTG93ZXJDYXNlKCkgIT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ0ludmFsaWQgVXBncmFkZSBoZWFkZXInO1xuICAgICAgYWJvcnRIYW5kc2hha2VPckVtaXR3c0NsaWVudEVycm9yKHRoaXMsIHJlcSwgc29ja2V0LCA0MDAsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCAha2V5UmVnZXgudGVzdChrZXkpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ01pc3Npbmcgb3IgaW52YWxpZCBTZWMtV2ViU29ja2V0LUtleSBoZWFkZXInO1xuICAgICAgYWJvcnRIYW5kc2hha2VPckVtaXR3c0NsaWVudEVycm9yKHRoaXMsIHJlcSwgc29ja2V0LCA0MDAsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICE9PSA4ICYmIHZlcnNpb24gIT09IDEzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ01pc3Npbmcgb3IgaW52YWxpZCBTZWMtV2ViU29ja2V0LVZlcnNpb24gaGVhZGVyJztcbiAgICAgIGFib3J0SGFuZHNoYWtlT3JFbWl0d3NDbGllbnRFcnJvcih0aGlzLCByZXEsIHNvY2tldCwgNDAwLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2hvdWxkSGFuZGxlKHJlcSkpIHtcbiAgICAgIGFib3J0SGFuZHNoYWtlKHNvY2tldCwgNDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWNXZWJTb2NrZXRQcm90b2NvbCA9IHJlcS5oZWFkZXJzWydzZWMtd2Vic29ja2V0LXByb3RvY29sJ107XG4gICAgbGV0IHByb3RvY29scyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChzZWNXZWJTb2NrZXRQcm90b2NvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm90b2NvbHMgPSBzdWJwcm90b2NvbC5wYXJzZShzZWNXZWJTb2NrZXRQcm90b2NvbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgaGVhZGVyJztcbiAgICAgICAgYWJvcnRIYW5kc2hha2VPckVtaXR3c0NsaWVudEVycm9yKHRoaXMsIHJlcSwgc29ja2V0LCA0MDAsIG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjV2ViU29ja2V0RXh0ZW5zaW9ucyA9IHJlcS5oZWFkZXJzWydzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnXTtcbiAgICBjb25zdCBleHRlbnNpb25zID0ge307XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMucGVyTWVzc2FnZURlZmxhdGUgJiZcbiAgICAgIHNlY1dlYlNvY2tldEV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgcGVyTWVzc2FnZURlZmxhdGUgPSBuZXcgUGVyTWVzc2FnZURlZmxhdGUoXG4gICAgICAgIHRoaXMub3B0aW9ucy5wZXJNZXNzYWdlRGVmbGF0ZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heFBheWxvYWRcbiAgICAgICk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9mZmVycyA9IGV4dGVuc2lvbi5wYXJzZShzZWNXZWJTb2NrZXRFeHRlbnNpb25zKTtcblxuICAgICAgICBpZiAob2ZmZXJzW1Blck1lc3NhZ2VEZWZsYXRlLmV4dGVuc2lvbk5hbWVdKSB7XG4gICAgICAgICAgcGVyTWVzc2FnZURlZmxhdGUuYWNjZXB0KG9mZmVyc1tQZXJNZXNzYWdlRGVmbGF0ZS5leHRlbnNpb25OYW1lXSk7XG4gICAgICAgICAgZXh0ZW5zaW9uc1tQZXJNZXNzYWdlRGVmbGF0ZS5leHRlbnNpb25OYW1lXSA9IHBlck1lc3NhZ2VEZWZsYXRlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgJ0ludmFsaWQgb3IgdW5hY2NlcHRhYmxlIFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXInO1xuICAgICAgICBhYm9ydEhhbmRzaGFrZU9yRW1pdHdzQ2xpZW50RXJyb3IodGhpcywgcmVxLCBzb2NrZXQsIDQwMCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE9wdGlvbmFsbHkgY2FsbCBleHRlcm5hbCBjbGllbnQgdmVyaWZpY2F0aW9uIGhhbmRsZXIuXG4gICAgLy9cbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmlmeUNsaWVudCkge1xuICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgb3JpZ2luOlxuICAgICAgICAgIHJlcS5oZWFkZXJzW2Ake3ZlcnNpb24gPT09IDggPyAnc2VjLXdlYnNvY2tldC1vcmlnaW4nIDogJ29yaWdpbid9YF0sXG4gICAgICAgIHNlY3VyZTogISEocmVxLnNvY2tldC5hdXRob3JpemVkIHx8IHJlcS5zb2NrZXQuZW5jcnlwdGVkKSxcbiAgICAgICAgcmVxXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnZlcmlmeUNsaWVudC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnZlcmlmeUNsaWVudChpbmZvLCAodmVyaWZpZWQsIGNvZGUsIG1lc3NhZ2UsIGhlYWRlcnMpID0+IHtcbiAgICAgICAgICBpZiAoIXZlcmlmaWVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYWJvcnRIYW5kc2hha2Uoc29ja2V0LCBjb2RlIHx8IDQwMSwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb21wbGV0ZVVwZ3JhZGUoXG4gICAgICAgICAgICBleHRlbnNpb25zLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgcHJvdG9jb2xzLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgc29ja2V0LFxuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudmVyaWZ5Q2xpZW50KGluZm8pKSByZXR1cm4gYWJvcnRIYW5kc2hha2Uoc29ja2V0LCA0MDEpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVVcGdyYWRlKGV4dGVuc2lvbnMsIGtleSwgcHJvdG9jb2xzLCByZXEsIHNvY2tldCwgaGVhZCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZ3JhZGUgdGhlIGNvbm5lY3Rpb24gdG8gV2ViU29ja2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXh0ZW5zaW9ucyBUaGUgYWNjZXB0ZWQgZXh0ZW5zaW9uc1xuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSB2YWx1ZSBvZiB0aGUgYFNlYy1XZWJTb2NrZXQtS2V5YCBoZWFkZXJcbiAgICogQHBhcmFtIHtTZXR9IHByb3RvY29scyBUaGUgc3VicHJvdG9jb2xzXG4gICAqIEBwYXJhbSB7aHR0cC5JbmNvbWluZ01lc3NhZ2V9IHJlcSBUaGUgcmVxdWVzdCBvYmplY3RcbiAgICogQHBhcmFtIHtEdXBsZXh9IHNvY2tldCBUaGUgbmV0d29yayBzb2NrZXQgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCBjbGllbnRcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGhlYWQgVGhlIGZpcnN0IHBhY2tldCBvZiB0aGUgdXBncmFkZWQgc3RyZWFtXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIENhbGxiYWNrXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCB0aGUgc2FtZSBzb2NrZXRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbXBsZXRlVXBncmFkZShleHRlbnNpb25zLCBrZXksIHByb3RvY29scywgcmVxLCBzb2NrZXQsIGhlYWQsIGNiKSB7XG4gICAgLy9cbiAgICAvLyBEZXN0cm95IHRoZSBzb2NrZXQgaWYgdGhlIGNsaWVudCBoYXMgYWxyZWFkeSBzZW50IGEgRklOIHBhY2tldC5cbiAgICAvL1xuICAgIGlmICghc29ja2V0LnJlYWRhYmxlIHx8ICFzb2NrZXQud3JpdGFibGUpIHJldHVybiBzb2NrZXQuZGVzdHJveSgpO1xuXG4gICAgaWYgKHNvY2tldFtrV2ViU29ja2V0XSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnc2VydmVyLmhhbmRsZVVwZ3JhZGUoKSB3YXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggdGhlIHNhbWUgJyArXG4gICAgICAgICAgJ3NvY2tldCwgcG9zc2libHkgZHVlIHRvIGEgbWlzY29uZmlndXJhdGlvbidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlID4gUlVOTklORykgcmV0dXJuIGFib3J0SGFuZHNoYWtlKHNvY2tldCwgNTAzKTtcblxuICAgIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goJ3NoYTEnKVxuICAgICAgLnVwZGF0ZShrZXkgKyBHVUlEKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0Jyk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgJ0hUVFAvMS4xIDEwMSBTd2l0Y2hpbmcgUHJvdG9jb2xzJyxcbiAgICAgICdVcGdyYWRlOiB3ZWJzb2NrZXQnLFxuICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGUnLFxuICAgICAgYFNlYy1XZWJTb2NrZXQtQWNjZXB0OiAke2RpZ2VzdH1gXG4gICAgXTtcblxuICAgIGNvbnN0IHdzID0gbmV3IHRoaXMub3B0aW9ucy5XZWJTb2NrZXQobnVsbCwgdW5kZWZpbmVkLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgaWYgKHByb3RvY29scy5zaXplKSB7XG4gICAgICAvL1xuICAgICAgLy8gT3B0aW9uYWxseSBjYWxsIGV4dGVybmFsIHByb3RvY29sIHNlbGVjdGlvbiBoYW5kbGVyLlxuICAgICAgLy9cbiAgICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5vcHRpb25zLmhhbmRsZVByb3RvY29sc1xuICAgICAgICA/IHRoaXMub3B0aW9ucy5oYW5kbGVQcm90b2NvbHMocHJvdG9jb2xzLCByZXEpXG4gICAgICAgIDogcHJvdG9jb2xzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcblxuICAgICAgaWYgKHByb3RvY29sKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChgU2VjLVdlYlNvY2tldC1Qcm90b2NvbDogJHtwcm90b2NvbH1gKTtcbiAgICAgICAgd3MuX3Byb3RvY29sID0gcHJvdG9jb2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dGVuc2lvbnNbUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZV0pIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IGV4dGVuc2lvbnNbUGVyTWVzc2FnZURlZmxhdGUuZXh0ZW5zaW9uTmFtZV0ucGFyYW1zO1xuICAgICAgY29uc3QgdmFsdWUgPSBleHRlbnNpb24uZm9ybWF0KHtcbiAgICAgICAgW1Blck1lc3NhZ2VEZWZsYXRlLmV4dGVuc2lvbk5hbWVdOiBbcGFyYW1zXVxuICAgICAgfSk7XG4gICAgICBoZWFkZXJzLnB1c2goYFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uczogJHt2YWx1ZX1gKTtcbiAgICAgIHdzLl9leHRlbnNpb25zID0gZXh0ZW5zaW9ucztcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIEFsbG93IGV4dGVybmFsIG1vZGlmaWNhdGlvbi9pbnNwZWN0aW9uIG9mIGhhbmRzaGFrZSBoZWFkZXJzLlxuICAgIC8vXG4gICAgdGhpcy5lbWl0KCdoZWFkZXJzJywgaGVhZGVycywgcmVxKTtcblxuICAgIHNvY2tldC53cml0ZShoZWFkZXJzLmNvbmNhdCgnXFxyXFxuJykuam9pbignXFxyXFxuJykpO1xuICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBzb2NrZXRPbkVycm9yKTtcblxuICAgIHdzLnNldFNvY2tldChzb2NrZXQsIGhlYWQsIHtcbiAgICAgIGFsbG93U3luY2hyb25vdXNFdmVudHM6IHRoaXMub3B0aW9ucy5hbGxvd1N5bmNocm9ub3VzRXZlbnRzLFxuICAgICAgbWF4UGF5bG9hZDogdGhpcy5vcHRpb25zLm1heFBheWxvYWQsXG4gICAgICBza2lwVVRGOFZhbGlkYXRpb246IHRoaXMub3B0aW9ucy5za2lwVVRGOFZhbGlkYXRpb25cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNsaWVudHMpIHtcbiAgICAgIHRoaXMuY2xpZW50cy5hZGQod3MpO1xuICAgICAgd3Mub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudHMuZGVsZXRlKHdzKTtcblxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkRW1pdENsb3NlICYmICF0aGlzLmNsaWVudHMuc2l6ZSkge1xuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2Iod3MsIHJlcSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBXZWJTb2NrZXRTZXJ2ZXI7XG5cbi8qKlxuICogQWRkIGV2ZW50IGxpc3RlbmVycyBvbiBhbiBgRXZlbnRFbWl0dGVyYCB1c2luZyBhIG1hcCBvZiA8ZXZlbnQsIGxpc3RlbmVyPlxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IHNlcnZlciBUaGUgZXZlbnQgZW1pdHRlclxuICogQHBhcmFtIHtPYmplY3QuPFN0cmluZywgRnVuY3Rpb24+fSBtYXAgVGhlIGxpc3RlbmVycyB0byBhZGRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCByZW1vdmUgdGhlIGFkZGVkIGxpc3RlbmVycyB3aGVuXG4gKiAgICAgY2FsbGVkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcnMoc2VydmVyLCBtYXApIHtcbiAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhtYXApKSBzZXJ2ZXIub24oZXZlbnQsIG1hcFtldmVudF0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhtYXApKSB7XG4gICAgICBzZXJ2ZXIucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIG1hcFtldmVudF0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBFbWl0IGEgYCdjbG9zZSdgIGV2ZW50IG9uIGFuIGBFdmVudEVtaXR0ZXJgLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBzZXJ2ZXIgVGhlIGV2ZW50IGVtaXR0ZXJcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVtaXRDbG9zZShzZXJ2ZXIpIHtcbiAgc2VydmVyLl9zdGF0ZSA9IENMT1NFRDtcbiAgc2VydmVyLmVtaXQoJ2Nsb3NlJyk7XG59XG5cbi8qKlxuICogSGFuZGxlIHNvY2tldCBlcnJvcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc29ja2V0T25FcnJvcigpIHtcbiAgdGhpcy5kZXN0cm95KCk7XG59XG5cbi8qKlxuICogQ2xvc2UgdGhlIGNvbm5lY3Rpb24gd2hlbiBwcmVjb25kaXRpb25zIGFyZSBub3QgZnVsZmlsbGVkLlxuICpcbiAqIEBwYXJhbSB7RHVwbGV4fSBzb2NrZXQgVGhlIHNvY2tldCBvZiB0aGUgdXBncmFkZSByZXF1ZXN0XG4gKiBAcGFyYW0ge051bWJlcn0gY29kZSBUaGUgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtTdHJpbmd9IFttZXNzYWdlXSBUaGUgSFRUUCByZXNwb25zZSBib2R5XG4gKiBAcGFyYW0ge09iamVjdH0gW2hlYWRlcnNdIEFkZGl0aW9uYWwgSFRUUCByZXNwb25zZSBoZWFkZXJzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhYm9ydEhhbmRzaGFrZShzb2NrZXQsIGNvZGUsIG1lc3NhZ2UsIGhlYWRlcnMpIHtcbiAgLy9cbiAgLy8gVGhlIHNvY2tldCBpcyB3cml0YWJsZSB1bmxlc3MgdGhlIHVzZXIgZGVzdHJveWVkIG9yIGVuZGVkIGl0IGJlZm9yZSBjYWxsaW5nXG4gIC8vIGBzZXJ2ZXIuaGFuZGxlVXBncmFkZSgpYCBvciBpbiB0aGUgYHZlcmlmeUNsaWVudGAgZnVuY3Rpb24sIHdoaWNoIGlzIGEgdXNlclxuICAvLyBlcnJvci4gSGFuZGxpbmcgdGhpcyBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgYXMgdGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlblxuICAvLyBpcyB0aGF0IHNvbWUgb2YgdGhlIGRhdGEgd3JpdHRlbiBieSB0aGUgdXNlciBtaWdodCBiZSBkaXNjYXJkZWQgZHVlIHRvIHRoZVxuICAvLyBjYWxsIHRvIGBzb2NrZXQuZW5kKClgIGJlbG93LCB3aGljaCB0cmlnZ2VycyBhbiBgJ2Vycm9yJ2AgZXZlbnQgdGhhdCBpblxuICAvLyB0dXJuIGNhdXNlcyB0aGUgc29ja2V0IHRvIGJlIGRlc3Ryb3llZC5cbiAgLy9cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgaHR0cC5TVEFUVVNfQ09ERVNbY29kZV07XG4gIGhlYWRlcnMgPSB7XG4gICAgQ29ubmVjdGlvbjogJ2Nsb3NlJyxcbiAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbCcsXG4gICAgJ0NvbnRlbnQtTGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgobWVzc2FnZSksXG4gICAgLi4uaGVhZGVyc1xuICB9O1xuXG4gIHNvY2tldC5vbmNlKCdmaW5pc2gnLCBzb2NrZXQuZGVzdHJveSk7XG5cbiAgc29ja2V0LmVuZChcbiAgICBgSFRUUC8xLjEgJHtjb2RlfSAke2h0dHAuU1RBVFVTX0NPREVTW2NvZGVdfVxcclxcbmAgK1xuICAgICAgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgICAgLm1hcCgoaCkgPT4gYCR7aH06ICR7aGVhZGVyc1toXX1gKVxuICAgICAgICAuam9pbignXFxyXFxuJykgK1xuICAgICAgJ1xcclxcblxcclxcbicgK1xuICAgICAgbWVzc2FnZVxuICApO1xufVxuXG4vKipcbiAqIEVtaXQgYSBgJ3dzQ2xpZW50RXJyb3InYCBldmVudCBvbiBhIGBXZWJTb2NrZXRTZXJ2ZXJgIGlmIHRoZXJlIGlzIGF0IGxlYXN0XG4gKiBvbmUgbGlzdGVuZXIgZm9yIGl0LCBvdGhlcndpc2UgY2FsbCBgYWJvcnRIYW5kc2hha2UoKWAuXG4gKlxuICogQHBhcmFtIHtXZWJTb2NrZXRTZXJ2ZXJ9IHNlcnZlciBUaGUgV2ViU29ja2V0IHNlcnZlclxuICogQHBhcmFtIHtodHRwLkluY29taW5nTWVzc2FnZX0gcmVxIFRoZSByZXF1ZXN0IG9iamVjdFxuICogQHBhcmFtIHtEdXBsZXh9IHNvY2tldCBUaGUgc29ja2V0IG9mIHRoZSB1cGdyYWRlIHJlcXVlc3RcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFRoZSBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgSFRUUCByZXNwb25zZSBib2R5XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhYm9ydEhhbmRzaGFrZU9yRW1pdHdzQ2xpZW50RXJyb3Ioc2VydmVyLCByZXEsIHNvY2tldCwgY29kZSwgbWVzc2FnZSkge1xuICBpZiAoc2VydmVyLmxpc3RlbmVyQ291bnQoJ3dzQ2xpZW50RXJyb3InKSkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIGFib3J0SGFuZHNoYWtlT3JFbWl0d3NDbGllbnRFcnJvcik7XG5cbiAgICBzZXJ2ZXIuZW1pdCgnd3NDbGllbnRFcnJvcicsIGVyciwgc29ja2V0LCByZXEpO1xuICB9IGVsc2Uge1xuICAgIGFib3J0SGFuZHNoYWtlKHNvY2tldCwgY29kZSwgbWVzc2FnZSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IGNyZWF0ZVdlYlNvY2tldFN0cmVhbSBmcm9tICcuL2xpYi9zdHJlYW0uanMnO1xuaW1wb3J0IFJlY2VpdmVyIGZyb20gJy4vbGliL3JlY2VpdmVyLmpzJztcbmltcG9ydCBTZW5kZXIgZnJvbSAnLi9saWIvc2VuZGVyLmpzJztcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnLi9saWIvd2Vic29ja2V0LmpzJztcbmltcG9ydCBXZWJTb2NrZXRTZXJ2ZXIgZnJvbSAnLi9saWIvd2Vic29ja2V0LXNlcnZlci5qcyc7XG5cbmV4cG9ydCB7IGNyZWF0ZVdlYlNvY2tldFN0cmVhbSwgUmVjZWl2ZXIsIFNlbmRlciwgV2ViU29ja2V0LCBXZWJTb2NrZXRTZXJ2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IFdlYlNvY2tldDtcbiIsCiAgICAiLy8gSWdub3JpbmcgbWlzc2luZyB0eXBlcyBlcnJvciB0byBhdm9pZCBhZGRpbmcgYW5vdGhlciBkZXBlbmRlbmN5IGZvciB0aGlzIGhhY2sgdG8gd29ya1xuaW1wb3J0IHdzIGZyb20gJ3dzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbmNvbnN0IGN1c3RvbUdsb2JhbCA9IGdsb2JhbDtcbi8vIFRoZXNlIHRoaW5ncyBtdXN0IGV4aXN0IGJlZm9yZSBpbXBvcnRpbmcgYHJlYWN0LWRldnRvb2xzLWNvcmVgXG5jdXN0b21HbG9iYWwuV2ViU29ja2V0IHx8PSB3cztcbmN1c3RvbUdsb2JhbC53aW5kb3cgfHw9IGdsb2JhbDtcbmN1c3RvbUdsb2JhbC5zZWxmIHx8PSBnbG9iYWw7XG4vLyBGaWx0ZXIgb3V0IEluaydzIGludGVybmFsIGNvbXBvbmVudHMgZnJvbSBkZXZ0b29scyBmb3IgYSBjbGVhbmVyIHZpZXcuXG4vLyBBbHNvLCBpbmNlIGByZWFjdC1kZXZ0b29scy1zaGFyZWRgIHBhY2thZ2UgaXNuJ3QgcHVibGlzaGVkIG9uIG5wbSwgd2UgY2FuJ3Rcbi8vIHVzZSBpdHMgdHlwZXMsIHRoYXQncyB3aHkgdGhlcmUgYXJlIGhhcmQtY29kZWQgdmFsdWVzIGluIGB0eXBlYCBmaWVsZHMgYmVsb3cuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvZWRmNmVhYzhhMTgxODYwZmQ4YTJkMDc2YTQzODA2ZjEyMzc0OTVhMS9wYWNrYWdlcy9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL3R5cGVzLmpzI0wyNFxuY3VzdG9tR2xvYmFsLndpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0NPTVBPTkVOVF9GSUxURVJTX18gPSBbXG4gICAge1xuICAgICAgICAvLyBDb21wb25lbnRGaWx0ZXJFbGVtZW50VHlwZVxuICAgICAgICB0eXBlOiAxLFxuICAgICAgICAvLyBFbGVtZW50VHlwZUhvc3RDb21wb25lbnRcbiAgICAgICAgdmFsdWU6IDcsXG4gICAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gQ29tcG9uZW50RmlsdGVyRGlzcGxheU5hbWVcbiAgICAgICAgdHlwZTogMixcbiAgICAgICAgdmFsdWU6ICdJbnRlcm5hbEFwcCcsXG4gICAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gQ29tcG9uZW50RmlsdGVyRGlzcGxheU5hbWVcbiAgICAgICAgdHlwZTogMixcbiAgICAgICAgdmFsdWU6ICdJbnRlcm5hbEFwcENvbnRleHQnLFxuICAgICAgICBpc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIENvbXBvbmVudEZpbHRlckRpc3BsYXlOYW1lXG4gICAgICAgIHR5cGU6IDIsXG4gICAgICAgIHZhbHVlOiAnSW50ZXJuYWxTdGRvdXRDb250ZXh0JyxcbiAgICAgICAgaXNFbmFibGVkOiB0cnVlLFxuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgICAvLyBDb21wb25lbnRGaWx0ZXJEaXNwbGF5TmFtZVxuICAgICAgICB0eXBlOiAyLFxuICAgICAgICB2YWx1ZTogJ0ludGVybmFsU3RkZXJyQ29udGV4dCcsXG4gICAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gQ29tcG9uZW50RmlsdGVyRGlzcGxheU5hbWVcbiAgICAgICAgdHlwZTogMixcbiAgICAgICAgdmFsdWU6ICdJbnRlcm5hbFN0ZGluQ29udGV4dCcsXG4gICAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gQ29tcG9uZW50RmlsdGVyRGlzcGxheU5hbWVcbiAgICAgICAgdHlwZTogMixcbiAgICAgICAgdmFsdWU6ICdJbnRlcm5hbEZvY3VzQ29udGV4dCcsXG4gICAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICB9LFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRldnRvb2xzLXdpbmRvdy1wb2x5ZmlsbC5qcy5tYXAiLAogICAgIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0RGV2VG9vbHNCYWNrZW5kXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0RGV2VG9vbHNCYWNrZW5kXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuIC8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA2MDI6XG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIF9fd2VicGFja191bnVzZWRfZXhwb3J0X187XG4vKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kZWJ1Zy10b29scy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBrID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpLFxuICAgIHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSksXG4gICAgcSA9IE9iamVjdC5hc3NpZ24sXG4gICAgdyA9IHAuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsXG4gICAgeCA9IFtdLFxuICAgIHkgPSBudWxsO1xuXG5mdW5jdGlvbiB6KCkge1xuICBpZiAobnVsbCA9PT0geSkge1xuICAgIHZhciBhID0gbmV3IE1hcCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIEEudXNlQ29udGV4dCh7XG4gICAgICAgIF9jdXJyZW50VmFsdWU6IG51bGxcbiAgICAgIH0pLCBBLnVzZVN0YXRlKG51bGwpLCBBLnVzZVJlZHVjZXIoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9LCBudWxsKSwgQS51c2VSZWYobnVsbCksIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEEudXNlQ2FjaGVSZWZyZXNoICYmIEEudXNlQ2FjaGVSZWZyZXNoKCksIEEudXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHt9KSwgQS51c2VJbnNlcnRpb25FZmZlY3QoZnVuY3Rpb24gKCkge30pLCBBLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7fSksIEEudXNlSW1wZXJhdGl2ZUhhbmRsZSh2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KSwgQS51c2VEZWJ1Z1ZhbHVlKG51bGwpLCBBLnVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHt9KSwgQS51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQS51c2VNZW1vQ2FjaGUgJiYgQS51c2VNZW1vQ2FjaGUoMCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHZhciBiID0geDtcbiAgICAgIHggPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IGIubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciBnID0gYltlXTtcbiAgICAgIGEuc2V0KGcucHJpbWl0aXZlLCBrLnBhcnNlKGcuc3RhY2tFcnJvcikpO1xuICAgIH1cblxuICAgIHkgPSBhO1xuICB9XG5cbiAgcmV0dXJuIHk7XG59XG5cbnZhciBCID0gbnVsbDtcblxuZnVuY3Rpb24gQygpIHtcbiAgdmFyIGEgPSBCO1xuICBudWxsICE9PSBhICYmIChCID0gYS5uZXh0KTtcbiAgcmV0dXJuIGE7XG59XG5cbnZhciBBID0ge1xuICB1c2U6IGZ1bmN0aW9uIHVzZSgpIHtcbiAgICB0aHJvdyBFcnJvcihcIlN1cHBvcnQgZm9yIGB1c2VgIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gcmVhY3QtZGVidWctdG9vbHMuXCIpO1xuICB9LFxuICByZWFkQ29udGV4dDogZnVuY3Rpb24gcmVhZENvbnRleHQoYSkge1xuICAgIHJldHVybiBhLl9jdXJyZW50VmFsdWU7XG4gIH0sXG4gIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gdXNlQ2FjaGVSZWZyZXNoKCkge1xuICAgIHZhciBhID0gQygpO1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiQ2FjaGVSZWZyZXNoXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IG51bGwgIT09IGEgPyBhLm1lbW9pemVkU3RhdGUgOiBmdW5jdGlvbiAoKSB7fVxuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTtcbiAgfSxcbiAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIHVzZUNhbGxiYWNrKGEpIHtcbiAgICB2YXIgYiA9IEMoKTtcbiAgICB4LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIkNhbGxiYWNrXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IG51bGwgIT09IGIgPyBiLm1lbW9pemVkU3RhdGVbMF0gOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIHVzZUNvbnRleHQoYSkge1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiQ29udGV4dFwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhLl9jdXJyZW50VmFsdWVcbiAgICB9KTtcbiAgICByZXR1cm4gYS5fY3VycmVudFZhbHVlO1xuICB9LFxuICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIHVzZUVmZmVjdChhKSB7XG4gICAgQygpO1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiRWZmZWN0XCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgfSxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShhKSB7XG4gICAgQygpO1xuICAgIHZhciBiID0gdm9pZCAwO1xuICAgIG51bGwgIT09IGEgJiYgXCJvYmplY3RcIiA9PT0gX3R5cGVvZihhKSAmJiAoYiA9IGEuY3VycmVudCk7XG4gICAgeC5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJJbXBlcmF0aXZlSGFuZGxlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGJcbiAgICB9KTtcbiAgfSxcbiAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gdXNlRGVidWdWYWx1ZShhLCBiKSB7XG4gICAgeC5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJEZWJ1Z1ZhbHVlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGIgPyBiKGEpIDogYVxuICAgIH0pO1xuICB9LFxuICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChhKSB7XG4gICAgQygpO1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiTGF5b3V0RWZmZWN0XCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgfSxcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiB1c2VJbnNlcnRpb25FZmZlY3QoYSkge1xuICAgIEMoKTtcbiAgICB4LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIkluc2VydGlvbkVmZmVjdFwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhXG4gICAgfSk7XG4gIH0sXG4gIHVzZU1lbW86IGZ1bmN0aW9uIHVzZU1lbW8oYSkge1xuICAgIHZhciBiID0gQygpO1xuICAgIGEgPSBudWxsICE9PSBiID8gYi5tZW1vaXplZFN0YXRlWzBdIDogYSgpO1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiTWVtb1wiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gdXNlTWVtb0NhY2hlKCkge1xuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgdXNlUmVkdWNlcjogZnVuY3Rpb24gdXNlUmVkdWNlcihhLCBiLCBlKSB7XG4gICAgYSA9IEMoKTtcbiAgICBiID0gbnVsbCAhPT0gYSA/IGEubWVtb2l6ZWRTdGF0ZSA6IHZvaWQgMCAhPT0gZSA/IGUoYikgOiBiO1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiUmVkdWNlclwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBiXG4gICAgfSk7XG4gICAgcmV0dXJuIFtiLCBmdW5jdGlvbiAoKSB7fV07XG4gIH0sXG4gIHVzZVJlZjogZnVuY3Rpb24gdXNlUmVmKGEpIHtcbiAgICB2YXIgYiA9IEMoKTtcbiAgICBhID0gbnVsbCAhPT0gYiA/IGIubWVtb2l6ZWRTdGF0ZSA6IHtcbiAgICAgIGN1cnJlbnQ6IGFcbiAgICB9O1xuICAgIHgucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiUmVmXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGEuY3VycmVudFxuICAgIH0pO1xuICAgIHJldHVybiBhO1xuICB9LFxuICB1c2VTdGF0ZTogZnVuY3Rpb24gdXNlU3RhdGUoYSkge1xuICAgIHZhciBiID0gQygpO1xuICAgIGEgPSBudWxsICE9PSBiID8gYi5tZW1vaXplZFN0YXRlIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYSA/IGEoKSA6IGE7XG4gICAgeC5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJTdGF0ZVwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIFthLCBmdW5jdGlvbiAoKSB7fV07XG4gIH0sXG4gIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oKSB7XG4gICAgQygpO1xuICAgIEMoKTtcbiAgICB4LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIlRyYW5zaXRpb25cIixcbiAgICAgIHN0YWNrRXJyb3I6IEVycm9yKCksXG4gICAgICB2YWx1ZTogdm9pZCAwXG4gICAgfSk7XG4gICAgcmV0dXJuIFshMSwgZnVuY3Rpb24gKCkge31dO1xuICB9LFxuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoYSwgYikge1xuICAgIEMoKTtcbiAgICBDKCk7XG4gICAgYSA9IGIoKTtcbiAgICB4LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIlN5bmNFeHRlcm5hbFN0b3JlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gdXNlRGVmZXJyZWRWYWx1ZShhKSB7XG4gICAgdmFyIGIgPSBDKCk7XG4gICAgeC5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJEZWZlcnJlZFZhbHVlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IG51bGwgIT09IGIgPyBiLm1lbW9pemVkU3RhdGUgOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHVzZUlkOiBmdW5jdGlvbiB1c2VJZCgpIHtcbiAgICB2YXIgYSA9IEMoKTtcbiAgICBhID0gbnVsbCAhPT0gYSA/IGEubWVtb2l6ZWRTdGF0ZSA6IFwiXCI7XG4gICAgeC5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJJZFwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0sXG4gICAgRCA9IHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoYSwgYikge1xuICAgIGlmIChhLmhhc093blByb3BlcnR5KGIpKSByZXR1cm4gYVtiXTtcbiAgICBhID0gRXJyb3IoXCJNaXNzaW5nIG1ldGhvZCBpbiBEaXNwYXRjaGVyOiBcIiArIGIpO1xuICAgIGEubmFtZSA9IFwiUmVhY3REZWJ1Z1Rvb2xzVW5zdXBwb3J0ZWRIb29rRXJyb3JcIjtcbiAgICB0aHJvdyBhO1xuICB9XG59LFxuICAgIEUgPSBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgUHJveHkgPyBBIDogbmV3IFByb3h5KEEsIEQpLFxuICAgIEYgPSAwO1xuXG5mdW5jdGlvbiBHKGEsIGIsIGUpIHtcbiAgdmFyIGcgPSBiW2VdLnNvdXJjZSxcbiAgICAgIGMgPSAwO1xuXG4gIGE6IGZvciAoOyBjIDwgYS5sZW5ndGg7IGMrKykge1xuICAgIGlmIChhW2NdLnNvdXJjZSA9PT0gZykge1xuICAgICAgZm9yICh2YXIgaCA9IGUgKyAxLCByID0gYyArIDE7IGggPCBiLmxlbmd0aCAmJiByIDwgYS5sZW5ndGg7IGgrKywgcisrKSB7XG4gICAgICAgIGlmIChhW3JdLnNvdXJjZSAhPT0gYltoXS5zb3VyY2UpIGNvbnRpbnVlIGE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gSChhLCBiKSB7XG4gIGlmICghYSkgcmV0dXJuICExO1xuICBiID0gXCJ1c2VcIiArIGI7XG4gIHJldHVybiBhLmxlbmd0aCA8IGIubGVuZ3RoID8gITEgOiBhLmxhc3RJbmRleE9mKGIpID09PSBhLmxlbmd0aCAtIGIubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBJKGEsIGIsIGUpIHtcbiAgZm9yICh2YXIgZyA9IFtdLCBjID0gbnVsbCwgaCA9IGcsIHIgPSAwLCB0ID0gW10sIHYgPSAwOyB2IDwgYi5sZW5ndGg7IHYrKykge1xuICAgIHZhciB1ID0gYlt2XTtcbiAgICB2YXIgZCA9IGE7XG4gICAgdmFyIGwgPSBrLnBhcnNlKHUuc3RhY2tFcnJvcik7XG5cbiAgICBiOiB7XG4gICAgICB2YXIgbSA9IGwsXG4gICAgICAgICAgbiA9IEcobSwgZCwgRik7XG4gICAgICBpZiAoLTEgIT09IG4pIGQgPSBuO2Vsc2Uge1xuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGQubGVuZ3RoICYmIDUgPiBmOyBmKyspIHtcbiAgICAgICAgICBpZiAobiA9IEcobSwgZCwgZiksIC0xICE9PSBuKSB7XG4gICAgICAgICAgICBGID0gZjtcbiAgICAgICAgICAgIGQgPSBuO1xuICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYjoge1xuICAgICAgbSA9IGw7XG4gICAgICBuID0geigpLmdldCh1LnByaW1pdGl2ZSk7XG4gICAgICBpZiAodm9pZCAwICE9PSBuKSBmb3IgKGYgPSAwOyBmIDwgbi5sZW5ndGggJiYgZiA8IG0ubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgaWYgKG5bZl0uc291cmNlICE9PSBtW2ZdLnNvdXJjZSkge1xuICAgICAgICAgIGYgPCBtLmxlbmd0aCAtIDEgJiYgSChtW2ZdLmZ1bmN0aW9uTmFtZSwgdS5wcmltaXRpdmUpICYmIGYrKztcbiAgICAgICAgICBmIDwgbS5sZW5ndGggLSAxICYmIEgobVtmXS5mdW5jdGlvbk5hbWUsIHUucHJpbWl0aXZlKSAmJiBmKys7XG4gICAgICAgICAgbSA9IGY7XG4gICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbSA9IC0xO1xuICAgIH1cblxuICAgIGwgPSAtMSA9PT0gZCB8fCAtMSA9PT0gbSB8fCAyID4gZCAtIG0gPyBudWxsIDogbC5zbGljZShtLCBkIC0gMSk7XG5cbiAgICBpZiAobnVsbCAhPT0gbCkge1xuICAgICAgZCA9IDA7XG5cbiAgICAgIGlmIChudWxsICE9PSBjKSB7XG4gICAgICAgIGZvciAoOyBkIDwgbC5sZW5ndGggJiYgZCA8IGMubGVuZ3RoICYmIGxbbC5sZW5ndGggLSBkIC0gMV0uc291cmNlID09PSBjW2MubGVuZ3RoIC0gZCAtIDFdLnNvdXJjZTspIHtcbiAgICAgICAgICBkKys7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGMgPSBjLmxlbmd0aCAtIDE7IGMgPiBkOyBjLS0pIHtcbiAgICAgICAgICBoID0gdC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGMgPSBsLmxlbmd0aCAtIGQgLSAxOyAxIDw9IGM7IGMtLSkge1xuICAgICAgICBkID0gW10sIG0gPSBsW2NdLCAobiA9IGxbYyAtIDFdLmZ1bmN0aW9uTmFtZSkgPyAoZiA9IG4ubGFzdEluZGV4T2YoXCIuXCIpLCAtMSA9PT0gZiAmJiAoZiA9IDApLCBcInVzZVwiID09PSBuLnNsaWNlKGYsIGYgKyAzKSAmJiAoZiArPSAzKSwgbiA9IG4uc2xpY2UoZikpIDogbiA9IFwiXCIsIG4gPSB7XG4gICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgaXNTdGF0ZUVkaXRhYmxlOiAhMSxcbiAgICAgICAgICBuYW1lOiBuLFxuICAgICAgICAgIHZhbHVlOiB2b2lkIDAsXG4gICAgICAgICAgc3ViSG9va3M6IGRcbiAgICAgICAgfSwgZSAmJiAobi5ob29rU291cmNlID0ge1xuICAgICAgICAgIGxpbmVOdW1iZXI6IG0ubGluZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5OdW1iZXI6IG0uY29sdW1uTnVtYmVyLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgZmlsZU5hbWU6IG0uZmlsZU5hbWVcbiAgICAgICAgfSksIGgucHVzaChuKSwgdC5wdXNoKGgpLCBoID0gZDtcbiAgICAgIH1cblxuICAgICAgYyA9IGw7XG4gICAgfVxuXG4gICAgZCA9IHUucHJpbWl0aXZlO1xuICAgIHUgPSB7XG4gICAgICBpZDogXCJDb250ZXh0XCIgPT09IGQgfHwgXCJEZWJ1Z1ZhbHVlXCIgPT09IGQgPyBudWxsIDogcisrLFxuICAgICAgaXNTdGF0ZUVkaXRhYmxlOiBcIlJlZHVjZXJcIiA9PT0gZCB8fCBcIlN0YXRlXCIgPT09IGQsXG4gICAgICBuYW1lOiBkLFxuICAgICAgdmFsdWU6IHUudmFsdWUsXG4gICAgICBzdWJIb29rczogW11cbiAgICB9O1xuICAgIGUgJiYgKGQgPSB7XG4gICAgICBsaW5lTnVtYmVyOiBudWxsLFxuICAgICAgZnVuY3Rpb25OYW1lOiBudWxsLFxuICAgICAgZmlsZU5hbWU6IG51bGwsXG4gICAgICBjb2x1bW5OdW1iZXI6IG51bGxcbiAgICB9LCBsICYmIDEgPD0gbC5sZW5ndGggJiYgKGwgPSBsWzBdLCBkLmxpbmVOdW1iZXIgPSBsLmxpbmVOdW1iZXIsIGQuZnVuY3Rpb25OYW1lID0gbC5mdW5jdGlvbk5hbWUsIGQuZmlsZU5hbWUgPSBsLmZpbGVOYW1lLCBkLmNvbHVtbk51bWJlciA9IGwuY29sdW1uTnVtYmVyKSwgdS5ob29rU291cmNlID0gZCk7XG4gICAgaC5wdXNoKHUpO1xuICB9XG5cbiAgSihnLCBudWxsKTtcbiAgcmV0dXJuIGc7XG59XG5cbmZ1bmN0aW9uIEooYSwgYikge1xuICBmb3IgKHZhciBlID0gW10sIGcgPSAwOyBnIDwgYS5sZW5ndGg7IGcrKykge1xuICAgIHZhciBjID0gYVtnXTtcbiAgICBcIkRlYnVnVmFsdWVcIiA9PT0gYy5uYW1lICYmIDAgPT09IGMuc3ViSG9va3MubGVuZ3RoID8gKGEuc3BsaWNlKGcsIDEpLCBnLS0sIGUucHVzaChjKSkgOiBKKGMuc3ViSG9va3MsIGMpO1xuICB9XG5cbiAgbnVsbCAhPT0gYiAmJiAoMSA9PT0gZS5sZW5ndGggPyBiLnZhbHVlID0gZVswXS52YWx1ZSA6IDEgPCBlLmxlbmd0aCAmJiAoYi52YWx1ZSA9IGUubWFwKGZ1bmN0aW9uIChoKSB7XG4gICAgcmV0dXJuIGgudmFsdWU7XG4gIH0pKSk7XG59XG5cbmZ1bmN0aW9uIEsoYSkge1xuICBpZiAoYSBpbnN0YW5jZW9mIEVycm9yICYmIFwiUmVhY3REZWJ1Z1Rvb2xzVW5zdXBwb3J0ZWRIb29rRXJyb3JcIiA9PT0gYS5uYW1lKSB0aHJvdyBhO1xuICB2YXIgYiA9IEVycm9yKFwiRXJyb3IgcmVuZGVyaW5nIGluc3BlY3RlZCBjb21wb25lbnRcIiwge1xuICAgIGNhdXNlOiBhXG4gIH0pO1xuICBiLm5hbWUgPSBcIlJlYWN0RGVidWdUb29sc1JlbmRlckVycm9yXCI7XG4gIGIuY2F1c2UgPSBhO1xuICB0aHJvdyBiO1xufVxuXG5mdW5jdGlvbiBMKGEsIGIsIGUpIHtcbiAgdmFyIGcgPSAzIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1szXSA/IGFyZ3VtZW50c1szXSA6ICExO1xuICBudWxsID09IGUgJiYgKGUgPSB3LlJlYWN0Q3VycmVudERpc3BhdGNoZXIpO1xuICB2YXIgYyA9IGUuY3VycmVudDtcbiAgZS5jdXJyZW50ID0gRTtcblxuICB0cnkge1xuICAgIHZhciBoID0gRXJyb3IoKTtcbiAgICBhKGIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgSyh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB2YXIgciA9IHg7XG4gICAgeCA9IFtdO1xuICAgIGUuY3VycmVudCA9IGM7XG4gIH1cblxuICBjID0gay5wYXJzZShoKTtcbiAgcmV0dXJuIEkoYywgciwgZyk7XG59XG5cbmZ1bmN0aW9uIE0oYSkge1xuICBhLmZvckVhY2goZnVuY3Rpb24gKGIsIGUpIHtcbiAgICByZXR1cm4gZS5fY3VycmVudFZhbHVlID0gYjtcbiAgfSk7XG59XG5cbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBMO1xuXG5leHBvcnRzLmluc3BlY3RIb29rc09mRmliZXIgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgZSA9IDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogITE7XG4gIG51bGwgPT0gYiAmJiAoYiA9IHcuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcik7XG4gIGlmICgwICE9PSBhLnRhZyAmJiAxNSAhPT0gYS50YWcgJiYgMTEgIT09IGEudGFnKSB0aHJvdyBFcnJvcihcIlVua25vd24gRmliZXIuIE5lZWRzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRvIGluc3BlY3QgaG9va3MuXCIpO1xuICB6KCk7XG4gIHZhciBnID0gYS50eXBlLFxuICAgICAgYyA9IGEubWVtb2l6ZWRQcm9wcztcblxuICBpZiAoZyAhPT0gYS5lbGVtZW50VHlwZSAmJiBnICYmIGcuZGVmYXVsdFByb3BzKSB7XG4gICAgYyA9IHEoe30sIGMpO1xuICAgIHZhciBoID0gZy5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHIgaW4gaCkge1xuICAgICAgdm9pZCAwID09PSBjW3JdICYmIChjW3JdID0gaFtyXSk7XG4gICAgfVxuICB9XG5cbiAgQiA9IGEubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHIgPSBuZXcgTWFwKCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGggPSBhOyBoOykge1xuICAgICAgaWYgKDEwID09PSBoLnRhZykge1xuICAgICAgICB2YXIgdCA9IGgudHlwZS5fY29udGV4dDtcbiAgICAgICAgci5oYXModCkgfHwgKHIuc2V0KHQsIHQuX2N1cnJlbnRWYWx1ZSksIHQuX2N1cnJlbnRWYWx1ZSA9IGgubWVtb2l6ZWRQcm9wcy52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGggPSBoLnJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoMTEgPT09IGEudGFnKSB7XG4gICAgICB2YXIgdiA9IGcucmVuZGVyO1xuICAgICAgZyA9IGM7XG4gICAgICB2YXIgdSA9IGEucmVmO1xuICAgICAgdCA9IGI7XG4gICAgICB2YXIgZCA9IHQuY3VycmVudDtcbiAgICAgIHQuY3VycmVudCA9IEU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBsID0gRXJyb3IoKTtcbiAgICAgICAgdihnLCB1KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgSyhmKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHZhciBtID0geDtcbiAgICAgICAgeCA9IFtdO1xuICAgICAgICB0LmN1cnJlbnQgPSBkO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IGsucGFyc2UobCk7XG4gICAgICByZXR1cm4gSShuLCBtLCBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTChnLCBjLCBiLCBlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBCID0gbnVsbCwgTShyKTtcbiAgfVxufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk4Nzpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuaWYgKHRydWUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwMik7XG59IGVsc2Uge31cblxuLyoqKi8gfSksXG5cbi8qKiovIDk6XG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIF9fd2VicGFja191bnVzZWRfZXhwb3J0X187XG4vKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBiID0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksXG4gICAgYyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgZCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICBlID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgIGYgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgZyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxcbiAgICBoID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgayA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zZXJ2ZXJfY29udGV4dFwiKSxcbiAgICBsID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgIG0gPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgbiA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgIHAgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICBxID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgdCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIiksXG4gICAgdSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jYWNoZVwiKSxcbiAgICB2ID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIik7XG5cbmZ1bmN0aW9uIHcoYSkge1xuICBpZiAoXCJvYmplY3RcIiA9PT0gX3R5cGVvZihhKSAmJiBudWxsICE9PSBhKSB7XG4gICAgdmFyIHIgPSBhLiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoIChyKSB7XG4gICAgICBjYXNlIGI6XG4gICAgICAgIHN3aXRjaCAoYSA9IGEudHlwZSwgYSkge1xuICAgICAgICAgIGNhc2UgZDpcbiAgICAgICAgICBjYXNlIGY6XG4gICAgICAgICAgY2FzZSBlOlxuICAgICAgICAgIGNhc2UgbTpcbiAgICAgICAgICBjYXNlIG46XG4gICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzd2l0Y2ggKGEgPSBhICYmIGEuJCR0eXBlb2YsIGEpIHtcbiAgICAgICAgICAgICAgY2FzZSBrOlxuICAgICAgICAgICAgICBjYXNlIGg6XG4gICAgICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgICAgY2FzZSBxOlxuICAgICAgICAgICAgICBjYXNlIHA6XG4gICAgICAgICAgICAgIGNhc2UgZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBjOlxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBoO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBnO1xuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGI7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBsO1xuZXhwb3J0cy5GcmFnbWVudCA9IGQ7XG5leHBvcnRzLkxhenkgPSBxO1xuZXhwb3J0cy5NZW1vID0gcDtcbmV4cG9ydHMuUG9ydGFsID0gYztcbmV4cG9ydHMuUHJvZmlsZXIgPSBmO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBtO1xuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IG47XG5cbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhMTtcbn07XG5cbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhMTtcbn07XG5cbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gdyhhKSA9PT0gaDtcbn07XG5cbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gdyhhKSA9PT0gZztcbn07XG5cbmV4cG9ydHMuaXNFbGVtZW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIFwib2JqZWN0XCIgPT09IF90eXBlb2YoYSkgJiYgbnVsbCAhPT0gYSAmJiBhLiQkdHlwZW9mID09PSBiO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBsO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBkO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBxO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBwO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBjO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBmO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBlO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBtO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBuO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgYSB8fCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhIHx8IGEgPT09IGQgfHwgYSA9PT0gZiB8fCBhID09PSBlIHx8IGEgPT09IG0gfHwgYSA9PT0gbiB8fCBhID09PSB0IHx8IGEgPT09IHUgfHwgXCJvYmplY3RcIiA9PT0gX3R5cGVvZihhKSAmJiBudWxsICE9PSBhICYmIChhLiQkdHlwZW9mID09PSBxIHx8IGEuJCR0eXBlb2YgPT09IHAgfHwgYS4kJHR5cGVvZiA9PT0gZyB8fCBhLiQkdHlwZW9mID09PSBoIHx8IGEuJCR0eXBlb2YgPT09IGwgfHwgYS4kJHR5cGVvZiA9PT0gdiB8fCB2b2lkIDAgIT09IGEuZ2V0TW9kdWxlSWQpID8gITAgOiAhMTtcbn07XG5cbmV4cG9ydHMudHlwZU9mID0gdztcblxuLyoqKi8gfSksXG5cbi8qKiovIDU1MDpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuaWYgKHRydWUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xufSBlbHNlIHt9XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5Nzg6XG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgbCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLFxuICAgIG4gPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgIHAgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgcSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICByID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgIHQgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksXG4gICAgdSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgIHYgPSBTeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksXG4gICAgdyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICB4ID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgIHkgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICB6ID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgQSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgIGFhID0gU3ltYm9sLmZvcihcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIiksXG4gICAgYmEgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLFxuICAgIGNhID0gU3ltYm9sLmZvcihcInJlYWN0LmNhY2hlXCIpLFxuICAgIEIgPSBTeW1ib2wuZm9yKFwicmVhY3QuZGVmYXVsdF92YWx1ZVwiKSxcbiAgICBkYSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3N0cG9uZVwiKSxcbiAgICBDID0gU3ltYm9sLml0ZXJhdG9yO1xuXG5mdW5jdGlvbiBlYShhKSB7XG4gIGlmIChudWxsID09PSBhIHx8IFwib2JqZWN0XCIgIT09IF90eXBlb2YoYSkpIHJldHVybiBudWxsO1xuICBhID0gQyAmJiBhW0NdIHx8IGFbXCJAQGl0ZXJhdG9yXCJdO1xuICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYSA/IGEgOiBudWxsO1xufVxuXG52YXIgRCA9IHtcbiAgaXNNb3VudGVkOiBmdW5jdGlvbiBpc01vdW50ZWQoKSB7XG4gICAgcmV0dXJuICExO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGVucXVldWVGb3JjZVVwZGF0ZSgpIHt9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiBlbnF1ZXVlUmVwbGFjZVN0YXRlKCkge30sXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gZW5xdWV1ZVNldFN0YXRlKCkge31cbn0sXG4gICAgRSA9IE9iamVjdC5hc3NpZ24sXG4gICAgRiA9IHt9O1xuXG5mdW5jdGlvbiBHKGEsIGIsIGMpIHtcbiAgdGhpcy5wcm9wcyA9IGE7XG4gIHRoaXMuY29udGV4dCA9IGI7XG4gIHRoaXMucmVmcyA9IEY7XG4gIHRoaXMudXBkYXRlciA9IGMgfHwgRDtcbn1cblxuRy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuXG5HLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIGlmIChcIm9iamVjdFwiICE9PSBfdHlwZW9mKGEpICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGEgJiYgbnVsbCAhPSBhKSB0aHJvdyBFcnJvcihcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiKTtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBhLCBiLCBcInNldFN0YXRlXCIpO1xufTtcblxuRy5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoYSkge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGEsIFwiZm9yY2VVcGRhdGVcIik7XG59O1xuXG5mdW5jdGlvbiBIKCkge31cblxuSC5wcm90b3R5cGUgPSBHLnByb3RvdHlwZTtcblxuZnVuY3Rpb24gSShhLCBiLCBjKSB7XG4gIHRoaXMucHJvcHMgPSBhO1xuICB0aGlzLmNvbnRleHQgPSBiO1xuICB0aGlzLnJlZnMgPSBGO1xuICB0aGlzLnVwZGF0ZXIgPSBjIHx8IEQ7XG59XG5cbnZhciBKID0gSS5wcm90b3R5cGUgPSBuZXcgSCgpO1xuSi5jb25zdHJ1Y3RvciA9IEk7XG5FKEosIEcucHJvdG90eXBlKTtcbkouaXNQdXJlUmVhY3RDb21wb25lbnQgPSAhMDtcbnZhciBLID0gQXJyYXkuaXNBcnJheSxcbiAgICBMID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICBNID0ge1xuICBjdXJyZW50OiBudWxsXG59LFxuICAgIE4gPSB7XG4gIGtleTogITAsXG4gIHJlZjogITAsXG4gIF9fc2VsZjogITAsXG4gIF9fc291cmNlOiAhMFxufTtcblxuZnVuY3Rpb24gTyhhLCBiLCBjKSB7XG4gIHZhciBkLFxuICAgICAgZSA9IHt9LFxuICAgICAgZiA9IG51bGwsXG4gICAgICBnID0gbnVsbDtcbiAgaWYgKG51bGwgIT0gYikgZm9yIChkIGluIHZvaWQgMCAhPT0gYi5yZWYgJiYgKGcgPSBiLnJlZiksIHZvaWQgMCAhPT0gYi5rZXkgJiYgKGYgPSBcIlwiICsgYi5rZXkpLCBiKSB7XG4gICAgTC5jYWxsKGIsIGQpICYmICFOLmhhc093blByb3BlcnR5KGQpICYmIChlW2RdID0gYltkXSk7XG4gIH1cbiAgdmFyIGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKDEgPT09IGgpIGUuY2hpbGRyZW4gPSBjO2Vsc2UgaWYgKDEgPCBoKSB7XG4gICAgZm9yICh2YXIgayA9IEFycmF5KGgpLCBtID0gMDsgbSA8IGg7IG0rKykge1xuICAgICAga1ttXSA9IGFyZ3VtZW50c1ttICsgMl07XG4gICAgfVxuXG4gICAgZS5jaGlsZHJlbiA9IGs7XG4gIH1cbiAgaWYgKGEgJiYgYS5kZWZhdWx0UHJvcHMpIGZvciAoZCBpbiBoID0gYS5kZWZhdWx0UHJvcHMsIGgpIHtcbiAgICB2b2lkIDAgPT09IGVbZF0gJiYgKGVbZF0gPSBoW2RdKTtcbiAgfVxuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBsLFxuICAgIHR5cGU6IGEsXG4gICAga2V5OiBmLFxuICAgIHJlZjogZyxcbiAgICBwcm9wczogZSxcbiAgICBfb3duZXI6IE0uY3VycmVudFxuICB9O1xufVxuXG5mdW5jdGlvbiBmYShhLCBiKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IGwsXG4gICAgdHlwZTogYS50eXBlLFxuICAgIGtleTogYixcbiAgICByZWY6IGEucmVmLFxuICAgIHByb3BzOiBhLnByb3BzLFxuICAgIF9vd25lcjogYS5fb3duZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gUChhKSB7XG4gIHJldHVybiBcIm9iamVjdFwiID09PSBfdHlwZW9mKGEpICYmIG51bGwgIT09IGEgJiYgYS4kJHR5cGVvZiA9PT0gbDtcbn1cblxuZnVuY3Rpb24gZXNjYXBlKGEpIHtcbiAgdmFyIGIgPSB7XG4gICAgXCI9XCI6IFwiPTBcIixcbiAgICBcIjpcIjogXCI9MlwiXG4gIH07XG4gIHJldHVybiBcIiRcIiArIGEucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBiW2NdO1xuICB9KTtcbn1cblxudmFyIFEgPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBSKGEsIGIpIHtcbiAgcmV0dXJuIFwib2JqZWN0XCIgPT09IF90eXBlb2YoYSkgJiYgbnVsbCAhPT0gYSAmJiBudWxsICE9IGEua2V5ID8gZXNjYXBlKFwiXCIgKyBhLmtleSkgOiBiLnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gUyhhLCBiLCBjLCBkLCBlKSB7XG4gIHZhciBmID0gX3R5cGVvZihhKTtcblxuICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gZiB8fCBcImJvb2xlYW5cIiA9PT0gZikgYSA9IG51bGw7XG4gIHZhciBnID0gITE7XG4gIGlmIChudWxsID09PSBhKSBnID0gITA7ZWxzZSBzd2l0Y2ggKGYpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgZyA9ICEwO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICBzd2l0Y2ggKGEuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBsOlxuICAgICAgICBjYXNlIG46XG4gICAgICAgICAgZyA9ICEwO1xuICAgICAgfVxuXG4gIH1cbiAgaWYgKGcpIHJldHVybiBnID0gYSwgZSA9IGUoZyksIGEgPSBcIlwiID09PSBkID8gXCIuXCIgKyBSKGcsIDApIDogZCwgSyhlKSA/IChjID0gXCJcIiwgbnVsbCAhPSBhICYmIChjID0gYS5yZXBsYWNlKFEsIFwiJCYvXCIpICsgXCIvXCIpLCBTKGUsIGIsIGMsIFwiXCIsIGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIG07XG4gIH0pKSA6IG51bGwgIT0gZSAmJiAoUChlKSAmJiAoZSA9IGZhKGUsIGMgKyAoIWUua2V5IHx8IGcgJiYgZy5rZXkgPT09IGUua2V5ID8gXCJcIiA6IChcIlwiICsgZS5rZXkpLnJlcGxhY2UoUSwgXCIkJi9cIikgKyBcIi9cIikgKyBhKSksIGIucHVzaChlKSksIDE7XG4gIGcgPSAwO1xuICBkID0gXCJcIiA9PT0gZCA/IFwiLlwiIDogZCArIFwiOlwiO1xuICBpZiAoSyhhKSkgZm9yICh2YXIgaCA9IDA7IGggPCBhLmxlbmd0aDsgaCsrKSB7XG4gICAgZiA9IGFbaF07XG4gICAgdmFyIGsgPSBkICsgUihmLCBoKTtcbiAgICBnICs9IFMoZiwgYiwgYywgaywgZSk7XG4gIH0gZWxzZSBpZiAoayA9IGVhKGEpLCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBrKSBmb3IgKGEgPSBrLmNhbGwoYSksIGggPSAwOyAhKGYgPSBhLm5leHQoKSkuZG9uZTspIHtcbiAgICBmID0gZi52YWx1ZSwgayA9IGQgKyBSKGYsIGgrKyksIGcgKz0gUyhmLCBiLCBjLCBrLCBlKTtcbiAgfSBlbHNlIGlmIChcIm9iamVjdFwiID09PSBmKSB0aHJvdyBiID0gU3RyaW5nKGEpLCBFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoXCJbb2JqZWN0IE9iamVjdF1cIiA9PT0gYiA/IFwib2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikgKyBcIn1cIiA6IGIpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpO1xuICByZXR1cm4gZztcbn1cblxuZnVuY3Rpb24gVChhLCBiLCBjKSB7XG4gIGlmIChudWxsID09IGEpIHJldHVybiBhO1xuICB2YXIgZCA9IFtdLFxuICAgICAgZSA9IDA7XG4gIFMoYSwgZCwgXCJcIiwgXCJcIiwgZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gYi5jYWxsKGMsIGYsIGUrKyk7XG4gIH0pO1xuICByZXR1cm4gZDtcbn1cblxuZnVuY3Rpb24gaGEoYSkge1xuICBpZiAoLTEgPT09IGEuX3N0YXR1cykge1xuICAgIHZhciBiID0gYS5fcmVzdWx0O1xuICAgIGIgPSBiKCk7XG4gICAgYi50aGVuKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoMCA9PT0gYS5fc3RhdHVzIHx8IC0xID09PSBhLl9zdGF0dXMpIGEuX3N0YXR1cyA9IDEsIGEuX3Jlc3VsdCA9IGM7XG4gICAgfSwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmICgwID09PSBhLl9zdGF0dXMgfHwgLTEgPT09IGEuX3N0YXR1cykgYS5fc3RhdHVzID0gMiwgYS5fcmVzdWx0ID0gYztcbiAgICB9KTtcbiAgICAtMSA9PT0gYS5fc3RhdHVzICYmIChhLl9zdGF0dXMgPSAwLCBhLl9yZXN1bHQgPSBiKTtcbiAgfVxuXG4gIGlmICgxID09PSBhLl9zdGF0dXMpIHJldHVybiBhLl9yZXN1bHQuZGVmYXVsdDtcbiAgdGhyb3cgYS5fcmVzdWx0O1xufVxuXG52YXIgVSA9IHtcbiAgY3VycmVudDogbnVsbFxufTtcblxuZnVuY3Rpb24gaWEoKSB7XG4gIHJldHVybiBuZXcgV2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBWKCkge1xuICByZXR1cm4ge1xuICAgIHM6IDAsXG4gICAgdjogdm9pZCAwLFxuICAgIG86IG51bGwsXG4gICAgcDogbnVsbFxuICB9O1xufVxuXG52YXIgVyA9IHtcbiAgY3VycmVudDogbnVsbFxufTtcblxuZnVuY3Rpb24gWChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlT3B0aW1pc3RpYyhhLCBiKTtcbn1cblxudmFyIFkgPSB7XG4gIHRyYW5zaXRpb246IG51bGxcbn0sXG4gICAgWiA9IHt9LFxuICAgIGphID0ge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBXLFxuICBSZWFjdEN1cnJlbnRDYWNoZTogVSxcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFksXG4gIFJlYWN0Q3VycmVudE93bmVyOiBNLFxuICBDb250ZXh0UmVnaXN0cnk6IFpcbn07XG5leHBvcnRzLkNoaWxkcmVuID0ge1xuICBtYXA6IFQsXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goYSwgYiwgYykge1xuICAgIFQoYSwgZnVuY3Rpb24gKCkge1xuICAgICAgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sIGMpO1xuICB9LFxuICBjb3VudDogZnVuY3Rpb24gY291bnQoYSkge1xuICAgIHZhciBiID0gMDtcbiAgICBUKGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGIrKztcbiAgICB9KTtcbiAgICByZXR1cm4gYjtcbiAgfSxcbiAgdG9BcnJheTogZnVuY3Rpb24gdG9BcnJheShhKSB7XG4gICAgcmV0dXJuIFQoYSwgZnVuY3Rpb24gKGIpIHtcbiAgICAgIHJldHVybiBiO1xuICAgIH0pIHx8IFtdO1xuICB9LFxuICBvbmx5OiBmdW5jdGlvbiBvbmx5KGEpIHtcbiAgICBpZiAoIVAoYSkpIHRocm93IEVycm9yKFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIpO1xuICAgIHJldHVybiBhO1xuICB9XG59O1xuZXhwb3J0cy5Db21wb25lbnQgPSBHO1xuZXhwb3J0cy5GcmFnbWVudCA9IHA7XG5leHBvcnRzLlByb2ZpbGVyID0gcjtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IEk7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBxO1xuZXhwb3J0cy5TdXNwZW5zZSA9IHg7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gamE7XG5cbmV4cG9ydHMuY2FjaGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBiID0gVS5jdXJyZW50O1xuICAgIGlmICghYikgcmV0dXJuIGEuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB2YXIgYyA9IGIuZ2V0Q2FjaGVGb3JUeXBlKGlhKTtcbiAgICBiID0gYy5nZXQoYSk7XG4gICAgdm9pZCAwID09PSBiICYmIChiID0gVigpLCBjLnNldChhLCBiKSk7XG4gICAgYyA9IDA7XG5cbiAgICBmb3IgKHZhciBkID0gYXJndW1lbnRzLmxlbmd0aDsgYyA8IGQ7IGMrKykge1xuICAgICAgdmFyIGUgPSBhcmd1bWVudHNbY107XG5cbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlIHx8IFwib2JqZWN0XCIgPT09IF90eXBlb2YoZSkgJiYgbnVsbCAhPT0gZSkge1xuICAgICAgICB2YXIgZiA9IGIubztcbiAgICAgICAgbnVsbCA9PT0gZiAmJiAoYi5vID0gZiA9IG5ldyBXZWFrTWFwKCkpO1xuICAgICAgICBiID0gZi5nZXQoZSk7XG4gICAgICAgIHZvaWQgMCA9PT0gYiAmJiAoYiA9IFYoKSwgZi5zZXQoZSwgYikpO1xuICAgICAgfSBlbHNlIGYgPSBiLnAsIG51bGwgPT09IGYgJiYgKGIucCA9IGYgPSBuZXcgTWFwKCkpLCBiID0gZi5nZXQoZSksIHZvaWQgMCA9PT0gYiAmJiAoYiA9IFYoKSwgZi5zZXQoZSwgYikpO1xuICAgIH1cblxuICAgIGlmICgxID09PSBiLnMpIHJldHVybiBiLnY7XG4gICAgaWYgKDIgPT09IGIucykgdGhyb3cgYi52O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBnID0gYS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgYyA9IGI7XG4gICAgICBjLnMgPSAxO1xuICAgICAgcmV0dXJuIGMudiA9IGc7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgdGhyb3cgZyA9IGIsIGcucyA9IDIsIGcudiA9IGgsIGg7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICBpZiAobnVsbCA9PT0gYSB8fCB2b2lkIDAgPT09IGEpIHRocm93IEVycm9yKFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBhICsgXCIuXCIpO1xuICB2YXIgZCA9IEUoe30sIGEucHJvcHMpLFxuICAgICAgZSA9IGEua2V5LFxuICAgICAgZiA9IGEucmVmLFxuICAgICAgZyA9IGEuX293bmVyO1xuXG4gIGlmIChudWxsICE9IGIpIHtcbiAgICB2b2lkIDAgIT09IGIucmVmICYmIChmID0gYi5yZWYsIGcgPSBNLmN1cnJlbnQpO1xuICAgIHZvaWQgMCAhPT0gYi5rZXkgJiYgKGUgPSBcIlwiICsgYi5rZXkpO1xuICAgIGlmIChhLnR5cGUgJiYgYS50eXBlLmRlZmF1bHRQcm9wcykgdmFyIGggPSBhLnR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChrIGluIGIpIHtcbiAgICAgIEwuY2FsbChiLCBrKSAmJiAhTi5oYXNPd25Qcm9wZXJ0eShrKSAmJiAoZFtrXSA9IHZvaWQgMCA9PT0gYltrXSAmJiB2b2lkIDAgIT09IGggPyBoW2tdIDogYltrXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGsgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKDEgPT09IGspIGQuY2hpbGRyZW4gPSBjO2Vsc2UgaWYgKDEgPCBrKSB7XG4gICAgaCA9IEFycmF5KGspO1xuXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCBrOyBtKyspIHtcbiAgICAgIGhbbV0gPSBhcmd1bWVudHNbbSArIDJdO1xuICAgIH1cblxuICAgIGQuY2hpbGRyZW4gPSBoO1xuICB9XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IGwsXG4gICAgdHlwZTogYS50eXBlLFxuICAgIGtleTogZSxcbiAgICByZWY6IGYsXG4gICAgcHJvcHM6IGQsXG4gICAgX293bmVyOiBnXG4gIH07XG59O1xuXG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoYSkge1xuICBhID0ge1xuICAgICQkdHlwZW9mOiB1LFxuICAgIF9jdXJyZW50VmFsdWU6IGEsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGEsXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsLFxuICAgIF9kZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgX2dsb2JhbE5hbWU6IG51bGxcbiAgfTtcbiAgYS5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogdCxcbiAgICBfY29udGV4dDogYVxuICB9O1xuICByZXR1cm4gYS5Db25zdW1lciA9IGE7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBPO1xuXG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbiAoYSkge1xuICB2YXIgYiA9IE8uYmluZChudWxsLCBhKTtcbiAgYi50eXBlID0gYTtcbiAgcmV0dXJuIGI7XG59O1xuXG5leHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59O1xuXG5leHBvcnRzLmNyZWF0ZVNlcnZlckNvbnRleHQgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgYyA9ICEwO1xuXG4gIGlmICghWlthXSkge1xuICAgIGMgPSAhMTtcbiAgICB2YXIgZCA9IHtcbiAgICAgICQkdHlwZW9mOiB2LFxuICAgICAgX2N1cnJlbnRWYWx1ZTogYixcbiAgICAgIF9jdXJyZW50VmFsdWUyOiBiLFxuICAgICAgX2RlZmF1bHRWYWx1ZTogYixcbiAgICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgQ29uc3VtZXI6IG51bGwsXG4gICAgICBfZ2xvYmFsTmFtZTogYVxuICAgIH07XG4gICAgZC5Qcm92aWRlciA9IHtcbiAgICAgICQkdHlwZW9mOiB0LFxuICAgICAgX2NvbnRleHQ6IGRcbiAgICB9O1xuICAgIFpbYV0gPSBkO1xuICB9XG5cbiAgZCA9IFpbYV07XG4gIGlmIChkLl9kZWZhdWx0VmFsdWUgPT09IEIpIGQuX2RlZmF1bHRWYWx1ZSA9IGIsIGQuX2N1cnJlbnRWYWx1ZSA9PT0gQiAmJiAoZC5fY3VycmVudFZhbHVlID0gYiksIGQuX2N1cnJlbnRWYWx1ZTIgPT09IEIgJiYgKGQuX2N1cnJlbnRWYWx1ZTIgPSBiKTtlbHNlIGlmIChjKSB0aHJvdyBFcnJvcihcIlNlcnZlckNvbnRleHQ6IFwiICsgYSArIFwiIGFscmVhZHkgZGVmaW5lZFwiKTtcbiAgcmV0dXJuIGQ7XG59O1xuXG5leHBvcnRzLmV4cGVyaW1lbnRhbF91c2VFZmZlY3RFdmVudCA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlRWZmZWN0RXZlbnQoYSk7XG59O1xuXG5leHBvcnRzLmV4cGVyaW1lbnRhbF91c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIFgoYSwgYik7XG59O1xuXG5leHBvcnRzLmZvcndhcmRSZWYgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiB3LFxuICAgIHJlbmRlcjogYVxuICB9O1xufTtcblxuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IFA7XG5cbmV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IEEsXG4gICAgX3BheWxvYWQ6IHtcbiAgICAgIF9zdGF0dXM6IC0xLFxuICAgICAgX3Jlc3VsdDogYVxuICAgIH0sXG4gICAgX2luaXQ6IGhhXG4gIH07XG59O1xuXG5leHBvcnRzLm1lbW8gPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiB6LFxuICAgIHR5cGU6IGEsXG4gICAgY29tcGFyZTogdm9pZCAwID09PSBiID8gbnVsbCA6IGJcbiAgfTtcbn07XG5cbmV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uID0gZnVuY3Rpb24gKGEpIHtcbiAgdmFyIGIgPSBZLnRyYW5zaXRpb247XG4gIFkudHJhbnNpdGlvbiA9IHt9O1xuXG4gIHRyeSB7XG4gICAgYSgpO1xuICB9IGZpbmFsbHkge1xuICAgIFkudHJhbnNpdGlvbiA9IGI7XG4gIH1cbn07XG5cbmV4cG9ydHMudW5zdGFibGVfQ2FjaGUgPSBjYTtcbmV4cG9ydHMudW5zdGFibGVfRGVidWdUcmFjaW5nTW9kZSA9IGFhO1xuZXhwb3J0cy51bnN0YWJsZV9PZmZzY3JlZW4gPSBiYTtcbmV4cG9ydHMudW5zdGFibGVfU3VzcGVuc2VMaXN0ID0geTtcblxuZXhwb3J0cy51bnN0YWJsZV9hY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IEVycm9yKFwiYWN0KC4uLikgaXMgbm90IHN1cHBvcnRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBvZiBSZWFjdC5cIik7XG59O1xuXG5leHBvcnRzLnVuc3RhYmxlX2dldENhY2hlRm9yVHlwZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHZhciBiID0gVS5jdXJyZW50O1xuICByZXR1cm4gYiA/IGIuZ2V0Q2FjaGVGb3JUeXBlKGEpIDogYSgpO1xufTtcblxuZXhwb3J0cy51bnN0YWJsZV9nZXRDYWNoZVNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGEgPSBVLmN1cnJlbnQ7XG4gIHJldHVybiBhID8gYS5nZXRDYWNoZVNpZ25hbCgpIDogKGEgPSBuZXcgQWJvcnRDb250cm9sbGVyKCksIGEuYWJvcnQoRXJyb3IoXCJUaGlzIENhY2hlU2lnbmFsIHdhcyByZXF1ZXN0ZWQgb3V0c2lkZSBSZWFjdCB3aGljaCBtZWFucyB0aGF0IGl0IGlzIGltbWVkaWF0ZWx5IGFib3J0ZWQuXCIpKSwgYS5zaWduYWwpO1xufTtcblxuZXhwb3J0cy51bnN0YWJsZV9wb3N0cG9uZSA9IGZ1bmN0aW9uIChhKSB7XG4gIGEgPSBFcnJvcihhKTtcbiAgYS4kJHR5cGVvZiA9IGRhO1xuICB0aHJvdyBhO1xufTtcblxuZXhwb3J0cy51bnN0YWJsZV91c2VDYWNoZVJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlQ2FjaGVSZWZyZXNoKCk7XG59O1xuXG5leHBvcnRzLnVuc3RhYmxlX3VzZU1lbW9DYWNoZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlTWVtb0NhY2hlKGEpO1xufTtcblxuZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZShhKTtcbn07XG5cbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZUNhbGxiYWNrKGEsIGIpO1xufTtcblxuZXhwb3J0cy51c2VDb250ZXh0ID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VDb250ZXh0KGEpO1xufTtcblxuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKCkge307XG5cbmV4cG9ydHMudXNlRGVmZXJyZWRWYWx1ZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShhLCBiKTtcbn07XG5cbmV4cG9ydHMudXNlRWZmZWN0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VFZmZlY3QoYSwgYik7XG59O1xuXG5leHBvcnRzLnVzZUlkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZUlkKCk7XG59O1xuXG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZUltcGVyYXRpdmVIYW5kbGUoYSwgYiwgYyk7XG59O1xuXG5leHBvcnRzLnVzZUluc2VydGlvbkVmZmVjdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlSW5zZXJ0aW9uRWZmZWN0KGEsIGIpO1xufTtcblxuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZUxheW91dEVmZmVjdChhLCBiKTtcbn07XG5cbmV4cG9ydHMudXNlTWVtbyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlTWVtbyhhLCBiKTtcbn07XG5cbmV4cG9ydHMudXNlT3B0aW1pc3RpYyA9IFg7XG5cbmV4cG9ydHMudXNlUmVkdWNlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlUmVkdWNlcihhLCBiLCBjKTtcbn07XG5cbmV4cG9ydHMudXNlUmVmID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VSZWYoYSk7XG59O1xuXG5leHBvcnRzLnVzZVN0YXRlID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VTdGF0ZShhKTtcbn07XG5cbmV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmUgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZVN5bmNFeHRlcm5hbFN0b3JlKGEsIGIsIGMpO1xufTtcblxuZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZVRyYW5zaXRpb24oKTtcbn07XG5cbmV4cG9ydHMudmVyc2lvbiA9IFwiMTguMy4wLWV4cGVyaW1lbnRhbC01MWZmZDM1NjQtMjAyMzEwMjVcIjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OTpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuaWYgKHRydWUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3OCk7XG59IGVsc2Uge31cblxuLyoqKi8gfSksXG5cbi8qKiovIDIwNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187ZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgJ3VzZSBzdHJpY3QnOyAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBpZiAodHJ1ZSkge1xuICAgICEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtfX3dlYnBhY2tfcmVxdWlyZV9fKDQzMCldLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPSAoZmFjdG9yeSksXG5cdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAodHlwZW9mIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0KF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXy5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSkgOiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcbiAgfSBlbHNlIHt9XG59KSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrOlxcZCsvO1xuICB2YXIgQ0hST01FX0lFX1NUQUNLX1JFR0VYUCA9IC9eXFxzKmF0IC4qKFxcUys6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZV0pPyQvO1xuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICovXG4gICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICB9XG5cbiAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT8kLztcbiAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvWygpXS9nLCAnJykpO1xuICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgIH0sXG4gICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCk7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignKGV2YWwgJykgPiAtMSkge1xuICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXigpXSopfChcXCksLiokKS9nLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2FuaXRpemVkTGluZSA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJyk7IC8vIGNhcHR1cmUgYW5kIHByZXNldmUgdGhlIHBhcmVudGhlc2l6ZWQgbG9jYXRpb24gXCIoL2Zvby9teSBiYXIuanM6MTI6ODcpXCIgaW5cbiAgICAgICAgLy8gY2FzZSBpdCBoYXMgc3BhY2VzIGluIGl0LCBhcyB0aGUgc3RyaW5nIGlzIHNwbGl0IG9uIFxccysgbGF0ZXIgb25cblxuICAgICAgICB2YXIgbG9jYXRpb24gPSBzYW5pdGl6ZWRMaW5lLm1hdGNoKC8gKFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQpLyk7IC8vIHJlbW92ZSB0aGUgcGFyZW50aGVzaXplZCBsb2NhdGlvbiBmcm9tIHRoZSBsaW5lLCBpZiBpdCB3YXMgbWF0Y2hlZFxuXG4gICAgICAgIHNhbml0aXplZExpbmUgPSBsb2NhdGlvbiA/IHNhbml0aXplZExpbmUucmVwbGFjZShsb2NhdGlvblswXSwgJycpIDogc2FuaXRpemVkTGluZTtcbiAgICAgICAgdmFyIHRva2VucyA9IHNhbml0aXplZExpbmUuc3BsaXQoL1xccysvKS5zbGljZSgxKTsgLy8gaWYgYSBsb2NhdGlvbiB3YXMgbWF0Y2hlZCwgcGFzcyBpdCB0byBleHRyYWN0TG9jYXRpb24oKSBvdGhlcndpc2UgcG9wIHRoZSBsYXN0IHRva2VuXG5cbiAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsb2NhdGlvbiA/IGxvY2F0aW9uWzFdIDogdG9rZW5zLnBvcCgpKTtcbiAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9LFxuICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWw6XFxkKzpcXGQrL2csICc6JDEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbGluZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWVSZWdleCA9IC8oKC4qXCIuK1wiW15AXSopP1teQF0qKSg/OkApLztcbiAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxpbmUubWF0Y2goZnVuY3Rpb25OYW1lUmVnZXgpO1xuICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBtYXRjaGVzICYmIG1hdGNoZXNbMV0gPyBtYXRjaGVzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obGluZS5yZXBsYWNlKGZ1bmN0aW9uTmFtZVJlZ2V4LCAnJykpO1xuICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICB9LFxuICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgZS5tZXNzYWdlLmluZGV4T2YoJ1xcbicpID4gLTEgJiYgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTExKGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgIHBhcnNlT3BlcmExMTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExKGVycm9yKSB7XG4gICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSB0b2tlbnMuc2hpZnQoKSB8fCAnJztcbiAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJykucmVwbGFjZSgvXFwoW14pXSpcXCkvZywgJycpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFyZ3NSYXc7XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteKV0qKVxcKS8pKSB7XG4gICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW14oXStcXCgoW14pXSopXFwpJC8sICckMScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBhcmdzUmF3ID09PSB1bmRlZmluZWQgfHwgYXJnc1JhdyA9PT0gJ1thcmd1bWVudHMgbm90IGF2YWlsYWJsZV0nID8gdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgIH0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9O1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNzI6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgYFR5cGVFcnJvcmAgbWVzc2FnZSBmb3IgXCJGdW5jdGlvbnNcIiBtZXRob2RzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xuXG52YXIgTkFOID0gMCAvIDA7XG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG5cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG5cbnZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZztcbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG5cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG5cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG5cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cblxudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cblxudmFyIGZyZWVHbG9iYWwgPSAodHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKGdsb2JhbCkpID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cblxudmFyIGZyZWVTZWxmID0gKHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yoc2VsZikpID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG5cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xuXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cblxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xuXG52YXIgbm93ID0gZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5cblxuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgbGFzdEFyZ3MsXG4gICAgICBsYXN0VGhpcyxcbiAgICAgIG1heFdhaXQsXG4gICAgICByZXN1bHQsXG4gICAgICB0aW1lcklkLFxuICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgbGVhZGluZyA9IGZhbHNlLFxuICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cblxuICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcblxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTsgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cblxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7IC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuXG4gICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgcmVzdWx0ID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuICAgIHJldHVybiBtYXhpbmcgPyBuYXRpdmVNaW4ocmVzdWx0LCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7IC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG5cbiAgICByZXR1cm4gbGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgdGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCB8fCB0aW1lU2luY2VMYXN0Q2FsbCA8IDAgfHwgbWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuXG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9IC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuXG5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkOyAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cblxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuXG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcbiAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAqIGV2ZXJ5IGB3YWl0YCBtaWxsaXNlY29uZHMuIFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgXG4gKiBtZXRob2QgdG8gY2FuY2VsIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvXG4gKiBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS4gUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2BcbiAqIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZSBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGBcbiAqIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGVcbiAqIHRocm90dGxlZCBmdW5jdGlvbi4gU3Vic2VxdWVudCBjYWxscyB0byB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHJldHVybiB0aGVcbiAqIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIHRocm90dGxlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy50aHJvdHRsZWAgYW5kIGBfLmRlYm91bmNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIGludm9jYXRpb25zIHRvLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHRocm90dGxlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgZXhjZXNzaXZlbHkgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHdoaWxlIHNjcm9sbGluZy5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdzY3JvbGwnLCBfLnRocm90dGxlKHVwZGF0ZVBvc2l0aW9uLCAxMDApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHJlbmV3VG9rZW5gIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBidXQgbm90IG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IDUgbWludXRlcy5cbiAqIHZhciB0aHJvdHRsZWQgPSBfLnRocm90dGxlKHJlbmV3VG9rZW4sIDMwMDAwMCwgeyAndHJhaWxpbmcnOiBmYWxzZSB9KTtcbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCB0aHJvdHRsZWQpO1xuICpcbiAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgdGhyb3R0bGVkIGludm9jYXRpb24uXG4gKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCB0aHJvdHRsZWQuY2FuY2VsKTtcbiAqL1xuXG5cbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gIH1cblxuICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgfSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHZhbHVlKTtcblxuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgX3R5cGVvZih2YWx1ZSkgPT0gJ29iamVjdCc7XG59XG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gX3R5cGVvZih2YWx1ZSkgPT0gJ3N5bWJvbCcgfHwgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBzeW1ib2xUYWc7XG59XG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuXG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyBvdGhlciArICcnIDogb3RoZXI7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cblxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiBpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpIDogcmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0aHJvdHRsZTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDczMDpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBwcm92aWRlZCBkZXBlbmRlbmN5ICovIHZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjkpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gTFJVQ2FjaGU7IC8vIFRoaXMgd2lsbCBiZSBhIHByb3BlciBpdGVyYWJsZSAnTWFwJyBpbiBlbmdpbmVzIHRoYXQgc3VwcG9ydCBpdCxcbi8vIG9yIGEgZmFrZXktZmFrZSBQc2V1ZG9NYXAgaW4gb2xkZXIgdmVyc2lvbnMuXG5cbnZhciBNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwNyk7XG5cbnZhciB1dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7IC8vIEEgbGlua2VkIGxpc3QgdG8ga2VlcCB0cmFjayBvZiByZWNlbnRseS11c2VkLW5lc3NcblxuXG52YXIgWWFsbGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oNjk1KTsgLy8gdXNlIHN5bWJvbHMgaWYgcG9zc2libGUsIG90aGVyd2lzZSBqdXN0IF9wcm9wc1xuXG5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb2Nlc3MuZW52Ll9ub2RlTFJVQ2FjaGVGb3JjZU5vU3ltYm9sICE9PSAnMSc7XG52YXIgbWFrZVN5bWJvbDtcblxuaWYgKGhhc1N5bWJvbCkge1xuICBtYWtlU3ltYm9sID0gZnVuY3Rpb24gbWFrZVN5bWJvbChrZXkpIHtcbiAgICByZXR1cm4gU3ltYm9sKGtleSk7XG4gIH07XG59IGVsc2Uge1xuICBtYWtlU3ltYm9sID0gZnVuY3Rpb24gbWFrZVN5bWJvbChrZXkpIHtcbiAgICByZXR1cm4gJ18nICsga2V5O1xuICB9O1xufVxuXG52YXIgTUFYID0gbWFrZVN5bWJvbCgnbWF4Jyk7XG52YXIgTEVOR1RIID0gbWFrZVN5bWJvbCgnbGVuZ3RoJyk7XG52YXIgTEVOR1RIX0NBTENVTEFUT1IgPSBtYWtlU3ltYm9sKCdsZW5ndGhDYWxjdWxhdG9yJyk7XG52YXIgQUxMT1dfU1RBTEUgPSBtYWtlU3ltYm9sKCdhbGxvd1N0YWxlJyk7XG52YXIgTUFYX0FHRSA9IG1ha2VTeW1ib2woJ21heEFnZScpO1xudmFyIERJU1BPU0UgPSBtYWtlU3ltYm9sKCdkaXNwb3NlJyk7XG52YXIgTk9fRElTUE9TRV9PTl9TRVQgPSBtYWtlU3ltYm9sKCdub0Rpc3Bvc2VPblNldCcpO1xudmFyIExSVV9MSVNUID0gbWFrZVN5bWJvbCgnbHJ1TGlzdCcpO1xudmFyIENBQ0hFID0gbWFrZVN5bWJvbCgnY2FjaGUnKTtcblxuZnVuY3Rpb24gbmFpdmVMZW5ndGgoKSB7XG4gIHJldHVybiAxO1xufSAvLyBscnVMaXN0IGlzIGEgeWFsbGlzdCB3aGVyZSB0aGUgaGVhZCBpcyB0aGUgeW91bmdlc3Rcbi8vIGl0ZW0sIGFuZCB0aGUgdGFpbCBpcyB0aGUgb2xkZXN0LiAgdGhlIGxpc3QgY29udGFpbnMgdGhlIEhpdFxuLy8gb2JqZWN0cyBhcyB0aGUgZW50cmllcy5cbi8vIEVhY2ggSGl0IG9iamVjdCBoYXMgYSByZWZlcmVuY2UgdG8gaXRzIFlhbGxpc3QuTm9kZS4gIFRoaXNcbi8vIG5ldmVyIGNoYW5nZXMuXG4vL1xuLy8gY2FjaGUgaXMgYSBNYXAgKG9yIFBzZXVkb01hcCkgdGhhdCBtYXRjaGVzIHRoZSBrZXlzIHRvXG4vLyB0aGUgWWFsbGlzdC5Ob2RlIG9iamVjdC5cblxuXG5mdW5jdGlvbiBMUlVDYWNoZShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMUlVDYWNoZSkpIHtcbiAgICByZXR1cm4gbmV3IExSVUNhY2hlKG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBtYXg6IG9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIG1heCA9IHRoaXNbTUFYXSA9IG9wdGlvbnMubWF4OyAvLyBLaW5kIG9mIHdlaXJkIHRvIGhhdmUgYSBkZWZhdWx0IG1heCBvZiBJbmZpbml0eSwgYnV0IG9oIHdlbGwuXG5cbiAgaWYgKCFtYXggfHwgISh0eXBlb2YgbWF4ID09PSAnbnVtYmVyJykgfHwgbWF4IDw9IDApIHtcbiAgICB0aGlzW01BWF0gPSBJbmZpbml0eTtcbiAgfVxuXG4gIHZhciBsYyA9IG9wdGlvbnMubGVuZ3RoIHx8IG5haXZlTGVuZ3RoO1xuXG4gIGlmICh0eXBlb2YgbGMgIT09ICdmdW5jdGlvbicpIHtcbiAgICBsYyA9IG5haXZlTGVuZ3RoO1xuICB9XG5cbiAgdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0gPSBsYztcbiAgdGhpc1tBTExPV19TVEFMRV0gPSBvcHRpb25zLnN0YWxlIHx8IGZhbHNlO1xuICB0aGlzW01BWF9BR0VdID0gb3B0aW9ucy5tYXhBZ2UgfHwgMDtcbiAgdGhpc1tESVNQT1NFXSA9IG9wdGlvbnMuZGlzcG9zZTtcbiAgdGhpc1tOT19ESVNQT1NFX09OX1NFVF0gPSBvcHRpb25zLm5vRGlzcG9zZU9uU2V0IHx8IGZhbHNlO1xuICB0aGlzLnJlc2V0KCk7XG59IC8vIHJlc2l6ZSB0aGUgY2FjaGUgd2hlbiB0aGUgbWF4IGNoYW5nZXMuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExSVUNhY2hlLnByb3RvdHlwZSwgJ21heCcsIHtcbiAgc2V0OiBmdW5jdGlvbiBzZXQobUwpIHtcbiAgICBpZiAoIW1MIHx8ICEodHlwZW9mIG1MID09PSAnbnVtYmVyJykgfHwgbUwgPD0gMCkge1xuICAgICAgbUwgPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICB0aGlzW01BWF0gPSBtTDtcbiAgICB0cmltKHRoaXMpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tNQVhdO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMUlVDYWNoZS5wcm90b3R5cGUsICdhbGxvd1N0YWxlJywge1xuICBzZXQ6IGZ1bmN0aW9uIHNldChhbGxvd1N0YWxlKSB7XG4gICAgdGhpc1tBTExPV19TVEFMRV0gPSAhIWFsbG93U3RhbGU7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW0FMTE9XX1NUQUxFXTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTFJVQ2FjaGUucHJvdG90eXBlLCAnbWF4QWdlJywge1xuICBzZXQ6IGZ1bmN0aW9uIHNldChtQSkge1xuICAgIGlmICghbUEgfHwgISh0eXBlb2YgbUEgPT09ICdudW1iZXInKSB8fCBtQSA8IDApIHtcbiAgICAgIG1BID0gMDtcbiAgICB9XG5cbiAgICB0aGlzW01BWF9BR0VdID0gbUE7XG4gICAgdHJpbSh0aGlzKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbTUFYX0FHRV07XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWVcbn0pOyAvLyByZXNpemUgdGhlIGNhY2hlIHdoZW4gdGhlIGxlbmd0aENhbGN1bGF0b3IgY2hhbmdlcy5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExSVUNhY2hlLnByb3RvdHlwZSwgJ2xlbmd0aENhbGN1bGF0b3InLCB7XG4gIHNldDogZnVuY3Rpb24gc2V0KGxDKSB7XG4gICAgaWYgKHR5cGVvZiBsQyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbEMgPSBuYWl2ZUxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAobEMgIT09IHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdKSB7XG4gICAgICB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXSA9IGxDO1xuICAgICAgdGhpc1tMRU5HVEhdID0gMDtcbiAgICAgIHRoaXNbTFJVX0xJU1RdLmZvckVhY2goZnVuY3Rpb24gKGhpdCkge1xuICAgICAgICBoaXQubGVuZ3RoID0gdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0oaGl0LnZhbHVlLCBoaXQua2V5KTtcbiAgICAgICAgdGhpc1tMRU5HVEhdICs9IGhpdC5sZW5ndGg7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9XG5cbiAgICB0cmltKHRoaXMpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl07XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KExSVUNhY2hlLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbTEVOR1RIXTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTFJVQ2FjaGUucHJvdG90eXBlLCAnaXRlbUNvdW50Jywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tMUlVfTElTVF0ubGVuZ3RoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLnJmb3JFYWNoID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXM7XG5cbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpc1tMUlVfTElTVF0udGFpbDsgd2Fsa2VyICE9PSBudWxsOykge1xuICAgIHZhciBwcmV2ID0gd2Fsa2VyLnByZXY7XG4gICAgZm9yRWFjaFN0ZXAodGhpcywgZm4sIHdhbGtlciwgdGhpc3ApO1xuICAgIHdhbGtlciA9IHByZXY7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZvckVhY2hTdGVwKHNlbGYsIGZuLCBub2RlLCB0aGlzcCkge1xuICB2YXIgaGl0ID0gbm9kZS52YWx1ZTtcblxuICBpZiAoaXNTdGFsZShzZWxmLCBoaXQpKSB7XG4gICAgZGVsKHNlbGYsIG5vZGUpO1xuXG4gICAgaWYgKCFzZWxmW0FMTE9XX1NUQUxFXSkge1xuICAgICAgaGl0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoaXQpIHtcbiAgICBmbi5jYWxsKHRoaXNwLCBoaXQudmFsdWUsIGhpdC5rZXksIHNlbGYpO1xuICB9XG59XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXM7XG5cbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpc1tMUlVfTElTVF0uaGVhZDsgd2Fsa2VyICE9PSBudWxsOykge1xuICAgIHZhciBuZXh0ID0gd2Fsa2VyLm5leHQ7XG4gICAgZm9yRWFjaFN0ZXAodGhpcywgZm4sIHdhbGtlciwgdGhpc3ApO1xuICAgIHdhbGtlciA9IG5leHQ7XG4gIH1cbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpc1tMUlVfTElTVF0udG9BcnJheSgpLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBrLmtleTtcbiAgfSwgdGhpcyk7XG59O1xuXG5MUlVDYWNoZS5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpc1tMUlVfTElTVF0udG9BcnJheSgpLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBrLnZhbHVlO1xuICB9LCB0aGlzKTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXNbRElTUE9TRV0gJiYgdGhpc1tMUlVfTElTVF0gJiYgdGhpc1tMUlVfTElTVF0ubGVuZ3RoKSB7XG4gICAgdGhpc1tMUlVfTElTVF0uZm9yRWFjaChmdW5jdGlvbiAoaGl0KSB7XG4gICAgICB0aGlzW0RJU1BPU0VdKGhpdC5rZXksIGhpdC52YWx1ZSk7XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICB0aGlzW0NBQ0hFXSA9IG5ldyBNYXAoKTsgLy8gaGFzaCBvZiBpdGVtcyBieSBrZXlcblxuICB0aGlzW0xSVV9MSVNUXSA9IG5ldyBZYWxsaXN0KCk7IC8vIGxpc3Qgb2YgaXRlbXMgaW4gb3JkZXIgb2YgdXNlIHJlY2VuY3lcblxuICB0aGlzW0xFTkdUSF0gPSAwOyAvLyBsZW5ndGggb2YgaXRlbXMgaW4gdGhlIGxpc3Rcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5kdW1wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpc1tMUlVfTElTVF0ubWFwKGZ1bmN0aW9uIChoaXQpIHtcbiAgICBpZiAoIWlzU3RhbGUodGhpcywgaGl0KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgazogaGl0LmtleSxcbiAgICAgICAgdjogaGl0LnZhbHVlLFxuICAgICAgICBlOiBoaXQubm93ICsgKGhpdC5tYXhBZ2UgfHwgMClcbiAgICAgIH07XG4gICAgfVxuICB9LCB0aGlzKS50b0FycmF5KCkuZmlsdGVyKGZ1bmN0aW9uIChoKSB7XG4gICAgcmV0dXJuIGg7XG4gIH0pO1xufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLmR1bXBMcnUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzW0xSVV9MSVNUXTtcbn07XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbkxSVUNhY2hlLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gKG4sIG9wdHMpIHtcbiAgdmFyIHN0ciA9ICdMUlVDYWNoZSB7JztcbiAgdmFyIGV4dHJhcyA9IGZhbHNlO1xuICB2YXIgYXMgPSB0aGlzW0FMTE9XX1NUQUxFXTtcblxuICBpZiAoYXMpIHtcbiAgICBzdHIgKz0gJ1xcbiAgYWxsb3dTdGFsZTogdHJ1ZSc7XG4gICAgZXh0cmFzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBtYXggPSB0aGlzW01BWF07XG5cbiAgaWYgKG1heCAmJiBtYXggIT09IEluZmluaXR5KSB7XG4gICAgaWYgKGV4dHJhcykge1xuICAgICAgc3RyICs9ICcsJztcbiAgICB9XG5cbiAgICBzdHIgKz0gJ1xcbiAgbWF4OiAnICsgdXRpbC5pbnNwZWN0KG1heCwgb3B0cyk7XG4gICAgZXh0cmFzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBtYXhBZ2UgPSB0aGlzW01BWF9BR0VdO1xuXG4gIGlmIChtYXhBZ2UpIHtcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBzdHIgKz0gJywnO1xuICAgIH1cblxuICAgIHN0ciArPSAnXFxuICBtYXhBZ2U6ICcgKyB1dGlsLmluc3BlY3QobWF4QWdlLCBvcHRzKTtcbiAgICBleHRyYXMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGxjID0gdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl07XG5cbiAgaWYgKGxjICYmIGxjICE9PSBuYWl2ZUxlbmd0aCkge1xuICAgIGlmIChleHRyYXMpIHtcbiAgICAgIHN0ciArPSAnLCc7XG4gICAgfVxuXG4gICAgc3RyICs9ICdcXG4gIGxlbmd0aDogJyArIHV0aWwuaW5zcGVjdCh0aGlzW0xFTkdUSF0sIG9wdHMpO1xuICAgIGV4dHJhcyA9IHRydWU7XG4gIH1cblxuICB2YXIgZGlkRmlyc3QgPSBmYWxzZTtcbiAgdGhpc1tMUlVfTElTVF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChkaWRGaXJzdCkge1xuICAgICAgc3RyICs9ICcsXFxuICAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXh0cmFzKSB7XG4gICAgICAgIHN0ciArPSAnLFxcbic7XG4gICAgICB9XG5cbiAgICAgIGRpZEZpcnN0ID0gdHJ1ZTtcbiAgICAgIHN0ciArPSAnXFxuICAnO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSB1dGlsLmluc3BlY3QoaXRlbS5rZXkpLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4gICcpO1xuICAgIHZhciB2YWwgPSB7XG4gICAgICB2YWx1ZTogaXRlbS52YWx1ZVxuICAgIH07XG5cbiAgICBpZiAoaXRlbS5tYXhBZ2UgIT09IG1heEFnZSkge1xuICAgICAgdmFsLm1heEFnZSA9IGl0ZW0ubWF4QWdlO1xuICAgIH1cblxuICAgIGlmIChsYyAhPT0gbmFpdmVMZW5ndGgpIHtcbiAgICAgIHZhbC5sZW5ndGggPSBpdGVtLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoaXNTdGFsZSh0aGlzLCBpdGVtKSkge1xuICAgICAgdmFsLnN0YWxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YWwgPSB1dGlsLmluc3BlY3QodmFsLCBvcHRzKS5zcGxpdCgnXFxuJykuam9pbignXFxuICAnKTtcbiAgICBzdHIgKz0ga2V5ICsgJyA9PiAnICsgdmFsO1xuICB9KTtcblxuICBpZiAoZGlkRmlyc3QgfHwgZXh0cmFzKSB7XG4gICAgc3RyICs9ICdcXG4nO1xuICB9XG5cbiAgc3RyICs9ICd9JztcbiAgcmV0dXJuIHN0cjtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgbWF4QWdlKSB7XG4gIG1heEFnZSA9IG1heEFnZSB8fCB0aGlzW01BWF9BR0VdO1xuICB2YXIgbm93ID0gbWF4QWdlID8gRGF0ZS5ub3coKSA6IDA7XG4gIHZhciBsZW4gPSB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXSh2YWx1ZSwga2V5KTtcblxuICBpZiAodGhpc1tDQUNIRV0uaGFzKGtleSkpIHtcbiAgICBpZiAobGVuID4gdGhpc1tNQVhdKSB7XG4gICAgICBkZWwodGhpcywgdGhpc1tDQUNIRV0uZ2V0KGtleSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gdGhpc1tDQUNIRV0uZ2V0KGtleSk7XG4gICAgdmFyIGl0ZW0gPSBub2RlLnZhbHVlOyAvLyBkaXNwb3NlIG9mIHRoZSBvbGQgb25lIGJlZm9yZSBvdmVyd3JpdGluZ1xuICAgIC8vIHNwbGl0IG91dCBpbnRvIDIgaWZzIGZvciBiZXR0ZXIgY292ZXJhZ2UgdHJhY2tpbmdcblxuICAgIGlmICh0aGlzW0RJU1BPU0VdKSB7XG4gICAgICBpZiAoIXRoaXNbTk9fRElTUE9TRV9PTl9TRVRdKSB7XG4gICAgICAgIHRoaXNbRElTUE9TRV0oa2V5LCBpdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtLm5vdyA9IG5vdztcbiAgICBpdGVtLm1heEFnZSA9IG1heEFnZTtcbiAgICBpdGVtLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpc1tMRU5HVEhdICs9IGxlbiAtIGl0ZW0ubGVuZ3RoO1xuICAgIGl0ZW0ubGVuZ3RoID0gbGVuO1xuICAgIHRoaXMuZ2V0KGtleSk7XG4gICAgdHJpbSh0aGlzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBoaXQgPSBuZXcgRW50cnkoa2V5LCB2YWx1ZSwgbGVuLCBub3csIG1heEFnZSk7IC8vIG92ZXJzaXplZCBvYmplY3RzIGZhbGwgb3V0IG9mIGNhY2hlIGF1dG9tYXRpY2FsbHkuXG5cbiAgaWYgKGhpdC5sZW5ndGggPiB0aGlzW01BWF0pIHtcbiAgICBpZiAodGhpc1tESVNQT1NFXSkge1xuICAgICAgdGhpc1tESVNQT1NFXShrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0aGlzW0xFTkdUSF0gKz0gaGl0Lmxlbmd0aDtcbiAgdGhpc1tMUlVfTElTVF0udW5zaGlmdChoaXQpO1xuICB0aGlzW0NBQ0hFXS5zZXQoa2V5LCB0aGlzW0xSVV9MSVNUXS5oZWFkKTtcbiAgdHJpbSh0aGlzKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5MUlVDYWNoZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICBpZiAoIXRoaXNbQ0FDSEVdLmhhcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHZhciBoaXQgPSB0aGlzW0NBQ0hFXS5nZXQoa2V5KS52YWx1ZTtcblxuICBpZiAoaXNTdGFsZSh0aGlzLCBoaXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5MUlVDYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgdHJ1ZSk7XG59O1xuXG5MUlVDYWNoZS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGdldCh0aGlzLCBrZXksIGZhbHNlKTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlID0gdGhpc1tMUlVfTElTVF0udGFpbDtcbiAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgZGVsKHRoaXMsIG5vZGUpO1xuICByZXR1cm4gbm9kZS52YWx1ZTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5kZWwgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIGRlbCh0aGlzLCB0aGlzW0NBQ0hFXS5nZXQoa2V5KSk7XG59O1xuXG5MUlVDYWNoZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgLy8gcmVzZXQgdGhlIGNhY2hlXG4gIHRoaXMucmVzZXQoKTtcbiAgdmFyIG5vdyA9IERhdGUubm93KCk7IC8vIEEgcHJldmlvdXMgc2VyaWFsaXplZCBjYWNoZSBoYXMgdGhlIG1vc3QgcmVjZW50IGl0ZW1zIGZpcnN0XG5cbiAgZm9yICh2YXIgbCA9IGFyci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgIHZhciBoaXQgPSBhcnJbbF07XG4gICAgdmFyIGV4cGlyZXNBdCA9IGhpdC5lIHx8IDA7XG5cbiAgICBpZiAoZXhwaXJlc0F0ID09PSAwKSB7XG4gICAgICAvLyB0aGUgaXRlbSB3YXMgY3JlYXRlZCB3aXRob3V0IGV4cGlyYXRpb24gaW4gYSBub24gYWdlZCBjYWNoZVxuICAgICAgdGhpcy5zZXQoaGl0LmssIGhpdC52KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1heEFnZSA9IGV4cGlyZXNBdCAtIG5vdzsgLy8gZG9udCBhZGQgYWxyZWFkeSBleHBpcmVkIGl0ZW1zXG5cbiAgICAgIGlmIChtYXhBZ2UgPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0KGhpdC5rLCBoaXQudiwgbWF4QWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5wcnVuZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzW0NBQ0hFXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgZ2V0KHNlbGYsIGtleSwgZmFsc2UpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGdldChzZWxmLCBrZXksIGRvVXNlKSB7XG4gIHZhciBub2RlID0gc2VsZltDQUNIRV0uZ2V0KGtleSk7XG5cbiAgaWYgKG5vZGUpIHtcbiAgICB2YXIgaGl0ID0gbm9kZS52YWx1ZTtcblxuICAgIGlmIChpc1N0YWxlKHNlbGYsIGhpdCkpIHtcbiAgICAgIGRlbChzZWxmLCBub2RlKTtcbiAgICAgIGlmICghc2VsZltBTExPV19TVEFMRV0pIGhpdCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRvVXNlKSB7XG4gICAgICAgIHNlbGZbTFJVX0xJU1RdLnVuc2hpZnROb2RlKG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoaXQpIGhpdCA9IGhpdC52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBoaXQ7XG59XG5cbmZ1bmN0aW9uIGlzU3RhbGUoc2VsZiwgaGl0KSB7XG4gIGlmICghaGl0IHx8ICFoaXQubWF4QWdlICYmICFzZWxmW01BWF9BR0VdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHN0YWxlID0gZmFsc2U7XG4gIHZhciBkaWZmID0gRGF0ZS5ub3coKSAtIGhpdC5ub3c7XG5cbiAgaWYgKGhpdC5tYXhBZ2UpIHtcbiAgICBzdGFsZSA9IGRpZmYgPiBoaXQubWF4QWdlO1xuICB9IGVsc2Uge1xuICAgIHN0YWxlID0gc2VsZltNQVhfQUdFXSAmJiBkaWZmID4gc2VsZltNQVhfQUdFXTtcbiAgfVxuXG4gIHJldHVybiBzdGFsZTtcbn1cblxuZnVuY3Rpb24gdHJpbShzZWxmKSB7XG4gIGlmIChzZWxmW0xFTkdUSF0gPiBzZWxmW01BWF0pIHtcbiAgICBmb3IgKHZhciB3YWxrZXIgPSBzZWxmW0xSVV9MSVNUXS50YWlsOyBzZWxmW0xFTkdUSF0gPiBzZWxmW01BWF0gJiYgd2Fsa2VyICE9PSBudWxsOykge1xuICAgICAgLy8gV2Uga25vdyB0aGF0IHdlJ3JlIGFib3V0IHRvIGRlbGV0ZSB0aGlzIG9uZSwgYW5kIGFsc29cbiAgICAgIC8vIHdoYXQgdGhlIG5leHQgbGVhc3QgcmVjZW50bHkgdXNlZCBrZXkgd2lsbCBiZSwgc28ganVzdFxuICAgICAgLy8gZ28gYWhlYWQgYW5kIHNldCBpdCBub3cuXG4gICAgICB2YXIgcHJldiA9IHdhbGtlci5wcmV2O1xuICAgICAgZGVsKHNlbGYsIHdhbGtlcik7XG4gICAgICB3YWxrZXIgPSBwcmV2O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWwoc2VsZiwgbm9kZSkge1xuICBpZiAobm9kZSkge1xuICAgIHZhciBoaXQgPSBub2RlLnZhbHVlO1xuXG4gICAgaWYgKHNlbGZbRElTUE9TRV0pIHtcbiAgICAgIHNlbGZbRElTUE9TRV0oaGl0LmtleSwgaGl0LnZhbHVlKTtcbiAgICB9XG5cbiAgICBzZWxmW0xFTkdUSF0gLT0gaGl0Lmxlbmd0aDtcbiAgICBzZWxmW0NBQ0hFXS5kZWxldGUoaGl0LmtleSk7XG4gICAgc2VsZltMUlVfTElTVF0ucmVtb3ZlTm9kZShub2RlKTtcbiAgfVxufSAvLyBjbGFzc3ksIHNpbmNlIFY4IHByZWZlcnMgcHJlZGljdGFibGUgb2JqZWN0cy5cblxuXG5mdW5jdGlvbiBFbnRyeShrZXksIHZhbHVlLCBsZW5ndGgsIG5vdywgbWF4QWdlKSB7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICB0aGlzLm5vdyA9IG5vdztcbiAgdGhpcy5tYXhBZ2UgPSBtYXhBZ2UgfHwgMDtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OTpcbi8qKiovICgobW9kdWxlKSA9PiB7XG5cbi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9OyAvLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICB9XG59KSgpO1xuXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gIH0gLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcblxuXG4gIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICB9IC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcblxuXG4gIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRyYWluaW5nID0gZmFsc2U7XG5cbiAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgfVxuXG4gIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICBkcmFpblF1ZXVlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgaWYgKGRyYWluaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gIGRyYWluaW5nID0gdHJ1ZTtcbiAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcblxuICB3aGlsZSAobGVuKSB7XG4gICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgcXVldWUgPSBbXTtcblxuICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBjdXJyZW50UXVldWUgPSBudWxsO1xuICBkcmFpbmluZyA9IGZhbHNlO1xuICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG5cbiAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcblxuICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gIH1cbn07IC8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcblxuXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgdGhpcy5mdW4gPSBmdW47XG4gIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cblxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5cbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5cbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gW107XG59O1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICcvJztcbn07XG5cbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gMDtcbn07XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMDc6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5pZiAocHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfbmFtZSA9PT0gJ3BzZXVkb21hcCcgJiYgcHJvY2Vzcy5lbnYubnBtX2xpZmVjeWNsZV9zY3JpcHQgPT09ICd0ZXN0JykgcHJvY2Vzcy5lbnYuVEVTVF9QU0VVRE9NQVAgPSAndHJ1ZSc7XG5cbmlmICh0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmICFwcm9jZXNzLmVudi5URVNUX1BTRVVET01BUCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IE1hcDtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjEpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzYxOlxuLyoqKi8gKChtb2R1bGUpID0+IHtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gUHNldWRvTWFwO1xuXG5mdW5jdGlvbiBQc2V1ZG9NYXAoc2V0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQc2V1ZG9NYXApKSAvLyB3aHl5eXl5eXlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgUHNldWRvTWFwIHJlcXVpcmVzICduZXcnXCIpO1xuICB0aGlzLmNsZWFyKCk7XG5cbiAgaWYgKHNldCkge1xuICAgIGlmIChzZXQgaW5zdGFuY2VvZiBQc2V1ZG9NYXAgfHwgdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXQgaW5zdGFuY2VvZiBNYXApIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICB0aGlzLnNldChrZXksIHZhbHVlKTtcbiAgICB9LCB0aGlzKTtlbHNlIGlmIChBcnJheS5pc0FycmF5KHNldCkpIHNldC5mb3JFYWNoKGZ1bmN0aW9uIChrdikge1xuICAgICAgdGhpcy5zZXQoa3ZbMF0sIGt2WzFdKTtcbiAgICB9LCB0aGlzKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgYXJndW1lbnQnKTtcbiAgfVxufVxuXG5Qc2V1ZG9NYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpcztcbiAgT2JqZWN0LmtleXModGhpcy5fZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChrICE9PSAnc2l6ZScpIGZuLmNhbGwodGhpc3AsIHRoaXMuX2RhdGFba10udmFsdWUsIHRoaXMuX2RhdGFba10ua2V5KTtcbiAgfSwgdGhpcyk7XG59O1xuXG5Qc2V1ZG9NYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrKSB7XG4gIHJldHVybiAhIWZpbmQodGhpcy5fZGF0YSwgayk7XG59O1xuXG5Qc2V1ZG9NYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrKSB7XG4gIHZhciByZXMgPSBmaW5kKHRoaXMuX2RhdGEsIGspO1xuICByZXR1cm4gcmVzICYmIHJlcy52YWx1ZTtcbn07XG5cblBzZXVkb01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGssIHYpIHtcbiAgc2V0KHRoaXMuX2RhdGEsIGssIHYpO1xufTtcblxuUHNldWRvTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoaykge1xuICB2YXIgcmVzID0gZmluZCh0aGlzLl9kYXRhLCBrKTtcblxuICBpZiAocmVzKSB7XG4gICAgZGVsZXRlIHRoaXMuX2RhdGFbcmVzLl9pbmRleF07XG4gICAgdGhpcy5fZGF0YS5zaXplLS07XG4gIH1cbn07XG5cblBzZXVkb01hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgZGF0YS5zaXplID0gMDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfZGF0YScsIHtcbiAgICB2YWx1ZTogZGF0YSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBzZXVkb01hcC5wcm90b3R5cGUsICdzaXplJywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zaXplO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldChuKSB7fSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuUHNldWRvTWFwLnByb3RvdHlwZS52YWx1ZXMgPSBQc2V1ZG9NYXAucHJvdG90eXBlLmtleXMgPSBQc2V1ZG9NYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignaXRlcmF0b3JzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uJyk7XG59OyAvLyBFaXRoZXIgaWRlbnRpY2FsLCBvciBib3RoIE5hTlxuXG5cbmZ1bmN0aW9uIHNhbWUoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYiB8fCBhICE9PSBhICYmIGIgIT09IGI7XG59XG5cbmZ1bmN0aW9uIEVudHJ5KGssIHYsIGkpIHtcbiAgdGhpcy5rZXkgPSBrO1xuICB0aGlzLnZhbHVlID0gdjtcbiAgdGhpcy5faW5kZXggPSBpO1xufVxuXG5mdW5jdGlvbiBmaW5kKGRhdGEsIGspIHtcbiAgZm9yICh2YXIgaSA9IDAsIHMgPSAnXycgKyBrLCBrZXkgPSBzOyBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7IGtleSA9IHMgKyBpKyspIHtcbiAgICBpZiAoc2FtZShkYXRhW2tleV0ua2V5LCBrKSkgcmV0dXJuIGRhdGFba2V5XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQoZGF0YSwgaywgdikge1xuICBmb3IgKHZhciBpID0gMCwgcyA9ICdfJyArIGssIGtleSA9IHM7IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTsga2V5ID0gcyArIGkrKykge1xuICAgIGlmIChzYW1lKGRhdGFba2V5XS5rZXksIGspKSB7XG4gICAgICBkYXRhW2tleV0udmFsdWUgPSB2O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGRhdGEuc2l6ZSsrO1xuICBkYXRhW2tleV0gPSBuZXcgRW50cnkoaywgdiwga2V5KTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDQzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187ZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgJ3VzZSBzdHJpY3QnOyAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBpZiAodHJ1ZSkge1xuICAgICEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPSAoZmFjdG9yeSksXG5cdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAodHlwZW9mIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0KF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXy5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSkgOiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcbiAgfSBlbHNlIHt9XG59KSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG4gIH1cblxuICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpc1twXTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGJvb2xlYW5Qcm9wcyA9IFsnaXNDb25zdHJ1Y3RvcicsICdpc0V2YWwnLCAnaXNOYXRpdmUnLCAnaXNUb3BsZXZlbCddO1xuICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICB2YXIgc3RyaW5nUHJvcHMgPSBbJ2ZpbGVOYW1lJywgJ2Z1bmN0aW9uTmFtZScsICdzb3VyY2UnXTtcbiAgdmFyIGFycmF5UHJvcHMgPSBbJ2FyZ3MnXTtcbiAgdmFyIHByb3BzID0gYm9vbGVhblByb3BzLmNvbmNhdChudW1lcmljUHJvcHMsIHN0cmluZ1Byb3BzLCBhcnJheVByb3BzKTtcblxuICBmdW5jdGlvbiBTdGFja0ZyYW1lKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2JqW3Byb3BzW2ldXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXNbJ3NldCcgKyBfY2FwaXRhbGl6ZShwcm9wc1tpXSldKG9ialtwcm9wc1tpXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0YWNrRnJhbWUucHJvdG90eXBlID0ge1xuICAgIGdldEFyZ3M6IGZ1bmN0aW9uIGdldEFyZ3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgIH0sXG4gICAgc2V0QXJnczogZnVuY3Rpb24gc2V0QXJncyh2KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgIH0sXG4gICAgZ2V0RXZhbE9yaWdpbjogZnVuY3Rpb24gZ2V0RXZhbE9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgfSxcbiAgICBzZXRFdmFsT3JpZ2luOiBmdW5jdGlvbiBzZXRFdmFsT3JpZ2luKHYpIHtcbiAgICAgIGlmICh2IGluc3RhbmNlb2YgU3RhY2tGcmFtZSkge1xuICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSB2O1xuICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZhbCBPcmlnaW4gbXVzdCBiZSBhbiBPYmplY3Qgb3IgU3RhY2tGcmFtZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpIHx8ICcnO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXIoKSB8fCAnJztcbiAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSB0aGlzLmdldENvbHVtbk51bWJlcigpIHx8ICcnO1xuICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJyc7XG5cbiAgICAgIGlmICh0aGlzLmdldElzRXZhbCgpKSB7XG4gICAgICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgIHJldHVybiAnW2V2YWxdICgnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICdbZXZhbF06JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArICcgKCcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXIgKyAnKSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgfVxuICB9O1xuXG4gIFN0YWNrRnJhbWUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIFN0YWNrRnJhbWUkJGZyb21TdHJpbmcoc3RyKSB7XG4gICAgdmFyIGFyZ3NTdGFydEluZGV4ID0gc3RyLmluZGV4T2YoJygnKTtcbiAgICB2YXIgYXJnc0VuZEluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCcpJyk7XG4gICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHN0ci5zdWJzdHJpbmcoMCwgYXJnc1N0YXJ0SW5kZXgpO1xuICAgIHZhciBhcmdzID0gc3RyLnN1YnN0cmluZyhhcmdzU3RhcnRJbmRleCArIDEsIGFyZ3NFbmRJbmRleCkuc3BsaXQoJywnKTtcbiAgICB2YXIgbG9jYXRpb25TdHJpbmcgPSBzdHIuc3Vic3RyaW5nKGFyZ3NFbmRJbmRleCArIDEpO1xuXG4gICAgaWYgKGxvY2F0aW9uU3RyaW5nLmluZGV4T2YoJ0AnKSA9PT0gMCkge1xuICAgICAgdmFyIHBhcnRzID0gL0AoLis/KSg/OjooXFxkKykpPyg/OjooXFxkKykpPyQvLmV4ZWMobG9jYXRpb25TdHJpbmcsICcnKTtcbiAgICAgIHZhciBmaWxlTmFtZSA9IHBhcnRzWzFdO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJ0c1syXTtcbiAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBwYXJ0c1szXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICBhcmdzOiBhcmdzIHx8IHVuZGVmaW5lZCxcbiAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIgfHwgdW5kZWZpbmVkLFxuICAgICAgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXIgfHwgdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKGJvb2xlYW5Qcm9wc1tpXSldID0gX2dldHRlcihib29sZWFuUHJvcHNbaV0pO1xuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgdGhpc1twXSA9IEJvb2xlYW4odik7XG4gICAgICB9O1xuICAgIH0oYm9vbGVhblByb3BzW2ldKTtcbiAgfVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgbnVtZXJpY1Byb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IF9nZXR0ZXIobnVtZXJpY1Byb3BzW2pdKTtcblxuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSBmdW5jdGlvbiAocCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgfTtcbiAgICB9KG51bWVyaWNQcm9wc1tqXSk7XG4gIH1cblxuICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSBmdW5jdGlvbiAocCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICB9O1xuICAgIH0oc3RyaW5nUHJvcHNba10pO1xuICB9XG5cbiAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDcxODpcbi8qKiovICgobW9kdWxlKSA9PiB7XG5cbmlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG5cbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiBUZW1wQ3RvcigpIHt9O1xuXG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTtcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpO1xuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjtcbiAgfTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDcxNTpcbi8qKiovICgobW9kdWxlKSA9PiB7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiBfdHlwZW9mKGFyZykgPT09ICdvYmplY3QnICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJnLmZpbGwgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODI6XG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5cbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24gKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbiAoeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG5cbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuXG4gICAgICBjYXNlICclZCc6XG4gICAgICAgIHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcblxuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuXG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTsgLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuXG5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24gKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuXG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24gKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSkgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuXG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5cblxuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTsgLy8gbGVnYWN5Li4uXG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuXG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfSAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG5cblxuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuXG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0OyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3NcblxuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJzogWzEsIDIyXSxcbiAgJ2l0YWxpYyc6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnOiBbNCwgMjRdLFxuICAnaW52ZXJzZSc6IFs3LCAyN10sXG4gICd3aGl0ZSc6IFszNywgMzldLFxuICAnZ3JleSc6IFs5MCwgMzldLFxuICAnYmxhY2snOiBbMzAsIDM5XSxcbiAgJ2JsdWUnOiBbMzQsIDM5XSxcbiAgJ2N5YW4nOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJzogWzMyLCAzOV0sXG4gICdtYWdlbnRhJzogWzM1LCAzOV0sXG4gICdyZWQnOiBbMzEsIDM5XSxcbiAgJ3llbGxvdyc6IFszMywgMzldXG59OyAvLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcblxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiBcIlxceDFCW1wiICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICsgXCJcXHgxQltcIiArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24gKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiBoYXNoO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiYgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJiAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcblxuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuXG5cbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcblxuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfSAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG5cblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfSAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG5cblxuICBpZiAoaXNFcnJvcih2YWx1ZSkgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfSAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG5cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cblxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJyxcbiAgICAgIGFycmF5ID0gZmFsc2UsXG4gICAgICBicmFjZXMgPSBbJ3snLCAnfSddOyAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG5cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH0gLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG5cblxuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9IC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG5cblxuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH0gLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG5cblxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfSAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG5cblxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuICB2YXIgb3V0cHV0O1xuXG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcblxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoaXNOdW1iZXIodmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSkgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7IC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cblxuICBpZiAoaXNOdWxsKHZhbHVlKSkgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG5cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwge1xuICAgIHZhbHVlOiB2YWx1ZVtrZXldXG4gIH07XG5cbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG5cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG5cbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArICcgJyArIG91dHB1dC5qb2luKCcsXFxuICAnKSArICcgJyArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59IC8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5cblxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cblxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cblxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gX3R5cGVvZihhcmcpID09PSAnc3ltYm9sJztcbn1cblxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuXG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIF90eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cblxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8IHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCBfdHlwZW9mKGFyZykgPT09ICdzeW1ib2wnIHx8IC8vIEVTNiBzeW1ib2xcbiAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcbmV4cG9ydHMuaXNCdWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxNSk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107IC8vIDI2IEZlYiAxNjoxOTozNFxuXG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksIHBhZChkLmdldE1pbnV0ZXMoKSksIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn0gLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuXG5cbmV4cG9ydHMubG9nID0gZnVuY3Rpb24gKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuXG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxOCk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uIChvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuXG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjk1OlxuLyoqKi8gKChtb2R1bGUpID0+IHtcblxubW9kdWxlLmV4cG9ydHMgPSBZYWxsaXN0O1xuWWFsbGlzdC5Ob2RlID0gTm9kZTtcbllhbGxpc3QuY3JlYXRlID0gWWFsbGlzdDtcblxuZnVuY3Rpb24gWWFsbGlzdChsaXN0KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAoIShzZWxmIGluc3RhbmNlb2YgWWFsbGlzdCkpIHtcbiAgICBzZWxmID0gbmV3IFlhbGxpc3QoKTtcbiAgfVxuXG4gIHNlbGYudGFpbCA9IG51bGw7XG4gIHNlbGYuaGVhZCA9IG51bGw7XG4gIHNlbGYubGVuZ3RoID0gMDtcblxuICBpZiAobGlzdCAmJiB0eXBlb2YgbGlzdC5mb3JFYWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzZWxmLnB1c2goaXRlbSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHNlbGYucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZW1vdmVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKG5vZGUubGlzdCAhPT0gdGhpcykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVtb3Zpbmcgbm9kZSB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBsaXN0Jyk7XG4gIH1cblxuICB2YXIgbmV4dCA9IG5vZGUubmV4dDtcbiAgdmFyIHByZXYgPSBub2RlLnByZXY7XG5cbiAgaWYgKG5leHQpIHtcbiAgICBuZXh0LnByZXYgPSBwcmV2O1xuICB9XG5cbiAgaWYgKHByZXYpIHtcbiAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICB9XG5cbiAgaWYgKG5vZGUgPT09IHRoaXMuaGVhZCkge1xuICAgIHRoaXMuaGVhZCA9IG5leHQ7XG4gIH1cblxuICBpZiAobm9kZSA9PT0gdGhpcy50YWlsKSB7XG4gICAgdGhpcy50YWlsID0gcHJldjtcbiAgfVxuXG4gIG5vZGUubGlzdC5sZW5ndGgtLTtcbiAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgbm9kZS5saXN0ID0gbnVsbDtcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnVuc2hpZnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IHRoaXMuaGVhZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLmxpc3QpIHtcbiAgICBub2RlLmxpc3QucmVtb3ZlTm9kZShub2RlKTtcbiAgfVxuXG4gIHZhciBoZWFkID0gdGhpcy5oZWFkO1xuICBub2RlLmxpc3QgPSB0aGlzO1xuICBub2RlLm5leHQgPSBoZWFkO1xuXG4gIGlmIChoZWFkKSB7XG4gICAgaGVhZC5wcmV2ID0gbm9kZTtcbiAgfVxuXG4gIHRoaXMuaGVhZCA9IG5vZGU7XG5cbiAgaWYgKCF0aGlzLnRhaWwpIHtcbiAgICB0aGlzLnRhaWwgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5sZW5ndGgrKztcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnB1c2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IHRoaXMudGFpbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLmxpc3QpIHtcbiAgICBub2RlLmxpc3QucmVtb3ZlTm9kZShub2RlKTtcbiAgfVxuXG4gIHZhciB0YWlsID0gdGhpcy50YWlsO1xuICBub2RlLmxpc3QgPSB0aGlzO1xuICBub2RlLnByZXYgPSB0YWlsO1xuXG4gIGlmICh0YWlsKSB7XG4gICAgdGFpbC5uZXh0ID0gbm9kZTtcbiAgfVxuXG4gIHRoaXMudGFpbCA9IG5vZGU7XG5cbiAgaWYgKCF0aGlzLmhlYWQpIHtcbiAgICB0aGlzLmhlYWQgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5sZW5ndGgrKztcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHB1c2godGhpcywgYXJndW1lbnRzW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHVuc2hpZnQodGhpcywgYXJndW1lbnRzW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLnRhaWwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRoaXMudGFpbC52YWx1ZTtcbiAgdGhpcy50YWlsID0gdGhpcy50YWlsLnByZXY7XG5cbiAgaWYgKHRoaXMudGFpbCkge1xuICAgIHRoaXMudGFpbC5uZXh0ID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5sZW5ndGgtLTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuaGVhZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgcmVzID0gdGhpcy5oZWFkLnZhbHVlO1xuICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcblxuICBpZiAodGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkLnByZXYgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gIH1cblxuICB0aGlzLmxlbmd0aC0tO1xuICByZXR1cm4gcmVzO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzO1xuXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMuaGVhZCwgaSA9IDA7IHdhbGtlciAhPT0gbnVsbDsgaSsrKSB7XG4gICAgZm4uY2FsbCh0aGlzcCwgd2Fsa2VyLnZhbHVlLCBpLCB0aGlzKTtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dDtcbiAgfVxufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuZm9yRWFjaFJldmVyc2UgPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpcztcblxuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzLnRhaWwsIGkgPSB0aGlzLmxlbmd0aCAtIDE7IHdhbGtlciAhPT0gbnVsbDsgaS0tKSB7XG4gICAgZm4uY2FsbCh0aGlzcCwgd2Fsa2VyLnZhbHVlLCBpLCB0aGlzKTtcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldjtcbiAgfVxufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG4pIHtcbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPCBuOyBpKyspIHtcbiAgICAvLyBhYm9ydCBvdXQgb2YgdGhlIGxpc3QgZWFybHkgaWYgd2UgaGl0IGEgY3ljbGVcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dDtcbiAgfVxuXG4gIGlmIChpID09PSBuICYmIHdhbGtlciAhPT0gbnVsbCkge1xuICAgIHJldHVybiB3YWxrZXIudmFsdWU7XG4gIH1cbn07XG5cbllhbGxpc3QucHJvdG90eXBlLmdldFJldmVyc2UgPSBmdW5jdGlvbiAobikge1xuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy50YWlsOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IG47IGkrKykge1xuICAgIC8vIGFib3J0IG91dCBvZiB0aGUgbGlzdCBlYXJseSBpZiB3ZSBoaXQgYSBjeWNsZVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2O1xuICB9XG5cbiAgaWYgKGkgPT09IG4gJiYgd2Fsa2VyICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdhbGtlci52YWx1ZTtcbiAgfVxufTtcblxuWWFsbGlzdC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXM7XG4gIHZhciByZXMgPSBuZXcgWWFsbGlzdCgpO1xuXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsOykge1xuICAgIHJlcy5wdXNoKGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgdGhpcykpO1xuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0O1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLm1hcFJldmVyc2UgPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpcztcbiAgdmFyIHJlcyA9IG5ldyBZYWxsaXN0KCk7XG5cbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy50YWlsOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgcmVzLnB1c2goZm4uY2FsbCh0aGlzcCwgd2Fsa2VyLnZhbHVlLCB0aGlzKSk7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXY7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGZuLCBpbml0aWFsKSB7XG4gIHZhciBhY2M7XG4gIHZhciB3YWxrZXIgPSB0aGlzLmhlYWQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgYWNjID0gaW5pdGlhbDtcbiAgfSBlbHNlIGlmICh0aGlzLmhlYWQpIHtcbiAgICB3YWxrZXIgPSB0aGlzLmhlYWQubmV4dDtcbiAgICBhY2MgPSB0aGlzLmhlYWQudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBhY2MgPSBmbihhY2MsIHdhbGtlci52YWx1ZSwgaSk7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHQ7XG4gIH1cblxuICByZXR1cm4gYWNjO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUucmVkdWNlUmV2ZXJzZSA9IGZ1bmN0aW9uIChmbiwgaW5pdGlhbCkge1xuICB2YXIgYWNjO1xuICB2YXIgd2Fsa2VyID0gdGhpcy50YWlsO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIGFjYyA9IGluaXRpYWw7XG4gIH0gZWxzZSBpZiAodGhpcy50YWlsKSB7XG4gICAgd2Fsa2VyID0gdGhpcy50YWlsLnByZXY7XG4gICAgYWNjID0gdGhpcy50YWlsLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBsaXN0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgd2Fsa2VyICE9PSBudWxsOyBpLS0pIHtcbiAgICBhY2MgPSBmbihhY2MsIHdhbGtlci52YWx1ZSwgaSk7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXY7XG4gIH1cblxuICByZXR1cm4gYWNjO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyciA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBhcnJbaV0gPSB3YWxrZXIudmFsdWU7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHQ7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUudG9BcnJheVJldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuXG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbDsgaSsrKSB7XG4gICAgYXJyW2ldID0gd2Fsa2VyLnZhbHVlO1xuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2O1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gIHRvID0gdG8gfHwgdGhpcy5sZW5ndGg7XG5cbiAgaWYgKHRvIDwgMCkge1xuICAgIHRvICs9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgZnJvbSA9IGZyb20gfHwgMDtcblxuICBpZiAoZnJvbSA8IDApIHtcbiAgICBmcm9tICs9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgdmFyIHJldCA9IG5ldyBZYWxsaXN0KCk7XG5cbiAgaWYgKHRvIDwgZnJvbSB8fCB0byA8IDApIHtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSA9IDA7XG4gIH1cblxuICBpZiAodG8gPiB0aGlzLmxlbmd0aCkge1xuICAgIHRvID0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IGZyb207IGkrKykge1xuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0O1xuICB9XG5cbiAgZm9yICg7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgdG87IGkrKywgd2Fsa2VyID0gd2Fsa2VyLm5leHQpIHtcbiAgICByZXQucHVzaCh3YWxrZXIudmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbllhbGxpc3QucHJvdG90eXBlLnNsaWNlUmV2ZXJzZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICB0byA9IHRvIHx8IHRoaXMubGVuZ3RoO1xuXG4gIGlmICh0byA8IDApIHtcbiAgICB0byArPSB0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIGZyb20gPSBmcm9tIHx8IDA7XG5cbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSArPSB0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIHZhciByZXQgPSBuZXcgWWFsbGlzdCgpO1xuXG4gIGlmICh0byA8IGZyb20gfHwgdG8gPCAwKSB7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGlmIChmcm9tIDwgMCkge1xuICAgIGZyb20gPSAwO1xuICB9XG5cbiAgaWYgKHRvID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0byA9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoLCB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbCAmJiBpID4gdG87IGktLSkge1xuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2O1xuICB9XG5cbiAgZm9yICg7IHdhbGtlciAhPT0gbnVsbCAmJiBpID4gZnJvbTsgaS0tLCB3YWxrZXIgPSB3YWxrZXIucHJldikge1xuICAgIHJldC5wdXNoKHdhbGtlci52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQgPSB0aGlzLmhlYWQ7XG4gIHZhciB0YWlsID0gdGhpcy50YWlsO1xuXG4gIGZvciAodmFyIHdhbGtlciA9IGhlYWQ7IHdhbGtlciAhPT0gbnVsbDsgd2Fsa2VyID0gd2Fsa2VyLnByZXYpIHtcbiAgICB2YXIgcCA9IHdhbGtlci5wcmV2O1xuICAgIHdhbGtlci5wcmV2ID0gd2Fsa2VyLm5leHQ7XG4gICAgd2Fsa2VyLm5leHQgPSBwO1xuICB9XG5cbiAgdGhpcy5oZWFkID0gdGFpbDtcbiAgdGhpcy50YWlsID0gaGVhZDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBwdXNoKHNlbGYsIGl0ZW0pIHtcbiAgc2VsZi50YWlsID0gbmV3IE5vZGUoaXRlbSwgc2VsZi50YWlsLCBudWxsLCBzZWxmKTtcblxuICBpZiAoIXNlbGYuaGVhZCkge1xuICAgIHNlbGYuaGVhZCA9IHNlbGYudGFpbDtcbiAgfVxuXG4gIHNlbGYubGVuZ3RoKys7XG59XG5cbmZ1bmN0aW9uIHVuc2hpZnQoc2VsZiwgaXRlbSkge1xuICBzZWxmLmhlYWQgPSBuZXcgTm9kZShpdGVtLCBudWxsLCBzZWxmLmhlYWQsIHNlbGYpO1xuXG4gIGlmICghc2VsZi50YWlsKSB7XG4gICAgc2VsZi50YWlsID0gc2VsZi5oZWFkO1xuICB9XG5cbiAgc2VsZi5sZW5ndGgrKztcbn1cblxuZnVuY3Rpb24gTm9kZSh2YWx1ZSwgcHJldiwgbmV4dCwgbGlzdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUodmFsdWUsIHByZXYsIG5leHQsIGxpc3QpO1xuICB9XG5cbiAgdGhpcy5saXN0ID0gbGlzdDtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gIGlmIChwcmV2KSB7XG4gICAgcHJldi5uZXh0ID0gdGhpcztcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICB9IGVsc2Uge1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5leHQucHJldiA9IHRoaXM7XG4gICAgdGhpcy5uZXh0ID0gbmV4dDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG59XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG4vKioqKioqLyBcdFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG4vKioqKioqLyBcdFx0XHRcdCgpID0+IChtb2R1bGUpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IHt9O1xuLy8gVGhpcyBlbnRyeSBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gYW4gSUlGRSBiZWNhdXNlIGl0IG5lZWQgdG8gYmUgaW4gc3RyaWN0IG1vZGUuXG4oKCkgPT4ge1xuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcbiAgXCJjb25uZWN0VG9EZXZUb29sc1wiOiAoKSA9PiAoLyogYmluZGluZyAqLyBjb25uZWN0VG9EZXZUb29scylcbn0pO1xuXG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9ldmVudHMuanNcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG52YXIgRXZlbnRFbWl0dGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibGlzdGVuZXJzTWFwXCIsIG5ldyBNYXAoKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXZlbnRFbWl0dGVyLCBbe1xuICAgIGtleTogXCJhZGRMaXN0ZW5lclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQoZXZlbnQpO1xuXG4gICAgICBpZiAobGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAuc2V0KGV2ZW50LCBbbGlzdGVuZXJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldChldmVudCk7XG5cbiAgICAgIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gY2xvbmUgb3IgdHJ5L2NhdGNoXG4gICAgICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzWzBdO1xuICAgICAgICAgIGxpc3RlbmVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBkaWRUaHJvdyA9IGZhbHNlO1xuICAgICAgICAgIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgICAgICAgdmFyIGNsb25lZExpc3RlbmVycyA9IEFycmF5LmZyb20obGlzdGVuZXJzKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgX2xpc3RlbmVyID0gY2xvbmVkTGlzdGVuZXJzW2ldO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBfbGlzdGVuZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoY2F1Z2h0RXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaWRUaHJvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRUaHJvdykge1xuICAgICAgICAgICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZUFsbExpc3RlbmVyc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyc01hcC5jbGVhcigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVMaXN0ZW5lclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQoZXZlbnQpO1xuXG4gICAgICBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRFbWl0dGVyO1xufSgpO1xuXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC50aHJvdHRsZS9pbmRleC5qc1xudmFyIGxvZGFzaF90aHJvdHRsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcyKTtcbnZhciBsb2Rhc2hfdGhyb3R0bGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obG9kYXNoX3Rocm90dGxlKTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2NvbnN0YW50cy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG52YXIgQ0hST01FX1dFQlNUT1JFX0VYVEVOU0lPTl9JRCA9ICdmbWthZG1hcGdvZmFkb3BsamJqZmthcGRrb2llbmloaSc7XG52YXIgSU5URVJOQUxfRVhURU5TSU9OX0lEID0gJ2Ruam5qZ2JmaWxmcGhtb2pubWhsaWVob2dtb2poY2xjJztcbnZhciBMT0NBTF9FWFRFTlNJT05fSUQgPSAnaWtpYWhuYXBsZGptZG1wa21maGpkamlsb2pqaGdjYmYnOyAvLyBGbGlwIHRoaXMgZmxhZyB0byB0cnVlIHRvIGVuYWJsZSB2ZXJib3NlIGNvbnNvbGUgZGVidWcgbG9nZ2luZy5cblxudmFyIF9fREVCVUdfXyA9IGZhbHNlOyAvLyBGbGlwIHRoaXMgZmxhZyB0byB0cnVlIHRvIGVuYWJsZSBwZXJmb3JtYW5jZS5tYXJrKCkgYW5kIHBlcmZvcm1hbmNlLm1lYXN1cmUoKSB0aW1pbmdzLlxuXG52YXIgX19QRVJGT1JNQU5DRV9QUk9GSUxFX18gPSBmYWxzZTtcbnZhciBUUkVFX09QRVJBVElPTl9BREQgPSAxO1xudmFyIFRSRUVfT1BFUkFUSU9OX1JFTU9WRSA9IDI7XG52YXIgVFJFRV9PUEVSQVRJT05fUkVPUkRFUl9DSElMRFJFTiA9IDM7XG52YXIgVFJFRV9PUEVSQVRJT05fVVBEQVRFX1RSRUVfQkFTRV9EVVJBVElPTiA9IDQ7XG52YXIgVFJFRV9PUEVSQVRJT05fVVBEQVRFX0VSUk9SU19PUl9XQVJOSU5HUyA9IDU7XG52YXIgVFJFRV9PUEVSQVRJT05fUkVNT1ZFX1JPT1QgPSA2O1xudmFyIFRSRUVfT1BFUkFUSU9OX1NFVF9TVUJUUkVFX01PREUgPSA3O1xudmFyIFBST0ZJTElOR19GTEFHX0JBU0lDX1NVUFBPUlQgPSAxO1xudmFyIFBST0ZJTElOR19GTEFHX1RJTUVMSU5FX1NVUFBPUlQgPSAyO1xudmFyIExPQ0FMX1NUT1JBR0VfREVGQVVMVF9UQUJfS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6ZGVmYXVsdFRhYic7XG52YXIgY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfQ09NUE9ORU5UX0ZJTFRFUl9QUkVGRVJFTkNFU19LRVkgPSAnUmVhY3Q6OkRldlRvb2xzOjpjb21wb25lbnRGaWx0ZXJzJztcbnZhciBTRVNTSU9OX1NUT1JBR0VfTEFTVF9TRUxFQ1RJT05fS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6bGFzdFNlbGVjdGlvbic7XG52YXIgY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfT1BFTl9JTl9FRElUT1JfVVJMID0gJ1JlYWN0OjpEZXZUb29sczo6b3BlbkluRWRpdG9yVXJsJztcbnZhciBMT0NBTF9TVE9SQUdFX09QRU5fSU5fRURJVE9SX1VSTF9QUkVTRVQgPSAnUmVhY3Q6OkRldlRvb2xzOjpvcGVuSW5FZGl0b3JVcmxQcmVzZXQnO1xudmFyIExPQ0FMX1NUT1JBR0VfUEFSU0VfSE9PS19OQU1FU19LRVkgPSAnUmVhY3Q6OkRldlRvb2xzOjpwYXJzZUhvb2tOYW1lcyc7XG52YXIgU0VTU0lPTl9TVE9SQUdFX1JFQ09SRF9DSEFOR0VfREVTQ1JJUFRJT05TX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OnJlY29yZENoYW5nZURlc2NyaXB0aW9ucyc7XG52YXIgU0VTU0lPTl9TVE9SQUdFX1JFTE9BRF9BTkRfUFJPRklMRV9LRVkgPSAnUmVhY3Q6OkRldlRvb2xzOjpyZWxvYWRBbmRQcm9maWxlJztcbnZhciBjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9TSE9VTERfQlJFQUtfT05fQ09OU09MRV9FUlJPUlMgPSAnUmVhY3Q6OkRldlRvb2xzOjpicmVha09uQ29uc29sZUVycm9ycyc7XG52YXIgTE9DQUxfU1RPUkFHRV9CUk9XU0VSX1RIRU1FID0gJ1JlYWN0OjpEZXZUb29sczo6dGhlbWUnO1xudmFyIGNvbnN0YW50c19MT0NBTF9TVE9SQUdFX1NIT1VMRF9BUFBFTkRfQ09NUE9ORU5UX1NUQUNLX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OmFwcGVuZENvbXBvbmVudFN0YWNrJztcbnZhciBjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9TSE9XX0lOTElORV9XQVJOSU5HU19BTkRfRVJST1JTX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OnNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyc7XG52YXIgTE9DQUxfU1RPUkFHRV9UUkFDRV9VUERBVEVTX0VOQUJMRURfS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6dHJhY2VVcGRhdGVzRW5hYmxlZCc7XG52YXIgY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfSElERV9DT05TT0xFX0xPR1NfSU5fU1RSSUNUX01PREUgPSAnUmVhY3Q6OkRldlRvb2xzOjpoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUnO1xudmFyIExPQ0FMX1NUT1JBR0VfU1VQUE9SVFNfUFJPRklMSU5HX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OnN1cHBvcnRzUHJvZmlsaW5nJztcbnZhciBQUk9GSUxFUl9FWFBPUlRfVkVSU0lPTiA9IDU7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9zdG9yYWdlLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VfbG9jYWxTdG9yYWdlR2V0SXRlbShrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gbG9jYWxTdG9yYWdlUmVtb3ZlSXRlbShrZXkpIHtcbiAgdHJ5IHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9IGNhdGNoIChlcnJvcikge31cbn1cbmZ1bmN0aW9uIHN0b3JhZ2VfbG9jYWxTdG9yYWdlU2V0SXRlbShrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge31cbn1cbmZ1bmN0aW9uIHNlc3Npb25TdG9yYWdlR2V0SXRlbShrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBzZXNzaW9uU3RvcmFnZVJlbW92ZUl0ZW0oa2V5KSB7XG4gIHRyeSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9IGNhdGNoIChlcnJvcikge31cbn1cbmZ1bmN0aW9uIHNlc3Npb25TdG9yYWdlU2V0SXRlbShrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uLy4uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9lc20vaW5kZXguanNcbnZhciBzaW1wbGVJc0VxdWFsID0gZnVuY3Rpb24gc2ltcGxlSXNFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBmdW5jdGlvbiBlc20ocmVzdWx0Rm4pIHtcbiAgdmFyIGlzRXF1YWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHNpbXBsZUlzRXF1YWw7XG4gIHZhciBsYXN0VGhpcyA9IHZvaWQgMDtcbiAgdmFyIGxhc3RBcmdzID0gW107XG4gIHZhciBsYXN0UmVzdWx0ID0gdm9pZCAwO1xuICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuXG4gIHZhciBpc05ld0FyZ0VxdWFsVG9MYXN0ID0gZnVuY3Rpb24gaXNOZXdBcmdFcXVhbFRvTGFzdChuZXdBcmcsIGluZGV4KSB7XG4gICAgcmV0dXJuIGlzRXF1YWwobmV3QXJnLCBsYXN0QXJnc1tpbmRleF0pO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbiByZXN1bHQoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG5ld0FyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIG5ld0FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGNhbGxlZE9uY2UgJiYgbGFzdFRoaXMgPT09IHRoaXMgJiYgbmV3QXJncy5sZW5ndGggPT09IGxhc3RBcmdzLmxlbmd0aCAmJiBuZXdBcmdzLmV2ZXJ5KGlzTmV3QXJnRXF1YWxUb0xhc3QpKSB7XG4gICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG5cbiAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdEFyZ3MgPSBuZXdBcmdzO1xuICAgIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC92aWV3cy91dGlscy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG4vLyBHZXQgdGhlIHdpbmRvdyBvYmplY3QgZm9yIHRoZSBkb2N1bWVudCB0aGF0IGEgbm9kZSBiZWxvbmdzIHRvLFxuLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgY2Fubm90IGJlIGZvdW5kIChub2RlIG5vdCBhdHRhY2hlZCB0byBET00sXG4vLyBldGMpLlxuZnVuY3Rpb24gZ2V0T3duZXJXaW5kb3cobm9kZSkge1xuICBpZiAoIW5vZGUub3duZXJEb2N1bWVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcbn0gLy8gR2V0IHRoZSBpZnJhbWUgY29udGFpbmluZyBhIG5vZGUsIG9yIHJldHVybiBudWxsIGlmIGl0IGNhbm5vdFxuLy8gYmUgZm91bmQgKG5vZGUgbm90IHdpdGhpbiBpZnJhbWUsIGV0YykuXG5cbmZ1bmN0aW9uIGdldE93bmVySWZyYW1lKG5vZGUpIHtcbiAgdmFyIG5vZGVXaW5kb3cgPSBnZXRPd25lcldpbmRvdyhub2RlKTtcblxuICBpZiAobm9kZVdpbmRvdykge1xuICAgIHJldHVybiBub2RlV2luZG93LmZyYW1lRWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXQgYSBib3VuZGluZyBjbGllbnQgcmVjdCBmb3IgYSBub2RlLCB3aXRoIGFuXG4vLyBvZmZzZXQgYWRkZWQgdG8gY29tcGVuc2F0ZSBmb3IgaXRzIGJvcmRlci5cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0V2l0aEJvcmRlck9mZnNldChub2RlKSB7XG4gIHZhciBkaW1lbnNpb25zID0gZ2V0RWxlbWVudERpbWVuc2lvbnMobm9kZSk7XG4gIHJldHVybiBtZXJnZVJlY3RPZmZzZXRzKFtub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB7XG4gICAgdG9wOiBkaW1lbnNpb25zLmJvcmRlclRvcCxcbiAgICBsZWZ0OiBkaW1lbnNpb25zLmJvcmRlckxlZnQsXG4gICAgYm90dG9tOiBkaW1lbnNpb25zLmJvcmRlckJvdHRvbSxcbiAgICByaWdodDogZGltZW5zaW9ucy5ib3JkZXJSaWdodCxcbiAgICAvLyBUaGlzIHdpZHRoIGFuZCBoZWlnaHQgd29uJ3QgZ2V0IHVzZWQgYnkgbWVyZ2VSZWN0T2Zmc2V0cyAoc2luY2UgdGhpc1xuICAgIC8vIGlzIG5vdCB0aGUgZmlyc3QgcmVjdCBpbiB0aGUgYXJyYXkpLCBidXQgd2Ugc2V0IHRoZW0gc28gdGhhdCB0aGlzXG4gICAgLy8gb2JqZWN0IHR5cGUgY2hlY2tzIGFzIGEgQ2xpZW50UmVjdC5cbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfV0pO1xufSAvLyBBZGQgdG9nZXRoZXIgdGhlIHRvcCwgbGVmdCwgYm90dG9tLCBhbmQgcmlnaHQgcHJvcGVydGllcyBvZlxuLy8gZWFjaCBDbGllbnRSZWN0LCBidXQga2VlcCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZmlyc3Qgb25lLlxuXG5mdW5jdGlvbiBtZXJnZVJlY3RPZmZzZXRzKHJlY3RzKSB7XG4gIHJldHVybiByZWN0cy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzUmVjdCwgcmVjdCkge1xuICAgIGlmIChwcmV2aW91c1JlY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogcHJldmlvdXNSZWN0LnRvcCArIHJlY3QudG9wLFxuICAgICAgbGVmdDogcHJldmlvdXNSZWN0LmxlZnQgKyByZWN0LmxlZnQsXG4gICAgICB3aWR0aDogcHJldmlvdXNSZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiBwcmV2aW91c1JlY3QuaGVpZ2h0LFxuICAgICAgYm90dG9tOiBwcmV2aW91c1JlY3QuYm90dG9tICsgcmVjdC5ib3R0b20sXG4gICAgICByaWdodDogcHJldmlvdXNSZWN0LnJpZ2h0ICsgcmVjdC5yaWdodFxuICAgIH07XG4gIH0pO1xufSAvLyBDYWxjdWxhdGUgYSBib3VuZGluZ0NsaWVudFJlY3QgZm9yIGEgbm9kZSByZWxhdGl2ZSB0byBib3VuZGFyeVdpbmRvdyxcbi8vIHRha2luZyBpbnRvIGFjY291bnQgYW55IG9mZnNldHMgY2F1c2VkIGJ5IGludGVybWVkaWF0ZSBpZnJhbWVzLlxuXG5mdW5jdGlvbiBnZXROZXN0ZWRCb3VuZGluZ0NsaWVudFJlY3Qobm9kZSwgYm91bmRhcnlXaW5kb3cpIHtcbiAgdmFyIG93bmVySWZyYW1lID0gZ2V0T3duZXJJZnJhbWUobm9kZSk7XG5cbiAgaWYgKG93bmVySWZyYW1lICYmIG93bmVySWZyYW1lICE9PSBib3VuZGFyeVdpbmRvdykge1xuICAgIHZhciByZWN0cyA9IFtub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXTtcbiAgICB2YXIgY3VycmVudElmcmFtZSA9IG93bmVySWZyYW1lO1xuICAgIHZhciBvbmx5T25lTW9yZSA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRJZnJhbWUpIHtcbiAgICAgIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0V2l0aEJvcmRlck9mZnNldChjdXJyZW50SWZyYW1lKTtcbiAgICAgIHJlY3RzLnB1c2gocmVjdCk7XG4gICAgICBjdXJyZW50SWZyYW1lID0gZ2V0T3duZXJJZnJhbWUoY3VycmVudElmcmFtZSk7XG5cbiAgICAgIGlmIChvbmx5T25lTW9yZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gV2UgZG9uJ3Qgd2FudCB0byBjYWxjdWxhdGUgaWZyYW1lIG9mZnNldHMgdXB3YXJkcyBiZXlvbmRcbiAgICAgIC8vIHRoZSBpZnJhbWUgY29udGFpbmluZyB0aGUgYm91bmRhcnlXaW5kb3csIGJ1dCB3ZVxuICAgICAgLy8gbmVlZCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYm91bmRhcnlXaW5kb3cuXG5cblxuICAgICAgaWYgKGN1cnJlbnRJZnJhbWUgJiYgZ2V0T3duZXJXaW5kb3coY3VycmVudElmcmFtZSkgPT09IGJvdW5kYXJ5V2luZG93KSB7XG4gICAgICAgIG9ubHlPbmVNb3JlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VSZWN0T2Zmc2V0cyhyZWN0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEVsZW1lbnREaW1lbnNpb25zKGRvbUVsZW1lbnQpIHtcbiAgdmFyIGNhbGN1bGF0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbUVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIGJvcmRlckxlZnQ6IHBhcnNlSW50KGNhbGN1bGF0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGgsIDEwKSxcbiAgICBib3JkZXJSaWdodDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgsIDEwKSxcbiAgICBib3JkZXJUb3A6IHBhcnNlSW50KGNhbGN1bGF0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTApLFxuICAgIGJvcmRlckJvdHRvbTogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCksXG4gICAgbWFyZ2luTGVmdDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLm1hcmdpbkxlZnQsIDEwKSxcbiAgICBtYXJnaW5SaWdodDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLm1hcmdpblJpZ2h0LCAxMCksXG4gICAgbWFyZ2luVG9wOiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUubWFyZ2luVG9wLCAxMCksXG4gICAgbWFyZ2luQm90dG9tOiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUubWFyZ2luQm90dG9tLCAxMCksXG4gICAgcGFkZGluZ0xlZnQ6IHBhcnNlSW50KGNhbGN1bGF0ZWRTdHlsZS5wYWRkaW5nTGVmdCwgMTApLFxuICAgIHBhZGRpbmdSaWdodDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLnBhZGRpbmdSaWdodCwgMTApLFxuICAgIHBhZGRpbmdUb3A6IHBhcnNlSW50KGNhbGN1bGF0ZWRTdHlsZS5wYWRkaW5nVG9wLCAxMCksXG4gICAgcGFkZGluZ0JvdHRvbTogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLnBhZGRpbmdCb3R0b20sIDEwKVxuICB9O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC92aWV3cy9IaWdobGlnaHRlci9PdmVybGF5LmpzXG5mdW5jdGlvbiBPdmVybGF5X2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gT3ZlcmxheV9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gT3ZlcmxheV9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIE92ZXJsYXlfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIE92ZXJsYXlfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbnZhciBPdmVybGF5X2Fzc2lnbiA9IE9iamVjdC5hc3NpZ247IC8vIE5vdGUgdGhhdCB0aGUgT3ZlcmxheSBjb21wb25lbnRzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIGFjdGl2ZSBUaGVtZSxcbi8vIGJlY2F1c2UgdGhleSBoaWdobGlnaHQgZWxlbWVudHMgaW4gdGhlIG1haW4gQ2hyb21lIHdpbmRvdyAob3V0c2lkZSBvZiBkZXZ0b29scykuXG4vLyBUaGUgY29sb3JzIGJlbG93IHdlcmUgY2hvc2VuIHRvIHJvdWdobHkgbWF0Y2ggdGhvc2UgdXNlZCBieSBDaHJvbWUgZGV2dG9vbHMuXG5cbnZhciBPdmVybGF5UmVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE92ZXJsYXlSZWN0KGRvYywgY29udGFpbmVyKSB7XG4gICAgT3ZlcmxheV9jbGFzc0NhbGxDaGVjayh0aGlzLCBPdmVybGF5UmVjdCk7XG5cbiAgICB0aGlzLm5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5ib3JkZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5wYWRkaW5nID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuY29udGVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmJvcmRlci5zdHlsZS5ib3JkZXJDb2xvciA9IG92ZXJsYXlTdHlsZXMuYm9yZGVyO1xuICAgIHRoaXMucGFkZGluZy5zdHlsZS5ib3JkZXJDb2xvciA9IG92ZXJsYXlTdHlsZXMucGFkZGluZztcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3ZlcmxheVN0eWxlcy5iYWNrZ3JvdW5kO1xuICAgIE92ZXJsYXlfYXNzaWduKHRoaXMubm9kZS5zdHlsZSwge1xuICAgICAgYm9yZGVyQ29sb3I6IG92ZXJsYXlTdHlsZXMubWFyZ2luLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCdcbiAgICB9KTtcbiAgICB0aGlzLm5vZGUuc3R5bGUuekluZGV4ID0gJzEwMDAwMDAwJztcbiAgICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5ib3JkZXIpO1xuICAgIHRoaXMuYm9yZGVyLmFwcGVuZENoaWxkKHRoaXMucGFkZGluZyk7XG4gICAgdGhpcy5wYWRkaW5nLmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMubm9kZSk7XG4gIH1cblxuICBPdmVybGF5X2NyZWF0ZUNsYXNzKE92ZXJsYXlSZWN0LCBbe1xuICAgIGtleTogXCJyZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgaWYgKHRoaXMubm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMubm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUoYm94LCBkaW1zKSB7XG4gICAgICBib3hXcmFwKGRpbXMsICdtYXJnaW4nLCB0aGlzLm5vZGUpO1xuICAgICAgYm94V3JhcChkaW1zLCAnYm9yZGVyJywgdGhpcy5ib3JkZXIpO1xuICAgICAgYm94V3JhcChkaW1zLCAncGFkZGluZycsIHRoaXMucGFkZGluZyk7XG4gICAgICBPdmVybGF5X2Fzc2lnbih0aGlzLmNvbnRlbnQuc3R5bGUsIHtcbiAgICAgICAgaGVpZ2h0OiBib3guaGVpZ2h0IC0gZGltcy5ib3JkZXJUb3AgLSBkaW1zLmJvcmRlckJvdHRvbSAtIGRpbXMucGFkZGluZ1RvcCAtIGRpbXMucGFkZGluZ0JvdHRvbSArICdweCcsXG4gICAgICAgIHdpZHRoOiBib3gud2lkdGggLSBkaW1zLmJvcmRlckxlZnQgLSBkaW1zLmJvcmRlclJpZ2h0IC0gZGltcy5wYWRkaW5nTGVmdCAtIGRpbXMucGFkZGluZ1JpZ2h0ICsgJ3B4J1xuICAgICAgfSk7XG4gICAgICBPdmVybGF5X2Fzc2lnbih0aGlzLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgdG9wOiBib3gudG9wIC0gZGltcy5tYXJnaW5Ub3AgKyAncHgnLFxuICAgICAgICBsZWZ0OiBib3gubGVmdCAtIGRpbXMubWFyZ2luTGVmdCArICdweCdcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBPdmVybGF5UmVjdDtcbn0oKTtcblxudmFyIE92ZXJsYXlUaXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPdmVybGF5VGlwKGRvYywgY29udGFpbmVyKSB7XG4gICAgT3ZlcmxheV9jbGFzc0NhbGxDaGVjayh0aGlzLCBPdmVybGF5VGlwKTtcblxuICAgIHRoaXMudGlwID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIE92ZXJsYXlfYXNzaWduKHRoaXMudGlwLnN0eWxlLCB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4RmxvdzogJ3JvdyBub3dyYXAnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzMzMzc0MCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICcycHgnLFxuICAgICAgZm9udEZhbWlseTogJ1wiU0ZNb25vLVJlZ3VsYXJcIiwgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2UnLFxuICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgcGFkZGluZzogJzNweCA1cHgnLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgICB9KTtcbiAgICB0aGlzLm5hbWVTcGFuID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICB0aGlzLnRpcC5hcHBlbmRDaGlsZCh0aGlzLm5hbWVTcGFuKTtcbiAgICBPdmVybGF5X2Fzc2lnbih0aGlzLm5hbWVTcGFuLnN0eWxlLCB7XG4gICAgICBjb2xvcjogJyNlZTc4ZTYnLFxuICAgICAgYm9yZGVyUmlnaHQ6ICcxcHggc29saWQgI2FhYWFhYScsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICcwLjVyZW0nLFxuICAgICAgbWFyZ2luUmlnaHQ6ICcwLjVyZW0nXG4gICAgfSk7XG4gICAgdGhpcy5kaW1TcGFuID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICB0aGlzLnRpcC5hcHBlbmRDaGlsZCh0aGlzLmRpbVNwYW4pO1xuICAgIE92ZXJsYXlfYXNzaWduKHRoaXMuZGltU3Bhbi5zdHlsZSwge1xuICAgICAgY29sb3I6ICcjZDdkN2Q3J1xuICAgIH0pO1xuICAgIHRoaXMudGlwLnN0eWxlLnpJbmRleCA9ICcxMDAwMDAwMCc7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGlwKTtcbiAgfVxuXG4gIE92ZXJsYXlfY3JlYXRlQ2xhc3MoT3ZlcmxheVRpcCwgW3tcbiAgICBrZXk6IFwicmVtb3ZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIGlmICh0aGlzLnRpcC5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMudGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy50aXApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVUZXh0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVRleHQobmFtZSwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgdGhpcy5uYW1lU3Bhbi50ZXh0Q29udGVudCA9IG5hbWU7XG4gICAgICB0aGlzLmRpbVNwYW4udGV4dENvbnRlbnQgPSBNYXRoLnJvdW5kKHdpZHRoKSArICdweCDDlyAnICsgTWF0aC5yb3VuZChoZWlnaHQpICsgJ3B4JztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlUG9zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9zaXRpb24oZGltcywgYm91bmRzKSB7XG4gICAgICB2YXIgdGlwUmVjdCA9IHRoaXMudGlwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHRpcFBvcyA9IGZpbmRUaXBQb3MoZGltcywgYm91bmRzLCB7XG4gICAgICAgIHdpZHRoOiB0aXBSZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHRpcFJlY3QuaGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIE92ZXJsYXlfYXNzaWduKHRoaXMudGlwLnN0eWxlLCB0aXBQb3Muc3R5bGUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBPdmVybGF5VGlwO1xufSgpO1xuXG52YXIgT3ZlcmxheSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE92ZXJsYXkoYWdlbnQpIHtcbiAgICBPdmVybGF5X2NsYXNzQ2FsbENoZWNrKHRoaXMsIE92ZXJsYXkpO1xuXG4gICAgLy8gRmluZCB0aGUgcm9vdCB3aW5kb3csIGJlY2F1c2Ugb3ZlcmxheXMgYXJlIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gaXQuXG4gICAgdmFyIGN1cnJlbnRXaW5kb3cgPSB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19UQVJHRVRfV0lORE9XX18gfHwgd2luZG93O1xuICAgIHRoaXMud2luZG93ID0gY3VycmVudFdpbmRvdzsgLy8gV2hlbiBvcGVuZWQgaW4gc2hlbGxzL2RldiwgdGhlIHRvb2x0aXAgc2hvdWxkIGJlIGJvdW5kIGJ5IHRoZSBhcHAgaWZyYW1lLCBub3QgYnkgdGhlIHRvcG1vc3Qgd2luZG93LlxuXG4gICAgdmFyIHRpcEJvdW5kc1dpbmRvdyA9IHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX1RBUkdFVF9XSU5ET1dfXyB8fCB3aW5kb3c7XG4gICAgdGhpcy50aXBCb3VuZHNXaW5kb3cgPSB0aXBCb3VuZHNXaW5kb3c7XG4gICAgdmFyIGRvYyA9IGN1cnJlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gICAgdGhpcy5jb250YWluZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4ID0gJzEwMDAwMDAwJztcbiAgICB0aGlzLnRpcCA9IG5ldyBPdmVybGF5VGlwKGRvYywgdGhpcy5jb250YWluZXIpO1xuICAgIHRoaXMucmVjdHMgPSBbXTtcbiAgICB0aGlzLmFnZW50ID0gYWdlbnQ7XG4gICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgT3ZlcmxheV9jcmVhdGVDbGFzcyhPdmVybGF5LCBbe1xuICAgIGtleTogXCJyZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKCk7XG4gICAgICB0aGlzLnJlY3RzLmZvckVhY2goZnVuY3Rpb24gKHJlY3QpIHtcbiAgICAgICAgcmVjdC5yZW1vdmUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWN0cy5sZW5ndGggPSAwO1xuXG4gICAgICBpZiAodGhpcy5jb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zcGVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNwZWN0KG5vZGVzLCBuYW1lKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAvLyBXZSBjYW4ndCBnZXQgdGhlIHNpemUgb2YgdGV4dCBub2RlcyBvciBjb21tZW50IG5vZGVzLiBSZWFjdCBhcyBvZiB2MTVcbiAgICAgIC8vIGhlYXZpbHkgdXNlcyBjb21tZW50IG5vZGVzIHRvIGRlbGltaXQgdGV4dC5cbiAgICAgIHZhciBlbGVtZW50cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKHRoaXMucmVjdHMubGVuZ3RoID4gZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciByZWN0ID0gdGhpcy5yZWN0cy5wb3AoKTtcbiAgICAgICAgcmVjdC5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh0aGlzLnJlY3RzLmxlbmd0aCA8IGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJlY3RzLnB1c2gobmV3IE92ZXJsYXlSZWN0KHRoaXMud2luZG93LmRvY3VtZW50LCB0aGlzLmNvbnRhaW5lcikpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3V0ZXJCb3ggPSB7XG4gICAgICAgIHRvcDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICByaWdodDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgICAgICBib3R0b206IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgICAgICAgbGVmdDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG4gICAgICB9O1xuICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGJveCA9IGdldE5lc3RlZEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBfdGhpcy53aW5kb3cpO1xuICAgICAgICB2YXIgZGltcyA9IGdldEVsZW1lbnREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgICAgICBvdXRlckJveC50b3AgPSBNYXRoLm1pbihvdXRlckJveC50b3AsIGJveC50b3AgLSBkaW1zLm1hcmdpblRvcCk7XG4gICAgICAgIG91dGVyQm94LnJpZ2h0ID0gTWF0aC5tYXgob3V0ZXJCb3gucmlnaHQsIGJveC5sZWZ0ICsgYm94LndpZHRoICsgZGltcy5tYXJnaW5SaWdodCk7XG4gICAgICAgIG91dGVyQm94LmJvdHRvbSA9IE1hdGgubWF4KG91dGVyQm94LmJvdHRvbSwgYm94LnRvcCArIGJveC5oZWlnaHQgKyBkaW1zLm1hcmdpbkJvdHRvbSk7XG4gICAgICAgIG91dGVyQm94LmxlZnQgPSBNYXRoLm1pbihvdXRlckJveC5sZWZ0LCBib3gubGVmdCAtIGRpbXMubWFyZ2luTGVmdCk7XG4gICAgICAgIHZhciByZWN0ID0gX3RoaXMucmVjdHNbaW5kZXhdO1xuICAgICAgICByZWN0LnVwZGF0ZShib3gsIGRpbXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghbmFtZSkge1xuICAgICAgICBuYW1lID0gZWxlbWVudHNbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIG5vZGUgPSBlbGVtZW50c1swXTtcbiAgICAgICAgdmFyIHJlbmRlcmVySW50ZXJmYWNlID0gdGhpcy5hZ2VudC5nZXRCZXN0TWF0Y2hpbmdSZW5kZXJlckludGVyZmFjZShub2RlKTtcblxuICAgICAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgICB2YXIgaWQgPSByZW5kZXJlckludGVyZmFjZS5nZXRGaWJlcklERm9yTmF0aXZlKG5vZGUsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICB2YXIgb3duZXJOYW1lID0gcmVuZGVyZXJJbnRlcmZhY2UuZ2V0RGlzcGxheU5hbWVGb3JGaWJlcklEKGlkLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBuYW1lICs9ICcgKGluICcgKyBvd25lck5hbWUgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGlwLnVwZGF0ZVRleHQobmFtZSwgb3V0ZXJCb3gucmlnaHQgLSBvdXRlckJveC5sZWZ0LCBvdXRlckJveC5ib3R0b20gLSBvdXRlckJveC50b3ApO1xuICAgICAgdmFyIHRpcEJvdW5kcyA9IGdldE5lc3RlZEJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLnRpcEJvdW5kc1dpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMud2luZG93KTtcbiAgICAgIHRoaXMudGlwLnVwZGF0ZVBvc2l0aW9uKHtcbiAgICAgICAgdG9wOiBvdXRlckJveC50b3AsXG4gICAgICAgIGxlZnQ6IG91dGVyQm94LmxlZnQsXG4gICAgICAgIGhlaWdodDogb3V0ZXJCb3guYm90dG9tIC0gb3V0ZXJCb3gudG9wLFxuICAgICAgICB3aWR0aDogb3V0ZXJCb3gucmlnaHQgLSBvdXRlckJveC5sZWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHRvcDogdGlwQm91bmRzLnRvcCArIHRoaXMudGlwQm91bmRzV2luZG93LnNjcm9sbFksXG4gICAgICAgIGxlZnQ6IHRpcEJvdW5kcy5sZWZ0ICsgdGhpcy50aXBCb3VuZHNXaW5kb3cuc2Nyb2xsWCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnRpcEJvdW5kc1dpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgd2lkdGg6IHRoaXMudGlwQm91bmRzV2luZG93LmlubmVyV2lkdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBPdmVybGF5O1xufSgpO1xuXG5cblxuZnVuY3Rpb24gZmluZFRpcFBvcyhkaW1zLCBib3VuZHMsIHRpcFNpemUpIHtcbiAgdmFyIHRpcEhlaWdodCA9IE1hdGgubWF4KHRpcFNpemUuaGVpZ2h0LCAyMCk7XG4gIHZhciB0aXBXaWR0aCA9IE1hdGgubWF4KHRpcFNpemUud2lkdGgsIDYwKTtcbiAgdmFyIG1hcmdpbiA9IDU7XG4gIHZhciB0b3A7XG5cbiAgaWYgKGRpbXMudG9wICsgZGltcy5oZWlnaHQgKyB0aXBIZWlnaHQgPD0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQpIHtcbiAgICBpZiAoZGltcy50b3AgKyBkaW1zLmhlaWdodCA8IGJvdW5kcy50b3AgKyAwKSB7XG4gICAgICB0b3AgPSBib3VuZHMudG9wICsgbWFyZ2luO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3AgPSBkaW1zLnRvcCArIGRpbXMuaGVpZ2h0ICsgbWFyZ2luO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkaW1zLnRvcCAtIHRpcEhlaWdodCA8PSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCkge1xuICAgIGlmIChkaW1zLnRvcCAtIHRpcEhlaWdodCAtIG1hcmdpbiA8IGJvdW5kcy50b3AgKyBtYXJnaW4pIHtcbiAgICAgIHRvcCA9IGJvdW5kcy50b3AgKyBtYXJnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IGRpbXMudG9wIC0gdGlwSGVpZ2h0IC0gbWFyZ2luO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIHRpcEhlaWdodCAtIG1hcmdpbjtcbiAgfVxuXG4gIHZhciBsZWZ0ID0gZGltcy5sZWZ0ICsgbWFyZ2luO1xuXG4gIGlmIChkaW1zLmxlZnQgPCBib3VuZHMubGVmdCkge1xuICAgIGxlZnQgPSBib3VuZHMubGVmdCArIG1hcmdpbjtcbiAgfVxuXG4gIGlmIChkaW1zLmxlZnQgKyB0aXBXaWR0aCA+IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoKSB7XG4gICAgbGVmdCA9IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC0gdGlwV2lkdGggLSBtYXJnaW47XG4gIH1cblxuICB0b3AgKz0gJ3B4JztcbiAgbGVmdCArPSAncHgnO1xuICByZXR1cm4ge1xuICAgIHN0eWxlOiB7XG4gICAgICB0b3A6IHRvcCxcbiAgICAgIGxlZnQ6IGxlZnRcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJveFdyYXAoZGltcywgd2hhdCwgbm9kZSkge1xuICBPdmVybGF5X2Fzc2lnbihub2RlLnN0eWxlLCB7XG4gICAgYm9yZGVyVG9wV2lkdGg6IGRpbXNbd2hhdCArICdUb3AnXSArICdweCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBkaW1zW3doYXQgKyAnTGVmdCddICsgJ3B4JyxcbiAgICBib3JkZXJSaWdodFdpZHRoOiBkaW1zW3doYXQgKyAnUmlnaHQnXSArICdweCcsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IGRpbXNbd2hhdCArICdCb3R0b20nXSArICdweCcsXG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCdcbiAgfSk7XG59XG5cbnZhciBvdmVybGF5U3R5bGVzID0ge1xuICBiYWNrZ3JvdW5kOiAncmdiYSgxMjAsIDE3MCwgMjEwLCAwLjcpJyxcbiAgcGFkZGluZzogJ3JnYmEoNzcsIDIwMCwgMCwgMC4zKScsXG4gIG1hcmdpbjogJ3JnYmEoMjU1LCAxNTUsIDAsIDAuMyknLFxuICBib3JkZXI6ICdyZ2JhKDI1NSwgMjAwLCA1MCwgMC4zKSdcbn07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3ZpZXdzL0hpZ2hsaWdodGVyL0hpZ2hsaWdodGVyLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxudmFyIFNIT1dfRFVSQVRJT04gPSAyMDAwO1xudmFyIHRpbWVvdXRJRCA9IG51bGw7XG52YXIgb3ZlcmxheSA9IG51bGw7XG5mdW5jdGlvbiBoaWRlT3ZlcmxheShhZ2VudCkge1xuICBpZiAod2luZG93LmRvY3VtZW50ID09IG51bGwpIHtcbiAgICBhZ2VudC5lbWl0KCdoaWRlTmF0aXZlSGlnaGxpZ2h0Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGltZW91dElEID0gbnVsbDtcblxuICBpZiAob3ZlcmxheSAhPT0gbnVsbCkge1xuICAgIG92ZXJsYXkucmVtb3ZlKCk7XG4gICAgb3ZlcmxheSA9IG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3dPdmVybGF5KGVsZW1lbnRzLCBjb21wb25lbnROYW1lLCBhZ2VudCwgaGlkZUFmdGVyVGltZW91dCkge1xuICBpZiAod2luZG93LmRvY3VtZW50ID09IG51bGwpIHtcbiAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCAmJiBlbGVtZW50c1swXSAhPSBudWxsKSB7XG4gICAgICBhZ2VudC5lbWl0KCdzaG93TmF0aXZlSGlnaGxpZ2h0JywgZWxlbWVudHNbMF0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50cyA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG92ZXJsYXkgPT09IG51bGwpIHtcbiAgICBvdmVybGF5ID0gbmV3IE92ZXJsYXkoYWdlbnQpO1xuICB9XG5cbiAgb3ZlcmxheS5pbnNwZWN0KGVsZW1lbnRzLCBjb21wb25lbnROYW1lKTtcblxuICBpZiAoaGlkZUFmdGVyVGltZW91dCkge1xuICAgIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhpZGVPdmVybGF5KGFnZW50KTtcbiAgICB9LCBTSE9XX0RVUkFUSU9OKTtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC92aWV3cy9IaWdobGlnaHRlci9pbmRleC5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cbi8vIFRoaXMgcGx1Zy1pbiBwcm92aWRlcyBpbi1wYWdlIGhpZ2hsaWdodGluZyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbi8vIEl0IGlzIHVzZWQgYnkgdGhlIGJyb3dzZXIgZXh0ZW5zaW9uIGFuZCB0aGUgc3RhbmRhbG9uZSBEZXZUb29scyBzaGVsbCAod2hlbiBjb25uZWN0ZWQgdG8gYSBicm93c2VyKS5cbi8vIEl0IGlzIG5vdCBjdXJyZW50bHkgdGhlIG1lY2hhbmlzbSB1c2VkIHRvIGhpZ2hsaWdodCBSZWFjdCBOYXRpdmUgdmlld3MuXG4vLyBUaGF0IGlzIGRvbmUgYnkgdGhlIFJlYWN0IE5hdGl2ZSBJbnNwZWN0b3IgY29tcG9uZW50LlxudmFyIGlmcmFtZXNMaXN0ZW5pbmdUbyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIHNldHVwSGlnaGxpZ2h0ZXIoYnJpZGdlLCBhZ2VudCkge1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2NsZWFyTmF0aXZlRWxlbWVudEhpZ2hsaWdodCcsIGNsZWFyTmF0aXZlRWxlbWVudEhpZ2hsaWdodCk7XG4gIGJyaWRnZS5hZGRMaXN0ZW5lcignaGlnaGxpZ2h0TmF0aXZlRWxlbWVudCcsIGhpZ2hsaWdodE5hdGl2ZUVsZW1lbnQpO1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3NodXRkb3duJywgc3RvcEluc3BlY3RpbmdOYXRpdmUpO1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N0YXJ0SW5zcGVjdGluZ05hdGl2ZScsIHN0YXJ0SW5zcGVjdGluZ05hdGl2ZSk7XG4gIGJyaWRnZS5hZGRMaXN0ZW5lcignc3RvcEluc3BlY3RpbmdOYXRpdmUnLCBzdG9wSW5zcGVjdGluZ05hdGl2ZSk7XG5cbiAgZnVuY3Rpb24gc3RhcnRJbnNwZWN0aW5nTmF0aXZlKCkge1xuICAgIHJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3cod2luZG93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3cod2luZG93KSB7XG4gICAgLy8gVGhpcyBwbHVnLWluIG1heSBydW4gaW4gbm9uLURPTSBlbnZpcm9ubWVudHMgKGUuZy4gUmVhY3QgTmF0aXZlKS5cbiAgICBpZiAod2luZG93ICYmIHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbGljaywgdHJ1ZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZUV2ZW50LCB0cnVlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBvbk1vdXNlRXZlbnQsIHRydWUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlRXZlbnQsIHRydWUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Qb2ludGVyRG93biwgdHJ1ZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvblBvaW50ZXJVcCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW50LmVtaXQoJ3N0YXJ0SW5zcGVjdGluZ05hdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BJbnNwZWN0aW5nTmF0aXZlKCkge1xuICAgIGhpZGVPdmVybGF5KGFnZW50KTtcbiAgICByZW1vdmVMaXN0ZW5lcnNPbldpbmRvdyh3aW5kb3cpO1xuICAgIGlmcmFtZXNMaXN0ZW5pbmdUby5mb3JFYWNoKGZ1bmN0aW9uIChmcmFtZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXJzT25XaW5kb3coZnJhbWUuY29udGVudFdpbmRvdyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikgey8vIFRoaXMgY2FuIGVycm9yIHdoZW4gdGhlIGlmcmFtZSBpcyBvbiBhIGNyb3NzLW9yaWdpbi5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZnJhbWVzTGlzdGVuaW5nVG8gPSBuZXcgU2V0KCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnNPbldpbmRvdyh3aW5kb3cpIHtcbiAgICAvLyBUaGlzIHBsdWctaW4gbWF5IHJ1biBpbiBub24tRE9NIGVudmlyb25tZW50cyAoZS5nLiBSZWFjdCBOYXRpdmUpLlxuICAgIGlmICh3aW5kb3cgJiYgdHlwZW9mIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsaWNrLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRXZlbnQsIHRydWUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIG9uTW91c2VFdmVudCwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VFdmVudCwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUsIHRydWUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIG9uUG9pbnRlclVwLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWdlbnQuZW1pdCgnc3RvcEluc3BlY3RpbmdOYXRpdmUnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhck5hdGl2ZUVsZW1lbnRIaWdobGlnaHQoKSB7XG4gICAgaGlkZU92ZXJsYXkoYWdlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0TmF0aXZlRWxlbWVudChfcmVmKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZSxcbiAgICAgICAgaGlkZUFmdGVyVGltZW91dCA9IF9yZWYuaGlkZUFmdGVyVGltZW91dCxcbiAgICAgICAgaWQgPSBfcmVmLmlkLFxuICAgICAgICBvcGVuTmF0aXZlRWxlbWVudHNQYW5lbCA9IF9yZWYub3Blbk5hdGl2ZUVsZW1lbnRzUGFuZWwsXG4gICAgICAgIHJlbmRlcmVySUQgPSBfcmVmLnJlbmRlcmVySUQsXG4gICAgICAgIHNjcm9sbEludG9WaWV3ID0gX3JlZi5zY3JvbGxJbnRvVmlldztcbiAgICB2YXIgcmVuZGVyZXIgPSBhZ2VudC5yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIGhpZGVPdmVybGF5KGFnZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHNvbWUgY2FzZXMgZmliZXIgbWF5IGFscmVhZHkgYmUgdW5tb3VudGVkXG5cblxuICAgIGlmICghcmVuZGVyZXIuaGFzRmliZXJXaXRoSWQoaWQpKSB7XG4gICAgICBoaWRlT3ZlcmxheShhZ2VudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vZGVzID0gcmVuZGVyZXIuZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRChpZCk7XG5cbiAgICBpZiAobm9kZXMgIT0gbnVsbCAmJiBub2Rlc1swXSAhPSBudWxsKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzWzBdOyAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG5cbiAgICAgIGlmIChzY3JvbGxJbnRvVmlldyAmJiB0eXBlb2Ygbm9kZS5zY3JvbGxJbnRvVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBJZiB0aGUgbm9kZSBpc24ndCB2aXNpYmxlIHNob3cgaXQgYmVmb3JlIGhpZ2hsaWdodGluZyBpdC5cbiAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gcmVjb25zaWRlciB0aGlzOyBpdCBtaWdodCBiZSBhIGxpdHRsZSBkaXNydXB0aXZlLlxuICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICAgIGlubGluZTogJ25lYXJlc3QnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzaG93T3ZlcmxheShub2RlcywgZGlzcGxheU5hbWUsIGFnZW50LCBoaWRlQWZ0ZXJUaW1lb3V0KTtcblxuICAgICAgaWYgKG9wZW5OYXRpdmVFbGVtZW50c1BhbmVsKSB7XG4gICAgICAgIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uJDAgPSBub2RlO1xuICAgICAgICBicmlkZ2Uuc2VuZCgnc3luY1NlbGVjdGlvblRvTmF0aXZlRWxlbWVudHNQYW5lbCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoaWRlT3ZlcmxheShhZ2VudCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3RvcEluc3BlY3RpbmdOYXRpdmUoKTtcbiAgICBicmlkZ2Uuc2VuZCgnc3RvcEluc3BlY3RpbmdOYXRpdmUnLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW91c2VFdmVudChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZWxlY3RGaWJlckZvck5vZGUoZ2V0RXZlbnRUYXJnZXQoZXZlbnQpKTtcbiAgfVxuXG4gIHZhciBsYXN0SG92ZXJlZE5vZGUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlck1vdmUoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKGxhc3RIb3ZlcmVkTm9kZSA9PT0gdGFyZ2V0KSByZXR1cm47XG4gICAgbGFzdEhvdmVyZWROb2RlID0gdGFyZ2V0O1xuXG4gICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSUZSQU1FJykge1xuICAgICAgdmFyIGlmcmFtZSA9IHRhcmdldDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpZnJhbWVzTGlzdGVuaW5nVG8uaGFzKGlmcmFtZSkpIHtcbiAgICAgICAgICB2YXIgX3dpbmRvdyA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgICAgICAgIHJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3coX3dpbmRvdyk7XG4gICAgICAgICAgaWZyYW1lc0xpc3RlbmluZ1RvLmFkZChpZnJhbWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikgey8vIFRoaXMgY2FuIGVycm9yIHdoZW4gdGhlIGlmcmFtZSBpcyBvbiBhIGNyb3NzLW9yaWdpbi5cbiAgICAgIH1cbiAgICB9IC8vIERvbid0IHBhc3MgdGhlIG5hbWUgZXhwbGljaXRseS5cbiAgICAvLyBJdCB3aWxsIGJlIGluZmVycmVkIGZyb20gRE9NIHRhZyBhbmQgRmliZXIgb3duZXIuXG5cblxuICAgIHNob3dPdmVybGF5KFt0YXJnZXRdLCBudWxsLCBhZ2VudCwgZmFsc2UpO1xuICAgIHNlbGVjdEZpYmVyRm9yTm9kZSh0YXJnZXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyVXAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgdmFyIHNlbGVjdEZpYmVyRm9yTm9kZSA9IGxvZGFzaF90aHJvdHRsZV9kZWZhdWx0KCkoZXNtKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGlkID0gYWdlbnQuZ2V0SURGb3JOb2RlKG5vZGUpO1xuXG4gICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICBicmlkZ2Uuc2VuZCgnc2VsZWN0RmliZXInLCBpZCk7XG4gICAgfVxuICB9KSwgMjAwLCAvLyBEb24ndCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdmVyeSBmaXJzdCAyMDBtc1xuICAvLyBiZWNhdXNlIHRob3NlIGFyZSB1c3VhbGx5IHVuaW50ZW50aW9uYWwgYXMgeW91IGxpZnQgdGhlIGN1cnNvci5cbiAge1xuICAgIGxlYWRpbmc6IGZhbHNlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkKSB7XG4gICAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC92aWV3cy9UcmFjZVVwZGF0ZXMvY2FudmFzLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbnZhciBPVVRMSU5FX0NPTE9SID0gJyNmMGYwZjAnOyAvLyBOb3RlIHRoZXNlIGNvbG9ycyBhcmUgaW4gc3luYyB3aXRoIERldlRvb2xzIFByb2ZpbGVyIGNoYXJ0IGNvbG9ycy5cblxudmFyIENPTE9SUyA9IFsnIzM3YWZhOScsICcjNjNiMTllJywgJyM4MGIzOTMnLCAnIzk3YjQ4OCcsICcjYWJiNjdkJywgJyNiZWI3NzEnLCAnI2NmYjk2NScsICcjZGZiYTU3JywgJyNlZmJiNDknLCAnI2ZlYmMzOCddO1xudmFyIGNhbnZhcyA9IG51bGw7XG5mdW5jdGlvbiBkcmF3KG5vZGVUb0RhdGEsIGFnZW50KSB7XG4gIGlmICh3aW5kb3cuZG9jdW1lbnQgPT0gbnVsbCkge1xuICAgIHZhciBub2Rlc1RvRHJhdyA9IFtdO1xuICAgIGl0ZXJhdGVOb2Rlcyhub2RlVG9EYXRhLCBmdW5jdGlvbiAoXywgY29sb3IsIG5vZGUpIHtcbiAgICAgIG5vZGVzVG9EcmF3LnB1c2goe1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGFnZW50LmVtaXQoJ2RyYXdUcmFjZVVwZGF0ZXMnLCBub2Rlc1RvRHJhdyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNhbnZhcyA9PT0gbnVsbCkge1xuICAgIGluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHZhciBjYW52YXNGbG93ID0gY2FudmFzO1xuICBjYW52YXNGbG93LndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGNhbnZhc0Zsb3cuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgY29udGV4dCA9IGNhbnZhc0Zsb3cuZ2V0Q29udGV4dCgnMmQnKTtcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgY2FudmFzRmxvdy53aWR0aCwgY2FudmFzRmxvdy5oZWlnaHQpO1xuICBpdGVyYXRlTm9kZXMobm9kZVRvRGF0YSwgZnVuY3Rpb24gKHJlY3QsIGNvbG9yKSB7XG4gICAgaWYgKHJlY3QgIT09IG51bGwpIHtcbiAgICAgIGRyYXdCb3JkZXIoY29udGV4dCwgcmVjdCwgY29sb3IpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGVOb2Rlcyhub2RlVG9EYXRhLCBleGVjdXRlKSB7XG4gIG5vZGVUb0RhdGEuZm9yRWFjaChmdW5jdGlvbiAoX3JlZiwgbm9kZSkge1xuICAgIHZhciBjb3VudCA9IF9yZWYuY291bnQsXG4gICAgICAgIHJlY3QgPSBfcmVmLnJlY3Q7XG4gICAgdmFyIGNvbG9ySW5kZXggPSBNYXRoLm1pbihDT0xPUlMubGVuZ3RoIC0gMSwgY291bnQgLSAxKTtcbiAgICB2YXIgY29sb3IgPSBDT0xPUlNbY29sb3JJbmRleF07XG4gICAgZXhlY3V0ZShyZWN0LCBjb2xvciwgbm9kZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkcmF3Qm9yZGVyKGNvbnRleHQsIHJlY3QsIGNvbG9yKSB7XG4gIHZhciBoZWlnaHQgPSByZWN0LmhlaWdodCxcbiAgICAgIGxlZnQgPSByZWN0LmxlZnQsXG4gICAgICB0b3AgPSByZWN0LnRvcCxcbiAgICAgIHdpZHRoID0gcmVjdC53aWR0aDsgLy8gb3V0bGluZVxuXG4gIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9IE9VVExJTkVfQ09MT1I7XG4gIGNvbnRleHQuc3Ryb2tlUmVjdChsZWZ0IC0gMSwgdG9wIC0gMSwgd2lkdGggKyAyLCBoZWlnaHQgKyAyKTsgLy8gaW5zZXRcblxuICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7XG4gIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBPVVRMSU5FX0NPTE9SO1xuICBjb250ZXh0LnN0cm9rZVJlY3QobGVmdCArIDEsIHRvcCArIDEsIHdpZHRoIC0gMSwgaGVpZ2h0IC0gMSk7XG4gIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgY29udGV4dC5zZXRMaW5lRGFzaChbMF0pOyAvLyBib3JkZXJcblxuICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7XG4gIGNvbnRleHQuc3Ryb2tlUmVjdChsZWZ0LCB0b3AsIHdpZHRoIC0gMSwgaGVpZ2h0IC0gMSk7XG4gIGNvbnRleHQuc2V0TGluZURhc2goWzBdKTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveShhZ2VudCkge1xuICBpZiAod2luZG93LmRvY3VtZW50ID09IG51bGwpIHtcbiAgICBhZ2VudC5lbWl0KCdkaXNhYmxlVHJhY2VVcGRhdGVzJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNhbnZhcyAhPT0gbnVsbCkge1xuICAgIGlmIChjYW52YXMucGFyZW50Tm9kZSAhPSBudWxsKSB7XG4gICAgICBjYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYW52YXMpO1xuICAgIH1cblxuICAgIGNhbnZhcyA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgY2FudmFzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICBjYW52YXMuc3R5bGUuY3NzVGV4dCA9IFwiXFxuICAgIHh4LWJhY2tncm91bmQtY29sb3I6IHJlZDtcXG4gICAgeHgtb3BhY2l0eTogMC41O1xcbiAgICBib3R0b206IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICB0b3A6IDA7XFxuICAgIHotaW5kZXg6IDEwMDAwMDAwMDA7XFxuICBcIjtcbiAgdmFyIHJvb3QgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICByb290Lmluc2VydEJlZm9yZShjYW52YXMsIHJvb3QuZmlyc3RDaGlsZCk7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3ZpZXdzL1RyYWNlVXBkYXRlcy9pbmRleC5qc1xuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cbi8vIEhvdyBsb25nIHRoZSByZWN0IHNob3VsZCBiZSBzaG93biBmb3I/XG52YXIgRElTUExBWV9EVVJBVElPTiA9IDI1MDsgLy8gV2hhdCdzIHRoZSBsb25nZXN0IHdlIGFyZSB3aWxsaW5nIHRvIHNob3cgdGhlIG92ZXJsYXkgZm9yP1xuLy8gVGhpcyBjYW4gYmUgaW1wb3J0YW50IGlmIHdlJ3JlIGdldHRpbmcgYSBmbHVycnkgb2YgZXZlbnRzIChlLmcuIHNjcm9sbCB1cGRhdGUpLlxuXG52YXIgTUFYX0RJU1BMQVlfRFVSQVRJT04gPSAzMDAwOyAvLyBIb3cgbG9uZyBzaG91bGQgYSByZWN0IGJlIGNvbnNpZGVyZWQgdmFsaWQgZm9yP1xuXG52YXIgUkVNRUFTVVJFTUVOVF9BRlRFUl9EVVJBVElPTiA9IDI1MDsgLy8gU29tZSBlbnZpcm9ubWVudHMgKGUuZy4gUmVhY3QgTmF0aXZlIC8gSGVybWVzKSBkb24ndCBzdXBwb3J0IHRoZSBwZXJmb3JtYW5jZSBBUEkgeWV0LlxuXG52YXIgZ2V0Q3VycmVudFRpbWUgPSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4odHlwZW9mIHBlcmZvcm1hbmNlID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YocGVyZm9ybWFuY2UpKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xudmFyIG5vZGVUb0RhdGEgPSBuZXcgTWFwKCk7XG52YXIgYWdlbnQgPSBudWxsO1xudmFyIGRyYXdBbmltYXRpb25GcmFtZUlEID0gbnVsbDtcbnZhciBpc0VuYWJsZWQgPSBmYWxzZTtcbnZhciByZWRyYXdUaW1lb3V0SUQgPSBudWxsO1xuZnVuY3Rpb24gVHJhY2VVcGRhdGVzX2luaXRpYWxpemUoaW5qZWN0ZWRBZ2VudCkge1xuICBhZ2VudCA9IGluamVjdGVkQWdlbnQ7XG4gIGFnZW50LmFkZExpc3RlbmVyKCd0cmFjZVVwZGF0ZXMnLCB0cmFjZVVwZGF0ZXMpO1xufVxuZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCh2YWx1ZSkge1xuICBpc0VuYWJsZWQgPSB2YWx1ZTtcblxuICBpZiAoIWlzRW5hYmxlZCkge1xuICAgIG5vZGVUb0RhdGEuY2xlYXIoKTtcblxuICAgIGlmIChkcmF3QW5pbWF0aW9uRnJhbWVJRCAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZHJhd0FuaW1hdGlvbkZyYW1lSUQpO1xuICAgICAgZHJhd0FuaW1hdGlvbkZyYW1lSUQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWRyYXdUaW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZWRyYXdUaW1lb3V0SUQpO1xuICAgICAgcmVkcmF3VGltZW91dElEID0gbnVsbDtcbiAgICB9XG5cbiAgICBkZXN0cm95KGFnZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZVVwZGF0ZXMobm9kZXMpIHtcbiAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGRhdGEgPSBub2RlVG9EYXRhLmdldChub2RlKTtcbiAgICB2YXIgbm93ID0gZ2V0Q3VycmVudFRpbWUoKTtcbiAgICB2YXIgbGFzdE1lYXN1cmVkQXQgPSBkYXRhICE9IG51bGwgPyBkYXRhLmxhc3RNZWFzdXJlZEF0IDogMDtcbiAgICB2YXIgcmVjdCA9IGRhdGEgIT0gbnVsbCA/IGRhdGEucmVjdCA6IG51bGw7XG5cbiAgICBpZiAocmVjdCA9PT0gbnVsbCB8fCBsYXN0TWVhc3VyZWRBdCArIFJFTUVBU1VSRU1FTlRfQUZURVJfRFVSQVRJT04gPCBub3cpIHtcbiAgICAgIGxhc3RNZWFzdXJlZEF0ID0gbm93O1xuICAgICAgcmVjdCA9IG1lYXN1cmVOb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIG5vZGVUb0RhdGEuc2V0KG5vZGUsIHtcbiAgICAgIGNvdW50OiBkYXRhICE9IG51bGwgPyBkYXRhLmNvdW50ICsgMSA6IDEsXG4gICAgICBleHBpcmF0aW9uVGltZTogZGF0YSAhPSBudWxsID8gTWF0aC5taW4obm93ICsgTUFYX0RJU1BMQVlfRFVSQVRJT04sIGRhdGEuZXhwaXJhdGlvblRpbWUgKyBESVNQTEFZX0RVUkFUSU9OKSA6IG5vdyArIERJU1BMQVlfRFVSQVRJT04sXG4gICAgICBsYXN0TWVhc3VyZWRBdDogbGFzdE1lYXN1cmVkQXQsXG4gICAgICByZWN0OiByZWN0XG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChyZWRyYXdUaW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQocmVkcmF3VGltZW91dElEKTtcbiAgICByZWRyYXdUaW1lb3V0SUQgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRyYXdBbmltYXRpb25GcmFtZUlEID09PSBudWxsKSB7XG4gICAgZHJhd0FuaW1hdGlvbkZyYW1lSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocHJlcGFyZVRvRHJhdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvRHJhdygpIHtcbiAgZHJhd0FuaW1hdGlvbkZyYW1lSUQgPSBudWxsO1xuICByZWRyYXdUaW1lb3V0SUQgPSBudWxsO1xuICB2YXIgbm93ID0gZ2V0Q3VycmVudFRpbWUoKTtcbiAgdmFyIGVhcmxpZXN0RXhwaXJhdGlvbiA9IE51bWJlci5NQVhfVkFMVUU7IC8vIFJlbW92ZSBhbnkgaXRlbXMgdGhhdCBoYXZlIGFscmVhZHkgZXhwaXJlZC5cblxuICBub2RlVG9EYXRhLmZvckVhY2goZnVuY3Rpb24gKGRhdGEsIG5vZGUpIHtcbiAgICBpZiAoZGF0YS5leHBpcmF0aW9uVGltZSA8IG5vdykge1xuICAgICAgbm9kZVRvRGF0YS5kZWxldGUobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVhcmxpZXN0RXhwaXJhdGlvbiA9IE1hdGgubWluKGVhcmxpZXN0RXhwaXJhdGlvbiwgZGF0YS5leHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9KTtcbiAgZHJhdyhub2RlVG9EYXRhLCBhZ2VudCk7XG5cbiAgaWYgKGVhcmxpZXN0RXhwaXJhdGlvbiAhPT0gTnVtYmVyLk1BWF9WQUxVRSkge1xuICAgIHJlZHJhd1RpbWVvdXRJRCA9IHNldFRpbWVvdXQocHJlcGFyZVRvRHJhdywgZWFybGllc3RFeHBpcmF0aW9uIC0gbm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZWFzdXJlTm9kZShub2RlKSB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBjdXJyZW50V2luZG93ID0gd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfVEFSR0VUX1dJTkRPV19fIHx8IHdpbmRvdztcbiAgcmV0dXJuIGdldE5lc3RlZEJvdW5kaW5nQ2xpZW50UmVjdChub2RlLCBjdXJyZW50V2luZG93KTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFyZS12ZXJzaW9ucy9saWIvZXNtL2luZGV4LmpzXG5mdW5jdGlvbiBlc21fdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBlc21fdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IGVzbV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gZXNtX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qKlxuICogQ29tcGFyZSBbc2VtdmVyXShodHRwczovL3NlbXZlci5vcmcvKSB2ZXJzaW9uIHN0cmluZ3MgdG8gZmluZCBncmVhdGVyLCBlcXVhbCBvciBsZXNzZXIuXG4gKiBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZ1bGwgc2VtdmVyIHNwZWNpZmljYXRpb24sIGluY2x1ZGluZyBjb21wYXJpbmcgdmVyc2lvbnMgd2l0aCBkaWZmZXJlbnQgbnVtYmVyIG9mIGRpZ2l0cyBsaWtlIGAxLjAuMGAsIGAxLjBgLCBgMWAsIGFuZCBwcmUtcmVsZWFzZSB2ZXJzaW9ucyBsaWtlIGAxLjAuMC1hbHBoYWAuXG4gKiBAcGFyYW0gdjEgLSBGaXJzdCB2ZXJzaW9uIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB2MiAtIFNlY29uZCB2ZXJzaW9uIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIE51bWVyaWMgdmFsdWUgY29tcGF0aWJsZSB3aXRoIHRoZSBbQXJyYXkuc29ydChmbikgaW50ZXJmYWNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9zb3J0I1BhcmFtZXRlcnMpLlxuICovXG52YXIgY29tcGFyZVZlcnNpb25zID0gZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKHYxLCB2Mikge1xuICAvLyB2YWxpZGF0ZSBpbnB1dCBhbmQgc3BsaXQgaW50byBzZWdtZW50c1xuICB2YXIgbjEgPSB2YWxpZGF0ZUFuZFBhcnNlKHYxKTtcbiAgdmFyIG4yID0gdmFsaWRhdGVBbmRQYXJzZSh2Mik7IC8vIHBvcCBvZmYgdGhlIHBhdGNoXG5cbiAgdmFyIHAxID0gbjEucG9wKCk7XG4gIHZhciBwMiA9IG4yLnBvcCgpOyAvLyB2YWxpZGF0ZSBudW1iZXJzXG5cbiAgdmFyIHIgPSBjb21wYXJlU2VnbWVudHMobjEsIG4yKTtcbiAgaWYgKHIgIT09IDApIHJldHVybiByOyAvLyB2YWxpZGF0ZSBwcmUtcmVsZWFzZVxuXG4gIGlmIChwMSAmJiBwMikge1xuICAgIHJldHVybiBjb21wYXJlU2VnbWVudHMocDEuc3BsaXQoJy4nKSwgcDIuc3BsaXQoJy4nKSk7XG4gIH0gZWxzZSBpZiAocDEgfHwgcDIpIHtcbiAgICByZXR1cm4gcDEgPyAtMSA6IDE7XG4gIH1cblxuICByZXR1cm4gMDtcbn07XG4vKipcbiAqIFZhbGlkYXRlIFtzZW12ZXJdKGh0dHBzOi8vc2VtdmVyLm9yZy8pIHZlcnNpb24gc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiBWZXJzaW9uIG51bWJlciB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBhIHZhbGlkIHNlbXZlciB2ZXJzaW9uIG51bWJlciwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogdmFsaWRhdGUoJzEuMC4wLXJjLjEnKTsgLy8gcmV0dXJuIHRydWVcbiAqIHZhbGlkYXRlKCcxLjAtcmMuMScpOyAvLyByZXR1cm4gZmFsc2VcbiAqIHZhbGlkYXRlKCdmb28nKTsgLy8gcmV0dXJuIGZhbHNlXG4gKiBgYGBcbiAqL1xuXG52YXIgdmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSh2ZXJzaW9uKSB7XG4gIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgL15bdlxcZF0vLnRlc3QodmVyc2lvbikgJiYgc2VtdmVyLnRlc3QodmVyc2lvbik7XG59O1xuLyoqXG4gKiBDb21wYXJlIFtzZW12ZXJdKGh0dHBzOi8vc2VtdmVyLm9yZy8pIHZlcnNpb24gc3RyaW5ncyB1c2luZyB0aGUgc3BlY2lmaWVkIG9wZXJhdG9yLlxuICpcbiAqIEBwYXJhbSB2MSBGaXJzdCB2ZXJzaW9uIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB2MiBTZWNvbmQgdmVyc2lvbiB0byBjb21wYXJlXG4gKiBAcGFyYW0gb3BlcmF0b3IgQWxsb3dlZCBhcml0aG1ldGljIG9wZXJhdG9yIHRvIHVzZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb21wYXJpc29uIGJldHdlZW4gdGhlIGZpcnN0VmVyc2lvbiBhbmQgdGhlIHNlY29uZFZlcnNpb24gc2F0aXNmaWVzIHRoZSBvcGVyYXRvciwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogY29tcGFyZSgnMTAuMS44JywgJzEwLjAuNCcsICc+Jyk7IC8vIHJldHVybiB0cnVlXG4gKiBjb21wYXJlKCcxMC4wLjEnLCAnMTAuMC4xJywgJz0nKTsgLy8gcmV0dXJuIHRydWVcbiAqIGNvbXBhcmUoJzEwLjEuMScsICcxMC4yLjInLCAnPCcpOyAvLyByZXR1cm4gdHJ1ZVxuICogY29tcGFyZSgnMTAuMS4xJywgJzEwLjIuMicsICc8PScpOyAvLyByZXR1cm4gdHJ1ZVxuICogY29tcGFyZSgnMTAuMS4xJywgJzEwLjIuMicsICc+PScpOyAvLyByZXR1cm4gZmFsc2VcbiAqIGBgYFxuICovXG5cbnZhciBjb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSh2MSwgdjIsIG9wZXJhdG9yKSB7XG4gIC8vIHZhbGlkYXRlIGlucHV0IG9wZXJhdG9yXG4gIGFzc2VydFZhbGlkT3BlcmF0b3Iob3BlcmF0b3IpOyAvLyBzaW5jZSByZXN1bHQgb2YgY29tcGFyZVZlcnNpb25zIGNhbiBvbmx5IGJlIC0xIG9yIDAgb3IgMVxuICAvLyBhIHNpbXBsZSBtYXAgY2FuIGJlIHVzZWQgdG8gcmVwbGFjZSBzd2l0Y2hcblxuICB2YXIgcmVzID0gY29tcGFyZVZlcnNpb25zKHYxLCB2Mik7XG4gIHJldHVybiBvcGVyYXRvclJlc01hcFtvcGVyYXRvcl0uaW5jbHVkZXMocmVzKTtcbn07XG4vKipcbiAqIE1hdGNoIFtucG0gc2VtdmVyXShodHRwczovL2RvY3MubnBtanMuY29tL2NsaS92Ni91c2luZy1ucG0vc2VtdmVyKSB2ZXJzaW9uIHJhbmdlLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIFZlcnNpb24gbnVtYmVyIHRvIG1hdGNoXG4gKiBAcGFyYW0gcmFuZ2UgUmFuZ2UgcGF0dGVybiBmb3IgdmVyc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gdGhlIHJhbmdlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBzYXRpc2ZpZXMoJzEuMS4wJywgJ14xLjAuMCcpOyAvLyByZXR1cm4gdHJ1ZVxuICogc2F0aXNmaWVzKCcxLjEuMCcsICd+MS4wLjAnKTsgLy8gcmV0dXJuIGZhbHNlXG4gKiBgYGBcbiAqL1xuXG52YXIgc2F0aXNmaWVzID0gZnVuY3Rpb24gc2F0aXNmaWVzKHZlcnNpb24sIHJhbmdlKSB7XG4gIC8vIGlmIG5vIHJhbmdlIG9wZXJhdG9yIHRoZW4gXCI9XCJcbiAgdmFyIG0gPSByYW5nZS5tYXRjaCgvXihbPD49fl5dKykvKTtcbiAgdmFyIG9wID0gbSA/IG1bMV0gOiAnPSc7IC8vIGlmIGd0L2x0L2VxIHRoZW4gb3BlcmF0b3IgY29tcGFyZVxuXG4gIGlmIChvcCAhPT0gJ14nICYmIG9wICE9PSAnficpIHJldHVybiBjb21wYXJlKHZlcnNpb24sIHJhbmdlLCBvcCk7IC8vIGVsc2UgcmFuZ2Ugb2YgZWl0aGVyIFwiflwiIG9yIFwiXlwiIGlzIGFzc3VtZWRcblxuICB2YXIgX3ZhbGlkYXRlQW5kUGFyc2UgPSB2YWxpZGF0ZUFuZFBhcnNlKHZlcnNpb24pLFxuICAgICAgX3ZhbGlkYXRlQW5kUGFyc2UyID0gX3NsaWNlZFRvQXJyYXkoX3ZhbGlkYXRlQW5kUGFyc2UsIDUpLFxuICAgICAgdjEgPSBfdmFsaWRhdGVBbmRQYXJzZTJbMF0sXG4gICAgICB2MiA9IF92YWxpZGF0ZUFuZFBhcnNlMlsxXSxcbiAgICAgIHYzID0gX3ZhbGlkYXRlQW5kUGFyc2UyWzJdLFxuICAgICAgdnAgPSBfdmFsaWRhdGVBbmRQYXJzZTJbNF07XG5cbiAgdmFyIF92YWxpZGF0ZUFuZFBhcnNlMyA9IHZhbGlkYXRlQW5kUGFyc2UocmFuZ2UpLFxuICAgICAgX3ZhbGlkYXRlQW5kUGFyc2U0ID0gX3NsaWNlZFRvQXJyYXkoX3ZhbGlkYXRlQW5kUGFyc2UzLCA1KSxcbiAgICAgIHIxID0gX3ZhbGlkYXRlQW5kUGFyc2U0WzBdLFxuICAgICAgcjIgPSBfdmFsaWRhdGVBbmRQYXJzZTRbMV0sXG4gICAgICByMyA9IF92YWxpZGF0ZUFuZFBhcnNlNFsyXSxcbiAgICAgIHJwID0gX3ZhbGlkYXRlQW5kUGFyc2U0WzRdO1xuXG4gIHZhciB2ID0gW3YxLCB2MiwgdjNdO1xuICB2YXIgciA9IFtyMSwgcjIgIT09IG51bGwgJiYgcjIgIT09IHZvaWQgMCA/IHIyIDogJ3gnLCByMyAhPT0gbnVsbCAmJiByMyAhPT0gdm9pZCAwID8gcjMgOiAneCddOyAvLyB2YWxpZGF0ZSBwcmUtcmVsZWFzZVxuXG4gIGlmIChycCkge1xuICAgIGlmICghdnApIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY29tcGFyZVNlZ21lbnRzKHYsIHIpICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNvbXBhcmVTZWdtZW50cyh2cC5zcGxpdCgnLicpLCBycC5zcGxpdCgnLicpKSA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgfSAvLyBmaXJzdCBub24temVybyBudW1iZXJcblxuXG4gIHZhciBub25aZXJvID0gci5maW5kSW5kZXgoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gdiAhPT0gJzAnO1xuICB9KSArIDE7IC8vIHBvaW50ZXIgdG8gd2hlcmUgc2VnbWVudHMgY2FuIGJlID49XG5cbiAgdmFyIGkgPSBvcCA9PT0gJ34nID8gMiA6IG5vblplcm8gPiAxID8gbm9uWmVybyA6IDE7IC8vIGJlZm9yZSBwb2ludGVyIG11c3QgYmUgZXF1YWxcblxuICBpZiAoY29tcGFyZVNlZ21lbnRzKHYuc2xpY2UoMCwgaSksIHIuc2xpY2UoMCwgaSkpICE9PSAwKSByZXR1cm4gZmFsc2U7IC8vIGFmdGVyIHBvaW50ZXIgbXVzdCBiZSA+PVxuXG4gIGlmIChjb21wYXJlU2VnbWVudHModi5zbGljZShpKSwgci5zbGljZShpKSkgPT09IC0xKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBzZW12ZXIgPSAvXlt2Xn48Pj1dKj8oXFxkKykoPzpcXC4oW3gqXXxcXGQrKSg/OlxcLihbeCpdfFxcZCspKD86XFwuKFt4Kl18XFxkKykpPyg/Oi0oW1xcZGEtelxcLV0rKD86XFwuW1xcZGEtelxcLV0rKSopKT8oPzpcXCtbXFxkYS16XFwtXSsoPzpcXC5bXFxkYS16XFwtXSspKik/KT8pPyQvaTtcblxudmFyIHZhbGlkYXRlQW5kUGFyc2UgPSBmdW5jdGlvbiB2YWxpZGF0ZUFuZFBhcnNlKHZlcnNpb24pIHtcbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgZXhwZWN0ZWQgc3RyaW5nJyk7XG4gIH1cblxuICB2YXIgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKHNlbXZlcik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgbm90IHZhbGlkIHNlbXZlciAoJ1wiLmNvbmNhdCh2ZXJzaW9uLCBcIicgcmVjZWl2ZWQpXCIpKTtcbiAgfVxuXG4gIG1hdGNoLnNoaWZ0KCk7XG4gIHJldHVybiBtYXRjaDtcbn07XG5cbnZhciBpc1dpbGRjYXJkID0gZnVuY3Rpb24gaXNXaWxkY2FyZChzKSB7XG4gIHJldHVybiBzID09PSAnKicgfHwgcyA9PT0gJ3gnIHx8IHMgPT09ICdYJztcbn07XG5cbnZhciB0cnlQYXJzZSA9IGZ1bmN0aW9uIHRyeVBhcnNlKHYpIHtcbiAgdmFyIG4gPSBwYXJzZUludCh2LCAxMCk7XG4gIHJldHVybiBpc05hTihuKSA/IHYgOiBuO1xufTtcblxudmFyIGZvcmNlVHlwZSA9IGZ1bmN0aW9uIGZvcmNlVHlwZShhLCBiKSB7XG4gIHJldHVybiBlc21fdHlwZW9mKGEpICE9PSBlc21fdHlwZW9mKGIpID8gW1N0cmluZyhhKSwgU3RyaW5nKGIpXSA6IFthLCBiXTtcbn07XG5cbnZhciBjb21wYXJlU3RyaW5ncyA9IGZ1bmN0aW9uIGNvbXBhcmVTdHJpbmdzKGEsIGIpIHtcbiAgaWYgKGlzV2lsZGNhcmQoYSkgfHwgaXNXaWxkY2FyZChiKSkgcmV0dXJuIDA7XG5cbiAgdmFyIF9mb3JjZVR5cGUgPSBmb3JjZVR5cGUodHJ5UGFyc2UoYSksIHRyeVBhcnNlKGIpKSxcbiAgICAgIF9mb3JjZVR5cGUyID0gX3NsaWNlZFRvQXJyYXkoX2ZvcmNlVHlwZSwgMiksXG4gICAgICBhcCA9IF9mb3JjZVR5cGUyWzBdLFxuICAgICAgYnAgPSBfZm9yY2VUeXBlMlsxXTtcblxuICBpZiAoYXAgPiBicCkgcmV0dXJuIDE7XG4gIGlmIChhcCA8IGJwKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufTtcblxudmFyIGNvbXBhcmVTZWdtZW50cyA9IGZ1bmN0aW9uIGNvbXBhcmVTZWdtZW50cyhhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTsgaSsrKSB7XG4gICAgdmFyIHIgPSBjb21wYXJlU3RyaW5ncyhhW2ldIHx8ICcwJywgYltpXSB8fCAnMCcpO1xuICAgIGlmIChyICE9PSAwKSByZXR1cm4gcjtcbiAgfVxuXG4gIHJldHVybiAwO1xufTtcblxudmFyIG9wZXJhdG9yUmVzTWFwID0ge1xuICAnPic6IFsxXSxcbiAgJz49JzogWzAsIDFdLFxuICAnPSc6IFswXSxcbiAgJzw9JzogWy0xLCAwXSxcbiAgJzwnOiBbLTFdXG59O1xudmFyIGFsbG93ZWRPcGVyYXRvcnMgPSBPYmplY3Qua2V5cyhvcGVyYXRvclJlc01hcCk7XG5cbnZhciBhc3NlcnRWYWxpZE9wZXJhdG9yID0gZnVuY3Rpb24gYXNzZXJ0VmFsaWRPcGVyYXRvcihvcCkge1xuICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIG9wZXJhdG9yIHR5cGUsIGV4cGVjdGVkIHN0cmluZyBidXQgZ290IFwiLmNvbmNhdChlc21fdHlwZW9mKG9wKSkpO1xuICB9XG5cbiAgaWYgKGFsbG93ZWRPcGVyYXRvcnMuaW5kZXhPZihvcCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvcGVyYXRvciwgZXhwZWN0ZWQgb25lIG9mIFwiLmNvbmNhdChhbGxvd2VkT3BlcmF0b3JzLmpvaW4oJ3wnKSkpO1xuICB9XG59O1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuLi8uLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2luZGV4LmpzXG52YXIgbHJ1X2NhY2hlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MzApO1xudmFyIGxydV9jYWNoZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihscnVfY2FjaGUpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuLi8uLi9idWlsZC9vc3MtZXhwZXJpbWVudGFsL3JlYWN0LWlzL2luZGV4LmpzXG52YXIgcmVhY3RfaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MCk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vc2hhcmVkL1JlYWN0U3ltYm9scy5qc1xuZnVuY3Rpb24gUmVhY3RTeW1ib2xzX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgUmVhY3RTeW1ib2xzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBSZWFjdFN5bWJvbHNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFJlYWN0U3ltYm9sc190eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zZXJ2ZXJfY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIFJFQUNUX1RSQUNJTkdfTUFSS0VSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC50cmFjaW5nX21hcmtlcicpO1xudmFyIFJFQUNUX1NFUlZFUl9DT05URVhUX0RFRkFVTFRfVkFMVUVfTk9UX0xPQURFRCA9IFN5bWJvbC5mb3IoJ3JlYWN0LmRlZmF1bHRfdmFsdWUnKTtcbnZhciBSRUFDVF9NRU1PX0NBQ0hFX1NFTlRJTkVMID0gU3ltYm9sLmZvcigncmVhY3QubWVtb19jYWNoZV9zZW50aW5lbCcpO1xudmFyIFJFQUNUX1BPU1RQT05FX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3N0cG9uZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCBSZWFjdFN5bWJvbHNfdHlwZW9mKG1heWJlSXRlcmFibGUpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9mcm9udGVuZC90eXBlcy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbi8qKlxuICogV0FSTklORzpcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0eXBlcyB0aGF0IGFyZSBkZXNpZ25lZCBmb3IgUmVhY3QgRGV2VG9vbHMgVUkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYmFja2VuZC5cbiAqIFRoZXkgbWlnaHQgYmUgdXNlZCBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgRGV2VG9vbHMgYmFja2VuZHMuXG4gKiBCZSBtaW5kZnVsIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdoZW4gbWFraW5nIGNoYW5nZXMuXG4gKi9cbi8vIFdBUk5JTkdcbi8vIFRoZSB2YWx1ZXMgYmVsb3cgYXJlIHJlZmVyZW5jZWQgYnkgQ29tcG9uZW50RmlsdGVycyAod2hpY2ggYXJlIHNhdmVkIHZpYSBsb2NhbFN0b3JhZ2UpLlxuLy8gRG8gbm90IGNoYW5nZSB0aGVtIG9yIGl0IHdpbGwgYnJlYWsgcHJldmlvdXNseSBzYXZlZCB1c2VyIGN1c3RvbWl6YXRpb25zLlxuLy8gSWYgbmV3IGVsZW1lbnQgdHlwZXMgYXJlIGFkZGVkLCB1c2UgbmV3IG51bWJlcnMgcmF0aGVyIHRoYW4gcmUtb3JkZXJpbmcgZXhpc3Rpbmcgb25lcy5cbi8vXG4vLyBDaGFuZ2luZyB0aGVzZSB0eXBlcyBpcyBhbHNvIGEgYmFja3dhcmRzIGJyZWFraW5nIGNoYW5nZSBmb3IgdGhlIHN0YW5kYWxvbmUgc2hlbGwsXG4vLyBzaW5jZSB0aGUgZnJvbnRlbmQgYW5kIGJhY2tlbmQgbXVzdCBzaGFyZSB0aGUgc2FtZSB2YWx1ZXMtXG4vLyBhbmQgdGhlIGJhY2tlbmQgaXMgZW1iZWRkZWQgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMgKGxpa2UgUmVhY3QgTmF0aXZlKS5cbnZhciB0eXBlc19FbGVtZW50VHlwZUNsYXNzID0gMTtcbnZhciBFbGVtZW50VHlwZUNvbnRleHQgPSAyO1xudmFyIHR5cGVzX0VsZW1lbnRUeXBlRnVuY3Rpb24gPSA1O1xudmFyIHR5cGVzX0VsZW1lbnRUeXBlRm9yd2FyZFJlZiA9IDY7XG52YXIgRWxlbWVudFR5cGVIb3N0Q29tcG9uZW50ID0gNztcbnZhciB0eXBlc19FbGVtZW50VHlwZU1lbW8gPSA4O1xudmFyIEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24gPSA5O1xudmFyIEVsZW1lbnRUeXBlUHJvZmlsZXIgPSAxMDtcbnZhciBFbGVtZW50VHlwZVJvb3QgPSAxMTtcbnZhciBFbGVtZW50VHlwZVN1c3BlbnNlID0gMTI7XG52YXIgRWxlbWVudFR5cGVTdXNwZW5zZUxpc3QgPSAxMztcbnZhciBFbGVtZW50VHlwZVRyYWNpbmdNYXJrZXIgPSAxNDsgLy8gRGlmZmVyZW50IHR5cGVzIG9mIGVsZW1lbnRzIGRpc3BsYXllZCBpbiB0aGUgRWxlbWVudHMgdHJlZS5cbi8vIFRoZXNlIHR5cGVzIG1heSBiZSB1c2VkIHRvIHZpc3VhbGx5IGRpc3Rpbmd1aXNoIHR5cGVzLFxuLy8gb3IgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBmdW5jdGlvbmFsaXR5LlxuXG4vLyBXQVJOSU5HXG4vLyBUaGUgdmFsdWVzIGJlbG93IGFyZSByZWZlcmVuY2VkIGJ5IENvbXBvbmVudEZpbHRlcnMgKHdoaWNoIGFyZSBzYXZlZCB2aWEgbG9jYWxTdG9yYWdlKS5cbi8vIERvIG5vdCBjaGFuZ2UgdGhlbSBvciBpdCB3aWxsIGJyZWFrIHByZXZpb3VzbHkgc2F2ZWQgdXNlciBjdXN0b21pemF0aW9ucy5cbi8vIElmIG5ldyBmaWx0ZXIgdHlwZXMgYXJlIGFkZGVkLCB1c2UgbmV3IG51bWJlcnMgcmF0aGVyIHRoYW4gcmUtb3JkZXJpbmcgZXhpc3Rpbmcgb25lcy5cbnZhciBDb21wb25lbnRGaWx0ZXJFbGVtZW50VHlwZSA9IDE7XG52YXIgQ29tcG9uZW50RmlsdGVyRGlzcGxheU5hbWUgPSAyO1xudmFyIENvbXBvbmVudEZpbHRlckxvY2F0aW9uID0gMztcbnZhciBDb21wb25lbnRGaWx0ZXJIT0MgPSA0O1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBFYWNoIGVsZW1lbnQgb24gdGhlIGZyb250ZW5kIGNvcnJlc3BvbmRzIHRvIGEgRmliZXIgb24gdGhlIGJhY2tlbmQuXG4vLyBTb21lIG9mIGl0cyBpbmZvcm1hdGlvbiAoZS5nLiBpZCwgdHlwZSwgZGlzcGxheU5hbWUpIGNvbWUgZnJvbSB0aGUgYmFja2VuZC5cbi8vIE90aGVyIGJpdHMgKGUuZy4gd2VpZ2h0IGFuZCBkZXB0aCkgYXJlIGNvbXB1dGVkIG9uIHRoZSBmcm9udGVuZCBmb3Igd2luZG93aW5nIGFuZCBkaXNwbGF5IHB1cnBvc2VzLlxuLy8gRWxlbWVudHMgYXJlIHVwZGF0ZWQgb24gYSBwdXNoIGJhc2lz4oCTIG1lYW5pbmcgdGhlIGJhY2tlbmQgcHVzaGVzIHVwZGF0ZXMgdG8gdGhlIGZyb250ZW5kIHdoZW4gbmVlZGVkLlxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvaXNBcnJheS5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHNyY19pc0FycmF5ID0gKGlzQXJyYXkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvdXRpbHMuanNcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5mdW5jdGlvbiB1dGlsc190eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IHV0aWxzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyB1dGlsc190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gdXRpbHNfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHV0aWxzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiB1dGlsc191bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHV0aWxzX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiB1dGlsc19hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIHV0aWxzX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiB1dGlsc19hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cblxuXG5cblxuXG5cbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbnZhciB1dGlsc19oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgY2FjaGVkRGlzcGxheU5hbWVzID0gbmV3IFdlYWtNYXAoKTsgLy8gT24gbGFyZ2UgdHJlZXMsIGVuY29kaW5nIHRha2VzIHNpZ25pZmljYW50IHRpbWUuXG4vLyBUcnkgdG8gcmV1c2UgdGhlIGFscmVhZHkgZW5jb2RlZCBzdHJpbmdzLlxuXG52YXIgZW5jb2RlZFN0cmluZ0NhY2hlID0gbmV3IChscnVfY2FjaGVfZGVmYXVsdCgpKSh7XG4gIG1heDogMTAwMFxufSk7XG5mdW5jdGlvbiBhbHBoYVNvcnRLZXlzKGEsIGIpIHtcbiAgaWYgKGEudG9TdHJpbmcoKSA+IGIudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKGIudG9TdHJpbmcoKSA+IGEudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0QWxsRW51bWVyYWJsZUtleXMob2JqKSB7XG4gIHZhciBrZXlzID0gbmV3IFNldCgpO1xuICB2YXIgY3VycmVudCA9IG9iajtcblxuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICB2YXIgY3VycmVudEtleXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKGN1cnJlbnQpKSwgX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoY3VycmVudCkpKTtcbiAgICB2YXIgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjdXJyZW50KTtcbiAgICBjdXJyZW50S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBrZXkgY2FuIGJlIGEgU3ltYm9sIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICAgIGlmIChkZXNjcmlwdG9yc1trZXldLmVudW1lcmFibGUpIHtcbiAgICAgICAga2V5cy5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjdXJyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnQpO1xuICB9O1xuXG4gIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHtcbiAgICBfbG9vcCgpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIE1pcnJvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi83YzIxYmY3MmFjZTc3MDk0ZmQxOTEwY2MzNTBhNTQ4Mjg3ZWY4MzUwL3BhY2thZ2VzL3NoYXJlZC9nZXRDb21wb25lbnROYW1lLmpzI0wyNy1MMzdcblxuZnVuY3Rpb24gZ2V0V3JhcHBlZERpc3BsYXlOYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSwgZmFsbGJhY2tOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcbiAgcmV0dXJuIGRpc3BsYXlOYW1lIHx8IFwiXCIuY29uY2F0KHdyYXBwZXJOYW1lLCBcIihcIikuY29uY2F0KGdldERpc3BsYXlOYW1lKGlubmVyVHlwZSwgZmFsbGJhY2tOYW1lKSwgXCIpXCIpO1xufVxuZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUodHlwZSkge1xuICB2YXIgZmFsbGJhY2tOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnQW5vbnltb3VzJztcbiAgdmFyIG5hbWVGcm9tQ2FjaGUgPSBjYWNoZWREaXNwbGF5TmFtZXMuZ2V0KHR5cGUpO1xuXG4gIGlmIChuYW1lRnJvbUNhY2hlICE9IG51bGwpIHtcbiAgICByZXR1cm4gbmFtZUZyb21DYWNoZTtcbiAgfVxuXG4gIHZhciBkaXNwbGF5TmFtZSA9IGZhbGxiYWNrTmFtZTsgLy8gVGhlIGRpc3BsYXlOYW1lIHByb3BlcnR5IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGEgc3RyaW5nLlxuICAvLyBJdCdzIG9ubHkgc2FmZSB0byB1c2UgZm9yIG91ciBwdXJwb3NlcyBpZiBpdCdzIGEgc3RyaW5nLlxuICAvLyBnaXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LWRldnRvb2xzL2lzc3Vlcy84MDNcblxuICBpZiAodHlwZW9mIHR5cGUuZGlzcGxheU5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlLm5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGUubmFtZSAhPT0gJycpIHtcbiAgICBkaXNwbGF5TmFtZSA9IHR5cGUubmFtZTtcbiAgfVxuXG4gIGNhY2hlZERpc3BsYXlOYW1lcy5zZXQodHlwZSwgZGlzcGxheU5hbWUpO1xuICByZXR1cm4gZGlzcGxheU5hbWU7XG59XG52YXIgdWlkQ291bnRlciA9IDA7XG5mdW5jdGlvbiBnZXRVSUQoKSB7XG4gIHJldHVybiArK3VpZENvdW50ZXI7XG59XG5mdW5jdGlvbiB1dGZEZWNvZGVTdHJpbmcoYXJyYXkpIHtcbiAgLy8gQXZvaWQgc3ByZWFkaW5nIHRoZSBhcnJheSAoZS5nLiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5hcnJheSkpXG4gIC8vIEZ1bmN0aW9ucyBhcmd1bWVudHMgYXJlIGZpcnN0IHBsYWNlZCBvbiB0aGUgc3RhY2sgYmVmb3JlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgLy8gd2hpY2ggdGhyb3dzIGEgUmFuZ2VFcnJvciBmb3IgbGFyZ2UgYXJyYXlzLlxuICAvLyBTZWUgZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjIyOTNcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhciA9IGFycmF5W2ldO1xuICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjaGFyKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludChjaGFyQ29kZTEsIGNoYXJDb2RlMikge1xuICByZXR1cm4gKChjaGFyQ29kZTEgJiAweDNmZikgPDwgMTApICsgKGNoYXJDb2RlMiAmIDB4M2ZmKSArIDB4MTAwMDA7XG59IC8vIENyZWRpdCBmb3IgdGhpcyBlbmNvZGluZyBhcHByb2FjaCBnb2VzIHRvIFRpbSBEb3duOlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDg3NzMyNi9ob3ctY2FuLWktdGVsbC1pZi1hLXN0cmluZy1jb250YWlucy1tdWx0aWJ5dGUtY2hhcmFjdGVycy1pbi1qYXZhc2NyaXB0XG5cblxuZnVuY3Rpb24gdXRmRW5jb2RlU3RyaW5nKHN0cmluZykge1xuICB2YXIgY2FjaGVkID0gZW5jb2RlZFN0cmluZ0NhY2hlLmdldChzdHJpbmcpO1xuXG4gIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICB2YXIgZW5jb2RlZCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjaGFyQ29kZTtcblxuICB3aGlsZSAoaSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBjaGFyQ29kZSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOyAvLyBIYW5kbGUgbXVsdGlieXRlIHVuaWNvZGUgY2hhcmFjdGVycyAobGlrZSBlbW9qaSkuXG5cbiAgICBpZiAoKGNoYXJDb2RlICYgMHhmODAwKSA9PT0gMHhkODAwKSB7XG4gICAgICBlbmNvZGVkLnB1c2goc3Vycm9nYXRlUGFpclRvQ29kZVBvaW50KGNoYXJDb2RlLCBzdHJpbmcuY2hhckNvZGVBdCgrK2kpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZWQucHVzaChjaGFyQ29kZSk7XG4gICAgfVxuXG4gICAgKytpO1xuICB9XG5cbiAgZW5jb2RlZFN0cmluZ0NhY2hlLnNldChzdHJpbmcsIGVuY29kZWQpO1xuICByZXR1cm4gZW5jb2RlZDtcbn1cbmZ1bmN0aW9uIHByaW50T3BlcmF0aW9uc0FycmF5KG9wZXJhdGlvbnMpIHtcbiAgLy8gVGhlIGZpcnN0IHR3byB2YWx1ZXMgYXJlIGFsd2F5cyByZW5kZXJlcklEIGFuZCByb290SURcbiAgdmFyIHJlbmRlcmVySUQgPSBvcGVyYXRpb25zWzBdO1xuICB2YXIgcm9vdElEID0gb3BlcmF0aW9uc1sxXTtcbiAgdmFyIGxvZ3MgPSBbXCJvcGVyYXRpb25zIGZvciByZW5kZXJlcjpcIi5jb25jYXQocmVuZGVyZXJJRCwgXCIgYW5kIHJvb3Q6XCIpLmNvbmNhdChyb290SUQpXTtcbiAgdmFyIGkgPSAyOyAvLyBSZWFzc2VtYmxlIHRoZSBzdHJpbmcgdGFibGUuXG5cbiAgdmFyIHN0cmluZ1RhYmxlID0gW251bGwgLy8gSUQgPSAwIGNvcnJlc3BvbmRzIHRvIHRoZSBudWxsIHN0cmluZy5cbiAgXTtcbiAgdmFyIHN0cmluZ1RhYmxlU2l6ZSA9IG9wZXJhdGlvbnNbaSsrXTtcbiAgdmFyIHN0cmluZ1RhYmxlRW5kID0gaSArIHN0cmluZ1RhYmxlU2l6ZTtcblxuICB3aGlsZSAoaSA8IHN0cmluZ1RhYmxlRW5kKSB7XG4gICAgdmFyIG5leHRMZW5ndGggPSBvcGVyYXRpb25zW2krK107XG4gICAgdmFyIG5leHRTdHJpbmcgPSB1dGZEZWNvZGVTdHJpbmcob3BlcmF0aW9ucy5zbGljZShpLCBpICsgbmV4dExlbmd0aCkpO1xuICAgIHN0cmluZ1RhYmxlLnB1c2gobmV4dFN0cmluZyk7XG4gICAgaSArPSBuZXh0TGVuZ3RoO1xuICB9XG5cbiAgd2hpbGUgKGkgPCBvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgIHZhciBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2ldO1xuXG4gICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fQUREOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9pZCA9IG9wZXJhdGlvbnNbaSArIDFdO1xuICAgICAgICAgIHZhciB0eXBlID0gb3BlcmF0aW9uc1tpICsgMl07XG4gICAgICAgICAgaSArPSAzO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlUm9vdCkge1xuICAgICAgICAgICAgbG9ncy5wdXNoKFwiQWRkIG5ldyByb290IG5vZGUgXCIuY29uY2F0KF9pZCkpO1xuICAgICAgICAgICAgaSsrOyAvLyBpc1N0cmljdE1vZGVDb21wbGlhbnRcblxuICAgICAgICAgICAgaSsrOyAvLyBzdXBwb3J0c1Byb2ZpbGluZ1xuXG4gICAgICAgICAgICBpKys7IC8vIHN1cHBvcnRzU3RyaWN0TW9kZVxuXG4gICAgICAgICAgICBpKys7IC8vIGhhc093bmVyTWV0YWRhdGFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHBhcmVudElEID0gb3BlcmF0aW9uc1tpXTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGkrKzsgLy8gb3duZXJJRFxuXG4gICAgICAgICAgICB2YXIgZGlzcGxheU5hbWVTdHJpbmdJRCA9IG9wZXJhdGlvbnNbaV07XG4gICAgICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBzdHJpbmdUYWJsZVtkaXNwbGF5TmFtZVN0cmluZ0lEXTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGkrKzsgLy8ga2V5XG5cbiAgICAgICAgICAgIGxvZ3MucHVzaChcIkFkZCBub2RlIFwiLmNvbmNhdChfaWQsIFwiIChcIikuY29uY2F0KGRpc3BsYXlOYW1lIHx8ICdudWxsJywgXCIpIGFzIGNoaWxkIG9mIFwiKS5jb25jYXQocGFyZW50SUQpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFRSRUVfT1BFUkFUSU9OX1JFTU9WRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciByZW1vdmVMZW5ndGggPSBvcGVyYXRpb25zW2kgKyAxXTtcbiAgICAgICAgICBpICs9IDI7XG5cbiAgICAgICAgICBmb3IgKHZhciByZW1vdmVJbmRleCA9IDA7IHJlbW92ZUluZGV4IDwgcmVtb3ZlTGVuZ3RoOyByZW1vdmVJbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgX2lkMiA9IG9wZXJhdGlvbnNbaV07XG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICBsb2dzLnB1c2goXCJSZW1vdmUgbm9kZSBcIi5jb25jYXQoX2lkMikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fUkVNT1ZFX1JPT1Q6XG4gICAgICAgIHtcbiAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgbG9ncy5wdXNoKFwiUmVtb3ZlIHJvb3QgXCIuY29uY2F0KHJvb3RJRCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fU0VUX1NVQlRSRUVfTU9ERTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfaWQzID0gb3BlcmF0aW9uc1tpICsgMV07XG4gICAgICAgICAgdmFyIG1vZGUgPSBvcGVyYXRpb25zW2kgKyAxXTtcbiAgICAgICAgICBpICs9IDM7XG4gICAgICAgICAgbG9ncy5wdXNoKFwiTW9kZSBcIi5jb25jYXQobW9kZSwgXCIgc2V0IGZvciBzdWJ0cmVlIHdpdGggcm9vdCBcIikuY29uY2F0KF9pZDMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFRSRUVfT1BFUkFUSU9OX1JFT1JERVJfQ0hJTERSRU46XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2lkNCA9IG9wZXJhdGlvbnNbaSArIDFdO1xuICAgICAgICAgIHZhciBudW1DaGlsZHJlbiA9IG9wZXJhdGlvbnNbaSArIDJdO1xuICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBvcGVyYXRpb25zLnNsaWNlKGksIGkgKyBudW1DaGlsZHJlbik7XG4gICAgICAgICAgaSArPSBudW1DaGlsZHJlbjtcbiAgICAgICAgICBsb2dzLnB1c2goXCJSZS1vcmRlciBub2RlIFwiLmNvbmNhdChfaWQ0LCBcIiBjaGlsZHJlbiBcIikuY29uY2F0KGNoaWxkcmVuLmpvaW4oJywnKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fVVBEQVRFX1RSRUVfQkFTRV9EVVJBVElPTjpcbiAgICAgICAgLy8gQmFzZSBkdXJhdGlvbiB1cGRhdGVzIGFyZSBvbmx5IHNlbnQgd2hpbGUgcHJvZmlsaW5nIGlzIGluIHByb2dyZXNzLlxuICAgICAgICAvLyBXZSBjYW4gaWdub3JlIHRoZW0gYXQgdGhpcyBwb2ludC5cbiAgICAgICAgLy8gVGhlIHByb2ZpbGVyIFVJIHVzZXMgdGhlbSBsYXppbHkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRyZWUuXG4gICAgICAgIGkgKz0gMztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fVVBEQVRFX0VSUk9SU19PUl9XQVJOSU5HUzpcbiAgICAgICAgdmFyIGlkID0gb3BlcmF0aW9uc1tpICsgMV07XG4gICAgICAgIHZhciBudW1FcnJvcnMgPSBvcGVyYXRpb25zW2kgKyAyXTtcbiAgICAgICAgdmFyIG51bVdhcm5pbmdzID0gb3BlcmF0aW9uc1tpICsgM107XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgbG9ncy5wdXNoKFwiTm9kZSBcIi5jb25jYXQoaWQsIFwiIGhhcyBcIikuY29uY2F0KG51bUVycm9ycywgXCIgZXJyb3JzIGFuZCBcIikuY29uY2F0KG51bVdhcm5pbmdzLCBcIiB3YXJuaW5nc1wiKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcIlVuc3VwcG9ydGVkIEJyaWRnZSBvcGVyYXRpb24gXFxcIlwiLmNvbmNhdChvcGVyYXRpb24sIFwiXFxcIlwiKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2cobG9ncy5qb2luKCdcXG4gICcpKTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRDb21wb25lbnRGaWx0ZXJzKCkge1xuICByZXR1cm4gW3tcbiAgICB0eXBlOiBDb21wb25lbnRGaWx0ZXJFbGVtZW50VHlwZSxcbiAgICB2YWx1ZTogRWxlbWVudFR5cGVIb3N0Q29tcG9uZW50LFxuICAgIGlzRW5hYmxlZDogdHJ1ZVxuICB9XTtcbn1cbmZ1bmN0aW9uIGdldFNhdmVkQ29tcG9uZW50RmlsdGVycygpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlR2V0SXRlbShMT0NBTF9TVE9SQUdFX0NPTVBPTkVOVF9GSUxURVJfUFJFRkVSRU5DRVNfS0VZKTtcblxuICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gIHJldHVybiBnZXREZWZhdWx0Q29tcG9uZW50RmlsdGVycygpO1xufVxuZnVuY3Rpb24gc2V0U2F2ZWRDb21wb25lbnRGaWx0ZXJzKGNvbXBvbmVudEZpbHRlcnMpIHtcbiAgbG9jYWxTdG9yYWdlU2V0SXRlbShMT0NBTF9TVE9SQUdFX0NPTVBPTkVOVF9GSUxURVJfUFJFRkVSRU5DRVNfS0VZLCBKU09OLnN0cmluZ2lmeShjb21wb25lbnRGaWx0ZXJzKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbChzKSB7XG4gIGlmIChzID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhc3RCb29sKHYpIHtcbiAgaWYgKHYgPT09IHRydWUgfHwgdiA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxufVxuZnVuY3Rpb24gY2FzdEJyb3dzZXJUaGVtZSh2KSB7XG4gIGlmICh2ID09PSAnbGlnaHQnIHx8IHYgPT09ICdkYXJrJyB8fCB2ID09PSAnYXV0bycpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0QXBwZW5kQ29tcG9uZW50U3RhY2soKSB7XG4gIHZhciBfcGFyc2VCb29sO1xuXG4gIHZhciByYXcgPSBsb2NhbFN0b3JhZ2VHZXRJdGVtKExPQ0FMX1NUT1JBR0VfU0hPVUxEX0FQUEVORF9DT01QT05FTlRfU1RBQ0tfS0VZKTtcbiAgcmV0dXJuIChfcGFyc2VCb29sID0gcGFyc2VCb29sKHJhdykpICE9PSBudWxsICYmIF9wYXJzZUJvb2wgIT09IHZvaWQgMCA/IF9wYXJzZUJvb2wgOiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0QnJlYWtPbkNvbnNvbGVFcnJvcnMoKSB7XG4gIHZhciBfcGFyc2VCb29sMjtcblxuICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlR2V0SXRlbShMT0NBTF9TVE9SQUdFX1NIT1VMRF9CUkVBS19PTl9DT05TT0xFX0VSUk9SUyk7XG4gIHJldHVybiAoX3BhcnNlQm9vbDIgPSBwYXJzZUJvb2wocmF3KSkgIT09IG51bGwgJiYgX3BhcnNlQm9vbDIgIT09IHZvaWQgMCA/IF9wYXJzZUJvb2wyIDogZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRIaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUoKSB7XG4gIHZhciBfcGFyc2VCb29sMztcblxuICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlR2V0SXRlbShMT0NBTF9TVE9SQUdFX0hJREVfQ09OU09MRV9MT0dTX0lOX1NUUklDVF9NT0RFKTtcbiAgcmV0dXJuIChfcGFyc2VCb29sMyA9IHBhcnNlQm9vbChyYXcpKSAhPT0gbnVsbCAmJiBfcGFyc2VCb29sMyAhPT0gdm9pZCAwID8gX3BhcnNlQm9vbDMgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycygpIHtcbiAgdmFyIF9wYXJzZUJvb2w0O1xuXG4gIHZhciByYXcgPSBsb2NhbFN0b3JhZ2VHZXRJdGVtKExPQ0FMX1NUT1JBR0VfU0hPV19JTkxJTkVfV0FSTklOR1NfQU5EX0VSUk9SU19LRVkpO1xuICByZXR1cm4gKF9wYXJzZUJvb2w0ID0gcGFyc2VCb29sKHJhdykpICE9PSBudWxsICYmIF9wYXJzZUJvb2w0ICE9PSB2b2lkIDAgPyBfcGFyc2VCb29sNCA6IHRydWU7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0T3BlbkluRWRpdG9yVVJMKCkge1xuICByZXR1cm4gdHlwZW9mIHByb2Nlc3MuZW52LkVESVRPUl9VUkwgPT09ICdzdHJpbmcnID8gcHJvY2Vzcy5lbnYuRURJVE9SX1VSTCA6ICcnO1xufVxuZnVuY3Rpb24gZ2V0T3BlbkluRWRpdG9yVVJMKCkge1xuICB0cnkge1xuICAgIHZhciByYXcgPSBsb2NhbFN0b3JhZ2VHZXRJdGVtKExPQ0FMX1NUT1JBR0VfT1BFTl9JTl9FRElUT1JfVVJMKTtcblxuICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gIHJldHVybiBnZXREZWZhdWx0T3BlbkluRWRpdG9yVVJMKCk7XG59XG5mdW5jdGlvbiBzZXBhcmF0ZURpc3BsYXlOYW1lQW5kSE9DcyhkaXNwbGF5TmFtZSwgdHlwZSkge1xuICBpZiAoZGlzcGxheU5hbWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICB9XG5cbiAgdmFyIGhvY0Rpc3BsYXlOYW1lcyA9IG51bGw7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBFbGVtZW50VHlwZUNsYXNzOlxuICAgIGNhc2UgRWxlbWVudFR5cGVGb3J3YXJkUmVmOlxuICAgIGNhc2UgRWxlbWVudFR5cGVGdW5jdGlvbjpcbiAgICBjYXNlIEVsZW1lbnRUeXBlTWVtbzpcbiAgICAgIGlmIChkaXNwbGF5TmFtZS5pbmRleE9mKCcoJykgPj0gMCkge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IGRpc3BsYXlOYW1lLm1hdGNoKC9bXigpXSsvZyk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gbWF0Y2hlcy5wb3AoKTtcbiAgICAgICAgICBob2NEaXNwbGF5TmFtZXMgPSBtYXRjaGVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIFtkaXNwbGF5TmFtZSwgaG9jRGlzcGxheU5hbWVzXTtcbn0gLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5cbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB1dGlsc19nZXRJbk9iamVjdChvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChyZWR1Y2VkLCBhdHRyKSB7XG4gICAgaWYgKHJlZHVjZWQpIHtcbiAgICAgIGlmICh1dGlsc19oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZHVjZWQsIGF0dHIpKSB7XG4gICAgICAgIHJldHVybiByZWR1Y2VkW2F0dHJdO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlZHVjZWRbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBDb252ZXJ0IGl0ZXJhYmxlIHRvIGFycmF5IGFuZCByZXR1cm4gYXJyYXlbaW5kZXhdXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRSSUNLWVxuICAgICAgICAvLyBEb24ndCB1c2UgWy4uLnNwcmVhZF0gc3ludGF4IGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIC8vIFRoaXMgcHJvamVjdCB1c2VzIEBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXNwcmVhZCBpbiBcImxvb3NlXCIgbW9kZSB3aGljaCBvbmx5IHdvcmtzIHdpdGggQXJyYXkgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlciB0eXBlcyAoZS5nLiB0eXBlZCBhcnJheXMsIFNldHMpIHdpbGwgbm90IHNwcmVhZCBjb3JyZWN0bHkuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHJlZHVjZWQpW2F0dHJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LCBvYmplY3QpO1xufVxuZnVuY3Rpb24gZGVsZXRlUGF0aEluT2JqZWN0KG9iamVjdCwgcGF0aCkge1xuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gIHZhciBsYXN0ID0gcGF0aFtsZW5ndGggLSAxXTtcblxuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICB2YXIgcGFyZW50ID0gdXRpbHNfZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLnNsaWNlKDAsIGxlbmd0aCAtIDEpKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGlmIChzcmNfaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudC5zcGxpY2UobGFzdCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcGFyZW50W2xhc3RdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVuYW1lUGF0aEluT2JqZWN0KG9iamVjdCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICB2YXIgbGVuZ3RoID0gb2xkUGF0aC5sZW5ndGg7XG5cbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgdmFyIHBhcmVudCA9IHV0aWxzX2dldEluT2JqZWN0KG9iamVjdCwgb2xkUGF0aC5zbGljZSgwLCBsZW5ndGggLSAxKSk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB2YXIgbGFzdE9sZCA9IG9sZFBhdGhbbGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbGFzdE5ldyA9IG5ld1BhdGhbbGVuZ3RoIC0gMV07XG4gICAgICBwYXJlbnRbbGFzdE5ld10gPSBwYXJlbnRbbGFzdE9sZF07XG5cbiAgICAgIGlmIChzcmNfaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudC5zcGxpY2UobGFzdE9sZCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcGFyZW50W2xhc3RPbGRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdXRpbHNfc2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gIHZhciBsYXN0ID0gcGF0aFtsZW5ndGggLSAxXTtcblxuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICB2YXIgcGFyZW50ID0gdXRpbHNfZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLnNsaWNlKDAsIGxlbmd0aCAtIDEpKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudFtsYXN0XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCBhIGVuaGFuY2VkL2FydGlmaWNpYWwgdHlwZSBzdHJpbmcgYmFzZWQgb24gdGhlIG9iamVjdCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBnZXREYXRhVHlwZShkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfSBlbHNlIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAoKDAscmVhY3RfaXMuaXNFbGVtZW50KShkYXRhKSkge1xuICAgIHJldHVybiAncmVhY3RfZWxlbWVudCc7XG4gIH1cblxuICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gJ2h0bWxfZWxlbWVudCc7XG4gIH1cblxuICB2YXIgdHlwZSA9IHV0aWxzX3R5cGVvZihkYXRhKTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgcmV0dXJuICdiaWdpbnQnO1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuICdmdW5jdGlvbic7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKE51bWJlci5pc05hTihkYXRhKSkge1xuICAgICAgICByZXR1cm4gJ25hbic7XG4gICAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICdpbmZpbml0eSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaWYgKHNyY19pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzX2hhc093blByb3BlcnR5LmNhbGwoZGF0YS5jb25zdHJ1Y3RvciwgJ0JZVEVTX1BFUl9FTEVNRU5UJykgPyAndHlwZWRfYXJyYXknIDogJ2RhdGFfdmlldyc7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuY29uc3RydWN0b3IgJiYgZGF0YS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInKSB7XG4gICAgICAgIC8vIEhBQ0sgVGhpcyBBcnJheUJ1ZmZlciBjaGVjayBpcyBncm9zczsgaXMgdGhlcmUgYSBiZXR0ZXIgd2F5P1xuICAgICAgICAvLyBXZSBjb3VsZCB0cnkgdG8gY3JlYXRlIGEgbmV3IERhdGFWaWV3IHdpdGggdGhlIHZhbHVlLlxuICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGVycm9yLCB3ZSBrbm93IGl0J3MgYW4gQXJyYXlCdWZmZXIsXG4gICAgICAgIC8vIGJ1dCB0aGlzIHNlZW1zIGtpbmQgb2YgYXdrd2FyZCBhbmQgZXhwZW5zaXZlLlxuICAgICAgICByZXR1cm4gJ2FycmF5X2J1ZmZlcic7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gZGF0YVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5cbiAgICAgICAgaWYgKCFpdGVyYXRvcikgey8vIFByb3hpZXMgbWlnaHQgYnJlYWsgYXNzdW1wdG9pbnMgYWJvdXQgaXRlcmF0b3JzLlxuICAgICAgICAgIC8vIFNlZSBnaXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMTY1NFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBpdGVyYXRvciA9PT0gZGF0YSA/ICdvcGFxdWVfaXRlcmF0b3InIDogJ2l0ZXJhdG9yJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhLmNvbnN0cnVjdG9yICYmIGRhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcpIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICB2YXIgdG9TdHJpbmdWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKTtcblxuICAgICAgICBpZiAodG9TdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZ1ZhbHVlID09PSAnW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0nKSB7XG4gICAgICAgICAgcmV0dXJuICdodG1sX2FsbF9jb2xsZWN0aW9uJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICdjbGFzc19pbnN0YW5jZSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuXG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIGlmICggLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSAnW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0nKSB7XG4gICAgICAgIHJldHVybiAnaHRtbF9hbGxfY29sbGVjdGlvbic7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAndW5kZWZpbmVkJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG59XG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZUZvclJlYWN0RWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBlbGVtZW50VHlwZSA9ICgwLHJlYWN0X2lzLnR5cGVPZikoZWxlbWVudCk7XG5cbiAgc3dpdGNoIChlbGVtZW50VHlwZSkge1xuICAgIGNhc2UgcmVhY3RfaXMuQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuICdDb250ZXh0Q29uc3VtZXInO1xuXG4gICAgY2FzZSByZWFjdF9pcy5Db250ZXh0UHJvdmlkZXI6XG4gICAgICByZXR1cm4gJ0NvbnRleHRQcm92aWRlcic7XG5cbiAgICBjYXNlIHJlYWN0X2lzLkZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gJ0ZvcndhcmRSZWYnO1xuXG4gICAgY2FzZSByZWFjdF9pcy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSByZWFjdF9pcy5MYXp5OlxuICAgICAgcmV0dXJuICdMYXp5JztcblxuICAgIGNhc2UgcmVhY3RfaXMuTWVtbzpcbiAgICAgIHJldHVybiAnTWVtbyc7XG5cbiAgICBjYXNlIHJlYWN0X2lzLlBvcnRhbDpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgcmVhY3RfaXMuUHJvZmlsZXI6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgcmVhY3RfaXMuU3RyaWN0TW9kZTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIHJlYWN0X2lzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfVFJBQ0lOR19NQVJLRVJfVFlQRTpcbiAgICAgIHJldHVybiAnVHJhY2luZ01hcmtlcic7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNwbGF5TmFtZSh0eXBlLCAnQW5vbnltb3VzJyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ05vdEltcGxlbWVudGVkSW5EZXZ0b29scyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ0VsZW1lbnQnO1xuICAgICAgfVxuXG4gIH1cbn1cbnZhciBNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIID0gNTA7XG5cbmZ1bmN0aW9uIHRydW5jYXRlRm9yRGlzcGxheShzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogTUFYX1BSRVZJRVdfU1RSSU5HX0xFTkdUSDtcblxuICBpZiAoc3RyaW5nLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgbGVuZ3RoKSArICfigKYnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn0gLy8gQXR0ZW1wdHMgdG8gbWltaWMgQ2hyb21lJ3MgaW5saW5lIHByZXZpZXcgZm9yIHZhbHVlcy5cbi8vIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHZhbHVlLi4uXG4vLyAgIHtcbi8vICAgICAgZm9vOiAxMjMsXG4vLyAgICAgIGJhcjogXCJhYmNcIixcbi8vICAgICAgYmF6OiBbdHJ1ZSwgZmFsc2VdLFxuLy8gICAgICBxdXg6IHsgYWI6IDEsIGNkOiAyIH1cbi8vICAgfTtcbi8vXG4vLyBXb3VsZCBzaG93IGEgcHJldmlldyBvZi4uLlxuLy8gICB7Zm9vOiAxMjMsIGJhcjogXCJhYmNcIiwgYmF6OiBBcnJheSgyKSwgcXV4OiB74oCmfX1cbi8vXG4vLyBBbmQgdGhlIGZvbGxvd2luZyB2YWx1ZS4uLlxuLy8gICBbXG4vLyAgICAgMTIzLFxuLy8gICAgIFwiYWJjXCIsXG4vLyAgICAgW3RydWUsIGZhbHNlXSxcbi8vICAgICB7IGZvbzogMTIzLCBiYXI6IFwiYWJjXCIgfVxuLy8gICBdO1xuLy9cbi8vIFdvdWxkIHNob3cgYSBwcmV2aWV3IG9mLi4uXG4vLyAgIFsxMjMsIFwiYWJjXCIsIEFycmF5KDIpLCB74oCmfV1cblxuXG5mdW5jdGlvbiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBzaG93Rm9ybWF0dGVkVmFsdWUpIHtcbiAgaWYgKGRhdGEgIT0gbnVsbCAmJiB1dGlsc19oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIG1ldGEudHlwZSkpIHtcbiAgICByZXR1cm4gc2hvd0Zvcm1hdHRlZFZhbHVlID8gZGF0YVttZXRhLnByZXZpZXdfbG9uZ10gOiBkYXRhW21ldGEucHJldmlld19zaG9ydF07XG4gIH1cblxuICB2YXIgdHlwZSA9IGdldERhdGFUeXBlKGRhdGEpO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2h0bWxfZWxlbWVudCc6XG4gICAgICByZXR1cm4gXCI8XCIuY29uY2F0KHRydW5jYXRlRm9yRGlzcGxheShkYXRhLnRhZ05hbWUudG9Mb3dlckNhc2UoKSksIFwiIC8+XCIpO1xuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIHRydW5jYXRlRm9yRGlzcGxheShcIlxcdTAxOTIgXCIuY29uY2F0KHR5cGVvZiBkYXRhLm5hbWUgPT09ICdmdW5jdGlvbicgPyAnJyA6IGRhdGEubmFtZSwgXCIoKSB7fVwiKSk7XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdChkYXRhLCBcIlxcXCJcIik7XG5cbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgcmV0dXJuIHRydW5jYXRlRm9yRGlzcGxheShkYXRhLnRvU3RyaW5nKCkgKyAnbicpO1xuXG4gICAgY2FzZSAncmVnZXhwJzpcbiAgICAgIHJldHVybiB0cnVuY2F0ZUZvckRpc3BsYXkoZGF0YS50b1N0cmluZygpKTtcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICByZXR1cm4gdHJ1bmNhdGVGb3JEaXNwbGF5KGRhdGEudG9TdHJpbmcoKSk7XG5cbiAgICBjYXNlICdyZWFjdF9lbGVtZW50JzpcbiAgICAgIHJldHVybiBcIjxcIi5jb25jYXQodHJ1bmNhdGVGb3JEaXNwbGF5KGdldERpc3BsYXlOYW1lRm9yUmVhY3RFbGVtZW50KGRhdGEpIHx8ICdVbmtub3duJyksIFwiIC8+XCIpO1xuXG4gICAgY2FzZSAnYXJyYXlfYnVmZmVyJzpcbiAgICAgIHJldHVybiBcIkFycmF5QnVmZmVyKFwiLmNvbmNhdChkYXRhLmJ5dGVMZW5ndGgsIFwiKVwiKTtcblxuICAgIGNhc2UgJ2RhdGFfdmlldyc6XG4gICAgICByZXR1cm4gXCJEYXRhVmlldyhcIi5jb25jYXQoZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCwgXCIpXCIpO1xuXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgaWYgKHNob3dGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICB2YXIgZm9ybWF0dGVkID0gJyc7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgKz0gJywgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3JtYXR0ZWQgKz0gZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YVtpXSwgZmFsc2UpO1xuXG4gICAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPiBNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRvaW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGl0ZXJhdGlvbi4uLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdCh0cnVuY2F0ZUZvckRpc3BsYXkoZm9ybWF0dGVkKSwgXCJdXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHV0aWxzX2hhc093blByb3BlcnR5LmNhbGwoZGF0YSwgbWV0YS5zaXplKSA/IGRhdGFbbWV0YS5zaXplXSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gXCJBcnJheShcIi5jb25jYXQobGVuZ3RoLCBcIilcIik7XG4gICAgICB9XG5cbiAgICBjYXNlICd0eXBlZF9hcnJheSc6XG4gICAgICB2YXIgc2hvcnROYW1lID0gXCJcIi5jb25jYXQoZGF0YS5jb25zdHJ1Y3Rvci5uYW1lLCBcIihcIikuY29uY2F0KGRhdGEubGVuZ3RoLCBcIilcIik7XG5cbiAgICAgIGlmIChzaG93Rm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgdmFyIF9mb3JtYXR0ZWQgPSAnJztcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGF0YS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBpZiAoX2kgPiAwKSB7XG4gICAgICAgICAgICBfZm9ybWF0dGVkICs9ICcsICc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2Zvcm1hdHRlZCArPSBkYXRhW19pXTtcblxuICAgICAgICAgIGlmIChfZm9ybWF0dGVkLmxlbmd0aCA+IE1BWF9QUkVWSUVXX1NUUklOR19MRU5HVEgpIHtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZG9pbmcgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgaXRlcmF0aW9uLi4uXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoc2hvcnROYW1lLCBcIiBbXCIpLmNvbmNhdCh0cnVuY2F0ZUZvckRpc3BsYXkoX2Zvcm1hdHRlZCksIFwiXVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzaG9ydE5hbWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdpdGVyYXRvcic6XG4gICAgICB2YXIgbmFtZSA9IGRhdGEuY29uc3RydWN0b3IubmFtZTtcblxuICAgICAgaWYgKHNob3dGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAvLyBUUklDS1lcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFsuLi5zcHJlYWRdIHN5bnRheCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICAvLyBUaGlzIHByb2plY3QgdXNlcyBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zcHJlYWQgaW4gXCJsb29zZVwiIG1vZGUgd2hpY2ggb25seSB3b3JrcyB3aXRoIEFycmF5IHZhbHVlcy5cbiAgICAgICAgLy8gT3RoZXIgdHlwZXMgKGUuZy4gdHlwZWQgYXJyYXlzLCBTZXRzKSB3aWxsIG5vdCBzcHJlYWQgY29ycmVjdGx5LlxuICAgICAgICB2YXIgYXJyYXkgPSBBcnJheS5mcm9tKGRhdGEpO1xuICAgICAgICB2YXIgX2Zvcm1hdHRlZDIgPSAnJztcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBhcnJheS5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgdmFyIGVudHJ5T3JFbnRyaWVzID0gYXJyYXlbX2kyXTtcblxuICAgICAgICAgIGlmIChfaTIgPiAwKSB7XG4gICAgICAgICAgICBfZm9ybWF0dGVkMiArPSAnLCAnO1xuICAgICAgICAgIH0gLy8gVFJJQ0tZXG4gICAgICAgICAgLy8gQnJvd3NlcnMgZGlzcGxheSBNYXBzIGFuZCBTZXRzIGRpZmZlcmVudGx5LlxuICAgICAgICAgIC8vIFRvIG1pbWljIHRoZWlyIGJlaGF2aW9yLCBkZXRlY3QgaWYgd2UndmUgYmVlbiBnaXZlbiBhbiBlbnRyaWVzIHR1cGxlLlxuICAgICAgICAgIC8vICAgTWFwKDIpIHtcImFiY1wiID0+IDEyMywgXCJkZWZcIiA9PiAxMjN9XG4gICAgICAgICAgLy8gICBTZXQoMikge1wiYWJjXCIsIDEyM31cblxuXG4gICAgICAgICAgaWYgKHNyY19pc0FycmF5KGVudHJ5T3JFbnRyaWVzKSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGZvcm1hdERhdGFGb3JQcmV2aWV3KGVudHJ5T3JFbnRyaWVzWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGZvcm1hdERhdGFGb3JQcmV2aWV3KGVudHJ5T3JFbnRyaWVzWzFdLCBmYWxzZSk7XG4gICAgICAgICAgICBfZm9ybWF0dGVkMiArPSBcIlwiLmNvbmNhdChrZXksIFwiID0+IFwiKS5jb25jYXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfZm9ybWF0dGVkMiArPSBmb3JtYXREYXRhRm9yUHJldmlldyhlbnRyeU9yRW50cmllcywgZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfZm9ybWF0dGVkMi5sZW5ndGggPiBNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRvaW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGl0ZXJhdGlvbi4uLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUsIFwiKFwiKS5jb25jYXQoZGF0YS5zaXplLCBcIikge1wiKS5jb25jYXQodHJ1bmNhdGVGb3JEaXNwbGF5KF9mb3JtYXR0ZWQyKSwgXCJ9XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUsIFwiKFwiKS5jb25jYXQoZGF0YS5zaXplLCBcIilcIik7XG4gICAgICB9XG5cbiAgICBjYXNlICdvcGFxdWVfaXRlcmF0b3InOlxuICAgICAge1xuICAgICAgICByZXR1cm4gZGF0YVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuXG4gICAgY2FzZSAnY2xhc3NfaW5zdGFuY2UnOlxuICAgICAgcmV0dXJuIGRhdGEuY29uc3RydWN0b3IubmFtZTtcblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoc2hvd0Zvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgIHZhciBrZXlzID0gQXJyYXkuZnJvbShnZXRBbGxFbnVtZXJhYmxlS2V5cyhkYXRhKSkuc29ydChhbHBoYVNvcnRLZXlzKTtcbiAgICAgICAgdmFyIF9mb3JtYXR0ZWQzID0gJyc7XG5cbiAgICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwga2V5cy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgICAgdmFyIF9rZXkgPSBrZXlzW19pM107XG5cbiAgICAgICAgICBpZiAoX2kzID4gMCkge1xuICAgICAgICAgICAgX2Zvcm1hdHRlZDMgKz0gJywgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfZm9ybWF0dGVkMyArPSBcIlwiLmNvbmNhdChfa2V5LnRvU3RyaW5nKCksIFwiOiBcIikuY29uY2F0KGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGFbX2tleV0sIGZhbHNlKSk7XG5cbiAgICAgICAgICBpZiAoX2Zvcm1hdHRlZDMubGVuZ3RoID4gTUFYX1BSRVZJRVdfU1RSSU5HX0xFTkdUSCkge1xuICAgICAgICAgICAgLy8gUHJldmVudCBkb2luZyBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBpdGVyYXRpb24uLi5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcIntcIi5jb25jYXQodHJ1bmNhdGVGb3JEaXNwbGF5KF9mb3JtYXR0ZWQzKSwgXCJ9XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd74oCmfSc7XG4gICAgICB9XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ2luZmluaXR5JzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ251bGwnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJ1bmNhdGVGb3JEaXNwbGF5KFN0cmluZyhkYXRhKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJ3Vuc2VyaWFsaXphYmxlJztcbiAgICAgIH1cblxuICB9XG59IC8vIEJhc2ljYWxseSBjaGVja2luZyB0aGF0IHRoZSBvYmplY3Qgb25seSBoYXMgT2JqZWN0IGluIGl0cyBwcm90b3R5cGUgY2hhaW5cblxudmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iamVjdCkge1xuICB2YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIGlmICghb2JqZWN0UHJvdG90eXBlKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIG9iamVjdFBhcmVudFByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3RQcm90b3R5cGUpO1xuICByZXR1cm4gIW9iamVjdFBhcmVudFByb3RvdHlwZTtcbn07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9oeWRyYXRpb24uanNcbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxudmFyIG1ldGEgPSB7XG4gIGluc3BlY3RhYmxlOiBTeW1ib2woJ2luc3BlY3RhYmxlJyksXG4gIGluc3BlY3RlZDogU3ltYm9sKCdpbnNwZWN0ZWQnKSxcbiAgbmFtZTogU3ltYm9sKCduYW1lJyksXG4gIHByZXZpZXdfbG9uZzogU3ltYm9sKCdwcmV2aWV3X2xvbmcnKSxcbiAgcHJldmlld19zaG9ydDogU3ltYm9sKCdwcmV2aWV3X3Nob3J0JyksXG4gIHJlYWRvbmx5OiBTeW1ib2woJ3JlYWRvbmx5JyksXG4gIHNpemU6IFN5bWJvbCgnc2l6ZScpLFxuICB0eXBlOiBTeW1ib2woJ3R5cGUnKSxcbiAgdW5zZXJpYWxpemFibGU6IFN5bWJvbCgndW5zZXJpYWxpemFibGUnKVxufTtcbi8vIFRoaXMgdGhyZXNob2xkIGRldGVybWluZXMgdGhlIGRlcHRoIGF0IHdoaWNoIHRoZSBicmlkZ2UgXCJkZWh5ZHJhdGVzXCIgbmVzdGVkIGRhdGEuXG4vLyBEZWh5ZHJhdGlvbiBtZWFucyB0aGF0IHdlIGRvbid0IHNlcmlhbGl6ZSB0aGUgZGF0YSBmb3IgZS5nLiBwb3N0TWVzc2FnZSBvciBzdHJpbmdpZnksXG4vLyB1bmxlc3MgdGhlIGZyb250ZW5kIGV4cGxpY2l0bHkgcmVxdWVzdHMgaXQgKGUuZy4gYSB1c2VyIGNsaWNrcyB0byBleHBhbmQgYSBwcm9wcyBvYmplY3QpLlxuLy9cbi8vIFJlZHVjaW5nIHRoaXMgdGhyZXNob2xkIHdpbGwgaW1wcm92ZSB0aGUgc3BlZWQgb2YgaW5pdGlhbCBjb21wb25lbnQgaW5zcGVjdGlvbixcbi8vIGJ1dCBtYXkgZGVjcmVhc2UgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIGV4cGFuZGluZyBvYmplY3RzL2FycmF5cyB0byBpbnNwZWN0IGZ1cnRoZXIuXG52YXIgTEVWRUxfVEhSRVNIT0xEID0gMjtcbi8qKlxuICogR2VuZXJhdGUgdGhlIGRlaHlkcmF0ZWQgbWV0YWRhdGEgZm9yIGNvbXBsZXggb2JqZWN0IGluc3RhbmNlc1xuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURlaHlkcmF0ZWQodHlwZSwgaW5zcGVjdGFibGUsIGRhdGEsIGNsZWFuZWQsIHBhdGgpIHtcbiAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICB2YXIgZGVoeWRyYXRlZCA9IHtcbiAgICBpbnNwZWN0YWJsZTogaW5zcGVjdGFibGUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICBuYW1lOiAhZGF0YS5jb25zdHJ1Y3RvciB8fCBkYXRhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnID8gJycgOiBkYXRhLmNvbnN0cnVjdG9yLm5hbWVcbiAgfTtcblxuICBpZiAodHlwZSA9PT0gJ2FycmF5JyB8fCB0eXBlID09PSAndHlwZWRfYXJyYXknKSB7XG4gICAgZGVoeWRyYXRlZC5zaXplID0gZGF0YS5sZW5ndGg7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBkZWh5ZHJhdGVkLnNpemUgPSBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2l0ZXJhdG9yJyB8fCB0eXBlID09PSAndHlwZWRfYXJyYXknKSB7XG4gICAgZGVoeWRyYXRlZC5yZWFkb25seSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZGVoeWRyYXRlZDtcbn1cbi8qKlxuICogU3RyaXAgb3V0IGNvbXBsZXggZGF0YSAoaW5zdGFuY2VzLCBmdW5jdGlvbnMsIGFuZCBkYXRhIG5lc3RlZCA+IExFVkVMX1RIUkVTSE9MRCBsZXZlbHMgZGVlcCkuXG4gKiBUaGUgcGF0aHMgb2YgdGhlIHN0cmlwcGVkIG91dCBvYmplY3RzIGFyZSBhcHBlbmRlZCB0byB0aGUgYGNsZWFuZWRgIGxpc3QuXG4gKiBPbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgYmFycmllciwgdGhlIGNsZWFuZWQgbGlzdCBpcyB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBjbGVhbmVkIHJlcHJlc2VudGF0aW9uIGludG9cbiAqIGFuIG9iamVjdCB3aXRoIHN5bWJvbHMgYXMgYXR0cmlidXRlcywgc28gdGhhdCBhIHNhbml0aXplZCBvYmplY3QgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhIG5vcm1hbCBvYmplY3QuXG4gKlxuICogSW5wdXQ6IHtcInNvbWVcIjoge1wiYXR0clwiOiBmbigpfSwgXCJvdGhlclwiOiBBbkluc3RhbmNlfVxuICogT3V0cHV0OiB7XG4gKiAgIFwic29tZVwiOiB7XG4gKiAgICAgXCJhdHRyXCI6IHtcIm5hbWVcIjogdGhlIGZuLm5hbWUsIHR5cGU6IFwiZnVuY3Rpb25cIn1cbiAqICAgfSxcbiAqICAgXCJvdGhlclwiOiB7XG4gKiAgICAgXCJuYW1lXCI6IFwiQW5JbnN0YW5jZVwiLFxuICogICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICogICB9LFxuICogfVxuICogYW5kIGNsZWFuZWQgPSBbW1wic29tZVwiLCBcImF0dHJcIl0sIFtcIm90aGVyXCJdXVxuICovXG5cblxuZnVuY3Rpb24gZGVoeWRyYXRlKGRhdGEsIGNsZWFuZWQsIHVuc2VyaWFsaXphYmxlLCBwYXRoLCBpc1BhdGhBbGxvd2VkKSB7XG4gIHZhciBsZXZlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogMDtcbiAgdmFyIHR5cGUgPSBnZXREYXRhVHlwZShkYXRhKTtcbiAgdmFyIGlzUGF0aEFsbG93ZWRDaGVjaztcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdodG1sX2VsZW1lbnQnOlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zcGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IGRhdGEudGFnTmFtZSxcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfTtcblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3BlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICBuYW1lOiB0eXBlb2YgZGF0YS5uYW1lID09PSAnZnVuY3Rpb24nIHx8ICFkYXRhLm5hbWUgPyAnZnVuY3Rpb24nIDogZGF0YS5uYW1lLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlzUGF0aEFsbG93ZWRDaGVjayA9IGlzUGF0aEFsbG93ZWQocGF0aCk7XG5cbiAgICAgIGlmIChpc1BhdGhBbGxvd2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPD0gNTAwID8gZGF0YSA6IGRhdGEuc2xpY2UoMCwgNTAwKSArICcuLi4nO1xuICAgICAgfVxuXG4gICAgY2FzZSAnYmlnaW50JzpcbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3BlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICBuYW1lOiBkYXRhLnRvU3RyaW5nKCksXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zcGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IGRhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfTtcbiAgICAvLyBSZWFjdCBFbGVtZW50cyBhcmVuJ3QgdmVyeSBpbnNwZWN0b3ItZnJpZW5kbHksXG4gICAgLy8gYW5kIG9mdGVuIGNvbnRhaW4gcHJpdmF0ZSBmaWVsZHMgb3IgY2lyY3VsYXIgcmVmZXJlbmNlcy5cblxuICAgIGNhc2UgJ3JlYWN0X2VsZW1lbnQnOlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zcGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IGdldERpc3BsYXlOYW1lRm9yUmVhY3RFbGVtZW50KGRhdGEpIHx8ICdVbmtub3duJyxcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfTtcbiAgICAvLyBBcnJheUJ1ZmZlcnMgZXJyb3IgaWYgeW91IHRyeSB0byBpbnNwZWN0IHRoZW0uXG5cbiAgICBjYXNlICdhcnJheV9idWZmZXInOlxuICAgIGNhc2UgJ2RhdGFfdmlldyc6XG4gICAgICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnNwZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogdHlwZSA9PT0gJ2RhdGFfdmlldycgPyAnRGF0YVZpZXcnIDogJ0FycmF5QnVmZmVyJyxcbiAgICAgICAgc2l6ZTogZGF0YS5ieXRlTGVuZ3RoLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgaXNQYXRoQWxsb3dlZENoZWNrID0gaXNQYXRoQWxsb3dlZChwYXRoKTtcblxuICAgICAgaWYgKGxldmVsID49IExFVkVMX1RIUkVTSE9MRCAmJiAhaXNQYXRoQWxsb3dlZENoZWNrKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEZWh5ZHJhdGVkKHR5cGUsIHRydWUsIGRhdGEsIGNsZWFuZWQsIHBhdGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgcmV0dXJuIGRlaHlkcmF0ZShpdGVtLCBjbGVhbmVkLCB1bnNlcmlhbGl6YWJsZSwgcGF0aC5jb25jYXQoW2ldKSwgaXNQYXRoQWxsb3dlZCwgaXNQYXRoQWxsb3dlZENoZWNrID8gMSA6IGxldmVsICsgMSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2h0bWxfYWxsX2NvbGxlY3Rpb24nOlxuICAgIGNhc2UgJ3R5cGVkX2FycmF5JzpcbiAgICBjYXNlICdpdGVyYXRvcic6XG4gICAgICBpc1BhdGhBbGxvd2VkQ2hlY2sgPSBpc1BhdGhBbGxvd2VkKHBhdGgpO1xuXG4gICAgICBpZiAobGV2ZWwgPj0gTEVWRUxfVEhSRVNIT0xEICYmICFpc1BhdGhBbGxvd2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURlaHlkcmF0ZWQodHlwZSwgdHJ1ZSwgZGF0YSwgY2xlYW5lZCwgcGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdW5zZXJpYWxpemFibGVWYWx1ZSA9IHtcbiAgICAgICAgICB1bnNlcmlhbGl6YWJsZTogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgICAgIHNpemU6IHR5cGUgPT09ICd0eXBlZF9hcnJheScgPyBkYXRhLmxlbmd0aCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgICBuYW1lOiAhZGF0YS5jb25zdHJ1Y3RvciB8fCBkYXRhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnID8gJycgOiBkYXRhLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICAgfTsgLy8gVFJJQ0tZXG4gICAgICAgIC8vIERvbid0IHVzZSBbLi4uc3ByZWFkXSBzeW50YXggZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgLy8gVGhpcyBwcm9qZWN0IHVzZXMgQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc3ByZWFkIGluIFwibG9vc2VcIiBtb2RlIHdoaWNoIG9ubHkgd29ya3Mgd2l0aCBBcnJheSB2YWx1ZXMuXG4gICAgICAgIC8vIE90aGVyIHR5cGVzIChlLmcuIHR5cGVkIGFycmF5cywgU2V0cykgd2lsbCBub3Qgc3ByZWFkIGNvcnJlY3RseS5cblxuICAgICAgICBBcnJheS5mcm9tKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICByZXR1cm4gdW5zZXJpYWxpemFibGVWYWx1ZVtpXSA9IGRlaHlkcmF0ZShpdGVtLCBjbGVhbmVkLCB1bnNlcmlhbGl6YWJsZSwgcGF0aC5jb25jYXQoW2ldKSwgaXNQYXRoQWxsb3dlZCwgaXNQYXRoQWxsb3dlZENoZWNrID8gMSA6IGxldmVsICsgMSk7XG4gICAgICAgIH0pO1xuICAgICAgICB1bnNlcmlhbGl6YWJsZS5wdXNoKHBhdGgpO1xuICAgICAgICByZXR1cm4gdW5zZXJpYWxpemFibGVWYWx1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ29wYXF1ZV9pdGVyYXRvcic6XG4gICAgICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnNwZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogZGF0YVtTeW1ib2wudG9TdHJpbmdUYWddLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuXG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnNwZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogZGF0YS50b1N0cmluZygpLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuXG4gICAgY2FzZSAncmVnZXhwJzpcbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3BlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICBuYW1lOiBkYXRhLnRvU3RyaW5nKCksXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaXNQYXRoQWxsb3dlZENoZWNrID0gaXNQYXRoQWxsb3dlZChwYXRoKTtcblxuICAgICAgaWYgKGxldmVsID49IExFVkVMX1RIUkVTSE9MRCAmJiAhaXNQYXRoQWxsb3dlZENoZWNrKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEZWh5ZHJhdGVkKHR5cGUsIHRydWUsIGRhdGEsIGNsZWFuZWQsIHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICBnZXRBbGxFbnVtZXJhYmxlS2V5cyhkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IGtleS50b1N0cmluZygpO1xuICAgICAgICAgIG9iamVjdFtuYW1lXSA9IGRlaHlkcmF0ZShkYXRhW2tleV0sIGNsZWFuZWQsIHVuc2VyaWFsaXphYmxlLCBwYXRoLmNvbmNhdChbbmFtZV0pLCBpc1BhdGhBbGxvd2VkLCBpc1BhdGhBbGxvd2VkQ2hlY2sgPyAxIDogbGV2ZWwgKyAxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG5cbiAgICBjYXNlICdjbGFzc19pbnN0YW5jZSc6XG4gICAgICBpc1BhdGhBbGxvd2VkQ2hlY2sgPSBpc1BhdGhBbGxvd2VkKHBhdGgpO1xuXG4gICAgICBpZiAobGV2ZWwgPj0gTEVWRUxfVEhSRVNIT0xEICYmICFpc1BhdGhBbGxvd2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURlaHlkcmF0ZWQodHlwZSwgdHJ1ZSwgZGF0YSwgY2xlYW5lZCwgcGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IHtcbiAgICAgICAgdW5zZXJpYWxpemFibGU6IHRydWUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IGRhdGEuY29uc3RydWN0b3IubmFtZVxuICAgICAgfTtcbiAgICAgIGdldEFsbEVudW1lcmFibGVLZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIga2V5QXNTdHJpbmcgPSBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgdmFsdWVba2V5QXNTdHJpbmddID0gZGVoeWRyYXRlKGRhdGFba2V5XSwgY2xlYW5lZCwgdW5zZXJpYWxpemFibGUsIHBhdGguY29uY2F0KFtrZXlBc1N0cmluZ10pLCBpc1BhdGhBbGxvd2VkLCBpc1BhdGhBbGxvd2VkQ2hlY2sgPyAxIDogbGV2ZWwgKyAxKTtcbiAgICAgIH0pO1xuICAgICAgdW5zZXJpYWxpemFibGUucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGNhc2UgJ2luZmluaXR5JzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAvLyBTb21lIHZhbHVlcyBhcmUgbG9zc3kgd2hlbiBzZW50IHRocm91Z2ggYSBXZWJTb2NrZXQuXG4gICAgICAvLyBXZSBkZWh5ZHJhdGUrcmVoeWRyYXRlIHRoZW0gdG8gcHJlc2VydmUgdGhlaXIgdHlwZS5cbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbGxJblBhdGgob2JqZWN0LCBkYXRhLCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoKTtcblxuICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICBpZiAoIXRhcmdldFttZXRhLnVuc2VyaWFsaXphYmxlXSkge1xuICAgICAgZGVsZXRlIHRhcmdldFttZXRhLmluc3BlY3RhYmxlXTtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbWV0YS5pbnNwZWN0ZWRdO1xuICAgICAgZGVsZXRlIHRhcmdldFttZXRhLm5hbWVdO1xuICAgICAgZGVsZXRlIHRhcmdldFttZXRhLnByZXZpZXdfbG9uZ107XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEucHJldmlld19zaG9ydF07XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEucmVhZG9ubHldO1xuICAgICAgZGVsZXRlIHRhcmdldFttZXRhLnNpemVdO1xuICAgICAgZGVsZXRlIHRhcmdldFttZXRhLnR5cGVdO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBkYXRhLnVuc2VyaWFsaXphYmxlLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdW5zZXJpYWxpemFibGVQYXRoID0gZGF0YS51bnNlcmlhbGl6YWJsZVswXTtcbiAgICB2YXIgaXNNYXRjaCA9IHVuc2VyaWFsaXphYmxlUGF0aC5sZW5ndGggPT09IHBhdGgubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gdW5zZXJpYWxpemFibGVQYXRoW2ldKSB7XG4gICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgIHVwZ3JhZGVVbnNlcmlhbGl6YWJsZSh2YWx1ZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNldEluT2JqZWN0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZShvYmplY3QsIGNsZWFuZWQsIHVuc2VyaWFsaXphYmxlKSB7XG4gIGNsZWFuZWQuZm9yRWFjaChmdW5jdGlvbiAocGF0aCkge1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICB2YXIgbGFzdCA9IHBhdGhbbGVuZ3RoIC0gMV07XG4gICAgdmFyIHBhcmVudCA9IGdldEluT2JqZWN0KG9iamVjdCwgcGF0aC5zbGljZSgwLCBsZW5ndGggLSAxKSk7XG5cbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50Lmhhc093blByb3BlcnR5KGxhc3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gcGFyZW50W2xhc3RdO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ2luZmluaXR5Jykge1xuICAgICAgcGFyZW50W2xhc3RdID0gSW5maW5pdHk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnbmFuJykge1xuICAgICAgcGFyZW50W2xhc3RdID0gTmFOO1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmVudFtsYXN0XSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIGtleXMgd2l0aCBTeW1ib2xzIHNvIHRoZXkncmUgbm9uLWVudW1lcmFibGUuXG4gICAgICB2YXIgcmVwbGFjZWQgPSB7fTtcbiAgICAgIHJlcGxhY2VkW21ldGEuaW5zcGVjdGFibGVdID0gISF2YWx1ZS5pbnNwZWN0YWJsZTtcbiAgICAgIHJlcGxhY2VkW21ldGEuaW5zcGVjdGVkXSA9IGZhbHNlO1xuICAgICAgcmVwbGFjZWRbbWV0YS5uYW1lXSA9IHZhbHVlLm5hbWU7XG4gICAgICByZXBsYWNlZFttZXRhLnByZXZpZXdfbG9uZ10gPSB2YWx1ZS5wcmV2aWV3X2xvbmc7XG4gICAgICByZXBsYWNlZFttZXRhLnByZXZpZXdfc2hvcnRdID0gdmFsdWUucHJldmlld19zaG9ydDtcbiAgICAgIHJlcGxhY2VkW21ldGEuc2l6ZV0gPSB2YWx1ZS5zaXplO1xuICAgICAgcmVwbGFjZWRbbWV0YS5yZWFkb25seV0gPSAhIXZhbHVlLnJlYWRvbmx5O1xuICAgICAgcmVwbGFjZWRbbWV0YS50eXBlXSA9IHZhbHVlLnR5cGU7XG4gICAgICBwYXJlbnRbbGFzdF0gPSByZXBsYWNlZDtcbiAgICB9XG4gIH0pO1xuICB1bnNlcmlhbGl6YWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIHZhciBsYXN0ID0gcGF0aFtsZW5ndGggLSAxXTtcbiAgICB2YXIgcGFyZW50ID0gZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLnNsaWNlKDAsIGxlbmd0aCAtIDEpKTtcblxuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuaGFzT3duUHJvcGVydHkobGFzdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IHBhcmVudFtsYXN0XTtcblxuICAgIHZhciByZXBsYWNlbWVudCA9IF9vYmplY3RTcHJlYWQoe30sIG5vZGUpO1xuXG4gICAgdXBncmFkZVVuc2VyaWFsaXphYmxlKHJlcGxhY2VtZW50LCBub2RlKTtcbiAgICBwYXJlbnRbbGFzdF0gPSByZXBsYWNlbWVudDtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGVVbnNlcmlhbGl6YWJsZShkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gIHZhciBfT2JqZWN0JGRlZmluZVByb3BlcnQ7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZGVzdGluYXRpb24sIChfT2JqZWN0JGRlZmluZVByb3BlcnQgPSB7fSwgaHlkcmF0aW9uX2RlZmluZVByb3BlcnR5KF9PYmplY3QkZGVmaW5lUHJvcGVydCwgbWV0YS5pbnNwZWN0ZWQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6ICEhc291cmNlLmluc3BlY3RlZFxuICB9KSwgaHlkcmF0aW9uX2RlZmluZVByb3BlcnR5KF9PYmplY3QkZGVmaW5lUHJvcGVydCwgbWV0YS5uYW1lLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBzb3VyY2UubmFtZVxuICB9KSwgaHlkcmF0aW9uX2RlZmluZVByb3BlcnR5KF9PYmplY3QkZGVmaW5lUHJvcGVydCwgbWV0YS5wcmV2aWV3X2xvbmcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHNvdXJjZS5wcmV2aWV3X2xvbmdcbiAgfSksIGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGRlZmluZVByb3BlcnQsIG1ldGEucHJldmlld19zaG9ydCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogc291cmNlLnByZXZpZXdfc2hvcnRcbiAgfSksIGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGRlZmluZVByb3BlcnQsIG1ldGEuc2l6ZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogc291cmNlLnNpemVcbiAgfSksIGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGRlZmluZVByb3BlcnQsIG1ldGEucmVhZG9ubHksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6ICEhc291cmNlLnJlYWRvbmx5XG4gIH0pLCBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkoX09iamVjdCRkZWZpbmVQcm9wZXJ0LCBtZXRhLnR5cGUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHNvdXJjZS50eXBlXG4gIH0pLCBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkoX09iamVjdCRkZWZpbmVQcm9wZXJ0LCBtZXRhLnVuc2VyaWFsaXphYmxlLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiAhIXNvdXJjZS51bnNlcmlhbGl6YWJsZVxuICB9KSwgX09iamVjdCRkZWZpbmVQcm9wZXJ0KSk7XG4gIGRlbGV0ZSBkZXN0aW5hdGlvbi5pbnNwZWN0ZWQ7XG4gIGRlbGV0ZSBkZXN0aW5hdGlvbi5uYW1lO1xuICBkZWxldGUgZGVzdGluYXRpb24ucHJldmlld19sb25nO1xuICBkZWxldGUgZGVzdGluYXRpb24ucHJldmlld19zaG9ydDtcbiAgZGVsZXRlIGRlc3RpbmF0aW9uLnNpemU7XG4gIGRlbGV0ZSBkZXN0aW5hdGlvbi5yZWFkb25seTtcbiAgZGVsZXRlIGRlc3RpbmF0aW9uLnR5cGU7XG4gIGRlbGV0ZSBkZXN0aW5hdGlvbi51bnNlcmlhbGl6YWJsZTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9zaGFyZWQvaXNBcnJheS5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGlzQXJyYXlfaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBjb25zdCBzaGFyZWRfaXNBcnJheSA9IChpc0FycmF5X2lzQXJyYXkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC91dGlscy5qc1xuZnVuY3Rpb24gdXRpbHNfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiB1dGlsc19hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IHV0aWxzX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IGJhY2tlbmRfdXRpbHNfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1dGlsc19ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIHV0aWxzX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBiYWNrZW5kX3V0aWxzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYmFja2VuZF91dGlsc19hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYmFja2VuZF91dGlsc19hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gdXRpbHNfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gdXRpbHNfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBiYWNrZW5kX3V0aWxzX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBiYWNrZW5kX3V0aWxzX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGJhY2tlbmRfdXRpbHNfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBiYWNrZW5kX3V0aWxzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBiYWNrZW5kX3V0aWxzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBiYWNrZW5kX3V0aWxzX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIHV0aWxzX293bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIHV0aWxzX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyB1dGlsc19vd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgdXRpbHNfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgdXRpbHNfb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gdXRpbHNfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuLy8gVE9ETzogdXBkYXRlIHRoaXMgdG8gdGhlIGZpcnN0IFJlYWN0IHZlcnNpb24gdGhhdCBoYXMgYSBjb3JyZXNwb25kaW5nIERldlRvb2xzIGJhY2tlbmRcbnZhciBGSVJTVF9ERVZUT09MU19CQUNLRU5EX0xPQ0tTVEVQX1ZFUiA9ICc5OTkuOS45JztcbmZ1bmN0aW9uIGhhc0Fzc2lnbmVkQmFja2VuZCh2ZXJzaW9uKSB7XG4gIGlmICh2ZXJzaW9uID09IG51bGwgfHwgdmVyc2lvbiA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ3RlKHZlcnNpb24sIEZJUlNUX0RFVlRPT0xTX0JBQ0tFTkRfTE9DS1NURVBfVkVSKTtcbn1cbmZ1bmN0aW9uIGNsZWFuRm9yQnJpZGdlKGRhdGEsIGlzUGF0aEFsbG93ZWQpIHtcbiAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXG4gIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgdmFyIGNsZWFuZWRQYXRocyA9IFtdO1xuICAgIHZhciB1bnNlcmlhbGl6YWJsZVBhdGhzID0gW107XG4gICAgdmFyIGNsZWFuZWREYXRhID0gZGVoeWRyYXRlKGRhdGEsIGNsZWFuZWRQYXRocywgdW5zZXJpYWxpemFibGVQYXRocywgcGF0aCwgaXNQYXRoQWxsb3dlZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGNsZWFuZWREYXRhLFxuICAgICAgY2xlYW5lZDogY2xlYW5lZFBhdGhzLFxuICAgICAgdW5zZXJpYWxpemFibGU6IHVuc2VyaWFsaXphYmxlUGF0aHNcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBjb3B5V2l0aERlbGV0ZShvYmosIHBhdGgpIHtcbiAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAwO1xuICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gIHZhciB1cGRhdGVkID0gc2hhcmVkX2lzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogdXRpbHNfb2JqZWN0U3ByZWFkKHt9LCBvYmopO1xuXG4gIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgaWYgKHNoYXJlZF9pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGUob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZDtcbn0gLy8gVGhpcyBmdW5jdGlvbiBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGZpbmFsIHZhbHVlLlxuLy8gZS5nLiBbJ3BhdGgnLCAndG8nLCAnZm9vJ10gYW5kIFsncGF0aCcsICd0bycsICdiYXInXVxuXG5mdW5jdGlvbiBjb3B5V2l0aFJlbmFtZShvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAwO1xuICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gIHZhciB1cGRhdGVkID0gc2hhcmVkX2lzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogdXRpbHNfb2JqZWN0U3ByZWFkKHt9LCBvYmopO1xuXG4gIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICBpZiAoc2hhcmVkX2lzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZShvYmpbb2xkS2V5XSwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkO1xufVxuZnVuY3Rpb24gY29weVdpdGhTZXQob2JqLCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG5cbiAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICB2YXIgdXBkYXRlZCA9IHNoYXJlZF9pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IHV0aWxzX29iamVjdFNwcmVhZCh7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0KG9ialtrZXldLCBwYXRoLCB2YWx1ZSwgaW5kZXggKyAxKTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59XG5mdW5jdGlvbiBnZXRFZmZlY3REdXJhdGlvbnMocm9vdCkge1xuICAvLyBQcm9maWxpbmcgZHVyYXRpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgY2VydGFpbiBidWlsZHMuXG4gIC8vIElmIGF2YWlsYWJsZSwgdGhleSdsbCBiZSBzdG9yZWQgb24gdGhlIEhvc3RSb290LlxuICB2YXIgZWZmZWN0RHVyYXRpb24gPSBudWxsO1xuICB2YXIgcGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gbnVsbDtcbiAgdmFyIGhvc3RSb290ID0gcm9vdC5jdXJyZW50O1xuXG4gIGlmIChob3N0Um9vdCAhPSBudWxsKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGhvc3RSb290LnN0YXRlTm9kZTtcblxuICAgIGlmIChzdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgZWZmZWN0RHVyYXRpb24gPSBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gIT0gbnVsbCA/IHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA6IG51bGw7XG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb24gPSBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICE9IG51bGwgPyBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVmZmVjdER1cmF0aW9uOiBlZmZlY3REdXJhdGlvbixcbiAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IHBhc3NpdmVFZmZlY3REdXJhdGlvblxuICB9O1xufVxuZnVuY3Rpb24gc2VyaWFsaXplVG9TdHJpbmcoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgdmFyIGNhY2hlID0gbmV3IFNldCgpOyAvLyBVc2UgYSBjdXN0b20gcmVwbGFjZXIgZnVuY3Rpb24gdG8gcHJvdGVjdCBhZ2FpbnN0IGNpcmN1bGFyIHJlZmVyZW5jZXMuXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGJhY2tlbmRfdXRpbHNfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIGlmIChjYWNoZS5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2FjaGUuYWRkKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgKyAnbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LCAyKTtcbn0gLy8gRm9ybWF0cyBhbiBhcnJheSBvZiBhcmdzIHdpdGggYSBzdHlsZSBmb3IgY29uc29sZSBtZXRob2RzLCB1c2luZ1xuLy8gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4vLyAgICAgMS4gVGhlIGZpcnN0IHBhcmFtIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgJWNcbi8vICAgICAgICAgIC0gQmFpbCBvdXQgYW5kIHJldHVybiB0aGUgYXJncyB3aXRob3V0IG1vZGlmeWluZyB0aGUgc3R5bGVzLlxuLy8gICAgICAgICAgICBXZSBkb24ndCB3YW50IHRvIGFmZmVjdCBzdHlsZXMgdGhhdCB0aGUgZGV2ZWxvcGVyIGRlbGliZXJhdGVseSBzZXQuXG4vLyAgICAgMi4gVGhlIGZpcnN0IHBhcmFtIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCBjb250YWluICVjIGJ1dCBjb250YWluc1xuLy8gICAgICAgIHN0cmluZyBmb3JtYXR0aW5nXG4vLyAgICAgICAgICAtIFtgJWMke2FyZ3NbMF19YCwgc3R5bGUsIC4uLmFyZ3Muc2xpY2UoMSldXG4vLyAgICAgICAgICAtIE5vdGU6IHdlIGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgZm9ybWF0dGluZyB0aGF0IHRoZSBkZXZlbG9wZXIgdXNlc1xuLy8gICAgICAgICAgICBpcyBjb3JyZWN0LlxuLy8gICAgIDMuIFRoZSBmaXJzdCBwYXJhbSBpcyBhIHN0cmluZyB0aGF0IGRvZXNuJ3QgY29udGFpbiBzdHJpbmcgZm9ybWF0dGluZ1xuLy8gICAgICAgIE9SIGlzIG5vdCBhIHN0cmluZ1xuLy8gICAgICAgICAgLSBDcmVhdGUgYSBmb3JtYXR0aW5nIHN0cmluZyB3aGVyZTpcbi8vICAgICAgICAgICAgICAgICBib29sZWFuLCBzdHJpbmcsIHN5bWJvbCAtPiAlc1xuLy8gICAgICAgICAgICAgICAgIG51bWJlciAtPiAlZiBPUiAlaSBkZXBlbmRpbmcgb24gaWYgaXQncyBhbiBpbnQgb3IgZmxvYXRcbi8vICAgICAgICAgICAgICAgICBkZWZhdWx0IC0+ICVvXG5cbmZ1bmN0aW9uIGZvcm1hdFdpdGhTdHlsZXMoaW5wdXRBcmdzLCBzdHlsZSkge1xuICBpZiAoaW5wdXRBcmdzID09PSB1bmRlZmluZWQgfHwgaW5wdXRBcmdzID09PSBudWxsIHx8IGlucHV0QXJncy5sZW5ndGggPT09IDAgfHwgLy8gTWF0Y2hlcyBhbnkgb2YgJWMgYnV0IG5vdCAlJWNcbiAgdHlwZW9mIGlucHV0QXJnc1swXSA9PT0gJ3N0cmluZycgJiYgaW5wdXRBcmdzWzBdLm1hdGNoKC8oW14lXXxeKSglYykvZykgfHwgc3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBpbnB1dEFyZ3M7XG4gIH0gLy8gTWF0Y2hlcyBhbnkgb2YgJShvfE98ZHxpfHN8ZiksIGJ1dCBub3QgJSUob3xPfGR8aXxzfGYpXG5cblxuICB2YXIgUkVHRVhQID0gLyhbXiVdfF4pKCglJSkqKSglKFtvT2Rpc2ZdKSkvZztcblxuICBpZiAodHlwZW9mIGlucHV0QXJnc1swXSA9PT0gJ3N0cmluZycgJiYgaW5wdXRBcmdzWzBdLm1hdGNoKFJFR0VYUCkpIHtcbiAgICByZXR1cm4gW1wiJWNcIi5jb25jYXQoaW5wdXRBcmdzWzBdKSwgc3R5bGVdLmNvbmNhdCh1dGlsc190b0NvbnN1bWFibGVBcnJheShpbnB1dEFyZ3Muc2xpY2UoMSkpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RBcmcgPSBpbnB1dEFyZ3MucmVkdWNlKGZ1bmN0aW9uIChmb3JtYXRTdHIsIGVsZW0sIGkpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBmb3JtYXRTdHIgKz0gJyAnO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGJhY2tlbmRfdXRpbHNfdHlwZW9mKGVsZW0pKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gJyVzJztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHZhciBmb3JtYXR0aW5nID0gTnVtYmVyLmlzSW50ZWdlcihlbGVtKSA/ICclaScgOiAnJWYnO1xuICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gZm9ybWF0dGluZztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gJyVvJztcbiAgICAgIH1cbiAgICB9LCAnJWMnKTtcbiAgICByZXR1cm4gW2ZpcnN0QXJnLCBzdHlsZV0uY29uY2F0KHV0aWxzX3RvQ29uc3VtYWJsZUFycmF5KGlucHV0QXJncykpO1xuICB9XG59IC8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90bXBmcy9mb3JtYXQtdXRpbC9ibG9iLzBlNjJkNDMwZWZiMGExYzUxNDQ4NzA5YWJkM2UyNDA2YzE0ZDg0MDEvZm9ybWF0LmpzI0wxXG4vLyBiYXNlZCBvbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvY29uc29sZSNVc2luZ19zdHJpbmdfc3Vic3RpdHV0aW9uc1xuLy8gSW1wbGVtZW50cyBzLCBkLCBpIGFuZCBmIHBsYWNlaG9sZGVyc1xuLy8gTk9URTogS0VFUCBJTiBTWU5DIHdpdGggc3JjL2hvb2suanNcblxuZnVuY3Rpb24gZm9ybWF0KG1heWJlTWVzc2FnZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW5wdXRBcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBpbnB1dEFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGFyZ3MgPSBpbnB1dEFyZ3Muc2xpY2UoKTtcbiAgdmFyIGZvcm1hdHRlZCA9IFN0cmluZyhtYXliZU1lc3NhZ2UpOyAvLyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcsIGNoZWNrIGZvciBzdWJzdGl0dXRpb25zLlxuXG4gIGlmICh0eXBlb2YgbWF5YmVNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgdmFyIFJFR0VYUCA9IC8oJT8pKCUoW2pkc10pKS9nO1xuICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoUkVHRVhQLCBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZWQsIHB0biwgZmxhZykge1xuICAgICAgICB2YXIgYXJnID0gYXJncy5zaGlmdCgpO1xuXG4gICAgICAgIHN3aXRjaCAoZmxhZykge1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgYXJnICs9ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgYXJnID0gcGFyc2VGbG9hdChhcmcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzLnVuc2hpZnQoYXJnKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfSk7XG4gICAgfVxuICB9IC8vIEFyZ3VtZW50cyB0aGF0IHJlbWFpbiBhZnRlciBmb3JtYXR0aW5nLlxuXG5cbiAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3JtYXR0ZWQgKz0gJyAnICsgU3RyaW5nKGFyZ3NbaV0pO1xuICAgIH1cbiAgfSAvLyBVcGRhdGUgZXNjYXBlZCAlJSB2YWx1ZXMuXG5cblxuICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvJXsyLDJ9L2csICclJyk7XG4gIHJldHVybiBTdHJpbmcoZm9ybWF0dGVkKTtcbn1cbmZ1bmN0aW9uIGlzU3luY2hyb25vdXNYSFJTdXBwb3J0ZWQoKSB7XG4gIHJldHVybiAhISh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmZlYXR1cmVQb2xpY3kgJiYgd2luZG93LmRvY3VtZW50LmZlYXR1cmVQb2xpY3kuYWxsb3dzRmVhdHVyZSgnc3luYy14aHInKSk7XG59XG5mdW5jdGlvbiBndCgpIHtcbiAgdmFyIGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gIHJldHVybiBjb21wYXJlVmVyc2lvbnMoYSwgYikgPT09IDE7XG59XG5mdW5jdGlvbiBndGUoKSB7XG4gIHZhciBhID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIGIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICByZXR1cm4gY29tcGFyZVZlcnNpb25zKGEsIGIpID4gLTE7XG59XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4uLy4uL2J1aWxkL29zcy1leHBlcmltZW50YWwvcmVhY3QtZGVidWctdG9vbHMvaW5kZXguanNcbnZhciByZWFjdF9kZWJ1Z190b29scyA9IF9fd2VicGFja19yZXF1aXJlX18oOTg3KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vIFRoaXMgbGlzdCBzaG91bGQgYmUga2VwdCB1cGRhdGVkIHRvIHJlZmxlY3QgYWRkaXRpb25zIHRvICdzaGFyZWQvUmVhY3RTeW1ib2xzJy5cbi8vIERldlRvb2xzIGNhbid0IGltcG9ydCBzeW1ib2xzIGZyb20gJ3NoYXJlZC9SZWFjdFN5bWJvbHMnIGRpcmVjdGx5IGZvciB0d28gcmVhc29uczpcbi8vIDEuIERldlRvb2xzIHJlcXVpcmVzIHN5bWJvbHMgd2hpY2ggbWF5IGhhdmUgYmVlbiBkZWxldGVkIGluIG1vcmUgcmVjZW50IHZlcnNpb25zIChlLmcuIGNvbmN1cnJlbnQgbW9kZSlcbi8vIDIuIERldlRvb2xzIG11c3Qgc3VwcG9ydCBib3RoIFN5bWJvbCBhbmQgbnVtZXJpYyBmb3JtcyBvZiBlYWNoIHN5bWJvbDtcbi8vICAgIFNpbmNlIGUuZy4gc3RhbmRhbG9uZSBEZXZUb29scyBydW5zIGluIGEgc2VwYXJhdGUgcHJvY2VzcywgaXQgY2FuJ3QgcmVseSBvbiBpdHMgb3duIEVTIGNhcGFiaWxpdGllcy5cbnZhciBDT05DVVJSRU5UX01PREVfTlVNQkVSID0gMHhlYWNmO1xudmFyIENPTkNVUlJFTlRfTU9ERV9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5jb25jdXJyZW50X21vZGUpJztcbnZhciBDT05URVhUX05VTUJFUiA9IDB4ZWFjZTtcbnZhciBDT05URVhUX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmNvbnRleHQpJztcbnZhciBTRVJWRVJfQ09OVEVYVF9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5zZXJ2ZXJfY29udGV4dCknO1xudmFyIERFUFJFQ0FURURfQVNZTkNfTU9ERV9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5hc3luY19tb2RlKSc7XG52YXIgRUxFTUVOVF9OVU1CRVIgPSAweGVhYzc7XG52YXIgRUxFTUVOVF9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5lbGVtZW50KSc7XG52YXIgREVCVUdfVFJBQ0lOR19NT0RFX05VTUJFUiA9IDB4ZWFlMTtcbnZhciBERUJVR19UUkFDSU5HX01PREVfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QuZGVidWdfdHJhY2VfbW9kZSknO1xudmFyIFJlYWN0U3ltYm9sc19GT1JXQVJEX1JFRl9OVU1CRVIgPSAweGVhZDA7XG52YXIgUmVhY3RTeW1ib2xzX0ZPUldBUkRfUkVGX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmZvcndhcmRfcmVmKSc7XG52YXIgRlJBR01FTlRfTlVNQkVSID0gMHhlYWNiO1xudmFyIEZSQUdNRU5UX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmZyYWdtZW50KSc7XG52YXIgUmVhY3RTeW1ib2xzX0xBWllfTlVNQkVSID0gMHhlYWQ0O1xudmFyIFJlYWN0U3ltYm9sc19MQVpZX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmxhenkpJztcbnZhciBSZWFjdFN5bWJvbHNfTUVNT19OVU1CRVIgPSAweGVhZDM7XG52YXIgUmVhY3RTeW1ib2xzX01FTU9fU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QubWVtbyknO1xudmFyIFBPUlRBTF9OVU1CRVIgPSAweGVhY2E7XG52YXIgUE9SVEFMX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnBvcnRhbCknO1xudmFyIFBST0ZJTEVSX05VTUJFUiA9IDB4ZWFkMjtcbnZhciBQUk9GSUxFUl9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5wcm9maWxlciknO1xudmFyIFBST1ZJREVSX05VTUJFUiA9IDB4ZWFjZDtcbnZhciBQUk9WSURFUl9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5wcm92aWRlciknO1xudmFyIFNDT1BFX05VTUJFUiA9IDB4ZWFkNztcbnZhciBTQ09QRV9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5zY29wZSknO1xudmFyIFNUUklDVF9NT0RFX05VTUJFUiA9IDB4ZWFjYztcbnZhciBTVFJJQ1RfTU9ERV9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5zdHJpY3RfbW9kZSknO1xudmFyIFJlYWN0U3ltYm9sc19TVVNQRU5TRV9OVU1CRVIgPSAweGVhZDE7XG52YXIgUmVhY3RTeW1ib2xzX1NVU1BFTlNFX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnN1c3BlbnNlKSc7XG52YXIgUmVhY3RTeW1ib2xzX1NVU1BFTlNFX0xJU1RfTlVNQkVSID0gMHhlYWQ4O1xudmFyIFJlYWN0U3ltYm9sc19TVVNQRU5TRV9MSVNUX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnN1c3BlbnNlX2xpc3QpJztcbnZhciBTRVJWRVJfQ09OVEVYVF9ERUZBVUxUX1ZBTFVFX05PVF9MT0FERURfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3Quc2VydmVyX2NvbnRleHQuZGVmYXVsdFZhbHVlKSc7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9jb25maWcvRGV2VG9vbHNGZWF0dXJlRmxhZ3MuY29yZS1vc3MuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBUaGlzIGZpbGUgaXMgZm9ya2VkIGJldHdlZW4gZGlmZmVyZW50IERldlRvb2xzIGltcGxlbWVudGF0aW9ucy5cbiAqIEl0IHNob3VsZCBuZXZlciBiZSBpbXBvcnRlZCBkaXJlY3RseSFcbiAqIEl0IHNob3VsZCBhbHdheXMgYmUgaW1wb3J0ZWQgZnJvbSBcInJlYWN0LWRldnRvb2xzLWZlYXR1cmUtZmxhZ3NcIi5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG52YXIgY29uc29sZU1hbmFnZWRCeURldlRvb2xzRHVyaW5nU3RyaWN0TW9kZSA9IGZhbHNlO1xudmFyIGVuYWJsZUxvZ2dlciA9IGZhbHNlO1xudmFyIGVuYWJsZVN0eWxlWEZlYXR1cmVzID0gZmFsc2U7XG52YXIgaXNJbnRlcm5hbEZhY2Vib29rQnVpbGQgPSBmYWxzZTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIERvIG5vdCBlZGl0IHRoZSBjb2RlIGJlbG93LlxuICogSXQgZW5zdXJlcyB0aGlzIGZvcmsgZXhwb3J0cyB0aGUgc2FtZSB0eXBlcyBhcyB0aGUgZGVmYXVsdCBmbGFncyBmaWxlLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy8gRmxvdyBtYWdpYyB0byB2ZXJpZnkgdGhlIGV4cG9ydHMgb2YgdGhpcyBmaWxlIG1hdGNoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLlxubnVsbDtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9zaGFyZWQvb2JqZWN0SXMuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxudmFyIG9iamVjdElzID0gLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxudHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGlzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBjb25zdCBzaGFyZWRfb2JqZWN0SXMgPSAob2JqZWN0SXMpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3NoYXJlZC9oYXNPd25Qcm9wZXJ0eS5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHlfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBjb25zdCBzaGFyZWRfaGFzT3duUHJvcGVydHkgPSAoaGFzT3duUHJvcGVydHlfaGFzT3duUHJvcGVydHkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9TdHlsZVgvdXRpbHMuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG52YXIgY2FjaGVkU3R5bGVOYW1lVG9WYWx1ZU1hcCA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldFN0eWxlWERhdGEoZGF0YSkge1xuICB2YXIgc291cmNlcyA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc29sdmVkU3R5bGVzID0ge307XG4gIGNyYXdsRGF0YShkYXRhLCBzb3VyY2VzLCByZXNvbHZlZFN0eWxlcyk7XG4gIHJldHVybiB7XG4gICAgc291cmNlczogQXJyYXkuZnJvbShzb3VyY2VzKS5zb3J0KCksXG4gICAgcmVzb2x2ZWRTdHlsZXM6IHJlc29sdmVkU3R5bGVzXG4gIH07XG59XG5mdW5jdGlvbiBjcmF3bERhdGEoZGF0YSwgc291cmNlcywgcmVzb2x2ZWRTdHlsZXMpIHtcbiAgaWYgKGRhdGEgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzcmNfaXNBcnJheShkYXRhKSkge1xuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIGlmIChlbnRyeSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNyY19pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICBjcmF3bERhdGEoZW50cnksIHNvdXJjZXMsIHJlc29sdmVkU3R5bGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyYXdsT2JqZWN0UHJvcGVydGllcyhlbnRyeSwgc291cmNlcywgcmVzb2x2ZWRTdHlsZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNyYXdsT2JqZWN0UHJvcGVydGllcyhkYXRhLCBzb3VyY2VzLCByZXNvbHZlZFN0eWxlcyk7XG4gIH1cblxuICByZXNvbHZlZFN0eWxlcyA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhyZXNvbHZlZFN0eWxlcykuc29ydCgpKTtcbn1cblxuZnVuY3Rpb24gY3Jhd2xPYmplY3RQcm9wZXJ0aWVzKGVudHJ5LCBzb3VyY2VzLCByZXNvbHZlZFN0eWxlcykge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGVudHJ5KTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBlbnRyeVtrZXldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChrZXkgPT09IHZhbHVlKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTsgdGhpcyBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIHN0eWxlJ3Mgc291cmNlL2ZpbGUvbW9kdWxlLlxuICAgICAgICBzb3VyY2VzLmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlRm9yU3R5bGVOYW1lKHZhbHVlKTtcblxuICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgcmVzb2x2ZWRTdHlsZXNba2V5XSA9IHByb3BlcnR5VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5lc3RlZFN0eWxlID0ge307XG4gICAgICByZXNvbHZlZFN0eWxlc1trZXldID0gbmVzdGVkU3R5bGU7XG4gICAgICBjcmF3bERhdGEoW3ZhbHVlXSwgc291cmNlcywgbmVzdGVkU3R5bGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWVGb3JTdHlsZU5hbWUoc3R5bGVOYW1lKSB7XG4gIGlmIChjYWNoZWRTdHlsZU5hbWVUb1ZhbHVlTWFwLmhhcyhzdHlsZU5hbWUpKSB7XG4gICAgcmV0dXJuIGNhY2hlZFN0eWxlTmFtZVRvVmFsdWVNYXAuZ2V0KHN0eWxlTmFtZSk7XG4gIH1cblxuICBmb3IgKHZhciBzdHlsZVNoZWV0SW5kZXggPSAwOyBzdHlsZVNoZWV0SW5kZXggPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IHN0eWxlU2hlZXRJbmRleCsrKSB7XG4gICAgdmFyIHN0eWxlU2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tzdHlsZVNoZWV0SW5kZXhdO1xuICAgIHZhciBydWxlcyA9IG51bGw7IC8vIHRoaXMgbWlnaHQgdGhyb3cgaWYgQ09SUyBydWxlcyBhcmUgZW5mb3JjZWQgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzc29tLTEvI3RoZS1jc3NzdHlsZXNoZWV0LWludGVyZmFjZVxuXG4gICAgdHJ5IHtcbiAgICAgIHJ1bGVzID0gc3R5bGVTaGVldC5jc3NSdWxlcztcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcnVsZXMubGVuZ3RoOyBydWxlSW5kZXgrKykge1xuICAgICAgaWYgKCEocnVsZXNbcnVsZUluZGV4XSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBydWxlID0gcnVsZXNbcnVsZUluZGV4XTtcbiAgICAgIHZhciBjc3NUZXh0ID0gcnVsZS5jc3NUZXh0LFxuICAgICAgICAgIHNlbGVjdG9yVGV4dCA9IHJ1bGUuc2VsZWN0b3JUZXh0LFxuICAgICAgICAgIHN0eWxlID0gcnVsZS5zdHlsZTtcblxuICAgICAgaWYgKHNlbGVjdG9yVGV4dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChzZWxlY3RvclRleHQuc3RhcnRzV2l0aChcIi5cIi5jb25jYXQoc3R5bGVOYW1lKSkpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBjc3NUZXh0Lm1hdGNoKC97ICooW2EtelxcLV0rKTovKTtcblxuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGNhY2hlZFN0eWxlTmFtZVRvVmFsdWVNYXAuc2V0KHN0eWxlTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2RldnRvb2xzL2NvbnN0YW50cy5qc1xudmFyIENIQU5HRV9MT0dfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21haW4vcGFja2FnZXMvcmVhY3QtZGV2dG9vbHMvQ0hBTkdFTE9HLm1kJztcbnZhciBVTlNVUFBPUlRFRF9WRVJTSU9OX1VSTCA9ICdodHRwczovL3JlYWN0anMub3JnL2Jsb2cvMjAxOS8wOC8xNS9uZXctcmVhY3QtZGV2dG9vbHMuaHRtbCNob3ctZG8taS1nZXQtdGhlLW9sZC12ZXJzaW9uLWJhY2snO1xudmFyIFJFQUNUX0RFVlRPT0xTX1dPUktQTEFDRV9VUkwgPSAnaHR0cHM6Ly9mYnVybC5jb20vcmVhY3QtZGV2dG9vbHMtd29ya3BsYWNlLWdyb3VwJztcbnZhciBUSEVNRV9TVFlMRVMgPSB7XG4gIGxpZ2h0OiB7XG4gICAgJy0tY29sb3ItYXR0cmlidXRlLW5hbWUnOiAnI2VmNjYzMicsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLW5hbWUtbm90LWVkaXRhYmxlJzogJyMyMzI3MmYnLFxuICAgICctLWNvbG9yLWF0dHJpYnV0ZS1uYW1lLWludmVydGVkJzogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLXZhbHVlJzogJyMxYTFhYTYnLFxuICAgICctLWNvbG9yLWF0dHJpYnV0ZS12YWx1ZS1pbnZlcnRlZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtZWRpdGFibGUtdmFsdWUnOiAnIzFhMWFhNicsXG4gICAgJy0tY29sb3ItYmFja2dyb3VuZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyJzogJ3JnYmEoMCwgMTM2LCAyNTAsIDAuMSknLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtaW5hY3RpdmUnOiAnI2U1ZTVlNScsXG4gICAgJy0tY29sb3ItYmFja2dyb3VuZC1pbnZhbGlkJzogJyNmZmYwZjAnLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtc2VsZWN0ZWQnOiAnIzAwODhmYScsXG4gICAgJy0tY29sb3ItYnV0dG9uLWJhY2tncm91bmQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItYnV0dG9uLWJhY2tncm91bmQtZm9jdXMnOiAnI2VkZWRlZCcsXG4gICAgJy0tY29sb3ItYnV0dG9uJzogJyM1ZjY2NzMnLFxuICAgICctLWNvbG9yLWJ1dHRvbi1kaXNhYmxlZCc6ICcjY2ZkMWQ1JyxcbiAgICAnLS1jb2xvci1idXR0b24tYWN0aXZlJzogJyMwMDg4ZmEnLFxuICAgICctLWNvbG9yLWJ1dHRvbi1mb2N1cyc6ICcjMjMyNzJmJyxcbiAgICAnLS1jb2xvci1idXR0b24taG92ZXInOiAnIzIzMjcyZicsXG4gICAgJy0tY29sb3ItYm9yZGVyJzogJyNlZWVlZWUnLFxuICAgICctLWNvbG9yLWNvbW1pdC1kaWQtbm90LXJlbmRlci1maWxsJzogJyNjZmQxZDUnLFxuICAgICctLWNvbG9yLWNvbW1pdC1kaWQtbm90LXJlbmRlci1maWxsLXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWRpZC1ub3QtcmVuZGVyLXBhdHRlcm4nOiAnI2NmZDFkNScsXG4gICAgJy0tY29sb3ItY29tbWl0LWRpZC1ub3QtcmVuZGVyLXBhdHRlcm4tdGV4dCc6ICcjMzMzMzMzJyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtMCc6ICcjMzdhZmE5JyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtMSc6ICcjNjNiMTllJyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtMic6ICcjODBiMzkzJyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtMyc6ICcjOTdiNDg4JyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtNCc6ICcjYWJiNjdkJyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtNSc6ICcjYmViNzcxJyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtNic6ICcjY2ZiOTY1JyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtNyc6ICcjZGZiYTU3JyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtOCc6ICcjZWZiYjQ5JyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtOSc6ICcjZmViYzM4JyxcbiAgICAnLS1jb2xvci1jb21taXQtZ3JhZGllbnQtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb21wb25lbnQtbmFtZSc6ICcjNmE1MWIyJyxcbiAgICAnLS1jb2xvci1jb21wb25lbnQtbmFtZS1pbnZlcnRlZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1jb21wb25lbnQtYmFkZ2UtYmFja2dyb3VuZCc6ICdyZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1iYWRnZS1iYWNrZ3JvdW5kLWludmVydGVkJzogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSknLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1iYWRnZS1jb3VudCc6ICcjNzc3ZDg4JyxcbiAgICAnLS1jb2xvci1jb21wb25lbnQtYmFkZ2UtY291bnQtaW52ZXJ0ZWQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLWVycm9yLWJhZGdlLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1iYWNrZ3JvdW5kJzogJyNmZmYwZjAnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItYm9yZGVyJzogJyNmZmQ2ZDYnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItaWNvbic6ICcjZWIzOTQxJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLWVycm9yLXRleHQnOiAnI2ZlMmUzMScsXG4gICAgJy0tY29sb3ItY29uc29sZS13YXJuaW5nLWJhZGdlLXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItY29uc29sZS13YXJuaW5nLWJhY2tncm91bmQnOiAnI2ZmZmJlNScsXG4gICAgJy0tY29sb3ItY29uc29sZS13YXJuaW5nLWJvcmRlcic6ICcjZmZmNWMxJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctaWNvbic6ICcjZjRiZDAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctdGV4dCc6ICcjNjQ0NjBjJyxcbiAgICAnLS1jb2xvci1jb250ZXh0LWJhY2tncm91bmQnOiAncmdiYSgwLDAsMCwuOSknLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZC1ob3Zlcic6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZC1zZWxlY3RlZCc6ICcjMTc4ZmI5JyxcbiAgICAnLS1jb2xvci1jb250ZXh0LWJvcmRlcic6ICcjM2Q0MjRhJyxcbiAgICAnLS1jb2xvci1jb250ZXh0LXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItY29udGV4dC10ZXh0LXNlbGVjdGVkJzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLWRpbSc6ICcjNzc3ZDg4JyxcbiAgICAnLS1jb2xvci1kaW1tZXInOiAnI2NmZDFkNScsXG4gICAgJy0tY29sb3ItZGltbWVzdCc6ICcjZWZmMGYxJyxcbiAgICAnLS1jb2xvci1lcnJvci1iYWNrZ3JvdW5kJzogJ2hzbCgwLCAxMDAlLCA5NyUpJyxcbiAgICAnLS1jb2xvci1lcnJvci1ib3JkZXInOiAnaHNsKDAsIDEwMCUsIDkyJSknLFxuICAgICctLWNvbG9yLWVycm9yLXRleHQnOiAnI2ZmMDAwMCcsXG4gICAgJy0tY29sb3ItZXhwYW5kLWNvbGxhcHNlLXRvZ2dsZSc6ICcjNzc3ZDg4JyxcbiAgICAnLS1jb2xvci1saW5rJzogJyMwMDAwZmYnLFxuICAgICctLWNvbG9yLW1vZGFsLWJhY2tncm91bmQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KScsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnBtLWJhY2tncm91bmQnOiAnI2VmZjBmMScsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnBtLXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnVtYmVyJzogJyMwMDg4ZmEnLFxuICAgICctLWNvbG9yLXByaW1pdGl2ZS1ob29rLWJhZGdlLWJhY2tncm91bmQnOiAnI2U1ZTVlNScsXG4gICAgJy0tY29sb3ItcHJpbWl0aXZlLWhvb2stYmFkZ2UtdGV4dCc6ICcjNWY2NjczJyxcbiAgICAnLS1jb2xvci1yZWNvcmQtYWN0aXZlJzogJyNmYzNhNGInLFxuICAgICctLWNvbG9yLXJlY29yZC1ob3Zlcic6ICcjMzU3OGU1JyxcbiAgICAnLS1jb2xvci1yZWNvcmQtaW5hY3RpdmUnOiAnIzAwODhmYScsXG4gICAgJy0tY29sb3ItcmVzaXplLWJhcic6ICcjZWVlZWVlJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWFjdGl2ZSc6ICcjZGNkY2RjJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWJvcmRlcic6ICcjZDFkMWQxJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWRvdCc6ICcjMzMzMzMzJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1pbnRlcm5hbC1tb2R1bGUnOiAnI2QxZDFkMScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtaW50ZXJuYWwtbW9kdWxlLWhvdmVyJzogJyNjOWM5YzknLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLWludGVybmFsLW1vZHVsZS10ZXh0JzogJyM0NDQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5hdGl2ZS1ldmVudCc6ICcjY2NjJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uYXRpdmUtZXZlbnQtaG92ZXInOiAnI2FhYScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtbmV0d29yay1wcmltYXJ5JzogJyNmY2YzZGMnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5ldHdvcmstcHJpbWFyeS1ob3Zlcic6ICcjZjBlN2QxJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXNlY29uZGFyeSc6ICcjZWZjNDU3JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXNlY29uZGFyeS1ob3Zlcic6ICcjZTNiYTUyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1wcmlvcml0eS1iYWNrZ3JvdW5kJzogJyNmNmY2ZjYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXByaW9yaXR5LWJvcmRlcic6ICcjZWVlZWVlJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS11c2VyLXRpbWluZyc6ICcjYzljYWNkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS11c2VyLXRpbWluZy1ob3Zlcic6ICcjOTM5NTlhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1pZGxlJzogJyNkM2U1ZjYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWlkbGUtaG92ZXInOiAnI2MzZDllZicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcmVuZGVyJzogJyM5ZmMzZjMnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXJlbmRlci1ob3Zlcic6ICcjODNhZmU5JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1yZW5kZXItdGV4dCc6ICcjMTEzNjVlJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1jb21taXQnOiAnI2M4OGZmMCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtY29tbWl0LWhvdmVyJzogJyNiMjgxZDYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWNvbW1pdC10ZXh0JzogJyMzZTJjNGEnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzJzogJyNiMjgxZDYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzLWhvdmVyJzogJyM5ZDcxYmQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzLXRleHQnOiAnIzNlMmM0YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcGFzc2l2ZS1lZmZlY3RzJzogJyNiMjgxZDYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXBhc3NpdmUtZWZmZWN0cy1ob3Zlcic6ICcjOWQ3MWJkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1wYXNzaXZlLWVmZmVjdHMtdGV4dCc6ICcjM2UyYzRhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zY2hlZHVsZSc6ICcjOWZjM2YzJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zY2hlZHVsZS1ob3Zlcic6ICcjMjY4M0UyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZWplY3RlZCc6ICcjZjFjYzE0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZWplY3RlZC1ob3Zlcic6ICcjZmZkZjM3JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZXNvbHZlZCc6ICcjYTZlNTlmJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZXNvbHZlZC1ob3Zlcic6ICcjODlkMjgxJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS11bnJlc29sdmVkJzogJyNjOWNhY2QnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXN1c3BlbnNlLXVucmVzb2x2ZWQtaG92ZXInOiAnIzkzOTU5YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtdGhyb3duLWVycm9yJzogJyNlZTE2MzgnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRocm93bi1lcnJvci1ob3Zlcic6ICcjZGExMDMwJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS10ZXh0LWNvbG9yJzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRleHQtZGltLWNvbG9yJzogJyNjY2MnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXdvcmstYm9yZGVyJzogJyNlZWVlZWUnLFxuICAgICctLWNvbG9yLXNlYXJjaC1tYXRjaCc6ICd5ZWxsb3cnLFxuICAgICctLWNvbG9yLXNlYXJjaC1tYXRjaC1jdXJyZW50JzogJyNmNzkyM2InLFxuICAgICctLWNvbG9yLXNlbGVjdGVkLXRyZWUtaGlnaGxpZ2h0LWFjdGl2ZSc6ICdyZ2JhKDAsIDEzNiwgMjUwLCAwLjEpJyxcbiAgICAnLS1jb2xvci1zZWxlY3RlZC10cmVlLWhpZ2hsaWdodC1pbmFjdGl2ZSc6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICAnLS1jb2xvci1zY3JvbGwtY2FyZXQnOiAncmdiYSgxNTAsIDE1MCwgMTUwLCAwLjUpJyxcbiAgICAnLS1jb2xvci10YWItc2VsZWN0ZWQtYm9yZGVyJzogJyMwMDg4ZmEnLFxuICAgICctLWNvbG9yLXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItdGV4dC1pbnZhbGlkJzogJyNmZjAwMDAnLFxuICAgICctLWNvbG9yLXRleHQtc2VsZWN0ZWQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItdG9nZ2xlLWJhY2tncm91bmQtaW52YWxpZCc6ICcjZmMzYTRiJyxcbiAgICAnLS1jb2xvci10b2dnbGUtYmFja2dyb3VuZC1vbic6ICcjMDA4OGZhJyxcbiAgICAnLS1jb2xvci10b2dnbGUtYmFja2dyb3VuZC1vZmYnOiAnI2NmZDFkNScsXG4gICAgJy0tY29sb3ItdG9nZ2xlLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3Itd2FybmluZy1iYWNrZ3JvdW5kJzogJyNmYjM2NTUnLFxuICAgICctLWNvbG9yLXdhcm5pbmctYmFja2dyb3VuZC1ob3Zlcic6ICcjZjgyMDQyJyxcbiAgICAnLS1jb2xvci13YXJuaW5nLXRleHQtY29sb3InOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3Itd2FybmluZy10ZXh0LWNvbG9yLWludmVydGVkJzogJyNmZDRkNjknLFxuICAgIC8vIFRoZSBzdHlsZXMgYmVsb3cgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoICdyb290LmNzcydcbiAgICAvLyBUaGV5IGFyZSByZXBlYXRlZCB0aGVyZSBiZWNhdXNlIHRoZXkncmUgdXNlZCBieSBlLmcuIHRvb2x0aXBzIG9yIGNvbnRleHQgbWVudXNcbiAgICAvLyB3aGljaCBnZXQgcmVuZGVyZWQgb3V0c2lkZSBvZiB0aGUgRE9NIHN1YnRyZWUgKHdoZXJlIG5vcm1hbCB0aGVtZS9zdHlsZXMgYXJlIHdyaXR0ZW4pLlxuICAgICctLWNvbG9yLXNjcm9sbC10aHVtYic6ICcjYzJjMmMyJyxcbiAgICAnLS1jb2xvci1zY3JvbGwtdHJhY2snOiAnI2ZhZmFmYScsXG4gICAgJy0tY29sb3ItdG9vbHRpcC1iYWNrZ3JvdW5kJzogJ3JnYmEoMCwgMCwgMCwgMC45KScsXG4gICAgJy0tY29sb3ItdG9vbHRpcC10ZXh0JzogJyNmZmZmZmYnXG4gIH0sXG4gIGRhcms6IHtcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtbmFtZSc6ICcjOWQ4N2QyJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtbmFtZS1ub3QtZWRpdGFibGUnOiAnI2VkZWRlZCcsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLW5hbWUtaW52ZXJ0ZWQnOiAnIzI4MjgyOCcsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLXZhbHVlJzogJyNjZWRhZTAnLFxuICAgICctLWNvbG9yLWF0dHJpYnV0ZS12YWx1ZS1pbnZlcnRlZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtZWRpdGFibGUtdmFsdWUnOiAneWVsbG93JyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kJzogJyMyODJjMzQnLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtaG92ZXInOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kLWluYWN0aXZlJzogJyMzZDQyNGEnLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtaW52YWxpZCc6ICcjNWMwMDAwJyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkJzogJyMxNzhmYjknLFxuICAgICctLWNvbG9yLWJ1dHRvbi1iYWNrZ3JvdW5kJzogJyMyODJjMzQnLFxuICAgICctLWNvbG9yLWJ1dHRvbi1iYWNrZ3JvdW5kLWZvY3VzJzogJyMzZDQyNGEnLFxuICAgICctLWNvbG9yLWJ1dHRvbic6ICcjYWZiM2I5JyxcbiAgICAnLS1jb2xvci1idXR0b24tYWN0aXZlJzogJyM2MWRhZmInLFxuICAgICctLWNvbG9yLWJ1dHRvbi1kaXNhYmxlZCc6ICcjNGY1NzY2JyxcbiAgICAnLS1jb2xvci1idXR0b24tZm9jdXMnOiAnI2EyZTlmYycsXG4gICAgJy0tY29sb3ItYnV0dG9uLWhvdmVyJzogJyNlZGVkZWQnLFxuICAgICctLWNvbG9yLWJvcmRlcic6ICcjM2Q0MjRhJyxcbiAgICAnLS1jb2xvci1jb21taXQtZGlkLW5vdC1yZW5kZXItZmlsbCc6ICcjNzc3ZDg4JyxcbiAgICAnLS1jb2xvci1jb21taXQtZGlkLW5vdC1yZW5kZXItZmlsbC10ZXh0JzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLWNvbW1pdC1kaWQtbm90LXJlbmRlci1wYXR0ZXJuJzogJyM2NjZjNzcnLFxuICAgICctLWNvbG9yLWNvbW1pdC1kaWQtbm90LXJlbmRlci1wYXR0ZXJuLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTAnOiAnIzM3YWZhOScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTEnOiAnIzYzYjE5ZScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTInOiAnIzgwYjM5MycsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTMnOiAnIzk3YjQ4OCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTQnOiAnI2FiYjY3ZCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTUnOiAnI2JlYjc3MScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTYnOiAnI2NmYjk2NScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTcnOiAnI2RmYmE1NycsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTgnOiAnI2VmYmI0OScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTknOiAnI2ZlYmMzOCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LW5hbWUnOiAnIzYxZGFmYicsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LW5hbWUtaW52ZXJ0ZWQnOiAnIzI4MjgyOCcsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWJhY2tncm91bmQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KScsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWJhY2tncm91bmQtaW52ZXJ0ZWQnOiAncmdiYSgwLCAwLCAwLCAwLjI1KScsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWNvdW50JzogJyM4Zjk0OWQnLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1iYWRnZS1jb3VudC1pbnZlcnRlZCc6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItYmFkZ2UtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLWVycm9yLWJhY2tncm91bmQnOiAnIzI5MDAwMCcsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1ib3JkZXInOiAnIzVjMDAwMCcsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1pY29uJzogJyNlYjM5NDEnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItdGV4dCc6ICcjZmM3ZjdmJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYmFkZ2UtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYmFja2dyb3VuZCc6ICcjMzMyYjAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYm9yZGVyJzogJyM2NjU1MDAnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtd2FybmluZy1pY29uJzogJyNmNGJkMDAnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtd2FybmluZy10ZXh0JzogJyNmNWYyZWQnLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZCc6ICdyZ2JhKDI1NSwyNTUsMjU1LC45NSknLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZC1ob3Zlcic6ICdyZ2JhKDAsIDEzNiwgMjUwLCAwLjEpJyxcbiAgICAnLS1jb2xvci1jb250ZXh0LWJhY2tncm91bmQtc2VsZWN0ZWQnOiAnIzAwODhmYScsXG4gICAgJy0tY29sb3ItY29udGV4dC1ib3JkZXInOiAnI2VlZWVlZScsXG4gICAgJy0tY29sb3ItY29udGV4dC10ZXh0JzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLWNvbnRleHQtdGV4dC1zZWxlY3RlZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1kaW0nOiAnIzhmOTQ5ZCcsXG4gICAgJy0tY29sb3ItZGltbWVyJzogJyM3NzdkODgnLFxuICAgICctLWNvbG9yLWRpbW1lc3QnOiAnIzRmNTc2NicsXG4gICAgJy0tY29sb3ItZXJyb3ItYmFja2dyb3VuZCc6ICcjMjAwJyxcbiAgICAnLS1jb2xvci1lcnJvci1ib3JkZXInOiAnIzkwMCcsXG4gICAgJy0tY29sb3ItZXJyb3ItdGV4dCc6ICcjZjU1JyxcbiAgICAnLS1jb2xvci1leHBhbmQtY29sbGFwc2UtdG9nZ2xlJzogJyM4Zjk0OWQnLFxuICAgICctLWNvbG9yLWxpbmsnOiAnIzYxZGFmYicsXG4gICAgJy0tY29sb3ItbW9kYWwtYmFja2dyb3VuZCc6ICdyZ2JhKDAsIDAsIDAsIDAuNzUpJyxcbiAgICAnLS1jb2xvci1icmlkZ2UtdmVyc2lvbi1ucG0tYmFja2dyb3VuZCc6ICdyZ2JhKDAsIDAsIDAsIDAuMjUpJyxcbiAgICAnLS1jb2xvci1icmlkZ2UtdmVyc2lvbi1ucG0tdGV4dCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1icmlkZ2UtdmVyc2lvbi1udW1iZXInOiAneWVsbG93JyxcbiAgICAnLS1jb2xvci1wcmltaXRpdmUtaG9vay1iYWRnZS1iYWNrZ3JvdW5kJzogJ3JnYmEoMCwgMCwgMCwgMC4yNSknLFxuICAgICctLWNvbG9yLXByaW1pdGl2ZS1ob29rLWJhZGdlLXRleHQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICAnLS1jb2xvci1yZWNvcmQtYWN0aXZlJzogJyNmYzNhNGInLFxuICAgICctLWNvbG9yLXJlY29yZC1ob3Zlcic6ICcjYTJlOWZjJyxcbiAgICAnLS1jb2xvci1yZWNvcmQtaW5hY3RpdmUnOiAnIzYxZGFmYicsXG4gICAgJy0tY29sb3ItcmVzaXplLWJhcic6ICcjMjgyYzM0JyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWFjdGl2ZSc6ICcjMzEzNjNmJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWJvcmRlcic6ICcjM2Q0MjRhJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWRvdCc6ICcjY2ZkMWQ1JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1pbnRlcm5hbC1tb2R1bGUnOiAnIzMwMzU0MicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtaW50ZXJuYWwtbW9kdWxlLWhvdmVyJzogJyMzNjNiNGEnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLWludGVybmFsLW1vZHVsZS10ZXh0JzogJyM3Zjg4OTknLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5hdGl2ZS1ldmVudCc6ICcjYjJiMmIyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uYXRpdmUtZXZlbnQtaG92ZXInOiAnIzk0OTQ5NCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtbmV0d29yay1wcmltYXJ5JzogJyNmY2YzZGMnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5ldHdvcmstcHJpbWFyeS1ob3Zlcic6ICcjZTNkYmM1JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXNlY29uZGFyeSc6ICcjZWZjNDU3JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXNlY29uZGFyeS1ob3Zlcic6ICcjZDZhZjRkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1wcmlvcml0eS1iYWNrZ3JvdW5kJzogJyMxZDIxMjknLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXByaW9yaXR5LWJvcmRlcic6ICcjMjgyYzM0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS11c2VyLXRpbWluZyc6ICcjYzljYWNkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS11c2VyLXRpbWluZy1ob3Zlcic6ICcjOTM5NTlhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1pZGxlJzogJyMzZDQ4NWInLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWlkbGUtaG92ZXInOiAnIzQ2NTI2OScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcmVuZGVyJzogJyMyNjgzRTInLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXJlbmRlci1ob3Zlcic6ICcjMWE3NmQ0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1yZW5kZXItdGV4dCc6ICcjMTEzNjVlJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1jb21taXQnOiAnIzczMWZhZCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtY29tbWl0LWhvdmVyJzogJyM2MTFiOTQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWNvbW1pdC10ZXh0JzogJyNlNWMxZmYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzJzogJyM2MTFiOTQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzLWhvdmVyJzogJyM1MTE2N2EnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzLXRleHQnOiAnI2U1YzFmZicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcGFzc2l2ZS1lZmZlY3RzJzogJyM2MTFiOTQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXBhc3NpdmUtZWZmZWN0cy1ob3Zlcic6ICcjNTExNjdhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1wYXNzaXZlLWVmZmVjdHMtdGV4dCc6ICcjZTVjMWZmJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zY2hlZHVsZSc6ICcjMjY4M0UyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zY2hlZHVsZS1ob3Zlcic6ICcjMWE3NmQ0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZWplY3RlZCc6ICcjZjFjYzE0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZWplY3RlZC1ob3Zlcic6ICcjZTRjMDBmJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZXNvbHZlZCc6ICcjYTZlNTlmJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZXNvbHZlZC1ob3Zlcic6ICcjODlkMjgxJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS11bnJlc29sdmVkJzogJyNjOWNhY2QnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXN1c3BlbnNlLXVucmVzb2x2ZWQtaG92ZXInOiAnIzkzOTU5YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtdGhyb3duLWVycm9yJzogJyNmYjM2NTUnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRocm93bi1lcnJvci1ob3Zlcic6ICcjZjgyMDQyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS10ZXh0LWNvbG9yJzogJyMyODJjMzQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRleHQtZGltLWNvbG9yJzogJyM1NTViNjYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXdvcmstYm9yZGVyJzogJyMzZDQyNGEnLFxuICAgICctLWNvbG9yLXNlYXJjaC1tYXRjaCc6ICd5ZWxsb3cnLFxuICAgICctLWNvbG9yLXNlYXJjaC1tYXRjaC1jdXJyZW50JzogJyNmNzkyM2InLFxuICAgICctLWNvbG9yLXNlbGVjdGVkLXRyZWUtaGlnaGxpZ2h0LWFjdGl2ZSc6ICdyZ2JhKDIzLCAxNDMsIDE4NSwgMC4xNSknLFxuICAgICctLWNvbG9yLXNlbGVjdGVkLXRyZWUtaGlnaGxpZ2h0LWluYWN0aXZlJzogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSknLFxuICAgICctLWNvbG9yLXNjcm9sbC1jYXJldCc6ICcjNGY1NzY2JyxcbiAgICAnLS1jb2xvci1zaGFkb3cnOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICAnLS1jb2xvci10YWItc2VsZWN0ZWQtYm9yZGVyJzogJyMxNzhmYjknLFxuICAgICctLWNvbG9yLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItdGV4dC1pbnZhbGlkJzogJyNmZjgwODAnLFxuICAgICctLWNvbG9yLXRleHQtc2VsZWN0ZWQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItdG9nZ2xlLWJhY2tncm91bmQtaW52YWxpZCc6ICcjZmMzYTRiJyxcbiAgICAnLS1jb2xvci10b2dnbGUtYmFja2dyb3VuZC1vbic6ICcjMTc4ZmI5JyxcbiAgICAnLS1jb2xvci10b2dnbGUtYmFja2dyb3VuZC1vZmYnOiAnIzc3N2Q4OCcsXG4gICAgJy0tY29sb3ItdG9nZ2xlLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3Itd2FybmluZy1iYWNrZ3JvdW5kJzogJyNlZTE2MzgnLFxuICAgICctLWNvbG9yLXdhcm5pbmctYmFja2dyb3VuZC1ob3Zlcic6ICcjZGExMDMwJyxcbiAgICAnLS1jb2xvci13YXJuaW5nLXRleHQtY29sb3InOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3Itd2FybmluZy10ZXh0LWNvbG9yLWludmVydGVkJzogJyNlZTE2MzgnLFxuICAgIC8vIFRoZSBzdHlsZXMgYmVsb3cgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoICdyb290LmNzcydcbiAgICAvLyBUaGV5IGFyZSByZXBlYXRlZCB0aGVyZSBiZWNhdXNlIHRoZXkncmUgdXNlZCBieSBlLmcuIHRvb2x0aXBzIG9yIGNvbnRleHQgbWVudXNcbiAgICAvLyB3aGljaCBnZXQgcmVuZGVyZWQgb3V0c2lkZSBvZiB0aGUgRE9NIHN1YnRyZWUgKHdoZXJlIG5vcm1hbCB0aGVtZS9zdHlsZXMgYXJlIHdyaXR0ZW4pLlxuICAgICctLWNvbG9yLXNjcm9sbC10aHVtYic6ICcjYWZiM2I5JyxcbiAgICAnLS1jb2xvci1zY3JvbGwtdHJhY2snOiAnIzMxMzY0MCcsXG4gICAgJy0tY29sb3ItdG9vbHRpcC1iYWNrZ3JvdW5kJzogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSknLFxuICAgICctLWNvbG9yLXRvb2x0aXAtdGV4dCc6ICcjMDAwMDAwJ1xuICB9LFxuICBjb21wYWN0OiB7XG4gICAgJy0tZm9udC1zaXplLW1vbm9zcGFjZS1zbWFsbCc6ICc5cHgnLFxuICAgICctLWZvbnQtc2l6ZS1tb25vc3BhY2Utbm9ybWFsJzogJzExcHgnLFxuICAgICctLWZvbnQtc2l6ZS1tb25vc3BhY2UtbGFyZ2UnOiAnMTVweCcsXG4gICAgJy0tZm9udC1zaXplLXNhbnMtc21hbGwnOiAnMTBweCcsXG4gICAgJy0tZm9udC1zaXplLXNhbnMtbm9ybWFsJzogJzEycHgnLFxuICAgICctLWZvbnQtc2l6ZS1zYW5zLWxhcmdlJzogJzE0cHgnLFxuICAgICctLWxpbmUtaGVpZ2h0LWRhdGEnOiAnMThweCdcbiAgfSxcbiAgY29tZm9ydGFibGU6IHtcbiAgICAnLS1mb250LXNpemUtbW9ub3NwYWNlLXNtYWxsJzogJzEwcHgnLFxuICAgICctLWZvbnQtc2l6ZS1tb25vc3BhY2Utbm9ybWFsJzogJzEzcHgnLFxuICAgICctLWZvbnQtc2l6ZS1tb25vc3BhY2UtbGFyZ2UnOiAnMTdweCcsXG4gICAgJy0tZm9udC1zaXplLXNhbnMtc21hbGwnOiAnMTJweCcsXG4gICAgJy0tZm9udC1zaXplLXNhbnMtbm9ybWFsJzogJzE0cHgnLFxuICAgICctLWZvbnQtc2l6ZS1zYW5zLWxhcmdlJzogJzE2cHgnLFxuICAgICctLWxpbmUtaGVpZ2h0LWRhdGEnOiAnMjJweCdcbiAgfVxufTsgLy8gSEFDS1xuLy9cbi8vIFNvbWV0aW1lcyB0aGUgaW5saW5lIHRhcmdldCBpcyByZW5kZXJlZCBiZWZvcmUgcm9vdCBzdHlsZXMgYXJlIGFwcGxpZWQsXG4vLyB3aGljaCB3b3VsZCByZXN1bHQgaW4gZS5nLiBOYU4gaXRlbVNpemUgYmVpbmcgcGFzc2VkIHRvIHJlYWN0LXdpbmRvdyBsaXN0LlxuXG52YXIgQ09NRk9SVEFCTEVfTElORV9IRUlHSFQgPSBwYXJzZUludChUSEVNRV9TVFlMRVMuY29tZm9ydGFibGVbJy0tbGluZS1oZWlnaHQtZGF0YSddLCAxMCk7XG52YXIgQ09NUEFDVF9MSU5FX0hFSUdIVCA9IHBhcnNlSW50KFRIRU1FX1NUWUxFUy5jb21wYWN0WyctLWxpbmUtaGVpZ2h0LWRhdGEnXSwgMTApO1xuXG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtdGltZWxpbmUvc3JjL2NvbnN0YW50cy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbnZhciBSRUFDVF9UT1RBTF9OVU1fTEFORVMgPSAzMTsgLy8gSW5jcmVtZW50IHRoaXMgbnVtYmVyIGFueSB0aW1lIGEgYmFja3dhcmRzIGJyZWFraW5nIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBwcm9maWxlciBtZXRhZGF0YS5cblxudmFyIFNDSEVEVUxJTkdfUFJPRklMRVJfVkVSU0lPTiA9IDE7XG52YXIgU05BUFNIT1RfTUFYX0hFSUdIVCA9IDYwO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9EZXZUb29sc0NvbnNvbGVQYXRjaGluZy5qc1xuZnVuY3Rpb24gRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IERldlRvb2xzQ29uc29sZVBhdGNoaW5nX293bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuLy8gVGhpcyBpcyBhIERldlRvb2xzIGZvcmsgb2Ygc2hhcmVkL0NvbnNvbGVQYXRjaGluZ0Rldi5cbi8vIFRoZSBzaGFyZWQgY29uc29sZSBwYXRjaGluZyBjb2RlIGlzIERFVi1vbmx5LlxuLy8gV2UgY2FuJ3QgdXNlIGl0IHNpbmNlIERldlRvb2xzIG9ubHkgc2hpcHMgcHJvZHVjdGlvbiBidWlsZHMuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICB2YXIgcHJvcHMgPSB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICBpbmZvOiBwcm9wcyxcbiAgICAgIGxvZzogcHJvcHMsXG4gICAgICB3YXJuOiBwcm9wcyxcbiAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgIH0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gIH1cblxuICBkaXNhYmxlZERlcHRoKys7XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIGRpc2FibGVkRGVwdGgtLTtcblxuICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIHZhciBwcm9wcyA9IHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgIGxvZzogRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgfSksXG4gICAgICBpbmZvOiBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgfSksXG4gICAgICB3YXJuOiBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgfSksXG4gICAgICBlcnJvcjogRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICB9KSxcbiAgICAgIGdyb3VwOiBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgIH0pLFxuICAgICAgZ3JvdXBDb2xsYXBzZWQ6IERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZChEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgfSksXG4gICAgICBncm91cEVuZDogRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICB9KVxuICAgIH0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gIH1cblxuICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICBjb25zb2xlLmVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9EZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWUuanNcbmZ1bmN0aW9uIERldlRvb2xzQ29tcG9uZW50U3RhY2tGcmFtZV90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IERldlRvb2xzQ29tcG9uZW50U3RhY2tGcmFtZV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgRGV2VG9vbHNDb21wb25lbnRTdGFja0ZyYW1lX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBEZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWVfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG4vLyBUaGlzIGlzIGEgRGV2VG9vbHMgZm9yayBvZiBSZWFjdENvbXBvbmVudFN0YWNrRnJhbWUuXG4vLyBUaGlzIGZvcmsgZW5hYmxlcyBEZXZUb29scyB0byB1c2UgdGhlIHNhbWUgXCJuYXRpdmVcIiBjb21wb25lbnQgc3RhY2sgZm9ybWF0LFxuLy8gd2hpbGUgc3RpbGwgbWFpbnRhaW5pbmcgc3VwcG9ydCBmb3IgbXVsdGlwbGUgcmVuZGVyZXIgdmVyc2lvbnNcbi8vICh3aGljaCB1c2UgZGlmZmVyZW50IHZhbHVlcyBmb3IgUmVhY3RUeXBlT2ZXb3JrKS5cbiAvLyBUaGUgc2hhcmVkIGNvbnNvbGUgcGF0Y2hpbmcgY29kZSBpcyBERVYtb25seS5cbi8vIFdlIGNhbid0IHVzZSBpdCBzaW5jZSBEZXZUb29scyBvbmx5IHNoaXBzIHByb2R1Y3Rpb24gYnVpbGRzLlxuXG5cbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBvd25lckZuKSB7XG4gIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICB0cnkge1xuICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgfVxuICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxuaWYgKGZhbHNlKSB7IHZhciBQb3NzaWJseVdlYWtNYXA7IH1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0LCBjdXJyZW50RGlzcGF0Y2hlclJlZikge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGZhbHNlKSB7IHZhciBmcmFtZTsgfVxuXG4gIHZhciBjb250cm9sO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHJlZW50cnkgPSB0cnVlOyAvLyBPdmVycmlkZSB0aGUgZGlzcGF0Y2hlciBzbyBlZmZlY3RzIHNjaGVkdWxlZCBieSB0aGlzIHNoYWxsb3cgcmVuZGVyIGFyZSB0aHJvd24gYXdheS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHVubGlrZSB0aGUgY29kZSB0aGlzIHdhcyBmb3JrZWQgZnJvbSAoaW4gUmVhY3RDb21wb25lbnRTdGFja0ZyYW1lKVxuICAvLyBEZXZUb29scyBzaG91bGQgb3ZlcnJpZGUgdGhlIGRpc3BhdGNoZXIgZXZlbiB3aGVuIERldlRvb2xzIGlzIGNvbXBpbGVkIGluIHByb2R1Y3Rpb24gbW9kZSxcbiAgLy8gYmVjYXVzZSB0aGUgYXBwIGl0c2VsZiBtYXkgYmUgaW4gZGV2ZWxvcG1lbnQgbW9kZSBhbmQgbG9nIGVycm9ycy93YXJuaW5ncy5cblxuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyID0gY3VycmVudERpc3BhdGNoZXJSZWYuY3VycmVudDtcbiAgY3VycmVudERpc3BhdGNoZXJSZWYuY3VycmVudCA9IG51bGw7XG4gIGRpc2FibGVMb2dzKCk7XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gRmFrZSgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IERldlRvb2xzQ29tcG9uZW50U3RhY2tGcmFtZV90eXBlb2YoUmVmbGVjdCkpID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHt9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgICBjdXJyZW50RGlzcGF0Y2hlclJlZi5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgIHJlZW5hYmxlTG9ncygpO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIGlmIChmYWxzZSkge31cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgb3duZXJGbiwgY3VycmVudERpc3BhdGNoZXJSZWYpIHtcbiAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoY3RvciwgdHJ1ZSwgY3VycmVudERpc3BhdGNoZXJSZWYpO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBvd25lckZuLCBjdXJyZW50RGlzcGF0Y2hlclJlZikge1xuICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBvd25lckZuLCBjdXJyZW50RGlzcGF0Y2hlclJlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSksIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSwgb3duZXJGbik7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFNVU1BFTlNFX05VTUJFUjpcbiAgICBjYXNlIFNVU1BFTlNFX1NZTUJPTF9TVFJJTkc6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJywgb3duZXJGbik7XG5cbiAgICBjYXNlIFNVU1BFTlNFX0xJU1RfTlVNQkVSOlxuICAgIGNhc2UgU1VTUEVOU0VfTElTVF9TWU1CT0xfU1RSSU5HOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnLCBvd25lckZuKTtcbiAgfVxuXG4gIGlmIChEZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWVfdHlwZW9mKHR5cGUpID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBGT1JXQVJEX1JFRl9OVU1CRVI6XG4gICAgICBjYXNlIEZPUldBUkRfUkVGX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIsIG93bmVyRm4sIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcblxuICAgICAgY2FzZSBNRU1PX05VTUJFUjpcbiAgICAgIGNhc2UgTUVNT19TWU1CT0xfU1RSSU5HOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgb3duZXJGbiwgY3VycmVudERpc3BhdGNoZXJSZWYpO1xuXG4gICAgICBjYXNlIExBWllfTlVNQkVSOlxuICAgICAgY2FzZSBMQVpZX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBvd25lckZuLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvRGV2VG9vbHNGaWJlckNvbXBvbmVudFN0YWNrLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vIFRoaXMgaXMgYSBEZXZUb29scyBmb3JrIG9mIFJlYWN0RmliZXJDb21wb25lbnRTdGFjay5cbi8vIFRoaXMgZm9yayBlbmFibGVzIERldlRvb2xzIHRvIHVzZSB0aGUgc2FtZSBcIm5hdGl2ZVwiIGNvbXBvbmVudCBzdGFjayBmb3JtYXQsXG4vLyB3aGlsZSBzdGlsbCBtYWludGFpbmluZyBzdXBwb3J0IGZvciBtdWx0aXBsZSByZW5kZXJlciB2ZXJzaW9uc1xuLy8gKHdoaWNoIHVzZSBkaWZmZXJlbnQgdmFsdWVzIGZvciBSZWFjdFR5cGVPZldvcmspLlxuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKHdvcmtUYWdNYXAsIHdvcmtJblByb2dyZXNzLCBjdXJyZW50RGlzcGF0Y2hlclJlZikge1xuICB2YXIgSG9zdENvbXBvbmVudCA9IHdvcmtUYWdNYXAuSG9zdENvbXBvbmVudCxcbiAgICAgIExhenlDb21wb25lbnQgPSB3b3JrVGFnTWFwLkxhenlDb21wb25lbnQsXG4gICAgICBTdXNwZW5zZUNvbXBvbmVudCA9IHdvcmtUYWdNYXAuU3VzcGVuc2VDb21wb25lbnQsXG4gICAgICBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSB3b3JrVGFnTWFwLlN1c3BlbnNlTGlzdENvbXBvbmVudCxcbiAgICAgIEZ1bmN0aW9uQ29tcG9uZW50ID0gd29ya1RhZ01hcC5GdW5jdGlvbkNvbXBvbmVudCxcbiAgICAgIEluZGV0ZXJtaW5hdGVDb21wb25lbnQgPSB3b3JrVGFnTWFwLkluZGV0ZXJtaW5hdGVDb21wb25lbnQsXG4gICAgICBTaW1wbGVNZW1vQ29tcG9uZW50ID0gd29ya1RhZ01hcC5TaW1wbGVNZW1vQ29tcG9uZW50LFxuICAgICAgRm9yd2FyZFJlZiA9IHdvcmtUYWdNYXAuRm9yd2FyZFJlZixcbiAgICAgIENsYXNzQ29tcG9uZW50ID0gd29ya1RhZ01hcC5DbGFzc0NvbXBvbmVudDtcbiAgdmFyIG93bmVyID0gIGZhbHNlID8gMCA6IG51bGw7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUod29ya0luUHJvZ3Jlc3MudHlwZSwgb3duZXIpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jywgb3duZXIpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnLCBvd25lcik7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jywgb3duZXIpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlLCBvd25lciwgY3VycmVudERpc3BhdGNoZXJSZWYpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlLnJlbmRlciwgb3duZXIsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKHdvcmtJblByb2dyZXNzLnR5cGUsIG93bmVyLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5mdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya1RhZ01hcCwgd29ya0luUHJvZ3Jlc3MsIGN1cnJlbnREaXNwYXRjaGVyUmVmKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgZG8ge1xuICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKHdvcmtUYWdNYXAsIG5vZGUsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3Byb2ZpbGluZ0hvb2tzLmpzXG5mdW5jdGlvbiBwcm9maWxpbmdIb29rc19zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gcHJvZmlsaW5nSG9va3NfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBwcm9maWxpbmdIb29rc19pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHByb2ZpbGluZ0hvb2tzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgcHJvZmlsaW5nSG9va3Nfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gcHJvZmlsaW5nSG9va3Nfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIHByb2ZpbGluZ0hvb2tzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gcHJvZmlsaW5nSG9va3NfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIHByb2ZpbGluZ0hvb2tzX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBwcm9maWxpbmdIb29rc19hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBwcm9maWxpbmdIb29rc19pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBwcm9maWxpbmdIb29rc19hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBwcm9maWxpbmdIb29rc190eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IHByb2ZpbGluZ0hvb2tzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBwcm9maWxpbmdIb29rc190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gcHJvZmlsaW5nSG9va3NfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuIC8vIEFkZCBwYWRkaW5nIHRvIHRoZSBzdGFydC9zdG9wIHRpbWUgb2YgdGhlIHByb2ZpbGUuXG4vLyBUaGlzIG1ha2VzIHRoZSBVSSBuaWNlciB0byB1c2UuXG5cbnZhciBUSU1FX09GRlNFVCA9IDEwO1xudmFyIHBlcmZvcm1hbmNlVGFyZ2V0ID0gbnVsbDsgLy8gSWYgcGVyZm9ybWFuY2UgZXhpc3RzIGFuZCBzdXBwb3J0cyB0aGUgc3Vic2V0IG9mIHRoZSBVc2VyIFRpbWluZyBBUEkgdGhhdCB3ZSByZXF1aXJlLlxuXG52YXIgc3VwcG9ydHNVc2VyVGltaW5nID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG50eXBlb2YgcGVyZm9ybWFuY2UubWFyayA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG50eXBlb2YgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBzdXBwb3J0c1VzZXJUaW1pbmdWMyA9IGZhbHNlO1xuXG5pZiAoc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gIHZhciBDSEVDS19WM19NQVJLID0gJ19fdjMnO1xuICB2YXIgbWFya09wdGlvbnMgPSB7fTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1hcmtPcHRpb25zLCAnc3RhcnRUaW1lJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgc3VwcG9ydHNVc2VyVGltaW5nVjMgPSB0cnVlO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHt9XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcGVyZm9ybWFuY2UubWFyayhDSEVDS19WM19NQVJLLCBtYXJrT3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7Ly8gSWdub3JlXG4gIH0gZmluYWxseSB7XG4gICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhDSEVDS19WM19NQVJLKTtcbiAgfVxufVxuXG5pZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgcGVyZm9ybWFuY2VUYXJnZXQgPSBwZXJmb3JtYW5jZTtcbn0gLy8gU29tZSBlbnZpcm9ubWVudHMgKGUuZy4gUmVhY3QgTmF0aXZlIC8gSGVybWVzKSBkb24ndCBzdXBwb3J0IHRoZSBwZXJmb3JtYW5jZSBBUEkgeWV0LlxuXG5cbnZhciBwcm9maWxpbmdIb29rc19nZXRDdXJyZW50VGltZSA9IC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbih0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogcHJvZmlsaW5nSG9va3NfdHlwZW9mKHBlcmZvcm1hbmNlKSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbn0gOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufTsgLy8gTW9ja2luZyB0aGUgUGVyZm9ybWFuY2UgT2JqZWN0IChhbmQgVXNlciBUaW1pbmcgQVBJcykgZm9yIHRlc3RpbmcgaXMgZnJhZ2lsZS5cbi8vIFRoaXMgQVBJIGFsbG93cyB0ZXN0cyB0byBkaXJlY3RseSBvdmVycmlkZSB0aGUgVXNlciBUaW1pbmcgQVBJcy5cblxuZnVuY3Rpb24gc2V0UGVyZm9ybWFuY2VNb2NrX09OTFlfRk9SX1RFU1RJTkcocGVyZm9ybWFuY2VNb2NrKSB7XG4gIHBlcmZvcm1hbmNlVGFyZ2V0ID0gcGVyZm9ybWFuY2VNb2NrO1xuICBzdXBwb3J0c1VzZXJUaW1pbmcgPSBwZXJmb3JtYW5jZU1vY2sgIT09IG51bGw7XG4gIHN1cHBvcnRzVXNlclRpbWluZ1YzID0gcGVyZm9ybWFuY2VNb2NrICE9PSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlUHJvZmlsaW5nSG9va3MoX3JlZikge1xuICB2YXIgZ2V0RGlzcGxheU5hbWVGb3JGaWJlciA9IF9yZWYuZ2V0RGlzcGxheU5hbWVGb3JGaWJlcixcbiAgICAgIGdldElzUHJvZmlsaW5nID0gX3JlZi5nZXRJc1Byb2ZpbGluZyxcbiAgICAgIGdldExhbmVMYWJlbE1hcCA9IF9yZWYuZ2V0TGFuZUxhYmVsTWFwLFxuICAgICAgd29ya1RhZ01hcCA9IF9yZWYud29ya1RhZ01hcCxcbiAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmID0gX3JlZi5jdXJyZW50RGlzcGF0Y2hlclJlZixcbiAgICAgIHJlYWN0VmVyc2lvbiA9IF9yZWYucmVhY3RWZXJzaW9uO1xuICB2YXIgY3VycmVudEJhdGNoVUlEID0gMDtcbiAgdmFyIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUgPSBudWxsO1xuICB2YXIgY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjayA9IFtdO1xuICB2YXIgY3VycmVudFRpbWVsaW5lRGF0YSA9IG51bGw7XG4gIHZhciBjdXJyZW50RmliZXJTdGFja3MgPSBuZXcgTWFwKCk7XG4gIHZhciBpc1Byb2ZpbGluZyA9IGZhbHNlO1xuICB2YXIgbmV4dFJlbmRlclNob3VsZFN0YXJ0TmV3QmF0Y2ggPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnZXRSZWxhdGl2ZVRpbWUoKSB7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gcHJvZmlsaW5nSG9va3NfZ2V0Q3VycmVudFRpbWUoKTtcblxuICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YS5zdGFydFRpbWUgPT09IDApIHtcbiAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5zdGFydFRpbWUgPSBjdXJyZW50VGltZSAtIFRJTUVfT0ZGU0VUO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudFRpbWUgLSBjdXJyZW50VGltZWxpbmVEYXRhLnN0YXJ0VGltZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEludGVybmFsTW9kdWxlUmFuZ2VzKCkge1xuICAgIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5nZXRJbnRlcm5hbE1vZHVsZVJhbmdlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQXNrIHRoZSBEZXZUb29scyBob29rIGZvciBtb2R1bGUgcmFuZ2VzIHRoYXQgbWF5IGhhdmUgYmVlbiByZXBvcnRlZCBieSB0aGUgY3VycmVudCByZW5kZXJlcihzKS5cbiAgICAgIC8vIERvbid0IGRvIHRoaXMgZWFnZXJseSBsaWtlIHRoZSBsYW5lVG9MYWJlbE1hcCxcbiAgICAgIC8vIGJlY2F1c2Ugc29tZSBtb2R1bGVzIG1pZ2h0IG5vdCB5ZXQgaGF2ZSByZWdpc3RlcmVkIHRoZWlyIGJvdW5kYXJpZXMgd2hlbiB0aGUgcmVuZGVyZXIgaXMgaW5qZWN0ZWQuXG4gICAgICB2YXIgcmFuZ2VzID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmdldEludGVybmFsTW9kdWxlUmFuZ2VzKCk7IC8vIFRoaXMgY2hlY2sgd291bGQgbm90IGJlIHJlcXVpcmVkLFxuICAgICAgLy8gZXhjZXB0IHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhpbmdzIHRvIG92ZXJyaWRlIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5cblxuXG4gICAgICBpZiAoc2hhcmVkX2lzQXJyYXkocmFuZ2VzKSkge1xuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGltZWxpbmVEYXRhKCkge1xuICAgIHJldHVybiBjdXJyZW50VGltZWxpbmVEYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gbGFuZVRvTGFuZXNBcnJheShsYW5lcykge1xuICAgIHZhciBsYW5lc0FycmF5ID0gW107XG4gICAgdmFyIGxhbmUgPSAxO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IFJFQUNUX1RPVEFMX05VTV9MQU5FUzsgaW5kZXgrKykge1xuICAgICAgaWYgKGxhbmUgJiBsYW5lcykge1xuICAgICAgICBsYW5lc0FycmF5LnB1c2gobGFuZSk7XG4gICAgICB9XG5cbiAgICAgIGxhbmUgKj0gMjtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZXNBcnJheTtcbiAgfVxuXG4gIHZhciBsYW5lVG9MYWJlbE1hcCA9IHR5cGVvZiBnZXRMYW5lTGFiZWxNYXAgPT09ICdmdW5jdGlvbicgPyBnZXRMYW5lTGFiZWxNYXAoKSA6IG51bGw7XG5cbiAgZnVuY3Rpb24gbWFya01ldGFkYXRhKCkge1xuICAgIG1hcmtBbmRDbGVhcihcIi0tcmVhY3QtdmVyc2lvbi1cIi5jb25jYXQocmVhY3RWZXJzaW9uKSk7XG4gICAgbWFya0FuZENsZWFyKFwiLS1wcm9maWxlci12ZXJzaW9uLVwiLmNvbmNhdChTQ0hFRFVMSU5HX1BST0ZJTEVSX1ZFUlNJT04pKTtcbiAgICB2YXIgcmFuZ2VzID0gZ2V0SW50ZXJuYWxNb2R1bGVSYW5nZXMoKTtcblxuICAgIGlmIChyYW5nZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTtcblxuICAgICAgICBpZiAoc2hhcmVkX2lzQXJyYXkocmFuZ2UpICYmIHJhbmdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBfcmFuZ2VzJGkgPSBwcm9maWxpbmdIb29rc19zbGljZWRUb0FycmF5KHJhbmdlc1tpXSwgMiksXG4gICAgICAgICAgICAgIHN0YXJ0U3RhY2tGcmFtZSA9IF9yYW5nZXMkaVswXSxcbiAgICAgICAgICAgICAgc3RvcFN0YWNrRnJhbWUgPSBfcmFuZ2VzJGlbMV07XG5cbiAgICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLXJlYWN0LWludGVybmFsLW1vZHVsZS1zdGFydC1cIi5jb25jYXQoc3RhcnRTdGFja0ZyYW1lKSk7XG4gICAgICAgICAgbWFya0FuZENsZWFyKFwiLS1yZWFjdC1pbnRlcm5hbC1tb2R1bGUtc3RvcC1cIi5jb25jYXQoc3RvcFN0YWNrRnJhbWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsYW5lVG9MYWJlbE1hcCAhPSBudWxsKSB7XG4gICAgICB2YXIgbGFiZWxzID0gQXJyYXkuZnJvbShsYW5lVG9MYWJlbE1hcC52YWx1ZXMoKSkuam9pbignLCcpO1xuICAgICAgbWFya0FuZENsZWFyKFwiLS1yZWFjdC1sYW5lLWxhYmVscy1cIi5jb25jYXQobGFiZWxzKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0FuZENsZWFyKG1hcmtOYW1lKSB7XG4gICAgLy8gVGhpcyBtZXRob2Qgd29uJ3QgYmUgY2FsbGVkIHVubGVzcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQsIHNvIHdlIGNhbiBza2lwIHRoZSBleHRyYSB0eXBlb2YgY2hlY2suXG4gICAgcGVyZm9ybWFuY2VUYXJnZXQubWFyayhtYXJrTmFtZSk7XG4gICAgcGVyZm9ybWFuY2VUYXJnZXQuY2xlYXJNYXJrcyhtYXJrTmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRSZWFjdE1lYXN1cmVTdGFydGVkKHR5cGUsIGxhbmVzKSB7XG4gICAgLy8gRGVjaWRlIHdoYXQgZGVwdGggdGhpIHdvcmsgc2hvdWxkIGJlIHJlbmRlcmVkIGF0LCBiYXNlZCBvbiB3aGF0J3Mgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suXG4gICAgLy8gSXQncyBva2F5IHRvIHJlbmRlciBvdmVyIHRvcCBvZiBcImlkbGVcIiB3b3JrIGJ1dCBldmVyeXRoaW5nIGVsc2Ugc2hvdWxkIGJlIG9uIGl0cyBvd24gcm93LlxuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdG9wID0gY3VycmVudFJlYWN0TWVhc3VyZXNTdGFja1tjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgZGVwdGggPSB0b3AudHlwZSA9PT0gJ3JlbmRlci1pZGxlJyA/IHRvcC5kZXB0aCA6IHRvcC5kZXB0aCArIDE7XG4gICAgfVxuXG4gICAgdmFyIGxhbmVzQXJyYXkgPSBsYW5lVG9MYW5lc0FycmF5KGxhbmVzKTtcbiAgICB2YXIgcmVhY3RNZWFzdXJlID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGJhdGNoVUlEOiBjdXJyZW50QmF0Y2hVSUQsXG4gICAgICBkZXB0aDogZGVwdGgsXG4gICAgICBsYW5lczogbGFuZXNBcnJheSxcbiAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICBkdXJhdGlvbjogMFxuICAgIH07XG4gICAgY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5wdXNoKHJlYWN0TWVhc3VyZSk7XG5cbiAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgdmFyIF9jdXJyZW50VGltZWxpbmVEYXRhID0gY3VycmVudFRpbWVsaW5lRGF0YSxcbiAgICAgICAgICBiYXRjaFVJRFRvTWVhc3VyZXNNYXAgPSBfY3VycmVudFRpbWVsaW5lRGF0YS5iYXRjaFVJRFRvTWVhc3VyZXNNYXAsXG4gICAgICAgICAgbGFuZVRvUmVhY3RNZWFzdXJlTWFwID0gX2N1cnJlbnRUaW1lbGluZURhdGEubGFuZVRvUmVhY3RNZWFzdXJlTWFwO1xuICAgICAgdmFyIHJlYWN0TWVhc3VyZXMgPSBiYXRjaFVJRFRvTWVhc3VyZXNNYXAuZ2V0KGN1cnJlbnRCYXRjaFVJRCk7XG5cbiAgICAgIGlmIChyZWFjdE1lYXN1cmVzICE9IG51bGwpIHtcbiAgICAgICAgcmVhY3RNZWFzdXJlcy5wdXNoKHJlYWN0TWVhc3VyZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXRjaFVJRFRvTWVhc3VyZXNNYXAuc2V0KGN1cnJlbnRCYXRjaFVJRCwgW3JlYWN0TWVhc3VyZV0pO1xuICAgICAgfVxuXG4gICAgICBsYW5lc0FycmF5LmZvckVhY2goZnVuY3Rpb24gKGxhbmUpIHtcbiAgICAgICAgcmVhY3RNZWFzdXJlcyA9IGxhbmVUb1JlYWN0TWVhc3VyZU1hcC5nZXQobGFuZSk7XG5cbiAgICAgICAgaWYgKHJlYWN0TWVhc3VyZXMpIHtcbiAgICAgICAgICByZWFjdE1lYXN1cmVzLnB1c2gocmVhY3RNZWFzdXJlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkUmVhY3RNZWFzdXJlQ29tcGxldGVkKHR5cGUpIHtcbiAgICB2YXIgY3VycmVudFRpbWUgPSBnZXRSZWxhdGl2ZVRpbWUoKTtcblxuICAgIGlmIChjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCB0eXBlIFwiJXNcIiBjb21wbGV0ZWQgYXQgJXNtcyB3aGlsZSBjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrIGlzIGVtcHR5LicsIHR5cGUsIGN1cnJlbnRUaW1lKTsgLy8gSWdub3JlIHdvcmsgXCJjb21wbGV0aW9uXCIgdXNlciB0aW1pbmcgbWFyayB0aGF0IGRvZXNuJ3QgY29tcGxldGUgYW55dGhpbmdcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3AgPSBjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrLnBvcCgpO1xuXG4gICAgaWYgKHRvcC50eXBlICE9PSB0eXBlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIHR5cGUgXCIlc1wiIGNvbXBsZXRlZCBhdCAlc21zIGJlZm9yZSBcIiVzXCIgY29tcGxldGVkLicsIHR5cGUsIGN1cnJlbnRUaW1lLCB0b3AudHlwZSk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gVGhpcyBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHdyaXRhYmxlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4gICAgdG9wLmR1cmF0aW9uID0gY3VycmVudFRpbWUgLSB0b3AudGltZXN0YW1wO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEpIHtcbiAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuZHVyYXRpb24gPSBnZXRSZWxhdGl2ZVRpbWUoKSArIFRJTUVfT0ZGU0VUO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21taXRTdGFydGVkKGxhbmVzKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVTdGFydGVkKCdjb21taXQnLCBsYW5lcyk7IC8vIFRPRE8gKHRpbWVsaW5lKSBSZS10aGluayB0aGlzIGFwcHJvYWNoIHRvIFwiYmF0Y2hpbmdcIjsgSSBkb24ndCB0aGluayBpdCB3b3JrcyBmb3IgU3VzcGVuc2Ugb3IgcHJlLXJlbmRlcmluZy5cbiAgICAgIC8vIFRoaXMgaXNzdWUgYXBwbGllcyB0byB0aGUgVXNlciBUaW1pbmcgZGF0YSBhbHNvLlxuXG4gICAgICBuZXh0UmVuZGVyU2hvdWxkU3RhcnROZXdCYXRjaCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoXCItLWNvbW1pdC1zdGFydC1cIi5jb25jYXQobGFuZXMpKTsgLy8gU29tZSBtZXRhZGF0YSBvbmx5IG5lZWRzIHRvIGJlIGxvZ2dlZCBvbmNlIHBlciBzZXNzaW9uLFxuICAgICAgLy8gYnV0IGlmIHByb2ZpbGluZyBpbmZvcm1hdGlvbiBpcyBiZWluZyByZWNvcmRlZCB2aWEgdGhlIFBlcmZvcm1hbmNlIHRhYixcbiAgICAgIC8vIERldlRvb2xzIGhhcyBubyB3YXkgb2Yga25vd2luZyB3aGVuIHRoZSByZWNvcmRpbmcgc3RhcnRzLlxuICAgICAgLy8gQmVjYXVzZSBvZiB0aGF0LCB3ZSBsb2cgdGhpZSB0eXBlIG9mIGRhdGEgcGVyaW9kaWNhbGx5IChvbmNlIHBlciBjb21taXQpLlxuXG4gICAgICBtYXJrTWV0YWRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tbWl0U3RvcHBlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJlY29yZFJlYWN0TWVhc3VyZUNvbXBsZXRlZCgnY29tbWl0Jyk7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVDb21wbGV0ZWQoJ3JlbmRlci1pZGxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tY29tbWl0LXN0b3AnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcikge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICAgICAgICB0eXBlOiAncmVuZGVyJyxcbiAgICAgICAgICAgIHdhcm5pbmc6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLWNvbXBvbmVudC1yZW5kZXItc3RhcnQtXCIuY29uY2F0KGNvbXBvbmVudE5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5jb21wb25lbnRNZWFzdXJlcy5wdXNoKGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUpO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZS5kdXJhdGlvbiA9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICBnZXRSZWxhdGl2ZVRpbWUoKSAtIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUudGltZXN0YW1wO1xuICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcignLS1jb21wb25lbnQtcmVuZGVyLXN0b3AnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkKGZpYmVyKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nIHx8IHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIC8vIFRPRE8gKHRpbWVsaW5lKSBSZWNvcmQgYW5kIGNhY2hlIGNvbXBvbmVudCBzdGFja1xuICAgICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0ge1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICdsYXlvdXQtZWZmZWN0LW1vdW50JyxcbiAgICAgICAgICAgIHdhcm5pbmc6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLWNvbXBvbmVudC1sYXlvdXQtZWZmZWN0LW1vdW50LXN0YXJ0LVwiLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5jb21wb25lbnRNZWFzdXJlcy5wdXNoKGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUpO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZS5kdXJhdGlvbiA9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICBnZXRSZWxhdGl2ZVRpbWUoKSAtIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUudGltZXN0YW1wO1xuICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcignLS1jb21wb25lbnQtbGF5b3V0LWVmZmVjdC1tb3VudC1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkKGZpYmVyKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nIHx8IHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIC8vIFRPRE8gKHRpbWVsaW5lKSBSZWNvcmQgYW5kIGNhY2hlIGNvbXBvbmVudCBzdGFja1xuICAgICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0ge1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICdsYXlvdXQtZWZmZWN0LXVubW91bnQnLFxuICAgICAgICAgICAgd2FybmluZzogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgIG1hcmtBbmRDbGVhcihcIi0tY29tcG9uZW50LWxheW91dC1lZmZlY3QtdW5tb3VudC1zdGFydC1cIi5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5jb21wb25lbnRNZWFzdXJlcy5wdXNoKGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUpO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZS5kdXJhdGlvbiA9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICBnZXRSZWxhdGl2ZVRpbWUoKSAtIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUudGltZXN0YW1wO1xuICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcignLS1jb21wb25lbnQtbGF5b3V0LWVmZmVjdC11bm1vdW50LXN0b3AnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZChmaWJlcikge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICAgICAgICB0eXBlOiAncGFzc2l2ZS1lZmZlY3QtbW91bnQnLFxuICAgICAgICAgICAgd2FybmluZzogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgIG1hcmtBbmRDbGVhcihcIi0tY29tcG9uZW50LXBhc3NpdmUtZWZmZWN0LW1vdW50LXN0YXJ0LVwiLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSkge1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuY29tcG9uZW50TWVhc3VyZXMucHVzaChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUuZHVyYXRpb24gPSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgZ2V0UmVsYXRpdmVUaW1lKCkgLSBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlLnRpbWVzdGFtcDtcbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tY29tcG9uZW50LXBhc3NpdmUtZWZmZWN0LW1vdW50LXN0b3AnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkKGZpYmVyKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nIHx8IHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIC8vIFRPRE8gKHRpbWVsaW5lKSBSZWNvcmQgYW5kIGNhY2hlIGNvbXBvbmVudCBzdGFja1xuICAgICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0ge1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzaXZlLWVmZmVjdC11bm1vdW50JyxcbiAgICAgICAgICAgIHdhcm5pbmc6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLWNvbXBvbmVudC1wYXNzaXZlLWVmZmVjdC11bm1vdW50LXN0YXJ0LVwiLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5jb21wb25lbnRNZWFzdXJlcy5wdXNoKGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUpO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZS5kdXJhdGlvbiA9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICBnZXRSZWxhdGl2ZVRpbWUoKSAtIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUudGltZXN0YW1wO1xuICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcignLS1jb21wb25lbnQtcGFzc2l2ZS1lZmZlY3QtdW5tb3VudC1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudEVycm9yZWQoZmliZXIsIHRocm93blZhbHVlLCBsYW5lcykge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG4gICAgICB2YXIgcGhhc2UgPSBmaWJlci5hbHRlcm5hdGUgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZSc7XG4gICAgICB2YXIgbWVzc2FnZSA9ICcnO1xuXG4gICAgICBpZiAodGhyb3duVmFsdWUgIT09IG51bGwgJiYgcHJvZmlsaW5nSG9va3NfdHlwZW9mKHRocm93blZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRocm93blZhbHVlLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1lc3NhZ2UgPSB0aHJvd25WYWx1ZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhyb3duVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1lc3NhZ2UgPSB0aHJvd25WYWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIC8vIFRPRE8gKHRpbWVsaW5lKSBSZWNvcmQgYW5kIGNhY2hlIGNvbXBvbmVudCBzdGFja1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEudGhyb3duRXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICBwaGFzZTogcGhhc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgICAgdHlwZTogJ3Rocm93bi1lcnJvcidcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgICAgbWFya0FuZENsZWFyKFwiLS1lcnJvci1cIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCItXCIpLmNvbmNhdChwaGFzZSwgXCItXCIpLmNvbmNhdChtZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgY2Fubm90IGhhbmRsZSBwb2x5bW9ycGhpYyBXZWFrTWFwc1xuXG4gIHZhciB3YWtlYWJsZUlEcyA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbiAgdmFyIHdha2VhYmxlSUQgPSAwO1xuXG4gIGZ1bmN0aW9uIGdldFdha2VhYmxlSUQod2FrZWFibGUpIHtcbiAgICBpZiAoIXdha2VhYmxlSURzLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgIHdha2VhYmxlSURzLnNldCh3YWtlYWJsZSwgd2FrZWFibGVJRCsrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FrZWFibGVJRHMuZ2V0KHdha2VhYmxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRTdXNwZW5kZWQoZmliZXIsIHdha2VhYmxlLCBsYW5lcykge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGV2ZW50VHlwZSA9IHdha2VhYmxlSURzLmhhcyh3YWtlYWJsZSkgPyAncmVzdXNwZW5kJyA6ICdzdXNwZW5kJztcbiAgICAgIHZhciBpZCA9IGdldFdha2VhYmxlSUQod2FrZWFibGUpO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG4gICAgICB2YXIgcGhhc2UgPSBmaWJlci5hbHRlcm5hdGUgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZSc7IC8vIEZvbGxvd2luZyB0aGUgbm9uLXN0YW5kYXJkIGZuLmRpc3BsYXlOYW1lIGNvbnZlbnRpb24sXG4gICAgICAvLyBmcmFtZXdvcmtzIGxpa2UgUmVsYXkgbWF5IGFsc28gYW5ub3RhdGUgUHJvbWlzZXMgd2l0aCBhIGRpc3BsYXlOYW1lLFxuICAgICAgLy8gZGVzY3JpYmluZyB3aGF0IG9wZXJhdGlvbi9kYXRhIHRoZSB0aHJvd24gUHJvbWlzZSBpcyByZWxhdGVkIHRvLlxuICAgICAgLy8gV2hlbiB0aGlzIGlzIGF2YWlsYWJsZSB3ZSBzaG91bGQgcGFzcyBpdCBhbG9uZyB0byB0aGUgVGltZWxpbmUuXG5cbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHdha2VhYmxlLmRpc3BsYXlOYW1lIHx8ICcnO1xuICAgICAgdmFyIHN1c3BlbnNlRXZlbnQgPSBudWxsO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgLy8gVE9ETyAodGltZWxpbmUpIFJlY29yZCBhbmQgY2FjaGUgY29tcG9uZW50IHN0YWNrXG4gICAgICAgIHN1c3BlbnNlRXZlbnQgPSB7XG4gICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQpLFxuICAgICAgICAgIHBoYXNlOiBwaGFzZSxcbiAgICAgICAgICBwcm9taXNlTmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgICAgcmVzb2x1dGlvbjogJ3VucmVzb2x2ZWQnLFxuICAgICAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICAgICAgdHlwZTogJ3N1c3BlbnNlJyxcbiAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEpIHtcbiAgICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLnN1c3BlbnNlRXZlbnRzLnB1c2goc3VzcGVuc2VFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgIG1hcmtBbmRDbGVhcihcIi0tc3VzcGVuc2UtXCIuY29uY2F0KGV2ZW50VHlwZSwgXCItXCIpLmNvbmNhdChpZCwgXCItXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIi1cIikuY29uY2F0KHBoYXNlLCBcIi1cIikuY29uY2F0KGxhbmVzLCBcIi1cIikuY29uY2F0KGRpc3BsYXlOYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIHdha2VhYmxlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc3VzcGVuc2VFdmVudCkge1xuICAgICAgICAgIHN1c3BlbnNlRXZlbnQuZHVyYXRpb24gPSBnZXRSZWxhdGl2ZVRpbWUoKSAtIHN1c3BlbnNlRXZlbnQudGltZXN0YW1wO1xuICAgICAgICAgIHN1c3BlbnNlRXZlbnQucmVzb2x1dGlvbiA9ICdyZXNvbHZlZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLXN1c3BlbnNlLXJlc29sdmVkLVwiLmNvbmNhdChpZCwgXCItXCIpLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHN1c3BlbnNlRXZlbnQpIHtcbiAgICAgICAgICBzdXNwZW5zZUV2ZW50LmR1cmF0aW9uID0gZ2V0UmVsYXRpdmVUaW1lKCkgLSBzdXNwZW5zZUV2ZW50LnRpbWVzdGFtcDtcbiAgICAgICAgICBzdXNwZW5zZUV2ZW50LnJlc29sdXRpb24gPSAncmVqZWN0ZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgICAgbWFya0FuZENsZWFyKFwiLS1zdXNwZW5zZS1yZWplY3RlZC1cIi5jb25jYXQoaWQsIFwiLVwiKS5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQobGFuZXMpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJlY29yZFJlYWN0TWVhc3VyZVN0YXJ0ZWQoJ2xheW91dC1lZmZlY3RzJywgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKFwiLS1sYXlvdXQtZWZmZWN0cy1zdGFydC1cIi5jb25jYXQobGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVDb21wbGV0ZWQoJ2xheW91dC1lZmZlY3RzJyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tbGF5b3V0LWVmZmVjdHMtc3RvcCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQobGFuZXMpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJlY29yZFJlYWN0TWVhc3VyZVN0YXJ0ZWQoJ3Bhc3NpdmUtZWZmZWN0cycsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcihcIi0tcGFzc2l2ZS1lZmZlY3RzLXN0YXJ0LVwiLmNvbmNhdChsYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVDb21wbGV0ZWQoJ3Bhc3NpdmUtZWZmZWN0cycpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKCctLXBhc3NpdmUtZWZmZWN0cy1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChuZXh0UmVuZGVyU2hvdWxkU3RhcnROZXdCYXRjaCkge1xuICAgICAgICBuZXh0UmVuZGVyU2hvdWxkU3RhcnROZXdCYXRjaCA9IGZhbHNlO1xuICAgICAgICBjdXJyZW50QmF0Y2hVSUQrKztcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIG5ldyBiYXRjaCBvZiB3b3JrLCB3cmFwIGFuIFwiaWRsZVwiIG1lYXN1cmUgYXJvdW5kIGl0LlxuICAgICAgLy8gTG9nIGl0IGJlZm9yZSB0aGUgXCJyZW5kZXJcIiBtZWFzdXJlIHRvIHByZXNlcnZlIHRoZSBzdGFjayBvcmRlcmluZy5cblxuXG4gICAgICBpZiAoY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5sZW5ndGggPT09IDAgfHwgY3VycmVudFJlYWN0TWVhc3VyZXNTdGFja1tjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrLmxlbmd0aCAtIDFdLnR5cGUgIT09ICdyZW5kZXItaWRsZScpIHtcbiAgICAgICAgcmVjb3JkUmVhY3RNZWFzdXJlU3RhcnRlZCgncmVuZGVyLWlkbGUnLCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJlY29yZFJlYWN0TWVhc3VyZVN0YXJ0ZWQoJ3JlbmRlcicsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcihcIi0tcmVuZGVyLXN0YXJ0LVwiLmNvbmNhdChsYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtSZW5kZXJZaWVsZGVkKCkge1xuICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgcmVjb3JkUmVhY3RNZWFzdXJlQ29tcGxldGVkKCdyZW5kZXInKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcignLS1yZW5kZXIteWllbGQnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrUmVuZGVyU3RvcHBlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJlY29yZFJlYWN0TWVhc3VyZUNvbXBsZXRlZCgncmVuZGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tcmVuZGVyLXN0b3AnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrUmVuZGVyU2NoZWR1bGVkKGxhbmUpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuc2NoZWR1bGluZ0V2ZW50cy5wdXNoKHtcbiAgICAgICAgICBsYW5lczogbGFuZVRvTGFuZXNBcnJheShsYW5lKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgIHR5cGU6ICdzY2hlZHVsZS1yZW5kZXInLFxuICAgICAgICAgIHdhcm5pbmc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoXCItLXNjaGVkdWxlLXJlbmRlci1cIi5jb25jYXQobGFuZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSkge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEpIHtcbiAgICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLnNjaGVkdWxpbmdFdmVudHMucHVzaCh7XG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgbGFuZXM6IGxhbmVUb0xhbmVzQXJyYXkobGFuZSksXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgICAgdHlwZTogJ3NjaGVkdWxlLWZvcmNlLXVwZGF0ZScsXG4gICAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgIG1hcmtBbmRDbGVhcihcIi0tc2NoZWR1bGUtZm9yY2VkLXVwZGF0ZS1cIi5jb25jYXQobGFuZSwgXCItXCIpLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50RmliZXJzKGZpYmVyKSB7XG4gICAgdmFyIHBhcmVudHMgPSBbXTtcbiAgICB2YXIgcGFyZW50ID0gZmliZXI7XG5cbiAgICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudHM7XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgfHwgc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgLy8gVE9ETyAodGltZWxpbmUpIFJlY29yZCBhbmQgY2FjaGUgY29tcG9uZW50IHN0YWNrXG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0ge1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBwYXJlbnQgZmliZXJzIHNvIHdlIGNhbiBwb3N0IHByb2Nlc3NcbiAgICAgICAgICAgIC8vIHRoZW0gYWZ0ZXIgd2UgZmluaXNoIHByb2ZpbGluZ1xuICAgICAgICAgICAgbGFuZXM6IGxhbmVUb0xhbmVzQXJyYXkobGFuZSksXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgICAgdHlwZTogJ3NjaGVkdWxlLXN0YXRlLXVwZGF0ZScsXG4gICAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjdXJyZW50RmliZXJTdGFja3Muc2V0KGV2ZW50LCBnZXRQYXJlbnRGaWJlcnMoZmliZXIpKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLnNjaGVkdWxpbmdFdmVudHMucHVzaChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgIG1hcmtBbmRDbGVhcihcIi0tc2NoZWR1bGUtc3RhdGUtdXBkYXRlLVwiLmNvbmNhdChsYW5lLCBcIi1cIikuY29uY2F0KGNvbXBvbmVudE5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVQcm9maWxpbmdTdGF0dXModmFsdWUpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgIT09IHZhbHVlKSB7XG4gICAgICBpc1Byb2ZpbGluZyA9IHZhbHVlO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgdmFyIGludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXMgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgICAgdmFyIHJhbmdlcyA9IGdldEludGVybmFsTW9kdWxlUmFuZ2VzKCk7XG5cbiAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07XG5cbiAgICAgICAgICAgICAgaWYgKHNoYXJlZF9pc0FycmF5KHJhbmdlKSAmJiByYW5nZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JhbmdlcyRpMiA9IHByb2ZpbGluZ0hvb2tzX3NsaWNlZFRvQXJyYXkocmFuZ2VzW2ldLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRTdGFja0ZyYW1lID0gX3JhbmdlcyRpMlswXSxcbiAgICAgICAgICAgICAgICAgICAgc3RvcFN0YWNrRnJhbWUgPSBfcmFuZ2VzJGkyWzFdO1xuXG4gICAgICAgICAgICAgICAgbWFya0FuZENsZWFyKFwiLS1yZWFjdC1pbnRlcm5hbC1tb2R1bGUtc3RhcnQtXCIuY29uY2F0KHN0YXJ0U3RhY2tGcmFtZSkpO1xuICAgICAgICAgICAgICAgIG1hcmtBbmRDbGVhcihcIi0tcmVhY3QtaW50ZXJuYWwtbW9kdWxlLXN0b3AtXCIuY29uY2F0KHN0b3BTdGFja0ZyYW1lKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGFuZVRvUmVhY3RNZWFzdXJlTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgbGFuZSA9IDE7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IFJFQUNUX1RPVEFMX05VTV9MQU5FUzsgaW5kZXgrKykge1xuICAgICAgICAgIGxhbmVUb1JlYWN0TWVhc3VyZU1hcC5zZXQobGFuZSwgW10pO1xuICAgICAgICAgIGxhbmUgKj0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRCYXRjaFVJRCA9IDA7XG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUgPSBudWxsO1xuICAgICAgICBjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrID0gW107XG4gICAgICAgIGN1cnJlbnRGaWJlclN0YWNrcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YSA9IHtcbiAgICAgICAgICAvLyBTZXNzaW9uIHdpZGUgbWV0YWRhdGE7IG9ubHkgY29sbGVjdGVkIG9uY2UuXG4gICAgICAgICAgaW50ZXJuYWxNb2R1bGVTb3VyY2VUb1JhbmdlczogaW50ZXJuYWxNb2R1bGVTb3VyY2VUb1JhbmdlcyxcbiAgICAgICAgICBsYW5lVG9MYWJlbE1hcDogbGFuZVRvTGFiZWxNYXAgfHwgbmV3IE1hcCgpLFxuICAgICAgICAgIHJlYWN0VmVyc2lvbjogcmVhY3RWZXJzaW9uLFxuICAgICAgICAgIC8vIERhdGEgbG9nZ2VkIGJ5IFJlYWN0IGR1cmluZyBwcm9maWxpbmcgc2Vzc2lvbi5cbiAgICAgICAgICBjb21wb25lbnRNZWFzdXJlczogW10sXG4gICAgICAgICAgc2NoZWR1bGluZ0V2ZW50czogW10sXG4gICAgICAgICAgc3VzcGVuc2VFdmVudHM6IFtdLFxuICAgICAgICAgIHRocm93bkVycm9yczogW10sXG4gICAgICAgICAgLy8gRGF0YSBpbmZlcnJlZCBiYXNlZCBvbiB3aGF0IFJlYWN0IGxvZ3MuXG4gICAgICAgICAgYmF0Y2hVSURUb01lYXN1cmVzTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgbGFuZVRvUmVhY3RNZWFzdXJlTWFwOiBsYW5lVG9SZWFjdE1lYXN1cmVNYXAsXG4gICAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICAgIC8vIERhdGEgb25seSBhdmFpbGFibGUgaW4gQ2hyb21lIHByb2ZpbGVzLlxuICAgICAgICAgIGZsYW1lY2hhcnQ6IFtdLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50czogW10sXG4gICAgICAgICAgbmV0d29ya01lYXN1cmVzOiBbXSxcbiAgICAgICAgICBvdGhlclVzZXJUaW1pbmdNYXJrczogW10sXG4gICAgICAgICAgc25hcHNob3RzOiBbXSxcbiAgICAgICAgICBzbmFwc2hvdEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBuZXh0UmVuZGVyU2hvdWxkU3RhcnROZXdCYXRjaCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBQb3N0cHJvY2VzcyBQcm9maWxlIGRhdGFcbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLnNjaGVkdWxpbmdFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAnc2NoZWR1bGUtc3RhdGUtdXBkYXRlJykge1xuICAgICAgICAgICAgICAvLyBUT0RPKGx1bmEpOiBXZSBjYW4gb3B0aW1pemUgdGhpcyBieSBjcmVhdGluZyBhIG1hcCBvZlxuICAgICAgICAgICAgICAvLyBmaWJlciB0byBjb21wb25lbnQgc3RhY2sgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSBzdGFja1xuICAgICAgICAgICAgICAvLyBmb3IgZXZlcnkgZmliZXIgZXZlcnkgdGltZVxuICAgICAgICAgICAgICB2YXIgZmliZXJTdGFjayA9IGN1cnJlbnRGaWJlclN0YWNrcy5nZXQoZXZlbnQpO1xuXG4gICAgICAgICAgICAgIGlmIChmaWJlclN0YWNrICYmIGN1cnJlbnREaXNwYXRjaGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudC5jb21wb25lbnRTdGFjayA9IGZpYmVyU3RhY2sucmVkdWNlKGZ1bmN0aW9uICh0cmFjZSwgZmliZXIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZSArIGRlc2NyaWJlRmliZXIod29ya1RhZ01hcCwgZmliZXIsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcbiAgICAgICAgICAgICAgICB9LCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBDbGVhciB0aGUgY3VycmVudCBmaWJlciBzdGFja3Mgc28gd2UgZG9uJ3QgaG9sZCBvbnRvIHRoZSBmaWJlcnNcbiAgICAgICAgLy8gaW4gbWVtb3J5IGFmdGVyIHByb2ZpbGluZyBmaW5pc2hlc1xuXG5cbiAgICAgICAgY3VycmVudEZpYmVyU3RhY2tzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRUaW1lbGluZURhdGE6IGdldFRpbWVsaW5lRGF0YSxcbiAgICBwcm9maWxpbmdIb29rczoge1xuICAgICAgbWFya0NvbW1pdFN0YXJ0ZWQ6IG1hcmtDb21taXRTdGFydGVkLFxuICAgICAgbWFya0NvbW1pdFN0b3BwZWQ6IG1hcmtDb21taXRTdG9wcGVkLFxuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQ6IG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkLFxuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQ6IG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkLFxuICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQ6IG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkLFxuICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQ6IG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdG9wcGVkLFxuICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZDogbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZCxcbiAgICAgIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQ6IG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQsXG4gICAgICBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkOiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkLFxuICAgICAgbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZDogbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCxcbiAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZDogbWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkLFxuICAgICAgbWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkOiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQsXG4gICAgICBtYXJrQ29tcG9uZW50RXJyb3JlZDogbWFya0NvbXBvbmVudEVycm9yZWQsXG4gICAgICBtYXJrQ29tcG9uZW50U3VzcGVuZGVkOiBtYXJrQ29tcG9uZW50U3VzcGVuZGVkLFxuICAgICAgbWFya0xheW91dEVmZmVjdHNTdGFydGVkOiBtYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQsXG4gICAgICBtYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQ6IG1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCxcbiAgICAgIG1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQ6IG1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQsXG4gICAgICBtYXJrUGFzc2l2ZUVmZmVjdHNTdG9wcGVkOiBtYXJrUGFzc2l2ZUVmZmVjdHNTdG9wcGVkLFxuICAgICAgbWFya1JlbmRlclN0YXJ0ZWQ6IG1hcmtSZW5kZXJTdGFydGVkLFxuICAgICAgbWFya1JlbmRlcllpZWxkZWQ6IG1hcmtSZW5kZXJZaWVsZGVkLFxuICAgICAgbWFya1JlbmRlclN0b3BwZWQ6IG1hcmtSZW5kZXJTdG9wcGVkLFxuICAgICAgbWFya1JlbmRlclNjaGVkdWxlZDogbWFya1JlbmRlclNjaGVkdWxlZCxcbiAgICAgIG1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZDogbWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkLFxuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkOiBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWRcbiAgICB9LFxuICAgIHRvZ2dsZVByb2ZpbGluZ1N0YXR1czogdG9nZ2xlUHJvZmlsaW5nU3RhdHVzXG4gIH07XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3JlbmRlcmVyLmpzXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9vd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgcmVuZGVyZXJfb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IHJlbmRlcmVyX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IHJlbmRlcmVyX293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIHJlbmRlcmVyX2FycmF5V2l0aEhvbGVzKGFycikgfHwgcmVuZGVyZXJfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCByZW5kZXJlcl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IHJlbmRlcmVyX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIHJlbmRlcmVyX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgcmVuZGVyZXJfaXRlcmFibGVUb0FycmF5KGFycikgfHwgcmVuZGVyZXJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCByZW5kZXJlcl9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIHJlbmRlcmVyX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQ7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8IG9bU3ltYm9sLml0ZXJhdG9yXSA9PSBudWxsKSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IHJlbmRlcmVyX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgdGhyb3cgX2UyOyB9LCBmOiBGIH07IH0gdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9IHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSwgZGlkRXJyID0gZmFsc2UsIGVycjsgcmV0dXJuIHsgczogZnVuY3Rpb24gcygpIHsgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMykgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTM7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiByZW5kZXJlcl9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gcmVuZGVyZXJfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgcmVuZGVyZXJfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IHJlbmRlcmVyX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiByZW5kZXJlcl90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0RmliZXJGbGFncyhmaWJlcikge1xuICAvLyBUaGUgbmFtZSBvZiB0aGlzIGZpZWxkIGNoYW5nZWQgZnJvbSBcImVmZmVjdFRhZ1wiIHRvIFwiZmxhZ3NcIlxuICByZXR1cm4gZmliZXIuZmxhZ3MgIT09IHVuZGVmaW5lZCA/IGZpYmVyLmZsYWdzIDogZmliZXIuZWZmZWN0VGFnO1xufSAvLyBTb21lIGVudmlyb25tZW50cyAoZS5nLiBSZWFjdCBOYXRpdmUgLyBIZXJtZXMpIGRvbid0IHN1cHBvcnQgdGhlIHBlcmZvcm1hbmNlIEFQSSB5ZXQuXG5cblxudmFyIHJlbmRlcmVyX2dldEN1cnJlbnRUaW1lID0gLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiByZW5kZXJlcl90eXBlb2YocGVyZm9ybWFuY2UpKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xuZnVuY3Rpb24gZ2V0SW50ZXJuYWxSZWFjdENvbnN0YW50cyh2ZXJzaW9uKSB7XG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gVGhlIHNlY3Rpb24gYmVsb3cgaXMgY29waWVkIGZyb20gZmlsZXMgaW4gUmVhY3QgcmVwby5cbiAgLy8gS2VlcCBpdCBpbiBzeW5jLCBhbmQgYWRkIHZlcnNpb24gZ3VhcmRzIGlmIGl0IGNoYW5nZXMuXG4gIC8vXG4gIC8vIFRlY2huaWNhbGx5IHRoZXNlIHByaW9yaXR5IGxldmVscyBhcmUgaW52YWxpZCBmb3IgdmVyc2lvbnMgYmVmb3JlIDE2LjksXG4gIC8vIGJ1dCAxNi45IGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHRvIHJlcG9ydCBwcmlvcml0eSBsZXZlbCB0byBEZXZUb29scyxcbiAgLy8gc28gd2UgY2FuIGF2b2lkIGNoZWNraW5nIGZvciBlYXJsaWVyIHZlcnNpb25zIGFuZCBzdXBwb3J0IHByZS0xNi45IGNhbmFyeSByZWxlYXNlcyBpbiB0aGUgcHJvY2Vzcy5cbiAgdmFyIFJlYWN0UHJpb3JpdHlMZXZlbHMgPSB7XG4gICAgSW1tZWRpYXRlUHJpb3JpdHk6IDk5LFxuICAgIFVzZXJCbG9ja2luZ1ByaW9yaXR5OiA5OCxcbiAgICBOb3JtYWxQcmlvcml0eTogOTcsXG4gICAgTG93UHJpb3JpdHk6IDk2LFxuICAgIElkbGVQcmlvcml0eTogOTUsXG4gICAgTm9Qcmlvcml0eTogOTBcbiAgfTtcblxuICBpZiAoZ3QodmVyc2lvbiwgJzE3LjAuMicpKSB7XG4gICAgUmVhY3RQcmlvcml0eUxldmVscyA9IHtcbiAgICAgIEltbWVkaWF0ZVByaW9yaXR5OiAxLFxuICAgICAgVXNlckJsb2NraW5nUHJpb3JpdHk6IDIsXG4gICAgICBOb3JtYWxQcmlvcml0eTogMyxcbiAgICAgIExvd1ByaW9yaXR5OiA0LFxuICAgICAgSWRsZVByaW9yaXR5OiA1LFxuICAgICAgTm9Qcmlvcml0eTogMFxuICAgIH07XG4gIH1cblxuICB2YXIgU3RyaWN0TW9kZUJpdHMgPSAwO1xuXG4gIGlmIChndGUodmVyc2lvbiwgJzE4LjAuMC1hbHBoYScpKSB7XG4gICAgLy8gMTgrXG4gICAgU3RyaWN0TW9kZUJpdHMgPSAyNDtcbiAgfSBlbHNlIGlmIChndGUodmVyc2lvbiwgJzE2LjkuMCcpKSB7XG4gICAgLy8gMTYuOSAtIDE3XG4gICAgU3RyaWN0TW9kZUJpdHMgPSAxO1xuICB9IGVsc2UgaWYgKGd0ZSh2ZXJzaW9uLCAnMTYuMy4wJykpIHtcbiAgICAvLyAxNi4zIC0gMTYuOFxuICAgIFN0cmljdE1vZGVCaXRzID0gMjtcbiAgfVxuXG4gIHZhciBSZWFjdFR5cGVPZldvcmsgPSBudWxsOyAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vIFRoZSBzZWN0aW9uIGJlbG93IGlzIGNvcGllZCBmcm9tIGZpbGVzIGluIFJlYWN0IHJlcG8uXG4gIC8vIEtlZXAgaXQgaW4gc3luYywgYW5kIGFkZCB2ZXJzaW9uIGd1YXJkcyBpZiBpdCBjaGFuZ2VzLlxuICAvL1xuICAvLyBUT0RPIFVwZGF0ZSB0aGUgZ3QoKSBjaGVjayBiZWxvdyB0byBiZSBndGUoKSB3aGljaGV2ZXIgdGhlIG5leHQgdmVyc2lvbiBudW1iZXIgaXMuXG4gIC8vIEN1cnJlbnRseSB0aGUgdmVyc2lvbiBpbiBHaXQgaXMgMTcuMC4yIChidXQgdGhhdCB2ZXJzaW9uIGhhcyBub3QgYmVlbi9tYXkgbm90IGVuZCB1cCBiZWluZyByZWxlYXNlZCkuXG5cbiAgaWYgKGd0KHZlcnNpb24sICcxNy4wLjEnKSkge1xuICAgIFJlYWN0VHlwZU9mV29yayA9IHtcbiAgICAgIENhY2hlQ29tcG9uZW50OiAyNCxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgQ2xhc3NDb21wb25lbnQ6IDEsXG4gICAgICBDb250ZXh0Q29uc3VtZXI6IDksXG4gICAgICBDb250ZXh0UHJvdmlkZXI6IDEwLFxuICAgICAgQ29yb3V0aW5lQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIFJlbW92ZWRcbiAgICAgIENvcm91dGluZUhhbmRsZXJQaGFzZTogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6IDE4LFxuICAgICAgLy8gQmVoaW5kIGEgZmxhZ1xuICAgICAgRm9yd2FyZFJlZjogMTEsXG4gICAgICBGcmFnbWVudDogNyxcbiAgICAgIEZ1bmN0aW9uQ29tcG9uZW50OiAwLFxuICAgICAgSG9zdENvbXBvbmVudDogNSxcbiAgICAgIEhvc3RQb3J0YWw6IDQsXG4gICAgICBIb3N0Um9vdDogMyxcbiAgICAgIEhvc3RIb2lzdGFibGU6IDI2LFxuICAgICAgLy8gSW4gcmVhbGl0eSwgMTguMisuIEJ1dCBkb2Vzbid0IGh1cnQgdG8gaW5jbHVkZSBpdCBoZXJlXG4gICAgICBIb3N0U2luZ2xldG9uOiAyNyxcbiAgICAgIC8vIFNhbWUgYXMgYWJvdmVcbiAgICAgIEhvc3RUZXh0OiA2LFxuICAgICAgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OiAxNyxcbiAgICAgIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IDIsXG4gICAgICBMYXp5Q29tcG9uZW50OiAxNixcbiAgICAgIExlZ2FjeUhpZGRlbkNvbXBvbmVudDogMjMsXG4gICAgICBNZW1vQ29tcG9uZW50OiAxNCxcbiAgICAgIE1vZGU6IDgsXG4gICAgICBPZmZzY3JlZW5Db21wb25lbnQ6IDIyLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBQcm9maWxlcjogMTIsXG4gICAgICBTY29wZUNvbXBvbmVudDogMjEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFNpbXBsZU1lbW9Db21wb25lbnQ6IDE1LFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQ6IDEzLFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiAxOSxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgVHJhY2luZ01hcmtlckNvbXBvbmVudDogMjUsXG4gICAgICAvLyBFeHBlcmltZW50YWwgLSBUaGlzIGlzIHRlY2huaWNhbGx5IGluIDE4IGJ1dCB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBmb3JrIGFnYWluIHNvIHdlJ3JlIGFkZGluZyBpdCBoZXJlIGluc3RlYWRcbiAgICAgIFlpZWxkQ29tcG9uZW50OiAtMSAvLyBSZW1vdmVkXG5cbiAgICB9O1xuICB9IGVsc2UgaWYgKGd0ZSh2ZXJzaW9uLCAnMTcuMC4wLWFscGhhJykpIHtcbiAgICBSZWFjdFR5cGVPZldvcmsgPSB7XG4gICAgICBDYWNoZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgQ2xhc3NDb21wb25lbnQ6IDEsXG4gICAgICBDb250ZXh0Q29uc3VtZXI6IDksXG4gICAgICBDb250ZXh0UHJvdmlkZXI6IDEwLFxuICAgICAgQ29yb3V0aW5lQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIFJlbW92ZWRcbiAgICAgIENvcm91dGluZUhhbmRsZXJQaGFzZTogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6IDE4LFxuICAgICAgLy8gQmVoaW5kIGEgZmxhZ1xuICAgICAgRm9yd2FyZFJlZjogMTEsXG4gICAgICBGcmFnbWVudDogNyxcbiAgICAgIEZ1bmN0aW9uQ29tcG9uZW50OiAwLFxuICAgICAgSG9zdENvbXBvbmVudDogNSxcbiAgICAgIEhvc3RQb3J0YWw6IDQsXG4gICAgICBIb3N0Um9vdDogMyxcbiAgICAgIEhvc3RIb2lzdGFibGU6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEhvc3RTaW5nbGV0b246IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEhvc3RUZXh0OiA2LFxuICAgICAgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OiAxNyxcbiAgICAgIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IDIsXG4gICAgICBMYXp5Q29tcG9uZW50OiAxNixcbiAgICAgIExlZ2FjeUhpZGRlbkNvbXBvbmVudDogMjQsXG4gICAgICBNZW1vQ29tcG9uZW50OiAxNCxcbiAgICAgIE1vZGU6IDgsXG4gICAgICBPZmZzY3JlZW5Db21wb25lbnQ6IDIzLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBQcm9maWxlcjogMTIsXG4gICAgICBTY29wZUNvbXBvbmVudDogMjEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFNpbXBsZU1lbW9Db21wb25lbnQ6IDE1LFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQ6IDEzLFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiAxOSxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgVHJhY2luZ01hcmtlckNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgWWllbGRDb21wb25lbnQ6IC0xIC8vIFJlbW92ZWRcblxuICAgIH07XG4gIH0gZWxzZSBpZiAoZ3RlKHZlcnNpb24sICcxNi42LjAtYmV0YS4wJykpIHtcbiAgICBSZWFjdFR5cGVPZldvcmsgPSB7XG4gICAgICBDYWNoZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgQ2xhc3NDb21wb25lbnQ6IDEsXG4gICAgICBDb250ZXh0Q29uc3VtZXI6IDksXG4gICAgICBDb250ZXh0UHJvdmlkZXI6IDEwLFxuICAgICAgQ29yb3V0aW5lQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIFJlbW92ZWRcbiAgICAgIENvcm91dGluZUhhbmRsZXJQaGFzZTogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6IDE4LFxuICAgICAgLy8gQmVoaW5kIGEgZmxhZ1xuICAgICAgRm9yd2FyZFJlZjogMTEsXG4gICAgICBGcmFnbWVudDogNyxcbiAgICAgIEZ1bmN0aW9uQ29tcG9uZW50OiAwLFxuICAgICAgSG9zdENvbXBvbmVudDogNSxcbiAgICAgIEhvc3RQb3J0YWw6IDQsXG4gICAgICBIb3N0Um9vdDogMyxcbiAgICAgIEhvc3RIb2lzdGFibGU6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEhvc3RTaW5nbGV0b246IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEhvc3RUZXh0OiA2LFxuICAgICAgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OiAxNyxcbiAgICAgIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IDIsXG4gICAgICBMYXp5Q29tcG9uZW50OiAxNixcbiAgICAgIExlZ2FjeUhpZGRlbkNvbXBvbmVudDogLTEsXG4gICAgICBNZW1vQ29tcG9uZW50OiAxNCxcbiAgICAgIE1vZGU6IDgsXG4gICAgICBPZmZzY3JlZW5Db21wb25lbnQ6IC0xLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBQcm9maWxlcjogMTIsXG4gICAgICBTY29wZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFNpbXBsZU1lbW9Db21wb25lbnQ6IDE1LFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQ6IDEzLFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiAxOSxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgVHJhY2luZ01hcmtlckNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgWWllbGRDb21wb25lbnQ6IC0xIC8vIFJlbW92ZWRcblxuICAgIH07XG4gIH0gZWxzZSBpZiAoZ3RlKHZlcnNpb24sICcxNi40LjMtYWxwaGEnKSkge1xuICAgIFJlYWN0VHlwZU9mV29yayA9IHtcbiAgICAgIENhY2hlQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBDbGFzc0NvbXBvbmVudDogMixcbiAgICAgIENvbnRleHRDb25zdW1lcjogMTEsXG4gICAgICBDb250ZXh0UHJvdmlkZXI6IDEyLFxuICAgICAgQ29yb3V0aW5lQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIFJlbW92ZWRcbiAgICAgIENvcm91dGluZUhhbmRsZXJQaGFzZTogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEZvcndhcmRSZWY6IDEzLFxuICAgICAgRnJhZ21lbnQ6IDksXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudDogMCxcbiAgICAgIEhvc3RDb21wb25lbnQ6IDcsXG4gICAgICBIb3N0UG9ydGFsOiA2LFxuICAgICAgSG9zdFJvb3Q6IDUsXG4gICAgICBIb3N0SG9pc3RhYmxlOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0U2luZ2xldG9uOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0VGV4dDogOCxcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDogNCxcbiAgICAgIExhenlDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIExlZ2FjeUhpZGRlbkNvbXBvbmVudDogLTEsXG4gICAgICBNZW1vQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBNb2RlOiAxMCxcbiAgICAgIE9mZnNjcmVlbkNvbXBvbmVudDogLTEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFByb2ZpbGVyOiAxNSxcbiAgICAgIFNjb3BlQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgU2ltcGxlTWVtb0NvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQ6IDE2LFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBUcmFjaW5nTWFya2VyQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBZaWVsZENvbXBvbmVudDogLTEgLy8gUmVtb3ZlZFxuXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBSZWFjdFR5cGVPZldvcmsgPSB7XG4gICAgICBDYWNoZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgQ2xhc3NDb21wb25lbnQ6IDIsXG4gICAgICBDb250ZXh0Q29uc3VtZXI6IDEyLFxuICAgICAgQ29udGV4dFByb3ZpZGVyOiAxMyxcbiAgICAgIENvcm91dGluZUNvbXBvbmVudDogNyxcbiAgICAgIENvcm91dGluZUhhbmRsZXJQaGFzZTogOCxcbiAgICAgIERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgRm9yd2FyZFJlZjogMTQsXG4gICAgICBGcmFnbWVudDogMTAsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudDogMSxcbiAgICAgIEhvc3RDb21wb25lbnQ6IDUsXG4gICAgICBIb3N0UG9ydGFsOiA0LFxuICAgICAgSG9zdFJvb3Q6IDMsXG4gICAgICBIb3N0SG9pc3RhYmxlOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0U2luZ2xldG9uOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0VGV4dDogNixcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDogMCxcbiAgICAgIExhenlDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIExlZ2FjeUhpZGRlbkNvbXBvbmVudDogLTEsXG4gICAgICBNZW1vQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBNb2RlOiAxMSxcbiAgICAgIE9mZnNjcmVlbkNvbXBvbmVudDogLTEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFByb2ZpbGVyOiAxNSxcbiAgICAgIFNjb3BlQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgU2ltcGxlTWVtb0NvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQ6IDE2LFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBUcmFjaW5nTWFya2VyQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBZaWVsZENvbXBvbmVudDogOVxuICAgIH07XG4gIH0gLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBFbmQgb2YgY29waWVkIGNvZGUuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuXG4gIGZ1bmN0aW9uIGdldFR5cGVTeW1ib2wodHlwZSkge1xuICAgIHZhciBzeW1ib2xPck51bWJlciA9IHJlbmRlcmVyX3R5cGVvZih0eXBlKSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCA/IHR5cGUuJCR0eXBlb2YgOiB0eXBlO1xuICAgIHJldHVybiByZW5kZXJlcl90eXBlb2Yoc3ltYm9sT3JOdW1iZXIpID09PSAnc3ltYm9sJyA/IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gYHRvU3RyaW5nKClgIGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgc2lnbmF0dXJlP1xuICAgIHN5bWJvbE9yTnVtYmVyLnRvU3RyaW5nKCkgOiBzeW1ib2xPck51bWJlcjtcbiAgfVxuXG4gIHZhciBfUmVhY3RUeXBlT2ZXb3JrID0gUmVhY3RUeXBlT2ZXb3JrLFxuICAgICAgQ2FjaGVDb21wb25lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLkNhY2hlQ29tcG9uZW50LFxuICAgICAgQ2xhc3NDb21wb25lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLkNsYXNzQ29tcG9uZW50LFxuICAgICAgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5JbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuRnVuY3Rpb25Db21wb25lbnQsXG4gICAgICBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5JbmRldGVybWluYXRlQ29tcG9uZW50LFxuICAgICAgRm9yd2FyZFJlZiA9IF9SZWFjdFR5cGVPZldvcmsuRm9yd2FyZFJlZixcbiAgICAgIEhvc3RSb290ID0gX1JlYWN0VHlwZU9mV29yay5Ib3N0Um9vdCxcbiAgICAgIEhvc3RIb2lzdGFibGUgPSBfUmVhY3RUeXBlT2ZXb3JrLkhvc3RIb2lzdGFibGUsXG4gICAgICBIb3N0U2luZ2xldG9uID0gX1JlYWN0VHlwZU9mV29yay5Ib3N0U2luZ2xldG9uLFxuICAgICAgSG9zdENvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuSG9zdENvbXBvbmVudCxcbiAgICAgIEhvc3RQb3J0YWwgPSBfUmVhY3RUeXBlT2ZXb3JrLkhvc3RQb3J0YWwsXG4gICAgICBIb3N0VGV4dCA9IF9SZWFjdFR5cGVPZldvcmsuSG9zdFRleHQsXG4gICAgICBGcmFnbWVudCA9IF9SZWFjdFR5cGVPZldvcmsuRnJhZ21lbnQsXG4gICAgICBMYXp5Q29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5MYXp5Q29tcG9uZW50LFxuICAgICAgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5MZWdhY3lIaWRkZW5Db21wb25lbnQsXG4gICAgICBNZW1vQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5NZW1vQ29tcG9uZW50LFxuICAgICAgT2Zmc2NyZWVuQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5PZmZzY3JlZW5Db21wb25lbnQsXG4gICAgICBQcm9maWxlciA9IF9SZWFjdFR5cGVPZldvcmsuUHJvZmlsZXIsXG4gICAgICBTY29wZUNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuU2NvcGVDb21wb25lbnQsXG4gICAgICBTaW1wbGVNZW1vQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5TaW1wbGVNZW1vQ29tcG9uZW50LFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLlN1c3BlbnNlQ29tcG9uZW50LFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5TdXNwZW5zZUxpc3RDb21wb25lbnQsXG4gICAgICBUcmFjaW5nTWFya2VyQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5UcmFjaW5nTWFya2VyQ29tcG9uZW50O1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVGaWJlclR5cGUodHlwZSkge1xuICAgIHZhciB0eXBlU3ltYm9sID0gZ2V0VHlwZVN5bWJvbCh0eXBlKTtcblxuICAgIHN3aXRjaCAodHlwZVN5bWJvbCkge1xuICAgICAgY2FzZSBSZWFjdFN5bWJvbHNfTUVNT19OVU1CRVI6XG4gICAgICBjYXNlIFJlYWN0U3ltYm9sc19NRU1PX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IHJlc29sdmluZyBtZW1vIHR5cGUgaW4gY2FzZSBvZiBtZW1vKGZvcndhcmRSZWYoQ29tcG9uZW50KSlcbiAgICAgICAgcmV0dXJuIHJlc29sdmVGaWJlclR5cGUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSZWFjdFN5bWJvbHNfRk9SV0FSRF9SRUZfTlVNQkVSOlxuICAgICAgY2FzZSBSZWFjdFN5bWJvbHNfRk9SV0FSRF9SRUZfU1lNQk9MX1NUUklORzpcbiAgICAgICAgcmV0dXJuIHR5cGUucmVuZGVyO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH0gLy8gTk9USUNFIEtlZXAgaW4gc3luYyB3aXRoIHNob3VsZEZpbHRlckZpYmVyKCkgYW5kIG90aGVyIGdldCpGb3JGaWJlciBtZXRob2RzXG5cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZmliZXIuZWxlbWVudFR5cGUsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlLFxuICAgICAgICB0YWcgPSBmaWJlci50YWc7XG4gICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICBpZiAocmVuZGVyZXJfdHlwZW9mKHR5cGUpID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRmliZXJUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIHZhciByZXNvbHZlZENvbnRleHQgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnQ2FjaGUnO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShyZXNvbHZlZFR5cGUpO1xuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gZ2V0RGlzcGxheU5hbWUocmVzb2x2ZWRUeXBlKTtcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZERpc3BsYXlOYW1lKGVsZW1lbnRUeXBlLCByZXNvbHZlZFR5cGUsICdGb3J3YXJkUmVmJywgJ0Fub255bW91cycpO1xuXG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB2YXIgZmliZXJSb290ID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QgIT0gbnVsbCAmJiBmaWJlclJvb3QuX2RlYnVnUm9vdFR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmliZXJSb290Ll9kZWJ1Z1Jvb3RUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgICAvLyBUaGlzIGRpc3BsYXkgbmFtZSB3aWxsIG5vdCBiZSB1c2VyIHZpc2libGUuXG4gICAgICAgIC8vIE9uY2UgYSBMYXp5IGNvbXBvbmVudCBsb2FkcyBpdHMgaW5uZXIgY29tcG9uZW50LCBSZWFjdCByZXBsYWNlcyB0aGUgdGFnIGFuZCB0eXBlLlxuICAgICAgICAvLyBUaGlzIGRpc3BsYXkgbmFtZSB3aWxsIG9ubHkgc2hvdyB1cCBpbiBjb25zb2xlIGxvZ3Mgd2hlbiBEZXZUb29scyBERUJVRyBtb2RlIGlzIG9uLlxuICAgICAgICByZXR1cm4gJ0xhenknO1xuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIC8vIERpc3BsYXkgbmFtZSBpbiBSZWFjdCBkb2VzIG5vdCB1c2UgYE1lbW9gIGFzIGEgd3JhcHBlciBidXQgZmFsbGJhY2sgbmFtZS5cbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWREaXNwbGF5TmFtZShlbGVtZW50VHlwZSwgcmVzb2x2ZWRUeXBlLCAnTWVtbycsICdBbm9ueW1vdXMnKTtcblxuICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gJ0xlZ2FjeUhpZGRlbic7XG5cbiAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gJ09mZnNjcmVlbic7XG5cbiAgICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnU2NvcGUnO1xuXG4gICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgICAgY2FzZSBUcmFjaW5nTWFya2VyQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gJ1RyYWNpbmdNYXJrZXInO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdHlwZVN5bWJvbCA9IGdldFR5cGVTeW1ib2wodHlwZSk7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlU3ltYm9sKSB7XG4gICAgICAgICAgY2FzZSBDT05DVVJSRU5UX01PREVfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgQ09OQ1VSUkVOVF9NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgY2FzZSBERVBSRUNBVEVEX0FTWU5DX01PREVfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgY2FzZSBQUk9WSURFUl9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBQUk9WSURFUl9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgLy8gMTYuMy4wIGV4cG9zZWQgdGhlIGNvbnRleHQgb2JqZWN0IGFzIFwiY29udGV4dFwiXG4gICAgICAgICAgICAvLyBQUiAjMTI1MDEgY2hhbmdlZCBpdCB0byBcIl9jb250ZXh0XCIgZm9yIDE2LjMuMStcbiAgICAgICAgICAgIC8vIE5PVEUgS2VlcCBpbiBzeW5jIHdpdGggaW5zcGVjdEVsZW1lbnRSYXcoKVxuICAgICAgICAgICAgcmVzb2x2ZWRDb250ZXh0ID0gZmliZXIudHlwZS5fY29udGV4dCB8fCBmaWJlci50eXBlLmNvbnRleHQ7XG4gICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQocmVzb2x2ZWRDb250ZXh0LmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0JywgXCIuUHJvdmlkZXJcIik7XG5cbiAgICAgICAgICBjYXNlIENPTlRFWFRfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgQ09OVEVYVF9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgIGNhc2UgU0VSVkVSX0NPTlRFWFRfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIC8vIDE2LjMtMTYuNSByZWFkIGZyb20gXCJ0eXBlXCIgYmVjYXVzZSB0aGUgQ29uc3VtZXIgaXMgdGhlIGFjdHVhbCBjb250ZXh0IG9iamVjdC5cbiAgICAgICAgICAgIC8vIDE2LjYrIHNob3VsZCByZWFkIGZyb20gXCJ0eXBlLl9jb250ZXh0XCIgYmVjYXVzZSBDb25zdW1lciBjYW4gYmUgZGlmZmVyZW50IChpbiBERVYpLlxuICAgICAgICAgICAgLy8gTk9URSBLZWVwIGluIHN5bmMgd2l0aCBpbnNwZWN0RWxlbWVudFJhdygpXG4gICAgICAgICAgICByZXNvbHZlZENvbnRleHQgPSBmaWJlci50eXBlLl9jb250ZXh0IHx8IGZpYmVyLnR5cGU7IC8vIE5PVEU6IFRyYWNlVXBkYXRlc0JhY2tlbmRNYW5hZ2VyIGRlcGVuZHMgb24gdGhlIG5hbWUgZW5kaW5nIGluICcuQ29uc3VtZXInXG4gICAgICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBuYW1lLCBmaWd1cmUgb3V0IGEgbW9yZSByZXNpbGllbnQgd2F5IHRvIGRldGVjdCBpdC5cblxuICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc29sdmVkQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCcsIFwiLkNvbnN1bWVyXCIpO1xuXG4gICAgICAgICAgY2FzZSBTVFJJQ1RfTU9ERV9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBTVFJJQ1RfTU9ERV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICBjYXNlIFBST0ZJTEVSX05VTUJFUjpcbiAgICAgICAgICBjYXNlIFBST0ZJTEVSX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gXCJQcm9maWxlcihcIi5jb25jYXQoZmliZXIubWVtb2l6ZWRQcm9wcy5pZCwgXCIpXCIpO1xuXG4gICAgICAgICAgY2FzZSBTQ09QRV9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBTQ09QRV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuICdTY29wZSc7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gVW5rbm93biBlbGVtZW50IHR5cGUuXG4gICAgICAgICAgICAvLyBUaGlzIG1heSBtZWFuIGEgbmV3IGVsZW1lbnQgdHlwZSB0aGF0IGhhcyBub3QgeWV0IGJlZW4gYWRkZWQgdG8gRGV2VG9vbHMuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXREaXNwbGF5TmFtZUZvckZpYmVyOiBnZXREaXNwbGF5TmFtZUZvckZpYmVyLFxuICAgIGdldFR5cGVTeW1ib2w6IGdldFR5cGVTeW1ib2wsXG4gICAgUmVhY3RQcmlvcml0eUxldmVsczogUmVhY3RQcmlvcml0eUxldmVscyxcbiAgICBSZWFjdFR5cGVPZldvcms6IFJlYWN0VHlwZU9mV29yayxcbiAgICBTdHJpY3RNb2RlQml0czogU3RyaWN0TW9kZUJpdHNcbiAgfTtcbn0gLy8gTWFwIG9mIG9uZSBvciBtb3JlIEZpYmVycyBpbiBhIHBhaXIgdG8gdGhlaXIgdW5pcXVlIGlkIG51bWJlci5cbi8vIFdlIHRyYWNrIGJvdGggRmliZXJzIHRvIHN1cHBvcnQgRmFzdCBSZWZyZXNoLFxuLy8gd2hpY2ggbWF5IGZvcmNlZnVsbHkgcmVwbGFjZSBvbmUgb2YgdGhlIHBhaXIgYXMgcGFydCBvZiBob3QgcmVsb2FkaW5nLlxuLy8gSW4gdGhhdCBjYXNlIGl0J3Mgc3RpbGwgaW1wb3J0YW50IHRvIGJlIGFibGUgdG8gbG9jYXRlIHRoZSBwcmV2aW91cyBJRCBkdXJpbmcgc3Vic2VxdWVudCByZW5kZXJzLlxuXG52YXIgZmliZXJUb0lETWFwID0gbmV3IE1hcCgpOyAvLyBNYXAgb2YgaWQgdG8gb25lIChhcmJpdHJhcnkpIEZpYmVyIGluIGEgcGFpci5cbi8vIFRoaXMgTWFwIGlzIHVzZWQgdG8gZS5nLiBnZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYSBGaWJlciBvciBzY2hlZHVsZSBhbiB1cGRhdGUsXG4vLyBvcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBzYW1lIHdoZXRoZXIgdGhlIGN1cnJlbnQgYW5kIHdvcmstaW4tcHJvZ3Jlc3MgRmliZXIgaXMgdXNlZC5cblxudmFyIGlkVG9BcmJpdHJhcnlGaWJlck1hcCA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGF0dGFjaChob29rLCByZW5kZXJlcklELCByZW5kZXJlciwgZ2xvYmFsKSB7XG4gIC8vIE5ld2VyIHZlcnNpb25zIG9mIHRoZSByZWNvbmNpbGVyIHBhY2thZ2UgYWxzbyBzcGVjaWZpYyByZWNvbmNpbGVyIHZlcnNpb24uXG4gIC8vIElmIHRoYXQgdmVyc2lvbiBudW1iZXIgaXMgcHJlc2VudCwgdXNlIGl0LlxuICAvLyBUaGlyZCBwYXJ0eSByZW5kZXJlciB2ZXJzaW9ucyBtYXkgbm90IG1hdGNoIHRoZSByZWNvbmNpbGVyIHZlcnNpb24sXG4gIC8vIGFuZCB0aGUgbGF0dGVyIGlzIHdoYXQncyBpbXBvcnRhbnQgaW4gdGVybXMgb2YgdGFncyBhbmQgc3ltYm9scy5cbiAgdmFyIHZlcnNpb24gPSByZW5kZXJlci5yZWNvbmNpbGVyVmVyc2lvbiB8fCByZW5kZXJlci52ZXJzaW9uO1xuXG4gIHZhciBfZ2V0SW50ZXJuYWxSZWFjdENvbnMgPSBnZXRJbnRlcm5hbFJlYWN0Q29uc3RhbnRzKHZlcnNpb24pLFxuICAgICAgZ2V0RGlzcGxheU5hbWVGb3JGaWJlciA9IF9nZXRJbnRlcm5hbFJlYWN0Q29ucy5nZXREaXNwbGF5TmFtZUZvckZpYmVyLFxuICAgICAgZ2V0VHlwZVN5bWJvbCA9IF9nZXRJbnRlcm5hbFJlYWN0Q29ucy5nZXRUeXBlU3ltYm9sLFxuICAgICAgUmVhY3RQcmlvcml0eUxldmVscyA9IF9nZXRJbnRlcm5hbFJlYWN0Q29ucy5SZWFjdFByaW9yaXR5TGV2ZWxzLFxuICAgICAgUmVhY3RUeXBlT2ZXb3JrID0gX2dldEludGVybmFsUmVhY3RDb25zLlJlYWN0VHlwZU9mV29yayxcbiAgICAgIFN0cmljdE1vZGVCaXRzID0gX2dldEludGVybmFsUmVhY3RDb25zLlN0cmljdE1vZGVCaXRzO1xuXG4gIHZhciBDYWNoZUNvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5DYWNoZUNvbXBvbmVudCxcbiAgICAgIENsYXNzQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLkNsYXNzQ29tcG9uZW50LFxuICAgICAgQ29udGV4dENvbnN1bWVyID0gUmVhY3RUeXBlT2ZXb3JrLkNvbnRleHRDb25zdW1lcixcbiAgICAgIERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5EZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQsXG4gICAgICBGb3J3YXJkUmVmID0gUmVhY3RUeXBlT2ZXb3JrLkZvcndhcmRSZWYsXG4gICAgICBGcmFnbWVudCA9IFJlYWN0VHlwZU9mV29yay5GcmFnbWVudCxcbiAgICAgIEZ1bmN0aW9uQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLkZ1bmN0aW9uQ29tcG9uZW50LFxuICAgICAgSG9zdFJvb3QgPSBSZWFjdFR5cGVPZldvcmsuSG9zdFJvb3QsXG4gICAgICBIb3N0SG9pc3RhYmxlID0gUmVhY3RUeXBlT2ZXb3JrLkhvc3RIb2lzdGFibGUsXG4gICAgICBIb3N0U2luZ2xldG9uID0gUmVhY3RUeXBlT2ZXb3JrLkhvc3RTaW5nbGV0b24sXG4gICAgICBIb3N0UG9ydGFsID0gUmVhY3RUeXBlT2ZXb3JrLkhvc3RQb3J0YWwsXG4gICAgICBIb3N0Q29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLkhvc3RDb21wb25lbnQsXG4gICAgICBIb3N0VGV4dCA9IFJlYWN0VHlwZU9mV29yay5Ib3N0VGV4dCxcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5JbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQsXG4gICAgICBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLkluZGV0ZXJtaW5hdGVDb21wb25lbnQsXG4gICAgICBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuTGVnYWN5SGlkZGVuQ29tcG9uZW50LFxuICAgICAgTWVtb0NvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5NZW1vQ29tcG9uZW50LFxuICAgICAgT2Zmc2NyZWVuQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLk9mZnNjcmVlbkNvbXBvbmVudCxcbiAgICAgIFNpbXBsZU1lbW9Db21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuU2ltcGxlTWVtb0NvbXBvbmVudCxcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLlN1c3BlbnNlQ29tcG9uZW50LFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLlN1c3BlbnNlTGlzdENvbXBvbmVudCxcbiAgICAgIFRyYWNpbmdNYXJrZXJDb21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuVHJhY2luZ01hcmtlckNvbXBvbmVudDtcbiAgdmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gUmVhY3RQcmlvcml0eUxldmVscy5JbW1lZGlhdGVQcmlvcml0eSxcbiAgICAgIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gUmVhY3RQcmlvcml0eUxldmVscy5Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICAgIE5vcm1hbFByaW9yaXR5ID0gUmVhY3RQcmlvcml0eUxldmVscy5Ob3JtYWxQcmlvcml0eSxcbiAgICAgIExvd1ByaW9yaXR5ID0gUmVhY3RQcmlvcml0eUxldmVscy5Mb3dQcmlvcml0eSxcbiAgICAgIElkbGVQcmlvcml0eSA9IFJlYWN0UHJpb3JpdHlMZXZlbHMuSWRsZVByaW9yaXR5LFxuICAgICAgTm9Qcmlvcml0eSA9IFJlYWN0UHJpb3JpdHlMZXZlbHMuTm9Qcmlvcml0eTtcbiAgdmFyIGdldExhbmVMYWJlbE1hcCA9IHJlbmRlcmVyLmdldExhbmVMYWJlbE1hcCxcbiAgICAgIGluamVjdFByb2ZpbGluZ0hvb2tzID0gcmVuZGVyZXIuaW5qZWN0UHJvZmlsaW5nSG9va3MsXG4gICAgICBvdmVycmlkZUhvb2tTdGF0ZSA9IHJlbmRlcmVyLm92ZXJyaWRlSG9va1N0YXRlLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gcmVuZGVyZXIub3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gcmVuZGVyZXIub3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgICAgb3ZlcnJpZGVQcm9wcyA9IHJlbmRlcmVyLm92ZXJyaWRlUHJvcHMsXG4gICAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IHJlbmRlcmVyLm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSByZW5kZXJlci5vdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICAgIHNjaGVkdWxlUmVmcmVzaCA9IHJlbmRlcmVyLnNjaGVkdWxlUmVmcmVzaCxcbiAgICAgIHNldEVycm9ySGFuZGxlciA9IHJlbmRlcmVyLnNldEVycm9ySGFuZGxlcixcbiAgICAgIHNldFN1c3BlbnNlSGFuZGxlciA9IHJlbmRlcmVyLnNldFN1c3BlbnNlSGFuZGxlcixcbiAgICAgIHNjaGVkdWxlVXBkYXRlID0gcmVuZGVyZXIuc2NoZWR1bGVVcGRhdGU7XG4gIHZhciBzdXBwb3J0c1RvZ2dsaW5nRXJyb3IgPSB0eXBlb2Ygc2V0RXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzY2hlZHVsZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgdmFyIHN1cHBvcnRzVG9nZ2xpbmdTdXNwZW5zZSA9IHR5cGVvZiBzZXRTdXNwZW5zZUhhbmRsZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNjaGVkdWxlVXBkYXRlID09PSAnZnVuY3Rpb24nO1xuXG4gIGlmICh0eXBlb2Ygc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gV2hlbiBGYXN0IFJlZnJlc2ggdXBkYXRlcyBhIGNvbXBvbmVudCwgdGhlIGZyb250ZW5kIG1heSBuZWVkIHRvIHB1cmdlIGNhY2hlZCBpbmZvcm1hdGlvbi5cbiAgICAvLyBGb3IgZXhhbXBsZSwgQVNUcyBjYWNoZWQgZm9yIHRoZSBjb21wb25lbnQgKGZvciBuYW1lZCBob29rcykgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC5cbiAgICAvLyBTZW5kIGEgc2lnbmFsIHRvIHRoZSBmcm9udGVuZCB0byBwdXJnZSB0aGlzIGNhY2hlZCBpbmZvcm1hdGlvbi5cbiAgICAvLyBUaGUgXCJmYXN0UmVmcmVzaFNjaGVkdWxlZFwiIGRpc3BhdGNoZWQgaXMgZ2xvYmFsIChub3QgRmliZXIgb3IgZXZlbiBSZW5kZXJlciBzcGVjaWZpYykuXG4gICAgLy8gVGhpcyBpcyBsZXNzIGVmZmVjaWVudCBzaW5jZSBpdCBtZWFucyB0aGUgZnJvbnQtZW5kIHdpbGwgbmVlZCB0byBwdXJnZSB0aGUgZW50aXJlIGNhY2hlLFxuICAgIC8vIGJ1dCB0aGlzIGlzIHByb2JhYmx5IGFuIG9rYXkgdHJhZGUgb2ZmIGluIG9yZGVyIHRvIHJlZHVjZSBjb3VwbGluZyBiZXR3ZWVuIHRoZSBEZXZUb29scyBhbmQgRmFzdCBSZWZyZXNoLlxuICAgIHJlbmRlcmVyLnNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhvb2suZW1pdCgnZmFzdFJlZnJlc2hTY2hlZHVsZWQnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVJlZnJlc2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgZ2V0VGltZWxpbmVEYXRhID0gbnVsbDtcbiAgdmFyIHRvZ2dsZVByb2ZpbGluZ1N0YXR1cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBpbmplY3RQcm9maWxpbmdIb29rcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXNwb25zZSA9IGNyZWF0ZVByb2ZpbGluZ0hvb2tzKHtcbiAgICAgIGdldERpc3BsYXlOYW1lRm9yRmliZXI6IGdldERpc3BsYXlOYW1lRm9yRmliZXIsXG4gICAgICBnZXRJc1Byb2ZpbGluZzogZnVuY3Rpb24gZ2V0SXNQcm9maWxpbmcoKSB7XG4gICAgICAgIHJldHVybiBpc1Byb2ZpbGluZztcbiAgICAgIH0sXG4gICAgICBnZXRMYW5lTGFiZWxNYXA6IGdldExhbmVMYWJlbE1hcCxcbiAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiByZW5kZXJlci5jdXJyZW50RGlzcGF0Y2hlclJlZixcbiAgICAgIHdvcmtUYWdNYXA6IFJlYWN0VHlwZU9mV29yayxcbiAgICAgIHJlYWN0VmVyc2lvbjogdmVyc2lvblxuICAgIH0pOyAvLyBQYXNzIHRoZSBQcm9maWxpbmcgaG9va3MgdG8gdGhlIHJlY29uY2lsZXIgZm9yIGl0IHRvIGNhbGwgZHVyaW5nIHJlbmRlci5cblxuICAgIGluamVjdFByb2ZpbGluZ0hvb2tzKHJlc3BvbnNlLnByb2ZpbGluZ0hvb2tzKTsgLy8gSGFuZyBvbnRvIHRoaXMgdG9nZ2xlIHNvIHdlIGNhbiBub3RpZnkgdGhlIGV4dGVybmFsIG1ldGhvZHMgb2YgcHJvZmlsaW5nIHN0YXR1cyBjaGFuZ2VzLlxuXG4gICAgZ2V0VGltZWxpbmVEYXRhID0gcmVzcG9uc2UuZ2V0VGltZWxpbmVEYXRhO1xuICAgIHRvZ2dsZVByb2ZpbGluZ1N0YXR1cyA9IHJlc3BvbnNlLnRvZ2dsZVByb2ZpbGluZ1N0YXR1cztcbiAgfSAvLyBUcmFja3MgRmliZXJzIHdpdGggcmVjZW50bHkgY2hhbmdlZCBudW1iZXIgb2YgZXJyb3Ivd2FybmluZyBtZXNzYWdlcy5cbiAgLy8gVGhlc2UgY29sbGVjdGlvbnMgc3RvcmUgdGhlIEZpYmVyIHJhdGhlciB0aGFuIHRoZSBJRCxcbiAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBJRCBmb3IgRmliZXJzIHRoYXQgbmV2ZXIgZ2V0IG1vdW50ZWRcbiAgLy8gKGR1ZSB0byBlLmcuIFN1c3BlbnNlIG9yIGVycm9yIGJvdW5kYXJpZXMpLlxuICAvLyBvbkVycm9yT3JXYXJuaW5nKCkgYWRkcyBGaWJlcnMgYW5kIHJlY29yZFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5ncygpIGxhdGVyIGNsZWFycyB0aGVtLlxuXG5cbiAgdmFyIGZpYmVyc1dpdGhDaGFuZ2VkRXJyb3JPcldhcm5pbmdDb3VudHMgPSBuZXcgU2V0KCk7XG4gIHZhciBwZW5kaW5nRmliZXJUb0Vycm9yc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHBlbmRpbmdGaWJlclRvV2FybmluZ3NNYXAgPSBuZXcgTWFwKCk7IC8vIE1hcHBpbmcgb2YgZmliZXIgSURzIHRvIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgYW5kIGNvdW50cy5cblxuICB2YXIgZmliZXJJRFRvRXJyb3JzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgZmliZXJJRFRvV2FybmluZ3NNYXAgPSBuZXcgTWFwKCk7XG5cbiAgZnVuY3Rpb24gY2xlYXJFcnJvcnNBbmRXYXJuaW5ncygpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZm9yLW9mLWxvb3BzL25vLWZvci1vZi1sb29wc1xuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihmaWJlcklEVG9FcnJvcnNNYXAua2V5cygpKSxcbiAgICAgICAgX3N0ZXA7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIGlkID0gX3N0ZXAudmFsdWU7XG5cbiAgICAgICAgdmFyIF9maWJlciA9IGlkVG9BcmJpdHJhcnlGaWJlck1hcC5nZXQoaWQpO1xuXG4gICAgICAgIGlmIChfZmliZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyc1dpdGhDaGFuZ2VkRXJyb3JPcldhcm5pbmdDb3VudHMuYWRkKF9maWJlcik7XG4gICAgICAgICAgdXBkYXRlTW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudElmTmVjZXNzYXJ5KGlkKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZm9yLW9mLWxvb3BzL25vLWZvci1vZi1sb29wc1xuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBfaXRlcmF0b3IuZigpO1xuICAgIH1cblxuICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZmliZXJJRFRvV2FybmluZ3NNYXAua2V5cygpKSxcbiAgICAgICAgX3N0ZXAyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBfaWQgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgICAgdmFyIF9maWJlcjIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KF9pZCk7XG5cbiAgICAgICAgaWYgKF9maWJlcjIgIT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyc1dpdGhDaGFuZ2VkRXJyb3JPcldhcm5pbmdDb3VudHMuYWRkKF9maWJlcjIpO1xuICAgICAgICAgIHVwZGF0ZU1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRJZk5lY2Vzc2FyeShfaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfaXRlcmF0b3IyLmUoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgX2l0ZXJhdG9yMi5mKCk7XG4gICAgfVxuXG4gICAgZmliZXJJRFRvRXJyb3JzTWFwLmNsZWFyKCk7XG4gICAgZmliZXJJRFRvV2FybmluZ3NNYXAuY2xlYXIoKTtcbiAgICBmbHVzaFBlbmRpbmdFdmVudHMoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTWVzc2FnZUNvdW50SGVscGVyKGZpYmVySUQsIHBlbmRpbmdGaWJlclRvTWVzc2FnZUNvdW50TWFwLCBmaWJlcklEVG9NZXNzYWdlQ291bnRNYXApIHtcbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGZpYmVySUQpO1xuXG4gICAgaWYgKGZpYmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFRocm93IG91dCBhbnkgcGVuZGluZyBjaGFuZ2VzLlxuICAgICAgcGVuZGluZ0ZpYmVyVG9FcnJvcnNNYXAuZGVsZXRlKGZpYmVyKTtcblxuICAgICAgaWYgKGZpYmVySURUb01lc3NhZ2VDb3VudE1hcC5oYXMoZmliZXJJRCkpIHtcbiAgICAgICAgZmliZXJJRFRvTWVzc2FnZUNvdW50TWFwLmRlbGV0ZShmaWJlcklEKTsgLy8gSWYgcHJldmlvdXMgZmx1c2hlZCBjb3VudHMgaGF2ZSBjaGFuZ2VkLCBzY2hlZHVsZSBhbiB1cGRhdGUgdG9vLlxuXG4gICAgICAgIGZpYmVyc1dpdGhDaGFuZ2VkRXJyb3JPcldhcm5pbmdDb3VudHMuYWRkKGZpYmVyKTtcbiAgICAgICAgZmx1c2hQZW5kaW5nRXZlbnRzKCk7XG4gICAgICAgIHVwZGF0ZU1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRJZk5lY2Vzc2FyeShmaWJlcklEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpYmVyc1dpdGhDaGFuZ2VkRXJyb3JPcldhcm5pbmdDb3VudHMuZGVsZXRlKGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckVycm9yc0ZvckZpYmVySUQoZmliZXJJRCkge1xuICAgIGNsZWFyTWVzc2FnZUNvdW50SGVscGVyKGZpYmVySUQsIHBlbmRpbmdGaWJlclRvRXJyb3JzTWFwLCBmaWJlcklEVG9FcnJvcnNNYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQoZmliZXJJRCkge1xuICAgIGNsZWFyTWVzc2FnZUNvdW50SGVscGVyKGZpYmVySUQsIHBlbmRpbmdGaWJlclRvV2FybmluZ3NNYXAsIGZpYmVySURUb1dhcm5pbmdzTWFwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZU1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRJZk5lY2Vzc2FyeShmaWJlcklEKSB7XG4gICAgaWYgKG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQgIT09IG51bGwgJiYgbW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudC5pZCA9PT0gZmliZXJJRCkge1xuICAgICAgaGFzRWxlbWVudFVwZGF0ZWRTaW5jZUxhc3RJbnNwZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSAvLyBDYWxsZWQgd2hlbiBhbiBlcnJvciBvciB3YXJuaW5nIGlzIGxvZ2dlZCBkdXJpbmcgcmVuZGVyLCBjb21taXQsIG9yIHBhc3NpdmUgKGluY2x1ZGluZyB1bm1vdW50IGZ1bmN0aW9ucykuXG5cblxuICBmdW5jdGlvbiBvbkVycm9yT3JXYXJuaW5nKGZpYmVyLCB0eXBlLCBhcmdzKSB7XG4gICAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHZhciBtYXliZUlEID0gZ2V0RmliZXJJRFVuc2FmZShmaWJlcik7IC8vIGlmIHRoaXMgaXMgYW4gZXJyb3Igc2ltdWxhdGVkIGJ5IHVzIHRvIHRyaWdnZXIgZXJyb3IgYm91bmRhcnksIGlnbm9yZVxuXG4gICAgICBpZiAobWF5YmVJRCAhPSBudWxsICYmIGZvcmNlRXJyb3JGb3JGaWJlcklEcy5nZXQobWF5YmVJRCkgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtZXNzYWdlID0gZm9ybWF0LmFwcGx5KHZvaWQgMCwgcmVuZGVyZXJfdG9Db25zdW1hYmxlQXJyYXkoYXJncykpO1xuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgZGVidWcoJ29uRXJyb3JPcldhcm5pbmcnLCBmaWJlciwgbnVsbCwgXCJcIi5jb25jYXQodHlwZSwgXCI6IFxcXCJcIikuY29uY2F0KG1lc3NhZ2UsIFwiXFxcIlwiKSk7XG4gICAgfSAvLyBNYXJrIHRoaXMgRmliZXIgYXMgbmVlZGVkIGl0cyB3YXJuaW5nL2Vycm9yIGNvdW50IHVwZGF0ZWQgZHVyaW5nIHRoZSBuZXh0IGZsdXNoLlxuXG5cbiAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmFkZChmaWJlcik7IC8vIFRyYWNrIHRoZSB3YXJuaW5nL2Vycm9yIGZvciBsYXRlci5cblxuICAgIHZhciBmaWJlck1hcCA9IHR5cGUgPT09ICdlcnJvcicgPyBwZW5kaW5nRmliZXJUb0Vycm9yc01hcCA6IHBlbmRpbmdGaWJlclRvV2FybmluZ3NNYXA7XG4gICAgdmFyIG1lc3NhZ2VNYXAgPSBmaWJlck1hcC5nZXQoZmliZXIpO1xuXG4gICAgaWYgKG1lc3NhZ2VNYXAgIT0gbnVsbCkge1xuICAgICAgdmFyIGNvdW50ID0gbWVzc2FnZU1hcC5nZXQobWVzc2FnZSkgfHwgMDtcbiAgICAgIG1lc3NhZ2VNYXAuc2V0KG1lc3NhZ2UsIGNvdW50ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpYmVyTWFwLnNldChmaWJlciwgbmV3IE1hcChbW21lc3NhZ2UsIDFdXSkpO1xuICAgIH0gLy8gUGFzc2l2ZSBlZmZlY3RzIG1heSB0cmlnZ2VyIGVycm9ycyBvciB3YXJuaW5ncyB0b287XG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgd2FpdCB1bnRpbCB0aGUgcmVzdCBvZiB0aGUgcGFzc2l2ZSBlZmZlY3RzIGhhdmUgcnVuLFxuICAgIC8vIGJ1dCB3ZSBzaG91bGRuJ3Qgd2FpdCB1bnRpbCB0aGUgbmV4dCBjb21taXQgYmVjYXVzZSB0aGF0IG1pZ2h0IGJlIGEgbG9uZyB0aW1lLlxuICAgIC8vIFRoaXMgd291bGQgYWxzbyBjYXVzZSBcInRlYXJpbmdcIiBiZXR3ZWVuIGFuIGluc3BlY3RlZCBDb21wb25lbnQgYW5kIHRoZSB0cmVlIHZpZXcuXG4gICAgLy8gVGhlbiBhZ2FpbiB3ZSBkb24ndCB3YW50IHRvIGZsdXNoIHRvbyBzb29uIGJlY2F1c2UgdGhpcyBjb3VsZCBiZSBhbiBlcnJvciBkdXJpbmcgYXN5bmMgcmVuZGVyaW5nLlxuICAgIC8vIFVzZSBhIGRlYm91bmNlIHRlY2huaXF1ZSB0byBlbnN1cmUgdGhhdCB3ZSdsbCBldmVudHVhbGx5IGZsdXNoLlxuXG5cbiAgICBmbHVzaFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXkoKTtcbiAgfSAvLyBQYXRjaGluZyB0aGUgY29uc29sZSBlbmFibGVzIERldlRvb2xzIHRvIGRvIGEgZmV3IHVzZWZ1bCB0aGluZ3M6XG4gIC8vICogQXBwZW5kIGNvbXBvbmVudCBzdGFja3MgdG8gd2FybmluZ3MgYW5kIGVycm9yIG1lc3NhZ2VzXG4gIC8vICogRGlzYWJsZSBsb2dnaW5nIGR1cmluZyByZS1yZW5kZXJzIHRvIGluc3BlY3QgaG9va3MgKHNlZSBpbnNwZWN0SG9va3NPZkZpYmVyKVxuXG5cbiAgcmVnaXN0ZXJSZW5kZXJlcihyZW5kZXJlciwgb25FcnJvck9yV2FybmluZyk7IC8vIFRoZSByZW5kZXJlciBpbnRlcmZhY2UgY2FuJ3QgcmVhZCB0aGVzZSBwcmVmZXJlbmNlcyBkaXJlY3RseSxcbiAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgaW4gbG9jYWxTdG9yYWdlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXh0ZW5zaW9uLlxuICAvLyBJdCByZWxpZXMgb24gdGhlIGV4dGVuc2lvbiB0byBwYXNzIHRoZSBwcmVmZXJlbmNlIHRocm91Z2ggdmlhIHRoZSBnbG9iYWwuXG5cbiAgcGF0Y2hDb25zb2xlVXNpbmdXaW5kb3dWYWx1ZXMoKTtcblxuICB2YXIgZGVidWcgPSBmdW5jdGlvbiBkZWJ1ZyhuYW1lLCBmaWJlciwgcGFyZW50RmliZXIpIHtcbiAgICB2YXIgZXh0cmFTdHJpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcnO1xuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gZmliZXIudGFnICsgJzonICsgKGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICdudWxsJyk7XG4gICAgICB2YXIgbWF5YmVJRCA9IGdldEZpYmVySURVbnNhZmUoZmliZXIpIHx8ICc8bm8gaWQ+JztcbiAgICAgIHZhciBwYXJlbnREaXNwbGF5TmFtZSA9IHBhcmVudEZpYmVyID8gcGFyZW50RmliZXIudGFnICsgJzonICsgKGdldERpc3BsYXlOYW1lRm9yRmliZXIocGFyZW50RmliZXIpIHx8ICdudWxsJykgOiAnJztcbiAgICAgIHZhciBtYXliZVBhcmVudElEID0gcGFyZW50RmliZXIgPyBnZXRGaWJlcklEVW5zYWZlKHBhcmVudEZpYmVyKSB8fCAnPG5vLWlkPicgOiAnJztcbiAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCJbcmVuZGVyZXJdICVjXCIuY29uY2F0KG5hbWUsIFwiICVjXCIpLmNvbmNhdChkaXNwbGF5TmFtZSwgXCIgKFwiKS5jb25jYXQobWF5YmVJRCwgXCIpICVjXCIpLmNvbmNhdChwYXJlbnRGaWJlciA/IFwiXCIuY29uY2F0KHBhcmVudERpc3BsYXlOYW1lLCBcIiAoXCIpLmNvbmNhdChtYXliZVBhcmVudElELCBcIilcIikgOiAnJywgXCIgJWNcIikuY29uY2F0KGV4dHJhU3RyaW5nKSwgJ2NvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBib2xkOycsICdjb2xvcjogYmx1ZTsnLCAnY29sb3I6IHB1cnBsZTsnLCAnY29sb3I6IGJsYWNrOycpO1xuICAgICAgY29uc29sZS5sb2cobmV3IEVycm9yKCkuc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpKTtcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICB9XG4gIH07IC8vIENvbmZpZ3VyYWJsZSBDb21wb25lbnRzIHRyZWUgZmlsdGVycy5cblxuXG4gIHZhciBoaWRlRWxlbWVudHNXaXRoRGlzcGxheU5hbWVzID0gbmV3IFNldCgpO1xuICB2YXIgaGlkZUVsZW1lbnRzV2l0aFBhdGhzID0gbmV3IFNldCgpO1xuICB2YXIgaGlkZUVsZW1lbnRzV2l0aFR5cGVzID0gbmV3IFNldCgpOyAvLyBIaWdobGlnaHQgdXBkYXRlc1xuXG4gIHZhciB0cmFjZVVwZGF0ZXNFbmFibGVkID0gZmFsc2U7XG4gIHZhciB0cmFjZVVwZGF0ZXNGb3JOb2RlcyA9IG5ldyBTZXQoKTtcblxuICBmdW5jdGlvbiBhcHBseUNvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycykge1xuICAgIGhpZGVFbGVtZW50c1dpdGhUeXBlcy5jbGVhcigpO1xuICAgIGhpZGVFbGVtZW50c1dpdGhEaXNwbGF5TmFtZXMuY2xlYXIoKTtcbiAgICBoaWRlRWxlbWVudHNXaXRoUGF0aHMuY2xlYXIoKTtcbiAgICBjb21wb25lbnRGaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudEZpbHRlcikge1xuICAgICAgaWYgKCFjb21wb25lbnRGaWx0ZXIuaXNFbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjb21wb25lbnRGaWx0ZXIudHlwZSkge1xuICAgICAgICBjYXNlIENvbXBvbmVudEZpbHRlckRpc3BsYXlOYW1lOlxuICAgICAgICAgIGlmIChjb21wb25lbnRGaWx0ZXIuaXNWYWxpZCAmJiBjb21wb25lbnRGaWx0ZXIudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICBoaWRlRWxlbWVudHNXaXRoRGlzcGxheU5hbWVzLmFkZChuZXcgUmVnRXhwKGNvbXBvbmVudEZpbHRlci52YWx1ZSwgJ2knKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb21wb25lbnRGaWx0ZXJFbGVtZW50VHlwZTpcbiAgICAgICAgICBoaWRlRWxlbWVudHNXaXRoVHlwZXMuYWRkKGNvbXBvbmVudEZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb21wb25lbnRGaWx0ZXJMb2NhdGlvbjpcbiAgICAgICAgICBpZiAoY29tcG9uZW50RmlsdGVyLmlzVmFsaWQgJiYgY29tcG9uZW50RmlsdGVyLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgaGlkZUVsZW1lbnRzV2l0aFBhdGhzLmFkZChuZXcgUmVnRXhwKGNvbXBvbmVudEZpbHRlci52YWx1ZSwgJ2knKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb21wb25lbnRGaWx0ZXJIT0M6XG4gICAgICAgICAgaGlkZUVsZW1lbnRzV2l0aERpc3BsYXlOYW1lcy5hZGQobmV3IFJlZ0V4cCgnXFxcXCgnKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIGNvbXBvbmVudCBmaWx0ZXIgdHlwZSBcXFwiXCIuY29uY2F0KGNvbXBvbmVudEZpbHRlci50eXBlLCBcIlxcXCJcIikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9IC8vIFRoZSByZW5kZXJlciBpbnRlcmZhY2UgY2FuJ3QgcmVhZCBzYXZlZCBjb21wb25lbnQgZmlsdGVycyBkaXJlY3RseSxcbiAgLy8gYmVjYXVzZSB0aGV5IGFyZSBzdG9yZWQgaW4gbG9jYWxTdG9yYWdlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXh0ZW5zaW9uLlxuICAvLyBJbnN0ZWFkIGl0IHJlbGllcyBvbiB0aGUgZXh0ZW5zaW9uIHRvIHBhc3MgZmlsdGVycyB0aHJvdWdoLlxuXG5cbiAgaWYgKHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0NPTVBPTkVOVF9GSUxURVJTX18gIT0gbnVsbCkge1xuICAgIGFwcGx5Q29tcG9uZW50RmlsdGVycyh3aW5kb3cuX19SRUFDVF9ERVZUT09MU19DT01QT05FTlRfRklMVEVSU19fKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVbmZvcnR1bmF0ZWx5IHRoaXMgZmVhdHVyZSBpcyBub3QgZXhwZWN0ZWQgdG8gd29yayBmb3IgUmVhY3QgTmF0aXZlIGZvciBub3cuXG4gICAgLy8gSXQgd291bGQgYmUgYW5ub3lpbmcgZm9yIHVzIHRvIHNwYW0gWWVsbG93Qm94IHdhcm5pbmdzIHdpdGggdW5hY3Rpb25hYmxlIHN0dWZmLFxuICAgIC8vIHNvIGZvciBub3cganVzdCBza2lwIHRoaXMgbWVzc2FnZS4uLlxuICAgIC8vY29uc29sZS53YXJuKCfimpvvuI8gRGV2VG9vbHM6IENvdWxkIG5vdCBsb2NhdGUgc2F2ZWQgY29tcG9uZW50IGZpbHRlcnMnKTtcbiAgICAvLyBGYWxsYmFjayB0byBhc3N1bWluZyB0aGUgZGVmYXVsdCBmaWx0ZXJzIGluIHRoaXMgY2FzZS5cbiAgICBhcHBseUNvbXBvbmVudEZpbHRlcnMoZ2V0RGVmYXVsdENvbXBvbmVudEZpbHRlcnMoKSk7XG4gIH0gLy8gSWYgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCBvcHRpbWl6aW5nIHRoaXMgb3BlcmF0aW9uLlxuICAvLyBGb3IgZXhhbXBsZSwgd2UgY291bGQgYWRkIGEgbmV3IHJlY3Vyc2l2ZSB1bm1vdW50IHRyZWUgb3BlcmF0aW9uLlxuICAvLyBUaGUgdW5tb3VudCBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNpZ25pZmljYW50bHkgc21hbGxlciB0aGFuIG1vdW50IG9wZXJhdGlvbnMgdGhvdWdoLlxuICAvLyBUaGlzIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGxhdGVyLlxuXG5cbiAgZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50RmlsdGVycyhjb21wb25lbnRGaWx0ZXJzKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAvLyBSZS1tb3VudGluZyBhIHRyZWUgd2hpbGUgcHJvZmlsaW5nIGlzIGluIHByb2dyZXNzIG1pZ2h0IGJyZWFrIGEgbG90IG9mIGFzc3VtcHRpb25zLlxuICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB3ZSBjb3VsZCBzdXBwb3J0IHRoaXMtIGJ1dCBpdCBkb2Vzbid0IHNlZW0gbGlrZSBhIG5lY2Vzc2FyeSB1c2UgY2FzZS5cbiAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgbW9kaWZ5IGZpbHRlciBwcmVmZXJlbmNlcyB3aGlsZSBwcm9maWxpbmcnKTtcbiAgICB9IC8vIFJlY3Vyc2l2ZWx5IHVubW91bnQgYWxsIHJvb3RzLlxuXG5cbiAgICBob29rLmdldEZpYmVyUm9vdHMocmVuZGVyZXJJRCkuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgY3VycmVudFJvb3RJRCA9IGdldE9yR2VuZXJhdGVGaWJlcklEKHJvb3QuY3VycmVudCk7IC8vIFRoZSBUUkVFX09QRVJBVElPTl9SRU1PVkVfUk9PVCBvcGVyYXRpb24gc2VydmVzIHR3byBwdXJwb3NlczpcbiAgICAgIC8vIDEuIEl0IGF2b2lkcyBzZW5kaW5nIHVubmVjZXNzYXJ5IGJyaWRnZSB0cmFmZmljIHRvIGNsZWFyIGEgcm9vdC5cbiAgICAgIC8vIDIuIEl0IHByZXNlcnZlcyBGaWJlciBJRHMgd2hlbiByZW1vdW50aW5nIChiZWxvdykgd2hpY2ggaW4gdHVybiBJRCB0byBlcnJvci93YXJuaW5nIG1hcHBpbmcuXG5cbiAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fUkVNT1ZFX1JPT1QpO1xuICAgICAgZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3QpO1xuICAgICAgY3VycmVudFJvb3RJRCA9IC0xO1xuICAgIH0pO1xuICAgIGFwcGx5Q29tcG9uZW50RmlsdGVycyhjb21wb25lbnRGaWx0ZXJzKTsgLy8gUmVzZXQgcHNldWRvIGNvdW50ZXJzIHNvIHRoYXQgbmV3IHBhdGggc2VsZWN0aW9ucyB3aWxsIGJlIHBlcnNpc3RlZC5cblxuICAgIHJvb3REaXNwbGF5TmFtZUNvdW50ZXIuY2xlYXIoKTsgLy8gUmVjdXJzaXZlbHkgcmUtbW91bnQgYWxsIHJvb3RzIHdpdGggbmV3IGZpbHRlciBjcml0ZXJpYSBhcHBsaWVkLlxuXG4gICAgaG9vay5nZXRGaWJlclJvb3RzKHJlbmRlcmVySUQpLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIGN1cnJlbnRSb290SUQgPSBnZXRPckdlbmVyYXRlRmliZXJJRChyb290LmN1cnJlbnQpO1xuICAgICAgc2V0Um9vdFBzZXVkb0tleShjdXJyZW50Um9vdElELCByb290LmN1cnJlbnQpO1xuICAgICAgbW91bnRGaWJlclJlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgbnVsbCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZsdXNoUGVuZGluZ0V2ZW50cyhyb290KTtcbiAgICAgIGN1cnJlbnRSb290SUQgPSAtMTtcbiAgICB9KTsgLy8gQWxzbyByZS1ldmFsdWF0ZSBhbGwgZXJyb3IgYW5kIHdhcm5pbmcgY291bnRzIGdpdmVuIHRoZSBuZXcgZmlsdGVycy5cblxuICAgIHJlZXZhbHVhdGVFcnJvcnNBbmRXYXJuaW5ncygpO1xuICAgIGZsdXNoUGVuZGluZ0V2ZW50cygpO1xuICB9IC8vIE5PVElDRSBLZWVwIGluIHN5bmMgd2l0aCBnZXQqRm9yRmliZXIgbWV0aG9kc1xuXG5cbiAgZnVuY3Rpb24gc2hvdWxkRmlsdGVyRmliZXIoZmliZXIpIHtcbiAgICB2YXIgX2RlYnVnU291cmNlID0gZmliZXIuX2RlYnVnU291cmNlLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlLFxuICAgICAgICBrZXkgPSBmaWJlci5rZXk7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgIC8vIFRPRE86IGlkZWFsbHkgd2Ugd291bGQgc2hvdyBkZWh5ZHJhdGVkIFN1c3BlbnNlIGltbWVkaWF0ZWx5LlxuICAgICAgICAvLyBIb3dldmVyLCBpdCBoYXMgc29tZSBzcGVjaWFsIGJlaGF2aW9yIChsaWtlIGRpc2Nvbm5lY3RpbmdcbiAgICAgICAgLy8gYW4gYWx0ZXJuYXRlIGFuZCB0dXJuaW5nIGludG8gcmVhbCBTdXNwZW5zZSkgd2hpY2ggYnJlYWtzIERldlRvb2xzLlxuICAgICAgICAvLyBGb3Igbm93LCBpZ25vcmUgaXQsIGFuZCBvbmx5IHNob3cgaXQgb25jZSBpdCBnZXRzIGh5ZHJhdGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC1kZXZ0b29scy1leHBlcmltZW50YWwvaXNzdWVzLzE5N1xuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAvLyBJdCBpcyBuZXZlciB2YWxpZCB0byBmaWx0ZXIgdGhlIHJvb3QgZWxlbWVudC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICByZXR1cm4ga2V5ID09PSBudWxsO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdHlwZVN5bWJvbCA9IGdldFR5cGVTeW1ib2wodHlwZSk7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlU3ltYm9sKSB7XG4gICAgICAgICAgY2FzZSBDT05DVVJSRU5UX01PREVfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgQ09OQ1VSUkVOVF9NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgY2FzZSBERVBSRUNBVEVEX0FTWU5DX01PREVfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICBjYXNlIFNUUklDVF9NT0RFX05VTUJFUjpcbiAgICAgICAgICBjYXNlIFNUUklDVF9NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaGlkZUVsZW1lbnRzV2l0aFR5cGVzLmhhcyhlbGVtZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChoaWRlRWxlbWVudHNXaXRoRGlzcGxheU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKTtcblxuICAgICAgaWYgKGRpc3BsYXlOYW1lICE9IG51bGwpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZvci1vZi1sb29wcy9uby1mb3Itb2YtbG9vcHNcbiAgICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihoaWRlRWxlbWVudHNXaXRoRGlzcGxheU5hbWVzKSxcbiAgICAgICAgICAgIF9zdGVwMztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMy5zKCk7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICB2YXIgZGlzcGxheU5hbWVSZWdFeHAgPSBfc3RlcDMudmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChkaXNwbGF5TmFtZVJlZ0V4cC50ZXN0KGRpc3BsYXlOYW1lKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIF9pdGVyYXRvcjMuZigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKF9kZWJ1Z1NvdXJjZSAhPSBudWxsICYmIGhpZGVFbGVtZW50c1dpdGhQYXRocy5zaXplID4gMCkge1xuICAgICAgdmFyIGZpbGVOYW1lID0gX2RlYnVnU291cmNlLmZpbGVOYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZm9yLW9mLWxvb3BzL25vLWZvci1vZi1sb29wc1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yNCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGhpZGVFbGVtZW50c1dpdGhQYXRocyksXG4gICAgICAgICAgX3N0ZXA0O1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjQucygpOyAhKF9zdGVwNCA9IF9pdGVyYXRvcjQubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBwYXRoUmVnRXhwID0gX3N0ZXA0LnZhbHVlO1xuXG4gICAgICAgICAgaWYgKHBhdGhSZWdFeHAudGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjQuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yNC5mKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE5PVElDRSBLZWVwIGluIHN5bmMgd2l0aCBzaG91bGRGaWx0ZXJGaWJlcigpIGFuZCBvdGhlciBnZXQqRm9yRmliZXIgbWV0aG9kc1xuXG5cbiAgZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcikge1xuICAgIHZhciB0eXBlID0gZmliZXIudHlwZSxcbiAgICAgICAgdGFnID0gZmliZXIudGFnO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuIHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3M7XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiB0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHJldHVybiB0eXBlc19FbGVtZW50VHlwZUZvcndhcmRSZWY7XG5cbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHJldHVybiBFbGVtZW50VHlwZVJvb3Q7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlSG9zdENvbXBvbmVudDtcblxuICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgIHJldHVybiBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duO1xuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHJldHVybiB0eXBlc19FbGVtZW50VHlwZU1lbW87XG5cbiAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiBFbGVtZW50VHlwZVN1c3BlbnNlO1xuXG4gICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlU3VzcGVuc2VMaXN0O1xuXG4gICAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiBFbGVtZW50VHlwZVRyYWNpbmdNYXJrZXI7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciB0eXBlU3ltYm9sID0gZ2V0VHlwZVN5bWJvbCh0eXBlKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGVTeW1ib2wpIHtcbiAgICAgICAgICBjYXNlIENPTkNVUlJFTlRfTU9ERV9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBDT05DVVJSRU5UX01PREVfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICBjYXNlIERFUFJFQ0FURURfQVNZTkNfTU9ERV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlT3RoZXJPclVua25vd247XG5cbiAgICAgICAgICBjYXNlIFBST1ZJREVSX05VTUJFUjpcbiAgICAgICAgICBjYXNlIFBST1ZJREVSX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVDb250ZXh0O1xuXG4gICAgICAgICAgY2FzZSBDT05URVhUX05VTUJFUjpcbiAgICAgICAgICBjYXNlIENPTlRFWFRfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIHJldHVybiBFbGVtZW50VHlwZUNvbnRleHQ7XG5cbiAgICAgICAgICBjYXNlIFNUUklDVF9NT0RFX05VTUJFUjpcbiAgICAgICAgICBjYXNlIFNUUklDVF9NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVPdGhlck9yVW5rbm93bjtcblxuICAgICAgICAgIGNhc2UgUFJPRklMRVJfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgUFJPRklMRVJfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIHJldHVybiBFbGVtZW50VHlwZVByb2ZpbGVyO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0gLy8gV2hlbiBwcm9maWxpbmcgaXMgc3VwcG9ydGVkLCB3ZSBzdG9yZSB0aGUgbGF0ZXN0IHRyZWUgYmFzZSBkdXJhdGlvbnMgZm9yIGVhY2ggRmliZXIuXG4gIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gcXVpY2tseSBjYXB0dXJlIGEgc25hcHNob3Qgb2YgdGhvc2UgdmFsdWVzIGlmIHByb2ZpbGluZyBzdGFydHMuXG4gIC8vIElmIHdlIGRpZG4ndCBzdG9yZSB0aGVzZSB2YWx1ZXMsIHdlJ2QgaGF2ZSB0byBjcmF3bCB0aGUgdHJlZSB3aGVuIHByb2ZpbGluZyBzdGFydGVkLFxuICAvLyBhbmQgdXNlIGEgc2xvdyBwYXRoIHRvIGZpbmQgZWFjaCBvZiB0aGUgY3VycmVudCBGaWJlcnMuXG5cblxuICB2YXIgaWRUb1RyZWVCYXNlRHVyYXRpb25NYXAgPSBuZXcgTWFwKCk7IC8vIFdoZW4gcHJvZmlsaW5nIGlzIHN1cHBvcnRlZCwgd2Ugc3RvcmUgdGhlIGxhdGVzdCB0cmVlIGJhc2UgZHVyYXRpb25zIGZvciBlYWNoIEZpYmVyLlxuICAvLyBUaGlzIG1hcCBlbmFibGVzIHVzIHRvIGZpbHRlciB0aGVzZSB0aW1lcyBieSByb290IHdoZW4gc2VuZGluZyB0aGVtIHRvIHRoZSBmcm9udGVuZC5cblxuICB2YXIgaWRUb1Jvb3RNYXAgPSBuZXcgTWFwKCk7IC8vIFdoZW4gYSBtb3VudCBvciB1cGRhdGUgaXMgaW4gcHJvZ3Jlc3MsIHRoaXMgdmFsdWUgdHJhY2tzIHRoZSByb290IHRoYXQgaXMgYmVpbmcgb3BlcmF0ZWQgb24uXG5cbiAgdmFyIGN1cnJlbnRSb290SUQgPSAtMTsgLy8gUmV0dXJucyB0aGUgdW5pcXVlIElEIGZvciBhIEZpYmVyIG9yIGdlbmVyYXRlcyBhbmQgY2FjaGVzIGEgbmV3IG9uZSBpZiB0aGUgRmliZXIgaGFzbid0IGJlZW4gc2VlbiBiZWZvcmUuXG4gIC8vIE9uY2UgdGhpcyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIGZvciBhIEZpYmVyLCB1bnRyYWNrRmliZXJJRCgpIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGxhdGVyIHRvIGF2b2lkIGxlYWtpbmcuXG5cbiAgZnVuY3Rpb24gZ2V0T3JHZW5lcmF0ZUZpYmVySUQoZmliZXIpIHtcbiAgICB2YXIgaWQgPSBudWxsO1xuXG4gICAgaWYgKGZpYmVyVG9JRE1hcC5oYXMoZmliZXIpKSB7XG4gICAgICBpZCA9IGZpYmVyVG9JRE1hcC5nZXQoZmliZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2FsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKF9hbHRlcm5hdGUgIT09IG51bGwgJiYgZmliZXJUb0lETWFwLmhhcyhfYWx0ZXJuYXRlKSkge1xuICAgICAgICBpZCA9IGZpYmVyVG9JRE1hcC5nZXQoX2FsdGVybmF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRpZEdlbmVyYXRlSUQgPSBmYWxzZTtcblxuICAgIGlmIChpZCA9PT0gbnVsbCkge1xuICAgICAgZGlkR2VuZXJhdGVJRCA9IHRydWU7XG4gICAgICBpZCA9IGdldFVJRCgpO1xuICAgIH0gLy8gVGhpcyByZWZpbmVtZW50IGlzIGZvciBGbG93IHB1cnBvc2VzIG9ubHkuXG5cblxuICAgIHZhciByZWZpbmVkSUQgPSBpZDsgLy8gTWFrZSBzdXJlIHdlJ3JlIHRyYWNraW5nIHRoaXMgRmliZXJcbiAgICAvLyBlLmcuIGlmIGl0IGp1c3QgbW91bnRlZCBvciBhbiBlcnJvciB3YXMgbG9nZ2VkIGR1cmluZyBpbml0aWFsIHJlbmRlci5cblxuICAgIGlmICghZmliZXJUb0lETWFwLmhhcyhmaWJlcikpIHtcbiAgICAgIGZpYmVyVG9JRE1hcC5zZXQoZmliZXIsIHJlZmluZWRJRCk7XG4gICAgICBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuc2V0KHJlZmluZWRJRCwgZmliZXIpO1xuICAgIH0gLy8gQWxzbyBtYWtlIHN1cmUgd2UncmUgdHJhY2tpbmcgaXRzIGFsdGVybmF0ZSxcbiAgICAvLyBlLmcuIGluIGNhc2UgdGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIGFmdGVyIG1vdW50LlxuXG5cbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKCFmaWJlclRvSURNYXAuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgZmliZXJUb0lETWFwLnNldChhbHRlcm5hdGUsIHJlZmluZWRJRCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgaWYgKGRpZEdlbmVyYXRlSUQpIHtcbiAgICAgICAgZGVidWcoJ2dldE9yR2VuZXJhdGVGaWJlcklEKCknLCBmaWJlciwgZmliZXIucmV0dXJuLCAnR2VuZXJhdGVkIGEgbmV3IFVJRCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZpbmVkSUQ7XG4gIH0gLy8gUmV0dXJucyBhbiBJRCBpZiBvbmUgaGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgZm9yIHRoZSBGaWJlciBvciB0aHJvd3MuXG5cblxuICBmdW5jdGlvbiBnZXRGaWJlcklEVGhyb3dzKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlSUQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTtcblxuICAgIGlmIChtYXliZUlEICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbWF5YmVJRDtcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIElEIGZvciBGaWJlciBcXFwiXCIuY29uY2F0KGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICcnLCBcIlxcXCJcIikpO1xuICB9IC8vIFJldHVybnMgYW4gSUQgaWYgb25lIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkIGZvciB0aGUgRmliZXIgb3IgbnVsbCBpZiBvbmUgaGFzIG5vdCBiZWVuIGdlbmVyYXRlZC5cbiAgLy8gVXNlIHRoaXMgbWV0aG9kIHdoaWxlIGUuZy4gbG9nZ2luZyB0byBhdm9pZCBvdmVyLXJldGFpbmluZyBGaWJlcnMuXG5cblxuICBmdW5jdGlvbiBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKSB7XG4gICAgaWYgKGZpYmVyVG9JRE1hcC5oYXMoZmliZXIpKSB7XG4gICAgICByZXR1cm4gZmliZXJUb0lETWFwLmdldChmaWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgZmliZXJUb0lETWFwLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIHJldHVybiBmaWJlclRvSURNYXAuZ2V0KGFsdGVybmF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gUmVtb3ZlcyBhIEZpYmVyIChhbmQgaXRzIGFsdGVybmF0ZSkgZnJvbSB0aGUgTWFwcyB1c2VkIHRvIHRyYWNrIHRoZWlyIGlkLlxuICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB3aGVuIGEgRmliZXIgaXMgdW5tb3VudGluZy5cblxuXG4gIGZ1bmN0aW9uIHVudHJhY2tGaWJlcklEKGZpYmVyKSB7XG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgZGVidWcoJ3VudHJhY2tGaWJlcklEKCknLCBmaWJlciwgZmliZXIucmV0dXJuLCAnc2NoZWR1bGUgYWZ0ZXIgZGVsYXknKTtcbiAgICB9IC8vIFVudHJhY2sgRmliZXJzIGFmdGVyIGEgc2xpZ2h0IGRlbGF5IGluIG9yZGVyIHRvIHN1cHBvcnQgYSBGYXN0IFJlZnJlc2ggZWRnZSBjYXNlOlxuICAgIC8vIDEuIENvbXBvbmVudCB0eXBlIGlzIHVwZGF0ZWQgYW5kIEZhc3QgUmVmcmVzaCBzY2hlZHVsZXMgYW4gdXBkYXRlK3JlbW91bnQuXG4gICAgLy8gMi4gZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5KCkgcnVucywgc2VlcyB0aGUgb2xkIEZpYmVyIGlzIG5vIGxvbmdlciBtb3VudGVkXG4gICAgLy8gICAgKGl0J3MgYmVlbiBkaXNjb25uZWN0ZWQgYnkgRmFzdCBSZWZyZXNoKSwgYW5kIGNhbGxzIHVudHJhY2tGaWJlcklEKCkgdG8gY2xlYXIgaXQgZnJvbSB0aGUgTWFwLlxuICAgIC8vIDMuIFJlYWN0IGZsdXNoZXMgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYmVmb3JlIGl0IHJ1bnMgdGhlIG5leHQgcmVuZGVyLFxuICAgIC8vICAgIHdoaWNoIGxvZ3MgYW4gZXJyb3Igb3Igd2FybmluZywgd2hpY2ggY2F1c2VzIGEgbmV3IElEIHRvIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBGaWJlci5cbiAgICAvLyA0LiBEZXZUb29scyBub3cgdHJpZXMgdG8gdW5tb3VudCB0aGUgb2xkIENvbXBvbmVudCB3aXRoIHRoZSBuZXcgSUQuXG4gICAgLy9cbiAgICAvLyBUaGUgdW5kZXJseWluZyBwcm9ibGVtIGhlcmUgaXMgdGhlIHByZW1hdHVyZSBjbGVhcmluZyBvZiB0aGUgRmliZXIgSUQsXG4gICAgLy8gYnV0IERldlRvb2xzIGhhcyBubyB3YXkgdG8gZGV0ZWN0IHRoYXQgYSBnaXZlbiBGaWJlciBoYXMgYmVlbiBzY2hlZHVsZWQgZm9yIEZhc3QgUmVmcmVzaC5cbiAgICAvLyAoVGhlIFwiX2RlYnVnTmVlZHNSZW1vdW50XCIgZmxhZyB3b24ndCBuZWNlc3NhcmlseSBiZSBzZXQuKVxuICAgIC8vXG4gICAgLy8gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzIHRvIGRlbGF5IHVudHJhY2tpbmcgYnkgYSBzbWFsbCBhbW91bnQsXG4gICAgLy8gYW5kIGdpdmUgUmVhY3QgdGltZSB0byBwcm9jZXNzIHRoZSBGYXN0IFJlZnJlc2ggZGVsYXkuXG5cblxuICAgIHVudHJhY2tGaWJlcnNTZXQuYWRkKGZpYmVyKTsgLy8gUmVhY3QgbWF5IGRldGFjaCBhbHRlcm5hdGUgcG9pbnRlcnMgZHVyaW5nIHVubW91bnQ7XG4gICAgLy8gU2luY2Ugb3VyIHVudHJhY2tpbmcgY29kZSBpcyBhc3luYywgd2Ugc2hvdWxkIGV4cGxpY2lseSB0cmFjayB0aGUgcGVuZGluZyBhbHRlcm5hdGUgaGVyZSBhcyB3ZWxsLlxuXG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIHVudHJhY2tGaWJlcnNTZXQuYWRkKGFsdGVybmF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHVudHJhY2tGaWJlcnNUaW1lb3V0SUQgPT09IG51bGwpIHtcbiAgICAgIHVudHJhY2tGaWJlcnNUaW1lb3V0SUQgPSBzZXRUaW1lb3V0KHVudHJhY2tGaWJlcnMsIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1bnRyYWNrRmliZXJzU2V0ID0gbmV3IFNldCgpO1xuICB2YXIgdW50cmFja0ZpYmVyc1RpbWVvdXRJRCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdW50cmFja0ZpYmVycygpIHtcbiAgICBpZiAodW50cmFja0ZpYmVyc1RpbWVvdXRJRCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHVudHJhY2tGaWJlcnNUaW1lb3V0SUQpO1xuICAgICAgdW50cmFja0ZpYmVyc1RpbWVvdXRJRCA9IG51bGw7XG4gICAgfVxuXG4gICAgdW50cmFja0ZpYmVyc1NldC5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgdmFyIGZpYmVySUQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTtcblxuICAgICAgaWYgKGZpYmVySUQgIT09IG51bGwpIHtcbiAgICAgICAgaWRUb0FyYml0cmFyeUZpYmVyTWFwLmRlbGV0ZShmaWJlcklEKTsgLy8gQWxzbyBjbGVhciBhbnkgZXJyb3JzL3dhcm5pbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpYmVyLlxuXG4gICAgICAgIGNsZWFyRXJyb3JzRm9yRmliZXJJRChmaWJlcklEKTtcbiAgICAgICAgY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQoZmliZXJJRCk7XG4gICAgICB9XG5cbiAgICAgIGZpYmVyVG9JRE1hcC5kZWxldGUoZmliZXIpO1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBmaWJlclRvSURNYXAuZGVsZXRlKGFsdGVybmF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JjZUVycm9yRm9yRmliZXJJRHMuaGFzKGZpYmVySUQpKSB7XG4gICAgICAgIGZvcmNlRXJyb3JGb3JGaWJlcklEcy5kZWxldGUoZmliZXJJRCk7XG5cbiAgICAgICAgaWYgKGZvcmNlRXJyb3JGb3JGaWJlcklEcy5zaXplID09PSAwICYmIHNldEVycm9ySGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgc2V0RXJyb3JIYW5kbGVyKHNob3VsZEVycm9yRmliZXJBbHdheXNOdWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHVudHJhY2tGaWJlcnNTZXQuY2xlYXIoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENoYW5nZURlc2NyaXB0aW9uKHByZXZGaWJlciwgbmV4dEZpYmVyKSB7XG4gICAgc3dpdGNoIChnZXRFbGVtZW50VHlwZUZvckZpYmVyKG5leHRGaWJlcikpIHtcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVDbGFzczpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVNZW1vOlxuICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUZvcndhcmRSZWY6XG4gICAgICAgIGlmIChwcmV2RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGV4dDogbnVsbCxcbiAgICAgICAgICAgIGRpZEhvb2tzQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmlyc3RNb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiBudWxsLFxuICAgICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgY29udGV4dDogZ2V0Q29udGV4dENoYW5nZWRLZXlzKG5leHRGaWJlciksXG4gICAgICAgICAgICBkaWRIb29rc0NoYW5nZTogZmFsc2UsXG4gICAgICAgICAgICBpc0ZpcnN0TW91bnQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcHM6IGdldENoYW5nZWRLZXlzKHByZXZGaWJlci5tZW1vaXplZFByb3BzLCBuZXh0RmliZXIubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICBzdGF0ZTogZ2V0Q2hhbmdlZEtleXMocHJldkZpYmVyLm1lbW9pemVkU3RhdGUsIG5leHRGaWJlci5tZW1vaXplZFN0YXRlKVxuICAgICAgICAgIH07IC8vIE9ubHkgdHJhdmVyc2UgdGhlIGhvb2tzIGxpc3Qgb25jZSwgZGVwZW5kaW5nIG9uIHdoYXQgaW5mbyB3ZSdyZSByZXR1cm5pbmcuXG5cbiAgICAgICAgICB2YXIgaW5kaWNlcyA9IGdldENoYW5nZWRIb29rc0luZGljZXMocHJldkZpYmVyLm1lbW9pemVkU3RhdGUsIG5leHRGaWJlci5tZW1vaXplZFN0YXRlKTtcbiAgICAgICAgICBkYXRhLmhvb2tzID0gaW5kaWNlcztcbiAgICAgICAgICBkYXRhLmRpZEhvb2tzQ2hhbmdlID0gaW5kaWNlcyAhPT0gbnVsbCAmJiBpbmRpY2VzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ29udGV4dHNGb3JGaWJlcihmaWJlcikge1xuICAgIHN3aXRjaCAoZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcikpIHtcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVDbGFzczpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGb3J3YXJkUmVmOlxuICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uOlxuICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZU1lbW86XG4gICAgICAgIGlmIChpZFRvQ29udGV4dHNNYXAgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgaWQgPSBnZXRGaWJlcklEVGhyb3dzKGZpYmVyKTtcbiAgICAgICAgICB2YXIgY29udGV4dHMgPSBnZXRDb250ZXh0c0ZvckZpYmVyKGZpYmVyKTtcblxuICAgICAgICAgIGlmIChjb250ZXh0cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICBpZFRvQ29udGV4dHNNYXAuc2V0KGlkLCBjb250ZXh0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSAvLyBEaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGEgbnVsbCBjb250ZXh0IHZhbHVlIGFuZCBubyBjb250ZXh0LlxuXG5cbiAgdmFyIE5PX0NPTlRFWFQgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRDb250ZXh0c0ZvckZpYmVyKGZpYmVyKSB7XG4gICAgdmFyIGxlZ2FjeUNvbnRleHQgPSBOT19DT05URVhUO1xuICAgIHZhciBtb2Rlcm5Db250ZXh0ID0gTk9fQ09OVEVYVDtcblxuICAgIHN3aXRjaCAoZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcikpIHtcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVDbGFzczpcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlLmNvbnN0cnVjdG9yICYmIGluc3RhbmNlLmNvbnN0cnVjdG9yLmNvbnRleHRUeXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1vZGVybkNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZWdhY3lDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcblxuICAgICAgICAgICAgaWYgKGxlZ2FjeUNvbnRleHQgJiYgT2JqZWN0LmtleXMobGVnYWN5Q29udGV4dCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGxlZ2FjeUNvbnRleHQgPSBOT19DT05URVhUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbGVnYWN5Q29udGV4dCwgbW9kZXJuQ29udGV4dF07XG5cbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGb3J3YXJkUmVmOlxuICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uOlxuICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZU1lbW86XG4gICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcyAmJiBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0KSB7XG4gICAgICAgICAgbW9kZXJuQ29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2xlZ2FjeUNvbnRleHQsIG1vZGVybkNvbnRleHRdO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gUmVjb3JkIGFsbCBjb250ZXh0cyBhdCB0aGUgdGltZSBwcm9maWxpbmcgaXMgc3RhcnRlZC5cbiAgLy8gRmliZXJzIG9ubHkgc3RvcmUgdGhlIGN1cnJlbnQgY29udGV4dCB2YWx1ZSxcbiAgLy8gc28gd2UgbmVlZCB0byB0cmFjayB0aGVtIHNlcGFyYXRlbHkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGNoYW5nZWQga2V5cy5cblxuXG4gIGZ1bmN0aW9uIGNyYXdsVG9Jbml0aWFsaXplQ29udGV4dHNNYXAoZmliZXIpIHtcbiAgICB2YXIgaWQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTsgLy8gTm90IGFsbCBGaWJlcnMgaW4gdGhlIHN1YnRyZWUgaGF2ZSBtb3VudGVkIHlldC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgT2Zmc2NyZWVuIChoaWRkZW4pIG9yIFN1c3BlbnNlIChzdXNwZW5kZWQpIHN1YnRyZWVzIHdvbid0IHlldCBiZSB0cmFja2VkLlxuICAgIC8vIFdlIGNhbiBzYWZlbHkgc2tpcCB0aGVzZSBzdWJ0cmVlcy5cblxuICAgIGlmIChpZCAhPT0gbnVsbCkge1xuICAgICAgdXBkYXRlQ29udGV4dHNGb3JGaWJlcihmaWJlcik7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjcmF3bFRvSW5pdGlhbGl6ZUNvbnRleHRzTWFwKGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbnRleHRDaGFuZ2VkS2V5cyhmaWJlcikge1xuICAgIGlmIChpZFRvQ29udGV4dHNNYXAgIT09IG51bGwpIHtcbiAgICAgIHZhciBpZCA9IGdldEZpYmVySURUaHJvd3MoZmliZXIpOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgdmFyIHByZXZDb250ZXh0cyA9IGlkVG9Db250ZXh0c01hcC5oYXMoaWQpID8gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICBpZFRvQ29udGV4dHNNYXAuZ2V0KGlkKSA6IG51bGw7XG4gICAgICB2YXIgbmV4dENvbnRleHRzID0gZ2V0Q29udGV4dHNGb3JGaWJlcihmaWJlcik7XG5cbiAgICAgIGlmIChwcmV2Q29udGV4dHMgPT0gbnVsbCB8fCBuZXh0Q29udGV4dHMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIF9wcmV2Q29udGV4dHMgPSByZW5kZXJlcl9zbGljZWRUb0FycmF5KHByZXZDb250ZXh0cywgMiksXG4gICAgICAgICAgcHJldkxlZ2FjeUNvbnRleHQgPSBfcHJldkNvbnRleHRzWzBdLFxuICAgICAgICAgIHByZXZNb2Rlcm5Db250ZXh0ID0gX3ByZXZDb250ZXh0c1sxXTtcblxuICAgICAgdmFyIF9uZXh0Q29udGV4dHMgPSByZW5kZXJlcl9zbGljZWRUb0FycmF5KG5leHRDb250ZXh0cywgMiksXG4gICAgICAgICAgbmV4dExlZ2FjeUNvbnRleHQgPSBfbmV4dENvbnRleHRzWzBdLFxuICAgICAgICAgIG5leHRNb2Rlcm5Db250ZXh0ID0gX25leHRDb250ZXh0c1sxXTtcblxuICAgICAgc3dpdGNoIChnZXRFbGVtZW50VHlwZUZvckZpYmVyKGZpYmVyKSkge1xuICAgICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3M6XG4gICAgICAgICAgaWYgKHByZXZDb250ZXh0cyAmJiBuZXh0Q29udGV4dHMpIHtcbiAgICAgICAgICAgIGlmIChuZXh0TGVnYWN5Q29udGV4dCAhPT0gTk9fQ09OVEVYVCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2hhbmdlZEtleXMocHJldkxlZ2FjeUNvbnRleHQsIG5leHRMZWdhY3lDb250ZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dE1vZGVybkNvbnRleHQgIT09IE5PX0NPTlRFWFQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXZNb2Rlcm5Db250ZXh0ICE9PSBuZXh0TW9kZXJuQ29udGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uOlxuICAgICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlTWVtbzpcbiAgICAgICAgICBpZiAobmV4dE1vZGVybkNvbnRleHQgIT09IE5PX0NPTlRFWFQpIHtcbiAgICAgICAgICAgIHZhciBwcmV2Q29udGV4dCA9IHByZXZNb2Rlcm5Db250ZXh0O1xuICAgICAgICAgICAgdmFyIG5leHRDb250ZXh0ID0gbmV4dE1vZGVybkNvbnRleHQ7XG5cbiAgICAgICAgICAgIHdoaWxlIChwcmV2Q29udGV4dCAmJiBuZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAvLyBOb3RlIHRoaXMgb25seSB3b3JrcyBmb3IgdmVyc2lvbnMgb2YgUmVhY3QgdGhhdCBzdXBwb3J0IHRoaXMga2V5IChlLnYuIDE4KylcbiAgICAgICAgICAgICAgLy8gRm9yIG9sZGVyIHZlcnNpb25zLCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIHJlYWQgdGhlIGN1cnJlbnQgY29udGV4dCB2YWx1ZSBhZnRlciByZW5kZXIgaGFzIGNvbXBsZXRlZC5cbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIFJlYWN0IG1haW50YWlucyBhIHN0YWNrIG9mIGNvbnRleHQgdmFsdWVzIGR1cmluZyByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGJ1dCBieSB0aGUgdGltZSBEZXZUb29scyBpcyBjYWxsZWQsIHJlbmRlciBoYXMgZmluaXNoZWQgYW5kIHRoZSBzdGFjayBpcyBlbXB0eS5cbiAgICAgICAgICAgICAgaWYgKCFzaGFyZWRfb2JqZWN0SXMocHJldkNvbnRleHQubWVtb2l6ZWRWYWx1ZSwgbmV4dENvbnRleHQubWVtb2l6ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHByZXZDb250ZXh0ID0gcHJldkNvbnRleHQubmV4dDtcbiAgICAgICAgICAgICAgbmV4dENvbnRleHQgPSBuZXh0Q29udGV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSG9va1RoYXRDYW5TY2hlZHVsZVVwZGF0ZShob29rT2JqZWN0KSB7XG4gICAgdmFyIHF1ZXVlID0gaG9va09iamVjdC5xdWV1ZTtcblxuICAgIGlmICghcXVldWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYm91bmRIYXNPd25Qcm9wZXJ0eSA9IHNoYXJlZF9oYXNPd25Qcm9wZXJ0eS5iaW5kKHF1ZXVlKTsgLy8gRGV0ZWN0IHRoZSBzaGFwZSBvZiB1c2VTdGF0ZSgpIC8gdXNlUmVkdWNlcigpIC8gdXNlVHJhbnNpdGlvbigpXG4gICAgLy8gdXNpbmcgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgdW5pcXVlIHRvIHRoZXNlIGhvb2tzXG4gICAgLy8gYnV0IGFsc28gc3RhYmxlIChlLmcuIG5vdCB0aWVkIHRvIGN1cnJlbnQgTGFuZXMgaW1wbGVtZW50YXRpb24pXG4gICAgLy8gV2UgZG9uJ3QgY2hlY2sgZm9yIGRpc3BhdGNoIHByb3BlcnR5LCBiZWNhdXNlIHVzZVRyYW5zaXRpb24gZG9lc24ndCBoYXZlIGl0XG5cbiAgICBpZiAoYm91bmRIYXNPd25Qcm9wZXJ0eSgncGVuZGluZycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIERldGVjdCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSgpXG5cblxuICAgIHJldHVybiBib3VuZEhhc093blByb3BlcnR5KCd2YWx1ZScpICYmIGJvdW5kSGFzT3duUHJvcGVydHkoJ2dldFNuYXBzaG90JykgJiYgdHlwZW9mIHF1ZXVlLmdldFNuYXBzaG90ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlkU3RhdGVmdWxIb29rQ2hhbmdlKHByZXYsIG5leHQpIHtcbiAgICB2YXIgcHJldk1lbW9pemVkU3RhdGUgPSBwcmV2Lm1lbW9pemVkU3RhdGU7XG4gICAgdmFyIG5leHRNZW1vaXplZFN0YXRlID0gbmV4dC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKGlzSG9va1RoYXRDYW5TY2hlZHVsZVVwZGF0ZShwcmV2KSkge1xuICAgICAgcmV0dXJuIHByZXZNZW1vaXplZFN0YXRlICE9PSBuZXh0TWVtb2l6ZWRTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDaGFuZ2VkSG9va3NJbmRpY2VzKHByZXYsIG5leHQpIHtcbiAgICBpZiAocHJldiA9PSBudWxsIHx8IG5leHQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgaWYgKG5leHQuaGFzT3duUHJvcGVydHkoJ2Jhc2VTdGF0ZScpICYmIG5leHQuaGFzT3duUHJvcGVydHkoJ21lbW9pemVkU3RhdGUnKSAmJiBuZXh0Lmhhc093blByb3BlcnR5KCduZXh0JykgJiYgbmV4dC5oYXNPd25Qcm9wZXJ0eSgncXVldWUnKSkge1xuICAgICAgd2hpbGUgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGRpZFN0YXRlZnVsSG9va0NoYW5nZShwcmV2LCBuZXh0KSkge1xuICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICBwcmV2ID0gcHJldi5uZXh0O1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2hhbmdlZEtleXMocHJldiwgbmV4dCkge1xuICAgIGlmIChwcmV2ID09IG51bGwgfHwgbmV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFdlIGNhbid0IHJlcG9ydCBhbnl0aGluZyBtZWFuaW5nZnVsIGZvciBob29rcyBjaGFuZ2VzLlxuXG5cbiAgICBpZiAobmV4dC5oYXNPd25Qcm9wZXJ0eSgnYmFzZVN0YXRlJykgJiYgbmV4dC5oYXNPd25Qcm9wZXJ0eSgnbWVtb2l6ZWRTdGF0ZScpICYmIG5leHQuaGFzT3duUHJvcGVydHkoJ25leHQnKSAmJiBuZXh0Lmhhc093blByb3BlcnR5KCdxdWV1ZScpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IG5ldyBTZXQoW10uY29uY2F0KHJlbmRlcmVyX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKHByZXYpKSwgcmVuZGVyZXJfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMobmV4dCkpKSk7XG4gICAgdmFyIGNoYW5nZWRLZXlzID0gW107IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mb3Itb2YtbG9vcHMvbm8tZm9yLW9mLWxvb3BzXG5cbiAgICB2YXIgX2l0ZXJhdG9yNSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGtleXMpLFxuICAgICAgICBfc3RlcDU7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChfaXRlcmF0b3I1LnMoKTsgIShfc3RlcDUgPSBfaXRlcmF0b3I1Lm4oKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIGtleSA9IF9zdGVwNS52YWx1ZTtcblxuICAgICAgICBpZiAocHJldltrZXldICE9PSBuZXh0W2tleV0pIHtcbiAgICAgICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvcjUuZShlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBfaXRlcmF0b3I1LmYoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEtleXM7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cblxuICBmdW5jdGlvbiBkaWRGaWJlclJlbmRlcihwcmV2RmliZXIsIG5leHRGaWJlcikge1xuICAgIHN3aXRjaCAobmV4dEZpYmVyLnRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgLy8gRm9yIHR5cGVzIHRoYXQgZXhlY3V0ZSB1c2VyIGNvZGUsIHdlIGNoZWNrIFBlcmZvcm1lZFdvcmsgZWZmZWN0LlxuICAgICAgICAvLyBXZSBkb24ndCByZWZsZWN0IGJhaWxvdXRzIChlaXRoZXIgcmVmZXJlbnRpYWwgb3Igc0NVKSBpbiBEZXZUb29scy5cbiAgICAgICAgLy8gVE9ETzogVGhpcyBmbGFnIGlzIGEgbGVha2VkIGltcGxlbWVudGF0aW9uIGRldGFpbC4gT25jZSB3ZSBzdGFydFxuICAgICAgICAvLyByZWxlYXNpbmcgRGV2VG9vbHMgaW4gbG9ja3N0ZXAgd2l0aCBSZWFjdCwgd2Ugc2hvdWxkIGltcG9ydCBhXG4gICAgICAgIC8vIGZ1bmN0aW9uIGZyb20gdGhlIHJlY29uY2lsZXIgaW5zdGVhZC5cbiAgICAgICAgdmFyIFBlcmZvcm1lZFdvcmsgPSAxO1xuICAgICAgICByZXR1cm4gKGdldEZpYmVyRmxhZ3MobmV4dEZpYmVyKSAmIFBlcmZvcm1lZFdvcmspID09PSBQZXJmb3JtZWRXb3JrO1xuICAgICAgLy8gTm90ZTogQ29udGV4dENvbnN1bWVyIG9ubHkgZ2V0cyBQZXJmb3JtZWRXb3JrIGVmZmVjdCBpbiAxNi4zLjMrXG4gICAgICAvLyBzbyBpdCB3b24ndCBnZXQgaGlnaGxpZ2h0ZWQgd2l0aCBSZWFjdCAxNi4zLjAgdG8gMTYuMy4yLlxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3IgaG9zdCBjb21wb25lbnRzIGFuZCBvdGhlciB0eXBlcywgd2UgY29tcGFyZSBpbnB1dHNcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc29tZXRoaW5nIGlzIGFuIHVwZGF0ZS5cbiAgICAgICAgcmV0dXJuIHByZXZGaWJlci5tZW1vaXplZFByb3BzICE9PSBuZXh0RmliZXIubWVtb2l6ZWRQcm9wcyB8fCBwcmV2RmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbmV4dEZpYmVyLm1lbW9pemVkU3RhdGUgfHwgcHJldkZpYmVyLnJlZiAhPT0gbmV4dEZpYmVyLnJlZjtcbiAgICB9XG4gIH1cblxuICB2YXIgcGVuZGluZ09wZXJhdGlvbnMgPSBbXTtcbiAgdmFyIHBlbmRpbmdSZWFsVW5tb3VudGVkSURzID0gW107XG4gIHZhciBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzID0gW107XG4gIHZhciBwZW5kaW5nT3BlcmF0aW9uc1F1ZXVlID0gW107XG4gIHZhciBwZW5kaW5nU3RyaW5nVGFibGUgPSBuZXcgTWFwKCk7XG4gIHZhciBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGggPSAwO1xuICB2YXIgcGVuZGluZ1VubW91bnRlZFJvb3RJRCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gcHVzaE9wZXJhdGlvbihvcCkge1xuICAgIGlmIChmYWxzZSkge31cblxuICAgIHBlbmRpbmdPcGVyYXRpb25zLnB1c2gob3ApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkQmFpbG91dFdpdGhQZW5kaW5nT3BlcmF0aW9ucygpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGEgIT0gbnVsbCAmJiBjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGEuZHVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggPT09IDAgJiYgcGVuZGluZ1JlYWxVbm1vdW50ZWRJRHMubGVuZ3RoID09PSAwICYmIHBlbmRpbmdTaW11bGF0ZWRVbm1vdW50ZWRJRHMubGVuZ3RoID09PSAwICYmIHBlbmRpbmdVbm1vdW50ZWRSb290SUQgPT09IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaE9yUXVldWVPcGVyYXRpb25zKG9wZXJhdGlvbnMpIHtcbiAgICBpZiAoc2hvdWxkQmFpbG91dFdpdGhQZW5kaW5nT3BlcmF0aW9ucygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBlbmRpbmdPcGVyYXRpb25zUXVldWUgIT09IG51bGwpIHtcbiAgICAgIHBlbmRpbmdPcGVyYXRpb25zUXVldWUucHVzaChvcGVyYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9vay5lbWl0KCdvcGVyYXRpb25zJywgb3BlcmF0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZsdXNoUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheVRpbWVvdXRJRCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gY2xlYXJQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5KCkge1xuICAgIGlmIChmbHVzaFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXlUaW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dChmbHVzaFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXlUaW1lb3V0SUQpO1xuICAgICAgZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5VGltZW91dElEID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXkoKSB7XG4gICAgY2xlYXJQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5KCk7XG4gICAgZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5VGltZW91dElEID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXlUaW1lb3V0SUQgPSBudWxsO1xuXG4gICAgICBpZiAocGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBPbiB0aGUgb2ZmIGNoYW5jZSB0aGF0IHNvbWV0aGluZyBlbHNlIGhhcyBwdXNoZWQgcGVuZGluZyBvcGVyYXRpb25zLFxuICAgICAgICAvLyB3ZSBzaG91bGQgYmFpbCBvbiB3YXJuaW5nczsgaXQncyBwcm9iYWJseSBub3Qgc2FmZSB0byBwdXNoIG1pZHdheS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWNvcmRQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3MoKTtcblxuICAgICAgaWYgKHNob3VsZEJhaWxvdXRXaXRoUGVuZGluZ09wZXJhdGlvbnMoKSkge1xuICAgICAgICAvLyBObyB3YXJuaW5ncyBvciBlcnJvcnMgdG8gZmx1c2g7IHdlIGNhbiBiYWlsIG91dCBlYXJseSBoZXJlIHRvby5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBXZSBjYW4gY3JlYXRlIGEgc21hbGxlciBvcGVyYXRpb25zIGFycmF5IHRoYW4gZmx1c2hQZW5kaW5nRXZlbnRzKClcbiAgICAgIC8vIGJlY2F1c2Ugd2Ugb25seSBuZWVkIHRvIGZsdXNoIHdhcm5pbmcgYW5kIGVycm9yIGNvdW50cy5cbiAgICAgIC8vIE9ubHkgYSBmZXcgcGllY2VzIG9mIGZpeGVkIGluZm9ybWF0aW9uIGFyZSByZXF1aXJlZCB1cCBmcm9udC5cblxuXG4gICAgICB2YXIgb3BlcmF0aW9ucyA9IG5ldyBBcnJheSgzICsgcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoKTtcbiAgICAgIG9wZXJhdGlvbnNbMF0gPSByZW5kZXJlcklEO1xuICAgICAgb3BlcmF0aW9uc1sxXSA9IGN1cnJlbnRSb290SUQ7XG4gICAgICBvcGVyYXRpb25zWzJdID0gMDsgLy8gU3RyaW5nIHRhYmxlIHNpemVcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBvcGVyYXRpb25zWzMgKyBqXSA9IHBlbmRpbmdPcGVyYXRpb25zW2pdO1xuICAgICAgfVxuXG4gICAgICBmbHVzaE9yUXVldWVPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xuICAgICAgcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoID0gMDtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZXZhbHVhdGVFcnJvcnNBbmRXYXJuaW5ncygpIHtcbiAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmNsZWFyKCk7XG4gICAgZmliZXJJRFRvRXJyb3JzTWFwLmZvckVhY2goZnVuY3Rpb24gKGNvdW50TWFwLCBmaWJlcklEKSB7XG4gICAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGZpYmVySUQpO1xuXG4gICAgICBpZiAoZmliZXIgIT0gbnVsbCkge1xuICAgICAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmFkZChmaWJlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmliZXJJRFRvV2FybmluZ3NNYXAuZm9yRWFjaChmdW5jdGlvbiAoY291bnRNYXAsIGZpYmVySUQpIHtcbiAgICAgIHZhciBmaWJlciA9IGlkVG9BcmJpdHJhcnlGaWJlck1hcC5nZXQoZmliZXJJRCk7XG5cbiAgICAgIGlmIChmaWJlciAhPSBudWxsKSB7XG4gICAgICAgIGZpYmVyc1dpdGhDaGFuZ2VkRXJyb3JPcldhcm5pbmdDb3VudHMuYWRkKGZpYmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZWNvcmRQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3MoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlTWFwc0FuZEdldENvdW50SGVscGVyKGZpYmVyLCBmaWJlcklELCBwZW5kaW5nRmliZXJUb01lc3NhZ2VDb3VudE1hcCwgZmliZXJJRFRvTWVzc2FnZUNvdW50TWFwKSB7XG4gICAgdmFyIG5ld0NvdW50ID0gMDtcbiAgICB2YXIgbWVzc2FnZUNvdW50TWFwID0gZmliZXJJRFRvTWVzc2FnZUNvdW50TWFwLmdldChmaWJlcklEKTtcbiAgICB2YXIgcGVuZGluZ01lc3NhZ2VDb3VudE1hcCA9IHBlbmRpbmdGaWJlclRvTWVzc2FnZUNvdW50TWFwLmdldChmaWJlcik7XG5cbiAgICBpZiAocGVuZGluZ01lc3NhZ2VDb3VudE1hcCAhPSBudWxsKSB7XG4gICAgICBpZiAobWVzc2FnZUNvdW50TWFwID09IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZUNvdW50TWFwID0gcGVuZGluZ01lc3NhZ2VDb3VudE1hcDtcbiAgICAgICAgZmliZXJJRFRvTWVzc2FnZUNvdW50TWFwLnNldChmaWJlcklELCBwZW5kaW5nTWVzc2FnZUNvdW50TWFwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgRmxvdyByZWZpbmVtZW50IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGFuZCB5ZXQuLi5cbiAgICAgICAgdmFyIHJlZmluZWRNZXNzYWdlQ291bnRNYXAgPSBtZXNzYWdlQ291bnRNYXA7XG4gICAgICAgIHBlbmRpbmdNZXNzYWdlQ291bnRNYXAuZm9yRWFjaChmdW5jdGlvbiAocGVuZGluZ0NvdW50LCBtZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ291bnQgPSByZWZpbmVkTWVzc2FnZUNvdW50TWFwLmdldChtZXNzYWdlKSB8fCAwO1xuICAgICAgICAgIHJlZmluZWRNZXNzYWdlQ291bnRNYXAuc2V0KG1lc3NhZ2UsIHByZXZpb3VzQ291bnQgKyBwZW5kaW5nQ291bnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZEZpbHRlckZpYmVyKGZpYmVyKSkge1xuICAgICAgaWYgKG1lc3NhZ2VDb3VudE1hcCAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2VDb3VudE1hcC5mb3JFYWNoKGZ1bmN0aW9uIChjb3VudCkge1xuICAgICAgICAgIG5ld0NvdW50ICs9IGNvdW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZW5kaW5nRmliZXJUb01lc3NhZ2VDb3VudE1hcC5kZWxldGUoZmliZXIpO1xuICAgIHJldHVybiBuZXdDb3VudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29yZFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5ncygpIHtcbiAgICBjbGVhclBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXkoKTtcbiAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICB2YXIgZmliZXJJRCA9IGdldEZpYmVySURVbnNhZmUoZmliZXIpO1xuXG4gICAgICBpZiAoZmliZXJJRCA9PT0gbnVsbCkgey8vIERvbid0IHNlbmQgdXBkYXRlcyBmb3IgRmliZXJzIHRoYXQgZGlkbid0IG1vdW50IGR1ZSB0byBlLmcuIFN1c3BlbnNlIG9yIGFuIGVycm9yIGJvdW5kYXJ5LlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yQ291bnQgPSBtZXJnZU1hcHNBbmRHZXRDb3VudEhlbHBlcihmaWJlciwgZmliZXJJRCwgcGVuZGluZ0ZpYmVyVG9FcnJvcnNNYXAsIGZpYmVySURUb0Vycm9yc01hcCk7XG4gICAgICAgIHZhciB3YXJuaW5nQ291bnQgPSBtZXJnZU1hcHNBbmRHZXRDb3VudEhlbHBlcihmaWJlciwgZmliZXJJRCwgcGVuZGluZ0ZpYmVyVG9XYXJuaW5nc01hcCwgZmliZXJJRFRvV2FybmluZ3NNYXApO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX1VQREFURV9FUlJPUlNfT1JfV0FSTklOR1MpO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKGZpYmVySUQpO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKGVycm9yQ291bnQpO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKHdhcm5pbmdDb3VudCk7XG4gICAgICB9IC8vIEFsd2F5cyBjbGVhbiB1cCBzbyB0aGF0IHdlIGRvbid0IGxlYWsuXG5cblxuICAgICAgcGVuZGluZ0ZpYmVyVG9FcnJvcnNNYXAuZGVsZXRlKGZpYmVyKTtcbiAgICAgIHBlbmRpbmdGaWJlclRvV2FybmluZ3NNYXAuZGVsZXRlKGZpYmVyKTtcbiAgICB9KTtcbiAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmNsZWFyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaFBlbmRpbmdFdmVudHMocm9vdCkge1xuICAgIC8vIEFkZCBhbnkgcGVuZGluZyBlcnJvcnMgYW5kIHdhcm5pbmdzIHRvIHRoZSBvcGVyYXRpb25zIGFycmF5LlxuICAgIC8vIFdlIGRvIHRoaXMganVzdCBiZWZvcmUgZmx1c2hpbmcsIHNvIHdlIGNhbiBpZ25vcmUgZXJyb3JzIGZvciBuby1sb25nZXItbW91bnRlZCBGaWJlcnMuXG4gICAgcmVjb3JkUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzKCk7XG5cbiAgICBpZiAoc2hvdWxkQmFpbG91dFdpdGhQZW5kaW5nT3BlcmF0aW9ucygpKSB7XG4gICAgICAvLyBJZiB3ZSBhcmVuJ3QgcHJvZmlsaW5nLCB3ZSBjYW4ganVzdCBiYWlsIG91dCBoZXJlLlxuICAgICAgLy8gTm8gdXNlIHNlbmRpbmcgYW4gZW1wdHkgdXBkYXRlIG92ZXIgdGhlIGJyaWRnZS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgUHJvZmlsZXIgc3RvcmVzIG1ldGFkYXRhIGZvciBlYWNoIGNvbW1pdCBhbmQgcmVjb25zdHJ1Y3RzIHRoZSBhcHAgdHJlZSBwZXIgY29tbWl0IHVzaW5nOlxuICAgICAgLy8gKDEpIGFuIGluaXRpYWwgdHJlZSBzbmFwc2hvdCBhbmRcbiAgICAgIC8vICgyKSB0aGUgb3BlcmF0aW9ucyBhcnJheSBmb3IgZWFjaCBjb21taXRcbiAgICAgIC8vIEJlY2F1c2Ugb2YgdGhpcywgaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgb3BlcmF0aW9ucyBhbmQgbWV0YWRhdGEgYXJyYXlzIGFsaWduLFxuICAgICAgLy8gU28gaXQncyBpbXBvcnRhbnQgbm90IHRvIG9taXQgZXZlbiBlbXB0eSBvcGVyYXRpb25zIHdoaWxlIHByb2ZpbGluZyBpcyBhY3RpdmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG51bVVubW91bnRJRHMgPSBwZW5kaW5nUmVhbFVubW91bnRlZElEcy5sZW5ndGggKyBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzLmxlbmd0aCArIChwZW5kaW5nVW5tb3VudGVkUm9vdElEID09PSBudWxsID8gMCA6IDEpO1xuICAgIHZhciBvcGVyYXRpb25zID0gbmV3IEFycmF5KCAvLyBJZGVudGlmeSB3aGljaCByZW5kZXJlciB0aGlzIHVwZGF0ZSBpcyBjb21pbmcgZnJvbS5cbiAgICAyICsgLy8gW3JlbmRlcmVySUQsIHJvb3RGaWJlcklEXVxuICAgIC8vIEhvdyBiaWcgaXMgdGhlIHN0cmluZyB0YWJsZT9cbiAgICAxICsgLy8gW3N0cmluZ1RhYmxlTGVuZ3RoXVxuICAgIC8vIFRoZW4gZ29lcyB0aGUgYWN0dWFsIHN0cmluZyB0YWJsZS5cbiAgICBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGggKyAoIC8vIEFsbCB1bm1vdW50cyBhcmUgYmF0Y2hlZCBpbiBhIHNpbmdsZSBtZXNzYWdlLlxuICAgIC8vIFtUUkVFX09QRVJBVElPTl9SRU1PVkUsIHJlbW92ZWRJRExlbmd0aCwgLi4uaWRzXVxuICAgIG51bVVubW91bnRJRHMgPiAwID8gMiArIG51bVVubW91bnRJRHMgOiAwKSArIC8vIFJlZ3VsYXIgb3BlcmF0aW9uc1xuICAgIHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCk7IC8vIElkZW50aWZ5IHdoaWNoIHJlbmRlcmVyIHRoaXMgdXBkYXRlIGlzIGNvbWluZyBmcm9tLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByb290cyB0byBiZSBtYXBwZWQgdG8gcmVuZGVyZXJzLFxuICAgIC8vIFdoaWNoIGluIHR1cm4gZW5hYmxlcyBmaWJlciBwcm9wcywgc3RhdGVzLCBhbmQgaG9va3MgdG8gYmUgaW5zcGVjdGVkLlxuXG4gICAgdmFyIGkgPSAwO1xuICAgIG9wZXJhdGlvbnNbaSsrXSA9IHJlbmRlcmVySUQ7XG4gICAgb3BlcmF0aW9uc1tpKytdID0gY3VycmVudFJvb3RJRDsgLy8gTm93IGZpbGwgaW4gdGhlIHN0cmluZyB0YWJsZS5cbiAgICAvLyBbc3RyaW5nVGFibGVMZW5ndGgsIHN0cjFMZW5ndGgsIC4uLnN0cjEsIHN0cjJMZW5ndGgsIC4uLnN0cjIsIC4uLl1cblxuICAgIG9wZXJhdGlvbnNbaSsrXSA9IHBlbmRpbmdTdHJpbmdUYWJsZUxlbmd0aDtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGUuZm9yRWFjaChmdW5jdGlvbiAoZW50cnksIHN0cmluZ0tleSkge1xuICAgICAgdmFyIGVuY29kZWRTdHJpbmcgPSBlbnRyeS5lbmNvZGVkU3RyaW5nOyAvLyBEb24ndCB1c2UgdGhlIHN0cmluZyBsZW5ndGguXG4gICAgICAvLyBJdCB3b24ndCB3b3JrIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVycyAobGlrZSBlbW9qaSkuXG5cbiAgICAgIHZhciBsZW5ndGggPSBlbmNvZGVkU3RyaW5nLmxlbmd0aDtcbiAgICAgIG9wZXJhdGlvbnNbaSsrXSA9IGxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW5ndGg7IGorKykge1xuICAgICAgICBvcGVyYXRpb25zW2kgKyBqXSA9IGVuY29kZWRTdHJpbmdbal07XG4gICAgICB9XG5cbiAgICAgIGkgKz0gbGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKG51bVVubW91bnRJRHMgPiAwKSB7XG4gICAgICAvLyBBbGwgdW5tb3VudHMgZXhjZXB0IHJvb3RzIGFyZSBiYXRjaGVkIGluIGEgc2luZ2xlIG1lc3NhZ2UuXG4gICAgICBvcGVyYXRpb25zW2krK10gPSBUUkVFX09QRVJBVElPTl9SRU1PVkU7IC8vIFRoZSBmaXJzdCBudW1iZXIgaXMgaG93IG1hbnkgdW5tb3VudGVkIElEcyB3ZSdyZSBnb25uYSBzZW5kLlxuXG4gICAgICBvcGVyYXRpb25zW2krK10gPSBudW1Vbm1vdW50SURzOyAvLyBGaWxsIGluIHRoZSByZWFsIHVubW91bnRzIGluIHRoZSByZXZlcnNlIG9yZGVyLlxuICAgICAgLy8gVGhleSB3ZXJlIGluc2VydGVkIHBhcmVudHMtZmlyc3QgYnkgUmVhY3QsIGJ1dCB3ZSB3YW50IGNoaWxkcmVuLWZpcnN0LlxuICAgICAgLy8gU28gd2UgdHJhdmVyc2Ugb3VyIGFycmF5IGJhY2t3YXJkcy5cblxuICAgICAgZm9yICh2YXIgaiA9IHBlbmRpbmdSZWFsVW5tb3VudGVkSURzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIG9wZXJhdGlvbnNbaSsrXSA9IHBlbmRpbmdSZWFsVW5tb3VudGVkSURzW2pdO1xuICAgICAgfSAvLyBGaWxsIGluIHRoZSBzaW11bGF0ZWQgdW5tb3VudHMgKGhpZGRlbiBTdXNwZW5zZSBzdWJ0cmVlcykgaW4gdGhlaXIgb3JkZXIuXG4gICAgICAvLyAoV2Ugd2FudCBjaGlsZHJlbiB0byBnbyBiZWZvcmUgcGFyZW50cy4pXG4gICAgICAvLyBUaGV5IGdvICphZnRlciogdGhlIHJlYWwgdW5tb3VudHMgYmVjYXVzZSB3ZSBrbm93IGZvciBzdXJlIHRoZXkgd29uJ3QgYmVcbiAgICAgIC8vIGNoaWxkcmVuIG9mIGFscmVhZHkgcHVzaGVkIFwicmVhbFwiIElEcy4gSWYgdGhleSB3ZXJlLCB3ZSB3b3VsZG4ndCBiZSBhYmxlXG4gICAgICAvLyB0byBkaXNjb3ZlciB0aGVtIGR1cmluZyB0aGUgdHJhdmVyc2FsLCBhcyB0aGV5IHdvdWxkIGhhdmUgYmVlbiBkZWxldGVkLlxuXG5cbiAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzLmxlbmd0aDsgX2orKykge1xuICAgICAgICBvcGVyYXRpb25zW2kgKyBfal0gPSBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzW19qXTtcbiAgICAgIH1cblxuICAgICAgaSArPSBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzLmxlbmd0aDsgLy8gVGhlIHJvb3QgSUQgc2hvdWxkIGFsd2F5cyBiZSB1bm1vdW50ZWQgbGFzdC5cblxuICAgICAgaWYgKHBlbmRpbmdVbm1vdW50ZWRSb290SUQgIT09IG51bGwpIHtcbiAgICAgICAgb3BlcmF0aW9uc1tpXSA9IHBlbmRpbmdVbm1vdW50ZWRSb290SUQ7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG9wZXJhdGlvbnMuXG5cblxuICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgX2oyKyspIHtcbiAgICAgIG9wZXJhdGlvbnNbaSArIF9qMl0gPSBwZW5kaW5nT3BlcmF0aW9uc1tfajJdO1xuICAgIH1cblxuICAgIGkgKz0gcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoOyAvLyBMZXQgdGhlIGZyb250ZW5kIGtub3cgYWJvdXQgdHJlZSBvcGVyYXRpb25zLlxuXG4gICAgZmx1c2hPclF1ZXVlT3BlcmF0aW9ucyhvcGVyYXRpb25zKTsgLy8gUmVzZXQgYWxsIG9mIHRoZSBwZW5kaW5nIHN0YXRlIG5vdyB0aGF0IHdlJ3ZlIHRvbGQgdGhlIGZyb250ZW5kIGFib3V0IGl0LlxuXG4gICAgcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoID0gMDtcbiAgICBwZW5kaW5nUmVhbFVubW91bnRlZElEcy5sZW5ndGggPSAwO1xuICAgIHBlbmRpbmdTaW11bGF0ZWRVbm1vdW50ZWRJRHMubGVuZ3RoID0gMDtcbiAgICBwZW5kaW5nVW5tb3VudGVkUm9vdElEID0gbnVsbDtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGUuY2xlYXIoKTtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGggPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3RyaW5nSUQoc3RyaW5nKSB7XG4gICAgaWYgKHN0cmluZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIGV4aXN0aW5nRW50cnkgPSBwZW5kaW5nU3RyaW5nVGFibGUuZ2V0KHN0cmluZyk7XG5cbiAgICBpZiAoZXhpc3RpbmdFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdFbnRyeS5pZDtcbiAgICB9XG5cbiAgICB2YXIgaWQgPSBwZW5kaW5nU3RyaW5nVGFibGUuc2l6ZSArIDE7XG4gICAgdmFyIGVuY29kZWRTdHJpbmcgPSB1dGZFbmNvZGVTdHJpbmcoc3RyaW5nKTtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGUuc2V0KHN0cmluZywge1xuICAgICAgZW5jb2RlZFN0cmluZzogZW5jb2RlZFN0cmluZyxcbiAgICAgIGlkOiBpZFxuICAgIH0pOyAvLyBUaGUgc3RyaW5nIHRhYmxlIHRvdGFsIGxlbmd0aCBuZWVkcyB0byBhY2NvdW50IGJvdGggZm9yIHRoZSBzdHJpbmcgbGVuZ3RoLFxuICAgIC8vIGFuZCBmb3IgdGhlIGFycmF5IGl0ZW0gdGhhdCBjb250YWlucyB0aGUgbGVuZ3RoIGl0c2VsZi5cbiAgICAvL1xuICAgIC8vIERvbid0IHVzZSBzdHJpbmcgbGVuZ3RoIGZvciB0aGlzIHRhYmxlLlxuICAgIC8vIEl0IHdvbid0IHdvcmsgZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIChsaWtlIGVtb2ppKS5cblxuICAgIHBlbmRpbmdTdHJpbmdUYWJsZUxlbmd0aCArPSBlbmNvZGVkU3RyaW5nLmxlbmd0aCArIDE7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkTW91bnQoZmliZXIsIHBhcmVudEZpYmVyKSB7XG4gICAgdmFyIGlzUm9vdCA9IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3Q7XG4gICAgdmFyIGlkID0gZ2V0T3JHZW5lcmF0ZUZpYmVySUQoZmliZXIpO1xuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgZGVidWcoJ3JlY29yZE1vdW50KCknLCBmaWJlciwgcGFyZW50RmliZXIpO1xuICAgIH1cblxuICAgIHZhciBoYXNPd25lck1ldGFkYXRhID0gZmliZXIuaGFzT3duUHJvcGVydHkoJ19kZWJ1Z093bmVyJyk7XG4gICAgdmFyIGlzUHJvZmlsaW5nU3VwcG9ydGVkID0gZmliZXIuaGFzT3duUHJvcGVydHkoJ3RyZWVCYXNlRHVyYXRpb24nKTsgLy8gQWRkaW5nIGEgbmV3IGZpZWxkIGhlcmUgd291bGQgcmVxdWlyZSBhIGJyaWRnZSBwcm90b2NvbCB2ZXJzaW9uIGJ1bXAgKGEgYmFja3dhZHMgYnJlYWtpbmcgY2hhbmdlKS5cbiAgICAvLyBJbnN0ZWFkIGxldCdzIHJlLXB1cnBvc2UgYSBwcmUtZXhpc3RpbmcgZmllbGQgdG8gY2FycnkgbW9yZSBpbmZvcm1hdGlvbi5cblxuICAgIHZhciBwcm9maWxpbmdGbGFncyA9IDA7XG5cbiAgICBpZiAoaXNQcm9maWxpbmdTdXBwb3J0ZWQpIHtcbiAgICAgIHByb2ZpbGluZ0ZsYWdzID0gUFJPRklMSU5HX0ZMQUdfQkFTSUNfU1VQUE9SVDtcblxuICAgICAgaWYgKHR5cGVvZiBpbmplY3RQcm9maWxpbmdIb29rcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9maWxpbmdGbGFncyB8PSBQUk9GSUxJTkdfRkxBR19USU1FTElORV9TVVBQT1JUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fQUREKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihFbGVtZW50VHlwZVJvb3QpO1xuICAgICAgcHVzaE9wZXJhdGlvbigoZmliZXIubW9kZSAmIFN0cmljdE1vZGVCaXRzKSAhPT0gMCA/IDEgOiAwKTtcbiAgICAgIHB1c2hPcGVyYXRpb24ocHJvZmlsaW5nRmxhZ3MpO1xuICAgICAgcHVzaE9wZXJhdGlvbihTdHJpY3RNb2RlQml0cyAhPT0gMCA/IDEgOiAwKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oaGFzT3duZXJNZXRhZGF0YSA/IDEgOiAwKTtcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIGlmIChkaXNwbGF5TmFtZXNCeVJvb3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lc0J5Um9vdElELnNldChpZCwgZ2V0RGlzcGxheU5hbWVGb3JSb290KGZpYmVyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleSA9IGZpYmVyLmtleTtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0gZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcik7XG4gICAgICB2YXIgX2RlYnVnT3duZXIgPSBmaWJlci5fZGVidWdPd25lcjsgLy8gSWRlYWxseSB3ZSBzaG91bGQgY2FsbCBnZXRGaWJlcklEVGhyb3dzKCkgZm9yIF9kZWJ1Z093bmVyLFxuICAgICAgLy8gc2luY2Ugb3duZXJzIGFyZSBhbG1vc3QgYWx3YXlzIGhpZ2hlciBpbiB0aGUgdHJlZSAoYW5kIHNvIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCksXG4gICAgICAvLyBidXQgaW4gc29tZSAocmFyZSkgaW5zdGFuY2VzIHJlcG9ydGVkIGluIG9wZW4gc291cmNlLCBhIGRlc2NlbmRhbnQgbW91bnRzIGJlZm9yZSBhbiBvd25lci5cbiAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBERVYgb25seSBmaWVsZCBpdCdzIHByb2JhYmx5IG9rYXkgdG8gYWxzbyBqdXN0IGxhemlseSBnZW5lcmF0ZSBhbmQgSUQgaGVyZSBpZiBuZWVkZWQuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMTQ0NVxuXG4gICAgICB2YXIgb3duZXJJRCA9IF9kZWJ1Z093bmVyICE9IG51bGwgPyBnZXRPckdlbmVyYXRlRmliZXJJRChfZGVidWdPd25lcikgOiAwO1xuICAgICAgdmFyIHBhcmVudElEID0gcGFyZW50RmliZXIgPyBnZXRGaWJlcklEVGhyb3dzKHBhcmVudEZpYmVyKSA6IDA7XG4gICAgICB2YXIgZGlzcGxheU5hbWVTdHJpbmdJRCA9IGdldFN0cmluZ0lEKGRpc3BsYXlOYW1lKTsgLy8gVGhpcyBjaGVjayBpcyBhIGd1YXJkIHRvIGhhbmRsZSBhIFJlYWN0IGVsZW1lbnQgdGhhdCBoYXMgYmVlbiBtb2RpZmllZFxuICAgICAgLy8gaW4gc3VjaCBhIHdheSBhcyB0byBieXBhc3MgdGhlIGRlZmF1bHQgc3RyaW5naWZpY2F0aW9uIG9mIHRoZSBcImtleVwiIHByb3BlcnR5LlxuXG4gICAgICB2YXIga2V5U3RyaW5nID0ga2V5ID09PSBudWxsID8gbnVsbCA6IFN0cmluZyhrZXkpO1xuICAgICAgdmFyIGtleVN0cmluZ0lEID0gZ2V0U3RyaW5nSUQoa2V5U3RyaW5nKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fQUREKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihlbGVtZW50VHlwZSk7XG4gICAgICBwdXNoT3BlcmF0aW9uKHBhcmVudElEKTtcbiAgICAgIHB1c2hPcGVyYXRpb24ob3duZXJJRCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKGRpc3BsYXlOYW1lU3RyaW5nSUQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihrZXlTdHJpbmdJRCk7IC8vIElmIHRoaXMgc3VidHJlZSBoYXMgYSBuZXcgbW9kZSwgbGV0IHRoZSBmcm9udGVuZCBrbm93LlxuXG4gICAgICBpZiAoKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlQml0cykgIT09IDAgJiYgKHBhcmVudEZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlQml0cykgPT09IDApIHtcbiAgICAgICAgcHVzaE9wZXJhdGlvbihUUkVFX09QRVJBVElPTl9TRVRfU1VCVFJFRV9NT0RFKTtcbiAgICAgICAgcHVzaE9wZXJhdGlvbihpZCk7XG4gICAgICAgIHB1c2hPcGVyYXRpb24oU3RyaWN0TW9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUHJvZmlsaW5nU3VwcG9ydGVkKSB7XG4gICAgICBpZFRvUm9vdE1hcC5zZXQoaWQsIGN1cnJlbnRSb290SUQpO1xuICAgICAgcmVjb3JkUHJvZmlsaW5nRHVyYXRpb25zKGZpYmVyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRVbm1vdW50KGZpYmVyLCBpc1NpbXVsYXRlZCkge1xuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGRlYnVnKCdyZWNvcmRVbm1vdW50KCknLCBmaWJlciwgbnVsbCwgaXNTaW11bGF0ZWQgPyAndW5tb3VudCBpcyBzaW11bGF0ZWQnIDogJycpO1xuICAgIH1cblxuICAgIGlmICh0cmFja2VkUGF0aE1hdGNoRmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHRyeWluZyB0byByZXN0b3JlIHByZXZpb3VzIHNlbGVjdGlvbi5cbiAgICAgIC8vIElmIHRoaXMgZmliZXIgbWF0Y2hlZCBidXQgaXMgYmVpbmcgdW5tb3VudGVkLCB0aGVyZSdzIG5vIHVzZSB0cnlpbmcuXG4gICAgICAvLyBSZXNldCB0aGUgc3RhdGUgc28gd2UgZG9uJ3Qga2VlcCBob2xkaW5nIG9udG8gaXQuXG4gICAgICBpZiAoZmliZXIgPT09IHRyYWNrZWRQYXRoTWF0Y2hGaWJlciB8fCBmaWJlciA9PT0gdHJhY2tlZFBhdGhNYXRjaEZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgICBzZXRUcmFja2VkUGF0aChudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5zYWZlSUQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTtcblxuICAgIGlmICh1bnNhZmVJRCA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UndmUgbmV2ZXIgc2VlbiB0aGlzIEZpYmVyLCBpdCBtaWdodCBiZSBpbnNpZGUgb2YgYSBsZWdhY3kgcmVuZGVyIFN1c3BlbnNlIGZyYWdtZW50IChzbyB0aGUgc3RvcmUgaXMgbm90IGV2ZW4gYXdhcmUgb2YgaXQpLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlIHdlIGNhbiBqdXN0IGlnbm9yZSBpdCBvciBpdCB3aWxsIGNhdXNlIGVycm9ycyBsYXRlciBvbi5cbiAgICAgIC8vIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgYSBMYXp5IGNvbXBvbmVudCB0aGF0IG5ldmVyIHJlc29sdmVzIGJlZm9yZSBiZWluZyB1bm1vdW50ZWQuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBhbHNvIG1pZ2h0IGluZGljYXRlIGEgRmFzdCBSZWZyZXNoIGZvcmNlLXJlbW91bnQgc2NlbmFyaW8uXG4gICAgICAvL1xuICAgICAgLy8gVE9ETzogVGhpcyBpcyBmcmFnaWxlIGFuZCBjYW4gb2JzY3VyZSBhY3R1YWwgYnVncy5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgcmVmaW5lbWVudC5cblxuXG4gICAgdmFyIGlkID0gdW5zYWZlSUQ7XG4gICAgdmFyIGlzUm9vdCA9IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3Q7XG5cbiAgICBpZiAoaXNSb290KSB7XG4gICAgICAvLyBSb290cyBtdXN0IGJlIHJlbW92ZWQgb25seSBhZnRlciBhbGwgY2hpbGRyZW4gKHBlbmRpbmcgYW5kIHNpbXVsYXRlZCkgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gICAgICAvLyBTbyB3ZSB0cmFjayBpdCBzZXBhcmF0ZWx5LlxuICAgICAgcGVuZGluZ1VubW91bnRlZFJvb3RJRCA9IGlkO1xuICAgIH0gZWxzZSBpZiAoIXNob3VsZEZpbHRlckZpYmVyKGZpYmVyKSkge1xuICAgICAgLy8gVG8gbWFpbnRhaW4gY2hpbGQtZmlyc3Qgb3JkZXJpbmcsXG4gICAgICAvLyB3ZSdsbCBwdXNoIGl0IGludG8gb25lIG9mIHRoZXNlIHF1ZXVlcyxcbiAgICAgIC8vIGFuZCBsYXRlciBhcnJhbmdlIHRoZW0gaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gICAgICBpZiAoaXNTaW11bGF0ZWQpIHtcbiAgICAgICAgcGVuZGluZ1NpbXVsYXRlZFVubW91bnRlZElEcy5wdXNoKGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlbmRpbmdSZWFsVW5tb3VudGVkSURzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50KSB7XG4gICAgICB1bnRyYWNrRmliZXJJRChmaWJlcik7XG4gICAgICB2YXIgaXNQcm9maWxpbmdTdXBwb3J0ZWQgPSBmaWJlci5oYXNPd25Qcm9wZXJ0eSgndHJlZUJhc2VEdXJhdGlvbicpO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgaWRUb1Jvb3RNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgaWRUb1RyZWVCYXNlRHVyYXRpb25NYXAuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb3VudEZpYmVyUmVjdXJzaXZlbHkoZmlyc3RDaGlsZCwgcGFyZW50RmliZXIsIHRyYXZlcnNlU2libGluZ3MsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgc2libGluZ3MgcmF0aGVyIHRoYW4gcmVjdXJzaW5nLlxuICAgIC8vIFRoaXMgcmVkdWNlcyB0aGUgY2hhbmNlIG9mIHN0YWNrIG92ZXJmbG93IGZvciB3aWRlIHRyZWVzIChlLmcuIGxpc3RzIHdpdGggbWFueSBpdGVtcykuXG4gICAgdmFyIGZpYmVyID0gZmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gR2VuZXJhdGUgYW4gSUQgZXZlbiBmb3IgZmlsdGVyZWQgRmliZXJzLCBpbiBjYXNlIGl0J3MgbmVlZGVkIGxhdGVyIChlLmcuIGZvciBQcm9maWxpbmcpLlxuICAgICAgZ2V0T3JHZW5lcmF0ZUZpYmVySUQoZmliZXIpO1xuXG4gICAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICAgIGRlYnVnKCdtb3VudEZpYmVyUmVjdXJzaXZlbHkoKScsIGZpYmVyLCBwYXJlbnRGaWJlcik7XG4gICAgICB9IC8vIElmIHdlIGhhdmUgdGhlIHRyZWUgc2VsZWN0aW9uIGZyb20gcHJldmlvdXMgcmVsb2FkLCB0cnkgdG8gbWF0Y2ggdGhpcyBGaWJlci5cbiAgICAgIC8vIEFsc28gcmVtZW1iZXIgd2hldGhlciB0byBkbyB0aGUgc2FtZSBmb3Igc2libGluZ3MuXG5cblxuICAgICAgdmFyIG1pZ2h0U2libGluZ3NCZU9uVHJhY2tlZFBhdGggPSB1cGRhdGVUcmFja2VkUGF0aFN0YXRlQmVmb3JlTW91bnQoZmliZXIpO1xuICAgICAgdmFyIHNob3VsZEluY2x1ZGVJblRyZWUgPSAhc2hvdWxkRmlsdGVyRmliZXIoZmliZXIpO1xuXG4gICAgICBpZiAoc2hvdWxkSW5jbHVkZUluVHJlZSkge1xuICAgICAgICByZWNvcmRNb3VudChmaWJlciwgcGFyZW50RmliZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhY2VVcGRhdGVzRW5hYmxlZCkge1xuICAgICAgICBpZiAodHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpOyAvLyBJZiBhbiBhbmNlc3RvciB1cGRhdGVkLCB3ZSBzaG91bGQgbWFyayB0aGUgbmVhcmVzdCBob3N0IG5vZGVzIGZvciBoaWdobGlnaHRpbmcuXG5cbiAgICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IEVsZW1lbnRUeXBlSG9zdENvbXBvbmVudCkge1xuICAgICAgICAgICAgdHJhY2VVcGRhdGVzRm9yTm9kZXMuYWRkKGZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFdlIGludGVudGlvbmFsbHkgZG8gbm90IHJlLWVuYWJsZSB0aGUgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSBmbGFnIGluIHRoaXMgYnJhbmNoLFxuICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaGlnaGxpZ2h0IGV2ZXJ5IGhvc3Qgbm9kZSBpbnNpZGUgb2YgYSBuZXdseSBtb3VudGVkIHN1YnRyZWUuXG5cbiAgICAgIH1cblxuICAgICAgdmFyIGlzU3VzcGVuc2UgPSBmaWJlci50YWcgPT09IFJlYWN0VHlwZU9mV29yay5TdXNwZW5zZUNvbXBvbmVudDtcblxuICAgICAgaWYgKGlzU3VzcGVuc2UpIHtcbiAgICAgICAgdmFyIGlzVGltZWRPdXQgPSBmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChpc1RpbWVkT3V0KSB7XG4gICAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBpZiBTdXNwZW5zZSBtb3VudHMgaW4gYSB0aW1lZC1vdXQgc3RhdGUsXG4gICAgICAgICAgLy8gZ2V0IHRoZSBmYWxsYmFjayBjaGlsZCBmcm9tIHRoZSBpbm5lciBmcmFnbWVudCBhbmQgbW91bnRcbiAgICAgICAgICAvLyBpdCBhcyBpZiBpdCB3YXMgb3VyIG93biBjaGlsZC4gVXBkYXRlcyBoYW5kbGUgdGhpcyB0b28uXG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gZmliZXIuY2hpbGQ7XG4gICAgICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHByaW1hcnlDaGlsZEZyYWdtZW50ID8gcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA6IG51bGw7XG4gICAgICAgICAgdmFyIGZhbGxiYWNrQ2hpbGQgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPyBmYWxsYmFja0NoaWxkRnJhZ21lbnQuY2hpbGQgOiBudWxsO1xuXG4gICAgICAgICAgaWYgKGZhbGxiYWNrQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShmYWxsYmFja0NoaWxkLCBzaG91bGRJbmNsdWRlSW5UcmVlID8gZmliZXIgOiBwYXJlbnRGaWJlciwgdHJ1ZSwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGQgPSBudWxsO1xuICAgICAgICAgIHZhciBhcmVTdXNwZW5zZUNoaWxkcmVuQ29uZGl0aW9uYWxseVdyYXBwZWQgPSBPZmZzY3JlZW5Db21wb25lbnQgPT09IC0xO1xuXG4gICAgICAgICAgaWYgKGFyZVN1c3BlbnNlQ2hpbGRyZW5Db25kaXRpb25hbGx5V3JhcHBlZCkge1xuICAgICAgICAgICAgcHJpbWFyeUNoaWxkID0gZmliZXIuY2hpbGQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWJlci5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJpbWFyeUNoaWxkID0gZmliZXIuY2hpbGQuY2hpbGQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByaW1hcnlDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbW91bnRGaWJlclJlY3Vyc2l2ZWx5KHByaW1hcnlDaGlsZCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IGZpYmVyIDogcGFyZW50RmliZXIsIHRydWUsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpYmVyLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgbW91bnRGaWJlclJlY3Vyc2l2ZWx5KGZpYmVyLmNoaWxkLCBzaG91bGRJbmNsdWRlSW5UcmVlID8gZmliZXIgOiBwYXJlbnRGaWJlciwgdHJ1ZSwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UncmUgZXhpdGluZyB0aGlzIEZpYmVyIG5vdywgYW5kIGVudGVyaW5nIGl0cyBzaWJsaW5ncy5cbiAgICAgIC8vIElmIHdlIGhhdmUgc2VsZWN0aW9uIHRvIHJlc3RvcmUsIHdlIG1pZ2h0IG5lZWQgdG8gcmUtYWN0aXZhdGUgdHJhY2tpbmcuXG5cblxuICAgICAgdXBkYXRlVHJhY2tlZFBhdGhTdGF0ZUFmdGVyTW91bnQobWlnaHRTaWJsaW5nc0JlT25UcmFja2VkUGF0aCk7XG4gICAgICBmaWJlciA9IHRyYXZlcnNlU2libGluZ3MgPyBmaWJlci5zaWJsaW5nIDogbnVsbDtcbiAgICB9XG4gIH0gLy8gV2UgdXNlIHRoaXMgdG8gc2ltdWxhdGUgdW5tb3VudGluZyBmb3IgU3VzcGVuc2UgdHJlZXNcbiAgLy8gd2hlbiB3ZSBzd2l0Y2ggZnJvbSBwcmltYXJ5IHRvIGZhbGxiYWNrLlxuXG5cbiAgZnVuY3Rpb24gdW5tb3VudEZpYmVyQ2hpbGRyZW5SZWN1cnNpdmVseShmaWJlcikge1xuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGRlYnVnKCd1bm1vdW50RmliZXJDaGlsZHJlblJlY3Vyc2l2ZWx5KCknLCBmaWJlcik7XG4gICAgfSAvLyBXZSBtaWdodCBtZWV0IGEgbmVzdGVkIFN1c3BlbnNlIG9uIG91ciB3YXkuXG5cblxuICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBmaWJlci50YWcgPT09IFJlYWN0VHlwZU9mV29yay5TdXNwZW5zZUNvbXBvbmVudCAmJiBmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgLy8gSWYgaXQncyBzaG93aW5nIGZhbGxiYWNrIHRyZWUsIGxldCdzIHRyYXZlcnNlIGl0IGluc3RlYWQuXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudCA/IHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgOiBudWxsOyAvLyBTa2lwIG92ZXIgdG8gdGhlIHJlYWwgRmliZXIgY2hpbGQuXG5cbiAgICAgIGNoaWxkID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50ID8gZmFsbGJhY2tDaGlsZEZyYWdtZW50LmNoaWxkIDogbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFJlY29yZCBzaW11bGF0ZWQgdW5tb3VudHMgY2hpbGRyZW4tZmlyc3QuXG4gICAgICAvLyBXZSBza2lwIG5vZGVzIHdpdGhvdXQgcmV0dXJuIGJlY2F1c2UgdGhvc2UgYXJlIHJlYWwgdW5tb3VudHMuXG4gICAgICBpZiAoY2hpbGQucmV0dXJuICE9PSBudWxsKSB7XG4gICAgICAgIHVubW91bnRGaWJlckNoaWxkcmVuUmVjdXJzaXZlbHkoY2hpbGQpO1xuICAgICAgICByZWNvcmRVbm1vdW50KGNoaWxkLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29yZFByb2ZpbGluZ0R1cmF0aW9ucyhmaWJlcikge1xuICAgIHZhciBpZCA9IGdldEZpYmVySURUaHJvd3MoZmliZXIpO1xuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGZpYmVyLmFjdHVhbER1cmF0aW9uLFxuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uID0gZmliZXIudHJlZUJhc2VEdXJhdGlvbjtcbiAgICBpZFRvVHJlZUJhc2VEdXJhdGlvbk1hcC5zZXQoaWQsIHRyZWVCYXNlRHVyYXRpb24gfHwgMCk7XG5cbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7IC8vIEl0J3MgaW1wb3J0YW50IHRvIHVwZGF0ZSB0cmVlQmFzZUR1cmF0aW9uIGV2ZW4gaWYgdGhlIGN1cnJlbnQgRmliZXIgZGlkIG5vdCByZW5kZXIsXG4gICAgICAvLyBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIGRpZC5cblxuICAgICAgaWYgKGFsdGVybmF0ZSA9PSBudWxsIHx8IHRyZWVCYXNlRHVyYXRpb24gIT09IGFsdGVybmF0ZS50cmVlQmFzZUR1cmF0aW9uKSB7XG4gICAgICAgIC8vIFRyZWUgYmFzZSBkdXJhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3BlcmF0aW9ucyB0eXBlZCBhcnJheS5cbiAgICAgICAgLy8gU28gd2UgaGF2ZSB0byBjb252ZXJ0IHRoZW0gZnJvbSBtaWxsaXNlY29uZHMgdG8gbWljcm9zZWNvbmRzIHNvIHdlIGNhbiBzZW5kIHRoZW0gYXMgaW50cy5cbiAgICAgICAgdmFyIGNvbnZlcnRlZFRyZWVCYXNlRHVyYXRpb24gPSBNYXRoLmZsb29yKCh0cmVlQmFzZUR1cmF0aW9uIHx8IDApICogMTAwMCk7XG4gICAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fVVBEQVRFX1RSRUVfQkFTRV9EVVJBVElPTik7XG4gICAgICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKGNvbnZlcnRlZFRyZWVCYXNlRHVyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx0ZXJuYXRlID09IG51bGwgfHwgZGlkRmliZXJSZW5kZXIoYWx0ZXJuYXRlLCBmaWJlcikpIHtcbiAgICAgICAgaWYgKGFjdHVhbER1cmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYWN0dWFsIGR1cmF0aW9uIHJlcG9ydGVkIGJ5IFJlYWN0IGluY2x1ZGVzIHRpbWUgc3BlbnQgd29ya2luZyBvbiBjaGlsZHJlbi5cbiAgICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiwgYnV0IGl0J3MgYWxzbyB1c2VmdWwgdG8gYmUgYWJsZSB0byBleGNsdWRlIGNoaWxkIGR1cmF0aW9ucy5cbiAgICAgICAgICAvLyBUaGUgZnJvbnRlbmQgY2FuJ3QgY29tcHV0ZSB0aGlzLCBzaW5jZSB0aGUgaW1tZWRpYXRlIGNoaWxkcmVuIG1heSBoYXZlIGJlZW4gZmlsdGVyZWQgb3V0LlxuICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZG8gdGhpcyBvbiB0aGUgYmFja2VuZC5cbiAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBjYWxjdWxhdGVkIHNlbGYgZHVyYXRpb24gaXMgbm90IHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgICAgIC8vIFRoZSB0d28gYXJlIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHkgKHRyZWUgZHVyYXRpb24gZG9lcyBub3QgYWNjdW11bGF0ZSkuXG4gICAgICAgICAgdmFyIHNlbGZEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzZWxmRHVyYXRpb24gLT0gY2hpbGQuYWN0dWFsRHVyYXRpb24gfHwgMDtcbiAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgICB9IC8vIElmIHByb2ZpbGluZyBpcyBhY3RpdmUsIHN0b3JlIGR1cmF0aW9ucyBmb3IgZWxlbWVudHMgdGhhdCB3ZXJlIHJlbmRlcmVkIGR1cmluZyB0aGUgY29tbWl0LlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBzaG91bGQgZG8gdGhpcyBmb3IgYW55IGZpYmVyIHdlIHBlcmZvcm1lZCB3b3JrIG9uLCByZWdhcmRsZXNzIG9mIGl0cyBhY3R1YWxEdXJhdGlvbiB2YWx1ZS5cbiAgICAgICAgICAvLyBJbiBzb21lIGNhc2VzIGFjdHVhbER1cmF0aW9uIG1pZ2h0IGJlIDAgZm9yIGZpYmVycyB3ZSB3b3JrZWQgb24gKHBhcnRpY3VsYXJseSBpZiB3ZSdyZSB1c2luZyBEYXRlLm5vdylcbiAgICAgICAgICAvLyBJbiBvdGhlciBjYXNlcyAoZS5nLiBNZW1vKSBhY3R1YWxEdXJhdGlvbiBtaWdodCBiZSBncmVhdGVyIHRoYW4gMCBldmVuIGlmIHdlIFwiYmFpbGVkIG91dFwiLlxuXG5cbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSBjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGE7XG4gICAgICAgICAgbWV0YWRhdGEuZHVyYXRpb25zLnB1c2goaWQsIGFjdHVhbER1cmF0aW9uLCBzZWxmRHVyYXRpb24pO1xuICAgICAgICAgIG1ldGFkYXRhLm1heEFjdHVhbER1cmF0aW9uID0gTWF0aC5tYXgobWV0YWRhdGEubWF4QWN0dWFsRHVyYXRpb24sIGFjdHVhbER1cmF0aW9uKTtcblxuICAgICAgICAgIGlmIChyZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2VEZXNjcmlwdGlvbiA9IGdldENoYW5nZURlc2NyaXB0aW9uKGFsdGVybmF0ZSwgZmliZXIpO1xuXG4gICAgICAgICAgICBpZiAoY2hhbmdlRGVzY3JpcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmNoYW5nZURlc2NyaXB0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNoYW5nZURlc2NyaXB0aW9ucy5zZXQoaWQsIGNoYW5nZURlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cGRhdGVDb250ZXh0c0ZvckZpYmVyKGZpYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRSZXNldENoaWxkcmVuKGZpYmVyLCBjaGlsZFNldCkge1xuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGRlYnVnKCdyZWNvcmRSZXNldENoaWxkcmVuKCknLCBjaGlsZFNldCwgZmliZXIpO1xuICAgIH0gLy8gVGhlIGZyb250ZW5kIG9ubHkgcmVhbGx5IGNhcmVzIGFib3V0IHRoZSBkaXNwbGF5TmFtZSwga2V5LCBhbmQgY2hpbGRyZW4uXG4gICAgLy8gVGhlIGZpcnN0IHR3byBkb24ndCByZWFsbHkgY2hhbmdlLCBzbyB3ZSBhcmUgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgb3JkZXIgb2YgY2hpbGRyZW4gaGVyZS5cbiAgICAvLyBUaGlzIGlzIHRyaWNraWVyIHRoYW4gYSBzaW1wbGUgY29tcGFyaXNvbiB0aG91Z2gsIHNpbmNlIGNlcnRhaW4gdHlwZXMgb2YgZmliZXJzIGFyZSBmaWx0ZXJlZC5cblxuXG4gICAgdmFyIG5leHRDaGlsZHJlbiA9IFtdOyAvLyBUaGlzIGlzIGEgbmFpdmUgaW1wbGVtZW50YXRpb24gdGhhdCBzaGFsbG93bHkgcmVjb3Vyc2VzIGNoaWxkcmVuLlxuICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gcmV2aXNpdCB0aGlzIGlmIGl0IHByb3ZlcyB0byBiZSB0b28gaW5lZmZpY2llbnQuXG5cbiAgICB2YXIgY2hpbGQgPSBjaGlsZFNldDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgZmluZFJlb3JkZXJlZENoaWxkcmVuUmVjdXJzaXZlbHkoY2hpbGQsIG5leHRDaGlsZHJlbik7XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIG51bUNoaWxkcmVuID0gbmV4dENoaWxkcmVuLmxlbmd0aDtcblxuICAgIGlmIChudW1DaGlsZHJlbiA8IDIpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVvcmRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX1JFT1JERVJfQ0hJTERSRU4pO1xuICAgIHB1c2hPcGVyYXRpb24oZ2V0RmliZXJJRFRocm93cyhmaWJlcikpO1xuICAgIHB1c2hPcGVyYXRpb24obnVtQ2hpbGRyZW4pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHB1c2hPcGVyYXRpb24obmV4dENoaWxkcmVuW2ldKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kUmVvcmRlcmVkQ2hpbGRyZW5SZWN1cnNpdmVseShmaWJlciwgbmV4dENoaWxkcmVuKSB7XG4gICAgaWYgKCFzaG91bGRGaWx0ZXJGaWJlcihmaWJlcikpIHtcbiAgICAgIG5leHRDaGlsZHJlbi5wdXNoKGdldEZpYmVySURUaHJvd3MoZmliZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogaWYgU3VzcGVuc2UgbW91bnRzIGluIGEgdGltZWQtb3V0IHN0YXRlLFxuICAgICAgICAvLyBnZXQgdGhlIGZhbGxiYWNrIGNoaWxkIGZyb20gdGhlIGlubmVyIGZyYWdtZW50LFxuICAgICAgICAvLyBhbmQgc2tpcCBvdmVyIHRoZSBwcmltYXJ5IGNoaWxkLlxuICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBmaWJlci5jaGlsZDtcbiAgICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHByaW1hcnlDaGlsZEZyYWdtZW50ID8gcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA6IG51bGw7XG4gICAgICAgIHZhciBmYWxsYmFja0NoaWxkID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50ID8gZmFsbGJhY2tDaGlsZEZyYWdtZW50LmNoaWxkIDogbnVsbDtcblxuICAgICAgICBpZiAoZmFsbGJhY2tDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNoaWxkID0gZmFsbGJhY2tDaGlsZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZmluZFJlb3JkZXJlZENoaWxkcmVuUmVjdXJzaXZlbHkoY2hpbGQsIG5leHRDaGlsZHJlbik7XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUmV0dXJucyB3aGV0aGVyIGNsb3Nlc3QgdW5maWx0ZXJlZCBmaWJlciBwYXJlbnQgbmVlZHMgdG8gcmVzZXQgaXRzIGNoaWxkIGxpc3QuXG5cblxuICBmdW5jdGlvbiB1cGRhdGVGaWJlclJlY3Vyc2l2ZWx5KG5leHRGaWJlciwgcHJldkZpYmVyLCBwYXJlbnRGaWJlciwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSkge1xuICAgIHZhciBpZCA9IGdldE9yR2VuZXJhdGVGaWJlcklEKG5leHRGaWJlcik7XG5cbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBkZWJ1ZygndXBkYXRlRmliZXJSZWN1cnNpdmVseSgpJywgbmV4dEZpYmVyLCBwYXJlbnRGaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHRyYWNlVXBkYXRlc0VuYWJsZWQpIHtcbiAgICAgIHZhciBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRm9yRmliZXIobmV4dEZpYmVyKTtcblxuICAgICAgaWYgKHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgICAgLy8gSWYgYW4gYW5jZXN0b3IgdXBkYXRlZCwgd2Ugc2hvdWxkIG1hcmsgdGhlIG5lYXJlc3QgaG9zdCBub2RlcyBmb3IgaGlnaGxpZ2h0aW5nLlxuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IEVsZW1lbnRUeXBlSG9zdENvbXBvbmVudCkge1xuICAgICAgICAgIHRyYWNlVXBkYXRlc0Zvck5vZGVzLmFkZChuZXh0RmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZSA9PT0gdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbiB8fCBlbGVtZW50VHlwZSA9PT0gdHlwZXNfRWxlbWVudFR5cGVDbGFzcyB8fCBlbGVtZW50VHlwZSA9PT0gRWxlbWVudFR5cGVDb250ZXh0IHx8IGVsZW1lbnRUeXBlID09PSB0eXBlc19FbGVtZW50VHlwZU1lbW8gfHwgZWxlbWVudFR5cGUgPT09IHR5cGVzX0VsZW1lbnRUeXBlRm9yd2FyZFJlZikge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGlzIGlzIGEgdHJhY2VkIGFuY2VzdG9yLCBmbGFnIGZvciB0aGUgbmVhcmVzdCBob3N0IGRlc2NlbmRhbnQocykuXG4gICAgICAgICAgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSA9IGRpZEZpYmVyUmVuZGVyKHByZXZGaWJlciwgbmV4dEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50ICE9PSBudWxsICYmIG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQuaWQgPT09IGlkICYmIGRpZEZpYmVyUmVuZGVyKHByZXZGaWJlciwgbmV4dEZpYmVyKSkge1xuICAgICAgLy8gSWYgdGhpcyBGaWJlciBoYXMgdXBkYXRlZCwgY2xlYXIgY2FjaGVkIGluc3BlY3RlZCBkYXRhLlxuICAgICAgLy8gSWYgaXQgaXMgaW5zcGVjdGVkIGFnYWluLCBpdCBtYXkgbmVlZCB0byBiZSByZS1ydW4gdG8gb2J0YWluIHVwZGF0ZWQgaG9va3MgdmFsdWVzLlxuICAgICAgaGFzRWxlbWVudFVwZGF0ZWRTaW5jZUxhc3RJbnNwZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzaG91bGRJbmNsdWRlSW5UcmVlID0gIXNob3VsZEZpbHRlckZpYmVyKG5leHRGaWJlcik7XG4gICAgdmFyIGlzU3VzcGVuc2UgPSBuZXh0RmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudDtcbiAgICB2YXIgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IGZhbHNlOyAvLyBUaGUgYmVoYXZpb3Igb2YgdGltZWQtb3V0IFN1c3BlbnNlIHRyZWVzIGlzIHVuaXF1ZS5cbiAgICAvLyBSYXRoZXIgdGhhbiB1bm1vdW50IHRoZSB0aW1lZCBvdXQgY29udGVudCAoYW5kIHBvc3NpYmx5IGxvc2UgaW1wb3J0YW50IHN0YXRlKSxcbiAgICAvLyBSZWFjdCByZS1wYXJlbnRzIHRoaXMgY29udGVudCB3aXRoaW4gYSBoaWRkZW4gRnJhZ21lbnQgd2hpbGUgdGhlIGZhbGxiYWNrIGlzIHNob3dpbmcuXG4gICAgLy8gVGhpcyBiZWhhdmlvciBkb2Vzbid0IG5lZWQgdG8gYmUgb2JzZXJ2YWJsZSBpbiB0aGUgRGV2VG9vbHMgdGhvdWdoLlxuICAgIC8vIEl0IG1pZ2h0IGV2ZW4gcmVzdWx0IGluIGEgYmFkIHVzZXIgZXhwZXJpZW5jZSBmb3IgZS5nLiBub2RlIHNlbGVjdGlvbiBpbiB0aGUgRWxlbWVudHMgcGFuZWwuXG4gICAgLy8gVGhlIGVhc2llc3QgZml4IGlzIHRvIHN0cmlwIG91dCB0aGUgaW50ZXJtZWRpYXRlIEZyYWdtZW50IGZpYmVycyxcbiAgICAvLyBzbyB0aGUgRWxlbWVudHMgcGFuZWwgYW5kIFByb2ZpbGVyIGRvbid0IG5lZWQgdG8gc3BlY2lhbCBjYXNlIHRoZW0uXG4gICAgLy8gU3VzcGVuc2UgY29tcG9uZW50cyBvbmx5IGhhdmUgYSBub24tbnVsbCBtZW1vaXplZFN0YXRlIGlmIHRoZXkncmUgdGltZWQtb3V0LlxuXG4gICAgdmFyIHByZXZEaWRUaW1lb3V0ID0gaXNTdXNwZW5zZSAmJiBwcmV2RmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICB2YXIgbmV4dERpZFRpbWVPdXQgPSBpc1N1c3BlbnNlICYmIG5leHRGaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsOyAvLyBUaGUgbG9naWMgYmVsb3cgaXMgaW5zcGlyZWQgYnkgdGhlIGNvZGUgcGF0aHMgaW4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoKVxuICAgIC8vIGluc2lkZSBSZWFjdEZpYmVyQmVnaW5Xb3JrIGluIHRoZSBSZWFjdCBzb3VyY2UgY29kZS5cblxuICAgIGlmIChwcmV2RGlkVGltZW91dCAmJiBuZXh0RGlkVGltZU91dCkge1xuICAgICAgLy8gRmFsbGJhY2sgLT4gRmFsbGJhY2s6XG4gICAgICAvLyAxLiBSZWNvbmNpbGUgZmFsbGJhY2sgc2V0LlxuICAgICAgdmFyIG5leHRGaWJlckNoaWxkID0gbmV4dEZpYmVyLmNoaWxkO1xuICAgICAgdmFyIG5leHRGYWxsYmFja0NoaWxkU2V0ID0gbmV4dEZpYmVyQ2hpbGQgPyBuZXh0RmliZXJDaGlsZC5zaWJsaW5nIDogbnVsbDsgLy8gTm90ZTogV2UgY2FuJ3QgdXNlIG5leHRGaWJlci5jaGlsZC5zaWJsaW5nLmFsdGVybmF0ZVxuICAgICAgLy8gYmVjYXVzZSB0aGUgc2V0IGlzIHNwZWNpYWwgYW5kIGFsdGVybmF0ZSBtYXkgbm90IGV4aXN0LlxuXG4gICAgICB2YXIgcHJldkZpYmVyQ2hpbGQgPSBwcmV2RmliZXIuY2hpbGQ7XG4gICAgICB2YXIgcHJldkZhbGxiYWNrQ2hpbGRTZXQgPSBwcmV2RmliZXJDaGlsZCA/IHByZXZGaWJlckNoaWxkLnNpYmxpbmcgOiBudWxsO1xuXG4gICAgICBpZiAocHJldkZhbGxiYWNrQ2hpbGRTZXQgPT0gbnVsbCAmJiBuZXh0RmFsbGJhY2tDaGlsZFNldCAhPSBudWxsKSB7XG4gICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShuZXh0RmFsbGJhY2tDaGlsZFNldCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IG5leHRGaWJlciA6IHBhcmVudEZpYmVyLCB0cnVlLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKTtcbiAgICAgICAgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0RmFsbGJhY2tDaGlsZFNldCAhPSBudWxsICYmIHByZXZGYWxsYmFja0NoaWxkU2V0ICE9IG51bGwgJiYgdXBkYXRlRmliZXJSZWN1cnNpdmVseShuZXh0RmFsbGJhY2tDaGlsZFNldCwgcHJldkZhbGxiYWNrQ2hpbGRTZXQsIG5leHRGaWJlciwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSkpIHtcbiAgICAgICAgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcmV2RGlkVGltZW91dCAmJiAhbmV4dERpZFRpbWVPdXQpIHtcbiAgICAgIC8vIEZhbGxiYWNrIC0+IFByaW1hcnk6XG4gICAgICAvLyAxLiBVbm1vdW50IGZhbGxiYWNrIHNldFxuICAgICAgLy8gTm90ZTogZG9uJ3QgZW11bGF0ZSBmYWxsYmFjayB1bm1vdW50IGJlY2F1c2UgUmVhY3QgYWN0dWFsbHkgZGlkIGl0LlxuICAgICAgLy8gMi4gTW91bnQgcHJpbWFyeSBzZXRcbiAgICAgIHZhciBuZXh0UHJpbWFyeUNoaWxkU2V0ID0gbmV4dEZpYmVyLmNoaWxkO1xuXG4gICAgICBpZiAobmV4dFByaW1hcnlDaGlsZFNldCAhPT0gbnVsbCkge1xuICAgICAgICBtb3VudEZpYmVyUmVjdXJzaXZlbHkobmV4dFByaW1hcnlDaGlsZFNldCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IG5leHRGaWJlciA6IHBhcmVudEZpYmVyLCB0cnVlLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKTtcbiAgICAgIH1cblxuICAgICAgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghcHJldkRpZFRpbWVvdXQgJiYgbmV4dERpZFRpbWVPdXQpIHtcbiAgICAgIC8vIFByaW1hcnkgLT4gRmFsbGJhY2s6XG4gICAgICAvLyAxLiBIaWRlIHByaW1hcnkgc2V0XG4gICAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgdW5tb3VudCwgc28gaXQgd29uJ3QgZ2V0IHJlcG9ydGVkIGJ5IFJlYWN0LlxuICAgICAgLy8gV2UgbmVlZCB0byBtYW51YWxseSB3YWxrIHRoZSBwcmV2aW91cyB0cmVlIGFuZCByZWNvcmQgdW5tb3VudHMuXG4gICAgICB1bm1vdW50RmliZXJDaGlsZHJlblJlY3Vyc2l2ZWx5KHByZXZGaWJlcik7IC8vIDIuIE1vdW50IGZhbGxiYWNrIHNldFxuXG4gICAgICB2YXIgX25leHRGaWJlckNoaWxkID0gbmV4dEZpYmVyLmNoaWxkO1xuXG4gICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkU2V0ID0gX25leHRGaWJlckNoaWxkID8gX25leHRGaWJlckNoaWxkLnNpYmxpbmcgOiBudWxsO1xuXG4gICAgICBpZiAoX25leHRGYWxsYmFja0NoaWxkU2V0ICE9IG51bGwpIHtcbiAgICAgICAgbW91bnRGaWJlclJlY3Vyc2l2ZWx5KF9uZXh0RmFsbGJhY2tDaGlsZFNldCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IG5leHRGaWJlciA6IHBhcmVudEZpYmVyLCB0cnVlLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKTtcbiAgICAgICAgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbW1vbiBjYXNlOiBQcmltYXJ5IC0+IFByaW1hcnkuXG4gICAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGNvZGUgcGF0aCBhcyBmb3Igbm9uLVN1c3BlbnNlIGZpYmVycy5cbiAgICAgIGlmIChuZXh0RmliZXIuY2hpbGQgIT09IHByZXZGaWJlci5jaGlsZCkge1xuICAgICAgICAvLyBJZiB0aGUgZmlyc3QgY2hpbGQgaXMgZGlmZmVyZW50LCB3ZSBuZWVkIHRvIHRyYXZlcnNlIHRoZW0uXG4gICAgICAgIC8vIEVhY2ggbmV4dCBjaGlsZCB3aWxsIGJlIGVpdGhlciBhIG5ldyBjaGlsZCAobW91bnQpIG9yIGFuIGFsdGVybmF0ZSAodXBkYXRlKS5cbiAgICAgICAgdmFyIG5leHRDaGlsZCA9IG5leHRGaWJlci5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZDaGlsZEF0U2FtZUluZGV4ID0gcHJldkZpYmVyLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChuZXh0Q2hpbGQpIHtcbiAgICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgY2hpbGRyZW4gd2lsbCBiZSByZWZlcmVudGlhbGx5IGRpZmZlcmVudCBiZWNhdXNlXG4gICAgICAgICAgLy8gdGhleSBhcmUgZWl0aGVyIG5ldyBtb3VudHMgb3IgYWx0ZXJuYXRlcyBvZiBwcmV2aW91cyBjaGlsZHJlbi5cbiAgICAgICAgICAvLyBTY2hlZHVsZSB1cGRhdGVzIGFuZCBtb3VudHMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYWx0ZXJuYXRlcyBleGlzdC5cbiAgICAgICAgICAvLyBXZSBkb24ndCB0cmFjayBkZWxldGlvbnMgaGVyZSBiZWNhdXNlIHRoZXkgYXJlIHJlcG9ydGVkIHNlcGFyYXRlbHkuXG4gICAgICAgICAgaWYgKG5leHRDaGlsZC5hbHRlcm5hdGUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2Q2hpbGQgPSBuZXh0Q2hpbGQuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlRmliZXJSZWN1cnNpdmVseShuZXh0Q2hpbGQsIHByZXZDaGlsZCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IG5leHRGaWJlciA6IHBhcmVudEZpYmVyLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKSkge1xuICAgICAgICAgICAgICAvLyBJZiBhIG5lc3RlZCB0cmVlIGNoaWxkIG9yZGVyIGNoYW5nZWQgYnV0IGl0IGNhbid0IGhhbmRsZSBpdHMgb3duXG4gICAgICAgICAgICAgIC8vIGNoaWxkIG9yZGVyIGludmFsaWRhdGlvbiAoZS5nLiBiZWNhdXNlIGl0J3MgZmlsdGVyZWQgb3V0IGxpa2UgaG9zdCBub2RlcyksXG4gICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgbmVlZCB0byByZXNldCBjaGlsZCBvcmRlciB1cHdhcmRzIHRvIHRoaXMgRmliZXIuXG4gICAgICAgICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgICAgfSAvLyBIb3dldmVyIHdlIGFsc28ga2VlcCB0cmFjayBpZiB0aGUgb3JkZXIgb2YgdGhlIGNoaWxkcmVuIG1hdGNoZXNcbiAgICAgICAgICAgIC8vIHRoZSBwcmV2aW91cyBvcmRlci4gVGhleSBhcmUgYWx3YXlzIGRpZmZlcmVudCByZWZlcmVudGlhbGx5LCBidXRcbiAgICAgICAgICAgIC8vIGlmIHRoZSBpbnN0YW5jZXMgbGluZSB1cCBjb25jZXB0dWFsbHkgd2UnbGwgd2FudCB0byBrbm93IHRoYXQuXG5cblxuICAgICAgICAgICAgaWYgKHByZXZDaGlsZCAhPT0gcHJldkNoaWxkQXRTYW1lSW5kZXgpIHtcbiAgICAgICAgICAgICAgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShuZXh0Q2hpbGQsIHNob3VsZEluY2x1ZGVJblRyZWUgPyBuZXh0RmliZXIgOiBwYXJlbnRGaWJlciwgZmFsc2UsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpO1xuICAgICAgICAgICAgc2hvdWxkUmVzZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgfSAvLyBUcnkgdGhlIG5leHQgY2hpbGQuXG5cblxuICAgICAgICAgIG5leHRDaGlsZCA9IG5leHRDaGlsZC5zaWJsaW5nOyAvLyBBZHZhbmNlIHRoZSBwb2ludGVyIGluIHRoZSBwcmV2aW91cyBsaXN0IHNvIHRoYXQgd2UgY2FuXG4gICAgICAgICAgLy8ga2VlcCBjb21wYXJpbmcgaWYgdGhleSBsaW5lIHVwLlxuXG4gICAgICAgICAgaWYgKCFzaG91bGRSZXNldENoaWxkcmVuICYmIHByZXZDaGlsZEF0U2FtZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcmV2Q2hpbGRBdFNhbWVJbmRleCA9IHByZXZDaGlsZEF0U2FtZUluZGV4LnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIElmIHdlIGhhdmUgbm8gbW9yZSBjaGlsZHJlbiwgYnV0IHVzZWQgdG8sIHRoZXkgZG9uJ3QgbGluZSB1cC5cblxuXG4gICAgICAgIGlmIChwcmV2Q2hpbGRBdFNhbWVJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHJhY2VVcGRhdGVzRW5hYmxlZCkge1xuICAgICAgICAgIC8vIElmIHdlJ3JlIHRyYWNpbmcgdXBkYXRlcyBhbmQgd2UndmUgYmFpbGVkIG91dCBiZWZvcmUgcmVhY2hpbmcgYSBob3N0IG5vZGUsXG4gICAgICAgICAgLy8gd2Ugc2hvdWxkIGZhbGwgYmFjayB0byByZWN1cnNpdmVseSBtYXJraW5nIHRoZSBuZWFyZXN0IGhvc3QgZGVzY2VuZGFudHMgZm9yIGhpZ2hsaWdodC5cbiAgICAgICAgICBpZiAodHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIGhvc3RGaWJlcnMgPSBmaW5kQWxsQ3VycmVudEhvc3RGaWJlcnMoZ2V0RmliZXJJRFRocm93cyhuZXh0RmliZXIpKTtcbiAgICAgICAgICAgIGhvc3RGaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoaG9zdEZpYmVyKSB7XG4gICAgICAgICAgICAgIHRyYWNlVXBkYXRlc0Zvck5vZGVzLmFkZChob3N0RmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRJbmNsdWRlSW5UcmVlKSB7XG4gICAgICB2YXIgaXNQcm9maWxpbmdTdXBwb3J0ZWQgPSBuZXh0RmliZXIuaGFzT3duUHJvcGVydHkoJ3RyZWVCYXNlRHVyYXRpb24nKTtcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgIHJlY29yZFByb2ZpbGluZ0R1cmF0aW9ucyhuZXh0RmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRSZXNldENoaWxkcmVuKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNyYXdsIHRoZSBzdWJ0cmVlIGZvciBjbG9zZXN0IG5vbi1maWx0ZXJlZCBGaWJlcnNcbiAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGRpc3BsYXkgdGhlbSBpbiBhIGZsYXQgY2hpbGRyZW4gc2V0LlxuICAgICAgaWYgKHNob3VsZEluY2x1ZGVJblRyZWUpIHtcbiAgICAgICAgLy8gTm9ybWFsbHksIHNlYXJjaCBmb3IgY2hpbGRyZW4gZnJvbSB0aGUgcmVuZGVyZWQgY2hpbGQuXG4gICAgICAgIHZhciBuZXh0Q2hpbGRTZXQgPSBuZXh0RmliZXIuY2hpbGQ7XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lT3V0KSB7XG4gICAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0aW1lZC1vdXQgU3VzcGVuc2UgcmVuZGVycyB0aGUgZmFsbGJhY2sgc2V0LlxuICAgICAgICAgIHZhciBfbmV4dEZpYmVyQ2hpbGQyID0gbmV4dEZpYmVyLmNoaWxkO1xuICAgICAgICAgIG5leHRDaGlsZFNldCA9IF9uZXh0RmliZXJDaGlsZDIgPyBfbmV4dEZpYmVyQ2hpbGQyLnNpYmxpbmcgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRDaGlsZFNldCAhPSBudWxsKSB7XG4gICAgICAgICAgcmVjb3JkUmVzZXRDaGlsZHJlbihuZXh0RmliZXIsIG5leHRDaGlsZFNldCk7XG4gICAgICAgIH0gLy8gV2UndmUgaGFuZGxlZCB0aGUgY2hpbGQgb3JkZXIgY2hhbmdlIGZvciB0aGlzIEZpYmVyLlxuICAgICAgICAvLyBTaW5jZSBpdCdzIGluY2x1ZGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwYXJlbnQgY2hpbGQgb3JkZXIuXG5cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMZXQgdGhlIGNsb3Nlc3QgdW5maWx0ZXJlZCBwYXJlbnQgRmliZXIgcmVzZXQgaXRzIGNoaWxkIG9yZGVyIGluc3RlYWQuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHsvLyBXZSBkb24ndCBwYXRjaCBhbnkgbWV0aG9kcyBzbyB0aGVyZSBpcyBubyBjbGVhbnVwLlxuICB9XG5cbiAgZnVuY3Rpb24gcm9vdFN1cHBvcnRzUHJvZmlsaW5nKHJvb3QpIHtcbiAgICBpZiAocm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICAvLyB2MTYgYnVpbGRzIGluY2x1ZGUgdGhpcyBmaWVsZCBmb3IgdGhlIHNjaGVkdWxlci90cmFjaW5nIEFQSS5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAocm9vdC5jdXJyZW50ICE9IG51bGwgJiYgcm9vdC5jdXJyZW50Lmhhc093blByb3BlcnR5KCd0cmVlQmFzZUR1cmF0aW9uJykpIHtcbiAgICAgIC8vIFRoZSBzY2hlZHVsZXIvdHJhY2luZyBBUEkgd2FzIHJlbW92ZWQgaW4gdjE3IHRob3VnaFxuICAgICAgLy8gc28gd2UgbmVlZCB0byBjaGVjayBhIG5vbi1yb290IEZpYmVyLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaEluaXRpYWxPcGVyYXRpb25zKCkge1xuICAgIHZhciBsb2NhbFBlbmRpbmdPcGVyYXRpb25zUXVldWUgPSBwZW5kaW5nT3BlcmF0aW9uc1F1ZXVlO1xuICAgIHBlbmRpbmdPcGVyYXRpb25zUXVldWUgPSBudWxsO1xuXG4gICAgaWYgKGxvY2FsUGVuZGluZ09wZXJhdGlvbnNRdWV1ZSAhPT0gbnVsbCAmJiBsb2NhbFBlbmRpbmdPcGVyYXRpb25zUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2UgbWF5IGhhdmUgYWxyZWFkeSBxdWV1ZWQgdXAgc29tZSBvcGVyYXRpb25zIGJlZm9yZSB0aGUgZnJvbnRlbmQgY29ubmVjdGVkXG4gICAgICAvLyBJZiBzbywgbGV0IHRoZSBmcm9udGVuZCBrbm93IGFib3V0IHRoZW0uXG4gICAgICBsb2NhbFBlbmRpbmdPcGVyYXRpb25zUXVldWUuZm9yRWFjaChmdW5jdGlvbiAob3BlcmF0aW9ucykge1xuICAgICAgICBob29rLmVtaXQoJ29wZXJhdGlvbnMnLCBvcGVyYXRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCZWZvcmUgdGhlIHRyYXZlcnNhbHMsIHJlbWVtYmVyIHRvIHN0YXJ0IHRyYWNraW5nXG4gICAgICAvLyBvdXIgcGF0aCBpbiBjYXNlIHdlIGhhdmUgc2VsZWN0aW9uIHRvIHJlc3RvcmUuXG4gICAgICBpZiAodHJhY2tlZFBhdGggIT09IG51bGwpIHtcbiAgICAgICAgbWlnaHRCZU9uVHJhY2tlZFBhdGggPSB0cnVlO1xuICAgICAgfSAvLyBJZiB3ZSBoYXZlIG5vdCBiZWVuIHByb2ZpbGluZywgdGhlbiB3ZSBjYW4ganVzdCB3YWxrIHRoZSB0cmVlIGFuZCBidWlsZCB1cCBpdHMgY3VycmVudCBzdGF0ZSBhcy1pcy5cblxuXG4gICAgICBob29rLmdldEZpYmVyUm9vdHMocmVuZGVyZXJJRCkuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgICBjdXJyZW50Um9vdElEID0gZ2V0T3JHZW5lcmF0ZUZpYmVySUQocm9vdC5jdXJyZW50KTtcbiAgICAgICAgc2V0Um9vdFBzZXVkb0tleShjdXJyZW50Um9vdElELCByb290LmN1cnJlbnQpOyAvLyBIYW5kbGUgbXVsdGktcmVuZGVyZXIgZWRnZS1jYXNlIHdoZXJlIG9ubHkgc29tZSB2MTYgcmVuZGVyZXJzIHN1cHBvcnQgcHJvZmlsaW5nLlxuXG4gICAgICAgIGlmIChpc1Byb2ZpbGluZyAmJiByb290U3VwcG9ydHNQcm9maWxpbmcocm9vdCkpIHtcbiAgICAgICAgICAvLyBJZiBwcm9maWxpbmcgaXMgYWN0aXZlLCBzdG9yZSBjb21taXQgdGltZSBhbmQgZHVyYXRpb24uXG4gICAgICAgICAgLy8gVGhlIGZyb250ZW5kIG1heSByZXF1ZXN0IHRoaXMgaW5mb3JtYXRpb24gYWZ0ZXIgcHJvZmlsaW5nIGhhcyBzdG9wcGVkLlxuICAgICAgICAgIGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIGNoYW5nZURlc2NyaXB0aW9uczogcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zID8gbmV3IE1hcCgpIDogbnVsbCxcbiAgICAgICAgICAgIGR1cmF0aW9uczogW10sXG4gICAgICAgICAgICBjb21taXRUaW1lOiByZW5kZXJlcl9nZXRDdXJyZW50VGltZSgpIC0gcHJvZmlsaW5nU3RhcnRUaW1lLFxuICAgICAgICAgICAgbWF4QWN0dWFsRHVyYXRpb246IDAsXG4gICAgICAgICAgICBwcmlvcml0eUxldmVsOiBudWxsLFxuICAgICAgICAgICAgdXBkYXRlcnM6IGdldFVwZGF0ZXJzTGlzdChyb290KSxcbiAgICAgICAgICAgIGVmZmVjdER1cmF0aW9uOiBudWxsLFxuICAgICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIG51bGwsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIGZsdXNoUGVuZGluZ0V2ZW50cyhyb290KTtcbiAgICAgICAgY3VycmVudFJvb3RJRCA9IC0xO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VXBkYXRlcnNMaXN0KHJvb3QpIHtcbiAgICByZXR1cm4gcm9vdC5tZW1vaXplZFVwZGF0ZXJzICE9IG51bGwgPyBBcnJheS5mcm9tKHJvb3QubWVtb2l6ZWRVcGRhdGVycykuZmlsdGVyKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgcmV0dXJuIGdldEZpYmVySURVbnNhZmUoZmliZXIpICE9PSBudWxsO1xuICAgIH0pLm1hcChmaWJlclRvU2VyaWFsaXplZEVsZW1lbnQpIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbW1pdEZpYmVyVW5tb3VudChmaWJlcikge1xuICAgIC8vIElmIHRoZSB1bnRyYWNrRmliZXJTZXQgYWxyZWFkeSBoYXMgdGhlIHVubW91bnRlZCBGaWJlciwgdGhpcyBtZWFucyB3ZSd2ZSBhbHJlYWR5XG4gICAgLy8gcmVjb3JkZWRVbm1vdW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IGFnYWluLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCB3ZSBtaWdodFxuICAgIC8vIGVuZCB1cCBkb3VibGUtZGVsZXRpbmcgRmliZXJzIGluIHNvbWUgY2FzZXMgKGxpa2UgTGVnYWN5IFN1c3BlbnNlKS5cbiAgICBpZiAoIXVudHJhY2tGaWJlcnNTZXQuaGFzKGZpYmVyKSkge1xuICAgICAgLy8gVGhpcyBpcyBub3QgcmVjdXJzaXZlLlxuICAgICAgLy8gV2UgY2FuJ3QgdHJhdmVyc2UgZmliZXJzIGFmdGVyIHVubW91bnRpbmcgc28gaW5zdGVhZFxuICAgICAgLy8gd2UgcmVseSBvbiBSZWFjdCB0ZWxsaW5nIHVzIGFib3V0IGVhY2ggdW5tb3VudC5cbiAgICAgIHJlY29yZFVubW91bnQoZmliZXIsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQb3N0Q29tbWl0RmliZXJSb290KHJvb3QpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgJiYgcm9vdFN1cHBvcnRzUHJvZmlsaW5nKHJvb3QpKSB7XG4gICAgICBpZiAoY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBfZ2V0RWZmZWN0RHVyYXRpb25zID0gZ2V0RWZmZWN0RHVyYXRpb25zKHJvb3QpLFxuICAgICAgICAgICAgZWZmZWN0RHVyYXRpb24gPSBfZ2V0RWZmZWN0RHVyYXRpb25zLmVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gX2dldEVmZmVjdER1cmF0aW9ucy5wYXNzaXZlRWZmZWN0RHVyYXRpb247IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhLmVmZmVjdER1cmF0aW9uID0gZWZmZWN0RHVyYXRpb247IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgIGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSBwYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ29tbWl0RmliZXJSb290KHJvb3QsIHByaW9yaXR5TGV2ZWwpIHtcbiAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7IC8vIEZsdXNoIGFueSBwZW5kaW5nIEZpYmVycyB0aGF0IHdlIGFyZSB1bnRyYWNraW5nIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBuZXcgY29tbWl0LlxuICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHdlIG1pZ2h0IGVuZCB1cCBkb3VibGUtZGVsZXRpbmcgRmliZXJzIGluIHNvbWUgY2FzZXMgKGxpa2UgTGVnYWN5IFN1c3BlbnNlKS5cblxuICAgIHVudHJhY2tGaWJlcnMoKTtcbiAgICBjdXJyZW50Um9vdElEID0gZ2V0T3JHZW5lcmF0ZUZpYmVySUQoY3VycmVudCk7IC8vIEJlZm9yZSB0aGUgdHJhdmVyc2FscywgcmVtZW1iZXIgdG8gc3RhcnQgdHJhY2tpbmdcbiAgICAvLyBvdXIgcGF0aCBpbiBjYXNlIHdlIGhhdmUgc2VsZWN0aW9uIHRvIHJlc3RvcmUuXG5cbiAgICBpZiAodHJhY2tlZFBhdGggIT09IG51bGwpIHtcbiAgICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHJhY2VVcGRhdGVzRW5hYmxlZCkge1xuICAgICAgdHJhY2VVcGRhdGVzRm9yTm9kZXMuY2xlYXIoKTtcbiAgICB9IC8vIEhhbmRsZSBtdWx0aS1yZW5kZXJlciBlZGdlLWNhc2Ugd2hlcmUgb25seSBzb21lIHYxNiByZW5kZXJlcnMgc3VwcG9ydCBwcm9maWxpbmcuXG5cblxuICAgIHZhciBpc1Byb2ZpbGluZ1N1cHBvcnRlZCA9IHJvb3RTdXBwb3J0c1Byb2ZpbGluZyhyb290KTtcblxuICAgIGlmIChpc1Byb2ZpbGluZyAmJiBpc1Byb2ZpbGluZ1N1cHBvcnRlZCkge1xuICAgICAgLy8gSWYgcHJvZmlsaW5nIGlzIGFjdGl2ZSwgc3RvcmUgY29tbWl0IHRpbWUgYW5kIGR1cmF0aW9uLlxuICAgICAgLy8gVGhlIGZyb250ZW5kIG1heSByZXF1ZXN0IHRoaXMgaW5mb3JtYXRpb24gYWZ0ZXIgcHJvZmlsaW5nIGhhcyBzdG9wcGVkLlxuICAgICAgY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhID0ge1xuICAgICAgICBjaGFuZ2VEZXNjcmlwdGlvbnM6IHJlY29yZENoYW5nZURlc2NyaXB0aW9ucyA/IG5ldyBNYXAoKSA6IG51bGwsXG4gICAgICAgIGR1cmF0aW9uczogW10sXG4gICAgICAgIGNvbW1pdFRpbWU6IHJlbmRlcmVyX2dldEN1cnJlbnRUaW1lKCkgLSBwcm9maWxpbmdTdGFydFRpbWUsXG4gICAgICAgIG1heEFjdHVhbER1cmF0aW9uOiAwLFxuICAgICAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsID09IG51bGwgPyBudWxsIDogZm9ybWF0UHJpb3JpdHlMZXZlbChwcmlvcml0eUxldmVsKSxcbiAgICAgICAgdXBkYXRlcnM6IGdldFVwZGF0ZXJzTGlzdChyb290KSxcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0byBudWxsOyBpZiBuZXcgZW5vdWdoIFJlYWN0IHZlcnNpb24gaXMgcnVubmluZyxcbiAgICAgICAgLy8gdGhlc2UgdmFsdWVzIHdpbGwgYmUgcmVhZCBkdXJpbmcgc2VwYXJhdGUgaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdCgpIGNhbGwuXG4gICAgICAgIGVmZmVjdER1cmF0aW9uOiBudWxsLFxuICAgICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGFsdGVybmF0ZSkge1xuICAgICAgLy8gVE9ETzogcmVseWluZyBvbiB0aGlzIHNlZW1zIGEgYml0IGZpc2h5LlxuICAgICAgdmFyIHdhc01vdW50ZWQgPSBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbCAmJiAvLyBBIGRlaHlkcmF0ZWQgcm9vdCBpcyBub3QgY29uc2lkZXJlZCBtb3VudGVkXG4gICAgICBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQgIT09IHRydWU7XG4gICAgICB2YXIgaXNNb3VudGVkID0gY3VycmVudC5tZW1vaXplZFN0YXRlICE9IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbCAmJiAvLyBBIGRlaHlkcmF0ZWQgcm9vdCBpcyBub3QgY29uc2lkZXJlZCBtb3VudGVkXG4gICAgICBjdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkICE9PSB0cnVlO1xuXG4gICAgICBpZiAoIXdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSB7XG4gICAgICAgIC8vIE1vdW50IGEgbmV3IHJvb3QuXG4gICAgICAgIHNldFJvb3RQc2V1ZG9LZXkoY3VycmVudFJvb3RJRCwgY3VycmVudCk7XG4gICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShjdXJyZW50LCBudWxsLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmICh3YXNNb3VudGVkICYmIGlzTW91bnRlZCkge1xuICAgICAgICAvLyBVcGRhdGUgYW4gZXhpc3Rpbmcgcm9vdC5cbiAgICAgICAgdXBkYXRlRmliZXJSZWN1cnNpdmVseShjdXJyZW50LCBhbHRlcm5hdGUsIG51bGwsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAod2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgIC8vIFVubW91bnQgYW4gZXhpc3Rpbmcgcm9vdC5cbiAgICAgICAgcmVtb3ZlUm9vdFBzZXVkb0tleShjdXJyZW50Um9vdElEKTtcbiAgICAgICAgcmVjb3JkVW5tb3VudChjdXJyZW50LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1vdW50IGEgbmV3IHJvb3QuXG4gICAgICBzZXRSb290UHNldWRvS2V5KGN1cnJlbnRSb290SUQsIGN1cnJlbnQpO1xuICAgICAgbW91bnRGaWJlclJlY3Vyc2l2ZWx5KGN1cnJlbnQsIG51bGwsIGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzUHJvZmlsaW5nICYmIGlzUHJvZmlsaW5nU3VwcG9ydGVkKSB7XG4gICAgICBpZiAoIXNob3VsZEJhaWxvdXRXaXRoUGVuZGluZ09wZXJhdGlvbnMoKSkge1xuICAgICAgICB2YXIgY29tbWl0UHJvZmlsaW5nTWV0YWRhdGEgPSByb290VG9Db21taXRQcm9maWxpbmdNZXRhZGF0YU1hcC5nZXQoY3VycmVudFJvb3RJRCk7XG5cbiAgICAgICAgaWYgKGNvbW1pdFByb2ZpbGluZ01ldGFkYXRhICE9IG51bGwpIHtcbiAgICAgICAgICBjb21taXRQcm9maWxpbmdNZXRhZGF0YS5wdXNoKGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAuc2V0KGN1cnJlbnRSb290SUQsIFtjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2UncmUgZG9uZSBoZXJlLlxuXG5cbiAgICBmbHVzaFBlbmRpbmdFdmVudHMocm9vdCk7XG5cbiAgICBpZiAodHJhY2VVcGRhdGVzRW5hYmxlZCkge1xuICAgICAgaG9vay5lbWl0KCd0cmFjZVVwZGF0ZXMnLCB0cmFjZVVwZGF0ZXNGb3JOb2Rlcyk7XG4gICAgfVxuXG4gICAgY3VycmVudFJvb3RJRCA9IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZEFsbEN1cnJlbnRIb3N0RmliZXJzKGlkKSB7XG4gICAgdmFyIGZpYmVycyA9IFtdO1xuICAgIHZhciBmaWJlciA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoQnlJZChpZCk7XG5cbiAgICBpZiAoIWZpYmVyKSB7XG4gICAgICByZXR1cm4gZmliZXJzO1xuICAgIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgYWxsIEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIGZpYmVycy5wdXNoKG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZpYmVycztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gZmliZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgICByZXR1cm4gZmliZXJzO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRChpZCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgX2ZpYmVyMyA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoQnlJZChpZCk7XG5cbiAgICAgIGlmIChfZmliZXIzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9zdEZpYmVycyA9IGZpbmRBbGxDdXJyZW50SG9zdEZpYmVycyhpZCk7XG4gICAgICByZXR1cm4gaG9zdEZpYmVycy5tYXAoZnVuY3Rpb24gKGhvc3RGaWJlcikge1xuICAgICAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH0pLmZpbHRlcihCb29sZWFuKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSBmaWJlciBtaWdodCBoYXZlIHVubW91bnRlZCBieSBub3cuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZUZvckZpYmVySUQoaWQpIHtcbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcbiAgICByZXR1cm4gZmliZXIgIT0gbnVsbCA/IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZpYmVyRm9yTmF0aXZlKGhvc3RJbnN0YW5jZSkge1xuICAgIHJldHVybiByZW5kZXJlci5maW5kRmliZXJCeUhvc3RJbnN0YW5jZShob3N0SW5zdGFuY2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RmliZXJJREZvck5hdGl2ZShob3N0SW5zdGFuY2UpIHtcbiAgICB2YXIgZmluZE5lYXJlc3RVbmZpbHRlcmVkQW5jZXN0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IHJlbmRlcmVyLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGhvc3RJbnN0YW5jZSk7XG5cbiAgICBpZiAoZmliZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKGZpbmROZWFyZXN0VW5maWx0ZXJlZEFuY2VzdG9yKSB7XG4gICAgICAgIHdoaWxlIChmaWJlciAhPT0gbnVsbCAmJiBzaG91bGRGaWx0ZXJGaWJlcihmaWJlcikpIHtcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2V0RmliZXJJRFRocm93cyhmaWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBSZWFjdCBhbmQgc2hvdWxkIGJlIGtlcHQgaW4gc3luYzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1yZWNvbmNpbGVyL3NyYy9SZWFjdEZpYmVyVHJlZVJlZmxlY3Rpb24uanNcblxuXG4gIGZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICAgIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgIH1cbiAgfSAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIFJlYWN0IGFuZCBzaG91bGQgYmUga2VwdCBpbiBzeW5jOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0LXJlY29uY2lsZXIvc3JjL1JlYWN0RmliZXJUcmVlUmVmbGVjdGlvbi5qc1xuXG5cbiAgZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZmliZXI7XG5cbiAgICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgICAgLy8geWV0LiBJZiBpdCBpcywgdGhlbiBpdCB3aWxsIGhhdmUgYSBwZW5kaW5nIGluc2VydGlvbiBlZmZlY3Qgb24gaXQuXG4gICAgICB2YXIgbmV4dE5vZGUgPSBub2RlO1xuXG4gICAgICBkbyB7XG4gICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiwgYW5kIHRoZXNlIGZsYWdzLCBhcmUgYSBsZWFrZWQgaW1wbGVtZW50YXRpb25cbiAgICAgICAgLy8gZGV0YWlsLiBPbmNlIHdlIHN0YXJ0IHJlbGVhc2luZyBEZXZUb29scyBpbiBsb2Nrc3RlcCB3aXRoIFJlYWN0LCB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1wb3J0IGEgZnVuY3Rpb24gZnJvbSB0aGUgcmVjb25jaWxlciBpbnN0ZWFkLlxuXG4gICAgICAgIHZhciBQbGFjZW1lbnQgPSAyO1xuICAgICAgICB2YXIgSHlkcmF0aW5nID0gNDA5NjtcblxuICAgICAgICBpZiAoKG5vZGUuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IDApIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgICAvLyBpZiB0aGF0IG9uZSBpcyBzdGlsbCBtb3VudGVkLlxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cblxuICAgICAgICBuZXh0Tm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgICAvLyByZW5kZXJDb250YWluZXJJbnRvU3VidHJlZS5cbiAgICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAgIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuXG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIFJlYWN0IGFuZCBzaG91bGQgYmUga2VwdCBpbiBzeW5jOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0LXJlY29uY2lsZXIvc3JjL1JlYWN0RmliZXJUcmVlUmVmbGVjdGlvbi5qc1xuICAvLyBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIHVwZGF0ZWQgUmVhY3QgdG8gaW5qZWN0IHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgKHZzIGp1c3QgaW5kaXJlY3RseSB2aWEgZmluZERPTU5vZGUpLlxuICAvLyBCRUdJTiBjb3BpZWQgY29kZVxuXG5cbiAgZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKSB7XG4gICAgdmFyIGZpYmVyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChpZCk7XG5cbiAgICBpZiAoZmliZXIgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGZpbmQgRmliZXIgd2l0aCBpZCBcXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfSAvLyBJZiB3ZSBoYXZlIHR3byBwb3NzaWJsZSBicmFuY2hlcywgd2UnbGwgd2FsayBiYWNrd2FyZHMgdXAgdG8gdGhlIHJvb3RcbiAgICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuXG4gICAgdmFyIGEgPSBmaWJlcjtcbiAgICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuXG4gICAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChwYXJlbnRCID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgICAvLyBoYXBwZW5zIHdoZW4gYSBTdXNwZW5zZSBjb21wb25lbnQgaXMgaGlkZGVuLiBBbiBleHRyYSBmcmFnbWVudCBmaWJlclxuICAgICAgICAvLyBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBTdXNwZW5zZSBmaWJlciBhbmQgaXRzIGNoaWxkcmVuLiBTa2lwXG4gICAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICAgIHZhciBuZXh0UGFyZW50ID0gcGFyZW50QS5yZXR1cm47XG5cbiAgICAgICAgaWYgKG5leHRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlJ3JlIGF0IHRoZSByb290LlxuXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgICAgLy8gYXNzdW1lIHRoYXQgdGhlIGNoaWxkIGlzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuIHdlIGJhaWxvdXQgb24gbG93XG4gICAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlciBvZiBBIGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgQiBwb2ludCB0byBkaWZmZXJlbnRcbiAgICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAgIC8vIHNldCBvZiBCLnJldHVybi5cbiAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAgIC8vIHdoaWNoIGNoaWxkIGJlbG9uZ3MgdG8gd2hpY2ggc2V0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgICAgdmFyIGRpZEZpbmRDaGlsZCA9IGZhbHNlO1xuICAgICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnICcgKyAnaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5hbHRlcm5hdGUgIT09IGIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBcIiArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgICAvLyB1bm1vdW50ZWQuXG5cblxuICAgIGlmIChhLnRhZyAhPT0gSG9zdFJvb3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgIH1cblxuICAgIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cblxuICAgIHJldHVybiBhbHRlcm5hdGU7XG4gIH0gLy8gRU5EIGNvcGllZCBjb2RlXG5cblxuICBmdW5jdGlvbiBwcmVwYXJlVmlld0F0dHJpYnV0ZVNvdXJjZShpZCwgcGF0aCkge1xuICAgIGlmIChpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQoaWQpKSB7XG4gICAgICB3aW5kb3cuJGF0dHJpYnV0ZSA9IHV0aWxzX2dldEluT2JqZWN0KG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQsIHBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmVWaWV3RWxlbWVudFNvdXJjZShpZCkge1xuICAgIHZhciBmaWJlciA9IGlkVG9BcmJpdHJhcnlGaWJlck1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGZpYmVyID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCBmaW5kIEZpYmVyIHdpdGggaWQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFR5cGUgPSBmaWJlci5lbGVtZW50VHlwZSxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBnbG9iYWwuJHR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBnbG9iYWwuJHR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgZ2xvYmFsLiR0eXBlID0gZWxlbWVudFR5cGUgIT0gbnVsbCAmJiBlbGVtZW50VHlwZS50eXBlICE9IG51bGwgPyBlbGVtZW50VHlwZS50eXBlIDogdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGdsb2JhbC4kdHlwZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpYmVyVG9TZXJpYWxpemVkRWxlbWVudChmaWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5TmFtZTogZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ0Fub255bW91cycsXG4gICAgICBpZDogZ2V0RmliZXJJRFRocm93cyhmaWJlciksXG4gICAgICBrZXk6IGZpYmVyLmtleSxcbiAgICAgIHR5cGU6IGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE93bmVyc0xpc3QoaWQpIHtcbiAgICB2YXIgZmliZXIgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgaWYgKGZpYmVyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfZGVidWdPd25lciA9IGZpYmVyLl9kZWJ1Z093bmVyO1xuICAgIHZhciBvd25lcnMgPSBbZmliZXJUb1NlcmlhbGl6ZWRFbGVtZW50KGZpYmVyKV07XG5cbiAgICBpZiAoX2RlYnVnT3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IF9kZWJ1Z093bmVyO1xuXG4gICAgICB3aGlsZSAob3duZXIgIT09IG51bGwpIHtcbiAgICAgICAgb3duZXJzLnVuc2hpZnQoZmliZXJUb1NlcmlhbGl6ZWRFbGVtZW50KG93bmVyKSk7XG4gICAgICAgIG93bmVyID0gb3duZXIuX2RlYnVnT3duZXIgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3duZXJzO1xuICB9IC8vIEZhc3QgcGF0aCBwcm9wcyBsb29rdXAgZm9yIFJlYWN0IE5hdGl2ZSBzdHlsZSBlZGl0b3IuXG4gIC8vIENvdWxkIHVzZSBpbnNwZWN0RWxlbWVudFJhdygpIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgc2hhbGxvdyByZW5kZXJpbmcgaG9va3MgY29tcG9uZW50cyxcbiAgLy8gYW5kIGNvdWxkIGFsc28gbWVzcyB3aXRoIG1lbW9pemF0aW9uLlxuXG5cbiAgZnVuY3Rpb24gZ2V0SW5zdGFuY2VBbmRTdHlsZShpZCkge1xuICAgIHZhciBpbnN0YW5jZSA9IG51bGw7XG4gICAgdmFyIHN0eWxlID0gbnVsbDtcbiAgICB2YXIgZmliZXIgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKGZpYmVyLm1lbW9pemVkUHJvcHMgIT09IG51bGwpIHtcbiAgICAgICAgc3R5bGUgPSBmaWJlci5tZW1vaXplZFByb3BzLnN0eWxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICBzdHlsZTogc3R5bGVcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFcnJvckJvdW5kYXJ5KGZpYmVyKSB7XG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TmVhcmVzdEVycm9yQm91bmRhcnlJRChmaWJlcikge1xuICAgIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoaXNFcnJvckJvdW5kYXJ5KHBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdldEZpYmVySURVbnNhZmUocGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RFbGVtZW50UmF3KGlkKSB7XG4gICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKTtcblxuICAgIGlmIChmaWJlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX2RlYnVnT3duZXIgPSBmaWJlci5fZGVidWdPd25lcixcbiAgICAgICAgX2RlYnVnU291cmNlID0gZmliZXIuX2RlYnVnU291cmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBmaWJlci5zdGF0ZU5vZGUsXG4gICAgICAgIGtleSA9IGZpYmVyLmtleSxcbiAgICAgICAgbWVtb2l6ZWRQcm9wcyA9IGZpYmVyLm1lbW9pemVkUHJvcHMsXG4gICAgICAgIG1lbW9pemVkU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSBmaWJlci5kZXBlbmRlbmNpZXMsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcik7XG4gICAgdmFyIHVzZXNIb29rcyA9ICh0YWcgPT09IEZ1bmN0aW9uQ29tcG9uZW50IHx8IHRhZyA9PT0gU2ltcGxlTWVtb0NvbXBvbmVudCB8fCB0YWcgPT09IEZvcndhcmRSZWYpICYmICghIW1lbW9pemVkU3RhdGUgfHwgISFkZXBlbmRlbmNpZXMpOyAvLyBUT0RPIFNob3cgY3VzdG9tIFVJIGZvciBDYWNoZSBsaWtlIHdlIGRvIGZvciBTdXNwZW5zZVxuICAgIC8vIEZvciBub3csIGp1c3QgaGlkZSBzdGF0ZSBkYXRhIGVudGlyZWx5IHNpbmNlIGl0J3Mgbm90IG1lYW50IHRvIGJlIGluc3BlY3RlZC5cblxuICAgIHZhciBzaG93U3RhdGUgPSAhdXNlc0hvb2tzICYmIHRhZyAhPT0gQ2FjaGVDb21wb25lbnQ7XG4gICAgdmFyIHR5cGVTeW1ib2wgPSBnZXRUeXBlU3ltYm9sKHR5cGUpO1xuICAgIHZhciBjYW5WaWV3U291cmNlID0gZmFsc2U7XG4gICAgdmFyIGNvbnRleHQgPSBudWxsO1xuXG4gICAgaWYgKHRhZyA9PT0gQ2xhc3NDb21wb25lbnQgfHwgdGFnID09PSBGdW5jdGlvbkNvbXBvbmVudCB8fCB0YWcgPT09IEluY29tcGxldGVDbGFzc0NvbXBvbmVudCB8fCB0YWcgPT09IEluZGV0ZXJtaW5hdGVDb21wb25lbnQgfHwgdGFnID09PSBNZW1vQ29tcG9uZW50IHx8IHRhZyA9PT0gRm9yd2FyZFJlZiB8fCB0YWcgPT09IFNpbXBsZU1lbW9Db21wb25lbnQpIHtcbiAgICAgIGNhblZpZXdTb3VyY2UgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGVOb2RlICYmIHN0YXRlTm9kZS5jb250ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc2hvdyBhbiBlbXB0eSBjb250ZXh0IG9iamVjdCBmb3IgY2xhc3MgY29tcG9uZW50cyB0aGF0IGRvbid0IHVzZSB0aGUgY29udGV4dCBBUEkuXG4gICAgICAgIHZhciBzaG91bGRIaWRlQ29udGV4dCA9IGVsZW1lbnRUeXBlID09PSB0eXBlc19FbGVtZW50VHlwZUNsYXNzICYmICEodHlwZS5jb250ZXh0VHlwZXMgfHwgdHlwZS5jb250ZXh0VHlwZSk7XG5cbiAgICAgICAgaWYgKCFzaG91bGRIaWRlQ29udGV4dCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzdGF0ZU5vZGUuY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZVN5bWJvbCA9PT0gQ09OVEVYVF9OVU1CRVIgfHwgdHlwZVN5bWJvbCA9PT0gQ09OVEVYVF9TWU1CT0xfU1RSSU5HKSB7XG4gICAgICAvLyAxNi4zLTE2LjUgcmVhZCBmcm9tIFwidHlwZVwiIGJlY2F1c2UgdGhlIENvbnN1bWVyIGlzIHRoZSBhY3R1YWwgY29udGV4dCBvYmplY3QuXG4gICAgICAvLyAxNi42KyBzaG91bGQgcmVhZCBmcm9tIFwidHlwZS5fY29udGV4dFwiIGJlY2F1c2UgQ29uc3VtZXIgY2FuIGJlIGRpZmZlcmVudCAoaW4gREVWKS5cbiAgICAgIC8vIE5PVEUgS2VlcCBpbiBzeW5jIHdpdGggZ2V0RGlzcGxheU5hbWVGb3JGaWJlcigpXG4gICAgICB2YXIgY29uc3VtZXJSZXNvbHZlZENvbnRleHQgPSB0eXBlLl9jb250ZXh0IHx8IHR5cGU7IC8vIEdsb2JhbCBjb250ZXh0IHZhbHVlLlxuXG4gICAgICBjb250ZXh0ID0gY29uc3VtZXJSZXNvbHZlZENvbnRleHQuX2N1cnJlbnRWYWx1ZSB8fCBudWxsOyAvLyBMb29rIGZvciBvdmVycmlkZGVuIHZhbHVlLlxuXG4gICAgICB2YXIgX2N1cnJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgICAgIHdoaWxlIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudFR5cGUgPSBfY3VycmVudC50eXBlO1xuICAgICAgICB2YXIgY3VycmVudFR5cGVTeW1ib2wgPSBnZXRUeXBlU3ltYm9sKGN1cnJlbnRUeXBlKTtcblxuICAgICAgICBpZiAoY3VycmVudFR5cGVTeW1ib2wgPT09IFBST1ZJREVSX05VTUJFUiB8fCBjdXJyZW50VHlwZVN5bWJvbCA9PT0gUFJPVklERVJfU1lNQk9MX1NUUklORykge1xuICAgICAgICAgIC8vIDE2LjMuMCBleHBvc2VkIHRoZSBjb250ZXh0IG9iamVjdCBhcyBcImNvbnRleHRcIlxuICAgICAgICAgIC8vIFBSICMxMjUwMSBjaGFuZ2VkIGl0IHRvIFwiX2NvbnRleHRcIiBmb3IgMTYuMy4xK1xuICAgICAgICAgIC8vIE5PVEUgS2VlcCBpbiBzeW5jIHdpdGggZ2V0RGlzcGxheU5hbWVGb3JGaWJlcigpXG4gICAgICAgICAgdmFyIHByb3ZpZGVyUmVzb2x2ZWRDb250ZXh0ID0gY3VycmVudFR5cGUuX2NvbnRleHQgfHwgY3VycmVudFR5cGUuY29udGV4dDtcblxuICAgICAgICAgIGlmIChwcm92aWRlclJlc29sdmVkQ29udGV4dCA9PT0gY29uc3VtZXJSZXNvbHZlZENvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBfY3VycmVudC5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2N1cnJlbnQgPSBfY3VycmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0xlZ2FjeUNvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBoYXNMZWdhY3lDb250ZXh0ID0gISF0eXBlLmNvbnRleHRUeXBlczsgLy8gVG8gc2ltcGxpZnkgaHlkcmF0aW9uIGFuZCBkaXNwbGF5IGxvZ2ljIGZvciBjb250ZXh0LCB3cmFwIGluIGEgdmFsdWUgb2JqZWN0LlxuICAgICAgLy8gT3RoZXJ3aXNlIHNpbXBsZSB2YWx1ZXMgKGUuZy4gc3RyaW5ncywgYm9vbGVhbnMpIGJlY29tZSBoYXJkZXIgdG8gaGFuZGxlLlxuXG4gICAgICBjb250ZXh0ID0ge1xuICAgICAgICB2YWx1ZTogY29udGV4dFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgb3duZXJzID0gbnVsbDtcblxuICAgIGlmIChfZGVidWdPd25lcikge1xuICAgICAgb3duZXJzID0gW107XG4gICAgICB2YXIgb3duZXIgPSBfZGVidWdPd25lcjtcblxuICAgICAgd2hpbGUgKG93bmVyICE9PSBudWxsKSB7XG4gICAgICAgIG93bmVycy5wdXNoKGZpYmVyVG9TZXJpYWxpemVkRWxlbWVudChvd25lcikpO1xuICAgICAgICBvd25lciA9IG93bmVyLl9kZWJ1Z093bmVyIHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgbWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICB2YXIgaG9va3MgPSBudWxsO1xuXG4gICAgaWYgKHVzZXNIb29rcykge1xuICAgICAgdmFyIG9yaWdpbmFsQ29uc29sZU1ldGhvZHMgPSB7fTsgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSBhbGwgY29uc29sZSBsb2dnaW5nIGJlZm9yZSByZS1ydW5uaW5nIHRoZSBob29rLlxuXG4gICAgICBmb3IgKHZhciBtZXRob2QgaW4gY29uc29sZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbbWV0aG9kXSA9IGNvbnNvbGVbbWV0aG9kXTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgICAgICAgICBjb25zb2xlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhvb2tzID0gKDAscmVhY3RfZGVidWdfdG9vbHMuaW5zcGVjdEhvb2tzT2ZGaWJlcikoZmliZXIsIHJlbmRlcmVyLmN1cnJlbnREaXNwYXRjaGVyUmVmLCB0cnVlIC8vIEluY2x1ZGUgc291cmNlIGxvY2F0aW9uIGluZm8gZm9yIGhvb2tzXG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS5cbiAgICAgICAgZm9yICh2YXIgX21ldGhvZCBpbiBvcmlnaW5hbENvbnNvbGVNZXRob2RzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgICAgICAgY29uc29sZVtfbWV0aG9kXSA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbX21ldGhvZF07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcm9vdFR5cGUgPSBudWxsO1xuICAgIHZhciBjdXJyZW50ID0gZmliZXI7XG5cbiAgICB3aGlsZSAoY3VycmVudC5yZXR1cm4gIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZmliZXJSb290ID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoZmliZXJSb290ICE9IG51bGwgJiYgZmliZXJSb290Ll9kZWJ1Z1Jvb3RUeXBlICE9PSBudWxsKSB7XG4gICAgICByb290VHlwZSA9IGZpYmVyUm9vdC5fZGVidWdSb290VHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3JzID0gZmliZXJJRFRvRXJyb3JzTWFwLmdldChpZCkgfHwgbmV3IE1hcCgpO1xuICAgIHZhciB3YXJuaW5ncyA9IGZpYmVySURUb1dhcm5pbmdzTWFwLmdldChpZCkgfHwgbmV3IE1hcCgpO1xuICAgIHZhciBpc0Vycm9yZWQgPSBmYWxzZTtcbiAgICB2YXIgdGFyZ2V0RXJyb3JCb3VuZGFyeUlEO1xuXG4gICAgaWYgKGlzRXJyb3JCb3VuZGFyeShmaWJlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGluc3BlY3RlZCBlbGVtZW50IGlzIGFuIGVycm9yIGJvdW5kYXJ5LFxuICAgICAgLy8gZWl0aGVyIHRoYXQgd2Ugd2FudCB0byB1c2UgaXQgdG8gdG9nZ2xlIG9mZiBlcnJvciBzdGF0ZVxuICAgICAgLy8gb3IgdGhhdCB3ZSBhbGxvdyB0byBmb3JjZSBlcnJvciBzdGF0ZSBvbiBpdCBpZiBpdCdzIHdpdGhpbiBhbm90aGVyXG4gICAgICAvLyBlcnJvciBib3VuZGFyeVxuICAgICAgLy9cbiAgICAgIC8vIFRPRE86IFRoaXMgZmxhZyBpcyBhIGxlYWtlZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIE9uY2Ugd2Ugc3RhcnRcbiAgICAgIC8vIHJlbGVhc2luZyBEZXZUb29scyBpbiBsb2Nrc3RlcCB3aXRoIFJlYWN0LCB3ZSBzaG91bGQgaW1wb3J0IGEgZnVuY3Rpb25cbiAgICAgIC8vIGZyb20gdGhlIHJlY29uY2lsZXIgaW5zdGVhZC5cbiAgICAgIHZhciBEaWRDYXB0dXJlID0gMTI4O1xuICAgICAgaXNFcnJvcmVkID0gKGZpYmVyLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IDAgfHwgZm9yY2VFcnJvckZvckZpYmVySURzLmdldChpZCkgPT09IHRydWU7XG4gICAgICB0YXJnZXRFcnJvckJvdW5kYXJ5SUQgPSBpc0Vycm9yZWQgPyBpZCA6IGdldE5lYXJlc3RFcnJvckJvdW5kYXJ5SUQoZmliZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRFcnJvckJvdW5kYXJ5SUQgPSBnZXROZWFyZXN0RXJyb3JCb3VuZGFyeUlEKGZpYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgcGx1Z2lucyA9IHtcbiAgICAgIHN0eWxleDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAoZW5hYmxlU3R5bGVYRmVhdHVyZXMpIHtcbiAgICAgIGlmIChtZW1vaXplZFByb3BzICE9IG51bGwgJiYgbWVtb2l6ZWRQcm9wcy5oYXNPd25Qcm9wZXJ0eSgneHN0eWxlJykpIHtcbiAgICAgICAgcGx1Z2lucy5zdHlsZXggPSBnZXRTdHlsZVhEYXRhKG1lbW9pemVkUHJvcHMueHN0eWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGlkLFxuICAgICAgLy8gRG9lcyB0aGUgY3VycmVudCByZW5kZXJlciBzdXBwb3J0IGVkaXRhYmxlIGhvb2tzIGFuZCBmdW5jdGlvbiBwcm9wcz9cbiAgICAgIGNhbkVkaXRIb29rczogdHlwZW9mIG92ZXJyaWRlSG9va1N0YXRlID09PSAnZnVuY3Rpb24nLFxuICAgICAgY2FuRWRpdEZ1bmN0aW9uUHJvcHM6IHR5cGVvZiBvdmVycmlkZVByb3BzID09PSAnZnVuY3Rpb24nLFxuICAgICAgLy8gRG9lcyB0aGUgY3VycmVudCByZW5kZXJlciBzdXBwb3J0IGFkdmFuY2VkIGVkaXRpbmcgaW50ZXJmYWNlP1xuICAgICAgY2FuRWRpdEhvb2tzQW5kRGVsZXRlUGF0aHM6IHR5cGVvZiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPT09ICdmdW5jdGlvbicsXG4gICAgICBjYW5FZGl0SG9va3NBbmRSZW5hbWVQYXRoczogdHlwZW9mIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGNhbkVkaXRGdW5jdGlvblByb3BzRGVsZXRlUGF0aHM6IHR5cGVvZiBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGNhbkVkaXRGdW5jdGlvblByb3BzUmVuYW1lUGF0aHM6IHR5cGVvZiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGNhblRvZ2dsZUVycm9yOiBzdXBwb3J0c1RvZ2dsaW5nRXJyb3IgJiYgdGFyZ2V0RXJyb3JCb3VuZGFyeUlEICE9IG51bGwsXG4gICAgICAvLyBJcyB0aGlzIGVycm9yIGJvdW5kYXJ5IGluIGVycm9yIHN0YXRlLlxuICAgICAgaXNFcnJvcmVkOiBpc0Vycm9yZWQsXG4gICAgICB0YXJnZXRFcnJvckJvdW5kYXJ5SUQ6IHRhcmdldEVycm9yQm91bmRhcnlJRCxcbiAgICAgIGNhblRvZ2dsZVN1c3BlbnNlOiBzdXBwb3J0c1RvZ2dsaW5nU3VzcGVuc2UgJiYgKCAvLyBJZiBpdCdzIHNob3dpbmcgdGhlIHJlYWwgY29udGVudCwgd2UgY2FuIGFsd2F5cyBmbGlwIGZhbGxiYWNrLlxuICAgICAgIWlzVGltZWRPdXRTdXNwZW5zZSB8fCAvLyBJZiBpdCdzIHNob3dpbmcgZmFsbGJhY2sgYmVjYXVzZSB3ZSBwcmV2aW91c2x5IGZvcmNlZCBpdCB0byxcbiAgICAgIC8vIGFsbG93IHRvZ2dsaW5nIGl0IGJhY2sgdG8gcmVtb3ZlIHRoZSBmYWxsYmFjayBvdmVycmlkZS5cbiAgICAgIGZvcmNlRmFsbGJhY2tGb3JTdXNwZW5zZUlEcy5oYXMoaWQpKSxcbiAgICAgIC8vIENhbiB2aWV3IGNvbXBvbmVudCBzb3VyY2UgbG9jYXRpb24uXG4gICAgICBjYW5WaWV3U291cmNlOiBjYW5WaWV3U291cmNlLFxuICAgICAgLy8gRG9lcyB0aGUgY29tcG9uZW50IGhhdmUgbGVnYWN5IGNvbnRleHQgYXR0YWNoZWQgdG8gaXQuXG4gICAgICBoYXNMZWdhY3lDb250ZXh0OiBoYXNMZWdhY3lDb250ZXh0LFxuICAgICAga2V5OiBrZXkgIT0gbnVsbCA/IGtleSA6IG51bGwsXG4gICAgICBkaXNwbGF5TmFtZTogZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlciksXG4gICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgIC8vIEluc3BlY3RhYmxlIHByb3BlcnRpZXMuXG4gICAgICAvLyBUT0RPIFJldmlldyBzYW5pdGl6YXRpb24gYXBwcm9hY2ggZm9yIHRoZSBiZWxvdyBpbnNwZWN0YWJsZSB2YWx1ZXMuXG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgaG9va3M6IGhvb2tzLFxuICAgICAgcHJvcHM6IG1lbW9pemVkUHJvcHMsXG4gICAgICBzdGF0ZTogc2hvd1N0YXRlID8gbWVtb2l6ZWRTdGF0ZSA6IG51bGwsXG4gICAgICBlcnJvcnM6IEFycmF5LmZyb20oZXJyb3JzLmVudHJpZXMoKSksXG4gICAgICB3YXJuaW5nczogQXJyYXkuZnJvbSh3YXJuaW5ncy5lbnRyaWVzKCkpLFxuICAgICAgLy8gTGlzdCBvZiBvd25lcnNcbiAgICAgIG93bmVyczogb3duZXJzLFxuICAgICAgLy8gTG9jYXRpb24gb2YgY29tcG9uZW50IGluIHNvdXJjZSBjb2RlLlxuICAgICAgc291cmNlOiBfZGVidWdTb3VyY2UgfHwgbnVsbCxcbiAgICAgIHJvb3RUeXBlOiByb290VHlwZSxcbiAgICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IHJlbmRlcmVyLnJlbmRlcmVyUGFja2FnZU5hbWUsXG4gICAgICByZW5kZXJlclZlcnNpb246IHJlbmRlcmVyLnZlcnNpb24sXG4gICAgICBwbHVnaW5zOiBwbHVnaW5zXG4gICAgfTtcbiAgfVxuXG4gIHZhciBtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50ID0gbnVsbDtcbiAgdmFyIGhhc0VsZW1lbnRVcGRhdGVkU2luY2VMYXN0SW5zcGVjdGVkID0gZmFsc2U7XG4gIHZhciBjdXJyZW50bHlJbnNwZWN0ZWRQYXRocyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGlzTW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudChpZCkge1xuICAgIHJldHVybiBtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50ICE9PSBudWxsICYmIG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQuaWQgPT09IGlkO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50Q3VycmVudChpZCkge1xuICAgIHJldHVybiBpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQoaWQpICYmICFoYXNFbGVtZW50VXBkYXRlZFNpbmNlTGFzdEluc3BlY3RlZDtcbiAgfSAvLyBUcmFjayB0aGUgaW50ZXJzZWN0aW9uIG9mIGN1cnJlbnRseSBpbnNwZWN0ZWQgcGF0aHMsXG4gIC8vIHNvIHRoYXQgd2UgY2FuIHNlbmQgdGhlaXIgZGF0YSBhbG9uZyBpZiB0aGUgZWxlbWVudCBpcyByZS1yZW5kZXJlZC5cblxuXG4gIGZ1bmN0aW9uIG1lcmdlSW5zcGVjdGVkUGF0aHMocGF0aCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5SW5zcGVjdGVkUGF0aHM7XG4gICAgcGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICghY3VycmVudFtrZXldKSB7XG4gICAgICAgIGN1cnJlbnRba2V5XSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSXNQYXRoQWxsb3dlZChrZXksIHNlY29uZGFyeUNhdGVnb3J5KSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBoZWxwcyBwcmV2ZW50IHByZXZpb3VzbHktaW5zcGVjdGVkIHBhdGhzIGZyb20gYmVpbmcgZGVoeWRyYXRlZCBpbiB1cGRhdGVzLlxuICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIGEgYmFkIHVzZXIgZXhwZXJpZW5jZSB3aGVyZSBleHBhbmRlZCB0b2dnbGVzIGNvbGxhcHNlIG9uIHVwZGF0ZS5cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNQYXRoQWxsb3dlZChwYXRoKSB7XG4gICAgICBzd2l0Y2ggKHNlY29uZGFyeUNhdGVnb3J5KSB7XG4gICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICBpZiAocGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIC8vIE5ldmVyIGRlaHlkcmF0ZSB0aGUgXCJob29rc1wiIG9iamVjdCBhdCB0aGUgdG9wIGxldmVscy5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMl0gPT09ICdob29rU291cmNlJyAmJiBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICdmaWxlTmFtZScpIHtcbiAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoZSBmdWxsIGZpbGUgbmFtZSAoVVJMKSBmb3IgaG9vayBzb3VyY2VzXG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGhhcyBlbmFibGVkIHRoZSBuYW1lZCBob29rcyBmZWF0dXJlLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBmcm9udGVuZCBtYXkgZW5kIHVwIHdpdGggYSBwYXJ0aWFsIFVSTCB3aGljaCBpdCBjYW4ndCBsb2FkLlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gJ3N1Ykhvb2tzJyB8fCBwYXRoW3BhdGgubGVuZ3RoIC0gMl0gPT09ICdzdWJIb29rcycpIHtcbiAgICAgICAgICAgIC8vIERlaHlkcmF0aW5nIHRoZSAnc3ViSG9va3MnIHByb3BlcnR5IG1ha2VzIHRoZSBIb29rc1RyZWUgVUkgYSBsb3QgbW9yZSBjb21wbGljYXRlZCxcbiAgICAgICAgICAgIC8vIHNvIGl0J3MgZWFzaWVzdCBmb3Igbm93IGlmIHdlIGp1c3QgZG9uJ3QgYnJlYWsgb24gdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAgIC8vIFdlIGNhbiBhbHdheXMgZGVoeWRyYXRlIGEgbGV2ZWwgZGVlcGVyIChpbiB0aGUgdmFsdWUgb2JqZWN0KS5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50ID0ga2V5ID09PSBudWxsID8gY3VycmVudGx5SW5zcGVjdGVkUGF0aHMgOiBjdXJyZW50bHlJbnNwZWN0ZWRQYXRoc1trZXldO1xuXG4gICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aFtpXV07XG5cbiAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTZWxlY3RlZEVsZW1lbnQoaW5zcGVjdGVkRWxlbWVudCkge1xuICAgIHZhciBob29rcyA9IGluc3BlY3RlZEVsZW1lbnQuaG9va3MsXG4gICAgICAgIGlkID0gaW5zcGVjdGVkRWxlbWVudC5pZCxcbiAgICAgICAgcHJvcHMgPSBpbnNwZWN0ZWRFbGVtZW50LnByb3BzO1xuICAgIHZhciBmaWJlciA9IGlkVG9BcmJpdHJhcnlGaWJlck1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGZpYmVyID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCBmaW5kIEZpYmVyIHdpdGggaWQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFR5cGUgPSBmaWJlci5lbGVtZW50VHlwZSxcbiAgICAgICAgc3RhdGVOb2RlID0gZmliZXIuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgICAgZ2xvYmFsLiRyID0gc3RhdGVOb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgZ2xvYmFsLiRyID0ge1xuICAgICAgICAgIGhvb2tzOiBob29rcyxcbiAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBnbG9iYWwuJHIgPSB7XG4gICAgICAgICAgaG9va3M6IGhvb2tzLFxuICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICB0eXBlOiB0eXBlLnJlbmRlclxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICBnbG9iYWwuJHIgPSB7XG4gICAgICAgICAgaG9va3M6IGhvb2tzLFxuICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSAhPSBudWxsICYmIGVsZW1lbnRUeXBlLnR5cGUgIT0gbnVsbCA/IGVsZW1lbnRUeXBlLnR5cGUgOiB0eXBlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBnbG9iYWwuJHIgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9yZUFzR2xvYmFsKGlkLCBwYXRoLCBjb3VudCkge1xuICAgIGlmIChpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQoaWQpKSB7XG4gICAgICB2YXIgdmFsdWUgPSB1dGlsc19nZXRJbk9iamVjdChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50LCBwYXRoKTtcbiAgICAgIHZhciBrZXkgPSBcIiRyZWFjdFRlbXBcIi5jb25jYXQoY291bnQpO1xuICAgICAgd2luZG93W2tleV0gPSB2YWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aChpZCwgcGF0aCkge1xuICAgIGlmIChpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQoaWQpKSB7XG4gICAgICB2YXIgdmFsdWVUb0NvcHkgPSB1dGlsc19nZXRJbk9iamVjdChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50LCBwYXRoKTtcbiAgICAgIHJldHVybiBzZXJpYWxpemVUb1N0cmluZyh2YWx1ZVRvQ29weSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEVsZW1lbnQocmVxdWVzdElELCBpZCwgcGF0aCwgZm9yY2VGdWxsRGF0YSkge1xuICAgIGlmIChwYXRoICE9PSBudWxsKSB7XG4gICAgICBtZXJnZUluc3BlY3RlZFBhdGhzKHBhdGgpO1xuICAgIH1cblxuICAgIGlmIChpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQoaWQpICYmICFmb3JjZUZ1bGxEYXRhKSB7XG4gICAgICBpZiAoIWhhc0VsZW1lbnRVcGRhdGVkU2luY2VMYXN0SW5zcGVjdGVkKSB7XG4gICAgICAgIGlmIChwYXRoICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHNlY29uZGFyeUNhdGVnb3J5ID0gbnVsbDtcblxuICAgICAgICAgIGlmIChwYXRoWzBdID09PSAnaG9va3MnKSB7XG4gICAgICAgICAgICBzZWNvbmRhcnlDYXRlZ29yeSA9ICdob29rcyc7XG4gICAgICAgICAgfSAvLyBJZiB0aGlzIGVsZW1lbnQgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgc2luY2UgaXQgd2FzIGxhc3QgaW5zcGVjdGVkLFxuICAgICAgICAgIC8vIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgc3Vic2V0IG9mIGRhdGEgaW4gdGhlIG5ld2x5LWluc3BlY3RlZCBwYXRoLlxuXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgcmVzcG9uc2VJRDogcmVxdWVzdElELFxuICAgICAgICAgICAgdHlwZTogJ2h5ZHJhdGVkLXBhdGgnLFxuICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiBjbGVhbkZvckJyaWRnZSh1dGlsc19nZXRJbk9iamVjdChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50LCBwYXRoKSwgY3JlYXRlSXNQYXRoQWxsb3dlZChudWxsLCBzZWNvbmRhcnlDYXRlZ29yeSksIHBhdGgpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGVsZW1lbnQgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgc2luY2UgaXQgd2FzIGxhc3QgaW5zcGVjdGVkLCB3ZSBkb24ndCBuZWVkIHRvIHJldHVybiBpdC5cbiAgICAgICAgICAvLyBJbnN0ZWFkIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgSUQgdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMgbm90IGNoYW5nZWQuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHJlc3BvbnNlSUQ6IHJlcXVlc3RJRCxcbiAgICAgICAgICAgIHR5cGU6ICduby1jaGFuZ2UnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50bHlJbnNwZWN0ZWRQYXRocyA9IHt9O1xuICAgIH1cblxuICAgIGhhc0VsZW1lbnRVcGRhdGVkU2luY2VMYXN0SW5zcGVjdGVkID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgbW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCA9IGluc3BlY3RFbGVtZW50UmF3KGlkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gdGhlIGVycm9yIG5hbWUgaXMgc3luY2VkIHdpdGggUmVhY3REZWJ1Z0hvb2tzXG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ1JlYWN0RGVidWdUb29sc1JlbmRlckVycm9yJykge1xuICAgICAgICB2YXIgbWVzc2FnZSA9ICdFcnJvciByZW5kZXJpbmcgaW5zcGVjdGVkIGVsZW1lbnQuJztcbiAgICAgICAgdmFyIHN0YWNrOyAvLyBMb2cgZXJyb3IgJiBjYXVzZSBmb3IgdXNlciB0byBkZWJ1Z1xuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSArICdcXG5cXG4nLCBlcnJvcik7XG5cbiAgICAgICAgaWYgKGVycm9yLmNhdXNlICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2ZpYmVyNCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoQnlJZChpZCk7XG5cbiAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9maWJlcjQgIT0gbnVsbCA/IGdldERpc3BsYXlOYW1lRm9yRmliZXIoX2ZpYmVyNCkgOiBudWxsO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlYWN0IERldlRvb2xzIGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byBpbnNwZWN0IGhvb2tzLiAnICsgJ1RoaXMgaXMgbW9zdCBsaWtlbHkgY2F1c2VkIGJ5IGFuIGVycm9yIGluIGN1cnJlbnQgaW5zcGVjdGVkIGNvbXBvbmVudCcgKyAoY29tcG9uZW50TmFtZSAhPSBudWxsID8gXCI6IFxcXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJcXFwiLlwiKSA6ICcuJykgKyAnXFxuVGhlIGVycm9yIHRocm93biBpbiB0aGUgY29tcG9uZW50IGlzOiBcXG5cXG4nLCBlcnJvci5jYXVzZSk7XG5cbiAgICAgICAgICBpZiAoZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2UgfHwgbWVzc2FnZTtcbiAgICAgICAgICAgIHN0YWNrID0gZXJyb3IuY2F1c2Uuc3RhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yVHlwZTogJ3VzZXInLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICBzdGFjazogc3RhY2tcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gdGhlIGVycm9yIG5hbWUgaXMgc3luY2VkIHdpdGggUmVhY3REZWJ1Z0hvb2tzXG5cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdSZWFjdERlYnVnVG9vbHNVbnN1cHBvcnRlZEhvb2tFcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yVHlwZTogJ3Vua25vd24taG9vaycsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHJlc3BvbnNlSUQ6IHJlcXVlc3RJRCxcbiAgICAgICAgICBtZXNzYWdlOiAnVW5zdXBwb3J0ZWQgaG9vayBpbiB0aGUgcmVhY3QtZGVidWctdG9vbHMgcGFja2FnZTogJyArIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gTG9nIFVuY2F1Z2h0IEVycm9yXG5cblxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zcGVjdGluZyBlbGVtZW50LlxcblxcbicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIGVycm9yVHlwZTogJ3VuY2F1Z2h0JyxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvci5zdGFja1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICAgIHR5cGU6ICdub3QtZm91bmQnXG4gICAgICB9O1xuICAgIH0gLy8gQW55IHRpbWUgYW4gaW5zcGVjdGVkIGVsZW1lbnQgaGFzIGFuIHVwZGF0ZSxcbiAgICAvLyB3ZSBzaG91bGQgdXBkYXRlIHRoZSBzZWxlY3RlZCAkciB2YWx1ZSBhcyB3ZWwuXG4gICAgLy8gRG8gdGhpcyBiZWZvcmUgZGVoeWRyYXRpb24gKGNsZWFuRm9yQnJpZGdlKS5cblxuXG4gICAgdXBkYXRlU2VsZWN0ZWRFbGVtZW50KG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQpOyAvLyBDbG9uZSBiZWZvcmUgY2xlYW5pbmcgc28gdGhhdCB3ZSBwcmVzZXJ2ZSB0aGUgZnVsbCBkYXRhLlxuICAgIC8vIFRoaXMgd2lsbCBlbmFibGUgdXMgdG8gc2VuZCBwYXRjaGVzIHdpdGhvdXQgcmUtaW5zcGVjdGluZyBpZiBoeWRyYXRlZCBwYXRocyBhcmUgcmVxdWVzdGVkLlxuICAgIC8vIChSZWR1Y2luZyBob3cgb2Z0ZW4gd2Ugc2hhbGxvdy1yZW5kZXIgaXMgYSBiZXR0ZXIgRFggZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMgdGhhdCB1c2UgaG9va3MuKVxuXG4gICAgdmFyIGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50ID0gcmVuZGVyZXJfb2JqZWN0U3ByZWFkKHt9LCBtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgY2xlYW5lZEluc3BlY3RlZEVsZW1lbnQuY29udGV4dCA9IGNsZWFuRm9yQnJpZGdlKGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50LmNvbnRleHQsIGNyZWF0ZUlzUGF0aEFsbG93ZWQoJ2NvbnRleHQnLCBudWxsKSk7IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICBjbGVhbmVkSW5zcGVjdGVkRWxlbWVudC5ob29rcyA9IGNsZWFuRm9yQnJpZGdlKGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50Lmhvb2tzLCBjcmVhdGVJc1BhdGhBbGxvd2VkKCdob29rcycsICdob29rcycpKTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgIGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50LnByb3BzID0gY2xlYW5Gb3JCcmlkZ2UoY2xlYW5lZEluc3BlY3RlZEVsZW1lbnQucHJvcHMsIGNyZWF0ZUlzUGF0aEFsbG93ZWQoJ3Byb3BzJywgbnVsbCkpOyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgY2xlYW5lZEluc3BlY3RlZEVsZW1lbnQuc3RhdGUgPSBjbGVhbkZvckJyaWRnZShjbGVhbmVkSW5zcGVjdGVkRWxlbWVudC5zdGF0ZSwgY3JlYXRlSXNQYXRoQWxsb3dlZCgnc3RhdGUnLCBudWxsKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHJlc3BvbnNlSUQ6IHJlcXVlc3RJRCxcbiAgICAgIHR5cGU6ICdmdWxsLWRhdGEnLFxuICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgIHZhbHVlOiBjbGVhbmVkSW5zcGVjdGVkRWxlbWVudFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBsb2dFbGVtZW50VG9Db25zb2xlKGlkKSB7XG4gICAgdmFyIHJlc3VsdCA9IGlzTW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudEN1cnJlbnQoaWQpID8gbW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCA6IGluc3BlY3RFbGVtZW50UmF3KGlkKTtcblxuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCBmaW5kIEZpYmVyIHdpdGggaWQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3VwcG9ydHNHcm91cCA9IHR5cGVvZiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKHN1cHBvcnRzR3JvdXApIHtcbiAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCJbQ2xpY2sgdG8gZXhwYW5kXSAlYzxcIi5jb25jYXQocmVzdWx0LmRpc3BsYXlOYW1lIHx8ICdDb21wb25lbnQnLCBcIiAvPlwiKSwgLy8gLS1kb20tdGFnLW5hbWUtY29sb3IgaXMgdGhlIENTUyB2YXJpYWJsZSBDaHJvbWUgc3R5bGVzIEhUTUwgZWxlbWVudHMgd2l0aCBpbiB0aGUgY29uc29sZS5cbiAgICAgICdjb2xvcjogdmFyKC0tZG9tLXRhZy1uYW1lLWNvbG9yKTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsnKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnByb3BzICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnUHJvcHM6JywgcmVzdWx0LnByb3BzKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnN0YXRlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnU3RhdGU6JywgcmVzdWx0LnN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lmhvb2tzICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnSG9va3M6JywgcmVzdWx0Lmhvb2tzKTtcbiAgICB9XG5cbiAgICB2YXIgbmF0aXZlTm9kZXMgPSBmaW5kTmF0aXZlTm9kZXNGb3JGaWJlcklEKGlkKTtcblxuICAgIGlmIChuYXRpdmVOb2RlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ05vZGVzOicsIG5hdGl2ZU5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ0xvY2F0aW9uOicsIHJlc3VsdC5zb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuY2hyb21lIHx8IC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgY29uc29sZS5sb2coJ1JpZ2h0LWNsaWNrIGFueSB2YWx1ZSB0byBzYXZlIGl0IGFzIGEgZ2xvYmFsIHZhcmlhYmxlIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzR3JvdXApIHtcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVQYXRoKHR5cGUsIGlkLCBob29rSUQsIHBhdGgpIHtcbiAgICB2YXIgZmliZXIgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgICAvLyBUbyBzaW1wbGlmeSBoeWRyYXRpb24gYW5kIGRpc3BsYXkgb2YgcHJpbWl0aXZlIGNvbnRleHQgdmFsdWVzIChlLmcuIG51bWJlciwgc3RyaW5nKVxuICAgICAgICAgIC8vIHRoZSBpbnNwZWN0RWxlbWVudCgpIG1ldGhvZCB3cmFwcyBjb250ZXh0IGluIGEge3ZhbHVlOiAuLi59IG9iamVjdC5cbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcGF0aCAodGhlIFwidmFsdWVcIikgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7Ly8gU2ltcGxlIGNvbnRleHQgdmFsdWUgKG5vb3ApXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUGF0aEluT2JqZWN0KGluc3RhbmNlLmNvbnRleHQsIHBhdGgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNvbXBvbmVudHMgdXNpbmcgbGVnYWN5IGNvbnRleHQgYXJlIG5vdCBlZGl0YWJsZVxuICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gaW5zdGFuY2Ugb24gd2hpY2ggdG8gY3JlYXRlIGEgY2xvbmVkLCBtdXRhdGVkIGNvbnRleHQuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICBpZiAodHlwZW9mIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoKGZpYmVyLCBob29rSUQsIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Byb3BzJzpcbiAgICAgICAgICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgoZmliZXIsIHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShpbnN0YW5jZS5wcm9wcywgcGF0aCk7XG4gICAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0YXRlJzpcbiAgICAgICAgICBkZWxldGVQYXRoSW5PYmplY3QoaW5zdGFuY2Uuc3RhdGUsIHBhdGgpO1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuYW1lUGF0aCh0eXBlLCBpZCwgaG9va0lELCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKTtcblxuICAgIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgLy8gVG8gc2ltcGxpZnkgaHlkcmF0aW9uIGFuZCBkaXNwbGF5IG9mIHByaW1pdGl2ZSBjb250ZXh0IHZhbHVlcyAoZS5nLiBudW1iZXIsIHN0cmluZylcbiAgICAgICAgICAvLyB0aGUgaW5zcGVjdEVsZW1lbnQoKSBtZXRob2Qgd3JhcHMgY29udGV4dCBpbiBhIHt2YWx1ZTogLi4ufSBvYmplY3QuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGggKHRoZSBcInZhbHVlXCIpIGJlZm9yZSBjb250aW51aW5nLlxuICAgICAgICAgIG9sZFBhdGggPSBvbGRQYXRoLnNsaWNlKDEpO1xuICAgICAgICAgIG5ld1BhdGggPSBuZXdQYXRoLnNsaWNlKDEpO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGlmIChvbGRQYXRoLmxlbmd0aCA9PT0gMCkgey8vIFNpbXBsZSBjb250ZXh0IHZhbHVlIChub29wKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbmFtZVBhdGhJbk9iamVjdChpbnN0YW5jZS5jb250ZXh0LCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgICAgICAvLyBGdW5jdGlvbiBjb21wb25lbnRzIHVzaW5nIGxlZ2FjeSBjb250ZXh0IGFyZSBub3QgZWRpdGFibGVcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGluc3RhbmNlIG9uIHdoaWNoIHRvIGNyZWF0ZSBhIGNsb25lZCwgbXV0YXRlZCBjb250ZXh0LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdob29rcyc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aChmaWJlciwgaG9va0lELCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwcm9wcyc6XG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoaW5zdGFuY2UucHJvcHMsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzdGF0ZSc6XG4gICAgICAgICAgcmVuYW1lUGF0aEluT2JqZWN0KGluc3RhbmNlLnN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG92ZXJyaWRlVmFsdWVBdFBhdGgodHlwZSwgaWQsIGhvb2tJRCwgcGF0aCwgdmFsdWUpIHtcbiAgICB2YXIgZmliZXIgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgICAvLyBUbyBzaW1wbGlmeSBoeWRyYXRpb24gYW5kIGRpc3BsYXkgb2YgcHJpbWl0aXZlIGNvbnRleHQgdmFsdWVzIChlLmcuIG51bWJlciwgc3RyaW5nKVxuICAgICAgICAgIC8vIHRoZSBpbnNwZWN0RWxlbWVudCgpIG1ldGhvZCB3cmFwcyBjb250ZXh0IGluIGEge3ZhbHVlOiAuLi59IG9iamVjdC5cbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcGF0aCAodGhlIFwidmFsdWVcIikgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIGNvbnRleHQgdmFsdWVcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb250ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbHNfc2V0SW5PYmplY3QoaW5zdGFuY2UuY29udGV4dCwgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNvbXBvbmVudHMgdXNpbmcgbGVnYWN5IGNvbnRleHQgYXJlIG5vdCBlZGl0YWJsZVxuICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gaW5zdGFuY2Ugb24gd2hpY2ggdG8gY3JlYXRlIGEgY2xvbmVkLCBtdXRhdGVkIGNvbnRleHQuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICBpZiAodHlwZW9mIG92ZXJyaWRlSG9va1N0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvdmVycmlkZUhvb2tTdGF0ZShmaWJlciwgaG9va0lELCBwYXRoLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncHJvcHMnOlxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChpbnN0YW5jZS5wcm9wcywgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVQcm9wcyhmaWJlciwgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3RhdGUnOlxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICB1dGlsc19zZXRJbk9iamVjdChpbnN0YW5jZS5zdGF0ZSwgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhID0gbnVsbDtcbiAgdmFyIGRpc3BsYXlOYW1lc0J5Um9vdElEID0gbnVsbDtcbiAgdmFyIGlkVG9Db250ZXh0c01hcCA9IG51bGw7XG4gIHZhciBpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnNNYXAgPSBudWxsO1xuICB2YXIgaW5pdGlhbElEVG9Sb290TWFwID0gbnVsbDtcbiAgdmFyIGlzUHJvZmlsaW5nID0gZmFsc2U7XG4gIHZhciBwcm9maWxpbmdTdGFydFRpbWUgPSAwO1xuICB2YXIgcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zID0gZmFsc2U7XG4gIHZhciByb290VG9Db21taXRQcm9maWxpbmdNZXRhZGF0YU1hcCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gZ2V0UHJvZmlsaW5nRGF0YSgpIHtcbiAgICB2YXIgZGF0YUZvclJvb3RzID0gW107XG5cbiAgICBpZiAocm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAgPT09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdnZXRQcm9maWxpbmdEYXRhKCkgY2FsbGVkIGJlZm9yZSBhbnkgcHJvZmlsaW5nIGRhdGEgd2FzIHJlY29yZGVkJyk7XG4gICAgfVxuXG4gICAgcm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0UHJvZmlsaW5nTWV0YWRhdGEsIHJvb3RJRCkge1xuICAgICAgdmFyIGNvbW1pdERhdGEgPSBbXTtcbiAgICAgIHZhciBpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnMgPSBbXTtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lc0J5Um9vdElEICE9PSBudWxsICYmIGRpc3BsYXlOYW1lc0J5Um9vdElELmdldChyb290SUQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKGluaXRpYWxUcmVlQmFzZUR1cmF0aW9uc01hcCAhPSBudWxsKSB7XG4gICAgICAgIGluaXRpYWxUcmVlQmFzZUR1cmF0aW9uc01hcC5mb3JFYWNoKGZ1bmN0aW9uICh0cmVlQmFzZUR1cmF0aW9uLCBpZCkge1xuICAgICAgICAgIGlmIChpbml0aWFsSURUb1Jvb3RNYXAgIT0gbnVsbCAmJiBpbml0aWFsSURUb1Jvb3RNYXAuZ2V0KGlkKSA9PT0gcm9vdElEKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIG1pY3Jvc2Vjb25kcyBpbiB0aGlzIGNhc2UsXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBwcm9maWxpbmcgc3VtbWFyeSBpcyBKU09OIHNlcmlhbGl6ZWQuXG4gICAgICAgICAgICBpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnMucHVzaChbaWQsIHRyZWVCYXNlRHVyYXRpb25dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb21taXRQcm9maWxpbmdNZXRhZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRQcm9maWxpbmdEYXRhLCBjb21taXRJbmRleCkge1xuICAgICAgICB2YXIgY2hhbmdlRGVzY3JpcHRpb25zID0gY29tbWl0UHJvZmlsaW5nRGF0YS5jaGFuZ2VEZXNjcmlwdGlvbnMsXG4gICAgICAgICAgICBkdXJhdGlvbnMgPSBjb21taXRQcm9maWxpbmdEYXRhLmR1cmF0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdER1cmF0aW9uID0gY29tbWl0UHJvZmlsaW5nRGF0YS5lZmZlY3REdXJhdGlvbixcbiAgICAgICAgICAgIG1heEFjdHVhbER1cmF0aW9uID0gY29tbWl0UHJvZmlsaW5nRGF0YS5tYXhBY3R1YWxEdXJhdGlvbixcbiAgICAgICAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IGNvbW1pdFByb2ZpbGluZ0RhdGEucGFzc2l2ZUVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgICAgcHJpb3JpdHlMZXZlbCA9IGNvbW1pdFByb2ZpbGluZ0RhdGEucHJpb3JpdHlMZXZlbCxcbiAgICAgICAgICAgIGNvbW1pdFRpbWUgPSBjb21taXRQcm9maWxpbmdEYXRhLmNvbW1pdFRpbWUsXG4gICAgICAgICAgICB1cGRhdGVycyA9IGNvbW1pdFByb2ZpbGluZ0RhdGEudXBkYXRlcnM7XG4gICAgICAgIHZhciBmaWJlckFjdHVhbER1cmF0aW9ucyA9IFtdO1xuICAgICAgICB2YXIgZmliZXJTZWxmRHVyYXRpb25zID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkdXJhdGlvbnMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICB2YXIgZmliZXJJRCA9IGR1cmF0aW9uc1tpXTtcbiAgICAgICAgICBmaWJlckFjdHVhbER1cmF0aW9ucy5wdXNoKFtmaWJlcklELCBkdXJhdGlvbnNbaSArIDFdXSk7XG4gICAgICAgICAgZmliZXJTZWxmRHVyYXRpb25zLnB1c2goW2ZpYmVySUQsIGR1cmF0aW9uc1tpICsgMl1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdERhdGEucHVzaCh7XG4gICAgICAgICAgY2hhbmdlRGVzY3JpcHRpb25zOiBjaGFuZ2VEZXNjcmlwdGlvbnMgIT09IG51bGwgPyBBcnJheS5mcm9tKGNoYW5nZURlc2NyaXB0aW9ucy5lbnRyaWVzKCkpIDogbnVsbCxcbiAgICAgICAgICBkdXJhdGlvbjogbWF4QWN0dWFsRHVyYXRpb24sXG4gICAgICAgICAgZWZmZWN0RHVyYXRpb246IGVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgIGZpYmVyQWN0dWFsRHVyYXRpb25zOiBmaWJlckFjdHVhbER1cmF0aW9ucyxcbiAgICAgICAgICBmaWJlclNlbGZEdXJhdGlvbnM6IGZpYmVyU2VsZkR1cmF0aW9ucyxcbiAgICAgICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IHBhc3NpdmVFZmZlY3REdXJhdGlvbixcbiAgICAgICAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgICAgICAgIHRpbWVzdGFtcDogY29tbWl0VGltZSxcbiAgICAgICAgICB1cGRhdGVyczogdXBkYXRlcnNcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGRhdGFGb3JSb290cy5wdXNoKHtcbiAgICAgICAgY29tbWl0RGF0YTogY29tbWl0RGF0YSxcbiAgICAgICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICBpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnM6IGluaXRpYWxUcmVlQmFzZUR1cmF0aW9ucyxcbiAgICAgICAgcm9vdElEOiByb290SURcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciB0aW1lbGluZURhdGEgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBnZXRUaW1lbGluZURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBjdXJyZW50VGltZWxpbmVEYXRhID0gZ2V0VGltZWxpbmVEYXRhKCk7XG5cbiAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgIHZhciBiYXRjaFVJRFRvTWVhc3VyZXNNYXAgPSBjdXJyZW50VGltZWxpbmVEYXRhLmJhdGNoVUlEVG9NZWFzdXJlc01hcCxcbiAgICAgICAgICAgIGludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXMgPSBjdXJyZW50VGltZWxpbmVEYXRhLmludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXMsXG4gICAgICAgICAgICBsYW5lVG9MYWJlbE1hcCA9IGN1cnJlbnRUaW1lbGluZURhdGEubGFuZVRvTGFiZWxNYXAsXG4gICAgICAgICAgICBsYW5lVG9SZWFjdE1lYXN1cmVNYXAgPSBjdXJyZW50VGltZWxpbmVEYXRhLmxhbmVUb1JlYWN0TWVhc3VyZU1hcCxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoY3VycmVudFRpbWVsaW5lRGF0YSwgW1wiYmF0Y2hVSURUb01lYXN1cmVzTWFwXCIsIFwiaW50ZXJuYWxNb2R1bGVTb3VyY2VUb1Jhbmdlc1wiLCBcImxhbmVUb0xhYmVsTWFwXCIsIFwibGFuZVRvUmVhY3RNZWFzdXJlTWFwXCJdKTtcblxuICAgICAgICB0aW1lbGluZURhdGEgPSByZW5kZXJlcl9vYmplY3RTcHJlYWQocmVuZGVyZXJfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgICAgICAvLyBNb3N0IG9mIHRoZSBkYXRhIGlzIHNhZmUgdG8gcGFyc2UgYXMtaXMsXG4gICAgICAgICAgLy8gYnV0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgbmVzdGVkIEFycmF5cyBiYWNrIHRvIE1hcHMuXG4gICAgICAgICAgLy8gTW9zdCBvZiB0aGUgZGF0YSBpcyBzYWZlIHRvIHNlcmlhbGl6ZSBhcy1pcyxcbiAgICAgICAgICAvLyBidXQgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBNYXBzIHRvIG5lc3RlZCBBcnJheXMuXG4gICAgICAgICAgYmF0Y2hVSURUb01lYXN1cmVzS2V5VmFsdWVBcnJheTogQXJyYXkuZnJvbShiYXRjaFVJRFRvTWVhc3VyZXNNYXAuZW50cmllcygpKSxcbiAgICAgICAgICBpbnRlcm5hbE1vZHVsZVNvdXJjZVRvUmFuZ2VzOiBBcnJheS5mcm9tKGludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXMuZW50cmllcygpKSxcbiAgICAgICAgICBsYW5lVG9MYWJlbEtleVZhbHVlQXJyYXk6IEFycmF5LmZyb20obGFuZVRvTGFiZWxNYXAuZW50cmllcygpKSxcbiAgICAgICAgICBsYW5lVG9SZWFjdE1lYXN1cmVLZXlWYWx1ZUFycmF5OiBBcnJheS5mcm9tKGxhbmVUb1JlYWN0TWVhc3VyZU1hcC5lbnRyaWVzKCkpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhRm9yUm9vdHM6IGRhdGFGb3JSb290cyxcbiAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICB0aW1lbGluZURhdGE6IHRpbWVsaW5lRGF0YVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFByb2ZpbGluZyhzaG91bGRSZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMgPSBzaG91bGRSZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnM7IC8vIENhcHR1cmUgaW5pdGlhbCB2YWx1ZXMgYXMgb2YgdGhlIHRpbWUgcHJvZmlsaW5nIHN0YXJ0cy5cbiAgICAvLyBJdCdzIGltcG9ydGFudCB3ZSBzbmFwc2hvdCBib3RoIHRoZSBkdXJhdGlvbnMgYW5kIHRoZSBpZC10by1yb290IG1hcCxcbiAgICAvLyBzaW5jZSBlaXRoZXIgb2YgdGhlc2UgbWF5IGNoYW5nZSBkdXJpbmcgdGhlIHByb2ZpbGluZyBzZXNzaW9uXG4gICAgLy8gKGUuZy4gd2hlbiBhIGZpYmVyIGlzIHJlLXJlbmRlcmVkIG9yIHdoZW4gYSBmaWJlciBnZXRzIHJlbW92ZWQpLlxuXG4gICAgZGlzcGxheU5hbWVzQnlSb290SUQgPSBuZXcgTWFwKCk7XG4gICAgaW5pdGlhbFRyZWVCYXNlRHVyYXRpb25zTWFwID0gbmV3IE1hcChpZFRvVHJlZUJhc2VEdXJhdGlvbk1hcCk7XG4gICAgaW5pdGlhbElEVG9Sb290TWFwID0gbmV3IE1hcChpZFRvUm9vdE1hcCk7XG4gICAgaWRUb0NvbnRleHRzTWFwID0gbmV3IE1hcCgpO1xuICAgIGhvb2suZ2V0RmliZXJSb290cyhyZW5kZXJlcklEKS5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgcm9vdElEID0gZ2V0RmliZXJJRFRocm93cyhyb290LmN1cnJlbnQpO1xuICAgICAgZGlzcGxheU5hbWVzQnlSb290SUQuc2V0KHJvb3RJRCwgZ2V0RGlzcGxheU5hbWVGb3JSb290KHJvb3QuY3VycmVudCkpO1xuXG4gICAgICBpZiAoc2hvdWxkUmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zKSB7XG4gICAgICAgIC8vIFJlY29yZCBhbGwgY29udGV4dHMgYXQgdGhlIHRpbWUgcHJvZmlsaW5nIGlzIHN0YXJ0ZWQuXG4gICAgICAgIC8vIEZpYmVycyBvbmx5IHN0b3JlIHRoZSBjdXJyZW50IGNvbnRleHQgdmFsdWUsXG4gICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gdHJhY2sgdGhlbSBzZXBhcmF0ZWx5IGluIG9yZGVyIHRvIGRldGVybWluZSBjaGFuZ2VkIGtleXMuXG4gICAgICAgIGNyYXdsVG9Jbml0aWFsaXplQ29udGV4dHNNYXAocm9vdC5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpc1Byb2ZpbGluZyA9IHRydWU7XG4gICAgcHJvZmlsaW5nU3RhcnRUaW1lID0gcmVuZGVyZXJfZ2V0Q3VycmVudFRpbWUoKTtcbiAgICByb290VG9Db21taXRQcm9maWxpbmdNZXRhZGF0YU1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGlmICh0b2dnbGVQcm9maWxpbmdTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIHRvZ2dsZVByb2ZpbGluZ1N0YXR1cyh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wUHJvZmlsaW5nKCkge1xuICAgIGlzUHJvZmlsaW5nID0gZmFsc2U7XG4gICAgcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zID0gZmFsc2U7XG5cbiAgICBpZiAodG9nZ2xlUHJvZmlsaW5nU3RhdHVzICE9PSBudWxsKSB7XG4gICAgICB0b2dnbGVQcm9maWxpbmdTdGF0dXMoZmFsc2UpO1xuICAgIH1cbiAgfSAvLyBBdXRvbWF0aWNhbGx5IHN0YXJ0IHByb2ZpbGluZyBzbyB0aGF0IHdlIGRvbid0IG1pc3MgdGltaW5nIGluZm8gZnJvbSBpbml0aWFsIFwibW91bnRcIi5cblxuXG4gIGlmIChzZXNzaW9uU3RvcmFnZUdldEl0ZW0oU0VTU0lPTl9TVE9SQUdFX1JFTE9BRF9BTkRfUFJPRklMRV9LRVkpID09PSAndHJ1ZScpIHtcbiAgICBzdGFydFByb2ZpbGluZyhzZXNzaW9uU3RvcmFnZUdldEl0ZW0oU0VTU0lPTl9TVE9SQUdFX1JFQ09SRF9DSEFOR0VfREVTQ1JJUFRJT05TX0tFWSkgPT09ICd0cnVlJyk7XG4gIH0gLy8gUmVhY3Qgd2lsbCBzd2l0Y2ggYmV0d2VlbiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXJcbiAgLy8gd2UgaGF2ZSBhbnkgbWFudWFsbHkgc3VzcGVuZGVkL2Vycm9yZWQtb3V0IEZpYmVycyBvciBub3QuXG5cblxuICBmdW5jdGlvbiBzaG91bGRFcnJvckZpYmVyQWx3YXlzTnVsbCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBNYXAgb2YgaWQgYW5kIGl0cyBmb3JjZSBlcnJvciBzdGF0dXM6IHRydWUgKGVycm9yKSwgZmFsc2UgKHRvZ2dsZWQgb2ZmKSxcbiAgLy8gbnVsbCAoZG8gbm90aGluZylcblxuXG4gIHZhciBmb3JjZUVycm9yRm9yRmliZXJJRHMgPSBuZXcgTWFwKCk7XG5cbiAgZnVuY3Rpb24gc2hvdWxkRXJyb3JGaWJlckFjY29yZGluZ1RvTWFwKGZpYmVyKSB7XG4gICAgaWYgKHR5cGVvZiBzZXRFcnJvckhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgb3ZlcnJpZGVFcnJvcigpIHRvIG5vdCBnZXQgY2FsbGVkIGZvciBlYXJsaWVyIFJlYWN0IHZlcnNpb25zLicpO1xuICAgIH1cblxuICAgIHZhciBpZCA9IGdldEZpYmVySURVbnNhZmUoZmliZXIpO1xuXG4gICAgaWYgKGlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgc3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChmb3JjZUVycm9yRm9yRmliZXJJRHMuaGFzKGlkKSkge1xuICAgICAgc3RhdHVzID0gZm9yY2VFcnJvckZvckZpYmVySURzLmdldChpZCk7XG5cbiAgICAgIGlmIChzdGF0dXMgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIFRSSUNLWSBvdmVycmlkZUVycm9yIGFkZHMgZW50cmllcyB0byB0aGlzIE1hcCxcbiAgICAgICAgLy8gc28gaWRlYWxseSBpdCB3b3VsZCBiZSB0aGUgbWV0aG9kIHRoYXQgY2xlYXJzIHRoZW0gdG9vLFxuICAgICAgICAvLyBidXQgdGhhdCB3b3VsZCBicmVhayB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZmVhdHVyZSxcbiAgICAgICAgLy8gc2luY2UgRGV2VG9vbHMgbmVlZHMgdG8gdGVsbCBSZWFjdCB0byBhY3QgZGlmZmVyZW50bHkgdGhhbiBpdCBub3JtYWxseSB3b3VsZFxuICAgICAgICAvLyAoZG9uJ3QganVzdCByZS1yZW5kZXIgdGhlIGZhaWxlZCBib3VuZGFyeSwgYnV0IHJlc2V0IGl0cyBlcnJvcmVkIHN0YXRlIHRvbykuXG4gICAgICAgIC8vIFNvIHdlIGNhbiBvbmx5IGNsZWFyIGl0IGFmdGVyIHRlbGxpbmcgUmVhY3QgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgICAgICAvLyBUZWNobmljYWxseSB0aGlzIGlzIHByZW1hdHVyZSBhbmQgd2Ugc2hvdWxkIHNjaGVkdWxlIGl0IGZvciBsYXRlcixcbiAgICAgICAgLy8gc2luY2UgdGhlIHJlbmRlciBjb3VsZCBhbHdheXMgZmFpbCB3aXRob3V0IGNvbW1pdHRpbmcgdGhlIHVwZGF0ZWQgZXJyb3IgYm91bmRhcnksXG4gICAgICAgIC8vIGJ1dCBzaW5jZSB0aGlzIGlzIGEgREVWLW9ubHkgZmVhdHVyZSwgdGhlIHNpbXBsaWNpdHkgaXMgd29ydGggdGhlIHRyYWRlIG9mZi5cbiAgICAgICAgZm9yY2VFcnJvckZvckZpYmVySURzLmRlbGV0ZShpZCk7XG5cbiAgICAgICAgaWYgKGZvcmNlRXJyb3JGb3JGaWJlcklEcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgLy8gTGFzdCBvdmVycmlkZSBpcyBnb25lLiBTd2l0Y2ggUmVhY3QgYmFjayB0byBmYXN0IHBhdGguXG4gICAgICAgICAgc2V0RXJyb3JIYW5kbGVyKHNob3VsZEVycm9yRmliZXJBbHdheXNOdWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBmdW5jdGlvbiBvdmVycmlkZUVycm9yKGlkLCBmb3JjZUVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBzZXRFcnJvckhhbmRsZXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHNjaGVkdWxlVXBkYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG92ZXJyaWRlRXJyb3IoKSB0byBub3QgZ2V0IGNhbGxlZCBmb3IgZWFybGllciBSZWFjdCB2ZXJzaW9ucy4nKTtcbiAgICB9XG5cbiAgICBmb3JjZUVycm9yRm9yRmliZXJJRHMuc2V0KGlkLCBmb3JjZUVycm9yKTtcblxuICAgIGlmIChmb3JjZUVycm9yRm9yRmliZXJJRHMuc2l6ZSA9PT0gMSkge1xuICAgICAgLy8gRmlyc3Qgb3ZlcnJpZGUgaXMgYWRkZWQuIFN3aXRjaCBSZWFjdCB0byBzbG93ZXIgcGF0aC5cbiAgICAgIHNldEVycm9ySGFuZGxlcihzaG91bGRFcnJvckZpYmVyQWNjb3JkaW5nVG9NYXApO1xuICAgIH1cblxuICAgIHZhciBmaWJlciA9IGlkVG9BcmJpdHJhcnlGaWJlck1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGZpYmVyICE9IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlKGZpYmVyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRTdXNwZW5kRmliZXJBbHdheXNGYWxzZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZm9yY2VGYWxsYmFja0ZvclN1c3BlbnNlSURzID0gbmV3IFNldCgpO1xuXG4gIGZ1bmN0aW9uIHNob3VsZFN1c3BlbmRGaWJlckFjY29yZGluZ1RvU2V0KGZpYmVyKSB7XG4gICAgdmFyIG1heWJlSUQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTtcbiAgICByZXR1cm4gbWF5YmVJRCAhPT0gbnVsbCAmJiBmb3JjZUZhbGxiYWNrRm9yU3VzcGVuc2VJRHMuaGFzKG1heWJlSUQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb3ZlcnJpZGVTdXNwZW5zZShpZCwgZm9yY2VGYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2Ygc2V0U3VzcGVuc2VIYW5kbGVyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzY2hlZHVsZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvdmVycmlkZVN1c3BlbnNlKCkgdG8gbm90IGdldCBjYWxsZWQgZm9yIGVhcmxpZXIgUmVhY3QgdmVyc2lvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKGZvcmNlRmFsbGJhY2spIHtcbiAgICAgIGZvcmNlRmFsbGJhY2tGb3JTdXNwZW5zZUlEcy5hZGQoaWQpO1xuXG4gICAgICBpZiAoZm9yY2VGYWxsYmFja0ZvclN1c3BlbnNlSURzLnNpemUgPT09IDEpIHtcbiAgICAgICAgLy8gRmlyc3Qgb3ZlcnJpZGUgaXMgYWRkZWQuIFN3aXRjaCBSZWFjdCB0byBzbG93ZXIgcGF0aC5cbiAgICAgICAgc2V0U3VzcGVuc2VIYW5kbGVyKHNob3VsZFN1c3BlbmRGaWJlckFjY29yZGluZ1RvU2V0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2VGYWxsYmFja0ZvclN1c3BlbnNlSURzLmRlbGV0ZShpZCk7XG5cbiAgICAgIGlmIChmb3JjZUZhbGxiYWNrRm9yU3VzcGVuc2VJRHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAvLyBMYXN0IG92ZXJyaWRlIGlzIGdvbmUuIFN3aXRjaCBSZWFjdCBiYWNrIHRvIGZhc3QgcGF0aC5cbiAgICAgICAgc2V0U3VzcGVuc2VIYW5kbGVyKHNob3VsZFN1c3BlbmRGaWJlckFsd2F5c0ZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChmaWJlciAhPSBudWxsKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZShmaWJlcik7XG4gICAgfVxuICB9IC8vIFJlbWVtYmVyIGlmIHdlJ3JlIHRyeWluZyB0byByZXN0b3JlIHRoZSBzZWxlY3Rpb24gYWZ0ZXIgcmVsb2FkLlxuICAvLyBJbiB0aGF0IGNhc2UsIHdlJ2xsIGRvIHNvbWUgZXh0cmEgY2hlY2tzIGZvciBtYXRjaGluZyBtb3VudHMuXG5cblxuICB2YXIgdHJhY2tlZFBhdGggPSBudWxsO1xuICB2YXIgdHJhY2tlZFBhdGhNYXRjaEZpYmVyID0gbnVsbDtcbiAgdmFyIHRyYWNrZWRQYXRoTWF0Y2hEZXB0aCA9IC0xO1xuICB2YXIgbWlnaHRCZU9uVHJhY2tlZFBhdGggPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzZXRUcmFja2VkUGF0aChwYXRoKSB7XG4gICAgaWYgKHBhdGggPT09IG51bGwpIHtcbiAgICAgIHRyYWNrZWRQYXRoTWF0Y2hGaWJlciA9IG51bGw7XG4gICAgICB0cmFja2VkUGF0aE1hdGNoRGVwdGggPSAtMTtcbiAgICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJhY2tlZFBhdGggPSBwYXRoO1xuICB9IC8vIFdlIGNhbGwgdGhpcyBiZWZvcmUgdHJhdmVyc2luZyBhIG5ldyBtb3VudC5cbiAgLy8gSXQgcmVtZW1iZXJzIHdoZXRoZXIgdGhpcyBGaWJlciBpcyB0aGUgbmV4dCBiZXN0IG1hdGNoIGZvciB0cmFja2VkIHBhdGguXG4gIC8vIFRoZSByZXR1cm4gdmFsdWUgc2lnbmFscyB3aGV0aGVyIHdlIHNob3VsZCBrZWVwIG1hdGNoaW5nIHNpYmxpbmdzIG9yIG5vdC5cblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRyYWNrZWRQYXRoU3RhdGVCZWZvcmVNb3VudChmaWJlcikge1xuICAgIGlmICh0cmFja2VkUGF0aCA9PT0gbnVsbCB8fCAhbWlnaHRCZU9uVHJhY2tlZFBhdGgpIHtcbiAgICAgIC8vIEZhc3QgcGF0aDogdGhlcmUncyBub3RoaW5nIHRvIHRyYWNrIHNvIGRvIG5vdGhpbmcgYW5kIGlnbm9yZSBzaWJsaW5ncy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcmV0dXJuRmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgdmFyIHJldHVybkFsdGVybmF0ZSA9IHJldHVybkZpYmVyICE9PSBudWxsID8gcmV0dXJuRmliZXIuYWx0ZXJuYXRlIDogbnVsbDsgLy8gQnkgbm93IHdlIGtub3cgdGhlcmUncyBzb21lIHNlbGVjdGlvbiB0byByZXN0b3JlLCBhbmQgdGhpcyBpcyBhIG5ldyBGaWJlci5cbiAgICAvLyBJcyB0aGlzIG5ld2x5IG1vdW50ZWQgRmliZXIgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIGN1cnJlbnQgYmVzdCBtYXRjaD9cbiAgICAvLyAoVGhpcyB3aWxsIGFsc28gYmUgdHJ1ZSBmb3IgbmV3IHJvb3RzIGlmIHdlIGhhdmVuJ3QgbWF0Y2hlZCBhbnl0aGluZyB5ZXQuKVxuXG4gICAgaWYgKHRyYWNrZWRQYXRoTWF0Y2hGaWJlciA9PT0gcmV0dXJuRmliZXIgfHwgdHJhY2tlZFBhdGhNYXRjaEZpYmVyID09PSByZXR1cm5BbHRlcm5hdGUgJiYgcmV0dXJuQWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBJcyB0aGlzIHRoZSBuZXh0IEZpYmVyIHdlIHNob3VsZCBzZWxlY3Q/IExldCdzIGNvbXBhcmUgdGhlIGZyYW1lcy5cbiAgICAgIHZhciBhY3R1YWxGcmFtZSA9IGdldFBhdGhGcmFtZShmaWJlcik7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICB2YXIgZXhwZWN0ZWRGcmFtZSA9IHRyYWNrZWRQYXRoW3RyYWNrZWRQYXRoTWF0Y2hEZXB0aCArIDFdO1xuXG4gICAgICBpZiAoZXhwZWN0ZWRGcmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gc2VlIGEgZnJhbWUgYXQgdGhlIG5leHQgZGVwdGguJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3R1YWxGcmFtZS5pbmRleCA9PT0gZXhwZWN0ZWRGcmFtZS5pbmRleCAmJiBhY3R1YWxGcmFtZS5rZXkgPT09IGV4cGVjdGVkRnJhbWUua2V5ICYmIGFjdHVhbEZyYW1lLmRpc3BsYXlOYW1lID09PSBleHBlY3RlZEZyYW1lLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgIC8vIFdlIGhhdmUgb3VyIG5leHQgbWF0Y2guXG4gICAgICAgIHRyYWNrZWRQYXRoTWF0Y2hGaWJlciA9IGZpYmVyO1xuICAgICAgICB0cmFja2VkUGF0aE1hdGNoRGVwdGgrKzsgLy8gQXJlIHdlIG91dCBvZiBmcmFtZXMgdG8gbWF0Y2g/XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgIGlmICh0cmFja2VkUGF0aE1hdGNoRGVwdGggPT09IHRyYWNrZWRQYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBUaGVyZSdzIG5vdGhpbmcgdGhhdCBjYW4gcG9zc2libHkgbWF0Y2ggYWZ0ZXJ3YXJkcy5cbiAgICAgICAgICAvLyBEb24ndCBjaGVjayB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgbWlnaHRCZU9uVHJhY2tlZFBhdGggPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayB0aGUgY2hpbGRyZW4sIGFzIHRoZXkgbWlnaHQgcmV2ZWFsIHRoZSBuZXh0IG1hdGNoLlxuICAgICAgICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gdHJ1ZTtcbiAgICAgICAgfSAvLyBJbiBlaXRoZXIgY2FzZSwgc2luY2Ugd2UgaGF2ZSBhIG1hdGNoLCB3ZSBkb24ndCBuZWVkXG4gICAgICAgIC8vIHRvIGNoZWNrIHRoZSBzaWJsaW5ncy4gVGhleSdsbCBuZXZlciBtYXRjaC5cblxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IC8vIFRoaXMgRmliZXIncyBwYXJlbnQgaXMgb24gdGhlIHBhdGgsIGJ1dCB0aGlzIEZpYmVyIGl0c2VsZiBpc24ndC5cbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgaXRzIGNoaWxkcmVuLS10aGV5IHdvbid0IGJlIG9uIHRoZSBwYXRoIGVpdGhlci5cblxuXG4gICAgbWlnaHRCZU9uVHJhY2tlZFBhdGggPSBmYWxzZTsgLy8gSG93ZXZlciwgb25lIG9mIGl0cyBzaWJsaW5ncyBtYXkgYmUgb24gdGhlIHBhdGggc28ga2VlcCBzZWFyY2hpbmcuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRyYWNrZWRQYXRoU3RhdGVBZnRlck1vdW50KG1pZ2h0U2libGluZ3NCZU9uVHJhY2tlZFBhdGgpIHtcbiAgICAvLyB1cGRhdGVUcmFja2VkUGF0aFN0YXRlQmVmb3JlTW91bnQoKSB0b2xkIHVzIHdoZXRoZXIgdG8gbWF0Y2ggc2libGluZ3MuXG4gICAgLy8gTm93IHRoYXQgd2UncmUgZW50ZXJpbmcgc2libGluZ3MsIGxldCdzIHVzZSB0aGF0IGluZm9ybWF0aW9uLlxuICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gbWlnaHRTaWJsaW5nc0JlT25UcmFja2VkUGF0aDtcbiAgfSAvLyBSb290cyBkb24ndCBoYXZlIGEgcmVhbCBwZXJzaXN0ZW50IGlkZW50aXR5LlxuICAvLyBBIHJvb3QncyBcInBzZXVkbyBrZXlcIiBpcyBcImNoaWxkRGlzcGxheU5hbWU6aW5kZXhXaXRoVGhhdE5hbWVcIi5cbiAgLy8gRm9yIGV4YW1wbGUsIFwiQXBwOjBcIiBvciwgaW4gY2FzZSBvZiBzaW1pbGFyIHJvb3RzLCBcIlN0b3J5OjBcIiwgXCJTdG9yeToxXCIsIGV0Yy5cbiAgLy8gV2Ugd2lsbCB1c2UgdGhpcyB0byB0cnkgdG8gZGlzYW1iaWd1YXRlIHJvb3RzIHdoZW4gcmVzdG9yaW5nIHNlbGVjdGlvbiBiZXR3ZWVuIHJlbG9hZHMuXG5cblxuICB2YXIgcm9vdFBzZXVkb0tleXMgPSBuZXcgTWFwKCk7XG4gIHZhciByb290RGlzcGxheU5hbWVDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4gIGZ1bmN0aW9uIHNldFJvb3RQc2V1ZG9LZXkoaWQsIGZpYmVyKSB7XG4gICAgdmFyIG5hbWUgPSBnZXREaXNwbGF5TmFtZUZvclJvb3QoZmliZXIpO1xuICAgIHZhciBjb3VudGVyID0gcm9vdERpc3BsYXlOYW1lQ291bnRlci5nZXQobmFtZSkgfHwgMDtcbiAgICByb290RGlzcGxheU5hbWVDb3VudGVyLnNldChuYW1lLCBjb3VudGVyICsgMSk7XG4gICAgdmFyIHBzZXVkb0tleSA9IFwiXCIuY29uY2F0KG5hbWUsIFwiOlwiKS5jb25jYXQoY291bnRlcik7XG4gICAgcm9vdFBzZXVkb0tleXMuc2V0KGlkLCBwc2V1ZG9LZXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUm9vdFBzZXVkb0tleShpZCkge1xuICAgIHZhciBwc2V1ZG9LZXkgPSByb290UHNldWRvS2V5cy5nZXQoaWQpO1xuXG4gICAgaWYgKHBzZXVkb0tleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJvb3QgcHNldWRvIGtleSB0byBiZSBrbm93bi4nKTtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IHBzZXVkb0tleS5zbGljZSgwLCBwc2V1ZG9LZXkubGFzdEluZGV4T2YoJzonKSk7XG4gICAgdmFyIGNvdW50ZXIgPSByb290RGlzcGxheU5hbWVDb3VudGVyLmdldChuYW1lKTtcblxuICAgIGlmIChjb3VudGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgY291bnRlciB0byBiZSBrbm93bi4nKTtcbiAgICB9XG5cbiAgICBpZiAoY291bnRlciA+IDEpIHtcbiAgICAgIHJvb3REaXNwbGF5TmFtZUNvdW50ZXIuc2V0KG5hbWUsIGNvdW50ZXIgLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdERpc3BsYXlOYW1lQ291bnRlci5kZWxldGUobmFtZSk7XG4gICAgfVxuXG4gICAgcm9vdFBzZXVkb0tleXMuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lRm9yUm9vdChmaWJlcikge1xuICAgIHZhciBwcmVmZXJyZWREaXNwbGF5TmFtZSA9IG51bGw7XG4gICAgdmFyIGZhbGxiYWNrRGlzcGxheU5hbWUgPSBudWxsO1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkOyAvLyBHbyBhdCBtb3N0IHRocmVlIGxldmVscyBkZWVwIGludG8gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gd2hpbGUgc2VhcmNoaW5nIGZvciBhIGNoaWxkIHRoYXQgaGFzIGEgZGlzcGxheU5hbWUuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgaWYgKGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGNoaWxkKTtcblxuICAgICAgaWYgKGRpc3BsYXlOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFByZWZlciBkaXNwbGF5IG5hbWVzIHRoYXQgd2UgZ2V0IGZyb20gdXNlci1kZWZpbmVkIGNvbXBvbmVudHMuXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gYXZvaWQgdXNpbmcgZS5nLiAnU3VzcGVuc2UnIHVubGVzcyB3ZSBmaW5kIG5vdGhpbmcgZWxzZS5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVGhlcmUncyBhIGZldyB1c2VyLWRlZmluZWQgdGFncywgYnV0IHdlJ2xsIHByZWZlciB0aGUgb25lc1xuICAgICAgICAgIC8vIHRoYXQgYXJlIHVzdWFsbHkgZXhwbGljaXRseSBuYW1lZCAoZnVuY3Rpb24gb3IgY2xhc3MgY29tcG9uZW50cykuXG4gICAgICAgICAgcHJlZmVycmVkRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgfSBlbHNlIGlmIChmYWxsYmFja0Rpc3BsYXlOYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgZmFsbGJhY2tEaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVmZXJyZWREaXNwbGF5TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5jaGlsZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZmVycmVkRGlzcGxheU5hbWUgfHwgZmFsbGJhY2tEaXNwbGF5TmFtZSB8fCAnQW5vbnltb3VzJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhdGhGcmFtZShmaWJlcikge1xuICAgIHZhciBrZXkgPSBmaWJlci5rZXk7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcik7XG4gICAgdmFyIGluZGV4ID0gZmliZXIuaW5kZXg7XG5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgLy8gUm9vdHMgZG9uJ3QgaGF2ZSBhIHJlYWwgZGlzcGxheU5hbWUsIGluZGV4LCBvciBrZXkuXG4gICAgICAgIC8vIEluc3RlYWQsIHdlJ2xsIHVzZSB0aGUgcHNldWRvIGtleSAoY2hpbGREaXNwbGF5TmFtZTppbmRleFdpdGhUaGF0TmFtZSkuXG4gICAgICAgIHZhciBpZCA9IGdldEZpYmVySURUaHJvd3MoZmliZXIpO1xuICAgICAgICB2YXIgcHNldWRvS2V5ID0gcm9vdFBzZXVkb0tleXMuZ2V0KGlkKTtcblxuICAgICAgICBpZiAocHNldWRvS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG1vdW50ZWQgcm9vdCB0byBoYXZlIGtub3duIHBzZXVkbyBrZXkuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaXNwbGF5TmFtZSA9IHBzZXVkb0tleTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgZGlzcGxheU5hbWUgPSBmaWJlci50eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIGtleToga2V5LFxuICAgICAgaW5kZXg6IGluZGV4XG4gICAgfTtcbiAgfSAvLyBQcm9kdWNlcyBhIHNlcmlhbGl6YWJsZSByZXByZXNlbnRhdGlvbiB0aGF0IGRvZXMgYSBiZXN0IGVmZm9ydFxuICAvLyBvZiBpZGVudGlmeWluZyBhIHBhcnRpY3VsYXIgRmliZXIgYmV0d2VlbiBwYWdlIHJlbG9hZHMuXG4gIC8vIFRoZSByZXR1cm4gcGF0aCB3aWxsIGNvbnRhaW4gRmliZXJzIHRoYXQgYXJlIFwiaW52aXNpYmxlXCIgdG8gdGhlIHN0b3JlXG4gIC8vIGJlY2F1c2UgdGhlaXIga2V5cyBhbmQgaW5kZXhlcyBhcmUgaW1wb3J0YW50IHRvIHJlc3RvcmluZyB0aGUgc2VsZWN0aW9uLlxuXG5cbiAgZnVuY3Rpb24gZ2V0UGF0aEZvckVsZW1lbnQoaWQpIHtcbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChmaWJlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIga2V5UGF0aCA9IFtdO1xuXG4gICAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICBrZXlQYXRoLnB1c2goZ2V0UGF0aEZyYW1lKGZpYmVyKSk7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICB9XG5cbiAgICBrZXlQYXRoLnJldmVyc2UoKTtcbiAgICByZXR1cm4ga2V5UGF0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJlc3RNYXRjaEZvclRyYWNrZWRQYXRoKCkge1xuICAgIGlmICh0cmFja2VkUGF0aCA9PT0gbnVsbCkge1xuICAgICAgLy8gTm90aGluZyB0byBtYXRjaC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0cmFja2VkUGF0aE1hdGNoRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBGaW5kIHRoZSBjbG9zZXN0IEZpYmVyIHN0b3JlIGlzIGF3YXJlIG9mLlxuXG5cbiAgICB2YXIgZmliZXIgPSB0cmFja2VkUGF0aE1hdGNoRmliZXI7XG5cbiAgICB3aGlsZSAoZmliZXIgIT09IG51bGwgJiYgc2hvdWxkRmlsdGVyRmliZXIoZmliZXIpKSB7XG4gICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZ2V0RmliZXJJRFRocm93cyhmaWJlciksXG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgIGlzRnVsbE1hdGNoOiB0cmFja2VkUGF0aE1hdGNoRGVwdGggPT09IHRyYWNrZWRQYXRoLmxlbmd0aCAtIDFcbiAgICB9O1xuICB9XG5cbiAgdmFyIGZvcm1hdFByaW9yaXR5TGV2ZWwgPSBmdW5jdGlvbiBmb3JtYXRQcmlvcml0eUxldmVsKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBpZiAocHJpb3JpdHlMZXZlbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgcmV0dXJuICdJbW1lZGlhdGUnO1xuXG4gICAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgICByZXR1cm4gJ1VzZXItQmxvY2tpbmcnO1xuXG4gICAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG5cbiAgICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAgIHJldHVybiAnTG93JztcblxuICAgICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICAgIHJldHVybiAnSWRsZSc7XG5cbiAgICAgIGNhc2UgTm9Qcmlvcml0eTpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldFRyYWNlVXBkYXRlc0VuYWJsZWQoaXNFbmFibGVkKSB7XG4gICAgdHJhY2VVcGRhdGVzRW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc0ZpYmVyV2l0aElkKGlkKSB7XG4gICAgcmV0dXJuIGlkVG9BcmJpdHJhcnlGaWJlck1hcC5oYXMoaWQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjbGVhbnVwOiBjbGVhbnVwLFxuICAgIGNsZWFyRXJyb3JzQW5kV2FybmluZ3M6IGNsZWFyRXJyb3JzQW5kV2FybmluZ3MsXG4gICAgY2xlYXJFcnJvcnNGb3JGaWJlcklEOiBjbGVhckVycm9yc0ZvckZpYmVySUQsXG4gICAgY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQ6IGNsZWFyV2FybmluZ3NGb3JGaWJlcklELFxuICAgIGdldFNlcmlhbGl6ZWRFbGVtZW50VmFsdWVCeVBhdGg6IGdldFNlcmlhbGl6ZWRFbGVtZW50VmFsdWVCeVBhdGgsXG4gICAgZGVsZXRlUGF0aDogZGVsZXRlUGF0aCxcbiAgICBmaW5kTmF0aXZlTm9kZXNGb3JGaWJlcklEOiBmaW5kTmF0aXZlTm9kZXNGb3JGaWJlcklELFxuICAgIGZsdXNoSW5pdGlhbE9wZXJhdGlvbnM6IGZsdXNoSW5pdGlhbE9wZXJhdGlvbnMsXG4gICAgZ2V0QmVzdE1hdGNoRm9yVHJhY2tlZFBhdGg6IGdldEJlc3RNYXRjaEZvclRyYWNrZWRQYXRoLFxuICAgIGdldERpc3BsYXlOYW1lRm9yRmliZXJJRDogZ2V0RGlzcGxheU5hbWVGb3JGaWJlcklELFxuICAgIGdldEZpYmVyRm9yTmF0aXZlOiBnZXRGaWJlckZvck5hdGl2ZSxcbiAgICBnZXRGaWJlcklERm9yTmF0aXZlOiBnZXRGaWJlcklERm9yTmF0aXZlLFxuICAgIGdldEluc3RhbmNlQW5kU3R5bGU6IGdldEluc3RhbmNlQW5kU3R5bGUsXG4gICAgZ2V0T3duZXJzTGlzdDogZ2V0T3duZXJzTGlzdCxcbiAgICBnZXRQYXRoRm9yRWxlbWVudDogZ2V0UGF0aEZvckVsZW1lbnQsXG4gICAgZ2V0UHJvZmlsaW5nRGF0YTogZ2V0UHJvZmlsaW5nRGF0YSxcbiAgICBoYW5kbGVDb21taXRGaWJlclJvb3Q6IGhhbmRsZUNvbW1pdEZpYmVyUm9vdCxcbiAgICBoYW5kbGVDb21taXRGaWJlclVubW91bnQ6IGhhbmRsZUNvbW1pdEZpYmVyVW5tb3VudCxcbiAgICBoYW5kbGVQb3N0Q29tbWl0RmliZXJSb290OiBoYW5kbGVQb3N0Q29tbWl0RmliZXJSb290LFxuICAgIGhhc0ZpYmVyV2l0aElkOiBoYXNGaWJlcldpdGhJZCxcbiAgICBpbnNwZWN0RWxlbWVudDogaW5zcGVjdEVsZW1lbnQsXG4gICAgbG9nRWxlbWVudFRvQ29uc29sZTogbG9nRWxlbWVudFRvQ29uc29sZSxcbiAgICBwYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlOiBwYXRjaEZvclN0cmljdE1vZGUsXG4gICAgcHJlcGFyZVZpZXdBdHRyaWJ1dGVTb3VyY2U6IHByZXBhcmVWaWV3QXR0cmlidXRlU291cmNlLFxuICAgIHByZXBhcmVWaWV3RWxlbWVudFNvdXJjZTogcHJlcGFyZVZpZXdFbGVtZW50U291cmNlLFxuICAgIG92ZXJyaWRlRXJyb3I6IG92ZXJyaWRlRXJyb3IsXG4gICAgb3ZlcnJpZGVTdXNwZW5zZTogb3ZlcnJpZGVTdXNwZW5zZSxcbiAgICBvdmVycmlkZVZhbHVlQXRQYXRoOiBvdmVycmlkZVZhbHVlQXRQYXRoLFxuICAgIHJlbmFtZVBhdGg6IHJlbmFtZVBhdGgsXG4gICAgcmVuZGVyZXI6IHJlbmRlcmVyLFxuICAgIHNldFRyYWNlVXBkYXRlc0VuYWJsZWQ6IHNldFRyYWNlVXBkYXRlc0VuYWJsZWQsXG4gICAgc2V0VHJhY2tlZFBhdGg6IHNldFRyYWNrZWRQYXRoLFxuICAgIHN0YXJ0UHJvZmlsaW5nOiBzdGFydFByb2ZpbGluZyxcbiAgICBzdG9wUHJvZmlsaW5nOiBzdG9wUHJvZmlsaW5nLFxuICAgIHN0b3JlQXNHbG9iYWw6IHN0b3JlQXNHbG9iYWwsXG4gICAgdW5wYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlOiB1bnBhdGNoRm9yU3RyaWN0TW9kZSxcbiAgICB1cGRhdGVDb21wb25lbnRGaWx0ZXJzOiB1cGRhdGVDb21wb25lbnRGaWx0ZXJzXG4gIH07XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL2NvbnNvbGUuanNcbmZ1bmN0aW9uIGNvbnNvbGVfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBjb25zb2xlX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgY29uc29sZV9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBjb25zb2xlX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgY29uc29sZV9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIGNvbnNvbGVfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIGNvbnNvbGVfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gY29uc29sZV9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGNvbnNvbGVfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIGNvbnNvbGVfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQ7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8IG9bU3ltYm9sLml0ZXJhdG9yXSA9PSBudWxsKSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IGNvbnNvbGVfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7IGlmIChpdCkgbyA9IGl0OyB2YXIgaSA9IDA7IHZhciBGID0gZnVuY3Rpb24gRigpIHt9OyByZXR1cm4geyBzOiBGLCBuOiBmdW5jdGlvbiBuKCkgeyBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OyB9LCBlOiBmdW5jdGlvbiBlKF9lKSB7IHRocm93IF9lOyB9LCBmOiBGIH07IH0gdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9IHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSwgZGlkRXJyID0gZmFsc2UsIGVycjsgcmV0dXJuIHsgczogZnVuY3Rpb24gcygpIHsgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gY29uc29sZV91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnNvbGVfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGNvbnNvbGVfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIGNvbnNvbGVfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cblxudmFyIE9WRVJSSURFX0NPTlNPTEVfTUVUSE9EUyA9IFsnZXJyb3InLCAndHJhY2UnLCAnd2FybiddO1xudmFyIERJTU1FRF9OT0RFX0NPTlNPTEVfQ09MT1IgPSAnXFx4MWJbMm0lc1xceDFiWzBtJzsgLy8gUmVhY3QncyBjdXN0b20gYnVpbHQgY29tcG9uZW50IHN0YWNrIHN0cmluZ3MgbWF0Y2ggXCJcXHN7NH1pblwiXG4vLyBDaHJvbWUncyBwcmVmaXggbWF0Y2hlcyBcIlxcc3s0fWF0XCJcblxudmFyIFBSRUZJWF9SRUdFWCA9IC9cXHN7NH0oaW58YXQpXFxzezF9LzsgLy8gRmlyZWZveCBhbmQgU2FmYXJpIGhhdmUgbm8gcHJlZml4IChcIlwiKVxuLy8gYnV0IHdlIGNhbiBmYWxsYmFjayB0byBsb29raW5nIGZvciBsb2NhdGlvbiBpbmZvIChlLmcuIFwiZm9vLmpzOjEyOjM0NVwiKVxuXG52YXIgUk9XX0NPTFVNTl9OVU1CRVJfUkVHRVggPSAvOlxcZCs6XFxkKyhcXG58JCkvO1xuZnVuY3Rpb24gaXNTdHJpbmdDb21wb25lbnRTdGFjayh0ZXh0KSB7XG4gIHJldHVybiBQUkVGSVhfUkVHRVgudGVzdCh0ZXh0KSB8fCBST1dfQ09MVU1OX05VTUJFUl9SRUdFWC50ZXN0KHRleHQpO1xufVxudmFyIFNUWUxFX0RJUkVDVElWRV9SRUdFWCA9IC9eJWMvOyAvLyBUaGlzIGZ1bmN0aW9uIHRlbGxzIHdoZXRoZXIgb3Igbm90IHRoZSBhcmd1bWVudHMgZm9yIGEgY29uc29sZVxuLy8gbWV0aG9kIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgdGhlIHBhdGNoRm9yU3RyaWN0TW9kZSBmdW5jdGlvbi5cbi8vIElmIGl0IGhhcyB3ZSdsbCBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCBmb3JtYXR0aW5nIG9mIHRoZSBhcmd1bWVudHNcbi8vIHNvIHRoZSBjb25zb2xlIGNvbG9yIHN0YXlzIGNvbnNpc3RlbnRcblxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlT3ZlcnJpZGUoYXJncywgbWV0aG9kKSB7XG4gIHJldHVybiBhcmdzLmxlbmd0aCA+PSAyICYmIFNUWUxFX0RJUkVDVElWRV9SRUdFWC50ZXN0KGFyZ3NbMF0pICYmIGFyZ3NbMV0gPT09IFwiY29sb3I6IFwiLmNvbmNhdChnZXRDb25zb2xlQ29sb3IobWV0aG9kKSB8fCAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnNvbGVDb2xvcihtZXRob2QpIHtcbiAgc3dpdGNoIChtZXRob2QpIHtcbiAgICBjYXNlICd3YXJuJzpcbiAgICAgIHJldHVybiBjb25zb2xlU2V0dGluZ3NSZWYuYnJvd3NlclRoZW1lID09PSAnbGlnaHQnID8gXCJyZ2JhKDI1MCwgMTgwLCA1MCwgMC43NSlcIiA6IFwicmdiYSgyNTAsIDE4MCwgNTAsIDAuNSlcIjtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBjb25zb2xlU2V0dGluZ3NSZWYuYnJvd3NlclRoZW1lID09PSAnbGlnaHQnID8gXCJyZ2JhKDI1MCwgMTIzLCAxMzAsIDAuNzUpXCIgOiBcInJnYmEoMjUwLCAxMjMsIDEzMCwgMC41KVwiO1xuXG4gICAgY2FzZSAnbG9nJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbnNvbGVTZXR0aW5nc1JlZi5icm93c2VyVGhlbWUgPT09ICdsaWdodCcgPyBcInJnYmEoMTI1LCAxMjUsIDEyNSwgMC43NSlcIiA6IFwicmdiYSgxMjUsIDEyNSwgMTI1LCAwLjUpXCI7XG4gIH1cbn1cblxudmFyIGluamVjdGVkUmVuZGVyZXJzID0gbmV3IE1hcCgpO1xudmFyIHRhcmdldENvbnNvbGUgPSBjb25zb2xlO1xudmFyIHRhcmdldENvbnNvbGVNZXRob2RzID0ge307XG5cbmZvciAodmFyIG1ldGhvZCBpbiBjb25zb2xlKSB7XG4gIHRhcmdldENvbnNvbGVNZXRob2RzW21ldGhvZF0gPSBjb25zb2xlW21ldGhvZF07XG59XG5cbnZhciB1bnBhdGNoRm4gPSBudWxsO1xudmFyIGlzTm9kZSA9IGZhbHNlO1xuXG50cnkge1xuICBpc05vZGUgPSB1bmRlZmluZWQgPT09IGdsb2JhbDtcbn0gY2F0Y2ggKGVycm9yKSB7fSAvLyBFbmFibGVzIGUuZy4gSmVzdCB0ZXN0cyB0byBpbmplY3QgYSBtb2NrIGNvbnNvbGUgb2JqZWN0LlxuXG5cbmZ1bmN0aW9uIGRhbmdlcm91c19zZXRUYXJnZXRDb25zb2xlRm9yVGVzdGluZyh0YXJnZXRDb25zb2xlRm9yVGVzdGluZykge1xuICB0YXJnZXRDb25zb2xlID0gdGFyZ2V0Q29uc29sZUZvclRlc3Rpbmc7XG4gIHRhcmdldENvbnNvbGVNZXRob2RzID0ge307XG5cbiAgZm9yICh2YXIgX21ldGhvZCBpbiB0YXJnZXRDb25zb2xlKSB7XG4gICAgdGFyZ2V0Q29uc29sZU1ldGhvZHNbX21ldGhvZF0gPSBjb25zb2xlW19tZXRob2RdO1xuICB9XG59IC8vIHYxNiByZW5kZXJlcnMgc2hvdWxkIHVzZSB0aGlzIG1ldGhvZCB0byBpbmplY3QgaW50ZXJuYWxzIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSBhIGNvbXBvbmVudCBzdGFjay5cbi8vIFRoZXNlIGludGVybmFscyB3aWxsIGJlIHVzZWQgaWYgdGhlIGNvbnNvbGUgaXMgcGF0Y2hlZC5cbi8vIEluamVjdGluZyB0aGVtIHNlcGFyYXRlbHkgYWxsb3dzIHRoZSBjb25zb2xlIHRvIGVhc2lseSBiZSBwYXRjaGVkIG9yIHVuLXBhdGNoZWQgbGF0ZXIgKGF0IHJ1bnRpbWUpLlxuXG5mdW5jdGlvbiByZWdpc3RlclJlbmRlcmVyKHJlbmRlcmVyLCBvbkVycm9yT3JXYXJuaW5nKSB7XG4gIHZhciBjdXJyZW50RGlzcGF0Y2hlclJlZiA9IHJlbmRlcmVyLmN1cnJlbnREaXNwYXRjaGVyUmVmLFxuICAgICAgZ2V0Q3VycmVudEZpYmVyID0gcmVuZGVyZXIuZ2V0Q3VycmVudEZpYmVyLFxuICAgICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSByZW5kZXJlci5maW5kRmliZXJCeUhvc3RJbnN0YW5jZSxcbiAgICAgIHZlcnNpb24gPSByZW5kZXJlci52ZXJzaW9uOyAvLyBJZ25vcmUgUmVhY3QgdjE1IGFuZCBvbGRlciBiZWNhdXNlIHRoZXkgZG9uJ3QgZXhwb3NlIGEgY29tcG9uZW50IHN0YWNrIGFueXdheS5cblxuICBpZiAodHlwZW9mIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGN1cnJlbnREaXNwYXRjaGVyUmVmIGdldHMgaW5qZWN0ZWQgZm9yIHYxNi44KyB0byBzdXBwb3J0IGhvb2tzIGluc3BlY3Rpb24uXG4gIC8vIGdldEN1cnJlbnRGaWJlciBnZXRzIGluamVjdGVkIGZvciB2MTYuOSsuXG5cblxuICBpZiAoY3VycmVudERpc3BhdGNoZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2YgZ2V0Q3VycmVudEZpYmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIF9nZXRJbnRlcm5hbFJlYWN0Q29ucyA9IGdldEludGVybmFsUmVhY3RDb25zdGFudHModmVyc2lvbiksXG4gICAgICAgIFJlYWN0VHlwZU9mV29yayA9IF9nZXRJbnRlcm5hbFJlYWN0Q29ucy5SZWFjdFR5cGVPZldvcms7XG5cbiAgICBpbmplY3RlZFJlbmRlcmVycy5zZXQocmVuZGVyZXIsIHtcbiAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBjdXJyZW50RGlzcGF0Y2hlclJlZixcbiAgICAgIGdldEN1cnJlbnRGaWJlcjogZ2V0Q3VycmVudEZpYmVyLFxuICAgICAgd29ya1RhZ01hcDogUmVhY3RUeXBlT2ZXb3JrLFxuICAgICAgb25FcnJvck9yV2FybmluZzogb25FcnJvck9yV2FybmluZ1xuICAgIH0pO1xuICB9XG59XG52YXIgY29uc29sZVNldHRpbmdzUmVmID0ge1xuICBhcHBlbmRDb21wb25lbnRTdGFjazogZmFsc2UsXG4gIGJyZWFrT25Db25zb2xlRXJyb3JzOiBmYWxzZSxcbiAgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzOiBmYWxzZSxcbiAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlOiBmYWxzZSxcbiAgYnJvd3NlclRoZW1lOiAnZGFyaydcbn07IC8vIFBhdGNoZXMgY29uc29sZSBtZXRob2RzIHRvIGFwcGVuZCBjb21wb25lbnQgc3RhY2sgZm9yIHRoZSBjdXJyZW50IGZpYmVyLlxuLy8gQ2FsbCB1bnBhdGNoKCkgdG8gcmVtb3ZlIHRoZSBpbmplY3RlZCBiZWhhdmlvci5cblxuZnVuY3Rpb24gcGF0Y2goX3JlZikge1xuICB2YXIgYXBwZW5kQ29tcG9uZW50U3RhY2sgPSBfcmVmLmFwcGVuZENvbXBvbmVudFN0YWNrLFxuICAgICAgYnJlYWtPbkNvbnNvbGVFcnJvcnMgPSBfcmVmLmJyZWFrT25Db25zb2xlRXJyb3JzLFxuICAgICAgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzID0gX3JlZi5zaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMsXG4gICAgICBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUgPSBfcmVmLmhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSxcbiAgICAgIGJyb3dzZXJUaGVtZSA9IF9yZWYuYnJvd3NlclRoZW1lO1xuICAvLyBTZXR0aW5ncyBtYXkgY2hhbmdlIGFmdGVyIHdlJ3ZlIHBhdGNoZWQgdGhlIGNvbnNvbGUuXG4gIC8vIFVzaW5nIGEgc2hhcmVkIHJlZiBhbGxvd3MgdGhlIHBhdGNoIGZ1bmN0aW9uIHRvIHJlYWQgdGhlIGxhdGVzdCB2YWx1ZXMuXG4gIGNvbnNvbGVTZXR0aW5nc1JlZi5hcHBlbmRDb21wb25lbnRTdGFjayA9IGFwcGVuZENvbXBvbmVudFN0YWNrO1xuICBjb25zb2xlU2V0dGluZ3NSZWYuYnJlYWtPbkNvbnNvbGVFcnJvcnMgPSBicmVha09uQ29uc29sZUVycm9ycztcbiAgY29uc29sZVNldHRpbmdzUmVmLnNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyA9IHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycztcbiAgY29uc29sZVNldHRpbmdzUmVmLmhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSA9IGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZTtcbiAgY29uc29sZVNldHRpbmdzUmVmLmJyb3dzZXJUaGVtZSA9IGJyb3dzZXJUaGVtZTtcblxuICBpZiAoYXBwZW5kQ29tcG9uZW50U3RhY2sgfHwgYnJlYWtPbkNvbnNvbGVFcnJvcnMgfHwgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzKSB7XG4gICAgaWYgKHVucGF0Y2hGbiAhPT0gbnVsbCkge1xuICAgICAgLy8gRG9uJ3QgcGF0Y2ggdHdpY2UuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9yaWdpbmFsQ29uc29sZU1ldGhvZHMgPSB7fTtcblxuICAgIHVucGF0Y2hGbiA9IGZ1bmN0aW9uIHVucGF0Y2hGbigpIHtcbiAgICAgIGZvciAodmFyIF9tZXRob2QyIGluIG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0YXJnZXRDb25zb2xlW19tZXRob2QyXSA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbX21ldGhvZDJdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgT1ZFUlJJREVfQ09OU09MRV9NRVRIT0RTLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1ttZXRob2RdID0gdGFyZ2V0Q29uc29sZVttZXRob2RdLl9fUkVBQ1RfREVWVE9PTFNfT1JJR0lOQUxfTUVUSE9EX18gPyB0YXJnZXRDb25zb2xlW21ldGhvZF0uX19SRUFDVF9ERVZUT09MU19PUklHSU5BTF9NRVRIT0RfXyA6IHRhcmdldENvbnNvbGVbbWV0aG9kXTsgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG4gICAgICAgIHZhciBvdmVycmlkZU1ldGhvZCA9IGZ1bmN0aW9uIG92ZXJyaWRlTWV0aG9kKCkge1xuICAgICAgICAgIHZhciBzaG91bGRBcHBlbmRXYXJuaW5nU3RhY2sgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWV0aG9kICE9PSAnbG9nJykge1xuICAgICAgICAgICAgaWYgKGNvbnNvbGVTZXR0aW5nc1JlZi5hcHBlbmRDb21wb25lbnRTdGFjaykge1xuICAgICAgICAgICAgICB2YXIgbGFzdEFyZyA9IGFyZ3MubGVuZ3RoID4gMCA/IGFyZ3NbYXJncy5sZW5ndGggLSAxXSA6IG51bGw7XG4gICAgICAgICAgICAgIHZhciBhbHJlYWR5SGFzQ29tcG9uZW50U3RhY2sgPSB0eXBlb2YgbGFzdEFyZyA9PT0gJ3N0cmluZycgJiYgaXNTdHJpbmdDb21wb25lbnRTdGFjayhsYXN0QXJnKTsgLy8gSWYgd2UgYXJlIGV2ZXIgY2FsbGVkIHdpdGggYSBzdHJpbmcgdGhhdCBhbHJlYWR5IGhhcyBhIGNvbXBvbmVudCBzdGFjayxcbiAgICAgICAgICAgICAgLy8gZS5nLiBhIFJlYWN0IGVycm9yL3dhcm5pbmcsIGRvbid0IGFwcGVuZCBhIHNlY29uZCBzdGFjay5cblxuICAgICAgICAgICAgICBzaG91bGRBcHBlbmRXYXJuaW5nU3RhY2sgPSAhYWxyZWFkeUhhc0NvbXBvbmVudFN0YWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzaG91bGRTaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMgPSBjb25zb2xlU2V0dGluZ3NSZWYuc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzICYmIChtZXRob2QgPT09ICdlcnJvcicgfHwgbWV0aG9kID09PSAnd2FybicpOyAvLyBTZWFyY2ggZm9yIHRoZSBmaXJzdCByZW5kZXJlciB0aGF0IGhhcyBhIGN1cnJlbnQgRmliZXIuXG4gICAgICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoZSBlZGdlIGNhc2Ugb2Ygc3RhY2tzIGZvciBtb3JlIHRoYW4gb25lIChlLmcuIGludGVybGVhdmVkIHJlbmRlcmVycz8pXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZvci1vZi1sb29wcy9uby1mb3Itb2YtbG9vcHNcblxuICAgICAgICAgIHZhciBfaXRlcmF0b3IgPSBjb25zb2xlX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoaW5qZWN0ZWRSZW5kZXJlcnMudmFsdWVzKCkpLFxuICAgICAgICAgICAgICBfc3RlcDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgICAgICB2YXIgX3N0ZXAkdmFsdWUgPSBfc3RlcC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmID0gX3N0ZXAkdmFsdWUuY3VycmVudERpc3BhdGNoZXJSZWYsXG4gICAgICAgICAgICAgICAgICBnZXRDdXJyZW50RmliZXIgPSBfc3RlcCR2YWx1ZS5nZXRDdXJyZW50RmliZXIsXG4gICAgICAgICAgICAgICAgICBvbkVycm9yT3JXYXJuaW5nID0gX3N0ZXAkdmFsdWUub25FcnJvck9yV2FybmluZyxcbiAgICAgICAgICAgICAgICAgIHdvcmtUYWdNYXAgPSBfc3RlcCR2YWx1ZS53b3JrVGFnTWFwO1xuICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAvLyBwYXRjaCgpIGlzIGNhbGxlZCBieSB0d28gcGxhY2VzOiAoMSkgdGhlIGhvb2sgYW5kICgyKSB0aGUgcmVuZGVyZXIgYmFja2VuZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgaXMgd2hhdCBpbXBsZW1lbnRzIGEgbWVzc2FnZSBxdWV1ZSwgc28gaXQncyB0aGUgb25seSBvbmUgdGhhdCBpbmplY3RzIG9uRXJyb3JPcldhcm5pbmcuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25FcnJvck9yV2FybmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3JPcldhcm5pbmcoY3VycmVudCwgbWV0aG9kLCAvLyBDb3B5IGFyZ3MgYmVmb3JlIHdlIG11dGF0ZSB0aGVtIChlLmcuIGFkZGluZyB0aGUgY29tcG9uZW50IHN0YWNrKVxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc2xpY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEFwcGVuZFdhcm5pbmdTdGFjaykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50U3RhY2sgPSBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya1RhZ01hcCwgY3VycmVudCwgY3VycmVudERpc3BhdGNoZXJSZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRTdGFjayAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdHJpY3RNb2RlT3ZlcnJpZGUoYXJncywgbWV0aG9kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IFwiXCIuY29uY2F0KGFyZ3NbMF0sIFwiICVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNvbXBvbmVudFN0YWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNvbXBvbmVudFN0YWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IGEgRGV2VG9vbHMgb3IgUmVhY3QgaW50ZXJuYWwgZXJyb3IgaW50ZXJmZXJlIHdpdGggbG9nZ2luZy5cbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbnNvbGVTZXR0aW5nc1JlZi5icmVha09uQ29uc29sZUVycm9ycykge1xuICAgICAgICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIHdpdGggUmVhY3QgRGV2VG9vbHMgLS0tXG4gICAgICAgICAgICAvLyBUaGlzIGRlYnVnZ2VyIHN0YXRlbWVudCBtZWFucyB0aGF0IHlvdSd2ZSBlbmFibGVkIHRoZSBcImJyZWFrIG9uIHdhcm5pbmdzXCIgZmVhdHVyZS5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJvd3NlcidzIENhbGwgU3RhY2sgcGFuZWwgdG8gc3RlcCBvdXQgb2YgdGhpcyBvdmVycmlkZSBmdW5jdGlvbi1cbiAgICAgICAgICAgIC8vIHRvIHdoZXJlIHRoZSBvcmlnaW5hbCB3YXJuaW5nIG9yIGVycm9yIHdhcyBsb2dnZWQuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVidWdnZXJcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb3ZlcnJpZGVNZXRob2QuX19SRUFDVF9ERVZUT09MU19PUklHSU5BTF9NRVRIT0RfXyA9IG9yaWdpbmFsTWV0aG9kO1xuICAgICAgICBvcmlnaW5hbE1ldGhvZC5fX1JFQUNUX0RFVlRPT0xTX09WRVJSSURFX01FVEhPRF9fID0gb3ZlcnJpZGVNZXRob2Q7XG4gICAgICAgIHRhcmdldENvbnNvbGVbbWV0aG9kXSA9IG92ZXJyaWRlTWV0aG9kO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdW5wYXRjaCgpO1xuICB9XG59IC8vIFJlbW92ZWQgY29tcG9uZW50IHN0YWNrIHBhdGNoIGZyb20gY29uc29sZSBtZXRob2RzLlxuXG5mdW5jdGlvbiB1bnBhdGNoKCkge1xuICBpZiAodW5wYXRjaEZuICE9PSBudWxsKSB7XG4gICAgdW5wYXRjaEZuKCk7XG4gICAgdW5wYXRjaEZuID0gbnVsbDtcbiAgfVxufVxudmFyIHVucGF0Y2hGb3JTdHJpY3RNb2RlRm4gPSBudWxsOyAvLyBOT1RFOiBLRUVQIElOIFNZTkMgd2l0aCBzcmMvaG9vay5qczpwYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlXG5cbmZ1bmN0aW9uIHBhdGNoRm9yU3RyaWN0TW9kZSgpIHtcbiAgaWYgKGNvbnNvbGVNYW5hZ2VkQnlEZXZUb29sc0R1cmluZ1N0cmljdE1vZGUpIHtcbiAgICB2YXIgb3ZlcnJpZGVDb25zb2xlTWV0aG9kcyA9IFsnZXJyb3InLCAnZ3JvdXAnLCAnZ3JvdXBDb2xsYXBzZWQnLCAnaW5mbycsICdsb2cnLCAndHJhY2UnLCAnd2FybiddO1xuXG4gICAgaWYgKHVucGF0Y2hGb3JTdHJpY3RNb2RlRm4gIT09IG51bGwpIHtcbiAgICAgIC8vIERvbid0IHBhdGNoIHR3aWNlLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvcmlnaW5hbENvbnNvbGVNZXRob2RzID0ge307XG5cbiAgICB1bnBhdGNoRm9yU3RyaWN0TW9kZUZuID0gZnVuY3Rpb24gdW5wYXRjaEZvclN0cmljdE1vZGVGbigpIHtcbiAgICAgIGZvciAodmFyIF9tZXRob2QzIGluIG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0YXJnZXRDb25zb2xlW19tZXRob2QzXSA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbX21ldGhvZDNdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgb3ZlcnJpZGVDb25zb2xlTWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbbWV0aG9kXSA9IHRhcmdldENvbnNvbGVbbWV0aG9kXS5fX1JFQUNUX0RFVlRPT0xTX1NUUklDVF9NT0RFX09SSUdJTkFMX01FVEhPRF9fID8gdGFyZ2V0Q29uc29sZVttZXRob2RdLl9fUkVBQ1RfREVWVE9PTFNfU1RSSUNUX01PREVfT1JJR0lOQUxfTUVUSE9EX18gOiB0YXJnZXRDb25zb2xlW21ldGhvZF07IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgICAgICB2YXIgb3ZlcnJpZGVNZXRob2QgPSBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCgpIHtcbiAgICAgICAgICBpZiAoIWNvbnNvbGVTZXR0aW5nc1JlZi5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpbSB0aGUgdGV4dCBjb2xvciBvZiB0aGUgZG91YmxlIGxvZ3MgaWYgd2UncmUgbm90XG4gICAgICAgICAgICAvLyBoaWRpbmcgdGhlbS5cbiAgICAgICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QoRElNTUVEX05PREVfQ09OU09MRV9DT0xPUiwgZm9ybWF0LmFwcGx5KHZvaWQgMCwgYXJncykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGNvbG9yID0gZ2V0Q29uc29sZUNvbG9yKG1ldGhvZCk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QuYXBwbHkodm9pZCAwLCBjb25zb2xlX3RvQ29uc3VtYWJsZUFycmF5KGZvcm1hdFdpdGhTdHlsZXMoYXJncywgXCJjb2xvcjogXCIuY29uY2F0KGNvbG9yKSkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignQ29uc29sZSBjb2xvciBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG92ZXJyaWRlTWV0aG9kLl9fUkVBQ1RfREVWVE9PTFNfU1RSSUNUX01PREVfT1JJR0lOQUxfTUVUSE9EX18gPSBvcmlnaW5hbE1ldGhvZDtcbiAgICAgICAgb3JpZ2luYWxNZXRob2QuX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PVkVSUklERV9NRVRIT0RfXyA9IG92ZXJyaWRlTWV0aG9kO1xuICAgICAgICB0YXJnZXRDb25zb2xlW21ldGhvZF0gPSBvdmVycmlkZU1ldGhvZDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH0pO1xuICB9XG59IC8vIE5PVEU6IEtFRVAgSU4gU1lOQyB3aXRoIHNyYy9ob29rLmpzOnVucGF0Y2hDb25zb2xlRm9ySW5pdGlhbFJlbmRlckluU3RyaWN0TW9kZVxuXG5mdW5jdGlvbiB1bnBhdGNoRm9yU3RyaWN0TW9kZSgpIHtcbiAgaWYgKGNvbnNvbGVNYW5hZ2VkQnlEZXZUb29sc0R1cmluZ1N0cmljdE1vZGUpIHtcbiAgICBpZiAodW5wYXRjaEZvclN0cmljdE1vZGVGbiAhPT0gbnVsbCkge1xuICAgICAgdW5wYXRjaEZvclN0cmljdE1vZGVGbigpO1xuICAgICAgdW5wYXRjaEZvclN0cmljdE1vZGVGbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwYXRjaENvbnNvbGVVc2luZ1dpbmRvd1ZhbHVlcygpIHtcbiAgdmFyIF9jYXN0Qm9vbCwgX2Nhc3RCb29sMiwgX2Nhc3RCb29sMywgX2Nhc3RCb29sNCwgX2Nhc3RCcm93c2VyVGhlbWU7XG5cbiAgdmFyIGFwcGVuZENvbXBvbmVudFN0YWNrID0gKF9jYXN0Qm9vbCA9IGNhc3RCb29sKHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0FQUEVORF9DT01QT05FTlRfU1RBQ0tfXykpICE9PSBudWxsICYmIF9jYXN0Qm9vbCAhPT0gdm9pZCAwID8gX2Nhc3RCb29sIDogdHJ1ZTtcbiAgdmFyIGJyZWFrT25Db25zb2xlRXJyb3JzID0gKF9jYXN0Qm9vbDIgPSBjYXN0Qm9vbCh3aW5kb3cuX19SRUFDVF9ERVZUT09MU19CUkVBS19PTl9DT05TT0xFX0VSUk9SU19fKSkgIT09IG51bGwgJiYgX2Nhc3RCb29sMiAhPT0gdm9pZCAwID8gX2Nhc3RCb29sMiA6IGZhbHNlO1xuICB2YXIgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzID0gKF9jYXN0Qm9vbDMgPSBjYXN0Qm9vbCh3aW5kb3cuX19SRUFDVF9ERVZUT09MU19TSE9XX0lOTElORV9XQVJOSU5HU19BTkRfRVJST1JTX18pKSAhPT0gbnVsbCAmJiBfY2FzdEJvb2wzICE9PSB2b2lkIDAgPyBfY2FzdEJvb2wzIDogdHJ1ZTtcbiAgdmFyIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSA9IChfY2FzdEJvb2w0ID0gY2FzdEJvb2wod2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfSElERV9DT05TT0xFX0xPR1NfSU5fU1RSSUNUX01PREVfXykpICE9PSBudWxsICYmIF9jYXN0Qm9vbDQgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbDQgOiBmYWxzZTtcbiAgdmFyIGJyb3dzZXJUaGVtZSA9IChfY2FzdEJyb3dzZXJUaGVtZSA9IGNhc3RCcm93c2VyVGhlbWUod2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQlJPV1NFUl9USEVNRV9fKSkgIT09IG51bGwgJiYgX2Nhc3RCcm93c2VyVGhlbWUgIT09IHZvaWQgMCA/IF9jYXN0QnJvd3NlclRoZW1lIDogJ2RhcmsnO1xuICBwYXRjaCh7XG4gICAgYXBwZW5kQ29tcG9uZW50U3RhY2s6IGFwcGVuZENvbXBvbmVudFN0YWNrLFxuICAgIGJyZWFrT25Db25zb2xlRXJyb3JzOiBicmVha09uQ29uc29sZUVycm9ycyxcbiAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnM6IHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyxcbiAgICBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGU6IGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSxcbiAgICBicm93c2VyVGhlbWU6IGJyb3dzZXJUaGVtZVxuICB9KTtcbn0gLy8gQWZ0ZXIgcmVjZWl2aW5nIGNhY2hlZCBjb25zb2xlIHBhdGNoIHNldHRpbmdzIGZyb20gUmVhY3QgTmF0aXZlLCB3ZSBzZXQgdGhlbSBvbiB3aW5kb3cuXG4vLyBXaGVuIHRoZSBjb25zb2xlIGlzIGluaXRpYWxseSBwYXRjaGVkIChpbiByZW5kZXJlci5qcyBhbmQgaG9vay5qcyksIHRoZXNlIHZhbHVlcyBhcmUgcmVhZC5cbi8vIFRoZSBicm93c2VyIGV4dGVuc2lvbiAoZXRjLikgc2V0cyB0aGVzZSB2YWx1ZXMgb24gd2luZG93LCBidXQgdGhyb3VnaCBhbm90aGVyIG1ldGhvZC5cblxuZnVuY3Rpb24gd3JpdGVDb25zb2xlUGF0Y2hTZXR0aW5nc1RvV2luZG93KHNldHRpbmdzKSB7XG4gIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0FQUEVORF9DT01QT05FTlRfU1RBQ0tfXyA9IHNldHRpbmdzLmFwcGVuZENvbXBvbmVudFN0YWNrO1xuICB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19CUkVBS19PTl9DT05TT0xFX0VSUk9SU19fID0gc2V0dGluZ3MuYnJlYWtPbkNvbnNvbGVFcnJvcnM7XG4gIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX1NIT1dfSU5MSU5FX1dBUk5JTkdTX0FORF9FUlJPUlNfXyA9IHNldHRpbmdzLnNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycztcbiAgd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfSElERV9DT05TT0xFX0xPR1NfSU5fU1RSSUNUX01PREVfXyA9IHNldHRpbmdzLmhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZTtcbiAgd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQlJPV1NFUl9USEVNRV9fID0gc2V0dGluZ3MuYnJvd3NlclRoZW1lO1xufVxuZnVuY3Rpb24gaW5zdGFsbENvbnNvbGVGdW5jdGlvbnNUb1dpbmRvdygpIHtcbiAgd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQ09OU09MRV9GVU5DVElPTlNfXyA9IHtcbiAgICBwYXRjaENvbnNvbGVVc2luZ1dpbmRvd1ZhbHVlczogcGF0Y2hDb25zb2xlVXNpbmdXaW5kb3dWYWx1ZXMsXG4gICAgcmVnaXN0ZXJSZW5kZXJlcldpdGhDb25zb2xlOiByZWdpc3RlclJlbmRlcmVyXG4gIH07XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9icmlkZ2UuanNcbmZ1bmN0aW9uIGJyaWRnZV90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IGJyaWRnZV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgYnJpZGdlX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBicmlkZ2VfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYnJpZGdlX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gYnJpZGdlX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgYnJpZGdlX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IGJyaWRnZV91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IGJyaWRnZV9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIGJyaWRnZV9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gYnJpZGdlX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYnJpZGdlX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBicmlkZ2VfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIGJyaWRnZV9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBicmlkZ2VfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBicmlkZ2VfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIGJyaWRnZV9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBicmlkZ2VfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBicmlkZ2VfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIGJyaWRnZV9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGJyaWRnZV9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgYnJpZGdlX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKGJyaWRnZV90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBicmlkZ2VfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxudmFyIEJBVENIX0RVUkFUSU9OID0gMTAwOyAvLyBUaGlzIG1lc3NhZ2Ugc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBEZXZUb29scyBwcm90b2NvbCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLFxuLy8gYXMgd2VsbCBhcyB0aGUgZWFybGllc3QgTlBNIHZlcnNpb24gKGUuZy4gXCI0LjEzLjBcIikgdGhhdCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgb24gdGhlIGZyb250ZW5kLlxuLy8gVGhpcyBlbmFibGVzIGFuIG9sZGVyIGZyb250ZW5kIHRvIGRpc3BsYXkgYW4gdXBncmFkZSBtZXNzYWdlIHRvIHVzZXJzIGZvciBhIG5ld2VyLCB1bnN1cHBvcnRlZCBiYWNrZW5kLlxuXG4vLyBCdW1wIHByb3RvY29sIHZlcnNpb24gd2hlbmV2ZXIgYSBiYWNrd2FyZHMgYnJlYWtpbmcgY2hhbmdlIGlzIG1hZGVcbi8vIGluIHRoZSBtZXNzYWdlcyBzZW50IGJldHdlZW4gQmFja2VuZEJyaWRnZSBhbmQgRnJvbnRlbmRCcmlkZ2UuXG4vLyBUaGlzIG1hcHBpbmcgaXMgZW1iZWRkZWQgaW4gYm90aCBmcm9udGVuZCBhbmQgYmFja2VuZCBidWlsZHMuXG4vL1xuLy8gVGhlIGJhY2tlbmQgcHJvdG9jb2wgd2lsbCBhbHdheXMgYmUgdGhlIGxhdGVzdCBlbnRyeSBpbiB0aGUgQlJJREdFX1BST1RPQ09MIGFycmF5LlxuLy9cbi8vIFdoZW4gYW4gb2xkZXIgZnJvbnRlbmQgY29ubmVjdHMgdG8gYSBuZXdlciBiYWNrZW5kLFxuLy8gdGhlIGJhY2tlbmQgY2FuIHNlbmQgdGhlIG1pbk5wbVZlcnNpb24gYW5kIHRoZSBmcm9udGVuZCBjYW4gZGlzcGxheSBhbiBOUE0gdXBncmFkZSBwcm9tcHQuXG4vL1xuLy8gV2hlbiBhIG5ld2VyIGZyb250ZW5kIGNvbm5lY3RzIHdpdGggYW4gb2xkZXIgcHJvdG9jb2wgdmVyc2lvbixcbi8vIHRoZSBmcm9udGVuZCBjYW4gdXNlIHRoZSBlbWJlZGRlZCBtaW5OcG1WZXJzaW9uL21heE5wbVZlcnNpb24gdmFsdWVzIHRvIGRpc3BsYXkgYSBkb3duZ3JhZGUgcHJvbXB0LlxudmFyIEJSSURHRV9QUk9UT0NPTCA9IFsvLyBUaGlzIHZlcnNpb24gdGVjaG5pY2FsbHkgbmV2ZXIgZXhpc3RlZCxcbi8vIGJ1dCBhIGJhY2t3YXJkcyBicmVha2luZyBjaGFuZ2Ugd2FzIGFkZGVkIGluIDQuMTEsXG4vLyBzbyB0aGUgc2FmZXN0IGd1ZXNzIHRvIGRvd25ncmFkZSB0aGUgZnJvbnRlbmQgd291bGQgYmUgdG8gdmVyc2lvbiA0LjEwLlxue1xuICB2ZXJzaW9uOiAwLFxuICBtaW5OcG1WZXJzaW9uOiAnXCI8NC4xMS4wXCInLFxuICBtYXhOcG1WZXJzaW9uOiAnXCI8NC4xMS4wXCInXG59LCAvLyBWZXJzaW9ucyA0LjExLngg4oCTIDQuMTIueCBjb250YWluZWQgdGhlIGJhY2t3YXJkcyBicmVha2luZyBjaGFuZ2UsXG4vLyBidXQgd2UgZGlkbid0IGFkZCB0aGUgXCJmaXhcIiBvZiBjaGVja2luZyB0aGUgcHJvdG9jb2wgdmVyc2lvbiB1bnRpbCA0LjEzLFxuLy8gc28gd2UgZG9uJ3QgcmVjb21tZW5kIGRvd25ncmFkaW5nIHRvIDQuMTEgb3IgNC4xMi5cbntcbiAgdmVyc2lvbjogMSxcbiAgbWluTnBtVmVyc2lvbjogJzQuMTMuMCcsXG4gIG1heE5wbVZlcnNpb246ICc0LjIxLjAnXG59LCAvLyBWZXJzaW9uIDIgYWRkcyBhIFN0cmljdE1vZGUtZW5hYmxlZCBhbmQgc3VwcG9ydHMtU3RyaWN0TW9kZSBiaXRzIHRvIGFkZC1yb290IG9wZXJhdGlvbi5cbntcbiAgdmVyc2lvbjogMixcbiAgbWluTnBtVmVyc2lvbjogJzQuMjIuMCcsXG4gIG1heE5wbVZlcnNpb246IG51bGxcbn1dO1xudmFyIGN1cnJlbnRCcmlkZ2VQcm90b2NvbCA9IEJSSURHRV9QUk9UT0NPTFtCUklER0VfUFJPVE9DT0wubGVuZ3RoIC0gMV07XG5cbnZhciBCcmlkZ2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKEJyaWRnZSwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihCcmlkZ2UpO1xuXG4gIGZ1bmN0aW9uIEJyaWRnZSh3YWxsKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgYnJpZGdlX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJyaWRnZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgYnJpZGdlX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9pc1NodXRkb3duXCIsIGZhbHNlKTtcblxuICAgIGJyaWRnZV9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfbWVzc2FnZVF1ZXVlXCIsIFtdKTtcblxuICAgIGJyaWRnZV9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfdGltZW91dElEXCIsIG51bGwpO1xuXG4gICAgYnJpZGdlX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl93YWxsVW5saXN0ZW5cIiwgbnVsbCk7XG5cbiAgICBicmlkZ2VfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2ZsdXNoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYWZ0ZXIgdGhlIGJyaWRnZSBpcyBtYXJrZWQgYXMgZGVzdHJveWVkIGluIHNodXRkb3duIHNlcXVlbmNlLFxuICAgICAgLy8gc28gd2UgZG8gbm90IGJhaWwgb3V0IGlmIHRoZSBicmlkZ2UgbWFya2VkIGFzIGRlc3Ryb3llZC5cbiAgICAgIC8vIEl0IGlzIGEgcHJpdmF0ZSBtZXRob2QgdGhhdCB0aGUgYnJpZGdlIGVuc3VyZXMgaXMgb25seSBjYWxsZWQgYXQgdGhlIHJpZ2h0IHRpbWVzLlxuICAgICAgaWYgKF90aGlzLl90aW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLl90aW1lb3V0SUQpO1xuICAgICAgICBfdGhpcy5fdGltZW91dElEID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLl9tZXNzYWdlUXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMuX21lc3NhZ2VRdWV1ZS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBfdGhpcyRfd2FsbDtcblxuICAgICAgICAgIChfdGhpcyRfd2FsbCA9IF90aGlzLl93YWxsKS5zZW5kLmFwcGx5KF90aGlzJF93YWxsLCBbX3RoaXMuX21lc3NhZ2VRdWV1ZVtpXV0uY29uY2F0KGJyaWRnZV90b0NvbnN1bWFibGVBcnJheShfdGhpcy5fbWVzc2FnZVF1ZXVlW2kgKyAxXSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9tZXNzYWdlUXVldWUubGVuZ3RoID0gMDsgLy8gQ2hlY2sgYWdhaW4gZm9yIHF1ZXVlZCBtZXNzYWdlcyBpbiBCQVRDSF9EVVJBVElPTiBtcy4gVGhpcyB3aWxsIGtlZXBcbiAgICAgICAgLy8gZmx1c2hpbmcgaW4gYSBsb29wIGFzIGxvbmcgYXMgbWVzc2FnZXMgY29udGludWUgdG8gYmUgYWRkZWQuIE9uY2Ugbm9cbiAgICAgICAgLy8gbW9yZSBhcmUsIHRoZSB0aW1lciBleHBpcmVzLlxuXG4gICAgICAgIF90aGlzLl90aW1lb3V0SUQgPSBzZXRUaW1lb3V0KF90aGlzLl9mbHVzaCwgQkFUQ0hfRFVSQVRJT04pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYnJpZGdlX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm92ZXJyaWRlVmFsdWVBdFBhdGhcIiwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWYucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZi5yZW5kZXJlcklELFxuICAgICAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgX3RoaXMuc2VuZCgnb3ZlcnJpZGVDb250ZXh0Jywge1xuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgICAgICB3YXNGb3J3YXJkZWQ6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICBfdGhpcy5zZW5kKCdvdmVycmlkZUhvb2tTdGF0ZScsIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICAgICAgd2FzRm9yd2FyZGVkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwcm9wcyc6XG4gICAgICAgICAgX3RoaXMuc2VuZCgnb3ZlcnJpZGVQcm9wcycsIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICAgICAgd2FzRm9yd2FyZGVkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzdGF0ZSc6XG4gICAgICAgICAgX3RoaXMuc2VuZCgnb3ZlcnJpZGVTdGF0ZScsIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICAgICAgd2FzRm9yd2FyZGVkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF90aGlzLl93YWxsID0gd2FsbDtcbiAgICBfdGhpcy5fd2FsbFVubGlzdGVuID0gd2FsbC5saXN0ZW4oZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZXZlbnQpIHtcbiAgICAgICAgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykuZW1pdChtZXNzYWdlLmV2ZW50LCBtZXNzYWdlLnBheWxvYWQpO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vIFRlbXBvcmFyaWx5IHN1cHBvcnQgb2xkZXIgc3RhbmRhbG9uZSBmcm9udC1lbmRzIHNlbmRpbmcgY29tbWFuZHMgdG8gbmV3ZXIgZW1iZWRkZWQgYmFja2VuZHMuXG4gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIFJlYWN0IE5hdGl2ZSBlbWJlZHMgdGhlIFJlYWN0IERldlRvb2xzIGJhY2tlbmQsXG4gICAgLy8gYnV0IGNhbm5vdCBjb250cm9sIHdoaWNoIHZlcnNpb24gb2YgdGhlIGZyb250ZW5kIHVzZXJzIHVzZS5cblxuICAgIF90aGlzLmFkZExpc3RlbmVyKCdvdmVycmlkZVZhbHVlQXRQYXRoJywgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH0gLy8gTGlzdGVuaW5nIGRpcmVjdGx5IHRvIHRoZSB3YWxsIGlzbid0IGFkdmlzZWQuXG4gIC8vIEl0IGNhbiBiZSB1c2VkIHRvIGxpc3RlbiBmb3IgbGVnYWN5ICh2MykgbWVzc2FnZXMgKHNpbmNlIHRoZXkgdXNlIGEgZGlmZmVyZW50IGZvcm1hdCkuXG5cblxuICBicmlkZ2VfY3JlYXRlQ2xhc3MoQnJpZGdlLCBbe1xuICAgIGtleTogXCJzZW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNlbmQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pc1NodXRkb3duKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkNhbm5vdCBzZW5kIG1lc3NhZ2UgXFxcIlwiLmNvbmNhdChldmVudCwgXCJcXFwiIHRocm91Z2ggYSBCcmlkZ2UgdGhhdCBoYXMgYmVlbiBzaHV0ZG93bi5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIFdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2U6XG4gICAgICAvLyAtIHdlIGFkZCBpdCB0byBvdXIgcXVldWUgb2YgbWVzc2FnZXMgdG8gYmUgc2VudFxuICAgICAgLy8gLSBpZiB0aGVyZSBoYXNuJ3QgYmVlbiBhIG1lc3NhZ2UgcmVjZW50bHksIHdlIHNldCBhIHRpbWVyIGZvciAwIG1zIGluXG4gICAgICAvLyAgIHRoZSBmdXR1cmUsIGFsbG93aW5nIGFsbCBtZXNzYWdlcyBjcmVhdGVkIGluIHRoZSBzYW1lIHRpY2sgdG8gYmUgc2VudFxuICAgICAgLy8gICB0b2dldGhlclxuICAgICAgLy8gLSBpZiB0aGVyZSAqaGFzKiBiZWVuIGEgbWVzc2FnZSBmbHVzaGVkIGluIHRoZSBsYXN0IEJBVENIX0RVUkFUSU9OIG1zXG4gICAgICAvLyAgIChvciB3ZSdyZSB3YWl0aW5nIGZvciBvdXIgc2V0VGltZW91dC0wIHRvIGZpcmUpLCB0aGVuIF90aW1lb3V0SUQgd2lsbFxuICAgICAgLy8gICBiZSBzZXQsIGFuZCB3ZSdsbCBzaW1wbHkgYWRkIHRvIHRoZSBxdWV1ZSBhbmQgd2FpdCBmb3IgdGhhdFxuXG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwYXlsb2FkID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgcGF5bG9hZFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX21lc3NhZ2VRdWV1ZS5wdXNoKGV2ZW50LCBwYXlsb2FkKTtcblxuICAgICAgaWYgKCF0aGlzLl90aW1lb3V0SUQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dElEID0gc2V0VGltZW91dCh0aGlzLl9mbHVzaCwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNodXRkb3duXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNodXRkb3duKCkge1xuICAgICAgaWYgKHRoaXMuX2lzU2h1dGRvd24pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdCcmlkZ2Ugd2FzIGFscmVhZHkgc2h1dGRvd24uJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gUXVldWUgdGhlIHNodXRkb3duIG91dGdvaW5nIG1lc3NhZ2UgZm9yIHN1YnNjcmliZXJzLlxuXG5cbiAgICAgIHRoaXMuZW1pdCgnc2h1dGRvd24nKTtcbiAgICAgIHRoaXMuc2VuZCgnc2h1dGRvd24nKTsgLy8gTWFyayB0aGlzIGJyaWRnZSBhcyBkZXN0cm95ZWQsIGkuZS4gZGlzYWJsZSBpdHMgcHVibGljIEFQSS5cblxuICAgICAgdGhpcy5faXNTaHV0ZG93biA9IHRydWU7IC8vIERpc2FibGUgdGhlIEFQSSBpbmhlcml0ZWQgZnJvbSBFdmVudEVtaXR0ZXIgdGhhdCBjYW4gYWRkIG1vcmUgbGlzdGVuZXJzIGFuZCBzZW5kIG1vcmUgbWVzc2FnZXMuXG4gICAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gVGhpcyBwcm9wZXJ0eSBpcyBub3Qgd3JpdGFibGUuXG5cbiAgICAgIHRoaXMuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7fTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIFRoaXMgcHJvcGVydHkgaXMgbm90IHdyaXRhYmxlLlxuXG5cbiAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uICgpIHt9OyAvLyBOT1RFOiBUaGVyZSdzIGFsc28gRXZlbnRFbWl0dGVyIEFQSSBsaWtlIGBvbmAgYW5kIGBwcmVwZW5kTGlzdGVuZXJgIHRoYXQgd2UgZGlkbid0IGFkZCB0byBvdXIgRmxvdyB0eXBlIG9mIEV2ZW50RW1pdHRlci5cbiAgICAgIC8vIFVuc3Vic2NyaWJlIHRoaXMgYnJpZGdlIGluY29taW5nIG1lc3NhZ2UgbGlzdGVuZXJzIHRvIGJlIHN1cmUsIGFuZCBzbyB0aGV5IGRvbid0IGhhdmUgdG8gZG8gdGhhdC5cblxuXG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpOyAvLyBTdG9wIGFjY2VwdGluZyBhbmQgZW1pdHRpbmcgaW5jb21pbmcgbWVzc2FnZXMgZnJvbSB0aGUgd2FsbC5cblxuICAgICAgdmFyIHdhbGxVbmxpc3RlbiA9IHRoaXMuX3dhbGxVbmxpc3RlbjtcblxuICAgICAgaWYgKHdhbGxVbmxpc3Rlbikge1xuICAgICAgICB3YWxsVW5saXN0ZW4oKTtcbiAgICAgIH0gLy8gU3luY2hyb25vdXNseSBmbHVzaCBhbGwgcXVldWVkIG91dGdvaW5nIG1lc3NhZ2VzLlxuICAgICAgLy8gQXQgdGhpcyBzdGVwIHRoZSBzdWJzY3JpYmVycycgY29kZSBtYXkgcnVuIGluIHRoaXMgY2FsbCBzdGFjay5cblxuXG4gICAgICBkbyB7XG4gICAgICAgIHRoaXMuX2ZsdXNoKCk7XG4gICAgICB9IHdoaWxlICh0aGlzLl9tZXNzYWdlUXVldWUubGVuZ3RoKTsgLy8gTWFrZSBzdXJlIG9uY2UgYWdhaW4gdGhhdCB0aGVyZSBpcyBubyBkYW5nbGluZyB0aW1lci5cblxuXG4gICAgICBpZiAodGhpcy5fdGltZW91dElEICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SUQpO1xuICAgICAgICB0aGlzLl90aW1lb3V0SUQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3YWxsXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd2FsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQnJpZGdlO1xufShFdmVudEVtaXR0ZXIpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHNyY19icmlkZ2UgPSAoQnJpZGdlKTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvYWdlbnQuanNcbmZ1bmN0aW9uIGFnZW50X3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgYWdlbnRfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IGFnZW50X3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBhZ2VudF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBhZ2VudF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGFnZW50X2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBhZ2VudF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGFnZW50X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBhZ2VudF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBhZ2VudF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBhZ2VudF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gYWdlbnRfc2V0UHJvdG90eXBlT2YobywgcCkgeyBhZ2VudF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gYWdlbnRfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gYWdlbnRfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGFnZW50X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IGFnZW50X2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBhZ2VudF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gYWdlbnRfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIGFnZW50X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoYWdlbnRfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gYWdlbnRfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIGFnZW50X2dldFByb3RvdHlwZU9mKG8pIHsgYWdlbnRfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gYWdlbnRfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gYWdlbnRfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cblxuXG5cblxuXG5cblxudmFyIGRlYnVnID0gZnVuY3Rpb24gZGVidWcobWV0aG9kTmFtZSkge1xuICBpZiAoX19ERUJVR19fKSB7XG4gICAgdmFyIF9jb25zb2xlO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgKF9jb25zb2xlID0gY29uc29sZSkubG9nLmFwcGx5KF9jb25zb2xlLCBbXCIlY0FnZW50ICVjXCIuY29uY2F0KG1ldGhvZE5hbWUpLCAnY29sb3I6IHB1cnBsZTsgZm9udC13ZWlnaHQ6IGJvbGQ7JywgJ2ZvbnQtd2VpZ2h0OiBib2xkOyddLmNvbmNhdChhcmdzKSk7XG4gIH1cbn07XG5cbnZhciBBZ2VudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBhZ2VudF9pbmhlcml0cyhBZ2VudCwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IGFnZW50X2NyZWF0ZVN1cGVyKEFnZW50KTtcblxuICBmdW5jdGlvbiBBZ2VudChicmlkZ2UpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBhZ2VudF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBZ2VudCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNQcm9maWxpbmdcIiwgZmFsc2UpO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zXCIsIGZhbHNlKTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX3JlbmRlcmVySW50ZXJmYWNlc1wiLCB7fSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9wZXJzaXN0ZWRTZWxlY3Rpb25cIiwgbnVsbCk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaFwiLCBudWxsKTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX3RyYWNlVXBkYXRlc0VuYWJsZWRcIiwgZmFsc2UpO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhckVycm9yc0FuZFdhcm5pbmdzXCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgcmVuZGVyZXJJRCA9IF9yZWYucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJFcnJvcnNBbmRXYXJuaW5ncygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhckVycm9yc0ZvckZpYmVySURcIiwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMi5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjIucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJFcnJvcnNGb3JGaWJlcklEKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJXYXJuaW5nc0ZvckZpYmVySURcIiwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMy5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjMucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb3B5RWxlbWVudFBhdGhcIiwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmNC5pZCxcbiAgICAgICAgICBwYXRoID0gX3JlZjQucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjQucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCIgZm9yIGVsZW1lbnQgXFxcIlwiKS5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUgPSByZW5kZXJlci5nZXRTZXJpYWxpemVkRWxlbWVudFZhbHVlQnlQYXRoKGlkLCBwYXRoKTtcblxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnc2F2ZVRvQ2xpcGJvYXJkJywgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlVuYWJsZSB0byBvYnRhaW4gc2VyaWFsaXplZCB2YWx1ZSBmb3IgZWxlbWVudCBcXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRlbGV0ZVBhdGhcIiwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICB2YXIgaG9va0lEID0gX3JlZjUuaG9va0lELFxuICAgICAgICAgIGlkID0gX3JlZjUuaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWY1LnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWY1LnJlbmRlcmVySUQsXG4gICAgICAgICAgdHlwZSA9IF9yZWY1LnR5cGU7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiIGZvciBlbGVtZW50IFxcXCJcIikuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIuZGVsZXRlUGF0aCh0eXBlLCBpZCwgaG9va0lELCBwYXRoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0QmFja2VuZFZlcnNpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZlcnNpb24gPSBcIjQuMjguNS1lZjhhODQwYmRcIjtcblxuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdiYWNrZW5kVmVyc2lvbicsIHZlcnNpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRCcmlkZ2VQcm90b2NvbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ2JyaWRnZVByb3RvY29sJywgY3VycmVudEJyaWRnZVByb3RvY29sKTtcbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0UHJvZmlsaW5nRGF0YVwiLCBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciByZW5kZXJlcklEID0gX3JlZjYucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCJcIikpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3Byb2ZpbGluZ0RhdGEnLCByZW5kZXJlci5nZXRQcm9maWxpbmdEYXRhKCkpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRQcm9maWxpbmdTdGF0dXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdwcm9maWxpbmdTdGF0dXMnLCBfdGhpcy5faXNQcm9maWxpbmcpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRPd25lcnNMaXN0XCIsIGZ1bmN0aW9uIChfcmVmNykge1xuICAgICAgdmFyIGlkID0gX3JlZjcuaWQsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWY3LnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiIGZvciBlbGVtZW50IFxcXCJcIikuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG93bmVycyA9IHJlbmRlcmVyLmdldE93bmVyc0xpc3QoaWQpO1xuXG4gICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnb3duZXJzTGlzdCcsIHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb3duZXJzOiBvd25lcnNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluc3BlY3RFbGVtZW50XCIsIGZ1bmN0aW9uIChfcmVmOCkge1xuICAgICAgdmFyIGZvcmNlRnVsbERhdGEgPSBfcmVmOC5mb3JjZUZ1bGxEYXRhLFxuICAgICAgICAgIGlkID0gX3JlZjguaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWY4LnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWY4LnJlbmRlcmVySUQsXG4gICAgICAgICAgcmVxdWVzdElEID0gX3JlZjgucmVxdWVzdElEO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnaW5zcGVjdGVkRWxlbWVudCcsIHJlbmRlcmVyLmluc3BlY3RFbGVtZW50KHJlcXVlc3RJRCwgaWQsIHBhdGgsIGZvcmNlRnVsbERhdGEpKTsgLy8gV2hlbiB1c2VyIHNlbGVjdHMgYW4gZWxlbWVudCwgc3RvcCB0cnlpbmcgdG8gcmVzdG9yZSB0aGUgc2VsZWN0aW9uLFxuICAgICAgICAvLyBhbmQgaW5zdGVhZCByZW1lbWJlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gZm9yIHRoZSBuZXh0IHJlbG9hZC5cblxuXG4gICAgICAgIGlmIChfdGhpcy5fcGVyc2lzdGVkU2VsZWN0aW9uTWF0Y2ggPT09IG51bGwgfHwgX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbk1hdGNoLmlkICE9PSBpZCkge1xuICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaCA9IG51bGw7XG4gICAgICAgICAgcmVuZGVyZXIuc2V0VHJhY2tlZFBhdGgobnVsbCk7XG5cbiAgICAgICAgICBfdGhpcy5fdGhyb3R0bGVkUGVyc2lzdFNlbGVjdGlvbihyZW5kZXJlcklELCBpZCk7XG4gICAgICAgIH0gLy8gVE9ETzogSWYgdGhlcmUgd2FzIGEgd2F5IHRvIGNoYW5nZSB0aGUgc2VsZWN0ZWQgRE9NIGVsZW1lbnRcbiAgICAgICAgLy8gaW4gbmF0aXZlIEVsZW1lbnRzIHRhYiB3aXRob3V0IGZvcmNpbmcgYSBzd2l0Y2ggdG8gaXQsIHdlJ2QgZG8gaXQgaGVyZS5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlcmUgaXMgYSB3YXkgdG8gZG8gdGhhdDpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtZGV2dG9vbHMtZXhwZXJpbWVudGFsL2lzc3Vlcy8xMDJcbiAgICAgICAgLy8gKFNldHRpbmcgJDAgZG9lc24ndCB3b3JrLCBhbmQgY2FsbGluZyBpbnNwZWN0KCkgc3dpdGNoZXMgdGhlIHRhYi4pXG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibG9nRWxlbWVudFRvQ29uc29sZVwiLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgIHZhciBpZCA9IF9yZWY5LmlkLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmOS5yZW5kZXJlcklEO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLmxvZ0VsZW1lbnRUb0NvbnNvbGUoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZUVycm9yXCIsIGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgICAgIHZhciBpZCA9IF9yZWYxMC5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjEwLnJlbmRlcmVySUQsXG4gICAgICAgICAgZm9yY2VFcnJvciA9IF9yZWYxMC5mb3JjZUVycm9yO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLm92ZXJyaWRlRXJyb3IoaWQsIGZvcmNlRXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZVN1c3BlbnNlXCIsIGZ1bmN0aW9uIChfcmVmMTEpIHtcbiAgICAgIHZhciBpZCA9IF9yZWYxMS5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjExLnJlbmRlcmVySUQsXG4gICAgICAgICAgZm9yY2VGYWxsYmFjayA9IF9yZWYxMS5mb3JjZUZhbGxiYWNrO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLm92ZXJyaWRlU3VzcGVuc2UoaWQsIGZvcmNlRmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZVZhbHVlQXRQYXRoXCIsIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICAgIHZhciBob29rSUQgPSBfcmVmMTIuaG9va0lELFxuICAgICAgICAgIGlkID0gX3JlZjEyLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMTIucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjEyLnJlbmRlcmVySUQsXG4gICAgICAgICAgdHlwZSA9IF9yZWYxMi50eXBlLFxuICAgICAgICAgIHZhbHVlID0gX3JlZjEyLnZhbHVlO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLm92ZXJyaWRlVmFsdWVBdFBhdGgodHlwZSwgaWQsIGhvb2tJRCwgcGF0aCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZUNvbnRleHRcIiwgZnVuY3Rpb24gKF9yZWYxMykge1xuICAgICAgdmFyIGlkID0gX3JlZjEzLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMTMucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjEzLnJlbmRlcmVySUQsXG4gICAgICAgICAgd2FzRm9yd2FyZGVkID0gX3JlZjEzLndhc0ZvcndhcmRlZCxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYxMy52YWx1ZTtcblxuICAgICAgLy8gRG9uJ3QgZm9yd2FyZCBhIG1lc3NhZ2UgdGhhdCdzIGFscmVhZHkgYmVlbiBmb3J3YXJkZWQgYnkgdGhlIGZyb250LWVuZCBCcmlkZ2UuXG4gICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgb3ZlcnJpZGUgY29tbWFuZCBvbmNlIVxuICAgICAgaWYgKCF3YXNGb3J3YXJkZWQpIHtcbiAgICAgICAgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICB0eXBlOiAnY29udGV4dCcsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZUhvb2tTdGF0ZVwiLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMTQuaWQsXG4gICAgICAgICAgaG9va0lEID0gX3JlZjE0Lmhvb2tJRCxcbiAgICAgICAgICBwYXRoID0gX3JlZjE0LnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYxNC5yZW5kZXJlcklELFxuICAgICAgICAgIHdhc0ZvcndhcmRlZCA9IF9yZWYxNC53YXNGb3J3YXJkZWQsXG4gICAgICAgICAgdmFsdWUgPSBfcmVmMTQudmFsdWU7XG5cbiAgICAgIC8vIERvbid0IGZvcndhcmQgYSBtZXNzYWdlIHRoYXQncyBhbHJlYWR5IGJlZW4gZm9yd2FyZGVkIGJ5IHRoZSBmcm9udC1lbmQgQnJpZGdlLlxuICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHByb2Nlc3MgdGhlIG92ZXJyaWRlIGNvbW1hbmQgb25jZSFcbiAgICAgIGlmICghd2FzRm9yd2FyZGVkKSB7XG4gICAgICAgIF90aGlzLm92ZXJyaWRlVmFsdWVBdFBhdGgoe1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgICAgdHlwZTogJ2hvb2tzJyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm92ZXJyaWRlUHJvcHNcIiwgZnVuY3Rpb24gKF9yZWYxNSkge1xuICAgICAgdmFyIGlkID0gX3JlZjE1LmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMTUucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjE1LnJlbmRlcmVySUQsXG4gICAgICAgICAgd2FzRm9yd2FyZGVkID0gX3JlZjE1Lndhc0ZvcndhcmRlZCxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYxNS52YWx1ZTtcblxuICAgICAgLy8gRG9uJ3QgZm9yd2FyZCBhIG1lc3NhZ2UgdGhhdCdzIGFscmVhZHkgYmVlbiBmb3J3YXJkZWQgYnkgdGhlIGZyb250LWVuZCBCcmlkZ2UuXG4gICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgb3ZlcnJpZGUgY29tbWFuZCBvbmNlIVxuICAgICAgaWYgKCF3YXNGb3J3YXJkZWQpIHtcbiAgICAgICAgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICB0eXBlOiAncHJvcHMnLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3ZlcnJpZGVTdGF0ZVwiLCBmdW5jdGlvbiAoX3JlZjE2KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMTYuaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWYxNi5wYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmMTYucmVuZGVyZXJJRCxcbiAgICAgICAgICB3YXNGb3J3YXJkZWQgPSBfcmVmMTYud2FzRm9yd2FyZGVkLFxuICAgICAgICAgIHZhbHVlID0gX3JlZjE2LnZhbHVlO1xuXG4gICAgICAvLyBEb24ndCBmb3J3YXJkIGEgbWVzc2FnZSB0aGF0J3MgYWxyZWFkeSBiZWVuIGZvcndhcmRlZCBieSB0aGUgZnJvbnQtZW5kIEJyaWRnZS5cbiAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBwcm9jZXNzIHRoZSBvdmVycmlkZSBjb21tYW5kIG9uY2UhXG4gICAgICBpZiAoIXdhc0ZvcndhcmRlZCkge1xuICAgICAgICBfdGhpcy5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICAgIHR5cGU6ICdzdGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWxvYWRBbmRQcm9maWxlXCIsIGZ1bmN0aW9uIChyZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlU2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSwgJ3RydWUnKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlU2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZLCByZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMgPyAndHJ1ZScgOiAnZmFsc2UnKTsgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG9ubHkgYmUgaGl0IGlmIHRoZSBzaGVsbCBoYXMgZXhwbGljaXRseSB0b2xkIHRoZSBTdG9yZSB0aGF0IGl0IHN1cHBvcnRzIHByb2ZpbGluZy5cbiAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIHNoZWxsIG11c3QgYWxzbyBsaXN0ZW4gZm9yIHRoaXMgc3BlY2lmaWMgbWVzc2FnZSB0byBrbm93IHdoZW4gaXQgbmVlZHMgdG8gcmVsb2FkIHRoZSBhcHAuXG4gICAgICAvLyBUaGUgYWdlbnQgY2FuJ3QgZG8gdGhpcyBpbiBhIHdheSB0aGF0IGlzIHJlbmRlcmVyIGFnbm9zdGljLlxuXG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3JlbG9hZEFwcEZvclByb2ZpbGluZycpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5hbWVQYXRoXCIsIGZ1bmN0aW9uIChfcmVmMTcpIHtcbiAgICAgIHZhciBob29rSUQgPSBfcmVmMTcuaG9va0lELFxuICAgICAgICAgIGlkID0gX3JlZjE3LmlkLFxuICAgICAgICAgIG5ld1BhdGggPSBfcmVmMTcubmV3UGF0aCxcbiAgICAgICAgICBvbGRQYXRoID0gX3JlZjE3Lm9sZFBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYxNy5yZW5kZXJlcklELFxuICAgICAgICAgIHR5cGUgPSBfcmVmMTcudHlwZTtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCIgZm9yIGVsZW1lbnQgXFxcIlwiKS5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5yZW5hbWVQYXRoKHR5cGUsIGlkLCBob29rSUQsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRUcmFjZVVwZGF0ZXNFbmFibGVkXCIsIGZ1bmN0aW9uICh0cmFjZVVwZGF0ZXNFbmFibGVkKSB7XG4gICAgICBfdGhpcy5fdHJhY2VVcGRhdGVzRW5hYmxlZCA9IHRyYWNlVXBkYXRlc0VuYWJsZWQ7XG4gICAgICB0b2dnbGVFbmFibGVkKHRyYWNlVXBkYXRlc0VuYWJsZWQpO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIF90aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcbiAgICAgICAgcmVuZGVyZXIuc2V0VHJhY2VVcGRhdGVzRW5hYmxlZCh0cmFjZVVwZGF0ZXNFbmFibGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3luY1NlbGVjdGlvbkZyb21OYXRpdmVFbGVtZW50c1BhbmVsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0YXJnZXQgPSB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLiQwO1xuXG4gICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZWxlY3ROb2RlKHRhcmdldCk7XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNodXRkb3duXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIENsZWFuIHVwIHRoZSBvdmVybGF5IGlmIHZpc2libGUsIGFuZCBhc3NvY2lhdGVkIGV2ZW50cy5cbiAgICAgIF90aGlzLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXJ0UHJvZmlsaW5nXCIsIGZ1bmN0aW9uIChyZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgIF90aGlzLl9yZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMgPSByZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnM7XG4gICAgICBfdGhpcy5faXNQcm9maWxpbmcgPSB0cnVlO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIF90aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcbiAgICAgICAgcmVuZGVyZXIuc3RhcnRQcm9maWxpbmcocmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdwcm9maWxpbmdTdGF0dXMnLCBfdGhpcy5faXNQcm9maWxpbmcpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9wUHJvZmlsaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLl9pc1Byb2ZpbGluZyA9IGZhbHNlO1xuICAgICAgX3RoaXMuX3JlY29yZENoYW5nZURlc2NyaXB0aW9ucyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIF90aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcbiAgICAgICAgcmVuZGVyZXIuc3RvcFByb2ZpbGluZygpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3Byb2ZpbGluZ1N0YXR1cycsIF90aGlzLl9pc1Byb2ZpbGluZyk7XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3BJbnNwZWN0aW5nTmF0aXZlXCIsIGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdzdG9wSW5zcGVjdGluZ05hdGl2ZScsIHNlbGVjdGVkKTtcbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RvcmVBc0dsb2JhbFwiLCBmdW5jdGlvbiAoX3JlZjE4KSB7XG4gICAgICB2YXIgY291bnQgPSBfcmVmMTguY291bnQsXG4gICAgICAgICAgaWQgPSBfcmVmMTguaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWYxOC5wYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmMTgucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCIgZm9yIGVsZW1lbnQgXFxcIlwiKS5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5zdG9yZUFzR2xvYmFsKGlkLCBwYXRoLCBjb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZUNvbnNvbGVQYXRjaFNldHRpbmdzXCIsIGZ1bmN0aW9uIChfcmVmMTkpIHtcbiAgICAgIHZhciBhcHBlbmRDb21wb25lbnRTdGFjayA9IF9yZWYxOS5hcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICAgICAgICBicmVha09uQ29uc29sZUVycm9ycyA9IF9yZWYxOS5icmVha09uQ29uc29sZUVycm9ycyxcbiAgICAgICAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMgPSBfcmVmMTkuc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzLFxuICAgICAgICAgIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSA9IF9yZWYxOS5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICAgICAgYnJvd3NlclRoZW1lID0gX3JlZjE5LmJyb3dzZXJUaGVtZTtcbiAgICAgIC8vIElmIHRoZSBmcm9udGVuZCBwcmVmZXJlbmNlcyBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBvciBpbiB0aGUgY2FzZSBvZiBSZWFjdCBOYXRpdmUtIGlmIHRoZSBiYWNrZW5kIGlzIGp1c3QgZmluZGluZyBvdXQgdGhlIHByZWZlcmVuY2VzLVxuICAgICAgLy8gdGhlbiByZWluc3RhbGwgdGhlIGNvbnNvbGUgb3ZlcnJpZGVzLlxuICAgICAgLy8gSXQncyBzYWZlIHRvIGNhbGwgYHBhdGNoQ29uc29sZWAgbXVsdGlwbGUgdGltZXMuXG4gICAgICBwYXRjaCh7XG4gICAgICAgIGFwcGVuZENvbXBvbmVudFN0YWNrOiBhcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICAgICAgYnJlYWtPbkNvbnNvbGVFcnJvcnM6IGJyZWFrT25Db25zb2xlRXJyb3JzLFxuICAgICAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnM6IHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyxcbiAgICAgICAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlOiBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICAgIGJyb3dzZXJUaGVtZTogYnJvd3NlclRoZW1lXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlQ29tcG9uZW50RmlsdGVyc1wiLCBmdW5jdGlvbiAoY29tcG9uZW50RmlsdGVycykge1xuICAgICAgZm9yICh2YXIgcmVuZGVyZXJJRCBpbiBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzKSB7XG4gICAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG4gICAgICAgIHJlbmRlcmVyLnVwZGF0ZUNvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInZpZXdBdHRyaWJ1dGVTb3VyY2VcIiwgZnVuY3Rpb24gKF9yZWYyMCkge1xuICAgICAgdmFyIGlkID0gX3JlZjIwLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMjAucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjIwLnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiIGZvciBlbGVtZW50IFxcXCJcIikuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIucHJlcGFyZVZpZXdBdHRyaWJ1dGVTb3VyY2UoaWQsIHBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ2aWV3RWxlbWVudFNvdXJjZVwiLCBmdW5jdGlvbiAoX3JlZjIxKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMjEuaWQsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYyMS5yZW5kZXJlcklEO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLnByZXBhcmVWaWV3RWxlbWVudFNvdXJjZShpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVHJhY2VVcGRhdGVzXCIsIGZ1bmN0aW9uIChub2Rlcykge1xuICAgICAgX3RoaXMuZW1pdCgndHJhY2VVcGRhdGVzJywgbm9kZXMpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZhc3RSZWZyZXNoU2NoZWR1bGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgICAgZGVidWcoJ29uRmFzdFJlZnJlc2hTY2hlZHVsZWQnKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdmYXN0UmVmcmVzaFNjaGVkdWxlZCcpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkhvb2tPcGVyYXRpb25zXCIsIGZ1bmN0aW9uIChvcGVyYXRpb25zKSB7XG4gICAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICAgIGRlYnVnKCdvbkhvb2tPcGVyYXRpb25zJywgXCIoXCIuY29uY2F0KG9wZXJhdGlvbnMubGVuZ3RoLCBcIikgW1wiKS5jb25jYXQob3BlcmF0aW9ucy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfSAvLyBUT0RPOlxuICAgICAgLy8gVGhlIGNocm9tZS5ydW50aW1lIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHRyYW5zZmVyYWJsZXM7IGl0IGZvcmNlcyBKU09OIHNlcmlhbGl6YXRpb24uXG4gICAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTkyNzEzNFxuICAgICAgLy9cbiAgICAgIC8vIFJlZ2FyZGluZyB0cmFuc2ZlcmFibGVzLCB0aGUgcG9zdE1lc3NhZ2UgZG9jIHN0YXRlczpcbiAgICAgIC8vIElmIHRoZSBvd25lcnNoaXAgb2YgYW4gb2JqZWN0IGlzIHRyYW5zZmVycmVkLCBpdCBiZWNvbWVzIHVudXNhYmxlIChuZXV0ZXJlZClcbiAgICAgIC8vIGluIHRoZSBjb250ZXh0IGl0IHdhcyBzZW50IGZyb20gYW5kIGJlY29tZXMgYXZhaWxhYmxlIG9ubHkgdG8gdGhlIHdvcmtlciBpdCB3YXMgc2VudCB0by5cbiAgICAgIC8vXG4gICAgICAvLyBFdmVuIHRob3VnaCBDaHJvbWUgaXMgZXZlbnR1YWxseSBKU09OIHNlcmlhbGl6aW5nIHRoZSBhcnJheSBidWZmZXIsXG4gICAgICAvLyB1c2luZyB0aGUgdHJhbnNmZXJhYmxlIGFwcHJvYWNoIGFsc28gc29tZXRpbWVzIGNhdXNlcyBpdCB0byB0aHJvdzpcbiAgICAgIC8vICAgRE9NRXhjZXB0aW9uOiBGYWlsZWQgdG8gZXhlY3V0ZSAncG9zdE1lc3NhZ2UnIG9uICdXaW5kb3cnOiBBcnJheUJ1ZmZlciBhdCBpbmRleCAwIGlzIGFscmVhZHkgbmV1dGVyZWQuXG4gICAgICAvL1xuICAgICAgLy8gU2VlIGJ1ZyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC1kZXZ0b29scy1leHBlcmltZW50YWwvaXNzdWVzLzI1XG4gICAgICAvL1xuICAgICAgLy8gVGhlIFN0b3JlIGhhcyBhIGZhbGxiYWNrIGluIHBsYWNlIHRoYXQgcGFyc2VzIHRoZSBtZXNzYWdlIGFzIEpTT04gaWYgdGhlIHR5cGUgaXNuJ3QgYW4gYXJyYXkuXG4gICAgICAvLyBGb3Igbm93IHRoZSBzaW1wbGVzdCBmaXggc2VlbXMgdG8gYmUgdG8gbm90IHRyYW5zZmVyIHRoZSBhcnJheS5cbiAgICAgIC8vIFRoaXMgd2lsbCBuZWdhdGl2ZWx5IGltcGFjdCBwZXJmb3JtYW5jZSBvbiBGaXJlZm94IHNvIGl0J3MgdW5mb3J0dW5hdGUsXG4gICAgICAvLyBidXQgdW50aWwgd2UncmUgYWJsZSB0byBmaXggdGhlIENocm9tZSBlcnJvciBtZW50aW9uZWQgYWJvdmUsIGl0IHNlZW1zIG5lY2Vzc2FyeS5cbiAgICAgIC8vXG4gICAgICAvLyB0aGlzLl9icmlkZ2Uuc2VuZCgnb3BlcmF0aW9ucycsIG9wZXJhdGlvbnMsIFtvcGVyYXRpb25zLmJ1ZmZlcl0pO1xuXG5cbiAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnb3BlcmF0aW9ucycsIG9wZXJhdGlvbnMpO1xuXG4gICAgICBpZiAoX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcmVuZGVyZXJJRCA9IG9wZXJhdGlvbnNbMF07XG5cbiAgICAgICAgaWYgKF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb24ucmVuZGVyZXJJRCA9PT0gcmVuZGVyZXJJRCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBzZWxlY3QgYSBkZWVwZXIgbWF0Y2ggZm9yIHRoZSBwZXJzaXN0ZWQgc2VsZWN0aW9uLlxuICAgICAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2TWF0Y2ggPSBfdGhpcy5fcGVyc2lzdGVkU2VsZWN0aW9uTWF0Y2g7XG4gICAgICAgICAgICB2YXIgbmV4dE1hdGNoID0gcmVuZGVyZXIuZ2V0QmVzdE1hdGNoRm9yVHJhY2tlZFBhdGgoKTtcbiAgICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaCA9IG5leHRNYXRjaDtcbiAgICAgICAgICAgIHZhciBwcmV2TWF0Y2hJRCA9IHByZXZNYXRjaCAhPT0gbnVsbCA/IHByZXZNYXRjaC5pZCA6IG51bGw7XG4gICAgICAgICAgICB2YXIgbmV4dE1hdGNoSUQgPSBuZXh0TWF0Y2ggIT09IG51bGwgPyBuZXh0TWF0Y2guaWQgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAocHJldk1hdGNoSUQgIT09IG5leHRNYXRjaElEKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0TWF0Y2hJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1vdmVkIGZvcndhcmQsIHVubG9ja2luZyBhIGRlZXBlciBub2RlLlxuICAgICAgICAgICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnc2VsZWN0RmliZXInLCBuZXh0TWF0Y2hJRCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5leHRNYXRjaCAhPT0gbnVsbCAmJiBuZXh0TWF0Y2guaXNGdWxsTWF0Y2gpIHtcbiAgICAgICAgICAgICAgLy8gV2UndmUganVzdCB1bmxvY2tlZCB0aGUgaW5uZXJtb3N0IHNlbGVjdGVkIG5vZGUuXG4gICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgdHJhY2tpbmcgaXQgZnVydGhlci5cbiAgICAgICAgICAgICAgX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlcmVyLnNldFRyYWNrZWRQYXRoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfdGhyb3R0bGVkUGVyc2lzdFNlbGVjdGlvblwiLCBsb2Rhc2hfdGhyb3R0bGVfZGVmYXVsdCgpKGZ1bmN0aW9uIChyZW5kZXJlcklELCBpZCkge1xuICAgICAgLy8gVGhpcyBpcyB0aHJvdHRsZWQsIHNvIGJvdGggcmVuZGVyZXIgYW5kIHNlbGVjdGVkIElEXG4gICAgICAvLyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGJ5IHRoZSB0aW1lIHdlIHJlYWQgdGhlbS5cbiAgICAgIC8vIFRoaXMgaXMgd2h5IHdlIG5lZWQgdGhlIGRlZmVuc2l2ZSBjaGVja3MgaGVyZS5cbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG4gICAgICB2YXIgcGF0aCA9IHJlbmRlcmVyICE9IG51bGwgPyByZW5kZXJlci5nZXRQYXRoRm9yRWxlbWVudChpZCkgOiBudWxsO1xuXG4gICAgICBpZiAocGF0aCAhPT0gbnVsbCkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZVNldEl0ZW0oU0VTU0lPTl9TVE9SQUdFX0xBU1RfU0VMRUNUSU9OX0tFWSwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgICAgcGF0aDogcGF0aFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZVJlbW92ZUl0ZW0oU0VTU0lPTl9TVE9SQUdFX0xBU1RfU0VMRUNUSU9OX0tFWSk7XG4gICAgICB9XG4gICAgfSwgMTAwMCkpO1xuXG4gICAgaWYgKHNlc3Npb25TdG9yYWdlR2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSkgPT09ICd0cnVlJykge1xuICAgICAgX3RoaXMuX3JlY29yZENoYW5nZURlc2NyaXB0aW9ucyA9IHNlc3Npb25TdG9yYWdlR2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZKSA9PT0gJ3RydWUnO1xuICAgICAgX3RoaXMuX2lzUHJvZmlsaW5nID0gdHJ1ZTtcbiAgICAgIHNlc3Npb25TdG9yYWdlUmVtb3ZlSXRlbShTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlUmVtb3ZlSXRlbShTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSk7XG4gICAgfVxuXG4gICAgdmFyIHBlcnNpc3RlZFNlbGVjdGlvblN0cmluZyA9IHNlc3Npb25TdG9yYWdlR2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfTEFTVF9TRUxFQ1RJT05fS0VZKTtcblxuICAgIGlmIChwZXJzaXN0ZWRTZWxlY3Rpb25TdHJpbmcgIT0gbnVsbCkge1xuICAgICAgX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbiA9IEpTT04ucGFyc2UocGVyc2lzdGVkU2VsZWN0aW9uU3RyaW5nKTtcbiAgICB9XG5cbiAgICBfdGhpcy5fYnJpZGdlID0gYnJpZGdlO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignY2xlYXJFcnJvcnNBbmRXYXJuaW5ncycsIF90aGlzLmNsZWFyRXJyb3JzQW5kV2FybmluZ3MpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignY2xlYXJFcnJvcnNGb3JGaWJlcklEJywgX3RoaXMuY2xlYXJFcnJvcnNGb3JGaWJlcklEKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2NsZWFyV2FybmluZ3NGb3JGaWJlcklEJywgX3RoaXMuY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignY29weUVsZW1lbnRQYXRoJywgX3RoaXMuY29weUVsZW1lbnRQYXRoKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2RlbGV0ZVBhdGgnLCBfdGhpcy5kZWxldGVQYXRoKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2dldEJhY2tlbmRWZXJzaW9uJywgX3RoaXMuZ2V0QmFja2VuZFZlcnNpb24pO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignZ2V0QnJpZGdlUHJvdG9jb2wnLCBfdGhpcy5nZXRCcmlkZ2VQcm90b2NvbCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdnZXRQcm9maWxpbmdEYXRhJywgX3RoaXMuZ2V0UHJvZmlsaW5nRGF0YSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdnZXRQcm9maWxpbmdTdGF0dXMnLCBfdGhpcy5nZXRQcm9maWxpbmdTdGF0dXMpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignZ2V0T3duZXJzTGlzdCcsIF90aGlzLmdldE93bmVyc0xpc3QpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignaW5zcGVjdEVsZW1lbnQnLCBfdGhpcy5pbnNwZWN0RWxlbWVudCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdsb2dFbGVtZW50VG9Db25zb2xlJywgX3RoaXMubG9nRWxlbWVudFRvQ29uc29sZSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdvdmVycmlkZUVycm9yJywgX3RoaXMub3ZlcnJpZGVFcnJvcik7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdvdmVycmlkZVN1c3BlbnNlJywgX3RoaXMub3ZlcnJpZGVTdXNwZW5zZSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdvdmVycmlkZVZhbHVlQXRQYXRoJywgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdyZWxvYWRBbmRQcm9maWxlJywgX3RoaXMucmVsb2FkQW5kUHJvZmlsZSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdyZW5hbWVQYXRoJywgX3RoaXMucmVuYW1lUGF0aCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdzZXRUcmFjZVVwZGF0ZXNFbmFibGVkJywgX3RoaXMuc2V0VHJhY2VVcGRhdGVzRW5hYmxlZCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdzdGFydFByb2ZpbGluZycsIF90aGlzLnN0YXJ0UHJvZmlsaW5nKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N0b3BQcm9maWxpbmcnLCBfdGhpcy5zdG9wUHJvZmlsaW5nKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N0b3JlQXNHbG9iYWwnLCBfdGhpcy5zdG9yZUFzR2xvYmFsKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N5bmNTZWxlY3Rpb25Gcm9tTmF0aXZlRWxlbWVudHNQYW5lbCcsIF90aGlzLnN5bmNTZWxlY3Rpb25Gcm9tTmF0aXZlRWxlbWVudHNQYW5lbCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdzaHV0ZG93bicsIF90aGlzLnNodXRkb3duKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3VwZGF0ZUNvbnNvbGVQYXRjaFNldHRpbmdzJywgX3RoaXMudXBkYXRlQ29uc29sZVBhdGNoU2V0dGluZ3MpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndXBkYXRlQ29tcG9uZW50RmlsdGVycycsIF90aGlzLnVwZGF0ZUNvbXBvbmVudEZpbHRlcnMpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndmlld0F0dHJpYnV0ZVNvdXJjZScsIF90aGlzLnZpZXdBdHRyaWJ1dGVTb3VyY2UpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndmlld0VsZW1lbnRTb3VyY2UnLCBfdGhpcy52aWV3RWxlbWVudFNvdXJjZSk7IC8vIFRlbXBvcmFyaWx5IHN1cHBvcnQgb2xkZXIgc3RhbmRhbG9uZSBmcm9udC1lbmRzIHNlbmRpbmcgY29tbWFuZHMgdG8gbmV3ZXIgZW1iZWRkZWQgYmFja2VuZHMuXG4gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIFJlYWN0IE5hdGl2ZSBlbWJlZHMgdGhlIFJlYWN0IERldlRvb2xzIGJhY2tlbmQsXG4gICAgLy8gYnV0IGNhbm5vdCBjb250cm9sIHdoaWNoIHZlcnNpb24gb2YgdGhlIGZyb250ZW5kIHVzZXJzIHVzZS5cblxuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignb3ZlcnJpZGVDb250ZXh0JywgX3RoaXMub3ZlcnJpZGVDb250ZXh0KTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ292ZXJyaWRlSG9va1N0YXRlJywgX3RoaXMub3ZlcnJpZGVIb29rU3RhdGUpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignb3ZlcnJpZGVQcm9wcycsIF90aGlzLm92ZXJyaWRlUHJvcHMpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignb3ZlcnJpZGVTdGF0ZScsIF90aGlzLm92ZXJyaWRlU3RhdGUpO1xuXG4gICAgaWYgKF90aGlzLl9pc1Byb2ZpbGluZykge1xuICAgICAgYnJpZGdlLnNlbmQoJ3Byb2ZpbGluZ1N0YXR1cycsIHRydWUpO1xuICAgIH0gLy8gU2VuZCB0aGUgQnJpZGdlIHByb3RvY29sIGFuZCBiYWNrZW5kIHZlcnNpb25zLCBhZnRlciBpbml0aWFsaXphdGlvbiwgaW4gY2FzZSB0aGUgZnJvbnRlbmQgaGFzIGFscmVhZHkgcmVxdWVzdGVkIGl0LlxuICAgIC8vIFRoZSBTdG9yZSBtYXkgYmUgaW5zdGFudGlhdGVkIGJlb3JlIHRoZSBhZ2VudC5cblxuXG4gICAgdmFyIF92ZXJzaW9uID0gXCI0LjI4LjUtZWY4YTg0MGJkXCI7XG5cbiAgICBpZiAoX3ZlcnNpb24pIHtcbiAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnYmFja2VuZFZlcnNpb24nLCBfdmVyc2lvbik7XG4gICAgfVxuXG4gICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdicmlkZ2VQcm90b2NvbCcsIGN1cnJlbnRCcmlkZ2VQcm90b2NvbCk7IC8vIE5vdGlmeSB0aGUgZnJvbnRlbmQgaWYgdGhlIGJhY2tlbmQgc3VwcG9ydHMgdGhlIFN0b3JhZ2UgQVBJIChlLmcuIGxvY2FsU3RvcmFnZSkuXG4gICAgLy8gSWYgbm90LCBmZWF0dXJlcyBsaWtlIHJlbG9hZC1hbmQtcHJvZmlsZSB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBhbmQgbXVzdCBiZSBkaXNhYmxlZC5cblxuXG4gICAgdmFyIGlzQmFja2VuZFN0b3JhZ2VBUElTdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVzdCcpO1xuICAgICAgaXNCYWNrZW5kU3RvcmFnZUFQSVN1cHBvcnRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICBicmlkZ2Uuc2VuZCgnaXNCYWNrZW5kU3RvcmFnZUFQSVN1cHBvcnRlZCcsIGlzQmFja2VuZFN0b3JhZ2VBUElTdXBwb3J0ZWQpO1xuICAgIGJyaWRnZS5zZW5kKCdpc1N5bmNocm9ub3VzWEhSU3VwcG9ydGVkJywgaXNTeW5jaHJvbm91c1hIUlN1cHBvcnRlZCgpKTtcbiAgICBzZXR1cEhpZ2hsaWdodGVyKGJyaWRnZSwgYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgVHJhY2VVcGRhdGVzX2luaXRpYWxpemUoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgYWdlbnRfY3JlYXRlQ2xhc3MoQWdlbnQsIFt7XG4gICAga2V5OiBcImdldEluc3RhbmNlQW5kU3R5bGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5zdGFuY2VBbmRTdHlsZShfcmVmMjIpIHtcbiAgICAgIHZhciBpZCA9IF9yZWYyMi5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjIyLnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCJcIikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEluc3RhbmNlQW5kU3R5bGUoaWQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRCZXN0TWF0Y2hpbmdSZW5kZXJlckludGVyZmFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCZXN0TWF0Y2hpbmdSZW5kZXJlckludGVyZmFjZShub2RlKSB7XG4gICAgICB2YXIgYmVzdE1hdGNoID0gbnVsbDtcblxuICAgICAgZm9yICh2YXIgcmVuZGVyZXJJRCBpbiB0aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuICAgICAgICB2YXIgZmliZXIgPSByZW5kZXJlci5nZXRGaWJlckZvck5hdGl2ZShub2RlKTtcblxuICAgICAgICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBjaGVjayBpZiBmaWJlci5zdGF0ZU5vZGUgaXMgbWF0Y2hpbmcgdGhlIG9yaWdpbmFsIGhvc3RJbnN0YW5jZVxuICAgICAgICAgIGlmIChmaWJlci5zdGF0ZU5vZGUgPT09IG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJlc3RNYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYmVzdE1hdGNoID0gcmVuZGVyZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGlmIGFuIGV4YWN0IG1hdGNoIGlzIG5vdCBmb3VuZCwgcmV0dXJuIHRoZSBmaXJzdCB2YWxpZCByZW5kZXJlciBhcyBmYWxsYmFja1xuXG5cbiAgICAgIHJldHVybiBiZXN0TWF0Y2g7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldElERm9yTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJREZvck5vZGUobm9kZSkge1xuICAgICAgdmFyIHJlbmRlcmVySW50ZXJmYWNlID0gdGhpcy5nZXRCZXN0TWF0Y2hpbmdSZW5kZXJlckludGVyZmFjZShub2RlKTtcblxuICAgICAgaWYgKHJlbmRlcmVySW50ZXJmYWNlICE9IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcmVuZGVyZXJJbnRlcmZhY2UuZ2V0RmliZXJJREZvck5hdGl2ZShub2RlLCB0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTb21lIG9sZCBSZWFjdCB2ZXJzaW9ucyBtaWdodCB0aHJvdyBpZiB0aGV5IGNhbid0IGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAvLyBJZiBzbyB3ZSBzaG91bGQgaWdub3JlIGl0Li4uXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNlbGVjdE5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VsZWN0Tm9kZSh0YXJnZXQpIHtcbiAgICAgIHZhciBpZCA9IHRoaXMuZ2V0SURGb3JOb2RlKHRhcmdldCk7XG5cbiAgICAgIGlmIChpZCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9icmlkZ2Uuc2VuZCgnc2VsZWN0RmliZXInLCBpZCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFJlbmRlcmVySW50ZXJmYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFJlbmRlcmVySW50ZXJmYWNlKHJlbmRlcmVySUQsIHJlbmRlcmVySW50ZXJmYWNlKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF0gPSByZW5kZXJlckludGVyZmFjZTtcblxuICAgICAgaWYgKHRoaXMuX2lzUHJvZmlsaW5nKSB7XG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlLnN0YXJ0UHJvZmlsaW5nKHRoaXMuX3JlY29yZENoYW5nZURlc2NyaXB0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlcmVySW50ZXJmYWNlLnNldFRyYWNlVXBkYXRlc0VuYWJsZWQodGhpcy5fdHJhY2VVcGRhdGVzRW5hYmxlZCk7IC8vIFdoZW4gdGhlIHJlbmRlcmVyIGlzIGF0dGFjaGVkLCB3ZSBuZWVkIHRvIHRlbGwgaXQgd2hldGhlclxuICAgICAgLy8gd2UgcmVtZW1iZXIgdGhlIHByZXZpb3VzIHNlbGVjdGlvbiB0aGF0IHdlJ2QgbGlrZSB0byByZXN0b3JlLlxuICAgICAgLy8gSXQnbGwgc3RhcnQgdHJhY2tpbmcgbW91bnRzIGZvciBtYXRjaGVzIHRvIHRoZSBsYXN0IHNlbGVjdGlvbiBwYXRoLlxuXG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fcGVyc2lzdGVkU2VsZWN0aW9uO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uICE9PSBudWxsICYmIHNlbGVjdGlvbi5yZW5kZXJlcklEID09PSByZW5kZXJlcklEKSB7XG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlLnNldFRyYWNrZWRQYXRoKHNlbGVjdGlvbi5wYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25VbnN1cHBvcnRlZFJlbmRlcmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVW5zdXBwb3J0ZWRSZW5kZXJlcihyZW5kZXJlcklEKSB7XG4gICAgICB0aGlzLl9icmlkZ2Uuc2VuZCgndW5zdXBwb3J0ZWRSZW5kZXJlclZlcnNpb24nLCByZW5kZXJlcklEKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyZXJJbnRlcmZhY2VzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBZ2VudDtcbn0oRXZlbnRFbWl0dGVyKTtcblxuXG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9ob29rLmpzXG5mdW5jdGlvbiBob29rX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgaG9va190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgaG9va190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gaG9va190eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBob29rX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gaG9va19hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGhvb2tfaXRlcmFibGVUb0FycmF5KGFycikgfHwgaG9va191bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IGhvb2tfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBob29rX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBob29rX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gaG9va19hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gaG9va19hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gaG9va19pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBob29rX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gaG9va19hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gaG9va19hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG4vKipcbiAqIEluc3RhbGwgdGhlIGhvb2sgb24gd2luZG93LCB3aGljaCBpcyBhbiBldmVudCBlbWl0dGVyLlxuICogTm90ZTogdGhpcyBnbG9iYWwgaG9vayBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gaXMgYSBkZSBmYWN0byBwdWJsaWMgQVBJLlxuICogSXQncyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBhdm9pZCBjcmVhdGluZyBkaXJlY3QgZGVwZW5kZW5jeSBvbiB0aGUgRGV2VG9vbHMgQmFja2VuZC5cbiAqIFRoYXQncyB3aHkgd2Ugc3RpbGwgaW5saW5lIHRoZSB3aG9sZSBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uLFxuICogdGhlIHN0cmluZyBmb3JtYXQgaW1wbGVtZW50YXRpb24sIGFuZCBwYXJ0IG9mIHRoZSBjb25zb2xlIGltcGxlbWVudGF0aW9uIGhlcmUuXG4gKlxuICogXG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxIb29rKHRhcmdldCkge1xuICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KCdfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18nKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnNvbGUgPSBjb25zb2xlO1xuICB2YXIgdGFyZ2V0Q29uc29sZU1ldGhvZHMgPSB7fTtcblxuICBmb3IgKHZhciBtZXRob2QgaW4gY29uc29sZSkge1xuICAgIHRhcmdldENvbnNvbGVNZXRob2RzW21ldGhvZF0gPSBjb25zb2xlW21ldGhvZF07XG4gIH1cblxuICBmdW5jdGlvbiBkYW5nZXJvdXNfc2V0VGFyZ2V0Q29uc29sZUZvclRlc3RpbmcodGFyZ2V0Q29uc29sZUZvclRlc3RpbmcpIHtcbiAgICB0YXJnZXRDb25zb2xlID0gdGFyZ2V0Q29uc29sZUZvclRlc3Rpbmc7XG4gICAgdGFyZ2V0Q29uc29sZU1ldGhvZHMgPSB7fTtcblxuICAgIGZvciAodmFyIF9tZXRob2QgaW4gdGFyZ2V0Q29uc29sZSkge1xuICAgICAgdGFyZ2V0Q29uc29sZU1ldGhvZHNbX21ldGhvZF0gPSBjb25zb2xlW19tZXRob2RdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGVjdFJlYWN0QnVpbGRUeXBlKHJlbmRlcmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgcmVuZGVyZXIudmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gUmVhY3QgRE9NIEZpYmVyICgxNispXG4gICAgICAgIGlmIChyZW5kZXJlci5idW5kbGVUeXBlID4gMCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgICAgICAgICAvLyBXZSBhcmUgY3VycmVudGx5IG9ubHkgdXNpbmcgMCAoUFJPRCkgYW5kIDEgKERFVilcbiAgICAgICAgICAvLyBidXQgbWlnaHQgYWRkIDIgKFBST0ZJTEUpIGluIHRoZSBmdXR1cmUuXG4gICAgICAgICAgcmV0dXJuICdkZXZlbG9wbWVudCc7XG4gICAgICAgIH0gLy8gUmVhY3QgMTYgdXNlcyBmbGF0IGJ1bmRsZXMuIElmIHdlIHJlcG9ydCB0aGUgYnVuZGxlIGFzIHByb2R1Y3Rpb25cbiAgICAgICAgLy8gdmVyc2lvbiwgaXQgbWVhbnMgd2UgYWxzbyBtaW5pZmllZCBhbmQgZW52aWZpZWQgaXQgb3Vyc2VsdmVzLlxuXG5cbiAgICAgICAgcmV0dXJuICdwcm9kdWN0aW9uJzsgLy8gTm90ZTogVGhlcmUgaXMgc3RpbGwgYSByaXNrIHRoYXQgdGhlIENvbW1vbkpTIGVudHJ5IHBvaW50IGhhcyBub3RcbiAgICAgICAgLy8gYmVlbiBlbnZpZmllZCBvciB1Z2xpZmllZC4gSW4gdGhpcyBjYXNlIHRoZSB1c2VyIHdvdWxkIGhhdmUgKmJvdGgqXG4gICAgICAgIC8vIGRldmVsb3BtZW50IGFuZCBwcm9kdWN0aW9uIGJ1bmRsZSwgYnV0IG9ubHkgdGhlIHByb2Qgb25lIHdvdWxkIHJ1bi5cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSByZWFsbHkgYmFkLiBXZSBoYXZlIGEgc2VwYXJhdGUgY2hlY2sgZm9yIHRoaXMgYmVjYXVzZVxuICAgICAgICAvLyBpdCBoYXBwZW5zICpvdXRzaWRlKiBvZiB0aGUgcmVuZGVyZXIgaW5qZWN0aW9uLiBTZWUgYGNoZWNrRENFYCBiZWxvdy5cbiAgICAgIH0gLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG5cbiAgICAgIHZhciBfdG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICAgIGlmIChyZW5kZXJlci5Nb3VudCAmJiByZW5kZXJlci5Nb3VudC5fcmVuZGVyTmV3Um9vdENvbXBvbmVudCkge1xuICAgICAgICAvLyBSZWFjdCBET00gU3RhY2tcbiAgICAgICAgdmFyIHJlbmRlclJvb3RDb2RlID0gX3RvU3RyaW5nLmNhbGwocmVuZGVyZXIuTW91bnQuX3JlbmRlck5ld1Jvb3RDb21wb25lbnQpOyAvLyBGaWx0ZXIgb3V0IGJhZCByZXN1bHRzIChpZiB0aGF0IGlzIGV2ZW4gcG9zc2libGUpOlxuXG5cbiAgICAgICAgaWYgKHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ2Z1bmN0aW9uJykgIT09IDApIHtcbiAgICAgICAgICAvLyBIb3BlIGZvciB0aGUgYmVzdCBpZiB3ZSdyZSBub3Qgc3VyZS5cbiAgICAgICAgICByZXR1cm4gJ3Byb2R1Y3Rpb24nO1xuICAgICAgICB9IC8vIENoZWNrIGZvciBSZWFjdCBET00gU3RhY2sgPCAxNS4xLjAgaW4gZGV2ZWxvcG1lbnQuXG4gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIFwic3RvcmVkTWVhc3VyZVwiIGNhbGwsIGl0J3Mgd3JhcHBlZCBpbiBSZWFjdFBlcmYgKERFViBvbmx5KS5cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSB0cnVlIGV2ZW4gaWYgaXQncyBtaW5pZmllZCwgYXMgbWV0aG9kIG5hbWUgc3RpbGwgbWF0Y2hlcy5cblxuXG4gICAgICAgIGlmIChyZW5kZXJSb290Q29kZS5pbmRleE9mKCdzdG9yZWRNZWFzdXJlJykgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuICdkZXZlbG9wbWVudCc7XG4gICAgICAgIH0gLy8gRm9yIG90aGVyIHZlcnNpb25zIChhbmQgY29uZmlndXJhdGlvbnMpIGl0J3Mgbm90IHNvIGVhc3kuXG4gICAgICAgIC8vIExldCdzIHF1aWNrbHkgZXhjbHVkZSBwcm9wZXIgcHJvZHVjdGlvbiBidWlsZHMuXG4gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIGEgd2FybmluZyBtZXNzYWdlLCBpdCdzIGVpdGhlciBhIERFViBidWlsZCxcbiAgICAgICAgLy8gb3IgYW4gUFJPRCBidWlsZCB3aXRob3V0IHByb3BlciBkZWFkIGNvZGUgZWxpbWluYXRpb24uXG5cblxuICAgICAgICBpZiAocmVuZGVyUm9vdENvZGUuaW5kZXhPZignc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbicpICE9PSAtMSkge1xuICAgICAgICAgIC8vIE5vdyBob3cgZG8gd2UgdGVsbCBhIERFViBidWlsZCBmcm9tIGEgYmFkIFBST0QgYnVpbGQ/XG4gICAgICAgICAgLy8gSWYgd2Ugc2VlIE5PREVfRU5WLCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhpcyBpcyBhIGRldiBidWlsZFxuICAgICAgICAgIC8vIGJlY2F1c2UgbW9zdCBsaWtlbHkgaXQgaXMgcmVmZXJyaW5nIHRvIGFuIGVtcHR5IHNoaW0uXG4gICAgICAgICAgaWYgKHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ05PREVfRU5WJykgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2RldmVsb3BtZW50JztcbiAgICAgICAgICB9IC8vIElmIHdlIHNlZSBcImRldmVsb3BtZW50XCIsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBlbnZpZmllZCBERVYgYnVpbGRcbiAgICAgICAgICAvLyAoc3VjaCBhcyB0aGUgb2ZmaWNpYWwgUmVhY3QgREVWIFVNRCkuXG5cblxuICAgICAgICAgIGlmIChyZW5kZXJSb290Q29kZS5pbmRleE9mKCdkZXZlbG9wbWVudCcpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuICdkZXZlbG9wbWVudCc7XG4gICAgICAgICAgfSAvLyBJJ3ZlIHNlZW4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyBiZWluZyBzbWFydGx5XG4gICAgICAgICAgLy8gcmVwbGFjZWQgYnkgYHRydWVgIGluIERFViBieSBXZWJwYWNrLiBJIGRvbid0IGtub3cgaG93IHRoYXRcbiAgICAgICAgICAvLyB3b3JrcyBidXQgd2UgY2FuIHNhZmVseSBndWFyZCBhZ2FpbnN0IGl0IGJlY2F1c2UgYHRydWVgIHdhc1xuICAgICAgICAgIC8vIG5ldmVyIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIHNvdXJjZSBzaW5jZSBpdCB3YXMgd3JpdHRlbi5cblxuXG4gICAgICAgICAgaWYgKHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ3RydWUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGV2ZWxvcG1lbnQnO1xuICAgICAgICAgIH0gLy8gQnkgbm93IGVpdGhlciBpdCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQgdGhhdCBoYXMgbm90IGJlZW4gbWluaWZpZWQsXG4gICAgICAgICAgLy8gb3IgKHdvcnNlKSB0aGlzIGlzIGEgbWluaWZpZWQgZGV2ZWxvcG1lbnQgYnVpbGQgdXNpbmcgbm9uLXN0YW5kYXJkXG4gICAgICAgICAgLy8gZW52aXJvbm1lbnQgKGUuZy4gXCJzdGFnaW5nXCIpLiBXZSdyZSBnb2luZyB0byBsb29rIGF0IHdoZXRoZXJcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gYXJndW1lbnQgbmFtZSBpcyBtYW5nbGVkOlxuXG5cbiAgICAgICAgICBpZiAoIC8vIDAuMTMgdG8gMTVcbiAgICAgICAgICByZW5kZXJSb290Q29kZS5pbmRleE9mKCduZXh0RWxlbWVudCcpICE9PSAtMSB8fCAvLyAwLjEyXG4gICAgICAgICAgcmVuZGVyUm9vdENvZGUuaW5kZXhPZignbmV4dENvbXBvbmVudCcpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgY2VydGFpbiB3aGV0aGVyIHRoaXMgaXMgYSBkZXZlbG9wbWVudCBidWlsZCBvciBub3QsXG4gICAgICAgICAgICAvLyBidXQgaXQgaXMgZGVmaW5pdGVseSB1bm1pbmlmaWVkLlxuICAgICAgICAgICAgcmV0dXJuICd1bm1pbmlmaWVkJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBsaWtlbHkgYSBtaW5pZmllZCBkZXZlbG9wbWVudCBidWlsZC5cbiAgICAgICAgICAgIHJldHVybiAnZGV2ZWxvcG1lbnQnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBCeSBub3cgd2Uga25vdyB0aGF0IGl0J3MgZW52aWZpZWQgYW5kIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3b3JrZWQsXG4gICAgICAgIC8vIGJ1dCB3aGF0IGlmIGl0J3Mgc3RpbGwgbm90IG1pbmlmaWVkPyAoSXMgdGhpcyBldmVuIHBvc3NpYmxlPylcbiAgICAgICAgLy8gTGV0J3MgY2hlY2sgbWF0Y2hlcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50IG5hbWUuXG5cblxuICAgICAgICBpZiAoIC8vIDAuMTMgdG8gMTVcbiAgICAgICAgcmVuZGVyUm9vdENvZGUuaW5kZXhPZignbmV4dEVsZW1lbnQnKSAhPT0gLTEgfHwgLy8gMC4xMlxuICAgICAgICByZW5kZXJSb290Q29kZS5pbmRleE9mKCduZXh0Q29tcG9uZW50JykgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuICd1bm1pbmlmaWVkJztcbiAgICAgICAgfSAvLyBTZWVtcyBsaWtlIHdlJ3JlIHVzaW5nIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24uXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicmFuY2ggYWJvdmUgaXMgU3RhY2stb25seSBzbyB0aGlzIGlzIDE1IG9yIGVhcmxpZXIuXG5cblxuICAgICAgICByZXR1cm4gJ291dGRhdGVkJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHsvLyBXZWlyZCBlbnZpcm9ubWVudHMgbWF5IGV4aXN0LlxuICAgICAgLy8gVGhpcyBjb2RlIG5lZWRzIGEgaGlnaGVyIGZhdWx0IHRvbGVyYW5jZVxuICAgICAgLy8gYmVjYXVzZSBpdCBydW5zIGV2ZW4gd2l0aCBjbG9zZWQgRGV2VG9vbHMuXG4gICAgICAvLyBUT0RPOiBzaG91bGQgd2UgY2F0Y2ggZXJyb3JzIGluIGFsbCBpbmplY3RlZCBjb2RlLCBhbmQgbm90IGp1c3QgdGhpcyBwYXJ0P1xuICAgIH1cblxuICAgIHJldHVybiAncHJvZHVjdGlvbic7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0RDRShmbikge1xuICAgIC8vIFRoaXMgcnVucyBmb3IgcHJvZHVjdGlvbiB2ZXJzaW9ucyBvZiBSZWFjdC5cbiAgICAvLyBOZWVkcyB0byBiZSBzdXBlciBzYWZlLlxuICAgIHRyeSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICB2YXIgX3RvU3RyaW5nMiA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcblxuICAgICAgdmFyIGNvZGUgPSBfdG9TdHJpbmcyLmNhbGwoZm4pOyAvLyBUaGlzIGlzIGEgc3RyaW5nIGVtYmVkZGVkIGluIHRoZSBwYXNzZWQgZnVuY3Rpb24gdW5kZXIgREVWLW9ubHlcbiAgICAgIC8vIGNvbmRpdGlvbi4gSG93ZXZlciB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgb25seSBpbiBQUk9ELiBUaGVyZWZvcmUsXG4gICAgICAvLyBpZiB3ZSBzZWUgaXQsIGRlYWQgY29kZSBlbGltaW5hdGlvbiBkaWQgbm90IHdvcmsuXG5cblxuICAgICAgaWYgKGNvZGUuaW5kZXhPZignXl9eJykgPiAtMSkge1xuICAgICAgICAvLyBSZW1lbWJlciB0byByZXBvcnQgZHVyaW5nIG5leHQgaW5qZWN0aW9uLlxuICAgICAgICBoYXNEZXRlY3RlZEJhZERDRSA9IHRydWU7IC8vIEJvbnVzOiB0aHJvdyBhbiBleGNlcHRpb24gaG9waW5nIHRoYXQgaXQgZ2V0cyBwaWNrZWQgdXAgYnkgYSByZXBvcnRpbmcgc3lzdGVtLlxuICAgICAgICAvLyBOb3Qgc3luY2hyb25vdXNseSBzbyB0aGF0IGl0IGRvZXNuJ3QgYnJlYWsgdGhlIGNhbGxpbmcgY29kZS5cblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGlzIHJ1bm5pbmcgaW4gcHJvZHVjdGlvbiBtb2RlLCBidXQgZGVhZCBjb2RlICcgKyAnZWxpbWluYXRpb24gaGFzIG5vdCBiZWVuIGFwcGxpZWQuIFJlYWQgaG93IHRvIGNvcnJlY3RseSAnICsgJ2NvbmZpZ3VyZSBSZWFjdCBmb3IgcHJvZHVjdGlvbjogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcGVyZi11c2UtcHJvZHVjdGlvbi1idWlsZCcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHt9XG4gIH0gLy8gTk9URTogS0VFUCBJTiBTWU5DIHdpdGggc3JjL2JhY2tlbmQvdXRpbHMuanNcblxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdpdGhTdHlsZXMoaW5wdXRBcmdzLCBzdHlsZSkge1xuICAgIGlmIChpbnB1dEFyZ3MgPT09IHVuZGVmaW5lZCB8fCBpbnB1dEFyZ3MgPT09IG51bGwgfHwgaW5wdXRBcmdzLmxlbmd0aCA9PT0gMCB8fCAvLyBNYXRjaGVzIGFueSBvZiAlYyBidXQgbm90ICUlY1xuICAgIHR5cGVvZiBpbnB1dEFyZ3NbMF0gPT09ICdzdHJpbmcnICYmIGlucHV0QXJnc1swXS5tYXRjaCgvKFteJV18XikoJWMpL2cpIHx8IHN0eWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBpbnB1dEFyZ3M7XG4gICAgfSAvLyBNYXRjaGVzIGFueSBvZiAlKG98T3xkfGl8c3xmKSwgYnV0IG5vdCAlJShvfE98ZHxpfHN8ZilcblxuXG4gICAgdmFyIFJFR0VYUCA9IC8oW14lXXxeKSgoJSUpKikoJShbb09kaXNmXSkpL2c7XG5cbiAgICBpZiAodHlwZW9mIGlucHV0QXJnc1swXSA9PT0gJ3N0cmluZycgJiYgaW5wdXRBcmdzWzBdLm1hdGNoKFJFR0VYUCkpIHtcbiAgICAgIHJldHVybiBbXCIlY1wiLmNvbmNhdChpbnB1dEFyZ3NbMF0pLCBzdHlsZV0uY29uY2F0KGhvb2tfdG9Db25zdW1hYmxlQXJyYXkoaW5wdXRBcmdzLnNsaWNlKDEpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEFyZyA9IGlucHV0QXJncy5yZWR1Y2UoZnVuY3Rpb24gKGZvcm1hdFN0ciwgZWxlbSwgaSkge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBmb3JtYXRTdHIgKz0gJyAnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChob29rX3R5cGVvZihlbGVtKSkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gJyVzJztcblxuICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICB2YXIgZm9ybWF0dGluZyA9IE51bWJlci5pc0ludGVnZXIoZWxlbSkgPyAnJWknIDogJyVmJztcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gZm9ybWF0dGluZztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0U3RyICs9ICclbyc7XG4gICAgICAgIH1cbiAgICAgIH0sICclYycpO1xuICAgICAgcmV0dXJuIFtmaXJzdEFyZywgc3R5bGVdLmNvbmNhdChob29rX3RvQ29uc3VtYWJsZUFycmF5KGlucHV0QXJncykpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1bnBhdGNoRm4gPSBudWxsOyAvLyBOT1RFOiBLRUVQIElOIFNZTkMgd2l0aCBzcmMvYmFja2VuZC9jb25zb2xlLmpzOnBhdGNoRm9yU3RyaWN0TW9kZVxuICAvLyBUaGlzIGZ1bmN0aW9uIGhpZGVzIG9yIGRpbXMgY29uc29sZSBsb2dzIGR1cmluZyB0aGUgaW5pdGlhbCBkb3VibGUgcmVuZGVyZXJcbiAgLy8gaW4gU3RyaWN0IE1vZGUuIFdlIG5lZWQgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGR1cmluZyBpbml0aWFsIHJlbmRlcixcbiAgLy8gUmVhY3QgYW5kIERldlRvb2xzIGFyZSBjb25uZWN0aW5nIGFuZCB0aGUgcmVuZGVyZXIgaW50ZXJmYWNlIGlzbid0IGF2YWlhYmxlXG4gIC8vIGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gaGF2ZSBjb25zaXN0ZW50IGxvZ2dpbmcgYmVoYXZpb3IgZm9yIGRvdWJsZSBsb2dzXG4gIC8vIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXJlci5cblxuICBmdW5jdGlvbiBwYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlKF9yZWYpIHtcbiAgICB2YXIgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlID0gX3JlZi5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICAgIGJyb3dzZXJUaGVtZSA9IF9yZWYuYnJvd3NlclRoZW1lO1xuICAgIHZhciBvdmVycmlkZUNvbnNvbGVNZXRob2RzID0gWydlcnJvcicsICdncm91cCcsICdncm91cENvbGxhcHNlZCcsICdpbmZvJywgJ2xvZycsICd0cmFjZScsICd3YXJuJ107XG5cbiAgICBpZiAodW5wYXRjaEZuICE9PSBudWxsKSB7XG4gICAgICAvLyBEb24ndCBwYXRjaCB0d2ljZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3JpZ2luYWxDb25zb2xlTWV0aG9kcyA9IHt9O1xuXG4gICAgdW5wYXRjaEZuID0gZnVuY3Rpb24gdW5wYXRjaEZuKCkge1xuICAgICAgZm9yICh2YXIgX21ldGhvZDIgaW4gb3JpZ2luYWxDb25zb2xlTWV0aG9kcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRhcmdldENvbnNvbGVbX21ldGhvZDJdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tfbWV0aG9kMl07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgfVxuICAgIH07XG5cbiAgICBvdmVycmlkZUNvbnNvbGVNZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1ttZXRob2RdID0gdGFyZ2V0Q29uc29sZVttZXRob2RdLl9fUkVBQ1RfREVWVE9PTFNfU1RSSUNUX01PREVfT1JJR0lOQUxfTUVUSE9EX18gPyB0YXJnZXRDb25zb2xlW21ldGhvZF0uX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PUklHSU5BTF9NRVRIT0RfXyA6IHRhcmdldENvbnNvbGVbbWV0aG9kXTtcblxuICAgICAgICB2YXIgb3ZlcnJpZGVNZXRob2QgPSBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCgpIHtcbiAgICAgICAgICBpZiAoIWhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgLy8gRGltIHRoZSB0ZXh0IGNvbG9yIG9mIHRoZSBkb3VibGUgbG9ncyBpZiB3ZSdyZSBub3RcbiAgICAgICAgICAgIC8vIGhpZGluZyB0aGVtLlxuICAgICAgICAgICAgdmFyIGNvbG9yO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgICAgICAgICBjb2xvciA9IGJyb3dzZXJUaGVtZSA9PT0gJ2xpZ2h0JyA/IFwicmdiYSgyNTAsIDE4MCwgNTAsIDAuNzUpXCIgOiBcInJnYmEoMjUwLCAxODAsIDUwLCAwLjUpXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgIGNvbG9yID0gYnJvd3NlclRoZW1lID09PSAnbGlnaHQnID8gXCJyZ2JhKDI1MCwgMTIzLCAxMzAsIDAuNzUpXCIgOiBcInJnYmEoMjUwLCAxMjMsIDEzMCwgMC41KVwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ2xvZyc6XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29sb3IgPSBicm93c2VyVGhlbWUgPT09ICdsaWdodCcgPyBcInJnYmEoMTI1LCAxMjUsIDEyNSwgMC43NSlcIiA6IFwicmdiYSgxMjUsIDEyNSwgMTI1LCAwLjUpXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QuYXBwbHkodm9pZCAwLCBob29rX3RvQ29uc3VtYWJsZUFycmF5KGZvcm1hdFdpdGhTdHlsZXMoYXJncywgXCJjb2xvcjogXCIuY29uY2F0KGNvbG9yKSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCdDb25zb2xlIGNvbG9yIGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG92ZXJyaWRlTWV0aG9kLl9fUkVBQ1RfREVWVE9PTFNfU1RSSUNUX01PREVfT1JJR0lOQUxfTUVUSE9EX18gPSBvcmlnaW5hbE1ldGhvZDtcbiAgICAgICAgb3JpZ2luYWxNZXRob2QuX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PVkVSUklERV9NRVRIT0RfXyA9IG92ZXJyaWRlTWV0aG9kO1xuICAgICAgICB0YXJnZXRDb25zb2xlW21ldGhvZF0gPSBvdmVycmlkZU1ldGhvZDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH0pO1xuICB9IC8vIE5PVEU6IEtFRVAgSU4gU1lOQyB3aXRoIHNyYy9iYWNrZW5kL2NvbnNvbGUuanM6dW5wYXRjaEZvclN0cmljdE1vZGVcblxuXG4gIGZ1bmN0aW9uIHVucGF0Y2hDb25zb2xlRm9ySW5pdGlhbFJlbmRlckluU3RyaWN0TW9kZSgpIHtcbiAgICBpZiAodW5wYXRjaEZuICE9PSBudWxsKSB7XG4gICAgICB1bnBhdGNoRm4oKTtcbiAgICAgIHVucGF0Y2hGbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVpZENvdW50ZXIgPSAwO1xuXG4gIGZ1bmN0aW9uIGluamVjdChyZW5kZXJlcikge1xuICAgIHZhciBpZCA9ICsrdWlkQ291bnRlcjtcbiAgICByZW5kZXJlcnMuc2V0KGlkLCByZW5kZXJlcik7XG4gICAgdmFyIHJlYWN0QnVpbGRUeXBlID0gaGFzRGV0ZWN0ZWRCYWREQ0UgPyAnZGVhZGNvZGUnIDogZGV0ZWN0UmVhY3RCdWlsZFR5cGUocmVuZGVyZXIpOyAvLyBQYXRjaGluZyB0aGUgY29uc29sZSBlbmFibGVzIERldlRvb2xzIHRvIGRvIGEgZmV3IHVzZWZ1bCB0aGluZ3M6XG4gICAgLy8gKiBBcHBlbmQgY29tcG9uZW50IHN0YWNrcyB0byB3YXJuaW5ncyBhbmQgZXJyb3IgbWVzc2FnZXNcbiAgICAvLyAqIERpc2FibGluZyBvciBtYXJraW5nIGxvZ3MgZHVyaW5nIGEgZG91YmxlIHJlbmRlciBpbiBTdHJpY3QgTW9kZVxuICAgIC8vICogRGlzYWJsZSBsb2dnaW5nIGR1cmluZyByZS1yZW5kZXJzIHRvIGluc3BlY3QgaG9va3MgKHNlZSBpbnNwZWN0SG9va3NPZkZpYmVyKVxuICAgIC8vXG4gICAgLy8gQWxsb3cgcGF0Y2hpbmcgY29uc29sZSBlYXJseSAoZHVyaW5nIGluamVjdGlvbikgdG9cbiAgICAvLyBwcm92aWRlIGRldmVsb3BlcnMgd2l0aCBjb21wb25lbnRzIHN0YWNrcyBldmVuIGlmIHRoZXkgZG9uJ3QgcnVuIERldlRvb2xzLlxuXG4gICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eSgnX19SRUFDVF9ERVZUT09MU19DT05TT0xFX0ZVTkNUSU9OU19fJykpIHtcbiAgICAgIHZhciBfdGFyZ2V0JF9fUkVBQ1RfREVWVE8gPSB0YXJnZXQuX19SRUFDVF9ERVZUT09MU19DT05TT0xFX0ZVTkNUSU9OU19fLFxuICAgICAgICAgIHJlZ2lzdGVyUmVuZGVyZXJXaXRoQ29uc29sZSA9IF90YXJnZXQkX19SRUFDVF9ERVZUTy5yZWdpc3RlclJlbmRlcmVyV2l0aENvbnNvbGUsXG4gICAgICAgICAgcGF0Y2hDb25zb2xlVXNpbmdXaW5kb3dWYWx1ZXMgPSBfdGFyZ2V0JF9fUkVBQ1RfREVWVE8ucGF0Y2hDb25zb2xlVXNpbmdXaW5kb3dWYWx1ZXM7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVnaXN0ZXJSZW5kZXJlcldpdGhDb25zb2xlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwYXRjaENvbnNvbGVVc2luZ1dpbmRvd1ZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWdpc3RlclJlbmRlcmVyV2l0aENvbnNvbGUocmVuZGVyZXIpO1xuICAgICAgICBwYXRjaENvbnNvbGVVc2luZ1dpbmRvd1ZhbHVlcygpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgaGF2ZSBqdXN0IHJlbG9hZGVkIHRvIHByb2ZpbGUsIHdlIG5lZWQgdG8gaW5qZWN0IHRoZSByZW5kZXJlciBpbnRlcmZhY2UgYmVmb3JlIHRoZSBhcHAgbG9hZHMuXG4gICAgLy8gT3RoZXJ3aXNlIHRoZSByZW5kZXJlciB3b24ndCB5ZXQgZXhpc3QgYW5kIHdlIGNhbiBza2lwIHRoaXMgc3RlcC5cblxuXG4gICAgdmFyIGF0dGFjaCA9IHRhcmdldC5fX1JFQUNUX0RFVlRPT0xTX0FUVEFDSF9fO1xuXG4gICAgaWYgKHR5cGVvZiBhdHRhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciByZW5kZXJlckludGVyZmFjZSA9IGF0dGFjaChob29rLCBpZCwgcmVuZGVyZXIsIHRhcmdldCk7XG4gICAgICBob29rLnJlbmRlcmVySW50ZXJmYWNlcy5zZXQoaWQsIHJlbmRlcmVySW50ZXJmYWNlKTtcbiAgICB9XG5cbiAgICBob29rLmVtaXQoJ3JlbmRlcmVyJywge1xuICAgICAgaWQ6IGlkLFxuICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyLFxuICAgICAgcmVhY3RCdWlsZFR5cGU6IHJlYWN0QnVpbGRUeXBlXG4gICAgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgdmFyIGhhc0RldGVjdGVkQmFkRENFID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gc3ViKGV2ZW50LCBmbikge1xuICAgIGhvb2sub24oZXZlbnQsIGZuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvb2sub2ZmKGV2ZW50LCBmbik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uKGV2ZW50LCBmbikge1xuICAgIGlmICghbGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgbGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgIH1cblxuICAgIGxpc3RlbmVyc1tldmVudF0ucHVzaChmbik7XG4gIH1cblxuICBmdW5jdGlvbiBvZmYoZXZlbnQsIGZuKSB7XG4gICAgaWYgKCFsaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzW2V2ZW50XS5pbmRleE9mKGZuKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGxpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBpZiAoIWxpc3RlbmVyc1tldmVudF0ubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgbGlzdGVuZXJzW2V2ZW50XTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgaWYgKGxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgIGxpc3RlbmVyc1tldmVudF0ubWFwKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGaWJlclJvb3RzKHJlbmRlcmVySUQpIHtcbiAgICB2YXIgcm9vdHMgPSBmaWJlclJvb3RzO1xuXG4gICAgaWYgKCFyb290c1tyZW5kZXJlcklEXSkge1xuICAgICAgcm9vdHNbcmVuZGVyZXJJRF0gPSBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvb3RzW3JlbmRlcmVySURdO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpIHtcbiAgICB2YXIgcmVuZGVyZXJJbnRlcmZhY2UgPSByZW5kZXJlckludGVyZmFjZXMuZ2V0KHJlbmRlcmVySUQpO1xuXG4gICAgaWYgKHJlbmRlcmVySW50ZXJmYWNlICE9IG51bGwpIHtcbiAgICAgIHJlbmRlcmVySW50ZXJmYWNlLmhhbmRsZUNvbW1pdEZpYmVyVW5tb3VudChmaWJlcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgcHJpb3JpdHlMZXZlbCkge1xuICAgIHZhciBtb3VudGVkUm9vdHMgPSBob29rLmdldEZpYmVyUm9vdHMocmVuZGVyZXJJRCk7XG4gICAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gICAgdmFyIGlzS25vd25Sb290ID0gbW91bnRlZFJvb3RzLmhhcyhyb290KTtcbiAgICB2YXIgaXNVbm1vdW50aW5nID0gY3VycmVudC5tZW1vaXplZFN0YXRlID09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlLmVsZW1lbnQgPT0gbnVsbDsgLy8gS2VlcCB0cmFjayBvZiBtb3VudGVkIHJvb3RzIHNvIHdlIGNhbiBoeWRyYXRlIHdoZW4gRGV2VG9vbHMgY29ubmVjdC5cblxuICAgIGlmICghaXNLbm93blJvb3QgJiYgIWlzVW5tb3VudGluZykge1xuICAgICAgbW91bnRlZFJvb3RzLmFkZChyb290KTtcbiAgICB9IGVsc2UgaWYgKGlzS25vd25Sb290ICYmIGlzVW5tb3VudGluZykge1xuICAgICAgbW91bnRlZFJvb3RzLmRlbGV0ZShyb290KTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXJJbnRlcmZhY2UgPSByZW5kZXJlckludGVyZmFjZXMuZ2V0KHJlbmRlcmVySUQpO1xuXG4gICAgaWYgKHJlbmRlcmVySW50ZXJmYWNlICE9IG51bGwpIHtcbiAgICAgIHJlbmRlcmVySW50ZXJmYWNlLmhhbmRsZUNvbW1pdEZpYmVyUm9vdChyb290LCBwcmlvcml0eUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblBvc3RDb21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCkge1xuICAgIHZhciByZW5kZXJlckludGVyZmFjZSA9IHJlbmRlcmVySW50ZXJmYWNlcy5nZXQocmVuZGVyZXJJRCk7XG5cbiAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgIT0gbnVsbCkge1xuICAgICAgcmVuZGVyZXJJbnRlcmZhY2UuaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdChyb290KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdHJpY3RNb2RlKHJlbmRlcmVySUQsIGlzU3RyaWN0TW9kZSkge1xuICAgIHZhciByZW5kZXJlckludGVyZmFjZSA9IHJlbmRlcmVySW50ZXJmYWNlcy5nZXQocmVuZGVyZXJJRCk7XG5cbiAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzU3RyaWN0TW9kZSkge1xuICAgICAgICByZW5kZXJlckludGVyZmFjZS5wYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlckludGVyZmFjZS51bnBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gZHVyaW5nIGluaXRpYWwgcmVuZGVyIGluIHRoZSBleHRlbnNpb24gYmVmb3JlIERldlRvb2xzXG4gICAgICAvLyBmaW5pc2hlcyBpdHMgaGFuZHNoYWtlIHdpdGggdGhlIGluamVjdGVkIHJlbmRlcmVyXG4gICAgICBpZiAoaXNTdHJpY3RNb2RlKSB7XG4gICAgICAgIHZhciBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUgPSB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19ISURFX0NPTlNPTEVfTE9HU19JTl9TVFJJQ1RfTU9ERV9fID09PSB0cnVlO1xuICAgICAgICB2YXIgYnJvd3NlclRoZW1lID0gd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQlJPV1NFUl9USEVNRV9fO1xuICAgICAgICBwYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlKHtcbiAgICAgICAgICBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGU6IGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSxcbiAgICAgICAgICBicm93c2VyVGhlbWU6IGJyb3dzZXJUaGVtZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVucGF0Y2hDb25zb2xlRm9ySW5pdGlhbFJlbmRlckluU3RyaWN0TW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvcGVuTW9kdWxlUmFuZ2VzU3RhY2sgPSBbXTtcbiAgdmFyIG1vZHVsZVJhbmdlcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGdldFRvcFN0YWNrRnJhbWVTdHJpbmcoZXJyb3IpIHtcbiAgICB2YXIgZnJhbWVzID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIHZhciBmcmFtZSA9IGZyYW1lcy5sZW5ndGggPiAxID8gZnJhbWVzWzFdIDogbnVsbDtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbnRlcm5hbE1vZHVsZVJhbmdlcygpIHtcbiAgICByZXR1cm4gbW9kdWxlUmFuZ2VzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KGVycm9yKSB7XG4gICAgdmFyIHN0YXJ0U3RhY2tGcmFtZSA9IGdldFRvcFN0YWNrRnJhbWVTdHJpbmcoZXJyb3IpO1xuXG4gICAgaWYgKHN0YXJ0U3RhY2tGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgb3Blbk1vZHVsZVJhbmdlc1N0YWNrLnB1c2goc3RhcnRTdGFja0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChlcnJvcikge1xuICAgIGlmIChvcGVuTW9kdWxlUmFuZ2VzU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHN0YXJ0U3RhY2tGcmFtZSA9IG9wZW5Nb2R1bGVSYW5nZXNTdGFjay5wb3AoKTtcbiAgICAgIHZhciBzdG9wU3RhY2tGcmFtZSA9IGdldFRvcFN0YWNrRnJhbWVTdHJpbmcoZXJyb3IpO1xuXG4gICAgICBpZiAoc3RvcFN0YWNrRnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgbW9kdWxlUmFuZ2VzLnB1c2goW3N0YXJ0U3RhY2tGcmFtZSwgc3RvcFN0YWNrRnJhbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVE9ETzogTW9yZSBtZWFuaW5nZnVsIG5hbWVzIGZvciBcInJlbmRlcmVySW50ZXJmYWNlc1wiIGFuZCBcInJlbmRlcmVyc1wiLlxuXG5cbiAgdmFyIGZpYmVyUm9vdHMgPSB7fTtcbiAgdmFyIHJlbmRlcmVySW50ZXJmYWNlcyA9IG5ldyBNYXAoKTtcbiAgdmFyIGxpc3RlbmVycyA9IHt9O1xuICB2YXIgcmVuZGVyZXJzID0gbmV3IE1hcCgpO1xuICB2YXIgYmFja2VuZHMgPSBuZXcgTWFwKCk7XG4gIHZhciBob29rID0ge1xuICAgIHJlbmRlcmVySW50ZXJmYWNlczogcmVuZGVyZXJJbnRlcmZhY2VzLFxuICAgIGxpc3RlbmVyczogbGlzdGVuZXJzLFxuICAgIGJhY2tlbmRzOiBiYWNrZW5kcyxcbiAgICAvLyBGYXN0IFJlZnJlc2ggZm9yIHdlYiByZWxpZXMgb24gdGhpcy5cbiAgICByZW5kZXJlcnM6IHJlbmRlcmVycyxcbiAgICBlbWl0OiBlbWl0LFxuICAgIGdldEZpYmVyUm9vdHM6IGdldEZpYmVyUm9vdHMsXG4gICAgaW5qZWN0OiBpbmplY3QsXG4gICAgb246IG9uLFxuICAgIG9mZjogb2ZmLFxuICAgIHN1Yjogc3ViLFxuICAgIC8vIFRoaXMgaXMgYSBsZWdhY3kgZmxhZy5cbiAgICAvLyBSZWFjdCB2MTYgY2hlY2tzIHRoZSBob29rIGZvciB0aGlzIHRvIGVuc3VyZSBEZXZUb29scyBpcyBuZXcgZW5vdWdoLlxuICAgIHN1cHBvcnRzRmliZXI6IHRydWUsXG4gICAgLy8gUmVhY3QgY2FsbHMgdGhlc2UgbWV0aG9kcy5cbiAgICBjaGVja0RDRTogY2hlY2tEQ0UsXG4gICAgb25Db21taXRGaWJlclVubW91bnQ6IG9uQ29tbWl0RmliZXJVbm1vdW50LFxuICAgIG9uQ29tbWl0RmliZXJSb290OiBvbkNvbW1pdEZpYmVyUm9vdCxcbiAgICBvblBvc3RDb21taXRGaWJlclJvb3Q6IG9uUG9zdENvbW1pdEZpYmVyUm9vdCxcbiAgICBzZXRTdHJpY3RNb2RlOiBzZXRTdHJpY3RNb2RlLFxuICAgIC8vIFNjaGVkdWxlIFByb2ZpbGVyIHJ1bnRpbWUgaGVscGVycy5cbiAgICAvLyBUaGVzZSBpbnRlcm5hbCBSZWFjdCBtb2R1bGVzIHRvIHJlcG9ydCB0aGVpciBvd24gYm91bmRhcmllc1xuICAgIC8vIHdoaWNoIGluIHR1cm4gZW5hYmxlcyB0aGUgcHJvZmlsZXIgdG8gZGltIG9yIGZpbHRlciBpbnRlcm5hbCBmcmFtZXMuXG4gICAgZ2V0SW50ZXJuYWxNb2R1bGVSYW5nZXM6IGdldEludGVybmFsTW9kdWxlUmFuZ2VzLFxuICAgIHJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydDogcmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0LFxuICAgIHJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wOiByZWdpc3RlckludGVybmFsTW9kdWxlU3RvcFxuICB9O1xuXG4gIGlmIChmYWxzZSkge31cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAnX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fJywge1xuICAgIC8vIFRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgY29uZmlndXJhYmxlIGZvciB0aGUgdGVzdCBlbnZpcm9ubWVudCxcbiAgICAvLyBlbHNlIHdlIHdvbid0IGJlIGFibGUgdG8gZGVsZXRlIGFuZCByZWNyZWF0ZSBpdCBiZXR3ZWVuIHRlc3RzLlxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaG9vaztcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvbGVnYWN5L3V0aWxzLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbmZ1bmN0aW9uIGRlY29yYXRlKG9iamVjdCwgYXR0ciwgZm4pIHtcbiAgdmFyIG9sZCA9IG9iamVjdFthdHRyXTsgLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIHdlYnBhY2sgY29uZmlnIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gYWxsb3cgYHRoaXNgIHR5cGUgYW5ub3RhdGlvbnNcblxuICBvYmplY3RbYXR0cl0gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBvbGQsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgcmV0dXJuIG9sZDtcbn1cbmZ1bmN0aW9uIGRlY29yYXRlTWFueShzb3VyY2UsIGZucykge1xuICB2YXIgb2xkcyA9IHt9O1xuXG4gIGZvciAodmFyIG5hbWUgaW4gZm5zKSB7XG4gICAgb2xkc1tuYW1lXSA9IGRlY29yYXRlKHNvdXJjZSwgbmFtZSwgZm5zW25hbWVdKTtcbiAgfVxuXG4gIHJldHVybiBvbGRzO1xufVxuZnVuY3Rpb24gcmVzdG9yZU1hbnkoc291cmNlLCBvbGRzKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gb2xkcykge1xuICAgIHNvdXJjZVtuYW1lXSA9IG9sZHNbbmFtZV07XG4gIH1cbn0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIHdlYnBhY2sgY29uZmlnIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gYWxsb3cgYHRoaXNgIHR5cGUgYW5ub3RhdGlvbnNcblxuZnVuY3Rpb24gZm9yY2VVcGRhdGUoaW5zdGFuY2UpIHtcbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5mb3JjZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gIH0gZWxzZSBpZiAoaW5zdGFuY2UudXBkYXRlciAhPSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGZ1bmN0aW9uICgpIHt9LCAnZm9yY2VVcGRhdGUnKTtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9sZWdhY3kvcmVuZGVyZXIuanNcbmZ1bmN0aW9uIGxlZ2FjeV9yZW5kZXJlcl9vd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBsZWdhY3lfcmVuZGVyZXJfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IGxlZ2FjeV9yZW5kZXJlcl9vd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgbGVnYWN5X3JlbmRlcmVyX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IGxlZ2FjeV9yZW5kZXJlcl9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBsZWdhY3lfcmVuZGVyZXJfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBsZWdhY3lfcmVuZGVyZXJfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBsZWdhY3lfcmVuZGVyZXJfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IGxlZ2FjeV9yZW5kZXJlcl90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gbGVnYWN5X3JlbmRlcmVyX3R5cGVvZihvYmopOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuXG5cblxuXG5mdW5jdGlvbiBnZXREYXRhKGludGVybmFsSW5zdGFuY2UpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gbnVsbDtcbiAgdmFyIGtleSA9IG51bGw7IC8vICE9IHVzZWQgZGVsaWJlcmF0ZWx5IGhlcmUgdG8gY2F0Y2ggdW5kZWZpbmVkIGFuZCBudWxsXG5cbiAgaWYgKGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ICE9IG51bGwpIHtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQua2V5KSB7XG4gICAgICBrZXkgPSBTdHJpbmcoaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQua2V5KTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFR5cGUgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpc3BsYXlOYW1lID0gZWxlbWVudFR5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUoZWxlbWVudFR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgIGtleToga2V5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlKGludGVybmFsSW5zdGFuY2UpIHtcbiAgLy8gIT0gdXNlZCBkZWxpYmVyYXRlbHkgaGVyZSB0byBjYXRjaCB1bmRlZmluZWQgYW5kIG51bGxcbiAgaWYgKGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ICE9IG51bGwpIHtcbiAgICB2YXIgZWxlbWVudFR5cGUgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHB1YmxpY0luc3RhbmNlID0gaW50ZXJuYWxJbnN0YW5jZS5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuXG4gICAgICBpZiAocHVibGljSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBFbGVtZW50VHlwZUhvc3RDb21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEVsZW1lbnRUeXBlT3RoZXJPclVua25vd247XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkcmVuKGludGVybmFsSW5zdGFuY2UpIHtcbiAgdmFyIGNoaWxkcmVuID0gW107IC8vIElmIHRoZSBwYXJlbnQgaXMgYSBuYXRpdmUgbm9kZSB3aXRob3V0IHJlbmRlcmVkIGNoaWxkcmVuLCBidXQgd2l0aFxuICAvLyBtdWx0aXBsZSBzdHJpbmcgY2hpbGRyZW4sIHRoZW4gdGhlIGBlbGVtZW50YCB0aGF0IGdldHMgcGFzc2VkIGluIGhlcmUgaXNcbiAgLy8gYSBwbGFpbiB2YWx1ZSAtLSBhIHN0cmluZyBvciBudW1iZXIuXG5cbiAgaWYgKGxlZ2FjeV9yZW5kZXJlcl90eXBlb2YoaW50ZXJuYWxJbnN0YW5jZSkgIT09ICdvYmplY3QnKSB7Ly8gTm8gY2hpbGRyZW5cbiAgfSBlbHNlIGlmIChpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCA9PT0gbnVsbCB8fCBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCA9PT0gZmFsc2UpIHsvLyBObyBjaGlsZHJlblxuICB9IGVsc2UgaWYgKGludGVybmFsSW5zdGFuY2UuX3JlbmRlcmVkQ29tcG9uZW50KSB7XG4gICAgdmFyIGNoaWxkID0gaW50ZXJuYWxJbnN0YW5jZS5fcmVuZGVyZWRDb21wb25lbnQ7XG5cbiAgICBpZiAoZ2V0RWxlbWVudFR5cGUoY2hpbGQpICE9PSBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcmVuZGVyZWRDaGlsZHJlbikge1xuICAgIHZhciByZW5kZXJlZENoaWxkcmVuID0gaW50ZXJuYWxJbnN0YW5jZS5fcmVuZGVyZWRDaGlsZHJlbjtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gcmVuZGVyZWRDaGlsZHJlbikge1xuICAgICAgdmFyIF9jaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07XG5cbiAgICAgIGlmIChnZXRFbGVtZW50VHlwZShfY2hpbGQpICE9PSBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goX2NoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gTm90ZTogd2Ugc2tpcCB0aGUgY2FzZSB3aGVyZSBjaGlsZHJlbiBhcmUganVzdCBzdHJpbmdzIG9yIG51bWJlcnNcbiAgLy8gYmVjYXVzZSB0aGUgbmV3IERldlRvb2xzIHNraXBzIG92ZXIgaG9zdCB0ZXh0IG5vZGVzIGFueXdheS5cblxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyZXJfYXR0YWNoKGhvb2ssIHJlbmRlcmVySUQsIHJlbmRlcmVyLCBnbG9iYWwpIHtcbiAgdmFyIGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgaW50ZXJuYWxJbnN0YW5jZVRvSURNYXAgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgaW50ZXJuYWxJbnN0YW5jZVRvUm9vdElETWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgdmFyIGdldEludGVybmFsSURGb3JOYXRpdmUgPSBudWxsO1xuICB2YXIgZmluZE5hdGl2ZU5vZGVGb3JJbnRlcm5hbElEO1xuXG4gIHZhciBnZXRGaWJlckZvck5hdGl2ZSA9IGZ1bmN0aW9uIGdldEZpYmVyRm9yTmF0aXZlKG5vZGUpIHtcbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLkNvbXBvbmVudFRyZWUpIHtcbiAgICBnZXRJbnRlcm5hbElERm9yTmF0aXZlID0gZnVuY3Rpb24gZ2V0SW50ZXJuYWxJREZvck5hdGl2ZShub2RlLCBmaW5kTmVhcmVzdFVuZmlsdGVyZWRBbmNlc3Rvcikge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSByZW5kZXJlci5Db21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5vZGUpO1xuICAgICAgcmV0dXJuIGludGVybmFsSW5zdGFuY2VUb0lETWFwLmdldChpbnRlcm5hbEluc3RhbmNlKSB8fCBudWxsO1xuICAgIH07XG5cbiAgICBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQgPSBmdW5jdGlvbiBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQoaWQpIHtcbiAgICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuZ2V0KGlkKTtcbiAgICAgIHJldHVybiByZW5kZXJlci5Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfTtcblxuICAgIGdldEZpYmVyRm9yTmF0aXZlID0gZnVuY3Rpb24gZ2V0RmliZXJGb3JOYXRpdmUobm9kZSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyLkNvbXBvbmVudFRyZWUuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobm9kZSk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZW5kZXJlci5Nb3VudC5nZXRJRCAmJiByZW5kZXJlci5Nb3VudC5nZXROb2RlKSB7XG4gICAgZ2V0SW50ZXJuYWxJREZvck5hdGl2ZSA9IGZ1bmN0aW9uIGdldEludGVybmFsSURGb3JOYXRpdmUobm9kZSwgZmluZE5lYXJlc3RVbmZpbHRlcmVkQW5jZXN0b3IpIHtcbiAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQgPSBmdW5jdGlvbiBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQoaWQpIHtcbiAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZUZvckZpYmVySUQoaWQpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG4gICAgcmV0dXJuIGludGVybmFsSW5zdGFuY2UgPyBnZXREYXRhKGludGVybmFsSW5zdGFuY2UpLmRpc3BsYXlOYW1lIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldElEKGludGVybmFsSW5zdGFuY2UpIHtcbiAgICBpZiAobGVnYWN5X3JlbmRlcmVyX3R5cGVvZihpbnRlcm5hbEluc3RhbmNlKSAhPT0gJ29iamVjdCcgfHwgaW50ZXJuYWxJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGludGVybmFsIGluc3RhbmNlOiAnICsgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlVG9JRE1hcC5oYXMoaW50ZXJuYWxJbnN0YW5jZSkpIHtcbiAgICAgIHZhciBfaWQgPSBnZXRVSUQoKTtcblxuICAgICAgaW50ZXJuYWxJbnN0YW5jZVRvSURNYXAuc2V0KGludGVybmFsSW5zdGFuY2UsIF9pZCk7XG4gICAgICBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5zZXQoX2lkLCBpbnRlcm5hbEluc3RhbmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZVRvSURNYXAuZ2V0KGludGVybmFsSW5zdGFuY2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlRXF1YWxBcnJheXMoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBUaGlzIGlzIHNoYXJlZCBtdXRhYmxlIHN0YXRlIHRoYXQgbGV0cyB1cyBrZWVwIHRyYWNrIG9mIHdoZXJlIHdlIGFyZS5cblxuXG4gIHZhciBwYXJlbnRJRFN0YWNrID0gW107XG4gIHZhciBvbGRSZWNvbmNpbGVyTWV0aG9kcyA9IG51bGw7XG5cbiAgaWYgKHJlbmRlcmVyLlJlY29uY2lsZXIpIHtcbiAgICAvLyBSZWFjdCAxNVxuICAgIG9sZFJlY29uY2lsZXJNZXRob2RzID0gZGVjb3JhdGVNYW55KHJlbmRlcmVyLlJlY29uY2lsZXIsIHtcbiAgICAgIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiBtb3VudENvbXBvbmVudChmbiwgYXJncykge1xuICAgICAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBob3N0Q29udGFpbmVySW5mbyA9IGFyZ3NbM107XG5cbiAgICAgICAgaWYgKGdldEVsZW1lbnRUeXBlKGludGVybmFsSW5zdGFuY2UpID09PSBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG9zdENvbnRhaW5lckluZm8uX3RvcExldmVsV3JhcHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gU1NSXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaWQgPSBnZXRJRChpbnRlcm5hbEluc3RhbmNlKTsgLy8gUHVzaCB0aGUgb3BlcmF0aW9uLlxuXG4gICAgICAgIHZhciBwYXJlbnRJRCA9IHBhcmVudElEU3RhY2subGVuZ3RoID4gMCA/IHBhcmVudElEU3RhY2tbcGFyZW50SURTdGFjay5sZW5ndGggLSAxXSA6IDA7XG4gICAgICAgIHJlY29yZE1vdW50KGludGVybmFsSW5zdGFuY2UsIGlkLCBwYXJlbnRJRCk7XG4gICAgICAgIHBhcmVudElEU3RhY2sucHVzaChpZCk7IC8vIFJlbWVtYmVyIHRoZSByb290LlxuXG4gICAgICAgIGludGVybmFsSW5zdGFuY2VUb1Jvb3RJRE1hcC5zZXQoaW50ZXJuYWxJbnN0YW5jZSwgZ2V0SUQoaG9zdENvbnRhaW5lckluZm8uX3RvcExldmVsV3JhcHBlcikpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgcGFyZW50SURTdGFjay5wb3AoKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBwYXJlbnRJRFN0YWNrID0gW107XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChwYXJlbnRJRFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHJvb3RJRCA9IGludGVybmFsSW5zdGFuY2VUb1Jvb3RJRE1hcC5nZXQoaW50ZXJuYWxJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGlmIChyb290SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgcm9vdCBJRC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3RJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbiBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkoZm4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBhcmdzWzBdO1xuXG4gICAgICAgIGlmIChnZXRFbGVtZW50VHlwZShpbnRlcm5hbEluc3RhbmNlKSA9PT0gRWxlbWVudFR5cGVPdGhlck9yVW5rbm93bikge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGlkID0gZ2V0SUQoaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgICAgIHBhcmVudElEU3RhY2sucHVzaChpZCk7XG4gICAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSBnZXRDaGlsZHJlbihpbnRlcm5hbEluc3RhbmNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBnZXRDaGlsZHJlbihpbnRlcm5hbEluc3RhbmNlKTtcblxuICAgICAgICAgIGlmICghYXJlRXF1YWxBcnJheXMocHJldkNoaWxkcmVuLCBuZXh0Q2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAvLyBQdXNoIHRoZSBvcGVyYXRpb25cbiAgICAgICAgICAgIHJlY29yZFJlb3JkZXIoaW50ZXJuYWxJbnN0YW5jZSwgaWQsIG5leHRDaGlsZHJlbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50SURTdGFjay5wb3AoKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBwYXJlbnRJRFN0YWNrID0gW107XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChwYXJlbnRJRFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHJvb3RJRCA9IGludGVybmFsSW5zdGFuY2VUb1Jvb3RJRE1hcC5nZXQoaW50ZXJuYWxJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGlmIChyb290SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgcm9vdCBJRC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3RJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gcmVjZWl2ZUNvbXBvbmVudChmbiwgYXJncykge1xuICAgICAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGFyZ3NbMF07XG5cbiAgICAgICAgaWYgKGdldEVsZW1lbnRUeXBlKGludGVybmFsSW5zdGFuY2UpID09PSBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaWQgPSBnZXRJRChpbnRlcm5hbEluc3RhbmNlKTtcbiAgICAgICAgcGFyZW50SURTdGFjay5wdXNoKGlkKTtcbiAgICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IGdldENoaWxkcmVuKGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IGdldENoaWxkcmVuKGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKCFhcmVFcXVhbEFycmF5cyhwcmV2Q2hpbGRyZW4sIG5leHRDaGlsZHJlbikpIHtcbiAgICAgICAgICAgIC8vIFB1c2ggdGhlIG9wZXJhdGlvblxuICAgICAgICAgICAgcmVjb3JkUmVvcmRlcihpbnRlcm5hbEluc3RhbmNlLCBpZCwgbmV4dENoaWxkcmVuKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJlbnRJRFN0YWNrLnBvcCgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHBhcmVudElEU3RhY2sgPSBbXTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHBhcmVudElEU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcm9vdElEID0gaW50ZXJuYWxJbnN0YW5jZVRvUm9vdElETWFwLmdldChpbnRlcm5hbEluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHJvb3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCByb290IElELicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFBlbmRpbmdFdmVudHMocm9vdElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50KGZuLCBhcmdzKSB7XG4gICAgICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gYXJnc1swXTtcblxuICAgICAgICBpZiAoZ2V0RWxlbWVudFR5cGUoaW50ZXJuYWxJbnN0YW5jZSkgPT09IEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24pIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZCA9IGdldElEKGludGVybmFsSW5zdGFuY2UpO1xuICAgICAgICBwYXJlbnRJRFN0YWNrLnB1c2goaWQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgcGFyZW50SURTdGFjay5wb3AoKTsgLy8gUHVzaCB0aGUgb3BlcmF0aW9uLlxuXG4gICAgICAgICAgcmVjb3JkVW5tb3VudChpbnRlcm5hbEluc3RhbmNlLCBpZCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcGFyZW50SURTdGFjayA9IFtdO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAocGFyZW50SURTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZhciByb290SUQgPSBpbnRlcm5hbEluc3RhbmNlVG9Sb290SURNYXAuZ2V0KGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocm9vdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHJvb3QgSUQuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsdXNoUGVuZGluZ0V2ZW50cyhyb290SUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBpZiAob2xkUmVjb25jaWxlck1ldGhvZHMgIT09IG51bGwpIHtcbiAgICAgIGlmIChyZW5kZXJlci5Db21wb25lbnQpIHtcbiAgICAgICAgcmVzdG9yZU1hbnkocmVuZGVyZXIuQ29tcG9uZW50Lk1peGluLCBvbGRSZWNvbmNpbGVyTWV0aG9kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0b3JlTWFueShyZW5kZXJlci5SZWNvbmNpbGVyLCBvbGRSZWNvbmNpbGVyTWV0aG9kcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb2xkUmVjb25jaWxlck1ldGhvZHMgPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkTW91bnQoaW50ZXJuYWxJbnN0YW5jZSwgaWQsIHBhcmVudElEKSB7XG4gICAgdmFyIGlzUm9vdCA9IHBhcmVudElEID09PSAwO1xuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgY29uc29sZS5sb2coJyVjcmVjb3JkTW91bnQoKScsICdjb2xvcjogZ3JlZW47IGZvbnQtd2VpZ2h0OiBib2xkOycsIGlkLCBnZXREYXRhKGludGVybmFsSW5zdGFuY2UpLmRpc3BsYXlOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaXNSb290KSB7XG4gICAgICAvLyBUT0RPIElzIHRoaXMgcmlnaHQ/IEZvciBhbGwgdmVyc2lvbnM/XG4gICAgICB2YXIgaGFzT3duZXJNZXRhZGF0YSA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ICE9IG51bGwgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyICE9IG51bGw7XG4gICAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX0FERCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKGlkKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oRWxlbWVudFR5cGVSb290KTtcbiAgICAgIHB1c2hPcGVyYXRpb24oMCk7IC8vIFN0cmljdE1vZGUgY29tcGxpYW50P1xuXG4gICAgICBwdXNoT3BlcmF0aW9uKDApOyAvLyBQcm9maWxpbmcgZmxhZ1xuXG4gICAgICBwdXNoT3BlcmF0aW9uKDApOyAvLyBTdHJpY3RNb2RlIHN1cHBvcnRlZD9cblxuICAgICAgcHVzaE9wZXJhdGlvbihoYXNPd25lck1ldGFkYXRhID8gMSA6IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdHlwZSA9IGdldEVsZW1lbnRUeXBlKGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICB2YXIgX2dldERhdGEgPSBnZXREYXRhKGludGVybmFsSW5zdGFuY2UpLFxuICAgICAgICAgIGRpc3BsYXlOYW1lID0gX2dldERhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAga2V5ID0gX2dldERhdGEua2V5O1xuXG4gICAgICB2YXIgb3duZXJJRCA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ICE9IG51bGwgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyICE9IG51bGwgPyBnZXRJRChpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXIpIDogMDtcbiAgICAgIHZhciBkaXNwbGF5TmFtZVN0cmluZ0lEID0gZ2V0U3RyaW5nSUQoZGlzcGxheU5hbWUpO1xuICAgICAgdmFyIGtleVN0cmluZ0lEID0gZ2V0U3RyaW5nSUQoa2V5KTtcbiAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fQUREKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgICAgcHVzaE9wZXJhdGlvbih0eXBlKTtcbiAgICAgIHB1c2hPcGVyYXRpb24ocGFyZW50SUQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihvd25lcklEKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oZGlzcGxheU5hbWVTdHJpbmdJRCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKGtleVN0cmluZ0lEKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRSZW9yZGVyKGludGVybmFsSW5zdGFuY2UsIGlkLCBuZXh0Q2hpbGRyZW4pIHtcbiAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX1JFT1JERVJfQ0hJTERSRU4pO1xuICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgIHZhciBuZXh0Q2hpbGRJRHMgPSBuZXh0Q2hpbGRyZW4ubWFwKGdldElEKTtcbiAgICBwdXNoT3BlcmF0aW9uKG5leHRDaGlsZElEcy5sZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Q2hpbGRJRHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHB1c2hPcGVyYXRpb24obmV4dENoaWxkSURzW2ldKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRVbm1vdW50KGludGVybmFsSW5zdGFuY2UsIGlkKSB7XG4gICAgcGVuZGluZ1VubW91bnRlZElEcy5wdXNoKGlkKTtcbiAgICBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5kZWxldGUoaWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3Jhd2xBbmRSZWNvcmRJbml0aWFsTW91bnRzKGlkLCBwYXJlbnRJRCwgcm9vdElEKSB7XG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgY29uc29sZS5ncm91cCgnY3Jhd2xBbmRSZWNvcmRJbml0aWFsTW91bnRzKCkgaWQ6JywgaWQpO1xuICAgIH1cblxuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2VUb1Jvb3RJRE1hcC5zZXQoaW50ZXJuYWxJbnN0YW5jZSwgcm9vdElEKTtcbiAgICAgIHJlY29yZE1vdW50KGludGVybmFsSW5zdGFuY2UsIGlkLCBwYXJlbnRJRCk7XG4gICAgICBnZXRDaGlsZHJlbihpbnRlcm5hbEluc3RhbmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gY3Jhd2xBbmRSZWNvcmRJbml0aWFsTW91bnRzKGdldElEKGNoaWxkKSwgaWQsIHJvb3RJRCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2hJbml0aWFsT3BlcmF0aW9ucygpIHtcbiAgICAvLyBDcmF3bCByb290cyB0aG91Z2ggYW5kIHJlZ2lzdGVyIGFueSBub2RlcyB0aGF0IG1vdW50ZWQgYmVmb3JlIHdlIHdlcmUgaW5qZWN0ZWQuXG4gICAgdmFyIHJvb3RzID0gcmVuZGVyZXIuTW91bnQuX2luc3RhbmNlc0J5UmVhY3RSb290SUQgfHwgcmVuZGVyZXIuTW91bnQuX2luc3RhbmNlc0J5Q29udGFpbmVySUQ7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcm9vdHMpIHtcbiAgICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gcm9vdHNba2V5XTtcblxuICAgICAgdmFyIF9pZDIgPSBnZXRJRChpbnRlcm5hbEluc3RhbmNlKTtcblxuICAgICAgY3Jhd2xBbmRSZWNvcmRJbml0aWFsTW91bnRzKF9pZDIsIDAsIF9pZDIpO1xuICAgICAgZmx1c2hQZW5kaW5nRXZlbnRzKF9pZDIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwZW5kaW5nT3BlcmF0aW9ucyA9IFtdO1xuICB2YXIgcGVuZGluZ1N0cmluZ1RhYmxlID0gbmV3IE1hcCgpO1xuICB2YXIgcGVuZGluZ1VubW91bnRlZElEcyA9IFtdO1xuICB2YXIgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoID0gMDtcbiAgdmFyIHBlbmRpbmdVbm1vdW50ZWRSb290SUQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUGVuZGluZ0V2ZW50cyhyb290SUQpIHtcbiAgICBpZiAocGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoID09PSAwICYmIHBlbmRpbmdVbm1vdW50ZWRJRHMubGVuZ3RoID09PSAwICYmIHBlbmRpbmdVbm1vdW50ZWRSb290SUQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbnVtVW5tb3VudElEcyA9IHBlbmRpbmdVbm1vdW50ZWRJRHMubGVuZ3RoICsgKHBlbmRpbmdVbm1vdW50ZWRSb290SUQgPT09IG51bGwgPyAwIDogMSk7XG4gICAgdmFyIG9wZXJhdGlvbnMgPSBuZXcgQXJyYXkoIC8vIElkZW50aWZ5IHdoaWNoIHJlbmRlcmVyIHRoaXMgdXBkYXRlIGlzIGNvbWluZyBmcm9tLlxuICAgIDIgKyAvLyBbcmVuZGVyZXJJRCwgcm9vdEZpYmVySURdXG4gICAgLy8gSG93IGJpZyBpcyB0aGUgc3RyaW5nIHRhYmxlP1xuICAgIDEgKyAvLyBbc3RyaW5nVGFibGVMZW5ndGhdXG4gICAgLy8gVGhlbiBnb2VzIHRoZSBhY3R1YWwgc3RyaW5nIHRhYmxlLlxuICAgIHBlbmRpbmdTdHJpbmdUYWJsZUxlbmd0aCArICggLy8gQWxsIHVubW91bnRzIGFyZSBiYXRjaGVkIGluIGEgc2luZ2xlIG1lc3NhZ2UuXG4gICAgLy8gW1RSRUVfT1BFUkFUSU9OX1JFTU9WRSwgcmVtb3ZlZElETGVuZ3RoLCAuLi5pZHNdXG4gICAgbnVtVW5tb3VudElEcyA+IDAgPyAyICsgbnVtVW5tb3VudElEcyA6IDApICsgLy8gTW91bnQgb3BlcmF0aW9uc1xuICAgIHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCk7IC8vIElkZW50aWZ5IHdoaWNoIHJlbmRlcmVyIHRoaXMgdXBkYXRlIGlzIGNvbWluZyBmcm9tLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByb290cyB0byBiZSBtYXBwZWQgdG8gcmVuZGVyZXJzLFxuICAgIC8vIFdoaWNoIGluIHR1cm4gZW5hYmxlcyBmaWJlciBwcm9wZXJhdGlvbnMsIHN0YXRlcywgYW5kIGhvb2tzIHRvIGJlIGluc3BlY3RlZC5cblxuICAgIHZhciBpID0gMDtcbiAgICBvcGVyYXRpb25zW2krK10gPSByZW5kZXJlcklEO1xuICAgIG9wZXJhdGlvbnNbaSsrXSA9IHJvb3RJRDsgLy8gTm93IGZpbGwgaW4gdGhlIHN0cmluZyB0YWJsZS5cbiAgICAvLyBbc3RyaW5nVGFibGVMZW5ndGgsIHN0cjFMZW5ndGgsIC4uLnN0cjEsIHN0cjJMZW5ndGgsIC4uLnN0cjIsIC4uLl1cblxuICAgIG9wZXJhdGlvbnNbaSsrXSA9IHBlbmRpbmdTdHJpbmdUYWJsZUxlbmd0aDtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgb3BlcmF0aW9uc1tpKytdID0ga2V5Lmxlbmd0aDtcbiAgICAgIHZhciBlbmNvZGVkS2V5ID0gdXRmRW5jb2RlU3RyaW5nKGtleSk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZW5jb2RlZEtleS5sZW5ndGg7IGorKykge1xuICAgICAgICBvcGVyYXRpb25zW2kgKyBqXSA9IGVuY29kZWRLZXlbal07XG4gICAgICB9XG5cbiAgICAgIGkgKz0ga2V5Lmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGlmIChudW1Vbm1vdW50SURzID4gMCkge1xuICAgICAgLy8gQWxsIHVubW91bnRzIGV4Y2VwdCByb290cyBhcmUgYmF0Y2hlZCBpbiBhIHNpbmdsZSBtZXNzYWdlLlxuICAgICAgb3BlcmF0aW9uc1tpKytdID0gVFJFRV9PUEVSQVRJT05fUkVNT1ZFOyAvLyBUaGUgZmlyc3QgbnVtYmVyIGlzIGhvdyBtYW55IHVubW91bnRlZCBJRHMgd2UncmUgZ29ubmEgc2VuZC5cblxuICAgICAgb3BlcmF0aW9uc1tpKytdID0gbnVtVW5tb3VudElEczsgLy8gRmlsbCBpbiB0aGUgdW5tb3VudHNcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwZW5kaW5nVW5tb3VudGVkSURzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG9wZXJhdGlvbnNbaSsrXSA9IHBlbmRpbmdVbm1vdW50ZWRJRHNbal07XG4gICAgICB9IC8vIFRoZSByb290IElEIHNob3VsZCBhbHdheXMgYmUgdW5tb3VudGVkIGxhc3QuXG5cblxuICAgICAgaWYgKHBlbmRpbmdVbm1vdW50ZWRSb290SUQgIT09IG51bGwpIHtcbiAgICAgICAgb3BlcmF0aW9uc1tpXSA9IHBlbmRpbmdVbm1vdW50ZWRSb290SUQ7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG9wZXJhdGlvbnMuXG5cblxuICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IF9qKyspIHtcbiAgICAgIG9wZXJhdGlvbnNbaSArIF9qXSA9IHBlbmRpbmdPcGVyYXRpb25zW19qXTtcbiAgICB9XG5cbiAgICBpICs9IHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIHByaW50T3BlcmF0aW9uc0FycmF5KG9wZXJhdGlvbnMpO1xuICAgIH0gLy8gSWYgd2UndmUgYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhlIGZyb250ZW5kLCBqdXN0IHBhc3MgdGhlIG9wZXJhdGlvbnMgdGhyb3VnaC5cblxuXG4gICAgaG9vay5lbWl0KCdvcGVyYXRpb25zJywgb3BlcmF0aW9ucyk7XG4gICAgcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoID0gMDtcbiAgICBwZW5kaW5nVW5tb3VudGVkSURzID0gW107XG4gICAgcGVuZGluZ1VubW91bnRlZFJvb3RJRCA9IG51bGw7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlLmNsZWFyKCk7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoID0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hPcGVyYXRpb24ob3ApIHtcbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICBwZW5kaW5nT3BlcmF0aW9ucy5wdXNoKG9wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN0cmluZ0lEKHN0cikge1xuICAgIGlmIChzdHIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBleGlzdGluZ0lEID0gcGVuZGluZ1N0cmluZ1RhYmxlLmdldChzdHIpO1xuXG4gICAgaWYgKGV4aXN0aW5nSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSUQ7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ0lEID0gcGVuZGluZ1N0cmluZ1RhYmxlLnNpemUgKyAxO1xuICAgIHBlbmRpbmdTdHJpbmdUYWJsZS5zZXQoc3RyLCBzdHJpbmdJRCk7IC8vIFRoZSBzdHJpbmcgdGFibGUgdG90YWwgbGVuZ3RoIG5lZWRzIHRvIGFjY291bnRcbiAgICAvLyBib3RoIGZvciB0aGUgc3RyaW5nIGxlbmd0aCwgYW5kIGZvciB0aGUgYXJyYXkgaXRlbVxuICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIGxlbmd0aCBpdHNlbGYuIEhlbmNlICsgMS5cblxuICAgIHBlbmRpbmdTdHJpbmdUYWJsZUxlbmd0aCArPSBzdHIubGVuZ3RoICsgMTtcbiAgICByZXR1cm4gc3RyaW5nSUQ7XG4gIH1cblxuICB2YXIgY3VycmVudGx5SW5zcGVjdGVkRWxlbWVudElEID0gbnVsbDtcbiAgdmFyIGN1cnJlbnRseUluc3BlY3RlZFBhdGhzID0ge307IC8vIFRyYWNrIHRoZSBpbnRlcnNlY3Rpb24gb2YgY3VycmVudGx5IGluc3BlY3RlZCBwYXRocyxcbiAgLy8gc28gdGhhdCB3ZSBjYW4gc2VuZCB0aGVpciBkYXRhIGFsb25nIGlmIHRoZSBlbGVtZW50IGlzIHJlLXJlbmRlcmVkLlxuXG4gIGZ1bmN0aW9uIG1lcmdlSW5zcGVjdGVkUGF0aHMocGF0aCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5SW5zcGVjdGVkUGF0aHM7XG4gICAgcGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICghY3VycmVudFtrZXldKSB7XG4gICAgICAgIGN1cnJlbnRba2V5XSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSXNQYXRoQWxsb3dlZChrZXkpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGhlbHBzIHByZXZlbnQgcHJldmlvdXNseS1pbnNwZWN0ZWQgcGF0aHMgZnJvbSBiZWluZyBkZWh5ZHJhdGVkIGluIHVwZGF0ZXMuXG4gICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgYSBiYWQgdXNlciBleHBlcmllbmNlIHdoZXJlIGV4cGFuZGVkIHRvZ2dsZXMgY29sbGFwc2Ugb24gdXBkYXRlLlxuICAgIHJldHVybiBmdW5jdGlvbiBpc1BhdGhBbGxvd2VkKHBhdGgpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5SW5zcGVjdGVkUGF0aHNba2V5XTtcblxuICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhbaV1dO1xuXG4gICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9IC8vIEZhc3QgcGF0aCBwcm9wcyBsb29rdXAgZm9yIFJlYWN0IE5hdGl2ZSBzdHlsZSBlZGl0b3IuXG5cblxuICBmdW5jdGlvbiBnZXRJbnN0YW5jZUFuZFN0eWxlKGlkKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbnVsbDtcbiAgICB2YXIgc3R5bGUgPSBudWxsO1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgIGluc3RhbmNlID0gaW50ZXJuYWxJbnN0YW5jZS5faW5zdGFuY2UgfHwgbnVsbDtcbiAgICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudC5wcm9wcyAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlID0gZWxlbWVudC5wcm9wcy5zdHlsZSB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICBzdHlsZTogc3R5bGVcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRFbGVtZW50KGlkKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGZpbmQgaW5zdGFuY2Ugd2l0aCBpZCBcXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZ2V0RWxlbWVudFR5cGUoaW50ZXJuYWxJbnN0YW5jZSkpIHtcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVDbGFzczpcbiAgICAgICAgZ2xvYmFsLiRyID0gaW50ZXJuYWxJbnN0YW5jZS5faW5zdGFuY2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlRnVuY3Rpb246XG4gICAgICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCBmaW5kIGVsZW1lbnQgd2l0aCBpZCBcXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsb2JhbC4kciA9IHtcbiAgICAgICAgICBwcm9wczogZWxlbWVudC5wcm9wcyxcbiAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGdsb2JhbC4kciA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3JlQXNHbG9iYWwoaWQsIHBhdGgsIGNvdW50KSB7XG4gICAgdmFyIGluc3BlY3RlZEVsZW1lbnQgPSBpbnNwZWN0RWxlbWVudFJhdyhpZCk7XG5cbiAgICBpZiAoaW5zcGVjdGVkRWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHZhbHVlID0gdXRpbHNfZ2V0SW5PYmplY3QoaW5zcGVjdGVkRWxlbWVudCwgcGF0aCk7XG4gICAgICB2YXIga2V5ID0gXCIkcmVhY3RUZW1wXCIuY29uY2F0KGNvdW50KTtcbiAgICAgIHdpbmRvd1trZXldID0gdmFsdWU7XG4gICAgICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRFbGVtZW50VmFsdWVCeVBhdGgoaWQsIHBhdGgpIHtcbiAgICB2YXIgaW5zcGVjdGVkRWxlbWVudCA9IGluc3BlY3RFbGVtZW50UmF3KGlkKTtcblxuICAgIGlmIChpbnNwZWN0ZWRFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgdmFsdWVUb0NvcHkgPSB1dGlsc19nZXRJbk9iamVjdChpbnNwZWN0ZWRFbGVtZW50LCBwYXRoKTtcbiAgICAgIHJldHVybiBzZXJpYWxpemVUb1N0cmluZyh2YWx1ZVRvQ29weSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEVsZW1lbnQocmVxdWVzdElELCBpZCwgcGF0aCwgZm9yY2VGdWxsRGF0YSkge1xuICAgIGlmIChmb3JjZUZ1bGxEYXRhIHx8IGN1cnJlbnRseUluc3BlY3RlZEVsZW1lbnRJRCAhPT0gaWQpIHtcbiAgICAgIGN1cnJlbnRseUluc3BlY3RlZEVsZW1lbnRJRCA9IGlkO1xuICAgICAgY3VycmVudGx5SW5zcGVjdGVkUGF0aHMgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgaW5zcGVjdGVkRWxlbWVudCA9IGluc3BlY3RFbGVtZW50UmF3KGlkKTtcblxuICAgIGlmIChpbnNwZWN0ZWRFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJlc3BvbnNlSUQ6IHJlcXVlc3RJRCxcbiAgICAgICAgdHlwZTogJ25vdC1mb3VuZCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhdGggIT09IG51bGwpIHtcbiAgICAgIG1lcmdlSW5zcGVjdGVkUGF0aHMocGF0aCk7XG4gICAgfSAvLyBBbnkgdGltZSBhbiBpbnNwZWN0ZWQgZWxlbWVudCBoYXMgYW4gdXBkYXRlLFxuICAgIC8vIHdlIHNob3VsZCB1cGRhdGUgdGhlIHNlbGVjdGVkICRyIHZhbHVlIGFzIHdlbC5cbiAgICAvLyBEbyB0aGlzIGJlZm9yZSBkZWh5ZHJhdGlvbiAoY2xlYW5Gb3JCcmlkZ2UpLlxuXG5cbiAgICB1cGRhdGVTZWxlY3RlZEVsZW1lbnQoaWQpO1xuICAgIGluc3BlY3RlZEVsZW1lbnQuY29udGV4dCA9IGNsZWFuRm9yQnJpZGdlKGluc3BlY3RlZEVsZW1lbnQuY29udGV4dCwgY3JlYXRlSXNQYXRoQWxsb3dlZCgnY29udGV4dCcpKTtcbiAgICBpbnNwZWN0ZWRFbGVtZW50LnByb3BzID0gY2xlYW5Gb3JCcmlkZ2UoaW5zcGVjdGVkRWxlbWVudC5wcm9wcywgY3JlYXRlSXNQYXRoQWxsb3dlZCgncHJvcHMnKSk7XG4gICAgaW5zcGVjdGVkRWxlbWVudC5zdGF0ZSA9IGNsZWFuRm9yQnJpZGdlKGluc3BlY3RlZEVsZW1lbnQuc3RhdGUsIGNyZWF0ZUlzUGF0aEFsbG93ZWQoJ3N0YXRlJykpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWQsXG4gICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICB0eXBlOiAnZnVsbC1kYXRhJyxcbiAgICAgIHZhbHVlOiBpbnNwZWN0ZWRFbGVtZW50XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RFbGVtZW50UmF3KGlkKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF9nZXREYXRhMiA9IGdldERhdGEoaW50ZXJuYWxJbnN0YW5jZSksXG4gICAgICAgIGRpc3BsYXlOYW1lID0gX2dldERhdGEyLmRpc3BsYXlOYW1lLFxuICAgICAgICBrZXkgPSBfZ2V0RGF0YTIua2V5O1xuXG4gICAgdmFyIHR5cGUgPSBnZXRFbGVtZW50VHlwZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgICB2YXIgY29udGV4dCA9IG51bGw7XG4gICAgdmFyIG93bmVycyA9IG51bGw7XG4gICAgdmFyIHByb3BzID0gbnVsbDtcbiAgICB2YXIgc3RhdGUgPSBudWxsO1xuICAgIHZhciBzb3VyY2UgPSBudWxsO1xuICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG5cbiAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgcHJvcHMgPSBlbGVtZW50LnByb3BzO1xuICAgICAgc291cmNlID0gZWxlbWVudC5fc291cmNlICE9IG51bGwgPyBlbGVtZW50Ll9zb3VyY2UgOiBudWxsO1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICBvd25lcnMgPSBbXTtcblxuICAgICAgICB3aGlsZSAob3duZXIgIT0gbnVsbCkge1xuICAgICAgICAgIG93bmVycy5wdXNoKHtcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBnZXREYXRhKG93bmVyKS5kaXNwbGF5TmFtZSB8fCAnVW5rbm93bicsXG4gICAgICAgICAgICBpZDogZ2V0SUQob3duZXIpLFxuICAgICAgICAgICAga2V5OiBlbGVtZW50LmtleSxcbiAgICAgICAgICAgIHR5cGU6IGdldEVsZW1lbnRUeXBlKG93bmVyKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG93bmVyLl9jdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgb3duZXIgPSBvd25lci5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwdWJsaWNJbnN0YW5jZSA9IGludGVybmFsSW5zdGFuY2UuX2luc3RhbmNlO1xuXG4gICAgaWYgKHB1YmxpY0luc3RhbmNlICE9IG51bGwpIHtcbiAgICAgIGNvbnRleHQgPSBwdWJsaWNJbnN0YW5jZS5jb250ZXh0IHx8IG51bGw7XG4gICAgICBzdGF0ZSA9IHB1YmxpY0luc3RhbmNlLnN0YXRlIHx8IG51bGw7XG4gICAgfSAvLyBOb3QgaW1wbGVtZW50ZWRcblxuXG4gICAgdmFyIGVycm9ycyA9IFtdO1xuICAgIHZhciB3YXJuaW5ncyA9IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWQsXG4gICAgICAvLyBEb2VzIHRoZSBjdXJyZW50IHJlbmRlcmVyIHN1cHBvcnQgZWRpdGFibGUgaG9va3MgYW5kIGZ1bmN0aW9uIHByb3BzP1xuICAgICAgY2FuRWRpdEhvb2tzOiBmYWxzZSxcbiAgICAgIGNhbkVkaXRGdW5jdGlvblByb3BzOiBmYWxzZSxcbiAgICAgIC8vIERvZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgc3VwcG9ydCBhZHZhbmNlZCBlZGl0aW5nIGludGVyZmFjZT9cbiAgICAgIGNhbkVkaXRIb29rc0FuZERlbGV0ZVBhdGhzOiBmYWxzZSxcbiAgICAgIGNhbkVkaXRIb29rc0FuZFJlbmFtZVBhdGhzOiBmYWxzZSxcbiAgICAgIGNhbkVkaXRGdW5jdGlvblByb3BzRGVsZXRlUGF0aHM6IGZhbHNlLFxuICAgICAgY2FuRWRpdEZ1bmN0aW9uUHJvcHNSZW5hbWVQYXRoczogZmFsc2UsXG4gICAgICAvLyBUb2dnbGUgZXJyb3IgYm91bmRhcnkgZGlkIG5vdCBleGlzdCBpbiBsZWdhY3kgdmVyc2lvbnNcbiAgICAgIGNhblRvZ2dsZUVycm9yOiBmYWxzZSxcbiAgICAgIGlzRXJyb3JlZDogZmFsc2UsXG4gICAgICB0YXJnZXRFcnJvckJvdW5kYXJ5SUQ6IG51bGwsXG4gICAgICAvLyBTdXNwZW5zZSBkaWQgbm90IGV4aXN0IGluIGxlZ2FjeSB2ZXJzaW9uc1xuICAgICAgY2FuVG9nZ2xlU3VzcGVuc2U6IGZhbHNlLFxuICAgICAgLy8gQ2FuIHZpZXcgY29tcG9uZW50IHNvdXJjZSBsb2NhdGlvbi5cbiAgICAgIGNhblZpZXdTb3VyY2U6IHR5cGUgPT09IHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3MgfHwgdHlwZSA9PT0gdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbixcbiAgICAgIC8vIE9ubHkgbGVnYWN5IGNvbnRleHQgZXhpc3RzIGluIGxlZ2FjeSB2ZXJzaW9ucy5cbiAgICAgIGhhc0xlZ2FjeUNvbnRleHQ6IHRydWUsXG4gICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAga2V5OiBrZXkgIT0gbnVsbCA/IGtleSA6IG51bGwsXG4gICAgICAvLyBJbnNwZWN0YWJsZSBwcm9wZXJ0aWVzLlxuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIGhvb2tzOiBudWxsLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgICAvLyBMaXN0IG9mIG93bmVyc1xuICAgICAgb3duZXJzOiBvd25lcnMsXG4gICAgICAvLyBMb2NhdGlvbiBvZiBjb21wb25lbnQgaW4gc291cmNlIGNvZGUuXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHJvb3RUeXBlOiBudWxsLFxuICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogbnVsbCxcbiAgICAgIHJlbmRlcmVyVmVyc2lvbjogbnVsbCxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgc3R5bGV4OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZ0VsZW1lbnRUb0NvbnNvbGUoaWQpIHtcbiAgICB2YXIgcmVzdWx0ID0gaW5zcGVjdEVsZW1lbnRSYXcoaWQpO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN1cHBvcnRzR3JvdXAgPSB0eXBlb2YgY29uc29sZS5ncm91cENvbGxhcHNlZCA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChzdXBwb3J0c0dyb3VwKSB7XG4gICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiW0NsaWNrIHRvIGV4cGFuZF0gJWM8XCIuY29uY2F0KHJlc3VsdC5kaXNwbGF5TmFtZSB8fCAnQ29tcG9uZW50JywgXCIgLz5cIiksIC8vIC0tZG9tLXRhZy1uYW1lLWNvbG9yIGlzIHRoZSBDU1MgdmFyaWFibGUgQ2hyb21lIHN0eWxlcyBIVE1MIGVsZW1lbnRzIHdpdGggaW4gdGhlIGNvbnNvbGUuXG4gICAgICAnY29sb3I6IHZhcigtLWRvbS10YWctbmFtZS1jb2xvcik7IGZvbnQtd2VpZ2h0OiBub3JtYWw7Jyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5wcm9wcyAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ1Byb3BzOicsIHJlc3VsdC5wcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5zdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ1N0YXRlOicsIHJlc3VsdC5zdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5jb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ29udGV4dDonLCByZXN1bHQuY29udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIG5hdGl2ZU5vZGUgPSBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQoaWQpO1xuXG4gICAgaWYgKG5hdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdOb2RlOicsIG5hdGl2ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuY2hyb21lIHx8IC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgY29uc29sZS5sb2coJ1JpZ2h0LWNsaWNrIGFueSB2YWx1ZSB0byBzYXZlIGl0IGFzIGEgZ2xvYmFsIHZhcmlhYmxlIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzR3JvdXApIHtcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlVmlld0F0dHJpYnV0ZVNvdXJjZShpZCwgcGF0aCkge1xuICAgIHZhciBpbnNwZWN0ZWRFbGVtZW50ID0gaW5zcGVjdEVsZW1lbnRSYXcoaWQpO1xuXG4gICAgaWYgKGluc3BlY3RlZEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHdpbmRvdy4kYXR0cmlidXRlID0gdXRpbHNfZ2V0SW5PYmplY3QoaW5zcGVjdGVkRWxlbWVudCwgcGF0aCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZVZpZXdFbGVtZW50U291cmNlKGlkKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGZpbmQgaW5zdGFuY2Ugd2l0aCBpZCBcXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBlbGVtZW50IHdpdGggaWQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBnbG9iYWwuJHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVQYXRoKHR5cGUsIGlkLCBob29rSUQsIHBhdGgpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcHVibGljSW5zdGFuY2UgPSBpbnRlcm5hbEluc3RhbmNlLl9pbnN0YW5jZTtcblxuICAgICAgaWYgKHB1YmxpY0luc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgICBkZWxldGVQYXRoSW5PYmplY3QocHVibGljSW5zdGFuY2UuY29udGV4dCwgcGF0aCk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSG9va3Mgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG5cbiAgICAgICAgICBjYXNlICdwcm9wcyc6XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgPSBsZWdhY3lfcmVuZGVyZXJfb2JqZWN0U3ByZWFkKGxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnQpLCB7fSwge1xuICAgICAgICAgICAgICBwcm9wczogY29weVdpdGhEZWxldGUoZWxlbWVudC5wcm9wcywgcGF0aClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdGF0ZSc6XG4gICAgICAgICAgICBkZWxldGVQYXRoSW5PYmplY3QocHVibGljSW5zdGFuY2Uuc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5hbWVQYXRoKHR5cGUsIGlkLCBob29rSUQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcHVibGljSW5zdGFuY2UgPSBpbnRlcm5hbEluc3RhbmNlLl9pbnN0YW5jZTtcblxuICAgICAgaWYgKHB1YmxpY0luc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgICByZW5hbWVQYXRoSW5PYmplY3QocHVibGljSW5zdGFuY2UuY29udGV4dCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSG9va3Mgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG5cbiAgICAgICAgICBjYXNlICdwcm9wcyc6XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgPSBsZWdhY3lfcmVuZGVyZXJfb2JqZWN0U3ByZWFkKGxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnQpLCB7fSwge1xuICAgICAgICAgICAgICBwcm9wczogY29weVdpdGhSZW5hbWUoZWxlbWVudC5wcm9wcywgb2xkUGF0aCwgbmV3UGF0aClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdGF0ZSc6XG4gICAgICAgICAgICByZW5hbWVQYXRoSW5PYmplY3QocHVibGljSW5zdGFuY2Uuc3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvdmVycmlkZVZhbHVlQXRQYXRoKHR5cGUsIGlkLCBob29rSUQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgdmFyIHB1YmxpY0luc3RhbmNlID0gaW50ZXJuYWxJbnN0YW5jZS5faW5zdGFuY2U7XG5cbiAgICAgIGlmIChwdWJsaWNJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2NvbnRleHQnOlxuICAgICAgICAgICAgdXRpbHNfc2V0SW5PYmplY3QocHVibGljSW5zdGFuY2UuY29udGV4dCwgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdob29rcyc6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hvb2tzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZW5kZXJlcicpO1xuXG4gICAgICAgICAgY2FzZSAncHJvcHMnOlxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ID0gbGVnYWN5X3JlbmRlcmVyX29iamVjdFNwcmVhZChsZWdhY3lfcmVuZGVyZXJfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50KSwge30sIHtcbiAgICAgICAgICAgICAgcHJvcHM6IGNvcHlXaXRoU2V0KGVsZW1lbnQucHJvcHMsIHBhdGgsIHZhbHVlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3N0YXRlJzpcbiAgICAgICAgICAgIHV0aWxzX3NldEluT2JqZWN0KHB1YmxpY0luc3RhbmNlLnN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyB2MTYrIG9ubHkgZmVhdHVyZXNcblxuXG4gIHZhciBnZXRQcm9maWxpbmdEYXRhID0gZnVuY3Rpb24gZ2V0UHJvZmlsaW5nRGF0YSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFByb2ZpbGluZ0RhdGEgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZUNvbW1pdEZpYmVyUm9vdCA9IGZ1bmN0aW9uIGhhbmRsZUNvbW1pdEZpYmVyUm9vdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZUNvbW1pdEZpYmVyUm9vdCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVuZGVyZXInKTtcbiAgfTtcblxuICB2YXIgaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50ID0gZnVuY3Rpb24gaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZW5kZXJlcicpO1xuICB9O1xuXG4gIHZhciBoYW5kbGVQb3N0Q29tbWl0RmliZXJSb290ID0gZnVuY3Rpb24gaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZVBvc3RDb21taXRGaWJlclJvb3Qgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG4gIH07XG5cbiAgdmFyIG92ZXJyaWRlRXJyb3IgPSBmdW5jdGlvbiBvdmVycmlkZUVycm9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignb3ZlcnJpZGVFcnJvciBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVuZGVyZXInKTtcbiAgfTtcblxuICB2YXIgb3ZlcnJpZGVTdXNwZW5zZSA9IGZ1bmN0aW9uIG92ZXJyaWRlU3VzcGVuc2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvdmVycmlkZVN1c3BlbnNlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZW5kZXJlcicpO1xuICB9O1xuXG4gIHZhciBzdGFydFByb2ZpbGluZyA9IGZ1bmN0aW9uIHN0YXJ0UHJvZmlsaW5nKCkgey8vIERvIG5vdCB0aHJvdywgc2luY2UgdGhpcyB3b3VsZCBicmVhayBhIG11bHRpLXJvb3Qgc2NlbmFyaW8gd2hlcmUgdjE1IGFuZCB2MTYgd2VyZSBib3RoIHByZXNlbnQuXG4gIH07XG5cbiAgdmFyIHN0b3BQcm9maWxpbmcgPSBmdW5jdGlvbiBzdG9wUHJvZmlsaW5nKCkgey8vIERvIG5vdCB0aHJvdywgc2luY2UgdGhpcyB3b3VsZCBicmVhayBhIG11bHRpLXJvb3Qgc2NlbmFyaW8gd2hlcmUgdjE1IGFuZCB2MTYgd2VyZSBib3RoIHByZXNlbnQuXG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0QmVzdE1hdGNoRm9yVHJhY2tlZFBhdGgoKSB7XG4gICAgLy8gTm90IGltcGxlbWVudGVkLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGF0aEZvckVsZW1lbnQoaWQpIHtcbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDb21wb25lbnRGaWx0ZXJzKGNvbXBvbmVudEZpbHRlcnMpIHsvLyBOb3QgaW1wbGVtZW50ZWQuXG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFjZVVwZGF0ZXNFbmFibGVkKGVuYWJsZWQpIHsvLyBOb3QgaW1wbGVtZW50ZWQuXG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFja2VkUGF0aChwYXRoKSB7Ly8gTm90IGltcGxlbWVudGVkLlxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0T3duZXJzTGlzdChpZCkge1xuICAgIC8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRXJyb3JzQW5kV2FybmluZ3MoKSB7Ly8gTm90IGltcGxlbWVudGVkXG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckVycm9yc0ZvckZpYmVySUQoaWQpIHsvLyBOb3QgaW1wbGVtZW50ZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyV2FybmluZ3NGb3JGaWJlcklEKGlkKSB7Ly8gTm90IGltcGxlbWVudGVkXG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlKCkge31cblxuICBmdW5jdGlvbiB1bnBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUoKSB7fVxuXG4gIGZ1bmN0aW9uIGhhc0ZpYmVyV2l0aElkKGlkKSB7XG4gICAgcmV0dXJuIGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmhhcyhpZCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNsZWFyRXJyb3JzQW5kV2FybmluZ3M6IGNsZWFyRXJyb3JzQW5kV2FybmluZ3MsXG4gICAgY2xlYXJFcnJvcnNGb3JGaWJlcklEOiBjbGVhckVycm9yc0ZvckZpYmVySUQsXG4gICAgY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQ6IGNsZWFyV2FybmluZ3NGb3JGaWJlcklELFxuICAgIGNsZWFudXA6IGNsZWFudXAsXG4gICAgZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aDogZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aCxcbiAgICBkZWxldGVQYXRoOiBkZWxldGVQYXRoLFxuICAgIGZsdXNoSW5pdGlhbE9wZXJhdGlvbnM6IGZsdXNoSW5pdGlhbE9wZXJhdGlvbnMsXG4gICAgZ2V0QmVzdE1hdGNoRm9yVHJhY2tlZFBhdGg6IGdldEJlc3RNYXRjaEZvclRyYWNrZWRQYXRoLFxuICAgIGdldERpc3BsYXlOYW1lRm9yRmliZXJJRDogZ2V0RGlzcGxheU5hbWVGb3JGaWJlcklELFxuICAgIGdldEZpYmVyRm9yTmF0aXZlOiBnZXRGaWJlckZvck5hdGl2ZSxcbiAgICBnZXRGaWJlcklERm9yTmF0aXZlOiBnZXRJbnRlcm5hbElERm9yTmF0aXZlLFxuICAgIGdldEluc3RhbmNlQW5kU3R5bGU6IGdldEluc3RhbmNlQW5kU3R5bGUsXG4gICAgZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRDogZnVuY3Rpb24gZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRChpZCkge1xuICAgICAgdmFyIG5hdGl2ZU5vZGUgPSBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQoaWQpO1xuICAgICAgcmV0dXJuIG5hdGl2ZU5vZGUgPT0gbnVsbCA/IG51bGwgOiBbbmF0aXZlTm9kZV07XG4gICAgfSxcbiAgICBnZXRPd25lcnNMaXN0OiBnZXRPd25lcnNMaXN0LFxuICAgIGdldFBhdGhGb3JFbGVtZW50OiBnZXRQYXRoRm9yRWxlbWVudCxcbiAgICBnZXRQcm9maWxpbmdEYXRhOiBnZXRQcm9maWxpbmdEYXRhLFxuICAgIGhhbmRsZUNvbW1pdEZpYmVyUm9vdDogaGFuZGxlQ29tbWl0RmliZXJSb290LFxuICAgIGhhbmRsZUNvbW1pdEZpYmVyVW5tb3VudDogaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50LFxuICAgIGhhbmRsZVBvc3RDb21taXRGaWJlclJvb3Q6IGhhbmRsZVBvc3RDb21taXRGaWJlclJvb3QsXG4gICAgaGFzRmliZXJXaXRoSWQ6IGhhc0ZpYmVyV2l0aElkLFxuICAgIGluc3BlY3RFbGVtZW50OiBpbnNwZWN0RWxlbWVudCxcbiAgICBsb2dFbGVtZW50VG9Db25zb2xlOiBsb2dFbGVtZW50VG9Db25zb2xlLFxuICAgIG92ZXJyaWRlRXJyb3I6IG92ZXJyaWRlRXJyb3IsXG4gICAgb3ZlcnJpZGVTdXNwZW5zZTogb3ZlcnJpZGVTdXNwZW5zZSxcbiAgICBvdmVycmlkZVZhbHVlQXRQYXRoOiBvdmVycmlkZVZhbHVlQXRQYXRoLFxuICAgIHJlbmFtZVBhdGg6IHJlbmFtZVBhdGgsXG4gICAgcGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZTogcGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZSxcbiAgICBwcmVwYXJlVmlld0F0dHJpYnV0ZVNvdXJjZTogcHJlcGFyZVZpZXdBdHRyaWJ1dGVTb3VyY2UsXG4gICAgcHJlcGFyZVZpZXdFbGVtZW50U291cmNlOiBwcmVwYXJlVmlld0VsZW1lbnRTb3VyY2UsXG4gICAgcmVuZGVyZXI6IHJlbmRlcmVyLFxuICAgIHNldFRyYWNlVXBkYXRlc0VuYWJsZWQ6IHNldFRyYWNlVXBkYXRlc0VuYWJsZWQsXG4gICAgc2V0VHJhY2tlZFBhdGg6IHNldFRyYWNrZWRQYXRoLFxuICAgIHN0YXJ0UHJvZmlsaW5nOiBzdGFydFByb2ZpbGluZyxcbiAgICBzdG9wUHJvZmlsaW5nOiBzdG9wUHJvZmlsaW5nLFxuICAgIHN0b3JlQXNHbG9iYWw6IHN0b3JlQXNHbG9iYWwsXG4gICAgdW5wYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlOiB1bnBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUsXG4gICAgdXBkYXRlQ29tcG9uZW50RmlsdGVyczogdXBkYXRlQ29tcG9uZW50RmlsdGVyc1xuICB9O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9pbmRleC5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cblxuLy8gdGhpcyBpcyB0aGUgYmFja2VuZCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgb2xkZXIgUmVhY3QgdmVyc2lvbnNcbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSZW5kZXIodmVyc2lvbikge1xuICByZXR1cm4gIWhhc0Fzc2lnbmVkQmFja2VuZCh2ZXJzaW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdEJhY2tlbmQoaG9vaywgYWdlbnQsIGdsb2JhbCkge1xuICBpZiAoaG9vayA9PSBudWxsKSB7XG4gICAgLy8gRGV2VG9vbHMgZGlkbid0IGdldCBpbmplY3RlZCBpbnRvIHRoaXMgcGFnZSAobWF5YmUgYidjIG9mIHRoZSBjb250ZW50VHlwZSkuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9O1xuICB9XG5cbiAgdmFyIHN1YnMgPSBbaG9vay5zdWIoJ3JlbmRlcmVyLWF0dGFjaGVkJywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgICAgICByZW5kZXJlciA9IF9yZWYucmVuZGVyZXIsXG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlID0gX3JlZi5yZW5kZXJlckludGVyZmFjZTtcbiAgICBhZ2VudC5zZXRSZW5kZXJlckludGVyZmFjZShpZCwgcmVuZGVyZXJJbnRlcmZhY2UpOyAvLyBOb3cgdGhhdCB0aGUgU3RvcmUgYW5kIHRoZSByZW5kZXJlciBpbnRlcmZhY2UgYXJlIGNvbm5lY3RlZCxcbiAgICAvLyBpdCdzIHRpbWUgdG8gZmx1c2ggdGhlIHBlbmRpbmcgb3BlcmF0aW9uIGNvZGVzIHRvIHRoZSBmcm9udGVuZC5cblxuICAgIHJlbmRlcmVySW50ZXJmYWNlLmZsdXNoSW5pdGlhbE9wZXJhdGlvbnMoKTtcbiAgfSksIGhvb2suc3ViKCd1bnN1cHBvcnRlZC1yZW5kZXJlci12ZXJzaW9uJywgZnVuY3Rpb24gKGlkKSB7XG4gICAgYWdlbnQub25VbnN1cHBvcnRlZFJlbmRlcmVyKGlkKTtcbiAgfSksIGhvb2suc3ViKCdmYXN0UmVmcmVzaFNjaGVkdWxlZCcsIGFnZW50Lm9uRmFzdFJlZnJlc2hTY2hlZHVsZWQpLCBob29rLnN1Yignb3BlcmF0aW9ucycsIGFnZW50Lm9uSG9va09wZXJhdGlvbnMpLCBob29rLnN1YigndHJhY2VVcGRhdGVzJywgYWdlbnQub25UcmFjZVVwZGF0ZXMpIC8vIFRPRE8gQWRkIGFkZGl0aW9uYWwgc3Vic2NyaXB0aW9ucyByZXF1aXJlZCBmb3IgcHJvZmlsaW5nIG1vZGVcbiAgXTtcblxuICB2YXIgYXR0YWNoUmVuZGVyZXIgPSBmdW5jdGlvbiBhdHRhY2hSZW5kZXJlcihpZCwgcmVuZGVyZXIpIHtcbiAgICAvLyBvbmx5IGF0dGFjaCBpZiB0aGUgcmVuZGVyZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGJhY2tlbmRcbiAgICBpZiAoIWlzTWF0Y2hpbmdSZW5kZXIocmVuZGVyZXIucmVjb25jaWxlclZlcnNpb24gfHwgcmVuZGVyZXIudmVyc2lvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXJJbnRlcmZhY2UgPSBob29rLnJlbmRlcmVySW50ZXJmYWNlcy5nZXQoaWQpOyAvLyBJbmplY3QgYW55IG5vdC15ZXQtaW5qZWN0ZWQgcmVuZGVyZXJzIChpZiB3ZSBkaWRuJ3QgcmVsb2FkLWFuZC1wcm9maWxlKVxuXG4gICAgaWYgKHJlbmRlcmVySW50ZXJmYWNlID09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVuZGVyZXIuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gcmVhY3QtcmVjb25jaWxlciB2MTYrXG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlID0gYXR0YWNoKGhvb2ssIGlkLCByZW5kZXJlciwgZ2xvYmFsKTtcbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyZXIuQ29tcG9uZW50VHJlZSkge1xuICAgICAgICAvLyByZWFjdC1kb20gdjE1XG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlID0gcmVuZGVyZXJfYXR0YWNoKGhvb2ssIGlkLCByZW5kZXJlciwgZ2xvYmFsKTtcbiAgICAgIH0gZWxzZSB7Ly8gT2xkZXIgcmVhY3QtZG9tIG9yIG90aGVyIHVuc3VwcG9ydGVkIHJlbmRlcmVyIHZlcnNpb25cbiAgICAgIH1cblxuICAgICAgaWYgKHJlbmRlcmVySW50ZXJmYWNlICE9IG51bGwpIHtcbiAgICAgICAgaG9vay5yZW5kZXJlckludGVyZmFjZXMuc2V0KGlkLCByZW5kZXJlckludGVyZmFjZSk7XG4gICAgICB9XG4gICAgfSAvLyBOb3RpZnkgdGhlIERldlRvb2xzIGZyb250ZW5kIGFib3V0IG5ldyByZW5kZXJlcnMuXG4gICAgLy8gVGhpcyBpbmNsdWRlcyBhbnkgdGhhdCB3ZXJlIGF0dGFjaGVkIGVhcmx5ICh2aWEgX19SRUFDVF9ERVZUT09MU19BVFRBQ0hfXykuXG5cblxuICAgIGlmIChyZW5kZXJlckludGVyZmFjZSAhPSBudWxsKSB7XG4gICAgICBob29rLmVtaXQoJ3JlbmRlcmVyLWF0dGFjaGVkJywge1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJlbmRlcmVyOiByZW5kZXJlcixcbiAgICAgICAgcmVuZGVyZXJJbnRlcmZhY2U6IHJlbmRlcmVySW50ZXJmYWNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9vay5lbWl0KCd1bnN1cHBvcnRlZC1yZW5kZXJlci12ZXJzaW9uJywgaWQpO1xuICAgIH1cbiAgfTsgLy8gQ29ubmVjdCByZW5kZXJlcnMgdGhhdCBoYXZlIGFscmVhZHkgaW5qZWN0ZWQgdGhlbXNlbHZlcy5cblxuXG4gIGhvb2sucmVuZGVyZXJzLmZvckVhY2goZnVuY3Rpb24gKHJlbmRlcmVyLCBpZCkge1xuICAgIGF0dGFjaFJlbmRlcmVyKGlkLCByZW5kZXJlcik7XG4gIH0pOyAvLyBDb25uZWN0IGFueSBuZXcgcmVuZGVyZXJzIHRoYXQgaW5qZWN0ZWQgdGhlbXNlbHZlcy5cblxuICBzdWJzLnB1c2goaG9vay5zdWIoJ3JlbmRlcmVyJywgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGlkID0gX3JlZjIuaWQsXG4gICAgICAgIHJlbmRlcmVyID0gX3JlZjIucmVuZGVyZXI7XG4gICAgYXR0YWNoUmVuZGVyZXIoaWQsIHJlbmRlcmVyKTtcbiAgfSkpO1xuICBob29rLmVtaXQoJ3JlYWN0LWRldnRvb2xzJywgYWdlbnQpO1xuICBob29rLnJlYWN0RGV2dG9vbHNBZ2VudCA9IGFnZW50O1xuXG4gIHZhciBvbkFnZW50U2h1dGRvd24gPSBmdW5jdGlvbiBvbkFnZW50U2h1dGRvd24oKSB7XG4gICAgc3Vicy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgfSk7XG4gICAgaG9vay5yZW5kZXJlckludGVyZmFjZXMuZm9yRWFjaChmdW5jdGlvbiAocmVuZGVyZXJJbnRlcmZhY2UpIHtcbiAgICAgIHJlbmRlcmVySW50ZXJmYWNlLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgICBob29rLnJlYWN0RGV2dG9vbHNBZ2VudCA9IG51bGw7XG4gIH07XG5cbiAgYWdlbnQuYWRkTGlzdGVuZXIoJ3NodXRkb3duJywgb25BZ2VudFNodXRkb3duKTtcbiAgc3Vicy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBhZ2VudC5yZW1vdmVMaXN0ZW5lcignc2h1dGRvd24nLCBvbkFnZW50U2h1dGRvd24pO1xuICB9KTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBzdWJzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9KTtcbiAgfTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvTmF0aXZlU3R5bGVFZGl0b3IvcmVzb2x2ZUJveFN0eWxlLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1pcnJvcnMgcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnNwZWN0b3IvcmVzb2x2ZUJveFN0eWxlLmpzIChidXQgd2l0aG91dCBSVEwgc3VwcG9ydCkuXG4gKlxuICogUmVzb2x2ZSBhIHN0eWxlIHByb3BlcnR5IGludG8gaXQncyBjb21wb25lbnQgcGFydHMsIGUuZy5cbiAqXG4gKiByZXNvbHZlQm94U3R5bGUoJ21hcmdpbicsIHttYXJnaW46IDUsIG1hcmdpbkJvdHRvbTogMTB9KVxuICogLT4ge3RvcDogNSwgbGVmdDogNSwgcmlnaHQ6IDUsIGJvdHRvbTogMTB9XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVCb3hTdHlsZShwcmVmaXgsIHN0eWxlKSB7XG4gIHZhciBoYXNQYXJ0cyA9IGZhbHNlO1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIHRvcDogMFxuICB9O1xuICB2YXIgc3R5bGVGb3JBbGwgPSBzdHlsZVtwcmVmaXhdO1xuXG4gIGlmIChzdHlsZUZvckFsbCAhPSBudWxsKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZvci1vZi1sb29wcy9uby1mb3Itb2YtbG9vcHNcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9PYmplY3Qka2V5cyA9IE9iamVjdC5rZXlzKHJlc3VsdCk7IF9pIDwgX09iamVjdCRrZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGtleSA9IF9PYmplY3Qka2V5c1tfaV07XG4gICAgICByZXN1bHRba2V5XSA9IHN0eWxlRm9yQWxsO1xuICAgIH1cblxuICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZUZvckhvcml6b250YWwgPSBzdHlsZVtwcmVmaXggKyAnSG9yaXpvbnRhbCddO1xuXG4gIGlmIChzdHlsZUZvckhvcml6b250YWwgIT0gbnVsbCkge1xuICAgIHJlc3VsdC5sZWZ0ID0gc3R5bGVGb3JIb3Jpem9udGFsO1xuICAgIHJlc3VsdC5yaWdodCA9IHN0eWxlRm9ySG9yaXpvbnRhbDtcbiAgICBoYXNQYXJ0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHN0eWxlRm9yTGVmdCA9IHN0eWxlW3ByZWZpeCArICdMZWZ0J107XG5cbiAgICBpZiAoc3R5bGVGb3JMZWZ0ICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdC5sZWZ0ID0gc3R5bGVGb3JMZWZ0O1xuICAgICAgaGFzUGFydHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzdHlsZUZvclJpZ2h0ID0gc3R5bGVbcHJlZml4ICsgJ1JpZ2h0J107XG5cbiAgICBpZiAoc3R5bGVGb3JSaWdodCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQucmlnaHQgPSBzdHlsZUZvclJpZ2h0O1xuICAgICAgaGFzUGFydHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzdHlsZUZvckVuZCA9IHN0eWxlW3ByZWZpeCArICdFbmQnXTtcblxuICAgIGlmIChzdHlsZUZvckVuZCAhPSBudWxsKSB7XG4gICAgICAvLyBUT0RPIFJUTCBzdXBwb3J0XG4gICAgICByZXN1bHQucmlnaHQgPSBzdHlsZUZvckVuZDtcbiAgICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGVGb3JTdGFydCA9IHN0eWxlW3ByZWZpeCArICdTdGFydCddO1xuXG4gICAgaWYgKHN0eWxlRm9yU3RhcnQgIT0gbnVsbCkge1xuICAgICAgLy8gVE9ETyBSVEwgc3VwcG9ydFxuICAgICAgcmVzdWx0LmxlZnQgPSBzdHlsZUZvclN0YXJ0O1xuICAgICAgaGFzUGFydHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHlsZUZvclZlcnRpY2FsID0gc3R5bGVbcHJlZml4ICsgJ1ZlcnRpY2FsJ107XG5cbiAgaWYgKHN0eWxlRm9yVmVydGljYWwgIT0gbnVsbCkge1xuICAgIHJlc3VsdC5ib3R0b20gPSBzdHlsZUZvclZlcnRpY2FsO1xuICAgIHJlc3VsdC50b3AgPSBzdHlsZUZvclZlcnRpY2FsO1xuICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3R5bGVGb3JCb3R0b20gPSBzdHlsZVtwcmVmaXggKyAnQm90dG9tJ107XG5cbiAgICBpZiAoc3R5bGVGb3JCb3R0b20gIT0gbnVsbCkge1xuICAgICAgcmVzdWx0LmJvdHRvbSA9IHN0eWxlRm9yQm90dG9tO1xuICAgICAgaGFzUGFydHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzdHlsZUZvclRvcCA9IHN0eWxlW3ByZWZpeCArICdUb3AnXTtcblxuICAgIGlmIChzdHlsZUZvclRvcCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQudG9wID0gc3R5bGVGb3JUb3A7XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc1BhcnRzID8gcmVzdWx0IDogbnVsbDtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvTmF0aXZlU3R5bGVFZGl0b3Ivc2V0dXBOYXRpdmVTdHlsZUVkaXRvci5qc1xuZnVuY3Rpb24gc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuZnVuY3Rpb24gc2V0dXBOYXRpdmVTdHlsZUVkaXRvcihicmlkZ2UsIGFnZW50LCByZXNvbHZlTmF0aXZlU3R5bGUsIHZhbGlkQXR0cmlidXRlcykge1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ05hdGl2ZVN0eWxlRWRpdG9yX21lYXN1cmUnLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICAgIHJlbmRlcmVySUQgPSBfcmVmLnJlbmRlcmVySUQ7XG4gICAgbWVhc3VyZVN0eWxlKGFnZW50LCBicmlkZ2UsIHJlc29sdmVOYXRpdmVTdHlsZSwgaWQsIHJlbmRlcmVySUQpO1xuICB9KTtcbiAgYnJpZGdlLmFkZExpc3RlbmVyKCdOYXRpdmVTdHlsZUVkaXRvcl9yZW5hbWVBdHRyaWJ1dGUnLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgaWQgPSBfcmVmMi5pZCxcbiAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYyLnJlbmRlcmVySUQsXG4gICAgICAgIG9sZE5hbWUgPSBfcmVmMi5vbGROYW1lLFxuICAgICAgICBuZXdOYW1lID0gX3JlZjIubmV3TmFtZSxcbiAgICAgICAgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICByZW5hbWVTdHlsZShhZ2VudCwgaWQsIHJlbmRlcmVySUQsIG9sZE5hbWUsIG5ld05hbWUsIHZhbHVlKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBtZWFzdXJlU3R5bGUoYWdlbnQsIGJyaWRnZSwgcmVzb2x2ZU5hdGl2ZVN0eWxlLCBpZCwgcmVuZGVyZXJJRCk7XG4gICAgfSk7XG4gIH0pO1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ05hdGl2ZVN0eWxlRWRpdG9yX3NldFZhbHVlJywgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIGlkID0gX3JlZjMuaWQsXG4gICAgICAgIHJlbmRlcmVySUQgPSBfcmVmMy5yZW5kZXJlcklELFxuICAgICAgICBuYW1lID0gX3JlZjMubmFtZSxcbiAgICAgICAgdmFsdWUgPSBfcmVmMy52YWx1ZTtcbiAgICBzZXRTdHlsZShhZ2VudCwgaWQsIHJlbmRlcmVySUQsIG5hbWUsIHZhbHVlKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBtZWFzdXJlU3R5bGUoYWdlbnQsIGJyaWRnZSwgcmVzb2x2ZU5hdGl2ZVN0eWxlLCBpZCwgcmVuZGVyZXJJRCk7XG4gICAgfSk7XG4gIH0pO1xuICBicmlkZ2Uuc2VuZCgnaXNOYXRpdmVTdHlsZUVkaXRvclN1cHBvcnRlZCcsIHtcbiAgICBpc1N1cHBvcnRlZDogdHJ1ZSxcbiAgICB2YWxpZEF0dHJpYnV0ZXM6IHZhbGlkQXR0cmlidXRlc1xuICB9KTtcbn1cbnZhciBFTVBUWV9CT1hfU1RZTEUgPSB7XG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMFxufTtcbnZhciBjb21wb25lbnRJRFRvU3R5bGVPdmVycmlkZXMgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIG1lYXN1cmVTdHlsZShhZ2VudCwgYnJpZGdlLCByZXNvbHZlTmF0aXZlU3R5bGUsIGlkLCByZW5kZXJlcklEKSB7XG4gIHZhciBkYXRhID0gYWdlbnQuZ2V0SW5zdGFuY2VBbmRTdHlsZSh7XG4gICAgaWQ6IGlkLFxuICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySURcbiAgfSk7XG5cbiAgaWYgKCFkYXRhIHx8ICFkYXRhLnN0eWxlKSB7XG4gICAgYnJpZGdlLnNlbmQoJ05hdGl2ZVN0eWxlRWRpdG9yX3N0eWxlQW5kTGF5b3V0Jywge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbGF5b3V0OiBudWxsLFxuICAgICAgc3R5bGU6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSBkYXRhLmluc3RhbmNlLFxuICAgICAgc3R5bGUgPSBkYXRhLnN0eWxlO1xuICB2YXIgcmVzb2x2ZWRTdHlsZSA9IHJlc29sdmVOYXRpdmVTdHlsZShzdHlsZSk7IC8vIElmIGl0J3MgYSBob3N0IGNvbXBvbmVudCB3ZSBlZGl0ZWQgYmVmb3JlLCBhbWVuZCBzdHlsZXMuXG5cbiAgdmFyIHN0eWxlT3ZlcnJpZGVzID0gY29tcG9uZW50SURUb1N0eWxlT3ZlcnJpZGVzLmdldChpZCk7XG5cbiAgaWYgKHN0eWxlT3ZlcnJpZGVzICE9IG51bGwpIHtcbiAgICByZXNvbHZlZFN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzb2x2ZWRTdHlsZSwgc3R5bGVPdmVycmlkZXMpO1xuICB9XG5cbiAgaWYgKCFpbnN0YW5jZSB8fCB0eXBlb2YgaW5zdGFuY2UubWVhc3VyZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGJyaWRnZS5zZW5kKCdOYXRpdmVTdHlsZUVkaXRvcl9zdHlsZUFuZExheW91dCcsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxheW91dDogbnVsbCxcbiAgICAgIHN0eWxlOiByZXNvbHZlZFN0eWxlIHx8IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpbnN0YW5jZS5tZWFzdXJlKGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3ApIHtcbiAgICAvLyBSTiBBbmRyb2lkIHNvbWV0aW1lcyByZXR1cm5zIHVuZGVmaW5lZCBoZXJlLiBEb24ndCBzZW5kIG1lYXN1cmVtZW50cyBpbiB0aGlzIGNhc2UuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2poZW4wNDA5L3JlYWN0LW5hdGl2ZS1kZWJ1Z2dlci9pc3N1ZXMvODQjaXNzdWVjb21tZW50LTMwNDYxMTgxN1xuICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGJyaWRnZS5zZW5kKCdOYXRpdmVTdHlsZUVkaXRvcl9zdHlsZUFuZExheW91dCcsIHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBsYXlvdXQ6IG51bGwsXG4gICAgICAgIHN0eWxlOiByZXNvbHZlZFN0eWxlIHx8IG51bGxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYXJnaW4gPSByZXNvbHZlZFN0eWxlICE9IG51bGwgJiYgcmVzb2x2ZUJveFN0eWxlKCdtYXJnaW4nLCByZXNvbHZlZFN0eWxlKSB8fCBFTVBUWV9CT1hfU1RZTEU7XG4gICAgdmFyIHBhZGRpbmcgPSByZXNvbHZlZFN0eWxlICE9IG51bGwgJiYgcmVzb2x2ZUJveFN0eWxlKCdwYWRkaW5nJywgcmVzb2x2ZWRTdHlsZSkgfHwgRU1QVFlfQk9YX1NUWUxFO1xuICAgIGJyaWRnZS5zZW5kKCdOYXRpdmVTdHlsZUVkaXRvcl9zdHlsZUFuZExheW91dCcsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxheW91dDoge1xuICAgICAgICB4OiB4LFxuICAgICAgICB5OiB5LFxuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbWFyZ2luOiBtYXJnaW4sXG4gICAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICAgIH0sXG4gICAgICBzdHlsZTogcmVzb2x2ZWRTdHlsZSB8fCBudWxsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzaGFsbG93Q2xvbmUob2JqZWN0KSB7XG4gIHZhciBjbG9uZWQgPSB7fTtcblxuICBmb3IgKHZhciBuIGluIG9iamVjdCkge1xuICAgIGNsb25lZFtuXSA9IG9iamVjdFtuXTtcbiAgfVxuXG4gIHJldHVybiBjbG9uZWQ7XG59XG5cbmZ1bmN0aW9uIHJlbmFtZVN0eWxlKGFnZW50LCBpZCwgcmVuZGVyZXJJRCwgb2xkTmFtZSwgbmV3TmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9yZWY0O1xuXG4gIHZhciBkYXRhID0gYWdlbnQuZ2V0SW5zdGFuY2VBbmRTdHlsZSh7XG4gICAgaWQ6IGlkLFxuICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySURcbiAgfSk7XG5cbiAgaWYgKCFkYXRhIHx8ICFkYXRhLnN0eWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gZGF0YS5pbnN0YW5jZSxcbiAgICAgIHN0eWxlID0gZGF0YS5zdHlsZTtcbiAgdmFyIG5ld1N0eWxlID0gbmV3TmFtZSA/IChfcmVmNCA9IHt9LCBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX2RlZmluZVByb3BlcnR5KF9yZWY0LCBvbGROYW1lLCB1bmRlZmluZWQpLCBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX2RlZmluZVByb3BlcnR5KF9yZWY0LCBuZXdOYW1lLCB2YWx1ZSksIF9yZWY0KSA6IHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfZGVmaW5lUHJvcGVydHkoe30sIG9sZE5hbWUsIHVuZGVmaW5lZCk7XG4gIHZhciBjdXN0b21TdHlsZTsgLy8gVE9ETyBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZSByZW5kZXJlciBpbnRlcmZhY2UgYWJzdHJhY3RlZCB0aGlzIGF3YXkgc29tZWhvdy5cblxuICBpZiAoaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLnNldE5hdGl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBob3N0IGNvbXBvbmVudCwgd2UgbmVlZCB0byB1c2Ugc2V0TmF0aXZlUHJvcHMoKS5cbiAgICAvLyBSZW1lbWJlciB0byBcImNvcnJlY3RcIiByZXNvbHZlZCBzdHlsZXMgd2hlbiB3ZSByZWFkIHRoZW0gbmV4dCB0aW1lLlxuICAgIHZhciBzdHlsZU92ZXJyaWRlcyA9IGNvbXBvbmVudElEVG9TdHlsZU92ZXJyaWRlcy5nZXQoaWQpO1xuXG4gICAgaWYgKCFzdHlsZU92ZXJyaWRlcykge1xuICAgICAgY29tcG9uZW50SURUb1N0eWxlT3ZlcnJpZGVzLnNldChpZCwgbmV3U3R5bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlT3ZlcnJpZGVzLCBuZXdTdHlsZSk7XG4gICAgfSAvLyBUT0RPIEZhYnJpYyBkb2VzIG5vdCBzdXBwb3J0IHNldE5hdGl2ZVByb3BzOyBjaGF0IHdpdGggU2ViYXN0aWFuIG9yIEVsaVxuXG5cbiAgICBpbnN0YW5jZS5zZXROYXRpdmVQcm9wcyh7XG4gICAgICBzdHlsZTogbmV3U3R5bGVcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChzcmNfaXNBcnJheShzdHlsZSkpIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gc3R5bGUubGVuZ3RoIC0gMTtcblxuICAgIGlmIChzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX3R5cGVvZihzdHlsZVtsYXN0SW5kZXhdKSA9PT0gJ29iamVjdCcgJiYgIXNyY19pc0FycmF5KHN0eWxlW2xhc3RJbmRleF0pKSB7XG4gICAgICBjdXN0b21TdHlsZSA9IHNoYWxsb3dDbG9uZShzdHlsZVtsYXN0SW5kZXhdKTtcbiAgICAgIGRlbGV0ZSBjdXN0b21TdHlsZVtvbGROYW1lXTtcblxuICAgICAgaWYgKG5ld05hbWUpIHtcbiAgICAgICAgY3VzdG9tU3R5bGVbbmV3TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1c3RvbVN0eWxlW29sZE5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBhZ2VudC5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICBwYXRoOiBbJ3N0eWxlJywgbGFzdEluZGV4XSxcbiAgICAgICAgdmFsdWU6IGN1c3RvbVN0eWxlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWdlbnQub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICAgIHR5cGU6ICdwcm9wcycsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgcGF0aDogWydzdHlsZSddLFxuICAgICAgICB2YWx1ZTogc3R5bGUuY29uY2F0KFtuZXdTdHlsZV0pXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2Yoc3R5bGUpID09PSAnb2JqZWN0Jykge1xuICAgIGN1c3RvbVN0eWxlID0gc2hhbGxvd0Nsb25lKHN0eWxlKTtcbiAgICBkZWxldGUgY3VzdG9tU3R5bGVbb2xkTmFtZV07XG5cbiAgICBpZiAobmV3TmFtZSkge1xuICAgICAgY3VzdG9tU3R5bGVbbmV3TmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VzdG9tU3R5bGVbb2xkTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgYWdlbnQub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICB0eXBlOiAncHJvcHMnLFxuICAgICAgaWQ6IGlkLFxuICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgIHBhdGg6IFsnc3R5bGUnXSxcbiAgICAgIHZhbHVlOiBjdXN0b21TdHlsZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGFnZW50Lm92ZXJyaWRlVmFsdWVBdFBhdGgoe1xuICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgIGlkOiBpZCxcbiAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICBwYXRoOiBbJ3N0eWxlJ10sXG4gICAgICB2YWx1ZTogW3N0eWxlLCBuZXdTdHlsZV1cbiAgICB9KTtcbiAgfVxuXG4gIGFnZW50LmVtaXQoJ2hpZGVOYXRpdmVIaWdobGlnaHQnKTtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGUoYWdlbnQsIGlkLCByZW5kZXJlcklELCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGFnZW50LmdldEluc3RhbmNlQW5kU3R5bGUoe1xuICAgIGlkOiBpZCxcbiAgICByZW5kZXJlcklEOiByZW5kZXJlcklEXG4gIH0pO1xuXG4gIGlmICghZGF0YSB8fCAhZGF0YS5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IGRhdGEuaW5zdGFuY2UsXG4gICAgICBzdHlsZSA9IGRhdGEuc3R5bGU7XG5cbiAgdmFyIG5ld1N0eWxlID0gc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl9kZWZpbmVQcm9wZXJ0eSh7fSwgbmFtZSwgdmFsdWUpOyAvLyBUT0RPIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIHJlbmRlcmVyIGludGVyZmFjZSBhYnN0cmFjdGVkIHRoaXMgYXdheSBzb21laG93LlxuXG5cbiAgaWYgKGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5zZXROYXRpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgaG9zdCBjb21wb25lbnQsIHdlIG5lZWQgdG8gdXNlIHNldE5hdGl2ZVByb3BzKCkuXG4gICAgLy8gUmVtZW1iZXIgdG8gXCJjb3JyZWN0XCIgcmVzb2x2ZWQgc3R5bGVzIHdoZW4gd2UgcmVhZCB0aGVtIG5leHQgdGltZS5cbiAgICB2YXIgc3R5bGVPdmVycmlkZXMgPSBjb21wb25lbnRJRFRvU3R5bGVPdmVycmlkZXMuZ2V0KGlkKTtcblxuICAgIGlmICghc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgIGNvbXBvbmVudElEVG9TdHlsZU92ZXJyaWRlcy5zZXQoaWQsIG5ld1N0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZU92ZXJyaWRlcywgbmV3U3R5bGUpO1xuICAgIH0gLy8gVE9ETyBGYWJyaWMgZG9lcyBub3Qgc3VwcG9ydCBzZXROYXRpdmVQcm9wczsgY2hhdCB3aXRoIFNlYmFzdGlhbiBvciBFbGlcblxuXG4gICAgaW5zdGFuY2Uuc2V0TmF0aXZlUHJvcHMoe1xuICAgICAgc3R5bGU6IG5ld1N0eWxlXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoc3JjX2lzQXJyYXkoc3R5bGUpKSB7XG4gICAgdmFyIGxhc3RMZW5ndGggPSBzdHlsZS5sZW5ndGggLSAxO1xuXG4gICAgaWYgKHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfdHlwZW9mKHN0eWxlW2xhc3RMZW5ndGhdKSA9PT0gJ29iamVjdCcgJiYgIXNyY19pc0FycmF5KHN0eWxlW2xhc3RMZW5ndGhdKSkge1xuICAgICAgYWdlbnQub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICAgIHR5cGU6ICdwcm9wcycsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgcGF0aDogWydzdHlsZScsIGxhc3RMZW5ndGgsIG5hbWVdLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZ2VudC5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICBwYXRoOiBbJ3N0eWxlJ10sXG4gICAgICAgIHZhbHVlOiBzdHlsZS5jb25jYXQoW25ld1N0eWxlXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhZ2VudC5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgIHR5cGU6ICdwcm9wcycsXG4gICAgICBpZDogaWQsXG4gICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgcGF0aDogWydzdHlsZSddLFxuICAgICAgdmFsdWU6IFtzdHlsZSwgbmV3U3R5bGVdXG4gICAgfSk7XG4gIH1cblxuICBhZ2VudC5lbWl0KCdoaWRlTmF0aXZlSGlnaGxpZ2h0Jyk7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY2FjaGVkU2V0dGluZ3MuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuIC8vIE5vdGU6IGFsbCBrZXlzIHNob3VsZCBiZSBvcHRpb25hbCBpbiB0aGlzIHR5cGUsIGJlY2F1c2UgdXNlcnMgY2FuIHVzZSBuZXdlclxuLy8gdmVyc2lvbnMgb2YgUmVhY3QgRGV2VG9vbHMgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBSZWFjdCBOYXRpdmUsIGFuZCB0aGUgb2JqZWN0XG4vLyBwcm92aWRlZCBieSBSZWFjdCBOYXRpdmUgbWF5IG5vdCBpbmNsdWRlIGFsbCBvZiB0aGlzIHR5cGUncyBmaWVsZHMuXG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVc2luZ0NhY2hlZFNldHRpbmdzKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyKSB7XG4gIGluaXRpYWxpemVDb25zb2xlUGF0Y2hTZXR0aW5ncyhkZXZUb29sc1NldHRpbmdzTWFuYWdlcik7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVDb25zb2xlUGF0Y2hTZXR0aW5ncyhkZXZUb29sc1NldHRpbmdzTWFuYWdlcikge1xuICBpZiAoZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIuZ2V0Q29uc29sZVBhdGNoU2V0dGluZ3MgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb25zb2xlUGF0Y2hTZXR0aW5nc1N0cmluZyA9IGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyLmdldENvbnNvbGVQYXRjaFNldHRpbmdzKCk7XG5cbiAgaWYgKGNvbnNvbGVQYXRjaFNldHRpbmdzU3RyaW5nID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFyc2VkQ29uc29sZVBhdGNoU2V0dGluZ3MgPSBwYXJzZUNvbnNvbGVQYXRjaFNldHRpbmdzKGNvbnNvbGVQYXRjaFNldHRpbmdzU3RyaW5nKTtcblxuICBpZiAocGFyc2VkQ29uc29sZVBhdGNoU2V0dGluZ3MgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdyaXRlQ29uc29sZVBhdGNoU2V0dGluZ3NUb1dpbmRvdyhwYXJzZWRDb25zb2xlUGF0Y2hTZXR0aW5ncyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29uc29sZVBhdGNoU2V0dGluZ3MoY29uc29sZVBhdGNoU2V0dGluZ3NTdHJpbmcpIHtcbiAgdmFyIF9jYXN0Qm9vbCwgX2Nhc3RCb29sMiwgX2Nhc3RCb29sMywgX2Nhc3RCb29sNCwgX2Nhc3RCcm93c2VyVGhlbWU7XG5cbiAgdmFyIHBhcnNlZFZhbHVlID0gSlNPTi5wYXJzZShjb25zb2xlUGF0Y2hTZXR0aW5nc1N0cmluZyAhPT0gbnVsbCAmJiBjb25zb2xlUGF0Y2hTZXR0aW5nc1N0cmluZyAhPT0gdm9pZCAwID8gY29uc29sZVBhdGNoU2V0dGluZ3NTdHJpbmcgOiAne30nKTtcbiAgdmFyIGFwcGVuZENvbXBvbmVudFN0YWNrID0gcGFyc2VkVmFsdWUuYXBwZW5kQ29tcG9uZW50U3RhY2ssXG4gICAgICBicmVha09uQ29uc29sZUVycm9ycyA9IHBhcnNlZFZhbHVlLmJyZWFrT25Db25zb2xlRXJyb3JzLFxuICAgICAgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzID0gcGFyc2VkVmFsdWUuc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzLFxuICAgICAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlID0gcGFyc2VkVmFsdWUuaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlLFxuICAgICAgYnJvd3NlclRoZW1lID0gcGFyc2VkVmFsdWUuYnJvd3NlclRoZW1lO1xuICByZXR1cm4ge1xuICAgIGFwcGVuZENvbXBvbmVudFN0YWNrOiAoX2Nhc3RCb29sID0gY2FzdEJvb2woYXBwZW5kQ29tcG9uZW50U3RhY2spKSAhPT0gbnVsbCAmJiBfY2FzdEJvb2wgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbCA6IHRydWUsXG4gICAgYnJlYWtPbkNvbnNvbGVFcnJvcnM6IChfY2FzdEJvb2wyID0gY2FzdEJvb2woYnJlYWtPbkNvbnNvbGVFcnJvcnMpKSAhPT0gbnVsbCAmJiBfY2FzdEJvb2wyICE9PSB2b2lkIDAgPyBfY2FzdEJvb2wyIDogZmFsc2UsXG4gICAgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzOiAoX2Nhc3RCb29sMyA9IGNhc3RCb29sKHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycykpICE9PSBudWxsICYmIF9jYXN0Qm9vbDMgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbDMgOiB0cnVlLFxuICAgIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZTogKF9jYXN0Qm9vbDQgPSBjYXN0Qm9vbChoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUpKSAhPT0gbnVsbCAmJiBfY2FzdEJvb2w0ICE9PSB2b2lkIDAgPyBfY2FzdEJvb2w0IDogZmFsc2UsXG4gICAgYnJvd3NlclRoZW1lOiAoX2Nhc3RCcm93c2VyVGhlbWUgPSBjYXN0QnJvd3NlclRoZW1lKGJyb3dzZXJUaGVtZSkpICE9PSBudWxsICYmIF9jYXN0QnJvd3NlclRoZW1lICE9PSB2b2lkIDAgPyBfY2FzdEJyb3dzZXJUaGVtZSA6ICdkYXJrJ1xuICB9O1xufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnNvbGVQYXRjaFNldHRpbmdzKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyLCB2YWx1ZSkge1xuICBpZiAoZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIuc2V0Q29uc29sZVBhdGNoU2V0dGluZ3MgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyLnNldENvbnNvbGVQYXRjaFNldHRpbmdzKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvYmFja2VuZC5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cblxuXG5cblxuXG4vLyBJbnN0YWxsIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIGFsbG93IHBhdGNoaW5nIGNvbnNvbGUgZWFybHkgKGR1cmluZyBpbmplY3Rpb24pLlxuLy8gVGhpcyBwcm92aWRlcyBSZWFjdCBOYXRpdmUgZGV2ZWxvcGVycyB3aXRoIGNvbXBvbmVudHMgc3RhY2tzIGV2ZW4gaWYgdGhleSBkb24ndCBydW4gRGV2VG9vbHMuXG5pbnN0YWxsQ29uc29sZUZ1bmN0aW9uc1RvV2luZG93KCk7XG5pbnN0YWxsSG9vayh3aW5kb3cpO1xudmFyIGhvb2sgPSB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xudmFyIHNhdmVkQ29tcG9uZW50RmlsdGVycyA9IGdldERlZmF1bHRDb21wb25lbnRGaWx0ZXJzKCk7XG5cbmZ1bmN0aW9uIGJhY2tlbmRfZGVidWcobWV0aG9kTmFtZSkge1xuICBpZiAoX19ERUJVR19fKSB7XG4gICAgdmFyIF9jb25zb2xlO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgKF9jb25zb2xlID0gY29uc29sZSkubG9nLmFwcGx5KF9jb25zb2xlLCBbXCIlY1tjb3JlL2JhY2tlbmRdICVjXCIuY29uY2F0KG1ldGhvZE5hbWUpLCAnY29sb3I6IHRlYWw7IGZvbnQtd2VpZ2h0OiBib2xkOycsICdmb250LXdlaWdodDogYm9sZDsnXS5jb25jYXQoYXJncykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbm5lY3RUb0RldlRvb2xzKG9wdGlvbnMpIHtcbiAgaWYgKGhvb2sgPT0gbnVsbCkge1xuICAgIC8vIERldlRvb2xzIGRpZG4ndCBnZXQgaW5qZWN0ZWQgaW50byB0aGlzIHBhZ2UgKG1heWJlIGInYyBvZiB0aGUgY29udGVudFR5cGUpLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfcmVmID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIF9yZWYkaG9zdCA9IF9yZWYuaG9zdCxcbiAgICAgIGhvc3QgPSBfcmVmJGhvc3QgPT09IHZvaWQgMCA/ICdsb2NhbGhvc3QnIDogX3JlZiRob3N0LFxuICAgICAgbmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXMgPSBfcmVmLm5hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzLFxuICAgICAgX3JlZiR1c2VIdHRwcyA9IF9yZWYudXNlSHR0cHMsXG4gICAgICB1c2VIdHRwcyA9IF9yZWYkdXNlSHR0cHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR1c2VIdHRwcyxcbiAgICAgIF9yZWYkcG9ydCA9IF9yZWYucG9ydCxcbiAgICAgIHBvcnQgPSBfcmVmJHBvcnQgPT09IHZvaWQgMCA/IDgwOTcgOiBfcmVmJHBvcnQsXG4gICAgICB3ZWJzb2NrZXQgPSBfcmVmLndlYnNvY2tldCxcbiAgICAgIF9yZWYkcmVzb2x2ZVJOU3R5bGUgPSBfcmVmLnJlc29sdmVSTlN0eWxlLFxuICAgICAgcmVzb2x2ZVJOU3R5bGUgPSBfcmVmJHJlc29sdmVSTlN0eWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRyZXNvbHZlUk5TdHlsZSxcbiAgICAgIF9yZWYkcmV0cnlDb25uZWN0aW9uRCA9IF9yZWYucmV0cnlDb25uZWN0aW9uRGVsYXksXG4gICAgICByZXRyeUNvbm5lY3Rpb25EZWxheSA9IF9yZWYkcmV0cnlDb25uZWN0aW9uRCA9PT0gdm9pZCAwID8gMjAwMCA6IF9yZWYkcmV0cnlDb25uZWN0aW9uRCxcbiAgICAgIF9yZWYkaXNBcHBBY3RpdmUgPSBfcmVmLmlzQXBwQWN0aXZlLFxuICAgICAgaXNBcHBBY3RpdmUgPSBfcmVmJGlzQXBwQWN0aXZlID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gOiBfcmVmJGlzQXBwQWN0aXZlLFxuICAgICAgZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIgPSBfcmVmLmRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyO1xuXG4gIHZhciBwcm90b2NvbCA9IHVzZUh0dHBzID8gJ3dzcycgOiAnd3MnO1xuICB2YXIgcmV0cnlUaW1lb3V0SUQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlUmV0cnkoKSB7XG4gICAgaWYgKHJldHJ5VGltZW91dElEID09PSBudWxsKSB7XG4gICAgICAvLyBUd28gc2Vjb25kcyBiZWNhdXNlIFJOIGhhZCBpc3N1ZXMgd2l0aCBxdWljayByZXRyaWVzLlxuICAgICAgcmV0cnlUaW1lb3V0SUQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3RUb0RldlRvb2xzKG9wdGlvbnMpO1xuICAgICAgfSwgcmV0cnlDb25uZWN0aW9uRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXZUb29sc1NldHRpbmdzTWFuYWdlciAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGluaXRpYWxpemVVc2luZ0NhY2hlZFNldHRpbmdzKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiB3ZSBjYWxsIGEgbWV0aG9kIG9uIGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyIHRoYXQgdGhyb3dzLCBvciBpZlxuICAgICAgLy8gaXMgaW52YWxpZCBkYXRhIHJlYWQgb3V0LCBkb24ndCB0aHJvdyBhbmQgZG9uJ3QgaW50ZXJydXB0IGluaXRpYWxpemF0aW9uXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNBcHBBY3RpdmUoKSkge1xuICAgIC8vIElmIHRoZSBhcHAgaXMgaW4gYmFja2dyb3VuZCwgbWF5YmUgcmV0cnkgbGF0ZXIuXG4gICAgLy8gRG9uJ3QgYWN0dWFsbHkgYXR0ZW1wdCB0byBjb25uZWN0IHVudGlsIHdlJ3JlIGluIGZvcmVncm91bmQuXG4gICAgc2NoZWR1bGVSZXRyeSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBicmlkZ2UgPSBudWxsO1xuICB2YXIgbWVzc2FnZUxpc3RlbmVycyA9IFtdO1xuICB2YXIgdXJpID0gcHJvdG9jb2wgKyAnOi8vJyArIGhvc3QgKyAnOicgKyBwb3J0OyAvLyBJZiBleGlzdGluZyB3ZWJzb2NrZXQgaXMgcGFzc2VkLCB1c2UgaXQuXG4gIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgb3VyIGN1c3RvbSBpbnRlZ3JhdGlvbnMuXG4gIC8vIFNlZSBENjI1MTc0NC5cblxuICB2YXIgd3MgPSB3ZWJzb2NrZXQgPyB3ZWJzb2NrZXQgOiBuZXcgd2luZG93LldlYlNvY2tldCh1cmkpO1xuICB3cy5vbmNsb3NlID0gaGFuZGxlQ2xvc2U7XG4gIHdzLm9uZXJyb3IgPSBoYW5kbGVGYWlsZWQ7XG4gIHdzLm9ubWVzc2FnZSA9IGhhbmRsZU1lc3NhZ2U7XG5cbiAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgIGJyaWRnZSA9IG5ldyBzcmNfYnJpZGdlKHtcbiAgICAgIGxpc3RlbjogZnVuY3Rpb24gbGlzdGVuKGZuKSB7XG4gICAgICAgIG1lc3NhZ2VMaXN0ZW5lcnMucHVzaChmbik7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gbWVzc2FnZUxpc3RlbmVycy5pbmRleE9mKGZuKTtcblxuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBtZXNzYWdlTGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNlbmQ6IGZ1bmN0aW9uIHNlbmQoZXZlbnQsIHBheWxvYWQsIHRyYW5zZmVyYWJsZSkge1xuICAgICAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gd3MuT1BFTikge1xuICAgICAgICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgICAgICAgIGJhY2tlbmRfZGVidWcoJ3dhbGwuc2VuZCgpJywgZXZlbnQsIHBheWxvYWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICAgICAgICBiYWNrZW5kX2RlYnVnKCd3YWxsLnNlbmQoKScsICdTaHV0dGluZyBkb3duIGJyaWRnZSBiZWNhdXNlIG9mIGNsb3NlZCBXZWJTb2NrZXQgY29ubmVjdGlvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChicmlkZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGJyaWRnZS5zaHV0ZG93bigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjaGVkdWxlUmV0cnkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndXBkYXRlQ29tcG9uZW50RmlsdGVycycsIGZ1bmN0aW9uIChjb21wb25lbnRGaWx0ZXJzKSB7XG4gICAgICAvLyBTYXZlIGZpbHRlciBjaGFuZ2VzIGluIG1lbW9yeSwgaW4gY2FzZSBEZXZUb29scyBpcyByZWxvYWRlZC5cbiAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIHJlbmRlcmVyIHdpbGwgYWxyZWFkeSBiZSB1c2luZyB0aGUgdXBkYXRlZCB2YWx1ZXMuXG4gICAgICAvLyBXZSdsbCBsb3NlIHRoZXNlIGluIGJldHdlZW4gYmFja2VuZCByZWxvYWRzIGJ1dCB0aGF0IGNhbid0IGJlIGhlbHBlZC5cbiAgICAgIHNhdmVkQ29tcG9uZW50RmlsdGVycyA9IGNvbXBvbmVudEZpbHRlcnM7XG4gICAgfSk7XG5cbiAgICBpZiAoZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIgIT0gbnVsbCAmJiBicmlkZ2UgIT0gbnVsbCkge1xuICAgICAgYnJpZGdlLmFkZExpc3RlbmVyKCd1cGRhdGVDb25zb2xlUGF0Y2hTZXR0aW5ncycsIGZ1bmN0aW9uIChjb25zb2xlUGF0Y2hTZXR0aW5ncykge1xuICAgICAgICByZXR1cm4gY2FjaGVDb25zb2xlUGF0Y2hTZXR0aW5ncyhkZXZUb29sc1NldHRpbmdzTWFuYWdlciwgY29uc29sZVBhdGNoU2V0dGluZ3MpO1xuICAgICAgfSk7XG4gICAgfSAvLyBUaGUgcmVuZGVyZXIgaW50ZXJmYWNlIGRvZXNuJ3QgcmVhZCBzYXZlZCBjb21wb25lbnQgZmlsdGVycyBkaXJlY3RseSxcbiAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIGdlbmVyYWxseSBzdG9yZWQgaW4gbG9jYWxTdG9yYWdlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXh0ZW5zaW9uLlxuICAgIC8vIEJlY2F1c2Ugb2YgdGhpcyBpdCByZWxpZXMgb24gdGhlIGV4dGVuc2lvbiB0byBwYXNzIGZpbHRlcnMuXG4gICAgLy8gSW4gdGhlIGNhc2Ugb2YgdGhlIHN0YW5kYWxvbmUgRGV2VG9vbHMgYmVpbmcgdXNlZCB3aXRoIGEgd2Vic2l0ZSxcbiAgICAvLyBzYXZlZCBmaWx0ZXJzIGFyZSBpbmplY3RlZCBhbG9uZyB3aXRoIHRoZSBiYWNrZW5kIHNjcmlwdCB0YWcgc28gd2Ugc2hvdWxkbid0IG92ZXJyaWRlIHRoZW0gaGVyZS5cbiAgICAvLyBUaGlzIGluamVjdGlvbiBzdHJhdGVneSBkb2Vzbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSB0aG91Z2guXG4gICAgLy8gSWRlYWxseSB0aGUgYmFja2VuZCB3b3VsZCBzYXZlIHRoZSBmaWx0ZXJzIGl0c2VsZiwgYnV0IFJOIGRvZXNuJ3QgcHJvdmlkZSBhIHN5bmMgc3RvcmFnZSBzb2x1dGlvbi5cbiAgICAvLyBTbyBmb3Igbm93IHdlIGp1c3QgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBkZWZhdWx0IGZpbHRlcnMuLi5cblxuXG4gICAgaWYgKHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0NPTVBPTkVOVF9GSUxURVJTX18gPT0gbnVsbCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICBicmlkZ2Uuc2VuZCgnb3ZlcnJpZGVDb21wb25lbnRGaWx0ZXJzJywgc2F2ZWRDb21wb25lbnRGaWx0ZXJzKTtcbiAgICB9IC8vIFRPRE8gKG5wbS1wYWNrYWdlcykgV2FybiBpZiBcImlzQmFja2VuZFN0b3JhZ2VBUElTdXBwb3J0ZWRcIlxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgdmFyIGFnZW50ID0gbmV3IEFnZW50KGJyaWRnZSk7XG4gICAgYWdlbnQuYWRkTGlzdGVuZXIoJ3NodXRkb3duJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gSWYgd2UgcmVjZWl2ZWQgJ3NodXRkb3duJyBmcm9tIGBhZ2VudGAsIHdlIGFzc3VtZSB0aGUgYGJyaWRnZWAgaXMgYWxyZWFkeSBzaHV0dGluZyBkb3duLFxuICAgICAgLy8gYW5kIHRoYXQgY2F1c2VkIHRoZSAnc2h1dGRvd24nIGV2ZW50IG9uIHRoZSBgYWdlbnRgLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgYGJyaWRnZS5zaHV0ZG93bigpYCBoZXJlLlxuICAgICAgaG9vay5lbWl0KCdzaHV0ZG93bicpO1xuICAgIH0pO1xuICAgIGluaXRCYWNrZW5kKGhvb2ssIGFnZW50LCB3aW5kb3cpOyAvLyBTZXR1cCBSZWFjdCBOYXRpdmUgc3R5bGUgZWRpdG9yIGlmIHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBpdC5cblxuICAgIGlmIChyZXNvbHZlUk5TdHlsZSAhPSBudWxsIHx8IGhvb2sucmVzb2x2ZVJOU3R5bGUgIT0gbnVsbCkge1xuICAgICAgc2V0dXBOYXRpdmVTdHlsZUVkaXRvciggLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgYnJpZGdlLCBhZ2VudCwgcmVzb2x2ZVJOU3R5bGUgfHwgaG9vay5yZXNvbHZlUk5TdHlsZSwgbmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXMgfHwgaG9vay5uYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcyB8fCBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlIGxpc3RlbiB0byBkZXRlY3QgaWYgdGhlIGVudmlyb25tZW50IGxhdGVyIHN1cHBvcnRzIGl0LlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIEZsaXBwZXIgZG9lcyBub3QgZWFnZXJseSBpbmplY3QgdGhlc2UgdmFsdWVzLlxuICAgICAgLy8gSW5zdGVhZCBpdCByZWxpZXMgb24gdGhlIFJlYWN0IE5hdGl2ZSBJbnNwZWN0b3IgdG8gbGF6aWx5IGluamVjdCB0aGVtLlxuICAgICAgdmFyIGxhenlSZXNvbHZlUk5TdHlsZTtcbiAgICAgIHZhciBsYXp5TmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXM7XG5cbiAgICAgIHZhciBpbml0QWZ0ZXJUaWNrID0gZnVuY3Rpb24gaW5pdEFmdGVyVGljaygpIHtcbiAgICAgICAgaWYgKGJyaWRnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNldHVwTmF0aXZlU3R5bGVFZGl0b3IoYnJpZGdlLCBhZ2VudCwgbGF6eVJlc29sdmVSTlN0eWxlLCBsYXp5TmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWhvb2suaGFzT3duUHJvcGVydHkoJ3Jlc29sdmVSTlN0eWxlJykpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhvb2ssICdyZXNvbHZlUk5TdHlsZScsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXp5UmVzb2x2ZVJOU3R5bGU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgbGF6eVJlc29sdmVSTlN0eWxlID0gdmFsdWU7XG4gICAgICAgICAgICBpbml0QWZ0ZXJUaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFob29rLmhhc093blByb3BlcnR5KCduYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcycpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShob29rLCAnbmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXMnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbGF6eU5hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgIGxhenlOYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcyA9IHZhbHVlO1xuICAgICAgICAgICAgaW5pdEFmdGVyVGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGJhY2tlbmRfZGVidWcoJ1dlYlNvY2tldC5vbmNsb3NlJyk7XG4gICAgfVxuXG4gICAgaWYgKGJyaWRnZSAhPT0gbnVsbCkge1xuICAgICAgYnJpZGdlLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVSZXRyeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmFpbGVkKCkge1xuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGJhY2tlbmRfZGVidWcoJ1dlYlNvY2tldC5vbmVycm9yJyk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVSZXRyeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkge1xuICAgIHZhciBkYXRhO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG5cbiAgICAgICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgICAgIGJhY2tlbmRfZGVidWcoJ1dlYlNvY2tldC5vbm1lc3NhZ2UnLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbUmVhY3QgRGV2VG9vbHNdIEZhaWxlZCB0byBwYXJzZSBKU09OOiAnICsgZXZlbnQuZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWVzc2FnZUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBqc2MgZG9lc24ndCBwbGF5IHNvIHdlbGwgd2l0aCB0cmFjZWJhY2tzIHRoYXQgZ28gaW50byBldmFsJ2QgY29kZSxcbiAgICAgICAgLy8gc28gdGhlIHN0YWNrIHRyYWNlIGhlcmUgd2lsbCBzdG9wIGF0IHRoZSBgZXZhbCgpYCBjYWxsLiBHZXR0aW5nIHRoZVxuICAgICAgICAvLyBtZXNzYWdlIHRoYXQgY2F1c2VkIHRoZSBlcnJvciBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8gZm9yIG5vdy5cbiAgICAgICAgY29uc29sZS5sb2coJ1tSZWFjdCBEZXZUb29sc10gRXJyb3IgY2FsbGluZyBsaXN0ZW5lcicsIGRhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxufSkoKTtcblxuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbi8qKioqKiovIH0pKClcbjtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFja2VuZC5qcy5tYXAiLAogICAgIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9vcmRlciAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bmFzc2lnbmVkLWltcG9ydFxuaW1wb3J0ICcuL2RldnRvb2xzLXdpbmRvdy1wb2x5ZmlsbC5qcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5pbXBvcnQgZGV2dG9vbHMgZnJvbSAncmVhY3QtZGV2dG9vbHMtY29yZSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG5kZXZ0b29scy5jb25uZWN0VG9EZXZUb29scygpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGV2dG9vbHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5jb25zdCBjbGlCb3hlcyA9IHJlcXVpcmUoJy4vYm94ZXMuanNvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsaUJveGVzO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBjbGlCb3hlcztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBtaW1pY0ZuID0gKHRvLCBmcm9tKSA9PiB7XG5cdGZvciAoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoZnJvbSkpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIHByb3AsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnJvbSwgcHJvcCkpO1xuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtaW1pY0ZuO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBtaW1pY0ZuO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5jb25zdCBtaW1pY0ZuID0gcmVxdWlyZSgnbWltaWMtZm4nKTtcblxuY29uc3QgY2FsbGVkRnVuY3Rpb25zID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3Qgb25ldGltZSA9IChmdW5jdGlvbl8sIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAodHlwZW9mIGZ1bmN0aW9uXyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZTtcblx0bGV0IGNhbGxDb3VudCA9IDA7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uXy5kaXNwbGF5TmFtZSB8fCBmdW5jdGlvbl8ubmFtZSB8fCAnPGFub255bW91cz4nO1xuXG5cdGNvbnN0IG9uZXRpbWUgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgKytjYWxsQ291bnQpO1xuXG5cdFx0aWYgKGNhbGxDb3VudCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuVmFsdWUgPSBmdW5jdGlvbl8uYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdFx0XHRmdW5jdGlvbl8gPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy50aHJvdyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBcXGAke2Z1bmN0aW9uTmFtZX1cXGAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH07XG5cblx0bWltaWNGbihvbmV0aW1lLCBmdW5jdGlvbl8pO1xuXHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsIGNhbGxDb3VudCk7XG5cblx0cmV0dXJuIG9uZXRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uZXRpbWU7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG9uZXRpbWU7XG5cbm1vZHVsZS5leHBvcnRzLmNhbGxDb3VudCA9IGZ1bmN0aW9uXyA9PiB7XG5cdGlmICghY2FsbGVkRnVuY3Rpb25zLmhhcyhmdW5jdGlvbl8pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBUaGUgZ2l2ZW4gZnVuY3Rpb24gXFxgJHtmdW5jdGlvbl8ubmFtZX1cXGAgaXMgbm90IHdyYXBwZWQgYnkgdGhlIFxcYG9uZXRpbWVcXGAgcGFja2FnZWApO1xuXHR9XG5cblx0cmV0dXJuIGNhbGxlZEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25fKTtcbn07XG4iLAogICAgIi8vIFRoaXMgaXMgbm90IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHNpZ25hbHMuXG4vL1xuLy8gSXQgSVMsIGhvd2V2ZXIsIHRoZSBzZXQgb2YgYWxsIHNpZ25hbHMgdGhhdCB0cmlnZ2VyXG4vLyBhbiBleGl0IG9uIGVpdGhlciBMaW51eCBvciBCU0Qgc3lzdGVtcy4gIExpbnV4IGlzIGFcbi8vIHN1cGVyc2V0IG9mIHRoZSBzaWduYWwgbmFtZXMgc3VwcG9ydGVkIG9uIEJTRCwgYW5kXG4vLyB0aGUgdW5rbm93biBzaWduYWxzIGp1c3QgZmFpbCB0byByZWdpc3Rlciwgc28gd2UgY2FuXG4vLyBjYXRjaCB0aGF0IGVhc2lseSBlbm91Z2guXG4vL1xuLy8gRG9uJ3QgYm90aGVyIHdpdGggU0lHS0lMTC4gIEl0J3MgdW5jYXRjaGFibGUsIHdoaWNoXG4vLyBtZWFucyB0aGF0IHdlIGNhbid0IGZpcmUgYW55IGNhbGxiYWNrcyBhbnl3YXkuXG4vL1xuLy8gSWYgYSB1c2VyIGRvZXMgaGFwcGVuIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBvbiBhIG5vbi1cbi8vIGZhdGFsIHNpZ25hbCBsaWtlIFNJR1dJTkNIIG9yIHNvbWV0aGluZywgYW5kIHRoZW5cbi8vIGV4aXQsIGl0J2xsIGVuZCB1cCBmaXJpbmcgYHByb2Nlc3MuZW1pdCgnZXhpdCcpYCwgc29cbi8vIHRoZSBoYW5kbGVyIHdpbGwgYmUgZmlyZWQgYW55d2F5LlxuLy9cbi8vIFNJR0JVUywgU0lHRlBFLCBTSUdTRUdWIGFuZCBTSUdJTEwsIHdoZW4gbm90IHJhaXNlZFxuLy8gYXJ0aWZpY2lhbGx5LCBpbmhlcmVudGx5IGxlYXZlIHRoZSBwcm9jZXNzIGluIGFcbi8vIHN0YXRlIGZyb20gd2hpY2ggaXQgaXMgbm90IHNhZmUgdG8gdHJ5IGFuZCBlbnRlciBKU1xuLy8gbGlzdGVuZXJzLlxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdTSUdBQlJUJyxcbiAgJ1NJR0FMUk0nLFxuICAnU0lHSFVQJyxcbiAgJ1NJR0lOVCcsXG4gICdTSUdURVJNJ1xuXVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdWVEFMUk0nLFxuICAgICdTSUdYQ1BVJyxcbiAgICAnU0lHWEZTWicsXG4gICAgJ1NJR1VTUjInLFxuICAgICdTSUdUUkFQJyxcbiAgICAnU0lHU1lTJyxcbiAgICAnU0lHUVVJVCcsXG4gICAgJ1NJR0lPVCdcbiAgICAvLyBzaG91bGQgZGV0ZWN0IHByb2ZpbGVyIGFuZCBlbmFibGUvZGlzYWJsZSBhY2NvcmRpbmdseS5cbiAgICAvLyBzZWUgIzIxXG4gICAgLy8gJ1NJR1BST0YnXG4gIClcbn1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHSU8nLFxuICAgICdTSUdQT0xMJyxcbiAgICAnU0lHUFdSJyxcbiAgICAnU0lHU1RLRkxUJyxcbiAgICAnU0lHVU5VU0VEJ1xuICApXG59XG4iLAogICAgIi8vIE5vdGU6IHNpbmNlIG55YyB1c2VzIHRoaXMgbW9kdWxlIHRvIG91dHB1dCBjb3ZlcmFnZSwgYW55IGxpbmVzXG4vLyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0IHN5bmMgZmxvdyBvZiBueWMncyBvdXRwdXRDb3ZlcmFnZSBhcmVcbi8vIGlnbm9yZWQsIHNpbmNlIHdlIGNhbiBuZXZlciBnZXQgY292ZXJhZ2UgZm9yIHRoZW0uXG4vLyBncmFiIGEgcmVmZXJlbmNlIHRvIG5vZGUncyByZWFsIHByb2Nlc3Mgb2JqZWN0IHJpZ2h0IGF3YXlcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3NcblxuY29uc3QgcHJvY2Vzc09rID0gZnVuY3Rpb24gKHByb2Nlc3MpIHtcbiAgcmV0dXJuIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVtaXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZWFsbHlFeGl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MubGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mua2lsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBpZCA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBzb21lIGtpbmQgb2Ygbm9uLW5vZGUgZW52aXJvbm1lbnQsIGp1c3Qgbm8tb3Bcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFwcm9jZXNzT2socHJvY2VzcykpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gIH1cbn0gZWxzZSB7XG4gIHZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuICB2YXIgc2lnbmFscyA9IHJlcXVpcmUoJy4vc2lnbmFscy5qcycpXG4gIHZhciBpc1dpbiA9IC9ed2luL2kudGVzdChwcm9jZXNzLnBsYXRmb3JtKVxuXG4gIHZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIEVFICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgRUUgPSBFRS5FdmVudEVtaXR0ZXJcbiAgfVxuXG4gIHZhciBlbWl0dGVyXG4gIGlmIChwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fKSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX19cbiAgfSBlbHNlIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXyA9IG5ldyBFRSgpXG4gICAgZW1pdHRlci5jb3VudCA9IDBcbiAgICBlbWl0dGVyLmVtaXR0ZWQgPSB7fVxuICB9XG5cbiAgLy8gQmVjYXVzZSB0aGlzIGVtaXR0ZXIgaXMgYSBnbG9iYWwsIHdlIGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIGFcbiAgLy8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgZmFpbGVkIHRvIGVuYWJsZSBpbmZpbml0ZSBsaXN0ZW5lcnMuXG4gIC8vIEkga25vdyB3aGF0IHlvdSdyZSBhYm91dCB0byBzYXkuICBCdXQgbGl0ZXJhbGx5IGV2ZXJ5dGhpbmcgYWJvdXRcbiAgLy8gc2lnbmFsLWV4aXQgaXMgYSBjb21wcm9taXNlIHdpdGggZXZpbC4gIEdldCB1c2VkIHRvIGl0LlxuICBpZiAoIWVtaXR0ZXIuaW5maW5pdGUpIHtcbiAgICBlbWl0dGVyLnNldE1heExpc3RlbmVycyhJbmZpbml0eSlcbiAgICBlbWl0dGVyLmluZmluaXRlID0gdHJ1ZVxuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2IsIG9wdHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnYSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIGZvciBleGl0IGhhbmRsZXInKVxuXG4gICAgaWYgKGxvYWRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGxvYWQoKVxuICAgIH1cblxuICAgIHZhciBldiA9ICdleGl0J1xuICAgIGlmIChvcHRzICYmIG9wdHMuYWx3YXlzTGFzdCkge1xuICAgICAgZXYgPSAnYWZ0ZXJleGl0J1xuICAgIH1cblxuICAgIHZhciByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKGV2LCBjYilcbiAgICAgIGlmIChlbWl0dGVyLmxpc3RlbmVycygnZXhpdCcpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIGVtaXR0ZXIubGlzdGVuZXJzKCdhZnRlcmV4aXQnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgIH1cbiAgICB9XG4gICAgZW1pdHRlci5vbihldiwgY2IpXG5cbiAgICByZXR1cm4gcmVtb3ZlXG4gIH1cblxuICB2YXIgdW5sb2FkID0gZnVuY3Rpb24gdW5sb2FkICgpIHtcbiAgICBpZiAoIWxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IGZhbHNlXG5cbiAgICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgfSlcbiAgICBwcm9jZXNzLmVtaXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdFxuICAgIGVtaXR0ZXIuY291bnQgLT0gMVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLnVubG9hZCA9IHVubG9hZFxuXG4gIHZhciBlbWl0ID0gZnVuY3Rpb24gZW1pdCAoZXZlbnQsIGNvZGUsIHNpZ25hbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdHRlci5lbWl0dGVkW2V2ZW50XSA9IHRydWVcbiAgICBlbWl0dGVyLmVtaXQoZXZlbnQsIGNvZGUsIHNpZ25hbClcbiAgfVxuXG4gIC8vIHsgPHNpZ25hbD46IDxsaXN0ZW5lciBmbj4sIC4uLiB9XG4gIHZhciBzaWdMaXN0ZW5lcnMgPSB7fVxuICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgIHNpZ0xpc3RlbmVyc1tzaWddID0gZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgbGlzdGVuZXJzLCBhbiBleGl0IGlzIGNvbWluZyFcbiAgICAgIC8vIFNpbXBsZXN0IHdheTogcmVtb3ZlIHVzIGFuZCB0aGVuIHJlLXNlbmQgdGhlIHNpZ25hbC5cbiAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHdpbGwga2lsbCB0aGUgcHJvY2Vzcywgc28gd2UgY2FuXG4gICAgICAvLyBzYWZlbHkgZW1pdCBub3cuXG4gICAgICB2YXIgbGlzdGVuZXJzID0gcHJvY2Vzcy5saXN0ZW5lcnMoc2lnKVxuICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IGVtaXR0ZXIuY291bnQpIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgICAgZW1pdCgnZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoaXNXaW4gJiYgc2lnID09PSAnU0lHSFVQJykge1xuICAgICAgICAgIC8vIFwiU0lHSFVQXCIgdGhyb3dzIGFuIGBFTk9TWVNgIGVycm9yIG9uIFdpbmRvd3MsXG4gICAgICAgICAgLy8gc28gdXNlIGEgc3VwcG9ydGVkIHNpZ25hbCBpbnN0ZWFkXG4gICAgICAgICAgc2lnID0gJ1NJR0lOVCdcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIHNpZylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2lnbmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2lnbmFsc1xuICB9XG5cbiAgdmFyIGxvYWRlZCA9IGZhbHNlXG5cbiAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkICgpIHtcbiAgICBpZiAobG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gdHJ1ZVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9uU2lnbmFsRXhpdCdzIHRoYXQgYXJlIGluIHBsYXkuXG4gICAgLy8gSXQncyBpbXBvcnRhbnQgc28gdGhhdCB3ZSBjYW4gY291bnQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mXG4gICAgLy8gbGlzdGVuZXJzIG9uIHNpZ25hbHMsIGFuZCBkb24ndCB3YWl0IGZvciB0aGUgb3RoZXIgb25lIHRvXG4gICAgLy8gaGFuZGxlIGl0IGluc3RlYWQgb2YgdXMuXG4gICAgZW1pdHRlci5jb3VudCArPSAxXG5cbiAgICBzaWduYWxzID0gc2lnbmFscy5maWx0ZXIoZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHByb2Nlc3MuZW1pdCA9IHByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gcHJvY2Vzc1JlYWxseUV4aXRcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZFxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0ID0gcHJvY2Vzcy5yZWFsbHlFeGl0XG4gIHZhciBwcm9jZXNzUmVhbGx5RXhpdCA9IGZ1bmN0aW9uIHByb2Nlc3NSZWFsbHlFeGl0IChjb2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gMFxuICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQuY2FsbChwcm9jZXNzLCBwcm9jZXNzLmV4aXRDb2RlKVxuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc0VtaXQgPSBwcm9jZXNzLmVtaXRcbiAgdmFyIHByb2Nlc3NFbWl0ID0gZnVuY3Rpb24gcHJvY2Vzc0VtaXQgKGV2LCBhcmcpIHtcbiAgICBpZiAoZXYgPT09ICdleGl0JyAmJiBwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhcmdcbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiByZXRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1hdGNoT3BlcmF0b3JzUmVnZXggPSAvW3xcXFxce30oKVtcXF1eJCsqPy4tXS9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG5cdH1cblxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UobWF0Y2hPcGVyYXRvcnNSZWdleCwgJ1xcXFwkJicpO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBlc2NhcGVTdHJpbmdSZWdleHAgPSByZXF1aXJlKCdlc2NhcGUtc3RyaW5nLXJlZ2V4cCcpO1xuXG5jb25zdCBjd2QgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2VzcyAmJiB0eXBlb2YgcHJvY2Vzcy5jd2QgPT09ICdmdW5jdGlvbidcbiAgPyBwcm9jZXNzLmN3ZCgpXG4gIDogJy4nXG5cbmNvbnN0IG5hdGl2ZXMgPSBbXS5jb25jYXQoXG4gIHJlcXVpcmUoJ21vZHVsZScpLmJ1aWx0aW5Nb2R1bGVzLFxuICAnYm9vdHN0cmFwX25vZGUnLFxuICAnbm9kZScsXG4pLm1hcChuID0+IG5ldyBSZWdFeHAoYCg/OlxcXFwoKD86bm9kZTopPyR7bn0oPzpcXFxcLmpzKT86XFxcXGQrOlxcXFxkK1xcXFwpJHxeXFxcXHMqYXQgKD86bm9kZTopPyR7bn0oPzpcXFxcLmpzKT86XFxcXGQrOlxcXFxkKyQpYCkpO1xuXG5uYXRpdmVzLnB1c2goXG4gIC9cXCgoPzpub2RlOik/aW50ZXJuYWxcXC9bXjpdKzpcXGQrOlxcZCtcXCkkLyxcbiAgL1xccyphdCAoPzpub2RlOik/aW50ZXJuYWxcXC9bXjpdKzpcXGQrOlxcZCskLyxcbiAgL1xcL1xcLm5vZGUtc3Bhd24td3JhcC1cXHcrLVxcdytcXC9ub2RlOlxcZCs6XFxkK1xcKT8kL1xuKTtcblxuY2xhc3MgU3RhY2tVdGlscyB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGlnbm9yZWRQYWNrYWdlczogW10sXG4gICAgICAuLi5vcHRzXG4gICAgfTtcblxuICAgIGlmICgnaW50ZXJuYWxzJyBpbiBvcHRzID09PSBmYWxzZSkge1xuICAgICAgb3B0cy5pbnRlcm5hbHMgPSBTdGFja1V0aWxzLm5vZGVJbnRlcm5hbHMoKTtcbiAgICB9XG5cbiAgICBpZiAoJ2N3ZCcgaW4gb3B0cyA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdHMuY3dkID0gY3dkXG4gICAgfVxuXG4gICAgdGhpcy5fY3dkID0gb3B0cy5jd2QucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgIHRoaXMuX2ludGVybmFscyA9IFtdLmNvbmNhdChcbiAgICAgIG9wdHMuaW50ZXJuYWxzLFxuICAgICAgaWdub3JlZFBhY2thZ2VzUmVnRXhwKG9wdHMuaWdub3JlZFBhY2thZ2VzKVxuICAgICk7XG5cbiAgICB0aGlzLl93cmFwQ2FsbFNpdGUgPSBvcHRzLndyYXBDYWxsU2l0ZSB8fCBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBub2RlSW50ZXJuYWxzICgpIHtcbiAgICByZXR1cm4gWy4uLm5hdGl2ZXNdO1xuICB9XG5cbiAgY2xlYW4gKHN0YWNrLCBpbmRlbnQgPSAwKSB7XG4gICAgaW5kZW50ID0gJyAnLnJlcGVhdChpbmRlbnQpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHN0YWNrKSkge1xuICAgICAgc3RhY2sgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgfVxuXG4gICAgaWYgKCEoL15cXHMqYXQgLy50ZXN0KHN0YWNrWzBdKSkgJiYgKC9eXFxzKmF0IC8udGVzdChzdGFja1sxXSkpKSB7XG4gICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGxldCBvdXRkZW50ID0gZmFsc2U7XG4gICAgbGV0IGxhc3ROb25BdExpbmUgPSBudWxsO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgc3RhY2suZm9yRWFjaChzdCA9PiB7XG4gICAgICBzdCA9IHN0LnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgaWYgKHRoaXMuX2ludGVybmFscy5zb21lKGludGVybmFsID0+IGludGVybmFsLnRlc3Qoc3QpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQXRMaW5lID0gL15cXHMqYXQgLy50ZXN0KHN0KTtcblxuICAgICAgaWYgKG91dGRlbnQpIHtcbiAgICAgICAgc3QgPSBzdC50cmltRW5kKCkucmVwbGFjZSgvXihcXHMrKWF0IC8sICckMScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3QgPSBzdC50cmltKCk7XG4gICAgICAgIGlmIChpc0F0TGluZSkge1xuICAgICAgICAgIHN0ID0gc3Quc2xpY2UoMyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3QgPSBzdC5yZXBsYWNlKGAke3RoaXMuX2N3ZH0vYCwgJycpO1xuXG4gICAgICBpZiAoc3QpIHtcbiAgICAgICAgaWYgKGlzQXRMaW5lKSB7XG4gICAgICAgICAgaWYgKGxhc3ROb25BdExpbmUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxhc3ROb25BdExpbmUpO1xuICAgICAgICAgICAgbGFzdE5vbkF0TGluZSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0LnB1c2goc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGRlbnQgPSB0cnVlO1xuICAgICAgICAgIGxhc3ROb25BdExpbmUgPSBzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5tYXAobGluZSA9PiBgJHtpbmRlbnR9JHtsaW5lfVxcbmApLmpvaW4oJycpO1xuICB9XG5cbiAgY2FwdHVyZVN0cmluZyAobGltaXQsIGZuID0gdGhpcy5jYXB0dXJlU3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm4gPSBsaW1pdDtcbiAgICAgIGxpbWl0ID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgY29uc3Qge3N0YWNrVHJhY2VMaW1pdH0gPSBFcnJvcjtcbiAgICBpZiAobGltaXQpIHtcbiAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IGxpbWl0O1xuICAgIH1cblxuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uob2JqLCBmbik7XG4gICAgY29uc3Qge3N0YWNrfSA9IG9iajtcbiAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBzdGFja1RyYWNlTGltaXQ7XG5cbiAgICByZXR1cm4gdGhpcy5jbGVhbihzdGFjayk7XG4gIH1cblxuICBjYXB0dXJlIChsaW1pdCwgZm4gPSB0aGlzLmNhcHR1cmUpIHtcbiAgICBpZiAodHlwZW9mIGxpbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbiA9IGxpbWl0O1xuICAgICAgbGltaXQgPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICBjb25zdCB7cHJlcGFyZVN0YWNrVHJhY2UsIHN0YWNrVHJhY2VMaW1pdH0gPSBFcnJvcjtcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IChvYmosIHNpdGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl93cmFwQ2FsbFNpdGUpIHtcbiAgICAgICAgcmV0dXJuIHNpdGUubWFwKHRoaXMuX3dyYXBDYWxsU2l0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaXRlO1xuICAgIH07XG5cbiAgICBpZiAobGltaXQpIHtcbiAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IGxpbWl0O1xuICAgIH1cblxuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iaiwgZm4pO1xuICAgIGNvbnN0IHsgc3RhY2sgfSA9IG9iajtcbiAgICBPYmplY3QuYXNzaWduKEVycm9yLCB7cHJlcGFyZVN0YWNrVHJhY2UsIHN0YWNrVHJhY2VMaW1pdH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgYXQgKGZuID0gdGhpcy5hdCkge1xuICAgIGNvbnN0IFtzaXRlXSA9IHRoaXMuY2FwdHVyZSgxLCBmbik7XG5cbiAgICBpZiAoIXNpdGUpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBsaW5lOiBzaXRlLmdldExpbmVOdW1iZXIoKSxcbiAgICAgIGNvbHVtbjogc2l0ZS5nZXRDb2x1bW5OdW1iZXIoKVxuICAgIH07XG5cbiAgICBzZXRGaWxlKHJlcywgc2l0ZS5nZXRGaWxlTmFtZSgpLCB0aGlzLl9jd2QpO1xuXG4gICAgaWYgKHNpdGUuaXNDb25zdHJ1Y3RvcigpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzLCAnY29uc3RydWN0b3InLCB7XG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2l0ZS5pc0V2YWwoKSkge1xuICAgICAgcmVzLmV2YWxPcmlnaW4gPSBzaXRlLmdldEV2YWxPcmlnaW4oKTtcbiAgICB9XG5cbiAgICAvLyBOb2RlIHYxMCBzdG9wcGVkIHdpdGggdGhlIGlzTmF0aXZlKCkgb24gY2FsbHNpdGVzLCBhcHBhcmVudGx5XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc2l0ZS5pc05hdGl2ZSgpKSB7XG4gICAgICByZXMubmF0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgdHlwZW5hbWU7XG4gICAgdHJ5IHtcbiAgICAgIHR5cGVuYW1lID0gc2l0ZS5nZXRUeXBlTmFtZSgpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICB9XG5cbiAgICBpZiAodHlwZW5hbWUgJiYgdHlwZW5hbWUgIT09ICdPYmplY3QnICYmIHR5cGVuYW1lICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgcmVzLnR5cGUgPSB0eXBlbmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBmbmFtZSA9IHNpdGUuZ2V0RnVuY3Rpb25OYW1lKCk7XG4gICAgaWYgKGZuYW1lKSB7XG4gICAgICByZXMuZnVuY3Rpb24gPSBmbmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRoID0gc2l0ZS5nZXRNZXRob2ROYW1lKCk7XG4gICAgaWYgKG1ldGggJiYgZm5hbWUgIT09IG1ldGgpIHtcbiAgICAgIHJlcy5tZXRob2QgPSBtZXRoO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwYXJzZUxpbmUgKGxpbmUpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmUgJiYgbGluZS5tYXRjaChyZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY3RvciA9IG1hdGNoWzFdID09PSAnbmV3JztcbiAgICBsZXQgZm5hbWUgPSBtYXRjaFsyXTtcbiAgICBjb25zdCBldmFsT3JpZ2luID0gbWF0Y2hbM107XG4gICAgY29uc3QgZXZhbEZpbGUgPSBtYXRjaFs0XTtcbiAgICBjb25zdCBldmFsTGluZSA9IE51bWJlcihtYXRjaFs1XSk7XG4gICAgY29uc3QgZXZhbENvbCA9IE51bWJlcihtYXRjaFs2XSk7XG4gICAgbGV0IGZpbGUgPSBtYXRjaFs3XTtcbiAgICBjb25zdCBsbnVtID0gbWF0Y2hbOF07XG4gICAgY29uc3QgY29sID0gbWF0Y2hbOV07XG4gICAgY29uc3QgbmF0aXZlID0gbWF0Y2hbMTBdID09PSAnbmF0aXZlJztcbiAgICBjb25zdCBjbG9zZVBhcmVuID0gbWF0Y2hbMTFdID09PSAnKSc7XG4gICAgbGV0IG1ldGhvZDtcblxuICAgIGNvbnN0IHJlcyA9IHt9O1xuXG4gICAgaWYgKGxudW0pIHtcbiAgICAgIHJlcy5saW5lID0gTnVtYmVyKGxudW0pO1xuICAgIH1cblxuICAgIGlmIChjb2wpIHtcbiAgICAgIHJlcy5jb2x1bW4gPSBOdW1iZXIoY29sKTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2VQYXJlbiAmJiBmaWxlKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgcGFyZW5zIGFyZSBiYWxhbmNlZFxuICAgICAgLy8gaWYgd2UgaGF2ZSBhIGZpbGUgbGlrZSBcImFzZGYpIFthcyBmb29dICh4eXouanNcIiwgdGhlbiBvZGRzIGFyZVxuICAgICAgLy8gdGhhdCB0aGUgZm5hbWUgc2hvdWxkIGJlICs9IFwiIChhc2RmKSBbYXMgZm9vXVwiIGFuZCB0aGUgZmlsZVxuICAgICAgLy8gc2hvdWxkIGJlIGp1c3QgXCJ4eXouanNcIlxuICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgZW5kIHRvIGZpbmQgdGhlIGxhc3QgdW5iYWxhbmNlZCAoXG4gICAgICBsZXQgY2xvc2VzID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSBmaWxlLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGZpbGUuY2hhckF0KGkpID09PSAnKScpIHtcbiAgICAgICAgICBjbG9zZXMrKztcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLmNoYXJBdChpKSA9PT0gJygnICYmIGZpbGUuY2hhckF0KGkgLSAxKSA9PT0gJyAnKSB7XG4gICAgICAgICAgY2xvc2VzLS07XG4gICAgICAgICAgaWYgKGNsb3NlcyA9PT0gLTEgJiYgZmlsZS5jaGFyQXQoaSAtIDEpID09PSAnICcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGZpbGUuc2xpY2UoMCwgaSAtIDEpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBmaWxlLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIGZpbGUgPSBhZnRlcjtcbiAgICAgICAgICAgIGZuYW1lICs9IGAgKCR7YmVmb3JlfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZm5hbWUpIHtcbiAgICAgIGNvbnN0IG1ldGhvZE1hdGNoID0gZm5hbWUubWF0Y2gobWV0aG9kUmUpO1xuICAgICAgaWYgKG1ldGhvZE1hdGNoKSB7XG4gICAgICAgIGZuYW1lID0gbWV0aG9kTWF0Y2hbMV07XG4gICAgICAgIG1ldGhvZCA9IG1ldGhvZE1hdGNoWzJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldEZpbGUocmVzLCBmaWxlLCB0aGlzLl9jd2QpO1xuXG4gICAgaWYgKGN0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXMsICdjb25zdHJ1Y3RvcicsIHtcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChldmFsT3JpZ2luKSB7XG4gICAgICByZXMuZXZhbE9yaWdpbiA9IGV2YWxPcmlnaW47XG4gICAgICByZXMuZXZhbExpbmUgPSBldmFsTGluZTtcbiAgICAgIHJlcy5ldmFsQ29sdW1uID0gZXZhbENvbDtcbiAgICAgIHJlcy5ldmFsRmlsZSA9IGV2YWxGaWxlICYmIGV2YWxGaWxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlKSB7XG4gICAgICByZXMubmF0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZm5hbWUpIHtcbiAgICAgIHJlcy5mdW5jdGlvbiA9IGZuYW1lO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgJiYgZm5hbWUgIT09IG1ldGhvZCkge1xuICAgICAgcmVzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEZpbGUgKHJlc3VsdCwgZmlsZW5hbWUsIGN3ZCkge1xuICBpZiAoZmlsZW5hbWUpIHtcbiAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aChgJHtjd2R9L2ApKSB7XG4gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnNsaWNlKGN3ZC5sZW5ndGggKyAxKTtcbiAgICB9XG5cbiAgICByZXN1bHQuZmlsZSA9IGZpbGVuYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQYWNrYWdlc1JlZ0V4cChpZ25vcmVkUGFja2FnZXMpIHtcbiAgaWYgKGlnbm9yZWRQYWNrYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwYWNrYWdlcyA9IGlnbm9yZWRQYWNrYWdlcy5tYXAobW9kID0+IGVzY2FwZVN0cmluZ1JlZ2V4cChtb2QpKTtcblxuICByZXR1cm4gbmV3IFJlZ0V4cChgW1xcL1xcXFxcXFxcXW5vZGVfbW9kdWxlc1tcXC9cXFxcXFxcXF0oPzoke3BhY2thZ2VzLmpvaW4oJ3wnKX0pW1xcL1xcXFxcXFxcXVteOl0rOlxcXFxkKzpcXFxcZCtgKVxufVxuXG5jb25zdCByZSA9IG5ldyBSZWdFeHAoXG4gICdeJyArXG4gICAgLy8gU29tZXRpbWVzIHdlIHN0cmlwIG91dCB0aGUgJyAgICBhdCcgYmVjYXVzZSBpdCdzIG5vaXN5XG4gICcoPzpcXFxccyphdCApPycgK1xuICAgIC8vICQxID0gY3RvciBpZiAnbmV3J1xuICAnKD86KG5ldykgKT8nICtcbiAgICAvLyAkMiA9IGZ1bmN0aW9uIG5hbWUgKGNhbiBiZSBsaXRlcmFsbHkgYW55dGhpbmcpXG4gICAgLy8gTWF5IGNvbnRhaW4gbWV0aG9kIGF0IHRoZSBlbmQgYXMgW2FzIHh5el1cbiAgJyg/OiguKj8pIFxcXFwoKT8nICtcbiAgICAvLyAoZXZhbCBhdCA8YW5vbnltb3VzPiAoZmlsZS5qczoxOjEpLFxuICAgIC8vICQzID0gZXZhbCBvcmlnaW5cbiAgICAvLyAkNDokNTokNiBhcmUgZXZhbCBmaWxlL2xpbmUvY29sLCBidXQgbm90IG5vcm1hbGx5IHJlcG9ydGVkXG4gICcoPzpldmFsIGF0IChbXiBdKykgXFxcXCgoLis/KTooXFxcXGQrKTooXFxcXGQrKVxcXFwpLCApPycgK1xuICAgIC8vIGZpbGU6bGluZTpjb2xcbiAgICAvLyAkNzokODokOVxuICAgIC8vICQxMCA9ICduYXRpdmUnIGlmIG5hdGl2ZVxuICAnKD86KC4rPyk6KFxcXFxkKyk6KFxcXFxkKyl8KG5hdGl2ZSkpJyArXG4gICAgLy8gbWF5YmUgY2xvc2UgdGhlIHBhcmVuLCB0aGVuIGVuZFxuICAgIC8vIGlmICQxMSBpcyApLCB0aGVuIHdlIG9ubHkgYWxsb3cgYmFsYW5jZWQgcGFyZW5zIGluIHRoZSBmaWxlbmFtZVxuICAgIC8vIGFueSBpbWJhbGFuY2UgaXMgcGxhY2VkIG9uIHRoZSBmbmFtZS4gIFRoaXMgaXMgYSBoZXVyaXN0aWMsIGFuZFxuICAgIC8vIGJvdW5kIHRvIGJlIGluY29ycmVjdCBpbiBzb21lIGVkZ2UgY2FzZXMuICBUaGUgYmV0IGlzIHRoYXRcbiAgICAvLyBoYXZpbmcgd2VpcmQgY2hhcmFjdGVycyBpbiBtZXRob2QgbmFtZXMgaXMgbW9yZSBjb21tb24gdGhhblxuICAgIC8vIGhhdmluZyB3ZWlyZCBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcywgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS5cbiAgJyhcXFxcKT8pJCdcbik7XG5cbmNvbnN0IG1ldGhvZFJlID0gL14oLio/KSBcXFthcyAoLio/KVxcXSQvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrVXRpbHM7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGlzTWVyZ2VhYmxlT2JqZWN0ID0gZnVuY3Rpb24gaXNNZXJnZWFibGVPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuIGlzTm9uTnVsbE9iamVjdCh2YWx1ZSlcblx0XHQmJiAhaXNTcGVjaWFsKHZhbHVlKVxufTtcblxuZnVuY3Rpb24gaXNOb25OdWxsT2JqZWN0KHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNTcGVjaWFsKHZhbHVlKSB7XG5cdHZhciBzdHJpbmdWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG5cblx0cmV0dXJuIHN0cmluZ1ZhbHVlID09PSAnW29iamVjdCBSZWdFeHBdJ1xuXHRcdHx8IHN0cmluZ1ZhbHVlID09PSAnW29iamVjdCBEYXRlXSdcblx0XHR8fCBpc1JlYWN0RWxlbWVudCh2YWx1ZSlcbn1cblxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I1YWM5NjNmYjc5MWQxMjk4ZTdmMzk2MjM2MzgzYmM5NTVmOTE2YzEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy9lbGVtZW50L1JlYWN0RWxlbWVudC5qcyNMMjEtTDI1XG52YXIgY2FuVXNlU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGNhblVzZVN5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcblxuZnVuY3Rpb24gaXNSZWFjdEVsZW1lbnQodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbn1cblxuZnVuY3Rpb24gZW1wdHlUYXJnZXQodmFsKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbCkgPyBbXSA6IHt9XG59XG5cbmZ1bmN0aW9uIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHZhbHVlLCBvcHRpb25zKSB7XG5cdHJldHVybiAob3B0aW9ucy5jbG9uZSAhPT0gZmFsc2UgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkpXG5cdFx0PyBkZWVwbWVyZ2UoZW1wdHlUYXJnZXQodmFsdWUpLCB2YWx1ZSwgb3B0aW9ucylcblx0XHQ6IHZhbHVlXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRBcnJheU1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHJldHVybiB0YXJnZXQuY29uY2F0KHNvdXJjZSkubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoZWxlbWVudCwgb3B0aW9ucylcblx0fSlcbn1cblxuZnVuY3Rpb24gZ2V0TWVyZ2VGdW5jdGlvbihrZXksIG9wdGlvbnMpIHtcblx0aWYgKCFvcHRpb25zLmN1c3RvbU1lcmdlKSB7XG5cdFx0cmV0dXJuIGRlZXBtZXJnZVxuXHR9XG5cdHZhciBjdXN0b21NZXJnZSA9IG9wdGlvbnMuY3VzdG9tTWVyZ2Uoa2V5KTtcblx0cmV0dXJuIHR5cGVvZiBjdXN0b21NZXJnZSA9PT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbU1lcmdlIDogZGVlcG1lcmdlXG59XG5cbmZ1bmN0aW9uIGdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSB7XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzXG5cdFx0PyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldCwgc3ltYm9sKVxuXHRcdH0pXG5cdFx0OiBbXVxufVxuXG5mdW5jdGlvbiBnZXRLZXlzKHRhcmdldCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFyZ2V0KS5jb25jYXQoZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKVxufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUlzT25PYmplY3Qob2JqZWN0LCBwcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdHJldHVybiBwcm9wZXJ0eSBpbiBvYmplY3Rcblx0fSBjYXRjaChfKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cbn1cblxuLy8gUHJvdGVjdHMgZnJvbSBwcm90b3R5cGUgcG9pc29uaW5nIGFuZCB1bmV4cGVjdGVkIG1lcmdpbmcgdXAgdGhlIHByb3RvdHlwZSBjaGFpbi5cbmZ1bmN0aW9uIHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpIHtcblx0cmV0dXJuIHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgLy8gUHJvcGVydGllcyBhcmUgc2FmZSB0byBtZXJnZSBpZiB0aGV5IGRvbid0IGV4aXN0IGluIHRoZSB0YXJnZXQgeWV0LFxuXHRcdCYmICEoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpIC8vIHVuc2FmZSBpZiB0aGV5IGV4aXN0IHVwIHRoZSBwcm90b3R5cGUgY2hhaW4sXG5cdFx0XHQmJiBPYmplY3QucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0YXJnZXQsIGtleSkpIC8vIGFuZCBhbHNvIHVuc2FmZSBpZiB0aGV5J3JlIG5vbmVudW1lcmFibGUuXG59XG5cbmZ1bmN0aW9uIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRpZiAob3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh0YXJnZXQpKSB7XG5cdFx0Z2V0S2V5cyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodGFyZ2V0W2tleV0sIG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGlmIChwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdChzb3VyY2Vba2V5XSkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZGVzdGluYXRpb25cbn1cblxuZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRvcHRpb25zLmFycmF5TWVyZ2UgPSBvcHRpb25zLmFycmF5TWVyZ2UgfHwgZGVmYXVsdEFycmF5TWVyZ2U7XG5cdG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgPSBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0IHx8IGlzTWVyZ2VhYmxlT2JqZWN0O1xuXHQvLyBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCBpcyBhZGRlZCB0byBgb3B0aW9uc2Agc28gdGhhdCBjdXN0b20gYXJyYXlNZXJnZSgpXG5cdC8vIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIGl0LiBUaGUgY2FsbGVyIG1heSBub3QgcmVwbGFjZSBpdC5cblx0b3B0aW9ucy5jbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkO1xuXG5cdHZhciBzb3VyY2VJc0FycmF5ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuXHR2YXIgdGFyZ2V0SXNBcnJheSA9IEFycmF5LmlzQXJyYXkodGFyZ2V0KTtcblx0dmFyIHNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2ggPSBzb3VyY2VJc0FycmF5ID09PSB0YXJnZXRJc0FycmF5O1xuXG5cdGlmICghc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSBpZiAoc291cmNlSXNBcnJheSkge1xuXHRcdHJldHVybiBvcHRpb25zLmFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9XG59XG5cbmRlZXBtZXJnZS5hbGwgPSBmdW5jdGlvbiBkZWVwbWVyZ2VBbGwoYXJyYXksIG9wdGlvbnMpIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Jylcblx0fVxuXG5cdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbmV4dCkge1xuXHRcdHJldHVybiBkZWVwbWVyZ2UocHJldiwgbmV4dCwgb3B0aW9ucylcblx0fSwge30pXG59O1xuXG52YXIgZGVlcG1lcmdlXzEgPSBkZWVwbWVyZ2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcG1lcmdlXzE7XG4iLAogICAgImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IFNlbVZlclxuXG52YXIgZGVidWdcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2Vzcy5lbnYgJiZcbiAgICBwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmXG4gICAgL1xcYnNlbXZlclxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRykpIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApXG4gICAgYXJncy51bnNoaWZ0KCdTRU1WRVInKVxuICAgIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpXG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge31cbn1cblxuLy8gTm90ZTogdGhpcyBpcyB0aGUgc2VtdmVyLm9yZyB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoYXQgaXQgaW1wbGVtZW50c1xuLy8gTm90IG5lY2Vzc2FyaWx5IHRoZSBwYWNrYWdlIHZlcnNpb24gb2YgdGhpcyBjb2RlLlxuZXhwb3J0cy5TRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG52YXIgTUFYX0xFTkdUSCA9IDI1NlxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA5MDA3MTk5MjU0NzQwOTkxXG5cbi8vIE1heCBzYWZlIHNlZ21lbnQgbGVuZ3RoIGZvciBjb2VyY2lvbi5cbnZhciBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIID0gMTZcblxudmFyIE1BWF9TQUZFX0JVSUxEX0xFTkdUSCA9IE1BWF9MRU5HVEggLSA2XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG52YXIgcmUgPSBleHBvcnRzLnJlID0gW11cbnZhciBzYWZlUmUgPSBleHBvcnRzLnNhZmVSZSA9IFtdXG52YXIgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxudmFyIHQgPSBleHBvcnRzLnRva2VucyA9IHt9XG52YXIgUiA9IDBcblxuZnVuY3Rpb24gdG9rIChuKSB7XG4gIHRbbl0gPSBSKytcbn1cblxudmFyIExFVFRFUkRBU0hOVU1CRVIgPSAnW2EtekEtWjAtOS1dJ1xuXG4vLyBSZXBsYWNlIHNvbWUgZ3JlZWR5IHJlZ2V4IHRva2VucyB0byBwcmV2ZW50IHJlZ2V4IGRvcyBpc3N1ZXMuIFRoZXNlIHJlZ2V4IGFyZVxuLy8gdXNlZCBpbnRlcm5hbGx5IHZpYSB0aGUgc2FmZVJlIG9iamVjdCBzaW5jZSBhbGwgaW5wdXRzIGluIHRoaXMgbGlicmFyeSBnZXRcbi8vIG5vcm1hbGl6ZWQgZmlyc3QgdG8gdHJpbSBhbmQgY29sbGFwc2UgYWxsIGV4dHJhIHdoaXRlc3BhY2UuIFRoZSBvcmlnaW5hbFxuLy8gcmVnZXhlcyBhcmUgZXhwb3J0ZWQgZm9yIHVzZXJsYW5kIGNvbnN1bXB0aW9uIGFuZCBsb3dlciBsZXZlbCB1c2FnZS4gQVxuLy8gZnV0dXJlIGJyZWFraW5nIGNoYW5nZSBjb3VsZCBleHBvcnQgdGhlIHNhZmVyIHJlZ2V4IG9ubHkgd2l0aCBhIG5vdGUgdGhhdFxuLy8gYWxsIGlucHV0IHNob3VsZCBoYXZlIGV4dHJhIHdoaXRlc3BhY2UgcmVtb3ZlZC5cbnZhciBzYWZlUmVnZXhSZXBsYWNlbWVudHMgPSBbXG4gIFsnXFxcXHMnLCAxXSxcbiAgWydcXFxcZCcsIE1BWF9MRU5HVEhdLFxuICBbTEVUVEVSREFTSE5VTUJFUiwgTUFYX1NBRkVfQlVJTERfTEVOR1RIXSxcbl1cblxuZnVuY3Rpb24gbWFrZVNhZmVSZSAodmFsdWUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYWZlUmVnZXhSZXBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSBzYWZlUmVnZXhSZXBsYWNlbWVudHNbaV1bMF1cbiAgICB2YXIgbWF4ID0gc2FmZVJlZ2V4UmVwbGFjZW1lbnRzW2ldWzFdXG4gICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgLnNwbGl0KHRva2VuICsgJyonKS5qb2luKHRva2VuICsgJ3swLCcgKyBtYXggKyAnfScpXG4gICAgICAuc3BsaXQodG9rZW4gKyAnKycpLmpvaW4odG9rZW4gKyAnezEsJyArIG1heCArICd9JylcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gVGhlIGZvbGxvd2luZyBSZWd1bGFyIEV4cHJlc3Npb25zIGNhbiBiZSB1c2VkIGZvciB0b2tlbml6aW5nLFxuLy8gdmFsaWRhdGluZywgYW5kIHBhcnNpbmcgU2VtVmVyIHZlcnNpb24gc3RyaW5ncy5cblxuLy8gIyMgTnVtZXJpYyBJZGVudGlmaWVyXG4vLyBBIHNpbmdsZSBgMGAsIG9yIGEgbm9uLXplcm8gZGlnaXQgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGRpZ2l0cy5cblxudG9rKCdOVU1FUklDSURFTlRJRklFUicpXG5zcmNbdC5OVU1FUklDSURFTlRJRklFUl0gPSAnMHxbMS05XVxcXFxkKidcbnRvaygnTlVNRVJJQ0lERU5USUZJRVJMT09TRScpXG5zcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXSA9ICdcXFxcZCsnXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbnRvaygnTk9OTlVNRVJJQ0lERU5USUZJRVInKVxuc3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdID0gJ1xcXFxkKlthLXpBLVotXScgKyBMRVRURVJEQVNITlVNQkVSICsgJyonXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG50b2soJ01BSU5WRVJTSU9OJylcbnNyY1t0Lk1BSU5WRVJTSU9OXSA9ICcoJyArIHNyY1t0Lk5VTUVSSUNJREVOVElGSUVSXSArICcpXFxcXC4nICtcbiAgICAgICAgICAgICAgICAgICAnKCcgKyBzcmNbdC5OVU1FUklDSURFTlRJRklFUl0gKyAnKVxcXFwuJyArXG4gICAgICAgICAgICAgICAgICAgJygnICsgc3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdICsgJyknXG5cbnRvaygnTUFJTlZFUlNJT05MT09TRScpXG5zcmNbdC5NQUlOVkVSU0lPTkxPT1NFXSA9ICcoJyArIHNyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdICsgJylcXFxcLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJygnICsgc3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV0gKyAnKVxcXFwuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKCcgKyBzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXSArICcpJ1xuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uIElkZW50aWZpZXJcbi8vIEEgbnVtZXJpYyBpZGVudGlmaWVyLCBvciBhIG5vbi1udW1lcmljIGlkZW50aWZpZXIuXG5cbnRvaygnUFJFUkVMRUFTRUlERU5USUZJRVInKVxuc3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdID0gJyg/OicgKyBzcmNbdC5OVU1FUklDSURFTlRJRklFUl0gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8JyArIHNyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXSArICcpJ1xuXG50b2soJ1BSRVJFTEVBU0VJREVOVElGSUVSTE9PU0UnKVxuc3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV0gPSAnKD86JyArIHNyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8JyArIHNyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXSArICcpJ1xuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uXG4vLyBIeXBoZW4sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGRvdC1zZXBhcmF0ZWQgcHJlLXJlbGVhc2UgdmVyc2lvblxuLy8gaWRlbnRpZmllcnMuXG5cbnRvaygnUFJFUkVMRUFTRScpXG5zcmNbdC5QUkVSRUxFQVNFXSA9ICcoPzotKCcgKyBzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl0gK1xuICAgICAgICAgICAgICAgICAgJyg/OlxcXFwuJyArIHNyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXSArICcpKikpJ1xuXG50b2soJ1BSRVJFTEVBU0VMT09TRScpXG5zcmNbdC5QUkVSRUxFQVNFTE9PU0VdID0gJyg/Oi0/KCcgKyBzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXSArXG4gICAgICAgICAgICAgICAgICAgICAgICcoPzpcXFxcLicgKyBzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXSArICcpKikpJ1xuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YSBJZGVudGlmaWVyXG4vLyBBbnkgY29tYmluYXRpb24gb2YgZGlnaXRzLCBsZXR0ZXJzLCBvciBoeXBoZW5zLlxuXG50b2soJ0JVSUxESURFTlRJRklFUicpXG5zcmNbdC5CVUlMRElERU5USUZJRVJdID0gTEVUVEVSREFTSE5VTUJFUiArICcrJ1xuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YVxuLy8gUGx1cyBzaWduLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwZXJpb2Qtc2VwYXJhdGVkIGJ1aWxkIG1ldGFkYXRhXG4vLyBpZGVudGlmaWVycy5cblxudG9rKCdCVUlMRCcpXG5zcmNbdC5CVUlMRF0gPSAnKD86XFxcXCsoJyArIHNyY1t0LkJVSUxESURFTlRJRklFUl0gK1xuICAgICAgICAgICAgICcoPzpcXFxcLicgKyBzcmNbdC5CVUlMRElERU5USUZJRVJdICsgJykqKSknXG5cbi8vICMjIEZ1bGwgVmVyc2lvbiBTdHJpbmdcbi8vIEEgbWFpbiB2ZXJzaW9uLCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiBhbmRcbi8vIGJ1aWxkIG1ldGFkYXRhLlxuXG4vLyBOb3RlIHRoYXQgdGhlIG9ubHkgbWFqb3IsIG1pbm9yLCBwYXRjaCwgYW5kIHByZS1yZWxlYXNlIHNlY3Rpb25zIG9mXG4vLyB0aGUgdmVyc2lvbiBzdHJpbmcgYXJlIGNhcHR1cmluZyBncm91cHMuICBUaGUgYnVpbGQgbWV0YWRhdGEgaXMgbm90IGFcbi8vIGNhcHR1cmluZyBncm91cCwgYmVjYXVzZSBpdCBzaG91bGQgbm90IGV2ZXIgYmUgdXNlZCBpbiB2ZXJzaW9uXG4vLyBjb21wYXJpc29uLlxuXG50b2soJ0ZVTEwnKVxudG9rKCdGVUxMUExBSU4nKVxuc3JjW3QuRlVMTFBMQUlOXSA9ICd2PycgKyBzcmNbdC5NQUlOVkVSU0lPTl0gK1xuICAgICAgICAgICAgICAgICAgc3JjW3QuUFJFUkVMRUFTRV0gKyAnPycgK1xuICAgICAgICAgICAgICAgICAgc3JjW3QuQlVJTERdICsgJz8nXG5cbnNyY1t0LkZVTExdID0gJ14nICsgc3JjW3QuRlVMTFBMQUlOXSArICckJ1xuXG4vLyBsaWtlIGZ1bGwsIGJ1dCBhbGxvd3MgdjEuMi4zIGFuZCA9MS4yLjMsIHdoaWNoIHBlb3BsZSBkbyBzb21ldGltZXMuXG4vLyBhbHNvLCAxLjAuMGFscGhhMSAocHJlcmVsZWFzZSB3aXRob3V0IHRoZSBoeXBoZW4pIHdoaWNoIGlzIHByZXR0eVxuLy8gY29tbW9uIGluIHRoZSBucG0gcmVnaXN0cnkuXG50b2soJ0xPT1NFUExBSU4nKVxuc3JjW3QuTE9PU0VQTEFJTl0gPSAnW3Y9XFxcXHNdKicgKyBzcmNbdC5NQUlOVkVSU0lPTkxPT1NFXSArXG4gICAgICAgICAgICAgICAgICBzcmNbdC5QUkVSRUxFQVNFTE9PU0VdICsgJz8nICtcbiAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXSArICc/J1xuXG50b2soJ0xPT1NFJylcbnNyY1t0LkxPT1NFXSA9ICdeJyArIHNyY1t0LkxPT1NFUExBSU5dICsgJyQnXG5cbnRvaygnR1RMVCcpXG5zcmNbdC5HVExUXSA9ICcoKD86PHw+KT89PyknXG5cbi8vIFNvbWV0aGluZyBsaWtlIFwiMi4qXCIgb3IgXCIxLjIueFwiLlxuLy8gTm90ZSB0aGF0IFwieC54XCIgaXMgYSB2YWxpZCB4UmFuZ2UgaWRlbnRpZmVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbnRvaygnWFJBTkdFSURFTlRJRklFUkxPT1NFJylcbnNyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV0gPSBzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXSArICd8eHxYfFxcXFwqJ1xudG9rKCdYUkFOR0VJREVOVElGSUVSJylcbnNyY1t0LlhSQU5HRUlERU5USUZJRVJdID0gc3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdICsgJ3x4fFh8XFxcXConXG5cbnRvaygnWFJBTkdFUExBSU4nKVxuc3JjW3QuWFJBTkdFUExBSU5dID0gJ1t2PVxcXFxzXSooJyArIHNyY1t0LlhSQU5HRUlERU5USUZJRVJdICsgJyknICtcbiAgICAgICAgICAgICAgICAgICAnKD86XFxcXC4oJyArIHNyY1t0LlhSQU5HRUlERU5USUZJRVJdICsgJyknICtcbiAgICAgICAgICAgICAgICAgICAnKD86XFxcXC4oJyArIHNyY1t0LlhSQU5HRUlERU5USUZJRVJdICsgJyknICtcbiAgICAgICAgICAgICAgICAgICAnKD86JyArIHNyY1t0LlBSRVJFTEVBU0VdICsgJyk/JyArXG4gICAgICAgICAgICAgICAgICAgc3JjW3QuQlVJTERdICsgJz8nICtcbiAgICAgICAgICAgICAgICAgICAnKT8pPydcblxudG9rKCdYUkFOR0VQTEFJTkxPT1NFJylcbnNyY1t0LlhSQU5HRVBMQUlOTE9PU0VdID0gJ1t2PVxcXFxzXSooJyArIHNyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV0gKyAnKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyg/OlxcXFwuKCcgKyBzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdICsgJyknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcoPzpcXFxcLignICsgc3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXSArICcpJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKD86JyArIHNyY1t0LlBSRVJFTEVBU0VMT09TRV0gKyAnKT8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXSArICc/JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKT8pPydcblxudG9rKCdYUkFOR0UnKVxuc3JjW3QuWFJBTkdFXSA9ICdeJyArIHNyY1t0LkdUTFRdICsgJ1xcXFxzKicgKyBzcmNbdC5YUkFOR0VQTEFJTl0gKyAnJCdcbnRvaygnWFJBTkdFTE9PU0UnKVxuc3JjW3QuWFJBTkdFTE9PU0VdID0gJ14nICsgc3JjW3QuR1RMVF0gKyAnXFxcXHMqJyArIHNyY1t0LlhSQU5HRVBMQUlOTE9PU0VdICsgJyQnXG5cbi8vIENvZXJjaW9uLlxuLy8gRXh0cmFjdCBhbnl0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGJlIGEgcGFydCBvZiBhIHZhbGlkIHNlbXZlclxudG9rKCdDT0VSQ0UnKVxuc3JjW3QuQ09FUkNFXSA9ICcoXnxbXlxcXFxkXSknICtcbiAgICAgICAgICAgICAgJyhcXFxcZHsxLCcgKyBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIICsgJ30pJyArXG4gICAgICAgICAgICAgICcoPzpcXFxcLihcXFxcZHsxLCcgKyBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIICsgJ30pKT8nICtcbiAgICAgICAgICAgICAgJyg/OlxcXFwuKFxcXFxkezEsJyArIE1BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEggKyAnfSkpPycgK1xuICAgICAgICAgICAgICAnKD86JHxbXlxcXFxkXSknXG50b2soJ0NPRVJDRVJUTCcpXG5yZVt0LkNPRVJDRVJUTF0gPSBuZXcgUmVnRXhwKHNyY1t0LkNPRVJDRV0sICdnJylcbnNhZmVSZVt0LkNPRVJDRVJUTF0gPSBuZXcgUmVnRXhwKG1ha2VTYWZlUmUoc3JjW3QuQ09FUkNFXSksICdnJylcblxuLy8gVGlsZGUgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcInJlYXNvbmFibHkgYXQgb3IgZ3JlYXRlciB0aGFuXCJcbnRvaygnTE9ORVRJTERFJylcbnNyY1t0LkxPTkVUSUxERV0gPSAnKD86fj4/KSdcblxudG9rKCdUSUxERVRSSU0nKVxuc3JjW3QuVElMREVUUklNXSA9ICcoXFxcXHMqKScgKyBzcmNbdC5MT05FVElMREVdICsgJ1xcXFxzKydcbnJlW3QuVElMREVUUklNXSA9IG5ldyBSZWdFeHAoc3JjW3QuVElMREVUUklNXSwgJ2cnKVxuc2FmZVJlW3QuVElMREVUUklNXSA9IG5ldyBSZWdFeHAobWFrZVNhZmVSZShzcmNbdC5USUxERVRSSU1dKSwgJ2cnKVxudmFyIHRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG50b2soJ1RJTERFJylcbnNyY1t0LlRJTERFXSA9ICdeJyArIHNyY1t0LkxPTkVUSUxERV0gKyBzcmNbdC5YUkFOR0VQTEFJTl0gKyAnJCdcbnRvaygnVElMREVMT09TRScpXG5zcmNbdC5USUxERUxPT1NFXSA9ICdeJyArIHNyY1t0LkxPTkVUSUxERV0gKyBzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXSArICckJ1xuXG4vLyBDYXJldCByYW5nZXMuXG4vLyBNZWFuaW5nIGlzIFwiYXQgbGVhc3QgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGhcIlxudG9rKCdMT05FQ0FSRVQnKVxuc3JjW3QuTE9ORUNBUkVUXSA9ICcoPzpcXFxcXiknXG5cbnRvaygnQ0FSRVRUUklNJylcbnNyY1t0LkNBUkVUVFJJTV0gPSAnKFxcXFxzKiknICsgc3JjW3QuTE9ORUNBUkVUXSArICdcXFxccysnXG5yZVt0LkNBUkVUVFJJTV0gPSBuZXcgUmVnRXhwKHNyY1t0LkNBUkVUVFJJTV0sICdnJylcbnNhZmVSZVt0LkNBUkVUVFJJTV0gPSBuZXcgUmVnRXhwKG1ha2VTYWZlUmUoc3JjW3QuQ0FSRVRUUklNXSksICdnJylcbnZhciBjYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxudG9rKCdDQVJFVCcpXG5zcmNbdC5DQVJFVF0gPSAnXicgKyBzcmNbdC5MT05FQ0FSRVRdICsgc3JjW3QuWFJBTkdFUExBSU5dICsgJyQnXG50b2soJ0NBUkVUTE9PU0UnKVxuc3JjW3QuQ0FSRVRMT09TRV0gPSAnXicgKyBzcmNbdC5MT05FQ0FSRVRdICsgc3JjW3QuWFJBTkdFUExBSU5MT09TRV0gKyAnJCdcblxuLy8gQSBzaW1wbGUgZ3QvbHQvZXEgdGhpbmcsIG9yIGp1c3QgXCJcIiB0byBpbmRpY2F0ZSBcImFueSB2ZXJzaW9uXCJcbnRvaygnQ09NUEFSQVRPUkxPT1NFJylcbnNyY1t0LkNPTVBBUkFUT1JMT09TRV0gPSAnXicgKyBzcmNbdC5HVExUXSArICdcXFxccyooJyArIHNyY1t0LkxPT1NFUExBSU5dICsgJykkfF4kJ1xudG9rKCdDT01QQVJBVE9SJylcbnNyY1t0LkNPTVBBUkFUT1JdID0gJ14nICsgc3JjW3QuR1RMVF0gKyAnXFxcXHMqKCcgKyBzcmNbdC5GVUxMUExBSU5dICsgJykkfF4kJ1xuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxudG9rKCdDT01QQVJBVE9SVFJJTScpXG5zcmNbdC5DT01QQVJBVE9SVFJJTV0gPSAnKFxcXFxzKiknICsgc3JjW3QuR1RMVF0gK1xuICAgICAgICAgICAgICAgICAgICAgICdcXFxccyooJyArIHNyY1t0LkxPT1NFUExBSU5dICsgJ3wnICsgc3JjW3QuWFJBTkdFUExBSU5dICsgJyknXG5cbi8vIHRoaXMgb25lIGhhcyB0byB1c2UgdGhlIC9nIGZsYWdcbnJlW3QuQ09NUEFSQVRPUlRSSU1dID0gbmV3IFJlZ0V4cChzcmNbdC5DT01QQVJBVE9SVFJJTV0sICdnJylcbnNhZmVSZVt0LkNPTVBBUkFUT1JUUklNXSA9IG5ldyBSZWdFeHAobWFrZVNhZmVSZShzcmNbdC5DT01QQVJBVE9SVFJJTV0pLCAnZycpXG52YXIgY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbnRvaygnSFlQSEVOUkFOR0UnKVxuc3JjW3QuSFlQSEVOUkFOR0VdID0gJ15cXFxccyooJyArIHNyY1t0LlhSQU5HRVBMQUlOXSArICcpJyArXG4gICAgICAgICAgICAgICAgICAgJ1xcXFxzKy1cXFxccysnICtcbiAgICAgICAgICAgICAgICAgICAnKCcgKyBzcmNbdC5YUkFOR0VQTEFJTl0gKyAnKScgK1xuICAgICAgICAgICAgICAgICAgICdcXFxccyokJ1xuXG50b2soJ0hZUEhFTlJBTkdFTE9PU0UnKVxuc3JjW3QuSFlQSEVOUkFOR0VMT09TRV0gPSAnXlxcXFxzKignICsgc3JjW3QuWFJBTkdFUExBSU5MT09TRV0gKyAnKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcXFxzKy1cXFxccysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcoJyArIHNyY1t0LlhSQU5HRVBMQUlOTE9PU0VdICsgJyknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXFxccyokJ1xuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG50b2soJ1NUQVInKVxuc3JjW3QuU1RBUl0gPSAnKDx8Pik/PT9cXFxccypcXFxcKidcblxuLy8gQ29tcGlsZSB0byBhY3R1YWwgcmVnZXhwIG9iamVjdHMuXG4vLyBBbGwgYXJlIGZsYWctZnJlZSwgdW5sZXNzIHRoZXkgd2VyZSBjcmVhdGVkIGFib3ZlIHdpdGggYSBmbGFnLlxuZm9yICh2YXIgaSA9IDA7IGkgPCBSOyBpKyspIHtcbiAgZGVidWcoaSwgc3JjW2ldKVxuICBpZiAoIXJlW2ldKSB7XG4gICAgcmVbaV0gPSBuZXcgUmVnRXhwKHNyY1tpXSlcblxuICAgIC8vIFJlcGxhY2UgYWxsIGdyZWVkeSB3aGl0ZXNwYWNlIHRvIHByZXZlbnQgcmVnZXggZG9zIGlzc3Vlcy4gVGhlc2UgcmVnZXggYXJlXG4gICAgLy8gdXNlZCBpbnRlcm5hbGx5IHZpYSB0aGUgc2FmZVJlIG9iamVjdCBzaW5jZSBhbGwgaW5wdXRzIGluIHRoaXMgbGlicmFyeSBnZXRcbiAgICAvLyBub3JtYWxpemVkIGZpcnN0IHRvIHRyaW0gYW5kIGNvbGxhcHNlIGFsbCBleHRyYSB3aGl0ZXNwYWNlLiBUaGUgb3JpZ2luYWxcbiAgICAvLyByZWdleGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlcmxhbmQgY29uc3VtcHRpb24gYW5kIGxvd2VyIGxldmVsIHVzYWdlLiBBXG4gICAgLy8gZnV0dXJlIGJyZWFraW5nIGNoYW5nZSBjb3VsZCBleHBvcnQgdGhlIHNhZmVyIHJlZ2V4IG9ubHkgd2l0aCBhIG5vdGUgdGhhdFxuICAgIC8vIGFsbCBpbnB1dCBzaG91bGQgaGF2ZSBleHRyYSB3aGl0ZXNwYWNlIHJlbW92ZWQuXG4gICAgc2FmZVJlW2ldID0gbmV3IFJlZ0V4cChtYWtlU2FmZVJlKHNyY1tpXSkpXG4gIH1cbn1cblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5mdW5jdGlvbiBwYXJzZSAodmVyc2lvbiwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGxvb3NlOiAhIW9wdGlvbnMsXG4gICAgICBpbmNsdWRlUHJlcmVsZWFzZTogZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmICh2ZXJzaW9uLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHIgPSBvcHRpb25zLmxvb3NlID8gc2FmZVJlW3QuTE9PU0VdIDogc2FmZVJlW3QuRlVMTF1cbiAgaWYgKCFyLnRlc3QodmVyc2lvbikpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0cy52YWxpZCA9IHZhbGlkXG5mdW5jdGlvbiB2YWxpZCAodmVyc2lvbiwgb3B0aW9ucykge1xuICB2YXIgdiA9IHBhcnNlKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJldHVybiB2ID8gdi52ZXJzaW9uIDogbnVsbFxufVxuXG5leHBvcnRzLmNsZWFuID0gY2xlYW5cbmZ1bmN0aW9uIGNsZWFuICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzID0gcGFyc2UodmVyc2lvbi50cmltKCkucmVwbGFjZSgvXls9dl0rLywgJycpLCBvcHRpb25zKVxuICByZXR1cm4gcyA/IHMudmVyc2lvbiA6IG51bGxcbn1cblxuZXhwb3J0cy5TZW1WZXIgPSBTZW1WZXJcblxuZnVuY3Rpb24gU2VtVmVyICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbG9vc2U6ICEhb3B0aW9ucyxcbiAgICAgIGluY2x1ZGVQcmVyZWxlYXNlOiBmYWxzZVxuICAgIH1cbiAgfVxuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIGlmICh2ZXJzaW9uLmxvb3NlID09PSBvcHRpb25zLmxvb3NlKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblxuICAgIH0gZWxzZSB7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbi52ZXJzaW9uXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgVmVyc2lvbjogJyArIHZlcnNpb24pXG4gIH1cblxuICBpZiAodmVyc2lvbi5sZW5ndGggPiBNQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmVyc2lvbiBpcyBsb25nZXIgdGhhbiAnICsgTUFYX0xFTkdUSCArICcgY2hhcmFjdGVycycpXG4gIH1cblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgIHJldHVybiBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIH1cblxuICBkZWJ1ZygnU2VtVmVyJywgdmVyc2lvbiwgb3B0aW9ucylcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICB0aGlzLmxvb3NlID0gISFvcHRpb25zLmxvb3NlXG5cbiAgdmFyIG0gPSB2ZXJzaW9uLnRyaW0oKS5tYXRjaChvcHRpb25zLmxvb3NlID8gc2FmZVJlW3QuTE9PU0VdIDogc2FmZVJlW3QuRlVMTF0pXG5cbiAgaWYgKCFtKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBWZXJzaW9uOiAnICsgdmVyc2lvbilcbiAgfVxuXG4gIHRoaXMucmF3ID0gdmVyc2lvblxuXG4gIC8vIHRoZXNlIGFyZSBhY3R1YWxseSBudW1iZXJzXG4gIHRoaXMubWFqb3IgPSArbVsxXVxuICB0aGlzLm1pbm9yID0gK21bMl1cbiAgdGhpcy5wYXRjaCA9ICttWzNdXG5cbiAgaWYgKHRoaXMubWFqb3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWFqb3IgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtYWpvciB2ZXJzaW9uJylcbiAgfVxuXG4gIGlmICh0aGlzLm1pbm9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1pbm9yIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWlub3IgdmVyc2lvbicpXG4gIH1cblxuICBpZiAodGhpcy5wYXRjaCA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5wYXRjaCA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBhdGNoIHZlcnNpb24nKVxuICB9XG5cbiAgLy8gbnVtYmVyaWZ5IGFueSBwcmVyZWxlYXNlIG51bWVyaWMgaWRzXG4gIGlmICghbVs0XSkge1xuICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wcmVyZWxlYXNlID0gbVs0XS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGlmICgvXlswLTldKyQvLnRlc3QoaWQpKSB7XG4gICAgICAgIHZhciBudW0gPSAraWRcbiAgICAgICAgaWYgKG51bSA+PSAwICYmIG51bSA8IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICByZXR1cm4gbnVtXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpZFxuICAgIH0pXG4gIH1cblxuICB0aGlzLmJ1aWxkID0gbVs1XSA/IG1bNV0uc3BsaXQoJy4nKSA6IFtdXG4gIHRoaXMuZm9ybWF0KClcbn1cblxuU2VtVmVyLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMudmVyc2lvbiA9IHRoaXMubWFqb3IgKyAnLicgKyB0aGlzLm1pbm9yICsgJy4nICsgdGhpcy5wYXRjaFxuICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgIHRoaXMudmVyc2lvbiArPSAnLScgKyB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpXG4gIH1cbiAgcmV0dXJuIHRoaXMudmVyc2lvblxufVxuXG5TZW1WZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52ZXJzaW9uXG59XG5cblNlbVZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICBkZWJ1ZygnU2VtVmVyLmNvbXBhcmUnLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucywgb3RoZXIpXG4gIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHRoaXMuY29tcGFyZU1haW4ob3RoZXIpIHx8IHRoaXMuY29tcGFyZVByZShvdGhlcilcbn1cblxuU2VtVmVyLnByb3RvdHlwZS5jb21wYXJlTWFpbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnModGhpcy5tYWpvciwgb3RoZXIubWFqb3IpIHx8XG4gICAgICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5taW5vciwgb3RoZXIubWlub3IpIHx8XG4gICAgICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5wYXRjaCwgb3RoZXIucGF0Y2gpXG59XG5cblNlbVZlci5wcm90b3R5cGUuY29tcGFyZVByZSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIC8vIE5PVCBoYXZpbmcgYSBwcmVyZWxlYXNlIGlzID4gaGF2aW5nIG9uZVxuICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gLTFcbiAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiBvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgIW90aGVyLnByZXJlbGVhc2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHZhciBpID0gMFxuICBkbyB7XG4gICAgdmFyIGEgPSB0aGlzLnByZXJlbGVhc2VbaV1cbiAgICB2YXIgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICBkZWJ1ZygncHJlcmVsZWFzZSBjb21wYXJlJywgaSwgYSwgYilcbiAgICBpZiAoYSA9PT0gdW5kZWZpbmVkICYmIGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIDBcbiAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmIChhID09PSBiKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29tcGFyZUlkZW50aWZpZXJzKGEsIGIpXG4gICAgfVxuICB9IHdoaWxlICgrK2kpXG59XG5cblNlbVZlci5wcm90b3R5cGUuY29tcGFyZUJ1aWxkID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIGRvIHtcbiAgICB2YXIgYSA9IHRoaXMuYnVpbGRbaV1cbiAgICB2YXIgYiA9IG90aGVyLmJ1aWxkW2ldXG4gICAgZGVidWcoJ3ByZXJlbGVhc2UgY29tcGFyZScsIGksIGEsIGIpXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfSBlbHNlIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgY29udGludWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgIH1cbiAgfSB3aGlsZSAoKytpKVxufVxuXG4vLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4vLyBkb3duIHRvIHByZS1yZWxlYXNlLiBwcmVtYWpvciBhbmQgcHJlcGF0Y2ggd29yayB0aGUgc2FtZSB3YXkuXG5TZW1WZXIucHJvdG90eXBlLmluYyA9IGZ1bmN0aW9uIChyZWxlYXNlLCBpZGVudGlmaWVyKSB7XG4gIHN3aXRjaCAocmVsZWFzZSkge1xuICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgdGhpcy5pbmMoJ3ByZScsIGlkZW50aWZpZXIpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgdGhpcy5taW5vcisrXG4gICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllcilcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncHJlcGF0Y2gnOlxuICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgIC8vIGRyb3AgYW55IHByZXJlbGVhc2VzIHRoYXQgbWlnaHQgYWxyZWFkeSBleGlzdCwgc2luY2UgdGhleSBhcmUgbm90XG4gICAgICAvLyByZWxldmFudCBhdCB0aGlzIHBvaW50LlxuICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgIHRoaXMuaW5jKCdwYXRjaCcsIGlkZW50aWZpZXIpXG4gICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllcilcbiAgICAgIGJyZWFrXG4gICAgLy8gSWYgdGhlIGlucHV0IGlzIGEgbm9uLXByZXJlbGVhc2UgdmVyc2lvbiwgdGhpcyBhY3RzIHRoZSBzYW1lIGFzXG4gICAgLy8gcHJlcGF0Y2guXG4gICAgY2FzZSAncHJlcmVsZWFzZSc6XG4gICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgdGhpcy5pbmMoJ3ByZScsIGlkZW50aWZpZXIpXG4gICAgICBicmVha1xuXG4gICAgY2FzZSAnbWFqb3InOlxuICAgICAgLy8gSWYgdGhpcyBpcyBhIHByZS1tYWpvciB2ZXJzaW9uLCBidW1wIHVwIHRvIHRoZSBzYW1lIG1ham9yIHZlcnNpb24uXG4gICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1ham9yLlxuICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgLy8gMS4xLjAgYnVtcHMgdG8gMi4wLjBcbiAgICAgIGlmICh0aGlzLm1pbm9yICE9PSAwIHx8XG4gICAgICAgICAgdGhpcy5wYXRjaCAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICB9XG4gICAgICB0aGlzLm1pbm9yID0gMFxuICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtaW5vci5cbiAgICAgIC8vIDEuMi4wLTUgYnVtcHMgdG8gMS4yLjBcbiAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICBpZiAodGhpcy5wYXRjaCAhPT0gMCB8fCB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgfVxuICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiwgaXQgd2lsbCBpbmNyZW1lbnQgdGhlIHBhdGNoLlxuICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgIC8vIDEuMi4wLTUgcGF0Y2hlcyB0byAxLjIuMFxuICAgICAgLy8gMS4yLjAgcGF0Y2hlcyB0byAxLjIuMVxuICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5wYXRjaCsrXG4gICAgICB9XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgYnJlYWtcbiAgICAvLyBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIHB1YmxpY2x5LlxuICAgIC8vIDEuMC4wIFwicHJlXCIgd291bGQgYmVjb21lIDEuMC4wLTAgd2hpY2ggaXMgdGhlIHdyb25nIGRpcmVjdGlvbi5cbiAgICBjYXNlICdwcmUnOlxuICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gWzBdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaSA9IHRoaXMucHJlcmVsZWFzZS5sZW5ndGhcbiAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2VbaV0rK1xuICAgICAgICAgICAgaSA9IC0yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UucHVzaCgwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaWRlbnRpZmllcikge1xuICAgICAgICAvLyAxLjIuMC1iZXRhLjEgYnVtcHMgdG8gMS4yLjAtYmV0YS4yLFxuICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlWzBdID09PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgaWYgKGlzTmFOKHRoaXMucHJlcmVsZWFzZVsxXSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyLCAwXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbaWRlbnRpZmllciwgMF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiAnICsgcmVsZWFzZSlcbiAgfVxuICB0aGlzLmZvcm1hdCgpXG4gIHRoaXMucmF3ID0gdGhpcy52ZXJzaW9uXG4gIHJldHVybiB0aGlzXG59XG5cbmV4cG9ydHMuaW5jID0gaW5jXG5mdW5jdGlvbiBpbmMgKHZlcnNpb24sIHJlbGVhc2UsIGxvb3NlLCBpZGVudGlmaWVyKSB7XG4gIGlmICh0eXBlb2YgKGxvb3NlKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyID0gbG9vc2VcbiAgICBsb29zZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBsb29zZSkuaW5jKHJlbGVhc2UsIGlkZW50aWZpZXIpLnZlcnNpb25cbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydHMuZGlmZiA9IGRpZmZcbmZ1bmN0aW9uIGRpZmYgKHZlcnNpb24xLCB2ZXJzaW9uMikge1xuICBpZiAoZXEodmVyc2lvbjEsIHZlcnNpb24yKSkge1xuICAgIHJldHVybiBudWxsXG4gIH0gZWxzZSB7XG4gICAgdmFyIHYxID0gcGFyc2UodmVyc2lvbjEpXG4gICAgdmFyIHYyID0gcGFyc2UodmVyc2lvbjIpXG4gICAgdmFyIHByZWZpeCA9ICcnXG4gICAgaWYgKHYxLnByZXJlbGVhc2UubGVuZ3RoIHx8IHYyLnByZXJlbGVhc2UubGVuZ3RoKSB7XG4gICAgICBwcmVmaXggPSAncHJlJ1xuICAgICAgdmFyIGRlZmF1bHRSZXN1bHQgPSAncHJlcmVsZWFzZSdcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIHYxKSB7XG4gICAgICBpZiAoa2V5ID09PSAnbWFqb3InIHx8IGtleSA9PT0gJ21pbm9yJyB8fCBrZXkgPT09ICdwYXRjaCcpIHtcbiAgICAgICAgaWYgKHYxW2tleV0gIT09IHYyW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gcHJlZml4ICsga2V5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRSZXN1bHQgLy8gbWF5IGJlIHVuZGVmaW5lZFxuICB9XG59XG5cbmV4cG9ydHMuY29tcGFyZUlkZW50aWZpZXJzID0gY29tcGFyZUlkZW50aWZpZXJzXG5cbnZhciBudW1lcmljID0gL15bMC05XSskL1xuZnVuY3Rpb24gY29tcGFyZUlkZW50aWZpZXJzIChhLCBiKSB7XG4gIHZhciBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIHZhciBibnVtID0gbnVtZXJpYy50ZXN0KGIpXG5cbiAgaWYgKGFudW0gJiYgYm51bSkge1xuICAgIGEgPSArYVxuICAgIGIgPSArYlxuICB9XG5cbiAgcmV0dXJuIGEgPT09IGIgPyAwXG4gICAgOiAoYW51bSAmJiAhYm51bSkgPyAtMVxuICAgIDogKGJudW0gJiYgIWFudW0pID8gMVxuICAgIDogYSA8IGIgPyAtMVxuICAgIDogMVxufVxuXG5leHBvcnRzLnJjb21wYXJlSWRlbnRpZmllcnMgPSByY29tcGFyZUlkZW50aWZpZXJzXG5mdW5jdGlvbiByY29tcGFyZUlkZW50aWZpZXJzIChhLCBiKSB7XG4gIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYiwgYSlcbn1cblxuZXhwb3J0cy5tYWpvciA9IG1ham9yXG5mdW5jdGlvbiBtYWpvciAoYSwgbG9vc2UpIHtcbiAgcmV0dXJuIG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1ham9yXG59XG5cbmV4cG9ydHMubWlub3IgPSBtaW5vclxuZnVuY3Rpb24gbWlub3IgKGEsIGxvb3NlKSB7XG4gIHJldHVybiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxufVxuXG5leHBvcnRzLnBhdGNoID0gcGF0Y2hcbmZ1bmN0aW9uIHBhdGNoIChhLCBsb29zZSkge1xuICByZXR1cm4gbmV3IFNlbVZlcihhLCBsb29zZSkucGF0Y2hcbn1cblxuZXhwb3J0cy5jb21wYXJlID0gY29tcGFyZVxuZnVuY3Rpb24gY29tcGFyZSAoYSwgYiwgbG9vc2UpIHtcbiAgcmV0dXJuIG5ldyBTZW1WZXIoYSwgbG9vc2UpLmNvbXBhcmUobmV3IFNlbVZlcihiLCBsb29zZSkpXG59XG5cbmV4cG9ydHMuY29tcGFyZUxvb3NlID0gY29tcGFyZUxvb3NlXG5mdW5jdGlvbiBjb21wYXJlTG9vc2UgKGEsIGIpIHtcbiAgcmV0dXJuIGNvbXBhcmUoYSwgYiwgdHJ1ZSlcbn1cblxuZXhwb3J0cy5jb21wYXJlQnVpbGQgPSBjb21wYXJlQnVpbGRcbmZ1bmN0aW9uIGNvbXBhcmVCdWlsZCAoYSwgYiwgbG9vc2UpIHtcbiAgdmFyIHZlcnNpb25BID0gbmV3IFNlbVZlcihhLCBsb29zZSlcbiAgdmFyIHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cblxuZXhwb3J0cy5yY29tcGFyZSA9IHJjb21wYXJlXG5mdW5jdGlvbiByY29tcGFyZSAoYSwgYiwgbG9vc2UpIHtcbiAgcmV0dXJuIGNvbXBhcmUoYiwgYSwgbG9vc2UpXG59XG5cbmV4cG9ydHMuc29ydCA9IHNvcnRcbmZ1bmN0aW9uIHNvcnQgKGxpc3QsIGxvb3NlKSB7XG4gIHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5jb21wYXJlQnVpbGQoYSwgYiwgbG9vc2UpXG4gIH0pXG59XG5cbmV4cG9ydHMucnNvcnQgPSByc29ydFxuZnVuY3Rpb24gcnNvcnQgKGxpc3QsIGxvb3NlKSB7XG4gIHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5jb21wYXJlQnVpbGQoYiwgYSwgbG9vc2UpXG4gIH0pXG59XG5cbmV4cG9ydHMuZ3QgPSBndFxuZnVuY3Rpb24gZ3QgKGEsIGIsIGxvb3NlKSB7XG4gIHJldHVybiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+IDBcbn1cblxuZXhwb3J0cy5sdCA9IGx0XG5mdW5jdGlvbiBsdCAoYSwgYiwgbG9vc2UpIHtcbiAgcmV0dXJuIGNvbXBhcmUoYSwgYiwgbG9vc2UpIDwgMFxufVxuXG5leHBvcnRzLmVxID0gZXFcbmZ1bmN0aW9uIGVxIChhLCBiLCBsb29zZSkge1xuICByZXR1cm4gY29tcGFyZShhLCBiLCBsb29zZSkgPT09IDBcbn1cblxuZXhwb3J0cy5uZXEgPSBuZXFcbmZ1bmN0aW9uIG5lcSAoYSwgYiwgbG9vc2UpIHtcbiAgcmV0dXJuIGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG59XG5cbmV4cG9ydHMuZ3RlID0gZ3RlXG5mdW5jdGlvbiBndGUgKGEsIGIsIGxvb3NlKSB7XG4gIHJldHVybiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+PSAwXG59XG5cbmV4cG9ydHMubHRlID0gbHRlXG5mdW5jdGlvbiBsdGUgKGEsIGIsIGxvb3NlKSB7XG4gIHJldHVybiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8PSAwXG59XG5cbmV4cG9ydHMuY21wID0gY21wXG5mdW5jdGlvbiBjbXAgKGEsIG9wLCBiLCBsb29zZSkge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpXG4gICAgICAgIGEgPSBhLnZlcnNpb25cbiAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcpXG4gICAgICAgIGIgPSBiLnZlcnNpb25cbiAgICAgIHJldHVybiBhID09PSBiXG5cbiAgICBjYXNlICchPT0nOlxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JylcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0JylcbiAgICAgICAgYiA9IGIudmVyc2lvblxuICAgICAgcmV0dXJuIGEgIT09IGJcblxuICAgIGNhc2UgJyc6XG4gICAgY2FzZSAnPSc6XG4gICAgY2FzZSAnPT0nOlxuICAgICAgcmV0dXJuIGVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnIT0nOlxuICAgICAgcmV0dXJuIG5lcShhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJz4nOlxuICAgICAgcmV0dXJuIGd0KGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPj0nOlxuICAgICAgcmV0dXJuIGd0ZShhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJzwnOlxuICAgICAgcmV0dXJuIGx0KGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPD0nOlxuICAgICAgcmV0dXJuIGx0ZShhLCBiLCBsb29zZSlcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG9wZXJhdG9yOiAnICsgb3ApXG4gIH1cbn1cblxuZXhwb3J0cy5Db21wYXJhdG9yID0gQ29tcGFyYXRvclxuZnVuY3Rpb24gQ29tcGFyYXRvciAoY29tcCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGxvb3NlOiAhIW9wdGlvbnMsXG4gICAgICBpbmNsdWRlUHJlcmVsZWFzZTogZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpIHtcbiAgICBpZiAoY29tcC5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlKSB7XG4gICAgICByZXR1cm4gY29tcFxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wID0gY29tcC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb21wYXJhdG9yKSkge1xuICAgIHJldHVybiBuZXcgQ29tcGFyYXRvcihjb21wLCBvcHRpb25zKVxuICB9XG5cbiAgY29tcCA9IGNvbXAudHJpbSgpLnNwbGl0KC9cXHMrLykuam9pbignICcpXG4gIGRlYnVnKCdjb21wYXJhdG9yJywgY29tcCwgb3B0aW9ucylcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICB0aGlzLmxvb3NlID0gISFvcHRpb25zLmxvb3NlXG4gIHRoaXMucGFyc2UoY29tcClcblxuICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgIHRoaXMudmFsdWUgPSAnJ1xuICB9IGVsc2Uge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICB9XG5cbiAgZGVidWcoJ2NvbXAnLCB0aGlzKVxufVxuXG52YXIgQU5ZID0ge31cbkNvbXBhcmF0b3IucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGNvbXApIHtcbiAgdmFyIHIgPSB0aGlzLm9wdGlvbnMubG9vc2UgPyBzYWZlUmVbdC5DT01QQVJBVE9STE9PU0VdIDogc2FmZVJlW3QuQ09NUEFSQVRPUl1cbiAgdmFyIG0gPSBjb21wLm1hdGNoKHIpXG5cbiAgaWYgKCFtKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjb21wYXJhdG9yOiAnICsgY29tcClcbiAgfVxuXG4gIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgaWYgKHRoaXMub3BlcmF0b3IgPT09ICc9Jykge1xuICAgIHRoaXMub3BlcmF0b3IgPSAnJ1xuICB9XG5cbiAgLy8gaWYgaXQgbGl0ZXJhbGx5IGlzIGp1c3QgJz4nIG9yICcnIHRoZW4gYWxsb3cgYW55dGhpbmcuXG4gIGlmICghbVsyXSkge1xuICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zZW12ZXIgPSBuZXcgU2VtVmVyKG1bMl0sIHRoaXMub3B0aW9ucy5sb29zZSlcbiAgfVxufVxuXG5Db21wYXJhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmFsdWVcbn1cblxuQ29tcGFyYXRvci5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uICh2ZXJzaW9uKSB7XG4gIGRlYnVnKCdDb21wYXJhdG9yLnRlc3QnLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMubG9vc2UpXG5cbiAgaWYgKHRoaXMuc2VtdmVyID09PSBBTlkgfHwgdmVyc2lvbiA9PT0gQU5ZKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgdmVyc2lvbiA9IG5ldyBTZW1WZXIodmVyc2lvbiwgdGhpcy5vcHRpb25zKVxuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG59XG5cbkNvbXBhcmF0b3IucHJvdG90eXBlLmludGVyc2VjdHMgPSBmdW5jdGlvbiAoY29tcCwgb3B0aW9ucykge1xuICBpZiAoIShjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBsb29zZTogISFvcHRpb25zLFxuICAgICAgaW5jbHVkZVByZXJlbGVhc2U6IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgdmFyIHJhbmdlVG1wXG5cbiAgaWYgKHRoaXMub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByYW5nZVRtcCA9IG5ldyBSYW5nZShjb21wLnZhbHVlLCBvcHRpb25zKVxuICAgIHJldHVybiBzYXRpc2ZpZXModGhpcy52YWx1ZSwgcmFuZ2VUbXAsIG9wdGlvbnMpXG4gIH0gZWxzZSBpZiAoY29tcC5vcGVyYXRvciA9PT0gJycpIHtcbiAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJhbmdlVG1wID0gbmV3IFJhbmdlKHRoaXMudmFsdWUsIG9wdGlvbnMpXG4gICAgcmV0dXJuIHNhdGlzZmllcyhjb21wLnNlbXZlciwgcmFuZ2VUbXAsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgc2FtZURpcmVjdGlvbkluY3JlYXNpbmcgPVxuICAgICh0aGlzLm9wZXJhdG9yID09PSAnPj0nIHx8IHRoaXMub3BlcmF0b3IgPT09ICc+JykgJiZcbiAgICAoY29tcC5vcGVyYXRvciA9PT0gJz49JyB8fCBjb21wLm9wZXJhdG9yID09PSAnPicpXG4gIHZhciBzYW1lRGlyZWN0aW9uRGVjcmVhc2luZyA9XG4gICAgKHRoaXMub3BlcmF0b3IgPT09ICc8PScgfHwgdGhpcy5vcGVyYXRvciA9PT0gJzwnKSAmJlxuICAgIChjb21wLm9wZXJhdG9yID09PSAnPD0nIHx8IGNvbXAub3BlcmF0b3IgPT09ICc8JylcbiAgdmFyIHNhbWVTZW1WZXIgPSB0aGlzLnNlbXZlci52ZXJzaW9uID09PSBjb21wLnNlbXZlci52ZXJzaW9uXG4gIHZhciBkaWZmZXJlbnREaXJlY3Rpb25zSW5jbHVzaXZlID1cbiAgICAodGhpcy5vcGVyYXRvciA9PT0gJz49JyB8fCB0aGlzLm9wZXJhdG9yID09PSAnPD0nKSAmJlxuICAgIChjb21wLm9wZXJhdG9yID09PSAnPj0nIHx8IGNvbXAub3BlcmF0b3IgPT09ICc8PScpXG4gIHZhciBvcHBvc2l0ZURpcmVjdGlvbnNMZXNzVGhhbiA9XG4gICAgY21wKHRoaXMuc2VtdmVyLCAnPCcsIGNvbXAuc2VtdmVyLCBvcHRpb25zKSAmJlxuICAgICgodGhpcy5vcGVyYXRvciA9PT0gJz49JyB8fCB0aGlzLm9wZXJhdG9yID09PSAnPicpICYmXG4gICAgKGNvbXAub3BlcmF0b3IgPT09ICc8PScgfHwgY29tcC5vcGVyYXRvciA9PT0gJzwnKSlcbiAgdmFyIG9wcG9zaXRlRGlyZWN0aW9uc0dyZWF0ZXJUaGFuID1cbiAgICBjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgKCh0aGlzLm9wZXJhdG9yID09PSAnPD0nIHx8IHRoaXMub3BlcmF0b3IgPT09ICc8JykgJiZcbiAgICAoY29tcC5vcGVyYXRvciA9PT0gJz49JyB8fCBjb21wLm9wZXJhdG9yID09PSAnPicpKVxuXG4gIHJldHVybiBzYW1lRGlyZWN0aW9uSW5jcmVhc2luZyB8fCBzYW1lRGlyZWN0aW9uRGVjcmVhc2luZyB8fFxuICAgIChzYW1lU2VtVmVyICYmIGRpZmZlcmVudERpcmVjdGlvbnNJbmNsdXNpdmUpIHx8XG4gICAgb3Bwb3NpdGVEaXJlY3Rpb25zTGVzc1RoYW4gfHwgb3Bwb3NpdGVEaXJlY3Rpb25zR3JlYXRlclRoYW5cbn1cblxuZXhwb3J0cy5SYW5nZSA9IFJhbmdlXG5mdW5jdGlvbiBSYW5nZSAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBsb29zZTogISFvcHRpb25zLFxuICAgICAgaW5jbHVkZVByZXJlbGVhc2U6IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgaWYgKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpIHtcbiAgICBpZiAocmFuZ2UubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSAmJlxuICAgICAgICByYW5nZS5pbmNsdWRlUHJlcmVsZWFzZSA9PT0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgICByZXR1cm4gcmFuZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UudmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfVxuXG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgLy8gRmlyc3QgcmVkdWNlIGFsbCB3aGl0ZXNwYWNlIGFzIG11Y2ggYXMgcG9zc2libGUgc28gd2UgZG8gbm90IGhhdmUgdG8gcmVseVxuICAvLyBvbiBwb3RlbnRpYWxseSBzbG93IHJlZ2V4ZXMgbGlrZSBcXHMqLiBUaGlzIGlzIHRoZW4gc3RvcmVkIGFuZCB1c2VkIGZvclxuICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgdGhpcy5yYXcgPSByYW5nZVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5qb2luKCcgJylcblxuICAvLyBGaXJzdCwgc3BsaXQgYmFzZWQgb24gYm9vbGVhbiBvciB8fFxuICB0aGlzLnNldCA9IHRoaXMucmF3LnNwbGl0KCd8fCcpLm1hcChmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVJhbmdlKHJhbmdlLnRyaW0oKSlcbiAgfSwgdGhpcykuZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgLy8gdGhyb3cgb3V0IGFueSB0aGF0IGFyZSBub3QgcmVsZXZhbnQgZm9yIHdoYXRldmVyIHJlYXNvblxuICAgIHJldHVybiBjLmxlbmd0aFxuICB9KVxuXG4gIGlmICghdGhpcy5zZXQubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBTZW1WZXIgUmFuZ2U6ICcgKyB0aGlzLnJhdylcbiAgfVxuXG4gIHRoaXMuZm9ybWF0KClcbn1cblxuUmFuZ2UucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yYW5nZSA9IHRoaXMuc2V0Lm1hcChmdW5jdGlvbiAoY29tcHMpIHtcbiAgICByZXR1cm4gY29tcHMuam9pbignICcpLnRyaW0oKVxuICB9KS5qb2luKCd8fCcpLnRyaW0oKVxuICByZXR1cm4gdGhpcy5yYW5nZVxufVxuXG5SYW5nZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJhbmdlXG59XG5cblJhbmdlLnByb3RvdHlwZS5wYXJzZVJhbmdlID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gIHZhciBsb29zZSA9IHRoaXMub3B0aW9ucy5sb29zZVxuICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgdmFyIGhyID0gbG9vc2UgPyBzYWZlUmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHNhZmVSZVt0LkhZUEhFTlJBTkdFXVxuICByYW5nZSA9IHJhbmdlLnJlcGxhY2UoaHIsIGh5cGhlblJlcGxhY2UpXG4gIGRlYnVnKCdoeXBoZW4gcmVwbGFjZScsIHJhbmdlKVxuICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKHNhZmVSZVt0LkNPTVBBUkFUT1JUUklNXSwgY29tcGFyYXRvclRyaW1SZXBsYWNlKVxuICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UsIHNhZmVSZVt0LkNPTVBBUkFUT1JUUklNXSlcblxuICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKHNhZmVSZVt0LlRJTERFVFJJTV0sIHRpbGRlVHJpbVJlcGxhY2UpXG5cbiAgLy8gYF4gMS4yLjNgID0+IGBeMS4yLjNgXG4gIHJhbmdlID0gcmFuZ2UucmVwbGFjZShzYWZlUmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuXG4gIC8vIG5vcm1hbGl6ZSBzcGFjZXNcbiAgcmFuZ2UgPSByYW5nZS5zcGxpdCgvXFxzKy8pLmpvaW4oJyAnKVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByYW5nZSBpcyBjb21wbGV0ZWx5IHRyaW1tZWQgYW5kXG4gIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgdmFyIGNvbXBSZSA9IGxvb3NlID8gc2FmZVJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHNhZmVSZVt0LkNPTVBBUkFUT1JdXG4gIHZhciBzZXQgPSByYW5nZS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY29tcCkge1xuICAgIHJldHVybiBwYXJzZUNvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKVxuICB9LCB0aGlzKS5qb2luKCcgJykuc3BsaXQoL1xccysvKVxuICBpZiAodGhpcy5vcHRpb25zLmxvb3NlKSB7XG4gICAgLy8gaW4gbG9vc2UgbW9kZSwgdGhyb3cgb3V0IGFueSB0aGF0IGFyZSBub3QgdmFsaWQgY29tcGFyYXRvcnNcbiAgICBzZXQgPSBzZXQuZmlsdGVyKGZ1bmN0aW9uIChjb21wKSB7XG4gICAgICByZXR1cm4gISFjb21wLm1hdGNoKGNvbXBSZSlcbiAgICB9KVxuICB9XG4gIHNldCA9IHNldC5tYXAoZnVuY3Rpb24gKGNvbXApIHtcbiAgICByZXR1cm4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKVxuICB9LCB0aGlzKVxuXG4gIHJldHVybiBzZXRcbn1cblxuUmFuZ2UucHJvdG90eXBlLmludGVyc2VjdHMgPSBmdW5jdGlvbiAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgaWYgKCEocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIFJhbmdlIGlzIHJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiB0aGlzLnNldC5zb21lKGZ1bmN0aW9uICh0aGlzQ29tcGFyYXRvcnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICByYW5nZS5zZXQuc29tZShmdW5jdGlvbiAocmFuZ2VDb21wYXJhdG9ycykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICB0aGlzQ29tcGFyYXRvcnMuZXZlcnkoZnVuY3Rpb24gKHRoaXNDb21wYXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2VDb21wYXJhdG9ycy5ldmVyeShmdW5jdGlvbiAocmFuZ2VDb21wYXJhdG9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH0pXG59XG5cbi8vIHRha2UgYSBzZXQgb2YgY29tcGFyYXRvcnMgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoZXJlXG4vLyBleGlzdHMgYSB2ZXJzaW9uIHdoaWNoIGNhbiBzYXRpc2Z5IGl0XG5mdW5jdGlvbiBpc1NhdGlzZmlhYmxlIChjb21wYXJhdG9ycywgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0ID0gdHJ1ZVxuICB2YXIgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIHZhciB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeShmdW5jdGlvbiAob3RoZXJDb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gTW9zdGx5IGp1c3QgZm9yIHRlc3RpbmcgYW5kIGxlZ2FjeSBBUEkgcmVhc29uc1xuZXhwb3J0cy50b0NvbXBhcmF0b3JzID0gdG9Db21wYXJhdG9yc1xuZnVuY3Rpb24gdG9Db21wYXJhdG9ycyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucykuc2V0Lm1hcChmdW5jdGlvbiAoY29tcCkge1xuICAgIHJldHVybiBjb21wLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIGMudmFsdWVcbiAgICB9KS5qb2luKCcgJykudHJpbSgpLnNwbGl0KCcgJylcbiAgfSlcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuZnVuY3Rpb24gcGFyc2VDb21wYXJhdG9yIChjb21wLCBvcHRpb25zKSB7XG4gIGRlYnVnKCdjb21wJywgY29tcCwgb3B0aW9ucylcbiAgY29tcCA9IHJlcGxhY2VDYXJldHMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ2NhcmV0JywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VUaWxkZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3RpbGRlcycsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlWFJhbmdlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygneHJhbmdlJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VTdGFycyhjb21wLCBvcHRpb25zKVxuICBkZWJ1Zygnc3RhcnMnLCBjb21wKVxuICByZXR1cm4gY29tcFxufVxuXG5mdW5jdGlvbiBpc1ggKGlkKSB7XG4gIHJldHVybiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKidcbn1cblxuLy8gfiwgfj4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyB+MiwgfjIueCwgfjIueC54LCB+PjIsIH4+Mi54IH4+Mi54LnggLS0+ID49Mi4wLjAgPDMuMC4wXG4vLyB+Mi4wLCB+Mi4wLngsIH4+Mi4wLCB+PjIuMC54IC0tPiA+PTIuMC4wIDwyLjEuMFxuLy8gfjEuMiwgfjEuMi54LCB+PjEuMiwgfj4xLjIueCAtLT4gPj0xLjIuMCA8MS4zLjBcbi8vIH4xLjIuMywgfj4xLjIuMyAtLT4gPj0xLjIuMyA8MS4zLjBcbi8vIH4xLjIuMCwgfj4xLjIuMCAtLT4gPj0xLjIuMCA8MS4zLjBcbmZ1bmN0aW9uIHJlcGxhY2VUaWxkZXMgKGNvbXAsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNvbXAudHJpbSgpLnNwbGl0KC9cXHMrLykubWFwKGZ1bmN0aW9uIChjb21wKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VUaWxkZShjb21wLCBvcHRpb25zKVxuICB9KS5qb2luKCcgJylcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRpbGRlIChjb21wLCBvcHRpb25zKSB7XG4gIHZhciByID0gb3B0aW9ucy5sb29zZSA/IHNhZmVSZVt0LlRJTERFTE9PU0VdIDogc2FmZVJlW3QuVElMREVdXG4gIHJldHVybiBjb21wLnJlcGxhY2UociwgZnVuY3Rpb24gKF8sIE0sIG0sIHAsIHByKSB7XG4gICAgZGVidWcoJ3RpbGRlJywgY29tcCwgXywgTSwgbSwgcCwgcHIpXG4gICAgdmFyIHJldFxuXG4gICAgaWYgKGlzWChNKSkge1xuICAgICAgcmV0ID0gJydcbiAgICB9IGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgcmV0ID0gJz49JyArIE0gKyAnLjAuMCA8JyArICgrTSArIDEpICsgJy4wLjAnXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIC8vIH4xLjIgPT0gPj0xLjIuMCA8MS4zLjBcbiAgICAgIHJldCA9ICc+PScgKyBNICsgJy4nICsgbSArICcuMCA8JyArIE0gKyAnLicgKyAoK20gKyAxKSArICcuMCdcbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZVRpbGRlIHByJywgcHIpXG4gICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLicgKyBwICsgJy0nICsgcHIgK1xuICAgICAgICAgICAgJyA8JyArIE0gKyAnLicgKyAoK20gKyAxKSArICcuMCdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfjEuMi4zID09ID49MS4yLjMgPDEuMy4wXG4gICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLicgKyBwICtcbiAgICAgICAgICAgICcgPCcgKyBNICsgJy4nICsgKCttICsgMSkgKyAnLjAnXG4gICAgfVxuXG4gICAgZGVidWcoJ3RpbGRlIHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbi8vIF4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyBeMiwgXjIueCwgXjIueC54IC0tPiA+PTIuMC4wIDwzLjAuMFxuLy8gXjIuMCwgXjIuMC54IC0tPiA+PTIuMC4wIDwzLjAuMFxuLy8gXjEuMiwgXjEuMi54IC0tPiA+PTEuMi4wIDwyLjAuMFxuLy8gXjEuMi4zIC0tPiA+PTEuMi4zIDwyLjAuMFxuLy8gXjEuMi4wIC0tPiA+PTEuMi4wIDwyLjAuMFxuZnVuY3Rpb24gcmVwbGFjZUNhcmV0cyAoY29tcCwgb3B0aW9ucykge1xuICByZXR1cm4gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5tYXAoZnVuY3Rpb24gKGNvbXApIHtcbiAgICByZXR1cm4gcmVwbGFjZUNhcmV0KGNvbXAsIG9wdGlvbnMpXG4gIH0pLmpvaW4oJyAnKVxufVxuXG5mdW5jdGlvbiByZXBsYWNlQ2FyZXQgKGNvbXAsIG9wdGlvbnMpIHtcbiAgZGVidWcoJ2NhcmV0JywgY29tcCwgb3B0aW9ucylcbiAgdmFyIHIgPSBvcHRpb25zLmxvb3NlID8gc2FmZVJlW3QuQ0FSRVRMT09TRV0gOiBzYWZlUmVbdC5DQVJFVF1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCBmdW5jdGlvbiAoXywgTSwgbSwgcCwgcHIpIHtcbiAgICBkZWJ1ZygnY2FyZXQnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICB2YXIgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSAnPj0nICsgTSArICcuMC4wIDwnICsgKCtNICsgMSkgKyAnLjAuMCdcbiAgICB9IGVsc2UgaWYgKGlzWChwKSkge1xuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLjAgPCcgKyBNICsgJy4nICsgKCttICsgMSkgKyAnLjAnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLjAgPCcgKyAoK00gKyAxKSArICcuMC4wJ1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlQ2FyZXQgcHInLCBwcilcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgIHJldCA9ICc+PScgKyBNICsgJy4nICsgbSArICcuJyArIHAgKyAnLScgKyBwciArXG4gICAgICAgICAgICAgICAgJyA8JyArIE0gKyAnLicgKyBtICsgJy4nICsgKCtwICsgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLicgKyBwICsgJy0nICsgcHIgK1xuICAgICAgICAgICAgICAgICcgPCcgKyBNICsgJy4nICsgKCttICsgMSkgKyAnLjAnXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9ICc+PScgKyBNICsgJy4nICsgbSArICcuJyArIHAgKyAnLScgKyBwciArXG4gICAgICAgICAgICAgICcgPCcgKyAoK00gKyAxKSArICcuMC4wJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnbm8gcHInKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gJz49JyArIE0gKyAnLicgKyBtICsgJy4nICsgcCArXG4gICAgICAgICAgICAgICAgJyA8JyArIE0gKyAnLicgKyBtICsgJy4nICsgKCtwICsgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLicgKyBwICtcbiAgICAgICAgICAgICAgICAnIDwnICsgTSArICcuJyArICgrbSArIDEpICsgJy4wJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSAnPj0nICsgTSArICcuJyArIG0gKyAnLicgKyBwICtcbiAgICAgICAgICAgICAgJyA8JyArICgrTSArIDEpICsgJy4wLjAnXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVidWcoJ2NhcmV0IHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VYUmFuZ2VzIChjb21wLCBvcHRpb25zKSB7XG4gIGRlYnVnKCdyZXBsYWNlWFJhbmdlcycsIGNvbXAsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wLnNwbGl0KC9cXHMrLykubWFwKGZ1bmN0aW9uIChjb21wKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VYUmFuZ2UoY29tcCwgb3B0aW9ucylcbiAgfSkuam9pbignICcpXG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VYUmFuZ2UgKGNvbXAsIG9wdGlvbnMpIHtcbiAgY29tcCA9IGNvbXAudHJpbSgpXG4gIHZhciByID0gb3B0aW9ucy5sb29zZSA/IHNhZmVSZVt0LlhSQU5HRUxPT1NFXSA6IHNhZmVSZVt0LlhSQU5HRV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCBmdW5jdGlvbiAocmV0LCBndGx0LCBNLCBtLCBwLCBwcikge1xuICAgIGRlYnVnKCd4UmFuZ2UnLCBjb21wLCByZXQsIGd0bHQsIE0sIG0sIHAsIHByKVxuICAgIHZhciB4TSA9IGlzWChNKVxuICAgIHZhciB4bSA9IHhNIHx8IGlzWChtKVxuICAgIHZhciB4cCA9IHhtIHx8IGlzWChwKVxuICAgIHZhciBhbnlYID0geHBcblxuICAgIGlmIChndGx0ID09PSAnPScgJiYgYW55WCkge1xuICAgICAgZ3RsdCA9ICcnXG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgLy8gdG8gZml4IHRoaXMgdG8gLTAsIHRoZSBsb3dlc3QgcG9zc2libGUgcHJlcmVsZWFzZSB2YWx1ZVxuICAgIHByID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuXG4gICAgaWYgKHhNKSB7XG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGFsbG93ZWRcbiAgICAgICAgcmV0ID0gJzwwLjAuMC0wJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBmb3JiaWRkZW5cbiAgICAgICAgcmV0ID0gJyonXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgIGlmICh4bSkge1xuICAgICAgICBtID0gMFxuICAgICAgfVxuICAgICAgcCA9IDBcblxuICAgICAgaWYgKGd0bHQgPT09ICc+Jykge1xuICAgICAgICAvLyA+MSA9PiA+PTIuMC4wXG4gICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICAvLyA+MS4yLjMgPT4gPj0gMS4yLjRcbiAgICAgICAgZ3RsdCA9ICc+PSdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICAgIG0gPSAwXG4gICAgICAgICAgcCA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtID0gK20gKyAxXG4gICAgICAgICAgcCA9IDBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChndGx0ID09PSAnPD0nKSB7XG4gICAgICAgIC8vIDw9MC43LnggaXMgYWN0dWFsbHkgPDAuOC4wLCBzaW5jZSBhbnkgMC43Lnggc2hvdWxkXG4gICAgICAgIC8vIHBhc3MuICBTaW1pbGFybHksIDw9Ny54IGlzIGFjdHVhbGx5IDw4LjAuMCwgZXRjLlxuICAgICAgICBndGx0ID0gJzwnXG4gICAgICAgIGlmICh4bSkge1xuICAgICAgICAgIE0gPSArTSArIDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtID0gK20gKyAxXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID0gZ3RsdCArIE0gKyAnLicgKyBtICsgJy4nICsgcCArIHByXG4gICAgfSBlbHNlIGlmICh4bSkge1xuICAgICAgcmV0ID0gJz49JyArIE0gKyAnLjAuMCcgKyBwciArICcgPCcgKyAoK00gKyAxKSArICcuMC4wJyArIHByXG4gICAgfSBlbHNlIGlmICh4cCkge1xuICAgICAgcmV0ID0gJz49JyArIE0gKyAnLicgKyBtICsgJy4wJyArIHByICtcbiAgICAgICAgJyA8JyArIE0gKyAnLicgKyAoK20gKyAxKSArICcuMCcgKyBwclxuICAgIH1cblxuICAgIGRlYnVnKCd4UmFuZ2UgcmV0dXJuJywgcmV0KVxuXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBCZWNhdXNlICogaXMgQU5ELWVkIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoZSBjb21wYXJhdG9yLFxuLy8gYW5kICcnIG1lYW5zIFwiYW55IHZlcnNpb25cIiwganVzdCByZW1vdmUgdGhlICpzIGVudGlyZWx5LlxuZnVuY3Rpb24gcmVwbGFjZVN0YXJzIChjb21wLCBvcHRpb25zKSB7XG4gIGRlYnVnKCdyZXBsYWNlU3RhcnMnLCBjb21wLCBvcHRpb25zKVxuICAvLyBMb29zZW5lc3MgaXMgaWdub3JlZCBoZXJlLiAgc3RhciBpcyBhbHdheXMgYXMgbG9vc2UgYXMgaXQgZ2V0cyFcbiAgcmV0dXJuIGNvbXAudHJpbSgpLnJlcGxhY2Uoc2FmZVJlW3QuU1RBUl0sICcnKVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBzdHJpbmcucmVwbGFjZShyZVt0LkhZUEhFTlJBTkdFXSlcbi8vIE0sIG0sIHBhdGNoLCBwcmVyZWxlYXNlLCBidWlsZFxuLy8gMS4yIC0gMy40LjUgPT4gPj0xLjIuMCA8PTMuNC41XG4vLyAxLjIuMyAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMCBBbnkgMy40Lnggd2lsbCBkb1xuLy8gMS4yIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wXG5mdW5jdGlvbiBoeXBoZW5SZXBsYWNlICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwciwgdGIpIHtcbiAgaWYgKGlzWChmTSkpIHtcbiAgICBmcm9tID0gJydcbiAgfSBlbHNlIGlmIChpc1goZm0pKSB7XG4gICAgZnJvbSA9ICc+PScgKyBmTSArICcuMC4wJ1xuICB9IGVsc2UgaWYgKGlzWChmcCkpIHtcbiAgICBmcm9tID0gJz49JyArIGZNICsgJy4nICsgZm0gKyAnLjAnXG4gIH0gZWxzZSB7XG4gICAgZnJvbSA9ICc+PScgKyBmcm9tXG4gIH1cblxuICBpZiAoaXNYKHRNKSkge1xuICAgIHRvID0gJydcbiAgfSBlbHNlIGlmIChpc1godG0pKSB7XG4gICAgdG8gPSAnPCcgKyAoK3RNICsgMSkgKyAnLjAuMCdcbiAgfSBlbHNlIGlmIChpc1godHApKSB7XG4gICAgdG8gPSAnPCcgKyB0TSArICcuJyArICgrdG0gKyAxKSArICcuMCdcbiAgfSBlbHNlIGlmICh0cHIpIHtcbiAgICB0byA9ICc8PScgKyB0TSArICcuJyArIHRtICsgJy4nICsgdHAgKyAnLScgKyB0cHJcbiAgfSBlbHNlIHtcbiAgICB0byA9ICc8PScgKyB0b1xuICB9XG5cbiAgcmV0dXJuIChmcm9tICsgJyAnICsgdG8pLnRyaW0oKVxufVxuXG4vLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG5SYW5nZS5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uICh2ZXJzaW9uKSB7XG4gIGlmICghdmVyc2lvbikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgIHRyeSB7XG4gICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodGVzdFNldCh0aGlzLnNldFtpXSwgdmVyc2lvbiwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHRlc3RTZXQgKHNldCwgdmVyc2lvbiwgb3B0aW9ucykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2V0W2ldLnRlc3QodmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGlmICh2ZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoICYmICFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgLy8gRmluZCB0aGUgc2V0IG9mIHZlcnNpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gaGF2ZSBwcmVyZWxlYXNlc1xuICAgIC8vIEZvciBleGFtcGxlLCBeMS4yLjMtcHIuMSBkZXN1Z2FycyB0byA+PTEuMi4zLXByLjEgPDIuMC4wXG4gICAgLy8gVGhhdCBzaG91bGQgYWxsb3cgYDEuMi4zLXByLjJgIHRvIHBhc3MuXG4gICAgLy8gSG93ZXZlciwgYDEuMi40LWFscGhhLm5vdHJlYWR5YCBzaG91bGQgTk9UIGJlIGFsbG93ZWQsXG4gICAgLy8gZXZlbiB0aG91Z2ggaXQncyB3aXRoaW4gdGhlIHJhbmdlIHNldCBieSB0aGUgY29tcGFyYXRvcnMuXG4gICAgZm9yIChpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgICAgZGVidWcoc2V0W2ldLnNlbXZlcilcbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyID09PSBBTlkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBhbGxvd2VkID0gc2V0W2ldLnNlbXZlclxuICAgICAgICBpZiAoYWxsb3dlZC5tYWpvciA9PT0gdmVyc2lvbi5tYWpvciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5taW5vciA9PT0gdmVyc2lvbi5taW5vciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5wYXRjaCA9PT0gdmVyc2lvbi5wYXRjaCkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWZXJzaW9uIGhhcyBhIC1wcmUsIGJ1dCBpdCdzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2UgbGlrZS5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydHMuc2F0aXNmaWVzID0gc2F0aXNmaWVzXG5mdW5jdGlvbiBzYXRpc2ZpZXMgKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHJhbmdlLnRlc3QodmVyc2lvbilcbn1cblxuZXhwb3J0cy5tYXhTYXRpc2Z5aW5nID0gbWF4U2F0aXNmeWluZ1xuZnVuY3Rpb24gbWF4U2F0aXNmeWluZyAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSB7XG4gIHZhciBtYXggPSBudWxsXG4gIHZhciBtYXhTViA9IG51bGxcbiAgdHJ5IHtcbiAgICB2YXIgcmFuZ2VPYmogPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICB2ZXJzaW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKHJhbmdlT2JqLnRlc3QodikpIHtcbiAgICAgIC8vIHNhdGlzZmllcyh2LCByYW5nZSwgb3B0aW9ucylcbiAgICAgIGlmICghbWF4IHx8IG1heFNWLmNvbXBhcmUodikgPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbXBhcmUobWF4LCB2LCB0cnVlKVxuICAgICAgICBtYXggPSB2XG4gICAgICAgIG1heFNWID0gbmV3IFNlbVZlcihtYXgsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gbWF4XG59XG5cbmV4cG9ydHMubWluU2F0aXNmeWluZyA9IG1pblNhdGlzZnlpbmdcbmZ1bmN0aW9uIG1pblNhdGlzZnlpbmcgKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykge1xuICB2YXIgbWluID0gbnVsbFxuICB2YXIgbWluU1YgPSBudWxsXG4gIHRyeSB7XG4gICAgdmFyIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1pbiB8fCBtaW5TVi5jb21wYXJlKHYpID09PSAxKSB7XG4gICAgICAgIC8vIGNvbXBhcmUobWluLCB2LCB0cnVlKVxuICAgICAgICBtaW4gPSB2XG4gICAgICAgIG1pblNWID0gbmV3IFNlbVZlcihtaW4sIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gbWluXG59XG5cbmV4cG9ydHMubWluVmVyc2lvbiA9IG1pblZlcnNpb25cbmZ1bmN0aW9uIG1pblZlcnNpb24gKHJhbmdlLCBsb29zZSkge1xuICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgbG9vc2UpXG5cbiAgdmFyIG1pbnZlciA9IG5ldyBTZW1WZXIoJzAuMC4wJylcbiAgaWYgKHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIG1pbnZlciA9IG5ldyBTZW1WZXIoJzAuMC4wLTAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbnVsbFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlLnNldC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBjb21wYXJhdG9ycyA9IHJhbmdlLnNldFtpXVxuXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29tcGFyYXRvcikge1xuICAgICAgLy8gQ2xvbmUgdG8gYXZvaWQgbWFuaXB1bGF0aW5nIHRoZSBjb21wYXJhdG9yJ3Mgc2VtdmVyIG9iamVjdC5cbiAgICAgIHZhciBjb21wdmVyID0gbmV3IFNlbVZlcihjb21wYXJhdG9yLnNlbXZlci52ZXJzaW9uKVxuICAgICAgc3dpdGNoIChjb21wYXJhdG9yLm9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgIGlmIChjb21wdmVyLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb21wdmVyLnBhdGNoKytcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcHZlci5wcmVyZWxlYXNlLnB1c2goMClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcHZlci5yYXcgPSBjb21wdmVyLmZvcm1hdCgpXG4gICAgICAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgIGlmICghbWludmVyIHx8IGd0KG1pbnZlciwgY29tcHZlcikpIHtcbiAgICAgICAgICAgIG1pbnZlciA9IGNvbXB2ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgICAvKiBJZ25vcmUgbWF4aW11bSB2ZXJzaW9ucyAqL1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIG9wZXJhdGlvbjogJyArIGNvbXBhcmF0b3Iub3BlcmF0b3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGlmIChtaW52ZXIgJiYgcmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0cy52YWxpZFJhbmdlID0gdmFsaWRSYW5nZVxuZnVuY3Rpb24gdmFsaWRSYW5nZSAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICAvLyBSZXR1cm4gJyonIGluc3RlYWQgb2YgJycgc28gdGhhdCB0cnV0aGluZXNzIHdvcmtzLlxuICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBpZiBpdCdzIGludmFsaWQgYW55d2F5XG4gICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucykucmFuZ2UgfHwgJyonXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmV4cG9ydHMubHRyID0gbHRyXG5mdW5jdGlvbiBsdHIgKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSB7XG4gIHJldHVybiBvdXRzaWRlKHZlcnNpb24sIHJhbmdlLCAnPCcsIG9wdGlvbnMpXG59XG5cbi8vIERldGVybWluZSBpZiB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBhbGwgdGhlIHZlcnNpb25zIHBvc3NpYmxlIGluIHRoZSByYW5nZS5cbmV4cG9ydHMuZ3RyID0gZ3RyXG5mdW5jdGlvbiBndHIgKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSB7XG4gIHJldHVybiBvdXRzaWRlKHZlcnNpb24sIHJhbmdlLCAnPicsIG9wdGlvbnMpXG59XG5cbmV4cG9ydHMub3V0c2lkZSA9IG91dHNpZGVcbmZ1bmN0aW9uIG91dHNpZGUgKHZlcnNpb24sIHJhbmdlLCBoaWxvLCBvcHRpb25zKSB7XG4gIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuXG4gIHZhciBndGZuLCBsdGVmbiwgbHRmbiwgY29tcCwgZWNvbXBcbiAgc3dpdGNoIChoaWxvKSB7XG4gICAgY2FzZSAnPic6XG4gICAgICBndGZuID0gZ3RcbiAgICAgIGx0ZWZuID0gbHRlXG4gICAgICBsdGZuID0gbHRcbiAgICAgIGNvbXAgPSAnPidcbiAgICAgIGVjb21wID0gJz49J1xuICAgICAgYnJlYWtcbiAgICBjYXNlICc8JzpcbiAgICAgIGd0Zm4gPSBsdFxuICAgICAgbHRlZm4gPSBndGVcbiAgICAgIGx0Zm4gPSBndFxuICAgICAgY29tcCA9ICc8J1xuICAgICAgZWNvbXAgPSAnPD0nXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHByb3ZpZGUgYSBoaWxvIHZhbCBvZiBcIjxcIiBvciBcIj5cIicpXG4gIH1cblxuICAvLyBJZiBpdCBzYXRpc2lmZXMgdGhlIHJhbmdlIGl0IGlzIG5vdCBvdXRzaWRlXG4gIGlmIChzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBGcm9tIG5vdyBvbiwgdmFyaWFibGUgdGVybXMgYXJlIGFzIGlmIHdlJ3JlIGluIFwiZ3RyXCIgbW9kZS5cbiAgLy8gYnV0IG5vdGUgdGhhdCBldmVyeXRoaW5nIGlzIGZsaXBwZWQgZm9yIHRoZSBcImx0clwiIGZ1bmN0aW9uLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGNvbXBhcmF0b3JzID0gcmFuZ2Uuc2V0W2ldXG5cbiAgICB2YXIgaGlnaCA9IG51bGxcbiAgICB2YXIgbG93ID0gbnVsbFxuXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXBhcmF0b3Iuc2VtdmVyID09PSBBTlkpIHtcbiAgICAgICAgY29tcGFyYXRvciA9IG5ldyBDb21wYXJhdG9yKCc+PTAuMC4wJylcbiAgICAgIH1cbiAgICAgIGhpZ2ggPSBoaWdoIHx8IGNvbXBhcmF0b3JcbiAgICAgIGxvdyA9IGxvdyB8fCBjb21wYXJhdG9yXG4gICAgICBpZiAoZ3Rmbihjb21wYXJhdG9yLnNlbXZlciwgaGlnaC5zZW12ZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgIGhpZ2ggPSBjb21wYXJhdG9yXG4gICAgICB9IGVsc2UgaWYgKGx0Zm4oY29tcGFyYXRvci5zZW12ZXIsIGxvdy5zZW12ZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgIGxvdyA9IGNvbXBhcmF0b3JcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSWYgdGhlIGVkZ2UgdmVyc2lvbiBjb21wYXJhdG9yIGhhcyBhIG9wZXJhdG9yIHRoZW4gb3VyIHZlcnNpb25cbiAgICAvLyBpc24ndCBvdXRzaWRlIGl0XG4gICAgaWYgKGhpZ2gub3BlcmF0b3IgPT09IGNvbXAgfHwgaGlnaC5vcGVyYXRvciA9PT0gZWNvbXApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBsb3dlc3QgdmVyc2lvbiBjb21wYXJhdG9yIGhhcyBhbiBvcGVyYXRvciBhbmQgb3VyIHZlcnNpb25cbiAgICAvLyBpcyBsZXNzIHRoYW4gaXQgdGhlbiBpdCBpc24ndCBoaWdoZXIgdGhhbiB0aGUgcmFuZ2VcbiAgICBpZiAoKCFsb3cub3BlcmF0b3IgfHwgbG93Lm9wZXJhdG9yID09PSBjb21wKSAmJlxuICAgICAgICBsdGVmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIGlmIChsb3cub3BlcmF0b3IgPT09IGVjb21wICYmIGx0Zm4odmVyc2lvbiwgbG93LnNlbXZlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnRzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG5mdW5jdGlvbiBwcmVyZWxlYXNlICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBwYXJzZWQgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gKHBhcnNlZCAmJiBwYXJzZWQucHJlcmVsZWFzZS5sZW5ndGgpID8gcGFyc2VkLnByZXJlbGVhc2UgOiBudWxsXG59XG5cbmV4cG9ydHMuaW50ZXJzZWN0cyA9IGludGVyc2VjdHNcbmZ1bmN0aW9uIGludGVyc2VjdHMgKHIxLCByMiwgb3B0aW9ucykge1xuICByMSA9IG5ldyBSYW5nZShyMSwgb3B0aW9ucylcbiAgcjIgPSBuZXcgUmFuZ2UocjIsIG9wdGlvbnMpXG4gIHJldHVybiByMS5pbnRlcnNlY3RzKHIyKVxufVxuXG5leHBvcnRzLmNvZXJjZSA9IGNvZXJjZVxuZnVuY3Rpb24gY29lcmNlICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgcmV0dXJuIHZlcnNpb25cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ251bWJlcicpIHtcbiAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIG1hdGNoID0gbnVsbFxuICBpZiAoIW9wdGlvbnMucnRsKSB7XG4gICAgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKHNhZmVSZVt0LkNPRVJDRV0pXG4gIH0gZWxzZSB7XG4gICAgLy8gRmluZCB0aGUgcmlnaHQtbW9zdCBjb2VyY2libGUgc3RyaW5nIHRoYXQgZG9lcyBub3Qgc2hhcmVcbiAgICAvLyBhIHRlcm1pbnVzIHdpdGggYSBtb3JlIGxlZnQtd2FyZCBjb2VyY2libGUgc3RyaW5nLlxuICAgIC8vIEVnLCAnMS4yLjMuNCcgd2FudHMgdG8gY29lcmNlICcyLjMuNCcsIG5vdCAnMy40JyBvciAnNCdcbiAgICAvL1xuICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc3RyaW5nIGNoZWNraW5nIHdpdGggYSAvZyByZWdleHBcbiAgICAvLyBNYW51YWxseSBzZXQgdGhlIGluZGV4IHNvIGFzIHRvIHBpY2sgdXAgb3ZlcmxhcHBpbmcgbWF0Y2hlcy5cbiAgICAvLyBTdG9wIHdoZW4gd2UgZ2V0IGEgbWF0Y2ggdGhhdCBlbmRzIGF0IHRoZSBzdHJpbmcgZW5kLCBzaW5jZSBub1xuICAgIC8vIGNvZXJjaWJsZSBzdHJpbmcgY2FuIGJlIG1vcmUgcmlnaHQtd2FyZCB3aXRob3V0IHRoZSBzYW1lIHRlcm1pbnVzLlxuICAgIHZhciBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gc2FmZVJlW3QuQ09FUkNFUlRMXS5leGVjKHZlcnNpb24pKSAmJlxuICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgbmV4dC5pbmRleCArIG5leHRbMF0ubGVuZ3RoICE9PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCkge1xuICAgICAgICBtYXRjaCA9IG5leHRcbiAgICAgIH1cbiAgICAgIHNhZmVSZVt0LkNPRVJDRVJUTF0ubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIHNhZmVSZVt0LkNPRVJDRVJUTF0ubGFzdEluZGV4ID0gLTFcbiAgfVxuXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gcGFyc2UobWF0Y2hbMl0gK1xuICAgICcuJyArIChtYXRjaFszXSB8fCAnMCcpICtcbiAgICAnLicgKyAobWF0Y2hbNF0gfHwgJzAnKSwgb3B0aW9ucylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBiYWxhbmNlZDtcbmZ1bmN0aW9uIGJhbGFuY2VkKGEsIGIsIHN0cikge1xuICBpZiAoYSBpbnN0YW5jZW9mIFJlZ0V4cCkgYSA9IG1heWJlTWF0Y2goYSwgc3RyKTtcbiAgaWYgKGIgaW5zdGFuY2VvZiBSZWdFeHApIGIgPSBtYXliZU1hdGNoKGIsIHN0cik7XG5cbiAgdmFyIHIgPSByYW5nZShhLCBiLCBzdHIpO1xuXG4gIHJldHVybiByICYmIHtcbiAgICBzdGFydDogclswXSxcbiAgICBlbmQ6IHJbMV0sXG4gICAgcHJlOiBzdHIuc2xpY2UoMCwgclswXSksXG4gICAgYm9keTogc3RyLnNsaWNlKHJbMF0gKyBhLmxlbmd0aCwgclsxXSksXG4gICAgcG9zdDogc3RyLnNsaWNlKHJbMV0gKyBiLmxlbmd0aClcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWF5YmVNYXRjaChyZWcsIHN0cikge1xuICB2YXIgbSA9IHN0ci5tYXRjaChyZWcpO1xuICByZXR1cm4gbSA/IG1bMF0gOiBudWxsO1xufVxuXG5iYWxhbmNlZC5yYW5nZSA9IHJhbmdlO1xuZnVuY3Rpb24gcmFuZ2UoYSwgYiwgc3RyKSB7XG4gIHZhciBiZWdzLCBiZWcsIGxlZnQsIHJpZ2h0LCByZXN1bHQ7XG4gIHZhciBhaSA9IHN0ci5pbmRleE9mKGEpO1xuICB2YXIgYmkgPSBzdHIuaW5kZXhPZihiLCBhaSArIDEpO1xuICB2YXIgaSA9IGFpO1xuXG4gIGlmIChhaSA+PSAwICYmIGJpID4gMCkge1xuICAgIGlmKGE9PT1iKSB7XG4gICAgICByZXR1cm4gW2FpLCBiaV07XG4gICAgfVxuICAgIGJlZ3MgPSBbXTtcbiAgICBsZWZ0ID0gc3RyLmxlbmd0aDtcblxuICAgIHdoaWxlIChpID49IDAgJiYgIXJlc3VsdCkge1xuICAgICAgaWYgKGkgPT0gYWkpIHtcbiAgICAgICAgYmVncy5wdXNoKGkpO1xuICAgICAgICBhaSA9IHN0ci5pbmRleE9mKGEsIGkgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoYmVncy5sZW5ndGggPT0gMSkge1xuICAgICAgICByZXN1bHQgPSBbIGJlZ3MucG9wKCksIGJpIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWcgPSBiZWdzLnBvcCgpO1xuICAgICAgICBpZiAoYmVnIDwgbGVmdCkge1xuICAgICAgICAgIGxlZnQgPSBiZWc7XG4gICAgICAgICAgcmlnaHQgPSBiaTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpID0gc3RyLmluZGV4T2YoYiwgaSArIDEpO1xuICAgICAgfVxuXG4gICAgICBpID0gYWkgPCBiaSAmJiBhaSA+PSAwID8gYWkgOiBiaTtcbiAgICB9XG5cbiAgICBpZiAoYmVncy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwKICAgICJ2YXIgYmFsYW5jZWQgPSByZXF1aXJlKCdiYWxhbmNlZC1tYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cGFuZFRvcDtcblxudmFyIGVzY1NsYXNoID0gJ1xcMFNMQVNIJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY09wZW4gPSAnXFwwT1BFTicrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NDbG9zZSA9ICdcXDBDTE9TRScrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NDb21tYSA9ICdcXDBDT01NQScrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NQZXJpb2QgPSAnXFwwUEVSSU9EJytNYXRoLnJhbmRvbSgpKydcXDAnO1xuXG5mdW5jdGlvbiBudW1lcmljKHN0cikge1xuICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxMCkgPT0gc3RyXG4gICAgPyBwYXJzZUludChzdHIsIDEwKVxuICAgIDogc3RyLmNoYXJDb2RlQXQoMCk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUJyYWNlcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgnXFxcXFxcXFwnKS5qb2luKGVzY1NsYXNoKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxceycpLmpvaW4oZXNjT3BlbilcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXH0nKS5qb2luKGVzY0Nsb3NlKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcLCcpLmpvaW4oZXNjQ29tbWEpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFwuJykuam9pbihlc2NQZXJpb2QpO1xufVxuXG5mdW5jdGlvbiB1bmVzY2FwZUJyYWNlcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdChlc2NTbGFzaCkuam9pbignXFxcXCcpXG4gICAgICAgICAgICAuc3BsaXQoZXNjT3Blbikuam9pbigneycpXG4gICAgICAgICAgICAuc3BsaXQoZXNjQ2xvc2UpLmpvaW4oJ30nKVxuICAgICAgICAgICAgLnNwbGl0KGVzY0NvbW1hKS5qb2luKCcsJylcbiAgICAgICAgICAgIC5zcGxpdChlc2NQZXJpb2QpLmpvaW4oJy4nKTtcbn1cblxuXG4vLyBCYXNpY2FsbHkganVzdCBzdHIuc3BsaXQoXCIsXCIpLCBidXQgaGFuZGxpbmcgY2FzZXNcbi8vIHdoZXJlIHdlIGhhdmUgbmVzdGVkIGJyYWNlZCBzZWN0aW9ucywgd2hpY2ggc2hvdWxkIGJlXG4vLyB0cmVhdGVkIGFzIGluZGl2aWR1YWwgbWVtYmVycywgbGlrZSB7YSx7YixjfSxkfVxuZnVuY3Rpb24gcGFyc2VDb21tYVBhcnRzKHN0cikge1xuICBpZiAoIXN0cilcbiAgICByZXR1cm4gWycnXTtcblxuICB2YXIgcGFydHMgPSBbXTtcbiAgdmFyIG0gPSBiYWxhbmNlZCgneycsICd9Jywgc3RyKTtcblxuICBpZiAoIW0pXG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnLCcpO1xuXG4gIHZhciBwcmUgPSBtLnByZTtcbiAgdmFyIGJvZHkgPSBtLmJvZHk7XG4gIHZhciBwb3N0ID0gbS5wb3N0O1xuICB2YXIgcCA9IHByZS5zcGxpdCgnLCcpO1xuXG4gIHBbcC5sZW5ndGgtMV0gKz0gJ3snICsgYm9keSArICd9JztcbiAgdmFyIHBvc3RQYXJ0cyA9IHBhcnNlQ29tbWFQYXJ0cyhwb3N0KTtcbiAgaWYgKHBvc3QubGVuZ3RoKSB7XG4gICAgcFtwLmxlbmd0aC0xXSArPSBwb3N0UGFydHMuc2hpZnQoKTtcbiAgICBwLnB1c2guYXBwbHkocCwgcG9zdFBhcnRzKTtcbiAgfVxuXG4gIHBhcnRzLnB1c2guYXBwbHkocGFydHMsIHApO1xuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuZnVuY3Rpb24gZXhwYW5kVG9wKHN0cikge1xuICBpZiAoIXN0cilcbiAgICByZXR1cm4gW107XG5cbiAgLy8gSSBkb24ndCBrbm93IHdoeSBCYXNoIDQuMyBkb2VzIHRoaXMsIGJ1dCBpdCBkb2VzLlxuICAvLyBBbnl0aGluZyBzdGFydGluZyB3aXRoIHt9IHdpbGwgaGF2ZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIHByZXNlcnZlZFxuICAvLyBidXQgKm9ubHkqIGF0IHRoZSB0b3AgbGV2ZWwsIHNvIHt9LGF9YiB3aWxsIG5vdCBleHBhbmQgdG8gYW55dGhpbmcsXG4gIC8vIGJ1dCBhe30sYn1jIHdpbGwgYmUgZXhwYW5kZWQgdG8gW2F9YyxhYmNdLlxuICAvLyBPbmUgY291bGQgYXJndWUgdGhhdCB0aGlzIGlzIGEgYnVnIGluIEJhc2gsIGJ1dCBzaW5jZSB0aGUgZ29hbCBvZlxuICAvLyB0aGlzIG1vZHVsZSBpcyB0byBtYXRjaCBCYXNoJ3MgcnVsZXMsIHdlIGVzY2FwZSBhIGxlYWRpbmcge31cbiAgaWYgKHN0ci5zdWJzdHIoMCwgMikgPT09ICd7fScpIHtcbiAgICBzdHIgPSAnXFxcXHtcXFxcfScgKyBzdHIuc3Vic3RyKDIpO1xuICB9XG5cbiAgcmV0dXJuIGV4cGFuZChlc2NhcGVCcmFjZXMoc3RyKSwgdHJ1ZSkubWFwKHVuZXNjYXBlQnJhY2VzKTtcbn1cblxuZnVuY3Rpb24gZW1icmFjZShzdHIpIHtcbiAgcmV0dXJuICd7JyArIHN0ciArICd9Jztcbn1cbmZ1bmN0aW9uIGlzUGFkZGVkKGVsKSB7XG4gIHJldHVybiAvXi0/MFxcZC8udGVzdChlbCk7XG59XG5cbmZ1bmN0aW9uIGx0ZShpLCB5KSB7XG4gIHJldHVybiBpIDw9IHk7XG59XG5mdW5jdGlvbiBndGUoaSwgeSkge1xuICByZXR1cm4gaSA+PSB5O1xufVxuXG5mdW5jdGlvbiBleHBhbmQoc3RyLCBpc1RvcCkge1xuICB2YXIgZXhwYW5zaW9ucyA9IFtdO1xuXG4gIHZhciBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG4gIGlmICghbSkgcmV0dXJuIFtzdHJdO1xuXG4gIC8vIG5vIG5lZWQgdG8gZXhwYW5kIHByZSwgc2luY2UgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSBmcmVlIG9mIGJyYWNlLXNldHNcbiAgdmFyIHByZSA9IG0ucHJlO1xuICB2YXIgcG9zdCA9IG0ucG9zdC5sZW5ndGhcbiAgICA/IGV4cGFuZChtLnBvc3QsIGZhbHNlKVxuICAgIDogWycnXTtcblxuICBpZiAoL1xcJCQvLnRlc3QobS5wcmUpKSB7ICAgIFxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcG9zdC5sZW5ndGg7IGsrKykge1xuICAgICAgdmFyIGV4cGFuc2lvbiA9IHByZSsgJ3snICsgbS5ib2R5ICsgJ30nICsgcG9zdFtrXTtcbiAgICAgIGV4cGFuc2lvbnMucHVzaChleHBhbnNpb24pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXNOdW1lcmljU2VxdWVuY2UgPSAvXi0/XFxkK1xcLlxcLi0/XFxkKyg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICAgIHZhciBpc0FscGhhU2VxdWVuY2UgPSAvXlthLXpBLVpdXFwuXFwuW2EtekEtWl0oPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICB2YXIgaXNTZXF1ZW5jZSA9IGlzTnVtZXJpY1NlcXVlbmNlIHx8IGlzQWxwaGFTZXF1ZW5jZTtcbiAgICB2YXIgaXNPcHRpb25zID0gbS5ib2R5LmluZGV4T2YoJywnKSA+PSAwO1xuICAgIGlmICghaXNTZXF1ZW5jZSAmJiAhaXNPcHRpb25zKSB7XG4gICAgICAvLyB7YX0sYn1cbiAgICAgIGlmIChtLnBvc3QubWF0Y2goLywuKlxcfS8pKSB7XG4gICAgICAgIHN0ciA9IG0ucHJlICsgJ3snICsgbS5ib2R5ICsgZXNjQ2xvc2UgKyBtLnBvc3Q7XG4gICAgICAgIHJldHVybiBleHBhbmQoc3RyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc3RyXTtcbiAgICB9XG5cbiAgICB2YXIgbjtcbiAgICBpZiAoaXNTZXF1ZW5jZSkge1xuICAgICAgbiA9IG0uYm9keS5zcGxpdCgvXFwuXFwuLyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG4gPSBwYXJzZUNvbW1hUGFydHMobS5ib2R5KTtcbiAgICAgIGlmIChuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyB4e3thLGJ9fXkgPT0+IHh7YX15IHh7Yn15XG4gICAgICAgIG4gPSBleHBhbmQoblswXSwgZmFsc2UpLm1hcChlbWJyYWNlKTtcbiAgICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHBvc3QubWFwKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBtLnByZSArIG5bMF0gKyBwO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgbiBpcyB0aGUgcGFydHMsIGFuZCB3ZSBrbm93IGl0J3Mgbm90IGEgY29tbWEgc2V0XG4gICAgLy8gd2l0aCBhIHNpbmdsZSBlbnRyeS5cbiAgICB2YXIgTjtcblxuICAgIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgICB2YXIgeCA9IG51bWVyaWMoblswXSk7XG4gICAgICB2YXIgeSA9IG51bWVyaWMoblsxXSk7XG4gICAgICB2YXIgd2lkdGggPSBNYXRoLm1heChuWzBdLmxlbmd0aCwgblsxXS5sZW5ndGgpXG4gICAgICB2YXIgaW5jciA9IG4ubGVuZ3RoID09IDNcbiAgICAgICAgPyBNYXRoLmFicyhudW1lcmljKG5bMl0pKVxuICAgICAgICA6IDE7XG4gICAgICB2YXIgdGVzdCA9IGx0ZTtcbiAgICAgIHZhciByZXZlcnNlID0geSA8IHg7XG4gICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICBpbmNyICo9IC0xO1xuICAgICAgICB0ZXN0ID0gZ3RlO1xuICAgICAgfVxuICAgICAgdmFyIHBhZCA9IG4uc29tZShpc1BhZGRlZCk7XG5cbiAgICAgIE4gPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IHg7IHRlc3QoaSwgeSk7IGkgKz0gaW5jcikge1xuICAgICAgICB2YXIgYztcbiAgICAgICAgaWYgKGlzQWxwaGFTZXF1ZW5jZSkge1xuICAgICAgICAgIGMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO1xuICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpXG4gICAgICAgICAgICBjID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYyA9IFN0cmluZyhpKTtcbiAgICAgICAgICBpZiAocGFkKSB7XG4gICAgICAgICAgICB2YXIgbmVlZCA9IHdpZHRoIC0gYy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobmVlZCA+IDApIHtcbiAgICAgICAgICAgICAgdmFyIHogPSBuZXcgQXJyYXkobmVlZCArIDEpLmpvaW4oJzAnKTtcbiAgICAgICAgICAgICAgaWYgKGkgPCAwKVxuICAgICAgICAgICAgICAgIGMgPSAnLScgKyB6ICsgYy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGMgPSB6ICsgYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgTi5wdXNoKGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBOID0gW107XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbi5sZW5ndGg7IGorKykge1xuICAgICAgICBOLnB1c2guYXBwbHkoTiwgZXhwYW5kKG5bal0sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBOLmxlbmd0aDsgaisrKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHBvc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGV4cGFuc2lvbiA9IHByZSArIE5bal0gKyBwb3N0W2tdO1xuICAgICAgICBpZiAoIWlzVG9wIHx8IGlzU2VxdWVuY2UgfHwgZXhwYW5zaW9uKVxuICAgICAgICAgIGV4cGFuc2lvbnMucHVzaChleHBhbnNpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbnNpb25zO1xufVxuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNGdW5jdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFcnJvckNsYXNzID0gdm9pZCAwO1xuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuZXhwb3J0cy5jcmVhdGVFcnJvckNsYXNzID0gY3JlYXRlRXJyb3JDbGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZUVycm9yQ2xhc3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5zdWJzY3JpcHRpb25FcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5VbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5zdWJzY3JpcHRpb25FcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcnJSZW1vdmUgPSB2b2lkIDA7XG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5leHBvcnRzLmFyclJlbW92ZSA9IGFyclJlbW92ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyclJlbW92ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNTdWJzY3JpcHRpb24gPSBleHBvcnRzLkVNUFRZX1NVQlNDUklQVElPTiA9IGV4cG9ydHMuU3Vic2NyaXB0aW9uID0gdm9pZCAwO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL3V0aWwvaXNGdW5jdGlvblwiKTtcbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3JcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi91dGlsL2FyclJlbW92ZVwiKTtcbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcl8xLlVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcl8xLlVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xuZXhwb3J0cy5TdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb247XG5leHBvcnRzLkVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZXhwb3J0cy5pc1N1YnNjcmlwdGlvbiA9IGlzU3Vic2NyaXB0aW9uO1xuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YnNjcmlwdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25maWcgPSB2b2lkIDA7XG5leHBvcnRzLmNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVvdXRQcm92aWRlciA9IHZvaWQgMDtcbmV4cG9ydHMudGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMudGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRUaW1lb3V0LmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gZXhwb3J0cy50aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dFByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcG9ydFVuaGFuZGxlZEVycm9yID0gdm9pZCAwO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL2NvbmZpZ1wiKTtcbnZhciB0aW1lb3V0UHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyXCIpO1xuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyXzEudGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb25VbmhhbmRsZWRFcnJvciA9IGNvbmZpZ18xLmNvbmZpZy5vblVuaGFuZGxlZEVycm9yO1xuICAgICAgICBpZiAob25VbmhhbmRsZWRFcnJvcikge1xuICAgICAgICAgICAgb25VbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLnJlcG9ydFVuaGFuZGxlZEVycm9yID0gcmVwb3J0VW5oYW5kbGVkRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBvcnRVbmhhbmRsZWRFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub29wID0gdm9pZCAwO1xuZnVuY3Rpb24gbm9vcCgpIHsgfVxuZXhwb3J0cy5ub29wID0gbm9vcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vb3AuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlTm90aWZpY2F0aW9uID0gZXhwb3J0cy5uZXh0Tm90aWZpY2F0aW9uID0gZXhwb3J0cy5lcnJvck5vdGlmaWNhdGlvbiA9IGV4cG9ydHMuQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5DT01QTEVURV9OT1RJRklDQVRJT04gPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdDJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpOyB9KSgpO1xuZnVuY3Rpb24gZXJyb3JOb3RpZmljYXRpb24oZXJyb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdFJywgdW5kZWZpbmVkLCBlcnJvcik7XG59XG5leHBvcnRzLmVycm9yTm90aWZpY2F0aW9uID0gZXJyb3JOb3RpZmljYXRpb247XG5mdW5jdGlvbiBuZXh0Tm90aWZpY2F0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbignTicsIHZhbHVlLCB1bmRlZmluZWQpO1xufVxuZXhwb3J0cy5uZXh0Tm90aWZpY2F0aW9uID0gbmV4dE5vdGlmaWNhdGlvbjtcbmZ1bmN0aW9uIGNyZWF0ZU5vdGlmaWNhdGlvbihraW5kLCB2YWx1ZSwgZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVOb3RpZmljYXRpb24gPSBjcmVhdGVOb3RpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FwdHVyZUVycm9yID0gZXhwb3J0cy5lcnJvckNvbnRleHQgPSB2b2lkIDA7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xudmFyIGNvbnRleHQgPSBudWxsO1xuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAgaWYgKGNvbmZpZ18xLmNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7XG4gICAgICAgIHZhciBpc1Jvb3QgPSAhY29udGV4dDtcbiAgICAgICAgaWYgKGlzUm9vdCkge1xuICAgICAgICAgICAgY29udGV4dCA9IHsgZXJyb3JUaHJvd246IGZhbHNlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGNiKCk7XG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IGNvbnRleHQsIGVycm9yVGhyb3duID0gX2EuZXJyb3JUaHJvd24sIGVycm9yID0gX2EuZXJyb3I7XG4gICAgICAgICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cbmV4cG9ydHMuZXJyb3JDb250ZXh0ID0gZXJyb3JDb250ZXh0O1xuZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycikge1xuICAgIGlmIChjb25maWdfMS5jb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQuZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICBjb250ZXh0LmVycm9yID0gZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuY2FwdHVyZUVycm9yID0gY2FwdHVyZUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JDb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FTVBUWV9PQlNFUlZFUiA9IGV4cG9ydHMuU2FmZVN1YnNjcmliZXIgPSBleHBvcnRzLlN1YnNjcmliZXIgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIHJlcG9ydFVuaGFuZGxlZEVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuL3V0aWwvbm9vcFwiKTtcbnZhciBOb3RpZmljYXRpb25GYWN0b3JpZXNfMSA9IHJlcXVpcmUoXCIuL05vdGlmaWNhdGlvbkZhY3Rvcmllc1wiKTtcbnZhciB0aW1lb3V0UHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXJcIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoU3Vic2NyaXB0aW9uXzEuaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZXhwb3J0cy5FTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25GYWN0b3JpZXNfMS5uZXh0Tm90aWZpY2F0aW9uKHZhbHVlKSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25GYWN0b3JpZXNfMS5lcnJvck5vdGlmaWNhdGlvbihlcnIpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uRmFjdG9yaWVzXzEuQ09NUExFVEVfTk9USUZJQ0FUSU9OLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKSk7XG5leHBvcnRzLlN1YnNjcmliZXIgPSBTdWJzY3JpYmVyO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWdfMS5jb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmV4cG9ydHMuU2FmZVN1YnNjcmliZXIgPSBTYWZlU3Vic2NyaWJlcjtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAgaWYgKGNvbmZpZ18xLmNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7XG4gICAgICAgIGVycm9yQ29udGV4dF8xLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcl8xLnJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbmZ1bmN0aW9uIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIG9uU3RvcHBlZE5vdGlmaWNhdGlvbiA9IGNvbmZpZ18xLmNvbmZpZy5vblN0b3BwZWROb3RpZmljYXRpb247XG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uICYmIHRpbWVvdXRQcm92aWRlcl8xLnRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpOyB9KTtcbn1cbmV4cG9ydHMuRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3BfMS5ub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wXzEubm9vcCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpYmVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9ic2VydmFibGUgPSB2b2lkIDA7XG5leHBvcnRzLm9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2YWJsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pZGVudGl0eSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cbmV4cG9ydHMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkZW50aXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBpcGVGcm9tQXJyYXkgPSBleHBvcnRzLnBpcGUgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gcGlwZSgpIHtcbiAgICB2YXIgZm5zID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7XG59XG5leHBvcnRzLnBpcGUgPSBwaXBlO1xuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHlfMS5pZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuZXhwb3J0cy5waXBlRnJvbUFycmF5ID0gcGlwZUZyb21BcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBpcGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9TdWJzY3JpYmVyXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xudmFyIHBpcGVfMSA9IHJlcXVpcmUoXCIuL3V0aWwvcGlwZVwiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTdWJzY3JpYmVyXzEuU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZV8xLnBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5leHBvcnRzLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZ18xLmNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgU3Vic2NyaXB0aW9uXzEuaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub3BlcmF0ZSA9IGV4cG9ydHMuaGFzTGlmdCA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZXhwb3J0cy5oYXNMaWZ0ID0gaGFzTGlmdDtcbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuZXhwb3J0cy5vcGVyYXRlID0gb3BlcmF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpZnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9wZXJhdG9yU3Vic2NyaWJlciA9IGV4cG9ydHMuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyID0gdm9pZCAwO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbmV4cG9ydHMuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5PcGVyYXRvclN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PcGVyYXRvclN1YnNjcmliZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmQ291bnQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJlZkNvdW50KCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgc291cmNlLl9yZWZDb3VudCsrO1xuICAgICAgICB2YXIgcmVmQ291bnRlciA9IE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaGFyZWRDb25uZWN0aW9uID0gc291cmNlLl9jb25uZWN0aW9uO1xuICAgICAgICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoc2hhcmVkQ29ubmVjdGlvbiAmJiAoIWNvbm4gfHwgc2hhcmVkQ29ubmVjdGlvbiA9PT0gY29ubikpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHJlZkNvdW50ZXIpO1xuICAgICAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gc291cmNlLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5yZWZDb3VudCA9IHJlZkNvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmQ291bnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG52YXIgcmVmQ291bnRfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvcmVmQ291bnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbm5lY3RhYmxlT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb25uZWN0YWJsZU9ic2VydmFibGUoc291cmNlLCBzdWJqZWN0RmFjdG9yeSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIF90aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7XG4gICAgICAgIF90aGlzLl9zdWJqZWN0ID0gbnVsbDtcbiAgICAgICAgX3RoaXMuX3JlZkNvdW50ID0gMDtcbiAgICAgICAgX3RoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAobGlmdF8xLmhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgX3RoaXMubGlmdCA9IHNvdXJjZS5saWZ0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSB0aGlzLl9zdWJqZWN0O1xuICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Q7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLl90ZWFyZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcmVmQ291bnQgPSAwO1xuICAgICAgICB2YXIgX2Nvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIF9jb25uZWN0aW9uID09PSBudWxsIHx8IF9jb25uZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247XG4gICAgICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgc3ViamVjdF8xID0gdGhpcy5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICBjb25uZWN0aW9uLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YmplY3RfMSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3RlYXJkb3duKCk7XG4gICAgICAgICAgICAgICAgc3ViamVjdF8xLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3RlYXJkb3duKCk7XG4gICAgICAgICAgICAgICAgc3ViamVjdF8xLmVycm9yKGVycik7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fdGVhcmRvd24oKTsgfSkpKTtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLnJlZkNvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVmQ291bnRfMS5yZWZDb3VudCgpKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gQ29ubmVjdGFibGVPYnNlcnZhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29ubmVjdGFibGVPYnNlcnZhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSB2b2lkIDA7XG5leHBvcnRzLnBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoZXhwb3J0cy5wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IHBlcmZvcm1hbmNlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWVQcm92aWRlciA9IHZvaWQgMDtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG5leHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIgPSB7XG4gICAgc2NoZWR1bGU6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgdmFyIGNhbmNlbCA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgICAgIGNhbmNlbCA9IGRlbGVnYXRlLmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0KGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNhbmNlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7IHJldHVybiBjYW5jZWwgPT09IG51bGwgfHwgY2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYW5jZWwoaGFuZGxlKTsgfSk7XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gZXhwb3J0cy5hbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHx8IGNhbmNlbEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFuaW1hdGlvbkZyYW1lcyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi4vLi4vc2NoZWR1bGVyL3BlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgYW5pbWF0aW9uRnJhbWVQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyXCIpO1xuZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzKHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIHRpbWVzdGFtcFByb3ZpZGVyID8gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgOiBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7XG59XG5leHBvcnRzLmFuaW1hdGlvbkZyYW1lcyA9IGFuaW1hdGlvbkZyYW1lcztcbmZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkodGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBwcm92aWRlciA9IHRpbWVzdGFtcFByb3ZpZGVyIHx8IHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXJfMS5wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyO1xuICAgICAgICB2YXIgc3RhcnQgPSBwcm92aWRlci5ub3coKTtcbiAgICAgICAgdmFyIGlkID0gMDtcbiAgICAgICAgdmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMS5hbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAodGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHByb3ZpZGVyLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBQcm92aWRlciA/IG5vdyA6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWQ6IG5vdyAtIHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcnVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJ1bigpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlcl8xLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxudmFyIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyA9IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuaW1hdGlvbkZyYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYmplY3RVbnN1YnNjcmliZWRFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5vbnltb3VzU3ViamVjdCA9IGV4cG9ydHMuU3ViamVjdCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9PYnNlcnZhYmxlXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHRfMS5lcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dF8xLmVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uXzEuRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5TdWJqZWN0ID0gU3ViamVjdDtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFN1YnNjcmlwdGlvbl8xLkVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnRzLkFub255bW91c1N1YmplY3QgPSBBbm9ueW1vdXNTdWJqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ViamVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmVoYXZpb3JTdWJqZWN0ID0gdm9pZCAwO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuL1N1YmplY3RcIik7XG52YXIgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJlaGF2aW9yU3ViamVjdChfdmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX3ZhbHVlID0gX3ZhbHVlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgICAgICAhc3Vic2NyaXB0aW9uLmNsb3NlZCAmJiBzdWJzY3JpYmVyLm5leHQodGhpcy5fdmFsdWUpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgX3ZhbHVlID0gX2EuX3ZhbHVlO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRocm93bkVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCAodGhpcy5fdmFsdWUgPSB2YWx1ZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEJlaGF2aW9yU3ViamVjdDtcbn0oU3ViamVjdF8xLlN1YmplY3QpKTtcbmV4cG9ydHMuQmVoYXZpb3JTdWJqZWN0ID0gQmVoYXZpb3JTdWJqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmVoYXZpb3JTdWJqZWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHZvaWQgMDtcbmV4cG9ydHMuZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGV4cG9ydHMuZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcGxheVN1YmplY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4vU3ViamVjdFwiKTtcbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVwbGF5U3ViamVjdChfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikge1xuICAgICAgICBpZiAoX2J1ZmZlclNpemUgPT09IHZvaWQgMCkgeyBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OyB9XG4gICAgICAgIGlmIChfd2luZG93VGltZSA9PT0gdm9pZCAwKSB7IF93aW5kb3dUaW1lID0gSW5maW5pdHk7IH1cbiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7IF90aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xLmRhdGVUaW1lc3RhbXBQcm92aWRlcjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IF9idWZmZXJTaXplO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lO1xuICAgICAgICBfdGhpcy5fdGltZXN0YW1wUHJvdmlkZXIgPSBfdGltZXN0YW1wUHJvdmlkZXI7XG4gICAgICAgIF90aGlzLl9idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfd2luZG93VGltZSA9PT0gSW5maW5pdHk7XG4gICAgICAgIF90aGlzLl9idWZmZXJTaXplID0gTWF0aC5tYXgoMSwgX2J1ZmZlclNpemUpO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYS5fdGltZXN0YW1wUHJvdmlkZXIsIF93aW5kb3dUaW1lID0gX2EuX3dpbmRvd1RpbWU7XG4gICAgICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgIV9pbmZpbml0ZVRpbWVXaW5kb3cgJiYgX2J1ZmZlci5wdXNoKF90aW1lc3RhbXBQcm92aWRlci5ub3coKSArIF93aW5kb3dUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIFJlcGxheVN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdywgX2J1ZmZlciA9IF9hLl9idWZmZXI7XG4gICAgICAgIHZhciBjb3B5ID0gX2J1ZmZlci5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcHkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSArPSBfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb3B5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9idWZmZXJTaXplID0gX2EuX2J1ZmZlclNpemUsIF90aW1lc3RhbXBQcm92aWRlciA9IF9hLl90aW1lc3RhbXBQcm92aWRlciwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93O1xuICAgICAgICB2YXIgYWRqdXN0ZWRCdWZmZXJTaXplID0gKF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikgKiBfYnVmZmVyU2l6ZTtcbiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7XG4gICAgICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykge1xuICAgICAgICAgICAgdmFyIG5vdyA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBsYXN0ID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlcltpXSA8PSBub3c7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIGxhc3QgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdCAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0ICsgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZXBsYXlTdWJqZWN0O1xufShTdWJqZWN0XzEuU3ViamVjdCkpO1xuZXhwb3J0cy5SZXBsYXlTdWJqZWN0ID0gUmVwbGF5U3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcGxheVN1YmplY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzeW5jU3ViamVjdCA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9TdWJqZWN0XCIpO1xudmFyIEFzeW5jU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1N1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuX2lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgX2hhc1ZhbHVlID0gX2EuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYS5fdmFsdWUsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgX2lzQ29tcGxldGUgPSBfYS5faXNDb21wbGV0ZTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQgfHwgX2lzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIF9oYXNWYWx1ZSAmJiBzdWJzY3JpYmVyLm5leHQoX3ZhbHVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9oYXNWYWx1ZSA9IF9hLl9oYXNWYWx1ZSwgX3ZhbHVlID0gX2EuX3ZhbHVlLCBfaXNDb21wbGV0ZSA9IF9hLl9pc0NvbXBsZXRlO1xuICAgICAgICBpZiAoIV9pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIF9oYXNWYWx1ZSAmJiBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCBfdmFsdWUpO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTdWJqZWN0O1xufShTdWJqZWN0XzEuU3ViamVjdCkpO1xuZXhwb3J0cy5Bc3luY1N1YmplY3QgPSBBc3luY1N1YmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1N1YmplY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFjdGlvbiA9IHZvaWQgMDtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbikpO1xuZXhwb3J0cy5BY3Rpb24gPSBBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY3Rpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsUHJvdmlkZXIgPSB2b2lkIDA7XG5leHBvcnRzLmludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldEludGVydmFsLmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmludGVydmFsUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckludGVydmFsKSB8fCBjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnZhbFByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0FjdGlvbiA9IHZvaWQgMDtcbnZhciBBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FjdGlvblwiKTtcbnZhciBpbnRlcnZhbFByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcnZhbFByb3ZpZGVyXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJyUmVtb3ZlXCIpO1xudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyXzEuaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXJfMS5pbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbl8xLkFjdGlvbikpO1xuZXhwb3J0cy5Bc3luY0FjdGlvbiA9IEFzeW5jQWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNBY3Rpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVzdFRvb2xzID0gZXhwb3J0cy5JbW1lZGlhdGUgPSB2b2lkIDA7XG52YXIgbmV4dEhhbmRsZSA9IDE7XG52YXIgcmVzb2x2ZWQ7XG52YXIgYWN0aXZlSGFuZGxlcyA9IHt9O1xuZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkge1xuICAgIGlmIChoYW5kbGUgaW4gYWN0aXZlSGFuZGxlcykge1xuICAgICAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGVdO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5JbW1lZGlhdGUgPSB7XG4gICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIGhhbmRsZSA9IG5leHRIYW5kbGUrKztcbiAgICAgICAgYWN0aXZlSGFuZGxlc1toYW5kbGVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUpICYmIGNiKCk7IH0pO1xuICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgIH0sXG4gICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSk7XG4gICAgfSxcbn07XG5leHBvcnRzLlRlc3RUb29scyA9IHtcbiAgICBwZW5kaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhY3RpdmVIYW5kbGVzKS5sZW5ndGg7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUltbWVkaWF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgSW1tZWRpYXRlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9JbW1lZGlhdGVcIik7XG52YXIgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlXzEuSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGVfMS5JbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7XG5leHBvcnRzLmltbWVkaWF0ZVByb3ZpZGVyID0ge1xuICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckltbWVkaWF0ZSkgfHwgY2xlYXJJbW1lZGlhdGUpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVkaWF0ZVByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc2FwQWN0aW9uID0gdm9pZCAwO1xudmFyIEFzeW5jQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9Bc3luY0FjdGlvblwiKTtcbnZhciBpbW1lZGlhdGVQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vaW1tZWRpYXRlUHJvdmlkZXJcIik7XG52YXIgQXNhcEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzYXBBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXNhcEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzYXBBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT09IG51bGwgJiYgZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gaW1tZWRpYXRlUHJvdmlkZXJfMS5pbW1lZGlhdGVQcm92aWRlci5zZXRJbW1lZGlhdGUoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB1bmRlZmluZWQpKSk7XG4gICAgfTtcbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCA/IGRlbGF5ID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCAmJiAoKF9hID0gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWQpICE9PSBpZCkge1xuICAgICAgICAgICAgaW1tZWRpYXRlUHJvdmlkZXJfMS5pbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7XG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHJldHVybiBBc2FwQWN0aW9uO1xufShBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKSk7XG5leHBvcnRzLkFzYXBBY3Rpb24gPSBBc2FwQWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXNhcEFjdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyXCIpO1xudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyXzEuZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcbmV4cG9ydHMuU2NoZWR1bGVyID0gU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2NoZWR1bGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY1NjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuLi9TY2hlZHVsZXJcIik7XG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyXzEuU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyXzEuU2NoZWR1bGVyKSk7XG5leHBvcnRzLkFzeW5jU2NoZWR1bGVyID0gQXN5bmNTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1NjaGVkdWxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXNhcFNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBBc3luY1NjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vQXN5bmNTY2hlZHVsZXJcIik7XG52YXIgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXNhcFNjaGVkdWxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBc2FwU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcFNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcikpO1xuZXhwb3J0cy5Bc2FwU2NoZWR1bGVyID0gQXNhcFNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBTY2hlZHVsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNhcCA9IGV4cG9ydHMuYXNhcFNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBBc2FwQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9Bc2FwQWN0aW9uXCIpO1xudmFyIEFzYXBTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL0FzYXBTY2hlZHVsZXJcIik7XG5leHBvcnRzLmFzYXBTY2hlZHVsZXIgPSBuZXcgQXNhcFNjaGVkdWxlcl8xLkFzYXBTY2hlZHVsZXIoQXNhcEFjdGlvbl8xLkFzYXBBY3Rpb24pO1xuZXhwb3J0cy5hc2FwID0gZXhwb3J0cy5hc2FwU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNhcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3luYyA9IGV4cG9ydHMuYXN5bmNTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzeW5jQWN0aW9uXCIpO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbmV4cG9ydHMuYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKTtcbmV4cG9ydHMuYXN5bmMgPSBleHBvcnRzLmFzeW5jU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN5bmMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlF1ZXVlQWN0aW9uID0gdm9pZCAwO1xudmFyIEFzeW5jQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9Bc3luY0FjdGlvblwiKTtcbnZhciBRdWV1ZUFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXVlQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXVlQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBRdWV1ZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIGRlbGF5ID4gMCB8fCB0aGlzLmNsb3NlZCA/IF9zdXBlci5wcm90b3R5cGUuZXhlY3V0ZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSkgOiB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBRdWV1ZUFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICgoZGVsYXkgIT0gbnVsbCAmJiBkZWxheSA+IDApIHx8IChkZWxheSA9PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmZsdXNoKHRoaXMpO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuICAgIHJldHVybiBRdWV1ZUFjdGlvbjtcbn0oQXN5bmNBY3Rpb25fMS5Bc3luY0FjdGlvbikpO1xuZXhwb3J0cy5RdWV1ZUFjdGlvbiA9IFF1ZXVlQWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVldWVBY3Rpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlF1ZXVlU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbnZhciBRdWV1ZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXVlU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXVlU2NoZWR1bGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBRdWV1ZVNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcikpO1xuZXhwb3J0cy5RdWV1ZVNjaGVkdWxlciA9IFF1ZXVlU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVldWVTY2hlZHVsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucXVldWUgPSBleHBvcnRzLnF1ZXVlU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIFF1ZXVlQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9RdWV1ZUFjdGlvblwiKTtcbnZhciBRdWV1ZVNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vUXVldWVTY2hlZHVsZXJcIik7XG5leHBvcnRzLnF1ZXVlU2NoZWR1bGVyID0gbmV3IFF1ZXVlU2NoZWR1bGVyXzEuUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb25fMS5RdWV1ZUFjdGlvbik7XG5leHBvcnRzLnF1ZXVlID0gZXhwb3J0cy5xdWV1ZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXVlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BbmltYXRpb25GcmFtZUFjdGlvbiA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgYW5pbWF0aW9uRnJhbWVQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vYW5pbWF0aW9uRnJhbWVQcm92aWRlclwiKTtcbnZhciBBbmltYXRpb25GcmFtZUFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT09IG51bGwgJiYgZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlcl8xLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh1bmRlZmluZWQpOyB9KSk7XG4gICAgfTtcbiAgICBBbmltYXRpb25GcmFtZUFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgPyBkZWxheSA+IDAgOiB0aGlzLmRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgKChfYSA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlkKSAhPT0gaWQpIHtcbiAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMS5hbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSBBbmltYXRpb25GcmFtZUFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuaW1hdGlvbkZyYW1lQWN0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BbmltYXRpb25GcmFtZVNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBBc3luY1NjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vQXN5bmNTY2hlZHVsZXJcIik7XG52YXIgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbmltYXRpb25GcmFtZVNjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBbmltYXRpb25GcmFtZVNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHZhciBmbHVzaElkID0gdGhpcy5fc2NoZWR1bGVkO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyO1xufShBc3luY1NjaGVkdWxlcl8xLkFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnRzLkFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbmltYXRpb25GcmFtZVNjaGVkdWxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hbmltYXRpb25GcmFtZSA9IGV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FuaW1hdGlvbkZyYW1lQWN0aW9uXCIpO1xudmFyIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9BbmltYXRpb25GcmFtZVNjaGVkdWxlclwiKTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXJfMS5BbmltYXRpb25GcmFtZVNjaGVkdWxlcihBbmltYXRpb25GcmFtZUFjdGlvbl8xLkFuaW1hdGlvbkZyYW1lQWN0aW9uKTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5pbWF0aW9uRnJhbWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZpcnR1YWxBY3Rpb24gPSBleHBvcnRzLlZpcnR1YWxUaW1lU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIEFzeW5jQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9Bc3luY0FjdGlvblwiKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL0FzeW5jU2NoZWR1bGVyXCIpO1xudmFyIFZpcnR1YWxUaW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlydHVhbFRpbWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVmlydHVhbFRpbWVTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3RvciwgbWF4RnJhbWVzKSB7XG4gICAgICAgIGlmIChzY2hlZHVsZXJBY3Rpb25DdG9yID09PSB2b2lkIDApIHsgc2NoZWR1bGVyQWN0aW9uQ3RvciA9IFZpcnR1YWxBY3Rpb247IH1cbiAgICAgICAgaWYgKG1heEZyYW1lcyA9PT0gdm9pZCAwKSB7IG1heEZyYW1lcyA9IEluZmluaXR5OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlckFjdGlvbkN0b3IsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmZyYW1lOyB9KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7XG4gICAgICAgIF90aGlzLmZyYW1lID0gMDtcbiAgICAgICAgX3RoaXMuaW5kZXggPSAtMTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBWaXJ0dWFsVGltZVNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGFjdGlvbnMgPSBfYS5hY3Rpb25zLCBtYXhGcmFtZXMgPSBfYS5tYXhGcmFtZXM7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdmFyIGFjdGlvbjtcbiAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uZGVsYXkgPD0gbWF4RnJhbWVzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gYWN0aW9uLmRlbGF5O1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyLmZyYW1lVGltZUZhY3RvciA9IDEwO1xuICAgIHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcikpO1xuZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IFZpcnR1YWxUaW1lU2NoZWR1bGVyO1xudmFyIFZpcnR1YWxBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhWaXJ0dWFsQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpcnR1YWxBY3Rpb24oc2NoZWR1bGVyLCB3b3JrLCBpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQgMCkgeyBpbmRleCA9IChzY2hlZHVsZXIuaW5kZXggKz0gMSk7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pbmRleCA9IHNjaGVkdWxlci5pbmRleCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZWxheSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24odGhpcy5zY2hlZHVsZXIsIHRoaXMud29yayk7XG4gICAgICAgICAgICB0aGlzLmFkZChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHRoaXMuZGVsYXkgPSBzY2hlZHVsZXIuZnJhbWUgKyBkZWxheTtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICBhY3Rpb25zLnNvcnQoVmlydHVhbEFjdGlvbi5zb3J0QWN0aW9ucyk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBWaXJ0dWFsQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fZXhlY3V0ZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24uc29ydEFjdGlvbnMgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBpZiAoYS5kZWxheSA9PT0gYi5kZWxheSkge1xuICAgICAgICAgICAgaWYgKGEuaW5kZXggPT09IGIuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGEuaW5kZXggPiBiLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYS5kZWxheSA+IGIuZGVsYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gVmlydHVhbEFjdGlvbjtcbn0oQXN5bmNBY3Rpb25fMS5Bc3luY0FjdGlvbikpO1xuZXhwb3J0cy5WaXJ0dWFsQWN0aW9uID0gVmlydHVhbEFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVtcHR5ID0gZXhwb3J0cy5FTVBUWSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbmV4cG9ydHMuRU1QVFkgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSk7XG5mdW5jdGlvbiBlbXB0eShzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVyID8gZW1wdHlTY2hlZHVsZWQoc2NoZWR1bGVyKSA6IGV4cG9ydHMuRU1QVFk7XG59XG5leHBvcnRzLmVtcHR5ID0gZW1wdHk7XG5mdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9KTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbXB0eS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1NjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuc2NoZWR1bGUpO1xufVxuZXhwb3J0cy5pc1NjaGVkdWxlciA9IGlzU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTY2hlZHVsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9wTnVtYmVyID0gZXhwb3J0cy5wb3BTY2hlZHVsZXIgPSBleHBvcnRzLnBvcFJlc3VsdFNlbGVjdG9yID0gdm9pZCAwO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL2lzU2NoZWR1bGVyXCIpO1xuZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcbn1cbmZ1bmN0aW9uIHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24obGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5wb3BSZXN1bHRTZWxlY3RvciA9IHBvcFJlc3VsdFNlbGVjdG9yO1xuZnVuY3Rpb24gcG9wU2NoZWR1bGVyKGFyZ3MpIHtcbiAgICByZXR1cm4gaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnBvcFNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcjtcbmZ1bmN0aW9uIHBvcE51bWJlcihhcmdzLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIGxhc3QoYXJncykgPT09ICdudW1iZXInID8gYXJncy5wb3AoKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydHMucG9wTnVtYmVyID0gcG9wTnVtYmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJncy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0FycmF5TGlrZSA9IHZvaWQgMDtcbmV4cG9ydHMuaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FycmF5TGlrZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Byb21pc2UgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5leHBvcnRzLmlzUHJvbWlzZSA9IGlzUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUHJvbWlzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0ludGVyb3BPYnNlcnZhYmxlID0gdm9pZCAwO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9zeW1ib2wvb2JzZXJ2YWJsZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0pO1xufVxuZXhwb3J0cy5pc0ludGVyb3BPYnNlcnZhYmxlID0gaXNJbnRlcm9wT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzSW50ZXJvcE9ic2VydmFibGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNBc3luY0l0ZXJhYmxlID0gdm9pZCAwO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZXhwb3J0cy5pc0FzeW5jSXRlcmFibGUgPSBpc0FzeW5jSXRlcmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FzeW5jSXRlcmFibGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZXhwb3J0cy5jcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciA9IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dVbm9ic2VydmFibGVFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pdGVyYXRvciA9IGV4cG9ydHMuZ2V0U3ltYm9sSXRlcmF0b3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG5leHBvcnRzLmdldFN5bWJvbEl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3I7XG5leHBvcnRzLml0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZXJhdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSXRlcmFibGUgPSB2b2lkIDA7XG52YXIgaXRlcmF0b3JfMSA9IHJlcXVpcmUoXCIuLi9zeW1ib2wvaXRlcmF0b3JcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXzEuaXRlcmF0b3JdKTtcbn1cbmV4cG9ydHMuaXNJdGVyYWJsZSA9IGlzSXRlcmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0l0ZXJhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2F3YWl0ID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0KSB8fCBmdW5jdGlvbiAodikgeyByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTsgfVxudmFyIF9fYXN5bmNHZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fYXN5bmNHZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW1MaWtlID0gZXhwb3J0cy5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yID0gdm9pZCAwO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRydWUpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yID0gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcjtcbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cbmV4cG9ydHMuaXNSZWFkYWJsZVN0cmVhbUxpa2UgPSBpc1JlYWRhYmxlU3RyZWFtTGlrZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUmVhZGFibGVTdHJlYW1MaWtlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fYXN5bmNWYWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fYXN5bmNWYWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSA9IGV4cG9ydHMuZnJvbUFzeW5jSXRlcmFibGUgPSBleHBvcnRzLmZyb21JdGVyYWJsZSA9IGV4cG9ydHMuZnJvbVByb21pc2UgPSBleHBvcnRzLmZyb21BcnJheUxpa2UgPSBleHBvcnRzLmZyb21JbnRlcm9wT2JzZXJ2YWJsZSA9IGV4cG9ydHMuaW5uZXJGcm9tID0gdm9pZCAwO1xudmFyIGlzQXJyYXlMaWtlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0FycmF5TGlrZVwiKTtcbnZhciBpc1Byb21pc2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzUHJvbWlzZVwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0ludGVyb3BPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlXCIpO1xudmFyIGlzQXN5bmNJdGVyYWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNBc3luY0l0ZXJhYmxlXCIpO1xudmFyIHRocm93VW5vYnNlcnZhYmxlRXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3JcIik7XG52YXIgaXNJdGVyYWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJdGVyYWJsZVwiKTtcbnZhciBpc1JlYWRhYmxlU3RyZWFtTGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2VcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbnZhciByZXBvcnRVbmhhbmRsZWRFcnJvcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3JcIik7XG52YXIgb2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZV8xLmlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2VfMS5pc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlXzEuaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlXzEuaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZV8xLmlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2VfMS5pc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyB0aHJvd1Vub2JzZXJ2YWJsZUVycm9yXzEuY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZXhwb3J0cy5pbm5lckZyb20gPSBpbm5lckZyb207XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVfMS5vYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21JbnRlcm9wT2JzZXJ2YWJsZSA9IGZyb21JbnRlcm9wT2JzZXJ2YWJsZTtcbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZnJvbUFycmF5TGlrZSA9IGZyb21BcnJheUxpa2U7XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3JfMS5yZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21Qcm9taXNlID0gZnJvbVByb21pc2U7XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZnJvbUl0ZXJhYmxlID0gZnJvbUl0ZXJhYmxlO1xuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tQXN5bmNJdGVyYWJsZSA9IGZyb21Bc3luY0l0ZXJhYmxlO1xuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpc1JlYWRhYmxlU3RyZWFtTGlrZV8xLnJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmV4cG9ydHMuZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSA9IGZyb21SZWFkYWJsZVN0cmVhbUxpa2U7XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlubmVyRnJvbS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leGVjdXRlU2NoZWR1bGUgPSB2b2lkIDA7XG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLmV4ZWN1dGVTY2hlZHVsZSA9IGV4ZWN1dGVTY2hlZHVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWN1dGVTY2hlZHVsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vYnNlcnZlT24gPSB2b2lkIDA7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9LCBkZWxheSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgZGVsYXkpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0sIGRlbGF5KTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5vYnNlcnZlT24gPSBvYnNlcnZlT247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3Vic2NyaWJlT24gPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsgfSwgZGVsYXkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc3Vic2NyaWJlT24gPSBzdWJzY3JpYmVPbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliZU9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjaGVkdWxlT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBvYnNlcnZlT25fMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uXCIpO1xudmFyIHN1YnNjcmliZU9uXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL3N1YnNjcmliZU9uXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uXzEuc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uXzEub2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xufVxuZXhwb3J0cy5zY2hlZHVsZU9ic2VydmFibGUgPSBzY2hlZHVsZU9ic2VydmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZU9ic2VydmFibGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVQcm9taXNlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgc3Vic2NyaWJlT25fMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5mdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT25fMS5vYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNjaGVkdWxlUHJvbWlzZSA9IHNjaGVkdWxlUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlUHJvbWlzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2hlZHVsZUFycmF5ID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVBcnJheShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGkgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChpbnB1dFtpKytdKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zY2hlZHVsZUFycmF5ID0gc2NoZWR1bGVBcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlQXJyYXkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVJdGVyYWJsZSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZShcIi4uL3N5bWJvbC9pdGVyYXRvclwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIGV4ZWN1dGVTY2hlZHVsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaXRlcmF0b3I7XG4gICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yID0gaW5wdXRbaXRlcmF0b3JfMS5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBkb25lO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGl0ZXJhdG9yLm5leHQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDAsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGl0ZXJhdG9yID09PSBudWxsIHx8IGl0ZXJhdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVyYXRvci5yZXR1cm4pICYmIGl0ZXJhdG9yLnJldHVybigpOyB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5zY2hlZHVsZUl0ZXJhYmxlID0gc2NoZWR1bGVJdGVyYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlSXRlcmFibGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVBc3luY0l0ZXJhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGV4ZWN1dGVTY2hlZHVsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXRlcmFibGUgY2Fubm90IGJlIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDAsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVBc3luY0l0ZXJhYmxlID0gc2NoZWR1bGVBc3luY0l0ZXJhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlID0gdm9pZCAwO1xudmFyIHNjaGVkdWxlQXN5bmNJdGVyYWJsZV8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVBc3luY0l0ZXJhYmxlXCIpO1xudmFyIGlzUmVhZGFibGVTdHJlYW1MaWtlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZVwiKTtcbmZ1bmN0aW9uIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlXzEuc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlzUmVhZGFibGVTdHJlYW1MaWtlXzEucmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihpbnB1dCksIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLnNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlID0gc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2hlZHVsZWQgPSB2b2lkIDA7XG52YXIgc2NoZWR1bGVPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZU9ic2VydmFibGVcIik7XG52YXIgc2NoZWR1bGVQcm9taXNlXzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZVByb21pc2VcIik7XG52YXIgc2NoZWR1bGVBcnJheV8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVBcnJheVwiKTtcbnZhciBzY2hlZHVsZUl0ZXJhYmxlXzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZUl0ZXJhYmxlXCIpO1xudmFyIHNjaGVkdWxlQXN5bmNJdGVyYWJsZV8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVBc3luY0l0ZXJhYmxlXCIpO1xudmFyIGlzSW50ZXJvcE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzSW50ZXJvcE9ic2VydmFibGVcIik7XG52YXIgaXNQcm9taXNlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1Byb21pc2VcIik7XG52YXIgaXNBcnJheUxpa2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXJyYXlMaWtlXCIpO1xudmFyIGlzSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzSXRlcmFibGVcIik7XG52YXIgaXNBc3luY0l0ZXJhYmxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0FzeW5jSXRlcmFibGVcIik7XG52YXIgdGhyb3dVbm9ic2VydmFibGVFcnJvcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvclwiKTtcbnZhciBpc1JlYWRhYmxlU3RyZWFtTGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2VcIik7XG52YXIgc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2VfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZV8xLmlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVPYnNlcnZhYmxlXzEuc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZV8xLmlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXlfMS5zY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2VfMS5pc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlXzEuc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGVfMS5pc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlXzEuc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlXzEuaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUl0ZXJhYmxlXzEuc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2VfMS5pc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZV8xLnNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IHRocm93VW5vYnNlcnZhYmxlRXJyb3JfMS5jcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5leHBvcnRzLnNjaGVkdWxlZCA9IHNjaGVkdWxlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tID0gdm9pZCAwO1xudmFyIHNjaGVkdWxlZF8xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlZC9zY2hlZHVsZWRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBmcm9tKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVyID8gc2NoZWR1bGVkXzEuc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIDogaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGlucHV0KTtcbn1cbmV4cG9ydHMuZnJvbSA9IGZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9mID0gdm9pZCAwO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbmZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gYXJnc18xLnBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICByZXR1cm4gZnJvbV8xLmZyb20oYXJncywgc2NoZWR1bGVyKTtcbn1cbmV4cG9ydHMub2YgPSBvZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRocm93RXJyb3IgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShzY2hlZHVsZXIgPyBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGluaXQsIDAsIHN1YnNjcmliZXIpOyB9IDogaW5pdCk7XG59XG5leHBvcnRzLnRocm93RXJyb3IgPSB0aHJvd0Vycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vYnNlcnZlTm90aWZpY2F0aW9uID0gZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBleHBvcnRzLk5vdGlmaWNhdGlvbktpbmQgPSB2b2lkIDA7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgb2ZfMSA9IHJlcXVpcmUoXCIuL29ic2VydmFibGUvb2ZcIik7XG52YXIgdGhyb3dFcnJvcl8xID0gcmVxdWlyZShcIi4vb2JzZXJ2YWJsZS90aHJvd0Vycm9yXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL3V0aWwvaXNGdW5jdGlvblwiKTtcbnZhciBOb3RpZmljYXRpb25LaW5kO1xuKGZ1bmN0aW9uIChOb3RpZmljYXRpb25LaW5kKSB7XG4gICAgTm90aWZpY2F0aW9uS2luZFtcIk5FWFRcIl0gPSBcIk5cIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiRVJST1JcIl0gPSBcIkVcIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiQ09NUExFVEVcIl0gPSBcIkNcIjtcbn0pKE5vdGlmaWNhdGlvbktpbmQgPSBleHBvcnRzLk5vdGlmaWNhdGlvbktpbmQgfHwgKGV4cG9ydHMuTm90aWZpY2F0aW9uS2luZCA9IHt9KSk7XG52YXIgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24oa2luZCwgdmFsdWUsIGVycm9yKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0ga2luZCA9PT0gJ04nO1xuICAgIH1cbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgZXJyb3JIYW5kbGVyLCBjb21wbGV0ZUhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywga2luZCA9IF9hLmtpbmQsIHZhbHVlID0gX2EudmFsdWUsIGVycm9yID0gX2EuZXJyb3I7XG4gICAgICAgIHJldHVybiBraW5kID09PSAnTicgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUpIDoga2luZCA9PT0gJ0UnID8gZXJyb3JIYW5kbGVyID09PSBudWxsIHx8IGVycm9ySGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JIYW5kbGVyKGVycm9yKSA6IGNvbXBsZXRlSGFuZGxlciA9PT0gbnVsbCB8fCBjb21wbGV0ZUhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRlSGFuZGxlcigpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiAobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbigoX2EgPSBuZXh0T3JPYnNlcnZlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpXG4gICAgICAgICAgICA/IHRoaXMub2JzZXJ2ZShuZXh0T3JPYnNlcnZlcilcbiAgICAgICAgICAgIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBraW5kID0gX2Eua2luZCwgdmFsdWUgPSBfYS52YWx1ZSwgZXJyb3IgPSBfYS5lcnJvcjtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICdOJ1xuICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgIG9mXzEub2YodmFsdWUpXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAga2luZCA9PT0gJ0UnXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JfMS50aHJvd0Vycm9yKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yOyB9KVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kID09PSAnQydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5XzEuRU1QVFlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCBcIiArIGtpbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbignTicsIHZhbHVlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycik7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb247XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKCdDJyk7XG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbjtcbn0oKSk7XG5leHBvcnRzLk5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvbjtcbmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIHZhciBfZCA9IG5vdGlmaWNhdGlvbiwga2luZCA9IF9kLmtpbmQsIHZhbHVlID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7XG4gICAgaWYgKHR5cGVvZiBraW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyBcImtpbmRcIicpO1xuICAgIH1cbiAgICBraW5kID09PSAnTicgPyAoX2EgPSBvYnNlcnZlci5uZXh0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvYnNlcnZlciwgdmFsdWUpIDoga2luZCA9PT0gJ0UnID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpO1xufVxuZXhwb3J0cy5vYnNlcnZlTm90aWZpY2F0aW9uID0gb2JzZXJ2ZU5vdGlmaWNhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vdGlmaWNhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc09ic2VydmFibGUgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgKG9iaiBpbnN0YW5jZW9mIE9ic2VydmFibGVfMS5PYnNlcnZhYmxlIHx8IChpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYmoubGlmdCkgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JqLnN1YnNjcmliZSkpKTtcbn1cbmV4cG9ydHMuaXNPYnNlcnZhYmxlID0gaXNPYnNlcnZhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNPYnNlcnZhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVtcHR5RXJyb3IgPSB2b2lkIDA7XG52YXIgY3JlYXRlRXJyb3JDbGFzc18xID0gcmVxdWlyZShcIi4vY3JlYXRlRXJyb3JDbGFzc1wiKTtcbmV4cG9ydHMuRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RW1wdHlFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sYXN0VmFsdWVGcm9tID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuL3V0aWwvRW1wdHlFcnJvclwiKTtcbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICB2YXIgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGFzdFZhbHVlRnJvbSA9IGxhc3RWYWx1ZUZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYXN0VmFsdWVGcm9tLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpcnN0VmFsdWVGcm9tID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuL3V0aWwvRW1wdHlFcnJvclwiKTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9TdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICB2YXIgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU3Vic2NyaWJlcl8xLlNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3JfMS5FbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5maXJzdFZhbHVlRnJvbSA9IGZpcnN0VmFsdWVGcm9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmlyc3RWYWx1ZUZyb20uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSB2b2lkIDA7XG52YXIgY3JlYXRlRXJyb3JDbGFzc18xID0gcmVxdWlyZShcIi4vY3JlYXRlRXJyb3JDbGFzc1wiKTtcbmV4cG9ydHMuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnYXJndW1lbnQgb3V0IG9mIHJhbmdlJztcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bcmd1bWVudE91dE9mUmFuZ2VFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob3RGb3VuZEVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnTm90Rm91bmRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm90Rm91bmRFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXF1ZW5jZUVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLlNlcXVlbmNlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFNlcXVlbmNlRXJyb3JJbXBsKG1lc3NhZ2UpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnU2VxdWVuY2VFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VxdWVuY2VFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkRGF0ZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuZXhwb3J0cy5pc1ZhbGlkRGF0ZSA9IGlzVmFsaWREYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNEYXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzRGF0ZV8xLmlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgIT09IG51bGwgJiYgc2NoZWR1bGVyQXJnICE9PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgOiBhc3luY18xLmFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0O1xuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IGV4cG9ydHMuVGltZW91dEVycm9yKGluZm8pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXAgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG1hcChwcm9qZWN0LCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocHJvamVjdC5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCsrKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWFwID0gbWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXBPbmVPck1hbnlBcmdzID0gdm9pZCAwO1xudmFyIG1hcF8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9tYXBcIik7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBjYWxsT3JBcHBseShmbiwgYXJncykge1xuICAgIHJldHVybiBpc0FycmF5KGFyZ3MpID8gZm4uYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKSA6IGZuKGFyZ3MpO1xufVxuZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikge1xuICAgIHJldHVybiBtYXBfMS5tYXAoZnVuY3Rpb24gKGFyZ3MpIHsgcmV0dXJuIGNhbGxPckFwcGx5KGZuLCBhcmdzKTsgfSk7XG59XG5leHBvcnRzLm1hcE9uZU9yTWFueUFyZ3MgPSBtYXBPbmVPck1hbnlBcmdzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwT25lT3JNYW55QXJncy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmluZENhbGxiYWNrSW50ZXJuYWxzID0gdm9pZCAwO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1NjaGVkdWxlclwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBzdWJzY3JpYmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9zdWJzY3JpYmVPblwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQXN5bmNTdWJqZWN0XCIpO1xuZnVuY3Rpb24gYmluZENhbGxiYWNrSW50ZXJuYWxzKGlzTm9kZVN0eWxlLCBjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMoaXNOb2RlU3R5bGUsIGNhbGxiYWNrRnVuYywgc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgICAgICAuYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwT25lT3JNYW55QXJnc18xLm1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFscyhpc05vZGVTdHlsZSwgY2FsbGJhY2tGdW5jKVxuICAgICAgICAgICAgICAgIC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgICAgIC5waXBlKHN1YnNjcmliZU9uXzEuc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uXzEub2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdCgpO1xuICAgICAgICB2YXIgdW5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBzdWJzID0gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBpZiAodW5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgaXNBc3luY18xID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29tcGxldGVfMSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrRnVuYy5hcHBseShfdGhpcywgX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpLCBbXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGVTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXN1bHRzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgxIDwgcmVzdWx0cy5sZW5ndGggPyByZXN1bHRzIDogcmVzdWx0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBsZXRlXzEgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVfMSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzQXN5bmNfMSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VicztcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuYmluZENhbGxiYWNrSW50ZXJuYWxzID0gYmluZENhbGxiYWNrSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrSW50ZXJuYWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJpbmRDYWxsYmFjayA9IHZvaWQgMDtcbnZhciBiaW5kQ2FsbGJhY2tJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL2JpbmRDYWxsYmFja0ludGVybmFsc1wiKTtcbmZ1bmN0aW9uIGJpbmRDYWxsYmFjayhjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gYmluZENhbGxiYWNrSW50ZXJuYWxzXzEuYmluZENhbGxiYWNrSW50ZXJuYWxzKGZhbHNlLCBjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpO1xufVxuZXhwb3J0cy5iaW5kQ2FsbGJhY2sgPSBiaW5kQ2FsbGJhY2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iaW5kQ2FsbGJhY2suanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmluZE5vZGVDYWxsYmFjayA9IHZvaWQgMDtcbnZhciBiaW5kQ2FsbGJhY2tJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL2JpbmRDYWxsYmFja0ludGVybmFsc1wiKTtcbmZ1bmN0aW9uIGJpbmROb2RlQ2FsbGJhY2soY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFsc18xLmJpbmRDYWxsYmFja0ludGVybmFscyh0cnVlLCBjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpO1xufVxuZXhwb3J0cy5iaW5kTm9kZUNhbGxiYWNrID0gYmluZE5vZGVDYWxsYmFjaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJpbmROb2RlQ2FsbGJhY2suanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXJnc0FyZ0FycmF5T3JPYmplY3QgPSB2b2lkIDA7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgZ2V0S2V5cyA9IE9iamVjdC5rZXlzO1xuZnVuY3Rpb24gYXJnc0FyZ0FycmF5T3JPYmplY3QoYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgZmlyc3RfMSA9IGFyZ3NbMF07XG4gICAgICAgIGlmIChpc0FycmF5KGZpcnN0XzEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBhcmdzOiBmaXJzdF8xLCBrZXlzOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUE9KTyhmaXJzdF8xKSkge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKGZpcnN0XzEpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhcmdzOiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmaXJzdF8xW2tleV07IH0pLFxuICAgICAgICAgICAgICAgIGtleXM6IGtleXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFyZ3M6IGFyZ3MsIGtleXM6IG51bGwgfTtcbn1cbmV4cG9ydHMuYXJnc0FyZ0FycmF5T3JPYmplY3QgPSBhcmdzQXJnQXJyYXlPck9iamVjdDtcbmZ1bmN0aW9uIGlzUE9KTyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGdldFByb3RvdHlwZU9mKG9iaikgPT09IG9iamVjdFByb3RvO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJnc0FyZ0FycmF5T3JPYmplY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlT2JqZWN0ID0gdm9pZCAwO1xuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykge1xuICAgIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXksIGkpIHsgcmV0dXJuICgocmVzdWx0W2tleV0gPSB2YWx1ZXNbaV0pLCByZXN1bHQpOyB9LCB7fSk7XG59XG5leHBvcnRzLmNyZWF0ZU9iamVjdCA9IGNyZWF0ZU9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZU9iamVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb21iaW5lTGF0ZXN0SW5pdCA9IGV4cG9ydHMuY29tYmluZUxhdGVzdCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBhcmdzQXJnQXJyYXlPck9iamVjdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3RcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGNyZWF0ZU9iamVjdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvY3JlYXRlT2JqZWN0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5mdW5jdGlvbiBjb21iaW5lTGF0ZXN0KCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gYXJnc18xLnBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBhcmdzXzEucG9wUmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gICAgdmFyIF9hID0gYXJnc0FyZ0FycmF5T3JPYmplY3RfMS5hcmdzQXJnQXJyYXlPck9iamVjdChhcmdzKSwgb2JzZXJ2YWJsZXMgPSBfYS5hcmdzLCBrZXlzID0gX2Eua2V5cztcbiAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmcm9tXzEuZnJvbShbXSwgc2NoZWR1bGVyKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShjb21iaW5lTGF0ZXN0SW5pdChvYnNlcnZhYmxlcywgc2NoZWR1bGVyLCBrZXlzXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZXMpIHsgcmV0dXJuIGNyZWF0ZU9iamVjdF8xLmNyZWF0ZU9iamVjdChrZXlzLCB2YWx1ZXMpOyB9XG4gICAgICAgIDpcbiAgICAgICAgICAgIGlkZW50aXR5XzEuaWRlbnRpdHkpKTtcbiAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IgPyByZXN1bHQucGlwZShtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpIDogcmVzdWx0O1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gY29tYmluZUxhdGVzdDtcbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3RJbml0KG9ic2VydmFibGVzLCBzY2hlZHVsZXIsIHZhbHVlVHJhbnNmb3JtKSB7XG4gICAgaWYgKHZhbHVlVHJhbnNmb3JtID09PSB2b2lkIDApIHsgdmFsdWVUcmFuc2Zvcm0gPSBpZGVudGl0eV8xLmlkZW50aXR5OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbGVuZ3RoID0gb2JzZXJ2YWJsZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IGxlbmd0aDtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmdGaXJzdFZhbHVlcyA9IGxlbmd0aDtcbiAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICBtYXliZVNjaGVkdWxlKHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gZnJvbV8xLmZyb20ob2JzZXJ2YWJsZXNbaV0sIHNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNGaXJzdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0ZpcnN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNGaXJzdFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdGaXJzdFZhbHVlcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdGaXJzdFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZVRyYW5zZm9ybSh2YWx1ZXMuc2xpY2UoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS0tYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSwgc3Vic2NyaWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1YnNjcmliZXIpO1xuICAgIH07XG59XG5leHBvcnRzLmNvbWJpbmVMYXRlc3RJbml0ID0gY29tYmluZUxhdGVzdEluaXQ7XG5mdW5jdGlvbiBtYXliZVNjaGVkdWxlKHNjaGVkdWxlciwgZXhlY3V0ZSwgc3Vic2NyaXB0aW9uKSB7XG4gICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIGV4ZWN1dGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXhlY3V0ZSgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VJbnRlcm5hbHMgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kLCBpbm5lclN1YlNjaGVkdWxlciwgYWRkaXRpb25hbEZpbmFsaXplcikge1xuICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICB2YXIgYWN0aXZlID0gMDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIubGVuZ3RoICYmICFhY3RpdmUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG91dGVyTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKGFjdGl2ZSA8IGNvbmN1cnJlbnQgPyBkb0lubmVyU3ViKHZhbHVlKSA6IGJ1ZmZlci5wdXNoKHZhbHVlKSk7IH07XG4gICAgdmFyIGRvSW5uZXJTdWIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgZXhwYW5kICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIGFjdGl2ZSsrO1xuICAgICAgICB2YXIgaW5uZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgaW5kZXgrKykpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIG9uQmVmb3JlTmV4dCA9PT0gbnVsbCB8fCBvbkJlZm9yZU5leHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmVmb3JlTmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleHBhbmQpIHtcbiAgICAgICAgICAgICAgICBvdXRlck5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlubmVyQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCAmJiBhY3RpdmUgPCBjb25jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG91dGVyTmV4dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTtcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUludGVybmFscyA9IG1lcmdlSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VJbnRlcm5hbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VNYXAgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBtZXJnZUludGVybmFsc18xID0gcmVxdWlyZShcIi4vbWVyZ2VJbnRlcm5hbHNcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIG1lcmdlTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbiAoYSwgaSkgeyByZXR1cm4gbWFwXzEubWFwKGZ1bmN0aW9uIChiLCBpaSkgeyByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYSwgYiwgaSwgaWkpOyB9KShpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdChhLCBpKSkpOyB9LCBjb25jdXJyZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7IHJldHVybiBtZXJnZUludGVybmFsc18xLm1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCk7IH0pO1xufVxuZXhwb3J0cy5tZXJnZU1hcCA9IG1lcmdlTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VBbGwgPSB2b2lkIDA7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoXCIuL21lcmdlTWFwXCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIG1lcmdlQWxsKGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBJbmZpbml0eTsgfVxuICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGlkZW50aXR5XzEuaWRlbnRpdHksIGNvbmN1cnJlbnQpO1xufVxuZXhwb3J0cy5tZXJnZUFsbCA9IG1lcmdlQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VBbGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0QWxsID0gdm9pZCAwO1xudmFyIG1lcmdlQWxsXzEgPSByZXF1aXJlKFwiLi9tZXJnZUFsbFwiKTtcbmZ1bmN0aW9uIGNvbmNhdEFsbCgpIHtcbiAgICByZXR1cm4gbWVyZ2VBbGxfMS5tZXJnZUFsbCgxKTtcbn1cbmV4cG9ydHMuY29uY2F0QWxsID0gY29uY2F0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0QWxsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IHZvaWQgMDtcbnZhciBjb25jYXRBbGxfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvY29uY2F0QWxsXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdEFsbF8xLmNvbmNhdEFsbCgpKGZyb21fMS5mcm9tKGFyZ3MsIGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncykpKTtcbn1cbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmVyID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4vaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gZGVmZXIob2JzZXJ2YWJsZUZhY3RvcnkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShvYnNlcnZhYmxlRmFjdG9yeSgpKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmVyID0gZGVmZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25uZWN0YWJsZSA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBkZWZlcl8xID0gcmVxdWlyZShcIi4vZGVmZXJcIik7XG52YXIgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgY29ubmVjdG9yOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTsgfSxcbiAgICByZXNldE9uRGlzY29ubmVjdDogdHJ1ZSxcbn07XG5mdW5jdGlvbiBjb25uZWN0YWJsZShzb3VyY2UsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSBERUZBVUxUX0NPTkZJRzsgfVxuICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICB2YXIgY29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvciwgX2EgPSBjb25maWcucmVzZXRPbkRpc2Nvbm5lY3QsIHJlc2V0T25EaXNjb25uZWN0ID0gX2EgPT09IHZvaWQgMCA/IHRydWUgOiBfYTtcbiAgICB2YXIgc3ViamVjdCA9IGNvbm5lY3RvcigpO1xuICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xuICAgIHJlc3VsdC5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24gfHwgY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkZWZlcl8xLmRlZmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZTsgfSkuc3Vic2NyaWJlKHN1YmplY3QpO1xuICAgICAgICAgICAgaWYgKHJlc2V0T25EaXNjb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHN1YmplY3QgPSBjb25uZWN0b3IoKSk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuY29ubmVjdGFibGUgPSBjb25uZWN0YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbm5lY3RhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcmtKb2luID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGFyZ3NBcmdBcnJheU9yT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdFwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBjcmVhdGVPYmplY3RfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NyZWF0ZU9iamVjdFwiKTtcbmZ1bmN0aW9uIGZvcmtKb2luKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBhcmdzXzEucG9wUmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gICAgdmFyIF9hID0gYXJnc0FyZ0FycmF5T3JPYmplY3RfMS5hcmdzQXJnQXJyYXlPck9iamVjdChhcmdzKSwgc291cmNlcyA9IF9hLmFyZ3MsIGtleXMgPSBfYS5rZXlzO1xuICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0NvbXBsZXRpb25zID0gbGVuZ3RoO1xuICAgICAgICB2YXIgcmVtYWluaW5nRW1pc3Npb25zID0gbGVuZ3RoO1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChzb3VyY2VJbmRleCkge1xuICAgICAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlc1tzb3VyY2VJbmRleF0pLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0VtaXNzaW9ucy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZXNbc291cmNlSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1haW5pbmdDb21wbGV0aW9ucy0tOyB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0NvbXBsZXRpb25zIHx8ICFoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0VtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGtleXMgPyBjcmVhdGVPYmplY3RfMS5jcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKSA6IHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJbmRleCA8IGxlbmd0aDsgc291cmNlSW5kZXgrKykge1xuICAgICAgICAgICAgX2xvb3BfMShzb3VyY2VJbmRleCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IgPyByZXN1bHQucGlwZShtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpIDogcmVzdWx0O1xufVxuZXhwb3J0cy5mb3JrSm9pbiA9IGZvcmtKb2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ya0pvaW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUV2ZW50ID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL21lcmdlTWFwXCIpO1xudmFyIGlzQXJyYXlMaWtlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0FycmF5TGlrZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIG1hcE9uZU9yTWFueUFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL21hcE9uZU9yTWFueUFyZ3NcIik7XG52YXIgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbJ2FkZExpc3RlbmVyJywgJ3JlbW92ZUxpc3RlbmVyJ107XG52YXIgZXZlbnRUYXJnZXRNZXRob2RzID0gWydhZGRFdmVudExpc3RlbmVyJywgJ3JlbW92ZUV2ZW50TGlzdGVuZXInXTtcbnZhciBqcXVlcnlNZXRob2RzID0gWydvbicsICdvZmYnXTtcbmZ1bmN0aW9uIGZyb21FdmVudCh0YXJnZXQsIGV2ZW50TmFtZSwgb3B0aW9ucywgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudCh0YXJnZXQsIGV2ZW50TmFtZSwgb3B0aW9ucykucGlwZShtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpO1xuICAgIH1cbiAgICB2YXIgX2EgPSBfX3JlYWQoaXNFdmVudFRhcmdldCh0YXJnZXQpXG4gICAgICAgID8gZXZlbnRUYXJnZXRNZXRob2RzLm1hcChmdW5jdGlvbiAobWV0aG9kTmFtZSkgeyByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIHRhcmdldFttZXRob2ROYW1lXShldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpOyB9OyB9KVxuICAgICAgICA6XG4gICAgICAgICAgICBpc05vZGVTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpXG4gICAgICAgICAgICAgICAgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKVxuICAgICAgICAgICAgICAgIDogaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpXG4gICAgICAgICAgICAgICAgICAgID8ganF1ZXJ5TWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKVxuICAgICAgICAgICAgICAgICAgICA6IFtdLCAyKSwgYWRkID0gX2FbMF0sIHJlbW92ZSA9IF9hWzFdO1xuICAgIGlmICghYWRkKSB7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZV8xLmlzQXJyYXlMaWtlKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uIChzdWJUYXJnZXQpIHsgcmV0dXJuIGZyb21FdmVudChzdWJUYXJnZXQsIGV2ZW50TmFtZSwgb3B0aW9ucyk7IH0pKGlubmVyRnJvbV8xLmlubmVyRnJvbSh0YXJnZXQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGV2ZW50IHRhcmdldCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7XG4gICAgICAgIH07XG4gICAgICAgIGFkZChoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShoYW5kbGVyKTsgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZnJvbUV2ZW50ID0gZnJvbUV2ZW50O1xuZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyKTsgfTsgfTtcbn1cbmZ1bmN0aW9uIGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih0YXJnZXQuYWRkTGlzdGVuZXIpICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7XG59XG5mdW5jdGlvbiBpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5vZmYpO1xufVxuZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21FdmVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tRXZlbnRQYXR0ZXJuID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbmZ1bmN0aW9uIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlciwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlcikucGlwZShtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGUgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgZVtfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dChlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJldFZhbHVlID0gYWRkSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlbW92ZUhhbmRsZXIpID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlSGFuZGxlcihoYW5kbGVyLCByZXRWYWx1ZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21FdmVudFBhdHRlcm4gPSBmcm9tRXZlbnRQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50UGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdlbmVyYXRlID0gdm9pZCAwO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbnZhciBpc1NjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNTY2hlZHVsZXJcIik7XG52YXIgZGVmZXJfMSA9IHJlcXVpcmUoXCIuL2RlZmVyXCIpO1xudmFyIHNjaGVkdWxlSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZVwiKTtcbmZ1bmN0aW9uIGdlbmVyYXRlKGluaXRpYWxTdGF0ZU9yT3B0aW9ucywgY29uZGl0aW9uLCBpdGVyYXRlLCByZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyLCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciByZXN1bHRTZWxlY3RvcjtcbiAgICB2YXIgaW5pdGlhbFN0YXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIChfYSA9IGluaXRpYWxTdGF0ZU9yT3B0aW9ucywgaW5pdGlhbFN0YXRlID0gX2EuaW5pdGlhbFN0YXRlLCBjb25kaXRpb24gPSBfYS5jb25kaXRpb24sIGl0ZXJhdGUgPSBfYS5pdGVyYXRlLCBfYiA9IF9hLnJlc3VsdFNlbGVjdG9yLCByZXN1bHRTZWxlY3RvciA9IF9iID09PSB2b2lkIDAgPyBpZGVudGl0eV8xLmlkZW50aXR5IDogX2IsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGVPck9wdGlvbnM7XG4gICAgICAgIGlmICghcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlciB8fCBpc1NjaGVkdWxlcl8xLmlzU2NoZWR1bGVyKHJlc3VsdFNlbGVjdG9yT3JTY2hlZHVsZXIpKSB7XG4gICAgICAgICAgICByZXN1bHRTZWxlY3RvciA9IGlkZW50aXR5XzEuaWRlbnRpdHk7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSByZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdlbigpIHtcbiAgICAgICAgdmFyIHN0YXRlO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIWNvbmRpdGlvbiB8fCBjb25kaXRpb24oc3RhdGUpKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCByZXN1bHRTZWxlY3RvcihzdGF0ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGl0ZXJhdGUoc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZlcl8xLmRlZmVyKChzY2hlZHVsZXJcbiAgICAgICAgP1xuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZV8xLnNjaGVkdWxlSXRlcmFibGUoZ2VuKCksIHNjaGVkdWxlcik7IH1cbiAgICAgICAgOlxuICAgICAgICAgICAgZ2VuKSk7XG59XG5leHBvcnRzLmdlbmVyYXRlID0gZ2VuZXJhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5paWYgPSB2b2lkIDA7XG52YXIgZGVmZXJfMSA9IHJlcXVpcmUoXCIuL2RlZmVyXCIpO1xuZnVuY3Rpb24gaWlmKGNvbmRpdGlvbiwgdHJ1ZVJlc3VsdCwgZmFsc2VSZXN1bHQpIHtcbiAgICByZXR1cm4gZGVmZXJfMS5kZWZlcihmdW5jdGlvbiAoKSB7IHJldHVybiAoY29uZGl0aW9uKCkgPyB0cnVlUmVzdWx0IDogZmFsc2VSZXN1bHQpOyB9KTtcbn1cbmV4cG9ydHMuaWlmID0gaWlmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWlmLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVyID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1NjaGVkdWxlclwiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikge1xuICAgIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsgZHVlVGltZSA9IDA7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHZhciBpbnRlcnZhbER1cmF0aW9uID0gLTE7XG4gICAgaWYgKGludGVydmFsT3JTY2hlZHVsZXIgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkge1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gaW50ZXJ2YWxPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGludGVydmFsRHVyYXRpb24gPSBpbnRlcnZhbE9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGR1ZSA9IGlzRGF0ZV8xLmlzVmFsaWREYXRlKGR1ZVRpbWUpID8gK2R1ZVRpbWUgLSBzY2hlZHVsZXIubm93KCkgOiBkdWVUaW1lO1xuICAgICAgICBpZiAoZHVlIDwgMCkge1xuICAgICAgICAgICAgZHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIGlmICgwIDw9IGludGVydmFsRHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIGludGVydmFsRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZHVlKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZXIgPSB0aW1lcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi90aW1lclwiKTtcbmZ1bmN0aW9uIGludGVydmFsKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHBlcmlvZCA9PT0gdm9pZCAwKSB7IHBlcmlvZCA9IDA7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luY1NjaGVkdWxlcjsgfVxuICAgIGlmIChwZXJpb2QgPCAwKSB7XG4gICAgICAgIHBlcmlvZCA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aW1lcl8xLnRpbWVyKHBlcmlvZCwgcGVyaW9kLCBzY2hlZHVsZXIpO1xufVxuZXhwb3J0cy5pbnRlcnZhbCA9IGludGVydmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJ2YWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG52YXIgbWVyZ2VBbGxfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvbWVyZ2VBbGxcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL2VtcHR5XCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbmZ1bmN0aW9uIG1lcmdlKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gYXJnc18xLnBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgY29uY3VycmVudCA9IGFyZ3NfMS5wb3BOdW1iZXIoYXJncywgSW5maW5pdHkpO1xuICAgIHZhciBzb3VyY2VzID0gYXJncztcbiAgICByZXR1cm4gIXNvdXJjZXMubGVuZ3RoXG4gICAgICAgID9cbiAgICAgICAgICAgIGVtcHR5XzEuRU1QVFlcbiAgICAgICAgOiBzb3VyY2VzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2VzWzBdKVxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIG1lcmdlQWxsXzEubWVyZ2VBbGwoY29uY3VycmVudCkoZnJvbV8xLmZyb20oc291cmNlcywgc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5uZXZlciA9IGV4cG9ydHMuTkVWRVIgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbmV4cG9ydHMuTkVWRVIgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUobm9vcF8xLm5vb3ApO1xuZnVuY3Rpb24gbmV2ZXIoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuTkVWRVI7XG59XG5leHBvcnRzLm5ldmVyID0gbmV2ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXZlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcmdzT3JBcmdBcnJheSA9IHZvaWQgMDtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIGFyZ3NPckFyZ0FycmF5KGFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xufVxuZXhwb3J0cy5hcmdzT3JBcmdBcnJheSA9IGFyZ3NPckFyZ0FycmF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJnc09yQXJnQXJyYXkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgYXJnc09yQXJnQXJyYXlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NPckFyZ0FycmF5XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIG9uRXJyb3JSZXN1bWVOZXh0KCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgc291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgbmV4dFNvdXJjZXMgPSBhcmdzT3JBcmdBcnJheV8xLmFyZ3NPckFyZ0FycmF5KHNvdXJjZXMpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgICAgICAgdmFyIHN1YnNjcmliZU5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlSW5kZXggPCBuZXh0U291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFNvdXJjZSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0U291cmNlID0gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5leHRTb3VyY2VzW3NvdXJjZUluZGV4KytdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVOZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG5ldyBPcGVyYXRvclN1YnNjcmliZXJfMS5PcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCBub29wXzEubm9vcCwgbm9vcF8xLm5vb3ApO1xuICAgICAgICAgICAgICAgIG5leHRTb3VyY2Uuc3Vic2NyaWJlKGlubmVyU3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWJzY3JpYmVyLmFkZChzdWJzY3JpYmVOZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlTmV4dCgpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IG9uRXJyb3JSZXN1bWVOZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25FcnJvclJlc3VtZU5leHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFpcnMgPSB2b2lkIDA7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbmZ1bmN0aW9uIHBhaXJzKG9iaiwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGZyb21fMS5mcm9tKE9iamVjdC5lbnRyaWVzKG9iaiksIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLnBhaXJzID0gcGFpcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub3QgPSB2b2lkIDA7XG5mdW5jdGlvbiBub3QocHJlZCwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7IHJldHVybiAhcHJlZC5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCk7IH07XG59XG5leHBvcnRzLm5vdCA9IG5vdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maWx0ZXIgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCsrKSAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbHRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJ0aXRpb24gPSB2b2lkIDA7XG52YXIgbm90XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub3RcIik7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL2ZpbHRlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHBhcnRpdGlvbihzb3VyY2UsIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBbZmlsdGVyXzEuZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZSkpLCBmaWx0ZXJfMS5maWx0ZXIobm90XzEubm90KHByZWRpY2F0ZSwgdGhpc0FyZykpKGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2UpKV07XG59XG5leHBvcnRzLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnRpdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yYWNlSW5pdCA9IGV4cG9ydHMucmFjZSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJhY2UoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHNvdXJjZXMgPSBhcmdzT3JBcmdBcnJheV8xLmFyZ3NPckFyZ0FycmF5KHNvdXJjZXMpO1xuICAgIHJldHVybiBzb3VyY2VzLmxlbmd0aCA9PT0gMSA/IGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2VzWzBdKSA6IG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShyYWNlSW5pdChzb3VyY2VzKSk7XG59XG5leHBvcnRzLnJhY2UgPSByYWNlO1xuZnVuY3Rpb24gcmFjZUluaXQoc291cmNlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZXNbaV0pLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCBzdWJzY3JpcHRpb25zLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzICE9PSBpICYmIHN1YnNjcmlwdGlvbnNbc10udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBzdWJzY3JpcHRpb25zICYmICFzdWJzY3JpYmVyLmNsb3NlZCAmJiBpIDwgc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLnJhY2VJbml0ID0gcmFjZUluaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhbmdlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGVtcHR5XzEgPSByZXF1aXJlKFwiLi9lbXB0eVwiKTtcbmZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBjb3VudCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIHtcbiAgICAgICAgY291bnQgPSBzdGFydDtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgICByZXR1cm4gZW1wdHlfMS5FTVBUWTtcbiAgICB9XG4gICAgdmFyIGVuZCA9IGNvdW50ICsgc3RhcnQ7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShzY2hlZHVsZXJcbiAgICAgICAgP1xuICAgICAgICAgICAgZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobiA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4rKyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICAgICAgZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHdoaWxlIChuIDwgZW5kICYmICFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobisrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG59XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2luZyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG5mdW5jdGlvbiB1c2luZyhyZXNvdXJjZUZhY3RvcnksIG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG9ic2VydmFibGVGYWN0b3J5KHJlc291cmNlKTtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHJlc3VsdCA/IGlubmVyRnJvbV8xLmlubmVyRnJvbShyZXN1bHQpIDogZW1wdHlfMS5FTVBUWTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJlc291cmNlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVzaW5nID0gdXNpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2luZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuemlwID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4vaW5uZXJGcm9tXCIpO1xudmFyIGFyZ3NPckFyZ0FycmF5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzT3JBcmdBcnJheVwiKTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xuZnVuY3Rpb24gemlwKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBhcmdzXzEucG9wUmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gICAgdmFyIHNvdXJjZXMgPSBhcmdzT3JBcmdBcnJheV8xLmFyZ3NPckFyZ0FycmF5KGFyZ3MpO1xuICAgIHJldHVybiBzb3VyY2VzLmxlbmd0aFxuICAgICAgICA/IG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlcnMgPSBzb3VyY2VzLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfSk7XG4gICAgICAgICAgICB2YXIgY29tcGxldGVkID0gc291cmNlcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0pO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBjb21wbGV0ZWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChzb3VyY2VJbmRleCkge1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2VzW3NvdXJjZUluZGV4XSkuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyc1tzb3VyY2VJbmRleF0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzLmV2ZXJ5KGZ1bmN0aW9uIChidWZmZXIpIHsgcmV0dXJuIGJ1ZmZlci5sZW5ndGg7IH0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYnVmZmVycy5tYXAoZnVuY3Rpb24gKGJ1ZmZlcikgeyByZXR1cm4gYnVmZmVyLnNoaWZ0KCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0U2VsZWN0b3IuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQocmVzdWx0KSkpIDogcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzLnNvbWUoZnVuY3Rpb24gKGJ1ZmZlciwgaSkgeyByZXR1cm4gIWJ1ZmZlci5sZW5ndGggJiYgY29tcGxldGVkW2ldOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkW3NvdXJjZUluZGV4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICFidWZmZXJzW3NvdXJjZUluZGV4XS5sZW5ndGggJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBzb3VyY2VJbmRleCA9IDA7ICFzdWJzY3JpYmVyLmNsb3NlZCAmJiBzb3VyY2VJbmRleCA8IHNvdXJjZXMubGVuZ3RoOyBzb3VyY2VJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgX2xvb3BfMShzb3VyY2VJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBjb21wbGV0ZWQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgOiBlbXB0eV8xLkVNUFRZO1xufVxuZXhwb3J0cy56aXAgPSB6aXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1ZGl0ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBhdWRpdChkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVuZER1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID09PSBudWxsIHx8IGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjbGVhbnVwRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWR1cmF0aW9uU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlKSkuc3Vic2NyaWJlKChkdXJhdGlvblN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kRHVyYXRpb24sIGNsZWFudXBEdXJhdGlvbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAoIWhhc1ZhbHVlIHx8ICFkdXJhdGlvblN1YnNjcmliZXIgfHwgZHVyYXRpb25TdWJzY3JpYmVyLmNsb3NlZCkgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmF1ZGl0ID0gYXVkaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdWRpdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hdWRpdFRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgYXVkaXRfMSA9IHJlcXVpcmUoXCIuL2F1ZGl0XCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIGF1ZGl0VGltZShkdXJhdGlvbiwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICByZXR1cm4gYXVkaXRfMS5hdWRpdChmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lcl8xLnRpbWVyKGR1cmF0aW9uLCBzY2hlZHVsZXIpOyB9KTtcbn1cbmV4cG9ydHMuYXVkaXRUaW1lID0gYXVkaXRUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVkaXRUaW1lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1ZmZlciA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRCdWZmZXIgPSBbXTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBjdXJyZW50QnVmZmVyLnB1c2godmFsdWUpOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGNsb3NpbmdOb3RpZmllcikuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYiA9IGN1cnJlbnRCdWZmZXI7XG4gICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gW107XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYik7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyID0gYnVmZmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1ZmZlckNvdW50ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiBidWZmZXJDb3VudChidWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5KSB7XG4gICAgaWYgKHN0YXJ0QnVmZmVyRXZlcnkgPT09IHZvaWQgMCkgeyBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsgfVxuICAgIHN0YXJ0QnVmZmVyRXZlcnkgPSBzdGFydEJ1ZmZlckV2ZXJ5ICE9PSBudWxsICYmIHN0YXJ0QnVmZmVyRXZlcnkgIT09IHZvaWQgMCA/IHN0YXJ0QnVmZmVyRXZlcnkgOiBidWZmZXJTaXplO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJzID0gW107XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgICAgICB2YXIgdG9FbWl0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjb3VudCsrICUgc3RhcnRCdWZmZXJFdmVyeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMSA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCk7ICFidWZmZXJzXzFfMS5kb25lOyBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJTaXplIDw9IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdCAhPT0gbnVsbCAmJiB0b0VtaXQgIT09IHZvaWQgMCA/IHRvRW1pdCA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9FbWl0LnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hID0gYnVmZmVyc18xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyc18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvRW1pdCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRvRW1pdF8xID0gX192YWx1ZXModG9FbWl0KSwgdG9FbWl0XzFfMSA9IHRvRW1pdF8xLm5leHQoKTsgIXRvRW1pdF8xXzEuZG9uZTsgdG9FbWl0XzFfMSA9IHRvRW1pdF8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRvRW1pdF8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9FbWl0XzFfMSAmJiAhdG9FbWl0XzFfMS5kb25lICYmIChfYiA9IHRvRW1pdF8xLnJldHVybikpIF9iLmNhbGwodG9FbWl0XzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzMsIF9hO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJzXzIgPSBfX3ZhbHVlcyhidWZmZXJzKSwgYnVmZmVyc18yXzEgPSBidWZmZXJzXzIubmV4dCgpOyAhYnVmZmVyc18yXzEuZG9uZTsgYnVmZmVyc18yXzEgPSBidWZmZXJzXzIubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzXzJfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2EgPSBidWZmZXJzXzIucmV0dXJuKSkgX2EuY2FsbChidWZmZXJzXzIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYnVmZmVycyA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyQ291bnQgPSBidWZmZXJDb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlckNvdW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1ZmZlclRpbWUgPSB2b2lkIDA7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBleGVjdXRlU2NoZWR1bGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBvdGhlckFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSAoX2EgPSBhcmdzXzEucG9wU2NoZWR1bGVyKG90aGVyQXJncykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7XG4gICAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgdmFyIG1heEJ1ZmZlclNpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlclJlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVtaXQgPSBmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzO1xuICAgICAgICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKGJ1ZmZlclJlY29yZHMsIHJlY29yZCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHN0YXJ0QnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTtcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHJlY29yZF8xID0ge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgc3Viczogc3VicyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1pdChyZWNvcmRfMSk7IH0sIGJ1ZmZlclRpbWVTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBzdGFydEJ1ZmZlciwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN0YXJ0T25FbWl0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydEJ1ZmZlcigpO1xuICAgICAgICB2YXIgYnVmZmVyVGltZVN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHZhciByZWNvcmRzQ29weSA9IGJ1ZmZlclJlY29yZHMuc2xpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcmVjb3Jkc0NvcHlfMSA9IF9fdmFsdWVzKHJlY29yZHNDb3B5KSwgcmVjb3Jkc0NvcHlfMV8xID0gcmVjb3Jkc0NvcHlfMS5uZXh0KCk7ICFyZWNvcmRzQ29weV8xXzEuZG9uZTsgcmVjb3Jkc0NvcHlfMV8xID0gcmVjb3Jkc0NvcHlfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHJlY29yZHNDb3B5XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHJlY29yZC5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnVmZmVyU2l6ZSA8PSBidWZmZXIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hID0gcmVjb3Jkc0NvcHlfMS5yZXR1cm4pKSBfYS5jYWxsKHJlY29yZHNDb3B5XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyVGltZVN1YnNjcmliZXIgPT09IG51bGwgfHwgYnVmZmVyVGltZVN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclRpbWVTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gKGJ1ZmZlclJlY29yZHMgPSBudWxsKTsgfSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoYnVmZmVyVGltZVN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5idWZmZXJUaW1lID0gYnVmZmVyVGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlclRpbWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVmZmVyVG9nZ2xlID0gdm9pZCAwO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiBidWZmZXJUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJzID0gW107XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShvcGVuaW5ncykuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAob3BlblZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIGVtaXRCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKGJ1ZmZlcnMsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24uYWRkKGlubmVyRnJvbV8xLmlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3Iob3BlblZhbHVlKSkuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0QnVmZmVyLCBub29wXzEubm9vcCkpKTtcbiAgICAgICAgfSwgbm9vcF8xLm5vb3ApKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYnVmZmVyc18xID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKTsgIWJ1ZmZlcnNfMV8xLmRvbmU7IGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gYnVmZmVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcnNfMV8xICYmICFidWZmZXJzXzFfMS5kb25lICYmIChfYSA9IGJ1ZmZlcnNfMS5yZXR1cm4pKSBfYS5jYWxsKGJ1ZmZlcnNfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXJzLnNoaWZ0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmJ1ZmZlclRvZ2dsZSA9IGJ1ZmZlclRvZ2dsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlclRvZ2dsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJXaGVuID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlcldoZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBvcGVuQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB2YXIgYiA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgYiAmJiBzdWJzY3JpYmVyLm5leHQoYik7XG4gICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKCkpLnN1YnNjcmliZSgoY2xvc2luZ1N1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3BlbkJ1ZmZlciwgbm9vcF8xLm5vb3ApKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5CdWZmZXIoKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBidWZmZXIgPT09IG51bGwgfHwgYnVmZmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJ1ZmZlciAmJiBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoYnVmZmVyID0gY2xvc2luZ1N1YnNjcmliZXIgPSBudWxsKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5idWZmZXJXaGVuID0gYnVmZmVyV2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlcldoZW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2F0Y2hFcnJvciA9IHZvaWQgMDtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xuZnVuY3Rpb24gY2F0Y2hFcnJvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgIHZhciBzeW5jVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhhbmRsZWRSZXN1bHQ7XG4gICAgICAgIGlubmVyU3ViID0gc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGhhbmRsZWRSZXN1bHQgPSBpbm5lckZyb21fMS5pbm5lckZyb20oc2VsZWN0b3IoZXJyLCBjYXRjaEVycm9yKHNlbGVjdG9yKShzb3VyY2UpKSk7XG4gICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBoYW5kbGVkUmVzdWx0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bmNVbnN1YiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHN5bmNVbnN1Yikge1xuICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgIGhhbmRsZWRSZXN1bHQuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmNhdGNoRXJyb3IgPSBjYXRjaEVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2F0Y2hFcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2FuSW50ZXJuYWxzID0gdm9pZCAwO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgaGFzU2VlZCwgZW1pdE9uTmV4dCwgZW1pdEJlZm9yZUNvbXBsZXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1N0YXRlID0gaGFzU2VlZDtcbiAgICAgICAgdmFyIHN0YXRlID0gc2VlZDtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaSA9IGluZGV4Kys7XG4gICAgICAgICAgICBzdGF0ZSA9IGhhc1N0YXRlXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvcihzdGF0ZSwgdmFsdWUsIGkpXG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAoKGhhc1N0YXRlID0gdHJ1ZSksIHZhbHVlKTtcbiAgICAgICAgICAgIGVtaXRPbk5leHQgJiYgc3Vic2NyaWJlci5uZXh0KHN0YXRlKTtcbiAgICAgICAgfSwgZW1pdEJlZm9yZUNvbXBsZXRlICYmXG4gICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGhhc1N0YXRlICYmIHN1YnNjcmliZXIubmV4dChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSkpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5zY2FuSW50ZXJuYWxzID0gc2NhbkludGVybmFscztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjYW5JbnRlcm5hbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVkdWNlID0gdm9pZCAwO1xudmFyIHNjYW5JbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL3NjYW5JbnRlcm5hbHNcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHJlZHVjZShhY2N1bXVsYXRvciwgc2VlZCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShzY2FuSW50ZXJuYWxzXzEuc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCBmYWxzZSwgdHJ1ZSkpO1xufVxuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1Y2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9BcnJheSA9IHZvaWQgMDtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoXCIuL3JlZHVjZVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGFyclJlZHVjZXIgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZSkgeyByZXR1cm4gKGFyci5wdXNoKHZhbHVlKSwgYXJyKTsgfTtcbmZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmVkdWNlXzEucmVkdWNlKGFyclJlZHVjZXIsIFtdKShzb3VyY2UpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudG9BcnJheSA9IHRvQXJyYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b0FycmF5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmpvaW5BbGxJbnRlcm5hbHMgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIG1hcE9uZU9yTWFueUFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL21hcE9uZU9yTWFueUFyZ3NcIik7XG52YXIgcGlwZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvcGlwZVwiKTtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vbWVyZ2VNYXBcIik7XG52YXIgdG9BcnJheV8xID0gcmVxdWlyZShcIi4vdG9BcnJheVwiKTtcbmZ1bmN0aW9uIGpvaW5BbGxJbnRlcm5hbHMoam9pbkZuLCBwcm9qZWN0KSB7XG4gICAgcmV0dXJuIHBpcGVfMS5waXBlKHRvQXJyYXlfMS50b0FycmF5KCksIG1lcmdlTWFwXzEubWVyZ2VNYXAoZnVuY3Rpb24gKHNvdXJjZXMpIHsgcmV0dXJuIGpvaW5Gbihzb3VyY2VzKTsgfSksIHByb2plY3QgPyBtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhwcm9qZWN0KSA6IGlkZW50aXR5XzEuaWRlbnRpdHkpO1xufVxuZXhwb3J0cy5qb2luQWxsSW50ZXJuYWxzID0gam9pbkFsbEludGVybmFscztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpvaW5BbGxJbnRlcm5hbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tYmluZUxhdGVzdEFsbCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0XCIpO1xudmFyIGpvaW5BbGxJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL2pvaW5BbGxJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBjb21iaW5lTGF0ZXN0QWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFsc18xLmpvaW5BbGxJbnRlcm5hbHMoY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3QsIHByb2plY3QpO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gY29tYmluZUxhdGVzdEFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3RBbGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tYmluZUFsbCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0QWxsXzEgPSByZXF1aXJlKFwiLi9jb21iaW5lTGF0ZXN0QWxsXCIpO1xuZXhwb3J0cy5jb21iaW5lQWxsID0gY29tYmluZUxhdGVzdEFsbF8xLmNvbWJpbmVMYXRlc3RBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lQWxsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gdm9pZCAwO1xudmFyIGNvbWJpbmVMYXRlc3RfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBwaXBlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9waXBlXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG5mdW5jdGlvbiBjb21iaW5lTGF0ZXN0KCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBhcmdzXzEucG9wUmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yXG4gICAgICAgID8gcGlwZV8xLnBpcGUoY29tYmluZUxhdGVzdC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpLCBtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpXG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3RJbml0KF9fc3ByZWFkQXJyYXkoW3NvdXJjZV0sIF9fcmVhZChhcmdzT3JBcmdBcnJheV8xLmFyZ3NPckFyZ0FycmF5KGFyZ3MpKSkpKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMuY29tYmluZUxhdGVzdCA9IGNvbWJpbmVMYXRlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb21iaW5lTGF0ZXN0V2l0aCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKFwiLi9jb21iaW5lTGF0ZXN0XCIpO1xuZnVuY3Rpb24gY29tYmluZUxhdGVzdFdpdGgoKSB7XG4gICAgdmFyIG90aGVyU291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyU291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3QuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0V2l0aCA9IGNvbWJpbmVMYXRlc3RXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdFdpdGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0TWFwID0gdm9pZCAwO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gY29uY2F0TWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSA/IG1lcmdlTWFwXzEubWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIDEpIDogbWVyZ2VNYXBfMS5tZXJnZU1hcChwcm9qZWN0LCAxKTtcbn1cbmV4cG9ydHMuY29uY2F0TWFwID0gY29uY2F0TWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0TWFwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdE1hcFRvID0gdm9pZCAwO1xudmFyIGNvbmNhdE1hcF8xID0gcmVxdWlyZShcIi4vY29uY2F0TWFwXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBjb25jYXRNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSA/IGNvbmNhdE1hcF8xLmNvbmNhdE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0sIHJlc3VsdFNlbGVjdG9yKSA6IGNvbmNhdE1hcF8xLmNvbmNhdE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0pO1xufVxuZXhwb3J0cy5jb25jYXRNYXBUbyA9IGNvbmNhdE1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0TWFwVG8uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGNvbmNhdEFsbF8xID0gcmVxdWlyZShcIi4vY29uY2F0QWxsXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZnJvbVwiKTtcbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgY29uY2F0QWxsXzEuY29uY2F0QWxsKCkoZnJvbV8xLmZyb20oX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3MpKSwgc2NoZWR1bGVyKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdFdpdGggPSB2b2lkIDA7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi9jb25jYXRcIik7XG5mdW5jdGlvbiBjb25jYXRXaXRoKCkge1xuICAgIHZhciBvdGhlclNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlclNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdF8xLmNvbmNhdC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvdGhlclNvdXJjZXMpKSk7XG59XG5leHBvcnRzLmNvbmNhdFdpdGggPSBjb25jYXRXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0V2l0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tU3Vic2NyaWJhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gZnJvbVN1YnNjcmliYWJsZShzdWJzY3JpYmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmFibGUuc3Vic2NyaWJlKHN1YnNjcmliZXIpOyB9KTtcbn1cbmV4cG9ydHMuZnJvbVN1YnNjcmliYWJsZSA9IGZyb21TdWJzY3JpYmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tU3Vic2NyaWJhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbm5lY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBmcm9tU3Vic2NyaWJhYmxlXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlXCIpO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7IH0sXG59O1xuZnVuY3Rpb24gY29ubmVjdChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IERFRkFVTFRfQ09ORklHOyB9XG4gICAgdmFyIGNvbm5lY3RvciA9IGNvbmZpZy5jb25uZWN0b3I7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBjb25uZWN0b3IoKTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNlbGVjdG9yKGZyb21TdWJzY3JpYmFibGVfMS5mcm9tU3Vic2NyaWJhYmxlKHN1YmplY3QpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzb3VyY2Uuc3Vic2NyaWJlKHN1YmplY3QpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY29ubmVjdCA9IGNvbm5lY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25uZWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvdW50ID0gdm9pZCAwO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZShcIi4vcmVkdWNlXCIpO1xuZnVuY3Rpb24gY291bnQocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZShmdW5jdGlvbiAodG90YWwsIHZhbHVlLCBpKSB7IHJldHVybiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodmFsdWUsIGkpID8gdG90YWwgKyAxIDogdG90YWwpOyB9LCAwKTtcbn1cbmV4cG9ydHMuY291bnQgPSBjb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvdW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlYm91bmNlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGVtaXQsIG5vb3BfMS5ub29wKTtcbiAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlYm91bmNlID0gZGVib3VuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJvdW5jZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGRlYm91bmNlVGltZShkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luY1NjaGVkdWxlcjsgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBsYXN0VGltZSA9IG51bGw7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldFRpbWUgPSBsYXN0VGltZSArIGR1ZVRpbWU7XG4gICAgICAgICAgICB2YXIgbm93ID0gc2NoZWR1bGVyLm5vdygpO1xuICAgICAgICAgICAgaWYgKG5vdyA8IHRhcmdldFRpbWUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIHRhcmdldFRpbWUgLSBub3cpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgICAgICBpZiAoIWFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gc2NoZWR1bGVyLnNjaGVkdWxlKGVtaXRXaGVuSWRsZSwgZHVlVGltZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoYWN0aXZlVGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSBkZWJvdW5jZVRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJvdW5jZVRpbWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0SWZFbXB0eSA9IGRlZmF1bHRJZkVtcHR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdElmRW1wdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGFrZSA9IHZvaWQgMDtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHRha2UoY291bnQpIHtcbiAgICByZXR1cm4gY291bnQgPD0gMFxuICAgICAgICA/XG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLkVNUFRZOyB9XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCsrc2VlbiA8PSBjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gc2Vlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMudGFrZSA9IHRha2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbmZ1bmN0aW9uIGlnbm9yZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG5vb3BfMS5ub29wKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gaWdub3JlRWxlbWVudHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZ25vcmVFbGVtZW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXBUbyA9IHZvaWQgMDtcbnZhciBtYXBfMSA9IHJlcXVpcmUoXCIuL21hcFwiKTtcbmZ1bmN0aW9uIG1hcFRvKHZhbHVlKSB7XG4gICAgcmV0dXJuIG1hcF8xLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSk7XG59XG5leHBvcnRzLm1hcFRvID0gbWFwVG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBUby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheVdoZW4gPSB2b2lkIDA7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9jb25jYXRcIik7XG52YXIgdGFrZV8xID0gcmVxdWlyZShcIi4vdGFrZVwiKTtcbnZhciBpZ25vcmVFbGVtZW50c18xID0gcmVxdWlyZShcIi4vaWdub3JlRWxlbWVudHNcIik7XG52YXIgbWFwVG9fMSA9IHJlcXVpcmUoXCIuL21hcFRvXCIpO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGRlbGF5V2hlbihkZWxheUR1cmF0aW9uU2VsZWN0b3IsIHN1YnNjcmlwdGlvbkRlbGF5KSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkRlbGF5KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uY2F0XzEuY29uY2F0KHN1YnNjcmlwdGlvbkRlbGF5LnBpcGUodGFrZV8xLnRha2UoMSksIGlnbm9yZUVsZW1lbnRzXzEuaWdub3JlRWxlbWVudHMoKSksIHNvdXJjZS5waXBlKGRlbGF5V2hlbihkZWxheUR1cmF0aW9uU2VsZWN0b3IpKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIGlubmVyRnJvbV8xLmlubmVyRnJvbShkZWxheUR1cmF0aW9uU2VsZWN0b3IodmFsdWUsIGluZGV4KSkucGlwZSh0YWtlXzEudGFrZSgxKSwgbWFwVG9fMS5tYXBUbyh2YWx1ZSkpOyB9KTtcbn1cbmV4cG9ydHMuZGVsYXlXaGVuID0gZGVsYXlXaGVuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVsYXlXaGVuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5ID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGRlbGF5V2hlbl8xID0gcmVxdWlyZShcIi4vZGVsYXlXaGVuXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIGRlbGF5KGR1ZSwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICB2YXIgZHVyYXRpb24gPSB0aW1lcl8xLnRpbWVyKGR1ZSwgc2NoZWR1bGVyKTtcbiAgICByZXR1cm4gZGVsYXlXaGVuXzEuZGVsYXlXaGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGR1cmF0aW9uOyB9KTtcbn1cbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbWF0ZXJpYWxpemUgPSB2b2lkIDA7XG52YXIgTm90aWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi4vTm90aWZpY2F0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBkZW1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChub3RpZmljYXRpb24pIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLm9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZW1hdGVyaWFsaXplID0gZGVtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbWF0ZXJpYWxpemUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlzdGluY3QgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gZGlzdGluY3Qoa2V5U2VsZWN0b3IsIGZsdXNoZXMpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZGlzdGluY3RLZXlzID0gbmV3IFNldCgpO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlTZWxlY3RvciA/IGtleVNlbGVjdG9yKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFkaXN0aW5jdEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBkaXN0aW5jdEtleXMuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBmbHVzaGVzICYmIGlubmVyRnJvbV8xLmlubmVyRnJvbShmbHVzaGVzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3RpbmN0S2V5cy5jbGVhcigpOyB9LCBub29wXzEubm9vcCkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kaXN0aW5jdCA9IGRpc3RpbmN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlzdGluY3RVbnRpbENoYW5nZWQgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJhdG9yLCBrZXlTZWxlY3Rvcikge1xuICAgIGlmIChrZXlTZWxlY3RvciA9PT0gdm9pZCAwKSB7IGtleVNlbGVjdG9yID0gaWRlbnRpdHlfMS5pZGVudGl0eTsgfVxuICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yICE9PSBudWxsICYmIGNvbXBhcmF0b3IgIT09IHZvaWQgMCA/IGNvbXBhcmF0b3IgOiBkZWZhdWx0Q29tcGFyZTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJldmlvdXNLZXk7XG4gICAgICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmlyc3QgfHwgIWNvbXBhcmF0b3IocHJldmlvdXNLZXksIGN1cnJlbnRLZXkpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0tleSA9IGN1cnJlbnRLZXk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kaXN0aW5jdFVudGlsQ2hhbmdlZCA9IGRpc3RpbmN0VW50aWxDaGFuZ2VkO1xuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3RVbnRpbENoYW5nZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgPSB2b2lkIDA7XG52YXIgZGlzdGluY3RVbnRpbENoYW5nZWRfMSA9IHJlcXVpcmUoXCIuL2Rpc3RpbmN0VW50aWxDaGFuZ2VkXCIpO1xuZnVuY3Rpb24gZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoa2V5LCBjb21wYXJlKSB7XG4gICAgcmV0dXJuIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQoZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIGNvbXBhcmUgPyBjb21wYXJlKHhba2V5XSwgeVtrZXldKSA6IHhba2V5XSA9PT0geVtrZXldOyB9KTtcbn1cbmV4cG9ydHMuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgPSBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRocm93SWZFbXB0eSA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9FbXB0eUVycm9yXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiB0aHJvd0lmRW1wdHkoZXJyb3JGYWN0b3J5KSB7XG4gICAgaWYgKGVycm9yRmFjdG9yeSA9PT0gdm9pZCAwKSB7IGVycm9yRmFjdG9yeSA9IGRlZmF1bHRFcnJvckZhY3Rvcnk7IH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiAoaGFzVmFsdWUgPyBzdWJzY3JpYmVyLmNvbXBsZXRlKCkgOiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKSk7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGhyb3dJZkVtcHR5ID0gdGhyb3dJZkVtcHR5O1xuZnVuY3Rpb24gZGVmYXVsdEVycm9yRmFjdG9yeSgpIHtcbiAgICByZXR1cm4gbmV3IEVtcHR5RXJyb3JfMS5FbXB0eUVycm9yKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvd0lmRW1wdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZWxlbWVudEF0ID0gdm9pZCAwO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvclwiKTtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlclwiKTtcbnZhciB0aHJvd0lmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL3Rocm93SWZFbXB0eVwiKTtcbnZhciBkZWZhdWx0SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdElmRW1wdHlcIik7XG52YXIgdGFrZV8xID0gcmVxdWlyZShcIi4vdGFrZVwiKTtcbmZ1bmN0aW9uIGVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpO1xuICAgIH1cbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXJfMS5maWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGkgPT09IGluZGV4OyB9KSwgdGFrZV8xLnRha2UoMSksIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5XzEuZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSA6IHRocm93SWZFbXB0eV8xLnRocm93SWZFbXB0eShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZWxlbWVudEF0ID0gZWxlbWVudEF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWxlbWVudEF0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbmRXaXRoID0gdm9pZCAwO1xudmFyIGNvbmNhdF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvY29uY2F0XCIpO1xudmFyIG9mXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9vZlwiKTtcbmZ1bmN0aW9uIGVuZFdpdGgoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhbHVlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gY29uY2F0XzEuY29uY2F0KHNvdXJjZSwgb2ZfMS5vZi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZCh2YWx1ZXMpKSkpOyB9O1xufVxuZXhwb3J0cy5lbmRXaXRoID0gZW5kV2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVuZFdpdGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZlcnkgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGV2ZXJ5KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKywgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXZlcnkgPSBldmVyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZXJ5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4aGF1c3RNYXAgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGV4aGF1c3RNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UucGlwZShleGhhdXN0TWFwKGZ1bmN0aW9uIChhLCBpKSB7IHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdChhLCBpKSkucGlwZShtYXBfMS5tYXAoZnVuY3Rpb24gKGIsIGlpKSB7IHJldHVybiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSk7IH0pKTsgfSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAob3V0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFpbm5lclN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShwcm9qZWN0KG91dGVyVmFsdWUsIGluZGV4KyspKS5zdWJzY3JpYmUoaW5uZXJTdWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICFpbm5lclN1YiAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhoYXVzdE1hcCA9IGV4aGF1c3RNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0TWFwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4aGF1c3RBbGwgPSB2b2lkIDA7XG52YXIgZXhoYXVzdE1hcF8xID0gcmVxdWlyZShcIi4vZXhoYXVzdE1hcFwiKTtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG5mdW5jdGlvbiBleGhhdXN0QWxsKCkge1xuICAgIHJldHVybiBleGhhdXN0TWFwXzEuZXhoYXVzdE1hcChpZGVudGl0eV8xLmlkZW50aXR5KTtcbn1cbmV4cG9ydHMuZXhoYXVzdEFsbCA9IGV4aGF1c3RBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0QWxsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4aGF1c3QgPSB2b2lkIDA7XG52YXIgZXhoYXVzdEFsbF8xID0gcmVxdWlyZShcIi4vZXhoYXVzdEFsbFwiKTtcbmV4cG9ydHMuZXhoYXVzdCA9IGV4aGF1c3RBbGxfMS5leGhhdXN0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhoYXVzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBhbmQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBtZXJnZUludGVybmFsc18xID0gcmVxdWlyZShcIi4vbWVyZ2VJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBleHBhbmQocHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBjb25jdXJyZW50ID0gKGNvbmN1cnJlbnQgfHwgMCkgPCAxID8gSW5maW5pdHkgOiBjb25jdXJyZW50O1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiBtZXJnZUludGVybmFsc18xLm1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCwgdW5kZWZpbmVkLCB0cnVlLCBzY2hlZHVsZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leHBhbmQgPSBleHBhbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBhbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZmluYWxpemUgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIGZpbmFsaXplKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuZmluYWxpemUgPSBmaW5hbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmFsaXplLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbmQgPSBleHBvcnRzLmZpbmQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGZpbmQocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGNyZWF0ZUZpbmQocHJlZGljYXRlLCB0aGlzQXJnLCAndmFsdWUnKSk7XG59XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZnVuY3Rpb24gY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsIGVtaXQpIHtcbiAgICB2YXIgZmluZEluZGV4ID0gZW1pdCA9PT0gJ2luZGV4JztcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpID0gaW5kZXgrKztcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmaW5kSW5kZXggPyBpIDogdmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZpbmRJbmRleCA/IC0xIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZUZpbmQgPSBjcmVhdGVGaW5kO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maW5kSW5kZXggPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKFwiLi9maW5kXCIpO1xuZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmaW5kXzEuY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICdpbmRleCcpKTtcbn1cbmV4cG9ydHMuZmluZEluZGV4ID0gZmluZEluZGV4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZEluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpcnN0ID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG52YXIgdGFrZV8xID0gcmVxdWlyZShcIi4vdGFrZVwiKTtcbnZhciBkZWZhdWx0SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdElmRW1wdHlcIik7XG52YXIgdGhyb3dJZkVtcHR5XzEgPSByZXF1aXJlKFwiLi90aHJvd0lmRW1wdHlcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gZmlyc3QocHJlZGljYXRlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShwcmVkaWNhdGUgPyBmaWx0ZXJfMS5maWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIHByZWRpY2F0ZSh2LCBpLCBzb3VyY2UpOyB9KSA6IGlkZW50aXR5XzEuaWRlbnRpdHksIHRha2VfMS50YWtlKDEpLCBoYXNEZWZhdWx0VmFsdWUgPyBkZWZhdWx0SWZFbXB0eV8xLmRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkgOiB0aHJvd0lmRW1wdHlfMS50aHJvd0lmRW1wdHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEVtcHR5RXJyb3JfMS5FbXB0eUVycm9yKCk7IH0pKTtcbiAgICB9O1xufVxuZXhwb3J0cy5maXJzdCA9IGZpcnN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmlyc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ3JvdXBCeSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZ3JvdXBCeShrZXlTZWxlY3RvciwgZWxlbWVudE9yT3B0aW9ucywgZHVyYXRpb24sIGNvbm5lY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlbGVtZW50O1xuICAgICAgICBpZiAoIWVsZW1lbnRPck9wdGlvbnMgfHwgdHlwZW9mIGVsZW1lbnRPck9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50T3JPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKGR1cmF0aW9uID0gZWxlbWVudE9yT3B0aW9ucy5kdXJhdGlvbiwgZWxlbWVudCA9IGVsZW1lbnRPck9wdGlvbnMuZWxlbWVudCwgY29ubmVjdG9yID0gZWxlbWVudE9yT3B0aW9ucy5jb25uZWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBncm91cHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBub3RpZnkgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGdyb3Vwcy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIGNiKHN1YnNjcmliZXIpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBub3RpZnkoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5lcnJvcihlcnIpOyB9KTsgfTtcbiAgICAgICAgdmFyIGFjdGl2ZUdyb3VwcyA9IDA7XG4gICAgICAgIHZhciB0ZWFyZG93bkF0dGVtcHRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZ3JvdXBCeVNvdXJjZVN1YnNjcmliZXIgPSBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyXzEuT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIga2V5XzEgPSBrZXlTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFyIGdyb3VwXzEgPSBncm91cHMuZ2V0KGtleV8xKTtcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwXzEpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLnNldChrZXlfMSwgKGdyb3VwXzEgPSBjb25uZWN0b3IgPyBjb25uZWN0b3IoKSA6IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBncm91cGVkID0gY3JlYXRlR3JvdXBlZE9ic2VydmFibGUoa2V5XzEsIGdyb3VwXzEpO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZ3JvdXBlZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uU3Vic2NyaWJlcl8xID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGdyb3VwXzEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cF8xLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyXzEgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyXzEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZ3JvdXBzLmRlbGV0ZShrZXlfMSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeVNvdXJjZVN1YnNjcmliZXIuYWRkKGlubmVyRnJvbV8xLmlubmVyRnJvbShkdXJhdGlvbihncm91cGVkKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcl8xKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBfMS5uZXh0KGVsZW1lbnQgPyBlbGVtZW50KHZhbHVlKSA6IHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBub3RpZnkoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5jb21wbGV0ZSgpOyB9KTsgfSwgaGFuZGxlRXJyb3IsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3Vwcy5jbGVhcigpOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0ZWFyZG93bkF0dGVtcHRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlR3JvdXBzID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShncm91cEJ5U291cmNlU3Vic2NyaWJlcik7XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUdyb3VwZWRPYnNlcnZhYmxlKGtleSwgZ3JvdXBTdWJqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChncm91cFN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVHcm91cHMrKztcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJTdWIgPSBncm91cFN1YmplY3Quc3Vic2NyaWJlKGdyb3VwU3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgLS1hY3RpdmVHcm91cHMgPT09IDAgJiYgdGVhcmRvd25BdHRlbXB0ZWQgJiYgZ3JvdXBCeVNvdXJjZVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5ncm91cEJ5ID0gZ3JvdXBCeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdyb3VwQnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0VtcHR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRha2VMYXN0ID0gdm9pZCAwO1xudmFyIGVtcHR5XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGFrZUxhc3QoY291bnQpIHtcbiAgICByZXR1cm4gY291bnQgPD0gMFxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVtcHR5XzEuRU1QVFk7IH1cbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY291bnQgPCBidWZmZXIubGVuZ3RoICYmIGJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZlcl8xID0gX192YWx1ZXMoYnVmZmVyKSwgYnVmZmVyXzFfMSA9IGJ1ZmZlcl8xLm5leHQoKTsgIWJ1ZmZlcl8xXzEuZG9uZTsgYnVmZmVyXzFfMSA9IGJ1ZmZlcl8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYnVmZmVyXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJfMV8xICYmICFidWZmZXJfMV8xLmRvbmUgJiYgKF9hID0gYnVmZmVyXzEucmV0dXJuKSkgX2EuY2FsbChidWZmZXJfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBudWxsO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMudGFrZUxhc3QgPSB0YWtlTGFzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VMYXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxhc3QgPSB2b2lkIDA7XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvRW1wdHlFcnJvclwiKTtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlclwiKTtcbnZhciB0YWtlTGFzdF8xID0gcmVxdWlyZShcIi4vdGFrZUxhc3RcIik7XG52YXIgdGhyb3dJZkVtcHR5XzEgPSByZXF1aXJlKFwiLi90aHJvd0lmRW1wdHlcIik7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRJZkVtcHR5XCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIGxhc3QocHJlZGljYXRlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShwcmVkaWNhdGUgPyBmaWx0ZXJfMS5maWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIHByZWRpY2F0ZSh2LCBpLCBzb3VyY2UpOyB9KSA6IGlkZW50aXR5XzEuaWRlbnRpdHksIHRha2VMYXN0XzEudGFrZUxhc3QoMSksIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5XzEuZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSA6IHRocm93SWZFbXB0eV8xLnRocm93SWZFbXB0eShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRW1wdHlFcnJvcl8xLkVtcHR5RXJyb3IoKTsgfSkpO1xuICAgIH07XG59XG5leHBvcnRzLmxhc3QgPSBsYXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXRlcmlhbGl6ZSA9IHZvaWQgMDtcbnZhciBOb3RpZmljYXRpb25fMSA9IHJlcXVpcmUoXCIuLi9Ob3RpZmljYXRpb25cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWF0ZXJpYWxpemUgPSBtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hdGVyaWFsaXplLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1heCA9IHZvaWQgMDtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoXCIuL3JlZHVjZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gbWF4KGNvbXBhcmVyKSB7XG4gICAgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZShpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihjb21wYXJlcikgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKGNvbXBhcmVyKHgsIHkpID4gMCA/IHggOiB5KTsgfSA6IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiAoeCA+IHkgPyB4IDogeSk7IH0pO1xufVxuZXhwb3J0cy5tYXggPSBtYXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZmxhdE1hcCA9IHZvaWQgMDtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vbWVyZ2VNYXBcIik7XG5leHBvcnRzLmZsYXRNYXAgPSBtZXJnZU1hcF8xLm1lcmdlTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmxhdE1hcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZU1hcFRvID0gdm9pZCAwO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gbWVyZ2VNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgY29uY3VycmVudCk7XG59XG5leHBvcnRzLm1lcmdlTWFwVG8gPSBtZXJnZU1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXBUby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZVNjYW4gPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBtZXJnZUludGVybmFsc18xID0gcmVxdWlyZShcIi4vbWVyZ2VJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBtZXJnZVNjYW4oYWNjdW11bGF0b3IsIHNlZWQsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBJbmZpbml0eTsgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHNlZWQ7XG4gICAgICAgIHJldHVybiBtZXJnZUludGVybmFsc18xLm1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCk7IH0sIGNvbmN1cnJlbnQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgfSwgZmFsc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gKHN0YXRlID0gbnVsbCk7IH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tZXJnZVNjYW4gPSBtZXJnZVNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZVNjYW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgYXJnc09yQXJnQXJyYXlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NPckFyZ0FycmF5XCIpO1xudmFyIG1lcmdlQWxsXzEgPSByZXF1aXJlKFwiLi9tZXJnZUFsbFwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2Zyb21cIik7XG5mdW5jdGlvbiBtZXJnZSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgdmFyIGNvbmN1cnJlbnQgPSBhcmdzXzEucG9wTnVtYmVyKGFyZ3MsIEluZmluaXR5KTtcbiAgICBhcmdzID0gYXJnc09yQXJnQXJyYXlfMS5hcmdzT3JBcmdBcnJheShhcmdzKTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBtZXJnZUFsbF8xLm1lcmdlQWxsKGNvbmN1cnJlbnQpKGZyb21fMS5mcm9tKF9fc3ByZWFkQXJyYXkoW3NvdXJjZV0sIF9fcmVhZChhcmdzKSksIHNjaGVkdWxlcikpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZVdpdGggPSB2b2lkIDA7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL21lcmdlXCIpO1xuZnVuY3Rpb24gbWVyZ2VXaXRoKCkge1xuICAgIHZhciBvdGhlclNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlclNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlXzEubWVyZ2UuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZVdpdGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWluID0gdm9pZCAwO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZShcIi4vcmVkdWNlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBtaW4oY29tcGFyZXIpIHtcbiAgICByZXR1cm4gcmVkdWNlXzEucmVkdWNlKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGNvbXBhcmVyKSA/IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiAoY29tcGFyZXIoeCwgeSkgPCAwID8geCA6IHkpOyB9IDogZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuICh4IDwgeSA/IHggOiB5KTsgfSk7XG59XG5leHBvcnRzLm1pbiA9IG1pbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tdWx0aWNhc3QgPSB2b2lkIDA7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGVcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbnZhciBjb25uZWN0XzEgPSByZXF1aXJlKFwiLi9jb25uZWN0XCIpO1xuZnVuY3Rpb24gbXVsdGljYXN0KHN1YmplY3RPclN1YmplY3RGYWN0b3J5LCBzZWxlY3Rvcikge1xuICAgIHZhciBzdWJqZWN0RmFjdG9yeSA9IGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHN1YmplY3RPclN1YmplY3RGYWN0b3J5KSA/IHN1YmplY3RPclN1YmplY3RGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViamVjdE9yU3ViamVjdEZhY3Rvcnk7IH07XG4gICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gY29ubmVjdF8xLmNvbm5lY3Qoc2VsZWN0b3IsIHtcbiAgICAgICAgICAgIGNvbm5lY3Rvcjogc3ViamVjdEZhY3RvcnksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIHN1YmplY3RGYWN0b3J5KTsgfTtcbn1cbmV4cG9ydHMubXVsdGljYXN0ID0gbXVsdGljYXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGljYXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHRXaXRoID0gdm9pZCAwO1xudmFyIGFyZ3NPckFyZ0FycmF5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzT3JBcmdBcnJheVwiKTtcbnZhciBvbkVycm9yUmVzdW1lTmV4dF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHRcIik7XG5mdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dFdpdGgoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBuZXh0U291cmNlcyA9IGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoc291cmNlcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0XzEub25FcnJvclJlc3VtZU5leHQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtzb3VyY2VdLCBfX3JlYWQobmV4dFNvdXJjZXMpKSk7IH07XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0V2l0aCA9IG9uRXJyb3JSZXN1bWVOZXh0V2l0aDtcbmV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSBvbkVycm9yUmVzdW1lTmV4dFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dFdpdGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFpcndpc2UgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHBhaXJ3aXNlKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBwcmV2O1xuICAgICAgICB2YXIgaGFzUHJldiA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwID0gcHJldjtcbiAgICAgICAgICAgIHByZXYgPSB2YWx1ZTtcbiAgICAgICAgICAgIGhhc1ByZXYgJiYgc3Vic2NyaWJlci5uZXh0KFtwLCB2YWx1ZV0pO1xuICAgICAgICAgICAgaGFzUHJldiA9IHRydWU7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucGFpcndpc2UgPSBwYWlyd2lzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhaXJ3aXNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBsdWNrID0gdm9pZCAwO1xudmFyIG1hcF8xID0gcmVxdWlyZShcIi4vbWFwXCIpO1xuZnVuY3Rpb24gcGx1Y2soKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBwcm9wZXJ0aWVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcF8xLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICB2YXIgY3VycmVudFByb3AgPSB4O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcCA9IGN1cnJlbnRQcm9wID09PSBudWxsIHx8IGN1cnJlbnRQcm9wID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50UHJvcFtwcm9wZXJ0aWVzW2ldXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvcCA9IHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50UHJvcDtcbiAgICB9KTtcbn1cbmV4cG9ydHMucGx1Y2sgPSBwbHVjaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWNrLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnB1Ymxpc2ggPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbXVsdGljYXN0XzEgPSByZXF1aXJlKFwiLi9tdWx0aWNhc3RcIik7XG52YXIgY29ubmVjdF8xID0gcmVxdWlyZShcIi4vY29ubmVjdFwiKTtcbmZ1bmN0aW9uIHB1Ymxpc2goc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBjb25uZWN0XzEuY29ubmVjdChzZWxlY3Rvcikoc291cmNlKTsgfSA6IGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdChuZXcgU3ViamVjdF8xLlN1YmplY3QoKSkoc291cmNlKTsgfTtcbn1cbmV4cG9ydHMucHVibGlzaCA9IHB1Ymxpc2g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnB1Ymxpc2hCZWhhdmlvciA9IHZvaWQgMDtcbnZhciBCZWhhdmlvclN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9CZWhhdmlvclN1YmplY3RcIik7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGVcIik7XG5mdW5jdGlvbiBwdWJsaXNoQmVoYXZpb3IoaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0XzEuQmVoYXZpb3JTdWJqZWN0KGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViamVjdDsgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMucHVibGlzaEJlaGF2aW9yID0gcHVibGlzaEJlaGF2aW9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaEJlaGF2aW9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnB1Ymxpc2hMYXN0ID0gdm9pZCAwO1xudmFyIEFzeW5jU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL0FzeW5jU3ViamVjdFwiKTtcbnZhciBDb25uZWN0YWJsZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiKTtcbmZ1bmN0aW9uIHB1Ymxpc2hMYXN0KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdCgpO1xuICAgICAgICByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3Q7IH0pO1xuICAgIH07XG59XG5leHBvcnRzLnB1Ymxpc2hMYXN0ID0gcHVibGlzaExhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoTGFzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdWJsaXNoUmVwbGF5ID0gdm9pZCAwO1xudmFyIFJlcGxheVN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9SZXBsYXlTdWJqZWN0XCIpO1xudmFyIG11bHRpY2FzdF8xID0gcmVxdWlyZShcIi4vbXVsdGljYXN0XCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBwdWJsaXNoUmVwbGF5KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNlbGVjdG9yT3JTY2hlZHVsZXIsIHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgaWYgKHNlbGVjdG9yT3JTY2hlZHVsZXIgJiYgIWlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHNlbGVjdG9yT3JTY2hlZHVsZXIpKSB7XG4gICAgICAgIHRpbWVzdGFtcFByb3ZpZGVyID0gc2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdG9yID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc2VsZWN0b3JPclNjaGVkdWxlcikgPyBzZWxlY3Rvck9yU2NoZWR1bGVyIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3QobmV3IFJlcGxheVN1YmplY3RfMS5SZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHRpbWVzdGFtcFByb3ZpZGVyKSwgc2VsZWN0b3IpKHNvdXJjZSk7IH07XG59XG5leHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBwdWJsaXNoUmVwbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFjZVdpdGggPSB2b2lkIDA7XG52YXIgcmFjZV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvcmFjZVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIHJhY2VXaXRoKCkge1xuICAgIHZhciBvdGhlclNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlclNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuICFvdGhlclNvdXJjZXMubGVuZ3RoXG4gICAgICAgID8gaWRlbnRpdHlfMS5pZGVudGl0eVxuICAgICAgICA6IGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHJhY2VfMS5yYWNlSW5pdChfX3NwcmVhZEFycmF5KFtzb3VyY2VdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMucmFjZVdpdGggPSByYWNlV2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhY2VXaXRoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcGVhdCA9IHZvaWQgMDtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciB0aW1lcl8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvdGltZXJcIik7XG5mdW5jdGlvbiByZXBlYXQoY291bnRPckNvbmZpZykge1xuICAgIHZhciBfYTtcbiAgICB2YXIgY291bnQgPSBJbmZpbml0eTtcbiAgICB2YXIgZGVsYXk7XG4gICAgaWYgKGNvdW50T3JDb25maWcgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvdW50T3JDb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAoX2EgPSBjb3VudE9yQ29uZmlnLmNvdW50LCBjb3VudCA9IF9hID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9hLCBkZWxheSA9IGNvdW50T3JDb25maWcuZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY291bnQgPSBjb3VudE9yQ29uZmlnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1wdHlfMS5FTVBUWTsgfVxuICAgICAgICA6IGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBzb0ZhciA9IDA7XG4gICAgICAgICAgICB2YXIgc291cmNlU3ViO1xuICAgICAgICAgICAgdmFyIHJlc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZVN1YiA9PT0gbnVsbCB8fCBzb3VyY2VTdWIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHNvdXJjZVN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyID0gdHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyA/IHRpbWVyXzEudGltZXIoZGVsYXkpIDogaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGRlbGF5KHNvRmFyKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3RpZmllclN1YnNjcmliZXJfMSA9IE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllclN1YnNjcmliZXJfMS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlVG9Tb3VyY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1YnNjcmliZShub3RpZmllclN1YnNjcmliZXJfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlVG9Tb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN5bmNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNvdXJjZVN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKytzb0ZhciA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlU3ViKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNVbnN1YiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKHN5bmNVbnN1Yikge1xuICAgICAgICAgICAgICAgICAgICByZXN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMucmVwZWF0ID0gcmVwZWF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwZWF0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcGVhdFdoZW4gPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJlcGVhdFdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWI7XG4gICAgICAgIHZhciBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNvbXBsZXRpb25zJDtcbiAgICAgICAgdmFyIGlzTm90aWZpZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaXNNYWluQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpc01haW5Db21wbGV0ZSAmJiBpc05vdGlmaWVyQ29tcGxldGUgJiYgKHN1YnNjcmliZXIuY29tcGxldGUoKSwgdHJ1ZSk7IH07XG4gICAgICAgIHZhciBnZXRDb21wbGV0aW9uU3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY29tcGxldGlvbnMkKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbnMkID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKGNvbXBsZXRpb25zJCkpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzTm90aWZpZXJDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbnMkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3Vic2NyaWJlRm9yUmVwZWF0V2hlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzTWFpbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlzTWFpbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAhY2hlY2tDb21wbGV0ZSgpICYmIGdldENvbXBsZXRpb25TdWJqZWN0KCkubmV4dCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKHN5bmNSZXN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmVwZWF0V2hlbigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZXBlYXRXaGVuID0gcmVwZWF0V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmV0cnkgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgdGltZXJfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL3RpbWVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gcmV0cnkoY29uZmlnT3JDb3VudCkge1xuICAgIGlmIChjb25maWdPckNvdW50ID09PSB2b2lkIDApIHsgY29uZmlnT3JDb3VudCA9IEluZmluaXR5OyB9XG4gICAgdmFyIGNvbmZpZztcbiAgICBpZiAoY29uZmlnT3JDb3VudCAmJiB0eXBlb2YgY29uZmlnT3JDb3VudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uZmlnID0gY29uZmlnT3JDb3VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvdW50OiBjb25maWdPckNvdW50LFxuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgX2EgPSBjb25maWcuY291bnQsIGNvdW50ID0gX2EgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX2EsIGRlbGF5ID0gY29uZmlnLmRlbGF5LCBfYiA9IGNvbmZpZy5yZXNldE9uU3VjY2VzcywgcmVzZXRPblN1Y2Nlc3MgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYjtcbiAgICByZXR1cm4gY291bnQgPD0gMFxuICAgICAgICA/IGlkZW50aXR5XzEuaWRlbnRpdHlcbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgc29GYXIgPSAwO1xuICAgICAgICAgICAgdmFyIGlubmVyU3ViO1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZUZvclJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBzeW5jVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXRPblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvRmFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc29GYXIrKyA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWJfMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZpZXIgPSB0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInID8gdGltZXJfMS50aW1lcihkZWxheSkgOiBpbm5lckZyb21fMS5pbm5lckZyb20oZGVsYXkoZXJyLCBzb0ZhcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RpZmllclN1YnNjcmliZXJfMSA9IE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3ViXzEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWJzY3JpYmUobm90aWZpZXJTdWJzY3JpYmVyXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWJfMSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeSgpO1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMucmV0cnkgPSByZXRyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJldHJ5V2hlbiA9IHZvaWQgMDtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gcmV0cnlXaGVuKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGlubmVyU3ViO1xuICAgICAgICB2YXIgc3luY1Jlc3ViID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvcnMkO1xuICAgICAgICB2YXIgc3Vic2NyaWJlRm9yUmV0cnlXaGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3JzJCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMkID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShub3RpZmllcihlcnJvcnMkKSkuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXJTdWIgPyBzdWJzY3JpYmVGb3JSZXRyeVdoZW4oKSA6IChzeW5jUmVzdWIgPSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzJCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMkLm5leHQoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAoc3luY1Jlc3ViKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3luY1Jlc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnlXaGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHN1YnNjcmliZUZvclJldHJ5V2hlbigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZXRyeVdoZW4gPSByZXRyeVdoZW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeVdoZW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2FtcGxlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHNhbXBsZShub3RpZmllcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBub29wXzEubm9vcCkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zYW1wbGUgPSBzYW1wbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2FtcGxlVGltZSA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBzYW1wbGVfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZVwiKTtcbnZhciBpbnRlcnZhbF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW50ZXJ2YWxcIik7XG5mdW5jdGlvbiBzYW1wbGVUaW1lKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICByZXR1cm4gc2FtcGxlXzEuc2FtcGxlKGludGVydmFsXzEuaW50ZXJ2YWwocGVyaW9kLCBzY2hlZHVsZXIpKTtcbn1cbmV4cG9ydHMuc2FtcGxlVGltZSA9IHNhbXBsZVRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGVUaW1lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjYW4gPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBzY2FuSW50ZXJuYWxzXzEgPSByZXF1aXJlKFwiLi9zY2FuSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gc2NhbihhY2N1bXVsYXRvciwgc2VlZCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShzY2FuSW50ZXJuYWxzXzEuc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCB0cnVlKSk7XG59XG5leHBvcnRzLnNjYW4gPSBzY2FuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Nhbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBzZXF1ZW5jZUVxdWFsKGNvbXBhcmVUbywgY29tcGFyYXRvcikge1xuICAgIGlmIChjb21wYXJhdG9yID09PSB2b2lkIDApIHsgY29tcGFyYXRvciA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID09PSBiOyB9OyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGFTdGF0ZSA9IGNyZWF0ZVN0YXRlKCk7XG4gICAgICAgIHZhciBiU3RhdGUgPSBjcmVhdGVTdGF0ZSgpO1xuICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uIChpc0VxdWFsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaXNFcXVhbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjcmVhdGVTdWJzY3JpYmVyID0gZnVuY3Rpb24gKHNlbGZTdGF0ZSwgb3RoZXJTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG90aGVyU3RhdGUuYnVmZmVyLCBjb21wbGV0ZSA9IG90aGVyU3RhdGUuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgPyBlbWl0KGZhbHNlKSA6IHNlbGZTdGF0ZS5idWZmZXIucHVzaChhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICFjb21wYXJhdG9yKGEsIGJ1ZmZlci5zaGlmdCgpKSAmJiBlbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZlN0YXRlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxldGUgPSBvdGhlclN0YXRlLmNvbXBsZXRlLCBidWZmZXIgPSBvdGhlclN0YXRlLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZSAmJiBlbWl0KGJ1ZmZlci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSBudWxsIHx8IHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXF1ZW5jZUVxdWFsU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2VxdWVuY2VFcXVhbFN1YnNjcmliZXI7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihhU3RhdGUsIGJTdGF0ZSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY29tcGFyZVRvKS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihiU3RhdGUsIGFTdGF0ZSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gc2VxdWVuY2VFcXVhbDtcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ1ZmZlcjogW10sXG4gICAgICAgIGNvbXBsZXRlOiBmYWxzZSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VFcXVhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2hhcmUgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmliZXJcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHNoYXJlKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBfYSA9IG9wdGlvbnMuY29ubmVjdG9yLCBjb25uZWN0b3IgPSBfYSA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7IH0gOiBfYSwgX2IgPSBvcHRpb25zLnJlc2V0T25FcnJvciwgcmVzZXRPbkVycm9yID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBvcHRpb25zLnJlc2V0T25Db21wbGV0ZSwgcmVzZXRPbkNvbXBsZXRlID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBvcHRpb25zLnJlc2V0T25SZWZDb3VudFplcm8sIHJlc2V0T25SZWZDb3VudFplcm8gPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kO1xuICAgIHJldHVybiBmdW5jdGlvbiAod3JhcHBlclNvdXJjZSkge1xuICAgICAgICB2YXIgY29ubmVjdGlvbjtcbiAgICAgICAgdmFyIHJlc2V0Q29ubmVjdGlvbjtcbiAgICAgICAgdmFyIHN1YmplY3Q7XG4gICAgICAgIHZhciByZWZDb3VudCA9IDA7XG4gICAgICAgIHZhciBoYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhhc0Vycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNhbmNlbFJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzZXRDb25uZWN0aW9uID09PSBudWxsIHx8IHJlc2V0Q29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzZXRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gc3ViamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGhhc0NvbXBsZXRlZCA9IGhhc0Vycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlc2V0QW5kVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29ubiA9IGNvbm5lY3Rpb247XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICAgICAgY29ubiA9PT0gbnVsbCB8fCBjb25uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICByZWZDb3VudCsrO1xuICAgICAgICAgICAgaWYgKCFoYXNFcnJvcmVkICYmICFoYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxSZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRlc3QgPSAoc3ViamVjdCA9IHN1YmplY3QgIT09IG51bGwgJiYgc3ViamVjdCAhPT0gdm9pZCAwID8gc3ViamVjdCA6IGNvbm5lY3RvcigpKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZWZDb3VudC0tO1xuICAgICAgICAgICAgICAgIGlmIChyZWZDb3VudCA9PT0gMCAmJiAhaGFzRXJyb3JlZCAmJiAhaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0Q29ubmVjdGlvbiA9IGhhbmRsZVJlc2V0KHJlc2V0QW5kVW5zdWJzY3JpYmUsIHJlc2V0T25SZWZDb3VudFplcm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVzdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBpZiAoIWNvbm5lY3Rpb24gJiZcbiAgICAgICAgICAgICAgICByZWZDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0gbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gZGVzdC5uZXh0KHZhbHVlKTsgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q29ubmVjdGlvbiA9IGhhbmRsZVJlc2V0KHJlc2V0LCByZXNldE9uRXJyb3IsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q29ubmVjdGlvbiA9IGhhbmRsZVJlc2V0KHJlc2V0LCByZXNldE9uQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2UpLnN1YnNjcmliZShjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkod3JhcHBlclNvdXJjZSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuc2hhcmUgPSBzaGFyZTtcbmZ1bmN0aW9uIGhhbmRsZVJlc2V0KHJlc2V0LCBvbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgaWYgKG9uID09PSB0cnVlKSB7XG4gICAgICAgIHJlc2V0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvblN1YnNjcmliZXIgPSBuZXcgU3Vic2NyaWJlcl8xLlNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20ob24uYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKSkuc3Vic2NyaWJlKG9uU3Vic2NyaWJlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaGFyZVJlcGxheSA9IHZvaWQgMDtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vUmVwbGF5U3ViamVjdFwiKTtcbnZhciBzaGFyZV8xID0gcmVxdWlyZShcIi4vc2hhcmVcIik7XG5mdW5jdGlvbiBzaGFyZVJlcGxheShjb25maWdPckJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcikge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIHZhciBidWZmZXJTaXplO1xuICAgIHZhciByZWZDb3VudCA9IGZhbHNlO1xuICAgIGlmIChjb25maWdPckJ1ZmZlclNpemUgJiYgdHlwZW9mIGNvbmZpZ09yQnVmZmVyU2l6ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgKF9hID0gY29uZmlnT3JCdWZmZXJTaXplLmJ1ZmZlclNpemUsIGJ1ZmZlclNpemUgPSBfYSA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfYSwgX2IgPSBjb25maWdPckJ1ZmZlclNpemUud2luZG93VGltZSwgd2luZG93VGltZSA9IF9iID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9iLCBfYyA9IGNvbmZpZ09yQnVmZmVyU2l6ZS5yZWZDb3VudCwgcmVmQ291bnQgPSBfYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYywgc2NoZWR1bGVyID0gY29uZmlnT3JCdWZmZXJTaXplLnNjaGVkdWxlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBidWZmZXJTaXplID0gKGNvbmZpZ09yQnVmZmVyU2l6ZSAhPT0gbnVsbCAmJiBjb25maWdPckJ1ZmZlclNpemUgIT09IHZvaWQgMCA/IGNvbmZpZ09yQnVmZmVyU2l6ZSA6IEluZmluaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXJlXzEuc2hhcmUoe1xuICAgICAgICBjb25uZWN0b3I6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBSZXBsYXlTdWJqZWN0XzEuUmVwbGF5U3ViamVjdChidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpOyB9LFxuICAgICAgICByZXNldE9uRXJyb3I6IHRydWUsXG4gICAgICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHJlc2V0T25SZWZDb3VudFplcm86IHJlZkNvdW50LFxuICAgIH0pO1xufVxuZXhwb3J0cy5zaGFyZVJlcGxheSA9IHNoYXJlUmVwbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmVSZXBsYXkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2luZ2xlID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgU2VxdWVuY2VFcnJvcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvU2VxdWVuY2VFcnJvclwiKTtcbnZhciBOb3RGb3VuZEVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9Ob3RGb3VuZEVycm9yXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBzaW5nbGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBzaW5nbGVWYWx1ZTtcbiAgICAgICAgdmFyIHNlZW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNlZW5WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodmFsdWUsIGluZGV4KyssIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSAmJiBzdWJzY3JpYmVyLmVycm9yKG5ldyBTZXF1ZW5jZUVycm9yXzEuU2VxdWVuY2VFcnJvcignVG9vIG1hbnkgbWF0Y2hpbmcgdmFsdWVzJykpO1xuICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzaW5nbGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoc2luZ2xlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3Ioc2VlblZhbHVlID8gbmV3IE5vdEZvdW5kRXJyb3JfMS5Ob3RGb3VuZEVycm9yKCdObyBtYXRjaGluZyB2YWx1ZXMnKSA6IG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zaW5nbGUgPSBzaW5nbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW5nbGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2tpcCA9IHZvaWQgMDtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlclwiKTtcbmZ1bmN0aW9uIHNraXAoY291bnQpIHtcbiAgICByZXR1cm4gZmlsdGVyXzEuZmlsdGVyKGZ1bmN0aW9uIChfLCBpbmRleCkgeyByZXR1cm4gY291bnQgPD0gaW5kZXg7IH0pO1xufVxuZXhwb3J0cy5za2lwID0gc2tpcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNraXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2tpcExhc3QgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBza2lwTGFzdChza2lwQ291bnQpIHtcbiAgICByZXR1cm4gc2tpcENvdW50IDw9IDBcbiAgICAgICAgP1xuICAgICAgICAgICAgaWRlbnRpdHlfMS5pZGVudGl0eVxuICAgICAgICA6IGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciByaW5nID0gbmV3IEFycmF5KHNraXBDb3VudCk7XG4gICAgICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHNlZW4rKztcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVJbmRleCA8IHNraXBDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICByaW5nW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB2YWx1ZUluZGV4ICUgc2tpcENvdW50O1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSByaW5nW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgcmluZ1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJpbmcgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnNraXBMYXN0ID0gc2tpcExhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwTGFzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5za2lwVW50aWwgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xuZnVuY3Rpb24gc2tpcFVudGlsKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHRha2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgc2tpcFN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2tpcFN1YnNjcmliZXIgPT09IG51bGwgfHwgc2tpcFN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNraXBTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0YWtpbmcgPSB0cnVlO1xuICAgICAgICB9LCBub29wXzEubm9vcCk7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShub3RpZmllcikuc3Vic2NyaWJlKHNraXBTdWJzY3JpYmVyKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0YWtpbmcgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5za2lwVW50aWwgPSBza2lwVW50aWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2tpcFdoaWxlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBza2lwV2hpbGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHRha2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuICh0YWtpbmcgfHwgKHRha2luZyA9ICFwcmVkaWNhdGUodmFsdWUsIGluZGV4KyspKSkgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5za2lwV2hpbGUgPSBza2lwV2hpbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwV2hpbGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhcnRXaXRoID0gdm9pZCAwO1xudmFyIGNvbmNhdF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvY29uY2F0XCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHN0YXJ0V2l0aCgpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFsdWVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcmdzXzEucG9wU2NoZWR1bGVyKHZhbHVlcyk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgKHNjaGVkdWxlciA/IGNvbmNhdF8xLmNvbmNhdCh2YWx1ZXMsIHNvdXJjZSwgc2NoZWR1bGVyKSA6IGNvbmNhdF8xLmNvbmNhdCh2YWx1ZXMsIHNvdXJjZSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc3RhcnRXaXRoID0gc3RhcnRXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhcnRXaXRoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaE1hcCA9IHZvaWQgMDtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gc3dpdGNoTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHZhciBjaGVja0NvbXBsZXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNDb21wbGV0ZSAmJiAhaW5uZXJTdWJzY3JpYmVyICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPT09IG51bGwgfHwgaW5uZXJTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbm5lclN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHZhciBpbm5lckluZGV4ID0gMDtcbiAgICAgICAgICAgIHZhciBvdXRlckluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShwcm9qZWN0KHZhbHVlLCBvdXRlckluZGV4KSkuc3Vic2NyaWJlKChpbm5lclN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHsgcmV0dXJuIHN1YnNjcmliZXIubmV4dChyZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yKHZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KyspIDogaW5uZXJWYWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN3aXRjaE1hcCA9IHN3aXRjaE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zd2l0Y2hBbGwgPSB2b2lkIDA7XG52YXIgc3dpdGNoTWFwXzEgPSByZXF1aXJlKFwiLi9zd2l0Y2hNYXBcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gc3dpdGNoQWxsKCkge1xuICAgIHJldHVybiBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAoaWRlbnRpdHlfMS5pZGVudGl0eSk7XG59XG5leHBvcnRzLnN3aXRjaEFsbCA9IHN3aXRjaEFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaEFsbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHZvaWQgMDtcbnZhciBzd2l0Y2hNYXBfMSA9IHJlcXVpcmUoXCIuL3N3aXRjaE1hcFwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gc3dpdGNoTWFwVG8oaW5uZXJPYnNlcnZhYmxlLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikgPyBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXJPYnNlcnZhYmxlOyB9LCByZXN1bHRTZWxlY3RvcikgOiBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXJPYnNlcnZhYmxlOyB9KTtcbn1cbmV4cG9ydHMuc3dpdGNoTWFwVG8gPSBzd2l0Y2hNYXBUbztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcFRvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaFNjYW4gPSB2b2lkIDA7XG52YXIgc3dpdGNoTWFwXzEgPSByZXF1aXJlKFwiLi9zd2l0Y2hNYXBcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHN3aXRjaFNjYW4oYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCk7IH0sIGZ1bmN0aW9uIChfLCBpbm5lclZhbHVlKSB7IHJldHVybiAoKHN0YXRlID0gaW5uZXJWYWx1ZSksIGlubmVyVmFsdWUpOyB9KShzb3VyY2UpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc3dpdGNoU2NhbiA9IHN3aXRjaFNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hTY2FuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRha2VVbnRpbCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG5mdW5jdGlvbiB0YWtlVW50aWwobm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9LCBub29wXzEubm9vcCkpO1xuICAgICAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGFrZVVudGlsID0gdGFrZVVudGlsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZVVudGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRha2VXaGlsZSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGFrZVdoaWxlKHByZWRpY2F0ZSwgaW5jbHVzaXZlKSB7XG4gICAgaWYgKGluY2x1c2l2ZSA9PT0gdm9pZCAwKSB7IGluY2x1c2l2ZSA9IGZhbHNlOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCsrKTtcbiAgICAgICAgICAgIChyZXN1bHQgfHwgaW5jbHVzaXZlKSAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgIXJlc3VsdCAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZVdoaWxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRhcCA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gdGFwKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICB2YXIgdGFwT2JzZXJ2ZXIgPSBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgZXJyb3IgfHwgY29tcGxldGVcbiAgICAgICAgP1xuICAgICAgICAgICAgeyBuZXh0OiBvYnNlcnZlck9yTmV4dCwgZXJyb3I6IGVycm9yLCBjb21wbGV0ZTogY29tcGxldGUgfVxuICAgICAgICA6IG9ic2VydmVyT3JOZXh0O1xuICAgIHJldHVybiB0YXBPYnNlcnZlclxuICAgICAgICA/IGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnN1YnNjcmliZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgdmFyIGlzVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLm5leHQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaXNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCBlcnIpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGlmIChpc1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnVuc3Vic2NyaWJlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYiA9IHRhcE9ic2VydmVyLmZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pXG4gICAgICAgIDpcbiAgICAgICAgICAgIGlkZW50aXR5XzEuaWRlbnRpdHk7XG59XG5leHBvcnRzLnRhcCA9IHRhcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRhcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50aHJvdHRsZSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gdGhyb3R0bGUoZHVyYXRpb25TZWxlY3RvciwgY29uZmlnKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gY29uZmlnICE9PSBudWxsICYmIGNvbmZpZyAhPT0gdm9pZCAwID8gY29uZmlnIDoge30sIF9iID0gX2EubGVhZGluZywgbGVhZGluZyA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gX2EudHJhaWxpbmcsIHRyYWlsaW5nID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2M7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgc2VuZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHRocm90dGxlZCA9IG51bGw7XG4gICAgICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHZhciBlbmRUaHJvdHRsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3R0bGVkID09PSBudWxsIHx8IHRocm90dGxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGhyb3R0bGVkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aHJvdHRsZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRyYWlsaW5nKSB7XG4gICAgICAgICAgICAgICAgc2VuZCgpO1xuICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgY2xlYW51cFRocm90dGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdHRsZWQgPSBudWxsO1xuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzdGFydFRocm90dGxlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRocm90dGxlZCA9IGlubmVyRnJvbV8xLmlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlKSkuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbmRUaHJvdHRsaW5nLCBjbGVhbnVwVGhyb3R0bGluZykpKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNlbmRWYWx1ZTtcbiAgICAgICAgICAgICAgICBzZW5kVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgIWlzQ29tcGxldGUgJiYgc3RhcnRUaHJvdHRsZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgc2VuZFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAhKHRocm90dGxlZCAmJiAhdGhyb3R0bGVkLmNsb3NlZCkgJiYgKGxlYWRpbmcgPyBzZW5kKCkgOiBzdGFydFRocm90dGxlKHZhbHVlKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgISh0cmFpbGluZyAmJiBoYXNWYWx1ZSAmJiB0aHJvdHRsZWQgJiYgIXRocm90dGxlZC5jbG9zZWQpICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy50aHJvdHRsZSA9IHRocm90dGxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3R0bGVUaW1lID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIHRocm90dGxlXzEgPSByZXF1aXJlKFwiLi90aHJvdHRsZVwiKTtcbnZhciB0aW1lcl8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvdGltZXJcIik7XG5mdW5jdGlvbiB0aHJvdHRsZVRpbWUoZHVyYXRpb24sIHNjaGVkdWxlciwgY29uZmlnKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICB2YXIgZHVyYXRpb24kID0gdGltZXJfMS50aW1lcihkdXJhdGlvbiwgc2NoZWR1bGVyKTtcbiAgICByZXR1cm4gdGhyb3R0bGVfMS50aHJvdHRsZShmdW5jdGlvbiAoKSB7IHJldHVybiBkdXJhdGlvbiQ7IH0sIGNvbmZpZyk7XG59XG5leHBvcnRzLnRocm90dGxlVGltZSA9IHRocm90dGxlVGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlVGltZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UaW1lSW50ZXJ2YWwgPSBleHBvcnRzLnRpbWVJbnRlcnZhbCA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGltZUludGVydmFsKHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxhc3QgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG5vdyA9IHNjaGVkdWxlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IG5vdyAtIGxhc3Q7XG4gICAgICAgICAgICBsYXN0ID0gbm93O1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5ldyBUaW1lSW50ZXJ2YWwodmFsdWUsIGludGVydmFsKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZUludGVydmFsID0gdGltZUludGVydmFsO1xudmFyIFRpbWVJbnRlcnZhbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGltZUludGVydmFsKHZhbHVlLCBpbnRlcnZhbCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbDtcbiAgICB9XG4gICAgcmV0dXJuIFRpbWVJbnRlcnZhbDtcbn0oKSk7XG5leHBvcnRzLlRpbWVJbnRlcnZhbCA9IFRpbWVJbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVJbnRlcnZhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50aW1lb3V0V2l0aCA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKFwiLi90aW1lb3V0XCIpO1xuZnVuY3Rpb24gdGltZW91dFdpdGgoZHVlLCB3aXRoT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGZpcnN0O1xuICAgIHZhciBlYWNoO1xuICAgIHZhciBfd2l0aDtcbiAgICBzY2hlZHVsZXIgPSBzY2hlZHVsZXIgIT09IG51bGwgJiYgc2NoZWR1bGVyICE9PSB2b2lkIDAgPyBzY2hlZHVsZXIgOiBhc3luY18xLmFzeW5jO1xuICAgIGlmIChpc0RhdGVfMS5pc1ZhbGlkRGF0ZShkdWUpKSB7XG4gICAgICAgIGZpcnN0ID0gZHVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBlYWNoID0gZHVlO1xuICAgIH1cbiAgICBpZiAod2l0aE9ic2VydmFibGUpIHtcbiAgICAgICAgX3dpdGggPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aXRoT2JzZXJ2YWJsZTsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9ic2VydmFibGUgcHJvdmlkZWQgdG8gc3dpdGNoIHRvJyk7XG4gICAgfVxuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGltZW91dF8xLnRpbWVvdXQoe1xuICAgICAgICBmaXJzdDogZmlyc3QsXG4gICAgICAgIGVhY2g6IGVhY2gsXG4gICAgICAgIHNjaGVkdWxlcjogc2NoZWR1bGVyLFxuICAgICAgICB3aXRoOiBfd2l0aCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZW91dFdpdGggPSB0aW1lb3V0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXRXaXRoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVzdGFtcCA9IHZvaWQgMDtcbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyXCIpO1xudmFyIG1hcF8xID0gcmVxdWlyZShcIi4vbWFwXCIpO1xuZnVuY3Rpb24gdGltZXN0YW1wKHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgaWYgKHRpbWVzdGFtcFByb3ZpZGVyID09PSB2b2lkIDApIHsgdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMS5kYXRlVGltZXN0YW1wUHJvdmlkZXI7IH1cbiAgICByZXR1cm4gbWFwXzEubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKHsgdmFsdWU6IHZhbHVlLCB0aW1lc3RhbXA6IHRpbWVzdGFtcFByb3ZpZGVyLm5vdygpIH0pOyB9KTtcbn1cbmV4cG9ydHMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXN0YW1wLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpbmRvdyA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiB3aW5kb3cod2luZG93Qm91bmRhcmllcykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dTdWJqZWN0ID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdmFyIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3dTdWJqZWN0ID09PSBudWxsIHx8IHdpbmRvd1N1YmplY3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvd1N1YmplY3QubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyb3JIYW5kbGVyKSk7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbSh3aW5kb3dCb3VuZGFyaWVzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgod2luZG93U3ViamVjdCA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpKSk7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wLCBlcnJvckhhbmRsZXIpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QgPT09IG51bGwgfHwgd2luZG93U3ViamVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgd2luZG93U3ViamVjdCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvdyA9IHdpbmRvdztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvdy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53aW5kb3dDb3VudCA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gd2luZG93Q291bnQod2luZG93U2l6ZSwgc3RhcnRXaW5kb3dFdmVyeSkge1xuICAgIGlmIChzdGFydFdpbmRvd0V2ZXJ5ID09PSB2b2lkIDApIHsgc3RhcnRXaW5kb3dFdmVyeSA9IDA7IH1cbiAgICB2YXIgc3RhcnRFdmVyeSA9IHN0YXJ0V2luZG93RXZlcnkgPiAwID8gc3RhcnRXaW5kb3dFdmVyeSA6IHdpbmRvd1NpemU7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpbmRvd3MgPSBbbmV3IFN1YmplY3RfMS5TdWJqZWN0KCldO1xuICAgICAgICB2YXIgc3RhcnRzID0gW107XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dzWzBdLmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgd2luZG93c18xID0gX192YWx1ZXMod2luZG93cyksIHdpbmRvd3NfMV8xID0gd2luZG93c18xLm5leHQoKTsgIXdpbmRvd3NfMV8xLmRvbmU7IHdpbmRvd3NfMV8xID0gd2luZG93c18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2luZG93XzEgPSB3aW5kb3dzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93XzEubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dzXzFfMSAmJiAhd2luZG93c18xXzEuZG9uZSAmJiAoX2EgPSB3aW5kb3dzXzEucmV0dXJuKSkgX2EuY2FsbCh3aW5kb3dzXzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYyA9IGNvdW50IC0gd2luZG93U2l6ZSArIDE7XG4gICAgICAgICAgICBpZiAoYyA+PSAwICYmIGMgJSBzdGFydEV2ZXJ5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKytjb3VudCAlIHN0YXJ0RXZlcnkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93XzIgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnB1c2god2luZG93XzIpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dfMi5hc09ic2VydmFibGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdoaWxlICh3aW5kb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgd2hpbGUgKHdpbmRvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd3Muc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdGFydHMgPSBudWxsO1xuICAgICAgICAgICAgd2luZG93cyA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMud2luZG93Q291bnQgPSB3aW5kb3dDb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvd0NvdW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpbmRvd1RpbWUgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBleGVjdXRlU2NoZWR1bGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZVwiKTtcbmZ1bmN0aW9uIHdpbmRvd1RpbWUod2luZG93VGltZVNwYW4pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBvdGhlckFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSAoX2EgPSBhcmdzXzEucG9wU2NoZWR1bGVyKG90aGVyQXJncykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7XG4gICAgdmFyIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgdmFyIG1heFdpbmRvd1NpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpbmRvd1JlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIHJlc3RhcnRPbkNsb3NlID0gZmFsc2U7XG4gICAgICAgIHZhciBjbG9zZVdpbmRvdyA9IGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3cgPSByZWNvcmQud2luZG93LCBzdWJzID0gcmVjb3JkLnN1YnM7XG4gICAgICAgICAgICB3aW5kb3cuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZSh3aW5kb3dSZWNvcmRzLCByZWNvcmQpO1xuICAgICAgICAgICAgcmVzdGFydE9uQ2xvc2UgJiYgc3RhcnRXaW5kb3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHN0YXJ0V2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHdpbmRvd1JlY29yZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93XzEgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVjb3JkXzEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdzogd2luZG93XzEsXG4gICAgICAgICAgICAgICAgICAgIHN1YnM6IHN1YnMsXG4gICAgICAgICAgICAgICAgICAgIHNlZW46IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB3aW5kb3dSZWNvcmRzLnB1c2gocmVjb3JkXzEpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dfMS5hc09ic2VydmFibGUoKSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xvc2VXaW5kb3cocmVjb3JkXzEpOyB9LCB3aW5kb3dUaW1lU3Bhbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh3aW5kb3dDcmVhdGlvbkludGVydmFsICE9PSBudWxsICYmIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPj0gMCkge1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgc3RhcnRXaW5kb3csIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdGFydE9uQ2xvc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0V2luZG93KCk7XG4gICAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKGNiKSB7IHJldHVybiB3aW5kb3dSZWNvcmRzLnNsaWNlKCkuZm9yRWFjaChjYik7IH07XG4gICAgICAgIHZhciB0ZXJtaW5hdGUgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGxvb3AoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvdyA9IF9hLndpbmRvdztcbiAgICAgICAgICAgICAgICByZXR1cm4gY2Iod2luZG93KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2Ioc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbG9vcChmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLndpbmRvdy5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBtYXhXaW5kb3dTaXplIDw9ICsrcmVjb3JkLnNlZW4gJiYgY2xvc2VXaW5kb3cocmVjb3JkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXJtaW5hdGUoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5jb21wbGV0ZSgpOyB9KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gdGVybWluYXRlKGZ1bmN0aW9uIChjb25zdW1lcikgeyByZXR1cm4gY29uc3VtZXIuZXJyb3IoZXJyKTsgfSk7IH0pKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlY29yZHMgPSBudWxsO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy53aW5kb3dUaW1lID0gd2luZG93VGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvd1RpbWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93VG9nZ2xlID0gdm9pZCAwO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiB3aW5kb3dUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gW107XG4gICAgICAgIHZhciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdoaWxlICgwIDwgd2luZG93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9wZW5pbmdzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChvcGVuVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3cgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgIHdpbmRvd3MucHVzaCh3aW5kb3cpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgY2xvc2VXaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKHdpbmRvd3MsIHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdOb3RpZmllciA9IGlubmVyRnJvbV8xLmlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3Iob3BlblZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24uYWRkKGNsb3NpbmdOb3RpZmllci5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGNsb3NlV2luZG93LCBub29wXzEubm9vcCwgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wKSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB2YXIgd2luZG93c0NvcHkgPSB3aW5kb3dzLnNsaWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHdpbmRvd3NDb3B5XzEgPSBfX3ZhbHVlcyh3aW5kb3dzQ29weSksIHdpbmRvd3NDb3B5XzFfMSA9IHdpbmRvd3NDb3B5XzEubmV4dCgpOyAhd2luZG93c0NvcHlfMV8xLmRvbmU7IHdpbmRvd3NDb3B5XzFfMSA9IHdpbmRvd3NDb3B5XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IHdpbmRvd3NDb3B5XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93XzEubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dzQ29weV8xXzEgJiYgIXdpbmRvd3NDb3B5XzFfMS5kb25lICYmIChfYSA9IHdpbmRvd3NDb3B5XzEucmV0dXJuKSkgX2EuY2FsbCh3aW5kb3dzQ29weV8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoMCA8IHdpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGhhbmRsZUVycm9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoMCA8IHdpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMud2luZG93VG9nZ2xlID0gd2luZG93VG9nZ2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpbmRvd1doZW4gPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHdpbmRvd1doZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpbmRvdztcbiAgICAgICAgdmFyIGNsb3NpbmdTdWJzY3JpYmVyO1xuICAgICAgICB2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9wZW5XaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBjbG9zaW5nU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xvc2luZ1N1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgd2luZG93ID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdOb3RpZmllciA9IGlubmVyRnJvbV8xLmlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3IoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbG9zaW5nTm90aWZpZXIuc3Vic2NyaWJlKChjbG9zaW5nU3Vic2NyaWJlciA9IE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBvcGVuV2luZG93LCBvcGVuV2luZG93LCBoYW5kbGVFcnJvcikpKTtcbiAgICAgICAgfTtcbiAgICAgICAgb3BlbldpbmRvdygpO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHdpbmRvdy5uZXh0KHZhbHVlKTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGhhbmRsZUVycm9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBjbG9zaW5nU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xvc2luZ1N1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHdpbmRvdyA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMud2luZG93V2hlbiA9IHdpbmRvd1doZW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dXaGVuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53aXRoTGF0ZXN0RnJvbSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG5mdW5jdGlvbiB3aXRoTGF0ZXN0RnJvbSgpIHtcbiAgICB2YXIgaW5wdXRzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgaW5wdXRzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBwcm9qZWN0ID0gYXJnc18xLnBvcFJlc3VsdFNlbGVjdG9yKGlucHV0cyk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxlbiA9IGlucHV0cy5sZW5ndGg7XG4gICAgICAgIHZhciBvdGhlclZhbHVlcyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBpbnB1dHMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9KTtcbiAgICAgICAgdmFyIHJlYWR5ID0gZmFsc2U7XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShpbnB1dHNbaV0pLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgb3RoZXJWYWx1ZXNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlYWR5ICYmICFoYXNWYWx1ZVtpXSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZVtpXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIChyZWFkeSA9IGhhc1ZhbHVlLmV2ZXJ5KGlkZW50aXR5XzEuaWRlbnRpdHkpKSAmJiAoaGFzVmFsdWUgPSBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBub29wXzEubm9vcCkpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHJlYWR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IF9fc3ByZWFkQXJyYXkoW3ZhbHVlXSwgX19yZWFkKG90aGVyVmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QgPyBwcm9qZWN0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHZhbHVlcykpKSA6IHZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMud2l0aExhdGVzdEZyb20gPSB3aXRoTGF0ZXN0RnJvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGhMYXRlc3RGcm9tLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnppcEFsbCA9IHZvaWQgMDtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL3ppcFwiKTtcbnZhciBqb2luQWxsSW50ZXJuYWxzXzEgPSByZXF1aXJlKFwiLi9qb2luQWxsSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gemlwQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFsc18xLmpvaW5BbGxJbnRlcm5hbHMoemlwXzEuemlwLCBwcm9qZWN0KTtcbn1cbmV4cG9ydHMuemlwQWxsID0gemlwQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwQWxsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy56aXAgPSB2b2lkIDA7XG52YXIgemlwXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS96aXBcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHppcCgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgemlwXzEuemlwLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKHNvdXJjZXMpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy56aXAgPSB6aXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnppcFdpdGggPSB2b2lkIDA7XG52YXIgemlwXzEgPSByZXF1aXJlKFwiLi96aXBcIik7XG5mdW5jdGlvbiB6aXBXaXRoKCkge1xuICAgIHZhciBvdGhlcklucHV0cyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVySW5wdXRzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiB6aXBfMS56aXAuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJJbnB1dHMpKSk7XG59XG5leHBvcnRzLnppcFdpdGggPSB6aXBXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwV2l0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsID0gZXhwb3J0cy5paWYgPSBleHBvcnRzLmdlbmVyYXRlID0gZXhwb3J0cy5mcm9tRXZlbnRQYXR0ZXJuID0gZXhwb3J0cy5mcm9tRXZlbnQgPSBleHBvcnRzLmZyb20gPSBleHBvcnRzLmZvcmtKb2luID0gZXhwb3J0cy5lbXB0eSA9IGV4cG9ydHMuZGVmZXIgPSBleHBvcnRzLmNvbm5lY3RhYmxlID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBleHBvcnRzLmJpbmROb2RlQ2FsbGJhY2sgPSBleHBvcnRzLmJpbmRDYWxsYmFjayA9IGV4cG9ydHMuVW5zdWJzY3JpcHRpb25FcnJvciA9IGV4cG9ydHMuVGltZW91dEVycm9yID0gZXhwb3J0cy5TZXF1ZW5jZUVycm9yID0gZXhwb3J0cy5PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGV4cG9ydHMuTm90Rm91bmRFcnJvciA9IGV4cG9ydHMuRW1wdHlFcnJvciA9IGV4cG9ydHMuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBleHBvcnRzLmZpcnN0VmFsdWVGcm9tID0gZXhwb3J0cy5sYXN0VmFsdWVGcm9tID0gZXhwb3J0cy5pc09ic2VydmFibGUgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5ub29wID0gZXhwb3J0cy5waXBlID0gZXhwb3J0cy5Ob3RpZmljYXRpb25LaW5kID0gZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBleHBvcnRzLlN1YnNjcmliZXIgPSBleHBvcnRzLlN1YnNjcmlwdGlvbiA9IGV4cG9ydHMuU2NoZWR1bGVyID0gZXhwb3J0cy5WaXJ0dWFsQWN0aW9uID0gZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IGV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lID0gZXhwb3J0cy5xdWV1ZVNjaGVkdWxlciA9IGV4cG9ydHMucXVldWUgPSBleHBvcnRzLmFzeW5jU2NoZWR1bGVyID0gZXhwb3J0cy5hc3luYyA9IGV4cG9ydHMuYXNhcFNjaGVkdWxlciA9IGV4cG9ydHMuYXNhcCA9IGV4cG9ydHMuQXN5bmNTdWJqZWN0ID0gZXhwb3J0cy5SZXBsYXlTdWJqZWN0ID0gZXhwb3J0cy5CZWhhdmlvclN1YmplY3QgPSBleHBvcnRzLlN1YmplY3QgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lcyA9IGV4cG9ydHMub2JzZXJ2YWJsZSA9IGV4cG9ydHMuQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gZXhwb3J0cy5PYnNlcnZhYmxlID0gdm9pZCAwO1xuZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLmV4cGFuZCA9IGV4cG9ydHMuZXhoYXVzdE1hcCA9IGV4cG9ydHMuZXhoYXVzdEFsbCA9IGV4cG9ydHMuZXhoYXVzdCA9IGV4cG9ydHMuZXZlcnkgPSBleHBvcnRzLmVuZFdpdGggPSBleHBvcnRzLmVsZW1lbnRBdCA9IGV4cG9ydHMuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgPSBleHBvcnRzLmRpc3RpbmN0VW50aWxDaGFuZ2VkID0gZXhwb3J0cy5kaXN0aW5jdCA9IGV4cG9ydHMuZGVtYXRlcmlhbGl6ZSA9IGV4cG9ydHMuZGVsYXlXaGVuID0gZXhwb3J0cy5kZWxheSA9IGV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBleHBvcnRzLmRlYm91bmNlVGltZSA9IGV4cG9ydHMuZGVib3VuY2UgPSBleHBvcnRzLmNvdW50ID0gZXhwb3J0cy5jb25uZWN0ID0gZXhwb3J0cy5jb25jYXRXaXRoID0gZXhwb3J0cy5jb25jYXRNYXBUbyA9IGV4cG9ydHMuY29uY2F0TWFwID0gZXhwb3J0cy5jb25jYXRBbGwgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3RXaXRoID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gZXhwb3J0cy5jb21iaW5lQWxsID0gZXhwb3J0cy5jYXRjaEVycm9yID0gZXhwb3J0cy5idWZmZXJXaGVuID0gZXhwb3J0cy5idWZmZXJUb2dnbGUgPSBleHBvcnRzLmJ1ZmZlclRpbWUgPSBleHBvcnRzLmJ1ZmZlckNvdW50ID0gZXhwb3J0cy5idWZmZXIgPSBleHBvcnRzLmF1ZGl0VGltZSA9IGV4cG9ydHMuYXVkaXQgPSBleHBvcnRzLmNvbmZpZyA9IGV4cG9ydHMuTkVWRVIgPSBleHBvcnRzLkVNUFRZID0gZXhwb3J0cy5zY2hlZHVsZWQgPSBleHBvcnRzLnppcCA9IGV4cG9ydHMudXNpbmcgPSBleHBvcnRzLnRpbWVyID0gZXhwb3J0cy50aHJvd0Vycm9yID0gZXhwb3J0cy5yYW5nZSA9IGV4cG9ydHMucmFjZSA9IGV4cG9ydHMucGFydGl0aW9uID0gZXhwb3J0cy5wYWlycyA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSBleHBvcnRzLm9mID0gZXhwb3J0cy5uZXZlciA9IGV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG5leHBvcnRzLnN3aXRjaE1hcCA9IGV4cG9ydHMuc3dpdGNoQWxsID0gZXhwb3J0cy5zdWJzY3JpYmVPbiA9IGV4cG9ydHMuc3RhcnRXaXRoID0gZXhwb3J0cy5za2lwV2hpbGUgPSBleHBvcnRzLnNraXBVbnRpbCA9IGV4cG9ydHMuc2tpcExhc3QgPSBleHBvcnRzLnNraXAgPSBleHBvcnRzLnNpbmdsZSA9IGV4cG9ydHMuc2hhcmVSZXBsYXkgPSBleHBvcnRzLnNoYXJlID0gZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gZXhwb3J0cy5zY2FuID0gZXhwb3J0cy5zYW1wbGVUaW1lID0gZXhwb3J0cy5zYW1wbGUgPSBleHBvcnRzLnJlZkNvdW50ID0gZXhwb3J0cy5yZXRyeVdoZW4gPSBleHBvcnRzLnJldHJ5ID0gZXhwb3J0cy5yZXBlYXRXaGVuID0gZXhwb3J0cy5yZXBlYXQgPSBleHBvcnRzLnJlZHVjZSA9IGV4cG9ydHMucmFjZVdpdGggPSBleHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBleHBvcnRzLnB1Ymxpc2hMYXN0ID0gZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSBleHBvcnRzLnB1Ymxpc2ggPSBleHBvcnRzLnBsdWNrID0gZXhwb3J0cy5wYWlyd2lzZSA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHRXaXRoID0gZXhwb3J0cy5vYnNlcnZlT24gPSBleHBvcnRzLm11bHRpY2FzdCA9IGV4cG9ydHMubWluID0gZXhwb3J0cy5tZXJnZVdpdGggPSBleHBvcnRzLm1lcmdlU2NhbiA9IGV4cG9ydHMubWVyZ2VNYXBUbyA9IGV4cG9ydHMubWVyZ2VNYXAgPSBleHBvcnRzLmZsYXRNYXAgPSBleHBvcnRzLm1lcmdlQWxsID0gZXhwb3J0cy5tYXggPSBleHBvcnRzLm1hdGVyaWFsaXplID0gZXhwb3J0cy5tYXBUbyA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5sYXN0ID0gZXhwb3J0cy5pc0VtcHR5ID0gZXhwb3J0cy5pZ25vcmVFbGVtZW50cyA9IGV4cG9ydHMuZ3JvdXBCeSA9IGV4cG9ydHMuZmlyc3QgPSBleHBvcnRzLmZpbmRJbmRleCA9IGV4cG9ydHMuZmluZCA9IGV4cG9ydHMuZmluYWxpemUgPSB2b2lkIDA7XG5leHBvcnRzLnppcFdpdGggPSBleHBvcnRzLnppcEFsbCA9IGV4cG9ydHMud2l0aExhdGVzdEZyb20gPSBleHBvcnRzLndpbmRvd1doZW4gPSBleHBvcnRzLndpbmRvd1RvZ2dsZSA9IGV4cG9ydHMud2luZG93VGltZSA9IGV4cG9ydHMud2luZG93Q291bnQgPSBleHBvcnRzLndpbmRvdyA9IGV4cG9ydHMudG9BcnJheSA9IGV4cG9ydHMudGltZXN0YW1wID0gZXhwb3J0cy50aW1lb3V0V2l0aCA9IGV4cG9ydHMudGltZW91dCA9IGV4cG9ydHMudGltZUludGVydmFsID0gZXhwb3J0cy50aHJvd0lmRW1wdHkgPSBleHBvcnRzLnRocm90dGxlVGltZSA9IGV4cG9ydHMudGhyb3R0bGUgPSBleHBvcnRzLnRhcCA9IGV4cG9ydHMudGFrZVdoaWxlID0gZXhwb3J0cy50YWtlVW50aWwgPSBleHBvcnRzLnRha2VMYXN0ID0gZXhwb3J0cy50YWtlID0gZXhwb3J0cy5zd2l0Y2hTY2FuID0gZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9PYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JzZXJ2YWJsZV8xLk9ic2VydmFibGU7IH0gfSk7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlOyB9IH0pO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JzZXJ2YWJsZV8xLm9ic2VydmFibGU7IH0gfSk7XG52YXIgYW5pbWF0aW9uRnJhbWVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmltYXRpb25GcmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGlvbkZyYW1lc18xLmFuaW1hdGlvbkZyYW1lczsgfSB9KTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ViamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3ViamVjdF8xLlN1YmplY3Q7IH0gfSk7XG52YXIgQmVoYXZpb3JTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCZWhhdmlvclN1YmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJlaGF2aW9yU3ViamVjdF8xLkJlaGF2aW9yU3ViamVjdDsgfSB9KTtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwbGF5U3ViamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVwbGF5U3ViamVjdF8xLlJlcGxheVN1YmplY3Q7IH0gfSk7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9Bc3luY1N1YmplY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc3luY1N1YmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdDsgfSB9KTtcbnZhciBhc2FwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzYXBfMS5hc2FwOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNhcFNjaGVkdWxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNhcF8xLmFzYXBTY2hlZHVsZXI7IH0gfSk7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9hc3luY1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzeW5jXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3luY18xLmFzeW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXN5bmNTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH0gfSk7XG52YXIgcXVldWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9xdWV1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInF1ZXVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBxdWV1ZV8xLnF1ZXVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVldWVTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHF1ZXVlXzEucXVldWVTY2hlZHVsZXI7IH0gfSk7XG52YXIgYW5pbWF0aW9uRnJhbWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFuaW1hdGlvbkZyYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRpb25GcmFtZV8xLmFuaW1hdGlvbkZyYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGlvbkZyYW1lXzEuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7IH0gfSk7XG52YXIgVmlydHVhbFRpbWVTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZpcnR1YWxUaW1lU2NoZWR1bGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcl8xLlZpcnR1YWxUaW1lU2NoZWR1bGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmlydHVhbEFjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXJfMS5WaXJ0dWFsQWN0aW9uOyB9IH0pO1xudmFyIFNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvU2NoZWR1bGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NoZWR1bGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTY2hlZHVsZXJfMS5TY2hlZHVsZXI7IH0gfSk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJzY3JpcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdWJzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbjsgfSB9KTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJzY3JpYmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3Vic2NyaWJlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3Vic2NyaWJlcl8xLlN1YnNjcmliZXI7IH0gfSk7XG52YXIgTm90aWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9Ob3RpZmljYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb3RpZmljYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vdGlmaWNhdGlvbktpbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbktpbmQ7IH0gfSk7XG52YXIgcGlwZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9waXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZV8xLnBpcGU7IH0gfSk7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9ub29wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9vcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9vcF8xLm5vb3A7IH0gfSk7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvaWRlbnRpdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWRlbnRpdHlfMS5pZGVudGl0eTsgfSB9KTtcbnZhciBpc09ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYnNlcnZhYmxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpc09ic2VydmFibGVfMS5pc09ic2VydmFibGU7IH0gfSk7XG52YXIgbGFzdFZhbHVlRnJvbV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvbGFzdFZhbHVlRnJvbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhc3RWYWx1ZUZyb21cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxhc3RWYWx1ZUZyb21fMS5sYXN0VmFsdWVGcm9tOyB9IH0pO1xudmFyIGZpcnN0VmFsdWVGcm9tXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpcnN0VmFsdWVGcm9tXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmaXJzdFZhbHVlRnJvbV8xLmZpcnN0VmFsdWVGcm9tOyB9IH0pO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3I7IH0gfSk7XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRW1wdHlFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRW1wdHlFcnJvcl8xLkVtcHR5RXJyb3I7IH0gfSk7XG52YXIgTm90Rm91bmRFcnJvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9Ob3RGb3VuZEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm90Rm91bmRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm90Rm91bmRFcnJvcl8xLk5vdEZvdW5kRXJyb3I7IH0gfSk7XG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMS5PYmplY3RVbnN1YnNjcmliZWRFcnJvcjsgfSB9KTtcbnZhciBTZXF1ZW5jZUVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL1NlcXVlbmNlRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXF1ZW5jZUVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTZXF1ZW5jZUVycm9yXzEuU2VxdWVuY2VFcnJvcjsgfSB9KTtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLlRpbWVvdXRFcnJvcjsgfSB9KTtcbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBVbnN1YnNjcmlwdGlvbkVycm9yXzEuVW5zdWJzY3JpcHRpb25FcnJvcjsgfSB9KTtcbnZhciBiaW5kQ2FsbGJhY2tfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluZENhbGxiYWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5kQ2FsbGJhY2tfMS5iaW5kQ2FsbGJhY2s7IH0gfSk7XG52YXIgYmluZE5vZGVDYWxsYmFja18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluZE5vZGVDYWxsYmFja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluZE5vZGVDYWxsYmFja18xLmJpbmROb2RlQ2FsbGJhY2s7IH0gfSk7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluZUxhdGVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3Q7IH0gfSk7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmNhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uY2F0XzEuY29uY2F0OyB9IH0pO1xudmFyIGNvbm5lY3RhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2Nvbm5lY3RhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29ubmVjdGFibGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RhYmxlXzEuY29ubmVjdGFibGU7IH0gfSk7XG52YXIgZGVmZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZGVmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmZXJfMS5kZWZlcjsgfSB9KTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLmVtcHR5OyB9IH0pO1xudmFyIGZvcmtKb2luXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2ZvcmtKb2luXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9ya0pvaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcmtKb2luXzEuZm9ya0pvaW47IH0gfSk7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbV8xLmZyb207IH0gfSk7XG52YXIgZnJvbUV2ZW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21FdmVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbUV2ZW50XzEuZnJvbUV2ZW50OyB9IH0pO1xudmFyIGZyb21FdmVudFBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVyblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21FdmVudFBhdHRlcm5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb21FdmVudFBhdHRlcm5fMS5mcm9tRXZlbnRQYXR0ZXJuOyB9IH0pO1xudmFyIGdlbmVyYXRlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2VuZXJhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyYXRlXzEuZ2VuZXJhdGU7IH0gfSk7XG52YXIgaWlmXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlpZlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWlmXzEuaWlmOyB9IH0pO1xudmFyIGludGVydmFsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW50ZXJ2YWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVydmFsXzEuaW50ZXJ2YWw7IH0gfSk7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvbWVyZ2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVyZ2VfMS5tZXJnZTsgfSB9KTtcbnZhciBuZXZlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5ldmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXZlcl8xLm5ldmVyOyB9IH0pO1xudmFyIG9mXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL29mXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib2ZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9mXzEub2Y7IH0gfSk7XG52YXIgb25FcnJvclJlc3VtZU5leHRfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25FcnJvclJlc3VtZU5leHRfMS5vbkVycm9yUmVzdW1lTmV4dDsgfSB9KTtcbnZhciBwYWlyc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhaXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYWlyc18xLnBhaXJzOyB9IH0pO1xudmFyIHBhcnRpdGlvbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYXJ0aXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRpdGlvbl8xLnBhcnRpdGlvbjsgfSB9KTtcbnZhciByYWNlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlXzEucmFjZTsgfSB9KTtcbnZhciByYW5nZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYW5nZV8xLnJhbmdlOyB9IH0pO1xudmFyIHRocm93RXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm93RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRocm93RXJyb3JfMS50aHJvd0Vycm9yOyB9IH0pO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVyXzEudGltZXI7IH0gfSk7XG52YXIgdXNpbmdfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvdXNpbmdcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2luZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNpbmdfMS51c2luZzsgfSB9KTtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvemlwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemlwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB6aXBfMS56aXA7IH0gfSk7XG52YXIgc2NoZWR1bGVkXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NoZWR1bGVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlZHVsZWRfMS5zY2hlZHVsZWQ7IH0gfSk7XG52YXIgZW1wdHlfMiA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZW1wdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFTVBUWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1wdHlfMi5FTVBUWTsgfSB9KTtcbnZhciBuZXZlcl8yID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5FVkVSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXZlcl8yLk5FVkVSOyB9IH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3R5cGVzXCIpLCBleHBvcnRzKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL2NvbmZpZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnXzEuY29uZmlnOyB9IH0pO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXVkaXRfMS5hdWRpdDsgfSB9KTtcbnZhciBhdWRpdFRpbWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1ZGl0VGltZV8xLmF1ZGl0VGltZTsgfSB9KTtcbnZhciBidWZmZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcl8xLmJ1ZmZlcjsgfSB9KTtcbnZhciBidWZmZXJDb3VudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnVmZmVyQ291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlckNvdW50XzEuYnVmZmVyQ291bnQ7IH0gfSk7XG52YXIgYnVmZmVyVGltZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXJUaW1lXzEuYnVmZmVyVGltZTsgfSB9KTtcbnZhciBidWZmZXJUb2dnbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUb2dnbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlclRvZ2dsZV8xLmJ1ZmZlclRvZ2dsZTsgfSB9KTtcbnZhciBidWZmZXJXaGVuXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJ1ZmZlcldoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcldoZW5fMS5idWZmZXJXaGVuOyB9IH0pO1xudmFyIGNhdGNoRXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2F0Y2hFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2F0Y2hFcnJvcl8xLmNhdGNoRXJyb3I7IH0gfSk7XG52YXIgY29tYmluZUFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lQWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21iaW5lQWxsXzEuY29tYmluZUFsbDsgfSB9KTtcbnZhciBjb21iaW5lTGF0ZXN0QWxsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdEFsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbWJpbmVMYXRlc3RBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbWJpbmVMYXRlc3RBbGxfMS5jb21iaW5lTGF0ZXN0QWxsOyB9IH0pO1xudmFyIGNvbWJpbmVMYXRlc3RXaXRoXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lTGF0ZXN0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdFdpdGhfMS5jb21iaW5lTGF0ZXN0V2l0aDsgfSB9KTtcbnZhciBjb25jYXRBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdEFsbF8xLmNvbmNhdEFsbDsgfSB9KTtcbnZhciBjb25jYXRNYXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcF8xLmNvbmNhdE1hcDsgfSB9KTtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uY2F0TWFwVG9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcFRvXzEuY29uY2F0TWFwVG87IH0gfSk7XG52YXIgY29uY2F0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25jYXRXaXRoXzEuY29uY2F0V2l0aDsgfSB9KTtcbnZhciBjb25uZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbm5lY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RfMS5jb25uZWN0OyB9IH0pO1xudmFyIGNvdW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY291bnRfMS5jb3VudDsgfSB9KTtcbnZhciBkZWJvdW5jZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlYm91bmNlXzEuZGVib3VuY2U7IH0gfSk7XG52YXIgZGVib3VuY2VUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWJvdW5jZVRpbWVfMS5kZWJvdW5jZVRpbWU7IH0gfSk7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRJZkVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0SWZFbXB0eV8xLmRlZmF1bHRJZkVtcHR5OyB9IH0pO1xudmFyIGRlbGF5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfMS5kZWxheTsgfSB9KTtcbnZhciBkZWxheVdoZW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVdoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5V2hlbl8xLmRlbGF5V2hlbjsgfSB9KTtcbnZhciBkZW1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbWF0ZXJpYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbWF0ZXJpYWxpemVfMS5kZW1hdGVyaWFsaXplOyB9IH0pO1xudmFyIGRpc3RpbmN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXN0aW5jdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzdGluY3RfMS5kaXN0aW5jdDsgfSB9KTtcbnZhciBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGluY3RVbnRpbENoYW5nZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQ7IH0gfSk7XG52YXIgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZF8xLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkOyB9IH0pO1xudmFyIGVsZW1lbnRBdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZW1lbnRBdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZWxlbWVudEF0XzEuZWxlbWVudEF0OyB9IH0pO1xudmFyIGVuZFdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW5kV2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5kV2l0aF8xLmVuZFdpdGg7IH0gfSk7XG52YXIgZXZlcnlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9ldmVyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2ZXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBldmVyeV8xLmV2ZXJ5OyB9IH0pO1xudmFyIGV4aGF1c3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhoYXVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhoYXVzdF8xLmV4aGF1c3Q7IH0gfSk7XG52YXIgZXhoYXVzdEFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleGhhdXN0QWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleGhhdXN0QWxsXzEuZXhoYXVzdEFsbDsgfSB9KTtcbnZhciBleGhhdXN0TWFwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4aGF1c3RNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4aGF1c3RNYXBfMS5leGhhdXN0TWFwOyB9IH0pO1xudmFyIGV4cGFuZF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cGFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwYW5kXzEuZXhwYW5kOyB9IH0pO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyXzEuZmlsdGVyOyB9IH0pO1xudmFyIGZpbmFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5hbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluYWxpemVfMS5maW5hbGl6ZTsgfSB9KTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmRfMS5maW5kOyB9IH0pO1xudmFyIGZpbmRJbmRleF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRJbmRleFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEluZGV4XzEuZmluZEluZGV4OyB9IH0pO1xudmFyIGZpcnN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaXJzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlyc3RfMS5maXJzdDsgfSB9KTtcbnZhciBncm91cEJ5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdyb3VwQnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3VwQnlfMS5ncm91cEJ5OyB9IH0pO1xudmFyIGlnbm9yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZ25vcmVFbGVtZW50c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50czsgfSB9KTtcbnZhciBpc0VtcHR5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRW1wdHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzRW1wdHlfMS5pc0VtcHR5OyB9IH0pO1xudmFyIGxhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9sYXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbGFzdF8xLmxhc3Q7IH0gfSk7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBfMS5tYXA7IH0gfSk7XG52YXIgbWFwVG9fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tYXBUb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBUb18xLm1hcFRvOyB9IH0pO1xudmFyIG1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWF0ZXJpYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRlcmlhbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0ZXJpYWxpemVfMS5tYXRlcmlhbGl6ZTsgfSB9KTtcbnZhciBtYXhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tYXhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heF8xLm1heDsgfSB9KTtcbnZhciBtZXJnZUFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlQWxsXzEubWVyZ2VBbGw7IH0gfSk7XG52YXIgZmxhdE1hcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0TWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmbGF0TWFwXzEuZmxhdE1hcDsgfSB9KTtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXA7IH0gfSk7XG52YXIgbWVyZ2VNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXJnZU1hcFRvXzEubWVyZ2VNYXBUbzsgfSB9KTtcbnZhciBtZXJnZVNjYW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVNjYW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlU2Nhbl8xLm1lcmdlU2NhbjsgfSB9KTtcbnZhciBtZXJnZVdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlV2l0aF8xLm1lcmdlV2l0aDsgfSB9KTtcbnZhciBtaW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9taW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbl8xLm1pbjsgfSB9KTtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tdWx0aWNhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aWNhc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdDsgfSB9KTtcbnZhciBvYnNlcnZlT25fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvYnNlcnZlT25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ic2VydmVPbl8xLm9ic2VydmVPbjsgfSB9KTtcbnZhciBvbkVycm9yUmVzdW1lTmV4dFdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0V2l0aF8xLm9uRXJyb3JSZXN1bWVOZXh0V2l0aDsgfSB9KTtcbnZhciBwYWlyd2lzZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3BhaXJ3aXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFpcndpc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhaXJ3aXNlXzEucGFpcndpc2U7IH0gfSk7XG52YXIgcGx1Y2tfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wbHVja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsdWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbHVja18xLnBsdWNrOyB9IH0pO1xudmFyIHB1Ymxpc2hfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaF8xLnB1Ymxpc2g7IH0gfSk7XG52YXIgcHVibGlzaEJlaGF2aW9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaEJlaGF2aW9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoQmVoYXZpb3JfMS5wdWJsaXNoQmVoYXZpb3I7IH0gfSk7XG52YXIgcHVibGlzaExhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInB1Ymxpc2hMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoTGFzdF8xLnB1Ymxpc2hMYXN0OyB9IH0pO1xudmFyIHB1Ymxpc2hSZXBsYXlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaFJlcGxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaFJlcGxheV8xLnB1Ymxpc2hSZXBsYXk7IH0gfSk7XG52YXIgcmFjZVdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yYWNlV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhY2VXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlV2l0aF8xLnJhY2VXaXRoOyB9IH0pO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkdWNlXzEucmVkdWNlOyB9IH0pO1xudmFyIHJlcGVhdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGVhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0XzEucmVwZWF0OyB9IH0pO1xudmFyIHJlcGVhdFdoZW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVwZWF0V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0V2hlbl8xLnJlcGVhdFdoZW47IH0gfSk7XG52YXIgcmV0cnlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yZXRyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeV8xLnJldHJ5OyB9IH0pO1xudmFyIHJldHJ5V2hlbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlXaGVuXzEucmV0cnlXaGVuOyB9IH0pO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZDb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmQ291bnRfMS5yZWZDb3VudDsgfSB9KTtcbnZhciBzYW1wbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYW1wbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNhbXBsZV8xLnNhbXBsZTsgfSB9KTtcbnZhciBzYW1wbGVUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNhbXBsZVRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNhbXBsZVRpbWVfMS5zYW1wbGVUaW1lOyB9IH0pO1xudmFyIHNjYW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zY2FuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NhblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2Nhbl8xLnNjYW47IH0gfSk7XG52YXIgc2VxdWVuY2VFcXVhbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXF1ZW5jZUVxdWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXF1ZW5jZUVxdWFsXzEuc2VxdWVuY2VFcXVhbDsgfSB9KTtcbnZhciBzaGFyZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2hhcmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlXzEuc2hhcmU7IH0gfSk7XG52YXIgc2hhcmVSZXBsYXlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNoYXJlUmVwbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZVJlcGxheV8xLnNoYXJlUmVwbGF5OyB9IH0pO1xudmFyIHNpbmdsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpbmdsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2luZ2xlXzEuc2luZ2xlOyB9IH0pO1xudmFyIHNraXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9za2lwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2tpcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcF8xLnNraXA7IH0gfSk7XG52YXIgc2tpcExhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBza2lwTGFzdF8xLnNraXBMYXN0OyB9IH0pO1xudmFyIHNraXBVbnRpbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBVbnRpbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcFVudGlsXzEuc2tpcFVudGlsOyB9IH0pO1xudmFyIHNraXBXaGlsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBXaGlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcFdoaWxlXzEuc2tpcFdoaWxlOyB9IH0pO1xudmFyIHN0YXJ0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YXJ0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RhcnRXaXRoXzEuc3RhcnRXaXRoOyB9IH0pO1xudmFyIHN1YnNjcmliZU9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdWJzY3JpYmVPblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbjsgfSB9KTtcbnZhciBzd2l0Y2hBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaEFsbF8xLnN3aXRjaEFsbDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcF8xLnN3aXRjaE1hcDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcFRvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3dpdGNoTWFwVG9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcFRvXzEuc3dpdGNoTWFwVG87IH0gfSk7XG52YXIgc3dpdGNoU2Nhbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hTY2FuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzd2l0Y2hTY2FuXzEuc3dpdGNoU2NhbjsgfSB9KTtcbnZhciB0YWtlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRha2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VfMS50YWtlOyB9IH0pO1xudmFyIHRha2VMYXN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZUxhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlTGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFrZUxhc3RfMS50YWtlTGFzdDsgfSB9KTtcbnZhciB0YWtlVW50aWxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlVW50aWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VVbnRpbF8xLnRha2VVbnRpbDsgfSB9KTtcbnZhciB0YWtlV2hpbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlV2hpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VXaGlsZV8xLnRha2VXaGlsZTsgfSB9KTtcbnZhciB0YXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhcF8xLnRhcDsgfSB9KTtcbnZhciB0aHJvdHRsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRocm90dGxlXzEudGhyb3R0bGU7IH0gfSk7XG52YXIgdGhyb3R0bGVUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsZVRpbWVfMS50aHJvdHRsZVRpbWU7IH0gfSk7XG52YXIgdGhyb3dJZkVtcHR5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3dJZkVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvd0lmRW1wdHlfMS50aHJvd0lmRW1wdHk7IH0gfSk7XG52YXIgdGltZUludGVydmFsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZUludGVydmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lSW50ZXJ2YWxfMS50aW1lSW50ZXJ2YWw7IH0gfSk7XG52YXIgdGltZW91dF8yID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aW1lb3V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0XzIudGltZW91dDsgfSB9KTtcbnZhciB0aW1lb3V0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZW91dFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVvdXRXaXRoXzEudGltZW91dFdpdGg7IH0gfSk7XG52YXIgdGltZXN0YW1wXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZXN0YW1wXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lc3RhbXBfMS50aW1lc3RhbXA7IH0gfSk7XG52YXIgdG9BcnJheV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0FycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b0FycmF5XzEudG9BcnJheTsgfSB9KTtcbnZhciB3aW5kb3dfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd18xLndpbmRvdzsgfSB9KTtcbnZhciB3aW5kb3dDb3VudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd0NvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2luZG93Q291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd0NvdW50XzEud2luZG93Q291bnQ7IH0gfSk7XG52YXIgd2luZG93VGltZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dUaW1lXzEud2luZG93VGltZTsgfSB9KTtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUb2dnbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd1RvZ2dsZV8xLndpbmRvd1RvZ2dsZTsgfSB9KTtcbnZhciB3aW5kb3dXaGVuXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpbmRvd1doZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd1doZW5fMS53aW5kb3dXaGVuOyB9IH0pO1xudmFyIHdpdGhMYXRlc3RGcm9tXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb21cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aXRoTGF0ZXN0RnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gd2l0aExhdGVzdEZyb21fMS53aXRoTGF0ZXN0RnJvbTsgfSB9KTtcbnZhciB6aXBBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy96aXBBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ6aXBBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcEFsbF8xLnppcEFsbDsgfSB9KTtcbnZhciB6aXBXaXRoXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInppcFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcFdpdGhfMS56aXBXaXRoOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFydGl0aW9uID0gdm9pZCAwO1xudmFyIG5vdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm90XCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xuZnVuY3Rpb24gcGFydGl0aW9uKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBbZmlsdGVyXzEuZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykoc291cmNlKSwgZmlsdGVyXzEuZmlsdGVyKG5vdF8xLm5vdChwcmVkaWNhdGUsIHRoaXNBcmcpKShzb3VyY2UpXTtcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJ0aXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhY2UgPSB2b2lkIDA7XG52YXIgYXJnc09yQXJnQXJyYXlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NPckFyZ0FycmF5XCIpO1xudmFyIHJhY2VXaXRoXzEgPSByZXF1aXJlKFwiLi9yYWNlV2l0aFwiKTtcbmZ1bmN0aW9uIHJhY2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiByYWNlV2l0aF8xLnJhY2VXaXRoLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoYXJncykpKSk7XG59XG5leHBvcnRzLnJhY2UgPSByYWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFjZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUFsbCA9IGV4cG9ydHMubWVyZ2UgPSBleHBvcnRzLm1heCA9IGV4cG9ydHMubWF0ZXJpYWxpemUgPSBleHBvcnRzLm1hcFRvID0gZXhwb3J0cy5tYXAgPSBleHBvcnRzLmxhc3QgPSBleHBvcnRzLmlzRW1wdHkgPSBleHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gZXhwb3J0cy5ncm91cEJ5ID0gZXhwb3J0cy5maXJzdCA9IGV4cG9ydHMuZmluZEluZGV4ID0gZXhwb3J0cy5maW5kID0gZXhwb3J0cy5maW5hbGl6ZSA9IGV4cG9ydHMuZmlsdGVyID0gZXhwb3J0cy5leHBhbmQgPSBleHBvcnRzLmV4aGF1c3RNYXAgPSBleHBvcnRzLmV4aGF1c3RBbGwgPSBleHBvcnRzLmV4aGF1c3QgPSBleHBvcnRzLmV2ZXJ5ID0gZXhwb3J0cy5lbmRXaXRoID0gZXhwb3J0cy5lbGVtZW50QXQgPSBleHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gZXhwb3J0cy5kaXN0aW5jdFVudGlsQ2hhbmdlZCA9IGV4cG9ydHMuZGlzdGluY3QgPSBleHBvcnRzLmRlbWF0ZXJpYWxpemUgPSBleHBvcnRzLmRlbGF5V2hlbiA9IGV4cG9ydHMuZGVsYXkgPSBleHBvcnRzLmRlZmF1bHRJZkVtcHR5ID0gZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSBleHBvcnRzLmRlYm91bmNlID0gZXhwb3J0cy5jb3VudCA9IGV4cG9ydHMuY29ubmVjdCA9IGV4cG9ydHMuY29uY2F0V2l0aCA9IGV4cG9ydHMuY29uY2F0TWFwVG8gPSBleHBvcnRzLmNvbmNhdE1hcCA9IGV4cG9ydHMuY29uY2F0QWxsID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3RXaXRoID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gZXhwb3J0cy5jb21iaW5lQWxsID0gZXhwb3J0cy5jYXRjaEVycm9yID0gZXhwb3J0cy5idWZmZXJXaGVuID0gZXhwb3J0cy5idWZmZXJUb2dnbGUgPSBleHBvcnRzLmJ1ZmZlclRpbWUgPSBleHBvcnRzLmJ1ZmZlckNvdW50ID0gZXhwb3J0cy5idWZmZXIgPSBleHBvcnRzLmF1ZGl0VGltZSA9IGV4cG9ydHMuYXVkaXQgPSB2b2lkIDA7XG5leHBvcnRzLnRpbWVJbnRlcnZhbCA9IGV4cG9ydHMudGhyb3dJZkVtcHR5ID0gZXhwb3J0cy50aHJvdHRsZVRpbWUgPSBleHBvcnRzLnRocm90dGxlID0gZXhwb3J0cy50YXAgPSBleHBvcnRzLnRha2VXaGlsZSA9IGV4cG9ydHMudGFrZVVudGlsID0gZXhwb3J0cy50YWtlTGFzdCA9IGV4cG9ydHMudGFrZSA9IGV4cG9ydHMuc3dpdGNoU2NhbiA9IGV4cG9ydHMuc3dpdGNoTWFwVG8gPSBleHBvcnRzLnN3aXRjaE1hcCA9IGV4cG9ydHMuc3dpdGNoQWxsID0gZXhwb3J0cy5zdWJzY3JpYmVPbiA9IGV4cG9ydHMuc3RhcnRXaXRoID0gZXhwb3J0cy5za2lwV2hpbGUgPSBleHBvcnRzLnNraXBVbnRpbCA9IGV4cG9ydHMuc2tpcExhc3QgPSBleHBvcnRzLnNraXAgPSBleHBvcnRzLnNpbmdsZSA9IGV4cG9ydHMuc2hhcmVSZXBsYXkgPSBleHBvcnRzLnNoYXJlID0gZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gZXhwb3J0cy5zY2FuID0gZXhwb3J0cy5zYW1wbGVUaW1lID0gZXhwb3J0cy5zYW1wbGUgPSBleHBvcnRzLnJlZkNvdW50ID0gZXhwb3J0cy5yZXRyeVdoZW4gPSBleHBvcnRzLnJldHJ5ID0gZXhwb3J0cy5yZXBlYXRXaGVuID0gZXhwb3J0cy5yZXBlYXQgPSBleHBvcnRzLnJlZHVjZSA9IGV4cG9ydHMucmFjZVdpdGggPSBleHBvcnRzLnJhY2UgPSBleHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBleHBvcnRzLnB1Ymxpc2hMYXN0ID0gZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSBleHBvcnRzLnB1Ymxpc2ggPSBleHBvcnRzLnBsdWNrID0gZXhwb3J0cy5wYXJ0aXRpb24gPSBleHBvcnRzLnBhaXJ3aXNlID0gZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IGV4cG9ydHMub2JzZXJ2ZU9uID0gZXhwb3J0cy5tdWx0aWNhc3QgPSBleHBvcnRzLm1pbiA9IGV4cG9ydHMubWVyZ2VXaXRoID0gZXhwb3J0cy5tZXJnZVNjYW4gPSBleHBvcnRzLm1lcmdlTWFwVG8gPSBleHBvcnRzLm1lcmdlTWFwID0gZXhwb3J0cy5mbGF0TWFwID0gdm9pZCAwO1xuZXhwb3J0cy56aXBXaXRoID0gZXhwb3J0cy56aXBBbGwgPSBleHBvcnRzLnppcCA9IGV4cG9ydHMud2l0aExhdGVzdEZyb20gPSBleHBvcnRzLndpbmRvd1doZW4gPSBleHBvcnRzLndpbmRvd1RvZ2dsZSA9IGV4cG9ydHMud2luZG93VGltZSA9IGV4cG9ydHMud2luZG93Q291bnQgPSBleHBvcnRzLndpbmRvdyA9IGV4cG9ydHMudG9BcnJheSA9IGV4cG9ydHMudGltZXN0YW1wID0gZXhwb3J0cy50aW1lb3V0V2l0aCA9IGV4cG9ydHMudGltZW91dCA9IHZvaWQgMDtcbnZhciBhdWRpdF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1ZGl0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdWRpdF8xLmF1ZGl0OyB9IH0pO1xudmFyIGF1ZGl0VGltZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1ZGl0VGltZV8xLmF1ZGl0VGltZTsgfSB9KTtcbnZhciBidWZmZXJfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnVmZmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXJfMS5idWZmZXI7IH0gfSk7XG52YXIgYnVmZmVyQ291bnRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyQ291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJDb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyQ291bnRfMS5idWZmZXJDb3VudDsgfSB9KTtcbnZhciBidWZmZXJUaW1lXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXJUaW1lXzEuYnVmZmVyVGltZTsgfSB9KTtcbnZhciBidWZmZXJUb2dnbGVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyVG9nZ2xlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnVmZmVyVG9nZ2xlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXJUb2dnbGVfMS5idWZmZXJUb2dnbGU7IH0gfSk7XG52YXIgYnVmZmVyV2hlbl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnVmZmVyV2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyV2hlbl8xLmJ1ZmZlcldoZW47IH0gfSk7XG52YXIgY2F0Y2hFcnJvcl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2F0Y2hFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2F0Y2hFcnJvcl8xLmNhdGNoRXJyb3I7IH0gfSk7XG52YXIgY29tYmluZUFsbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lQWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluZUFsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUFsbF8xLmNvbWJpbmVBbGw7IH0gfSk7XG52YXIgY29tYmluZUxhdGVzdEFsbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluZUxhdGVzdEFsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdEFsbF8xLmNvbWJpbmVMYXRlc3RBbGw7IH0gfSk7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluZUxhdGVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3Q7IH0gfSk7XG52YXIgY29tYmluZUxhdGVzdFdpdGhfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lTGF0ZXN0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdFdpdGhfMS5jb21iaW5lTGF0ZXN0V2l0aDsgfSB9KTtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uY2F0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25jYXRfMS5jb25jYXQ7IH0gfSk7XG52YXIgY29uY2F0QWxsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdEFsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmNhdEFsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uY2F0QWxsXzEuY29uY2F0QWxsOyB9IH0pO1xudmFyIGNvbmNhdE1hcF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcF8xLmNvbmNhdE1hcDsgfSB9KTtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBUb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmNhdE1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25jYXRNYXBUb18xLmNvbmNhdE1hcFRvOyB9IH0pO1xudmFyIGNvbmNhdFdpdGhfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0V2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmNhdFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdFdpdGhfMS5jb25jYXRXaXRoOyB9IH0pO1xudmFyIGNvbm5lY3RfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbm5lY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RfMS5jb25uZWN0OyB9IH0pO1xudmFyIGNvdW50XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvdW50XzEuY291bnQ7IH0gfSk7XG52YXIgZGVib3VuY2VfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWJvdW5jZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVib3VuY2VfMS5kZWJvdW5jZTsgfSB9KTtcbnZhciBkZWJvdW5jZVRpbWVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWJvdW5jZVRpbWVfMS5kZWJvdW5jZVRpbWU7IH0gfSk7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0SWZFbXB0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eTsgfSB9KTtcbnZhciBkZWxheV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWxheV8xLmRlbGF5OyB9IH0pO1xudmFyIGRlbGF5V2hlbl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVdoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5V2hlbl8xLmRlbGF5V2hlbjsgfSB9KTtcbnZhciBkZW1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlbWF0ZXJpYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZW1hdGVyaWFsaXplXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZW1hdGVyaWFsaXplXzEuZGVtYXRlcmlhbGl6ZTsgfSB9KTtcbnZhciBkaXN0aW5jdF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRpc3RpbmN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkaXN0aW5jdF8xLmRpc3RpbmN0OyB9IH0pO1xudmFyIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGluY3RVbnRpbENoYW5nZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQ7IH0gfSk7XG52YXIgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RVbnRpbEtleUNoYW5nZWRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMS5kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZDsgfSB9KTtcbnZhciBlbGVtZW50QXRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlbWVudEF0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbGVtZW50QXRfMS5lbGVtZW50QXQ7IH0gfSk7XG52YXIgZW5kV2l0aF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW5kV2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5kV2l0aF8xLmVuZFdpdGg7IH0gfSk7XG52YXIgZXZlcnlfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmVyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXZlcnlfMS5ldmVyeTsgfSB9KTtcbnZhciBleGhhdXN0XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleGhhdXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleGhhdXN0XzEuZXhoYXVzdDsgfSB9KTtcbnZhciBleGhhdXN0QWxsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleGhhdXN0QWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleGhhdXN0QWxsXzEuZXhoYXVzdEFsbDsgfSB9KTtcbnZhciBleGhhdXN0TWFwXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleGhhdXN0TWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleGhhdXN0TWFwXzEuZXhoYXVzdE1hcDsgfSB9KTtcbnZhciBleHBhbmRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleHBhbmRfMS5leHBhbmQ7IH0gfSk7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyXzEuZmlsdGVyOyB9IH0pO1xudmFyIGZpbmFsaXplXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmFsaXplXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmluYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmFsaXplXzEuZmluYWxpemU7IH0gfSk7XG52YXIgZmluZF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9maW5kXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmluZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZF8xLmZpbmQ7IH0gfSk7XG52YXIgZmluZEluZGV4XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRJbmRleFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEluZGV4XzEuZmluZEluZGV4OyB9IH0pO1xudmFyIGZpcnN0XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpcnN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmlyc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpcnN0XzEuZmlyc3Q7IH0gfSk7XG52YXIgZ3JvdXBCeV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9ncm91cEJ5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3JvdXBCeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ3JvdXBCeV8xLmdyb3VwQnk7IH0gfSk7XG52YXIgaWdub3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZ25vcmVFbGVtZW50c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50czsgfSB9KTtcbnZhciBpc0VtcHR5XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0VtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpc0VtcHR5XzEuaXNFbXB0eTsgfSB9KTtcbnZhciBsYXN0XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsYXN0XzEubGFzdDsgfSB9KTtcbnZhciBtYXBfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBfMS5tYXA7IH0gfSk7XG52YXIgbWFwVG9fMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwVG9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXBUb1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFwVG9fMS5tYXBUbzsgfSB9KTtcbnZhciBtYXRlcmlhbGl6ZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9tYXRlcmlhbGl6ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hdGVyaWFsaXplXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXRlcmlhbGl6ZV8xLm1hdGVyaWFsaXplOyB9IH0pO1xudmFyIG1heF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9tYXhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heF8xLm1heDsgfSB9KTtcbnZhciBtZXJnZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXJnZV8xLm1lcmdlOyB9IH0pO1xudmFyIG1lcmdlQWxsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlQWxsXzEubWVyZ2VBbGw7IH0gfSk7XG52YXIgZmxhdE1hcF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9mbGF0TWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmxhdE1hcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmxhdE1hcF8xLmZsYXRNYXA7IH0gfSk7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU1hcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVyZ2VNYXBfMS5tZXJnZU1hcDsgfSB9KTtcbnZhciBtZXJnZU1hcFRvXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXJnZU1hcFRvXzEubWVyZ2VNYXBUbzsgfSB9KTtcbnZhciBtZXJnZVNjYW5fMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VTY2FuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VTY2FuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXJnZVNjYW5fMS5tZXJnZVNjYW47IH0gfSk7XG52YXIgbWVyZ2VXaXRoXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlV2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVyZ2VXaXRoXzEubWVyZ2VXaXRoOyB9IH0pO1xudmFyIG1pbl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9taW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbl8xLm1pbjsgfSB9KTtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGljYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3Q7IH0gfSk7XG52YXIgb2JzZXJ2ZU9uXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9ic2VydmVPblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JzZXJ2ZU9uXzEub2JzZXJ2ZU9uOyB9IH0pO1xudmFyIG9uRXJyb3JSZXN1bWVOZXh0V2l0aF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25FcnJvclJlc3VtZU5leHRXaXRoXzEub25FcnJvclJlc3VtZU5leHQ7IH0gfSk7XG52YXIgcGFpcndpc2VfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYWlyd2lzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFpcndpc2VfMS5wYWlyd2lzZTsgfSB9KTtcbnZhciBwYXJ0aXRpb25fMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcGFydGl0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFydGl0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXJ0aXRpb25fMS5wYXJ0aXRpb247IH0gfSk7XG52YXIgcGx1Y2tfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcGx1Y2tcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbHVja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGx1Y2tfMS5wbHVjazsgfSB9KTtcbnZhciBwdWJsaXNoXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwdWJsaXNoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoXzEucHVibGlzaDsgfSB9KTtcbnZhciBwdWJsaXNoQmVoYXZpb3JfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaEJlaGF2aW9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoQmVoYXZpb3JfMS5wdWJsaXNoQmVoYXZpb3I7IH0gfSk7XG52YXIgcHVibGlzaExhc3RfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaExhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwdWJsaXNoTGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaExhc3RfMS5wdWJsaXNoTGFzdDsgfSB9KTtcbnZhciBwdWJsaXNoUmVwbGF5XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwdWJsaXNoUmVwbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoUmVwbGF5XzEucHVibGlzaFJlcGxheTsgfSB9KTtcbnZhciByYWNlXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlXzEucmFjZTsgfSB9KTtcbnZhciByYWNlV2l0aF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9yYWNlV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhY2VXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlV2l0aF8xLnJhY2VXaXRoOyB9IH0pO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWR1Y2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZTsgfSB9KTtcbnZhciByZXBlYXRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVwZWF0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXBlYXRfMS5yZXBlYXQ7IH0gfSk7XG52YXIgcmVwZWF0V2hlbl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVwZWF0V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0V2hlbl8xLnJlcGVhdFdoZW47IH0gfSk7XG52YXIgcmV0cnlfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXRyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlfMS5yZXRyeTsgfSB9KTtcbnZhciByZXRyeVdoZW5fMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmV0cnlXaGVuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeVdoZW5fMS5yZXRyeVdoZW47IH0gfSk7XG52YXIgcmVmQ291bnRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZDb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmQ291bnRfMS5yZWZDb3VudDsgfSB9KTtcbnZhciBzYW1wbGVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2FtcGxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzYW1wbGVfMS5zYW1wbGU7IH0gfSk7XG52YXIgc2FtcGxlVGltZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2FtcGxlVGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2FtcGxlVGltZV8xLnNhbXBsZVRpbWU7IH0gfSk7XG52YXIgc2Nhbl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zY2FuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NhblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2Nhbl8xLnNjYW47IH0gfSk7XG52YXIgc2VxdWVuY2VFcXVhbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VxdWVuY2VFcXVhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VxdWVuY2VFcXVhbF8xLnNlcXVlbmNlRXF1YWw7IH0gfSk7XG52YXIgc2hhcmVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaGFyZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2hhcmVfMS5zaGFyZTsgfSB9KTtcbnZhciBzaGFyZVJlcGxheV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNoYXJlUmVwbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZVJlcGxheV8xLnNoYXJlUmVwbGF5OyB9IH0pO1xudmFyIHNpbmdsZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaW5nbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNpbmdsZV8xLnNpbmdsZTsgfSB9KTtcbnZhciBza2lwXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJza2lwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBza2lwXzEuc2tpcDsgfSB9KTtcbnZhciBza2lwTGFzdF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBza2lwTGFzdF8xLnNraXBMYXN0OyB9IH0pO1xudmFyIHNraXBVbnRpbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJza2lwVW50aWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNraXBVbnRpbF8xLnNraXBVbnRpbDsgfSB9KTtcbnZhciBza2lwV2hpbGVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2tpcFdoaWxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBza2lwV2hpbGVfMS5za2lwV2hpbGU7IH0gfSk7XG52YXIgc3RhcnRXaXRoXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YXJ0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RhcnRXaXRoXzEuc3RhcnRXaXRoOyB9IH0pO1xudmFyIHN1YnNjcmliZU9uXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3Vic2NyaWJlT25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZU9uXzEuc3Vic2NyaWJlT247IH0gfSk7XG52YXIgc3dpdGNoQWxsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN3aXRjaEFsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3dpdGNoQWxsXzEuc3dpdGNoQWxsOyB9IH0pO1xudmFyIHN3aXRjaE1hcF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcF8xLnN3aXRjaE1hcDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBUb18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBUb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN3aXRjaE1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzd2l0Y2hNYXBUb18xLnN3aXRjaE1hcFRvOyB9IH0pO1xudmFyIHN3aXRjaFNjYW5fMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoU2NhblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN3aXRjaFNjYW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaFNjYW5fMS5zd2l0Y2hTY2FuOyB9IH0pO1xudmFyIHRha2VfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRha2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VfMS50YWtlOyB9IH0pO1xudmFyIHRha2VMYXN0XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VMYXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGFrZUxhc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VMYXN0XzEudGFrZUxhc3Q7IH0gfSk7XG52YXIgdGFrZVVudGlsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VVbnRpbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRha2VVbnRpbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFrZVVudGlsXzEudGFrZVVudGlsOyB9IH0pO1xudmFyIHRha2VXaGlsZV8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlV2hpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VXaGlsZV8xLnRha2VXaGlsZTsgfSB9KTtcbnZhciB0YXBfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0YXBfMS50YXA7IH0gfSk7XG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aHJvdHRsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGVfMS50aHJvdHRsZTsgfSB9KTtcbnZhciB0aHJvdHRsZVRpbWVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsZVRpbWVfMS50aHJvdHRsZVRpbWU7IH0gfSk7XG52YXIgdGhyb3dJZkVtcHR5XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm93SWZFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm93SWZFbXB0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3dJZkVtcHR5XzEudGhyb3dJZkVtcHR5OyB9IH0pO1xudmFyIHRpbWVJbnRlcnZhbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aW1lSW50ZXJ2YWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVJbnRlcnZhbF8xLnRpbWVJbnRlcnZhbDsgfSB9KTtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aW1lb3V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0XzEudGltZW91dDsgfSB9KTtcbnZhciB0aW1lb3V0V2l0aF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0V2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRpbWVvdXRXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0V2l0aF8xLnRpbWVvdXRXaXRoOyB9IH0pO1xudmFyIHRpbWVzdGFtcF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy90aW1lc3RhbXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aW1lc3RhbXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVzdGFtcF8xLnRpbWVzdGFtcDsgfSB9KTtcbnZhciB0b0FycmF5XzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0FycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b0FycmF5XzEudG9BcnJheTsgfSB9KTtcbnZhciB3aW5kb3dfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2luZG93XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dfMS53aW5kb3c7IH0gfSk7XG52YXIgd2luZG93Q291bnRfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dDb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93Q291bnRfMS53aW5kb3dDb3VudDsgfSB9KTtcbnZhciB3aW5kb3dUaW1lXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dUaW1lXzEud2luZG93VGltZTsgfSB9KTtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93VG9nZ2xlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2luZG93VG9nZ2xlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dUb2dnbGVfMS53aW5kb3dUb2dnbGU7IH0gfSk7XG52YXIgd2luZG93V2hlbl8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2luZG93V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93V2hlbl8xLndpbmRvd1doZW47IH0gfSk7XG52YXIgd2l0aExhdGVzdEZyb21fMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb21cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aXRoTGF0ZXN0RnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gd2l0aExhdGVzdEZyb21fMS53aXRoTGF0ZXN0RnJvbTsgfSB9KTtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemlwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB6aXBfMS56aXA7IH0gfSk7XG52YXIgemlwQWxsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInppcEFsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gemlwQWxsXzEuemlwQWxsOyB9IH0pO1xudmFyIHppcFdpdGhfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInppcFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcFdpdGhfMS56aXBXaXRoOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgnICcsICcsJylcblx0XHRcdC5zcGxpdCgnLCcpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pO1xuXG5cdFx0Zm9yIChjb25zdCBucyBvZiBzcGxpdCkge1xuXHRcdFx0aWYgKG5zWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChucy5zbGljZSgxKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcyBhIG5hbWVzcGFjZSB0ZW1wbGF0ZSwgaG9ub3Jpbmdcblx0ICogYXN0ZXJpc2tzIGFzIHdpbGRjYXJkcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdGVtcGxhdGVcblx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0ICovXG5cdGZ1bmN0aW9uIG1hdGNoZXNUZW1wbGF0ZShzZWFyY2gsIHRlbXBsYXRlKSB7XG5cdFx0bGV0IHNlYXJjaEluZGV4ID0gMDtcblx0XHRsZXQgdGVtcGxhdGVJbmRleCA9IDA7XG5cdFx0bGV0IHN0YXJJbmRleCA9IC0xO1xuXHRcdGxldCBtYXRjaEluZGV4ID0gMDtcblxuXHRcdHdoaWxlIChzZWFyY2hJbmRleCA8IHNlYXJjaC5sZW5ndGgpIHtcblx0XHRcdGlmICh0ZW1wbGF0ZUluZGV4IDwgdGVtcGxhdGUubGVuZ3RoICYmICh0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gc2VhcmNoW3NlYXJjaEluZGV4XSB8fCB0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gJyonKSkge1xuXHRcdFx0XHQvLyBNYXRjaCBjaGFyYWN0ZXIgb3IgcHJvY2VlZCB3aXRoIHdpbGRjYXJkXG5cdFx0XHRcdGlmICh0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gJyonKSB7XG5cdFx0XHRcdFx0c3RhckluZGV4ID0gdGVtcGxhdGVJbmRleDtcblx0XHRcdFx0XHRtYXRjaEluZGV4ID0gc2VhcmNoSW5kZXg7XG5cdFx0XHRcdFx0dGVtcGxhdGVJbmRleCsrOyAvLyBTa2lwIHRoZSAnKidcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZWFyY2hJbmRleCsrO1xuXHRcdFx0XHRcdHRlbXBsYXRlSW5kZXgrKztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChzdGFySW5kZXggIT09IC0xKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmVnYXRlZC1jb25kaXRpb25cblx0XHRcdFx0Ly8gQmFja3RyYWNrIHRvIHRoZSBsYXN0ICcqJyBhbmQgdHJ5IHRvIG1hdGNoIG1vcmUgY2hhcmFjdGVyc1xuXHRcdFx0XHR0ZW1wbGF0ZUluZGV4ID0gc3RhckluZGV4ICsgMTtcblx0XHRcdFx0bWF0Y2hJbmRleCsrO1xuXHRcdFx0XHRzZWFyY2hJbmRleCA9IG1hdGNoSW5kZXg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIE5vIG1hdGNoXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIHRyYWlsaW5nICcqJyBpbiB0ZW1wbGF0ZVxuXHRcdHdoaWxlICh0ZW1wbGF0ZUluZGV4IDwgdGVtcGxhdGUubGVuZ3RoICYmIHRlbXBsYXRlW3RlbXBsYXRlSW5kZXhdID09PSAnKicpIHtcblx0XHRcdHRlbXBsYXRlSW5kZXgrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGVtcGxhdGVJbmRleCA9PT0gdGVtcGxhdGUubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcyxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0Zm9yIChjb25zdCBza2lwIG9mIGNyZWF0ZURlYnVnLnNraXBzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1RlbXBsYXRlKG5hbWUsIHNraXApKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IG5zIG9mIGNyZWF0ZURlYnVnLm5hbWVzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1RlbXBsYXRlKG5hbWUsIG5zKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwKICAgICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IG07XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgKG0gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSkgJiYgcGFyc2VJbnQobVsxXSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2ID0gcHJvY2Vzcy5hcmd2KSA9PiB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1uZXZlcicpKSB7XG5cdGZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gMTtcbn1cblxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAxO1xuXHR9IGVsc2UgaWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCBzdHJlYW1Jc1RUWSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMSkpKSxcblx0c3RkZXJyOiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMikpKVxufTtcbiIsCiAgICAiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLAogICAgIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmRBY3R1YWxFeGVjdXRhYmxlID0gZmluZEFjdHVhbEV4ZWN1dGFibGU7XG5leHBvcnRzLnNwYXduRGV0YWNoZWQgPSBzcGF3bkRldGFjaGVkO1xuZXhwb3J0cy5zcGF3biA9IHNwYXduO1xuZXhwb3J0cy5zcGF3bkRldGFjaGVkUHJvbWlzZSA9IHNwYXduRGV0YWNoZWRQcm9taXNlO1xuZXhwb3J0cy5zcGF3blByb21pc2UgPSBzcGF3blByb21pc2U7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xudmFyIG5ldCA9IHJlcXVpcmUoXCJuZXRcIik7XG52YXIgc2ZzID0gcmVxdWlyZShcImZzXCIpO1xudmFyIHJ4anNfMSA9IHJlcXVpcmUoXCJyeGpzXCIpO1xudmFyIG9wZXJhdG9yc18xID0gcmVxdWlyZShcInJ4anMvb3BlcmF0b3JzXCIpO1xudmFyIGNoaWxkX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xudmFyIGRlYnVnXzEgPSByZXF1aXJlKFwiZGVidWdcIik7XG52YXIgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xudmFyIGQgPSAoMCwgZGVidWdfMS5kZWZhdWx0KShcInNwYXduLXJ4XCIpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXZhci1yZXF1aXJlc1xuLyoqXG4gKiBzdGF0IGEgZmlsZSBidXQgZG9uJ3QgdGhyb3cgaWYgaXQgZG9lc24ndCBleGlzdFxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gZmlsZSBUaGUgcGF0aCB0byBhIGZpbGVcbiAqIEByZXR1cm4ge1N0YXRzfSAgICAgICBUaGUgc3RhdHMgc3RydWN0dXJlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc3RhdFN5bmNOb0V4Y2VwdGlvbihmaWxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNmcy5zdGF0U3luYyhmaWxlKTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbi8qKlxuICogU2VhcmNoIFBBVEggdG8gc2VlIGlmIGEgZmlsZSBleGlzdHMgaW4gYW55IG9mIHRoZSBwYXRoIGZvbGRlcnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBleGUgVGhlIGZpbGUgdG8gc2VhcmNoIGZvclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgQSBmdWxseSBxdWFsaWZpZWQgcGF0aCwgb3IgdGhlIG9yaWdpbmFsIHBhdGggaWYgbm90aGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgaXMgZm91bmRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBydW5Eb3duUGF0aChleGUpIHtcbiAgICAvLyBOQjogV2luZG93cyB3b24ndCBzZWFyY2ggUEFUSCBsb29raW5nIGZvciBleGVjdXRhYmxlcyBpbiBzcGF3biBsaWtlXG4gICAgLy8gUG9zaXggZG9lc1xuICAgIC8vIEZpbGVzIHdpdGggYW55IGRpcmVjdG9yeSBwYXRoIGRvbid0IGdldCB0aGlzIGFwcGxpZWRcbiAgICBpZiAoZXhlLm1hdGNoKC9bXFxcXC9dLykpIHtcbiAgICAgICAgZChcIlBhdGggaGFzIHNsYXNoIGluIGRpcmVjdG9yeSwgYmFpbGluZ1wiKTtcbiAgICAgICAgcmV0dXJuIGV4ZTtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IHBhdGguam9pbihcIi5cIiwgZXhlKTtcbiAgICBpZiAoc3RhdFN5bmNOb0V4Y2VwdGlvbih0YXJnZXQpKSB7XG4gICAgICAgIGQoXCJGb3VuZCBleGVjdXRhYmxlIGluIGN1cnJlY3QgZGlyZWN0b3J5OiBcIi5jb25jYXQodGFyZ2V0KSk7XG4gICAgICAgIHJldHVybiBzZnMucmVhbHBhdGhTeW5jKHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBoYXlzdGFjayA9IHByb2Nlc3MuZW52LlBBVEguc3BsaXQoaXNXaW5kb3dzID8gXCI7XCIgOiBcIjpcIik7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBoYXlzdGFja18xID0gaGF5c3RhY2s7IF9pIDwgaGF5c3RhY2tfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIHAgPSBoYXlzdGFja18xW19pXTtcbiAgICAgICAgdmFyIG5lZWRsZSA9IHBhdGguam9pbihwLCBleGUpO1xuICAgICAgICBpZiAoc3RhdFN5bmNOb0V4Y2VwdGlvbihuZWVkbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2ZzLnJlYWxwYXRoU3luYyhuZWVkbGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGQoXCJGYWlsZWQgdG8gZmluZCBleGVjdXRhYmxlIGFueXdoZXJlIGluIHBhdGhcIik7XG4gICAgcmV0dXJuIGV4ZTtcbn1cbi8qKlxuICogRmluZHMgdGhlIGFjdHVhbCBleGVjdXRhYmxlIGFuZCBwYXJhbWV0ZXJzIHRvIHJ1biBvbiBXaW5kb3dzLiBUaGlzIG1ldGhvZFxuICogbWltaWNzIHRoZSBQT1NJWCBiZWhhdmlvciBvZiBiZWluZyBhYmxlIHRvIHJ1biBzY3JpcHRzIGFzIGV4ZWN1dGFibGVzIGJ5XG4gKiByZXBsYWNpbmcgdGhlIHBhc3NlZC1pbiBleGVjdXRhYmxlIHdpdGggdGhlIHNjcmlwdCBydW5uZXIsIGZvciBQb3dlclNoZWxsLFxuICogQ01ELCBhbmQgbm9kZSBzY3JpcHRzLlxuICpcbiAqIFRoaXMgbWV0aG9kIGFsc28gZG9lcyB0aGUgd29yayBvZiBydW5uaW5nIGRvd24gUEFUSCwgd2hpY2ggc3Bhd24gb24gV2luZG93c1xuICogYWxzbyBkb2Vzbid0IGRvLCB1bmxpa2Ugb24gUE9TSVguXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBleGUgICAgICAgICAgIFRoZSBleGVjdXRhYmxlIHRvIHJ1blxuICogQHBhcmFtICB7c3RyaW5nW119IGFyZ3MgICBUaGUgYXJndW1lbnRzIHRvIHJ1blxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICBUaGUgY21kIGFuZCBhcmdzIHRvIHJ1blxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNtZCAgICAgICAgIFRoZSBjb21tYW5kIHRvIHBhc3MgdG8gc3Bhd25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHNwYXduXG4gKi9cbmZ1bmN0aW9uIGZpbmRBY3R1YWxFeGVjdXRhYmxlKGV4ZSwgYXJncykge1xuICAgIC8vIFBPU0lYIGNhbiBqdXN0IGV4ZWN1dGUgc2NyaXB0cyBkaXJlY3RseSwgbm8gbmVlZCBmb3Igc2lsbHkgZ29vc2VyeVxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSBcIndpbjMyXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgY21kOiBydW5Eb3duUGF0aChleGUpLCBhcmdzOiBhcmdzIH07XG4gICAgfVxuICAgIGlmICghc2ZzLmV4aXN0c1N5bmMoZXhlKSkge1xuICAgICAgICAvLyBOQjogV2hlbiB5b3Ugd3JpdGUgc29tZXRoaW5nIGxpa2UgYHN1cmYtY2xpZW50IC4uLiAtLSBzdXJmLWJ1aWxkYCBvbiBXaW5kb3dzLFxuICAgICAgICAvLyBhIHNoZWxsIHdvdWxkIG5vcm1hbGx5IGNvbnZlcnQgdGhhdCB0byBzdXJmLWJ1aWxkLmNtZCwgYnV0IHNpbmNlIGl0J3MgcGFzc2VkXG4gICAgICAgIC8vIGluIGFzIGFuIGFyZ3VtZW50LCBpdCBkb2Vzbid0IGhhcHBlblxuICAgICAgICB2YXIgcG9zc2libGVFeHRzID0gW1wiLmV4ZVwiLCBcIi5iYXRcIiwgXCIuY21kXCIsIFwiLnBzMVwiXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBwb3NzaWJsZUV4dHNfMSA9IHBvc3NpYmxlRXh0czsgX2kgPCBwb3NzaWJsZUV4dHNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBleHQgPSBwb3NzaWJsZUV4dHNfMVtfaV07XG4gICAgICAgICAgICB2YXIgcG9zc2libGVGdWxsUGF0aCA9IHJ1bkRvd25QYXRoKFwiXCIuY29uY2F0KGV4ZSkuY29uY2F0KGV4dCkpO1xuICAgICAgICAgICAgaWYgKHNmcy5leGlzdHNTeW5jKHBvc3NpYmxlRnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRBY3R1YWxFeGVjdXRhYmxlKHBvc3NpYmxlRnVsbFBhdGgsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChleGUubWF0Y2goL1xcLnBzMSQvaSkpIHtcbiAgICAgICAgdmFyIGNtZCA9IHBhdGguam9pbihwcm9jZXNzLmVudi5TWVNURU1ST09ULCBcIlN5c3RlbTMyXCIsIFwiV2luZG93c1Bvd2VyU2hlbGxcIiwgXCJ2MS4wXCIsIFwiUG93ZXJTaGVsbC5leGVcIik7XG4gICAgICAgIHZhciBwc2FyZ3MgPSBbXG4gICAgICAgICAgICBcIi1FeGVjdXRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgIFwiVW5yZXN0cmljdGVkXCIsXG4gICAgICAgICAgICBcIi1Ob0xvZ29cIixcbiAgICAgICAgICAgIFwiLU5vbkludGVyYWN0aXZlXCIsXG4gICAgICAgICAgICBcIi1GaWxlXCIsXG4gICAgICAgICAgICBleGUsXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB7IGNtZDogY21kLCBhcmdzOiBwc2FyZ3MuY29uY2F0KGFyZ3MpIH07XG4gICAgfVxuICAgIGlmIChleGUubWF0Y2goL1xcLihiYXR8Y21kKSQvaSkpIHtcbiAgICAgICAgdmFyIGNtZCA9IHBhdGguam9pbihwcm9jZXNzLmVudi5TWVNURU1ST09ULCBcIlN5c3RlbTMyXCIsIFwiY21kLmV4ZVwiKTtcbiAgICAgICAgdmFyIGNtZEFyZ3MgPSBfX3NwcmVhZEFycmF5KFtcIi9DXCIsIGV4ZV0sIGFyZ3MsIHRydWUpO1xuICAgICAgICByZXR1cm4geyBjbWQ6IGNtZCwgYXJnczogY21kQXJncyB9O1xuICAgIH1cbiAgICBpZiAoZXhlLm1hdGNoKC9cXC4oanMpJC9pKSkge1xuICAgICAgICB2YXIgY21kID0gcHJvY2Vzcy5leGVjUGF0aDtcbiAgICAgICAgdmFyIG5vZGVBcmdzID0gW2V4ZV07XG4gICAgICAgIHJldHVybiB7IGNtZDogY21kLCBhcmdzOiBub2RlQXJncy5jb25jYXQoYXJncykgfTtcbiAgICB9XG4gICAgLy8gRHVubm8gbG9sXG4gICAgcmV0dXJuIHsgY21kOiBleGUsIGFyZ3M6IGFyZ3MgfTtcbn1cbi8qKlxuICogU3Bhd25zIGEgcHJvY2VzcyBidXQgZGV0YWNoZWQgZnJvbSB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGUgcHJvY2VzcyBpcyBwdXRcbiAqIGludG8gaXRzIG93biBQcm9jZXNzIEdyb3VwIHRoYXQgY2FuIGJlIGtpbGxlZCBieSB1bnN1YnNjcmliaW5nIGZyb20gdGhlXG4gKiByZXR1cm4gT2JzZXJ2YWJsZS5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGV4ZSAgICAgICAgICAgICAgIFRoZSBleGVjdXRhYmxlIHRvIHJ1blxuICogQHBhcmFtICB7c3RyaW5nW119IHBhcmFtcyAgICAgVGhlIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgY2hpbGRcbiAqIEBwYXJhbSAge1NwYXduT3B0aW9ucyAmIFNwYXduUnhFeHRyYXN9IG9wdHMgICAgICAgICAgICAgIE9wdGlvbnMgdG8gcGFzcyB0byBzcGF3bi5cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHN0cmluZz59ICAgICAgIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHdoZW4gc3Vic2NyaWJlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bywgd2lsbCBjcmVhdGUgYSBkZXRhY2hlZCBwcm9jZXNzLiBUaGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBvdXRwdXQgd2lsbCBiZSBzdHJlYW1lZCB0byB0aGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ic2VydmFibGUsIGFuZCBpZiB1bnN1YnNjcmliZWQgZnJvbSwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mgd2lsbCBiZSB0ZXJtaW5hdGVkIGVhcmx5LiBJZiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyB0ZXJtaW5hdGVzIHdpdGggYSBub24temVybyB2YWx1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9ic2VydmFibGUgd2lsbCB0ZXJtaW5hdGUgd2l0aCBvbkVycm9yLlxuICovXG5mdW5jdGlvbiBzcGF3bkRldGFjaGVkKGV4ZSwgcGFyYW1zLCBvcHRzKSB7XG4gICAgdmFyIF9hID0gZmluZEFjdHVhbEV4ZWN1dGFibGUoZXhlLCBwYXJhbXMgIT09IG51bGwgJiYgcGFyYW1zICE9PSB2b2lkIDAgPyBwYXJhbXMgOiBbXSksIGNtZCA9IF9hLmNtZCwgYXJncyA9IF9hLmFyZ3M7XG4gICAgaWYgKCFpc1dpbmRvd3MpIHtcbiAgICAgICAgcmV0dXJuIHNwYXduKGNtZCwgYXJncywgT2JqZWN0LmFzc2lnbih7fSwgb3B0cyB8fCB7fSwgeyBkZXRhY2hlZDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIHZhciBuZXdQYXJhbXMgPSBbY21kXS5jb25jYXQoYXJncyk7XG4gICAgdmFyIHRhcmdldCA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcInZlbmRvclwiLCBcImpvYmJlclwiLCBcIkpvYmJlci5leGVcIik7XG4gICAgdmFyIG9wdGlvbnMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgKG9wdHMgIT09IG51bGwgJiYgb3B0cyAhPT0gdm9pZCAwID8gb3B0cyA6IHt9KSksIHsgZGV0YWNoZWQ6IHRydWUsIGpvYmJlcjogdHJ1ZSB9KTtcbiAgICBkKFwic3Bhd25EZXRhY2hlZDogXCIuY29uY2F0KHRhcmdldCwgXCIsIFwiKS5jb25jYXQobmV3UGFyYW1zKSk7XG4gICAgcmV0dXJuIHNwYXduKHRhcmdldCwgbmV3UGFyYW1zLCBvcHRpb25zKTtcbn1cbi8qKlxuICogU3Bhd25zIGEgcHJvY2VzcyBhdHRhY2hlZCBhcyBhIGNoaWxkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBleGUgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB0byBydW5cbiAqIEBwYXJhbSAge3N0cmluZ1tdfSBwYXJhbXMgICAgIFRoZSBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIGNoaWxkXG4gKiBAcGFyYW0gIHtTcGF3bk9wdGlvbnMgJiBTcGF3blJ4RXh0cmFzfSBvcHRzICAgICAgICAgICAgICBPcHRpb25zIHRvIHBhc3MgdG8gc3Bhd24uXG4gKlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxzdHJpbmc+fSAgICAgICBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCB3aGVuIHN1YnNjcmliZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sIHdpbGwgY3JlYXRlIGEgY2hpbGQgcHJvY2Vzcy4gVGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mgb3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYnNlcnZhYmxlLCBhbmQgaWYgdW5zdWJzY3JpYmVkIGZyb20sIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIHdpbGwgYmUgdGVybWluYXRlZCBlYXJseS4gSWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdGVybWluYXRlcyB3aXRoIGEgbm9uLXplcm8gdmFsdWUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPYnNlcnZhYmxlIHdpbGwgdGVybWluYXRlIHdpdGggb25FcnJvci5cbiAqL1xuZnVuY3Rpb24gc3Bhd24oZXhlLCBwYXJhbXMsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyAhPT0gbnVsbCAmJiBvcHRzICE9PSB2b2lkIDAgPyBvcHRzIDoge307XG4gICAgdmFyIHNwYXduT2JzID0gbmV3IHJ4anNfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJqKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgdmFyIHN0ZGluID0gb3B0cy5zdGRpbiwgam9iYmVyID0gb3B0cy5qb2JiZXIsIHNwbGl0ID0gb3B0cy5zcGxpdCwgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nLCBzcGF3bk9wdHMgPSBfX3Jlc3Qob3B0cywgW1wic3RkaW5cIiwgXCJqb2JiZXJcIiwgXCJzcGxpdFwiLCBcImVuY29kaW5nXCJdKTtcbiAgICAgICAgdmFyIF9hID0gZmluZEFjdHVhbEV4ZWN1dGFibGUoZXhlLCBwYXJhbXMpLCBjbWQgPSBfYS5jbWQsIGFyZ3MgPSBfYS5hcmdzO1xuICAgICAgICBkKFwic3Bhd25pbmcgcHJvY2VzczogXCIuY29uY2F0KGNtZCwgXCIgXCIpLmNvbmNhdChhcmdzLmpvaW4oKSwgXCIsIFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoc3Bhd25PcHRzKSkpO1xuICAgICAgICB2YXIgcHJvYyA9ICgwLCBjaGlsZF9wcm9jZXNzXzEuc3Bhd24pKGNtZCwgYXJncywgc3Bhd25PcHRzKTtcbiAgICAgICAgdmFyIGJ1ZkhhbmRsZXIgPSBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgaWYgKGIubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmVjaG9PdXRwdXQpIHtcbiAgICAgICAgICAgICAgICAoc291cmNlID09PSBcInN0ZG91dFwiID8gcHJvY2Vzcy5zdGRvdXQgOiBwcm9jZXNzLnN0ZGVycikud3JpdGUoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY2h1bmsgPSBcIjw8IFN0cmluZyBzZW50IGJhY2sgd2FzIHRvbyBsb25nID4+XCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rID0gYi50b1N0cmluZyhlbmNvZGluZyB8fCBcInV0ZjhcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBcIjw8IExvc3QgY2h1bmsgb2YgcHJvY2VzcyBvdXRwdXQgZm9yIFwiLmNvbmNhdChleGUsIFwiIC0gbGVuZ3RoIHdhcyBcIikuY29uY2F0KGIubGVuZ3RoLCBcIj4+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Viai5uZXh0KHsgc291cmNlOiBzb3VyY2UsIHRleHQ6IGNodW5rIH0pO1xuICAgICAgICB9OyB9O1xuICAgICAgICB2YXIgcmV0ID0gbmV3IHJ4anNfMS5TdWJzY3JpcHRpb24oKTtcbiAgICAgICAgaWYgKG9wdHMuc3RkaW4pIHtcbiAgICAgICAgICAgIGlmIChwcm9jLnN0ZGluKSB7XG4gICAgICAgICAgICAgICAgcmV0LmFkZChvcHRzLnN0ZGluLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwcm9jLnN0ZGluLndyaXRlKHgpOyB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogc3Viai5lcnJvci5iaW5kKHN1YmopLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvYy5zdGRpbi5lbmQoKTsgfSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJqLmVycm9yKG5ldyBFcnJvcihcIm9wdHMuc3RkaW8gY29uZmxpY3RzIHdpdGggcHJvdmlkZWQgc3Bhd24gb3B0cy5zdGRpbiBvYnNlcnZhYmxlLCAncGlwZScgaXMgcmVxdWlyZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBzdGRlcnJDb21wbGV0ZWQgPSBudWxsO1xuICAgICAgICB2YXIgc3Rkb3V0Q29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgdmFyIG5vQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKHByb2Muc3Rkb3V0KSB7XG4gICAgICAgICAgICBzdGRvdXRDb21wbGV0ZWQgPSBuZXcgcnhqc18xLkFzeW5jU3ViamVjdCgpO1xuICAgICAgICAgICAgcHJvYy5zdGRvdXQub24oXCJkYXRhXCIsIGJ1ZkhhbmRsZXIoXCJzdGRvdXRcIikpO1xuICAgICAgICAgICAgcHJvYy5zdGRvdXQub24oXCJjbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3Rkb3V0Q29tcGxldGVkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3Rkb3V0Q29tcGxldGVkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0ZG91dENvbXBsZXRlZCA9ICgwLCByeGpzXzEub2YpKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jLnN0ZGVycikge1xuICAgICAgICAgICAgc3RkZXJyQ29tcGxldGVkID0gbmV3IHJ4anNfMS5Bc3luY1N1YmplY3QoKTtcbiAgICAgICAgICAgIHByb2Muc3RkZXJyLm9uKFwiZGF0YVwiLCBidWZIYW5kbGVyKFwic3RkZXJyXCIpKTtcbiAgICAgICAgICAgIHByb2Muc3RkZXJyLm9uKFwiY2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN0ZGVyckNvbXBsZXRlZC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN0ZGVyckNvbXBsZXRlZC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGRlcnJDb21wbGV0ZWQgPSAoMCwgcnhqc18xLm9mKSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIG5vQ2xvc2UgPSB0cnVlO1xuICAgICAgICAgICAgc3Viai5lcnJvcihlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Mub24oXCJjbG9zZVwiLCBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgICAgbm9DbG9zZSA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGlwZXNDbG9zZWQgPSAoMCwgcnhqc18xLm1lcmdlKShzdGRvdXRDb21wbGV0ZWQsIHN0ZGVyckNvbXBsZXRlZCkucGlwZSgoMCwgb3BlcmF0b3JzXzEucmVkdWNlKShmdW5jdGlvbiAoYWNjKSB7IHJldHVybiBhY2M7IH0sIHRydWUpKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGlwZXNDbG9zZWQuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmouY29tcGxldGUoKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwaXBlc0Nsb3NlZC5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihcIkZhaWxlZCB3aXRoIGV4aXQgY29kZTogXCIuY29uY2F0KGNvZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgZS5leGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGUuY29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN1YmouZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXQuYWRkKG5ldyByeGpzXzEuU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChub0Nsb3NlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZChcIktpbGxpbmcgcHJvY2VzczogXCIuY29uY2F0KGNtZCwgXCIgXCIpLmNvbmNhdChhcmdzLmpvaW4oKSkpO1xuICAgICAgICAgICAgaWYgKG9wdHMuam9iYmVyKSB7XG4gICAgICAgICAgICAgICAgLy8gTkI6IENvbm5lY3RpbmcgdG8gSm9iYmVyJ3MgbmFtZWQgcGlwZSB3aWxsIGtpbGwgaXRcbiAgICAgICAgICAgICAgICBuZXQuY29ubmVjdChcIlxcXFxcXFxcLlxcXFxwaXBlXFxcXGpvYmJlci1cIi5jb25jYXQocHJvYy5waWQpKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb2Mua2lsbCgpOyB9LCA1ICogMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRzLnNwbGl0ID8gc3Bhd25PYnMgOiBzcGF3bk9icy5waXBlKCgwLCBvcGVyYXRvcnNfMS5tYXApKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSBudWxsIHx8IHggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHgudGV4dDsgfSkpO1xufVxuZnVuY3Rpb24gd3JhcE9ic2VydmFibGVJblByb21pc2Uob2JzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikge1xuICAgICAgICB2YXIgb3V0ID0gXCJcIjtcbiAgICAgICAgb2JzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gKG91dCArPSB4KTsgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJcIi5jb25jYXQob3V0LCBcIlxcblwiKS5jb25jYXQoZS5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwiZXhpdENvZGVcIiBpbiBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyci5leGl0Q29kZSA9IGUuZXhpdENvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVyci5jb2RlID0gZS5leGl0Q29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVqKGVycik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcyhvdXQpOyB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdyYXBPYnNlcnZhYmxlSW5TcGxpdFByb21pc2Uob2JzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikge1xuICAgICAgICB2YXIgb3V0ID0gXCJcIjtcbiAgICAgICAgdmFyIGVyciA9IFwiXCI7XG4gICAgICAgIG9icy5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh4LnNvdXJjZSA9PT0gXCJzdGRvdXRcIiA/IChvdXQgKz0geC50ZXh0KSA6IChlcnIgKz0geC50ZXh0KSk7IH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoXCJcIi5jb25jYXQob3V0LCBcIlxcblwiKS5jb25jYXQoZS5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwiZXhpdENvZGVcIiBpbiBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmV4aXRDb2RlID0gZS5leGl0Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuY29kZSA9IGUuZXhpdENvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnN0ZG91dCA9IG91dDtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RkZXJyID0gZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWooZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXMoW291dCwgZXJyXSk7IH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBTcGF3bnMgYSBwcm9jZXNzIGJ1dCBkZXRhY2hlZCBmcm9tIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoZSBwcm9jZXNzIGlzIHB1dFxuICogaW50byBpdHMgb3duIFByb2Nlc3MgR3JvdXAuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBleGUgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB0byBydW5cbiAqIEBwYXJhbSAge3N0cmluZ1tdfSBwYXJhbXMgICAgIFRoZSBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIGNoaWxkXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdHMgICAgICAgICAgICAgIE9wdGlvbnMgdG8gcGFzcyB0byBzcGF3bi5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59ICAgICAgIFJldHVybnMgYW4gUHJvbWlzZSB0aGF0IHJlcHJlc2VudHMgYSBkZXRhY2hlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LiBJZiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzIHdpdGggYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24temVybyB2YWx1ZSwgdGhlIFByb21pc2Ugd2lsbCByZXNvbHZlIHdpdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gRXJyb3IuXG4gKi9cbmZ1bmN0aW9uIHNwYXduRGV0YWNoZWRQcm9taXNlKGV4ZSwgcGFyYW1zLCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5zcGxpdCkge1xuICAgICAgICByZXR1cm4gd3JhcE9ic2VydmFibGVJblNwbGl0UHJvbWlzZShzcGF3bkRldGFjaGVkKGV4ZSwgcGFyYW1zLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgKG9wdHMgIT09IG51bGwgJiYgb3B0cyAhPT0gdm9pZCAwID8gb3B0cyA6IHt9KSksIHsgc3BsaXQ6IHRydWUgfSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB3cmFwT2JzZXJ2YWJsZUluUHJvbWlzZShzcGF3bkRldGFjaGVkKGV4ZSwgcGFyYW1zLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgKG9wdHMgIT09IG51bGwgJiYgb3B0cyAhPT0gdm9pZCAwID8gb3B0cyA6IHt9KSksIHsgc3BsaXQ6IGZhbHNlIH0pKSk7XG4gICAgfVxufVxuLyoqXG4gKiBTcGF3bnMgYSBwcm9jZXNzIGFzIGEgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGV4ZSAgICAgICAgICAgICAgIFRoZSBleGVjdXRhYmxlIHRvIHJ1blxuICogQHBhcmFtICB7c3RyaW5nW119IHBhcmFtcyAgICAgVGhlIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgY2hpbGRcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0cyAgICAgICAgICAgICAgT3B0aW9ucyB0byBwYXNzIHRvIHNwYXduLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gICAgICAgUmV0dXJucyBhbiBQcm9taXNlIHRoYXQgcmVwcmVzZW50cyBhIGNoaWxkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgcHJvY2Vzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuIElmIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMgd2l0aCBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi16ZXJvIHZhbHVlLCB0aGUgUHJvbWlzZSB3aWxsIHJlc29sdmUgd2l0aFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBFcnJvci5cbiAqL1xuZnVuY3Rpb24gc3Bhd25Qcm9taXNlKGV4ZSwgcGFyYW1zLCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5zcGxpdCkge1xuICAgICAgICByZXR1cm4gd3JhcE9ic2VydmFibGVJblNwbGl0UHJvbWlzZShzcGF3bihleGUsIHBhcmFtcywgX19hc3NpZ24oX19hc3NpZ24oe30sIChvcHRzICE9PSBudWxsICYmIG9wdHMgIT09IHZvaWQgMCA/IG9wdHMgOiB7fSkpLCB7IHNwbGl0OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gd3JhcE9ic2VydmFibGVJblByb21pc2Uoc3Bhd24oZXhlLCBwYXJhbXMsIF9fYXNzaWduKF9fYXNzaWduKHt9LCAob3B0cyAhPT0gbnVsbCAmJiBvcHRzICE9PSB2b2lkIDAgPyBvcHRzIDoge30pKSwgeyBzcGxpdDogZmFsc2UgfSkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwKICAgICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLAogICAgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuZnVuY3Rpb24gcGFyc2VWZXJzaW9uKHZlcnNpb25TdHJpbmcpIHtcblx0aWYgKC9eXFxkezMsNH0kLy50ZXN0KHZlcnNpb25TdHJpbmcpKSB7XG5cdFx0Ly8gRW52IHZhciBkb2Vzbid0IGFsd2F5cyB1c2UgZG90cy4gZXhhbXBsZTogNDYwMSA9PiA0Ni4xLjBcblx0XHRjb25zdCBtID0gLyhcXGR7MSwyfSkoXFxkezJ9KS8uZXhlYyh2ZXJzaW9uU3RyaW5nKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFqb3I6IDAsXG5cdFx0XHRtaW5vcjogcGFyc2VJbnQobVsxXSwgMTApLFxuXHRcdFx0cGF0Y2g6IHBhcnNlSW50KG1bMl0sIDEwKVxuXHRcdH07XG5cdH1cblxuXHRjb25zdCB2ZXJzaW9ucyA9ICh2ZXJzaW9uU3RyaW5nIHx8ICcnKS5zcGxpdCgnLicpLm1hcChuID0+IHBhcnNlSW50KG4sIDEwKSk7XG5cdHJldHVybiB7XG5cdFx0bWFqb3I6IHZlcnNpb25zWzBdLFxuXHRcdG1pbm9yOiB2ZXJzaW9uc1sxXSxcblx0XHRwYXRjaDogdmVyc2lvbnNbMl1cblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNIeXBlcmxpbmsoc3RyZWFtKSB7XG5cdGNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxuXHRpZiAoJ0ZPUkNFX0hZUEVSTElOSycgaW4gZW52KSB7XG5cdFx0cmV0dXJuICEoZW52LkZPUkNFX0hZUEVSTElOSy5sZW5ndGggPiAwICYmIHBhcnNlSW50KGVudi5GT1JDRV9IWVBFUkxJTkssIDEwKSA9PT0gMCk7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnbm8taHlwZXJsaW5rJykgfHwgaGFzRmxhZygnbm8taHlwZXJsaW5rcycpIHx8IGhhc0ZsYWcoJ2h5cGVybGluaz1mYWxzZScpIHx8IGhhc0ZsYWcoJ2h5cGVybGluaz1uZXZlcicpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2h5cGVybGluaz10cnVlJykgfHwgaGFzRmxhZygnaHlwZXJsaW5rPWFsd2F5cycpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBOZXRsaWZ5IGRvZXMgbm90IHJ1biBhIFRUWSwgaXQgZG9lcyBub3QgbmVlZCBgc3VwcG9ydHNDb2xvcmAgY2hlY2tcblx0aWYgKCdORVRMSUZZJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIElmIHRoZXkgc3BlY2lmeSBubyBjb2xvcnMsIHRoZXkgcHJvYmFibHkgZG9uJ3Qgd2FudCBoeXBlcmxpbmtzLlxuXHRpZiAoIXN1cHBvcnRzQ29sb3Iuc3VwcG9ydHNDb2xvcihzdHJlYW0pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VWZXJzaW9uKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTik7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdGlmICh2ZXJzaW9uLm1ham9yID09PSAzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZlcnNpb24ubWlub3IgPj0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uLm1ham9yID4gMztcblx0XHRcdGNhc2UgJ1dlelRlcm0nOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbi5tYWpvciA+PSAyMDIwMDYyMDtcblx0XHRcdGNhc2UgJ3ZzY29kZSc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uLm1ham9yID4gMSB8fCB2ZXJzaW9uLm1ham9yID09PSAxICYmIHZlcnNpb24ubWlub3IgPj0gNzI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKCdWVEVfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0Ly8gMC41MC4wIHdhcyBzdXBwb3NlZCB0byBzdXBwb3J0IGh5cGVybGlua3MsIGJ1dCB0aHJvd3MgYSBzZWdmYXVsdFxuXHRcdGlmIChlbnYuVlRFX1ZFUlNJT04gPT09ICcwLjUwLjAnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmVyc2lvbiA9IHBhcnNlVmVyc2lvbihlbnYuVlRFX1ZFUlNJT04pO1xuXHRcdHJldHVybiB2ZXJzaW9uLm1ham9yID4gMCB8fCB2ZXJzaW9uLm1pbm9yID49IDUwO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNIeXBlcmxpbmssXG5cdHN0ZG91dDogc3VwcG9ydHNIeXBlcmxpbmsocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IHN1cHBvcnRzSHlwZXJsaW5rKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIEFsZ29yaXRobUlkOiAoKSA9PiBBbGdvcml0aG1JZCxcbiAgRW5kcG9pbnRVUkxTY2hlbWU6ICgpID0+IEVuZHBvaW50VVJMU2NoZW1lLFxuICBGaWVsZFBvc2l0aW9uOiAoKSA9PiBGaWVsZFBvc2l0aW9uLFxuICBIdHRwQXBpS2V5QXV0aExvY2F0aW9uOiAoKSA9PiBIdHRwQXBpS2V5QXV0aExvY2F0aW9uLFxuICBIdHRwQXV0aExvY2F0aW9uOiAoKSA9PiBIdHRwQXV0aExvY2F0aW9uLFxuICBJbmlTZWN0aW9uVHlwZTogKCkgPT4gSW5pU2VjdGlvblR5cGUsXG4gIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2w6ICgpID0+IFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wsXG4gIFNNSVRIWV9DT05URVhUX0tFWTogKCkgPT4gU01JVEhZX0NPTlRFWFRfS0VZLFxuICBnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbjogKCkgPT4gZ2V0RGVmYXVsdENsaWVudENvbmZpZ3VyYXRpb24sXG4gIHJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZzogKCkgPT4gcmVzb2x2ZURlZmF1bHRSdW50aW1lQ29uZmlnXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2F1dGgvYXV0aC50c1xudmFyIEh0dHBBdXRoTG9jYXRpb24gPSAvKiBAX19QVVJFX18gKi8gKChIdHRwQXV0aExvY2F0aW9uMikgPT4ge1xuICBIdHRwQXV0aExvY2F0aW9uMltcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gIEh0dHBBdXRoTG9jYXRpb24yW1wiUVVFUllcIl0gPSBcInF1ZXJ5XCI7XG4gIHJldHVybiBIdHRwQXV0aExvY2F0aW9uMjtcbn0pKEh0dHBBdXRoTG9jYXRpb24gfHwge30pO1xuXG4vLyBzcmMvYXV0aC9IdHRwQXBpS2V5QXV0aC50c1xudmFyIEh0dHBBcGlLZXlBdXRoTG9jYXRpb24gPSAvKiBAX19QVVJFX18gKi8gKChIdHRwQXBpS2V5QXV0aExvY2F0aW9uMikgPT4ge1xuICBIdHRwQXBpS2V5QXV0aExvY2F0aW9uMltcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gIEh0dHBBcGlLZXlBdXRoTG9jYXRpb24yW1wiUVVFUllcIl0gPSBcInF1ZXJ5XCI7XG4gIHJldHVybiBIdHRwQXBpS2V5QXV0aExvY2F0aW9uMjtcbn0pKEh0dHBBcGlLZXlBdXRoTG9jYXRpb24gfHwge30pO1xuXG4vLyBzcmMvZW5kcG9pbnQudHNcbnZhciBFbmRwb2ludFVSTFNjaGVtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVuZHBvaW50VVJMU2NoZW1lMikgPT4ge1xuICBFbmRwb2ludFVSTFNjaGVtZTJbXCJIVFRQXCJdID0gXCJodHRwXCI7XG4gIEVuZHBvaW50VVJMU2NoZW1lMltcIkhUVFBTXCJdID0gXCJodHRwc1wiO1xuICByZXR1cm4gRW5kcG9pbnRVUkxTY2hlbWUyO1xufSkoRW5kcG9pbnRVUkxTY2hlbWUgfHwge30pO1xuXG4vLyBzcmMvZXh0ZW5zaW9ucy9jaGVja3N1bS50c1xudmFyIEFsZ29yaXRobUlkID0gLyogQF9fUFVSRV9fICovICgoQWxnb3JpdGhtSWQyKSA9PiB7XG4gIEFsZ29yaXRobUlkMltcIk1ENVwiXSA9IFwibWQ1XCI7XG4gIEFsZ29yaXRobUlkMltcIkNSQzMyXCJdID0gXCJjcmMzMlwiO1xuICBBbGdvcml0aG1JZDJbXCJDUkMzMkNcIl0gPSBcImNyYzMyY1wiO1xuICBBbGdvcml0aG1JZDJbXCJTSEExXCJdID0gXCJzaGExXCI7XG4gIEFsZ29yaXRobUlkMltcIlNIQTI1NlwiXSA9IFwic2hhMjU2XCI7XG4gIHJldHVybiBBbGdvcml0aG1JZDI7XG59KShBbGdvcml0aG1JZCB8fCB7fSk7XG52YXIgZ2V0Q2hlY2tzdW1Db25maWd1cmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocnVudGltZUNvbmZpZykgPT4ge1xuICBjb25zdCBjaGVja3N1bUFsZ29yaXRobXMgPSBbXTtcbiAgaWYgKHJ1bnRpbWVDb25maWcuc2hhMjU2ICE9PSB2b2lkIDApIHtcbiAgICBjaGVja3N1bUFsZ29yaXRobXMucHVzaCh7XG4gICAgICBhbGdvcml0aG1JZDogKCkgPT4gXCJzaGEyNTZcIiAvKiBTSEEyNTYgKi8sXG4gICAgICBjaGVja3N1bUNvbnN0cnVjdG9yOiAoKSA9PiBydW50aW1lQ29uZmlnLnNoYTI1NlxuICAgIH0pO1xuICB9XG4gIGlmIChydW50aW1lQ29uZmlnLm1kNSAhPSB2b2lkIDApIHtcbiAgICBjaGVja3N1bUFsZ29yaXRobXMucHVzaCh7XG4gICAgICBhbGdvcml0aG1JZDogKCkgPT4gXCJtZDVcIiAvKiBNRDUgKi8sXG4gICAgICBjaGVja3N1bUNvbnN0cnVjdG9yOiAoKSA9PiBydW50aW1lQ29uZmlnLm1kNVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgX2NoZWNrc3VtQWxnb3JpdGhtczogY2hlY2tzdW1BbGdvcml0aG1zLFxuICAgIGFkZENoZWNrc3VtQWxnb3JpdGhtKGFsZ28pIHtcbiAgICAgIHRoaXMuX2NoZWNrc3VtQWxnb3JpdGhtcy5wdXNoKGFsZ28pO1xuICAgIH0sXG4gICAgY2hlY2tzdW1BbGdvcml0aG1zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrc3VtQWxnb3JpdGhtcztcbiAgICB9XG4gIH07XG59LCBcImdldENoZWNrc3VtQ29uZmlndXJhdGlvblwiKTtcbnZhciByZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY2xpZW50Q29uZmlnKSA9PiB7XG4gIGNvbnN0IHJ1bnRpbWVDb25maWcgPSB7fTtcbiAgY2xpZW50Q29uZmlnLmNoZWNrc3VtQWxnb3JpdGhtcygpLmZvckVhY2goKGNoZWNrc3VtQWxnb3JpdGhtKSA9PiB7XG4gICAgcnVudGltZUNvbmZpZ1tjaGVja3N1bUFsZ29yaXRobS5hbGdvcml0aG1JZCgpXSA9IGNoZWNrc3VtQWxnb3JpdGhtLmNoZWNrc3VtQ29uc3RydWN0b3IoKTtcbiAgfSk7XG4gIHJldHVybiBydW50aW1lQ29uZmlnO1xufSwgXCJyZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnXCIpO1xuXG4vLyBzcmMvZXh0ZW5zaW9ucy9kZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbi50c1xudmFyIGdldERlZmF1bHRDbGllbnRDb25maWd1cmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocnVudGltZUNvbmZpZykgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmdldENoZWNrc3VtQ29uZmlndXJhdGlvbihydW50aW1lQ29uZmlnKVxuICB9O1xufSwgXCJnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvblwiKTtcbnZhciByZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWcpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnKGNvbmZpZylcbiAgfTtcbn0sIFwicmVzb2x2ZURlZmF1bHRSdW50aW1lQ29uZmlnXCIpO1xuXG4vLyBzcmMvaHR0cC50c1xudmFyIEZpZWxkUG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZFBvc2l0aW9uMikgPT4ge1xuICBGaWVsZFBvc2l0aW9uMltGaWVsZFBvc2l0aW9uMltcIkhFQURFUlwiXSA9IDBdID0gXCJIRUFERVJcIjtcbiAgRmllbGRQb3NpdGlvbjJbRmllbGRQb3NpdGlvbjJbXCJUUkFJTEVSXCJdID0gMV0gPSBcIlRSQUlMRVJcIjtcbiAgcmV0dXJuIEZpZWxkUG9zaXRpb24yO1xufSkoRmllbGRQb3NpdGlvbiB8fCB7fSk7XG5cbi8vIHNyYy9taWRkbGV3YXJlLnRzXG52YXIgU01JVEhZX0NPTlRFWFRfS0VZID0gXCJfX3NtaXRoeV9jb250ZXh0XCI7XG5cbi8vIHNyYy9wcm9maWxlLnRzXG52YXIgSW5pU2VjdGlvblR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChJbmlTZWN0aW9uVHlwZTIpID0+IHtcbiAgSW5pU2VjdGlvblR5cGUyW1wiUFJPRklMRVwiXSA9IFwicHJvZmlsZVwiO1xuICBJbmlTZWN0aW9uVHlwZTJbXCJTU09fU0VTU0lPTlwiXSA9IFwic3NvLXNlc3Npb25cIjtcbiAgSW5pU2VjdGlvblR5cGUyW1wiU0VSVklDRVNcIl0gPSBcInNlcnZpY2VzXCI7XG4gIHJldHVybiBJbmlTZWN0aW9uVHlwZTI7XG59KShJbmlTZWN0aW9uVHlwZSB8fCB7fSk7XG5cbi8vIHNyYy90cmFuc2Zlci50c1xudmFyIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSAvKiBAX19QVVJFX18gKi8gKChSZXF1ZXN0SGFuZGxlclByb3RvY29sMikgPT4ge1xuICBSZXF1ZXN0SGFuZGxlclByb3RvY29sMltcIkhUVFBfMF85XCJdID0gXCJodHRwLzAuOVwiO1xuICBSZXF1ZXN0SGFuZGxlclByb3RvY29sMltcIkhUVFBfMV8wXCJdID0gXCJodHRwLzEuMFwiO1xuICBSZXF1ZXN0SGFuZGxlclByb3RvY29sMltcIlREU184XzBcIl0gPSBcInRkcy84LjBcIjtcbiAgcmV0dXJuIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wyO1xufSkoUmVxdWVzdEhhbmRsZXJQcm90b2NvbCB8fCB7fSk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBIdHRwQXV0aExvY2F0aW9uLFxuICBIdHRwQXBpS2V5QXV0aExvY2F0aW9uLFxuICBFbmRwb2ludFVSTFNjaGVtZSxcbiAgQWxnb3JpdGhtSWQsXG4gIGdldERlZmF1bHRDbGllbnRDb25maWd1cmF0aW9uLFxuICByZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcsXG4gIEZpZWxkUG9zaXRpb24sXG4gIFNNSVRIWV9DT05URVhUX0tFWSxcbiAgSW5pU2VjdGlvblR5cGUsXG4gIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBnZXRTbWl0aHlDb250ZXh0OiAoKSA9PiBnZXRTbWl0aHlDb250ZXh0LFxuICBub3JtYWxpemVQcm92aWRlcjogKCkgPT4gbm9ybWFsaXplUHJvdmlkZXJcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvZ2V0U21pdGh5Q29udGV4dC50c1xudmFyIGltcG9ydF90eXBlcyA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xudmFyIGdldFNtaXRoeUNvbnRleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb250ZXh0KSA9PiBjb250ZXh0W2ltcG9ydF90eXBlcy5TTUlUSFlfQ09OVEVYVF9LRVldIHx8IChjb250ZXh0W2ltcG9ydF90eXBlcy5TTUlUSFlfQ09OVEVYVF9LRVldID0ge30pLCBcImdldFNtaXRoeUNvbnRleHRcIik7XG5cbi8vIHNyYy9ub3JtYWxpemVQcm92aWRlci50c1xudmFyIG5vcm1hbGl6ZVByb3ZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiBpbnB1dDtcbiAgY29uc3QgcHJvbWlzaWZpZWQgPSBQcm9taXNlLnJlc29sdmUoaW5wdXQpO1xuICByZXR1cm4gKCkgPT4gcHJvbWlzaWZpZWQ7XG59LCBcIm5vcm1hbGl6ZVByb3ZpZGVyXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0U21pdGh5Q29udGV4dCxcbiAgbm9ybWFsaXplUHJvdmlkZXJcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBpc0FycmF5QnVmZmVyOiAoKSA9PiBpc0FycmF5QnVmZmVyXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcbnZhciBpc0FycmF5QnVmZmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYXJnKSA9PiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09IFwiZnVuY3Rpb25cIiAmJiBhcmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLCBcImlzQXJyYXlCdWZmZXJcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5QnVmZmVyXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgZnJvbUFycmF5QnVmZmVyOiAoKSA9PiBmcm9tQXJyYXlCdWZmZXIsXG4gIGZyb21TdHJpbmc6ICgpID0+IGZyb21TdHJpbmdcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9pc19hcnJheV9idWZmZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9pcy1hcnJheS1idWZmZXJcIik7XG52YXIgaW1wb3J0X2J1ZmZlciA9IHJlcXVpcmUoXCJidWZmZXJcIik7XG52YXIgZnJvbUFycmF5QnVmZmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQsIG9mZnNldCA9IDAsIGxlbmd0aCA9IGlucHV0LmJ5dGVMZW5ndGggLSBvZmZzZXQpID0+IHtcbiAgaWYgKCEoMCwgaW1wb3J0X2lzX2FycmF5X2J1ZmZlci5pc0FycmF5QnVmZmVyKShpbnB1dCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgXCJpbnB1dFwiIGFyZ3VtZW50IG11c3QgYmUgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaW5wdXR9ICgke2lucHV0fSlgKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0X2J1ZmZlci5CdWZmZXIuZnJvbShpbnB1dCwgb2Zmc2V0LCBsZW5ndGgpO1xufSwgXCJmcm9tQXJyYXlCdWZmZXJcIik7XG52YXIgZnJvbVN0cmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0LCBlbmNvZGluZykgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiaW5wdXRcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGlucHV0fSAoJHtpbnB1dH0pYCk7XG4gIH1cbiAgcmV0dXJuIGVuY29kaW5nID8gaW1wb3J0X2J1ZmZlci5CdWZmZXIuZnJvbShpbnB1dCwgZW5jb2RpbmcpIDogaW1wb3J0X2J1ZmZlci5CdWZmZXIuZnJvbShpbnB1dCk7XG59LCBcImZyb21TdHJpbmdcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBmcm9tQXJyYXlCdWZmZXIsXG4gIGZyb21TdHJpbmdcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBmcm9tVXRmODogKCkgPT4gZnJvbVV0ZjgsXG4gIHRvVWludDhBcnJheTogKCkgPT4gdG9VaW50OEFycmF5LFxuICB0b1V0Zjg6ICgpID0+IHRvVXRmOFxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9mcm9tVXRmOC50c1xudmFyIGltcG9ydF91dGlsX2J1ZmZlcl9mcm9tID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbVwiKTtcbnZhciBmcm9tVXRmOCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0KSA9PiB7XG4gIGNvbnN0IGJ1ZiA9ICgwLCBpbXBvcnRfdXRpbF9idWZmZXJfZnJvbS5mcm9tU3RyaW5nKShpbnB1dCwgXCJ1dGY4XCIpO1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoIC8gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCk7XG59LCBcImZyb21VdGY4XCIpO1xuXG4vLyBzcmMvdG9VaW50OEFycmF5LnRzXG52YXIgdG9VaW50OEFycmF5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGF0YSkgPT4ge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZnJvbVV0ZjgoZGF0YSk7XG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGggLyBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG59LCBcInRvVWludDhBcnJheVwiKTtcblxuLy8gc3JjL3RvVXRmOC50c1xuXG52YXIgdG9VdGY4ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBpbnB1dC5ieXRlT2Zmc2V0ICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiBpbnB1dC5ieXRlTGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS91dGlsLXV0Zjg6IHRvVXRmOCBlbmNvZGVyIGZ1bmN0aW9uIG9ubHkgYWNjZXB0cyBzdHJpbmcgfCBVaW50OEFycmF5LlwiKTtcbiAgfVxuICByZXR1cm4gKDAsIGltcG9ydF91dGlsX2J1ZmZlcl9mcm9tLmZyb21BcnJheUJ1ZmZlcikoaW5wdXQuYnVmZmVyLCBpbnB1dC5ieXRlT2Zmc2V0LCBpbnB1dC5ieXRlTGVuZ3RoKS50b1N0cmluZyhcInV0ZjhcIik7XG59LCBcInRvVXRmOFwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZyb21VdGY4LFxuICB0b1VpbnQ4QXJyYXksXG4gIHRvVXRmOFxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGZyb21IZXg6ICgpID0+IGZyb21IZXgsXG4gIHRvSGV4OiAoKSA9PiB0b0hleFxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG52YXIgU0hPUlRfVE9fSEVYID0ge307XG52YXIgSEVYX1RPX1NIT1JUID0ge307XG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIGxldCBlbmNvZGVkQnl0ZSA9IGkudG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChlbmNvZGVkQnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICBlbmNvZGVkQnl0ZSA9IGAwJHtlbmNvZGVkQnl0ZX1gO1xuICB9XG4gIFNIT1JUX1RPX0hFWFtpXSA9IGVuY29kZWRCeXRlO1xuICBIRVhfVE9fU0hPUlRbZW5jb2RlZEJ5dGVdID0gaTtcbn1cbmZ1bmN0aW9uIGZyb21IZXgoZW5jb2RlZCkge1xuICBpZiAoZW5jb2RlZC5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSGV4IGVuY29kZWQgc3RyaW5ncyBtdXN0IGhhdmUgYW4gZXZlbiBudW1iZXIgbGVuZ3RoXCIpO1xuICB9XG4gIGNvbnN0IG91dCA9IG5ldyBVaW50OEFycmF5KGVuY29kZWQubGVuZ3RoIC8gMik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGVuY29kZWRCeXRlID0gZW5jb2RlZC5zbGljZShpLCBpICsgMikudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZW5jb2RlZEJ5dGUgaW4gSEVYX1RPX1NIT1JUKSB7XG4gICAgICBvdXRbaSAvIDJdID0gSEVYX1RPX1NIT1JUW2VuY29kZWRCeXRlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIHVucmVjb2duaXplZCBzZXF1ZW5jZSAke2VuY29kZWRCeXRlfSBhcyBoZXhhZGVjaW1hbGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuX19uYW1lKGZyb21IZXgsIFwiZnJvbUhleFwiKTtcbmZ1bmN0aW9uIHRvSGV4KGJ5dGVzKSB7XG4gIGxldCBvdXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgIG91dCArPSBTSE9SVF9UT19IRVhbYnl0ZXNbaV1dO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5fX25hbWUodG9IZXgsIFwidG9IZXhcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBmcm9tSGV4LFxuICB0b0hleFxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGVzY2FwZVVyaTogKCkgPT4gZXNjYXBlVXJpLFxuICBlc2NhcGVVcmlQYXRoOiAoKSA9PiBlc2NhcGVVcmlQYXRoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2VzY2FwZS11cmkudHNcbnZhciBlc2NhcGVVcmkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1cmkpID0+IChcbiAgLy8gQVdTIHBlcmNlbnQtZW5jb2RlcyBzb21lIGV4dHJhIG5vbi1zdGFuZGFyZCBjaGFyYWN0ZXJzIGluIGEgVVJJXG4gIGVuY29kZVVSSUNvbXBvbmVudCh1cmkpLnJlcGxhY2UoL1shJygpKl0vZywgaGV4RW5jb2RlKVxuKSwgXCJlc2NhcGVVcmlcIik7XG52YXIgaGV4RW5jb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYykgPT4gYCUke2MuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gLCBcImhleEVuY29kZVwiKTtcblxuLy8gc3JjL2VzY2FwZS11cmktcGF0aC50c1xudmFyIGVzY2FwZVVyaVBhdGggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1cmkpID0+IHVyaS5zcGxpdChcIi9cIikubWFwKGVzY2FwZVVyaSkuam9pbihcIi9cIiksIFwiZXNjYXBlVXJpUGF0aFwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzY2FwZVVyaSxcbiAgZXNjYXBlVXJpUGF0aFxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIFNpZ25hdHVyZVY0OiAoKSA9PiBTaWduYXR1cmVWNCxcbiAgY2xlYXJDcmVkZW50aWFsQ2FjaGU6ICgpID0+IGNsZWFyQ3JlZGVudGlhbENhY2hlLFxuICBjcmVhdGVTY29wZTogKCkgPT4gY3JlYXRlU2NvcGUsXG4gIGdldENhbm9uaWNhbEhlYWRlcnM6ICgpID0+IGdldENhbm9uaWNhbEhlYWRlcnMsXG4gIGdldENhbm9uaWNhbFF1ZXJ5OiAoKSA9PiBnZXRDYW5vbmljYWxRdWVyeSxcbiAgZ2V0UGF5bG9hZEhhc2g6ICgpID0+IGdldFBheWxvYWRIYXNoLFxuICBnZXRTaWduaW5nS2V5OiAoKSA9PiBnZXRTaWduaW5nS2V5LFxuICBtb3ZlSGVhZGVyc1RvUXVlcnk6ICgpID0+IG1vdmVIZWFkZXJzVG9RdWVyeSxcbiAgcHJlcGFyZVJlcXVlc3Q6ICgpID0+IHByZXBhcmVSZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL1NpZ25hdHVyZVY0LnRzXG5cbnZhciBpbXBvcnRfdXRpbF9taWRkbGV3YXJlID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlXCIpO1xuXG52YXIgaW1wb3J0X3V0aWxfdXRmODQgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG5cbi8vIHNyYy9jb25zdGFudHMudHNcbnZhciBBTEdPUklUSE1fUVVFUllfUEFSQU0gPSBcIlgtQW16LUFsZ29yaXRobVwiO1xudmFyIENSRURFTlRJQUxfUVVFUllfUEFSQU0gPSBcIlgtQW16LUNyZWRlbnRpYWxcIjtcbnZhciBBTVpfREFURV9RVUVSWV9QQVJBTSA9IFwiWC1BbXotRGF0ZVwiO1xudmFyIFNJR05FRF9IRUFERVJTX1FVRVJZX1BBUkFNID0gXCJYLUFtei1TaWduZWRIZWFkZXJzXCI7XG52YXIgRVhQSVJFU19RVUVSWV9QQVJBTSA9IFwiWC1BbXotRXhwaXJlc1wiO1xudmFyIFNJR05BVFVSRV9RVUVSWV9QQVJBTSA9IFwiWC1BbXotU2lnbmF0dXJlXCI7XG52YXIgVE9LRU5fUVVFUllfUEFSQU0gPSBcIlgtQW16LVNlY3VyaXR5LVRva2VuXCI7XG52YXIgQVVUSF9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbnZhciBBTVpfREFURV9IRUFERVIgPSBBTVpfREFURV9RVUVSWV9QQVJBTS50b0xvd2VyQ2FzZSgpO1xudmFyIERBVEVfSEVBREVSID0gXCJkYXRlXCI7XG52YXIgR0VORVJBVEVEX0hFQURFUlMgPSBbQVVUSF9IRUFERVIsIEFNWl9EQVRFX0hFQURFUiwgREFURV9IRUFERVJdO1xudmFyIFNJR05BVFVSRV9IRUFERVIgPSBTSUdOQVRVUkVfUVVFUllfUEFSQU0udG9Mb3dlckNhc2UoKTtcbnZhciBTSEEyNTZfSEVBREVSID0gXCJ4LWFtei1jb250ZW50LXNoYTI1NlwiO1xudmFyIFRPS0VOX0hFQURFUiA9IFRPS0VOX1FVRVJZX1BBUkFNLnRvTG93ZXJDYXNlKCk7XG52YXIgQUxXQVlTX1VOU0lHTkFCTEVfSEVBREVSUyA9IHtcbiAgYXV0aG9yaXphdGlvbjogdHJ1ZSxcbiAgXCJjYWNoZS1jb250cm9sXCI6IHRydWUsXG4gIGNvbm5lY3Rpb246IHRydWUsXG4gIGV4cGVjdDogdHJ1ZSxcbiAgZnJvbTogdHJ1ZSxcbiAgXCJrZWVwLWFsaXZlXCI6IHRydWUsXG4gIFwibWF4LWZvcndhcmRzXCI6IHRydWUsXG4gIHByYWdtYTogdHJ1ZSxcbiAgcmVmZXJlcjogdHJ1ZSxcbiAgdGU6IHRydWUsXG4gIHRyYWlsZXI6IHRydWUsXG4gIFwidHJhbnNmZXItZW5jb2RpbmdcIjogdHJ1ZSxcbiAgdXBncmFkZTogdHJ1ZSxcbiAgXCJ1c2VyLWFnZW50XCI6IHRydWUsXG4gIFwieC1hbXpuLXRyYWNlLWlkXCI6IHRydWVcbn07XG52YXIgUFJPWFlfSEVBREVSX1BBVFRFUk4gPSAvXnByb3h5LS87XG52YXIgU0VDX0hFQURFUl9QQVRURVJOID0gL15zZWMtLztcbnZhciBBTEdPUklUSE1fSURFTlRJRklFUiA9IFwiQVdTNC1ITUFDLVNIQTI1NlwiO1xudmFyIEVWRU5UX0FMR09SSVRITV9JREVOVElGSUVSID0gXCJBV1M0LUhNQUMtU0hBMjU2LVBBWUxPQURcIjtcbnZhciBVTlNJR05FRF9QQVlMT0FEID0gXCJVTlNJR05FRC1QQVlMT0FEXCI7XG52YXIgTUFYX0NBQ0hFX1NJWkUgPSA1MDtcbnZhciBLRVlfVFlQRV9JREVOVElGSUVSID0gXCJhd3M0X3JlcXVlc3RcIjtcbnZhciBNQVhfUFJFU0lHTkVEX1RUTCA9IDYwICogNjAgKiAyNCAqIDc7XG5cbi8vIHNyYy9jcmVkZW50aWFsRGVyaXZhdGlvbi50c1xudmFyIGltcG9ydF91dGlsX2hleF9lbmNvZGluZyA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtaGV4LWVuY29kaW5nXCIpO1xudmFyIGltcG9ydF91dGlsX3V0ZjggPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG52YXIgc2lnbmluZ0tleUNhY2hlID0ge307XG52YXIgY2FjaGVRdWV1ZSA9IFtdO1xudmFyIGNyZWF0ZVNjb3BlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UpID0+IGAke3Nob3J0RGF0ZX0vJHtyZWdpb259LyR7c2VydmljZX0vJHtLRVlfVFlQRV9JREVOVElGSUVSfWAsIFwiY3JlYXRlU2NvcGVcIik7XG52YXIgZ2V0U2lnbmluZ0tleSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHNoYTI1NkNvbnN0cnVjdG9yLCBjcmVkZW50aWFscywgc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UpID0+IHtcbiAgY29uc3QgY3JlZHNIYXNoID0gYXdhaXQgaG1hYyhzaGEyNTZDb25zdHJ1Y3RvciwgY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LCBjcmVkZW50aWFscy5hY2Nlc3NLZXlJZCk7XG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7c2hvcnREYXRlfToke3JlZ2lvbn06JHtzZXJ2aWNlfTokeygwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGNyZWRzSGFzaCl9OiR7Y3JlZGVudGlhbHMuc2Vzc2lvblRva2VufWA7XG4gIGlmIChjYWNoZUtleSBpbiBzaWduaW5nS2V5Q2FjaGUpIHtcbiAgICByZXR1cm4gc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XTtcbiAgfVxuICBjYWNoZVF1ZXVlLnB1c2goY2FjaGVLZXkpO1xuICB3aGlsZSAoY2FjaGVRdWV1ZS5sZW5ndGggPiBNQVhfQ0FDSEVfU0laRSkge1xuICAgIGRlbGV0ZSBzaWduaW5nS2V5Q2FjaGVbY2FjaGVRdWV1ZS5zaGlmdCgpXTtcbiAgfVxuICBsZXQga2V5ID0gYEFXUzQke2NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleX1gO1xuICBmb3IgKGNvbnN0IHNpZ25hYmxlIG9mIFtzaG9ydERhdGUsIHJlZ2lvbiwgc2VydmljZSwgS0VZX1RZUEVfSURFTlRJRklFUl0pIHtcbiAgICBrZXkgPSBhd2FpdCBobWFjKHNoYTI1NkNvbnN0cnVjdG9yLCBrZXksIHNpZ25hYmxlKTtcbiAgfVxuICByZXR1cm4gc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XSA9IGtleTtcbn0sIFwiZ2V0U2lnbmluZ0tleVwiKTtcbnZhciBjbGVhckNyZWRlbnRpYWxDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjYWNoZVF1ZXVlLmxlbmd0aCA9IDA7XG4gIE9iamVjdC5rZXlzKHNpZ25pbmdLZXlDYWNoZSkuZm9yRWFjaCgoY2FjaGVLZXkpID0+IHtcbiAgICBkZWxldGUgc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XTtcbiAgfSk7XG59LCBcImNsZWFyQ3JlZGVudGlhbENhY2hlXCIpO1xudmFyIGhtYWMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjdG9yLCBzZWNyZXQsIGRhdGEpID0+IHtcbiAgY29uc3QgaGFzaCA9IG5ldyBjdG9yKHNlY3JldCk7XG4gIGhhc2gudXBkYXRlKCgwLCBpbXBvcnRfdXRpbF91dGY4LnRvVWludDhBcnJheSkoZGF0YSkpO1xuICByZXR1cm4gaGFzaC5kaWdlc3QoKTtcbn0sIFwiaG1hY1wiKTtcblxuLy8gc3JjL2dldENhbm9uaWNhbEhlYWRlcnMudHNcbnZhciBnZXRDYW5vbmljYWxIZWFkZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeyBoZWFkZXJzIH0sIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2Fub25pY2FsID0ge307XG4gIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKS5zb3J0KCkpIHtcbiAgICBpZiAoaGVhZGVyc1toZWFkZXJOYW1lXSA9PSB2b2lkIDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjYW5vbmljYWxIZWFkZXJOYW1lID0gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjYW5vbmljYWxIZWFkZXJOYW1lIGluIEFMV0FZU19VTlNJR05BQkxFX0hFQURFUlMgfHwgKHVuc2lnbmFibGVIZWFkZXJzID09IG51bGwgPyB2b2lkIDAgOiB1bnNpZ25hYmxlSGVhZGVycy5oYXMoY2Fub25pY2FsSGVhZGVyTmFtZSkpIHx8IFBST1hZX0hFQURFUl9QQVRURVJOLnRlc3QoY2Fub25pY2FsSGVhZGVyTmFtZSkgfHwgU0VDX0hFQURFUl9QQVRURVJOLnRlc3QoY2Fub25pY2FsSGVhZGVyTmFtZSkpIHtcbiAgICAgIGlmICghc2lnbmFibGVIZWFkZXJzIHx8IHNpZ25hYmxlSGVhZGVycyAmJiAhc2lnbmFibGVIZWFkZXJzLmhhcyhjYW5vbmljYWxIZWFkZXJOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2Fub25pY2FsW2Nhbm9uaWNhbEhlYWRlck5hbWVdID0gaGVhZGVyc1toZWFkZXJOYW1lXS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCBcIiBcIik7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbDtcbn0sIFwiZ2V0Q2Fub25pY2FsSGVhZGVyc1wiKTtcblxuLy8gc3JjL2dldENhbm9uaWNhbFF1ZXJ5LnRzXG52YXIgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXJpLWVzY2FwZVwiKTtcbnZhciBnZXRDYW5vbmljYWxRdWVyeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHsgcXVlcnkgPSB7fSB9KSA9PiB7XG4gIGNvbnN0IGtleXMgPSBbXTtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhxdWVyeSkuc29ydCgpKSB7XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBTSUdOQVRVUkVfSEVBREVSKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAga2V5cy5wdXNoKGtleSk7XG4gICAgY29uc3QgdmFsdWUgPSBxdWVyeVtrZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHNlcmlhbGl6ZWRba2V5XSA9IGAkeygwLCBpbXBvcnRfdXRpbF91cmlfZXNjYXBlLmVzY2FwZVVyaSkoa2V5KX09JHsoMCwgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZS5lc2NhcGVVcmkpKHZhbHVlKX1gO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHNlcmlhbGl6ZWRba2V5XSA9IHZhbHVlLnNsaWNlKDApLnJlZHVjZShcbiAgICAgICAgKGVuY29kZWQsIHZhbHVlMikgPT4gZW5jb2RlZC5jb25jYXQoW2AkeygwLCBpbXBvcnRfdXRpbF91cmlfZXNjYXBlLmVzY2FwZVVyaSkoa2V5KX09JHsoMCwgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZS5lc2NhcGVVcmkpKHZhbHVlMil9YF0pLFxuICAgICAgICBbXVxuICAgICAgKS5zb3J0KCkuam9pbihcIiZcIik7XG4gICAgfVxuICB9XG4gIHJldHVybiBrZXlzLm1hcCgoa2V5KSA9PiBzZXJpYWxpemVkW2tleV0pLmZpbHRlcigoc2VyaWFsaXplZDIpID0+IHNlcmlhbGl6ZWQyKS5qb2luKFwiJlwiKTtcbn0sIFwiZ2V0Q2Fub25pY2FsUXVlcnlcIik7XG5cbi8vIHNyYy9nZXRQYXlsb2FkSGFzaC50c1xudmFyIGltcG9ydF9pc19hcnJheV9idWZmZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9pcy1hcnJheS1idWZmZXJcIik7XG5cbnZhciBpbXBvcnRfdXRpbF91dGY4MiA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXRmOFwiKTtcbnZhciBnZXRQYXlsb2FkSGFzaCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHsgaGVhZGVycywgYm9keSB9LCBoYXNoQ29uc3RydWN0b3IpID0+IHtcbiAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgaWYgKGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKSA9PT0gU0hBMjU2X0hFQURFUikge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaGVhZGVyTmFtZV07XG4gICAgfVxuICB9XG4gIGlmIChib2R5ID09IHZvaWQgMCkge1xuICAgIHJldHVybiBcImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTVcIjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkgfHwgKDAsIGltcG9ydF9pc19hcnJheV9idWZmZXIuaXNBcnJheUJ1ZmZlcikoYm9keSkpIHtcbiAgICBjb25zdCBoYXNoQ3RvciA9IG5ldyBoYXNoQ29uc3RydWN0b3IoKTtcbiAgICBoYXNoQ3Rvci51cGRhdGUoKDAsIGltcG9ydF91dGlsX3V0ZjgyLnRvVWludDhBcnJheSkoYm9keSkpO1xuICAgIHJldHVybiAoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLnRvSGV4KShhd2FpdCBoYXNoQ3Rvci5kaWdlc3QoKSk7XG4gIH1cbiAgcmV0dXJuIFVOU0lHTkVEX1BBWUxPQUQ7XG59LCBcImdldFBheWxvYWRIYXNoXCIpO1xuXG4vLyBzcmMvSGVhZGVyRm9ybWF0dGVyLnRzXG5cbnZhciBpbXBvcnRfdXRpbF91dGY4MyA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXRmOFwiKTtcbnZhciBfSGVhZGVyRm9ybWF0dGVyID0gY2xhc3MgX0hlYWRlckZvcm1hdHRlciB7XG4gIGZvcm1hdChoZWFkZXJzKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCBieXRlcyA9ICgwLCBpbXBvcnRfdXRpbF91dGY4My5mcm9tVXRmOCkoaGVhZGVyTmFtZSk7XG4gICAgICBjaHVua3MucHVzaChVaW50OEFycmF5LmZyb20oW2J5dGVzLmJ5dGVMZW5ndGhdKSwgYnl0ZXMsIHRoaXMuZm9ybWF0SGVhZGVyVmFsdWUoaGVhZGVyc1toZWFkZXJOYW1lXSkpO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjaHVua3MucmVkdWNlKChjYXJyeSwgYnl0ZXMpID0+IGNhcnJ5ICsgYnl0ZXMuYnl0ZUxlbmd0aCwgMCkpO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIG91dC5zZXQoY2h1bmssIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgZm9ybWF0SGVhZGVyVmFsdWUoaGVhZGVyKSB7XG4gICAgc3dpdGNoIChoZWFkZXIudHlwZSkge1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbaGVhZGVyLnZhbHVlID8gMCAvKiBib29sVHJ1ZSAqLyA6IDEgLyogYm9vbEZhbHNlICovXSk7XG4gICAgICBjYXNlIFwiYnl0ZVwiOlxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFsyIC8qIGJ5dGUgKi8sIGhlYWRlci52YWx1ZV0pO1xuICAgICAgY2FzZSBcInNob3J0XCI6XG4gICAgICAgIGNvbnN0IHNob3J0VmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMykpO1xuICAgICAgICBzaG9ydFZpZXcuc2V0VWludDgoMCwgMyAvKiBzaG9ydCAqLyk7XG4gICAgICAgIHNob3J0Vmlldy5zZXRJbnQxNigxLCBoZWFkZXIudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNob3J0Vmlldy5idWZmZXIpO1xuICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgY29uc3QgaW50VmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoNSkpO1xuICAgICAgICBpbnRWaWV3LnNldFVpbnQ4KDAsIDQgLyogaW50ZWdlciAqLyk7XG4gICAgICAgIGludFZpZXcuc2V0SW50MzIoMSwgaGVhZGVyLnZhbHVlLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShpbnRWaWV3LmJ1ZmZlcik7XG4gICAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgICBjb25zdCBsb25nQnl0ZXMgPSBuZXcgVWludDhBcnJheSg5KTtcbiAgICAgICAgbG9uZ0J5dGVzWzBdID0gNSAvKiBsb25nICovO1xuICAgICAgICBsb25nQnl0ZXMuc2V0KGhlYWRlci52YWx1ZS5ieXRlcywgMSk7XG4gICAgICAgIHJldHVybiBsb25nQnl0ZXM7XG4gICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgIGNvbnN0IGJpblZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDMgKyBoZWFkZXIudmFsdWUuYnl0ZUxlbmd0aCkpO1xuICAgICAgICBiaW5WaWV3LnNldFVpbnQ4KDAsIDYgLyogYnl0ZUFycmF5ICovKTtcbiAgICAgICAgYmluVmlldy5zZXRVaW50MTYoMSwgaGVhZGVyLnZhbHVlLmJ5dGVMZW5ndGgsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgYmluQnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5WaWV3LmJ1ZmZlcik7XG4gICAgICAgIGJpbkJ5dGVzLnNldChoZWFkZXIudmFsdWUsIDMpO1xuICAgICAgICByZXR1cm4gYmluQnl0ZXM7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIGNvbnN0IHV0ZjhCeXRlcyA9ICgwLCBpbXBvcnRfdXRpbF91dGY4My5mcm9tVXRmOCkoaGVhZGVyLnZhbHVlKTtcbiAgICAgICAgY29uc3Qgc3RyVmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMyArIHV0ZjhCeXRlcy5ieXRlTGVuZ3RoKSk7XG4gICAgICAgIHN0clZpZXcuc2V0VWludDgoMCwgNyAvKiBzdHJpbmcgKi8pO1xuICAgICAgICBzdHJWaWV3LnNldFVpbnQxNigxLCB1dGY4Qnl0ZXMuYnl0ZUxlbmd0aCwgZmFsc2UpO1xuICAgICAgICBjb25zdCBzdHJCeXRlcyA9IG5ldyBVaW50OEFycmF5KHN0clZpZXcuYnVmZmVyKTtcbiAgICAgICAgc3RyQnl0ZXMuc2V0KHV0ZjhCeXRlcywgMyk7XG4gICAgICAgIHJldHVybiBzdHJCeXRlcztcbiAgICAgIGNhc2UgXCJ0aW1lc3RhbXBcIjpcbiAgICAgICAgY29uc3QgdHNCeXRlcyA9IG5ldyBVaW50OEFycmF5KDkpO1xuICAgICAgICB0c0J5dGVzWzBdID0gOCAvKiB0aW1lc3RhbXAgKi87XG4gICAgICAgIHRzQnl0ZXMuc2V0KEludDY0LmZyb21OdW1iZXIoaGVhZGVyLnZhbHVlLnZhbHVlT2YoKSkuYnl0ZXMsIDEpO1xuICAgICAgICByZXR1cm4gdHNCeXRlcztcbiAgICAgIGNhc2UgXCJ1dWlkXCI6XG4gICAgICAgIGlmICghVVVJRF9QQVRURVJOLnRlc3QoaGVhZGVyLnZhbHVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHJlY2VpdmVkOiAke2hlYWRlci52YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1dWlkQnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNyk7XG4gICAgICAgIHV1aWRCeXRlc1swXSA9IDkgLyogdXVpZCAqLztcbiAgICAgICAgdXVpZEJ5dGVzLnNldCgoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLmZyb21IZXgpKGhlYWRlci52YWx1ZS5yZXBsYWNlKC9cXC0vZywgXCJcIikpLCAxKTtcbiAgICAgICAgcmV0dXJuIHV1aWRCeXRlcztcbiAgICB9XG4gIH1cbn07XG5fX25hbWUoX0hlYWRlckZvcm1hdHRlciwgXCJIZWFkZXJGb3JtYXR0ZXJcIik7XG52YXIgSGVhZGVyRm9ybWF0dGVyID0gX0hlYWRlckZvcm1hdHRlcjtcbnZhciBVVUlEX1BBVFRFUk4gPSAvXlthLWYwLTldezh9LVthLWYwLTldezR9LVthLWYwLTldezR9LVthLWYwLTldezR9LVthLWYwLTldezEyfSQvO1xudmFyIF9JbnQ2NCA9IGNsYXNzIF9JbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGJ5dGVzKSB7XG4gICAgdGhpcy5ieXRlcyA9IGJ5dGVzO1xuICAgIGlmIChieXRlcy5ieXRlTGVuZ3RoICE9PSA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnQ2NCBidWZmZXJzIG11c3QgYmUgZXhhY3RseSA4IGJ5dGVzXCIpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZnJvbU51bWJlcihudW1iZXIpIHtcbiAgICBpZiAobnVtYmVyID4gOTIyMzM3MjAzNjg1NDc3NmUzIHx8IG51bWJlciA8IC05MjIzMzcyMDM2ODU0Nzc2ZTMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtudW1iZXJ9IGlzIHRvbyBsYXJnZSAob3IsIGlmIG5lZ2F0aXZlLCB0b28gc21hbGwpIHRvIHJlcHJlc2VudCBhcyBhbiBJbnQ2NGApO1xuICAgIH1cbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgIGZvciAobGV0IGkgPSA3LCByZW1haW5pbmcgPSBNYXRoLmFicyhNYXRoLnJvdW5kKG51bWJlcikpOyBpID4gLTEgJiYgcmVtYWluaW5nID4gMDsgaS0tLCByZW1haW5pbmcgLz0gMjU2KSB7XG4gICAgICBieXRlc1tpXSA9IHJlbWFpbmluZztcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIG5lZ2F0ZShieXRlcyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX0ludDY0KGJ5dGVzKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIGltcGxpY2l0bHkgYnkgaW5maXggYXJpdGhtZXRpYyBvcGVyYXRvcnMuXG4gICAqL1xuICB2YWx1ZU9mKCkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcy5zbGljZSgwKTtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IGJ5dGVzWzBdICYgMTI4O1xuICAgIGlmIChuZWdhdGl2ZSkge1xuICAgICAgbmVnYXRlKGJ5dGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KCgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGJ5dGVzKSwgMTYpICogKG5lZ2F0aXZlID8gLTEgOiAxKTtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWVPZigpKTtcbiAgfVxufTtcbl9fbmFtZShfSW50NjQsIFwiSW50NjRcIik7XG52YXIgSW50NjQgPSBfSW50NjQ7XG5mdW5jdGlvbiBuZWdhdGUoYnl0ZXMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICBieXRlc1tpXSBePSAyNTU7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDc7IGkgPiAtMTsgaS0tKSB7XG4gICAgYnl0ZXNbaV0rKztcbiAgICBpZiAoYnl0ZXNbaV0gIT09IDApXG4gICAgICBicmVhaztcbiAgfVxufVxuX19uYW1lKG5lZ2F0ZSwgXCJuZWdhdGVcIik7XG5cbi8vIHNyYy9oZWFkZXJVdGlsLnRzXG52YXIgaGFzSGVhZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc291Z2h0SGVhZGVyLCBoZWFkZXJzKSA9PiB7XG4gIHNvdWdodEhlYWRlciA9IHNvdWdodEhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBpZiAoc291Z2h0SGVhZGVyID09PSBoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcImhhc0hlYWRlclwiKTtcblxuLy8gc3JjL2Nsb25lUmVxdWVzdC50c1xudmFyIGNsb25lUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHsgaGVhZGVycywgcXVlcnksIC4uLnJlc3QgfSkgPT4gKHtcbiAgLi4ucmVzdCxcbiAgaGVhZGVyczogeyAuLi5oZWFkZXJzIH0sXG4gIHF1ZXJ5OiBxdWVyeSA/IGNsb25lUXVlcnkocXVlcnkpIDogdm9pZCAwXG59KSwgXCJjbG9uZVJlcXVlc3RcIik7XG52YXIgY2xvbmVRdWVyeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHF1ZXJ5KSA9PiBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChjYXJyeSwgcGFyYW1OYW1lKSA9PiB7XG4gIGNvbnN0IHBhcmFtID0gcXVlcnlbcGFyYW1OYW1lXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5jYXJyeSxcbiAgICBbcGFyYW1OYW1lXTogQXJyYXkuaXNBcnJheShwYXJhbSkgPyBbLi4ucGFyYW1dIDogcGFyYW1cbiAgfTtcbn0sIHt9KSwgXCJjbG9uZVF1ZXJ5XCIpO1xuXG4vLyBzcmMvbW92ZUhlYWRlcnNUb1F1ZXJ5LnRzXG52YXIgbW92ZUhlYWRlcnNUb1F1ZXJ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIHZhciBfYTtcbiAgY29uc3QgeyBoZWFkZXJzLCBxdWVyeSA9IHt9IH0gPSB0eXBlb2YgcmVxdWVzdC5jbG9uZSA9PT0gXCJmdW5jdGlvblwiID8gcmVxdWVzdC5jbG9uZSgpIDogY2xvbmVSZXF1ZXN0KHJlcXVlc3QpO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBjb25zdCBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG5hbWUuc2xpY2UoMCwgNikgPT09IFwieC1hbXotXCIgJiYgISgoX2EgPSBvcHRpb25zLnVuaG9pc3RhYmxlSGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmhhcyhsbmFtZSkpKSB7XG4gICAgICBxdWVyeVtuYW1lXSA9IGhlYWRlcnNbbmFtZV07XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXF1ZXN0LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfTtcbn0sIFwibW92ZUhlYWRlcnNUb1F1ZXJ5XCIpO1xuXG4vLyBzcmMvcHJlcGFyZVJlcXVlc3QudHNcbnZhciBwcmVwYXJlUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlcXVlc3QpID0+IHtcbiAgcmVxdWVzdCA9IHR5cGVvZiByZXF1ZXN0LmNsb25lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmNsb25lKCkgOiBjbG9uZVJlcXVlc3QocmVxdWVzdCk7XG4gIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhyZXF1ZXN0LmhlYWRlcnMpKSB7XG4gICAgaWYgKEdFTkVSQVRFRF9IRUFERVJTLmluZGV4T2YoaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdC5oZWFkZXJzW2hlYWRlck5hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVxdWVzdDtcbn0sIFwicHJlcGFyZVJlcXVlc3RcIik7XG5cbi8vIHNyYy91dGlsRGF0ZS50c1xudmFyIGlzbzg2MDEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0aW1lKSA9PiB0b0RhdGUodGltZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGR7M31aJC8sIFwiWlwiKSwgXCJpc284NjAxXCIpO1xudmFyIHRvRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRpbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB0aW1lID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUgKiAxZTMpO1xuICB9XG4gIGlmICh0eXBlb2YgdGltZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChOdW1iZXIodGltZSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOdW1iZXIodGltZSkgKiAxZTMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUodGltZSk7XG4gIH1cbiAgcmV0dXJuIHRpbWU7XG59LCBcInRvRGF0ZVwiKTtcblxuLy8gc3JjL1NpZ25hdHVyZVY0LnRzXG52YXIgX1NpZ25hdHVyZVY0ID0gY2xhc3MgX1NpZ25hdHVyZVY0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGFwcGx5Q2hlY2tzdW0sXG4gICAgY3JlZGVudGlhbHMsXG4gICAgcmVnaW9uLFxuICAgIHNlcnZpY2UsXG4gICAgc2hhMjU2LFxuICAgIHVyaUVzY2FwZVBhdGggPSB0cnVlXG4gIH0pIHtcbiAgICB0aGlzLmhlYWRlckZvcm1hdHRlciA9IG5ldyBIZWFkZXJGb3JtYXR0ZXIoKTtcbiAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIHRoaXMuc2hhMjU2ID0gc2hhMjU2O1xuICAgIHRoaXMudXJpRXNjYXBlUGF0aCA9IHVyaUVzY2FwZVBhdGg7XG4gICAgdGhpcy5hcHBseUNoZWNrc3VtID0gdHlwZW9mIGFwcGx5Q2hlY2tzdW0gPT09IFwiYm9vbGVhblwiID8gYXBwbHlDaGVja3N1bSA6IHRydWU7XG4gICAgdGhpcy5yZWdpb25Qcm92aWRlciA9ICgwLCBpbXBvcnRfdXRpbF9taWRkbGV3YXJlLm5vcm1hbGl6ZVByb3ZpZGVyKShyZWdpb24pO1xuICAgIHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyID0gKDAsIGltcG9ydF91dGlsX21pZGRsZXdhcmUubm9ybWFsaXplUHJvdmlkZXIpKGNyZWRlbnRpYWxzKTtcbiAgfVxuICBhc3luYyBwcmVzaWduKG9yaWdpbmFsUmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgc2lnbmluZ0RhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSxcbiAgICAgIGV4cGlyZXNJbiA9IDM2MDAsXG4gICAgICB1bnNpZ25hYmxlSGVhZGVycyxcbiAgICAgIHVuaG9pc3RhYmxlSGVhZGVycyxcbiAgICAgIHNpZ25hYmxlSGVhZGVycyxcbiAgICAgIHNpZ25pbmdSZWdpb24sXG4gICAgICBzaWduaW5nU2VydmljZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXIoKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiA/PyBhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCk7XG4gICAgY29uc3QgeyBsb25nRGF0ZSwgc2hvcnREYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICBpZiAoZXhwaXJlc0luID4gTUFYX1BSRVNJR05FRF9UVEwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgXCJTaWduYXR1cmUgdmVyc2lvbiA0IHByZXNpZ25lZCBVUkxzIG11c3QgaGF2ZSBhbiBleHBpcmF0aW9uIGRhdGUgbGVzcyB0aGFuIG9uZSB3ZWVrIGluIHRoZSBmdXR1cmVcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBjcmVhdGVTY29wZShzaG9ydERhdGUsIHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgPz8gdGhpcy5zZXJ2aWNlKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gbW92ZUhlYWRlcnNUb1F1ZXJ5KHByZXBhcmVSZXF1ZXN0KG9yaWdpbmFsUmVxdWVzdCksIHsgdW5ob2lzdGFibGVIZWFkZXJzIH0pO1xuICAgIGlmIChjcmVkZW50aWFscy5zZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJlcXVlc3QucXVlcnlbVE9LRU5fUVVFUllfUEFSQU1dID0gY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuO1xuICAgIH1cbiAgICByZXF1ZXN0LnF1ZXJ5W0FMR09SSVRITV9RVUVSWV9QQVJBTV0gPSBBTEdPUklUSE1fSURFTlRJRklFUjtcbiAgICByZXF1ZXN0LnF1ZXJ5W0NSRURFTlRJQUxfUVVFUllfUEFSQU1dID0gYCR7Y3JlZGVudGlhbHMuYWNjZXNzS2V5SWR9LyR7c2NvcGV9YDtcbiAgICByZXF1ZXN0LnF1ZXJ5W0FNWl9EQVRFX1FVRVJZX1BBUkFNXSA9IGxvbmdEYXRlO1xuICAgIHJlcXVlc3QucXVlcnlbRVhQSVJFU19RVUVSWV9QQVJBTV0gPSBleHBpcmVzSW4udG9TdHJpbmcoMTApO1xuICAgIGNvbnN0IGNhbm9uaWNhbEhlYWRlcnMgPSBnZXRDYW5vbmljYWxIZWFkZXJzKHJlcXVlc3QsIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpO1xuICAgIHJlcXVlc3QucXVlcnlbU0lHTkVEX0hFQURFUlNfUVVFUllfUEFSQU1dID0gZ2V0Q2Fub25pY2FsSGVhZGVyTGlzdChjYW5vbmljYWxIZWFkZXJzKTtcbiAgICByZXF1ZXN0LnF1ZXJ5W1NJR05BVFVSRV9RVUVSWV9QQVJBTV0gPSBhd2FpdCB0aGlzLmdldFNpZ25hdHVyZShcbiAgICAgIGxvbmdEYXRlLFxuICAgICAgc2NvcGUsXG4gICAgICB0aGlzLmdldFNpZ25pbmdLZXkoY3JlZGVudGlhbHMsIHJlZ2lvbiwgc2hvcnREYXRlLCBzaWduaW5nU2VydmljZSksXG4gICAgICB0aGlzLmNyZWF0ZUNhbm9uaWNhbFJlcXVlc3QocmVxdWVzdCwgY2Fub25pY2FsSGVhZGVycywgYXdhaXQgZ2V0UGF5bG9hZEhhc2gob3JpZ2luYWxSZXF1ZXN0LCB0aGlzLnNoYTI1NikpXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBhc3luYyBzaWduKHRvU2lnbiwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgdG9TaWduID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduU3RyaW5nKHRvU2lnbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0b1NpZ24uaGVhZGVycyAmJiB0b1NpZ24ucGF5bG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbkV2ZW50KHRvU2lnbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0b1NpZ24ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbk1lc3NhZ2UodG9TaWduLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnblJlcXVlc3QodG9TaWduLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgc2lnbkV2ZW50KHsgaGVhZGVycywgcGF5bG9hZCB9LCB7IHNpZ25pbmdEYXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIHByaW9yU2lnbmF0dXJlLCBzaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSB9KSB7XG4gICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiA/PyBhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCk7XG4gICAgY29uc3QgeyBzaG9ydERhdGUsIGxvbmdEYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICBjb25zdCBzY29wZSA9IGNyZWF0ZVNjb3BlKHNob3J0RGF0ZSwgcmVnaW9uLCBzaWduaW5nU2VydmljZSA/PyB0aGlzLnNlcnZpY2UpO1xuICAgIGNvbnN0IGhhc2hlZFBheWxvYWQgPSBhd2FpdCBnZXRQYXlsb2FkSGFzaCh7IGhlYWRlcnM6IHt9LCBib2R5OiBwYXlsb2FkIH0sIHRoaXMuc2hhMjU2KTtcbiAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuc2hhMjU2KCk7XG4gICAgaGFzaC51cGRhdGUoaGVhZGVycyk7XG4gICAgY29uc3QgaGFzaGVkSGVhZGVycyA9ICgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgIEVWRU5UX0FMR09SSVRITV9JREVOVElGSUVSLFxuICAgICAgbG9uZ0RhdGUsXG4gICAgICBzY29wZSxcbiAgICAgIHByaW9yU2lnbmF0dXJlLFxuICAgICAgaGFzaGVkSGVhZGVycyxcbiAgICAgIGhhc2hlZFBheWxvYWRcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgcmV0dXJuIHRoaXMuc2lnblN0cmluZyhzdHJpbmdUb1NpZ24sIHsgc2lnbmluZ0RhdGUsIHNpZ25pbmdSZWdpb246IHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgfSk7XG4gIH1cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoc2lnbmFibGVNZXNzYWdlLCB7IHNpZ25pbmdEYXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0pIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zaWduRXZlbnQoXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyRm9ybWF0dGVyLmZvcm1hdChzaWduYWJsZU1lc3NhZ2UubWVzc2FnZS5oZWFkZXJzKSxcbiAgICAgICAgcGF5bG9hZDogc2lnbmFibGVNZXNzYWdlLm1lc3NhZ2UuYm9keVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmluZ0RhdGUsXG4gICAgICAgIHNpZ25pbmdSZWdpb24sXG4gICAgICAgIHNpZ25pbmdTZXJ2aWNlLFxuICAgICAgICBwcmlvclNpZ25hdHVyZTogc2lnbmFibGVNZXNzYWdlLnByaW9yU2lnbmF0dXJlXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKChzaWduYXR1cmUpID0+IHtcbiAgICAgIHJldHVybiB7IG1lc3NhZ2U6IHNpZ25hYmxlTWVzc2FnZS5tZXNzYWdlLCBzaWduYXR1cmUgfTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBzaWduU3RyaW5nKHN0cmluZ1RvU2lnbiwgeyBzaWduaW5nRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLCBzaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSB9ID0ge30pIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyKCk7XG4gICAgdGhpcy52YWxpZGF0ZVJlc29sdmVkQ3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHNpZ25pbmdSZWdpb24gPz8gYXdhaXQgdGhpcy5yZWdpb25Qcm92aWRlcigpO1xuICAgIGNvbnN0IHsgc2hvcnREYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuc2hhMjU2KGF3YWl0IHRoaXMuZ2V0U2lnbmluZ0tleShjcmVkZW50aWFscywgcmVnaW9uLCBzaG9ydERhdGUsIHNpZ25pbmdTZXJ2aWNlKSk7XG4gICAgaGFzaC51cGRhdGUoKDAsIGltcG9ydF91dGlsX3V0Zjg0LnRvVWludDhBcnJheSkoc3RyaW5nVG9TaWduKSk7XG4gICAgcmV0dXJuICgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICB9XG4gIGFzeW5jIHNpZ25SZXF1ZXN0KHJlcXVlc3RUb1NpZ24sIHtcbiAgICBzaWduaW5nRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLFxuICAgIHNpZ25hYmxlSGVhZGVycyxcbiAgICB1bnNpZ25hYmxlSGVhZGVycyxcbiAgICBzaWduaW5nUmVnaW9uLFxuICAgIHNpZ25pbmdTZXJ2aWNlXG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXIoKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiA/PyBhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RUb1NpZ24pO1xuICAgIGNvbnN0IHsgbG9uZ0RhdGUsIHNob3J0RGF0ZSB9ID0gZm9ybWF0RGF0ZShzaWduaW5nRGF0ZSk7XG4gICAgY29uc3Qgc2NvcGUgPSBjcmVhdGVTY29wZShzaG9ydERhdGUsIHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgPz8gdGhpcy5zZXJ2aWNlKTtcbiAgICByZXF1ZXN0LmhlYWRlcnNbQU1aX0RBVEVfSEVBREVSXSA9IGxvbmdEYXRlO1xuICAgIGlmIChjcmVkZW50aWFscy5zZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc1tUT0tFTl9IRUFERVJdID0gY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkSGFzaCA9IGF3YWl0IGdldFBheWxvYWRIYXNoKHJlcXVlc3QsIHRoaXMuc2hhMjU2KTtcbiAgICBpZiAoIWhhc0hlYWRlcihTSEEyNTZfSEVBREVSLCByZXF1ZXN0LmhlYWRlcnMpICYmIHRoaXMuYXBwbHlDaGVja3N1bSkge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzW1NIQTI1Nl9IRUFERVJdID0gcGF5bG9hZEhhc2g7XG4gICAgfVxuICAgIGNvbnN0IGNhbm9uaWNhbEhlYWRlcnMgPSBnZXRDYW5vbmljYWxIZWFkZXJzKHJlcXVlc3QsIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHRoaXMuZ2V0U2lnbmF0dXJlKFxuICAgICAgbG9uZ0RhdGUsXG4gICAgICBzY29wZSxcbiAgICAgIHRoaXMuZ2V0U2lnbmluZ0tleShjcmVkZW50aWFscywgcmVnaW9uLCBzaG9ydERhdGUsIHNpZ25pbmdTZXJ2aWNlKSxcbiAgICAgIHRoaXMuY3JlYXRlQ2Fub25pY2FsUmVxdWVzdChyZXF1ZXN0LCBjYW5vbmljYWxIZWFkZXJzLCBwYXlsb2FkSGFzaClcbiAgICApO1xuICAgIHJlcXVlc3QuaGVhZGVyc1tBVVRIX0hFQURFUl0gPSBgJHtBTEdPUklUSE1fSURFTlRJRklFUn0gQ3JlZGVudGlhbD0ke2NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkfS8ke3Njb3BlfSwgU2lnbmVkSGVhZGVycz0ke2dldENhbm9uaWNhbEhlYWRlckxpc3QoY2Fub25pY2FsSGVhZGVycyl9LCBTaWduYXR1cmU9JHtzaWduYXR1cmV9YDtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBjcmVhdGVDYW5vbmljYWxSZXF1ZXN0KHJlcXVlc3QsIGNhbm9uaWNhbEhlYWRlcnMsIHBheWxvYWRIYXNoKSB7XG4gICAgY29uc3Qgc29ydGVkSGVhZGVycyA9IE9iamVjdC5rZXlzKGNhbm9uaWNhbEhlYWRlcnMpLnNvcnQoKTtcbiAgICByZXR1cm4gYCR7cmVxdWVzdC5tZXRob2R9XG4ke3RoaXMuZ2V0Q2Fub25pY2FsUGF0aChyZXF1ZXN0KX1cbiR7Z2V0Q2Fub25pY2FsUXVlcnkocmVxdWVzdCl9XG4ke3NvcnRlZEhlYWRlcnMubWFwKChuYW1lKSA9PiBgJHtuYW1lfToke2Nhbm9uaWNhbEhlYWRlcnNbbmFtZV19YCkuam9pbihcIlxcblwiKX1cblxuJHtzb3J0ZWRIZWFkZXJzLmpvaW4oXCI7XCIpfVxuJHtwYXlsb2FkSGFzaH1gO1xuICB9XG4gIGFzeW5jIGNyZWF0ZVN0cmluZ1RvU2lnbihsb25nRGF0ZSwgY3JlZGVudGlhbFNjb3BlLCBjYW5vbmljYWxSZXF1ZXN0KSB7XG4gICAgY29uc3QgaGFzaCA9IG5ldyB0aGlzLnNoYTI1NigpO1xuICAgIGhhc2gudXBkYXRlKCgwLCBpbXBvcnRfdXRpbF91dGY4NC50b1VpbnQ4QXJyYXkpKGNhbm9uaWNhbFJlcXVlc3QpKTtcbiAgICBjb25zdCBoYXNoZWRSZXF1ZXN0ID0gYXdhaXQgaGFzaC5kaWdlc3QoKTtcbiAgICByZXR1cm4gYCR7QUxHT1JJVEhNX0lERU5USUZJRVJ9XG4ke2xvbmdEYXRlfVxuJHtjcmVkZW50aWFsU2NvcGV9XG4keygwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGhhc2hlZFJlcXVlc3QpfWA7XG4gIH1cbiAgZ2V0Q2Fub25pY2FsUGF0aCh7IHBhdGggfSkge1xuICAgIGlmICh0aGlzLnVyaUVzY2FwZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoU2VnbWVudHMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGF0aFNlZ21lbnQgb2YgcGF0aC5zcGxpdChcIi9cIikpIHtcbiAgICAgICAgaWYgKChwYXRoU2VnbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGF0aFNlZ21lbnQubGVuZ3RoKSA9PT0gMClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50ID09PSBcIi5cIilcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICBub3JtYWxpemVkUGF0aFNlZ21lbnRzLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoU2VnbWVudHMucHVzaChwYXRoU2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYCR7KHBhdGggPT0gbnVsbCA/IHZvaWQgMCA6IHBhdGguc3RhcnRzV2l0aChcIi9cIikpID8gXCIvXCIgOiBcIlwifSR7bm9ybWFsaXplZFBhdGhTZWdtZW50cy5qb2luKFwiL1wiKX0ke25vcm1hbGl6ZWRQYXRoU2VnbWVudHMubGVuZ3RoID4gMCAmJiAocGF0aCA9PSBudWxsID8gdm9pZCAwIDogcGF0aC5lbmRzV2l0aChcIi9cIikpID8gXCIvXCIgOiBcIlwifWA7XG4gICAgICBjb25zdCBkb3VibGVFbmNvZGVkID0gKDAsIGltcG9ydF91dGlsX3VyaV9lc2NhcGUuZXNjYXBlVXJpKShub3JtYWxpemVkUGF0aCk7XG4gICAgICByZXR1cm4gZG91YmxlRW5jb2RlZC5yZXBsYWNlKC8lMkYvZywgXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICBhc3luYyBnZXRTaWduYXR1cmUobG9uZ0RhdGUsIGNyZWRlbnRpYWxTY29wZSwga2V5UHJvbWlzZSwgY2Fub25pY2FsUmVxdWVzdCkge1xuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGF3YWl0IHRoaXMuY3JlYXRlU3RyaW5nVG9TaWduKGxvbmdEYXRlLCBjcmVkZW50aWFsU2NvcGUsIGNhbm9uaWNhbFJlcXVlc3QpO1xuICAgIGNvbnN0IGhhc2ggPSBuZXcgdGhpcy5zaGEyNTYoYXdhaXQga2V5UHJvbWlzZSk7XG4gICAgaGFzaC51cGRhdGUoKDAsIGltcG9ydF91dGlsX3V0Zjg0LnRvVWludDhBcnJheSkoc3RyaW5nVG9TaWduKSk7XG4gICAgcmV0dXJuICgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICB9XG4gIGdldFNpZ25pbmdLZXkoY3JlZGVudGlhbHMsIHJlZ2lvbiwgc2hvcnREYXRlLCBzZXJ2aWNlKSB7XG4gICAgcmV0dXJuIGdldFNpZ25pbmdLZXkodGhpcy5zaGEyNTYsIGNyZWRlbnRpYWxzLCBzaG9ydERhdGUsIHJlZ2lvbiwgc2VydmljZSB8fCB0aGlzLnNlcnZpY2UpO1xuICB9XG4gIHZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscykge1xuICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgIT09IFwib2JqZWN0XCIgfHwgLy8gQHRzLWV4cGVjdC1lcnJvcjogUHJvcGVydHkgJ2FjY2Vzc0tleUlkJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdvYmplY3QnLnRzKDIzMzkpXG4gICAgdHlwZW9mIGNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkICE9PSBcInN0cmluZ1wiIHx8IC8vIEB0cy1leHBlY3QtZXJyb3I6IFByb3BlcnR5ICdzZWNyZXRBY2Nlc3NLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ29iamVjdCcudHMoMjMzOSlcbiAgICB0eXBlb2YgY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXNvbHZlZCBjcmVkZW50aWFsIG9iamVjdCBpcyBub3QgdmFsaWRcIik7XG4gICAgfVxuICB9XG59O1xuX19uYW1lKF9TaWduYXR1cmVWNCwgXCJTaWduYXR1cmVWNFwiKTtcbnZhciBTaWduYXR1cmVWNCA9IF9TaWduYXR1cmVWNDtcbnZhciBmb3JtYXREYXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm93KSA9PiB7XG4gIGNvbnN0IGxvbmdEYXRlID0gaXNvODYwMShub3cpLnJlcGxhY2UoL1tcXC06XS9nLCBcIlwiKTtcbiAgcmV0dXJuIHtcbiAgICBsb25nRGF0ZSxcbiAgICBzaG9ydERhdGU6IGxvbmdEYXRlLnNsaWNlKDAsIDgpXG4gIH07XG59LCBcImZvcm1hdERhdGVcIik7XG52YXIgZ2V0Q2Fub25pY2FsSGVhZGVyTGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGhlYWRlcnMpID0+IE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvcnQoKS5qb2luKFwiO1wiKSwgXCJnZXRDYW5vbmljYWxIZWFkZXJMaXN0XCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q2Fub25pY2FsSGVhZGVycyxcbiAgZ2V0Q2Fub25pY2FsUXVlcnksXG4gIGdldFBheWxvYWRIYXNoLFxuICBtb3ZlSGVhZGVyc1RvUXVlcnksXG4gIHByZXBhcmVSZXF1ZXN0LFxuICBTaWduYXR1cmVWNCxcbiAgY3JlYXRlU2NvcGUsXG4gIGdldFNpZ25pbmdLZXksXG4gIGNsZWFyQ3JlZGVudGlhbENhY2hlXG59KTtcblxuIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIGdsb2JhbCwgZGVmaW5lLCBTeW1ib2wsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgSXRlcmF0b3IgKi9cclxudmFyIF9fZXh0ZW5kcztcclxudmFyIF9fYXNzaWduO1xyXG52YXIgX19yZXN0O1xyXG52YXIgX19kZWNvcmF0ZTtcclxudmFyIF9fcGFyYW07XHJcbnZhciBfX2VzRGVjb3JhdGU7XHJcbnZhciBfX3J1bkluaXRpYWxpemVycztcclxudmFyIF9fcHJvcEtleTtcclxudmFyIF9fc2V0RnVuY3Rpb25OYW1lO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19zcHJlYWRBcnJheTtcclxudmFyIF9fYXdhaXQ7XHJcbnZhciBfX2FzeW5jR2VuZXJhdG9yO1xyXG52YXIgX19hc3luY0RlbGVnYXRvcjtcclxudmFyIF9fYXN5bmNWYWx1ZXM7XHJcbnZhciBfX21ha2VUZW1wbGF0ZU9iamVjdDtcclxudmFyIF9faW1wb3J0U3RhcjtcclxudmFyIF9faW1wb3J0RGVmYXVsdDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEluO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nO1xyXG52YXIgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U7XHJcbnZhciBfX2Rpc3Bvc2VSZXNvdXJjZXM7XHJcbnZhciBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjtcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19lc0RlY29yYXRlID0gZnVuY3Rpb24gKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgICAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzID0gZnVuY3Rpb24gKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Byb3BLZXkgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxuICAgIH07XHJcblxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiAoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX21ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdGVyID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgICAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgX19leHBvcnRTdGFyID0gZnVuY3Rpb24obSwgbykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbiAgICB9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXkgPSBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcclxuICAgICAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0RlbGVnYXRvciA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIGksIHA7XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgfSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcclxuICAgICAgICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgdmFyIGFyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XHJcbiAgICAgICAgICAgIHJldHVybiBhcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBvd25LZXlzKG8pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcclxuICAgICAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0RGVmYXVsdCA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4gPSBmdW5jdGlvbiAoc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICAgICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UgPSBmdW5jdGlvbiAoZW52LCB2YWx1ZSwgYXN5bmMpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcclxuICAgICAgICAgICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xyXG4gICAgICAgICAgICBpZiAoYXN5bmMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xyXG4gICAgICAgICAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcclxuICAgICAgICAgICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYXN5bmMpIHtcclxuICAgICAgICAgICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZGlzcG9zZVJlc291cmNlcyA9IGZ1bmN0aW9uIChlbnYpIHtcclxuICAgICAgICBmdW5jdGlvbiBmYWlsKGUpIHtcclxuICAgICAgICAgICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xyXG4gICAgICAgICAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgciwgcyA9IDA7XHJcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcyB8PSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWlsKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uID0gZnVuY3Rpb24gKHBhdGgsIHByZXNlcnZlSnN4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfTtcclxuXHJcbiAgICBleHBvcnRlcihcIl9fZXh0ZW5kc1wiLCBfX2V4dGVuZHMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Fzc2lnblwiLCBfX2Fzc2lnbik7XHJcbiAgICBleHBvcnRlcihcIl9fcmVzdFwiLCBfX3Jlc3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2RlY29yYXRlXCIsIF9fZGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3BhcmFtXCIsIF9fcGFyYW0pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2VzRGVjb3JhdGVcIiwgX19lc0RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19ydW5Jbml0aWFsaXplcnNcIiwgX19ydW5Jbml0aWFsaXplcnMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Byb3BLZXlcIiwgX19wcm9wS2V5KTtcclxuICAgIGV4cG9ydGVyKFwiX19zZXRGdW5jdGlvbk5hbWVcIiwgX19zZXRGdW5jdGlvbk5hbWUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ldGFkYXRhXCIsIF9fbWV0YWRhdGEpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0ZXJcIiwgX19hd2FpdGVyKTtcclxuICAgIGV4cG9ydGVyKFwiX19nZW5lcmF0b3JcIiwgX19nZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2V4cG9ydFN0YXJcIiwgX19leHBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19jcmVhdGVCaW5kaW5nXCIsIF9fY3JlYXRlQmluZGluZyk7XHJcbiAgICBleHBvcnRlcihcIl9fdmFsdWVzXCIsIF9fdmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZWFkXCIsIF9fcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkXCIsIF9fc3ByZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheXNcIiwgX19zcHJlYWRBcnJheXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5XCIsIF9fc3ByZWFkQXJyYXkpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0XCIsIF9fYXdhaXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jR2VuZXJhdG9yXCIsIF9fYXN5bmNHZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jRGVsZWdhdG9yXCIsIF9fYXN5bmNEZWxlZ2F0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jVmFsdWVzXCIsIF9fYXN5bmNWYWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ha2VUZW1wbGF0ZU9iamVjdFwiLCBfX21ha2VUZW1wbGF0ZU9iamVjdCk7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0U3RhclwiLCBfX2ltcG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydERlZmF1bHRcIiwgX19pbXBvcnREZWZhdWx0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZEdldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZFNldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZEluXCIsIF9fY2xhc3NQcml2YXRlRmllbGRJbik7XHJcbiAgICBleHBvcnRlcihcIl9fYWRkRGlzcG9zYWJsZVJlc291cmNlXCIsIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKTtcclxuICAgIGV4cG9ydGVyKFwiX19kaXNwb3NlUmVzb3VyY2VzXCIsIF9fZGlzcG9zZVJlc291cmNlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uXCIsIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKTtcclxufSk7XHJcblxyXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIF9fZXh0ZW5kczogX19leHRlbmRzLFxyXG4gICAgX19hc3NpZ246IF9fYXNzaWduLFxyXG4gICAgX19yZXN0OiBfX3Jlc3QsXHJcbiAgICBfX2RlY29yYXRlOiBfX2RlY29yYXRlLFxyXG4gICAgX19wYXJhbTogX19wYXJhbSxcclxuICAgIF9fZXNEZWNvcmF0ZTogX19lc0RlY29yYXRlLFxyXG4gICAgX19ydW5Jbml0aWFsaXplcnM6IF9fcnVuSW5pdGlhbGl6ZXJzLFxyXG4gICAgX19wcm9wS2V5OiBfX3Byb3BLZXksXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZTogX19zZXRGdW5jdGlvbk5hbWUsXHJcbiAgICBfX21ldGFkYXRhOiBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyOiBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcjogX19nZW5lcmF0b3IsXHJcbiAgICBfX2V4cG9ydFN0YXI6IF9fZXhwb3J0U3RhcixcclxuICAgIF9fY3JlYXRlQmluZGluZzogX19jcmVhdGVCaW5kaW5nLFxyXG4gICAgX192YWx1ZXM6IF9fdmFsdWVzLFxyXG4gICAgX19yZWFkOiBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZDogX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5czogX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5OiBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdDogX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3I6IF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yOiBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlczogX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0OiBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcjogX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0OiBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldDogX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbjogX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U6IF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzOiBfX2Rpc3Bvc2VSZXNvdXJjZXMsXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjogX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXHJcbn0pO1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sZWFuU2VsZWN0b3IgPSBleHBvcnRzLlNlbGVjdG9yVHlwZSA9IHZvaWQgMDtcbnZhciBTZWxlY3RvclR5cGU7XG4oZnVuY3Rpb24gKFNlbGVjdG9yVHlwZSkge1xuICAgIFNlbGVjdG9yVHlwZVtcIkVOVlwiXSA9IFwiZW52XCI7XG4gICAgU2VsZWN0b3JUeXBlW1wiQ09ORklHXCJdID0gXCJzaGFyZWQgY29uZmlnIGVudHJ5XCI7XG59KShTZWxlY3RvclR5cGUgPSBleHBvcnRzLlNlbGVjdG9yVHlwZSB8fCAoZXhwb3J0cy5TZWxlY3RvclR5cGUgPSB7fSkpO1xuY29uc3QgYm9vbGVhblNlbGVjdG9yID0gKG9iaiwga2V5LCB0eXBlKSA9PiB7XG4gICAgaWYgKCEoa2V5IGluIG9iaikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKG9ialtrZXldID09PSBcInRydWVcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9ialtrZXldID09PSBcImZhbHNlXCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBsb2FkICR7dHlwZX0gXCIke2tleX1cIi4gRXhwZWN0ZWQgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLCBnb3QgJHtvYmpba2V5XX0uYCk7XG59O1xuZXhwb3J0cy5ib29sZWFuU2VsZWN0b3IgPSBib29sZWFuU2VsZWN0b3I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jvb2xlYW5TZWxlY3RvclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT0RFX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlRfQ09ORklHX09QVElPTlMgPSBleHBvcnRzLkRFRkFVTFRfVVNFX0RVQUxTVEFDS19FTkRQT0lOVCA9IGV4cG9ydHMuQ09ORklHX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlQgPSBleHBvcnRzLkVOVl9VU0VfRFVBTFNUQUNLX0VORFBPSU5UID0gdm9pZCAwO1xuY29uc3QgdXRpbF9jb25maWdfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWNvbmZpZy1wcm92aWRlclwiKTtcbmV4cG9ydHMuRU5WX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlQgPSBcIkFXU19VU0VfRFVBTFNUQUNLX0VORFBPSU5UXCI7XG5leHBvcnRzLkNPTkZJR19VU0VfRFVBTFNUQUNLX0VORFBPSU5UID0gXCJ1c2VfZHVhbHN0YWNrX2VuZHBvaW50XCI7XG5leHBvcnRzLkRFRkFVTFRfVVNFX0RVQUxTVEFDS19FTkRQT0lOVCA9IGZhbHNlO1xuZXhwb3J0cy5OT0RFX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlRfQ09ORklHX09QVElPTlMgPSB7XG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiAoMCwgdXRpbF9jb25maWdfcHJvdmlkZXJfMS5ib29sZWFuU2VsZWN0b3IpKGVudiwgZXhwb3J0cy5FTlZfVVNFX0RVQUxTVEFDS19FTkRQT0lOVCwgdXRpbF9jb25maWdfcHJvdmlkZXJfMS5TZWxlY3RvclR5cGUuRU5WKSxcbiAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiAoMCwgdXRpbF9jb25maWdfcHJvdmlkZXJfMS5ib29sZWFuU2VsZWN0b3IpKHByb2ZpbGUsIGV4cG9ydHMuQ09ORklHX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlQsIHV0aWxfY29uZmlnX3Byb3ZpZGVyXzEuU2VsZWN0b3JUeXBlLkNPTkZJRyksXG4gICAgZGVmYXVsdDogZmFsc2UsXG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyA9IGV4cG9ydHMuREVGQVVMVF9VU0VfRklQU19FTkRQT0lOVCA9IGV4cG9ydHMuQ09ORklHX1VTRV9GSVBTX0VORFBPSU5UID0gZXhwb3J0cy5FTlZfVVNFX0ZJUFNfRU5EUE9JTlQgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtY29uZmlnLXByb3ZpZGVyXCIpO1xuZXhwb3J0cy5FTlZfVVNFX0ZJUFNfRU5EUE9JTlQgPSBcIkFXU19VU0VfRklQU19FTkRQT0lOVFwiO1xuZXhwb3J0cy5DT05GSUdfVVNFX0ZJUFNfRU5EUE9JTlQgPSBcInVzZV9maXBzX2VuZHBvaW50XCI7XG5leHBvcnRzLkRFRkFVTFRfVVNFX0ZJUFNfRU5EUE9JTlQgPSBmYWxzZTtcbmV4cG9ydHMuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyA9IHtcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+ICgwLCB1dGlsX2NvbmZpZ19wcm92aWRlcl8xLmJvb2xlYW5TZWxlY3RvcikoZW52LCBleHBvcnRzLkVOVl9VU0VfRklQU19FTkRQT0lOVCwgdXRpbF9jb25maWdfcHJvdmlkZXJfMS5TZWxlY3RvclR5cGUuRU5WKSxcbiAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiAoMCwgdXRpbF9jb25maWdfcHJvdmlkZXJfMS5ib29sZWFuU2VsZWN0b3IpKHByb2ZpbGUsIGV4cG9ydHMuQ09ORklHX1VTRV9GSVBTX0VORFBPSU5ULCB1dGlsX2NvbmZpZ19wcm92aWRlcl8xLlNlbGVjdG9yVHlwZS5DT05GSUcpLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vcm1hbGl6ZVByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3Qgbm9ybWFsaXplUHJvdmlkZXIgPSAoaW5wdXQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICBjb25zdCBwcm9taXNpZmllZCA9IFByb21pc2UucmVzb2x2ZShpbnB1dCk7XG4gICAgcmV0dXJuICgpID0+IHByb21pc2lmaWVkO1xufTtcbmV4cG9ydHMubm9ybWFsaXplUHJvdmlkZXIgPSBub3JtYWxpemVQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbm9ybWFsaXplUHJvdmlkZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUN1c3RvbUVuZHBvaW50c0NvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfbWlkZGxld2FyZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtbWlkZGxld2FyZVwiKTtcbmNvbnN0IHJlc29sdmVDdXN0b21FbmRwb2ludHNDb25maWcgPSAoaW5wdXQpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgZW5kcG9pbnQsIHVybFBhcnNlciB9ID0gaW5wdXQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHRsczogKF9hID0gaW5wdXQudGxzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlLFxuICAgICAgICBlbmRwb2ludDogKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKSh0eXBlb2YgZW5kcG9pbnQgPT09IFwic3RyaW5nXCIgPyB1cmxQYXJzZXIoZW5kcG9pbnQpIDogZW5kcG9pbnQpLFxuICAgICAgICBpc0N1c3RvbUVuZHBvaW50OiB0cnVlLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKSgoX2IgPSBpbnB1dC51c2VEdWFsc3RhY2tFbmRwb2ludCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UpLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlQ3VzdG9tRW5kcG9pbnRzQ29uZmlnID0gcmVzb2x2ZUN1c3RvbUVuZHBvaW50c0NvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50RnJvbVJlZ2lvbiA9IHZvaWQgMDtcbmNvbnN0IGdldEVuZHBvaW50RnJvbVJlZ2lvbiA9IGFzeW5jIChpbnB1dCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IHRscyA9IHRydWUgfSA9IGlucHV0O1xuICAgIGNvbnN0IHJlZ2lvbiA9IGF3YWl0IGlucHV0LnJlZ2lvbigpO1xuICAgIGNvbnN0IGRuc0hvc3RSZWdleCA9IG5ldyBSZWdFeHAoL14oW2EtekEtWjAtOV18W2EtekEtWjAtOV1bYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSkkLyk7XG4gICAgaWYgKCFkbnNIb3N0UmVnZXgudGVzdChyZWdpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVnaW9uIGluIGNsaWVudCBjb25maWdcIik7XG4gICAgfVxuICAgIGNvbnN0IHVzZUR1YWxzdGFja0VuZHBvaW50ID0gYXdhaXQgaW5wdXQudXNlRHVhbHN0YWNrRW5kcG9pbnQoKTtcbiAgICBjb25zdCB1c2VGaXBzRW5kcG9pbnQgPSBhd2FpdCBpbnB1dC51c2VGaXBzRW5kcG9pbnQoKTtcbiAgICBjb25zdCB7IGhvc3RuYW1lIH0gPSAoX2EgPSAoYXdhaXQgaW5wdXQucmVnaW9uSW5mb1Byb3ZpZGVyKHJlZ2lvbiwgeyB1c2VEdWFsc3RhY2tFbmRwb2ludCwgdXNlRmlwc0VuZHBvaW50IH0pKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgaWYgKCFob3N0bmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBob3N0bmFtZSBmcm9tIGNsaWVudCBjb25maWdcIik7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC51cmxQYXJzZXIoYCR7dGxzID8gXCJodHRwczpcIiA6IFwiaHR0cDpcIn0vLyR7aG9zdG5hbWV9YCk7XG59O1xuZXhwb3J0cy5nZXRFbmRwb2ludEZyb21SZWdpb24gPSBnZXRFbmRwb2ludEZyb21SZWdpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlRW5kcG9pbnRzQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgdXRpbF9taWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1taWRkbGV3YXJlXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRGcm9tUmVnaW9uXzEgPSByZXF1aXJlKFwiLi91dGlscy9nZXRFbmRwb2ludEZyb21SZWdpb25cIik7XG5jb25zdCByZXNvbHZlRW5kcG9pbnRzQ29uZmlnID0gKGlucHV0KSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB1c2VEdWFsc3RhY2tFbmRwb2ludCA9ICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikoKF9hID0gaW5wdXQudXNlRHVhbHN0YWNrRW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlKTtcbiAgICBjb25zdCB7IGVuZHBvaW50LCB1c2VGaXBzRW5kcG9pbnQsIHVybFBhcnNlciB9ID0gaW5wdXQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHRsczogKF9iID0gaW5wdXQudGxzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0cnVlLFxuICAgICAgICBlbmRwb2ludDogZW5kcG9pbnRcbiAgICAgICAgICAgID8gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKSh0eXBlb2YgZW5kcG9pbnQgPT09IFwic3RyaW5nXCIgPyB1cmxQYXJzZXIoZW5kcG9pbnQpIDogZW5kcG9pbnQpXG4gICAgICAgICAgICA6ICgpID0+ICgwLCBnZXRFbmRwb2ludEZyb21SZWdpb25fMS5nZXRFbmRwb2ludEZyb21SZWdpb24pKHsgLi4uaW5wdXQsIHVzZUR1YWxzdGFja0VuZHBvaW50LCB1c2VGaXBzRW5kcG9pbnQgfSksXG4gICAgICAgIGlzQ3VzdG9tRW5kcG9pbnQ6ICEhZW5kcG9pbnQsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50LFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlRW5kcG9pbnRzQ29uZmlnID0gcmVzb2x2ZUVuZHBvaW50c0NvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTm9kZVVzZUR1YWxzdGFja0VuZHBvaW50Q29uZmlnT3B0aW9uc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Ob2RlVXNlRmlwc0VuZHBvaW50Q29uZmlnT3B0aW9uc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXNvbHZlQ3VzdG9tRW5kcG9pbnRzQ29uZmlnXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc29sdmVFbmRwb2ludHNDb25maWdcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTk9ERV9SRUdJT05fQ09ORklHX0ZJTEVfT1BUSU9OUyA9IGV4cG9ydHMuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMgPSBleHBvcnRzLlJFR0lPTl9JTklfTkFNRSA9IGV4cG9ydHMuUkVHSU9OX0VOVl9OQU1FID0gdm9pZCAwO1xuZXhwb3J0cy5SRUdJT05fRU5WX05BTUUgPSBcIkFXU19SRUdJT05cIjtcbmV4cG9ydHMuUkVHSU9OX0lOSV9OQU1FID0gXCJyZWdpb25cIjtcbmV4cG9ydHMuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMgPSB7XG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbZXhwb3J0cy5SRUdJT05fRU5WX05BTUVdLFxuICAgIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHByb2ZpbGVbZXhwb3J0cy5SRUdJT05fSU5JX05BTUVdLFxuICAgIGRlZmF1bHQ6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnaW9uIGlzIG1pc3NpbmdcIik7XG4gICAgfSxcbn07XG5leHBvcnRzLk5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMgPSB7XG4gICAgcHJlZmVycmVkRmlsZTogXCJjcmVkZW50aWFsc1wiLFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRmlwc1JlZ2lvbiA9IHZvaWQgMDtcbmNvbnN0IGlzRmlwc1JlZ2lvbiA9IChyZWdpb24pID0+IHR5cGVvZiByZWdpb24gPT09IFwic3RyaW5nXCIgJiYgKHJlZ2lvbi5zdGFydHNXaXRoKFwiZmlwcy1cIikgfHwgcmVnaW9uLmVuZHNXaXRoKFwiLWZpcHNcIikpO1xuZXhwb3J0cy5pc0ZpcHNSZWdpb24gPSBpc0ZpcHNSZWdpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWFsUmVnaW9uID0gdm9pZCAwO1xuY29uc3QgaXNGaXBzUmVnaW9uXzEgPSByZXF1aXJlKFwiLi9pc0ZpcHNSZWdpb25cIik7XG5jb25zdCBnZXRSZWFsUmVnaW9uID0gKHJlZ2lvbikgPT4gKDAsIGlzRmlwc1JlZ2lvbl8xLmlzRmlwc1JlZ2lvbikocmVnaW9uKVxuICAgID8gW1wiZmlwcy1hd3MtZ2xvYmFsXCIsIFwiYXdzLWZpcHNcIl0uaW5jbHVkZXMocmVnaW9uKVxuICAgICAgICA/IFwidXMtZWFzdC0xXCJcbiAgICAgICAgOiByZWdpb24ucmVwbGFjZSgvZmlwcy0oZGtyLXxwcm9kLSk/fC1maXBzLywgXCJcIilcbiAgICA6IHJlZ2lvbjtcbmV4cG9ydHMuZ2V0UmVhbFJlZ2lvbiA9IGdldFJlYWxSZWdpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlUmVnaW9uQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgZ2V0UmVhbFJlZ2lvbl8xID0gcmVxdWlyZShcIi4vZ2V0UmVhbFJlZ2lvblwiKTtcbmNvbnN0IGlzRmlwc1JlZ2lvbl8xID0gcmVxdWlyZShcIi4vaXNGaXBzUmVnaW9uXCIpO1xuY29uc3QgcmVzb2x2ZVJlZ2lvbkNvbmZpZyA9IChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IHsgcmVnaW9uLCB1c2VGaXBzRW5kcG9pbnQgfSA9IGlucHV0O1xuICAgIGlmICghcmVnaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZ2lvbiBpcyBtaXNzaW5nXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgcmVnaW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZ2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0UmVhbFJlZ2lvbl8xLmdldFJlYWxSZWdpb24pKHJlZ2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlZFJlZ2lvbiA9IGF3YWl0IHJlZ2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBnZXRSZWFsUmVnaW9uXzEuZ2V0UmVhbFJlZ2lvbikocHJvdmlkZWRSZWdpb24pO1xuICAgICAgICB9LFxuICAgICAgICB1c2VGaXBzRW5kcG9pbnQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVkUmVnaW9uID0gdHlwZW9mIHJlZ2lvbiA9PT0gXCJzdHJpbmdcIiA/IHJlZ2lvbiA6IGF3YWl0IHJlZ2lvbigpO1xuICAgICAgICAgICAgaWYgKCgwLCBpc0ZpcHNSZWdpb25fMS5pc0ZpcHNSZWdpb24pKHByb3ZpZGVkUmVnaW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB1c2VGaXBzRW5kcG9pbnQgIT09IFwiZnVuY3Rpb25cIiA/IFByb21pc2UucmVzb2x2ZSghIXVzZUZpcHNFbmRwb2ludCkgOiB1c2VGaXBzRW5kcG9pbnQoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZVJlZ2lvbkNvbmZpZyA9IHJlc29sdmVSZWdpb25Db25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbmZpZ1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXNvbHZlUmVnaW9uQ29uZmlnXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0SG9zdG5hbWVGcm9tVmFyaWFudHMgPSB2b2lkIDA7XG5jb25zdCBnZXRIb3N0bmFtZUZyb21WYXJpYW50cyA9ICh2YXJpYW50cyA9IFtdLCB7IHVzZUZpcHNFbmRwb2ludCwgdXNlRHVhbHN0YWNrRW5kcG9pbnQgfSkgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gdmFyaWFudHMuZmluZCgoeyB0YWdzIH0pID0+IHVzZUZpcHNFbmRwb2ludCA9PT0gdGFncy5pbmNsdWRlcyhcImZpcHNcIikgJiYgdXNlRHVhbHN0YWNrRW5kcG9pbnQgPT09IHRhZ3MuaW5jbHVkZXMoXCJkdWFsc3RhY2tcIikpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaG9zdG5hbWU7XG59O1xuZXhwb3J0cy5nZXRIb3N0bmFtZUZyb21WYXJpYW50cyA9IGdldEhvc3RuYW1lRnJvbVZhcmlhbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmVzb2x2ZWRIb3N0bmFtZSA9IHZvaWQgMDtcbmNvbnN0IGdldFJlc29sdmVkSG9zdG5hbWUgPSAocmVzb2x2ZWRSZWdpb24sIHsgcmVnaW9uSG9zdG5hbWUsIHBhcnRpdGlvbkhvc3RuYW1lIH0pID0+IHJlZ2lvbkhvc3RuYW1lXG4gICAgPyByZWdpb25Ib3N0bmFtZVxuICAgIDogcGFydGl0aW9uSG9zdG5hbWVcbiAgICAgICAgPyBwYXJ0aXRpb25Ib3N0bmFtZS5yZXBsYWNlKFwie3JlZ2lvbn1cIiwgcmVzb2x2ZWRSZWdpb24pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuZXhwb3J0cy5nZXRSZXNvbHZlZEhvc3RuYW1lID0gZ2V0UmVzb2x2ZWRIb3N0bmFtZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJlc29sdmVkUGFydGl0aW9uID0gdm9pZCAwO1xuY29uc3QgZ2V0UmVzb2x2ZWRQYXJ0aXRpb24gPSAocmVnaW9uLCB7IHBhcnRpdGlvbkhhc2ggfSkgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSBPYmplY3Qua2V5cyhwYXJ0aXRpb25IYXNoIHx8IHt9KS5maW5kKChrZXkpID0+IHBhcnRpdGlvbkhhc2hba2V5XS5yZWdpb25zLmluY2x1ZGVzKHJlZ2lvbikpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcImF3c1wiOyB9O1xuZXhwb3J0cy5nZXRSZXNvbHZlZFBhcnRpdGlvbiA9IGdldFJlc29sdmVkUGFydGl0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmVzb2x2ZWRTaWduaW5nUmVnaW9uID0gdm9pZCAwO1xuY29uc3QgZ2V0UmVzb2x2ZWRTaWduaW5nUmVnaW9uID0gKGhvc3RuYW1lLCB7IHNpZ25pbmdSZWdpb24sIHJlZ2lvblJlZ2V4LCB1c2VGaXBzRW5kcG9pbnQgfSkgPT4ge1xuICAgIGlmIChzaWduaW5nUmVnaW9uKSB7XG4gICAgICAgIHJldHVybiBzaWduaW5nUmVnaW9uO1xuICAgIH1cbiAgICBlbHNlIGlmICh1c2VGaXBzRW5kcG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmVnaW9uUmVnZXhKcyA9IHJlZ2lvblJlZ2V4LnJlcGxhY2UoXCJcXFxcXFxcXFwiLCBcIlxcXFxcIikucmVwbGFjZSgvXlxcXi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcJCQvZywgXCJcXFxcLlwiKTtcbiAgICAgICAgY29uc3QgcmVnaW9uUmVnZXhtYXRjaEFycmF5ID0gaG9zdG5hbWUubWF0Y2gocmVnaW9uUmVnZXhKcyk7XG4gICAgICAgIGlmIChyZWdpb25SZWdleG1hdGNoQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWdpb25SZWdleG1hdGNoQXJyYXlbMF0uc2xpY2UoMSwgLTEpO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydHMuZ2V0UmVzb2x2ZWRTaWduaW5nUmVnaW9uID0gZ2V0UmVzb2x2ZWRTaWduaW5nUmVnaW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmVnaW9uSW5mbyA9IHZvaWQgMDtcbmNvbnN0IGdldEhvc3RuYW1lRnJvbVZhcmlhbnRzXzEgPSByZXF1aXJlKFwiLi9nZXRIb3N0bmFtZUZyb21WYXJpYW50c1wiKTtcbmNvbnN0IGdldFJlc29sdmVkSG9zdG5hbWVfMSA9IHJlcXVpcmUoXCIuL2dldFJlc29sdmVkSG9zdG5hbWVcIik7XG5jb25zdCBnZXRSZXNvbHZlZFBhcnRpdGlvbl8xID0gcmVxdWlyZShcIi4vZ2V0UmVzb2x2ZWRQYXJ0aXRpb25cIik7XG5jb25zdCBnZXRSZXNvbHZlZFNpZ25pbmdSZWdpb25fMSA9IHJlcXVpcmUoXCIuL2dldFJlc29sdmVkU2lnbmluZ1JlZ2lvblwiKTtcbmNvbnN0IGdldFJlZ2lvbkluZm8gPSAocmVnaW9uLCB7IHVzZUZpcHNFbmRwb2ludCA9IGZhbHNlLCB1c2VEdWFsc3RhY2tFbmRwb2ludCA9IGZhbHNlLCBzaWduaW5nU2VydmljZSwgcmVnaW9uSGFzaCwgcGFydGl0aW9uSGFzaCwgfSkgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9ICgwLCBnZXRSZXNvbHZlZFBhcnRpdGlvbl8xLmdldFJlc29sdmVkUGFydGl0aW9uKShyZWdpb24sIHsgcGFydGl0aW9uSGFzaCB9KTtcbiAgICBjb25zdCByZXNvbHZlZFJlZ2lvbiA9IHJlZ2lvbiBpbiByZWdpb25IYXNoID8gcmVnaW9uIDogKF9iID0gKF9hID0gcGFydGl0aW9uSGFzaFtwYXJ0aXRpb25dKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5kcG9pbnQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHJlZ2lvbjtcbiAgICBjb25zdCBob3N0bmFtZU9wdGlvbnMgPSB7IHVzZUZpcHNFbmRwb2ludCwgdXNlRHVhbHN0YWNrRW5kcG9pbnQgfTtcbiAgICBjb25zdCByZWdpb25Ib3N0bmFtZSA9ICgwLCBnZXRIb3N0bmFtZUZyb21WYXJpYW50c18xLmdldEhvc3RuYW1lRnJvbVZhcmlhbnRzKSgoX2MgPSByZWdpb25IYXNoW3Jlc29sdmVkUmVnaW9uXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnZhcmlhbnRzLCBob3N0bmFtZU9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcnRpdGlvbkhvc3RuYW1lID0gKDAsIGdldEhvc3RuYW1lRnJvbVZhcmlhbnRzXzEuZ2V0SG9zdG5hbWVGcm9tVmFyaWFudHMpKChfZCA9IHBhcnRpdGlvbkhhc2hbcGFydGl0aW9uXSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLnZhcmlhbnRzLCBob3N0bmFtZU9wdGlvbnMpO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gKDAsIGdldFJlc29sdmVkSG9zdG5hbWVfMS5nZXRSZXNvbHZlZEhvc3RuYW1lKShyZXNvbHZlZFJlZ2lvbiwgeyByZWdpb25Ib3N0bmFtZSwgcGFydGl0aW9uSG9zdG5hbWUgfSk7XG4gICAgaWYgKGhvc3RuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmRwb2ludCByZXNvbHV0aW9uIGZhaWxlZCBmb3I6ICR7eyByZXNvbHZlZFJlZ2lvbiwgdXNlRmlwc0VuZHBvaW50LCB1c2VEdWFsc3RhY2tFbmRwb2ludCB9fWApO1xuICAgIH1cbiAgICBjb25zdCBzaWduaW5nUmVnaW9uID0gKDAsIGdldFJlc29sdmVkU2lnbmluZ1JlZ2lvbl8xLmdldFJlc29sdmVkU2lnbmluZ1JlZ2lvbikoaG9zdG5hbWUsIHtcbiAgICAgICAgc2lnbmluZ1JlZ2lvbjogKF9lID0gcmVnaW9uSGFzaFtyZXNvbHZlZFJlZ2lvbl0pID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5zaWduaW5nUmVnaW9uLFxuICAgICAgICByZWdpb25SZWdleDogcGFydGl0aW9uSGFzaFtwYXJ0aXRpb25dLnJlZ2lvblJlZ2V4LFxuICAgICAgICB1c2VGaXBzRW5kcG9pbnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGFydGl0aW9uLFxuICAgICAgICBzaWduaW5nU2VydmljZSxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIC4uLihzaWduaW5nUmVnaW9uICYmIHsgc2lnbmluZ1JlZ2lvbiB9KSxcbiAgICAgICAgLi4uKCgoX2YgPSByZWdpb25IYXNoW3Jlc29sdmVkUmVnaW9uXSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnNpZ25pbmdTZXJ2aWNlKSAmJiB7XG4gICAgICAgICAgICBzaWduaW5nU2VydmljZTogcmVnaW9uSGFzaFtyZXNvbHZlZFJlZ2lvbl0uc2lnbmluZ1NlcnZpY2UsXG4gICAgICAgIH0pLFxuICAgIH07XG59O1xuZXhwb3J0cy5nZXRSZWdpb25JbmZvID0gZ2V0UmVnaW9uSW5mbztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vUGFydGl0aW9uSGFzaFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9SZWdpb25IYXNoXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dldFJlZ2lvbkluZm9cIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbmRwb2ludHNDb25maWdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVnaW9uQ29uZmlnXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3JlZ2lvbkluZm9cIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmllbGRQb3NpdGlvbiA9IHZvaWQgMDtcbnZhciBGaWVsZFBvc2l0aW9uO1xuKGZ1bmN0aW9uIChGaWVsZFBvc2l0aW9uKSB7XG4gICAgRmllbGRQb3NpdGlvbltGaWVsZFBvc2l0aW9uW1wiSEVBREVSXCJdID0gMF0gPSBcIkhFQURFUlwiO1xuICAgIEZpZWxkUG9zaXRpb25bRmllbGRQb3NpdGlvbltcIlRSQUlMRVJcIl0gPSAxXSA9IFwiVFJBSUxFUlwiO1xufSkoRmllbGRQb3NpdGlvbiA9IGV4cG9ydHMuRmllbGRQb3NpdGlvbiB8fCAoZXhwb3J0cy5GaWVsZFBvc2l0aW9uID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpZWxkID0gdm9pZCAwO1xuY29uc3QgRmllbGRQb3NpdGlvbl8xID0gcmVxdWlyZShcIi4vRmllbGRQb3NpdGlvblwiKTtcbmNsYXNzIEZpZWxkIHtcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUsIGtpbmQgPSBGaWVsZFBvc2l0aW9uXzEuRmllbGRQb3NpdGlvbi5IRUFERVIsIHZhbHVlcyA9IFtdIH0pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgfVxuICAgIGFkZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgc2V0KHZhbHVlcykge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgICB9XG4gICAgcmVtb3ZlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWx1ZSk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubWFwKCh2KSA9PiAodi5pbmNsdWRlcyhcIixcIikgfHwgdi5pbmNsdWRlcyhcIiBcIikgPyBgXCIke3Z9XCJgIDogdikpLmpvaW4oXCIsIFwiKTtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gICAgfVxufVxuZXhwb3J0cy5GaWVsZCA9IEZpZWxkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmllbGRzID0gdm9pZCAwO1xuY2xhc3MgRmllbGRzIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGZpZWxkcyA9IFtdLCBlbmNvZGluZyA9IFwidXRmLThcIiB9KSB7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IHt9O1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCh0aGlzLnNldEZpZWxkLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuICAgIHNldEZpZWxkKGZpZWxkKSB7XG4gICAgICAgIHRoaXMuZW50cmllc1tmaWVsZC5uYW1lLnRvTG93ZXJDYXNlKCldID0gZmllbGQ7XG4gICAgfVxuICAgIGdldEZpZWxkKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbiAgICByZW1vdmVGaWVsZChuYW1lKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVudHJpZXNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG4gICAgZ2V0QnlUeXBlKGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5lbnRyaWVzKS5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5raW5kID09PSBraW5kKTtcbiAgICB9XG59XG5leHBvcnRzLkZpZWxkcyA9IEZpZWxkcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwUmVxdWVzdCA9IHZvaWQgMDtcbmNsYXNzIEh0dHBSZXF1ZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIjtcbiAgICAgICAgdGhpcy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdG5hbWUgfHwgXCJsb2NhbGhvc3RcIjtcbiAgICAgICAgdGhpcy5wb3J0ID0gb3B0aW9ucy5wb3J0O1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSB8fCB7fTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICB0aGlzLmJvZHkgPSBvcHRpb25zLmJvZHk7XG4gICAgICAgIHRoaXMucHJvdG9jb2wgPSBvcHRpb25zLnByb3RvY29sXG4gICAgICAgICAgICA/IG9wdGlvbnMucHJvdG9jb2wuc2xpY2UoLTEpICE9PSBcIjpcIlxuICAgICAgICAgICAgICAgID8gYCR7b3B0aW9ucy5wcm90b2NvbH06YFxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5wcm90b2NvbFxuICAgICAgICAgICAgOiBcImh0dHBzOlwiO1xuICAgICAgICB0aGlzLnBhdGggPSBvcHRpb25zLnBhdGggPyAob3B0aW9ucy5wYXRoLmNoYXJBdCgwKSAhPT0gXCIvXCIgPyBgLyR7b3B0aW9ucy5wYXRofWAgOiBvcHRpb25zLnBhdGgpIDogXCIvXCI7XG4gICAgfVxuICAgIHN0YXRpYyBpc0luc3RhbmNlKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByZXEgPSByZXF1ZXN0O1xuICAgICAgICByZXR1cm4gKFwibWV0aG9kXCIgaW4gcmVxICYmXG4gICAgICAgICAgICBcInByb3RvY29sXCIgaW4gcmVxICYmXG4gICAgICAgICAgICBcImhvc3RuYW1lXCIgaW4gcmVxICYmXG4gICAgICAgICAgICBcInBhdGhcIiBpbiByZXEgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZXFbXCJxdWVyeVwiXSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlcVtcImhlYWRlcnNcIl0gPT09IFwib2JqZWN0XCIpO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IEh0dHBSZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMsXG4gICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNsb25lZC5xdWVyeSlcbiAgICAgICAgICAgIGNsb25lZC5xdWVyeSA9IGNsb25lUXVlcnkoY2xvbmVkLnF1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBSZXF1ZXN0ID0gSHR0cFJlcXVlc3Q7XG5mdW5jdGlvbiBjbG9uZVF1ZXJ5KHF1ZXJ5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGNhcnJ5LCBwYXJhbU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBxdWVyeVtwYXJhbU5hbWVdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY2FycnksXG4gICAgICAgICAgICBbcGFyYW1OYW1lXTogQXJyYXkuaXNBcnJheShwYXJhbSkgPyBbLi4ucGFyYW1dIDogcGFyYW0sXG4gICAgICAgIH07XG4gICAgfSwge30pO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cFJlc3BvbnNlID0gdm9pZCAwO1xuY2xhc3MgSHR0cFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IG9wdGlvbnMuc3RhdHVzQ29kZTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICB0aGlzLmJvZHkgPSBvcHRpb25zLmJvZHk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0luc3RhbmNlKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlc3AgPSByZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXNwLnN0YXR1c0NvZGUgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHJlc3AuaGVhZGVycyA9PT0gXCJvYmplY3RcIjtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBSZXNwb25zZSA9IEh0dHBSZXNwb25zZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWRIb3N0bmFtZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzVmFsaWRIb3N0bmFtZShob3N0bmFtZSkge1xuICAgIGNvbnN0IGhvc3RQYXR0ZXJuID0gL15bYS16MC05XVthLXowLTlcXC5cXC1dKlthLXowLTldJC87XG4gICAgcmV0dXJuIGhvc3RQYXR0ZXJuLnRlc3QoaG9zdG5hbWUpO1xufVxuZXhwb3J0cy5pc1ZhbGlkSG9zdG5hbWUgPSBpc1ZhbGlkSG9zdG5hbWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ZpZWxkXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ZpZWxkUG9zaXRpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRmllbGRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBIYW5kbGVyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBSZXF1ZXN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBSZXNwb25zZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pc1ZhbGlkSG9zdG5hbWVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q29udGVudExlbmd0aFBsdWdpbiA9IGV4cG9ydHMuY29udGVudExlbmd0aE1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5jb250ZW50TGVuZ3RoTWlkZGxld2FyZSA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgQ09OVEVOVF9MRU5HVEhfSEVBREVSID0gXCJjb250ZW50LWxlbmd0aFwiO1xuZnVuY3Rpb24gY29udGVudExlbmd0aE1pZGRsZXdhcmUoYm9keUxlbmd0aENoZWNrZXIpIHtcbiAgICByZXR1cm4gKG5leHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhcmdzLnJlcXVlc3Q7XG4gICAgICAgIGlmIChwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgICAgICAgY29uc3QgeyBib2R5LCBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKGJvZHkgJiZcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ci50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihDT05URU5UX0xFTkdUSF9IRUFERVIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGJvZHlMZW5ndGhDaGVja2VyKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ09OVEVOVF9MRU5HVEhfSEVBREVSXTogU3RyaW5nKGxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuY29udGVudExlbmd0aE1pZGRsZXdhcmUgPSBjb250ZW50TGVuZ3RoTWlkZGxld2FyZTtcbmV4cG9ydHMuY29udGVudExlbmd0aE1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIHN0ZXA6IFwiYnVpbGRcIixcbiAgICB0YWdzOiBbXCJTRVRfQ09OVEVOVF9MRU5HVEhcIiwgXCJDT05URU5UX0xFTkdUSFwiXSxcbiAgICBuYW1lOiBcImNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlXCIsXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuY29uc3QgZ2V0Q29udGVudExlbmd0aFBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZChjb250ZW50TGVuZ3RoTWlkZGxld2FyZShvcHRpb25zLmJvZHlMZW5ndGhDaGVja2VyKSwgZXhwb3J0cy5jb250ZW50TGVuZ3RoTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0Q29udGVudExlbmd0aFBsdWdpbiA9IGdldENvbnRlbnRMZW5ndGhQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0FybkJ1Y2tldE5hbWUgPSBleHBvcnRzLmlzRG5zQ29tcGF0aWJsZUJ1Y2tldE5hbWUgPSBleHBvcnRzLlMzX0hPU1ROQU1FX1BBVFRFUk4gPSBleHBvcnRzLkRPVF9QQVRURVJOID0gZXhwb3J0cy5yZXNvbHZlUGFyYW1zRm9yUzMgPSB2b2lkIDA7XG5jb25zdCByZXNvbHZlUGFyYW1zRm9yUzMgPSBhc3luYyAoZW5kcG9pbnRQYXJhbXMpID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSAoZW5kcG9pbnRQYXJhbXMgPT09IG51bGwgfHwgZW5kcG9pbnRQYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVuZHBvaW50UGFyYW1zLkJ1Y2tldCkgfHwgXCJcIjtcbiAgICBpZiAodHlwZW9mIGVuZHBvaW50UGFyYW1zLkJ1Y2tldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBlbmRwb2ludFBhcmFtcy5CdWNrZXQgPSBidWNrZXQucmVwbGFjZSgvIy9nLCBlbmNvZGVVUklDb21wb25lbnQoXCIjXCIpKS5yZXBsYWNlKC9cXD8vZywgZW5jb2RlVVJJQ29tcG9uZW50KFwiP1wiKSk7XG4gICAgfVxuICAgIGlmICgoMCwgZXhwb3J0cy5pc0FybkJ1Y2tldE5hbWUpKGJ1Y2tldCkpIHtcbiAgICAgICAgaWYgKGVuZHBvaW50UGFyYW1zLkZvcmNlUGF0aFN0eWxlID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoLXN0eWxlIGFkZHJlc3NpbmcgY2Fubm90IGJlIHVzZWQgd2l0aCBBUk4gYnVja2V0c1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICghKDAsIGV4cG9ydHMuaXNEbnNDb21wYXRpYmxlQnVja2V0TmFtZSkoYnVja2V0KSB8fFxuICAgICAgICAoYnVja2V0LmluZGV4T2YoXCIuXCIpICE9PSAtMSAmJiAhU3RyaW5nKGVuZHBvaW50UGFyYW1zLkVuZHBvaW50KS5zdGFydHNXaXRoKFwiaHR0cDpcIikpIHx8XG4gICAgICAgIGJ1Y2tldC50b0xvd2VyQ2FzZSgpICE9PSBidWNrZXQgfHxcbiAgICAgICAgYnVja2V0Lmxlbmd0aCA8IDMpIHtcbiAgICAgICAgZW5kcG9pbnRQYXJhbXMuRm9yY2VQYXRoU3R5bGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoZW5kcG9pbnRQYXJhbXMuRGlzYWJsZU11bHRpUmVnaW9uQWNjZXNzUG9pbnRzKSB7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zLmRpc2FibGVNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50cyA9IHRydWU7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zLkRpc2FibGVNUkFQID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZHBvaW50UGFyYW1zO1xufTtcbmV4cG9ydHMucmVzb2x2ZVBhcmFtc0ZvclMzID0gcmVzb2x2ZVBhcmFtc0ZvclMzO1xuY29uc3QgRE9NQUlOX1BBVFRFUk4gPSAvXlthLXowLTldW2EtejAtOVxcLlxcLV17MSw2MX1bYS16MC05XSQvO1xuY29uc3QgSVBfQUREUkVTU19QQVRURVJOID0gLyhcXGQrXFwuKXszfVxcZCsvO1xuY29uc3QgRE9UU19QQVRURVJOID0gL1xcLlxcLi87XG5leHBvcnRzLkRPVF9QQVRURVJOID0gL1xcLi87XG5leHBvcnRzLlMzX0hPU1ROQU1FX1BBVFRFUk4gPSAvXiguK1xcLik/czMoLWZpcHMpPyhcXC5kdWFsc3RhY2spP1suLV0oW2EtejAtOS1dKylcXC4vO1xuY29uc3QgaXNEbnNDb21wYXRpYmxlQnVja2V0TmFtZSA9IChidWNrZXROYW1lKSA9PiBET01BSU5fUEFUVEVSTi50ZXN0KGJ1Y2tldE5hbWUpICYmICFJUF9BRERSRVNTX1BBVFRFUk4udGVzdChidWNrZXROYW1lKSAmJiAhRE9UU19QQVRURVJOLnRlc3QoYnVja2V0TmFtZSk7XG5leHBvcnRzLmlzRG5zQ29tcGF0aWJsZUJ1Y2tldE5hbWUgPSBpc0Ruc0NvbXBhdGlibGVCdWNrZXROYW1lO1xuY29uc3QgaXNBcm5CdWNrZXROYW1lID0gKGJ1Y2tldE5hbWUpID0+IHtcbiAgICBjb25zdCBbYXJuLCBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudCwgdHlwZU9ySWRdID0gYnVja2V0TmFtZS5zcGxpdChcIjpcIik7XG4gICAgY29uc3QgaXNBcm4gPSBhcm4gPT09IFwiYXJuXCIgJiYgYnVja2V0TmFtZS5zcGxpdChcIjpcIikubGVuZ3RoID49IDY7XG4gICAgY29uc3QgaXNWYWxpZEFybiA9IFthcm4sIHBhcnRpdGlvbiwgc2VydmljZSwgYWNjb3VudCwgdHlwZU9ySWRdLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPT09IDU7XG4gICAgaWYgKGlzQXJuICYmICFpc1ZhbGlkQXJuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBBUk46ICR7YnVja2V0TmFtZX0gd2FzIGFuIGludmFsaWQgQVJOLmApO1xuICAgIH1cbiAgICByZXR1cm4gYXJuID09PSBcImFyblwiICYmICEhcGFydGl0aW9uICYmICEhc2VydmljZSAmJiAhIWFjY291bnQgJiYgISF0eXBlT3JJZDtcbn07XG5leHBvcnRzLmlzQXJuQnVja2V0TmFtZSA9IGlzQXJuQnVja2V0TmFtZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vczNcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ29uZmlnVmFsdWVQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IGNyZWF0ZUNvbmZpZ1ZhbHVlUHJvdmlkZXIgPSAoY29uZmlnS2V5LCBjYW5vbmljYWxFbmRwb2ludFBhcmFtS2V5LCBjb25maWcpID0+IHtcbiAgICBjb25zdCBjb25maWdQcm92aWRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjb25maWdWYWx1ZSA9IChfYSA9IGNvbmZpZ1tjb25maWdLZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25maWdbY2Fub25pY2FsRW5kcG9pbnRQYXJhbUtleV07XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnVmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICAgIH07XG4gICAgaWYgKGNvbmZpZ0tleSA9PT0gXCJlbmRwb2ludFwiIHx8IGNhbm9uaWNhbEVuZHBvaW50UGFyYW1LZXkgPT09IFwiZW5kcG9pbnRcIikge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBjb25maWdQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50ICYmIHR5cGVvZiBlbmRwb2ludCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGlmIChcInVybFwiIGluIGVuZHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludC51cmwuaHJlZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFwiaG9zdG5hbWVcIiBpbiBlbmRwb2ludCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCwgcGF0aCB9ID0gZW5kcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gXCI6XCIgKyBwb3J0IDogXCJcIn0ke3BhdGh9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZW5kcG9pbnQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjb25maWdQcm92aWRlcjtcbn07XG5leHBvcnRzLmNyZWF0ZUNvbmZpZ1ZhbHVlUHJvdmlkZXIgPSBjcmVhdGVDb25maWdWYWx1ZVByb3ZpZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVBhcmFtcyA9IGV4cG9ydHMuZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zID0gdm9pZCAwO1xuY29uc3Qgc2VydmljZV9jdXN0b21pemF0aW9uc18xID0gcmVxdWlyZShcIi4uL3NlcnZpY2UtY3VzdG9taXphdGlvbnNcIik7XG5jb25zdCBjcmVhdGVDb25maWdWYWx1ZVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVDb25maWdWYWx1ZVByb3ZpZGVyXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zID0gYXN5bmMgKGNvbW1hbmRJbnB1dCwgaW5zdHJ1Y3Rpb25zU3VwcGxpZXIsIGNsaWVudENvbmZpZywgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVuZHBvaW50UGFyYW1zID0gYXdhaXQgKDAsIGV4cG9ydHMucmVzb2x2ZVBhcmFtcykoY29tbWFuZElucHV0LCBpbnN0cnVjdGlvbnNTdXBwbGllciwgY2xpZW50Q29uZmlnKTtcbiAgICBpZiAodHlwZW9mIGNsaWVudENvbmZpZy5lbmRwb2ludFByb3ZpZGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY29uZmlnLmVuZHBvaW50UHJvdmlkZXIgaXMgbm90IHNldC5cIik7XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50ID0gY2xpZW50Q29uZmlnLmVuZHBvaW50UHJvdmlkZXIoZW5kcG9pbnRQYXJhbXMsIGNvbnRleHQpO1xuICAgIHJldHVybiBlbmRwb2ludDtcbn07XG5leHBvcnRzLmdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyA9IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucztcbmNvbnN0IHJlc29sdmVQYXJhbXMgPSBhc3luYyAoY29tbWFuZElucHV0LCBpbnN0cnVjdGlvbnNTdXBwbGllciwgY2xpZW50Q29uZmlnKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGVuZHBvaW50UGFyYW1zID0ge307XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gKChfYSA9IGluc3RydWN0aW9uc1N1cHBsaWVyID09PSBudWxsIHx8IGluc3RydWN0aW9uc1N1cHBsaWVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVjdGlvbnNTdXBwbGllci5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoaW5zdHJ1Y3Rpb25zU3VwcGxpZXIpKSB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBpbnN0cnVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoaW5zdHJ1Y3Rpb25zKSkge1xuICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdGF0aWNDb250ZXh0UGFyYW1zXCI6XG4gICAgICAgICAgICAgICAgZW5kcG9pbnRQYXJhbXNbbmFtZV0gPSBpbnN0cnVjdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb250ZXh0UGFyYW1zXCI6XG4gICAgICAgICAgICAgICAgZW5kcG9pbnRQYXJhbXNbbmFtZV0gPSBjb21tYW5kSW5wdXRbaW5zdHJ1Y3Rpb24ubmFtZV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY2xpZW50Q29udGV4dFBhcmFtc1wiOlxuICAgICAgICAgICAgY2FzZSBcImJ1aWx0SW5QYXJhbXNcIjpcbiAgICAgICAgICAgICAgICBlbmRwb2ludFBhcmFtc1tuYW1lXSA9IGF3YWl0ICgwLCBjcmVhdGVDb25maWdWYWx1ZVByb3ZpZGVyXzEuY3JlYXRlQ29uZmlnVmFsdWVQcm92aWRlcikoaW5zdHJ1Y3Rpb24ubmFtZSwgbmFtZSwgY2xpZW50Q29uZmlnKSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgZW5kcG9pbnQgcGFyYW1ldGVyIGluc3RydWN0aW9uOiBcIiArIEpTT04uc3RyaW5naWZ5KGluc3RydWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGluc3RydWN0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZW5kcG9pbnRQYXJhbXMsIGNsaWVudENvbmZpZyk7XG4gICAgfVxuICAgIGlmIChTdHJpbmcoY2xpZW50Q29uZmlnLnNlcnZpY2VJZCkudG9Mb3dlckNhc2UoKSA9PT0gXCJzM1wiKSB7XG4gICAgICAgIGF3YWl0ICgwLCBzZXJ2aWNlX2N1c3RvbWl6YXRpb25zXzEucmVzb2x2ZVBhcmFtc0ZvclMzKShlbmRwb2ludFBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBlbmRwb2ludFBhcmFtcztcbn07XG5leHBvcnRzLnJlc29sdmVQYXJhbXMgPSByZXNvbHZlUGFyYW1zO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VRdWVyeVN0cmluZyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcocXVlcnlzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeSA9IHt9O1xuICAgIHF1ZXJ5c3RyaW5nID0gcXVlcnlzdHJpbmcucmVwbGFjZSgvXlxcPy8sIFwiXCIpO1xuICAgIGlmIChxdWVyeXN0cmluZykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcXVlcnlzdHJpbmcuc3BsaXQoXCImXCIpKSB7XG4gICAgICAgICAgICBsZXQgW2tleSwgdmFsdWUgPSBudWxsXSA9IHBhaXIuc3BsaXQoXCI9XCIpO1xuICAgICAgICAgICAga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShrZXkgaW4gcXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVtrZXldKSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWVyeVtrZXldID0gW3F1ZXJ5W2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG59XG5leHBvcnRzLnBhcnNlUXVlcnlTdHJpbmcgPSBwYXJzZVF1ZXJ5U3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VVcmwgPSB2b2lkIDA7XG5jb25zdCBxdWVyeXN0cmluZ19wYXJzZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9xdWVyeXN0cmluZy1wYXJzZXJcIik7XG5jb25zdCBwYXJzZVVybCA9ICh1cmwpID0+IHtcbiAgICBpZiAodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMucGFyc2VVcmwpKG5ldyBVUkwodXJsKSk7XG4gICAgfVxuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSB1cmw7XG4gICAgbGV0IHF1ZXJ5O1xuICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgcXVlcnkgPSAoMCwgcXVlcnlzdHJpbmdfcGFyc2VyXzEucGFyc2VRdWVyeVN0cmluZykoc2VhcmNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHBvcnQgPyBwYXJzZUludChwb3J0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBhdGg6IHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICB9O1xufTtcbmV4cG9ydHMucGFyc2VVcmwgPSBwYXJzZVVybDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvRW5kcG9pbnRWMSA9IHZvaWQgMDtcbmNvbnN0IHVybF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91cmwtcGFyc2VyXCIpO1xuY29uc3QgdG9FbmRwb2ludFYxID0gKGVuZHBvaW50KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbmRwb2ludCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoXCJ1cmxcIiBpbiBlbmRwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCB1cmxfcGFyc2VyXzEucGFyc2VVcmwpKGVuZHBvaW50LnVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuZHBvaW50O1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHVybF9wYXJzZXJfMS5wYXJzZVVybCkoZW5kcG9pbnQpO1xufTtcbmV4cG9ydHMudG9FbmRwb2ludFYxID0gdG9FbmRwb2ludFYxO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdG9FbmRwb2ludFYxXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVuZHBvaW50TWlkZGxld2FyZSA9IHZvaWQgMDtcbmNvbnN0IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9uc18xID0gcmVxdWlyZShcIi4vYWRhcHRvcnMvZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zXCIpO1xuY29uc3QgZW5kcG9pbnRNaWRkbGV3YXJlID0gKHsgY29uZmlnLCBpbnN0cnVjdGlvbnMsIH0pID0+IHtcbiAgICByZXR1cm4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgKDAsIGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9uc18xLmdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucykoYXJncy5pbnB1dCwge1xuICAgICAgICAgICAgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIHsgLi4uY29uZmlnIH0sIGNvbnRleHQpO1xuICAgICAgICBjb250ZXh0LmVuZHBvaW50VjIgPSBlbmRwb2ludDtcbiAgICAgICAgY29udGV4dC5hdXRoU2NoZW1lcyA9IChfYSA9IGVuZHBvaW50LnByb3BlcnRpZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdXRoU2NoZW1lcztcbiAgICAgICAgY29uc3QgYXV0aFNjaGVtZSA9IChfYiA9IGNvbnRleHQuYXV0aFNjaGVtZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXTtcbiAgICAgICAgaWYgKGF1dGhTY2hlbWUpIHtcbiAgICAgICAgICAgIGNvbnRleHRbXCJzaWduaW5nX3JlZ2lvblwiXSA9IGF1dGhTY2hlbWUuc2lnbmluZ1JlZ2lvbjtcbiAgICAgICAgICAgIGNvbnRleHRbXCJzaWduaW5nX3NlcnZpY2VcIl0gPSBhdXRoU2NoZW1lLnNpZ25pbmdOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuZXhwb3J0cy5lbmRwb2ludE1pZGRsZXdhcmUgPSBlbmRwb2ludE1pZGRsZXdhcmU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgZGVzZXJpYWxpemVyTWlkZGxld2FyZSA9IChvcHRpb25zLCBkZXNlcmlhbGl6ZXIpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGF3YWl0IG5leHQoYXJncyk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgZGVzZXJpYWxpemVyKHJlc3BvbnNlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgb3V0cHV0OiBwYXJzZWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsIFwiJHJlc3BvbnNlXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghKCckbWV0YWRhdGEnIGluIGVycm9yKSkge1xuICAgICAgICAgICAgY29uc3QgaGludCA9IGBEZXNlcmlhbGl6YXRpb24gZXJyb3I6IHRvIHNlZSB0aGUgcmF3IHJlc3BvbnNlLCBpbnNwZWN0IHRoZSBoaWRkZW4gZmllbGQge2Vycm9yfS4kcmVzcG9uc2Ugb24gdGhpcyBvYmplY3QuYDtcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gXCJcXG4gIFwiICsgaGludDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59O1xuZXhwb3J0cy5kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlID0gZGVzZXJpYWxpemVyTWlkZGxld2FyZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcmlhbGl6ZXJNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3Qgc2VyaWFsaXplck1pZGRsZXdhcmUgPSAob3B0aW9ucywgc2VyaWFsaXplcikgPT4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gKChfYSA9IGNvbnRleHQuZW5kcG9pbnRWMikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnVybCkgJiYgb3B0aW9ucy51cmxQYXJzZXJcbiAgICAgICAgPyBhc3luYyAoKSA9PiBvcHRpb25zLnVybFBhcnNlcihjb250ZXh0LmVuZHBvaW50VjIudXJsKVxuICAgICAgICA6IG9wdGlvbnMuZW5kcG9pbnQ7XG4gICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBlbmRwb2ludCBwcm92aWRlciBhdmFpbGFibGUuXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgc2VyaWFsaXplcihhcmdzLmlucHV0LCB7IC4uLm9wdGlvbnMsIGVuZHBvaW50IH0pO1xuICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlcmlhbGl6ZXJNaWRkbGV3YXJlID0gc2VyaWFsaXplck1pZGRsZXdhcmU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTZXJkZVBsdWdpbiA9IGV4cG9ydHMuc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24gPSBleHBvcnRzLmRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24gPSB2b2lkIDA7XG5jb25zdCBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiLi9kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlXCIpO1xuY29uc3Qgc2VyaWFsaXplck1pZGRsZXdhcmVfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXJNaWRkbGV3YXJlXCIpO1xuZXhwb3J0cy5kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlT3B0aW9uID0ge1xuICAgIG5hbWU6IFwiZGVzZXJpYWxpemVyTWlkZGxld2FyZVwiLFxuICAgIHN0ZXA6IFwiZGVzZXJpYWxpemVcIixcbiAgICB0YWdzOiBbXCJERVNFUklBTElaRVJcIl0sXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuZXhwb3J0cy5zZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbiA9IHtcbiAgICBuYW1lOiBcInNlcmlhbGl6ZXJNaWRkbGV3YXJlXCIsXG4gICAgc3RlcDogXCJzZXJpYWxpemVcIixcbiAgICB0YWdzOiBbXCJTRVJJQUxJWkVSXCJdLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmZ1bmN0aW9uIGdldFNlcmRlUGx1Z2luKGNvbmZpZywgc2VyaWFsaXplciwgZGVzZXJpYWxpemVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXBwbHlUb1N0YWNrOiAoY29tbWFuZFN0YWNrKSA9PiB7XG4gICAgICAgICAgICBjb21tYW5kU3RhY2suYWRkKCgwLCBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlXzEuZGVzZXJpYWxpemVyTWlkZGxld2FyZSkoY29uZmlnLCBkZXNlcmlhbGl6ZXIpLCBleHBvcnRzLmRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24pO1xuICAgICAgICAgICAgY29tbWFuZFN0YWNrLmFkZCgoMCwgc2VyaWFsaXplck1pZGRsZXdhcmVfMS5zZXJpYWxpemVyTWlkZGxld2FyZSkoY29uZmlnLCBzZXJpYWxpemVyKSwgZXhwb3J0cy5zZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbik7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0U2VyZGVQbHVnaW4gPSBnZXRTZXJkZVBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGVzZXJpYWxpemVyTWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJkZVBsdWdpblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJpYWxpemVyTWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFBsdWdpbiA9IGV4cG9ydHMuZW5kcG9pbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgZW5kcG9pbnRNaWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludE1pZGRsZXdhcmVcIik7XG5leHBvcnRzLmVuZHBvaW50TWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgc3RlcDogXCJzZXJpYWxpemVcIixcbiAgICB0YWdzOiBbXCJFTkRQT0lOVF9QQVJBTUVURVJTXCIsIFwiRU5EUE9JTlRfVjJcIiwgXCJFTkRQT0lOVFwiXSxcbiAgICBuYW1lOiBcImVuZHBvaW50VjJNaWRkbGV3YXJlXCIsXG4gICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgcmVsYXRpb246IFwiYmVmb3JlXCIsXG4gICAgdG9NaWRkbGV3YXJlOiBtaWRkbGV3YXJlX3NlcmRlXzEuc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24ubmFtZSxcbn07XG5jb25zdCBnZXRFbmRwb2ludFBsdWdpbiA9IChjb25maWcsIGluc3RydWN0aW9ucykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGRSZWxhdGl2ZVRvKCgwLCBlbmRwb2ludE1pZGRsZXdhcmVfMS5lbmRwb2ludE1pZGRsZXdhcmUpKHtcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgICAgfSksIGV4cG9ydHMuZW5kcG9pbnRNaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFBsdWdpbiA9IGdldEVuZHBvaW50UGx1Z2luO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUVuZHBvaW50Q29uZmlnID0gdm9pZCAwO1xuY29uc3QgdXRpbF9taWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1taWRkbGV3YXJlXCIpO1xuY29uc3QgdG9FbmRwb2ludFYxXzEgPSByZXF1aXJlKFwiLi9hZGFwdG9ycy90b0VuZHBvaW50VjFcIik7XG5jb25zdCByZXNvbHZlRW5kcG9pbnRDb25maWcgPSAoaW5wdXQpID0+IHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB0bHMgPSAoX2EgPSBpbnB1dC50bHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgY29uc3QgeyBlbmRwb2ludCB9ID0gaW5wdXQ7XG4gICAgY29uc3QgY3VzdG9tRW5kcG9pbnRQcm92aWRlciA9IGVuZHBvaW50ICE9IG51bGwgPyBhc3luYyAoKSA9PiAoMCwgdG9FbmRwb2ludFYxXzEudG9FbmRwb2ludFYxKShhd2FpdCAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKGVuZHBvaW50KSgpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0N1c3RvbUVuZHBvaW50ID0gISFlbmRwb2ludDtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgZW5kcG9pbnQ6IGN1c3RvbUVuZHBvaW50UHJvdmlkZXIsXG4gICAgICAgIHRscyxcbiAgICAgICAgaXNDdXN0b21FbmRwb2ludCxcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6ICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikoKF9iID0gaW5wdXQudXNlRHVhbHN0YWNrRW5kcG9pbnQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlKSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKChfYyA9IGlucHV0LnVzZUZpcHNFbmRwb2ludCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UpLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlRW5kcG9pbnRDb25maWcgPSByZXNvbHZlRW5kcG9pbnRDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hZGFwdG9yc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbmRwb2ludE1pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRQbHVnaW5cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzb2x2ZUVuZHBvaW50Q29uZmlnXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEhvc3RIZWFkZXJQbHVnaW4gPSBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmUgPSBleHBvcnRzLnJlc29sdmVIb3N0SGVhZGVyQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5mdW5jdGlvbiByZXNvbHZlSG9zdEhlYWRlckNvbmZpZyhpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dDtcbn1cbmV4cG9ydHMucmVzb2x2ZUhvc3RIZWFkZXJDb25maWcgPSByZXNvbHZlSG9zdEhlYWRlckNvbmZpZztcbmNvbnN0IGhvc3RIZWFkZXJNaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UoYXJncy5yZXF1ZXN0KSlcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGNvbnN0IHsgaGFuZGxlclByb3RvY29sID0gXCJcIiB9ID0gb3B0aW9ucy5yZXF1ZXN0SGFuZGxlci5tZXRhZGF0YSB8fCB7fTtcbiAgICBpZiAoaGFuZGxlclByb3RvY29sLmluZGV4T2YoXCJoMlwiKSA+PSAwICYmICFyZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdKSB7XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0LmhlYWRlcnNbXCJob3N0XCJdO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdID0gXCJcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXJlcXVlc3QuaGVhZGVyc1tcImhvc3RcIl0pIHtcbiAgICAgICAgbGV0IGhvc3QgPSByZXF1ZXN0Lmhvc3RuYW1lO1xuICAgICAgICBpZiAocmVxdWVzdC5wb3J0ICE9IG51bGwpXG4gICAgICAgICAgICBob3N0ICs9IGA6JHtyZXF1ZXN0LnBvcnR9YDtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1wiaG9zdFwiXSA9IGhvc3Q7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGFyZ3MpO1xufTtcbmV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmUgPSBob3N0SGVhZGVyTWlkZGxld2FyZTtcbmV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwiaG9zdEhlYWRlck1pZGRsZXdhcmVcIixcbiAgICBzdGVwOiBcImJ1aWxkXCIsXG4gICAgcHJpb3JpdHk6IFwibG93XCIsXG4gICAgdGFnczogW1wiSE9TVFwiXSxcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRIb3N0SGVhZGVyUGx1Z2luID0gKG9wdGlvbnMpID0+ICh7XG4gICAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICAgICAgY2xpZW50U3RhY2suYWRkKCgwLCBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlKShvcHRpb25zKSwgZXhwb3J0cy5ob3N0SGVhZGVyTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0SG9zdEhlYWRlclBsdWdpbiA9IGdldEhvc3RIZWFkZXJQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRMb2dnZXJQbHVnaW4gPSBleHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyTWlkZGxld2FyZSA9ICgpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KGFyZ3MpO1xuICAgICAgICBjb25zdCB7IGNsaWVudE5hbWUsIGNvbW1hbmROYW1lLCBsb2dnZXIsIGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zID0ge30gfSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHsgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZywgb3ZlcnJpZGVPdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zO1xuICAgICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IG51bGwgJiYgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQuaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSBudWxsICYmIG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSB2b2lkIDAgPyBvdmVycmlkZU91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQub3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuICAgICAgICBjb25zdCB7ICRtZXRhZGF0YSwgLi4ub3V0cHV0V2l0aG91dE1ldGFkYXRhIH0gPSByZXNwb25zZS5vdXRwdXQ7XG4gICAgICAgIChfYSA9IGxvZ2dlciA9PT0gbnVsbCB8fCBsb2dnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxvZ2dlci5pbmZvKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsb2dnZXIsIHtcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0OiBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyhhcmdzLmlucHV0KSxcbiAgICAgICAgICAgIG91dHB1dDogb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nKG91dHB1dFdpdGhvdXRNZXRhZGF0YSksXG4gICAgICAgICAgICBtZXRhZGF0YTogJG1ldGFkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjbGllbnROYW1lLCBjb21tYW5kTmFtZSwgbG9nZ2VyLCBkeW5hbW9EYkRvY3VtZW50Q2xpZW50T3B0aW9ucyA9IHt9IH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCB7IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zO1xuICAgICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IG51bGwgJiYgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQuaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c7XG4gICAgICAgIChfYiA9IGxvZ2dlciA9PT0gbnVsbCB8fCBsb2dnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxvZ2dlci5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobG9nZ2VyLCB7XG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dDogaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2coYXJncy5pbnB1dCksXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIG1ldGFkYXRhOiBlcnJvci4kbWV0YWRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59O1xuZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlID0gbG9nZ2VyTWlkZGxld2FyZTtcbmV4cG9ydHMubG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJsb2dnZXJNaWRkbGV3YXJlXCIsXG4gICAgdGFnczogW1wiTE9HR0VSXCJdLFxuICAgIHN0ZXA6IFwiaW5pdGlhbGl6ZVwiLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmNvbnN0IGdldExvZ2dlclBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlKSgpLCBleHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldExvZ2dlclBsdWdpbiA9IGdldExvZ2dlclBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9nZ2VyTWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4gPSBleHBvcnRzLmFkZFJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5yZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBUUkFDRV9JRF9IRUFERVJfTkFNRSA9IFwiWC1BbXpuLVRyYWNlLUlkXCI7XG5jb25zdCBFTlZfTEFNQkRBX0ZVTkNUSU9OX05BTUUgPSBcIkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRVwiO1xuY29uc3QgRU5WX1RSQUNFX0lEID0gXCJfWF9BTVpOX1RSQUNFX0lEXCI7XG5jb25zdCByZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXJncztcbiAgICBpZiAoIXByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpIHx8XG4gICAgICAgIG9wdGlvbnMucnVudGltZSAhPT0gXCJub2RlXCIgfHxcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmhhc093blByb3BlcnR5KFRSQUNFX0lEX0hFQURFUl9OQU1FKSkge1xuICAgICAgICByZXR1cm4gbmV4dChhcmdzKTtcbiAgICB9XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcHJvY2Vzcy5lbnZbRU5WX0xBTUJEQV9GVU5DVElPTl9OQU1FXTtcbiAgICBjb25zdCB0cmFjZUlkID0gcHJvY2Vzcy5lbnZbRU5WX1RSQUNFX0lEXTtcbiAgICBjb25zdCBub25FbXB0eVN0cmluZyA9IChzdHIpID0+IHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIgJiYgc3RyLmxlbmd0aCA+IDA7XG4gICAgaWYgKG5vbkVtcHR5U3RyaW5nKGZ1bmN0aW9uTmFtZSkgJiYgbm9uRW1wdHlTdHJpbmcodHJhY2VJZCkpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1RSQUNFX0lEX0hFQURFUl9OQU1FXSA9IHRyYWNlSWQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICB9KTtcbn07XG5leHBvcnRzLnJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmUgPSByZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlO1xuZXhwb3J0cy5hZGRSZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgICBzdGVwOiBcImJ1aWxkXCIsXG4gICAgdGFnczogW1wiUkVDVVJTSU9OX0RFVEVDVElPTlwiXSxcbiAgICBuYW1lOiBcInJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVcIixcbiAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICBwcmlvcml0eTogXCJsb3dcIixcbn07XG5jb25zdCBnZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGQoKDAsIGV4cG9ydHMucmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZSkob3B0aW9ucyksIGV4cG9ydHMuYWRkUmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luID0gZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9SRVRSWV9NT0RFID0gZXhwb3J0cy5ERUZBVUxUX01BWF9BVFRFTVBUUyA9IGV4cG9ydHMuUkVUUllfTU9ERVMgPSB2b2lkIDA7XG52YXIgUkVUUllfTU9ERVM7XG4oZnVuY3Rpb24gKFJFVFJZX01PREVTKSB7XG4gICAgUkVUUllfTU9ERVNbXCJTVEFOREFSRFwiXSA9IFwic3RhbmRhcmRcIjtcbiAgICBSRVRSWV9NT0RFU1tcIkFEQVBUSVZFXCJdID0gXCJhZGFwdGl2ZVwiO1xufSkoUkVUUllfTU9ERVMgPSBleHBvcnRzLlJFVFJZX01PREVTIHx8IChleHBvcnRzLlJFVFJZX01PREVTID0ge30pKTtcbmV4cG9ydHMuREVGQVVMVF9NQVhfQVRURU1QVFMgPSAzO1xuZXhwb3J0cy5ERUZBVUxUX1JFVFJZX01PREUgPSBSRVRSWV9NT0RFUy5TVEFOREFSRDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5PREVKU19USU1FT1VUX0VSUk9SX0NPREVTID0gZXhwb3J0cy5UUkFOU0lFTlRfRVJST1JfU1RBVFVTX0NPREVTID0gZXhwb3J0cy5UUkFOU0lFTlRfRVJST1JfQ09ERVMgPSBleHBvcnRzLlRIUk9UVExJTkdfRVJST1JfQ09ERVMgPSBleHBvcnRzLkNMT0NLX1NLRVdfRVJST1JfQ09ERVMgPSB2b2lkIDA7XG5leHBvcnRzLkNMT0NLX1NLRVdfRVJST1JfQ09ERVMgPSBbXG4gICAgXCJBdXRoRmFpbHVyZVwiLFxuICAgIFwiSW52YWxpZFNpZ25hdHVyZUV4Y2VwdGlvblwiLFxuICAgIFwiUmVxdWVzdEV4cGlyZWRcIixcbiAgICBcIlJlcXVlc3RJblRoZUZ1dHVyZVwiLFxuICAgIFwiUmVxdWVzdFRpbWVUb29Ta2V3ZWRcIixcbiAgICBcIlNpZ25hdHVyZURvZXNOb3RNYXRjaFwiLFxuXTtcbmV4cG9ydHMuVEhST1RUTElOR19FUlJPUl9DT0RFUyA9IFtcbiAgICBcIkJhbmR3aWR0aExpbWl0RXhjZWVkZWRcIixcbiAgICBcIkVDMlRocm90dGxlZEV4Y2VwdGlvblwiLFxuICAgIFwiTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiLFxuICAgIFwiUHJpb3JSZXF1ZXN0Tm90Q29tcGxldGVcIixcbiAgICBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkRXhjZXB0aW9uXCIsXG4gICAgXCJSZXF1ZXN0TGltaXRFeGNlZWRlZFwiLFxuICAgIFwiUmVxdWVzdFRocm90dGxlZFwiLFxuICAgIFwiUmVxdWVzdFRocm90dGxlZEV4Y2VwdGlvblwiLFxuICAgIFwiU2xvd0Rvd25cIixcbiAgICBcIlRocm90dGxlZEV4Y2VwdGlvblwiLFxuICAgIFwiVGhyb3R0bGluZ1wiLFxuICAgIFwiVGhyb3R0bGluZ0V4Y2VwdGlvblwiLFxuICAgIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCIsXG4gICAgXCJUcmFuc2FjdGlvbkluUHJvZ3Jlc3NFeGNlcHRpb25cIixcbl07XG5leHBvcnRzLlRSQU5TSUVOVF9FUlJPUl9DT0RFUyA9IFtcIkFib3J0RXJyb3JcIiwgXCJUaW1lb3V0RXJyb3JcIiwgXCJSZXF1ZXN0VGltZW91dFwiLCBcIlJlcXVlc3RUaW1lb3V0RXhjZXB0aW9uXCJdO1xuZXhwb3J0cy5UUkFOU0lFTlRfRVJST1JfU1RBVFVTX0NPREVTID0gWzUwMCwgNTAyLCA1MDMsIDUwNF07XG5leHBvcnRzLk5PREVKU19USU1FT1VUX0VSUk9SX0NPREVTID0gW1wiRUNPTk5SRVNFVFwiLCBcIkVDT05OUkVGVVNFRFwiLCBcIkVQSVBFXCIsIFwiRVRJTUVET1VUXCJdO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNTZXJ2ZXJFcnJvciA9IGV4cG9ydHMuaXNUcmFuc2llbnRFcnJvciA9IGV4cG9ydHMuaXNUaHJvdHRsaW5nRXJyb3IgPSBleHBvcnRzLmlzQ2xvY2tTa2V3RXJyb3IgPSBleHBvcnRzLmlzUmV0cnlhYmxlQnlUcmFpdCA9IHZvaWQgMDtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgaXNSZXRyeWFibGVCeVRyYWl0ID0gKGVycm9yKSA9PiBlcnJvci4kcmV0cnlhYmxlICE9PSB1bmRlZmluZWQ7XG5leHBvcnRzLmlzUmV0cnlhYmxlQnlUcmFpdCA9IGlzUmV0cnlhYmxlQnlUcmFpdDtcbmNvbnN0IGlzQ2xvY2tTa2V3RXJyb3IgPSAoZXJyb3IpID0+IGNvbnN0YW50c18xLkNMT0NLX1NLRVdfRVJST1JfQ09ERVMuaW5jbHVkZXMoZXJyb3IubmFtZSk7XG5leHBvcnRzLmlzQ2xvY2tTa2V3RXJyb3IgPSBpc0Nsb2NrU2tld0Vycm9yO1xuY29uc3QgaXNUaHJvdHRsaW5nRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoKF9hID0gZXJyb3IuJG1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaHR0cFN0YXR1c0NvZGUpID09PSA0MjkgfHxcbiAgICAgICAgY29uc3RhbnRzXzEuVEhST1RUTElOR19FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnJvci5uYW1lKSB8fFxuICAgICAgICAoKF9iID0gZXJyb3IuJHJldHJ5YWJsZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRocm90dGxpbmcpID09IHRydWU7XG59O1xuZXhwb3J0cy5pc1Rocm90dGxpbmdFcnJvciA9IGlzVGhyb3R0bGluZ0Vycm9yO1xuY29uc3QgaXNUcmFuc2llbnRFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gY29uc3RhbnRzXzEuVFJBTlNJRU5UX0VSUk9SX0NPREVTLmluY2x1ZGVzKGVycm9yLm5hbWUpIHx8XG4gICAgICAgIGNvbnN0YW50c18xLk5PREVKU19USU1FT1VUX0VSUk9SX0NPREVTLmluY2x1ZGVzKChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSkgfHwgXCJcIikgfHxcbiAgICAgICAgY29uc3RhbnRzXzEuVFJBTlNJRU5UX0VSUk9SX1NUQVRVU19DT0RFUy5pbmNsdWRlcygoKF9hID0gZXJyb3IuJG1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaHR0cFN0YXR1c0NvZGUpIHx8IDApO1xufTtcbmV4cG9ydHMuaXNUcmFuc2llbnRFcnJvciA9IGlzVHJhbnNpZW50RXJyb3I7XG5jb25zdCBpc1NlcnZlckVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGlmICgoKF9hID0gZXJyb3IuJG1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaHR0cFN0YXR1c0NvZGUpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IGVycm9yLiRtZXRhZGF0YS5odHRwU3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKDUwMCA8PSBzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPD0gNTk5ICYmICEoMCwgZXhwb3J0cy5pc1RyYW5zaWVudEVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydHMuaXNTZXJ2ZXJFcnJvciA9IGlzU2VydmVyRXJyb3I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0UmF0ZUxpbWl0ZXIgPSB2b2lkIDA7XG5jb25zdCBzZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvblwiKTtcbmNsYXNzIERlZmF1bHRSYXRlTGltaXRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYXBhY2l0eSA9IDA7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RNYXhSYXRlID0gMDtcbiAgICAgICAgdGhpcy5tZWFzdXJlZFR4UmF0ZSA9IDA7XG4gICAgICAgIHRoaXMucmVxdWVzdENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5sYXN0VGltZXN0YW1wID0gMDtcbiAgICAgICAgdGhpcy50aW1lV2luZG93ID0gMDtcbiAgICAgICAgdGhpcy5iZXRhID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmJldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDAuNztcbiAgICAgICAgdGhpcy5taW5DYXBhY2l0eSA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5taW5DYXBhY2l0eSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTtcbiAgICAgICAgdGhpcy5taW5GaWxsUmF0ZSA9IChfYyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5taW5GaWxsUmF0ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMC41O1xuICAgICAgICB0aGlzLnNjYWxlQ29uc3RhbnQgPSAoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2NhbGVDb25zdGFudCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMC40O1xuICAgICAgICB0aGlzLnNtb290aCA9IChfZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zbW9vdGgpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IDAuODtcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWVJblNlY29uZHMgPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCk7XG4gICAgICAgIHRoaXMubGFzdFRocm90dGxlVGltZSA9IGN1cnJlbnRUaW1lSW5TZWNvbmRzO1xuICAgICAgICB0aGlzLmxhc3RUeFJhdGVCdWNrZXQgPSBNYXRoLmZsb29yKHRoaXMuZ2V0Q3VycmVudFRpbWVJblNlY29uZHMoKSk7XG4gICAgICAgIHRoaXMuZmlsbFJhdGUgPSB0aGlzLm1pbkZpbGxSYXRlO1xuICAgICAgICB0aGlzLm1heENhcGFjaXR5ID0gdGhpcy5taW5DYXBhY2l0eTtcbiAgICB9XG4gICAgZ2V0Q3VycmVudFRpbWVJblNlY29uZHMoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0U2VuZFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5CdWNrZXQoMSk7XG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbkJ1Y2tldChhbW91bnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZmlsbFRva2VuQnVja2V0KCk7XG4gICAgICAgIGlmIChhbW91bnQgPiB0aGlzLmN1cnJlbnRDYXBhY2l0eSkge1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSAoKGFtb3VudCAtIHRoaXMuY3VycmVudENhcGFjaXR5KSAvIHRoaXMuZmlsbFJhdGUpICogMTAwMDtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Q2FwYWNpdHkgPSB0aGlzLmN1cnJlbnRDYXBhY2l0eSAtIGFtb3VudDtcbiAgICB9XG4gICAgcmVmaWxsVG9rZW5CdWNrZXQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuZ2V0Q3VycmVudFRpbWVJblNlY29uZHMoKTtcbiAgICAgICAgaWYgKCF0aGlzLmxhc3RUaW1lc3RhbXApIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxsQW1vdW50ID0gKHRpbWVzdGFtcCAtIHRoaXMubGFzdFRpbWVzdGFtcCkgKiB0aGlzLmZpbGxSYXRlO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYXBhY2l0eSA9IE1hdGgubWluKHRoaXMubWF4Q2FwYWNpdHksIHRoaXMuY3VycmVudENhcGFjaXR5ICsgZmlsbEFtb3VudCk7XG4gICAgICAgIHRoaXMubGFzdFRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgICB9XG4gICAgdXBkYXRlQ2xpZW50U2VuZGluZ1JhdGUocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNhbGN1bGF0ZWRSYXRlO1xuICAgICAgICB0aGlzLnVwZGF0ZU1lYXN1cmVkUmF0ZSgpO1xuICAgICAgICBpZiAoKDAsIHNlcnZpY2VfZXJyb3JfY2xhc3NpZmljYXRpb25fMS5pc1Rocm90dGxpbmdFcnJvcikocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBjb25zdCByYXRlVG9Vc2UgPSAhdGhpcy5lbmFibGVkID8gdGhpcy5tZWFzdXJlZFR4UmF0ZSA6IE1hdGgubWluKHRoaXMubWVhc3VyZWRUeFJhdGUsIHRoaXMuZmlsbFJhdGUpO1xuICAgICAgICAgICAgdGhpcy5sYXN0TWF4UmF0ZSA9IHJhdGVUb1VzZTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVGltZVdpbmRvdygpO1xuICAgICAgICAgICAgdGhpcy5sYXN0VGhyb3R0bGVUaW1lID0gdGhpcy5nZXRDdXJyZW50VGltZUluU2Vjb25kcygpO1xuICAgICAgICAgICAgY2FsY3VsYXRlZFJhdGUgPSB0aGlzLmN1YmljVGhyb3R0bGUocmF0ZVRvVXNlKTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlVG9rZW5CdWNrZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVGltZVdpbmRvdygpO1xuICAgICAgICAgICAgY2FsY3VsYXRlZFJhdGUgPSB0aGlzLmN1YmljU3VjY2Vzcyh0aGlzLmdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JhdGUgPSBNYXRoLm1pbihjYWxjdWxhdGVkUmF0ZSwgMiAqIHRoaXMubWVhc3VyZWRUeFJhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRva2VuQnVja2V0UmF0ZShuZXdSYXRlKTtcbiAgICB9XG4gICAgY2FsY3VsYXRlVGltZVdpbmRvdygpIHtcbiAgICAgICAgdGhpcy50aW1lV2luZG93ID0gdGhpcy5nZXRQcmVjaXNlKE1hdGgucG93KCh0aGlzLmxhc3RNYXhSYXRlICogKDEgLSB0aGlzLmJldGEpKSAvIHRoaXMuc2NhbGVDb25zdGFudCwgMSAvIDMpKTtcbiAgICB9XG4gICAgY3ViaWNUaHJvdHRsZShyYXRlVG9Vc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJlY2lzZShyYXRlVG9Vc2UgKiB0aGlzLmJldGEpO1xuICAgIH1cbiAgICBjdWJpY1N1Y2Nlc3ModGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFByZWNpc2UodGhpcy5zY2FsZUNvbnN0YW50ICogTWF0aC5wb3codGltZXN0YW1wIC0gdGhpcy5sYXN0VGhyb3R0bGVUaW1lIC0gdGhpcy50aW1lV2luZG93LCAzKSArIHRoaXMubGFzdE1heFJhdGUpO1xuICAgIH1cbiAgICBlbmFibGVUb2tlbkJ1Y2tldCgpIHtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdXBkYXRlVG9rZW5CdWNrZXRSYXRlKG5ld1JhdGUpIHtcbiAgICAgICAgdGhpcy5yZWZpbGxUb2tlbkJ1Y2tldCgpO1xuICAgICAgICB0aGlzLmZpbGxSYXRlID0gTWF0aC5tYXgobmV3UmF0ZSwgdGhpcy5taW5GaWxsUmF0ZSk7XG4gICAgICAgIHRoaXMubWF4Q2FwYWNpdHkgPSBNYXRoLm1heChuZXdSYXRlLCB0aGlzLm1pbkNhcGFjaXR5KTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FwYWNpdHkgPSBNYXRoLm1pbih0aGlzLmN1cnJlbnRDYXBhY2l0eSwgdGhpcy5tYXhDYXBhY2l0eSk7XG4gICAgfVxuICAgIHVwZGF0ZU1lYXN1cmVkUmF0ZSgpIHtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuZ2V0Q3VycmVudFRpbWVJblNlY29uZHMoKTtcbiAgICAgICAgY29uc3QgdGltZUJ1Y2tldCA9IE1hdGguZmxvb3IodCAqIDIpIC8gMjtcbiAgICAgICAgdGhpcy5yZXF1ZXN0Q291bnQrKztcbiAgICAgICAgaWYgKHRpbWVCdWNrZXQgPiB0aGlzLmxhc3RUeFJhdGVCdWNrZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSYXRlID0gdGhpcy5yZXF1ZXN0Q291bnQgLyAodGltZUJ1Y2tldCAtIHRoaXMubGFzdFR4UmF0ZUJ1Y2tldCk7XG4gICAgICAgICAgICB0aGlzLm1lYXN1cmVkVHhSYXRlID0gdGhpcy5nZXRQcmVjaXNlKGN1cnJlbnRSYXRlICogdGhpcy5zbW9vdGggKyB0aGlzLm1lYXN1cmVkVHhSYXRlICogKDEgLSB0aGlzLnNtb290aCkpO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q291bnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0VHhSYXRlQnVja2V0ID0gdGltZUJ1Y2tldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRQcmVjaXNlKG51bSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0udG9GaXhlZCg4KSk7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZhdWx0UmF0ZUxpbWl0ZXIgPSBEZWZhdWx0UmF0ZUxpbWl0ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SRVFVRVNUX0hFQURFUiA9IGV4cG9ydHMuSU5WT0NBVElPTl9JRF9IRUFERVIgPSBleHBvcnRzLk5PX1JFVFJZX0lOQ1JFTUVOVCA9IGV4cG9ydHMuVElNRU9VVF9SRVRSWV9DT1NUID0gZXhwb3J0cy5SRVRSWV9DT1NUID0gZXhwb3J0cy5JTklUSUFMX1JFVFJZX1RPS0VOUyA9IGV4cG9ydHMuVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFID0gZXhwb3J0cy5NQVhJTVVNX1JFVFJZX0RFTEFZID0gZXhwb3J0cy5ERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0UgPSB2b2lkIDA7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfREVMQVlfQkFTRSA9IDEwMDtcbmV4cG9ydHMuTUFYSU1VTV9SRVRSWV9ERUxBWSA9IDIwICogMTAwMDtcbmV4cG9ydHMuVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFID0gNTAwO1xuZXhwb3J0cy5JTklUSUFMX1JFVFJZX1RPS0VOUyA9IDUwMDtcbmV4cG9ydHMuUkVUUllfQ09TVCA9IDU7XG5leHBvcnRzLlRJTUVPVVRfUkVUUllfQ09TVCA9IDEwO1xuZXhwb3J0cy5OT19SRVRSWV9JTkNSRU1FTlQgPSAxO1xuZXhwb3J0cy5JTlZPQ0FUSU9OX0lEX0hFQURFUiA9IFwiYW16LXNkay1pbnZvY2F0aW9uLWlkXCI7XG5leHBvcnRzLlJFUVVFU1RfSEVBREVSID0gXCJhbXotc2RrLXJlcXVlc3RcIjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERlZmF1bHRSZXRyeUJhY2tvZmZTdHJhdGVneSA9IHZvaWQgMDtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZ2V0RGVmYXVsdFJldHJ5QmFja29mZlN0cmF0ZWd5ID0gKCkgPT4ge1xuICAgIGxldCBkZWxheUJhc2UgPSBjb25zdGFudHNfMS5ERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0U7XG4gICAgY29uc3QgY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgPSAoYXR0ZW1wdHMpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5taW4oY29uc3RhbnRzXzEuTUFYSU1VTV9SRVRSWV9ERUxBWSwgTWF0aC5yYW5kb20oKSAqIDIgKiogYXR0ZW1wdHMgKiBkZWxheUJhc2UpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldERlbGF5QmFzZSA9IChkZWxheSkgPT4ge1xuICAgICAgICBkZWxheUJhc2UgPSBkZWxheTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbXB1dGVOZXh0QmFja29mZkRlbGF5LFxuICAgICAgICBzZXREZWxheUJhc2UsXG4gICAgfTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRSZXRyeUJhY2tvZmZTdHJhdGVneSA9IGdldERlZmF1bHRSZXRyeUJhY2tvZmZTdHJhdGVneTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRSZXRyeVRva2VuID0gdm9pZCAwO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBjcmVhdGVEZWZhdWx0UmV0cnlUb2tlbiA9ICh7IHJldHJ5RGVsYXksIHJldHJ5Q291bnQsIHJldHJ5Q29zdCwgfSkgPT4ge1xuICAgIGNvbnN0IGdldFJldHJ5Q291bnQgPSAoKSA9PiByZXRyeUNvdW50O1xuICAgIGNvbnN0IGdldFJldHJ5RGVsYXkgPSAoKSA9PiBNYXRoLm1pbihjb25zdGFudHNfMS5NQVhJTVVNX1JFVFJZX0RFTEFZLCByZXRyeURlbGF5KTtcbiAgICBjb25zdCBnZXRSZXRyeUNvc3QgPSAoKSA9PiByZXRyeUNvc3Q7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0UmV0cnlDb3VudCxcbiAgICAgICAgZ2V0UmV0cnlEZWxheSxcbiAgICAgICAgZ2V0UmV0cnlDb3N0LFxuICAgIH07XG59O1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0UmV0cnlUb2tlbiA9IGNyZWF0ZURlZmF1bHRSZXRyeVRva2VuO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RhbmRhcmRSZXRyeVN0cmF0ZWd5ID0gdm9pZCAwO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGRlZmF1bHRSZXRyeUJhY2tvZmZTdHJhdGVneV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdFJldHJ5QmFja29mZlN0cmF0ZWd5XCIpO1xuY29uc3QgZGVmYXVsdFJldHJ5VG9rZW5fMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRSZXRyeVRva2VuXCIpO1xuY2xhc3MgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5IHtcbiAgICBjb25zdHJ1Y3RvcihtYXhBdHRlbXB0cykge1xuICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gbWF4QXR0ZW1wdHM7XG4gICAgICAgIHRoaXMubW9kZSA9IGNvbmZpZ18xLlJFVFJZX01PREVTLlNUQU5EQVJEO1xuICAgICAgICB0aGlzLmNhcGFjaXR5ID0gY29uc3RhbnRzXzEuSU5JVElBTF9SRVRSWV9UT0tFTlM7XG4gICAgICAgIHRoaXMucmV0cnlCYWNrb2ZmU3RyYXRlZ3kgPSAoMCwgZGVmYXVsdFJldHJ5QmFja29mZlN0cmF0ZWd5XzEuZ2V0RGVmYXVsdFJldHJ5QmFja29mZlN0cmF0ZWd5KSgpO1xuICAgICAgICB0aGlzLm1heEF0dGVtcHRzUHJvdmlkZXIgPSB0eXBlb2YgbWF4QXR0ZW1wdHMgPT09IFwiZnVuY3Rpb25cIiA/IG1heEF0dGVtcHRzIDogYXN5bmMgKCkgPT4gbWF4QXR0ZW1wdHM7XG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVJbml0aWFsUmV0cnlUb2tlbihyZXRyeVRva2VuU2NvcGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBkZWZhdWx0UmV0cnlUb2tlbl8xLmNyZWF0ZURlZmF1bHRSZXRyeVRva2VuKSh7XG4gICAgICAgICAgICByZXRyeURlbGF5OiBjb25zdGFudHNfMS5ERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0UsXG4gICAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgcmVmcmVzaFJldHJ5VG9rZW5Gb3JSZXRyeSh0b2tlbiwgZXJyb3JJbmZvKSB7XG4gICAgICAgIGNvbnN0IG1heEF0dGVtcHRzID0gYXdhaXQgdGhpcy5nZXRNYXhBdHRlbXB0cygpO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRSZXRyeSh0b2tlbiwgZXJyb3JJbmZvLCBtYXhBdHRlbXB0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVHlwZSA9IGVycm9ySW5mby5lcnJvclR5cGU7XG4gICAgICAgICAgICB0aGlzLnJldHJ5QmFja29mZlN0cmF0ZWd5LnNldERlbGF5QmFzZShlcnJvclR5cGUgPT09IFwiVEhST1RUTElOR1wiID8gY29uc3RhbnRzXzEuVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFIDogY29uc3RhbnRzXzEuREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbGF5RnJvbUVycm9yVHlwZSA9IHRoaXMucmV0cnlCYWNrb2ZmU3RyYXRlZ3kuY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkodG9rZW4uZ2V0UmV0cnlDb3VudCgpKTtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5RGVsYXkgPSBlcnJvckluZm8ucmV0cnlBZnRlckhpbnRcbiAgICAgICAgICAgICAgICA/IE1hdGgubWF4KGVycm9ySW5mby5yZXRyeUFmdGVySGludC5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIHx8IDAsIGRlbGF5RnJvbUVycm9yVHlwZSlcbiAgICAgICAgICAgICAgICA6IGRlbGF5RnJvbUVycm9yVHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGNhcGFjaXR5Q29zdCA9IHRoaXMuZ2V0Q2FwYWNpdHlDb3N0KGVycm9yVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmNhcGFjaXR5IC09IGNhcGFjaXR5Q29zdDtcbiAgICAgICAgICAgIHJldHVybiAoMCwgZGVmYXVsdFJldHJ5VG9rZW5fMS5jcmVhdGVEZWZhdWx0UmV0cnlUb2tlbikoe1xuICAgICAgICAgICAgICAgIHJldHJ5RGVsYXksXG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudDogdG9rZW4uZ2V0UmV0cnlDb3VudCgpICsgMSxcbiAgICAgICAgICAgICAgICByZXRyeUNvc3Q6IGNhcGFjaXR5Q29zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJldHJ5IHRva2VuIGF2YWlsYWJsZVwiKTtcbiAgICB9XG4gICAgcmVjb3JkU3VjY2Vzcyh0b2tlbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2FwYWNpdHkgPSBNYXRoLm1heChjb25zdGFudHNfMS5JTklUSUFMX1JFVFJZX1RPS0VOUywgdGhpcy5jYXBhY2l0eSArICgoX2EgPSB0b2tlbi5nZXRSZXRyeUNvc3QoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzXzEuTk9fUkVUUllfSU5DUkVNRU5UKSk7XG4gICAgfVxuICAgIGdldENhcGFjaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXBhY2l0eTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0TWF4QXR0ZW1wdHMoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5tYXhBdHRlbXB0c1Byb3ZpZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYE1heCBhdHRlbXB0cyBwcm92aWRlciBjb3VsZCBub3QgcmVzb2x2ZS4gVXNpbmcgZGVmYXVsdCBvZiAke2NvbmZpZ18xLkRFRkFVTFRfTUFYX0FUVEVNUFRTfWApO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ18xLkRFRkFVTFRfTUFYX0FUVEVNUFRTO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3VsZFJldHJ5KHRva2VuVG9SZW5ldywgZXJyb3JJbmZvLCBtYXhBdHRlbXB0cykge1xuICAgICAgICBjb25zdCBhdHRlbXB0cyA9IHRva2VuVG9SZW5ldy5nZXRSZXRyeUNvdW50KCk7XG4gICAgICAgIHJldHVybiAoYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyAmJlxuICAgICAgICAgICAgdGhpcy5jYXBhY2l0eSA+PSB0aGlzLmdldENhcGFjaXR5Q29zdChlcnJvckluZm8uZXJyb3JUeXBlKSAmJlxuICAgICAgICAgICAgdGhpcy5pc1JldHJ5YWJsZUVycm9yKGVycm9ySW5mby5lcnJvclR5cGUpKTtcbiAgICB9XG4gICAgZ2V0Q2FwYWNpdHlDb3N0KGVycm9yVHlwZSkge1xuICAgICAgICByZXR1cm4gZXJyb3JUeXBlID09PSBcIlRSQU5TSUVOVFwiID8gY29uc3RhbnRzXzEuVElNRU9VVF9SRVRSWV9DT1NUIDogY29uc3RhbnRzXzEuUkVUUllfQ09TVDtcbiAgICB9XG4gICAgaXNSZXRyeWFibGVFcnJvcihlcnJvclR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yVHlwZSA9PT0gXCJUSFJPVFRMSU5HXCIgfHwgZXJyb3JUeXBlID09PSBcIlRSQU5TSUVOVFwiO1xuICAgIH1cbn1cbmV4cG9ydHMuU3RhbmRhcmRSZXRyeVN0cmF0ZWd5ID0gU3RhbmRhcmRSZXRyeVN0cmF0ZWd5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWRhcHRpdmVSZXRyeVN0cmF0ZWd5ID0gdm9pZCAwO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5jb25zdCBEZWZhdWx0UmF0ZUxpbWl0ZXJfMSA9IHJlcXVpcmUoXCIuL0RlZmF1bHRSYXRlTGltaXRlclwiKTtcbmNvbnN0IFN0YW5kYXJkUmV0cnlTdHJhdGVneV8xID0gcmVxdWlyZShcIi4vU3RhbmRhcmRSZXRyeVN0cmF0ZWd5XCIpO1xuY2xhc3MgQWRhcHRpdmVSZXRyeVN0cmF0ZWd5IHtcbiAgICBjb25zdHJ1Y3RvcihtYXhBdHRlbXB0c1Byb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWF4QXR0ZW1wdHNQcm92aWRlciA9IG1heEF0dGVtcHRzUHJvdmlkZXI7XG4gICAgICAgIHRoaXMubW9kZSA9IGNvbmZpZ18xLlJFVFJZX01PREVTLkFEQVBUSVZFO1xuICAgICAgICBjb25zdCB7IHJhdGVMaW1pdGVyIH0gPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgdGhpcy5yYXRlTGltaXRlciA9IHJhdGVMaW1pdGVyICE9PSBudWxsICYmIHJhdGVMaW1pdGVyICE9PSB2b2lkIDAgPyByYXRlTGltaXRlciA6IG5ldyBEZWZhdWx0UmF0ZUxpbWl0ZXJfMS5EZWZhdWx0UmF0ZUxpbWl0ZXIoKTtcbiAgICAgICAgdGhpcy5zdGFuZGFyZFJldHJ5U3RyYXRlZ3kgPSBuZXcgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5XzEuU3RhbmRhcmRSZXRyeVN0cmF0ZWd5KG1heEF0dGVtcHRzUHJvdmlkZXIpO1xuICAgIH1cbiAgICBhc3luYyBhY3F1aXJlSW5pdGlhbFJldHJ5VG9rZW4ocmV0cnlUb2tlblNjb3BlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmF0ZUxpbWl0ZXIuZ2V0U2VuZFRva2VuKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YW5kYXJkUmV0cnlTdHJhdGVneS5hY3F1aXJlSW5pdGlhbFJldHJ5VG9rZW4ocmV0cnlUb2tlblNjb3BlKTtcbiAgICB9XG4gICAgYXN5bmMgcmVmcmVzaFJldHJ5VG9rZW5Gb3JSZXRyeSh0b2tlblRvUmVuZXcsIGVycm9ySW5mbykge1xuICAgICAgICB0aGlzLnJhdGVMaW1pdGVyLnVwZGF0ZUNsaWVudFNlbmRpbmdSYXRlKGVycm9ySW5mbyk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YW5kYXJkUmV0cnlTdHJhdGVneS5yZWZyZXNoUmV0cnlUb2tlbkZvclJldHJ5KHRva2VuVG9SZW5ldywgZXJyb3JJbmZvKTtcbiAgICB9XG4gICAgcmVjb3JkU3VjY2Vzcyh0b2tlbikge1xuICAgICAgICB0aGlzLnJhdGVMaW1pdGVyLnVwZGF0ZUNsaWVudFNlbmRpbmdSYXRlKHt9KTtcbiAgICAgICAgdGhpcy5zdGFuZGFyZFJldHJ5U3RyYXRlZ3kucmVjb3JkU3VjY2Vzcyh0b2tlbik7XG4gICAgfVxufVxuZXhwb3J0cy5BZGFwdGl2ZVJldHJ5U3RyYXRlZ3kgPSBBZGFwdGl2ZVJldHJ5U3RyYXRlZ3k7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25maWd1cmVkUmV0cnlTdHJhdGVneSA9IHZvaWQgMDtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5XzEgPSByZXF1aXJlKFwiLi9TdGFuZGFyZFJldHJ5U3RyYXRlZ3lcIik7XG5jbGFzcyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSBleHRlbmRzIFN0YW5kYXJkUmV0cnlTdHJhdGVneV8xLlN0YW5kYXJkUmV0cnlTdHJhdGVneSB7XG4gICAgY29uc3RydWN0b3IobWF4QXR0ZW1wdHMsIGNvbXB1dGVOZXh0QmFja29mZkRlbGF5ID0gY29uc3RhbnRzXzEuREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFKSB7XG4gICAgICAgIHN1cGVyKHR5cGVvZiBtYXhBdHRlbXB0cyA9PT0gXCJmdW5jdGlvblwiID8gbWF4QXR0ZW1wdHMgOiBhc3luYyAoKSA9PiBtYXhBdHRlbXB0cyk7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgPSAoKSA9PiBjb21wdXRlTmV4dEJhY2tvZmZEZWxheTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgPSBjb21wdXRlTmV4dEJhY2tvZmZEZWxheTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZWZyZXNoUmV0cnlUb2tlbkZvclJldHJ5KHRva2VuVG9SZW5ldywgZXJyb3JJbmZvKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgc3VwZXIucmVmcmVzaFJldHJ5VG9rZW5Gb3JSZXRyeSh0b2tlblRvUmVuZXcsIGVycm9ySW5mbyk7XG4gICAgICAgIHRva2VuLmdldFJldHJ5RGVsYXkgPSAoKSA9PiB0aGlzLmNvbXB1dGVOZXh0QmFja29mZkRlbGF5KHRva2VuLmdldFJldHJ5Q291bnQoKSk7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG59XG5leHBvcnRzLkNvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5ID0gQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3k7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9BZGFwdGl2ZVJldHJ5U3RyYXRlZ3lcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3lcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRGVmYXVsdFJhdGVMaW1pdGVyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0YW5kYXJkUmV0cnlTdHJhdGVneVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25maWdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29uc3RhbnRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBybmc7XG5cbnZhciBfY3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiY3J5cHRvXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3Qgcm5kczhQb29sID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsgLy8gIyBvZiByYW5kb20gdmFsdWVzIHRvIHByZS1hbGxvY2F0ZVxuXG5sZXQgcG9vbFB0ciA9IHJuZHM4UG9vbC5sZW5ndGg7XG5cbmZ1bmN0aW9uIHJuZygpIHtcbiAgaWYgKHBvb2xQdHIgPiBybmRzOFBvb2wubGVuZ3RoIC0gMTYpIHtcbiAgICBfY3J5cHRvLmRlZmF1bHQucmFuZG9tRmlsbFN5bmMocm5kczhQb29sKTtcblxuICAgIHBvb2xQdHIgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJuZHM4UG9vbC5zbGljZShwb29sUHRyLCBwb29sUHRyICs9IDE2KTtcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9yZWdleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVnZXguanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgX3JlZ2V4LmRlZmF1bHQudGVzdCh1dWlkKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdmFsaWRhdGU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIGNvbnN0IHV1aWQgPSAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbnZhciBfZGVmYXVsdCA9IHN0cmluZ2lmeTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxubGV0IF9ub2RlSWQ7XG5cbmxldCBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbmxldCBfbGFzdE1TZWNzID0gMDtcbmxldCBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XG4gIGxldCBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7IC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICBsZXQgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIGxldCBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIGNvbnN0IGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmOyAvLyBgdGltZV9taWRgXG5cbiAgY29uc3QgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS5kZWZhdWx0KShiKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjE7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuXG4gIGxldCB2O1xuICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxNik7IC8vIFBhcnNlICMjIyMjIyMjLS4uLi4tLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFyclswXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgwLCA4KSwgMTYpKSA+Pj4gMjQ7XG4gIGFyclsxXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzJdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclszXSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0jIyMjLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoOSwgMTMpLCAxNikpID4+PiA4O1xuICBhcnJbNV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0jIyMjLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzZdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE0LCAxOCksIDE2KSkgPj4+IDg7XG4gIGFycls3XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tIyMjIy0uLi4uLi4uLi4uLi5cblxuICBhcnJbOF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTksIDIzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzldID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0uLi4uLSMjIyMjIyMjIyMjI1xuICAvLyAoVXNlIFwiL1wiIHRvIGF2b2lkIDMyLWJpdCB0cnVuY2F0aW9uIHdoZW4gYml0LXNoaWZ0aW5nIGhpZ2gtb3JkZXIgYnl0ZXMpXG5cbiAgYXJyWzEwXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgyNCwgMzYpLCAxNikpIC8gMHgxMDAwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMV0gPSB2IC8gMHgxMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTJdID0gdiA+Pj4gMjQgJiAweGZmO1xuICBhcnJbMTNdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMTRdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclsxNV0gPSB2ICYgMHhmZjtcbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIF9kZWZhdWx0ID0gcGFyc2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG5leHBvcnRzLlVSTCA9IGV4cG9ydHMuRE5TID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5jb25zdCBETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuRE5TID0gRE5TO1xuY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnRzLlVSTCA9IFVSTDtcblxuZnVuY3Rpb24gX2RlZmF1bHQobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gc3RyaW5nVG9CeXRlcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lc3BhY2UgPSAoMCwgX3BhcnNlLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWVzcGFjZS5sZW5ndGggIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS5kZWZhdWx0KShieXRlcyk7XG4gIH0gLy8gRnVuY3Rpb24jbmFtZSBpcyBub3Qgc2V0dGFibGUgb24gc29tZSBwbGF0Zm9ybXMgKCMyNzApXG5cblxuICB0cnkge1xuICAgIGdlbmVyYXRlVVVJRC5uYW1lID0gbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH0gY2F0Y2ggKGVycikge30gLy8gRm9yIENvbW1vbkpTIGRlZmF1bHQgZXhwb3J0IHN1cHBvcnRcblxuXG4gIGdlbmVyYXRlVVVJRC5ETlMgPSBETlM7XG4gIGdlbmVyYXRlVVVJRC5VUkwgPSBVUkw7XG4gIHJldHVybiBnZW5lcmF0ZVVVSUQ7XG59IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcnlwdG8gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBtZDUoYnl0ZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMsICd1dGY4Jyk7XG4gIH1cblxuICByZXR1cm4gX2NyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShieXRlcykuZGlnZXN0KCk7XG59XG5cbnZhciBfZGVmYXVsdCA9IG1kNTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcblxudmFyIF9tZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWQ1LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjMgPSAoMCwgX3YuZGVmYXVsdCkoJ3YzJywgMHgzMCwgX21kLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gdjM7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3N0cmluZ2lmeS5kZWZhdWx0KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMsICd1dGY4Jyk7XG4gIH1cblxuICByZXR1cm4gX2NyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzaGExO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zdWJzdHIoMTQsIDEpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2M1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjQuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOSUxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX25pbC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWxpZGF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdmFsaWRhdGUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9wYXJzZS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFJldHJ5UXVvdGEgPSB2b2lkIDA7XG5jb25zdCB1dGlsX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1yZXRyeVwiKTtcbmNvbnN0IGdldERlZmF1bHRSZXRyeVF1b3RhID0gKGluaXRpYWxSZXRyeVRva2Vucywgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGNvbnN0IE1BWF9DQVBBQ0lUWSA9IGluaXRpYWxSZXRyeVRva2VucztcbiAgICBjb25zdCBub1JldHJ5SW5jcmVtZW50ID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmV0cnlJbmNyZW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHV0aWxfcmV0cnlfMS5OT19SRVRSWV9JTkNSRU1FTlQ7XG4gICAgY29uc3QgcmV0cnlDb3N0ID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJldHJ5Q29zdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdXRpbF9yZXRyeV8xLlJFVFJZX0NPU1Q7XG4gICAgY29uc3QgdGltZW91dFJldHJ5Q29zdCA9IChfYyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50aW1lb3V0UmV0cnlDb3N0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB1dGlsX3JldHJ5XzEuVElNRU9VVF9SRVRSWV9DT1NUO1xuICAgIGxldCBhdmFpbGFibGVDYXBhY2l0eSA9IGluaXRpYWxSZXRyeVRva2VucztcbiAgICBjb25zdCBnZXRDYXBhY2l0eUFtb3VudCA9IChlcnJvcikgPT4gKGVycm9yLm5hbWUgPT09IFwiVGltZW91dEVycm9yXCIgPyB0aW1lb3V0UmV0cnlDb3N0IDogcmV0cnlDb3N0KTtcbiAgICBjb25zdCBoYXNSZXRyeVRva2VucyA9IChlcnJvcikgPT4gZ2V0Q2FwYWNpdHlBbW91bnQoZXJyb3IpIDw9IGF2YWlsYWJsZUNhcGFjaXR5O1xuICAgIGNvbnN0IHJldHJpZXZlUmV0cnlUb2tlbnMgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKCFoYXNSZXRyeVRva2VucyhlcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJldHJ5IHRva2VuIGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYXBhY2l0eUFtb3VudCA9IGdldENhcGFjaXR5QW1vdW50KGVycm9yKTtcbiAgICAgICAgYXZhaWxhYmxlQ2FwYWNpdHkgLT0gY2FwYWNpdHlBbW91bnQ7XG4gICAgICAgIHJldHVybiBjYXBhY2l0eUFtb3VudDtcbiAgICB9O1xuICAgIGNvbnN0IHJlbGVhc2VSZXRyeVRva2VucyA9IChjYXBhY2l0eVJlbGVhc2VBbW91bnQpID0+IHtcbiAgICAgICAgYXZhaWxhYmxlQ2FwYWNpdHkgKz0gY2FwYWNpdHlSZWxlYXNlQW1vdW50ICE9PSBudWxsICYmIGNhcGFjaXR5UmVsZWFzZUFtb3VudCAhPT0gdm9pZCAwID8gY2FwYWNpdHlSZWxlYXNlQW1vdW50IDogbm9SZXRyeUluY3JlbWVudDtcbiAgICAgICAgYXZhaWxhYmxlQ2FwYWNpdHkgPSBNYXRoLm1pbihhdmFpbGFibGVDYXBhY2l0eSwgTUFYX0NBUEFDSVRZKTtcbiAgICB9O1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgaGFzUmV0cnlUb2tlbnMsXG4gICAgICAgIHJldHJpZXZlUmV0cnlUb2tlbnMsXG4gICAgICAgIHJlbGVhc2VSZXRyeVRva2VucyxcbiAgICB9KTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRSZXRyeVF1b3RhID0gZ2V0RGVmYXVsdFJldHJ5UXVvdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0RGVsYXlEZWNpZGVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtcmV0cnlcIik7XG5jb25zdCBkZWZhdWx0RGVsYXlEZWNpZGVyID0gKGRlbGF5QmFzZSwgYXR0ZW1wdHMpID0+IE1hdGguZmxvb3IoTWF0aC5taW4odXRpbF9yZXRyeV8xLk1BWElNVU1fUkVUUllfREVMQVksIE1hdGgucmFuZG9tKCkgKiAyICoqIGF0dGVtcHRzICogZGVsYXlCYXNlKSk7XG5leHBvcnRzLmRlZmF1bHREZWxheURlY2lkZXIgPSBkZWZhdWx0RGVsYXlEZWNpZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdFJldHJ5RGVjaWRlciA9IHZvaWQgMDtcbmNvbnN0IHNlcnZpY2VfZXJyb3JfY2xhc3NpZmljYXRpb25fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zZXJ2aWNlLWVycm9yLWNsYXNzaWZpY2F0aW9uXCIpO1xuY29uc3QgZGVmYXVsdFJldHJ5RGVjaWRlciA9IChlcnJvcikgPT4ge1xuICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHNlcnZpY2VfZXJyb3JfY2xhc3NpZmljYXRpb25fMS5pc1JldHJ5YWJsZUJ5VHJhaXQpKGVycm9yKSB8fCAoMCwgc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbl8xLmlzQ2xvY2tTa2V3RXJyb3IpKGVycm9yKSB8fCAoMCwgc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbl8xLmlzVGhyb3R0bGluZ0Vycm9yKShlcnJvcikgfHwgKDAsIHNlcnZpY2VfZXJyb3JfY2xhc3NpZmljYXRpb25fMS5pc1RyYW5zaWVudEVycm9yKShlcnJvcik7XG59O1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlEZWNpZGVyID0gZGVmYXVsdFJldHJ5RGVjaWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzU2RrRXJyb3IgPSB2b2lkIDA7XG5jb25zdCBhc1Nka0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigpLCBlcnJvcik7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgQVdTIFNESyBlcnJvciB3cmFwcGVyIGZvciAke2Vycm9yfWApO1xufTtcbmV4cG9ydHMuYXNTZGtFcnJvciA9IGFzU2RrRXJyb3I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdGFuZGFyZFJldHJ5U3RyYXRlZ3kgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IHNlcnZpY2VfZXJyb3JfY2xhc3NpZmljYXRpb25fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zZXJ2aWNlLWVycm9yLWNsYXNzaWZpY2F0aW9uXCIpO1xuY29uc3QgdXRpbF9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtcmV0cnlcIik7XG5jb25zdCB1dWlkXzEgPSByZXF1aXJlKFwidXVpZFwiKTtcbmNvbnN0IGRlZmF1bHRSZXRyeVF1b3RhXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0UmV0cnlRdW90YVwiKTtcbmNvbnN0IGRlbGF5RGVjaWRlcl8xID0gcmVxdWlyZShcIi4vZGVsYXlEZWNpZGVyXCIpO1xuY29uc3QgcmV0cnlEZWNpZGVyXzEgPSByZXF1aXJlKFwiLi9yZXRyeURlY2lkZXJcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY2xhc3MgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5IHtcbiAgICBjb25zdHJ1Y3RvcihtYXhBdHRlbXB0c1Byb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLm1heEF0dGVtcHRzUHJvdmlkZXIgPSBtYXhBdHRlbXB0c1Byb3ZpZGVyO1xuICAgICAgICB0aGlzLm1vZGUgPSB1dGlsX3JldHJ5XzEuUkVUUllfTU9ERVMuU1RBTkRBUkQ7XG4gICAgICAgIHRoaXMucmV0cnlEZWNpZGVyID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJldHJ5RGVjaWRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmV0cnlEZWNpZGVyXzEuZGVmYXVsdFJldHJ5RGVjaWRlcjtcbiAgICAgICAgdGhpcy5kZWxheURlY2lkZXIgPSAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGVsYXlEZWNpZGVyKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWxheURlY2lkZXJfMS5kZWZhdWx0RGVsYXlEZWNpZGVyO1xuICAgICAgICB0aGlzLnJldHJ5UXVvdGEgPSAoX2MgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlRdW90YSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKDAsIGRlZmF1bHRSZXRyeVF1b3RhXzEuZ2V0RGVmYXVsdFJldHJ5UXVvdGEpKHV0aWxfcmV0cnlfMS5JTklUSUFMX1JFVFJZX1RPS0VOUyk7XG4gICAgfVxuICAgIHNob3VsZFJldHJ5KGVycm9yLCBhdHRlbXB0cywgbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgcmV0dXJuIGF0dGVtcHRzIDwgbWF4QXR0ZW1wdHMgJiYgdGhpcy5yZXRyeURlY2lkZXIoZXJyb3IpICYmIHRoaXMucmV0cnlRdW90YS5oYXNSZXRyeVRva2VucyhlcnJvcik7XG4gICAgfVxuICAgIGFzeW5jIGdldE1heEF0dGVtcHRzKCkge1xuICAgICAgICBsZXQgbWF4QXR0ZW1wdHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtYXhBdHRlbXB0cyA9IGF3YWl0IHRoaXMubWF4QXR0ZW1wdHNQcm92aWRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbWF4QXR0ZW1wdHMgPSB1dGlsX3JldHJ5XzEuREVGQVVMVF9NQVhfQVRURU1QVFM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEF0dGVtcHRzO1xuICAgIH1cbiAgICBhc3luYyByZXRyeShuZXh0LCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCByZXRyeVRva2VuQW1vdW50O1xuICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgICBsZXQgdG90YWxEZWxheSA9IDA7XG4gICAgICAgIGNvbnN0IG1heEF0dGVtcHRzID0gYXdhaXQgdGhpcy5nZXRNYXhBdHRlbXB0cygpO1xuICAgICAgICBjb25zdCB7IHJlcXVlc3QgfSA9IGFyZ3M7XG4gICAgICAgIGlmIChwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzW3V0aWxfcmV0cnlfMS5JTlZPQ0FUSU9OX0lEX0hFQURFUl0gPSAoMCwgdXVpZF8xLnY0KSgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNbdXRpbF9yZXRyeV8xLlJFUVVFU1RfSEVBREVSXSA9IGBhdHRlbXB0PSR7YXR0ZW1wdHMgKyAxfTsgbWF4PSR7bWF4QXR0ZW1wdHN9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5iZWZvcmVSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG9wdGlvbnMuYmVmb3JlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBvdXRwdXQgfSA9IGF3YWl0IG5leHQoYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hZnRlclJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hZnRlclJlcXVlc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJldHJ5UXVvdGEucmVsZWFzZVJldHJ5VG9rZW5zKHJldHJ5VG9rZW5BbW91bnQpO1xuICAgICAgICAgICAgICAgIG91dHB1dC4kbWV0YWRhdGEuYXR0ZW1wdHMgPSBhdHRlbXB0cyArIDE7XG4gICAgICAgICAgICAgICAgb3V0cHV0LiRtZXRhZGF0YS50b3RhbFJldHJ5RGVsYXkgPSB0b3RhbERlbGF5O1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBvdXRwdXQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gKDAsIHV0aWxfMS5hc1Nka0Vycm9yKShlKTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZFJldHJ5KGVyciwgYXR0ZW1wdHMsIG1heEF0dGVtcHRzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXRyeVRva2VuQW1vdW50ID0gdGhpcy5yZXRyeVF1b3RhLnJldHJpZXZlUmV0cnlUb2tlbnMoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXlGcm9tRGVjaWRlciA9IHRoaXMuZGVsYXlEZWNpZGVyKCgwLCBzZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uXzEuaXNUaHJvdHRsaW5nRXJyb3IpKGVycikgPyB1dGlsX3JldHJ5XzEuVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFIDogdXRpbF9yZXRyeV8xLkRFRkFVTFRfUkVUUllfREVMQVlfQkFTRSwgYXR0ZW1wdHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxheUZyb21SZXNwb25zZSA9IGdldERlbGF5RnJvbVJldHJ5QWZ0ZXJIZWFkZXIoZXJyLiRyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5tYXgoZGVsYXlGcm9tUmVzcG9uc2UgfHwgMCwgZGVsYXlGcm9tRGVjaWRlcik7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsRGVsYXkgKz0gZGVsYXk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWVyci4kbWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyLiRtZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlcnIuJG1ldGFkYXRhLmF0dGVtcHRzID0gYXR0ZW1wdHM7XG4gICAgICAgICAgICAgICAgZXJyLiRtZXRhZGF0YS50b3RhbFJldHJ5RGVsYXkgPSB0b3RhbERlbGF5O1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU3RhbmRhcmRSZXRyeVN0cmF0ZWd5ID0gU3RhbmRhcmRSZXRyeVN0cmF0ZWd5O1xuY29uc3QgZ2V0RGVsYXlGcm9tUmV0cnlBZnRlckhlYWRlciA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXNwb25zZS5pc0luc3RhbmNlKHJlc3BvbnNlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXJOYW1lID0gT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gXCJyZXRyeS1hZnRlclwiKTtcbiAgICBpZiAoIXJldHJ5QWZ0ZXJIZWFkZXJOYW1lKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnNbcmV0cnlBZnRlckhlYWRlck5hbWVdO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJTZWNvbmRzID0gTnVtYmVyKHJldHJ5QWZ0ZXIpO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHJldHJ5QWZ0ZXJTZWNvbmRzKSlcbiAgICAgICAgcmV0dXJuIHJldHJ5QWZ0ZXJTZWNvbmRzICogMTAwMDtcbiAgICBjb25zdCByZXRyeUFmdGVyRGF0ZSA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpO1xuICAgIHJldHVybiByZXRyeUFmdGVyRGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFkYXB0aXZlUmV0cnlTdHJhdGVneSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXJldHJ5XCIpO1xuY29uc3QgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5XzEgPSByZXF1aXJlKFwiLi9TdGFuZGFyZFJldHJ5U3RyYXRlZ3lcIik7XG5jbGFzcyBBZGFwdGl2ZVJldHJ5U3RyYXRlZ3kgZXh0ZW5kcyBTdGFuZGFyZFJldHJ5U3RyYXRlZ3lfMS5TdGFuZGFyZFJldHJ5U3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG1heEF0dGVtcHRzUHJvdmlkZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByYXRlTGltaXRlciwgLi4uc3VwZXJPcHRpb25zIH0gPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgc3VwZXIobWF4QXR0ZW1wdHNQcm92aWRlciwgc3VwZXJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5yYXRlTGltaXRlciA9IHJhdGVMaW1pdGVyICE9PSBudWxsICYmIHJhdGVMaW1pdGVyICE9PSB2b2lkIDAgPyByYXRlTGltaXRlciA6IG5ldyB1dGlsX3JldHJ5XzEuRGVmYXVsdFJhdGVMaW1pdGVyKCk7XG4gICAgICAgIHRoaXMubW9kZSA9IHV0aWxfcmV0cnlfMS5SRVRSWV9NT0RFUy5BREFQVElWRTtcbiAgICB9XG4gICAgYXN5bmMgcmV0cnkobmV4dCwgYXJncykge1xuICAgICAgICByZXR1cm4gc3VwZXIucmV0cnkobmV4dCwgYXJncywge1xuICAgICAgICAgICAgYmVmb3JlUmVxdWVzdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJhdGVMaW1pdGVyLmdldFNlbmRUb2tlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyUmVxdWVzdDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXRlTGltaXRlci51cGRhdGVDbGllbnRTZW5kaW5nUmF0ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkFkYXB0aXZlUmV0cnlTdHJhdGVneSA9IEFkYXB0aXZlUmV0cnlTdHJhdGVneTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5PREVfUkVUUllfTU9ERV9DT05GSUdfT1BUSU9OUyA9IGV4cG9ydHMuQ09ORklHX1JFVFJZX01PREUgPSBleHBvcnRzLkVOVl9SRVRSWV9NT0RFID0gZXhwb3J0cy5yZXNvbHZlUmV0cnlDb25maWcgPSBleHBvcnRzLk5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMgPSBleHBvcnRzLkNPTkZJR19NQVhfQVRURU1QVFMgPSBleHBvcnRzLkVOVl9NQVhfQVRURU1QVFMgPSB2b2lkIDA7XG5jb25zdCB1dGlsX21pZGRsZXdhcmVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLW1pZGRsZXdhcmVcIik7XG5jb25zdCB1dGlsX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1yZXRyeVwiKTtcbmV4cG9ydHMuRU5WX01BWF9BVFRFTVBUUyA9IFwiQVdTX01BWF9BVFRFTVBUU1wiO1xuZXhwb3J0cy5DT05GSUdfTUFYX0FUVEVNUFRTID0gXCJtYXhfYXR0ZW1wdHNcIjtcbmV4cG9ydHMuTk9ERV9NQVhfQVRURU1QVF9DT05GSUdfT1BUSU9OUyA9IHtcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlbnZbZXhwb3J0cy5FTlZfTUFYX0FUVEVNUFRTXTtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG1heEF0dGVtcHQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4obWF4QXR0ZW1wdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgdmFyaWFibGUgJHtleHBvcnRzLkVOVl9NQVhfQVRURU1QVFN9IG1hc3QgYmUgYSBudW1iZXIsIGdvdCBcIiR7dmFsdWV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4QXR0ZW1wdDtcbiAgICB9LFxuICAgIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9maWxlW2V4cG9ydHMuQ09ORklHX01BWF9BVFRFTVBUU107XG4gICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0ID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG1heEF0dGVtcHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNoYXJlZCBjb25maWcgZmlsZSBlbnRyeSAke2V4cG9ydHMuQ09ORklHX01BWF9BVFRFTVBUU30gbWFzdCBiZSBhIG51bWJlciwgZ290IFwiJHt2YWx1ZX1cImApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhBdHRlbXB0O1xuICAgIH0sXG4gICAgZGVmYXVsdDogdXRpbF9yZXRyeV8xLkRFRkFVTFRfTUFYX0FUVEVNUFRTLFxufTtcbmNvbnN0IHJlc29sdmVSZXRyeUNvbmZpZyA9IChpbnB1dCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IHJldHJ5U3RyYXRlZ3kgfSA9IGlucHV0O1xuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKSgoX2EgPSBpbnB1dC5tYXhBdHRlbXB0cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdXRpbF9yZXRyeV8xLkRFRkFVTFRfTUFYX0FUVEVNUFRTKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgbWF4QXR0ZW1wdHMsXG4gICAgICAgIHJldHJ5U3RyYXRlZ3k6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXRyeVN0cmF0ZWd5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHJ5U3RyYXRlZ3k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXRyeU1vZGUgPSBhd2FpdCAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnJldHJ5TW9kZSkoKTtcbiAgICAgICAgICAgIGlmIChyZXRyeU1vZGUgPT09IHV0aWxfcmV0cnlfMS5SRVRSWV9NT0RFUy5BREFQVElWRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdXRpbF9yZXRyeV8xLkFkYXB0aXZlUmV0cnlTdHJhdGVneShtYXhBdHRlbXB0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IHV0aWxfcmV0cnlfMS5TdGFuZGFyZFJldHJ5U3RyYXRlZ3kobWF4QXR0ZW1wdHMpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlUmV0cnlDb25maWcgPSByZXNvbHZlUmV0cnlDb25maWc7XG5leHBvcnRzLkVOVl9SRVRSWV9NT0RFID0gXCJBV1NfUkVUUllfTU9ERVwiO1xuZXhwb3J0cy5DT05GSUdfUkVUUllfTU9ERSA9IFwicmV0cnlfbW9kZVwiO1xuZXhwb3J0cy5OT0RFX1JFVFJZX01PREVfQ09ORklHX09QVElPTlMgPSB7XG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbZXhwb3J0cy5FTlZfUkVUUllfTU9ERV0sXG4gICAgY29uZmlnRmlsZVNlbGVjdG9yOiAocHJvZmlsZSkgPT4gcHJvZmlsZVtleHBvcnRzLkNPTkZJR19SRVRSWV9NT0RFXSxcbiAgICBkZWZhdWx0OiB1dGlsX3JldHJ5XzEuREVGQVVMVF9SRVRSWV9NT0RFLFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9taXRSZXRyeUhlYWRlcnNQbHVnaW4gPSBleHBvcnRzLm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMub21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmUgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXJldHJ5XCIpO1xuY29uc3Qgb21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmUgPSAoKSA9PiAobmV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICBjb25zdCB7IHJlcXVlc3QgfSA9IGFyZ3M7XG4gICAgaWYgKHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpKSB7XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0LmhlYWRlcnNbdXRpbF9yZXRyeV8xLklOVk9DQVRJT05fSURfSEVBREVSXTtcbiAgICAgICAgZGVsZXRlIHJlcXVlc3QuaGVhZGVyc1t1dGlsX3JldHJ5XzEuUkVRVUVTVF9IRUFERVJdO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChhcmdzKTtcbn07XG5leHBvcnRzLm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlID0gb21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmU7XG5leHBvcnRzLm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgICBuYW1lOiBcIm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlXCIsXG4gICAgdGFnczogW1wiUkVUUllcIiwgXCJIRUFERVJTXCIsIFwiT01JVF9SRVRSWV9IRUFERVJTXCJdLFxuICAgIHJlbGF0aW9uOiBcImJlZm9yZVwiLFxuICAgIHRvTWlkZGxld2FyZTogXCJhd3NBdXRoTWlkZGxld2FyZVwiLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmNvbnN0IGdldE9taXRSZXRyeUhlYWRlcnNQbHVnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGRSZWxhdGl2ZVRvKCgwLCBleHBvcnRzLm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlKSgpLCBleHBvcnRzLm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRPbWl0UmV0cnlIZWFkZXJzUGx1Z2luID0gZ2V0T21pdFJldHJ5SGVhZGVyc1BsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJldHJ5QWZ0ZXJIaW50ID0gZXhwb3J0cy5nZXRSZXRyeVBsdWdpbiA9IGV4cG9ydHMucmV0cnlNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMucmV0cnlNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBzZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvblwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXJldHJ5XCIpO1xuY29uc3QgdXVpZF8xID0gcmVxdWlyZShcInV1aWRcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgcmV0cnlNaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGxldCByZXRyeVN0cmF0ZWd5ID0gYXdhaXQgb3B0aW9ucy5yZXRyeVN0cmF0ZWd5KCk7XG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSBhd2FpdCBvcHRpb25zLm1heEF0dGVtcHRzKCk7XG4gICAgaWYgKGlzUmV0cnlTdHJhdGVneVYyKHJldHJ5U3RyYXRlZ3kpKSB7XG4gICAgICAgIHJldHJ5U3RyYXRlZ3kgPSByZXRyeVN0cmF0ZWd5O1xuICAgICAgICBsZXQgcmV0cnlUb2tlbiA9IGF3YWl0IHJldHJ5U3RyYXRlZ3kuYWNxdWlyZUluaXRpYWxSZXRyeVRva2VuKGNvbnRleHRbXCJwYXJ0aXRpb25faWRcIl0pO1xuICAgICAgICBsZXQgbGFzdEVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgICAgIGxldCB0b3RhbFJldHJ5RGVsYXkgPSAwO1xuICAgICAgICBjb25zdCB7IHJlcXVlc3QgfSA9IGFyZ3M7XG4gICAgICAgIGlmIChwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzW3V0aWxfcmV0cnlfMS5JTlZPQ0FUSU9OX0lEX0hFQURFUl0gPSAoMCwgdXVpZF8xLnY0KSgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNbdXRpbF9yZXRyeV8xLlJFUVVFU1RfSEVBREVSXSA9IGBhdHRlbXB0PSR7YXR0ZW1wdHMgKyAxfTsgbWF4PSR7bWF4QXR0ZW1wdHN9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyByZXNwb25zZSwgb3V0cHV0IH0gPSBhd2FpdCBuZXh0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHJ5U3RyYXRlZ3kucmVjb3JkU3VjY2VzcyhyZXRyeVRva2VuKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQuJG1ldGFkYXRhLmF0dGVtcHRzID0gYXR0ZW1wdHMgKyAxO1xuICAgICAgICAgICAgICAgIG91dHB1dC4kbWV0YWRhdGEudG90YWxSZXRyeURlbGF5ID0gdG90YWxSZXRyeURlbGF5O1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBvdXRwdXQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlFcnJvckluZm8gPSBnZXRSZXRyeUVycm9ySW5mbyhlKTtcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSAoMCwgdXRpbF8xLmFzU2RrRXJyb3IpKGUpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHJ5VG9rZW4gPSBhd2FpdCByZXRyeVN0cmF0ZWd5LnJlZnJlc2hSZXRyeVRva2VuRm9yUmV0cnkocmV0cnlUb2tlbiwgcmV0cnlFcnJvckluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAocmVmcmVzaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEVycm9yLiRtZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yLiRtZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvci4kbWV0YWRhdGEuYXR0ZW1wdHMgPSBhdHRlbXB0cyArIDE7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvci4kbWV0YWRhdGEudG90YWxSZXRyeURlbGF5ID0gdG90YWxSZXRyeURlbGF5O1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF0dGVtcHRzID0gcmV0cnlUb2tlbi5nZXRSZXRyeUNvdW50KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsYXkgPSByZXRyeVRva2VuLmdldFJldHJ5RGVsYXkoKTtcbiAgICAgICAgICAgICAgICB0b3RhbFJldHJ5RGVsYXkgKz0gZGVsYXk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0cnlTdHJhdGVneSA9IHJldHJ5U3RyYXRlZ3k7XG4gICAgICAgIGlmIChyZXRyeVN0cmF0ZWd5ID09PSBudWxsIHx8IHJldHJ5U3RyYXRlZ3kgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJldHJ5U3RyYXRlZ3kubW9kZSlcbiAgICAgICAgICAgIGNvbnRleHQudXNlckFnZW50ID0gWy4uLihjb250ZXh0LnVzZXJBZ2VudCB8fCBbXSksIFtcImNmZy9yZXRyeS1tb2RlXCIsIHJldHJ5U3RyYXRlZ3kubW9kZV1dO1xuICAgICAgICByZXR1cm4gcmV0cnlTdHJhdGVneS5yZXRyeShuZXh0LCBhcmdzKTtcbiAgICB9XG59O1xuZXhwb3J0cy5yZXRyeU1pZGRsZXdhcmUgPSByZXRyeU1pZGRsZXdhcmU7XG5jb25zdCBpc1JldHJ5U3RyYXRlZ3lWMiA9IChyZXRyeVN0cmF0ZWd5KSA9PiB0eXBlb2YgcmV0cnlTdHJhdGVneS5hY3F1aXJlSW5pdGlhbFJldHJ5VG9rZW4gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgcmV0cnlTdHJhdGVneS5yZWZyZXNoUmV0cnlUb2tlbkZvclJldHJ5ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIHJldHJ5U3RyYXRlZ3kucmVjb3JkU3VjY2VzcyAhPT0gXCJ1bmRlZmluZWRcIjtcbmNvbnN0IGdldFJldHJ5RXJyb3JJbmZvID0gKGVycm9yKSA9PiB7XG4gICAgY29uc3QgZXJyb3JJbmZvID0ge1xuICAgICAgICBlcnJvclR5cGU6IGdldFJldHJ5RXJyb3JUeXBlKGVycm9yKSxcbiAgICB9O1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJIaW50ID0gKDAsIGV4cG9ydHMuZ2V0UmV0cnlBZnRlckhpbnQpKGVycm9yLiRyZXNwb25zZSk7XG4gICAgaWYgKHJldHJ5QWZ0ZXJIaW50KSB7XG4gICAgICAgIGVycm9ySW5mby5yZXRyeUFmdGVySGludCA9IHJldHJ5QWZ0ZXJIaW50O1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3JJbmZvO1xufTtcbmNvbnN0IGdldFJldHJ5RXJyb3JUeXBlID0gKGVycm9yKSA9PiB7XG4gICAgaWYgKCgwLCBzZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uXzEuaXNUaHJvdHRsaW5nRXJyb3IpKGVycm9yKSlcbiAgICAgICAgcmV0dXJuIFwiVEhST1RUTElOR1wiO1xuICAgIGlmICgoMCwgc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbl8xLmlzVHJhbnNpZW50RXJyb3IpKGVycm9yKSlcbiAgICAgICAgcmV0dXJuIFwiVFJBTlNJRU5UXCI7XG4gICAgaWYgKCgwLCBzZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uXzEuaXNTZXJ2ZXJFcnJvcikoZXJyb3IpKVxuICAgICAgICByZXR1cm4gXCJTRVJWRVJfRVJST1JcIjtcbiAgICByZXR1cm4gXCJDTElFTlRfRVJST1JcIjtcbn07XG5leHBvcnRzLnJldHJ5TWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJyZXRyeU1pZGRsZXdhcmVcIixcbiAgICB0YWdzOiBbXCJSRVRSWVwiXSxcbiAgICBzdGVwOiBcImZpbmFsaXplUmVxdWVzdFwiLFxuICAgIHByaW9yaXR5OiBcImhpZ2hcIixcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRSZXRyeVBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy5yZXRyeU1pZGRsZXdhcmUpKG9wdGlvbnMpLCBleHBvcnRzLnJldHJ5TWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0UmV0cnlQbHVnaW4gPSBnZXRSZXRyeVBsdWdpbjtcbmNvbnN0IGdldFJldHJ5QWZ0ZXJIaW50ID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFwcm90b2NvbF9odHRwXzEuSHR0cFJlc3BvbnNlLmlzSW5zdGFuY2UocmVzcG9uc2UpKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcmV0cnlBZnRlckhlYWRlck5hbWUgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKS5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcInJldHJ5LWFmdGVyXCIpO1xuICAgIGlmICghcmV0cnlBZnRlckhlYWRlck5hbWUpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCByZXRyeUFmdGVyID0gcmVzcG9uc2UuaGVhZGVyc1tyZXRyeUFmdGVySGVhZGVyTmFtZV07XG4gICAgY29uc3QgcmV0cnlBZnRlclNlY29uZHMgPSBOdW1iZXIocmV0cnlBZnRlcik7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocmV0cnlBZnRlclNlY29uZHMpKVxuICAgICAgICByZXR1cm4gbmV3IERhdGUocmV0cnlBZnRlclNlY29uZHMgKiAxMDAwKTtcbiAgICBjb25zdCByZXRyeUFmdGVyRGF0ZSA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpO1xuICAgIHJldHVybiByZXRyeUFmdGVyRGF0ZTtcbn07XG5leHBvcnRzLmdldFJldHJ5QWZ0ZXJIaW50ID0gZ2V0UmV0cnlBZnRlckhpbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0FkYXB0aXZlUmV0cnlTdHJhdGVneVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdGFuZGFyZFJldHJ5U3RyYXRlZ3lcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29uZmlndXJhdGlvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGVsYXlEZWNpZGVyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL29taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3JldHJ5RGVjaWRlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXRyeU1pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdmlkZXJFcnJvciA9IHZvaWQgMDtcbmNsYXNzIFByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdHJ5TmV4dExpbmsgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnRyeU5leHRMaW5rID0gdHJ5TmV4dExpbms7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUHJvdmlkZXJFcnJvclwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUHJvdmlkZXJFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbShlcnJvciwgdHJ5TmV4dExpbmsgPSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzKGVycm9yLm1lc3NhZ2UsIHRyeU5leHRMaW5rKSwgZXJyb3IpO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJvdmlkZXJFcnJvciA9IFByb3ZpZGVyRXJyb3I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IgPSB2b2lkIDA7XG5jb25zdCBQcm92aWRlckVycm9yXzEgPSByZXF1aXJlKFwiLi9Qcm92aWRlckVycm9yXCIpO1xuY2xhc3MgQ3JlZGVudGlhbHNQcm92aWRlckVycm9yIGV4dGVuZHMgUHJvdmlkZXJFcnJvcl8xLlByb3ZpZGVyRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHRyeU5leHRMaW5rID0gdHJ1ZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCB0cnlOZXh0TGluayk7XG4gICAgICAgIHRoaXMudHJ5TmV4dExpbmsgPSB0cnlOZXh0TGluaztcbiAgICAgICAgdGhpcy5uYW1lID0gXCJDcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3JcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIENyZWRlbnRpYWxzUHJvdmlkZXJFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yID0gQ3JlZGVudGlhbHNQcm92aWRlckVycm9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVG9rZW5Qcm92aWRlckVycm9yID0gdm9pZCAwO1xuY29uc3QgUHJvdmlkZXJFcnJvcl8xID0gcmVxdWlyZShcIi4vUHJvdmlkZXJFcnJvclwiKTtcbmNsYXNzIFRva2VuUHJvdmlkZXJFcnJvciBleHRlbmRzIFByb3ZpZGVyRXJyb3JfMS5Qcm92aWRlckVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0cnlOZXh0TGluayA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdHJ5TmV4dExpbmspO1xuICAgICAgICB0aGlzLnRyeU5leHRMaW5rID0gdHJ5TmV4dExpbms7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVG9rZW5Qcm92aWRlckVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUb2tlblByb3ZpZGVyRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRva2VuUHJvdmlkZXJFcnJvciA9IFRva2VuUHJvdmlkZXJFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoYWluID0gdm9pZCAwO1xuY29uc3QgUHJvdmlkZXJFcnJvcl8xID0gcmVxdWlyZShcIi4vUHJvdmlkZXJFcnJvclwiKTtcbmZ1bmN0aW9uIGNoYWluKC4uLnByb3ZpZGVycykge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IFByb3ZpZGVyRXJyb3JfMS5Qcm92aWRlckVycm9yKFwiTm8gcHJvdmlkZXJzIGluIGNoYWluXCIpKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm92aWRlciBvZiBwcm92aWRlcnMpIHtcbiAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLnRyeU5leHRMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xufVxuZXhwb3J0cy5jaGFpbiA9IGNoYWluO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVN0YXRpYyA9IHZvaWQgMDtcbmNvbnN0IGZyb21TdGF0aWMgPSAoc3RhdGljVmFsdWUpID0+ICgpID0+IFByb21pc2UucmVzb2x2ZShzdGF0aWNWYWx1ZSk7XG5leHBvcnRzLmZyb21TdGF0aWMgPSBmcm9tU3RhdGljO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVtb2l6ZSA9IHZvaWQgMDtcbmNvbnN0IG1lbW9pemUgPSAocHJvdmlkZXIsIGlzRXhwaXJlZCwgcmVxdWlyZXNSZWZyZXNoKSA9PiB7XG4gICAgbGV0IHJlc29sdmVkO1xuICAgIGxldCBwZW5kaW5nO1xuICAgIGxldCBoYXNSZXN1bHQ7XG4gICAgbGV0IGlzQ29uc3RhbnQgPSBmYWxzZTtcbiAgICBjb25zdCBjb2FsZXNjZVByb3ZpZGVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBwcm92aWRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNvbHZlZCA9IGF3YWl0IHBlbmRpbmc7XG4gICAgICAgICAgICBoYXNSZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgaXNDb25zdGFudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgfTtcbiAgICBpZiAoaXNFeHBpcmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhc1Jlc3VsdCB8fCAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZvcmNlUmVmcmVzaCkpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZCA9IGF3YWl0IGNvYWxlc2NlUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGlmICghaGFzUmVzdWx0IHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZm9yY2VSZWZyZXNoKSkge1xuICAgICAgICAgICAgcmVzb2x2ZWQgPSBhd2FpdCBjb2FsZXNjZVByb3ZpZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29uc3RhbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWlyZXNSZWZyZXNoICYmICFyZXF1aXJlc1JlZnJlc2gocmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICBpc0NvbnN0YW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFeHBpcmVkKHJlc29sdmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgY29hbGVzY2VQcm92aWRlcigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9O1xufTtcbmV4cG9ydHMubWVtb2l6ZSA9IG1lbW9pemU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0NyZWRlbnRpYWxzUHJvdmlkZXJFcnJvclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Qcm92aWRlckVycm9yXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1Rva2VuUHJvdmlkZXJFcnJvclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jaGFpblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tU3RhdGljXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21lbW9pemVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9IZXggPSBleHBvcnRzLmZyb21IZXggPSB2b2lkIDA7XG5jb25zdCBTSE9SVF9UT19IRVggPSB7fTtcbmNvbnN0IEhFWF9UT19TSE9SVCA9IHt9O1xuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgIGxldCBlbmNvZGVkQnl0ZSA9IGkudG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGVuY29kZWRCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbmNvZGVkQnl0ZSA9IGAwJHtlbmNvZGVkQnl0ZX1gO1xuICAgIH1cbiAgICBTSE9SVF9UT19IRVhbaV0gPSBlbmNvZGVkQnl0ZTtcbiAgICBIRVhfVE9fU0hPUlRbZW5jb2RlZEJ5dGVdID0gaTtcbn1cbmZ1bmN0aW9uIGZyb21IZXgoZW5jb2RlZCkge1xuICAgIGlmIChlbmNvZGVkLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGV4IGVuY29kZWQgc3RyaW5ncyBtdXN0IGhhdmUgYW4gZXZlbiBudW1iZXIgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShlbmNvZGVkLmxlbmd0aCAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBlbmNvZGVkQnl0ZSA9IGVuY29kZWQuc2xpY2UoaSwgaSArIDIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChlbmNvZGVkQnl0ZSBpbiBIRVhfVE9fU0hPUlQpIHtcbiAgICAgICAgICAgIG91dFtpIC8gMl0gPSBIRVhfVE9fU0hPUlRbZW5jb2RlZEJ5dGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIHVucmVjb2duaXplZCBzZXF1ZW5jZSAke2VuY29kZWRCeXRlfSBhcyBoZXhhZGVjaW1hbGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5leHBvcnRzLmZyb21IZXggPSBmcm9tSGV4O1xuZnVuY3Rpb24gdG9IZXgoYnl0ZXMpIHtcbiAgICBsZXQgb3V0ID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBvdXQgKz0gU0hPUlRfVE9fSEVYW2J5dGVzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydHMudG9IZXggPSB0b0hleDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQXJyYXlCdWZmZXIgPSB2b2lkIDA7XG5jb25zdCBpc0FycmF5QnVmZmVyID0gKGFyZykgPT4gKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIGFyZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI7XG5leHBvcnRzLmlzQXJyYXlCdWZmZXIgPSBpc0FycmF5QnVmZmVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVN0cmluZyA9IGV4cG9ydHMuZnJvbUFycmF5QnVmZmVyID0gdm9pZCAwO1xuY29uc3QgaXNfYXJyYXlfYnVmZmVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvaXMtYXJyYXktYnVmZmVyXCIpO1xuY29uc3QgYnVmZmVyXzEgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuY29uc3QgZnJvbUFycmF5QnVmZmVyID0gKGlucHV0LCBvZmZzZXQgPSAwLCBsZW5ndGggPSBpbnB1dC5ieXRlTGVuZ3RoIC0gb2Zmc2V0KSA9PiB7XG4gICAgaWYgKCEoMCwgaXNfYXJyYXlfYnVmZmVyXzEuaXNBcnJheUJ1ZmZlcikoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcImlucHV0XCIgYXJndW1lbnQgbXVzdCBiZSBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBpbnB1dH0gKCR7aW5wdXR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZmVyXzEuQnVmZmVyLmZyb20oaW5wdXQsIG9mZnNldCwgbGVuZ3RoKTtcbn07XG5leHBvcnRzLmZyb21BcnJheUJ1ZmZlciA9IGZyb21BcnJheUJ1ZmZlcjtcbmNvbnN0IGZyb21TdHJpbmcgPSAoaW5wdXQsIGVuY29kaW5nKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgXCJpbnB1dFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaW5wdXR9ICgke2lucHV0fSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuY29kaW5nID8gYnVmZmVyXzEuQnVmZmVyLmZyb20oaW5wdXQsIGVuY29kaW5nKSA6IGJ1ZmZlcl8xLkJ1ZmZlci5mcm9tKGlucHV0KTtcbn07XG5leHBvcnRzLmZyb21TdHJpbmcgPSBmcm9tU3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVV0ZjggPSB2b2lkIDA7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1idWZmZXItZnJvbVwiKTtcbmNvbnN0IGZyb21VdGY4ID0gKGlucHV0KSA9PiB7XG4gICAgY29uc3QgYnVmID0gKDAsIHV0aWxfYnVmZmVyX2Zyb21fMS5mcm9tU3RyaW5nKShpbnB1dCwgXCJ1dGY4XCIpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGggLyBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UKTtcbn07XG5leHBvcnRzLmZyb21VdGY4ID0gZnJvbVV0Zjg7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1VpbnQ4QXJyYXkgPSB2b2lkIDA7XG5jb25zdCBmcm9tVXRmOF8xID0gcmVxdWlyZShcIi4vZnJvbVV0ZjhcIik7XG5jb25zdCB0b1VpbnQ4QXJyYXkgPSAoZGF0YSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIGZyb21VdGY4XzEuZnJvbVV0ZjgpKGRhdGEpO1xuICAgIH1cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGggLyBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpO1xufTtcbmV4cG9ydHMudG9VaW50OEFycmF5ID0gdG9VaW50OEFycmF5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9VdGY4ID0gdm9pZCAwO1xuY29uc3QgdXRpbF9idWZmZXJfZnJvbV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtYnVmZmVyLWZyb21cIik7XG5jb25zdCB0b1V0ZjggPSAoaW5wdXQpID0+ICgwLCB1dGlsX2J1ZmZlcl9mcm9tXzEuZnJvbUFycmF5QnVmZmVyKShpbnB1dC5idWZmZXIsIGlucHV0LmJ5dGVPZmZzZXQsIGlucHV0LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKFwidXRmOFwiKTtcbmV4cG9ydHMudG9VdGY4ID0gdG9VdGY4O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tVXRmOFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90b1VpbnQ4QXJyYXlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdG9VdGY4XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1BWF9QUkVTSUdORURfVFRMID0gZXhwb3J0cy5LRVlfVFlQRV9JREVOVElGSUVSID0gZXhwb3J0cy5NQVhfQ0FDSEVfU0laRSA9IGV4cG9ydHMuVU5TSUdORURfUEFZTE9BRCA9IGV4cG9ydHMuRVZFTlRfQUxHT1JJVEhNX0lERU5USUZJRVIgPSBleHBvcnRzLkFMR09SSVRITV9JREVOVElGSUVSX1Y0QSA9IGV4cG9ydHMuQUxHT1JJVEhNX0lERU5USUZJRVIgPSBleHBvcnRzLlVOU0lHTkFCTEVfUEFUVEVSTlMgPSBleHBvcnRzLlNFQ19IRUFERVJfUEFUVEVSTiA9IGV4cG9ydHMuUFJPWFlfSEVBREVSX1BBVFRFUk4gPSBleHBvcnRzLkFMV0FZU19VTlNJR05BQkxFX0hFQURFUlMgPSBleHBvcnRzLkhPU1RfSEVBREVSID0gZXhwb3J0cy5UT0tFTl9IRUFERVIgPSBleHBvcnRzLlNIQTI1Nl9IRUFERVIgPSBleHBvcnRzLlNJR05BVFVSRV9IRUFERVIgPSBleHBvcnRzLkdFTkVSQVRFRF9IRUFERVJTID0gZXhwb3J0cy5EQVRFX0hFQURFUiA9IGV4cG9ydHMuQU1aX0RBVEVfSEVBREVSID0gZXhwb3J0cy5BVVRIX0hFQURFUiA9IGV4cG9ydHMuUkVHSU9OX1NFVF9QQVJBTSA9IGV4cG9ydHMuVE9LRU5fUVVFUllfUEFSQU0gPSBleHBvcnRzLlNJR05BVFVSRV9RVUVSWV9QQVJBTSA9IGV4cG9ydHMuRVhQSVJFU19RVUVSWV9QQVJBTSA9IGV4cG9ydHMuU0lHTkVEX0hFQURFUlNfUVVFUllfUEFSQU0gPSBleHBvcnRzLkFNWl9EQVRFX1FVRVJZX1BBUkFNID0gZXhwb3J0cy5DUkVERU5USUFMX1FVRVJZX1BBUkFNID0gZXhwb3J0cy5BTEdPUklUSE1fUVVFUllfUEFSQU0gPSB2b2lkIDA7XG5leHBvcnRzLkFMR09SSVRITV9RVUVSWV9QQVJBTSA9IFwiWC1BbXotQWxnb3JpdGhtXCI7XG5leHBvcnRzLkNSRURFTlRJQUxfUVVFUllfUEFSQU0gPSBcIlgtQW16LUNyZWRlbnRpYWxcIjtcbmV4cG9ydHMuQU1aX0RBVEVfUVVFUllfUEFSQU0gPSBcIlgtQW16LURhdGVcIjtcbmV4cG9ydHMuU0lHTkVEX0hFQURFUlNfUVVFUllfUEFSQU0gPSBcIlgtQW16LVNpZ25lZEhlYWRlcnNcIjtcbmV4cG9ydHMuRVhQSVJFU19RVUVSWV9QQVJBTSA9IFwiWC1BbXotRXhwaXJlc1wiO1xuZXhwb3J0cy5TSUdOQVRVUkVfUVVFUllfUEFSQU0gPSBcIlgtQW16LVNpZ25hdHVyZVwiO1xuZXhwb3J0cy5UT0tFTl9RVUVSWV9QQVJBTSA9IFwiWC1BbXotU2VjdXJpdHktVG9rZW5cIjtcbmV4cG9ydHMuUkVHSU9OX1NFVF9QQVJBTSA9IFwiWC1BbXotUmVnaW9uLVNldFwiO1xuZXhwb3J0cy5BVVRIX0hFQURFUiA9IFwiYXV0aG9yaXphdGlvblwiO1xuZXhwb3J0cy5BTVpfREFURV9IRUFERVIgPSBleHBvcnRzLkFNWl9EQVRFX1FVRVJZX1BBUkFNLnRvTG93ZXJDYXNlKCk7XG5leHBvcnRzLkRBVEVfSEVBREVSID0gXCJkYXRlXCI7XG5leHBvcnRzLkdFTkVSQVRFRF9IRUFERVJTID0gW2V4cG9ydHMuQVVUSF9IRUFERVIsIGV4cG9ydHMuQU1aX0RBVEVfSEVBREVSLCBleHBvcnRzLkRBVEVfSEVBREVSXTtcbmV4cG9ydHMuU0lHTkFUVVJFX0hFQURFUiA9IGV4cG9ydHMuU0lHTkFUVVJFX1FVRVJZX1BBUkFNLnRvTG93ZXJDYXNlKCk7XG5leHBvcnRzLlNIQTI1Nl9IRUFERVIgPSBcIngtYW16LWNvbnRlbnQtc2hhMjU2XCI7XG5leHBvcnRzLlRPS0VOX0hFQURFUiA9IGV4cG9ydHMuVE9LRU5fUVVFUllfUEFSQU0udG9Mb3dlckNhc2UoKTtcbmV4cG9ydHMuSE9TVF9IRUFERVIgPSBcImhvc3RcIjtcbmV4cG9ydHMuQUxXQVlTX1VOU0lHTkFCTEVfSEVBREVSUyA9IHtcbiAgICBhdXRob3JpemF0aW9uOiB0cnVlLFxuICAgIFwiY2FjaGUtY29udHJvbFwiOiB0cnVlLFxuICAgIGNvbm5lY3Rpb246IHRydWUsXG4gICAgZXhwZWN0OiB0cnVlLFxuICAgIGZyb206IHRydWUsXG4gICAgXCJrZWVwLWFsaXZlXCI6IHRydWUsXG4gICAgXCJtYXgtZm9yd2FyZHNcIjogdHJ1ZSxcbiAgICBwcmFnbWE6IHRydWUsXG4gICAgcmVmZXJlcjogdHJ1ZSxcbiAgICB0ZTogdHJ1ZSxcbiAgICB0cmFpbGVyOiB0cnVlLFxuICAgIFwidHJhbnNmZXItZW5jb2RpbmdcIjogdHJ1ZSxcbiAgICB1cGdyYWRlOiB0cnVlLFxuICAgIFwidXNlci1hZ2VudFwiOiB0cnVlLFxuICAgIFwieC1hbXpuLXRyYWNlLWlkXCI6IHRydWUsXG59O1xuZXhwb3J0cy5QUk9YWV9IRUFERVJfUEFUVEVSTiA9IC9ecHJveHktLztcbmV4cG9ydHMuU0VDX0hFQURFUl9QQVRURVJOID0gL15zZWMtLztcbmV4cG9ydHMuVU5TSUdOQUJMRV9QQVRURVJOUyA9IFsvXnByb3h5LS9pLCAvXnNlYy0vaV07XG5leHBvcnRzLkFMR09SSVRITV9JREVOVElGSUVSID0gXCJBV1M0LUhNQUMtU0hBMjU2XCI7XG5leHBvcnRzLkFMR09SSVRITV9JREVOVElGSUVSX1Y0QSA9IFwiQVdTNC1FQ0RTQS1QMjU2LVNIQTI1NlwiO1xuZXhwb3J0cy5FVkVOVF9BTEdPUklUSE1fSURFTlRJRklFUiA9IFwiQVdTNC1ITUFDLVNIQTI1Ni1QQVlMT0FEXCI7XG5leHBvcnRzLlVOU0lHTkVEX1BBWUxPQUQgPSBcIlVOU0lHTkVELVBBWUxPQURcIjtcbmV4cG9ydHMuTUFYX0NBQ0hFX1NJWkUgPSA1MDtcbmV4cG9ydHMuS0VZX1RZUEVfSURFTlRJRklFUiA9IFwiYXdzNF9yZXF1ZXN0XCI7XG5leHBvcnRzLk1BWF9QUkVTSUdORURfVFRMID0gNjAgKiA2MCAqIDI0ICogNztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNsZWFyQ3JlZGVudGlhbENhY2hlID0gZXhwb3J0cy5nZXRTaWduaW5nS2V5ID0gZXhwb3J0cy5jcmVhdGVTY29wZSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfaGV4X2VuY29kaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1oZXgtZW5jb2RpbmdcIik7XG5jb25zdCB1dGlsX3V0ZjhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXV0ZjhcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IHNpZ25pbmdLZXlDYWNoZSA9IHt9O1xuY29uc3QgY2FjaGVRdWV1ZSA9IFtdO1xuY29uc3QgY3JlYXRlU2NvcGUgPSAoc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UpID0+IGAke3Nob3J0RGF0ZX0vJHtyZWdpb259LyR7c2VydmljZX0vJHtjb25zdGFudHNfMS5LRVlfVFlQRV9JREVOVElGSUVSfWA7XG5leHBvcnRzLmNyZWF0ZVNjb3BlID0gY3JlYXRlU2NvcGU7XG5jb25zdCBnZXRTaWduaW5nS2V5ID0gYXN5bmMgKHNoYTI1NkNvbnN0cnVjdG9yLCBjcmVkZW50aWFscywgc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UpID0+IHtcbiAgICBjb25zdCBjcmVkc0hhc2ggPSBhd2FpdCBobWFjKHNoYTI1NkNvbnN0cnVjdG9yLCBjcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXksIGNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkKTtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke3Nob3J0RGF0ZX06JHtyZWdpb259OiR7c2VydmljZX06JHsoMCwgdXRpbF9oZXhfZW5jb2RpbmdfMS50b0hleCkoY3JlZHNIYXNoKX06JHtjcmVkZW50aWFscy5zZXNzaW9uVG9rZW59YDtcbiAgICBpZiAoY2FjaGVLZXkgaW4gc2lnbmluZ0tleUNhY2hlKSB7XG4gICAgICAgIHJldHVybiBzaWduaW5nS2V5Q2FjaGVbY2FjaGVLZXldO1xuICAgIH1cbiAgICBjYWNoZVF1ZXVlLnB1c2goY2FjaGVLZXkpO1xuICAgIHdoaWxlIChjYWNoZVF1ZXVlLmxlbmd0aCA+IGNvbnN0YW50c18xLk1BWF9DQUNIRV9TSVpFKSB7XG4gICAgICAgIGRlbGV0ZSBzaWduaW5nS2V5Q2FjaGVbY2FjaGVRdWV1ZS5zaGlmdCgpXTtcbiAgICB9XG4gICAgbGV0IGtleSA9IGBBV1M0JHtjcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXl9YDtcbiAgICBmb3IgKGNvbnN0IHNpZ25hYmxlIG9mIFtzaG9ydERhdGUsIHJlZ2lvbiwgc2VydmljZSwgY29uc3RhbnRzXzEuS0VZX1RZUEVfSURFTlRJRklFUl0pIHtcbiAgICAgICAga2V5ID0gYXdhaXQgaG1hYyhzaGEyNTZDb25zdHJ1Y3Rvciwga2V5LCBzaWduYWJsZSk7XG4gICAgfVxuICAgIHJldHVybiAoc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XSA9IGtleSk7XG59O1xuZXhwb3J0cy5nZXRTaWduaW5nS2V5ID0gZ2V0U2lnbmluZ0tleTtcbmNvbnN0IGNsZWFyQ3JlZGVudGlhbENhY2hlID0gKCkgPT4ge1xuICAgIGNhY2hlUXVldWUubGVuZ3RoID0gMDtcbiAgICBPYmplY3Qua2V5cyhzaWduaW5nS2V5Q2FjaGUpLmZvckVhY2goKGNhY2hlS2V5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBzaWduaW5nS2V5Q2FjaGVbY2FjaGVLZXldO1xuICAgIH0pO1xufTtcbmV4cG9ydHMuY2xlYXJDcmVkZW50aWFsQ2FjaGUgPSBjbGVhckNyZWRlbnRpYWxDYWNoZTtcbmNvbnN0IGhtYWMgPSAoY3Rvciwgc2VjcmV0LCBkYXRhKSA9PiB7XG4gICAgY29uc3QgaGFzaCA9IG5ldyBjdG9yKHNlY3JldCk7XG4gICAgaGFzaC51cGRhdGUoKDAsIHV0aWxfdXRmOF8xLnRvVWludDhBcnJheSkoZGF0YSkpO1xuICAgIHJldHVybiBoYXNoLmRpZ2VzdCgpO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENhbm9uaWNhbEhlYWRlcnMgPSB2b2lkIDA7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGdldENhbm9uaWNhbEhlYWRlcnMgPSAoeyBoZWFkZXJzIH0sIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpID0+IHtcbiAgICBjb25zdCBjYW5vbmljYWwgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykuc29ydCgpKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW2hlYWRlck5hbWVdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2Fub25pY2FsSGVhZGVyTmFtZSA9IGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGNhbm9uaWNhbEhlYWRlck5hbWUgaW4gY29uc3RhbnRzXzEuQUxXQVlTX1VOU0lHTkFCTEVfSEVBREVSUyB8fFxuICAgICAgICAgICAgKHVuc2lnbmFibGVIZWFkZXJzID09PSBudWxsIHx8IHVuc2lnbmFibGVIZWFkZXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1bnNpZ25hYmxlSGVhZGVycy5oYXMoY2Fub25pY2FsSGVhZGVyTmFtZSkpIHx8XG4gICAgICAgICAgICBjb25zdGFudHNfMS5QUk9YWV9IRUFERVJfUEFUVEVSTi50ZXN0KGNhbm9uaWNhbEhlYWRlck5hbWUpIHx8XG4gICAgICAgICAgICBjb25zdGFudHNfMS5TRUNfSEVBREVSX1BBVFRFUk4udGVzdChjYW5vbmljYWxIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgaWYgKCFzaWduYWJsZUhlYWRlcnMgfHwgKHNpZ25hYmxlSGVhZGVycyAmJiAhc2lnbmFibGVIZWFkZXJzLmhhcyhjYW5vbmljYWxIZWFkZXJOYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYW5vbmljYWxbY2Fub25pY2FsSGVhZGVyTmFtZV0gPSBoZWFkZXJzW2hlYWRlck5hbWVdLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbm9uaWNhbDtcbn07XG5leHBvcnRzLmdldENhbm9uaWNhbEhlYWRlcnMgPSBnZXRDYW5vbmljYWxIZWFkZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXNjYXBlVXJpID0gdm9pZCAwO1xuY29uc3QgZXNjYXBlVXJpID0gKHVyaSkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHVyaSkucmVwbGFjZSgvWyEnKCkqXS9nLCBoZXhFbmNvZGUpO1xuZXhwb3J0cy5lc2NhcGVVcmkgPSBlc2NhcGVVcmk7XG5jb25zdCBoZXhFbmNvZGUgPSAoYykgPT4gYCUke2MuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXNjYXBlVXJpUGF0aCA9IHZvaWQgMDtcbmNvbnN0IGVzY2FwZV91cmlfMSA9IHJlcXVpcmUoXCIuL2VzY2FwZS11cmlcIik7XG5jb25zdCBlc2NhcGVVcmlQYXRoID0gKHVyaSkgPT4gdXJpLnNwbGl0KFwiL1wiKS5tYXAoZXNjYXBlX3VyaV8xLmVzY2FwZVVyaSkuam9pbihcIi9cIik7XG5leHBvcnRzLmVzY2FwZVVyaVBhdGggPSBlc2NhcGVVcmlQYXRoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lc2NhcGUtdXJpXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2VzY2FwZS11cmktcGF0aFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDYW5vbmljYWxRdWVyeSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfdXJpX2VzY2FwZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXJpLWVzY2FwZVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZ2V0Q2Fub25pY2FsUXVlcnkgPSAoeyBxdWVyeSA9IHt9IH0pID0+IHtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHF1ZXJ5KS5zb3J0KCkpIHtcbiAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBjb25zdGFudHNfMS5TSUdOQVRVUkVfSEVBREVSKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeVtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkW2tleV0gPSBgJHsoMCwgdXRpbF91cmlfZXNjYXBlXzEuZXNjYXBlVXJpKShrZXkpfT0keygwLCB1dGlsX3VyaV9lc2NhcGVfMS5lc2NhcGVVcmkpKHZhbHVlKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChlbmNvZGVkLCB2YWx1ZSkgPT4gZW5jb2RlZC5jb25jYXQoW2AkeygwLCB1dGlsX3VyaV9lc2NhcGVfMS5lc2NhcGVVcmkpKGtleSl9PSR7KDAsIHV0aWxfdXJpX2VzY2FwZV8xLmVzY2FwZVVyaSkodmFsdWUpfWBdKSwgW10pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzXG4gICAgICAgIC5tYXAoKGtleSkgPT4gc2VyaWFsaXplZFtrZXldKVxuICAgICAgICAuZmlsdGVyKChzZXJpYWxpemVkKSA9PiBzZXJpYWxpemVkKVxuICAgICAgICAuam9pbihcIiZcIik7XG59O1xuZXhwb3J0cy5nZXRDYW5vbmljYWxRdWVyeSA9IGdldENhbm9uaWNhbFF1ZXJ5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UGF5bG9hZEhhc2ggPSB2b2lkIDA7XG5jb25zdCBpc19hcnJheV9idWZmZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9pcy1hcnJheS1idWZmZXJcIik7XG5jb25zdCB1dGlsX2hleF9lbmNvZGluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtaGV4LWVuY29kaW5nXCIpO1xuY29uc3QgdXRpbF91dGY4XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC11dGY4XCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBnZXRQYXlsb2FkSGFzaCA9IGFzeW5jICh7IGhlYWRlcnMsIGJvZHkgfSwgaGFzaENvbnN0cnVjdG9yKSA9PiB7XG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmIChoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNvbnN0YW50c18xLlNIQTI1Nl9IRUFERVIpIHtcbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJzW2hlYWRlck5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChib2R5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gXCJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1XCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiIHx8IEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSB8fCAoMCwgaXNfYXJyYXlfYnVmZmVyXzEuaXNBcnJheUJ1ZmZlcikoYm9keSkpIHtcbiAgICAgICAgY29uc3QgaGFzaEN0b3IgPSBuZXcgaGFzaENvbnN0cnVjdG9yKCk7XG4gICAgICAgIGhhc2hDdG9yLnVwZGF0ZSgoMCwgdXRpbF91dGY4XzEudG9VaW50OEFycmF5KShib2R5KSk7XG4gICAgICAgIHJldHVybiAoMCwgdXRpbF9oZXhfZW5jb2RpbmdfMS50b0hleCkoYXdhaXQgaGFzaEN0b3IuZGlnZXN0KCkpO1xuICAgIH1cbiAgICByZXR1cm4gY29uc3RhbnRzXzEuVU5TSUdORURfUEFZTE9BRDtcbn07XG5leHBvcnRzLmdldFBheWxvYWRIYXNoID0gZ2V0UGF5bG9hZEhhc2g7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxldGVIZWFkZXIgPSBleHBvcnRzLmdldEhlYWRlclZhbHVlID0gZXhwb3J0cy5oYXNIZWFkZXIgPSB2b2lkIDA7XG5jb25zdCBoYXNIZWFkZXIgPSAoc291Z2h0SGVhZGVyLCBoZWFkZXJzKSA9PiB7XG4gICAgc291Z2h0SGVhZGVyID0gc291Z2h0SGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmIChzb3VnaHRIZWFkZXIgPT09IGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydHMuaGFzSGVhZGVyID0gaGFzSGVhZGVyO1xuY29uc3QgZ2V0SGVhZGVyVmFsdWUgPSAoc291Z2h0SGVhZGVyLCBoZWFkZXJzKSA9PiB7XG4gICAgc291Z2h0SGVhZGVyID0gc291Z2h0SGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmIChzb3VnaHRIZWFkZXIgPT09IGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnNbaGVhZGVyTmFtZV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5leHBvcnRzLmdldEhlYWRlclZhbHVlID0gZ2V0SGVhZGVyVmFsdWU7XG5jb25zdCBkZWxldGVIZWFkZXIgPSAoc291Z2h0SGVhZGVyLCBoZWFkZXJzKSA9PiB7XG4gICAgc291Z2h0SGVhZGVyID0gc291Z2h0SGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmIChzb3VnaHRIZWFkZXIgPT09IGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZV07XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0cy5kZWxldGVIZWFkZXIgPSBkZWxldGVIZWFkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jbG9uZVF1ZXJ5ID0gZXhwb3J0cy5jbG9uZVJlcXVlc3QgPSB2b2lkIDA7XG5jb25zdCBjbG9uZVJlcXVlc3QgPSAoeyBoZWFkZXJzLCBxdWVyeSwgLi4ucmVzdCB9KSA9PiAoe1xuICAgIC4uLnJlc3QsXG4gICAgaGVhZGVyczogeyAuLi5oZWFkZXJzIH0sXG4gICAgcXVlcnk6IHF1ZXJ5ID8gKDAsIGV4cG9ydHMuY2xvbmVRdWVyeSkocXVlcnkpIDogdW5kZWZpbmVkLFxufSk7XG5leHBvcnRzLmNsb25lUmVxdWVzdCA9IGNsb25lUmVxdWVzdDtcbmNvbnN0IGNsb25lUXVlcnkgPSAocXVlcnkpID0+IE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGNhcnJ5LCBwYXJhbU5hbWUpID0+IHtcbiAgICBjb25zdCBwYXJhbSA9IHF1ZXJ5W3BhcmFtTmFtZV07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY2FycnksXG4gICAgICAgIFtwYXJhbU5hbWVdOiBBcnJheS5pc0FycmF5KHBhcmFtKSA/IFsuLi5wYXJhbV0gOiBwYXJhbSxcbiAgICB9O1xufSwge30pO1xuZXhwb3J0cy5jbG9uZVF1ZXJ5ID0gY2xvbmVRdWVyeTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1vdmVIZWFkZXJzVG9RdWVyeSA9IHZvaWQgMDtcbmNvbnN0IGNsb25lUmVxdWVzdF8xID0gcmVxdWlyZShcIi4vY2xvbmVSZXF1ZXN0XCIpO1xuY29uc3QgbW92ZUhlYWRlcnNUb1F1ZXJ5ID0gKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGhlYWRlcnMsIHF1ZXJ5ID0ge30gfSA9IHR5cGVvZiByZXF1ZXN0LmNsb25lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmNsb25lKCkgOiAoMCwgY2xvbmVSZXF1ZXN0XzEuY2xvbmVSZXF1ZXN0KShyZXF1ZXN0KTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgY29uc3QgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChsbmFtZS5zbGljZSgwLCA2KSA9PT0gXCJ4LWFtei1cIiAmJiAhKChfYSA9IG9wdGlvbnMudW5ob2lzdGFibGVIZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKGxuYW1lKSkpIHtcbiAgICAgICAgICAgIHF1ZXJ5W25hbWVdID0gaGVhZGVyc1tuYW1lXTtcbiAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHF1ZXJ5LFxuICAgIH07XG59O1xuZXhwb3J0cy5tb3ZlSGVhZGVyc1RvUXVlcnkgPSBtb3ZlSGVhZGVyc1RvUXVlcnk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlUmVxdWVzdCA9IHZvaWQgMDtcbmNvbnN0IGNsb25lUmVxdWVzdF8xID0gcmVxdWlyZShcIi4vY2xvbmVSZXF1ZXN0XCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBwcmVwYXJlUmVxdWVzdCA9IChyZXF1ZXN0KSA9PiB7XG4gICAgcmVxdWVzdCA9IHR5cGVvZiByZXF1ZXN0LmNsb25lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmNsb25lKCkgOiAoMCwgY2xvbmVSZXF1ZXN0XzEuY2xvbmVSZXF1ZXN0KShyZXF1ZXN0KTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMocmVxdWVzdC5oZWFkZXJzKSkge1xuICAgICAgICBpZiAoY29uc3RhbnRzXzEuR0VORVJBVEVEX0hFQURFUlMuaW5kZXhPZihoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCkpID4gLTEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LmhlYWRlcnNbaGVhZGVyTmFtZV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuZXhwb3J0cy5wcmVwYXJlUmVxdWVzdCA9IHByZXBhcmVSZXF1ZXN0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9EYXRlID0gZXhwb3J0cy5pc284NjAxID0gdm9pZCAwO1xuY29uc3QgaXNvODYwMSA9ICh0aW1lKSA9PiAoMCwgZXhwb3J0cy50b0RhdGUpKHRpbWUpXG4gICAgLnRvSVNPU3RyaW5nKClcbiAgICAucmVwbGFjZSgvXFwuXFxkezN9WiQvLCBcIlpcIik7XG5leHBvcnRzLmlzbzg2MDEgPSBpc284NjAxO1xuY29uc3QgdG9EYXRlID0gKHRpbWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHRpbWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUgKiAxMDAwKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChOdW1iZXIodGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShOdW1iZXIodGltZSkgKiAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGUodGltZSk7XG4gICAgfVxuICAgIHJldHVybiB0aW1lO1xufTtcbmV4cG9ydHMudG9EYXRlID0gdG9EYXRlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2lnbmF0dXJlVjQgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2hleF9lbmNvZGluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtaGV4LWVuY29kaW5nXCIpO1xuY29uc3QgdXRpbF9taWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1taWRkbGV3YXJlXCIpO1xuY29uc3QgdXRpbF91dGY4XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC11dGY4XCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBjcmVkZW50aWFsRGVyaXZhdGlvbl8xID0gcmVxdWlyZShcIi4vY3JlZGVudGlhbERlcml2YXRpb25cIik7XG5jb25zdCBnZXRDYW5vbmljYWxIZWFkZXJzXzEgPSByZXF1aXJlKFwiLi9nZXRDYW5vbmljYWxIZWFkZXJzXCIpO1xuY29uc3QgZ2V0Q2Fub25pY2FsUXVlcnlfMSA9IHJlcXVpcmUoXCIuL2dldENhbm9uaWNhbFF1ZXJ5XCIpO1xuY29uc3QgZ2V0UGF5bG9hZEhhc2hfMSA9IHJlcXVpcmUoXCIuL2dldFBheWxvYWRIYXNoXCIpO1xuY29uc3QgaGVhZGVyVXRpbF8xID0gcmVxdWlyZShcIi4vaGVhZGVyVXRpbFwiKTtcbmNvbnN0IG1vdmVIZWFkZXJzVG9RdWVyeV8xID0gcmVxdWlyZShcIi4vbW92ZUhlYWRlcnNUb1F1ZXJ5XCIpO1xuY29uc3QgcHJlcGFyZVJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3ByZXBhcmVSZXF1ZXN0XCIpO1xuY29uc3QgdXRpbERhdGVfMSA9IHJlcXVpcmUoXCIuL3V0aWxEYXRlXCIpO1xuY2xhc3MgU2lnbmF0dXJlVjQge1xuICAgIGNvbnN0cnVjdG9yKHsgYXBwbHlDaGVja3N1bSwgY3JlZGVudGlhbHMsIHJlZ2lvbiwgc2VydmljZSwgc2hhMjU2LCB1cmlFc2NhcGVQYXRoID0gdHJ1ZSwgfSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLnNoYTI1NiA9IHNoYTI1NjtcbiAgICAgICAgdGhpcy51cmlFc2NhcGVQYXRoID0gdXJpRXNjYXBlUGF0aDtcbiAgICAgICAgdGhpcy5hcHBseUNoZWNrc3VtID0gdHlwZW9mIGFwcGx5Q2hlY2tzdW0gPT09IFwiYm9vbGVhblwiID8gYXBwbHlDaGVja3N1bSA6IHRydWU7XG4gICAgICAgIHRoaXMucmVnaW9uUHJvdmlkZXIgPSAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKHJlZ2lvbik7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShjcmVkZW50aWFscyk7XG4gICAgfVxuICAgIGFzeW5jIHByZXNpZ24ob3JpZ2luYWxSZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBzaWduaW5nRGF0ZSA9IG5ldyBEYXRlKCksIGV4cGlyZXNJbiA9IDM2MDAsIHVuc2lnbmFibGVIZWFkZXJzLCB1bmhvaXN0YWJsZUhlYWRlcnMsIHNpZ25hYmxlSGVhZGVycywgc2lnbmluZ1JlZ2lvbiwgc2lnbmluZ1NlcnZpY2UsIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXNvbHZlZENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiAhPT0gbnVsbCAmJiBzaWduaW5nUmVnaW9uICE9PSB2b2lkIDAgPyBzaWduaW5nUmVnaW9uIDogKGF3YWl0IHRoaXMucmVnaW9uUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IHsgbG9uZ0RhdGUsIHNob3J0RGF0ZSB9ID0gZm9ybWF0RGF0ZShzaWduaW5nRGF0ZSk7XG4gICAgICAgIGlmIChleHBpcmVzSW4gPiBjb25zdGFudHNfMS5NQVhfUFJFU0lHTkVEX1RUTCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiU2lnbmF0dXJlIHZlcnNpb24gNCBwcmVzaWduZWQgVVJMc1wiICsgXCIgbXVzdCBoYXZlIGFuIGV4cGlyYXRpb24gZGF0ZSBsZXNzIHRoYW4gb25lIHdlZWsgaW5cIiArIFwiIHRoZSBmdXR1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NvcGUgPSAoMCwgY3JlZGVudGlhbERlcml2YXRpb25fMS5jcmVhdGVTY29wZSkoc2hvcnREYXRlLCByZWdpb24sIHNpZ25pbmdTZXJ2aWNlICE9PSBudWxsICYmIHNpZ25pbmdTZXJ2aWNlICE9PSB2b2lkIDAgPyBzaWduaW5nU2VydmljZSA6IHRoaXMuc2VydmljZSk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgbW92ZUhlYWRlcnNUb1F1ZXJ5XzEubW92ZUhlYWRlcnNUb1F1ZXJ5KSgoMCwgcHJlcGFyZVJlcXVlc3RfMS5wcmVwYXJlUmVxdWVzdCkob3JpZ2luYWxSZXF1ZXN0KSwgeyB1bmhvaXN0YWJsZUhlYWRlcnMgfSk7XG4gICAgICAgIGlmIChjcmVkZW50aWFscy5zZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgICAgIHJlcXVlc3QucXVlcnlbY29uc3RhbnRzXzEuVE9LRU5fUVVFUllfUEFSQU1dID0gY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QucXVlcnlbY29uc3RhbnRzXzEuQUxHT1JJVEhNX1FVRVJZX1BBUkFNXSA9IGNvbnN0YW50c18xLkFMR09SSVRITV9JREVOVElGSUVSO1xuICAgICAgICByZXF1ZXN0LnF1ZXJ5W2NvbnN0YW50c18xLkNSRURFTlRJQUxfUVVFUllfUEFSQU1dID0gYCR7Y3JlZGVudGlhbHMuYWNjZXNzS2V5SWR9LyR7c2NvcGV9YDtcbiAgICAgICAgcmVxdWVzdC5xdWVyeVtjb25zdGFudHNfMS5BTVpfREFURV9RVUVSWV9QQVJBTV0gPSBsb25nRGF0ZTtcbiAgICAgICAgcmVxdWVzdC5xdWVyeVtjb25zdGFudHNfMS5FWFBJUkVTX1FVRVJZX1BBUkFNXSA9IGV4cGlyZXNJbi50b1N0cmluZygxMCk7XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbEhlYWRlcnMgPSAoMCwgZ2V0Q2Fub25pY2FsSGVhZGVyc18xLmdldENhbm9uaWNhbEhlYWRlcnMpKHJlcXVlc3QsIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpO1xuICAgICAgICByZXF1ZXN0LnF1ZXJ5W2NvbnN0YW50c18xLlNJR05FRF9IRUFERVJTX1FVRVJZX1BBUkFNXSA9IGdldENhbm9uaWNhbEhlYWRlckxpc3QoY2Fub25pY2FsSGVhZGVycyk7XG4gICAgICAgIHJlcXVlc3QucXVlcnlbY29uc3RhbnRzXzEuU0lHTkFUVVJFX1FVRVJZX1BBUkFNXSA9IGF3YWl0IHRoaXMuZ2V0U2lnbmF0dXJlKGxvbmdEYXRlLCBzY29wZSwgdGhpcy5nZXRTaWduaW5nS2V5KGNyZWRlbnRpYWxzLCByZWdpb24sIHNob3J0RGF0ZSwgc2lnbmluZ1NlcnZpY2UpLCB0aGlzLmNyZWF0ZUNhbm9uaWNhbFJlcXVlc3QocmVxdWVzdCwgY2Fub25pY2FsSGVhZGVycywgYXdhaXQgKDAsIGdldFBheWxvYWRIYXNoXzEuZ2V0UGF5bG9hZEhhc2gpKG9yaWdpbmFsUmVxdWVzdCwgdGhpcy5zaGEyNTYpKSk7XG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbiAgICBhc3luYyBzaWduKHRvU2lnbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZW9mIHRvU2lnbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnblN0cmluZyh0b1NpZ24sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRvU2lnbi5oZWFkZXJzICYmIHRvU2lnbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduRXZlbnQodG9TaWduLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25SZXF1ZXN0KHRvU2lnbiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgc2lnbkV2ZW50KHsgaGVhZGVycywgcGF5bG9hZCB9LCB7IHNpZ25pbmdEYXRlID0gbmV3IERhdGUoKSwgcHJpb3JTaWduYXR1cmUsIHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0pIHtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiAhPT0gbnVsbCAmJiBzaWduaW5nUmVnaW9uICE9PSB2b2lkIDAgPyBzaWduaW5nUmVnaW9uIDogKGF3YWl0IHRoaXMucmVnaW9uUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IHsgc2hvcnREYXRlLCBsb25nRGF0ZSB9ID0gZm9ybWF0RGF0ZShzaWduaW5nRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gKDAsIGNyZWRlbnRpYWxEZXJpdmF0aW9uXzEuY3JlYXRlU2NvcGUpKHNob3J0RGF0ZSwgcmVnaW9uLCBzaWduaW5nU2VydmljZSAhPT0gbnVsbCAmJiBzaWduaW5nU2VydmljZSAhPT0gdm9pZCAwID8gc2lnbmluZ1NlcnZpY2UgOiB0aGlzLnNlcnZpY2UpO1xuICAgICAgICBjb25zdCBoYXNoZWRQYXlsb2FkID0gYXdhaXQgKDAsIGdldFBheWxvYWRIYXNoXzEuZ2V0UGF5bG9hZEhhc2gpKHsgaGVhZGVyczoge30sIGJvZHk6IHBheWxvYWQgfSwgdGhpcy5zaGEyNTYpO1xuICAgICAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuc2hhMjU2KCk7XG4gICAgICAgIGhhc2gudXBkYXRlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBoYXNoZWRIZWFkZXJzID0gKDAsIHV0aWxfaGV4X2VuY29kaW5nXzEudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICAgICAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgICAgICBjb25zdGFudHNfMS5FVkVOVF9BTEdPUklUSE1fSURFTlRJRklFUixcbiAgICAgICAgICAgIGxvbmdEYXRlLFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBwcmlvclNpZ25hdHVyZSxcbiAgICAgICAgICAgIGhhc2hlZEhlYWRlcnMsXG4gICAgICAgICAgICBoYXNoZWRQYXlsb2FkLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIHJldHVybiB0aGlzLnNpZ25TdHJpbmcoc3RyaW5nVG9TaWduLCB7IHNpZ25pbmdEYXRlLCBzaWduaW5nUmVnaW9uOiByZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0pO1xuICAgIH1cbiAgICBhc3luYyBzaWduU3RyaW5nKHN0cmluZ1RvU2lnbiwgeyBzaWduaW5nRGF0ZSA9IG5ldyBEYXRlKCksIHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXNvbHZlZENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiAhPT0gbnVsbCAmJiBzaWduaW5nUmVnaW9uICE9PSB2b2lkIDAgPyBzaWduaW5nUmVnaW9uIDogKGF3YWl0IHRoaXMucmVnaW9uUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IHsgc2hvcnREYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IG5ldyB0aGlzLnNoYTI1Nihhd2FpdCB0aGlzLmdldFNpZ25pbmdLZXkoY3JlZGVudGlhbHMsIHJlZ2lvbiwgc2hvcnREYXRlLCBzaWduaW5nU2VydmljZSkpO1xuICAgICAgICBoYXNoLnVwZGF0ZSgoMCwgdXRpbF91dGY4XzEudG9VaW50OEFycmF5KShzdHJpbmdUb1NpZ24pKTtcbiAgICAgICAgcmV0dXJuICgwLCB1dGlsX2hleF9lbmNvZGluZ18xLnRvSGV4KShhd2FpdCBoYXNoLmRpZ2VzdCgpKTtcbiAgICB9XG4gICAgYXN5bmMgc2lnblJlcXVlc3QocmVxdWVzdFRvU2lnbiwgeyBzaWduaW5nRGF0ZSA9IG5ldyBEYXRlKCksIHNpZ25hYmxlSGVhZGVycywgdW5zaWduYWJsZUhlYWRlcnMsIHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlLCB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNyZWRlbnRpYWxQcm92aWRlcigpO1xuICAgICAgICB0aGlzLnZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHNpZ25pbmdSZWdpb24gIT09IG51bGwgJiYgc2lnbmluZ1JlZ2lvbiAhPT0gdm9pZCAwID8gc2lnbmluZ1JlZ2lvbiA6IChhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCkpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKDAsIHByZXBhcmVSZXF1ZXN0XzEucHJlcGFyZVJlcXVlc3QpKHJlcXVlc3RUb1NpZ24pO1xuICAgICAgICBjb25zdCB7IGxvbmdEYXRlLCBzaG9ydERhdGUgfSA9IGZvcm1hdERhdGUoc2lnbmluZ0RhdGUpO1xuICAgICAgICBjb25zdCBzY29wZSA9ICgwLCBjcmVkZW50aWFsRGVyaXZhdGlvbl8xLmNyZWF0ZVNjb3BlKShzaG9ydERhdGUsIHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgIT09IG51bGwgJiYgc2lnbmluZ1NlcnZpY2UgIT09IHZvaWQgMCA/IHNpZ25pbmdTZXJ2aWNlIDogdGhpcy5zZXJ2aWNlKTtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW2NvbnN0YW50c18xLkFNWl9EQVRFX0hFQURFUl0gPSBsb25nRGF0ZTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbikge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzW2NvbnN0YW50c18xLlRPS0VOX0hFQURFUl0gPSBjcmVkZW50aWFscy5zZXNzaW9uVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bG9hZEhhc2ggPSBhd2FpdCAoMCwgZ2V0UGF5bG9hZEhhc2hfMS5nZXRQYXlsb2FkSGFzaCkocmVxdWVzdCwgdGhpcy5zaGEyNTYpO1xuICAgICAgICBpZiAoISgwLCBoZWFkZXJVdGlsXzEuaGFzSGVhZGVyKShjb25zdGFudHNfMS5TSEEyNTZfSEVBREVSLCByZXF1ZXN0LmhlYWRlcnMpICYmIHRoaXMuYXBwbHlDaGVja3N1bSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzW2NvbnN0YW50c18xLlNIQTI1Nl9IRUFERVJdID0gcGF5bG9hZEhhc2g7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2Fub25pY2FsSGVhZGVycyA9ICgwLCBnZXRDYW5vbmljYWxIZWFkZXJzXzEuZ2V0Q2Fub25pY2FsSGVhZGVycykocmVxdWVzdCwgdW5zaWduYWJsZUhlYWRlcnMsIHNpZ25hYmxlSGVhZGVycyk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHRoaXMuZ2V0U2lnbmF0dXJlKGxvbmdEYXRlLCBzY29wZSwgdGhpcy5nZXRTaWduaW5nS2V5KGNyZWRlbnRpYWxzLCByZWdpb24sIHNob3J0RGF0ZSwgc2lnbmluZ1NlcnZpY2UpLCB0aGlzLmNyZWF0ZUNhbm9uaWNhbFJlcXVlc3QocmVxdWVzdCwgY2Fub25pY2FsSGVhZGVycywgcGF5bG9hZEhhc2gpKTtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW2NvbnN0YW50c18xLkFVVEhfSEVBREVSXSA9XG4gICAgICAgICAgICBgJHtjb25zdGFudHNfMS5BTEdPUklUSE1fSURFTlRJRklFUn0gYCArXG4gICAgICAgICAgICAgICAgYENyZWRlbnRpYWw9JHtjcmVkZW50aWFscy5hY2Nlc3NLZXlJZH0vJHtzY29wZX0sIGAgK1xuICAgICAgICAgICAgICAgIGBTaWduZWRIZWFkZXJzPSR7Z2V0Q2Fub25pY2FsSGVhZGVyTGlzdChjYW5vbmljYWxIZWFkZXJzKX0sIGAgK1xuICAgICAgICAgICAgICAgIGBTaWduYXR1cmU9JHtzaWduYXR1cmV9YDtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIGNyZWF0ZUNhbm9uaWNhbFJlcXVlc3QocmVxdWVzdCwgY2Fub25pY2FsSGVhZGVycywgcGF5bG9hZEhhc2gpIHtcbiAgICAgICAgY29uc3Qgc29ydGVkSGVhZGVycyA9IE9iamVjdC5rZXlzKGNhbm9uaWNhbEhlYWRlcnMpLnNvcnQoKTtcbiAgICAgICAgcmV0dXJuIGAke3JlcXVlc3QubWV0aG9kfVxuJHt0aGlzLmdldENhbm9uaWNhbFBhdGgocmVxdWVzdCl9XG4keygwLCBnZXRDYW5vbmljYWxRdWVyeV8xLmdldENhbm9uaWNhbFF1ZXJ5KShyZXF1ZXN0KX1cbiR7c29ydGVkSGVhZGVycy5tYXAoKG5hbWUpID0+IGAke25hbWV9OiR7Y2Fub25pY2FsSGVhZGVyc1tuYW1lXX1gKS5qb2luKFwiXFxuXCIpfVxuXG4ke3NvcnRlZEhlYWRlcnMuam9pbihcIjtcIil9XG4ke3BheWxvYWRIYXNofWA7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVN0cmluZ1RvU2lnbihsb25nRGF0ZSwgY3JlZGVudGlhbFNjb3BlLCBjYW5vbmljYWxSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBuZXcgdGhpcy5zaGEyNTYoKTtcbiAgICAgICAgaGFzaC51cGRhdGUoKDAsIHV0aWxfdXRmOF8xLnRvVWludDhBcnJheSkoY2Fub25pY2FsUmVxdWVzdCkpO1xuICAgICAgICBjb25zdCBoYXNoZWRSZXF1ZXN0ID0gYXdhaXQgaGFzaC5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIGAke2NvbnN0YW50c18xLkFMR09SSVRITV9JREVOVElGSUVSfVxuJHtsb25nRGF0ZX1cbiR7Y3JlZGVudGlhbFNjb3BlfVxuJHsoMCwgdXRpbF9oZXhfZW5jb2RpbmdfMS50b0hleCkoaGFzaGVkUmVxdWVzdCl9YDtcbiAgICB9XG4gICAgZ2V0Q2Fub25pY2FsUGF0aCh7IHBhdGggfSkge1xuICAgICAgICBpZiAodGhpcy51cmlFc2NhcGVQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aFNlZ21lbnRzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGhTZWdtZW50IG9mIHBhdGguc3BsaXQoXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwYXRoU2VnbWVudCA9PT0gbnVsbCB8fCBwYXRoU2VnbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGF0aFNlZ21lbnQubGVuZ3RoKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGhTZWdtZW50ID09PSBcIi5cIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGhTZWdtZW50ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFBhdGhTZWdtZW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoU2VnbWVudHMucHVzaChwYXRoU2VnbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBgJHsocGF0aCA9PT0gbnVsbCB8fCBwYXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSA/IFwiL1wiIDogXCJcIn0ke25vcm1hbGl6ZWRQYXRoU2VnbWVudHMuam9pbihcIi9cIil9JHtub3JtYWxpemVkUGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgJiYgKHBhdGggPT09IG51bGwgfHwgcGF0aCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGF0aC5lbmRzV2l0aChcIi9cIikpID8gXCIvXCIgOiBcIlwifWA7XG4gICAgICAgICAgICBjb25zdCBkb3VibGVFbmNvZGVkID0gZW5jb2RlVVJJQ29tcG9uZW50KG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBkb3VibGVFbmNvZGVkLnJlcGxhY2UoLyUyRi9nLCBcIi9cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGFzeW5jIGdldFNpZ25hdHVyZShsb25nRGF0ZSwgY3JlZGVudGlhbFNjb3BlLCBrZXlQcm9taXNlLCBjYW5vbmljYWxSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGF3YWl0IHRoaXMuY3JlYXRlU3RyaW5nVG9TaWduKGxvbmdEYXRlLCBjcmVkZW50aWFsU2NvcGUsIGNhbm9uaWNhbFJlcXVlc3QpO1xuICAgICAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuc2hhMjU2KGF3YWl0IGtleVByb21pc2UpO1xuICAgICAgICBoYXNoLnVwZGF0ZSgoMCwgdXRpbF91dGY4XzEudG9VaW50OEFycmF5KShzdHJpbmdUb1NpZ24pKTtcbiAgICAgICAgcmV0dXJuICgwLCB1dGlsX2hleF9lbmNvZGluZ18xLnRvSGV4KShhd2FpdCBoYXNoLmRpZ2VzdCgpKTtcbiAgICB9XG4gICAgZ2V0U2lnbmluZ0tleShjcmVkZW50aWFscywgcmVnaW9uLCBzaG9ydERhdGUsIHNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuICgwLCBjcmVkZW50aWFsRGVyaXZhdGlvbl8xLmdldFNpZ25pbmdLZXkpKHRoaXMuc2hhMjU2LCBjcmVkZW50aWFscywgc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UgfHwgdGhpcy5zZXJ2aWNlKTtcbiAgICB9XG4gICAgdmFsaWRhdGVSZXNvbHZlZENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFscy5hY2Nlc3NLZXlJZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzb2x2ZWQgY3JlZGVudGlhbCBvYmplY3QgaXMgbm90IHZhbGlkXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5TaWduYXR1cmVWNCA9IFNpZ25hdHVyZVY0O1xuY29uc3QgZm9ybWF0RGF0ZSA9IChub3cpID0+IHtcbiAgICBjb25zdCBsb25nRGF0ZSA9ICgwLCB1dGlsRGF0ZV8xLmlzbzg2MDEpKG5vdykucmVwbGFjZSgvW1xcLTpdL2csIFwiXCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvbmdEYXRlLFxuICAgICAgICBzaG9ydERhdGU6IGxvbmdEYXRlLnNsaWNlKDAsIDgpLFxuICAgIH07XG59O1xuY29uc3QgZ2V0Q2Fub25pY2FsSGVhZGVyTGlzdCA9IChoZWFkZXJzKSA9PiBPYmplY3Qua2V5cyhoZWFkZXJzKS5zb3J0KCkuam9pbihcIjtcIik7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlUmVxdWVzdCA9IGV4cG9ydHMubW92ZUhlYWRlcnNUb1F1ZXJ5ID0gZXhwb3J0cy5nZXRQYXlsb2FkSGFzaCA9IGV4cG9ydHMuZ2V0Q2Fub25pY2FsUXVlcnkgPSBleHBvcnRzLmdldENhbm9uaWNhbEhlYWRlcnMgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU2lnbmF0dXJlVjRcIiksIGV4cG9ydHMpO1xudmFyIGdldENhbm9uaWNhbEhlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL2dldENhbm9uaWNhbEhlYWRlcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRDYW5vbmljYWxIZWFkZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRDYW5vbmljYWxIZWFkZXJzXzEuZ2V0Q2Fub25pY2FsSGVhZGVyczsgfSB9KTtcbnZhciBnZXRDYW5vbmljYWxRdWVyeV8xID0gcmVxdWlyZShcIi4vZ2V0Q2Fub25pY2FsUXVlcnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRDYW5vbmljYWxRdWVyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0Q2Fub25pY2FsUXVlcnlfMS5nZXRDYW5vbmljYWxRdWVyeTsgfSB9KTtcbnZhciBnZXRQYXlsb2FkSGFzaF8xID0gcmVxdWlyZShcIi4vZ2V0UGF5bG9hZEhhc2hcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQYXlsb2FkSGFzaFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0UGF5bG9hZEhhc2hfMS5nZXRQYXlsb2FkSGFzaDsgfSB9KTtcbnZhciBtb3ZlSGVhZGVyc1RvUXVlcnlfMSA9IHJlcXVpcmUoXCIuL21vdmVIZWFkZXJzVG9RdWVyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vdmVIZWFkZXJzVG9RdWVyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbW92ZUhlYWRlcnNUb1F1ZXJ5XzEubW92ZUhlYWRlcnNUb1F1ZXJ5OyB9IH0pO1xudmFyIHByZXBhcmVSZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9wcmVwYXJlUmVxdWVzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByZXBhcmVSZXF1ZXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcmVwYXJlUmVxdWVzdF8xLnByZXBhcmVSZXF1ZXN0OyB9IH0pO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY3JlZGVudGlhbERlcml2YXRpb25cIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVNpZ1Y0QXV0aENvbmZpZyA9IGV4cG9ydHMucmVzb2x2ZUF3c0F1dGhDb25maWcgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3Qgc2lnbmF0dXJlX3Y0XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2lnbmF0dXJlLXY0XCIpO1xuY29uc3QgdXRpbF9taWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1taWRkbGV3YXJlXCIpO1xuY29uc3QgQ1JFREVOVElBTF9FWFBJUkVfV0lORE9XID0gMzAwMDAwO1xuY29uc3QgcmVzb2x2ZUF3c0F1dGhDb25maWcgPSAoaW5wdXQpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkQ3JlZHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgICA/IG5vcm1hbGl6ZUNyZWRlbnRpYWxQcm92aWRlcihpbnB1dC5jcmVkZW50aWFscylcbiAgICAgICAgOiBpbnB1dC5jcmVkZW50aWFsRGVmYXVsdFByb3ZpZGVyKGlucHV0KTtcbiAgICBjb25zdCB7IHNpZ25pbmdFc2NhcGVQYXRoID0gdHJ1ZSwgc3lzdGVtQ2xvY2tPZmZzZXQgPSBpbnB1dC5zeXN0ZW1DbG9ja09mZnNldCB8fCAwLCBzaGEyNTYgfSA9IGlucHV0O1xuICAgIGxldCBzaWduZXI7XG4gICAgaWYgKGlucHV0LnNpZ25lcikge1xuICAgICAgICBzaWduZXIgPSAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnNpZ25lcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlucHV0LnJlZ2lvbkluZm9Qcm92aWRlcikge1xuICAgICAgICBzaWduZXIgPSAoKSA9PiAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnJlZ2lvbikoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlZ2lvbikgPT4gW1xuICAgICAgICAgICAgKGF3YWl0IGlucHV0LnJlZ2lvbkluZm9Qcm92aWRlcihyZWdpb24sIHtcbiAgICAgICAgICAgICAgICB1c2VGaXBzRW5kcG9pbnQ6IGF3YWl0IGlucHV0LnVzZUZpcHNFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBhd2FpdCBpbnB1dC51c2VEdWFsc3RhY2tFbmRwb2ludCgpLFxuICAgICAgICAgICAgfSkpIHx8IHt9LFxuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICBdKVxuICAgICAgICAgICAgLnRoZW4oKFtyZWdpb25JbmZvLCByZWdpb25dKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0gPSByZWdpb25JbmZvO1xuICAgICAgICAgICAgaW5wdXQuc2lnbmluZ1JlZ2lvbiA9IGlucHV0LnNpZ25pbmdSZWdpb24gfHwgc2lnbmluZ1JlZ2lvbiB8fCByZWdpb247XG4gICAgICAgICAgICBpbnB1dC5zaWduaW5nTmFtZSA9IGlucHV0LnNpZ25pbmdOYW1lIHx8IHNpZ25pbmdTZXJ2aWNlIHx8IGlucHV0LnNlcnZpY2VJZDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICAgICAgICAgIHJlZ2lvbjogaW5wdXQuc2lnbmluZ1JlZ2lvbixcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBpbnB1dC5zaWduaW5nTmFtZSxcbiAgICAgICAgICAgICAgICBzaGEyNTYsXG4gICAgICAgICAgICAgICAgdXJpRXNjYXBlUGF0aDogc2lnbmluZ0VzY2FwZVBhdGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgU2lnbmVyQ3RvciA9IGlucHV0LnNpZ25lckNvbnN0cnVjdG9yIHx8IHNpZ25hdHVyZV92NF8xLlNpZ25hdHVyZVY0O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaWduZXJDdG9yKHBhcmFtcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2lnbmVyID0gYXN5bmMgKGF1dGhTY2hlbWUpID0+IHtcbiAgICAgICAgICAgIGF1dGhTY2hlbWUgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaWd2NFwiLFxuICAgICAgICAgICAgICAgIHNpZ25pbmdOYW1lOiBpbnB1dC5zaWduaW5nTmFtZSB8fCBpbnB1dC5kZWZhdWx0U2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2lnbmluZ1JlZ2lvbjogYXdhaXQgKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC5yZWdpb24pKCksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgICAgICB9LCBhdXRoU2NoZW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25pbmdSZWdpb24gPSBhdXRoU2NoZW1lLnNpZ25pbmdSZWdpb247XG4gICAgICAgICAgICBjb25zdCBzaWduaW5nU2VydmljZSA9IGF1dGhTY2hlbWUuc2lnbmluZ05hbWU7XG4gICAgICAgICAgICBpbnB1dC5zaWduaW5nUmVnaW9uID0gaW5wdXQuc2lnbmluZ1JlZ2lvbiB8fCBzaWduaW5nUmVnaW9uO1xuICAgICAgICAgICAgaW5wdXQuc2lnbmluZ05hbWUgPSBpbnB1dC5zaWduaW5nTmFtZSB8fCBzaWduaW5nU2VydmljZSB8fCBpbnB1dC5zZXJ2aWNlSWQ7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgICAgICAgICByZWdpb246IGlucHV0LnNpZ25pbmdSZWdpb24sXG4gICAgICAgICAgICAgICAgc2VydmljZTogaW5wdXQuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2hhMjU2LFxuICAgICAgICAgICAgICAgIHVyaUVzY2FwZVBhdGg6IHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFNpZ25lckN0b3IgPSBpbnB1dC5zaWduZXJDb25zdHJ1Y3RvciB8fCBzaWduYXR1cmVfdjRfMS5TaWduYXR1cmVWNDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmVyQ3RvcihwYXJhbXMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgc3lzdGVtQ2xvY2tPZmZzZXQsXG4gICAgICAgIHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICBzaWduZXIsXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVBd3NBdXRoQ29uZmlnID0gcmVzb2x2ZUF3c0F1dGhDb25maWc7XG5jb25zdCByZXNvbHZlU2lnVjRBdXRoQ29uZmlnID0gKGlucHV0KSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENyZWRzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgPyBub3JtYWxpemVDcmVkZW50aWFsUHJvdmlkZXIoaW5wdXQuY3JlZGVudGlhbHMpXG4gICAgICAgIDogaW5wdXQuY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcihpbnB1dCk7XG4gICAgY29uc3QgeyBzaWduaW5nRXNjYXBlUGF0aCA9IHRydWUsIHN5c3RlbUNsb2NrT2Zmc2V0ID0gaW5wdXQuc3lzdGVtQ2xvY2tPZmZzZXQgfHwgMCwgc2hhMjU2IH0gPSBpbnB1dDtcbiAgICBsZXQgc2lnbmVyO1xuICAgIGlmIChpbnB1dC5zaWduZXIpIHtcbiAgICAgICAgc2lnbmVyID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC5zaWduZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2lnbmVyID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShuZXcgc2lnbmF0dXJlX3Y0XzEuU2lnbmF0dXJlVjQoe1xuICAgICAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgICAgIHJlZ2lvbjogaW5wdXQucmVnaW9uLFxuICAgICAgICAgICAgc2VydmljZTogaW5wdXQuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICBzaGEyNTYsXG4gICAgICAgICAgICB1cmlFc2NhcGVQYXRoOiBzaWduaW5nRXNjYXBlUGF0aCxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgc3lzdGVtQ2xvY2tPZmZzZXQsXG4gICAgICAgIHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICBzaWduZXIsXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVTaWdWNEF1dGhDb25maWcgPSByZXNvbHZlU2lnVjRBdXRoQ29uZmlnO1xuY29uc3Qgbm9ybWFsaXplQ3JlZGVudGlhbFByb3ZpZGVyID0gKGNyZWRlbnRpYWxzKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjcmVkZW50aWFscyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5tZW1vaXplKShjcmVkZW50aWFscywgKGNyZWRlbnRpYWxzKSA9PiBjcmVkZW50aWFscy5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLmV4cGlyYXRpb24uZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA8IENSRURFTlRJQUxfRVhQSVJFX1dJTkRPVywgKGNyZWRlbnRpYWxzKSA9PiBjcmVkZW50aWFscy5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShjcmVkZW50aWFscyk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2tld0NvcnJlY3RlZERhdGUgPSB2b2lkIDA7XG5jb25zdCBnZXRTa2V3Q29ycmVjdGVkRGF0ZSA9IChzeXN0ZW1DbG9ja09mZnNldCkgPT4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHN5c3RlbUNsb2NrT2Zmc2V0KTtcbmV4cG9ydHMuZ2V0U2tld0NvcnJlY3RlZERhdGUgPSBnZXRTa2V3Q29ycmVjdGVkRGF0ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQ2xvY2tTa2V3ZWQgPSB2b2lkIDA7XG5jb25zdCBnZXRTa2V3Q29ycmVjdGVkRGF0ZV8xID0gcmVxdWlyZShcIi4vZ2V0U2tld0NvcnJlY3RlZERhdGVcIik7XG5jb25zdCBpc0Nsb2NrU2tld2VkID0gKGNsb2NrVGltZSwgc3lzdGVtQ2xvY2tPZmZzZXQpID0+IE1hdGguYWJzKCgwLCBnZXRTa2V3Q29ycmVjdGVkRGF0ZV8xLmdldFNrZXdDb3JyZWN0ZWREYXRlKShzeXN0ZW1DbG9ja09mZnNldCkuZ2V0VGltZSgpIC0gY2xvY2tUaW1lKSA+PSAzMDAwMDA7XG5leHBvcnRzLmlzQ2xvY2tTa2V3ZWQgPSBpc0Nsb2NrU2tld2VkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0ID0gdm9pZCAwO1xuY29uc3QgaXNDbG9ja1NrZXdlZF8xID0gcmVxdWlyZShcIi4vaXNDbG9ja1NrZXdlZFwiKTtcbmNvbnN0IGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldCA9IChjbG9ja1RpbWUsIGN1cnJlbnRTeXN0ZW1DbG9ja09mZnNldCkgPT4ge1xuICAgIGNvbnN0IGNsb2NrVGltZUluTXMgPSBEYXRlLnBhcnNlKGNsb2NrVGltZSk7XG4gICAgaWYgKCgwLCBpc0Nsb2NrU2tld2VkXzEuaXNDbG9ja1NrZXdlZCkoY2xvY2tUaW1lSW5NcywgY3VycmVudFN5c3RlbUNsb2NrT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gY2xvY2tUaW1lSW5NcyAtIERhdGUubm93KCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3lzdGVtQ2xvY2tPZmZzZXQ7XG59O1xuZXhwb3J0cy5nZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQgPSBnZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaWdWNEF1dGhQbHVnaW4gPSBleHBvcnRzLmdldEF3c0F1dGhQbHVnaW4gPSBleHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMuYXdzQXV0aE1pZGRsZXdhcmUgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IGdldFNrZXdDb3JyZWN0ZWREYXRlXzEgPSByZXF1aXJlKFwiLi91dGlscy9nZXRTa2V3Q29ycmVjdGVkRGF0ZVwiKTtcbmNvbnN0IGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldF8xID0gcmVxdWlyZShcIi4vdXRpbHMvZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0XCIpO1xuY29uc3QgYXdzQXV0aE1pZGRsZXdhcmUgPSAob3B0aW9ucykgPT4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UoYXJncy5yZXF1ZXN0KSlcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgY29uc3QgYXV0aFNjaGVtZSA9IChfYyA9IChfYiA9IChfYSA9IGNvbnRleHQuZW5kcG9pbnRWMikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnByb3BlcnRpZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hdXRoU2NoZW1lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzBdO1xuICAgIGNvbnN0IG11bHRpUmVnaW9uT3ZlcnJpZGUgPSAoYXV0aFNjaGVtZSA9PT0gbnVsbCB8fCBhdXRoU2NoZW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhdXRoU2NoZW1lLm5hbWUpID09PSBcInNpZ3Y0YVwiID8gKF9kID0gYXV0aFNjaGVtZSA9PT0gbnVsbCB8fCBhdXRoU2NoZW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhdXRoU2NoZW1lLnNpZ25pbmdSZWdpb25TZXQpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzaWduZXIgPSBhd2FpdCBvcHRpb25zLnNpZ25lcihhdXRoU2NoZW1lKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdDogYXdhaXQgc2lnbmVyLnNpZ24oYXJncy5yZXF1ZXN0LCB7XG4gICAgICAgICAgICBzaWduaW5nRGF0ZTogKDAsIGdldFNrZXdDb3JyZWN0ZWREYXRlXzEuZ2V0U2tld0NvcnJlY3RlZERhdGUpKG9wdGlvbnMuc3lzdGVtQ2xvY2tPZmZzZXQpLFxuICAgICAgICAgICAgc2lnbmluZ1JlZ2lvbjogbXVsdGlSZWdpb25PdmVycmlkZSB8fCBjb250ZXh0W1wic2lnbmluZ19yZWdpb25cIl0sXG4gICAgICAgICAgICBzaWduaW5nU2VydmljZTogY29udGV4dFtcInNpZ25pbmdfc2VydmljZVwiXSxcbiAgICAgICAgfSksXG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2VydmVyVGltZSA9IChfYSA9IGVycm9yLlNlcnZlclRpbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGdldERhdGVIZWFkZXIoZXJyb3IuJHJlc3BvbnNlKTtcbiAgICAgICAgaWYgKHNlcnZlclRpbWUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc3lzdGVtQ2xvY2tPZmZzZXQgPSAoMCwgZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0XzEuZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0KShzZXJ2ZXJUaW1lLCBvcHRpb25zLnN5c3RlbUNsb2NrT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgICBjb25zdCBkYXRlSGVhZGVyID0gZ2V0RGF0ZUhlYWRlcihvdXRwdXQucmVzcG9uc2UpO1xuICAgIGlmIChkYXRlSGVhZGVyKSB7XG4gICAgICAgIG9wdGlvbnMuc3lzdGVtQ2xvY2tPZmZzZXQgPSAoMCwgZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0XzEuZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0KShkYXRlSGVhZGVyLCBvcHRpb25zLnN5c3RlbUNsb2NrT2Zmc2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn07XG5leHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlID0gYXdzQXV0aE1pZGRsZXdhcmU7XG5jb25zdCBnZXREYXRlSGVhZGVyID0gKHJlc3BvbnNlKSA9PiB7IHZhciBfYSwgX2IsIF9jOyByZXR1cm4gcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXNwb25zZS5pc0luc3RhbmNlKHJlc3BvbnNlKSA/IChfYiA9IChfYSA9IHJlc3BvbnNlLmhlYWRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kYXRlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoX2MgPSByZXNwb25zZS5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuRGF0ZSA6IHVuZGVmaW5lZDsgfTtcbmV4cG9ydHMuYXdzQXV0aE1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwiYXdzQXV0aE1pZGRsZXdhcmVcIixcbiAgICB0YWdzOiBbXCJTSUdOQVRVUkVcIiwgXCJBV1NBVVRIXCJdLFxuICAgIHJlbGF0aW9uOiBcImFmdGVyXCIsXG4gICAgdG9NaWRkbGV3YXJlOiBcInJldHJ5TWlkZGxld2FyZVwiLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmNvbnN0IGdldEF3c0F1dGhQbHVnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGRSZWxhdGl2ZVRvKCgwLCBleHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlKShvcHRpb25zKSwgZXhwb3J0cy5hd3NBdXRoTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0QXdzQXV0aFBsdWdpbiA9IGdldEF3c0F1dGhQbHVnaW47XG5leHBvcnRzLmdldFNpZ1Y0QXV0aFBsdWdpbiA9IGV4cG9ydHMuZ2V0QXdzQXV0aFBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29uZmlndXJhdGlvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlVXNlckFnZW50Q29uZmlnID0gdm9pZCAwO1xuZnVuY3Rpb24gcmVzb2x2ZVVzZXJBZ2VudENvbmZpZyhpbnB1dCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBjdXN0b21Vc2VyQWdlbnQ6IHR5cGVvZiBpbnB1dC5jdXN0b21Vc2VyQWdlbnQgPT09IFwic3RyaW5nXCIgPyBbW2lucHV0LmN1c3RvbVVzZXJBZ2VudF1dIDogaW5wdXQuY3VzdG9tVXNlckFnZW50LFxuICAgIH07XG59XG5leHBvcnRzLnJlc29sdmVVc2VyQWdlbnRDb25maWcgPSByZXNvbHZlVXNlckFnZW50Q29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50UHJlZml4ID0gZXhwb3J0cy51c2VEZWZhdWx0UGFydGl0aW9uSW5mbyA9IGV4cG9ydHMuc2V0UGFydGl0aW9uSW5mbyA9IGV4cG9ydHMucGFydGl0aW9uID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IHBhcnRpdGlvbnNfanNvbl8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vcGFydGl0aW9ucy5qc29uXCIpKTtcbmxldCBzZWxlY3RlZFBhcnRpdGlvbnNJbmZvID0gcGFydGl0aW9uc19qc29uXzEuZGVmYXVsdDtcbmxldCBzZWxlY3RlZFVzZXJBZ2VudFByZWZpeCA9IFwiXCI7XG5jb25zdCBwYXJ0aXRpb24gPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCB7IHBhcnRpdGlvbnMgfSA9IHNlbGVjdGVkUGFydGl0aW9uc0luZm87XG4gICAgZm9yIChjb25zdCBwYXJ0aXRpb24gb2YgcGFydGl0aW9ucykge1xuICAgICAgICBjb25zdCB7IHJlZ2lvbnMsIG91dHB1dHMgfSA9IHBhcnRpdGlvbjtcbiAgICAgICAgZm9yIChjb25zdCBbcmVnaW9uLCByZWdpb25EYXRhXSBvZiBPYmplY3QuZW50cmllcyhyZWdpb25zKSkge1xuICAgICAgICAgICAgaWYgKHJlZ2lvbiA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5vdXRwdXRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5yZWdpb25EYXRhLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJ0aXRpb24gb2YgcGFydGl0aW9ucykge1xuICAgICAgICBjb25zdCB7IHJlZ2lvblJlZ2V4LCBvdXRwdXRzIH0gPSBwYXJ0aXRpb247XG4gICAgICAgIGlmIChuZXcgUmVnRXhwKHJlZ2lvblJlZ2V4KS50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5vdXRwdXRzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBERUZBVUxUX1BBUlRJVElPTiA9IHBhcnRpdGlvbnMuZmluZCgocGFydGl0aW9uKSA9PiBwYXJ0aXRpb24uaWQgPT09IFwiYXdzXCIpO1xuICAgIGlmICghREVGQVVMVF9QQVJUSVRJT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgcmVnaW9uIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcnRpdGlvbiBhcnJheSBvciByZWdleCxcIiArXG4gICAgICAgICAgICBcIiBhbmQgZGVmYXVsdCBwYXJ0aXRpb24gd2l0aCBpZCAnYXdzJyBkb2Vzbid0IGV4aXN0LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uREVGQVVMVF9QQVJUSVRJT04ub3V0cHV0cyxcbiAgICB9O1xufTtcbmV4cG9ydHMucGFydGl0aW9uID0gcGFydGl0aW9uO1xuY29uc3Qgc2V0UGFydGl0aW9uSW5mbyA9IChwYXJ0aXRpb25zSW5mbywgdXNlckFnZW50UHJlZml4ID0gXCJcIikgPT4ge1xuICAgIHNlbGVjdGVkUGFydGl0aW9uc0luZm8gPSBwYXJ0aXRpb25zSW5mbztcbiAgICBzZWxlY3RlZFVzZXJBZ2VudFByZWZpeCA9IHVzZXJBZ2VudFByZWZpeDtcbn07XG5leHBvcnRzLnNldFBhcnRpdGlvbkluZm8gPSBzZXRQYXJ0aXRpb25JbmZvO1xuY29uc3QgdXNlRGVmYXVsdFBhcnRpdGlvbkluZm8gPSAoKSA9PiB7XG4gICAgKDAsIGV4cG9ydHMuc2V0UGFydGl0aW9uSW5mbykocGFydGl0aW9uc19qc29uXzEuZGVmYXVsdCwgXCJcIik7XG59O1xuZXhwb3J0cy51c2VEZWZhdWx0UGFydGl0aW9uSW5mbyA9IHVzZURlZmF1bHRQYXJ0aXRpb25JbmZvO1xuY29uc3QgZ2V0VXNlckFnZW50UHJlZml4ID0gKCkgPT4gc2VsZWN0ZWRVc2VyQWdlbnRQcmVmaXg7XG5leHBvcnRzLmdldFVzZXJBZ2VudFByZWZpeCA9IGdldFVzZXJBZ2VudFByZWZpeDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlYnVnSWQgPSB2b2lkIDA7XG5leHBvcnRzLmRlYnVnSWQgPSBcImVuZHBvaW50c1wiO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9EZWJ1Z1N0cmluZyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRvRGVidWdTdHJpbmcoaW5wdXQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoXCJyZWZcIiBpbiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gYCQke3RvRGVidWdTdHJpbmcoaW5wdXQucmVmKX1gO1xuICAgIH1cbiAgICBpZiAoXCJmblwiIGluIGlucHV0KSB7XG4gICAgICAgIHJldHVybiBgJHtpbnB1dC5mbn0oJHsoaW5wdXQuYXJndiB8fCBbXSkubWFwKHRvRGVidWdTdHJpbmcpLmpvaW4oXCIsIFwiKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKTtcbn1cbmV4cG9ydHMudG9EZWJ1Z1N0cmluZyA9IHRvRGVidWdTdHJpbmc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2RlYnVnSWRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdG9EZWJ1Z1N0cmluZ1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbmRwb2ludEVycm9yID0gdm9pZCAwO1xuY2xhc3MgRW5kcG9pbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVuZHBvaW50RXJyb3JcIjtcbiAgICB9XG59XG5leHBvcnRzLkVuZHBvaW50RXJyb3IgPSBFbmRwb2ludEVycm9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0VuZHBvaW50RXJyb3JcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRW5kcG9pbnRSdWxlT2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Vycm9yUnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9SdWxlU2V0T2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1RyZWVSdWxlT2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NoYXJlZFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0lwQWRkcmVzcyA9IHZvaWQgMDtcbmNvbnN0IElQX1Y0X1JFR0VYID0gbmV3IFJlZ0V4cChgXig/OjI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV1cXFxcZHxcXFxcZCkoPzpcXFxcLig/OjI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV1cXFxcZHxcXFxcZCkpezN9JGApO1xuY29uc3QgaXNJcEFkZHJlc3MgPSAodmFsdWUpID0+IElQX1Y0X1JFR0VYLnRlc3QodmFsdWUpIHx8ICh2YWx1ZS5zdGFydHNXaXRoKFwiW1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIl1cIikpO1xuZXhwb3J0cy5pc0lwQWRkcmVzcyA9IGlzSXBBZGRyZXNzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNWYWxpZEhvc3RMYWJlbCA9IHZvaWQgMDtcbmNvbnN0IFZBTElEX0hPU1RfTEFCRUxfUkVHRVggPSBuZXcgUmVnRXhwKGBeKD8hLiotJCkoPyEtKVthLXpBLVowLTktXXsxLDYzfSRgKTtcbmNvbnN0IGlzVmFsaWRIb3N0TGFiZWwgPSAodmFsdWUsIGFsbG93U3ViRG9tYWlucyA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKCFhbGxvd1N1YkRvbWFpbnMpIHtcbiAgICAgICAgcmV0dXJuIFZBTElEX0hPU1RfTEFCRUxfUkVHRVgudGVzdCh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVscyA9IHZhbHVlLnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgICBpZiAoISgwLCBleHBvcnRzLmlzVmFsaWRIb3N0TGFiZWwpKGxhYmVsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydHMuaXNWYWxpZEhvc3RMYWJlbCA9IGlzVmFsaWRIb3N0TGFiZWw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0ID0gdm9pZCAwO1xuY29uc3QgaXNJcEFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuLi9pc0lwQWRkcmVzc1wiKTtcbmNvbnN0IGlzVmFsaWRIb3N0TGFiZWxfMSA9IHJlcXVpcmUoXCIuLi9pc1ZhbGlkSG9zdExhYmVsXCIpO1xuY29uc3QgaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldCA9ICh2YWx1ZSwgYWxsb3dTdWJEb21haW5zID0gZmFsc2UpID0+IHtcbiAgICBpZiAoYWxsb3dTdWJEb21haW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgdmFsdWUuc3BsaXQoXCIuXCIpKSB7XG4gICAgICAgICAgICBpZiAoISgwLCBleHBvcnRzLmlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQpKGxhYmVsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCEoMCwgaXNWYWxpZEhvc3RMYWJlbF8xLmlzVmFsaWRIb3N0TGFiZWwpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5sZW5ndGggPCAzIHx8IHZhbHVlLmxlbmd0aCA+IDYzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCgwLCBpc0lwQWRkcmVzc18xLmlzSXBBZGRyZXNzKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnRzLmlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQgPSBpc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VBcm4gPSB2b2lkIDA7XG5jb25zdCBwYXJzZUFybiA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPCA2KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBbYXJuLCBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudElkLCAuLi5yZXNvdXJjZUlkXSA9IHNlZ21lbnRzO1xuICAgIGlmIChhcm4gIT09IFwiYXJuXCIgfHwgcGFydGl0aW9uID09PSBcIlwiIHx8IHNlcnZpY2UgPT09IFwiXCIgfHwgcmVzb3VyY2VJZFswXSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGFydGl0aW9uLFxuICAgICAgICBzZXJ2aWNlLFxuICAgICAgICByZWdpb24sXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2VJZFswXS5pbmNsdWRlcyhcIi9cIikgPyByZXNvdXJjZUlkWzBdLnNwbGl0KFwiL1wiKSA6IHJlc291cmNlSWQsXG4gICAgfTtcbn07XG5leHBvcnRzLnBhcnNlQXJuID0gcGFyc2VBcm47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFyc2VBcm5cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFydGl0aW9uXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJvb2xlYW5FcXVhbHMgPSB2b2lkIDA7XG5jb25zdCBib29sZWFuRXF1YWxzID0gKHZhbHVlMSwgdmFsdWUyKSA9PiB2YWx1ZTEgPT09IHZhbHVlMjtcbmV4cG9ydHMuYm9vbGVhbkVxdWFscyA9IGJvb2xlYW5FcXVhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBdHRyUGF0aExpc3QgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZ2V0QXR0clBhdGhMaXN0ID0gKHBhdGgpID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhdGhMaXN0ID0gW107XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHNxdWFyZUJyYWNrZXRJbmRleCA9IHBhcnQuaW5kZXhPZihcIltcIik7XG4gICAgICAgIGlmIChzcXVhcmVCcmFja2V0SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAocGFydC5pbmRleE9mKFwiXVwiKSAhPT0gcGFydC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgUGF0aDogJyR7cGF0aH0nIGRvZXMgbm90IGVuZCB3aXRoICddJ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXJyYXlJbmRleCA9IHBhcnQuc2xpY2Uoc3F1YXJlQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihwYXJzZUludChhcnJheUluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBJbnZhbGlkIGFycmF5IGluZGV4OiAnJHthcnJheUluZGV4fScgaW4gcGF0aDogJyR7cGF0aH0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3F1YXJlQnJhY2tldEluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcGF0aExpc3QucHVzaChwYXJ0LnNsaWNlKDAsIHNxdWFyZUJyYWNrZXRJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aExpc3QucHVzaChhcnJheUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhMaXN0LnB1c2gocGFydCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhdGhMaXN0O1xufTtcbmV4cG9ydHMuZ2V0QXR0clBhdGhMaXN0ID0gZ2V0QXR0clBhdGhMaXN0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXR0ciA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBnZXRBdHRyUGF0aExpc3RfMSA9IHJlcXVpcmUoXCIuL2dldEF0dHJQYXRoTGlzdFwiKTtcbmNvbnN0IGdldEF0dHIgPSAodmFsdWUsIHBhdGgpID0+ICgwLCBnZXRBdHRyUGF0aExpc3RfMS5nZXRBdHRyUGF0aExpc3QpKHBhdGgpLnJlZHVjZSgoYWNjLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYEluZGV4ICcke2luZGV4fScgaW4gJyR7cGF0aH0nIG5vdCBmb3VuZCBpbiAnJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9J2ApO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFjYykpIHtcbiAgICAgICAgcmV0dXJuIGFjY1twYXJzZUludChpbmRleCldO1xuICAgIH1cbiAgICByZXR1cm4gYWNjW2luZGV4XTtcbn0sIHZhbHVlKTtcbmV4cG9ydHMuZ2V0QXR0ciA9IGdldEF0dHI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1NldCA9IHZvaWQgMDtcbmNvbnN0IGlzU2V0ID0gKHZhbHVlKSA9PiB2YWx1ZSAhPSBudWxsO1xuZXhwb3J0cy5pc1NldCA9IGlzU2V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm90ID0gdm9pZCAwO1xuY29uc3Qgbm90ID0gKHZhbHVlKSA9PiAhdmFsdWU7XG5leHBvcnRzLm5vdCA9IG5vdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uID0gdm9pZCAwO1xudmFyIEh0dHBBdXRoTG9jYXRpb247XG4oZnVuY3Rpb24gKEh0dHBBdXRoTG9jYXRpb24pIHtcbiAgICBIdHRwQXV0aExvY2F0aW9uW1wiSEVBREVSXCJdID0gXCJoZWFkZXJcIjtcbiAgICBIdHRwQXV0aExvY2F0aW9uW1wiUVVFUllcIl0gPSBcInF1ZXJ5XCI7XG59KShIdHRwQXV0aExvY2F0aW9uID0gZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uIHx8IChleHBvcnRzLkh0dHBBdXRoTG9jYXRpb24gPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25maWdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWFuYWdlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wb29sXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSG9zdEFkZHJlc3NUeXBlID0gdm9pZCAwO1xudmFyIEhvc3RBZGRyZXNzVHlwZTtcbihmdW5jdGlvbiAoSG9zdEFkZHJlc3NUeXBlKSB7XG4gICAgSG9zdEFkZHJlc3NUeXBlW1wiQUFBQVwiXSA9IFwiQUFBQVwiO1xuICAgIEhvc3RBZGRyZXNzVHlwZVtcIkFcIl0gPSBcIkFcIjtcbn0pKEhvc3RBZGRyZXNzVHlwZSA9IGV4cG9ydHMuSG9zdEFkZHJlc3NUeXBlIHx8IChleHBvcnRzLkhvc3RBZGRyZXNzVHlwZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSA9IHZvaWQgMDtcbnZhciBFbmRwb2ludFVSTFNjaGVtZTtcbihmdW5jdGlvbiAoRW5kcG9pbnRVUkxTY2hlbWUpIHtcbiAgICBFbmRwb2ludFVSTFNjaGVtZVtcIkhUVFBcIl0gPSBcImh0dHBcIjtcbiAgICBFbmRwb2ludFVSTFNjaGVtZVtcIkhUVFBTXCJdID0gXCJodHRwc1wiO1xufSkoRW5kcG9pbnRVUkxTY2hlbWUgPSBleHBvcnRzLkVuZHBvaW50VVJMU2NoZW1lIHx8IChleHBvcnRzLkVuZHBvaW50VVJMU2NoZW1lID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Fub255bW91c0lkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0F3c0NyZWRlbnRpYWxJZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9JZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Mb2dpbklkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1Rva2VuSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVxdWVzdEhhbmRsZXJQcm90b2NvbCA9IHZvaWQgMDtcbnZhciBSZXF1ZXN0SGFuZGxlclByb3RvY29sO1xuKGZ1bmN0aW9uIChSZXF1ZXN0SGFuZGxlclByb3RvY29sKSB7XG4gICAgUmVxdWVzdEhhbmRsZXJQcm90b2NvbFtcIkhUVFBfMF85XCJdID0gXCJodHRwLzAuOVwiO1xuICAgIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xbXCJIVFRQXzFfMFwiXSA9IFwiaHR0cC8xLjBcIjtcbiAgICBSZXF1ZXN0SGFuZGxlclByb3RvY29sW1wiVERTXzhfMFwiXSA9IFwidGRzLzguMFwiO1xufSkoUmVxdWVzdEhhbmRsZXJQcm90b2NvbCA9IGV4cG9ydHMuUmVxdWVzdEhhbmRsZXJQcm90b2NvbCB8fCAoZXhwb3J0cy5SZXF1ZXN0SGFuZGxlclByb3RvY29sID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hYm9ydFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hdXRoXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NoZWNrc3VtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Nvbm5lY3Rpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY3JlZGVudGlhbHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY3J5cHRvXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Ruc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbmRwb2ludFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ldmVudFN0cmVhbVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9odHRwXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xvZ2dlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9taWRkbGV3YXJlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhZ2luYXRpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcHJvZmlsZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXF1ZXN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc3BvbnNlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3JldHJ5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NlcmRlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NoYXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaWduYXR1cmVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyZWFtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Rva2VuXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyYW5zZmVyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vd2FpdGVyXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlVVJMID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay90eXBlc1wiKTtcbmNvbnN0IGlzSXBBZGRyZXNzXzEgPSByZXF1aXJlKFwiLi9pc0lwQWRkcmVzc1wiKTtcbmNvbnN0IERFRkFVTFRfUE9SVFMgPSB7XG4gICAgW3R5cGVzXzEuRW5kcG9pbnRVUkxTY2hlbWUuSFRUUF06IDgwLFxuICAgIFt0eXBlc18xLkVuZHBvaW50VVJMU2NoZW1lLkhUVFBTXTogNDQzLFxufTtcbmNvbnN0IHBhcnNlVVJMID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3Qgd2hhdHdnVVJMID0gKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJob3N0bmFtZVwiIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBob3N0bmFtZSwgcG9ydCwgcHJvdG9jb2wgPSBcIlwiLCBwYXRoID0gXCJcIiwgcXVlcnkgPSB7fSB9ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gYDoke3BvcnR9YCA6IFwiXCJ9JHtwYXRofWApO1xuICAgICAgICAgICAgICAgIHVybC5zZWFyY2ggPSBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfT0ke3Z9YClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVSTCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0pKCk7XG4gICAgaWYgKCF3aGF0d2dVUkwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5hYmxlIHRvIHBhcnNlICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBhcyBhIHdoYXR3ZyBVUkwuYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB1cmxTdHJpbmcgPSB3aGF0d2dVUkwuaHJlZjtcbiAgICBjb25zdCB7IGhvc3QsIGhvc3RuYW1lLCBwYXRobmFtZSwgcHJvdG9jb2wsIHNlYXJjaCB9ID0gd2hhdHdnVVJMO1xuICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNjaGVtZSA9IHByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXModHlwZXNfMS5FbmRwb2ludFVSTFNjaGVtZSkuaW5jbHVkZXMoc2NoZW1lKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXNJcCA9ICgwLCBpc0lwQWRkcmVzc18xLmlzSXBBZGRyZXNzKShob3N0bmFtZSk7XG4gICAgY29uc3QgaW5wdXRDb250YWluc0RlZmF1bHRQb3J0ID0gdXJsU3RyaW5nLmluY2x1ZGVzKGAke2hvc3R9OiR7REVGQVVMVF9QT1JUU1tzY2hlbWVdfWApIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuaW5jbHVkZXMoYCR7aG9zdH06JHtERUZBVUxUX1BPUlRTW3NjaGVtZV19YCkpO1xuICAgIGNvbnN0IGF1dGhvcml0eSA9IGAke2hvc3R9JHtpbnB1dENvbnRhaW5zRGVmYXVsdFBvcnQgPyBgOiR7REVGQVVMVF9QT1JUU1tzY2hlbWVdfWAgOiBgYH1gO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtZSxcbiAgICAgICAgYXV0aG9yaXR5LFxuICAgICAgICBwYXRoOiBwYXRobmFtZSxcbiAgICAgICAgbm9ybWFsaXplZFBhdGg6IHBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSA/IHBhdGhuYW1lIDogYCR7cGF0aG5hbWV9L2AsXG4gICAgICAgIGlzSXAsXG4gICAgfTtcbn07XG5leHBvcnRzLnBhcnNlVVJMID0gcGFyc2VVUkw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdHJpbmdFcXVhbHMgPSB2b2lkIDA7XG5jb25zdCBzdHJpbmdFcXVhbHMgPSAodmFsdWUxLCB2YWx1ZTIpID0+IHZhbHVlMSA9PT0gdmFsdWUyO1xuZXhwb3J0cy5zdHJpbmdFcXVhbHMgPSBzdHJpbmdFcXVhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdWJzdHJpbmcgPSB2b2lkIDA7XG5jb25zdCBzdWJzdHJpbmcgPSAoaW5wdXQsIHN0YXJ0LCBzdG9wLCByZXZlcnNlKSA9PiB7XG4gICAgaWYgKHN0YXJ0ID49IHN0b3AgfHwgaW5wdXQubGVuZ3RoIDwgc3RvcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCFyZXZlcnNlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoc3RhcnQsIHN0b3ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKGlucHV0Lmxlbmd0aCAtIHN0b3AsIGlucHV0Lmxlbmd0aCAtIHN0YXJ0KTtcbn07XG5leHBvcnRzLnN1YnN0cmluZyA9IHN1YnN0cmluZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVyaUVuY29kZSA9IHZvaWQgMDtcbmNvbnN0IHVyaUVuY29kZSA9ICh2YWx1ZSkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKS5yZXBsYWNlKC9bISonKCldL2csIChjKSA9PiBgJSR7Yy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWApO1xuZXhwb3J0cy51cmlFbmNvZGUgPSB1cmlFbmNvZGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hd3MgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuZXhwb3J0cy5hd3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9hd3NcIikpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYm9vbGVhbkVxdWFsc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nZXRBdHRyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lzU2V0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lzVmFsaWRIb3N0TGFiZWxcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbm90XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhcnNlVVJMXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmluZ0VxdWFsc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdWJzdHJpbmdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXJpRW5jb2RlXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlVGVtcGxhdGUgPSB2b2lkIDA7XG5jb25zdCBsaWJfMSA9IHJlcXVpcmUoXCIuLi9saWJcIik7XG5jb25zdCBldmFsdWF0ZVRlbXBsYXRlID0gKHRlbXBsYXRlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXZhbHVhdGVkVGVtcGxhdGVBcnIgPSBbXTtcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbnRleHQgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMuZW5kcG9pbnRQYXJhbXMsXG4gICAgICAgIC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLFxuICAgIH07XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IHRlbXBsYXRlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBvcGVuaW5nQnJhY2VJbmRleCA9IHRlbXBsYXRlLmluZGV4T2YoXCJ7XCIsIGN1cnJlbnRJbmRleCk7XG4gICAgICAgIGlmIChvcGVuaW5nQnJhY2VJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGUuc2xpY2UoY3VycmVudEluZGV4KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKHRlbXBsYXRlLnNsaWNlKGN1cnJlbnRJbmRleCwgb3BlbmluZ0JyYWNlSW5kZXgpKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0JyYWNlSW5kZXggPSB0ZW1wbGF0ZS5pbmRleE9mKFwifVwiLCBvcGVuaW5nQnJhY2VJbmRleCk7XG4gICAgICAgIGlmIChjbG9zaW5nQnJhY2VJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGUuc2xpY2Uob3BlbmluZ0JyYWNlSW5kZXgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW1wbGF0ZVtvcGVuaW5nQnJhY2VJbmRleCArIDFdID09PSBcIntcIiAmJiB0ZW1wbGF0ZVtjbG9zaW5nQnJhY2VJbmRleCArIDFdID09PSBcIn1cIikge1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZS5zbGljZShvcGVuaW5nQnJhY2VJbmRleCArIDEsIGNsb3NpbmdCcmFjZUluZGV4KSk7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXggPSBjbG9zaW5nQnJhY2VJbmRleCArIDI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHRlbXBsYXRlLnN1YnN0cmluZyhvcGVuaW5nQnJhY2VJbmRleCArIDEsIGNsb3NpbmdCcmFjZUluZGV4KTtcbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUuaW5jbHVkZXMoXCIjXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBbcmVmTmFtZSwgYXR0ck5hbWVdID0gcGFyYW1ldGVyTmFtZS5zcGxpdChcIiNcIik7XG4gICAgICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKCgwLCBsaWJfMS5nZXRBdHRyKSh0ZW1wbGF0ZUNvbnRleHRbcmVmTmFtZV0sIGF0dHJOYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKHRlbXBsYXRlQ29udGV4dFtwYXJhbWV0ZXJOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEluZGV4ID0gY2xvc2luZ0JyYWNlSW5kZXggKyAxO1xuICAgIH1cbiAgICByZXR1cm4gZXZhbHVhdGVkVGVtcGxhdGVBcnIuam9pbihcIlwiKTtcbn07XG5leHBvcnRzLmV2YWx1YXRlVGVtcGxhdGUgPSBldmFsdWF0ZVRlbXBsYXRlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmVmZXJlbmNlVmFsdWUgPSB2b2lkIDA7XG5jb25zdCBnZXRSZWZlcmVuY2VWYWx1ZSA9ICh7IHJlZiB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcmVmZXJlbmNlUmVjb3JkID0ge1xuICAgICAgICAuLi5vcHRpb25zLmVuZHBvaW50UGFyYW1zLFxuICAgICAgICAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCxcbiAgICB9O1xuICAgIHJldHVybiByZWZlcmVuY2VSZWNvcmRbcmVmXTtcbn07XG5leHBvcnRzLmdldFJlZmVyZW5jZVZhbHVlID0gZ2V0UmVmZXJlbmNlVmFsdWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUV4cHJlc3Npb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgY2FsbEZ1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9jYWxsRnVuY3Rpb25cIik7XG5jb25zdCBldmFsdWF0ZVRlbXBsYXRlXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZVRlbXBsYXRlXCIpO1xuY29uc3QgZ2V0UmVmZXJlbmNlVmFsdWVfMSA9IHJlcXVpcmUoXCIuL2dldFJlZmVyZW5jZVZhbHVlXCIpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uID0gKG9iaiwga2V5TmFtZSwgb3B0aW9ucykgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXZhbHVhdGVUZW1wbGF0ZV8xLmV2YWx1YXRlVGVtcGxhdGUpKG9iaiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9ialtcImZuXCJdKSB7XG4gICAgICAgIHJldHVybiAoMCwgY2FsbEZ1bmN0aW9uXzEuY2FsbEZ1bmN0aW9uKShvYmosIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvYmpbXCJyZWZcIl0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBnZXRSZWZlcmVuY2VWYWx1ZV8xLmdldFJlZmVyZW5jZVZhbHVlKShvYmosIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGAnJHtrZXlOYW1lfSc6ICR7U3RyaW5nKG9iail9IGlzIG5vdCBhIHN0cmluZywgZnVuY3Rpb24gb3IgcmVmZXJlbmNlLmApO1xufTtcbmV4cG9ydHMuZXZhbHVhdGVFeHByZXNzaW9uID0gZXZhbHVhdGVFeHByZXNzaW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FsbEZ1bmN0aW9uID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGxpYiA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuLi9saWJcIikpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUV4cHJlc3Npb25cIik7XG5jb25zdCBjYWxsRnVuY3Rpb24gPSAoeyBmbiwgYXJndiB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXZhbHVhdGVkQXJncyA9IGFyZ3YubWFwKChhcmcpID0+IFtcImJvb2xlYW5cIiwgXCJudW1iZXJcIl0uaW5jbHVkZXModHlwZW9mIGFyZykgPyBhcmcgOiAoMCwgZXZhbHVhdGVFeHByZXNzaW9uXzEuZXZhbHVhdGVFeHByZXNzaW9uKShhcmcsIFwiYXJnXCIsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gZm4uc3BsaXQoXCIuXCIpLnJlZHVjZSgoYWNjLCBrZXkpID0+IGFjY1trZXldLCBsaWIpKC4uLmV2YWx1YXRlZEFyZ3MpO1xufTtcbmV4cG9ydHMuY2FsbEZ1bmN0aW9uID0gY2FsbEZ1bmN0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVDb25kaXRpb24gPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4uL2RlYnVnXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGNhbGxGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vY2FsbEZ1bmN0aW9uXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb24gPSAoeyBhc3NpZ24sIC4uLmZuQXJncyB9LCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoYXNzaWduICYmIGFzc2lnbiBpbiBvcHRpb25zLnJlZmVyZW5jZVJlY29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGAnJHthc3NpZ259JyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gUmVmZXJlbmNlIFJlY29yZC5gKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSAoMCwgY2FsbEZ1bmN0aW9uXzEuY2FsbEZ1bmN0aW9uKShmbkFyZ3MsIG9wdGlvbnMpO1xuICAgIChfYiA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBkZWJ1Z18xLmRlYnVnSWQsIGBldmFsdWF0ZUNvbmRpdGlvbjogJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKShmbkFyZ3MpfSA9ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykodmFsdWUpfWApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogdmFsdWUgPT09IFwiXCIgPyB0cnVlIDogISF2YWx1ZSxcbiAgICAgICAgLi4uKGFzc2lnbiAhPSBudWxsICYmIHsgdG9Bc3NpZ246IHsgbmFtZTogYXNzaWduLCB2YWx1ZSB9IH0pLFxuICAgIH07XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbiA9IGV2YWx1YXRlQ29uZGl0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVDb25kaXRpb25zID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IHJlcXVpcmUoXCIuLi9kZWJ1Z1wiKTtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUNvbmRpdGlvblwiKTtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9ucyA9IChjb25kaXRpb25zID0gW10sIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGNvbmRpdGlvbnNSZWZlcmVuY2VSZWNvcmQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0LCB0b0Fzc2lnbiB9ID0gKDAsIGV2YWx1YXRlQ29uZGl0aW9uXzEuZXZhbHVhdGVDb25kaXRpb24pKGNvbmRpdGlvbiwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHJlZmVyZW5jZVJlY29yZDoge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLFxuICAgICAgICAgICAgICAgIC4uLmNvbmRpdGlvbnNSZWZlcmVuY2VSZWNvcmQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b0Fzc2lnbikge1xuICAgICAgICAgICAgY29uZGl0aW9uc1JlZmVyZW5jZVJlY29yZFt0b0Fzc2lnbi5uYW1lXSA9IHRvQXNzaWduLnZhbHVlO1xuICAgICAgICAgICAgKF9iID0gKF9hID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWJ1ZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGRlYnVnXzEuZGVidWdJZCwgYGFzc2lnbjogJHt0b0Fzc2lnbi5uYW1lfSA6PSAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKHRvQXNzaWduLnZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUsIHJlZmVyZW5jZVJlY29yZDogY29uZGl0aW9uc1JlZmVyZW5jZVJlY29yZCB9O1xufTtcbmV4cG9ydHMuZXZhbHVhdGVDb25kaXRpb25zID0gZXZhbHVhdGVDb25kaXRpb25zO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRIZWFkZXJzID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlRXhwcmVzc2lvbl8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFeHByZXNzaW9uXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRIZWFkZXJzID0gKGhlYWRlcnMsIG9wdGlvbnMpID0+IE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLnJlZHVjZSgoYWNjLCBbaGVhZGVyS2V5LCBoZWFkZXJWYWxdKSA9PiAoe1xuICAgIC4uLmFjYyxcbiAgICBbaGVhZGVyS2V5XTogaGVhZGVyVmFsLm1hcCgoaGVhZGVyVmFsRW50cnkpID0+IHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkRXhwciA9ICgwLCBldmFsdWF0ZUV4cHJlc3Npb25fMS5ldmFsdWF0ZUV4cHJlc3Npb24pKGhlYWRlclZhbEVudHJ5LCBcIkhlYWRlciB2YWx1ZSBlbnRyeVwiLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzZWRFeHByICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBIZWFkZXIgJyR7aGVhZGVyS2V5fScgdmFsdWUgJyR7cHJvY2Vzc2VkRXhwcn0nIGlzIG5vdCBhIHN0cmluZ2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRFeHByO1xuICAgIH0pLFxufSksIHt9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRIZWFkZXJzID0gZ2V0RW5kcG9pbnRIZWFkZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRQcm9wZXJ0eSA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBldmFsdWF0ZVRlbXBsYXRlXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZVRlbXBsYXRlXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9nZXRFbmRwb2ludFByb3BlcnRpZXNcIik7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnR5ID0gKHByb3BlcnR5LCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eS5tYXAoKHByb3BlcnR5RW50cnkpID0+ICgwLCBleHBvcnRzLmdldEVuZHBvaW50UHJvcGVydHkpKHByb3BlcnR5RW50cnksIG9wdGlvbnMpKTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcGVydHkpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBldmFsdWF0ZVRlbXBsYXRlXzEuZXZhbHVhdGVUZW1wbGF0ZSkocHJvcGVydHksIG9wdGlvbnMpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBpZiAocHJvcGVydHkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBVbmV4cGVjdGVkIGVuZHBvaW50IHByb3BlcnR5OiAke3Byb3BlcnR5fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICgwLCBnZXRFbmRwb2ludFByb3BlcnRpZXNfMS5nZXRFbmRwb2ludFByb3BlcnRpZXMpKHByb3BlcnR5LCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFVuZXhwZWN0ZWQgZW5kcG9pbnQgcHJvcGVydHkgdHlwZTogJHt0eXBlb2YgcHJvcGVydHl9YCk7XG4gICAgfVxufTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRQcm9wZXJ0eSA9IGdldEVuZHBvaW50UHJvcGVydHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnRpZXMgPSB2b2lkIDA7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnR5XzEgPSByZXF1aXJlKFwiLi9nZXRFbmRwb2ludFByb3BlcnR5XCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzID0gKHByb3BlcnRpZXMsIG9wdGlvbnMpID0+IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLnJlZHVjZSgoYWNjLCBbcHJvcGVydHlLZXksIHByb3BlcnR5VmFsXSkgPT4gKHtcbiAgICAuLi5hY2MsXG4gICAgW3Byb3BlcnR5S2V5XTogKDAsIGdldEVuZHBvaW50UHJvcGVydHlfMS5nZXRFbmRwb2ludFByb3BlcnR5KShwcm9wZXJ0eVZhbCwgb3B0aW9ucyksXG59KSwge30pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnRpZXMgPSBnZXRFbmRwb2ludFByb3BlcnRpZXM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFVybCA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXhwcmVzc2lvblwiKTtcbmNvbnN0IGdldEVuZHBvaW50VXJsID0gKGVuZHBvaW50VXJsLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9ICgwLCBldmFsdWF0ZUV4cHJlc3Npb25fMS5ldmFsdWF0ZUV4cHJlc3Npb24pKGVuZHBvaW50VXJsLCBcIkVuZHBvaW50IFVSTFwiLCBvcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIGV4cHJlc3Npb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNvbnN0cnVjdCBVUkwgd2l0aCAke2V4cHJlc3Npb259YCwgZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgRW5kcG9pbnQgVVJMIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3R5cGVvZiBleHByZXNzaW9ufWApO1xufTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRVcmwgPSBnZXRFbmRwb2ludFVybDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlRW5kcG9pbnRSdWxlID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IHJlcXVpcmUoXCIuLi9kZWJ1Z1wiKTtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVDb25kaXRpb25zXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRIZWFkZXJzXzEgPSByZXF1aXJlKFwiLi9nZXRFbmRwb2ludEhlYWRlcnNcIik7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50UHJvcGVydGllc1wiKTtcbmNvbnN0IGdldEVuZHBvaW50VXJsXzEgPSByZXF1aXJlKFwiLi9nZXRFbmRwb2ludFVybFwiKTtcbmNvbnN0IGV2YWx1YXRlRW5kcG9pbnRSdWxlID0gKGVuZHBvaW50UnVsZSwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeyBjb25kaXRpb25zLCBlbmRwb2ludCB9ID0gZW5kcG9pbnRSdWxlO1xuICAgIGNvbnN0IHsgcmVzdWx0LCByZWZlcmVuY2VSZWNvcmQgfSA9ICgwLCBldmFsdWF0ZUNvbmRpdGlvbnNfMS5ldmFsdWF0ZUNvbmRpdGlvbnMpKGNvbmRpdGlvbnMsIG9wdGlvbnMpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnRSdWxlT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlUmVjb3JkOiB7IC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLCAuLi5yZWZlcmVuY2VSZWNvcmQgfSxcbiAgICB9O1xuICAgIGNvbnN0IHsgdXJsLCBwcm9wZXJ0aWVzLCBoZWFkZXJzIH0gPSBlbmRwb2ludDtcbiAgICAoX2IgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZGVidWdfMS5kZWJ1Z0lkLCBgUmVzb2x2aW5nIGVuZHBvaW50IGZyb20gdGVtcGxhdGU6ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykoZW5kcG9pbnQpfWApO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLihoZWFkZXJzICE9IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBoZWFkZXJzOiAoMCwgZ2V0RW5kcG9pbnRIZWFkZXJzXzEuZ2V0RW5kcG9pbnRIZWFkZXJzKShoZWFkZXJzLCBlbmRwb2ludFJ1bGVPcHRpb25zKSxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLihwcm9wZXJ0aWVzICE9IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiAoMCwgZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXzEuZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzLCBlbmRwb2ludFJ1bGVPcHRpb25zKSxcbiAgICAgICAgfSksXG4gICAgICAgIHVybDogKDAsIGdldEVuZHBvaW50VXJsXzEuZ2V0RW5kcG9pbnRVcmwpKHVybCwgZW5kcG9pbnRSdWxlT3B0aW9ucyksXG4gICAgfTtcbn07XG5leHBvcnRzLmV2YWx1YXRlRW5kcG9pbnRSdWxlID0gZXZhbHVhdGVFbmRwb2ludFJ1bGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUVycm9yUnVsZSA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbnNfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlQ29uZGl0aW9uc1wiKTtcbmNvbnN0IGV2YWx1YXRlRXhwcmVzc2lvbl8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFeHByZXNzaW9uXCIpO1xuY29uc3QgZXZhbHVhdGVFcnJvclJ1bGUgPSAoZXJyb3JSdWxlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBjb25kaXRpb25zLCBlcnJvciB9ID0gZXJyb3JSdWxlO1xuICAgIGNvbnN0IHsgcmVzdWx0LCByZWZlcmVuY2VSZWNvcmQgfSA9ICgwLCBldmFsdWF0ZUNvbmRpdGlvbnNfMS5ldmFsdWF0ZUNvbmRpdGlvbnMpKGNvbmRpdGlvbnMsIG9wdGlvbnMpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcigoMCwgZXZhbHVhdGVFeHByZXNzaW9uXzEuZXZhbHVhdGVFeHByZXNzaW9uKShlcnJvciwgXCJFcnJvclwiLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHJlZmVyZW5jZVJlY29yZDogeyAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCwgLi4ucmVmZXJlbmNlUmVjb3JkIH0sXG4gICAgfSkpO1xufTtcbmV4cG9ydHMuZXZhbHVhdGVFcnJvclJ1bGUgPSBldmFsdWF0ZUVycm9yUnVsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlVHJlZVJ1bGUgPSB2b2lkIDA7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbnNfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlQ29uZGl0aW9uc1wiKTtcbmNvbnN0IGV2YWx1YXRlUnVsZXNfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlUnVsZXNcIik7XG5jb25zdCBldmFsdWF0ZVRyZWVSdWxlID0gKHRyZWVSdWxlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBjb25kaXRpb25zLCBydWxlcyB9ID0gdHJlZVJ1bGU7XG4gICAgY29uc3QgeyByZXN1bHQsIHJlZmVyZW5jZVJlY29yZCB9ID0gKDAsIGV2YWx1YXRlQ29uZGl0aW9uc18xLmV2YWx1YXRlQ29uZGl0aW9ucykoY29uZGl0aW9ucywgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIGV2YWx1YXRlUnVsZXNfMS5ldmFsdWF0ZVJ1bGVzKShydWxlcywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICByZWZlcmVuY2VSZWNvcmQ6IHsgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsIC4uLnJlZmVyZW5jZVJlY29yZCB9LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZXZhbHVhdGVUcmVlUnVsZSA9IGV2YWx1YXRlVHJlZVJ1bGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZVJ1bGVzID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlRW5kcG9pbnRSdWxlXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUVuZHBvaW50UnVsZVwiKTtcbmNvbnN0IGV2YWx1YXRlRXJyb3JSdWxlXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUVycm9yUnVsZVwiKTtcbmNvbnN0IGV2YWx1YXRlVHJlZVJ1bGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlVHJlZVJ1bGVcIik7XG5jb25zdCBldmFsdWF0ZVJ1bGVzID0gKHJ1bGVzLCBvcHRpb25zKSA9PiB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgIGlmIChydWxlLnR5cGUgPT09IFwiZW5kcG9pbnRcIikge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnRPclVuZGVmaW5lZCA9ICgwLCBldmFsdWF0ZUVuZHBvaW50UnVsZV8xLmV2YWx1YXRlRW5kcG9pbnRSdWxlKShydWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChlbmRwb2ludE9yVW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZHBvaW50T3JVbmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnVsZS50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICgwLCBldmFsdWF0ZUVycm9yUnVsZV8xLmV2YWx1YXRlRXJyb3JSdWxlKShydWxlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChydWxlLnR5cGUgPT09IFwidHJlZVwiKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludE9yVW5kZWZpbmVkID0gKDAsIGV2YWx1YXRlVHJlZVJ1bGVfMS5ldmFsdWF0ZVRyZWVSdWxlKShydWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChlbmRwb2ludE9yVW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZHBvaW50T3JVbmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBVbmtub3duIGVuZHBvaW50IHJ1bGU6ICR7cnVsZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBSdWxlcyBldmFsdWF0aW9uIGZhaWxlZGApO1xufTtcbmV4cG9ydHMuZXZhbHVhdGVSdWxlcyA9IGV2YWx1YXRlUnVsZXM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V2YWx1YXRlUnVsZXNcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUVuZHBvaW50ID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3QgcmVzb2x2ZUVuZHBvaW50ID0gKHJ1bGVTZXRPYmplY3QsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICBjb25zdCB7IGVuZHBvaW50UGFyYW1zLCBsb2dnZXIgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBwYXJhbWV0ZXJzLCBydWxlcyB9ID0gcnVsZVNldE9iamVjdDtcbiAgICAoX2IgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgYCR7ZGVidWdfMS5kZWJ1Z0lkfSBJbml0aWFsIEVuZHBvaW50UGFyYW1zOiAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKGVuZHBvaW50UGFyYW1zKX1gKTtcbiAgICBjb25zdCBwYXJhbXNXaXRoRGVmYXVsdCA9IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMpXG4gICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB2LmRlZmF1bHQgIT0gbnVsbClcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBbaywgdi5kZWZhdWx0XSk7XG4gICAgaWYgKHBhcmFtc1dpdGhEZWZhdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBbcGFyYW1LZXksIHBhcmFtRGVmYXVsdFZhbHVlXSBvZiBwYXJhbXNXaXRoRGVmYXVsdCkge1xuICAgICAgICAgICAgZW5kcG9pbnRQYXJhbXNbcGFyYW1LZXldID0gKF9jID0gZW5kcG9pbnRQYXJhbXNbcGFyYW1LZXldKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBwYXJhbURlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXF1aXJlZFBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMpXG4gICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB2LnJlcXVpcmVkKVxuICAgICAgICAubWFwKChba10pID0+IGspO1xuICAgIGZvciAoY29uc3QgcmVxdWlyZWRQYXJhbSBvZiByZXF1aXJlZFBhcmFtcykge1xuICAgICAgICBpZiAoZW5kcG9pbnRQYXJhbXNbcmVxdWlyZWRQYXJhbV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6ICcke3JlcXVpcmVkUGFyYW19J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50ID0gKDAsIHV0aWxzXzEuZXZhbHVhdGVSdWxlcykocnVsZXMsIHsgZW5kcG9pbnRQYXJhbXMsIGxvZ2dlciwgcmVmZXJlbmNlUmVjb3JkOiB7fSB9KTtcbiAgICBpZiAoKF9kID0gb3B0aW9ucy5lbmRwb2ludFBhcmFtcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLkVuZHBvaW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBnaXZlbkVuZHBvaW50ID0gbmV3IFVSTChvcHRpb25zLmVuZHBvaW50UGFyYW1zLkVuZHBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvdG9jb2wsIHBvcnQgfSA9IGdpdmVuRW5kcG9pbnQ7XG4gICAgICAgICAgICBlbmRwb2ludC51cmwucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICAgICAgICAgIGVuZHBvaW50LnVybC5wb3J0ID0gcG9ydDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIChfZiA9IChfZSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuZGVidWcpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jYWxsKF9lLCBgJHtkZWJ1Z18xLmRlYnVnSWR9IFJlc29sdmVkIGVuZHBvaW50OiAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKGVuZHBvaW50KX1gKTtcbiAgICByZXR1cm4gZW5kcG9pbnQ7XG59O1xuZXhwb3J0cy5yZXNvbHZlRW5kcG9pbnQgPSByZXNvbHZlRW5kcG9pbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xpYi9hd3MvcGFydGl0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc29sdmVFbmRwb2ludFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VQV9FU0NBUEVfUkVHRVggPSBleHBvcnRzLlNQQUNFID0gZXhwb3J0cy5YX0FNWl9VU0VSX0FHRU5UID0gZXhwb3J0cy5VU0VSX0FHRU5UID0gdm9pZCAwO1xuZXhwb3J0cy5VU0VSX0FHRU5UID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnRzLlhfQU1aX1VTRVJfQUdFTlQgPSBcIngtYW16LXVzZXItYWdlbnRcIjtcbmV4cG9ydHMuU1BBQ0UgPSBcIiBcIjtcbmV4cG9ydHMuVUFfRVNDQVBFX1JFR0VYID0gL1teXFwhXFwjXFwkXFwlXFwmXFwnXFwqXFwrXFwtXFwuXFxeXFxfXFxgXFx8XFx+XFxkXFx3XS9nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50UGx1Z2luID0gZXhwb3J0cy5nZXRVc2VyQWdlbnRNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMudXNlckFnZW50TWlkZGxld2FyZSA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXNlckFnZW50TWlkZGxld2FyZSA9IChvcHRpb25zKSA9PiAobmV4dCwgY29udGV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXJncztcbiAgICBpZiAoIXByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpKVxuICAgICAgICByZXR1cm4gbmV4dChhcmdzKTtcbiAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlcXVlc3Q7XG4gICAgY29uc3QgdXNlckFnZW50ID0gKChfYSA9IGNvbnRleHQgPT09IG51bGwgfHwgY29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udGV4dC51c2VyQWdlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoZXNjYXBlVXNlckFnZW50KSkgfHwgW107XG4gICAgY29uc3QgZGVmYXVsdFVzZXJBZ2VudCA9IChhd2FpdCBvcHRpb25zLmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlcigpKS5tYXAoZXNjYXBlVXNlckFnZW50KTtcbiAgICBjb25zdCBjdXN0b21Vc2VyQWdlbnQgPSAoKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmN1c3RvbVVzZXJBZ2VudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm1hcChlc2NhcGVVc2VyQWdlbnQpKSB8fCBbXTtcbiAgICBjb25zdCBwcmVmaXggPSAoMCwgdXRpbF9lbmRwb2ludHNfMS5nZXRVc2VyQWdlbnRQcmVmaXgpKCk7XG4gICAgY29uc3Qgc2RrVXNlckFnZW50VmFsdWUgPSAocHJlZml4ID8gW3ByZWZpeF0gOiBbXSlcbiAgICAgICAgLmNvbmNhdChbLi4uZGVmYXVsdFVzZXJBZ2VudCwgLi4udXNlckFnZW50LCAuLi5jdXN0b21Vc2VyQWdlbnRdKVxuICAgICAgICAuam9pbihjb25zdGFudHNfMS5TUEFDRSk7XG4gICAgY29uc3Qgbm9ybWFsVUFWYWx1ZSA9IFtcbiAgICAgICAgLi4uZGVmYXVsdFVzZXJBZ2VudC5maWx0ZXIoKHNlY3Rpb24pID0+IHNlY3Rpb24uc3RhcnRzV2l0aChcImF3cy1zZGstXCIpKSxcbiAgICAgICAgLi4uY3VzdG9tVXNlckFnZW50LFxuICAgIF0uam9pbihjb25zdGFudHNfMS5TUEFDRSk7XG4gICAgaWYgKG9wdGlvbnMucnVudGltZSAhPT0gXCJicm93c2VyXCIpIHtcbiAgICAgICAgaWYgKG5vcm1hbFVBVmFsdWUpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbY29uc3RhbnRzXzEuWF9BTVpfVVNFUl9BR0VOVF0gPSBoZWFkZXJzW2NvbnN0YW50c18xLlhfQU1aX1VTRVJfQUdFTlRdXG4gICAgICAgICAgICAgICAgPyBgJHtoZWFkZXJzW2NvbnN0YW50c18xLlVTRVJfQUdFTlRdfSAke25vcm1hbFVBVmFsdWV9YFxuICAgICAgICAgICAgICAgIDogbm9ybWFsVUFWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzW2NvbnN0YW50c18xLlVTRVJfQUdFTlRdID0gc2RrVXNlckFnZW50VmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBoZWFkZXJzW2NvbnN0YW50c18xLlhfQU1aX1VTRVJfQUdFTlRdID0gc2RrVXNlckFnZW50VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICB9KTtcbn07XG5leHBvcnRzLnVzZXJBZ2VudE1pZGRsZXdhcmUgPSB1c2VyQWdlbnRNaWRkbGV3YXJlO1xuY29uc3QgZXNjYXBlVXNlckFnZW50ID0gKFtuYW1lLCB2ZXJzaW9uXSkgPT4ge1xuICAgIGNvbnN0IHByZWZpeFNlcGFyYXRvckluZGV4ID0gbmFtZS5pbmRleE9mKFwiL1wiKTtcbiAgICBjb25zdCBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBwcmVmaXhTZXBhcmF0b3JJbmRleCk7XG4gICAgbGV0IHVhTmFtZSA9IG5hbWUuc3Vic3RyaW5nKHByZWZpeFNlcGFyYXRvckluZGV4ICsgMSk7XG4gICAgaWYgKHByZWZpeCA9PT0gXCJhcGlcIikge1xuICAgICAgICB1YU5hbWUgPSB1YU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcmVmaXgsIHVhTmFtZSwgdmVyc2lvbl1cbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAmJiBpdGVtLmxlbmd0aCA+IDApXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS5yZXBsYWNlKGNvbnN0YW50c18xLlVBX0VTQ0FQRV9SRUdFWCwgXCJfXCIpKVxuICAgICAgICAuam9pbihcIi9cIik7XG59O1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgICBuYW1lOiBcImdldFVzZXJBZ2VudE1pZGRsZXdhcmVcIixcbiAgICBzdGVwOiBcImJ1aWxkXCIsXG4gICAgcHJpb3JpdHk6IFwibG93XCIsXG4gICAgdGFnczogW1wiU0VUX1VTRVJfQUdFTlRcIiwgXCJVU0VSX0FHRU5UXCJdLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmNvbnN0IGdldFVzZXJBZ2VudFBsdWdpbiA9IChjb25maWcpID0+ICh7XG4gICAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICAgICAgY2xpZW50U3RhY2suYWRkKCgwLCBleHBvcnRzLnVzZXJBZ2VudE1pZGRsZXdhcmUpKGNvbmZpZyksIGV4cG9ydHMuZ2V0VXNlckFnZW50TWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50UGx1Z2luID0gZ2V0VXNlckFnZW50UGx1Z2luO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25maWd1cmF0aW9uc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91c2VyLWFnZW50LW1pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9PcExvZ2dlciA9IHZvaWQgMDtcbmNsYXNzIE5vT3BMb2dnZXIge1xuICAgIHRyYWNlKCkgeyB9XG4gICAgZGVidWcoKSB7IH1cbiAgICBpbmZvKCkgeyB9XG4gICAgd2FybigpIHsgfVxuICAgIGVycm9yKCkgeyB9XG59XG5leHBvcnRzLk5vT3BMb2dnZXIgPSBOb09wTG9nZ2VyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uc3RydWN0U3RhY2sgPSB2b2lkIDA7XG5jb25zdCBjb25zdHJ1Y3RTdGFjayA9ICgpID0+IHtcbiAgICBsZXQgYWJzb2x1dGVFbnRyaWVzID0gW107XG4gICAgbGV0IHJlbGF0aXZlRW50cmllcyA9IFtdO1xuICAgIGNvbnN0IGVudHJpZXNOYW1lU2V0ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IHNvcnQgPSAoZW50cmllcykgPT4gZW50cmllcy5zb3J0KChhLCBiKSA9PiBzdGVwV2VpZ2h0c1tiLnN0ZXBdIC0gc3RlcFdlaWdodHNbYS5zdGVwXSB8fFxuICAgICAgICBwcmlvcml0eVdlaWdodHNbYi5wcmlvcml0eSB8fCBcIm5vcm1hbFwiXSAtIHByaW9yaXR5V2VpZ2h0c1thLnByaW9yaXR5IHx8IFwibm9ybWFsXCJdKTtcbiAgICBjb25zdCByZW1vdmVCeU5hbWUgPSAodG9SZW1vdmUpID0+IHtcbiAgICAgICAgbGV0IGlzUmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWx0ZXJDYiA9IChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudHJ5Lm5hbWUgJiYgZW50cnkubmFtZSA9PT0gdG9SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICBpc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmRlbGV0ZSh0b1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGFic29sdXRlRW50cmllcyA9IGFic29sdXRlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgICAgICByZWxhdGl2ZUVudHJpZXMgPSByZWxhdGl2ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICAgICAgcmV0dXJuIGlzUmVtb3ZlZDtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUJ5UmVmZXJlbmNlID0gKHRvUmVtb3ZlKSA9PiB7XG4gICAgICAgIGxldCBpc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmlsdGVyQ2IgPSAoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5taWRkbGV3YXJlID09PSB0b1JlbW92ZSkge1xuICAgICAgICAgICAgICAgIGlzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5Lm5hbWUpXG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmRlbGV0ZShlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgYWJzb2x1dGVFbnRyaWVzID0gYWJzb2x1dGVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgICAgIHJlbGF0aXZlRW50cmllcyA9IHJlbGF0aXZlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgICAgICByZXR1cm4gaXNSZW1vdmVkO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmVUbyA9ICh0b1N0YWNrKSA9PiB7XG4gICAgICAgIGFic29sdXRlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdG9TdGFjay5hZGQoZW50cnkubWlkZGxld2FyZSwgeyAuLi5lbnRyeSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdG9TdGFjay5hZGRSZWxhdGl2ZVRvKGVudHJ5Lm1pZGRsZXdhcmUsIHsgLi4uZW50cnkgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG9TdGFjaztcbiAgICB9O1xuICAgIGNvbnN0IGV4cGFuZFJlbGF0aXZlTWlkZGxld2FyZUxpc3QgPSAoZnJvbSkgPT4ge1xuICAgICAgICBjb25zdCBleHBhbmRlZE1pZGRsZXdhcmVMaXN0ID0gW107XG4gICAgICAgIGZyb20uYmVmb3JlLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAoZW50cnkuYmVmb3JlLmxlbmd0aCA9PT0gMCAmJiBlbnRyeS5hZnRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRNaWRkbGV3YXJlTGlzdC5wdXNoKC4uLmV4cGFuZFJlbGF0aXZlTWlkZGxld2FyZUxpc3QoZW50cnkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChmcm9tKTtcbiAgICAgICAgZnJvbS5hZnRlci5yZXZlcnNlKCkuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5iZWZvcmUubGVuZ3RoID09PSAwICYmIGVudHJ5LmFmdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goLi4uZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdChlbnRyeSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGV4cGFuZGVkTWlkZGxld2FyZUxpc3Q7XG4gICAgfTtcbiAgICBjb25zdCBnZXRNaWRkbGV3YXJlTGlzdCA9IChkZWJ1ZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBYnNvbHV0ZUVudHJpZXMgPSBbXTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlbGF0aXZlRW50cmllcyA9IFtdO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRW50cmllc05hbWVNYXAgPSB7fTtcbiAgICAgICAgYWJzb2x1dGVFbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgYmVmb3JlOiBbXSxcbiAgICAgICAgICAgICAgICBhZnRlcjogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRFbnRyeS5uYW1lKVxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRFbnRyaWVzTmFtZU1hcFtub3JtYWxpemVkRW50cnkubmFtZV0gPSBub3JtYWxpemVkRW50cnk7XG4gICAgICAgICAgICBub3JtYWxpemVkQWJzb2x1dGVFbnRyaWVzLnB1c2gobm9ybWFsaXplZEVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgIGJlZm9yZTogW10sXG4gICAgICAgICAgICAgICAgYWZ0ZXI6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkRW50cnkubmFtZSlcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkRW50cmllc05hbWVNYXBbbm9ybWFsaXplZEVudHJ5Lm5hbWVdID0gbm9ybWFsaXplZEVudHJ5O1xuICAgICAgICAgICAgbm9ybWFsaXplZFJlbGF0aXZlRW50cmllcy5wdXNoKG5vcm1hbGl6ZWRFbnRyeSk7XG4gICAgICAgIH0pO1xuICAgICAgICBub3JtYWxpemVkUmVsYXRpdmVFbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAoZW50cnkudG9NaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9NaWRkbGV3YXJlID0gbm9ybWFsaXplZEVudHJpZXNOYW1lTWFwW2VudHJ5LnRvTWlkZGxld2FyZV07XG4gICAgICAgICAgICAgICAgaWYgKHRvTWlkZGxld2FyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeS50b01pZGRsZXdhcmV9IGlzIG5vdCBmb3VuZCB3aGVuIGFkZGluZyAke2VudHJ5Lm5hbWUgfHwgXCJhbm9ueW1vdXNcIn0gbWlkZGxld2FyZSAke2VudHJ5LnJlbGF0aW9ufSAke2VudHJ5LnRvTWlkZGxld2FyZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnJlbGF0aW9uID09PSBcImFmdGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9NaWRkbGV3YXJlLmFmdGVyLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZW50cnkucmVsYXRpb24gPT09IFwiYmVmb3JlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9NaWRkbGV3YXJlLmJlZm9yZS5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYWluQ2hhaW4gPSBzb3J0KG5vcm1hbGl6ZWRBYnNvbHV0ZUVudHJpZXMpXG4gICAgICAgICAgICAubWFwKGV4cGFuZFJlbGF0aXZlTWlkZGxld2FyZUxpc3QpXG4gICAgICAgICAgICAucmVkdWNlKCh3aG9sZUxpc3QsIGV4cGVuZGVkTWlkZGxld2FyZUxpc3QpID0+IHtcbiAgICAgICAgICAgIHdob2xlTGlzdC5wdXNoKC4uLmV4cGVuZGVkTWlkZGxld2FyZUxpc3QpO1xuICAgICAgICAgICAgcmV0dXJuIHdob2xlTGlzdDtcbiAgICAgICAgfSwgW10pO1xuICAgICAgICByZXR1cm4gbWFpbkNoYWluO1xuICAgIH07XG4gICAgY29uc3Qgc3RhY2sgPSB7XG4gICAgICAgIGFkZDogKG1pZGRsZXdhcmUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBvdmVycmlkZSB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIHN0ZXA6IFwiaW5pdGlhbGl6ZVwiLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyaWVzTmFtZVNldC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVycmlkZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1pZGRsZXdhcmUgbmFtZSAnJHtuYW1lfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9PdmVycmlkZUluZGV4ID0gYWJzb2x1dGVFbnRyaWVzLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b092ZXJyaWRlID0gYWJzb2x1dGVFbnRyaWVzW3RvT3ZlcnJpZGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b092ZXJyaWRlLnN0ZXAgIT09IGVudHJ5LnN0ZXAgfHwgdG9PdmVycmlkZS5wcmlvcml0eSAhPT0gZW50cnkucHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke25hbWV9XCIgbWlkZGxld2FyZSB3aXRoICR7dG9PdmVycmlkZS5wcmlvcml0eX0gcHJpb3JpdHkgaW4gJHt0b092ZXJyaWRlLnN0ZXB9IHN0ZXAgY2Fubm90IGJlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBvdmVycmlkZGVuIGJ5IHNhbWUtbmFtZSBtaWRkbGV3YXJlIHdpdGggJHtlbnRyeS5wcmlvcml0eX0gcHJpb3JpdHkgaW4gJHtlbnRyeS5zdGVwfSBzdGVwLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW50cmllcy5zcGxpY2UodG9PdmVycmlkZUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW50cmllc05hbWVTZXQuYWRkKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJzb2x1dGVFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICB9LFxuICAgICAgICBhZGRSZWxhdGl2ZVRvOiAobWlkZGxld2FyZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBvdmVycmlkZSB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyaWVzTmFtZVNldC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVycmlkZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1pZGRsZXdhcmUgbmFtZSAnJHtuYW1lfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9PdmVycmlkZUluZGV4ID0gcmVsYXRpdmVFbnRyaWVzLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b092ZXJyaWRlID0gcmVsYXRpdmVFbnRyaWVzW3RvT3ZlcnJpZGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b092ZXJyaWRlLnRvTWlkZGxld2FyZSAhPT0gZW50cnkudG9NaWRkbGV3YXJlIHx8IHRvT3ZlcnJpZGUucmVsYXRpb24gIT09IGVudHJ5LnJlbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtuYW1lfVwiIG1pZGRsZXdhcmUgJHt0b092ZXJyaWRlLnJlbGF0aW9ufSBcIiR7dG9PdmVycmlkZS50b01pZGRsZXdhcmV9XCIgbWlkZGxld2FyZSBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYnkgc2FtZS1uYW1lIG1pZGRsZXdhcmUgJHtlbnRyeS5yZWxhdGlvbn0gXCIke2VudHJ5LnRvTWlkZGxld2FyZX1cIiBtaWRkbGV3YXJlLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlRW50cmllcy5zcGxpY2UodG9PdmVycmlkZUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW50cmllc05hbWVTZXQuYWRkKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVsYXRpdmVFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9uZTogKCkgPT4gY2xvbmVUbygoMCwgZXhwb3J0cy5jb25zdHJ1Y3RTdGFjaykoKSksXG4gICAgICAgIHVzZTogKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgcGx1Z2luLmFwcGx5VG9TdGFjayhzdGFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogKHRvUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRvUmVtb3ZlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVCeU5hbWUodG9SZW1vdmUpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVCeVJlZmVyZW5jZSh0b1JlbW92ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUJ5VGFnOiAodG9SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIGxldCBpc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckNiID0gKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0YWdzLCBuYW1lIH0gPSBlbnRyeTtcbiAgICAgICAgICAgICAgICBpZiAodGFncyAmJiB0YWdzLmluY2x1ZGVzKHRvUmVtb3ZlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaXNSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhYnNvbHV0ZUVudHJpZXMgPSBhYnNvbHV0ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICAgICAgICAgIHJlbGF0aXZlRW50cmllcyA9IHJlbGF0aXZlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgICAgICAgICAgcmV0dXJuIGlzUmVtb3ZlZDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uY2F0OiAoZnJvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkID0gY2xvbmVUbygoMCwgZXhwb3J0cy5jb25zdHJ1Y3RTdGFjaykoKSk7XG4gICAgICAgICAgICBjbG9uZWQudXNlKGZyb20pO1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICAgICAgfSxcbiAgICAgICAgYXBwbHlUb1N0YWNrOiBjbG9uZVRvLFxuICAgICAgICBpZGVudGlmeTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldE1pZGRsZXdhcmVMaXN0KHRydWUpLm1hcCgobXcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbXcubmFtZSArIFwiOiBcIiArIChtdy50YWdzIHx8IFtdKS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZXNvbHZlOiAoaGFuZGxlciwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIGdldE1pZGRsZXdhcmVMaXN0KClcbiAgICAgICAgICAgICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkubWlkZGxld2FyZSlcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlciwgY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBzdGFjaztcbn07XG5leHBvcnRzLmNvbnN0cnVjdFN0YWNrID0gY29uc3RydWN0U3RhY2s7XG5jb25zdCBzdGVwV2VpZ2h0cyA9IHtcbiAgICBpbml0aWFsaXplOiA1LFxuICAgIHNlcmlhbGl6ZTogNCxcbiAgICBidWlsZDogMyxcbiAgICBmaW5hbGl6ZVJlcXVlc3Q6IDIsXG4gICAgZGVzZXJpYWxpemU6IDEsXG59O1xuY29uc3QgcHJpb3JpdHlXZWlnaHRzID0ge1xuICAgIGhpZ2g6IDMsXG4gICAgbm9ybWFsOiAyLFxuICAgIGxvdzogMSxcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL01pZGRsZXdhcmVTdGFja1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DbGllbnQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX3N0YWNrXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zdGFja1wiKTtcbmNsYXNzIENsaWVudCB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrID0gKDAsIG1pZGRsZXdhcmVfc3RhY2tfMS5jb25zdHJ1Y3RTdGFjaykoKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgfVxuICAgIHNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IsIGNiKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnNPckNiIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9uc09yQ2IgOiBjYjtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGNvbW1hbmQucmVzb2x2ZU1pZGRsZXdhcmUodGhpcy5taWRkbGV3YXJlU3RhY2ssIHRoaXMuY29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBoYW5kbGVyKGNvbW1hbmQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgcmVzdWx0Lm91dHB1dCksIChlcnIpID0+IGNhbGxiYWNrKGVycikpXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcihjb21tYW5kKS50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXF1ZXN0SGFuZGxlci5kZXN0cm95KVxuICAgICAgICAgICAgdGhpcy5jb25maWcucmVxdWVzdEhhbmRsZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2xpZW50ID0gQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfc3RhY2tfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXN0YWNrXCIpO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrID0gKDAsIG1pZGRsZXdhcmVfc3RhY2tfMS5jb25zdHJ1Y3RTdGFjaykoKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU0VOU0lUSVZFX1NUUklORyA9IHZvaWQgMDtcbmV4cG9ydHMuU0VOU0lUSVZFX1NUUklORyA9IFwiKioqU2Vuc2l0aXZlSW5mb3JtYXRpb24qKipcIjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBjcmVhdGVBZ2dyZWdhdGVkQ2xpZW50ID0gKGNvbW1hbmRzLCBDbGllbnQpID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgT2JqZWN0LmtleXMoY29tbWFuZHMpKSB7XG4gICAgICAgIGNvbnN0IENvbW1hbmRDdG9yID0gY29tbWFuZHNbY29tbWFuZF07XG4gICAgICAgIGNvbnN0IG1ldGhvZEltcGwgPSBhc3luYyBmdW5jdGlvbiAoYXJncywgb3B0aW9uc09yQ2IsIGNiKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IENvbW1hbmRDdG9yKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBodHRwIG9wdGlvbnMgYnV0IGdvdCAke3R5cGVvZiBvcHRpb25zT3JDYn1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IgfHwge30sIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gKGNvbW1hbmRbMF0udG9Mb3dlckNhc2UoKSArIGNvbW1hbmQuc2xpY2UoMSkpLnJlcGxhY2UoL0NvbW1hbmQkLywgXCJcIik7XG4gICAgICAgIENsaWVudC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBtZXRob2RJbXBsO1xuICAgIH1cbn07XG5leHBvcnRzLmNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQgPSBjcmVhdGVBZ2dyZWdhdGVkQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gZXhwb3J0cy5zdHJpY3RQYXJzZUJ5dGUgPSBleHBvcnRzLnN0cmljdFBhcnNlU2hvcnQgPSBleHBvcnRzLnN0cmljdFBhcnNlSW50MzIgPSBleHBvcnRzLnN0cmljdFBhcnNlSW50ID0gZXhwb3J0cy5zdHJpY3RQYXJzZUxvbmcgPSBleHBvcnRzLmxpbWl0ZWRQYXJzZUZsb2F0MzIgPSBleHBvcnRzLmxpbWl0ZWRQYXJzZUZsb2F0ID0gZXhwb3J0cy5oYW5kbGVGbG9hdCA9IGV4cG9ydHMubGltaXRlZFBhcnNlRG91YmxlID0gZXhwb3J0cy5zdHJpY3RQYXJzZUZsb2F0MzIgPSBleHBvcnRzLnN0cmljdFBhcnNlRmxvYXQgPSBleHBvcnRzLnN0cmljdFBhcnNlRG91YmxlID0gZXhwb3J0cy5leHBlY3RVbmlvbiA9IGV4cG9ydHMuZXhwZWN0U3RyaW5nID0gZXhwb3J0cy5leHBlY3RPYmplY3QgPSBleHBvcnRzLmV4cGVjdE5vbk51bGwgPSBleHBvcnRzLmV4cGVjdEJ5dGUgPSBleHBvcnRzLmV4cGVjdFNob3J0ID0gZXhwb3J0cy5leHBlY3RJbnQzMiA9IGV4cG9ydHMuZXhwZWN0SW50ID0gZXhwb3J0cy5leHBlY3RMb25nID0gZXhwb3J0cy5leHBlY3RGbG9hdDMyID0gZXhwb3J0cy5leHBlY3ROdW1iZXIgPSBleHBvcnRzLmV4cGVjdEJvb2xlYW4gPSBleHBvcnRzLnBhcnNlQm9vbGVhbiA9IHZvaWQgMDtcbmNvbnN0IHBhcnNlQm9vbGVhbiA9ICh2YWx1ZSkgPT4ge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSBcInRydWVcIjpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlIFwiZmFsc2VcIjpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGJvb2xlYW4gdmFsdWUgXCIke3ZhbHVlfVwiYCk7XG4gICAgfVxufTtcbmV4cG9ydHMucGFyc2VCb29sZWFuID0gcGFyc2VCb29sZWFuO1xuY29uc3QgZXhwZWN0Qm9vbGVhbiA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICBleHBvcnRzLmxvZ2dlci53YXJuKHN0YWNrVHJhY2VXYXJuaW5nKGBFeHBlY3RlZCBib29sZWFuLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgbG93ZXIgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXIgPT09IFwiZmFsc2VcIiB8fCBsb3dlciA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGV4cG9ydHMubG9nZ2VyLndhcm4oc3RhY2tUcmFjZVdhcm5pbmcoYEV4cGVjdGVkIGJvb2xlYW4sIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlciA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBib29sZWFuLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApO1xufTtcbmV4cG9ydHMuZXhwZWN0Qm9vbGVhbiA9IGV4cGVjdEJvb2xlYW47XG5jb25zdCBleHBlY3ROdW1iZXIgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQpKSB7XG4gICAgICAgICAgICBpZiAoU3RyaW5nKHBhcnNlZCkgIT09IFN0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmxvZ2dlci53YXJuKHN0YWNrVHJhY2VXYXJuaW5nKGBFeHBlY3RlZCBudW1iZXIgYnV0IG9ic2VydmVkIHN0cmluZzogJHt2YWx1ZX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBudW1iZXIsIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59O1xuZXhwb3J0cy5leHBlY3ROdW1iZXIgPSBleHBlY3ROdW1iZXI7XG5jb25zdCBNQVhfRkxPQVQgPSBNYXRoLmNlaWwoMiAqKiAxMjcgKiAoMiAtIDIgKiogLTIzKSk7XG5jb25zdCBleHBlY3RGbG9hdDMyID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZXhwZWN0ZWQgPSAoMCwgZXhwb3J0cy5leHBlY3ROdW1iZXIpKHZhbHVlKTtcbiAgICBpZiAoZXhwZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiAhTnVtYmVyLmlzTmFOKGV4cGVjdGVkKSAmJiBleHBlY3RlZCAhPT0gSW5maW5pdHkgJiYgZXhwZWN0ZWQgIT09IC1JbmZpbml0eSkge1xuICAgICAgICBpZiAoTWF0aC5hYnMoZXhwZWN0ZWQpID4gTUFYX0ZMT0FUKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAzMi1iaXQgZmxvYXQsIGdvdCAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5leHBvcnRzLmV4cGVjdEZsb2F0MzIgPSBleHBlY3RGbG9hdDMyO1xuY29uc3QgZXhwZWN0TG9uZyA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGludGVnZXIsIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59O1xuZXhwb3J0cy5leHBlY3RMb25nID0gZXhwZWN0TG9uZztcbmV4cG9ydHMuZXhwZWN0SW50ID0gZXhwb3J0cy5leHBlY3RMb25nO1xuY29uc3QgZXhwZWN0SW50MzIgPSAodmFsdWUpID0+IGV4cGVjdFNpemVkSW50KHZhbHVlLCAzMik7XG5leHBvcnRzLmV4cGVjdEludDMyID0gZXhwZWN0SW50MzI7XG5jb25zdCBleHBlY3RTaG9ydCA9ICh2YWx1ZSkgPT4gZXhwZWN0U2l6ZWRJbnQodmFsdWUsIDE2KTtcbmV4cG9ydHMuZXhwZWN0U2hvcnQgPSBleHBlY3RTaG9ydDtcbmNvbnN0IGV4cGVjdEJ5dGUgPSAodmFsdWUpID0+IGV4cGVjdFNpemVkSW50KHZhbHVlLCA4KTtcbmV4cG9ydHMuZXhwZWN0Qnl0ZSA9IGV4cGVjdEJ5dGU7XG5jb25zdCBleHBlY3RTaXplZEludCA9ICh2YWx1ZSwgc2l6ZSkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkID0gKDAsIGV4cG9ydHMuZXhwZWN0TG9uZykodmFsdWUpO1xuICAgIGlmIChleHBlY3RlZCAhPT0gdW5kZWZpbmVkICYmIGNhc3RJbnQoZXhwZWN0ZWQsIHNpemUpICE9PSBleHBlY3RlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAke3NpemV9LWJpdCBpbnRlZ2VyLCBnb3QgJHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdGVkO1xufTtcbmNvbnN0IGNhc3RJbnQgPSAodmFsdWUsIHNpemUpID0+IHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIHJldHVybiBJbnQzMkFycmF5Lm9mKHZhbHVlKVswXTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiBJbnQxNkFycmF5Lm9mKHZhbHVlKVswXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIEludDhBcnJheS5vZih2YWx1ZSlbMF07XG4gICAgfVxufTtcbmNvbnN0IGV4cGVjdE5vbk51bGwgPSAodmFsdWUsIGxvY2F0aW9uKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlIGZvciAke2xvY2F0aW9ufWApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuZXhwb3J0cy5leHBlY3ROb25OdWxsID0gZXhwZWN0Tm9uTnVsbDtcbmNvbnN0IGV4cGVjdE9iamVjdCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBcImFycmF5XCIgOiB0eXBlb2YgdmFsdWU7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgb2JqZWN0LCBnb3QgJHtyZWNlaXZlZFR5cGV9OiAke3ZhbHVlfWApO1xufTtcbmV4cG9ydHMuZXhwZWN0T2JqZWN0ID0gZXhwZWN0T2JqZWN0O1xuY29uc3QgZXhwZWN0U3RyaW5nID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChbXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwiYmlnaW50XCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgICAgZXhwb3J0cy5sb2dnZXIud2FybihzdGFja1RyYWNlV2FybmluZyhgRXhwZWN0ZWQgc3RyaW5nLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApKTtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHZhbHVlfTogJHt2YWx1ZX1gKTtcbn07XG5leHBvcnRzLmV4cGVjdFN0cmluZyA9IGV4cGVjdFN0cmluZztcbmNvbnN0IGV4cGVjdFVuaW9uID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgYXNPYmplY3QgPSAoMCwgZXhwb3J0cy5leHBlY3RPYmplY3QpKHZhbHVlKTtcbiAgICBjb25zdCBzZXRLZXlzID0gT2JqZWN0LmVudHJpZXMoYXNPYmplY3QpXG4gICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB2ICE9IG51bGwpXG4gICAgICAgIC5tYXAoKFtrXSkgPT4gayk7XG4gICAgaWYgKHNldEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuaW9ucyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgbm9uLW51bGwgbWVtYmVyLiBOb25lIHdlcmUgZm91bmQuYCk7XG4gICAgfVxuICAgIGlmIChzZXRLZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5pb25zIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBub24tbnVsbCBtZW1iZXIuIEtleXMgJHtzZXRLZXlzfSB3ZXJlIG5vdCBudWxsLmApO1xuICAgIH1cbiAgICByZXR1cm4gYXNPYmplY3Q7XG59O1xuZXhwb3J0cy5leHBlY3RVbmlvbiA9IGV4cGVjdFVuaW9uO1xuY29uc3Qgc3RyaWN0UGFyc2VEb3VibGUgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmV4cGVjdE51bWJlcikocGFyc2VOdW1iZXIodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBleHBvcnRzLmV4cGVjdE51bWJlcikodmFsdWUpO1xufTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VEb3VibGUgPSBzdHJpY3RQYXJzZURvdWJsZTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VGbG9hdCA9IGV4cG9ydHMuc3RyaWN0UGFyc2VEb3VibGU7XG5jb25zdCBzdHJpY3RQYXJzZUZsb2F0MzIgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmV4cGVjdEZsb2F0MzIpKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXhwb3J0cy5leHBlY3RGbG9hdDMyKSh2YWx1ZSk7XG59O1xuZXhwb3J0cy5zdHJpY3RQYXJzZUZsb2F0MzIgPSBzdHJpY3RQYXJzZUZsb2F0MzI7XG5jb25zdCBOVU1CRVJfUkVHRVggPSAvKC0/KD86MHxbMS05XVxcZCopKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/KXwoLT9JbmZpbml0eSl8KE5hTikvZztcbmNvbnN0IHBhcnNlTnVtYmVyID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlLm1hdGNoKE5VTUJFUl9SRUdFWCk7XG4gICAgaWYgKG1hdGNoZXMgPT09IG51bGwgfHwgbWF0Y2hlc1swXS5sZW5ndGggIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCByZWFsIG51bWJlciwgZ290IGltcGxpY2l0IE5hTmApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59O1xuY29uc3QgbGltaXRlZFBhcnNlRG91YmxlID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0U3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBleHBvcnRzLmV4cGVjdE51bWJlcikodmFsdWUpO1xufTtcbmV4cG9ydHMubGltaXRlZFBhcnNlRG91YmxlID0gbGltaXRlZFBhcnNlRG91YmxlO1xuZXhwb3J0cy5oYW5kbGVGbG9hdCA9IGV4cG9ydHMubGltaXRlZFBhcnNlRG91YmxlO1xuZXhwb3J0cy5saW1pdGVkUGFyc2VGbG9hdCA9IGV4cG9ydHMubGltaXRlZFBhcnNlRG91YmxlO1xuY29uc3QgbGltaXRlZFBhcnNlRmxvYXQzMiA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXhwb3J0cy5leHBlY3RGbG9hdDMyKSh2YWx1ZSk7XG59O1xuZXhwb3J0cy5saW1pdGVkUGFyc2VGbG9hdDMyID0gbGltaXRlZFBhcnNlRmxvYXQzMjtcbmNvbnN0IHBhcnNlRmxvYXRTdHJpbmcgPSAodmFsdWUpID0+IHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJOYU5cIjpcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIGNhc2UgXCJJbmZpbml0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICBjYXNlIFwiLUluZmluaXR5XCI6XG4gICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgZmxvYXQgdmFsdWU6ICR7dmFsdWV9YCk7XG4gICAgfVxufTtcbmNvbnN0IHN0cmljdFBhcnNlTG9uZyA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmV4cGVjdExvbmcpKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXhwb3J0cy5leHBlY3RMb25nKSh2YWx1ZSk7XG59O1xuZXhwb3J0cy5zdHJpY3RQYXJzZUxvbmcgPSBzdHJpY3RQYXJzZUxvbmc7XG5leHBvcnRzLnN0cmljdFBhcnNlSW50ID0gZXhwb3J0cy5zdHJpY3RQYXJzZUxvbmc7XG5jb25zdCBzdHJpY3RQYXJzZUludDMyID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZXhwZWN0SW50MzIpKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXhwb3J0cy5leHBlY3RJbnQzMikodmFsdWUpO1xufTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VJbnQzMiA9IHN0cmljdFBhcnNlSW50MzI7XG5jb25zdCBzdHJpY3RQYXJzZVNob3J0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZXhwZWN0U2hvcnQpKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXhwb3J0cy5leHBlY3RTaG9ydCkodmFsdWUpO1xufTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VTaG9ydCA9IHN0cmljdFBhcnNlU2hvcnQ7XG5jb25zdCBzdHJpY3RQYXJzZUJ5dGUgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5leHBlY3RCeXRlKShwYXJzZU51bWJlcih2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIGV4cG9ydHMuZXhwZWN0Qnl0ZSkodmFsdWUpO1xufTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VCeXRlID0gc3RyaWN0UGFyc2VCeXRlO1xuY29uc3Qgc3RhY2tUcmFjZVdhcm5pbmcgPSAobWVzc2FnZSkgPT4ge1xuICAgIHJldHVybiBTdHJpbmcobmV3IFR5cGVFcnJvcihtZXNzYWdlKS5zdGFjayB8fCBtZXNzYWdlKVxuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLnNsaWNlKDAsIDUpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+ICFzLmluY2x1ZGVzKFwic3RhY2tUcmFjZVdhcm5pbmdcIikpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xufTtcbmV4cG9ydHMubG9nZ2VyID0ge1xuICAgIHdhcm46IGNvbnNvbGUud2Fybixcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUVwb2NoVGltZXN0YW1wID0gZXhwb3J0cy5wYXJzZVJmYzcyMzFEYXRlVGltZSA9IGV4cG9ydHMucGFyc2VSZmMzMzM5RGF0ZVRpbWVXaXRoT2Zmc2V0ID0gZXhwb3J0cy5wYXJzZVJmYzMzMzlEYXRlVGltZSA9IGV4cG9ydHMuZGF0ZVRvVXRjU3RyaW5nID0gdm9pZCAwO1xuY29uc3QgcGFyc2VfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3BhcnNlLXV0aWxzXCIpO1xuY29uc3QgREFZUyA9IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXTtcbmNvbnN0IE1PTlRIUyA9IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXTtcbmZ1bmN0aW9uIGRhdGVUb1V0Y1N0cmluZyhkYXRlKSB7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIGNvbnN0IGRheU9mTW9udGhJbnQgPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICBjb25zdCBob3Vyc0ludCA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBjb25zdCBtaW51dGVzSW50ID0gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgY29uc3Qgc2Vjb25kc0ludCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xuICAgIGNvbnN0IGRheU9mTW9udGhTdHJpbmcgPSBkYXlPZk1vbnRoSW50IDwgMTAgPyBgMCR7ZGF5T2ZNb250aEludH1gIDogYCR7ZGF5T2ZNb250aEludH1gO1xuICAgIGNvbnN0IGhvdXJzU3RyaW5nID0gaG91cnNJbnQgPCAxMCA/IGAwJHtob3Vyc0ludH1gIDogYCR7aG91cnNJbnR9YDtcbiAgICBjb25zdCBtaW51dGVzU3RyaW5nID0gbWludXRlc0ludCA8IDEwID8gYDAke21pbnV0ZXNJbnR9YCA6IGAke21pbnV0ZXNJbnR9YDtcbiAgICBjb25zdCBzZWNvbmRzU3RyaW5nID0gc2Vjb25kc0ludCA8IDEwID8gYDAke3NlY29uZHNJbnR9YCA6IGAke3NlY29uZHNJbnR9YDtcbiAgICByZXR1cm4gYCR7REFZU1tkYXlPZldlZWtdfSwgJHtkYXlPZk1vbnRoU3RyaW5nfSAke01PTlRIU1ttb250aF19ICR7eWVhcn0gJHtob3Vyc1N0cmluZ306JHttaW51dGVzU3RyaW5nfToke3NlY29uZHNTdHJpbmd9IEdNVGA7XG59XG5leHBvcnRzLmRhdGVUb1V0Y1N0cmluZyA9IGRhdGVUb1V0Y1N0cmluZztcbmNvbnN0IFJGQzMzMzkgPSBuZXcgUmVnRXhwKC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlbdFRdKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpP1t6Wl0kLyk7XG5jb25zdCBwYXJzZVJmYzMzMzlEYXRlVGltZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJGQy0zMzM5IGRhdGUtdGltZXMgbXVzdCBiZSBleHByZXNzZWQgYXMgc3RyaW5nc1wiKTtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSBSRkMzMzM5LmV4ZWModmFsdWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgUkZDLTMzMzkgZGF0ZS10aW1lIHZhbHVlXCIpO1xuICAgIH1cbiAgICBjb25zdCBbXywgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHNdID0gbWF0Y2g7XG4gICAgY29uc3QgeWVhciA9ICgwLCBwYXJzZV91dGlsc18xLnN0cmljdFBhcnNlU2hvcnQpKHN0cmlwTGVhZGluZ1plcm9lcyh5ZWFyU3RyKSk7XG4gICAgY29uc3QgbW9udGggPSBwYXJzZURhdGVWYWx1ZShtb250aFN0ciwgXCJtb250aFwiLCAxLCAxMik7XG4gICAgY29uc3QgZGF5ID0gcGFyc2VEYXRlVmFsdWUoZGF5U3RyLCBcImRheVwiLCAxLCAzMSk7XG4gICAgcmV0dXJuIGJ1aWxkRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIH0pO1xufTtcbmV4cG9ydHMucGFyc2VSZmMzMzM5RGF0ZVRpbWUgPSBwYXJzZVJmYzMzMzlEYXRlVGltZTtcbmNvbnN0IFJGQzMzMzlfV0lUSF9PRkZTRVQgPSBuZXcgUmVnRXhwKC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlbdFRdKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpPygoWy0rXVxcZHsyfVxcOlxcZHsyfSl8W3paXSkkLyk7XG5jb25zdCBwYXJzZVJmYzMzMzlEYXRlVGltZVdpdGhPZmZzZXQgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSRkMtMzMzOSBkYXRlLXRpbWVzIG11c3QgYmUgZXhwcmVzc2VkIGFzIHN0cmluZ3NcIik7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gUkZDMzMzOV9XSVRIX09GRlNFVC5leGVjKHZhbHVlKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFJGQy0zMzM5IGRhdGUtdGltZSB2YWx1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgW18sIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzLCBvZmZzZXRTdHJdID0gbWF0Y2g7XG4gICAgY29uc3QgeWVhciA9ICgwLCBwYXJzZV91dGlsc18xLnN0cmljdFBhcnNlU2hvcnQpKHN0cmlwTGVhZGluZ1plcm9lcyh5ZWFyU3RyKSk7XG4gICAgY29uc3QgbW9udGggPSBwYXJzZURhdGVWYWx1ZShtb250aFN0ciwgXCJtb250aFwiLCAxLCAxMik7XG4gICAgY29uc3QgZGF5ID0gcGFyc2VEYXRlVmFsdWUoZGF5U3RyLCBcImRheVwiLCAxLCAzMSk7XG4gICAgY29uc3QgZGF0ZSA9IGJ1aWxkRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIH0pO1xuICAgIGlmIChvZmZzZXRTdHIudG9VcHBlckNhc2UoKSAhPSBcIlpcIikge1xuICAgICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBwYXJzZU9mZnNldFRvTWlsbGlzZWNvbmRzKG9mZnNldFN0cikpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbn07XG5leHBvcnRzLnBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCA9IHBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldDtcbmNvbnN0IElNRl9GSVhEQVRFID0gbmV3IFJlZ0V4cCgvXig/Ok1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXGR7Mn0pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKFxcZHs0fSkgKFxcZHsxLDJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLihcXGQrKSk/IEdNVCQvKTtcbmNvbnN0IFJGQ184NTBfREFURSA9IG5ldyBSZWdFeHAoL14oPzpNb25kYXl8VHVlc2RheXxXZWRuZXNkYXl8VGh1cnNkYXl8RnJpZGF5fFNhdHVyZGF5fFN1bmRheSksIChcXGR7Mn0pLShKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYyktKFxcZHsyfSkgKFxcZHsxLDJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLihcXGQrKSk/IEdNVCQvKTtcbmNvbnN0IEFTQ19USU1FID0gbmV3IFJlZ0V4cCgvXig/Ok1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFsxLTldfFxcZHsyfSkgKFxcZHsxLDJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLihcXGQrKSk/IChcXGR7NH0pJC8pO1xuY29uc3QgcGFyc2VSZmM3MjMxRGF0ZVRpbWUgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSRkMtNzIzMSBkYXRlLXRpbWVzIG11c3QgYmUgZXhwcmVzc2VkIGFzIHN0cmluZ3NcIik7XG4gICAgfVxuICAgIGxldCBtYXRjaCA9IElNRl9GSVhEQVRFLmV4ZWModmFsdWUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbXywgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHNdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBidWlsZERhdGUoKDAsIHBhcnNlX3V0aWxzXzEuc3RyaWN0UGFyc2VTaG9ydCkoc3RyaXBMZWFkaW5nWmVyb2VzKHllYXJTdHIpKSwgcGFyc2VNb250aEJ5U2hvcnROYW1lKG1vbnRoU3RyKSwgcGFyc2VEYXRlVmFsdWUoZGF5U3RyLCBcImRheVwiLCAxLCAzMSksIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgfSk7XG4gICAgfVxuICAgIG1hdGNoID0gUkZDXzg1MF9EQVRFLmV4ZWModmFsdWUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbXywgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHNdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBhZGp1c3RSZmM4NTBZZWFyKGJ1aWxkRGF0ZShwYXJzZVR3b0RpZ2l0WWVhcih5ZWFyU3RyKSwgcGFyc2VNb250aEJ5U2hvcnROYW1lKG1vbnRoU3RyKSwgcGFyc2VEYXRlVmFsdWUoZGF5U3RyLCBcImRheVwiLCAxLCAzMSksIHtcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIHNlY29uZHMsXG4gICAgICAgICAgICBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG1hdGNoID0gQVNDX1RJTUUuZXhlYyh2YWx1ZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IFtfLCBtb250aFN0ciwgZGF5U3RyLCBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcywgeWVhclN0cl0gPSBtYXRjaDtcbiAgICAgICAgcmV0dXJuIGJ1aWxkRGF0ZSgoMCwgcGFyc2VfdXRpbHNfMS5zdHJpY3RQYXJzZVNob3J0KShzdHJpcExlYWRpbmdaZXJvZXMoeWVhclN0cikpLCBwYXJzZU1vbnRoQnlTaG9ydE5hbWUobW9udGhTdHIpLCBwYXJzZURhdGVWYWx1ZShkYXlTdHIudHJpbUxlZnQoKSwgXCJkYXlcIiwgMSwgMzEpLCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBSRkMtNzIzMSBkYXRlLXRpbWUgdmFsdWVcIik7XG59O1xuZXhwb3J0cy5wYXJzZVJmYzcyMzFEYXRlVGltZSA9IHBhcnNlUmZjNzIzMURhdGVUaW1lO1xuY29uc3QgcGFyc2VFcG9jaFRpbWVzdGFtcCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCB2YWx1ZUFzRG91YmxlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdmFsdWVBc0RvdWJsZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdmFsdWVBc0RvdWJsZSA9ICgwLCBwYXJzZV91dGlsc18xLnN0cmljdFBhcnNlRG91YmxlKSh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXBvY2ggdGltZXN0YW1wcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBmbG9hdGluZyBwb2ludCBudW1iZXJzIG9yIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvblwiKTtcbiAgICB9XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZUFzRG91YmxlKSB8fCB2YWx1ZUFzRG91YmxlID09PSBJbmZpbml0eSB8fCB2YWx1ZUFzRG91YmxlID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkVwb2NoIHRpbWVzdGFtcHMgbXVzdCBiZSB2YWxpZCwgbm9uLUluZmluaXRlLCBub24tTmFOIG51bWVyaWNzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZCh2YWx1ZUFzRG91YmxlICogMTAwMCkpO1xufTtcbmV4cG9ydHMucGFyc2VFcG9jaFRpbWVzdGFtcCA9IHBhcnNlRXBvY2hUaW1lc3RhbXA7XG5jb25zdCBidWlsZERhdGUgPSAoeWVhciwgbW9udGgsIGRheSwgdGltZSkgPT4ge1xuICAgIGNvbnN0IGFkanVzdGVkTW9udGggPSBtb250aCAtIDE7XG4gICAgdmFsaWRhdGVEYXlPZk1vbnRoKHllYXIsIGFkanVzdGVkTW9udGgsIGRheSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIGFkanVzdGVkTW9udGgsIGRheSwgcGFyc2VEYXRlVmFsdWUodGltZS5ob3VycywgXCJob3VyXCIsIDAsIDIzKSwgcGFyc2VEYXRlVmFsdWUodGltZS5taW51dGVzLCBcIm1pbnV0ZVwiLCAwLCA1OSksIHBhcnNlRGF0ZVZhbHVlKHRpbWUuc2Vjb25kcywgXCJzZWNvbmRzXCIsIDAsIDYwKSwgcGFyc2VNaWxsaXNlY29uZHModGltZS5mcmFjdGlvbmFsTWlsbGlzZWNvbmRzKSkpO1xufTtcbmNvbnN0IHBhcnNlVHdvRGlnaXRZZWFyID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdGhpc1llYXIgPSBuZXcgRGF0ZSgpLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgY29uc3QgdmFsdWVJblRoaXNDZW50dXJ5ID0gTWF0aC5mbG9vcih0aGlzWWVhciAvIDEwMCkgKiAxMDAgKyAoMCwgcGFyc2VfdXRpbHNfMS5zdHJpY3RQYXJzZVNob3J0KShzdHJpcExlYWRpbmdaZXJvZXModmFsdWUpKTtcbiAgICBpZiAodmFsdWVJblRoaXNDZW50dXJ5IDwgdGhpc1llYXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlSW5UaGlzQ2VudHVyeSArIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlSW5UaGlzQ2VudHVyeTtcbn07XG5jb25zdCBGSUZUWV9ZRUFSU19JTl9NSUxMSVMgPSA1MCAqIDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG5jb25zdCBhZGp1c3RSZmM4NTBZZWFyID0gKGlucHV0KSA9PiB7XG4gICAgaWYgKGlucHV0LmdldFRpbWUoKSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gRklGVFlfWUVBUlNfSU5fTUlMTElTKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhpbnB1dC5nZXRVVENGdWxsWWVhcigpIC0gMTAwLCBpbnB1dC5nZXRVVENNb250aCgpLCBpbnB1dC5nZXRVVENEYXRlKCksIGlucHV0LmdldFVUQ0hvdXJzKCksIGlucHV0LmdldFVUQ01pbnV0ZXMoKSwgaW5wdXQuZ2V0VVRDU2Vjb25kcygpLCBpbnB1dC5nZXRVVENNaWxsaXNlY29uZHMoKSkpO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQ7XG59O1xuY29uc3QgcGFyc2VNb250aEJ5U2hvcnROYW1lID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbW9udGhJZHggPSBNT05USFMuaW5kZXhPZih2YWx1ZSk7XG4gICAgaWYgKG1vbnRoSWR4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIG1vbnRoOiAke3ZhbHVlfWApO1xuICAgIH1cbiAgICByZXR1cm4gbW9udGhJZHggKyAxO1xufTtcbmNvbnN0IERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5jb25zdCB2YWxpZGF0ZURheU9mTW9udGggPSAoeWVhciwgbW9udGgsIGRheSkgPT4ge1xuICAgIGxldCBtYXhEYXlzID0gREFZU19JTl9NT05USFttb250aF07XG4gICAgaWYgKG1vbnRoID09PSAxICYmIGlzTGVhcFllYXIoeWVhcikpIHtcbiAgICAgICAgbWF4RGF5cyA9IDI5O1xuICAgIH1cbiAgICBpZiAoZGF5ID4gbWF4RGF5cykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGRheSBmb3IgJHtNT05USFNbbW9udGhdfSBpbiAke3llYXJ9OiAke2RheX1gKTtcbiAgICB9XG59O1xuY29uc3QgaXNMZWFwWWVhciA9ICh5ZWFyKSA9PiB7XG4gICAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufTtcbmNvbnN0IHBhcnNlRGF0ZVZhbHVlID0gKHZhbHVlLCB0eXBlLCBsb3dlciwgdXBwZXIpID0+IHtcbiAgICBjb25zdCBkYXRlVmFsID0gKDAsIHBhcnNlX3V0aWxzXzEuc3RyaWN0UGFyc2VCeXRlKShzdHJpcExlYWRpbmdaZXJvZXModmFsdWUpKTtcbiAgICBpZiAoZGF0ZVZhbCA8IGxvd2VyIHx8IGRhdGVWYWwgPiB1cHBlcikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R5cGV9IG11c3QgYmUgYmV0d2VlbiAke2xvd2VyfSBhbmQgJHt1cHBlcn0sIGluY2x1c2l2ZWApO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZVZhbDtcbn07XG5jb25zdCBwYXJzZU1pbGxpc2Vjb25kcyA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHBhcnNlX3V0aWxzXzEuc3RyaWN0UGFyc2VGbG9hdDMyKShcIjAuXCIgKyB2YWx1ZSkgKiAxMDAwO1xufTtcbmNvbnN0IHBhcnNlT2Zmc2V0VG9NaWxsaXNlY29uZHMgPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCBkaXJlY3Rpb25TdHIgPSB2YWx1ZVswXTtcbiAgICBsZXQgZGlyZWN0aW9uID0gMTtcbiAgICBpZiAoZGlyZWN0aW9uU3RyID09IFwiK1wiKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRpcmVjdGlvblN0ciA9PSBcIi1cIikge1xuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9mZnNldCBkaXJlY3Rpb24sICR7ZGlyZWN0aW9uU3RyfSwgbXVzdCBiZSBcIitcIiBvciBcIi1cImApO1xuICAgIH1cbiAgICBjb25zdCBob3VyID0gTnVtYmVyKHZhbHVlLnN1YnN0cmluZygxLCAzKSk7XG4gICAgY29uc3QgbWludXRlID0gTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSk7XG4gICAgcmV0dXJuIGRpcmVjdGlvbiAqIChob3VyICogNjAgKyBtaW51dGUpICogNjAgKiAxMDAwO1xufTtcbmNvbnN0IHN0cmlwTGVhZGluZ1plcm9lcyA9ICh2YWx1ZSkgPT4ge1xuICAgIGxldCBpZHggPSAwO1xuICAgIHdoaWxlIChpZHggPCB2YWx1ZS5sZW5ndGggLSAxICYmIHZhbHVlLmNoYXJBdChpZHgpID09PSBcIjBcIikge1xuICAgICAgICBpZHgrKztcbiAgICB9XG4gICAgaWYgKGlkeCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zbGljZShpZHgpO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbiA9IGV4cG9ydHMuU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNsYXNzIFNlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLm1lc3NhZ2UpO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gb3B0aW9ucy4kZmF1bHQ7XG4gICAgICAgIHRoaXMuJG1ldGFkYXRhID0gb3B0aW9ucy4kbWV0YWRhdGE7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2aWNlRXhjZXB0aW9uID0gU2VydmljZUV4Y2VwdGlvbjtcbmNvbnN0IGRlY29yYXRlU2VydmljZUV4Y2VwdGlvbiA9IChleGNlcHRpb24sIGFkZGl0aW9ucyA9IHt9KSA9PiB7XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkaXRpb25zKVxuICAgICAgICAuZmlsdGVyKChbLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb25ba10gPT0gdW5kZWZpbmVkIHx8IGV4Y2VwdGlvbltrXSA9PT0gXCJcIikge1xuICAgICAgICAgICAgZXhjZXB0aW9uW2tdID0gdjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24ubWVzc2FnZSB8fCBleGNlcHRpb24uTWVzc2FnZSB8fCBcIlVua25vd25FcnJvclwiO1xuICAgIGV4Y2VwdGlvbi5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICBkZWxldGUgZXhjZXB0aW9uLk1lc3NhZ2U7XG4gICAgcmV0dXJuIGV4Y2VwdGlvbjtcbn07XG5leHBvcnRzLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbiA9IGRlY29yYXRlU2VydmljZUV4Y2VwdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpdGhCYXNlRXhjZXB0aW9uID0gZXhwb3J0cy50aHJvd0RlZmF1bHRFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGV4Y2VwdGlvbnNfMSA9IHJlcXVpcmUoXCIuL2V4Y2VwdGlvbnNcIik7XG5jb25zdCB0aHJvd0RlZmF1bHRFcnJvciA9ICh7IG91dHB1dCwgcGFyc2VkQm9keSwgZXhjZXB0aW9uQ3RvciwgZXJyb3JDb2RlIH0pID0+IHtcbiAgICBjb25zdCAkbWV0YWRhdGEgPSBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCk7XG4gICAgY29uc3Qgc3RhdHVzQ29kZSA9ICRtZXRhZGF0YS5odHRwU3RhdHVzQ29kZSA/ICRtZXRhZGF0YS5odHRwU3RhdHVzQ29kZSArIFwiXCIgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBuZXcgZXhjZXB0aW9uQ3Rvcih7XG4gICAgICAgIG5hbWU6IChwYXJzZWRCb2R5ID09PSBudWxsIHx8IHBhcnNlZEJvZHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcnNlZEJvZHkuY29kZSkgfHwgKHBhcnNlZEJvZHkgPT09IG51bGwgfHwgcGFyc2VkQm9keSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyc2VkQm9keS5Db2RlKSB8fCBlcnJvckNvZGUgfHwgc3RhdHVzQ29kZSB8fCBcIlVua25vd25FcnJvclwiLFxuICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICRtZXRhZGF0YSxcbiAgICB9KTtcbiAgICB0aHJvdyAoMCwgZXhjZXB0aW9uc18xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikocmVzcG9uc2UsIHBhcnNlZEJvZHkpO1xufTtcbmV4cG9ydHMudGhyb3dEZWZhdWx0RXJyb3IgPSB0aHJvd0RlZmF1bHRFcnJvcjtcbmNvbnN0IHdpdGhCYXNlRXhjZXB0aW9uID0gKEV4Y2VwdGlvbkN0b3IpID0+IHtcbiAgICByZXR1cm4gKHsgb3V0cHV0LCBwYXJzZWRCb2R5LCBlcnJvckNvZGUgfSkgPT4ge1xuICAgICAgICAoMCwgZXhwb3J0cy50aHJvd0RlZmF1bHRFcnJvcikoeyBvdXRwdXQsIHBhcnNlZEJvZHksIGV4Y2VwdGlvbkN0b3I6IEV4Y2VwdGlvbkN0b3IsIGVycm9yQ29kZSB9KTtcbiAgICB9O1xufTtcbmV4cG9ydHMud2l0aEJhc2VFeGNlcHRpb24gPSB3aXRoQmFzZUV4Y2VwdGlvbjtcbmNvbnN0IGRlc2VyaWFsaXplTWV0YWRhdGEgPSAob3V0cHV0KSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKHtcbiAgICAgICAgaHR0cFN0YXR1c0NvZGU6IG91dHB1dC5zdGF0dXNDb2RlLFxuICAgICAgICByZXF1ZXN0SWQ6IChfYiA9IChfYSA9IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1yZXF1ZXN0LWlkXCJdLFxuICAgICAgICBleHRlbmRlZFJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICAgICAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxuICAgIH0pO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGUgPSB2b2lkIDA7XG5jb25zdCBsb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlID0gKG1vZGUpID0+IHtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcInN0YW5kYXJkXCI6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5TW9kZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiAzMTAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImluLXJlZ2lvblwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXRyeU1vZGU6IFwic3RhbmRhcmRcIixcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogMTEwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJjcm9zcy1yZWdpb25cIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmV0cnlNb2RlOiBcInN0YW5kYXJkXCIsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IDMxMDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwibW9iaWxlXCI6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5TW9kZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiAzMDAwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgfVxufTtcbmV4cG9ydHMubG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZSA9IGxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uID0gdm9pZCAwO1xubGV0IHdhcm5pbmdFbWl0dGVkID0gZmFsc2U7XG5jb25zdCBlbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uID0gKHZlcnNpb24pID0+IHtcbiAgICBpZiAodmVyc2lvbiAmJiAhd2FybmluZ0VtaXR0ZWQgJiYgcGFyc2VJbnQodmVyc2lvbi5zdWJzdHJpbmcoMSwgdmVyc2lvbi5pbmRleE9mKFwiLlwiKSkpIDwgMTQpIHtcbiAgICAgICAgd2FybmluZ0VtaXR0ZWQgPSB0cnVlO1xuICAgIH1cbn07XG5leHBvcnRzLmVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb24gPSBlbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQgPSB2b2lkIDA7XG5mdW5jdGlvbiBleHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudChzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50ID0gZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcnJheUlmU2luZ2xlSXRlbSA9IHZvaWQgMDtcbmNvbnN0IGdldEFycmF5SWZTaW5nbGVJdGVtID0gKG1heUJlQXJyYXkpID0+IEFycmF5LmlzQXJyYXkobWF5QmVBcnJheSkgPyBtYXlCZUFycmF5IDogW21heUJlQXJyYXldO1xuZXhwb3J0cy5nZXRBcnJheUlmU2luZ2xlSXRlbSA9IGdldEFycmF5SWZTaW5nbGVJdGVtO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VmFsdWVGcm9tVGV4dE5vZGUgPSB2b2lkIDA7XG5jb25zdCBnZXRWYWx1ZUZyb21UZXh0Tm9kZSA9IChvYmopID0+IHtcbiAgICBjb25zdCB0ZXh0Tm9kZU5hbWUgPSBcIiN0ZXh0XCI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmpba2V5XVt0ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gb2JqW2tleV1bdGV4dE5vZGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gKDAsIGV4cG9ydHMuZ2V0VmFsdWVGcm9tVGV4dE5vZGUpKG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcbmV4cG9ydHMuZ2V0VmFsdWVGcm9tVGV4dE5vZGUgPSBnZXRWYWx1ZUZyb21UZXh0Tm9kZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxhenlKc29uU3RyaW5nID0gZXhwb3J0cy5TdHJpbmdXcmFwcGVyID0gdm9pZCAwO1xuY29uc3QgU3RyaW5nV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoU3RyaW5nLCBbbnVsbCwgLi4uYXJndW1lbnRzXSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufTtcbmV4cG9ydHMuU3RyaW5nV3JhcHBlciA9IFN0cmluZ1dyYXBwZXI7XG5leHBvcnRzLlN0cmluZ1dyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdHJpbmcucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGV4cG9ydHMuU3RyaW5nV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSxcbn0pO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKGV4cG9ydHMuU3RyaW5nV3JhcHBlciwgU3RyaW5nKTtcbmNsYXNzIExhenlKc29uU3RyaW5nIGV4dGVuZHMgZXhwb3J0cy5TdHJpbmdXcmFwcGVyIHtcbiAgICBkZXNlcmlhbGl6ZUpTT04oKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN1cGVyLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExhenlKc29uU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhenlKc29uU3RyaW5nKG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5SnNvblN0cmluZyhKU09OLnN0cmluZ2lmeShvYmplY3QpKTtcbiAgICB9XG59XG5leHBvcnRzLkxhenlKc29uU3RyaW5nID0gTGF6eUpzb25TdHJpbmc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlID0gZXhwb3J0cy5jb252ZXJ0TWFwID0gZXhwb3J0cy5tYXAgPSB2b2lkIDA7XG5mdW5jdGlvbiBtYXAoYXJnMCwgYXJnMSwgYXJnMikge1xuICAgIGxldCB0YXJnZXQ7XG4gICAgbGV0IGZpbHRlcjtcbiAgICBsZXQgaW5zdHJ1Y3Rpb25zO1xuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgYXJnMiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB0YXJnZXQgPSB7fTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYXJnMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhcmdldCA9IGFyZzA7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBmaWx0ZXIgPSBhcmcxO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYXJnMjtcbiAgICAgICAgICAgIHJldHVybiBtYXBXaXRoRmlsdGVyKHRhcmdldCwgZmlsdGVyLCBpbnN0cnVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYXJnMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnN0cnVjdGlvbnMpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvbnNba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gaW5zdHJ1Y3Rpb25zW2tleV07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseUluc3RydWN0aW9uKHRhcmdldCwgbnVsbCwgaW5zdHJ1Y3Rpb25zLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZXhwb3J0cy5tYXAgPSBtYXA7XG5jb25zdCBjb252ZXJ0TWFwID0gKHRhcmdldCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRhcmdldCB8fCB7fSkpIHtcbiAgICAgICAgb3V0cHV0W2tdID0gWywgdl07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuZXhwb3J0cy5jb252ZXJ0TWFwID0gY29udmVydE1hcDtcbmNvbnN0IHRha2UgPSAoc291cmNlLCBpbnN0cnVjdGlvbnMpID0+IHtcbiAgICBjb25zdCBvdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgYXBwbHlJbnN0cnVjdGlvbihvdXQsIHNvdXJjZSwgaW5zdHJ1Y3Rpb25zLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufTtcbmV4cG9ydHMudGFrZSA9IHRha2U7XG5jb25zdCBtYXBXaXRoRmlsdGVyID0gKHRhcmdldCwgZmlsdGVyLCBpbnN0cnVjdGlvbnMpID0+IHtcbiAgICByZXR1cm4gbWFwKHRhcmdldCwgT2JqZWN0LmVudHJpZXMoaW5zdHJ1Y3Rpb25zKS5yZWR1Y2UoKF9pbnN0cnVjdGlvbnMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIF9pbnN0cnVjdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgX2luc3RydWN0aW9uc1trZXldID0gW2ZpbHRlciwgdmFsdWUoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfaW5zdHJ1Y3Rpb25zW2tleV0gPSBbZmlsdGVyLCB2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9pbnN0cnVjdGlvbnM7XG4gICAgfSwge30pKTtcbn07XG5jb25zdCBhcHBseUluc3RydWN0aW9uID0gKHRhcmdldCwgc291cmNlLCBpbnN0cnVjdGlvbnMsIHRhcmdldEtleSkgPT4ge1xuICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW3RhcmdldEtleV07XG4gICAgICAgIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSBbLCBpbnN0cnVjdGlvbl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2ZpbHRlciA9IG5vbk51bGxpc2gsIHZhbHVlRm4gPSBwYXNzLCBzb3VyY2VLZXkgPSB0YXJnZXRLZXldID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgIGlmICgodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiICYmIGZpbHRlcihzb3VyY2Vbc291cmNlS2V5XSkpIHx8ICh0eXBlb2YgZmlsdGVyICE9PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXIpKSB7XG4gICAgICAgICAgICB0YXJnZXRbdGFyZ2V0S2V5XSA9IHZhbHVlRm4oc291cmNlW3NvdXJjZUtleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IFtmaWx0ZXIsIHZhbHVlXSA9IGluc3RydWN0aW9uc1t0YXJnZXRLZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBsZXQgX3ZhbHVlO1xuICAgICAgICBjb25zdCBkZWZhdWx0RmlsdGVyUGFzc2VkID0gZmlsdGVyID09PSB1bmRlZmluZWQgJiYgKF92YWx1ZSA9IHZhbHVlKCkpICE9IG51bGw7XG4gICAgICAgIGNvbnN0IGN1c3RvbUZpbHRlclBhc3NlZCA9ICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXIodm9pZCAwKSkgfHwgKHR5cGVvZiBmaWx0ZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhIWZpbHRlcik7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyUGFzc2VkKSB7XG4gICAgICAgICAgICB0YXJnZXRbdGFyZ2V0S2V5XSA9IF92YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b21GaWx0ZXJQYXNzZWQpIHtcbiAgICAgICAgICAgIHRhcmdldFt0YXJnZXRLZXldID0gdmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlclBhc3NlZCA9IGZpbHRlciA9PT0gdW5kZWZpbmVkICYmIHZhbHVlICE9IG51bGw7XG4gICAgICAgIGNvbnN0IGN1c3RvbUZpbHRlclBhc3NlZCA9ICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXIodmFsdWUpKSB8fCAodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiICYmICEhZmlsdGVyKTtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJQYXNzZWQgfHwgY3VzdG9tRmlsdGVyUGFzc2VkKSB7XG4gICAgICAgICAgICB0YXJnZXRbdGFyZ2V0S2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IG5vbk51bGxpc2ggPSAoXykgPT4gXyAhPSBudWxsO1xuY29uc3QgcGFzcyA9IChfKSA9PiBfO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZWRQYXRoID0gdm9pZCAwO1xuY29uc3QgZXh0ZW5kZWRfZW5jb2RlX3VyaV9jb21wb25lbnRfMSA9IHJlcXVpcmUoXCIuL2V4dGVuZGVkLWVuY29kZS11cmktY29tcG9uZW50XCIpO1xuY29uc3QgcmVzb2x2ZWRQYXRoID0gKHJlc29sdmVkUGF0aCwgaW5wdXQsIG1lbWJlck5hbWUsIGxhYmVsVmFsdWVQcm92aWRlciwgdXJpTGFiZWwsIGlzR3JlZWR5TGFiZWwpID0+IHtcbiAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dFttZW1iZXJOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsVmFsdWUgPSBsYWJlbFZhbHVlUHJvdmlkZXIoKTtcbiAgICAgICAgaWYgKGxhYmVsVmFsdWUubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IHZhbHVlIHByb3ZpZGVkIGZvciBpbnB1dCBIVFRQIGxhYmVsOiBcIiArIG1lbWJlck5hbWUgKyBcIi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZWRQYXRoLnJlcGxhY2UodXJpTGFiZWwsIGlzR3JlZWR5TGFiZWxcbiAgICAgICAgICAgID8gbGFiZWxWYWx1ZVxuICAgICAgICAgICAgICAgIC5zcGxpdChcIi9cIilcbiAgICAgICAgICAgICAgICAubWFwKChzZWdtZW50KSA9PiAoMCwgZXh0ZW5kZWRfZW5jb2RlX3VyaV9jb21wb25lbnRfMS5leHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudCkoc2VnbWVudCkpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIvXCIpXG4gICAgICAgICAgICA6ICgwLCBleHRlbmRlZF9lbmNvZGVfdXJpX2NvbXBvbmVudF8xLmV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KShsYWJlbFZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgaW5wdXQgSFRUUCBsYWJlbDogXCIgKyBtZW1iZXJOYW1lICsgXCIuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWRQYXRoO1xufTtcbmV4cG9ydHMucmVzb2x2ZWRQYXRoID0gcmVzb2x2ZWRQYXRoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VyaWFsaXplRmxvYXQgPSB2b2lkIDA7XG5jb25zdCBzZXJpYWxpemVGbG9hdCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFwiTmFOXCI7XG4gICAgfVxuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSBJbmZpbml0eTpcbiAgICAgICAgICAgIHJldHVybiBcIkluZmluaXR5XCI7XG4gICAgICAgIGNhc2UgLUluZmluaXR5OlxuICAgICAgICAgICAgcmV0dXJuIFwiLUluZmluaXR5XCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcbmV4cG9ydHMuc2VyaWFsaXplRmxvYXQgPSBzZXJpYWxpemVGbG9hdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9qc29uID0gdm9pZCAwO1xuY29uc3QgX2pzb24gPSAob2JqKSA9PiB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLmZpbHRlcigoXykgPT4gXyAhPSBudWxsKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGlmIChvYmpba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9ICgwLCBleHBvcnRzLl9qc29uKShvYmpba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5leHBvcnRzLl9qc29uID0gX2pzb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zcGxpdEV2ZXJ5ID0gdm9pZCAwO1xuZnVuY3Rpb24gc3BsaXRFdmVyeSh2YWx1ZSwgZGVsaW1pdGVyLCBudW1EZWxpbWl0ZXJzKSB7XG4gICAgaWYgKG51bURlbGltaXRlcnMgPD0gMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihudW1EZWxpbWl0ZXJzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBkZWxpbWl0ZXJzIChcIiArIG51bURlbGltaXRlcnMgKyBcIikgZm9yIHNwbGl0RXZlcnkuXCIpO1xuICAgIH1cbiAgICBjb25zdCBzZWdtZW50cyA9IHZhbHVlLnNwbGl0KGRlbGltaXRlcik7XG4gICAgaWYgKG51bURlbGltaXRlcnMgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzO1xuICAgIH1cbiAgICBjb25zdCBjb21wb3VuZFNlZ21lbnRzID0gW107XG4gICAgbGV0IGN1cnJlbnRTZWdtZW50ID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50U2VnbWVudCA9PT0gXCJcIikge1xuICAgICAgICAgICAgY3VycmVudFNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRTZWdtZW50ICs9IGRlbGltaXRlciArIHNlZ21lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaSArIDEpICUgbnVtRGVsaW1pdGVycyA9PT0gMCkge1xuICAgICAgICAgICAgY29tcG91bmRTZWdtZW50cy5wdXNoKGN1cnJlbnRTZWdtZW50KTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWdtZW50ID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3VycmVudFNlZ21lbnQgIT09IFwiXCIpIHtcbiAgICAgICAgY29tcG91bmRTZWdtZW50cy5wdXNoKGN1cnJlbnRTZWdtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvdW5kU2VnbWVudHM7XG59XG5leHBvcnRzLnNwbGl0RXZlcnkgPSBzcGxpdEV2ZXJ5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Ob09wTG9nZ2VyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jcmVhdGUtYWdncmVnYXRlZC1jbGllbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGF0ZS11dGlsc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kZWZhdWx0LWVycm9yLWhhbmRsZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGVmYXVsdHMtbW9kZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V4Y2VwdGlvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXh0ZW5kZWQtZW5jb2RlLXVyaS1jb21wb25lbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2V0LWFycmF5LWlmLXNpbmdsZS1pdGVtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dldC12YWx1ZS1mcm9tLXRleHQtbm9kZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sYXp5LWpzb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vb2JqZWN0LW1hcHBpbmdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFyc2UtdXRpbHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzb2x2ZS1wYXRoXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Nlci11dGlsc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJkZS1qc29uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NwbGl0LWV2ZXJ5XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSB2b2lkIDA7XG5jb25zdCByZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogb3B0aW9ucy51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBvcHRpb25zLnVzZUZpcHNFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFNpZ25pbmdOYW1lOiBcImNvZ25pdG8taWRlbnRpdHlcIixcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU3RzQXV0aENvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHJlc29sdmVTdHNBdXRoQ29uZmlnID0gKGlucHV0LCB7IHN0c0NsaWVudEN0b3IgfSkgPT4gKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLnJlc29sdmVBd3NBdXRoQ29uZmlnKSh7XG4gICAgLi4uaW5wdXQsXG4gICAgc3RzQ2xpZW50Q3Rvcixcbn0pO1xuZXhwb3J0cy5yZXNvbHZlU3RzQXV0aENvbmZpZyA9IHJlc29sdmVTdHNBdXRoQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHZvaWQgMDtcbmNvbnN0IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBvcHRpb25zLnVzZUR1YWxzdGFja0VuZHBvaW50ID8/IGZhbHNlLFxuICAgICAgICB1c2VGaXBzRW5kcG9pbnQ6IG9wdGlvbnMudXNlRmlwc0VuZHBvaW50ID8/IGZhbHNlLFxuICAgICAgICB1c2VHbG9iYWxFbmRwb2ludDogb3B0aW9ucy51c2VHbG9iYWxFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFNpZ25pbmdOYW1lOiBcInN0c1wiLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNUU1NlcnZpY2VFeGNlcHRpb24gPSBleHBvcnRzLl9fU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19TZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbmNsYXNzIFNUU1NlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFNUU1NlcnZpY2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlNUU1NlcnZpY2VFeGNlcHRpb24gPSBTVFNTZXJ2aWNlRXhjZXB0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0U2Vzc2lvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkdldEZlZGVyYXRpb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuQXNzdW1lUm9sZVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uID0gZXhwb3J0cy5JRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLkludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uID0gZXhwb3J0cy5JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uID0gZXhwb3J0cy5SZWdpb25EaXNhYmxlZEV4Y2VwdGlvbiA9IGV4cG9ydHMuUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb24gPSBleHBvcnRzLk1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uID0gZXhwb3J0cy5FeHBpcmVkVG9rZW5FeGNlcHRpb24gPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IFNUU1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuL1NUU1NlcnZpY2VFeGNlcHRpb25cIik7XG5jbGFzcyBFeHBpcmVkVG9rZW5FeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkV4cGlyZWRUb2tlbkV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEV4cGlyZWRUb2tlbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuRXhwaXJlZFRva2VuRXhjZXB0aW9uID0gRXhwaXJlZFRva2VuRXhjZXB0aW9uO1xuY2xhc3MgTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIk1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb24gPSBNYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbjtcbmNsYXNzIFBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJQYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uID0gUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb247XG5jbGFzcyBSZWdpb25EaXNhYmxlZEV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5SZWdpb25EaXNhYmxlZEV4Y2VwdGlvbiA9IFJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uO1xuY2xhc3MgSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uID0gSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbjtcbmNsYXNzIEludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uID0gSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb247XG5jbGFzcyBJRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIklEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIElEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uID0gSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uO1xuY2xhc3MgSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvbiA9IEludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvbjtcbmNvbnN0IENyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5TZWNyZXRBY2Nlc3NLZXkgJiYgeyBTZWNyZXRBY2Nlc3NLZXk6IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBBc3N1bWVSb2xlUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLkNyZWRlbnRpYWxzICYmIHsgQ3JlZGVudGlhbHM6ICgwLCBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nKShvYmouQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkFzc3VtZVJvbGVSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IEFzc3VtZVJvbGVSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEFzc3VtZVJvbGVXaXRoU0FNTFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLlNBTUxBc3NlcnRpb24gJiYgeyBTQU1MQXNzZXJ0aW9uOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5DcmVkZW50aWFscyAmJiB7IENyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZykob2JqLkNyZWRlbnRpYWxzKSB9KSxcbn0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IEFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLldlYklkZW50aXR5VG9rZW4gJiYgeyBXZWJJZGVudGl0eVRva2VuOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5DcmVkZW50aWFscyAmJiB7IENyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZykob2JqLkNyZWRlbnRpYWxzKSB9KSxcbn0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBHZXRGZWRlcmF0aW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouQ3JlZGVudGlhbHMgJiYgeyBDcmVkZW50aWFsczogKDAsIGV4cG9ydHMuQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5DcmVkZW50aWFscykgfSksXG59KTtcbmV4cG9ydHMuR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBHZXRGZWRlcmF0aW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEdldFNlc3Npb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5DcmVkZW50aWFscyAmJiB7IENyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZykob2JqLkNyZWRlbnRpYWxzKSB9KSxcbn0pO1xuZXhwb3J0cy5HZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IEdldFNlc3Npb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBBdXRoTG9jYXRpb24gPSB2b2lkIDA7XG52YXIgSHR0cEF1dGhMb2NhdGlvbjtcbihmdW5jdGlvbiAoSHR0cEF1dGhMb2NhdGlvbikge1xuICAgIEh0dHBBdXRoTG9jYXRpb25bXCJIRUFERVJcIl0gPSBcImhlYWRlclwiO1xuICAgIEh0dHBBdXRoTG9jYXRpb25bXCJRVUVSWVwiXSA9IFwicXVlcnlcIjtcbn0pKEh0dHBBdXRoTG9jYXRpb24gPSBleHBvcnRzLkh0dHBBdXRoTG9jYXRpb24gfHwgKGV4cG9ydHMuSHR0cEF1dGhMb2NhdGlvbiA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25maWdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWFuYWdlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wb29sXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW5kcG9pbnRVUkxTY2hlbWUgPSB2b2lkIDA7XG52YXIgRW5kcG9pbnRVUkxTY2hlbWU7XG4oZnVuY3Rpb24gKEVuZHBvaW50VVJMU2NoZW1lKSB7XG4gICAgRW5kcG9pbnRVUkxTY2hlbWVbXCJIVFRQXCJdID0gXCJodHRwXCI7XG4gICAgRW5kcG9pbnRVUkxTY2hlbWVbXCJIVFRQU1wiXSA9IFwiaHR0cHNcIjtcbn0pKEVuZHBvaW50VVJMU2NoZW1lID0gZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSB8fCAoZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRW5kcG9pbnRSdWxlT2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Vycm9yUnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9SdWxlU2V0T2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NoYXJlZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9UcmVlUnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmllbGRQb3NpdGlvbiA9IHZvaWQgMDtcbnZhciBGaWVsZFBvc2l0aW9uO1xuKGZ1bmN0aW9uIChGaWVsZFBvc2l0aW9uKSB7XG4gICAgRmllbGRQb3NpdGlvbltGaWVsZFBvc2l0aW9uW1wiSEVBREVSXCJdID0gMF0gPSBcIkhFQURFUlwiO1xuICAgIEZpZWxkUG9zaXRpb25bRmllbGRQb3NpdGlvbltcIlRSQUlMRVJcIl0gPSAxXSA9IFwiVFJBSUxFUlwiO1xufSkoRmllbGRQb3NpdGlvbiA9IGV4cG9ydHMuRmllbGRQb3NpdGlvbiB8fCAoZXhwb3J0cy5GaWVsZFBvc2l0aW9uID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hd3NDcmVkZW50aWFsSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaWRlbnRpdHlcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSB2b2lkIDA7XG52YXIgUmVxdWVzdEhhbmRsZXJQcm90b2NvbDtcbihmdW5jdGlvbiAoUmVxdWVzdEhhbmRsZXJQcm90b2NvbCkge1xuICAgIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xbXCJIVFRQXzBfOVwiXSA9IFwiaHR0cC8wLjlcIjtcbiAgICBSZXF1ZXN0SGFuZGxlclByb3RvY29sW1wiSFRUUF8xXzBcIl0gPSBcImh0dHAvMS4wXCI7XG4gICAgUmVxdWVzdEhhbmRsZXJQcm90b2NvbFtcIlREU184XzBcIl0gPSBcInRkcy84LjBcIjtcbn0pKFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSBleHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgfHwgKGV4cG9ydHMuUmVxdWVzdEhhbmRsZXJQcm90b2NvbCA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYWJvcnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYXV0aFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ibG9iL2Jsb2ItcGF5bG9hZC1pbnB1dC10eXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jaGVja3N1bVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jbGllbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25uZWN0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NyeXB0b1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbmNvZGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW5kcG9pbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW5kcG9pbnRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V2ZW50U3RyZWFtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9nZ2VyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFnaW5hdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wcm9maWxlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc3BvbnNlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3JldHJ5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NlcmRlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NoYXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaWduYXR1cmVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyZWFtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmVhbWluZy1wYXlsb2FkL3N0cmVhbWluZy1ibG9iLWNvbW1vbi10eXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1wYXlsb2FkLWlucHV0LXR5cGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmVhbWluZy1wYXlsb2FkL3N0cmVhbWluZy1ibG9iLXBheWxvYWQtb3V0cHV0LXR5cGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyYW5zZmVyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyYW5zZm9ybS9jbGllbnQtcGF5bG9hZC1ibG9iLXR5cGUtbmFycm93XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyYW5zZm9ybS90eXBlLXRyYW5zZm9ybVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91cmlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi93YWl0ZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmllbGQgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jbGFzcyBGaWVsZCB7XG4gICAgY29uc3RydWN0b3IoeyBuYW1lLCBraW5kID0gdHlwZXNfMS5GaWVsZFBvc2l0aW9uLkhFQURFUiwgdmFsdWVzID0gW10gfSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgICB9XG4gICAgYWRkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBzZXQodmFsdWVzKSB7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xuICAgIH1cbiAgICByZW1vdmUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5maWx0ZXIoKHYpID0+IHYgIT09IHZhbHVlKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5tYXAoKHYpID0+ICh2LmluY2x1ZGVzKFwiLFwiKSB8fCB2LmluY2x1ZGVzKFwiIFwiKSA/IGBcIiR7dn1cImAgOiB2KSkuam9pbihcIiwgXCIpO1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgICB9XG59XG5leHBvcnRzLkZpZWxkID0gRmllbGQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GaWVsZHMgPSB2b2lkIDA7XG5jbGFzcyBGaWVsZHMge1xuICAgIGNvbnN0cnVjdG9yKHsgZmllbGRzID0gW10sIGVuY29kaW5nID0gXCJ1dGYtOFwiIH0pIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0ge307XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKHRoaXMuc2V0RmllbGQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB9XG4gICAgc2V0RmllbGQoZmllbGQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzW2ZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKV0gPSBmaWVsZDtcbiAgICB9XG4gICAgZ2V0RmllbGQobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzW25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuICAgIHJlbW92ZUZpZWxkKG5hbWUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZW50cmllc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbiAgICBnZXRCeVR5cGUoa2luZCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmVudHJpZXMpLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmtpbmQgPT09IGtpbmQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRmllbGRzID0gRmllbGRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBSZXF1ZXN0ID0gdm9pZCAwO1xuY2xhc3MgSHR0cFJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiO1xuICAgICAgICB0aGlzLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0bmFtZSB8fCBcImxvY2FsaG9zdFwiO1xuICAgICAgICB0aGlzLnBvcnQgPSBvcHRpb25zLnBvcnQ7XG4gICAgICAgIHRoaXMucXVlcnkgPSBvcHRpb25zLnF1ZXJ5IHx8IHt9O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgICAgIHRoaXMuYm9keSA9IG9wdGlvbnMuYm9keTtcbiAgICAgICAgdGhpcy5wcm90b2NvbCA9IG9wdGlvbnMucHJvdG9jb2xcbiAgICAgICAgICAgID8gb3B0aW9ucy5wcm90b2NvbC5zbGljZSgtMSkgIT09IFwiOlwiXG4gICAgICAgICAgICAgICAgPyBgJHtvcHRpb25zLnByb3RvY29sfTpgXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLnByb3RvY29sXG4gICAgICAgICAgICA6IFwiaHR0cHM6XCI7XG4gICAgICAgIHRoaXMucGF0aCA9IG9wdGlvbnMucGF0aCA/IChvcHRpb25zLnBhdGguY2hhckF0KDApICE9PSBcIi9cIiA/IGAvJHtvcHRpb25zLnBhdGh9YCA6IG9wdGlvbnMucGF0aCkgOiBcIi9cIjtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWU7XG4gICAgICAgIHRoaXMucGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkO1xuICAgICAgICB0aGlzLmZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudDtcbiAgICB9XG4gICAgc3RhdGljIGlzSW5zdGFuY2UocmVxdWVzdCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlcSA9IHJlcXVlc3Q7XG4gICAgICAgIHJldHVybiAoXCJtZXRob2RcIiBpbiByZXEgJiZcbiAgICAgICAgICAgIFwicHJvdG9jb2xcIiBpbiByZXEgJiZcbiAgICAgICAgICAgIFwiaG9zdG5hbWVcIiBpbiByZXEgJiZcbiAgICAgICAgICAgIFwicGF0aFwiIGluIHJlcSAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlcVtcInF1ZXJ5XCJdID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVxW1wiaGVhZGVyc1wiXSA9PT0gXCJvYmplY3RcIik7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgSHR0cFJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2xvbmVkLnF1ZXJ5KVxuICAgICAgICAgICAgY2xvbmVkLnF1ZXJ5ID0gY2xvbmVRdWVyeShjbG9uZWQucXVlcnkpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cFJlcXVlc3QgPSBIdHRwUmVxdWVzdDtcbmZ1bmN0aW9uIGNsb25lUXVlcnkocXVlcnkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocXVlcnkpLnJlZHVjZSgoY2FycnksIHBhcmFtTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbSA9IHF1ZXJ5W3BhcmFtTmFtZV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgICAgIFtwYXJhbU5hbWVdOiBBcnJheS5pc0FycmF5KHBhcmFtKSA/IFsuLi5wYXJhbV0gOiBwYXJhbSxcbiAgICAgICAgfTtcbiAgICB9LCB7fSk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwUmVzcG9uc2UgPSB2b2lkIDA7XG5jbGFzcyBIdHRwUmVzcG9uc2Uge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICB0aGlzLnJlYXNvbiA9IG9wdGlvbnMucmVhc29uO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgICAgIHRoaXMuYm9keSA9IG9wdGlvbnMuYm9keTtcbiAgICB9XG4gICAgc3RhdGljIGlzSW5zdGFuY2UocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJlc3Auc3RhdHVzQ29kZSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcmVzcC5oZWFkZXJzID09PSBcIm9iamVjdFwiO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cFJlc3BvbnNlID0gSHR0cFJlc3BvbnNlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNWYWxpZEhvc3RuYW1lID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNWYWxpZEhvc3RuYW1lKGhvc3RuYW1lKSB7XG4gICAgY29uc3QgaG9zdFBhdHRlcm4gPSAvXlthLXowLTldW2EtejAtOVxcLlxcLV0qW2EtejAtOV0kLztcbiAgICByZXR1cm4gaG9zdFBhdHRlcm4udGVzdChob3N0bmFtZSk7XG59XG5leHBvcnRzLmlzVmFsaWRIb3N0bmFtZSA9IGlzVmFsaWRIb3N0bmFtZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ZpZWxkXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ZpZWxkc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9odHRwSGFuZGxlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9odHRwUmVxdWVzdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9odHRwUmVzcG9uc2VcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNWYWxpZEhvc3RuYW1lXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBuYW1lU3RhcnRDaGFyID0gJzpBLVphLXpfXFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkQnO1xuY29uc3QgbmFtZUNoYXIgPSBuYW1lU3RhcnRDaGFyICsgJ1xcXFwtLlxcXFxkXFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDAnO1xuY29uc3QgbmFtZVJlZ2V4cCA9ICdbJyArIG5hbWVTdGFydENoYXIgKyAnXVsnICsgbmFtZUNoYXIgKyAnXSonXG5jb25zdCByZWdleE5hbWUgPSBuZXcgUmVnRXhwKCdeJyArIG5hbWVSZWdleHAgKyAnJCcpO1xuXG5jb25zdCBnZXRBbGxNYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkge1xuICBjb25zdCBtYXRjaGVzID0gW107XG4gIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgY29uc3QgYWxsbWF0Y2hlcyA9IFtdO1xuICAgIGFsbG1hdGNoZXMuc3RhcnRJbmRleCA9IHJlZ2V4Lmxhc3RJbmRleCAtIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChhcnJheU1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IFsgYVtrZXlzW2ldXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gYVtrZXlzW2ldXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4vKiBleHBvcnRzLm1lcmdlID1mdW5jdGlvbiAoYixhKXtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYixhKTtcbn0gKi9cblxuZXhwb3J0cy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgaWYgKGV4cG9ydHMuaXNFeGlzdCh2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLy8gY29uc3QgZmFrZUNhbGwgPSBmdW5jdGlvbihhKSB7cmV0dXJuIGE7fTtcbi8vIGNvbnN0IGZha2VDYWxsTm9SZXR1cm4gPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnRzLmlzTmFtZSA9IGlzTmFtZTtcbmV4cG9ydHMuZ2V0QWxsTWF0Y2hlcyA9IGdldEFsbE1hdGNoZXM7XG5leHBvcnRzLm5hbWVSZWdleHAgPSBuYW1lUmVnZXhwO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL0EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgdW5wYWlyZWRUYWdzOiBbXVxufTtcblxuLy9jb25zdCB0YWdzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCI8XFxcXC8/KFtcXFxcdzpcXFxcLV9cXC5dKylcXFxccypcXC8/PlwiLFwiZ1wiKTtcbmV4cG9ydHMudmFsaWRhdGUgPSBmdW5jdGlvbiAoeG1sRGF0YSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuICBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnICYmIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG4gICAgICBpKz0yO1xuICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLGkpO1xuICAgICAgaWYgKGkuZXJyKSByZXR1cm4gaTtcbiAgICB9ZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAvL3N0YXJ0aW5nIG9mIHRhZ1xuICAgICAgLy9yZWFkIHVudGlsIHlvdSByZWFjaCB0byAnPicgYXZvaWRpbmcgYW55ICc+JyBpbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIGxldCB0YWdTdGFydFBvcyA9IGk7XG4gICAgICBpKys7XG4gICAgICBcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnIScpIHtcbiAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsb3NpbmdUYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICcvJykge1xuICAgICAgICAgIC8vY2xvc2luZyB0YWdcbiAgICAgICAgICBjbG9zaW5nVGFnID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWFkIHRhZ25hbWVcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAnJztcbiAgICAgICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICc+JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICcgJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHQnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcbicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxyJzsgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHRhZ05hbWUgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS50cmltKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGFnTmFtZSk7XG5cbiAgICAgICAgaWYgKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnIHdpdGhvdXQgYXR0cmlidXRlc1xuICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVUYWdOYW1lKHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICBpZiAodGFnTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtc2cgPSBcIkludmFsaWQgc3BhY2UgYWZ0ZXIgJzwnLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgY29uc3QgYXR0clN0clN0YXJ0ID0gaSAtIGF0dHJTdHIubGVuZ3RoO1xuICAgICAgICAgIGF0dHJTdHIgPSBhdHRyU3RyLnN1YnN0cmluZygwLCBhdHRyU3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGFnRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgLy9jb250aW51ZTsgLy90ZXh0IG1heSBwcmVzZW50cyBhZnRlciBzZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGF0dHJTdHJTdGFydCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xvc2luZ1RhZykge1xuICAgICAgICAgIGlmICghcmVzdWx0LnRhZ0Nsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgZG9lc24ndCBoYXZlIHByb3BlciBjbG9zaW5nLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0clN0ci50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgY2FuJ3QgaGF2ZSBhdHRyaWJ1dGVzIG9yIGludmFsaWQgc3RhcnRpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvdGcgPSB0YWdzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRhZ05hbWUgIT09IG90Zy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgIGxldCBvcGVuUG9zID0gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIG90Zy50YWdTdGFydFBvcyk7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjbG9zaW5nIHRhZyAnXCIrb3RnLnRhZ05hbWUrXCInIChvcGVuZWQgaW4gbGluZSBcIitvcGVuUG9zLmxpbmUrXCIsIGNvbCBcIitvcGVuUG9zLmNvbCtcIikgaW5zdGVhZCBvZiBjbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicuXCIsXG4gICAgICAgICAgICAgICAgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0YWdzLCB3ZSByZWFjaGVkIHRoZSByb290IGxldmVsLlxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgcmVhY2hlZFJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGlzVmFsaWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkgLSBhdHRyU3RyLmxlbmd0aCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL2lmIHRoZSByb290IGxldmVsIGhhcyBiZWVuIHJlYWNoZWQgYmVmb3JlIC4uLlxuICAgICAgICAgIGlmIChyZWFjaGVkUm9vdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgJ011bHRpcGxlIHBvc3NpYmxlIHJvb3Qgbm9kZXMgZm91bmQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgLy9kb24ndCBwdXNoIGludG8gc3RhY2tcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lLCB0YWdTdGFydFBvc30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NraXAgdGFnIHRleHQgdmFsdWVcbiAgICAgICAgLy9JdCBtYXkgaW5jbHVkZSBjb21tZW50cyBhbmQgQ0RBVEEgdmFsdWVcbiAgICAgICAgZm9yIChpKys7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaSArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgLy9jb21tZW50IG9yIENBREFUQVxuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLCArK2kpO1xuICAgICAgICAgICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICcmJykge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJBbXAgPSB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgICAgICAgICAgIGlmIChhZnRlckFtcCA9PSAtMSlcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnJicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgaSA9IGFmdGVyQW1wO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlICYmICFpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJFeHRyYSB0ZXh0IGF0IHRoZSBlbmRcIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggaXNXaGl0ZVNwYWNlKHhtbERhdGFbaV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnXCIreG1sRGF0YVtpXStcIicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGFnRm91bmQpIHtcbiAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnU3RhcnQgdGFnIGV4cGVjdGVkLicsIDEpO1xuICB9ZWxzZSBpZiAodGFncy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJVbmNsb3NlZCB0YWcgJ1wiK3RhZ3NbMF0udGFnTmFtZStcIicuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdzWzBdLnRhZ1N0YXJ0UG9zKSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsIFwiSW52YWxpZCAnXCIrXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGFncy5tYXAodCA9PiB0LnRhZ05hbWUpLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcbiAgICAgICAgICBcIicgZm91bmQuXCIsIHtsaW5lOiAxLCBjb2w6IDF9KTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoYXIpe1xuICByZXR1cm4gY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXG4nICB8fCBjaGFyID09PSAnXFxyJztcbn1cbi8qKlxuICogUmVhZCBQcm9jZXNzaW5nIGluc3N0cnVjdGlvbnMgYW5kIHNraXBcbiAqIEBwYXJhbSB7Kn0geG1sRGF0YVxuICogQHBhcmFtIHsqfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRQSSh4bWxEYXRhLCBpKSB7XG4gIGNvbnN0IHN0YXJ0ID0gaTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT0gJz8nIHx8IHhtbERhdGFbaV0gPT0gJyAnKSB7XG4gICAgICAvL3RhZ25hbWVcbiAgICAgIGNvbnN0IHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxuY29uc3QgZG91YmxlUXVvdGUgPSAnXCInO1xuY29uc3Qgc2luZ2xlUXVvdGUgPSBcIidcIjtcblxuLyoqXG4gKiBLZWVwIHJlYWRpbmcgeG1sRGF0YSB1bnRpbCAnPCcgaXMgZm91bmQgb3V0c2lkZSB0aGUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgc3RhcnRDaGFyID0gJyc7XG4gIGxldCB0YWdDbG9zZWQgPSBmYWxzZTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09IGRvdWJsZVF1b3RlIHx8IHhtbERhdGFbaV0gPT09IHNpbmdsZVF1b3RlKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICBzdGFydENoYXIgPSB4bWxEYXRhW2ldO1xuICAgICAgfSBlbHNlIGlmIChzdGFydENoYXIgIT09IHhtbERhdGFbaV0pIHtcbiAgICAgICAgLy9pZiB2YXVlIGlzIGVuY2xvc2VkIHdpdGggZG91YmxlIHF1b3RlIHRoZW4gc2luZ2xlIHF1b3RlcyBhcmUgYWxsb3dlZCBpbnNpZGUgdGhlIHZhbHVlIGFuZCB2aWNlIHZlcnNhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdICE9PSB1bmRlZmluZWQgJiYgbWF0Y2hlc1tpXVs0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIHdpdGhvdXQgdmFsdWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gPT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAvL2luZGVwZW5kZW50IGF0dHJpYnV0ZTogYWJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcImJvb2xlYW4gYXR0cmlidXRlICdcIittYXRjaGVzW2ldWzJdK1wiJyBpcyBub3QgYWxsb3dlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICAvKiBlbHNlIGlmKG1hdGNoZXNbaV1bNl0gPT09IHVuZGVmaW5lZCl7Ly9hdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZTogYWI9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycjogeyBjb2RlOlwiSW52YWxpZEF0dHJcIixtc2c6XCJhdHRyaWJ1dGUgXCIgKyBtYXRjaGVzW2ldWzJdICsgXCIgaGFzIG5vIHZhbHVlIGFzc2lnbmVkLlwifX07XG4gICAgICAgICAgICAgICAgfSAqL1xuICAgIGNvbnN0IGF0dHJOYW1lID0gbWF0Y2hlc1tpXVsyXTtcbiAgICBpZiAoIXZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gICAgaWYgKCFhdHRyTmFtZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKSB7XG4gICAgICAvL2NoZWNrIGZvciBkdXBsaWNhdGUgYXR0cmlidXRlLlxuICAgICAgYXR0ck5hbWVzW2F0dHJOYW1lXSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIHJlcGVhdGVkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgbGV0IHJlID0gL1xcZC87XG4gIGlmICh4bWxEYXRhW2ldID09PSAneCcpIHtcbiAgICBpKys7XG4gICAgcmUgPSAvW1xcZGEtZkEtRl0vO1xuICB9XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICByZXR1cm4gaTtcbiAgICBpZiAoIXhtbERhdGFbaV0ubWF0Y2gocmUpKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI2R0LWNoYXJyZWZcbiAgaSsrO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHhtbERhdGFbaV0gPT09ICcjJykge1xuICAgIGkrKztcbiAgICByZXR1cm4gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0ubWF0Y2goL1xcdy8pICYmIGNvdW50IDwgMjApXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck9iamVjdChjb2RlLCBtZXNzYWdlLCBsaW5lTnVtYmVyKSB7XG4gIHJldHVybiB7XG4gICAgZXJyOiB7XG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbXNnOiBtZXNzYWdlLFxuICAgICAgbGluZTogbGluZU51bWJlci5saW5lIHx8IGxpbmVOdW1iZXIsXG4gICAgICBjb2w6IGxpbmVOdW1iZXIuY29sLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKGF0dHJOYW1lKTtcbn1cblxuLy8gY29uc3Qgc3RhcnRzV2l0aFhNTCA9IC9eeG1sL2k7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFnTmFtZSh0YWduYW1lKSB7XG4gIHJldHVybiB1dGlsLmlzTmFtZSh0YWduYW1lKSAvKiAmJiAhdGFnbmFtZS5tYXRjaChzdGFydHNXaXRoWE1MKSAqLztcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleFxuZnVuY3Rpb24gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGluZGV4KSB7XG4gIGNvbnN0IGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiB7XG4gICAgbGluZTogbGluZXMubGVuZ3RoLFxuXG4gICAgLy8gY29sdW1uIG51bWJlciBpcyBsYXN0IGxpbmUncyBsZW5ndGggKyAxLCBiZWNhdXNlIGNvbHVtbiBudW1iZXJpbmcgc3RhcnRzIGF0IDE6XG4gICAgY29sOiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggKyAxXG4gIH07XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIG1hdGNoIHdpdGhpbiBhdHRyU3RyXG5mdW5jdGlvbiBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaCkge1xuICByZXR1cm4gbWF0Y2guc3RhcnRJbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbn1cbiIsCiAgICAiXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBwcmVzZXJ2ZU9yZGVyOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICAgIHRleHROb2RlTmFtZTogJyN0ZXh0JyxcbiAgICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICAgIHJlbW92ZU5TUHJlZml4OiBmYWxzZSwgLy8gcmVtb3ZlIE5TIGZyb20gdGFnIG5hbWUgb3IgYXR0cmlidXRlIG5hbWUgaWYgdHJ1ZVxuICAgIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL2EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgICAvL2lnbm9yZVJvb3RFbGVtZW50IDogZmFsc2UsXG4gICAgcGFyc2VUYWdWYWx1ZTogdHJ1ZSxcbiAgICBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSxcbiAgICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgICBudW1iZXJQYXJzZU9wdGlvbnM6IHtcbiAgICAgIGhleDogdHJ1ZSxcbiAgICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIH0sXG4gICAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKHRhZ05hbWUsIHZhbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgIGF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgc3RvcE5vZGVzOiBbXSwgLy9uZXN0ZWQgdGFncyB3aWxsIG5vdCBiZSBwYXJzZWQgZXZlbiBmb3IgZXJyb3JzXG4gICAgYWx3YXlzQ3JlYXRlVGV4dE5vZGU6IGZhbHNlLFxuICAgIGlzQXJyYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gICAgdW5wYWlyZWRUYWdzOiBbXSxcbiAgICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gICAgaHRtbEVudGl0aWVzOiBmYWxzZSxcbiAgICBpZ25vcmVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgaWdub3JlUGlUYWdzOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbn07XG4gICBcbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0cy5idWlsZE9wdGlvbnMgPSBidWlsZE9wdGlvbnM7XG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNsYXNzIFhtbE5vZGV7XG4gIGNvbnN0cnVjdG9yKHRhZ25hbWUpIHtcbiAgICB0aGlzLnRhZ25hbWUgPSB0YWduYW1lO1xuICAgIHRoaXMuY2hpbGQgPSBbXTsgLy9uZXN0ZWQgdGFncywgdGV4dCwgY2RhdGEsIGNvbW1lbnRzIGluIG9yZGVyXG4gICAgdGhpc1tcIjpAXCJdID0ge307IC8vYXR0cmlidXRlcyBtYXBcbiAgfVxuICBhZGQoa2V5LHZhbCl7XG4gICAgLy8gdGhpcy5jaGlsZC5wdXNoKCB7bmFtZSA6IGtleSwgdmFsOiB2YWwsIGlzQ2RhdGE6IGlzQ2RhdGEgfSk7XG4gICAgaWYoa2V5ID09PSBcIl9fcHJvdG9fX1wiKSBrZXkgPSBcIiNfX3Byb3RvX19cIjtcbiAgICB0aGlzLmNoaWxkLnB1c2goIHtba2V5XTogdmFsIH0pO1xuICB9XG4gIGFkZENoaWxkKG5vZGUpIHtcbiAgICBpZihub2RlLnRhZ25hbWUgPT09IFwiX19wcm90b19fXCIpIG5vZGUudGFnbmFtZSA9IFwiI19fcHJvdG9fX1wiO1xuICAgIGlmKG5vZGVbXCI6QFwiXSAmJiBPYmplY3Qua2V5cyhub2RlW1wiOkBcIl0pLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkLCBbXCI6QFwiXTogbm9kZVtcIjpAXCJdIH0pO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBYbWxOb2RlOyIsCiAgICAiLy9UT0RPOiBoYW5kbGUgY29tbWVudHNcbmZ1bmN0aW9uIHJlYWREb2NUeXBlKHhtbERhdGEsIGkpe1xuICAgIFxuICAgIGNvbnN0IGVudGl0aWVzID0ge307XG4gICAgaWYoIHhtbERhdGFbaSArIDNdID09PSAnTycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDRdID09PSAnQycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDVdID09PSAnVCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDZdID09PSAnWScgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDddID09PSAnUCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDhdID09PSAnRScpXG4gICAgeyAgICBcbiAgICAgICAgaSA9IGkrOTtcbiAgICAgICAgbGV0IGFuZ2xlQnJhY2tldHNDb3VudCA9IDE7XG4gICAgICAgIGxldCBoYXNCb2R5ID0gZmFsc2UsIGVudGl0eSA9IGZhbHNlLCBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBleHAgPSBcIlwiO1xuICAgICAgICBmb3IoO2k8eG1sRGF0YS5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgIWNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiggaGFzQm9keSAmJiBcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzNdID09PSAnTicgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNV0gPT09ICdJJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzZdID09PSAnVCcgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs3XSA9PT0gJ1knXG4gICAgICAgICAgICAgICAgKXtcbiAgICAgICAgICAgICAgICAgICAgaSArPSA3O1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCBoYXNCb2R5ICYmIFxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSszXSA9PT0gJ0wnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNF0gPT09ICdFJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzVdID09PSAnTScgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs2XSA9PT0gJ0UnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krN10gPT09ICdOJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzhdID09PSAnVCdcbiAgICAgICAgICAgICAgICApe1xuICAgICAgICAgICAgICAgICAgICAvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgaSArPSA4O1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCBoYXNCb2R5ICYmIFxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krMl0gPT09ICdBJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krM10gPT09ICdUJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNV0gPT09ICdMJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNl0gPT09ICdJJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krN10gPT09ICdTJyAmJlxuICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krOF0gPT09ICdUJ1xuICAgICAgICAgICAgICAgICl7XG4gICAgICAgICAgICAgICAgICAgIC8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICBpICs9IDg7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoIGhhc0JvZHkgJiYgXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsyXSA9PT0gJ04nICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSszXSA9PT0gJ08nICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs1XSA9PT0gJ0EnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs2XSA9PT0gJ1QnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs3XSA9PT0gJ0knICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs4XSA9PT0gJ08nICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs5XSA9PT0gJ04nXG4gICAgICAgICAgICAgICAgKXtcbiAgICAgICAgICAgICAgICAgICAgLy9Ob3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgIGkgKz0gOTtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiggLy9jb21tZW50XG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsyXSA9PT0gJy0nICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSszXSA9PT0gJy0nXG4gICAgICAgICAgICAgICAgKXtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgRE9DVFlQRVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICAgICAgICAgICAgZXhwID0gXCJcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICAgICAgICAgICAgaWYoY29tbWVudCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKCB4bWxEYXRhW2kgLSAxXSA9PT0gXCItXCIgJiYgeG1sRGF0YVtpIC0gMl0gPT09IFwiLVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFbnRpdHlFeHAoZXhwLCBlbnRpdGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYoIHhtbERhdGFbaV0gPT09ICdbJyl7XG4gICAgICAgICAgICAgICAgaGFzQm9keSA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBleHAgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihhbmdsZUJyYWNrZXRzQ291bnQgIT09IDApe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmNsb3NlZCBET0NUWVBFYCk7XG4gICAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFRhZyBpbnN0ZWFkIG9mIERPQ1RZUEVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtlbnRpdGllcywgaX07XG59XG5cbmNvbnN0IGVudGl0eVJlZ2V4ID0gUmVnRXhwKFwiXlxcXFxzKFthLXpBLXowLTBdKylbIFxcdF0oWydcXFwiXSkoW14mXSspXFxcXDJcIik7XG5mdW5jdGlvbiBwYXJzZUVudGl0eUV4cChleHAsIGVudGl0aWVzKXtcbiAgICBjb25zdCBtYXRjaCA9IGVudGl0eVJlZ2V4LmV4ZWMoZXhwKTtcbiAgICBpZihtYXRjaCl7XG4gICAgICAgIGVudGl0aWVzWyBtYXRjaFsxXSBdID0ge1xuICAgICAgICAgICAgcmVneCA6IFJlZ0V4cCggYCYke21hdGNoWzFdfTtgLFwiZ1wiKSxcbiAgICAgICAgICAgIHZhbDogbWF0Y2hbM11cbiAgICAgICAgfTtcbiAgICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHJlYWREb2NUeXBlOyIsCiAgICAiY29uc3QgaGV4UmVnZXggPSAvXlstK10/MHhbYS1mQS1GMC05XSskLztcbmNvbnN0IG51bVJlZ2V4ID0gL14oW1xcLVxcK10pPygwKikoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT98WzAtOV0rKFxcLlswLTldKyhbZUVdXFwtP1swLTldKyk/KT8pJC87XG4vLyBjb25zdCBvY3RSZWdleCA9IC8weFthLXowLTldKy87XG4vLyBjb25zdCBiaW5SZWdleCA9IC8weFthLXowLTldKy87XG5cblxuLy9wb2x5ZmlsbFxuaWYgKCFOdW1iZXIucGFyc2VJbnQgJiYgd2luZG93LnBhcnNlSW50KSB7XG4gICAgTnVtYmVyLnBhcnNlSW50ID0gd2luZG93LnBhcnNlSW50O1xufVxuaWYgKCFOdW1iZXIucGFyc2VGbG9hdCAmJiB3aW5kb3cucGFyc2VGbG9hdCkge1xuICAgIE51bWJlci5wYXJzZUZsb2F0ID0gd2luZG93LnBhcnNlRmxvYXQ7XG59XG5cbiAgXG5jb25zdCBjb25zaWRlciA9IHtcbiAgICBoZXggOiAgdHJ1ZSxcbiAgICBsZWFkaW5nWmVyb3M6IHRydWUsXG4gICAgZGVjaW1hbFBvaW50OiBcIlxcLlwiLFxuICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIC8vc2tpcExpa2U6IC9yZWdleC9cbn07XG5cbmZ1bmN0aW9uIHRvTnVtYmVyKHN0ciwgb3B0aW9ucyA9IHt9KXtcbiAgICAvLyBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIpO1xuICAgIC8vIGlmKG9wdC5sZWFkaW5nWmVyb3MgPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5sZWFkaW5nWmVyb3MgPSBmYWxzZTtcbiAgICAvLyB9ZWxzZSBpZihvcHQuaGV4ID09PSBmYWxzZSl7XG4gICAgLy8gICAgIG9wdGlvbnMuaGV4ID0gZmFsc2U7XG4gICAgLy8gfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnNpZGVyLCBvcHRpb25zICk7XG4gICAgaWYoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiICkgcmV0dXJuIHN0cjtcbiAgICBcbiAgICBsZXQgdHJpbW1lZFN0ciAgPSBzdHIudHJpbSgpO1xuICAgIC8vIGlmKHRyaW1tZWRTdHIgPT09IFwiMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCIrMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCItMC4wXCIpIHJldHVybiAtMDtcblxuICAgIGlmKG9wdGlvbnMuc2tpcExpa2UgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNraXBMaWtlLnRlc3QodHJpbW1lZFN0cikpIHJldHVybiBzdHI7XG4gICAgZWxzZSBpZiAob3B0aW9ucy5oZXggJiYgaGV4UmVnZXgudGVzdCh0cmltbWVkU3RyKSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHRyaW1tZWRTdHIsIDE2KTtcbiAgICAvLyB9IGVsc2UgaWYgKG9wdGlvbnMucGFyc2VPY3QgJiYgb2N0UmVnZXgudGVzdChzdHIpKSB7XG4gICAgLy8gICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodmFsLCA4KTtcbiAgICAvLyB9ZWxzZSBpZiAob3B0aW9ucy5wYXJzZUJpbiAmJiBiaW5SZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDIpO1xuICAgIH1lbHNle1xuICAgICAgICAvL3NlcGFyYXRlIG5lZ2F0aXZlIHNpZ24sIGxlYWRpbmcgemVyb3MsIGFuZCByZXN0IG51bWJlclxuICAgICAgICBjb25zdCBtYXRjaCA9IG51bVJlZ2V4LmV4ZWModHJpbW1lZFN0cik7XG4gICAgICAgIGlmKG1hdGNoKXtcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmdaZXJvcyA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgbGV0IG51bVRyaW1tZWRCeVplcm9zID0gdHJpbVplcm9zKG1hdGNoWzNdKTsgLy9jb21wbGV0ZSBudW0gd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgICAvL3RyaW0gZW5kaW5nIHplcm9zIGZvciBmbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZU5vdGF0aW9uID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNl07XG4gICAgICAgICAgICBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgc2lnbiAmJiB0cmltbWVkU3RyWzJdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8tMDEyM1xuICAgICAgICAgICAgZWxzZSBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgIXNpZ24gJiYgdHJpbW1lZFN0clsxXSAhPT0gXCIuXCIpIHJldHVybiBzdHI7IC8vMDEyM1xuICAgICAgICAgICAgZWxzZXsvL25vIGxlYWRpbmcgemVyb3Mgb3IgbGVhZGluZyB6ZXJvcyBhcmUgYWxsb3dlZFxuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih0cmltbWVkU3RyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1TdHIgPSBcIlwiICsgbnVtO1xuICAgICAgICAgICAgICAgIGlmKG51bVN0ci5zZWFyY2goL1tlRV0vKSAhPT0gLTEpeyAvL2dpdmVuIG51bWJlciBpcyBsb25nIGFuZCBwYXJzZWQgdG8gZU5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZU5vdGF0aW9uKXsgLy9naXZlbiBudW1iZXIgaGFzIGVub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zLmVOb3RhdGlvbikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikgIT09IC0xKXsgLy9mbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZGVjaW1hbFBhcnQgPSBtYXRjaFs1XS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGludFBhcnQgPSB0cmltbWVkU3RyLnN1YnN0cigwLHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikpO1xuXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBwID0gbnVtU3RyLmluZGV4T2YoXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBnaXZlbkludFBhcnQgPSBudW1TdHIuc3Vic3RyKDAscCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuRGVjUGFydCA9IG51bVN0ci5zdWJzdHIocCsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYobnVtU3RyID09PSBcIjBcIiAmJiAobnVtVHJpbW1lZEJ5WmVyb3MgPT09IFwiXCIpICkgcmV0dXJuIG51bTsgLy8wLjBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihudW1TdHIgPT09IG51bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtOyAvLzAuNDU2LiAwLjc5MDAwXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIHNpZ24gJiYgbnVtU3RyID09PSBcIi1cIitudW1UcmltbWVkQnlaZXJvcykgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihsZWFkaW5nWmVyb3Mpe1xuICAgICAgICAgICAgICAgICAgICAvLyBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmKG9wdGlvbnMubGVhZGluZ1plcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHNpZ24rbnVtVHJpbW1lZEJ5WmVyb3MgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRyaW1tZWRTdHIgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRyaW1tZWRTdHIgPT09IHNpZ24rbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIC8vIGVsc2V7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vbnVtYmVyIHdpdGggKy8tIHNpZ25cbiAgICAgICAgICAgICAgICAvLyAgICAgdHJpbW1lZFN0ci50ZXN0KC9bLStdWzAtOV0pO1xuXG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIGlmKCFlTm90YXRpb24gJiYgdHJpbW1lZFN0ciAmJiB0cmltbWVkU3RyICE9PSBOdW1iZXIodHJpbW1lZFN0cikgKSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNleyAvL25vbi1udW1lcmljIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBudW1TdHIgd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdHJpbVplcm9zKG51bVN0cil7XG4gICAgaWYobnVtU3RyICYmIG51bVN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpey8vZmxvYXRcbiAgICAgICAgbnVtU3RyID0gbnVtU3RyLnJlcGxhY2UoLzArJC8sIFwiXCIpOyAvL3JlbW92ZSBlbmRpbmcgemVyb3NcbiAgICAgICAgaWYobnVtU3RyID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiO1xuICAgICAgICBlbHNlIGlmKG51bVN0clswXSA9PT0gXCIuXCIpICBudW1TdHIgPSBcIjBcIitudW1TdHI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyW251bVN0ci5sZW5ndGgtMV0gPT09IFwiLlwiKSAgbnVtU3RyID0gbnVtU3RyLnN1YnN0cigwLG51bVN0ci5sZW5ndGgtMSk7XG4gICAgICAgIHJldHVybiBudW1TdHI7XG4gICAgfVxuICAgIHJldHVybiBudW1TdHI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvTnVtYmVyXG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbi8vL0B0cy1jaGVja1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeG1sTm9kZSA9IHJlcXVpcmUoJy4veG1sTm9kZScpO1xuY29uc3QgcmVhZERvY1R5cGUgPSByZXF1aXJlKFwiLi9Eb2NUeXBlUmVhZGVyXCIpO1xuY29uc3QgdG9OdW1iZXIgPSByZXF1aXJlKFwic3RybnVtXCIpO1xuXG5jb25zdCByZWd4ID1cbiAgJzwoKCFcXFxcW0NEQVRBXFxcXFsoW1xcXFxzXFxcXFNdKj8pKF1dPikpfCgoTkFNRTopPyhOQU1FKSkoW14+XSopPnwoKFxcXFwvKShOQU1FKVxcXFxzKj4pKShbXjxdKiknXG4gIC5yZXBsYWNlKC9OQU1FL2csIHV0aWwubmFtZVJlZ2V4cCk7XG5cbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz9bXFxcXHc6XFxcXC1cXC5fXSspKFtePl0qKT4oXFxcXHMqXCIrY2RhdGFSZWd4K1wiKSooW148XSspP1wiLFwiZ1wiKTtcbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz8pKChcXFxcdyo6KT8oW1xcXFx3OlxcXFwtXFwuX10rKSkoW14+XSopPihbXjxdKikoXCIrY2RhdGFSZWd4K1wiKFtePF0qKSkqKFtePF0rKT9cIixcImdcIik7XG5cbmNsYXNzIE9yZGVyZWRPYmpQYXJzZXJ7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy50YWdzTm9kZVN0YWNrID0gW107XG4gICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSB7fTtcbiAgICB0aGlzLmxhc3RFbnRpdGllcyA9IHtcbiAgICAgIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzl8I3gyNyk7L2csIHZhbCA6IFwiJ1wifSxcbiAgICAgIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2MnwjeDNFKTsvZywgdmFsIDogXCI+XCJ9LFxuICAgICAgXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwfCN4M0MpOy9nLCB2YWwgOiBcIjxcIn0sXG4gICAgICBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0fCN4MjIpOy9nLCB2YWwgOiBcIlxcXCJcIn0sXG4gICAgfTtcbiAgICB0aGlzLmFtcEVudGl0eSA9IHsgcmVnZXg6IC8mKGFtcHwjMzh8I3gyNik7L2csIHZhbCA6IFwiJlwifTtcbiAgICB0aGlzLmh0bWxFbnRpdGllcyA9IHtcbiAgICAgIFwic3BhY2VcIjogeyByZWdleDogLyYobmJzcHwjMTYwKTsvZywgdmFsOiBcIiBcIiB9LFxuICAgICAgLy8gXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwKTsvZywgdmFsOiBcIjxcIiB9LFxuICAgICAgLy8gXCJndFwiIDogeyByZWdleDogLyYoZ3R8IzYyKTsvZywgdmFsOiBcIj5cIiB9LFxuICAgICAgLy8gXCJhbXBcIiA6IHsgcmVnZXg6IC8mKGFtcHwjMzgpOy9nLCB2YWw6IFwiJlwiIH0sXG4gICAgICAvLyBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0KTsvZywgdmFsOiBcIlxcXCJcIiB9LFxuICAgICAgLy8gXCJhcG9zXCIgOiB7IHJlZ2V4OiAvJihhcG9zfCMzOSk7L2csIHZhbDogXCInXCIgfSxcbiAgICAgIFwiY2VudFwiIDogeyByZWdleDogLyYoY2VudHwjMTYyKTsvZywgdmFsOiBcIsKiXCIgfSxcbiAgICAgIFwicG91bmRcIiA6IHsgcmVnZXg6IC8mKHBvdW5kfCMxNjMpOy9nLCB2YWw6IFwiwqNcIiB9LFxuICAgICAgXCJ5ZW5cIiA6IHsgcmVnZXg6IC8mKHllbnwjMTY1KTsvZywgdmFsOiBcIsKlXCIgfSxcbiAgICAgIFwiZXVyb1wiIDogeyByZWdleDogLyYoZXVyb3wjODM2NCk7L2csIHZhbDogXCLigqxcIiB9LFxuICAgICAgXCJjb3B5cmlnaHRcIiA6IHsgcmVnZXg6IC8mKGNvcHl8IzE2OSk7L2csIHZhbDogXCLCqVwiIH0sXG4gICAgICBcInJlZ1wiIDogeyByZWdleDogLyYocmVnfCMxNzQpOy9nLCB2YWw6IFwiwq5cIiB9LFxuICAgICAgXCJpbnJcIiA6IHsgcmVnZXg6IC8mKGlucnwjODM3Nyk7L2csIHZhbDogXCLigrlcIiB9LFxuICAgIH07XG4gICAgdGhpcy5hZGRFeHRlcm5hbEVudGl0aWVzID0gYWRkRXh0ZXJuYWxFbnRpdGllcztcbiAgICB0aGlzLnBhcnNlWG1sID0gcGFyc2VYbWw7XG4gICAgdGhpcy5wYXJzZVRleHREYXRhID0gcGFyc2VUZXh0RGF0YTtcbiAgICB0aGlzLnJlc29sdmVOYW1lU3BhY2UgPSByZXNvbHZlTmFtZVNwYWNlO1xuICAgIHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwID0gYnVpbGRBdHRyaWJ1dGVzTWFwO1xuICAgIHRoaXMuaXNJdFN0b3BOb2RlID0gaXNJdFN0b3BOb2RlO1xuICAgIHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUgPSByZXBsYWNlRW50aXRpZXNWYWx1ZTtcbiAgICB0aGlzLnJlYWRTdG9wTm9kZURhdGEgPSByZWFkU3RvcE5vZGVEYXRhO1xuICAgIHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyA9IHNhdmVUZXh0VG9QYXJlbnRUYWc7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBhZGRFeHRlcm5hbEVudGl0aWVzKGV4dGVybmFsRW50aXRpZXMpe1xuICBjb25zdCBlbnRLZXlzID0gT2JqZWN0LmtleXMoZXh0ZXJuYWxFbnRpdGllcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVudCA9IGVudEtleXNbaV07XG4gICAgdGhpcy5sYXN0RW50aXRpZXNbZW50XSA9IHtcbiAgICAgICByZWdleDogbmV3IFJlZ0V4cChcIiZcIitlbnQrXCI7XCIsXCJnXCIpLFxuICAgICAgIHZhbCA6IGV4dGVybmFsRW50aXRpZXNbZW50XVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9udFRyaW1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQXR0cmlidXRlc1xuICogQHBhcmFtIHtib29sZWFufSBpc0xlYWZOb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY2FwZUVudGl0aWVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGV4dERhdGEodmFsLCB0YWdOYW1lLCBqUGF0aCwgZG9udFRyaW0sIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUsIGVzY2FwZUVudGl0aWVzKSB7XG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyAmJiAhZG9udFRyaW0pIHtcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgfVxuICAgIGlmKHZhbC5sZW5ndGggPiAwKXtcbiAgICAgIGlmKCFlc2NhcGVFbnRpdGllcykgdmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSh2YWwpO1xuICAgICAgXG4gICAgICBjb25zdCBuZXd2YWwgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdmFsLCBqUGF0aCwgaGFzQXR0cmlidXRlcywgaXNMZWFmTm9kZSk7XG4gICAgICBpZihuZXd2YWwgPT09IG51bGwgfHwgbmV3dmFsID09PSB1bmRlZmluZWQpe1xuICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3dmFsICE9PSB0eXBlb2YgdmFsIHx8IG5ld3ZhbCAhPT0gdmFsKXtcbiAgICAgICAgLy9vdmVyd3JpdGVcbiAgICAgICAgcmV0dXJuIG5ld3ZhbDtcbiAgICAgIH1lbHNlIGlmKHRoaXMub3B0aW9ucy50cmltVmFsdWVzKXtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbCA9IHZhbC50cmltKCk7XG4gICAgICAgIGlmKHRyaW1tZWRWYWwgPT09IHZhbCl7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpIHtcbiAgICBjb25zdCB0YWdzID0gdGFnbmFtZS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRhZ25hbWUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcbiAgICBpZiAodGFnc1swXSA9PT0gJ3htbG5zJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGFncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRhZ25hbWUgPSBwcmVmaXggKyB0YWdzWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFnbmFtZTtcbn1cblxuLy9UT0RPOiBjaGFuZ2UgcmVnZXggdG8gY2FwdHVyZSBOU1xuLy9jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKFwiKFtcXFxcd1xcXFwtXFxcXC5cXFxcOl0rKVxcXFxzKj1cXFxccyooWydcXFwiXSkoKC58XFxuKSo/KVxcXFwyXCIsXCJnbVwiKTtcbmNvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoJyhbXlxcXFxzPV0rKVxcXFxzKig9XFxcXHMqKFtcXCdcIl0pKFtcXFxcc1xcXFxTXSo/KVxcXFwzKT8nLCAnZ20nKTtcblxuZnVuY3Rpb24gYnVpbGRBdHRyaWJ1dGVzTWFwKGF0dHJTdHIsIGpQYXRoKSB7XG4gIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMgJiYgdHlwZW9mIGF0dHJTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gYXR0clN0ciA9IGF0dHJTdHIucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpO1xuICAgIC8vYXR0clN0ciA9IGF0dHJTdHIgfHwgYXR0clN0ci50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gdXRpbC5nZXRBbGxNYXRjaGVzKGF0dHJTdHIsIGF0dHJzUmVneCk7XG4gICAgY29uc3QgbGVuID0gbWF0Y2hlcy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5yZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0pO1xuICAgICAgbGV0IG9sZFZhbCA9IG1hdGNoZXNbaV1bNF07XG4gICAgICBsZXQgYU5hbWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zZm9ybUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICBhTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKGFOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZihhTmFtZSA9PT0gXCJfX3Byb3RvX19cIikgYU5hbWUgID0gXCIjX19wcm90b19fXCI7XG4gICAgICAgIGlmIChvbGRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgb2xkVmFsID0gb2xkVmFsLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2xkVmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShvbGRWYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgb2xkVmFsLCBqUGF0aCk7XG4gICAgICAgICAgaWYobmV3VmFsID09PSBudWxsIHx8IG5ld1ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIC8vZG9uJ3QgcGFyc2VcbiAgICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IG9sZFZhbDtcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3VmFsICE9PSB0eXBlb2Ygb2xkVmFsIHx8IG5ld1ZhbCAhPT0gb2xkVmFsKXtcbiAgICAgICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvL3BhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICBvbGRWYWwsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubnVtYmVyUGFyc2VPcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgY29uc3QgYXR0ckNvbGxlY3Rpb24gPSB7fTtcbiAgICAgIGF0dHJDb2xsZWN0aW9uW3RoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lXSA9IGF0dHJzO1xuICAgICAgcmV0dXJuIGF0dHJDb2xsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnM7XG4gIH1cbn1cblxuY29uc3QgcGFyc2VYbWwgPSBmdW5jdGlvbih4bWxEYXRhKSB7XG4gIHhtbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIik7IC8vVE9ETzogcmVtb3ZlIHRoaXMgbGluZVxuICBjb25zdCB4bWxPYmogPSBuZXcgeG1sTm9kZSgnIXhtbCcpO1xuICBsZXQgY3VycmVudE5vZGUgPSB4bWxPYmo7XG4gIGxldCB0ZXh0RGF0YSA9IFwiXCI7XG4gIGxldCBqUGF0aCA9IFwiXCI7XG4gIGZvcihsZXQgaT0wOyBpPCB4bWxEYXRhLmxlbmd0aDsgaSsrKXsvL2ZvciBlYWNoIGNoYXIgaW4gWE1MIGRhdGFcbiAgICBjb25zdCBjaCA9IHhtbERhdGFbaV07XG4gICAgaWYoY2ggPT09ICc8Jyl7XG4gICAgICAvLyBjb25zdCBuZXh0SW5kZXggPSBpKzE7XG4gICAgICAvLyBjb25zdCBfMm5kQ2hhciA9IHhtbERhdGFbbmV4dEluZGV4XTtcbiAgICAgIGlmKCB4bWxEYXRhW2krMV0gPT09ICcvJykgey8vQ2xvc2luZyBUYWdcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIFwiQ2xvc2luZyBUYWcgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCl7XG4gICAgICAgICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgICAgICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjdXJyZW50Tm9kZSl7XG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgICAgICBcbiAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7Ly9hdm9pZCByZWN1cnNzaW9uLCBzZXQgdGhlIHBhcmVudCB0YWcgc2NvcGVcbiAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YVtpKzFdID09PSAnPycpIHtcblxuICAgICAgICBsZXQgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSxpLCBmYWxzZSwgXCI/PlwiKTtcbiAgICAgICAgaWYoIXRhZ0RhdGEpIHRocm93IG5ldyBFcnJvcihcIlBpIFRhZyBpcyBub3QgY2xvc2VkLlwiKTtcblxuICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgaWYoICh0aGlzLm9wdGlvbnMuaWdub3JlRGVjbGFyYXRpb24gJiYgdGFnRGF0YS50YWdOYW1lID09PSBcIj94bWxcIikgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVBpVGFncyl7XG5cbiAgICAgICAgfWVsc2V7XG4gIFxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCBcIlwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZih0YWdEYXRhLnRhZ05hbWUgIT09IHRhZ0RhdGEudGFnRXhwICYmIHRhZ0RhdGEuYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdEYXRhLnRhZ0V4cCwgalBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGkgPSB0YWdEYXRhLmNsb3NlSW5kZXggKyAxO1xuICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiLS0+XCIsIGkrNCwgXCJDb21tZW50IGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpe1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB4bWxEYXRhLnN1YnN0cmluZyhpICsgNCwgZW5kSW5kZXggLSAyKTtcblxuICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiBjb21tZW50IH0gXSk7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4O1xuICAgICAgfSBlbHNlIGlmKCB4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchRCcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZERvY1R5cGUoeG1sRGF0YSwgaSk7XG4gICAgICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICB9ZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHtcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJDREFUQSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgIGNvbnN0IHRhZ0V4cCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA5LGNsb3NlSW5kZXgpO1xuXG4gICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgIC8vY2RhdGEgc2hvdWxkIGJlIHNldCBldmVuIGlmIGl0IGlzIDAgbGVuZ3RoIHN0cmluZ1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSl7XG4gICAgICAgICAgLy8gbGV0IHZhbCA9IHRoaXMucGFyc2VUZXh0RGF0YSh0YWdFeHAsIHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lLCBqUGF0aCArIFwiLlwiICsgdGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUsIHRydWUsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAvLyBpZighdmFsKSB2YWwgPSBcIlwiO1xuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSwgWyB7IFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSA6IHRhZ0V4cCB9IF0pO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBsZXQgdmFsID0gdGhpcy5wYXJzZVRleHREYXRhKHRhZ0V4cCwgY3VycmVudE5vZGUudGFnbmFtZSwgalBhdGgsIHRydWUsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICBpZih2YWwgPT0gdW5kZWZpbmVkKSB2YWwgPSBcIlwiO1xuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpID0gY2xvc2VJbmRleCArIDI7XG4gICAgICB9ZWxzZSB7Ly9PcGVuaW5nIHRhZ1xuICAgICAgICBsZXQgcmVzdWx0ID0gcmVhZFRhZ0V4cCh4bWxEYXRhLGksIHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCk7XG4gICAgICAgIGxldCB0YWdOYW1lPSByZXN1bHQudGFnTmFtZTtcbiAgICAgICAgbGV0IHRhZ0V4cCA9IHJlc3VsdC50YWdFeHA7XG4gICAgICAgIGxldCBhdHRyRXhwUHJlc2VudCA9IHJlc3VsdC5hdHRyRXhwUHJlc2VudDtcbiAgICAgICAgbGV0IGNsb3NlSW5kZXggPSByZXN1bHQuY2xvc2VJbmRleDtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vc2F2ZSB0ZXh0IGFzIGNoaWxkIG5vZGVcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlICYmIHRleHREYXRhKSB7XG4gICAgICAgICAgaWYoY3VycmVudE5vZGUudGFnbmFtZSAhPT0gJyF4bWwnKXtcbiAgICAgICAgICAgIC8vd2hlbiBuZXN0ZWQgdGFnIGlzIGZvdW5kXG4gICAgICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGFnTmFtZSAhPT0geG1sT2JqLnRhZ25hbWUpe1xuICAgICAgICAgIGpQYXRoICs9IGpQYXRoID8gXCIuXCIgKyB0YWdOYW1lIDogdGFnTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnID0gY3VycmVudE5vZGU7XG4gICAgICAgIGlmKGxhc3RUYWcgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWcudGFnbmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0l0U3RvcE5vZGUodGhpcy5vcHRpb25zLnN0b3BOb2RlcywgalBhdGgsIHRhZ05hbWUpKSB7IC8vVE9ETzogbmFtZXNwYWNlXG4gICAgICAgICAgbGV0IHRhZ0NvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgIC8vc2VsZi1jbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGkgPSByZXN1bHQuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9ib29sZWFuIHRhZ1xuICAgICAgICAgIGVsc2UgaWYodGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICBpID0gcmVzdWx0LmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vbm9ybWFsIHRhZ1xuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAvL3JlYWQgdW50aWwgY2xvc2luZyB0YWcgaXMgZm91bmRcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVhZFN0b3BOb2RlRGF0YSh4bWxEYXRhLCB0YWdOYW1lLCBjbG9zZUluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZighcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZW5kIG9mICR7dGFnTmFtZX1gKTtcbiAgICAgICAgICAgIGkgPSByZXN1bHQuaTtcbiAgICAgICAgICAgIHRhZ0NvbnRlbnQgPSByZXN1bHQudGFnQ29udGVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdOYW1lKTtcbiAgICAgICAgICBpZih0YWdOYW1lICE9PSB0YWdFeHAgJiYgYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYodGFnQ29udGVudCkge1xuICAgICAgICAgICAgdGFnQ29udGVudCA9IHRoaXMucGFyc2VUZXh0RGF0YSh0YWdDb250ZW50LCB0YWdOYW1lLCBqUGF0aCwgdHJ1ZSwgYXR0ckV4cFByZXNlbnQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgICAgICAgIGNoaWxkTm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgdGFnQ29udGVudCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgICAgICAgfWVsc2V7XG4gIC8vc2VsZkNsb3NpbmcgdGFnXG4gICAgICAgICAgaWYodGFnRXhwLmxlbmd0aCA+IDAgJiYgdGFnRXhwLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gdGFnRXhwLmxlbmd0aCAtIDEpe1xuICAgICAgICAgICAgaWYodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSBcIi9cIil7IC8vcmVtb3ZlIHRyYWlsaW5nICcvJ1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoMCwgdGFnTmFtZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnTmFtZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdFeHAuc3Vic3RyKDAsIHRhZ0V4cC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdOYW1lKTtcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgICAgICAgICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgICAgICAgICB9XG4gICAgLy9vcGVuaW5nIHRhZ1xuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSggdGFnTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucHVzaChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjaGlsZE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGV4dERhdGEgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHhtbE9iai5jaGlsZDtcbn1cblxuY29uc3QgcmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih2YWwpe1xuXG4gIGlmKHRoaXMub3B0aW9ucy5wcm9jZXNzRW50aXRpZXMpe1xuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmRvY1R5cGVFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmRvY1R5cGVFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVneCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmxhc3RFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmxhc3RFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgICBpZih0aGlzLm9wdGlvbnMuaHRtbEVudGl0aWVzKXtcbiAgICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmh0bWxFbnRpdGllcyl7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuaHRtbEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsID0gdmFsLnJlcGxhY2UoIHRoaXMuYW1wRW50aXR5LnJlZ2V4LCB0aGlzLmFtcEVudGl0eS52YWwpO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBzYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGlzTGVhZk5vZGUpIHtcbiAgaWYgKHRleHREYXRhKSB7IC8vc3RvcmUgcHJldmlvdXNseSBjb2xsZWN0ZWQgZGF0YSBhcyB0ZXh0Tm9kZVxuICAgIGlmKGlzTGVhZk5vZGUgPT09IHVuZGVmaW5lZCkgaXNMZWFmTm9kZSA9IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlLmNoaWxkKS5sZW5ndGggPT09IDBcbiAgICBcbiAgICB0ZXh0RGF0YSA9IHRoaXMucGFyc2VUZXh0RGF0YSh0ZXh0RGF0YSxcbiAgICAgIGN1cnJlbnROb2RlLnRhZ25hbWUsXG4gICAgICBqUGF0aCxcbiAgICAgIGZhbHNlLFxuICAgICAgY3VycmVudE5vZGVbXCI6QFwiXSA/IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlW1wiOkBcIl0pLmxlbmd0aCAhPT0gMCA6IGZhbHNlLFxuICAgICAgaXNMZWFmTm9kZSk7XG5cbiAgICBpZiAodGV4dERhdGEgIT09IHVuZGVmaW5lZCAmJiB0ZXh0RGF0YSAhPT0gXCJcIilcbiAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0ZXh0RGF0YSk7XG4gICAgdGV4dERhdGEgPSBcIlwiO1xuICB9XG4gIHJldHVybiB0ZXh0RGF0YTtcbn1cblxuLy9UT0RPOiB1c2UgalBhdGggdG8gc2ltcGxpZnkgdGhlIGxvZ2ljXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3RvcE5vZGVzIFxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFRhZ05hbWUgXG4gKi9cbmZ1bmN0aW9uIGlzSXRTdG9wTm9kZShzdG9wTm9kZXMsIGpQYXRoLCBjdXJyZW50VGFnTmFtZSl7XG4gIGNvbnN0IGFsbE5vZGVzRXhwID0gXCIqLlwiICsgY3VycmVudFRhZ05hbWU7XG4gIGZvciAoY29uc3Qgc3RvcE5vZGVQYXRoIGluIHN0b3BOb2Rlcykge1xuICAgIGNvbnN0IHN0b3BOb2RlRXhwID0gc3RvcE5vZGVzW3N0b3BOb2RlUGF0aF07XG4gICAgaWYoIGFsbE5vZGVzRXhwID09PSBzdG9wTm9kZUV4cCB8fCBqUGF0aCA9PT0gc3RvcE5vZGVFeHAgICkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRhZyBFeHByZXNzaW9uIGFuZCB3aGVyZSBpdCBpcyBlbmRpbmcgaGFuZGxpbmcgc2luZ2xlLWRvYnVsZSBxdW90ZXMgc2l0dWF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIHN0YXJ0aW5nIGluZGV4XG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdGFnRXhwV2l0aENsb3NpbmdJbmRleCh4bWxEYXRhLCBpLCBjbG9zaW5nQ2hhciA9IFwiPlwiKXtcbiAgbGV0IGF0dHJCb3VuZGFyeTtcbiAgbGV0IHRhZ0V4cCA9IFwiXCI7XG4gIGZvciAobGV0IGluZGV4ID0gaTsgaW5kZXggPCB4bWxEYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCBjaCA9IHhtbERhdGFbaW5kZXhdO1xuICAgIGlmIChhdHRyQm91bmRhcnkpIHtcbiAgICAgICAgaWYgKGNoID09PSBhdHRyQm91bmRhcnkpIGF0dHJCb3VuZGFyeSA9IFwiXCI7Ly9yZXNldFxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICAgIGF0dHJCb3VuZGFyeSA9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IGNsb3NpbmdDaGFyWzBdKSB7XG4gICAgICBpZihjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgIGlmKHhtbERhdGFbaW5kZXggKyAxXSA9PT0gY2xvc2luZ0NoYXJbMV0pe1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB0YWdFeHAsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXHQnKSB7XG4gICAgICBjaCA9IFwiIFwiXG4gICAgfVxuICAgIHRhZ0V4cCArPSBjaDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIHN0ciwgaSwgZXJyTXNnKXtcbiAgY29uc3QgY2xvc2luZ0luZGV4ID0geG1sRGF0YS5pbmRleE9mKHN0ciwgaSk7XG4gIGlmKGNsb3NpbmdJbmRleCA9PT0gLTEpe1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpXG4gIH1lbHNle1xuICAgIHJldHVybiBjbG9zaW5nSW5kZXggKyBzdHIubGVuZ3RoIC0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVGFnRXhwKHhtbERhdGEsaSwgcmVtb3ZlTlNQcmVmaXgsIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBjb25zdCByZXN1bHQgPSB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGkrMSwgY2xvc2luZ0NoYXIpO1xuICBpZighcmVzdWx0KSByZXR1cm47XG4gIGxldCB0YWdFeHAgPSByZXN1bHQuZGF0YTtcbiAgY29uc3QgY2xvc2VJbmRleCA9IHJlc3VsdC5pbmRleDtcbiAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWdFeHAuc2VhcmNoKC9cXHMvKTtcbiAgbGV0IHRhZ05hbWUgPSB0YWdFeHA7XG4gIGxldCBhdHRyRXhwUHJlc2VudCA9IHRydWU7XG4gIGlmKHNlcGFyYXRvckluZGV4ICE9PSAtMSl7Ly9zZXBhcmF0ZSB0YWcgbmFtZSBhbmQgYXR0cmlidXRlcyBleHByZXNzaW9uXG4gICAgdGFnTmFtZSA9IHRhZ0V4cC5zdWJzdHIoMCwgc2VwYXJhdG9ySW5kZXgpLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoc2VwYXJhdG9ySW5kZXggKyAxKTtcbiAgfVxuXG4gIGlmKHJlbW92ZU5TUHJlZml4KXtcbiAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgIGF0dHJFeHBQcmVzZW50ID0gdGFnTmFtZSAhPT0gcmVzdWx0LmRhdGEuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgdGFnRXhwOiB0YWdFeHAsXG4gICAgY2xvc2VJbmRleDogY2xvc2VJbmRleCxcbiAgICBhdHRyRXhwUHJlc2VudDogYXR0ckV4cFByZXNlbnQsXG4gIH1cbn1cbi8qKlxuICogZmluZCBwYWlyZWQgdGFnIGZvciBhIHN0b3Agbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGEgXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIFxuICovXG5mdW5jdGlvbiByZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHRhZ05hbWUsIGkpe1xuICBjb25zdCBzdGFydEluZGV4ID0gaTtcbiAgLy8gU3RhcnRpbmcgYXQgMSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYW4gb3BlbiB0YWdcbiAgbGV0IG9wZW5UYWdDb3VudCA9IDE7XG5cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYoIHhtbERhdGFbaV0gPT09IFwiPFwiKXsgXG4gICAgICBpZiAoeG1sRGF0YVtpKzFdID09PSBcIi9cIikgey8vY2xvc2UgdGFnXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIGAke3RhZ05hbWV9IGlzIG5vdCBjbG9zZWRgKTtcbiAgICAgICAgICBsZXQgY2xvc2VUYWdOYW1lID0geG1sRGF0YS5zdWJzdHJpbmcoaSsyLGNsb3NlSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgICBpZihjbG9zZVRhZ05hbWUgPT09IHRhZ05hbWUpe1xuICAgICAgICAgICAgb3BlblRhZ0NvdW50LS07XG4gICAgICAgICAgICBpZiAob3BlblRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFnQ29udGVudDogeG1sRGF0YS5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaSksXG4gICAgICAgICAgICAgICAgaSA6IGNsb3NlSW5kZXhcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhW2krMV0gPT09ICc/JykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj8+XCIsIGkrMSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSszLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIikgLSAyO1xuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YWdEYXRhID0gcmVhZFRhZ0V4cCh4bWxEYXRhLCBpLCAnPicpXG5cbiAgICAgICAgICBpZiAodGFnRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3BlblRhZ05hbWUgPSB0YWdEYXRhICYmIHRhZ0RhdGEudGFnTmFtZTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnTmFtZSA9PT0gdGFnTmFtZSAmJiB0YWdEYXRhLnRhZ0V4cFt0YWdEYXRhLnRhZ0V4cC5sZW5ndGgtMV0gIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWdDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaT10YWdEYXRhLmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH0vL2VuZCBmb3IgbG9vcFxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbCwgc2hvdWxkUGFyc2UsIG9wdGlvbnMpIHtcbiAgaWYgKHNob3VsZFBhcnNlICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgLy9jb25zb2xlLmxvZyhvcHRpb25zKVxuICAgIGNvbnN0IG5ld3ZhbCA9IHZhbC50cmltKCk7XG4gICAgaWYobmV3dmFsID09PSAndHJ1ZScgKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIGlmKG5ld3ZhbCA9PT0gJ2ZhbHNlJyApIHJldHVybiBmYWxzZTtcbiAgICBlbHNlIHJldHVybiB0b051bWJlcih2YWwsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3QodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gT3JkZXJlZE9ialBhcnNlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gbm9kZSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHByZXR0aWZ5KG5vZGUsIG9wdGlvbnMpe1xuICByZXR1cm4gY29tcHJlc3MoIG5vZGUsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gYXJyIFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGggXG4gKiBAcmV0dXJucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29tcHJlc3MoYXJyLCBvcHRpb25zLCBqUGF0aCl7XG4gIGxldCB0ZXh0O1xuICBjb25zdCBjb21wcmVzc2VkT2JqID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICBsZXQgbmV3SnBhdGggPSBcIlwiO1xuICAgIGlmKGpQYXRoID09PSB1bmRlZmluZWQpIG5ld0pwYXRoID0gcHJvcGVydHk7XG4gICAgZWxzZSBuZXdKcGF0aCA9IGpQYXRoICsgXCIuXCIgKyBwcm9wZXJ0eTtcblxuICAgIGlmKHByb3BlcnR5ID09PSBvcHRpb25zLnRleHROb2RlTmFtZSl7XG4gICAgICBpZih0ZXh0ID09PSB1bmRlZmluZWQpIHRleHQgPSB0YWdPYmpbcHJvcGVydHldO1xuICAgICAgZWxzZSB0ZXh0ICs9IFwiXCIgKyB0YWdPYmpbcHJvcGVydHldO1xuICAgIH1lbHNlIGlmKHByb3BlcnR5ID09PSB1bmRlZmluZWQpe1xuICAgICAgY29udGludWU7XG4gICAgfWVsc2UgaWYodGFnT2JqW3Byb3BlcnR5XSl7XG4gICAgICBcbiAgICAgIGxldCB2YWwgPSBjb21wcmVzcyh0YWdPYmpbcHJvcGVydHldLCBvcHRpb25zLCBuZXdKcGF0aCk7XG4gICAgICBjb25zdCBpc0xlYWYgPSBpc0xlYWZUYWcodmFsLCBvcHRpb25zKTtcblxuICAgICAgaWYodGFnT2JqW1wiOkBcIl0pe1xuICAgICAgICBhc3NpZ25BdHRyaWJ1dGVzKCB2YWwsIHRhZ09ialtcIjpAXCJdLCBuZXdKcGF0aCwgb3B0aW9ucyk7XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMSAmJiB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpe1xuICAgICAgICB2YWwgPSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgfWVsc2UgaWYoT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDApe1xuICAgICAgICBpZihvcHRpb25zLmFsd2F5c0NyZWF0ZVRleHROb2RlKSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gXCJcIjtcbiAgICAgICAgZWxzZSB2YWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZihjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkICYmIGNvbXByZXNzZWRPYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGNvbXByZXNzZWRPYmpbcHJvcGVydHldKSkge1xuICAgICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSBbIGNvbXByZXNzZWRPYmpbcHJvcGVydHldIF07XG4gICAgICAgIH1cbiAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIC8vVE9ETzogaWYgYSBub2RlIGlzIG5vdCBhbiBhcnJheSwgdGhlbiBjaGVjayBpZiBpdCBzaG91bGQgYmUgYW4gYXJyYXlcbiAgICAgICAgLy9hbHNvIGRldGVybWluZSBpZiBpdCBpcyBhIGxlYWYgbm9kZVxuICAgICAgICBpZiAob3B0aW9ucy5pc0FycmF5KHByb3BlcnR5LCBuZXdKcGF0aCwgaXNMZWFmICkpIHtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFt2YWxdO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfVxuICAvLyBpZih0ZXh0ICYmIHRleHQubGVuZ3RoID4gMCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICBpZih0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIil7XG4gICAgaWYodGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIH1lbHNlIGlmKHRleHQgIT09IHVuZGVmaW5lZCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICByZXR1cm4gY29tcHJlc3NlZE9iajtcbn1cblxuZnVuY3Rpb24gcHJvcE5hbWUob2JqKXtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgaWYoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduQXR0cmlidXRlcyhvYmosIGF0dHJNYXAsIGpwYXRoLCBvcHRpb25zKXtcbiAgaWYgKGF0dHJNYXApIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXR0ck1hcCk7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBhdHJyTmFtZSA9IGtleXNbaV07XG4gICAgICBpZiAob3B0aW9ucy5pc0FycmF5KGF0cnJOYW1lLCBqcGF0aCArIFwiLlwiICsgYXRyck5hbWUsIHRydWUsIHRydWUpKSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBbIGF0dHJNYXBbYXRyck5hbWVdIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbYXRyck5hbWVdID0gYXR0ck1hcFthdHJyTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTGVhZlRhZyhvYmosIG9wdGlvbnMpe1xuICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbiAgaWYoIHByb3BDb3VudCA9PT0gMCB8fCAocHJvcENvdW50ID09PSAxICYmIG9ialtvcHRpb25zLnRleHROb2RlTmFtZV0pICkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMucHJldHRpZnkgPSBwcmV0dGlmeTtcbiIsCiAgICAiY29uc3QgeyBidWlsZE9wdGlvbnN9ID0gcmVxdWlyZShcIi4vT3B0aW9uc0J1aWxkZXJcIik7XG5jb25zdCBPcmRlcmVkT2JqUGFyc2VyID0gcmVxdWlyZShcIi4vT3JkZXJlZE9ialBhcnNlclwiKTtcbmNvbnN0IHsgcHJldHRpZnl9ID0gcmVxdWlyZShcIi4vbm9kZTJqc29uXCIpO1xuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9yJyk7XG5cbmNsYXNzIFhNTFBhcnNlcntcbiAgICBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcbiAgICAgICAgdGhpcy5leHRlcm5hbEVudGl0aWVzID0ge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGJ1aWxkT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIFhNTCBkYXRzIHRvIEpTIG9iamVjdCBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGEgXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gdmFsaWRhdGlvbk9wdGlvbiBcbiAgICAgKi9cbiAgICBwYXJzZSh4bWxEYXRhLHZhbGlkYXRpb25PcHRpb24pe1xuICAgICAgICBpZih0eXBlb2YgeG1sRGF0YSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgIH1lbHNlIGlmKCB4bWxEYXRhLnRvU3RyaW5nKXtcbiAgICAgICAgICAgIHhtbERhdGEgPSB4bWxEYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWE1MIGRhdGEgaXMgYWNjZXB0ZWQgaW4gU3RyaW5nIG9yIEJ5dGVzW10gZm9ybS5cIilcbiAgICAgICAgfVxuICAgICAgICBpZiggdmFsaWRhdGlvbk9wdGlvbil7XG4gICAgICAgICAgICBpZih2YWxpZGF0aW9uT3B0aW9uID09PSB0cnVlKSB2YWxpZGF0aW9uT3B0aW9uID0ge307IC8vdmFsaWRhdGUgd2l0aCBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHhtbERhdGEsIHZhbGlkYXRpb25PcHRpb24pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggYCR7cmVzdWx0LmVyci5tc2d9OiR7cmVzdWx0LmVyci5saW5lfToke3Jlc3VsdC5lcnIuY29sfWAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JkZXJlZE9ialBhcnNlciA9IG5ldyBPcmRlcmVkT2JqUGFyc2VyKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIG9yZGVyZWRPYmpQYXJzZXIuYWRkRXh0ZXJuYWxFbnRpdGllcyh0aGlzLmV4dGVybmFsRW50aXRpZXMpO1xuICAgICAgICBjb25zdCBvcmRlcmVkUmVzdWx0ID0gb3JkZXJlZE9ialBhcnNlci5wYXJzZVhtbCh4bWxEYXRhKTtcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnByZXNlcnZlT3JkZXIgfHwgb3JkZXJlZFJlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gb3JkZXJlZFJlc3VsdDtcbiAgICAgICAgZWxzZSByZXR1cm4gcHJldHRpZnkob3JkZXJlZFJlc3VsdCwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgRW50aXR5IHdoaWNoIGlzIG5vdCBieSBkZWZhdWx0IHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBcbiAgICAgKi9cbiAgICBhZGRFbnRpdHkoa2V5LCB2YWx1ZSl7XG4gICAgICAgIGlmKHZhbHVlLmluZGV4T2YoXCImXCIpICE9PSAtMSl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbnRpdHkgdmFsdWUgY2FuJ3QgaGF2ZSAnJidcIilcbiAgICAgICAgfWVsc2UgaWYoa2V5LmluZGV4T2YoXCImXCIpICE9PSAtMSB8fCBrZXkuaW5kZXhPZihcIjtcIikgIT09IC0xKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSBtdXN0IGJlIHNldCB3aXRob3V0ICcmJyBhbmQgJzsnLiBFZy4gdXNlICcjeEQnIGZvciAnJiN4RDsnXCIpXG4gICAgICAgIH1lbHNlIGlmKHZhbHVlID09PSBcIiZcIil7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgd2l0aCB2YWx1ZSAnJicgaXMgbm90IHBlcm1pdHRlZFwiKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsRW50aXRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFhNTFBhcnNlcjsiLAogICAgImNvbnN0IEVPTCA9IFwiXFxuXCI7XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBqQXJyYXkgXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0b1htbChqQXJyYXksIG9wdGlvbnMpIHtcbiAgICBsZXQgaW5kZW50YXRpb24gPSBcIlwiO1xuICAgIGlmIChvcHRpb25zLmZvcm1hdCAmJiBvcHRpb25zLmluZGVudEJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaW5kZW50YXRpb24gPSBFT0w7XG4gICAgfVxuICAgIHJldHVybiBhcnJUb1N0cihqQXJyYXksIG9wdGlvbnMsIFwiXCIsIGluZGVudGF0aW9uKTtcbn1cblxuZnVuY3Rpb24gYXJyVG9TdHIoYXJyLCBvcHRpb25zLCBqUGF0aCwgaW5kZW50YXRpb24pIHtcbiAgICBsZXQgeG1sU3RyID0gXCJcIjtcbiAgICBsZXQgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRhZ09iaiA9IGFycltpXTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHByb3BOYW1lKHRhZ09iaik7XG4gICAgICAgIGxldCBuZXdKUGF0aCA9IFwiXCI7XG4gICAgICAgIGlmIChqUGF0aC5sZW5ndGggPT09IDApIG5ld0pQYXRoID0gdGFnTmFtZVxuICAgICAgICBlbHNlIG5ld0pQYXRoID0gYCR7alBhdGh9LiR7dGFnTmFtZX1gO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSBvcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRhZ1RleHQgPSB0YWdPYmpbdGFnTmFtZV07XG4gICAgICAgICAgICBpZiAoIWlzU3RvcE5vZGUobmV3SlBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IG9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdGFnVGV4dCk7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKHRhZ1RleHQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1RleHQ7XG4gICAgICAgICAgICBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c0VsZW1lbnRUYWcpIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwhW0NEQVRBWyR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX1dXT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY29tbWVudFByb3BOYW1lKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb24gKyBgPCEtLSR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX0tLT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXSA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dFN0ciA9IGF0dHJfdG9fc3RyKHRhZ09ialtcIjpAXCJdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBJbmQgPSB0YWdOYW1lID09PSBcIj94bWxcIiA/IFwiXCIgOiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGxldCBwaVRleHROb2RlTmFtZSA9IHRhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICAgICAgICBwaVRleHROb2RlTmFtZSA9IHBpVGV4dE5vZGVOYW1lLmxlbmd0aCAhPT0gMCA/IFwiIFwiICsgcGlUZXh0Tm9kZU5hbWUgOiBcIlwiOyAvL3JlbW92ZSBleHRyYSBzcGFjaW5nXG4gICAgICAgICAgICB4bWxTdHIgKz0gdGVtcEluZCArIGA8JHt0YWdOYW1lfSR7cGlUZXh0Tm9kZU5hbWV9JHthdHRTdHJ9Pz5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0lkZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgaWYgKG5ld0lkZW50YXRpb24gIT09IFwiXCIpIHtcbiAgICAgICAgICAgIG5ld0lkZW50YXRpb24gKz0gb3B0aW9ucy5pbmRlbnRCeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaW5kZW50YXRpb24gKyBgPCR7dGFnTmFtZX0ke2F0dFN0cn1gO1xuICAgICAgICBjb25zdCB0YWdWYWx1ZSA9IGFyclRvU3RyKHRhZ09ialt0YWdOYW1lXSwgb3B0aW9ucywgbmV3SlBhdGgsIG5ld0lkZW50YXRpb24pO1xuICAgICAgICBpZiAob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGVsc2UgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKCghdGFnVmFsdWUgfHwgdGFnVmFsdWUubGVuZ3RoID09PSAwKSAmJiBvcHRpb25zLnN1cHByZXNzRW1wdHlOb2RlKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIi8+XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnVmFsdWUgJiYgdGFnVmFsdWUuZW5kc1dpdGgoXCI+XCIpKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBgPiR7dGFnVmFsdWV9JHtpbmRlbnRhdGlvbn08LyR7dGFnTmFtZX0+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdTdGFydCArIFwiPlwiO1xuICAgICAgICAgICAgaWYgKHRhZ1ZhbHVlICYmIGluZGVudGF0aW9uICE9PSBcIlwiICYmICh0YWdWYWx1ZS5pbmNsdWRlcyhcIi8+XCIpIHx8IHRhZ1ZhbHVlLmluY2x1ZGVzKFwiPC9cIikpKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgb3B0aW9ucy5pbmRlbnRCeSArIHRhZ1ZhbHVlICsgaW5kZW50YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSB0YWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSBgPC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH1cbiAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB4bWxTdHI7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhdHRyX3RvX3N0cihhdHRyTWFwLCBvcHRpb25zKSB7XG4gICAgbGV0IGF0dHJTdHIgPSBcIlwiO1xuICAgIGlmIChhdHRyTWFwICYmICFvcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYXR0ciBpbiBhdHRyTWFwKSB7XG4gICAgICAgICAgICBsZXQgYXR0clZhbCA9IG9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ciwgYXR0ck1hcFthdHRyXSk7XG4gICAgICAgICAgICBhdHRyVmFsID0gcmVwbGFjZUVudGl0aWVzVmFsdWUoYXR0clZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoYXR0clZhbCA9PT0gdHJ1ZSAmJiBvcHRpb25zLnN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX09XCIke2F0dHJWYWx9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyU3RyO1xufVxuXG5mdW5jdGlvbiBpc1N0b3BOb2RlKGpQYXRoLCBvcHRpb25zKSB7XG4gICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUubGVuZ3RoIC0gMSk7XG4gICAgbGV0IHRhZ05hbWUgPSBqUGF0aC5zdWJzdHIoalBhdGgubGFzdEluZGV4T2YoXCIuXCIpICsgMSk7XG4gICAgZm9yIChsZXQgaW5kZXggaW4gb3B0aW9ucy5zdG9wTm9kZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0galBhdGggfHwgb3B0aW9ucy5zdG9wTm9kZXNbaW5kZXhdID09PSBcIiouXCIgKyB0YWdOYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXNWYWx1ZSh0ZXh0VmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodGV4dFZhbHVlICYmIHRleHRWYWx1ZS5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gb3B0aW9ucy5lbnRpdGllc1tpXTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRleHRWYWx1ZS5yZXBsYWNlKGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9YbWw7XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbi8vcGFyc2UgRW1wdHkgTm9kZSBhcyBzZWxmIGNsb3Npbmcgbm9kZVxuY29uc3QgYnVpbGRGcm9tT3JkZXJlZEpzID0gcmVxdWlyZSgnLi9vcmRlcmVkSnMyWG1sJyk7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgZm9ybWF0OiBmYWxzZSxcbiAgaW5kZW50Qnk6ICcgICcsXG4gIHN1cHByZXNzRW1wdHlOb2RlOiBmYWxzZSxcbiAgc3VwcHJlc3NVbnBhaXJlZE5vZGU6IHRydWUsXG4gIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IHRydWUsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihrZXksIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCBhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICBjb21tZW50UHJvcE5hbWU6IGZhbHNlLFxuICB1bnBhaXJlZFRhZ3M6IFtdLFxuICBlbnRpdGllczogW1xuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIsIFwiZ1wiKSwgdmFsOiBcIiZhbXA7XCIgfSwvL2l0IG11c3QgYmUgb24gdG9wXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpLCB2YWw6IFwiJmd0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIjxcIiwgXCJnXCIpLCB2YWw6IFwiJmx0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcJ1wiLCBcImdcIiksIHZhbDogXCImYXBvcztcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgdmFsOiBcIiZxdW90O1wiIH1cbiAgXSxcbiAgcHJvY2Vzc0VudGl0aWVzOiB0cnVlLFxuICBzdG9wTm9kZXM6IFtdLFxuICAvLyB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgLy8gdHJhbnNmb3JtQXR0cmlidXRlTmFtZTogZmFsc2UsXG59O1xuXG5mdW5jdGlvbiBCdWlsZGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMgfHwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICB0aGlzLmlzQXR0cmlidXRlID0gZnVuY3Rpb24oLyphKi8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXR0clByZWZpeExlbiA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aDtcbiAgICB0aGlzLmlzQXR0cmlidXRlID0gaXNBdHRyaWJ1dGU7XG4gIH1cblxuICB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlID0gcHJvY2Vzc1RleHRPck9iak5vZGVcblxuICBpZiAodGhpcy5vcHRpb25zLmZvcm1hdCkge1xuICAgIHRoaXMuaW5kZW50YXRlID0gaW5kZW50YXRlO1xuICAgIHRoaXMudGFnRW5kQ2hhciA9ICc+XFxuJztcbiAgICB0aGlzLm5ld0xpbmUgPSAnXFxuJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmluZGVudGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG4gICAgdGhpcy50YWdFbmRDaGFyID0gJz4nO1xuICAgIHRoaXMubmV3TGluZSA9ICcnO1xuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oak9iaikge1xuICBpZih0aGlzLm9wdGlvbnMucHJlc2VydmVPcmRlcil7XG4gICAgcmV0dXJuIGJ1aWxkRnJvbU9yZGVyZWRKcyhqT2JqLCB0aGlzLm9wdGlvbnMpO1xuICB9ZWxzZSB7XG4gICAgaWYoQXJyYXkuaXNBcnJheShqT2JqKSAmJiB0aGlzLm9wdGlvbnMuYXJyYXlOb2RlTmFtZSAmJiB0aGlzLm9wdGlvbnMuYXJyYXlOb2RlTmFtZS5sZW5ndGggPiAxKXtcbiAgICAgIGpPYmogPSB7XG4gICAgICAgIFt0aGlzLm9wdGlvbnMuYXJyYXlOb2RlTmFtZV0gOiBqT2JqXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmoyeChqT2JqLCAwKS52YWw7XG4gIH1cbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmoyeCA9IGZ1bmN0aW9uKGpPYmosIGxldmVsKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCB2YWwgPSAnJztcbiAgZm9yIChsZXQga2V5IGluIGpPYmopIHtcbiAgICBpZiAodHlwZW9mIGpPYmpba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIHN1cHJlc3MgdW5kZWZpbmVkIG5vZGVcbiAgICB9IGVsc2UgaWYgKGpPYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgaWYoa2V5WzBdID09PSBcIj9cIikgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIGVsc2UgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIC8vIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfSBlbHNlIGlmIChqT2JqW2tleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB2YWwgKz0gdGhpcy5idWlsZFRleHRWYWxOb2RlKGpPYmpba2V5XSwga2V5LCAnJywgbGV2ZWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGpPYmpba2V5XSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIC8vcHJlbWl0aXZlIHR5cGVcbiAgICAgIGNvbnN0IGF0dHIgPSB0aGlzLmlzQXR0cmlidXRlKGtleSk7XG4gICAgICBpZiAoYXR0cikge1xuICAgICAgICBhdHRyU3RyICs9IHRoaXMuYnVpbGRBdHRyUGFpclN0cihhdHRyLCAnJyArIGpPYmpba2V5XSk7XG4gICAgICB9ZWxzZSB7XG4gICAgICAgIC8vdGFnIHZhbHVlXG4gICAgICAgIGlmIChrZXkgPT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICBsZXQgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgICAgIHZhbCArPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKG5ld3ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqT2JqW2tleV0pKSB7XG4gICAgICAvL3JlcGVhdGVkIG5vZGVzXG4gICAgICBjb25zdCBhcnJMZW4gPSBqT2JqW2tleV0ubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhcnJMZW47IGorKykge1xuICAgICAgICBjb25zdCBpdGVtID0gak9ialtrZXldW2pdO1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gc3VwcmVzcyB1bmRlZmluZWQgbm9kZVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgICBpZihrZXlbMF0gPT09IFwiP1wiKSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJz8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgICAgIGVsc2UgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgICAvLyB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGl0ZW0sIGtleSwgbGV2ZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShpdGVtLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9uZXN0ZWQgbm9kZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgICAgY29uc3QgS3MgPSBPYmplY3Qua2V5cyhqT2JqW2tleV0pO1xuICAgICAgICBjb25zdCBMID0gS3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IEw7IGorKykge1xuICAgICAgICAgIGF0dHJTdHIgKz0gdGhpcy5idWlsZEF0dHJQYWlyU3RyKEtzW2pdLCAnJyArIGpPYmpba2V5XVtLc1tqXV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShqT2JqW2tleV0sIGtleSwgbGV2ZWwpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7YXR0clN0cjogYXR0clN0ciwgdmFsOiB2YWx9O1xufTtcblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGRBdHRyUGFpclN0ciA9IGZ1bmN0aW9uKGF0dHJOYW1lLCB2YWwpe1xuICB2YWwgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ck5hbWUsICcnICsgdmFsKTtcbiAgdmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSh2YWwpO1xuICBpZiAodGhpcy5vcHRpb25zLnN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXMgJiYgdmFsID09PSBcInRydWVcIikge1xuICAgIHJldHVybiAnICcgKyBhdHRyTmFtZTtcbiAgfSBlbHNlIHJldHVybiAnICcgKyBhdHRyTmFtZSArICc9XCInICsgdmFsICsgJ1wiJztcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RleHRPck9iak5vZGUgKG9iamVjdCwga2V5LCBsZXZlbCkge1xuICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChvYmplY3QsIGxldmVsICsgMSk7XG4gIGlmIChvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUob2JqZWN0W3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdLCBrZXksIHJlc3VsdC5hdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHJlc3VsdC52YWwsIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZE9iamVjdE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYodmFsID09PSBcIlwiKXtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfWVsc2V7XG5cbiAgICBsZXQgdGFnRW5kRXhwID0gJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBsZXQgcGlDbG9zaW5nQ2hhciA9IFwiXCI7XG4gICAgXG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikge1xuICAgICAgcGlDbG9zaW5nQ2hhciA9IFwiP1wiO1xuICAgICAgdGFnRW5kRXhwID0gXCJcIjtcbiAgICB9XG4gIFxuICAgIGlmIChhdHRyU3RyICYmIHZhbC5pbmRleE9mKCc8JykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gKCB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyAga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyAnPicgKyB2YWwgKyB0YWdFbmRFeHAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSAmJiBwaUNsb3NpbmdDaGFyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IS0tJHt2YWx9LS0+YCArIHRoaXMubmV3TGluZTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgcGlDbG9zaW5nQ2hhciArIHRoaXMudGFnRW5kQ2hhciArXG4gICAgICAgIHZhbCArXG4gICAgICAgIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIHRhZ0VuZEV4cCAgICApO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5jbG9zZVRhZyA9IGZ1bmN0aW9uKGtleSl7XG4gIGxldCBjbG9zZVRhZyA9IFwiXCI7XG4gIGlmKHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihrZXkpICE9PSAtMSl7IC8vdW5wYWlyZWRcbiAgICBpZighdGhpcy5vcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSBjbG9zZVRhZyA9IFwiL1wiXG4gIH1lbHNlIGlmKHRoaXMub3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSl7IC8vZW1wdHlcbiAgICBjbG9zZVRhZyA9IFwiL1wiO1xuICB9ZWxzZXtcbiAgICBjbG9zZVRhZyA9IGA+PC8ke2tleX1gXG4gIH1cbiAgcmV0dXJuIGNsb3NlVGFnO1xufVxuXG5mdW5jdGlvbiBidWlsZEVtcHR5T2JqTm9kZSh2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHZhbCAhPT0gJycpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIC8vIHJldHVybiB0aGlzLmJ1aWxkVGFnU3RyKGxldmVsLGtleSwgYXR0clN0cik7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkVGV4dFZhbE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IVtDREFUQVske3ZhbH1dXT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyAgdGhpcy5uZXdMaW5lO1xuICB9ZWxzZSBpZihrZXlbMF0gPT09IFwiP1wiKSB7Ly9QSSB0YWdcbiAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjsgXG4gIH1lbHNle1xuICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCB2YWwpO1xuICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgXG4gICAgaWYoIHRleHRWYWx1ZSA9PT0gJycpe1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICc+JyArXG4gICAgICAgICB0ZXh0VmFsdWUgK1xuICAgICAgICAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHRleHRWYWx1ZSl7XG4gIGlmKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKXtcbiAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5vcHRpb25zLmVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLm9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbmRlbnRhdGUobGV2ZWwpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbmRlbnRCeS5yZXBlYXQobGV2ZWwpO1xufVxuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZShuYW1lIC8qLCBvcHRpb25zKi8pIHtcbiAgaWYgKG5hbWUuc3RhcnRzV2l0aCh0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCkpIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHIodGhpcy5hdHRyUHJlZml4TGVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWlsZGVyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdmFsaWRhdG9yJyk7XG5jb25zdCBYTUxQYXJzZXIgPSByZXF1aXJlKCcuL3htbHBhcnNlci9YTUxQYXJzZXInKTtcbmNvbnN0IFhNTEJ1aWxkZXIgPSByZXF1aXJlKCcuL3htbGJ1aWxkZXIvanNvbjJ4bWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFhNTFBhcnNlcjogWE1MUGFyc2VyLFxuICBYTUxWYWxpZGF0b3I6IHZhbGlkYXRvcixcbiAgWE1MQnVpbGRlcjogWE1MQnVpbGRlclxufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBleHBvcnRzLmRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQgPSBleHBvcnRzLmRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQgPSBleHBvcnRzLmRlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IGV4cG9ydHMuZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLmRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgPSBleHBvcnRzLmRlX0Fzc3VtZVJvbGVDb21tYW5kID0gZXhwb3J0cy5zZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy5zZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy5zZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLnNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gZXhwb3J0cy5zZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBleHBvcnRzLnNlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5zZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gZXhwb3J0cy5zZV9Bc3N1bWVSb2xlQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IGZhc3RfeG1sX3BhcnNlcl8xID0gcmVxdWlyZShcImZhc3QteG1sLXBhcnNlclwiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgU1RTU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4uL21vZGVscy9TVFNTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY29uc3Qgc2VfQXNzdW1lUm9sZUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9Bc3N1bWVSb2xlUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJBc3N1bWVSb2xlXCIsXG4gICAgICAgIFZlcnNpb246IFwiMjAxMS0wNi0xNVwiLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfQXNzdW1lUm9sZUNvbW1hbmQgPSBzZV9Bc3N1bWVSb2xlQ29tbWFuZDtcbmNvbnN0IHNlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0KGlucHV0LCBjb250ZXh0KSxcbiAgICAgICAgQWN0aW9uOiBcIkFzc3VtZVJvbGVXaXRoU0FNTFwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgPSBzZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kO1xuY29uc3Qgc2VfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5XCIsXG4gICAgICAgIFZlcnNpb246IFwiMjAxMS0wNi0xNVwiLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBzZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZDtcbmNvbnN0IHNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBTSEFSRURfSEVBREVSUztcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gYnVpbGRGb3JtVXJsZW5jb2RlZFN0cmluZyh7XG4gICAgICAgIC4uLnNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IHNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZDtcbmNvbnN0IHNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfR2V0QWNjZXNzS2V5SW5mb1JlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiR2V0QWNjZXNzS2V5SW5mb1wiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gc2VfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQ7XG5jb25zdCBzZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9HZXRDYWxsZXJJZGVudGl0eVJlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiR2V0Q2FsbGVySWRlbnRpdHlcIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBzZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBzZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfR2V0RmVkZXJhdGlvblRva2VuUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJHZXRGZWRlcmF0aW9uVG9rZW5cIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDtcbmNvbnN0IHNlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9HZXRTZXNzaW9uVG9rZW5SZXF1ZXN0KGlucHV0LCBjb250ZXh0KSxcbiAgICAgICAgQWN0aW9uOiBcIkdldFNlc3Npb25Ub2tlblwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBzZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfQXNzdW1lUm9sZUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0Fzc3VtZVJvbGVSZXNwb25zZShkYXRhLkFzc3VtZVJvbGVSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9Bc3N1bWVSb2xlQ29tbWFuZCA9IGRlX0Fzc3VtZVJvbGVDb21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0V4cGlyZWRUb2tlbkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudFwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJQYWNrZWRQb2xpY3lUb29MYXJnZVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0Fzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlKGRhdGEuQXNzdW1lUm9sZVdpdGhTQU1MUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQ7XG5jb25zdCBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSURQUmVqZWN0ZWRDbGFpbVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZElkZW50aXR5VG9rZW5cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUGFja2VkUG9saWN5VG9vTGFyZ2VcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZShkYXRhLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCA9IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0V4cGlyZWRUb2tlbkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJRFBDb21tdW5pY2F0aW9uRXJyb3JcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0lEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJRFBSZWplY3RlZENsYWltXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkSWRlbnRpdHlUb2tlblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudFwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJQYWNrZWRQb2xpY3lUb29MYXJnZVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVJlc3BvbnNlKGRhdGEuRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQ7XG5jb25zdCBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0ludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gZGVfR2V0QWNjZXNzS2V5SW5mb1Jlc3BvbnNlKGRhdGEuR2V0QWNjZXNzS2V5SW5mb1Jlc3VsdCwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQ7XG5jb25zdCBkZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUXVlcnlFcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgZXJyb3JDb2RlLFxuICAgIH0pO1xufTtcbmNvbnN0IGRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0dldENhbGxlcklkZW50aXR5UmVzcG9uc2UoZGF0YS5HZXRDYWxsZXJJZGVudGl0eVJlc3VsdCwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZDtcbmNvbnN0IGRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUXVlcnlFcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgZXJyb3JDb2RlLFxuICAgIH0pO1xufTtcbmNvbnN0IGRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gZGVfR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2UoZGF0YS5HZXRGZWRlcmF0aW9uVG9rZW5SZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZGVfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDtcbmNvbnN0IGRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudFwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJQYWNrZWRQb2xpY3lUb29MYXJnZVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0dldFNlc3Npb25Ub2tlblJlc3BvbnNlKGRhdGEuR2V0U2Vzc2lvblRva2VuUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCA9IGRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQ7XG5jb25zdCBkZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9FeHBpcmVkVG9rZW5FeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuRXhwaXJlZFRva2VuRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9JRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbihib2R5LkVycm9yLCBjb250ZXh0KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9JbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLk1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3Qgc2VfQXNzdW1lUm9sZVJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0LlJvbGVBcm4gIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUm9sZUFyblwiXSA9IGlucHV0LlJvbGVBcm47XG4gICAgfVxuICAgIGlmIChpbnB1dC5Sb2xlU2Vzc2lvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUm9sZVNlc3Npb25OYW1lXCJdID0gaW5wdXQuUm9sZVNlc3Npb25OYW1lO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQb2xpY3lcIl0gPSBpbnB1dC5Qb2xpY3k7XG4gICAgfVxuICAgIGlmIChpbnB1dC5EdXJhdGlvblNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiRHVyYXRpb25TZWNvbmRzXCJdID0gaW5wdXQuRHVyYXRpb25TZWNvbmRzO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVGFncyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV90YWdMaXN0VHlwZShpbnB1dC5UYWdzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGlucHV0LlRhZ3M/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZW50cmllcy5UYWdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2MgPSBgVGFncy4ke2tleX1gO1xuICAgICAgICAgICAgZW50cmllc1tsb2NdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVHJhbnNpdGl2ZVRhZ0tleXMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfdGFnS2V5TGlzdFR5cGUoaW5wdXQuVHJhbnNpdGl2ZVRhZ0tleXMsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuVHJhbnNpdGl2ZVRhZ0tleXM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZW50cmllcy5UcmFuc2l0aXZlVGFnS2V5cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFRyYW5zaXRpdmVUYWdLZXlzLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5FeHRlcm5hbElkICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkV4dGVybmFsSWRcIl0gPSBpbnB1dC5FeHRlcm5hbElkO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuU2VyaWFsTnVtYmVyICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlNlcmlhbE51bWJlclwiXSA9IGlucHV0LlNlcmlhbE51bWJlcjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlRva2VuQ29kZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJUb2tlbkNvZGVcIl0gPSBpbnB1dC5Ub2tlbkNvZGU7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Tb3VyY2VJZGVudGl0eSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJTb3VyY2VJZGVudGl0eVwiXSA9IGlucHV0LlNvdXJjZUlkZW50aXR5O1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5Sb2xlQXJuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlJvbGVBcm5cIl0gPSBpbnB1dC5Sb2xlQXJuO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUHJpbmNpcGFsQXJuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlByaW5jaXBhbEFyblwiXSA9IGlucHV0LlByaW5jaXBhbEFybjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlNBTUxBc3NlcnRpb24gIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiU0FNTEFzc2VydGlvblwiXSA9IGlucHV0LlNBTUxBc3NlcnRpb247XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX3BvbGljeURlc2NyaXB0b3JMaXN0VHlwZShpbnB1dC5Qb2xpY3lBcm5zLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGlucHV0LlBvbGljeUFybnM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZW50cmllcy5Qb2xpY3lBcm5zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2MgPSBgUG9saWN5QXJucy4ke2tleX1gO1xuICAgICAgICAgICAgZW50cmllc1tsb2NdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5ICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlBvbGljeVwiXSA9IGlucHV0LlBvbGljeTtcbiAgICB9XG4gICAgaWYgKGlucHV0LkR1cmF0aW9uU2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJEdXJhdGlvblNlY29uZHNcIl0gPSBpbnB1dC5EdXJhdGlvblNlY29uZHM7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5Sb2xlQXJuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlJvbGVBcm5cIl0gPSBpbnB1dC5Sb2xlQXJuO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUm9sZVNlc3Npb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlJvbGVTZXNzaW9uTmFtZVwiXSA9IGlucHV0LlJvbGVTZXNzaW9uTmFtZTtcbiAgICB9XG4gICAgaWYgKGlucHV0LldlYklkZW50aXR5VG9rZW4gIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiV2ViSWRlbnRpdHlUb2tlblwiXSA9IGlucHV0LldlYklkZW50aXR5VG9rZW47XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qcm92aWRlcklkICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlByb3ZpZGVySWRcIl0gPSBpbnB1dC5Qcm92aWRlcklkO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQb2xpY3lcIl0gPSBpbnB1dC5Qb2xpY3k7XG4gICAgfVxuICAgIGlmIChpbnB1dC5EdXJhdGlvblNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiRHVyYXRpb25TZWNvbmRzXCJdID0gaW5wdXQuRHVyYXRpb25TZWNvbmRzO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0LkVuY29kZWRNZXNzYWdlICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkVuY29kZWRNZXNzYWdlXCJdID0gaW5wdXQuRW5jb2RlZE1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX0dldEFjY2Vzc0tleUluZm9SZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5BY2Nlc3NLZXlJZCAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJBY2Nlc3NLZXlJZFwiXSA9IGlucHV0LkFjY2Vzc0tleUlkO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9HZXRDYWxsZXJJZGVudGl0eVJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfR2V0RmVkZXJhdGlvblRva2VuUmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJOYW1lXCJdID0gaW5wdXQuTmFtZTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQb2xpY3lcIl0gPSBpbnB1dC5Qb2xpY3k7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX3BvbGljeURlc2NyaXB0b3JMaXN0VHlwZShpbnB1dC5Qb2xpY3lBcm5zLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGlucHV0LlBvbGljeUFybnM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZW50cmllcy5Qb2xpY3lBcm5zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2MgPSBgUG9saWN5QXJucy4ke2tleX1gO1xuICAgICAgICAgICAgZW50cmllc1tsb2NdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuRHVyYXRpb25TZWNvbmRzICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkR1cmF0aW9uU2Vjb25kc1wiXSA9IGlucHV0LkR1cmF0aW9uU2Vjb25kcztcbiAgICB9XG4gICAgaWYgKGlucHV0LlRhZ3MgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfdGFnTGlzdFR5cGUoaW5wdXQuVGFncywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5UYWdzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuVGFncyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFRhZ3MuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfR2V0U2Vzc2lvblRva2VuUmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuRHVyYXRpb25TZWNvbmRzICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkR1cmF0aW9uU2Vjb25kc1wiXSA9IGlucHV0LkR1cmF0aW9uU2Vjb25kcztcbiAgICB9XG4gICAgaWYgKGlucHV0LlNlcmlhbE51bWJlciAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJTZXJpYWxOdW1iZXJcIl0gPSBpbnB1dC5TZXJpYWxOdW1iZXI7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Ub2tlbkNvZGUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiVG9rZW5Db2RlXCJdID0gaW5wdXQuVG9rZW5Db2RlO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfUG9saWN5RGVzY3JpcHRvclR5cGUoZW50cnksIGNvbnRleHQpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGVudHJpZXNbYG1lbWJlci4ke2NvdW50ZXJ9LiR7a2V5fWBdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX1BvbGljeURlc2NyaXB0b3JUeXBlID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5hcm4gIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiYXJuXCJdID0gaW5wdXQuYXJuO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9UYWcgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0LktleSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJLZXlcIl0gPSBpbnB1dC5LZXk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5WYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJWYWx1ZVwiXSA9IGlucHV0LlZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV90YWdLZXlMaXN0VHlwZSA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBsZXQgY291bnRlciA9IDE7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVudHJpZXNbYG1lbWJlci4ke2NvdW50ZXJ9YF0gPSBlbnRyeTtcbiAgICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV90YWdMaXN0VHlwZSA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBsZXQgY291bnRlciA9IDE7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9UYWcoZW50cnksIGNvbnRleHQpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGVudHJpZXNbYG1lbWJlci4ke2NvdW50ZXJ9LiR7a2V5fWBdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZWRSb2xlVXNlciA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJBc3N1bWVkUm9sZUlkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQXNzdW1lZFJvbGVJZCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBc3N1bWVkUm9sZUlkXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFyblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFybiA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBcm5cIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfQXNzdW1lUm9sZVJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQ3JlZGVudGlhbHMgPSBkZV9DcmVkZW50aWFscyhvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bc3N1bWVkUm9sZVVzZXIgPSBkZV9Bc3N1bWVkUm9sZVVzZXIob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU291cmNlSWRlbnRpdHkgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU291cmNlSWRlbnRpdHlcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhTQU1MUmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5DcmVkZW50aWFscyA9IGRlX0NyZWRlbnRpYWxzKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFzc3VtZWRSb2xlVXNlclwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFzc3VtZWRSb2xlVXNlciA9IGRlX0Fzc3VtZWRSb2xlVXNlcihvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiUGFja2VkUG9saWN5U2l6ZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlBhY2tlZFBvbGljeVNpemUgPSAoMCwgc21pdGh5X2NsaWVudF8xLnN0cmljdFBhcnNlSW50MzIpKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU3ViamVjdFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlN1YmplY3QgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU3ViamVjdFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTdWJqZWN0VHlwZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlN1YmplY3RUeXBlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlN1YmplY3RUeXBlXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIklzc3VlclwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLklzc3VlciA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJJc3N1ZXJcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiQXVkaWVuY2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5BdWRpZW5jZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBdWRpZW5jZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJOYW1lUXVhbGlmaWVyXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuTmFtZVF1YWxpZmllciA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJOYW1lUXVhbGlmaWVyXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU291cmNlSWRlbnRpdHkgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU291cmNlSWRlbnRpdHlcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQ3JlZGVudGlhbHMgPSBkZV9DcmVkZW50aWFscyhvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTdWJqZWN0RnJvbVdlYklkZW50aXR5VG9rZW5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TdWJqZWN0RnJvbVdlYklkZW50aXR5VG9rZW4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU3ViamVjdEZyb21XZWJJZGVudGl0eVRva2VuXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFzc3VtZWRSb2xlVXNlclwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFzc3VtZWRSb2xlVXNlciA9IGRlX0Fzc3VtZWRSb2xlVXNlcihvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiUGFja2VkUG9saWN5U2l6ZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlBhY2tlZFBvbGljeVNpemUgPSAoMCwgc21pdGh5X2NsaWVudF8xLnN0cmljdFBhcnNlSW50MzIpKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiUHJvdmlkZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Qcm92aWRlciA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJQcm92aWRlclwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBdWRpZW5jZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkF1ZGllbmNlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkF1ZGllbmNlXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU291cmNlSWRlbnRpdHkgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU291cmNlSWRlbnRpdHlcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfQ3JlZGVudGlhbHMgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQWNjZXNzS2V5SWRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5BY2Nlc3NLZXlJZCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBY2Nlc3NLZXlJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTZWNyZXRBY2Nlc3NLZXlcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TZWNyZXRBY2Nlc3NLZXkgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU2VjcmV0QWNjZXNzS2V5XCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlNlc3Npb25Ub2tlblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNlc3Npb25Ub2tlbiA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJTZXNzaW9uVG9rZW5cIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiRXhwaXJhdGlvblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkV4cGlyYXRpb24gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzEucGFyc2VSZmMzMzM5RGF0ZVRpbWVXaXRoT2Zmc2V0KShvdXRwdXRbXCJFeHBpcmF0aW9uXCJdKSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkRlY29kZWRNZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuRGVjb2RlZE1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiRGVjb2RlZE1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfRmVkZXJhdGVkVXNlciA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJGZWRlcmF0ZWRVc2VySWRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5GZWRlcmF0ZWRVc2VySWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiRmVkZXJhdGVkVXNlcklkXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFyblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFybiA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBcm5cIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfR2V0QWNjZXNzS2V5SW5mb1Jlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkFjY291bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5BY2NvdW50ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkFjY291bnRcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfR2V0Q2FsbGVySWRlbnRpdHlSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJVc2VySWRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Vc2VySWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiVXNlcklkXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFjY291bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5BY2NvdW50ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkFjY291bnRcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiQXJuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQXJuID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkFyblwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9HZXRGZWRlcmF0aW9uVG9rZW5SZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkNyZWRlbnRpYWxzID0gZGVfQ3JlZGVudGlhbHMob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiRmVkZXJhdGVkVXNlclwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkZlZGVyYXRlZFVzZXIgPSBkZV9GZWRlcmF0ZWRVc2VyKG91dHB1dFtcIkZlZGVyYXRlZFVzZXJcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiUGFja2VkUG9saWN5U2l6ZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlBhY2tlZFBvbGljeVNpemUgPSAoMCwgc21pdGh5X2NsaWVudF8xLnN0cmljdFBhcnNlSW50MzIpKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfR2V0U2Vzc2lvblRva2VuUmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5DcmVkZW50aWFscyA9IGRlX0NyZWRlbnRpYWxzKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0lEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0lEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9JbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlc2VyaWFsaXplTWV0YWRhdGEgPSAob3V0cHV0KSA9PiAoe1xuICAgIGh0dHBTdGF0dXNDb2RlOiBvdXRwdXQuc3RhdHVzQ29kZSxcbiAgICByZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0LWlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXotcmVxdWVzdC1pZFwiXSxcbiAgICBleHRlbmRlZFJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICAgIGNmSWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotY2YtaWRcIl0sXG59KTtcbmNvbnN0IGNvbGxlY3RCb2R5ID0gKHN0cmVhbUJvZHkgPSBuZXcgVWludDhBcnJheSgpLCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKHN0cmVhbUJvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyZWFtQm9keSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0LnN0cmVhbUNvbGxlY3RvcihzdHJlYW1Cb2R5KSB8fCBQcm9taXNlLnJlc29sdmUobmV3IFVpbnQ4QXJyYXkoKSk7XG59O1xuY29uc3QgY29sbGVjdEJvZHlTdHJpbmcgPSAoc3RyZWFtQm9keSwgY29udGV4dCkgPT4gY29sbGVjdEJvZHkoc3RyZWFtQm9keSwgY29udGV4dCkudGhlbigoYm9keSkgPT4gY29udGV4dC51dGY4RW5jb2Rlcihib2R5KSk7XG5jb25zdCB0aHJvd0RlZmF1bHRFcnJvciA9ICgwLCBzbWl0aHlfY2xpZW50XzEud2l0aEJhc2VFeGNlcHRpb24pKFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uKTtcbmNvbnN0IGJ1aWxkSHR0cFJwY1JlcXVlc3QgPSBhc3luYyAoY29udGV4dCwgaGVhZGVycywgcGF0aCwgcmVzb2x2ZWRIb3N0bmFtZSwgYm9keSkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIHBhdGg6IGJhc2VQYXRoLmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSArIHBhdGggOiBiYXNlUGF0aCArIHBhdGgsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgfTtcbiAgICBpZiAocmVzb2x2ZWRIb3N0bmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLmhvc3RuYW1lID0gcmVzb2x2ZWRIb3N0bmFtZTtcbiAgICB9XG4gICAgaWYgKGJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QoY29udGVudHMpO1xufTtcbmNvbnN0IFNIQVJFRF9IRUFERVJTID0ge1xuICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG59O1xuY29uc3QgcGFyc2VCb2R5ID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5U3RyaW5nKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGVuY29kZWQpID0+IHtcbiAgICBpZiAoZW5jb2RlZC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IGZhc3RfeG1sX3BhcnNlcl8xLlhNTFBhcnNlcih7XG4gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lUHJlZml4OiBcIlwiLFxuICAgICAgICAgICAgaHRtbEVudGl0aWVzOiB0cnVlLFxuICAgICAgICAgICAgaWdub3JlQXR0cmlidXRlczogZmFsc2UsXG4gICAgICAgICAgICBpZ25vcmVEZWNsYXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBhcnNlVGFnVmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgdHJpbVZhbHVlczogZmFsc2UsXG4gICAgICAgICAgICB0YWdWYWx1ZVByb2Nlc3NvcjogKF8sIHZhbCkgPT4gKHZhbC50cmltKCkgPT09IFwiXCIgJiYgdmFsLmluY2x1ZGVzKFwiXFxuXCIpID8gXCJcIiA6IHVuZGVmaW5lZCksXG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZXIuYWRkRW50aXR5KFwiI3hEXCIsIFwiXFxyXCIpO1xuICAgICAgICBwYXJzZXIuYWRkRW50aXR5KFwiIzEwXCIsIFwiXFxuXCIpO1xuICAgICAgICBjb25zdCBwYXJzZWRPYmogPSBwYXJzZXIucGFyc2UoZW5jb2RlZCk7XG4gICAgICAgIGNvbnN0IHRleHROb2RlTmFtZSA9IFwiI3RleHRcIjtcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMocGFyc2VkT2JqKVswXTtcbiAgICAgICAgY29uc3QgcGFyc2VkT2JqVG9SZXR1cm4gPSBwYXJzZWRPYmpba2V5XTtcbiAgICAgICAgaWYgKHBhcnNlZE9ialRvUmV0dXJuW3RleHROb2RlTmFtZV0pIHtcbiAgICAgICAgICAgIHBhcnNlZE9ialRvUmV0dXJuW2tleV0gPSBwYXJzZWRPYmpUb1JldHVyblt0ZXh0Tm9kZU5hbWVdO1xuICAgICAgICAgICAgZGVsZXRlIHBhcnNlZE9ialRvUmV0dXJuW3RleHROb2RlTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZ2V0VmFsdWVGcm9tVGV4dE5vZGUpKHBhcnNlZE9ialRvUmV0dXJuKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufSk7XG5jb25zdCBwYXJzZUVycm9yQm9keSA9IGFzeW5jIChlcnJvckJvZHksIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhcnNlQm9keShlcnJvckJvZHksIGNvbnRleHQpO1xuICAgIGlmICh2YWx1ZS5FcnJvcikge1xuICAgICAgICB2YWx1ZS5FcnJvci5tZXNzYWdlID0gdmFsdWUuRXJyb3IubWVzc2FnZSA/PyB2YWx1ZS5FcnJvci5NZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuY29uc3QgYnVpbGRGb3JtVXJsZW5jb2RlZFN0cmluZyA9IChmb3JtRW50cmllcykgPT4gT2JqZWN0LmVudHJpZXMoZm9ybUVudHJpZXMpXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoMCwgc21pdGh5X2NsaWVudF8xLmV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KShrZXkpICsgXCI9XCIgKyAoMCwgc21pdGh5X2NsaWVudF8xLmV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KSh2YWx1ZSkpXG4gICAgLmpvaW4oXCImXCIpO1xuY29uc3QgbG9hZFF1ZXJ5RXJyb3JDb2RlID0gKG91dHB1dCwgZGF0YSkgPT4ge1xuICAgIGlmIChkYXRhLkVycm9yPy5Db2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuRXJyb3IuQ29kZTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID09IDQwNCkge1xuICAgICAgICByZXR1cm4gXCJOb3RGb3VuZFwiO1xuICAgIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBBc3N1bWVSb2xlQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBBc3N1bWVSb2xlQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkFzc3VtZVJvbGVDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0Fzc3VtZVJvbGVDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0Fzc3VtZVJvbGVDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXNzdW1lUm9sZUNvbW1hbmQgPSBBc3N1bWVSb2xlQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1RTQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXIgPSB2b2lkIDA7XG5jb25zdCBBc3N1bWVSb2xlQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvQXNzdW1lUm9sZUNvbW1hbmRcIik7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRcIik7XG5jb25zdCBBU1NVTUVfUk9MRV9ERUZBVUxUX1JFR0lPTiA9IFwidXMtZWFzdC0xXCI7XG5jb25zdCBkZWNvcmF0ZURlZmF1bHRSZWdpb24gPSAocmVnaW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiByZWdpb24gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gcmVnaW9uID09PSB1bmRlZmluZWQgPyBBU1NVTUVfUk9MRV9ERUZBVUxUX1JFR0lPTiA6IHJlZ2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZWdpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIEFTU1VNRV9ST0xFX0RFRkFVTFRfUkVHSU9OO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5jb25zdCBnZXREZWZhdWx0Um9sZUFzc3VtZXIgPSAoc3RzT3B0aW9ucywgc3RzQ2xpZW50Q3RvcikgPT4ge1xuICAgIGxldCBzdHNDbGllbnQ7XG4gICAgbGV0IGNsb3N1cmVTb3VyY2VDcmVkcztcbiAgICByZXR1cm4gYXN5bmMgKHNvdXJjZUNyZWRzLCBwYXJhbXMpID0+IHtcbiAgICAgICAgY2xvc3VyZVNvdXJjZUNyZWRzID0gc291cmNlQ3JlZHM7XG4gICAgICAgIGlmICghc3RzQ2xpZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IGxvZ2dlciwgcmVnaW9uLCByZXF1ZXN0SGFuZGxlciB9ID0gc3RzT3B0aW9ucztcbiAgICAgICAgICAgIHN0c0NsaWVudCA9IG5ldyBzdHNDbGllbnRDdG9yKHtcbiAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcjogKCkgPT4gYXN5bmMgKCkgPT4gY2xvc3VyZVNvdXJjZUNyZWRzLFxuICAgICAgICAgICAgICAgIHJlZ2lvbjogZGVjb3JhdGVEZWZhdWx0UmVnaW9uKHJlZ2lvbiB8fCBzdHNPcHRpb25zLnJlZ2lvbiksXG4gICAgICAgICAgICAgICAgLi4uKHJlcXVlc3RIYW5kbGVyID8geyByZXF1ZXN0SGFuZGxlciB9IDoge30pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBDcmVkZW50aWFscyB9ID0gYXdhaXQgc3RzQ2xpZW50LnNlbmQobmV3IEFzc3VtZVJvbGVDb21tYW5kXzEuQXNzdW1lUm9sZUNvbW1hbmQocGFyYW1zKSk7XG4gICAgICAgIGlmICghQ3JlZGVudGlhbHMgfHwgIUNyZWRlbnRpYWxzLkFjY2Vzc0tleUlkIHx8ICFDcmVkZW50aWFscy5TZWNyZXRBY2Nlc3NLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZXNwb25zZSBmcm9tIFNUUy5hc3N1bWVSb2xlIGNhbGwgd2l0aCByb2xlICR7cGFyYW1zLlJvbGVBcm59YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiBDcmVkZW50aWFscy5BY2Nlc3NLZXlJZCxcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogQ3JlZGVudGlhbHMuU2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBDcmVkZW50aWFscy5TZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBDcmVkZW50aWFscy5FeHBpcmF0aW9uLFxuICAgICAgICB9O1xuICAgIH07XG59O1xuZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXIgPSBnZXREZWZhdWx0Um9sZUFzc3VtZXI7XG5jb25zdCBnZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkgPSAoc3RzT3B0aW9ucywgc3RzQ2xpZW50Q3RvcikgPT4ge1xuICAgIGxldCBzdHNDbGllbnQ7XG4gICAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKCFzdHNDbGllbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbG9nZ2VyLCByZWdpb24sIHJlcXVlc3RIYW5kbGVyIH0gPSBzdHNPcHRpb25zO1xuICAgICAgICAgICAgc3RzQ2xpZW50ID0gbmV3IHN0c0NsaWVudEN0b3Ioe1xuICAgICAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgICAgICByZWdpb246IGRlY29yYXRlRGVmYXVsdFJlZ2lvbihyZWdpb24gfHwgc3RzT3B0aW9ucy5yZWdpb24pLFxuICAgICAgICAgICAgICAgIC4uLihyZXF1ZXN0SGFuZGxlciA/IHsgcmVxdWVzdEhhbmRsZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgQ3JlZGVudGlhbHMgfSA9IGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZF8xLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kKHBhcmFtcykpO1xuICAgICAgICBpZiAoIUNyZWRlbnRpYWxzIHx8ICFDcmVkZW50aWFscy5BY2Nlc3NLZXlJZCB8fCAhQ3JlZGVudGlhbHMuU2VjcmV0QWNjZXNzS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBTVFMuYXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eSBjYWxsIHdpdGggcm9sZSAke3BhcmFtcy5Sb2xlQXJufWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDogQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IENyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogQ3JlZGVudGlhbHMuU2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogQ3JlZGVudGlhbHMuRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5O1xuY29uc3QgZGVjb3JhdGVEZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyID0gKHByb3ZpZGVyKSA9PiAoaW5wdXQpID0+IHByb3ZpZGVyKHtcbiAgICByb2xlQXNzdW1lcjogKDAsIGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyKShpbnB1dCwgaW5wdXQuc3RzQ2xpZW50Q3RvciksXG4gICAgcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHk6ICgwLCBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSkoaW5wdXQsIGlucHV0LnN0c0NsaWVudEN0b3IpLFxuICAgIC4uLmlucHV0LFxufSk7XG5leHBvcnRzLmRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IGRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21FbnYgPSBleHBvcnRzLkVOVl9FWFBJUkFUSU9OID0gZXhwb3J0cy5FTlZfU0VTU0lPTiA9IGV4cG9ydHMuRU5WX1NFQ1JFVCA9IGV4cG9ydHMuRU5WX0tFWSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5leHBvcnRzLkVOVl9LRVkgPSBcIkFXU19BQ0NFU1NfS0VZX0lEXCI7XG5leHBvcnRzLkVOVl9TRUNSRVQgPSBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiO1xuZXhwb3J0cy5FTlZfU0VTU0lPTiA9IFwiQVdTX1NFU1NJT05fVE9LRU5cIjtcbmV4cG9ydHMuRU5WX0VYUElSQVRJT04gPSBcIkFXU19DUkVERU5USUFMX0VYUElSQVRJT05cIjtcbmNvbnN0IGZyb21FbnYgPSAoKSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYWNjZXNzS2V5SWQgPSBwcm9jZXNzLmVudltleHBvcnRzLkVOVl9LRVldO1xuICAgIGNvbnN0IHNlY3JldEFjY2Vzc0tleSA9IHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX1NFQ1JFVF07XG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfU0VTU0lPTl07XG4gICAgY29uc3QgZXhwaXJ5ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfRVhQSVJBVElPTl07XG4gICAgaWYgKGFjY2Vzc0tleUlkICYmIHNlY3JldEFjY2Vzc0tleSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgICAgICAuLi4oc2Vzc2lvblRva2VuICYmIHsgc2Vzc2lvblRva2VuIH0pLFxuICAgICAgICAgICAgLi4uKGV4cGlyeSAmJiB7IGV4cGlyYXRpb246IG5ldyBEYXRlKGV4cGlyeSkgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIlVuYWJsZSB0byBmaW5kIGVudmlyb25tZW50IHZhcmlhYmxlIGNyZWRlbnRpYWxzLlwiKTtcbn07XG5leHBvcnRzLmZyb21FbnYgPSBmcm9tRW52O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tRW52XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEhvbWVEaXIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnZXRIb21lRGlyID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgSE9NRSwgVVNFUlBST0ZJTEUsIEhPTUVQQVRILCBIT01FRFJJVkUgPSBgQzoke3BhdGhfMS5zZXB9YCB9ID0gcHJvY2Vzcy5lbnY7XG4gICAgaWYgKEhPTUUpXG4gICAgICAgIHJldHVybiBIT01FO1xuICAgIGlmIChVU0VSUFJPRklMRSlcbiAgICAgICAgcmV0dXJuIFVTRVJQUk9GSUxFO1xuICAgIGlmIChIT01FUEFUSClcbiAgICAgICAgcmV0dXJuIGAke0hPTUVEUklWRX0ke0hPTUVQQVRIfWA7XG4gICAgcmV0dXJuICgwLCBvc18xLmhvbWVkaXIpKCk7XG59O1xuZXhwb3J0cy5nZXRIb21lRGlyID0gZ2V0SG9tZURpcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFByb2ZpbGVOYW1lID0gZXhwb3J0cy5ERUZBVUxUX1BST0ZJTEUgPSBleHBvcnRzLkVOVl9QUk9GSUxFID0gdm9pZCAwO1xuZXhwb3J0cy5FTlZfUFJPRklMRSA9IFwiQVdTX1BST0ZJTEVcIjtcbmV4cG9ydHMuREVGQVVMVF9QUk9GSUxFID0gXCJkZWZhdWx0XCI7XG5jb25zdCBnZXRQcm9maWxlTmFtZSA9IChpbml0KSA9PiBpbml0LnByb2ZpbGUgfHwgcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfUFJPRklMRV0gfHwgZXhwb3J0cy5ERUZBVUxUX1BST0ZJTEU7XG5leHBvcnRzLmdldFByb2ZpbGVOYW1lID0gZ2V0UHJvZmlsZU5hbWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTU09Ub2tlbkZpbGVwYXRoID0gdm9pZCAwO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnZXRIb21lRGlyXzEgPSByZXF1aXJlKFwiLi9nZXRIb21lRGlyXCIpO1xuY29uc3QgZ2V0U1NPVG9rZW5GaWxlcGF0aCA9IChpZCkgPT4ge1xuICAgIGNvbnN0IGhhc2hlciA9ICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKShcInNoYTFcIik7XG4gICAgY29uc3QgY2FjaGVOYW1lID0gaGFzaGVyLnVwZGF0ZShpZCkuZGlnZXN0KFwiaGV4XCIpO1xuICAgIHJldHVybiAoMCwgcGF0aF8xLmpvaW4pKCgwLCBnZXRIb21lRGlyXzEuZ2V0SG9tZURpcikoKSwgXCIuYXdzXCIsIFwic3NvXCIsIFwiY2FjaGVcIiwgYCR7Y2FjaGVOYW1lfS5qc29uYCk7XG59O1xuZXhwb3J0cy5nZXRTU09Ub2tlbkZpbGVwYXRoID0gZ2V0U1NPVG9rZW5GaWxlcGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNTT1Rva2VuRnJvbUZpbGUgPSB2b2lkIDA7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgZ2V0U1NPVG9rZW5GaWxlcGF0aF8xID0gcmVxdWlyZShcIi4vZ2V0U1NPVG9rZW5GaWxlcGF0aFwiKTtcbmNvbnN0IHsgcmVhZEZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5jb25zdCBnZXRTU09Ub2tlbkZyb21GaWxlID0gYXN5bmMgKGlkKSA9PiB7XG4gICAgY29uc3Qgc3NvVG9rZW5GaWxlcGF0aCA9ICgwLCBnZXRTU09Ub2tlbkZpbGVwYXRoXzEuZ2V0U1NPVG9rZW5GaWxlcGF0aCkoaWQpO1xuICAgIGNvbnN0IHNzb1Rva2VuVGV4dCA9IGF3YWl0IHJlYWRGaWxlKHNzb1Rva2VuRmlsZXBhdGgsIFwidXRmOFwiKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzc29Ub2tlblRleHQpO1xufTtcbmV4cG9ydHMuZ2V0U1NPVG9rZW5Gcm9tRmlsZSA9IGdldFNTT1Rva2VuRnJvbUZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb25maWdGaWxlcGF0aCA9IGV4cG9ydHMuRU5WX0NPTkZJR19QQVRIID0gdm9pZCAwO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnZXRIb21lRGlyXzEgPSByZXF1aXJlKFwiLi9nZXRIb21lRGlyXCIpO1xuZXhwb3J0cy5FTlZfQ09ORklHX1BBVEggPSBcIkFXU19DT05GSUdfRklMRVwiO1xuY29uc3QgZ2V0Q29uZmlnRmlsZXBhdGggPSAoKSA9PiBwcm9jZXNzLmVudltleHBvcnRzLkVOVl9DT05GSUdfUEFUSF0gfHwgKDAsIHBhdGhfMS5qb2luKSgoMCwgZ2V0SG9tZURpcl8xLmdldEhvbWVEaXIpKCksIFwiLmF3c1wiLCBcImNvbmZpZ1wiKTtcbmV4cG9ydHMuZ2V0Q29uZmlnRmlsZXBhdGggPSBnZXRDb25maWdGaWxlcGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENyZWRlbnRpYWxzRmlsZXBhdGggPSBleHBvcnRzLkVOVl9DUkVERU5USUFMU19QQVRIID0gdm9pZCAwO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnZXRIb21lRGlyXzEgPSByZXF1aXJlKFwiLi9nZXRIb21lRGlyXCIpO1xuZXhwb3J0cy5FTlZfQ1JFREVOVElBTFNfUEFUSCA9IFwiQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFXCI7XG5jb25zdCBnZXRDcmVkZW50aWFsc0ZpbGVwYXRoID0gKCkgPT4gcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfQ1JFREVOVElBTFNfUEFUSF0gfHwgKDAsIHBhdGhfMS5qb2luKSgoMCwgZ2V0SG9tZURpcl8xLmdldEhvbWVEaXIpKCksIFwiLmF3c1wiLCBcImNyZWRlbnRpYWxzXCIpO1xuZXhwb3J0cy5nZXRDcmVkZW50aWFsc0ZpbGVwYXRoID0gZ2V0Q3JlZGVudGlhbHNGaWxlcGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFByb2ZpbGVEYXRhID0gdm9pZCAwO1xuY29uc3QgcHJvZmlsZUtleVJlZ2V4ID0gL15wcm9maWxlXFxzKFtcIiddKT8oW15cXDFdKylcXDEkLztcbmNvbnN0IGdldFByb2ZpbGVEYXRhID0gKGRhdGEpID0+IE9iamVjdC5lbnRyaWVzKGRhdGEpXG4gICAgLmZpbHRlcigoW2tleV0pID0+IHByb2ZpbGVLZXlSZWdleC50ZXN0KGtleSkpXG4gICAgLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7IC4uLmFjYywgW3Byb2ZpbGVLZXlSZWdleC5leGVjKGtleSlbMl1dOiB2YWx1ZSB9KSwge1xuICAgIC4uLihkYXRhLmRlZmF1bHQgJiYgeyBkZWZhdWx0OiBkYXRhLmRlZmF1bHQgfSksXG59KTtcbmV4cG9ydHMuZ2V0UHJvZmlsZURhdGEgPSBnZXRQcm9maWxlRGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlSW5pID0gdm9pZCAwO1xuY29uc3QgcHJvZmlsZU5hbWVCbG9ja0xpc3QgPSBbXCJfX3Byb3RvX19cIiwgXCJwcm9maWxlIF9fcHJvdG9fX1wiXTtcbmNvbnN0IHBhcnNlSW5pID0gKGluaURhdGEpID0+IHtcbiAgICBjb25zdCBtYXAgPSB7fTtcbiAgICBsZXQgY3VycmVudFNlY3Rpb247XG4gICAgZm9yIChsZXQgbGluZSBvZiBpbmlEYXRhLnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoLyhefFxccylbOyNdLylbMF0udHJpbSgpO1xuICAgICAgICBjb25zdCBpc1NlY3Rpb24gPSBsaW5lWzBdID09PSBcIltcIiAmJiBsaW5lW2xpbmUubGVuZ3RoIC0gMV0gPT09IFwiXVwiO1xuICAgICAgICBpZiAoaXNTZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbiA9IGxpbmUuc3Vic3RyaW5nKDEsIGxpbmUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBpZiAocHJvZmlsZU5hbWVCbG9ja0xpc3QuaW5jbHVkZXMoY3VycmVudFNlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBpbnZhbGlkIHByb2ZpbGUgbmFtZSBcIiR7Y3VycmVudFNlY3Rpb259XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyZW50U2VjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZkVxdWFsc1NpZ24gPSBsaW5lLmluZGV4T2YoXCI9XCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gbGluZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgaXNBc3NpZ25tZW50ID0gaW5kZXhPZkVxdWFsc1NpZ24gIT09IC0xICYmIGluZGV4T2ZFcXVhbHNTaWduICE9PSBzdGFydCAmJiBpbmRleE9mRXF1YWxzU2lnbiAhPT0gZW5kO1xuICAgICAgICAgICAgaWYgKGlzQXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmUuc3Vic3RyaW5nKDAsIGluZGV4T2ZFcXVhbHNTaWduKS50cmltKCksXG4gICAgICAgICAgICAgICAgICAgIGxpbmUuc3Vic3RyaW5nKGluZGV4T2ZFcXVhbHNTaWduICsgMSkudHJpbSgpLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgbWFwW2N1cnJlbnRTZWN0aW9uXSA9IG1hcFtjdXJyZW50U2VjdGlvbl0gfHwge307XG4gICAgICAgICAgICAgICAgbWFwW2N1cnJlbnRTZWN0aW9uXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59O1xuZXhwb3J0cy5wYXJzZUluaSA9IHBhcnNlSW5pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2x1cnBGaWxlID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgcmVhZEZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5jb25zdCBmaWxlUHJvbWlzZXNIYXNoID0ge307XG5jb25zdCBzbHVycEZpbGUgPSAocGF0aCwgb3B0aW9ucykgPT4ge1xuICAgIGlmICghZmlsZVByb21pc2VzSGFzaFtwYXRoXSB8fCAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmlnbm9yZUNhY2hlKSkge1xuICAgICAgICBmaWxlUHJvbWlzZXNIYXNoW3BhdGhdID0gcmVhZEZpbGUocGF0aCwgXCJ1dGY4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZVByb21pc2VzSGFzaFtwYXRoXTtcbn07XG5leHBvcnRzLnNsdXJwRmlsZSA9IHNsdXJwRmlsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvYWRTaGFyZWRDb25maWdGaWxlcyA9IHZvaWQgMDtcbmNvbnN0IGdldENvbmZpZ0ZpbGVwYXRoXzEgPSByZXF1aXJlKFwiLi9nZXRDb25maWdGaWxlcGF0aFwiKTtcbmNvbnN0IGdldENyZWRlbnRpYWxzRmlsZXBhdGhfMSA9IHJlcXVpcmUoXCIuL2dldENyZWRlbnRpYWxzRmlsZXBhdGhcIik7XG5jb25zdCBnZXRQcm9maWxlRGF0YV8xID0gcmVxdWlyZShcIi4vZ2V0UHJvZmlsZURhdGFcIik7XG5jb25zdCBwYXJzZUluaV8xID0gcmVxdWlyZShcIi4vcGFyc2VJbmlcIik7XG5jb25zdCBzbHVycEZpbGVfMSA9IHJlcXVpcmUoXCIuL3NsdXJwRmlsZVwiKTtcbmNvbnN0IHN3YWxsb3dFcnJvciA9ICgpID0+ICh7fSk7XG5jb25zdCBsb2FkU2hhcmVkQ29uZmlnRmlsZXMgPSBhc3luYyAoaW5pdCA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBmaWxlcGF0aCA9ICgwLCBnZXRDcmVkZW50aWFsc0ZpbGVwYXRoXzEuZ2V0Q3JlZGVudGlhbHNGaWxlcGF0aCkoKSwgY29uZmlnRmlsZXBhdGggPSAoMCwgZ2V0Q29uZmlnRmlsZXBhdGhfMS5nZXRDb25maWdGaWxlcGF0aCkoKSB9ID0gaW5pdDtcbiAgICBjb25zdCBwYXJzZWRGaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgKDAsIHNsdXJwRmlsZV8xLnNsdXJwRmlsZSkoY29uZmlnRmlsZXBhdGgsIHtcbiAgICAgICAgICAgIGlnbm9yZUNhY2hlOiBpbml0Lmlnbm9yZUNhY2hlLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocGFyc2VJbmlfMS5wYXJzZUluaSlcbiAgICAgICAgICAgIC50aGVuKGdldFByb2ZpbGVEYXRhXzEuZ2V0UHJvZmlsZURhdGEpXG4gICAgICAgICAgICAuY2F0Y2goc3dhbGxvd0Vycm9yKSxcbiAgICAgICAgKDAsIHNsdXJwRmlsZV8xLnNsdXJwRmlsZSkoZmlsZXBhdGgsIHtcbiAgICAgICAgICAgIGlnbm9yZUNhY2hlOiBpbml0Lmlnbm9yZUNhY2hlLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocGFyc2VJbmlfMS5wYXJzZUluaSlcbiAgICAgICAgICAgIC5jYXRjaChzd2FsbG93RXJyb3IpLFxuICAgIF0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbmZpZ0ZpbGU6IHBhcnNlZEZpbGVzWzBdLFxuICAgICAgICBjcmVkZW50aWFsc0ZpbGU6IHBhcnNlZEZpbGVzWzFdLFxuICAgIH07XG59O1xuZXhwb3J0cy5sb2FkU2hhcmVkQ29uZmlnRmlsZXMgPSBsb2FkU2hhcmVkQ29uZmlnRmlsZXM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTc29TZXNzaW9uRGF0YSA9IHZvaWQgMDtcbmNvbnN0IHNzb1Nlc3Npb25LZXlSZWdleCA9IC9ec3NvLXNlc3Npb25cXHMoW1wiJ10pPyhbXlxcMV0rKVxcMSQvO1xuY29uc3QgZ2V0U3NvU2Vzc2lvbkRhdGEgPSAoZGF0YSkgPT4gT2JqZWN0LmVudHJpZXMoZGF0YSlcbiAgICAuZmlsdGVyKChba2V5XSkgPT4gc3NvU2Vzc2lvbktleVJlZ2V4LnRlc3Qoa2V5KSlcbiAgICAucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHsgLi4uYWNjLCBbc3NvU2Vzc2lvbktleVJlZ2V4LmV4ZWMoa2V5KVsyXV06IHZhbHVlIH0pLCB7fSk7XG5leHBvcnRzLmdldFNzb1Nlc3Npb25EYXRhID0gZ2V0U3NvU2Vzc2lvbkRhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2FkU3NvU2Vzc2lvbkRhdGEgPSB2b2lkIDA7XG5jb25zdCBnZXRDb25maWdGaWxlcGF0aF8xID0gcmVxdWlyZShcIi4vZ2V0Q29uZmlnRmlsZXBhdGhcIik7XG5jb25zdCBnZXRTc29TZXNzaW9uRGF0YV8xID0gcmVxdWlyZShcIi4vZ2V0U3NvU2Vzc2lvbkRhdGFcIik7XG5jb25zdCBwYXJzZUluaV8xID0gcmVxdWlyZShcIi4vcGFyc2VJbmlcIik7XG5jb25zdCBzbHVycEZpbGVfMSA9IHJlcXVpcmUoXCIuL3NsdXJwRmlsZVwiKTtcbmNvbnN0IHN3YWxsb3dFcnJvciA9ICgpID0+ICh7fSk7XG5jb25zdCBsb2FkU3NvU2Vzc2lvbkRhdGEgPSBhc3luYyAoaW5pdCA9IHt9KSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoMCwgc2x1cnBGaWxlXzEuc2x1cnBGaWxlKSgoX2EgPSBpbml0LmNvbmZpZ0ZpbGVwYXRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgZ2V0Q29uZmlnRmlsZXBhdGhfMS5nZXRDb25maWdGaWxlcGF0aCkoKSlcbiAgICAgICAgLnRoZW4ocGFyc2VJbmlfMS5wYXJzZUluaSlcbiAgICAgICAgLnRoZW4oZ2V0U3NvU2Vzc2lvbkRhdGFfMS5nZXRTc29TZXNzaW9uRGF0YSlcbiAgICAgICAgLmNhdGNoKHN3YWxsb3dFcnJvcik7XG59O1xuZXhwb3J0cy5sb2FkU3NvU2Vzc2lvbkRhdGEgPSBsb2FkU3NvU2Vzc2lvbkRhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUNvbmZpZ0ZpbGVzID0gdm9pZCAwO1xuY29uc3QgbWVyZ2VDb25maWdGaWxlcyA9ICguLi5maWxlcykgPT4ge1xuICAgIGNvbnN0IG1lcmdlZCA9IHt9O1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZmlsZSkpIHtcbiAgICAgICAgICAgIGlmIChtZXJnZWRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWRba2V5XSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lcmdlZFtrZXldID0gdmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWQ7XG59O1xuZXhwb3J0cy5tZXJnZUNvbmZpZ0ZpbGVzID0gbWVyZ2VDb25maWdGaWxlcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlS25vd25GaWxlcyA9IHZvaWQgMDtcbmNvbnN0IGxvYWRTaGFyZWRDb25maWdGaWxlc18xID0gcmVxdWlyZShcIi4vbG9hZFNoYXJlZENvbmZpZ0ZpbGVzXCIpO1xuY29uc3QgbWVyZ2VDb25maWdGaWxlc18xID0gcmVxdWlyZShcIi4vbWVyZ2VDb25maWdGaWxlc1wiKTtcbmNvbnN0IHBhcnNlS25vd25GaWxlcyA9IGFzeW5jIChpbml0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkRmlsZXMgPSBhd2FpdCAoMCwgbG9hZFNoYXJlZENvbmZpZ0ZpbGVzXzEubG9hZFNoYXJlZENvbmZpZ0ZpbGVzKShpbml0KTtcbiAgICByZXR1cm4gKDAsIG1lcmdlQ29uZmlnRmlsZXNfMS5tZXJnZUNvbmZpZ0ZpbGVzKShwYXJzZWRGaWxlcy5jb25maWdGaWxlLCBwYXJzZWRGaWxlcy5jcmVkZW50aWFsc0ZpbGUpO1xufTtcbmV4cG9ydHMucGFyc2VLbm93bkZpbGVzID0gcGFyc2VLbm93bkZpbGVzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2V0SG9tZURpclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nZXRQcm9maWxlTmFtZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nZXRTU09Ub2tlbkZpbGVwYXRoXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dldFNTT1Rva2VuRnJvbUZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9hZFNoYXJlZENvbmZpZ0ZpbGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xvYWRTc29TZXNzaW9uRGF0YVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZUtub3duRmlsZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaHR0cFJlcXVlc3QgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgYnVmZmVyXzEgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuY29uc3QgaHR0cF8xID0gcmVxdWlyZShcImh0dHBcIik7XG5mdW5jdGlvbiBodHRwUmVxdWVzdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXEgPSAoMCwgaHR0cF8xLnJlcXVlc3QpKHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBob3N0bmFtZTogKF9hID0gb3B0aW9ucy5ob3N0bmFtZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlcGxhY2UoL15cXFsoLispXFxdJC8sIFwiJDFcIiksXG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Qcm92aWRlckVycm9yKFwiVW5hYmxlIHRvIGNvbm5lY3QgdG8gaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZVwiKSwgZXJyKSk7XG4gICAgICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKFwidGltZW91dFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QobmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuUHJvdmlkZXJFcnJvcihcIlRpbWVvdXRFcnJvciBmcm9tIGluc3RhbmNlIG1ldGFkYXRhIHNlcnZpY2VcIikpO1xuICAgICAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcS5vbihcInJlc3BvbnNlXCIsIChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSA9IDQwMCB9ID0gcmVzO1xuICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPCAyMDAgfHwgMzAwIDw9IHN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Qcm92aWRlckVycm9yKFwiRXJyb3IgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlXCIpLCB7IHN0YXR1c0NvZGUgfSkpO1xuICAgICAgICAgICAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgICAgIHJlcy5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYnVmZmVyXzEuQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEuZW5kKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmh0dHBSZXF1ZXN0ID0gaHR0cFJlcXVlc3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tSW1kc0NyZWRlbnRpYWxzID0gZXhwb3J0cy5pc0ltZHNDcmVkZW50aWFscyA9IHZvaWQgMDtcbmNvbnN0IGlzSW1kc0NyZWRlbnRpYWxzID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBhcmcuQWNjZXNzS2V5SWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgYXJnLlNlY3JldEFjY2Vzc0tleSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiBhcmcuVG9rZW4gPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgYXJnLkV4cGlyYXRpb24gPT09IFwic3RyaW5nXCI7XG5leHBvcnRzLmlzSW1kc0NyZWRlbnRpYWxzID0gaXNJbWRzQ3JlZGVudGlhbHM7XG5jb25zdCBmcm9tSW1kc0NyZWRlbnRpYWxzID0gKGNyZWRzKSA9PiAoe1xuICAgIGFjY2Vzc0tleUlkOiBjcmVkcy5BY2Nlc3NLZXlJZCxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6IGNyZWRzLlNlY3JldEFjY2Vzc0tleSxcbiAgICBzZXNzaW9uVG9rZW46IGNyZWRzLlRva2VuLFxuICAgIGV4cGlyYXRpb246IG5ldyBEYXRlKGNyZWRzLkV4cGlyYXRpb24pLFxufSk7XG5leHBvcnRzLmZyb21JbWRzQ3JlZGVudGlhbHMgPSBmcm9tSW1kc0NyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHJvdmlkZXJDb25maWdGcm9tSW5pdCA9IGV4cG9ydHMuREVGQVVMVF9NQVhfUkVUUklFUyA9IGV4cG9ydHMuREVGQVVMVF9USU1FT1VUID0gdm9pZCAwO1xuZXhwb3J0cy5ERUZBVUxUX1RJTUVPVVQgPSAxMDAwO1xuZXhwb3J0cy5ERUZBVUxUX01BWF9SRVRSSUVTID0gMDtcbmNvbnN0IHByb3ZpZGVyQ29uZmlnRnJvbUluaXQgPSAoeyBtYXhSZXRyaWVzID0gZXhwb3J0cy5ERUZBVUxUX01BWF9SRVRSSUVTLCB0aW1lb3V0ID0gZXhwb3J0cy5ERUZBVUxUX1RJTUVPVVQsIH0pID0+ICh7IG1heFJldHJpZXMsIHRpbWVvdXQgfSk7XG5leHBvcnRzLnByb3ZpZGVyQ29uZmlnRnJvbUluaXQgPSBwcm92aWRlckNvbmZpZ0Zyb21Jbml0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmV0cnkgPSB2b2lkIDA7XG5jb25zdCByZXRyeSA9ICh0b1JldHJ5LCBtYXhSZXRyaWVzKSA9PiB7XG4gICAgbGV0IHByb21pc2UgPSB0b1JldHJ5KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhSZXRyaWVzOyBpKyspIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2godG9SZXRyeSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlO1xufTtcbmV4cG9ydHMucmV0cnkgPSByZXRyeTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Db250YWluZXJNZXRhZGF0YSA9IGV4cG9ydHMuRU5WX0NNRFNfQVVUSF9UT0tFTiA9IGV4cG9ydHMuRU5WX0NNRFNfUkVMQVRJVkVfVVJJID0gZXhwb3J0cy5FTlZfQ01EU19GVUxMX1VSSSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBodHRwUmVxdWVzdF8xID0gcmVxdWlyZShcIi4vcmVtb3RlUHJvdmlkZXIvaHR0cFJlcXVlc3RcIik7XG5jb25zdCBJbWRzQ3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3JlbW90ZVByb3ZpZGVyL0ltZHNDcmVkZW50aWFsc1wiKTtcbmNvbnN0IFJlbW90ZVByb3ZpZGVySW5pdF8xID0gcmVxdWlyZShcIi4vcmVtb3RlUHJvdmlkZXIvUmVtb3RlUHJvdmlkZXJJbml0XCIpO1xuY29uc3QgcmV0cnlfMSA9IHJlcXVpcmUoXCIuL3JlbW90ZVByb3ZpZGVyL3JldHJ5XCIpO1xuZXhwb3J0cy5FTlZfQ01EU19GVUxMX1VSSSA9IFwiQVdTX0NPTlRBSU5FUl9DUkVERU5USUFMU19GVUxMX1VSSVwiO1xuZXhwb3J0cy5FTlZfQ01EU19SRUxBVElWRV9VUkkgPSBcIkFXU19DT05UQUlORVJfQ1JFREVOVElBTFNfUkVMQVRJVkVfVVJJXCI7XG5leHBvcnRzLkVOVl9DTURTX0FVVEhfVE9LRU4gPSBcIkFXU19DT05UQUlORVJfQVVUSE9SSVpBVElPTl9UT0tFTlwiO1xuY29uc3QgZnJvbUNvbnRhaW5lck1ldGFkYXRhID0gKGluaXQgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgdGltZW91dCwgbWF4UmV0cmllcyB9ID0gKDAsIFJlbW90ZVByb3ZpZGVySW5pdF8xLnByb3ZpZGVyQ29uZmlnRnJvbUluaXQpKGluaXQpO1xuICAgIHJldHVybiAoKSA9PiAoMCwgcmV0cnlfMS5yZXRyeSkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IGF3YWl0IGdldENtZHNVcmkoKTtcbiAgICAgICAgY29uc3QgY3JlZHNSZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgcmVxdWVzdEZyb21FY3NJbWRzKHRpbWVvdXQsIHJlcXVlc3RPcHRpb25zKSk7XG4gICAgICAgIGlmICghKDAsIEltZHNDcmVkZW50aWFsc18xLmlzSW1kc0NyZWRlbnRpYWxzKShjcmVkc1Jlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiSW52YWxpZCByZXNwb25zZSByZWNlaXZlZCBmcm9tIGluc3RhbmNlIG1ldGFkYXRhIHNlcnZpY2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgSW1kc0NyZWRlbnRpYWxzXzEuZnJvbUltZHNDcmVkZW50aWFscykoY3JlZHNSZXNwb25zZSk7XG4gICAgfSwgbWF4UmV0cmllcyk7XG59O1xuZXhwb3J0cy5mcm9tQ29udGFpbmVyTWV0YWRhdGEgPSBmcm9tQ29udGFpbmVyTWV0YWRhdGE7XG5jb25zdCByZXF1ZXN0RnJvbUVjc0ltZHMgPSBhc3luYyAodGltZW91dCwgb3B0aW9ucykgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudltleHBvcnRzLkVOVl9DTURTX0FVVEhfVE9LRU5dKSB7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX0NNRFNfQVVUSF9UT0tFTl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0ICgwLCBodHRwUmVxdWVzdF8xLmh0dHBSZXF1ZXN0KSh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHRpbWVvdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xufTtcbmNvbnN0IENNRFNfSVAgPSBcIjE2OS4yNTQuMTcwLjJcIjtcbmNvbnN0IEdSRUVOR1JBU1NfSE9TVFMgPSB7XG4gICAgbG9jYWxob3N0OiB0cnVlLFxuICAgIFwiMTI3LjAuMC4xXCI6IHRydWUsXG59O1xuY29uc3QgR1JFRU5HUkFTU19QUk9UT0NPTFMgPSB7XG4gICAgXCJodHRwOlwiOiB0cnVlLFxuICAgIFwiaHR0cHM6XCI6IHRydWUsXG59O1xuY29uc3QgZ2V0Q21kc1VyaSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfQ01EU19SRUxBVElWRV9VUkldKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0bmFtZTogQ01EU19JUCxcbiAgICAgICAgICAgIHBhdGg6IHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX0NNRFNfUkVMQVRJVkVfVVJJXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX0NNRFNfRlVMTF9VUkldKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9ICgwLCB1cmxfMS5wYXJzZSkocHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfQ01EU19GVUxMX1VSSV0pO1xuICAgICAgICBpZiAoIXBhcnNlZC5ob3N0bmFtZSB8fCAhKHBhcnNlZC5ob3N0bmFtZSBpbiBHUkVFTkdSQVNTX0hPU1RTKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGAke3BhcnNlZC5ob3N0bmFtZX0gaXMgbm90IGEgdmFsaWQgY29udGFpbmVyIG1ldGFkYXRhIHNlcnZpY2UgaG9zdG5hbWVgLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJzZWQucHJvdG9jb2wgfHwgIShwYXJzZWQucHJvdG9jb2wgaW4gR1JFRU5HUkFTU19QUk9UT0NPTFMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYCR7cGFyc2VkLnByb3RvY29sfSBpcyBub3QgYSB2YWxpZCBjb250YWluZXIgbWV0YWRhdGEgc2VydmljZSBwcm90b2NvbGAsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucGFyc2VkLFxuICAgICAgICAgICAgcG9ydDogcGFyc2VkLnBvcnQgPyBwYXJzZUludChwYXJzZWQucG9ydCwgMTApIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJUaGUgY29udGFpbmVyIG1ldGFkYXRhIGNyZWRlbnRpYWwgcHJvdmlkZXIgY2Fubm90IGJlIHVzZWQgdW5sZXNzXCIgK1xuICAgICAgICBgIHRoZSAke2V4cG9ydHMuRU5WX0NNRFNfUkVMQVRJVkVfVVJJfSBvciAke2V4cG9ydHMuRU5WX0NNRFNfRlVMTF9VUkl9IGVudmlyb25tZW50YCArXG4gICAgICAgIFwiIHZhcmlhYmxlIGlzIHNldFwiLCBmYWxzZSk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUVudiA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmcm9tRW52ID0gKGVudlZhclNlbGVjdG9yKSA9PiBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gZW52VmFyU2VsZWN0b3IocHJvY2Vzcy5lbnYpO1xuICAgICAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihlLm1lc3NhZ2UgfHwgYENhbm5vdCBsb2FkIGNvbmZpZyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIGdldHRlcjogJHtlbnZWYXJTZWxlY3Rvcn1gKTtcbiAgICB9XG59O1xuZXhwb3J0cy5mcm9tRW52ID0gZnJvbUVudjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21TaGFyZWRDb25maWdGaWxlcyA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IGZyb21TaGFyZWRDb25maWdGaWxlcyA9IChjb25maWdTZWxlY3RvciwgeyBwcmVmZXJyZWRGaWxlID0gXCJjb25maWdcIiwgLi4uaW5pdCB9ID0ge30pID0+IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0gKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRQcm9maWxlTmFtZSkoaW5pdCk7XG4gICAgY29uc3QgeyBjb25maWdGaWxlLCBjcmVkZW50aWFsc0ZpbGUgfSA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEubG9hZFNoYXJlZENvbmZpZ0ZpbGVzKShpbml0KTtcbiAgICBjb25zdCBwcm9maWxlRnJvbUNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNGaWxlW3Byb2ZpbGVdIHx8IHt9O1xuICAgIGNvbnN0IHByb2ZpbGVGcm9tQ29uZmlnID0gY29uZmlnRmlsZVtwcm9maWxlXSB8fCB7fTtcbiAgICBjb25zdCBtZXJnZWRQcm9maWxlID0gcHJlZmVycmVkRmlsZSA9PT0gXCJjb25maWdcIlxuICAgICAgICA/IHsgLi4ucHJvZmlsZUZyb21DcmVkZW50aWFscywgLi4ucHJvZmlsZUZyb21Db25maWcgfVxuICAgICAgICA6IHsgLi4ucHJvZmlsZUZyb21Db25maWcsIC4uLnByb2ZpbGVGcm9tQ3JlZGVudGlhbHMgfTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWdWYWx1ZSA9IGNvbmZpZ1NlbGVjdG9yKG1lcmdlZFByb2ZpbGUpO1xuICAgICAgICBpZiAoY29uZmlnVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoZS5tZXNzYWdlIHx8XG4gICAgICAgICAgICBgQ2Fubm90IGxvYWQgY29uZmlnIGZvciBwcm9maWxlICR7cHJvZmlsZX0gaW4gU0RLIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBnZXR0ZXI6ICR7Y29uZmlnU2VsZWN0b3J9YCk7XG4gICAgfVxufTtcbmV4cG9ydHMuZnJvbVNoYXJlZENvbmZpZ0ZpbGVzID0gZnJvbVNoYXJlZENvbmZpZ0ZpbGVzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVN0YXRpYyA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBpc0Z1bmN0aW9uID0gKGZ1bmMpID0+IHR5cGVvZiBmdW5jID09PSBcImZ1bmN0aW9uXCI7XG5jb25zdCBmcm9tU3RhdGljID0gKGRlZmF1bHRWYWx1ZSkgPT4gaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpID8gYXN5bmMgKCkgPT4gYXdhaXQgZGVmYXVsdFZhbHVlKCkgOiAoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5mcm9tU3RhdGljKShkZWZhdWx0VmFsdWUpO1xuZXhwb3J0cy5mcm9tU3RhdGljID0gZnJvbVN0YXRpYztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvYWRDb25maWcgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgZnJvbUVudl8xID0gcmVxdWlyZShcIi4vZnJvbUVudlwiKTtcbmNvbnN0IGZyb21TaGFyZWRDb25maWdGaWxlc18xID0gcmVxdWlyZShcIi4vZnJvbVNoYXJlZENvbmZpZ0ZpbGVzXCIpO1xuY29uc3QgZnJvbVN0YXRpY18xID0gcmVxdWlyZShcIi4vZnJvbVN0YXRpY1wiKTtcbmNvbnN0IGxvYWRDb25maWcgPSAoeyBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3IsIGNvbmZpZ0ZpbGVTZWxlY3RvciwgZGVmYXVsdDogZGVmYXVsdFZhbHVlIH0sIGNvbmZpZ3VyYXRpb24gPSB7fSkgPT4gKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEubWVtb2l6ZSkoKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEuY2hhaW4pKCgwLCBmcm9tRW52XzEuZnJvbUVudikoZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yKSwgKDAsIGZyb21TaGFyZWRDb25maWdGaWxlc18xLmZyb21TaGFyZWRDb25maWdGaWxlcykoY29uZmlnRmlsZVNlbGVjdG9yLCBjb25maWd1cmF0aW9uKSwgKDAsIGZyb21TdGF0aWNfMS5mcm9tU3RhdGljKShkZWZhdWx0VmFsdWUpKSk7XG5leHBvcnRzLmxvYWRDb25maWcgPSBsb2FkQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25maWdMb2FkZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW5kcG9pbnQgPSB2b2lkIDA7XG52YXIgRW5kcG9pbnQ7XG4oZnVuY3Rpb24gKEVuZHBvaW50KSB7XG4gICAgRW5kcG9pbnRbXCJJUHY0XCJdID0gXCJodHRwOi8vMTY5LjI1NC4xNjkuMjU0XCI7XG4gICAgRW5kcG9pbnRbXCJJUHY2XCJdID0gXCJodHRwOi8vW2ZkMDA6ZWMyOjoyNTRdXCI7XG59KShFbmRwb2ludCA9IGV4cG9ydHMuRW5kcG9pbnQgfHwgKGV4cG9ydHMuRW5kcG9pbnQgPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRU5EUE9JTlRfQ09ORklHX09QVElPTlMgPSBleHBvcnRzLkNPTkZJR19FTkRQT0lOVF9OQU1FID0gZXhwb3J0cy5FTlZfRU5EUE9JTlRfTkFNRSA9IHZvaWQgMDtcbmV4cG9ydHMuRU5WX0VORFBPSU5UX05BTUUgPSBcIkFXU19FQzJfTUVUQURBVEFfU0VSVklDRV9FTkRQT0lOVFwiO1xuZXhwb3J0cy5DT05GSUdfRU5EUE9JTlRfTkFNRSA9IFwiZWMyX21ldGFkYXRhX3NlcnZpY2VfZW5kcG9pbnRcIjtcbmV4cG9ydHMuRU5EUE9JTlRfQ09ORklHX09QVElPTlMgPSB7XG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbZXhwb3J0cy5FTlZfRU5EUE9JTlRfTkFNRV0sXG4gICAgY29uZmlnRmlsZVNlbGVjdG9yOiAocHJvZmlsZSkgPT4gcHJvZmlsZVtleHBvcnRzLkNPTkZJR19FTkRQT0lOVF9OQU1FXSxcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW5kcG9pbnRNb2RlID0gdm9pZCAwO1xudmFyIEVuZHBvaW50TW9kZTtcbihmdW5jdGlvbiAoRW5kcG9pbnRNb2RlKSB7XG4gICAgRW5kcG9pbnRNb2RlW1wiSVB2NFwiXSA9IFwiSVB2NFwiO1xuICAgIEVuZHBvaW50TW9kZVtcIklQdjZcIl0gPSBcIklQdjZcIjtcbn0pKEVuZHBvaW50TW9kZSA9IGV4cG9ydHMuRW5kcG9pbnRNb2RlIHx8IChleHBvcnRzLkVuZHBvaW50TW9kZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FTkRQT0lOVF9NT0RFX0NPTkZJR19PUFRJT05TID0gZXhwb3J0cy5DT05GSUdfRU5EUE9JTlRfTU9ERV9OQU1FID0gZXhwb3J0cy5FTlZfRU5EUE9JTlRfTU9ERV9OQU1FID0gdm9pZCAwO1xuY29uc3QgRW5kcG9pbnRNb2RlXzEgPSByZXF1aXJlKFwiLi9FbmRwb2ludE1vZGVcIik7XG5leHBvcnRzLkVOVl9FTkRQT0lOVF9NT0RFX05BTUUgPSBcIkFXU19FQzJfTUVUQURBVEFfU0VSVklDRV9FTkRQT0lOVF9NT0RFXCI7XG5leHBvcnRzLkNPTkZJR19FTkRQT0lOVF9NT0RFX05BTUUgPSBcImVjMl9tZXRhZGF0YV9zZXJ2aWNlX2VuZHBvaW50X21vZGVcIjtcbmV4cG9ydHMuRU5EUE9JTlRfTU9ERV9DT05GSUdfT1BUSU9OUyA9IHtcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IGVudltleHBvcnRzLkVOVl9FTkRQT0lOVF9NT0RFX05BTUVdLFxuICAgIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHByb2ZpbGVbZXhwb3J0cy5DT05GSUdfRU5EUE9JTlRfTU9ERV9OQU1FXSxcbiAgICBkZWZhdWx0OiBFbmRwb2ludE1vZGVfMS5FbmRwb2ludE1vZGUuSVB2NCxcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnQgPSB2b2lkIDA7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3QgdXJsX3BhcnNlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3VybC1wYXJzZXJcIik7XG5jb25zdCBFbmRwb2ludF8xID0gcmVxdWlyZShcIi4uL2NvbmZpZy9FbmRwb2ludFwiKTtcbmNvbnN0IEVuZHBvaW50Q29uZmlnT3B0aW9uc18xID0gcmVxdWlyZShcIi4uL2NvbmZpZy9FbmRwb2ludENvbmZpZ09wdGlvbnNcIik7XG5jb25zdCBFbmRwb2ludE1vZGVfMSA9IHJlcXVpcmUoXCIuLi9jb25maWcvRW5kcG9pbnRNb2RlXCIpO1xuY29uc3QgRW5kcG9pbnRNb2RlQ29uZmlnT3B0aW9uc18xID0gcmVxdWlyZShcIi4uL2NvbmZpZy9FbmRwb2ludE1vZGVDb25maWdPcHRpb25zXCIpO1xuY29uc3QgZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50ID0gYXN5bmMgKCkgPT4gKDAsIHVybF9wYXJzZXJfMS5wYXJzZVVybCkoKGF3YWl0IGdldEZyb21FbmRwb2ludENvbmZpZygpKSB8fCAoYXdhaXQgZ2V0RnJvbUVuZHBvaW50TW9kZUNvbmZpZygpKSk7XG5leHBvcnRzLmdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludCA9IGdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludDtcbmNvbnN0IGdldEZyb21FbmRwb2ludENvbmZpZyA9IGFzeW5jICgpID0+ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKEVuZHBvaW50Q29uZmlnT3B0aW9uc18xLkVORFBPSU5UX0NPTkZJR19PUFRJT05TKSgpO1xuY29uc3QgZ2V0RnJvbUVuZHBvaW50TW9kZUNvbmZpZyA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmRwb2ludE1vZGUgPSBhd2FpdCAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShFbmRwb2ludE1vZGVDb25maWdPcHRpb25zXzEuRU5EUE9JTlRfTU9ERV9DT05GSUdfT1BUSU9OUykoKTtcbiAgICBzd2l0Y2ggKGVuZHBvaW50TW9kZSkge1xuICAgICAgICBjYXNlIEVuZHBvaW50TW9kZV8xLkVuZHBvaW50TW9kZS5JUHY0OlxuICAgICAgICAgICAgcmV0dXJuIEVuZHBvaW50XzEuRW5kcG9pbnQuSVB2NDtcbiAgICAgICAgY2FzZSBFbmRwb2ludE1vZGVfMS5FbmRwb2ludE1vZGUuSVB2NjpcbiAgICAgICAgICAgIHJldHVybiBFbmRwb2ludF8xLkVuZHBvaW50LklQdjY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVuZHBvaW50IG1vZGU6ICR7ZW5kcG9pbnRNb2RlfS5gICsgYCBTZWxlY3QgZnJvbSAke09iamVjdC52YWx1ZXMoRW5kcG9pbnRNb2RlXzEuRW5kcG9pbnRNb2RlKX1gKTtcbiAgICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RXh0ZW5kZWRJbnN0YW5jZU1ldGFkYXRhQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBTVEFUSUNfU1RBQklMSVRZX1JFRlJFU0hfSU5URVJWQUxfU0VDT05EUyA9IDUgKiA2MDtcbmNvbnN0IFNUQVRJQ19TVEFCSUxJVFlfUkVGUkVTSF9JTlRFUlZBTF9KSVRURVJfV0lORE9XX1NFQ09ORFMgPSA1ICogNjA7XG5jb25zdCBTVEFUSUNfU1RBQklMSVRZX0RPQ19VUkwgPSBcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZGtyZWYvbGF0ZXN0L2d1aWRlL2ZlYXR1cmUtc3RhdGljLWNyZWRlbnRpYWxzLmh0bWxcIjtcbmNvbnN0IGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzID0gKGNyZWRlbnRpYWxzLCBsb2dnZXIpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVmcmVzaEludGVydmFsID0gU1RBVElDX1NUQUJJTElUWV9SRUZSRVNIX0lOVEVSVkFMX1NFQ09ORFMgK1xuICAgICAgICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBTVEFUSUNfU1RBQklMSVRZX1JFRlJFU0hfSU5URVJWQUxfSklUVEVSX1dJTkRPV19TRUNPTkRTKTtcbiAgICBjb25zdCBuZXdFeHBpcmF0aW9uID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIHJlZnJlc2hJbnRlcnZhbCAqIDEwMDApO1xuICAgIGxvZ2dlci53YXJuKFwiQXR0ZW1wdGluZyBjcmVkZW50aWFsIGV4cGlyYXRpb24gZXh0ZW5zaW9uIGR1ZSB0byBhIGNyZWRlbnRpYWwgc2VydmljZSBhdmFpbGFiaWxpdHkgaXNzdWUuIEEgcmVmcmVzaCBvZiB0aGVzZSBcIiArXG4gICAgICAgIFwiY3JlZGVudGlhbHMgd2lsbCBiZSBhdHRlbXB0ZWQgYWZ0ZXIgJHtuZXcgRGF0ZShuZXdFeHBpcmF0aW9uKX0uXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdDogXCIgK1xuICAgICAgICBTVEFUSUNfU1RBQklMSVRZX0RPQ19VUkwpO1xuICAgIGNvbnN0IG9yaWdpbmFsRXhwaXJhdGlvbiA9IChfYSA9IGNyZWRlbnRpYWxzLm9yaWdpbmFsRXhwaXJhdGlvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY3JlZGVudGlhbHMuZXhwaXJhdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgICAgLi4uKG9yaWdpbmFsRXhwaXJhdGlvbiA/IHsgb3JpZ2luYWxFeHBpcmF0aW9uIH0gOiB7fSksXG4gICAgICAgIGV4cGlyYXRpb246IG5ld0V4cGlyYXRpb24sXG4gICAgfTtcbn07XG5leHBvcnRzLmdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzID0gZ2V0RXh0ZW5kZWRJbnN0YW5jZU1ldGFkYXRhQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGF0aWNTdGFiaWxpdHlQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9nZXRFeHRlbmRlZEluc3RhbmNlTWV0YWRhdGFDcmVkZW50aWFsc1wiKTtcbmNvbnN0IHN0YXRpY1N0YWJpbGl0eVByb3ZpZGVyID0gKHByb3ZpZGVyLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBsb2dnZXIgPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvZ2dlcikgfHwgY29uc29sZTtcbiAgICBsZXQgcGFzdENyZWRlbnRpYWxzO1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgcHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmIChjcmVkZW50aWFscy5leHBpcmF0aW9uICYmIGNyZWRlbnRpYWxzLmV4cGlyYXRpb24uZ2V0VGltZSgpIDwgRGF0ZS5ub3coKSkge1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gKDAsIGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzXzEuZ2V0RXh0ZW5kZWRJbnN0YW5jZU1ldGFkYXRhQ3JlZGVudGlhbHMpKGNyZWRlbnRpYWxzLCBsb2dnZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocGFzdENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJDcmVkZW50aWFsIHJlbmV3IGZhaWxlZDogXCIsIGUpO1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gKDAsIGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzXzEuZ2V0RXh0ZW5kZWRJbnN0YW5jZU1ldGFkYXRhQ3JlZGVudGlhbHMpKHBhc3RDcmVkZW50aWFscywgbG9nZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGFzdENyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG4gICAgICAgIHJldHVybiBjcmVkZW50aWFscztcbiAgICB9O1xufTtcbmV4cG9ydHMuc3RhdGljU3RhYmlsaXR5UHJvdmlkZXIgPSBzdGF0aWNTdGFiaWxpdHlQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21JbnN0YW5jZU1ldGFkYXRhID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGh0dHBSZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZW1vdGVQcm92aWRlci9odHRwUmVxdWVzdFwiKTtcbmNvbnN0IEltZHNDcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVtb3RlUHJvdmlkZXIvSW1kc0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgUmVtb3RlUHJvdmlkZXJJbml0XzEgPSByZXF1aXJlKFwiLi9yZW1vdGVQcm92aWRlci9SZW1vdGVQcm92aWRlckluaXRcIik7XG5jb25zdCByZXRyeV8xID0gcmVxdWlyZShcIi4vcmVtb3RlUHJvdmlkZXIvcmV0cnlcIik7XG5jb25zdCBnZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnRfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL2dldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludFwiKTtcbmNvbnN0IHN0YXRpY1N0YWJpbGl0eVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi91dGlscy9zdGF0aWNTdGFiaWxpdHlQcm92aWRlclwiKTtcbmNvbnN0IElNRFNfUEFUSCA9IFwiL2xhdGVzdC9tZXRhLWRhdGEvaWFtL3NlY3VyaXR5LWNyZWRlbnRpYWxzL1wiO1xuY29uc3QgSU1EU19UT0tFTl9QQVRIID0gXCIvbGF0ZXN0L2FwaS90b2tlblwiO1xuY29uc3QgZnJvbUluc3RhbmNlTWV0YWRhdGEgPSAoaW5pdCA9IHt9KSA9PiAoMCwgc3RhdGljU3RhYmlsaXR5UHJvdmlkZXJfMS5zdGF0aWNTdGFiaWxpdHlQcm92aWRlcikoZ2V0SW5zdGFuY2VJbWRzUHJvdmlkZXIoaW5pdCksIHsgbG9nZ2VyOiBpbml0LmxvZ2dlciB9KTtcbmV4cG9ydHMuZnJvbUluc3RhbmNlTWV0YWRhdGEgPSBmcm9tSW5zdGFuY2VNZXRhZGF0YTtcbmNvbnN0IGdldEluc3RhbmNlSW1kc1Byb3ZpZGVyID0gKGluaXQpID0+IHtcbiAgICBsZXQgZGlzYWJsZUZldGNoVG9rZW4gPSBmYWxzZTtcbiAgICBjb25zdCB7IHRpbWVvdXQsIG1heFJldHJpZXMgfSA9ICgwLCBSZW1vdGVQcm92aWRlckluaXRfMS5wcm92aWRlckNvbmZpZ0Zyb21Jbml0KShpbml0KTtcbiAgICBjb25zdCBnZXRDcmVkZW50aWFscyA9IGFzeW5jIChtYXhSZXRyaWVzLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSAoYXdhaXQgKDAsIHJldHJ5XzEucmV0cnkpKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9maWxlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwcm9maWxlID0gYXdhaXQgZ2V0UHJvZmlsZShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRmV0Y2hUb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvZmlsZTtcbiAgICAgICAgfSwgbWF4UmV0cmllcykpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuICgwLCByZXRyeV8xLnJldHJ5KShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY3JlZHM7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNyZWRzID0gYXdhaXQgZ2V0Q3JlZGVudGlhbHNGcm9tUHJvZmlsZShwcm9maWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRmV0Y2hUb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3JlZHM7XG4gICAgICAgIH0sIG1heFJldHJpZXMpO1xuICAgIH07XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCAoMCwgZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50XzEuZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50KSgpO1xuICAgICAgICBpZiAoZGlzYWJsZUZldGNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDcmVkZW50aWFscyhtYXhSZXRyaWVzLCB7IC4uLmVuZHBvaW50LCB0aW1lb3V0IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IHRva2VuO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IChhd2FpdCBnZXRNZXRhZGF0YVRva2VuKHsgLi4uZW5kcG9pbnQsIHRpbWVvdXQgfSkpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5zdGF0dXNDb2RlKSA9PT0gNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiRUMyIE1ldGFkYXRhIHRva2VuIHJlcXVlc3QgcmV0dXJuZWQgZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UgPT09IFwiVGltZW91dEVycm9yXCIgfHwgWzQwMywgNDA0LCA0MDVdLmluY2x1ZGVzKGVycm9yLnN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVGZXRjaFRva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldENyZWRlbnRpYWxzKG1heFJldHJpZXMsIHsgLi4uZW5kcG9pbnQsIHRpbWVvdXQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbHMobWF4UmV0cmllcywge1xuICAgICAgICAgICAgICAgIC4uLmVuZHBvaW50LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ4LWF3cy1lYzItbWV0YWRhdGEtdG9rZW5cIjogdG9rZW4sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmNvbnN0IGdldE1ldGFkYXRhVG9rZW4gPSBhc3luYyAob3B0aW9ucykgPT4gKDAsIGh0dHBSZXF1ZXN0XzEuaHR0cFJlcXVlc3QpKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHBhdGg6IElNRFNfVE9LRU5fUEFUSCxcbiAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgICBcIngtYXdzLWVjMi1tZXRhZGF0YS10b2tlbi10dGwtc2Vjb25kc1wiOiBcIjIxNjAwXCIsXG4gICAgfSxcbn0pO1xuY29uc3QgZ2V0UHJvZmlsZSA9IGFzeW5jIChvcHRpb25zKSA9PiAoYXdhaXQgKDAsIGh0dHBSZXF1ZXN0XzEuaHR0cFJlcXVlc3QpKHsgLi4ub3B0aW9ucywgcGF0aDogSU1EU19QQVRIIH0pKS50b1N0cmluZygpO1xuY29uc3QgZ2V0Q3JlZGVudGlhbHNGcm9tUHJvZmlsZSA9IGFzeW5jIChwcm9maWxlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY3JlZHNSZXNwb25zZSA9IEpTT04ucGFyc2UoKGF3YWl0ICgwLCBodHRwUmVxdWVzdF8xLmh0dHBSZXF1ZXN0KSh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHBhdGg6IElNRFNfUEFUSCArIHByb2ZpbGUsXG4gICAgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGlmICghKDAsIEltZHNDcmVkZW50aWFsc18xLmlzSW1kc0NyZWRlbnRpYWxzKShjcmVkc1Jlc3BvbnNlKSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZS5cIik7XG4gICAgfVxuICAgIHJldHVybiAoMCwgSW1kc0NyZWRlbnRpYWxzXzEuZnJvbUltZHNDcmVkZW50aWFscykoY3JlZHNSZXNwb25zZSk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludCA9IGV4cG9ydHMuaHR0cFJlcXVlc3QgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbUNvbnRhaW5lck1ldGFkYXRhXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21JbnN0YW5jZU1ldGFkYXRhXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3JlbW90ZVByb3ZpZGVyL1JlbW90ZVByb3ZpZGVySW5pdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG52YXIgaHR0cFJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlbW90ZVByb3ZpZGVyL2h0dHBSZXF1ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHR0cFJlcXVlc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGh0dHBSZXF1ZXN0XzEuaHR0cFJlcXVlc3Q7IH0gfSk7XG52YXIgZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50XzEgPSByZXF1aXJlKFwiLi91dGlscy9nZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludF8xLmdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludDsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVDcmVkZW50aWFsU291cmNlID0gdm9pZCAwO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9lbnZfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWVudlwiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kc1wiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCByZXNvbHZlQ3JlZGVudGlhbFNvdXJjZSA9IChjcmVkZW50aWFsU291cmNlLCBwcm9maWxlTmFtZSkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZVByb3ZpZGVyc01hcCA9IHtcbiAgICAgICAgRWNzQ29udGFpbmVyOiBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMS5mcm9tQ29udGFpbmVyTWV0YWRhdGEsXG4gICAgICAgIEVjMkluc3RhbmNlTWV0YWRhdGE6IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xLmZyb21JbnN0YW5jZU1ldGFkYXRhLFxuICAgICAgICBFbnZpcm9ubWVudDogY3JlZGVudGlhbF9wcm92aWRlcl9lbnZfMS5mcm9tRW52LFxuICAgIH07XG4gICAgaWYgKGNyZWRlbnRpYWxTb3VyY2UgaW4gc291cmNlUHJvdmlkZXJzTWFwKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VQcm92aWRlcnNNYXBbY3JlZGVudGlhbFNvdXJjZV0oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgVW5zdXBwb3J0ZWQgY3JlZGVudGlhbCBzb3VyY2UgaW4gcHJvZmlsZSAke3Byb2ZpbGVOYW1lfS4gR290ICR7Y3JlZGVudGlhbFNvdXJjZX0sIGAgK1xuICAgICAgICAgICAgYGV4cGVjdGVkIEVjc0NvbnRhaW5lciBvciBFYzJJbnN0YW5jZU1ldGFkYXRhIG9yIEVudmlyb25tZW50LmApO1xuICAgIH1cbn07XG5leHBvcnRzLnJlc29sdmVDcmVkZW50aWFsU291cmNlID0gcmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzID0gZXhwb3J0cy5pc0Fzc3VtZVJvbGVQcm9maWxlID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgcmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2VfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVDcmVkZW50aWFsU291cmNlXCIpO1xuY29uc3QgcmVzb2x2ZVByb2ZpbGVEYXRhXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvZmlsZURhdGFcIik7XG5jb25zdCBpc0Fzc3VtZVJvbGVQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBhcmcucm9sZV9hcm4gPT09IFwic3RyaW5nXCIgJiZcbiAgICBbXCJ1bmRlZmluZWRcIiwgXCJzdHJpbmdcIl0uaW5kZXhPZih0eXBlb2YgYXJnLnJvbGVfc2Vzc2lvbl9uYW1lKSA+IC0xICYmXG4gICAgW1widW5kZWZpbmVkXCIsIFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIGFyZy5leHRlcm5hbF9pZCkgPiAtMSAmJlxuICAgIFtcInVuZGVmaW5lZFwiLCBcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBhcmcubWZhX3NlcmlhbCkgPiAtMSAmJlxuICAgIChpc0Fzc3VtZVJvbGVXaXRoU291cmNlUHJvZmlsZShhcmcpIHx8IGlzQXNzdW1lUm9sZVdpdGhQcm92aWRlclByb2ZpbGUoYXJnKSk7XG5leHBvcnRzLmlzQXNzdW1lUm9sZVByb2ZpbGUgPSBpc0Fzc3VtZVJvbGVQcm9maWxlO1xuY29uc3QgaXNBc3N1bWVSb2xlV2l0aFNvdXJjZVByb2ZpbGUgPSAoYXJnKSA9PiB0eXBlb2YgYXJnLnNvdXJjZV9wcm9maWxlID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBhcmcuY3JlZGVudGlhbF9zb3VyY2UgPT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBpc0Fzc3VtZVJvbGVXaXRoUHJvdmlkZXJQcm9maWxlID0gKGFyZykgPT4gdHlwZW9mIGFyZy5jcmVkZW50aWFsX3NvdXJjZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYXJnLnNvdXJjZV9wcm9maWxlID09PSBcInVuZGVmaW5lZFwiO1xuY29uc3QgcmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscyA9IGFzeW5jIChwcm9maWxlTmFtZSwgcHJvZmlsZXMsIG9wdGlvbnMsIHZpc2l0ZWRQcm9maWxlcyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHByb2ZpbGVzW3Byb2ZpbGVOYW1lXTtcbiAgICBpZiAoIW9wdGlvbnMucm9sZUFzc3VtZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IHJlcXVpcmVzIGEgcm9sZSB0byBiZSBhc3N1bWVkLCBidXQgbm8gcm9sZSBhc3N1bXB0aW9uIGNhbGxiYWNrIHdhcyBwcm92aWRlZC5gLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbnN0IHsgc291cmNlX3Byb2ZpbGUgfSA9IGRhdGE7XG4gICAgaWYgKHNvdXJjZV9wcm9maWxlICYmIHNvdXJjZV9wcm9maWxlIGluIHZpc2l0ZWRQcm9maWxlcykge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYERldGVjdGVkIGEgY3ljbGUgYXR0ZW1wdGluZyB0byByZXNvbHZlIGNyZWRlbnRpYWxzIGZvciBwcm9maWxlYCArXG4gICAgICAgICAgICBgICR7KDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRQcm9maWxlTmFtZSkob3B0aW9ucyl9LiBQcm9maWxlcyB2aXNpdGVkOiBgICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZpc2l0ZWRQcm9maWxlcykuam9pbihcIiwgXCIpLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZUNyZWRzUHJvdmlkZXIgPSBzb3VyY2VfcHJvZmlsZVxuICAgICAgICA/ICgwLCByZXNvbHZlUHJvZmlsZURhdGFfMS5yZXNvbHZlUHJvZmlsZURhdGEpKHNvdXJjZV9wcm9maWxlLCBwcm9maWxlcywgb3B0aW9ucywge1xuICAgICAgICAgICAgLi4udmlzaXRlZFByb2ZpbGVzLFxuICAgICAgICAgICAgW3NvdXJjZV9wcm9maWxlXTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgOiAoMCwgcmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2VfMS5yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZSkoZGF0YS5jcmVkZW50aWFsX3NvdXJjZSwgcHJvZmlsZU5hbWUpKCk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBSb2xlQXJuOiBkYXRhLnJvbGVfYXJuLFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6IGRhdGEucm9sZV9zZXNzaW9uX25hbWUgfHwgYGF3cy1zZGstanMtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIEV4dGVybmFsSWQ6IGRhdGEuZXh0ZXJuYWxfaWQsXG4gICAgfTtcbiAgICBjb25zdCB7IG1mYV9zZXJpYWwgfSA9IGRhdGE7XG4gICAgaWYgKG1mYV9zZXJpYWwpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLm1mYUNvZGVQcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IHJlcXVpcmVzIG11bHRpLWZhY3RvciBhdXRoZW50aWNhdGlvbiwgYnV0IG5vIE1GQSBjb2RlIGNhbGxiYWNrIHdhcyBwcm92aWRlZC5gLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLlNlcmlhbE51bWJlciA9IG1mYV9zZXJpYWw7XG4gICAgICAgIHBhcmFtcy5Ub2tlbkNvZGUgPSBhd2FpdCBvcHRpb25zLm1mYUNvZGVQcm92aWRlcihtZmFfc2VyaWFsKTtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlQ3JlZHMgPSBhd2FpdCBzb3VyY2VDcmVkc1Byb3ZpZGVyO1xuICAgIHJldHVybiBvcHRpb25zLnJvbGVBc3N1bWVyKHNvdXJjZUNyZWRzLCBwYXJhbXMpO1xufTtcbmV4cG9ydHMucmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscyA9IHJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBnZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMgPSAocHJvZmlsZU5hbWUsIGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YS5WZXJzaW9uICE9PSAxKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGNyZWRlbnRpYWxfcHJvY2VzcyBkaWQgbm90IHJldHVybiBWZXJzaW9uIDEuYCk7XG4gICAgfVxuICAgIGlmIChkYXRhLkFjY2Vzc0tleUlkID09PSB1bmRlZmluZWQgfHwgZGF0YS5TZWNyZXRBY2Nlc3NLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjcmVkZW50aWFsX3Byb2Nlc3MgcmV0dXJuZWQgaW52YWxpZCBjcmVkZW50aWFscy5gKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuRXhwaXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGV4cGlyZVRpbWUgPSBuZXcgRGF0ZShkYXRhLkV4cGlyYXRpb24pO1xuICAgICAgICBpZiAoZXhwaXJlVGltZSA8IGN1cnJlbnRUaW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjcmVkZW50aWFsX3Byb2Nlc3MgcmV0dXJuZWQgZXhwaXJlZCBjcmVkZW50aWFscy5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NLZXlJZDogZGF0YS5BY2Nlc3NLZXlJZCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBkYXRhLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgLi4uKGRhdGEuU2Vzc2lvblRva2VuICYmIHsgc2Vzc2lvblRva2VuOiBkYXRhLlNlc3Npb25Ub2tlbiB9KSxcbiAgICAgICAgLi4uKGRhdGEuRXhwaXJhdGlvbiAmJiB7IGV4cGlyYXRpb246IG5ldyBEYXRlKGRhdGEuRXhwaXJhdGlvbikgfSksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFscyA9IGdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgY2hpbGRfcHJvY2Vzc18xID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IGdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscyA9IGFzeW5jIChwcm9maWxlTmFtZSwgcHJvZmlsZXMpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0gcHJvZmlsZXNbcHJvZmlsZU5hbWVdO1xuICAgIGlmIChwcm9maWxlc1twcm9maWxlTmFtZV0pIHtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbFByb2Nlc3MgPSBwcm9maWxlW1wiY3JlZGVudGlhbF9wcm9jZXNzXCJdO1xuICAgICAgICBpZiAoY3JlZGVudGlhbFByb2Nlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZXhlY1Byb21pc2UgPSAoMCwgdXRpbF8xLnByb21pc2lmeSkoY2hpbGRfcHJvY2Vzc18xLmV4ZWMpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY1Byb21pc2UoY3JlZGVudGlhbFByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHN0ZG91dC50cmltKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gY3JlZGVudGlhbF9wcm9jZXNzIHJldHVybmVkIGludmFsaWQgSlNPTi5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBnZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHNfMS5nZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMpKHByb2ZpbGVOYW1lLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBkaWQgbm90IGNvbnRhaW4gY3JlZGVudGlhbF9wcm9jZXNzLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gY291bGQgbm90IGJlIGZvdW5kIGluIHNoYXJlZCBjcmVkZW50aWFscyBmaWxlLmApO1xuICAgIH1cbn07XG5leHBvcnRzLnJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVByb2Nlc3MgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IHJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHNcIik7XG5jb25zdCBmcm9tUHJvY2VzcyA9IChpbml0ID0ge30pID0+IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEucGFyc2VLbm93bkZpbGVzKShpbml0KTtcbiAgICByZXR1cm4gKDAsIHJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHNfMS5yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzKSgoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KSwgcHJvZmlsZXMpO1xufTtcbmV4cG9ydHMuZnJvbVByb2Nlc3MgPSBmcm9tUHJvY2VzcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVByb2Nlc3NcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscyA9IGV4cG9ydHMuaXNQcm9jZXNzUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfcHJvY2Vzc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2Vzc1wiKTtcbmNvbnN0IGlzUHJvY2Vzc1Byb2ZpbGUgPSAoYXJnKSA9PiBCb29sZWFuKGFyZykgJiYgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgYXJnLmNyZWRlbnRpYWxfcHJvY2VzcyA9PT0gXCJzdHJpbmdcIjtcbmV4cG9ydHMuaXNQcm9jZXNzUHJvZmlsZSA9IGlzUHJvY2Vzc1Byb2ZpbGU7XG5jb25zdCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzID0gYXN5bmMgKG9wdGlvbnMsIHByb2ZpbGUpID0+ICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Byb2Nlc3NfMS5mcm9tUHJvY2Vzcykoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgcHJvZmlsZSxcbn0pKCk7XG5leHBvcnRzLnJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNTc29Qcm9maWxlID0gdm9pZCAwO1xuY29uc3QgaXNTc29Qcm9maWxlID0gKGFyZykgPT4gYXJnICYmXG4gICAgKHR5cGVvZiBhcmcuc3NvX3N0YXJ0X3VybCA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgYXJnLnNzb19hY2NvdW50X2lkID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBhcmcuc3NvX3Nlc3Npb24gPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdHlwZW9mIGFyZy5zc29fcmVnaW9uID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBhcmcuc3NvX3JvbGVfbmFtZSA9PT0gXCJzdHJpbmdcIik7XG5leHBvcnRzLmlzU3NvUHJvZmlsZSA9IGlzU3NvUHJvZmlsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSB2b2lkIDA7XG5jb25zdCByZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogb3B0aW9ucy51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBvcHRpb25zLnVzZUZpcHNFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFNpZ25pbmdOYW1lOiBcImF3c3Nzb3BvcnRhbFwiLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhhc2ggPSB2b2lkIDA7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1idWZmZXItZnJvbVwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXRmOFwiKTtcbmNvbnN0IGJ1ZmZlcl8xID0gcmVxdWlyZShcImJ1ZmZlclwiKTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbmNsYXNzIEhhc2gge1xuICAgIGNvbnN0cnVjdG9yKGFsZ29yaXRobUlkZW50aWZpZXIsIHNlY3JldCkge1xuICAgICAgICB0aGlzLmFsZ29yaXRobUlkZW50aWZpZXIgPSBhbGdvcml0aG1JZGVudGlmaWVyO1xuICAgICAgICB0aGlzLnNlY3JldCA9IHNlY3JldDtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgICB1cGRhdGUodG9IYXNoLCBlbmNvZGluZykge1xuICAgICAgICB0aGlzLmhhc2gudXBkYXRlKCgwLCB1dGlsX3V0ZjhfMS50b1VpbnQ4QXJyYXkpKGNhc3RTb3VyY2VEYXRhKHRvSGFzaCwgZW5jb2RpbmcpKSk7XG4gICAgfVxuICAgIGRpZ2VzdCgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmhhc2guZGlnZXN0KCkpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5zZWNyZXRcbiAgICAgICAgICAgID8gKDAsIGNyeXB0b18xLmNyZWF0ZUhtYWMpKHRoaXMuYWxnb3JpdGhtSWRlbnRpZmllciwgY2FzdFNvdXJjZURhdGEodGhpcy5zZWNyZXQpKVxuICAgICAgICAgICAgOiAoMCwgY3J5cHRvXzEuY3JlYXRlSGFzaCkodGhpcy5hbGdvcml0aG1JZGVudGlmaWVyKTtcbiAgICB9XG59XG5leHBvcnRzLkhhc2ggPSBIYXNoO1xuZnVuY3Rpb24gY2FzdFNvdXJjZURhdGEodG9DYXN0LCBlbmNvZGluZykge1xuICAgIGlmIChidWZmZXJfMS5CdWZmZXIuaXNCdWZmZXIodG9DYXN0KSkge1xuICAgICAgICByZXR1cm4gdG9DYXN0O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRvQ2FzdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIHV0aWxfYnVmZmVyX2Zyb21fMS5mcm9tU3RyaW5nKSh0b0Nhc3QsIGVuY29kaW5nKTtcbiAgICB9XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0b0Nhc3QpKSB7XG4gICAgICAgIHJldHVybiAoMCwgdXRpbF9idWZmZXJfZnJvbV8xLmZyb21BcnJheUJ1ZmZlcikodG9DYXN0LmJ1ZmZlciwgdG9DYXN0LmJ5dGVPZmZzZXQsIHRvQ2FzdC5ieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCB1dGlsX2J1ZmZlcl9mcm9tXzEuZnJvbUFycmF5QnVmZmVyKSh0b0Nhc3QpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRRdWVyeVN0cmluZyA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfdXJpX2VzY2FwZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXJpLWVzY2FwZVwiKTtcbmZ1bmN0aW9uIGJ1aWxkUXVlcnlTdHJpbmcocXVlcnkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhxdWVyeSkuc29ydCgpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlba2V5XTtcbiAgICAgICAga2V5ID0gKDAsIHV0aWxfdXJpX2VzY2FwZV8xLmVzY2FwZVVyaSkoa2V5KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaUxlbiA9IHZhbHVlLmxlbmd0aDsgaSA8IGlMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goYCR7a2V5fT0keygwLCB1dGlsX3VyaV9lc2NhcGVfMS5lc2NhcGVVcmkpKHZhbHVlW2ldKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBxc0VudHJ5ID0ga2V5O1xuICAgICAgICAgICAgaWYgKHZhbHVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHFzRW50cnkgKz0gYD0keygwLCB1dGlsX3VyaV9lc2NhcGVfMS5lc2NhcGVVcmkpKHZhbHVlKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHMucHVzaChxc0VudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbihcIiZcIik7XG59XG5leHBvcnRzLmJ1aWxkUXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTk9ERUpTX1RJTUVPVVRfRVJST1JfQ09ERVMgPSB2b2lkIDA7XG5leHBvcnRzLk5PREVKU19USU1FT1VUX0VSUk9SX0NPREVTID0gW1wiRUNPTk5SRVNFVFwiLCBcIkVQSVBFXCIsIFwiRVRJTUVET1VUXCJdO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VHJhbnNmb3JtZWRIZWFkZXJzID0gdm9pZCAwO1xuY29uc3QgZ2V0VHJhbnNmb3JtZWRIZWFkZXJzID0gKGhlYWRlcnMpID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZEhlYWRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWVzID0gaGVhZGVyc1tuYW1lXTtcbiAgICAgICAgdHJhbnNmb3JtZWRIZWFkZXJzW25hbWVdID0gQXJyYXkuaXNBcnJheShoZWFkZXJWYWx1ZXMpID8gaGVhZGVyVmFsdWVzLmpvaW4oXCIsXCIpIDogaGVhZGVyVmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtZWRIZWFkZXJzO1xufTtcbmV4cG9ydHMuZ2V0VHJhbnNmb3JtZWRIZWFkZXJzID0gZ2V0VHJhbnNmb3JtZWRIZWFkZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2V0Q29ubmVjdGlvblRpbWVvdXQgPSB2b2lkIDA7XG5jb25zdCBzZXRDb25uZWN0aW9uVGltZW91dCA9IChyZXF1ZXN0LCByZWplY3QsIHRpbWVvdXRJbk1zID0gMCkgPT4ge1xuICAgIGlmICghdGltZW91dEluTXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXF1ZXN0Lm9uKFwic29ja2V0XCIsIChzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKHNvY2tldC5jb25uZWN0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoYFNvY2tldCB0aW1lZCBvdXQgd2l0aG91dCBlc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uIHdpdGhpbiAke3RpbWVvdXRJbk1zfSBtc2ApLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGltZW91dEVycm9yXCIsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSwgdGltZW91dEluTXMpO1xuICAgICAgICAgICAgc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2V0Q29ubmVjdGlvblRpbWVvdXQgPSBzZXRDb25uZWN0aW9uVGltZW91dDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldFNvY2tldEtlZXBBbGl2ZSA9IHZvaWQgMDtcbmNvbnN0IHNldFNvY2tldEtlZXBBbGl2ZSA9IChyZXF1ZXN0LCB7IGtlZXBBbGl2ZSwga2VlcEFsaXZlTXNlY3MgfSkgPT4ge1xuICAgIGlmIChrZWVwQWxpdmUgIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXF1ZXN0Lm9uKFwic29ja2V0XCIsIChzb2NrZXQpID0+IHtcbiAgICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZShrZWVwQWxpdmUsIGtlZXBBbGl2ZU1zZWNzIHx8IDApO1xuICAgIH0pO1xufTtcbmV4cG9ydHMuc2V0U29ja2V0S2VlcEFsaXZlID0gc2V0U29ja2V0S2VlcEFsaXZlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2V0U29ja2V0VGltZW91dCA9IHZvaWQgMDtcbmNvbnN0IHNldFNvY2tldFRpbWVvdXQgPSAocmVxdWVzdCwgcmVqZWN0LCB0aW1lb3V0SW5NcyA9IDApID0+IHtcbiAgICByZXF1ZXN0LnNldFRpbWVvdXQodGltZW91dEluTXMsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5kZXN0cm95KCk7XG4gICAgICAgIHJlamVjdChPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgQ29ubmVjdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0SW5Nc30gbXNgKSwgeyBuYW1lOiBcIlRpbWVvdXRFcnJvclwiIH0pKTtcbiAgICB9KTtcbn07XG5leHBvcnRzLnNldFNvY2tldFRpbWVvdXQgPSBzZXRTb2NrZXRUaW1lb3V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud3JpdGVSZXF1ZXN0Qm9keSA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IE1JTl9XQUlUX1RJTUUgPSAxMDAwO1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVSZXF1ZXN0Qm9keShodHRwUmVxdWVzdCwgcmVxdWVzdCwgbWF4Q29udGludWVUaW1lb3V0TXMgPSBNSU5fV0FJVF9USU1FKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoX2EgPSByZXF1ZXN0LmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgIGNvbnN0IGV4cGVjdCA9IGhlYWRlcnNbXCJFeHBlY3RcIl0gfHwgaGVhZGVyc1tcImV4cGVjdFwiXTtcbiAgICBpZiAoZXhwZWN0ID09PSBcIjEwMC1jb250aW51ZVwiKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgTWF0aC5tYXgoTUlOX1dBSVRfVElNRSwgbWF4Q29udGludWVUaW1lb3V0TXMpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBodHRwUmVxdWVzdC5vbihcImNvbnRpbnVlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICB3cml0ZUJvZHkoaHR0cFJlcXVlc3QsIHJlcXVlc3QuYm9keSk7XG59XG5leHBvcnRzLndyaXRlUmVxdWVzdEJvZHkgPSB3cml0ZVJlcXVlc3RCb2R5O1xuZnVuY3Rpb24gd3JpdGVCb2R5KGh0dHBSZXF1ZXN0LCBib2R5KSB7XG4gICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBzdHJlYW1fMS5SZWFkYWJsZSkge1xuICAgICAgICBib2R5LnBpcGUoaHR0cFJlcXVlc3QpO1xuICAgIH1cbiAgICBlbHNlIGlmIChib2R5KSB7XG4gICAgICAgIGh0dHBSZXF1ZXN0LmVuZChCdWZmZXIuZnJvbShib2R5KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBodHRwUmVxdWVzdC5lbmQoKTtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob2RlSHR0cEhhbmRsZXIgPSBleHBvcnRzLkRFRkFVTFRfUkVRVUVTVF9USU1FT1VUID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBxdWVyeXN0cmluZ19idWlsZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcXVlcnlzdHJpbmctYnVpbGRlclwiKTtcbmNvbnN0IGh0dHBfMSA9IHJlcXVpcmUoXCJodHRwXCIpO1xuY29uc3QgaHR0cHNfMSA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZ2V0X3RyYW5zZm9ybWVkX2hlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL2dldC10cmFuc2Zvcm1lZC1oZWFkZXJzXCIpO1xuY29uc3Qgc2V0X2Nvbm5lY3Rpb25fdGltZW91dF8xID0gcmVxdWlyZShcIi4vc2V0LWNvbm5lY3Rpb24tdGltZW91dFwiKTtcbmNvbnN0IHNldF9zb2NrZXRfa2VlcF9hbGl2ZV8xID0gcmVxdWlyZShcIi4vc2V0LXNvY2tldC1rZWVwLWFsaXZlXCIpO1xuY29uc3Qgc2V0X3NvY2tldF90aW1lb3V0XzEgPSByZXF1aXJlKFwiLi9zZXQtc29ja2V0LXRpbWVvdXRcIik7XG5jb25zdCB3cml0ZV9yZXF1ZXN0X2JvZHlfMSA9IHJlcXVpcmUoXCIuL3dyaXRlLXJlcXVlc3QtYm9keVwiKTtcbmV4cG9ydHMuREVGQVVMVF9SRVFVRVNUX1RJTUVPVVQgPSAwO1xuY2xhc3MgTm9kZUh0dHBIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB7IGhhbmRsZXJQcm90b2NvbDogXCJodHRwLzEuMVwiIH07XG4gICAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoX29wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc29sdmVEZWZhdWx0Q29uZmlnKF9vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzb2x2ZURlZmF1bHRDb25maWcob3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVzb2x2ZURlZmF1bHRDb25maWcob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RUaW1lb3V0LCBjb25uZWN0aW9uVGltZW91dCwgc29ja2V0VGltZW91dCwgaHR0cEFnZW50LCBodHRwc0FnZW50IH0gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBrZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgICBjb25zdCBtYXhTb2NrZXRzID0gNTA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dCxcbiAgICAgICAgICAgIHJlcXVlc3RUaW1lb3V0OiByZXF1ZXN0VGltZW91dCAhPT0gbnVsbCAmJiByZXF1ZXN0VGltZW91dCAhPT0gdm9pZCAwID8gcmVxdWVzdFRpbWVvdXQgOiBzb2NrZXRUaW1lb3V0LFxuICAgICAgICAgICAgaHR0cEFnZW50OiBodHRwQWdlbnQgfHwgbmV3IGh0dHBfMS5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0cyB9KSxcbiAgICAgICAgICAgIGh0dHBzQWdlbnQ6IGh0dHBzQWdlbnQgfHwgbmV3IGh0dHBzXzEuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHMgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jb25maWcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5odHRwQWdlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kZXN0cm95KCk7XG4gICAgICAgIChfZCA9IChfYyA9IHRoaXMuY29uZmlnKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaHR0cHNBZ2VudCkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlKHJlcXVlc3QsIHsgYWJvcnRTaWduYWwgfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWdQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlID0gYXN5bmMgKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICAgICAgICAgIF9yZXNvbHZlKGFyZyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVqZWN0ID0gYXN5bmMgKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICAgICAgICAgIF9yZWplY3QoYXJnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZSBIVFRQIHJlcXVlc3QgaGFuZGxlciBjb25maWcgaXMgbm90IHJlc29sdmVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNTU0wgPSByZXF1ZXN0LnByb3RvY29sID09PSBcImh0dHBzOlwiO1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSAoMCwgcXVlcnlzdHJpbmdfYnVpbGRlcl8xLmJ1aWxkUXVlcnlTdHJpbmcpKHJlcXVlc3QucXVlcnkgfHwge30pO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUh0dHBzT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgaG9zdDogcmVxdWVzdC5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgIHBhdGg6IHF1ZXJ5U3RyaW5nID8gYCR7cmVxdWVzdC5wYXRofT8ke3F1ZXJ5U3RyaW5nfWAgOiByZXF1ZXN0LnBhdGgsXG4gICAgICAgICAgICAgICAgcG9ydDogcmVxdWVzdC5wb3J0LFxuICAgICAgICAgICAgICAgIGFnZW50OiBpc1NTTCA/IHRoaXMuY29uZmlnLmh0dHBzQWdlbnQgOiB0aGlzLmNvbmZpZy5odHRwQWdlbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEZ1bmMgPSBpc1NTTCA/IGh0dHBzXzEucmVxdWVzdCA6IGh0dHBfMS5yZXF1ZXN0O1xuICAgICAgICAgICAgY29uc3QgcmVxID0gcmVxdWVzdEZ1bmMobm9kZUh0dHBzT3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzLnN0YXR1c0NvZGUgfHwgLTEsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6ICgwLCBnZXRfdHJhbnNmb3JtZWRfaGVhZGVyc18xLmdldFRyYW5zZm9ybWVkSGVhZGVycykocmVzLmhlYWRlcnMpLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiByZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3BvbnNlOiBodHRwUmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnRzXzEuTk9ERUpTX1RJTUVPVVRfRVJST1JfQ09ERVMuaW5jbHVkZXMoZXJyLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChPYmplY3QuYXNzaWduKGVyciwgeyBuYW1lOiBcIlRpbWVvdXRFcnJvclwiIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgKDAsIHNldF9jb25uZWN0aW9uX3RpbWVvdXRfMS5zZXRDb25uZWN0aW9uVGltZW91dCkocmVxLCByZWplY3QsIHRoaXMuY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0KTtcbiAgICAgICAgICAgICgwLCBzZXRfc29ja2V0X3RpbWVvdXRfMS5zZXRTb2NrZXRUaW1lb3V0KShyZXEsIHJlamVjdCwgdGhpcy5jb25maWcucmVxdWVzdFRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKGFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWwub25hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJSZXF1ZXN0IGFib3J0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGh0dHBBZ2VudCA9IG5vZGVIdHRwc09wdGlvbnMuYWdlbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGh0dHBBZ2VudCA9PT0gXCJvYmplY3RcIiAmJiBcImtlZXBBbGl2ZVwiIGluIGh0dHBBZ2VudCkge1xuICAgICAgICAgICAgICAgICgwLCBzZXRfc29ja2V0X2tlZXBfYWxpdmVfMS5zZXRTb2NrZXRLZWVwQWxpdmUpKHJlcSwge1xuICAgICAgICAgICAgICAgICAgICBrZWVwQWxpdmU6IGh0dHBBZ2VudC5rZWVwQWxpdmUsXG4gICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZU1zZWNzOiBodHRwQWdlbnQua2VlcEFsaXZlTXNlY3MsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVJlcXVlc3RCb2R5UHJvbWlzZSA9ICgwLCB3cml0ZV9yZXF1ZXN0X2JvZHlfMS53cml0ZVJlcXVlc3RCb2R5KShyZXEsIHJlcXVlc3QsIHRoaXMuY29uZmlnLnJlcXVlc3RUaW1lb3V0KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ob2RlSHR0cEhhbmRsZXIgPSBOb2RlSHR0cEhhbmRsZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob2RlSHR0cDJDb25uZWN0aW9uUG9vbCA9IHZvaWQgMDtcbmNsYXNzIE5vZGVIdHRwMkNvbm5lY3Rpb25Qb29sIHtcbiAgICBjb25zdHJ1Y3RvcihzZXNzaW9ucykge1xuICAgICAgICB0aGlzLnNlc3Npb25zID0gW107XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMgPSBzZXNzaW9ucyAhPT0gbnVsbCAmJiBzZXNzaW9ucyAhPT0gdm9pZCAwID8gc2Vzc2lvbnMgOiBbXTtcbiAgICB9XG4gICAgcG9sbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbnMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvZmZlckxhc3Qoc2Vzc2lvbikge1xuICAgICAgICB0aGlzLnNlc3Npb25zLnB1c2goc2Vzc2lvbik7XG4gICAgfVxuICAgIGNvbnRhaW5zKHNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbnMuaW5jbHVkZXMoc2Vzc2lvbik7XG4gICAgfVxuICAgIHJlbW92ZShzZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMgPSB0aGlzLnNlc3Npb25zLmZpbHRlcigocykgPT4gcyAhPT0gc2Vzc2lvbik7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGRlc3Ryb3koY29ubmVjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IHNlc3Npb24gb2YgdGhpcy5zZXNzaW9ucykge1xuICAgICAgICAgICAgaWYgKHNlc3Npb24gPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuTm9kZUh0dHAyQ29ubmVjdGlvblBvb2wgPSBOb2RlSHR0cDJDb25uZWN0aW9uUG9vbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5vZGVIdHRwMkNvbm5lY3Rpb25NYW5hZ2VyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGh0dHAyXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiaHR0cDJcIikpO1xuY29uc3Qgbm9kZV9odHRwMl9jb25uZWN0aW9uX3Bvb2xfMSA9IHJlcXVpcmUoXCIuL25vZGUtaHR0cDItY29ubmVjdGlvbi1wb29sXCIpO1xuY2xhc3MgTm9kZUh0dHAyQ29ubmVjdGlvbk1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICB0aGlzLnNlc3Npb25DYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW5jeSAmJiB0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW5jeSA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm1heENvbmN1cnJlbmN5IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxlYXNlKHJlcXVlc3RDb250ZXh0LCBjb25uZWN0aW9uQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybFN0cmluZyhyZXF1ZXN0Q29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUG9vbCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldCh1cmwpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQb29sKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1Nlc3Npb24gPSBleGlzdGluZ1Bvb2wucG9sbCgpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nU2Vzc2lvbiAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU2Vzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXNzaW9uID0gaHR0cDJfMS5kZWZhdWx0LmNvbm5lY3QodXJsKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBzZXNzaW9uLnNldHRpbmdzKHsgbWF4Q29uY3VycmVudFN0cmVhbXM6IHRoaXMuY29uZmlnLm1heENvbmN1cnJlbmN5IH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWwgdG8gc2V0IG1heENvbmN1cnJlbnRTdHJlYW1zIHRvIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm1heENvbmN1cnJlbmN5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwid2hlbiBjcmVhdGluZyBuZXcgc2Vzc2lvbiBmb3IgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbnRleHQuZGVzdGluYXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbi51bnJlZigpO1xuICAgICAgICBjb25zdCBkZXN0cm95U2Vzc2lvbkNiID0gKCkgPT4ge1xuICAgICAgICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVNlc3Npb24odXJsLCBzZXNzaW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5vbihcImdvYXdheVwiLCBkZXN0cm95U2Vzc2lvbkNiKTtcbiAgICAgICAgc2Vzc2lvbi5vbihcImVycm9yXCIsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgICAgICBzZXNzaW9uLm9uKFwiZnJhbWVFcnJvclwiLCBkZXN0cm95U2Vzc2lvbkNiKTtcbiAgICAgICAgc2Vzc2lvbi5vbihcImNsb3NlXCIsICgpID0+IHRoaXMuZGVsZXRlU2Vzc2lvbih1cmwsIHNlc3Npb24pKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25Db25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICAgICAgICBzZXNzaW9uLnNldFRpbWVvdXQoY29ubmVjdGlvbkNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXQsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qb29sID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHVybCkgfHwgbmV3IG5vZGVfaHR0cDJfY29ubmVjdGlvbl9wb29sXzEuTm9kZUh0dHAyQ29ubmVjdGlvblBvb2woKTtcbiAgICAgICAgY29ubmVjdGlvblBvb2wub2ZmZXJMYXN0KHNlc3Npb24pO1xuICAgICAgICB0aGlzLnNlc3Npb25DYWNoZS5zZXQodXJsLCBjb25uZWN0aW9uUG9vbCk7XG4gICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH1cbiAgICBkZWxldGVTZXNzaW9uKGF1dGhvcml0eSwgc2Vzc2lvbikge1xuICAgICAgICBjb25zdCBleGlzdGluZ0Nvbm5lY3Rpb25Qb29sID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KGF1dGhvcml0eSk7XG4gICAgICAgIGlmICghZXhpc3RpbmdDb25uZWN0aW9uUG9vbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhpc3RpbmdDb25uZWN0aW9uUG9vbC5jb250YWlucyhzZXNzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV4aXN0aW5nQ29ubmVjdGlvblBvb2wucmVtb3ZlKHNlc3Npb24pO1xuICAgICAgICB0aGlzLnNlc3Npb25DYWNoZS5zZXQoYXV0aG9yaXR5LCBleGlzdGluZ0Nvbm5lY3Rpb25Qb29sKTtcbiAgICB9XG4gICAgcmVsZWFzZShyZXF1ZXN0Q29udGV4dCwgc2Vzc2lvbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZXRVcmxTdHJpbmcocmVxdWVzdENvbnRleHQpO1xuICAgICAgICAoX2EgPSB0aGlzLnNlc3Npb25DYWNoZS5nZXQoY2FjaGVLZXkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub2ZmZXJMYXN0KHNlc3Npb24pO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbm5lY3Rpb25Qb29sXSBvZiB0aGlzLnNlc3Npb25DYWNoZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIGNvbm5lY3Rpb25Qb29sKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblBvb2wucmVtb3ZlKHNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0TWF4Q29uY3VycmVudFN0cmVhbXMobWF4Q29uY3VycmVudFN0cmVhbXMpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1heENvbmN1cnJlbmN5ICYmIHRoaXMuY29uZmlnLm1heENvbmN1cnJlbmN5IDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgPSBtYXhDb25jdXJyZW50U3RyZWFtcztcbiAgICB9XG4gICAgc2V0RGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICB0aGlzLmNvbmZpZy5kaXNhYmxlQ29uY3VycmVuY3kgPSBkaXNhYmxlQ29uY3VycmVudFN0cmVhbXM7XG4gICAgfVxuICAgIGdldFVybFN0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiByZXF1ZXN0LmRlc3RpbmF0aW9uLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Ob2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlciA9IE5vZGVIdHRwMkNvbm5lY3Rpb25NYW5hZ2VyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9kZUh0dHAySGFuZGxlciA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgcXVlcnlzdHJpbmdfYnVpbGRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3F1ZXJ5c3RyaW5nLWJ1aWxkZXJcIik7XG5jb25zdCBodHRwMl8xID0gcmVxdWlyZShcImh0dHAyXCIpO1xuY29uc3QgZ2V0X3RyYW5zZm9ybWVkX2hlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL2dldC10cmFuc2Zvcm1lZC1oZWFkZXJzXCIpO1xuY29uc3Qgbm9kZV9odHRwMl9jb25uZWN0aW9uX21hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL25vZGUtaHR0cDItY29ubmVjdGlvbi1tYW5hZ2VyXCIpO1xuY29uc3Qgd3JpdGVfcmVxdWVzdF9ib2R5XzEgPSByZXF1aXJlKFwiLi93cml0ZS1yZXF1ZXN0LWJvZHlcIik7XG5jbGFzcyBOb2RlSHR0cDJIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB7IGhhbmRsZXJQcm90b2NvbDogXCJoMlwiIH07XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgbm9kZV9odHRwMl9jb25uZWN0aW9uX21hbmFnZXJfMS5Ob2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlcih7fSk7XG4gICAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigob3B0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9wdHMgfHwge30pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGUocmVxdWVzdCwgeyBhYm9ydFNpZ25hbCB9ID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZ1Byb3ZpZGVyO1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5zZXREaXNhYmxlQ29uY3VycmVudFN0cmVhbXModGhpcy5jb25maWcuZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zIHx8IGZhbHNlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuc2V0TWF4Q29uY3VycmVudFN0cmVhbXModGhpcy5jb25maWcubWF4Q29uY3VycmVudFN0cmVhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdFRpbWVvdXQsIGRpc2FibGVDb25jdXJyZW50U3RyZWFtcyB9ID0gdGhpcy5jb25maWc7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGxldCBmdWxmaWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCB3cml0ZVJlcXVlc3RCb2R5UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmUgPSBhc3luYyAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2U7XG4gICAgICAgICAgICAgICAgX3Jlc29sdmUoYXJnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZWplY3QgPSBhc3luYyAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2U7XG4gICAgICAgICAgICAgICAgX3JlamVjdChhcmcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIGZ1bGZpbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBob3N0bmFtZSwgbWV0aG9kLCBwb3J0LCBwcm90b2NvbCwgcGF0aCwgcXVlcnkgfSA9IHJlcXVlc3Q7XG4gICAgICAgICAgICBjb25zdCBhdXRob3JpdHkgPSBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gYDoke3BvcnR9YCA6IFwiXCJ9YDtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0geyBkZXN0aW5hdGlvbjogbmV3IFVSTChhdXRob3JpdHkpIH07XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jb25uZWN0aW9uTWFuYWdlci5sZWFzZShyZXF1ZXN0Q29udGV4dCwge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RUaW1lb3V0OiAoX2EgPSB0aGlzLmNvbmZpZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNlc3Npb25UaW1lb3V0LFxuICAgICAgICAgICAgICAgIGRpc2FibGVDb25jdXJyZW50U3RyZWFtczogZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zIHx8IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZWplY3RXaXRoRGVzdHJveSA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bGZpbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSAoMCwgcXVlcnlzdHJpbmdfYnVpbGRlcl8xLmJ1aWxkUXVlcnlTdHJpbmcpKHF1ZXJ5IHx8IHt9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHNlc3Npb24ucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIFtodHRwMl8xLmNvbnN0YW50cy5IVFRQMl9IRUFERVJfUEFUSF06IHF1ZXJ5U3RyaW5nID8gYCR7cGF0aH0/JHtxdWVyeVN0cmluZ31gIDogcGF0aCxcbiAgICAgICAgICAgICAgICBbaHR0cDJfMS5jb25zdGFudHMuSFRUUDJfSEVBREVSX01FVEhPRF06IG1ldGhvZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2Vzc2lvbi5yZWYoKTtcbiAgICAgICAgICAgIHJlcS5vbihcInJlc3BvbnNlXCIsIChoZWFkZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHR0cFJlc3BvbnNlID0gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBoZWFkZXJzW1wiOnN0YXR1c1wiXSB8fCAtMSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogKDAsIGdldF90cmFuc2Zvcm1lZF9oZWFkZXJzXzEuZ2V0VHJhbnNmb3JtZWRIZWFkZXJzKShoZWFkZXJzKSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bGZpbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3BvbnNlOiBodHRwUmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZGVsZXRlU2Vzc2lvbihhdXRob3JpdHksIHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgcmVxLnNldFRpbWVvdXQocmVxdWVzdFRpbWVvdXQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgU3RyZWFtIHRpbWVkIG91dCBiZWNhdXNlIG9mIG5vIGFjdGl2aXR5IGZvciAke3JlcXVlc3RUaW1lb3V0fSBtc2ApO1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0RXJyb3IubmFtZSA9IFwiVGltZW91dEVycm9yXCI7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KHRpbWVvdXRFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbC5vbmFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXEuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXEub24oXCJmcmFtZUVycm9yXCIsICh0eXBlLCBjb2RlLCBpZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KG5ldyBFcnJvcihgRnJhbWUgdHlwZSBpZCAke3R5cGV9IGluIHN0cmVhbSBpZCAke2lkfSBoYXMgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9LmApKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxLm9uKFwiZXJyb3JcIiwgcmVqZWN0V2l0aERlc3Ryb3kpO1xuICAgICAgICAgICAgcmVxLm9uKFwiYWJvcnRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0V2l0aERlc3Ryb3kobmV3IEVycm9yKGBIVFRQLzIgc3RyZWFtIGlzIGFibm9ybWFsbHkgYWJvcnRlZCBpbiBtaWQtY29tbXVuaWNhdGlvbiB3aXRoIHJlc3VsdCBjb2RlICR7cmVxLnJzdENvZGV9LmApKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlc3Npb24udW5yZWYoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZ1bGZpbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3RXaXRoRGVzdHJveShuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yOiBodHRwMiByZXF1ZXN0IGRpZCBub3QgZ2V0IGEgcmVzcG9uc2VcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSAoMCwgd3JpdGVfcmVxdWVzdF9ib2R5XzEud3JpdGVSZXF1ZXN0Qm9keSkocmVxLCByZXF1ZXN0LCByZXF1ZXN0VGltZW91dCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZXN0cm95U2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgICAgIGlmICghc2Vzc2lvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Ob2RlSHR0cDJIYW5kbGVyID0gTm9kZUh0dHAySGFuZGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbGxlY3RvciA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNsYXNzIENvbGxlY3RvciBleHRlbmRzIHN0cmVhbV8xLldyaXRhYmxlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5idWZmZXJlZEJ5dGVzID0gW107XG4gICAgfVxuICAgIF93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyZWRCeXRlcy5wdXNoKGNodW5rKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbGxlY3RvciA9IENvbGxlY3RvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmVhbUNvbGxlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGNvbGxlY3Rvcl8xID0gcmVxdWlyZShcIi4vY29sbGVjdG9yXCIpO1xuY29uc3Qgc3RyZWFtQ29sbGVjdG9yID0gKHN0cmVhbSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBjb2xsZWN0b3JfMS5Db2xsZWN0b3IoKTtcbiAgICBzdHJlYW0ucGlwZShjb2xsZWN0b3IpO1xuICAgIHN0cmVhbS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgY29sbGVjdG9yLmVuZCgpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcbiAgICBjb2xsZWN0b3Iub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIGNvbGxlY3Rvci5vbihcImZpbmlzaFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdCh0aGlzLmJ1ZmZlcmVkQnl0ZXMpKTtcbiAgICAgICAgcmVzb2x2ZShieXRlcyk7XG4gICAgfSk7XG59KTtcbmV4cG9ydHMuc3RyZWFtQ29sbGVjdG9yID0gc3RyZWFtQ29sbGVjdG9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ub2RlLWh0dHAtaGFuZGxlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ub2RlLWh0dHAyLWhhbmRsZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyZWFtLWNvbGxlY3RvclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxjdWxhdGVCb2R5TGVuZ3RoID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGNhbGN1bGF0ZUJvZHlMZW5ndGggPSAoYm9keSkgPT4ge1xuICAgIGlmICghYm9keSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShib2R5KS5sZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBib2R5LmJ5dGVMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGJvZHkuc2l6ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgYm9keS5wYXRoID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihib2R5LnBhdGgpKSB7XG4gICAgICAgIHJldHVybiAoMCwgZnNfMS5sc3RhdFN5bmMpKGJvZHkucGF0aCkuc2l6ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGJvZHkuZmQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmc18xLmZzdGF0U3luYykoYm9keS5mZCkuc2l6ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCb2R5IExlbmd0aCBjb21wdXRhdGlvbiBmYWlsZWQgZm9yICR7Ym9keX1gKTtcbn07XG5leHBvcnRzLmNhbGN1bGF0ZUJvZHlMZW5ndGggPSBjYWxjdWxhdGVCb2R5TGVuZ3RoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jYWxjdWxhdGVCb2R5TGVuZ3RoXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQ3J0QXZhaWxhYmxlID0gdm9pZCAwO1xuY29uc3QgaXNDcnRBdmFpbGFibGUgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXF1aXJlKFwiYXdzLWNydFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcIm1kL2NydC1hdmFpbFwiXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcbmV4cG9ydHMuaXNDcnRBdmFpbGFibGUgPSBpc0NydEF2YWlsYWJsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRVc2VyQWdlbnQgPSBleHBvcnRzLlVBX0FQUF9JRF9JTklfTkFNRSA9IGV4cG9ydHMuVUFfQVBQX0lEX0VOVl9OQU1FID0gdm9pZCAwO1xuY29uc3Qgbm9kZV9jb25maWdfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwcm9jZXNzXzEgPSByZXF1aXJlKFwicHJvY2Vzc1wiKTtcbmNvbnN0IGlzX2NydF9hdmFpbGFibGVfMSA9IHJlcXVpcmUoXCIuL2lzLWNydC1hdmFpbGFibGVcIik7XG5leHBvcnRzLlVBX0FQUF9JRF9FTlZfTkFNRSA9IFwiQVdTX1NES19VQV9BUFBfSURcIjtcbmV4cG9ydHMuVUFfQVBQX0lEX0lOSV9OQU1FID0gXCJzZGstdWEtYXBwLWlkXCI7XG5jb25zdCBkZWZhdWx0VXNlckFnZW50ID0gKHsgc2VydmljZUlkLCBjbGllbnRWZXJzaW9uIH0pID0+IHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICAgICAgW1wiYXdzLXNkay1qc1wiLCBjbGllbnRWZXJzaW9uXSxcbiAgICAgICAgW2Bvcy8keygwLCBvc18xLnBsYXRmb3JtKSgpfWAsICgwLCBvc18xLnJlbGVhc2UpKCldLFxuICAgICAgICBbXCJsYW5nL2pzXCJdLFxuICAgICAgICBbXCJtZC9ub2RlanNcIiwgYCR7cHJvY2Vzc18xLnZlcnNpb25zLm5vZGV9YF0sXG4gICAgXTtcbiAgICBjb25zdCBjcnRBdmFpbGFibGUgPSAoMCwgaXNfY3J0X2F2YWlsYWJsZV8xLmlzQ3J0QXZhaWxhYmxlKSgpO1xuICAgIGlmIChjcnRBdmFpbGFibGUpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaChjcnRBdmFpbGFibGUpO1xuICAgIH1cbiAgICBpZiAoc2VydmljZUlkKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goW2BhcGkvJHtzZXJ2aWNlSWR9YCwgY2xpZW50VmVyc2lvbl0pO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzc18xLmVudi5BV1NfRVhFQ1VUSU9OX0VOVikge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKFtgZXhlYy1lbnYvJHtwcm9jZXNzXzEuZW52LkFXU19FWEVDVVRJT05fRU5WfWBdKTtcbiAgICB9XG4gICAgY29uc3QgYXBwSWRQcm9taXNlID0gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoe1xuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IGVudltleHBvcnRzLlVBX0FQUF9JRF9FTlZfTkFNRV0sXG4gICAgICAgIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHByb2ZpbGVbZXhwb3J0cy5VQV9BUFBfSURfSU5JX05BTUVdLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgfSkoKTtcbiAgICBsZXQgcmVzb2x2ZWRVc2VyQWdlbnQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFyZXNvbHZlZFVzZXJBZ2VudCkge1xuICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBhd2FpdCBhcHBJZFByb21pc2U7XG4gICAgICAgICAgICByZXNvbHZlZFVzZXJBZ2VudCA9IGFwcElkID8gWy4uLnNlY3Rpb25zLCBbYGFwcC8ke2FwcElkfWBdXSA6IFsuLi5zZWN0aW9uc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkVXNlckFnZW50O1xuICAgIH07XG59O1xuZXhwb3J0cy5kZWZhdWx0VXNlckFnZW50ID0gZGVmYXVsdFVzZXJBZ2VudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21CYXNlNjQgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1idWZmZXItZnJvbVwiKTtcbmNvbnN0IEJBU0U2NF9SRUdFWCA9IC9eW0EtWmEtejAtOSsvXSo9ezAsMn0kLztcbmNvbnN0IGZyb21CYXNlNjQgPSAoaW5wdXQpID0+IHtcbiAgICBpZiAoKGlucHV0Lmxlbmd0aCAqIDMpICUgNCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbmNvcnJlY3QgcGFkZGluZyBvbiBiYXNlNjQgc3RyaW5nLmApO1xuICAgIH1cbiAgICBpZiAoIUJBU0U2NF9SRUdFWC5leGVjKGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9ICgwLCB1dGlsX2J1ZmZlcl9mcm9tXzEuZnJvbVN0cmluZykoaW5wdXQsIFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpO1xufTtcbmV4cG9ydHMuZnJvbUJhc2U2NCA9IGZyb21CYXNlNjQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0Jhc2U2NCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfYnVmZmVyX2Zyb21fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWJ1ZmZlci1mcm9tXCIpO1xuY29uc3QgdG9CYXNlNjQgPSAoaW5wdXQpID0+ICgwLCB1dGlsX2J1ZmZlcl9mcm9tXzEuZnJvbUFycmF5QnVmZmVyKShpbnB1dC5idWZmZXIsIGlucHV0LmJ5dGVPZmZzZXQsIGlucHV0LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuZXhwb3J0cy50b0Jhc2U2NCA9IHRvQmFzZTY0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tQmFzZTY0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RvQmFzZTY0XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJ1bGVTZXQgPSB2b2lkIDA7XG5jb25zdCBwID0gXCJyZXF1aXJlZFwiLCBxID0gXCJmblwiLCByID0gXCJhcmd2XCIsIHMgPSBcInJlZlwiO1xuY29uc3QgYSA9IFwiUGFydGl0aW9uUmVzdWx0XCIsIGIgPSBcInRyZWVcIiwgYyA9IFwiZXJyb3JcIiwgZCA9IFwiZW5kcG9pbnRcIiwgZSA9IHsgW3BdOiBmYWxzZSwgXCJ0eXBlXCI6IFwiU3RyaW5nXCIgfSwgZiA9IHsgW3BdOiB0cnVlLCBcImRlZmF1bHRcIjogZmFsc2UsIFwidHlwZVwiOiBcIkJvb2xlYW5cIiB9LCBnID0geyBbc106IFwiRW5kcG9pbnRcIiB9LCBoID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt7IFtzXTogXCJVc2VGSVBTXCIgfSwgdHJ1ZV0gfSwgaSA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbeyBbc106IFwiVXNlRHVhbFN0YWNrXCIgfSwgdHJ1ZV0gfSwgaiA9IHt9LCBrID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt0cnVlLCB7IFtxXTogXCJnZXRBdHRyXCIsIFtyXTogW3sgW3NdOiBhIH0sIFwic3VwcG9ydHNGSVBTXCJdIH1dIH0sIGwgPSB7IFtxXTogXCJib29sZWFuRXF1YWxzXCIsIFtyXTogW3RydWUsIHsgW3FdOiBcImdldEF0dHJcIiwgW3JdOiBbeyBbc106IGEgfSwgXCJzdXBwb3J0c0R1YWxTdGFja1wiXSB9XSB9LCBtID0gW2ddLCBuID0gW2hdLCBvID0gW2ldO1xuY29uc3QgX2RhdGEgPSB7IHZlcnNpb246IFwiMS4wXCIsIHBhcmFtZXRlcnM6IHsgUmVnaW9uOiBlLCBVc2VEdWFsU3RhY2s6IGYsIFVzZUZJUFM6IGYsIEVuZHBvaW50OiBlIH0sIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbcV06IFwiYXdzLnBhcnRpdGlvblwiLCBbcl06IFt7IFtzXTogXCJSZWdpb25cIiB9XSwgYXNzaWduOiBhIH1dLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3FdOiBcImlzU2V0XCIsIFtyXTogbSB9LCB7IFtxXTogXCJwYXJzZVVSTFwiLCBbcl06IG0sIGFzc2lnbjogXCJ1cmxcIiB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IG4sIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIHR5cGU6IGMgfSwgeyB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogbywgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBjIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBnLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBjb25kaXRpb25zOiBbaCwgaV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbaywgbF0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9wb3J0YWwuc3NvLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkZJUFMgYW5kIER1YWxTdGFjayBhcmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgb25lIG9yIGJvdGhcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IG4sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBba10sIHR5cGU6IGIsIHJ1bGVzOiBbeyB0eXBlOiBiLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBlcnJvcjogXCJGSVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRklQU1wiLCB0eXBlOiBjIH1dIH0sIHsgY29uZGl0aW9uczogbywgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtsXSwgdHlwZTogYiwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3BvcnRhbC5zc28ue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFja1wiLCB0eXBlOiBjIH1dIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH07XG5leHBvcnRzLnJ1bGVTZXQgPSBfZGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IHJ1bGVzZXRfMSA9IHJlcXVpcmUoXCIuL3J1bGVzZXRcIik7XG5jb25zdCBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IChlbmRwb2ludFBhcmFtcywgY29udGV4dCA9IHt9KSA9PiB7XG4gICAgcmV0dXJuICgwLCB1dGlsX2VuZHBvaW50c18xLnJlc29sdmVFbmRwb2ludCkocnVsZXNldF8xLnJ1bGVTZXQsIHtcbiAgICAgICAgZW5kcG9pbnRQYXJhbXM6IGVuZHBvaW50UGFyYW1zLFxuICAgICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHVybF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91cmwtcGFyc2VyXCIpO1xuY29uc3QgdXRpbF9iYXNlNjRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWJhc2U2NFwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXRmOFwiKTtcbmNvbnN0IGVuZHBvaW50UmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXJcIik7XG5jb25zdCBnZXRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4gKHtcbiAgICBhcGlWZXJzaW9uOiBcIjIwMTktMDYtMTBcIixcbiAgICBiYXNlNjREZWNvZGVyOiBjb25maWc/LmJhc2U2NERlY29kZXIgPz8gdXRpbF9iYXNlNjRfMS5mcm9tQmFzZTY0LFxuICAgIGJhc2U2NEVuY29kZXI6IGNvbmZpZz8uYmFzZTY0RW5jb2RlciA/PyB1dGlsX2Jhc2U2NF8xLnRvQmFzZTY0LFxuICAgIGRpc2FibGVIb3N0UHJlZml4OiBjb25maWc/LmRpc2FibGVIb3N0UHJlZml4ID8/IGZhbHNlLFxuICAgIGVuZHBvaW50UHJvdmlkZXI6IGNvbmZpZz8uZW5kcG9pbnRQcm92aWRlciA/PyBlbmRwb2ludFJlc29sdmVyXzEuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIsXG4gICAgbG9nZ2VyOiBjb25maWc/LmxvZ2dlciA/PyBuZXcgc21pdGh5X2NsaWVudF8xLk5vT3BMb2dnZXIoKSxcbiAgICBzZXJ2aWNlSWQ6IGNvbmZpZz8uc2VydmljZUlkID8/IFwiU1NPXCIsXG4gICAgdXJsUGFyc2VyOiBjb25maWc/LnVybFBhcnNlciA/PyB1cmxfcGFyc2VyXzEucGFyc2VVcmwsXG4gICAgdXRmOERlY29kZXI6IGNvbmZpZz8udXRmOERlY29kZXIgPz8gdXRpbF91dGY4XzEuZnJvbVV0ZjgsXG4gICAgdXRmOEVuY29kZXI6IGNvbmZpZz8udXRmOEVuY29kZXIgPz8gdXRpbF91dGY4XzEudG9VdGY4LFxufSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSU1EU19SRUdJT05fUEFUSCA9IGV4cG9ydHMuREVGQVVMVFNfTU9ERV9PUFRJT05TID0gZXhwb3J0cy5FTlZfSU1EU19ESVNBQkxFRCA9IGV4cG9ydHMuQVdTX0RFRkFVTFRfUkVHSU9OX0VOViA9IGV4cG9ydHMuQVdTX1JFR0lPTl9FTlYgPSBleHBvcnRzLkFXU19FWEVDVVRJT05fRU5WID0gdm9pZCAwO1xuZXhwb3J0cy5BV1NfRVhFQ1VUSU9OX0VOViA9IFwiQVdTX0VYRUNVVElPTl9FTlZcIjtcbmV4cG9ydHMuQVdTX1JFR0lPTl9FTlYgPSBcIkFXU19SRUdJT05cIjtcbmV4cG9ydHMuQVdTX0RFRkFVTFRfUkVHSU9OX0VOViA9IFwiQVdTX0RFRkFVTFRfUkVHSU9OXCI7XG5leHBvcnRzLkVOVl9JTURTX0RJU0FCTEVEID0gXCJBV1NfRUMyX01FVEFEQVRBX0RJU0FCTEVEXCI7XG5leHBvcnRzLkRFRkFVTFRTX01PREVfT1BUSU9OUyA9IFtcImluLXJlZ2lvblwiLCBcImNyb3NzLXJlZ2lvblwiLCBcIm1vYmlsZVwiLCBcInN0YW5kYXJkXCIsIFwibGVnYWN5XCJdO1xuZXhwb3J0cy5JTURTX1JFR0lPTl9QQVRIID0gXCIvbGF0ZXN0L21ldGEtZGF0YS9wbGFjZW1lbnQvcmVnaW9uXCI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT0RFX0RFRkFVTFRTX01PREVfQ09ORklHX09QVElPTlMgPSB2b2lkIDA7XG5jb25zdCBBV1NfREVGQVVMVFNfTU9ERV9FTlYgPSBcIkFXU19ERUZBVUxUU19NT0RFXCI7XG5jb25zdCBBV1NfREVGQVVMVFNfTU9ERV9DT05GSUcgPSBcImRlZmF1bHRzX21vZGVcIjtcbmV4cG9ydHMuTk9ERV9ERUZBVUxUU19NT0RFX0NPTkZJR19PUFRJT05TID0ge1xuICAgIGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvcjogKGVudikgPT4ge1xuICAgICAgICByZXR1cm4gZW52W0FXU19ERUZBVUxUU19NT0RFX0VOVl07XG4gICAgfSxcbiAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9maWxlW0FXU19ERUZBVUxUU19NT0RFX0NPTkZJR107XG4gICAgfSxcbiAgICBkZWZhdWx0OiBcImxlZ2FjeVwiLFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVEZWZhdWx0c01vZGVDb25maWcgPSB2b2lkIDA7XG5jb25zdCBjb25maWdfcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHNcIik7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZGVmYXVsdHNNb2RlQ29uZmlnXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0c01vZGVDb25maWdcIik7XG5jb25zdCByZXNvbHZlRGVmYXVsdHNNb2RlQ29uZmlnID0gKHsgcmVnaW9uID0gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMpLCBkZWZhdWx0c01vZGUgPSAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShkZWZhdWx0c01vZGVDb25maWdfMS5OT0RFX0RFRkFVTFRTX01PREVfQ09ORklHX09QVElPTlMpLCB9ID0ge30pID0+ICgwLCBwcm9wZXJ0eV9wcm92aWRlcl8xLm1lbW9pemUpKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2RlID0gdHlwZW9mIGRlZmF1bHRzTW9kZSA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgZGVmYXVsdHNNb2RlKCkgOiBkZWZhdWx0c01vZGU7XG4gICAgc3dpdGNoIChtb2RlID09PSBudWxsIHx8IG1vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiYXV0b1wiOlxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVOb2RlRGVmYXVsdHNNb2RlQXV0byhyZWdpb24pO1xuICAgICAgICBjYXNlIFwiaW4tcmVnaW9uXCI6XG4gICAgICAgIGNhc2UgXCJjcm9zcy1yZWdpb25cIjpcbiAgICAgICAgY2FzZSBcIm1vYmlsZVwiOlxuICAgICAgICBjYXNlIFwic3RhbmRhcmRcIjpcbiAgICAgICAgY2FzZSBcImxlZ2FjeVwiOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2RlID09PSBudWxsIHx8IG1vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGUudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcImxlZ2FjeVwiKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIFwiZGVmYXVsdHNNb2RlXCIsIGV4cGVjdCAke2NvbnN0YW50c18xLkRFRkFVTFRTX01PREVfT1BUSU9OUy5qb2luKFwiLCBcIil9LCBnb3QgJHttb2RlfWApO1xuICAgIH1cbn0pO1xuZXhwb3J0cy5yZXNvbHZlRGVmYXVsdHNNb2RlQ29uZmlnID0gcmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZztcbmNvbnN0IHJlc29sdmVOb2RlRGVmYXVsdHNNb2RlQXV0byA9IGFzeW5jIChjbGllbnRSZWdpb24pID0+IHtcbiAgICBpZiAoY2xpZW50UmVnaW9uKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUmVnaW9uID0gdHlwZW9mIGNsaWVudFJlZ2lvbiA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgY2xpZW50UmVnaW9uKCkgOiBjbGllbnRSZWdpb247XG4gICAgICAgIGNvbnN0IGluZmVycmVkUmVnaW9uID0gYXdhaXQgaW5mZXJQaHlzaWNhbFJlZ2lvbigpO1xuICAgICAgICBpZiAoIWluZmVycmVkUmVnaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJzdGFuZGFyZFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvbHZlZFJlZ2lvbiA9PT0gaW5mZXJyZWRSZWdpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBcImluLXJlZ2lvblwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiY3Jvc3MtcmVnaW9uXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwic3RhbmRhcmRcIjtcbn07XG5jb25zdCBpbmZlclBoeXNpY2FsUmVnaW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpZiAocHJvY2Vzcy5lbnZbY29uc3RhbnRzXzEuQVdTX0VYRUNVVElPTl9FTlZdICYmIChwcm9jZXNzLmVudltjb25zdGFudHNfMS5BV1NfUkVHSU9OX0VOVl0gfHwgcHJvY2Vzcy5lbnZbY29uc3RhbnRzXzEuQVdTX0RFRkFVTFRfUkVHSU9OX0VOVl0pKSB7XG4gICAgICAgIHJldHVybiAoX2EgPSBwcm9jZXNzLmVudltjb25zdGFudHNfMS5BV1NfUkVHSU9OX0VOVl0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHByb2Nlc3MuZW52W2NvbnN0YW50c18xLkFXU19ERUZBVUxUX1JFR0lPTl9FTlZdO1xuICAgIH1cbiAgICBpZiAoIXByb2Nlc3MuZW52W2NvbnN0YW50c18xLkVOVl9JTURTX0RJU0FCTEVEXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50KSgpO1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuaHR0cFJlcXVlc3QpKHsgLi4uZW5kcG9pbnQsIHBhdGg6IGNvbnN0YW50c18xLklNRFNfUkVHSU9OX1BBVEggfSkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc29sdmVEZWZhdWx0c01vZGVDb25maWdcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBwYWNrYWdlX2pzb25fMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9wYWNrYWdlLmpzb25cIikpO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgaGFzaF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvaGFzaC1ub2RlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3Qgbm9kZV9odHRwX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlclwiKTtcbmNvbnN0IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtYm9keS1sZW5ndGgtbm9kZVwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXJldHJ5XCIpO1xuY29uc3QgdXRpbF91c2VyX2FnZW50X25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZVwiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfc2hhcmVkXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lQ29uZmlnLnNoYXJlZFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMiA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICAoMCwgc21pdGh5X2NsaWVudF8yLmVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb24pKHByb2Nlc3MudmVyc2lvbik7XG4gICAgY29uc3QgZGVmYXVsdHNNb2RlID0gKDAsIHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEucmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZykoY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSAoKSA9PiBkZWZhdWx0c01vZGUoKS50aGVuKHNtaXRoeV9jbGllbnRfMS5sb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlKTtcbiAgICBjb25zdCBjbGllbnRTaGFyZWRWYWx1ZXMgPSAoMCwgcnVudGltZUNvbmZpZ19zaGFyZWRfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNsaWVudFNoYXJlZFZhbHVlcyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBydW50aW1lOiBcIm5vZGVcIixcbiAgICAgICAgZGVmYXVsdHNNb2RlLFxuICAgICAgICBib2R5TGVuZ3RoQ2hlY2tlcjogY29uZmlnPy5ib2R5TGVuZ3RoQ2hlY2tlciA/PyB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMS5jYWxjdWxhdGVCb2R5TGVuZ3RoLFxuICAgICAgICBkZWZhdWx0VXNlckFnZW50UHJvdmlkZXI6IGNvbmZpZz8uZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyID8/XG4gICAgICAgICAgICAoMCwgdXRpbF91c2VyX2FnZW50X25vZGVfMS5kZWZhdWx0VXNlckFnZW50KSh7IHNlcnZpY2VJZDogY2xpZW50U2hhcmVkVmFsdWVzLnNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbjogcGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9uIH0pLFxuICAgICAgICBtYXhBdHRlbXB0czogY29uZmlnPy5tYXhBdHRlbXB0cyA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShtaWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9NQVhfQVRURU1QVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHJlZ2lvbjogY29uZmlnPy5yZWdpb24gPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMsIGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMpLFxuICAgICAgICByZXF1ZXN0SGFuZGxlcjogY29uZmlnPy5yZXF1ZXN0SGFuZGxlciA/PyBuZXcgbm9kZV9odHRwX2hhbmRsZXJfMS5Ob2RlSHR0cEhhbmRsZXIoZGVmYXVsdENvbmZpZ1Byb3ZpZGVyKSxcbiAgICAgICAgcmV0cnlNb2RlOiBjb25maWc/LnJldHJ5TW9kZSA/P1xuICAgICAgICAgICAgKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoe1xuICAgICAgICAgICAgICAgIC4uLm1pZGRsZXdhcmVfcmV0cnlfMS5OT0RFX1JFVFJZX01PREVfQ09ORklHX09QVElPTlMsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYXN5bmMgKCkgPT4gKGF3YWl0IGRlZmF1bHRDb25maWdQcm92aWRlcigpKS5yZXRyeU1vZGUgfHwgdXRpbF9yZXRyeV8xLkRFRkFVTFRfUkVUUllfTU9ERSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBzaGEyNTY6IGNvbmZpZz8uc2hhMjU2ID8/IGhhc2hfbm9kZV8xLkhhc2guYmluZChudWxsLCBcInNoYTI1NlwiKSxcbiAgICAgICAgc3RyZWFtQ29sbGVjdG9yOiBjb25maWc/LnN0cmVhbUNvbGxlY3RvciA/PyBub2RlX2h0dHBfaGFuZGxlcl8xLnN0cmVhbUNvbGxlY3RvcixcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IGNvbmZpZz8udXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRFVBTFNUQUNLX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBjb25maWc/LnVzZUZpcHNFbmRwb2ludCA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1VTRV9GSVBTX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IGdldFJ1bnRpbWVDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TU09DbGllbnQgPSBleHBvcnRzLl9fQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9jb250ZW50X2xlbmd0aF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtY29udGVudC1sZW5ndGhcIik7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9sb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvblwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5XCIpO1xuY29uc3QgbWlkZGxld2FyZV91c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50XCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX0NsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNsaWVudDsgfSB9KTtcbmNvbnN0IEVuZHBvaW50UGFyYW1ldGVyc18xID0gcmVxdWlyZShcIi4vZW5kcG9pbnQvRW5kcG9pbnRQYXJhbWV0ZXJzXCIpO1xuY29uc3QgcnVudGltZUNvbmZpZ18xID0gcmVxdWlyZShcIi4vcnVudGltZUNvbmZpZ1wiKTtcbmNsYXNzIFNTT0NsaWVudCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5DbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18wID0gKDAsIHJ1bnRpbWVDb25maWdfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18xID0gKDAsIEVuZHBvaW50UGFyYW1ldGVyc18xLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMpKF9jb25maWdfMCk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMiA9ICgwLCBjb25maWdfcmVzb2x2ZXJfMS5yZXNvbHZlUmVnaW9uQ29uZmlnKShfY29uZmlnXzEpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzMgPSAoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLnJlc29sdmVFbmRwb2ludENvbmZpZykoX2NvbmZpZ18yKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ180ID0gKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5yZXNvbHZlUmV0cnlDb25maWcpKF9jb25maWdfMyk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNSA9ICgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEucmVzb2x2ZUhvc3RIZWFkZXJDb25maWcpKF9jb25maWdfNCk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNiA9ICgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5yZXNvbHZlVXNlckFnZW50Q29uZmlnKShfY29uZmlnXzUpO1xuICAgICAgICBzdXBlcihfY29uZmlnXzYpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IF9jb25maWdfNjtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JldHJ5XzEuZ2V0UmV0cnlQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9jb250ZW50X2xlbmd0aF8xLmdldENvbnRlbnRMZW5ndGhQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xLmdldEhvc3RIZWFkZXJQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9sb2dnZXJfMS5nZXRMb2dnZXJQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9yZWN1cnNpb25fZGV0ZWN0aW9uXzEuZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1NPQ2xpZW50ID0gU1NPQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPU2VydmljZUV4Y2VwdGlvbiA9IGV4cG9ydHMuX19TZXJ2aWNlRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuY2xhc3MgU1NPU2VydmljZUV4Y2VwdGlvbiBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgU1NPU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1NPU2VydmljZUV4Y2VwdGlvbiA9IFNTT1NlcnZpY2VFeGNlcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dvdXRSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5MaXN0QWNjb3VudHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5MaXN0QWNjb3VudFJvbGVzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLlJvbGVDcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuR2V0Um9sZUNyZWRlbnRpYWxzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuVW5hdXRob3JpemVkRXhjZXB0aW9uID0gZXhwb3J0cy5Ub29NYW55UmVxdWVzdHNFeGNlcHRpb24gPSBleHBvcnRzLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gPSBleHBvcnRzLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBTU09TZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi9TU09TZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY2xhc3MgSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gPSBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbjtcbmNsYXNzIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiA9IFJlc291cmNlTm90Rm91bmRFeGNlcHRpb247XG5jbGFzcyBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uID0gVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uO1xuY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBVbmF1dGhvcml6ZWRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlVuYXV0aG9yaXplZEV4Y2VwdGlvbiA9IFVuYXV0aG9yaXplZEV4Y2VwdGlvbjtcbmNvbnN0IEdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBHZXRSb2xlQ3JlZGVudGlhbHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgUm9sZUNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5zZWNyZXRBY2Nlc3NLZXkgJiYgeyBzZWNyZXRBY2Nlc3NLZXk6IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxuICAgIC4uLihvYmouc2Vzc2lvblRva2VuICYmIHsgc2Vzc2lvblRva2VuOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5Sb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cgPSBSb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBHZXRSb2xlQ3JlZGVudGlhbHNSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmoucm9sZUNyZWRlbnRpYWxzICYmIHsgcm9sZUNyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5Sb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5yb2xlQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1Jlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBMaXN0QWNjb3VudFJvbGVzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouYWNjZXNzVG9rZW4gJiYgeyBhY2Nlc3NUb2tlbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBMaXN0QWNjb3VudFJvbGVzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IExpc3RBY2NvdW50c1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkxpc3RBY2NvdW50c1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBMaXN0QWNjb3VudHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouYWNjZXNzVG9rZW4gJiYgeyBhY2Nlc3NUb2tlbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IExvZ291dFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2c7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZV9Mb2dvdXRDb21tYW5kID0gZXhwb3J0cy5kZV9MaXN0QWNjb3VudHNDb21tYW5kID0gZXhwb3J0cy5kZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IGV4cG9ydHMuZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGV4cG9ydHMuc2VfTG9nb3V0Q29tbWFuZCA9IGV4cG9ydHMuc2VfTGlzdEFjY291bnRzQ29tbWFuZCA9IGV4cG9ydHMuc2VfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBleHBvcnRzLnNlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IFNTT1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvU1NPU2VydmljZUV4Y2VwdGlvblwiKTtcbmNvbnN0IHNlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9LCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlLCB7XG4gICAgICAgIFwieC1hbXotc3NvX2JlYXJlcl90b2tlblwiOiBpbnB1dC5hY2Nlc3NUb2tlbixcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHtiYXNlUGF0aD8uZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGguc2xpY2UoMCwgLTEpIDogYmFzZVBhdGggfHwgXCJcIn1gICsgXCIvZmVkZXJhdGlvbi9jcmVkZW50aWFsc1wiO1xuICAgIGNvbnN0IHF1ZXJ5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgcm9sZV9uYW1lOiBbLCAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKGlucHV0LnJvbGVOYW1lLCBgcm9sZU5hbWVgKV0sXG4gICAgICAgIGFjY291bnRfaWQ6IFssICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoaW5wdXQuYWNjb3VudElkLCBgYWNjb3VudElkYCldLFxuICAgIH0pO1xuICAgIGxldCBib2R5O1xuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGJvZHksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gc2VfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZDtcbmNvbnN0IHNlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSwgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSwge1xuICAgICAgICBcIngtYW16LXNzb19iZWFyZXJfdG9rZW5cIjogaW5wdXQuYWNjZXNzVG9rZW4sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL2Fzc2lnbm1lbnQvcm9sZXNcIjtcbiAgICBjb25zdCBxdWVyeSA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgIG5leHRfdG9rZW46IFssIGlucHV0Lm5leHRUb2tlbl0sXG4gICAgICAgIG1heF9yZXN1bHQ6IFsoKSA9PiBpbnB1dC5tYXhSZXN1bHRzICE9PSB2b2lkIDAsICgpID0+IGlucHV0Lm1heFJlc3VsdHMudG9TdHJpbmcoKV0sXG4gICAgICAgIGFjY291bnRfaWQ6IFssICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoaW5wdXQuYWNjb3VudElkLCBgYWNjb3VudElkYCldLFxuICAgIH0pO1xuICAgIGxldCBib2R5O1xuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGJvZHksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IHNlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kO1xuY29uc3Qgc2VfTGlzdEFjY291bnRzQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30sIGlzU2VyaWFsaXphYmxlSGVhZGVyVmFsdWUsIHtcbiAgICAgICAgXCJ4LWFtei1zc29fYmVhcmVyX3Rva2VuXCI6IGlucHV0LmFjY2Vzc1Rva2VuLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGAke2Jhc2VQYXRoPy5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifWAgKyBcIi9hc3NpZ25tZW50L2FjY291bnRzXCI7XG4gICAgY29uc3QgcXVlcnkgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICBuZXh0X3Rva2VuOiBbLCBpbnB1dC5uZXh0VG9rZW5dLFxuICAgICAgICBtYXhfcmVzdWx0OiBbKCkgPT4gaW5wdXQubWF4UmVzdWx0cyAhPT0gdm9pZCAwLCAoKSA9PiBpbnB1dC5tYXhSZXN1bHRzLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuICAgIGxldCBib2R5O1xuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGJvZHksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZV9MaXN0QWNjb3VudHNDb21tYW5kID0gc2VfTGlzdEFjY291bnRzQ29tbWFuZDtcbmNvbnN0IHNlX0xvZ291dENvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9LCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlLCB7XG4gICAgICAgIFwieC1hbXotc3NvX2JlYXJlcl90b2tlblwiOiBpbnB1dC5hY2Nlc3NUb2tlbixcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHtiYXNlUGF0aD8uZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGguc2xpY2UoMCwgLTEpIDogYmFzZVBhdGggfHwgXCJcIn1gICsgXCIvbG9nb3V0XCI7XG4gICAgbGV0IGJvZHk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX0xvZ291dENvbW1hbmQgPSBzZV9Mb2dvdXRDb21tYW5kO1xuY29uc3QgZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiBvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0T2JqZWN0KShhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpKSwgXCJib2R5XCIpO1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICByb2xlQ3JlZGVudGlhbHM6IHNtaXRoeV9jbGllbnRfMS5fanNvbixcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBkZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kO1xuY29uc3QgZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9VbmF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0T2JqZWN0KShhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpKSwgXCJib2R5XCIpO1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBuZXh0VG9rZW46IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIHJvbGVMaXN0OiBzbWl0aHlfY2xpZW50XzEuX2pzb24sXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuZXhwb3J0cy5kZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IGRlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kO1xuY29uc3QgZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1VuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9MaXN0QWNjb3VudHNDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfTGlzdEFjY291bnRzQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RPYmplY3QpKGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCkpLCBcImJvZHlcIik7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIGFjY291bnRMaXN0OiBzbWl0aHlfY2xpZW50XzEuX2pzb24sXG4gICAgICAgIG5leHRUb2tlbjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX0xpc3RBY2NvdW50c0NvbW1hbmQgPSBkZV9MaXN0QWNjb3VudHNDb21tYW5kO1xuY29uc3QgZGVfTGlzdEFjY291bnRzQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9VbmF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0xvZ291dENvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlICE9PSAyMDAgJiYgb3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9Mb2dvdXRDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9KTtcbiAgICBhd2FpdCBjb2xsZWN0Qm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmV4cG9ydHMuZGVfTG9nb3V0Q29tbWFuZCA9IGRlX0xvZ291dENvbW1hbmQ7XG5jb25zdCBkZV9Mb2dvdXRDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1VuYXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgdGhyb3dEZWZhdWx0RXJyb3IgPSAoMCwgc21pdGh5X2NsaWVudF8xLndpdGhCYXNlRXhjZXB0aW9uKShTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbik7XG5jb25zdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5Ub29NYW55UmVxdWVzdHNFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9VbmF1dGhvcml6ZWRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlVuYXV0aG9yaXplZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlc2VyaWFsaXplTWV0YWRhdGEgPSAob3V0cHV0KSA9PiAoe1xuICAgIGh0dHBTdGF0dXNDb2RlOiBvdXRwdXQuc3RhdHVzQ29kZSxcbiAgICByZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0LWlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXotcmVxdWVzdC1pZFwiXSxcbiAgICBleHRlbmRlZFJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICAgIGNmSWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotY2YtaWRcIl0sXG59KTtcbmNvbnN0IGNvbGxlY3RCb2R5ID0gKHN0cmVhbUJvZHkgPSBuZXcgVWludDhBcnJheSgpLCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKHN0cmVhbUJvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyZWFtQm9keSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0LnN0cmVhbUNvbGxlY3RvcihzdHJlYW1Cb2R5KSB8fCBQcm9taXNlLnJlc29sdmUobmV3IFVpbnQ4QXJyYXkoKSk7XG59O1xuY29uc3QgY29sbGVjdEJvZHlTdHJpbmcgPSAoc3RyZWFtQm9keSwgY29udGV4dCkgPT4gY29sbGVjdEJvZHkoc3RyZWFtQm9keSwgY29udGV4dCkudGhlbigoYm9keSkgPT4gY29udGV4dC51dGY4RW5jb2Rlcihib2R5KSk7XG5jb25zdCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB2YWx1ZSAhPT0gXCJcIiAmJlxuICAgICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpLmluY2x1ZGVzKFwibGVuZ3RoXCIpIHx8IHZhbHVlLmxlbmd0aCAhPSAwKSAmJlxuICAgICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpLmluY2x1ZGVzKFwic2l6ZVwiKSB8fCB2YWx1ZS5zaXplICE9IDApO1xuY29uc3QgcGFyc2VCb2R5ID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5U3RyaW5nKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGVuY29kZWQpID0+IHtcbiAgICBpZiAoZW5jb2RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZW5jb2RlZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn0pO1xuY29uc3QgcGFyc2VFcnJvckJvZHkgPSBhc3luYyAoZXJyb3JCb2R5LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYXJzZUJvZHkoZXJyb3JCb2R5LCBjb250ZXh0KTtcbiAgICB2YWx1ZS5tZXNzYWdlID0gdmFsdWUubWVzc2FnZSA/PyB2YWx1ZS5NZXNzYWdlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBsb2FkUmVzdEpzb25FcnJvckNvZGUgPSAob3V0cHV0LCBkYXRhKSA9PiB7XG4gICAgY29uc3QgZmluZEtleSA9IChvYmplY3QsIGtleSkgPT4gT2JqZWN0LmtleXMob2JqZWN0KS5maW5kKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBzYW5pdGl6ZUVycm9yQ29kZSA9IChyYXdWYWx1ZSkgPT4ge1xuICAgICAgICBsZXQgY2xlYW5WYWx1ZSA9IHJhd1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFuVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIixcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIsXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCI6XCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiOlwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiI1wiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIiNcIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsZWFuVmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJLZXkgPSBmaW5kS2V5KG91dHB1dC5oZWFkZXJzLCBcIngtYW16bi1lcnJvcnR5cGVcIik7XG4gICAgaWYgKGhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShvdXRwdXQuaGVhZGVyc1toZWFkZXJLZXldKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhLmNvZGUpO1xuICAgIH1cbiAgICBpZiAoZGF0YVtcIl9fdHlwZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhW1wiX190eXBlXCJdKTtcbiAgICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBBd3NfcmVzdEpzb24xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19yZXN0SnNvbjFcIik7XG5jbGFzcyBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiTGlzdEFjY291bnRSb2xlc0NvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5MaXN0QWNjb3VudFJvbGVzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLmRlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxpc3RBY2NvdW50c0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBBd3NfcmVzdEpzb24xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19yZXN0SnNvbjFcIik7XG5jbGFzcyBMaXN0QWNjb3VudHNDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIExpc3RBY2NvdW50c0NvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTU09DbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkxpc3RBY2NvdW50c0NvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5MaXN0QWNjb3VudHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5zZV9MaXN0QWNjb3VudHNDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5kZV9MaXN0QWNjb3VudHNDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuTGlzdEFjY291bnRzQ29tbWFuZCA9IExpc3RBY2NvdW50c0NvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dvdXRDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3Jlc3RKc29uMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xXCIpO1xuY2xhc3MgTG9nb3V0Q29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBMb2dvdXRDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJMb2dvdXRDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfTG9nb3V0Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfTG9nb3V0Q29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxvZ291dENvbW1hbmQgPSBMb2dvdXRDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kXCIpO1xuY29uc3QgTGlzdEFjY291bnRSb2xlc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0xpc3RBY2NvdW50Um9sZXNDb21tYW5kXCIpO1xuY29uc3QgTGlzdEFjY291bnRzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvTGlzdEFjY291bnRzQ29tbWFuZFwiKTtcbmNvbnN0IExvZ291dENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0xvZ291dENvbW1hbmRcIik7XG5jb25zdCBTU09DbGllbnRfMSA9IHJlcXVpcmUoXCIuL1NTT0NsaWVudFwiKTtcbmNvbnN0IGNvbW1hbmRzID0ge1xuICAgIEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQ6IEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRfMS5HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kLFxuICAgIExpc3RBY2NvdW50Um9sZXNDb21tYW5kOiBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZF8xLkxpc3RBY2NvdW50Um9sZXNDb21tYW5kLFxuICAgIExpc3RBY2NvdW50c0NvbW1hbmQ6IExpc3RBY2NvdW50c0NvbW1hbmRfMS5MaXN0QWNjb3VudHNDb21tYW5kLFxuICAgIExvZ291dENvbW1hbmQ6IExvZ291dENvbW1hbmRfMS5Mb2dvdXRDb21tYW5kLFxufTtcbmNsYXNzIFNTTyBleHRlbmRzIFNTT0NsaWVudF8xLlNTT0NsaWVudCB7XG59XG5leHBvcnRzLlNTTyA9IFNTTztcbigwLCBzbWl0aHlfY2xpZW50XzEuY3JlYXRlQWdncmVnYXRlZENsaWVudCkoY29tbWFuZHMsIFNTTyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTGlzdEFjY291bnRSb2xlc0NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTGlzdEFjY291bnRzQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Mb2dvdXRDb21tYW5kXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYWdpbmF0ZUxpc3RBY2NvdW50Um9sZXMgPSB2b2lkIDA7XG5jb25zdCBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xpc3RBY2NvdW50Um9sZXNDb21tYW5kXCIpO1xuY29uc3QgU1NPQ2xpZW50XzEgPSByZXF1aXJlKFwiLi4vU1NPQ2xpZW50XCIpO1xuY29uc3QgbWFrZVBhZ2VkQ2xpZW50UmVxdWVzdCA9IGFzeW5jIChjbGllbnQsIGlucHV0LCAuLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZF8xLkxpc3RBY2NvdW50Um9sZXNDb21tYW5kKGlucHV0KSwgLi4uYXJncyk7XG59O1xuYXN5bmMgZnVuY3Rpb24qIHBhZ2luYXRlTGlzdEFjY291bnRSb2xlcyhjb25maWcsIGlucHV0LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzKSB7XG4gICAgbGV0IHRva2VuID0gY29uZmlnLnN0YXJ0aW5nVG9rZW4gfHwgdW5kZWZpbmVkO1xuICAgIGxldCBoYXNOZXh0ID0gdHJ1ZTtcbiAgICBsZXQgcGFnZTtcbiAgICB3aGlsZSAoaGFzTmV4dCkge1xuICAgICAgICBpbnB1dC5uZXh0VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgaW5wdXRbXCJtYXhSZXN1bHRzXCJdID0gY29uZmlnLnBhZ2VTaXplO1xuICAgICAgICBpZiAoY29uZmlnLmNsaWVudCBpbnN0YW5jZW9mIFNTT0NsaWVudF8xLlNTT0NsaWVudCkge1xuICAgICAgICAgICAgcGFnZSA9IGF3YWl0IG1ha2VQYWdlZENsaWVudFJlcXVlc3QoY29uZmlnLmNsaWVudCwgaW5wdXQsIC4uLmFkZGl0aW9uYWxBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjbGllbnQsIGV4cGVjdGVkIFNTTyB8IFNTT0NsaWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBwYWdlO1xuICAgICAgICBjb25zdCBwcmV2VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSBwYWdlLm5leHRUb2tlbjtcbiAgICAgICAgaGFzTmV4dCA9ICEhKHRva2VuICYmICghY29uZmlnLnN0b3BPblNhbWVUb2tlbiB8fCB0b2tlbiAhPT0gcHJldlRva2VuKSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnBhZ2luYXRlTGlzdEFjY291bnRSb2xlcyA9IHBhZ2luYXRlTGlzdEFjY291bnRSb2xlcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhZ2luYXRlTGlzdEFjY291bnRzID0gdm9pZCAwO1xuY29uc3QgTGlzdEFjY291bnRzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xpc3RBY2NvdW50c0NvbW1hbmRcIik7XG5jb25zdCBTU09DbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9TU09DbGllbnRcIik7XG5jb25zdCBtYWtlUGFnZWRDbGllbnRSZXF1ZXN0ID0gYXN5bmMgKGNsaWVudCwgaW5wdXQsIC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNlbmQobmV3IExpc3RBY2NvdW50c0NvbW1hbmRfMS5MaXN0QWNjb3VudHNDb21tYW5kKGlucHV0KSwgLi4uYXJncyk7XG59O1xuYXN5bmMgZnVuY3Rpb24qIHBhZ2luYXRlTGlzdEFjY291bnRzKGNvbmZpZywgaW5wdXQsIC4uLmFkZGl0aW9uYWxBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBjb25maWcuc3RhcnRpbmdUb2tlbiB8fCB1bmRlZmluZWQ7XG4gICAgbGV0IGhhc05leHQgPSB0cnVlO1xuICAgIGxldCBwYWdlO1xuICAgIHdoaWxlIChoYXNOZXh0KSB7XG4gICAgICAgIGlucHV0Lm5leHRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpbnB1dFtcIm1heFJlc3VsdHNcIl0gPSBjb25maWcucGFnZVNpemU7XG4gICAgICAgIGlmIChjb25maWcuY2xpZW50IGluc3RhbmNlb2YgU1NPQ2xpZW50XzEuU1NPQ2xpZW50KSB7XG4gICAgICAgICAgICBwYWdlID0gYXdhaXQgbWFrZVBhZ2VkQ2xpZW50UmVxdWVzdChjb25maWcuY2xpZW50LCBpbnB1dCwgLi4uYWRkaXRpb25hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNsaWVudCwgZXhwZWN0ZWQgU1NPIHwgU1NPQ2xpZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkIHBhZ2U7XG4gICAgICAgIGNvbnN0IHByZXZUb2tlbiA9IHRva2VuO1xuICAgICAgICB0b2tlbiA9IHBhZ2UubmV4dFRva2VuO1xuICAgICAgICBoYXNOZXh0ID0gISEodG9rZW4gJiYgKCFjb25maWcuc3RvcE9uU2FtZVRva2VuIHx8IHRva2VuICE9PSBwcmV2VG9rZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucGFnaW5hdGVMaXN0QWNjb3VudHMgPSBwYWdpbmF0ZUxpc3RBY2NvdW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSW50ZXJmYWNlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9MaXN0QWNjb3VudFJvbGVzUGFnaW5hdG9yXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xpc3RBY2NvdW50c1BhZ2luYXRvclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc18wXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNTT1NlcnZpY2VFeGNlcHRpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU1NPQ2xpZW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NTT1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYWdpbmF0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc1wiKSwgZXhwb3J0cyk7XG52YXIgU1NPU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vbW9kZWxzL1NTT1NlcnZpY2VFeGNlcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTU09TZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJFRlJFU0hfTUVTU0FHRSA9IGV4cG9ydHMuRVhQSVJFX1dJTkRPV19NUyA9IHZvaWQgMDtcbmV4cG9ydHMuRVhQSVJFX1dJTkRPV19NUyA9IDUgKiA2MCAqIDEwMDA7XG5leHBvcnRzLlJFRlJFU0hfTUVTU0FHRSA9IGBUbyByZWZyZXNoIHRoaXMgU1NPIHNlc3Npb24gcnVuICdhd3Mgc3NvIGxvZ2luJyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb2ZpbGUuYDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEhvc3RIZWFkZXJQbHVnaW4gPSBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmUgPSBleHBvcnRzLnJlc29sdmVIb3N0SGVhZGVyQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5mdW5jdGlvbiByZXNvbHZlSG9zdEhlYWRlckNvbmZpZyhpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dDtcbn1cbmV4cG9ydHMucmVzb2x2ZUhvc3RIZWFkZXJDb25maWcgPSByZXNvbHZlSG9zdEhlYWRlckNvbmZpZztcbmNvbnN0IGhvc3RIZWFkZXJNaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UoYXJncy5yZXF1ZXN0KSlcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGNvbnN0IHsgaGFuZGxlclByb3RvY29sID0gXCJcIiB9ID0gb3B0aW9ucy5yZXF1ZXN0SGFuZGxlci5tZXRhZGF0YSB8fCB7fTtcbiAgICBpZiAoaGFuZGxlclByb3RvY29sLmluZGV4T2YoXCJoMlwiKSA+PSAwICYmICFyZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdKSB7XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0LmhlYWRlcnNbXCJob3N0XCJdO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdID0gXCJcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXJlcXVlc3QuaGVhZGVyc1tcImhvc3RcIl0pIHtcbiAgICAgICAgbGV0IGhvc3QgPSByZXF1ZXN0Lmhvc3RuYW1lO1xuICAgICAgICBpZiAocmVxdWVzdC5wb3J0ICE9IG51bGwpXG4gICAgICAgICAgICBob3N0ICs9IGA6JHtyZXF1ZXN0LnBvcnR9YDtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1wiaG9zdFwiXSA9IGhvc3Q7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGFyZ3MpO1xufTtcbmV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmUgPSBob3N0SGVhZGVyTWlkZGxld2FyZTtcbmV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwiaG9zdEhlYWRlck1pZGRsZXdhcmVcIixcbiAgICBzdGVwOiBcImJ1aWxkXCIsXG4gICAgcHJpb3JpdHk6IFwibG93XCIsXG4gICAgdGFnczogW1wiSE9TVFwiXSxcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRIb3N0SGVhZGVyUGx1Z2luID0gKG9wdGlvbnMpID0+ICh7XG4gICAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICAgICAgY2xpZW50U3RhY2suYWRkKCgwLCBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlKShvcHRpb25zKSwgZXhwb3J0cy5ob3N0SGVhZGVyTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0SG9zdEhlYWRlclBsdWdpbiA9IGdldEhvc3RIZWFkZXJQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRMb2dnZXJQbHVnaW4gPSBleHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyTWlkZGxld2FyZSA9ICgpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KGFyZ3MpO1xuICAgICAgICBjb25zdCB7IGNsaWVudE5hbWUsIGNvbW1hbmROYW1lLCBsb2dnZXIsIGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zID0ge30gfSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHsgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZywgb3ZlcnJpZGVPdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zO1xuICAgICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IG51bGwgJiYgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQuaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSBudWxsICYmIG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSB2b2lkIDAgPyBvdmVycmlkZU91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQub3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuICAgICAgICBjb25zdCB7ICRtZXRhZGF0YSwgLi4ub3V0cHV0V2l0aG91dE1ldGFkYXRhIH0gPSByZXNwb25zZS5vdXRwdXQ7XG4gICAgICAgIChfYSA9IGxvZ2dlciA9PT0gbnVsbCB8fCBsb2dnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxvZ2dlci5pbmZvKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsb2dnZXIsIHtcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0OiBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyhhcmdzLmlucHV0KSxcbiAgICAgICAgICAgIG91dHB1dDogb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nKG91dHB1dFdpdGhvdXRNZXRhZGF0YSksXG4gICAgICAgICAgICBtZXRhZGF0YTogJG1ldGFkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjbGllbnROYW1lLCBjb21tYW5kTmFtZSwgbG9nZ2VyLCBkeW5hbW9EYkRvY3VtZW50Q2xpZW50T3B0aW9ucyA9IHt9IH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCB7IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zO1xuICAgICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IG51bGwgJiYgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQuaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c7XG4gICAgICAgIChfYiA9IGxvZ2dlciA9PT0gbnVsbCB8fCBsb2dnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxvZ2dlci5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobG9nZ2VyLCB7XG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dDogaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2coYXJncy5pbnB1dCksXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIG1ldGFkYXRhOiBlcnJvci4kbWV0YWRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59O1xuZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlID0gbG9nZ2VyTWlkZGxld2FyZTtcbmV4cG9ydHMubG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJsb2dnZXJNaWRkbGV3YXJlXCIsXG4gICAgdGFnczogW1wiTE9HR0VSXCJdLFxuICAgIHN0ZXA6IFwiaW5pdGlhbGl6ZVwiLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmNvbnN0IGdldExvZ2dlclBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlKSgpLCBleHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldExvZ2dlclBsdWdpbiA9IGdldExvZ2dlclBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9nZ2VyTWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4gPSBleHBvcnRzLmFkZFJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5yZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBUUkFDRV9JRF9IRUFERVJfTkFNRSA9IFwiWC1BbXpuLVRyYWNlLUlkXCI7XG5jb25zdCBFTlZfTEFNQkRBX0ZVTkNUSU9OX05BTUUgPSBcIkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRVwiO1xuY29uc3QgRU5WX1RSQUNFX0lEID0gXCJfWF9BTVpOX1RSQUNFX0lEXCI7XG5jb25zdCByZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXJncztcbiAgICBpZiAoIXByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpIHx8XG4gICAgICAgIG9wdGlvbnMucnVudGltZSAhPT0gXCJub2RlXCIgfHxcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmhhc093blByb3BlcnR5KFRSQUNFX0lEX0hFQURFUl9OQU1FKSkge1xuICAgICAgICByZXR1cm4gbmV4dChhcmdzKTtcbiAgICB9XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcHJvY2Vzcy5lbnZbRU5WX0xBTUJEQV9GVU5DVElPTl9OQU1FXTtcbiAgICBjb25zdCB0cmFjZUlkID0gcHJvY2Vzcy5lbnZbRU5WX1RSQUNFX0lEXTtcbiAgICBjb25zdCBub25FbXB0eVN0cmluZyA9IChzdHIpID0+IHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIgJiYgc3RyLmxlbmd0aCA+IDA7XG4gICAgaWYgKG5vbkVtcHR5U3RyaW5nKGZ1bmN0aW9uTmFtZSkgJiYgbm9uRW1wdHlTdHJpbmcodHJhY2VJZCkpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1RSQUNFX0lEX0hFQURFUl9OQU1FXSA9IHRyYWNlSWQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICB9KTtcbn07XG5leHBvcnRzLnJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmUgPSByZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlO1xuZXhwb3J0cy5hZGRSZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgICBzdGVwOiBcImJ1aWxkXCIsXG4gICAgdGFnczogW1wiUkVDVVJTSU9OX0RFVEVDVElPTlwiXSxcbiAgICBuYW1lOiBcInJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVcIixcbiAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICBwcmlvcml0eTogXCJsb3dcIixcbn07XG5jb25zdCBnZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGQoKDAsIGV4cG9ydHMucmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZSkob3B0aW9ucyksIGV4cG9ydHMuYWRkUmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luID0gZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVVzZXJBZ2VudENvbmZpZyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHJlc29sdmVVc2VyQWdlbnRDb25maWcoaW5wdXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgY3VzdG9tVXNlckFnZW50OiB0eXBlb2YgaW5wdXQuY3VzdG9tVXNlckFnZW50ID09PSBcInN0cmluZ1wiID8gW1tpbnB1dC5jdXN0b21Vc2VyQWdlbnRdXSA6IGlucHV0LmN1c3RvbVVzZXJBZ2VudCxcbiAgICB9O1xufVxuZXhwb3J0cy5yZXNvbHZlVXNlckFnZW50Q29uZmlnID0gcmVzb2x2ZVVzZXJBZ2VudENvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFByZWZpeCA9IGV4cG9ydHMudXNlRGVmYXVsdFBhcnRpdGlvbkluZm8gPSBleHBvcnRzLnNldFBhcnRpdGlvbkluZm8gPSBleHBvcnRzLnBhcnRpdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBwYXJ0aXRpb25zX2pzb25fMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnRpdGlvbnMuanNvblwiKSk7XG5sZXQgc2VsZWN0ZWRQYXJ0aXRpb25zSW5mbyA9IHBhcnRpdGlvbnNfanNvbl8xLmRlZmF1bHQ7XG5sZXQgc2VsZWN0ZWRVc2VyQWdlbnRQcmVmaXggPSBcIlwiO1xuY29uc3QgcGFydGl0aW9uID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBwYXJ0aXRpb25zIH0gPSBzZWxlY3RlZFBhcnRpdGlvbnNJbmZvO1xuICAgIGZvciAoY29uc3QgcGFydGl0aW9uIG9mIHBhcnRpdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByZWdpb25zLCBvdXRwdXRzIH0gPSBwYXJ0aXRpb247XG4gICAgICAgIGZvciAoY29uc3QgW3JlZ2lvbiwgcmVnaW9uRGF0YV0gb2YgT2JqZWN0LmVudHJpZXMocmVnaW9ucykpIHtcbiAgICAgICAgICAgIGlmIChyZWdpb24gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ub3V0cHV0cyxcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVnaW9uRGF0YSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGFydGl0aW9uIG9mIHBhcnRpdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByZWdpb25SZWdleCwgb3V0cHV0cyB9ID0gcGFydGl0aW9uO1xuICAgICAgICBpZiAobmV3IFJlZ0V4cChyZWdpb25SZWdleCkudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ub3V0cHV0cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgREVGQVVMVF9QQVJUSVRJT04gPSBwYXJ0aXRpb25zLmZpbmQoKHBhcnRpdGlvbikgPT4gcGFydGl0aW9uLmlkID09PSBcImF3c1wiKTtcbiAgICBpZiAoIURFRkFVTFRfUEFSVElUSU9OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3ZpZGVkIHJlZ2lvbiB3YXMgbm90IGZvdW5kIGluIHRoZSBwYXJ0aXRpb24gYXJyYXkgb3IgcmVnZXgsXCIgK1xuICAgICAgICAgICAgXCIgYW5kIGRlZmF1bHQgcGFydGl0aW9uIHdpdGggaWQgJ2F3cycgZG9lc24ndCBleGlzdC5cIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLkRFRkFVTFRfUEFSVElUSU9OLm91dHB1dHMsXG4gICAgfTtcbn07XG5leHBvcnRzLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbmNvbnN0IHNldFBhcnRpdGlvbkluZm8gPSAocGFydGl0aW9uc0luZm8sIHVzZXJBZ2VudFByZWZpeCA9IFwiXCIpID0+IHtcbiAgICBzZWxlY3RlZFBhcnRpdGlvbnNJbmZvID0gcGFydGl0aW9uc0luZm87XG4gICAgc2VsZWN0ZWRVc2VyQWdlbnRQcmVmaXggPSB1c2VyQWdlbnRQcmVmaXg7XG59O1xuZXhwb3J0cy5zZXRQYXJ0aXRpb25JbmZvID0gc2V0UGFydGl0aW9uSW5mbztcbmNvbnN0IHVzZURlZmF1bHRQYXJ0aXRpb25JbmZvID0gKCkgPT4ge1xuICAgICgwLCBleHBvcnRzLnNldFBhcnRpdGlvbkluZm8pKHBhcnRpdGlvbnNfanNvbl8xLmRlZmF1bHQsIFwiXCIpO1xufTtcbmV4cG9ydHMudXNlRGVmYXVsdFBhcnRpdGlvbkluZm8gPSB1c2VEZWZhdWx0UGFydGl0aW9uSW5mbztcbmNvbnN0IGdldFVzZXJBZ2VudFByZWZpeCA9ICgpID0+IHNlbGVjdGVkVXNlckFnZW50UHJlZml4O1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRQcmVmaXggPSBnZXRVc2VyQWdlbnRQcmVmaXg7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWJ1Z0lkID0gdm9pZCAwO1xuZXhwb3J0cy5kZWJ1Z0lkID0gXCJlbmRwb2ludHNcIjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvRGVidWdTdHJpbmcgPSB2b2lkIDA7XG5mdW5jdGlvbiB0b0RlYnVnU3RyaW5nKGlucHV0KSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKFwicmVmXCIgaW4gaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGAkJHt0b0RlYnVnU3RyaW5nKGlucHV0LnJlZil9YDtcbiAgICB9XG4gICAgaWYgKFwiZm5cIiBpbiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gYCR7aW5wdXQuZm59KCR7KGlucHV0LmFyZ3YgfHwgW10pLm1hcCh0b0RlYnVnU3RyaW5nKS5qb2luKFwiLCBcIil9KWA7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbnB1dCwgbnVsbCwgMik7XG59XG5leHBvcnRzLnRvRGVidWdTdHJpbmcgPSB0b0RlYnVnU3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kZWJ1Z0lkXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RvRGVidWdTdHJpbmdcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW5kcG9pbnRFcnJvciA9IHZvaWQgMDtcbmNsYXNzIEVuZHBvaW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFbmRwb2ludEVycm9yXCI7XG4gICAgfVxufVxuZXhwb3J0cy5FbmRwb2ludEVycm9yID0gRW5kcG9pbnRFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FbmRwb2ludEVycm9yXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0VuZHBvaW50UnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FcnJvclJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vUnVsZVNldE9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9UcmVlUnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaGFyZWRcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNJcEFkZHJlc3MgPSB2b2lkIDA7XG5jb25zdCBJUF9WNF9SRUdFWCA9IG5ldyBSZWdFeHAoYF4oPzoyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldXFxcXGR8XFxcXGQpKD86XFxcXC4oPzoyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldXFxcXGR8XFxcXGQpKXszfSRgKTtcbmNvbnN0IGlzSXBBZGRyZXNzID0gKHZhbHVlKSA9PiBJUF9WNF9SRUdFWC50ZXN0KHZhbHVlKSB8fCAodmFsdWUuc3RhcnRzV2l0aChcIltcIikgJiYgdmFsdWUuZW5kc1dpdGgoXCJdXCIpKTtcbmV4cG9ydHMuaXNJcEFkZHJlc3MgPSBpc0lwQWRkcmVzcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWRIb3N0TGFiZWwgPSB2b2lkIDA7XG5jb25zdCBWQUxJRF9IT1NUX0xBQkVMX1JFR0VYID0gbmV3IFJlZ0V4cChgXig/IS4qLSQpKD8hLSlbYS16QS1aMC05LV17MSw2M30kYCk7XG5jb25zdCBpc1ZhbGlkSG9zdExhYmVsID0gKHZhbHVlLCBhbGxvd1N1YkRvbWFpbnMgPSBmYWxzZSkgPT4ge1xuICAgIGlmICghYWxsb3dTdWJEb21haW5zKSB7XG4gICAgICAgIHJldHVybiBWQUxJRF9IT1NUX0xBQkVMX1JFR0VYLnRlc3QodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbHMgPSB2YWx1ZS5zcGxpdChcIi5cIik7XG4gICAgZm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIHtcbiAgICAgICAgaWYgKCEoMCwgZXhwb3J0cy5pc1ZhbGlkSG9zdExhYmVsKShsYWJlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnRzLmlzVmFsaWRIb3N0TGFiZWwgPSBpc1ZhbGlkSG9zdExhYmVsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldCA9IHZvaWQgMDtcbmNvbnN0IGlzSXBBZGRyZXNzXzEgPSByZXF1aXJlKFwiLi4vaXNJcEFkZHJlc3NcIik7XG5jb25zdCBpc1ZhbGlkSG9zdExhYmVsXzEgPSByZXF1aXJlKFwiLi4vaXNWYWxpZEhvc3RMYWJlbFwiKTtcbmNvbnN0IGlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQgPSAodmFsdWUsIGFsbG93U3ViRG9tYWlucyA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKGFsbG93U3ViRG9tYWlucykge1xuICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIHZhbHVlLnNwbGl0KFwiLlwiKSkge1xuICAgICAgICAgICAgaWYgKCEoMCwgZXhwb3J0cy5pc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0KShsYWJlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghKDAsIGlzVmFsaWRIb3N0TGFiZWxfMS5pc1ZhbGlkSG9zdExhYmVsKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgMyB8fCB2YWx1ZS5sZW5ndGggPiA2Mykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoMCwgaXNJcEFkZHJlc3NfMS5pc0lwQWRkcmVzcykodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0cy5pc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0ID0gaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlQXJuID0gdm9pZCAwO1xuY29uc3QgcGFyc2VBcm4gPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoIDwgNilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgW2FybiwgcGFydGl0aW9uLCBzZXJ2aWNlLCByZWdpb24sIGFjY291bnRJZCwgLi4ucmVzb3VyY2VJZF0gPSBzZWdtZW50cztcbiAgICBpZiAoYXJuICE9PSBcImFyblwiIHx8IHBhcnRpdGlvbiA9PT0gXCJcIiB8fCBzZXJ2aWNlID09PSBcIlwiIHx8IHJlc291cmNlSWRbMF0gPT09IFwiXCIpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAgIHBhcnRpdGlvbixcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlSWRbMF0uaW5jbHVkZXMoXCIvXCIpID8gcmVzb3VyY2VJZFswXS5zcGxpdChcIi9cIikgOiByZXNvdXJjZUlkLFxuICAgIH07XG59O1xuZXhwb3J0cy5wYXJzZUFybiA9IHBhcnNlQXJuO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhcnNlQXJuXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhcnRpdGlvblwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sZWFuRXF1YWxzID0gdm9pZCAwO1xuY29uc3QgYm9vbGVhbkVxdWFscyA9ICh2YWx1ZTEsIHZhbHVlMikgPT4gdmFsdWUxID09PSB2YWx1ZTI7XG5leHBvcnRzLmJvb2xlYW5FcXVhbHMgPSBib29sZWFuRXF1YWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXR0clBhdGhMaXN0ID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGdldEF0dHJQYXRoTGlzdCA9IChwYXRoKSA9PiB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBwYXRoTGlzdCA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICBjb25zdCBzcXVhcmVCcmFja2V0SW5kZXggPSBwYXJ0LmluZGV4T2YoXCJbXCIpO1xuICAgICAgICBpZiAoc3F1YXJlQnJhY2tldEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKHBhcnQuaW5kZXhPZihcIl1cIikgIT09IHBhcnQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFBhdGg6ICcke3BhdGh9JyBkb2VzIG5vdCBlbmQgd2l0aCAnXSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFycmF5SW5kZXggPSBwYXJ0LnNsaWNlKHNxdWFyZUJyYWNrZXRJbmRleCArIDEsIC0xKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VJbnQoYXJyYXlJbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgSW52YWxpZCBhcnJheSBpbmRleDogJyR7YXJyYXlJbmRleH0nIGluIHBhdGg6ICcke3BhdGh9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNxdWFyZUJyYWNrZXRJbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHBhdGhMaXN0LnB1c2gocGFydC5zbGljZSgwLCBzcXVhcmVCcmFja2V0SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGhMaXN0LnB1c2goYXJyYXlJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoTGlzdC5wdXNoKHBhcnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoTGlzdDtcbn07XG5leHBvcnRzLmdldEF0dHJQYXRoTGlzdCA9IGdldEF0dHJQYXRoTGlzdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEF0dHIgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZ2V0QXR0clBhdGhMaXN0XzEgPSByZXF1aXJlKFwiLi9nZXRBdHRyUGF0aExpc3RcIik7XG5jb25zdCBnZXRBdHRyID0gKHZhbHVlLCBwYXRoKSA9PiAoMCwgZ2V0QXR0clBhdGhMaXN0XzEuZ2V0QXR0clBhdGhMaXN0KShwYXRoKS5yZWR1Y2UoKGFjYywgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjYyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBJbmRleCAnJHtpbmRleH0nIGluICcke3BhdGh9JyBub3QgZm91bmQgaW4gJyR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSdgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2MpKSB7XG4gICAgICAgIHJldHVybiBhY2NbcGFyc2VJbnQoaW5kZXgpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY1tpbmRleF07XG59LCB2YWx1ZSk7XG5leHBvcnRzLmdldEF0dHIgPSBnZXRBdHRyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNTZXQgPSB2b2lkIDA7XG5jb25zdCBpc1NldCA9ICh2YWx1ZSkgPT4gdmFsdWUgIT0gbnVsbDtcbmV4cG9ydHMuaXNTZXQgPSBpc1NldDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vdCA9IHZvaWQgMDtcbmNvbnN0IG5vdCA9ICh2YWx1ZSkgPT4gIXZhbHVlO1xuZXhwb3J0cy5ub3QgPSBub3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cEF1dGhMb2NhdGlvbiA9IHZvaWQgMDtcbnZhciBIdHRwQXV0aExvY2F0aW9uO1xuKGZ1bmN0aW9uIChIdHRwQXV0aExvY2F0aW9uKSB7XG4gICAgSHR0cEF1dGhMb2NhdGlvbltcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gICAgSHR0cEF1dGhMb2NhdGlvbltcIlFVRVJZXCJdID0gXCJxdWVyeVwiO1xufSkoSHR0cEF1dGhMb2NhdGlvbiA9IGV4cG9ydHMuSHR0cEF1dGhMb2NhdGlvbiB8fCAoZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29uZmlnXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21hbmFnZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcG9vbFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvc3RBZGRyZXNzVHlwZSA9IHZvaWQgMDtcbnZhciBIb3N0QWRkcmVzc1R5cGU7XG4oZnVuY3Rpb24gKEhvc3RBZGRyZXNzVHlwZSkge1xuICAgIEhvc3RBZGRyZXNzVHlwZVtcIkFBQUFcIl0gPSBcIkFBQUFcIjtcbiAgICBIb3N0QWRkcmVzc1R5cGVbXCJBXCJdID0gXCJBXCI7XG59KShIb3N0QWRkcmVzc1R5cGUgPSBleHBvcnRzLkhvc3RBZGRyZXNzVHlwZSB8fCAoZXhwb3J0cy5Ib3N0QWRkcmVzc1R5cGUgPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW5kcG9pbnRVUkxTY2hlbWUgPSB2b2lkIDA7XG52YXIgRW5kcG9pbnRVUkxTY2hlbWU7XG4oZnVuY3Rpb24gKEVuZHBvaW50VVJMU2NoZW1lKSB7XG4gICAgRW5kcG9pbnRVUkxTY2hlbWVbXCJIVFRQXCJdID0gXCJodHRwXCI7XG4gICAgRW5kcG9pbnRVUkxTY2hlbWVbXCJIVFRQU1wiXSA9IFwiaHR0cHNcIjtcbn0pKEVuZHBvaW50VVJMU2NoZW1lID0gZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSB8fCAoZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bbm9ueW1vdXNJZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bd3NDcmVkZW50aWFsSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTG9naW5JZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Ub2tlbklkZW50aXR5XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSB2b2lkIDA7XG52YXIgUmVxdWVzdEhhbmRsZXJQcm90b2NvbDtcbihmdW5jdGlvbiAoUmVxdWVzdEhhbmRsZXJQcm90b2NvbCkge1xuICAgIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xbXCJIVFRQXzBfOVwiXSA9IFwiaHR0cC8wLjlcIjtcbiAgICBSZXF1ZXN0SGFuZGxlclByb3RvY29sW1wiSFRUUF8xXzBcIl0gPSBcImh0dHAvMS4wXCI7XG4gICAgUmVxdWVzdEhhbmRsZXJQcm90b2NvbFtcIlREU184XzBcIl0gPSBcInRkcy84LjBcIjtcbn0pKFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSBleHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgfHwgKGV4cG9ydHMuUmVxdWVzdEhhbmRsZXJQcm90b2NvbCA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYWJvcnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYXV0aFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jaGVja3N1bVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jbGllbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25uZWN0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NyZWRlbnRpYWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NyeXB0b1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW5kcG9pbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXZlbnRTdHJlYW1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sb2dnZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYWdpbmF0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb2ZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVxdWVzdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXNwb25zZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXRyeVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJkZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaGFwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2lnbmF0dXJlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmVhbVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90b2tlblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2ZlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3dhaXRlclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVVSTCA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdHlwZXNcIik7XG5jb25zdCBpc0lwQWRkcmVzc18xID0gcmVxdWlyZShcIi4vaXNJcEFkZHJlc3NcIik7XG5jb25zdCBERUZBVUxUX1BPUlRTID0ge1xuICAgIFt0eXBlc18xLkVuZHBvaW50VVJMU2NoZW1lLkhUVFBdOiA4MCxcbiAgICBbdHlwZXNfMS5FbmRwb2ludFVSTFNjaGVtZS5IVFRQU106IDQ0Myxcbn07XG5jb25zdCBwYXJzZVVSTCA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHdoYXR3Z1VSTCA9ICgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwiaG9zdG5hbWVcIiBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQsIHByb3RvY29sID0gXCJcIiwgcGF0aCA9IFwiXCIsIHF1ZXJ5ID0ge30gfSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiBcIlwifSR7cGF0aH1gKTtcbiAgICAgICAgICAgICAgICB1cmwuc2VhcmNoID0gT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9KSgpO1xuICAgIGlmICghd2hhdHdnVVJMKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byBwYXJzZSAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gYXMgYSB3aGF0d2cgVVJMLmApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdXJsU3RyaW5nID0gd2hhdHdnVVJMLmhyZWY7XG4gICAgY29uc3QgeyBob3N0LCBob3N0bmFtZSwgcGF0aG5hbWUsIHByb3RvY29sLCBzZWFyY2ggfSA9IHdoYXR3Z1VSTDtcbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWUgPSBwcm90b2NvbC5zbGljZSgwLCAtMSk7XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKHR5cGVzXzEuRW5kcG9pbnRVUkxTY2hlbWUpLmluY2x1ZGVzKHNjaGVtZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGlzSXAgPSAoMCwgaXNJcEFkZHJlc3NfMS5pc0lwQWRkcmVzcykoaG9zdG5hbWUpO1xuICAgIGNvbnN0IGlucHV0Q29udGFpbnNEZWZhdWx0UG9ydCA9IHVybFN0cmluZy5pbmNsdWRlcyhgJHtob3N0fToke0RFRkFVTFRfUE9SVFNbc2NoZW1lXX1gKSB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmluY2x1ZGVzKGAke2hvc3R9OiR7REVGQVVMVF9QT1JUU1tzY2hlbWVdfWApKTtcbiAgICBjb25zdCBhdXRob3JpdHkgPSBgJHtob3N0fSR7aW5wdXRDb250YWluc0RlZmF1bHRQb3J0ID8gYDoke0RFRkFVTFRfUE9SVFNbc2NoZW1lXX1gIDogYGB9YDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWUsXG4gICAgICAgIGF1dGhvcml0eSxcbiAgICAgICAgcGF0aDogcGF0aG5hbWUsXG4gICAgICAgIG5vcm1hbGl6ZWRQYXRoOiBwYXRobmFtZS5lbmRzV2l0aChcIi9cIikgPyBwYXRobmFtZSA6IGAke3BhdGhuYW1lfS9gLFxuICAgICAgICBpc0lwLFxuICAgIH07XG59O1xuZXhwb3J0cy5wYXJzZVVSTCA9IHBhcnNlVVJMO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nRXF1YWxzID0gdm9pZCAwO1xuY29uc3Qgc3RyaW5nRXF1YWxzID0gKHZhbHVlMSwgdmFsdWUyKSA9PiB2YWx1ZTEgPT09IHZhbHVlMjtcbmV4cG9ydHMuc3RyaW5nRXF1YWxzID0gc3RyaW5nRXF1YWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3Vic3RyaW5nID0gdm9pZCAwO1xuY29uc3Qgc3Vic3RyaW5nID0gKGlucHV0LCBzdGFydCwgc3RvcCwgcmV2ZXJzZSkgPT4ge1xuICAgIGlmIChzdGFydCA+PSBzdG9wIHx8IGlucHV0Lmxlbmd0aCA8IHN0b3ApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghcmV2ZXJzZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCBzdG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhpbnB1dC5sZW5ndGggLSBzdG9wLCBpbnB1dC5sZW5ndGggLSBzdGFydCk7XG59O1xuZXhwb3J0cy5zdWJzdHJpbmcgPSBzdWJzdHJpbmc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cmlFbmNvZGUgPSB2b2lkIDA7XG5jb25zdCB1cmlFbmNvZGUgPSAodmFsdWUpID0+IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkucmVwbGFjZSgvWyEqJygpXS9nLCAoYykgPT4gYCUke2MuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gKTtcbmV4cG9ydHMudXJpRW5jb2RlID0gdXJpRW5jb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXdzID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmV4cG9ydHMuYXdzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vYXdzXCIpKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jvb2xlYW5FcXVhbHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2V0QXR0clwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pc1NldFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pc1ZhbGlkSG9zdExhYmVsXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL25vdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZVVSTFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJpbmdFcXVhbHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3Vic3RyaW5nXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3VyaUVuY29kZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZVRlbXBsYXRlID0gdm9pZCAwO1xuY29uc3QgbGliXzEgPSByZXF1aXJlKFwiLi4vbGliXCIpO1xuY29uc3QgZXZhbHVhdGVUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGV2YWx1YXRlZFRlbXBsYXRlQXJyID0gW107XG4gICAgY29uc3QgdGVtcGxhdGVDb250ZXh0ID0ge1xuICAgICAgICAuLi5vcHRpb25zLmVuZHBvaW50UGFyYW1zLFxuICAgICAgICAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCxcbiAgICB9O1xuICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCB0ZW1wbGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgb3BlbmluZ0JyYWNlSW5kZXggPSB0ZW1wbGF0ZS5pbmRleE9mKFwie1wiLCBjdXJyZW50SW5kZXgpO1xuICAgICAgICBpZiAob3BlbmluZ0JyYWNlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKHRlbXBsYXRlLnNsaWNlKGN1cnJlbnRJbmRleCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZS5zbGljZShjdXJyZW50SW5kZXgsIG9wZW5pbmdCcmFjZUluZGV4KSk7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdCcmFjZUluZGV4ID0gdGVtcGxhdGUuaW5kZXhPZihcIn1cIiwgb3BlbmluZ0JyYWNlSW5kZXgpO1xuICAgICAgICBpZiAoY2xvc2luZ0JyYWNlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKHRlbXBsYXRlLnNsaWNlKG9wZW5pbmdCcmFjZUluZGV4KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVtcGxhdGVbb3BlbmluZ0JyYWNlSW5kZXggKyAxXSA9PT0gXCJ7XCIgJiYgdGVtcGxhdGVbY2xvc2luZ0JyYWNlSW5kZXggKyAxXSA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGUuc2xpY2Uob3BlbmluZ0JyYWNlSW5kZXggKyAxLCBjbG9zaW5nQnJhY2VJbmRleCkpO1xuICAgICAgICAgICAgY3VycmVudEluZGV4ID0gY2xvc2luZ0JyYWNlSW5kZXggKyAyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0ZW1wbGF0ZS5zdWJzdHJpbmcob3BlbmluZ0JyYWNlSW5kZXggKyAxLCBjbG9zaW5nQnJhY2VJbmRleCk7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJOYW1lLmluY2x1ZGVzKFwiI1wiKSkge1xuICAgICAgICAgICAgY29uc3QgW3JlZk5hbWUsIGF0dHJOYW1lXSA9IHBhcmFtZXRlck5hbWUuc3BsaXQoXCIjXCIpO1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCgoMCwgbGliXzEuZ2V0QXR0cikodGVtcGxhdGVDb250ZXh0W3JlZk5hbWVdLCBhdHRyTmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZUNvbnRleHRbcGFyYW1ldGVyTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IGNsb3NpbmdCcmFjZUluZGV4ICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIGV2YWx1YXRlZFRlbXBsYXRlQXJyLmpvaW4oXCJcIik7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZVRlbXBsYXRlID0gZXZhbHVhdGVUZW1wbGF0ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJlZmVyZW5jZVZhbHVlID0gdm9pZCAwO1xuY29uc3QgZ2V0UmVmZXJlbmNlVmFsdWUgPSAoeyByZWYgfSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHJlZmVyZW5jZVJlY29yZCA9IHtcbiAgICAgICAgLi4ub3B0aW9ucy5lbmRwb2ludFBhcmFtcyxcbiAgICAgICAgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsXG4gICAgfTtcbiAgICByZXR1cm4gcmVmZXJlbmNlUmVjb3JkW3JlZl07XG59O1xuZXhwb3J0cy5nZXRSZWZlcmVuY2VWYWx1ZSA9IGdldFJlZmVyZW5jZVZhbHVlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVFeHByZXNzaW9uID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGNhbGxGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vY2FsbEZ1bmN0aW9uXCIpO1xuY29uc3QgZXZhbHVhdGVUZW1wbGF0ZV8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVUZW1wbGF0ZVwiKTtcbmNvbnN0IGdldFJlZmVyZW5jZVZhbHVlXzEgPSByZXF1aXJlKFwiLi9nZXRSZWZlcmVuY2VWYWx1ZVwiKTtcbmNvbnN0IGV2YWx1YXRlRXhwcmVzc2lvbiA9IChvYmosIGtleU5hbWUsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIGV2YWx1YXRlVGVtcGxhdGVfMS5ldmFsdWF0ZVRlbXBsYXRlKShvYmosIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvYmpbXCJmblwiXSkge1xuICAgICAgICByZXR1cm4gKDAsIGNhbGxGdW5jdGlvbl8xLmNhbGxGdW5jdGlvbikob2JqLCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAob2JqW1wicmVmXCJdKSB7XG4gICAgICAgIHJldHVybiAoMCwgZ2V0UmVmZXJlbmNlVmFsdWVfMS5nZXRSZWZlcmVuY2VWYWx1ZSkob2JqLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgJyR7a2V5TmFtZX0nOiAke1N0cmluZyhvYmopfSBpcyBub3QgYSBzdHJpbmcsIGZ1bmN0aW9uIG9yIHJlZmVyZW5jZS5gKTtcbn07XG5leHBvcnRzLmV2YWx1YXRlRXhwcmVzc2lvbiA9IGV2YWx1YXRlRXhwcmVzc2lvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxGdW5jdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBsaWIgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi4vbGliXCIpKTtcbmNvbnN0IGV2YWx1YXRlRXhwcmVzc2lvbl8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFeHByZXNzaW9uXCIpO1xuY29uc3QgY2FsbEZ1bmN0aW9uID0gKHsgZm4sIGFyZ3YgfSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGV2YWx1YXRlZEFyZ3MgPSBhcmd2Lm1hcCgoYXJnKSA9PiBbXCJib29sZWFuXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKHR5cGVvZiBhcmcpID8gYXJnIDogKDAsIGV2YWx1YXRlRXhwcmVzc2lvbl8xLmV2YWx1YXRlRXhwcmVzc2lvbikoYXJnLCBcImFyZ1wiLCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIGZuLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKGFjYywga2V5KSA9PiBhY2Nba2V5XSwgbGliKSguLi5ldmFsdWF0ZWRBcmdzKTtcbn07XG5leHBvcnRzLmNhbGxGdW5jdGlvbiA9IGNhbGxGdW5jdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlQ29uZGl0aW9uID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IHJlcXVpcmUoXCIuLi9kZWJ1Z1wiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBjYWxsRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2NhbGxGdW5jdGlvblwiKTtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uID0gKHsgYXNzaWduLCAuLi5mbkFyZ3MgfSwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKGFzc2lnbiAmJiBhc3NpZ24gaW4gb3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgJyR7YXNzaWdufScgaXMgYWxyZWFkeSBkZWZpbmVkIGluIFJlZmVyZW5jZSBSZWNvcmQuYCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gKDAsIGNhbGxGdW5jdGlvbl8xLmNhbGxGdW5jdGlvbikoZm5BcmdzLCBvcHRpb25zKTtcbiAgICAoX2IgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZGVidWdfMS5kZWJ1Z0lkLCBgZXZhbHVhdGVDb25kaXRpb246ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykoZm5BcmdzKX0gPSAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKHZhbHVlKX1gKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHZhbHVlID09PSBcIlwiID8gdHJ1ZSA6ICEhdmFsdWUsXG4gICAgICAgIC4uLihhc3NpZ24gIT0gbnVsbCAmJiB7IHRvQXNzaWduOiB7IG5hbWU6IGFzc2lnbiwgdmFsdWUgfSB9KSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZXZhbHVhdGVDb25kaXRpb24gPSBldmFsdWF0ZUNvbmRpdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlQ29uZGl0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiLi4vZGVidWdcIik7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbl8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVDb25kaXRpb25cIik7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbnMgPSAoY29uZGl0aW9ucyA9IFtdLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBjb25kaXRpb25zUmVmZXJlbmNlUmVjb3JkID0ge307XG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuICAgICAgICBjb25zdCB7IHJlc3VsdCwgdG9Bc3NpZ24gfSA9ICgwLCBldmFsdWF0ZUNvbmRpdGlvbl8xLmV2YWx1YXRlQ29uZGl0aW9uKShjb25kaXRpb24sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICByZWZlcmVuY2VSZWNvcmQ6IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCxcbiAgICAgICAgICAgICAgICAuLi5jb25kaXRpb25zUmVmZXJlbmNlUmVjb3JkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9Bc3NpZ24pIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnNSZWZlcmVuY2VSZWNvcmRbdG9Bc3NpZ24ubmFtZV0gPSB0b0Fzc2lnbi52YWx1ZTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBkZWJ1Z18xLmRlYnVnSWQsIGBhc3NpZ246ICR7dG9Bc3NpZ24ubmFtZX0gOj0gJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKSh0b0Fzc2lnbi52YWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlLCByZWZlcmVuY2VSZWNvcmQ6IGNvbmRpdGlvbnNSZWZlcmVuY2VSZWNvcmQgfTtcbn07XG5leHBvcnRzLmV2YWx1YXRlQ29uZGl0aW9ucyA9IGV2YWx1YXRlQ29uZGl0aW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50SGVhZGVycyA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXhwcmVzc2lvblwiKTtcbmNvbnN0IGdldEVuZHBvaW50SGVhZGVycyA9IChoZWFkZXJzLCBvcHRpb25zKSA9PiBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5yZWR1Y2UoKGFjYywgW2hlYWRlcktleSwgaGVhZGVyVmFsXSkgPT4gKHtcbiAgICAuLi5hY2MsXG4gICAgW2hlYWRlcktleV06IGhlYWRlclZhbC5tYXAoKGhlYWRlclZhbEVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEV4cHIgPSAoMCwgZXZhbHVhdGVFeHByZXNzaW9uXzEuZXZhbHVhdGVFeHByZXNzaW9uKShoZWFkZXJWYWxFbnRyeSwgXCJIZWFkZXIgdmFsdWUgZW50cnlcIiwgb3B0aW9ucyk7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvY2Vzc2VkRXhwciAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgSGVhZGVyICcke2hlYWRlcktleX0nIHZhbHVlICcke3Byb2Nlc3NlZEV4cHJ9JyBpcyBub3QgYSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXhwcjtcbiAgICB9KSxcbn0pLCB7fSk7XG5leHBvcnRzLmdldEVuZHBvaW50SGVhZGVycyA9IGdldEVuZHBvaW50SGVhZGVycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50UHJvcGVydHkgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVUZW1wbGF0ZV8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVUZW1wbGF0ZVwiKTtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRQcm9wZXJ0eSA9IChwcm9wZXJ0eSwgb3B0aW9ucykgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuICAgICAgICByZXR1cm4gcHJvcGVydHkubWFwKChwcm9wZXJ0eUVudHJ5KSA9PiAoMCwgZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnR5KShwcm9wZXJ0eUVudHJ5LCBvcHRpb25zKSk7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIHByb3BlcnR5KSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHJldHVybiAoMCwgZXZhbHVhdGVUZW1wbGF0ZV8xLmV2YWx1YXRlVGVtcGxhdGUpKHByb3BlcnR5LCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgVW5leHBlY3RlZCBlbmRwb2ludCBwcm9wZXJ0eTogJHtwcm9wZXJ0eX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXzEuZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzKShwcm9wZXJ0eSwgb3B0aW9ucyk7XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBVbmV4cGVjdGVkIGVuZHBvaW50IHByb3BlcnR5IHR5cGU6ICR7dHlwZW9mIHByb3BlcnR5fWApO1xuICAgIH1cbn07XG5leHBvcnRzLmdldEVuZHBvaW50UHJvcGVydHkgPSBnZXRFbmRwb2ludFByb3BlcnR5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzID0gdm9pZCAwO1xuY29uc3QgZ2V0RW5kcG9pbnRQcm9wZXJ0eV8xID0gcmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRQcm9wZXJ0eVwiKTtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydGllcyA9IChwcm9wZXJ0aWVzLCBvcHRpb25zKSA9PiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKS5yZWR1Y2UoKGFjYywgW3Byb3BlcnR5S2V5LCBwcm9wZXJ0eVZhbF0pID0+ICh7XG4gICAgLi4uYWNjLFxuICAgIFtwcm9wZXJ0eUtleV06ICgwLCBnZXRFbmRwb2ludFByb3BlcnR5XzEuZ2V0RW5kcG9pbnRQcm9wZXJ0eSkocHJvcGVydHlWYWwsIG9wdGlvbnMpLFxufSksIHt9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzID0gZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRVcmwgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUV4cHJlc3Npb25cIik7XG5jb25zdCBnZXRFbmRwb2ludFVybCA9IChlbmRwb2ludFVybCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAoMCwgZXZhbHVhdGVFeHByZXNzaW9uXzEuZXZhbHVhdGVFeHByZXNzaW9uKShlbmRwb2ludFVybCwgXCJFbmRwb2ludCBVUkxcIiwgb3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBleHByZXNzaW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVSTChleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjb25zdHJ1Y3QgVVJMIHdpdGggJHtleHByZXNzaW9ufWAsIGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYEVuZHBvaW50IFVSTCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt0eXBlb2YgZXhwcmVzc2lvbn1gKTtcbn07XG5leHBvcnRzLmdldEVuZHBvaW50VXJsID0gZ2V0RW5kcG9pbnRVcmw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUVuZHBvaW50UnVsZSA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiLi4vZGVidWdcIik7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbnNfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlQ29uZGl0aW9uc1wiKTtcbmNvbnN0IGdldEVuZHBvaW50SGVhZGVyc18xID0gcmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRIZWFkZXJzXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9nZXRFbmRwb2ludFByb3BlcnRpZXNcIik7XG5jb25zdCBnZXRFbmRwb2ludFVybF8xID0gcmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRVcmxcIik7XG5jb25zdCBldmFsdWF0ZUVuZHBvaW50UnVsZSA9IChlbmRwb2ludFJ1bGUsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgY29uZGl0aW9ucywgZW5kcG9pbnQgfSA9IGVuZHBvaW50UnVsZTtcbiAgICBjb25zdCB7IHJlc3VsdCwgcmVmZXJlbmNlUmVjb3JkIH0gPSAoMCwgZXZhbHVhdGVDb25kaXRpb25zXzEuZXZhbHVhdGVDb25kaXRpb25zKShjb25kaXRpb25zLCBvcHRpb25zKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50UnVsZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHJlZmVyZW5jZVJlY29yZDogeyAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCwgLi4ucmVmZXJlbmNlUmVjb3JkIH0sXG4gICAgfTtcbiAgICBjb25zdCB7IHVybCwgcHJvcGVydGllcywgaGVhZGVycyB9ID0gZW5kcG9pbnQ7XG4gICAgKF9iID0gKF9hID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWJ1ZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGRlYnVnXzEuZGVidWdJZCwgYFJlc29sdmluZyBlbmRwb2ludCBmcm9tIHRlbXBsYXRlOiAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKGVuZHBvaW50KX1gKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi4oaGVhZGVycyAhPSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgaGVhZGVyczogKDAsIGdldEVuZHBvaW50SGVhZGVyc18xLmdldEVuZHBvaW50SGVhZGVycykoaGVhZGVycywgZW5kcG9pbnRSdWxlT3B0aW9ucyksXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4ocHJvcGVydGllcyAhPSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgcHJvcGVydGllczogKDAsIGdldEVuZHBvaW50UHJvcGVydGllc18xLmdldEVuZHBvaW50UHJvcGVydGllcykocHJvcGVydGllcywgZW5kcG9pbnRSdWxlT3B0aW9ucyksXG4gICAgICAgIH0pLFxuICAgICAgICB1cmw6ICgwLCBnZXRFbmRwb2ludFVybF8xLmdldEVuZHBvaW50VXJsKSh1cmwsIGVuZHBvaW50UnVsZU9wdGlvbnMpLFxuICAgIH07XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUVuZHBvaW50UnVsZSA9IGV2YWx1YXRlRW5kcG9pbnRSdWxlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVFcnJvclJ1bGUgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25zXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUNvbmRpdGlvbnNcIik7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXhwcmVzc2lvblwiKTtcbmNvbnN0IGV2YWx1YXRlRXJyb3JSdWxlID0gKGVycm9yUnVsZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgY29uZGl0aW9ucywgZXJyb3IgfSA9IGVycm9yUnVsZTtcbiAgICBjb25zdCB7IHJlc3VsdCwgcmVmZXJlbmNlUmVjb3JkIH0gPSAoMCwgZXZhbHVhdGVDb25kaXRpb25zXzEuZXZhbHVhdGVDb25kaXRpb25zKShjb25kaXRpb25zLCBvcHRpb25zKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoKDAsIGV2YWx1YXRlRXhwcmVzc2lvbl8xLmV2YWx1YXRlRXhwcmVzc2lvbikoZXJyb3IsIFwiRXJyb3JcIiwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICByZWZlcmVuY2VSZWNvcmQ6IHsgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsIC4uLnJlZmVyZW5jZVJlY29yZCB9LFxuICAgIH0pKTtcbn07XG5leHBvcnRzLmV2YWx1YXRlRXJyb3JSdWxlID0gZXZhbHVhdGVFcnJvclJ1bGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZVRyZWVSdWxlID0gdm9pZCAwO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25zXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUNvbmRpdGlvbnNcIik7XG5jb25zdCBldmFsdWF0ZVJ1bGVzXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZVJ1bGVzXCIpO1xuY29uc3QgZXZhbHVhdGVUcmVlUnVsZSA9ICh0cmVlUnVsZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgY29uZGl0aW9ucywgcnVsZXMgfSA9IHRyZWVSdWxlO1xuICAgIGNvbnN0IHsgcmVzdWx0LCByZWZlcmVuY2VSZWNvcmQgfSA9ICgwLCBldmFsdWF0ZUNvbmRpdGlvbnNfMS5ldmFsdWF0ZUNvbmRpdGlvbnMpKGNvbmRpdGlvbnMsIG9wdGlvbnMpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBldmFsdWF0ZVJ1bGVzXzEuZXZhbHVhdGVSdWxlcykocnVsZXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlUmVjb3JkOiB7IC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLCAuLi5yZWZlcmVuY2VSZWNvcmQgfSxcbiAgICB9KTtcbn07XG5leHBvcnRzLmV2YWx1YXRlVHJlZVJ1bGUgPSBldmFsdWF0ZVRyZWVSdWxlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVSdWxlcyA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBldmFsdWF0ZUVuZHBvaW50UnVsZV8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFbmRwb2ludFJ1bGVcIik7XG5jb25zdCBldmFsdWF0ZUVycm9yUnVsZV8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFcnJvclJ1bGVcIik7XG5jb25zdCBldmFsdWF0ZVRyZWVSdWxlXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZVRyZWVSdWxlXCIpO1xuY29uc3QgZXZhbHVhdGVSdWxlcyA9IChydWxlcywgb3B0aW9ucykgPT4ge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgICBpZiAocnVsZS50eXBlID09PSBcImVuZHBvaW50XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50T3JVbmRlZmluZWQgPSAoMCwgZXZhbHVhdGVFbmRwb2ludFJ1bGVfMS5ldmFsdWF0ZUVuZHBvaW50UnVsZSkocnVsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnRPclVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludE9yVW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJ1bGUudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAoMCwgZXZhbHVhdGVFcnJvclJ1bGVfMS5ldmFsdWF0ZUVycm9yUnVsZSkocnVsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnVsZS50eXBlID09PSBcInRyZWVcIikge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnRPclVuZGVmaW5lZCA9ICgwLCBldmFsdWF0ZVRyZWVSdWxlXzEuZXZhbHVhdGVUcmVlUnVsZSkocnVsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnRPclVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludE9yVW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgVW5rbm93biBlbmRwb2ludCBydWxlOiAke3J1bGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgUnVsZXMgZXZhbHVhdGlvbiBmYWlsZWRgKTtcbn07XG5leHBvcnRzLmV2YWx1YXRlUnVsZXMgPSBldmFsdWF0ZVJ1bGVzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ldmFsdWF0ZVJ1bGVzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVFbmRwb2ludCA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiLi9kZWJ1Z1wiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IHJlc29sdmVFbmRwb2ludCA9IChydWxlU2V0T2JqZWN0LCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgY29uc3QgeyBlbmRwb2ludFBhcmFtcywgbG9nZ2VyIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgcGFyYW1ldGVycywgcnVsZXMgfSA9IHJ1bGVTZXRPYmplY3Q7XG4gICAgKF9iID0gKF9hID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWJ1ZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGAke2RlYnVnXzEuZGVidWdJZH0gSW5pdGlhbCBFbmRwb2ludFBhcmFtczogJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKShlbmRwb2ludFBhcmFtcyl9YCk7XG4gICAgY29uc3QgcGFyYW1zV2l0aERlZmF1bHQgPSBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKVxuICAgICAgICAuZmlsdGVyKChbLCB2XSkgPT4gdi5kZWZhdWx0ICE9IG51bGwpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gW2ssIHYuZGVmYXVsdF0pO1xuICAgIGlmIChwYXJhbXNXaXRoRGVmYXVsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3BhcmFtS2V5LCBwYXJhbURlZmF1bHRWYWx1ZV0gb2YgcGFyYW1zV2l0aERlZmF1bHQpIHtcbiAgICAgICAgICAgIGVuZHBvaW50UGFyYW1zW3BhcmFtS2V5XSA9IChfYyA9IGVuZHBvaW50UGFyYW1zW3BhcmFtS2V5XSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogcGFyYW1EZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWlyZWRQYXJhbXMgPSBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKVxuICAgICAgICAuZmlsdGVyKChbLCB2XSkgPT4gdi5yZXF1aXJlZClcbiAgICAgICAgLm1hcCgoW2tdKSA9PiBrKTtcbiAgICBmb3IgKGNvbnN0IHJlcXVpcmVkUGFyYW0gb2YgcmVxdWlyZWRQYXJhbXMpIHtcbiAgICAgICAgaWYgKGVuZHBvaW50UGFyYW1zW3JlcXVpcmVkUGFyYW1dID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYE1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiAnJHtyZXF1aXJlZFBhcmFtfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbmRwb2ludCA9ICgwLCB1dGlsc18xLmV2YWx1YXRlUnVsZXMpKHJ1bGVzLCB7IGVuZHBvaW50UGFyYW1zLCBsb2dnZXIsIHJlZmVyZW5jZVJlY29yZDoge30gfSk7XG4gICAgaWYgKChfZCA9IG9wdGlvbnMuZW5kcG9pbnRQYXJhbXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5FbmRwb2ludCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZ2l2ZW5FbmRwb2ludCA9IG5ldyBVUkwob3B0aW9ucy5lbmRwb2ludFBhcmFtcy5FbmRwb2ludCk7XG4gICAgICAgICAgICBjb25zdCB7IHByb3RvY29sLCBwb3J0IH0gPSBnaXZlbkVuZHBvaW50O1xuICAgICAgICAgICAgZW5kcG9pbnQudXJsLnByb3RvY29sID0gcHJvdG9jb2w7XG4gICAgICAgICAgICBlbmRwb2ludC51cmwucG9ydCA9IHBvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoX2YgPSAoX2UgPSBvcHRpb25zLmxvZ2dlcikgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmRlYnVnKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuY2FsbChfZSwgYCR7ZGVidWdfMS5kZWJ1Z0lkfSBSZXNvbHZlZCBlbmRwb2ludDogJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKShlbmRwb2ludCl9YCk7XG4gICAgcmV0dXJuIGVuZHBvaW50O1xufTtcbmV4cG9ydHMucmVzb2x2ZUVuZHBvaW50ID0gcmVzb2x2ZUVuZHBvaW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9saWIvYXdzL3BhcnRpdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXNvbHZlRW5kcG9pbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVUFfRVNDQVBFX1JFR0VYID0gZXhwb3J0cy5TUEFDRSA9IGV4cG9ydHMuWF9BTVpfVVNFUl9BR0VOVCA9IGV4cG9ydHMuVVNFUl9BR0VOVCA9IHZvaWQgMDtcbmV4cG9ydHMuVVNFUl9BR0VOVCA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0cy5YX0FNWl9VU0VSX0FHRU5UID0gXCJ4LWFtei11c2VyLWFnZW50XCI7XG5leHBvcnRzLlNQQUNFID0gXCIgXCI7XG5leHBvcnRzLlVBX0VTQ0FQRV9SRUdFWCA9IC9bXlxcIVxcI1xcJFxcJVxcJlxcJ1xcKlxcK1xcLVxcLlxcXlxcX1xcYFxcfFxcflxcZFxcd10vZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFBsdWdpbiA9IGV4cG9ydHMuZ2V0VXNlckFnZW50TWlkZGxld2FyZU9wdGlvbnMgPSBleHBvcnRzLnVzZXJBZ2VudE1pZGRsZXdhcmUgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IHV0aWxfZW5kcG9pbnRzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHNcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IHVzZXJBZ2VudE1pZGRsZXdhcmUgPSAob3B0aW9ucykgPT4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IHJlcXVlc3QgfSA9IGFyZ3M7XG4gICAgaWYgKCFwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSlcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9ICgoX2EgPSBjb250ZXh0ID09PSBudWxsIHx8IGNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnRleHQudXNlckFnZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWFwKGVzY2FwZVVzZXJBZ2VudCkpIHx8IFtdO1xuICAgIGNvbnN0IGRlZmF1bHRVc2VyQWdlbnQgPSAoYXdhaXQgb3B0aW9ucy5kZWZhdWx0VXNlckFnZW50UHJvdmlkZXIoKSkubWFwKGVzY2FwZVVzZXJBZ2VudCk7XG4gICAgY29uc3QgY3VzdG9tVXNlckFnZW50ID0gKChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Vc2VyQWdlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5tYXAoZXNjYXBlVXNlckFnZW50KSkgfHwgW107XG4gICAgY29uc3QgcHJlZml4ID0gKDAsIHV0aWxfZW5kcG9pbnRzXzEuZ2V0VXNlckFnZW50UHJlZml4KSgpO1xuICAgIGNvbnN0IHNka1VzZXJBZ2VudFZhbHVlID0gKHByZWZpeCA/IFtwcmVmaXhdIDogW10pXG4gICAgICAgIC5jb25jYXQoWy4uLmRlZmF1bHRVc2VyQWdlbnQsIC4uLnVzZXJBZ2VudCwgLi4uY3VzdG9tVXNlckFnZW50XSlcbiAgICAgICAgLmpvaW4oY29uc3RhbnRzXzEuU1BBQ0UpO1xuICAgIGNvbnN0IG5vcm1hbFVBVmFsdWUgPSBbXG4gICAgICAgIC4uLmRlZmF1bHRVc2VyQWdlbnQuZmlsdGVyKChzZWN0aW9uKSA9PiBzZWN0aW9uLnN0YXJ0c1dpdGgoXCJhd3Mtc2RrLVwiKSksXG4gICAgICAgIC4uLmN1c3RvbVVzZXJBZ2VudCxcbiAgICBdLmpvaW4oY29uc3RhbnRzXzEuU1BBQ0UpO1xuICAgIGlmIChvcHRpb25zLnJ1bnRpbWUgIT09IFwiYnJvd3NlclwiKSB7XG4gICAgICAgIGlmIChub3JtYWxVQVZhbHVlKSB7XG4gICAgICAgICAgICBoZWFkZXJzW2NvbnN0YW50c18xLlhfQU1aX1VTRVJfQUdFTlRdID0gaGVhZGVyc1tjb25zdGFudHNfMS5YX0FNWl9VU0VSX0FHRU5UXVxuICAgICAgICAgICAgICAgID8gYCR7aGVhZGVyc1tjb25zdGFudHNfMS5VU0VSX0FHRU5UXX0gJHtub3JtYWxVQVZhbHVlfWBcbiAgICAgICAgICAgICAgICA6IG5vcm1hbFVBVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc1tjb25zdGFudHNfMS5VU0VSX0FHRU5UXSA9IHNka1VzZXJBZ2VudFZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaGVhZGVyc1tjb25zdGFudHNfMS5YX0FNWl9VU0VSX0FHRU5UXSA9IHNka1VzZXJBZ2VudFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgfSk7XG59O1xuZXhwb3J0cy51c2VyQWdlbnRNaWRkbGV3YXJlID0gdXNlckFnZW50TWlkZGxld2FyZTtcbmNvbnN0IGVzY2FwZVVzZXJBZ2VudCA9IChbbmFtZSwgdmVyc2lvbl0pID0+IHtcbiAgICBjb25zdCBwcmVmaXhTZXBhcmF0b3JJbmRleCA9IG5hbWUuaW5kZXhPZihcIi9cIik7XG4gICAgY29uc3QgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgcHJlZml4U2VwYXJhdG9ySW5kZXgpO1xuICAgIGxldCB1YU5hbWUgPSBuYW1lLnN1YnN0cmluZyhwcmVmaXhTZXBhcmF0b3JJbmRleCArIDEpO1xuICAgIGlmIChwcmVmaXggPT09IFwiYXBpXCIpIHtcbiAgICAgICAgdWFOYW1lID0gdWFOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBbcHJlZml4LCB1YU5hbWUsIHZlcnNpb25dXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKVxuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW0ucmVwbGFjZShjb25zdGFudHNfMS5VQV9FU0NBUEVfUkVHRVgsIFwiX1wiKSlcbiAgICAgICAgLmpvaW4oXCIvXCIpO1xufTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50TWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJnZXRVc2VyQWdlbnRNaWRkbGV3YXJlXCIsXG4gICAgc3RlcDogXCJidWlsZFwiLFxuICAgIHByaW9yaXR5OiBcImxvd1wiLFxuICAgIHRhZ3M6IFtcIlNFVF9VU0VSX0FHRU5UXCIsIFwiVVNFUl9BR0VOVFwiXSxcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRVc2VyQWdlbnRQbHVnaW4gPSAoY29uZmlnKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy51c2VyQWdlbnRNaWRkbGV3YXJlKShjb25maWcpLCBleHBvcnRzLmdldFVzZXJBZ2VudE1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFBsdWdpbiA9IGdldFVzZXJBZ2VudFBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29uZmlndXJhdGlvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXNlci1hZ2VudC1taWRkbGV3YXJlXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSB2b2lkIDA7XG5jb25zdCByZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogb3B0aW9ucy51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBvcHRpb25zLnVzZUZpcHNFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFNpZ25pbmdOYW1lOiBcImF3c3Nzb29pZGNcIixcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0NydEF2YWlsYWJsZSA9IHZvaWQgMDtcbmNvbnN0IGlzQ3J0QXZhaWxhYmxlID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVxdWlyZShcImF3cy1jcnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJtZC9jcnQtYXZhaWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5leHBvcnRzLmlzQ3J0QXZhaWxhYmxlID0gaXNDcnRBdmFpbGFibGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0VXNlckFnZW50ID0gZXhwb3J0cy5VQV9BUFBfSURfSU5JX05BTUUgPSBleHBvcnRzLlVBX0FQUF9JRF9FTlZfTkFNRSA9IHZvaWQgMDtcbmNvbnN0IG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbm9kZS1jb25maWctcHJvdmlkZXJcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgcHJvY2Vzc18xID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5jb25zdCBpc19jcnRfYXZhaWxhYmxlXzEgPSByZXF1aXJlKFwiLi9pcy1jcnQtYXZhaWxhYmxlXCIpO1xuZXhwb3J0cy5VQV9BUFBfSURfRU5WX05BTUUgPSBcIkFXU19TREtfVUFfQVBQX0lEXCI7XG5leHBvcnRzLlVBX0FQUF9JRF9JTklfTkFNRSA9IFwic2RrLXVhLWFwcC1pZFwiO1xuY29uc3QgZGVmYXVsdFVzZXJBZ2VudCA9ICh7IHNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbiB9KSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgIFtcImF3cy1zZGstanNcIiwgY2xpZW50VmVyc2lvbl0sXG4gICAgICAgIFtgb3MvJHsoMCwgb3NfMS5wbGF0Zm9ybSkoKX1gLCAoMCwgb3NfMS5yZWxlYXNlKSgpXSxcbiAgICAgICAgW1wibGFuZy9qc1wiXSxcbiAgICAgICAgW1wibWQvbm9kZWpzXCIsIGAke3Byb2Nlc3NfMS52ZXJzaW9ucy5ub2RlfWBdLFxuICAgIF07XG4gICAgY29uc3QgY3J0QXZhaWxhYmxlID0gKDAsIGlzX2NydF9hdmFpbGFibGVfMS5pc0NydEF2YWlsYWJsZSkoKTtcbiAgICBpZiAoY3J0QXZhaWxhYmxlKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goY3J0QXZhaWxhYmxlKTtcbiAgICB9XG4gICAgaWYgKHNlcnZpY2VJZCkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKFtgYXBpLyR7c2VydmljZUlkfWAsIGNsaWVudFZlcnNpb25dKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3NfMS5lbnYuQVdTX0VYRUNVVElPTl9FTlYpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaChbYGV4ZWMtZW52LyR7cHJvY2Vzc18xLmVudi5BV1NfRVhFQ1VUSU9OX0VOVn1gXSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcElkUHJvbWlzZSA9ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbZXhwb3J0cy5VQV9BUFBfSURfRU5WX05BTUVdLFxuICAgICAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiBwcm9maWxlW2V4cG9ydHMuVUFfQVBQX0lEX0lOSV9OQU1FXSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH0pKCk7XG4gICAgbGV0IHJlc29sdmVkVXNlckFnZW50ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghcmVzb2x2ZWRVc2VyQWdlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcElkID0gYXdhaXQgYXBwSWRQcm9taXNlO1xuICAgICAgICAgICAgcmVzb2x2ZWRVc2VyQWdlbnQgPSBhcHBJZCA/IFsuLi5zZWN0aW9ucywgW2BhcHAvJHthcHBJZH1gXV0gOiBbLi4uc2VjdGlvbnNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZFVzZXJBZ2VudDtcbiAgICB9O1xufTtcbmV4cG9ydHMuZGVmYXVsdFVzZXJBZ2VudCA9IGRlZmF1bHRVc2VyQWdlbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ydWxlU2V0ID0gdm9pZCAwO1xuY29uc3QgcCA9IFwicmVxdWlyZWRcIiwgcSA9IFwiZm5cIiwgciA9IFwiYXJndlwiLCBzID0gXCJyZWZcIjtcbmNvbnN0IGEgPSBcIlBhcnRpdGlvblJlc3VsdFwiLCBiID0gXCJ0cmVlXCIsIGMgPSBcImVycm9yXCIsIGQgPSBcImVuZHBvaW50XCIsIGUgPSB7IFtwXTogZmFsc2UsIFwidHlwZVwiOiBcIlN0cmluZ1wiIH0sIGYgPSB7IFtwXTogdHJ1ZSwgXCJkZWZhdWx0XCI6IGZhbHNlLCBcInR5cGVcIjogXCJCb29sZWFuXCIgfSwgZyA9IHsgW3NdOiBcIkVuZHBvaW50XCIgfSwgaCA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbeyBbc106IFwiVXNlRklQU1wiIH0sIHRydWVdIH0sIGkgPSB7IFtxXTogXCJib29sZWFuRXF1YWxzXCIsIFtyXTogW3sgW3NdOiBcIlVzZUR1YWxTdGFja1wiIH0sIHRydWVdIH0sIGogPSB7fSwgayA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbdHJ1ZSwgeyBbcV06IFwiZ2V0QXR0clwiLCBbcl06IFt7IFtzXTogYSB9LCBcInN1cHBvcnRzRklQU1wiXSB9XSB9LCBsID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt0cnVlLCB7IFtxXTogXCJnZXRBdHRyXCIsIFtyXTogW3sgW3NdOiBhIH0sIFwic3VwcG9ydHNEdWFsU3RhY2tcIl0gfV0gfSwgbSA9IFtnXSwgbiA9IFtoXSwgbyA9IFtpXTtcbmNvbnN0IF9kYXRhID0geyB2ZXJzaW9uOiBcIjEuMFwiLCBwYXJhbWV0ZXJzOiB7IFJlZ2lvbjogZSwgVXNlRHVhbFN0YWNrOiBmLCBVc2VGSVBTOiBmLCBFbmRwb2ludDogZSB9LCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3FdOiBcImF3cy5wYXJ0aXRpb25cIiwgW3JdOiBbeyBbc106IFwiUmVnaW9uXCIgfV0sIGFzc2lnbjogYSB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFtxXTogXCJpc1NldFwiLCBbcl06IG0gfSwgeyBbcV06IFwicGFyc2VVUkxcIiwgW3JdOiBtLCBhc3NpZ246IFwidXJsXCIgfV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBuLCBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IEZJUFMgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBjIH0sIHsgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IG8sIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWRcIiwgdHlwZTogYyB9LCB7IGVuZHBvaW50OiB7IHVybDogZywgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgY29uZGl0aW9uczogW2gsIGldLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW2ssIGxdLCB0eXBlOiBiLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vb2lkYy1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfSwgeyBlcnJvcjogXCJGSVBTIGFuZCBEdWFsU3RhY2sgYXJlIGVuYWJsZWQsIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9uZSBvciBib3RoXCIsIHR5cGU6IGMgfV0gfSwgeyBjb25kaXRpb25zOiBuLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW2tdLCB0eXBlOiBiLCBydWxlczogW3sgdHlwZTogYiwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL29pZGMtZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgZXJyb3I6IFwiRklQUyBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IEZJUFNcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IG8sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbbF0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9vaWRjLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfSwgeyBlcnJvcjogXCJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBEdWFsU3RhY2tcIiwgdHlwZTogYyB9XSB9LCB7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL29pZGMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9XSB9O1xuZXhwb3J0cy5ydWxlU2V0ID0gX2RhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfZW5kcG9pbnRzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHNcIik7XG5jb25zdCBydWxlc2V0XzEgPSByZXF1aXJlKFwiLi9ydWxlc2V0XCIpO1xuY29uc3QgZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSAoZW5kcG9pbnRQYXJhbXMsIGNvbnRleHQgPSB7fSkgPT4ge1xuICAgIHJldHVybiAoMCwgdXRpbF9lbmRwb2ludHNfMS5yZXNvbHZlRW5kcG9pbnQpKHJ1bGVzZXRfMS5ydWxlU2V0LCB7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zOiBlbmRwb2ludFBhcmFtcyxcbiAgICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlcixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1cmxfcGFyc2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXJsLXBhcnNlclwiKTtcbmNvbnN0IHV0aWxfYmFzZTY0XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1iYXNlNjRcIik7XG5jb25zdCB1dGlsX3V0ZjhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXV0ZjhcIik7XG5jb25zdCBlbmRwb2ludFJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyXCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+ICh7XG4gICAgYXBpVmVyc2lvbjogXCIyMDE5LTA2LTEwXCIsXG4gICAgYmFzZTY0RGVjb2RlcjogY29uZmlnPy5iYXNlNjREZWNvZGVyID8/IHV0aWxfYmFzZTY0XzEuZnJvbUJhc2U2NCxcbiAgICBiYXNlNjRFbmNvZGVyOiBjb25maWc/LmJhc2U2NEVuY29kZXIgPz8gdXRpbF9iYXNlNjRfMS50b0Jhc2U2NCxcbiAgICBkaXNhYmxlSG9zdFByZWZpeDogY29uZmlnPy5kaXNhYmxlSG9zdFByZWZpeCA/PyBmYWxzZSxcbiAgICBlbmRwb2ludFByb3ZpZGVyOiBjb25maWc/LmVuZHBvaW50UHJvdmlkZXIgPz8gZW5kcG9pbnRSZXNvbHZlcl8xLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyLFxuICAgIGxvZ2dlcjogY29uZmlnPy5sb2dnZXIgPz8gbmV3IHNtaXRoeV9jbGllbnRfMS5Ob09wTG9nZ2VyKCksXG4gICAgc2VydmljZUlkOiBjb25maWc/LnNlcnZpY2VJZCA/PyBcIlNTTyBPSURDXCIsXG4gICAgdXJsUGFyc2VyOiBjb25maWc/LnVybFBhcnNlciA/PyB1cmxfcGFyc2VyXzEucGFyc2VVcmwsXG4gICAgdXRmOERlY29kZXI6IGNvbmZpZz8udXRmOERlY29kZXIgPz8gdXRpbF91dGY4XzEuZnJvbVV0ZjgsXG4gICAgdXRmOEVuY29kZXI6IGNvbmZpZz8udXRmOEVuY29kZXIgPz8gdXRpbF91dGY4XzEudG9VdGY4LFxufSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBwYWNrYWdlX2pzb25fMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9wYWNrYWdlLmpzb25cIikpO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgaGFzaF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvaGFzaC1ub2RlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3Qgbm9kZV9odHRwX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlclwiKTtcbmNvbnN0IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtYm9keS1sZW5ndGgtbm9kZVwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXJldHJ5XCIpO1xuY29uc3QgdXRpbF91c2VyX2FnZW50X25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZVwiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfc2hhcmVkXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lQ29uZmlnLnNoYXJlZFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMiA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICAoMCwgc21pdGh5X2NsaWVudF8yLmVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb24pKHByb2Nlc3MudmVyc2lvbik7XG4gICAgY29uc3QgZGVmYXVsdHNNb2RlID0gKDAsIHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEucmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZykoY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSAoKSA9PiBkZWZhdWx0c01vZGUoKS50aGVuKHNtaXRoeV9jbGllbnRfMS5sb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlKTtcbiAgICBjb25zdCBjbGllbnRTaGFyZWRWYWx1ZXMgPSAoMCwgcnVudGltZUNvbmZpZ19zaGFyZWRfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNsaWVudFNoYXJlZFZhbHVlcyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBydW50aW1lOiBcIm5vZGVcIixcbiAgICAgICAgZGVmYXVsdHNNb2RlLFxuICAgICAgICBib2R5TGVuZ3RoQ2hlY2tlcjogY29uZmlnPy5ib2R5TGVuZ3RoQ2hlY2tlciA/PyB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMS5jYWxjdWxhdGVCb2R5TGVuZ3RoLFxuICAgICAgICBkZWZhdWx0VXNlckFnZW50UHJvdmlkZXI6IGNvbmZpZz8uZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyID8/XG4gICAgICAgICAgICAoMCwgdXRpbF91c2VyX2FnZW50X25vZGVfMS5kZWZhdWx0VXNlckFnZW50KSh7IHNlcnZpY2VJZDogY2xpZW50U2hhcmVkVmFsdWVzLnNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbjogcGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9uIH0pLFxuICAgICAgICBtYXhBdHRlbXB0czogY29uZmlnPy5tYXhBdHRlbXB0cyA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShtaWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9NQVhfQVRURU1QVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHJlZ2lvbjogY29uZmlnPy5yZWdpb24gPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMsIGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMpLFxuICAgICAgICByZXF1ZXN0SGFuZGxlcjogY29uZmlnPy5yZXF1ZXN0SGFuZGxlciA/PyBuZXcgbm9kZV9odHRwX2hhbmRsZXJfMS5Ob2RlSHR0cEhhbmRsZXIoZGVmYXVsdENvbmZpZ1Byb3ZpZGVyKSxcbiAgICAgICAgcmV0cnlNb2RlOiBjb25maWc/LnJldHJ5TW9kZSA/P1xuICAgICAgICAgICAgKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoe1xuICAgICAgICAgICAgICAgIC4uLm1pZGRsZXdhcmVfcmV0cnlfMS5OT0RFX1JFVFJZX01PREVfQ09ORklHX09QVElPTlMsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYXN5bmMgKCkgPT4gKGF3YWl0IGRlZmF1bHRDb25maWdQcm92aWRlcigpKS5yZXRyeU1vZGUgfHwgdXRpbF9yZXRyeV8xLkRFRkFVTFRfUkVUUllfTU9ERSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBzaGEyNTY6IGNvbmZpZz8uc2hhMjU2ID8/IGhhc2hfbm9kZV8xLkhhc2guYmluZChudWxsLCBcInNoYTI1NlwiKSxcbiAgICAgICAgc3RyZWFtQ29sbGVjdG9yOiBjb25maWc/LnN0cmVhbUNvbGxlY3RvciA/PyBub2RlX2h0dHBfaGFuZGxlcl8xLnN0cmVhbUNvbGxlY3RvcixcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IGNvbmZpZz8udXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRFVBTFNUQUNLX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBjb25maWc/LnVzZUZpcHNFbmRwb2ludCA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1VTRV9GSVBTX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IGdldFJ1bnRpbWVDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TU09PSURDQ2xpZW50ID0gZXhwb3J0cy5fX0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb25cIik7XG5jb25zdCBtaWRkbGV3YXJlX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19DbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5DbGllbnQ7IH0gfSk7XG5jb25zdCBFbmRwb2ludFBhcmFtZXRlcnNfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVyc1wiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWdcIik7XG5jbGFzcyBTU09PSURDQ2xpZW50IGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBfY29uZmlnXzAgPSAoMCwgcnVudGltZUNvbmZpZ18xLmdldFJ1bnRpbWVDb25maWcpKGNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBfY29uZmlnXzEgPSAoMCwgRW5kcG9pbnRQYXJhbWV0ZXJzXzEucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycykoX2NvbmZpZ18wKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18yID0gKDAsIGNvbmZpZ19yZXNvbHZlcl8xLnJlc29sdmVSZWdpb25Db25maWcpKF9jb25maWdfMSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMyA9ICgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEucmVzb2x2ZUVuZHBvaW50Q29uZmlnKShfY29uZmlnXzIpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzQgPSAoMCwgbWlkZGxld2FyZV9yZXRyeV8xLnJlc29sdmVSZXRyeUNvbmZpZykoX2NvbmZpZ18zKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ181ID0gKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZykoX2NvbmZpZ180KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ182ID0gKDAsIG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xLnJlc29sdmVVc2VyQWdlbnRDb25maWcpKF9jb25maWdfNSk7XG4gICAgICAgIHN1cGVyKF9jb25maWdfNik7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX2NvbmZpZ182O1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5nZXRSZXRyeVBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEuZ2V0Q29udGVudExlbmd0aFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEuZ2V0SG9zdEhlYWRlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2xvZ2dlcl8xLmdldExvZ2dlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMS5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50UGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxufVxuZXhwb3J0cy5TU09PSURDQ2xpZW50ID0gU1NPT0lEQ0NsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uID0gdm9pZCAwO1xudmFyIEh0dHBBdXRoTG9jYXRpb247XG4oZnVuY3Rpb24gKEh0dHBBdXRoTG9jYXRpb24pIHtcbiAgICBIdHRwQXV0aExvY2F0aW9uW1wiSEVBREVSXCJdID0gXCJoZWFkZXJcIjtcbiAgICBIdHRwQXV0aExvY2F0aW9uW1wiUVVFUllcIl0gPSBcInF1ZXJ5XCI7XG59KShIdHRwQXV0aExvY2F0aW9uID0gZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uIHx8IChleHBvcnRzLkh0dHBBdXRoTG9jYXRpb24gPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29uZmlnXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21hbmFnZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcG9vbFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVuZHBvaW50VVJMU2NoZW1lID0gdm9pZCAwO1xudmFyIEVuZHBvaW50VVJMU2NoZW1lO1xuKGZ1bmN0aW9uIChFbmRwb2ludFVSTFNjaGVtZSkge1xuICAgIEVuZHBvaW50VVJMU2NoZW1lW1wiSFRUUFwiXSA9IFwiaHR0cFwiO1xuICAgIEVuZHBvaW50VVJMU2NoZW1lW1wiSFRUUFNcIl0gPSBcImh0dHBzXCI7XG59KShFbmRwb2ludFVSTFNjaGVtZSA9IGV4cG9ydHMuRW5kcG9pbnRVUkxTY2hlbWUgfHwgKGV4cG9ydHMuRW5kcG9pbnRVUkxTY2hlbWUgPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0VuZHBvaW50UnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FcnJvclJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vUnVsZVNldE9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaGFyZWRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVHJlZVJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpZWxkUG9zaXRpb24gPSB2b2lkIDA7XG52YXIgRmllbGRQb3NpdGlvbjtcbihmdW5jdGlvbiAoRmllbGRQb3NpdGlvbikge1xuICAgIEZpZWxkUG9zaXRpb25bRmllbGRQb3NpdGlvbltcIkhFQURFUlwiXSA9IDBdID0gXCJIRUFERVJcIjtcbiAgICBGaWVsZFBvc2l0aW9uW0ZpZWxkUG9zaXRpb25bXCJUUkFJTEVSXCJdID0gMV0gPSBcIlRSQUlMRVJcIjtcbn0pKEZpZWxkUG9zaXRpb24gPSBleHBvcnRzLkZpZWxkUG9zaXRpb24gfHwgKGV4cG9ydHMuRmllbGRQb3NpdGlvbiA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYXdzQ3JlZGVudGlhbElkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lkZW50aXR5XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlclByb3RvY29sID0gdm9pZCAwO1xudmFyIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2w7XG4oZnVuY3Rpb24gKFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wpIHtcbiAgICBSZXF1ZXN0SGFuZGxlclByb3RvY29sW1wiSFRUUF8wXzlcIl0gPSBcImh0dHAvMC45XCI7XG4gICAgUmVxdWVzdEhhbmRsZXJQcm90b2NvbFtcIkhUVFBfMV8wXCJdID0gXCJodHRwLzEuMFwiO1xuICAgIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xbXCJURFNfOF8wXCJdID0gXCJ0ZHMvOC4wXCI7XG59KShSZXF1ZXN0SGFuZGxlclByb3RvY29sID0gZXhwb3J0cy5SZXF1ZXN0SGFuZGxlclByb3RvY29sIHx8IChleHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Fib3J0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2F1dGhcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vYmxvYi9ibG9iLXBheWxvYWQtaW5wdXQtdHlwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY2hlY2tzdW1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY2xpZW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29ubmVjdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jcnlwdG9cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW5jb2RlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2VuZHBvaW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2VuZHBvaW50c1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ldmVudFN0cmVhbVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9odHRwXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xvZ2dlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9taWRkbGV3YXJlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhZ2luYXRpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcHJvZmlsZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXNwb25zZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXRyeVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJkZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaGFwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2lnbmF0dXJlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmVhbVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1jb21tb24tdHlwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItcGF5bG9hZC1pbnB1dC10eXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJlYW1pbmctcGF5bG9hZC9zdHJlYW1pbmctYmxvYi1wYXlsb2FkLW91dHB1dC10eXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2ZlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2Zvcm0vY2xpZW50LXBheWxvYWQtYmxvYi10eXBlLW5hcnJvd1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2Zvcm0vdHlwZS10cmFuc2Zvcm1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXJpXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vd2FpdGVyXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpZWxkID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xuY2xhc3MgRmllbGQge1xuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSwga2luZCA9IHR5cGVzXzEuRmllbGRQb3NpdGlvbi5IRUFERVIsIHZhbHVlcyA9IFtdIH0pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgfVxuICAgIGFkZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgc2V0KHZhbHVlcykge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgICB9XG4gICAgcmVtb3ZlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWx1ZSk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubWFwKCh2KSA9PiAodi5pbmNsdWRlcyhcIixcIikgfHwgdi5pbmNsdWRlcyhcIiBcIikgPyBgXCIke3Z9XCJgIDogdikpLmpvaW4oXCIsIFwiKTtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gICAgfVxufVxuZXhwb3J0cy5GaWVsZCA9IEZpZWxkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmllbGRzID0gdm9pZCAwO1xuY2xhc3MgRmllbGRzIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGZpZWxkcyA9IFtdLCBlbmNvZGluZyA9IFwidXRmLThcIiB9KSB7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IHt9O1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCh0aGlzLnNldEZpZWxkLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuICAgIHNldEZpZWxkKGZpZWxkKSB7XG4gICAgICAgIHRoaXMuZW50cmllc1tmaWVsZC5uYW1lLnRvTG93ZXJDYXNlKCldID0gZmllbGQ7XG4gICAgfVxuICAgIGdldEZpZWxkKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbiAgICByZW1vdmVGaWVsZChuYW1lKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVudHJpZXNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG4gICAgZ2V0QnlUeXBlKGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5lbnRyaWVzKS5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5raW5kID09PSBraW5kKTtcbiAgICB9XG59XG5leHBvcnRzLkZpZWxkcyA9IEZpZWxkcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwUmVxdWVzdCA9IHZvaWQgMDtcbmNsYXNzIEh0dHBSZXF1ZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIjtcbiAgICAgICAgdGhpcy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdG5hbWUgfHwgXCJsb2NhbGhvc3RcIjtcbiAgICAgICAgdGhpcy5wb3J0ID0gb3B0aW9ucy5wb3J0O1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSB8fCB7fTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICB0aGlzLmJvZHkgPSBvcHRpb25zLmJvZHk7XG4gICAgICAgIHRoaXMucHJvdG9jb2wgPSBvcHRpb25zLnByb3RvY29sXG4gICAgICAgICAgICA/IG9wdGlvbnMucHJvdG9jb2wuc2xpY2UoLTEpICE9PSBcIjpcIlxuICAgICAgICAgICAgICAgID8gYCR7b3B0aW9ucy5wcm90b2NvbH06YFxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5wcm90b2NvbFxuICAgICAgICAgICAgOiBcImh0dHBzOlwiO1xuICAgICAgICB0aGlzLnBhdGggPSBvcHRpb25zLnBhdGggPyAob3B0aW9ucy5wYXRoLmNoYXJBdCgwKSAhPT0gXCIvXCIgPyBgLyR7b3B0aW9ucy5wYXRofWAgOiBvcHRpb25zLnBhdGgpIDogXCIvXCI7XG4gICAgICAgIHRoaXMudXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZDtcbiAgICAgICAgdGhpcy5mcmFnbWVudCA9IG9wdGlvbnMuZnJhZ21lbnQ7XG4gICAgfVxuICAgIHN0YXRpYyBpc0luc3RhbmNlKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByZXEgPSByZXF1ZXN0O1xuICAgICAgICByZXR1cm4gKFwibWV0aG9kXCIgaW4gcmVxICYmXG4gICAgICAgICAgICBcInByb3RvY29sXCIgaW4gcmVxICYmXG4gICAgICAgICAgICBcImhvc3RuYW1lXCIgaW4gcmVxICYmXG4gICAgICAgICAgICBcInBhdGhcIiBpbiByZXEgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZXFbXCJxdWVyeVwiXSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlcVtcImhlYWRlcnNcIl0gPT09IFwib2JqZWN0XCIpO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IEh0dHBSZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMsXG4gICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNsb25lZC5xdWVyeSlcbiAgICAgICAgICAgIGNsb25lZC5xdWVyeSA9IGNsb25lUXVlcnkoY2xvbmVkLnF1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBSZXF1ZXN0ID0gSHR0cFJlcXVlc3Q7XG5mdW5jdGlvbiBjbG9uZVF1ZXJ5KHF1ZXJ5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGNhcnJ5LCBwYXJhbU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBxdWVyeVtwYXJhbU5hbWVdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY2FycnksXG4gICAgICAgICAgICBbcGFyYW1OYW1lXTogQXJyYXkuaXNBcnJheShwYXJhbSkgPyBbLi4ucGFyYW1dIDogcGFyYW0sXG4gICAgICAgIH07XG4gICAgfSwge30pO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cFJlc3BvbnNlID0gdm9pZCAwO1xuY2xhc3MgSHR0cFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IG9wdGlvbnMuc3RhdHVzQ29kZTtcbiAgICAgICAgdGhpcy5yZWFzb24gPSBvcHRpb25zLnJlYXNvbjtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICB0aGlzLmJvZHkgPSBvcHRpb25zLmJvZHk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0luc3RhbmNlKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlc3AgPSByZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXNwLnN0YXR1c0NvZGUgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHJlc3AuaGVhZGVycyA9PT0gXCJvYmplY3RcIjtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBSZXNwb25zZSA9IEh0dHBSZXNwb25zZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWRIb3N0bmFtZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzVmFsaWRIb3N0bmFtZShob3N0bmFtZSkge1xuICAgIGNvbnN0IGhvc3RQYXR0ZXJuID0gL15bYS16MC05XVthLXowLTlcXC5cXC1dKlthLXowLTldJC87XG4gICAgcmV0dXJuIGhvc3RQYXR0ZXJuLnRlc3QoaG9zdG5hbWUpO1xufVxuZXhwb3J0cy5pc1ZhbGlkSG9zdG5hbWUgPSBpc1ZhbGlkSG9zdG5hbWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9GaWVsZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9GaWVsZHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cEhhbmRsZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cFJlcXVlc3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cFJlc3BvbnNlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lzVmFsaWRIb3N0bmFtZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TU09PSURDU2VydmljZUV4Y2VwdGlvbiA9IGV4cG9ydHMuX19TZXJ2aWNlRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuY2xhc3MgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5TU09PSURDU2VydmljZUV4Y2VwdGlvbiA9IFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uID0gZXhwb3J0cy5VbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uID0gZXhwb3J0cy5TbG93RG93bkV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZFNjb3BlRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZEdyYW50RXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkQ2xpZW50RXhjZXB0aW9uID0gZXhwb3J0cy5JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiA9IGV4cG9ydHMuRXhwaXJlZFRva2VuRXhjZXB0aW9uID0gZXhwb3J0cy5BdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvbiA9IGV4cG9ydHMuQWNjZXNzRGVuaWVkRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3QgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuL1NTT09JRENTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY2xhc3MgQWNjZXNzRGVuaWVkRXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb25fMS5TU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkFjY2Vzc0RlbmllZEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQWNjZXNzRGVuaWVkRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufVxuZXhwb3J0cy5BY2Nlc3NEZW5pZWRFeGNlcHRpb24gPSBBY2Nlc3NEZW5pZWRFeGNlcHRpb247XG5jbGFzcyBBdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uXzEuU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJBdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24gPSBBdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvbjtcbmNsYXNzIEV4cGlyZWRUb2tlbkV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uXzEuU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkV4cGlyZWRUb2tlbkV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFeHBpcmVkVG9rZW5FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuRXhwaXJlZFRva2VuRXhjZXB0aW9uID0gRXhwaXJlZFRva2VuRXhjZXB0aW9uO1xuY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24gZXh0ZW5kcyBTU09PSURDU2VydmljZUV4Y2VwdGlvbl8xLlNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJzZXJ2ZXJcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJzZXJ2ZXJcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEludGVybmFsU2VydmVyRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLkludGVybmFsU2VydmVyRXhjZXB0aW9uID0gSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb247XG5jbGFzcyBJbnZhbGlkQ2xpZW50RXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb25fMS5TU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludmFsaWRDbGllbnRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRDbGllbnRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZENsaWVudEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufVxuZXhwb3J0cy5JbnZhbGlkQ2xpZW50RXhjZXB0aW9uID0gSW52YWxpZENsaWVudEV4Y2VwdGlvbjtcbmNsYXNzIEludmFsaWRHcmFudEV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uXzEuU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkR3JhbnRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRHcmFudEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkR3JhbnRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZEdyYW50RXhjZXB0aW9uID0gSW52YWxpZEdyYW50RXhjZXB0aW9uO1xuY2xhc3MgSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBTU09PSURDU2VydmljZUV4Y2VwdGlvbl8xLlNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEludmFsaWRSZXF1ZXN0RXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uID0gSW52YWxpZFJlcXVlc3RFeGNlcHRpb247XG5jbGFzcyBJbnZhbGlkU2NvcGVFeGNlcHRpb24gZXh0ZW5kcyBTU09PSURDU2VydmljZUV4Y2VwdGlvbl8xLlNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW52YWxpZFNjb3BlRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkU2NvcGVFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZFNjb3BlRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRTY29wZUV4Y2VwdGlvbiA9IEludmFsaWRTY29wZUV4Y2VwdGlvbjtcbmNsYXNzIFNsb3dEb3duRXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb25fMS5TU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlNsb3dEb3duRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTbG93RG93bkV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBTbG93RG93bkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufVxuZXhwb3J0cy5TbG93RG93bkV4Y2VwdGlvbiA9IFNsb3dEb3duRXhjZXB0aW9uO1xuY2xhc3MgVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb25fMS5TU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufVxuZXhwb3J0cy5VbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb24gPSBVbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb247XG5jbGFzcyBVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uXzEuU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb24gPSBVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvbjtcbmNsYXNzIEludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uXzEuU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkQ2xpZW50TWV0YWRhdGFFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkQ2xpZW50TWV0YWRhdGFFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uID0gSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVfU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZCA9IGV4cG9ydHMuZGVfUmVnaXN0ZXJDbGllbnRDb21tYW5kID0gZXhwb3J0cy5kZV9DcmVhdGVUb2tlbkNvbW1hbmQgPSBleHBvcnRzLnNlX1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgPSBleHBvcnRzLnNlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZCA9IGV4cG9ydHMuc2VfQ3JlYXRlVG9rZW5Db21tYW5kID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBTU09PSURDU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4uL21vZGVscy9TU09PSURDU2VydmljZUV4Y2VwdGlvblwiKTtcbmNvbnN0IHNlX0NyZWF0ZVRva2VuQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL3Rva2VuXCI7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoaW5wdXQsIHtcbiAgICAgICAgY2xpZW50SWQ6IFtdLFxuICAgICAgICBjbGllbnRTZWNyZXQ6IFtdLFxuICAgICAgICBjb2RlOiBbXSxcbiAgICAgICAgZGV2aWNlQ29kZTogW10sXG4gICAgICAgIGdyYW50VHlwZTogW10sXG4gICAgICAgIHJlZGlyZWN0VXJpOiBbXSxcbiAgICAgICAgcmVmcmVzaFRva2VuOiBbXSxcbiAgICAgICAgc2NvcGU6IChfKSA9PiAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShfKSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX0NyZWF0ZVRva2VuQ29tbWFuZCA9IHNlX0NyZWF0ZVRva2VuQ29tbWFuZDtcbmNvbnN0IHNlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL2NsaWVudC9yZWdpc3RlclwiO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGlucHV0LCB7XG4gICAgICAgIGNsaWVudE5hbWU6IFtdLFxuICAgICAgICBjbGllbnRUeXBlOiBbXSxcbiAgICAgICAgc2NvcGVzOiAoXykgPT4gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoXyksXG4gICAgfSkpO1xuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIGJvZHksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZV9SZWdpc3RlckNsaWVudENvbW1hbmQgPSBzZV9SZWdpc3RlckNsaWVudENvbW1hbmQ7XG5jb25zdCBzZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHtiYXNlUGF0aD8uZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGguc2xpY2UoMCwgLTEpIDogYmFzZVBhdGggfHwgXCJcIn1gICsgXCIvZGV2aWNlX2F1dGhvcml6YXRpb25cIjtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShpbnB1dCwge1xuICAgICAgICBjbGllbnRJZDogW10sXG4gICAgICAgIGNsaWVudFNlY3JldDogW10sXG4gICAgICAgIHN0YXJ0VXJsOiBbXSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgPSBzZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kO1xuY29uc3QgZGVfQ3JlYXRlVG9rZW5Db21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfQ3JlYXRlVG9rZW5Db21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE9iamVjdCkoYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSksIFwiYm9keVwiKTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGV4cGlyZXNJbjogc21pdGh5X2NsaWVudF8xLmV4cGVjdEludDMyLFxuICAgICAgICBpZFRva2VuOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgICAgICByZWZyZXNoVG9rZW46IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIHRva2VuVHlwZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX0NyZWF0ZVRva2VuQ29tbWFuZCA9IGRlX0NyZWF0ZVRva2VuQ29tbWFuZDtcbmNvbnN0IGRlX0NyZWF0ZVRva2VuQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkFjY2Vzc0RlbmllZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0FjY2Vzc0RlbmllZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfQWNjZXNzRGVuaWVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJBdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0F1dGhvcml6YXRpb25QZW5kaW5nRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9BdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9FeHBpcmVkVG9rZW5FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkQ2xpZW50RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZENsaWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZEdyYW50RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZEdyYW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkR3JhbnRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkU2NvcGVFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnZhbGlkU2NvcGVFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRTY29wZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiU2xvd0Rvd25FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNTbG93RG93bkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfU2xvd0Rvd25FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI1VuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI1Vuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9VbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfUmVnaXN0ZXJDbGllbnRDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfUmVnaXN0ZXJDbGllbnRDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE9iamVjdCkoYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSksIFwiYm9keVwiKTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbkVuZHBvaW50OiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgICAgICBjbGllbnRJZDogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgY2xpZW50SWRJc3N1ZWRBdDogc21pdGh5X2NsaWVudF8xLmV4cGVjdExvbmcsXG4gICAgICAgIGNsaWVudFNlY3JldDogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgY2xpZW50U2VjcmV0RXhwaXJlc0F0OiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0TG9uZyxcbiAgICAgICAgdG9rZW5FbmRwb2ludDogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZCA9IGRlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZDtcbmNvbnN0IGRlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkQ2xpZW50TWV0YWRhdGFFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnZhbGlkQ2xpZW50TWV0YWRhdGFFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRTY29wZUV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0ludmFsaWRTY29wZUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFNjb3BlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RPYmplY3QpKGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCkpLCBcImJvZHlcIik7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIGRldmljZUNvZGU6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGV4cGlyZXNJbjogc21pdGh5X2NsaWVudF8xLmV4cGVjdEludDMyLFxuICAgICAgICBpbnRlcnZhbDogc21pdGh5X2NsaWVudF8xLmV4cGVjdEludDMyLFxuICAgICAgICB1c2VyQ29kZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgdmVyaWZpY2F0aW9uVXJpOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgICAgICB2ZXJpZmljYXRpb25VcmlDb21wbGV0ZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgPSBkZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kO1xuY29uc3QgZGVfU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkQ2xpZW50RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZENsaWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlNsb3dEb3duRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjU2xvd0Rvd25FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Nsb3dEb3duRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNVbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1VuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgdGhyb3dEZWZhdWx0RXJyb3IgPSAoMCwgc21pdGh5X2NsaWVudF8xLndpdGhCYXNlRXhjZXB0aW9uKShTU09PSURDU2VydmljZUV4Y2VwdGlvbl8xLlNTT09JRENTZXJ2aWNlRXhjZXB0aW9uKTtcbmNvbnN0IGRlX0FjY2Vzc0RlbmllZEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBlcnJvcjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5BY2Nlc3NEZW5pZWRFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9BdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBlcnJvcjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5BdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBlcnJvcjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5FeHBpcmVkVG9rZW5FeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9JbnRlcm5hbFNlcnZlckV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBlcnJvcjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX0ludmFsaWRDbGllbnRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZENsaWVudEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX0ludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBlcnJvcjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JbnZhbGlkQ2xpZW50TWV0YWRhdGFFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9JbnZhbGlkR3JhbnRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZEdyYW50RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9JbnZhbGlkU2NvcGVFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfU2xvd0Rvd25FeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuU2xvd0Rvd25FeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9VbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gKG91dHB1dCkgPT4gKHtcbiAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgcmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0aWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16LXJlcXVlc3QtaWRcIl0sXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxufSk7XG5jb25zdCBjb2xsZWN0Qm9keSA9IChzdHJlYW1Cb2R5ID0gbmV3IFVpbnQ4QXJyYXkoKSwgY29udGV4dCkgPT4ge1xuICAgIGlmIChzdHJlYW1Cb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmVhbUJvZHkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dC5zdHJlYW1Db2xsZWN0b3Ioc3RyZWFtQm9keSkgfHwgUHJvbWlzZS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KCkpO1xufTtcbmNvbnN0IGNvbGxlY3RCb2R5U3RyaW5nID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5KHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGJvZHkpID0+IGNvbnRleHQudXRmOEVuY29kZXIoYm9keSkpO1xuY29uc3QgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdmFsdWUgIT09IFwiXCIgJiZcbiAgICAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5pbmNsdWRlcyhcImxlbmd0aFwiKSB8fCB2YWx1ZS5sZW5ndGggIT0gMCkgJiZcbiAgICAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5pbmNsdWRlcyhcInNpemVcIikgfHwgdmFsdWUuc2l6ZSAhPSAwKTtcbmNvbnN0IHBhcnNlQm9keSA9IChzdHJlYW1Cb2R5LCBjb250ZXh0KSA9PiBjb2xsZWN0Qm9keVN0cmluZyhzdHJlYW1Cb2R5LCBjb250ZXh0KS50aGVuKChlbmNvZGVkKSA9PiB7XG4gICAgaWYgKGVuY29kZWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGVuY29kZWQpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59KTtcbmNvbnN0IHBhcnNlRXJyb3JCb2R5ID0gYXN5bmMgKGVycm9yQm9keSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFyc2VCb2R5KGVycm9yQm9keSwgY29udGV4dCk7XG4gICAgdmFsdWUubWVzc2FnZSA9IHZhbHVlLm1lc3NhZ2UgPz8gdmFsdWUuTWVzc2FnZTtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuY29uc3QgbG9hZFJlc3RKc29uRXJyb3JDb2RlID0gKG91dHB1dCwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGZpbmRLZXkgPSAob2JqZWN0LCBrZXkpID0+IE9iamVjdC5rZXlzKG9iamVjdCkuZmluZCgoaykgPT4gay50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3Qgc2FuaXRpemVFcnJvckNvZGUgPSAocmF3VmFsdWUpID0+IHtcbiAgICAgICAgbGV0IGNsZWFuVmFsdWUgPSByYXdWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhblZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCIsXCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiLFwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiOlwiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIjpcIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIiNcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIjXCIpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGVhblZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgaGVhZGVyS2V5ID0gZmluZEtleShvdXRwdXQuaGVhZGVycywgXCJ4LWFtem4tZXJyb3J0eXBlXCIpO1xuICAgIGlmIChoZWFkZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUob3V0cHV0LmhlYWRlcnNbaGVhZGVyS2V5XSk7XG4gICAgfVxuICAgIGlmIChkYXRhLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUoZGF0YS5jb2RlKTtcbiAgICB9XG4gICAgaWYgKGRhdGFbXCJfX3R5cGVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUoZGF0YVtcIl9fdHlwZVwiXSk7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNyZWF0ZVRva2VuQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfcmVzdEpzb24xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19yZXN0SnNvbjFcIik7XG5jbGFzcyBDcmVhdGVUb2tlbkNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgQ3JlYXRlVG9rZW5Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPT0lEQ0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiQ3JlYXRlVG9rZW5Db21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5zZV9DcmVhdGVUb2tlbkNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLmRlX0NyZWF0ZVRva2VuQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkNyZWF0ZVRva2VuQ29tbWFuZCA9IENyZWF0ZVRva2VuQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZ2lzdGVyQ2xpZW50Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfcmVzdEpzb24xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19yZXN0SnNvbjFcIik7XG5jbGFzcyBSZWdpc3RlckNsaWVudENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgUmVnaXN0ZXJDbGllbnRDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPT0lEQ0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiUmVnaXN0ZXJDbGllbnRDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5zZV9SZWdpc3RlckNsaWVudENvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLmRlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLlJlZ2lzdGVyQ2xpZW50Q29tbWFuZCA9IFJlZ2lzdGVyQ2xpZW50Q29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX3Jlc3RKc29uMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xXCIpO1xuY2xhc3MgU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBTdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPT0lEQ0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLlN0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgPSBTdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPT0lEQyA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgQ3JlYXRlVG9rZW5Db21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9DcmVhdGVUb2tlbkNvbW1hbmRcIik7XG5jb25zdCBSZWdpc3RlckNsaWVudENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL1JlZ2lzdGVyQ2xpZW50Q29tbWFuZFwiKTtcbmNvbnN0IFN0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmRcIik7XG5jb25zdCBTU09PSURDQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9TU09PSURDQ2xpZW50XCIpO1xuY29uc3QgY29tbWFuZHMgPSB7XG4gICAgQ3JlYXRlVG9rZW5Db21tYW5kOiBDcmVhdGVUb2tlbkNvbW1hbmRfMS5DcmVhdGVUb2tlbkNvbW1hbmQsXG4gICAgUmVnaXN0ZXJDbGllbnRDb21tYW5kOiBSZWdpc3RlckNsaWVudENvbW1hbmRfMS5SZWdpc3RlckNsaWVudENvbW1hbmQsXG4gICAgU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZDogU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZF8xLlN0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQsXG59O1xuY2xhc3MgU1NPT0lEQyBleHRlbmRzIFNTT09JRENDbGllbnRfMS5TU09PSURDQ2xpZW50IHtcbn1cbmV4cG9ydHMuU1NPT0lEQyA9IFNTT09JREM7XG4oMCwgc21pdGh5X2NsaWVudF8xLmNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQpKGNvbW1hbmRzLCBTU09PSURDKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQ3JlYXRlVG9rZW5Db21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1JlZ2lzdGVyQ2xpZW50Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbW9kZWxzXzBcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU1NPT0lEQ0NsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TU09PSURDXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc1wiKSwgZXhwb3J0cyk7XG52YXIgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuL21vZGVscy9TU09PSURDU2VydmljZUV4Y2VwdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNTT09JRENTZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTU09PSURDU2VydmljZUV4Y2VwdGlvbl8xLlNTT09JRENTZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U3NvT2lkY0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9zc29fb2lkY18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zc28tb2lkY1wiKTtcbmNvbnN0IHNzb09pZGNDbGllbnRzSGFzaCA9IHt9O1xuY29uc3QgZ2V0U3NvT2lkY0NsaWVudCA9IChzc29SZWdpb24pID0+IHtcbiAgICBpZiAoc3NvT2lkY0NsaWVudHNIYXNoW3Nzb1JlZ2lvbl0pIHtcbiAgICAgICAgcmV0dXJuIHNzb09pZGNDbGllbnRzSGFzaFtzc29SZWdpb25dO1xuICAgIH1cbiAgICBjb25zdCBzc29PaWRjQ2xpZW50ID0gbmV3IGNsaWVudF9zc29fb2lkY18xLlNTT09JRENDbGllbnQoeyByZWdpb246IHNzb1JlZ2lvbiB9KTtcbiAgICBzc29PaWRjQ2xpZW50c0hhc2hbc3NvUmVnaW9uXSA9IHNzb09pZGNDbGllbnQ7XG4gICAgcmV0dXJuIHNzb09pZGNDbGllbnQ7XG59O1xuZXhwb3J0cy5nZXRTc29PaWRjQ2xpZW50ID0gZ2V0U3NvT2lkY0NsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE5ld1Nzb09pZGNUb2tlbiA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9zc29fb2lkY18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zc28tb2lkY1wiKTtcbmNvbnN0IGdldFNzb09pZGNDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2dldFNzb09pZGNDbGllbnRcIik7XG5jb25zdCBnZXROZXdTc29PaWRjVG9rZW4gPSAoc3NvVG9rZW4sIHNzb1JlZ2lvbikgPT4ge1xuICAgIGNvbnN0IHNzb09pZGNDbGllbnQgPSAoMCwgZ2V0U3NvT2lkY0NsaWVudF8xLmdldFNzb09pZGNDbGllbnQpKHNzb1JlZ2lvbik7XG4gICAgcmV0dXJuIHNzb09pZGNDbGllbnQuc2VuZChuZXcgY2xpZW50X3Nzb19vaWRjXzEuQ3JlYXRlVG9rZW5Db21tYW5kKHtcbiAgICAgICAgY2xpZW50SWQ6IHNzb1Rva2VuLmNsaWVudElkLFxuICAgICAgICBjbGllbnRTZWNyZXQ6IHNzb1Rva2VuLmNsaWVudFNlY3JldCxcbiAgICAgICAgcmVmcmVzaFRva2VuOiBzc29Ub2tlbi5yZWZyZXNoVG9rZW4sXG4gICAgICAgIGdyYW50VHlwZTogXCJyZWZyZXNoX3Rva2VuXCIsXG4gICAgfSkpO1xufTtcbmV4cG9ydHMuZ2V0TmV3U3NvT2lkY1Rva2VuID0gZ2V0TmV3U3NvT2lkY1Rva2VuO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVUb2tlbkV4cGlyeSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5FeHBpcnkgPSAodG9rZW4pID0+IHtcbiAgICBpZiAodG9rZW4uZXhwaXJhdGlvbiAmJiB0b2tlbi5leHBpcmF0aW9uLmdldFRpbWUoKSA8IERhdGUubm93KCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBUb2tlbiBpcyBleHBpcmVkLiAke2NvbnN0YW50c18xLlJFRlJFU0hfTUVTU0FHRX1gLCBmYWxzZSk7XG4gICAgfVxufTtcbmV4cG9ydHMudmFsaWRhdGVUb2tlbkV4cGlyeSA9IHZhbGlkYXRlVG9rZW5FeHBpcnk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVRva2VuS2V5ID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdmFsaWRhdGVUb2tlbktleSA9IChrZXksIHZhbHVlLCBmb3JSZWZyZXNoID0gZmFsc2UpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgVmFsdWUgbm90IHByZXNlbnQgZm9yICcke2tleX0nIGluIFNTTyBUb2tlbiR7Zm9yUmVmcmVzaCA/IFwiLiBDYW5ub3QgcmVmcmVzaFwiIDogXCJcIn0uICR7Y29uc3RhbnRzXzEuUkVGUkVTSF9NRVNTQUdFfWAsIGZhbHNlKTtcbiAgICB9XG59O1xuZXhwb3J0cy52YWxpZGF0ZVRva2VuS2V5ID0gdmFsaWRhdGVUb2tlbktleTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndyaXRlU1NPVG9rZW5Ub0ZpbGUgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCB7IHdyaXRlRmlsZSB9ID0gZnNfMS5wcm9taXNlcztcbmNvbnN0IHdyaXRlU1NPVG9rZW5Ub0ZpbGUgPSAoaWQsIHNzb1Rva2VuKSA9PiB7XG4gICAgY29uc3QgdG9rZW5GaWxlcGF0aCA9ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuZ2V0U1NPVG9rZW5GaWxlcGF0aCkoaWQpO1xuICAgIGNvbnN0IHRva2VuU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc3NvVG9rZW4sIG51bGwsIDIpO1xuICAgIHJldHVybiB3cml0ZUZpbGUodG9rZW5GaWxlcGF0aCwgdG9rZW5TdHJpbmcpO1xufTtcbmV4cG9ydHMud3JpdGVTU09Ub2tlblRvRmlsZSA9IHdyaXRlU1NPVG9rZW5Ub0ZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tU3NvID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBnZXROZXdTc29PaWRjVG9rZW5fMSA9IHJlcXVpcmUoXCIuL2dldE5ld1Nzb09pZGNUb2tlblwiKTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5FeHBpcnlfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlVG9rZW5FeHBpcnlcIik7XG5jb25zdCB2YWxpZGF0ZVRva2VuS2V5XzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVRva2VuS2V5XCIpO1xuY29uc3Qgd3JpdGVTU09Ub2tlblRvRmlsZV8xID0gcmVxdWlyZShcIi4vd3JpdGVTU09Ub2tlblRvRmlsZVwiKTtcbmNvbnN0IGxhc3RSZWZyZXNoQXR0ZW1wdFRpbWUgPSBuZXcgRGF0ZSgwKTtcbmNvbnN0IGZyb21Tc28gPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJvZmlsZXMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLnBhcnNlS25vd25GaWxlcykoaW5pdCk7XG4gICAgY29uc3QgcHJvZmlsZU5hbWUgPSAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KTtcbiAgICBjb25zdCBwcm9maWxlID0gcHJvZmlsZXNbcHJvZmlsZU5hbWVdO1xuICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJyR7cHJvZmlsZU5hbWV9JyBjb3VsZCBub3QgYmUgZm91bmQgaW4gc2hhcmVkIGNyZWRlbnRpYWxzIGZpbGUuYCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICghcHJvZmlsZVtcInNzb19zZXNzaW9uXCJdKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAnJHtwcm9maWxlTmFtZX0nIGlzIG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgJ3Nzb19zZXNzaW9uJy5gKTtcbiAgICB9XG4gICAgY29uc3Qgc3NvU2Vzc2lvbk5hbWUgPSBwcm9maWxlW1wic3NvX3Nlc3Npb25cIl07XG4gICAgY29uc3Qgc3NvU2Vzc2lvbnMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmxvYWRTc29TZXNzaW9uRGF0YSkoaW5pdCk7XG4gICAgY29uc3Qgc3NvU2Vzc2lvbiA9IHNzb1Nlc3Npb25zW3Nzb1Nlc3Npb25OYW1lXTtcbiAgICBpZiAoIXNzb1Nlc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBTc28gc2Vzc2lvbiAnJHtzc29TZXNzaW9uTmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBzaGFyZWQgY3JlZGVudGlhbHMgZmlsZS5gLCBmYWxzZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3NvU2Vzc2lvblJlcXVpcmVkS2V5IG9mIFtcInNzb19zdGFydF91cmxcIiwgXCJzc29fcmVnaW9uXCJdKSB7XG4gICAgICAgIGlmICghc3NvU2Vzc2lvbltzc29TZXNzaW9uUmVxdWlyZWRLZXldKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFNzbyBzZXNzaW9uICcke3Nzb1Nlc3Npb25OYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAnJHtzc29TZXNzaW9uUmVxdWlyZWRLZXl9Jy5gLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3NvU3RhcnRVcmwgPSBzc29TZXNzaW9uW1wic3NvX3N0YXJ0X3VybFwiXTtcbiAgICBjb25zdCBzc29SZWdpb24gPSBzc29TZXNzaW9uW1wic3NvX3JlZ2lvblwiXTtcbiAgICBsZXQgc3NvVG9rZW47XG4gICAgdHJ5IHtcbiAgICAgICAgc3NvVG9rZW4gPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFNTT1Rva2VuRnJvbUZpbGUpKHNzb1Nlc3Npb25OYW1lKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBUaGUgU1NPIHNlc3Npb24gdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHByb2ZpbGU9JHtwcm9maWxlTmFtZX0gd2FzIG5vdCBmb3VuZCBvciBpcyBpbnZhbGlkLiAke2NvbnN0YW50c18xLlJFRlJFU0hfTUVTU0FHRX1gLCBmYWxzZSk7XG4gICAgfVxuICAgICgwLCB2YWxpZGF0ZVRva2VuS2V5XzEudmFsaWRhdGVUb2tlbktleSkoXCJhY2Nlc3NUb2tlblwiLCBzc29Ub2tlbi5hY2Nlc3NUb2tlbik7XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcImV4cGlyZXNBdFwiLCBzc29Ub2tlbi5leHBpcmVzQXQpO1xuICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCB9ID0gc3NvVG9rZW47XG4gICAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IHsgdG9rZW46IGFjY2Vzc1Rva2VuLCBleHBpcmF0aW9uOiBuZXcgRGF0ZShleHBpcmVzQXQpIH07XG4gICAgaWYgKGV4aXN0aW5nVG9rZW4uZXhwaXJhdGlvbi5nZXRUaW1lKCkgLSBEYXRlLm5vdygpID4gY29uc3RhbnRzXzEuRVhQSVJFX1dJTkRPV19NUykge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdUb2tlbjtcbiAgICB9XG4gICAgaWYgKERhdGUubm93KCkgLSBsYXN0UmVmcmVzaEF0dGVtcHRUaW1lLmdldFRpbWUoKSA8IDMwICogMTAwMCkge1xuICAgICAgICAoMCwgdmFsaWRhdGVUb2tlbkV4cGlyeV8xLnZhbGlkYXRlVG9rZW5FeHBpcnkpKGV4aXN0aW5nVG9rZW4pO1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdUb2tlbjtcbiAgICB9XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcImNsaWVudElkXCIsIHNzb1Rva2VuLmNsaWVudElkLCB0cnVlKTtcbiAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwiY2xpZW50U2VjcmV0XCIsIHNzb1Rva2VuLmNsaWVudFNlY3JldCwgdHJ1ZSk7XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcInJlZnJlc2hUb2tlblwiLCBzc29Ub2tlbi5yZWZyZXNoVG9rZW4sIHRydWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGxhc3RSZWZyZXNoQXR0ZW1wdFRpbWUuc2V0VGltZShEYXRlLm5vdygpKTtcbiAgICAgICAgY29uc3QgbmV3U3NvT2lkY1Rva2VuID0gYXdhaXQgKDAsIGdldE5ld1Nzb09pZGNUb2tlbl8xLmdldE5ld1Nzb09pZGNUb2tlbikoc3NvVG9rZW4sIHNzb1JlZ2lvbik7XG4gICAgICAgICgwLCB2YWxpZGF0ZVRva2VuS2V5XzEudmFsaWRhdGVUb2tlbktleSkoXCJhY2Nlc3NUb2tlblwiLCBuZXdTc29PaWRjVG9rZW4uYWNjZXNzVG9rZW4pO1xuICAgICAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwiZXhwaXJlc0luXCIsIG5ld1Nzb09pZGNUb2tlbi5leHBpcmVzSW4pO1xuICAgICAgICBjb25zdCBuZXdUb2tlbkV4cGlyYXRpb24gPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgbmV3U3NvT2lkY1Rva2VuLmV4cGlyZXNJbiAqIDEwMDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIHdyaXRlU1NPVG9rZW5Ub0ZpbGVfMS53cml0ZVNTT1Rva2VuVG9GaWxlKShzc29TZXNzaW9uTmFtZSwge1xuICAgICAgICAgICAgICAgIC4uLnNzb1Rva2VuLFxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBuZXdTc29PaWRjVG9rZW4uYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBuZXdUb2tlbkV4cGlyYXRpb24udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW46IG5ld1Nzb09pZGNUb2tlbi5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IG5ld1Nzb09pZGNUb2tlbi5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIGV4cGlyYXRpb246IG5ld1Rva2VuRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICgwLCB2YWxpZGF0ZVRva2VuRXhwaXJ5XzEudmFsaWRhdGVUb2tlbkV4cGlyeSkoZXhpc3RpbmdUb2tlbik7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbn07XG5leHBvcnRzLmZyb21Tc28gPSBmcm9tU3NvO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVN0YXRpYyA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmcm9tU3RhdGljID0gKHsgdG9rZW4gfSkgPT4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghdG9rZW4gfHwgIXRva2VuLnRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgUGxlYXNlIHBhc3MgYSB2YWxpZCB0b2tlbiB0byBmcm9tU3RhdGljYCwgZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG59O1xuZXhwb3J0cy5mcm9tU3RhdGljID0gZnJvbVN0YXRpYztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vZGVQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmcm9tU3NvXzEgPSByZXF1aXJlKFwiLi9mcm9tU3NvXCIpO1xuY29uc3Qgbm9kZVByb3ZpZGVyID0gKGluaXQgPSB7fSkgPT4gKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEubWVtb2l6ZSkoKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEuY2hhaW4pKCgwLCBmcm9tU3NvXzEuZnJvbVNzbykoaW5pdCksIGFzeW5jICgpID0+IHtcbiAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoXCJDb3VsZCBub3QgbG9hZCB0b2tlbiBmcm9tIGFueSBwcm92aWRlcnNcIiwgZmFsc2UpO1xufSksICh0b2tlbikgPT4gdG9rZW4uZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRva2VuLmV4cGlyYXRpb24uZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA8IDMwMDAwMCwgKHRva2VuKSA9PiB0b2tlbi5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQpO1xuZXhwb3J0cy5ub2RlUHJvdmlkZXIgPSBub2RlUHJvdmlkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Tc29cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVN0YXRpY1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ub2RlUHJvdmlkZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVNTT0NyZWRlbnRpYWxzID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3Nzb18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zc29cIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3Qgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCB0b2tlbl9wcm92aWRlcnNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay90b2tlbi1wcm92aWRlcnNcIik7XG5jb25zdCBFWFBJUkVfV0lORE9XX01TID0gMTUgKiA2MCAqIDEwMDA7XG5jb25zdCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOID0gZmFsc2U7XG5jb25zdCByZXNvbHZlU1NPQ3JlZGVudGlhbHMgPSBhc3luYyAoeyBzc29TdGFydFVybCwgc3NvU2Vzc2lvbiwgc3NvQWNjb3VudElkLCBzc29SZWdpb24sIHNzb1JvbGVOYW1lLCBzc29DbGllbnQsIHByb2ZpbGUsIH0pID0+IHtcbiAgICBsZXQgdG9rZW47XG4gICAgY29uc3QgcmVmcmVzaE1lc3NhZ2UgPSBgVG8gcmVmcmVzaCB0aGlzIFNTTyBzZXNzaW9uIHJ1biBhd3Mgc3NvIGxvZ2luIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHJvZmlsZS5gO1xuICAgIGlmIChzc29TZXNzaW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBfdG9rZW4gPSBhd2FpdCAoMCwgdG9rZW5fcHJvdmlkZXJzXzEuZnJvbVNzbykoeyBwcm9maWxlIH0pKCk7XG4gICAgICAgICAgICB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogX3Rva2VuLnRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUoX3Rva2VuLmV4cGlyYXRpb24pLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoZS5tZXNzYWdlLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRva2VuID0gYXdhaXQgKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRTU09Ub2tlbkZyb21GaWxlKShzc29TdGFydFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgVGhlIFNTTyBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2ZpbGUgaXMgaW52YWxpZC4gJHtyZWZyZXNoTWVzc2FnZX1gLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3IERhdGUodG9rZW4uZXhwaXJlc0F0KS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIDw9IEVYUElSRV9XSU5ET1dfTVMpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBUaGUgU1NPIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvZmlsZSBoYXMgZXhwaXJlZC4gJHtyZWZyZXNoTWVzc2FnZX1gLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICB9XG4gICAgY29uc3QgeyBhY2Nlc3NUb2tlbiB9ID0gdG9rZW47XG4gICAgY29uc3Qgc3NvID0gc3NvQ2xpZW50IHx8IG5ldyBjbGllbnRfc3NvXzEuU1NPQ2xpZW50KHsgcmVnaW9uOiBzc29SZWdpb24gfSk7XG4gICAgbGV0IHNzb1Jlc3A7XG4gICAgdHJ5IHtcbiAgICAgICAgc3NvUmVzcCA9IGF3YWl0IHNzby5zZW5kKG5ldyBjbGllbnRfc3NvXzEuR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCh7XG4gICAgICAgICAgICBhY2NvdW50SWQ6IHNzb0FjY291bnRJZCxcbiAgICAgICAgICAgIHJvbGVOYW1lOiBzc29Sb2xlTmFtZSxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yLmZyb20oZSwgU0hPVUxEX0ZBSUxfQ1JFREVOVElBTF9DSEFJTik7XG4gICAgfVxuICAgIGNvbnN0IHsgcm9sZUNyZWRlbnRpYWxzOiB7IGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbiwgZXhwaXJhdGlvbiB9ID0ge30gfSA9IHNzb1Jlc3A7XG4gICAgaWYgKCFhY2Nlc3NLZXlJZCB8fCAhc2VjcmV0QWNjZXNzS2V5IHx8ICFzZXNzaW9uVG9rZW4gfHwgIWV4cGlyYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiU1NPIHJldHVybnMgYW4gaW52YWxpZCB0ZW1wb3JhcnkgY3JlZGVudGlhbC5cIiwgU0hPVUxEX0ZBSUxfQ1JFREVOVElBTF9DSEFJTik7XG4gICAgfVxuICAgIHJldHVybiB7IGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbiwgZXhwaXJhdGlvbjogbmV3IERhdGUoZXhwaXJhdGlvbikgfTtcbn07XG5leHBvcnRzLnJlc29sdmVTU09DcmVkZW50aWFscyA9IHJlc29sdmVTU09DcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlU3NvUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCB2YWxpZGF0ZVNzb1Byb2ZpbGUgPSAocHJvZmlsZSkgPT4ge1xuICAgIGNvbnN0IHsgc3NvX3N0YXJ0X3VybCwgc3NvX2FjY291bnRfaWQsIHNzb19yZWdpb24sIHNzb19yb2xlX25hbWUgfSA9IHByb2ZpbGU7XG4gICAgaWYgKCFzc29fc3RhcnRfdXJsIHx8ICFzc29fYWNjb3VudF9pZCB8fCAhc3NvX3JlZ2lvbiB8fCAhc3NvX3JvbGVfbmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgaXMgY29uZmlndXJlZCB3aXRoIGludmFsaWQgU1NPIGNyZWRlbnRpYWxzLiBSZXF1aXJlZCBwYXJhbWV0ZXJzIFwic3NvX2FjY291bnRfaWRcIiwgYCArXG4gICAgICAgICAgICBgXCJzc29fcmVnaW9uXCIsIFwic3NvX3JvbGVfbmFtZVwiLCBcInNzb19zdGFydF91cmxcIi4gR290ICR7T2JqZWN0LmtleXMocHJvZmlsZSkuam9pbihcIiwgXCIpfVxcblJlZmVyZW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvdXNlcmd1aWRlL2NsaS1jb25maWd1cmUtc3NvLmh0bWxgLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9maWxlO1xufTtcbmV4cG9ydHMudmFsaWRhdGVTc29Qcm9maWxlID0gdmFsaWRhdGVTc29Qcm9maWxlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVNTTyA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IGlzU3NvUHJvZmlsZV8xID0gcmVxdWlyZShcIi4vaXNTc29Qcm9maWxlXCIpO1xuY29uc3QgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlU1NPQ3JlZGVudGlhbHNcIik7XG5jb25zdCB2YWxpZGF0ZVNzb1Byb2ZpbGVfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlU3NvUHJvZmlsZVwiKTtcbmNvbnN0IGZyb21TU08gPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBzc29TdGFydFVybCwgc3NvQWNjb3VudElkLCBzc29SZWdpb24sIHNzb1JvbGVOYW1lLCBzc29DbGllbnQsIHNzb1Nlc3Npb24gfSA9IGluaXQ7XG4gICAgY29uc3QgcHJvZmlsZU5hbWUgPSAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KTtcbiAgICBpZiAoIXNzb1N0YXJ0VXJsICYmICFzc29BY2NvdW50SWQgJiYgIXNzb1JlZ2lvbiAmJiAhc3NvUm9sZU5hbWUgJiYgIXNzb1Nlc3Npb24pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZXMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLnBhcnNlS25vd25GaWxlcykoaW5pdCk7XG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgaXNTc29Qcm9maWxlXzEuaXNTc29Qcm9maWxlKShwcm9maWxlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGlzIG5vdCBjb25maWd1cmVkIHdpdGggU1NPIGNyZWRlbnRpYWxzLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9maWxlID09PSBudWxsIHx8IHByb2ZpbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2ZpbGUuc3NvX3Nlc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNzb1Nlc3Npb25zID0gYXdhaXQgKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5sb2FkU3NvU2Vzc2lvbkRhdGEpKGluaXQpO1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNzb1Nlc3Npb25zW3Byb2ZpbGUuc3NvX3Nlc3Npb25dO1xuICAgICAgICAgICAgY29uc3QgY29uZmxpY3RNc2cgPSBgIGNvbmZpZ3VyYXRpb25zIGluIHByb2ZpbGUgJHtwcm9maWxlTmFtZX0gYW5kIHNzby1zZXNzaW9uICR7cHJvZmlsZS5zc29fc2Vzc2lvbn1gO1xuICAgICAgICAgICAgaWYgKHNzb1JlZ2lvbiAmJiBzc29SZWdpb24gIT09IHNlc3Npb24uc3NvX3JlZ2lvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgQ29uZmxpY3RpbmcgU1NPIHJlZ2lvbmAgKyBjb25mbGljdE1zZywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNzb1N0YXJ0VXJsICYmIHNzb1N0YXJ0VXJsICE9PSBzZXNzaW9uLnNzb19zdGFydF91cmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYENvbmZsaWN0aW5nIFNTTyBzdGFydF91cmxgICsgY29uZmxpY3RNc2csIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2ZpbGUuc3NvX3JlZ2lvbiA9IHNlc3Npb24uc3NvX3JlZ2lvbjtcbiAgICAgICAgICAgIHByb2ZpbGUuc3NvX3N0YXJ0X3VybCA9IHNlc3Npb24uc3NvX3N0YXJ0X3VybDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNzb19zdGFydF91cmwsIHNzb19hY2NvdW50X2lkLCBzc29fcmVnaW9uLCBzc29fcm9sZV9uYW1lLCBzc29fc2Vzc2lvbiB9ID0gKDAsIHZhbGlkYXRlU3NvUHJvZmlsZV8xLnZhbGlkYXRlU3NvUHJvZmlsZSkocHJvZmlsZSk7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzXzEucmVzb2x2ZVNTT0NyZWRlbnRpYWxzKSh7XG4gICAgICAgICAgICBzc29TdGFydFVybDogc3NvX3N0YXJ0X3VybCxcbiAgICAgICAgICAgIHNzb1Nlc3Npb246IHNzb19zZXNzaW9uLFxuICAgICAgICAgICAgc3NvQWNjb3VudElkOiBzc29fYWNjb3VudF9pZCxcbiAgICAgICAgICAgIHNzb1JlZ2lvbjogc3NvX3JlZ2lvbixcbiAgICAgICAgICAgIHNzb1JvbGVOYW1lOiBzc29fcm9sZV9uYW1lLFxuICAgICAgICAgICAgc3NvQ2xpZW50OiBzc29DbGllbnQsXG4gICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzc29TdGFydFVybCB8fCAhc3NvQWNjb3VudElkIHx8ICFzc29SZWdpb24gfHwgIXNzb1JvbGVOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIkluY29tcGxldGUgY29uZmlndXJhdGlvbi4gVGhlIGZyb21TU08oKSBhcmd1bWVudCBoYXNoIG11c3QgaW5jbHVkZSBcIiArXG4gICAgICAgICAgICAnXCJzc29TdGFydFVybFwiLCBcInNzb0FjY291bnRJZFwiLCBcInNzb1JlZ2lvblwiLCBcInNzb1JvbGVOYW1lXCInKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzXzEucmVzb2x2ZVNTT0NyZWRlbnRpYWxzKSh7XG4gICAgICAgICAgICBzc29TdGFydFVybCxcbiAgICAgICAgICAgIHNzb1Nlc3Npb24sXG4gICAgICAgICAgICBzc29BY2NvdW50SWQsXG4gICAgICAgICAgICBzc29SZWdpb24sXG4gICAgICAgICAgICBzc29Sb2xlTmFtZSxcbiAgICAgICAgICAgIHNzb0NsaWVudCxcbiAgICAgICAgICAgIHByb2ZpbGU6IHByb2ZpbGVOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG59O1xuZXhwb3J0cy5mcm9tU1NPID0gZnJvbVNTTztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21TU09cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNTc29Qcm9maWxlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3ZhbGlkYXRlU3NvUHJvZmlsZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU3NvQ3JlZGVudGlhbHMgPSBleHBvcnRzLmlzU3NvUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfc3NvXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc29cIik7XG52YXIgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMiA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3NvUHJvZmlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMi5pc1Nzb1Byb2ZpbGU7IH0gfSk7XG5jb25zdCByZXNvbHZlU3NvQ3JlZGVudGlhbHMgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgc3NvX3N0YXJ0X3VybCwgc3NvX2FjY291bnRfaWQsIHNzb19zZXNzaW9uLCBzc29fcmVnaW9uLCBzc29fcm9sZV9uYW1lIH0gPSAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMS52YWxpZGF0ZVNzb1Byb2ZpbGUpKGRhdGEpO1xuICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMS5mcm9tU1NPKSh7XG4gICAgICAgIHNzb1N0YXJ0VXJsOiBzc29fc3RhcnRfdXJsLFxuICAgICAgICBzc29BY2NvdW50SWQ6IHNzb19hY2NvdW50X2lkLFxuICAgICAgICBzc29TZXNzaW9uOiBzc29fc2Vzc2lvbixcbiAgICAgICAgc3NvUmVnaW9uOiBzc29fcmVnaW9uLFxuICAgICAgICBzc29Sb2xlTmFtZTogc3NvX3JvbGVfbmFtZSxcbiAgICB9KSgpO1xufTtcbmV4cG9ydHMucmVzb2x2ZVNzb0NyZWRlbnRpYWxzID0gcmVzb2x2ZVNzb0NyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzID0gZXhwb3J0cy5pc1N0YXRpY0NyZWRzUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGlzU3RhdGljQ3JlZHNQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBhcmcuYXdzX2FjY2Vzc19rZXlfaWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgYXJnLmF3c19zZWNyZXRfYWNjZXNzX2tleSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFtcInVuZGVmaW5lZFwiLCBcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBhcmcuYXdzX3Nlc3Npb25fdG9rZW4pID4gLTE7XG5leHBvcnRzLmlzU3RhdGljQ3JlZHNQcm9maWxlID0gaXNTdGF0aWNDcmVkc1Byb2ZpbGU7XG5jb25zdCByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMgPSAocHJvZmlsZSkgPT4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICBhY2Nlc3NLZXlJZDogcHJvZmlsZS5hd3NfYWNjZXNzX2tleV9pZCxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6IHByb2ZpbGUuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgIHNlc3Npb25Ub2tlbjogcHJvZmlsZS5hd3Nfc2Vzc2lvbl90b2tlbixcbn0pO1xuZXhwb3J0cy5yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMgPSByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tV2ViVG9rZW4gPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgZnJvbVdlYlRva2VuID0gKGluaXQpID0+ICgpID0+IHtcbiAgICBjb25zdCB7IHJvbGVBcm4sIHJvbGVTZXNzaW9uTmFtZSwgd2ViSWRlbnRpdHlUb2tlbiwgcHJvdmlkZXJJZCwgcG9saWN5QXJucywgcG9saWN5LCBkdXJhdGlvblNlY29uZHMsIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5LCB9ID0gaW5pdDtcbiAgICBpZiAoIXJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5KSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUm9sZSBBcm4gJyR7cm9sZUFybn0nIG5lZWRzIHRvIGJlIGFzc3VtZWQgd2l0aCB3ZWIgaWRlbnRpdHksYCArXG4gICAgICAgICAgICBgIGJ1dCBubyByb2xlIGFzc3VtcHRpb24gY2FsbGJhY2sgd2FzIHByb3ZpZGVkLmAsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5KHtcbiAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiByb2xlU2Vzc2lvbk5hbWUgIT09IG51bGwgJiYgcm9sZVNlc3Npb25OYW1lICE9PSB2b2lkIDAgPyByb2xlU2Vzc2lvbk5hbWUgOiBgYXdzLXNkay1qcy1zZXNzaW9uLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICBXZWJJZGVudGl0eVRva2VuOiB3ZWJJZGVudGl0eVRva2VuLFxuICAgICAgICBQcm92aWRlcklkOiBwcm92aWRlcklkLFxuICAgICAgICBQb2xpY3lBcm5zOiBwb2xpY3lBcm5zLFxuICAgICAgICBQb2xpY3k6IHBvbGljeSxcbiAgICAgICAgRHVyYXRpb25TZWNvbmRzOiBkdXJhdGlvblNlY29uZHMsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5mcm9tV2ViVG9rZW4gPSBmcm9tV2ViVG9rZW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tVG9rZW5GaWxlID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBmcm9tV2ViVG9rZW5fMSA9IHJlcXVpcmUoXCIuL2Zyb21XZWJUb2tlblwiKTtcbmNvbnN0IEVOVl9UT0tFTl9GSUxFID0gXCJBV1NfV0VCX0lERU5USVRZX1RPS0VOX0ZJTEVcIjtcbmNvbnN0IEVOVl9ST0xFX0FSTiA9IFwiQVdTX1JPTEVfQVJOXCI7XG5jb25zdCBFTlZfUk9MRV9TRVNTSU9OX05BTUUgPSBcIkFXU19ST0xFX1NFU1NJT05fTkFNRVwiO1xuY29uc3QgZnJvbVRva2VuRmlsZSA9IChpbml0ID0ge30pID0+IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gcmVzb2x2ZVRva2VuRmlsZShpbml0KTtcbn07XG5leHBvcnRzLmZyb21Ub2tlbkZpbGUgPSBmcm9tVG9rZW5GaWxlO1xuY29uc3QgcmVzb2x2ZVRva2VuRmlsZSA9IChpbml0KSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgY29uc3Qgd2ViSWRlbnRpdHlUb2tlbkZpbGUgPSAoX2EgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQud2ViSWRlbnRpdHlUb2tlbkZpbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHByb2Nlc3MuZW52W0VOVl9UT0tFTl9GSUxFXTtcbiAgICBjb25zdCByb2xlQXJuID0gKF9iID0gaW5pdCA9PT0gbnVsbCB8fCBpbml0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0LnJvbGVBcm4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuZW52W0VOVl9ST0xFX0FSTl07XG4gICAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gKF9jID0gaW5pdCA9PT0gbnVsbCB8fCBpbml0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0LnJvbGVTZXNzaW9uTmFtZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogcHJvY2Vzcy5lbnZbRU5WX1JPTEVfU0VTU0lPTl9OQU1FXTtcbiAgICBpZiAoIXdlYklkZW50aXR5VG9rZW5GaWxlIHx8ICFyb2xlQXJuKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIldlYiBpZGVudGl0eSBjb25maWd1cmF0aW9uIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZnJvbVdlYlRva2VuXzEuZnJvbVdlYlRva2VuKSh7XG4gICAgICAgIC4uLmluaXQsXG4gICAgICAgIHdlYklkZW50aXR5VG9rZW46ICgwLCBmc18xLnJlYWRGaWxlU3luYykod2ViSWRlbnRpdHlUb2tlbkZpbGUsIHsgZW5jb2Rpbmc6IFwiYXNjaWlcIiB9KSxcbiAgICAgICAgcm9sZUFybixcbiAgICAgICAgcm9sZVNlc3Npb25OYW1lLFxuICAgIH0pKCk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tVG9rZW5GaWxlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21XZWJUb2tlblwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFscyA9IGV4cG9ydHMuaXNXZWJJZGVudGl0eVByb2ZpbGUgPSB2b2lkIDA7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5XCIpO1xuY29uc3QgaXNXZWJJZGVudGl0eVByb2ZpbGUgPSAoYXJnKSA9PiBCb29sZWFuKGFyZykgJiZcbiAgICB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIGFyZy53ZWJfaWRlbnRpdHlfdG9rZW5fZmlsZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiBhcmcucm9sZV9hcm4gPT09IFwic3RyaW5nXCIgJiZcbiAgICBbXCJ1bmRlZmluZWRcIiwgXCJzdHJpbmdcIl0uaW5kZXhPZih0eXBlb2YgYXJnLnJvbGVfc2Vzc2lvbl9uYW1lKSA+IC0xO1xuZXhwb3J0cy5pc1dlYklkZW50aXR5UHJvZmlsZSA9IGlzV2ViSWRlbnRpdHlQcm9maWxlO1xuY29uc3QgcmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHMgPSBhc3luYyAocHJvZmlsZSwgb3B0aW9ucykgPT4gKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfd2ViX2lkZW50aXR5XzEuZnJvbVRva2VuRmlsZSkoe1xuICAgIHdlYklkZW50aXR5VG9rZW5GaWxlOiBwcm9maWxlLndlYl9pZGVudGl0eV90b2tlbl9maWxlLFxuICAgIHJvbGVBcm46IHByb2ZpbGUucm9sZV9hcm4sXG4gICAgcm9sZVNlc3Npb25OYW1lOiBwcm9maWxlLnJvbGVfc2Vzc2lvbl9uYW1lLFxuICAgIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5OiBvcHRpb25zLnJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5LFxufSkoKTtcbmV4cG9ydHMucmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHMgPSByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVQcm9maWxlRGF0YSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFsc1wiKTtcbmNvbnN0IHJlc29sdmVTc29DcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVNzb0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlUHJvZmlsZURhdGEgPSBhc3luYyAocHJvZmlsZU5hbWUsIHByb2ZpbGVzLCBvcHRpb25zLCB2aXNpdGVkUHJvZmlsZXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgaWYgKE9iamVjdC5rZXlzKHZpc2l0ZWRQcm9maWxlcykubGVuZ3RoID4gMCAmJiAoMCwgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEuaXNTdGF0aWNDcmVkc1Byb2ZpbGUpKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEucmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzKShkYXRhKTtcbiAgICB9XG4gICAgaWYgKCgwLCByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXzEuaXNBc3N1bWVSb2xlUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXzEucmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscykocHJvZmlsZU5hbWUsIHByb2ZpbGVzLCBvcHRpb25zLCB2aXNpdGVkUHJvZmlsZXMpO1xuICAgIH1cbiAgICBpZiAoKDAsIHJlc29sdmVTdGF0aWNDcmVkZW50aWFsc18xLmlzU3RhdGljQ3JlZHNQcm9maWxlKShkYXRhKSkge1xuICAgICAgICByZXR1cm4gKDAsIHJlc29sdmVTdGF0aWNDcmVkZW50aWFsc18xLnJlc29sdmVTdGF0aWNDcmVkZW50aWFscykoZGF0YSk7XG4gICAgfVxuICAgIGlmICgoMCwgcmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHNfMS5pc1dlYklkZW50aXR5UHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFsc18xLnJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzKShkYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCgwLCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEuaXNQcm9jZXNzUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEucmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscykob3B0aW9ucywgcHJvZmlsZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoKDAsIHJlc29sdmVTc29DcmVkZW50aWFsc18xLmlzU3NvUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlU3NvQ3JlZGVudGlhbHNfMS5yZXNvbHZlU3NvQ3JlZGVudGlhbHMpKGRhdGEpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gY291bGQgbm90IGJlIGZvdW5kIG9yIHBhcnNlZCBpbiBzaGFyZWQgY3JlZGVudGlhbHMgZmlsZS5gKTtcbn07XG5leHBvcnRzLnJlc29sdmVQcm9maWxlRGF0YSA9IHJlc29sdmVQcm9maWxlRGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21JbmkgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IHJlc29sdmVQcm9maWxlRGF0YV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVByb2ZpbGVEYXRhXCIpO1xuY29uc3QgZnJvbUluaSA9IChpbml0ID0ge30pID0+IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEucGFyc2VLbm93bkZpbGVzKShpbml0KTtcbiAgICByZXR1cm4gKDAsIHJlc29sdmVQcm9maWxlRGF0YV8xLnJlc29sdmVQcm9maWxlRGF0YSkoKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRQcm9maWxlTmFtZSkoaW5pdCksIHByb2ZpbGVzLCBpbml0KTtcbn07XG5leHBvcnRzLmZyb21JbmkgPSBmcm9tSW5pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tSW5pXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlbW90ZVByb3ZpZGVyID0gZXhwb3J0cy5FTlZfSU1EU19ESVNBQkxFRCA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kc1wiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5leHBvcnRzLkVOVl9JTURTX0RJU0FCTEVEID0gXCJBV1NfRUMyX01FVEFEQVRBX0RJU0FCTEVEXCI7XG5jb25zdCByZW1vdGVQcm92aWRlciA9IChpbml0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52W2NyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xLkVOVl9DTURTX1JFTEFUSVZFX1VSSV0gfHwgcHJvY2Vzcy5lbnZbY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuRU5WX0NNRFNfRlVMTF9VUkldKSB7XG4gICAgICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUNvbnRhaW5lck1ldGFkYXRhKShpbml0KTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX0lNRFNfRElTQUJMRURdKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJFQzIgSW5zdGFuY2UgTWV0YWRhdGEgU2VydmljZSBhY2Nlc3MgZGlzYWJsZWRcIik7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUluc3RhbmNlTWV0YWRhdGEpKGluaXQpO1xufTtcbmV4cG9ydHMucmVtb3RlUHJvdmlkZXIgPSByZW1vdGVQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnZcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX2luaV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9wcm9jZXNzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzb1wiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfd2ViX2lkZW50aXR5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHlcIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3Qgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCByZW1vdGVQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vcmVtb3RlUHJvdmlkZXJcIik7XG5jb25zdCBkZWZhdWx0UHJvdmlkZXIgPSAoaW5pdCA9IHt9KSA9PiAoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5tZW1vaXplKSgoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5jaGFpbikoLi4uKGluaXQucHJvZmlsZSB8fCBwcm9jZXNzLmVudltzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuRU5WX1BST0ZJTEVdID8gW10gOiBbKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEuZnJvbUVudikoKV0pLCAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMS5mcm9tU1NPKShpbml0KSwgKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfaW5pXzEuZnJvbUluaSkoaW5pdCksICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Byb2Nlc3NfMS5mcm9tUHJvY2VzcykoaW5pdCksICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xLmZyb21Ub2tlbkZpbGUpKGluaXQpLCAoMCwgcmVtb3RlUHJvdmlkZXJfMS5yZW1vdGVQcm92aWRlcikoaW5pdCksIGFzeW5jICgpID0+IHtcbiAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJDb3VsZCBub3QgbG9hZCBjcmVkZW50aWFscyBmcm9tIGFueSBwcm92aWRlcnNcIiwgZmFsc2UpO1xufSksIChjcmVkZW50aWFscykgPT4gY3JlZGVudGlhbHMuZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIGNyZWRlbnRpYWxzLmV4cGlyYXRpb24uZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA8IDMwMDAwMCwgKGNyZWRlbnRpYWxzKSA9PiBjcmVkZW50aWFscy5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQpO1xuZXhwb3J0cy5kZWZhdWx0UHJvdmlkZXIgPSBkZWZhdWx0UHJvdmlkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2RlZmF1bHRQcm92aWRlclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ydWxlU2V0ID0gdm9pZCAwO1xuY29uc3QgRiA9IFwicmVxdWlyZWRcIiwgRyA9IFwidHlwZVwiLCBIID0gXCJmblwiLCBJID0gXCJhcmd2XCIsIEogPSBcInJlZlwiO1xuY29uc3QgYSA9IGZhbHNlLCBiID0gdHJ1ZSwgYyA9IFwiYm9vbGVhbkVxdWFsc1wiLCBkID0gXCJ0cmVlXCIsIGUgPSBcInN0cmluZ0VxdWFsc1wiLCBmID0gXCJzaWd2NFwiLCBnID0gXCJzdHNcIiwgaCA9IFwidXMtZWFzdC0xXCIsIGkgPSBcImVuZHBvaW50XCIsIGogPSBcImh0dHBzOi8vc3RzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBrID0gXCJlcnJvclwiLCBsID0gXCJnZXRBdHRyXCIsIG0gPSB7IFtGXTogZmFsc2UsIFtHXTogXCJTdHJpbmdcIiB9LCBuID0geyBbRl06IHRydWUsIFwiZGVmYXVsdFwiOiBmYWxzZSwgW0ddOiBcIkJvb2xlYW5cIiB9LCBvID0geyBbSl06IFwiRW5kcG9pbnRcIiB9LCBwID0geyBbSF06IFwiaXNTZXRcIiwgW0ldOiBbeyBbSl06IFwiUmVnaW9uXCIgfV0gfSwgcSA9IHsgW0pdOiBcIlJlZ2lvblwiIH0sIHIgPSB7IFtIXTogXCJhd3MucGFydGl0aW9uXCIsIFtJXTogW3FdLCBcImFzc2lnblwiOiBcIlBhcnRpdGlvblJlc3VsdFwiIH0sIHMgPSB7IFtKXTogXCJVc2VGSVBTXCIgfSwgdCA9IHsgW0pdOiBcIlVzZUR1YWxTdGFja1wiIH0sIHUgPSB7IFwidXJsXCI6IFwiaHR0cHM6Ly9zdHMuYW1hem9uYXdzLmNvbVwiLCBcInByb3BlcnRpZXNcIjogeyBcImF1dGhTY2hlbWVzXCI6IFt7IFwibmFtZVwiOiBmLCBcInNpZ25pbmdOYW1lXCI6IGcsIFwic2lnbmluZ1JlZ2lvblwiOiBoIH1dIH0sIFwiaGVhZGVyc1wiOiB7fSB9LCB2ID0ge30sIHcgPSB7IFwiY29uZGl0aW9uc1wiOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiYXdzLWdsb2JhbFwiXSB9XSwgW2ldOiB1LCBbR106IGkgfSwgeCA9IHsgW0hdOiBjLCBbSV06IFtzLCB0cnVlXSB9LCB5ID0geyBbSF06IGMsIFtJXTogW3QsIHRydWVdIH0sIHogPSB7IFtIXTogYywgW0ldOiBbdHJ1ZSwgeyBbSF06IGwsIFtJXTogW3sgW0pdOiBcIlBhcnRpdGlvblJlc3VsdFwiIH0sIFwic3VwcG9ydHNGSVBTXCJdIH1dIH0sIEEgPSB7IFtKXTogXCJQYXJ0aXRpb25SZXN1bHRcIiB9LCBCID0geyBbSF06IGMsIFtJXTogW3RydWUsIHsgW0hdOiBsLCBbSV06IFtBLCBcInN1cHBvcnRzRHVhbFN0YWNrXCJdIH1dIH0sIEMgPSBbeyBbSF06IFwiaXNTZXRcIiwgW0ldOiBbb10gfV0sIEQgPSBbeF0sIEUgPSBbeV07XG5jb25zdCBfZGF0YSA9IHsgdmVyc2lvbjogXCIxLjBcIiwgcGFyYW1ldGVyczogeyBSZWdpb246IG0sIFVzZUR1YWxTdGFjazogbiwgVXNlRklQUzogbiwgRW5kcG9pbnQ6IG0sIFVzZUdsb2JhbEVuZHBvaW50OiBuIH0sIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbSF06IGMsIFtJXTogW3sgW0pdOiBcIlVzZUdsb2JhbEVuZHBvaW50XCIgfSwgYl0gfSwgeyBbSF06IFwibm90XCIsIFtJXTogQyB9LCBwLCByLCB7IFtIXTogYywgW0ldOiBbcywgYV0gfSwgeyBbSF06IGMsIFtJXTogW3QsIGFdIH1dLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiYXAtbm9ydGhlYXN0LTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiYXAtc291dGgtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJhcC1zb3V0aGVhc3QtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJhcC1zb3V0aGVhc3QtMlwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB3LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJjYS1jZW50cmFsLTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiZXUtY2VudHJhbC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImV1LW5vcnRoLTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiZXUtd2VzdC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImV1LXdlc3QtMlwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJldS13ZXN0LTNcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwic2EtZWFzdC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBoXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJ1cy1lYXN0LTJcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwidXMtd2VzdC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcInVzLXdlc3QtMlwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGVuZHBvaW50OiB7IHVybDogaiwgcHJvcGVydGllczogeyBhdXRoU2NoZW1lczogW3sgbmFtZTogZiwgc2lnbmluZ05hbWU6IGcsIHNpZ25pbmdSZWdpb246IFwie1JlZ2lvbn1cIiB9XSB9LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9XSB9LCB7IGNvbmRpdGlvbnM6IEMsIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IEQsIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIFtHXTogayB9LCB7IFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IEUsIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWRcIiwgW0ddOiBrIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBvLCBwcm9wZXJ0aWVzOiB2LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9XSB9XSB9LCB7IFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtwXSwgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3JdLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeCwgeV0sIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt6LCBCXSwgW0ddOiBkLCBydWxlczogW3sgW0ddOiBkLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vc3RzLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IHYsIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH1dIH1dIH0sIHsgZXJyb3I6IFwiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBlbmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBvbmUgb3IgYm90aFwiLCBbR106IGsgfV0gfSwgeyBjb25kaXRpb25zOiBELCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbel0sIFtHXTogZCwgcnVsZXM6IFt7IFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbXCJhd3MtdXMtZ292XCIsIHsgW0hdOiBsLCBbSV06IFtBLCBcIm5hbWVcIl0gfV0gfV0sIGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3N0cy57UmVnaW9ufS5hbWF6b25hd3MuY29tXCIsIHByb3BlcnRpZXM6IHYsIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vc3RzLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IHYsIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH1dIH1dIH0sIHsgZXJyb3I6IFwiRklQUyBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IEZJUFNcIiwgW0ddOiBrIH1dIH0sIHsgY29uZGl0aW9uczogRSwgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW0JdLCBbR106IGQsIHJ1bGVzOiBbeyBbR106IGQsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9zdHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IHYsIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH1dIH1dIH0sIHsgZXJyb3I6IFwiRHVhbFN0YWNrIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRHVhbFN0YWNrXCIsIFtHXTogayB9XSB9LCB7IFtHXTogZCwgcnVsZXM6IFt3LCB7IGVuZHBvaW50OiB7IHVybDogaiwgcHJvcGVydGllczogdiwgaGVhZGVyczogdiB9LCBbR106IGkgfV0gfV0gfV0gfSwgeyBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IE1pc3NpbmcgUmVnaW9uXCIsIFtHXTogayB9XSB9XSB9O1xuZXhwb3J0cy5ydWxlU2V0ID0gX2RhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfZW5kcG9pbnRzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHNcIik7XG5jb25zdCBydWxlc2V0XzEgPSByZXF1aXJlKFwiLi9ydWxlc2V0XCIpO1xuY29uc3QgZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSAoZW5kcG9pbnRQYXJhbXMsIGNvbnRleHQgPSB7fSkgPT4ge1xuICAgIHJldHVybiAoMCwgdXRpbF9lbmRwb2ludHNfMS5yZXNvbHZlRW5kcG9pbnQpKHJ1bGVzZXRfMS5ydWxlU2V0LCB7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zOiBlbmRwb2ludFBhcmFtcyxcbiAgICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlcixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1cmxfcGFyc2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXJsLXBhcnNlclwiKTtcbmNvbnN0IHV0aWxfYmFzZTY0XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1iYXNlNjRcIik7XG5jb25zdCB1dGlsX3V0ZjhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXV0ZjhcIik7XG5jb25zdCBlbmRwb2ludFJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyXCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+ICh7XG4gICAgYXBpVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgYmFzZTY0RGVjb2RlcjogY29uZmlnPy5iYXNlNjREZWNvZGVyID8/IHV0aWxfYmFzZTY0XzEuZnJvbUJhc2U2NCxcbiAgICBiYXNlNjRFbmNvZGVyOiBjb25maWc/LmJhc2U2NEVuY29kZXIgPz8gdXRpbF9iYXNlNjRfMS50b0Jhc2U2NCxcbiAgICBkaXNhYmxlSG9zdFByZWZpeDogY29uZmlnPy5kaXNhYmxlSG9zdFByZWZpeCA/PyBmYWxzZSxcbiAgICBlbmRwb2ludFByb3ZpZGVyOiBjb25maWc/LmVuZHBvaW50UHJvdmlkZXIgPz8gZW5kcG9pbnRSZXNvbHZlcl8xLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyLFxuICAgIGxvZ2dlcjogY29uZmlnPy5sb2dnZXIgPz8gbmV3IHNtaXRoeV9jbGllbnRfMS5Ob09wTG9nZ2VyKCksXG4gICAgc2VydmljZUlkOiBjb25maWc/LnNlcnZpY2VJZCA/PyBcIlNUU1wiLFxuICAgIHVybFBhcnNlcjogY29uZmlnPy51cmxQYXJzZXIgPz8gdXJsX3BhcnNlcl8xLnBhcnNlVXJsLFxuICAgIHV0ZjhEZWNvZGVyOiBjb25maWc/LnV0ZjhEZWNvZGVyID8/IHV0aWxfdXRmOF8xLmZyb21VdGY4LFxuICAgIHV0ZjhFbmNvZGVyOiBjb25maWc/LnV0ZjhFbmNvZGVyID8/IHV0aWxfdXRmOF8xLnRvVXRmOCxcbn0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gZ2V0UnVudGltZUNvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgcGFja2FnZV9qc29uXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpKTtcbmNvbnN0IGRlZmF1bHRTdHNSb2xlQXNzdW1lcnNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRTdHNSb2xlQXNzdW1lcnNcIik7XG5jb25zdCBjb25maWdfcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLW5vZGVcIik7XG5jb25zdCBoYXNoX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9oYXNoLW5vZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbm9kZS1jb25maWctcHJvdmlkZXJcIik7XG5jb25zdCBub2RlX2h0dHBfaGFuZGxlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL25vZGUtaHR0cC1oYW5kbGVyXCIpO1xuY29uc3QgdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1ib2R5LWxlbmd0aC1ub2RlXCIpO1xuY29uc3QgdXRpbF9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtcmV0cnlcIik7XG5jb25zdCB1dGlsX3VzZXJfYWdlbnRfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlXCIpO1xuY29uc3QgcnVudGltZUNvbmZpZ19zaGFyZWRfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWcuc2hhcmVkXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1dGlsX2RlZmF1bHRzX21vZGVfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8yID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBnZXRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgICgwLCBzbWl0aHlfY2xpZW50XzIuZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbikocHJvY2Vzcy52ZXJzaW9uKTtcbiAgICBjb25zdCBkZWZhdWx0c01vZGUgPSAoMCwgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMS5yZXNvbHZlRGVmYXVsdHNNb2RlQ29uZmlnKShjb25maWcpO1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWdQcm92aWRlciA9ICgpID0+IGRlZmF1bHRzTW9kZSgpLnRoZW4oc21pdGh5X2NsaWVudF8xLmxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGUpO1xuICAgIGNvbnN0IGNsaWVudFNoYXJlZFZhbHVlcyA9ICgwLCBydW50aW1lQ29uZmlnX3NoYXJlZF8xLmdldFJ1bnRpbWVDb25maWcpKGNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY2xpZW50U2hhcmVkVmFsdWVzLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHJ1bnRpbWU6IFwibm9kZVwiLFxuICAgICAgICBkZWZhdWx0c01vZGUsXG4gICAgICAgIGJvZHlMZW5ndGhDaGVja2VyOiBjb25maWc/LmJvZHlMZW5ndGhDaGVja2VyID8/IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xLmNhbGN1bGF0ZUJvZHlMZW5ndGgsXG4gICAgICAgIGNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXI6IGNvbmZpZz8uY3JlZGVudGlhbERlZmF1bHRQcm92aWRlciA/PyAoMCwgZGVmYXVsdFN0c1JvbGVBc3N1bWVyc18xLmRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcikoY3JlZGVudGlhbF9wcm92aWRlcl9ub2RlXzEuZGVmYXVsdFByb3ZpZGVyKSxcbiAgICAgICAgZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyOiBjb25maWc/LmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlciA/P1xuICAgICAgICAgICAgKDAsIHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEuZGVmYXVsdFVzZXJBZ2VudCkoeyBzZXJ2aWNlSWQ6IGNsaWVudFNoYXJlZFZhbHVlcy5zZXJ2aWNlSWQsIGNsaWVudFZlcnNpb246IHBhY2thZ2VfanNvbl8xLmRlZmF1bHQudmVyc2lvbiB9KSxcbiAgICAgICAgbWF4QXR0ZW1wdHM6IGNvbmZpZz8ubWF4QXR0ZW1wdHMgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykobWlkZGxld2FyZV9yZXRyeV8xLk5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMpLFxuICAgICAgICByZWdpb246IGNvbmZpZz8ucmVnaW9uID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TLCBjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1JFR0lPTl9DT05GSUdfRklMRV9PUFRJT05TKSxcbiAgICAgICAgcmVxdWVzdEhhbmRsZXI6IGNvbmZpZz8ucmVxdWVzdEhhbmRsZXIgPz8gbmV3IG5vZGVfaHR0cF9oYW5kbGVyXzEuTm9kZUh0dHBIYW5kbGVyKGRlZmF1bHRDb25maWdQcm92aWRlciksXG4gICAgICAgIHJldHJ5TW9kZTogY29uZmlnPy5yZXRyeU1vZGUgPz9cbiAgICAgICAgICAgICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgICAgICAgICAuLi5taWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFzeW5jICgpID0+IChhd2FpdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIoKSkucmV0cnlNb2RlIHx8IHV0aWxfcmV0cnlfMS5ERUZBVUxUX1JFVFJZX01PREUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgc2hhMjU2OiBjb25maWc/LnNoYTI1NiA/PyBoYXNoX25vZGVfMS5IYXNoLmJpbmQobnVsbCwgXCJzaGEyNTZcIiksXG4gICAgICAgIHN0cmVhbUNvbGxlY3RvcjogY29uZmlnPy5zdHJlYW1Db2xsZWN0b3IgPz8gbm9kZV9odHRwX2hhbmRsZXJfMS5zdHJlYW1Db2xsZWN0b3IsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBjb25maWc/LnVzZUR1YWxzdGFja0VuZHBvaW50ID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfVVNFX0RVQUxTVEFDS19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogY29uZmlnPy51c2VGaXBzRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1RTQ2xpZW50ID0gZXhwb3J0cy5fX0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb25cIik7XG5jb25zdCBtaWRkbGV3YXJlX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2RrX3N0c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2RrLXN0c1wiKTtcbmNvbnN0IG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19DbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5DbGllbnQ7IH0gfSk7XG5jb25zdCBFbmRwb2ludFBhcmFtZXRlcnNfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVyc1wiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWdcIik7XG5jbGFzcyBTVFNDbGllbnQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMCA9ICgwLCBydW50aW1lQ29uZmlnXzEuZ2V0UnVudGltZUNvbmZpZykoY29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMSA9ICgwLCBFbmRwb2ludFBhcmFtZXRlcnNfMS5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzKShfY29uZmlnXzApO1xuICAgICAgICBjb25zdCBfY29uZmlnXzIgPSAoMCwgY29uZmlnX3Jlc29sdmVyXzEucmVzb2x2ZVJlZ2lvbkNvbmZpZykoX2NvbmZpZ18xKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18zID0gKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5yZXNvbHZlRW5kcG9pbnRDb25maWcpKF9jb25maWdfMik7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNCA9ICgwLCBtaWRkbGV3YXJlX3JldHJ5XzEucmVzb2x2ZVJldHJ5Q29uZmlnKShfY29uZmlnXzMpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzUgPSAoMCwgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xLnJlc29sdmVIb3N0SGVhZGVyQ29uZmlnKShfY29uZmlnXzQpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzYgPSAoMCwgbWlkZGxld2FyZV9zZGtfc3RzXzEucmVzb2x2ZVN0c0F1dGhDb25maWcpKF9jb25maWdfNSwgeyBzdHNDbGllbnRDdG9yOiBTVFNDbGllbnQgfSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNyA9ICgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5yZXNvbHZlVXNlckFnZW50Q29uZmlnKShfY29uZmlnXzYpO1xuICAgICAgICBzdXBlcihfY29uZmlnXzcpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IF9jb25maWdfNztcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JldHJ5XzEuZ2V0UmV0cnlQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9jb250ZW50X2xlbmd0aF8xLmdldENvbnRlbnRMZW5ndGhQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xLmdldEhvc3RIZWFkZXJQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9sb2dnZXJfMS5nZXRMb2dnZXJQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9yZWN1cnNpb25fZGV0ZWN0aW9uXzEuZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1RTQ2xpZW50ID0gU1RTQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBBc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuc2VfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1RTQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuc2VfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkRlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldEFjY2Vzc0tleUluZm9Db21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldEFjY2Vzc0tleUluZm9Db21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQgPSBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfcXVlcnlfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3F1ZXJ5XCIpO1xuY2xhc3MgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldENhbGxlcklkZW50aXR5Q29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldENhbGxlcklkZW50aXR5Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuZGVfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kID0gR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBHZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1RTQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJHZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkdldEZlZGVyYXRpb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEdldFNlc3Npb25Ub2tlbkNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlR2xvYmFsRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlR2xvYmFsRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0U2Vzc2lvblRva2VuQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldFNlc3Npb25Ub2tlbkNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuR2V0U2Vzc2lvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gR2V0U2Vzc2lvblRva2VuQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNUUyA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgQXNzdW1lUm9sZUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVDb21tYW5kXCIpO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZFwiKTtcbmNvbnN0IEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZFwiKTtcbmNvbnN0IERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kXCIpO1xuY29uc3QgR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldEFjY2Vzc0tleUluZm9Db21tYW5kXCIpO1xuY29uc3QgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRcIik7XG5jb25zdCBHZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kXCIpO1xuY29uc3QgR2V0U2Vzc2lvblRva2VuQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0U2Vzc2lvblRva2VuQ29tbWFuZFwiKTtcbmNvbnN0IFNUU0NsaWVudF8xID0gcmVxdWlyZShcIi4vU1RTQ2xpZW50XCIpO1xuY29uc3QgY29tbWFuZHMgPSB7XG4gICAgQXNzdW1lUm9sZUNvbW1hbmQ6IEFzc3VtZVJvbGVDb21tYW5kXzEuQXNzdW1lUm9sZUNvbW1hbmQsXG4gICAgQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZDogQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZF8xLkFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQsXG4gICAgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQ6IEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kXzEuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQsXG4gICAgRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kOiBEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRfMS5EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQsXG4gICAgR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQ6IEdldEFjY2Vzc0tleUluZm9Db21tYW5kXzEuR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQsXG4gICAgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kOiBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRfMS5HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQsXG4gICAgR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDogR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZF8xLkdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQsXG4gICAgR2V0U2Vzc2lvblRva2VuQ29tbWFuZDogR2V0U2Vzc2lvblRva2VuQ29tbWFuZF8xLkdldFNlc3Npb25Ub2tlbkNvbW1hbmQsXG59O1xuY2xhc3MgU1RTIGV4dGVuZHMgU1RTQ2xpZW50XzEuU1RTQ2xpZW50IHtcbn1cbmV4cG9ydHMuU1RTID0gU1RTO1xuKDAsIHNtaXRoeV9jbGllbnRfMS5jcmVhdGVBZ2dyZWdhdGVkQ2xpZW50KShjb21tYW5kcywgU1RTKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQXNzdW1lUm9sZUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vR2V0U2Vzc2lvblRva2VuQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc18wXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXIgPSB2b2lkIDA7XG5jb25zdCBkZWZhdWx0U3RzUm9sZUFzc3VtZXJzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0U3RzUm9sZUFzc3VtZXJzXCIpO1xuY29uc3QgU1RTQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9TVFNDbGllbnRcIik7XG5jb25zdCBnZXRDdXN0b21pemFibGVTdHNDbGllbnRDdG9yID0gKGJhc2VDdG9yLCBjdXN0b21pemF0aW9ucykgPT4ge1xuICAgIGlmICghY3VzdG9taXphdGlvbnMpXG4gICAgICAgIHJldHVybiBiYXNlQ3RvcjtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBjbGFzcyBDdXN0b21pemFibGVTVFNDbGllbnQgZXh0ZW5kcyBiYXNlQ3RvciB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihjb25maWcpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VzdG9taXphdGlvbiBvZiBjdXN0b21pemF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoY3VzdG9taXphdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xufTtcbmNvbnN0IGdldERlZmF1bHRSb2xlQXNzdW1lciA9IChzdHNPcHRpb25zID0ge30sIHN0c1BsdWdpbnMpID0+ICgwLCBkZWZhdWx0U3RzUm9sZUFzc3VtZXJzXzEuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyKShzdHNPcHRpb25zLCBnZXRDdXN0b21pemFibGVTdHNDbGllbnRDdG9yKFNUU0NsaWVudF8xLlNUU0NsaWVudCwgc3RzUGx1Z2lucykpO1xuZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXIgPSBnZXREZWZhdWx0Um9sZUFzc3VtZXI7XG5jb25zdCBnZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkgPSAoc3RzT3B0aW9ucyA9IHt9LCBzdHNQbHVnaW5zKSA9PiAoMCwgZGVmYXVsdFN0c1JvbGVBc3N1bWVyc18xLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSkoc3RzT3B0aW9ucywgZ2V0Q3VzdG9taXphYmxlU3RzQ2xpZW50Q3RvcihTVFNDbGllbnRfMS5TVFNDbGllbnQsIHN0c1BsdWdpbnMpKTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5O1xuY29uc3QgZGVjb3JhdGVEZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyID0gKHByb3ZpZGVyKSA9PiAoaW5wdXQpID0+IHByb3ZpZGVyKHtcbiAgICByb2xlQXNzdW1lcjogKDAsIGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyKShpbnB1dCksXG4gICAgcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHk6ICgwLCBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSkoaW5wdXQpLFxuICAgIC4uLmlucHV0LFxufSk7XG5leHBvcnRzLmRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IGRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNUU1NlcnZpY2VFeGNlcHRpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU1RTQ2xpZW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NUU1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tb2RlbHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGVmYXVsdFJvbGVBc3N1bWVyc1wiKSwgZXhwb3J0cyk7XG52YXIgU1RTU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vbW9kZWxzL1NUU1NlcnZpY2VFeGNlcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTVFNTZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJ1bGVTZXQgPSB2b2lkIDA7XG5jb25zdCBwID0gXCJyZXF1aXJlZFwiLCBxID0gXCJmblwiLCByID0gXCJhcmd2XCIsIHMgPSBcInJlZlwiO1xuY29uc3QgYSA9IFwiUGFydGl0aW9uUmVzdWx0XCIsIGIgPSBcInRyZWVcIiwgYyA9IFwiZXJyb3JcIiwgZCA9IFwiZW5kcG9pbnRcIiwgZSA9IHsgW3BdOiBmYWxzZSwgXCJ0eXBlXCI6IFwiU3RyaW5nXCIgfSwgZiA9IHsgW3BdOiB0cnVlLCBcImRlZmF1bHRcIjogZmFsc2UsIFwidHlwZVwiOiBcIkJvb2xlYW5cIiB9LCBnID0geyBbc106IFwiRW5kcG9pbnRcIiB9LCBoID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt7IFtzXTogXCJVc2VGSVBTXCIgfSwgdHJ1ZV0gfSwgaSA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbeyBbc106IFwiVXNlRHVhbFN0YWNrXCIgfSwgdHJ1ZV0gfSwgaiA9IHt9LCBrID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt0cnVlLCB7IFtxXTogXCJnZXRBdHRyXCIsIFtyXTogW3sgW3NdOiBhIH0sIFwic3VwcG9ydHNGSVBTXCJdIH1dIH0sIGwgPSB7IFtxXTogXCJib29sZWFuRXF1YWxzXCIsIFtyXTogW3RydWUsIHsgW3FdOiBcImdldEF0dHJcIiwgW3JdOiBbeyBbc106IGEgfSwgXCJzdXBwb3J0c0R1YWxTdGFja1wiXSB9XSB9LCBtID0gW2ddLCBuID0gW2hdLCBvID0gW2ldO1xuY29uc3QgX2RhdGEgPSB7IHZlcnNpb246IFwiMS4wXCIsIHBhcmFtZXRlcnM6IHsgUmVnaW9uOiBlLCBVc2VEdWFsU3RhY2s6IGYsIFVzZUZJUFM6IGYsIEVuZHBvaW50OiBlIH0sIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbcV06IFwiYXdzLnBhcnRpdGlvblwiLCBbcl06IFt7IFtzXTogXCJSZWdpb25cIiB9XSwgYXNzaWduOiBhIH1dLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3FdOiBcImlzU2V0XCIsIFtyXTogbSB9LCB7IFtxXTogXCJwYXJzZVVSTFwiLCBbcl06IG0sIGFzc2lnbjogXCJ1cmxcIiB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IG4sIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIHR5cGU6IGMgfSwgeyB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogbywgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBjIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBnLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBjb25kaXRpb25zOiBbaCwgaV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbaywgbF0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9jb2duaXRvLWlkZW50aXR5LWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkZJUFMgYW5kIER1YWxTdGFjayBhcmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgb25lIG9yIGJvdGhcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IG4sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBba10sIHR5cGU6IGIsIHJ1bGVzOiBbeyB0eXBlOiBiLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vY29nbml0by1pZGVudGl0eS1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBlcnJvcjogXCJGSVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRklQU1wiLCB0eXBlOiBjIH1dIH0sIHsgY29uZGl0aW9uczogbywgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtsXSwgdHlwZTogYiwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL2NvZ25pdG8taWRlbnRpdHkue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFja1wiLCB0eXBlOiBjIH1dIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vY29nbml0by1pZGVudGl0eS57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH07XG5leHBvcnRzLnJ1bGVTZXQgPSBfZGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IHJ1bGVzZXRfMSA9IHJlcXVpcmUoXCIuL3J1bGVzZXRcIik7XG5jb25zdCBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IChlbmRwb2ludFBhcmFtcywgY29udGV4dCA9IHt9KSA9PiB7XG4gICAgcmV0dXJuICgwLCB1dGlsX2VuZHBvaW50c18xLnJlc29sdmVFbmRwb2ludCkocnVsZXNldF8xLnJ1bGVTZXQsIHtcbiAgICAgICAgZW5kcG9pbnRQYXJhbXM6IGVuZHBvaW50UGFyYW1zLFxuICAgICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHVybF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91cmwtcGFyc2VyXCIpO1xuY29uc3QgdXRpbF9iYXNlNjRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWJhc2U2NFwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXRmOFwiKTtcbmNvbnN0IGVuZHBvaW50UmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXJcIik7XG5jb25zdCBnZXRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4gKHtcbiAgICBhcGlWZXJzaW9uOiBcIjIwMTQtMDYtMzBcIixcbiAgICBiYXNlNjREZWNvZGVyOiBjb25maWc/LmJhc2U2NERlY29kZXIgPz8gdXRpbF9iYXNlNjRfMS5mcm9tQmFzZTY0LFxuICAgIGJhc2U2NEVuY29kZXI6IGNvbmZpZz8uYmFzZTY0RW5jb2RlciA/PyB1dGlsX2Jhc2U2NF8xLnRvQmFzZTY0LFxuICAgIGRpc2FibGVIb3N0UHJlZml4OiBjb25maWc/LmRpc2FibGVIb3N0UHJlZml4ID8/IGZhbHNlLFxuICAgIGVuZHBvaW50UHJvdmlkZXI6IGNvbmZpZz8uZW5kcG9pbnRQcm92aWRlciA/PyBlbmRwb2ludFJlc29sdmVyXzEuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIsXG4gICAgbG9nZ2VyOiBjb25maWc/LmxvZ2dlciA/PyBuZXcgc21pdGh5X2NsaWVudF8xLk5vT3BMb2dnZXIoKSxcbiAgICBzZXJ2aWNlSWQ6IGNvbmZpZz8uc2VydmljZUlkID8/IFwiQ29nbml0byBJZGVudGl0eVwiLFxuICAgIHVybFBhcnNlcjogY29uZmlnPy51cmxQYXJzZXIgPz8gdXJsX3BhcnNlcl8xLnBhcnNlVXJsLFxuICAgIHV0ZjhEZWNvZGVyOiBjb25maWc/LnV0ZjhEZWNvZGVyID8/IHV0aWxfdXRmOF8xLmZyb21VdGY4LFxuICAgIHV0ZjhFbmNvZGVyOiBjb25maWc/LnV0ZjhFbmNvZGVyID8/IHV0aWxfdXRmOF8xLnRvVXRmOCxcbn0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gZ2V0UnVudGltZUNvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgcGFja2FnZV9qc29uXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpKTtcbmNvbnN0IGNsaWVudF9zdHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtc3RzXCIpO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlXCIpO1xuY29uc3QgaGFzaF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvaGFzaC1ub2RlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3Qgbm9kZV9odHRwX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9ub2RlLWh0dHAtaGFuZGxlclwiKTtcbmNvbnN0IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtYm9keS1sZW5ndGgtbm9kZVwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXJldHJ5XCIpO1xuY29uc3QgdXRpbF91c2VyX2FnZW50X25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZVwiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfc2hhcmVkXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lQ29uZmlnLnNoYXJlZFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMiA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICAoMCwgc21pdGh5X2NsaWVudF8yLmVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb24pKHByb2Nlc3MudmVyc2lvbik7XG4gICAgY29uc3QgZGVmYXVsdHNNb2RlID0gKDAsIHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEucmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZykoY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSAoKSA9PiBkZWZhdWx0c01vZGUoKS50aGVuKHNtaXRoeV9jbGllbnRfMS5sb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlKTtcbiAgICBjb25zdCBjbGllbnRTaGFyZWRWYWx1ZXMgPSAoMCwgcnVudGltZUNvbmZpZ19zaGFyZWRfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNsaWVudFNoYXJlZFZhbHVlcyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBydW50aW1lOiBcIm5vZGVcIixcbiAgICAgICAgZGVmYXVsdHNNb2RlLFxuICAgICAgICBib2R5TGVuZ3RoQ2hlY2tlcjogY29uZmlnPy5ib2R5TGVuZ3RoQ2hlY2tlciA/PyB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMS5jYWxjdWxhdGVCb2R5TGVuZ3RoLFxuICAgICAgICBjcmVkZW50aWFsRGVmYXVsdFByb3ZpZGVyOiBjb25maWc/LmNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXIgPz8gKDAsIGNsaWVudF9zdHNfMS5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIpKGNyZWRlbnRpYWxfcHJvdmlkZXJfbm9kZV8xLmRlZmF1bHRQcm92aWRlciksXG4gICAgICAgIGRlZmF1bHRVc2VyQWdlbnRQcm92aWRlcjogY29uZmlnPy5kZWZhdWx0VXNlckFnZW50UHJvdmlkZXIgPz9cbiAgICAgICAgICAgICgwLCB1dGlsX3VzZXJfYWdlbnRfbm9kZV8xLmRlZmF1bHRVc2VyQWdlbnQpKHsgc2VydmljZUlkOiBjbGllbnRTaGFyZWRWYWx1ZXMuc2VydmljZUlkLCBjbGllbnRWZXJzaW9uOiBwYWNrYWdlX2pzb25fMS5kZWZhdWx0LnZlcnNpb24gfSksXG4gICAgICAgIG1heEF0dGVtcHRzOiBjb25maWc/Lm1heEF0dGVtcHRzID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKG1pZGRsZXdhcmVfcmV0cnlfMS5OT0RFX01BWF9BVFRFTVBUX0NPTkZJR19PUFRJT05TKSxcbiAgICAgICAgcmVnaW9uOiBjb25maWc/LnJlZ2lvbiA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1JFR0lPTl9DT05GSUdfT1BUSU9OUywgY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX0ZJTEVfT1BUSU9OUyksXG4gICAgICAgIHJlcXVlc3RIYW5kbGVyOiBjb25maWc/LnJlcXVlc3RIYW5kbGVyID8/IG5ldyBub2RlX2h0dHBfaGFuZGxlcl8xLk5vZGVIdHRwSGFuZGxlcihkZWZhdWx0Q29uZmlnUHJvdmlkZXIpLFxuICAgICAgICByZXRyeU1vZGU6IGNvbmZpZz8ucmV0cnlNb2RlID8/XG4gICAgICAgICAgICAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKSh7XG4gICAgICAgICAgICAgICAgLi4ubWlkZGxld2FyZV9yZXRyeV8xLk5PREVfUkVUUllfTU9ERV9DT05GSUdfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBhc3luYyAoKSA9PiAoYXdhaXQgZGVmYXVsdENvbmZpZ1Byb3ZpZGVyKCkpLnJldHJ5TW9kZSB8fCB1dGlsX3JldHJ5XzEuREVGQVVMVF9SRVRSWV9NT0RFLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIHNoYTI1NjogY29uZmlnPy5zaGEyNTYgPz8gaGFzaF9ub2RlXzEuSGFzaC5iaW5kKG51bGwsIFwic2hhMjU2XCIpLFxuICAgICAgICBzdHJlYW1Db2xsZWN0b3I6IGNvbmZpZz8uc3RyZWFtQ29sbGVjdG9yID8/IG5vZGVfaHR0cF9oYW5kbGVyXzEuc3RyZWFtQ29sbGVjdG9yLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogY29uZmlnPy51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlRfQ09ORklHX09QVElPTlMpLFxuICAgICAgICB1c2VGaXBzRW5kcG9pbnQ6IGNvbmZpZz8udXNlRmlwc0VuZHBvaW50ID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfVVNFX0ZJUFNfRU5EUE9JTlRfQ09ORklHX09QVElPTlMpLFxuICAgIH07XG59O1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gZ2V0UnVudGltZUNvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvZ25pdG9JZGVudGl0eUNsaWVudCA9IGV4cG9ydHMuX19DbGllbnQgPSB2b2lkIDA7XG5jb25zdCBjb25maWdfcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1jb250ZW50LWxlbmd0aFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtaG9zdC1oZWFkZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX2xvZ2dlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtbG9nZ2VyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZWN1cnNpb25fZGV0ZWN0aW9uXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnRcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ2xpZW50OyB9IH0pO1xuY29uc3QgRW5kcG9pbnRQYXJhbWV0ZXJzXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludC9FbmRwb2ludFBhcmFtZXRlcnNcIik7XG5jb25zdCBydW50aW1lQ29uZmlnXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lQ29uZmlnXCIpO1xuY2xhc3MgQ29nbml0b0lkZW50aXR5Q2xpZW50IGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBfY29uZmlnXzAgPSAoMCwgcnVudGltZUNvbmZpZ18xLmdldFJ1bnRpbWVDb25maWcpKGNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBfY29uZmlnXzEgPSAoMCwgRW5kcG9pbnRQYXJhbWV0ZXJzXzEucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycykoX2NvbmZpZ18wKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18yID0gKDAsIGNvbmZpZ19yZXNvbHZlcl8xLnJlc29sdmVSZWdpb25Db25maWcpKF9jb25maWdfMSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMyA9ICgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEucmVzb2x2ZUVuZHBvaW50Q29uZmlnKShfY29uZmlnXzIpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzQgPSAoMCwgbWlkZGxld2FyZV9yZXRyeV8xLnJlc29sdmVSZXRyeUNvbmZpZykoX2NvbmZpZ18zKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ181ID0gKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZykoX2NvbmZpZ180KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ182ID0gKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLnJlc29sdmVBd3NBdXRoQ29uZmlnKShfY29uZmlnXzUpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzcgPSAoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEucmVzb2x2ZVVzZXJBZ2VudENvbmZpZykoX2NvbmZpZ182KTtcbiAgICAgICAgc3VwZXIoX2NvbmZpZ183KTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBfY29uZmlnXzc7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9yZXRyeV8xLmdldFJldHJ5UGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMS5nZXRDb250ZW50TGVuZ3RoUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5nZXRIb3N0SGVhZGVyUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfbG9nZ2VyXzEuZ2V0TG9nZ2VyUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xLmdldFJlY3Vyc2lvbkRldGVjdGlvblBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5leHBvcnRzLkNvZ25pdG9JZGVudGl0eUNsaWVudCA9IENvZ25pdG9JZGVudGl0eUNsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24gPSBleHBvcnRzLl9fU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19TZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbmNsYXNzIENvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIENvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24gPSBDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiA9IGV4cG9ydHMuRGV2ZWxvcGVyVXNlckFscmVhZHlSZWdpc3RlcmVkRXhjZXB0aW9uID0gZXhwb3J0cy5Sb2xlTWFwcGluZ1R5cGUgPSBleHBvcnRzLk1hcHBpbmdSdWxlTWF0Y2hUeXBlID0gZXhwb3J0cy5JbnZhbGlkSWRlbnRpdHlQb29sQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiA9IGV4cG9ydHMuRXh0ZXJuYWxTZXJ2aWNlRXhjZXB0aW9uID0gZXhwb3J0cy5SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uID0gZXhwb3J0cy5FcnJvckNvZGUgPSBleHBvcnRzLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbiA9IGV4cG9ydHMuUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvbiA9IGV4cG9ydHMuTm90QXV0aG9yaXplZEV4Y2VwdGlvbiA9IGV4cG9ydHMuTGltaXRFeGNlZWRlZEV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvbiA9IGV4cG9ydHMuSW50ZXJuYWxFcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuQW1iaWd1b3VzUm9sZVJlc29sdXRpb25UeXBlID0gdm9pZCAwO1xuY29uc3QgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvblwiKTtcbmV4cG9ydHMuQW1iaWd1b3VzUm9sZVJlc29sdXRpb25UeXBlID0ge1xuICAgIEFVVEhFTlRJQ0FURURfUk9MRTogXCJBdXRoZW50aWNhdGVkUm9sZVwiLFxuICAgIERFTlk6IFwiRGVueVwiLFxufTtcbmNsYXNzIEludGVybmFsRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXzEuQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJzZXJ2ZXJcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcInNlcnZlclwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW50ZXJuYWxFcnJvckV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxFcnJvckV4Y2VwdGlvbiA9IEludGVybmFsRXJyb3JFeGNlcHRpb247XG5jbGFzcyBJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24gPSBJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uO1xuY2xhc3MgTGltaXRFeGNlZWRlZEV4Y2VwdGlvbiBleHRlbmRzIENvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb25fMS5Db2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBMaW1pdEV4Y2VlZGVkRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5MaW1pdEV4Y2VlZGVkRXhjZXB0aW9uID0gTGltaXRFeGNlZWRlZEV4Y2VwdGlvbjtcbmNsYXNzIE5vdEF1dGhvcml6ZWRFeGNlcHRpb24gZXh0ZW5kcyBDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXzEuQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTm90QXV0aG9yaXplZEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm90QXV0aG9yaXplZEV4Y2VwdGlvbiA9IE5vdEF1dGhvcml6ZWRFeGNlcHRpb247XG5jbGFzcyBSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFJlc291cmNlQ29uZmxpY3RFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlJlc291cmNlQ29uZmxpY3RFeGNlcHRpb24gPSBSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uO1xuY2xhc3MgVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbiA9IFRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbjtcbmV4cG9ydHMuRXJyb3JDb2RlID0ge1xuICAgIEFDQ0VTU19ERU5JRUQ6IFwiQWNjZXNzRGVuaWVkXCIsXG4gICAgSU5URVJOQUxfU0VSVkVSX0VSUk9SOiBcIkludGVybmFsU2VydmVyRXJyb3JcIixcbn07XG5jbGFzcyBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gPSBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uO1xuY2xhc3MgRXh0ZXJuYWxTZXJ2aWNlRXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJFeHRlcm5hbFNlcnZpY2VFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkV4dGVybmFsU2VydmljZUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFeHRlcm5hbFNlcnZpY2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkV4dGVybmFsU2VydmljZUV4Y2VwdGlvbiA9IEV4dGVybmFsU2VydmljZUV4Y2VwdGlvbjtcbmNsYXNzIEludmFsaWRJZGVudGl0eVBvb2xDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkSWRlbnRpdHlQb29sQ29uZmlndXJhdGlvbkV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW52YWxpZElkZW50aXR5UG9vbENvbmZpZ3VyYXRpb25FeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZElkZW50aXR5UG9vbENvbmZpZ3VyYXRpb25FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRJZGVudGl0eVBvb2xDb25maWd1cmF0aW9uRXhjZXB0aW9uID0gSW52YWxpZElkZW50aXR5UG9vbENvbmZpZ3VyYXRpb25FeGNlcHRpb247XG5leHBvcnRzLk1hcHBpbmdSdWxlTWF0Y2hUeXBlID0ge1xuICAgIENPTlRBSU5TOiBcIkNvbnRhaW5zXCIsXG4gICAgRVFVQUxTOiBcIkVxdWFsc1wiLFxuICAgIE5PVF9FUVVBTDogXCJOb3RFcXVhbFwiLFxuICAgIFNUQVJUU19XSVRIOiBcIlN0YXJ0c1dpdGhcIixcbn07XG5leHBvcnRzLlJvbGVNYXBwaW5nVHlwZSA9IHtcbiAgICBSVUxFUzogXCJSdWxlc1wiLFxuICAgIFRPS0VOOiBcIlRva2VuXCIsXG59O1xuY2xhc3MgRGV2ZWxvcGVyVXNlckFscmVhZHlSZWdpc3RlcmVkRXhjZXB0aW9uIGV4dGVuZHMgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJEZXZlbG9wZXJVc2VyQWxyZWFkeVJlZ2lzdGVyZWRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRldmVsb3BlclVzZXJBbHJlYWR5UmVnaXN0ZXJlZEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBEZXZlbG9wZXJVc2VyQWxyZWFkeVJlZ2lzdGVyZWRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkRldmVsb3BlclVzZXJBbHJlYWR5UmVnaXN0ZXJlZEV4Y2VwdGlvbiA9IERldmVsb3BlclVzZXJBbHJlYWR5UmVnaXN0ZXJlZEV4Y2VwdGlvbjtcbmNsYXNzIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXzEuQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiA9IENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZV9VcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kID0gZXhwb3J0cy5kZV9VbnRhZ1Jlc291cmNlQ29tbWFuZCA9IGV4cG9ydHMuZGVfVW5saW5rSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5kZV9VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLmRlX1RhZ1Jlc291cmNlQ29tbWFuZCA9IGV4cG9ydHMuZGVfU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCA9IGV4cG9ydHMuZGVfU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kID0gZXhwb3J0cy5kZV9NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kID0gZXhwb3J0cy5kZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLmRlX0xpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kID0gZXhwb3J0cy5kZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQgPSBleHBvcnRzLmRlX0xpc3RJZGVudGl0aWVzQ29tbWFuZCA9IGV4cG9ydHMuZGVfR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCA9IGV4cG9ydHMuZGVfR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLmRlX0dldE9wZW5JZFRva2VuQ29tbWFuZCA9IGV4cG9ydHMuZGVfR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kID0gZXhwb3J0cy5kZV9HZXRJZENvbW1hbmQgPSBleHBvcnRzLmRlX0dldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5kZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQgPSBleHBvcnRzLmRlX0Rlc2NyaWJlSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5kZV9EZWxldGVJZGVudGl0eVBvb2xDb21tYW5kID0gZXhwb3J0cy5kZV9EZWxldGVJZGVudGl0aWVzQ29tbWFuZCA9IGV4cG9ydHMuZGVfQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGV4cG9ydHMuc2VfVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGV4cG9ydHMuc2VfVW50YWdSZXNvdXJjZUNvbW1hbmQgPSBleHBvcnRzLnNlX1VubGlua0lkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuc2VfVW5saW5rRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5zZV9UYWdSZXNvdXJjZUNvbW1hbmQgPSBleHBvcnRzLnNlX1NldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBleHBvcnRzLnNlX1NldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IGV4cG9ydHMuc2VfTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZCA9IGV4cG9ydHMuc2VfTG9va3VwRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5zZV9MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZCA9IGV4cG9ydHMuc2VfTGlzdElkZW50aXR5UG9vbHNDb21tYW5kID0gZXhwb3J0cy5zZV9MaXN0SWRlbnRpdGllc0NvbW1hbmQgPSBleHBvcnRzLnNlX0dldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBleHBvcnRzLnNlX0dldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5zZV9HZXRPcGVuSWRUb2tlbkNvbW1hbmQgPSBleHBvcnRzLnNlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0SWRDb21tYW5kID0gZXhwb3J0cy5zZV9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuc2VfRGVzY3JpYmVJZGVudGl0eVBvb2xDb21tYW5kID0gZXhwb3J0cy5zZV9EZXNjcmliZUlkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuc2VfRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGV4cG9ydHMuc2VfRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQgPSBleHBvcnRzLnNlX0NyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL0NvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb25cIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IHNlX0NyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkNyZWF0ZUlkZW50aXR5UG9vbFwiKTtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoaW5wdXQpKTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0NyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSBzZV9DcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kO1xuY29uc3Qgc2VfRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkRlbGV0ZUlkZW50aXRpZXNcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9EZWxldGVJZGVudGl0aWVzQ29tbWFuZCA9IHNlX0RlbGV0ZUlkZW50aXRpZXNDb21tYW5kO1xuY29uc3Qgc2VfRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiRGVsZXRlSWRlbnRpdHlQb29sXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IHNlX0RlbGV0ZUlkZW50aXR5UG9vbENvbW1hbmQ7XG5jb25zdCBzZV9EZXNjcmliZUlkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiRGVzY3JpYmVJZGVudGl0eVwiKTtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoaW5wdXQpKTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0Rlc2NyaWJlSWRlbnRpdHlDb21tYW5kID0gc2VfRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBzZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkRlc2NyaWJlSWRlbnRpdHlQb29sXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfRGVzY3JpYmVJZGVudGl0eVBvb2xDb21tYW5kID0gc2VfRGVzY3JpYmVJZGVudGl0eVBvb2xDb21tYW5kO1xuY29uc3Qgc2VfR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkdldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZCA9IHNlX0dldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kO1xuY29uc3Qgc2VfR2V0SWRDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJHZXRJZFwiKTtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoaW5wdXQpKTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0dldElkQ29tbWFuZCA9IHNlX0dldElkQ29tbWFuZDtcbmNvbnN0IHNlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiR2V0SWRlbnRpdHlQb29sUm9sZXNcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQgPSBzZV9HZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQ7XG5jb25zdCBzZV9HZXRPcGVuSWRUb2tlbkNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkdldE9wZW5JZFRva2VuXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfR2V0T3BlbklkVG9rZW5Db21tYW5kID0gc2VfR2V0T3BlbklkVG9rZW5Db21tYW5kO1xuY29uc3Qgc2VfR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkdldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IHNlX0dldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kO1xuY29uc3Qgc2VfR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCA9IHNlX0dldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQ7XG5jb25zdCBzZV9MaXN0SWRlbnRpdGllc0NvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIkxpc3RJZGVudGl0aWVzXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfTGlzdElkZW50aXRpZXNDb21tYW5kID0gc2VfTGlzdElkZW50aXRpZXNDb21tYW5kO1xuY29uc3Qgc2VfTGlzdElkZW50aXR5UG9vbHNDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJMaXN0SWRlbnRpdHlQb29sc1wiKTtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoaW5wdXQpKTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0xpc3RJZGVudGl0eVBvb2xzQ29tbWFuZCA9IHNlX0xpc3RJZGVudGl0eVBvb2xzQ29tbWFuZDtcbmNvbnN0IHNlX0xpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJMaXN0VGFnc0ZvclJlc291cmNlXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQgPSBzZV9MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZDtcbmNvbnN0IHNlX0xvb2t1cERldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiTG9va3VwRGV2ZWxvcGVySWRlbnRpdHlcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBzZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBzZV9NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJNZXJnZURldmVsb3BlcklkZW50aXRpZXNcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kID0gc2VfTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZDtcbmNvbnN0IHNlX1NldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiU2V0SWRlbnRpdHlQb29sUm9sZXNcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9TZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQgPSBzZV9TZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQ7XG5jb25zdCBzZV9TZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJTZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9TZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kID0gc2VfU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZDtcbmNvbnN0IHNlX1RhZ1Jlc291cmNlQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBzaGFyZWRIZWFkZXJzKFwiVGFnUmVzb3VyY2VcIik7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGlucHV0KSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9UYWdSZXNvdXJjZUNvbW1hbmQgPSBzZV9UYWdSZXNvdXJjZUNvbW1hbmQ7XG5jb25zdCBzZV9VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIlVubGlua0RldmVsb3BlcklkZW50aXR5XCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfVW5saW5rRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kID0gc2VfVW5saW5rRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kO1xuY29uc3Qgc2VfVW5saW5rSWRlbnRpdHlDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJVbmxpbmtJZGVudGl0eVwiKTtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoaW5wdXQpKTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX1VubGlua0lkZW50aXR5Q29tbWFuZCA9IHNlX1VubGlua0lkZW50aXR5Q29tbWFuZDtcbmNvbnN0IHNlX1VudGFnUmVzb3VyY2VDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHNoYXJlZEhlYWRlcnMoXCJVbnRhZ1Jlc291cmNlXCIpO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShpbnB1dCkpO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfVW50YWdSZXNvdXJjZUNvbW1hbmQgPSBzZV9VbnRhZ1Jlc291cmNlQ29tbWFuZDtcbmNvbnN0IHNlX1VwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gc2hhcmVkSGVhZGVycyhcIlVwZGF0ZUlkZW50aXR5UG9vbFwiKTtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoaW5wdXQpKTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX1VwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSBzZV9VcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kO1xuY29uc3QgZGVfQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9DcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShkYXRhKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGRlX0NyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQ7XG5jb25zdCBkZV9DcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxFcnJvckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTGltaXRFeGNlZWRlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTm90QXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfRGVsZXRlSWRlbnRpdGllc0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9EZWxldGVJZGVudGl0aWVzQ29tbWFuZCA9IGRlX0RlbGV0ZUlkZW50aXRpZXNDb21tYW5kO1xuY29uc3QgZGVfRGVsZXRlSWRlbnRpdGllc0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9EZWxldGVJZGVudGl0eVBvb2xDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0RlbGV0ZUlkZW50aXR5UG9vbENvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBhd2FpdCBjb2xsZWN0Qm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGRlX0RlbGV0ZUlkZW50aXR5UG9vbENvbW1hbmQ7XG5jb25zdCBkZV9EZWxldGVJZGVudGl0eVBvb2xDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxFcnJvckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTm90QXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfRGVzY3JpYmVJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0lkZW50aXR5RGVzY3JpcHRpb24oZGF0YSwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0Rlc2NyaWJlSWRlbnRpdHlDb21tYW5kID0gZGVfRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBkZV9EZXNjcmliZUlkZW50aXR5Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0Rlc2NyaWJlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQgPSBkZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQ7XG5jb25zdCBkZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gZGVfR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eVJlc3BvbnNlKGRhdGEsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZCA9IGRlX0dldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kO1xuY29uc3QgZGVfR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJFeHRlcm5hbFNlcnZpY2VFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0V4dGVybmFsU2VydmljZUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfRXh0ZXJuYWxTZXJ2aWNlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkSWRlbnRpdHlQb29sQ29uZmlndXJhdGlvbkV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW52YWxpZElkZW50aXR5UG9vbENvbmZpZ3VyYXRpb25FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRJZGVudGl0eVBvb2xDb25maWd1cmF0aW9uRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRJZENvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0SWRDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShkYXRhKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfR2V0SWRDb21tYW5kID0gZGVfR2V0SWRDb21tYW5kO1xuY29uc3QgZGVfR2V0SWRDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiRXh0ZXJuYWxTZXJ2aWNlRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNFeHRlcm5hbFNlcnZpY2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0V4dGVybmFsU2VydmljZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxFcnJvckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTGltaXRFeGNlZWRlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTm90QXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoZGF0YSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IGRlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZDtcbmNvbnN0IGRlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0dldE9wZW5JZFRva2VuQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRPcGVuSWRUb2tlbkNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9HZXRPcGVuSWRUb2tlbkNvbW1hbmQgPSBkZV9HZXRPcGVuSWRUb2tlbkNvbW1hbmQ7XG5jb25zdCBkZV9HZXRPcGVuSWRUb2tlbkNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJFeHRlcm5hbFNlcnZpY2VFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0V4dGVybmFsU2VydmljZUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfRXh0ZXJuYWxTZXJ2aWNlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoZGF0YSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kID0gZGVfR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBkZV9HZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkRldmVsb3BlclVzZXJBbHJlYWR5UmVnaXN0ZXJlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjRGV2ZWxvcGVyVXNlckFscmVhZHlSZWdpc3RlcmVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9EZXZlbG9wZXJVc2VyQWxyZWFkeVJlZ2lzdGVyZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0dldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoZGF0YSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBkZV9HZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kO1xuY29uc3QgZGVfR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0xpc3RJZGVudGl0aWVzQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9MaXN0SWRlbnRpdGllc0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0xpc3RJZGVudGl0aWVzUmVzcG9uc2UoZGF0YSwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0xpc3RJZGVudGl0aWVzQ29tbWFuZCA9IGRlX0xpc3RJZGVudGl0aWVzQ29tbWFuZDtcbmNvbnN0IGRlX0xpc3RJZGVudGl0aWVzQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0xpc3RJZGVudGl0eVBvb2xzQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQgPSBkZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQ7XG5jb25zdCBkZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoZGF0YSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0xpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kID0gZGVfTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQ7XG5jb25zdCBkZV9MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0xvb2t1cERldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBkZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBkZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX01lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kID0gZGVfTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZDtcbmNvbnN0IGRlX01lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9TZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgYXdhaXQgY29sbGVjdEJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX1NldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IGRlX1NldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZDtcbmNvbnN0IGRlX1NldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX1NldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoZGF0YSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX1NldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBkZV9TZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kO1xuY29uc3QgZGVfU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX1RhZ1Jlc291cmNlQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9UYWdSZXNvdXJjZUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9UYWdSZXNvdXJjZUNvbW1hbmQgPSBkZV9UYWdSZXNvdXJjZUNvbW1hbmQ7XG5jb25zdCBkZV9UYWdSZXNvdXJjZUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfVW5saW5rRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgYXdhaXQgY29sbGVjdEJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX1VubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IGRlX1VubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZDtcbmNvbnN0IGRlX1VubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludGVybmFsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk5vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I05vdEF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlQ29uZmxpY3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX1VubGlua0lkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9VbmxpbmtJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBhd2FpdCBjb2xsZWN0Qm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfVW5saW5rSWRlbnRpdHlDb21tYW5kID0gZGVfVW5saW5rSWRlbnRpdHlDb21tYW5kO1xuY29uc3QgZGVfVW5saW5rSWRlbnRpdHlDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiRXh0ZXJuYWxTZXJ2aWNlRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNFeHRlcm5hbFNlcnZpY2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0V4dGVybmFsU2VydmljZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW50ZXJuYWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxFcnJvckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjTm90QXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTm90QXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VDb25mbGljdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5jb2duaXRvaWRlbnRpdHkjUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfVW50YWdSZXNvdXJjZUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfVW50YWdSZXNvdXJjZUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9VbnRhZ1Jlc291cmNlQ29tbWFuZCA9IGRlX1VudGFnUmVzb3VyY2VDb21tYW5kO1xuY29uc3QgZGVfVW50YWdSZXNvdXJjZUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9VcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX1VwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9VcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kID0gZGVfVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZDtcbmNvbnN0IGRlX1VwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Db25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnRlcm5hbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJMaW1pdEV4Y2VlZGVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNMaW1pdEV4Y2VlZGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9MaW1pdEV4Y2VlZGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNOb3RBdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ob3RBdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmNvZ25pdG9pZGVudGl0eSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuY29nbml0b2lkZW50aXR5I1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9Db25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShib2R5KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5Db25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfRGV2ZWxvcGVyVXNlckFscmVhZHlSZWdpc3RlcmVkRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShib2R5KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5EZXZlbG9wZXJVc2VyQWxyZWFkeVJlZ2lzdGVyZWRFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVkLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBib2R5KTtcbn07XG5jb25zdCBkZV9FeHRlcm5hbFNlcnZpY2VFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGJvZHkpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkV4dGVybmFsU2VydmljZUV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX0ludGVybmFsRXJyb3JFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGJvZHkpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkludGVybmFsRXJyb3JFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVkLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBib2R5KTtcbn07XG5jb25zdCBkZV9JbnZhbGlkSWRlbnRpdHlQb29sQ29uZmlndXJhdGlvbkV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoYm9keSk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZElkZW50aXR5UG9vbENvbmZpZ3VyYXRpb25FeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVkLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBib2R5KTtcbn07XG5jb25zdCBkZV9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShib2R5KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfTGltaXRFeGNlZWRlZEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoYm9keSk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuTGltaXRFeGNlZWRlZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX05vdEF1dGhvcml6ZWRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuX2pzb24pKGJvZHkpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLk5vdEF1dGhvcml6ZWRFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVkLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBib2R5KTtcbn07XG5jb25zdCBkZV9SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLl9qc29uKShib2R5KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5SZXNvdXJjZUNvbmZsaWN0RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoYm9keSk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5fanNvbikoYm9keSk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfQ3JlZGVudGlhbHMgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkob3V0cHV0LCB7XG4gICAgICAgIEFjY2Vzc0tleUlkOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgICAgICBFeHBpcmF0aW9uOiAoXykgPT4gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLnBhcnNlRXBvY2hUaW1lc3RhbXApKCgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0TnVtYmVyKShfKSkpLFxuICAgICAgICBTZWNyZXRLZXk6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIFNlc3Npb25Ub2tlbjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbn07XG5jb25zdCBkZV9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5UmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkob3V0cHV0LCB7XG4gICAgICAgIENyZWRlbnRpYWxzOiAoXykgPT4gZGVfQ3JlZGVudGlhbHMoXywgY29udGV4dCksXG4gICAgICAgIElkZW50aXR5SWQ6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG59O1xuY29uc3QgZGVfSWRlbnRpdGllc0xpc3QgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcmV0VmFsID0gKG91dHB1dCB8fCBbXSlcbiAgICAgICAgLmZpbHRlcigoZSkgPT4gZSAhPSBudWxsKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICByZXR1cm4gZGVfSWRlbnRpdHlEZXNjcmlwdGlvbihlbnRyeSwgY29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJldFZhbDtcbn07XG5jb25zdCBkZV9JZGVudGl0eURlc2NyaXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKG91dHB1dCwge1xuICAgICAgICBDcmVhdGlvbkRhdGU6IChfKSA9PiAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzEucGFyc2VFcG9jaFRpbWVzdGFtcCkoKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROdW1iZXIpKF8pKSksXG4gICAgICAgIElkZW50aXR5SWQ6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIExhc3RNb2RpZmllZERhdGU6IChfKSA9PiAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzEucGFyc2VFcG9jaFRpbWVzdGFtcCkoKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROdW1iZXIpKF8pKSksXG4gICAgICAgIExvZ2luczogc21pdGh5X2NsaWVudF8xLl9qc29uLFxuICAgIH0pO1xufTtcbmNvbnN0IGRlX0xpc3RJZGVudGl0aWVzUmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkob3V0cHV0LCB7XG4gICAgICAgIElkZW50aXRpZXM6IChfKSA9PiBkZV9JZGVudGl0aWVzTGlzdChfLCBjb250ZXh0KSxcbiAgICAgICAgSWRlbnRpdHlQb29sSWQ6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIE5leHRUb2tlbjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbn07XG5jb25zdCBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gKG91dHB1dCkgPT4gKHtcbiAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgcmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0aWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16LXJlcXVlc3QtaWRcIl0sXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxufSk7XG5jb25zdCBjb2xsZWN0Qm9keSA9IChzdHJlYW1Cb2R5ID0gbmV3IFVpbnQ4QXJyYXkoKSwgY29udGV4dCkgPT4ge1xuICAgIGlmIChzdHJlYW1Cb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmVhbUJvZHkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dC5zdHJlYW1Db2xsZWN0b3Ioc3RyZWFtQm9keSkgfHwgUHJvbWlzZS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KCkpO1xufTtcbmNvbnN0IGNvbGxlY3RCb2R5U3RyaW5nID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5KHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGJvZHkpID0+IGNvbnRleHQudXRmOEVuY29kZXIoYm9keSkpO1xuY29uc3QgdGhyb3dEZWZhdWx0RXJyb3IgPSAoMCwgc21pdGh5X2NsaWVudF8xLndpdGhCYXNlRXhjZXB0aW9uKShDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXzEuQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbik7XG5jb25zdCBidWlsZEh0dHBScGNSZXF1ZXN0ID0gYXN5bmMgKGNvbnRleHQsIGhlYWRlcnMsIHBhdGgsIHJlc29sdmVkSG9zdG5hbWUsIGJvZHkpID0+IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICBjb25zdCBjb250ZW50cyA9IHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBwYXRoOiBiYXNlUGF0aC5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgKyBwYXRoIDogYmFzZVBhdGggKyBwYXRoLFxuICAgICAgICBoZWFkZXJzLFxuICAgIH07XG4gICAgaWYgKHJlc29sdmVkSG9zdG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5ob3N0bmFtZSA9IHJlc29sdmVkSG9zdG5hbWU7XG4gICAgfVxuICAgIGlmIChib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuYm9keSA9IGJvZHk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KGNvbnRlbnRzKTtcbn07XG5mdW5jdGlvbiBzaGFyZWRIZWFkZXJzKG9wZXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24veC1hbXotanNvbi0xLjFcIixcbiAgICAgICAgXCJ4LWFtei10YXJnZXRcIjogYEFXU0NvZ25pdG9JZGVudGl0eVNlcnZpY2UuJHtvcGVyYXRpb259YCxcbiAgICB9O1xufVxuY29uc3QgcGFyc2VCb2R5ID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5U3RyaW5nKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGVuY29kZWQpID0+IHtcbiAgICBpZiAoZW5jb2RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZW5jb2RlZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn0pO1xuY29uc3QgcGFyc2VFcnJvckJvZHkgPSBhc3luYyAoZXJyb3JCb2R5LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYXJzZUJvZHkoZXJyb3JCb2R5LCBjb250ZXh0KTtcbiAgICB2YWx1ZS5tZXNzYWdlID0gdmFsdWUubWVzc2FnZSA/PyB2YWx1ZS5NZXNzYWdlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBsb2FkUmVzdEpzb25FcnJvckNvZGUgPSAob3V0cHV0LCBkYXRhKSA9PiB7XG4gICAgY29uc3QgZmluZEtleSA9IChvYmplY3QsIGtleSkgPT4gT2JqZWN0LmtleXMob2JqZWN0KS5maW5kKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBzYW5pdGl6ZUVycm9yQ29kZSA9IChyYXdWYWx1ZSkgPT4ge1xuICAgICAgICBsZXQgY2xlYW5WYWx1ZSA9IHJhd1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFuVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIixcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIsXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCI6XCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiOlwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiI1wiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIiNcIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsZWFuVmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJLZXkgPSBmaW5kS2V5KG91dHB1dC5oZWFkZXJzLCBcIngtYW16bi1lcnJvcnR5cGVcIik7XG4gICAgaWYgKGhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShvdXRwdXQuaGVhZGVyc1toZWFkZXJLZXldKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhLmNvZGUpO1xuICAgIH1cbiAgICBpZiAoZGF0YVtcIl9fdHlwZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhW1wiX190eXBlXCJdKTtcbiAgICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIENyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkNyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9DcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkNyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSBDcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX2pzb24xXzFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX2pzb24xXzFcIik7XG5jbGFzcyBEZWxldGVJZGVudGl0aWVzQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBEZWxldGVJZGVudGl0aWVzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkRlbGV0ZUlkZW50aXRpZXNDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuc2VfRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9EZWxldGVJZGVudGl0aWVzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkRlbGV0ZUlkZW50aXRpZXNDb21tYW5kID0gRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWxldGVJZGVudGl0eVBvb2xDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBEZWxldGVJZGVudGl0eVBvb2xDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX0RlbGV0ZUlkZW50aXR5UG9vbENvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9EZWxldGVJZGVudGl0eVBvb2xDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZCA9IERlbGV0ZUlkZW50aXR5UG9vbENvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZXNjcmliZUlkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIERlc2NyaWJlSWRlbnRpdHlDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIERlc2NyaWJlSWRlbnRpdHlDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiRGVzY3JpYmVJZGVudGl0eUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9EZXNjcmliZUlkZW50aXR5Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX0Rlc2NyaWJlSWRlbnRpdHlDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQgPSBEZXNjcmliZUlkZW50aXR5Q29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlc2NyaWJlSWRlbnRpdHlQb29sQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIERlc2NyaWJlSWRlbnRpdHlQb29sQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBEZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJEZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQgPSBEZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIEdldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJHZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX0dldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZCA9IEdldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0SWRDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgR2V0SWRDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldElkQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0SWRDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuc2VfR2V0SWRDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfR2V0SWRDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2V0SWRDb21tYW5kID0gR2V0SWRDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkdldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZCA9IEdldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldE9wZW5JZFRva2VuQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIEdldE9wZW5JZFRva2VuQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBHZXRPcGVuSWRUb2tlbkNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldE9wZW5JZFRva2VuQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX0dldE9wZW5JZFRva2VuQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX0dldE9wZW5JZFRva2VuQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkdldE9wZW5JZFRva2VuQ29tbWFuZCA9IEdldE9wZW5JZFRva2VuQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJHZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX0dldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IEdldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIEdldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9HZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkdldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBHZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTGlzdElkZW50aXRpZXNDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgTGlzdElkZW50aXRpZXNDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIExpc3RJZGVudGl0aWVzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkxpc3RJZGVudGl0aWVzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX0xpc3RJZGVudGl0aWVzQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX0xpc3RJZGVudGl0aWVzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxpc3RJZGVudGl0aWVzQ29tbWFuZCA9IExpc3RJZGVudGl0aWVzQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxpc3RJZGVudGl0eVBvb2xzQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIExpc3RJZGVudGl0eVBvb2xzQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBMaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJMaXN0SWRlbnRpdHlQb29sc0NvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQgPSBMaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIExpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIExpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9MaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX0xpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQgPSBMaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvb2t1cERldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIExvb2t1cERldmVsb3BlcklkZW50aXR5Q29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBMb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJMb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBMb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBNZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX01lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9NZXJnZURldmVsb3BlcklkZW50aXRpZXNDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZCA9IE1lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX2pzb24xXzFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX2pzb24xXzFcIik7XG5jbGFzcyBTZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuc2VfU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kID0gU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIFNldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIlNldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9TZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuZGVfU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLlNldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQgPSBTZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGFnUmVzb3VyY2VDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19qc29uMV8xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19qc29uMV8xXCIpO1xuY2xhc3MgVGFnUmVzb3VyY2VDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIFRhZ1Jlc291cmNlQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJDb2duaXRvSWRlbnRpdHlDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIlRhZ1Jlc291cmNlQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLnNlX1RhZ1Jlc291cmNlQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX1RhZ1Jlc291cmNlQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLlRhZ1Jlc291cmNlQ29tbWFuZCA9IFRhZ1Jlc291cmNlQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIFVubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBVbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJVbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQgPSBVbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbmxpbmtJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX2pzb24xXzFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX2pzb24xXzFcIik7XG5jbGFzcyBVbmxpbmtJZGVudGl0eUNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgVW5saW5rSWRlbnRpdHlDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJVbmxpbmtJZGVudGl0eUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9VbmxpbmtJZGVudGl0eUNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5kZV9VbmxpbmtJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5VbmxpbmtJZGVudGl0eUNvbW1hbmQgPSBVbmxpbmtJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbnRhZ1Jlc291cmNlQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfanNvbjFfMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfanNvbjFfMVwiKTtcbmNsYXNzIFVudGFnUmVzb3VyY2VDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIFVudGFnUmVzb3VyY2VDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkNvZ25pdG9JZGVudGl0eUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiVW50YWdSZXNvdXJjZUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX2pzb24xXzFfMS5zZV9VbnRhZ1Jlc291cmNlQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX1VudGFnUmVzb3VyY2VDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuVW50YWdSZXNvdXJjZUNvbW1hbmQgPSBVbnRhZ1Jlc291cmNlQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX2pzb24xXzFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX2pzb24xXzFcIik7XG5jbGFzcyBVcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIFVwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiQ29nbml0b0lkZW50aXR5Q2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJVcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19qc29uMV8xXzEuc2VfVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfanNvbjFfMV8xLmRlX1VwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5VcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kID0gVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvZ25pdG9JZGVudGl0eSA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgQ29nbml0b0lkZW50aXR5Q2xpZW50XzEgPSByZXF1aXJlKFwiLi9Db2duaXRvSWRlbnRpdHlDbGllbnRcIik7XG5jb25zdCBDcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9DcmVhdGVJZGVudGl0eVBvb2xDb21tYW5kXCIpO1xuY29uc3QgRGVsZXRlSWRlbnRpdGllc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0RlbGV0ZUlkZW50aXRpZXNDb21tYW5kXCIpO1xuY29uc3QgRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZFwiKTtcbmNvbnN0IERlc2NyaWJlSWRlbnRpdHlDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9EZXNjcmliZUlkZW50aXR5Q29tbWFuZFwiKTtcbmNvbnN0IERlc2NyaWJlSWRlbnRpdHlQb29sQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvRGVzY3JpYmVJZGVudGl0eVBvb2xDb21tYW5kXCIpO1xuY29uc3QgR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgR2V0SWRDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9HZXRJZENvbW1hbmRcIik7XG5jb25zdCBHZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZFwiKTtcbmNvbnN0IEdldE9wZW5JZFRva2VuQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0T3BlbklkVG9rZW5Db21tYW5kXCIpO1xuY29uc3QgR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZFwiKTtcbmNvbnN0IExpc3RJZGVudGl0aWVzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvTGlzdElkZW50aXRpZXNDb21tYW5kXCIpO1xuY29uc3QgTGlzdElkZW50aXR5UG9vbHNDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmRcIik7XG5jb25zdCBMaXN0VGFnc0ZvclJlc291cmNlQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmRcIik7XG5jb25zdCBMb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0xvb2t1cERldmVsb3BlcklkZW50aXR5Q29tbWFuZFwiKTtcbmNvbnN0IE1lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL01lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmRcIik7XG5jb25zdCBTZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL1NldElkZW50aXR5UG9vbFJvbGVzQ29tbWFuZFwiKTtcbmNvbnN0IFNldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL1NldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmRcIik7XG5jb25zdCBUYWdSZXNvdXJjZUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL1RhZ1Jlc291cmNlQ29tbWFuZFwiKTtcbmNvbnN0IFVubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvVW5saW5rRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgVW5saW5rSWRlbnRpdHlDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9VbmxpbmtJZGVudGl0eUNvbW1hbmRcIik7XG5jb25zdCBVbnRhZ1Jlc291cmNlQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvVW50YWdSZXNvdXJjZUNvbW1hbmRcIik7XG5jb25zdCBVcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9VcGRhdGVJZGVudGl0eVBvb2xDb21tYW5kXCIpO1xuY29uc3QgY29tbWFuZHMgPSB7XG4gICAgQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZDogQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZF8xLkNyZWF0ZUlkZW50aXR5UG9vbENvbW1hbmQsXG4gICAgRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQ6IERlbGV0ZUlkZW50aXRpZXNDb21tYW5kXzEuRGVsZXRlSWRlbnRpdGllc0NvbW1hbmQsXG4gICAgRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZDogRGVsZXRlSWRlbnRpdHlQb29sQ29tbWFuZF8xLkRlbGV0ZUlkZW50aXR5UG9vbENvbW1hbmQsXG4gICAgRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQ6IERlc2NyaWJlSWRlbnRpdHlDb21tYW5kXzEuRGVzY3JpYmVJZGVudGl0eUNvbW1hbmQsXG4gICAgRGVzY3JpYmVJZGVudGl0eVBvb2xDb21tYW5kOiBEZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmRfMS5EZXNjcmliZUlkZW50aXR5UG9vbENvbW1hbmQsXG4gICAgR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmQ6IEdldENyZWRlbnRpYWxzRm9ySWRlbnRpdHlDb21tYW5kXzEuR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmQsXG4gICAgR2V0SWRDb21tYW5kOiBHZXRJZENvbW1hbmRfMS5HZXRJZENvbW1hbmQsXG4gICAgR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kOiBHZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmRfMS5HZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQsXG4gICAgR2V0T3BlbklkVG9rZW5Db21tYW5kOiBHZXRPcGVuSWRUb2tlbkNvbW1hbmRfMS5HZXRPcGVuSWRUb2tlbkNvbW1hbmQsXG4gICAgR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQ6IEdldE9wZW5JZFRva2VuRm9yRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kXzEuR2V0T3BlbklkVG9rZW5Gb3JEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQsXG4gICAgR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZDogR2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZF8xLkdldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQsXG4gICAgTGlzdElkZW50aXRpZXNDb21tYW5kOiBMaXN0SWRlbnRpdGllc0NvbW1hbmRfMS5MaXN0SWRlbnRpdGllc0NvbW1hbmQsXG4gICAgTGlzdElkZW50aXR5UG9vbHNDb21tYW5kOiBMaXN0SWRlbnRpdHlQb29sc0NvbW1hbmRfMS5MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmQsXG4gICAgTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQ6IExpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kXzEuTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQsXG4gICAgTG9va3VwRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kOiBMb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRfMS5Mb29rdXBEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQsXG4gICAgTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZDogTWVyZ2VEZXZlbG9wZXJJZGVudGl0aWVzQ29tbWFuZF8xLk1lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmQsXG4gICAgU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kOiBTZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmRfMS5TZXRJZGVudGl0eVBvb2xSb2xlc0NvbW1hbmQsXG4gICAgU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZDogU2V0UHJpbmNpcGFsVGFnQXR0cmlidXRlTWFwQ29tbWFuZF8xLlNldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmQsXG4gICAgVGFnUmVzb3VyY2VDb21tYW5kOiBUYWdSZXNvdXJjZUNvbW1hbmRfMS5UYWdSZXNvdXJjZUNvbW1hbmQsXG4gICAgVW5saW5rRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kOiBVbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmRfMS5VbmxpbmtEZXZlbG9wZXJJZGVudGl0eUNvbW1hbmQsXG4gICAgVW5saW5rSWRlbnRpdHlDb21tYW5kOiBVbmxpbmtJZGVudGl0eUNvbW1hbmRfMS5VbmxpbmtJZGVudGl0eUNvbW1hbmQsXG4gICAgVW50YWdSZXNvdXJjZUNvbW1hbmQ6IFVudGFnUmVzb3VyY2VDb21tYW5kXzEuVW50YWdSZXNvdXJjZUNvbW1hbmQsXG4gICAgVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZDogVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZF8xLlVwZGF0ZUlkZW50aXR5UG9vbENvbW1hbmQsXG59O1xuY2xhc3MgQ29nbml0b0lkZW50aXR5IGV4dGVuZHMgQ29nbml0b0lkZW50aXR5Q2xpZW50XzEuQ29nbml0b0lkZW50aXR5Q2xpZW50IHtcbn1cbmV4cG9ydHMuQ29nbml0b0lkZW50aXR5ID0gQ29nbml0b0lkZW50aXR5O1xuKDAsIHNtaXRoeV9jbGllbnRfMS5jcmVhdGVBZ2dyZWdhdGVkQ2xpZW50KShjb21tYW5kcywgQ29nbml0b0lkZW50aXR5KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQ3JlYXRlSWRlbnRpdHlQb29sQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9EZWxldGVJZGVudGl0aWVzQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9EZWxldGVJZGVudGl0eVBvb2xDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Rlc2NyaWJlSWRlbnRpdHlDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Rlc2NyaWJlSWRlbnRpdHlQb29sQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRJZENvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vR2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0dldE9wZW5JZFRva2VuQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRPcGVuSWRUb2tlbkZvckRldmVsb3BlcklkZW50aXR5Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRQcmluY2lwYWxUYWdBdHRyaWJ1dGVNYXBDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xpc3RJZGVudGl0aWVzQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9MaXN0SWRlbnRpdHlQb29sc0NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTG9va3VwRGV2ZWxvcGVySWRlbnRpdHlDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL01lcmdlRGV2ZWxvcGVySWRlbnRpdGllc0NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU2V0SWRlbnRpdHlQb29sUm9sZXNDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NldFByaW5jaXBhbFRhZ0F0dHJpYnV0ZU1hcENvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVGFnUmVzb3VyY2VDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1VubGlua0RldmVsb3BlcklkZW50aXR5Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9VbmxpbmtJZGVudGl0eUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVW50YWdSZXNvdXJjZUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVXBkYXRlSWRlbnRpdHlQb29sQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFnaW5hdGVMaXN0SWRlbnRpdHlQb29scyA9IHZvaWQgMDtcbmNvbnN0IENvZ25pdG9JZGVudGl0eUNsaWVudF8xID0gcmVxdWlyZShcIi4uL0NvZ25pdG9JZGVudGl0eUNsaWVudFwiKTtcbmNvbnN0IExpc3RJZGVudGl0eVBvb2xzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xpc3RJZGVudGl0eVBvb2xzQ29tbWFuZFwiKTtcbmNvbnN0IG1ha2VQYWdlZENsaWVudFJlcXVlc3QgPSBhc3luYyAoY2xpZW50LCBpbnB1dCwgLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2VuZChuZXcgTGlzdElkZW50aXR5UG9vbHNDb21tYW5kXzEuTGlzdElkZW50aXR5UG9vbHNDb21tYW5kKGlucHV0KSwgLi4uYXJncyk7XG59O1xuYXN5bmMgZnVuY3Rpb24qIHBhZ2luYXRlTGlzdElkZW50aXR5UG9vbHMoY29uZmlnLCBpbnB1dCwgLi4uYWRkaXRpb25hbEFyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IGNvbmZpZy5zdGFydGluZ1Rva2VuIHx8IHVuZGVmaW5lZDtcbiAgICBsZXQgaGFzTmV4dCA9IHRydWU7XG4gICAgbGV0IHBhZ2U7XG4gICAgd2hpbGUgKGhhc05leHQpIHtcbiAgICAgICAgaW5wdXQuTmV4dFRva2VuID0gdG9rZW47XG4gICAgICAgIGlucHV0W1wiTWF4UmVzdWx0c1wiXSA9IGNvbmZpZy5wYWdlU2l6ZTtcbiAgICAgICAgaWYgKGNvbmZpZy5jbGllbnQgaW5zdGFuY2VvZiBDb2duaXRvSWRlbnRpdHlDbGllbnRfMS5Db2duaXRvSWRlbnRpdHlDbGllbnQpIHtcbiAgICAgICAgICAgIHBhZ2UgPSBhd2FpdCBtYWtlUGFnZWRDbGllbnRSZXF1ZXN0KGNvbmZpZy5jbGllbnQsIGlucHV0LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2xpZW50LCBleHBlY3RlZCBDb2duaXRvSWRlbnRpdHkgfCBDb2duaXRvSWRlbnRpdHlDbGllbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQgcGFnZTtcbiAgICAgICAgY29uc3QgcHJldlRva2VuID0gdG9rZW47XG4gICAgICAgIHRva2VuID0gcGFnZS5OZXh0VG9rZW47XG4gICAgICAgIGhhc05leHQgPSAhISh0b2tlbiAmJiAoIWNvbmZpZy5zdG9wT25TYW1lVG9rZW4gfHwgdG9rZW4gIT09IHByZXZUb2tlbikpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5wYWdpbmF0ZUxpc3RJZGVudGl0eVBvb2xzID0gcGFnaW5hdGVMaXN0SWRlbnRpdHlQb29scztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSW50ZXJmYWNlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9MaXN0SWRlbnRpdHlQb29sc1BhZ2luYXRvclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc18wXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQ29nbml0b0lkZW50aXR5Q2xpZW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0NvZ25pdG9JZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYWdpbmF0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc1wiKSwgZXhwb3J0cyk7XG52YXIgQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vbW9kZWxzL0NvZ25pdG9JZGVudGl0eVNlcnZpY2VFeGNlcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb2duaXRvSWRlbnRpdHlTZXJ2aWNlRXhjZXB0aW9uXzEuQ29nbml0b0lkZW50aXR5U2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVMb2dpbnMgPSB2b2lkIDA7XG5mdW5jdGlvbiByZXNvbHZlTG9naW5zKGxvZ2lucykge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhsb2dpbnMpLnJlZHVjZSgoYXJyLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuT3JQcm92aWRlciA9IGxvZ2luc1tuYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbk9yUHJvdmlkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKFtuYW1lLCB0b2tlbk9yUHJvdmlkZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFyci5wdXNoKHRva2VuT3JQcm92aWRlcigpLnRoZW4oKHRva2VuKSA9PiBbbmFtZSwgdG9rZW5dKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSkpLnRoZW4oKHJlc29sdmVkUGFpcnMpID0+IHJlc29sdmVkUGFpcnMucmVkdWNlKChsb2dpbnMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBsb2dpbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gbG9naW5zO1xuICAgIH0sIHt9KSk7XG59XG5leHBvcnRzLnJlc29sdmVMb2dpbnMgPSByZXNvbHZlTG9naW5zO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUNvZ25pdG9JZGVudGl0eSA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9jb2duaXRvX2lkZW50aXR5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHlcIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgcmVzb2x2ZUxvZ2luc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZUxvZ2luc1wiKTtcbmZ1bmN0aW9uIGZyb21Db2duaXRvSWRlbnRpdHkocGFyYW1ldGVycykge1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgQ3JlZGVudGlhbHM6IHsgQWNjZXNzS2V5SWQgPSB0aHJvd09uTWlzc2luZ0FjY2Vzc0tleUlkKCksIEV4cGlyYXRpb24sIFNlY3JldEtleSA9IHRocm93T25NaXNzaW5nU2VjcmV0S2V5KCksIFNlc3Npb25Ub2tlbiwgfSA9IHRocm93T25NaXNzaW5nQ3JlZGVudGlhbHMoKSwgfSA9IGF3YWl0IHBhcmFtZXRlcnMuY2xpZW50LnNlbmQobmV3IGNsaWVudF9jb2duaXRvX2lkZW50aXR5XzEuR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eUNvbW1hbmQoe1xuICAgICAgICAgICAgQ3VzdG9tUm9sZUFybjogcGFyYW1ldGVycy5jdXN0b21Sb2xlQXJuLFxuICAgICAgICAgICAgSWRlbnRpdHlJZDogcGFyYW1ldGVycy5pZGVudGl0eUlkLFxuICAgICAgICAgICAgTG9naW5zOiBwYXJhbWV0ZXJzLmxvZ2lucyA/IGF3YWl0ICgwLCByZXNvbHZlTG9naW5zXzEucmVzb2x2ZUxvZ2lucykocGFyYW1ldGVycy5sb2dpbnMpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZGVudGl0eUlkOiBwYXJhbWV0ZXJzLmlkZW50aXR5SWQsXG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDogQWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IFNlY3JldEtleSxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogU2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9O1xufVxuZXhwb3J0cy5mcm9tQ29nbml0b0lkZW50aXR5ID0gZnJvbUNvZ25pdG9JZGVudGl0eTtcbmZ1bmN0aW9uIHRocm93T25NaXNzaW5nQWNjZXNzS2V5SWQoKSB7XG4gICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiUmVzcG9uc2UgZnJvbSBBbWF6b24gQ29nbml0byBjb250YWluZWQgbm8gYWNjZXNzIGtleSBJRFwiKTtcbn1cbmZ1bmN0aW9uIHRocm93T25NaXNzaW5nQ3JlZGVudGlhbHMoKSB7XG4gICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiUmVzcG9uc2UgZnJvbSBBbWF6b24gQ29nbml0byBjb250YWluZWQgbm8gY3JlZGVudGlhbHNcIik7XG59XG5mdW5jdGlvbiB0aHJvd09uTWlzc2luZ1NlY3JldEtleSgpIHtcbiAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJSZXNwb25zZSBmcm9tIEFtYXpvbiBDb2duaXRvIGNvbnRhaW5lZCBubyBzZWNyZXQga2V5XCIpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5kZXhlZERiU3RvcmFnZSA9IHZvaWQgMDtcbmNvbnN0IFNUT1JFX05BTUUgPSBcIklkZW50aXR5SWRzXCI7XG5jbGFzcyBJbmRleGVkRGJTdG9yYWdlIHtcbiAgICBjb25zdHJ1Y3RvcihkYk5hbWUgPSBcImF3czpjb2duaXRvLWlkZW50aXR5LWlkc1wiKSB7XG4gICAgICAgIHRoaXMuZGJOYW1lID0gZGJOYW1lO1xuICAgIH1cbiAgICBnZXRJdGVtKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoT2JqZWN0U3RvcmUoXCJyZWFkb25seVwiLCAoc3RvcmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLmdldChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcS5yZXN1bHQgPyByZXEucmVzdWx0LnZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgfVxuICAgIHJlbW92ZUl0ZW0oa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhPYmplY3RTdG9yZShcInJlYWR3cml0ZVwiLCAoc3RvcmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXEub25lcnJvciA9ICgpID0+IHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldEl0ZW0oaWQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhPYmplY3RTdG9yZShcInJlYWR3cml0ZVwiLCAoc3RvcmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLnB1dCh7IGlkLCB2YWx1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXREYigpIHtcbiAgICAgICAgY29uc3Qgb3BlbkRiUmVxdWVzdCA9IHNlbGYuaW5kZXhlZERCLm9wZW4odGhpcy5kYk5hbWUsIDEpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgb3BlbkRiUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvcGVuRGJSZXF1ZXN0LnJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb3BlbkRiUmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChvcGVuRGJSZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBvcGVuRGJSZXF1ZXN0Lm9uYmxvY2tlZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiVW5hYmxlIHRvIGFjY2VzcyBEQlwiKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb3BlbkRiUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGIgPSBvcGVuRGJSZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICBkYi5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBvYmplY3Qgc3RvcmVcIikpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVfTkFNRSwgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2l0aE9iamVjdFN0b3JlKG1vZGUsIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYigpLnRoZW4oKGRiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFX05BTUUsIG1vZGUpO1xuICAgICAgICAgICAgdHgub25jb21wbGV0ZSA9ICgpID0+IGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QodHguZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYWN0aW9uKHR4Lm9iamVjdFN0b3JlKFNUT1JFX05BTUUpKSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5JbmRleGVkRGJTdG9yYWdlID0gSW5kZXhlZERiU3RvcmFnZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluTWVtb3J5U3RvcmFnZSA9IHZvaWQgMDtcbmNsYXNzIEluTWVtb3J5U3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3Ioc3RvcmUgPSB7fSkge1xuICAgICAgICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgfVxuICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGhpcy5zdG9yZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XTtcbiAgICB9XG4gICAgc2V0SXRlbShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuSW5NZW1vcnlTdG9yYWdlID0gSW5NZW1vcnlTdG9yYWdlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9jYWxTdG9yYWdlID0gdm9pZCAwO1xuY29uc3QgSW5kZXhlZERiU3RvcmFnZV8xID0gcmVxdWlyZShcIi4vSW5kZXhlZERiU3RvcmFnZVwiKTtcbmNvbnN0IEluTWVtb3J5U3RvcmFnZV8xID0gcmVxdWlyZShcIi4vSW5NZW1vcnlTdG9yYWdlXCIpO1xuY29uc3QgaW5NZW1vcnlTdG9yYWdlID0gbmV3IEluTWVtb3J5U3RvcmFnZV8xLkluTWVtb3J5U3RvcmFnZSgpO1xuZnVuY3Rpb24gbG9jYWxTdG9yYWdlKCkge1xuICAgIGlmICh0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiAmJiBzZWxmLmluZGV4ZWREQikge1xuICAgICAgICByZXR1cm4gbmV3IEluZGV4ZWREYlN0b3JhZ2VfMS5JbmRleGVkRGJTdG9yYWdlKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gICAgfVxuICAgIHJldHVybiBpbk1lbW9yeVN0b3JhZ2U7XG59XG5leHBvcnRzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Db2duaXRvSWRlbnRpdHlQb29sID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X2NvZ25pdG9faWRlbnRpdHlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eVwiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmcm9tQ29nbml0b0lkZW50aXR5XzEgPSByZXF1aXJlKFwiLi9mcm9tQ29nbml0b0lkZW50aXR5XCIpO1xuY29uc3QgbG9jYWxTdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9sb2NhbFN0b3JhZ2VcIik7XG5jb25zdCByZXNvbHZlTG9naW5zXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlTG9naW5zXCIpO1xuZnVuY3Rpb24gZnJvbUNvZ25pdG9JZGVudGl0eVBvb2woeyBhY2NvdW50SWQsIGNhY2hlID0gKDAsIGxvY2FsU3RvcmFnZV8xLmxvY2FsU3RvcmFnZSkoKSwgY2xpZW50LCBjdXN0b21Sb2xlQXJuLCBpZGVudGl0eVBvb2xJZCwgbG9naW5zLCB1c2VySWRlbnRpZmllciA9ICFsb2dpbnMgfHwgT2JqZWN0LmtleXMobG9naW5zKS5sZW5ndGggPT09IDAgPyBcIkFOT05ZTU9VU1wiIDogdW5kZWZpbmVkLCB9KSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB1c2VySWRlbnRpZmllciA/IGBhd3M6Y29nbml0by1pZGVudGl0eS1jcmVkZW50aWFsczoke2lkZW50aXR5UG9vbElkfToke3VzZXJJZGVudGlmaWVyfWAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHByb3ZpZGVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgaWRlbnRpdHlJZCA9IGNhY2hlS2V5ICYmIChhd2FpdCBjYWNoZS5nZXRJdGVtKGNhY2hlS2V5KSk7XG4gICAgICAgIGlmICghaWRlbnRpdHlJZCkge1xuICAgICAgICAgICAgY29uc3QgeyBJZGVudGl0eUlkID0gdGhyb3dPbk1pc3NpbmdJZCgpIH0gPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgY2xpZW50X2NvZ25pdG9faWRlbnRpdHlfMS5HZXRJZENvbW1hbmQoe1xuICAgICAgICAgICAgICAgIEFjY291bnRJZDogYWNjb3VudElkLFxuICAgICAgICAgICAgICAgIElkZW50aXR5UG9vbElkOiBpZGVudGl0eVBvb2xJZCxcbiAgICAgICAgICAgICAgICBMb2dpbnM6IGxvZ2lucyA/IGF3YWl0ICgwLCByZXNvbHZlTG9naW5zXzEucmVzb2x2ZUxvZ2lucykobG9naW5zKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlkZW50aXR5SWQgPSBJZGVudGl0eUlkO1xuICAgICAgICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGNhY2hlLnNldEl0ZW0oY2FjaGVLZXksIGlkZW50aXR5SWQpKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByb3ZpZGVyID0gKDAsIGZyb21Db2duaXRvSWRlbnRpdHlfMS5mcm9tQ29nbml0b0lkZW50aXR5KSh7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBjdXN0b21Sb2xlQXJuLFxuICAgICAgICAgICAgbG9naW5zLFxuICAgICAgICAgICAgaWRlbnRpdHlJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlcigpO1xuICAgIH07XG4gICAgcmV0dXJuICgpID0+IHByb3ZpZGVyKCkuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShjYWNoZS5yZW1vdmVJdGVtKGNhY2hlS2V5KSkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21Db2duaXRvSWRlbnRpdHlQb29sID0gZnJvbUNvZ25pdG9JZGVudGl0eVBvb2w7XG5mdW5jdGlvbiB0aHJvd09uTWlzc2luZ0lkKCkge1xuICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIlJlc3BvbnNlIGZyb20gQW1hem9uIENvZ25pdG8gY29udGFpbmVkIG5vIGlkZW50aXR5IElEXCIpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Db2duaXRvUHJvdmlkZXJQYXJhbWV0ZXJzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xvZ2luc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TdG9yYWdlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Db2duaXRvSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbUNvZ25pdG9JZGVudGl0eVBvb2xcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUNvZ25pdG9JZGVudGl0eSA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9jb2duaXRvX2lkZW50aXR5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHlcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX2NvZ25pdG9faWRlbnRpdHlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWNvZ25pdG8taWRlbnRpdHlcIik7XG5jb25zdCBmcm9tQ29nbml0b0lkZW50aXR5ID0gKG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2NvZ25pdG9faWRlbnRpdHlfMS5mcm9tQ29nbml0b0lkZW50aXR5KSh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGNsaWVudDogbmV3IGNsaWVudF9jb2duaXRvX2lkZW50aXR5XzEuQ29nbml0b0lkZW50aXR5Q2xpZW50KChfYSA9IG9wdGlvbnMuY2xpZW50Q29uZmlnKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5mcm9tQ29nbml0b0lkZW50aXR5ID0gZnJvbUNvZ25pdG9JZGVudGl0eTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Db2duaXRvSWRlbnRpdHlQb29sID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X2NvZ25pdG9faWRlbnRpdHlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtY29nbml0by1pZGVudGl0eVwiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfY29nbml0b19pZGVudGl0eV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eVwiKTtcbmNvbnN0IGZyb21Db2duaXRvSWRlbnRpdHlQb29sID0gKG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2NvZ25pdG9faWRlbnRpdHlfMS5mcm9tQ29nbml0b0lkZW50aXR5UG9vbCkoe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBjbGllbnQ6IG5ldyBjbGllbnRfY29nbml0b19pZGVudGl0eV8xLkNvZ25pdG9JZGVudGl0eUNsaWVudCgoX2EgPSBvcHRpb25zLmNsaWVudENvbmZpZykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZnJvbUNvZ25pdG9JZGVudGl0eVBvb2wgPSBmcm9tQ29nbml0b0lkZW50aXR5UG9vbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Db250YWluZXJNZXRhZGF0YSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kc1wiKTtcbmNvbnN0IGZyb21Db250YWluZXJNZXRhZGF0YSA9IChpbml0KSA9PiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUNvbnRhaW5lck1ldGFkYXRhKShpbml0KTtcbmV4cG9ydHMuZnJvbUNvbnRhaW5lck1ldGFkYXRhID0gZnJvbUNvbnRhaW5lck1ldGFkYXRhO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUVudiA9IGV4cG9ydHMuRU5WX0VYUElSQVRJT04gPSBleHBvcnRzLkVOVl9TRVNTSU9OID0gZXhwb3J0cy5FTlZfU0VDUkVUID0gZXhwb3J0cy5FTlZfS0VZID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmV4cG9ydHMuRU5WX0tFWSA9IFwiQVdTX0FDQ0VTU19LRVlfSURcIjtcbmV4cG9ydHMuRU5WX1NFQ1JFVCA9IFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXCI7XG5leHBvcnRzLkVOVl9TRVNTSU9OID0gXCJBV1NfU0VTU0lPTl9UT0tFTlwiO1xuZXhwb3J0cy5FTlZfRVhQSVJBVElPTiA9IFwiQVdTX0NSRURFTlRJQUxfRVhQSVJBVElPTlwiO1xuY29uc3QgZnJvbUVudiA9ICgpID0+IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhY2Nlc3NLZXlJZCA9IHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX0tFWV07XG4gICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfU0VDUkVUXTtcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBwcm9jZXNzLmVudltleHBvcnRzLkVOVl9TRVNTSU9OXTtcbiAgICBjb25zdCBleHBpcnkgPSBwcm9jZXNzLmVudltleHBvcnRzLkVOVl9FWFBJUkFUSU9OXTtcbiAgICBpZiAoYWNjZXNzS2V5SWQgJiYgc2VjcmV0QWNjZXNzS2V5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZCxcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgICAgIC4uLihzZXNzaW9uVG9rZW4gJiYgeyBzZXNzaW9uVG9rZW4gfSksXG4gICAgICAgICAgICAuLi4oZXhwaXJ5ICYmIHsgZXhwaXJhdGlvbjogbmV3IERhdGUoZXhwaXJ5KSB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgY3JlZGVudGlhbHMuXCIpO1xufTtcbmV4cG9ydHMuZnJvbUVudiA9IGZyb21FbnY7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21FbnZcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUVudiA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnZcIik7XG5jb25zdCBmcm9tRW52ID0gKCkgPT4gKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEuZnJvbUVudikoKTtcbmV4cG9ydHMuZnJvbUVudiA9IGZyb21FbnY7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRIb3N0SGVhZGVyUGx1Z2luID0gZXhwb3J0cy5ob3N0SGVhZGVyTWlkZGxld2FyZU9wdGlvbnMgPSBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlID0gZXhwb3J0cy5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCIpO1xuZnVuY3Rpb24gcmVzb2x2ZUhvc3RIZWFkZXJDb25maWcoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG59XG5leHBvcnRzLnJlc29sdmVIb3N0SGVhZGVyQ29uZmlnID0gcmVzb2x2ZUhvc3RIZWFkZXJDb25maWc7XG5jb25zdCBob3N0SGVhZGVyTWlkZGxld2FyZSA9IChvcHRpb25zKSA9PiAobmV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICBpZiAoIXByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKGFyZ3MucmVxdWVzdCkpXG4gICAgICAgIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXJncztcbiAgICBjb25zdCB7IGhhbmRsZXJQcm90b2NvbCA9IFwiXCIgfSA9IG9wdGlvbnMucmVxdWVzdEhhbmRsZXIubWV0YWRhdGEgfHwge307XG4gICAgaWYgKGhhbmRsZXJQcm90b2NvbC5pbmRleE9mKFwiaDJcIikgPj0gMCAmJiAhcmVxdWVzdC5oZWFkZXJzW1wiOmF1dGhvcml0eVwiXSkge1xuICAgICAgICBkZWxldGUgcmVxdWVzdC5oZWFkZXJzW1wiaG9zdFwiXTtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1wiOmF1dGhvcml0eVwiXSA9IFwiXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFyZXF1ZXN0LmhlYWRlcnNbXCJob3N0XCJdKSB7XG4gICAgICAgIGxldCBob3N0ID0gcmVxdWVzdC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHJlcXVlc3QucG9ydCAhPSBudWxsKVxuICAgICAgICAgICAgaG9zdCArPSBgOiR7cmVxdWVzdC5wb3J0fWA7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVyc1tcImhvc3RcIl0gPSBob3N0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChhcmdzKTtcbn07XG5leHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlID0gaG9zdEhlYWRlck1pZGRsZXdhcmU7XG5leHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgICBuYW1lOiBcImhvc3RIZWFkZXJNaWRkbGV3YXJlXCIsXG4gICAgc3RlcDogXCJidWlsZFwiLFxuICAgIHByaW9yaXR5OiBcImxvd1wiLFxuICAgIHRhZ3M6IFtcIkhPU1RcIl0sXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuY29uc3QgZ2V0SG9zdEhlYWRlclBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy5ob3N0SGVhZGVyTWlkZGxld2FyZSkob3B0aW9ucyksIGV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldEhvc3RIZWFkZXJQbHVnaW4gPSBnZXRIb3N0SGVhZGVyUGx1Z2luO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TG9nZ2VyUGx1Z2luID0gZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMubG9nZ2VyTWlkZGxld2FyZSA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlck1pZGRsZXdhcmUgPSAoKSA9PiAobmV4dCwgY29udGV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChhcmdzKTtcbiAgICAgICAgY29uc3QgeyBjbGllbnROYW1lLCBjb21tYW5kTmFtZSwgbG9nZ2VyLCBkeW5hbW9EYkRvY3VtZW50Q2xpZW50T3B0aW9ucyA9IHt9IH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCB7IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2csIG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nIH0gPSBkeW5hbW9EYkRvY3VtZW50Q2xpZW50T3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgPSBvdmVycmlkZUlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSBudWxsICYmIG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IHZvaWQgMCA/IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgOiBjb250ZXh0LmlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuICAgICAgICBjb25zdCBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cgPSBvdmVycmlkZU91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gbnVsbCAmJiBvdmVycmlkZU91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVPdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cgOiBjb250ZXh0Lm91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZztcbiAgICAgICAgY29uc3QgeyAkbWV0YWRhdGEsIC4uLm91dHB1dFdpdGhvdXRNZXRhZGF0YSB9ID0gcmVzcG9uc2Uub3V0cHV0O1xuICAgICAgICAoX2EgPSBsb2dnZXIgPT09IG51bGwgfHwgbG9nZ2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsb2dnZXIuaW5mbykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwobG9nZ2VyLCB7XG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dDogaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2coYXJncy5pbnB1dCksXG4gICAgICAgICAgICBvdXRwdXQ6IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyhvdXRwdXRXaXRob3V0TWV0YWRhdGEpLFxuICAgICAgICAgICAgbWV0YWRhdGE6ICRtZXRhZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50TmFtZSwgY29tbWFuZE5hbWUsIGxvZ2dlciwgZHluYW1vRGJEb2N1bWVudENsaWVudE9wdGlvbnMgPSB7fSB9ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgeyBvdmVycmlkZUlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nIH0gPSBkeW5hbW9EYkRvY3VtZW50Q2xpZW50T3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgPSBvdmVycmlkZUlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSBudWxsICYmIG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IHZvaWQgMCA/IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgOiBjb250ZXh0LmlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuICAgICAgICAoX2IgPSBsb2dnZXIgPT09IG51bGwgfHwgbG9nZ2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsb2dnZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGxvZ2dlciwge1xuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXQ6IGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nKGFyZ3MuaW5wdXQpLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBtZXRhZGF0YTogZXJyb3IuJG1ldGFkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufTtcbmV4cG9ydHMubG9nZ2VyTWlkZGxld2FyZSA9IGxvZ2dlck1pZGRsZXdhcmU7XG5leHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwibG9nZ2VyTWlkZGxld2FyZVwiLFxuICAgIHRhZ3M6IFtcIkxPR0dFUlwiXSxcbiAgICBzdGVwOiBcImluaXRpYWxpemVcIixcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRMb2dnZXJQbHVnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGQoKDAsIGV4cG9ydHMubG9nZ2VyTWlkZGxld2FyZSkoKSwgZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRMb2dnZXJQbHVnaW4gPSBnZXRMb2dnZXJQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xvZ2dlck1pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luID0gZXhwb3J0cy5hZGRSZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMucmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZSA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgVFJBQ0VfSURfSEVBREVSX05BTUUgPSBcIlgtQW16bi1UcmFjZS1JZFwiO1xuY29uc3QgRU5WX0xBTUJEQV9GVU5DVElPTl9OQU1FID0gXCJBV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUVcIjtcbmNvbnN0IEVOVl9UUkFDRV9JRCA9IFwiX1hfQU1aTl9UUkFDRV9JRFwiO1xuY29uc3QgcmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZSA9IChvcHRpb25zKSA9PiAobmV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICBjb25zdCB7IHJlcXVlc3QgfSA9IGFyZ3M7XG4gICAgaWYgKCFwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSB8fFxuICAgICAgICBvcHRpb25zLnJ1bnRpbWUgIT09IFwibm9kZVwiIHx8XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShUUkFDRV9JRF9IRUFERVJfTkFNRSkpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgfVxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHByb2Nlc3MuZW52W0VOVl9MQU1CREFfRlVOQ1RJT05fTkFNRV07XG4gICAgY29uc3QgdHJhY2VJZCA9IHByb2Nlc3MuZW52W0VOVl9UUkFDRV9JRF07XG4gICAgY29uc3Qgbm9uRW1wdHlTdHJpbmcgPSAoc3RyKSA9PiB0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiICYmIHN0ci5sZW5ndGggPiAwO1xuICAgIGlmIChub25FbXB0eVN0cmluZyhmdW5jdGlvbk5hbWUpICYmIG5vbkVtcHR5U3RyaW5nKHRyYWNlSWQpKSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVyc1tUUkFDRV9JRF9IRUFERVJfTkFNRV0gPSB0cmFjZUlkO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5yZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlID0gcmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZTtcbmV4cG9ydHMuYWRkUmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgc3RlcDogXCJidWlsZFwiLFxuICAgIHRhZ3M6IFtcIlJFQ1VSU0lPTl9ERVRFQ1RJT05cIl0sXG4gICAgbmFtZTogXCJyZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlXCIsXG4gICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgcHJpb3JpdHk6IFwibG93XCIsXG59O1xuY29uc3QgZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luID0gKG9wdGlvbnMpID0+ICh7XG4gICAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICAgICAgY2xpZW50U3RhY2suYWRkKCgwLCBleHBvcnRzLnJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmUpKG9wdGlvbnMpLCBleHBvcnRzLmFkZFJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldFJlY3Vyc2lvbkRldGVjdGlvblBsdWdpbiA9IGdldFJlY3Vyc2lvbkRldGVjdGlvblBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTaWdWNEF1dGhDb25maWcgPSBleHBvcnRzLnJlc29sdmVBd3NBdXRoQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHNpZ25hdHVyZV92NF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NpZ25hdHVyZS12NFwiKTtcbmNvbnN0IHV0aWxfbWlkZGxld2FyZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtbWlkZGxld2FyZVwiKTtcbmNvbnN0IENSRURFTlRJQUxfRVhQSVJFX1dJTkRPVyA9IDMwMDAwMDtcbmNvbnN0IHJlc29sdmVBd3NBdXRoQ29uZmlnID0gKGlucHV0KSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENyZWRzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgPyBub3JtYWxpemVDcmVkZW50aWFsUHJvdmlkZXIoaW5wdXQuY3JlZGVudGlhbHMpXG4gICAgICAgIDogaW5wdXQuY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcihpbnB1dCk7XG4gICAgY29uc3QgeyBzaWduaW5nRXNjYXBlUGF0aCA9IHRydWUsIHN5c3RlbUNsb2NrT2Zmc2V0ID0gaW5wdXQuc3lzdGVtQ2xvY2tPZmZzZXQgfHwgMCwgc2hhMjU2IH0gPSBpbnB1dDtcbiAgICBsZXQgc2lnbmVyO1xuICAgIGlmIChpbnB1dC5zaWduZXIpIHtcbiAgICAgICAgc2lnbmVyID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC5zaWduZXIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbnB1dC5yZWdpb25JbmZvUHJvdmlkZXIpIHtcbiAgICAgICAgc2lnbmVyID0gKCkgPT4gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC5yZWdpb24pKClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChyZWdpb24pID0+IFtcbiAgICAgICAgICAgIChhd2FpdCBpbnB1dC5yZWdpb25JbmZvUHJvdmlkZXIocmVnaW9uLCB7XG4gICAgICAgICAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBhd2FpdCBpbnB1dC51c2VGaXBzRW5kcG9pbnQoKSxcbiAgICAgICAgICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogYXdhaXQgaW5wdXQudXNlRHVhbHN0YWNrRW5kcG9pbnQoKSxcbiAgICAgICAgICAgIH0pKSB8fCB7fSxcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgXSlcbiAgICAgICAgICAgIC50aGVuKChbcmVnaW9uSW5mbywgcmVnaW9uXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSB9ID0gcmVnaW9uSW5mbztcbiAgICAgICAgICAgIGlucHV0LnNpZ25pbmdSZWdpb24gPSBpbnB1dC5zaWduaW5nUmVnaW9uIHx8IHNpZ25pbmdSZWdpb24gfHwgcmVnaW9uO1xuICAgICAgICAgICAgaW5wdXQuc2lnbmluZ05hbWUgPSBpbnB1dC5zaWduaW5nTmFtZSB8fCBzaWduaW5nU2VydmljZSB8fCBpbnB1dC5zZXJ2aWNlSWQ7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgICAgICAgICByZWdpb246IGlucHV0LnNpZ25pbmdSZWdpb24sXG4gICAgICAgICAgICAgICAgc2VydmljZTogaW5wdXQuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2hhMjU2LFxuICAgICAgICAgICAgICAgIHVyaUVzY2FwZVBhdGg6IHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFNpZ25lckN0b3IgPSBpbnB1dC5zaWduZXJDb25zdHJ1Y3RvciB8fCBzaWduYXR1cmVfdjRfMS5TaWduYXR1cmVWNDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmVyQ3RvcihwYXJhbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNpZ25lciA9IGFzeW5jIChhdXRoU2NoZW1lKSA9PiB7XG4gICAgICAgICAgICBhdXRoU2NoZW1lID0gT2JqZWN0LmFzc2lnbih7fSwge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2lndjRcIixcbiAgICAgICAgICAgICAgICBzaWduaW5nTmFtZTogaW5wdXQuc2lnbmluZ05hbWUgfHwgaW5wdXQuZGVmYXVsdFNpZ25pbmdOYW1lLFxuICAgICAgICAgICAgICAgIHNpZ25pbmdSZWdpb246IGF3YWl0ICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikoaW5wdXQucmVnaW9uKSgpLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgfSwgYXV0aFNjaGVtZSk7XG4gICAgICAgICAgICBjb25zdCBzaWduaW5nUmVnaW9uID0gYXV0aFNjaGVtZS5zaWduaW5nUmVnaW9uO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmluZ1NlcnZpY2UgPSBhdXRoU2NoZW1lLnNpZ25pbmdOYW1lO1xuICAgICAgICAgICAgaW5wdXQuc2lnbmluZ1JlZ2lvbiA9IGlucHV0LnNpZ25pbmdSZWdpb24gfHwgc2lnbmluZ1JlZ2lvbjtcbiAgICAgICAgICAgIGlucHV0LnNpZ25pbmdOYW1lID0gaW5wdXQuc2lnbmluZ05hbWUgfHwgc2lnbmluZ1NlcnZpY2UgfHwgaW5wdXQuc2VydmljZUlkO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBub3JtYWxpemVkQ3JlZHMsXG4gICAgICAgICAgICAgICAgcmVnaW9uOiBpbnB1dC5zaWduaW5nUmVnaW9uLFxuICAgICAgICAgICAgICAgIHNlcnZpY2U6IGlucHV0LnNpZ25pbmdOYW1lLFxuICAgICAgICAgICAgICAgIHNoYTI1NixcbiAgICAgICAgICAgICAgICB1cmlFc2NhcGVQYXRoOiBzaWduaW5nRXNjYXBlUGF0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBTaWduZXJDdG9yID0gaW5wdXQuc2lnbmVyQ29uc3RydWN0b3IgfHwgc2lnbmF0dXJlX3Y0XzEuU2lnbmF0dXJlVjQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25lckN0b3IocGFyYW1zKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHN5c3RlbUNsb2NrT2Zmc2V0LFxuICAgICAgICBzaWduaW5nRXNjYXBlUGF0aCxcbiAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgc2lnbmVyLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlQXdzQXV0aENvbmZpZyA9IHJlc29sdmVBd3NBdXRoQ29uZmlnO1xuY29uc3QgcmVzb2x2ZVNpZ1Y0QXV0aENvbmZpZyA9IChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDcmVkcyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgICAgID8gbm9ybWFsaXplQ3JlZGVudGlhbFByb3ZpZGVyKGlucHV0LmNyZWRlbnRpYWxzKVxuICAgICAgICA6IGlucHV0LmNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXIoaW5wdXQpO1xuICAgIGNvbnN0IHsgc2lnbmluZ0VzY2FwZVBhdGggPSB0cnVlLCBzeXN0ZW1DbG9ja09mZnNldCA9IGlucHV0LnN5c3RlbUNsb2NrT2Zmc2V0IHx8IDAsIHNoYTI1NiB9ID0gaW5wdXQ7XG4gICAgbGV0IHNpZ25lcjtcbiAgICBpZiAoaW5wdXQuc2lnbmVyKSB7XG4gICAgICAgIHNpZ25lciA9ICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikoaW5wdXQuc2lnbmVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNpZ25lciA9ICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikobmV3IHNpZ25hdHVyZV92NF8xLlNpZ25hdHVyZVY0KHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBub3JtYWxpemVkQ3JlZHMsXG4gICAgICAgICAgICByZWdpb246IGlucHV0LnJlZ2lvbixcbiAgICAgICAgICAgIHNlcnZpY2U6IGlucHV0LnNpZ25pbmdOYW1lLFxuICAgICAgICAgICAgc2hhMjU2LFxuICAgICAgICAgICAgdXJpRXNjYXBlUGF0aDogc2lnbmluZ0VzY2FwZVBhdGgsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHN5c3RlbUNsb2NrT2Zmc2V0LFxuICAgICAgICBzaWduaW5nRXNjYXBlUGF0aCxcbiAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgc2lnbmVyLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlU2lnVjRBdXRoQ29uZmlnID0gcmVzb2x2ZVNpZ1Y0QXV0aENvbmZpZztcbmNvbnN0IG5vcm1hbGl6ZUNyZWRlbnRpYWxQcm92aWRlciA9IChjcmVkZW50aWFscykgPT4ge1xuICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEubWVtb2l6ZSkoY3JlZGVudGlhbHMsIChjcmVkZW50aWFscykgPT4gY3JlZGVudGlhbHMuZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBjcmVkZW50aWFscy5leHBpcmF0aW9uLmdldFRpbWUoKSAtIERhdGUubm93KCkgPCBDUkVERU5USUFMX0VYUElSRV9XSU5ET1csIChjcmVkZW50aWFscykgPT4gY3JlZGVudGlhbHMuZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikoY3JlZGVudGlhbHMpO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNrZXdDb3JyZWN0ZWREYXRlID0gdm9pZCAwO1xuY29uc3QgZ2V0U2tld0NvcnJlY3RlZERhdGUgPSAoc3lzdGVtQ2xvY2tPZmZzZXQpID0+IG5ldyBEYXRlKERhdGUubm93KCkgKyBzeXN0ZW1DbG9ja09mZnNldCk7XG5leHBvcnRzLmdldFNrZXdDb3JyZWN0ZWREYXRlID0gZ2V0U2tld0NvcnJlY3RlZERhdGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0Nsb2NrU2tld2VkID0gdm9pZCAwO1xuY29uc3QgZ2V0U2tld0NvcnJlY3RlZERhdGVfMSA9IHJlcXVpcmUoXCIuL2dldFNrZXdDb3JyZWN0ZWREYXRlXCIpO1xuY29uc3QgaXNDbG9ja1NrZXdlZCA9IChjbG9ja1RpbWUsIHN5c3RlbUNsb2NrT2Zmc2V0KSA9PiBNYXRoLmFicygoMCwgZ2V0U2tld0NvcnJlY3RlZERhdGVfMS5nZXRTa2V3Q29ycmVjdGVkRGF0ZSkoc3lzdGVtQ2xvY2tPZmZzZXQpLmdldFRpbWUoKSAtIGNsb2NrVGltZSkgPj0gMzAwMDAwO1xuZXhwb3J0cy5pc0Nsb2NrU2tld2VkID0gaXNDbG9ja1NrZXdlZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldCA9IHZvaWQgMDtcbmNvbnN0IGlzQ2xvY2tTa2V3ZWRfMSA9IHJlcXVpcmUoXCIuL2lzQ2xvY2tTa2V3ZWRcIik7XG5jb25zdCBnZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQgPSAoY2xvY2tUaW1lLCBjdXJyZW50U3lzdGVtQ2xvY2tPZmZzZXQpID0+IHtcbiAgICBjb25zdCBjbG9ja1RpbWVJbk1zID0gRGF0ZS5wYXJzZShjbG9ja1RpbWUpO1xuICAgIGlmICgoMCwgaXNDbG9ja1NrZXdlZF8xLmlzQ2xvY2tTa2V3ZWQpKGNsb2NrVGltZUluTXMsIGN1cnJlbnRTeXN0ZW1DbG9ja09mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGNsb2NrVGltZUluTXMgLSBEYXRlLm5vdygpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFN5c3RlbUNsb2NrT2Zmc2V0O1xufTtcbmV4cG9ydHMuZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0ID0gZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2lnVjRBdXRoUGx1Z2luID0gZXhwb3J0cy5nZXRBd3NBdXRoUGx1Z2luID0gZXhwb3J0cy5hd3NBdXRoTWlkZGxld2FyZU9wdGlvbnMgPSBleHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBnZXRTa2V3Q29ycmVjdGVkRGF0ZV8xID0gcmVxdWlyZShcIi4vdXRpbHMvZ2V0U2tld0NvcnJlY3RlZERhdGVcIik7XG5jb25zdCBnZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXRfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL2dldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldFwiKTtcbmNvbnN0IGF3c0F1dGhNaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyBmdW5jdGlvbiAoYXJncykge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBpZiAoIXByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKGFyZ3MucmVxdWVzdCkpXG4gICAgICAgIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgIGNvbnN0IGF1dGhTY2hlbWUgPSAoX2MgPSAoX2IgPSAoX2EgPSBjb250ZXh0LmVuZHBvaW50VjIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wcm9wZXJ0aWVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYXV0aFNjaGVtZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1swXTtcbiAgICBjb25zdCBtdWx0aVJlZ2lvbk92ZXJyaWRlID0gKGF1dGhTY2hlbWUgPT09IG51bGwgfHwgYXV0aFNjaGVtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXV0aFNjaGVtZS5uYW1lKSA9PT0gXCJzaWd2NGFcIiA/IChfZCA9IGF1dGhTY2hlbWUgPT09IG51bGwgfHwgYXV0aFNjaGVtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXV0aFNjaGVtZS5zaWduaW5nUmVnaW9uU2V0KSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Quam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2lnbmVyID0gYXdhaXQgb3B0aW9ucy5zaWduZXIoYXV0aFNjaGVtZSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV4dCh7XG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICAgIHJlcXVlc3Q6IGF3YWl0IHNpZ25lci5zaWduKGFyZ3MucmVxdWVzdCwge1xuICAgICAgICAgICAgc2lnbmluZ0RhdGU6ICgwLCBnZXRTa2V3Q29ycmVjdGVkRGF0ZV8xLmdldFNrZXdDb3JyZWN0ZWREYXRlKShvcHRpb25zLnN5c3RlbUNsb2NrT2Zmc2V0KSxcbiAgICAgICAgICAgIHNpZ25pbmdSZWdpb246IG11bHRpUmVnaW9uT3ZlcnJpZGUgfHwgY29udGV4dFtcInNpZ25pbmdfcmVnaW9uXCJdLFxuICAgICAgICAgICAgc2lnbmluZ1NlcnZpY2U6IGNvbnRleHRbXCJzaWduaW5nX3NlcnZpY2VcIl0sXG4gICAgICAgIH0pLFxuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNlcnZlclRpbWUgPSAoX2EgPSBlcnJvci5TZXJ2ZXJUaW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBnZXREYXRlSGVhZGVyKGVycm9yLiRyZXNwb25zZSk7XG4gICAgICAgIGlmIChzZXJ2ZXJUaW1lKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN5c3RlbUNsb2NrT2Zmc2V0ID0gKDAsIGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldF8xLmdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldCkoc2VydmVyVGltZSwgb3B0aW9ucy5zeXN0ZW1DbG9ja09mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgY29uc3QgZGF0ZUhlYWRlciA9IGdldERhdGVIZWFkZXIob3V0cHV0LnJlc3BvbnNlKTtcbiAgICBpZiAoZGF0ZUhlYWRlcikge1xuICAgICAgICBvcHRpb25zLnN5c3RlbUNsb2NrT2Zmc2V0ID0gKDAsIGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldF8xLmdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldCkoZGF0ZUhlYWRlciwgb3B0aW9ucy5zeXN0ZW1DbG9ja09mZnNldCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuZXhwb3J0cy5hd3NBdXRoTWlkZGxld2FyZSA9IGF3c0F1dGhNaWRkbGV3YXJlO1xuY29uc3QgZ2V0RGF0ZUhlYWRlciA9IChyZXNwb25zZSkgPT4geyB2YXIgX2EsIF9iLCBfYzsgcmV0dXJuIHByb3RvY29sX2h0dHBfMS5IdHRwUmVzcG9uc2UuaXNJbnN0YW5jZShyZXNwb25zZSkgPyAoX2IgPSAoX2EgPSByZXNwb25zZS5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGF0ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKF9jID0gcmVzcG9uc2UuaGVhZGVycykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLkRhdGUgOiB1bmRlZmluZWQ7IH07XG5leHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgICBuYW1lOiBcImF3c0F1dGhNaWRkbGV3YXJlXCIsXG4gICAgdGFnczogW1wiU0lHTkFUVVJFXCIsIFwiQVdTQVVUSFwiXSxcbiAgICByZWxhdGlvbjogXCJhZnRlclwiLFxuICAgIHRvTWlkZGxld2FyZTogXCJyZXRyeU1pZGRsZXdhcmVcIixcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRBd3NBdXRoUGx1Z2luID0gKG9wdGlvbnMpID0+ICh7XG4gICAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICAgICAgY2xpZW50U3RhY2suYWRkUmVsYXRpdmVUbygoMCwgZXhwb3J0cy5hd3NBdXRoTWlkZGxld2FyZSkob3B0aW9ucyksIGV4cG9ydHMuYXdzQXV0aE1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldEF3c0F1dGhQbHVnaW4gPSBnZXRBd3NBdXRoUGx1Z2luO1xuZXhwb3J0cy5nZXRTaWdWNEF1dGhQbHVnaW4gPSBleHBvcnRzLmdldEF3c0F1dGhQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb25zXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVN0c0F1dGhDb25maWcgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCByZXNvbHZlU3RzQXV0aENvbmZpZyA9IChpbnB1dCwgeyBzdHNDbGllbnRDdG9yIH0pID0+ICgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5yZXNvbHZlQXdzQXV0aENvbmZpZykoe1xuICAgIC4uLmlucHV0LFxuICAgIHN0c0NsaWVudEN0b3IsXG59KTtcbmV4cG9ydHMucmVzb2x2ZVN0c0F1dGhDb25maWcgPSByZXNvbHZlU3RzQXV0aENvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVVc2VyQWdlbnRDb25maWcgPSB2b2lkIDA7XG5mdW5jdGlvbiByZXNvbHZlVXNlckFnZW50Q29uZmlnKGlucHV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIGN1c3RvbVVzZXJBZ2VudDogdHlwZW9mIGlucHV0LmN1c3RvbVVzZXJBZ2VudCA9PT0gXCJzdHJpbmdcIiA/IFtbaW5wdXQuY3VzdG9tVXNlckFnZW50XV0gOiBpbnB1dC5jdXN0b21Vc2VyQWdlbnQsXG4gICAgfTtcbn1cbmV4cG9ydHMucmVzb2x2ZVVzZXJBZ2VudENvbmZpZyA9IHJlc29sdmVVc2VyQWdlbnRDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRQcmVmaXggPSBleHBvcnRzLnVzZURlZmF1bHRQYXJ0aXRpb25JbmZvID0gZXhwb3J0cy5zZXRQYXJ0aXRpb25JbmZvID0gZXhwb3J0cy5wYXJ0aXRpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgcGFydGl0aW9uc19qc29uXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9wYXJ0aXRpb25zLmpzb25cIikpO1xubGV0IHNlbGVjdGVkUGFydGl0aW9uc0luZm8gPSBwYXJ0aXRpb25zX2pzb25fMS5kZWZhdWx0O1xubGV0IHNlbGVjdGVkVXNlckFnZW50UHJlZml4ID0gXCJcIjtcbmNvbnN0IHBhcnRpdGlvbiA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgcGFydGl0aW9ucyB9ID0gc2VsZWN0ZWRQYXJ0aXRpb25zSW5mbztcbiAgICBmb3IgKGNvbnN0IHBhcnRpdGlvbiBvZiBwYXJ0aXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgcmVnaW9ucywgb3V0cHV0cyB9ID0gcGFydGl0aW9uO1xuICAgICAgICBmb3IgKGNvbnN0IFtyZWdpb24sIHJlZ2lvbkRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKHJlZ2lvbnMpKSB7XG4gICAgICAgICAgICBpZiAocmVnaW9uID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm91dHB1dHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlZ2lvbkRhdGEsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhcnRpdGlvbiBvZiBwYXJ0aXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgcmVnaW9uUmVnZXgsIG91dHB1dHMgfSA9IHBhcnRpdGlvbjtcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAocmVnaW9uUmVnZXgpLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLm91dHB1dHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IERFRkFVTFRfUEFSVElUSU9OID0gcGFydGl0aW9ucy5maW5kKChwYXJ0aXRpb24pID0+IHBhcnRpdGlvbi5pZCA9PT0gXCJhd3NcIik7XG4gICAgaWYgKCFERUZBVUxUX1BBUlRJVElPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCByZWdpb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUgcGFydGl0aW9uIGFycmF5IG9yIHJlZ2V4LFwiICtcbiAgICAgICAgICAgIFwiIGFuZCBkZWZhdWx0IHBhcnRpdGlvbiB3aXRoIGlkICdhd3MnIGRvZXNuJ3QgZXhpc3QuXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5ERUZBVUxUX1BBUlRJVElPTi5vdXRwdXRzLFxuICAgIH07XG59O1xuZXhwb3J0cy5wYXJ0aXRpb24gPSBwYXJ0aXRpb247XG5jb25zdCBzZXRQYXJ0aXRpb25JbmZvID0gKHBhcnRpdGlvbnNJbmZvLCB1c2VyQWdlbnRQcmVmaXggPSBcIlwiKSA9PiB7XG4gICAgc2VsZWN0ZWRQYXJ0aXRpb25zSW5mbyA9IHBhcnRpdGlvbnNJbmZvO1xuICAgIHNlbGVjdGVkVXNlckFnZW50UHJlZml4ID0gdXNlckFnZW50UHJlZml4O1xufTtcbmV4cG9ydHMuc2V0UGFydGl0aW9uSW5mbyA9IHNldFBhcnRpdGlvbkluZm87XG5jb25zdCB1c2VEZWZhdWx0UGFydGl0aW9uSW5mbyA9ICgpID0+IHtcbiAgICAoMCwgZXhwb3J0cy5zZXRQYXJ0aXRpb25JbmZvKShwYXJ0aXRpb25zX2pzb25fMS5kZWZhdWx0LCBcIlwiKTtcbn07XG5leHBvcnRzLnVzZURlZmF1bHRQYXJ0aXRpb25JbmZvID0gdXNlRGVmYXVsdFBhcnRpdGlvbkluZm87XG5jb25zdCBnZXRVc2VyQWdlbnRQcmVmaXggPSAoKSA9PiBzZWxlY3RlZFVzZXJBZ2VudFByZWZpeDtcbmV4cG9ydHMuZ2V0VXNlckFnZW50UHJlZml4ID0gZ2V0VXNlckFnZW50UHJlZml4O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVidWdJZCA9IHZvaWQgMDtcbmV4cG9ydHMuZGVidWdJZCA9IFwiZW5kcG9pbnRzXCI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0RlYnVnU3RyaW5nID0gdm9pZCAwO1xuZnVuY3Rpb24gdG9EZWJ1Z1N0cmluZyhpbnB1dCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChcInJlZlwiIGluIGlucHV0KSB7XG4gICAgICAgIHJldHVybiBgJCR7dG9EZWJ1Z1N0cmluZyhpbnB1dC5yZWYpfWA7XG4gICAgfVxuICAgIGlmIChcImZuXCIgaW4gaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGAke2lucHV0LmZufSgkeyhpbnB1dC5hcmd2IHx8IFtdKS5tYXAodG9EZWJ1Z1N0cmluZykuam9pbihcIiwgXCIpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5wdXQsIG51bGwsIDIpO1xufVxuZXhwb3J0cy50b0RlYnVnU3RyaW5nID0gdG9EZWJ1Z1N0cmluZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGVidWdJZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90b0RlYnVnU3RyaW5nXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVuZHBvaW50RXJyb3IgPSB2b2lkIDA7XG5jbGFzcyBFbmRwb2ludEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRW5kcG9pbnRFcnJvclwiO1xuICAgIH1cbn1cbmV4cG9ydHMuRW5kcG9pbnRFcnJvciA9IEVuZHBvaW50RXJyb3I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRW5kcG9pbnRFcnJvclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FbmRwb2ludFJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRXJyb3JSdWxlT2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1J1bGVTZXRPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVHJlZVJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2hhcmVkXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSXBBZGRyZXNzID0gdm9pZCAwO1xuY29uc3QgSVBfVjRfUkVHRVggPSBuZXcgUmVnRXhwKGBeKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30kYCk7XG5jb25zdCBpc0lwQWRkcmVzcyA9ICh2YWx1ZSkgPT4gSVBfVjRfUkVHRVgudGVzdCh2YWx1ZSkgfHwgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiXVwiKSk7XG5leHBvcnRzLmlzSXBBZGRyZXNzID0gaXNJcEFkZHJlc3M7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkSG9zdExhYmVsID0gdm9pZCAwO1xuY29uc3QgVkFMSURfSE9TVF9MQUJFTF9SRUdFWCA9IG5ldyBSZWdFeHAoYF4oPyEuKi0kKSg/IS0pW2EtekEtWjAtOS1dezEsNjN9JGApO1xuY29uc3QgaXNWYWxpZEhvc3RMYWJlbCA9ICh2YWx1ZSwgYWxsb3dTdWJEb21haW5zID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIWFsbG93U3ViRG9tYWlucykge1xuICAgICAgICByZXR1cm4gVkFMSURfSE9TVF9MQUJFTF9SRUdFWC50ZXN0KHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgbGFiZWxzID0gdmFsdWUuc3BsaXQoXCIuXCIpO1xuICAgIGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSB7XG4gICAgICAgIGlmICghKDAsIGV4cG9ydHMuaXNWYWxpZEhvc3RMYWJlbCkobGFiZWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0cy5pc1ZhbGlkSG9zdExhYmVsID0gaXNWYWxpZEhvc3RMYWJlbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQgPSB2b2lkIDA7XG5jb25zdCBpc0lwQWRkcmVzc18xID0gcmVxdWlyZShcIi4uL2lzSXBBZGRyZXNzXCIpO1xuY29uc3QgaXNWYWxpZEhvc3RMYWJlbF8xID0gcmVxdWlyZShcIi4uL2lzVmFsaWRIb3N0TGFiZWxcIik7XG5jb25zdCBpc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0ID0gKHZhbHVlLCBhbGxvd1N1YkRvbWFpbnMgPSBmYWxzZSkgPT4ge1xuICAgIGlmIChhbGxvd1N1YkRvbWFpbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB2YWx1ZS5zcGxpdChcIi5cIikpIHtcbiAgICAgICAgICAgIGlmICghKDAsIGV4cG9ydHMuaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldCkobGFiZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoISgwLCBpc1ZhbGlkSG9zdExhYmVsXzEuaXNWYWxpZEhvc3RMYWJlbCkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IDMgfHwgdmFsdWUubGVuZ3RoID4gNjMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgIT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKDAsIGlzSXBBZGRyZXNzXzEuaXNJcEFkZHJlc3MpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydHMuaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldCA9IGlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUFybiA9IHZvaWQgMDtcbmNvbnN0IHBhcnNlQXJuID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB2YWx1ZS5zcGxpdChcIjpcIik7XG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDYpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNvbnN0IFthcm4sIHBhcnRpdGlvbiwgc2VydmljZSwgcmVnaW9uLCBhY2NvdW50SWQsIC4uLnJlc291cmNlSWRdID0gc2VnbWVudHM7XG4gICAgaWYgKGFybiAhPT0gXCJhcm5cIiB8fCBwYXJ0aXRpb24gPT09IFwiXCIgfHwgc2VydmljZSA9PT0gXCJcIiB8fCByZXNvdXJjZUlkWzBdID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0aXRpb24sXG4gICAgICAgIHNlcnZpY2UsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgYWNjb3VudElkLFxuICAgICAgICByZXNvdXJjZUlkOiByZXNvdXJjZUlkWzBdLmluY2x1ZGVzKFwiL1wiKSA/IHJlc291cmNlSWRbMF0uc3BsaXQoXCIvXCIpIDogcmVzb3VyY2VJZCxcbiAgICB9O1xufTtcbmV4cG9ydHMucGFyc2VBcm4gPSBwYXJzZUFybjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZUFyblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJ0aXRpb25cIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbGVhbkVxdWFscyA9IHZvaWQgMDtcbmNvbnN0IGJvb2xlYW5FcXVhbHMgPSAodmFsdWUxLCB2YWx1ZTIpID0+IHZhbHVlMSA9PT0gdmFsdWUyO1xuZXhwb3J0cy5ib29sZWFuRXF1YWxzID0gYm9vbGVhbkVxdWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEF0dHJQYXRoTGlzdCA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBnZXRBdHRyUGF0aExpc3QgPSAocGF0aCkgPT4ge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgcGF0aExpc3QgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgY29uc3Qgc3F1YXJlQnJhY2tldEluZGV4ID0gcGFydC5pbmRleE9mKFwiW1wiKTtcbiAgICAgICAgaWYgKHNxdWFyZUJyYWNrZXRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoXCJdXCIpICE9PSBwYXJ0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBQYXRoOiAnJHtwYXRofScgZG9lcyBub3QgZW5kIHdpdGggJ10nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcnJheUluZGV4ID0gcGFydC5zbGljZShzcXVhcmVCcmFja2V0SW5kZXggKyAxLCAtMSk7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlSW50KGFycmF5SW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYEludmFsaWQgYXJyYXkgaW5kZXg6ICcke2FycmF5SW5kZXh9JyBpbiBwYXRoOiAnJHtwYXRofSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcXVhcmVCcmFja2V0SW5kZXggIT09IDApIHtcbiAgICAgICAgICAgICAgICBwYXRoTGlzdC5wdXNoKHBhcnQuc2xpY2UoMCwgc3F1YXJlQnJhY2tldEluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoTGlzdC5wdXNoKGFycmF5SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF0aExpc3QucHVzaChwYXJ0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aExpc3Q7XG59O1xuZXhwb3J0cy5nZXRBdHRyUGF0aExpc3QgPSBnZXRBdHRyUGF0aExpc3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBdHRyID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGdldEF0dHJQYXRoTGlzdF8xID0gcmVxdWlyZShcIi4vZ2V0QXR0clBhdGhMaXN0XCIpO1xuY29uc3QgZ2V0QXR0ciA9ICh2YWx1ZSwgcGF0aCkgPT4gKDAsIGdldEF0dHJQYXRoTGlzdF8xLmdldEF0dHJQYXRoTGlzdCkocGF0aCkucmVkdWNlKChhY2MsIGluZGV4KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBhY2MgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgSW5kZXggJyR7aW5kZXh9JyBpbiAnJHtwYXRofScgbm90IGZvdW5kIGluICcke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0nYCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWNjKSkge1xuICAgICAgICByZXR1cm4gYWNjW3BhcnNlSW50KGluZGV4KV07XG4gICAgfVxuICAgIHJldHVybiBhY2NbaW5kZXhdO1xufSwgdmFsdWUpO1xuZXhwb3J0cy5nZXRBdHRyID0gZ2V0QXR0cjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzU2V0ID0gdm9pZCAwO1xuY29uc3QgaXNTZXQgPSAodmFsdWUpID0+IHZhbHVlICE9IG51bGw7XG5leHBvcnRzLmlzU2V0ID0gaXNTZXQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub3QgPSB2b2lkIDA7XG5jb25zdCBub3QgPSAodmFsdWUpID0+ICF2YWx1ZTtcbmV4cG9ydHMubm90ID0gbm90O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBBdXRoTG9jYXRpb24gPSB2b2lkIDA7XG52YXIgSHR0cEF1dGhMb2NhdGlvbjtcbihmdW5jdGlvbiAoSHR0cEF1dGhMb2NhdGlvbikge1xuICAgIEh0dHBBdXRoTG9jYXRpb25bXCJIRUFERVJcIl0gPSBcImhlYWRlclwiO1xuICAgIEh0dHBBdXRoTG9jYXRpb25bXCJRVUVSWVwiXSA9IFwicXVlcnlcIjtcbn0pKEh0dHBBdXRoTG9jYXRpb24gPSBleHBvcnRzLkh0dHBBdXRoTG9jYXRpb24gfHwgKGV4cG9ydHMuSHR0cEF1dGhMb2NhdGlvbiA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbmZpZ1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tYW5hZ2VyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Bvb2xcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ib3N0QWRkcmVzc1R5cGUgPSB2b2lkIDA7XG52YXIgSG9zdEFkZHJlc3NUeXBlO1xuKGZ1bmN0aW9uIChIb3N0QWRkcmVzc1R5cGUpIHtcbiAgICBIb3N0QWRkcmVzc1R5cGVbXCJBQUFBXCJdID0gXCJBQUFBXCI7XG4gICAgSG9zdEFkZHJlc3NUeXBlW1wiQVwiXSA9IFwiQVwiO1xufSkoSG9zdEFkZHJlc3NUeXBlID0gZXhwb3J0cy5Ib3N0QWRkcmVzc1R5cGUgfHwgKGV4cG9ydHMuSG9zdEFkZHJlc3NUeXBlID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVuZHBvaW50VVJMU2NoZW1lID0gdm9pZCAwO1xudmFyIEVuZHBvaW50VVJMU2NoZW1lO1xuKGZ1bmN0aW9uIChFbmRwb2ludFVSTFNjaGVtZSkge1xuICAgIEVuZHBvaW50VVJMU2NoZW1lW1wiSFRUUFwiXSA9IFwiaHR0cFwiO1xuICAgIEVuZHBvaW50VVJMU2NoZW1lW1wiSFRUUFNcIl0gPSBcImh0dHBzXCI7XG59KShFbmRwb2ludFVSTFNjaGVtZSA9IGV4cG9ydHMuRW5kcG9pbnRVUkxTY2hlbWUgfHwgKGV4cG9ydHMuRW5kcG9pbnRVUkxTY2hlbWUgPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQW5vbnltb3VzSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQXdzQ3JlZGVudGlhbElkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0lkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xvZ2luSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVG9rZW5JZGVudGl0eVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlclByb3RvY29sID0gdm9pZCAwO1xudmFyIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2w7XG4oZnVuY3Rpb24gKFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wpIHtcbiAgICBSZXF1ZXN0SGFuZGxlclByb3RvY29sW1wiSFRUUF8wXzlcIl0gPSBcImh0dHAvMC45XCI7XG4gICAgUmVxdWVzdEhhbmRsZXJQcm90b2NvbFtcIkhUVFBfMV8wXCJdID0gXCJodHRwLzEuMFwiO1xuICAgIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xbXCJURFNfOF8wXCJdID0gXCJ0ZHMvOC4wXCI7XG59KShSZXF1ZXN0SGFuZGxlclByb3RvY29sID0gZXhwb3J0cy5SZXF1ZXN0SGFuZGxlclByb3RvY29sIHx8IChleHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Fib3J0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2F1dGhcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY2hlY2tzdW1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY2xpZW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29ubmVjdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jcmVkZW50aWFsc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jcnlwdG9cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZG5zXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2VuZHBvaW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V2ZW50U3RyZWFtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9nZ2VyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21pZGRsZXdhcmVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFnaW5hdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wcm9maWxlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3JlcXVlc3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzcG9uc2VcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmV0cnlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2VyZGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2hhcGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NpZ25hdHVyZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJlYW1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdG9rZW5cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHJhbnNmZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi93YWl0ZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VVUkwgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3R5cGVzXCIpO1xuY29uc3QgaXNJcEFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuL2lzSXBBZGRyZXNzXCIpO1xuY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgICBbdHlwZXNfMS5FbmRwb2ludFVSTFNjaGVtZS5IVFRQXTogODAsXG4gICAgW3R5cGVzXzEuRW5kcG9pbnRVUkxTY2hlbWUuSFRUUFNdOiA0NDMsXG59O1xuY29uc3QgcGFyc2VVUkwgPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCB3aGF0d2dVUkwgPSAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcImhvc3RuYW1lXCIgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBwb3J0LCBwcm90b2NvbCA9IFwiXCIsIHBhdGggPSBcIlwiLCBxdWVyeSA9IHt9IH0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3Byb3RvY29sfS8vJHtob3N0bmFtZX0ke3BvcnQgPyBgOiR7cG9ydH1gIDogXCJcIn0ke3BhdGh9YCk7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaCA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgICAgICAgICAgICAgICAgICAubWFwKChbaywgdl0pID0+IGAke2t9PSR7dn1gKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAoIXdoYXR3Z1VSTCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gcGFyc2UgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IGFzIGEgd2hhdHdnIFVSTC5gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVybFN0cmluZyA9IHdoYXR3Z1VSTC5ocmVmO1xuICAgIGNvbnN0IHsgaG9zdCwgaG9zdG5hbWUsIHBhdGhuYW1lLCBwcm90b2NvbCwgc2VhcmNoIH0gPSB3aGF0d2dVUkw7XG4gICAgaWYgKHNlYXJjaCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICAgIGlmICghT2JqZWN0LnZhbHVlcyh0eXBlc18xLkVuZHBvaW50VVJMU2NoZW1lKS5pbmNsdWRlcyhzY2hlbWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpc0lwID0gKDAsIGlzSXBBZGRyZXNzXzEuaXNJcEFkZHJlc3MpKGhvc3RuYW1lKTtcbiAgICBjb25zdCBpbnB1dENvbnRhaW5zRGVmYXVsdFBvcnQgPSB1cmxTdHJpbmcuaW5jbHVkZXMoYCR7aG9zdH06JHtERUZBVUxUX1BPUlRTW3NjaGVtZV19YCkgfHxcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5pbmNsdWRlcyhgJHtob3N0fToke0RFRkFVTFRfUE9SVFNbc2NoZW1lXX1gKSk7XG4gICAgY29uc3QgYXV0aG9yaXR5ID0gYCR7aG9zdH0ke2lucHV0Q29udGFpbnNEZWZhdWx0UG9ydCA/IGA6JHtERUZBVUxUX1BPUlRTW3NjaGVtZV19YCA6IGBgfWA7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1lLFxuICAgICAgICBhdXRob3JpdHksXG4gICAgICAgIHBhdGg6IHBhdGhuYW1lLFxuICAgICAgICBub3JtYWxpemVkUGF0aDogcGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpID8gcGF0aG5hbWUgOiBgJHtwYXRobmFtZX0vYCxcbiAgICAgICAgaXNJcCxcbiAgICB9O1xufTtcbmV4cG9ydHMucGFyc2VVUkwgPSBwYXJzZVVSTDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ0VxdWFscyA9IHZvaWQgMDtcbmNvbnN0IHN0cmluZ0VxdWFscyA9ICh2YWx1ZTEsIHZhbHVlMikgPT4gdmFsdWUxID09PSB2YWx1ZTI7XG5leHBvcnRzLnN0cmluZ0VxdWFscyA9IHN0cmluZ0VxdWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN1YnN0cmluZyA9IHZvaWQgMDtcbmNvbnN0IHN1YnN0cmluZyA9IChpbnB1dCwgc3RhcnQsIHN0b3AsIHJldmVyc2UpID0+IHtcbiAgICBpZiAoc3RhcnQgPj0gc3RvcCB8fCBpbnB1dC5sZW5ndGggPCBzdG9wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIXJldmVyc2UpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhzdGFydCwgc3RvcCk7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoaW5wdXQubGVuZ3RoIC0gc3RvcCwgaW5wdXQubGVuZ3RoIC0gc3RhcnQpO1xufTtcbmV4cG9ydHMuc3Vic3RyaW5nID0gc3Vic3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXJpRW5jb2RlID0gdm9pZCAwO1xuY29uc3QgdXJpRW5jb2RlID0gKHZhbHVlKSA9PiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLnJlcGxhY2UoL1shKicoKV0vZywgKGMpID0+IGAlJHtjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9YCk7XG5leHBvcnRzLnVyaUVuY29kZSA9IHVyaUVuY29kZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF3cyA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5leHBvcnRzLmF3cyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2F3c1wiKSk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ib29sZWFuRXF1YWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dldEF0dHJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNTZXRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNWYWxpZEhvc3RMYWJlbFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ub3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFyc2VVUkxcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyaW5nRXF1YWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N1YnN0cmluZ1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91cmlFbmNvZGVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVUZW1wbGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGxpYl8xID0gcmVxdWlyZShcIi4uL2xpYlwiKTtcbmNvbnN0IGV2YWx1YXRlVGVtcGxhdGUgPSAodGVtcGxhdGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBldmFsdWF0ZWRUZW1wbGF0ZUFyciA9IFtdO1xuICAgIGNvbnN0IHRlbXBsYXRlQ29udGV4dCA9IHtcbiAgICAgICAgLi4ub3B0aW9ucy5lbmRwb2ludFBhcmFtcyxcbiAgICAgICAgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsXG4gICAgfTtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgdGVtcGxhdGUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9wZW5pbmdCcmFjZUluZGV4ID0gdGVtcGxhdGUuaW5kZXhPZihcIntcIiwgY3VycmVudEluZGV4KTtcbiAgICAgICAgaWYgKG9wZW5pbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZS5zbGljZShjdXJyZW50SW5kZXgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGUuc2xpY2UoY3VycmVudEluZGV4LCBvcGVuaW5nQnJhY2VJbmRleCkpO1xuICAgICAgICBjb25zdCBjbG9zaW5nQnJhY2VJbmRleCA9IHRlbXBsYXRlLmluZGV4T2YoXCJ9XCIsIG9wZW5pbmdCcmFjZUluZGV4KTtcbiAgICAgICAgaWYgKGNsb3NpbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZS5zbGljZShvcGVuaW5nQnJhY2VJbmRleCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlbXBsYXRlW29wZW5pbmdCcmFjZUluZGV4ICsgMV0gPT09IFwie1wiICYmIHRlbXBsYXRlW2Nsb3NpbmdCcmFjZUluZGV4ICsgMV0gPT09IFwifVwiKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKHRlbXBsYXRlLnNsaWNlKG9wZW5pbmdCcmFjZUluZGV4ICsgMSwgY2xvc2luZ0JyYWNlSW5kZXgpKTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGNsb3NpbmdCcmFjZUluZGV4ICsgMjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGVtcGxhdGUuc3Vic3RyaW5nKG9wZW5pbmdCcmFjZUluZGV4ICsgMSwgY2xvc2luZ0JyYWNlSW5kZXgpO1xuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZS5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IFtyZWZOYW1lLCBhdHRyTmFtZV0gPSBwYXJhbWV0ZXJOYW1lLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2goKDAsIGxpYl8xLmdldEF0dHIpKHRlbXBsYXRlQ29udGV4dFtyZWZOYW1lXSwgYXR0ck5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGVDb250ZXh0W3BhcmFtZXRlck5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50SW5kZXggPSBjbG9zaW5nQnJhY2VJbmRleCArIDE7XG4gICAgfVxuICAgIHJldHVybiBldmFsdWF0ZWRUZW1wbGF0ZUFyci5qb2luKFwiXCIpO1xufTtcbmV4cG9ydHMuZXZhbHVhdGVUZW1wbGF0ZSA9IGV2YWx1YXRlVGVtcGxhdGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWZlcmVuY2VWYWx1ZSA9IHZvaWQgMDtcbmNvbnN0IGdldFJlZmVyZW5jZVZhbHVlID0gKHsgcmVmIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCByZWZlcmVuY2VSZWNvcmQgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMuZW5kcG9pbnRQYXJhbXMsXG4gICAgICAgIC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLFxuICAgIH07XG4gICAgcmV0dXJuIHJlZmVyZW5jZVJlY29yZFtyZWZdO1xufTtcbmV4cG9ydHMuZ2V0UmVmZXJlbmNlVmFsdWUgPSBnZXRSZWZlcmVuY2VWYWx1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlRXhwcmVzc2lvbiA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBjYWxsRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2NhbGxGdW5jdGlvblwiKTtcbmNvbnN0IGV2YWx1YXRlVGVtcGxhdGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlVGVtcGxhdGVcIik7XG5jb25zdCBnZXRSZWZlcmVuY2VWYWx1ZV8xID0gcmVxdWlyZShcIi4vZ2V0UmVmZXJlbmNlVmFsdWVcIik7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb24gPSAob2JqLCBrZXlOYW1lLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBldmFsdWF0ZVRlbXBsYXRlXzEuZXZhbHVhdGVUZW1wbGF0ZSkob2JqLCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAob2JqW1wiZm5cIl0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBjYWxsRnVuY3Rpb25fMS5jYWxsRnVuY3Rpb24pKG9iaiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9ialtcInJlZlwiXSkge1xuICAgICAgICByZXR1cm4gKDAsIGdldFJlZmVyZW5jZVZhbHVlXzEuZ2V0UmVmZXJlbmNlVmFsdWUpKG9iaiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYCcke2tleU5hbWV9JzogJHtTdHJpbmcob2JqKX0gaXMgbm90IGEgc3RyaW5nLCBmdW5jdGlvbiBvciByZWZlcmVuY2UuYCk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUV4cHJlc3Npb24gPSBldmFsdWF0ZUV4cHJlc3Npb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxsRnVuY3Rpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgbGliID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIi4uL2xpYlwiKSk7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXhwcmVzc2lvblwiKTtcbmNvbnN0IGNhbGxGdW5jdGlvbiA9ICh7IGZuLCBhcmd2IH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBldmFsdWF0ZWRBcmdzID0gYXJndi5tYXAoKGFyZykgPT4gW1wiYm9vbGVhblwiLCBcIm51bWJlclwiXS5pbmNsdWRlcyh0eXBlb2YgYXJnKSA/IGFyZyA6ICgwLCBldmFsdWF0ZUV4cHJlc3Npb25fMS5ldmFsdWF0ZUV4cHJlc3Npb24pKGFyZywgXCJhcmdcIiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBmbi5zcGxpdChcIi5cIikucmVkdWNlKChhY2MsIGtleSkgPT4gYWNjW2tleV0sIGxpYikoLi4uZXZhbHVhdGVkQXJncyk7XG59O1xuZXhwb3J0cy5jYWxsRnVuY3Rpb24gPSBjYWxsRnVuY3Rpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiLi4vZGVidWdcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgY2FsbEZ1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9jYWxsRnVuY3Rpb25cIik7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbiA9ICh7IGFzc2lnbiwgLi4uZm5BcmdzIH0sIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmIChhc3NpZ24gJiYgYXNzaWduIGluIG9wdGlvbnMucmVmZXJlbmNlUmVjb3JkKSB7XG4gICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYCcke2Fzc2lnbn0nIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBSZWZlcmVuY2UgUmVjb3JkLmApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9ICgwLCBjYWxsRnVuY3Rpb25fMS5jYWxsRnVuY3Rpb24pKGZuQXJncywgb3B0aW9ucyk7XG4gICAgKF9iID0gKF9hID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWJ1ZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGRlYnVnXzEuZGVidWdJZCwgYGV2YWx1YXRlQ29uZGl0aW9uOiAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKGZuQXJncyl9ID0gJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiB2YWx1ZSA9PT0gXCJcIiA/IHRydWUgOiAhIXZhbHVlLFxuICAgICAgICAuLi4oYXNzaWduICE9IG51bGwgJiYgeyB0b0Fzc2lnbjogeyBuYW1lOiBhc3NpZ24sIHZhbHVlIH0gfSksXG4gICAgfTtcbn07XG5leHBvcnRzLmV2YWx1YXRlQ29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4uL2RlYnVnXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlQ29uZGl0aW9uXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25zID0gKGNvbmRpdGlvbnMgPSBbXSwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgY29uZGl0aW9uc1JlZmVyZW5jZVJlY29yZCA9IHt9O1xuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByZXN1bHQsIHRvQXNzaWduIH0gPSAoMCwgZXZhbHVhdGVDb25kaXRpb25fMS5ldmFsdWF0ZUNvbmRpdGlvbikoY29uZGl0aW9uLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgcmVmZXJlbmNlUmVjb3JkOiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsXG4gICAgICAgICAgICAgICAgLi4uY29uZGl0aW9uc1JlZmVyZW5jZVJlY29yZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvQXNzaWduKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zUmVmZXJlbmNlUmVjb3JkW3RvQXNzaWduLm5hbWVdID0gdG9Bc3NpZ24udmFsdWU7XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZGVidWdfMS5kZWJ1Z0lkLCBgYXNzaWduOiAke3RvQXNzaWduLm5hbWV9IDo9ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykodG9Bc3NpZ24udmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3VsdDogdHJ1ZSwgcmVmZXJlbmNlUmVjb3JkOiBjb25kaXRpb25zUmVmZXJlbmNlUmVjb3JkIH07XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbnMgPSBldmFsdWF0ZUNvbmRpdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludEhlYWRlcnMgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUV4cHJlc3Npb25cIik7XG5jb25zdCBnZXRFbmRwb2ludEhlYWRlcnMgPSAoaGVhZGVycywgb3B0aW9ucykgPT4gT2JqZWN0LmVudHJpZXMoaGVhZGVycykucmVkdWNlKChhY2MsIFtoZWFkZXJLZXksIGhlYWRlclZhbF0pID0+ICh7XG4gICAgLi4uYWNjLFxuICAgIFtoZWFkZXJLZXldOiBoZWFkZXJWYWwubWFwKChoZWFkZXJWYWxFbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRFeHByID0gKDAsIGV2YWx1YXRlRXhwcmVzc2lvbl8xLmV2YWx1YXRlRXhwcmVzc2lvbikoaGVhZGVyVmFsRW50cnksIFwiSGVhZGVyIHZhbHVlIGVudHJ5XCIsIG9wdGlvbnMpO1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3NlZEV4cHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYEhlYWRlciAnJHtoZWFkZXJLZXl9JyB2YWx1ZSAnJHtwcm9jZXNzZWRFeHByfScgaXMgbm90IGEgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZEV4cHI7XG4gICAgfSksXG59KSwge30pO1xuZXhwb3J0cy5nZXRFbmRwb2ludEhlYWRlcnMgPSBnZXRFbmRwb2ludEhlYWRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnR5ID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlVGVtcGxhdGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlVGVtcGxhdGVcIik7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50UHJvcGVydGllc1wiKTtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydHkgPSAocHJvcGVydHksIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5Lm1hcCgocHJvcGVydHlFbnRyeSkgPT4gKDAsIGV4cG9ydHMuZ2V0RW5kcG9pbnRQcm9wZXJ0eSkocHJvcGVydHlFbnRyeSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wZXJ0eSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV2YWx1YXRlVGVtcGxhdGVfMS5ldmFsdWF0ZVRlbXBsYXRlKShwcm9wZXJ0eSwgb3B0aW9ucyk7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFVuZXhwZWN0ZWQgZW5kcG9pbnQgcHJvcGVydHk6ICR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIGdldEVuZHBvaW50UHJvcGVydGllc18xLmdldEVuZHBvaW50UHJvcGVydGllcykocHJvcGVydHksIG9wdGlvbnMpO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgVW5leHBlY3RlZCBlbmRwb2ludCBwcm9wZXJ0eSB0eXBlOiAke3R5cGVvZiBwcm9wZXJ0eX1gKTtcbiAgICB9XG59O1xuZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnR5ID0gZ2V0RW5kcG9pbnRQcm9wZXJ0eTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50UHJvcGVydGllcyA9IHZvaWQgMDtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydHlfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50UHJvcGVydHlcIik7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnRpZXMgPSAocHJvcGVydGllcywgb3B0aW9ucykgPT4gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykucmVkdWNlKChhY2MsIFtwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWxdKSA9PiAoe1xuICAgIC4uLmFjYyxcbiAgICBbcHJvcGVydHlLZXldOiAoMCwgZ2V0RW5kcG9pbnRQcm9wZXJ0eV8xLmdldEVuZHBvaW50UHJvcGVydHkpKHByb3BlcnR5VmFsLCBvcHRpb25zKSxcbn0pLCB7fSk7XG5leHBvcnRzLmdldEVuZHBvaW50UHJvcGVydGllcyA9IGdldEVuZHBvaW50UHJvcGVydGllcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50VXJsID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlRXhwcmVzc2lvbl8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFeHByZXNzaW9uXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRVcmwgPSAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gKDAsIGV2YWx1YXRlRXhwcmVzc2lvbl8xLmV2YWx1YXRlRXhwcmVzc2lvbikoZW5kcG9pbnRVcmwsIFwiRW5kcG9pbnQgVVJMXCIsIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwoZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29uc3RydWN0IFVSTCB3aXRoICR7ZXhwcmVzc2lvbn1gLCBlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBFbmRwb2ludCBVUkwgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dHlwZW9mIGV4cHJlc3Npb259YCk7XG59O1xuZXhwb3J0cy5nZXRFbmRwb2ludFVybCA9IGdldEVuZHBvaW50VXJsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVFbmRwb2ludFJ1bGUgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4uL2RlYnVnXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25zXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUNvbmRpdGlvbnNcIik7XG5jb25zdCBnZXRFbmRwb2ludEhlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50SGVhZGVyc1wiKTtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRVcmxfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50VXJsXCIpO1xuY29uc3QgZXZhbHVhdGVFbmRwb2ludFJ1bGUgPSAoZW5kcG9pbnRSdWxlLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IGNvbmRpdGlvbnMsIGVuZHBvaW50IH0gPSBlbmRwb2ludFJ1bGU7XG4gICAgY29uc3QgeyByZXN1bHQsIHJlZmVyZW5jZVJlY29yZCB9ID0gKDAsIGV2YWx1YXRlQ29uZGl0aW9uc18xLmV2YWx1YXRlQ29uZGl0aW9ucykoY29uZGl0aW9ucywgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbmRwb2ludFJ1bGVPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICByZWZlcmVuY2VSZWNvcmQ6IHsgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsIC4uLnJlZmVyZW5jZVJlY29yZCB9LFxuICAgIH07XG4gICAgY29uc3QgeyB1cmwsIHByb3BlcnRpZXMsIGhlYWRlcnMgfSA9IGVuZHBvaW50O1xuICAgIChfYiA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBkZWJ1Z18xLmRlYnVnSWQsIGBSZXNvbHZpbmcgZW5kcG9pbnQgZnJvbSB0ZW1wbGF0ZTogJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKShlbmRwb2ludCl9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKGhlYWRlcnMgIT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgIGhlYWRlcnM6ICgwLCBnZXRFbmRwb2ludEhlYWRlcnNfMS5nZXRFbmRwb2ludEhlYWRlcnMpKGhlYWRlcnMsIGVuZHBvaW50UnVsZU9wdGlvbnMpLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKHByb3BlcnRpZXMgIT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6ICgwLCBnZXRFbmRwb2ludFByb3BlcnRpZXNfMS5nZXRFbmRwb2ludFByb3BlcnRpZXMpKHByb3BlcnRpZXMsIGVuZHBvaW50UnVsZU9wdGlvbnMpLFxuICAgICAgICB9KSxcbiAgICAgICAgdXJsOiAoMCwgZ2V0RW5kcG9pbnRVcmxfMS5nZXRFbmRwb2ludFVybCkodXJsLCBlbmRwb2ludFJ1bGVPcHRpb25zKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZXZhbHVhdGVFbmRwb2ludFJ1bGUgPSBldmFsdWF0ZUVuZHBvaW50UnVsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlRXJyb3JSdWxlID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVDb25kaXRpb25zXCIpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUV4cHJlc3Npb25cIik7XG5jb25zdCBldmFsdWF0ZUVycm9yUnVsZSA9IChlcnJvclJ1bGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IGNvbmRpdGlvbnMsIGVycm9yIH0gPSBlcnJvclJ1bGU7XG4gICAgY29uc3QgeyByZXN1bHQsIHJlZmVyZW5jZVJlY29yZCB9ID0gKDAsIGV2YWx1YXRlQ29uZGl0aW9uc18xLmV2YWx1YXRlQ29uZGl0aW9ucykoY29uZGl0aW9ucywgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKCgwLCBldmFsdWF0ZUV4cHJlc3Npb25fMS5ldmFsdWF0ZUV4cHJlc3Npb24pKGVycm9yLCBcIkVycm9yXCIsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlUmVjb3JkOiB7IC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLCAuLi5yZWZlcmVuY2VSZWNvcmQgfSxcbiAgICB9KSk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUVycm9yUnVsZSA9IGV2YWx1YXRlRXJyb3JSdWxlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVUcmVlUnVsZSA9IHZvaWQgMDtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVDb25kaXRpb25zXCIpO1xuY29uc3QgZXZhbHVhdGVSdWxlc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVSdWxlc1wiKTtcbmNvbnN0IGV2YWx1YXRlVHJlZVJ1bGUgPSAodHJlZVJ1bGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IGNvbmRpdGlvbnMsIHJ1bGVzIH0gPSB0cmVlUnVsZTtcbiAgICBjb25zdCB7IHJlc3VsdCwgcmVmZXJlbmNlUmVjb3JkIH0gPSAoMCwgZXZhbHVhdGVDb25kaXRpb25zXzEuZXZhbHVhdGVDb25kaXRpb25zKShjb25kaXRpb25zLCBvcHRpb25zKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXZhbHVhdGVSdWxlc18xLmV2YWx1YXRlUnVsZXMpKHJ1bGVzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHJlZmVyZW5jZVJlY29yZDogeyAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCwgLi4ucmVmZXJlbmNlUmVjb3JkIH0sXG4gICAgfSk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZVRyZWVSdWxlID0gZXZhbHVhdGVUcmVlUnVsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlUnVsZXMgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVFbmRwb2ludFJ1bGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRW5kcG9pbnRSdWxlXCIpO1xuY29uc3QgZXZhbHVhdGVFcnJvclJ1bGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXJyb3JSdWxlXCIpO1xuY29uc3QgZXZhbHVhdGVUcmVlUnVsZV8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVUcmVlUnVsZVwiKTtcbmNvbnN0IGV2YWx1YXRlUnVsZXMgPSAocnVsZXMsIG9wdGlvbnMpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gXCJlbmRwb2ludFwiKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludE9yVW5kZWZpbmVkID0gKDAsIGV2YWx1YXRlRW5kcG9pbnRSdWxlXzEuZXZhbHVhdGVFbmRwb2ludFJ1bGUpKHJ1bGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50T3JVbmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnRPclVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChydWxlLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgKDAsIGV2YWx1YXRlRXJyb3JSdWxlXzEuZXZhbHVhdGVFcnJvclJ1bGUpKHJ1bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJ1bGUudHlwZSA9PT0gXCJ0cmVlXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50T3JVbmRlZmluZWQgPSAoMCwgZXZhbHVhdGVUcmVlUnVsZV8xLmV2YWx1YXRlVHJlZVJ1bGUpKHJ1bGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50T3JVbmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnRPclVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFVua25vd24gZW5kcG9pbnQgcnVsZTogJHtydWxlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFJ1bGVzIGV2YWx1YXRpb24gZmFpbGVkYCk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZVJ1bGVzID0gZXZhbHVhdGVSdWxlcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXZhbHVhdGVSdWxlc1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlRW5kcG9pbnQgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCByZXNvbHZlRW5kcG9pbnQgPSAocnVsZVNldE9iamVjdCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGNvbnN0IHsgZW5kcG9pbnRQYXJhbXMsIGxvZ2dlciB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IHBhcmFtZXRlcnMsIHJ1bGVzIH0gPSBydWxlU2V0T2JqZWN0O1xuICAgIChfYiA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBgJHtkZWJ1Z18xLmRlYnVnSWR9IEluaXRpYWwgRW5kcG9pbnRQYXJhbXM6ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykoZW5kcG9pbnRQYXJhbXMpfWApO1xuICAgIGNvbnN0IHBhcmFtc1dpdGhEZWZhdWx0ID0gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycylcbiAgICAgICAgLmZpbHRlcigoWywgdl0pID0+IHYuZGVmYXVsdCAhPSBudWxsKVxuICAgICAgICAubWFwKChbaywgdl0pID0+IFtrLCB2LmRlZmF1bHRdKTtcbiAgICBpZiAocGFyYW1zV2l0aERlZmF1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtwYXJhbUtleSwgcGFyYW1EZWZhdWx0VmFsdWVdIG9mIHBhcmFtc1dpdGhEZWZhdWx0KSB7XG4gICAgICAgICAgICBlbmRwb2ludFBhcmFtc1twYXJhbUtleV0gPSAoX2MgPSBlbmRwb2ludFBhcmFtc1twYXJhbUtleV0pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHBhcmFtRGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVpcmVkUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycylcbiAgICAgICAgLmZpbHRlcigoWywgdl0pID0+IHYucmVxdWlyZWQpXG4gICAgICAgIC5tYXAoKFtrXSkgPT4gayk7XG4gICAgZm9yIChjb25zdCByZXF1aXJlZFBhcmFtIG9mIHJlcXVpcmVkUGFyYW1zKSB7XG4gICAgICAgIGlmIChlbmRwb2ludFBhcmFtc1tyZXF1aXJlZFBhcmFtXSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogJyR7cmVxdWlyZWRQYXJhbX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnQgPSAoMCwgdXRpbHNfMS5ldmFsdWF0ZVJ1bGVzKShydWxlcywgeyBlbmRwb2ludFBhcmFtcywgbG9nZ2VyLCByZWZlcmVuY2VSZWNvcmQ6IHt9IH0pO1xuICAgIGlmICgoX2QgPSBvcHRpb25zLmVuZHBvaW50UGFyYW1zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuRW5kcG9pbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGdpdmVuRW5kcG9pbnQgPSBuZXcgVVJMKG9wdGlvbnMuZW5kcG9pbnRQYXJhbXMuRW5kcG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgeyBwcm90b2NvbCwgcG9ydCB9ID0gZ2l2ZW5FbmRwb2ludDtcbiAgICAgICAgICAgIGVuZHBvaW50LnVybC5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgICAgICAgICAgZW5kcG9pbnQudXJsLnBvcnQgPSBwb3J0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKF9mID0gKF9lID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5kZWJ1ZykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNhbGwoX2UsIGAke2RlYnVnXzEuZGVidWdJZH0gUmVzb2x2ZWQgZW5kcG9pbnQ6ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykoZW5kcG9pbnQpfWApO1xuICAgIHJldHVybiBlbmRwb2ludDtcbn07XG5leHBvcnRzLnJlc29sdmVFbmRwb2ludCA9IHJlc29sdmVFbmRwb2ludDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGliL2F3cy9wYXJ0aXRpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzb2x2ZUVuZHBvaW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVBX0VTQ0FQRV9SRUdFWCA9IGV4cG9ydHMuU1BBQ0UgPSBleHBvcnRzLlhfQU1aX1VTRVJfQUdFTlQgPSBleHBvcnRzLlVTRVJfQUdFTlQgPSB2b2lkIDA7XG5leHBvcnRzLlVTRVJfQUdFTlQgPSBcInVzZXItYWdlbnRcIjtcbmV4cG9ydHMuWF9BTVpfVVNFUl9BR0VOVCA9IFwieC1hbXotdXNlci1hZ2VudFwiO1xuZXhwb3J0cy5TUEFDRSA9IFwiIFwiO1xuZXhwb3J0cy5VQV9FU0NBUEVfUkVHRVggPSAvW15cXCFcXCNcXCRcXCVcXCZcXCdcXCpcXCtcXC1cXC5cXF5cXF9cXGBcXHxcXH5cXGRcXHddL2c7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRQbHVnaW4gPSBleHBvcnRzLmdldFVzZXJBZ2VudE1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy51c2VyQWdlbnRNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCB1dGlsX2VuZHBvaW50c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCB1c2VyQWdlbnRNaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UocmVxdWVzdCkpXG4gICAgICAgIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVxdWVzdDtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSAoKF9hID0gY29udGV4dCA9PT0gbnVsbCB8fCBjb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb250ZXh0LnVzZXJBZ2VudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcChlc2NhcGVVc2VyQWdlbnQpKSB8fCBbXTtcbiAgICBjb25zdCBkZWZhdWx0VXNlckFnZW50ID0gKGF3YWl0IG9wdGlvbnMuZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyKCkpLm1hcChlc2NhcGVVc2VyQWdlbnQpO1xuICAgIGNvbnN0IGN1c3RvbVVzZXJBZ2VudCA9ICgoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tVXNlckFnZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubWFwKGVzY2FwZVVzZXJBZ2VudCkpIHx8IFtdO1xuICAgIGNvbnN0IHByZWZpeCA9ICgwLCB1dGlsX2VuZHBvaW50c18xLmdldFVzZXJBZ2VudFByZWZpeCkoKTtcbiAgICBjb25zdCBzZGtVc2VyQWdlbnRWYWx1ZSA9IChwcmVmaXggPyBbcHJlZml4XSA6IFtdKVxuICAgICAgICAuY29uY2F0KFsuLi5kZWZhdWx0VXNlckFnZW50LCAuLi51c2VyQWdlbnQsIC4uLmN1c3RvbVVzZXJBZ2VudF0pXG4gICAgICAgIC5qb2luKGNvbnN0YW50c18xLlNQQUNFKTtcbiAgICBjb25zdCBub3JtYWxVQVZhbHVlID0gW1xuICAgICAgICAuLi5kZWZhdWx0VXNlckFnZW50LmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi5zdGFydHNXaXRoKFwiYXdzLXNkay1cIikpLFxuICAgICAgICAuLi5jdXN0b21Vc2VyQWdlbnQsXG4gICAgXS5qb2luKGNvbnN0YW50c18xLlNQQUNFKTtcbiAgICBpZiAob3B0aW9ucy5ydW50aW1lICE9PSBcImJyb3dzZXJcIikge1xuICAgICAgICBpZiAobm9ybWFsVUFWYWx1ZSkge1xuICAgICAgICAgICAgaGVhZGVyc1tjb25zdGFudHNfMS5YX0FNWl9VU0VSX0FHRU5UXSA9IGhlYWRlcnNbY29uc3RhbnRzXzEuWF9BTVpfVVNFUl9BR0VOVF1cbiAgICAgICAgICAgICAgICA/IGAke2hlYWRlcnNbY29uc3RhbnRzXzEuVVNFUl9BR0VOVF19ICR7bm9ybWFsVUFWYWx1ZX1gXG4gICAgICAgICAgICAgICAgOiBub3JtYWxVQVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnNbY29uc3RhbnRzXzEuVVNFUl9BR0VOVF0gPSBzZGtVc2VyQWdlbnRWYWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGhlYWRlcnNbY29uc3RhbnRzXzEuWF9BTVpfVVNFUl9BR0VOVF0gPSBzZGtVc2VyQWdlbnRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoe1xuICAgICAgICAuLi5hcmdzLFxuICAgICAgICByZXF1ZXN0LFxuICAgIH0pO1xufTtcbmV4cG9ydHMudXNlckFnZW50TWlkZGxld2FyZSA9IHVzZXJBZ2VudE1pZGRsZXdhcmU7XG5jb25zdCBlc2NhcGVVc2VyQWdlbnQgPSAoW25hbWUsIHZlcnNpb25dKSA9PiB7XG4gICAgY29uc3QgcHJlZml4U2VwYXJhdG9ySW5kZXggPSBuYW1lLmluZGV4T2YoXCIvXCIpO1xuICAgIGNvbnN0IHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIHByZWZpeFNlcGFyYXRvckluZGV4KTtcbiAgICBsZXQgdWFOYW1lID0gbmFtZS5zdWJzdHJpbmcocHJlZml4U2VwYXJhdG9ySW5kZXggKyAxKTtcbiAgICBpZiAocHJlZml4ID09PSBcImFwaVwiKSB7XG4gICAgICAgIHVhTmFtZSA9IHVhTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gW3ByZWZpeCwgdWFOYW1lLCB2ZXJzaW9uXVxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtICYmIGl0ZW0ubGVuZ3RoID4gMClcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVtLnJlcGxhY2UoY29uc3RhbnRzXzEuVUFfRVNDQVBFX1JFR0VYLCBcIl9cIikpXG4gICAgICAgIC5qb2luKFwiL1wiKTtcbn07XG5leHBvcnRzLmdldFVzZXJBZ2VudE1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwiZ2V0VXNlckFnZW50TWlkZGxld2FyZVwiLFxuICAgIHN0ZXA6IFwiYnVpbGRcIixcbiAgICBwcmlvcml0eTogXCJsb3dcIixcbiAgICB0YWdzOiBbXCJTRVRfVVNFUl9BR0VOVFwiLCBcIlVTRVJfQUdFTlRcIl0sXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuY29uc3QgZ2V0VXNlckFnZW50UGx1Z2luID0gKGNvbmZpZykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGQoKDAsIGV4cG9ydHMudXNlckFnZW50TWlkZGxld2FyZSkoY29uZmlnKSwgZXhwb3J0cy5nZXRVc2VyQWdlbnRNaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRQbHVnaW4gPSBnZXRVc2VyQWdlbnRQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb25zXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3VzZXItYWdlbnQtbWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gdm9pZCAwO1xuY29uc3QgcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IChvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IG9wdGlvbnMudXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogb3B0aW9ucy51c2VGaXBzRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIHVzZUdsb2JhbEVuZHBvaW50OiBvcHRpb25zLnVzZUdsb2JhbEVuZHBvaW50ID8/IGZhbHNlLFxuICAgICAgICBkZWZhdWx0U2lnbmluZ05hbWU6IFwic3RzXCIsXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSByZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1RTU2VydmljZUV4Y2VwdGlvbiA9IGV4cG9ydHMuX19TZXJ2aWNlRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuY2xhc3MgU1RTU2VydmljZUV4Y2VwdGlvbiBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgU1RTU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1RTU2VydmljZUV4Y2VwdGlvbiA9IFNUU1NlcnZpY2VFeGNlcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Bc3N1bWVSb2xlUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5JbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24gPSBleHBvcnRzLklEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24gPSBleHBvcnRzLklEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24gPSBleHBvcnRzLlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbiA9IGV4cG9ydHMuTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb24gPSBleHBvcnRzLkV4cGlyZWRUb2tlbkV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgU1RTU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vU1RTU2VydmljZUV4Y2VwdGlvblwiKTtcbmNsYXNzIEV4cGlyZWRUb2tlbkV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgRXhwaXJlZFRva2VuRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5FeHBpcmVkVG9rZW5FeGNlcHRpb24gPSBFeHBpcmVkVG9rZW5FeGNlcHRpb247XG5jbGFzcyBNYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIk1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIE1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbiA9IE1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uO1xuY2xhc3MgUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb24gPSBQYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbjtcbmNsYXNzIFJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVnaW9uRGlzYWJsZWRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uID0gUmVnaW9uRGlzYWJsZWRFeGNlcHRpb247XG5jbGFzcyBJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIElEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLklEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24gPSBJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uO1xuY2xhc3MgSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24gPSBJbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbjtcbmNsYXNzIElEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5JRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24gPSBJRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb247XG5jbGFzcyBJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uID0gSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uO1xuY29uc3QgQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLlNlY3JldEFjY2Vzc0tleSAmJiB7IFNlY3JldEFjY2Vzc0tleTogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cgPSBDcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEFzc3VtZVJvbGVSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouQ3JlZGVudGlhbHMgJiYgeyBDcmVkZW50aWFsczogKDAsIGV4cG9ydHMuQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5DcmVkZW50aWFscykgfSksXG59KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gQXNzdW1lUm9sZVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouU0FNTEFzc2VydGlvbiAmJiB7IFNBTUxBc3NlcnRpb246IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoU0FNTFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBBc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhTQU1MUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLkNyZWRlbnRpYWxzICYmIHsgQ3JlZGVudGlhbHM6ICgwLCBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nKShvYmouQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gQXNzdW1lUm9sZVdpdGhTQU1MUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouV2ViSWRlbnRpdHlUb2tlbiAmJiB7IFdlYklkZW50aXR5VG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLkNyZWRlbnRpYWxzICYmIHsgQ3JlZGVudGlhbHM6ICgwLCBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nKShvYmouQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEdldEZlZGVyYXRpb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5DcmVkZW50aWFscyAmJiB7IENyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZykob2JqLkNyZWRlbnRpYWxzKSB9KSxcbn0pO1xuZXhwb3J0cy5HZXRGZWRlcmF0aW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IEdldEZlZGVyYXRpb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgR2V0U2Vzc2lvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLkNyZWRlbnRpYWxzICYmIHsgQ3JlZGVudGlhbHM6ICgwLCBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nKShvYmouQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkdldFNlc3Npb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gR2V0U2Vzc2lvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cEF1dGhMb2NhdGlvbiA9IHZvaWQgMDtcbnZhciBIdHRwQXV0aExvY2F0aW9uO1xuKGZ1bmN0aW9uIChIdHRwQXV0aExvY2F0aW9uKSB7XG4gICAgSHR0cEF1dGhMb2NhdGlvbltcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gICAgSHR0cEF1dGhMb2NhdGlvbltcIlFVRVJZXCJdID0gXCJxdWVyeVwiO1xufSkoSHR0cEF1dGhMb2NhdGlvbiA9IGV4cG9ydHMuSHR0cEF1dGhMb2NhdGlvbiB8fCAoZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbmZpZ1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tYW5hZ2VyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Bvb2xcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSA9IHZvaWQgMDtcbnZhciBFbmRwb2ludFVSTFNjaGVtZTtcbihmdW5jdGlvbiAoRW5kcG9pbnRVUkxTY2hlbWUpIHtcbiAgICBFbmRwb2ludFVSTFNjaGVtZVtcIkhUVFBcIl0gPSBcImh0dHBcIjtcbiAgICBFbmRwb2ludFVSTFNjaGVtZVtcIkhUVFBTXCJdID0gXCJodHRwc1wiO1xufSkoRW5kcG9pbnRVUkxTY2hlbWUgPSBleHBvcnRzLkVuZHBvaW50VVJMU2NoZW1lIHx8IChleHBvcnRzLkVuZHBvaW50VVJMU2NoZW1lID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FbmRwb2ludFJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRXJyb3JSdWxlT2JqZWN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1J1bGVTZXRPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2hhcmVkXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1RyZWVSdWxlT2JqZWN0XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GaWVsZFBvc2l0aW9uID0gdm9pZCAwO1xudmFyIEZpZWxkUG9zaXRpb247XG4oZnVuY3Rpb24gKEZpZWxkUG9zaXRpb24pIHtcbiAgICBGaWVsZFBvc2l0aW9uW0ZpZWxkUG9zaXRpb25bXCJIRUFERVJcIl0gPSAwXSA9IFwiSEVBREVSXCI7XG4gICAgRmllbGRQb3NpdGlvbltGaWVsZFBvc2l0aW9uW1wiVFJBSUxFUlwiXSA9IDFdID0gXCJUUkFJTEVSXCI7XG59KShGaWVsZFBvc2l0aW9uID0gZXhwb3J0cy5GaWVsZFBvc2l0aW9uIHx8IChleHBvcnRzLkZpZWxkUG9zaXRpb24gPSB7fSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2F3c0NyZWRlbnRpYWxJZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pZGVudGl0eVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVxdWVzdEhhbmRsZXJQcm90b2NvbCA9IHZvaWQgMDtcbnZhciBSZXF1ZXN0SGFuZGxlclByb3RvY29sO1xuKGZ1bmN0aW9uIChSZXF1ZXN0SGFuZGxlclByb3RvY29sKSB7XG4gICAgUmVxdWVzdEhhbmRsZXJQcm90b2NvbFtcIkhUVFBfMF85XCJdID0gXCJodHRwLzAuOVwiO1xuICAgIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xbXCJIVFRQXzFfMFwiXSA9IFwiaHR0cC8xLjBcIjtcbiAgICBSZXF1ZXN0SGFuZGxlclByb3RvY29sW1wiVERTXzhfMFwiXSA9IFwidGRzLzguMFwiO1xufSkoUmVxdWVzdEhhbmRsZXJQcm90b2NvbCA9IGV4cG9ydHMuUmVxdWVzdEhhbmRsZXJQcm90b2NvbCB8fCAoZXhwb3J0cy5SZXF1ZXN0SGFuZGxlclByb3RvY29sID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hYm9ydFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hdXRoXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jsb2IvYmxvYi1wYXlsb2FkLWlucHV0LXR5cGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NoZWNrc3VtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Nvbm5lY3Rpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY3J5cHRvXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2VuY29kZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbmRwb2ludFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lbmRwb2ludHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXZlbnRTdHJlYW1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sb2dnZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYWdpbmF0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb2ZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzcG9uc2VcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmV0cnlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2VyZGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2hhcGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NpZ25hdHVyZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJlYW1cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItY29tbW9uLXR5cGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmVhbWluZy1wYXlsb2FkL3N0cmVhbWluZy1ibG9iLXBheWxvYWQtaW5wdXQtdHlwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyZWFtaW5nLXBheWxvYWQvc3RyZWFtaW5nLWJsb2ItcGF5bG9hZC1vdXRwdXQtdHlwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHJhbnNmZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHJhbnNmb3JtL2NsaWVudC1wYXlsb2FkLWJsb2ItdHlwZS1uYXJyb3dcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHJhbnNmb3JtL3R5cGUtdHJhbnNmb3JtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3VyaVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3dhaXRlclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GaWVsZCA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbmNsYXNzIEZpZWxkIHtcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUsIGtpbmQgPSB0eXBlc18xLkZpZWxkUG9zaXRpb24uSEVBREVSLCB2YWx1ZXMgPSBbXSB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xuICAgIH1cbiAgICBhZGQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIHNldCh2YWx1ZXMpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgfVxuICAgIHJlbW92ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHRoaXMudmFsdWVzLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLm1hcCgodikgPT4gKHYuaW5jbHVkZXMoXCIsXCIpIHx8IHYuaW5jbHVkZXMoXCIgXCIpID8gYFwiJHt2fVwiYCA6IHYpKS5qb2luKFwiLCBcIik7XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICAgIH1cbn1cbmV4cG9ydHMuRmllbGQgPSBGaWVsZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpZWxkcyA9IHZvaWQgMDtcbmNsYXNzIEZpZWxkcyB7XG4gICAgY29uc3RydWN0b3IoeyBmaWVsZHMgPSBbXSwgZW5jb2RpbmcgPSBcInV0Zi04XCIgfSkge1xuICAgICAgICB0aGlzLmVudHJpZXMgPSB7fTtcbiAgICAgICAgZmllbGRzLmZvckVhY2godGhpcy5zZXRGaWVsZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIH1cbiAgICBzZXRGaWVsZChmaWVsZCkge1xuICAgICAgICB0aGlzLmVudHJpZXNbZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpXSA9IGZpZWxkO1xuICAgIH1cbiAgICBnZXRGaWVsZChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG4gICAgcmVtb3ZlRmllbGQobmFtZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5lbnRyaWVzW25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuICAgIGdldEJ5VHlwZShraW5kKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZW50cmllcykuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQua2luZCA9PT0ga2luZCk7XG4gICAgfVxufVxuZXhwb3J0cy5GaWVsZHMgPSBGaWVsZHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cFJlcXVlc3QgPSB2b2lkIDA7XG5jbGFzcyBIdHRwUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IFwiR0VUXCI7XG4gICAgICAgIHRoaXMuaG9zdG5hbWUgPSBvcHRpb25zLmhvc3RuYW1lIHx8IFwibG9jYWxob3N0XCI7XG4gICAgICAgIHRoaXMucG9ydCA9IG9wdGlvbnMucG9ydDtcbiAgICAgICAgdGhpcy5xdWVyeSA9IG9wdGlvbnMucXVlcnkgfHwge307XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5ib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgICAgICB0aGlzLnByb3RvY29sID0gb3B0aW9ucy5wcm90b2NvbFxuICAgICAgICAgICAgPyBvcHRpb25zLnByb3RvY29sLnNsaWNlKC0xKSAhPT0gXCI6XCJcbiAgICAgICAgICAgICAgICA/IGAke29wdGlvbnMucHJvdG9jb2x9OmBcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMucHJvdG9jb2xcbiAgICAgICAgICAgIDogXCJodHRwczpcIjtcbiAgICAgICAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoID8gKG9wdGlvbnMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiID8gYC8ke29wdGlvbnMucGF0aH1gIDogb3B0aW9ucy5wYXRoKSA6IFwiL1wiO1xuICAgICAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmQ7XG4gICAgICAgIHRoaXMuZnJhZ21lbnQgPSBvcHRpb25zLmZyYWdtZW50O1xuICAgIH1cbiAgICBzdGF0aWMgaXNJbnN0YW5jZShyZXF1ZXN0KSB7XG4gICAgICAgIGlmICghcmVxdWVzdClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVxID0gcmVxdWVzdDtcbiAgICAgICAgcmV0dXJuIChcIm1ldGhvZFwiIGluIHJlcSAmJlxuICAgICAgICAgICAgXCJwcm90b2NvbFwiIGluIHJlcSAmJlxuICAgICAgICAgICAgXCJob3N0bmFtZVwiIGluIHJlcSAmJlxuICAgICAgICAgICAgXCJwYXRoXCIgaW4gcmVxICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVxW1wicXVlcnlcIl0gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZXFbXCJoZWFkZXJzXCJdID09PSBcIm9iamVjdFwiKTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBIdHRwUmVxdWVzdCh7XG4gICAgICAgICAgICAuLi50aGlzLFxuICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjbG9uZWQucXVlcnkpXG4gICAgICAgICAgICBjbG9uZWQucXVlcnkgPSBjbG9uZVF1ZXJ5KGNsb25lZC5xdWVyeSk7XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwUmVxdWVzdCA9IEh0dHBSZXF1ZXN0O1xuZnVuY3Rpb24gY2xvbmVRdWVyeShxdWVyeSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChjYXJyeSwgcGFyYW1OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gcXVlcnlbcGFyYW1OYW1lXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNhcnJ5LFxuICAgICAgICAgICAgW3BhcmFtTmFtZV06IEFycmF5LmlzQXJyYXkocGFyYW0pID8gWy4uLnBhcmFtXSA6IHBhcmFtLFxuICAgICAgICB9O1xuICAgIH0sIHt9KTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBSZXNwb25zZSA9IHZvaWQgMDtcbmNsYXNzIEh0dHBSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBvcHRpb25zLnN0YXR1c0NvZGU7XG4gICAgICAgIHRoaXMucmVhc29uID0gb3B0aW9ucy5yZWFzb247XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5ib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgIH1cbiAgICBzdGF0aWMgaXNJbnN0YW5jZShyZXNwb25zZSkge1xuICAgICAgICBpZiAoIXJlc3BvbnNlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByZXNwID0gcmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcmVzcC5zdGF0dXNDb2RlID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByZXNwLmhlYWRlcnMgPT09IFwib2JqZWN0XCI7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwUmVzcG9uc2UgPSBIdHRwUmVzcG9uc2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkSG9zdG5hbWUgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc1ZhbGlkSG9zdG5hbWUoaG9zdG5hbWUpIHtcbiAgICBjb25zdCBob3N0UGF0dGVybiA9IC9eW2EtejAtOV1bYS16MC05XFwuXFwtXSpbYS16MC05XSQvO1xuICAgIHJldHVybiBob3N0UGF0dGVybi50ZXN0KGhvc3RuYW1lKTtcbn1cbmV4cG9ydHMuaXNWYWxpZEhvc3RuYW1lID0gaXNWYWxpZEhvc3RuYW1lO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRmllbGRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRmllbGRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBIYW5kbGVyXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBSZXF1ZXN0XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHBSZXNwb25zZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pc1ZhbGlkSG9zdG5hbWVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG5hbWVTdGFydENoYXIgPSAnOkEtWmEtel9cXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRCc7XG5jb25zdCBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAnXFxcXC0uXFxcXGRcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCc7XG5jb25zdCBuYW1lUmVnZXhwID0gJ1snICsgbmFtZVN0YXJ0Q2hhciArICddWycgKyBuYW1lQ2hhciArICddKidcbmNvbnN0IHJlZ2V4TmFtZSA9IG5ldyBSZWdFeHAoJ14nICsgbmFtZVJlZ2V4cCArICckJyk7XG5cbmNvbnN0IGdldEFsbE1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIHJlZ2V4KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB3aGlsZSAobWF0Y2gpIHtcbiAgICBjb25zdCBhbGxtYXRjaGVzID0gW107XG4gICAgYWxsbWF0Y2hlcy5zdGFydEluZGV4ID0gcmVnZXgubGFzdEluZGV4IC0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGxlbiA9IG1hdGNoLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICBhbGxtYXRjaGVzLnB1c2gobWF0Y2hbaW5kZXhdKTtcbiAgICB9XG4gICAgbWF0Y2hlcy5wdXNoKGFsbG1hdGNoZXMpO1xuICAgIG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuY29uc3QgaXNOYW1lID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcmVnZXhOYW1lLmV4ZWMoc3RyaW5nKTtcbiAgcmV0dXJuICEobWF0Y2ggPT09IG51bGwgfHwgdHlwZW9mIG1hdGNoID09PSAndW5kZWZpbmVkJyk7XG59O1xuXG5leHBvcnRzLmlzRXhpc3QgPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuXG5leHBvcnRzLmlzRW1wdHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufTtcblxuLyoqXG4gKiBDb3B5IGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIGludG8gYi5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0XG4gKiBAcGFyYW0geyp9IGFcbiAqL1xuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uKHRhcmdldCwgYSwgYXJyYXlNb2RlKSB7XG4gIGlmIChhKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGEpOyAvLyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBvd24gcHJvcGVydGllc1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGFycmF5TW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gWyBhW2tleXNbaV1dIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qIGV4cG9ydHMubWVyZ2UgPWZ1bmN0aW9uIChiLGEpe1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihiLGEpO1xufSAqL1xuXG5leHBvcnRzLmdldFZhbHVlID0gZnVuY3Rpb24odikge1xuICBpZiAoZXhwb3J0cy5pc0V4aXN0KHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG4vLyBjb25zdCBmYWtlQ2FsbCA9IGZ1bmN0aW9uKGEpIHtyZXR1cm4gYTt9O1xuLy8gY29uc3QgZmFrZUNhbGxOb1JldHVybiA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuZXhwb3J0cy5nZXRBbGxNYXRjaGVzID0gZ2V0QWxsTWF0Y2hlcztcbmV4cG9ydHMubmFtZVJlZ2V4cCA9IG5hbWVSZWdleHA7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vQSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICB1bnBhaXJlZFRhZ3M6IFtdXG59O1xuXG4vL2NvbnN0IHRhZ3NQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIjxcXFxcLz8oW1xcXFx3OlxcXFwtX1xcLl0rKVxcXFxzKlxcLz8+XCIsXCJnXCIpO1xuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uICh4bWxEYXRhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLFwiXCIpOy8vbWFrZSBpdCBzaW5nbGUgbGluZVxuICAvL3htbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoLyheXFxzKjxcXD94bWwuKj9cXD8+KS9nLFwiXCIpOy8vUmVtb3ZlIFhNTCBzdGFydGluZyB0YWdcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oPCFET0NUWVBFW1xcc1xcd1xcXCJcXC5cXC9cXC1cXDpdKyhcXFsuKlxcXSkqXFxzKj4pL2csXCJcIik7Ly9SZW1vdmUgRE9DVFlQRVxuICBjb25zdCB0YWdzID0gW107XG4gIGxldCB0YWdGb3VuZCA9IGZhbHNlO1xuXG4gIC8vaW5kaWNhdGVzIHRoYXQgdGhlIHJvb3QgdGFnIGhhcyBiZWVuIGNsb3NlZCAoYWthLiBkZXB0aCAwIGhhcyBiZWVuIHJlYWNoZWQpXG4gIGxldCByZWFjaGVkUm9vdCA9IGZhbHNlO1xuXG4gIGlmICh4bWxEYXRhWzBdID09PSAnXFx1ZmVmZicpIHtcbiAgICAvLyBjaGVjayBmb3IgYnl0ZSBvcmRlciBtYXJrIChCT00pXG4gICAgeG1sRGF0YSA9IHhtbERhdGEuc3Vic3RyKDEpO1xuICB9XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcblxuICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgIGkrPTI7XG4gICAgICBpID0gcmVhZFBJKHhtbERhdGEsaSk7XG4gICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgIH1lbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgIC8vc3RhcnRpbmcgb2YgdGFnXG4gICAgICAvL3JlYWQgdW50aWwgeW91IHJlYWNoIHRvICc+JyBhdm9pZGluZyBhbnkgJz4nIGluIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgbGV0IHRhZ1N0YXJ0UG9zID0gaTtcbiAgICAgIGkrKztcbiAgICAgIFxuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICchJykge1xuICAgICAgICBpID0gcmVhZENvbW1lbnRBbmRDREFUQSh4bWxEYXRhLCBpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY2xvc2luZ1RhZyA9IGZhbHNlO1xuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9jbG9zaW5nIHRhZ1xuICAgICAgICAgIGNsb3NpbmdUYWcgPSB0cnVlO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvL3JlYWQgdGFnbmFtZVxuICAgICAgICBsZXQgdGFnTmFtZSA9ICcnO1xuICAgICAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJz4nICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJyAnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcdCcgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxuJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHInOyBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFnTmFtZSArPSB4bWxEYXRhW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRyaW0oKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0YWdOYW1lKTtcblxuICAgICAgICBpZiAodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWcgd2l0aG91dCBhdHRyaWJ1dGVzXG4gICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyaW5nKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgLy9jb250aW51ZTtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVRhZ05hbWUodGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgIGlmICh0YWdOYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG1zZyA9IFwiSW52YWxpZCBzcGFjZSBhZnRlciAnPCcuXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IFwiVGFnICdcIit0YWdOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIG1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlcyBmb3IgJ1wiK3RhZ05hbWUrXCInIGhhdmUgb3BlbiBxdW90ZS5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXR0clN0ciA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaSA9IHJlc3VsdC5pbmRleDtcblxuICAgICAgICBpZiAoYXR0clN0clthdHRyU3RyLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICBjb25zdCBhdHRyU3RyU3RhcnQgPSBpIC0gYXR0clN0ci5sZW5ndGg7XG4gICAgICAgICAgYXR0clN0ciA9IGF0dHJTdHIuc3Vic3RyaW5nKDAsIGF0dHJTdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlQXR0cmlidXRlU3RyaW5nKGF0dHJTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChpc1ZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAvL2NvbnRpbnVlOyAvL3RleHQgbWF5IHByZXNlbnRzIGFmdGVyIHNlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgYXR0clN0clN0YXJ0ICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nVGFnKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQudGFnQ2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBkb2Vzbid0IGhhdmUgcHJvcGVyIGNsb3NpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyU3RyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMgb3IgaW52YWxpZCBzdGFydGluZy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG90ZyA9IHRhZ3MucG9wKCk7XG4gICAgICAgICAgICBpZiAodGFnTmFtZSAhPT0gb3RnLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgbGV0IG9wZW5Qb3MgPSBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgb3RnLnRhZ1N0YXJ0UG9zKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJyxcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGNsb3NpbmcgdGFnICdcIitvdGcudGFnTmFtZStcIicgKG9wZW5lZCBpbiBsaW5lIFwiK29wZW5Qb3MubGluZStcIiwgY29sIFwiK29wZW5Qb3MuY29sK1wiKSBpbnN0ZWFkIG9mIGNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJy5cIixcbiAgICAgICAgICAgICAgICBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgdGFnU3RhcnRQb3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy93aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRhZ3MsIHdlIHJlYWNoZWQgdGhlIHJvb3QgbGV2ZWwuXG4gICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICByZWFjaGVkUm9vdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vaWYgdGhlIHJvb3QgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgLi4uXG4gICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnTXVsdGlwbGUgcG9zc2libGUgcm9vdCBub2RlcyBmb3VuZC4nLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZihvcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICAvL2Rvbid0IHB1c2ggaW50byBzdGFja1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWdzLnB1c2goe3RhZ05hbWUsIHRhZ1N0YXJ0UG9zfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZ0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2tpcCB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICAvL0l0IG1heSBpbmNsdWRlIGNvbW1lbnRzIGFuZCBDREFUQSB2YWx1ZVxuICAgICAgICBmb3IgKGkrKzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBpZiAoeG1sRGF0YVtpICsgMV0gPT09ICchJykge1xuICAgICAgICAgICAgICAvL2NvbW1lbnQgb3IgQ0FEQVRBXG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2krMV0gPT09ICc/Jykge1xuICAgICAgICAgICAgICBpID0gcmVhZFBJKHhtbERhdGEsICsraSk7XG4gICAgICAgICAgICAgIGlmIChpLmVycikgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJyYnKSB7XG4gICAgICAgICAgICBjb25zdCBhZnRlckFtcCA9IHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgaWYgKGFmdGVyQW1wID09IC0xKVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICcmJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgICBpID0gYWZ0ZXJBbXA7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZiAocmVhY2hlZFJvb3QgPT09IHRydWUgJiYgIWlzV2hpdGVTcGFjZSh4bWxEYXRhW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCBcIkV4dHJhIHRleHQgYXQgdGhlIGVuZFwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvL2VuZCBvZiByZWFkaW5nIHRhZyB0ZXh0IHZhbHVlXG4gICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICdcIit4bWxEYXRhW2ldK1wiJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWdGb3VuZCkge1xuICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdTdGFydCB0YWcgZXhwZWN0ZWQuJywgMSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIlVuY2xvc2VkIHRhZyAnXCIrdGFnc1swXS50YWdOYW1lK1wiJy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ3NbMF0udGFnU3RhcnRQb3MpKTtcbiAgfWVsc2UgaWYgKHRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJJbnZhbGlkICdcIitcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWdzLm1hcCh0ID0+IHQudGFnTmFtZSksIG51bGwsIDQpLnJlcGxhY2UoL1xccj9cXG4vZywgJycpK1xuICAgICAgICAgIFwiJyBmb3VuZC5cIiwge2xpbmU6IDEsIGNvbDogMX0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBpc1doaXRlU3BhY2UoY2hhcil7XG4gIHJldHVybiBjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJ1xcbicgIHx8IGNoYXIgPT09ICdcXHInO1xufVxuLyoqXG4gKiBSZWFkIFByb2Nlc3NpbmcgaW5zc3RydWN0aW9ucyBhbmQgc2tpcFxuICogQHBhcmFtIHsqfSB4bWxEYXRhXG4gKiBAcGFyYW0geyp9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZFBJKHhtbERhdGEsIGkpIHtcbiAgY29uc3Qgc3RhcnQgPSBpO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PSAnPycgfHwgeG1sRGF0YVtpXSA9PSAnICcpIHtcbiAgICAgIC8vdGFnbmFtZVxuICAgICAgY29uc3QgdGFnbmFtZSA9IHhtbERhdGEuc3Vic3RyKHN0YXJ0LCBpIC0gc3RhcnQpO1xuICAgICAgaWYgKGkgPiA1ICYmIHRhZ25hbWUgPT09ICd4bWwnKSB7XG4gICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdYTUwgZGVjbGFyYXRpb24gYWxsb3dlZCBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PSAnPycgJiYgeG1sRGF0YVtpICsgMV0gPT0gJz4nKSB7XG4gICAgICAgIC8vY2hlY2sgaWYgdmFsaWQgYXR0cmlidXQgc3RyaW5nXG4gICAgICAgIGkrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSkge1xuICBpZiAoeG1sRGF0YS5sZW5ndGggPiBpICsgNSAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDJdID09PSAnLScpIHtcbiAgICAvL2NvbW1lbnRcbiAgICBmb3IgKGkgKz0gMzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnLScgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJz4nKSB7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDggJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ0QnICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnQycgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdZJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnUCcgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ0UnXG4gICkge1xuICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgeG1sRGF0YS5sZW5ndGggPiBpICsgOSAmJlxuICAgIHhtbERhdGFbaSArIDFdID09PSAnWycgJiZcbiAgICB4bWxEYXRhW2kgKyAyXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgM10gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDRdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNl0gPT09ICdBJyAmJlxuICAgIHhtbERhdGFbaSArIDddID09PSAnWydcbiAgKSB7XG4gICAgZm9yIChpICs9IDg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDFdID09PSAnXScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpO1xufVxuXG5jb25zdCBkb3VibGVRdW90ZSA9ICdcIic7XG5jb25zdCBzaW5nbGVRdW90ZSA9IFwiJ1wiO1xuXG4vKipcbiAqIEtlZXAgcmVhZGluZyB4bWxEYXRhIHVudGlsICc8JyBpcyBmb3VuZCBvdXRzaWRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZVN0cih4bWxEYXRhLCBpKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCBzdGFydENoYXIgPSAnJztcbiAgbGV0IHRhZ0Nsb3NlZCA9IGZhbHNlO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gZG91YmxlUXVvdGUgfHwgeG1sRGF0YVtpXSA9PT0gc2luZ2xlUXVvdGUpIHtcbiAgICAgIGlmIChzdGFydENoYXIgPT09ICcnKSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9IHhtbERhdGFbaV07XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0Q2hhciAhPT0geG1sRGF0YVtpXSkge1xuICAgICAgICAvL2lmIHZhdWUgaXMgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGUgdGhlbiBzaW5nbGUgcXVvdGVzIGFyZSBhbGxvd2VkIGluc2lkZSB0aGUgdmFsdWUgYW5kIHZpY2UgdmVyc2FcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICB0YWdDbG9zZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0clN0ciArPSB4bWxEYXRhW2ldO1xuICB9XG4gIGlmIChzdGFydENoYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogYXR0clN0cixcbiAgICBpbmRleDogaSxcbiAgICB0YWdDbG9zZWQ6IHRhZ0Nsb3NlZFxuICB9O1xufVxuXG4vKipcbiAqIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgd2hldGhlciB2YWxpZCBvciBpbnZhbGlkLlxuICovXG5jb25zdCB2YWxpZEF0dHJTdHJSZWd4cCA9IG5ldyBSZWdFeHAoJyhcXFxccyopKFteXFxcXHM9XSspKFxcXFxzKj0pPyhcXFxccyooW1xcJ1wiXSkoKFtcXFxcc1xcXFxTXSkqPylcXFxcNSk/JywgJ2cnKTtcblxuLy9hdHRyLCA9XCJzZFwiLCBhPVwiYW1pdCdzXCIsIGE9XCJzZFwiYj1cInNhZlwiLCBhYiAgY2Q9XCJcIlxuXG5mdW5jdGlvbiB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKSB7XG4gIC8vY29uc29sZS5sb2coXCJzdGFydDpcIithdHRyU3RyK1wiOmVuZFwiKTtcblxuICAvL2lmKGF0dHJTdHIudHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7IC8vZW1wdHkgc3RyaW5nXG5cbiAgY29uc3QgbWF0Y2hlcyA9IHV0aWwuZ2V0QWxsTWF0Y2hlcyhhdHRyU3RyLCB2YWxpZEF0dHJTdHJSZWd4cCk7XG4gIGNvbnN0IGF0dHJOYW1lcyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtYXRjaGVzW2ldWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy9ub3NwYWNlIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZTogYT1cInNkXCJiPVwic2FmXCJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaGFzIG5vIHNwYWNlIGluIHN0YXJ0aW5nLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSlcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gIT09IHVuZGVmaW5lZCAmJiBtYXRjaGVzW2ldWzRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaXMgd2l0aG91dCB2YWx1ZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlc1tpXVszXSA9PT0gdW5kZWZpbmVkICYmICFvcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vaW5kZXBlbmRlbnQgYXR0cmlidXRlOiBhYlxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiYm9vbGVhbiBhdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIG5vdCBhbGxvd2VkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICAgIC8qIGVsc2UgaWYobWF0Y2hlc1tpXVs2XSA9PT0gdW5kZWZpbmVkKXsvL2F0dHJpYnV0ZSB3aXRob3V0IHZhbHVlOiBhYj1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyOiB7IGNvZGU6XCJJbnZhbGlkQXR0clwiLG1zZzpcImF0dHJpYnV0ZSBcIiArIG1hdGNoZXNbaV1bMl0gKyBcIiBoYXMgbm8gdmFsdWUgYXNzaWduZWQuXCJ9fTtcbiAgICAgICAgICAgICAgICB9ICovXG4gICAgY29uc3QgYXR0ck5hbWUgPSBtYXRjaGVzW2ldWzJdO1xuICAgIGlmICghdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIGFuIGludmFsaWQgbmFtZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICBpZiAoIWF0dHJOYW1lcy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpIHtcbiAgICAgIC8vY2hlY2sgZm9yIGR1cGxpY2F0ZSBhdHRyaWJ1dGUuXG4gICAgICBhdHRyTmFtZXNbYXR0ck5hbWVdID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlICdcIithdHRyTmFtZStcIicgaXMgcmVwZWF0ZWQuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSkge1xuICBsZXQgcmUgPSAvXFxkLztcbiAgaWYgKHhtbERhdGFbaV0gPT09ICd4Jykge1xuICAgIGkrKztcbiAgICByZSA9IC9bXFxkYS1mQS1GXS87XG4gIH1cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICAgIHJldHVybiBpO1xuICAgIGlmICgheG1sRGF0YVtpXS5tYXRjaChyZSkpXG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jZHQtY2hhcnJlZlxuICBpKys7XG4gIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgcmV0dXJuIC0xO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJyMnKSB7XG4gICAgaSsrO1xuICAgIHJldHVybiB2YWxpZGF0ZU51bWJlckFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgfVxuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyssIGNvdW50KyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXS5tYXRjaCgvXFx3LykgJiYgY291bnQgPCAyMClcbiAgICAgIGNvbnRpbnVlO1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICBicmVhaztcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yT2JqZWN0KGNvZGUsIG1lc3NhZ2UsIGxpbmVOdW1iZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBlcnI6IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBtc2c6IG1lc3NhZ2UsXG4gICAgICBsaW5lOiBsaW5lTnVtYmVyLmxpbmUgfHwgbGluZU51bWJlcixcbiAgICAgIGNvbDogbGluZU51bWJlci5jb2wsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkge1xuICByZXR1cm4gdXRpbC5pc05hbWUoYXR0ck5hbWUpO1xufVxuXG4vLyBjb25zdCBzdGFydHNXaXRoWE1MID0gL154bWwvaTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUYWdOYW1lKHRhZ25hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKHRhZ25hbWUpIC8qICYmICF0YWduYW1lLm1hdGNoKHN0YXJ0c1dpdGhYTUwpICovO1xufVxuXG4vL3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4XG5mdW5jdGlvbiBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaW5kZXgpIHtcbiAgY29uc3QgbGluZXMgPSB4bWxEYXRhLnN1YnN0cmluZygwLCBpbmRleCkuc3BsaXQoL1xccj9cXG4vKTtcbiAgcmV0dXJuIHtcbiAgICBsaW5lOiBsaW5lcy5sZW5ndGgsXG5cbiAgICAvLyBjb2x1bW4gbnVtYmVyIGlzIGxhc3QgbGluZSdzIGxlbmd0aCArIDEsIGJlY2F1c2UgY29sdW1uIG51bWJlcmluZyBzdGFydHMgYXQgMTpcbiAgICBjb2w6IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCArIDFcbiAgfTtcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgbWF0Y2ggd2l0aGluIGF0dHJTdHJcbmZ1bmN0aW9uIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoKSB7XG4gIHJldHVybiBtYXRjaC5zdGFydEluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoO1xufVxuIiwKICAgICJcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICAgIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gICAgYXR0cmlidXRlc0dyb3VwTmFtZTogZmFsc2UsXG4gICAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICAgIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gICAgcmVtb3ZlTlNQcmVmaXg6IGZhbHNlLCAvLyByZW1vdmUgTlMgZnJvbSB0YWcgbmFtZSBvciBhdHRyaWJ1dGUgbmFtZSBpZiB0cnVlXG4gICAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vYSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICAgIC8vaWdub3JlUm9vdEVsZW1lbnQgOiBmYWxzZSxcbiAgICBwYXJzZVRhZ1ZhbHVlOiB0cnVlLFxuICAgIHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLFxuICAgIHRyaW1WYWx1ZXM6IHRydWUsIC8vVHJpbSBzdHJpbmcgdmFsdWVzIG9mIHRhZyBhbmQgYXR0cmlidXRlc1xuICAgIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICAgIG51bWJlclBhcnNlT3B0aW9uczoge1xuICAgICAgaGV4OiB0cnVlLFxuICAgICAgbGVhZGluZ1plcm9zOiB0cnVlLFxuICAgICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgfSxcbiAgICB0YWdWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24odGFnTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCB2YWwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcbiAgICBzdG9wTm9kZXM6IFtdLCAvL25lc3RlZCB0YWdzIHdpbGwgbm90IGJlIHBhcnNlZCBldmVuIGZvciBlcnJvcnNcbiAgICBhbHdheXNDcmVhdGVUZXh0Tm9kZTogZmFsc2UsXG4gICAgaXNBcnJheTogKCkgPT4gZmFsc2UsXG4gICAgY29tbWVudFByb3BOYW1lOiBmYWxzZSxcbiAgICB1bnBhaXJlZFRhZ3M6IFtdLFxuICAgIHByb2Nlc3NFbnRpdGllczogdHJ1ZSxcbiAgICBodG1sRW50aXRpZXM6IGZhbHNlLFxuICAgIGlnbm9yZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICBpZ25vcmVQaVRhZ3M6IGZhbHNlLFxuICAgIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAgIHRyYW5zZm9ybUF0dHJpYnV0ZU5hbWU6IGZhbHNlLFxufTtcbiAgIFxuY29uc3QgYnVpbGRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnRzLmJ1aWxkT3B0aW9ucyA9IGJ1aWxkT3B0aW9ucztcbmV4cG9ydHMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9uczsiLAogICAgIid1c2Ugc3RyaWN0JztcblxuY2xhc3MgWG1sTm9kZXtcbiAgY29uc3RydWN0b3IodGFnbmFtZSkge1xuICAgIHRoaXMudGFnbmFtZSA9IHRhZ25hbWU7XG4gICAgdGhpcy5jaGlsZCA9IFtdOyAvL25lc3RlZCB0YWdzLCB0ZXh0LCBjZGF0YSwgY29tbWVudHMgaW4gb3JkZXJcbiAgICB0aGlzW1wiOkBcIl0gPSB7fTsgLy9hdHRyaWJ1dGVzIG1hcFxuICB9XG4gIGFkZChrZXksdmFsKXtcbiAgICAvLyB0aGlzLmNoaWxkLnB1c2goIHtuYW1lIDoga2V5LCB2YWw6IHZhbCwgaXNDZGF0YTogaXNDZGF0YSB9KTtcbiAgICBpZihrZXkgPT09IFwiX19wcm90b19fXCIpIGtleSA9IFwiI19fcHJvdG9fX1wiO1xuICAgIHRoaXMuY2hpbGQucHVzaCgge1trZXldOiB2YWwgfSk7XG4gIH1cbiAgYWRkQ2hpbGQobm9kZSkge1xuICAgIGlmKG5vZGUudGFnbmFtZSA9PT0gXCJfX3Byb3RvX19cIikgbm9kZS50YWduYW1lID0gXCIjX19wcm90b19fXCI7XG4gICAgaWYobm9kZVtcIjpAXCJdICYmIE9iamVjdC5rZXlzKG5vZGVbXCI6QFwiXSkubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLmNoaWxkLnB1c2goIHsgW25vZGUudGFnbmFtZV06IG5vZGUuY2hpbGQsIFtcIjpAXCJdOiBub2RlW1wiOkBcIl0gfSk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmNoaWxkLnB1c2goIHsgW25vZGUudGFnbmFtZV06IG5vZGUuY2hpbGQgfSk7XG4gICAgfVxuICB9O1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFhtbE5vZGU7IiwKICAgICIvL1RPRE86IGhhbmRsZSBjb21tZW50c1xuZnVuY3Rpb24gcmVhZERvY1R5cGUoeG1sRGF0YSwgaSl7XG4gICAgXG4gICAgY29uc3QgZW50aXRpZXMgPSB7fTtcbiAgICBpZiggeG1sRGF0YVtpICsgM10gPT09ICdPJyAmJlxuICAgICAgICAgeG1sRGF0YVtpICsgNF0gPT09ICdDJyAmJlxuICAgICAgICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgICAgICAgeG1sRGF0YVtpICsgNl0gPT09ICdZJyAmJlxuICAgICAgICAgeG1sRGF0YVtpICsgN10gPT09ICdQJyAmJlxuICAgICAgICAgeG1sRGF0YVtpICsgOF0gPT09ICdFJylcbiAgICB7ICAgIFxuICAgICAgICBpID0gaSs5O1xuICAgICAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICAgICAgbGV0IGhhc0JvZHkgPSBmYWxzZSwgZW50aXR5ID0gZmFsc2UsIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGV4cCA9IFwiXCI7XG4gICAgICAgIGZvcig7aTx4bWxEYXRhLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8JyAmJiAhY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGlmKCBoYXNCb2R5ICYmIFxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsyXSA9PT0gJ0UnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krM10gPT09ICdOJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzRdID09PSAnVCcgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs1XSA9PT0gJ0knICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzddID09PSAnWSdcbiAgICAgICAgICAgICAgICApe1xuICAgICAgICAgICAgICAgICAgICBpICs9IDc7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoIGhhc0JvZHkgJiYgXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzNdID09PSAnTCcgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs0XSA9PT0gJ0UnICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krNV0gPT09ICdNJyAmJlxuICAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzZdID09PSAnRScgJiZcbiAgICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs3XSA9PT0gJ04nICYmXG4gICAgICAgICAgICAgICAgICAgICB4bWxEYXRhW2krOF0gPT09ICdUJ1xuICAgICAgICAgICAgICAgICl7XG4gICAgICAgICAgICAgICAgICAgIC8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICBpICs9IDg7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoIGhhc0JvZHkgJiYgXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSsyXSA9PT0gJ0EnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSszXSA9PT0gJ1QnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs1XSA9PT0gJ0wnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs2XSA9PT0gJ0knICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs3XSA9PT0gJ1MnICYmXG4gICAgICAgICAgICAgICAgICAgIHhtbERhdGFbaSs4XSA9PT0gJ1QnXG4gICAgICAgICAgICAgICAgKXtcbiAgICAgICAgICAgICAgICAgICAgLy9Ob3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgIGkgKz0gODtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiggaGFzQm9keSAmJiBcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzJdID09PSAnTicgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzNdID09PSAnTycgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzRdID09PSAnVCcgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzVdID09PSAnQScgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzZdID09PSAnVCcgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzddID09PSAnSScgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzhdID09PSAnTycgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzldID09PSAnTidcbiAgICAgICAgICAgICAgICApe1xuICAgICAgICAgICAgICAgICAgICAvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgaSArPSA5O1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCAvL2NvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzJdID09PSAnLScgJiZcbiAgICAgICAgICAgICAgICAgICAgeG1sRGF0YVtpKzNdID09PSAnLSdcbiAgICAgICAgICAgICAgICApe1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBET0NUWVBFXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgICAgICAgICAgICBleHAgPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPicpIHtcbiAgICAgICAgICAgICAgICBpZihjb21tZW50KXtcbiAgICAgICAgICAgICAgICAgICAgaWYoIHhtbERhdGFbaSAtIDFdID09PSBcIi1cIiAmJiB4bWxEYXRhW2kgLSAyXSA9PT0gXCItXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgaWYoZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVudGl0eUV4cChleHAsIGVudGl0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YVtpXSA9PT0gJ1snKXtcbiAgICAgICAgICAgICAgICBoYXNCb2R5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGV4cCArPSB4bWxEYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGFuZ2xlQnJhY2tldHNDb3VudCAhPT0gMCl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuY2xvc2VkIERPQ1RZUEVgKTtcbiAgICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVGFnIGluc3RlYWQgb2YgRE9DVFlQRWApO1xuICAgIH1cbiAgICByZXR1cm4ge2VudGl0aWVzLCBpfTtcbn1cblxuY29uc3QgZW50aXR5UmVnZXggPSBSZWdFeHAoXCJeXFxcXHMoW2EtekEtejAtMF0rKVsgXFx0XShbJ1xcXCJdKShbXiZdKylcXFxcMlwiKTtcbmZ1bmN0aW9uIHBhcnNlRW50aXR5RXhwKGV4cCwgZW50aXRpZXMpe1xuICAgIGNvbnN0IG1hdGNoID0gZW50aXR5UmVnZXguZXhlYyhleHApO1xuICAgIGlmKG1hdGNoKXtcbiAgICAgICAgZW50aXRpZXNbIG1hdGNoWzFdIF0gPSB7XG4gICAgICAgICAgICByZWd4IDogUmVnRXhwKCBgJiR7bWF0Y2hbMV19O2AsXCJnXCIpLFxuICAgICAgICAgICAgdmFsOiBtYXRjaFszXVxuICAgICAgICB9O1xuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gcmVhZERvY1R5cGU7IiwKICAgICIndXNlIHN0cmljdCc7XG4vLy9AdHMtY2hlY2tcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHhtbE5vZGUgPSByZXF1aXJlKCcuL3htbE5vZGUnKTtcbmNvbnN0IHJlYWREb2NUeXBlID0gcmVxdWlyZShcIi4vRG9jVHlwZVJlYWRlclwiKTtcbmNvbnN0IHRvTnVtYmVyID0gcmVxdWlyZShcInN0cm51bVwiKTtcblxuY29uc3QgcmVneCA9XG4gICc8KCghXFxcXFtDREFUQVxcXFxbKFtcXFxcc1xcXFxTXSo/KShdXT4pKXwoKE5BTUU6KT8oTkFNRSkpKFtePl0qKT58KChcXFxcLykoTkFNRSlcXFxccyo+KSkoW148XSopJ1xuICAucmVwbGFjZSgvTkFNRS9nLCB1dGlsLm5hbWVSZWdleHApO1xuXG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/W1xcXFx3OlxcXFwtXFwuX10rKShbXj5dKik+KFxcXFxzKlwiK2NkYXRhUmVneCtcIikqKFtePF0rKT9cIixcImdcIik7XG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/KSgoXFxcXHcqOik/KFtcXFxcdzpcXFxcLVxcLl9dKykpKFtePl0qKT4oW148XSopKFwiK2NkYXRhUmVneCtcIihbXjxdKikpKihbXjxdKyk/XCIsXCJnXCIpO1xuXG5jbGFzcyBPcmRlcmVkT2JqUGFyc2Vye1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuY3VycmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMudGFnc05vZGVTdGFjayA9IFtdO1xuICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0ge307XG4gICAgdGhpcy5sYXN0RW50aXRpZXMgPSB7XG4gICAgICBcImFwb3NcIiA6IHsgcmVnZXg6IC8mKGFwb3N8IzM5fCN4MjcpOy9nLCB2YWwgOiBcIidcIn0sXG4gICAgICBcImd0XCIgOiB7IHJlZ2V4OiAvJihndHwjNjJ8I3gzRSk7L2csIHZhbCA6IFwiPlwifSxcbiAgICAgIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MHwjeDNDKTsvZywgdmFsIDogXCI8XCJ9LFxuICAgICAgXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNHwjeDIyKTsvZywgdmFsIDogXCJcXFwiXCJ9LFxuICAgIH07XG4gICAgdGhpcy5hbXBFbnRpdHkgPSB7IHJlZ2V4OiAvJihhbXB8IzM4fCN4MjYpOy9nLCB2YWwgOiBcIiZcIn07XG4gICAgdGhpcy5odG1sRW50aXRpZXMgPSB7XG4gICAgICBcInNwYWNlXCI6IHsgcmVnZXg6IC8mKG5ic3B8IzE2MCk7L2csIHZhbDogXCIgXCIgfSxcbiAgICAgIC8vIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MCk7L2csIHZhbDogXCI8XCIgfSxcbiAgICAgIC8vIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2Mik7L2csIHZhbDogXCI+XCIgfSxcbiAgICAgIC8vIFwiYW1wXCIgOiB7IHJlZ2V4OiAvJihhbXB8IzM4KTsvZywgdmFsOiBcIiZcIiB9LFxuICAgICAgLy8gXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNCk7L2csIHZhbDogXCJcXFwiXCIgfSxcbiAgICAgIC8vIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzkpOy9nLCB2YWw6IFwiJ1wiIH0sXG4gICAgICBcImNlbnRcIiA6IHsgcmVnZXg6IC8mKGNlbnR8IzE2Mik7L2csIHZhbDogXCLColwiIH0sXG4gICAgICBcInBvdW5kXCIgOiB7IHJlZ2V4OiAvJihwb3VuZHwjMTYzKTsvZywgdmFsOiBcIsKjXCIgfSxcbiAgICAgIFwieWVuXCIgOiB7IHJlZ2V4OiAvJih5ZW58IzE2NSk7L2csIHZhbDogXCLCpVwiIH0sXG4gICAgICBcImV1cm9cIiA6IHsgcmVnZXg6IC8mKGV1cm98IzgzNjQpOy9nLCB2YWw6IFwi4oKsXCIgfSxcbiAgICAgIFwiY29weXJpZ2h0XCIgOiB7IHJlZ2V4OiAvJihjb3B5fCMxNjkpOy9nLCB2YWw6IFwiwqlcIiB9LFxuICAgICAgXCJyZWdcIiA6IHsgcmVnZXg6IC8mKHJlZ3wjMTc0KTsvZywgdmFsOiBcIsKuXCIgfSxcbiAgICAgIFwiaW5yXCIgOiB7IHJlZ2V4OiAvJihpbnJ8IzgzNzcpOy9nLCB2YWw6IFwi4oK5XCIgfSxcbiAgICB9O1xuICAgIHRoaXMuYWRkRXh0ZXJuYWxFbnRpdGllcyA9IGFkZEV4dGVybmFsRW50aXRpZXM7XG4gICAgdGhpcy5wYXJzZVhtbCA9IHBhcnNlWG1sO1xuICAgIHRoaXMucGFyc2VUZXh0RGF0YSA9IHBhcnNlVGV4dERhdGE7XG4gICAgdGhpcy5yZXNvbHZlTmFtZVNwYWNlID0gcmVzb2x2ZU5hbWVTcGFjZTtcbiAgICB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCA9IGJ1aWxkQXR0cmlidXRlc01hcDtcbiAgICB0aGlzLmlzSXRTdG9wTm9kZSA9IGlzSXRTdG9wTm9kZTtcbiAgICB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlID0gcmVwbGFjZUVudGl0aWVzVmFsdWU7XG4gICAgdGhpcy5yZWFkU3RvcE5vZGVEYXRhID0gcmVhZFN0b3BOb2RlRGF0YTtcbiAgICB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcgPSBzYXZlVGV4dFRvUGFyZW50VGFnO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gYWRkRXh0ZXJuYWxFbnRpdGllcyhleHRlcm5hbEVudGl0aWVzKXtcbiAgY29uc3QgZW50S2V5cyA9IE9iamVjdC5rZXlzKGV4dGVybmFsRW50aXRpZXMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVudEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbnQgPSBlbnRLZXlzW2ldO1xuICAgIHRoaXMubGFzdEVudGl0aWVzW2VudF0gPSB7XG4gICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIrZW50K1wiO1wiLFwiZ1wiKSxcbiAgICAgICB2YWwgOiBleHRlcm5hbEVudGl0aWVzW2VudF1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRvbnRUcmltXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0F0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMZWFmTm9kZVxuICogQHBhcmFtIHtib29sZWFufSBlc2NhcGVFbnRpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZVRleHREYXRhKHZhbCwgdGFnTmFtZSwgalBhdGgsIGRvbnRUcmltLCBoYXNBdHRyaWJ1dGVzLCBpc0xlYWZOb2RlLCBlc2NhcGVFbnRpdGllcykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMgJiYgIWRvbnRUcmltKSB7XG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgIH1cbiAgICBpZih2YWwubGVuZ3RoID4gMCl7XG4gICAgICBpZighZXNjYXBlRW50aXRpZXMpIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgICAgIFxuICAgICAgY29uc3QgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHZhbCwgalBhdGgsIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUpO1xuICAgICAgaWYobmV3dmFsID09PSBudWxsIHx8IG5ld3ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgLy9kb24ndCBwYXJzZVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld3ZhbCAhPT0gdHlwZW9mIHZhbCB8fCBuZXd2YWwgIT09IHZhbCl7XG4gICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgIHJldHVybiBuZXd2YWw7XG4gICAgICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyl7XG4gICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRWYWwgPSB2YWwudHJpbSgpO1xuICAgICAgICBpZih0cmltbWVkVmFsID09PSB2YWwpe1xuICAgICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYW1lU3BhY2UodGFnbmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KSB7XG4gICAgY29uc3QgdGFncyA9IHRhZ25hbWUuc3BsaXQoJzonKTtcbiAgICBjb25zdCBwcmVmaXggPSB0YWduYW1lLmNoYXJBdCgwKSA9PT0gJy8nID8gJy8nIDogJyc7XG4gICAgaWYgKHRhZ3NbMF0gPT09ICd4bWxucycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRhZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB0YWduYW1lID0gcHJlZml4ICsgdGFnc1sxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ25hbWU7XG59XG5cbi8vVE9ETzogY2hhbmdlIHJlZ2V4IHRvIGNhcHR1cmUgTlNcbi8vY29uc3QgYXR0cnNSZWd4ID0gbmV3IFJlZ0V4cChcIihbXFxcXHdcXFxcLVxcXFwuXFxcXDpdKylcXFxccyo9XFxcXHMqKFsnXFxcIl0pKCgufFxcbikqPylcXFxcMlwiLFwiZ21cIik7XG5jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKCcoW15cXFxccz1dKylcXFxccyooPVxcXFxzKihbXFwnXCJdKShbXFxcXHNcXFxcU10qPylcXFxcMyk/JywgJ2dtJyk7XG5cbmZ1bmN0aW9uIGJ1aWxkQXR0cmlidXRlc01hcChhdHRyU3RyLCBqUGF0aCkge1xuICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzICYmIHR5cGVvZiBhdHRyU3RyID09PSAnc3RyaW5nJykge1xuICAgIC8vIGF0dHJTdHIgPSBhdHRyU3RyLnJlcGxhY2UoL1xccj9cXG4vZywgJyAnKTtcbiAgICAvL2F0dHJTdHIgPSBhdHRyU3RyIHx8IGF0dHJTdHIudHJpbSgpO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHV0aWwuZ2V0QWxsTWF0Y2hlcyhhdHRyU3RyLCBhdHRyc1JlZ3gpO1xuICAgIGNvbnN0IGxlbiA9IG1hdGNoZXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgY29uc3QgYXR0cnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IHRoaXMucmVzb2x2ZU5hbWVTcGFjZShtYXRjaGVzW2ldWzFdKTtcbiAgICAgIGxldCBvbGRWYWwgPSBtYXRjaGVzW2ldWzRdO1xuICAgICAgbGV0IGFOYW1lID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXggKyBhdHRyTmFtZTtcbiAgICAgIGlmIChhdHRyTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgYU5hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtQXR0cmlidXRlTmFtZShhTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoYU5hbWUgPT09IFwiX19wcm90b19fXCIpIGFOYW1lICA9IFwiI19fcHJvdG9fX1wiO1xuICAgICAgICBpZiAob2xkVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMpIHtcbiAgICAgICAgICAgIG9sZFZhbCA9IG9sZFZhbC50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9sZFZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUob2xkVmFsKTtcbiAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ck5hbWUsIG9sZFZhbCwgalBhdGgpO1xuICAgICAgICAgIGlmKG5ld1ZhbCA9PT0gbnVsbCB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBvbGRWYWw7XG4gICAgICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld1ZhbCAhPT0gdHlwZW9mIG9sZFZhbCB8fCBuZXdWYWwgIT09IG9sZFZhbCl7XG4gICAgICAgICAgICAvL292ZXJ3cml0ZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gbmV3VmFsO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgLy9wYXJzZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgICAgb2xkVmFsLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFyc2VBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBhdHRyc1thTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgIGNvbnN0IGF0dHJDb2xsZWN0aW9uID0ge307XG4gICAgICBhdHRyQ29sbGVjdGlvblt0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZV0gPSBhdHRycztcbiAgICAgIHJldHVybiBhdHRyQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9XG59XG5cbmNvbnN0IHBhcnNlWG1sID0gZnVuY3Rpb24oeG1sRGF0YSkge1xuICB4bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpOyAvL1RPRE86IHJlbW92ZSB0aGlzIGxpbmVcbiAgY29uc3QgeG1sT2JqID0gbmV3IHhtbE5vZGUoJyF4bWwnKTtcbiAgbGV0IGN1cnJlbnROb2RlID0geG1sT2JqO1xuICBsZXQgdGV4dERhdGEgPSBcIlwiO1xuICBsZXQgalBhdGggPSBcIlwiO1xuICBmb3IobGV0IGk9MDsgaTwgeG1sRGF0YS5sZW5ndGg7IGkrKyl7Ly9mb3IgZWFjaCBjaGFyIGluIFhNTCBkYXRhXG4gICAgY29uc3QgY2ggPSB4bWxEYXRhW2ldO1xuICAgIGlmKGNoID09PSAnPCcpe1xuICAgICAgLy8gY29uc3QgbmV4dEluZGV4ID0gaSsxO1xuICAgICAgLy8gY29uc3QgXzJuZENoYXIgPSB4bWxEYXRhW25leHRJbmRleF07XG4gICAgICBpZiggeG1sRGF0YVtpKzFdID09PSAnLycpIHsvL0Nsb3NpbmcgVGFnXG4gICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPlwiLCBpLCBcIkNsb3NpbmcgVGFnIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgIGxldCB0YWdOYW1lID0geG1sRGF0YS5zdWJzdHJpbmcoaSsyLGNsb3NlSW5kZXgpLnRyaW0oKTtcblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpe1xuICAgICAgICAgIGNvbnN0IGNvbG9uSW5kZXggPSB0YWdOYW1lLmluZGV4T2YoXCI6XCIpO1xuICAgICAgICAgIGlmKGNvbG9uSW5kZXggIT09IC0xKXtcbiAgICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cihjb2xvbkluZGV4KzEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY3VycmVudE5vZGUpe1xuICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgXG4gICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpOy8vYXZvaWQgcmVjdXJzc2lvbiwgc2V0IHRoZSBwYXJlbnQgdGFnIHNjb3BlXG4gICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG5cbiAgICAgICAgbGV0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgZmFsc2UsIFwiPz5cIik7XG4gICAgICAgIGlmKCF0YWdEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJQaSBUYWcgaXMgbm90IGNsb3NlZC5cIik7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIGlmKCAodGhpcy5vcHRpb25zLmlnbm9yZURlY2xhcmF0aW9uICYmIHRhZ0RhdGEudGFnTmFtZSA9PT0gXCI/eG1sXCIpIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVQaVRhZ3Mpe1xuXG4gICAgICAgIH1lbHNle1xuICBcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIGNoaWxkTm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgXCJcIik7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYodGFnRGF0YS50YWdOYW1lICE9PSB0YWdEYXRhLnRhZ0V4cCAmJiB0YWdEYXRhLmF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRGF0YS50YWdFeHAsIGpQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcblxuICAgICAgICB9XG5cblxuICAgICAgICBpID0gdGFnRGF0YS5jbG9zZUluZGV4ICsgMTtcbiAgICAgIH0gZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMykgPT09ICchLS0nKSB7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIi0tPlwiLCBpKzQsIFwiQ29tbWVudCBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICBpZih0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lKXtcbiAgICAgICAgICBjb25zdCBjb21tZW50ID0geG1sRGF0YS5zdWJzdHJpbmcoaSArIDQsIGVuZEluZGV4IC0gMik7XG5cbiAgICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcblxuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lLCBbIHsgW3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdIDogY29tbWVudCB9IF0pO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBlbmRJbmRleDtcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIUQnKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWREb2NUeXBlKHhtbERhdGEsIGkpO1xuICAgICAgICB0aGlzLmRvY1R5cGVFbnRpdGllcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICAgICAgaSA9IHJlc3VsdC5pO1xuICAgICAgfWVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7XG4gICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiQ0RBVEEgaXMgbm90IGNsb3NlZC5cIikgLSAyO1xuICAgICAgICBjb25zdCB0YWdFeHAgPSB4bWxEYXRhLnN1YnN0cmluZyhpICsgOSxjbG9zZUluZGV4KTtcblxuICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcblxuICAgICAgICAvL2NkYXRhIHNob3VsZCBiZSBzZXQgZXZlbiBpZiBpdCBpcyAwIGxlbmd0aCBzdHJpbmdcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUpe1xuICAgICAgICAgIC8vIGxldCB2YWwgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnRXhwLCB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSwgalBhdGggKyBcIi5cIiArIHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgLy8gaWYoIXZhbCkgdmFsID0gXCJcIjtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiB0YWdFeHAgfSBdKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyc2VUZXh0RGF0YSh0YWdFeHAsIGN1cnJlbnROb2RlLnRhZ25hbWUsIGpQYXRoLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgaWYodmFsID09IHVuZGVmaW5lZCkgdmFsID0gXCJcIjtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaSA9IGNsb3NlSW5kZXggKyAyO1xuICAgICAgfWVsc2Ugey8vT3BlbmluZyB0YWdcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlYWRUYWdFeHAoeG1sRGF0YSxpLCB0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpO1xuICAgICAgICBsZXQgdGFnTmFtZT0gcmVzdWx0LnRhZ05hbWU7XG4gICAgICAgIGxldCB0YWdFeHAgPSByZXN1bHQudGFnRXhwO1xuICAgICAgICBsZXQgYXR0ckV4cFByZXNlbnQgPSByZXN1bHQuYXR0ckV4cFByZXNlbnQ7XG4gICAgICAgIGxldCBjbG9zZUluZGV4ID0gcmVzdWx0LmNsb3NlSW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvL3NhdmUgdGV4dCBhcyBjaGlsZCBub2RlXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiB0ZXh0RGF0YSkge1xuICAgICAgICAgIGlmKGN1cnJlbnROb2RlLnRhZ25hbWUgIT09ICcheG1sJyl7XG4gICAgICAgICAgICAvL3doZW4gbmVzdGVkIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRhZ05hbWUgIT09IHhtbE9iai50YWduYW1lKXtcbiAgICAgICAgICBqUGF0aCArPSBqUGF0aCA/IFwiLlwiICsgdGFnTmFtZSA6IHRhZ05hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIHdhcyB1bnBhaXJlZCB0YWdcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IGN1cnJlbnROb2RlO1xuICAgICAgICBpZihsYXN0VGFnICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnLnRhZ25hbWUpICE9PSAtMSApe1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJdFN0b3BOb2RlKHRoaXMub3B0aW9ucy5zdG9wTm9kZXMsIGpQYXRoLCB0YWdOYW1lKSkgeyAvL1RPRE86IG5hbWVzcGFjZVxuICAgICAgICAgIGxldCB0YWdDb250ZW50ID0gXCJcIjtcbiAgICAgICAgICAvL3NlbGYtY2xvc2luZyB0YWdcbiAgICAgICAgICBpZih0YWdFeHAubGVuZ3RoID4gMCAmJiB0YWdFeHAubGFzdEluZGV4T2YoXCIvXCIpID09PSB0YWdFeHAubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICBpID0gcmVzdWx0LmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vYm9vbGVhbiB0YWdcbiAgICAgICAgICBlbHNlIGlmKHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL25vcm1hbCB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy9yZWFkIHVudGlsIGNsb3NpbmcgdGFnIGlzIGZvdW5kXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgdGFnTmFtZSwgY2xvc2VJbmRleCArIDEpO1xuICAgICAgICAgICAgaWYoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiAke3RhZ05hbWV9YCk7XG4gICAgICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gcmVzdWx0LnRhZ0NvbnRlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRhZ0NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRhZ0NvbnRlbnQgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnQ29udGVudCwgdGFnTmFtZSwgalBhdGgsIHRydWUsIGF0dHJFeHBQcmVzZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICBjaGlsZE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRhZ0NvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gICAgICAgIH1lbHNle1xuICAvL3NlbGZDbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ05hbWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cigwLCB0YWdFeHAubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgICBpZih0YWdOYW1lICE9PSB0YWdFeHAgJiYgYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gICAgICAgICAgfVxuICAgIC8vb3BlbmluZyB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUoIHRhZ05hbWUpO1xuICAgICAgICAgICAgdGhpcy50YWdzTm9kZVN0YWNrLnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0YWdOYW1lICE9PSB0YWdFeHAgJiYgYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY2hpbGROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gICAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIHRleHREYXRhICs9IHhtbERhdGFbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB4bWxPYmouY2hpbGQ7XG59XG5cbmNvbnN0IHJlcGxhY2VFbnRpdGllc1ZhbHVlID0gZnVuY3Rpb24odmFsKXtcblxuICBpZih0aGlzLm9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKXtcbiAgICBmb3IobGV0IGVudGl0eU5hbWUgaW4gdGhpcy5kb2NUeXBlRW50aXRpZXMpe1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5kb2NUeXBlRW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ3gsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgICBmb3IobGV0IGVudGl0eU5hbWUgaW4gdGhpcy5sYXN0RW50aXRpZXMpe1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5sYXN0RW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gICAgaWYodGhpcy5vcHRpb25zLmh0bWxFbnRpdGllcyl7XG4gICAgICBmb3IobGV0IGVudGl0eU5hbWUgaW4gdGhpcy5odG1sRW50aXRpZXMpe1xuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmh0bWxFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbCA9IHZhbC5yZXBsYWNlKCB0aGlzLmFtcEVudGl0eS5yZWdleCwgdGhpcy5hbXBFbnRpdHkudmFsKTtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoLCBpc0xlYWZOb2RlKSB7XG4gIGlmICh0ZXh0RGF0YSkgeyAvL3N0b3JlIHByZXZpb3VzbHkgY29sbGVjdGVkIGRhdGEgYXMgdGV4dE5vZGVcbiAgICBpZihpc0xlYWZOb2RlID09PSB1bmRlZmluZWQpIGlzTGVhZk5vZGUgPSBPYmplY3Qua2V5cyhjdXJyZW50Tm9kZS5jaGlsZCkubGVuZ3RoID09PSAwXG4gICAgXG4gICAgdGV4dERhdGEgPSB0aGlzLnBhcnNlVGV4dERhdGEodGV4dERhdGEsXG4gICAgICBjdXJyZW50Tm9kZS50YWduYW1lLFxuICAgICAgalBhdGgsXG4gICAgICBmYWxzZSxcbiAgICAgIGN1cnJlbnROb2RlW1wiOkBcIl0gPyBPYmplY3Qua2V5cyhjdXJyZW50Tm9kZVtcIjpAXCJdKS5sZW5ndGggIT09IDAgOiBmYWxzZSxcbiAgICAgIGlzTGVhZk5vZGUpO1xuXG4gICAgaWYgKHRleHREYXRhICE9PSB1bmRlZmluZWQgJiYgdGV4dERhdGEgIT09IFwiXCIpXG4gICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgdGV4dERhdGEpO1xuICAgIHRleHREYXRhID0gXCJcIjtcbiAgfVxuICByZXR1cm4gdGV4dERhdGE7XG59XG5cbi8vVE9ETzogdXNlIGpQYXRoIHRvIHNpbXBsaWZ5IHRoZSBsb2dpY1xuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nW119IHN0b3BOb2RlcyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBqUGF0aFxuICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRUYWdOYW1lIFxuICovXG5mdW5jdGlvbiBpc0l0U3RvcE5vZGUoc3RvcE5vZGVzLCBqUGF0aCwgY3VycmVudFRhZ05hbWUpe1xuICBjb25zdCBhbGxOb2Rlc0V4cCA9IFwiKi5cIiArIGN1cnJlbnRUYWdOYW1lO1xuICBmb3IgKGNvbnN0IHN0b3BOb2RlUGF0aCBpbiBzdG9wTm9kZXMpIHtcbiAgICBjb25zdCBzdG9wTm9kZUV4cCA9IHN0b3BOb2Rlc1tzdG9wTm9kZVBhdGhdO1xuICAgIGlmKCBhbGxOb2Rlc0V4cCA9PT0gc3RvcE5vZGVFeHAgfHwgalBhdGggPT09IHN0b3BOb2RlRXhwICApIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0YWcgRXhwcmVzc2lvbiBhbmQgd2hlcmUgaXQgaXMgZW5kaW5nIGhhbmRsaW5nIHNpbmdsZS1kb2J1bGUgcXVvdGVzIHNpdHVhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGEgXG4gKiBAcGFyYW0ge251bWJlcn0gaSBzdGFydGluZyBpbmRleFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHRhZ0V4cFdpdGhDbG9zaW5nSW5kZXgoeG1sRGF0YSwgaSwgY2xvc2luZ0NoYXIgPSBcIj5cIil7XG4gIGxldCBhdHRyQm91bmRhcnk7XG4gIGxldCB0YWdFeHAgPSBcIlwiO1xuICBmb3IgKGxldCBpbmRleCA9IGk7IGluZGV4IDwgeG1sRGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBsZXQgY2ggPSB4bWxEYXRhW2luZGV4XTtcbiAgICBpZiAoYXR0ckJvdW5kYXJ5KSB7XG4gICAgICAgIGlmIChjaCA9PT0gYXR0ckJvdW5kYXJ5KSBhdHRyQm91bmRhcnkgPSBcIlwiOy8vcmVzZXRcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnXCInIHx8IGNoID09PSBcIidcIikge1xuICAgICAgICBhdHRyQm91bmRhcnkgPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBjbG9zaW5nQ2hhclswXSkge1xuICAgICAgaWYoY2xvc2luZ0NoYXJbMV0pe1xuICAgICAgICBpZih4bWxEYXRhW2luZGV4ICsgMV0gPT09IGNsb3NpbmdDaGFyWzFdKXtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB0YWdFeHAsXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSAnXFx0Jykge1xuICAgICAgY2ggPSBcIiBcIlxuICAgIH1cbiAgICB0YWdFeHAgKz0gY2g7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBzdHIsIGksIGVyck1zZyl7XG4gIGNvbnN0IGNsb3NpbmdJbmRleCA9IHhtbERhdGEuaW5kZXhPZihzdHIsIGkpO1xuICBpZihjbG9zaW5nSW5kZXggPT09IC0xKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKVxuICB9ZWxzZXtcbiAgICByZXR1cm4gY2xvc2luZ0luZGV4ICsgc3RyLmxlbmd0aCAtIDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFRhZ0V4cCh4bWxEYXRhLGksIHJlbW92ZU5TUHJlZml4LCBjbG9zaW5nQ2hhciA9IFwiPlwiKXtcbiAgY29uc3QgcmVzdWx0ID0gdGFnRXhwV2l0aENsb3NpbmdJbmRleCh4bWxEYXRhLCBpKzEsIGNsb3NpbmdDaGFyKTtcbiAgaWYoIXJlc3VsdCkgcmV0dXJuO1xuICBsZXQgdGFnRXhwID0gcmVzdWx0LmRhdGE7XG4gIGNvbnN0IGNsb3NlSW5kZXggPSByZXN1bHQuaW5kZXg7XG4gIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gdGFnRXhwLnNlYXJjaCgvXFxzLyk7XG4gIGxldCB0YWdOYW1lID0gdGFnRXhwO1xuICBsZXQgYXR0ckV4cFByZXNlbnQgPSB0cnVlO1xuICBpZihzZXBhcmF0b3JJbmRleCAhPT0gLTEpey8vc2VwYXJhdGUgdGFnIG5hbWUgYW5kIGF0dHJpYnV0ZXMgZXhwcmVzc2lvblxuICAgIHRhZ05hbWUgPSB0YWdFeHAuc3Vic3RyKDAsIHNlcGFyYXRvckluZGV4KS5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB0YWdFeHAgPSB0YWdFeHAuc3Vic3RyKHNlcGFyYXRvckluZGV4ICsgMSk7XG4gIH1cblxuICBpZihyZW1vdmVOU1ByZWZpeCl7XG4gICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICBhdHRyRXhwUHJlc2VudCA9IHRhZ05hbWUgIT09IHJlc3VsdC5kYXRhLnN1YnN0cihjb2xvbkluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIHRhZ0V4cDogdGFnRXhwLFxuICAgIGNsb3NlSW5kZXg6IGNsb3NlSW5kZXgsXG4gICAgYXR0ckV4cFByZXNlbnQ6IGF0dHJFeHBQcmVzZW50LFxuICB9XG59XG4vKipcbiAqIGZpbmQgcGFpcmVkIHRhZyBmb3IgYSBzdG9wIG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxEYXRhIFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgXG4gKiBAcGFyYW0ge251bWJlcn0gaSBcbiAqL1xuZnVuY3Rpb24gcmVhZFN0b3BOb2RlRGF0YSh4bWxEYXRhLCB0YWdOYW1lLCBpKXtcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGk7XG4gIC8vIFN0YXJ0aW5nIGF0IDEgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGFuIG9wZW4gdGFnXG4gIGxldCBvcGVuVGFnQ291bnQgPSAxO1xuXG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmKCB4bWxEYXRhW2ldID09PSBcIjxcIil7IFxuICAgICAgaWYgKHhtbERhdGFbaSsxXSA9PT0gXCIvXCIpIHsvL2Nsb3NlIHRhZ1xuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPlwiLCBpLCBgJHt0YWdOYW1lfSBpcyBub3QgY2xvc2VkYCk7XG4gICAgICAgICAgbGV0IGNsb3NlVGFnTmFtZSA9IHhtbERhdGEuc3Vic3RyaW5nKGkrMixjbG9zZUluZGV4KS50cmltKCk7XG4gICAgICAgICAgaWYoY2xvc2VUYWdOYW1lID09PSB0YWdOYW1lKXtcbiAgICAgICAgICAgIG9wZW5UYWdDb3VudC0tO1xuICAgICAgICAgICAgaWYgKG9wZW5UYWdDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvbnRlbnQ6IHhtbERhdGEuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGkpLFxuICAgICAgICAgICAgICAgIGkgOiBjbG9zZUluZGV4XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YVtpKzFdID09PSAnPycpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI/PlwiLCBpKzEsIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMykgPT09ICchLS0nKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiLS0+XCIsIGkrMywgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFbJykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIl1dPlwiLCBpLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpIC0gMjtcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSwgaSwgJz4nKVxuXG4gICAgICAgICAgaWYgKHRhZ0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5UYWdOYW1lID0gdGFnRGF0YSAmJiB0YWdEYXRhLnRhZ05hbWU7XG4gICAgICAgICAgICBpZiAob3BlblRhZ05hbWUgPT09IHRhZ05hbWUgJiYgdGFnRGF0YS50YWdFeHBbdGFnRGF0YS50YWdFeHAubGVuZ3RoLTFdICE9PSBcIi9cIikge1xuICAgICAgICAgICAgICBvcGVuVGFnQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGk9dGFnRGF0YS5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9Ly9lbmQgZm9yIGxvb3Bcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZSh2YWwsIHNob3VsZFBhcnNlLCBvcHRpb25zKSB7XG4gIGlmIChzaG91bGRQYXJzZSAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIC8vY29uc29sZS5sb2cob3B0aW9ucylcbiAgICBjb25zdCBuZXd2YWwgPSB2YWwudHJpbSgpO1xuICAgIGlmKG5ld3ZhbCA9PT0gJ3RydWUnICkgcmV0dXJuIHRydWU7XG4gICAgZWxzZSBpZihuZXd2YWwgPT09ICdmYWxzZScgKSByZXR1cm4gZmFsc2U7XG4gICAgZWxzZSByZXR1cm4gdG9OdW1iZXIodmFsLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodXRpbC5pc0V4aXN0KHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IE9yZGVyZWRPYmpQYXJzZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IG5vZGUgXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiBwcmV0dGlmeShub2RlLCBvcHRpb25zKXtcbiAgcmV0dXJuIGNvbXByZXNzKCBub2RlLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IGFyciBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIFxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoIFxuICogQHJldHVybnMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNvbXByZXNzKGFyciwgb3B0aW9ucywgalBhdGgpe1xuICBsZXQgdGV4dDtcbiAgY29uc3QgY29tcHJlc3NlZE9iaiA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRhZ09iaiA9IGFycltpXTtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BOYW1lKHRhZ09iaik7XG4gICAgbGV0IG5ld0pwYXRoID0gXCJcIjtcbiAgICBpZihqUGF0aCA9PT0gdW5kZWZpbmVkKSBuZXdKcGF0aCA9IHByb3BlcnR5O1xuICAgIGVsc2UgbmV3SnBhdGggPSBqUGF0aCArIFwiLlwiICsgcHJvcGVydHk7XG5cbiAgICBpZihwcm9wZXJ0eSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpe1xuICAgICAgaWYodGV4dCA9PT0gdW5kZWZpbmVkKSB0ZXh0ID0gdGFnT2JqW3Byb3BlcnR5XTtcbiAgICAgIGVsc2UgdGV4dCArPSBcIlwiICsgdGFnT2JqW3Byb3BlcnR5XTtcbiAgICB9ZWxzZSBpZihwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKXtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1lbHNlIGlmKHRhZ09ialtwcm9wZXJ0eV0pe1xuICAgICAgXG4gICAgICBsZXQgdmFsID0gY29tcHJlc3ModGFnT2JqW3Byb3BlcnR5XSwgb3B0aW9ucywgbmV3SnBhdGgpO1xuICAgICAgY29uc3QgaXNMZWFmID0gaXNMZWFmVGFnKHZhbCwgb3B0aW9ucyk7XG5cbiAgICAgIGlmKHRhZ09ialtcIjpAXCJdKXtcbiAgICAgICAgYXNzaWduQXR0cmlidXRlcyggdmFsLCB0YWdPYmpbXCI6QFwiXSwgbmV3SnBhdGgsIG9wdGlvbnMpO1xuICAgICAgfWVsc2UgaWYoT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDEgJiYgdmFsW29wdGlvbnMudGV4dE5vZGVOYW1lXSAhPT0gdW5kZWZpbmVkICYmICFvcHRpb25zLmFsd2F5c0NyZWF0ZVRleHROb2RlKXtcbiAgICAgICAgdmFsID0gdmFsW29wdGlvbnMudGV4dE5vZGVOYW1lXTtcbiAgICAgIH1lbHNlIGlmKE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwKXtcbiAgICAgICAgaWYob3B0aW9ucy5hbHdheXNDcmVhdGVUZXh0Tm9kZSkgdmFsW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IFwiXCI7XG4gICAgICAgIGVsc2UgdmFsID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgaWYoY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCAmJiBjb21wcmVzc2VkT2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICBpZighQXJyYXkuaXNBcnJheShjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gWyBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgIH1lbHNle1xuICAgICAgICAvL1RPRE86IGlmIGEgbm9kZSBpcyBub3QgYW4gYXJyYXksIHRoZW4gY2hlY2sgaWYgaXQgc2hvdWxkIGJlIGFuIGFycmF5XG4gICAgICAgIC8vYWxzbyBkZXRlcm1pbmUgaWYgaXQgaXMgYSBsZWFmIG5vZGVcbiAgICAgICAgaWYgKG9wdGlvbnMuaXNBcnJheShwcm9wZXJ0eSwgbmV3SnBhdGgsIGlzTGVhZiApKSB7XG4gICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSBbdmFsXTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gIH1cbiAgLy8gaWYodGV4dCAmJiB0ZXh0Lmxlbmd0aCA+IDApIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgaWYodHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIpe1xuICAgIGlmKHRleHQubGVuZ3RoID4gMCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICB9ZWxzZSBpZih0ZXh0ICE9PSB1bmRlZmluZWQpIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgcmV0dXJuIGNvbXByZXNzZWRPYmo7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iail7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGlmKGtleSAhPT0gXCI6QFwiKSByZXR1cm4ga2V5O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkF0dHJpYnV0ZXMob2JqLCBhdHRyTWFwLCBqcGF0aCwgb3B0aW9ucyl7XG4gIGlmIChhdHRyTWFwKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJNYXApO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXRyck5hbWUgPSBrZXlzW2ldO1xuICAgICAgaWYgKG9wdGlvbnMuaXNBcnJheShhdHJyTmFtZSwganBhdGggKyBcIi5cIiArIGF0cnJOYW1lLCB0cnVlLCB0cnVlKSkge1xuICAgICAgICBvYmpbYXRyck5hbWVdID0gWyBhdHRyTWFwW2F0cnJOYW1lXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2F0cnJOYW1lXSA9IGF0dHJNYXBbYXRyck5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0xlYWZUYWcob2JqLCBvcHRpb25zKXtcbiAgY29uc3QgcHJvcENvdW50ID0gT2JqZWN0LmtleXMob2JqKS5sZW5ndGg7XG4gIGlmKCBwcm9wQ291bnQgPT09IDAgfHwgKHByb3BDb3VudCA9PT0gMSAmJiBvYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdKSApIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnByZXR0aWZ5ID0gcHJldHRpZnk7XG4iLAogICAgImNvbnN0IHsgYnVpbGRPcHRpb25zfSA9IHJlcXVpcmUoXCIuL09wdGlvbnNCdWlsZGVyXCIpO1xuY29uc3QgT3JkZXJlZE9ialBhcnNlciA9IHJlcXVpcmUoXCIuL09yZGVyZWRPYmpQYXJzZXJcIik7XG5jb25zdCB7IHByZXR0aWZ5fSA9IHJlcXVpcmUoXCIuL25vZGUyanNvblwiKTtcbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcicpO1xuXG5jbGFzcyBYTUxQYXJzZXJ7XG4gICAgXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllcyA9IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBidWlsZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBYTUwgZGF0cyB0byBKUyBvYmplY3QgXG4gICAgICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSB4bWxEYXRhIFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IHZhbGlkYXRpb25PcHRpb24gXG4gICAgICovXG4gICAgcGFyc2UoeG1sRGF0YSx2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgaWYodHlwZW9mIHhtbERhdGEgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YS50b1N0cmluZyl7XG4gICAgICAgICAgICB4bWxEYXRhID0geG1sRGF0YS50b1N0cmluZygpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBkYXRhIGlzIGFjY2VwdGVkIGluIFN0cmluZyBvciBCeXRlc1tdIGZvcm0uXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYoIHZhbGlkYXRpb25PcHRpb24pe1xuICAgICAgICAgICAgaWYodmFsaWRhdGlvbk9wdGlvbiA9PT0gdHJ1ZSkgdmFsaWRhdGlvbk9wdGlvbiA9IHt9OyAvL3ZhbGlkYXRlIHdpdGggZGVmYXVsdCBvcHRpb25zXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZSh4bWxEYXRhLCB2YWxpZGF0aW9uT3B0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIGAke3Jlc3VsdC5lcnIubXNnfToke3Jlc3VsdC5lcnIubGluZX06JHtyZXN1bHQuZXJyLmNvbH1gIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZGVyZWRPYmpQYXJzZXIgPSBuZXcgT3JkZXJlZE9ialBhcnNlcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBvcmRlcmVkT2JqUGFyc2VyLmFkZEV4dGVybmFsRW50aXRpZXModGhpcy5leHRlcm5hbEVudGl0aWVzKTtcbiAgICAgICAgY29uc3Qgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWRPYmpQYXJzZXIucGFyc2VYbWwoeG1sRGF0YSk7XG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyIHx8IG9yZGVyZWRSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG9yZGVyZWRSZXN1bHQ7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByZXR0aWZ5KG9yZGVyZWRSZXN1bHQsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIEVudGl0eSB3aGljaCBpcyBub3QgYnkgZGVmYXVsdCBzdXBwb3J0ZWQgYnkgdGhpcyBsaWJyYXJ5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgXG4gICAgICovXG4gICAgYWRkRW50aXR5KGtleSwgdmFsdWUpe1xuICAgICAgICBpZih2YWx1ZS5pbmRleE9mKFwiJlwiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IHZhbHVlIGNhbid0IGhhdmUgJyYnXCIpXG4gICAgICAgIH1lbHNlIGlmKGtleS5pbmRleE9mKFwiJlwiKSAhPT0gLTEgfHwga2V5LmluZGV4T2YoXCI7XCIpICE9PSAtMSl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgbXVzdCBiZSBzZXQgd2l0aG91dCAnJicgYW5kICc7Jy4gRWcuIHVzZSAnI3hEJyBmb3IgJyYjeEQ7J1wiKVxuICAgICAgICB9ZWxzZSBpZih2YWx1ZSA9PT0gXCImXCIpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IHdpdGggdmFsdWUgJyYnIGlzIG5vdCBwZXJtaXR0ZWRcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEVudGl0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBYTUxQYXJzZXI7IiwKICAgICJjb25zdCBFT0wgPSBcIlxcblwiO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gakFycmF5IFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdG9YbWwoakFycmF5LCBvcHRpb25zKSB7XG4gICAgbGV0IGluZGVudGF0aW9uID0gXCJcIjtcbiAgICBpZiAob3B0aW9ucy5mb3JtYXQgJiYgb3B0aW9ucy5pbmRlbnRCeS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGluZGVudGF0aW9uID0gRU9MO1xuICAgIH1cbiAgICByZXR1cm4gYXJyVG9TdHIoakFycmF5LCBvcHRpb25zLCBcIlwiLCBpbmRlbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGFyclRvU3RyKGFyciwgb3B0aW9ucywgalBhdGgsIGluZGVudGF0aW9uKSB7XG4gICAgbGV0IHhtbFN0ciA9IFwiXCI7XG4gICAgbGV0IGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgICAgICBsZXQgbmV3SlBhdGggPSBcIlwiO1xuICAgICAgICBpZiAoalBhdGgubGVuZ3RoID09PSAwKSBuZXdKUGF0aCA9IHRhZ05hbWVcbiAgICAgICAgZWxzZSBuZXdKUGF0aCA9IGAke2pQYXRofS4ke3RhZ05hbWV9YDtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICAgIGxldCB0YWdUZXh0ID0gdGFnT2JqW3RhZ05hbWVdO1xuICAgICAgICAgICAgaWYgKCFpc1N0b3BOb2RlKG5ld0pQYXRoLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSBvcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHRhZ1RleHQpO1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSByZXBsYWNlRW50aXRpZXNWYWx1ZSh0YWdUZXh0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ByZXZpb3VzRWxlbWVudFRhZykge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdUZXh0O1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IGA8IVtDREFUQVske3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19XV0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSBvcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgYDwhLS0ke3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19LS0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0gPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wSW5kID0gdGFnTmFtZSA9PT0gXCI/eG1sXCIgPyBcIlwiIDogaW5kZW50YXRpb247XG4gICAgICAgICAgICBsZXQgcGlUZXh0Tm9kZU5hbWUgPSB0YWdPYmpbdGFnTmFtZV1bMF1bb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgICAgICAgcGlUZXh0Tm9kZU5hbWUgPSBwaVRleHROb2RlTmFtZS5sZW5ndGggIT09IDAgPyBcIiBcIiArIHBpVGV4dE5vZGVOYW1lIDogXCJcIjsgLy9yZW1vdmUgZXh0cmEgc3BhY2luZ1xuICAgICAgICAgICAgeG1sU3RyICs9IHRlbXBJbmQgKyBgPCR7dGFnTmFtZX0ke3BpVGV4dE5vZGVOYW1lfSR7YXR0U3RyfT8+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdJZGVudGF0aW9uID0gaW5kZW50YXRpb247XG4gICAgICAgIGlmIChuZXdJZGVudGF0aW9uICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBuZXdJZGVudGF0aW9uICs9IG9wdGlvbnMuaW5kZW50Qnk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0U3RyID0gYXR0cl90b19zdHIodGFnT2JqW1wiOkBcIl0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0YWdTdGFydCA9IGluZGVudGF0aW9uICsgYDwke3RhZ05hbWV9JHthdHRTdHJ9YDtcbiAgICAgICAgY29uc3QgdGFnVmFsdWUgPSBhcnJUb1N0cih0YWdPYmpbdGFnTmFtZV0sIG9wdGlvbnMsIG5ld0pQYXRoLCBuZXdJZGVudGF0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCI+XCI7XG4gICAgICAgICAgICBlbHNlIHhtbFN0ciArPSB0YWdTdGFydCArIFwiLz5cIjtcbiAgICAgICAgfSBlbHNlIGlmICgoIXRhZ1ZhbHVlIHx8IHRhZ1ZhbHVlLmxlbmd0aCA9PT0gMCkgJiYgb3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ1ZhbHVlICYmIHRhZ1ZhbHVlLmVuZHNXaXRoKFwiPlwiKSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgYD4ke3RhZ1ZhbHVlfSR7aW5kZW50YXRpb259PC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGlmICh0YWdWYWx1ZSAmJiBpbmRlbnRhdGlvbiAhPT0gXCJcIiAmJiAodGFnVmFsdWUuaW5jbHVkZXMoXCIvPlwiKSB8fCB0YWdWYWx1ZS5pbmNsdWRlcyhcIjwvXCIpKSkge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbiArIG9wdGlvbnMuaW5kZW50QnkgKyB0YWdWYWx1ZSArIGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gdGFnVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwvJHt0YWdOYW1lfT5gO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4geG1sU3RyO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmopIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKGtleSAhPT0gXCI6QFwiKSByZXR1cm4ga2V5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYXR0cl90b19zdHIoYXR0ck1hcCwgb3B0aW9ucykge1xuICAgIGxldCBhdHRyU3RyID0gXCJcIjtcbiAgICBpZiAoYXR0ck1hcCAmJiAhb3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAobGV0IGF0dHIgaW4gYXR0ck1hcCkge1xuICAgICAgICAgICAgbGV0IGF0dHJWYWwgPSBvcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHIsIGF0dHJNYXBbYXR0cl0pO1xuICAgICAgICAgICAgYXR0clZhbCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKGF0dHJWYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGF0dHJWYWwgPT09IHRydWUgJiYgb3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9PVwiJHthdHRyVmFsfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0clN0cjtcbn1cblxuZnVuY3Rpb24gaXNTdG9wTm9kZShqUGF0aCwgb3B0aW9ucykge1xuICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIG9wdGlvbnMudGV4dE5vZGVOYW1lLmxlbmd0aCAtIDEpO1xuICAgIGxldCB0YWdOYW1lID0galBhdGguc3Vic3RyKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xuICAgIGZvciAobGV0IGluZGV4IGluIG9wdGlvbnMuc3RvcE5vZGVzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0b3BOb2Rlc1tpbmRleF0gPT09IGpQYXRoIHx8IG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0gXCIqLlwiICsgdGFnTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiBvcHRpb25zLnByb2Nlc3NFbnRpdGllcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZW50aXRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvWG1sO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG4vL3BhcnNlIEVtcHR5IE5vZGUgYXMgc2VsZiBjbG9zaW5nIG5vZGVcbmNvbnN0IGJ1aWxkRnJvbU9yZGVyZWRKcyA9IHJlcXVpcmUoJy4vb3JkZXJlZEpzMlhtbCcpO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYXR0cmlidXRlTmFtZVByZWZpeDogJ0BfJyxcbiAgYXR0cmlidXRlc0dyb3VwTmFtZTogZmFsc2UsXG4gIHRleHROb2RlTmFtZTogJyN0ZXh0JyxcbiAgaWdub3JlQXR0cmlidXRlczogdHJ1ZSxcbiAgY2RhdGFQcm9wTmFtZTogZmFsc2UsXG4gIGZvcm1hdDogZmFsc2UsXG4gIGluZGVudEJ5OiAnICAnLFxuICBzdXBwcmVzc0VtcHR5Tm9kZTogZmFsc2UsXG4gIHN1cHByZXNzVW5wYWlyZWROb2RlOiB0cnVlLFxuICBzdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzOiB0cnVlLFxuICB0YWdWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24oa2V5LCBhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIGF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhdHRyTmFtZSwgYSkge1xuICAgIHJldHVybiBhO1xuICB9LFxuICBwcmVzZXJ2ZU9yZGVyOiBmYWxzZSxcbiAgY29tbWVudFByb3BOYW1lOiBmYWxzZSxcbiAgdW5wYWlyZWRUYWdzOiBbXSxcbiAgZW50aXRpZXM6IFtcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiJlwiLCBcImdcIiksIHZhbDogXCImYW1wO1wiIH0sLy9pdCBtdXN0IGJlIG9uIHRvcFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCI+XCIsIFwiZ1wiKSwgdmFsOiBcIiZndDtcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCI8XCIsIFwiZ1wiKSwgdmFsOiBcIiZsdDtcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCJcXCdcIiwgXCJnXCIpLCB2YWw6IFwiJmFwb3M7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiXFxcIlwiLCBcImdcIiksIHZhbDogXCImcXVvdDtcIiB9XG4gIF0sXG4gIHByb2Nlc3NFbnRpdGllczogdHJ1ZSxcbiAgc3RvcE5vZGVzOiBbXSxcbiAgLy8gdHJhbnNmb3JtVGFnTmFtZTogZmFsc2UsXG4gIC8vIHRyYW5zZm9ybUF0dHJpYnV0ZU5hbWU6IGZhbHNlLFxufTtcblxuZnVuY3Rpb24gQnVpbGRlcihvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzIHx8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSB7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKC8qYSovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmF0dHJQcmVmaXhMZW4gPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeC5sZW5ndGg7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGlzQXR0cmlidXRlO1xuICB9XG5cbiAgdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZSA9IHByb2Nlc3NUZXh0T3JPYmpOb2RlXG5cbiAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpIHtcbiAgICB0aGlzLmluZGVudGF0ZSA9IGluZGVudGF0ZTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPlxcbic7XG4gICAgdGhpcy5uZXdMaW5lID0gJ1xcbic7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIHRoaXMudGFnRW5kQ2hhciA9ICc+JztcbiAgICB0aGlzLm5ld0xpbmUgPSAnJztcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKGpPYmopIHtcbiAgaWYodGhpcy5vcHRpb25zLnByZXNlcnZlT3JkZXIpe1xuICAgIHJldHVybiBidWlsZEZyb21PcmRlcmVkSnMoak9iaiwgdGhpcy5vcHRpb25zKTtcbiAgfWVsc2Uge1xuICAgIGlmKEFycmF5LmlzQXJyYXkoak9iaikgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUubGVuZ3RoID4gMSl7XG4gICAgICBqT2JqID0ge1xuICAgICAgICBbdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWVdIDogak9ialxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5qMngoak9iaiwgMCkudmFsO1xuICB9XG59O1xuXG5CdWlsZGVyLnByb3RvdHlwZS5qMnggPSBmdW5jdGlvbihqT2JqLCBsZXZlbCkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgdmFsID0gJyc7XG4gIGZvciAobGV0IGtleSBpbiBqT2JqKSB7XG4gICAgaWYgKHR5cGVvZiBqT2JqW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlXG4gICAgfSBlbHNlIGlmIChqT2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICBlbHNlIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAvLyB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH0gZWxzZSBpZiAoak9ialtrZXldIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBqT2JqW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAvL3ByZW1pdGl2ZSB0eXBlXG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5pc0F0dHJpYnV0ZShrZXkpO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoYXR0ciwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgfWVsc2Uge1xuICAgICAgICAvL3RhZyB2YWx1ZVxuICAgICAgICBpZiAoa2V5ID09PSB0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lKSB7XG4gICAgICAgICAgbGV0IG5ld3ZhbCA9IHRoaXMub3B0aW9ucy50YWdWYWx1ZVByb2Nlc3NvcihrZXksICcnICsgak9ialtrZXldKTtcbiAgICAgICAgICB2YWwgKz0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShuZXd2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoak9ialtrZXldKSkge1xuICAgICAgLy9yZXBlYXRlZCBub2Rlc1xuICAgICAgY29uc3QgYXJyTGVuID0gak9ialtrZXldLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyTGVuOyBqKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGpPYmpba2V5XVtqXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIHN1cHJlc3MgdW5kZWZpbmVkIG5vZGVcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgaWYoa2V5WzBdID09PSBcIj9cIikgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgICBlbHNlIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB2YWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShpdGVtLCBrZXksIGxldmVsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoaXRlbSwga2V5LCAnJywgbGV2ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vbmVzdGVkIG5vZGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSB7XG4gICAgICAgIGNvbnN0IEtzID0gT2JqZWN0LmtleXMoak9ialtrZXldKTtcbiAgICAgICAgY29uc3QgTCA9IEtzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBMOyBqKyspIHtcbiAgICAgICAgICBhdHRyU3RyICs9IHRoaXMuYnVpbGRBdHRyUGFpclN0cihLc1tqXSwgJycgKyBqT2JqW2tleV1bS3Nbal1dKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsICs9IHRoaXMucHJvY2Vzc1RleHRPck9iak5vZGUoak9ialtrZXldLCBrZXksIGxldmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge2F0dHJTdHI6IGF0dHJTdHIsIHZhbDogdmFsfTtcbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkQXR0clBhaXJTdHIgPSBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKXtcbiAgdmFsID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHJOYW1lLCAnJyArIHZhbCk7XG4gIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzICYmIHZhbCA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4gJyAnICsgYXR0ck5hbWU7XG4gIH0gZWxzZSByZXR1cm4gJyAnICsgYXR0ck5hbWUgKyAnPVwiJyArIHZhbCArICdcIic7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUZXh0T3JPYmpOb2RlIChvYmplY3QsIGtleSwgbGV2ZWwpIHtcbiAgY29uc3QgcmVzdWx0ID0gdGhpcy5qMngob2JqZWN0LCBsZXZlbCArIDEpO1xuICBpZiAob2JqZWN0W3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFRleHRWYWxOb2RlKG9iamVjdFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSwga2V5LCByZXN1bHQuYXR0clN0ciwgbGV2ZWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkT2JqZWN0Tm9kZShyZXN1bHQudmFsLCBrZXksIHJlc3VsdC5hdHRyU3RyLCBsZXZlbCk7XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGRPYmplY3ROb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmKHZhbCA9PT0gXCJcIil7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHRoaXMuY2xvc2VUYWcoa2V5KSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1lbHNle1xuXG4gICAgbGV0IHRhZ0VuZEV4cCA9ICc8LycgKyBrZXkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgbGV0IHBpQ2xvc2luZ0NoYXIgPSBcIlwiO1xuICAgIFxuICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHtcbiAgICAgIHBpQ2xvc2luZ0NoYXIgPSBcIj9cIjtcbiAgICAgIHRhZ0VuZEV4cCA9IFwiXCI7XG4gICAgfVxuICBcbiAgICBpZiAoYXR0clN0ciAmJiB2YWwuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgcmV0dXJuICggdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsgIGtleSArIGF0dHJTdHIgKyBwaUNsb3NpbmdDaGFyICsgJz4nICsgdmFsICsgdGFnRW5kRXhwICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgJiYgcGlDbG9zaW5nQ2hhci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyB0aGlzLm5ld0xpbmU7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyB0aGlzLnRhZ0VuZENoYXIgK1xuICAgICAgICB2YWwgK1xuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyB0YWdFbmRFeHAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuY2xvc2VUYWcgPSBmdW5jdGlvbihrZXkpe1xuICBsZXQgY2xvc2VUYWcgPSBcIlwiO1xuICBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2Yoa2V5KSAhPT0gLTEpeyAvL3VucGFpcmVkXG4gICAgaWYoIXRoaXMub3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgY2xvc2VUYWcgPSBcIi9cIlxuICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMuc3VwcHJlc3NFbXB0eU5vZGUpeyAvL2VtcHR5XG4gICAgY2xvc2VUYWcgPSBcIi9cIjtcbiAgfWVsc2V7XG4gICAgY2xvc2VUYWcgPSBgPjwvJHtrZXl9YFxuICB9XG4gIHJldHVybiBjbG9zZVRhZztcbn1cblxuZnVuY3Rpb24gYnVpbGRFbXB0eU9iak5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh2YWwgIT09ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAvLyByZXR1cm4gdGhpcy5idWlsZFRhZ1N0cihsZXZlbCxrZXksIGF0dHJTdHIpO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZFRleHRWYWxOb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSAhPT0gZmFsc2UgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCFbQ0RBVEFbJHt2YWx9XV0+YCArICB0aGlzLm5ld0xpbmU7XG4gIH1lbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgYDwhLS0ke3ZhbH0tLT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYoa2V5WzBdID09PSBcIj9cIikgey8vUEkgdGFnXG4gICAgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7IFxuICB9ZWxzZXtcbiAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgdmFsKTtcbiAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gIFxuICAgIGlmKCB0ZXh0VmFsdWUgPT09ICcnKXtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnPicgK1xuICAgICAgICAgdGV4dFZhbHVlICtcbiAgICAgICAgJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUucmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih0ZXh0VmFsdWUpe1xuICBpZih0ZXh0VmFsdWUgJiYgdGV4dFZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMub3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5vcHRpb25zLmVudGl0aWVzW2ldO1xuICAgICAgdGV4dFZhbHVlID0gdGV4dFZhbHVlLnJlcGxhY2UoZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKGxldmVsKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50QnkucmVwZWF0KGxldmVsKTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyaWJ1dGUobmFtZSAvKiwgb3B0aW9ucyovKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgodGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgpKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyKHRoaXMuYXR0clByZWZpeExlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVpbGRlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB2YWxpZGF0b3IgPSByZXF1aXJlKCcuL3ZhbGlkYXRvcicpO1xuY29uc3QgWE1MUGFyc2VyID0gcmVxdWlyZSgnLi94bWxwYXJzZXIvWE1MUGFyc2VyJyk7XG5jb25zdCBYTUxCdWlsZGVyID0gcmVxdWlyZSgnLi94bWxidWlsZGVyL2pzb24yeG1sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBYTUxQYXJzZXI6IFhNTFBhcnNlcixcbiAgWE1MVmFsaWRhdG9yOiB2YWxpZGF0b3IsXG4gIFhNTEJ1aWxkZXI6IFhNTEJ1aWxkZXJcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy5kZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy5kZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLmRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gZXhwb3J0cy5kZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBleHBvcnRzLmRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5kZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gZXhwb3J0cy5kZV9Bc3N1bWVSb2xlQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5zZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IGV4cG9ydHMuc2VfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kID0gZXhwb3J0cy5zZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuc2VfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGV4cG9ydHMuc2VfQXNzdW1lUm9sZUNvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBmYXN0X3htbF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJmYXN0LXhtbC1wYXJzZXJcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IFNUU1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvU1RTU2VydmljZUV4Y2VwdGlvblwiKTtcbmNvbnN0IHNlX0Fzc3VtZVJvbGVDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfQXNzdW1lUm9sZVJlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiQXNzdW1lUm9sZVwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0Fzc3VtZVJvbGVDb21tYW5kID0gc2VfQXNzdW1lUm9sZUNvbW1hbmQ7XG5jb25zdCBzZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJBc3N1bWVSb2xlV2l0aFNBTUxcIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gc2VfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZDtcbmNvbnN0IHNlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gc2VfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBzZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVJlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VcIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBzZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQ7XG5jb25zdCBzZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBTSEFSRURfSEVBREVSUztcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gYnVpbGRGb3JtVXJsZW5jb2RlZFN0cmluZyh7XG4gICAgICAgIC4uLnNlX0dldEFjY2Vzc0tleUluZm9SZXF1ZXN0KGlucHV0LCBjb250ZXh0KSxcbiAgICAgICAgQWN0aW9uOiBcIkdldEFjY2Vzc0tleUluZm9cIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IHNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kO1xuY29uc3Qgc2VfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfR2V0Q2FsbGVySWRlbnRpdHlSZXF1ZXN0KGlucHV0LCBjb250ZXh0KSxcbiAgICAgICAgQWN0aW9uOiBcIkdldENhbGxlcklkZW50aXR5XCIsXG4gICAgICAgIFZlcnNpb246IFwiMjAxMS0wNi0xNVwiLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kID0gc2VfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kO1xuY29uc3Qgc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBTSEFSRURfSEVBREVSUztcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gYnVpbGRGb3JtVXJsZW5jb2RlZFN0cmluZyh7XG4gICAgICAgIC4uLnNlX0dldEZlZGVyYXRpb25Ub2tlblJlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiR2V0RmVkZXJhdGlvblRva2VuXCIsXG4gICAgICAgIFZlcnNpb246IFwiMjAxMS0wNi0xNVwiLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IHNlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQ7XG5jb25zdCBzZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfR2V0U2Vzc2lvblRva2VuUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJHZXRTZXNzaW9uVG9rZW5cIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gc2VfR2V0U2Vzc2lvblRva2VuQ29tbWFuZDtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0Fzc3VtZVJvbGVDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9Bc3N1bWVSb2xlUmVzcG9uc2UoZGF0YS5Bc3N1bWVSb2xlUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfQXNzdW1lUm9sZUNvbW1hbmQgPSBkZV9Bc3N1bWVSb2xlQ29tbWFuZDtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUGFja2VkUG9saWN5VG9vTGFyZ2VcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxSZXNwb25zZShkYXRhLkFzc3VtZVJvbGVXaXRoU0FNTFJlc3VsdCwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgPSBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUXVlcnlFcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkV4cGlyZWRUb2tlbkV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9FeHBpcmVkVG9rZW5FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIklEUFJlamVjdGVkQ2xhaW1cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0lEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0lEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRJZGVudGl0eVRva2VuXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNJbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk1hbGZvcm1lZFBvbGljeURvY3VtZW50XCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNNYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlBhY2tlZFBvbGljeVRvb0xhcmdlXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNQYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHk6IHBhcnNlZEJvZHkuRXJyb3IsXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzcG9uc2UoZGF0YS5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBkZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZDtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSURQQ29tbXVuaWNhdGlvbkVycm9yXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNJRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0lEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSURQUmVqZWN0ZWRDbGFpbVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZElkZW50aXR5VG9rZW5cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUGFja2VkUG9saWN5VG9vTGFyZ2VcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXNwb25zZShkYXRhLkRlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kID0gZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kO1xuY29uc3QgZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0dldEFjY2Vzc0tleUluZm9SZXNwb25zZShkYXRhLkdldEFjY2Vzc0tleUluZm9SZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IGRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kO1xuY29uc3QgZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICBvdXRwdXQsXG4gICAgICAgIHBhcnNlZEJvZHk6IHBhcnNlZEJvZHkuRXJyb3IsXG4gICAgICAgIGVycm9yQ29kZSxcbiAgICB9KTtcbn07XG5jb25zdCBkZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9HZXRDYWxsZXJJZGVudGl0eVJlc3BvbnNlKGRhdGEuR2V0Q2FsbGVySWRlbnRpdHlSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBkZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBkZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICBvdXRwdXQsXG4gICAgICAgIHBhcnNlZEJvZHk6IHBhcnNlZEJvZHkuRXJyb3IsXG4gICAgICAgIGVycm9yQ29kZSxcbiAgICB9KTtcbn07XG5jb25zdCBkZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0dldEZlZGVyYXRpb25Ub2tlblJlc3BvbnNlKGRhdGEuR2V0RmVkZXJhdGlvblRva2VuUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IGRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQ7XG5jb25zdCBkZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUGFja2VkUG9saWN5VG9vTGFyZ2VcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9HZXRTZXNzaW9uVG9rZW5SZXNwb25zZShkYXRhLkdldFNlc3Npb25Ub2tlblJlc3VsdCwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBkZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kO1xuY29uc3QgZGVfR2V0U2Vzc2lvblRva2VuQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUXVlcnlFcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHk6IHBhcnNlZEJvZHkuRXJyb3IsXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkV4cGlyZWRUb2tlbkV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX0lEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVfSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLklEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX0lEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX0lEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX0ludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbihib2R5LkVycm9yLCBjb250ZXh0KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbihib2R5LkVycm9yLCBjb250ZXh0KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbihib2R5LkVycm9yLCBjb250ZXh0KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvbihib2R5LkVycm9yLCBjb250ZXh0KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5SZWdpb25EaXNhYmxlZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIGJvZHkpO1xufTtcbmNvbnN0IHNlX0Fzc3VtZVJvbGVSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5Sb2xlQXJuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlJvbGVBcm5cIl0gPSBpbnB1dC5Sb2xlQXJuO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUm9sZVNlc3Npb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlJvbGVTZXNzaW9uTmFtZVwiXSA9IGlucHV0LlJvbGVTZXNzaW9uTmFtZTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeUFybnMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfcG9saWN5RGVzY3JpcHRvckxpc3RUeXBlKGlucHV0LlBvbGljeUFybnMsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuUG9saWN5QXJucz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlbnRyaWVzLlBvbGljeUFybnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGBQb2xpY3lBcm5zLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3kgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUG9saWN5XCJdID0gaW5wdXQuUG9saWN5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuRHVyYXRpb25TZWNvbmRzICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkR1cmF0aW9uU2Vjb25kc1wiXSA9IGlucHV0LkR1cmF0aW9uU2Vjb25kcztcbiAgICB9XG4gICAgaWYgKGlucHV0LlRhZ3MgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfdGFnTGlzdFR5cGUoaW5wdXQuVGFncywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5UYWdzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuVGFncyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFRhZ3MuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlRyYW5zaXRpdmVUYWdLZXlzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX3RhZ0tleUxpc3RUeXBlKGlucHV0LlRyYW5zaXRpdmVUYWdLZXlzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGlucHV0LlRyYW5zaXRpdmVUYWdLZXlzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuVHJhbnNpdGl2ZVRhZ0tleXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGBUcmFuc2l0aXZlVGFnS2V5cy4ke2tleX1gO1xuICAgICAgICAgICAgZW50cmllc1tsb2NdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuRXh0ZXJuYWxJZCAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJFeHRlcm5hbElkXCJdID0gaW5wdXQuRXh0ZXJuYWxJZDtcbiAgICB9XG4gICAgaWYgKGlucHV0LlNlcmlhbE51bWJlciAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJTZXJpYWxOdW1iZXJcIl0gPSBpbnB1dC5TZXJpYWxOdW1iZXI7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Ub2tlbkNvZGUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiVG9rZW5Db2RlXCJdID0gaW5wdXQuVG9rZW5Db2RlO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuU291cmNlSWRlbnRpdHkgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiU291cmNlSWRlbnRpdHlcIl0gPSBpbnB1dC5Tb3VyY2VJZGVudGl0eTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuUm9sZUFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJSb2xlQXJuXCJdID0gaW5wdXQuUm9sZUFybjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlByaW5jaXBhbEFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQcmluY2lwYWxBcm5cIl0gPSBpbnB1dC5QcmluY2lwYWxBcm47XG4gICAgfVxuICAgIGlmIChpbnB1dC5TQU1MQXNzZXJ0aW9uICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlNBTUxBc3NlcnRpb25cIl0gPSBpbnB1dC5TQU1MQXNzZXJ0aW9uO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQb2xpY3lcIl0gPSBpbnB1dC5Qb2xpY3k7XG4gICAgfVxuICAgIGlmIChpbnB1dC5EdXJhdGlvblNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiRHVyYXRpb25TZWNvbmRzXCJdID0gaW5wdXQuRHVyYXRpb25TZWNvbmRzO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuUm9sZUFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJSb2xlQXJuXCJdID0gaW5wdXQuUm9sZUFybjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlJvbGVTZXNzaW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJSb2xlU2Vzc2lvbk5hbWVcIl0gPSBpbnB1dC5Sb2xlU2Vzc2lvbk5hbWU7XG4gICAgfVxuICAgIGlmIChpbnB1dC5XZWJJZGVudGl0eVRva2VuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIldlYklkZW50aXR5VG9rZW5cIl0gPSBpbnB1dC5XZWJJZGVudGl0eVRva2VuO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUHJvdmlkZXJJZCAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQcm92aWRlcklkXCJdID0gaW5wdXQuUHJvdmlkZXJJZDtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeUFybnMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfcG9saWN5RGVzY3JpcHRvckxpc3RUeXBlKGlucHV0LlBvbGljeUFybnMsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuUG9saWN5QXJucz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlbnRyaWVzLlBvbGljeUFybnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGBQb2xpY3lBcm5zLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3kgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUG9saWN5XCJdID0gaW5wdXQuUG9saWN5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuRHVyYXRpb25TZWNvbmRzICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkR1cmF0aW9uU2Vjb25kc1wiXSA9IGlucHV0LkR1cmF0aW9uU2Vjb25kcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5FbmNvZGVkTWVzc2FnZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJFbmNvZGVkTWVzc2FnZVwiXSA9IGlucHV0LkVuY29kZWRNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9HZXRBY2Nlc3NLZXlJbmZvUmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuQWNjZXNzS2V5SWQgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiQWNjZXNzS2V5SWRcIl0gPSBpbnB1dC5BY2Nlc3NLZXlJZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfR2V0Q2FsbGVySWRlbnRpdHlSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX0dldEZlZGVyYXRpb25Ub2tlblJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0Lk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiTmFtZVwiXSA9IGlucHV0Lk5hbWU7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3kgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUG9saWN5XCJdID0gaW5wdXQuUG9saWN5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LkR1cmF0aW9uU2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJEdXJhdGlvblNlY29uZHNcIl0gPSBpbnB1dC5EdXJhdGlvblNlY29uZHM7XG4gICAgfVxuICAgIGlmIChpbnB1dC5UYWdzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX3RhZ0xpc3RUeXBlKGlucHV0LlRhZ3MsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuVGFncz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlbnRyaWVzLlRhZ3MgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGBUYWdzLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX0dldFNlc3Npb25Ub2tlblJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0LkR1cmF0aW9uU2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJEdXJhdGlvblNlY29uZHNcIl0gPSBpbnB1dC5EdXJhdGlvblNlY29uZHM7XG4gICAgfVxuICAgIGlmIChpbnB1dC5TZXJpYWxOdW1iZXIgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiU2VyaWFsTnVtYmVyXCJdID0gaW5wdXQuU2VyaWFsTnVtYmVyO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVG9rZW5Db2RlICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlRva2VuQ29kZVwiXSA9IGlucHV0LlRva2VuQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfcG9saWN5RGVzY3JpcHRvckxpc3RUeXBlID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX1BvbGljeURlc2NyaXB0b3JUeXBlKGVudHJ5LCBjb250ZXh0KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBlbnRyaWVzW2BtZW1iZXIuJHtjb3VudGVyfS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9Qb2xpY3lEZXNjcmlwdG9yVHlwZSA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuYXJuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcImFyblwiXSA9IGlucHV0LmFybjtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfVGFnID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5LZXkgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiS2V5XCJdID0gaW5wdXQuS2V5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiVmFsdWVcIl0gPSBpbnB1dC5WYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfdGFnS2V5TGlzdFR5cGUgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzW2BtZW1iZXIuJHtjb3VudGVyfWBdID0gZW50cnk7XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfdGFnTGlzdFR5cGUgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfVGFnKGVudHJ5LCBjb250ZXh0KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBlbnRyaWVzW2BtZW1iZXIuJHtjb3VudGVyfS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBkZV9Bc3N1bWVkUm9sZVVzZXIgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQXNzdW1lZFJvbGVJZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFzc3VtZWRSb2xlSWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXNzdW1lZFJvbGVJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBcm5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bcm4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXJuXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkNyZWRlbnRpYWxzID0gZGVfQ3JlZGVudGlhbHMob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQXNzdW1lZFJvbGVVc2VyID0gZGVfQXNzdW1lZFJvbGVVc2VyKG91dHB1dFtcIkFzc3VtZWRSb2xlVXNlclwiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuUGFja2VkUG9saWN5U2l6ZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuc3RyaWN0UGFyc2VJbnQzMikob3V0cHV0W1wiUGFja2VkUG9saWN5U2l6ZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTb3VyY2VJZGVudGl0eVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNvdXJjZUlkZW50aXR5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQ3JlZGVudGlhbHMgPSBkZV9DcmVkZW50aWFscyhvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bc3N1bWVkUm9sZVVzZXIgPSBkZV9Bc3N1bWVkUm9sZVVzZXIob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlN1YmplY3RcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TdWJqZWN0ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlN1YmplY3RcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU3ViamVjdFR5cGVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TdWJqZWN0VHlwZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJTdWJqZWN0VHlwZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJJc3N1ZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Jc3N1ZXIgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiSXNzdWVyXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkF1ZGllbmNlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQXVkaWVuY2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXVkaWVuY2VcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiTmFtZVF1YWxpZmllclwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLk5hbWVRdWFsaWZpZXIgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiTmFtZVF1YWxpZmllclwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTb3VyY2VJZGVudGl0eVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNvdXJjZUlkZW50aXR5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkNyZWRlbnRpYWxzID0gZGVfQ3JlZGVudGlhbHMob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU3ViamVjdEZyb21XZWJJZGVudGl0eVRva2VuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU3ViamVjdEZyb21XZWJJZGVudGl0eVRva2VuID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlN1YmplY3RGcm9tV2ViSWRlbnRpdHlUb2tlblwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bc3N1bWVkUm9sZVVzZXIgPSBkZV9Bc3N1bWVkUm9sZVVzZXIob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlByb3ZpZGVyXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuUHJvdmlkZXIgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiUHJvdmlkZXJcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiQXVkaWVuY2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5BdWRpZW5jZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBdWRpZW5jZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTb3VyY2VJZGVudGl0eVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNvdXJjZUlkZW50aXR5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0NyZWRlbnRpYWxzID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkFjY2Vzc0tleUlkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQWNjZXNzS2V5SWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQWNjZXNzS2V5SWRcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU2VjcmV0QWNjZXNzS2V5XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU2VjcmV0QWNjZXNzS2V5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNlY3JldEFjY2Vzc0tleVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTZXNzaW9uVG9rZW5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TZXNzaW9uVG9rZW4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU2Vzc2lvblRva2VuXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkV4cGlyYXRpb25cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5FeHBpcmF0aW9uID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLnBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCkob3V0cHV0W1wiRXhwaXJhdGlvblwiXSkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJEZWNvZGVkTWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkRlY29kZWRNZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkRlY29kZWRNZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0ZlZGVyYXRlZFVzZXIgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiRmVkZXJhdGVkVXNlcklkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuRmVkZXJhdGVkVXNlcklkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkZlZGVyYXRlZFVzZXJJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBcm5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bcm4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXJuXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0dldEFjY2Vzc0tleUluZm9SZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJBY2NvdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQWNjb3VudCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBY2NvdW50XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0dldENhbGxlcklkZW50aXR5UmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiVXNlcklkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuVXNlcklkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlVzZXJJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBY2NvdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQWNjb3VudCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBY2NvdW50XCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFyblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFybiA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBcm5cIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5DcmVkZW50aWFscyA9IGRlX0NyZWRlbnRpYWxzKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkZlZGVyYXRlZFVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5GZWRlcmF0ZWRVc2VyID0gZGVfRmVkZXJhdGVkVXNlcihvdXRwdXRbXCJGZWRlcmF0ZWRVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0dldFNlc3Npb25Ub2tlblJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQ3JlZGVudGlhbHMgPSBkZV9DcmVkZW50aWFscyhvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9JRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfUmVnaW9uRGlzYWJsZWRFeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gKG91dHB1dCkgPT4gKHtcbiAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgcmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0aWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16LXJlcXVlc3QtaWRcIl0sXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxufSk7XG5jb25zdCBjb2xsZWN0Qm9keSA9IChzdHJlYW1Cb2R5ID0gbmV3IFVpbnQ4QXJyYXkoKSwgY29udGV4dCkgPT4ge1xuICAgIGlmIChzdHJlYW1Cb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmVhbUJvZHkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dC5zdHJlYW1Db2xsZWN0b3Ioc3RyZWFtQm9keSkgfHwgUHJvbWlzZS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KCkpO1xufTtcbmNvbnN0IGNvbGxlY3RCb2R5U3RyaW5nID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5KHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGJvZHkpID0+IGNvbnRleHQudXRmOEVuY29kZXIoYm9keSkpO1xuY29uc3QgdGhyb3dEZWZhdWx0RXJyb3IgPSAoMCwgc21pdGh5X2NsaWVudF8xLndpdGhCYXNlRXhjZXB0aW9uKShTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbik7XG5jb25zdCBidWlsZEh0dHBScGNSZXF1ZXN0ID0gYXN5bmMgKGNvbnRleHQsIGhlYWRlcnMsIHBhdGgsIHJlc29sdmVkSG9zdG5hbWUsIGJvZHkpID0+IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICBjb25zdCBjb250ZW50cyA9IHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBwYXRoOiBiYXNlUGF0aC5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgKyBwYXRoIDogYmFzZVBhdGggKyBwYXRoLFxuICAgICAgICBoZWFkZXJzLFxuICAgIH07XG4gICAgaWYgKHJlc29sdmVkSG9zdG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5ob3N0bmFtZSA9IHJlc29sdmVkSG9zdG5hbWU7XG4gICAgfVxuICAgIGlmIChib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuYm9keSA9IGJvZHk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KGNvbnRlbnRzKTtcbn07XG5jb25zdCBTSEFSRURfSEVBREVSUyA9IHtcbiAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxufTtcbmNvbnN0IHBhcnNlQm9keSA9IChzdHJlYW1Cb2R5LCBjb250ZXh0KSA9PiBjb2xsZWN0Qm9keVN0cmluZyhzdHJlYW1Cb2R5LCBjb250ZXh0KS50aGVuKChlbmNvZGVkKSA9PiB7XG4gICAgaWYgKGVuY29kZWQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBmYXN0X3htbF9wYXJzZXJfMS5YTUxQYXJzZXIoe1xuICAgICAgICAgICAgYXR0cmlidXRlTmFtZVByZWZpeDogXCJcIixcbiAgICAgICAgICAgIGh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgICAgICAgICAgaWdub3JlRGVjbGFyYXRpb246IHRydWUsXG4gICAgICAgICAgICBwYXJzZVRhZ1ZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgIHRyaW1WYWx1ZXM6IGZhbHNlLFxuICAgICAgICAgICAgdGFnVmFsdWVQcm9jZXNzb3I6IChfLCB2YWwpID0+ICh2YWwudHJpbSgpID09PSBcIlwiICYmIHZhbC5pbmNsdWRlcyhcIlxcblwiKSA/IFwiXCIgOiB1bmRlZmluZWQpLFxuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VyLmFkZEVudGl0eShcIiN4RFwiLCBcIlxcclwiKTtcbiAgICAgICAgcGFyc2VyLmFkZEVudGl0eShcIiMxMFwiLCBcIlxcblwiKTtcbiAgICAgICAgY29uc3QgcGFyc2VkT2JqID0gcGFyc2VyLnBhcnNlKGVuY29kZWQpO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZU5hbWUgPSBcIiN0ZXh0XCI7XG4gICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHBhcnNlZE9iailbMF07XG4gICAgICAgIGNvbnN0IHBhcnNlZE9ialRvUmV0dXJuID0gcGFyc2VkT2JqW2tleV07XG4gICAgICAgIGlmIChwYXJzZWRPYmpUb1JldHVyblt0ZXh0Tm9kZU5hbWVdKSB7XG4gICAgICAgICAgICBwYXJzZWRPYmpUb1JldHVybltrZXldID0gcGFyc2VkT2JqVG9SZXR1cm5bdGV4dE5vZGVOYW1lXTtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWRPYmpUb1JldHVyblt0ZXh0Tm9kZU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmdldFZhbHVlRnJvbVRleHROb2RlKShwYXJzZWRPYmpUb1JldHVybik7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn0pO1xuY29uc3QgcGFyc2VFcnJvckJvZHkgPSBhc3luYyAoZXJyb3JCb2R5LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYXJzZUJvZHkoZXJyb3JCb2R5LCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUuRXJyb3IpIHtcbiAgICAgICAgdmFsdWUuRXJyb3IubWVzc2FnZSA9IHZhbHVlLkVycm9yLm1lc3NhZ2UgPz8gdmFsdWUuRXJyb3IuTWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcbmNvbnN0IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcgPSAoZm9ybUVudHJpZXMpID0+IE9iamVjdC5lbnRyaWVzKGZvcm1FbnRyaWVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKDAsIHNtaXRoeV9jbGllbnRfMS5leHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudCkoa2V5KSArIFwiPVwiICsgKDAsIHNtaXRoeV9jbGllbnRfMS5leHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudCkodmFsdWUpKVxuICAgIC5qb2luKFwiJlwiKTtcbmNvbnN0IGxvYWRRdWVyeUVycm9yQ29kZSA9IChvdXRwdXQsIGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YS5FcnJvcj8uQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBkYXRhLkVycm9yLkNvZGU7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA9PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIFwiTm90Rm91bmRcIjtcbiAgICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXNzdW1lUm9sZUNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBBd3NfcXVlcnlfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3F1ZXJ5XCIpO1xuY2xhc3MgQXNzdW1lUm9sZUNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlR2xvYmFsRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlR2xvYmFsRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgQXNzdW1lUm9sZUNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1RTQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJBc3N1bWVSb2xlQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5Bc3N1bWVSb2xlUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9Bc3N1bWVSb2xlQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9Bc3N1bWVSb2xlQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkFzc3VtZVJvbGVDb21tYW5kID0gQXNzdW1lUm9sZUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gdm9pZCAwO1xuY29uc3QgQXNzdW1lUm9sZUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVDb21tYW5kXCIpO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgQVNTVU1FX1JPTEVfREVGQVVMVF9SRUdJT04gPSBcInVzLWVhc3QtMVwiO1xuY29uc3QgZGVjb3JhdGVEZWZhdWx0UmVnaW9uID0gKHJlZ2lvbikgPT4ge1xuICAgIGlmICh0eXBlb2YgcmVnaW9uICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lvbiA9PT0gdW5kZWZpbmVkID8gQVNTVU1FX1JPTEVfREVGQVVMVF9SRUdJT04gOiByZWdpb247XG4gICAgfVxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVnaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBBU1NVTUVfUk9MRV9ERUZBVUxUX1JFR0lPTjtcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gKHN0c09wdGlvbnMsIHN0c0NsaWVudEN0b3IpID0+IHtcbiAgICBsZXQgc3RzQ2xpZW50O1xuICAgIGxldCBjbG9zdXJlU291cmNlQ3JlZHM7XG4gICAgcmV0dXJuIGFzeW5jIChzb3VyY2VDcmVkcywgcGFyYW1zKSA9PiB7XG4gICAgICAgIGNsb3N1cmVTb3VyY2VDcmVkcyA9IHNvdXJjZUNyZWRzO1xuICAgICAgICBpZiAoIXN0c0NsaWVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBsb2dnZXIsIHJlZ2lvbiwgcmVxdWVzdEhhbmRsZXIgfSA9IHN0c09wdGlvbnM7XG4gICAgICAgICAgICBzdHNDbGllbnQgPSBuZXcgc3RzQ2xpZW50Q3Rvcih7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXI6ICgpID0+IGFzeW5jICgpID0+IGNsb3N1cmVTb3VyY2VDcmVkcyxcbiAgICAgICAgICAgICAgICByZWdpb246IGRlY29yYXRlRGVmYXVsdFJlZ2lvbihyZWdpb24gfHwgc3RzT3B0aW9ucy5yZWdpb24pLFxuICAgICAgICAgICAgICAgIC4uLihyZXF1ZXN0SGFuZGxlciA/IHsgcmVxdWVzdEhhbmRsZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgQ3JlZGVudGlhbHMgfSA9IGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBBc3N1bWVSb2xlQ29tbWFuZF8xLkFzc3VtZVJvbGVDb21tYW5kKHBhcmFtcykpO1xuICAgICAgICBpZiAoIUNyZWRlbnRpYWxzIHx8ICFDcmVkZW50aWFscy5BY2Nlc3NLZXlJZCB8fCAhQ3JlZGVudGlhbHMuU2VjcmV0QWNjZXNzS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBTVFMuYXNzdW1lUm9sZSBjYWxsIHdpdGggcm9sZSAke3BhcmFtcy5Sb2xlQXJufWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDogQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IENyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogQ3JlZGVudGlhbHMuU2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogQ3JlZGVudGlhbHMuRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gZ2V0RGVmYXVsdFJvbGVBc3N1bWVyO1xuY29uc3QgZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gKHN0c09wdGlvbnMsIHN0c0NsaWVudEN0b3IpID0+IHtcbiAgICBsZXQgc3RzQ2xpZW50O1xuICAgIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmICghc3RzQ2xpZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IGxvZ2dlciwgcmVnaW9uLCByZXF1ZXN0SGFuZGxlciB9ID0gc3RzT3B0aW9ucztcbiAgICAgICAgICAgIHN0c0NsaWVudCA9IG5ldyBzdHNDbGllbnRDdG9yKHtcbiAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICAgICAgcmVnaW9uOiBkZWNvcmF0ZURlZmF1bHRSZWdpb24ocmVnaW9uIHx8IHN0c09wdGlvbnMucmVnaW9uKSxcbiAgICAgICAgICAgICAgICAuLi4ocmVxdWVzdEhhbmRsZXIgPyB7IHJlcXVlc3RIYW5kbGVyIH0gOiB7fSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IENyZWRlbnRpYWxzIH0gPSBhd2FpdCBzdHNDbGllbnQuc2VuZChuZXcgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRfMS5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZChwYXJhbXMpKTtcbiAgICAgICAgaWYgKCFDcmVkZW50aWFscyB8fCAhQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQgfHwgIUNyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZyb20gU1RTLmFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHkgY2FsbCB3aXRoIHJvbGUgJHtwYXJhbXMuUm9sZUFybn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQ6IENyZWRlbnRpYWxzLkFjY2Vzc0tleUlkLFxuICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBDcmVkZW50aWFscy5TZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgICAgICBzZXNzaW9uVG9rZW46IENyZWRlbnRpYWxzLlNlc3Npb25Ub2tlbixcbiAgICAgICAgICAgIGV4cGlyYXRpb246IENyZWRlbnRpYWxzLkV4cGlyYXRpb24sXG4gICAgICAgIH07XG4gICAgfTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IGdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTtcbmNvbnN0IGRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IChwcm92aWRlcikgPT4gKGlucHV0KSA9PiBwcm92aWRlcih7XG4gICAgcm9sZUFzc3VtZXI6ICgwLCBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcikoaW5wdXQsIGlucHV0LnN0c0NsaWVudEN0b3IpLFxuICAgIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5OiAoMCwgZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpKGlucHV0LCBpbnB1dC5zdHNDbGllbnRDdG9yKSxcbiAgICAuLi5pbnB1dCxcbn0pO1xuZXhwb3J0cy5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSBkZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnZcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHNcIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgcmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2UgPSAoY3JlZGVudGlhbFNvdXJjZSwgcHJvZmlsZU5hbWUpID0+IHtcbiAgICBjb25zdCBzb3VyY2VQcm92aWRlcnNNYXAgPSB7XG4gICAgICAgIEVjc0NvbnRhaW5lcjogY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUNvbnRhaW5lck1ldGFkYXRhLFxuICAgICAgICBFYzJJbnN0YW5jZU1ldGFkYXRhOiBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMS5mcm9tSW5zdGFuY2VNZXRhZGF0YSxcbiAgICAgICAgRW52aXJvbm1lbnQ6IGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEuZnJvbUVudixcbiAgICB9O1xuICAgIGlmIChjcmVkZW50aWFsU291cmNlIGluIHNvdXJjZVByb3ZpZGVyc01hcCkge1xuICAgICAgICByZXR1cm4gc291cmNlUHJvdmlkZXJzTWFwW2NyZWRlbnRpYWxTb3VyY2VdKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFVuc3VwcG9ydGVkIGNyZWRlbnRpYWwgc291cmNlIGluIHByb2ZpbGUgJHtwcm9maWxlTmFtZX0uIEdvdCAke2NyZWRlbnRpYWxTb3VyY2V9LCBgICtcbiAgICAgICAgICAgIGBleHBlY3RlZCBFY3NDb250YWluZXIgb3IgRWMySW5zdGFuY2VNZXRhZGF0YSBvciBFbnZpcm9ubWVudC5gKTtcbiAgICB9XG59O1xuZXhwb3J0cy5yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZSA9IHJlc29sdmVDcmVkZW50aWFsU291cmNlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscyA9IGV4cG9ydHMuaXNBc3N1bWVSb2xlUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IHJlc29sdmVDcmVkZW50aWFsU291cmNlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZVwiKTtcbmNvbnN0IHJlc29sdmVQcm9maWxlRGF0YV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVByb2ZpbGVEYXRhXCIpO1xuY29uc3QgaXNBc3N1bWVSb2xlUHJvZmlsZSA9IChhcmcpID0+IEJvb2xlYW4oYXJnKSAmJlxuICAgIHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiZcbiAgICB0eXBlb2YgYXJnLnJvbGVfYXJuID09PSBcInN0cmluZ1wiICYmXG4gICAgW1widW5kZWZpbmVkXCIsIFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIGFyZy5yb2xlX3Nlc3Npb25fbmFtZSkgPiAtMSAmJlxuICAgIFtcInVuZGVmaW5lZFwiLCBcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBhcmcuZXh0ZXJuYWxfaWQpID4gLTEgJiZcbiAgICBbXCJ1bmRlZmluZWRcIiwgXCJzdHJpbmdcIl0uaW5kZXhPZih0eXBlb2YgYXJnLm1mYV9zZXJpYWwpID4gLTEgJiZcbiAgICAoaXNBc3N1bWVSb2xlV2l0aFNvdXJjZVByb2ZpbGUoYXJnKSB8fCBpc0Fzc3VtZVJvbGVXaXRoUHJvdmlkZXJQcm9maWxlKGFyZykpO1xuZXhwb3J0cy5pc0Fzc3VtZVJvbGVQcm9maWxlID0gaXNBc3N1bWVSb2xlUHJvZmlsZTtcbmNvbnN0IGlzQXNzdW1lUm9sZVdpdGhTb3VyY2VQcm9maWxlID0gKGFyZykgPT4gdHlwZW9mIGFyZy5zb3VyY2VfcHJvZmlsZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYXJnLmNyZWRlbnRpYWxfc291cmNlID09PSBcInVuZGVmaW5lZFwiO1xuY29uc3QgaXNBc3N1bWVSb2xlV2l0aFByb3ZpZGVyUHJvZmlsZSA9IChhcmcpID0+IHR5cGVvZiBhcmcuY3JlZGVudGlhbF9zb3VyY2UgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGFyZy5zb3VyY2VfcHJvZmlsZSA9PT0gXCJ1bmRlZmluZWRcIjtcbmNvbnN0IHJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHMgPSBhc3luYyAocHJvZmlsZU5hbWUsIHByb2ZpbGVzLCBvcHRpb25zLCB2aXNpdGVkUHJvZmlsZXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgaWYgKCFvcHRpb25zLnJvbGVBc3N1bWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSByZXF1aXJlcyBhIHJvbGUgdG8gYmUgYXNzdW1lZCwgYnV0IG5vIHJvbGUgYXNzdW1wdGlvbiBjYWxsYmFjayB3YXMgcHJvdmlkZWQuYCwgZmFsc2UpO1xuICAgIH1cbiAgICBjb25zdCB7IHNvdXJjZV9wcm9maWxlIH0gPSBkYXRhO1xuICAgIGlmIChzb3VyY2VfcHJvZmlsZSAmJiBzb3VyY2VfcHJvZmlsZSBpbiB2aXNpdGVkUHJvZmlsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBEZXRlY3RlZCBhIGN5Y2xlIGF0dGVtcHRpbmcgdG8gcmVzb2x2ZSBjcmVkZW50aWFscyBmb3IgcHJvZmlsZWAgK1xuICAgICAgICAgICAgYCAkeygwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuZ2V0UHJvZmlsZU5hbWUpKG9wdGlvbnMpfS4gUHJvZmlsZXMgdmlzaXRlZDogYCArXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh2aXNpdGVkUHJvZmlsZXMpLmpvaW4oXCIsIFwiKSwgZmFsc2UpO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VDcmVkc1Byb3ZpZGVyID0gc291cmNlX3Byb2ZpbGVcbiAgICAgICAgPyAoMCwgcmVzb2x2ZVByb2ZpbGVEYXRhXzEucmVzb2x2ZVByb2ZpbGVEYXRhKShzb3VyY2VfcHJvZmlsZSwgcHJvZmlsZXMsIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIC4uLnZpc2l0ZWRQcm9maWxlcyxcbiAgICAgICAgICAgIFtzb3VyY2VfcHJvZmlsZV06IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIDogKDAsIHJlc29sdmVDcmVkZW50aWFsU291cmNlXzEucmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2UpKGRhdGEuY3JlZGVudGlhbF9zb3VyY2UsIHByb2ZpbGVOYW1lKSgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgUm9sZUFybjogZGF0YS5yb2xlX2FybixcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiBkYXRhLnJvbGVfc2Vzc2lvbl9uYW1lIHx8IGBhd3Mtc2RrLWpzLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICBFeHRlcm5hbElkOiBkYXRhLmV4dGVybmFsX2lkLFxuICAgIH07XG4gICAgY29uc3QgeyBtZmFfc2VyaWFsIH0gPSBkYXRhO1xuICAgIGlmIChtZmFfc2VyaWFsKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5tZmFDb2RlUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSByZXF1aXJlcyBtdWx0aS1mYWN0b3IgYXV0aGVudGljYXRpb24sIGJ1dCBubyBNRkEgY29kZSBjYWxsYmFjayB3YXMgcHJvdmlkZWQuYCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtcy5TZXJpYWxOdW1iZXIgPSBtZmFfc2VyaWFsO1xuICAgICAgICBwYXJhbXMuVG9rZW5Db2RlID0gYXdhaXQgb3B0aW9ucy5tZmFDb2RlUHJvdmlkZXIobWZhX3NlcmlhbCk7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZUNyZWRzID0gYXdhaXQgc291cmNlQ3JlZHNQcm92aWRlcjtcbiAgICByZXR1cm4gb3B0aW9ucy5yb2xlQXNzdW1lcihzb3VyY2VDcmVkcywgcGFyYW1zKTtcbn07XG5leHBvcnRzLnJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHMgPSByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzID0gdm9pZCAwO1xuY29uc3QgZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzID0gKHByb2ZpbGVOYW1lLCBkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEuVmVyc2lvbiAhPT0gMSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjcmVkZW50aWFsX3Byb2Nlc3MgZGlkIG5vdCByZXR1cm4gVmVyc2lvbiAxLmApO1xuICAgIH1cbiAgICBpZiAoZGF0YS5BY2Nlc3NLZXlJZCA9PT0gdW5kZWZpbmVkIHx8IGRhdGEuU2VjcmV0QWNjZXNzS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gY3JlZGVudGlhbF9wcm9jZXNzIHJldHVybmVkIGludmFsaWQgY3JlZGVudGlhbHMuYCk7XG4gICAgfVxuICAgIGlmIChkYXRhLkV4cGlyYXRpb24pIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBleHBpcmVUaW1lID0gbmV3IERhdGUoZGF0YS5FeHBpcmF0aW9uKTtcbiAgICAgICAgaWYgKGV4cGlyZVRpbWUgPCBjdXJyZW50VGltZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gY3JlZGVudGlhbF9wcm9jZXNzIHJldHVybmVkIGV4cGlyZWQgY3JlZGVudGlhbHMuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGRhdGEuQWNjZXNzS2V5SWQsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleTogZGF0YS5TZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgIC4uLihkYXRhLlNlc3Npb25Ub2tlbiAmJiB7IHNlc3Npb25Ub2tlbjogZGF0YS5TZXNzaW9uVG9rZW4gfSksXG4gICAgICAgIC4uLihkYXRhLkV4cGlyYXRpb24gJiYgeyBleHBpcmF0aW9uOiBuZXcgRGF0ZShkYXRhLkV4cGlyYXRpb24pIH0pLFxuICAgIH07XG59O1xuZXhwb3J0cy5nZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMgPSBnZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGNoaWxkX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcInV0aWxcIik7XG5jb25zdCBnZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL2dldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFsc1wiKTtcbmNvbnN0IHJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSBhc3luYyAocHJvZmlsZU5hbWUsIHByb2ZpbGVzKSA9PiB7XG4gICAgY29uc3QgcHJvZmlsZSA9IHByb2ZpbGVzW3Byb2ZpbGVOYW1lXTtcbiAgICBpZiAocHJvZmlsZXNbcHJvZmlsZU5hbWVdKSB7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxQcm9jZXNzID0gcHJvZmlsZVtcImNyZWRlbnRpYWxfcHJvY2Vzc1wiXTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxQcm9jZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gKDAsIHV0aWxfMS5wcm9taXNpZnkpKGNoaWxkX3Byb2Nlc3NfMS5leGVjKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNQcm9taXNlKGNyZWRlbnRpYWxQcm9jZXNzKTtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShzdGRvdXQudHJpbSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGNyZWRlbnRpYWxfcHJvY2VzcyByZXR1cm5lZCBpbnZhbGlkIEpTT04uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzXzEuZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzKShwcm9maWxlTmFtZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gZGlkIG5vdCBjb250YWluIGNyZWRlbnRpYWxfcHJvY2Vzcy5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBzaGFyZWQgY3JlZGVudGlhbHMgZmlsZS5gKTtcbiAgICB9XG59O1xuZXhwb3J0cy5yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzID0gcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Qcm9jZXNzID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgZnJvbVByb2Nlc3MgPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJvZmlsZXMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLnBhcnNlS25vd25GaWxlcykoaW5pdCk7XG4gICAgcmV0dXJuICgwLCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEucmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscykoKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRQcm9maWxlTmFtZSkoaW5pdCksIHByb2ZpbGVzKTtcbn07XG5leHBvcnRzLmZyb21Qcm9jZXNzID0gZnJvbVByb2Nlc3M7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Qcm9jZXNzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSBleHBvcnRzLmlzUHJvY2Vzc1Byb2ZpbGUgPSB2b2lkIDA7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3NcIik7XG5jb25zdCBpc1Byb2Nlc3NQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmIHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGFyZy5jcmVkZW50aWFsX3Byb2Nlc3MgPT09IFwic3RyaW5nXCI7XG5leHBvcnRzLmlzUHJvY2Vzc1Byb2ZpbGUgPSBpc1Byb2Nlc3NQcm9maWxlO1xuY29uc3QgcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscyA9IGFzeW5jIChvcHRpb25zLCBwcm9maWxlKSA9PiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9wcm9jZXNzXzEuZnJvbVByb2Nlc3MpKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHByb2ZpbGUsXG59KSgpO1xuZXhwb3J0cy5yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzID0gcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzU3NvUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGlzU3NvUHJvZmlsZSA9IChhcmcpID0+IGFyZyAmJlxuICAgICh0eXBlb2YgYXJnLnNzb19zdGFydF91cmwgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdHlwZW9mIGFyZy5zc29fYWNjb3VudF9pZCA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgYXJnLnNzb19zZXNzaW9uID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBhcmcuc3NvX3JlZ2lvbiA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgYXJnLnNzb19yb2xlX25hbWUgPT09IFwic3RyaW5nXCIpO1xuZXhwb3J0cy5pc1Nzb1Byb2ZpbGUgPSBpc1Nzb1Byb2ZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gdm9pZCAwO1xuY29uc3QgcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IChvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IG9wdGlvbnMudXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogb3B0aW9ucy51c2VGaXBzRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIGRlZmF1bHRTaWduaW5nTmFtZTogXCJhd3Nzc29wb3J0YWxcIixcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0NydEF2YWlsYWJsZSA9IHZvaWQgMDtcbmNvbnN0IGlzQ3J0QXZhaWxhYmxlID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVxdWlyZShcImF3cy1jcnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJtZC9jcnQtYXZhaWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5leHBvcnRzLmlzQ3J0QXZhaWxhYmxlID0gaXNDcnRBdmFpbGFibGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0VXNlckFnZW50ID0gZXhwb3J0cy5VQV9BUFBfSURfSU5JX05BTUUgPSBleHBvcnRzLlVBX0FQUF9JRF9FTlZfTkFNRSA9IHZvaWQgMDtcbmNvbnN0IG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbm9kZS1jb25maWctcHJvdmlkZXJcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgcHJvY2Vzc18xID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5jb25zdCBpc19jcnRfYXZhaWxhYmxlXzEgPSByZXF1aXJlKFwiLi9pcy1jcnQtYXZhaWxhYmxlXCIpO1xuZXhwb3J0cy5VQV9BUFBfSURfRU5WX05BTUUgPSBcIkFXU19TREtfVUFfQVBQX0lEXCI7XG5leHBvcnRzLlVBX0FQUF9JRF9JTklfTkFNRSA9IFwic2RrLXVhLWFwcC1pZFwiO1xuY29uc3QgZGVmYXVsdFVzZXJBZ2VudCA9ICh7IHNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbiB9KSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgIFtcImF3cy1zZGstanNcIiwgY2xpZW50VmVyc2lvbl0sXG4gICAgICAgIFtgb3MvJHsoMCwgb3NfMS5wbGF0Zm9ybSkoKX1gLCAoMCwgb3NfMS5yZWxlYXNlKSgpXSxcbiAgICAgICAgW1wibGFuZy9qc1wiXSxcbiAgICAgICAgW1wibWQvbm9kZWpzXCIsIGAke3Byb2Nlc3NfMS52ZXJzaW9ucy5ub2RlfWBdLFxuICAgIF07XG4gICAgY29uc3QgY3J0QXZhaWxhYmxlID0gKDAsIGlzX2NydF9hdmFpbGFibGVfMS5pc0NydEF2YWlsYWJsZSkoKTtcbiAgICBpZiAoY3J0QXZhaWxhYmxlKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goY3J0QXZhaWxhYmxlKTtcbiAgICB9XG4gICAgaWYgKHNlcnZpY2VJZCkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKFtgYXBpLyR7c2VydmljZUlkfWAsIGNsaWVudFZlcnNpb25dKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3NfMS5lbnYuQVdTX0VYRUNVVElPTl9FTlYpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaChbYGV4ZWMtZW52LyR7cHJvY2Vzc18xLmVudi5BV1NfRVhFQ1VUSU9OX0VOVn1gXSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcElkUHJvbWlzZSA9ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbZXhwb3J0cy5VQV9BUFBfSURfRU5WX05BTUVdLFxuICAgICAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiBwcm9maWxlW2V4cG9ydHMuVUFfQVBQX0lEX0lOSV9OQU1FXSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH0pKCk7XG4gICAgbGV0IHJlc29sdmVkVXNlckFnZW50ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghcmVzb2x2ZWRVc2VyQWdlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcElkID0gYXdhaXQgYXBwSWRQcm9taXNlO1xuICAgICAgICAgICAgcmVzb2x2ZWRVc2VyQWdlbnQgPSBhcHBJZCA/IFsuLi5zZWN0aW9ucywgW2BhcHAvJHthcHBJZH1gXV0gOiBbLi4uc2VjdGlvbnNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZFVzZXJBZ2VudDtcbiAgICB9O1xufTtcbmV4cG9ydHMuZGVmYXVsdFVzZXJBZ2VudCA9IGRlZmF1bHRVc2VyQWdlbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ydWxlU2V0ID0gdm9pZCAwO1xuY29uc3QgcCA9IFwicmVxdWlyZWRcIiwgcSA9IFwiZm5cIiwgciA9IFwiYXJndlwiLCBzID0gXCJyZWZcIjtcbmNvbnN0IGEgPSBcIlBhcnRpdGlvblJlc3VsdFwiLCBiID0gXCJ0cmVlXCIsIGMgPSBcImVycm9yXCIsIGQgPSBcImVuZHBvaW50XCIsIGUgPSB7IFtwXTogZmFsc2UsIFwidHlwZVwiOiBcIlN0cmluZ1wiIH0sIGYgPSB7IFtwXTogdHJ1ZSwgXCJkZWZhdWx0XCI6IGZhbHNlLCBcInR5cGVcIjogXCJCb29sZWFuXCIgfSwgZyA9IHsgW3NdOiBcIkVuZHBvaW50XCIgfSwgaCA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbeyBbc106IFwiVXNlRklQU1wiIH0sIHRydWVdIH0sIGkgPSB7IFtxXTogXCJib29sZWFuRXF1YWxzXCIsIFtyXTogW3sgW3NdOiBcIlVzZUR1YWxTdGFja1wiIH0sIHRydWVdIH0sIGogPSB7fSwgayA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbdHJ1ZSwgeyBbcV06IFwiZ2V0QXR0clwiLCBbcl06IFt7IFtzXTogYSB9LCBcInN1cHBvcnRzRklQU1wiXSB9XSB9LCBsID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt0cnVlLCB7IFtxXTogXCJnZXRBdHRyXCIsIFtyXTogW3sgW3NdOiBhIH0sIFwic3VwcG9ydHNEdWFsU3RhY2tcIl0gfV0gfSwgbSA9IFtnXSwgbiA9IFtoXSwgbyA9IFtpXTtcbmNvbnN0IF9kYXRhID0geyB2ZXJzaW9uOiBcIjEuMFwiLCBwYXJhbWV0ZXJzOiB7IFJlZ2lvbjogZSwgVXNlRHVhbFN0YWNrOiBmLCBVc2VGSVBTOiBmLCBFbmRwb2ludDogZSB9LCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3FdOiBcImF3cy5wYXJ0aXRpb25cIiwgW3JdOiBbeyBbc106IFwiUmVnaW9uXCIgfV0sIGFzc2lnbjogYSB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFtxXTogXCJpc1NldFwiLCBbcl06IG0gfSwgeyBbcV06IFwicGFyc2VVUkxcIiwgW3JdOiBtLCBhc3NpZ246IFwidXJsXCIgfV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBuLCBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IEZJUFMgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBjIH0sIHsgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IG8sIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWRcIiwgdHlwZTogYyB9LCB7IGVuZHBvaW50OiB7IHVybDogZywgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgY29uZGl0aW9uczogW2gsIGldLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW2ssIGxdLCB0eXBlOiBiLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfSwgeyBlcnJvcjogXCJGSVBTIGFuZCBEdWFsU3RhY2sgYXJlIGVuYWJsZWQsIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9uZSBvciBib3RoXCIsIHR5cGU6IGMgfV0gfSwgeyBjb25kaXRpb25zOiBuLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW2tdLCB0eXBlOiBiLCBydWxlczogW3sgdHlwZTogYiwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3BvcnRhbC5zc28tZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgZXJyb3I6IFwiRklQUyBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IEZJUFNcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IG8sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbbF0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9wb3J0YWwuc3NvLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfSwgeyBlcnJvcjogXCJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBEdWFsU3RhY2tcIiwgdHlwZTogYyB9XSB9LCB7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3BvcnRhbC5zc28ue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9XSB9O1xuZXhwb3J0cy5ydWxlU2V0ID0gX2RhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfZW5kcG9pbnRzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHNcIik7XG5jb25zdCBydWxlc2V0XzEgPSByZXF1aXJlKFwiLi9ydWxlc2V0XCIpO1xuY29uc3QgZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSAoZW5kcG9pbnRQYXJhbXMsIGNvbnRleHQgPSB7fSkgPT4ge1xuICAgIHJldHVybiAoMCwgdXRpbF9lbmRwb2ludHNfMS5yZXNvbHZlRW5kcG9pbnQpKHJ1bGVzZXRfMS5ydWxlU2V0LCB7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zOiBlbmRwb2ludFBhcmFtcyxcbiAgICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlcixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1cmxfcGFyc2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXJsLXBhcnNlclwiKTtcbmNvbnN0IHV0aWxfYmFzZTY0XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1iYXNlNjRcIik7XG5jb25zdCB1dGlsX3V0ZjhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXV0ZjhcIik7XG5jb25zdCBlbmRwb2ludFJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyXCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+ICh7XG4gICAgYXBpVmVyc2lvbjogXCIyMDE5LTA2LTEwXCIsXG4gICAgYmFzZTY0RGVjb2RlcjogY29uZmlnPy5iYXNlNjREZWNvZGVyID8/IHV0aWxfYmFzZTY0XzEuZnJvbUJhc2U2NCxcbiAgICBiYXNlNjRFbmNvZGVyOiBjb25maWc/LmJhc2U2NEVuY29kZXIgPz8gdXRpbF9iYXNlNjRfMS50b0Jhc2U2NCxcbiAgICBkaXNhYmxlSG9zdFByZWZpeDogY29uZmlnPy5kaXNhYmxlSG9zdFByZWZpeCA/PyBmYWxzZSxcbiAgICBlbmRwb2ludFByb3ZpZGVyOiBjb25maWc/LmVuZHBvaW50UHJvdmlkZXIgPz8gZW5kcG9pbnRSZXNvbHZlcl8xLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyLFxuICAgIGxvZ2dlcjogY29uZmlnPy5sb2dnZXIgPz8gbmV3IHNtaXRoeV9jbGllbnRfMS5Ob09wTG9nZ2VyKCksXG4gICAgc2VydmljZUlkOiBjb25maWc/LnNlcnZpY2VJZCA/PyBcIlNTT1wiLFxuICAgIHVybFBhcnNlcjogY29uZmlnPy51cmxQYXJzZXIgPz8gdXJsX3BhcnNlcl8xLnBhcnNlVXJsLFxuICAgIHV0ZjhEZWNvZGVyOiBjb25maWc/LnV0ZjhEZWNvZGVyID8/IHV0aWxfdXRmOF8xLmZyb21VdGY4LFxuICAgIHV0ZjhFbmNvZGVyOiBjb25maWc/LnV0ZjhFbmNvZGVyID8/IHV0aWxfdXRmOF8xLnRvVXRmOCxcbn0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gZ2V0UnVudGltZUNvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgcGFja2FnZV9qc29uXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpKTtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IGhhc2hfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2hhc2gtbm9kZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5XCIpO1xuY29uc3Qgbm9kZV9jb25maWdfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbmNvbnN0IG5vZGVfaHR0cF9oYW5kbGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbm9kZS1odHRwLWhhbmRsZXJcIik7XG5jb25zdCB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWJvZHktbGVuZ3RoLW5vZGVcIik7XG5jb25zdCB1dGlsX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1yZXRyeVwiKTtcbmNvbnN0IHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGVcIik7XG5jb25zdCBydW50aW1lQ29uZmlnX3NoYXJlZF8xID0gcmVxdWlyZShcIi4vcnVudGltZUNvbmZpZy5zaGFyZWRcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1kZWZhdWx0cy1tb2RlLW5vZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzIgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IGdldFJ1bnRpbWVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gICAgKDAsIHNtaXRoeV9jbGllbnRfMi5lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uKShwcm9jZXNzLnZlcnNpb24pO1xuICAgIGNvbnN0IGRlZmF1bHRzTW9kZSA9ICgwLCB1dGlsX2RlZmF1bHRzX21vZGVfbm9kZV8xLnJlc29sdmVEZWZhdWx0c01vZGVDb25maWcpKGNvbmZpZyk7XG4gICAgY29uc3QgZGVmYXVsdENvbmZpZ1Byb3ZpZGVyID0gKCkgPT4gZGVmYXVsdHNNb2RlKCkudGhlbihzbWl0aHlfY2xpZW50XzEubG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZSk7XG4gICAgY29uc3QgY2xpZW50U2hhcmVkVmFsdWVzID0gKDAsIHJ1bnRpbWVDb25maWdfc2hhcmVkXzEuZ2V0UnVudGltZUNvbmZpZykoY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5jbGllbnRTaGFyZWRWYWx1ZXMsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgcnVudGltZTogXCJub2RlXCIsXG4gICAgICAgIGRlZmF1bHRzTW9kZSxcbiAgICAgICAgYm9keUxlbmd0aENoZWNrZXI6IGNvbmZpZz8uYm9keUxlbmd0aENoZWNrZXIgPz8gdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEuY2FsY3VsYXRlQm9keUxlbmd0aCxcbiAgICAgICAgZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyOiBjb25maWc/LmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlciA/P1xuICAgICAgICAgICAgKDAsIHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEuZGVmYXVsdFVzZXJBZ2VudCkoeyBzZXJ2aWNlSWQ6IGNsaWVudFNoYXJlZFZhbHVlcy5zZXJ2aWNlSWQsIGNsaWVudFZlcnNpb246IHBhY2thZ2VfanNvbl8xLmRlZmF1bHQudmVyc2lvbiB9KSxcbiAgICAgICAgbWF4QXR0ZW1wdHM6IGNvbmZpZz8ubWF4QXR0ZW1wdHMgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykobWlkZGxld2FyZV9yZXRyeV8xLk5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMpLFxuICAgICAgICByZWdpb246IGNvbmZpZz8ucmVnaW9uID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TLCBjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1JFR0lPTl9DT05GSUdfRklMRV9PUFRJT05TKSxcbiAgICAgICAgcmVxdWVzdEhhbmRsZXI6IGNvbmZpZz8ucmVxdWVzdEhhbmRsZXIgPz8gbmV3IG5vZGVfaHR0cF9oYW5kbGVyXzEuTm9kZUh0dHBIYW5kbGVyKGRlZmF1bHRDb25maWdQcm92aWRlciksXG4gICAgICAgIHJldHJ5TW9kZTogY29uZmlnPy5yZXRyeU1vZGUgPz9cbiAgICAgICAgICAgICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgICAgICAgICAuLi5taWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFzeW5jICgpID0+IChhd2FpdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIoKSkucmV0cnlNb2RlIHx8IHV0aWxfcmV0cnlfMS5ERUZBVUxUX1JFVFJZX01PREUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgc2hhMjU2OiBjb25maWc/LnNoYTI1NiA/PyBoYXNoX25vZGVfMS5IYXNoLmJpbmQobnVsbCwgXCJzaGEyNTZcIiksXG4gICAgICAgIHN0cmVhbUNvbGxlY3RvcjogY29uZmlnPy5zdHJlYW1Db2xsZWN0b3IgPz8gbm9kZV9odHRwX2hhbmRsZXJfMS5zdHJlYW1Db2xsZWN0b3IsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBjb25maWc/LnVzZUR1YWxzdGFja0VuZHBvaW50ID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfVVNFX0RVQUxTVEFDS19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogY29uZmlnPy51c2VGaXBzRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPQ2xpZW50ID0gZXhwb3J0cy5fX0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb25cIik7XG5jb25zdCBtaWRkbGV3YXJlX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19DbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5DbGllbnQ7IH0gfSk7XG5jb25zdCBFbmRwb2ludFBhcmFtZXRlcnNfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVyc1wiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWdcIik7XG5jbGFzcyBTU09DbGllbnQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMCA9ICgwLCBydW50aW1lQ29uZmlnXzEuZ2V0UnVudGltZUNvbmZpZykoY29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMSA9ICgwLCBFbmRwb2ludFBhcmFtZXRlcnNfMS5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzKShfY29uZmlnXzApO1xuICAgICAgICBjb25zdCBfY29uZmlnXzIgPSAoMCwgY29uZmlnX3Jlc29sdmVyXzEucmVzb2x2ZVJlZ2lvbkNvbmZpZykoX2NvbmZpZ18xKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18zID0gKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5yZXNvbHZlRW5kcG9pbnRDb25maWcpKF9jb25maWdfMik7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNCA9ICgwLCBtaWRkbGV3YXJlX3JldHJ5XzEucmVzb2x2ZVJldHJ5Q29uZmlnKShfY29uZmlnXzMpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzUgPSAoMCwgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xLnJlc29sdmVIb3N0SGVhZGVyQ29uZmlnKShfY29uZmlnXzQpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzYgPSAoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEucmVzb2x2ZVVzZXJBZ2VudENvbmZpZykoX2NvbmZpZ181KTtcbiAgICAgICAgc3VwZXIoX2NvbmZpZ182KTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBfY29uZmlnXzY7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9yZXRyeV8xLmdldFJldHJ5UGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMS5nZXRDb250ZW50TGVuZ3RoUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5nZXRIb3N0SGVhZGVyUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfbG9nZ2VyXzEuZ2V0TG9nZ2VyUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xLmdldFJlY3Vyc2lvbkRldGVjdGlvblBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5leHBvcnRzLlNTT0NsaWVudCA9IFNTT0NsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNTT1NlcnZpY2VFeGNlcHRpb24gPSBleHBvcnRzLl9fU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19TZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbmNsYXNzIFNTT1NlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFNTT1NlcnZpY2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlNTT1NlcnZpY2VFeGNlcHRpb24gPSBTU09TZXJ2aWNlRXhjZXB0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuTGlzdEFjY291bnRzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1Jlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Sb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLlVuYXV0aG9yaXplZEV4Y2VwdGlvbiA9IGV4cG9ydHMuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uID0gZXhwb3J0cy5SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgU1NPU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vU1NPU2VydmljZUV4Y2VwdGlvblwiKTtcbmNsYXNzIEludmFsaWRSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZFJlcXVlc3RFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uID0gSW52YWxpZFJlcXVlc3RFeGNlcHRpb247XG5jbGFzcyBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gPSBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uO1xuY2xhc3MgVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uIGV4dGVuZHMgU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbiA9IFRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbjtcbmNsYXNzIFVuYXV0aG9yaXplZEV4Y2VwdGlvbiBleHRlbmRzIFNTT1NlcnZpY2VFeGNlcHRpb25fMS5TU09TZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiVW5hdXRob3JpemVkRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVW5hdXRob3JpemVkRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5VbmF1dGhvcml6ZWRFeGNlcHRpb24gPSBVbmF1dGhvcml6ZWRFeGNlcHRpb247XG5jb25zdCBHZXRSb2xlQ3JlZGVudGlhbHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5hY2Nlc3NUb2tlbiAmJiB7IGFjY2Vzc1Rva2VuOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5HZXRSb2xlQ3JlZGVudGlhbHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gR2V0Um9sZUNyZWRlbnRpYWxzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IFJvbGVDcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouc2VjcmV0QWNjZXNzS2V5ICYmIHsgc2VjcmV0QWNjZXNzS2V5OiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbiAgICAuLi4ob2JqLnNlc3Npb25Ub2tlbiAmJiB7IHNlc3Npb25Ub2tlbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuUm9sZUNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gUm9sZUNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLnJvbGVDcmVkZW50aWFscyAmJiB7IHJvbGVDcmVkZW50aWFsczogKDAsIGV4cG9ydHMuUm9sZUNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nKShvYmoucm9sZUNyZWRlbnRpYWxzKSB9KSxcbn0pO1xuZXhwb3J0cy5HZXRSb2xlQ3JlZGVudGlhbHNSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IEdldFJvbGVDcmVkZW50aWFsc1Jlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkxpc3RBY2NvdW50Um9sZXNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBMaXN0QWNjb3VudHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5hY2Nlc3NUb2tlbiAmJiB7IGFjY2Vzc1Rva2VuOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5MaXN0QWNjb3VudHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gTGlzdEFjY291bnRzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IExvZ291dFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkxvZ291dFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBMb2dvdXRSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVfTG9nb3V0Q29tbWFuZCA9IGV4cG9ydHMuZGVfTGlzdEFjY291bnRzQ29tbWFuZCA9IGV4cG9ydHMuZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBleHBvcnRzLmRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBleHBvcnRzLnNlX0xvZ291dENvbW1hbmQgPSBleHBvcnRzLnNlX0xpc3RBY2NvdW50c0NvbW1hbmQgPSBleHBvcnRzLnNlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gZXhwb3J0cy5zZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBTU09TZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL1NTT1NlcnZpY2VFeGNlcHRpb25cIik7XG5jb25zdCBzZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSwgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSwge1xuICAgICAgICBcIngtYW16LXNzb19iZWFyZXJfdG9rZW5cIjogaW5wdXQuYWNjZXNzVG9rZW4sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL2ZlZGVyYXRpb24vY3JlZGVudGlhbHNcIjtcbiAgICBjb25zdCBxdWVyeSA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgIHJvbGVfbmFtZTogWywgKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKShpbnB1dC5yb2xlTmFtZSwgYHJvbGVOYW1lYCldLFxuICAgICAgICBhY2NvdW50X2lkOiBbLCAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKGlucHV0LmFjY291bnRJZCwgYGFjY291bnRJZGApXSxcbiAgICB9KTtcbiAgICBsZXQgYm9keTtcbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBib2R5LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2VfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IHNlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQ7XG5jb25zdCBzZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30sIGlzU2VyaWFsaXphYmxlSGVhZGVyVmFsdWUsIHtcbiAgICAgICAgXCJ4LWFtei1zc29fYmVhcmVyX3Rva2VuXCI6IGlucHV0LmFjY2Vzc1Rva2VuLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGAke2Jhc2VQYXRoPy5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifWAgKyBcIi9hc3NpZ25tZW50L3JvbGVzXCI7XG4gICAgY29uc3QgcXVlcnkgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICBuZXh0X3Rva2VuOiBbLCBpbnB1dC5uZXh0VG9rZW5dLFxuICAgICAgICBtYXhfcmVzdWx0OiBbKCkgPT4gaW5wdXQubWF4UmVzdWx0cyAhPT0gdm9pZCAwLCAoKSA9PiBpbnB1dC5tYXhSZXN1bHRzLnRvU3RyaW5nKCldLFxuICAgICAgICBhY2NvdW50X2lkOiBbLCAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKGlucHV0LmFjY291bnRJZCwgYGFjY291bnRJZGApXSxcbiAgICB9KTtcbiAgICBsZXQgYm9keTtcbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBib2R5LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2VfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBzZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZDtcbmNvbnN0IHNlX0xpc3RBY2NvdW50c0NvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9LCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlLCB7XG4gICAgICAgIFwieC1hbXotc3NvX2JlYXJlcl90b2tlblwiOiBpbnB1dC5hY2Nlc3NUb2tlbixcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHtiYXNlUGF0aD8uZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGguc2xpY2UoMCwgLTEpIDogYmFzZVBhdGggfHwgXCJcIn1gICsgXCIvYXNzaWdubWVudC9hY2NvdW50c1wiO1xuICAgIGNvbnN0IHF1ZXJ5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgbmV4dF90b2tlbjogWywgaW5wdXQubmV4dFRva2VuXSxcbiAgICAgICAgbWF4X3Jlc3VsdDogWygpID0+IGlucHV0Lm1heFJlc3VsdHMgIT09IHZvaWQgMCwgKCkgPT4gaW5wdXQubWF4UmVzdWx0cy50b1N0cmluZygpXSxcbiAgICB9KTtcbiAgICBsZXQgYm9keTtcbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBib2R5LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2VfTGlzdEFjY291bnRzQ29tbWFuZCA9IHNlX0xpc3RBY2NvdW50c0NvbW1hbmQ7XG5jb25zdCBzZV9Mb2dvdXRDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSwgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSwge1xuICAgICAgICBcIngtYW16LXNzb19iZWFyZXJfdG9rZW5cIjogaW5wdXQuYWNjZXNzVG9rZW4sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL2xvZ291dFwiO1xuICAgIGxldCBib2R5O1xuICAgIHJldHVybiBuZXcgcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0KHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIGJvZHksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZV9Mb2dvdXRDb21tYW5kID0gc2VfTG9nb3V0Q29tbWFuZDtcbmNvbnN0IGRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlICE9PSAyMDAgJiYgb3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE9iamVjdCkoYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSksIFwiYm9keVwiKTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgcm9sZUNyZWRlbnRpYWxzOiBzbWl0aHlfY2xpZW50XzEuX2pzb24sXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuZXhwb3J0cy5kZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZDtcbmNvbnN0IGRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1VuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiBvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE9iamVjdCkoYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSksIFwiYm9keVwiKTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbmV4dFRva2VuOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgICAgICByb2xlTGlzdDogc21pdGh5X2NsaWVudF8xLl9qc29uLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmV4cG9ydHMuZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBkZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZDtcbmNvbnN0IGRlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1VuYXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfTGlzdEFjY291bnRzQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiBvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0xpc3RBY2NvdW50c0NvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0T2JqZWN0KShhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpKSwgXCJib2R5XCIpO1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBhY2NvdW50TGlzdDogc21pdGh5X2NsaWVudF8xLl9qc29uLFxuICAgICAgICBuZXh0VG9rZW46IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuZXhwb3J0cy5kZV9MaXN0QWNjb3VudHNDb21tYW5kID0gZGVfTGlzdEFjY291bnRzQ29tbWFuZDtcbmNvbnN0IGRlX0xpc3RBY2NvdW50c0NvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1VuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9Mb2dvdXRDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfTG9nb3V0Q29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgfSk7XG4gICAgYXdhaXQgY29sbGVjdEJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX0xvZ291dENvbW1hbmQgPSBkZV9Mb2dvdXRDb21tYW5kO1xuY29uc3QgZGVfTG9nb3V0Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9VbmF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IHRocm93RGVmYXVsdEVycm9yID0gKDAsIHNtaXRoeV9jbGllbnRfMS53aXRoQmFzZUV4Y2VwdGlvbikoU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb24pO1xuY29uc3QgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfVW5hdXRob3JpemVkRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5VbmF1dGhvcml6ZWRFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gKG91dHB1dCkgPT4gKHtcbiAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgcmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0aWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16LXJlcXVlc3QtaWRcIl0sXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxufSk7XG5jb25zdCBjb2xsZWN0Qm9keSA9IChzdHJlYW1Cb2R5ID0gbmV3IFVpbnQ4QXJyYXkoKSwgY29udGV4dCkgPT4ge1xuICAgIGlmIChzdHJlYW1Cb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmVhbUJvZHkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dC5zdHJlYW1Db2xsZWN0b3Ioc3RyZWFtQm9keSkgfHwgUHJvbWlzZS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KCkpO1xufTtcbmNvbnN0IGNvbGxlY3RCb2R5U3RyaW5nID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5KHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGJvZHkpID0+IGNvbnRleHQudXRmOEVuY29kZXIoYm9keSkpO1xuY29uc3QgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdmFsdWUgIT09IFwiXCIgJiZcbiAgICAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5pbmNsdWRlcyhcImxlbmd0aFwiKSB8fCB2YWx1ZS5sZW5ndGggIT0gMCkgJiZcbiAgICAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5pbmNsdWRlcyhcInNpemVcIikgfHwgdmFsdWUuc2l6ZSAhPSAwKTtcbmNvbnN0IHBhcnNlQm9keSA9IChzdHJlYW1Cb2R5LCBjb250ZXh0KSA9PiBjb2xsZWN0Qm9keVN0cmluZyhzdHJlYW1Cb2R5LCBjb250ZXh0KS50aGVuKChlbmNvZGVkKSA9PiB7XG4gICAgaWYgKGVuY29kZWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGVuY29kZWQpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59KTtcbmNvbnN0IHBhcnNlRXJyb3JCb2R5ID0gYXN5bmMgKGVycm9yQm9keSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFyc2VCb2R5KGVycm9yQm9keSwgY29udGV4dCk7XG4gICAgdmFsdWUubWVzc2FnZSA9IHZhbHVlLm1lc3NhZ2UgPz8gdmFsdWUuTWVzc2FnZTtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuY29uc3QgbG9hZFJlc3RKc29uRXJyb3JDb2RlID0gKG91dHB1dCwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGZpbmRLZXkgPSAob2JqZWN0LCBrZXkpID0+IE9iamVjdC5rZXlzKG9iamVjdCkuZmluZCgoaykgPT4gay50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3Qgc2FuaXRpemVFcnJvckNvZGUgPSAocmF3VmFsdWUpID0+IHtcbiAgICAgICAgbGV0IGNsZWFuVmFsdWUgPSByYXdWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhblZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCIsXCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiLFwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiOlwiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIjpcIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIiNcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIjXCIpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGVhblZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgaGVhZGVyS2V5ID0gZmluZEtleShvdXRwdXQuaGVhZGVycywgXCJ4LWFtem4tZXJyb3J0eXBlXCIpO1xuICAgIGlmIChoZWFkZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUob3V0cHV0LmhlYWRlcnNbaGVhZGVyS2V5XSk7XG4gICAgfVxuICAgIGlmIChkYXRhLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUoZGF0YS5jb2RlKTtcbiAgICB9XG4gICAgaWYgKGRhdGFbXCJfX3R5cGVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUoZGF0YVtcIl9fdHlwZVwiXSk7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBBd3NfcmVzdEpzb24xXzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19yZXN0SnNvbjFcIik7XG5jbGFzcyBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTU09DbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5HZXRSb2xlQ3JlZGVudGlhbHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkdldFJvbGVDcmVkZW50aWFsc1Jlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLnNlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLmRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3Jlc3RKc29uMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xXCIpO1xuY2xhc3MgTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgTGlzdEFjY291bnRSb2xlc0NvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTU09DbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkxpc3RBY2NvdW50Um9sZXNDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLnNlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5kZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gTGlzdEFjY291bnRSb2xlc0NvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MaXN0QWNjb3VudHNDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3Jlc3RKc29uMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xXCIpO1xuY2xhc3MgTGlzdEFjY291bnRzQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBMaXN0QWNjb3VudHNDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJMaXN0QWNjb3VudHNDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuTGlzdEFjY291bnRzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfTGlzdEFjY291bnRzQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfTGlzdEFjY291bnRzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxpc3RBY2NvdW50c0NvbW1hbmQgPSBMaXN0QWNjb3VudHNDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nb3V0Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIExvZ291dENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgTG9nb3V0Q29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiTG9nb3V0Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkxvZ291dFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLnNlX0xvZ291dENvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLmRlX0xvZ291dENvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5Mb2dvdXRDb21tYW5kID0gTG9nb3V0Q29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNTTyA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZFwiKTtcbmNvbnN0IExpc3RBY2NvdW50Um9sZXNDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZFwiKTtcbmNvbnN0IExpc3RBY2NvdW50c0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0xpc3RBY2NvdW50c0NvbW1hbmRcIik7XG5jb25zdCBMb2dvdXRDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9Mb2dvdXRDb21tYW5kXCIpO1xuY29uc3QgU1NPQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9TU09DbGllbnRcIik7XG5jb25zdCBjb21tYW5kcyA9IHtcbiAgICBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kOiBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kXzEuR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCxcbiAgICBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZDogTGlzdEFjY291bnRSb2xlc0NvbW1hbmRfMS5MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCxcbiAgICBMaXN0QWNjb3VudHNDb21tYW5kOiBMaXN0QWNjb3VudHNDb21tYW5kXzEuTGlzdEFjY291bnRzQ29tbWFuZCxcbiAgICBMb2dvdXRDb21tYW5kOiBMb2dvdXRDb21tYW5kXzEuTG9nb3V0Q29tbWFuZCxcbn07XG5jbGFzcyBTU08gZXh0ZW5kcyBTU09DbGllbnRfMS5TU09DbGllbnQge1xufVxuZXhwb3J0cy5TU08gPSBTU087XG4oMCwgc21pdGh5X2NsaWVudF8xLmNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQpKGNvbW1hbmRzLCBTU08pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xpc3RBY2NvdW50Um9sZXNDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xpc3RBY2NvdW50c0NvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTG9nb3V0Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFnaW5hdGVMaXN0QWNjb3VudFJvbGVzID0gdm9pZCAwO1xuY29uc3QgTGlzdEFjY291bnRSb2xlc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZFwiKTtcbmNvbnN0IFNTT0NsaWVudF8xID0gcmVxdWlyZShcIi4uL1NTT0NsaWVudFwiKTtcbmNvbnN0IG1ha2VQYWdlZENsaWVudFJlcXVlc3QgPSBhc3luYyAoY2xpZW50LCBpbnB1dCwgLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2VuZChuZXcgTGlzdEFjY291bnRSb2xlc0NvbW1hbmRfMS5MaXN0QWNjb3VudFJvbGVzQ29tbWFuZChpbnB1dCksIC4uLmFyZ3MpO1xufTtcbmFzeW5jIGZ1bmN0aW9uKiBwYWdpbmF0ZUxpc3RBY2NvdW50Um9sZXMoY29uZmlnLCBpbnB1dCwgLi4uYWRkaXRpb25hbEFyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IGNvbmZpZy5zdGFydGluZ1Rva2VuIHx8IHVuZGVmaW5lZDtcbiAgICBsZXQgaGFzTmV4dCA9IHRydWU7XG4gICAgbGV0IHBhZ2U7XG4gICAgd2hpbGUgKGhhc05leHQpIHtcbiAgICAgICAgaW5wdXQubmV4dFRva2VuID0gdG9rZW47XG4gICAgICAgIGlucHV0W1wibWF4UmVzdWx0c1wiXSA9IGNvbmZpZy5wYWdlU2l6ZTtcbiAgICAgICAgaWYgKGNvbmZpZy5jbGllbnQgaW5zdGFuY2VvZiBTU09DbGllbnRfMS5TU09DbGllbnQpIHtcbiAgICAgICAgICAgIHBhZ2UgPSBhd2FpdCBtYWtlUGFnZWRDbGllbnRSZXF1ZXN0KGNvbmZpZy5jbGllbnQsIGlucHV0LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2xpZW50LCBleHBlY3RlZCBTU08gfCBTU09DbGllbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQgcGFnZTtcbiAgICAgICAgY29uc3QgcHJldlRva2VuID0gdG9rZW47XG4gICAgICAgIHRva2VuID0gcGFnZS5uZXh0VG9rZW47XG4gICAgICAgIGhhc05leHQgPSAhISh0b2tlbiAmJiAoIWNvbmZpZy5zdG9wT25TYW1lVG9rZW4gfHwgdG9rZW4gIT09IHByZXZUb2tlbikpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5wYWdpbmF0ZUxpc3RBY2NvdW50Um9sZXMgPSBwYWdpbmF0ZUxpc3RBY2NvdW50Um9sZXM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYWdpbmF0ZUxpc3RBY2NvdW50cyA9IHZvaWQgMDtcbmNvbnN0IExpc3RBY2NvdW50c0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MaXN0QWNjb3VudHNDb21tYW5kXCIpO1xuY29uc3QgU1NPQ2xpZW50XzEgPSByZXF1aXJlKFwiLi4vU1NPQ2xpZW50XCIpO1xuY29uc3QgbWFrZVBhZ2VkQ2xpZW50UmVxdWVzdCA9IGFzeW5jIChjbGllbnQsIGlucHV0LCAuLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBMaXN0QWNjb3VudHNDb21tYW5kXzEuTGlzdEFjY291bnRzQ29tbWFuZChpbnB1dCksIC4uLmFyZ3MpO1xufTtcbmFzeW5jIGZ1bmN0aW9uKiBwYWdpbmF0ZUxpc3RBY2NvdW50cyhjb25maWcsIGlucHV0LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzKSB7XG4gICAgbGV0IHRva2VuID0gY29uZmlnLnN0YXJ0aW5nVG9rZW4gfHwgdW5kZWZpbmVkO1xuICAgIGxldCBoYXNOZXh0ID0gdHJ1ZTtcbiAgICBsZXQgcGFnZTtcbiAgICB3aGlsZSAoaGFzTmV4dCkge1xuICAgICAgICBpbnB1dC5uZXh0VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgaW5wdXRbXCJtYXhSZXN1bHRzXCJdID0gY29uZmlnLnBhZ2VTaXplO1xuICAgICAgICBpZiAoY29uZmlnLmNsaWVudCBpbnN0YW5jZW9mIFNTT0NsaWVudF8xLlNTT0NsaWVudCkge1xuICAgICAgICAgICAgcGFnZSA9IGF3YWl0IG1ha2VQYWdlZENsaWVudFJlcXVlc3QoY29uZmlnLmNsaWVudCwgaW5wdXQsIC4uLmFkZGl0aW9uYWxBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjbGllbnQsIGV4cGVjdGVkIFNTTyB8IFNTT0NsaWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBwYWdlO1xuICAgICAgICBjb25zdCBwcmV2VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSBwYWdlLm5leHRUb2tlbjtcbiAgICAgICAgaGFzTmV4dCA9ICEhKHRva2VuICYmICghY29uZmlnLnN0b3BPblNhbWVUb2tlbiB8fCB0b2tlbiAhPT0gcHJldlRva2VuKSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnBhZ2luYXRlTGlzdEFjY291bnRzID0gcGFnaW5hdGVMaXN0QWNjb3VudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ludGVyZmFjZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTGlzdEFjY291bnRSb2xlc1BhZ2luYXRvclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9MaXN0QWNjb3VudHNQYWdpbmF0b3JcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tb2RlbHNfMFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TU09TZXJ2aWNlRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NTT0NsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TU09cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29tbWFuZHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFnaW5hdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tb2RlbHNcIiksIGV4cG9ydHMpO1xudmFyIFNTT1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuL21vZGVscy9TU09TZXJ2aWNlRXhjZXB0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1NPU2VydmljZUV4Y2VwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb247IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SRUZSRVNIX01FU1NBR0UgPSBleHBvcnRzLkVYUElSRV9XSU5ET1dfTVMgPSB2b2lkIDA7XG5leHBvcnRzLkVYUElSRV9XSU5ET1dfTVMgPSA1ICogNjAgKiAxMDAwO1xuZXhwb3J0cy5SRUZSRVNIX01FU1NBR0UgPSBgVG8gcmVmcmVzaCB0aGlzIFNTTyBzZXNzaW9uIHJ1biAnYXdzIHNzbyBsb2dpbicgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9maWxlLmA7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTc29PaWRjQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3Nzb19vaWRjXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjXCIpO1xuY29uc3Qgc3NvT2lkY0NsaWVudHNIYXNoID0ge307XG5jb25zdCBnZXRTc29PaWRjQ2xpZW50ID0gKHNzb1JlZ2lvbikgPT4ge1xuICAgIGlmIChzc29PaWRjQ2xpZW50c0hhc2hbc3NvUmVnaW9uXSkge1xuICAgICAgICByZXR1cm4gc3NvT2lkY0NsaWVudHNIYXNoW3Nzb1JlZ2lvbl07XG4gICAgfVxuICAgIGNvbnN0IHNzb09pZGNDbGllbnQgPSBuZXcgY2xpZW50X3Nzb19vaWRjXzEuU1NPT0lEQ0NsaWVudCh7IHJlZ2lvbjogc3NvUmVnaW9uIH0pO1xuICAgIHNzb09pZGNDbGllbnRzSGFzaFtzc29SZWdpb25dID0gc3NvT2lkY0NsaWVudDtcbiAgICByZXR1cm4gc3NvT2lkY0NsaWVudDtcbn07XG5leHBvcnRzLmdldFNzb09pZGNDbGllbnQgPSBnZXRTc29PaWRjQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TmV3U3NvT2lkY1Rva2VuID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3Nzb19vaWRjXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNzby1vaWRjXCIpO1xuY29uc3QgZ2V0U3NvT2lkY0NsaWVudF8xID0gcmVxdWlyZShcIi4vZ2V0U3NvT2lkY0NsaWVudFwiKTtcbmNvbnN0IGdldE5ld1Nzb09pZGNUb2tlbiA9IChzc29Ub2tlbiwgc3NvUmVnaW9uKSA9PiB7XG4gICAgY29uc3Qgc3NvT2lkY0NsaWVudCA9ICgwLCBnZXRTc29PaWRjQ2xpZW50XzEuZ2V0U3NvT2lkY0NsaWVudCkoc3NvUmVnaW9uKTtcbiAgICByZXR1cm4gc3NvT2lkY0NsaWVudC5zZW5kKG5ldyBjbGllbnRfc3NvX29pZGNfMS5DcmVhdGVUb2tlbkNvbW1hbmQoe1xuICAgICAgICBjbGllbnRJZDogc3NvVG9rZW4uY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogc3NvVG9rZW4uY2xpZW50U2VjcmV0LFxuICAgICAgICByZWZyZXNoVG9rZW46IHNzb1Rva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgICAgZ3JhbnRUeXBlOiBcInJlZnJlc2hfdG9rZW5cIixcbiAgICB9KSk7XG59O1xuZXhwb3J0cy5nZXROZXdTc29PaWRjVG9rZW4gPSBnZXROZXdTc29PaWRjVG9rZW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVRva2VuRXhwaXJ5ID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdmFsaWRhdGVUb2tlbkV4cGlyeSA9ICh0b2tlbikgPT4ge1xuICAgIGlmICh0b2tlbi5leHBpcmF0aW9uICYmIHRva2VuLmV4cGlyYXRpb24uZ2V0VGltZSgpIDwgRGF0ZS5ub3coKSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFRva2VuIGlzIGV4cGlyZWQuICR7Y29uc3RhbnRzXzEuUkVGUkVTSF9NRVNTQUdFfWAsIGZhbHNlKTtcbiAgICB9XG59O1xuZXhwb3J0cy52YWxpZGF0ZVRva2VuRXhwaXJ5ID0gdmFsaWRhdGVUb2tlbkV4cGlyeTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVG9rZW5LZXkgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCB2YWxpZGF0ZVRva2VuS2V5ID0gKGtleSwgdmFsdWUsIGZvclJlZnJlc2ggPSBmYWxzZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBWYWx1ZSBub3QgcHJlc2VudCBmb3IgJyR7a2V5fScgaW4gU1NPIFRva2VuJHtmb3JSZWZyZXNoID8gXCIuIENhbm5vdCByZWZyZXNoXCIgOiBcIlwifS4gJHtjb25zdGFudHNfMS5SRUZSRVNIX01FU1NBR0V9YCwgZmFsc2UpO1xuICAgIH1cbn07XG5leHBvcnRzLnZhbGlkYXRlVG9rZW5LZXkgPSB2YWxpZGF0ZVRva2VuS2V5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud3JpdGVTU09Ub2tlblRvRmlsZSA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgd3JpdGVGaWxlIH0gPSBmc18xLnByb21pc2VzO1xuY29uc3Qgd3JpdGVTU09Ub2tlblRvRmlsZSA9IChpZCwgc3NvVG9rZW4pID0+IHtcbiAgICBjb25zdCB0b2tlbkZpbGVwYXRoID0gKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRTU09Ub2tlbkZpbGVwYXRoKShpZCk7XG4gICAgY29uc3QgdG9rZW5TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzc29Ub2tlbiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIHdyaXRlRmlsZSh0b2tlbkZpbGVwYXRoLCB0b2tlblN0cmluZyk7XG59O1xuZXhwb3J0cy53cml0ZVNTT1Rva2VuVG9GaWxlID0gd3JpdGVTU09Ub2tlblRvRmlsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Tc28gPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3Qgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGdldE5ld1Nzb09pZGNUb2tlbl8xID0gcmVxdWlyZShcIi4vZ2V0TmV3U3NvT2lkY1Rva2VuXCIpO1xuY29uc3QgdmFsaWRhdGVUb2tlbkV4cGlyeV8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGVUb2tlbkV4cGlyeVwiKTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5LZXlfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlVG9rZW5LZXlcIik7XG5jb25zdCB3cml0ZVNTT1Rva2VuVG9GaWxlXzEgPSByZXF1aXJlKFwiLi93cml0ZVNTT1Rva2VuVG9GaWxlXCIpO1xuY29uc3QgbGFzdFJlZnJlc2hBdHRlbXB0VGltZSA9IG5ldyBEYXRlKDApO1xuY29uc3QgZnJvbVNzbyA9IChpbml0ID0ge30pID0+IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEucGFyc2VLbm93bkZpbGVzKShpbml0KTtcbiAgICBjb25zdCBwcm9maWxlTmFtZSA9ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuZ2V0UHJvZmlsZU5hbWUpKGluaXQpO1xuICAgIGNvbnN0IHByb2ZpbGUgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAnJHtwcm9maWxlTmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBzaGFyZWQgY3JlZGVudGlhbHMgZmlsZS5gLCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFwcm9maWxlW1wic3NvX3Nlc3Npb25cIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBQcm9maWxlICcke3Byb2ZpbGVOYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAnc3NvX3Nlc3Npb24nLmApO1xuICAgIH1cbiAgICBjb25zdCBzc29TZXNzaW9uTmFtZSA9IHByb2ZpbGVbXCJzc29fc2Vzc2lvblwiXTtcbiAgICBjb25zdCBzc29TZXNzaW9ucyA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEubG9hZFNzb1Nlc3Npb25EYXRhKShpbml0KTtcbiAgICBjb25zdCBzc29TZXNzaW9uID0gc3NvU2Vzc2lvbnNbc3NvU2Vzc2lvbk5hbWVdO1xuICAgIGlmICghc3NvU2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFNzbyBzZXNzaW9uICcke3Nzb1Nlc3Npb25OYW1lfScgY291bGQgbm90IGJlIGZvdW5kIGluIHNoYXJlZCBjcmVkZW50aWFscyBmaWxlLmAsIGZhbHNlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzc29TZXNzaW9uUmVxdWlyZWRLZXkgb2YgW1wic3NvX3N0YXJ0X3VybFwiLCBcInNzb19yZWdpb25cIl0pIHtcbiAgICAgICAgaWYgKCFzc29TZXNzaW9uW3Nzb1Nlc3Npb25SZXF1aXJlZEtleV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgU3NvIHNlc3Npb24gJyR7c3NvU2Vzc2lvbk5hbWV9JyBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICcke3Nzb1Nlc3Npb25SZXF1aXJlZEtleX0nLmAsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzc29TdGFydFVybCA9IHNzb1Nlc3Npb25bXCJzc29fc3RhcnRfdXJsXCJdO1xuICAgIGNvbnN0IHNzb1JlZ2lvbiA9IHNzb1Nlc3Npb25bXCJzc29fcmVnaW9uXCJdO1xuICAgIGxldCBzc29Ub2tlbjtcbiAgICB0cnkge1xuICAgICAgICBzc29Ub2tlbiA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuZ2V0U1NPVG9rZW5Gcm9tRmlsZSkoc3NvU2Vzc2lvbk5hbWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFRoZSBTU08gc2Vzc2lvbiB0b2tlbiBhc3NvY2lhdGVkIHdpdGggcHJvZmlsZT0ke3Byb2ZpbGVOYW1lfSB3YXMgbm90IGZvdW5kIG9yIGlzIGludmFsaWQuICR7Y29uc3RhbnRzXzEuUkVGUkVTSF9NRVNTQUdFfWAsIGZhbHNlKTtcbiAgICB9XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcImFjY2Vzc1Rva2VuXCIsIHNzb1Rva2VuLmFjY2Vzc1Rva2VuKTtcbiAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwiZXhwaXJlc0F0XCIsIHNzb1Rva2VuLmV4cGlyZXNBdCk7XG4gICAgY29uc3QgeyBhY2Nlc3NUb2tlbiwgZXhwaXJlc0F0IH0gPSBzc29Ub2tlbjtcbiAgICBjb25zdCBleGlzdGluZ1Rva2VuID0geyB0b2tlbjogYWNjZXNzVG9rZW4sIGV4cGlyYXRpb246IG5ldyBEYXRlKGV4cGlyZXNBdCkgfTtcbiAgICBpZiAoZXhpc3RpbmdUb2tlbi5leHBpcmF0aW9uLmdldFRpbWUoKSAtIERhdGUubm93KCkgPiBjb25zdGFudHNfMS5FWFBJUkVfV0lORE9XX01TKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RSZWZyZXNoQXR0ZW1wdFRpbWUuZ2V0VGltZSgpIDwgMzAgKiAxMDAwKSB7XG4gICAgICAgICgwLCB2YWxpZGF0ZVRva2VuRXhwaXJ5XzEudmFsaWRhdGVUb2tlbkV4cGlyeSkoZXhpc3RpbmdUb2tlbik7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbiAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwiY2xpZW50SWRcIiwgc3NvVG9rZW4uY2xpZW50SWQsIHRydWUpO1xuICAgICgwLCB2YWxpZGF0ZVRva2VuS2V5XzEudmFsaWRhdGVUb2tlbktleSkoXCJjbGllbnRTZWNyZXRcIiwgc3NvVG9rZW4uY2xpZW50U2VjcmV0LCB0cnVlKTtcbiAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwicmVmcmVzaFRva2VuXCIsIHNzb1Rva2VuLnJlZnJlc2hUb2tlbiwgdHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgbGFzdFJlZnJlc2hBdHRlbXB0VGltZS5zZXRUaW1lKERhdGUubm93KCkpO1xuICAgICAgICBjb25zdCBuZXdTc29PaWRjVG9rZW4gPSBhd2FpdCAoMCwgZ2V0TmV3U3NvT2lkY1Rva2VuXzEuZ2V0TmV3U3NvT2lkY1Rva2VuKShzc29Ub2tlbiwgc3NvUmVnaW9uKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcImFjY2Vzc1Rva2VuXCIsIG5ld1Nzb09pZGNUb2tlbi5hY2Nlc3NUb2tlbik7XG4gICAgICAgICgwLCB2YWxpZGF0ZVRva2VuS2V5XzEudmFsaWRhdGVUb2tlbktleSkoXCJleHBpcmVzSW5cIiwgbmV3U3NvT2lkY1Rva2VuLmV4cGlyZXNJbik7XG4gICAgICAgIGNvbnN0IG5ld1Rva2VuRXhwaXJhdGlvbiA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBuZXdTc29PaWRjVG9rZW4uZXhwaXJlc0luICogMTAwMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgd3JpdGVTU09Ub2tlblRvRmlsZV8xLndyaXRlU1NPVG9rZW5Ub0ZpbGUpKHNzb1Nlc3Npb25OYW1lLCB7XG4gICAgICAgICAgICAgICAgLi4uc3NvVG9rZW4sXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IG5ld1Nzb09pZGNUb2tlbi5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQ6IG5ld1Rva2VuRXhwaXJhdGlvbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogbmV3U3NvT2lkY1Rva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b2tlbjogbmV3U3NvT2lkY1Rva2VuLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogbmV3VG9rZW5FeHBpcmF0aW9uLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgKDAsIHZhbGlkYXRlVG9rZW5FeHBpcnlfMS52YWxpZGF0ZVRva2VuRXhwaXJ5KShleGlzdGluZ1Rva2VuKTtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nVG9rZW47XG4gICAgfVxufTtcbmV4cG9ydHMuZnJvbVNzbyA9IGZyb21Tc287XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tU3RhdGljID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGZyb21TdGF0aWMgPSAoeyB0b2tlbiB9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCF0b2tlbiB8fCAhdG9rZW4udG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBQbGVhc2UgcGFzcyBhIHZhbGlkIHRva2VuIHRvIGZyb21TdGF0aWNgLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn07XG5leHBvcnRzLmZyb21TdGF0aWMgPSBmcm9tU3RhdGljO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm9kZVByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGZyb21Tc29fMSA9IHJlcXVpcmUoXCIuL2Zyb21Tc29cIik7XG5jb25zdCBub2RlUHJvdmlkZXIgPSAoaW5pdCA9IHt9KSA9PiAoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5tZW1vaXplKSgoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5jaGFpbikoKDAsIGZyb21Tc29fMS5mcm9tU3NvKShpbml0KSwgYXN5bmMgKCkgPT4ge1xuICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihcIkNvdWxkIG5vdCBsb2FkIHRva2VuIGZyb20gYW55IHByb3ZpZGVyc1wiLCBmYWxzZSk7XG59KSwgKHRva2VuKSA9PiB0b2tlbi5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdG9rZW4uZXhwaXJhdGlvbi5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIDwgMzAwMDAwLCAodG9rZW4pID0+IHRva2VuLmV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCk7XG5leHBvcnRzLm5vZGVQcm92aWRlciA9IG5vZGVQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVNzb1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tU3RhdGljXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL25vZGVQcm92aWRlclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU1NPQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBjbGllbnRfc3NvXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNzb1wiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IHRva2VuX3Byb3ZpZGVyc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Rva2VuLXByb3ZpZGVyc1wiKTtcbmNvbnN0IEVYUElSRV9XSU5ET1dfTVMgPSAxNSAqIDYwICogMTAwMDtcbmNvbnN0IFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4gPSBmYWxzZTtcbmNvbnN0IHJlc29sdmVTU09DcmVkZW50aWFscyA9IGFzeW5jICh7IHNzb1N0YXJ0VXJsLCBzc29TZXNzaW9uLCBzc29BY2NvdW50SWQsIHNzb1JlZ2lvbiwgc3NvUm9sZU5hbWUsIHNzb0NsaWVudCwgcHJvZmlsZSwgfSkgPT4ge1xuICAgIGxldCB0b2tlbjtcbiAgICBjb25zdCByZWZyZXNoTWVzc2FnZSA9IGBUbyByZWZyZXNoIHRoaXMgU1NPIHNlc3Npb24gcnVuIGF3cyBzc28gbG9naW4gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9maWxlLmA7XG4gICAgaWYgKHNzb1Nlc3Npb24pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IF90b2tlbiA9IGF3YWl0ICgwLCB0b2tlbl9wcm92aWRlcnNfMS5mcm9tU3NvKSh7IHByb2ZpbGUgfSkoKTtcbiAgICAgICAgICAgIHRva2VuID0ge1xuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBfdG9rZW4udG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShfdG9rZW4uZXhwaXJhdGlvbikudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihlLm1lc3NhZ2UsIFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdG9rZW4gPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFNTT1Rva2VuRnJvbUZpbGUpKHNzb1N0YXJ0VXJsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBUaGUgU1NPIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvZmlsZSBpcyBpbnZhbGlkLiAke3JlZnJlc2hNZXNzYWdlfWAsIFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXcgRGF0ZSh0b2tlbi5leHBpcmVzQXQpLmdldFRpbWUoKSAtIERhdGUubm93KCkgPD0gRVhQSVJFX1dJTkRPV19NUykge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFRoZSBTU08gc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9maWxlIGhhcyBleHBpcmVkLiAke3JlZnJlc2hNZXNzYWdlfWAsIFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4pO1xuICAgIH1cbiAgICBjb25zdCB7IGFjY2Vzc1Rva2VuIH0gPSB0b2tlbjtcbiAgICBjb25zdCBzc28gPSBzc29DbGllbnQgfHwgbmV3IGNsaWVudF9zc29fMS5TU09DbGllbnQoeyByZWdpb246IHNzb1JlZ2lvbiB9KTtcbiAgICBsZXQgc3NvUmVzcDtcbiAgICB0cnkge1xuICAgICAgICBzc29SZXNwID0gYXdhaXQgc3NvLnNlbmQobmV3IGNsaWVudF9zc29fMS5HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kKHtcbiAgICAgICAgICAgIGFjY291bnRJZDogc3NvQWNjb3VudElkLFxuICAgICAgICAgICAgcm9sZU5hbWU6IHNzb1JvbGVOYW1lLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IuZnJvbShlLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICB9XG4gICAgY29uc3QgeyByb2xlQ3JlZGVudGlhbHM6IHsgYWNjZXNzS2V5SWQsIHNlY3JldEFjY2Vzc0tleSwgc2Vzc2lvblRva2VuLCBleHBpcmF0aW9uIH0gPSB7fSB9ID0gc3NvUmVzcDtcbiAgICBpZiAoIWFjY2Vzc0tleUlkIHx8ICFzZWNyZXRBY2Nlc3NLZXkgfHwgIXNlc3Npb25Ub2tlbiB8fCAhZXhwaXJhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJTU08gcmV0dXJucyBhbiBpbnZhbGlkIHRlbXBvcmFyeSBjcmVkZW50aWFsLlwiLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWNjZXNzS2V5SWQsIHNlY3JldEFjY2Vzc0tleSwgc2Vzc2lvblRva2VuLCBleHBpcmF0aW9uOiBuZXcgRGF0ZShleHBpcmF0aW9uKSB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZVNTT0NyZWRlbnRpYWxzID0gcmVzb2x2ZVNTT0NyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTc29Qcm9maWxlID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHZhbGlkYXRlU3NvUHJvZmlsZSA9IChwcm9maWxlKSA9PiB7XG4gICAgY29uc3QgeyBzc29fc3RhcnRfdXJsLCBzc29fYWNjb3VudF9pZCwgc3NvX3JlZ2lvbiwgc3NvX3JvbGVfbmFtZSB9ID0gcHJvZmlsZTtcbiAgICBpZiAoIXNzb19zdGFydF91cmwgfHwgIXNzb19hY2NvdW50X2lkIHx8ICFzc29fcmVnaW9uIHx8ICFzc29fcm9sZV9uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSBpcyBjb25maWd1cmVkIHdpdGggaW52YWxpZCBTU08gY3JlZGVudGlhbHMuIFJlcXVpcmVkIHBhcmFtZXRlcnMgXCJzc29fYWNjb3VudF9pZFwiLCBgICtcbiAgICAgICAgICAgIGBcInNzb19yZWdpb25cIiwgXCJzc29fcm9sZV9uYW1lXCIsIFwic3NvX3N0YXJ0X3VybFwiLiBHb3QgJHtPYmplY3Qua2V5cyhwcm9maWxlKS5qb2luKFwiLCBcIil9XFxuUmVmZXJlbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC91c2VyZ3VpZGUvY2xpLWNvbmZpZ3VyZS1zc28uaHRtbGAsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2ZpbGU7XG59O1xuZXhwb3J0cy52YWxpZGF0ZVNzb1Byb2ZpbGUgPSB2YWxpZGF0ZVNzb1Byb2ZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tU1NPID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgaXNTc29Qcm9maWxlXzEgPSByZXF1aXJlKFwiLi9pc1Nzb1Byb2ZpbGVcIik7XG5jb25zdCByZXNvbHZlU1NPQ3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVTU09DcmVkZW50aWFsc1wiKTtcbmNvbnN0IHZhbGlkYXRlU3NvUHJvZmlsZV8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGVTc29Qcm9maWxlXCIpO1xuY29uc3QgZnJvbVNTTyA9IChpbml0ID0ge30pID0+IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IHNzb1N0YXJ0VXJsLCBzc29BY2NvdW50SWQsIHNzb1JlZ2lvbiwgc3NvUm9sZU5hbWUsIHNzb0NsaWVudCwgc3NvU2Vzc2lvbiB9ID0gaW5pdDtcbiAgICBjb25zdCBwcm9maWxlTmFtZSA9ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuZ2V0UHJvZmlsZU5hbWUpKGluaXQpO1xuICAgIGlmICghc3NvU3RhcnRVcmwgJiYgIXNzb0FjY291bnRJZCAmJiAhc3NvUmVnaW9uICYmICFzc29Sb2xlTmFtZSAmJiAhc3NvU2Vzc2lvbikge1xuICAgICAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0ICgwLCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEucGFyc2VLbm93bkZpbGVzKShpbml0KTtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHByb2ZpbGVzW3Byb2ZpbGVOYW1lXTtcbiAgICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBpc1Nzb1Byb2ZpbGVfMS5pc1Nzb1Byb2ZpbGUpKHByb2ZpbGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBTU08gY3JlZGVudGlhbHMuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2ZpbGUgPT09IG51bGwgfHwgcHJvZmlsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvZmlsZS5zc29fc2Vzc2lvbikge1xuICAgICAgICAgICAgY29uc3Qgc3NvU2Vzc2lvbnMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmxvYWRTc29TZXNzaW9uRGF0YSkoaW5pdCk7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gc3NvU2Vzc2lvbnNbcHJvZmlsZS5zc29fc2Vzc2lvbl07XG4gICAgICAgICAgICBjb25zdCBjb25mbGljdE1zZyA9IGAgY29uZmlndXJhdGlvbnMgaW4gcHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBhbmQgc3NvLXNlc3Npb24gJHtwcm9maWxlLnNzb19zZXNzaW9ufWA7XG4gICAgICAgICAgICBpZiAoc3NvUmVnaW9uICYmIHNzb1JlZ2lvbiAhPT0gc2Vzc2lvbi5zc29fcmVnaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBDb25mbGljdGluZyBTU08gcmVnaW9uYCArIGNvbmZsaWN0TXNnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3NvU3RhcnRVcmwgJiYgc3NvU3RhcnRVcmwgIT09IHNlc3Npb24uc3NvX3N0YXJ0X3VybCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgQ29uZmxpY3RpbmcgU1NPIHN0YXJ0X3VybGAgKyBjb25mbGljdE1zZywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvZmlsZS5zc29fcmVnaW9uID0gc2Vzc2lvbi5zc29fcmVnaW9uO1xuICAgICAgICAgICAgcHJvZmlsZS5zc29fc3RhcnRfdXJsID0gc2Vzc2lvbi5zc29fc3RhcnRfdXJsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3NvX3N0YXJ0X3VybCwgc3NvX2FjY291bnRfaWQsIHNzb19yZWdpb24sIHNzb19yb2xlX25hbWUsIHNzb19zZXNzaW9uIH0gPSAoMCwgdmFsaWRhdGVTc29Qcm9maWxlXzEudmFsaWRhdGVTc29Qcm9maWxlKShwcm9maWxlKTtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlU1NPQ3JlZGVudGlhbHNfMS5yZXNvbHZlU1NPQ3JlZGVudGlhbHMpKHtcbiAgICAgICAgICAgIHNzb1N0YXJ0VXJsOiBzc29fc3RhcnRfdXJsLFxuICAgICAgICAgICAgc3NvU2Vzc2lvbjogc3NvX3Nlc3Npb24sXG4gICAgICAgICAgICBzc29BY2NvdW50SWQ6IHNzb19hY2NvdW50X2lkLFxuICAgICAgICAgICAgc3NvUmVnaW9uOiBzc29fcmVnaW9uLFxuICAgICAgICAgICAgc3NvUm9sZU5hbWU6IHNzb19yb2xlX25hbWUsXG4gICAgICAgICAgICBzc29DbGllbnQ6IHNzb0NsaWVudCxcbiAgICAgICAgICAgIHByb2ZpbGU6IHByb2ZpbGVOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNzb1N0YXJ0VXJsIHx8ICFzc29BY2NvdW50SWQgfHwgIXNzb1JlZ2lvbiB8fCAhc3NvUm9sZU5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiSW5jb21wbGV0ZSBjb25maWd1cmF0aW9uLiBUaGUgZnJvbVNTTygpIGFyZ3VtZW50IGhhc2ggbXVzdCBpbmNsdWRlIFwiICtcbiAgICAgICAgICAgICdcInNzb1N0YXJ0VXJsXCIsIFwic3NvQWNjb3VudElkXCIsIFwic3NvUmVnaW9uXCIsIFwic3NvUm9sZU5hbWVcIicpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlU1NPQ3JlZGVudGlhbHNfMS5yZXNvbHZlU1NPQ3JlZGVudGlhbHMpKHtcbiAgICAgICAgICAgIHNzb1N0YXJ0VXJsLFxuICAgICAgICAgICAgc3NvU2Vzc2lvbixcbiAgICAgICAgICAgIHNzb0FjY291bnRJZCxcbiAgICAgICAgICAgIHNzb1JlZ2lvbixcbiAgICAgICAgICAgIHNzb1JvbGVOYW1lLFxuICAgICAgICAgICAgc3NvQ2xpZW50LFxuICAgICAgICAgICAgcHJvZmlsZTogcHJvZmlsZU5hbWUsXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5leHBvcnRzLmZyb21TU08gPSBmcm9tU1NPO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVNTT1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pc1Nzb1Byb2ZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdmFsaWRhdGVTc29Qcm9maWxlXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTc29DcmVkZW50aWFscyA9IGV4cG9ydHMuaXNTc29Qcm9maWxlID0gdm9pZCAwO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzb1wiKTtcbnZhciBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18yID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTc29Qcm9maWxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18yLmlzU3NvUHJvZmlsZTsgfSB9KTtcbmNvbnN0IHJlc29sdmVTc29DcmVkZW50aWFscyA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyBzc29fc3RhcnRfdXJsLCBzc29fYWNjb3VudF9pZCwgc3NvX3Nlc3Npb24sIHNzb19yZWdpb24sIHNzb19yb2xlX25hbWUgfSA9ICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18xLnZhbGlkYXRlU3NvUHJvZmlsZSkoZGF0YSk7XG4gICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18xLmZyb21TU08pKHtcbiAgICAgICAgc3NvU3RhcnRVcmw6IHNzb19zdGFydF91cmwsXG4gICAgICAgIHNzb0FjY291bnRJZDogc3NvX2FjY291bnRfaWQsXG4gICAgICAgIHNzb1Nlc3Npb246IHNzb19zZXNzaW9uLFxuICAgICAgICBzc29SZWdpb246IHNzb19yZWdpb24sXG4gICAgICAgIHNzb1JvbGVOYW1lOiBzc29fcm9sZV9uYW1lLFxuICAgIH0pKCk7XG59O1xuZXhwb3J0cy5yZXNvbHZlU3NvQ3JlZGVudGlhbHMgPSByZXNvbHZlU3NvQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMgPSBleHBvcnRzLmlzU3RhdGljQ3JlZHNQcm9maWxlID0gdm9pZCAwO1xuY29uc3QgaXNTdGF0aWNDcmVkc1Byb2ZpbGUgPSAoYXJnKSA9PiBCb29sZWFuKGFyZykgJiZcbiAgICB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIGFyZy5hd3NfYWNjZXNzX2tleV9pZCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiBhcmcuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5ID09PSBcInN0cmluZ1wiICYmXG4gICAgW1widW5kZWZpbmVkXCIsIFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIGFyZy5hd3Nfc2Vzc2lvbl90b2tlbikgPiAtMTtcbmV4cG9ydHMuaXNTdGF0aWNDcmVkc1Byb2ZpbGUgPSBpc1N0YXRpY0NyZWRzUHJvZmlsZTtcbmNvbnN0IHJlc29sdmVTdGF0aWNDcmVkZW50aWFscyA9IChwcm9maWxlKSA9PiBQcm9taXNlLnJlc29sdmUoe1xuICAgIGFjY2Vzc0tleUlkOiBwcm9maWxlLmF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgIHNlY3JldEFjY2Vzc0tleTogcHJvZmlsZS5hd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgc2Vzc2lvblRva2VuOiBwcm9maWxlLmF3c19zZXNzaW9uX3Rva2VuLFxufSk7XG5leHBvcnRzLnJlc29sdmVTdGF0aWNDcmVkZW50aWFscyA9IHJlc29sdmVTdGF0aWNDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21XZWJUb2tlbiA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmcm9tV2ViVG9rZW4gPSAoaW5pdCkgPT4gKCkgPT4ge1xuICAgIGNvbnN0IHsgcm9sZUFybiwgcm9sZVNlc3Npb25OYW1lLCB3ZWJJZGVudGl0eVRva2VuLCBwcm92aWRlcklkLCBwb2xpY3lBcm5zLCBwb2xpY3ksIGR1cmF0aW9uU2Vjb25kcywgcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHksIH0gPSBpbml0O1xuICAgIGlmICghcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBSb2xlIEFybiAnJHtyb2xlQXJufScgbmVlZHMgdG8gYmUgYXNzdW1lZCB3aXRoIHdlYiBpZGVudGl0eSxgICtcbiAgICAgICAgICAgIGAgYnV0IG5vIHJvbGUgYXNzdW1wdGlvbiBjYWxsYmFjayB3YXMgcHJvdmlkZWQuYCwgZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkoe1xuICAgICAgICBSb2xlQXJuOiByb2xlQXJuLFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6IHJvbGVTZXNzaW9uTmFtZSAhPT0gbnVsbCAmJiByb2xlU2Vzc2lvbk5hbWUgIT09IHZvaWQgMCA/IHJvbGVTZXNzaW9uTmFtZSA6IGBhd3Mtc2RrLWpzLXNlc3Npb24tJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIFdlYklkZW50aXR5VG9rZW46IHdlYklkZW50aXR5VG9rZW4sXG4gICAgICAgIFByb3ZpZGVySWQ6IHByb3ZpZGVySWQsXG4gICAgICAgIFBvbGljeUFybnM6IHBvbGljeUFybnMsXG4gICAgICAgIFBvbGljeTogcG9saWN5LFxuICAgICAgICBEdXJhdGlvblNlY29uZHM6IGR1cmF0aW9uU2Vjb25kcyxcbiAgICB9KTtcbn07XG5leHBvcnRzLmZyb21XZWJUb2tlbiA9IGZyb21XZWJUb2tlbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Ub2tlbkZpbGUgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGZyb21XZWJUb2tlbl8xID0gcmVxdWlyZShcIi4vZnJvbVdlYlRva2VuXCIpO1xuY29uc3QgRU5WX1RPS0VOX0ZJTEUgPSBcIkFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRVwiO1xuY29uc3QgRU5WX1JPTEVfQVJOID0gXCJBV1NfUk9MRV9BUk5cIjtcbmNvbnN0IEVOVl9ST0xFX1NFU1NJT05fTkFNRSA9IFwiQVdTX1JPTEVfU0VTU0lPTl9OQU1FXCI7XG5jb25zdCBmcm9tVG9rZW5GaWxlID0gKGluaXQgPSB7fSkgPT4gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiByZXNvbHZlVG9rZW5GaWxlKGluaXQpO1xufTtcbmV4cG9ydHMuZnJvbVRva2VuRmlsZSA9IGZyb21Ub2tlbkZpbGU7XG5jb25zdCByZXNvbHZlVG9rZW5GaWxlID0gKGluaXQpID0+IHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB3ZWJJZGVudGl0eVRva2VuRmlsZSA9IChfYSA9IGluaXQgPT09IG51bGwgfHwgaW5pdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdC53ZWJJZGVudGl0eVRva2VuRmlsZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvY2Vzcy5lbnZbRU5WX1RPS0VOX0ZJTEVdO1xuICAgIGNvbnN0IHJvbGVBcm4gPSAoX2IgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQucm9sZUFybikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvY2Vzcy5lbnZbRU5WX1JPTEVfQVJOXTtcbiAgICBjb25zdCByb2xlU2Vzc2lvbk5hbWUgPSAoX2MgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQucm9sZVNlc3Npb25OYW1lKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBwcm9jZXNzLmVudltFTlZfUk9MRV9TRVNTSU9OX05BTUVdO1xuICAgIGlmICghd2ViSWRlbnRpdHlUb2tlbkZpbGUgfHwgIXJvbGVBcm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiV2ViIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gbm90IHNwZWNpZmllZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBmcm9tV2ViVG9rZW5fMS5mcm9tV2ViVG9rZW4pKHtcbiAgICAgICAgLi4uaW5pdCxcbiAgICAgICAgd2ViSWRlbnRpdHlUb2tlbjogKDAsIGZzXzEucmVhZEZpbGVTeW5jKSh3ZWJJZGVudGl0eVRva2VuRmlsZSwgeyBlbmNvZGluZzogXCJhc2NpaVwiIH0pLFxuICAgICAgICByb2xlQXJuLFxuICAgICAgICByb2xlU2Vzc2lvbk5hbWUsXG4gICAgfSkoKTtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Ub2tlbkZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVdlYlRva2VuXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzID0gZXhwb3J0cy5pc1dlYklkZW50aXR5UHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfd2ViX2lkZW50aXR5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHlcIik7XG5jb25zdCBpc1dlYklkZW50aXR5UHJvZmlsZSA9IChhcmcpID0+IEJvb2xlYW4oYXJnKSAmJlxuICAgIHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiZcbiAgICB0eXBlb2YgYXJnLndlYl9pZGVudGl0eV90b2tlbl9maWxlID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGFyZy5yb2xlX2FybiA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFtcInVuZGVmaW5lZFwiLCBcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBhcmcucm9sZV9zZXNzaW9uX25hbWUpID4gLTE7XG5leHBvcnRzLmlzV2ViSWRlbnRpdHlQcm9maWxlID0gaXNXZWJJZGVudGl0eVByb2ZpbGU7XG5jb25zdCByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFscyA9IGFzeW5jIChwcm9maWxlLCBvcHRpb25zKSA9PiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl93ZWJfaWRlbnRpdHlfMS5mcm9tVG9rZW5GaWxlKSh7XG4gICAgd2ViSWRlbnRpdHlUb2tlbkZpbGU6IHByb2ZpbGUud2ViX2lkZW50aXR5X3Rva2VuX2ZpbGUsXG4gICAgcm9sZUFybjogcHJvZmlsZS5yb2xlX2FybixcbiAgICByb2xlU2Vzc2lvbk5hbWU6IHByb2ZpbGUucm9sZV9zZXNzaW9uX25hbWUsXG4gICAgcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHk6IG9wdGlvbnMucm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHksXG59KSgpO1xuZXhwb3J0cy5yZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFscyA9IHJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVByb2ZpbGVEYXRhID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2ZVNzb0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlU3NvQ3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVTdGF0aWNDcmVkZW50aWFsc1wiKTtcbmNvbnN0IHJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFsc1wiKTtcbmNvbnN0IHJlc29sdmVQcm9maWxlRGF0YSA9IGFzeW5jIChwcm9maWxlTmFtZSwgcHJvZmlsZXMsIG9wdGlvbnMsIHZpc2l0ZWRQcm9maWxlcyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHByb2ZpbGVzW3Byb2ZpbGVOYW1lXTtcbiAgICBpZiAoT2JqZWN0LmtleXModmlzaXRlZFByb2ZpbGVzKS5sZW5ndGggPiAwICYmICgwLCByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHNfMS5pc1N0YXRpY0NyZWRzUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHNfMS5yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMpKGRhdGEpO1xuICAgIH1cbiAgICBpZiAoKDAsIHJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHNfMS5pc0Fzc3VtZVJvbGVQcm9maWxlKShkYXRhKSkge1xuICAgICAgICByZXR1cm4gKDAsIHJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHNfMS5yZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzKShwcm9maWxlTmFtZSwgcHJvZmlsZXMsIG9wdGlvbnMsIHZpc2l0ZWRQcm9maWxlcyk7XG4gICAgfVxuICAgIGlmICgoMCwgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEuaXNTdGF0aWNDcmVkc1Byb2ZpbGUpKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEucmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzKShkYXRhKTtcbiAgICB9XG4gICAgaWYgKCgwLCByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFsc18xLmlzV2ViSWRlbnRpdHlQcm9maWxlKShkYXRhKSkge1xuICAgICAgICByZXR1cm4gKDAsIHJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzXzEucmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHMpKGRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoKDAsIHJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHNfMS5pc1Byb2Nlc3NQcm9maWxlKShkYXRhKSkge1xuICAgICAgICByZXR1cm4gKDAsIHJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHNfMS5yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzKShvcHRpb25zLCBwcm9maWxlTmFtZSk7XG4gICAgfVxuICAgIGlmICgoMCwgcmVzb2x2ZVNzb0NyZWRlbnRpYWxzXzEuaXNTc29Qcm9maWxlKShkYXRhKSkge1xuICAgICAgICByZXR1cm4gKDAsIHJlc29sdmVTc29DcmVkZW50aWFsc18xLnJlc29sdmVTc29DcmVkZW50aWFscykoZGF0YSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgb3IgcGFyc2VkIGluIHNoYXJlZCBjcmVkZW50aWFscyBmaWxlLmApO1xufTtcbmV4cG9ydHMucmVzb2x2ZVByb2ZpbGVEYXRhID0gcmVzb2x2ZVByb2ZpbGVEYXRhO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUluaSA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgcmVzb2x2ZVByb2ZpbGVEYXRhXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvZmlsZURhdGFcIik7XG5jb25zdCBmcm9tSW5pID0gKGluaXQgPSB7fSkgPT4gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb2ZpbGVzID0gYXdhaXQgKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5wYXJzZUtub3duRmlsZXMpKGluaXQpO1xuICAgIHJldHVybiAoMCwgcmVzb2x2ZVByb2ZpbGVEYXRhXzEucmVzb2x2ZVByb2ZpbGVEYXRhKSgoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KSwgcHJvZmlsZXMsIGluaXQpO1xufTtcbmV4cG9ydHMuZnJvbUluaSA9IGZyb21Jbmk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21JbmlcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVtb3RlUHJvdmlkZXIgPSBleHBvcnRzLkVOVl9JTURTX0RJU0FCTEVEID0gdm9pZCAwO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzXCIpO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmV4cG9ydHMuRU5WX0lNRFNfRElTQUJMRUQgPSBcIkFXU19FQzJfTUVUQURBVEFfRElTQUJMRURcIjtcbmNvbnN0IHJlbW90ZVByb3ZpZGVyID0gKGluaXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuRU5WX0NNRFNfUkVMQVRJVkVfVVJJXSB8fCBwcm9jZXNzLmVudltjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMS5FTlZfQ01EU19GVUxMX1VSSV0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMS5mcm9tQ29udGFpbmVyTWV0YWRhdGEpKGluaXQpO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfSU1EU19ESVNBQkxFRF0pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIkVDMiBJbnN0YW5jZSBNZXRhZGF0YSBTZXJ2aWNlIGFjY2VzcyBkaXNhYmxlZFwiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMS5mcm9tSW5zdGFuY2VNZXRhZGF0YSkoaW5pdCk7XG59O1xuZXhwb3J0cy5yZW1vdGVQcm92aWRlciA9IHJlbW90ZVByb3ZpZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdFByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9lbnZfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWVudlwiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW5pXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmlcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3NcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl93ZWJfaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eVwiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IHJlbW90ZVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9yZW1vdGVQcm92aWRlclwiKTtcbmNvbnN0IGRlZmF1bHRQcm92aWRlciA9IChpbml0ID0ge30pID0+ICgwLCBwcm9wZXJ0eV9wcm92aWRlcl8xLm1lbW9pemUpKCgwLCBwcm9wZXJ0eV9wcm92aWRlcl8xLmNoYWluKSguLi4oaW5pdC5wcm9maWxlIHx8IHByb2Nlc3MuZW52W3NoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5FTlZfUFJPRklMRV0gPyBbXSA6IFsoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9lbnZfMS5mcm9tRW52KSgpXSksICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18xLmZyb21TU08pKGluaXQpLCAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbmlfMS5mcm9tSW5pKShpbml0KSwgKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfcHJvY2Vzc18xLmZyb21Qcm9jZXNzKShpbml0KSwgKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfd2ViX2lkZW50aXR5XzEuZnJvbVRva2VuRmlsZSkoaW5pdCksICgwLCByZW1vdGVQcm92aWRlcl8xLnJlbW90ZVByb3ZpZGVyKShpbml0KSwgYXN5bmMgKCkgPT4ge1xuICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIkNvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gYW55IHByb3ZpZGVyc1wiLCBmYWxzZSk7XG59KSwgKGNyZWRlbnRpYWxzKSA9PiBjcmVkZW50aWFscy5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgY3JlZGVudGlhbHMuZXhwaXJhdGlvbi5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIDwgMzAwMDAwLCAoY3JlZGVudGlhbHMpID0+IGNyZWRlbnRpYWxzLmV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCk7XG5leHBvcnRzLmRlZmF1bHRQcm92aWRlciA9IGRlZmF1bHRQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZGVmYXVsdFByb3ZpZGVyXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJ1bGVTZXQgPSB2b2lkIDA7XG5jb25zdCBGID0gXCJyZXF1aXJlZFwiLCBHID0gXCJ0eXBlXCIsIEggPSBcImZuXCIsIEkgPSBcImFyZ3ZcIiwgSiA9IFwicmVmXCI7XG5jb25zdCBhID0gZmFsc2UsIGIgPSB0cnVlLCBjID0gXCJib29sZWFuRXF1YWxzXCIsIGQgPSBcInRyZWVcIiwgZSA9IFwic3RyaW5nRXF1YWxzXCIsIGYgPSBcInNpZ3Y0XCIsIGcgPSBcInN0c1wiLCBoID0gXCJ1cy1lYXN0LTFcIiwgaSA9IFwiZW5kcG9pbnRcIiwgaiA9IFwiaHR0cHM6Ly9zdHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZmaXh9XCIsIGsgPSBcImVycm9yXCIsIGwgPSBcImdldEF0dHJcIiwgbSA9IHsgW0ZdOiBmYWxzZSwgW0ddOiBcIlN0cmluZ1wiIH0sIG4gPSB7IFtGXTogdHJ1ZSwgXCJkZWZhdWx0XCI6IGZhbHNlLCBbR106IFwiQm9vbGVhblwiIH0sIG8gPSB7IFtKXTogXCJFbmRwb2ludFwiIH0sIHAgPSB7IFtIXTogXCJpc1NldFwiLCBbSV06IFt7IFtKXTogXCJSZWdpb25cIiB9XSB9LCBxID0geyBbSl06IFwiUmVnaW9uXCIgfSwgciA9IHsgW0hdOiBcImF3cy5wYXJ0aXRpb25cIiwgW0ldOiBbcV0sIFwiYXNzaWduXCI6IFwiUGFydGl0aW9uUmVzdWx0XCIgfSwgcyA9IHsgW0pdOiBcIlVzZUZJUFNcIiB9LCB0ID0geyBbSl06IFwiVXNlRHVhbFN0YWNrXCIgfSwgdSA9IHsgXCJ1cmxcIjogXCJodHRwczovL3N0cy5hbWF6b25hd3MuY29tXCIsIFwicHJvcGVydGllc1wiOiB7IFwiYXV0aFNjaGVtZXNcIjogW3sgXCJuYW1lXCI6IGYsIFwic2lnbmluZ05hbWVcIjogZywgXCJzaWduaW5nUmVnaW9uXCI6IGggfV0gfSwgXCJoZWFkZXJzXCI6IHt9IH0sIHYgPSB7fSwgdyA9IHsgXCJjb25kaXRpb25zXCI6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJhd3MtZ2xvYmFsXCJdIH1dLCBbaV06IHUsIFtHXTogaSB9LCB4ID0geyBbSF06IGMsIFtJXTogW3MsIHRydWVdIH0sIHkgPSB7IFtIXTogYywgW0ldOiBbdCwgdHJ1ZV0gfSwgeiA9IHsgW0hdOiBjLCBbSV06IFt0cnVlLCB7IFtIXTogbCwgW0ldOiBbeyBbSl06IFwiUGFydGl0aW9uUmVzdWx0XCIgfSwgXCJzdXBwb3J0c0ZJUFNcIl0gfV0gfSwgQSA9IHsgW0pdOiBcIlBhcnRpdGlvblJlc3VsdFwiIH0sIEIgPSB7IFtIXTogYywgW0ldOiBbdHJ1ZSwgeyBbSF06IGwsIFtJXTogW0EsIFwic3VwcG9ydHNEdWFsU3RhY2tcIl0gfV0gfSwgQyA9IFt7IFtIXTogXCJpc1NldFwiLCBbSV06IFtvXSB9XSwgRCA9IFt4XSwgRSA9IFt5XTtcbmNvbnN0IF9kYXRhID0geyB2ZXJzaW9uOiBcIjEuMFwiLCBwYXJhbWV0ZXJzOiB7IFJlZ2lvbjogbSwgVXNlRHVhbFN0YWNrOiBuLCBVc2VGSVBTOiBuLCBFbmRwb2ludDogbSwgVXNlR2xvYmFsRW5kcG9pbnQ6IG4gfSwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFtIXTogYywgW0ldOiBbeyBbSl06IFwiVXNlR2xvYmFsRW5kcG9pbnRcIiB9LCBiXSB9LCB7IFtIXTogXCJub3RcIiwgW0ldOiBDIH0sIHAsIHIsIHsgW0hdOiBjLCBbSV06IFtzLCBhXSB9LCB7IFtIXTogYywgW0ldOiBbdCwgYV0gfV0sIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJhcC1ub3J0aGVhc3QtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJhcC1zb3V0aC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImFwLXNvdXRoZWFzdC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImFwLXNvdXRoZWFzdC0yXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHcsIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImNhLWNlbnRyYWwtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJldS1jZW50cmFsLTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiZXUtbm9ydGgtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJldS13ZXN0LTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiZXUtd2VzdC0yXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImV1LXdlc3QtM1wiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJzYS1lYXN0LTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIGhdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcInVzLWVhc3QtMlwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJ1cy13ZXN0LTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwidXMtd2VzdC0yXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBqLCBwcm9wZXJ0aWVzOiB7IGF1dGhTY2hlbWVzOiBbeyBuYW1lOiBmLCBzaWduaW5nTmFtZTogZywgc2lnbmluZ1JlZ2lvbjogXCJ7UmVnaW9ufVwiIH1dIH0sIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH1dIH0sIHsgY29uZGl0aW9uczogQywgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogRCwgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBGSVBTIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWRcIiwgW0ddOiBrIH0sIHsgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogRSwgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCBbR106IGsgfSwgeyBlbmRwb2ludDogeyB1cmw6IG8sIHByb3BlcnRpZXM6IHYsIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH1dIH1dIH0sIHsgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3BdLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbcl0sIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt4LCB5XSwgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3osIEJdLCBbR106IGQsIHJ1bGVzOiBbeyBbR106IGQsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9zdHMtZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogdiwgaGVhZGVyczogdiB9LCBbR106IGkgfV0gfV0gfSwgeyBlcnJvcjogXCJGSVBTIGFuZCBEdWFsU3RhY2sgYXJlIGVuYWJsZWQsIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9uZSBvciBib3RoXCIsIFtHXTogayB9XSB9LCB7IGNvbmRpdGlvbnM6IEQsIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt6XSwgW0ddOiBkLCBydWxlczogW3sgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtcImF3cy11cy1nb3ZcIiwgeyBbSF06IGwsIFtJXTogW0EsIFwibmFtZVwiXSB9XSB9XSwgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vc3RzLntSZWdpb259LmFtYXpvbmF3cy5jb21cIiwgcHJvcGVydGllczogdiwgaGVhZGVyczogdiB9LCBbR106IGkgfSwgeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9zdHMtZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogdiwgaGVhZGVyczogdiB9LCBbR106IGkgfV0gfV0gfSwgeyBlcnJvcjogXCJGSVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRklQU1wiLCBbR106IGsgfV0gfSwgeyBjb25kaXRpb25zOiBFLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbQl0sIFtHXTogZCwgcnVsZXM6IFt7IFtHXTogZCwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3N0cy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogdiwgaGVhZGVyczogdiB9LCBbR106IGkgfV0gfV0gfSwgeyBlcnJvcjogXCJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBEdWFsU3RhY2tcIiwgW0ddOiBrIH1dIH0sIHsgW0ddOiBkLCBydWxlczogW3csIHsgZW5kcG9pbnQ6IHsgdXJsOiBqLCBwcm9wZXJ0aWVzOiB2LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9XSB9XSB9XSB9LCB7IGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogTWlzc2luZyBSZWdpb25cIiwgW0ddOiBrIH1dIH1dIH07XG5leHBvcnRzLnJ1bGVTZXQgPSBfZGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IHJ1bGVzZXRfMSA9IHJlcXVpcmUoXCIuL3J1bGVzZXRcIik7XG5jb25zdCBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IChlbmRwb2ludFBhcmFtcywgY29udGV4dCA9IHt9KSA9PiB7XG4gICAgcmV0dXJuICgwLCB1dGlsX2VuZHBvaW50c18xLnJlc29sdmVFbmRwb2ludCkocnVsZXNldF8xLnJ1bGVTZXQsIHtcbiAgICAgICAgZW5kcG9pbnRQYXJhbXM6IGVuZHBvaW50UGFyYW1zLFxuICAgICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHVybF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91cmwtcGFyc2VyXCIpO1xuY29uc3QgdXRpbF9iYXNlNjRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWJhc2U2NFwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXRmOFwiKTtcbmNvbnN0IGVuZHBvaW50UmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXJcIik7XG5jb25zdCBnZXRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4gKHtcbiAgICBhcGlWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICBiYXNlNjREZWNvZGVyOiBjb25maWc/LmJhc2U2NERlY29kZXIgPz8gdXRpbF9iYXNlNjRfMS5mcm9tQmFzZTY0LFxuICAgIGJhc2U2NEVuY29kZXI6IGNvbmZpZz8uYmFzZTY0RW5jb2RlciA/PyB1dGlsX2Jhc2U2NF8xLnRvQmFzZTY0LFxuICAgIGRpc2FibGVIb3N0UHJlZml4OiBjb25maWc/LmRpc2FibGVIb3N0UHJlZml4ID8/IGZhbHNlLFxuICAgIGVuZHBvaW50UHJvdmlkZXI6IGNvbmZpZz8uZW5kcG9pbnRQcm92aWRlciA/PyBlbmRwb2ludFJlc29sdmVyXzEuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIsXG4gICAgbG9nZ2VyOiBjb25maWc/LmxvZ2dlciA/PyBuZXcgc21pdGh5X2NsaWVudF8xLk5vT3BMb2dnZXIoKSxcbiAgICBzZXJ2aWNlSWQ6IGNvbmZpZz8uc2VydmljZUlkID8/IFwiU1RTXCIsXG4gICAgdXJsUGFyc2VyOiBjb25maWc/LnVybFBhcnNlciA/PyB1cmxfcGFyc2VyXzEucGFyc2VVcmwsXG4gICAgdXRmOERlY29kZXI6IGNvbmZpZz8udXRmOERlY29kZXIgPz8gdXRpbF91dGY4XzEuZnJvbVV0ZjgsXG4gICAgdXRmOEVuY29kZXI6IGNvbmZpZz8udXRmOEVuY29kZXIgPz8gdXRpbF91dGY4XzEudG9VdGY4LFxufSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBwYWNrYWdlX2pzb25fMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9wYWNrYWdlLmpzb25cIikpO1xuY29uc3QgZGVmYXVsdFN0c1JvbGVBc3N1bWVyc18xID0gcmVxdWlyZShcIi4vZGVmYXVsdFN0c1JvbGVBc3N1bWVyc1wiKTtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZVwiKTtcbmNvbnN0IGhhc2hfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2hhc2gtbm9kZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5XCIpO1xuY29uc3Qgbm9kZV9jb25maWdfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbmNvbnN0IG5vZGVfaHR0cF9oYW5kbGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbm9kZS1odHRwLWhhbmRsZXJcIik7XG5jb25zdCB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWJvZHktbGVuZ3RoLW5vZGVcIik7XG5jb25zdCB1dGlsX3JldHJ5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1yZXRyeVwiKTtcbmNvbnN0IHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGVcIik7XG5jb25zdCBydW50aW1lQ29uZmlnX3NoYXJlZF8xID0gcmVxdWlyZShcIi4vcnVudGltZUNvbmZpZy5zaGFyZWRcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1kZWZhdWx0cy1tb2RlLW5vZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzIgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IGdldFJ1bnRpbWVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gICAgKDAsIHNtaXRoeV9jbGllbnRfMi5lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uKShwcm9jZXNzLnZlcnNpb24pO1xuICAgIGNvbnN0IGRlZmF1bHRzTW9kZSA9ICgwLCB1dGlsX2RlZmF1bHRzX21vZGVfbm9kZV8xLnJlc29sdmVEZWZhdWx0c01vZGVDb25maWcpKGNvbmZpZyk7XG4gICAgY29uc3QgZGVmYXVsdENvbmZpZ1Byb3ZpZGVyID0gKCkgPT4gZGVmYXVsdHNNb2RlKCkudGhlbihzbWl0aHlfY2xpZW50XzEubG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZSk7XG4gICAgY29uc3QgY2xpZW50U2hhcmVkVmFsdWVzID0gKDAsIHJ1bnRpbWVDb25maWdfc2hhcmVkXzEuZ2V0UnVudGltZUNvbmZpZykoY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5jbGllbnRTaGFyZWRWYWx1ZXMsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgcnVudGltZTogXCJub2RlXCIsXG4gICAgICAgIGRlZmF1bHRzTW9kZSxcbiAgICAgICAgYm9keUxlbmd0aENoZWNrZXI6IGNvbmZpZz8uYm9keUxlbmd0aENoZWNrZXIgPz8gdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEuY2FsY3VsYXRlQm9keUxlbmd0aCxcbiAgICAgICAgY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcjogY29uZmlnPy5jcmVkZW50aWFsRGVmYXVsdFByb3ZpZGVyID8/ICgwLCBkZWZhdWx0U3RzUm9sZUFzc3VtZXJzXzEuZGVjb3JhdGVEZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyKShjcmVkZW50aWFsX3Byb3ZpZGVyX25vZGVfMS5kZWZhdWx0UHJvdmlkZXIpLFxuICAgICAgICBkZWZhdWx0VXNlckFnZW50UHJvdmlkZXI6IGNvbmZpZz8uZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyID8/XG4gICAgICAgICAgICAoMCwgdXRpbF91c2VyX2FnZW50X25vZGVfMS5kZWZhdWx0VXNlckFnZW50KSh7IHNlcnZpY2VJZDogY2xpZW50U2hhcmVkVmFsdWVzLnNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbjogcGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9uIH0pLFxuICAgICAgICBtYXhBdHRlbXB0czogY29uZmlnPy5tYXhBdHRlbXB0cyA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShtaWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9NQVhfQVRURU1QVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHJlZ2lvbjogY29uZmlnPy5yZWdpb24gPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMsIGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMpLFxuICAgICAgICByZXF1ZXN0SGFuZGxlcjogY29uZmlnPy5yZXF1ZXN0SGFuZGxlciA/PyBuZXcgbm9kZV9odHRwX2hhbmRsZXJfMS5Ob2RlSHR0cEhhbmRsZXIoZGVmYXVsdENvbmZpZ1Byb3ZpZGVyKSxcbiAgICAgICAgcmV0cnlNb2RlOiBjb25maWc/LnJldHJ5TW9kZSA/P1xuICAgICAgICAgICAgKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoe1xuICAgICAgICAgICAgICAgIC4uLm1pZGRsZXdhcmVfcmV0cnlfMS5OT0RFX1JFVFJZX01PREVfQ09ORklHX09QVElPTlMsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYXN5bmMgKCkgPT4gKGF3YWl0IGRlZmF1bHRDb25maWdQcm92aWRlcigpKS5yZXRyeU1vZGUgfHwgdXRpbF9yZXRyeV8xLkRFRkFVTFRfUkVUUllfTU9ERSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBzaGEyNTY6IGNvbmZpZz8uc2hhMjU2ID8/IGhhc2hfbm9kZV8xLkhhc2guYmluZChudWxsLCBcInNoYTI1NlwiKSxcbiAgICAgICAgc3RyZWFtQ29sbGVjdG9yOiBjb25maWc/LnN0cmVhbUNvbGxlY3RvciA/PyBub2RlX2h0dHBfaGFuZGxlcl8xLnN0cmVhbUNvbGxlY3RvcixcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IGNvbmZpZz8udXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRFVBTFNUQUNLX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBjb25maWc/LnVzZUZpcHNFbmRwb2ludCA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1VTRV9GSVBTX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IGdldFJ1bnRpbWVDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TVFNDbGllbnQgPSBleHBvcnRzLl9fQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9jb250ZW50X2xlbmd0aF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtY29udGVudC1sZW5ndGhcIik7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9sb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvblwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJldHJ5XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZGtfc3RzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstc3RzXCIpO1xuY29uc3QgbWlkZGxld2FyZV91c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50XCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX0NsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNsaWVudDsgfSB9KTtcbmNvbnN0IEVuZHBvaW50UGFyYW1ldGVyc18xID0gcmVxdWlyZShcIi4vZW5kcG9pbnQvRW5kcG9pbnRQYXJhbWV0ZXJzXCIpO1xuY29uc3QgcnVudGltZUNvbmZpZ18xID0gcmVxdWlyZShcIi4vcnVudGltZUNvbmZpZ1wiKTtcbmNsYXNzIFNUU0NsaWVudCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5DbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18wID0gKDAsIHJ1bnRpbWVDb25maWdfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18xID0gKDAsIEVuZHBvaW50UGFyYW1ldGVyc18xLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMpKF9jb25maWdfMCk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMiA9ICgwLCBjb25maWdfcmVzb2x2ZXJfMS5yZXNvbHZlUmVnaW9uQ29uZmlnKShfY29uZmlnXzEpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzMgPSAoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLnJlc29sdmVFbmRwb2ludENvbmZpZykoX2NvbmZpZ18yKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ180ID0gKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5yZXNvbHZlUmV0cnlDb25maWcpKF9jb25maWdfMyk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNSA9ICgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEucmVzb2x2ZUhvc3RIZWFkZXJDb25maWcpKF9jb25maWdfNCk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNiA9ICgwLCBtaWRkbGV3YXJlX3Nka19zdHNfMS5yZXNvbHZlU3RzQXV0aENvbmZpZykoX2NvbmZpZ181LCB7IHN0c0NsaWVudEN0b3I6IFNUU0NsaWVudCB9KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ183ID0gKDAsIG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xLnJlc29sdmVVc2VyQWdlbnRDb25maWcpKF9jb25maWdfNik7XG4gICAgICAgIHN1cGVyKF9jb25maWdfNyk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX2NvbmZpZ183O1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5nZXRSZXRyeVBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEuZ2V0Q29udGVudExlbmd0aFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEuZ2V0SG9zdEhlYWRlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2xvZ2dlcl8xLmdldExvZ2dlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMS5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50UGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxufVxuZXhwb3J0cy5TVFNDbGllbnQgPSBTVFNDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlR2xvYmFsRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlR2xvYmFsRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoU0FNTFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuQXNzdW1lUm9sZVdpdGhTQU1MUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCBBd3NfcXVlcnlfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3F1ZXJ5XCIpO1xuY2xhc3MgRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkRlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kID0gRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEdldEFjY2Vzc0tleUluZm9Db21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldEFjY2Vzc0tleUluZm9Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuc2VfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IEdldEFjY2Vzc0tleUluZm9Db21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlR2xvYmFsRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlR2xvYmFsRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlR2xvYmFsRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlR2xvYmFsRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBBd3NfcXVlcnlfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3F1ZXJ5XCIpO1xuY2xhc3MgR2V0U2Vzc2lvblRva2VuQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBHZXRTZXNzaW9uVG9rZW5Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0U2Vzc2lvblRva2VuQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5HZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuZGVfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkdldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBHZXRTZXNzaW9uVG9rZW5Db21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1RTID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBBc3N1bWVSb2xlQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvQXNzdW1lUm9sZUNvbW1hbmRcIik7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kXCIpO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRcIik7XG5jb25zdCBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRcIik7XG5jb25zdCBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldENhbGxlcklkZW50aXR5Q29tbWFuZFwiKTtcbmNvbnN0IEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRcIik7XG5jb25zdCBHZXRTZXNzaW9uVG9rZW5Db21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9HZXRTZXNzaW9uVG9rZW5Db21tYW5kXCIpO1xuY29uc3QgU1RTQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9TVFNDbGllbnRcIik7XG5jb25zdCBjb21tYW5kcyA9IHtcbiAgICBBc3N1bWVSb2xlQ29tbWFuZDogQXNzdW1lUm9sZUNvbW1hbmRfMS5Bc3N1bWVSb2xlQ29tbWFuZCxcbiAgICBBc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kOiBBc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kXzEuQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCxcbiAgICBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZDogQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRfMS5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCxcbiAgICBEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQ6IERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZF8xLkRlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCxcbiAgICBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZDogR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRfMS5HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCxcbiAgICBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQ6IEdldENhbGxlcklkZW50aXR5Q29tbWFuZF8xLkdldENhbGxlcklkZW50aXR5Q29tbWFuZCxcbiAgICBHZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kOiBHZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kXzEuR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCxcbiAgICBHZXRTZXNzaW9uVG9rZW5Db21tYW5kOiBHZXRTZXNzaW9uVG9rZW5Db21tYW5kXzEuR2V0U2Vzc2lvblRva2VuQ29tbWFuZCxcbn07XG5jbGFzcyBTVFMgZXh0ZW5kcyBTVFNDbGllbnRfMS5TVFNDbGllbnQge1xufVxuZXhwb3J0cy5TVFMgPSBTVFM7XG4oMCwgc21pdGh5X2NsaWVudF8xLmNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQpKGNvbW1hbmRzLCBTVFMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bc3N1bWVSb2xlQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRTZXNzaW9uVG9rZW5Db21tYW5kXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbW9kZWxzXzBcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVjb3JhdGVEZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyID0gZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkgPSBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lciA9IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHRTdHNSb2xlQXNzdW1lcnNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRTdHNSb2xlQXNzdW1lcnNcIik7XG5jb25zdCBTVFNDbGllbnRfMSA9IHJlcXVpcmUoXCIuL1NUU0NsaWVudFwiKTtcbmNvbnN0IGdldEN1c3RvbWl6YWJsZVN0c0NsaWVudEN0b3IgPSAoYmFzZUN0b3IsIGN1c3RvbWl6YXRpb25zKSA9PiB7XG4gICAgaWYgKCFjdXN0b21pemF0aW9ucylcbiAgICAgICAgcmV0dXJuIGJhc2VDdG9yO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGNsYXNzIEN1c3RvbWl6YWJsZVNUU0NsaWVudCBleHRlbmRzIGJhc2VDdG9yIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjdXN0b21pemF0aW9uIG9mIGN1c3RvbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZShjdXN0b21pemF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG59O1xuY29uc3QgZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gKHN0c09wdGlvbnMgPSB7fSwgc3RzUGx1Z2lucykgPT4gKDAsIGRlZmF1bHRTdHNSb2xlQXNzdW1lcnNfMS5nZXREZWZhdWx0Um9sZUFzc3VtZXIpKHN0c09wdGlvbnMsIGdldEN1c3RvbWl6YWJsZVN0c0NsaWVudEN0b3IoU1RTQ2xpZW50XzEuU1RTQ2xpZW50LCBzdHNQbHVnaW5zKSk7XG5leHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lciA9IGdldERlZmF1bHRSb2xlQXNzdW1lcjtcbmNvbnN0IGdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IChzdHNPcHRpb25zID0ge30sIHN0c1BsdWdpbnMpID0+ICgwLCBkZWZhdWx0U3RzUm9sZUFzc3VtZXJzXzEuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5KShzdHNPcHRpb25zLCBnZXRDdXN0b21pemFibGVTdHNDbGllbnRDdG9yKFNUU0NsaWVudF8xLlNUU0NsaWVudCwgc3RzUGx1Z2lucykpO1xuZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkgPSBnZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHk7XG5jb25zdCBkZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSAocHJvdmlkZXIpID0+IChpbnB1dCkgPT4gcHJvdmlkZXIoe1xuICAgIHJvbGVBc3N1bWVyOiAoMCwgZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXIpKGlucHV0KSxcbiAgICByb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTogKDAsIGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5KShpbnB1dCksXG4gICAgLi4uaW5wdXQsXG59KTtcbmV4cG9ydHMuZGVjb3JhdGVEZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyID0gZGVjb3JhdGVEZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1RTU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TVFNDbGllbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU1RTXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kZWZhdWx0Um9sZUFzc3VtZXJzXCIpLCBleHBvcnRzKTtcbnZhciBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi9tb2RlbHMvU1RTU2VydmljZUV4Y2VwdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNUU1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbUluaSA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF9zdHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtc3RzXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9pbmlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaVwiKTtcbmNvbnN0IGZyb21JbmkgPSAoaW5pdCA9IHt9KSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfaW5pXzEuZnJvbUluaSkoe1xuICAgICAgICAuLi5pbml0LFxuICAgICAgICByb2xlQXNzdW1lcjogKF9hID0gaW5pdC5yb2xlQXNzdW1lcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIGNsaWVudF9zdHNfMS5nZXREZWZhdWx0Um9sZUFzc3VtZXIpKGluaXQuY2xpZW50Q29uZmlnLCBpbml0LmNsaWVudFBsdWdpbnMpLFxuICAgICAgICByb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTogKF9iID0gaW5pdC5yb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKDAsIGNsaWVudF9zdHNfMS5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpKGluaXQuY2xpZW50Q29uZmlnLCBpbml0LmNsaWVudFBsdWdpbnMpLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZnJvbUluaSA9IGZyb21Jbmk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tSW5zdGFuY2VNZXRhZGF0YSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kc1wiKTtcbmNvbnN0IGZyb21JbnN0YW5jZU1ldGFkYXRhID0gKGluaXQpID0+ICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMS5mcm9tSW5zdGFuY2VNZXRhZGF0YSkoaW5pdCk7XG5leHBvcnRzLmZyb21JbnN0YW5jZU1ldGFkYXRhID0gZnJvbUluc3RhbmNlTWV0YWRhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tTm9kZVByb3ZpZGVyQ2hhaW4gPSB2b2lkIDA7XG5jb25zdCBjbGllbnRfc3RzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXN0c1wiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZVwiKTtcbmNvbnN0IGZyb21Ob2RlUHJvdmlkZXJDaGFpbiA9IChpbml0ID0ge30pID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9ub2RlXzEuZGVmYXVsdFByb3ZpZGVyKSh7XG4gICAgICAgIC4uLmluaXQsXG4gICAgICAgIHJvbGVBc3N1bWVyOiAoX2EgPSBpbml0LnJvbGVBc3N1bWVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgY2xpZW50X3N0c18xLmdldERlZmF1bHRSb2xlQXNzdW1lcikoaW5pdC5jbGllbnRDb25maWcsIGluaXQuY2xpZW50UGx1Z2lucyksXG4gICAgICAgIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5OiAoX2IgPSBpbml0LnJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoMCwgY2xpZW50X3N0c18xLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSkoaW5pdC5jbGllbnRDb25maWcsIGluaXQuY2xpZW50UGx1Z2lucyksXG4gICAgfSk7XG59O1xuZXhwb3J0cy5mcm9tTm9kZVByb3ZpZGVyQ2hhaW4gPSBmcm9tTm9kZVByb3ZpZGVyQ2hhaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tUHJvY2VzcyA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfcHJvY2Vzc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2Vzc1wiKTtcbmNvbnN0IGZyb21Qcm9jZXNzID0gKGluaXQpID0+ICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Byb2Nlc3NfMS5mcm9tUHJvY2VzcykoaW5pdCk7XG5leHBvcnRzLmZyb21Qcm9jZXNzID0gZnJvbVByb2Nlc3M7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tU1NPID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3Nzb18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zc29cIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvXCIpO1xuY29uc3QgZnJvbVNTTyA9IChpbml0ID0ge30pID0+ICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Nzb18xLmZyb21TU08pKHsgLi4ueyBzc29DbGllbnQ6IGluaXQuY2xpZW50Q29uZmlnID8gbmV3IGNsaWVudF9zc29fMS5TU09DbGllbnQoaW5pdC5jbGllbnRDb25maWcpIDogdW5kZWZpbmVkIH0sIC4uLmluaXQgfSk7XG5leHBvcnRzLmZyb21TU08gPSBmcm9tU1NPO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVRlbXBvcmFyeUNyZWRlbnRpYWxzID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3N0c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zdHNcIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgZnJvbVRlbXBvcmFyeUNyZWRlbnRpYWxzID0gKG9wdGlvbnMpID0+IHtcbiAgICBsZXQgc3RzQ2xpZW50O1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zLnBhcmFtcywgUm9sZVNlc3Npb25OYW1lOiAoX2EgPSBvcHRpb25zLnBhcmFtcy5Sb2xlU2Vzc2lvbk5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiYXdzLXNkay1qcy1cIiArIERhdGUubm93KCkgfTtcbiAgICAgICAgaWYgKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5TZXJpYWxOdW1iZXIpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5tZmFDb2RlUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFRlbXBvcmFyeSBjcmVkZW50aWFsIHJlcXVpcmVzIG11bHRpLWZhY3RvciBhdXRoZW50aWNhdGlvbixgICsgYCBidXQgbm8gTUZBIGNvZGUgY2FsbGJhY2sgd2FzIHByb3ZpZGVkLmAsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcy5Ub2tlbkNvZGUgPSBhd2FpdCBvcHRpb25zLm1mYUNvZGVQcm92aWRlcihwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuU2VyaWFsTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0c0NsaWVudClcbiAgICAgICAgICAgIHN0c0NsaWVudCA9IG5ldyBjbGllbnRfc3RzXzEuU1RTQ2xpZW50KHsgLi4ub3B0aW9ucy5jbGllbnRDb25maWcsIGNyZWRlbnRpYWxzOiBvcHRpb25zLm1hc3RlckNyZWRlbnRpYWxzIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy5jbGllbnRQbHVnaW5zKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBvcHRpb25zLmNsaWVudFBsdWdpbnMpIHtcbiAgICAgICAgICAgICAgICBzdHNDbGllbnQubWlkZGxld2FyZVN0YWNrLnVzZShwbHVnaW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgQ3JlZGVudGlhbHMgfSA9IGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBjbGllbnRfc3RzXzEuQXNzdW1lUm9sZUNvbW1hbmQocGFyYW1zKSk7XG4gICAgICAgIGlmICghQ3JlZGVudGlhbHMgfHwgIUNyZWRlbnRpYWxzLkFjY2Vzc0tleUlkIHx8ICFDcmVkZW50aWFscy5TZWNyZXRBY2Nlc3NLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgSW52YWxpZCByZXNwb25zZSBmcm9tIFNUUy5hc3N1bWVSb2xlIGNhbGwgd2l0aCByb2xlICR7cGFyYW1zLlJvbGVBcm59YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiBDcmVkZW50aWFscy5BY2Nlc3NLZXlJZCxcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogQ3JlZGVudGlhbHMuU2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBDcmVkZW50aWFscy5TZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBDcmVkZW50aWFscy5FeHBpcmF0aW9uLFxuICAgICAgICB9O1xuICAgIH07XG59O1xuZXhwb3J0cy5mcm9tVGVtcG9yYXJ5Q3JlZGVudGlhbHMgPSBmcm9tVGVtcG9yYXJ5Q3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tVG9rZW5GaWxlID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3N0c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zdHNcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5XCIpO1xuY29uc3QgZnJvbVRva2VuRmlsZSA9IChpbml0ID0ge30pID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xLmZyb21Ub2tlbkZpbGUpKHtcbiAgICAgICAgLi4uaW5pdCxcbiAgICAgICAgcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHk6IChfYSA9IGluaXQucm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgwLCBjbGllbnRfc3RzXzEuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5KShpbml0LmNsaWVudENvbmZpZywgaW5pdC5jbGllbnRQbHVnaW5zKSxcbiAgICB9KTtcbn07XG5leHBvcnRzLmZyb21Ub2tlbkZpbGUgPSBmcm9tVG9rZW5GaWxlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVdlYlRva2VuID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3N0c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zdHNcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5XCIpO1xuY29uc3QgZnJvbVdlYlRva2VuID0gKGluaXQpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xLmZyb21XZWJUb2tlbikoe1xuICAgICAgICAuLi5pbml0LFxuICAgICAgICByb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTogKF9hID0gaW5pdC5yb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIGNsaWVudF9zdHNfMS5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpKGluaXQuY2xpZW50Q29uZmlnLCBpbml0LmNsaWVudFBsdWdpbnMpLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZnJvbVdlYlRva2VuID0gZnJvbVdlYlRva2VuO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tQ29nbml0b0lkZW50aXR5XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Db2duaXRvSWRlbnRpdHlQb29sXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Db250YWluZXJNZXRhZGF0YVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tRW52XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21JbmlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbUluc3RhbmNlTWV0YWRhdGFcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbU5vZGVQcm92aWRlckNoYWluXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Qcm9jZXNzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21TU09cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVRlbXBvcmFyeUNyZWRlbnRpYWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Ub2tlbkZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVdlYlRva2VuXCIpLCBleHBvcnRzKTtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIEFsZ29yaXRobUlkOiAoKSA9PiBBbGdvcml0aG1JZCxcbiAgRW5kcG9pbnRVUkxTY2hlbWU6ICgpID0+IEVuZHBvaW50VVJMU2NoZW1lLFxuICBGaWVsZFBvc2l0aW9uOiAoKSA9PiBGaWVsZFBvc2l0aW9uLFxuICBIdHRwQXBpS2V5QXV0aExvY2F0aW9uOiAoKSA9PiBIdHRwQXBpS2V5QXV0aExvY2F0aW9uLFxuICBIdHRwQXV0aExvY2F0aW9uOiAoKSA9PiBIdHRwQXV0aExvY2F0aW9uLFxuICBJbmlTZWN0aW9uVHlwZTogKCkgPT4gSW5pU2VjdGlvblR5cGUsXG4gIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2w6ICgpID0+IFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wsXG4gIFNNSVRIWV9DT05URVhUX0tFWTogKCkgPT4gU01JVEhZX0NPTlRFWFRfS0VZLFxuICBnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbjogKCkgPT4gZ2V0RGVmYXVsdENsaWVudENvbmZpZ3VyYXRpb24sXG4gIHJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZzogKCkgPT4gcmVzb2x2ZURlZmF1bHRSdW50aW1lQ29uZmlnXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2F1dGgvYXV0aC50c1xudmFyIEh0dHBBdXRoTG9jYXRpb24gPSAvKiBAX19QVVJFX18gKi8gKChIdHRwQXV0aExvY2F0aW9uMikgPT4ge1xuICBIdHRwQXV0aExvY2F0aW9uMltcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gIEh0dHBBdXRoTG9jYXRpb24yW1wiUVVFUllcIl0gPSBcInF1ZXJ5XCI7XG4gIHJldHVybiBIdHRwQXV0aExvY2F0aW9uMjtcbn0pKEh0dHBBdXRoTG9jYXRpb24gfHwge30pO1xuXG4vLyBzcmMvYXV0aC9IdHRwQXBpS2V5QXV0aC50c1xudmFyIEh0dHBBcGlLZXlBdXRoTG9jYXRpb24gPSAvKiBAX19QVVJFX18gKi8gKChIdHRwQXBpS2V5QXV0aExvY2F0aW9uMikgPT4ge1xuICBIdHRwQXBpS2V5QXV0aExvY2F0aW9uMltcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gIEh0dHBBcGlLZXlBdXRoTG9jYXRpb24yW1wiUVVFUllcIl0gPSBcInF1ZXJ5XCI7XG4gIHJldHVybiBIdHRwQXBpS2V5QXV0aExvY2F0aW9uMjtcbn0pKEh0dHBBcGlLZXlBdXRoTG9jYXRpb24gfHwge30pO1xuXG4vLyBzcmMvZW5kcG9pbnQudHNcbnZhciBFbmRwb2ludFVSTFNjaGVtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVuZHBvaW50VVJMU2NoZW1lMikgPT4ge1xuICBFbmRwb2ludFVSTFNjaGVtZTJbXCJIVFRQXCJdID0gXCJodHRwXCI7XG4gIEVuZHBvaW50VVJMU2NoZW1lMltcIkhUVFBTXCJdID0gXCJodHRwc1wiO1xuICByZXR1cm4gRW5kcG9pbnRVUkxTY2hlbWUyO1xufSkoRW5kcG9pbnRVUkxTY2hlbWUgfHwge30pO1xuXG4vLyBzcmMvZXh0ZW5zaW9ucy9jaGVja3N1bS50c1xudmFyIEFsZ29yaXRobUlkID0gLyogQF9fUFVSRV9fICovICgoQWxnb3JpdGhtSWQyKSA9PiB7XG4gIEFsZ29yaXRobUlkMltcIk1ENVwiXSA9IFwibWQ1XCI7XG4gIEFsZ29yaXRobUlkMltcIkNSQzMyXCJdID0gXCJjcmMzMlwiO1xuICBBbGdvcml0aG1JZDJbXCJDUkMzMkNcIl0gPSBcImNyYzMyY1wiO1xuICBBbGdvcml0aG1JZDJbXCJTSEExXCJdID0gXCJzaGExXCI7XG4gIEFsZ29yaXRobUlkMltcIlNIQTI1NlwiXSA9IFwic2hhMjU2XCI7XG4gIHJldHVybiBBbGdvcml0aG1JZDI7XG59KShBbGdvcml0aG1JZCB8fCB7fSk7XG52YXIgZ2V0Q2hlY2tzdW1Db25maWd1cmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocnVudGltZUNvbmZpZykgPT4ge1xuICBjb25zdCBjaGVja3N1bUFsZ29yaXRobXMgPSBbXTtcbiAgaWYgKHJ1bnRpbWVDb25maWcuc2hhMjU2ICE9PSB2b2lkIDApIHtcbiAgICBjaGVja3N1bUFsZ29yaXRobXMucHVzaCh7XG4gICAgICBhbGdvcml0aG1JZDogKCkgPT4gXCJzaGEyNTZcIiAvKiBTSEEyNTYgKi8sXG4gICAgICBjaGVja3N1bUNvbnN0cnVjdG9yOiAoKSA9PiBydW50aW1lQ29uZmlnLnNoYTI1NlxuICAgIH0pO1xuICB9XG4gIGlmIChydW50aW1lQ29uZmlnLm1kNSAhPSB2b2lkIDApIHtcbiAgICBjaGVja3N1bUFsZ29yaXRobXMucHVzaCh7XG4gICAgICBhbGdvcml0aG1JZDogKCkgPT4gXCJtZDVcIiAvKiBNRDUgKi8sXG4gICAgICBjaGVja3N1bUNvbnN0cnVjdG9yOiAoKSA9PiBydW50aW1lQ29uZmlnLm1kNVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgX2NoZWNrc3VtQWxnb3JpdGhtczogY2hlY2tzdW1BbGdvcml0aG1zLFxuICAgIGFkZENoZWNrc3VtQWxnb3JpdGhtKGFsZ28pIHtcbiAgICAgIHRoaXMuX2NoZWNrc3VtQWxnb3JpdGhtcy5wdXNoKGFsZ28pO1xuICAgIH0sXG4gICAgY2hlY2tzdW1BbGdvcml0aG1zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrc3VtQWxnb3JpdGhtcztcbiAgICB9XG4gIH07XG59LCBcImdldENoZWNrc3VtQ29uZmlndXJhdGlvblwiKTtcbnZhciByZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY2xpZW50Q29uZmlnKSA9PiB7XG4gIGNvbnN0IHJ1bnRpbWVDb25maWcgPSB7fTtcbiAgY2xpZW50Q29uZmlnLmNoZWNrc3VtQWxnb3JpdGhtcygpLmZvckVhY2goKGNoZWNrc3VtQWxnb3JpdGhtKSA9PiB7XG4gICAgcnVudGltZUNvbmZpZ1tjaGVja3N1bUFsZ29yaXRobS5hbGdvcml0aG1JZCgpXSA9IGNoZWNrc3VtQWxnb3JpdGhtLmNoZWNrc3VtQ29uc3RydWN0b3IoKTtcbiAgfSk7XG4gIHJldHVybiBydW50aW1lQ29uZmlnO1xufSwgXCJyZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnXCIpO1xuXG4vLyBzcmMvZXh0ZW5zaW9ucy9kZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbi50c1xudmFyIGdldERlZmF1bHRDbGllbnRDb25maWd1cmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocnVudGltZUNvbmZpZykgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmdldENoZWNrc3VtQ29uZmlndXJhdGlvbihydW50aW1lQ29uZmlnKVxuICB9O1xufSwgXCJnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvblwiKTtcbnZhciByZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWcpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnKGNvbmZpZylcbiAgfTtcbn0sIFwicmVzb2x2ZURlZmF1bHRSdW50aW1lQ29uZmlnXCIpO1xuXG4vLyBzcmMvaHR0cC50c1xudmFyIEZpZWxkUG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZFBvc2l0aW9uMikgPT4ge1xuICBGaWVsZFBvc2l0aW9uMltGaWVsZFBvc2l0aW9uMltcIkhFQURFUlwiXSA9IDBdID0gXCJIRUFERVJcIjtcbiAgRmllbGRQb3NpdGlvbjJbRmllbGRQb3NpdGlvbjJbXCJUUkFJTEVSXCJdID0gMV0gPSBcIlRSQUlMRVJcIjtcbiAgcmV0dXJuIEZpZWxkUG9zaXRpb24yO1xufSkoRmllbGRQb3NpdGlvbiB8fCB7fSk7XG5cbi8vIHNyYy9taWRkbGV3YXJlLnRzXG52YXIgU01JVEhZX0NPTlRFWFRfS0VZID0gXCJfX3NtaXRoeV9jb250ZXh0XCI7XG5cbi8vIHNyYy9wcm9maWxlLnRzXG52YXIgSW5pU2VjdGlvblR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChJbmlTZWN0aW9uVHlwZTIpID0+IHtcbiAgSW5pU2VjdGlvblR5cGUyW1wiUFJPRklMRVwiXSA9IFwicHJvZmlsZVwiO1xuICBJbmlTZWN0aW9uVHlwZTJbXCJTU09fU0VTU0lPTlwiXSA9IFwic3NvLXNlc3Npb25cIjtcbiAgSW5pU2VjdGlvblR5cGUyW1wiU0VSVklDRVNcIl0gPSBcInNlcnZpY2VzXCI7XG4gIHJldHVybiBJbmlTZWN0aW9uVHlwZTI7XG59KShJbmlTZWN0aW9uVHlwZSB8fCB7fSk7XG5cbi8vIHNyYy90cmFuc2Zlci50c1xudmFyIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSAvKiBAX19QVVJFX18gKi8gKChSZXF1ZXN0SGFuZGxlclByb3RvY29sMikgPT4ge1xuICBSZXF1ZXN0SGFuZGxlclByb3RvY29sMltcIkhUVFBfMF85XCJdID0gXCJodHRwLzAuOVwiO1xuICBSZXF1ZXN0SGFuZGxlclByb3RvY29sMltcIkhUVFBfMV8wXCJdID0gXCJodHRwLzEuMFwiO1xuICBSZXF1ZXN0SGFuZGxlclByb3RvY29sMltcIlREU184XzBcIl0gPSBcInRkcy84LjBcIjtcbiAgcmV0dXJuIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2wyO1xufSkoUmVxdWVzdEhhbmRsZXJQcm90b2NvbCB8fCB7fSk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBIdHRwQXV0aExvY2F0aW9uLFxuICBIdHRwQXBpS2V5QXV0aExvY2F0aW9uLFxuICBFbmRwb2ludFVSTFNjaGVtZSxcbiAgQWxnb3JpdGhtSWQsXG4gIGdldERlZmF1bHRDbGllbnRDb25maWd1cmF0aW9uLFxuICByZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcsXG4gIEZpZWxkUG9zaXRpb24sXG4gIFNNSVRIWV9DT05URVhUX0tFWSxcbiAgSW5pU2VjdGlvblR5cGUsXG4gIFJlcXVlc3RIYW5kbGVyUHJvdG9jb2xcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBGaWVsZDogKCkgPT4gRmllbGQsXG4gIEZpZWxkczogKCkgPT4gRmllbGRzLFxuICBIdHRwUmVxdWVzdDogKCkgPT4gSHR0cFJlcXVlc3QsXG4gIEh0dHBSZXNwb25zZTogKCkgPT4gSHR0cFJlc3BvbnNlLFxuICBnZXRIdHRwSGFuZGxlckV4dGVuc2lvbkNvbmZpZ3VyYXRpb246ICgpID0+IGdldEh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvbixcbiAgaXNWYWxpZEhvc3RuYW1lOiAoKSA9PiBpc1ZhbGlkSG9zdG5hbWUsXG4gIHJlc29sdmVIdHRwSGFuZGxlclJ1bnRpbWVDb25maWc6ICgpID0+IHJlc29sdmVIdHRwSGFuZGxlclJ1bnRpbWVDb25maWdcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvZXh0ZW5zaW9ucy9odHRwRXh0ZW5zaW9uQ29uZmlndXJhdGlvbi50c1xudmFyIGdldEh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJ1bnRpbWVDb25maWcpID0+IHtcbiAgbGV0IGh0dHBIYW5kbGVyID0gcnVudGltZUNvbmZpZy5odHRwSGFuZGxlcjtcbiAgcmV0dXJuIHtcbiAgICBzZXRIdHRwSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICBodHRwSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgfSxcbiAgICBodHRwSGFuZGxlcigpIHtcbiAgICAgIHJldHVybiBodHRwSGFuZGxlcjtcbiAgICB9LFxuICAgIHVwZGF0ZUh0dHBDbGllbnRDb25maWcoa2V5LCB2YWx1ZSkge1xuICAgICAgaHR0cEhhbmRsZXIudXBkYXRlSHR0cENsaWVudENvbmZpZyhrZXksIHZhbHVlKTtcbiAgICB9LFxuICAgIGh0dHBIYW5kbGVyQ29uZmlncygpIHtcbiAgICAgIHJldHVybiBodHRwSGFuZGxlci5odHRwSGFuZGxlckNvbmZpZ3MoKTtcbiAgICB9XG4gIH07XG59LCBcImdldEh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvblwiKTtcbnZhciByZXNvbHZlSHR0cEhhbmRsZXJSdW50aW1lQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaHR0cEhhbmRsZXJFeHRlbnNpb25Db25maWd1cmF0aW9uKSA9PiB7XG4gIHJldHVybiB7XG4gICAgaHR0cEhhbmRsZXI6IGh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvbi5odHRwSGFuZGxlcigpXG4gIH07XG59LCBcInJlc29sdmVIdHRwSGFuZGxlclJ1bnRpbWVDb25maWdcIik7XG5cbi8vIHNyYy9GaWVsZC50c1xudmFyIGltcG9ydF90eXBlcyA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xudmFyIF9GaWVsZCA9IGNsYXNzIF9GaWVsZCB7XG4gIGNvbnN0cnVjdG9yKHsgbmFtZSwga2luZCA9IGltcG9ydF90eXBlcy5GaWVsZFBvc2l0aW9uLkhFQURFUiwgdmFsdWVzID0gW10gfSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5raW5kID0ga2luZDtcbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgfVxuICAvKipcbiAgICogQXBwZW5kcyBhIHZhbHVlIHRvIHRoZSBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhcHBlbmQuXG4gICAqL1xuICBhZGQodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogT3ZlcndyaXRlIGV4aXN0aW5nIGZpZWxkIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlcyBUaGUgbmV3IGZpZWxkIHZhbHVlcy5cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBtYXRjaGluZyBlbnRyaWVzIGZyb20gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHJlbW92ZS5cbiAgICovXG4gIHJlbW92ZSh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yge0BsaW5rIEZpZWxkfS5cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IHYuaW5jbHVkZXMoXCIsXCIpIHx8IHYuaW5jbHVkZXMoXCIgXCIpID8gYFwiJHt2fVwiYCA6IHYpLmpvaW4oXCIsIFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHN0cmluZyB2YWx1ZXMgYXMgYSBsaXN0XG4gICAqXG4gICAqIEByZXR1cm5zIFZhbHVlcyBpbiB7QGxpbmsgRmllbGR9IGFzIGEgbGlzdC5cbiAgICovXG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn07XG5fX25hbWUoX0ZpZWxkLCBcIkZpZWxkXCIpO1xudmFyIEZpZWxkID0gX0ZpZWxkO1xuXG4vLyBzcmMvRmllbGRzLnRzXG52YXIgX0ZpZWxkcyA9IGNsYXNzIF9GaWVsZHMge1xuICBjb25zdHJ1Y3Rvcih7IGZpZWxkcyA9IFtdLCBlbmNvZGluZyA9IFwidXRmLThcIiB9KSB7XG4gICAgdGhpcy5lbnRyaWVzID0ge307XG4gICAgZmllbGRzLmZvckVhY2godGhpcy5zZXRGaWVsZC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBlbnRyeSBmb3IgYSB7QGxpbmsgRmllbGR9IG5hbWUuIFRoZSBgbmFtZWBcbiAgICogYXR0cmlidXRlIHdpbGwgYmUgdXNlZCB0byBrZXkgdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCBUaGUge0BsaW5rIEZpZWxkfSB0byBzZXQuXG4gICAqL1xuICBzZXRGaWVsZChmaWVsZCkge1xuICAgIHRoaXMuZW50cmllc1tmaWVsZC5uYW1lLnRvTG93ZXJDYXNlKCldID0gZmllbGQ7XG4gIH1cbiAgLyoqXG4gICAqICBSZXRyaWV2ZSB7QGxpbmsgRmllbGR9IGVudHJ5IGJ5IG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB7QGxpbmsgRmllbGR9IGVudHJ5XG4gICAqICB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIEZpZWxkfSBpZiBpdCBleGlzdHMuXG4gICAqL1xuICBnZXRGaWVsZChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICB9XG4gIC8qKlxuICAgKiBEZWxldGUgZW50cnkgZnJvbSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBlbnRyeSB0byBkZWxldGUuXG4gICAqL1xuICByZW1vdmVGaWVsZChuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZW50cmllc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICB9XG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgc3BlY2lmaWMgdHlwZXMgb2YgZmllbGRzLlxuICAgKiBVc2VkIHRvIGdyYWIgYWxsIGhlYWRlcnMgb3IgYWxsIHRyYWlsZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ga2luZCB7QGxpbmsgRmllbGRQb3NpdGlvbn0gb2YgZW50cmllcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMgVGhlIHtAbGluayBGaWVsZH0gZW50cmllcyB3aXRoIHRoZSBzcGVjaWZpZWRcbiAgICogIHtAbGluayBGaWVsZFBvc2l0aW9ufS5cbiAgICovXG4gIGdldEJ5VHlwZShraW5kKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5lbnRyaWVzKS5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5raW5kID09PSBraW5kKTtcbiAgfVxufTtcbl9fbmFtZShfRmllbGRzLCBcIkZpZWxkc1wiKTtcbnZhciBGaWVsZHMgPSBfRmllbGRzO1xuXG4vLyBzcmMvaHR0cFJlcXVlc3QudHNcbnZhciBfSHR0cFJlcXVlc3QgPSBjbGFzcyBfSHR0cFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiO1xuICAgIHRoaXMuaG9zdG5hbWUgPSBvcHRpb25zLmhvc3RuYW1lIHx8IFwibG9jYWxob3N0XCI7XG4gICAgdGhpcy5wb3J0ID0gb3B0aW9ucy5wb3J0O1xuICAgIHRoaXMucXVlcnkgPSBvcHRpb25zLnF1ZXJ5IHx8IHt9O1xuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICB0aGlzLmJvZHkgPSBvcHRpb25zLmJvZHk7XG4gICAgdGhpcy5wcm90b2NvbCA9IG9wdGlvbnMucHJvdG9jb2wgPyBvcHRpb25zLnByb3RvY29sLnNsaWNlKC0xKSAhPT0gXCI6XCIgPyBgJHtvcHRpb25zLnByb3RvY29sfTpgIDogb3B0aW9ucy5wcm90b2NvbCA6IFwiaHR0cHM6XCI7XG4gICAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoID8gb3B0aW9ucy5wYXRoLmNoYXJBdCgwKSAhPT0gXCIvXCIgPyBgLyR7b3B0aW9ucy5wYXRofWAgOiBvcHRpb25zLnBhdGggOiBcIi9cIjtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLnBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZDtcbiAgICB0aGlzLmZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudDtcbiAgfVxuICBzdGF0aWMgaXNJbnN0YW5jZShyZXF1ZXN0KSB7XG4gICAgaWYgKCFyZXF1ZXN0KVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3Q7XG4gICAgcmV0dXJuIFwibWV0aG9kXCIgaW4gcmVxICYmIFwicHJvdG9jb2xcIiBpbiByZXEgJiYgXCJob3N0bmFtZVwiIGluIHJlcSAmJiBcInBhdGhcIiBpbiByZXEgJiYgdHlwZW9mIHJlcVtcInF1ZXJ5XCJdID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZXFbXCJoZWFkZXJzXCJdID09PSBcIm9iamVjdFwiO1xuICB9XG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBfSHR0cFJlcXVlc3Qoe1xuICAgICAgLi4udGhpcyxcbiAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzIH1cbiAgICB9KTtcbiAgICBpZiAoY2xvbmVkLnF1ZXJ5KVxuICAgICAgY2xvbmVkLnF1ZXJ5ID0gY2xvbmVRdWVyeShjbG9uZWQucXVlcnkpO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn07XG5fX25hbWUoX0h0dHBSZXF1ZXN0LCBcIkh0dHBSZXF1ZXN0XCIpO1xudmFyIEh0dHBSZXF1ZXN0ID0gX0h0dHBSZXF1ZXN0O1xuZnVuY3Rpb24gY2xvbmVRdWVyeShxdWVyeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocXVlcnkpLnJlZHVjZSgoY2FycnksIHBhcmFtTmFtZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtID0gcXVlcnlbcGFyYW1OYW1lXTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY2FycnksXG4gICAgICBbcGFyYW1OYW1lXTogQXJyYXkuaXNBcnJheShwYXJhbSkgPyBbLi4ucGFyYW1dIDogcGFyYW1cbiAgICB9O1xuICB9LCB7fSk7XG59XG5fX25hbWUoY2xvbmVRdWVyeSwgXCJjbG9uZVF1ZXJ5XCIpO1xuXG4vLyBzcmMvaHR0cFJlc3BvbnNlLnRzXG52YXIgX0h0dHBSZXNwb25zZSA9IGNsYXNzIF9IdHRwUmVzcG9uc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5zdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgIHRoaXMucmVhc29uID0gb3B0aW9ucy5yZWFzb247XG4gICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuYm9keSA9IG9wdGlvbnMuYm9keTtcbiAgfVxuICBzdGF0aWMgaXNJbnN0YW5jZShyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlO1xuICAgIHJldHVybiB0eXBlb2YgcmVzcC5zdGF0dXNDb2RlID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByZXNwLmhlYWRlcnMgPT09IFwib2JqZWN0XCI7XG4gIH1cbn07XG5fX25hbWUoX0h0dHBSZXNwb25zZSwgXCJIdHRwUmVzcG9uc2VcIik7XG52YXIgSHR0cFJlc3BvbnNlID0gX0h0dHBSZXNwb25zZTtcblxuLy8gc3JjL2lzVmFsaWRIb3N0bmFtZS50c1xuZnVuY3Rpb24gaXNWYWxpZEhvc3RuYW1lKGhvc3RuYW1lKSB7XG4gIGNvbnN0IGhvc3RQYXR0ZXJuID0gL15bYS16MC05XVthLXowLTlcXC5cXC1dKlthLXowLTldJC87XG4gIHJldHVybiBob3N0UGF0dGVybi50ZXN0KGhvc3RuYW1lKTtcbn1cbl9fbmFtZShpc1ZhbGlkSG9zdG5hbWUsIFwiaXNWYWxpZEhvc3RuYW1lXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SHR0cEhhbmRsZXJFeHRlbnNpb25Db25maWd1cmF0aW9uLFxuICByZXNvbHZlSHR0cEhhbmRsZXJSdW50aW1lQ29uZmlnLFxuICBGaWVsZCxcbiAgRmllbGRzLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cFJlc3BvbnNlLFxuICBpc1ZhbGlkSG9zdG5hbWVcbn0pO1xuXG4iLAogICAgIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4vKiBnbG9iYWwgZ2xvYmFsLCBkZWZpbmUsIFN5c3RlbSwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG52YXIgX19leHRlbmRzO1xyXG52YXIgX19hc3NpZ247XHJcbnZhciBfX3Jlc3Q7XHJcbnZhciBfX2RlY29yYXRlO1xyXG52YXIgX19wYXJhbTtcclxudmFyIF9fbWV0YWRhdGE7XHJcbnZhciBfX2F3YWl0ZXI7XHJcbnZhciBfX2dlbmVyYXRvcjtcclxudmFyIF9fZXhwb3J0U3RhcjtcclxudmFyIF9fdmFsdWVzO1xyXG52YXIgX19yZWFkO1xyXG52YXIgX19zcHJlYWQ7XHJcbnZhciBfX3NwcmVhZEFycmF5cztcclxudmFyIF9fYXdhaXQ7XHJcbnZhciBfX2FzeW5jR2VuZXJhdG9yO1xyXG52YXIgX19hc3luY0RlbGVnYXRvcjtcclxudmFyIF9fYXN5bmNWYWx1ZXM7XHJcbnZhciBfX21ha2VUZW1wbGF0ZU9iamVjdDtcclxudmFyIF9faW1wb3J0U3RhcjtcclxudmFyIF9faW1wb3J0RGVmYXVsdDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0O1xyXG52YXIgX19jcmVhdGVCaW5kaW5nO1xyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgIHZhciByb290ID0gdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB0aGlzID09PSBcIm9iamVjdFwiID8gdGhpcyA6IHt9O1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgZGVmaW5lKFwidHNsaWJcIiwgW1wiZXhwb3J0c1wiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihleHBvcnRzKSkpOyB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihtb2R1bGUuZXhwb3J0cykpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cywgcHJldmlvdXMpIHtcclxuICAgICAgICBpZiAoZXhwb3J0cyAhPT0gcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGlkLCB2KSB7IHJldHVybiBleHBvcnRzW2lkXSA9IHByZXZpb3VzID8gcHJldmlvdXMoaWQsIHYpIDogdjsgfTtcclxuICAgIH1cclxufSlcclxuKGZ1bmN0aW9uIChleHBvcnRlcikge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jlc3QgPSBmdW5jdGlvbiAocywgZSkge1xyXG4gICAgICAgIHZhciB0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZGVjb3JhdGUgPSBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgICAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgICAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX21ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdGVyID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgICAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgX19jcmVhdGVCaW5kaW5nID0gZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgICAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgICAgIG9bazJdID0gbVtrXTtcclxuICAgIH07XHJcblxyXG4gICAgX19leHBvcnRTdGFyID0gZnVuY3Rpb24gKG0sIGV4cG9ydHMpIHtcclxuICAgICAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fdmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3JlYWQgPSBmdW5jdGlvbiAobywgbikge1xyXG4gICAgICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgICAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXQgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgICAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgIH1cclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0RlbGVnYXRvciA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIGksIHA7XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNWYWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgICAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgICAgIHJldHVybiBjb29rZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0U3RhciA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnREZWZhdWx0ID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICAgICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBleHBvcnRlcihcIl9fZXh0ZW5kc1wiLCBfX2V4dGVuZHMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Fzc2lnblwiLCBfX2Fzc2lnbik7XHJcbiAgICBleHBvcnRlcihcIl9fcmVzdFwiLCBfX3Jlc3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2RlY29yYXRlXCIsIF9fZGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3BhcmFtXCIsIF9fcGFyYW0pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ldGFkYXRhXCIsIF9fbWV0YWRhdGEpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0ZXJcIiwgX19hd2FpdGVyKTtcclxuICAgIGV4cG9ydGVyKFwiX19nZW5lcmF0b3JcIiwgX19nZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2V4cG9ydFN0YXJcIiwgX19leHBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19jcmVhdGVCaW5kaW5nXCIsIF9fY3JlYXRlQmluZGluZyk7XHJcbiAgICBleHBvcnRlcihcIl9fdmFsdWVzXCIsIF9fdmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZWFkXCIsIF9fcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkXCIsIF9fc3ByZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheXNcIiwgX19zcHJlYWRBcnJheXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0XCIsIF9fYXdhaXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jR2VuZXJhdG9yXCIsIF9fYXN5bmNHZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jRGVsZWdhdG9yXCIsIF9fYXN5bmNEZWxlZ2F0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jVmFsdWVzXCIsIF9fYXN5bmNWYWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ha2VUZW1wbGF0ZU9iamVjdFwiLCBfX21ha2VUZW1wbGF0ZU9iamVjdCk7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0U3RhclwiLCBfX2ltcG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydERlZmF1bHRcIiwgX19pbXBvcnREZWZhdWx0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZEdldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZFNldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KTtcclxufSk7XHJcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1BWF9IQVNIQUJMRV9MRU5HVEggPSBleHBvcnRzLklOSVQgPSBleHBvcnRzLktFWSA9IGV4cG9ydHMuRElHRVNUX0xFTkdUSCA9IGV4cG9ydHMuQkxPQ0tfU0laRSA9IHZvaWQgMDtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMuQkxPQ0tfU0laRSA9IDY0O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0cy5ESUdFU1RfTEVOR1RIID0gMzI7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnRzLktFWSA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgMHg0MjhhMmY5OCxcbiAgICAweDcxMzc0NDkxLFxuICAgIDB4YjVjMGZiY2YsXG4gICAgMHhlOWI1ZGJhNSxcbiAgICAweDM5NTZjMjViLFxuICAgIDB4NTlmMTExZjEsXG4gICAgMHg5MjNmODJhNCxcbiAgICAweGFiMWM1ZWQ1LFxuICAgIDB4ZDgwN2FhOTgsXG4gICAgMHgxMjgzNWIwMSxcbiAgICAweDI0MzE4NWJlLFxuICAgIDB4NTUwYzdkYzMsXG4gICAgMHg3MmJlNWQ3NCxcbiAgICAweDgwZGViMWZlLFxuICAgIDB4OWJkYzA2YTcsXG4gICAgMHhjMTliZjE3NCxcbiAgICAweGU0OWI2OWMxLFxuICAgIDB4ZWZiZTQ3ODYsXG4gICAgMHgwZmMxOWRjNixcbiAgICAweDI0MGNhMWNjLFxuICAgIDB4MmRlOTJjNmYsXG4gICAgMHg0YTc0ODRhYSxcbiAgICAweDVjYjBhOWRjLFxuICAgIDB4NzZmOTg4ZGEsXG4gICAgMHg5ODNlNTE1MixcbiAgICAweGE4MzFjNjZkLFxuICAgIDB4YjAwMzI3YzgsXG4gICAgMHhiZjU5N2ZjNyxcbiAgICAweGM2ZTAwYmYzLFxuICAgIDB4ZDVhNzkxNDcsXG4gICAgMHgwNmNhNjM1MSxcbiAgICAweDE0MjkyOTY3LFxuICAgIDB4MjdiNzBhODUsXG4gICAgMHgyZTFiMjEzOCxcbiAgICAweDRkMmM2ZGZjLFxuICAgIDB4NTMzODBkMTMsXG4gICAgMHg2NTBhNzM1NCxcbiAgICAweDc2NmEwYWJiLFxuICAgIDB4ODFjMmM5MmUsXG4gICAgMHg5MjcyMmM4NSxcbiAgICAweGEyYmZlOGExLFxuICAgIDB4YTgxYTY2NGIsXG4gICAgMHhjMjRiOGI3MCxcbiAgICAweGM3NmM1MWEzLFxuICAgIDB4ZDE5MmU4MTksXG4gICAgMHhkNjk5MDYyNCxcbiAgICAweGY0MGUzNTg1LFxuICAgIDB4MTA2YWEwNzAsXG4gICAgMHgxOWE0YzExNixcbiAgICAweDFlMzc2YzA4LFxuICAgIDB4Mjc0ODc3NGMsXG4gICAgMHgzNGIwYmNiNSxcbiAgICAweDM5MWMwY2IzLFxuICAgIDB4NGVkOGFhNGEsXG4gICAgMHg1YjljY2E0ZixcbiAgICAweDY4MmU2ZmYzLFxuICAgIDB4NzQ4ZjgyZWUsXG4gICAgMHg3OGE1NjM2ZixcbiAgICAweDg0Yzg3ODE0LFxuICAgIDB4OGNjNzAyMDgsXG4gICAgMHg5MGJlZmZmYSxcbiAgICAweGE0NTA2Y2ViLFxuICAgIDB4YmVmOWEzZjcsXG4gICAgMHhjNjcxNzhmMlxuXSk7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnRzLklOSVQgPSBbXG4gICAgMHg2YTA5ZTY2NyxcbiAgICAweGJiNjdhZTg1LFxuICAgIDB4M2M2ZWYzNzIsXG4gICAgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLFxuICAgIDB4OWIwNTY4OGMsXG4gICAgMHgxZjgzZDlhYixcbiAgICAweDViZTBjZDE5XG5dO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0cy5NQVhfSEFTSEFCTEVfTEVOR1RIID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SYXdTaGEyNTYgPSB2b2lkIDA7XG52YXIgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmF3U2hhMjU2ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJhd1NoYTI1NigpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEludDMyQXJyYXkuZnJvbShjb25zdGFudHNfMS5JTklUKTtcbiAgICAgICAgdGhpcy50ZW1wID0gbmV3IEludDMyQXJyYXkoNjQpO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmJ5dGVzSGFzaGVkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBSYXdTaGEyNTYucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0ZWQgdG8gdXBkYXRlIGFuIGFscmVhZHkgZmluaXNoZWQgaGFzaC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICAgICAgdmFyIGJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIHRoaXMuYnl0ZXNIYXNoZWQgKz0gYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuYnl0ZXNIYXNoZWQgKiA4ID4gY29uc3RhbnRzXzEuTUFYX0hBU0hBQkxFX0xFTkdUSCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGhhc2ggbW9yZSB0aGFuIDJeNTMgLSAxIGJpdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXSA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICBieXRlTGVuZ3RoLS07XG4gICAgICAgICAgICBpZiAodGhpcy5idWZmZXJMZW5ndGggPT09IGNvbnN0YW50c18xLkJMT0NLX1NJWkUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJhd1NoYTI1Ni5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHZhciBiaXRzSGFzaGVkID0gdGhpcy5ieXRlc0hhc2hlZCAqIDg7XG4gICAgICAgICAgICB2YXIgYnVmZmVyVmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlci5idWZmZXIsIHRoaXMuYnVmZmVyLmJ5dGVPZmZzZXQsIHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgdmFyIHVuZGVjb3JhdGVkTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICAgICAgICBidWZmZXJWaWV3LnNldFVpbnQ4KHRoaXMuYnVmZmVyTGVuZ3RoKyssIDB4ODApO1xuICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBmaW5hbCBibG9jayBoYXMgZW5vdWdoIHJvb20gZm9yIHRoZSBoYXNoZWQgbGVuZ3RoXG4gICAgICAgICAgICBpZiAodW5kZWNvcmF0ZWRMZW5ndGggJSBjb25zdGFudHNfMS5CTE9DS19TSVpFID49IGNvbnN0YW50c18xLkJMT0NLX1NJWkUgLSA4KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuYnVmZmVyTGVuZ3RoOyBpIDwgY29uc3RhbnRzXzEuQkxPQ0tfU0laRTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlclZpZXcuc2V0VWludDgoaSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFzaEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmJ1ZmZlckxlbmd0aDsgaSA8IGNvbnN0YW50c18xLkJMT0NLX1NJWkUgLSA4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWZmZXJWaWV3LnNldFVpbnQ4KGksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyVmlldy5zZXRVaW50MzIoY29uc3RhbnRzXzEuQkxPQ0tfU0laRSAtIDgsIE1hdGguZmxvb3IoYml0c0hhc2hlZCAvIDB4MTAwMDAwMDAwKSwgdHJ1ZSk7XG4gICAgICAgICAgICBidWZmZXJWaWV3LnNldFVpbnQzMihjb25zdGFudHNfMS5CTE9DS19TSVpFIC0gNCwgYml0c0hhc2hlZCk7XG4gICAgICAgICAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSB2YWx1ZSBpbiBzdGF0ZSBpcyBsaXR0bGUtZW5kaWFuIHJhdGhlciB0aGFuIGJpZy1lbmRpYW4sIHNvIGZsaXBcbiAgICAgICAgLy8gZWFjaCB3b3JkIGludG8gYSBuZXcgVWludDhBcnJheVxuICAgICAgICB2YXIgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoY29uc3RhbnRzXzEuRElHRVNUX0xFTkdUSCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaSAqIDRdID0gKHRoaXMuc3RhdGVbaV0gPj4+IDI0KSAmIDB4ZmY7XG4gICAgICAgICAgICBvdXRbaSAqIDQgKyAxXSA9ICh0aGlzLnN0YXRlW2ldID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgICAgb3V0W2kgKiA0ICsgMl0gPSAodGhpcy5zdGF0ZVtpXSA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgICAgb3V0W2kgKiA0ICsgM10gPSAodGhpcy5zdGF0ZVtpXSA+Pj4gMCkgJiAweGZmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbiAgICBSYXdTaGEyNTYucHJvdG90eXBlLmhhc2hCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGJ1ZmZlciA9IF9hLmJ1ZmZlciwgc3RhdGUgPSBfYS5zdGF0ZTtcbiAgICAgICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdLCBzdGF0ZTEgPSBzdGF0ZVsxXSwgc3RhdGUyID0gc3RhdGVbMl0sIHN0YXRlMyA9IHN0YXRlWzNdLCBzdGF0ZTQgPSBzdGF0ZVs0XSwgc3RhdGU1ID0gc3RhdGVbNV0sIHN0YXRlNiA9IHN0YXRlWzZdLCBzdGF0ZTcgPSBzdGF0ZVs3XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdGFudHNfMS5CTE9DS19TSVpFOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBbaV0gPVxuICAgICAgICAgICAgICAgICAgICAoKGJ1ZmZlcltpICogNF0gJiAweGZmKSA8PCAyNCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgKChidWZmZXJbaSAqIDQgKyAxXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAoKGJ1ZmZlcltpICogNCArIDJdICYgMHhmZikgPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlcltpICogNCArIDNdICYgMHhmZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdSA9IHRoaXMudGVtcFtpIC0gMl07XG4gICAgICAgICAgICAgICAgdmFyIHQxXzEgPSAoKHUgPj4+IDE3KSB8ICh1IDw8IDE1KSkgXiAoKHUgPj4+IDE5KSB8ICh1IDw8IDEzKSkgXiAodSA+Pj4gMTApO1xuICAgICAgICAgICAgICAgIHUgPSB0aGlzLnRlbXBbaSAtIDE1XTtcbiAgICAgICAgICAgICAgICB2YXIgdDJfMSA9ICgodSA+Pj4gNykgfCAodSA8PCAyNSkpIF4gKCh1ID4+PiAxOCkgfCAodSA8PCAxNCkpIF4gKHUgPj4+IDMpO1xuICAgICAgICAgICAgICAgIHRoaXMudGVtcFtpXSA9XG4gICAgICAgICAgICAgICAgICAgICgodDFfMSArIHRoaXMudGVtcFtpIC0gN10pIHwgMCkgKyAoKHQyXzEgKyB0aGlzLnRlbXBbaSAtIDE2XSkgfCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0MSA9ICgoKCgoKHN0YXRlNCA+Pj4gNikgfCAoc3RhdGU0IDw8IDI2KSkgXlxuICAgICAgICAgICAgICAgICgoc3RhdGU0ID4+PiAxMSkgfCAoc3RhdGU0IDw8IDIxKSkgXlxuICAgICAgICAgICAgICAgICgoc3RhdGU0ID4+PiAyNSkgfCAoc3RhdGU0IDw8IDcpKSkgK1xuICAgICAgICAgICAgICAgICgoc3RhdGU0ICYgc3RhdGU1KSBeICh+c3RhdGU0ICYgc3RhdGU2KSkpIHxcbiAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgKChzdGF0ZTcgKyAoKGNvbnN0YW50c18xLktFWVtpXSArIHRoaXMudGVtcFtpXSkgfCAwKSkgfCAwKSkgfFxuICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICB2YXIgdDIgPSAoKCgoc3RhdGUwID4+PiAyKSB8IChzdGF0ZTAgPDwgMzApKSBeXG4gICAgICAgICAgICAgICAgKChzdGF0ZTAgPj4+IDEzKSB8IChzdGF0ZTAgPDwgMTkpKSBeXG4gICAgICAgICAgICAgICAgKChzdGF0ZTAgPj4+IDIyKSB8IChzdGF0ZTAgPDwgMTApKSkgK1xuICAgICAgICAgICAgICAgICgoc3RhdGUwICYgc3RhdGUxKSBeIChzdGF0ZTAgJiBzdGF0ZTIpIF4gKHN0YXRlMSAmIHN0YXRlMikpKSB8XG4gICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgIHN0YXRlNyA9IHN0YXRlNjtcbiAgICAgICAgICAgIHN0YXRlNiA9IHN0YXRlNTtcbiAgICAgICAgICAgIHN0YXRlNSA9IHN0YXRlNDtcbiAgICAgICAgICAgIHN0YXRlNCA9IChzdGF0ZTMgKyB0MSkgfCAwO1xuICAgICAgICAgICAgc3RhdGUzID0gc3RhdGUyO1xuICAgICAgICAgICAgc3RhdGUyID0gc3RhdGUxO1xuICAgICAgICAgICAgc3RhdGUxID0gc3RhdGUwO1xuICAgICAgICAgICAgc3RhdGUwID0gKHQxICsgdDIpIHwgMDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZVswXSArPSBzdGF0ZTA7XG4gICAgICAgIHN0YXRlWzFdICs9IHN0YXRlMTtcbiAgICAgICAgc3RhdGVbMl0gKz0gc3RhdGUyO1xuICAgICAgICBzdGF0ZVszXSArPSBzdGF0ZTM7XG4gICAgICAgIHN0YXRlWzRdICs9IHN0YXRlNDtcbiAgICAgICAgc3RhdGVbNV0gKz0gc3RhdGU1O1xuICAgICAgICBzdGF0ZVs2XSArPSBzdGF0ZTY7XG4gICAgICAgIHN0YXRlWzddICs9IHN0YXRlNztcbiAgICB9O1xuICAgIHJldHVybiBSYXdTaGEyNTY7XG59KCkpO1xuZXhwb3J0cy5SYXdTaGEyNTYgPSBSYXdTaGEyNTY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SYXdTaGEyNTYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9VdGY4ID0gZXhwb3J0cy5mcm9tVXRmOCA9IHZvaWQgMDtcbmNvbnN0IGZyb21VdGY4ID0gKGlucHV0KSA9PiB7XG4gICAgY29uc3QgYnl0ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5wdXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAodmFsdWUgPCAweDgwKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA8IDB4ODAwKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKCh2YWx1ZSA+PiA2KSB8IDBiMTEwMDAwMDAsICh2YWx1ZSAmIDBiMTExMTExKSB8IDBiMTAwMDAwMDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGkgKyAxIDwgaW5wdXQubGVuZ3RoICYmICh2YWx1ZSAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAoaW5wdXQuY2hhckNvZGVBdChpICsgMSkgJiAweGZjMDApID09PSAweGRjMDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN1cnJvZ2F0ZVBhaXIgPSAweDEwMDAwICsgKCh2YWx1ZSAmIDBiMTExMTExMTExMSkgPDwgMTApICsgKGlucHV0LmNoYXJDb2RlQXQoKytpKSAmIDBiMTExMTExMTExMSk7XG4gICAgICAgICAgICBieXRlcy5wdXNoKChzdXJyb2dhdGVQYWlyID4+IDE4KSB8IDBiMTExMTAwMDAsICgoc3Vycm9nYXRlUGFpciA+PiAxMikgJiAwYjExMTExMSkgfCAwYjEwMDAwMDAwLCAoKHN1cnJvZ2F0ZVBhaXIgPj4gNikgJiAwYjExMTExMSkgfCAwYjEwMDAwMDAwLCAoc3Vycm9nYXRlUGFpciAmIDBiMTExMTExKSB8IDBiMTAwMDAwMDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnl0ZXMucHVzaCgodmFsdWUgPj4gMTIpIHwgMGIxMTEwMDAwMCwgKCh2YWx1ZSA+PiA2KSAmIDBiMTExMTExKSB8IDBiMTAwMDAwMDAsICh2YWx1ZSAmIDBiMTExMTExKSB8IDBiMTAwMDAwMDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oYnl0ZXMpO1xufTtcbmV4cG9ydHMuZnJvbVV0ZjggPSBmcm9tVXRmODtcbmNvbnN0IHRvVXRmOCA9IChpbnB1dCkgPT4ge1xuICAgIGxldCBkZWNvZGVkID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5wdXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgYnl0ZSA9IGlucHV0W2ldO1xuICAgICAgICBpZiAoYnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGRlY29kZWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgwYjExMDAwMDAwIDw9IGJ5dGUgJiYgYnl0ZSA8IDBiMTExMDAwMDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRCeXRlID0gaW5wdXRbKytpXTtcbiAgICAgICAgICAgIGRlY29kZWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGJ5dGUgJiAwYjExMTExKSA8PCA2KSB8IChuZXh0Qnl0ZSAmIDBiMTExMTExKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoMGIxMTExMDAwMCA8PSBieXRlICYmIGJ5dGUgPCAwYjEwMTEwMTEwMSkge1xuICAgICAgICAgICAgY29uc3Qgc3Vycm9nYXRlUGFpciA9IFtieXRlLCBpbnB1dFsrK2ldLCBpbnB1dFsrK2ldLCBpbnB1dFsrK2ldXTtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSBcIiVcIiArIHN1cnJvZ2F0ZVBhaXIubWFwKChieXRlVmFsdWUpID0+IGJ5dGVWYWx1ZS50b1N0cmluZygxNikpLmpvaW4oXCIlXCIpO1xuICAgICAgICAgICAgZGVjb2RlZCArPSBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWNvZGVkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChieXRlICYgMGIxMTExKSA8PCAxMikgfCAoKGlucHV0WysraV0gJiAwYjExMTExMSkgPDwgNikgfCAoaW5wdXRbKytpXSAmIDBiMTExMTExKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZWQ7XG59O1xuZXhwb3J0cy50b1V0ZjggPSB0b1V0Zjg7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1V0ZjggPSBleHBvcnRzLmZyb21VdGY4ID0gdm9pZCAwO1xuZnVuY3Rpb24gZnJvbVV0ZjgoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGlucHV0KTtcbn1cbmV4cG9ydHMuZnJvbVV0ZjggPSBmcm9tVXRmODtcbmZ1bmN0aW9uIHRvVXRmOChpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKS5kZWNvZGUoaW5wdXQpO1xufVxuZXhwb3J0cy50b1V0ZjggPSB0b1V0Zjg7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1V0ZjggPSBleHBvcnRzLmZyb21VdGY4ID0gdm9pZCAwO1xuY29uc3QgcHVyZUpzXzEgPSByZXF1aXJlKFwiLi9wdXJlSnNcIik7XG5jb25zdCB3aGF0d2dFbmNvZGluZ0FwaV8xID0gcmVxdWlyZShcIi4vd2hhdHdnRW5jb2RpbmdBcGlcIik7XG5jb25zdCBmcm9tVXRmOCA9IChpbnB1dCkgPT4gdHlwZW9mIFRleHRFbmNvZGVyID09PSBcImZ1bmN0aW9uXCIgPyAoMCwgd2hhdHdnRW5jb2RpbmdBcGlfMS5mcm9tVXRmOCkoaW5wdXQpIDogKDAsIHB1cmVKc18xLmZyb21VdGY4KShpbnB1dCk7XG5leHBvcnRzLmZyb21VdGY4ID0gZnJvbVV0Zjg7XG5jb25zdCB0b1V0ZjggPSAoaW5wdXQpID0+IHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gXCJmdW5jdGlvblwiID8gKDAsIHdoYXR3Z0VuY29kaW5nQXBpXzEudG9VdGY4KShpbnB1dCkgOiAoMCwgcHVyZUpzXzEudG9VdGY4KShpbnB1dCk7XG5leHBvcnRzLnRvVXRmOCA9IHRvVXRmODtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udmVydFRvQnVmZmVyID0gdm9pZCAwO1xudmFyIHV0aWxfdXRmOF9icm93c2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC11dGY4LWJyb3dzZXJcIik7XG4vLyBRdWljayBwb2x5ZmlsbFxudmFyIGZyb21VdGY4ID0gdHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBCdWZmZXIuZnJvbVxuICAgID8gZnVuY3Rpb24gKGlucHV0KSB7IHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgXCJ1dGY4XCIpOyB9XG4gICAgOiB1dGlsX3V0ZjhfYnJvd3Nlcl8xLmZyb21VdGY4O1xuZnVuY3Rpb24gY29udmVydFRvQnVmZmVyKGRhdGEpIHtcbiAgICAvLyBBbHJlYWR5IGEgVWludDgsIGRvIG5vdGhpbmdcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZnJvbVV0ZjgoZGF0YSk7XG4gICAgfVxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCAvIFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG59XG5leHBvcnRzLmNvbnZlcnRUb0J1ZmZlciA9IGNvbnZlcnRUb0J1ZmZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnZlcnRUb0J1ZmZlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20gSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRW1wdHlEYXRhID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNFbXB0eURhdGEoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJ5dGVMZW5ndGggPT09IDA7XG59XG5leHBvcnRzLmlzRW1wdHlEYXRhID0gaXNFbXB0eURhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0VtcHR5RGF0YS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20gSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm51bVRvVWludDggPSB2b2lkIDA7XG5mdW5jdGlvbiBudW1Ub1VpbnQ4KG51bSkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShbXG4gICAgICAgIChudW0gJiAweGZmMDAwMDAwKSA+PiAyNCxcbiAgICAgICAgKG51bSAmIDB4MDBmZjAwMDApID4+IDE2LFxuICAgICAgICAobnVtICYgMHgwMDAwZmYwMCkgPj4gOCxcbiAgICAgICAgbnVtICYgMHgwMDAwMDBmZixcbiAgICBdKTtcbn1cbmV4cG9ydHMubnVtVG9VaW50OCA9IG51bVRvVWludDg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1Ub1VpbnQ4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudWludDMyQXJyYXlGcm9tID0gdm9pZCAwO1xuLy8gSUUgMTEgZG9lcyBub3Qgc3VwcG9ydCBBcnJheS5mcm9tLCBzbyB3ZSBkbyBpdCBtYW51YWxseVxuZnVuY3Rpb24gdWludDMyQXJyYXlGcm9tKGFfbG9va1VwVGFibGUpIHtcbiAgICBpZiAoIVVpbnQzMkFycmF5LmZyb20pIHtcbiAgICAgICAgdmFyIHJldHVybl9hcnJheSA9IG5ldyBVaW50MzJBcnJheShhX2xvb2tVcFRhYmxlLmxlbmd0aCk7XG4gICAgICAgIHZhciBhX2luZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGFfaW5kZXggPCBhX2xvb2tVcFRhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuX2FycmF5W2FfaW5kZXhdID0gYV9sb29rVXBUYWJsZVthX2luZGV4XTtcbiAgICAgICAgICAgIGFfaW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dXJuX2FycmF5O1xuICAgIH1cbiAgICByZXR1cm4gVWludDMyQXJyYXkuZnJvbShhX2xvb2tVcFRhYmxlKTtcbn1cbmV4cG9ydHMudWludDMyQXJyYXlGcm9tID0gdWludDMyQXJyYXlGcm9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dWludDMyQXJyYXlGcm9tLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudWludDMyQXJyYXlGcm9tID0gZXhwb3J0cy5udW1Ub1VpbnQ4ID0gZXhwb3J0cy5pc0VtcHR5RGF0YSA9IGV4cG9ydHMuY29udmVydFRvQnVmZmVyID0gdm9pZCAwO1xudmFyIGNvbnZlcnRUb0J1ZmZlcl8xID0gcmVxdWlyZShcIi4vY29udmVydFRvQnVmZmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29udmVydFRvQnVmZmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb252ZXJ0VG9CdWZmZXJfMS5jb252ZXJ0VG9CdWZmZXI7IH0gfSk7XG52YXIgaXNFbXB0eURhdGFfMSA9IHJlcXVpcmUoXCIuL2lzRW1wdHlEYXRhXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFbXB0eURhdGFcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzRW1wdHlEYXRhXzEuaXNFbXB0eURhdGE7IH0gfSk7XG52YXIgbnVtVG9VaW50OF8xID0gcmVxdWlyZShcIi4vbnVtVG9VaW50OFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51bVRvVWludDhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bVRvVWludDhfMS5udW1Ub1VpbnQ4OyB9IH0pO1xudmFyIHVpbnQzMkFycmF5RnJvbV8xID0gcmVxdWlyZShcIi4vdWludDMyQXJyYXlGcm9tXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidWludDMyQXJyYXlGcm9tXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1aW50MzJBcnJheUZyb21fMS51aW50MzJBcnJheUZyb207IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TaGEyNTYgPSB2b2lkIDA7XG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnZhciBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbnZhciBSYXdTaGEyNTZfMSA9IHJlcXVpcmUoXCIuL1Jhd1NoYTI1NlwiKTtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiQGF3cy1jcnlwdG8vdXRpbFwiKTtcbnZhciBTaGEyNTYgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2hhMjU2KHNlY3JldCkge1xuICAgICAgICB0aGlzLnNlY3JldCA9IHNlY3JldDtcbiAgICAgICAgdGhpcy5oYXNoID0gbmV3IFJhd1NoYTI1Nl8xLlJhd1NoYTI1NigpO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICAgIFNoYTI1Ni5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHRvSGFzaCkge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5pc0VtcHR5RGF0YSkodG9IYXNoKSB8fCB0aGlzLmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaGFzaC51cGRhdGUoKDAsIHV0aWxfMS5jb252ZXJ0VG9CdWZmZXIpKHRvSGFzaCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyogVGhpcyBzeW5jaHJvbm91cyBtZXRob2Qga2VlcHMgY29tcGF0aWJpbGl0eVxuICAgICAqIHdpdGggdGhlIHYyIGF3cy1zZGsuXG4gICAgICovXG4gICAgU2hhMjU2LnByb3RvdHlwZS5kaWdlc3RTeW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdXRlcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm91dGVyLmZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdXRlci51cGRhdGUodGhpcy5oYXNoLmRpZ2VzdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dGVyLmRpZ2VzdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2guZGlnZXN0KCk7XG4gICAgfTtcbiAgICAvKiBUaGUgdW5kZXJseWluZyBkaWdlc3QgbWV0aG9kIGhlcmUgaXMgc3luY2hyb25vdXMuXG4gICAgICogVG8ga2VlcCB0aGUgc2FtZSBpbnRlcmZhY2Ugd2l0aCB0aGUgb3RoZXIgaGFzaCBmdW5jdGlvbnNcbiAgICAgKiB0aGUgZGVmYXVsdCBpcyB0byBleHBvc2UgdGhpcyBhcyBhbiBhc3luYyBtZXRob2QuXG4gICAgICogSG93ZXZlciwgaXQgY2FuIHNvbWV0aW1lcyBiZSB1c2VmdWwgdG8gaGF2ZSBhIHN5bmMgbWV0aG9kLlxuICAgICAqL1xuICAgIFNoYTI1Ni5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmRpZ2VzdFN5bmMoKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTaGEyNTYucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc2ggPSBuZXcgUmF3U2hhMjU2XzEuUmF3U2hhMjU2KCk7XG4gICAgICAgIGlmICh0aGlzLnNlY3JldCkge1xuICAgICAgICAgICAgdGhpcy5vdXRlciA9IG5ldyBSYXdTaGEyNTZfMS5SYXdTaGEyNTYoKTtcbiAgICAgICAgICAgIHZhciBpbm5lciA9IGJ1ZmZlckZyb21TZWNyZXQodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgdmFyIG91dGVyID0gbmV3IFVpbnQ4QXJyYXkoY29uc3RhbnRzXzEuQkxPQ0tfU0laRSk7XG4gICAgICAgICAgICBvdXRlci5zZXQoaW5uZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdGFudHNfMS5CTE9DS19TSVpFOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpbm5lcltpXSBePSAweDM2O1xuICAgICAgICAgICAgICAgIG91dGVyW2ldIF49IDB4NWM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhhc2gudXBkYXRlKGlubmVyKTtcbiAgICAgICAgICAgIHRoaXMub3V0ZXIudXBkYXRlKG91dGVyKTtcbiAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSB0aGUgY29waWVkIGtleSBpbiBtZW1vcnlcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5uZXIuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2hhMjU2O1xufSgpKTtcbmV4cG9ydHMuU2hhMjU2ID0gU2hhMjU2O1xuZnVuY3Rpb24gYnVmZmVyRnJvbVNlY3JldChzZWNyZXQpIHtcbiAgICB2YXIgaW5wdXQgPSAoMCwgdXRpbF8xLmNvbnZlcnRUb0J1ZmZlcikoc2VjcmV0KTtcbiAgICBpZiAoaW5wdXQuYnl0ZUxlbmd0aCA+IGNvbnN0YW50c18xLkJMT0NLX1NJWkUpIHtcbiAgICAgICAgdmFyIGJ1ZmZlckhhc2ggPSBuZXcgUmF3U2hhMjU2XzEuUmF3U2hhMjU2KCk7XG4gICAgICAgIGJ1ZmZlckhhc2gudXBkYXRlKGlucHV0KTtcbiAgICAgICAgaW5wdXQgPSBidWZmZXJIYXNoLmRpZ2VzdCgpO1xuICAgIH1cbiAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoY29uc3RhbnRzXzEuQkxPQ0tfU0laRSk7XG4gICAgYnVmZmVyLnNldChpbnB1dCk7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzU2hhMjU2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2pzU2hhMjU2XCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbi8qIGdsb2JhbCBnbG9iYWwsIGRlZmluZSwgU3lzdGVtLCBSZWZsZWN0LCBQcm9taXNlICovXHJcbnZhciBfX2V4dGVuZHM7XHJcbnZhciBfX2Fzc2lnbjtcclxudmFyIF9fcmVzdDtcclxudmFyIF9fZGVjb3JhdGU7XHJcbnZhciBfX3BhcmFtO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19hd2FpdDtcclxudmFyIF9fYXN5bmNHZW5lcmF0b3I7XHJcbnZhciBfX2FzeW5jRGVsZWdhdG9yO1xyXG52YXIgX19hc3luY1ZhbHVlcztcclxudmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0O1xyXG52YXIgX19pbXBvcnRTdGFyO1xyXG52YXIgX19pbXBvcnREZWZhdWx0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQ7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmc7XHJcbihmdW5jdGlvbiAoZmFjdG9yeSkge1xyXG4gICAgdmFyIHJvb3QgPSB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHRoaXMgPT09IFwib2JqZWN0XCIgPyB0aGlzIDoge307XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICBkZWZpbmUoXCJ0c2xpYlwiLCBbXCJleHBvcnRzXCJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeyBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QsIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMpKSk7IH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QsIGNyZWF0ZUV4cG9ydGVyKG1vZHVsZS5leHBvcnRzKSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290KSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVFeHBvcnRlcihleHBvcnRzLCBwcmV2aW91cykge1xyXG4gICAgICAgIGlmIChleHBvcnRzICE9PSByb290KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoaWQsIHYpIHsgcmV0dXJuIGV4cG9ydHNbaWRdID0gcHJldmlvdXMgPyBwcmV2aW91cyhpZCwgdikgOiB2OyB9O1xyXG4gICAgfVxyXG59KVxyXG4oZnVuY3Rpb24gKGV4cG9ydGVyKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVzdCA9IGZ1bmN0aW9uIChzLCBlKSB7XHJcbiAgICAgICAgdmFyIHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgICAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWV0YWRhdGEgPSBmdW5jdGlvbiAobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ZXIgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgX19nZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICAgICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2V4cG9ydFN0YXIgPSBmdW5jdGlvbiAobSwgZXhwb3J0cykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxuICAgIH07XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgICAgICByZXR1cm4gYXI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNHZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgaSwgcDtcclxuICAgICAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY1ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX21ha2VUZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uIChjb29rZWQsIHJhdykge1xyXG4gICAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICAgICAgcmV0dXJuIGNvb2tlZDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnRTdGFyID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICAgICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydERlZmF1bHQgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgICAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGV4cG9ydGVyKFwiX19leHRlbmRzXCIsIF9fZXh0ZW5kcyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXNzaWduXCIsIF9fYXNzaWduKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXN0XCIsIF9fcmVzdCk7XHJcbiAgICBleHBvcnRlcihcIl9fZGVjb3JhdGVcIiwgX19kZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcGFyYW1cIiwgX19wYXJhbSk7XHJcbiAgICBleHBvcnRlcihcIl9fbWV0YWRhdGFcIiwgX19tZXRhZGF0YSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRlclwiLCBfX2F3YWl0ZXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2dlbmVyYXRvclwiLCBfX2dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fZXhwb3J0U3RhclwiLCBfX2V4cG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NyZWF0ZUJpbmRpbmdcIiwgX19jcmVhdGVCaW5kaW5nKTtcclxuICAgIGV4cG9ydGVyKFwiX192YWx1ZXNcIiwgX192YWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3JlYWRcIiwgX19yZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRcIiwgX19zcHJlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5c1wiLCBfX3NwcmVhZEFycmF5cyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRcIiwgX19hd2FpdCk7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNHZW5lcmF0b3JcIiwgX19hc3luY0dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNEZWxlZ2F0b3JcIiwgX19hc3luY0RlbGVnYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNWYWx1ZXNcIiwgX19hc3luY1ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fbWFrZVRlbXBsYXRlT2JqZWN0XCIsIF9fbWFrZVRlbXBsYXRlT2JqZWN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnRTdGFyXCIsIF9faW1wb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0RGVmYXVsdFwiLCBfX2ltcG9ydERlZmF1bHQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRTZXQpO1xyXG59KTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCBBbWF6b24uY29tIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0VG9CdWZmZXIgPSB2b2lkIDA7XG52YXIgdXRpbF91dGY4X2Jyb3dzZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXV0ZjgtYnJvd3NlclwiKTtcbi8vIFF1aWNrIHBvbHlmaWxsXG52YXIgZnJvbVV0ZjggPSB0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIEJ1ZmZlci5mcm9tXG4gICAgPyBmdW5jdGlvbiAoaW5wdXQpIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0LCBcInV0ZjhcIik7IH1cbiAgICA6IHV0aWxfdXRmOF9icm93c2VyXzEuZnJvbVV0Zjg7XG5mdW5jdGlvbiBjb252ZXJ0VG9CdWZmZXIoZGF0YSkge1xuICAgIC8vIEFscmVhZHkgYSBVaW50OCwgZG8gbm90aGluZ1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSlcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBmcm9tVXRmOChkYXRhKTtcbiAgICB9XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoIC8gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbn1cbmV4cG9ydHMuY29udmVydFRvQnVmZmVyID0gY29udmVydFRvQnVmZmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udmVydFRvQnVmZmVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eURhdGEgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0VtcHR5RGF0YShkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuYnl0ZUxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydHMuaXNFbXB0eURhdGEgPSBpc0VtcHR5RGF0YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRW1wdHlEYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubnVtVG9VaW50OCA9IHZvaWQgMDtcbmZ1bmN0aW9uIG51bVRvVWludDgobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgKG51bSAmIDB4ZmYwMDAwMDApID4+IDI0LFxuICAgICAgICAobnVtICYgMHgwMGZmMDAwMCkgPj4gMTYsXG4gICAgICAgIChudW0gJiAweDAwMDBmZjAwKSA+PiA4LFxuICAgICAgICBudW0gJiAweDAwMDAwMGZmLFxuICAgIF0pO1xufVxuZXhwb3J0cy5udW1Ub1VpbnQ4ID0gbnVtVG9VaW50ODtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW51bVRvVWludDguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCBBbWF6b24uY29tIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51aW50MzJBcnJheUZyb20gPSB2b2lkIDA7XG4vLyBJRSAxMSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5LmZyb20sIHNvIHdlIGRvIGl0IG1hbnVhbGx5XG5mdW5jdGlvbiB1aW50MzJBcnJheUZyb20oYV9sb29rVXBUYWJsZSkge1xuICAgIGlmICghVWludDMyQXJyYXkuZnJvbSkge1xuICAgICAgICB2YXIgcmV0dXJuX2FycmF5ID0gbmV3IFVpbnQzMkFycmF5KGFfbG9va1VwVGFibGUubGVuZ3RoKTtcbiAgICAgICAgdmFyIGFfaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoYV9pbmRleCA8IGFfbG9va1VwVGFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm5fYXJyYXlbYV9pbmRleF0gPSBhX2xvb2tVcFRhYmxlW2FfaW5kZXhdO1xuICAgICAgICAgICAgYV9pbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5fYXJyYXk7XG4gICAgfVxuICAgIHJldHVybiBVaW50MzJBcnJheS5mcm9tKGFfbG9va1VwVGFibGUpO1xufVxuZXhwb3J0cy51aW50MzJBcnJheUZyb20gPSB1aW50MzJBcnJheUZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD11aW50MzJBcnJheUZyb20uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCBBbWF6b24uY29tIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51aW50MzJBcnJheUZyb20gPSBleHBvcnRzLm51bVRvVWludDggPSBleHBvcnRzLmlzRW1wdHlEYXRhID0gZXhwb3J0cy5jb252ZXJ0VG9CdWZmZXIgPSB2b2lkIDA7XG52YXIgY29udmVydFRvQnVmZmVyXzEgPSByZXF1aXJlKFwiLi9jb252ZXJ0VG9CdWZmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb252ZXJ0VG9CdWZmZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnZlcnRUb0J1ZmZlcl8xLmNvbnZlcnRUb0J1ZmZlcjsgfSB9KTtcbnZhciBpc0VtcHR5RGF0YV8xID0gcmVxdWlyZShcIi4vaXNFbXB0eURhdGFcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0VtcHR5RGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNFbXB0eURhdGFfMS5pc0VtcHR5RGF0YTsgfSB9KTtcbnZhciBudW1Ub1VpbnQ4XzEgPSByZXF1aXJlKFwiLi9udW1Ub1VpbnQ4XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnVtVG9VaW50OFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVtVG9VaW50OF8xLm51bVRvVWludDg7IH0gfSk7XG52YXIgdWludDMyQXJyYXlGcm9tXzEgPSByZXF1aXJlKFwiLi91aW50MzJBcnJheUZyb21cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1aW50MzJBcnJheUZyb21cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVpbnQzMkFycmF5RnJvbV8xLnVpbnQzMkFycmF5RnJvbTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXdzQ3JjMzIgPSB2b2lkIDA7XG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiQGF3cy1jcnlwdG8vdXRpbFwiKTtcbnZhciBpbmRleF8xID0gcmVxdWlyZShcIi4vaW5kZXhcIik7XG52YXIgQXdzQ3JjMzIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXdzQ3JjMzIoKSB7XG4gICAgICAgIHRoaXMuY3JjMzIgPSBuZXcgaW5kZXhfMS5DcmMzMigpO1xuICAgIH1cbiAgICBBd3NDcmMzMi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHRvSGFzaCkge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5pc0VtcHR5RGF0YSkodG9IYXNoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jcmMzMi51cGRhdGUoKDAsIHV0aWxfMS5jb252ZXJ0VG9CdWZmZXIpKHRvSGFzaCkpO1xuICAgIH07XG4gICAgQXdzQ3JjMzIucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgKDAsIHV0aWxfMS5udW1Ub1VpbnQ4KSh0aGlzLmNyYzMyLmRpZ2VzdCgpKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBd3NDcmMzMi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3JjMzIgPSBuZXcgaW5kZXhfMS5DcmMzMigpO1xuICAgIH07XG4gICAgcmV0dXJuIEF3c0NyYzMyO1xufSgpKTtcbmV4cG9ydHMuQXdzQ3JjMzIgPSBBd3NDcmMzMjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF3c19jcmMzMi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bd3NDcmMzMiA9IGV4cG9ydHMuQ3JjMzIgPSBleHBvcnRzLmNyYzMyID0gdm9pZCAwO1xudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG52YXIgdXRpbF8xID0gcmVxdWlyZShcIkBhd3MtY3J5cHRvL3V0aWxcIik7XG5mdW5jdGlvbiBjcmMzMihkYXRhKSB7XG4gICAgcmV0dXJuIG5ldyBDcmMzMigpLnVwZGF0ZShkYXRhKS5kaWdlc3QoKTtcbn1cbmV4cG9ydHMuY3JjMzIgPSBjcmMzMjtcbnZhciBDcmMzMiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDcmMzMigpIHtcbiAgICAgICAgdGhpcy5jaGVja3N1bSA9IDB4ZmZmZmZmZmY7XG4gICAgfVxuICAgIENyYzMyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGRhdGFfMSA9IHRzbGliXzEuX192YWx1ZXMoZGF0YSksIGRhdGFfMV8xID0gZGF0YV8xLm5leHQoKTsgIWRhdGFfMV8xLmRvbmU7IGRhdGFfMV8xID0gZGF0YV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBieXRlID0gZGF0YV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja3N1bSA9XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmNoZWNrc3VtID4+PiA4KSBeIGxvb2t1cFRhYmxlWyh0aGlzLmNoZWNrc3VtIF4gYnl0ZSkgJiAweGZmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFfMV8xICYmICFkYXRhXzFfMS5kb25lICYmIChfYSA9IGRhdGFfMS5yZXR1cm4pKSBfYS5jYWxsKGRhdGFfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDcmMzMi5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuY2hlY2tzdW0gXiAweGZmZmZmZmZmKSA+Pj4gMDtcbiAgICB9O1xuICAgIHJldHVybiBDcmMzMjtcbn0oKSk7XG5leHBvcnRzLkNyYzMyID0gQ3JjMzI7XG4vLyBwcmV0dGllci1pZ25vcmVcbnZhciBhX2xvb2tVcFRhYmxlID0gW1xuICAgIDB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4RUUwRTYxMkMsIDB4OTkwOTUxQkEsXG4gICAgMHgwNzZEQzQxOSwgMHg3MDZBRjQ4RiwgMHhFOTYzQTUzNSwgMHg5RTY0OTVBMyxcbiAgICAweDBFREI4ODMyLCAweDc5RENCOEE0LCAweEUwRDVFOTFFLCAweDk3RDJEOTg4LFxuICAgIDB4MDlCNjRDMkIsIDB4N0VCMTdDQkQsIDB4RTdCODJEMDcsIDB4OTBCRjFEOTEsXG4gICAgMHgxREI3MTA2NCwgMHg2QUIwMjBGMiwgMHhGM0I5NzE0OCwgMHg4NEJFNDFERSxcbiAgICAweDFBREFENDdELCAweDZERERFNEVCLCAweEY0RDRCNTUxLCAweDgzRDM4NUM3LFxuICAgIDB4MTM2Qzk4NTYsIDB4NjQ2QkE4QzAsIDB4RkQ2MkY5N0EsIDB4OEE2NUM5RUMsXG4gICAgMHgxNDAxNUM0RiwgMHg2MzA2NkNEOSwgMHhGQTBGM0Q2MywgMHg4RDA4MERGNSxcbiAgICAweDNCNkUyMEM4LCAweDRDNjkxMDVFLCAweEQ1NjA0MUU0LCAweEEyNjc3MTcyLFxuICAgIDB4M0MwM0U0RDEsIDB4NEIwNEQ0NDcsIDB4RDIwRDg1RkQsIDB4QTUwQUI1NkIsXG4gICAgMHgzNUI1QThGQSwgMHg0MkIyOTg2QywgMHhEQkJCQzlENiwgMHhBQ0JDRjk0MCxcbiAgICAweDMyRDg2Q0UzLCAweDQ1REY1Qzc1LCAweERDRDYwRENGLCAweEFCRDEzRDU5LFxuICAgIDB4MjZEOTMwQUMsIDB4NTFERTAwM0EsIDB4QzhENzUxODAsIDB4QkZEMDYxMTYsXG4gICAgMHgyMUI0RjRCNSwgMHg1NkIzQzQyMywgMHhDRkJBOTU5OSwgMHhCOEJEQTUwRixcbiAgICAweDI4MDJCODlFLCAweDVGMDU4ODA4LCAweEM2MENEOUIyLCAweEIxMEJFOTI0LFxuICAgIDB4MkY2RjdDODcsIDB4NTg2ODRDMTEsIDB4QzE2MTFEQUIsIDB4QjY2NjJEM0QsXG4gICAgMHg3NkRDNDE5MCwgMHgwMURCNzEwNiwgMHg5OEQyMjBCQywgMHhFRkQ1MTAyQSxcbiAgICAweDcxQjE4NTg5LCAweDA2QjZCNTFGLCAweDlGQkZFNEE1LCAweEU4QjhENDMzLFxuICAgIDB4NzgwN0M5QTIsIDB4MEYwMEY5MzQsIDB4OTYwOUE4OEUsIDB4RTEwRTk4MTgsXG4gICAgMHg3RjZBMERCQiwgMHgwODZEM0QyRCwgMHg5MTY0NkM5NywgMHhFNjYzNUMwMSxcbiAgICAweDZCNkI1MUY0LCAweDFDNkM2MTYyLCAweDg1NjUzMEQ4LCAweEYyNjIwMDRFLFxuICAgIDB4NkMwNjk1RUQsIDB4MUIwMUE1N0IsIDB4ODIwOEY0QzEsIDB4RjUwRkM0NTcsXG4gICAgMHg2NUIwRDlDNiwgMHgxMkI3RTk1MCwgMHg4QkJFQjhFQSwgMHhGQ0I5ODg3QyxcbiAgICAweDYyREQxRERGLCAweDE1REEyRDQ5LCAweDhDRDM3Q0YzLCAweEZCRDQ0QzY1LFxuICAgIDB4NERCMjYxNTgsIDB4M0FCNTUxQ0UsIDB4QTNCQzAwNzQsIDB4RDRCQjMwRTIsXG4gICAgMHg0QURGQTU0MSwgMHgzREQ4OTVENywgMHhBNEQxQzQ2RCwgMHhEM0Q2RjRGQixcbiAgICAweDQzNjlFOTZBLCAweDM0NkVEOUZDLCAweEFENjc4ODQ2LCAweERBNjBCOEQwLFxuICAgIDB4NDQwNDJENzMsIDB4MzMwMzFERTUsIDB4QUEwQTRDNUYsIDB4REQwRDdDQzksXG4gICAgMHg1MDA1NzEzQywgMHgyNzAyNDFBQSwgMHhCRTBCMTAxMCwgMHhDOTBDMjA4NixcbiAgICAweDU3NjhCNTI1LCAweDIwNkY4NUIzLCAweEI5NjZENDA5LCAweENFNjFFNDlGLFxuICAgIDB4NUVERUY5MEUsIDB4MjlEOUM5OTgsIDB4QjBEMDk4MjIsIDB4QzdEN0E4QjQsXG4gICAgMHg1OUIzM0QxNywgMHgyRUI0MEQ4MSwgMHhCN0JENUMzQiwgMHhDMEJBNkNBRCxcbiAgICAweEVEQjg4MzIwLCAweDlBQkZCM0I2LCAweDAzQjZFMjBDLCAweDc0QjFEMjlBLFxuICAgIDB4RUFENTQ3MzksIDB4OUREMjc3QUYsIDB4MDREQjI2MTUsIDB4NzNEQzE2ODMsXG4gICAgMHhFMzYzMEIxMiwgMHg5NDY0M0I4NCwgMHgwRDZENkEzRSwgMHg3QTZBNUFBOCxcbiAgICAweEU0MEVDRjBCLCAweDkzMDlGRjlELCAweDBBMDBBRTI3LCAweDdEMDc5RUIxLFxuICAgIDB4RjAwRjkzNDQsIDB4ODcwOEEzRDIsIDB4MUUwMUYyNjgsIDB4NjkwNkMyRkUsXG4gICAgMHhGNzYyNTc1RCwgMHg4MDY1NjdDQiwgMHgxOTZDMzY3MSwgMHg2RTZCMDZFNyxcbiAgICAweEZFRDQxQjc2LCAweDg5RDMyQkUwLCAweDEwREE3QTVBLCAweDY3REQ0QUNDLFxuICAgIDB4RjlCOURGNkYsIDB4OEVCRUVGRjksIDB4MTdCN0JFNDMsIDB4NjBCMDhFRDUsXG4gICAgMHhENkQ2QTNFOCwgMHhBMUQxOTM3RSwgMHgzOEQ4QzJDNCwgMHg0RkRGRjI1MixcbiAgICAweEQxQkI2N0YxLCAweEE2QkM1NzY3LCAweDNGQjUwNkRELCAweDQ4QjIzNjRCLFxuICAgIDB4RDgwRDJCREEsIDB4QUYwQTFCNEMsIDB4MzYwMzRBRjYsIDB4NDEwNDdBNjAsXG4gICAgMHhERjYwRUZDMywgMHhBODY3REY1NSwgMHgzMTZFOEVFRiwgMHg0NjY5QkU3OSxcbiAgICAweENCNjFCMzhDLCAweEJDNjY4MzFBLCAweDI1NkZEMkEwLCAweDUyNjhFMjM2LFxuICAgIDB4Q0MwQzc3OTUsIDB4QkIwQjQ3MDMsIDB4MjIwMjE2QjksIDB4NTUwNTI2MkYsXG4gICAgMHhDNUJBM0JCRSwgMHhCMkJEMEIyOCwgMHgyQkI0NUE5MiwgMHg1Q0IzNkEwNCxcbiAgICAweEMyRDdGRkE3LCAweEI1RDBDRjMxLCAweDJDRDk5RThCLCAweDVCREVBRTFELFxuICAgIDB4OUI2NEMyQjAsIDB4RUM2M0YyMjYsIDB4NzU2QUEzOUMsIDB4MDI2RDkzMEEsXG4gICAgMHg5QzA5MDZBOSwgMHhFQjBFMzYzRiwgMHg3MjA3Njc4NSwgMHgwNTAwNTcxMyxcbiAgICAweDk1QkY0QTgyLCAweEUyQjg3QTE0LCAweDdCQjEyQkFFLCAweDBDQjYxQjM4LFxuICAgIDB4OTJEMjhFOUIsIDB4RTVENUJFMEQsIDB4N0NEQ0VGQjcsIDB4MEJEQkRGMjEsXG4gICAgMHg4NkQzRDJENCwgMHhGMUQ0RTI0MiwgMHg2OEREQjNGOCwgMHgxRkRBODM2RSxcbiAgICAweDgxQkUxNkNELCAweEY2QjkyNjVCLCAweDZGQjA3N0UxLCAweDE4Qjc0Nzc3LFxuICAgIDB4ODgwODVBRTYsIDB4RkYwRjZBNzAsIDB4NjYwNjNCQ0EsIDB4MTEwMTBCNUMsXG4gICAgMHg4RjY1OUVGRiwgMHhGODYyQUU2OSwgMHg2MTZCRkZEMywgMHgxNjZDQ0Y0NSxcbiAgICAweEEwMEFFMjc4LCAweEQ3MEREMkVFLCAweDRFMDQ4MzU0LCAweDM5MDNCM0MyLFxuICAgIDB4QTc2NzI2NjEsIDB4RDA2MDE2RjcsIDB4NDk2OTQ3NEQsIDB4M0U2RTc3REIsXG4gICAgMHhBRUQxNkE0QSwgMHhEOUQ2NUFEQywgMHg0MERGMEI2NiwgMHgzN0Q4M0JGMCxcbiAgICAweEE5QkNBRTUzLCAweERFQkI5RUM1LCAweDQ3QjJDRjdGLCAweDMwQjVGRkU5LFxuICAgIDB4QkRCREYyMUMsIDB4Q0FCQUMyOEEsIDB4NTNCMzkzMzAsIDB4MjRCNEEzQTYsXG4gICAgMHhCQUQwMzYwNSwgMHhDREQ3MDY5MywgMHg1NERFNTcyOSwgMHgyM0Q5NjdCRixcbiAgICAweEIzNjY3QTJFLCAweEM0NjE0QUI4LCAweDVENjgxQjAyLCAweDJBNkYyQjk0LFxuICAgIDB4QjQwQkJFMzcsIDB4QzMwQzhFQTEsIDB4NUEwNURGMUIsIDB4MkQwMkVGOEQsXG5dO1xudmFyIGxvb2t1cFRhYmxlID0gKDAsIHV0aWxfMS51aW50MzJBcnJheUZyb20pKGFfbG9va1VwVGFibGUpO1xudmFyIGF3c19jcmMzMl8xID0gcmVxdWlyZShcIi4vYXdzX2NyYzMyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXdzQ3JjMzJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF3c19jcmMzMl8xLkF3c0NyYzMyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgZnJvbUhleDogKCkgPT4gZnJvbUhleCxcbiAgdG9IZXg6ICgpID0+IHRvSGV4XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcbnZhciBTSE9SVF9UT19IRVggPSB7fTtcbnZhciBIRVhfVE9fU0hPUlQgPSB7fTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgbGV0IGVuY29kZWRCeXRlID0gaS50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGVuY29kZWRCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgIGVuY29kZWRCeXRlID0gYDAke2VuY29kZWRCeXRlfWA7XG4gIH1cbiAgU0hPUlRfVE9fSEVYW2ldID0gZW5jb2RlZEJ5dGU7XG4gIEhFWF9UT19TSE9SVFtlbmNvZGVkQnl0ZV0gPSBpO1xufVxuZnVuY3Rpb24gZnJvbUhleChlbmNvZGVkKSB7XG4gIGlmIChlbmNvZGVkLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJIZXggZW5jb2RlZCBzdHJpbmdzIG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBsZW5ndGhcIik7XG4gIH1cbiAgY29uc3Qgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZC5sZW5ndGggLyAyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNvZGVkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3QgZW5jb2RlZEJ5dGUgPSBlbmNvZGVkLnNsaWNlKGksIGkgKyAyKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChlbmNvZGVkQnl0ZSBpbiBIRVhfVE9fU0hPUlQpIHtcbiAgICAgIG91dFtpIC8gMl0gPSBIRVhfVE9fU0hPUlRbZW5jb2RlZEJ5dGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWNvZGUgdW5yZWNvZ25pemVkIHNlcXVlbmNlICR7ZW5jb2RlZEJ5dGV9IGFzIGhleGFkZWNpbWFsYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5fX25hbWUoZnJvbUhleCwgXCJmcm9tSGV4XCIpO1xuZnVuY3Rpb24gdG9IZXgoYnl0ZXMpIHtcbiAgbGV0IG91dCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgb3V0ICs9IFNIT1JUX1RPX0hFWFtieXRlc1tpXV07XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbl9fbmFtZSh0b0hleCwgXCJ0b0hleFwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZyb21IZXgsXG4gIHRvSGV4XG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgRXZlbnRTdHJlYW1Db2RlYzogKCkgPT4gRXZlbnRTdHJlYW1Db2RlYyxcbiAgSGVhZGVyTWFyc2hhbGxlcjogKCkgPT4gSGVhZGVyTWFyc2hhbGxlcixcbiAgSW50NjQ6ICgpID0+IEludDY0LFxuICBNZXNzYWdlRGVjb2RlclN0cmVhbTogKCkgPT4gTWVzc2FnZURlY29kZXJTdHJlYW0sXG4gIE1lc3NhZ2VFbmNvZGVyU3RyZWFtOiAoKSA9PiBNZXNzYWdlRW5jb2RlclN0cmVhbSxcbiAgU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW06ICgpID0+IFNtaXRoeU1lc3NhZ2VEZWNvZGVyU3RyZWFtLFxuICBTbWl0aHlNZXNzYWdlRW5jb2RlclN0cmVhbTogKCkgPT4gU21pdGh5TWVzc2FnZUVuY29kZXJTdHJlYW1cbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvRXZlbnRTdHJlYW1Db2RlYy50c1xudmFyIGltcG9ydF9jcmMzMjIgPSByZXF1aXJlKFwiQGF3cy1jcnlwdG8vY3JjMzJcIik7XG5cbi8vIHNyYy9IZWFkZXJNYXJzaGFsbGVyLnRzXG5cblxuLy8gc3JjL0ludDY0LnRzXG52YXIgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmdcIik7XG52YXIgX0ludDY0ID0gY2xhc3MgX0ludDY0IHtcbiAgY29uc3RydWN0b3IoYnl0ZXMpIHtcbiAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG4gICAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggIT09IDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludDY0IGJ1ZmZlcnMgbXVzdCBiZSBleGFjdGx5IDggYnl0ZXNcIik7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBmcm9tTnVtYmVyKG51bWJlcikge1xuICAgIGlmIChudW1iZXIgPiA5MjIzMzcyMDM2ODU0Nzc2ZTMgfHwgbnVtYmVyIDwgLTkyMjMzNzIwMzY4NTQ3NzZlMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke251bWJlcn0gaXMgdG9vIGxhcmdlIChvciwgaWYgbmVnYXRpdmUsIHRvbyBzbWFsbCkgdG8gcmVwcmVzZW50IGFzIGFuIEludDY0YCk7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgZm9yIChsZXQgaSA9IDcsIHJlbWFpbmluZyA9IE1hdGguYWJzKE1hdGgucm91bmQobnVtYmVyKSk7IGkgPiAtMSAmJiByZW1haW5pbmcgPiAwOyBpLS0sIHJlbWFpbmluZyAvPSAyNTYpIHtcbiAgICAgIGJ5dGVzW2ldID0gcmVtYWluaW5nO1xuICAgIH1cbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgbmVnYXRlKGJ5dGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfSW50NjQoYnl0ZXMpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsZWQgaW1wbGljaXRseSBieSBpbmZpeCBhcml0aG1ldGljIG9wZXJhdG9ycy5cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzLnNsaWNlKDApO1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gYnl0ZXNbMF0gJiAxMjg7XG4gICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICBuZWdhdGUoYnl0ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoKDAsIGltcG9ydF91dGlsX2hleF9lbmNvZGluZy50b0hleCkoYnl0ZXMpLCAxNikgKiAobmVnYXRpdmUgPyAtMSA6IDEpO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBTdHJpbmcodGhpcy52YWx1ZU9mKCkpO1xuICB9XG59O1xuX19uYW1lKF9JbnQ2NCwgXCJJbnQ2NFwiKTtcbnZhciBJbnQ2NCA9IF9JbnQ2NDtcbmZ1bmN0aW9uIG5lZ2F0ZShieXRlcykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgIGJ5dGVzW2ldIF49IDI1NTtcbiAgfVxuICBmb3IgKGxldCBpID0gNzsgaSA+IC0xOyBpLS0pIHtcbiAgICBieXRlc1tpXSsrO1xuICAgIGlmIChieXRlc1tpXSAhPT0gMClcbiAgICAgIGJyZWFrO1xuICB9XG59XG5fX25hbWUobmVnYXRlLCBcIm5lZ2F0ZVwiKTtcblxuLy8gc3JjL0hlYWRlck1hcnNoYWxsZXIudHNcbnZhciBfSGVhZGVyTWFyc2hhbGxlciA9IGNsYXNzIF9IZWFkZXJNYXJzaGFsbGVyIHtcbiAgY29uc3RydWN0b3IodG9VdGY4LCBmcm9tVXRmOCkge1xuICAgIHRoaXMudG9VdGY4ID0gdG9VdGY4O1xuICAgIHRoaXMuZnJvbVV0ZjggPSBmcm9tVXRmODtcbiAgfVxuICBmb3JtYXQoaGVhZGVycykge1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmZyb21VdGY4KGhlYWRlck5hbWUpO1xuICAgICAgY2h1bmtzLnB1c2goVWludDhBcnJheS5mcm9tKFtieXRlcy5ieXRlTGVuZ3RoXSksIGJ5dGVzLCB0aGlzLmZvcm1hdEhlYWRlclZhbHVlKGhlYWRlcnNbaGVhZGVyTmFtZV0pKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmtzLnJlZHVjZSgoY2FycnksIGJ5dGVzKSA9PiBjYXJyeSArIGJ5dGVzLmJ5dGVMZW5ndGgsIDApKTtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICBvdXQuc2V0KGNodW5rLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSBjaHVuay5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGZvcm1hdEhlYWRlclZhbHVlKGhlYWRlcikge1xuICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oW2hlYWRlci52YWx1ZSA/IDAgLyogYm9vbFRydWUgKi8gOiAxIC8qIGJvb2xGYWxzZSAqL10pO1xuICAgICAgY2FzZSBcImJ5dGVcIjpcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMiAvKiBieXRlICovLCBoZWFkZXIudmFsdWVdKTtcbiAgICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgICBjb25zdCBzaG9ydFZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDMpKTtcbiAgICAgICAgc2hvcnRWaWV3LnNldFVpbnQ4KDAsIDMgLyogc2hvcnQgKi8pO1xuICAgICAgICBzaG9ydFZpZXcuc2V0SW50MTYoMSwgaGVhZGVyLnZhbHVlLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShzaG9ydFZpZXcuYnVmZmVyKTtcbiAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgIGNvbnN0IGludFZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDUpKTtcbiAgICAgICAgaW50Vmlldy5zZXRVaW50OCgwLCA0IC8qIGludGVnZXIgKi8pO1xuICAgICAgICBpbnRWaWV3LnNldEludDMyKDEsIGhlYWRlci52YWx1ZSwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaW50Vmlldy5idWZmZXIpO1xuICAgICAgY2FzZSBcImxvbmdcIjpcbiAgICAgICAgY29uc3QgbG9uZ0J5dGVzID0gbmV3IFVpbnQ4QXJyYXkoOSk7XG4gICAgICAgIGxvbmdCeXRlc1swXSA9IDUgLyogbG9uZyAqLztcbiAgICAgICAgbG9uZ0J5dGVzLnNldChoZWFkZXIudmFsdWUuYnl0ZXMsIDEpO1xuICAgICAgICByZXR1cm4gbG9uZ0J5dGVzO1xuICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICBjb25zdCBiaW5WaWV3ID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigzICsgaGVhZGVyLnZhbHVlLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgYmluVmlldy5zZXRVaW50OCgwLCA2IC8qIGJ5dGVBcnJheSAqLyk7XG4gICAgICAgIGJpblZpZXcuc2V0VWludDE2KDEsIGhlYWRlci52YWx1ZS5ieXRlTGVuZ3RoLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGJpbkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluVmlldy5idWZmZXIpO1xuICAgICAgICBiaW5CeXRlcy5zZXQoaGVhZGVyLnZhbHVlLCAzKTtcbiAgICAgICAgcmV0dXJuIGJpbkJ5dGVzO1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICBjb25zdCB1dGY4Qnl0ZXMgPSB0aGlzLmZyb21VdGY4KGhlYWRlci52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHN0clZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDMgKyB1dGY4Qnl0ZXMuYnl0ZUxlbmd0aCkpO1xuICAgICAgICBzdHJWaWV3LnNldFVpbnQ4KDAsIDcgLyogc3RyaW5nICovKTtcbiAgICAgICAgc3RyVmlldy5zZXRVaW50MTYoMSwgdXRmOEJ5dGVzLmJ5dGVMZW5ndGgsIGZhbHNlKTtcbiAgICAgICAgY29uc3Qgc3RyQnl0ZXMgPSBuZXcgVWludDhBcnJheShzdHJWaWV3LmJ1ZmZlcik7XG4gICAgICAgIHN0ckJ5dGVzLnNldCh1dGY4Qnl0ZXMsIDMpO1xuICAgICAgICByZXR1cm4gc3RyQnl0ZXM7XG4gICAgICBjYXNlIFwidGltZXN0YW1wXCI6XG4gICAgICAgIGNvbnN0IHRzQnl0ZXMgPSBuZXcgVWludDhBcnJheSg5KTtcbiAgICAgICAgdHNCeXRlc1swXSA9IDggLyogdGltZXN0YW1wICovO1xuICAgICAgICB0c0J5dGVzLnNldChJbnQ2NC5mcm9tTnVtYmVyKGhlYWRlci52YWx1ZS52YWx1ZU9mKCkpLmJ5dGVzLCAxKTtcbiAgICAgICAgcmV0dXJuIHRzQnl0ZXM7XG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICBpZiAoIVVVSURfUEFUVEVSTi50ZXN0KGhlYWRlci52YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVVVJRCByZWNlaXZlZDogJHtoZWFkZXIudmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXVpZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTcpO1xuICAgICAgICB1dWlkQnl0ZXNbMF0gPSA5IC8qIHV1aWQgKi87XG4gICAgICAgIHV1aWRCeXRlcy5zZXQoKDAsIGltcG9ydF91dGlsX2hleF9lbmNvZGluZy5mcm9tSGV4KShoZWFkZXIudmFsdWUucmVwbGFjZSgvXFwtL2csIFwiXCIpKSwgMSk7XG4gICAgICAgIHJldHVybiB1dWlkQnl0ZXM7XG4gICAgfVxuICB9XG4gIHBhcnNlKGhlYWRlcnMpIHtcbiAgICBjb25zdCBvdXQgPSB7fTtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgIHdoaWxlIChwb3NpdGlvbiA8IGhlYWRlcnMuYnl0ZUxlbmd0aCkge1xuICAgICAgY29uc3QgbmFtZUxlbmd0aCA9IGhlYWRlcnMuZ2V0VWludDgocG9zaXRpb24rKyk7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy50b1V0ZjgobmV3IFVpbnQ4QXJyYXkoaGVhZGVycy5idWZmZXIsIGhlYWRlcnMuYnl0ZU9mZnNldCArIHBvc2l0aW9uLCBuYW1lTGVuZ3RoKSk7XG4gICAgICBwb3NpdGlvbiArPSBuYW1lTGVuZ3RoO1xuICAgICAgc3dpdGNoIChoZWFkZXJzLmdldFVpbnQ4KHBvc2l0aW9uKyspKSB7XG4gICAgICAgIGNhc2UgMCAvKiBib29sVHJ1ZSAqLzpcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBCT09MRUFOX1RBRyxcbiAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxIC8qIGJvb2xGYWxzZSAqLzpcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBCT09MRUFOX1RBRyxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMiAvKiBieXRlICovOlxuICAgICAgICAgIG91dFtuYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6IEJZVEVfVEFHLFxuICAgICAgICAgICAgdmFsdWU6IGhlYWRlcnMuZ2V0SW50OChwb3NpdGlvbisrKVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMyAvKiBzaG9ydCAqLzpcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBTSE9SVF9UQUcsXG4gICAgICAgICAgICB2YWx1ZTogaGVhZGVycy5nZXRJbnQxNihwb3NpdGlvbiwgZmFsc2UpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQgLyogaW50ZWdlciAqLzpcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBJTlRfVEFHLFxuICAgICAgICAgICAgdmFsdWU6IGhlYWRlcnMuZ2V0SW50MzIocG9zaXRpb24sIGZhbHNlKVxuICAgICAgICAgIH07XG4gICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1IC8qIGxvbmcgKi86XG4gICAgICAgICAgb3V0W25hbWVdID0ge1xuICAgICAgICAgICAgdHlwZTogTE9OR19UQUcsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IEludDY0KG5ldyBVaW50OEFycmF5KGhlYWRlcnMuYnVmZmVyLCBoZWFkZXJzLmJ5dGVPZmZzZXQgKyBwb3NpdGlvbiwgOCkpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYgLyogYnl0ZUFycmF5ICovOlxuICAgICAgICAgIGNvbnN0IGJpbmFyeUxlbmd0aCA9IGhlYWRlcnMuZ2V0VWludDE2KHBvc2l0aW9uLCBmYWxzZSk7XG4gICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBCSU5BUllfVEFHLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBVaW50OEFycmF5KGhlYWRlcnMuYnVmZmVyLCBoZWFkZXJzLmJ5dGVPZmZzZXQgKyBwb3NpdGlvbiwgYmluYXJ5TGVuZ3RoKVxuICAgICAgICAgIH07XG4gICAgICAgICAgcG9zaXRpb24gKz0gYmluYXJ5TGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcgLyogc3RyaW5nICovOlxuICAgICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IGhlYWRlcnMuZ2V0VWludDE2KHBvc2l0aW9uLCBmYWxzZSk7XG4gICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBTVFJJTkdfVEFHLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9VdGY4KG5ldyBVaW50OEFycmF5KGhlYWRlcnMuYnVmZmVyLCBoZWFkZXJzLmJ5dGVPZmZzZXQgKyBwb3NpdGlvbiwgc3RyaW5nTGVuZ3RoKSlcbiAgICAgICAgICB9O1xuICAgICAgICAgIHBvc2l0aW9uICs9IHN0cmluZ0xlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4IC8qIHRpbWVzdGFtcCAqLzpcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBUSU1FU1RBTVBfVEFHLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlKG5ldyBJbnQ2NChuZXcgVWludDhBcnJheShoZWFkZXJzLmJ1ZmZlciwgaGVhZGVycy5ieXRlT2Zmc2V0ICsgcG9zaXRpb24sIDgpKS52YWx1ZU9mKCkpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDkgLyogdXVpZCAqLzpcbiAgICAgICAgICBjb25zdCB1dWlkQnl0ZXMgPSBuZXcgVWludDhBcnJheShoZWFkZXJzLmJ1ZmZlciwgaGVhZGVycy5ieXRlT2Zmc2V0ICsgcG9zaXRpb24sIDE2KTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAxNjtcbiAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBVVUlEX1RBRyxcbiAgICAgICAgICAgIHZhbHVlOiBgJHsoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLnRvSGV4KSh1dWlkQnl0ZXMuc3ViYXJyYXkoMCwgNCkpfS0keygwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKHV1aWRCeXRlcy5zdWJhcnJheSg0LCA2KSl9LSR7KDAsIGltcG9ydF91dGlsX2hleF9lbmNvZGluZy50b0hleCkoXG4gICAgICAgICAgICAgIHV1aWRCeXRlcy5zdWJhcnJheSg2LCA4KVxuICAgICAgICAgICAgKX0tJHsoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLnRvSGV4KSh1dWlkQnl0ZXMuc3ViYXJyYXkoOCwgMTApKX0tJHsoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLnRvSGV4KSh1dWlkQnl0ZXMuc3ViYXJyYXkoMTApKX1gXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoZWFkZXIgdHlwZSB0YWdgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufTtcbl9fbmFtZShfSGVhZGVyTWFyc2hhbGxlciwgXCJIZWFkZXJNYXJzaGFsbGVyXCIpO1xudmFyIEhlYWRlck1hcnNoYWxsZXIgPSBfSGVhZGVyTWFyc2hhbGxlcjtcbnZhciBCT09MRUFOX1RBRyA9IFwiYm9vbGVhblwiO1xudmFyIEJZVEVfVEFHID0gXCJieXRlXCI7XG52YXIgU0hPUlRfVEFHID0gXCJzaG9ydFwiO1xudmFyIElOVF9UQUcgPSBcImludGVnZXJcIjtcbnZhciBMT05HX1RBRyA9IFwibG9uZ1wiO1xudmFyIEJJTkFSWV9UQUcgPSBcImJpbmFyeVwiO1xudmFyIFNUUklOR19UQUcgPSBcInN0cmluZ1wiO1xudmFyIFRJTUVTVEFNUF9UQUcgPSBcInRpbWVzdGFtcFwiO1xudmFyIFVVSURfVEFHID0gXCJ1dWlkXCI7XG52YXIgVVVJRF9QQVRURVJOID0gL15bYS1mMC05XXs4fS1bYS1mMC05XXs0fS1bYS1mMC05XXs0fS1bYS1mMC05XXs0fS1bYS1mMC05XXsxMn0kLztcblxuLy8gc3JjL3NwbGl0TWVzc2FnZS50c1xudmFyIGltcG9ydF9jcmMzMiA9IHJlcXVpcmUoXCJAYXdzLWNyeXB0by9jcmMzMlwiKTtcbnZhciBQUkVMVURFX01FTUJFUl9MRU5HVEggPSA0O1xudmFyIFBSRUxVREVfTEVOR1RIID0gUFJFTFVERV9NRU1CRVJfTEVOR1RIICogMjtcbnZhciBDSEVDS1NVTV9MRU5HVEggPSA0O1xudmFyIE1JTklNVU1fTUVTU0FHRV9MRU5HVEggPSBQUkVMVURFX0xFTkdUSCArIENIRUNLU1VNX0xFTkdUSCAqIDI7XG5mdW5jdGlvbiBzcGxpdE1lc3NhZ2UoeyBieXRlTGVuZ3RoLCBieXRlT2Zmc2V0LCBidWZmZXIgfSkge1xuICBpZiAoYnl0ZUxlbmd0aCA8IE1JTklNVU1fTUVTU0FHRV9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBtZXNzYWdlIHRvbyBzaG9ydCB0byBhY2NvbW1vZGF0ZSBldmVudCBzdHJlYW0gbWVzc2FnZSBvdmVyaGVhZFwiKTtcbiAgfVxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSB2aWV3LmdldFVpbnQzMigwLCBmYWxzZSk7XG4gIGlmIChieXRlTGVuZ3RoICE9PSBtZXNzYWdlTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVwb3J0ZWQgbWVzc2FnZSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggcmVjZWl2ZWQgbWVzc2FnZSBsZW5ndGhcIik7XG4gIH1cbiAgY29uc3QgaGVhZGVyTGVuZ3RoID0gdmlldy5nZXRVaW50MzIoUFJFTFVERV9NRU1CRVJfTEVOR1RILCBmYWxzZSk7XG4gIGNvbnN0IGV4cGVjdGVkUHJlbHVkZUNoZWNrc3VtID0gdmlldy5nZXRVaW50MzIoUFJFTFVERV9MRU5HVEgsIGZhbHNlKTtcbiAgY29uc3QgZXhwZWN0ZWRNZXNzYWdlQ2hlY2tzdW0gPSB2aWV3LmdldFVpbnQzMihieXRlTGVuZ3RoIC0gQ0hFQ0tTVU1fTEVOR1RILCBmYWxzZSk7XG4gIGNvbnN0IGNoZWNrc3VtbWVyID0gbmV3IGltcG9ydF9jcmMzMi5DcmMzMigpLnVwZGF0ZShuZXcgVWludDhBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIFBSRUxVREVfTEVOR1RIKSk7XG4gIGlmIChleHBlY3RlZFByZWx1ZGVDaGVja3N1bSAhPT0gY2hlY2tzdW1tZXIuZGlnZXN0KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHByZWx1ZGUgY2hlY2tzdW0gc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlICgke2V4cGVjdGVkUHJlbHVkZUNoZWNrc3VtfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGNhbGN1bGF0ZWQgQ1JDMzIgY2hlY2tzdW0gKCR7Y2hlY2tzdW1tZXIuZGlnZXN0KCl9KWBcbiAgICApO1xuICB9XG4gIGNoZWNrc3VtbWVyLnVwZGF0ZShcbiAgICBuZXcgVWludDhBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQgKyBQUkVMVURFX0xFTkdUSCwgYnl0ZUxlbmd0aCAtIChQUkVMVURFX0xFTkdUSCArIENIRUNLU1VNX0xFTkdUSCkpXG4gICk7XG4gIGlmIChleHBlY3RlZE1lc3NhZ2VDaGVja3N1bSAhPT0gY2hlY2tzdW1tZXIuZGlnZXN0KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIG1lc3NhZ2UgY2hlY2tzdW0gKCR7Y2hlY2tzdW1tZXIuZGlnZXN0KCl9KSBkaWQgbm90IG1hdGNoIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiAke2V4cGVjdGVkTWVzc2FnZUNoZWNrc3VtfWBcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgaGVhZGVyczogbmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCArIFBSRUxVREVfTEVOR1RIICsgQ0hFQ0tTVU1fTEVOR1RILCBoZWFkZXJMZW5ndGgpLFxuICAgIGJvZHk6IG5ldyBVaW50OEFycmF5KFxuICAgICAgYnVmZmVyLFxuICAgICAgYnl0ZU9mZnNldCArIFBSRUxVREVfTEVOR1RIICsgQ0hFQ0tTVU1fTEVOR1RIICsgaGVhZGVyTGVuZ3RoLFxuICAgICAgbWVzc2FnZUxlbmd0aCAtIGhlYWRlckxlbmd0aCAtIChQUkVMVURFX0xFTkdUSCArIENIRUNLU1VNX0xFTkdUSCArIENIRUNLU1VNX0xFTkdUSClcbiAgICApXG4gIH07XG59XG5fX25hbWUoc3BsaXRNZXNzYWdlLCBcInNwbGl0TWVzc2FnZVwiKTtcblxuLy8gc3JjL0V2ZW50U3RyZWFtQ29kZWMudHNcbnZhciBfRXZlbnRTdHJlYW1Db2RlYyA9IGNsYXNzIF9FdmVudFN0cmVhbUNvZGVjIHtcbiAgY29uc3RydWN0b3IodG9VdGY4LCBmcm9tVXRmOCkge1xuICAgIHRoaXMuaGVhZGVyTWFyc2hhbGxlciA9IG5ldyBIZWFkZXJNYXJzaGFsbGVyKHRvVXRmOCwgZnJvbVV0ZjgpO1xuICAgIHRoaXMubWVzc2FnZUJ1ZmZlciA9IFtdO1xuICAgIHRoaXMuaXNFbmRPZlN0cmVhbSA9IGZhbHNlO1xuICB9XG4gIGZlZWQobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZUJ1ZmZlci5wdXNoKHRoaXMuZGVjb2RlKG1lc3NhZ2UpKTtcbiAgfVxuICBlbmRPZlN0cmVhbSgpIHtcbiAgICB0aGlzLmlzRW5kT2ZTdHJlYW0gPSB0cnVlO1xuICB9XG4gIGdldE1lc3NhZ2UoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZUJ1ZmZlci5wb3AoKTtcbiAgICBjb25zdCBpc0VuZE9mU3RyZWFtID0gdGhpcy5pc0VuZE9mU3RyZWFtO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG4gICAgICBpc0VuZE9mU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gaXNFbmRPZlN0cmVhbTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGdldEF2YWlsYWJsZU1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlQnVmZmVyO1xuICAgIHRoaXMubWVzc2FnZUJ1ZmZlciA9IFtdO1xuICAgIGNvbnN0IGlzRW5kT2ZTdHJlYW0gPSB0aGlzLmlzRW5kT2ZTdHJlYW07XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldE1lc3NhZ2VzKCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgICB9LFxuICAgICAgaXNFbmRPZlN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIGlzRW5kT2ZTdHJlYW07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydCBhIHN0cnVjdHVyZWQgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0YWdnZWQgaGVhZGVycyBpbnRvIGEgYmluYXJ5XG4gICAqIGV2ZW50IHN0cmVhbSBtZXNzYWdlLlxuICAgKi9cbiAgZW5jb2RlKHsgaGVhZGVyczogcmF3SGVhZGVycywgYm9keSB9KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyTWFyc2hhbGxlci5mb3JtYXQocmF3SGVhZGVycyk7XG4gICAgY29uc3QgbGVuZ3RoID0gaGVhZGVycy5ieXRlTGVuZ3RoICsgYm9keS5ieXRlTGVuZ3RoICsgMTY7XG4gICAgY29uc3Qgb3V0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KG91dC5idWZmZXIsIG91dC5ieXRlT2Zmc2V0LCBvdXQuYnl0ZUxlbmd0aCk7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBuZXcgaW1wb3J0X2NyYzMyMi5DcmMzMigpO1xuICAgIHZpZXcuc2V0VWludDMyKDAsIGxlbmd0aCwgZmFsc2UpO1xuICAgIHZpZXcuc2V0VWludDMyKDQsIGhlYWRlcnMuYnl0ZUxlbmd0aCwgZmFsc2UpO1xuICAgIHZpZXcuc2V0VWludDMyKDgsIGNoZWNrc3VtLnVwZGF0ZShvdXQuc3ViYXJyYXkoMCwgOCkpLmRpZ2VzdCgpLCBmYWxzZSk7XG4gICAgb3V0LnNldChoZWFkZXJzLCAxMik7XG4gICAgb3V0LnNldChib2R5LCBoZWFkZXJzLmJ5dGVMZW5ndGggKyAxMik7XG4gICAgdmlldy5zZXRVaW50MzIobGVuZ3RoIC0gNCwgY2hlY2tzdW0udXBkYXRlKG91dC5zdWJhcnJheSg4LCBsZW5ndGggLSA0KSkuZGlnZXN0KCksIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgYmluYXJ5IGV2ZW50IHN0cmVhbSBtZXNzYWdlIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGFuXG4gICAqIG9wYXF1ZSwgYmluYXJ5IGJvZHkgYW5kIHRhZ2dlZCwgcGFyc2VkIGhlYWRlcnMuXG4gICAqL1xuICBkZWNvZGUobWVzc2FnZSkge1xuICAgIGNvbnN0IHsgaGVhZGVycywgYm9keSB9ID0gc3BsaXRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIHJldHVybiB7IGhlYWRlcnM6IHRoaXMuaGVhZGVyTWFyc2hhbGxlci5wYXJzZShoZWFkZXJzKSwgYm9keSB9O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc3RydWN0dXJlZCBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRhZ2dlZCBoZWFkZXJzIGludG8gYSBiaW5hcnlcbiAgICogZXZlbnQgc3RyZWFtIG1lc3NhZ2UgaGVhZGVyLlxuICAgKi9cbiAgZm9ybWF0SGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyTWFyc2hhbGxlci5mb3JtYXQocmF3SGVhZGVycyk7XG4gIH1cbn07XG5fX25hbWUoX0V2ZW50U3RyZWFtQ29kZWMsIFwiRXZlbnRTdHJlYW1Db2RlY1wiKTtcbnZhciBFdmVudFN0cmVhbUNvZGVjID0gX0V2ZW50U3RyZWFtQ29kZWM7XG5cbi8vIHNyYy9NZXNzYWdlRGVjb2RlclN0cmVhbS50c1xudmFyIF9NZXNzYWdlRGVjb2RlclN0cmVhbSA9IGNsYXNzIF9NZXNzYWdlRGVjb2RlclN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNJdGVyYXRvcigpO1xuICB9XG4gIGFzeW5jICphc3luY0l0ZXJhdG9yKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgYnl0ZXMgb2YgdGhpcy5vcHRpb25zLmlucHV0U3RyZWFtKSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5vcHRpb25zLmRlY29kZXIuZGVjb2RlKGJ5dGVzKTtcbiAgICAgIHlpZWxkIGRlY29kZWQ7XG4gICAgfVxuICB9XG59O1xuX19uYW1lKF9NZXNzYWdlRGVjb2RlclN0cmVhbSwgXCJNZXNzYWdlRGVjb2RlclN0cmVhbVwiKTtcbnZhciBNZXNzYWdlRGVjb2RlclN0cmVhbSA9IF9NZXNzYWdlRGVjb2RlclN0cmVhbTtcblxuLy8gc3JjL01lc3NhZ2VFbmNvZGVyU3RyZWFtLnRzXG52YXIgX01lc3NhZ2VFbmNvZGVyU3RyZWFtID0gY2xhc3MgX01lc3NhZ2VFbmNvZGVyU3RyZWFtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0l0ZXJhdG9yKCk7XG4gIH1cbiAgYXN5bmMgKmFzeW5jSXRlcmF0b3IoKSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBtc2cgb2YgdGhpcy5vcHRpb25zLm1lc3NhZ2VTdHJlYW0pIHtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLm9wdGlvbnMuZW5jb2Rlci5lbmNvZGUobXNnKTtcbiAgICAgIHlpZWxkIGVuY29kZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuaW5jbHVkZUVuZEZyYW1lKSB7XG4gICAgICB5aWVsZCBuZXcgVWludDhBcnJheSgwKTtcbiAgICB9XG4gIH1cbn07XG5fX25hbWUoX01lc3NhZ2VFbmNvZGVyU3RyZWFtLCBcIk1lc3NhZ2VFbmNvZGVyU3RyZWFtXCIpO1xudmFyIE1lc3NhZ2VFbmNvZGVyU3RyZWFtID0gX01lc3NhZ2VFbmNvZGVyU3RyZWFtO1xuXG4vLyBzcmMvU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0udHNcbnZhciBfU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0gPSBjbGFzcyBfU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jSXRlcmF0b3IoKTtcbiAgfVxuICBhc3luYyAqYXN5bmNJdGVyYXRvcigpIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IG1lc3NhZ2Ugb2YgdGhpcy5vcHRpb25zLm1lc3NhZ2VTdHJlYW0pIHtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGF3YWl0IHRoaXMub3B0aW9ucy5kZXNlcmlhbGl6ZXIobWVzc2FnZSk7XG4gICAgICBpZiAoZGVzZXJpYWxpemVkID09PSB2b2lkIDApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgeWllbGQgZGVzZXJpYWxpemVkO1xuICAgIH1cbiAgfVxufTtcbl9fbmFtZShfU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0sIFwiU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW1cIik7XG52YXIgU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0gPSBfU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW07XG5cbi8vIHNyYy9TbWl0aHlNZXNzYWdlRW5jb2RlclN0cmVhbS50c1xudmFyIF9TbWl0aHlNZXNzYWdlRW5jb2RlclN0cmVhbSA9IGNsYXNzIF9TbWl0aHlNZXNzYWdlRW5jb2RlclN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNJdGVyYXRvcigpO1xuICB9XG4gIGFzeW5jICphc3luY0l0ZXJhdG9yKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgdGhpcy5vcHRpb25zLmlucHV0U3RyZWFtKSB7XG4gICAgICBjb25zdCBwYXlsb2FkQnVmID0gdGhpcy5vcHRpb25zLnNlcmlhbGl6ZXIoY2h1bmspO1xuICAgICAgeWllbGQgcGF5bG9hZEJ1ZjtcbiAgICB9XG4gIH1cbn07XG5fX25hbWUoX1NtaXRoeU1lc3NhZ2VFbmNvZGVyU3RyZWFtLCBcIlNtaXRoeU1lc3NhZ2VFbmNvZGVyU3RyZWFtXCIpO1xudmFyIFNtaXRoeU1lc3NhZ2VFbmNvZGVyU3RyZWFtID0gX1NtaXRoeU1lc3NhZ2VFbmNvZGVyU3RyZWFtO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgRXZlbnRTdHJlYW1Db2RlYyxcbiAgSGVhZGVyTWFyc2hhbGxlcixcbiAgSW50NjQsXG4gIE1lc3NhZ2VEZWNvZGVyU3RyZWFtLFxuICBNZXNzYWdlRW5jb2RlclN0cmVhbSxcbiAgU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0sXG4gIFNtaXRoeU1lc3NhZ2VFbmNvZGVyU3RyZWFtXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgRXZlbnRTdHJlYW1NYXJzaGFsbGVyOiAoKSA9PiBFdmVudFN0cmVhbU1hcnNoYWxsZXIsXG4gIGV2ZW50U3RyZWFtU2VyZGVQcm92aWRlcjogKCkgPT4gZXZlbnRTdHJlYW1TZXJkZVByb3ZpZGVyXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL0V2ZW50U3RyZWFtTWFyc2hhbGxlci50c1xudmFyIGltcG9ydF9ldmVudHN0cmVhbV9jb2RlYyA9IHJlcXVpcmUoXCJAc21pdGh5L2V2ZW50c3RyZWFtLWNvZGVjXCIpO1xuXG4vLyBzcmMvZ2V0Q2h1bmtlZFN0cmVhbS50c1xuZnVuY3Rpb24gZ2V0Q2h1bmtlZFN0cmVhbShzb3VyY2UpIHtcbiAgbGV0IGN1cnJlbnRNZXNzYWdlVG90YWxMZW5ndGggPSAwO1xuICBsZXQgY3VycmVudE1lc3NhZ2VQZW5kaW5nTGVuZ3RoID0gMDtcbiAgbGV0IGN1cnJlbnRNZXNzYWdlID0gbnVsbDtcbiAgbGV0IG1lc3NhZ2VMZW5ndGhCdWZmZXIgPSBudWxsO1xuICBjb25zdCBhbGxvY2F0ZU1lc3NhZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzaXplKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBzaXplICE9PSBcIm51bWJlclwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0ZWQgdG8gYWxsb2NhdGUgYW4gZXZlbnQgbWVzc2FnZSB3aGVyZSBzaXplIHdhcyBub3QgYSBudW1iZXI6IFwiICsgc2l6ZSk7XG4gICAgfVxuICAgIGN1cnJlbnRNZXNzYWdlVG90YWxMZW5ndGggPSBzaXplO1xuICAgIGN1cnJlbnRNZXNzYWdlUGVuZGluZ0xlbmd0aCA9IDQ7XG4gICAgY3VycmVudE1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICBjb25zdCBjdXJyZW50TWVzc2FnZVZpZXcgPSBuZXcgRGF0YVZpZXcoY3VycmVudE1lc3NhZ2UuYnVmZmVyKTtcbiAgICBjdXJyZW50TWVzc2FnZVZpZXcuc2V0VWludDMyKDAsIHNpemUsIGZhbHNlKTtcbiAgfSwgXCJhbGxvY2F0ZU1lc3NhZ2VcIik7XG4gIGNvbnN0IGl0ZXJhdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHNvdXJjZUl0ZXJhdG9yID0gc291cmNlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBzb3VyY2VJdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBpZiAoIWN1cnJlbnRNZXNzYWdlVG90YWxMZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE1lc3NhZ2VUb3RhbExlbmd0aCA9PT0gY3VycmVudE1lc3NhZ2VQZW5kaW5nTGVuZ3RoKSB7XG4gICAgICAgICAgeWllbGQgY3VycmVudE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJ1bmNhdGVkIGV2ZW50IG1lc3NhZ2UgcmVjZWl2ZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNodW5rTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgbGV0IGN1cnJlbnRPZmZzZXQgPSAwO1xuICAgICAgd2hpbGUgKGN1cnJlbnRPZmZzZXQgPCBjaHVua0xlbmd0aCkge1xuICAgICAgICBpZiAoIWN1cnJlbnRNZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgYnl0ZXNSZW1haW5pbmcgPSBjaHVua0xlbmd0aCAtIGN1cnJlbnRPZmZzZXQ7XG4gICAgICAgICAgaWYgKCFtZXNzYWdlTGVuZ3RoQnVmZmVyKSB7XG4gICAgICAgICAgICBtZXNzYWdlTGVuZ3RoQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG51bUJ5dGVzRm9yVG90YWwgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIDQgLSBjdXJyZW50TWVzc2FnZVBlbmRpbmdMZW5ndGgsXG4gICAgICAgICAgICAvLyByZW1haW5pbmcgYnl0ZXMgdG8gZmlsbCB0aGUgbWVzc2FnZUxlbmd0aEJ1ZmZlclxuICAgICAgICAgICAgYnl0ZXNSZW1haW5pbmdcbiAgICAgICAgICAgIC8vIGJ5dGVzIGxlZnQgaW4gY2h1bmtcbiAgICAgICAgICApO1xuICAgICAgICAgIG1lc3NhZ2VMZW5ndGhCdWZmZXIuc2V0KFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBlcnJvciBUUzI1MzI6IE9iamVjdCBpcyBwb3NzaWJseSAndW5kZWZpbmVkJyBmb3IgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlLnNsaWNlKGN1cnJlbnRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgKyBudW1CeXRlc0ZvclRvdGFsKSxcbiAgICAgICAgICAgIGN1cnJlbnRNZXNzYWdlUGVuZGluZ0xlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudE1lc3NhZ2VQZW5kaW5nTGVuZ3RoICs9IG51bUJ5dGVzRm9yVG90YWw7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBudW1CeXRlc0ZvclRvdGFsO1xuICAgICAgICAgIGlmIChjdXJyZW50TWVzc2FnZVBlbmRpbmdMZW5ndGggPCA0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgYWxsb2NhdGVNZXNzYWdlKG5ldyBEYXRhVmlldyhtZXNzYWdlTGVuZ3RoQnVmZmVyLmJ1ZmZlcikuZ2V0VWludDMyKDAsIGZhbHNlKSk7XG4gICAgICAgICAgbWVzc2FnZUxlbmd0aEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtQnl0ZXNUb1dyaXRlID0gTWF0aC5taW4oXG4gICAgICAgICAgY3VycmVudE1lc3NhZ2VUb3RhbExlbmd0aCAtIGN1cnJlbnRNZXNzYWdlUGVuZGluZ0xlbmd0aCxcbiAgICAgICAgICAvLyBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBjb21wbGV0ZSBtZXNzYWdlXG4gICAgICAgICAgY2h1bmtMZW5ndGggLSBjdXJyZW50T2Zmc2V0XG4gICAgICAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIG9yaWdpbmFsIGNodW5rXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRNZXNzYWdlLnNldChcbiAgICAgICAgICAvLyBAdHMtaWdub3JlIGVycm9yIFRTMjUzMjogT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnIGZvciB2YWx1ZVxuICAgICAgICAgIHZhbHVlLnNsaWNlKGN1cnJlbnRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgKyBudW1CeXRlc1RvV3JpdGUpLFxuICAgICAgICAgIGN1cnJlbnRNZXNzYWdlUGVuZGluZ0xlbmd0aFxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50TWVzc2FnZVBlbmRpbmdMZW5ndGggKz0gbnVtQnl0ZXNUb1dyaXRlO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IG51bUJ5dGVzVG9Xcml0ZTtcbiAgICAgICAgaWYgKGN1cnJlbnRNZXNzYWdlVG90YWxMZW5ndGggJiYgY3VycmVudE1lc3NhZ2VUb3RhbExlbmd0aCA9PT0gY3VycmVudE1lc3NhZ2VQZW5kaW5nTGVuZ3RoKSB7XG4gICAgICAgICAgeWllbGQgY3VycmVudE1lc3NhZ2U7XG4gICAgICAgICAgY3VycmVudE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgIGN1cnJlbnRNZXNzYWdlVG90YWxMZW5ndGggPSAwO1xuICAgICAgICAgIGN1cnJlbnRNZXNzYWdlUGVuZGluZ0xlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFwiaXRlcmF0b3JcIik7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogaXRlcmF0b3JcbiAgfTtcbn1cbl9fbmFtZShnZXRDaHVua2VkU3RyZWFtLCBcImdldENodW5rZWRTdHJlYW1cIik7XG5cbi8vIHNyYy9nZXRVbm1hcnNoYWxsZWRTdHJlYW0udHNcbmZ1bmN0aW9uIGdldE1lc3NhZ2VVbm1hcnNoYWxsZXIoZGVzZXJpYWxpemVyLCB0b1V0ZjgpIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICBjb25zdCB7IHZhbHVlOiBtZXNzYWdlVHlwZSB9ID0gbWVzc2FnZS5oZWFkZXJzW1wiOm1lc3NhZ2UtdHlwZVwiXTtcbiAgICBpZiAobWVzc2FnZVR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgY29uc3QgdW5tb2RlbGVkRXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5oZWFkZXJzW1wiOmVycm9yLW1lc3NhZ2VcIl0udmFsdWUgfHwgXCJVbmtub3duRXJyb3JcIik7XG4gICAgICB1bm1vZGVsZWRFcnJvci5uYW1lID0gbWVzc2FnZS5oZWFkZXJzW1wiOmVycm9yLWNvZGVcIl0udmFsdWU7XG4gICAgICB0aHJvdyB1bm1vZGVsZWRFcnJvcjtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlID09PSBcImV4Y2VwdGlvblwiKSB7XG4gICAgICBjb25zdCBjb2RlID0gbWVzc2FnZS5oZWFkZXJzW1wiOmV4Y2VwdGlvbi10eXBlXCJdLnZhbHVlO1xuICAgICAgY29uc3QgZXhjZXB0aW9uID0geyBbY29kZV06IG1lc3NhZ2UgfTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEV4Y2VwdGlvbiA9IGF3YWl0IGRlc2VyaWFsaXplcihleGNlcHRpb24pO1xuICAgICAgaWYgKGRlc2VyaWFsaXplZEV4Y2VwdGlvbi4kdW5rbm93bikge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih0b1V0ZjgobWVzc2FnZS5ib2R5KSk7XG4gICAgICAgIGVycm9yLm5hbWUgPSBjb2RlO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHRocm93IGRlc2VyaWFsaXplZEV4Y2VwdGlvbltjb2RlXTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlID09PSBcImV2ZW50XCIpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBbbWVzc2FnZS5oZWFkZXJzW1wiOmV2ZW50LXR5cGVcIl0udmFsdWVdOiBtZXNzYWdlXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYXdhaXQgZGVzZXJpYWxpemVyKGV2ZW50KTtcbiAgICAgIGlmIChkZXNlcmlhbGl6ZWQuJHVua25vd24pXG4gICAgICAgIHJldHVybjtcbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKGBVbnJlY29nbml6YWJsZSBldmVudCB0eXBlOiAke21lc3NhZ2UuaGVhZGVyc1tcIjpldmVudC10eXBlXCJdLnZhbHVlfWApO1xuICAgIH1cbiAgfTtcbn1cbl9fbmFtZShnZXRNZXNzYWdlVW5tYXJzaGFsbGVyLCBcImdldE1lc3NhZ2VVbm1hcnNoYWxsZXJcIik7XG5cbi8vIHNyYy9FdmVudFN0cmVhbU1hcnNoYWxsZXIudHNcbnZhciBfRXZlbnRTdHJlYW1NYXJzaGFsbGVyID0gY2xhc3MgX0V2ZW50U3RyZWFtTWFyc2hhbGxlciB7XG4gIGNvbnN0cnVjdG9yKHsgdXRmOEVuY29kZXIsIHV0ZjhEZWNvZGVyIH0pIHtcbiAgICB0aGlzLmV2ZW50U3RyZWFtQ29kZWMgPSBuZXcgaW1wb3J0X2V2ZW50c3RyZWFtX2NvZGVjLkV2ZW50U3RyZWFtQ29kZWModXRmOEVuY29kZXIsIHV0ZjhEZWNvZGVyKTtcbiAgICB0aGlzLnV0ZkVuY29kZXIgPSB1dGY4RW5jb2RlcjtcbiAgfVxuICBkZXNlcmlhbGl6ZShib2R5LCBkZXNlcmlhbGl6ZXIpIHtcbiAgICBjb25zdCBpbnB1dFN0cmVhbSA9IGdldENodW5rZWRTdHJlYW0oYm9keSk7XG4gICAgcmV0dXJuIG5ldyBpbXBvcnRfZXZlbnRzdHJlYW1fY29kZWMuU21pdGh5TWVzc2FnZURlY29kZXJTdHJlYW0oe1xuICAgICAgbWVzc2FnZVN0cmVhbTogbmV3IGltcG9ydF9ldmVudHN0cmVhbV9jb2RlYy5NZXNzYWdlRGVjb2RlclN0cmVhbSh7IGlucHV0U3RyZWFtLCBkZWNvZGVyOiB0aGlzLmV2ZW50U3RyZWFtQ29kZWMgfSksXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGUgJ1QnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHR5cGUgJ1JlY29yZDxzdHJpbmcsIGFueT4nXG4gICAgICBkZXNlcmlhbGl6ZXI6IGdldE1lc3NhZ2VVbm1hcnNoYWxsZXIoZGVzZXJpYWxpemVyLCB0aGlzLnV0ZkVuY29kZXIpXG4gICAgfSk7XG4gIH1cbiAgc2VyaWFsaXplKGlucHV0U3RyZWFtLCBzZXJpYWxpemVyKSB7XG4gICAgcmV0dXJuIG5ldyBpbXBvcnRfZXZlbnRzdHJlYW1fY29kZWMuTWVzc2FnZUVuY29kZXJTdHJlYW0oe1xuICAgICAgbWVzc2FnZVN0cmVhbTogbmV3IGltcG9ydF9ldmVudHN0cmVhbV9jb2RlYy5TbWl0aHlNZXNzYWdlRW5jb2RlclN0cmVhbSh7IGlucHV0U3RyZWFtLCBzZXJpYWxpemVyIH0pLFxuICAgICAgZW5jb2RlcjogdGhpcy5ldmVudFN0cmVhbUNvZGVjLFxuICAgICAgaW5jbHVkZUVuZEZyYW1lOiB0cnVlXG4gICAgfSk7XG4gIH1cbn07XG5fX25hbWUoX0V2ZW50U3RyZWFtTWFyc2hhbGxlciwgXCJFdmVudFN0cmVhbU1hcnNoYWxsZXJcIik7XG52YXIgRXZlbnRTdHJlYW1NYXJzaGFsbGVyID0gX0V2ZW50U3RyZWFtTWFyc2hhbGxlcjtcblxuLy8gc3JjL3Byb3ZpZGVyLnRzXG52YXIgZXZlbnRTdHJlYW1TZXJkZVByb3ZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gbmV3IEV2ZW50U3RyZWFtTWFyc2hhbGxlcihvcHRpb25zKSwgXCJldmVudFN0cmVhbVNlcmRlUHJvdmlkZXJcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFN0cmVhbU1hcnNoYWxsZXIsXG4gIGV2ZW50U3RyZWFtU2VyZGVQcm92aWRlclxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIEV2ZW50U3RyZWFtTWFyc2hhbGxlcjogKCkgPT4gRXZlbnRTdHJlYW1NYXJzaGFsbGVyLFxuICBldmVudFN0cmVhbVNlcmRlUHJvdmlkZXI6ICgpID0+IGV2ZW50U3RyZWFtU2VyZGVQcm92aWRlclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9FdmVudFN0cmVhbU1hcnNoYWxsZXIudHNcbnZhciBpbXBvcnRfZXZlbnRzdHJlYW1fc2VyZGVfdW5pdmVyc2FsID0gcmVxdWlyZShcIkBzbWl0aHkvZXZlbnRzdHJlYW0tc2VyZGUtdW5pdmVyc2FsXCIpO1xudmFyIGltcG9ydF9zdHJlYW0gPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuXG4vLyBzcmMvdXRpbHMudHNcbmFzeW5jIGZ1bmN0aW9uKiByZWFkYWJsZXRvSXRlcmFibGUocmVhZFN0cmVhbSkge1xuICBsZXQgc3RyZWFtRW5kZWQgPSBmYWxzZTtcbiAgbGV0IGdlbmVyYXRpb25FbmRlZCA9IGZhbHNlO1xuICBjb25zdCByZWNvcmRzID0gbmV3IEFycmF5KCk7XG4gIHJlYWRTdHJlYW0ub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgaWYgKCFzdHJlYW1FbmRlZCkge1xuICAgICAgc3RyZWFtRW5kZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9KTtcbiAgcmVhZFN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICByZWNvcmRzLnB1c2goZGF0YSk7XG4gIH0pO1xuICByZWFkU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICBzdHJlYW1FbmRlZCA9IHRydWU7XG4gIH0pO1xuICB3aGlsZSAoIWdlbmVyYXRpb25FbmRlZCkge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShyZWNvcmRzLnNoaWZ0KCkpLCAwKSk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gICAgZ2VuZXJhdGlvbkVuZGVkID0gc3RyZWFtRW5kZWQgJiYgcmVjb3Jkcy5sZW5ndGggPT09IDA7XG4gIH1cbn1cbl9fbmFtZShyZWFkYWJsZXRvSXRlcmFibGUsIFwicmVhZGFibGV0b0l0ZXJhYmxlXCIpO1xuXG4vLyBzcmMvRXZlbnRTdHJlYW1NYXJzaGFsbGVyLnRzXG52YXIgX0V2ZW50U3RyZWFtTWFyc2hhbGxlciA9IGNsYXNzIF9FdmVudFN0cmVhbU1hcnNoYWxsZXIge1xuICBjb25zdHJ1Y3Rvcih7IHV0ZjhFbmNvZGVyLCB1dGY4RGVjb2RlciB9KSB7XG4gICAgdGhpcy51bml2ZXJzYWxNYXJzaGFsbGVyID0gbmV3IGltcG9ydF9ldmVudHN0cmVhbV9zZXJkZV91bml2ZXJzYWwuRXZlbnRTdHJlYW1NYXJzaGFsbGVyKHtcbiAgICAgIHV0ZjhEZWNvZGVyLFxuICAgICAgdXRmOEVuY29kZXJcbiAgICB9KTtcbiAgfVxuICBkZXNlcmlhbGl6ZShib2R5LCBkZXNlcmlhbGl6ZXIpIHtcbiAgICBjb25zdCBib2R5SXRlcmFibGUgPSB0eXBlb2YgYm9keVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIiA/IGJvZHkgOiByZWFkYWJsZXRvSXRlcmFibGUoYm9keSk7XG4gICAgcmV0dXJuIHRoaXMudW5pdmVyc2FsTWFyc2hhbGxlci5kZXNlcmlhbGl6ZShib2R5SXRlcmFibGUsIGRlc2VyaWFsaXplcik7XG4gIH1cbiAgc2VyaWFsaXplKGlucHV0LCBzZXJpYWxpemVyKSB7XG4gICAgcmV0dXJuIGltcG9ydF9zdHJlYW0uUmVhZGFibGUuZnJvbSh0aGlzLnVuaXZlcnNhbE1hcnNoYWxsZXIuc2VyaWFsaXplKGlucHV0LCBzZXJpYWxpemVyKSk7XG4gIH1cbn07XG5fX25hbWUoX0V2ZW50U3RyZWFtTWFyc2hhbGxlciwgXCJFdmVudFN0cmVhbU1hcnNoYWxsZXJcIik7XG52YXIgRXZlbnRTdHJlYW1NYXJzaGFsbGVyID0gX0V2ZW50U3RyZWFtTWFyc2hhbGxlcjtcblxuLy8gc3JjL3Byb3ZpZGVyLnRzXG52YXIgZXZlbnRTdHJlYW1TZXJkZVByb3ZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gbmV3IEV2ZW50U3RyZWFtTWFyc2hhbGxlcihvcHRpb25zKSwgXCJldmVudFN0cmVhbVNlcmRlUHJvdmlkZXJcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFN0cmVhbU1hcnNoYWxsZXIsXG4gIGV2ZW50U3RyZWFtU2VyZGVQcm92aWRlclxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGlzQXJyYXlCdWZmZXI6ICgpID0+IGlzQXJyYXlCdWZmZXJcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xudmFyIGlzQXJyYXlCdWZmZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhcmcpID0+IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIGFyZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCIsIFwiaXNBcnJheUJ1ZmZlclwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXlCdWZmZXJcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBmcm9tQXJyYXlCdWZmZXI6ICgpID0+IGZyb21BcnJheUJ1ZmZlcixcbiAgZnJvbVN0cmluZzogKCkgPT4gZnJvbVN0cmluZ1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X2lzX2FycmF5X2J1ZmZlciA9IHJlcXVpcmUoXCJAc21pdGh5L2lzLWFycmF5LWJ1ZmZlclwiKTtcbnZhciBpbXBvcnRfYnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKTtcbnZhciBmcm9tQXJyYXlCdWZmZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbnB1dCwgb2Zmc2V0ID0gMCwgbGVuZ3RoID0gaW5wdXQuYnl0ZUxlbmd0aCAtIG9mZnNldCkgPT4ge1xuICBpZiAoISgwLCBpbXBvcnRfaXNfYXJyYXlfYnVmZmVyLmlzQXJyYXlCdWZmZXIpKGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcImlucHV0XCIgYXJndW1lbnQgbXVzdCBiZSBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBpbnB1dH0gKCR7aW5wdXR9KWApO1xuICB9XG4gIHJldHVybiBpbXBvcnRfYnVmZmVyLkJ1ZmZlci5mcm9tKGlucHV0LCBvZmZzZXQsIGxlbmd0aCk7XG59LCBcImZyb21BcnJheUJ1ZmZlclwiKTtcbnZhciBmcm9tU3RyaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQsIGVuY29kaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgXCJpbnB1dFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaW5wdXR9ICgke2lucHV0fSlgKTtcbiAgfVxuICByZXR1cm4gZW5jb2RpbmcgPyBpbXBvcnRfYnVmZmVyLkJ1ZmZlci5mcm9tKGlucHV0LCBlbmNvZGluZykgOiBpbXBvcnRfYnVmZmVyLkJ1ZmZlci5mcm9tKGlucHV0KTtcbn0sIFwiZnJvbVN0cmluZ1wiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZyb21BcnJheUJ1ZmZlcixcbiAgZnJvbVN0cmluZ1xufSk7XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21CYXNlNjQgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tXCIpO1xuY29uc3QgQkFTRTY0X1JFR0VYID0gL15bQS1aYS16MC05Ky9dKj17MCwyfSQvO1xuY29uc3QgZnJvbUJhc2U2NCA9IChpbnB1dCkgPT4ge1xuICAgIGlmICgoaW5wdXQubGVuZ3RoICogMykgJSA0ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEluY29ycmVjdCBwYWRkaW5nIG9uIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgfVxuICAgIGlmICghQkFTRTY0X1JFR0VYLmV4ZWMoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gKDAsIHV0aWxfYnVmZmVyX2Zyb21fMS5mcm9tU3RyaW5nKShpbnB1dCwgXCJiYXNlNjRcIik7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCk7XG59O1xuZXhwb3J0cy5mcm9tQmFzZTY0ID0gZnJvbUJhc2U2NDtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGZyb21VdGY4OiAoKSA9PiBmcm9tVXRmOCxcbiAgdG9VaW50OEFycmF5OiAoKSA9PiB0b1VpbnQ4QXJyYXksXG4gIHRvVXRmODogKCkgPT4gdG9VdGY4XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2Zyb21VdGY4LnRzXG52YXIgaW1wb3J0X3V0aWxfYnVmZmVyX2Zyb20gPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tXCIpO1xudmFyIGZyb21VdGY4ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQpID0+IHtcbiAgY29uc3QgYnVmID0gKDAsIGltcG9ydF91dGlsX2J1ZmZlcl9mcm9tLmZyb21TdHJpbmcpKGlucHV0LCBcInV0ZjhcIik7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGggLyBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UKTtcbn0sIFwiZnJvbVV0ZjhcIik7XG5cbi8vIHNyYy90b1VpbnQ4QXJyYXkudHNcbnZhciB0b1VpbnQ4QXJyYXkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkYXRhKSA9PiB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBmcm9tVXRmOChkYXRhKTtcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCAvIFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbn0sIFwidG9VaW50OEFycmF5XCIpO1xuXG4vLyBzcmMvdG9VdGY4LnRzXG5cbnZhciB0b1V0ZjggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbnB1dCkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGlucHV0LmJ5dGVPZmZzZXQgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGlucHV0LmJ5dGVMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJAc21pdGh5L3V0aWwtdXRmODogdG9VdGY4IGVuY29kZXIgZnVuY3Rpb24gb25seSBhY2NlcHRzIHN0cmluZyB8IFVpbnQ4QXJyYXkuXCIpO1xuICB9XG4gIHJldHVybiAoMCwgaW1wb3J0X3V0aWxfYnVmZmVyX2Zyb20uZnJvbUFycmF5QnVmZmVyKShpbnB1dC5idWZmZXIsIGlucHV0LmJ5dGVPZmZzZXQsIGlucHV0LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKFwidXRmOFwiKTtcbn0sIFwidG9VdGY4XCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZnJvbVV0ZjgsXG4gIHRvVWludDhBcnJheSxcbiAgdG9VdGY4XG59KTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9CYXNlNjQgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tXCIpO1xuY29uc3QgdXRpbF91dGY4XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG5jb25zdCB0b0Jhc2U2NCA9IChfaW5wdXQpID0+IHtcbiAgICBsZXQgaW5wdXQ7XG4gICAgaWYgKHR5cGVvZiBfaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaW5wdXQgPSAoMCwgdXRpbF91dGY4XzEuZnJvbVV0ZjgpKF9pbnB1dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpbnB1dCA9IF9pbnB1dDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgaW5wdXQuYnl0ZU9mZnNldCAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgaW5wdXQuYnl0ZUxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJAc21pdGh5L3V0aWwtYmFzZTY0OiB0b0Jhc2U2NCBlbmNvZGVyIGZ1bmN0aW9uIG9ubHkgYWNjZXB0cyBzdHJpbmcgfCBVaW50OEFycmF5LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCB1dGlsX2J1ZmZlcl9mcm9tXzEuZnJvbUFycmF5QnVmZmVyKShpbnB1dC5idWZmZXIsIGlucHV0LmJ5dGVPZmZzZXQsIGlucHV0LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufTtcbmV4cG9ydHMudG9CYXNlNjQgPSB0b0Jhc2U2NDtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX19yZUV4cG9ydCA9ICh0YXJnZXQsIG1vZCwgc2Vjb25kVGFyZ2V0KSA9PiAoX19jb3B5UHJvcHModGFyZ2V0LCBtb2QsIFwiZGVmYXVsdFwiKSwgc2Vjb25kVGFyZ2V0ICYmIF9fY29weVByb3BzKHNlY29uZFRhcmdldCwgbW9kLCBcImRlZmF1bHRcIikpO1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5fX3JlRXhwb3J0KHNyY19leHBvcnRzLCByZXF1aXJlKFwiLi8uL2Zyb21CYXNlNjRcIiksIG1vZHVsZS5leHBvcnRzKTtcbl9fcmVFeHBvcnQoc3JjX2V4cG9ydHMsIHJlcXVpcmUoXCIuLy4vdG9CYXNlNjRcIiksIG1vZHVsZS5leHBvcnRzKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZyb21CYXNlNjQsXG4gIHRvQmFzZTY0XG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgZXNjYXBlVXJpOiAoKSA9PiBlc2NhcGVVcmksXG4gIGVzY2FwZVVyaVBhdGg6ICgpID0+IGVzY2FwZVVyaVBhdGhcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvZXNjYXBlLXVyaS50c1xudmFyIGVzY2FwZVVyaSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVyaSkgPT4gKFxuICAvLyBBV1MgcGVyY2VudC1lbmNvZGVzIHNvbWUgZXh0cmEgbm9uLXN0YW5kYXJkIGNoYXJhY3RlcnMgaW4gYSBVUklcbiAgZW5jb2RlVVJJQ29tcG9uZW50KHVyaSkucmVwbGFjZSgvWyEnKCkqXS9nLCBoZXhFbmNvZGUpXG4pLCBcImVzY2FwZVVyaVwiKTtcbnZhciBoZXhFbmNvZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjKSA9PiBgJSR7Yy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWAsIFwiaGV4RW5jb2RlXCIpO1xuXG4vLyBzcmMvZXNjYXBlLXVyaS1wYXRoLnRzXG52YXIgZXNjYXBlVXJpUGF0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVyaSkgPT4gdXJpLnNwbGl0KFwiL1wiKS5tYXAoZXNjYXBlVXJpKS5qb2luKFwiL1wiKSwgXCJlc2NhcGVVcmlQYXRoXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXNjYXBlVXJpLFxuICBlc2NhcGVVcmlQYXRoXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgYnVpbGRRdWVyeVN0cmluZzogKCkgPT4gYnVpbGRRdWVyeVN0cmluZ1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXJpLWVzY2FwZVwiKTtcbmZ1bmN0aW9uIGJ1aWxkUXVlcnlTdHJpbmcocXVlcnkpIHtcbiAgY29uc3QgcGFydHMgPSBbXTtcbiAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHF1ZXJ5KS5zb3J0KCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG4gICAga2V5ID0gKDAsIGltcG9ydF91dGlsX3VyaV9lc2NhcGUuZXNjYXBlVXJpKShrZXkpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGlMZW4gPSB2YWx1ZS5sZW5ndGg7IGkgPCBpTGVuOyBpKyspIHtcbiAgICAgICAgcGFydHMucHVzaChgJHtrZXl9PSR7KDAsIGltcG9ydF91dGlsX3VyaV9lc2NhcGUuZXNjYXBlVXJpKSh2YWx1ZVtpXSl9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBxc0VudHJ5ID0ga2V5O1xuICAgICAgaWYgKHZhbHVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBxc0VudHJ5ICs9IGA9JHsoMCwgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZS5lc2NhcGVVcmkpKHZhbHVlKX1gO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaChxc0VudHJ5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oXCImXCIpO1xufVxuX19uYW1lKGJ1aWxkUXVlcnlTdHJpbmcsIFwiYnVpbGRRdWVyeVN0cmluZ1wiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGJ1aWxkUXVlcnlTdHJpbmdcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBGZXRjaEh0dHBIYW5kbGVyOiAoKSA9PiBGZXRjaEh0dHBIYW5kbGVyLFxuICBrZWVwQWxpdmVTdXBwb3J0OiAoKSA9PiBrZWVwQWxpdmVTdXBwb3J0LFxuICBzdHJlYW1Db2xsZWN0b3I6ICgpID0+IHN0cmVhbUNvbGxlY3RvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9mZXRjaC1odHRwLWhhbmRsZXIudHNcbnZhciBpbXBvcnRfcHJvdG9jb2xfaHR0cCA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3RvY29sLWh0dHBcIik7XG52YXIgaW1wb3J0X3F1ZXJ5c3RyaW5nX2J1aWxkZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9xdWVyeXN0cmluZy1idWlsZGVyXCIpO1xuXG4vLyBzcmMvcmVxdWVzdC10aW1lb3V0LnRzXG5mdW5jdGlvbiByZXF1ZXN0VGltZW91dCh0aW1lb3V0SW5NcyA9IDApIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodGltZW91dEluTXMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYFJlcXVlc3QgZGlkIG5vdCBjb21wbGV0ZSB3aXRoaW4gJHt0aW1lb3V0SW5Nc30gbXNgKTtcbiAgICAgICAgdGltZW91dEVycm9yLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiO1xuICAgICAgICByZWplY3QodGltZW91dEVycm9yKTtcbiAgICAgIH0sIHRpbWVvdXRJbk1zKTtcbiAgICB9XG4gIH0pO1xufVxuX19uYW1lKHJlcXVlc3RUaW1lb3V0LCBcInJlcXVlc3RUaW1lb3V0XCIpO1xuXG4vLyBzcmMvZmV0Y2gtaHR0cC1oYW5kbGVyLnRzXG52YXIga2VlcEFsaXZlU3VwcG9ydCA9IHtcbiAgc3VwcG9ydGVkOiBCb29sZWFuKHR5cGVvZiBSZXF1ZXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFwia2VlcGFsaXZlXCIgaW4gbmV3IFJlcXVlc3QoXCJodHRwczovL1s6OjFdXCIpKVxufTtcbnZhciBfRmV0Y2hIdHRwSGFuZGxlciA9IGNsYXNzIF9GZXRjaEh0dHBIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCBpcyBhbiBIdHRwSGFuZGxlciBvZiBhbnkgY2xhc3MsXG4gICAqIG9yIGluc3RhbnRpYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGhhbmRsZXIuXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKGluc3RhbmNlT3JPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiAoaW5zdGFuY2VPck9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGluc3RhbmNlT3JPcHRpb25zLmhhbmRsZSkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGluc3RhbmNlT3JPcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9GZXRjaEh0dHBIYW5kbGVyKGluc3RhbmNlT3JPcHRpb25zKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSBvcHRpb25zKCkudGhlbigob3B0cykgPT4gb3B0cyB8fCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnID0gb3B0aW9ucyA/PyB7fTtcbiAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSBQcm9taXNlLnJlc29sdmUodGhpcy5jb25maWcpO1xuICAgIH1cbiAgfVxuICBkZXN0cm95KCkge1xuICB9XG4gIGFzeW5jIGhhbmRsZShyZXF1ZXN0LCB7IGFib3J0U2lnbmFsIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWdQcm92aWRlcjtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdFRpbWVvdXRJbk1zID0gdGhpcy5jb25maWcucmVxdWVzdFRpbWVvdXQ7XG4gICAgY29uc3Qga2VlcEFsaXZlID0gdGhpcy5jb25maWcua2VlcEFsaXZlID09PSB0cnVlO1xuICAgIGlmIChhYm9ydFNpZ25hbCA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgIGFib3J0RXJyb3IubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpO1xuICAgIH1cbiAgICBsZXQgcGF0aCA9IHJlcXVlc3QucGF0aDtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9ICgwLCBpbXBvcnRfcXVlcnlzdHJpbmdfYnVpbGRlci5idWlsZFF1ZXJ5U3RyaW5nKShyZXF1ZXN0LnF1ZXJ5IHx8IHt9KTtcbiAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgIHBhdGggKz0gYD8ke3F1ZXJ5U3RyaW5nfWA7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmZyYWdtZW50KSB7XG4gICAgICBwYXRoICs9IGAjJHtyZXF1ZXN0LmZyYWdtZW50fWA7XG4gICAgfVxuICAgIGxldCBhdXRoID0gXCJcIjtcbiAgICBpZiAocmVxdWVzdC51c2VybmFtZSAhPSBudWxsIHx8IHJlcXVlc3QucGFzc3dvcmQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSByZXF1ZXN0LnVzZXJuYW1lID8/IFwiXCI7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IHJlcXVlc3QucGFzc3dvcmQgPz8gXCJcIjtcbiAgICAgIGF1dGggPSBgJHt1c2VybmFtZX06JHtwYXNzd29yZH1AYDtcbiAgICB9XG4gICAgY29uc3QgeyBwb3J0LCBtZXRob2QgfSA9IHJlcXVlc3Q7XG4gICAgY29uc3QgdXJsID0gYCR7cmVxdWVzdC5wcm90b2NvbH0vLyR7YXV0aH0ke3JlcXVlc3QuaG9zdG5hbWV9JHtwb3J0ID8gYDoke3BvcnR9YCA6IFwiXCJ9JHtwYXRofWA7XG4gICAgY29uc3QgYm9keSA9IG1ldGhvZCA9PT0gXCJHRVRcIiB8fCBtZXRob2QgPT09IFwiSEVBRFwiID8gdm9pZCAwIDogcmVxdWVzdC5ib2R5O1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0geyBib2R5LCBoZWFkZXJzOiBuZXcgSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLCBtZXRob2QgfTtcbiAgICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmVxdWVzdE9wdGlvbnNbXCJzaWduYWxcIl0gPSBhYm9ydFNpZ25hbDtcbiAgICB9XG4gICAgaWYgKGtlZXBBbGl2ZVN1cHBvcnQuc3VwcG9ydGVkKSB7XG4gICAgICByZXF1ZXN0T3B0aW9uc1tcImtlZXBhbGl2ZVwiXSA9IGtlZXBBbGl2ZTtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgY29uc3QgcmFjZU9mUHJvbWlzZXMgPSBbXG4gICAgICBmZXRjaChmZXRjaFJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZldGNoSGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkSGVhZGVycyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZmV0Y2hIZWFkZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgIHRyYW5zZm9ybWVkSGVhZGVyc1twYWlyWzBdXSA9IHBhaXJbMV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzUmVhZGFibGVTdHJlYW0gPSByZXNwb25zZS5ib2R5ICE9IHZvaWQgMDtcbiAgICAgICAgaWYgKCFoYXNSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCkudGhlbigoYm9keTIpID0+ICh7XG4gICAgICAgICAgICByZXNwb25zZTogbmV3IGltcG9ydF9wcm90b2NvbF9odHRwLkh0dHBSZXNwb25zZSh7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IHRyYW5zZm9ybWVkSGVhZGVycyxcbiAgICAgICAgICAgICAgcmVhc29uOiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgIGJvZHk6IGJvZHkyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3BvbnNlOiBuZXcgaW1wb3J0X3Byb3RvY29sX2h0dHAuSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHRyYW5zZm9ybWVkSGVhZGVycyxcbiAgICAgICAgICAgIHJlYXNvbjogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlLmJvZHlcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICByZXF1ZXN0VGltZW91dChyZXF1ZXN0VGltZW91dEluTXMpXG4gICAgXTtcbiAgICBpZiAoYWJvcnRTaWduYWwpIHtcbiAgICAgIHJhY2VPZlByb21pc2VzLnB1c2goXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBhYm9ydFNpZ25hbC5vbmFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKHJhY2VPZlByb21pc2VzKTtcbiAgfVxuICB1cGRhdGVIdHRwQ2xpZW50Q29uZmlnKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbmZpZ1Byb3ZpZGVyID0gdGhpcy5jb25maWdQcm92aWRlci50aGVuKChjb25maWcpID0+IHtcbiAgICAgIGNvbmZpZ1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH0pO1xuICB9XG4gIGh0dHBIYW5kbGVyQ29uZmlncygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcgPz8ge307XG4gIH1cbn07XG5fX25hbWUoX0ZldGNoSHR0cEhhbmRsZXIsIFwiRmV0Y2hIdHRwSGFuZGxlclwiKTtcbnZhciBGZXRjaEh0dHBIYW5kbGVyID0gX0ZldGNoSHR0cEhhbmRsZXI7XG5cbi8vIHNyYy9zdHJlYW0tY29sbGVjdG9yLnRzXG52YXIgaW1wb3J0X3V0aWxfYmFzZTY0ID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1iYXNlNjRcIik7XG52YXIgc3RyZWFtQ29sbGVjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RyZWFtKSA9PiB7XG4gIGlmICh0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmIHN0cmVhbSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4gY29sbGVjdEJsb2Ioc3RyZWFtKTtcbiAgfVxuICByZXR1cm4gY29sbGVjdFN0cmVhbShzdHJlYW0pO1xufSwgXCJzdHJlYW1Db2xsZWN0b3JcIik7XG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QmxvYihibG9iKSB7XG4gIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHJlYWRUb0Jhc2U2NChibG9iKTtcbiAgY29uc3QgYXJyYXlCdWZmZXIgPSAoMCwgaW1wb3J0X3V0aWxfYmFzZTY0LmZyb21CYXNlNjQpKGJhc2U2NCk7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG59XG5fX25hbWUoY29sbGVjdEJsb2IsIFwiY29sbGVjdEJsb2JcIik7XG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0U3RyZWFtKHN0cmVhbSkge1xuICBsZXQgcmVzID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgbGV0IGlzRG9uZSA9IGZhbHNlO1xuICB3aGlsZSAoIWlzRG9uZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmlvciA9IHJlcztcbiAgICAgIHJlcyA9IG5ldyBVaW50OEFycmF5KHByaW9yLmxlbmd0aCArIHZhbHVlLmxlbmd0aCk7XG4gICAgICByZXMuc2V0KHByaW9yKTtcbiAgICAgIHJlcy5zZXQodmFsdWUsIHByaW9yLmxlbmd0aCk7XG4gICAgfVxuICAgIGlzRG9uZSA9IGRvbmU7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbl9fbmFtZShjb2xsZWN0U3RyZWFtLCBcImNvbGxlY3RTdHJlYW1cIik7XG5mdW5jdGlvbiByZWFkVG9CYXNlNjQoYmxvYikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWFkZXIucmVhZHlTdGF0ZSAhPT0gMikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIlJlYWRlciBhYm9ydGVkIHRvbyBlYXJseVwiKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVzdWx0ID8/IFwiXCI7XG4gICAgICBjb25zdCBjb21tYUluZGV4ID0gcmVzdWx0LmluZGV4T2YoXCIsXCIpO1xuICAgICAgY29uc3QgZGF0YU9mZnNldCA9IGNvbW1hSW5kZXggPiAtMSA/IGNvbW1hSW5kZXggKyAxIDogcmVzdWx0Lmxlbmd0aDtcbiAgICAgIHJlc29sdmUocmVzdWx0LnN1YnN0cmluZyhkYXRhT2Zmc2V0KSk7XG4gICAgfTtcbiAgICByZWFkZXIub25hYm9ydCA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJSZWFkIGFib3J0ZWRcIikpO1xuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gIH0pO1xufVxuX19uYW1lKHJlYWRUb0Jhc2U2NCwgXCJyZWFkVG9CYXNlNjRcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBrZWVwQWxpdmVTdXBwb3J0LFxuICBGZXRjaEh0dHBIYW5kbGVyLFxuICBzdHJlYW1Db2xsZWN0b3Jcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBjb25zdHJ1Y3RTdGFjazogKCkgPT4gY29uc3RydWN0U3RhY2tcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvTWlkZGxld2FyZVN0YWNrLnRzXG52YXIgZ2V0QWxsQWxpYXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5hbWUsIGFsaWFzZXMpID0+IHtcbiAgY29uc3QgX2FsaWFzZXMgPSBbXTtcbiAgaWYgKG5hbWUpIHtcbiAgICBfYWxpYXNlcy5wdXNoKG5hbWUpO1xuICB9XG4gIGlmIChhbGlhc2VzKSB7XG4gICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICBfYWxpYXNlcy5wdXNoKGFsaWFzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9hbGlhc2VzO1xufSwgXCJnZXRBbGxBbGlhc2VzXCIpO1xudmFyIGdldE1pZGRsZXdhcmVOYW1lV2l0aEFsaWFzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChuYW1lLCBhbGlhc2VzKSA9PiB7XG4gIHJldHVybiBgJHtuYW1lIHx8IFwiYW5vbnltb3VzXCJ9JHthbGlhc2VzICYmIGFsaWFzZXMubGVuZ3RoID4gMCA/IGAgKGEuay5hLiAke2FsaWFzZXMuam9pbihcIixcIil9KWAgOiBcIlwifWA7XG59LCBcImdldE1pZGRsZXdhcmVOYW1lV2l0aEFsaWFzZXNcIik7XG52YXIgY29uc3RydWN0U3RhY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgbGV0IGFic29sdXRlRW50cmllcyA9IFtdO1xuICBsZXQgcmVsYXRpdmVFbnRyaWVzID0gW107XG4gIGxldCBpZGVudGlmeU9uUmVzb2x2ZSA9IGZhbHNlO1xuICBjb25zdCBlbnRyaWVzTmFtZVNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGNvbnN0IHNvcnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbnRyaWVzKSA9PiBlbnRyaWVzLnNvcnQoXG4gICAgKGEsIGIpID0+IHN0ZXBXZWlnaHRzW2Iuc3RlcF0gLSBzdGVwV2VpZ2h0c1thLnN0ZXBdIHx8IHByaW9yaXR5V2VpZ2h0c1tiLnByaW9yaXR5IHx8IFwibm9ybWFsXCJdIC0gcHJpb3JpdHlXZWlnaHRzW2EucHJpb3JpdHkgfHwgXCJub3JtYWxcIl1cbiAgKSwgXCJzb3J0XCIpO1xuICBjb25zdCByZW1vdmVCeU5hbWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0b1JlbW92ZSkgPT4ge1xuICAgIGxldCBpc1JlbW92ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXJDYiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gZ2V0QWxsQWxpYXNlcyhlbnRyeS5uYW1lLCBlbnRyeS5hbGlhc2VzKTtcbiAgICAgIGlmIChhbGlhc2VzLmluY2x1ZGVzKHRvUmVtb3ZlKSkge1xuICAgICAgICBpc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICBlbnRyaWVzTmFtZVNldC5kZWxldGUoYWxpYXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwiZmlsdGVyQ2JcIik7XG4gICAgYWJzb2x1dGVFbnRyaWVzID0gYWJzb2x1dGVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgcmVsYXRpdmVFbnRyaWVzID0gcmVsYXRpdmVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgcmV0dXJuIGlzUmVtb3ZlZDtcbiAgfSwgXCJyZW1vdmVCeU5hbWVcIik7XG4gIGNvbnN0IHJlbW92ZUJ5UmVmZXJlbmNlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodG9SZW1vdmUpID0+IHtcbiAgICBsZXQgaXNSZW1vdmVkID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyQ2IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5Lm1pZGRsZXdhcmUgPT09IHRvUmVtb3ZlKSB7XG4gICAgICAgIGlzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgZ2V0QWxsQWxpYXNlcyhlbnRyeS5uYW1lLCBlbnRyeS5hbGlhc2VzKSkge1xuICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmRlbGV0ZShhbGlhcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJmaWx0ZXJDYlwiKTtcbiAgICBhYnNvbHV0ZUVudHJpZXMgPSBhYnNvbHV0ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICByZWxhdGl2ZUVudHJpZXMgPSByZWxhdGl2ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICByZXR1cm4gaXNSZW1vdmVkO1xuICB9LCBcInJlbW92ZUJ5UmVmZXJlbmNlXCIpO1xuICBjb25zdCBjbG9uZVRvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodG9TdGFjaykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBhYnNvbHV0ZUVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgIHRvU3RhY2suYWRkKGVudHJ5Lm1pZGRsZXdhcmUsIHsgLi4uZW50cnkgfSk7XG4gICAgfSk7XG4gICAgcmVsYXRpdmVFbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICB0b1N0YWNrLmFkZFJlbGF0aXZlVG8oZW50cnkubWlkZGxld2FyZSwgeyAuLi5lbnRyeSB9KTtcbiAgICB9KTtcbiAgICAoX2EgPSB0b1N0YWNrLmlkZW50aWZ5T25SZXNvbHZlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbCh0b1N0YWNrLCBzdGFjay5pZGVudGlmeU9uUmVzb2x2ZSgpKTtcbiAgICByZXR1cm4gdG9TdGFjaztcbiAgfSwgXCJjbG9uZVRvXCIpO1xuICBjb25zdCBleHBhbmRSZWxhdGl2ZU1pZGRsZXdhcmVMaXN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZnJvbSkgPT4ge1xuICAgIGNvbnN0IGV4cGFuZGVkTWlkZGxld2FyZUxpc3QgPSBbXTtcbiAgICBmcm9tLmJlZm9yZS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmJlZm9yZS5sZW5ndGggPT09IDAgJiYgZW50cnkuYWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goLi4uZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdChlbnRyeSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChmcm9tKTtcbiAgICBmcm9tLmFmdGVyLnJldmVyc2UoKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmJlZm9yZS5sZW5ndGggPT09IDAgJiYgZW50cnkuYWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goLi4uZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdChlbnRyeSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBleHBhbmRlZE1pZGRsZXdhcmVMaXN0O1xuICB9LCBcImV4cGFuZFJlbGF0aXZlTWlkZGxld2FyZUxpc3RcIik7XG4gIGNvbnN0IGdldE1pZGRsZXdhcmVMaXN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGVidWcgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRBYnNvbHV0ZUVudHJpZXMgPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkUmVsYXRpdmVFbnRyaWVzID0gW107XG4gICAgY29uc3Qgbm9ybWFsaXplZEVudHJpZXNOYW1lTWFwID0ge307XG4gICAgYWJzb2x1dGVFbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICBhZnRlcjogW11cbiAgICAgIH07XG4gICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGdldEFsbEFsaWFzZXMobm9ybWFsaXplZEVudHJ5Lm5hbWUsIG5vcm1hbGl6ZWRFbnRyeS5hbGlhc2VzKSkge1xuICAgICAgICBub3JtYWxpemVkRW50cmllc05hbWVNYXBbYWxpYXNdID0gbm9ybWFsaXplZEVudHJ5O1xuICAgICAgfVxuICAgICAgbm9ybWFsaXplZEFic29sdXRlRW50cmllcy5wdXNoKG5vcm1hbGl6ZWRFbnRyeSk7XG4gICAgfSk7XG4gICAgcmVsYXRpdmVFbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICBhZnRlcjogW11cbiAgICAgIH07XG4gICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGdldEFsbEFsaWFzZXMobm9ybWFsaXplZEVudHJ5Lm5hbWUsIG5vcm1hbGl6ZWRFbnRyeS5hbGlhc2VzKSkge1xuICAgICAgICBub3JtYWxpemVkRW50cmllc05hbWVNYXBbYWxpYXNdID0gbm9ybWFsaXplZEVudHJ5O1xuICAgICAgfVxuICAgICAgbm9ybWFsaXplZFJlbGF0aXZlRW50cmllcy5wdXNoKG5vcm1hbGl6ZWRFbnRyeSk7XG4gICAgfSk7XG4gICAgbm9ybWFsaXplZFJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5LnRvTWlkZGxld2FyZSkge1xuICAgICAgICBjb25zdCB0b01pZGRsZXdhcmUgPSBub3JtYWxpemVkRW50cmllc05hbWVNYXBbZW50cnkudG9NaWRkbGV3YXJlXTtcbiAgICAgICAgaWYgKHRvTWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke2VudHJ5LnRvTWlkZGxld2FyZX0gaXMgbm90IGZvdW5kIHdoZW4gYWRkaW5nICR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyhlbnRyeS5uYW1lLCBlbnRyeS5hbGlhc2VzKX0gbWlkZGxld2FyZSAke2VudHJ5LnJlbGF0aW9ufSAke2VudHJ5LnRvTWlkZGxld2FyZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkucmVsYXRpb24gPT09IFwiYWZ0ZXJcIikge1xuICAgICAgICAgIHRvTWlkZGxld2FyZS5hZnRlci5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkucmVsYXRpb24gPT09IFwiYmVmb3JlXCIpIHtcbiAgICAgICAgICB0b01pZGRsZXdhcmUuYmVmb3JlLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbWFpbkNoYWluID0gc29ydChub3JtYWxpemVkQWJzb2x1dGVFbnRyaWVzKS5tYXAoZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdCkucmVkdWNlKCh3aG9sZUxpc3QsIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QpID0+IHtcbiAgICAgIHdob2xlTGlzdC5wdXNoKC4uLmV4cGFuZGVkTWlkZGxld2FyZUxpc3QpO1xuICAgICAgcmV0dXJuIHdob2xlTGlzdDtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIG1haW5DaGFpbjtcbiAgfSwgXCJnZXRNaWRkbGV3YXJlTGlzdFwiKTtcbiAgY29uc3Qgc3RhY2sgPSB7XG4gICAgYWRkOiAobWlkZGxld2FyZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUsIG92ZXJyaWRlLCBhbGlhc2VzOiBfYWxpYXNlcyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBzdGVwOiBcImluaXRpYWxpemVcIixcbiAgICAgICAgcHJpb3JpdHk6IFwibm9ybWFsXCIsXG4gICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH07XG4gICAgICBjb25zdCBhbGlhc2VzID0gZ2V0QWxsQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyk7XG4gICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChhbGlhc2VzLnNvbWUoKGFsaWFzKSA9PiBlbnRyaWVzTmFtZVNldC5oYXMoYWxpYXMpKSkge1xuICAgICAgICAgIGlmICghb3ZlcnJpZGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBtaWRkbGV3YXJlIG5hbWUgJyR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyl9J2ApO1xuICAgICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgYWxpYXNlcykge1xuICAgICAgICAgICAgY29uc3QgdG9PdmVycmlkZUluZGV4ID0gYWJzb2x1dGVFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKGVudHJ5MikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkyLm5hbWUgPT09IGFsaWFzIHx8ICgoX2EgPSBlbnRyeTIuYWxpYXNlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnNvbWUoKGEpID0+IGEgPT09IGFsaWFzKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodG9PdmVycmlkZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRvT3ZlcnJpZGUgPSBhYnNvbHV0ZUVudHJpZXNbdG9PdmVycmlkZUluZGV4XTtcbiAgICAgICAgICAgIGlmICh0b092ZXJyaWRlLnN0ZXAgIT09IGVudHJ5LnN0ZXAgfHwgZW50cnkucHJpb3JpdHkgIT09IHRvT3ZlcnJpZGUucHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBcIiR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyh0b092ZXJyaWRlLm5hbWUsIHRvT3ZlcnJpZGUuYWxpYXNlcyl9XCIgbWlkZGxld2FyZSB3aXRoICR7dG9PdmVycmlkZS5wcmlvcml0eX0gcHJpb3JpdHkgaW4gJHt0b092ZXJyaWRlLnN0ZXB9IHN0ZXAgY2Fubm90IGJlIG92ZXJyaWRkZW4gYnkgXCIke2dldE1pZGRsZXdhcmVOYW1lV2l0aEFsaWFzZXMobmFtZSwgX2FsaWFzZXMpfVwiIG1pZGRsZXdhcmUgd2l0aCAke2VudHJ5LnByaW9yaXR5fSBwcmlvcml0eSBpbiAke2VudHJ5LnN0ZXB9IHN0ZXAuYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJzb2x1dGVFbnRyaWVzLnNwbGljZSh0b092ZXJyaWRlSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICBlbnRyaWVzTmFtZVNldC5hZGQoYWxpYXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhYnNvbHV0ZUVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfSxcbiAgICBhZGRSZWxhdGl2ZVRvOiAobWlkZGxld2FyZSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lLCBvdmVycmlkZSwgYWxpYXNlczogX2FsaWFzZXMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgbWlkZGxld2FyZSxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBnZXRBbGxBbGlhc2VzKG5hbWUsIF9hbGlhc2VzKTtcbiAgICAgIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGFsaWFzZXMuc29tZSgoYWxpYXMpID0+IGVudHJpZXNOYW1lU2V0LmhhcyhhbGlhcykpKSB7XG4gICAgICAgICAgaWYgKCFvdmVycmlkZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1pZGRsZXdhcmUgbmFtZSAnJHtnZXRNaWRkbGV3YXJlTmFtZVdpdGhBbGlhc2VzKG5hbWUsIF9hbGlhc2VzKX0nYCk7XG4gICAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0b092ZXJyaWRlSW5kZXggPSByZWxhdGl2ZUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoZW50cnkyKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTIubmFtZSA9PT0gYWxpYXMgfHwgKChfYSA9IGVudHJ5Mi5hbGlhc2VzKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc29tZSgoYSkgPT4gYSA9PT0gYWxpYXMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0b092ZXJyaWRlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdG9PdmVycmlkZSA9IHJlbGF0aXZlRW50cmllc1t0b092ZXJyaWRlSW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRvT3ZlcnJpZGUudG9NaWRkbGV3YXJlICE9PSBlbnRyeS50b01pZGRsZXdhcmUgfHwgdG9PdmVycmlkZS5yZWxhdGlvbiAhPT0gZW50cnkucmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBcIiR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyh0b092ZXJyaWRlLm5hbWUsIHRvT3ZlcnJpZGUuYWxpYXNlcyl9XCIgbWlkZGxld2FyZSAke3RvT3ZlcnJpZGUucmVsYXRpb259IFwiJHt0b092ZXJyaWRlLnRvTWlkZGxld2FyZX1cIiBtaWRkbGV3YXJlIGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IFwiJHtnZXRNaWRkbGV3YXJlTmFtZVdpdGhBbGlhc2VzKG5hbWUsIF9hbGlhc2VzKX1cIiBtaWRkbGV3YXJlICR7ZW50cnkucmVsYXRpb259IFwiJHtlbnRyeS50b01pZGRsZXdhcmV9XCIgbWlkZGxld2FyZS5gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWxhdGl2ZUVudHJpZXMuc3BsaWNlKHRvT3ZlcnJpZGVJbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgYWxpYXNlcykge1xuICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmFkZChhbGlhcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9LFxuICAgIGNsb25lOiAoKSA9PiBjbG9uZVRvKGNvbnN0cnVjdFN0YWNrKCkpLFxuICAgIHVzZTogKHBsdWdpbikgPT4ge1xuICAgICAgcGx1Z2luLmFwcGx5VG9TdGFjayhzdGFjayk7XG4gICAgfSxcbiAgICByZW1vdmU6ICh0b1JlbW92ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0b1JlbW92ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIHJlbW92ZUJ5TmFtZSh0b1JlbW92ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiByZW1vdmVCeVJlZmVyZW5jZSh0b1JlbW92ZSk7XG4gICAgfSxcbiAgICByZW1vdmVCeVRhZzogKHRvUmVtb3ZlKSA9PiB7XG4gICAgICBsZXQgaXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICBjb25zdCBmaWx0ZXJDYiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdGFncywgbmFtZSwgYWxpYXNlczogX2FsaWFzZXMgfSA9IGVudHJ5O1xuICAgICAgICBpZiAodGFncyAmJiB0YWdzLmluY2x1ZGVzKHRvUmVtb3ZlKSkge1xuICAgICAgICAgIGNvbnN0IGFsaWFzZXMgPSBnZXRBbGxBbGlhc2VzKG5hbWUsIF9hbGlhc2VzKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmRlbGV0ZShhbGlhcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSwgXCJmaWx0ZXJDYlwiKTtcbiAgICAgIGFic29sdXRlRW50cmllcyA9IGFic29sdXRlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgICAgcmVsYXRpdmVFbnRyaWVzID0gcmVsYXRpdmVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgICByZXR1cm4gaXNSZW1vdmVkO1xuICAgIH0sXG4gICAgY29uY2F0OiAoZnJvbSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgY2xvbmVkID0gY2xvbmVUbyhjb25zdHJ1Y3RTdGFjaygpKTtcbiAgICAgIGNsb25lZC51c2UoZnJvbSk7XG4gICAgICBjbG9uZWQuaWRlbnRpZnlPblJlc29sdmUoXG4gICAgICAgIGlkZW50aWZ5T25SZXNvbHZlIHx8IGNsb25lZC5pZGVudGlmeU9uUmVzb2x2ZSgpIHx8ICgoKF9hID0gZnJvbS5pZGVudGlmeU9uUmVzb2x2ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwoZnJvbSkpID8/IGZhbHNlKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfSxcbiAgICBhcHBseVRvU3RhY2s6IGNsb25lVG8sXG4gICAgaWRlbnRpZnk6ICgpID0+IHtcbiAgICAgIHJldHVybiBnZXRNaWRkbGV3YXJlTGlzdCh0cnVlKS5tYXAoKG13KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdy5zdGVwID8/IG13LnJlbGF0aW9uICsgXCIgXCIgKyBtdy50b01pZGRsZXdhcmU7XG4gICAgICAgIHJldHVybiBnZXRNaWRkbGV3YXJlTmFtZVdpdGhBbGlhc2VzKG13Lm5hbWUsIG13LmFsaWFzZXMpICsgXCIgLSBcIiArIHN0ZXA7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlkZW50aWZ5T25SZXNvbHZlKHRvZ2dsZSkge1xuICAgICAgaWYgKHR5cGVvZiB0b2dnbGUgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICBpZGVudGlmeU9uUmVzb2x2ZSA9IHRvZ2dsZTtcbiAgICAgIHJldHVybiBpZGVudGlmeU9uUmVzb2x2ZTtcbiAgICB9LFxuICAgIHJlc29sdmU6IChoYW5kbGVyLCBjb250ZXh0KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG1pZGRsZXdhcmUgb2YgZ2V0TWlkZGxld2FyZUxpc3QoKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5taWRkbGV3YXJlKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlciwgY29udGV4dCk7XG4gICAgICB9XG4gICAgICBpZiAoaWRlbnRpZnlPblJlc29sdmUpIHtcbiAgICAgICAgY29uc29sZS5sb2coc3RhY2suaWRlbnRpZnkoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBzdGFjaztcbn0sIFwiY29uc3RydWN0U3RhY2tcIik7XG52YXIgc3RlcFdlaWdodHMgPSB7XG4gIGluaXRpYWxpemU6IDUsXG4gIHNlcmlhbGl6ZTogNCxcbiAgYnVpbGQ6IDMsXG4gIGZpbmFsaXplUmVxdWVzdDogMixcbiAgZGVzZXJpYWxpemU6IDFcbn07XG52YXIgcHJpb3JpdHlXZWlnaHRzID0ge1xuICBoaWdoOiAzLFxuICBub3JtYWw6IDIsXG4gIGxvdzogMVxufTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnN0cnVjdFN0YWNrXG59KTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtID0gdm9pZCAwO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3QgZ2V0QXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtID0gKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBiYXNlNjRFbmNvZGVyLCBib2R5TGVuZ3RoQ2hlY2tlciwgY2hlY2tzdW1BbGdvcml0aG1GbiwgY2hlY2tzdW1Mb2NhdGlvbk5hbWUsIHN0cmVhbUhhc2hlciB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjaGVja3N1bVJlcXVpcmVkID0gYmFzZTY0RW5jb2RlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGNoZWNrc3VtQWxnb3JpdGhtRm4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBjaGVja3N1bUxvY2F0aW9uTmFtZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHN0cmVhbUhhc2hlciAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRpZ2VzdCA9IGNoZWNrc3VtUmVxdWlyZWQgPyBzdHJlYW1IYXNoZXIoY2hlY2tzdW1BbGdvcml0aG1GbiwgcmVhZGFibGVTdHJlYW0pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSA9IG5ldyBzdHJlYW1fMS5SZWFkYWJsZSh7IHJlYWQ6ICgpID0+IHsgfSB9KTtcbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYm9keUxlbmd0aENoZWNrZXIoZGF0YSkgfHwgMDtcbiAgICAgICAgYXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtLnB1c2goYCR7bGVuZ3RoLnRvU3RyaW5nKDE2KX1cXHJcXG5gKTtcbiAgICAgICAgYXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtLnB1c2goZGF0YSk7XG4gICAgICAgIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5wdXNoKFwiXFxyXFxuXCIpO1xuICAgIH0pO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtLnB1c2goYDBcXHJcXG5gKTtcbiAgICAgICAgaWYgKGNoZWNrc3VtUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrc3VtID0gYmFzZTY0RW5jb2Rlcihhd2FpdCBkaWdlc3QpO1xuICAgICAgICAgICAgYXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtLnB1c2goYCR7Y2hlY2tzdW1Mb2NhdGlvbk5hbWV9OiR7Y2hlY2tzdW19XFxyXFxuYCk7XG4gICAgICAgICAgICBhd3NDaHVua2VkRW5jb2RpbmdTdHJlYW0ucHVzaChgXFxyXFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtLnB1c2gobnVsbCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbTtcbn07XG5leHBvcnRzLmdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSA9IGdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbTtcbiIsCiAgICAidmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoXG4gIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU01cbiAgLy8gZmlsZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIENvbW1vbkpTIGZpbGUgdXNpbmcgYSBCYWJlbC1cbiAgLy8gY29tcGF0aWJsZSB0cmFuc2Zvcm0gKGkuZS4gXCJfX2VzTW9kdWxlXCIgaGFzIG5vdCBiZWVuIHNldCksIHRoZW4gc2V0XG4gIC8vIFwiZGVmYXVsdFwiIHRvIHRoZSBDb21tb25KUyBcIm1vZHVsZS5leHBvcnRzXCIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS5cbiAgaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsXG4gIG1vZFxuKSk7XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIERFRkFVTFRfUkVRVUVTVF9USU1FT1VUOiAoKSA9PiBERUZBVUxUX1JFUVVFU1RfVElNRU9VVCxcbiAgTm9kZUh0dHAySGFuZGxlcjogKCkgPT4gTm9kZUh0dHAySGFuZGxlcixcbiAgTm9kZUh0dHBIYW5kbGVyOiAoKSA9PiBOb2RlSHR0cEhhbmRsZXIsXG4gIHN0cmVhbUNvbGxlY3RvcjogKCkgPT4gc3RyZWFtQ29sbGVjdG9yXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL25vZGUtaHR0cC1oYW5kbGVyLnRzXG52YXIgaW1wb3J0X3Byb3RvY29sX2h0dHAgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xudmFyIGltcG9ydF9xdWVyeXN0cmluZ19idWlsZGVyID0gcmVxdWlyZShcIkBzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlclwiKTtcbnZhciBpbXBvcnRfaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGltcG9ydF9odHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcblxuLy8gc3JjL2NvbnN0YW50cy50c1xudmFyIE5PREVKU19USU1FT1VUX0VSUk9SX0NPREVTID0gW1wiRUNPTk5SRVNFVFwiLCBcIkVQSVBFXCIsIFwiRVRJTUVET1VUXCJdO1xuXG4vLyBzcmMvZ2V0LXRyYW5zZm9ybWVkLWhlYWRlcnMudHNcbnZhciBnZXRUcmFuc2Zvcm1lZEhlYWRlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChoZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkSGVhZGVycyA9IHt9O1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZXMgPSBoZWFkZXJzW25hbWVdO1xuICAgIHRyYW5zZm9ybWVkSGVhZGVyc1tuYW1lXSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyVmFsdWVzKSA/IGhlYWRlclZhbHVlcy5qb2luKFwiLFwiKSA6IGhlYWRlclZhbHVlcztcbiAgfVxuICByZXR1cm4gdHJhbnNmb3JtZWRIZWFkZXJzO1xufSwgXCJnZXRUcmFuc2Zvcm1lZEhlYWRlcnNcIik7XG5cbi8vIHNyYy9zZXQtY29ubmVjdGlvbi10aW1lb3V0LnRzXG52YXIgc2V0Q29ubmVjdGlvblRpbWVvdXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZXF1ZXN0LCByZWplY3QsIHRpbWVvdXRJbk1zID0gMCkgPT4ge1xuICBpZiAoIXRpbWVvdXRJbk1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHJlcXVlc3QuZGVzdHJveSgpO1xuICAgIHJlamVjdChcbiAgICAgIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBTb2NrZXQgdGltZWQgb3V0IHdpdGhvdXQgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB3aXRoaW4gJHt0aW1lb3V0SW5Nc30gbXNgKSwge1xuICAgICAgICBuYW1lOiBcIlRpbWVvdXRFcnJvclwiXG4gICAgICB9KVxuICAgICk7XG4gIH0sIHRpbWVvdXRJbk1zKTtcbiAgcmVxdWVzdC5vbihcInNvY2tldFwiLCAoc29ja2V0KSA9PiB7XG4gICAgaWYgKHNvY2tldC5jb25uZWN0aW5nKSB7XG4gICAgICBzb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0Q29ubmVjdGlvblRpbWVvdXRcIik7XG5cbi8vIHNyYy9zZXQtc29ja2V0LWtlZXAtYWxpdmUudHNcbnZhciBzZXRTb2NrZXRLZWVwQWxpdmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZXF1ZXN0LCB7IGtlZXBBbGl2ZSwga2VlcEFsaXZlTXNlY3MgfSkgPT4ge1xuICBpZiAoa2VlcEFsaXZlICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlcXVlc3Qub24oXCJzb2NrZXRcIiwgKHNvY2tldCkgPT4ge1xuICAgIHNvY2tldC5zZXRLZWVwQWxpdmUoa2VlcEFsaXZlLCBrZWVwQWxpdmVNc2VjcyB8fCAwKTtcbiAgfSk7XG59LCBcInNldFNvY2tldEtlZXBBbGl2ZVwiKTtcblxuLy8gc3JjL3NldC1zb2NrZXQtdGltZW91dC50c1xudmFyIHNldFNvY2tldFRpbWVvdXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZXF1ZXN0LCByZWplY3QsIHRpbWVvdXRJbk1zID0gMCkgPT4ge1xuICByZXF1ZXN0LnNldFRpbWVvdXQodGltZW91dEluTXMsICgpID0+IHtcbiAgICByZXF1ZXN0LmRlc3Ryb3koKTtcbiAgICByZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoYENvbm5lY3Rpb24gdGltZWQgb3V0IGFmdGVyICR7dGltZW91dEluTXN9IG1zYCksIHsgbmFtZTogXCJUaW1lb3V0RXJyb3JcIiB9KSk7XG4gIH0pO1xufSwgXCJzZXRTb2NrZXRUaW1lb3V0XCIpO1xuXG4vLyBzcmMvd3JpdGUtcmVxdWVzdC1ib2R5LnRzXG52YXIgaW1wb3J0X3N0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG52YXIgTUlOX1dBSVRfVElNRSA9IDFlMztcbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUmVxdWVzdEJvZHkoaHR0cFJlcXVlc3QsIHJlcXVlc3QsIG1heENvbnRpbnVlVGltZW91dE1zID0gTUlOX1dBSVRfVElNRSkge1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzID8/IHt9O1xuICBjb25zdCBleHBlY3QgPSBoZWFkZXJzW1wiRXhwZWN0XCJdIHx8IGhlYWRlcnNbXCJleHBlY3RcIl07XG4gIGxldCB0aW1lb3V0SWQgPSAtMTtcbiAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gIGlmIChleHBlY3QgPT09IFwiMTAwLWNvbnRpbnVlXCIpIHtcbiAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGltZW91dElkID0gTnVtYmVyKHNldFRpbWVvdXQocmVzb2x2ZSwgTWF0aC5tYXgoTUlOX1dBSVRfVElNRSwgbWF4Q29udGludWVUaW1lb3V0TXMpKSk7XG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGh0dHBSZXF1ZXN0Lm9uKFwiY29udGludWVcIiwgKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGh0dHBSZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgKCkgPT4ge1xuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICBdKTtcbiAgfVxuICBpZiAoIWhhc0Vycm9yKSB7XG4gICAgd3JpdGVCb2R5KGh0dHBSZXF1ZXN0LCByZXF1ZXN0LmJvZHkpO1xuICB9XG59XG5fX25hbWUod3JpdGVSZXF1ZXN0Qm9keSwgXCJ3cml0ZVJlcXVlc3RCb2R5XCIpO1xuZnVuY3Rpb24gd3JpdGVCb2R5KGh0dHBSZXF1ZXN0LCBib2R5KSB7XG4gIGlmIChib2R5IGluc3RhbmNlb2YgaW1wb3J0X3N0cmVhbS5SZWFkYWJsZSkge1xuICAgIGJvZHkucGlwZShodHRwUmVxdWVzdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSB8fCB0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaHR0cFJlcXVlc3QuZW5kKGJvZHkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1aW50OCA9IGJvZHk7XG4gICAgaWYgKHR5cGVvZiB1aW50OCA9PT0gXCJvYmplY3RcIiAmJiB1aW50OC5idWZmZXIgJiYgdHlwZW9mIHVpbnQ4LmJ5dGVPZmZzZXQgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHVpbnQ4LmJ5dGVMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmVuZChCdWZmZXIuZnJvbSh1aW50OC5idWZmZXIsIHVpbnQ4LmJ5dGVPZmZzZXQsIHVpbnQ4LmJ5dGVMZW5ndGgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaHR0cFJlcXVlc3QuZW5kKEJ1ZmZlci5mcm9tKGJvZHkpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaHR0cFJlcXVlc3QuZW5kKCk7XG59XG5fX25hbWUod3JpdGVCb2R5LCBcIndyaXRlQm9keVwiKTtcblxuLy8gc3JjL25vZGUtaHR0cC1oYW5kbGVyLnRzXG52YXIgREVGQVVMVF9SRVFVRVNUX1RJTUVPVVQgPSAwO1xudmFyIF9Ob2RlSHR0cEhhbmRsZXIgPSBjbGFzcyBfTm9kZUh0dHBIYW5kbGVyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuc29ja2V0V2FybmluZ1RpbWVzdGFtcCA9IDA7XG4gICAgLy8gTm9kZSBodHRwIGhhbmRsZXIgaXMgaGFyZC1jb2RlZCB0byBodHRwLzEuMTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZmY1NjY0YjgzYjg5YzU1ZTRhYjVkNWY2MDA2OGZiNDU3ZjFmNTg3Mi9saWIvX2h0dHBfc2VydmVyLmpzI0wyODZcbiAgICB0aGlzLm1ldGFkYXRhID0geyBoYW5kbGVyUHJvdG9jb2w6IFwiaHR0cC8xLjFcIiB9O1xuICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvcHRpb25zKCkudGhlbigoX29wdGlvbnMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMucmVzb2x2ZURlZmF1bHRDb25maWcoX29wdGlvbnMpKTtcbiAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5yZXNvbHZlRGVmYXVsdENvbmZpZyhvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEByZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCBpcyBhbiBIdHRwSGFuZGxlciBvZiBhbnkgY2xhc3MsXG4gICAqIG9yIGluc3RhbnRpYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGhhbmRsZXIuXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKGluc3RhbmNlT3JPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiAoaW5zdGFuY2VPck9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGluc3RhbmNlT3JPcHRpb25zLmhhbmRsZSkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGluc3RhbmNlT3JPcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Ob2RlSHR0cEhhbmRsZXIoaW5zdGFuY2VPck9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICpcbiAgICogQHBhcmFtIGFnZW50IC0gaHR0cChzKSBhZ2VudCBpbiB1c2UgYnkgdGhlIE5vZGVIdHRwSGFuZGxlciBpbnN0YW5jZS5cbiAgICogQHJldHVybnMgdGltZXN0YW1wIG9mIGxhc3QgZW1pdHRlZCB3YXJuaW5nLlxuICAgKi9cbiAgc3RhdGljIGNoZWNrU29ja2V0VXNhZ2UoYWdlbnQsIHNvY2tldFdhcm5pbmdUaW1lc3RhbXApIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc29ja2V0cywgcmVxdWVzdHMsIG1heFNvY2tldHMgfSA9IGFnZW50O1xuICAgIGlmICh0eXBlb2YgbWF4U29ja2V0cyAhPT0gXCJudW1iZXJcIiB8fCBtYXhTb2NrZXRzID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIHNvY2tldFdhcm5pbmdUaW1lc3RhbXA7XG4gICAgfVxuICAgIGNvbnN0IGludGVydmFsID0gMTVlMztcbiAgICBpZiAoRGF0ZS5ub3coKSAtIGludGVydmFsIDwgc29ja2V0V2FybmluZ1RpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIHNvY2tldFdhcm5pbmdUaW1lc3RhbXA7XG4gICAgfVxuICAgIGlmIChzb2NrZXRzICYmIHJlcXVlc3RzKSB7XG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbiBpbiBzb2NrZXRzKSB7XG4gICAgICAgIGNvbnN0IHNvY2tldHNJblVzZSA9ICgoX2EgPSBzb2NrZXRzW29yaWdpbl0pID09IG51bGwgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID8/IDA7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RzRW5xdWV1ZWQgPSAoKF9iID0gcmVxdWVzdHNbb3JpZ2luXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkgPz8gMDtcbiAgICAgICAgaWYgKHNvY2tldHNJblVzZSA+PSBtYXhTb2NrZXRzICYmIHJlcXVlc3RzRW5xdWV1ZWQgPj0gMiAqIG1heFNvY2tldHMpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXI6V0FSTlwiLFxuICAgICAgICAgICAgYHNvY2tldCB1c2FnZSBhdCBjYXBhY2l0eT0ke3NvY2tldHNJblVzZX0gYW5kICR7cmVxdWVzdHNFbnF1ZXVlZH0gYWRkaXRpb25hbCByZXF1ZXN0cyBhcmUgZW5xdWV1ZWQuYCxcbiAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZGstZm9yLWphdmFzY3JpcHQvdjMvZGV2ZWxvcGVyLWd1aWRlL25vZGUtY29uZmlndXJpbmctbWF4c29ja2V0cy5odG1sXCIsXG4gICAgICAgICAgICBcIm9yIGluY3JlYXNlIHNvY2tldEFjcXVpc2l0aW9uV2FybmluZ1RpbWVvdXQ9KG1pbGxpcykgaW4gdGhlIE5vZGVIdHRwSGFuZGxlciBjb25maWcuXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb2NrZXRXYXJuaW5nVGltZXN0YW1wO1xuICB9XG4gIHJlc29sdmVEZWZhdWx0Q29uZmlnKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlcXVlc3RUaW1lb3V0LCBjb25uZWN0aW9uVGltZW91dCwgc29ja2V0VGltZW91dCwgaHR0cEFnZW50LCBodHRwc0FnZW50IH0gPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGtlZXBBbGl2ZSA9IHRydWU7XG4gICAgY29uc3QgbWF4U29ja2V0cyA9IDUwO1xuICAgIHJldHVybiB7XG4gICAgICBjb25uZWN0aW9uVGltZW91dCxcbiAgICAgIHJlcXVlc3RUaW1lb3V0OiByZXF1ZXN0VGltZW91dCA/PyBzb2NrZXRUaW1lb3V0LFxuICAgICAgaHR0cEFnZW50OiAoKCkgPT4ge1xuICAgICAgICBpZiAoaHR0cEFnZW50IGluc3RhbmNlb2YgaW1wb3J0X2h0dHAuQWdlbnQgfHwgdHlwZW9mIChodHRwQWdlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGh0dHBBZ2VudC5kZXN0cm95KSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGh0dHBBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGltcG9ydF9odHRwLkFnZW50KHsga2VlcEFsaXZlLCBtYXhTb2NrZXRzLCAuLi5odHRwQWdlbnQgfSk7XG4gICAgICB9KSgpLFxuICAgICAgaHR0cHNBZ2VudDogKCgpID0+IHtcbiAgICAgICAgaWYgKGh0dHBzQWdlbnQgaW5zdGFuY2VvZiBpbXBvcnRfaHR0cHMuQWdlbnQgfHwgdHlwZW9mIChodHRwc0FnZW50ID09IG51bGwgPyB2b2lkIDAgOiBodHRwc0FnZW50LmRlc3Ryb3kpID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gaHR0cHNBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGltcG9ydF9odHRwcy5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0cywgLi4uaHR0cHNBZ2VudCB9KTtcbiAgICAgIH0pKClcbiAgICB9O1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIChfYiA9IChfYSA9IHRoaXMuY29uZmlnKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaHR0cEFnZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZGVzdHJveSgpO1xuICAgIChfZCA9IChfYyA9IHRoaXMuY29uZmlnKSA9PSBudWxsID8gdm9pZCAwIDogX2MuaHR0cHNBZ2VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLmRlc3Ryb3koKTtcbiAgfVxuICBhc3luYyBoYW5kbGUocmVxdWVzdCwgeyBhYm9ydFNpZ25hbCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnUHJvdmlkZXI7XG4gICAgfVxuICAgIGxldCBzb2NrZXRDaGVja1RpbWVvdXRJZDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSB2b2lkIDA7XG4gICAgICBjb25zdCByZXNvbHZlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoYXJnKSA9PiB7XG4gICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICBjbGVhclRpbWVvdXQoc29ja2V0Q2hlY2tUaW1lb3V0SWQpO1xuICAgICAgICBfcmVzb2x2ZShhcmcpO1xuICAgICAgfSwgXCJyZXNvbHZlXCIpO1xuICAgICAgY29uc3QgcmVqZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoYXJnKSA9PiB7XG4gICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICBfcmVqZWN0KGFyZyk7XG4gICAgICB9LCBcInJlamVjdFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZSBIVFRQIHJlcXVlc3QgaGFuZGxlciBjb25maWcgaXMgbm90IHJlc29sdmVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGFib3J0U2lnbmFsID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJSZXF1ZXN0IGFib3J0ZWRcIik7XG4gICAgICAgIGFib3J0RXJyb3IubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzU1NMID0gcmVxdWVzdC5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbiAgICAgIGNvbnN0IGFnZW50ID0gaXNTU0wgPyB0aGlzLmNvbmZpZy5odHRwc0FnZW50IDogdGhpcy5jb25maWcuaHR0cEFnZW50O1xuICAgICAgc29ja2V0Q2hlY2tUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXRXYXJuaW5nVGltZXN0YW1wID0gX05vZGVIdHRwSGFuZGxlci5jaGVja1NvY2tldFVzYWdlKGFnZW50LCB0aGlzLnNvY2tldFdhcm5pbmdUaW1lc3RhbXApO1xuICAgICAgfSwgdGhpcy5jb25maWcuc29ja2V0QWNxdWlzaXRpb25XYXJuaW5nVGltZW91dCA/PyAodGhpcy5jb25maWcucmVxdWVzdFRpbWVvdXQgPz8gMmUzKSArICh0aGlzLmNvbmZpZy5jb25uZWN0aW9uVGltZW91dCA/PyAxZTMpKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gKDAsIGltcG9ydF9xdWVyeXN0cmluZ19idWlsZGVyLmJ1aWxkUXVlcnlTdHJpbmcpKHJlcXVlc3QucXVlcnkgfHwge30pO1xuICAgICAgbGV0IGF1dGggPSB2b2lkIDA7XG4gICAgICBpZiAocmVxdWVzdC51c2VybmFtZSAhPSBudWxsIHx8IHJlcXVlc3QucGFzc3dvcmQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZSA9IHJlcXVlc3QudXNlcm5hbWUgPz8gXCJcIjtcbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSByZXF1ZXN0LnBhc3N3b3JkID8/IFwiXCI7XG4gICAgICAgIGF1dGggPSBgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gO1xuICAgICAgfVxuICAgICAgbGV0IHBhdGggPSByZXF1ZXN0LnBhdGg7XG4gICAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgICAgcGF0aCArPSBgPyR7cXVlcnlTdHJpbmd9YDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1ZXN0LmZyYWdtZW50KSB7XG4gICAgICAgIHBhdGggKz0gYCMke3JlcXVlc3QuZnJhZ21lbnR9YDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGVIdHRwc09wdGlvbnMgPSB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgaG9zdDogcmVxdWVzdC5ob3N0bmFtZSxcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcG9ydDogcmVxdWVzdC5wb3J0LFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYXV0aFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcXVlc3RGdW5jID0gaXNTU0wgPyBpbXBvcnRfaHR0cHMucmVxdWVzdCA6IGltcG9ydF9odHRwLnJlcXVlc3Q7XG4gICAgICBjb25zdCByZXEgPSByZXF1ZXN0RnVuYyhub2RlSHR0cHNPcHRpb25zLCAocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBpbXBvcnRfcHJvdG9jb2xfaHR0cC5IdHRwUmVzcG9uc2Uoe1xuICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlIHx8IC0xLFxuICAgICAgICAgIHJlYXNvbjogcmVzLnN0YXR1c01lc3NhZ2UsXG4gICAgICAgICAgaGVhZGVyczogZ2V0VHJhbnNmb3JtZWRIZWFkZXJzKHJlcy5oZWFkZXJzKSxcbiAgICAgICAgICBib2R5OiByZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc29sdmUoeyByZXNwb25zZTogaHR0cFJlc3BvbnNlIH0pO1xuICAgICAgfSk7XG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChOT0RFSlNfVElNRU9VVF9FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnIuY29kZSkpIHtcbiAgICAgICAgICByZWplY3QoT2JqZWN0LmFzc2lnbihlcnIsIHsgbmFtZTogXCJUaW1lb3V0RXJyb3JcIiB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2V0Q29ubmVjdGlvblRpbWVvdXQocmVxLCByZWplY3QsIHRoaXMuY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0KTtcbiAgICAgIHNldFNvY2tldFRpbWVvdXQocmVxLCByZWplY3QsIHRoaXMuY29uZmlnLnJlcXVlc3RUaW1lb3V0KTtcbiAgICAgIGlmIChhYm9ydFNpZ25hbCkge1xuICAgICAgICBhYm9ydFNpZ25hbC5vbmFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJSZXF1ZXN0IGFib3J0ZWRcIik7XG4gICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgaHR0cEFnZW50ID0gbm9kZUh0dHBzT3B0aW9ucy5hZ2VudDtcbiAgICAgIGlmICh0eXBlb2YgaHR0cEFnZW50ID09PSBcIm9iamVjdFwiICYmIFwia2VlcEFsaXZlXCIgaW4gaHR0cEFnZW50KSB7XG4gICAgICAgIHNldFNvY2tldEtlZXBBbGl2ZShyZXEsIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGtlZXBBbGl2ZSBpcyBub3QgcHVibGljIG9uIGh0dHBBZ2VudC5cbiAgICAgICAgICBrZWVwQWxpdmU6IGh0dHBBZ2VudC5rZWVwQWxpdmUsXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBrZWVwQWxpdmVNc2VjcyBpcyBub3QgcHVibGljIG9uIGh0dHBBZ2VudC5cbiAgICAgICAgICBrZWVwQWxpdmVNc2VjczogaHR0cEFnZW50LmtlZXBBbGl2ZU1zZWNzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSB3cml0ZVJlcXVlc3RCb2R5KHJlcSwgcmVxdWVzdCwgdGhpcy5jb25maWcucmVxdWVzdFRpbWVvdXQpLmNhdGNoKF9yZWplY3QpO1xuICAgIH0pO1xuICB9XG4gIHVwZGF0ZUh0dHBDbGllbnRDb25maWcoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMuY29uZmlnID0gdm9pZCAwO1xuICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSB0aGlzLmNvbmZpZ1Byb3ZpZGVyLnRoZW4oKGNvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBba2V5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgaHR0cEhhbmRsZXJDb25maWdzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyA/PyB7fTtcbiAgfVxufTtcbl9fbmFtZShfTm9kZUh0dHBIYW5kbGVyLCBcIk5vZGVIdHRwSGFuZGxlclwiKTtcbnZhciBOb2RlSHR0cEhhbmRsZXIgPSBfTm9kZUh0dHBIYW5kbGVyO1xuXG4vLyBzcmMvbm9kZS1odHRwMi1oYW5kbGVyLnRzXG5cblxudmFyIGltcG9ydF9odHRwMjIgPSByZXF1aXJlKFwiaHR0cDJcIik7XG5cbi8vIHNyYy9ub2RlLWh0dHAyLWNvbm5lY3Rpb24tbWFuYWdlci50c1xudmFyIGltcG9ydF9odHRwMiA9IF9fdG9FU00ocmVxdWlyZShcImh0dHAyXCIpKTtcblxuLy8gc3JjL25vZGUtaHR0cDItY29ubmVjdGlvbi1wb29sLnRzXG52YXIgX05vZGVIdHRwMkNvbm5lY3Rpb25Qb29sID0gY2xhc3MgX05vZGVIdHRwMkNvbm5lY3Rpb25Qb29sIHtcbiAgY29uc3RydWN0b3Ioc2Vzc2lvbnMpIHtcbiAgICB0aGlzLnNlc3Npb25zID0gW107XG4gICAgdGhpcy5zZXNzaW9ucyA9IHNlc3Npb25zID8/IFtdO1xuICB9XG4gIHBvbGwoKSB7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbnMuc2hpZnQoKTtcbiAgICB9XG4gIH1cbiAgb2ZmZXJMYXN0KHNlc3Npb24pIHtcbiAgICB0aGlzLnNlc3Npb25zLnB1c2goc2Vzc2lvbik7XG4gIH1cbiAgY29udGFpbnMoc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zLmluY2x1ZGVzKHNlc3Npb24pO1xuICB9XG4gIHJlbW92ZShzZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9ucyA9IHRoaXMuc2Vzc2lvbnMuZmlsdGVyKChzKSA9PiBzICE9PSBzZXNzaW9uKTtcbiAgfVxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbiAgZGVzdHJveShjb25uZWN0aW9uKSB7XG4gICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHRoaXMuc2Vzc2lvbnMpIHtcbiAgICAgIGlmIChzZXNzaW9uID09PSBjb25uZWN0aW9uKSB7XG4gICAgICAgIGlmICghc2Vzc2lvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbl9fbmFtZShfTm9kZUh0dHAyQ29ubmVjdGlvblBvb2wsIFwiTm9kZUh0dHAyQ29ubmVjdGlvblBvb2xcIik7XG52YXIgTm9kZUh0dHAyQ29ubmVjdGlvblBvb2wgPSBfTm9kZUh0dHAyQ29ubmVjdGlvblBvb2w7XG5cbi8vIHNyYy9ub2RlLWh0dHAyLWNvbm5lY3Rpb24tbWFuYWdlci50c1xudmFyIF9Ob2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlciA9IGNsYXNzIF9Ob2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuc2Vzc2lvbkNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICBpZiAodGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgJiYgdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJtYXhDb25jdXJyZW5jeSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlwiKTtcbiAgICB9XG4gIH1cbiAgbGVhc2UocmVxdWVzdENvbnRleHQsIGNvbm5lY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmxTdHJpbmcocmVxdWVzdENvbnRleHQpO1xuICAgIGNvbnN0IGV4aXN0aW5nUG9vbCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldCh1cmwpO1xuICAgIGlmIChleGlzdGluZ1Bvb2wpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU2Vzc2lvbiA9IGV4aXN0aW5nUG9vbC5wb2xsKCk7XG4gICAgICBpZiAoZXhpc3RpbmdTZXNzaW9uICYmICF0aGlzLmNvbmZpZy5kaXNhYmxlQ29uY3VycmVuY3kpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nU2Vzc2lvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGltcG9ydF9odHRwMi5kZWZhdWx0LmNvbm5lY3QodXJsKTtcbiAgICBpZiAodGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHNlc3Npb24uc2V0dGluZ3MoeyBtYXhDb25jdXJyZW50U3RyZWFtczogdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgfSwgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJGYWlsIHRvIHNldCBtYXhDb25jdXJyZW50U3RyZWFtcyB0byBcIiArIHRoaXMuY29uZmlnLm1heENvbmN1cnJlbmN5ICsgXCJ3aGVuIGNyZWF0aW5nIG5ldyBzZXNzaW9uIGZvciBcIiArIHJlcXVlc3RDb250ZXh0LmRlc3RpbmF0aW9uLnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc2Vzc2lvbi51bnJlZigpO1xuICAgIGNvbnN0IGRlc3Ryb3lTZXNzaW9uQ2IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgdGhpcy5kZWxldGVTZXNzaW9uKHVybCwgc2Vzc2lvbik7XG4gICAgfSwgXCJkZXN0cm95U2Vzc2lvbkNiXCIpO1xuICAgIHNlc3Npb24ub24oXCJnb2F3YXlcIiwgZGVzdHJveVNlc3Npb25DYik7XG4gICAgc2Vzc2lvbi5vbihcImVycm9yXCIsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgIHNlc3Npb24ub24oXCJmcmFtZUVycm9yXCIsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgIHNlc3Npb24ub24oXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmRlbGV0ZVNlc3Npb24odXJsLCBzZXNzaW9uKSk7XG4gICAgaWYgKGNvbm5lY3Rpb25Db25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICBzZXNzaW9uLnNldFRpbWVvdXQoY29ubmVjdGlvbkNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXQsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgIH1cbiAgICBjb25zdCBjb25uZWN0aW9uUG9vbCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldCh1cmwpIHx8IG5ldyBOb2RlSHR0cDJDb25uZWN0aW9uUG9vbCgpO1xuICAgIGNvbm5lY3Rpb25Qb29sLm9mZmVyTGFzdChzZXNzaW9uKTtcbiAgICB0aGlzLnNlc3Npb25DYWNoZS5zZXQodXJsLCBjb25uZWN0aW9uUG9vbCk7XG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHNlc3Npb24gZnJvbSB0aGUgY29ubmVjdGlvbiBwb29sLlxuICAgKiBAcGFyYW0gYXV0aG9yaXR5IFRoZSBhdXRob3JpdHkgb2YgdGhlIHNlc3Npb24gdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gc2Vzc2lvbiBUaGUgc2Vzc2lvbiB0byBkZWxldGUuXG4gICAqL1xuICBkZWxldGVTZXNzaW9uKGF1dGhvcml0eSwgc2Vzc2lvbikge1xuICAgIGNvbnN0IGV4aXN0aW5nQ29ubmVjdGlvblBvb2wgPSB0aGlzLnNlc3Npb25DYWNoZS5nZXQoYXV0aG9yaXR5KTtcbiAgICBpZiAoIWV4aXN0aW5nQ29ubmVjdGlvblBvb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFleGlzdGluZ0Nvbm5lY3Rpb25Qb29sLmNvbnRhaW5zKHNlc3Npb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nQ29ubmVjdGlvblBvb2wucmVtb3ZlKHNlc3Npb24pO1xuICAgIHRoaXMuc2Vzc2lvbkNhY2hlLnNldChhdXRob3JpdHksIGV4aXN0aW5nQ29ubmVjdGlvblBvb2wpO1xuICB9XG4gIHJlbGVhc2UocmVxdWVzdENvbnRleHQsIHNlc3Npb24pIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdldFVybFN0cmluZyhyZXF1ZXN0Q29udGV4dCk7XG4gICAgKF9hID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KGNhY2hlS2V5KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLm9mZmVyTGFzdChzZXNzaW9uKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgW2tleSwgY29ubmVjdGlvblBvb2xdIG9mIHRoaXMuc2Vzc2lvbkNhY2hlKSB7XG4gICAgICBmb3IgKGNvbnN0IHNlc3Npb24gb2YgY29ubmVjdGlvblBvb2wpIHtcbiAgICAgICAgaWYgKCFzZXNzaW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbm5lY3Rpb25Qb29sLnJlbW92ZShzZXNzaW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxuICBzZXRNYXhDb25jdXJyZW50U3RyZWFtcyhtYXhDb25jdXJyZW50U3RyZWFtcykge1xuICAgIGlmICh0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW5jeSAmJiB0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW5jeSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm1heENvbmN1cnJlbnRTdHJlYW1zIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uXCIpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW5jeSA9IG1heENvbmN1cnJlbnRTdHJlYW1zO1xuICB9XG4gIHNldERpc2FibGVDb25jdXJyZW50U3RyZWFtcyhkaXNhYmxlQ29uY3VycmVudFN0cmVhbXMpIHtcbiAgICB0aGlzLmNvbmZpZy5kaXNhYmxlQ29uY3VycmVuY3kgPSBkaXNhYmxlQ29uY3VycmVudFN0cmVhbXM7XG4gIH1cbiAgZ2V0VXJsU3RyaW5nKHJlcXVlc3QpIHtcbiAgICByZXR1cm4gcmVxdWVzdC5kZXN0aW5hdGlvbi50b1N0cmluZygpO1xuICB9XG59O1xuX19uYW1lKF9Ob2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlciwgXCJOb2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlclwiKTtcbnZhciBOb2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlciA9IF9Ob2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlcjtcblxuLy8gc3JjL25vZGUtaHR0cDItaGFuZGxlci50c1xudmFyIF9Ob2RlSHR0cDJIYW5kbGVyID0gY2xhc3MgX05vZGVIdHRwMkhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHsgaGFuZGxlclByb3RvY29sOiBcImgyXCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IE5vZGVIdHRwMkNvbm5lY3Rpb25NYW5hZ2VyKHt9KTtcbiAgICB0aGlzLmNvbmZpZ1Byb3ZpZGVyID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb3B0aW9ucygpLnRoZW4oKG9wdHMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG9wdHMgfHwge30pO1xuICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShvcHRpb25zIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQHJldHVybnMgdGhlIGlucHV0IGlmIGl0IGlzIGFuIEh0dHBIYW5kbGVyIG9mIGFueSBjbGFzcyxcbiAgICogb3IgaW5zdGFudGlhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgaGFuZGxlci5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUoaW5zdGFuY2VPck9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIChpbnN0YW5jZU9yT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogaW5zdGFuY2VPck9wdGlvbnMuaGFuZGxlKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2VPck9wdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX05vZGVIdHRwMkhhbmRsZXIoaW5zdGFuY2VPck9wdGlvbnMpO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5kZXN0cm95KCk7XG4gIH1cbiAgYXN5bmMgaGFuZGxlKHJlcXVlc3QsIHsgYWJvcnRTaWduYWwgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZ1Byb3ZpZGVyO1xuICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5zZXREaXNhYmxlQ29uY3VycmVudFN0cmVhbXModGhpcy5jb25maWcuZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zIHx8IGZhbHNlKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5tYXhDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLnNldE1heENvbmN1cnJlbnRTdHJlYW1zKHRoaXMuY29uZmlnLm1heENvbmN1cnJlbnRTdHJlYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyByZXF1ZXN0VGltZW91dCwgZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zIH0gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBsZXQgZnVsZmlsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSB2b2lkIDA7XG4gICAgICBjb25zdCByZXNvbHZlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoYXJnKSA9PiB7XG4gICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICBfcmVzb2x2ZShhcmcpO1xuICAgICAgfSwgXCJyZXNvbHZlXCIpO1xuICAgICAgY29uc3QgcmVqZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoYXJnKSA9PiB7XG4gICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICBfcmVqZWN0KGFyZyk7XG4gICAgICB9LCBcInJlamVjdFwiKTtcbiAgICAgIGlmIChhYm9ydFNpZ25hbCA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBmdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiUmVxdWVzdCBhYm9ydGVkXCIpO1xuICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IGhvc3RuYW1lLCBtZXRob2QsIHBvcnQsIHByb3RvY29sLCBxdWVyeSB9ID0gcmVxdWVzdDtcbiAgICAgIGxldCBhdXRoID0gXCJcIjtcbiAgICAgIGlmIChyZXF1ZXN0LnVzZXJuYW1lICE9IG51bGwgfHwgcmVxdWVzdC5wYXNzd29yZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHVzZXJuYW1lID0gcmVxdWVzdC51c2VybmFtZSA/PyBcIlwiO1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IHJlcXVlc3QucGFzc3dvcmQgPz8gXCJcIjtcbiAgICAgICAgYXV0aCA9IGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfUBgO1xuICAgICAgfVxuICAgICAgY29uc3QgYXV0aG9yaXR5ID0gYCR7cHJvdG9jb2x9Ly8ke2F1dGh9JHtob3N0bmFtZX0ke3BvcnQgPyBgOiR7cG9ydH1gIDogXCJcIn1gO1xuICAgICAgY29uc3QgcmVxdWVzdENvbnRleHQgPSB7IGRlc3RpbmF0aW9uOiBuZXcgVVJMKGF1dGhvcml0eSkgfTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmxlYXNlKHJlcXVlc3RDb250ZXh0LCB7XG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiAoX2EgPSB0aGlzLmNvbmZpZykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnNlc3Npb25UaW1lb3V0LFxuICAgICAgICBkaXNhYmxlQ29uY3VycmVudFN0cmVhbXM6IGRpc2FibGVDb25jdXJyZW50U3RyZWFtcyB8fCBmYWxzZVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWplY3RXaXRoRGVzdHJveSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVycikgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zKSB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0sIFwicmVqZWN0V2l0aERlc3Ryb3lcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9ICgwLCBpbXBvcnRfcXVlcnlzdHJpbmdfYnVpbGRlci5idWlsZFF1ZXJ5U3RyaW5nKShxdWVyeSB8fCB7fSk7XG4gICAgICBsZXQgcGF0aCA9IHJlcXVlc3QucGF0aDtcbiAgICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgICBwYXRoICs9IGA/JHtxdWVyeVN0cmluZ31gO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QuZnJhZ21lbnQpIHtcbiAgICAgICAgcGF0aCArPSBgIyR7cmVxdWVzdC5mcmFnbWVudH1gO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxID0gc2Vzc2lvbi5yZXF1ZXN0KHtcbiAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICBbaW1wb3J0X2h0dHAyMi5jb25zdGFudHMuSFRUUDJfSEVBREVSX1BBVEhdOiBwYXRoLFxuICAgICAgICBbaW1wb3J0X2h0dHAyMi5jb25zdGFudHMuSFRUUDJfSEVBREVSX01FVEhPRF06IG1ldGhvZFxuICAgICAgfSk7XG4gICAgICBzZXNzaW9uLnJlZigpO1xuICAgICAgcmVxLm9uKFwicmVzcG9uc2VcIiwgKGhlYWRlcnMpID0+IHtcbiAgICAgICAgY29uc3QgaHR0cFJlc3BvbnNlID0gbmV3IGltcG9ydF9wcm90b2NvbF9odHRwLkh0dHBSZXNwb25zZSh7XG4gICAgICAgICAgc3RhdHVzQ29kZTogaGVhZGVyc1tcIjpzdGF0dXNcIl0gfHwgLTEsXG4gICAgICAgICAgaGVhZGVyczogZ2V0VHJhbnNmb3JtZWRIZWFkZXJzKGhlYWRlcnMpLFxuICAgICAgICAgIGJvZHk6IHJlcVxuICAgICAgICB9KTtcbiAgICAgICAgZnVsZmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZSh7IHJlc3BvbnNlOiBodHRwUmVzcG9uc2UgfSk7XG4gICAgICAgIGlmIChkaXNhYmxlQ29uY3VycmVudFN0cmVhbXMpIHtcbiAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5kZWxldGVTZXNzaW9uKGF1dGhvcml0eSwgc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICAgIHJlcS5zZXRUaW1lb3V0KHJlcXVlc3RUaW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgcmVxLmNsb3NlKCk7XG4gICAgICAgICAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGBTdHJlYW0gdGltZWQgb3V0IGJlY2F1c2Ugb2Ygbm8gYWN0aXZpdHkgZm9yICR7cmVxdWVzdFRpbWVvdXR9IG1zYCk7XG4gICAgICAgICAgdGltZW91dEVycm9yLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiO1xuICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KHRpbWVvdXRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGFib3J0U2lnbmFsKSB7XG4gICAgICAgIGFib3J0U2lnbmFsLm9uYWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgcmVxLmNsb3NlKCk7XG4gICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgICByZWplY3RXaXRoRGVzdHJveShhYm9ydEVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcS5vbihcImZyYW1lRXJyb3JcIiwgKHR5cGUsIGNvZGUsIGlkKSA9PiB7XG4gICAgICAgIHJlamVjdFdpdGhEZXN0cm95KG5ldyBFcnJvcihgRnJhbWUgdHlwZSBpZCAke3R5cGV9IGluIHN0cmVhbSBpZCAke2lkfSBoYXMgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9LmApKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKFwiZXJyb3JcIiwgcmVqZWN0V2l0aERlc3Ryb3kpO1xuICAgICAgcmVxLm9uKFwiYWJvcnRlZFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdFdpdGhEZXN0cm95KFxuICAgICAgICAgIG5ldyBFcnJvcihgSFRUUC8yIHN0cmVhbSBpcyBhYm5vcm1hbGx5IGFib3J0ZWQgaW4gbWlkLWNvbW11bmljYXRpb24gd2l0aCByZXN1bHQgY29kZSAke3JlcS5yc3RDb2RlfS5gKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXEub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24udW5yZWYoKTtcbiAgICAgICAgaWYgKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZnVsZmlsbGVkKSB7XG4gICAgICAgICAgcmVqZWN0V2l0aERlc3Ryb3kobmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvcjogaHR0cDIgcmVxdWVzdCBkaWQgbm90IGdldCBhIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB3cml0ZVJlcXVlc3RCb2R5UHJvbWlzZSA9IHdyaXRlUmVxdWVzdEJvZHkocmVxLCByZXF1ZXN0LCByZXF1ZXN0VGltZW91dCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlSHR0cENsaWVudENvbmZpZyhrZXksIHZhbHVlKSB7XG4gICAgdGhpcy5jb25maWcgPSB2b2lkIDA7XG4gICAgdGhpcy5jb25maWdQcm92aWRlciA9IHRoaXMuY29uZmlnUHJvdmlkZXIudGhlbigoY29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIFtrZXldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBodHRwSGFuZGxlckNvbmZpZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8/IHt9O1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyBhIHNlc3Npb24uXG4gICAqIEBwYXJhbSBzZXNzaW9uIFRoZSBzZXNzaW9uIHRvIGRlc3Ryb3kuXG4gICAqL1xuICBkZXN0cm95U2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgaWYgKCFzZXNzaW9uLmRlc3Ryb3llZCkge1xuICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgfVxuICB9XG59O1xuX19uYW1lKF9Ob2RlSHR0cDJIYW5kbGVyLCBcIk5vZGVIdHRwMkhhbmRsZXJcIik7XG52YXIgTm9kZUh0dHAySGFuZGxlciA9IF9Ob2RlSHR0cDJIYW5kbGVyO1xuXG4vLyBzcmMvc3RyZWFtLWNvbGxlY3Rvci9jb2xsZWN0b3IudHNcblxudmFyIF9Db2xsZWN0b3IgPSBjbGFzcyBfQ29sbGVjdG9yIGV4dGVuZHMgaW1wb3J0X3N0cmVhbS5Xcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgdGhpcy5idWZmZXJlZEJ5dGVzID0gW107XG4gIH1cbiAgX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICB0aGlzLmJ1ZmZlcmVkQnl0ZXMucHVzaChjaHVuayk7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcbl9fbmFtZShfQ29sbGVjdG9yLCBcIkNvbGxlY3RvclwiKTtcbnZhciBDb2xsZWN0b3IgPSBfQ29sbGVjdG9yO1xuXG4vLyBzcmMvc3RyZWFtLWNvbGxlY3Rvci9pbmRleC50c1xudmFyIHN0cmVhbUNvbGxlY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0cmVhbSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBjb2xsZWN0b3IgPSBuZXcgQ29sbGVjdG9yKCk7XG4gIHN0cmVhbS5waXBlKGNvbGxlY3Rvcik7XG4gIHN0cmVhbS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICBjb2xsZWN0b3IuZW5kKCk7XG4gICAgcmVqZWN0KGVycik7XG4gIH0pO1xuICBjb2xsZWN0b3Iub24oXCJlcnJvclwiLCByZWplY3QpO1xuICBjb2xsZWN0b3Iub24oXCJmaW5pc2hcIiwgZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KHRoaXMuYnVmZmVyZWRCeXRlcykpO1xuICAgIHJlc29sdmUoYnl0ZXMpO1xuICB9KTtcbn0pLCBcInN0cmVhbUNvbGxlY3RvclwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIERFRkFVTFRfUkVRVUVTVF9USU1FT1VULFxuICBOb2RlSHR0cEhhbmRsZXIsXG4gIE5vZGVIdHRwMkhhbmRsZXIsXG4gIHN0cmVhbUNvbGxlY3RvclxufSk7XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNka1N0cmVhbU1peGluID0gdm9pZCAwO1xuY29uc3Qgbm9kZV9odHRwX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyXCIpO1xuY29uc3QgdXRpbF9idWZmZXJfZnJvbV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbVwiKTtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgRVJSX01TR19TVFJFQU1fSEFTX0JFRU5fVFJBTlNGT1JNRUQgPSBcIlRoZSBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiB0cmFuc2Zvcm1lZC5cIjtcbmNvbnN0IHNka1N0cmVhbU1peGluID0gKHN0cmVhbSkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2Ygc3RyZWFtXzEuUmVhZGFibGUpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAoKF9iID0gKF9hID0gc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RyZWFtLl9fcHJvdG9fXykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubmFtZSkgfHwgc3RyZWFtO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RyZWFtIGltcGxlbWVudGF0aW9uLCBleHBlY3QgU3RyZWFtLlJlYWRhYmxlIGluc3RhbmNlLCBnb3QgJHtuYW1lfWApO1xuICAgIH1cbiAgICBsZXQgdHJhbnNmb3JtZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0cmFuc2Zvcm1Ub0J5dGVBcnJheSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJSX01TR19TVFJFQU1fSEFTX0JFRU5fVFJBTlNGT1JNRUQpO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zZm9ybWVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBub2RlX2h0dHBfaGFuZGxlcl8xLnN0cmVhbUNvbGxlY3Rvcikoc3RyZWFtKTtcbiAgICB9O1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0cmVhbSwge1xuICAgICAgICB0cmFuc2Zvcm1Ub0J5dGVBcnJheSxcbiAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGFzeW5jIChlbmNvZGluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmID0gYXdhaXQgdHJhbnNmb3JtVG9CeXRlQXJyYXkoKTtcbiAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkIHx8IEJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbF9idWZmZXJfZnJvbV8xLmZyb21BcnJheUJ1ZmZlcikoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKS50b1N0cmluZyhlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IHV0aWxfMS5UZXh0RGVjb2RlcihlbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGJ1Zik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybVRvV2ViU3RyZWFtOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJSX01TR19TVFJFQU1fSEFTX0JFRU5fVFJBTlNGT1JNRUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cmVhbS5yZWFkYWJsZUZsb3dpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RyZWFtIGhhcyBiZWVuIGNvbnN1bWVkIGJ5IG90aGVyIGNhbGxiYWNrcy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0cmVhbV8xLlJlYWRhYmxlLnRvV2ViICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFkYWJsZS50b1dlYigpIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBOb2RlLmpzID49IDE3LjAuMCwgb3IgcG9seWZpbGwgaXMgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzdHJlYW1fMS5SZWFkYWJsZS50b1dlYihzdHJlYW0pO1xuICAgICAgICB9LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2RrU3RyZWFtTWl4aW4gPSBzZGtTdHJlYW1NaXhpbjtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX19yZUV4cG9ydCA9ICh0YXJnZXQsIG1vZCwgc2Vjb25kVGFyZ2V0KSA9PiAoX19jb3B5UHJvcHModGFyZ2V0LCBtb2QsIFwiZGVmYXVsdFwiKSwgc2Vjb25kVGFyZ2V0ICYmIF9fY29weVByb3BzKHNlY29uZFRhcmdldCwgbW9kLCBcImRlZmF1bHRcIikpO1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBVaW50OEFycmF5QmxvYkFkYXB0ZXI6ICgpID0+IFVpbnQ4QXJyYXlCbG9iQWRhcHRlclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9ibG9iL3RyYW5zZm9ybXMudHNcbnZhciBpbXBvcnRfdXRpbF9iYXNlNjQgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJhc2U2NFwiKTtcbnZhciBpbXBvcnRfdXRpbF91dGY4ID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC11dGY4XCIpO1xuZnVuY3Rpb24gdHJhbnNmb3JtVG9TdHJpbmcocGF5bG9hZCwgZW5jb2RpbmcgPSBcInV0Zi04XCIpIHtcbiAgaWYgKGVuY29kaW5nID09PSBcImJhc2U2NFwiKSB7XG4gICAgcmV0dXJuICgwLCBpbXBvcnRfdXRpbF9iYXNlNjQudG9CYXNlNjQpKHBheWxvYWQpO1xuICB9XG4gIHJldHVybiAoMCwgaW1wb3J0X3V0aWxfdXRmOC50b1V0ZjgpKHBheWxvYWQpO1xufVxuX19uYW1lKHRyYW5zZm9ybVRvU3RyaW5nLCBcInRyYW5zZm9ybVRvU3RyaW5nXCIpO1xuZnVuY3Rpb24gdHJhbnNmb3JtRnJvbVN0cmluZyhzdHIsIGVuY29kaW5nKSB7XG4gIGlmIChlbmNvZGluZyA9PT0gXCJiYXNlNjRcIikge1xuICAgIHJldHVybiBVaW50OEFycmF5QmxvYkFkYXB0ZXIubXV0YXRlKCgwLCBpbXBvcnRfdXRpbF9iYXNlNjQuZnJvbUJhc2U2NCkoc3RyKSk7XG4gIH1cbiAgcmV0dXJuIFVpbnQ4QXJyYXlCbG9iQWRhcHRlci5tdXRhdGUoKDAsIGltcG9ydF91dGlsX3V0ZjguZnJvbVV0ZjgpKHN0cikpO1xufVxuX19uYW1lKHRyYW5zZm9ybUZyb21TdHJpbmcsIFwidHJhbnNmb3JtRnJvbVN0cmluZ1wiKTtcblxuLy8gc3JjL2Jsb2IvVWludDhBcnJheUJsb2JBZGFwdGVyLnRzXG52YXIgX1VpbnQ4QXJyYXlCbG9iQWRhcHRlciA9IGNsYXNzIF9VaW50OEFycmF5QmxvYkFkYXB0ZXIgZXh0ZW5kcyBVaW50OEFycmF5IHtcbiAgLyoqXG4gICAqIEBwYXJhbSBzb3VyY2UgLSBzdWNoIGFzIGEgc3RyaW5nIG9yIFN0cmVhbS5cbiAgICogQHJldHVybnMgYSBuZXcgVWludDhBcnJheUJsb2JBZGFwdGVyIGV4dGVuZGluZyBVaW50OEFycmF5LlxuICAgKi9cbiAgc3RhdGljIGZyb21TdHJpbmcoc291cmNlLCBlbmNvZGluZyA9IFwidXRmLThcIikge1xuICAgIHN3aXRjaCAodHlwZW9mIHNvdXJjZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtRnJvbVN0cmluZyhzb3VyY2UsIGVuY29kaW5nKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29udmVyc2lvbiBmcm9tICR7dHlwZW9mIHNvdXJjZX0gdG8gVWludDhBcnJheUJsb2JBZGFwdGVyLmApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHNvdXJjZSAtIFVpbnQ4QXJyYXkgdG8gYmUgbXV0YXRlZC5cbiAgICogQHJldHVybnMgdGhlIHNhbWUgVWludDhBcnJheSBidXQgd2l0aCBwcm90b3R5cGUgc3dpdGNoZWQgdG8gVWludDhBcnJheUJsb2JBZGFwdGVyLlxuICAgKi9cbiAgc3RhdGljIG11dGF0ZShzb3VyY2UpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc291cmNlLCBfVWludDhBcnJheUJsb2JBZGFwdGVyLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIGVuY29kaW5nIC0gZGVmYXVsdCAndXRmLTgnLlxuICAgKiBAcmV0dXJucyB0aGUgYmxvYiBhcyBzdHJpbmcuXG4gICAqL1xuICB0cmFuc2Zvcm1Ub1N0cmluZyhlbmNvZGluZyA9IFwidXRmLThcIikge1xuICAgIHJldHVybiB0cmFuc2Zvcm1Ub1N0cmluZyh0aGlzLCBlbmNvZGluZyk7XG4gIH1cbn07XG5fX25hbWUoX1VpbnQ4QXJyYXlCbG9iQWRhcHRlciwgXCJVaW50OEFycmF5QmxvYkFkYXB0ZXJcIik7XG52YXIgVWludDhBcnJheUJsb2JBZGFwdGVyID0gX1VpbnQ4QXJyYXlCbG9iQWRhcHRlcjtcblxuLy8gc3JjL2luZGV4LnRzXG5fX3JlRXhwb3J0KHNyY19leHBvcnRzLCByZXF1aXJlKFwiLi8uL2dldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbVwiKSwgbW9kdWxlLmV4cG9ydHMpO1xuX19yZUV4cG9ydChzcmNfZXhwb3J0cywgcmVxdWlyZShcIi4vLi9zZGstc3RyZWFtLW1peGluXCIpLCBtb2R1bGUuZXhwb3J0cyk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBVaW50OEFycmF5QmxvYkFkYXB0ZXIsXG4gIGdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSxcbiAgc2RrU3RyZWFtTWl4aW5cbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBDbGllbnQ6ICgpID0+IENsaWVudCxcbiAgQ29tbWFuZDogKCkgPT4gQ29tbWFuZCxcbiAgTGF6eUpzb25TdHJpbmc6ICgpID0+IExhenlKc29uU3RyaW5nLFxuICBOb09wTG9nZ2VyOiAoKSA9PiBOb09wTG9nZ2VyLFxuICBTRU5TSVRJVkVfU1RSSU5HOiAoKSA9PiBTRU5TSVRJVkVfU1RSSU5HLFxuICBTZXJ2aWNlRXhjZXB0aW9uOiAoKSA9PiBTZXJ2aWNlRXhjZXB0aW9uLFxuICBTdHJpbmdXcmFwcGVyOiAoKSA9PiBTdHJpbmdXcmFwcGVyLFxuICBfanNvbjogKCkgPT4gX2pzb24sXG4gIGNvbGxlY3RCb2R5OiAoKSA9PiBjb2xsZWN0Qm9keSxcbiAgY29udmVydE1hcDogKCkgPT4gY29udmVydE1hcCxcbiAgY3JlYXRlQWdncmVnYXRlZENsaWVudDogKCkgPT4gY3JlYXRlQWdncmVnYXRlZENsaWVudCxcbiAgZGF0ZVRvVXRjU3RyaW5nOiAoKSA9PiBkYXRlVG9VdGNTdHJpbmcsXG4gIGRlY29yYXRlU2VydmljZUV4Y2VwdGlvbjogKCkgPT4gZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uLFxuICBlbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uOiAoKSA9PiBlbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uLFxuICBleHBlY3RCb29sZWFuOiAoKSA9PiBleHBlY3RCb29sZWFuLFxuICBleHBlY3RCeXRlOiAoKSA9PiBleHBlY3RCeXRlLFxuICBleHBlY3RGbG9hdDMyOiAoKSA9PiBleHBlY3RGbG9hdDMyLFxuICBleHBlY3RJbnQ6ICgpID0+IGV4cGVjdEludCxcbiAgZXhwZWN0SW50MzI6ICgpID0+IGV4cGVjdEludDMyLFxuICBleHBlY3RMb25nOiAoKSA9PiBleHBlY3RMb25nLFxuICBleHBlY3ROb25OdWxsOiAoKSA9PiBleHBlY3ROb25OdWxsLFxuICBleHBlY3ROdW1iZXI6ICgpID0+IGV4cGVjdE51bWJlcixcbiAgZXhwZWN0T2JqZWN0OiAoKSA9PiBleHBlY3RPYmplY3QsXG4gIGV4cGVjdFNob3J0OiAoKSA9PiBleHBlY3RTaG9ydCxcbiAgZXhwZWN0U3RyaW5nOiAoKSA9PiBleHBlY3RTdHJpbmcsXG4gIGV4cGVjdFVuaW9uOiAoKSA9PiBleHBlY3RVbmlvbixcbiAgZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQ6ICgpID0+IGV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50LFxuICBnZXRBcnJheUlmU2luZ2xlSXRlbTogKCkgPT4gZ2V0QXJyYXlJZlNpbmdsZUl0ZW0sXG4gIGdldERlZmF1bHRDbGllbnRDb25maWd1cmF0aW9uOiAoKSA9PiBnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbixcbiAgZ2V0RGVmYXVsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb246ICgpID0+IGdldERlZmF1bHRFeHRlbnNpb25Db25maWd1cmF0aW9uLFxuICBnZXRWYWx1ZUZyb21UZXh0Tm9kZTogKCkgPT4gZ2V0VmFsdWVGcm9tVGV4dE5vZGUsXG4gIGhhbmRsZUZsb2F0OiAoKSA9PiBoYW5kbGVGbG9hdCxcbiAgbGltaXRlZFBhcnNlRG91YmxlOiAoKSA9PiBsaW1pdGVkUGFyc2VEb3VibGUsXG4gIGxpbWl0ZWRQYXJzZUZsb2F0OiAoKSA9PiBsaW1pdGVkUGFyc2VGbG9hdCxcbiAgbGltaXRlZFBhcnNlRmxvYXQzMjogKCkgPT4gbGltaXRlZFBhcnNlRmxvYXQzMixcbiAgbG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZTogKCkgPT4gbG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZSxcbiAgbG9nZ2VyOiAoKSA9PiBsb2dnZXIsXG4gIG1hcDogKCkgPT4gbWFwLFxuICBwYXJzZUJvb2xlYW46ICgpID0+IHBhcnNlQm9vbGVhbixcbiAgcGFyc2VFcG9jaFRpbWVzdGFtcDogKCkgPT4gcGFyc2VFcG9jaFRpbWVzdGFtcCxcbiAgcGFyc2VSZmMzMzM5RGF0ZVRpbWU6ICgpID0+IHBhcnNlUmZjMzMzOURhdGVUaW1lLFxuICBwYXJzZVJmYzMzMzlEYXRlVGltZVdpdGhPZmZzZXQ6ICgpID0+IHBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCxcbiAgcGFyc2VSZmM3MjMxRGF0ZVRpbWU6ICgpID0+IHBhcnNlUmZjNzIzMURhdGVUaW1lLFxuICByZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWc6ICgpID0+IHJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZyxcbiAgcmVzb2x2ZWRQYXRoOiAoKSA9PiByZXNvbHZlZFBhdGgsXG4gIHNlcmlhbGl6ZUZsb2F0OiAoKSA9PiBzZXJpYWxpemVGbG9hdCxcbiAgc3BsaXRFdmVyeTogKCkgPT4gc3BsaXRFdmVyeSxcbiAgc3RyaWN0UGFyc2VCeXRlOiAoKSA9PiBzdHJpY3RQYXJzZUJ5dGUsXG4gIHN0cmljdFBhcnNlRG91YmxlOiAoKSA9PiBzdHJpY3RQYXJzZURvdWJsZSxcbiAgc3RyaWN0UGFyc2VGbG9hdDogKCkgPT4gc3RyaWN0UGFyc2VGbG9hdCxcbiAgc3RyaWN0UGFyc2VGbG9hdDMyOiAoKSA9PiBzdHJpY3RQYXJzZUZsb2F0MzIsXG4gIHN0cmljdFBhcnNlSW50OiAoKSA9PiBzdHJpY3RQYXJzZUludCxcbiAgc3RyaWN0UGFyc2VJbnQzMjogKCkgPT4gc3RyaWN0UGFyc2VJbnQzMixcbiAgc3RyaWN0UGFyc2VMb25nOiAoKSA9PiBzdHJpY3RQYXJzZUxvbmcsXG4gIHN0cmljdFBhcnNlU2hvcnQ6ICgpID0+IHN0cmljdFBhcnNlU2hvcnQsXG4gIHRha2U6ICgpID0+IHRha2UsXG4gIHRocm93RGVmYXVsdEVycm9yOiAoKSA9PiB0aHJvd0RlZmF1bHRFcnJvcixcbiAgd2l0aEJhc2VFeGNlcHRpb246ICgpID0+IHdpdGhCYXNlRXhjZXB0aW9uXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL05vT3BMb2dnZXIudHNcbnZhciBfTm9PcExvZ2dlciA9IGNsYXNzIF9Ob09wTG9nZ2VyIHtcbiAgdHJhY2UoKSB7XG4gIH1cbiAgZGVidWcoKSB7XG4gIH1cbiAgaW5mbygpIHtcbiAgfVxuICB3YXJuKCkge1xuICB9XG4gIGVycm9yKCkge1xuICB9XG59O1xuX19uYW1lKF9Ob09wTG9nZ2VyLCBcIk5vT3BMb2dnZXJcIik7XG52YXIgTm9PcExvZ2dlciA9IF9Ob09wTG9nZ2VyO1xuXG4vLyBzcmMvY2xpZW50LnRzXG52YXIgaW1wb3J0X21pZGRsZXdhcmVfc3RhY2sgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXN0YWNrXCIpO1xudmFyIF9DbGllbnQgPSBjbGFzcyBfQ2xpZW50IHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5taWRkbGV3YXJlU3RhY2sgPSAoMCwgaW1wb3J0X21pZGRsZXdhcmVfc3RhY2suY29uc3RydWN0U3RhY2spKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cbiAgc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYiwgY2IpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnNPckNiICE9PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zT3JDYiA6IHZvaWQgMDtcbiAgICBjb25zdCBjYWxsYmFjayA9IHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9uc09yQ2IgOiBjYjtcbiAgICBjb25zdCBoYW5kbGVyID0gY29tbWFuZC5yZXNvbHZlTWlkZGxld2FyZSh0aGlzLm1pZGRsZXdhcmVTdGFjaywgdGhpcy5jb25maWcsIG9wdGlvbnMpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgaGFuZGxlcihjb21tYW5kKS50aGVuKFxuICAgICAgICAocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCByZXN1bHQub3V0cHV0KSxcbiAgICAgICAgKGVycikgPT4gY2FsbGJhY2soZXJyKVxuICAgICAgKS5jYXRjaChcbiAgICAgICAgLy8gcHJldmVudCBhbnkgZXJyb3JzIHRocm93biBpbiB0aGUgY2FsbGJhY2sgZnJvbSB0cmlnZ2VyaW5nIGFuXG4gICAgICAgIC8vIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvblxuICAgICAgICAoKSA9PiB7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBoYW5kbGVyKGNvbW1hbmQpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0Lm91dHB1dCk7XG4gICAgfVxuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlcXVlc3RIYW5kbGVyLmRlc3Ryb3kpXG4gICAgICB0aGlzLmNvbmZpZy5yZXF1ZXN0SGFuZGxlci5kZXN0cm95KCk7XG4gIH1cbn07XG5fX25hbWUoX0NsaWVudCwgXCJDbGllbnRcIik7XG52YXIgQ2xpZW50ID0gX0NsaWVudDtcblxuLy8gc3JjL2NvbGxlY3Qtc3RyZWFtLWJvZHkudHNcbnZhciBpbXBvcnRfdXRpbF9zdHJlYW0gPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXN0cmVhbVwiKTtcbnZhciBjb2xsZWN0Qm9keSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHN0cmVhbUJvZHkgPSBuZXcgVWludDhBcnJheSgpLCBjb250ZXh0KSA9PiB7XG4gIGlmIChzdHJlYW1Cb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBpbXBvcnRfdXRpbF9zdHJlYW0uVWludDhBcnJheUJsb2JBZGFwdGVyLm11dGF0ZShzdHJlYW1Cb2R5KTtcbiAgfVxuICBpZiAoIXN0cmVhbUJvZHkpIHtcbiAgICByZXR1cm4gaW1wb3J0X3V0aWxfc3RyZWFtLlVpbnQ4QXJyYXlCbG9iQWRhcHRlci5tdXRhdGUobmV3IFVpbnQ4QXJyYXkoKSk7XG4gIH1cbiAgY29uc3QgZnJvbUNvbnRleHQgPSBjb250ZXh0LnN0cmVhbUNvbGxlY3RvcihzdHJlYW1Cb2R5KTtcbiAgcmV0dXJuIGltcG9ydF91dGlsX3N0cmVhbS5VaW50OEFycmF5QmxvYkFkYXB0ZXIubXV0YXRlKGF3YWl0IGZyb21Db250ZXh0KTtcbn0sIFwiY29sbGVjdEJvZHlcIik7XG5cbi8vIHNyYy9jb21tYW5kLnRzXG5cbnZhciBpbXBvcnRfdHlwZXMgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbnZhciBfQ29tbWFuZCA9IGNsYXNzIF9Db21tYW5kIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5taWRkbGV3YXJlU3RhY2sgPSAoMCwgaW1wb3J0X21pZGRsZXdhcmVfc3RhY2suY29uc3RydWN0U3RhY2spKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZhY3RvcnkgZm9yIENvbW1hbmQgQ2xhc3NCdWlsZGVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0YXRpYyBjbGFzc0J1aWxkZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzc0J1aWxkZXIoKTtcbiAgfVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZXNvbHZlTWlkZGxld2FyZVdpdGhDb250ZXh0KGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zLCB7XG4gICAgbWlkZGxld2FyZUZuLFxuICAgIGNsaWVudE5hbWUsXG4gICAgY29tbWFuZE5hbWUsXG4gICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgIHNtaXRoeUNvbnRleHQsXG4gICAgYWRkaXRpb25hbENvbnRleHQsXG4gICAgQ29tbWFuZEN0b3JcbiAgfSkge1xuICAgIGZvciAoY29uc3QgbXcgb2YgbWlkZGxld2FyZUZuLmJpbmQodGhpcykoQ29tbWFuZEN0b3IsIGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSkge1xuICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKG13KTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgIGNvbnN0IHsgbG9nZ2VyOiBsb2dnZXIyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgbG9nZ2VyOiBsb2dnZXIyLFxuICAgICAgY2xpZW50TmFtZSxcbiAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICBbaW1wb3J0X3R5cGVzLlNNSVRIWV9DT05URVhUX0tFWV06IHtcbiAgICAgICAgLi4uc21pdGh5Q29udGV4dFxuICAgICAgfSxcbiAgICAgIC4uLmFkZGl0aW9uYWxDb250ZXh0XG4gICAgfTtcbiAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgIHJldHVybiBzdGFjay5yZXNvbHZlKFxuICAgICAgKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLFxuICAgICAgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHRcbiAgICApO1xuICB9XG59O1xuX19uYW1lKF9Db21tYW5kLCBcIkNvbW1hbmRcIik7XG52YXIgQ29tbWFuZCA9IF9Db21tYW5kO1xudmFyIF9DbGFzc0J1aWxkZXIgPSBjbGFzcyBfQ2xhc3NCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5pdCA9ICgpID0+IHtcbiAgICB9O1xuICAgIHRoaXMuX2VwID0ge307XG4gICAgdGhpcy5fbWlkZGxld2FyZUZuID0gKCkgPT4gW107XG4gICAgdGhpcy5fY29tbWFuZE5hbWUgPSBcIlwiO1xuICAgIHRoaXMuX2NsaWVudE5hbWUgPSBcIlwiO1xuICAgIHRoaXMuX2FkZGl0aW9uYWxDb250ZXh0ID0ge307XG4gICAgdGhpcy5fc21pdGh5Q29udGV4dCA9IHt9O1xuICAgIHRoaXMuX2lucHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKF8pID0+IF87XG4gICAgdGhpcy5fb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKF8pID0+IF87XG4gICAgdGhpcy5fc2VyaWFsaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGVzZXJpYWxpemVyID0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogT3B0aW9uYWwgaW5pdCBjYWxsYmFjay5cbiAgICovXG4gIGluaXQoY2IpIHtcbiAgICB0aGlzLl9pbml0ID0gY2I7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZW5kcG9pbnQgcGFyYW1ldGVyIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGVwKGVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKSB7XG4gICAgdGhpcy5fZXAgPSBlbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQWRkIGFueSBudW1iZXIgb2YgbWlkZGxld2FyZS5cbiAgICovXG4gIG0obWlkZGxld2FyZVN1cHBsaWVyKSB7XG4gICAgdGhpcy5fbWlkZGxld2FyZUZuID0gbWlkZGxld2FyZVN1cHBsaWVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGluaXRpYWwgaGFuZGxlciBleGVjdXRpb24gY29udGV4dCBTbWl0aHkgZmllbGQuXG4gICAqL1xuICBzKHNlcnZpY2UsIG9wZXJhdGlvbiwgc21pdGh5Q29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5fc21pdGh5Q29udGV4dCA9IHtcbiAgICAgIHNlcnZpY2UsXG4gICAgICBvcGVyYXRpb24sXG4gICAgICAuLi5zbWl0aHlDb250ZXh0XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBpbml0aWFsIGhhbmRsZXIgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAqL1xuICBjKGFkZGl0aW9uYWxDb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLl9hZGRpdGlvbmFsQ29udGV4dCA9IGFkZGl0aW9uYWxDb250ZXh0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgY29uc3RhbnQgc3RyaW5nIGlkZW50aWZpZXJzIGZvciB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgbihjbGllbnROYW1lLCBjb21tYW5kTmFtZSkge1xuICAgIHRoaXMuX2NsaWVudE5hbWUgPSBjbGllbnROYW1lO1xuICAgIHRoaXMuX2NvbW1hbmROYW1lID0gY29tbWFuZE5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzZW5zaXN0aXZlIGxvZyBmaWx0ZXJzLlxuICAgKi9cbiAgZihpbnB1dEZpbHRlciA9IChfKSA9PiBfLCBvdXRwdXRGaWx0ZXIgPSAoXykgPT4gXykge1xuICAgIHRoaXMuX2lucHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gaW5wdXRGaWx0ZXI7XG4gICAgdGhpcy5fb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gb3V0cHV0RmlsdGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZXJpYWxpemVyLlxuICAgKi9cbiAgc2VyKHNlcmlhbGl6ZXIpIHtcbiAgICB0aGlzLl9zZXJpYWxpemVyID0gc2VyaWFsaXplcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgZGVzZXJpYWxpemVyLlxuICAgKi9cbiAgZGUoZGVzZXJpYWxpemVyKSB7XG4gICAgdGhpcy5fZGVzZXJpYWxpemVyID0gZGVzZXJpYWxpemVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcmV0dXJucyBhIENvbW1hbmQgY2xhc3Mgd2l0aCB0aGUgY2xhc3NCdWlsZGVyIHByb3BlcnRpZXMuXG4gICAqL1xuICBidWlsZCgpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgY2xvc3VyZSA9IHRoaXM7XG4gICAgbGV0IENvbW1hbmRSZWY7XG4gICAgcmV0dXJuIENvbW1hbmRSZWYgPSAoX2EgPSBjbGFzcyBleHRlbmRzIENvbW1hbmQge1xuICAgICAgLyoqXG4gICAgICAgKiBAcHVibGljXG4gICAgICAgKi9cbiAgICAgIGNvbnN0cnVjdG9yKC4uLltpbnB1dF0pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgLy8gQHRzLWlnbm9yZSB1c2VkIGluIG1pZGRsZXdhcmVGbiBjbG9zdXJlLlxuICAgICAgICB0aGlzLnNlcmlhbGl6ZSA9IGNsb3N1cmUuX3NlcmlhbGl6ZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgdXNlZCBpbiBtaWRkbGV3YXJlRm4gY2xvc3VyZS5cbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZSA9IGNsb3N1cmUuX2Rlc2VyaWFsaXplcjtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0ID8/IHt9O1xuICAgICAgICBjbG9zdXJlLl9pbml0KHRoaXMpO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBAcHVibGljXG4gICAgICAgKi9cbiAgICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIGNsb3N1cmUuX2VwO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAqL1xuICAgICAgcmVzb2x2ZU1pZGRsZXdhcmUoc3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZU1pZGRsZXdhcmVXaXRoQ29udGV4dChzdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucywge1xuICAgICAgICAgIENvbW1hbmRDdG9yOiBDb21tYW5kUmVmLFxuICAgICAgICAgIG1pZGRsZXdhcmVGbjogY2xvc3VyZS5fbWlkZGxld2FyZUZuLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGNsb3N1cmUuX2NsaWVudE5hbWUsXG4gICAgICAgICAgY29tbWFuZE5hbWU6IGNsb3N1cmUuX2NvbW1hbmROYW1lLFxuICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBjbG9zdXJlLl9pbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IGNsb3N1cmUuX291dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICBzbWl0aHlDb250ZXh0OiBjbG9zdXJlLl9zbWl0aHlDb250ZXh0LFxuICAgICAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiBjbG9zdXJlLl9hZGRpdGlvbmFsQ29udGV4dFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBfX25hbWUoX2EsIFwiQ29tbWFuZFJlZlwiKSwgX2EpO1xuICB9XG59O1xuX19uYW1lKF9DbGFzc0J1aWxkZXIsIFwiQ2xhc3NCdWlsZGVyXCIpO1xudmFyIENsYXNzQnVpbGRlciA9IF9DbGFzc0J1aWxkZXI7XG5cbi8vIHNyYy9jb25zdGFudHMudHNcbnZhciBTRU5TSVRJVkVfU1RSSU5HID0gXCIqKipTZW5zaXRpdmVJbmZvcm1hdGlvbioqKlwiO1xuXG4vLyBzcmMvY3JlYXRlLWFnZ3JlZ2F0ZWQtY2xpZW50LnRzXG52YXIgY3JlYXRlQWdncmVnYXRlZENsaWVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbW1hbmRzLCBDbGllbnQyKSA9PiB7XG4gIGZvciAoY29uc3QgY29tbWFuZCBvZiBPYmplY3Qua2V5cyhjb21tYW5kcykpIHtcbiAgICBjb25zdCBDb21tYW5kQ3RvciA9IGNvbW1hbmRzW2NvbW1hbmRdO1xuICAgIGNvbnN0IG1ldGhvZEltcGwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGFyZ3MsIG9wdGlvbnNPckNiLCBjYikge1xuICAgICAgY29uc3QgY29tbWFuZDIgPSBuZXcgQ29tbWFuZEN0b3IoYXJncyk7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5zZW5kKGNvbW1hbmQyLCBvcHRpb25zT3JDYik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBodHRwIG9wdGlvbnMgYnV0IGdvdCAke3R5cGVvZiBvcHRpb25zT3JDYn1gKTtcbiAgICAgICAgdGhpcy5zZW5kKGNvbW1hbmQyLCBvcHRpb25zT3JDYiB8fCB7fSwgY2IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZChjb21tYW5kMiwgb3B0aW9uc09yQ2IpO1xuICAgICAgfVxuICAgIH0sIFwibWV0aG9kSW1wbFwiKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gKGNvbW1hbmRbMF0udG9Mb3dlckNhc2UoKSArIGNvbW1hbmQuc2xpY2UoMSkpLnJlcGxhY2UoL0NvbW1hbmQkLywgXCJcIik7XG4gICAgQ2xpZW50Mi5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBtZXRob2RJbXBsO1xuICB9XG59LCBcImNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnRcIik7XG5cbi8vIHNyYy9wYXJzZS11dGlscy50c1xudmFyIHBhcnNlQm9vbGVhbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIFwidHJ1ZVwiOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSBcImZhbHNlXCI6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGJvb2xlYW4gdmFsdWUgXCIke3ZhbHVlfVwiYCk7XG4gIH1cbn0sIFwicGFyc2VCb29sZWFuXCIpO1xudmFyIGV4cGVjdEJvb2xlYW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmICh2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMSkge1xuICAgICAgbG9nZ2VyLndhcm4oc3RhY2tUcmFjZVdhcm5pbmcoYEV4cGVjdGVkIGJvb2xlYW4sIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGxvd2VyID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIgPT09IFwiZmFsc2VcIiB8fCBsb3dlciA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIGxvZ2dlci53YXJuKHN0YWNrVHJhY2VXYXJuaW5nKGBFeHBlY3RlZCBib29sZWFuLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApKTtcbiAgICB9XG4gICAgaWYgKGxvd2VyID09PSBcImZhbHNlXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxvd2VyID09PSBcInRydWVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGJvb2xlYW4sIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59LCBcImV4cGVjdEJvb2xlYW5cIik7XG52YXIgZXhwZWN0TnVtYmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQpKSB7XG4gICAgICBpZiAoU3RyaW5nKHBhcnNlZCkgIT09IFN0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oc3RhY2tUcmFjZVdhcm5pbmcoYEV4cGVjdGVkIG51bWJlciBidXQgb2JzZXJ2ZWQgc3RyaW5nOiAke3ZhbHVlfWApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgbnVtYmVyLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApO1xufSwgXCJleHBlY3ROdW1iZXJcIik7XG52YXIgTUFYX0ZMT0FUID0gTWF0aC5jZWlsKDIgKiogMTI3ICogKDIgLSAyICoqIC0yMykpO1xudmFyIGV4cGVjdEZsb2F0MzIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBjb25zdCBleHBlY3RlZCA9IGV4cGVjdE51bWJlcih2YWx1ZSk7XG4gIGlmIChleHBlY3RlZCAhPT0gdm9pZCAwICYmICFOdW1iZXIuaXNOYU4oZXhwZWN0ZWQpICYmIGV4cGVjdGVkICE9PSBJbmZpbml0eSAmJiBleHBlY3RlZCAhPT0gLUluZmluaXR5KSB7XG4gICAgaWYgKE1hdGguYWJzKGV4cGVjdGVkKSA+IE1BWF9GTE9BVCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgMzItYml0IGZsb2F0LCBnb3QgJHt2YWx1ZX1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cGVjdGVkO1xufSwgXCJleHBlY3RGbG9hdDMyXCIpO1xudmFyIGV4cGVjdExvbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmICFOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGludGVnZXIsIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59LCBcImV4cGVjdExvbmdcIik7XG52YXIgZXhwZWN0SW50ID0gZXhwZWN0TG9uZztcbnZhciBleHBlY3RJbnQzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiBleHBlY3RTaXplZEludCh2YWx1ZSwgMzIpLCBcImV4cGVjdEludDMyXCIpO1xudmFyIGV4cGVjdFNob3J0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IGV4cGVjdFNpemVkSW50KHZhbHVlLCAxNiksIFwiZXhwZWN0U2hvcnRcIik7XG52YXIgZXhwZWN0Qnl0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiBleHBlY3RTaXplZEludCh2YWx1ZSwgOCksIFwiZXhwZWN0Qnl0ZVwiKTtcbnZhciBleHBlY3RTaXplZEludCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBzaXplKSA9PiB7XG4gIGNvbnN0IGV4cGVjdGVkID0gZXhwZWN0TG9uZyh2YWx1ZSk7XG4gIGlmIChleHBlY3RlZCAhPT0gdm9pZCAwICYmIGNhc3RJbnQoZXhwZWN0ZWQsIHNpemUpICE9PSBleHBlY3RlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICR7c2l6ZX0tYml0IGludGVnZXIsIGdvdCAke3ZhbHVlfWApO1xuICB9XG4gIHJldHVybiBleHBlY3RlZDtcbn0sIFwiZXhwZWN0U2l6ZWRJbnRcIik7XG52YXIgY2FzdEludCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBzaXplKSA9PiB7XG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgMzI6XG4gICAgICByZXR1cm4gSW50MzJBcnJheS5vZih2YWx1ZSlbMF07XG4gICAgY2FzZSAxNjpcbiAgICAgIHJldHVybiBJbnQxNkFycmF5Lm9mKHZhbHVlKVswXTtcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gSW50OEFycmF5Lm9mKHZhbHVlKVswXTtcbiAgfVxufSwgXCJjYXN0SW50XCIpO1xudmFyIGV4cGVjdE5vbk51bGwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgbG9jYXRpb24pID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDApIHtcbiAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgbm9uLW51bGwgdmFsdWUgZm9yICR7bG9jYXRpb259YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlXCIpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn0sIFwiZXhwZWN0Tm9uTnVsbFwiKTtcbnZhciBleHBlY3RPYmplY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgY29uc3QgcmVjZWl2ZWRUeXBlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBcImFycmF5XCIgOiB0eXBlb2YgdmFsdWU7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIG9iamVjdCwgZ290ICR7cmVjZWl2ZWRUeXBlfTogJHt2YWx1ZX1gKTtcbn0sIFwiZXhwZWN0T2JqZWN0XCIpO1xudmFyIGV4cGVjdFN0cmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChbXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwiYmlnaW50XCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICBsb2dnZXIud2FybihzdGFja1RyYWNlV2FybmluZyhgRXhwZWN0ZWQgc3RyaW5nLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApKTtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59LCBcImV4cGVjdFN0cmluZ1wiKTtcbnZhciBleHBlY3RVbmlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBhc09iamVjdCA9IGV4cGVjdE9iamVjdCh2YWx1ZSk7XG4gIGNvbnN0IHNldEtleXMgPSBPYmplY3QuZW50cmllcyhhc09iamVjdCkuZmlsdGVyKChbLCB2XSkgPT4gdiAhPSBudWxsKS5tYXAoKFtrXSkgPT4gayk7XG4gIGlmIChzZXRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuaW9ucyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgbm9uLW51bGwgbWVtYmVyLiBOb25lIHdlcmUgZm91bmQuYCk7XG4gIH1cbiAgaWYgKHNldEtleXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuaW9ucyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgbm9uLW51bGwgbWVtYmVyLiBLZXlzICR7c2V0S2V5c30gd2VyZSBub3QgbnVsbC5gKTtcbiAgfVxuICByZXR1cm4gYXNPYmplY3Q7XG59LCBcImV4cGVjdFVuaW9uXCIpO1xudmFyIHN0cmljdFBhcnNlRG91YmxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGV4cGVjdE51bWJlcihwYXJzZU51bWJlcih2YWx1ZSkpO1xuICB9XG4gIHJldHVybiBleHBlY3ROdW1iZXIodmFsdWUpO1xufSwgXCJzdHJpY3RQYXJzZURvdWJsZVwiKTtcbnZhciBzdHJpY3RQYXJzZUZsb2F0ID0gc3RyaWN0UGFyc2VEb3VibGU7XG52YXIgc3RyaWN0UGFyc2VGbG9hdDMyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGV4cGVjdEZsb2F0MzIocGFyc2VOdW1iZXIodmFsdWUpKTtcbiAgfVxuICByZXR1cm4gZXhwZWN0RmxvYXQzMih2YWx1ZSk7XG59LCBcInN0cmljdFBhcnNlRmxvYXQzMlwiKTtcbnZhciBOVU1CRVJfUkVHRVggPSAvKC0/KD86MHxbMS05XVxcZCopKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/KXwoLT9JbmZpbml0eSl8KE5hTikvZztcbnZhciBwYXJzZU51bWJlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSB2YWx1ZS5tYXRjaChOVU1CRVJfUkVHRVgpO1xuICBpZiAobWF0Y2hlcyA9PT0gbnVsbCB8fCBtYXRjaGVzWzBdLmxlbmd0aCAhPT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgcmVhbCBudW1iZXIsIGdvdCBpbXBsaWNpdCBOYU5gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59LCBcInBhcnNlTnVtYmVyXCIpO1xudmFyIGxpbWl0ZWRQYXJzZURvdWJsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYXJzZUZsb2F0U3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZXhwZWN0TnVtYmVyKHZhbHVlKTtcbn0sIFwibGltaXRlZFBhcnNlRG91YmxlXCIpO1xudmFyIGhhbmRsZUZsb2F0ID0gbGltaXRlZFBhcnNlRG91YmxlO1xudmFyIGxpbWl0ZWRQYXJzZUZsb2F0ID0gbGltaXRlZFBhcnNlRG91YmxlO1xudmFyIGxpbWl0ZWRQYXJzZUZsb2F0MzIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdEZsb2F0MzIodmFsdWUpO1xufSwgXCJsaW1pdGVkUGFyc2VGbG9hdDMyXCIpO1xudmFyIHBhcnNlRmxvYXRTdHJpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgY2FzZSBcIk5hTlwiOlxuICAgICAgcmV0dXJuIE5hTjtcbiAgICBjYXNlIFwiSW5maW5pdHlcIjpcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICBjYXNlIFwiLUluZmluaXR5XCI6XG4gICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBmbG9hdCB2YWx1ZTogJHt2YWx1ZX1gKTtcbiAgfVxufSwgXCJwYXJzZUZsb2F0U3RyaW5nXCIpO1xudmFyIHN0cmljdFBhcnNlTG9uZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZXhwZWN0TG9uZyhwYXJzZU51bWJlcih2YWx1ZSkpO1xuICB9XG4gIHJldHVybiBleHBlY3RMb25nKHZhbHVlKTtcbn0sIFwic3RyaWN0UGFyc2VMb25nXCIpO1xudmFyIHN0cmljdFBhcnNlSW50ID0gc3RyaWN0UGFyc2VMb25nO1xudmFyIHN0cmljdFBhcnNlSW50MzIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGV4cGVjdEludDMyKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdEludDMyKHZhbHVlKTtcbn0sIFwic3RyaWN0UGFyc2VJbnQzMlwiKTtcbnZhciBzdHJpY3RQYXJzZVNob3J0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBleHBlY3RTaG9ydChwYXJzZU51bWJlcih2YWx1ZSkpO1xuICB9XG4gIHJldHVybiBleHBlY3RTaG9ydCh2YWx1ZSk7XG59LCBcInN0cmljdFBhcnNlU2hvcnRcIik7XG52YXIgc3RyaWN0UGFyc2VCeXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBleHBlY3RCeXRlKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdEJ5dGUodmFsdWUpO1xufSwgXCJzdHJpY3RQYXJzZUJ5dGVcIik7XG52YXIgc3RhY2tUcmFjZVdhcm5pbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChtZXNzYWdlKSA9PiB7XG4gIHJldHVybiBTdHJpbmcobmV3IFR5cGVFcnJvcihtZXNzYWdlKS5zdGFjayB8fCBtZXNzYWdlKS5zcGxpdChcIlxcblwiKS5zbGljZSgwLCA1KS5maWx0ZXIoKHMpID0+ICFzLmluY2x1ZGVzKFwic3RhY2tUcmFjZVdhcm5pbmdcIikpLmpvaW4oXCJcXG5cIik7XG59LCBcInN0YWNrVHJhY2VXYXJuaW5nXCIpO1xudmFyIGxvZ2dlciA9IHtcbiAgd2FybjogY29uc29sZS53YXJuXG59O1xuXG4vLyBzcmMvZGF0ZS11dGlscy50c1xudmFyIERBWVMgPSBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl07XG52YXIgTU9OVEhTID0gW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdO1xuZnVuY3Rpb24gZGF0ZVRvVXRjU3RyaW5nKGRhdGUpIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgY29uc3QgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIGNvbnN0IGRheU9mTW9udGhJbnQgPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgY29uc3QgaG91cnNJbnQgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gIGNvbnN0IG1pbnV0ZXNJbnQgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbiAgY29uc3Qgc2Vjb25kc0ludCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xuICBjb25zdCBkYXlPZk1vbnRoU3RyaW5nID0gZGF5T2ZNb250aEludCA8IDEwID8gYDAke2RheU9mTW9udGhJbnR9YCA6IGAke2RheU9mTW9udGhJbnR9YDtcbiAgY29uc3QgaG91cnNTdHJpbmcgPSBob3Vyc0ludCA8IDEwID8gYDAke2hvdXJzSW50fWAgOiBgJHtob3Vyc0ludH1gO1xuICBjb25zdCBtaW51dGVzU3RyaW5nID0gbWludXRlc0ludCA8IDEwID8gYDAke21pbnV0ZXNJbnR9YCA6IGAke21pbnV0ZXNJbnR9YDtcbiAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IHNlY29uZHNJbnQgPCAxMCA/IGAwJHtzZWNvbmRzSW50fWAgOiBgJHtzZWNvbmRzSW50fWA7XG4gIHJldHVybiBgJHtEQVlTW2RheU9mV2Vla119LCAke2RheU9mTW9udGhTdHJpbmd9ICR7TU9OVEhTW21vbnRoXX0gJHt5ZWFyfSAke2hvdXJzU3RyaW5nfToke21pbnV0ZXNTdHJpbmd9OiR7c2Vjb25kc1N0cmluZ30gR01UYDtcbn1cbl9fbmFtZShkYXRlVG9VdGNTdHJpbmcsIFwiZGF0ZVRvVXRjU3RyaW5nXCIpO1xudmFyIFJGQzMzMzkgPSBuZXcgUmVnRXhwKC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlbdFRdKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpP1t6Wl0kLyk7XG52YXIgcGFyc2VSZmMzMzM5RGF0ZVRpbWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSRkMtMzMzOSBkYXRlLXRpbWVzIG11c3QgYmUgZXhwcmVzc2VkIGFzIHN0cmluZ3NcIik7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBSRkMzMzM5LmV4ZWModmFsdWUpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgUkZDLTMzMzkgZGF0ZS10aW1lIHZhbHVlXCIpO1xuICB9XG4gIGNvbnN0IFtfLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kc10gPSBtYXRjaDtcbiAgY29uc3QgeWVhciA9IHN0cmljdFBhcnNlU2hvcnQoc3RyaXBMZWFkaW5nWmVyb2VzKHllYXJTdHIpKTtcbiAgY29uc3QgbW9udGggPSBwYXJzZURhdGVWYWx1ZShtb250aFN0ciwgXCJtb250aFwiLCAxLCAxMik7XG4gIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVZhbHVlKGRheVN0ciwgXCJkYXlcIiwgMSwgMzEpO1xuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgfSk7XG59LCBcInBhcnNlUmZjMzMzOURhdGVUaW1lXCIpO1xudmFyIFJGQzMzMzlfV0lUSF9PRkZTRVQgPSBuZXcgUmVnRXhwKFxuICAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pW3RUXShcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pKD86XFwuKFxcZCspKT8oKFstK11cXGR7Mn1cXDpcXGR7Mn0pfFt6Wl0pJC9cbik7XG52YXIgcGFyc2VSZmMzMzM5RGF0ZVRpbWVXaXRoT2Zmc2V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUkZDLTMzMzkgZGF0ZS10aW1lcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBzdHJpbmdzXCIpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gUkZDMzMzOV9XSVRIX09GRlNFVC5leGVjKHZhbHVlKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFJGQy0zMzM5IGRhdGUtdGltZSB2YWx1ZVwiKTtcbiAgfVxuICBjb25zdCBbXywgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIG9mZnNldFN0cl0gPSBtYXRjaDtcbiAgY29uc3QgeWVhciA9IHN0cmljdFBhcnNlU2hvcnQoc3RyaXBMZWFkaW5nWmVyb2VzKHllYXJTdHIpKTtcbiAgY29uc3QgbW9udGggPSBwYXJzZURhdGVWYWx1ZShtb250aFN0ciwgXCJtb250aFwiLCAxLCAxMik7XG4gIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVZhbHVlKGRheVN0ciwgXCJkYXlcIiwgMSwgMzEpO1xuICBjb25zdCBkYXRlID0gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgfSk7XG4gIGlmIChvZmZzZXRTdHIudG9VcHBlckNhc2UoKSAhPSBcIlpcIikge1xuICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSAtIHBhcnNlT2Zmc2V0VG9NaWxsaXNlY29uZHMob2Zmc2V0U3RyKSk7XG4gIH1cbiAgcmV0dXJuIGRhdGU7XG59LCBcInBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldFwiKTtcbnZhciBJTUZfRklYREFURSA9IG5ldyBSZWdFeHAoXG4gIC9eKD86TW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSwgKFxcZHsyfSkgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoXFxkezR9KSAoXFxkezEsMn0pOihcXGR7Mn0pOihcXGR7Mn0pKD86XFwuKFxcZCspKT8gR01UJC9cbik7XG52YXIgUkZDXzg1MF9EQVRFID0gbmV3IFJlZ0V4cChcbiAgL14oPzpNb25kYXl8VHVlc2RheXxXZWRuZXNkYXl8VGh1cnNkYXl8RnJpZGF5fFNhdHVyZGF5fFN1bmRheSksIChcXGR7Mn0pLShKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYyktKFxcZHsyfSkgKFxcZHsxLDJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLihcXGQrKSk/IEdNVCQvXG4pO1xudmFyIEFTQ19USU1FID0gbmV3IFJlZ0V4cChcbiAgL14oPzpNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKCBbMS05XXxcXGR7Mn0pIChcXGR7MSwyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpPyAoXFxkezR9KSQvXG4pO1xudmFyIHBhcnNlUmZjNzIzMURhdGVUaW1lID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUkZDLTcyMzEgZGF0ZS10aW1lcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBzdHJpbmdzXCIpO1xuICB9XG4gIGxldCBtYXRjaCA9IElNRl9GSVhEQVRFLmV4ZWModmFsdWUpO1xuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbXywgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHNdID0gbWF0Y2g7XG4gICAgcmV0dXJuIGJ1aWxkRGF0ZShcbiAgICAgIHN0cmljdFBhcnNlU2hvcnQoc3RyaXBMZWFkaW5nWmVyb2VzKHllYXJTdHIpKSxcbiAgICAgIHBhcnNlTW9udGhCeVNob3J0TmFtZShtb250aFN0ciksXG4gICAgICBwYXJzZURhdGVWYWx1ZShkYXlTdHIsIFwiZGF5XCIsIDEsIDMxKSxcbiAgICAgIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgfVxuICAgICk7XG4gIH1cbiAgbWF0Y2ggPSBSRkNfODUwX0RBVEUuZXhlYyh2YWx1ZSk7XG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFtfLCBkYXlTdHIsIG1vbnRoU3RyLCB5ZWFyU3RyLCBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kc10gPSBtYXRjaDtcbiAgICByZXR1cm4gYWRqdXN0UmZjODUwWWVhcihcbiAgICAgIGJ1aWxkRGF0ZShwYXJzZVR3b0RpZ2l0WWVhcih5ZWFyU3RyKSwgcGFyc2VNb250aEJ5U2hvcnROYW1lKG1vbnRoU3RyKSwgcGFyc2VEYXRlVmFsdWUoZGF5U3RyLCBcImRheVwiLCAxLCAzMSksIHtcbiAgICAgICAgaG91cnMsXG4gICAgICAgIG1pbnV0ZXMsXG4gICAgICAgIHNlY29uZHMsXG4gICAgICAgIGZyYWN0aW9uYWxNaWxsaXNlY29uZHNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBtYXRjaCA9IEFTQ19USU1FLmV4ZWModmFsdWUpO1xuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbXywgbW9udGhTdHIsIGRheVN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIHllYXJTdHJdID0gbWF0Y2g7XG4gICAgcmV0dXJuIGJ1aWxkRGF0ZShcbiAgICAgIHN0cmljdFBhcnNlU2hvcnQoc3RyaXBMZWFkaW5nWmVyb2VzKHllYXJTdHIpKSxcbiAgICAgIHBhcnNlTW9udGhCeVNob3J0TmFtZShtb250aFN0ciksXG4gICAgICBwYXJzZURhdGVWYWx1ZShkYXlTdHIudHJpbUxlZnQoKSwgXCJkYXlcIiwgMSwgMzEpLFxuICAgICAgeyBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyB9XG4gICAgKTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBSRkMtNzIzMSBkYXRlLXRpbWUgdmFsdWVcIik7XG59LCBcInBhcnNlUmZjNzIzMURhdGVUaW1lXCIpO1xudmFyIHBhcnNlRXBvY2hUaW1lc3RhbXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgbGV0IHZhbHVlQXNEb3VibGU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICB2YWx1ZUFzRG91YmxlID0gdmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgdmFsdWVBc0RvdWJsZSA9IHN0cmljdFBhcnNlRG91YmxlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXBvY2ggdGltZXN0YW1wcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBmbG9hdGluZyBwb2ludCBudW1iZXJzIG9yIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvblwiKTtcbiAgfVxuICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlQXNEb3VibGUpIHx8IHZhbHVlQXNEb3VibGUgPT09IEluZmluaXR5IHx8IHZhbHVlQXNEb3VibGUgPT09IC1JbmZpbml0eSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFcG9jaCB0aW1lc3RhbXBzIG11c3QgYmUgdmFsaWQsIG5vbi1JbmZpbml0ZSwgbm9uLU5hTiBudW1lcmljc1wiKTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZCh2YWx1ZUFzRG91YmxlICogMWUzKSk7XG59LCBcInBhcnNlRXBvY2hUaW1lc3RhbXBcIik7XG52YXIgYnVpbGREYXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeWVhciwgbW9udGgsIGRheSwgdGltZSkgPT4ge1xuICBjb25zdCBhZGp1c3RlZE1vbnRoID0gbW9udGggLSAxO1xuICB2YWxpZGF0ZURheU9mTW9udGgoeWVhciwgYWRqdXN0ZWRNb250aCwgZGF5KTtcbiAgcmV0dXJuIG5ldyBEYXRlKFxuICAgIERhdGUuVVRDKFxuICAgICAgeWVhcixcbiAgICAgIGFkanVzdGVkTW9udGgsXG4gICAgICBkYXksXG4gICAgICBwYXJzZURhdGVWYWx1ZSh0aW1lLmhvdXJzLCBcImhvdXJcIiwgMCwgMjMpLFxuICAgICAgcGFyc2VEYXRlVmFsdWUodGltZS5taW51dGVzLCBcIm1pbnV0ZVwiLCAwLCA1OSksXG4gICAgICAvLyBzZWNvbmRzIGNhbiBnbyB1cCB0byA2MCBmb3IgbGVhcCBzZWNvbmRzXG4gICAgICBwYXJzZURhdGVWYWx1ZSh0aW1lLnNlY29uZHMsIFwic2Vjb25kc1wiLCAwLCA2MCksXG4gICAgICBwYXJzZU1pbGxpc2Vjb25kcyh0aW1lLmZyYWN0aW9uYWxNaWxsaXNlY29uZHMpXG4gICAgKVxuICApO1xufSwgXCJidWlsZERhdGVcIik7XG52YXIgcGFyc2VUd29EaWdpdFllYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBjb25zdCB0aGlzWWVhciA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VVRDRnVsbFllYXIoKTtcbiAgY29uc3QgdmFsdWVJblRoaXNDZW50dXJ5ID0gTWF0aC5mbG9vcih0aGlzWWVhciAvIDEwMCkgKiAxMDAgKyBzdHJpY3RQYXJzZVNob3J0KHN0cmlwTGVhZGluZ1plcm9lcyh2YWx1ZSkpO1xuICBpZiAodmFsdWVJblRoaXNDZW50dXJ5IDwgdGhpc1llYXIpIHtcbiAgICByZXR1cm4gdmFsdWVJblRoaXNDZW50dXJ5ICsgMTAwO1xuICB9XG4gIHJldHVybiB2YWx1ZUluVGhpc0NlbnR1cnk7XG59LCBcInBhcnNlVHdvRGlnaXRZZWFyXCIpO1xudmFyIEZJRlRZX1lFQVJTX0lOX01JTExJUyA9IDUwICogMzY1ICogMjQgKiA2MCAqIDYwICogMWUzO1xudmFyIGFkanVzdFJmYzg1MFllYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbnB1dCkgPT4ge1xuICBpZiAoaW5wdXQuZ2V0VGltZSgpIC0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgPiBGSUZUWV9ZRUFSU19JTl9NSUxMSVMpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBEYXRlLlVUQyhcbiAgICAgICAgaW5wdXQuZ2V0VVRDRnVsbFllYXIoKSAtIDEwMCxcbiAgICAgICAgaW5wdXQuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgaW5wdXQuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICBpbnB1dC5nZXRVVENIb3VycygpLFxuICAgICAgICBpbnB1dC5nZXRVVENNaW51dGVzKCksXG4gICAgICAgIGlucHV0LmdldFVUQ1NlY29uZHMoKSxcbiAgICAgICAgaW5wdXQuZ2V0VVRDTWlsbGlzZWNvbmRzKClcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiBpbnB1dDtcbn0sIFwiYWRqdXN0UmZjODUwWWVhclwiKTtcbnZhciBwYXJzZU1vbnRoQnlTaG9ydE5hbWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBjb25zdCBtb250aElkeCA9IE1PTlRIUy5pbmRleE9mKHZhbHVlKTtcbiAgaWYgKG1vbnRoSWR4IDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgbW9udGg6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIG1vbnRoSWR4ICsgMTtcbn0sIFwicGFyc2VNb250aEJ5U2hvcnROYW1lXCIpO1xudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG52YXIgdmFsaWRhdGVEYXlPZk1vbnRoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeWVhciwgbW9udGgsIGRheSkgPT4ge1xuICBsZXQgbWF4RGF5cyA9IERBWVNfSU5fTU9OVEhbbW9udGhdO1xuICBpZiAobW9udGggPT09IDEgJiYgaXNMZWFwWWVhcih5ZWFyKSkge1xuICAgIG1heERheXMgPSAyOTtcbiAgfVxuICBpZiAoZGF5ID4gbWF4RGF5cykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgZGF5IGZvciAke01PTlRIU1ttb250aF19IGluICR7eWVhcn06ICR7ZGF5fWApO1xuICB9XG59LCBcInZhbGlkYXRlRGF5T2ZNb250aFwiKTtcbnZhciBpc0xlYXBZZWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeWVhcikgPT4ge1xuICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59LCBcImlzTGVhcFllYXJcIik7XG52YXIgcGFyc2VEYXRlVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgdHlwZSwgbG93ZXIsIHVwcGVyKSA9PiB7XG4gIGNvbnN0IGRhdGVWYWwgPSBzdHJpY3RQYXJzZUJ5dGUoc3RyaXBMZWFkaW5nWmVyb2VzKHZhbHVlKSk7XG4gIGlmIChkYXRlVmFsIDwgbG93ZXIgfHwgZGF0ZVZhbCA+IHVwcGVyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0eXBlfSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlcn0gYW5kICR7dXBwZXJ9LCBpbmNsdXNpdmVgKTtcbiAgfVxuICByZXR1cm4gZGF0ZVZhbDtcbn0sIFwicGFyc2VEYXRlVmFsdWVcIik7XG52YXIgcGFyc2VNaWxsaXNlY29uZHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBzdHJpY3RQYXJzZUZsb2F0MzIoXCIwLlwiICsgdmFsdWUpICogMWUzO1xufSwgXCJwYXJzZU1pbGxpc2Vjb25kc1wiKTtcbnZhciBwYXJzZU9mZnNldFRvTWlsbGlzZWNvbmRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUpID0+IHtcbiAgY29uc3QgZGlyZWN0aW9uU3RyID0gdmFsdWVbMF07XG4gIGxldCBkaXJlY3Rpb24gPSAxO1xuICBpZiAoZGlyZWN0aW9uU3RyID09IFwiK1wiKSB7XG4gICAgZGlyZWN0aW9uID0gMTtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb25TdHIgPT0gXCItXCIpIHtcbiAgICBkaXJlY3Rpb24gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPZmZzZXQgZGlyZWN0aW9uLCAke2RpcmVjdGlvblN0cn0sIG11c3QgYmUgXCIrXCIgb3IgXCItXCJgKTtcbiAgfVxuICBjb25zdCBob3VyID0gTnVtYmVyKHZhbHVlLnN1YnN0cmluZygxLCAzKSk7XG4gIGNvbnN0IG1pbnV0ZSA9IE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNCwgNikpO1xuICByZXR1cm4gZGlyZWN0aW9uICogKGhvdXIgKiA2MCArIG1pbnV0ZSkgKiA2MCAqIDFlMztcbn0sIFwicGFyc2VPZmZzZXRUb01pbGxpc2Vjb25kc1wiKTtcbnZhciBzdHJpcExlYWRpbmdaZXJvZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSkgPT4ge1xuICBsZXQgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IHZhbHVlLmxlbmd0aCAtIDEgJiYgdmFsdWUuY2hhckF0KGlkeCkgPT09IFwiMFwiKSB7XG4gICAgaWR4Kys7XG4gIH1cbiAgaWYgKGlkeCA9PT0gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdmFsdWUuc2xpY2UoaWR4KTtcbn0sIFwic3RyaXBMZWFkaW5nWmVyb2VzXCIpO1xuXG4vLyBzcmMvZXhjZXB0aW9ucy50c1xudmFyIF9TZXJ2aWNlRXhjZXB0aW9uID0gY2xhc3MgX1NlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLm1lc3NhZ2UpO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLiRmYXVsdCA9IG9wdGlvbnMuJGZhdWx0O1xuICAgIHRoaXMuJG1ldGFkYXRhID0gb3B0aW9ucy4kbWV0YWRhdGE7XG4gIH1cbn07XG5fX25hbWUoX1NlcnZpY2VFeGNlcHRpb24sIFwiU2VydmljZUV4Y2VwdGlvblwiKTtcbnZhciBTZXJ2aWNlRXhjZXB0aW9uID0gX1NlcnZpY2VFeGNlcHRpb247XG52YXIgZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZXhjZXB0aW9uLCBhZGRpdGlvbnMgPSB7fSkgPT4ge1xuICBPYmplY3QuZW50cmllcyhhZGRpdGlvbnMpLmZpbHRlcigoWywgdl0pID0+IHYgIT09IHZvaWQgMCkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgaWYgKGV4Y2VwdGlvbltrXSA9PSB2b2lkIDAgfHwgZXhjZXB0aW9uW2tdID09PSBcIlwiKSB7XG4gICAgICBleGNlcHRpb25ba10gPSB2O1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24ubWVzc2FnZSB8fCBleGNlcHRpb24uTWVzc2FnZSB8fCBcIlVua25vd25FcnJvclwiO1xuICBleGNlcHRpb24ubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIGRlbGV0ZSBleGNlcHRpb24uTWVzc2FnZTtcbiAgcmV0dXJuIGV4Y2VwdGlvbjtcbn0sIFwiZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuXG4vLyBzcmMvZGVmYXVsdC1lcnJvci1oYW5kbGVyLnRzXG52YXIgdGhyb3dEZWZhdWx0RXJyb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IG91dHB1dCwgcGFyc2VkQm9keSwgZXhjZXB0aW9uQ3RvciwgZXJyb3JDb2RlIH0pID0+IHtcbiAgY29uc3QgJG1ldGFkYXRhID0gZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpO1xuICBjb25zdCBzdGF0dXNDb2RlID0gJG1ldGFkYXRhLmh0dHBTdGF0dXNDb2RlID8gJG1ldGFkYXRhLmh0dHBTdGF0dXNDb2RlICsgXCJcIiA6IHZvaWQgMDtcbiAgY29uc3QgcmVzcG9uc2UgPSBuZXcgZXhjZXB0aW9uQ3Rvcih7XG4gICAgbmFtZTogKHBhcnNlZEJvZHkgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcnNlZEJvZHkuY29kZSkgfHwgKHBhcnNlZEJvZHkgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcnNlZEJvZHkuQ29kZSkgfHwgZXJyb3JDb2RlIHx8IHN0YXR1c0NvZGUgfHwgXCJVbmtub3duRXJyb3JcIixcbiAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgJG1ldGFkYXRhXG4gIH0pO1xuICB0aHJvdyBkZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24ocmVzcG9uc2UsIHBhcnNlZEJvZHkpO1xufSwgXCJ0aHJvd0RlZmF1bHRFcnJvclwiKTtcbnZhciB3aXRoQmFzZUV4Y2VwdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKEV4Y2VwdGlvbkN0b3IpID0+IHtcbiAgcmV0dXJuICh7IG91dHB1dCwgcGFyc2VkQm9keSwgZXJyb3JDb2RlIH0pID0+IHtcbiAgICB0aHJvd0RlZmF1bHRFcnJvcih7IG91dHB1dCwgcGFyc2VkQm9keSwgZXhjZXB0aW9uQ3RvcjogRXhjZXB0aW9uQ3RvciwgZXJyb3JDb2RlIH0pO1xuICB9O1xufSwgXCJ3aXRoQmFzZUV4Y2VwdGlvblwiKTtcbnZhciBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3V0cHV0KSA9PiAoe1xuICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gIHJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdGlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3QtaWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1yZXF1ZXN0LWlkXCJdLFxuICBleHRlbmRlZFJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdXG59KSwgXCJkZXNlcmlhbGl6ZU1ldGFkYXRhXCIpO1xuXG4vLyBzcmMvZGVmYXVsdHMtbW9kZS50c1xudmFyIGxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChtb2RlKSA9PiB7XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgXCJzdGFuZGFyZFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmV0cnlNb2RlOiBcInN0YW5kYXJkXCIsXG4gICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiAzMTAwXG4gICAgICB9O1xuICAgIGNhc2UgXCJpbi1yZWdpb25cIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJldHJ5TW9kZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICBjb25uZWN0aW9uVGltZW91dDogMTEwMFxuICAgICAgfTtcbiAgICBjYXNlIFwiY3Jvc3MtcmVnaW9uXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXRyeU1vZGU6IFwic3RhbmRhcmRcIixcbiAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IDMxMDBcbiAgICAgIH07XG4gICAgY2FzZSBcIm1vYmlsZVwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmV0cnlNb2RlOiBcInN0YW5kYXJkXCIsXG4gICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiAzZTRcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufSwgXCJsb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlXCIpO1xuXG4vLyBzcmMvZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbi50c1xudmFyIHdhcm5pbmdFbWl0dGVkID0gZmFsc2U7XG52YXIgZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZlcnNpb24pID0+IHtcbiAgaWYgKHZlcnNpb24gJiYgIXdhcm5pbmdFbWl0dGVkICYmIHBhcnNlSW50KHZlcnNpb24uc3Vic3RyaW5nKDEsIHZlcnNpb24uaW5kZXhPZihcIi5cIikpKSA8IDE0KSB7XG4gICAgd2FybmluZ0VtaXR0ZWQgPSB0cnVlO1xuICB9XG59LCBcImVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb25cIik7XG5cbi8vIHNyYy9leHRlbnNpb25zL2NoZWNrc3VtLnRzXG5cbnZhciBnZXRDaGVja3N1bUNvbmZpZ3VyYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChydW50aW1lQ29uZmlnKSA9PiB7XG4gIGNvbnN0IGNoZWNrc3VtQWxnb3JpdGhtcyA9IFtdO1xuICBmb3IgKGNvbnN0IGlkIGluIGltcG9ydF90eXBlcy5BbGdvcml0aG1JZCkge1xuICAgIGNvbnN0IGFsZ29yaXRobUlkID0gaW1wb3J0X3R5cGVzLkFsZ29yaXRobUlkW2lkXTtcbiAgICBpZiAocnVudGltZUNvbmZpZ1thbGdvcml0aG1JZF0gPT09IHZvaWQgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNoZWNrc3VtQWxnb3JpdGhtcy5wdXNoKHtcbiAgICAgIGFsZ29yaXRobUlkOiAoKSA9PiBhbGdvcml0aG1JZCxcbiAgICAgIGNoZWNrc3VtQ29uc3RydWN0b3I6ICgpID0+IHJ1bnRpbWVDb25maWdbYWxnb3JpdGhtSWRdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBfY2hlY2tzdW1BbGdvcml0aG1zOiBjaGVja3N1bUFsZ29yaXRobXMsXG4gICAgYWRkQ2hlY2tzdW1BbGdvcml0aG0oYWxnbykge1xuICAgICAgdGhpcy5fY2hlY2tzdW1BbGdvcml0aG1zLnB1c2goYWxnbyk7XG4gICAgfSxcbiAgICBjaGVja3N1bUFsZ29yaXRobXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tzdW1BbGdvcml0aG1zO1xuICAgIH1cbiAgfTtcbn0sIFwiZ2V0Q2hlY2tzdW1Db25maWd1cmF0aW9uXCIpO1xudmFyIHJlc29sdmVDaGVja3N1bVJ1bnRpbWVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbGllbnRDb25maWcpID0+IHtcbiAgY29uc3QgcnVudGltZUNvbmZpZyA9IHt9O1xuICBjbGllbnRDb25maWcuY2hlY2tzdW1BbGdvcml0aG1zKCkuZm9yRWFjaCgoY2hlY2tzdW1BbGdvcml0aG0pID0+IHtcbiAgICBydW50aW1lQ29uZmlnW2NoZWNrc3VtQWxnb3JpdGhtLmFsZ29yaXRobUlkKCldID0gY2hlY2tzdW1BbGdvcml0aG0uY2hlY2tzdW1Db25zdHJ1Y3RvcigpO1xuICB9KTtcbiAgcmV0dXJuIHJ1bnRpbWVDb25maWc7XG59LCBcInJlc29sdmVDaGVja3N1bVJ1bnRpbWVDb25maWdcIik7XG5cbi8vIHNyYy9leHRlbnNpb25zL3JldHJ5LnRzXG52YXIgZ2V0UmV0cnlDb25maWd1cmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocnVudGltZUNvbmZpZykgPT4ge1xuICBsZXQgX3JldHJ5U3RyYXRlZ3kgPSBydW50aW1lQ29uZmlnLnJldHJ5U3RyYXRlZ3k7XG4gIHJldHVybiB7XG4gICAgc2V0UmV0cnlTdHJhdGVneShyZXRyeVN0cmF0ZWd5KSB7XG4gICAgICBfcmV0cnlTdHJhdGVneSA9IHJldHJ5U3RyYXRlZ3k7XG4gICAgfSxcbiAgICByZXRyeVN0cmF0ZWd5KCkge1xuICAgICAgcmV0dXJuIF9yZXRyeVN0cmF0ZWd5O1xuICAgIH1cbiAgfTtcbn0sIFwiZ2V0UmV0cnlDb25maWd1cmF0aW9uXCIpO1xudmFyIHJlc29sdmVSZXRyeVJ1bnRpbWVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZXRyeVN0cmF0ZWd5Q29uZmlndXJhdGlvbikgPT4ge1xuICBjb25zdCBydW50aW1lQ29uZmlnID0ge307XG4gIHJ1bnRpbWVDb25maWcucmV0cnlTdHJhdGVneSA9IHJldHJ5U3RyYXRlZ3lDb25maWd1cmF0aW9uLnJldHJ5U3RyYXRlZ3koKTtcbiAgcmV0dXJuIHJ1bnRpbWVDb25maWc7XG59LCBcInJlc29sdmVSZXRyeVJ1bnRpbWVDb25maWdcIik7XG5cbi8vIHNyYy9leHRlbnNpb25zL2RlZmF1bHRFeHRlbnNpb25Db25maWd1cmF0aW9uLnRzXG52YXIgZ2V0RGVmYXVsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChydW50aW1lQ29uZmlnKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uZ2V0Q2hlY2tzdW1Db25maWd1cmF0aW9uKHJ1bnRpbWVDb25maWcpLFxuICAgIC4uLmdldFJldHJ5Q29uZmlndXJhdGlvbihydW50aW1lQ29uZmlnKVxuICB9O1xufSwgXCJnZXREZWZhdWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvblwiKTtcbnZhciBnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbiA9IGdldERlZmF1bHRFeHRlbnNpb25Db25maWd1cmF0aW9uO1xudmFyIHJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZykgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc29sdmVDaGVja3N1bVJ1bnRpbWVDb25maWcoY29uZmlnKSxcbiAgICAuLi5yZXNvbHZlUmV0cnlSdW50aW1lQ29uZmlnKGNvbmZpZylcbiAgfTtcbn0sIFwicmVzb2x2ZURlZmF1bHRSdW50aW1lQ29uZmlnXCIpO1xuXG4vLyBzcmMvZXh0ZW5kZWQtZW5jb2RlLXVyaS1jb21wb25lbnQudHNcbmZ1bmN0aW9uIGV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIFwiJVwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cbl9fbmFtZShleHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudCwgXCJleHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudFwiKTtcblxuLy8gc3JjL2dldC1hcnJheS1pZi1zaW5nbGUtaXRlbS50c1xudmFyIGdldEFycmF5SWZTaW5nbGVJdGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobWF5QmVBcnJheSkgPT4gQXJyYXkuaXNBcnJheShtYXlCZUFycmF5KSA/IG1heUJlQXJyYXkgOiBbbWF5QmVBcnJheV0sIFwiZ2V0QXJyYXlJZlNpbmdsZUl0ZW1cIik7XG5cbi8vIHNyYy9nZXQtdmFsdWUtZnJvbS10ZXh0LW5vZGUudHNcbnZhciBnZXRWYWx1ZUZyb21UZXh0Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9iaikgPT4ge1xuICBjb25zdCB0ZXh0Tm9kZU5hbWUgPSBcIiN0ZXh0XCI7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmpba2V5XVt0ZXh0Tm9kZU5hbWVdICE9PSB2b2lkIDApIHtcbiAgICAgIG9ialtrZXldID0gb2JqW2tleV1bdGV4dE5vZGVOYW1lXTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgb2JqW2tleV0gPSBnZXRWYWx1ZUZyb21UZXh0Tm9kZShvYmpba2V5XSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59LCBcImdldFZhbHVlRnJvbVRleHROb2RlXCIpO1xuXG4vLyBzcmMvbGF6eS1qc29uLnRzXG52YXIgU3RyaW5nV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIGNvbnN0IENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICBjb25zdCBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoU3RyaW5nLCBbbnVsbCwgLi4uYXJndW1lbnRzXSk7XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufSwgXCJTdHJpbmdXcmFwcGVyXCIpO1xuU3RyaW5nV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0cmluZy5wcm90b3R5cGUsIHtcbiAgY29uc3RydWN0b3I6IHtcbiAgICB2YWx1ZTogU3RyaW5nV3JhcHBlcixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyaW5nV3JhcHBlciwgU3RyaW5nKTtcbnZhciBfTGF6eUpzb25TdHJpbmcgPSBjbGFzcyBfTGF6eUpzb25TdHJpbmcgZXh0ZW5kcyBTdHJpbmdXcmFwcGVyIHtcbiAgZGVzZXJpYWxpemVKU09OKCkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN1cGVyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTtcbiAgfVxuICBzdGF0aWMgZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgX0xhenlKc29uU3RyaW5nKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBvYmplY3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgX0xhenlKc29uU3RyaW5nKG9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX0xhenlKc29uU3RyaW5nKEpTT04uc3RyaW5naWZ5KG9iamVjdCkpO1xuICB9XG59O1xuX19uYW1lKF9MYXp5SnNvblN0cmluZywgXCJMYXp5SnNvblN0cmluZ1wiKTtcbnZhciBMYXp5SnNvblN0cmluZyA9IF9MYXp5SnNvblN0cmluZztcblxuLy8gc3JjL29iamVjdC1tYXBwaW5nLnRzXG5mdW5jdGlvbiBtYXAoYXJnMCwgYXJnMSwgYXJnMikge1xuICBsZXQgdGFyZ2V0O1xuICBsZXQgZmlsdGVyO1xuICBsZXQgaW5zdHJ1Y3Rpb25zO1xuICBpZiAodHlwZW9mIGFyZzEgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGFyZzIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0YXJnZXQgPSB7fTtcbiAgICBpbnN0cnVjdGlvbnMgPSBhcmcwO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGFyZzA7XG4gICAgaWYgKHR5cGVvZiBhcmcxID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGZpbHRlciA9IGFyZzE7XG4gICAgICBpbnN0cnVjdGlvbnMgPSBhcmcyO1xuICAgICAgcmV0dXJuIG1hcFdpdGhGaWx0ZXIodGFyZ2V0LCBmaWx0ZXIsIGluc3RydWN0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RydWN0aW9ucyA9IGFyZzE7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluc3RydWN0aW9ucykpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb25zW2tleV0pKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGluc3RydWN0aW9uc1trZXldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFwcGx5SW5zdHJ1Y3Rpb24odGFyZ2V0LCBudWxsLCBpbnN0cnVjdGlvbnMsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbl9fbmFtZShtYXAsIFwibWFwXCIpO1xudmFyIGNvbnZlcnRNYXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0YXJnZXQpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRhcmdldCB8fCB7fSkpIHtcbiAgICBvdXRwdXRba10gPSBbLCB2XTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufSwgXCJjb252ZXJ0TWFwXCIpO1xudmFyIHRha2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzb3VyY2UsIGluc3RydWN0aW9ucykgPT4ge1xuICBjb25zdCBvdXQgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gaW5zdHJ1Y3Rpb25zKSB7XG4gICAgYXBwbHlJbnN0cnVjdGlvbihvdXQsIHNvdXJjZSwgaW5zdHJ1Y3Rpb25zLCBrZXkpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59LCBcInRha2VcIik7XG52YXIgbWFwV2l0aEZpbHRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRhcmdldCwgZmlsdGVyLCBpbnN0cnVjdGlvbnMpID0+IHtcbiAgcmV0dXJuIG1hcChcbiAgICB0YXJnZXQsXG4gICAgT2JqZWN0LmVudHJpZXMoaW5zdHJ1Y3Rpb25zKS5yZWR1Y2UoXG4gICAgICAoX2luc3RydWN0aW9ucywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIF9pbnN0cnVjdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgX2luc3RydWN0aW9uc1trZXldID0gW2ZpbHRlciwgdmFsdWUoKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9pbnN0cnVjdGlvbnNba2V5XSA9IFtmaWx0ZXIsIHZhbHVlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9pbnN0cnVjdGlvbnM7XG4gICAgICB9LFxuICAgICAge31cbiAgICApXG4gICk7XG59LCBcIm1hcFdpdGhGaWx0ZXJcIik7XG52YXIgYXBwbHlJbnN0cnVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRhcmdldCwgc291cmNlLCBpbnN0cnVjdGlvbnMsIHRhcmdldEtleSkgPT4ge1xuICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgbGV0IGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW3RhcmdldEtleV07XG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpbnN0cnVjdGlvbiA9IFssIGluc3RydWN0aW9uXTtcbiAgICB9XG4gICAgY29uc3QgW2ZpbHRlcjIgPSBub25OdWxsaXNoLCB2YWx1ZUZuID0gcGFzcywgc291cmNlS2V5ID0gdGFyZ2V0S2V5XSA9IGluc3RydWN0aW9uO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyMiA9PT0gXCJmdW5jdGlvblwiICYmIGZpbHRlcjIoc291cmNlW3NvdXJjZUtleV0pIHx8IHR5cGVvZiBmaWx0ZXIyICE9PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXIyKSB7XG4gICAgICB0YXJnZXRbdGFyZ2V0S2V5XSA9IHZhbHVlRm4oc291cmNlW3NvdXJjZUtleV0pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IFtmaWx0ZXIsIHZhbHVlXSA9IGluc3RydWN0aW9uc1t0YXJnZXRLZXldO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsZXQgX3ZhbHVlO1xuICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJQYXNzZWQgPSBmaWx0ZXIgPT09IHZvaWQgMCAmJiAoX3ZhbHVlID0gdmFsdWUoKSkgIT0gbnVsbDtcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJQYXNzZWQgPSB0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXIodm9pZCAwKSB8fCB0eXBlb2YgZmlsdGVyICE9PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXI7XG4gICAgaWYgKGRlZmF1bHRGaWx0ZXJQYXNzZWQpIHtcbiAgICAgIHRhcmdldFt0YXJnZXRLZXldID0gX3ZhbHVlO1xuICAgIH0gZWxzZSBpZiAoY3VzdG9tRmlsdGVyUGFzc2VkKSB7XG4gICAgICB0YXJnZXRbdGFyZ2V0S2V5XSA9IHZhbHVlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJQYXNzZWQgPSBmaWx0ZXIgPT09IHZvaWQgMCAmJiB2YWx1ZSAhPSBudWxsO1xuICAgIGNvbnN0IGN1c3RvbUZpbHRlclBhc3NlZCA9IHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIiAmJiAhIWZpbHRlcih2YWx1ZSkgfHwgdHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiICYmICEhZmlsdGVyO1xuICAgIGlmIChkZWZhdWx0RmlsdGVyUGFzc2VkIHx8IGN1c3RvbUZpbHRlclBhc3NlZCkge1xuICAgICAgdGFyZ2V0W3RhcmdldEtleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn0sIFwiYXBwbHlJbnN0cnVjdGlvblwiKTtcbnZhciBub25OdWxsaXNoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoXykgPT4gXyAhPSBudWxsLCBcIm5vbk51bGxpc2hcIik7XG52YXIgcGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF8pID0+IF8sIFwicGFzc1wiKTtcblxuLy8gc3JjL3Jlc29sdmUtcGF0aC50c1xudmFyIHJlc29sdmVkUGF0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlc29sdmVkUGF0aDIsIGlucHV0LCBtZW1iZXJOYW1lLCBsYWJlbFZhbHVlUHJvdmlkZXIsIHVyaUxhYmVsLCBpc0dyZWVkeUxhYmVsKSA9PiB7XG4gIGlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0W21lbWJlck5hbWVdICE9PSB2b2lkIDApIHtcbiAgICBjb25zdCBsYWJlbFZhbHVlID0gbGFiZWxWYWx1ZVByb3ZpZGVyKCk7XG4gICAgaWYgKGxhYmVsVmFsdWUubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IHZhbHVlIHByb3ZpZGVkIGZvciBpbnB1dCBIVFRQIGxhYmVsOiBcIiArIG1lbWJlck5hbWUgKyBcIi5cIik7XG4gICAgfVxuICAgIHJlc29sdmVkUGF0aDIgPSByZXNvbHZlZFBhdGgyLnJlcGxhY2UoXG4gICAgICB1cmlMYWJlbCxcbiAgICAgIGlzR3JlZWR5TGFiZWwgPyBsYWJlbFZhbHVlLnNwbGl0KFwiL1wiKS5tYXAoKHNlZ21lbnQpID0+IGV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KHNlZ21lbnQpKS5qb2luKFwiL1wiKSA6IGV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsVmFsdWUpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgaW5wdXQgSFRUUCBsYWJlbDogXCIgKyBtZW1iZXJOYW1lICsgXCIuXCIpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFBhdGgyO1xufSwgXCJyZXNvbHZlZFBhdGhcIik7XG5cbi8vIHNyYy9zZXItdXRpbHMudHNcbnZhciBzZXJpYWxpemVGbG9hdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gXCJOYU5cIjtcbiAgfVxuICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgY2FzZSBJbmZpbml0eTpcbiAgICAgIHJldHVybiBcIkluZmluaXR5XCI7XG4gICAgY2FzZSAtSW5maW5pdHk6XG4gICAgICByZXR1cm4gXCItSW5maW5pdHlcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9XG59LCBcInNlcmlhbGl6ZUZsb2F0XCIpO1xuXG4vLyBzcmMvc2VyZGUtanNvbi50c1xudmFyIF9qc29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob2JqKSA9PiB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5maWx0ZXIoKF8pID0+IF8gIT0gbnVsbCkubWFwKF9qc29uKTtcbiAgfVxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgIGlmIChvYmpba2V5XSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGFyZ2V0W2tleV0gPSBfanNvbihvYmpba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0sIFwiX2pzb25cIik7XG5cbi8vIHNyYy9zcGxpdC1ldmVyeS50c1xuZnVuY3Rpb24gc3BsaXRFdmVyeSh2YWx1ZSwgZGVsaW1pdGVyLCBudW1EZWxpbWl0ZXJzKSB7XG4gIGlmIChudW1EZWxpbWl0ZXJzIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIobnVtRGVsaW1pdGVycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBkZWxpbWl0ZXJzIChcIiArIG51bURlbGltaXRlcnMgKyBcIikgZm9yIHNwbGl0RXZlcnkuXCIpO1xuICB9XG4gIGNvbnN0IHNlZ21lbnRzID0gdmFsdWUuc3BsaXQoZGVsaW1pdGVyKTtcbiAgaWYgKG51bURlbGltaXRlcnMgPT09IDEpIHtcbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cbiAgY29uc3QgY29tcG91bmRTZWdtZW50cyA9IFtdO1xuICBsZXQgY3VycmVudFNlZ21lbnQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGN1cnJlbnRTZWdtZW50ID09PSBcIlwiKSB7XG4gICAgICBjdXJyZW50U2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U2VnbWVudCArPSBkZWxpbWl0ZXIgKyBzZWdtZW50c1tpXTtcbiAgICB9XG4gICAgaWYgKChpICsgMSkgJSBudW1EZWxpbWl0ZXJzID09PSAwKSB7XG4gICAgICBjb21wb3VuZFNlZ21lbnRzLnB1c2goY3VycmVudFNlZ21lbnQpO1xuICAgICAgY3VycmVudFNlZ21lbnQgPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoY3VycmVudFNlZ21lbnQgIT09IFwiXCIpIHtcbiAgICBjb21wb3VuZFNlZ21lbnRzLnB1c2goY3VycmVudFNlZ21lbnQpO1xuICB9XG4gIHJldHVybiBjb21wb3VuZFNlZ21lbnRzO1xufVxuX19uYW1lKHNwbGl0RXZlcnksIFwic3BsaXRFdmVyeVwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIE5vT3BMb2dnZXIsXG4gIENsaWVudCxcbiAgY29sbGVjdEJvZHksXG4gIENvbW1hbmQsXG4gIFNFTlNJVElWRV9TVFJJTkcsXG4gIGNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQsXG4gIGRhdGVUb1V0Y1N0cmluZyxcbiAgcGFyc2VSZmMzMzM5RGF0ZVRpbWUsXG4gIHBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCxcbiAgcGFyc2VSZmM3MjMxRGF0ZVRpbWUsXG4gIHBhcnNlRXBvY2hUaW1lc3RhbXAsXG4gIHRocm93RGVmYXVsdEVycm9yLFxuICB3aXRoQmFzZUV4Y2VwdGlvbixcbiAgbG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZSxcbiAgZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbixcbiAgZ2V0RGVmYXVsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb24sXG4gIGdldERlZmF1bHRDbGllbnRDb25maWd1cmF0aW9uLFxuICByZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcsXG4gIFNlcnZpY2VFeGNlcHRpb24sXG4gIGRlY29yYXRlU2VydmljZUV4Y2VwdGlvbixcbiAgZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQsXG4gIGdldEFycmF5SWZTaW5nbGVJdGVtLFxuICBnZXRWYWx1ZUZyb21UZXh0Tm9kZSxcbiAgU3RyaW5nV3JhcHBlcixcbiAgTGF6eUpzb25TdHJpbmcsXG4gIG1hcCxcbiAgY29udmVydE1hcCxcbiAgdGFrZSxcbiAgcGFyc2VCb29sZWFuLFxuICBleHBlY3RCb29sZWFuLFxuICBleHBlY3ROdW1iZXIsXG4gIGV4cGVjdEZsb2F0MzIsXG4gIGV4cGVjdExvbmcsXG4gIGV4cGVjdEludCxcbiAgZXhwZWN0SW50MzIsXG4gIGV4cGVjdFNob3J0LFxuICBleHBlY3RCeXRlLFxuICBleHBlY3ROb25OdWxsLFxuICBleHBlY3RPYmplY3QsXG4gIGV4cGVjdFN0cmluZyxcbiAgZXhwZWN0VW5pb24sXG4gIHN0cmljdFBhcnNlRG91YmxlLFxuICBzdHJpY3RQYXJzZUZsb2F0LFxuICBzdHJpY3RQYXJzZUZsb2F0MzIsXG4gIGxpbWl0ZWRQYXJzZURvdWJsZSxcbiAgaGFuZGxlRmxvYXQsXG4gIGxpbWl0ZWRQYXJzZUZsb2F0LFxuICBsaW1pdGVkUGFyc2VGbG9hdDMyLFxuICBzdHJpY3RQYXJzZUxvbmcsXG4gIHN0cmljdFBhcnNlSW50LFxuICBzdHJpY3RQYXJzZUludDMyLFxuICBzdHJpY3RQYXJzZVNob3J0LFxuICBzdHJpY3RQYXJzZUJ5dGUsXG4gIGxvZ2dlcixcbiAgcmVzb2x2ZWRQYXRoLFxuICBzZXJpYWxpemVGbG9hdCxcbiAgX2pzb24sXG4gIHNwbGl0RXZlcnlcbn0pO1xuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRIb3N0SGVhZGVyUGx1Z2luID0gZXhwb3J0cy5ob3N0SGVhZGVyTWlkZGxld2FyZU9wdGlvbnMgPSBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlID0gZXhwb3J0cy5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3RvY29sLWh0dHBcIik7XG5mdW5jdGlvbiByZXNvbHZlSG9zdEhlYWRlckNvbmZpZyhpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dDtcbn1cbmV4cG9ydHMucmVzb2x2ZUhvc3RIZWFkZXJDb25maWcgPSByZXNvbHZlSG9zdEhlYWRlckNvbmZpZztcbmNvbnN0IGhvc3RIZWFkZXJNaWRkbGV3YXJlID0gKG9wdGlvbnMpID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UoYXJncy5yZXF1ZXN0KSlcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGNvbnN0IHsgaGFuZGxlclByb3RvY29sID0gXCJcIiB9ID0gb3B0aW9ucy5yZXF1ZXN0SGFuZGxlci5tZXRhZGF0YSB8fCB7fTtcbiAgICBpZiAoaGFuZGxlclByb3RvY29sLmluZGV4T2YoXCJoMlwiKSA+PSAwICYmICFyZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdKSB7XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0LmhlYWRlcnNbXCJob3N0XCJdO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdID0gXCJcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXJlcXVlc3QuaGVhZGVyc1tcImhvc3RcIl0pIHtcbiAgICAgICAgbGV0IGhvc3QgPSByZXF1ZXN0Lmhvc3RuYW1lO1xuICAgICAgICBpZiAocmVxdWVzdC5wb3J0ICE9IG51bGwpXG4gICAgICAgICAgICBob3N0ICs9IGA6JHtyZXF1ZXN0LnBvcnR9YDtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1wiaG9zdFwiXSA9IGhvc3Q7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGFyZ3MpO1xufTtcbmV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmUgPSBob3N0SGVhZGVyTWlkZGxld2FyZTtcbmV4cG9ydHMuaG9zdEhlYWRlck1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwiaG9zdEhlYWRlck1pZGRsZXdhcmVcIixcbiAgICBzdGVwOiBcImJ1aWxkXCIsXG4gICAgcHJpb3JpdHk6IFwibG93XCIsXG4gICAgdGFnczogW1wiSE9TVFwiXSxcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5jb25zdCBnZXRIb3N0SGVhZGVyUGx1Z2luID0gKG9wdGlvbnMpID0+ICh7XG4gICAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICAgICAgY2xpZW50U3RhY2suYWRkKCgwLCBleHBvcnRzLmhvc3RIZWFkZXJNaWRkbGV3YXJlKShvcHRpb25zKSwgZXhwb3J0cy5ob3N0SGVhZGVyTWlkZGxld2FyZU9wdGlvbnMpO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuZ2V0SG9zdEhlYWRlclBsdWdpbiA9IGdldEhvc3RIZWFkZXJQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRMb2dnZXJQbHVnaW4gPSBleHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyTWlkZGxld2FyZSA9ICgpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KGFyZ3MpO1xuICAgICAgICBjb25zdCB7IGNsaWVudE5hbWUsIGNvbW1hbmROYW1lLCBsb2dnZXIsIGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zID0ge30gfSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHsgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZywgb3ZlcnJpZGVPdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zO1xuICAgICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IG51bGwgJiYgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQuaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSBudWxsICYmIG92ZXJyaWRlT3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nICE9PSB2b2lkIDAgPyBvdmVycmlkZU91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQub3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuICAgICAgICBjb25zdCB7ICRtZXRhZGF0YSwgLi4ub3V0cHV0V2l0aG91dE1ldGFkYXRhIH0gPSByZXNwb25zZS5vdXRwdXQ7XG4gICAgICAgIChfYSA9IGxvZ2dlciA9PT0gbnVsbCB8fCBsb2dnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxvZ2dlci5pbmZvKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsb2dnZXIsIHtcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0OiBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyhhcmdzLmlucHV0KSxcbiAgICAgICAgICAgIG91dHB1dDogb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nKG91dHB1dFdpdGhvdXRNZXRhZGF0YSksXG4gICAgICAgICAgICBtZXRhZGF0YTogJG1ldGFkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjbGllbnROYW1lLCBjb21tYW5kTmFtZSwgbG9nZ2VyLCBkeW5hbW9EYkRvY3VtZW50Q2xpZW50T3B0aW9ucyA9IHt9IH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCB7IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGR5bmFtb0RiRG9jdW1lbnRDbGllbnRPcHRpb25zO1xuICAgICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG92ZXJyaWRlSW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgIT09IG51bGwgJiYgb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVJbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA6IGNvbnRleHQuaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c7XG4gICAgICAgIChfYiA9IGxvZ2dlciA9PT0gbnVsbCB8fCBsb2dnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxvZ2dlci5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobG9nZ2VyLCB7XG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dDogaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2coYXJncy5pbnB1dCksXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIG1ldGFkYXRhOiBlcnJvci4kbWV0YWRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59O1xuZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlID0gbG9nZ2VyTWlkZGxld2FyZTtcbmV4cG9ydHMubG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJsb2dnZXJNaWRkbGV3YXJlXCIsXG4gICAgdGFnczogW1wiTE9HR0VSXCJdLFxuICAgIHN0ZXA6IFwiaW5pdGlhbGl6ZVwiLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxufTtcbmNvbnN0IGdldExvZ2dlclBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy5sb2dnZXJNaWRkbGV3YXJlKSgpLCBleHBvcnRzLmxvZ2dlck1pZGRsZXdhcmVPcHRpb25zKTtcbiAgICB9LFxufSk7XG5leHBvcnRzLmdldExvZ2dlclBsdWdpbiA9IGdldExvZ2dlclBsdWdpbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9nZ2VyTWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4gPSBleHBvcnRzLmFkZFJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVPcHRpb25zID0gZXhwb3J0cy5yZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlID0gdm9pZCAwO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IFRSQUNFX0lEX0hFQURFUl9OQU1FID0gXCJYLUFtem4tVHJhY2UtSWRcIjtcbmNvbnN0IEVOVl9MQU1CREFfRlVOQ1RJT05fTkFNRSA9IFwiQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FXCI7XG5jb25zdCBFTlZfVFJBQ0VfSUQgPSBcIl9YX0FNWk5fVFJBQ0VfSURcIjtcbmNvbnN0IHJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmUgPSAob3B0aW9ucykgPT4gKG5leHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGlmICghcHJvdG9jb2xfaHR0cF8xLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UocmVxdWVzdCkgfHxcbiAgICAgICAgb3B0aW9ucy5ydW50aW1lICE9PSBcIm5vZGVcIiB8fFxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuaGFzT3duUHJvcGVydHkoVFJBQ0VfSURfSEVBREVSX05BTUUpKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgIH1cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudltFTlZfTEFNQkRBX0ZVTkNUSU9OX05BTUVdO1xuICAgIGNvbnN0IHRyYWNlSWQgPSBwcm9jZXNzLmVudltFTlZfVFJBQ0VfSURdO1xuICAgIGNvbnN0IG5vbkVtcHR5U3RyaW5nID0gKHN0cikgPT4gdHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiAmJiBzdHIubGVuZ3RoID4gMDtcbiAgICBpZiAobm9uRW1wdHlTdHJpbmcoZnVuY3Rpb25OYW1lKSAmJiBub25FbXB0eVN0cmluZyh0cmFjZUlkKSkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnNbVFJBQ0VfSURfSEVBREVSX05BTUVdID0gdHJhY2VJZDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoe1xuICAgICAgICAuLi5hcmdzLFxuICAgICAgICByZXF1ZXN0LFxuICAgIH0pO1xufTtcbmV4cG9ydHMucmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZSA9IHJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmU7XG5leHBvcnRzLmFkZFJlY3Vyc2lvbkRldGVjdGlvbk1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIHN0ZXA6IFwiYnVpbGRcIixcbiAgICB0YWdzOiBbXCJSRUNVUlNJT05fREVURUNUSU9OXCJdLFxuICAgIG5hbWU6IFwicmVjdXJzaW9uRGV0ZWN0aW9uTWlkZGxld2FyZVwiLFxuICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIHByaW9yaXR5OiBcImxvd1wiLFxufTtcbmNvbnN0IGdldFJlY3Vyc2lvbkRldGVjdGlvblBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZCgoMCwgZXhwb3J0cy5yZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlKShvcHRpb25zKSwgZXhwb3J0cy5hZGRSZWN1cnNpb25EZXRlY3Rpb25NaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4gPSBnZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW47XG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBDcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3I6ICgpID0+IENyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcixcbiAgUHJvdmlkZXJFcnJvcjogKCkgPT4gUHJvdmlkZXJFcnJvcixcbiAgVG9rZW5Qcm92aWRlckVycm9yOiAoKSA9PiBUb2tlblByb3ZpZGVyRXJyb3IsXG4gIGNoYWluOiAoKSA9PiBjaGFpbixcbiAgZnJvbVN0YXRpYzogKCkgPT4gZnJvbVN0YXRpYyxcbiAgbWVtb2l6ZTogKCkgPT4gbWVtb2l6ZVxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9Qcm92aWRlckVycm9yLnRzXG52YXIgX1Byb3ZpZGVyRXJyb3IgPSBjbGFzcyBfUHJvdmlkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgdHJ5TmV4dExpbmsgPSB0cnVlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy50cnlOZXh0TGluayA9IHRyeU5leHRMaW5rO1xuICAgIHRoaXMubmFtZSA9IFwiUHJvdmlkZXJFcnJvclwiO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfUHJvdmlkZXJFcnJvci5wcm90b3R5cGUpO1xuICB9XG4gIHN0YXRpYyBmcm9tKGVycm9yLCB0cnlOZXh0TGluayA9IHRydWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcyhlcnJvci5tZXNzYWdlLCB0cnlOZXh0TGluayksIGVycm9yKTtcbiAgfVxufTtcbl9fbmFtZShfUHJvdmlkZXJFcnJvciwgXCJQcm92aWRlckVycm9yXCIpO1xudmFyIFByb3ZpZGVyRXJyb3IgPSBfUHJvdmlkZXJFcnJvcjtcblxuLy8gc3JjL0NyZWRlbnRpYWxzUHJvdmlkZXJFcnJvci50c1xudmFyIF9DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IgPSBjbGFzcyBfQ3JlZGVudGlhbHNQcm92aWRlckVycm9yIGV4dGVuZHMgUHJvdmlkZXJFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHRyeU5leHRMaW5rID0gdHJ1ZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIHRyeU5leHRMaW5rKTtcbiAgICB0aGlzLnRyeU5leHRMaW5rID0gdHJ5TmV4dExpbms7XG4gICAgdGhpcy5uYW1lID0gXCJDcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3JcIjtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgX0NyZWRlbnRpYWxzUHJvdmlkZXJFcnJvci5wcm90b3R5cGUpO1xuICB9XG59O1xuX19uYW1lKF9DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IsIFwiQ3JlZGVudGlhbHNQcm92aWRlckVycm9yXCIpO1xudmFyIENyZWRlbnRpYWxzUHJvdmlkZXJFcnJvciA9IF9DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3I7XG5cbi8vIHNyYy9Ub2tlblByb3ZpZGVyRXJyb3IudHNcbnZhciBfVG9rZW5Qcm92aWRlckVycm9yID0gY2xhc3MgX1Rva2VuUHJvdmlkZXJFcnJvciBleHRlbmRzIFByb3ZpZGVyRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0cnlOZXh0TGluayA9IHRydWUpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB0cnlOZXh0TGluayk7XG4gICAgdGhpcy50cnlOZXh0TGluayA9IHRyeU5leHRMaW5rO1xuICAgIHRoaXMubmFtZSA9IFwiVG9rZW5Qcm92aWRlckVycm9yXCI7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9Ub2tlblByb3ZpZGVyRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufTtcbl9fbmFtZShfVG9rZW5Qcm92aWRlckVycm9yLCBcIlRva2VuUHJvdmlkZXJFcnJvclwiKTtcbnZhciBUb2tlblByb3ZpZGVyRXJyb3IgPSBfVG9rZW5Qcm92aWRlckVycm9yO1xuXG4vLyBzcmMvY2hhaW4udHNcbnZhciBjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKC4uLnByb3ZpZGVycykgPT4gYXN5bmMgKCkgPT4ge1xuICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBQcm92aWRlckVycm9yKFwiTm8gcHJvdmlkZXJzIGluIGNoYWluXCIpO1xuICB9XG4gIGxldCBsYXN0UHJvdmlkZXJFcnJvcjtcbiAgZm9yIChjb25zdCBwcm92aWRlciBvZiBwcm92aWRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBwcm92aWRlcigpO1xuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGFzdFByb3ZpZGVyRXJyb3IgPSBlcnI7XG4gICAgICBpZiAoZXJyID09IG51bGwgPyB2b2lkIDAgOiBlcnIudHJ5TmV4dExpbmspIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG4gIHRocm93IGxhc3RQcm92aWRlckVycm9yO1xufSwgXCJjaGFpblwiKTtcblxuLy8gc3JjL2Zyb21TdGF0aWMudHNcbnZhciBmcm9tU3RhdGljID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RhdGljVmFsdWUpID0+ICgpID0+IFByb21pc2UucmVzb2x2ZShzdGF0aWNWYWx1ZSksIFwiZnJvbVN0YXRpY1wiKTtcblxuLy8gc3JjL21lbW9pemUudHNcbnZhciBtZW1vaXplID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocHJvdmlkZXIsIGlzRXhwaXJlZCwgcmVxdWlyZXNSZWZyZXNoKSA9PiB7XG4gIGxldCByZXNvbHZlZDtcbiAgbGV0IHBlbmRpbmc7XG4gIGxldCBoYXNSZXN1bHQ7XG4gIGxldCBpc0NvbnN0YW50ID0gZmFsc2U7XG4gIGNvbnN0IGNvYWxlc2NlUHJvdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBwcm92aWRlcigpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWQgPSBhd2FpdCBwZW5kaW5nO1xuICAgICAgaGFzUmVzdWx0ID0gdHJ1ZTtcbiAgICAgIGlzQ29uc3RhbnQgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9LCBcImNvYWxlc2NlUHJvdmlkZXJcIik7XG4gIGlmIChpc0V4cGlyZWQgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgaWYgKCFoYXNSZXN1bHQgfHwgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZm9yY2VSZWZyZXNoKSkge1xuICAgICAgICByZXNvbHZlZCA9IGF3YWl0IGNvYWxlc2NlUHJvdmlkZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9O1xuICB9XG4gIHJldHVybiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIGlmICghaGFzUmVzdWx0IHx8IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmZvcmNlUmVmcmVzaCkpIHtcbiAgICAgIHJlc29sdmVkID0gYXdhaXQgY29hbGVzY2VQcm92aWRlcigpO1xuICAgIH1cbiAgICBpZiAoaXNDb25zdGFudCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgIH1cbiAgICBpZiAocmVxdWlyZXNSZWZyZXNoICYmICFyZXF1aXJlc1JlZnJlc2gocmVzb2x2ZWQpKSB7XG4gICAgICBpc0NvbnN0YW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZChyZXNvbHZlZCkpIHtcbiAgICAgIGF3YWl0IGNvYWxlc2NlUHJvdmlkZXIoKTtcbiAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9O1xufSwgXCJtZW1vaXplXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ3JlZGVudGlhbHNQcm92aWRlckVycm9yLFxuICBQcm92aWRlckVycm9yLFxuICBUb2tlblByb3ZpZGVyRXJyb3IsXG4gIGNoYWluLFxuICBmcm9tU3RhdGljLFxuICBtZW1vaXplXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgZ2V0U21pdGh5Q29udGV4dDogKCkgPT4gZ2V0U21pdGh5Q29udGV4dCxcbiAgbm9ybWFsaXplUHJvdmlkZXI6ICgpID0+IG5vcm1hbGl6ZVByb3ZpZGVyXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2dldFNtaXRoeUNvbnRleHQudHNcbnZhciBpbXBvcnRfdHlwZXMgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbnZhciBnZXRTbWl0aHlDb250ZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29udGV4dCkgPT4gY29udGV4dFtpbXBvcnRfdHlwZXMuU01JVEhZX0NPTlRFWFRfS0VZXSB8fCAoY29udGV4dFtpbXBvcnRfdHlwZXMuU01JVEhZX0NPTlRFWFRfS0VZXSA9IHt9KSwgXCJnZXRTbWl0aHlDb250ZXh0XCIpO1xuXG4vLyBzcmMvbm9ybWFsaXplUHJvdmlkZXIudHNcbnZhciBub3JtYWxpemVQcm92aWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gaW5wdXQ7XG4gIGNvbnN0IHByb21pc2lmaWVkID0gUHJvbWlzZS5yZXNvbHZlKGlucHV0KTtcbiAgcmV0dXJuICgpID0+IHByb21pc2lmaWVkO1xufSwgXCJub3JtYWxpemVQcm92aWRlclwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFNtaXRoeUNvbnRleHQsXG4gIG5vcm1hbGl6ZVByb3ZpZGVyXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgaXNBcnJheUJ1ZmZlcjogKCkgPT4gaXNBcnJheUJ1ZmZlclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG52YXIgaXNBcnJheUJ1ZmZlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFyZykgPT4gdHlwZW9mIEFycmF5QnVmZmVyID09PSBcImZ1bmN0aW9uXCIgJiYgYXJnIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09IFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIiwgXCJpc0FycmF5QnVmZmVyXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheUJ1ZmZlclxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIFNpZ25hdHVyZVY0OiAoKSA9PiBTaWduYXR1cmVWNCxcbiAgY2xlYXJDcmVkZW50aWFsQ2FjaGU6ICgpID0+IGNsZWFyQ3JlZGVudGlhbENhY2hlLFxuICBjcmVhdGVTY29wZTogKCkgPT4gY3JlYXRlU2NvcGUsXG4gIGdldENhbm9uaWNhbEhlYWRlcnM6ICgpID0+IGdldENhbm9uaWNhbEhlYWRlcnMsXG4gIGdldENhbm9uaWNhbFF1ZXJ5OiAoKSA9PiBnZXRDYW5vbmljYWxRdWVyeSxcbiAgZ2V0UGF5bG9hZEhhc2g6ICgpID0+IGdldFBheWxvYWRIYXNoLFxuICBnZXRTaWduaW5nS2V5OiAoKSA9PiBnZXRTaWduaW5nS2V5LFxuICBtb3ZlSGVhZGVyc1RvUXVlcnk6ICgpID0+IG1vdmVIZWFkZXJzVG9RdWVyeSxcbiAgcHJlcGFyZVJlcXVlc3Q6ICgpID0+IHByZXBhcmVSZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL1NpZ25hdHVyZVY0LnRzXG5cbnZhciBpbXBvcnRfdXRpbF9taWRkbGV3YXJlID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlXCIpO1xuXG52YXIgaW1wb3J0X3V0aWxfdXRmODQgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG5cbi8vIHNyYy9jb25zdGFudHMudHNcbnZhciBBTEdPUklUSE1fUVVFUllfUEFSQU0gPSBcIlgtQW16LUFsZ29yaXRobVwiO1xudmFyIENSRURFTlRJQUxfUVVFUllfUEFSQU0gPSBcIlgtQW16LUNyZWRlbnRpYWxcIjtcbnZhciBBTVpfREFURV9RVUVSWV9QQVJBTSA9IFwiWC1BbXotRGF0ZVwiO1xudmFyIFNJR05FRF9IRUFERVJTX1FVRVJZX1BBUkFNID0gXCJYLUFtei1TaWduZWRIZWFkZXJzXCI7XG52YXIgRVhQSVJFU19RVUVSWV9QQVJBTSA9IFwiWC1BbXotRXhwaXJlc1wiO1xudmFyIFNJR05BVFVSRV9RVUVSWV9QQVJBTSA9IFwiWC1BbXotU2lnbmF0dXJlXCI7XG52YXIgVE9LRU5fUVVFUllfUEFSQU0gPSBcIlgtQW16LVNlY3VyaXR5LVRva2VuXCI7XG52YXIgQVVUSF9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbnZhciBBTVpfREFURV9IRUFERVIgPSBBTVpfREFURV9RVUVSWV9QQVJBTS50b0xvd2VyQ2FzZSgpO1xudmFyIERBVEVfSEVBREVSID0gXCJkYXRlXCI7XG52YXIgR0VORVJBVEVEX0hFQURFUlMgPSBbQVVUSF9IRUFERVIsIEFNWl9EQVRFX0hFQURFUiwgREFURV9IRUFERVJdO1xudmFyIFNJR05BVFVSRV9IRUFERVIgPSBTSUdOQVRVUkVfUVVFUllfUEFSQU0udG9Mb3dlckNhc2UoKTtcbnZhciBTSEEyNTZfSEVBREVSID0gXCJ4LWFtei1jb250ZW50LXNoYTI1NlwiO1xudmFyIFRPS0VOX0hFQURFUiA9IFRPS0VOX1FVRVJZX1BBUkFNLnRvTG93ZXJDYXNlKCk7XG52YXIgQUxXQVlTX1VOU0lHTkFCTEVfSEVBREVSUyA9IHtcbiAgYXV0aG9yaXphdGlvbjogdHJ1ZSxcbiAgXCJjYWNoZS1jb250cm9sXCI6IHRydWUsXG4gIGNvbm5lY3Rpb246IHRydWUsXG4gIGV4cGVjdDogdHJ1ZSxcbiAgZnJvbTogdHJ1ZSxcbiAgXCJrZWVwLWFsaXZlXCI6IHRydWUsXG4gIFwibWF4LWZvcndhcmRzXCI6IHRydWUsXG4gIHByYWdtYTogdHJ1ZSxcbiAgcmVmZXJlcjogdHJ1ZSxcbiAgdGU6IHRydWUsXG4gIHRyYWlsZXI6IHRydWUsXG4gIFwidHJhbnNmZXItZW5jb2RpbmdcIjogdHJ1ZSxcbiAgdXBncmFkZTogdHJ1ZSxcbiAgXCJ1c2VyLWFnZW50XCI6IHRydWUsXG4gIFwieC1hbXpuLXRyYWNlLWlkXCI6IHRydWVcbn07XG52YXIgUFJPWFlfSEVBREVSX1BBVFRFUk4gPSAvXnByb3h5LS87XG52YXIgU0VDX0hFQURFUl9QQVRURVJOID0gL15zZWMtLztcbnZhciBBTEdPUklUSE1fSURFTlRJRklFUiA9IFwiQVdTNC1ITUFDLVNIQTI1NlwiO1xudmFyIEVWRU5UX0FMR09SSVRITV9JREVOVElGSUVSID0gXCJBV1M0LUhNQUMtU0hBMjU2LVBBWUxPQURcIjtcbnZhciBVTlNJR05FRF9QQVlMT0FEID0gXCJVTlNJR05FRC1QQVlMT0FEXCI7XG52YXIgTUFYX0NBQ0hFX1NJWkUgPSA1MDtcbnZhciBLRVlfVFlQRV9JREVOVElGSUVSID0gXCJhd3M0X3JlcXVlc3RcIjtcbnZhciBNQVhfUFJFU0lHTkVEX1RUTCA9IDYwICogNjAgKiAyNCAqIDc7XG5cbi8vIHNyYy9jcmVkZW50aWFsRGVyaXZhdGlvbi50c1xudmFyIGltcG9ydF91dGlsX2hleF9lbmNvZGluZyA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtaGV4LWVuY29kaW5nXCIpO1xudmFyIGltcG9ydF91dGlsX3V0ZjggPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG52YXIgc2lnbmluZ0tleUNhY2hlID0ge307XG52YXIgY2FjaGVRdWV1ZSA9IFtdO1xudmFyIGNyZWF0ZVNjb3BlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UpID0+IGAke3Nob3J0RGF0ZX0vJHtyZWdpb259LyR7c2VydmljZX0vJHtLRVlfVFlQRV9JREVOVElGSUVSfWAsIFwiY3JlYXRlU2NvcGVcIik7XG52YXIgZ2V0U2lnbmluZ0tleSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHNoYTI1NkNvbnN0cnVjdG9yLCBjcmVkZW50aWFscywgc2hvcnREYXRlLCByZWdpb24sIHNlcnZpY2UpID0+IHtcbiAgY29uc3QgY3JlZHNIYXNoID0gYXdhaXQgaG1hYyhzaGEyNTZDb25zdHJ1Y3RvciwgY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LCBjcmVkZW50aWFscy5hY2Nlc3NLZXlJZCk7XG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7c2hvcnREYXRlfToke3JlZ2lvbn06JHtzZXJ2aWNlfTokeygwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGNyZWRzSGFzaCl9OiR7Y3JlZGVudGlhbHMuc2Vzc2lvblRva2VufWA7XG4gIGlmIChjYWNoZUtleSBpbiBzaWduaW5nS2V5Q2FjaGUpIHtcbiAgICByZXR1cm4gc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XTtcbiAgfVxuICBjYWNoZVF1ZXVlLnB1c2goY2FjaGVLZXkpO1xuICB3aGlsZSAoY2FjaGVRdWV1ZS5sZW5ndGggPiBNQVhfQ0FDSEVfU0laRSkge1xuICAgIGRlbGV0ZSBzaWduaW5nS2V5Q2FjaGVbY2FjaGVRdWV1ZS5zaGlmdCgpXTtcbiAgfVxuICBsZXQga2V5ID0gYEFXUzQke2NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleX1gO1xuICBmb3IgKGNvbnN0IHNpZ25hYmxlIG9mIFtzaG9ydERhdGUsIHJlZ2lvbiwgc2VydmljZSwgS0VZX1RZUEVfSURFTlRJRklFUl0pIHtcbiAgICBrZXkgPSBhd2FpdCBobWFjKHNoYTI1NkNvbnN0cnVjdG9yLCBrZXksIHNpZ25hYmxlKTtcbiAgfVxuICByZXR1cm4gc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XSA9IGtleTtcbn0sIFwiZ2V0U2lnbmluZ0tleVwiKTtcbnZhciBjbGVhckNyZWRlbnRpYWxDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjYWNoZVF1ZXVlLmxlbmd0aCA9IDA7XG4gIE9iamVjdC5rZXlzKHNpZ25pbmdLZXlDYWNoZSkuZm9yRWFjaCgoY2FjaGVLZXkpID0+IHtcbiAgICBkZWxldGUgc2lnbmluZ0tleUNhY2hlW2NhY2hlS2V5XTtcbiAgfSk7XG59LCBcImNsZWFyQ3JlZGVudGlhbENhY2hlXCIpO1xudmFyIGhtYWMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjdG9yLCBzZWNyZXQsIGRhdGEpID0+IHtcbiAgY29uc3QgaGFzaCA9IG5ldyBjdG9yKHNlY3JldCk7XG4gIGhhc2gudXBkYXRlKCgwLCBpbXBvcnRfdXRpbF91dGY4LnRvVWludDhBcnJheSkoZGF0YSkpO1xuICByZXR1cm4gaGFzaC5kaWdlc3QoKTtcbn0sIFwiaG1hY1wiKTtcblxuLy8gc3JjL2dldENhbm9uaWNhbEhlYWRlcnMudHNcbnZhciBnZXRDYW5vbmljYWxIZWFkZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeyBoZWFkZXJzIH0sIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2Fub25pY2FsID0ge307XG4gIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKS5zb3J0KCkpIHtcbiAgICBpZiAoaGVhZGVyc1toZWFkZXJOYW1lXSA9PSB2b2lkIDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjYW5vbmljYWxIZWFkZXJOYW1lID0gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjYW5vbmljYWxIZWFkZXJOYW1lIGluIEFMV0FZU19VTlNJR05BQkxFX0hFQURFUlMgfHwgKHVuc2lnbmFibGVIZWFkZXJzID09IG51bGwgPyB2b2lkIDAgOiB1bnNpZ25hYmxlSGVhZGVycy5oYXMoY2Fub25pY2FsSGVhZGVyTmFtZSkpIHx8IFBST1hZX0hFQURFUl9QQVRURVJOLnRlc3QoY2Fub25pY2FsSGVhZGVyTmFtZSkgfHwgU0VDX0hFQURFUl9QQVRURVJOLnRlc3QoY2Fub25pY2FsSGVhZGVyTmFtZSkpIHtcbiAgICAgIGlmICghc2lnbmFibGVIZWFkZXJzIHx8IHNpZ25hYmxlSGVhZGVycyAmJiAhc2lnbmFibGVIZWFkZXJzLmhhcyhjYW5vbmljYWxIZWFkZXJOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2Fub25pY2FsW2Nhbm9uaWNhbEhlYWRlck5hbWVdID0gaGVhZGVyc1toZWFkZXJOYW1lXS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCBcIiBcIik7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbDtcbn0sIFwiZ2V0Q2Fub25pY2FsSGVhZGVyc1wiKTtcblxuLy8gc3JjL2dldENhbm9uaWNhbFF1ZXJ5LnRzXG52YXIgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXJpLWVzY2FwZVwiKTtcbnZhciBnZXRDYW5vbmljYWxRdWVyeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHsgcXVlcnkgPSB7fSB9KSA9PiB7XG4gIGNvbnN0IGtleXMgPSBbXTtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhxdWVyeSkuc29ydCgpKSB7XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBTSUdOQVRVUkVfSEVBREVSKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAga2V5cy5wdXNoKGtleSk7XG4gICAgY29uc3QgdmFsdWUgPSBxdWVyeVtrZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHNlcmlhbGl6ZWRba2V5XSA9IGAkeygwLCBpbXBvcnRfdXRpbF91cmlfZXNjYXBlLmVzY2FwZVVyaSkoa2V5KX09JHsoMCwgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZS5lc2NhcGVVcmkpKHZhbHVlKX1gO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHNlcmlhbGl6ZWRba2V5XSA9IHZhbHVlLnNsaWNlKDApLnJlZHVjZShcbiAgICAgICAgKGVuY29kZWQsIHZhbHVlMikgPT4gZW5jb2RlZC5jb25jYXQoW2AkeygwLCBpbXBvcnRfdXRpbF91cmlfZXNjYXBlLmVzY2FwZVVyaSkoa2V5KX09JHsoMCwgaW1wb3J0X3V0aWxfdXJpX2VzY2FwZS5lc2NhcGVVcmkpKHZhbHVlMil9YF0pLFxuICAgICAgICBbXVxuICAgICAgKS5zb3J0KCkuam9pbihcIiZcIik7XG4gICAgfVxuICB9XG4gIHJldHVybiBrZXlzLm1hcCgoa2V5KSA9PiBzZXJpYWxpemVkW2tleV0pLmZpbHRlcigoc2VyaWFsaXplZDIpID0+IHNlcmlhbGl6ZWQyKS5qb2luKFwiJlwiKTtcbn0sIFwiZ2V0Q2Fub25pY2FsUXVlcnlcIik7XG5cbi8vIHNyYy9nZXRQYXlsb2FkSGFzaC50c1xudmFyIGltcG9ydF9pc19hcnJheV9idWZmZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9pcy1hcnJheS1idWZmZXJcIik7XG5cbnZhciBpbXBvcnRfdXRpbF91dGY4MiA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXRmOFwiKTtcbnZhciBnZXRQYXlsb2FkSGFzaCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHsgaGVhZGVycywgYm9keSB9LCBoYXNoQ29uc3RydWN0b3IpID0+IHtcbiAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgaWYgKGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKSA9PT0gU0hBMjU2X0hFQURFUikge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaGVhZGVyTmFtZV07XG4gICAgfVxuICB9XG4gIGlmIChib2R5ID09IHZvaWQgMCkge1xuICAgIHJldHVybiBcImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTVcIjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkgfHwgKDAsIGltcG9ydF9pc19hcnJheV9idWZmZXIuaXNBcnJheUJ1ZmZlcikoYm9keSkpIHtcbiAgICBjb25zdCBoYXNoQ3RvciA9IG5ldyBoYXNoQ29uc3RydWN0b3IoKTtcbiAgICBoYXNoQ3Rvci51cGRhdGUoKDAsIGltcG9ydF91dGlsX3V0ZjgyLnRvVWludDhBcnJheSkoYm9keSkpO1xuICAgIHJldHVybiAoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLnRvSGV4KShhd2FpdCBoYXNoQ3Rvci5kaWdlc3QoKSk7XG4gIH1cbiAgcmV0dXJuIFVOU0lHTkVEX1BBWUxPQUQ7XG59LCBcImdldFBheWxvYWRIYXNoXCIpO1xuXG4vLyBzcmMvSGVhZGVyRm9ybWF0dGVyLnRzXG5cbnZhciBpbXBvcnRfdXRpbF91dGY4MyA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXRmOFwiKTtcbnZhciBfSGVhZGVyRm9ybWF0dGVyID0gY2xhc3MgX0hlYWRlckZvcm1hdHRlciB7XG4gIGZvcm1hdChoZWFkZXJzKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCBieXRlcyA9ICgwLCBpbXBvcnRfdXRpbF91dGY4My5mcm9tVXRmOCkoaGVhZGVyTmFtZSk7XG4gICAgICBjaHVua3MucHVzaChVaW50OEFycmF5LmZyb20oW2J5dGVzLmJ5dGVMZW5ndGhdKSwgYnl0ZXMsIHRoaXMuZm9ybWF0SGVhZGVyVmFsdWUoaGVhZGVyc1toZWFkZXJOYW1lXSkpO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjaHVua3MucmVkdWNlKChjYXJyeSwgYnl0ZXMpID0+IGNhcnJ5ICsgYnl0ZXMuYnl0ZUxlbmd0aCwgMCkpO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIG91dC5zZXQoY2h1bmssIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgZm9ybWF0SGVhZGVyVmFsdWUoaGVhZGVyKSB7XG4gICAgc3dpdGNoIChoZWFkZXIudHlwZSkge1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbaGVhZGVyLnZhbHVlID8gMCAvKiBib29sVHJ1ZSAqLyA6IDEgLyogYm9vbEZhbHNlICovXSk7XG4gICAgICBjYXNlIFwiYnl0ZVwiOlxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFsyIC8qIGJ5dGUgKi8sIGhlYWRlci52YWx1ZV0pO1xuICAgICAgY2FzZSBcInNob3J0XCI6XG4gICAgICAgIGNvbnN0IHNob3J0VmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMykpO1xuICAgICAgICBzaG9ydFZpZXcuc2V0VWludDgoMCwgMyAvKiBzaG9ydCAqLyk7XG4gICAgICAgIHNob3J0Vmlldy5zZXRJbnQxNigxLCBoZWFkZXIudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNob3J0Vmlldy5idWZmZXIpO1xuICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgY29uc3QgaW50VmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoNSkpO1xuICAgICAgICBpbnRWaWV3LnNldFVpbnQ4KDAsIDQgLyogaW50ZWdlciAqLyk7XG4gICAgICAgIGludFZpZXcuc2V0SW50MzIoMSwgaGVhZGVyLnZhbHVlLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShpbnRWaWV3LmJ1ZmZlcik7XG4gICAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgICBjb25zdCBsb25nQnl0ZXMgPSBuZXcgVWludDhBcnJheSg5KTtcbiAgICAgICAgbG9uZ0J5dGVzWzBdID0gNSAvKiBsb25nICovO1xuICAgICAgICBsb25nQnl0ZXMuc2V0KGhlYWRlci52YWx1ZS5ieXRlcywgMSk7XG4gICAgICAgIHJldHVybiBsb25nQnl0ZXM7XG4gICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgIGNvbnN0IGJpblZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDMgKyBoZWFkZXIudmFsdWUuYnl0ZUxlbmd0aCkpO1xuICAgICAgICBiaW5WaWV3LnNldFVpbnQ4KDAsIDYgLyogYnl0ZUFycmF5ICovKTtcbiAgICAgICAgYmluVmlldy5zZXRVaW50MTYoMSwgaGVhZGVyLnZhbHVlLmJ5dGVMZW5ndGgsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgYmluQnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5WaWV3LmJ1ZmZlcik7XG4gICAgICAgIGJpbkJ5dGVzLnNldChoZWFkZXIudmFsdWUsIDMpO1xuICAgICAgICByZXR1cm4gYmluQnl0ZXM7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIGNvbnN0IHV0ZjhCeXRlcyA9ICgwLCBpbXBvcnRfdXRpbF91dGY4My5mcm9tVXRmOCkoaGVhZGVyLnZhbHVlKTtcbiAgICAgICAgY29uc3Qgc3RyVmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMyArIHV0ZjhCeXRlcy5ieXRlTGVuZ3RoKSk7XG4gICAgICAgIHN0clZpZXcuc2V0VWludDgoMCwgNyAvKiBzdHJpbmcgKi8pO1xuICAgICAgICBzdHJWaWV3LnNldFVpbnQxNigxLCB1dGY4Qnl0ZXMuYnl0ZUxlbmd0aCwgZmFsc2UpO1xuICAgICAgICBjb25zdCBzdHJCeXRlcyA9IG5ldyBVaW50OEFycmF5KHN0clZpZXcuYnVmZmVyKTtcbiAgICAgICAgc3RyQnl0ZXMuc2V0KHV0ZjhCeXRlcywgMyk7XG4gICAgICAgIHJldHVybiBzdHJCeXRlcztcbiAgICAgIGNhc2UgXCJ0aW1lc3RhbXBcIjpcbiAgICAgICAgY29uc3QgdHNCeXRlcyA9IG5ldyBVaW50OEFycmF5KDkpO1xuICAgICAgICB0c0J5dGVzWzBdID0gOCAvKiB0aW1lc3RhbXAgKi87XG4gICAgICAgIHRzQnl0ZXMuc2V0KEludDY0LmZyb21OdW1iZXIoaGVhZGVyLnZhbHVlLnZhbHVlT2YoKSkuYnl0ZXMsIDEpO1xuICAgICAgICByZXR1cm4gdHNCeXRlcztcbiAgICAgIGNhc2UgXCJ1dWlkXCI6XG4gICAgICAgIGlmICghVVVJRF9QQVRURVJOLnRlc3QoaGVhZGVyLnZhbHVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHJlY2VpdmVkOiAke2hlYWRlci52YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1dWlkQnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNyk7XG4gICAgICAgIHV1aWRCeXRlc1swXSA9IDkgLyogdXVpZCAqLztcbiAgICAgICAgdXVpZEJ5dGVzLnNldCgoMCwgaW1wb3J0X3V0aWxfaGV4X2VuY29kaW5nLmZyb21IZXgpKGhlYWRlci52YWx1ZS5yZXBsYWNlKC9cXC0vZywgXCJcIikpLCAxKTtcbiAgICAgICAgcmV0dXJuIHV1aWRCeXRlcztcbiAgICB9XG4gIH1cbn07XG5fX25hbWUoX0hlYWRlckZvcm1hdHRlciwgXCJIZWFkZXJGb3JtYXR0ZXJcIik7XG52YXIgSGVhZGVyRm9ybWF0dGVyID0gX0hlYWRlckZvcm1hdHRlcjtcbnZhciBVVUlEX1BBVFRFUk4gPSAvXlthLWYwLTldezh9LVthLWYwLTldezR9LVthLWYwLTldezR9LVthLWYwLTldezR9LVthLWYwLTldezEyfSQvO1xudmFyIF9JbnQ2NCA9IGNsYXNzIF9JbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGJ5dGVzKSB7XG4gICAgdGhpcy5ieXRlcyA9IGJ5dGVzO1xuICAgIGlmIChieXRlcy5ieXRlTGVuZ3RoICE9PSA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnQ2NCBidWZmZXJzIG11c3QgYmUgZXhhY3RseSA4IGJ5dGVzXCIpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZnJvbU51bWJlcihudW1iZXIpIHtcbiAgICBpZiAobnVtYmVyID4gOTIyMzM3MjAzNjg1NDc3NmUzIHx8IG51bWJlciA8IC05MjIzMzcyMDM2ODU0Nzc2ZTMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtudW1iZXJ9IGlzIHRvbyBsYXJnZSAob3IsIGlmIG5lZ2F0aXZlLCB0b28gc21hbGwpIHRvIHJlcHJlc2VudCBhcyBhbiBJbnQ2NGApO1xuICAgIH1cbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgIGZvciAobGV0IGkgPSA3LCByZW1haW5pbmcgPSBNYXRoLmFicyhNYXRoLnJvdW5kKG51bWJlcikpOyBpID4gLTEgJiYgcmVtYWluaW5nID4gMDsgaS0tLCByZW1haW5pbmcgLz0gMjU2KSB7XG4gICAgICBieXRlc1tpXSA9IHJlbWFpbmluZztcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIG5lZ2F0ZShieXRlcyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX0ludDY0KGJ5dGVzKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIGltcGxpY2l0bHkgYnkgaW5maXggYXJpdGhtZXRpYyBvcGVyYXRvcnMuXG4gICAqL1xuICB2YWx1ZU9mKCkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcy5zbGljZSgwKTtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IGJ5dGVzWzBdICYgMTI4O1xuICAgIGlmIChuZWdhdGl2ZSkge1xuICAgICAgbmVnYXRlKGJ5dGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KCgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGJ5dGVzKSwgMTYpICogKG5lZ2F0aXZlID8gLTEgOiAxKTtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWVPZigpKTtcbiAgfVxufTtcbl9fbmFtZShfSW50NjQsIFwiSW50NjRcIik7XG52YXIgSW50NjQgPSBfSW50NjQ7XG5mdW5jdGlvbiBuZWdhdGUoYnl0ZXMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICBieXRlc1tpXSBePSAyNTU7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDc7IGkgPiAtMTsgaS0tKSB7XG4gICAgYnl0ZXNbaV0rKztcbiAgICBpZiAoYnl0ZXNbaV0gIT09IDApXG4gICAgICBicmVhaztcbiAgfVxufVxuX19uYW1lKG5lZ2F0ZSwgXCJuZWdhdGVcIik7XG5cbi8vIHNyYy9oZWFkZXJVdGlsLnRzXG52YXIgaGFzSGVhZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc291Z2h0SGVhZGVyLCBoZWFkZXJzKSA9PiB7XG4gIHNvdWdodEhlYWRlciA9IHNvdWdodEhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBpZiAoc291Z2h0SGVhZGVyID09PSBoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcImhhc0hlYWRlclwiKTtcblxuLy8gc3JjL2Nsb25lUmVxdWVzdC50c1xudmFyIGNsb25lUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHsgaGVhZGVycywgcXVlcnksIC4uLnJlc3QgfSkgPT4gKHtcbiAgLi4ucmVzdCxcbiAgaGVhZGVyczogeyAuLi5oZWFkZXJzIH0sXG4gIHF1ZXJ5OiBxdWVyeSA/IGNsb25lUXVlcnkocXVlcnkpIDogdm9pZCAwXG59KSwgXCJjbG9uZVJlcXVlc3RcIik7XG52YXIgY2xvbmVRdWVyeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHF1ZXJ5KSA9PiBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChjYXJyeSwgcGFyYW1OYW1lKSA9PiB7XG4gIGNvbnN0IHBhcmFtID0gcXVlcnlbcGFyYW1OYW1lXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5jYXJyeSxcbiAgICBbcGFyYW1OYW1lXTogQXJyYXkuaXNBcnJheShwYXJhbSkgPyBbLi4ucGFyYW1dIDogcGFyYW1cbiAgfTtcbn0sIHt9KSwgXCJjbG9uZVF1ZXJ5XCIpO1xuXG4vLyBzcmMvbW92ZUhlYWRlcnNUb1F1ZXJ5LnRzXG52YXIgbW92ZUhlYWRlcnNUb1F1ZXJ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIHZhciBfYTtcbiAgY29uc3QgeyBoZWFkZXJzLCBxdWVyeSA9IHt9IH0gPSB0eXBlb2YgcmVxdWVzdC5jbG9uZSA9PT0gXCJmdW5jdGlvblwiID8gcmVxdWVzdC5jbG9uZSgpIDogY2xvbmVSZXF1ZXN0KHJlcXVlc3QpO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBjb25zdCBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG5hbWUuc2xpY2UoMCwgNikgPT09IFwieC1hbXotXCIgJiYgISgoX2EgPSBvcHRpb25zLnVuaG9pc3RhYmxlSGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmhhcyhsbmFtZSkpKSB7XG4gICAgICBxdWVyeVtuYW1lXSA9IGhlYWRlcnNbbmFtZV07XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXF1ZXN0LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfTtcbn0sIFwibW92ZUhlYWRlcnNUb1F1ZXJ5XCIpO1xuXG4vLyBzcmMvcHJlcGFyZVJlcXVlc3QudHNcbnZhciBwcmVwYXJlUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlcXVlc3QpID0+IHtcbiAgcmVxdWVzdCA9IHR5cGVvZiByZXF1ZXN0LmNsb25lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmNsb25lKCkgOiBjbG9uZVJlcXVlc3QocmVxdWVzdCk7XG4gIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhyZXF1ZXN0LmhlYWRlcnMpKSB7XG4gICAgaWYgKEdFTkVSQVRFRF9IRUFERVJTLmluZGV4T2YoaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdC5oZWFkZXJzW2hlYWRlck5hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVxdWVzdDtcbn0sIFwicHJlcGFyZVJlcXVlc3RcIik7XG5cbi8vIHNyYy91dGlsRGF0ZS50c1xudmFyIGlzbzg2MDEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0aW1lKSA9PiB0b0RhdGUodGltZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGR7M31aJC8sIFwiWlwiKSwgXCJpc284NjAxXCIpO1xudmFyIHRvRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRpbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB0aW1lID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUgKiAxZTMpO1xuICB9XG4gIGlmICh0eXBlb2YgdGltZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChOdW1iZXIodGltZSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOdW1iZXIodGltZSkgKiAxZTMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUodGltZSk7XG4gIH1cbiAgcmV0dXJuIHRpbWU7XG59LCBcInRvRGF0ZVwiKTtcblxuLy8gc3JjL1NpZ25hdHVyZVY0LnRzXG52YXIgX1NpZ25hdHVyZVY0ID0gY2xhc3MgX1NpZ25hdHVyZVY0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGFwcGx5Q2hlY2tzdW0sXG4gICAgY3JlZGVudGlhbHMsXG4gICAgcmVnaW9uLFxuICAgIHNlcnZpY2UsXG4gICAgc2hhMjU2LFxuICAgIHVyaUVzY2FwZVBhdGggPSB0cnVlXG4gIH0pIHtcbiAgICB0aGlzLmhlYWRlckZvcm1hdHRlciA9IG5ldyBIZWFkZXJGb3JtYXR0ZXIoKTtcbiAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIHRoaXMuc2hhMjU2ID0gc2hhMjU2O1xuICAgIHRoaXMudXJpRXNjYXBlUGF0aCA9IHVyaUVzY2FwZVBhdGg7XG4gICAgdGhpcy5hcHBseUNoZWNrc3VtID0gdHlwZW9mIGFwcGx5Q2hlY2tzdW0gPT09IFwiYm9vbGVhblwiID8gYXBwbHlDaGVja3N1bSA6IHRydWU7XG4gICAgdGhpcy5yZWdpb25Qcm92aWRlciA9ICgwLCBpbXBvcnRfdXRpbF9taWRkbGV3YXJlLm5vcm1hbGl6ZVByb3ZpZGVyKShyZWdpb24pO1xuICAgIHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyID0gKDAsIGltcG9ydF91dGlsX21pZGRsZXdhcmUubm9ybWFsaXplUHJvdmlkZXIpKGNyZWRlbnRpYWxzKTtcbiAgfVxuICBhc3luYyBwcmVzaWduKG9yaWdpbmFsUmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgc2lnbmluZ0RhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSxcbiAgICAgIGV4cGlyZXNJbiA9IDM2MDAsXG4gICAgICB1bnNpZ25hYmxlSGVhZGVycyxcbiAgICAgIHVuaG9pc3RhYmxlSGVhZGVycyxcbiAgICAgIHNpZ25hYmxlSGVhZGVycyxcbiAgICAgIHNpZ25pbmdSZWdpb24sXG4gICAgICBzaWduaW5nU2VydmljZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXIoKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiA/PyBhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCk7XG4gICAgY29uc3QgeyBsb25nRGF0ZSwgc2hvcnREYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICBpZiAoZXhwaXJlc0luID4gTUFYX1BSRVNJR05FRF9UVEwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgXCJTaWduYXR1cmUgdmVyc2lvbiA0IHByZXNpZ25lZCBVUkxzIG11c3QgaGF2ZSBhbiBleHBpcmF0aW9uIGRhdGUgbGVzcyB0aGFuIG9uZSB3ZWVrIGluIHRoZSBmdXR1cmVcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBjcmVhdGVTY29wZShzaG9ydERhdGUsIHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgPz8gdGhpcy5zZXJ2aWNlKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gbW92ZUhlYWRlcnNUb1F1ZXJ5KHByZXBhcmVSZXF1ZXN0KG9yaWdpbmFsUmVxdWVzdCksIHsgdW5ob2lzdGFibGVIZWFkZXJzIH0pO1xuICAgIGlmIChjcmVkZW50aWFscy5zZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJlcXVlc3QucXVlcnlbVE9LRU5fUVVFUllfUEFSQU1dID0gY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuO1xuICAgIH1cbiAgICByZXF1ZXN0LnF1ZXJ5W0FMR09SSVRITV9RVUVSWV9QQVJBTV0gPSBBTEdPUklUSE1fSURFTlRJRklFUjtcbiAgICByZXF1ZXN0LnF1ZXJ5W0NSRURFTlRJQUxfUVVFUllfUEFSQU1dID0gYCR7Y3JlZGVudGlhbHMuYWNjZXNzS2V5SWR9LyR7c2NvcGV9YDtcbiAgICByZXF1ZXN0LnF1ZXJ5W0FNWl9EQVRFX1FVRVJZX1BBUkFNXSA9IGxvbmdEYXRlO1xuICAgIHJlcXVlc3QucXVlcnlbRVhQSVJFU19RVUVSWV9QQVJBTV0gPSBleHBpcmVzSW4udG9TdHJpbmcoMTApO1xuICAgIGNvbnN0IGNhbm9uaWNhbEhlYWRlcnMgPSBnZXRDYW5vbmljYWxIZWFkZXJzKHJlcXVlc3QsIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpO1xuICAgIHJlcXVlc3QucXVlcnlbU0lHTkVEX0hFQURFUlNfUVVFUllfUEFSQU1dID0gZ2V0Q2Fub25pY2FsSGVhZGVyTGlzdChjYW5vbmljYWxIZWFkZXJzKTtcbiAgICByZXF1ZXN0LnF1ZXJ5W1NJR05BVFVSRV9RVUVSWV9QQVJBTV0gPSBhd2FpdCB0aGlzLmdldFNpZ25hdHVyZShcbiAgICAgIGxvbmdEYXRlLFxuICAgICAgc2NvcGUsXG4gICAgICB0aGlzLmdldFNpZ25pbmdLZXkoY3JlZGVudGlhbHMsIHJlZ2lvbiwgc2hvcnREYXRlLCBzaWduaW5nU2VydmljZSksXG4gICAgICB0aGlzLmNyZWF0ZUNhbm9uaWNhbFJlcXVlc3QocmVxdWVzdCwgY2Fub25pY2FsSGVhZGVycywgYXdhaXQgZ2V0UGF5bG9hZEhhc2gob3JpZ2luYWxSZXF1ZXN0LCB0aGlzLnNoYTI1NikpXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBhc3luYyBzaWduKHRvU2lnbiwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgdG9TaWduID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduU3RyaW5nKHRvU2lnbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0b1NpZ24uaGVhZGVycyAmJiB0b1NpZ24ucGF5bG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbkV2ZW50KHRvU2lnbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0b1NpZ24ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbk1lc3NhZ2UodG9TaWduLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnblJlcXVlc3QodG9TaWduLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgc2lnbkV2ZW50KHsgaGVhZGVycywgcGF5bG9hZCB9LCB7IHNpZ25pbmdEYXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIHByaW9yU2lnbmF0dXJlLCBzaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSB9KSB7XG4gICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiA/PyBhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCk7XG4gICAgY29uc3QgeyBzaG9ydERhdGUsIGxvbmdEYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICBjb25zdCBzY29wZSA9IGNyZWF0ZVNjb3BlKHNob3J0RGF0ZSwgcmVnaW9uLCBzaWduaW5nU2VydmljZSA/PyB0aGlzLnNlcnZpY2UpO1xuICAgIGNvbnN0IGhhc2hlZFBheWxvYWQgPSBhd2FpdCBnZXRQYXlsb2FkSGFzaCh7IGhlYWRlcnM6IHt9LCBib2R5OiBwYXlsb2FkIH0sIHRoaXMuc2hhMjU2KTtcbiAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuc2hhMjU2KCk7XG4gICAgaGFzaC51cGRhdGUoaGVhZGVycyk7XG4gICAgY29uc3QgaGFzaGVkSGVhZGVycyA9ICgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgIEVWRU5UX0FMR09SSVRITV9JREVOVElGSUVSLFxuICAgICAgbG9uZ0RhdGUsXG4gICAgICBzY29wZSxcbiAgICAgIHByaW9yU2lnbmF0dXJlLFxuICAgICAgaGFzaGVkSGVhZGVycyxcbiAgICAgIGhhc2hlZFBheWxvYWRcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgcmV0dXJuIHRoaXMuc2lnblN0cmluZyhzdHJpbmdUb1NpZ24sIHsgc2lnbmluZ0RhdGUsIHNpZ25pbmdSZWdpb246IHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgfSk7XG4gIH1cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoc2lnbmFibGVNZXNzYWdlLCB7IHNpZ25pbmdEYXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0pIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zaWduRXZlbnQoXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyRm9ybWF0dGVyLmZvcm1hdChzaWduYWJsZU1lc3NhZ2UubWVzc2FnZS5oZWFkZXJzKSxcbiAgICAgICAgcGF5bG9hZDogc2lnbmFibGVNZXNzYWdlLm1lc3NhZ2UuYm9keVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmluZ0RhdGUsXG4gICAgICAgIHNpZ25pbmdSZWdpb24sXG4gICAgICAgIHNpZ25pbmdTZXJ2aWNlLFxuICAgICAgICBwcmlvclNpZ25hdHVyZTogc2lnbmFibGVNZXNzYWdlLnByaW9yU2lnbmF0dXJlXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKChzaWduYXR1cmUpID0+IHtcbiAgICAgIHJldHVybiB7IG1lc3NhZ2U6IHNpZ25hYmxlTWVzc2FnZS5tZXNzYWdlLCBzaWduYXR1cmUgfTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBzaWduU3RyaW5nKHN0cmluZ1RvU2lnbiwgeyBzaWduaW5nRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLCBzaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSB9ID0ge30pIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyKCk7XG4gICAgdGhpcy52YWxpZGF0ZVJlc29sdmVkQ3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHNpZ25pbmdSZWdpb24gPz8gYXdhaXQgdGhpcy5yZWdpb25Qcm92aWRlcigpO1xuICAgIGNvbnN0IHsgc2hvcnREYXRlIH0gPSBmb3JtYXREYXRlKHNpZ25pbmdEYXRlKTtcbiAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuc2hhMjU2KGF3YWl0IHRoaXMuZ2V0U2lnbmluZ0tleShjcmVkZW50aWFscywgcmVnaW9uLCBzaG9ydERhdGUsIHNpZ25pbmdTZXJ2aWNlKSk7XG4gICAgaGFzaC51cGRhdGUoKDAsIGltcG9ydF91dGlsX3V0Zjg0LnRvVWludDhBcnJheSkoc3RyaW5nVG9TaWduKSk7XG4gICAgcmV0dXJuICgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICB9XG4gIGFzeW5jIHNpZ25SZXF1ZXN0KHJlcXVlc3RUb1NpZ24sIHtcbiAgICBzaWduaW5nRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLFxuICAgIHNpZ25hYmxlSGVhZGVycyxcbiAgICB1bnNpZ25hYmxlSGVhZGVycyxcbiAgICBzaWduaW5nUmVnaW9uLFxuICAgIHNpZ25pbmdTZXJ2aWNlXG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXIoKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgY29uc3QgcmVnaW9uID0gc2lnbmluZ1JlZ2lvbiA/PyBhd2FpdCB0aGlzLnJlZ2lvblByb3ZpZGVyKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RUb1NpZ24pO1xuICAgIGNvbnN0IHsgbG9uZ0RhdGUsIHNob3J0RGF0ZSB9ID0gZm9ybWF0RGF0ZShzaWduaW5nRGF0ZSk7XG4gICAgY29uc3Qgc2NvcGUgPSBjcmVhdGVTY29wZShzaG9ydERhdGUsIHJlZ2lvbiwgc2lnbmluZ1NlcnZpY2UgPz8gdGhpcy5zZXJ2aWNlKTtcbiAgICByZXF1ZXN0LmhlYWRlcnNbQU1aX0RBVEVfSEVBREVSXSA9IGxvbmdEYXRlO1xuICAgIGlmIChjcmVkZW50aWFscy5zZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc1tUT0tFTl9IRUFERVJdID0gY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkSGFzaCA9IGF3YWl0IGdldFBheWxvYWRIYXNoKHJlcXVlc3QsIHRoaXMuc2hhMjU2KTtcbiAgICBpZiAoIWhhc0hlYWRlcihTSEEyNTZfSEVBREVSLCByZXF1ZXN0LmhlYWRlcnMpICYmIHRoaXMuYXBwbHlDaGVja3N1bSkge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzW1NIQTI1Nl9IRUFERVJdID0gcGF5bG9hZEhhc2g7XG4gICAgfVxuICAgIGNvbnN0IGNhbm9uaWNhbEhlYWRlcnMgPSBnZXRDYW5vbmljYWxIZWFkZXJzKHJlcXVlc3QsIHVuc2lnbmFibGVIZWFkZXJzLCBzaWduYWJsZUhlYWRlcnMpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHRoaXMuZ2V0U2lnbmF0dXJlKFxuICAgICAgbG9uZ0RhdGUsXG4gICAgICBzY29wZSxcbiAgICAgIHRoaXMuZ2V0U2lnbmluZ0tleShjcmVkZW50aWFscywgcmVnaW9uLCBzaG9ydERhdGUsIHNpZ25pbmdTZXJ2aWNlKSxcbiAgICAgIHRoaXMuY3JlYXRlQ2Fub25pY2FsUmVxdWVzdChyZXF1ZXN0LCBjYW5vbmljYWxIZWFkZXJzLCBwYXlsb2FkSGFzaClcbiAgICApO1xuICAgIHJlcXVlc3QuaGVhZGVyc1tBVVRIX0hFQURFUl0gPSBgJHtBTEdPUklUSE1fSURFTlRJRklFUn0gQ3JlZGVudGlhbD0ke2NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkfS8ke3Njb3BlfSwgU2lnbmVkSGVhZGVycz0ke2dldENhbm9uaWNhbEhlYWRlckxpc3QoY2Fub25pY2FsSGVhZGVycyl9LCBTaWduYXR1cmU9JHtzaWduYXR1cmV9YDtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBjcmVhdGVDYW5vbmljYWxSZXF1ZXN0KHJlcXVlc3QsIGNhbm9uaWNhbEhlYWRlcnMsIHBheWxvYWRIYXNoKSB7XG4gICAgY29uc3Qgc29ydGVkSGVhZGVycyA9IE9iamVjdC5rZXlzKGNhbm9uaWNhbEhlYWRlcnMpLnNvcnQoKTtcbiAgICByZXR1cm4gYCR7cmVxdWVzdC5tZXRob2R9XG4ke3RoaXMuZ2V0Q2Fub25pY2FsUGF0aChyZXF1ZXN0KX1cbiR7Z2V0Q2Fub25pY2FsUXVlcnkocmVxdWVzdCl9XG4ke3NvcnRlZEhlYWRlcnMubWFwKChuYW1lKSA9PiBgJHtuYW1lfToke2Nhbm9uaWNhbEhlYWRlcnNbbmFtZV19YCkuam9pbihcIlxcblwiKX1cblxuJHtzb3J0ZWRIZWFkZXJzLmpvaW4oXCI7XCIpfVxuJHtwYXlsb2FkSGFzaH1gO1xuICB9XG4gIGFzeW5jIGNyZWF0ZVN0cmluZ1RvU2lnbihsb25nRGF0ZSwgY3JlZGVudGlhbFNjb3BlLCBjYW5vbmljYWxSZXF1ZXN0KSB7XG4gICAgY29uc3QgaGFzaCA9IG5ldyB0aGlzLnNoYTI1NigpO1xuICAgIGhhc2gudXBkYXRlKCgwLCBpbXBvcnRfdXRpbF91dGY4NC50b1VpbnQ4QXJyYXkpKGNhbm9uaWNhbFJlcXVlc3QpKTtcbiAgICBjb25zdCBoYXNoZWRSZXF1ZXN0ID0gYXdhaXQgaGFzaC5kaWdlc3QoKTtcbiAgICByZXR1cm4gYCR7QUxHT1JJVEhNX0lERU5USUZJRVJ9XG4ke2xvbmdEYXRlfVxuJHtjcmVkZW50aWFsU2NvcGV9XG4keygwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGhhc2hlZFJlcXVlc3QpfWA7XG4gIH1cbiAgZ2V0Q2Fub25pY2FsUGF0aCh7IHBhdGggfSkge1xuICAgIGlmICh0aGlzLnVyaUVzY2FwZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoU2VnbWVudHMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGF0aFNlZ21lbnQgb2YgcGF0aC5zcGxpdChcIi9cIikpIHtcbiAgICAgICAgaWYgKChwYXRoU2VnbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGF0aFNlZ21lbnQubGVuZ3RoKSA9PT0gMClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50ID09PSBcIi5cIilcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICBub3JtYWxpemVkUGF0aFNlZ21lbnRzLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoU2VnbWVudHMucHVzaChwYXRoU2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYCR7KHBhdGggPT0gbnVsbCA/IHZvaWQgMCA6IHBhdGguc3RhcnRzV2l0aChcIi9cIikpID8gXCIvXCIgOiBcIlwifSR7bm9ybWFsaXplZFBhdGhTZWdtZW50cy5qb2luKFwiL1wiKX0ke25vcm1hbGl6ZWRQYXRoU2VnbWVudHMubGVuZ3RoID4gMCAmJiAocGF0aCA9PSBudWxsID8gdm9pZCAwIDogcGF0aC5lbmRzV2l0aChcIi9cIikpID8gXCIvXCIgOiBcIlwifWA7XG4gICAgICBjb25zdCBkb3VibGVFbmNvZGVkID0gKDAsIGltcG9ydF91dGlsX3VyaV9lc2NhcGUuZXNjYXBlVXJpKShub3JtYWxpemVkUGF0aCk7XG4gICAgICByZXR1cm4gZG91YmxlRW5jb2RlZC5yZXBsYWNlKC8lMkYvZywgXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICBhc3luYyBnZXRTaWduYXR1cmUobG9uZ0RhdGUsIGNyZWRlbnRpYWxTY29wZSwga2V5UHJvbWlzZSwgY2Fub25pY2FsUmVxdWVzdCkge1xuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGF3YWl0IHRoaXMuY3JlYXRlU3RyaW5nVG9TaWduKGxvbmdEYXRlLCBjcmVkZW50aWFsU2NvcGUsIGNhbm9uaWNhbFJlcXVlc3QpO1xuICAgIGNvbnN0IGhhc2ggPSBuZXcgdGhpcy5zaGEyNTYoYXdhaXQga2V5UHJvbWlzZSk7XG4gICAgaGFzaC51cGRhdGUoKDAsIGltcG9ydF91dGlsX3V0Zjg0LnRvVWludDhBcnJheSkoc3RyaW5nVG9TaWduKSk7XG4gICAgcmV0dXJuICgwLCBpbXBvcnRfdXRpbF9oZXhfZW5jb2RpbmcudG9IZXgpKGF3YWl0IGhhc2guZGlnZXN0KCkpO1xuICB9XG4gIGdldFNpZ25pbmdLZXkoY3JlZGVudGlhbHMsIHJlZ2lvbiwgc2hvcnREYXRlLCBzZXJ2aWNlKSB7XG4gICAgcmV0dXJuIGdldFNpZ25pbmdLZXkodGhpcy5zaGEyNTYsIGNyZWRlbnRpYWxzLCBzaG9ydERhdGUsIHJlZ2lvbiwgc2VydmljZSB8fCB0aGlzLnNlcnZpY2UpO1xuICB9XG4gIHZhbGlkYXRlUmVzb2x2ZWRDcmVkZW50aWFscyhjcmVkZW50aWFscykge1xuICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgIT09IFwib2JqZWN0XCIgfHwgLy8gQHRzLWV4cGVjdC1lcnJvcjogUHJvcGVydHkgJ2FjY2Vzc0tleUlkJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdvYmplY3QnLnRzKDIzMzkpXG4gICAgdHlwZW9mIGNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkICE9PSBcInN0cmluZ1wiIHx8IC8vIEB0cy1leHBlY3QtZXJyb3I6IFByb3BlcnR5ICdzZWNyZXRBY2Nlc3NLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ29iamVjdCcudHMoMjMzOSlcbiAgICB0eXBlb2YgY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXNvbHZlZCBjcmVkZW50aWFsIG9iamVjdCBpcyBub3QgdmFsaWRcIik7XG4gICAgfVxuICB9XG59O1xuX19uYW1lKF9TaWduYXR1cmVWNCwgXCJTaWduYXR1cmVWNFwiKTtcbnZhciBTaWduYXR1cmVWNCA9IF9TaWduYXR1cmVWNDtcbnZhciBmb3JtYXREYXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm93KSA9PiB7XG4gIGNvbnN0IGxvbmdEYXRlID0gaXNvODYwMShub3cpLnJlcGxhY2UoL1tcXC06XS9nLCBcIlwiKTtcbiAgcmV0dXJuIHtcbiAgICBsb25nRGF0ZSxcbiAgICBzaG9ydERhdGU6IGxvbmdEYXRlLnNsaWNlKDAsIDgpXG4gIH07XG59LCBcImZvcm1hdERhdGVcIik7XG52YXIgZ2V0Q2Fub25pY2FsSGVhZGVyTGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGhlYWRlcnMpID0+IE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvcnQoKS5qb2luKFwiO1wiKSwgXCJnZXRDYW5vbmljYWxIZWFkZXJMaXN0XCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q2Fub25pY2FsSGVhZGVycyxcbiAgZ2V0Q2Fub25pY2FsUXVlcnksXG4gIGdldFBheWxvYWRIYXNoLFxuICBtb3ZlSGVhZGVyc1RvUXVlcnksXG4gIHByZXBhcmVSZXF1ZXN0LFxuICBTaWduYXR1cmVWNCxcbiAgY3JlYXRlU2NvcGUsXG4gIGdldFNpZ25pbmdLZXksXG4gIGNsZWFyQ3JlZGVudGlhbENhY2hlXG59KTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVNpZ1Y0QXV0aENvbmZpZyA9IGV4cG9ydHMucmVzb2x2ZUF3c0F1dGhDb25maWcgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaWduYXR1cmVfdjRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NpZ25hdHVyZS12NFwiKTtcbmNvbnN0IHV0aWxfbWlkZGxld2FyZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlXCIpO1xuY29uc3QgQ1JFREVOVElBTF9FWFBJUkVfV0lORE9XID0gMzAwMDAwO1xuY29uc3QgcmVzb2x2ZUF3c0F1dGhDb25maWcgPSAoaW5wdXQpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkQ3JlZHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgICA/IG5vcm1hbGl6ZUNyZWRlbnRpYWxQcm92aWRlcihpbnB1dC5jcmVkZW50aWFscylcbiAgICAgICAgOiBpbnB1dC5jcmVkZW50aWFsRGVmYXVsdFByb3ZpZGVyKGlucHV0KTtcbiAgICBjb25zdCB7IHNpZ25pbmdFc2NhcGVQYXRoID0gdHJ1ZSwgc3lzdGVtQ2xvY2tPZmZzZXQgPSBpbnB1dC5zeXN0ZW1DbG9ja09mZnNldCB8fCAwLCBzaGEyNTYgfSA9IGlucHV0O1xuICAgIGxldCBzaWduZXI7XG4gICAgaWYgKGlucHV0LnNpZ25lcikge1xuICAgICAgICBzaWduZXIgPSAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnNpZ25lcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlucHV0LnJlZ2lvbkluZm9Qcm92aWRlcikge1xuICAgICAgICBzaWduZXIgPSAoKSA9PiAoMCwgdXRpbF9taWRkbGV3YXJlXzEubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnJlZ2lvbikoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlZ2lvbikgPT4gW1xuICAgICAgICAgICAgKGF3YWl0IGlucHV0LnJlZ2lvbkluZm9Qcm92aWRlcihyZWdpb24sIHtcbiAgICAgICAgICAgICAgICB1c2VGaXBzRW5kcG9pbnQ6IGF3YWl0IGlucHV0LnVzZUZpcHNFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBhd2FpdCBpbnB1dC51c2VEdWFsc3RhY2tFbmRwb2ludCgpLFxuICAgICAgICAgICAgfSkpIHx8IHt9LFxuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICBdKVxuICAgICAgICAgICAgLnRoZW4oKFtyZWdpb25JbmZvLCByZWdpb25dKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0gPSByZWdpb25JbmZvO1xuICAgICAgICAgICAgaW5wdXQuc2lnbmluZ1JlZ2lvbiA9IGlucHV0LnNpZ25pbmdSZWdpb24gfHwgc2lnbmluZ1JlZ2lvbiB8fCByZWdpb247XG4gICAgICAgICAgICBpbnB1dC5zaWduaW5nTmFtZSA9IGlucHV0LnNpZ25pbmdOYW1lIHx8IHNpZ25pbmdTZXJ2aWNlIHx8IGlucHV0LnNlcnZpY2VJZDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICAgICAgICAgIHJlZ2lvbjogaW5wdXQuc2lnbmluZ1JlZ2lvbixcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBpbnB1dC5zaWduaW5nTmFtZSxcbiAgICAgICAgICAgICAgICBzaGEyNTYsXG4gICAgICAgICAgICAgICAgdXJpRXNjYXBlUGF0aDogc2lnbmluZ0VzY2FwZVBhdGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgU2lnbmVyQ3RvciA9IGlucHV0LnNpZ25lckNvbnN0cnVjdG9yIHx8IHNpZ25hdHVyZV92NF8xLlNpZ25hdHVyZVY0O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaWduZXJDdG9yKHBhcmFtcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2lnbmVyID0gYXN5bmMgKGF1dGhTY2hlbWUpID0+IHtcbiAgICAgICAgICAgIGF1dGhTY2hlbWUgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaWd2NFwiLFxuICAgICAgICAgICAgICAgIHNpZ25pbmdOYW1lOiBpbnB1dC5zaWduaW5nTmFtZSB8fCBpbnB1dC5kZWZhdWx0U2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2lnbmluZ1JlZ2lvbjogYXdhaXQgKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC5yZWdpb24pKCksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgICAgICB9LCBhdXRoU2NoZW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25pbmdSZWdpb24gPSBhdXRoU2NoZW1lLnNpZ25pbmdSZWdpb247XG4gICAgICAgICAgICBjb25zdCBzaWduaW5nU2VydmljZSA9IGF1dGhTY2hlbWUuc2lnbmluZ05hbWU7XG4gICAgICAgICAgICBpbnB1dC5zaWduaW5nUmVnaW9uID0gaW5wdXQuc2lnbmluZ1JlZ2lvbiB8fCBzaWduaW5nUmVnaW9uO1xuICAgICAgICAgICAgaW5wdXQuc2lnbmluZ05hbWUgPSBpbnB1dC5zaWduaW5nTmFtZSB8fCBzaWduaW5nU2VydmljZSB8fCBpbnB1dC5zZXJ2aWNlSWQ7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgICAgICAgICByZWdpb246IGlucHV0LnNpZ25pbmdSZWdpb24sXG4gICAgICAgICAgICAgICAgc2VydmljZTogaW5wdXQuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2hhMjU2LFxuICAgICAgICAgICAgICAgIHVyaUVzY2FwZVBhdGg6IHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFNpZ25lckN0b3IgPSBpbnB1dC5zaWduZXJDb25zdHJ1Y3RvciB8fCBzaWduYXR1cmVfdjRfMS5TaWduYXR1cmVWNDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmVyQ3RvcihwYXJhbXMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgc3lzdGVtQ2xvY2tPZmZzZXQsXG4gICAgICAgIHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICBzaWduZXIsXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVBd3NBdXRoQ29uZmlnID0gcmVzb2x2ZUF3c0F1dGhDb25maWc7XG5jb25zdCByZXNvbHZlU2lnVjRBdXRoQ29uZmlnID0gKGlucHV0KSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENyZWRzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgPyBub3JtYWxpemVDcmVkZW50aWFsUHJvdmlkZXIoaW5wdXQuY3JlZGVudGlhbHMpXG4gICAgICAgIDogaW5wdXQuY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcihpbnB1dCk7XG4gICAgY29uc3QgeyBzaWduaW5nRXNjYXBlUGF0aCA9IHRydWUsIHN5c3RlbUNsb2NrT2Zmc2V0ID0gaW5wdXQuc3lzdGVtQ2xvY2tPZmZzZXQgfHwgMCwgc2hhMjU2IH0gPSBpbnB1dDtcbiAgICBsZXQgc2lnbmVyO1xuICAgIGlmIChpbnB1dC5zaWduZXIpIHtcbiAgICAgICAgc2lnbmVyID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC5zaWduZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2lnbmVyID0gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShuZXcgc2lnbmF0dXJlX3Y0XzEuU2lnbmF0dXJlVjQoe1xuICAgICAgICAgICAgY3JlZGVudGlhbHM6IG5vcm1hbGl6ZWRDcmVkcyxcbiAgICAgICAgICAgIHJlZ2lvbjogaW5wdXQucmVnaW9uLFxuICAgICAgICAgICAgc2VydmljZTogaW5wdXQuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICBzaGEyNTYsXG4gICAgICAgICAgICB1cmlFc2NhcGVQYXRoOiBzaWduaW5nRXNjYXBlUGF0aCxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgc3lzdGVtQ2xvY2tPZmZzZXQsXG4gICAgICAgIHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICBzaWduZXIsXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVTaWdWNEF1dGhDb25maWcgPSByZXNvbHZlU2lnVjRBdXRoQ29uZmlnO1xuY29uc3Qgbm9ybWFsaXplQ3JlZGVudGlhbFByb3ZpZGVyID0gKGNyZWRlbnRpYWxzKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjcmVkZW50aWFscyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoMCwgcHJvcGVydHlfcHJvdmlkZXJfMS5tZW1vaXplKShjcmVkZW50aWFscywgKGNyZWRlbnRpYWxzKSA9PiBjcmVkZW50aWFscy5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLmV4cGlyYXRpb24uZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA8IENSRURFTlRJQUxfRVhQSVJFX1dJTkRPVywgKGNyZWRlbnRpYWxzKSA9PiBjcmVkZW50aWFscy5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShjcmVkZW50aWFscyk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2tld0NvcnJlY3RlZERhdGUgPSB2b2lkIDA7XG5jb25zdCBnZXRTa2V3Q29ycmVjdGVkRGF0ZSA9IChzeXN0ZW1DbG9ja09mZnNldCkgPT4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHN5c3RlbUNsb2NrT2Zmc2V0KTtcbmV4cG9ydHMuZ2V0U2tld0NvcnJlY3RlZERhdGUgPSBnZXRTa2V3Q29ycmVjdGVkRGF0ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQ2xvY2tTa2V3ZWQgPSB2b2lkIDA7XG5jb25zdCBnZXRTa2V3Q29ycmVjdGVkRGF0ZV8xID0gcmVxdWlyZShcIi4vZ2V0U2tld0NvcnJlY3RlZERhdGVcIik7XG5jb25zdCBpc0Nsb2NrU2tld2VkID0gKGNsb2NrVGltZSwgc3lzdGVtQ2xvY2tPZmZzZXQpID0+IE1hdGguYWJzKCgwLCBnZXRTa2V3Q29ycmVjdGVkRGF0ZV8xLmdldFNrZXdDb3JyZWN0ZWREYXRlKShzeXN0ZW1DbG9ja09mZnNldCkuZ2V0VGltZSgpIC0gY2xvY2tUaW1lKSA+PSAzMDAwMDA7XG5leHBvcnRzLmlzQ2xvY2tTa2V3ZWQgPSBpc0Nsb2NrU2tld2VkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0ID0gdm9pZCAwO1xuY29uc3QgaXNDbG9ja1NrZXdlZF8xID0gcmVxdWlyZShcIi4vaXNDbG9ja1NrZXdlZFwiKTtcbmNvbnN0IGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldCA9IChjbG9ja1RpbWUsIGN1cnJlbnRTeXN0ZW1DbG9ja09mZnNldCkgPT4ge1xuICAgIGNvbnN0IGNsb2NrVGltZUluTXMgPSBEYXRlLnBhcnNlKGNsb2NrVGltZSk7XG4gICAgaWYgKCgwLCBpc0Nsb2NrU2tld2VkXzEuaXNDbG9ja1NrZXdlZCkoY2xvY2tUaW1lSW5NcywgY3VycmVudFN5c3RlbUNsb2NrT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gY2xvY2tUaW1lSW5NcyAtIERhdGUubm93KCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3lzdGVtQ2xvY2tPZmZzZXQ7XG59O1xuZXhwb3J0cy5nZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQgPSBnZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaWdWNEF1dGhQbHVnaW4gPSBleHBvcnRzLmdldEF3c0F1dGhQbHVnaW4gPSBleHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlT3B0aW9ucyA9IGV4cG9ydHMuYXdzQXV0aE1pZGRsZXdhcmUgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3QgZ2V0U2tld0NvcnJlY3RlZERhdGVfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL2dldFNrZXdDb3JyZWN0ZWREYXRlXCIpO1xuY29uc3QgZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0XzEgPSByZXF1aXJlKFwiLi91dGlscy9nZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXRcIik7XG5jb25zdCBhd3NBdXRoTWlkZGxld2FyZSA9IChvcHRpb25zKSA9PiAobmV4dCwgY29udGV4dCkgPT4gYXN5bmMgZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgaWYgKCFwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShhcmdzLnJlcXVlc3QpKVxuICAgICAgICByZXR1cm4gbmV4dChhcmdzKTtcbiAgICBjb25zdCBhdXRoU2NoZW1lID0gKF9jID0gKF9iID0gKF9hID0gY29udGV4dC5lbmRwb2ludFYyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucHJvcGVydGllcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmF1dGhTY2hlbWVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NbMF07XG4gICAgY29uc3QgbXVsdGlSZWdpb25PdmVycmlkZSA9IChhdXRoU2NoZW1lID09PSBudWxsIHx8IGF1dGhTY2hlbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGF1dGhTY2hlbWUubmFtZSkgPT09IFwic2lndjRhXCIgPyAoX2QgPSBhdXRoU2NoZW1lID09PSBudWxsIHx8IGF1dGhTY2hlbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGF1dGhTY2hlbWUuc2lnbmluZ1JlZ2lvblNldCkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmpvaW4oXCIsXCIpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNpZ25lciA9IGF3YWl0IG9wdGlvbnMuc2lnbmVyKGF1dGhTY2hlbWUpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5leHQoe1xuICAgICAgICAuLi5hcmdzLFxuICAgICAgICByZXF1ZXN0OiBhd2FpdCBzaWduZXIuc2lnbihhcmdzLnJlcXVlc3QsIHtcbiAgICAgICAgICAgIHNpZ25pbmdEYXRlOiAoMCwgZ2V0U2tld0NvcnJlY3RlZERhdGVfMS5nZXRTa2V3Q29ycmVjdGVkRGF0ZSkob3B0aW9ucy5zeXN0ZW1DbG9ja09mZnNldCksXG4gICAgICAgICAgICBzaWduaW5nUmVnaW9uOiBtdWx0aVJlZ2lvbk92ZXJyaWRlIHx8IGNvbnRleHRbXCJzaWduaW5nX3JlZ2lvblwiXSxcbiAgICAgICAgICAgIHNpZ25pbmdTZXJ2aWNlOiBjb250ZXh0W1wic2lnbmluZ19zZXJ2aWNlXCJdLFxuICAgICAgICB9KSxcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzZXJ2ZXJUaW1lID0gKF9hID0gZXJyb3IuU2VydmVyVGltZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZ2V0RGF0ZUhlYWRlcihlcnJvci4kcmVzcG9uc2UpO1xuICAgICAgICBpZiAoc2VydmVyVGltZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zeXN0ZW1DbG9ja09mZnNldCA9ICgwLCBnZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXRfMS5nZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQpKHNlcnZlclRpbWUsIG9wdGlvbnMuc3lzdGVtQ2xvY2tPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICAgIGNvbnN0IGRhdGVIZWFkZXIgPSBnZXREYXRlSGVhZGVyKG91dHB1dC5yZXNwb25zZSk7XG4gICAgaWYgKGRhdGVIZWFkZXIpIHtcbiAgICAgICAgb3B0aW9ucy5zeXN0ZW1DbG9ja09mZnNldCA9ICgwLCBnZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXRfMS5nZXRVcGRhdGVkU3lzdGVtQ2xvY2tPZmZzZXQpKGRhdGVIZWFkZXIsIG9wdGlvbnMuc3lzdGVtQ2xvY2tPZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufTtcbmV4cG9ydHMuYXdzQXV0aE1pZGRsZXdhcmUgPSBhd3NBdXRoTWlkZGxld2FyZTtcbmNvbnN0IGdldERhdGVIZWFkZXIgPSAocmVzcG9uc2UpID0+IHsgdmFyIF9hLCBfYiwgX2M7IHJldHVybiBwcm90b2NvbF9odHRwXzEuSHR0cFJlc3BvbnNlLmlzSW5zdGFuY2UocmVzcG9uc2UpID8gKF9iID0gKF9hID0gcmVzcG9uc2UuaGVhZGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChfYyA9IHJlc3BvbnNlLmhlYWRlcnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5EYXRlIDogdW5kZWZpbmVkOyB9O1xuZXhwb3J0cy5hd3NBdXRoTWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJhd3NBdXRoTWlkZGxld2FyZVwiLFxuICAgIHRhZ3M6IFtcIlNJR05BVFVSRVwiLCBcIkFXU0FVVEhcIl0sXG4gICAgcmVsYXRpb246IFwiYWZ0ZXJcIixcbiAgICB0b01pZGRsZXdhcmU6IFwicmV0cnlNaWRkbGV3YXJlXCIsXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuY29uc3QgZ2V0QXdzQXV0aFBsdWdpbiA9IChvcHRpb25zKSA9PiAoe1xuICAgIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgICAgIGNsaWVudFN0YWNrLmFkZFJlbGF0aXZlVG8oKDAsIGV4cG9ydHMuYXdzQXV0aE1pZGRsZXdhcmUpKG9wdGlvbnMpLCBleHBvcnRzLmF3c0F1dGhNaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRBd3NBdXRoUGx1Z2luID0gZ2V0QXdzQXV0aFBsdWdpbjtcbmV4cG9ydHMuZ2V0U2lnVjRBdXRoUGx1Z2luID0gZXhwb3J0cy5nZXRBd3NBdXRoUGx1Z2luO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hd3NBdXRoQ29uZmlndXJhdGlvblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hd3NBdXRoTWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlVXNlckFnZW50Q29uZmlnID0gdm9pZCAwO1xuZnVuY3Rpb24gcmVzb2x2ZVVzZXJBZ2VudENvbmZpZyhpbnB1dCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBjdXN0b21Vc2VyQWdlbnQ6IHR5cGVvZiBpbnB1dC5jdXN0b21Vc2VyQWdlbnQgPT09IFwic3RyaW5nXCIgPyBbW2lucHV0LmN1c3RvbVVzZXJBZ2VudF1dIDogaW5wdXQuY3VzdG9tVXNlckFnZW50LFxuICAgIH07XG59XG5leHBvcnRzLnJlc29sdmVVc2VyQWdlbnRDb25maWcgPSByZXNvbHZlVXNlckFnZW50Q29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50UHJlZml4ID0gZXhwb3J0cy51c2VEZWZhdWx0UGFydGl0aW9uSW5mbyA9IGV4cG9ydHMuc2V0UGFydGl0aW9uSW5mbyA9IGV4cG9ydHMucGFydGl0aW9uID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IHBhcnRpdGlvbnNfanNvbl8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vcGFydGl0aW9ucy5qc29uXCIpKTtcbmxldCBzZWxlY3RlZFBhcnRpdGlvbnNJbmZvID0gcGFydGl0aW9uc19qc29uXzEuZGVmYXVsdDtcbmxldCBzZWxlY3RlZFVzZXJBZ2VudFByZWZpeCA9IFwiXCI7XG5jb25zdCBwYXJ0aXRpb24gPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCB7IHBhcnRpdGlvbnMgfSA9IHNlbGVjdGVkUGFydGl0aW9uc0luZm87XG4gICAgZm9yIChjb25zdCBwYXJ0aXRpb24gb2YgcGFydGl0aW9ucykge1xuICAgICAgICBjb25zdCB7IHJlZ2lvbnMsIG91dHB1dHMgfSA9IHBhcnRpdGlvbjtcbiAgICAgICAgZm9yIChjb25zdCBbcmVnaW9uLCByZWdpb25EYXRhXSBvZiBPYmplY3QuZW50cmllcyhyZWdpb25zKSkge1xuICAgICAgICAgICAgaWYgKHJlZ2lvbiA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5vdXRwdXRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5yZWdpb25EYXRhLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJ0aXRpb24gb2YgcGFydGl0aW9ucykge1xuICAgICAgICBjb25zdCB7IHJlZ2lvblJlZ2V4LCBvdXRwdXRzIH0gPSBwYXJ0aXRpb247XG4gICAgICAgIGlmIChuZXcgUmVnRXhwKHJlZ2lvblJlZ2V4KS50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5vdXRwdXRzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBERUZBVUxUX1BBUlRJVElPTiA9IHBhcnRpdGlvbnMuZmluZCgocGFydGl0aW9uKSA9PiBwYXJ0aXRpb24uaWQgPT09IFwiYXdzXCIpO1xuICAgIGlmICghREVGQVVMVF9QQVJUSVRJT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgcmVnaW9uIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcnRpdGlvbiBhcnJheSBvciByZWdleCxcIiArXG4gICAgICAgICAgICBcIiBhbmQgZGVmYXVsdCBwYXJ0aXRpb24gd2l0aCBpZCAnYXdzJyBkb2Vzbid0IGV4aXN0LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uREVGQVVMVF9QQVJUSVRJT04ub3V0cHV0cyxcbiAgICB9O1xufTtcbmV4cG9ydHMucGFydGl0aW9uID0gcGFydGl0aW9uO1xuY29uc3Qgc2V0UGFydGl0aW9uSW5mbyA9IChwYXJ0aXRpb25zSW5mbywgdXNlckFnZW50UHJlZml4ID0gXCJcIikgPT4ge1xuICAgIHNlbGVjdGVkUGFydGl0aW9uc0luZm8gPSBwYXJ0aXRpb25zSW5mbztcbiAgICBzZWxlY3RlZFVzZXJBZ2VudFByZWZpeCA9IHVzZXJBZ2VudFByZWZpeDtcbn07XG5leHBvcnRzLnNldFBhcnRpdGlvbkluZm8gPSBzZXRQYXJ0aXRpb25JbmZvO1xuY29uc3QgdXNlRGVmYXVsdFBhcnRpdGlvbkluZm8gPSAoKSA9PiB7XG4gICAgKDAsIGV4cG9ydHMuc2V0UGFydGl0aW9uSW5mbykocGFydGl0aW9uc19qc29uXzEuZGVmYXVsdCwgXCJcIik7XG59O1xuZXhwb3J0cy51c2VEZWZhdWx0UGFydGl0aW9uSW5mbyA9IHVzZURlZmF1bHRQYXJ0aXRpb25JbmZvO1xuY29uc3QgZ2V0VXNlckFnZW50UHJlZml4ID0gKCkgPT4gc2VsZWN0ZWRVc2VyQWdlbnRQcmVmaXg7XG5leHBvcnRzLmdldFVzZXJBZ2VudFByZWZpeCA9IGdldFVzZXJBZ2VudFByZWZpeDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSXBBZGRyZXNzID0gdm9pZCAwO1xuY29uc3QgSVBfVjRfUkVHRVggPSBuZXcgUmVnRXhwKGBeKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30kYCk7XG5jb25zdCBpc0lwQWRkcmVzcyA9ICh2YWx1ZSkgPT4gSVBfVjRfUkVHRVgudGVzdCh2YWx1ZSkgfHwgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiXVwiKSk7XG5leHBvcnRzLmlzSXBBZGRyZXNzID0gaXNJcEFkZHJlc3M7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWJ1Z0lkID0gdm9pZCAwO1xuZXhwb3J0cy5kZWJ1Z0lkID0gXCJlbmRwb2ludHNcIjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvRGVidWdTdHJpbmcgPSB2b2lkIDA7XG5mdW5jdGlvbiB0b0RlYnVnU3RyaW5nKGlucHV0KSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKFwicmVmXCIgaW4gaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGAkJHt0b0RlYnVnU3RyaW5nKGlucHV0LnJlZil9YDtcbiAgICB9XG4gICAgaWYgKFwiZm5cIiBpbiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gYCR7aW5wdXQuZm59KCR7KGlucHV0LmFyZ3YgfHwgW10pLm1hcCh0b0RlYnVnU3RyaW5nKS5qb2luKFwiLCBcIil9KWA7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbnB1dCwgbnVsbCwgMik7XG59XG5leHBvcnRzLnRvRGVidWdTdHJpbmcgPSB0b0RlYnVnU3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kZWJ1Z0lkXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RvRGVidWdTdHJpbmdcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW5kcG9pbnRFcnJvciA9IHZvaWQgMDtcbmNsYXNzIEVuZHBvaW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFbmRwb2ludEVycm9yXCI7XG4gICAgfVxufVxuZXhwb3J0cy5FbmRwb2ludEVycm9yID0gRW5kcG9pbnRFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FbmRwb2ludEVycm9yXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0VuZHBvaW50UnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FcnJvclJ1bGVPYmplY3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vUnVsZVNldE9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9UcmVlUnVsZU9iamVjdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaGFyZWRcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNWYWxpZEhvc3RMYWJlbCA9IHZvaWQgMDtcbmNvbnN0IFZBTElEX0hPU1RfTEFCRUxfUkVHRVggPSBuZXcgUmVnRXhwKGBeKD8hLiotJCkoPyEtKVthLXpBLVowLTktXXsxLDYzfSRgKTtcbmNvbnN0IGlzVmFsaWRIb3N0TGFiZWwgPSAodmFsdWUsIGFsbG93U3ViRG9tYWlucyA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKCFhbGxvd1N1YkRvbWFpbnMpIHtcbiAgICAgICAgcmV0dXJuIFZBTElEX0hPU1RfTEFCRUxfUkVHRVgudGVzdCh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVscyA9IHZhbHVlLnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgICBpZiAoISgwLCBleHBvcnRzLmlzVmFsaWRIb3N0TGFiZWwpKGxhYmVsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydHMuaXNWYWxpZEhvc3RMYWJlbCA9IGlzVmFsaWRIb3N0TGFiZWw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0ID0gdm9pZCAwO1xuY29uc3QgaXNJcEFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuLi9pc0lwQWRkcmVzc1wiKTtcbmNvbnN0IGlzVmFsaWRIb3N0TGFiZWxfMSA9IHJlcXVpcmUoXCIuLi9pc1ZhbGlkSG9zdExhYmVsXCIpO1xuY29uc3QgaXNWaXJ0dWFsSG9zdGFibGVTM0J1Y2tldCA9ICh2YWx1ZSwgYWxsb3dTdWJEb21haW5zID0gZmFsc2UpID0+IHtcbiAgICBpZiAoYWxsb3dTdWJEb21haW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgdmFsdWUuc3BsaXQoXCIuXCIpKSB7XG4gICAgICAgICAgICBpZiAoISgwLCBleHBvcnRzLmlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQpKGxhYmVsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCEoMCwgaXNWYWxpZEhvc3RMYWJlbF8xLmlzVmFsaWRIb3N0TGFiZWwpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5sZW5ndGggPCAzIHx8IHZhbHVlLmxlbmd0aCA+IDYzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCgwLCBpc0lwQWRkcmVzc18xLmlzSXBBZGRyZXNzKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnRzLmlzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXQgPSBpc1ZpcnR1YWxIb3N0YWJsZVMzQnVja2V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VBcm4gPSB2b2lkIDA7XG5jb25zdCBwYXJzZUFybiA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPCA2KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBbYXJuLCBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudElkLCAuLi5yZXNvdXJjZUlkXSA9IHNlZ21lbnRzO1xuICAgIGlmIChhcm4gIT09IFwiYXJuXCIgfHwgcGFydGl0aW9uID09PSBcIlwiIHx8IHNlcnZpY2UgPT09IFwiXCIgfHwgcmVzb3VyY2VJZFswXSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGFydGl0aW9uLFxuICAgICAgICBzZXJ2aWNlLFxuICAgICAgICByZWdpb24sXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2VJZFswXS5pbmNsdWRlcyhcIi9cIikgPyByZXNvdXJjZUlkWzBdLnNwbGl0KFwiL1wiKSA6IHJlc291cmNlSWQsXG4gICAgfTtcbn07XG5leHBvcnRzLnBhcnNlQXJuID0gcGFyc2VBcm47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2lzVmlydHVhbEhvc3RhYmxlUzNCdWNrZXRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFyc2VBcm5cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFydGl0aW9uXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJvb2xlYW5FcXVhbHMgPSB2b2lkIDA7XG5jb25zdCBib29sZWFuRXF1YWxzID0gKHZhbHVlMSwgdmFsdWUyKSA9PiB2YWx1ZTEgPT09IHZhbHVlMjtcbmV4cG9ydHMuYm9vbGVhbkVxdWFscyA9IGJvb2xlYW5FcXVhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBdHRyUGF0aExpc3QgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZ2V0QXR0clBhdGhMaXN0ID0gKHBhdGgpID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhdGhMaXN0ID0gW107XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHNxdWFyZUJyYWNrZXRJbmRleCA9IHBhcnQuaW5kZXhPZihcIltcIik7XG4gICAgICAgIGlmIChzcXVhcmVCcmFja2V0SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAocGFydC5pbmRleE9mKFwiXVwiKSAhPT0gcGFydC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgUGF0aDogJyR7cGF0aH0nIGRvZXMgbm90IGVuZCB3aXRoICddJ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXJyYXlJbmRleCA9IHBhcnQuc2xpY2Uoc3F1YXJlQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihwYXJzZUludChhcnJheUluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBJbnZhbGlkIGFycmF5IGluZGV4OiAnJHthcnJheUluZGV4fScgaW4gcGF0aDogJyR7cGF0aH0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3F1YXJlQnJhY2tldEluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcGF0aExpc3QucHVzaChwYXJ0LnNsaWNlKDAsIHNxdWFyZUJyYWNrZXRJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aExpc3QucHVzaChhcnJheUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhMaXN0LnB1c2gocGFydCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhdGhMaXN0O1xufTtcbmV4cG9ydHMuZ2V0QXR0clBhdGhMaXN0ID0gZ2V0QXR0clBhdGhMaXN0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXR0ciA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBnZXRBdHRyUGF0aExpc3RfMSA9IHJlcXVpcmUoXCIuL2dldEF0dHJQYXRoTGlzdFwiKTtcbmNvbnN0IGdldEF0dHIgPSAodmFsdWUsIHBhdGgpID0+ICgwLCBnZXRBdHRyUGF0aExpc3RfMS5nZXRBdHRyUGF0aExpc3QpKHBhdGgpLnJlZHVjZSgoYWNjLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYEluZGV4ICcke2luZGV4fScgaW4gJyR7cGF0aH0nIG5vdCBmb3VuZCBpbiAnJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9J2ApO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFjYykpIHtcbiAgICAgICAgcmV0dXJuIGFjY1twYXJzZUludChpbmRleCldO1xuICAgIH1cbiAgICByZXR1cm4gYWNjW2luZGV4XTtcbn0sIHZhbHVlKTtcbmV4cG9ydHMuZ2V0QXR0ciA9IGdldEF0dHI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1NldCA9IHZvaWQgMDtcbmNvbnN0IGlzU2V0ID0gKHZhbHVlKSA9PiB2YWx1ZSAhPSBudWxsO1xuZXhwb3J0cy5pc1NldCA9IGlzU2V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm90ID0gdm9pZCAwO1xuY29uc3Qgbm90ID0gKHZhbHVlKSA9PiAhdmFsdWU7XG5leHBvcnRzLm5vdCA9IG5vdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQXV0aExvY2F0aW9uID0gdm9pZCAwO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkh0dHBBdXRoTG9jYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuSHR0cEF1dGhMb2NhdGlvbjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ib3N0QWRkcmVzc1R5cGUgPSB2b2lkIDA7XG52YXIgSG9zdEFkZHJlc3NUeXBlO1xuKGZ1bmN0aW9uIChIb3N0QWRkcmVzc1R5cGUpIHtcbiAgICBIb3N0QWRkcmVzc1R5cGVbXCJBQUFBXCJdID0gXCJBQUFBXCI7XG4gICAgSG9zdEFkZHJlc3NUeXBlW1wiQVwiXSA9IFwiQVwiO1xufSkoSG9zdEFkZHJlc3NUeXBlID0gZXhwb3J0cy5Ib3N0QWRkcmVzc1R5cGUgfHwgKGV4cG9ydHMuSG9zdEFkZHJlc3NUeXBlID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbmRwb2ludFVSTFNjaGVtZSA9IHZvaWQgMDtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFbmRwb2ludFVSTFNjaGVtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMS5FbmRwb2ludFVSTFNjaGVtZTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bbm9ueW1vdXNJZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Bd3NDcmVkZW50aWFsSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSWRlbnRpdHlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTG9naW5JZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9Ub2tlbklkZW50aXR5XCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcXVlc3RIYW5kbGVyUHJvdG9jb2wgPSB2b2lkIDA7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVxdWVzdEhhbmRsZXJQcm90b2NvbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMS5SZXF1ZXN0SGFuZGxlclByb3RvY29sOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hYm9ydFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hdXRoXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jsb2IvYmxvYi10eXBlc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jaGVja3N1bVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jbGllbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25uZWN0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NyZWRlbnRpYWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NyeXB0b1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW5jb2RlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2VuZHBvaW50XCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V2ZW50U3RyZWFtXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V4dGVuc2lvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pZGVudGl0eVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sb2dnZXJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYWdpbmF0aW9uXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb2ZpbGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVxdWVzdFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXNwb25zZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXRyeVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJkZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zaGFwZXNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2lnbmF0dXJlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0cmVhbVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90b2tlblwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2ZlclwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91cmlcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi93YWl0ZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VVUkwgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3R5cGVzXCIpO1xuY29uc3QgaXNJcEFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuL2lzSXBBZGRyZXNzXCIpO1xuY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgICBbdHlwZXNfMS5FbmRwb2ludFVSTFNjaGVtZS5IVFRQXTogODAsXG4gICAgW3R5cGVzXzEuRW5kcG9pbnRVUkxTY2hlbWUuSFRUUFNdOiA0NDMsXG59O1xuY29uc3QgcGFyc2VVUkwgPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCB3aGF0d2dVUkwgPSAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcImhvc3RuYW1lXCIgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBwb3J0LCBwcm90b2NvbCA9IFwiXCIsIHBhdGggPSBcIlwiLCBxdWVyeSA9IHt9IH0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3Byb3RvY29sfS8vJHtob3N0bmFtZX0ke3BvcnQgPyBgOiR7cG9ydH1gIDogXCJcIn0ke3BhdGh9YCk7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaCA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgICAgICAgICAgICAgICAgICAubWFwKChbaywgdl0pID0+IGAke2t9PSR7dn1gKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAoIXdoYXR3Z1VSTCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gcGFyc2UgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IGFzIGEgd2hhdHdnIFVSTC5gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVybFN0cmluZyA9IHdoYXR3Z1VSTC5ocmVmO1xuICAgIGNvbnN0IHsgaG9zdCwgaG9zdG5hbWUsIHBhdGhuYW1lLCBwcm90b2NvbCwgc2VhcmNoIH0gPSB3aGF0d2dVUkw7XG4gICAgaWYgKHNlYXJjaCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICAgIGlmICghT2JqZWN0LnZhbHVlcyh0eXBlc18xLkVuZHBvaW50VVJMU2NoZW1lKS5pbmNsdWRlcyhzY2hlbWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpc0lwID0gKDAsIGlzSXBBZGRyZXNzXzEuaXNJcEFkZHJlc3MpKGhvc3RuYW1lKTtcbiAgICBjb25zdCBpbnB1dENvbnRhaW5zRGVmYXVsdFBvcnQgPSB1cmxTdHJpbmcuaW5jbHVkZXMoYCR7aG9zdH06JHtERUZBVUxUX1BPUlRTW3NjaGVtZV19YCkgfHxcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5pbmNsdWRlcyhgJHtob3N0fToke0RFRkFVTFRfUE9SVFNbc2NoZW1lXX1gKSk7XG4gICAgY29uc3QgYXV0aG9yaXR5ID0gYCR7aG9zdH0ke2lucHV0Q29udGFpbnNEZWZhdWx0UG9ydCA/IGA6JHtERUZBVUxUX1BPUlRTW3NjaGVtZV19YCA6IGBgfWA7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1lLFxuICAgICAgICBhdXRob3JpdHksXG4gICAgICAgIHBhdGg6IHBhdGhuYW1lLFxuICAgICAgICBub3JtYWxpemVkUGF0aDogcGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpID8gcGF0aG5hbWUgOiBgJHtwYXRobmFtZX0vYCxcbiAgICAgICAgaXNJcCxcbiAgICB9O1xufTtcbmV4cG9ydHMucGFyc2VVUkwgPSBwYXJzZVVSTDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ0VxdWFscyA9IHZvaWQgMDtcbmNvbnN0IHN0cmluZ0VxdWFscyA9ICh2YWx1ZTEsIHZhbHVlMikgPT4gdmFsdWUxID09PSB2YWx1ZTI7XG5leHBvcnRzLnN0cmluZ0VxdWFscyA9IHN0cmluZ0VxdWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN1YnN0cmluZyA9IHZvaWQgMDtcbmNvbnN0IHN1YnN0cmluZyA9IChpbnB1dCwgc3RhcnQsIHN0b3AsIHJldmVyc2UpID0+IHtcbiAgICBpZiAoc3RhcnQgPj0gc3RvcCB8fCBpbnB1dC5sZW5ndGggPCBzdG9wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIXJldmVyc2UpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhzdGFydCwgc3RvcCk7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoaW5wdXQubGVuZ3RoIC0gc3RvcCwgaW5wdXQubGVuZ3RoIC0gc3RhcnQpO1xufTtcbmV4cG9ydHMuc3Vic3RyaW5nID0gc3Vic3RyaW5nO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXJpRW5jb2RlID0gdm9pZCAwO1xuY29uc3QgdXJpRW5jb2RlID0gKHZhbHVlKSA9PiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLnJlcGxhY2UoL1shKicoKV0vZywgKGMpID0+IGAlJHtjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9YCk7XG5leHBvcnRzLnVyaUVuY29kZSA9IHVyaUVuY29kZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF3cyA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5leHBvcnRzLmF3cyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2F3c1wiKSk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ib29sZWFuRXF1YWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dldEF0dHJcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNTZXRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNWYWxpZEhvc3RMYWJlbFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9ub3RcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcGFyc2VVUkxcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RyaW5nRXF1YWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N1YnN0cmluZ1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi91cmlFbmNvZGVcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVUZW1wbGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGxpYl8xID0gcmVxdWlyZShcIi4uL2xpYlwiKTtcbmNvbnN0IGV2YWx1YXRlVGVtcGxhdGUgPSAodGVtcGxhdGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBldmFsdWF0ZWRUZW1wbGF0ZUFyciA9IFtdO1xuICAgIGNvbnN0IHRlbXBsYXRlQ29udGV4dCA9IHtcbiAgICAgICAgLi4ub3B0aW9ucy5lbmRwb2ludFBhcmFtcyxcbiAgICAgICAgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsXG4gICAgfTtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgdGVtcGxhdGUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9wZW5pbmdCcmFjZUluZGV4ID0gdGVtcGxhdGUuaW5kZXhPZihcIntcIiwgY3VycmVudEluZGV4KTtcbiAgICAgICAgaWYgKG9wZW5pbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZS5zbGljZShjdXJyZW50SW5kZXgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGUuc2xpY2UoY3VycmVudEluZGV4LCBvcGVuaW5nQnJhY2VJbmRleCkpO1xuICAgICAgICBjb25zdCBjbG9zaW5nQnJhY2VJbmRleCA9IHRlbXBsYXRlLmluZGV4T2YoXCJ9XCIsIG9wZW5pbmdCcmFjZUluZGV4KTtcbiAgICAgICAgaWYgKGNsb3NpbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZXZhbHVhdGVkVGVtcGxhdGVBcnIucHVzaCh0ZW1wbGF0ZS5zbGljZShvcGVuaW5nQnJhY2VJbmRleCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlbXBsYXRlW29wZW5pbmdCcmFjZUluZGV4ICsgMV0gPT09IFwie1wiICYmIHRlbXBsYXRlW2Nsb3NpbmdCcmFjZUluZGV4ICsgMV0gPT09IFwifVwiKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRUZW1wbGF0ZUFyci5wdXNoKHRlbXBsYXRlLnNsaWNlKG9wZW5pbmdCcmFjZUluZGV4ICsgMSwgY2xvc2luZ0JyYWNlSW5kZXgpKTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGNsb3NpbmdCcmFjZUluZGV4ICsgMjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGVtcGxhdGUuc3Vic3RyaW5nKG9wZW5pbmdCcmFjZUluZGV4ICsgMSwgY2xvc2luZ0JyYWNlSW5kZXgpO1xuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZS5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IFtyZWZOYW1lLCBhdHRyTmFtZV0gPSBwYXJhbWV0ZXJOYW1lLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2goKDAsIGxpYl8xLmdldEF0dHIpKHRlbXBsYXRlQ29udGV4dFtyZWZOYW1lXSwgYXR0ck5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZFRlbXBsYXRlQXJyLnB1c2godGVtcGxhdGVDb250ZXh0W3BhcmFtZXRlck5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50SW5kZXggPSBjbG9zaW5nQnJhY2VJbmRleCArIDE7XG4gICAgfVxuICAgIHJldHVybiBldmFsdWF0ZWRUZW1wbGF0ZUFyci5qb2luKFwiXCIpO1xufTtcbmV4cG9ydHMuZXZhbHVhdGVUZW1wbGF0ZSA9IGV2YWx1YXRlVGVtcGxhdGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWZlcmVuY2VWYWx1ZSA9IHZvaWQgMDtcbmNvbnN0IGdldFJlZmVyZW5jZVZhbHVlID0gKHsgcmVmIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCByZWZlcmVuY2VSZWNvcmQgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMuZW5kcG9pbnRQYXJhbXMsXG4gICAgICAgIC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLFxuICAgIH07XG4gICAgcmV0dXJuIHJlZmVyZW5jZVJlY29yZFtyZWZdO1xufTtcbmV4cG9ydHMuZ2V0UmVmZXJlbmNlVmFsdWUgPSBnZXRSZWZlcmVuY2VWYWx1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlRXhwcmVzc2lvbiA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBjYWxsRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2NhbGxGdW5jdGlvblwiKTtcbmNvbnN0IGV2YWx1YXRlVGVtcGxhdGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlVGVtcGxhdGVcIik7XG5jb25zdCBnZXRSZWZlcmVuY2VWYWx1ZV8xID0gcmVxdWlyZShcIi4vZ2V0UmVmZXJlbmNlVmFsdWVcIik7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb24gPSAob2JqLCBrZXlOYW1lLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBldmFsdWF0ZVRlbXBsYXRlXzEuZXZhbHVhdGVUZW1wbGF0ZSkob2JqLCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAob2JqW1wiZm5cIl0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBjYWxsRnVuY3Rpb25fMS5jYWxsRnVuY3Rpb24pKG9iaiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9ialtcInJlZlwiXSkge1xuICAgICAgICByZXR1cm4gKDAsIGdldFJlZmVyZW5jZVZhbHVlXzEuZ2V0UmVmZXJlbmNlVmFsdWUpKG9iaiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYCcke2tleU5hbWV9JzogJHtTdHJpbmcob2JqKX0gaXMgbm90IGEgc3RyaW5nLCBmdW5jdGlvbiBvciByZWZlcmVuY2UuYCk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUV4cHJlc3Npb24gPSBldmFsdWF0ZUV4cHJlc3Npb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxsRnVuY3Rpb24gPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgbGliID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIi4uL2xpYlwiKSk7XG5jb25zdCBldmFsdWF0ZUV4cHJlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXhwcmVzc2lvblwiKTtcbmNvbnN0IGNhbGxGdW5jdGlvbiA9ICh7IGZuLCBhcmd2IH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBldmFsdWF0ZWRBcmdzID0gYXJndi5tYXAoKGFyZykgPT4gW1wiYm9vbGVhblwiLCBcIm51bWJlclwiXS5pbmNsdWRlcyh0eXBlb2YgYXJnKSA/IGFyZyA6ICgwLCBldmFsdWF0ZUV4cHJlc3Npb25fMS5ldmFsdWF0ZUV4cHJlc3Npb24pKGFyZywgXCJhcmdcIiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBmbi5zcGxpdChcIi5cIikucmVkdWNlKChhY2MsIGtleSkgPT4gYWNjW2tleV0sIGxpYikoLi4uZXZhbHVhdGVkQXJncyk7XG59O1xuZXhwb3J0cy5jYWxsRnVuY3Rpb24gPSBjYWxsRnVuY3Rpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiLi4vZGVidWdcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgY2FsbEZ1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9jYWxsRnVuY3Rpb25cIik7XG5jb25zdCBldmFsdWF0ZUNvbmRpdGlvbiA9ICh7IGFzc2lnbiwgLi4uZm5BcmdzIH0sIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmIChhc3NpZ24gJiYgYXNzaWduIGluIG9wdGlvbnMucmVmZXJlbmNlUmVjb3JkKSB7XG4gICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYCcke2Fzc2lnbn0nIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBSZWZlcmVuY2UgUmVjb3JkLmApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9ICgwLCBjYWxsRnVuY3Rpb25fMS5jYWxsRnVuY3Rpb24pKGZuQXJncywgb3B0aW9ucyk7XG4gICAgKF9iID0gKF9hID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWJ1ZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGRlYnVnXzEuZGVidWdJZCwgYGV2YWx1YXRlQ29uZGl0aW9uOiAkeygwLCBkZWJ1Z18xLnRvRGVidWdTdHJpbmcpKGZuQXJncyl9ID0gJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiB2YWx1ZSA9PT0gXCJcIiA/IHRydWUgOiAhIXZhbHVlLFxuICAgICAgICAuLi4oYXNzaWduICE9IG51bGwgJiYgeyB0b0Fzc2lnbjogeyBuYW1lOiBhc3NpZ24sIHZhbHVlIH0gfSksXG4gICAgfTtcbn07XG5leHBvcnRzLmV2YWx1YXRlQ29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4uL2RlYnVnXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25fMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlQ29uZGl0aW9uXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25zID0gKGNvbmRpdGlvbnMgPSBbXSwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgY29uZGl0aW9uc1JlZmVyZW5jZVJlY29yZCA9IHt9O1xuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByZXN1bHQsIHRvQXNzaWduIH0gPSAoMCwgZXZhbHVhdGVDb25kaXRpb25fMS5ldmFsdWF0ZUNvbmRpdGlvbikoY29uZGl0aW9uLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgcmVmZXJlbmNlUmVjb3JkOiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsXG4gICAgICAgICAgICAgICAgLi4uY29uZGl0aW9uc1JlZmVyZW5jZVJlY29yZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvQXNzaWduKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zUmVmZXJlbmNlUmVjb3JkW3RvQXNzaWduLm5hbWVdID0gdG9Bc3NpZ24udmFsdWU7XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZGVidWdfMS5kZWJ1Z0lkLCBgYXNzaWduOiAke3RvQXNzaWduLm5hbWV9IDo9ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykodG9Bc3NpZ24udmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3VsdDogdHJ1ZSwgcmVmZXJlbmNlUmVjb3JkOiBjb25kaXRpb25zUmVmZXJlbmNlUmVjb3JkIH07XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUNvbmRpdGlvbnMgPSBldmFsdWF0ZUNvbmRpdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludEhlYWRlcnMgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUV4cHJlc3Npb25cIik7XG5jb25zdCBnZXRFbmRwb2ludEhlYWRlcnMgPSAoaGVhZGVycywgb3B0aW9ucykgPT4gT2JqZWN0LmVudHJpZXMoaGVhZGVycykucmVkdWNlKChhY2MsIFtoZWFkZXJLZXksIGhlYWRlclZhbF0pID0+ICh7XG4gICAgLi4uYWNjLFxuICAgIFtoZWFkZXJLZXldOiBoZWFkZXJWYWwubWFwKChoZWFkZXJWYWxFbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRFeHByID0gKDAsIGV2YWx1YXRlRXhwcmVzc2lvbl8xLmV2YWx1YXRlRXhwcmVzc2lvbikoaGVhZGVyVmFsRW50cnksIFwiSGVhZGVyIHZhbHVlIGVudHJ5XCIsIG9wdGlvbnMpO1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3NlZEV4cHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYEhlYWRlciAnJHtoZWFkZXJLZXl9JyB2YWx1ZSAnJHtwcm9jZXNzZWRFeHByfScgaXMgbm90IGEgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZEV4cHI7XG4gICAgfSksXG59KSwge30pO1xuZXhwb3J0cy5nZXRFbmRwb2ludEhlYWRlcnMgPSBnZXRFbmRwb2ludEhlYWRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnR5ID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlVGVtcGxhdGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlVGVtcGxhdGVcIik7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50UHJvcGVydGllc1wiKTtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydHkgPSAocHJvcGVydHksIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5Lm1hcCgocHJvcGVydHlFbnRyeSkgPT4gKDAsIGV4cG9ydHMuZ2V0RW5kcG9pbnRQcm9wZXJ0eSkocHJvcGVydHlFbnRyeSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wZXJ0eSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV2YWx1YXRlVGVtcGxhdGVfMS5ldmFsdWF0ZVRlbXBsYXRlKShwcm9wZXJ0eSwgb3B0aW9ucyk7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFVuZXhwZWN0ZWQgZW5kcG9pbnQgcHJvcGVydHk6ICR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIGdldEVuZHBvaW50UHJvcGVydGllc18xLmdldEVuZHBvaW50UHJvcGVydGllcykocHJvcGVydHksIG9wdGlvbnMpO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuRW5kcG9pbnRFcnJvcihgVW5leHBlY3RlZCBlbmRwb2ludCBwcm9wZXJ0eSB0eXBlOiAke3R5cGVvZiBwcm9wZXJ0eX1gKTtcbiAgICB9XG59O1xuZXhwb3J0cy5nZXRFbmRwb2ludFByb3BlcnR5ID0gZ2V0RW5kcG9pbnRQcm9wZXJ0eTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50UHJvcGVydGllcyA9IHZvaWQgMDtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydHlfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50UHJvcGVydHlcIik7XG5jb25zdCBnZXRFbmRwb2ludFByb3BlcnRpZXMgPSAocHJvcGVydGllcywgb3B0aW9ucykgPT4gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykucmVkdWNlKChhY2MsIFtwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWxdKSA9PiAoe1xuICAgIC4uLmFjYyxcbiAgICBbcHJvcGVydHlLZXldOiAoMCwgZ2V0RW5kcG9pbnRQcm9wZXJ0eV8xLmdldEVuZHBvaW50UHJvcGVydHkpKHByb3BlcnR5VmFsLCBvcHRpb25zKSxcbn0pLCB7fSk7XG5leHBvcnRzLmdldEVuZHBvaW50UHJvcGVydGllcyA9IGdldEVuZHBvaW50UHJvcGVydGllcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVuZHBvaW50VXJsID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlRXhwcmVzc2lvbl8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVFeHByZXNzaW9uXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRVcmwgPSAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gKDAsIGV2YWx1YXRlRXhwcmVzc2lvbl8xLmV2YWx1YXRlRXhwcmVzc2lvbikoZW5kcG9pbnRVcmwsIFwiRW5kcG9pbnQgVVJMXCIsIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwoZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29uc3RydWN0IFVSTCB3aXRoICR7ZXhwcmVzc2lvbn1gLCBlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBFbmRwb2ludCBVUkwgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dHlwZW9mIGV4cHJlc3Npb259YCk7XG59O1xuZXhwb3J0cy5nZXRFbmRwb2ludFVybCA9IGdldEVuZHBvaW50VXJsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVFbmRwb2ludFJ1bGUgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4uL2RlYnVnXCIpO1xuY29uc3QgZXZhbHVhdGVDb25kaXRpb25zXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUNvbmRpdGlvbnNcIik7XG5jb25zdCBnZXRFbmRwb2ludEhlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50SGVhZGVyc1wiKTtcbmNvbnN0IGdldEVuZHBvaW50UHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vZ2V0RW5kcG9pbnRQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRVcmxfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50VXJsXCIpO1xuY29uc3QgZXZhbHVhdGVFbmRwb2ludFJ1bGUgPSAoZW5kcG9pbnRSdWxlLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IGNvbmRpdGlvbnMsIGVuZHBvaW50IH0gPSBlbmRwb2ludFJ1bGU7XG4gICAgY29uc3QgeyByZXN1bHQsIHJlZmVyZW5jZVJlY29yZCB9ID0gKDAsIGV2YWx1YXRlQ29uZGl0aW9uc18xLmV2YWx1YXRlQ29uZGl0aW9ucykoY29uZGl0aW9ucywgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbmRwb2ludFJ1bGVPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICByZWZlcmVuY2VSZWNvcmQ6IHsgLi4ub3B0aW9ucy5yZWZlcmVuY2VSZWNvcmQsIC4uLnJlZmVyZW5jZVJlY29yZCB9LFxuICAgIH07XG4gICAgY29uc3QgeyB1cmwsIHByb3BlcnRpZXMsIGhlYWRlcnMgfSA9IGVuZHBvaW50O1xuICAgIChfYiA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBkZWJ1Z18xLmRlYnVnSWQsIGBSZXNvbHZpbmcgZW5kcG9pbnQgZnJvbSB0ZW1wbGF0ZTogJHsoMCwgZGVidWdfMS50b0RlYnVnU3RyaW5nKShlbmRwb2ludCl9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKGhlYWRlcnMgIT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgIGhlYWRlcnM6ICgwLCBnZXRFbmRwb2ludEhlYWRlcnNfMS5nZXRFbmRwb2ludEhlYWRlcnMpKGhlYWRlcnMsIGVuZHBvaW50UnVsZU9wdGlvbnMpLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKHByb3BlcnRpZXMgIT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6ICgwLCBnZXRFbmRwb2ludFByb3BlcnRpZXNfMS5nZXRFbmRwb2ludFByb3BlcnRpZXMpKHByb3BlcnRpZXMsIGVuZHBvaW50UnVsZU9wdGlvbnMpLFxuICAgICAgICB9KSxcbiAgICAgICAgdXJsOiAoMCwgZ2V0RW5kcG9pbnRVcmxfMS5nZXRFbmRwb2ludFVybCkodXJsLCBlbmRwb2ludFJ1bGVPcHRpb25zKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZXZhbHVhdGVFbmRwb2ludFJ1bGUgPSBldmFsdWF0ZUVuZHBvaW50UnVsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlRXJyb3JSdWxlID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVDb25kaXRpb25zXCIpO1xuY29uc3QgZXZhbHVhdGVFeHByZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9ldmFsdWF0ZUV4cHJlc3Npb25cIik7XG5jb25zdCBldmFsdWF0ZUVycm9yUnVsZSA9IChlcnJvclJ1bGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IGNvbmRpdGlvbnMsIGVycm9yIH0gPSBlcnJvclJ1bGU7XG4gICAgY29uc3QgeyByZXN1bHQsIHJlZmVyZW5jZVJlY29yZCB9ID0gKDAsIGV2YWx1YXRlQ29uZGl0aW9uc18xLmV2YWx1YXRlQ29uZGl0aW9ucykoY29uZGl0aW9ucywgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKCgwLCBldmFsdWF0ZUV4cHJlc3Npb25fMS5ldmFsdWF0ZUV4cHJlc3Npb24pKGVycm9yLCBcIkVycm9yXCIsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlUmVjb3JkOiB7IC4uLm9wdGlvbnMucmVmZXJlbmNlUmVjb3JkLCAuLi5yZWZlcmVuY2VSZWNvcmQgfSxcbiAgICB9KSk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZUVycm9yUnVsZSA9IGV2YWx1YXRlRXJyb3JSdWxlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXZhbHVhdGVUcmVlUnVsZSA9IHZvaWQgMDtcbmNvbnN0IGV2YWx1YXRlQ29uZGl0aW9uc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVDb25kaXRpb25zXCIpO1xuY29uc3QgZXZhbHVhdGVSdWxlc18xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVSdWxlc1wiKTtcbmNvbnN0IGV2YWx1YXRlVHJlZVJ1bGUgPSAodHJlZVJ1bGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IGNvbmRpdGlvbnMsIHJ1bGVzIH0gPSB0cmVlUnVsZTtcbiAgICBjb25zdCB7IHJlc3VsdCwgcmVmZXJlbmNlUmVjb3JkIH0gPSAoMCwgZXZhbHVhdGVDb25kaXRpb25zXzEuZXZhbHVhdGVDb25kaXRpb25zKShjb25kaXRpb25zLCBvcHRpb25zKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoMCwgZXZhbHVhdGVSdWxlc18xLmV2YWx1YXRlUnVsZXMpKHJ1bGVzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHJlZmVyZW5jZVJlY29yZDogeyAuLi5vcHRpb25zLnJlZmVyZW5jZVJlY29yZCwgLi4ucmVmZXJlbmNlUmVjb3JkIH0sXG4gICAgfSk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZVRyZWVSdWxlID0gZXZhbHVhdGVUcmVlUnVsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV2YWx1YXRlUnVsZXMgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgZXZhbHVhdGVFbmRwb2ludFJ1bGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRW5kcG9pbnRSdWxlXCIpO1xuY29uc3QgZXZhbHVhdGVFcnJvclJ1bGVfMSA9IHJlcXVpcmUoXCIuL2V2YWx1YXRlRXJyb3JSdWxlXCIpO1xuY29uc3QgZXZhbHVhdGVUcmVlUnVsZV8xID0gcmVxdWlyZShcIi4vZXZhbHVhdGVUcmVlUnVsZVwiKTtcbmNvbnN0IGV2YWx1YXRlUnVsZXMgPSAocnVsZXMsIG9wdGlvbnMpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gXCJlbmRwb2ludFwiKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludE9yVW5kZWZpbmVkID0gKDAsIGV2YWx1YXRlRW5kcG9pbnRSdWxlXzEuZXZhbHVhdGVFbmRwb2ludFJ1bGUpKHJ1bGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50T3JVbmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnRPclVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChydWxlLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgKDAsIGV2YWx1YXRlRXJyb3JSdWxlXzEuZXZhbHVhdGVFcnJvclJ1bGUpKHJ1bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJ1bGUudHlwZSA9PT0gXCJ0cmVlXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50T3JVbmRlZmluZWQgPSAoMCwgZXZhbHVhdGVUcmVlUnVsZV8xLmV2YWx1YXRlVHJlZVJ1bGUpKHJ1bGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50T3JVbmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnRPclVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFVua25vd24gZW5kcG9pbnQgcnVsZTogJHtydWxlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyB0eXBlc18xLkVuZHBvaW50RXJyb3IoYFJ1bGVzIGV2YWx1YXRpb24gZmFpbGVkYCk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZVJ1bGVzID0gZXZhbHVhdGVSdWxlcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXZhbHVhdGVSdWxlc1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlRW5kcG9pbnQgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCByZXNvbHZlRW5kcG9pbnQgPSAocnVsZVNldE9iamVjdCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGNvbnN0IHsgZW5kcG9pbnRQYXJhbXMsIGxvZ2dlciB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IHBhcmFtZXRlcnMsIHJ1bGVzIH0gPSBydWxlU2V0T2JqZWN0O1xuICAgIChfYiA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBgJHtkZWJ1Z18xLmRlYnVnSWR9IEluaXRpYWwgRW5kcG9pbnRQYXJhbXM6ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykoZW5kcG9pbnRQYXJhbXMpfWApO1xuICAgIGNvbnN0IHBhcmFtc1dpdGhEZWZhdWx0ID0gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycylcbiAgICAgICAgLmZpbHRlcigoWywgdl0pID0+IHYuZGVmYXVsdCAhPSBudWxsKVxuICAgICAgICAubWFwKChbaywgdl0pID0+IFtrLCB2LmRlZmF1bHRdKTtcbiAgICBpZiAocGFyYW1zV2l0aERlZmF1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtwYXJhbUtleSwgcGFyYW1EZWZhdWx0VmFsdWVdIG9mIHBhcmFtc1dpdGhEZWZhdWx0KSB7XG4gICAgICAgICAgICBlbmRwb2ludFBhcmFtc1twYXJhbUtleV0gPSAoX2MgPSBlbmRwb2ludFBhcmFtc1twYXJhbUtleV0pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHBhcmFtRGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVpcmVkUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycylcbiAgICAgICAgLmZpbHRlcigoWywgdl0pID0+IHYucmVxdWlyZWQpXG4gICAgICAgIC5tYXAoKFtrXSkgPT4gayk7XG4gICAgZm9yIChjb25zdCByZXF1aXJlZFBhcmFtIG9mIHJlcXVpcmVkUGFyYW1zKSB7XG4gICAgICAgIGlmIChlbmRwb2ludFBhcmFtc1tyZXF1aXJlZFBhcmFtXSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5FbmRwb2ludEVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogJyR7cmVxdWlyZWRQYXJhbX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnQgPSAoMCwgdXRpbHNfMS5ldmFsdWF0ZVJ1bGVzKShydWxlcywgeyBlbmRwb2ludFBhcmFtcywgbG9nZ2VyLCByZWZlcmVuY2VSZWNvcmQ6IHt9IH0pO1xuICAgIGlmICgoX2QgPSBvcHRpb25zLmVuZHBvaW50UGFyYW1zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuRW5kcG9pbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGdpdmVuRW5kcG9pbnQgPSBuZXcgVVJMKG9wdGlvbnMuZW5kcG9pbnRQYXJhbXMuRW5kcG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgeyBwcm90b2NvbCwgcG9ydCB9ID0gZ2l2ZW5FbmRwb2ludDtcbiAgICAgICAgICAgIGVuZHBvaW50LnVybC5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgICAgICAgICAgZW5kcG9pbnQudXJsLnBvcnQgPSBwb3J0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKF9mID0gKF9lID0gb3B0aW9ucy5sb2dnZXIpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5kZWJ1ZykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNhbGwoX2UsIGAke2RlYnVnXzEuZGVidWdJZH0gUmVzb2x2ZWQgZW5kcG9pbnQ6ICR7KDAsIGRlYnVnXzEudG9EZWJ1Z1N0cmluZykoZW5kcG9pbnQpfWApO1xuICAgIHJldHVybiBlbmRwb2ludDtcbn07XG5leHBvcnRzLnJlc29sdmVFbmRwb2ludCA9IHJlc29sdmVFbmRwb2ludDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGliL2F3cy9wYXJ0aXRpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGliL2lzSXBBZGRyZXNzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc29sdmVFbmRwb2ludFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VQV9FU0NBUEVfQ0hBUiA9IGV4cG9ydHMuVUFfVkFMVUVfRVNDQVBFX1JFR0VYID0gZXhwb3J0cy5VQV9OQU1FX0VTQ0FQRV9SRUdFWCA9IGV4cG9ydHMuVUFfTkFNRV9TRVBBUkFUT1IgPSBleHBvcnRzLlNQQUNFID0gZXhwb3J0cy5YX0FNWl9VU0VSX0FHRU5UID0gZXhwb3J0cy5VU0VSX0FHRU5UID0gdm9pZCAwO1xuZXhwb3J0cy5VU0VSX0FHRU5UID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnRzLlhfQU1aX1VTRVJfQUdFTlQgPSBcIngtYW16LXVzZXItYWdlbnRcIjtcbmV4cG9ydHMuU1BBQ0UgPSBcIiBcIjtcbmV4cG9ydHMuVUFfTkFNRV9TRVBBUkFUT1IgPSBcIi9cIjtcbmV4cG9ydHMuVUFfTkFNRV9FU0NBUEVfUkVHRVggPSAvW15cXCFcXCRcXCVcXCZcXCdcXCpcXCtcXC1cXC5cXF5cXF9cXGBcXHxcXH5cXGRcXHddL2c7XG5leHBvcnRzLlVBX1ZBTFVFX0VTQ0FQRV9SRUdFWCA9IC9bXlxcIVxcJFxcJVxcJlxcJ1xcKlxcK1xcLVxcLlxcXlxcX1xcYFxcfFxcflxcZFxcd1xcI10vZztcbmV4cG9ydHMuVUFfRVNDQVBFX0NIQVIgPSBcIi1cIjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFBsdWdpbiA9IGV4cG9ydHMuZ2V0VXNlckFnZW50TWlkZGxld2FyZU9wdGlvbnMgPSBleHBvcnRzLnVzZXJBZ2VudE1pZGRsZXdhcmUgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2VuZHBvaW50c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzXCIpO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXNlckFnZW50TWlkZGxld2FyZSA9IChvcHRpb25zKSA9PiAobmV4dCwgY29udGV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXJncztcbiAgICBpZiAoIXByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpKVxuICAgICAgICByZXR1cm4gbmV4dChhcmdzKTtcbiAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlcXVlc3Q7XG4gICAgY29uc3QgdXNlckFnZW50ID0gKChfYSA9IGNvbnRleHQgPT09IG51bGwgfHwgY29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udGV4dC51c2VyQWdlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoZXNjYXBlVXNlckFnZW50KSkgfHwgW107XG4gICAgY29uc3QgZGVmYXVsdFVzZXJBZ2VudCA9IChhd2FpdCBvcHRpb25zLmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlcigpKS5tYXAoZXNjYXBlVXNlckFnZW50KTtcbiAgICBjb25zdCBjdXN0b21Vc2VyQWdlbnQgPSAoKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmN1c3RvbVVzZXJBZ2VudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm1hcChlc2NhcGVVc2VyQWdlbnQpKSB8fCBbXTtcbiAgICBjb25zdCBwcmVmaXggPSAoMCwgdXRpbF9lbmRwb2ludHNfMS5nZXRVc2VyQWdlbnRQcmVmaXgpKCk7XG4gICAgY29uc3Qgc2RrVXNlckFnZW50VmFsdWUgPSAocHJlZml4ID8gW3ByZWZpeF0gOiBbXSlcbiAgICAgICAgLmNvbmNhdChbLi4uZGVmYXVsdFVzZXJBZ2VudCwgLi4udXNlckFnZW50LCAuLi5jdXN0b21Vc2VyQWdlbnRdKVxuICAgICAgICAuam9pbihjb25zdGFudHNfMS5TUEFDRSk7XG4gICAgY29uc3Qgbm9ybWFsVUFWYWx1ZSA9IFtcbiAgICAgICAgLi4uZGVmYXVsdFVzZXJBZ2VudC5maWx0ZXIoKHNlY3Rpb24pID0+IHNlY3Rpb24uc3RhcnRzV2l0aChcImF3cy1zZGstXCIpKSxcbiAgICAgICAgLi4uY3VzdG9tVXNlckFnZW50LFxuICAgIF0uam9pbihjb25zdGFudHNfMS5TUEFDRSk7XG4gICAgaWYgKG9wdGlvbnMucnVudGltZSAhPT0gXCJicm93c2VyXCIpIHtcbiAgICAgICAgaWYgKG5vcm1hbFVBVmFsdWUpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbY29uc3RhbnRzXzEuWF9BTVpfVVNFUl9BR0VOVF0gPSBoZWFkZXJzW2NvbnN0YW50c18xLlhfQU1aX1VTRVJfQUdFTlRdXG4gICAgICAgICAgICAgICAgPyBgJHtoZWFkZXJzW2NvbnN0YW50c18xLlVTRVJfQUdFTlRdfSAke25vcm1hbFVBVmFsdWV9YFxuICAgICAgICAgICAgICAgIDogbm9ybWFsVUFWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzW2NvbnN0YW50c18xLlVTRVJfQUdFTlRdID0gc2RrVXNlckFnZW50VmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBoZWFkZXJzW2NvbnN0YW50c18xLlhfQU1aX1VTRVJfQUdFTlRdID0gc2RrVXNlckFnZW50VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICB9KTtcbn07XG5leHBvcnRzLnVzZXJBZ2VudE1pZGRsZXdhcmUgPSB1c2VyQWdlbnRNaWRkbGV3YXJlO1xuY29uc3QgZXNjYXBlVXNlckFnZW50ID0gKHVzZXJBZ2VudFBhaXIpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbmFtZSA9IHVzZXJBZ2VudFBhaXJbMF1cbiAgICAgICAgLnNwbGl0KGNvbnN0YW50c18xLlVBX05BTUVfU0VQQVJBVE9SKVxuICAgICAgICAubWFwKChwYXJ0KSA9PiBwYXJ0LnJlcGxhY2UoY29uc3RhbnRzXzEuVUFfTkFNRV9FU0NBUEVfUkVHRVgsIGNvbnN0YW50c18xLlVBX0VTQ0FQRV9DSEFSKSlcbiAgICAgICAgLmpvaW4oY29uc3RhbnRzXzEuVUFfTkFNRV9TRVBBUkFUT1IpO1xuICAgIGNvbnN0IHZlcnNpb24gPSAoX2EgPSB1c2VyQWdlbnRQYWlyWzFdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVwbGFjZShjb25zdGFudHNfMS5VQV9WQUxVRV9FU0NBUEVfUkVHRVgsIGNvbnN0YW50c18xLlVBX0VTQ0FQRV9DSEFSKTtcbiAgICBjb25zdCBwcmVmaXhTZXBhcmF0b3JJbmRleCA9IG5hbWUuaW5kZXhPZihjb25zdGFudHNfMS5VQV9OQU1FX1NFUEFSQVRPUik7XG4gICAgY29uc3QgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgcHJlZml4U2VwYXJhdG9ySW5kZXgpO1xuICAgIGxldCB1YU5hbWUgPSBuYW1lLnN1YnN0cmluZyhwcmVmaXhTZXBhcmF0b3JJbmRleCArIDEpO1xuICAgIGlmIChwcmVmaXggPT09IFwiYXBpXCIpIHtcbiAgICAgICAgdWFOYW1lID0gdWFOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBbcHJlZml4LCB1YU5hbWUsIHZlcnNpb25dXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKVxuICAgICAgICAucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7YWNjfS8ke2l0ZW19YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2FjY30jJHtpdGVtfWA7XG4gICAgICAgIH1cbiAgICB9LCBcIlwiKTtcbn07XG5leHBvcnRzLmdldFVzZXJBZ2VudE1pZGRsZXdhcmVPcHRpb25zID0ge1xuICAgIG5hbWU6IFwiZ2V0VXNlckFnZW50TWlkZGxld2FyZVwiLFxuICAgIHN0ZXA6IFwiYnVpbGRcIixcbiAgICBwcmlvcml0eTogXCJsb3dcIixcbiAgICB0YWdzOiBbXCJTRVRfVVNFUl9BR0VOVFwiLCBcIlVTRVJfQUdFTlRcIl0sXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuY29uc3QgZ2V0VXNlckFnZW50UGx1Z2luID0gKGNvbmZpZykgPT4gKHtcbiAgICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgICAgICBjbGllbnRTdGFjay5hZGQoKDAsIGV4cG9ydHMudXNlckFnZW50TWlkZGxld2FyZSkoY29uZmlnKSwgZXhwb3J0cy5nZXRVc2VyQWdlbnRNaWRkbGV3YXJlT3B0aW9ucyk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRQbHVnaW4gPSBnZXRVc2VyQWdlbnRQbHVnaW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb25zXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3VzZXItYWdlbnQtbWlkZGxld2FyZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBTZWxlY3RvclR5cGU6ICgpID0+IFNlbGVjdG9yVHlwZSxcbiAgYm9vbGVhblNlbGVjdG9yOiAoKSA9PiBib29sZWFuU2VsZWN0b3IsXG4gIG51bWJlclNlbGVjdG9yOiAoKSA9PiBudW1iZXJTZWxlY3RvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9ib29sZWFuU2VsZWN0b3IudHNcbnZhciBib29sZWFuU2VsZWN0b3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvYmosIGtleSwgdHlwZSkgPT4ge1xuICBpZiAoIShrZXkgaW4gb2JqKSlcbiAgICByZXR1cm4gdm9pZCAwO1xuICBpZiAob2JqW2tleV0gPT09IFwidHJ1ZVwiKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAob2JqW2tleV0gPT09IFwiZmFsc2VcIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGxvYWQgJHt0eXBlfSBcIiR7a2V5fVwiLiBFeHBlY3RlZCBcInRydWVcIiBvciBcImZhbHNlXCIsIGdvdCAke29ialtrZXldfS5gKTtcbn0sIFwiYm9vbGVhblNlbGVjdG9yXCIpO1xuXG4vLyBzcmMvbnVtYmVyU2VsZWN0b3IudHNcbnZhciBudW1iZXJTZWxlY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9iaiwga2V5LCB0eXBlKSA9PiB7XG4gIGlmICghKGtleSBpbiBvYmopKVxuICAgIHJldHVybiB2b2lkIDA7XG4gIGNvbnN0IG51bWJlclZhbHVlID0gcGFyc2VJbnQob2JqW2tleV0sIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihudW1iZXJWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3QgbG9hZCAke3R5cGV9ICcke2tleX0nLiBFeHBlY3RlZCBudW1iZXIsIGdvdCAnJHtvYmpba2V5XX0nLmApO1xuICB9XG4gIHJldHVybiBudW1iZXJWYWx1ZTtcbn0sIFwibnVtYmVyU2VsZWN0b3JcIik7XG5cbi8vIHNyYy90eXBlcy50c1xudmFyIFNlbGVjdG9yVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFNlbGVjdG9yVHlwZTIpID0+IHtcbiAgU2VsZWN0b3JUeXBlMltcIkVOVlwiXSA9IFwiZW52XCI7XG4gIFNlbGVjdG9yVHlwZTJbXCJDT05GSUdcIl0gPSBcInNoYXJlZCBjb25maWcgZW50cnlcIjtcbiAgcmV0dXJuIFNlbGVjdG9yVHlwZTI7XG59KShTZWxlY3RvclR5cGUgfHwge30pO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgYm9vbGVhblNlbGVjdG9yLFxuICBudW1iZXJTZWxlY3RvcixcbiAgU2VsZWN0b3JUeXBlXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgQ09ORklHX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlQ6ICgpID0+IENPTkZJR19VU0VfRFVBTFNUQUNLX0VORFBPSU5ULFxuICBDT05GSUdfVVNFX0ZJUFNfRU5EUE9JTlQ6ICgpID0+IENPTkZJR19VU0VfRklQU19FTkRQT0lOVCxcbiAgREVGQVVMVF9VU0VfRFVBTFNUQUNLX0VORFBPSU5UOiAoKSA9PiBERUZBVUxUX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlQsXG4gIERFRkFVTFRfVVNFX0ZJUFNfRU5EUE9JTlQ6ICgpID0+IERFRkFVTFRfVVNFX0ZJUFNfRU5EUE9JTlQsXG4gIEVOVl9VU0VfRFVBTFNUQUNLX0VORFBPSU5UOiAoKSA9PiBFTlZfVVNFX0RVQUxTVEFDS19FTkRQT0lOVCxcbiAgRU5WX1VTRV9GSVBTX0VORFBPSU5UOiAoKSA9PiBFTlZfVVNFX0ZJUFNfRU5EUE9JTlQsXG4gIE5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlM6ICgpID0+IE5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMsXG4gIE5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TOiAoKSA9PiBOT0RFX1JFR0lPTl9DT05GSUdfT1BUSU9OUyxcbiAgTk9ERV9VU0VfRFVBTFNUQUNLX0VORFBPSU5UX0NPTkZJR19PUFRJT05TOiAoKSA9PiBOT0RFX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlRfQ09ORklHX09QVElPTlMsXG4gIE5PREVfVVNFX0ZJUFNfRU5EUE9JTlRfQ09ORklHX09QVElPTlM6ICgpID0+IE5PREVfVVNFX0ZJUFNfRU5EUE9JTlRfQ09ORklHX09QVElPTlMsXG4gIFJFR0lPTl9FTlZfTkFNRTogKCkgPT4gUkVHSU9OX0VOVl9OQU1FLFxuICBSRUdJT05fSU5JX05BTUU6ICgpID0+IFJFR0lPTl9JTklfTkFNRSxcbiAgZ2V0UmVnaW9uSW5mbzogKCkgPT4gZ2V0UmVnaW9uSW5mbyxcbiAgcmVzb2x2ZUN1c3RvbUVuZHBvaW50c0NvbmZpZzogKCkgPT4gcmVzb2x2ZUN1c3RvbUVuZHBvaW50c0NvbmZpZyxcbiAgcmVzb2x2ZUVuZHBvaW50c0NvbmZpZzogKCkgPT4gcmVzb2x2ZUVuZHBvaW50c0NvbmZpZyxcbiAgcmVzb2x2ZVJlZ2lvbkNvbmZpZzogKCkgPT4gcmVzb2x2ZVJlZ2lvbkNvbmZpZ1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9lbmRwb2ludHNDb25maWcvTm9kZVVzZUR1YWxzdGFja0VuZHBvaW50Q29uZmlnT3B0aW9ucy50c1xudmFyIGltcG9ydF91dGlsX2NvbmZpZ19wcm92aWRlciA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtY29uZmlnLXByb3ZpZGVyXCIpO1xudmFyIEVOVl9VU0VfRFVBTFNUQUNLX0VORFBPSU5UID0gXCJBV1NfVVNFX0RVQUxTVEFDS19FTkRQT0lOVFwiO1xudmFyIENPTkZJR19VU0VfRFVBTFNUQUNLX0VORFBPSU5UID0gXCJ1c2VfZHVhbHN0YWNrX2VuZHBvaW50XCI7XG52YXIgREVGQVVMVF9VU0VfRFVBTFNUQUNLX0VORFBPSU5UID0gZmFsc2U7XG52YXIgTk9ERV9VU0VfRFVBTFNUQUNLX0VORFBPSU5UX0NPTkZJR19PUFRJT05TID0ge1xuICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+ICgwLCBpbXBvcnRfdXRpbF9jb25maWdfcHJvdmlkZXIuYm9vbGVhblNlbGVjdG9yKShlbnYsIEVOVl9VU0VfRFVBTFNUQUNLX0VORFBPSU5ULCBpbXBvcnRfdXRpbF9jb25maWdfcHJvdmlkZXIuU2VsZWN0b3JUeXBlLkVOViksXG4gIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+ICgwLCBpbXBvcnRfdXRpbF9jb25maWdfcHJvdmlkZXIuYm9vbGVhblNlbGVjdG9yKShwcm9maWxlLCBDT05GSUdfVVNFX0RVQUxTVEFDS19FTkRQT0lOVCwgaW1wb3J0X3V0aWxfY29uZmlnX3Byb3ZpZGVyLlNlbGVjdG9yVHlwZS5DT05GSUcpLFxuICBkZWZhdWx0OiBmYWxzZVxufTtcblxuLy8gc3JjL2VuZHBvaW50c0NvbmZpZy9Ob2RlVXNlRmlwc0VuZHBvaW50Q29uZmlnT3B0aW9ucy50c1xuXG52YXIgRU5WX1VTRV9GSVBTX0VORFBPSU5UID0gXCJBV1NfVVNFX0ZJUFNfRU5EUE9JTlRcIjtcbnZhciBDT05GSUdfVVNFX0ZJUFNfRU5EUE9JTlQgPSBcInVzZV9maXBzX2VuZHBvaW50XCI7XG52YXIgREVGQVVMVF9VU0VfRklQU19FTkRQT0lOVCA9IGZhbHNlO1xudmFyIE5PREVfVVNFX0ZJUFNfRU5EUE9JTlRfQ09ORklHX09QVElPTlMgPSB7XG4gIGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvcjogKGVudikgPT4gKDAsIGltcG9ydF91dGlsX2NvbmZpZ19wcm92aWRlci5ib29sZWFuU2VsZWN0b3IpKGVudiwgRU5WX1VTRV9GSVBTX0VORFBPSU5ULCBpbXBvcnRfdXRpbF9jb25maWdfcHJvdmlkZXIuU2VsZWN0b3JUeXBlLkVOViksXG4gIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+ICgwLCBpbXBvcnRfdXRpbF9jb25maWdfcHJvdmlkZXIuYm9vbGVhblNlbGVjdG9yKShwcm9maWxlLCBDT05GSUdfVVNFX0ZJUFNfRU5EUE9JTlQsIGltcG9ydF91dGlsX2NvbmZpZ19wcm92aWRlci5TZWxlY3RvclR5cGUuQ09ORklHKSxcbiAgZGVmYXVsdDogZmFsc2Vcbn07XG5cbi8vIHNyYy9lbmRwb2ludHNDb25maWcvcmVzb2x2ZUN1c3RvbUVuZHBvaW50c0NvbmZpZy50c1xudmFyIGltcG9ydF91dGlsX21pZGRsZXdhcmUgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmVcIik7XG52YXIgcmVzb2x2ZUN1c3RvbUVuZHBvaW50c0NvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0KSA9PiB7XG4gIGNvbnN0IHsgZW5kcG9pbnQsIHVybFBhcnNlciB9ID0gaW5wdXQ7XG4gIHJldHVybiB7XG4gICAgLi4uaW5wdXQsXG4gICAgdGxzOiBpbnB1dC50bHMgPz8gdHJ1ZSxcbiAgICBlbmRwb2ludDogKDAsIGltcG9ydF91dGlsX21pZGRsZXdhcmUubm9ybWFsaXplUHJvdmlkZXIpKHR5cGVvZiBlbmRwb2ludCA9PT0gXCJzdHJpbmdcIiA/IHVybFBhcnNlcihlbmRwb2ludCkgOiBlbmRwb2ludCksXG4gICAgaXNDdXN0b21FbmRwb2ludDogdHJ1ZSxcbiAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogKDAsIGltcG9ydF91dGlsX21pZGRsZXdhcmUubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnVzZUR1YWxzdGFja0VuZHBvaW50ID8/IGZhbHNlKVxuICB9O1xufSwgXCJyZXNvbHZlQ3VzdG9tRW5kcG9pbnRzQ29uZmlnXCIpO1xuXG4vLyBzcmMvZW5kcG9pbnRzQ29uZmlnL3Jlc29sdmVFbmRwb2ludHNDb25maWcudHNcblxuXG4vLyBzcmMvZW5kcG9pbnRzQ29uZmlnL3V0aWxzL2dldEVuZHBvaW50RnJvbVJlZ2lvbi50c1xudmFyIGdldEVuZHBvaW50RnJvbVJlZ2lvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGlucHV0KSA9PiB7XG4gIGNvbnN0IHsgdGxzID0gdHJ1ZSB9ID0gaW5wdXQ7XG4gIGNvbnN0IHJlZ2lvbiA9IGF3YWl0IGlucHV0LnJlZ2lvbigpO1xuICBjb25zdCBkbnNIb3N0UmVnZXggPSBuZXcgUmVnRXhwKC9eKFthLXpBLVowLTldfFthLXpBLVowLTldW2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pJC8pO1xuICBpZiAoIWRuc0hvc3RSZWdleC50ZXN0KHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJlZ2lvbiBpbiBjbGllbnQgY29uZmlnXCIpO1xuICB9XG4gIGNvbnN0IHVzZUR1YWxzdGFja0VuZHBvaW50ID0gYXdhaXQgaW5wdXQudXNlRHVhbHN0YWNrRW5kcG9pbnQoKTtcbiAgY29uc3QgdXNlRmlwc0VuZHBvaW50ID0gYXdhaXQgaW5wdXQudXNlRmlwc0VuZHBvaW50KCk7XG4gIGNvbnN0IHsgaG9zdG5hbWUgfSA9IGF3YWl0IGlucHV0LnJlZ2lvbkluZm9Qcm92aWRlcihyZWdpb24sIHsgdXNlRHVhbHN0YWNrRW5kcG9pbnQsIHVzZUZpcHNFbmRwb2ludCB9KSA/PyB7fTtcbiAgaWYgKCFob3N0bmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZXNvbHZlIGhvc3RuYW1lIGZyb20gY2xpZW50IGNvbmZpZ1wiKTtcbiAgfVxuICByZXR1cm4gaW5wdXQudXJsUGFyc2VyKGAke3RscyA/IFwiaHR0cHM6XCIgOiBcImh0dHA6XCJ9Ly8ke2hvc3RuYW1lfWApO1xufSwgXCJnZXRFbmRwb2ludEZyb21SZWdpb25cIik7XG5cbi8vIHNyYy9lbmRwb2ludHNDb25maWcvcmVzb2x2ZUVuZHBvaW50c0NvbmZpZy50c1xudmFyIHJlc29sdmVFbmRwb2ludHNDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbnB1dCkgPT4ge1xuICBjb25zdCB1c2VEdWFsc3RhY2tFbmRwb2ludCA9ICgwLCBpbXBvcnRfdXRpbF9taWRkbGV3YXJlLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyBmYWxzZSk7XG4gIGNvbnN0IHsgZW5kcG9pbnQsIHVzZUZpcHNFbmRwb2ludCwgdXJsUGFyc2VyIH0gPSBpbnB1dDtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbnB1dCxcbiAgICB0bHM6IGlucHV0LnRscyA/PyB0cnVlLFxuICAgIGVuZHBvaW50OiBlbmRwb2ludCA/ICgwLCBpbXBvcnRfdXRpbF9taWRkbGV3YXJlLm5vcm1hbGl6ZVByb3ZpZGVyKSh0eXBlb2YgZW5kcG9pbnQgPT09IFwic3RyaW5nXCIgPyB1cmxQYXJzZXIoZW5kcG9pbnQpIDogZW5kcG9pbnQpIDogKCkgPT4gZ2V0RW5kcG9pbnRGcm9tUmVnaW9uKHsgLi4uaW5wdXQsIHVzZUR1YWxzdGFja0VuZHBvaW50LCB1c2VGaXBzRW5kcG9pbnQgfSksXG4gICAgaXNDdXN0b21FbmRwb2ludDogISFlbmRwb2ludCxcbiAgICB1c2VEdWFsc3RhY2tFbmRwb2ludFxuICB9O1xufSwgXCJyZXNvbHZlRW5kcG9pbnRzQ29uZmlnXCIpO1xuXG4vLyBzcmMvcmVnaW9uQ29uZmlnL2NvbmZpZy50c1xudmFyIFJFR0lPTl9FTlZfTkFNRSA9IFwiQVdTX1JFR0lPTlwiO1xudmFyIFJFR0lPTl9JTklfTkFNRSA9IFwicmVnaW9uXCI7XG52YXIgTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMgPSB7XG4gIGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvcjogKGVudikgPT4gZW52W1JFR0lPTl9FTlZfTkFNRV0sXG4gIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHByb2ZpbGVbUkVHSU9OX0lOSV9OQU1FXSxcbiAgZGVmYXVsdDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlJlZ2lvbiBpcyBtaXNzaW5nXCIpO1xuICB9XG59O1xudmFyIE5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMgPSB7XG4gIHByZWZlcnJlZEZpbGU6IFwiY3JlZGVudGlhbHNcIlxufTtcblxuLy8gc3JjL3JlZ2lvbkNvbmZpZy9pc0ZpcHNSZWdpb24udHNcbnZhciBpc0ZpcHNSZWdpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZWdpb24pID0+IHR5cGVvZiByZWdpb24gPT09IFwic3RyaW5nXCIgJiYgKHJlZ2lvbi5zdGFydHNXaXRoKFwiZmlwcy1cIikgfHwgcmVnaW9uLmVuZHNXaXRoKFwiLWZpcHNcIikpLCBcImlzRmlwc1JlZ2lvblwiKTtcblxuLy8gc3JjL3JlZ2lvbkNvbmZpZy9nZXRSZWFsUmVnaW9uLnRzXG52YXIgZ2V0UmVhbFJlZ2lvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlZ2lvbikgPT4gaXNGaXBzUmVnaW9uKHJlZ2lvbikgPyBbXCJmaXBzLWF3cy1nbG9iYWxcIiwgXCJhd3MtZmlwc1wiXS5pbmNsdWRlcyhyZWdpb24pID8gXCJ1cy1lYXN0LTFcIiA6IHJlZ2lvbi5yZXBsYWNlKC9maXBzLShka3ItfHByb2QtKT98LWZpcHMvLCBcIlwiKSA6IHJlZ2lvbiwgXCJnZXRSZWFsUmVnaW9uXCIpO1xuXG4vLyBzcmMvcmVnaW9uQ29uZmlnL3Jlc29sdmVSZWdpb25Db25maWcudHNcbnZhciByZXNvbHZlUmVnaW9uQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQpID0+IHtcbiAgY29uc3QgeyByZWdpb24sIHVzZUZpcHNFbmRwb2ludCB9ID0gaW5wdXQ7XG4gIGlmICghcmVnaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnaW9uIGlzIG1pc3NpbmdcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5pbnB1dCxcbiAgICByZWdpb246IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcmVnaW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBnZXRSZWFsUmVnaW9uKHJlZ2lvbik7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm92aWRlZFJlZ2lvbiA9IGF3YWl0IHJlZ2lvbigpO1xuICAgICAgcmV0dXJuIGdldFJlYWxSZWdpb24ocHJvdmlkZWRSZWdpb24pO1xuICAgIH0sXG4gICAgdXNlRmlwc0VuZHBvaW50OiBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlZFJlZ2lvbiA9IHR5cGVvZiByZWdpb24gPT09IFwic3RyaW5nXCIgPyByZWdpb24gOiBhd2FpdCByZWdpb24oKTtcbiAgICAgIGlmIChpc0ZpcHNSZWdpb24ocHJvdmlkZWRSZWdpb24pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB1c2VGaXBzRW5kcG9pbnQgIT09IFwiZnVuY3Rpb25cIiA/IFByb21pc2UucmVzb2x2ZSghIXVzZUZpcHNFbmRwb2ludCkgOiB1c2VGaXBzRW5kcG9pbnQoKTtcbiAgICB9XG4gIH07XG59LCBcInJlc29sdmVSZWdpb25Db25maWdcIik7XG5cbi8vIHNyYy9yZWdpb25JbmZvL2dldEhvc3RuYW1lRnJvbVZhcmlhbnRzLnRzXG52YXIgZ2V0SG9zdG5hbWVGcm9tVmFyaWFudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YXJpYW50cyA9IFtdLCB7IHVzZUZpcHNFbmRwb2ludCwgdXNlRHVhbHN0YWNrRW5kcG9pbnQgfSkgPT4ge1xuICB2YXIgX2E7XG4gIHJldHVybiAoX2EgPSB2YXJpYW50cy5maW5kKFxuICAgICh7IHRhZ3MgfSkgPT4gdXNlRmlwc0VuZHBvaW50ID09PSB0YWdzLmluY2x1ZGVzKFwiZmlwc1wiKSAmJiB1c2VEdWFsc3RhY2tFbmRwb2ludCA9PT0gdGFncy5pbmNsdWRlcyhcImR1YWxzdGFja1wiKVxuICApKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaG9zdG5hbWU7XG59LCBcImdldEhvc3RuYW1lRnJvbVZhcmlhbnRzXCIpO1xuXG4vLyBzcmMvcmVnaW9uSW5mby9nZXRSZXNvbHZlZEhvc3RuYW1lLnRzXG52YXIgZ2V0UmVzb2x2ZWRIb3N0bmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlc29sdmVkUmVnaW9uLCB7IHJlZ2lvbkhvc3RuYW1lLCBwYXJ0aXRpb25Ib3N0bmFtZSB9KSA9PiByZWdpb25Ib3N0bmFtZSA/IHJlZ2lvbkhvc3RuYW1lIDogcGFydGl0aW9uSG9zdG5hbWUgPyBwYXJ0aXRpb25Ib3N0bmFtZS5yZXBsYWNlKFwie3JlZ2lvbn1cIiwgcmVzb2x2ZWRSZWdpb24pIDogdm9pZCAwLCBcImdldFJlc29sdmVkSG9zdG5hbWVcIik7XG5cbi8vIHNyYy9yZWdpb25JbmZvL2dldFJlc29sdmVkUGFydGl0aW9uLnRzXG52YXIgZ2V0UmVzb2x2ZWRQYXJ0aXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZWdpb24sIHsgcGFydGl0aW9uSGFzaCB9KSA9PiBPYmplY3Qua2V5cyhwYXJ0aXRpb25IYXNoIHx8IHt9KS5maW5kKChrZXkpID0+IHBhcnRpdGlvbkhhc2hba2V5XS5yZWdpb25zLmluY2x1ZGVzKHJlZ2lvbikpID8/IFwiYXdzXCIsIFwiZ2V0UmVzb2x2ZWRQYXJ0aXRpb25cIik7XG5cbi8vIHNyYy9yZWdpb25JbmZvL2dldFJlc29sdmVkU2lnbmluZ1JlZ2lvbi50c1xudmFyIGdldFJlc29sdmVkU2lnbmluZ1JlZ2lvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGhvc3RuYW1lLCB7IHNpZ25pbmdSZWdpb24sIHJlZ2lvblJlZ2V4LCB1c2VGaXBzRW5kcG9pbnQgfSkgPT4ge1xuICBpZiAoc2lnbmluZ1JlZ2lvbikge1xuICAgIHJldHVybiBzaWduaW5nUmVnaW9uO1xuICB9IGVsc2UgaWYgKHVzZUZpcHNFbmRwb2ludCkge1xuICAgIGNvbnN0IHJlZ2lvblJlZ2V4SnMgPSByZWdpb25SZWdleC5yZXBsYWNlKFwiXFxcXFxcXFxcIiwgXCJcXFxcXCIpLnJlcGxhY2UoL15cXF4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCQkL2csIFwiXFxcXC5cIik7XG4gICAgY29uc3QgcmVnaW9uUmVnZXhtYXRjaEFycmF5ID0gaG9zdG5hbWUubWF0Y2gocmVnaW9uUmVnZXhKcyk7XG4gICAgaWYgKHJlZ2lvblJlZ2V4bWF0Y2hBcnJheSkge1xuICAgICAgcmV0dXJuIHJlZ2lvblJlZ2V4bWF0Y2hBcnJheVswXS5zbGljZSgxLCAtMSk7XG4gICAgfVxuICB9XG59LCBcImdldFJlc29sdmVkU2lnbmluZ1JlZ2lvblwiKTtcblxuLy8gc3JjL3JlZ2lvbkluZm8vZ2V0UmVnaW9uSW5mby50c1xudmFyIGdldFJlZ2lvbkluZm8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZWdpb24sIHtcbiAgdXNlRmlwc0VuZHBvaW50ID0gZmFsc2UsXG4gIHVzZUR1YWxzdGFja0VuZHBvaW50ID0gZmFsc2UsXG4gIHNpZ25pbmdTZXJ2aWNlLFxuICByZWdpb25IYXNoLFxuICBwYXJ0aXRpb25IYXNoXG59KSA9PiB7XG4gIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gIGNvbnN0IHBhcnRpdGlvbiA9IGdldFJlc29sdmVkUGFydGl0aW9uKHJlZ2lvbiwgeyBwYXJ0aXRpb25IYXNoIH0pO1xuICBjb25zdCByZXNvbHZlZFJlZ2lvbiA9IHJlZ2lvbiBpbiByZWdpb25IYXNoID8gcmVnaW9uIDogKChfYSA9IHBhcnRpdGlvbkhhc2hbcGFydGl0aW9uXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmVuZHBvaW50KSA/PyByZWdpb247XG4gIGNvbnN0IGhvc3RuYW1lT3B0aW9ucyA9IHsgdXNlRmlwc0VuZHBvaW50LCB1c2VEdWFsc3RhY2tFbmRwb2ludCB9O1xuICBjb25zdCByZWdpb25Ib3N0bmFtZSA9IGdldEhvc3RuYW1lRnJvbVZhcmlhbnRzKChfYiA9IHJlZ2lvbkhhc2hbcmVzb2x2ZWRSZWdpb25dKSA9PSBudWxsID8gdm9pZCAwIDogX2IudmFyaWFudHMsIGhvc3RuYW1lT3B0aW9ucyk7XG4gIGNvbnN0IHBhcnRpdGlvbkhvc3RuYW1lID0gZ2V0SG9zdG5hbWVGcm9tVmFyaWFudHMoKF9jID0gcGFydGl0aW9uSGFzaFtwYXJ0aXRpb25dKSA9PSBudWxsID8gdm9pZCAwIDogX2MudmFyaWFudHMsIGhvc3RuYW1lT3B0aW9ucyk7XG4gIGNvbnN0IGhvc3RuYW1lID0gZ2V0UmVzb2x2ZWRIb3N0bmFtZShyZXNvbHZlZFJlZ2lvbiwgeyByZWdpb25Ib3N0bmFtZSwgcGFydGl0aW9uSG9zdG5hbWUgfSk7XG4gIGlmIChob3N0bmFtZSA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFbmRwb2ludCByZXNvbHV0aW9uIGZhaWxlZCBmb3I6ICR7eyByZXNvbHZlZFJlZ2lvbiwgdXNlRmlwc0VuZHBvaW50LCB1c2VEdWFsc3RhY2tFbmRwb2ludCB9fWApO1xuICB9XG4gIGNvbnN0IHNpZ25pbmdSZWdpb24gPSBnZXRSZXNvbHZlZFNpZ25pbmdSZWdpb24oaG9zdG5hbWUsIHtcbiAgICBzaWduaW5nUmVnaW9uOiAoX2QgPSByZWdpb25IYXNoW3Jlc29sdmVkUmVnaW9uXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLnNpZ25pbmdSZWdpb24sXG4gICAgcmVnaW9uUmVnZXg6IHBhcnRpdGlvbkhhc2hbcGFydGl0aW9uXS5yZWdpb25SZWdleCxcbiAgICB1c2VGaXBzRW5kcG9pbnRcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcGFydGl0aW9uLFxuICAgIHNpZ25pbmdTZXJ2aWNlLFxuICAgIGhvc3RuYW1lLFxuICAgIC4uLnNpZ25pbmdSZWdpb24gJiYgeyBzaWduaW5nUmVnaW9uIH0sXG4gICAgLi4uKChfZSA9IHJlZ2lvbkhhc2hbcmVzb2x2ZWRSZWdpb25dKSA9PSBudWxsID8gdm9pZCAwIDogX2Uuc2lnbmluZ1NlcnZpY2UpICYmIHtcbiAgICAgIHNpZ25pbmdTZXJ2aWNlOiByZWdpb25IYXNoW3Jlc29sdmVkUmVnaW9uXS5zaWduaW5nU2VydmljZVxuICAgIH1cbiAgfTtcbn0sIFwiZ2V0UmVnaW9uSW5mb1wiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVOVl9VU0VfRFVBTFNUQUNLX0VORFBPSU5ULFxuICBDT05GSUdfVVNFX0RVQUxTVEFDS19FTkRQT0lOVCxcbiAgREVGQVVMVF9VU0VfRFVBTFNUQUNLX0VORFBPSU5ULFxuICBOT0RFX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlRfQ09ORklHX09QVElPTlMsXG4gIEVOVl9VU0VfRklQU19FTkRQT0lOVCxcbiAgQ09ORklHX1VTRV9GSVBTX0VORFBPSU5ULFxuICBERUZBVUxUX1VTRV9GSVBTX0VORFBPSU5ULFxuICBOT0RFX1VTRV9GSVBTX0VORFBPSU5UX0NPTkZJR19PUFRJT05TLFxuICByZXNvbHZlQ3VzdG9tRW5kcG9pbnRzQ29uZmlnLFxuICByZXNvbHZlRW5kcG9pbnRzQ29uZmlnLFxuICBSRUdJT05fRU5WX05BTUUsXG4gIFJFR0lPTl9JTklfTkFNRSxcbiAgTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMsXG4gIE5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMsXG4gIHJlc29sdmVSZWdpb25Db25maWcsXG4gIGdldFJlZ2lvbkluZm9cbn0pO1xuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlRXZlbnRTdHJlYW1TZXJkZUNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHJlc29sdmVFdmVudFN0cmVhbVNlcmRlQ29uZmlnID0gKGlucHV0KSA9PiAoe1xuICAgIC4uLmlucHV0LFxuICAgIGV2ZW50U3RyZWFtTWFyc2hhbGxlcjogaW5wdXQuZXZlbnRTdHJlYW1TZXJkZVByb3ZpZGVyKGlucHV0KSxcbn0pO1xuZXhwb3J0cy5yZXNvbHZlRXZlbnRTdHJlYW1TZXJkZUNvbmZpZyA9IHJlc29sdmVFdmVudFN0cmVhbVNlcmRlQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9FdmVudFN0cmVhbVNlcmRlQ29uZmlnXCIpLCBleHBvcnRzKTtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlOiAoKSA9PiBjb250ZW50TGVuZ3RoTWlkZGxld2FyZSxcbiAgY29udGVudExlbmd0aE1pZGRsZXdhcmVPcHRpb25zOiAoKSA9PiBjb250ZW50TGVuZ3RoTWlkZGxld2FyZU9wdGlvbnMsXG4gIGdldENvbnRlbnRMZW5ndGhQbHVnaW46ICgpID0+IGdldENvbnRlbnRMZW5ndGhQbHVnaW5cbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9wcm90b2NvbF9odHRwID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvdG9jb2wtaHR0cFwiKTtcbnZhciBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5mdW5jdGlvbiBjb250ZW50TGVuZ3RoTWlkZGxld2FyZShib2R5TGVuZ3RoQ2hlY2tlcikge1xuICByZXR1cm4gKG5leHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGFyZ3MucmVxdWVzdDtcbiAgICBpZiAoaW1wb3J0X3Byb3RvY29sX2h0dHAuSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgY29uc3QgeyBib2R5LCBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICAgICAgaWYgKGJvZHkgJiYgT2JqZWN0LmtleXMoaGVhZGVycykubWFwKChzdHIpID0+IHN0ci50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIX0hFQURFUikgPT09IC0xKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbGVuZ3RoID0gYm9keUxlbmd0aENoZWNrZXIoYm9keSk7XG4gICAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0ge1xuICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgW0NPTlRFTlRfTEVOR1RIX0hFQURFUl06IFN0cmluZyhsZW5ndGgpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dCh7XG4gICAgICAuLi5hcmdzLFxuICAgICAgcmVxdWVzdFxuICAgIH0pO1xuICB9O1xufVxuX19uYW1lKGNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlLCBcImNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlXCIpO1xudmFyIGNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgc3RlcDogXCJidWlsZFwiLFxuICB0YWdzOiBbXCJTRVRfQ09OVEVOVF9MRU5HVEhcIiwgXCJDT05URU5UX0xFTkdUSFwiXSxcbiAgbmFtZTogXCJjb250ZW50TGVuZ3RoTWlkZGxld2FyZVwiLFxuICBvdmVycmlkZTogdHJ1ZVxufTtcbnZhciBnZXRDb250ZW50TGVuZ3RoUGx1Z2luID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gKHtcbiAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICBjbGllbnRTdGFjay5hZGQoY29udGVudExlbmd0aE1pZGRsZXdhcmUob3B0aW9ucy5ib2R5TGVuZ3RoQ2hlY2tlciksIGNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH1cbn0pLCBcImdldENvbnRlbnRMZW5ndGhQbHVnaW5cIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBjb250ZW50TGVuZ3RoTWlkZGxld2FyZSxcbiAgY29udGVudExlbmd0aE1pZGRsZXdhcmVPcHRpb25zLFxuICBnZXRDb250ZW50TGVuZ3RoUGx1Z2luXG59KTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0SG9tZURpciA9IHZvaWQgMDtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGhvbWVEaXJDYWNoZSA9IHt9O1xuY29uc3QgZ2V0SG9tZURpckNhY2hlS2V5ID0gKCkgPT4ge1xuICAgIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZ2V0ZXVpZCkge1xuICAgICAgICByZXR1cm4gYCR7cHJvY2Vzcy5nZXRldWlkKCl9YDtcbiAgICB9XG4gICAgcmV0dXJuIFwiREVGQVVMVFwiO1xufTtcbmNvbnN0IGdldEhvbWVEaXIgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBIT01FLCBVU0VSUFJPRklMRSwgSE9NRVBBVEgsIEhPTUVEUklWRSA9IGBDOiR7cGF0aF8xLnNlcH1gIH0gPSBwcm9jZXNzLmVudjtcbiAgICBpZiAoSE9NRSlcbiAgICAgICAgcmV0dXJuIEhPTUU7XG4gICAgaWYgKFVTRVJQUk9GSUxFKVxuICAgICAgICByZXR1cm4gVVNFUlBST0ZJTEU7XG4gICAgaWYgKEhPTUVQQVRIKVxuICAgICAgICByZXR1cm4gYCR7SE9NRURSSVZFfSR7SE9NRVBBVEh9YDtcbiAgICBjb25zdCBob21lRGlyQ2FjaGVLZXkgPSBnZXRIb21lRGlyQ2FjaGVLZXkoKTtcbiAgICBpZiAoIWhvbWVEaXJDYWNoZVtob21lRGlyQ2FjaGVLZXldKVxuICAgICAgICBob21lRGlyQ2FjaGVbaG9tZURpckNhY2hlS2V5XSA9ICgwLCBvc18xLmhvbWVkaXIpKCk7XG4gICAgcmV0dXJuIGhvbWVEaXJDYWNoZVtob21lRGlyQ2FjaGVLZXldO1xufTtcbmV4cG9ydHMuZ2V0SG9tZURpciA9IGdldEhvbWVEaXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTU09Ub2tlbkZpbGVwYXRoID0gdm9pZCAwO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnZXRIb21lRGlyXzEgPSByZXF1aXJlKFwiLi9nZXRIb21lRGlyXCIpO1xuY29uc3QgZ2V0U1NPVG9rZW5GaWxlcGF0aCA9IChpZCkgPT4ge1xuICAgIGNvbnN0IGhhc2hlciA9ICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKShcInNoYTFcIik7XG4gICAgY29uc3QgY2FjaGVOYW1lID0gaGFzaGVyLnVwZGF0ZShpZCkuZGlnZXN0KFwiaGV4XCIpO1xuICAgIHJldHVybiAoMCwgcGF0aF8xLmpvaW4pKCgwLCBnZXRIb21lRGlyXzEuZ2V0SG9tZURpcikoKSwgXCIuYXdzXCIsIFwic3NvXCIsIFwiY2FjaGVcIiwgYCR7Y2FjaGVOYW1lfS5qc29uYCk7XG59O1xuZXhwb3J0cy5nZXRTU09Ub2tlbkZpbGVwYXRoID0gZ2V0U1NPVG9rZW5GaWxlcGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNTT1Rva2VuRnJvbUZpbGUgPSB2b2lkIDA7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgZ2V0U1NPVG9rZW5GaWxlcGF0aF8xID0gcmVxdWlyZShcIi4vZ2V0U1NPVG9rZW5GaWxlcGF0aFwiKTtcbmNvbnN0IHsgcmVhZEZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5jb25zdCBnZXRTU09Ub2tlbkZyb21GaWxlID0gYXN5bmMgKGlkKSA9PiB7XG4gICAgY29uc3Qgc3NvVG9rZW5GaWxlcGF0aCA9ICgwLCBnZXRTU09Ub2tlbkZpbGVwYXRoXzEuZ2V0U1NPVG9rZW5GaWxlcGF0aCkoaWQpO1xuICAgIGNvbnN0IHNzb1Rva2VuVGV4dCA9IGF3YWl0IHJlYWRGaWxlKHNzb1Rva2VuRmlsZXBhdGgsIFwidXRmOFwiKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzc29Ub2tlblRleHQpO1xufTtcbmV4cG9ydHMuZ2V0U1NPVG9rZW5Gcm9tRmlsZSA9IGdldFNTT1Rva2VuRnJvbUZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zbHVycEZpbGUgPSB2b2lkIDA7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgeyByZWFkRmlsZSB9ID0gZnNfMS5wcm9taXNlcztcbmNvbnN0IGZpbGVQcm9taXNlc0hhc2ggPSB7fTtcbmNvbnN0IHNsdXJwRmlsZSA9IChwYXRoLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKCFmaWxlUHJvbWlzZXNIYXNoW3BhdGhdIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaWdub3JlQ2FjaGUpKSB7XG4gICAgICAgIGZpbGVQcm9taXNlc0hhc2hbcGF0aF0gPSByZWFkRmlsZShwYXRoLCBcInV0ZjhcIik7XG4gICAgfVxuICAgIHJldHVybiBmaWxlUHJvbWlzZXNIYXNoW3BhdGhdO1xufTtcbmV4cG9ydHMuc2x1cnBGaWxlID0gc2x1cnBGaWxlO1xuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3JlRXhwb3J0ID0gKHRhcmdldCwgbW9kLCBzZWNvbmRUYXJnZXQpID0+IChfX2NvcHlQcm9wcyh0YXJnZXQsIG1vZCwgXCJkZWZhdWx0XCIpLCBzZWNvbmRUYXJnZXQgJiYgX19jb3B5UHJvcHMoc2Vjb25kVGFyZ2V0LCBtb2QsIFwiZGVmYXVsdFwiKSk7XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIENPTkZJR19QUkVGSVhfU0VQQVJBVE9SOiAoKSA9PiBDT05GSUdfUFJFRklYX1NFUEFSQVRPUixcbiAgREVGQVVMVF9QUk9GSUxFOiAoKSA9PiBERUZBVUxUX1BST0ZJTEUsXG4gIEVOVl9QUk9GSUxFOiAoKSA9PiBFTlZfUFJPRklMRSxcbiAgZ2V0UHJvZmlsZU5hbWU6ICgpID0+IGdldFByb2ZpbGVOYW1lLFxuICBsb2FkU2hhcmVkQ29uZmlnRmlsZXM6ICgpID0+IGxvYWRTaGFyZWRDb25maWdGaWxlcyxcbiAgbG9hZFNzb1Nlc3Npb25EYXRhOiAoKSA9PiBsb2FkU3NvU2Vzc2lvbkRhdGEsXG4gIHBhcnNlS25vd25GaWxlczogKCkgPT4gcGFyc2VLbm93bkZpbGVzXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcbl9fcmVFeHBvcnQoc3JjX2V4cG9ydHMsIHJlcXVpcmUoXCIuLy4vZ2V0SG9tZURpclwiKSwgbW9kdWxlLmV4cG9ydHMpO1xuXG4vLyBzcmMvZ2V0UHJvZmlsZU5hbWUudHNcbnZhciBFTlZfUFJPRklMRSA9IFwiQVdTX1BST0ZJTEVcIjtcbnZhciBERUZBVUxUX1BST0ZJTEUgPSBcImRlZmF1bHRcIjtcbnZhciBnZXRQcm9maWxlTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGluaXQpID0+IGluaXQucHJvZmlsZSB8fCBwcm9jZXNzLmVudltFTlZfUFJPRklMRV0gfHwgREVGQVVMVF9QUk9GSUxFLCBcImdldFByb2ZpbGVOYW1lXCIpO1xuXG4vLyBzcmMvaW5kZXgudHNcbl9fcmVFeHBvcnQoc3JjX2V4cG9ydHMsIHJlcXVpcmUoXCIuLy4vZ2V0U1NPVG9rZW5GaWxlcGF0aFwiKSwgbW9kdWxlLmV4cG9ydHMpO1xuX19yZUV4cG9ydChzcmNfZXhwb3J0cywgcmVxdWlyZShcIi4vLi9nZXRTU09Ub2tlbkZyb21GaWxlXCIpLCBtb2R1bGUuZXhwb3J0cyk7XG5cbi8vIHNyYy9nZXRDb25maWdEYXRhLnRzXG52YXIgaW1wb3J0X3R5cGVzID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG52YXIgZ2V0Q29uZmlnRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRhdGEpID0+IE9iamVjdC5lbnRyaWVzKGRhdGEpLmZpbHRlcigoW2tleV0pID0+IHtcbiAgY29uc3QgaW5kZXhPZlNlcGFyYXRvciA9IGtleS5pbmRleE9mKENPTkZJR19QUkVGSVhfU0VQQVJBVE9SKTtcbiAgaWYgKGluZGV4T2ZTZXBhcmF0b3IgPT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGltcG9ydF90eXBlcy5JbmlTZWN0aW9uVHlwZSkuaW5jbHVkZXMoa2V5LnN1YnN0cmluZygwLCBpbmRleE9mU2VwYXJhdG9yKSk7XG59KS5yZWR1Y2UoXG4gIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IGluZGV4T2ZTZXBhcmF0b3IgPSBrZXkuaW5kZXhPZihDT05GSUdfUFJFRklYX1NFUEFSQVRPUik7XG4gICAgY29uc3QgdXBkYXRlZEtleSA9IGtleS5zdWJzdHJpbmcoMCwgaW5kZXhPZlNlcGFyYXRvcikgPT09IGltcG9ydF90eXBlcy5JbmlTZWN0aW9uVHlwZS5QUk9GSUxFID8ga2V5LnN1YnN0cmluZyhpbmRleE9mU2VwYXJhdG9yICsgMSkgOiBrZXk7XG4gICAgYWNjW3VwZGF0ZWRLZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGFjYztcbiAgfSxcbiAge1xuICAgIC8vIFBvcHVsYXRlIGRlZmF1bHQgcHJvZmlsZSwgaWYgcHJlc2VudC5cbiAgICAuLi5kYXRhLmRlZmF1bHQgJiYgeyBkZWZhdWx0OiBkYXRhLmRlZmF1bHQgfVxuICB9XG4pLCBcImdldENvbmZpZ0RhdGFcIik7XG5cbi8vIHNyYy9nZXRDb25maWdGaWxlcGF0aC50c1xudmFyIGltcG9ydF9wYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG52YXIgaW1wb3J0X2dldEhvbWVEaXIgPSByZXF1aXJlKFwiLi8uL2dldEhvbWVEaXJcIik7XG52YXIgRU5WX0NPTkZJR19QQVRIID0gXCJBV1NfQ09ORklHX0ZJTEVcIjtcbnZhciBnZXRDb25maWdGaWxlcGF0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gcHJvY2Vzcy5lbnZbRU5WX0NPTkZJR19QQVRIXSB8fCAoMCwgaW1wb3J0X3BhdGguam9pbikoKDAsIGltcG9ydF9nZXRIb21lRGlyLmdldEhvbWVEaXIpKCksIFwiLmF3c1wiLCBcImNvbmZpZ1wiKSwgXCJnZXRDb25maWdGaWxlcGF0aFwiKTtcblxuLy8gc3JjL2dldENyZWRlbnRpYWxzRmlsZXBhdGgudHNcblxudmFyIGltcG9ydF9nZXRIb21lRGlyMiA9IHJlcXVpcmUoXCIuLy4vZ2V0SG9tZURpclwiKTtcbnZhciBFTlZfQ1JFREVOVElBTFNfUEFUSCA9IFwiQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFXCI7XG52YXIgZ2V0Q3JlZGVudGlhbHNGaWxlcGF0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gcHJvY2Vzcy5lbnZbRU5WX0NSRURFTlRJQUxTX1BBVEhdIHx8ICgwLCBpbXBvcnRfcGF0aC5qb2luKSgoMCwgaW1wb3J0X2dldEhvbWVEaXIyLmdldEhvbWVEaXIpKCksIFwiLmF3c1wiLCBcImNyZWRlbnRpYWxzXCIpLCBcImdldENyZWRlbnRpYWxzRmlsZXBhdGhcIik7XG5cbi8vIHNyYy9wYXJzZUluaS50c1xuXG52YXIgcHJlZml4S2V5UmVnZXggPSAvXihbXFx3LV0rKVxccyhbXCInXSk/KFtcXHctQFxcK1xcLiU6L10rKVxcMiQvO1xudmFyIHByb2ZpbGVOYW1lQmxvY2tMaXN0ID0gW1wiX19wcm90b19fXCIsIFwicHJvZmlsZSBfX3Byb3RvX19cIl07XG52YXIgcGFyc2VJbmkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbmlEYXRhKSA9PiB7XG4gIGNvbnN0IG1hcCA9IHt9O1xuICBsZXQgY3VycmVudFNlY3Rpb247XG4gIGxldCBjdXJyZW50U3ViU2VjdGlvbjtcbiAgZm9yIChjb25zdCBpbmlMaW5lIG9mIGluaURhdGEuc3BsaXQoL1xccj9cXG4vKSkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gaW5pTGluZS5zcGxpdCgvKF58XFxzKVs7I10vKVswXS50cmltKCk7XG4gICAgY29uc3QgaXNTZWN0aW9uID0gdHJpbW1lZExpbmVbMF0gPT09IFwiW1wiICYmIHRyaW1tZWRMaW5lW3RyaW1tZWRMaW5lLmxlbmd0aCAtIDFdID09PSBcIl1cIjtcbiAgICBpZiAoaXNTZWN0aW9uKSB7XG4gICAgICBjdXJyZW50U2VjdGlvbiA9IHZvaWQgMDtcbiAgICAgIGN1cnJlbnRTdWJTZWN0aW9uID0gdm9pZCAwO1xuICAgICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0cmltbWVkTGluZS5zdWJzdHJpbmcoMSwgdHJpbW1lZExpbmUubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBtYXRjaGVzID0gcHJlZml4S2V5UmVnZXguZXhlYyhzZWN0aW9uTmFtZSk7XG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICBjb25zdCBbLCBwcmVmaXgsICwgbmFtZV0gPSBtYXRjaGVzO1xuICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyhpbXBvcnRfdHlwZXMuSW5pU2VjdGlvblR5cGUpLmluY2x1ZGVzKHByZWZpeCkpIHtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbiA9IFtwcmVmaXgsIG5hbWVdLmpvaW4oQ09ORklHX1BSRUZJWF9TRVBBUkFUT1IpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50U2VjdGlvbiA9IHNlY3Rpb25OYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHByb2ZpbGVOYW1lQmxvY2tMaXN0LmluY2x1ZGVzKHNlY3Rpb25OYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIGludmFsaWQgcHJvZmlsZSBuYW1lIFwiJHtzZWN0aW9uTmFtZX1cImApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudFNlY3Rpb24pIHtcbiAgICAgIGNvbnN0IGluZGV4T2ZFcXVhbHNTaWduID0gdHJpbW1lZExpbmUuaW5kZXhPZihcIj1cIik7XG4gICAgICBpZiAoIVswLCAtMV0uaW5jbHVkZXMoaW5kZXhPZkVxdWFsc1NpZ24pKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBbXG4gICAgICAgICAgdHJpbW1lZExpbmUuc3Vic3RyaW5nKDAsIGluZGV4T2ZFcXVhbHNTaWduKS50cmltKCksXG4gICAgICAgICAgdHJpbW1lZExpbmUuc3Vic3RyaW5nKGluZGV4T2ZFcXVhbHNTaWduICsgMSkudHJpbSgpXG4gICAgICAgIF07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgIGN1cnJlbnRTdWJTZWN0aW9uID0gbmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY3VycmVudFN1YlNlY3Rpb24gJiYgaW5pTGluZS50cmltU3RhcnQoKSA9PT0gaW5pTGluZSkge1xuICAgICAgICAgICAgY3VycmVudFN1YlNlY3Rpb24gPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcFtjdXJyZW50U2VjdGlvbl0gPSBtYXBbY3VycmVudFNlY3Rpb25dIHx8IHt9O1xuICAgICAgICAgIGNvbnN0IGtleSA9IGN1cnJlbnRTdWJTZWN0aW9uID8gW2N1cnJlbnRTdWJTZWN0aW9uLCBuYW1lXS5qb2luKENPTkZJR19QUkVGSVhfU0VQQVJBVE9SKSA6IG5hbWU7XG4gICAgICAgICAgbWFwW2N1cnJlbnRTZWN0aW9uXVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hcDtcbn0sIFwicGFyc2VJbmlcIik7XG5cbi8vIHNyYy9sb2FkU2hhcmVkQ29uZmlnRmlsZXMudHNcbnZhciBpbXBvcnRfc2x1cnBGaWxlID0gcmVxdWlyZShcIi4vLi9zbHVycEZpbGVcIik7XG52YXIgc3dhbGxvd0Vycm9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiAoe30pLCBcInN3YWxsb3dFcnJvclwiKTtcbnZhciBDT05GSUdfUFJFRklYX1NFUEFSQVRPUiA9IFwiLlwiO1xudmFyIGxvYWRTaGFyZWRDb25maWdGaWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGluaXQgPSB7fSkgPT4ge1xuICBjb25zdCB7IGZpbGVwYXRoID0gZ2V0Q3JlZGVudGlhbHNGaWxlcGF0aCgpLCBjb25maWdGaWxlcGF0aCA9IGdldENvbmZpZ0ZpbGVwYXRoKCkgfSA9IGluaXQ7XG4gIGNvbnN0IHBhcnNlZEZpbGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICgwLCBpbXBvcnRfc2x1cnBGaWxlLnNsdXJwRmlsZSkoY29uZmlnRmlsZXBhdGgsIHtcbiAgICAgIGlnbm9yZUNhY2hlOiBpbml0Lmlnbm9yZUNhY2hlXG4gICAgfSkudGhlbihwYXJzZUluaSkudGhlbihnZXRDb25maWdEYXRhKS5jYXRjaChzd2FsbG93RXJyb3IpLFxuICAgICgwLCBpbXBvcnRfc2x1cnBGaWxlLnNsdXJwRmlsZSkoZmlsZXBhdGgsIHtcbiAgICAgIGlnbm9yZUNhY2hlOiBpbml0Lmlnbm9yZUNhY2hlXG4gICAgfSkudGhlbihwYXJzZUluaSkuY2F0Y2goc3dhbGxvd0Vycm9yKVxuICBdKTtcbiAgcmV0dXJuIHtcbiAgICBjb25maWdGaWxlOiBwYXJzZWRGaWxlc1swXSxcbiAgICBjcmVkZW50aWFsc0ZpbGU6IHBhcnNlZEZpbGVzWzFdXG4gIH07XG59LCBcImxvYWRTaGFyZWRDb25maWdGaWxlc1wiKTtcblxuLy8gc3JjL2dldFNzb1Nlc3Npb25EYXRhLnRzXG5cbnZhciBnZXRTc29TZXNzaW9uRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRhdGEpID0+IE9iamVjdC5lbnRyaWVzKGRhdGEpLmZpbHRlcigoW2tleV0pID0+IGtleS5zdGFydHNXaXRoKGltcG9ydF90eXBlcy5JbmlTZWN0aW9uVHlwZS5TU09fU0VTU0lPTiArIENPTkZJR19QUkVGSVhfU0VQQVJBVE9SKSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHsgLi4uYWNjLCBba2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZihDT05GSUdfUFJFRklYX1NFUEFSQVRPUikgKyAxKV06IHZhbHVlIH0pLCB7fSksIFwiZ2V0U3NvU2Vzc2lvbkRhdGFcIik7XG5cbi8vIHNyYy9sb2FkU3NvU2Vzc2lvbkRhdGEudHNcbnZhciBpbXBvcnRfc2x1cnBGaWxlMiA9IHJlcXVpcmUoXCIuLy4vc2x1cnBGaWxlXCIpO1xudmFyIHN3YWxsb3dFcnJvcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+ICh7fSksIFwic3dhbGxvd0Vycm9yXCIpO1xudmFyIGxvYWRTc29TZXNzaW9uRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGluaXQgPSB7fSkgPT4gKDAsIGltcG9ydF9zbHVycEZpbGUyLnNsdXJwRmlsZSkoaW5pdC5jb25maWdGaWxlcGF0aCA/PyBnZXRDb25maWdGaWxlcGF0aCgpKS50aGVuKHBhcnNlSW5pKS50aGVuKGdldFNzb1Nlc3Npb25EYXRhKS5jYXRjaChzd2FsbG93RXJyb3IyKSwgXCJsb2FkU3NvU2Vzc2lvbkRhdGFcIik7XG5cbi8vIHNyYy9tZXJnZUNvbmZpZ0ZpbGVzLnRzXG52YXIgbWVyZ2VDb25maWdGaWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKC4uLmZpbGVzKSA9PiB7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZmlsZSkpIHtcbiAgICAgIGlmIChtZXJnZWRba2V5XSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obWVyZ2VkW2tleV0sIHZhbHVlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWRba2V5XSA9IHZhbHVlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZDtcbn0sIFwibWVyZ2VDb25maWdGaWxlc1wiKTtcblxuLy8gc3JjL3BhcnNlS25vd25GaWxlcy50c1xudmFyIHBhcnNlS25vd25GaWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGluaXQpID0+IHtcbiAgY29uc3QgcGFyc2VkRmlsZXMgPSBhd2FpdCBsb2FkU2hhcmVkQ29uZmlnRmlsZXMoaW5pdCk7XG4gIHJldHVybiBtZXJnZUNvbmZpZ0ZpbGVzKHBhcnNlZEZpbGVzLmNvbmZpZ0ZpbGUsIHBhcnNlZEZpbGVzLmNyZWRlbnRpYWxzRmlsZSk7XG59LCBcInBhcnNlS25vd25GaWxlc1wiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhvbWVEaXIsXG4gIEVOVl9QUk9GSUxFLFxuICBERUZBVUxUX1BST0ZJTEUsXG4gIGdldFByb2ZpbGVOYW1lLFxuICBnZXRTU09Ub2tlbkZpbGVwYXRoLFxuICBnZXRTU09Ub2tlbkZyb21GaWxlLFxuICBDT05GSUdfUFJFRklYX1NFUEFSQVRPUixcbiAgbG9hZFNoYXJlZENvbmZpZ0ZpbGVzLFxuICBsb2FkU3NvU2Vzc2lvbkRhdGEsXG4gIHBhcnNlS25vd25GaWxlc1xufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGxvYWRDb25maWc6ICgpID0+IGxvYWRDb25maWdcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvY29uZmlnTG9hZGVyLnRzXG5cblxuLy8gc3JjL2Zyb21FbnYudHNcbnZhciBpbXBvcnRfcHJvcGVydHlfcHJvdmlkZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbnZhciBmcm9tRW52ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZW52VmFyU2VsZWN0b3IpID0+IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBlbnZWYXJTZWxlY3Rvcihwcm9jZXNzLmVudik7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBpbXBvcnRfcHJvcGVydHlfcHJvdmlkZXIuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFxuICAgICAgZS5tZXNzYWdlIHx8IGBDYW5ub3QgbG9hZCBjb25maWcgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBnZXR0ZXI6ICR7ZW52VmFyU2VsZWN0b3J9YFxuICAgICk7XG4gIH1cbn0sIFwiZnJvbUVudlwiKTtcblxuLy8gc3JjL2Zyb21TaGFyZWRDb25maWdGaWxlcy50c1xuXG52YXIgaW1wb3J0X3NoYXJlZF9pbmlfZmlsZV9sb2FkZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xudmFyIGZyb21TaGFyZWRDb25maWdGaWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZ1NlbGVjdG9yLCB7IHByZWZlcnJlZEZpbGUgPSBcImNvbmZpZ1wiLCAuLi5pbml0IH0gPSB7fSkgPT4gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBwcm9maWxlID0gKDAsIGltcG9ydF9zaGFyZWRfaW5pX2ZpbGVfbG9hZGVyLmdldFByb2ZpbGVOYW1lKShpbml0KTtcbiAgY29uc3QgeyBjb25maWdGaWxlLCBjcmVkZW50aWFsc0ZpbGUgfSA9IGF3YWl0ICgwLCBpbXBvcnRfc2hhcmVkX2luaV9maWxlX2xvYWRlci5sb2FkU2hhcmVkQ29uZmlnRmlsZXMpKGluaXQpO1xuICBjb25zdCBwcm9maWxlRnJvbUNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNGaWxlW3Byb2ZpbGVdIHx8IHt9O1xuICBjb25zdCBwcm9maWxlRnJvbUNvbmZpZyA9IGNvbmZpZ0ZpbGVbcHJvZmlsZV0gfHwge307XG4gIGNvbnN0IG1lcmdlZFByb2ZpbGUgPSBwcmVmZXJyZWRGaWxlID09PSBcImNvbmZpZ1wiID8geyAuLi5wcm9maWxlRnJvbUNyZWRlbnRpYWxzLCAuLi5wcm9maWxlRnJvbUNvbmZpZyB9IDogeyAuLi5wcm9maWxlRnJvbUNvbmZpZywgLi4ucHJvZmlsZUZyb21DcmVkZW50aWFscyB9O1xuICB0cnkge1xuICAgIGNvbnN0IGNmZ0ZpbGUgPSBwcmVmZXJyZWRGaWxlID09PSBcImNvbmZpZ1wiID8gY29uZmlnRmlsZSA6IGNyZWRlbnRpYWxzRmlsZTtcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IGNvbmZpZ1NlbGVjdG9yKG1lcmdlZFByb2ZpbGUsIGNmZ0ZpbGUpO1xuICAgIGlmIChjb25maWdWYWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IGltcG9ydF9wcm9wZXJ0eV9wcm92aWRlci5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXG4gICAgICBlLm1lc3NhZ2UgfHwgYENhbm5vdCBsb2FkIGNvbmZpZyBmb3IgcHJvZmlsZSAke3Byb2ZpbGV9IGluIFNESyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggZ2V0dGVyOiAke2NvbmZpZ1NlbGVjdG9yfWBcbiAgICApO1xuICB9XG59LCBcImZyb21TaGFyZWRDb25maWdGaWxlc1wiKTtcblxuLy8gc3JjL2Zyb21TdGF0aWMudHNcblxudmFyIGlzRnVuY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChmdW5jKSA9PiB0eXBlb2YgZnVuYyA9PT0gXCJmdW5jdGlvblwiLCBcImlzRnVuY3Rpb25cIik7XG52YXIgZnJvbVN0YXRpYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRlZmF1bHRWYWx1ZSkgPT4gaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpID8gYXN5bmMgKCkgPT4gYXdhaXQgZGVmYXVsdFZhbHVlKCkgOiAoMCwgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLmZyb21TdGF0aWMpKGRlZmF1bHRWYWx1ZSksIFwiZnJvbVN0YXRpY1wiKTtcblxuLy8gc3JjL2NvbmZpZ0xvYWRlci50c1xudmFyIGxvYWRDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvciwgY29uZmlnRmlsZVNlbGVjdG9yLCBkZWZhdWx0OiBkZWZhdWx0VmFsdWUgfSwgY29uZmlndXJhdGlvbiA9IHt9KSA9PiAoMCwgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLm1lbW9pemUpKFxuICAoMCwgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLmNoYWluKShcbiAgICBmcm9tRW52KGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvciksXG4gICAgZnJvbVNoYXJlZENvbmZpZ0ZpbGVzKGNvbmZpZ0ZpbGVTZWxlY3RvciwgY29uZmlndXJhdGlvbiksXG4gICAgZnJvbVN0YXRpYyhkZWZhdWx0VmFsdWUpXG4gIClcbiksIFwibG9hZENvbmZpZ1wiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWRDb25maWdcbn0pO1xuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFVybENvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCBFTlZfRU5EUE9JTlRfVVJMID0gXCJBV1NfRU5EUE9JTlRfVVJMXCI7XG5jb25zdCBDT05GSUdfRU5EUE9JTlRfVVJMID0gXCJlbmRwb2ludF91cmxcIjtcbmNvbnN0IGdldEVuZHBvaW50VXJsQ29uZmlnID0gKHNlcnZpY2VJZCkgPT4gKHtcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmljZVN1ZmZpeFBhcnRzID0gc2VydmljZUlkLnNwbGl0KFwiIFwiKS5tYXAoKHcpID0+IHcudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbmRwb2ludFVybCA9IGVudltbRU5WX0VORFBPSU5UX1VSTCwgLi4uc2VydmljZVN1ZmZpeFBhcnRzXS5qb2luKFwiX1wiKV07XG4gICAgICAgIGlmIChzZXJ2aWNlRW5kcG9pbnRVcmwpXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUVuZHBvaW50VXJsO1xuICAgICAgICBjb25zdCBlbmRwb2ludFVybCA9IGVudltFTlZfRU5EUE9JTlRfVVJMXTtcbiAgICAgICAgaWYgKGVuZHBvaW50VXJsKVxuICAgICAgICAgICAgcmV0dXJuIGVuZHBvaW50VXJsO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgY29uZmlnRmlsZVNlbGVjdG9yOiAocHJvZmlsZSwgY29uZmlnKSA9PiB7XG4gICAgICAgIGlmIChjb25maWcgJiYgcHJvZmlsZS5zZXJ2aWNlcykge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZXNTZWN0aW9uID0gY29uZmlnW1tcInNlcnZpY2VzXCIsIHByb2ZpbGUuc2VydmljZXNdLmpvaW4oc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLkNPTkZJR19QUkVGSVhfU0VQQVJBVE9SKV07XG4gICAgICAgICAgICBpZiAoc2VydmljZXNTZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZVByZWZpeFBhcnRzID0gc2VydmljZUlkLnNwbGl0KFwiIFwiKS5tYXAoKHcpID0+IHcudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kcG9pbnRVcmwgPSBzZXJ2aWNlc1NlY3Rpb25bW3NlcnZpY2VQcmVmaXhQYXJ0cy5qb2luKFwiX1wiKSwgQ09ORklHX0VORFBPSU5UX1VSTF0uam9pbihzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEuQ09ORklHX1BSRUZJWF9TRVBBUkFUT1IpXTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kcG9pbnRVcmwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludFVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRwb2ludFVybCA9IHByb2ZpbGVbQ09ORklHX0VORFBPSU5UX1VSTF07XG4gICAgICAgIGlmIChlbmRwb2ludFVybClcbiAgICAgICAgICAgIHJldHVybiBlbmRwb2ludFVybDtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbn0pO1xuZXhwb3J0cy5nZXRFbmRwb2ludFVybENvbmZpZyA9IGdldEVuZHBvaW50VXJsQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RW5kcG9pbnRGcm9tQ29uZmlnID0gdm9pZCAwO1xuY29uc3Qgbm9kZV9jb25maWdfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRVcmxDb25maWdfMSA9IHJlcXVpcmUoXCIuL2dldEVuZHBvaW50VXJsQ29uZmlnXCIpO1xuY29uc3QgZ2V0RW5kcG9pbnRGcm9tQ29uZmlnID0gYXN5bmMgKHNlcnZpY2VJZCkgPT4gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoKDAsIGdldEVuZHBvaW50VXJsQ29uZmlnXzEuZ2V0RW5kcG9pbnRVcmxDb25maWcpKHNlcnZpY2VJZCkpKCk7XG5leHBvcnRzLmdldEVuZHBvaW50RnJvbUNvbmZpZyA9IGdldEVuZHBvaW50RnJvbUNvbmZpZztcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIHBhcnNlUXVlcnlTdHJpbmc6ICgpID0+IHBhcnNlUXVlcnlTdHJpbmdcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyhxdWVyeXN0cmluZykge1xuICBjb25zdCBxdWVyeSA9IHt9O1xuICBxdWVyeXN0cmluZyA9IHF1ZXJ5c3RyaW5nLnJlcGxhY2UoL15cXD8vLCBcIlwiKTtcbiAgaWYgKHF1ZXJ5c3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHF1ZXJ5c3RyaW5nLnNwbGl0KFwiJlwiKSkge1xuICAgICAgbGV0IFtrZXksIHZhbHVlID0gbnVsbF0gPSBwYWlyLnNwbGl0KFwiPVwiKTtcbiAgICAgIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghKGtleSBpbiBxdWVyeSkpIHtcbiAgICAgICAgcXVlcnlba2V5XSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5W2tleV0pKSB7XG4gICAgICAgIHF1ZXJ5W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVtrZXldID0gW3F1ZXJ5W2tleV0sIHZhbHVlXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuX19uYW1lKHBhcnNlUXVlcnlTdHJpbmcsIFwicGFyc2VRdWVyeVN0cmluZ1wiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlUXVlcnlTdHJpbmdcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBwYXJzZVVybDogKCkgPT4gcGFyc2VVcmxcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9xdWVyeXN0cmluZ19wYXJzZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9xdWVyeXN0cmluZy1wYXJzZXJcIik7XG52YXIgcGFyc2VVcmwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1cmwpID0+IHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFyc2VVcmwobmV3IFVSTCh1cmwpKTtcbiAgfVxuICBjb25zdCB7IGhvc3RuYW1lLCBwYXRobmFtZSwgcG9ydCwgcHJvdG9jb2wsIHNlYXJjaCB9ID0gdXJsO1xuICBsZXQgcXVlcnk7XG4gIGlmIChzZWFyY2gpIHtcbiAgICBxdWVyeSA9ICgwLCBpbXBvcnRfcXVlcnlzdHJpbmdfcGFyc2VyLnBhcnNlUXVlcnlTdHJpbmcpKHNlYXJjaCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBob3N0bmFtZSxcbiAgICBwb3J0OiBwb3J0ID8gcGFyc2VJbnQocG9ydCkgOiB2b2lkIDAsXG4gICAgcHJvdG9jb2wsXG4gICAgcGF0aDogcGF0aG5hbWUsXG4gICAgcXVlcnlcbiAgfTtcbn0sIFwicGFyc2VVcmxcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVVybFxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIGRlc2VyaWFsaXplck1pZGRsZXdhcmU6ICgpID0+IGRlc2VyaWFsaXplck1pZGRsZXdhcmUsXG4gIGRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb246ICgpID0+IGRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24sXG4gIGdldFNlcmRlUGx1Z2luOiAoKSA9PiBnZXRTZXJkZVBsdWdpbixcbiAgc2VyaWFsaXplck1pZGRsZXdhcmU6ICgpID0+IHNlcmlhbGl6ZXJNaWRkbGV3YXJlLFxuICBzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbjogKCkgPT4gc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb25cbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvZGVzZXJpYWxpemVyTWlkZGxld2FyZS50c1xudmFyIGRlc2VyaWFsaXplck1pZGRsZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zLCBkZXNlcmlhbGl6ZXIpID0+IChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IHJlc3BvbnNlIH0gPSBhd2FpdCBuZXh0KGFyZ3MpO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGRlc2VyaWFsaXplcihyZXNwb25zZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgb3V0cHV0OiBwYXJzZWRcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgXCIkcmVzcG9uc2VcIiwge1xuICAgICAgdmFsdWU6IHJlc3BvbnNlXG4gICAgfSk7XG4gICAgaWYgKCEoXCIkbWV0YWRhdGFcIiBpbiBlcnJvcikpIHtcbiAgICAgIGNvbnN0IGhpbnQgPSBgRGVzZXJpYWxpemF0aW9uIGVycm9yOiB0byBzZWUgdGhlIHJhdyByZXNwb25zZSwgaW5zcGVjdCB0aGUgaGlkZGVuIGZpZWxkIHtlcnJvcn0uJHJlc3BvbnNlIG9uIHRoaXMgb2JqZWN0LmA7XG4gICAgICBlcnJvci5tZXNzYWdlICs9IFwiXFxuICBcIiArIGhpbnQ7XG4gICAgICBpZiAodHlwZW9mIGVycm9yLiRyZXNwb25zZUJvZHlUZXh0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmIChlcnJvci4kcmVzcG9uc2UpIHtcbiAgICAgICAgICBlcnJvci4kcmVzcG9uc2UuYm9keSA9IGVycm9yLiRyZXNwb25zZUJvZHlUZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59LCBcImRlc2VyaWFsaXplck1pZGRsZXdhcmVcIik7XG5cbi8vIHNyYy9zZXJpYWxpemVyTWlkZGxld2FyZS50c1xudmFyIHNlcmlhbGl6ZXJNaWRkbGV3YXJlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucywgc2VyaWFsaXplcikgPT4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gIHZhciBfYTtcbiAgY29uc3QgZW5kcG9pbnQgPSAoKF9hID0gY29udGV4dC5lbmRwb2ludFYyKSA9PSBudWxsID8gdm9pZCAwIDogX2EudXJsKSAmJiBvcHRpb25zLnVybFBhcnNlciA/IGFzeW5jICgpID0+IG9wdGlvbnMudXJsUGFyc2VyKGNvbnRleHQuZW5kcG9pbnRWMi51cmwpIDogb3B0aW9ucy5lbmRwb2ludDtcbiAgaWYgKCFlbmRwb2ludCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhbGlkIGVuZHBvaW50IHByb3ZpZGVyIGF2YWlsYWJsZS5cIik7XG4gIH1cbiAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHNlcmlhbGl6ZXIoYXJncy5pbnB1dCwgeyAuLi5vcHRpb25zLCBlbmRwb2ludCB9KTtcbiAgcmV0dXJuIG5leHQoe1xuICAgIC4uLmFyZ3MsXG4gICAgcmVxdWVzdFxuICB9KTtcbn0sIFwic2VyaWFsaXplck1pZGRsZXdhcmVcIik7XG5cbi8vIHNyYy9zZXJkZVBsdWdpbi50c1xudmFyIGRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24gPSB7XG4gIG5hbWU6IFwiZGVzZXJpYWxpemVyTWlkZGxld2FyZVwiLFxuICBzdGVwOiBcImRlc2VyaWFsaXplXCIsXG4gIHRhZ3M6IFtcIkRFU0VSSUFMSVpFUlwiXSxcbiAgb3ZlcnJpZGU6IHRydWVcbn07XG52YXIgc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24gPSB7XG4gIG5hbWU6IFwic2VyaWFsaXplck1pZGRsZXdhcmVcIixcbiAgc3RlcDogXCJzZXJpYWxpemVcIixcbiAgdGFnczogW1wiU0VSSUFMSVpFUlwiXSxcbiAgb3ZlcnJpZGU6IHRydWVcbn07XG5mdW5jdGlvbiBnZXRTZXJkZVBsdWdpbihjb25maWcsIHNlcmlhbGl6ZXIsIGRlc2VyaWFsaXplcikge1xuICByZXR1cm4ge1xuICAgIGFwcGx5VG9TdGFjazogKGNvbW1hbmRTdGFjaykgPT4ge1xuICAgICAgY29tbWFuZFN0YWNrLmFkZChkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlKGNvbmZpZywgZGVzZXJpYWxpemVyKSwgZGVzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbik7XG4gICAgICBjb21tYW5kU3RhY2suYWRkKHNlcmlhbGl6ZXJNaWRkbGV3YXJlKGNvbmZpZywgc2VyaWFsaXplciksIHNlcmlhbGl6ZXJNaWRkbGV3YXJlT3B0aW9uKTtcbiAgICB9XG4gIH07XG59XG5fX25hbWUoZ2V0U2VyZGVQbHVnaW4sIFwiZ2V0U2VyZGVQbHVnaW5cIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlLFxuICBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlT3B0aW9uLFxuICBzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbixcbiAgZ2V0U2VyZGVQbHVnaW4sXG4gIHNlcmlhbGl6ZXJNaWRkbGV3YXJlXG59KTtcblxuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgZW5kcG9pbnRNaWRkbGV3YXJlOiAoKSA9PiBlbmRwb2ludE1pZGRsZXdhcmUsXG4gIGVuZHBvaW50TWlkZGxld2FyZU9wdGlvbnM6ICgpID0+IGVuZHBvaW50TWlkZGxld2FyZU9wdGlvbnMsXG4gIGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9uczogKCkgPT4gZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zLFxuICBnZXRFbmRwb2ludFBsdWdpbjogKCkgPT4gZ2V0RW5kcG9pbnRQbHVnaW4sXG4gIHJlc29sdmVFbmRwb2ludENvbmZpZzogKCkgPT4gcmVzb2x2ZUVuZHBvaW50Q29uZmlnLFxuICByZXNvbHZlUGFyYW1zOiAoKSA9PiByZXNvbHZlUGFyYW1zLFxuICB0b0VuZHBvaW50VjE6ICgpID0+IHRvRW5kcG9pbnRWMVxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9zZXJ2aWNlLWN1c3RvbWl6YXRpb25zL3MzLnRzXG52YXIgcmVzb2x2ZVBhcmFtc0ZvclMzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoZW5kcG9pbnRQYXJhbXMpID0+IHtcbiAgY29uc3QgYnVja2V0ID0gKGVuZHBvaW50UGFyYW1zID09IG51bGwgPyB2b2lkIDAgOiBlbmRwb2ludFBhcmFtcy5CdWNrZXQpIHx8IFwiXCI7XG4gIGlmICh0eXBlb2YgZW5kcG9pbnRQYXJhbXMuQnVja2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgZW5kcG9pbnRQYXJhbXMuQnVja2V0ID0gYnVja2V0LnJlcGxhY2UoLyMvZywgZW5jb2RlVVJJQ29tcG9uZW50KFwiI1wiKSkucmVwbGFjZSgvXFw/L2csIGVuY29kZVVSSUNvbXBvbmVudChcIj9cIikpO1xuICB9XG4gIGlmIChpc0FybkJ1Y2tldE5hbWUoYnVja2V0KSkge1xuICAgIGlmIChlbmRwb2ludFBhcmFtcy5Gb3JjZVBhdGhTdHlsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aC1zdHlsZSBhZGRyZXNzaW5nIGNhbm5vdCBiZSB1c2VkIHdpdGggQVJOIGJ1Y2tldHNcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc0Ruc0NvbXBhdGlibGVCdWNrZXROYW1lKGJ1Y2tldCkgfHwgYnVja2V0LmluZGV4T2YoXCIuXCIpICE9PSAtMSAmJiAhU3RyaW5nKGVuZHBvaW50UGFyYW1zLkVuZHBvaW50KS5zdGFydHNXaXRoKFwiaHR0cDpcIikgfHwgYnVja2V0LnRvTG93ZXJDYXNlKCkgIT09IGJ1Y2tldCB8fCBidWNrZXQubGVuZ3RoIDwgMykge1xuICAgIGVuZHBvaW50UGFyYW1zLkZvcmNlUGF0aFN0eWxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoZW5kcG9pbnRQYXJhbXMuRGlzYWJsZU11bHRpUmVnaW9uQWNjZXNzUG9pbnRzKSB7XG4gICAgZW5kcG9pbnRQYXJhbXMuZGlzYWJsZU11bHRpUmVnaW9uQWNjZXNzUG9pbnRzID0gdHJ1ZTtcbiAgICBlbmRwb2ludFBhcmFtcy5EaXNhYmxlTVJBUCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGVuZHBvaW50UGFyYW1zO1xufSwgXCJyZXNvbHZlUGFyYW1zRm9yUzNcIik7XG52YXIgRE9NQUlOX1BBVFRFUk4gPSAvXlthLXowLTldW2EtejAtOVxcLlxcLV17MSw2MX1bYS16MC05XSQvO1xudmFyIElQX0FERFJFU1NfUEFUVEVSTiA9IC8oXFxkK1xcLil7M31cXGQrLztcbnZhciBET1RTX1BBVFRFUk4gPSAvXFwuXFwuLztcbnZhciBpc0Ruc0NvbXBhdGlibGVCdWNrZXROYW1lID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYnVja2V0TmFtZSkgPT4gRE9NQUlOX1BBVFRFUk4udGVzdChidWNrZXROYW1lKSAmJiAhSVBfQUREUkVTU19QQVRURVJOLnRlc3QoYnVja2V0TmFtZSkgJiYgIURPVFNfUEFUVEVSTi50ZXN0KGJ1Y2tldE5hbWUpLCBcImlzRG5zQ29tcGF0aWJsZUJ1Y2tldE5hbWVcIik7XG52YXIgaXNBcm5CdWNrZXROYW1lID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYnVja2V0TmFtZSkgPT4ge1xuICBjb25zdCBbYXJuLCBwYXJ0aXRpb24sIHNlcnZpY2UsICwgLCBidWNrZXRdID0gYnVja2V0TmFtZS5zcGxpdChcIjpcIik7XG4gIGNvbnN0IGlzQXJuID0gYXJuID09PSBcImFyblwiICYmIGJ1Y2tldE5hbWUuc3BsaXQoXCI6XCIpLmxlbmd0aCA+PSA2O1xuICBjb25zdCBpc1ZhbGlkQXJuID0gQm9vbGVhbihpc0FybiAmJiBwYXJ0aXRpb24gJiYgc2VydmljZSAmJiBidWNrZXQpO1xuICBpZiAoaXNBcm4gJiYgIWlzVmFsaWRBcm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQVJOOiAke2J1Y2tldE5hbWV9IHdhcyBhbiBpbnZhbGlkIEFSTi5gKTtcbiAgfVxuICByZXR1cm4gaXNWYWxpZEFybjtcbn0sIFwiaXNBcm5CdWNrZXROYW1lXCIpO1xuXG4vLyBzcmMvYWRhcHRvcnMvY3JlYXRlQ29uZmlnVmFsdWVQcm92aWRlci50c1xudmFyIGNyZWF0ZUNvbmZpZ1ZhbHVlUHJvdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWdLZXksIGNhbm9uaWNhbEVuZHBvaW50UGFyYW1LZXksIGNvbmZpZykgPT4ge1xuICBjb25zdCBjb25maWdQcm92aWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gY29uZmlnW2NvbmZpZ0tleV0gPz8gY29uZmlnW2Nhbm9uaWNhbEVuZHBvaW50UGFyYW1LZXldO1xuICAgIGlmICh0eXBlb2YgY29uZmlnVmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGNvbmZpZ1ZhbHVlKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgfSwgXCJjb25maWdQcm92aWRlclwiKTtcbiAgaWYgKGNvbmZpZ0tleSA9PT0gXCJjcmVkZW50aWFsU2NvcGVcIiB8fCBjYW5vbmljYWxFbmRwb2ludFBhcmFtS2V5ID09PSBcIkNyZWRlbnRpYWxTY29wZVwiKSB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdHlwZW9mIGNvbmZpZy5jcmVkZW50aWFscyA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgY29uZmlnLmNyZWRlbnRpYWxzKCkgOiBjb25maWcuY3JlZGVudGlhbHM7XG4gICAgICBjb25zdCBjb25maWdWYWx1ZSA9IChjcmVkZW50aWFscyA9PSBudWxsID8gdm9pZCAwIDogY3JlZGVudGlhbHMuY3JlZGVudGlhbFNjb3BlKSA/PyAoY3JlZGVudGlhbHMgPT0gbnVsbCA/IHZvaWQgMCA6IGNyZWRlbnRpYWxzLkNyZWRlbnRpYWxTY29wZSk7XG4gICAgICByZXR1cm4gY29uZmlnVmFsdWU7XG4gICAgfTtcbiAgfVxuICBpZiAoY29uZmlnS2V5ID09PSBcImVuZHBvaW50XCIgfHwgY2Fub25pY2FsRW5kcG9pbnRQYXJhbUtleSA9PT0gXCJlbmRwb2ludFwiKSB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgY29uZmlnUHJvdmlkZXIoKTtcbiAgICAgIGlmIChlbmRwb2ludCAmJiB0eXBlb2YgZW5kcG9pbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKFwidXJsXCIgaW4gZW5kcG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4gZW5kcG9pbnQudXJsLmhyZWY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiaG9zdG5hbWVcIiBpbiBlbmRwb2ludCkge1xuICAgICAgICAgIGNvbnN0IHsgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBwYXRoIH0gPSBlbmRwb2ludDtcbiAgICAgICAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/IFwiOlwiICsgcG9ydCA6IFwiXCJ9JHtwYXRofWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbmRwb2ludDtcbiAgICB9O1xuICB9XG4gIHJldHVybiBjb25maWdQcm92aWRlcjtcbn0sIFwiY3JlYXRlQ29uZmlnVmFsdWVQcm92aWRlclwiKTtcblxuLy8gc3JjL2FkYXB0b3JzL2dldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucy50c1xudmFyIGltcG9ydF9nZXRFbmRwb2ludEZyb21Db25maWcgPSByZXF1aXJlKFwiLi9hZGFwdG9ycy9nZXRFbmRwb2ludEZyb21Db25maWdcIik7XG5cbi8vIHNyYy9hZGFwdG9ycy90b0VuZHBvaW50VjEudHNcbnZhciBpbXBvcnRfdXJsX3BhcnNlciA9IHJlcXVpcmUoXCJAc21pdGh5L3VybC1wYXJzZXJcIik7XG52YXIgdG9FbmRwb2ludFYxID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZW5kcG9pbnQpID0+IHtcbiAgaWYgKHR5cGVvZiBlbmRwb2ludCA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChcInVybFwiIGluIGVuZHBvaW50KSB7XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF91cmxfcGFyc2VyLnBhcnNlVXJsKShlbmRwb2ludC51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbiAgcmV0dXJuICgwLCBpbXBvcnRfdXJsX3BhcnNlci5wYXJzZVVybCkoZW5kcG9pbnQpO1xufSwgXCJ0b0VuZHBvaW50VjFcIik7XG5cbi8vIHNyYy9hZGFwdG9ycy9nZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMudHNcbnZhciBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChjb21tYW5kSW5wdXQsIGluc3RydWN0aW9uc1N1cHBsaWVyLCBjbGllbnRDb25maWcsIGNvbnRleHQpID0+IHtcbiAgaWYgKCFjbGllbnRDb25maWcuZW5kcG9pbnQpIHtcbiAgICBjb25zdCBlbmRwb2ludEZyb21Db25maWcgPSBhd2FpdCAoMCwgaW1wb3J0X2dldEVuZHBvaW50RnJvbUNvbmZpZy5nZXRFbmRwb2ludEZyb21Db25maWcpKGNsaWVudENvbmZpZy5zZXJ2aWNlSWQgfHwgXCJcIik7XG4gICAgaWYgKGVuZHBvaW50RnJvbUNvbmZpZykge1xuICAgICAgY2xpZW50Q29uZmlnLmVuZHBvaW50ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRvRW5kcG9pbnRWMShlbmRwb2ludEZyb21Db25maWcpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kcG9pbnRQYXJhbXMgPSBhd2FpdCByZXNvbHZlUGFyYW1zKGNvbW1hbmRJbnB1dCwgaW5zdHJ1Y3Rpb25zU3VwcGxpZXIsIGNsaWVudENvbmZpZyk7XG4gIGlmICh0eXBlb2YgY2xpZW50Q29uZmlnLmVuZHBvaW50UHJvdmlkZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvbmZpZy5lbmRwb2ludFByb3ZpZGVyIGlzIG5vdCBzZXQuXCIpO1xuICB9XG4gIGNvbnN0IGVuZHBvaW50ID0gY2xpZW50Q29uZmlnLmVuZHBvaW50UHJvdmlkZXIoZW5kcG9pbnRQYXJhbXMsIGNvbnRleHQpO1xuICByZXR1cm4gZW5kcG9pbnQ7XG59LCBcImdldEVuZHBvaW50RnJvbUluc3RydWN0aW9uc1wiKTtcbnZhciByZXNvbHZlUGFyYW1zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoY29tbWFuZElucHV0LCBpbnN0cnVjdGlvbnNTdXBwbGllciwgY2xpZW50Q29uZmlnKSA9PiB7XG4gIHZhciBfYTtcbiAgY29uc3QgZW5kcG9pbnRQYXJhbXMgPSB7fTtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gKChfYSA9IGluc3RydWN0aW9uc1N1cHBsaWVyID09IG51bGwgPyB2b2lkIDAgOiBpbnN0cnVjdGlvbnNTdXBwbGllci5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwoaW5zdHJ1Y3Rpb25zU3VwcGxpZXIpKSB8fCB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgaW5zdHJ1Y3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKGluc3RydWN0aW9ucykpIHtcbiAgICBzd2l0Y2ggKGluc3RydWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdGF0aWNDb250ZXh0UGFyYW1zXCI6XG4gICAgICAgIGVuZHBvaW50UGFyYW1zW25hbWVdID0gaW5zdHJ1Y3Rpb24udmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNvbnRleHRQYXJhbXNcIjpcbiAgICAgICAgZW5kcG9pbnRQYXJhbXNbbmFtZV0gPSBjb21tYW5kSW5wdXRbaW5zdHJ1Y3Rpb24ubmFtZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNsaWVudENvbnRleHRQYXJhbXNcIjpcbiAgICAgIGNhc2UgXCJidWlsdEluUGFyYW1zXCI6XG4gICAgICAgIGVuZHBvaW50UGFyYW1zW25hbWVdID0gYXdhaXQgY3JlYXRlQ29uZmlnVmFsdWVQcm92aWRlcihpbnN0cnVjdGlvbi5uYW1lLCBuYW1lLCBjbGllbnRDb25maWcpKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIGVuZHBvaW50IHBhcmFtZXRlciBpbnN0cnVjdGlvbjogXCIgKyBKU09OLnN0cmluZ2lmeShpbnN0cnVjdGlvbikpO1xuICAgIH1cbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoaW5zdHJ1Y3Rpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICBPYmplY3QuYXNzaWduKGVuZHBvaW50UGFyYW1zLCBjbGllbnRDb25maWcpO1xuICB9XG4gIGlmIChTdHJpbmcoY2xpZW50Q29uZmlnLnNlcnZpY2VJZCkudG9Mb3dlckNhc2UoKSA9PT0gXCJzM1wiKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhcmFtc0ZvclMzKGVuZHBvaW50UGFyYW1zKTtcbiAgfVxuICByZXR1cm4gZW5kcG9pbnRQYXJhbXM7XG59LCBcInJlc29sdmVQYXJhbXNcIik7XG5cbi8vIHNyYy9lbmRwb2ludE1pZGRsZXdhcmUudHNcbnZhciBpbXBvcnRfdXRpbF9taWRkbGV3YXJlID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlXCIpO1xudmFyIGVuZHBvaW50TWlkZGxld2FyZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHtcbiAgY29uZmlnLFxuICBpbnN0cnVjdGlvbnNcbn0pID0+IHtcbiAgcmV0dXJuIChuZXh0LCBjb250ZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zKFxuICAgICAgYXJncy5pbnB1dCxcbiAgICAgIHtcbiAgICAgICAgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgLi4uY29uZmlnIH0sXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgICBjb250ZXh0LmVuZHBvaW50VjIgPSBlbmRwb2ludDtcbiAgICBjb250ZXh0LmF1dGhTY2hlbWVzID0gKF9hID0gZW5kcG9pbnQucHJvcGVydGllcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmF1dGhTY2hlbWVzO1xuICAgIGNvbnN0IGF1dGhTY2hlbWUgPSAoX2IgPSBjb250ZXh0LmF1dGhTY2hlbWVzKSA9PSBudWxsID8gdm9pZCAwIDogX2JbMF07XG4gICAgaWYgKGF1dGhTY2hlbWUpIHtcbiAgICAgIGNvbnRleHRbXCJzaWduaW5nX3JlZ2lvblwiXSA9IGF1dGhTY2hlbWUuc2lnbmluZ1JlZ2lvbjtcbiAgICAgIGNvbnRleHRbXCJzaWduaW5nX3NlcnZpY2VcIl0gPSBhdXRoU2NoZW1lLnNpZ25pbmdOYW1lO1xuICAgICAgY29uc3Qgc21pdGh5Q29udGV4dCA9ICgwLCBpbXBvcnRfdXRpbF9taWRkbGV3YXJlLmdldFNtaXRoeUNvbnRleHQpKGNvbnRleHQpO1xuICAgICAgY29uc3QgaHR0cEF1dGhPcHRpb24gPSAoX2MgPSBzbWl0aHlDb250ZXh0ID09IG51bGwgPyB2b2lkIDAgOiBzbWl0aHlDb250ZXh0LnNlbGVjdGVkSHR0cEF1dGhTY2hlbWUpID09IG51bGwgPyB2b2lkIDAgOiBfYy5odHRwQXV0aE9wdGlvbjtcbiAgICAgIGlmIChodHRwQXV0aE9wdGlvbikge1xuICAgICAgICBodHRwQXV0aE9wdGlvbi5zaWduaW5nUHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgaHR0cEF1dGhPcHRpb24uc2lnbmluZ1Byb3BlcnRpZXMgfHwge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2lnbmluZ19yZWdpb246IGF1dGhTY2hlbWUuc2lnbmluZ1JlZ2lvbixcbiAgICAgICAgICAgIHNpZ25pbmdSZWdpb246IGF1dGhTY2hlbWUuc2lnbmluZ1JlZ2lvbixcbiAgICAgICAgICAgIHNpZ25pbmdfc2VydmljZTogYXV0aFNjaGVtZS5zaWduaW5nTmFtZSxcbiAgICAgICAgICAgIHNpZ25pbmdOYW1lOiBhdXRoU2NoZW1lLnNpZ25pbmdOYW1lLFxuICAgICAgICAgICAgc2lnbmluZ1JlZ2lvblNldDogYXV0aFNjaGVtZS5zaWduaW5nUmVnaW9uU2V0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdXRoU2NoZW1lLnByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHQoe1xuICAgICAgLi4uYXJnc1xuICAgIH0pO1xuICB9O1xufSwgXCJlbmRwb2ludE1pZGRsZXdhcmVcIik7XG5cbi8vIHNyYy9nZXRFbmRwb2ludFBsdWdpbi50c1xudmFyIGltcG9ydF9taWRkbGV3YXJlX3NlcmRlID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbnZhciBlbmRwb2ludE1pZGRsZXdhcmVPcHRpb25zID0ge1xuICBzdGVwOiBcInNlcmlhbGl6ZVwiLFxuICB0YWdzOiBbXCJFTkRQT0lOVF9QQVJBTUVURVJTXCIsIFwiRU5EUE9JTlRfVjJcIiwgXCJFTkRQT0lOVFwiXSxcbiAgbmFtZTogXCJlbmRwb2ludFYyTWlkZGxld2FyZVwiLFxuICBvdmVycmlkZTogdHJ1ZSxcbiAgcmVsYXRpb246IFwiYmVmb3JlXCIsXG4gIHRvTWlkZGxld2FyZTogaW1wb3J0X21pZGRsZXdhcmVfc2VyZGUuc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24ubmFtZVxufTtcbnZhciBnZXRFbmRwb2ludFBsdWdpbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZywgaW5zdHJ1Y3Rpb25zKSA9PiAoe1xuICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgIGNsaWVudFN0YWNrLmFkZFJlbGF0aXZlVG8oXG4gICAgICBlbmRwb2ludE1pZGRsZXdhcmUoe1xuICAgICAgICBjb25maWcsXG4gICAgICAgIGluc3RydWN0aW9uc1xuICAgICAgfSksXG4gICAgICBlbmRwb2ludE1pZGRsZXdhcmVPcHRpb25zXG4gICAgKTtcbiAgfVxufSksIFwiZ2V0RW5kcG9pbnRQbHVnaW5cIik7XG5cbi8vIHNyYy9yZXNvbHZlRW5kcG9pbnRDb25maWcudHNcblxudmFyIHJlc29sdmVFbmRwb2ludENvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0KSA9PiB7XG4gIGNvbnN0IHRscyA9IGlucHV0LnRscyA/PyB0cnVlO1xuICBjb25zdCB7IGVuZHBvaW50IH0gPSBpbnB1dDtcbiAgY29uc3QgY3VzdG9tRW5kcG9pbnRQcm92aWRlciA9IGVuZHBvaW50ICE9IG51bGwgPyBhc3luYyAoKSA9PiB0b0VuZHBvaW50VjEoYXdhaXQgKDAsIGltcG9ydF91dGlsX21pZGRsZXdhcmUubm9ybWFsaXplUHJvdmlkZXIpKGVuZHBvaW50KSgpKSA6IHZvaWQgMDtcbiAgY29uc3QgaXNDdXN0b21FbmRwb2ludCA9ICEhZW5kcG9pbnQ7XG4gIHJldHVybiB7XG4gICAgLi4uaW5wdXQsXG4gICAgZW5kcG9pbnQ6IGN1c3RvbUVuZHBvaW50UHJvdmlkZXIsXG4gICAgdGxzLFxuICAgIGlzQ3VzdG9tRW5kcG9pbnQsXG4gICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6ICgwLCBpbXBvcnRfdXRpbF9taWRkbGV3YXJlLm5vcm1hbGl6ZVByb3ZpZGVyKShpbnB1dC51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyBmYWxzZSksXG4gICAgdXNlRmlwc0VuZHBvaW50OiAoMCwgaW1wb3J0X3V0aWxfbWlkZGxld2FyZS5ub3JtYWxpemVQcm92aWRlcikoaW5wdXQudXNlRmlwc0VuZHBvaW50ID8/IGZhbHNlKVxuICB9O1xufSwgXCJyZXNvbHZlRW5kcG9pbnRDb25maWdcIik7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG5cbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMsXG4gIHJlc29sdmVQYXJhbXMsXG4gIHRvRW5kcG9pbnRWMSxcbiAgZW5kcG9pbnRNaWRkbGV3YXJlLFxuICBlbmRwb2ludE1pZGRsZXdhcmVPcHRpb25zLFxuICBnZXRFbmRwb2ludFBsdWdpbixcbiAgcmVzb2x2ZUVuZHBvaW50Q29uZmlnXG59KTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJuZztcblxudmFyIF9jcnlwdG8gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCBybmRzOFBvb2wgPSBuZXcgVWludDhBcnJheSgyNTYpOyAvLyAjIG9mIHJhbmRvbSB2YWx1ZXMgdG8gcHJlLWFsbG9jYXRlXG5cbmxldCBwb29sUHRyID0gcm5kczhQb29sLmxlbmd0aDtcblxuZnVuY3Rpb24gcm5nKCkge1xuICBpZiAocG9vbFB0ciA+IHJuZHM4UG9vbC5sZW5ndGggLSAxNikge1xuICAgIF9jcnlwdG8uZGVmYXVsdC5yYW5kb21GaWxsU3luYyhybmRzOFBvb2wpO1xuXG4gICAgcG9vbFB0ciA9IDA7XG4gIH1cblxuICByZXR1cm4gcm5kczhQb29sLnNsaWNlKHBvb2xQdHIsIHBvb2xQdHIgKz0gMTYpO1xufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLnVuc2FmZVN0cmluZ2lmeSA9IHVuc2FmZVN0cmluZ2lmeTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5sZXQgX25vZGVJZDtcblxubGV0IF9jbG9ja3NlcTsgLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG5cblxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgbGV0IGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIGxldCBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgbGV0IG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgY29uc3QgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwOyAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG5cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfSAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG5cblxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfSAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG5cblxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTsgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG5cbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7IC8vIGB0aW1lX2xvd2BcblxuICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICBjb25zdCB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHYxO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbnZhciBfZGVmYXVsdCA9IHBhcnNlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShieXRlcykpIHtcbiAgICBieXRlcyA9IEJ1ZmZlci5mcm9tKGJ5dGVzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcywgJ3V0ZjgnKTtcbiAgfVxuXG4gIHJldHVybiBfY3J5cHRvLmRlZmF1bHQuY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGJ5dGVzKS5kaWdlc3QoKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX21kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZDUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCB2MyA9ICgwLCBfdi5kZWZhdWx0KSgndjMnLCAweDMwLCBfbWQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2MztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiY3J5cHRvXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEOiBfY3J5cHRvLmRlZmF1bHQucmFuZG9tVVVJRFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMsICd1dGY4Jyk7XG4gIH1cblxuICByZXR1cm4gX2NyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzaGExO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9uaWwuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcGFyc2UuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF92LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgaXNDbG9ja1NrZXdDb3JyZWN0ZWRFcnJvcjogKCkgPT4gaXNDbG9ja1NrZXdDb3JyZWN0ZWRFcnJvcixcbiAgaXNDbG9ja1NrZXdFcnJvcjogKCkgPT4gaXNDbG9ja1NrZXdFcnJvcixcbiAgaXNSZXRyeWFibGVCeVRyYWl0OiAoKSA9PiBpc1JldHJ5YWJsZUJ5VHJhaXQsXG4gIGlzU2VydmVyRXJyb3I6ICgpID0+IGlzU2VydmVyRXJyb3IsXG4gIGlzVGhyb3R0bGluZ0Vycm9yOiAoKSA9PiBpc1Rocm90dGxpbmdFcnJvcixcbiAgaXNUcmFuc2llbnRFcnJvcjogKCkgPT4gaXNUcmFuc2llbnRFcnJvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9jb25zdGFudHMudHNcbnZhciBDTE9DS19TS0VXX0VSUk9SX0NPREVTID0gW1xuICBcIkF1dGhGYWlsdXJlXCIsXG4gIFwiSW52YWxpZFNpZ25hdHVyZUV4Y2VwdGlvblwiLFxuICBcIlJlcXVlc3RFeHBpcmVkXCIsXG4gIFwiUmVxdWVzdEluVGhlRnV0dXJlXCIsXG4gIFwiUmVxdWVzdFRpbWVUb29Ta2V3ZWRcIixcbiAgXCJTaWduYXR1cmVEb2VzTm90TWF0Y2hcIlxuXTtcbnZhciBUSFJPVFRMSU5HX0VSUk9SX0NPREVTID0gW1xuICBcIkJhbmR3aWR0aExpbWl0RXhjZWVkZWRcIixcbiAgXCJFQzJUaHJvdHRsZWRFeGNlcHRpb25cIixcbiAgXCJMaW1pdEV4Y2VlZGVkRXhjZXB0aW9uXCIsXG4gIFwiUHJpb3JSZXF1ZXN0Tm90Q29tcGxldGVcIixcbiAgXCJQcm92aXNpb25lZFRocm91Z2hwdXRFeGNlZWRlZEV4Y2VwdGlvblwiLFxuICBcIlJlcXVlc3RMaW1pdEV4Y2VlZGVkXCIsXG4gIFwiUmVxdWVzdFRocm90dGxlZFwiLFxuICBcIlJlcXVlc3RUaHJvdHRsZWRFeGNlcHRpb25cIixcbiAgXCJTbG93RG93blwiLFxuICBcIlRocm90dGxlZEV4Y2VwdGlvblwiLFxuICBcIlRocm90dGxpbmdcIixcbiAgXCJUaHJvdHRsaW5nRXhjZXB0aW9uXCIsXG4gIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCIsXG4gIFwiVHJhbnNhY3Rpb25JblByb2dyZXNzRXhjZXB0aW9uXCJcbiAgLy8gRHluYW1vREJcbl07XG52YXIgVFJBTlNJRU5UX0VSUk9SX0NPREVTID0gW1wiVGltZW91dEVycm9yXCIsIFwiUmVxdWVzdFRpbWVvdXRcIiwgXCJSZXF1ZXN0VGltZW91dEV4Y2VwdGlvblwiXTtcbnZhciBUUkFOU0lFTlRfRVJST1JfU1RBVFVTX0NPREVTID0gWzUwMCwgNTAyLCA1MDMsIDUwNF07XG52YXIgTk9ERUpTX1RJTUVPVVRfRVJST1JfQ09ERVMgPSBbXCJFQ09OTlJFU0VUXCIsIFwiRUNPTk5SRUZVU0VEXCIsIFwiRVBJUEVcIiwgXCJFVElNRURPVVRcIl07XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIGlzUmV0cnlhYmxlQnlUcmFpdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVycm9yKSA9PiBlcnJvci4kcmV0cnlhYmxlICE9PSB2b2lkIDAsIFwiaXNSZXRyeWFibGVCeVRyYWl0XCIpO1xudmFyIGlzQ2xvY2tTa2V3RXJyb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlcnJvcikgPT4gQ0xPQ0tfU0tFV19FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnJvci5uYW1lKSwgXCJpc0Nsb2NrU2tld0Vycm9yXCIpO1xudmFyIGlzQ2xvY2tTa2V3Q29ycmVjdGVkRXJyb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlcnJvcikgPT4ge1xuICB2YXIgX2E7XG4gIHJldHVybiAoX2EgPSBlcnJvci4kbWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jbG9ja1NrZXdDb3JyZWN0ZWQ7XG59LCBcImlzQ2xvY2tTa2V3Q29ycmVjdGVkRXJyb3JcIik7XG52YXIgaXNUaHJvdHRsaW5nRXJyb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlcnJvcikgPT4ge1xuICB2YXIgX2EsIF9iO1xuICByZXR1cm4gKChfYSA9IGVycm9yLiRtZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmh0dHBTdGF0dXNDb2RlKSA9PT0gNDI5IHx8IFRIUk9UVExJTkdfRVJST1JfQ09ERVMuaW5jbHVkZXMoZXJyb3IubmFtZSkgfHwgKChfYiA9IGVycm9yLiRyZXRyeWFibGUpID09IG51bGwgPyB2b2lkIDAgOiBfYi50aHJvdHRsaW5nKSA9PSB0cnVlO1xufSwgXCJpc1Rocm90dGxpbmdFcnJvclwiKTtcbnZhciBpc1RyYW5zaWVudEVycm9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZXJyb3IpID0+IHtcbiAgdmFyIF9hO1xuICByZXR1cm4gaXNDbG9ja1NrZXdDb3JyZWN0ZWRFcnJvcihlcnJvcikgfHwgVFJBTlNJRU5UX0VSUk9SX0NPREVTLmluY2x1ZGVzKGVycm9yLm5hbWUpIHx8IE5PREVKU19USU1FT1VUX0VSUk9SX0NPREVTLmluY2x1ZGVzKChlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3IuY29kZSkgfHwgXCJcIikgfHwgVFJBTlNJRU5UX0VSUk9SX1NUQVRVU19DT0RFUy5pbmNsdWRlcygoKF9hID0gZXJyb3IuJG1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaHR0cFN0YXR1c0NvZGUpIHx8IDApO1xufSwgXCJpc1RyYW5zaWVudEVycm9yXCIpO1xudmFyIGlzU2VydmVyRXJyb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlcnJvcikgPT4ge1xuICB2YXIgX2E7XG4gIGlmICgoKF9hID0gZXJyb3IuJG1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaHR0cFN0YXR1c0NvZGUpICE9PSB2b2lkIDApIHtcbiAgICBjb25zdCBzdGF0dXNDb2RlID0gZXJyb3IuJG1ldGFkYXRhLmh0dHBTdGF0dXNDb2RlO1xuICAgIGlmICg1MDAgPD0gc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlIDw9IDU5OSAmJiAhaXNUcmFuc2llbnRFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJpc1NlcnZlckVycm9yXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNSZXRyeWFibGVCeVRyYWl0LFxuICBpc0Nsb2NrU2tld0Vycm9yLFxuICBpc0Nsb2NrU2tld0NvcnJlY3RlZEVycm9yLFxuICBpc1Rocm90dGxpbmdFcnJvcixcbiAgaXNUcmFuc2llbnRFcnJvcixcbiAgaXNTZXJ2ZXJFcnJvclxufSk7XG5cbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIEFkYXB0aXZlUmV0cnlTdHJhdGVneTogKCkgPT4gQWRhcHRpdmVSZXRyeVN0cmF0ZWd5LFxuICBDb25maWd1cmVkUmV0cnlTdHJhdGVneTogKCkgPT4gQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3ksXG4gIERFRkFVTFRfTUFYX0FUVEVNUFRTOiAoKSA9PiBERUZBVUxUX01BWF9BVFRFTVBUUyxcbiAgREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFOiAoKSA9PiBERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0UsXG4gIERFRkFVTFRfUkVUUllfTU9ERTogKCkgPT4gREVGQVVMVF9SRVRSWV9NT0RFLFxuICBEZWZhdWx0UmF0ZUxpbWl0ZXI6ICgpID0+IERlZmF1bHRSYXRlTGltaXRlcixcbiAgSU5JVElBTF9SRVRSWV9UT0tFTlM6ICgpID0+IElOSVRJQUxfUkVUUllfVE9LRU5TLFxuICBJTlZPQ0FUSU9OX0lEX0hFQURFUjogKCkgPT4gSU5WT0NBVElPTl9JRF9IRUFERVIsXG4gIE1BWElNVU1fUkVUUllfREVMQVk6ICgpID0+IE1BWElNVU1fUkVUUllfREVMQVksXG4gIE5PX1JFVFJZX0lOQ1JFTUVOVDogKCkgPT4gTk9fUkVUUllfSU5DUkVNRU5ULFxuICBSRVFVRVNUX0hFQURFUjogKCkgPT4gUkVRVUVTVF9IRUFERVIsXG4gIFJFVFJZX0NPU1Q6ICgpID0+IFJFVFJZX0NPU1QsXG4gIFJFVFJZX01PREVTOiAoKSA9PiBSRVRSWV9NT0RFUyxcbiAgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5OiAoKSA9PiBTdGFuZGFyZFJldHJ5U3RyYXRlZ3ksXG4gIFRIUk9UVExJTkdfUkVUUllfREVMQVlfQkFTRTogKCkgPT4gVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFLFxuICBUSU1FT1VUX1JFVFJZX0NPU1Q6ICgpID0+IFRJTUVPVVRfUkVUUllfQ09TVFxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9jb25maWcudHNcbnZhciBSRVRSWV9NT0RFUyA9IC8qIEBfX1BVUkVfXyAqLyAoKFJFVFJZX01PREVTMikgPT4ge1xuICBSRVRSWV9NT0RFUzJbXCJTVEFOREFSRFwiXSA9IFwic3RhbmRhcmRcIjtcbiAgUkVUUllfTU9ERVMyW1wiQURBUFRJVkVcIl0gPSBcImFkYXB0aXZlXCI7XG4gIHJldHVybiBSRVRSWV9NT0RFUzI7XG59KShSRVRSWV9NT0RFUyB8fCB7fSk7XG52YXIgREVGQVVMVF9NQVhfQVRURU1QVFMgPSAzO1xudmFyIERFRkFVTFRfUkVUUllfTU9ERSA9IFwic3RhbmRhcmRcIiAvKiBTVEFOREFSRCAqLztcblxuLy8gc3JjL0RlZmF1bHRSYXRlTGltaXRlci50c1xudmFyIGltcG9ydF9zZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uID0gcmVxdWlyZShcIkBzbWl0aHkvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvblwiKTtcbnZhciBfRGVmYXVsdFJhdGVMaW1pdGVyID0gY2xhc3MgX0RlZmF1bHRSYXRlTGltaXRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAvLyBQcmUtc2V0IHN0YXRlIHZhcmlhYmxlc1xuICAgIHRoaXMuY3VycmVudENhcGFjaXR5ID0gMDtcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RNYXhSYXRlID0gMDtcbiAgICB0aGlzLm1lYXN1cmVkVHhSYXRlID0gMDtcbiAgICB0aGlzLnJlcXVlc3RDb3VudCA9IDA7XG4gICAgdGhpcy5sYXN0VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLnRpbWVXaW5kb3cgPSAwO1xuICAgIHRoaXMuYmV0YSA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmJldGEpID8/IDAuNztcbiAgICB0aGlzLm1pbkNhcGFjaXR5ID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubWluQ2FwYWNpdHkpID8/IDE7XG4gICAgdGhpcy5taW5GaWxsUmF0ZSA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1pbkZpbGxSYXRlKSA/PyAwLjU7XG4gICAgdGhpcy5zY2FsZUNvbnN0YW50ID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2NhbGVDb25zdGFudCkgPz8gMC40O1xuICAgIHRoaXMuc21vb3RoID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc21vb3RoKSA/PyAwLjg7XG4gICAgY29uc3QgY3VycmVudFRpbWVJblNlY29uZHMgPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCk7XG4gICAgdGhpcy5sYXN0VGhyb3R0bGVUaW1lID0gY3VycmVudFRpbWVJblNlY29uZHM7XG4gICAgdGhpcy5sYXN0VHhSYXRlQnVja2V0ID0gTWF0aC5mbG9vcih0aGlzLmdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCkpO1xuICAgIHRoaXMuZmlsbFJhdGUgPSB0aGlzLm1pbkZpbGxSYXRlO1xuICAgIHRoaXMubWF4Q2FwYWNpdHkgPSB0aGlzLm1pbkNhcGFjaXR5O1xuICB9XG4gIGdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC8gMWUzO1xuICB9XG4gIGFzeW5jIGdldFNlbmRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5CdWNrZXQoMSk7XG4gIH1cbiAgYXN5bmMgYWNxdWlyZVRva2VuQnVja2V0KGFtb3VudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVmaWxsVG9rZW5CdWNrZXQoKTtcbiAgICBpZiAoYW1vdW50ID4gdGhpcy5jdXJyZW50Q2FwYWNpdHkpIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gKGFtb3VudCAtIHRoaXMuY3VycmVudENhcGFjaXR5KSAvIHRoaXMuZmlsbFJhdGUgKiAxZTM7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRDYXBhY2l0eSA9IHRoaXMuY3VycmVudENhcGFjaXR5IC0gYW1vdW50O1xuICB9XG4gIHJlZmlsbFRva2VuQnVja2V0KCkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuZ2V0Q3VycmVudFRpbWVJblNlY29uZHMoKTtcbiAgICBpZiAoIXRoaXMubGFzdFRpbWVzdGFtcCkge1xuICAgICAgdGhpcy5sYXN0VGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxsQW1vdW50ID0gKHRpbWVzdGFtcCAtIHRoaXMubGFzdFRpbWVzdGFtcCkgKiB0aGlzLmZpbGxSYXRlO1xuICAgIHRoaXMuY3VycmVudENhcGFjaXR5ID0gTWF0aC5taW4odGhpcy5tYXhDYXBhY2l0eSwgdGhpcy5jdXJyZW50Q2FwYWNpdHkgKyBmaWxsQW1vdW50KTtcbiAgICB0aGlzLmxhc3RUaW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gIH1cbiAgdXBkYXRlQ2xpZW50U2VuZGluZ1JhdGUocmVzcG9uc2UpIHtcbiAgICBsZXQgY2FsY3VsYXRlZFJhdGU7XG4gICAgdGhpcy51cGRhdGVNZWFzdXJlZFJhdGUoKTtcbiAgICBpZiAoKDAsIGltcG9ydF9zZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uLmlzVGhyb3R0bGluZ0Vycm9yKShyZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IHJhdGVUb1VzZSA9ICF0aGlzLmVuYWJsZWQgPyB0aGlzLm1lYXN1cmVkVHhSYXRlIDogTWF0aC5taW4odGhpcy5tZWFzdXJlZFR4UmF0ZSwgdGhpcy5maWxsUmF0ZSk7XG4gICAgICB0aGlzLmxhc3RNYXhSYXRlID0gcmF0ZVRvVXNlO1xuICAgICAgdGhpcy5jYWxjdWxhdGVUaW1lV2luZG93KCk7XG4gICAgICB0aGlzLmxhc3RUaHJvdHRsZVRpbWUgPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCk7XG4gICAgICBjYWxjdWxhdGVkUmF0ZSA9IHRoaXMuY3ViaWNUaHJvdHRsZShyYXRlVG9Vc2UpO1xuICAgICAgdGhpcy5lbmFibGVUb2tlbkJ1Y2tldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVRpbWVXaW5kb3coKTtcbiAgICAgIGNhbGN1bGF0ZWRSYXRlID0gdGhpcy5jdWJpY1N1Y2Nlc3ModGhpcy5nZXRDdXJyZW50VGltZUluU2Vjb25kcygpKTtcbiAgICB9XG4gICAgY29uc3QgbmV3UmF0ZSA9IE1hdGgubWluKGNhbGN1bGF0ZWRSYXRlLCAyICogdGhpcy5tZWFzdXJlZFR4UmF0ZSk7XG4gICAgdGhpcy51cGRhdGVUb2tlbkJ1Y2tldFJhdGUobmV3UmF0ZSk7XG4gIH1cbiAgY2FsY3VsYXRlVGltZVdpbmRvdygpIHtcbiAgICB0aGlzLnRpbWVXaW5kb3cgPSB0aGlzLmdldFByZWNpc2UoTWF0aC5wb3codGhpcy5sYXN0TWF4UmF0ZSAqICgxIC0gdGhpcy5iZXRhKSAvIHRoaXMuc2NhbGVDb25zdGFudCwgMSAvIDMpKTtcbiAgfVxuICBjdWJpY1Rocm90dGxlKHJhdGVUb1VzZSkge1xuICAgIHJldHVybiB0aGlzLmdldFByZWNpc2UocmF0ZVRvVXNlICogdGhpcy5iZXRhKTtcbiAgfVxuICBjdWJpY1N1Y2Nlc3ModGltZXN0YW1wKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJlY2lzZShcbiAgICAgIHRoaXMuc2NhbGVDb25zdGFudCAqIE1hdGgucG93KHRpbWVzdGFtcCAtIHRoaXMubGFzdFRocm90dGxlVGltZSAtIHRoaXMudGltZVdpbmRvdywgMykgKyB0aGlzLmxhc3RNYXhSYXRlXG4gICAgKTtcbiAgfVxuICBlbmFibGVUb2tlbkJ1Y2tldCgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICB9XG4gIHVwZGF0ZVRva2VuQnVja2V0UmF0ZShuZXdSYXRlKSB7XG4gICAgdGhpcy5yZWZpbGxUb2tlbkJ1Y2tldCgpO1xuICAgIHRoaXMuZmlsbFJhdGUgPSBNYXRoLm1heChuZXdSYXRlLCB0aGlzLm1pbkZpbGxSYXRlKTtcbiAgICB0aGlzLm1heENhcGFjaXR5ID0gTWF0aC5tYXgobmV3UmF0ZSwgdGhpcy5taW5DYXBhY2l0eSk7XG4gICAgdGhpcy5jdXJyZW50Q2FwYWNpdHkgPSBNYXRoLm1pbih0aGlzLmN1cnJlbnRDYXBhY2l0eSwgdGhpcy5tYXhDYXBhY2l0eSk7XG4gIH1cbiAgdXBkYXRlTWVhc3VyZWRSYXRlKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5TZWNvbmRzKCk7XG4gICAgY29uc3QgdGltZUJ1Y2tldCA9IE1hdGguZmxvb3IodCAqIDIpIC8gMjtcbiAgICB0aGlzLnJlcXVlc3RDb3VudCsrO1xuICAgIGlmICh0aW1lQnVja2V0ID4gdGhpcy5sYXN0VHhSYXRlQnVja2V0KSB7XG4gICAgICBjb25zdCBjdXJyZW50UmF0ZSA9IHRoaXMucmVxdWVzdENvdW50IC8gKHRpbWVCdWNrZXQgLSB0aGlzLmxhc3RUeFJhdGVCdWNrZXQpO1xuICAgICAgdGhpcy5tZWFzdXJlZFR4UmF0ZSA9IHRoaXMuZ2V0UHJlY2lzZShjdXJyZW50UmF0ZSAqIHRoaXMuc21vb3RoICsgdGhpcy5tZWFzdXJlZFR4UmF0ZSAqICgxIC0gdGhpcy5zbW9vdGgpKTtcbiAgICAgIHRoaXMucmVxdWVzdENvdW50ID0gMDtcbiAgICAgIHRoaXMubGFzdFR4UmF0ZUJ1Y2tldCA9IHRpbWVCdWNrZXQ7XG4gICAgfVxuICB9XG4gIGdldFByZWNpc2UobnVtKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoOCkpO1xuICB9XG59O1xuX19uYW1lKF9EZWZhdWx0UmF0ZUxpbWl0ZXIsIFwiRGVmYXVsdFJhdGVMaW1pdGVyXCIpO1xudmFyIERlZmF1bHRSYXRlTGltaXRlciA9IF9EZWZhdWx0UmF0ZUxpbWl0ZXI7XG5cbi8vIHNyYy9jb25zdGFudHMudHNcbnZhciBERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0UgPSAxMDA7XG52YXIgTUFYSU1VTV9SRVRSWV9ERUxBWSA9IDIwICogMWUzO1xudmFyIFRIUk9UVExJTkdfUkVUUllfREVMQVlfQkFTRSA9IDUwMDtcbnZhciBJTklUSUFMX1JFVFJZX1RPS0VOUyA9IDUwMDtcbnZhciBSRVRSWV9DT1NUID0gNTtcbnZhciBUSU1FT1VUX1JFVFJZX0NPU1QgPSAxMDtcbnZhciBOT19SRVRSWV9JTkNSRU1FTlQgPSAxO1xudmFyIElOVk9DQVRJT05fSURfSEVBREVSID0gXCJhbXotc2RrLWludm9jYXRpb24taWRcIjtcbnZhciBSRVFVRVNUX0hFQURFUiA9IFwiYW16LXNkay1yZXF1ZXN0XCI7XG5cbi8vIHNyYy9kZWZhdWx0UmV0cnlCYWNrb2ZmU3RyYXRlZ3kudHNcbnZhciBnZXREZWZhdWx0UmV0cnlCYWNrb2ZmU3RyYXRlZ3kgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgbGV0IGRlbGF5QmFzZSA9IERFRkFVTFRfUkVUUllfREVMQVlfQkFTRTtcbiAgY29uc3QgY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhdHRlbXB0cykgPT4ge1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgubWluKE1BWElNVU1fUkVUUllfREVMQVksIE1hdGgucmFuZG9tKCkgKiAyICoqIGF0dGVtcHRzICogZGVsYXlCYXNlKSk7XG4gIH0sIFwiY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXlcIik7XG4gIGNvbnN0IHNldERlbGF5QmFzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRlbGF5KSA9PiB7XG4gICAgZGVsYXlCYXNlID0gZGVsYXk7XG4gIH0sIFwic2V0RGVsYXlCYXNlXCIpO1xuICByZXR1cm4ge1xuICAgIGNvbXB1dGVOZXh0QmFja29mZkRlbGF5LFxuICAgIHNldERlbGF5QmFzZVxuICB9O1xufSwgXCJnZXREZWZhdWx0UmV0cnlCYWNrb2ZmU3RyYXRlZ3lcIik7XG5cbi8vIHNyYy9kZWZhdWx0UmV0cnlUb2tlbi50c1xudmFyIGNyZWF0ZURlZmF1bHRSZXRyeVRva2VuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoe1xuICByZXRyeURlbGF5LFxuICByZXRyeUNvdW50LFxuICByZXRyeUNvc3Rcbn0pID0+IHtcbiAgY29uc3QgZ2V0UmV0cnlDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gcmV0cnlDb3VudCwgXCJnZXRSZXRyeUNvdW50XCIpO1xuICBjb25zdCBnZXRSZXRyeURlbGF5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLm1pbihNQVhJTVVNX1JFVFJZX0RFTEFZLCByZXRyeURlbGF5KSwgXCJnZXRSZXRyeURlbGF5XCIpO1xuICBjb25zdCBnZXRSZXRyeUNvc3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHJldHJ5Q29zdCwgXCJnZXRSZXRyeUNvc3RcIik7XG4gIHJldHVybiB7XG4gICAgZ2V0UmV0cnlDb3VudCxcbiAgICBnZXRSZXRyeURlbGF5LFxuICAgIGdldFJldHJ5Q29zdFxuICB9O1xufSwgXCJjcmVhdGVEZWZhdWx0UmV0cnlUb2tlblwiKTtcblxuLy8gc3JjL1N0YW5kYXJkUmV0cnlTdHJhdGVneS50c1xudmFyIF9TdGFuZGFyZFJldHJ5U3RyYXRlZ3kgPSBjbGFzcyBfU3RhbmRhcmRSZXRyeVN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IobWF4QXR0ZW1wdHMpIHtcbiAgICB0aGlzLm1heEF0dGVtcHRzID0gbWF4QXR0ZW1wdHM7XG4gICAgdGhpcy5tb2RlID0gXCJzdGFuZGFyZFwiIC8qIFNUQU5EQVJEICovO1xuICAgIHRoaXMuY2FwYWNpdHkgPSBJTklUSUFMX1JFVFJZX1RPS0VOUztcbiAgICB0aGlzLnJldHJ5QmFja29mZlN0cmF0ZWd5ID0gZ2V0RGVmYXVsdFJldHJ5QmFja29mZlN0cmF0ZWd5KCk7XG4gICAgdGhpcy5tYXhBdHRlbXB0c1Byb3ZpZGVyID0gdHlwZW9mIG1heEF0dGVtcHRzID09PSBcImZ1bmN0aW9uXCIgPyBtYXhBdHRlbXB0cyA6IGFzeW5jICgpID0+IG1heEF0dGVtcHRzO1xuICB9XG4gIGFzeW5jIGFjcXVpcmVJbml0aWFsUmV0cnlUb2tlbihyZXRyeVRva2VuU2NvcGUpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVmYXVsdFJldHJ5VG9rZW4oe1xuICAgICAgcmV0cnlEZWxheTogREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFLFxuICAgICAgcmV0cnlDb3VudDogMFxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHJlZnJlc2hSZXRyeVRva2VuRm9yUmV0cnkodG9rZW4sIGVycm9ySW5mbykge1xuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gYXdhaXQgdGhpcy5nZXRNYXhBdHRlbXB0cygpO1xuICAgIGlmICh0aGlzLnNob3VsZFJldHJ5KHRva2VuLCBlcnJvckluZm8sIG1heEF0dGVtcHRzKSkge1xuICAgICAgY29uc3QgZXJyb3JUeXBlID0gZXJyb3JJbmZvLmVycm9yVHlwZTtcbiAgICAgIHRoaXMucmV0cnlCYWNrb2ZmU3RyYXRlZ3kuc2V0RGVsYXlCYXNlKFxuICAgICAgICBlcnJvclR5cGUgPT09IFwiVEhST1RUTElOR1wiID8gVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFIDogREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFXG4gICAgICApO1xuICAgICAgY29uc3QgZGVsYXlGcm9tRXJyb3JUeXBlID0gdGhpcy5yZXRyeUJhY2tvZmZTdHJhdGVneS5jb21wdXRlTmV4dEJhY2tvZmZEZWxheSh0b2tlbi5nZXRSZXRyeUNvdW50KCkpO1xuICAgICAgY29uc3QgcmV0cnlEZWxheSA9IGVycm9ySW5mby5yZXRyeUFmdGVySGludCA/IE1hdGgubWF4KGVycm9ySW5mby5yZXRyeUFmdGVySGludC5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIHx8IDAsIGRlbGF5RnJvbUVycm9yVHlwZSkgOiBkZWxheUZyb21FcnJvclR5cGU7XG4gICAgICBjb25zdCBjYXBhY2l0eUNvc3QgPSB0aGlzLmdldENhcGFjaXR5Q29zdChlcnJvclR5cGUpO1xuICAgICAgdGhpcy5jYXBhY2l0eSAtPSBjYXBhY2l0eUNvc3Q7XG4gICAgICByZXR1cm4gY3JlYXRlRGVmYXVsdFJldHJ5VG9rZW4oe1xuICAgICAgICByZXRyeURlbGF5LFxuICAgICAgICByZXRyeUNvdW50OiB0b2tlbi5nZXRSZXRyeUNvdW50KCkgKyAxLFxuICAgICAgICByZXRyeUNvc3Q6IGNhcGFjaXR5Q29zdFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJldHJ5IHRva2VuIGF2YWlsYWJsZVwiKTtcbiAgfVxuICByZWNvcmRTdWNjZXNzKHRva2VuKSB7XG4gICAgdGhpcy5jYXBhY2l0eSA9IE1hdGgubWF4KElOSVRJQUxfUkVUUllfVE9LRU5TLCB0aGlzLmNhcGFjaXR5ICsgKHRva2VuLmdldFJldHJ5Q29zdCgpID8/IE5PX1JFVFJZX0lOQ1JFTUVOVCkpO1xuICB9XG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBhdmFpbGFibGUgcmV0cnkgY2FwYWNpdHkuXG4gICAqXG4gICAqIFRoaXMgbnVtYmVyIGRlY3JlYXNlcyB3aGVuIHJldHJpZXMgYXJlIGV4ZWN1dGVkIGFuZCByZWZpbGxzIHdoZW4gcmVxdWVzdHMgb3IgcmV0cmllcyBzdWNjZWVkLlxuICAgKi9cbiAgZ2V0Q2FwYWNpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FwYWNpdHk7XG4gIH1cbiAgYXN5bmMgZ2V0TWF4QXR0ZW1wdHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1heEF0dGVtcHRzUHJvdmlkZXIoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGBNYXggYXR0ZW1wdHMgcHJvdmlkZXIgY291bGQgbm90IHJlc29sdmUuIFVzaW5nIGRlZmF1bHQgb2YgJHtERUZBVUxUX01BWF9BVFRFTVBUU31gKTtcbiAgICAgIHJldHVybiBERUZBVUxUX01BWF9BVFRFTVBUUztcbiAgICB9XG4gIH1cbiAgc2hvdWxkUmV0cnkodG9rZW5Ub1JlbmV3LCBlcnJvckluZm8sIG1heEF0dGVtcHRzKSB7XG4gICAgY29uc3QgYXR0ZW1wdHMgPSB0b2tlblRvUmVuZXcuZ2V0UmV0cnlDb3VudCgpICsgMTtcbiAgICByZXR1cm4gYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyAmJiB0aGlzLmNhcGFjaXR5ID49IHRoaXMuZ2V0Q2FwYWNpdHlDb3N0KGVycm9ySW5mby5lcnJvclR5cGUpICYmIHRoaXMuaXNSZXRyeWFibGVFcnJvcihlcnJvckluZm8uZXJyb3JUeXBlKTtcbiAgfVxuICBnZXRDYXBhY2l0eUNvc3QoZXJyb3JUeXBlKSB7XG4gICAgcmV0dXJuIGVycm9yVHlwZSA9PT0gXCJUUkFOU0lFTlRcIiA/IFRJTUVPVVRfUkVUUllfQ09TVCA6IFJFVFJZX0NPU1Q7XG4gIH1cbiAgaXNSZXRyeWFibGVFcnJvcihlcnJvclR5cGUpIHtcbiAgICByZXR1cm4gZXJyb3JUeXBlID09PSBcIlRIUk9UVExJTkdcIiB8fCBlcnJvclR5cGUgPT09IFwiVFJBTlNJRU5UXCI7XG4gIH1cbn07XG5fX25hbWUoX1N0YW5kYXJkUmV0cnlTdHJhdGVneSwgXCJTdGFuZGFyZFJldHJ5U3RyYXRlZ3lcIik7XG52YXIgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5ID0gX1N0YW5kYXJkUmV0cnlTdHJhdGVneTtcblxuLy8gc3JjL0FkYXB0aXZlUmV0cnlTdHJhdGVneS50c1xudmFyIF9BZGFwdGl2ZVJldHJ5U3RyYXRlZ3kgPSBjbGFzcyBfQWRhcHRpdmVSZXRyeVN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IobWF4QXR0ZW1wdHNQcm92aWRlciwgb3B0aW9ucykge1xuICAgIHRoaXMubWF4QXR0ZW1wdHNQcm92aWRlciA9IG1heEF0dGVtcHRzUHJvdmlkZXI7XG4gICAgdGhpcy5tb2RlID0gXCJhZGFwdGl2ZVwiIC8qIEFEQVBUSVZFICovO1xuICAgIGNvbnN0IHsgcmF0ZUxpbWl0ZXIgfSA9IG9wdGlvbnMgPz8ge307XG4gICAgdGhpcy5yYXRlTGltaXRlciA9IHJhdGVMaW1pdGVyID8/IG5ldyBEZWZhdWx0UmF0ZUxpbWl0ZXIoKTtcbiAgICB0aGlzLnN0YW5kYXJkUmV0cnlTdHJhdGVneSA9IG5ldyBTdGFuZGFyZFJldHJ5U3RyYXRlZ3kobWF4QXR0ZW1wdHNQcm92aWRlcik7XG4gIH1cbiAgYXN5bmMgYWNxdWlyZUluaXRpYWxSZXRyeVRva2VuKHJldHJ5VG9rZW5TY29wZSkge1xuICAgIGF3YWl0IHRoaXMucmF0ZUxpbWl0ZXIuZ2V0U2VuZFRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXMuc3RhbmRhcmRSZXRyeVN0cmF0ZWd5LmFjcXVpcmVJbml0aWFsUmV0cnlUb2tlbihyZXRyeVRva2VuU2NvcGUpO1xuICB9XG4gIGFzeW5jIHJlZnJlc2hSZXRyeVRva2VuRm9yUmV0cnkodG9rZW5Ub1JlbmV3LCBlcnJvckluZm8pIHtcbiAgICB0aGlzLnJhdGVMaW1pdGVyLnVwZGF0ZUNsaWVudFNlbmRpbmdSYXRlKGVycm9ySW5mbyk7XG4gICAgcmV0dXJuIHRoaXMuc3RhbmRhcmRSZXRyeVN0cmF0ZWd5LnJlZnJlc2hSZXRyeVRva2VuRm9yUmV0cnkodG9rZW5Ub1JlbmV3LCBlcnJvckluZm8pO1xuICB9XG4gIHJlY29yZFN1Y2Nlc3ModG9rZW4pIHtcbiAgICB0aGlzLnJhdGVMaW1pdGVyLnVwZGF0ZUNsaWVudFNlbmRpbmdSYXRlKHt9KTtcbiAgICB0aGlzLnN0YW5kYXJkUmV0cnlTdHJhdGVneS5yZWNvcmRTdWNjZXNzKHRva2VuKTtcbiAgfVxufTtcbl9fbmFtZShfQWRhcHRpdmVSZXRyeVN0cmF0ZWd5LCBcIkFkYXB0aXZlUmV0cnlTdHJhdGVneVwiKTtcbnZhciBBZGFwdGl2ZVJldHJ5U3RyYXRlZ3kgPSBfQWRhcHRpdmVSZXRyeVN0cmF0ZWd5O1xuXG4vLyBzcmMvQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kudHNcbnZhciBfQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgPSBjbGFzcyBfQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgZXh0ZW5kcyBTdGFuZGFyZFJldHJ5U3RyYXRlZ3kge1xuICAvKipcbiAgICogQHBhcmFtIG1heEF0dGVtcHRzIC0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzIGFsbG93ZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGUuZy4sIGlmIHNldCB0byAzLCB0aGVuIDQgdG90YWwgcmVxdWVzdHMgYXJlIHBvc3NpYmxlLlxuICAgKiBAcGFyYW0gY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgLSBhIG1pbGxpc2Vjb25kIGRlbGF5IGZvciBlYWNoIHJldHJ5IG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcmV0cnkgYXR0ZW1wdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmV0dXJucyB0aGUgZGVsYXkuXG4gICAqXG4gICAqIEBleGFtcGxlIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gICAqIGBgYGpzXG4gICAqIG5ldyBDbGllbnQoe1xuICAgKiAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSgzLCAoYXR0ZW1wdCkgPT4gYXR0ZW1wdCAqKiAyKVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqIEBleGFtcGxlIGNvbnN0YW50IGRlbGF5LlxuICAgKiBgYGBqc1xuICAgKiBuZXcgQ2xpZW50KHtcbiAgICogICByZXRyeVN0cmF0ZWd5OiBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMywgMjAwMClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgY29uc3RydWN0b3IobWF4QXR0ZW1wdHMsIGNvbXB1dGVOZXh0QmFja29mZkRlbGF5ID0gREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFKSB7XG4gICAgc3VwZXIodHlwZW9mIG1heEF0dGVtcHRzID09PSBcImZ1bmN0aW9uXCIgPyBtYXhBdHRlbXB0cyA6IGFzeW5jICgpID0+IG1heEF0dGVtcHRzKTtcbiAgICBpZiAodHlwZW9mIGNvbXB1dGVOZXh0QmFja29mZkRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLmNvbXB1dGVOZXh0QmFja29mZkRlbGF5ID0gKCkgPT4gY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkgPSBjb21wdXRlTmV4dEJhY2tvZmZEZWxheTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgcmVmcmVzaFJldHJ5VG9rZW5Gb3JSZXRyeSh0b2tlblRvUmVuZXcsIGVycm9ySW5mbykge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgc3VwZXIucmVmcmVzaFJldHJ5VG9rZW5Gb3JSZXRyeSh0b2tlblRvUmVuZXcsIGVycm9ySW5mbyk7XG4gICAgdG9rZW4uZ2V0UmV0cnlEZWxheSA9ICgpID0+IHRoaXMuY29tcHV0ZU5leHRCYWNrb2ZmRGVsYXkodG9rZW4uZ2V0UmV0cnlDb3VudCgpKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn07XG5fX25hbWUoX0NvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5LCBcIkNvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5XCIpO1xudmFyIENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5ID0gX0NvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWRhcHRpdmVSZXRyeVN0cmF0ZWd5LFxuICBDb25maWd1cmVkUmV0cnlTdHJhdGVneSxcbiAgRGVmYXVsdFJhdGVMaW1pdGVyLFxuICBTdGFuZGFyZFJldHJ5U3RyYXRlZ3ksXG4gIFJFVFJZX01PREVTLFxuICBERUZBVUxUX01BWF9BVFRFTVBUUyxcbiAgREVGQVVMVF9SRVRSWV9NT0RFLFxuICBERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0UsXG4gIE1BWElNVU1fUkVUUllfREVMQVksXG4gIFRIUk9UVExJTkdfUkVUUllfREVMQVlfQkFTRSxcbiAgSU5JVElBTF9SRVRSWV9UT0tFTlMsXG4gIFJFVFJZX0NPU1QsXG4gIFRJTUVPVVRfUkVUUllfQ09TVCxcbiAgTk9fUkVUUllfSU5DUkVNRU5ULFxuICBJTlZPQ0FUSU9OX0lEX0hFQURFUixcbiAgUkVRVUVTVF9IRUFERVJcbn0pO1xuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1N0cmVhbWluZ1BheWxvYWQgPSB2b2lkIDA7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBpc1N0cmVhbWluZ1BheWxvYWQgPSAocmVxdWVzdCkgPT4gKHJlcXVlc3QgPT09IG51bGwgfHwgcmVxdWVzdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWVzdC5ib2R5KSBpbnN0YW5jZW9mIHN0cmVhbV8xLlJlYWRhYmxlIHx8XG4gICAgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAocmVxdWVzdCA9PT0gbnVsbCB8fCByZXF1ZXN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1ZXN0LmJvZHkpIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pO1xuZXhwb3J0cy5pc1N0cmVhbWluZ1BheWxvYWQgPSBpc1N0cmVhbWluZ1BheWxvYWQ7XG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBBZGFwdGl2ZVJldHJ5U3RyYXRlZ3k6ICgpID0+IEFkYXB0aXZlUmV0cnlTdHJhdGVneSxcbiAgQ09ORklHX01BWF9BVFRFTVBUUzogKCkgPT4gQ09ORklHX01BWF9BVFRFTVBUUyxcbiAgQ09ORklHX1JFVFJZX01PREU6ICgpID0+IENPTkZJR19SRVRSWV9NT0RFLFxuICBFTlZfTUFYX0FUVEVNUFRTOiAoKSA9PiBFTlZfTUFYX0FUVEVNUFRTLFxuICBFTlZfUkVUUllfTU9ERTogKCkgPT4gRU5WX1JFVFJZX01PREUsXG4gIE5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlM6ICgpID0+IE5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMsXG4gIE5PREVfUkVUUllfTU9ERV9DT05GSUdfT1BUSU9OUzogKCkgPT4gTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICBTdGFuZGFyZFJldHJ5U3RyYXRlZ3k6ICgpID0+IFN0YW5kYXJkUmV0cnlTdHJhdGVneSxcbiAgZGVmYXVsdERlbGF5RGVjaWRlcjogKCkgPT4gZGVmYXVsdERlbGF5RGVjaWRlcixcbiAgZGVmYXVsdFJldHJ5RGVjaWRlcjogKCkgPT4gZGVmYXVsdFJldHJ5RGVjaWRlcixcbiAgZ2V0T21pdFJldHJ5SGVhZGVyc1BsdWdpbjogKCkgPT4gZ2V0T21pdFJldHJ5SGVhZGVyc1BsdWdpbixcbiAgZ2V0UmV0cnlBZnRlckhpbnQ6ICgpID0+IGdldFJldHJ5QWZ0ZXJIaW50LFxuICBnZXRSZXRyeVBsdWdpbjogKCkgPT4gZ2V0UmV0cnlQbHVnaW4sXG4gIG9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlOiAoKSA9PiBvbWl0UmV0cnlIZWFkZXJzTWlkZGxld2FyZSxcbiAgb21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmVPcHRpb25zOiAoKSA9PiBvbWl0UmV0cnlIZWFkZXJzTWlkZGxld2FyZU9wdGlvbnMsXG4gIHJlc29sdmVSZXRyeUNvbmZpZzogKCkgPT4gcmVzb2x2ZVJldHJ5Q29uZmlnLFxuICByZXRyeU1pZGRsZXdhcmU6ICgpID0+IHJldHJ5TWlkZGxld2FyZSxcbiAgcmV0cnlNaWRkbGV3YXJlT3B0aW9uczogKCkgPT4gcmV0cnlNaWRkbGV3YXJlT3B0aW9uc1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9BZGFwdGl2ZVJldHJ5U3RyYXRlZ3kudHNcblxuXG4vLyBzcmMvU3RhbmRhcmRSZXRyeVN0cmF0ZWd5LnRzXG52YXIgaW1wb3J0X3Byb3RvY29sX2h0dHAgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuXG5cbnZhciBpbXBvcnRfdXVpZCA9IHJlcXVpcmUoXCJ1dWlkXCIpO1xuXG4vLyBzcmMvZGVmYXVsdFJldHJ5UXVvdGEudHNcbnZhciBpbXBvcnRfdXRpbF9yZXRyeSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtcmV0cnlcIik7XG52YXIgZ2V0RGVmYXVsdFJldHJ5UXVvdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbml0aWFsUmV0cnlUb2tlbnMsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgTUFYX0NBUEFDSVRZID0gaW5pdGlhbFJldHJ5VG9rZW5zO1xuICBjb25zdCBub1JldHJ5SW5jcmVtZW50ID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubm9SZXRyeUluY3JlbWVudCkgPz8gaW1wb3J0X3V0aWxfcmV0cnkuTk9fUkVUUllfSU5DUkVNRU5UO1xuICBjb25zdCByZXRyeUNvc3QgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeUNvc3QpID8/IGltcG9ydF91dGlsX3JldHJ5LlJFVFJZX0NPU1Q7XG4gIGNvbnN0IHRpbWVvdXRSZXRyeUNvc3QgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aW1lb3V0UmV0cnlDb3N0KSA/PyBpbXBvcnRfdXRpbF9yZXRyeS5USU1FT1VUX1JFVFJZX0NPU1Q7XG4gIGxldCBhdmFpbGFibGVDYXBhY2l0eSA9IGluaXRpYWxSZXRyeVRva2VucztcbiAgY29uc3QgZ2V0Q2FwYWNpdHlBbW91bnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlcnJvcikgPT4gZXJyb3IubmFtZSA9PT0gXCJUaW1lb3V0RXJyb3JcIiA/IHRpbWVvdXRSZXRyeUNvc3QgOiByZXRyeUNvc3QsIFwiZ2V0Q2FwYWNpdHlBbW91bnRcIik7XG4gIGNvbnN0IGhhc1JldHJ5VG9rZW5zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZXJyb3IpID0+IGdldENhcGFjaXR5QW1vdW50KGVycm9yKSA8PSBhdmFpbGFibGVDYXBhY2l0eSwgXCJoYXNSZXRyeVRva2Vuc1wiKTtcbiAgY29uc3QgcmV0cmlldmVSZXRyeVRva2VucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVycm9yKSA9PiB7XG4gICAgaWYgKCFoYXNSZXRyeVRva2VucyhlcnJvcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJldHJ5IHRva2VuIGF2YWlsYWJsZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2FwYWNpdHlBbW91bnQgPSBnZXRDYXBhY2l0eUFtb3VudChlcnJvcik7XG4gICAgYXZhaWxhYmxlQ2FwYWNpdHkgLT0gY2FwYWNpdHlBbW91bnQ7XG4gICAgcmV0dXJuIGNhcGFjaXR5QW1vdW50O1xuICB9LCBcInJldHJpZXZlUmV0cnlUb2tlbnNcIik7XG4gIGNvbnN0IHJlbGVhc2VSZXRyeVRva2VucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNhcGFjaXR5UmVsZWFzZUFtb3VudCkgPT4ge1xuICAgIGF2YWlsYWJsZUNhcGFjaXR5ICs9IGNhcGFjaXR5UmVsZWFzZUFtb3VudCA/PyBub1JldHJ5SW5jcmVtZW50O1xuICAgIGF2YWlsYWJsZUNhcGFjaXR5ID0gTWF0aC5taW4oYXZhaWxhYmxlQ2FwYWNpdHksIE1BWF9DQVBBQ0lUWSk7XG4gIH0sIFwicmVsZWFzZVJldHJ5VG9rZW5zXCIpO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaGFzUmV0cnlUb2tlbnMsXG4gICAgcmV0cmlldmVSZXRyeVRva2VucyxcbiAgICByZWxlYXNlUmV0cnlUb2tlbnNcbiAgfSk7XG59LCBcImdldERlZmF1bHRSZXRyeVF1b3RhXCIpO1xuXG4vLyBzcmMvZGVsYXlEZWNpZGVyLnRzXG5cbnZhciBkZWZhdWx0RGVsYXlEZWNpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGVsYXlCYXNlLCBhdHRlbXB0cykgPT4gTWF0aC5mbG9vcihNYXRoLm1pbihpbXBvcnRfdXRpbF9yZXRyeS5NQVhJTVVNX1JFVFJZX0RFTEFZLCBNYXRoLnJhbmRvbSgpICogMiAqKiBhdHRlbXB0cyAqIGRlbGF5QmFzZSkpLCBcImRlZmF1bHREZWxheURlY2lkZXJcIik7XG5cbi8vIHNyYy9yZXRyeURlY2lkZXIudHNcbnZhciBpbXBvcnRfc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbiA9IHJlcXVpcmUoXCJAc21pdGh5L3NlcnZpY2UtZXJyb3ItY2xhc3NpZmljYXRpb25cIik7XG52YXIgZGVmYXVsdFJldHJ5RGVjaWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVycm9yKSA9PiB7XG4gIGlmICghZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICgwLCBpbXBvcnRfc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbi5pc1JldHJ5YWJsZUJ5VHJhaXQpKGVycm9yKSB8fCAoMCwgaW1wb3J0X3NlcnZpY2VfZXJyb3JfY2xhc3NpZmljYXRpb24uaXNDbG9ja1NrZXdFcnJvcikoZXJyb3IpIHx8ICgwLCBpbXBvcnRfc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbi5pc1Rocm90dGxpbmdFcnJvcikoZXJyb3IpIHx8ICgwLCBpbXBvcnRfc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbi5pc1RyYW5zaWVudEVycm9yKShlcnJvcik7XG59LCBcImRlZmF1bHRSZXRyeURlY2lkZXJcIik7XG5cbi8vIHNyYy91dGlsLnRzXG52YXIgYXNTZGtFcnJvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVycm9yKSA9PiB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKVxuICAgIHJldHVybiBlcnJvcjtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigpLCBlcnJvcik7XG4gIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIG5ldyBFcnJvcihlcnJvcik7XG4gIHJldHVybiBuZXcgRXJyb3IoYEFXUyBTREsgZXJyb3Igd3JhcHBlciBmb3IgJHtlcnJvcn1gKTtcbn0sIFwiYXNTZGtFcnJvclwiKTtcblxuLy8gc3JjL1N0YW5kYXJkUmV0cnlTdHJhdGVneS50c1xudmFyIF9TdGFuZGFyZFJldHJ5U3RyYXRlZ3kgPSBjbGFzcyBfU3RhbmRhcmRSZXRyeVN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IobWF4QXR0ZW1wdHNQcm92aWRlciwgb3B0aW9ucykge1xuICAgIHRoaXMubWF4QXR0ZW1wdHNQcm92aWRlciA9IG1heEF0dGVtcHRzUHJvdmlkZXI7XG4gICAgdGhpcy5tb2RlID0gaW1wb3J0X3V0aWxfcmV0cnkuUkVUUllfTU9ERVMuU1RBTkRBUkQ7XG4gICAgdGhpcy5yZXRyeURlY2lkZXIgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeURlY2lkZXIpID8/IGRlZmF1bHRSZXRyeURlY2lkZXI7XG4gICAgdGhpcy5kZWxheURlY2lkZXIgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5kZWxheURlY2lkZXIpID8/IGRlZmF1bHREZWxheURlY2lkZXI7XG4gICAgdGhpcy5yZXRyeVF1b3RhID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlRdW90YSkgPz8gZ2V0RGVmYXVsdFJldHJ5UXVvdGEoaW1wb3J0X3V0aWxfcmV0cnkuSU5JVElBTF9SRVRSWV9UT0tFTlMpO1xuICB9XG4gIHNob3VsZFJldHJ5KGVycm9yLCBhdHRlbXB0cywgbWF4QXR0ZW1wdHMpIHtcbiAgICByZXR1cm4gYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyAmJiB0aGlzLnJldHJ5RGVjaWRlcihlcnJvcikgJiYgdGhpcy5yZXRyeVF1b3RhLmhhc1JldHJ5VG9rZW5zKGVycm9yKTtcbiAgfVxuICBhc3luYyBnZXRNYXhBdHRlbXB0cygpIHtcbiAgICBsZXQgbWF4QXR0ZW1wdHM7XG4gICAgdHJ5IHtcbiAgICAgIG1heEF0dGVtcHRzID0gYXdhaXQgdGhpcy5tYXhBdHRlbXB0c1Byb3ZpZGVyKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG1heEF0dGVtcHRzID0gaW1wb3J0X3V0aWxfcmV0cnkuREVGQVVMVF9NQVhfQVRURU1QVFM7XG4gICAgfVxuICAgIHJldHVybiBtYXhBdHRlbXB0cztcbiAgfVxuICBhc3luYyByZXRyeShuZXh0LCBhcmdzLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldHJ5VG9rZW5BbW91bnQ7XG4gICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICBsZXQgdG90YWxEZWxheSA9IDA7XG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSBhd2FpdCB0aGlzLmdldE1heEF0dGVtcHRzKCk7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGlmIChpbXBvcnRfcHJvdG9jb2xfaHR0cC5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNbaW1wb3J0X3V0aWxfcmV0cnkuSU5WT0NBVElPTl9JRF9IRUFERVJdID0gKDAsIGltcG9ydF91dWlkLnY0KSgpO1xuICAgIH1cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGltcG9ydF9wcm90b2NvbF9odHRwLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UocmVxdWVzdCkpIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNbaW1wb3J0X3V0aWxfcmV0cnkuUkVRVUVTVF9IRUFERVJdID0gYGF0dGVtcHQ9JHthdHRlbXB0cyArIDF9OyBtYXg9JHttYXhBdHRlbXB0c31gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmJlZm9yZVJlcXVlc3QpIHtcbiAgICAgICAgICBhd2FpdCBvcHRpb25zLmJlZm9yZVJlcXVlc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBvdXRwdXQgfSA9IGF3YWl0IG5leHQoYXJncyk7XG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmFmdGVyUmVxdWVzdCkge1xuICAgICAgICAgIG9wdGlvbnMuYWZ0ZXJSZXF1ZXN0KHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJldHJ5UXVvdGEucmVsZWFzZVJldHJ5VG9rZW5zKHJldHJ5VG9rZW5BbW91bnQpO1xuICAgICAgICBvdXRwdXQuJG1ldGFkYXRhLmF0dGVtcHRzID0gYXR0ZW1wdHMgKyAxO1xuICAgICAgICBvdXRwdXQuJG1ldGFkYXRhLnRvdGFsUmV0cnlEZWxheSA9IHRvdGFsRGVsYXk7XG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBvdXRwdXQgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgZXJyID0gYXNTZGtFcnJvcihlKTtcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkUmV0cnkoZXJyLCBhdHRlbXB0cywgbWF4QXR0ZW1wdHMpKSB7XG4gICAgICAgICAgcmV0cnlUb2tlbkFtb3VudCA9IHRoaXMucmV0cnlRdW90YS5yZXRyaWV2ZVJldHJ5VG9rZW5zKGVycik7XG4gICAgICAgICAgY29uc3QgZGVsYXlGcm9tRGVjaWRlciA9IHRoaXMuZGVsYXlEZWNpZGVyKFxuICAgICAgICAgICAgKDAsIGltcG9ydF9zZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uLmlzVGhyb3R0bGluZ0Vycm9yKShlcnIpID8gaW1wb3J0X3V0aWxfcmV0cnkuVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFIDogaW1wb3J0X3V0aWxfcmV0cnkuREVGQVVMVF9SRVRSWV9ERUxBWV9CQVNFLFxuICAgICAgICAgICAgYXR0ZW1wdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRlbGF5RnJvbVJlc3BvbnNlID0gZ2V0RGVsYXlGcm9tUmV0cnlBZnRlckhlYWRlcihlcnIuJHJlc3BvbnNlKTtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IE1hdGgubWF4KGRlbGF5RnJvbVJlc3BvbnNlIHx8IDAsIGRlbGF5RnJvbURlY2lkZXIpO1xuICAgICAgICAgIHRvdGFsRGVsYXkgKz0gZGVsYXk7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVyci4kbWV0YWRhdGEpIHtcbiAgICAgICAgICBlcnIuJG1ldGFkYXRhID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZXJyLiRtZXRhZGF0YS5hdHRlbXB0cyA9IGF0dGVtcHRzO1xuICAgICAgICBlcnIuJG1ldGFkYXRhLnRvdGFsUmV0cnlEZWxheSA9IHRvdGFsRGVsYXk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5fX25hbWUoX1N0YW5kYXJkUmV0cnlTdHJhdGVneSwgXCJTdGFuZGFyZFJldHJ5U3RyYXRlZ3lcIik7XG52YXIgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5ID0gX1N0YW5kYXJkUmV0cnlTdHJhdGVneTtcbnZhciBnZXREZWxheUZyb21SZXRyeUFmdGVySGVhZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocmVzcG9uc2UpID0+IHtcbiAgaWYgKCFpbXBvcnRfcHJvdG9jb2xfaHR0cC5IdHRwUmVzcG9uc2UuaXNJbnN0YW5jZShyZXNwb25zZSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCByZXRyeUFmdGVySGVhZGVyTmFtZSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpLmZpbmQoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IFwicmV0cnktYWZ0ZXJcIik7XG4gIGlmICghcmV0cnlBZnRlckhlYWRlck5hbWUpXG4gICAgcmV0dXJuO1xuICBjb25zdCByZXRyeUFmdGVyID0gcmVzcG9uc2UuaGVhZGVyc1tyZXRyeUFmdGVySGVhZGVyTmFtZV07XG4gIGNvbnN0IHJldHJ5QWZ0ZXJTZWNvbmRzID0gTnVtYmVyKHJldHJ5QWZ0ZXIpO1xuICBpZiAoIU51bWJlci5pc05hTihyZXRyeUFmdGVyU2Vjb25kcykpXG4gICAgcmV0dXJuIHJldHJ5QWZ0ZXJTZWNvbmRzICogMWUzO1xuICBjb25zdCByZXRyeUFmdGVyRGF0ZSA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpO1xuICByZXR1cm4gcmV0cnlBZnRlckRhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbn0sIFwiZ2V0RGVsYXlGcm9tUmV0cnlBZnRlckhlYWRlclwiKTtcblxuLy8gc3JjL0FkYXB0aXZlUmV0cnlTdHJhdGVneS50c1xudmFyIF9BZGFwdGl2ZVJldHJ5U3RyYXRlZ3kgPSBjbGFzcyBfQWRhcHRpdmVSZXRyeVN0cmF0ZWd5IGV4dGVuZHMgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IobWF4QXR0ZW1wdHNQcm92aWRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHsgcmF0ZUxpbWl0ZXIsIC4uLnN1cGVyT3B0aW9ucyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICBzdXBlcihtYXhBdHRlbXB0c1Byb3ZpZGVyLCBzdXBlck9wdGlvbnMpO1xuICAgIHRoaXMucmF0ZUxpbWl0ZXIgPSByYXRlTGltaXRlciA/PyBuZXcgaW1wb3J0X3V0aWxfcmV0cnkuRGVmYXVsdFJhdGVMaW1pdGVyKCk7XG4gICAgdGhpcy5tb2RlID0gaW1wb3J0X3V0aWxfcmV0cnkuUkVUUllfTU9ERVMuQURBUFRJVkU7XG4gIH1cbiAgYXN5bmMgcmV0cnkobmV4dCwgYXJncykge1xuICAgIHJldHVybiBzdXBlci5yZXRyeShuZXh0LCBhcmdzLCB7XG4gICAgICBiZWZvcmVSZXF1ZXN0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdGVMaW1pdGVyLmdldFNlbmRUb2tlbigpO1xuICAgICAgfSxcbiAgICAgIGFmdGVyUmVxdWVzdDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucmF0ZUxpbWl0ZXIudXBkYXRlQ2xpZW50U2VuZGluZ1JhdGUocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuX19uYW1lKF9BZGFwdGl2ZVJldHJ5U3RyYXRlZ3ksIFwiQWRhcHRpdmVSZXRyeVN0cmF0ZWd5XCIpO1xudmFyIEFkYXB0aXZlUmV0cnlTdHJhdGVneSA9IF9BZGFwdGl2ZVJldHJ5U3RyYXRlZ3k7XG5cbi8vIHNyYy9jb25maWd1cmF0aW9ucy50c1xudmFyIGltcG9ydF91dGlsX21pZGRsZXdhcmUgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmVcIik7XG5cbnZhciBFTlZfTUFYX0FUVEVNUFRTID0gXCJBV1NfTUFYX0FUVEVNUFRTXCI7XG52YXIgQ09ORklHX01BWF9BVFRFTVBUUyA9IFwibWF4X2F0dGVtcHRzXCI7XG52YXIgTk9ERV9NQVhfQVRURU1QVF9DT05GSUdfT1BUSU9OUyA9IHtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBlbnZbRU5WX01BWF9BVFRFTVBUU107XG4gICAgaWYgKCF2YWx1ZSlcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgY29uc3QgbWF4QXR0ZW1wdCA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKG1heEF0dGVtcHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudmlyb25tZW50IHZhcmlhYmxlICR7RU5WX01BWF9BVFRFTVBUU30gbWFzdCBiZSBhIG51bWJlciwgZ290IFwiJHt2YWx1ZX1cImApO1xuICAgIH1cbiAgICByZXR1cm4gbWF4QXR0ZW1wdDtcbiAgfSxcbiAgY29uZmlnRmlsZVNlbGVjdG9yOiAocHJvZmlsZSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvZmlsZVtDT05GSUdfTUFYX0FUVEVNUFRTXTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICBjb25zdCBtYXhBdHRlbXB0ID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obWF4QXR0ZW1wdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmVkIGNvbmZpZyBmaWxlIGVudHJ5ICR7Q09ORklHX01BWF9BVFRFTVBUU30gbWFzdCBiZSBhIG51bWJlciwgZ290IFwiJHt2YWx1ZX1cImApO1xuICAgIH1cbiAgICByZXR1cm4gbWF4QXR0ZW1wdDtcbiAgfSxcbiAgZGVmYXVsdDogaW1wb3J0X3V0aWxfcmV0cnkuREVGQVVMVF9NQVhfQVRURU1QVFNcbn07XG52YXIgcmVzb2x2ZVJldHJ5Q29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5wdXQpID0+IHtcbiAgY29uc3QgeyByZXRyeVN0cmF0ZWd5IH0gPSBpbnB1dDtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAoMCwgaW1wb3J0X3V0aWxfbWlkZGxld2FyZS5ub3JtYWxpemVQcm92aWRlcikoaW5wdXQubWF4QXR0ZW1wdHMgPz8gaW1wb3J0X3V0aWxfcmV0cnkuREVGQVVMVF9NQVhfQVRURU1QVFMpO1xuICByZXR1cm4ge1xuICAgIC4uLmlucHV0LFxuICAgIG1heEF0dGVtcHRzLFxuICAgIHJldHJ5U3RyYXRlZ3k6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChyZXRyeVN0cmF0ZWd5KSB7XG4gICAgICAgIHJldHVybiByZXRyeVN0cmF0ZWd5O1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0cnlNb2RlID0gYXdhaXQgKDAsIGltcG9ydF91dGlsX21pZGRsZXdhcmUubm9ybWFsaXplUHJvdmlkZXIpKGlucHV0LnJldHJ5TW9kZSkoKTtcbiAgICAgIGlmIChyZXRyeU1vZGUgPT09IGltcG9ydF91dGlsX3JldHJ5LlJFVFJZX01PREVTLkFEQVBUSVZFKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW1wb3J0X3V0aWxfcmV0cnkuQWRhcHRpdmVSZXRyeVN0cmF0ZWd5KG1heEF0dGVtcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgaW1wb3J0X3V0aWxfcmV0cnkuU3RhbmRhcmRSZXRyeVN0cmF0ZWd5KG1heEF0dGVtcHRzKTtcbiAgICB9XG4gIH07XG59LCBcInJlc29sdmVSZXRyeUNvbmZpZ1wiKTtcbnZhciBFTlZfUkVUUllfTU9ERSA9IFwiQVdTX1JFVFJZX01PREVcIjtcbnZhciBDT05GSUdfUkVUUllfTU9ERSA9IFwicmV0cnlfbW9kZVwiO1xudmFyIE5PREVfUkVUUllfTU9ERV9DT05GSUdfT1BUSU9OUyA9IHtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbRU5WX1JFVFJZX01PREVdLFxuICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiBwcm9maWxlW0NPTkZJR19SRVRSWV9NT0RFXSxcbiAgZGVmYXVsdDogaW1wb3J0X3V0aWxfcmV0cnkuREVGQVVMVF9SRVRSWV9NT0RFXG59O1xuXG4vLyBzcmMvb21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmUudHNcblxuXG52YXIgb21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IHJlcXVlc3QgfSA9IGFyZ3M7XG4gIGlmIChpbXBvcnRfcHJvdG9jb2xfaHR0cC5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpKSB7XG4gICAgZGVsZXRlIHJlcXVlc3QuaGVhZGVyc1tpbXBvcnRfdXRpbF9yZXRyeS5JTlZPQ0FUSU9OX0lEX0hFQURFUl07XG4gICAgZGVsZXRlIHJlcXVlc3QuaGVhZGVyc1tpbXBvcnRfdXRpbF9yZXRyeS5SRVFVRVNUX0hFQURFUl07XG4gIH1cbiAgcmV0dXJuIG5leHQoYXJncyk7XG59LCBcIm9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlXCIpO1xudmFyIG9taXRSZXRyeUhlYWRlcnNNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgbmFtZTogXCJvbWl0UmV0cnlIZWFkZXJzTWlkZGxld2FyZVwiLFxuICB0YWdzOiBbXCJSRVRSWVwiLCBcIkhFQURFUlNcIiwgXCJPTUlUX1JFVFJZX0hFQURFUlNcIl0sXG4gIHJlbGF0aW9uOiBcImJlZm9yZVwiLFxuICB0b01pZGRsZXdhcmU6IFwiYXdzQXV0aE1pZGRsZXdhcmVcIixcbiAgb3ZlcnJpZGU6IHRydWVcbn07XG52YXIgZ2V0T21pdFJldHJ5SGVhZGVyc1BsdWdpbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+ICh7XG4gIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgY2xpZW50U3RhY2suYWRkUmVsYXRpdmVUbyhvbWl0UmV0cnlIZWFkZXJzTWlkZGxld2FyZSgpLCBvbWl0UmV0cnlIZWFkZXJzTWlkZGxld2FyZU9wdGlvbnMpO1xuICB9XG59KSwgXCJnZXRPbWl0UmV0cnlIZWFkZXJzUGx1Z2luXCIpO1xuXG4vLyBzcmMvcmV0cnlNaWRkbGV3YXJlLnRzXG5cblxudmFyIGltcG9ydF9zbWl0aHlfY2xpZW50ID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcblxuXG52YXIgaW1wb3J0X2lzU3RyZWFtaW5nUGF5bG9hZCA9IHJlcXVpcmUoXCIuL2lzU3RyZWFtaW5nUGF5bG9hZC9pc1N0cmVhbWluZ1BheWxvYWRcIik7XG52YXIgcmV0cnlNaWRkbGV3YXJlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gIHZhciBfYTtcbiAgbGV0IHJldHJ5U3RyYXRlZ3kgPSBhd2FpdCBvcHRpb25zLnJldHJ5U3RyYXRlZ3koKTtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSBhd2FpdCBvcHRpb25zLm1heEF0dGVtcHRzKCk7XG4gIGlmIChpc1JldHJ5U3RyYXRlZ3lWMihyZXRyeVN0cmF0ZWd5KSkge1xuICAgIHJldHJ5U3RyYXRlZ3kgPSByZXRyeVN0cmF0ZWd5O1xuICAgIGxldCByZXRyeVRva2VuID0gYXdhaXQgcmV0cnlTdHJhdGVneS5hY3F1aXJlSW5pdGlhbFJldHJ5VG9rZW4oY29udGV4dFtcInBhcnRpdGlvbl9pZFwiXSk7XG4gICAgbGV0IGxhc3RFcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgbGV0IHRvdGFsUmV0cnlEZWxheSA9IDA7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGNvbnN0IGlzUmVxdWVzdCA9IGltcG9ydF9wcm90b2NvbF9odHRwLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UocmVxdWVzdCk7XG4gICAgaWYgKGlzUmVxdWVzdCkge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzW2ltcG9ydF91dGlsX3JldHJ5LklOVk9DQVRJT05fSURfSEVBREVSXSA9ICgwLCBpbXBvcnRfdXVpZC52NCkoKTtcbiAgICB9XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChpc1JlcXVlc3QpIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNbaW1wb3J0X3V0aWxfcmV0cnkuUkVRVUVTVF9IRUFERVJdID0gYGF0dGVtcHQ9JHthdHRlbXB0cyArIDF9OyBtYXg9JHttYXhBdHRlbXB0c31gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UsIG91dHB1dCB9ID0gYXdhaXQgbmV4dChhcmdzKTtcbiAgICAgICAgcmV0cnlTdHJhdGVneS5yZWNvcmRTdWNjZXNzKHJldHJ5VG9rZW4pO1xuICAgICAgICBvdXRwdXQuJG1ldGFkYXRhLmF0dGVtcHRzID0gYXR0ZW1wdHMgKyAxO1xuICAgICAgICBvdXRwdXQuJG1ldGFkYXRhLnRvdGFsUmV0cnlEZWxheSA9IHRvdGFsUmV0cnlEZWxheTtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2UsIG91dHB1dCB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCByZXRyeUVycm9ySW5mbyA9IGdldFJldHJ5RXJyb3JJbmZvKGUpO1xuICAgICAgICBsYXN0RXJyb3IgPSBhc1Nka0Vycm9yKGUpO1xuICAgICAgICBpZiAoaXNSZXF1ZXN0ICYmICgwLCBpbXBvcnRfaXNTdHJlYW1pbmdQYXlsb2FkLmlzU3RyZWFtaW5nUGF5bG9hZCkocmVxdWVzdCkpIHtcbiAgICAgICAgICAoX2EgPSBjb250ZXh0LmxvZ2dlciBpbnN0YW5jZW9mIGltcG9ydF9zbWl0aHlfY2xpZW50Lk5vT3BMb2dnZXIgPyBjb25zb2xlIDogY29udGV4dC5sb2dnZXIpID09IG51bGwgPyB2b2lkIDAgOiBfYS53YXJuKFxuICAgICAgICAgICAgXCJBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgaW4gYSBub24tcmV0cnlhYmxlIHN0cmVhbWluZyByZXF1ZXN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXRyeVRva2VuID0gYXdhaXQgcmV0cnlTdHJhdGVneS5yZWZyZXNoUmV0cnlUb2tlbkZvclJldHJ5KHJldHJ5VG9rZW4sIHJldHJ5RXJyb3JJbmZvKTtcbiAgICAgICAgfSBjYXRjaCAocmVmcmVzaEVycm9yKSB7XG4gICAgICAgICAgaWYgKCFsYXN0RXJyb3IuJG1ldGFkYXRhKSB7XG4gICAgICAgICAgICBsYXN0RXJyb3IuJG1ldGFkYXRhID0ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhc3RFcnJvci4kbWV0YWRhdGEuYXR0ZW1wdHMgPSBhdHRlbXB0cyArIDE7XG4gICAgICAgICAgbGFzdEVycm9yLiRtZXRhZGF0YS50b3RhbFJldHJ5RGVsYXkgPSB0b3RhbFJldHJ5RGVsYXk7XG4gICAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGF0dGVtcHRzID0gcmV0cnlUb2tlbi5nZXRSZXRyeUNvdW50KCk7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gcmV0cnlUb2tlbi5nZXRSZXRyeURlbGF5KCk7XG4gICAgICAgIHRvdGFsUmV0cnlEZWxheSArPSBkZWxheTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0cnlTdHJhdGVneSA9IHJldHJ5U3RyYXRlZ3k7XG4gICAgaWYgKHJldHJ5U3RyYXRlZ3kgPT0gbnVsbCA/IHZvaWQgMCA6IHJldHJ5U3RyYXRlZ3kubW9kZSlcbiAgICAgIGNvbnRleHQudXNlckFnZW50ID0gWy4uLmNvbnRleHQudXNlckFnZW50IHx8IFtdLCBbXCJjZmcvcmV0cnktbW9kZVwiLCByZXRyeVN0cmF0ZWd5Lm1vZGVdXTtcbiAgICByZXR1cm4gcmV0cnlTdHJhdGVneS5yZXRyeShuZXh0LCBhcmdzKTtcbiAgfVxufSwgXCJyZXRyeU1pZGRsZXdhcmVcIik7XG52YXIgaXNSZXRyeVN0cmF0ZWd5VjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyZXRyeVN0cmF0ZWd5KSA9PiB0eXBlb2YgcmV0cnlTdHJhdGVneS5hY3F1aXJlSW5pdGlhbFJldHJ5VG9rZW4gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJldHJ5U3RyYXRlZ3kucmVmcmVzaFJldHJ5VG9rZW5Gb3JSZXRyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgcmV0cnlTdHJhdGVneS5yZWNvcmRTdWNjZXNzICE9PSBcInVuZGVmaW5lZFwiLCBcImlzUmV0cnlTdHJhdGVneVYyXCIpO1xudmFyIGdldFJldHJ5RXJyb3JJbmZvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZXJyb3IpID0+IHtcbiAgY29uc3QgZXJyb3JJbmZvID0ge1xuICAgIGVycm9yLFxuICAgIGVycm9yVHlwZTogZ2V0UmV0cnlFcnJvclR5cGUoZXJyb3IpXG4gIH07XG4gIGNvbnN0IHJldHJ5QWZ0ZXJIaW50ID0gZ2V0UmV0cnlBZnRlckhpbnQoZXJyb3IuJHJlc3BvbnNlKTtcbiAgaWYgKHJldHJ5QWZ0ZXJIaW50KSB7XG4gICAgZXJyb3JJbmZvLnJldHJ5QWZ0ZXJIaW50ID0gcmV0cnlBZnRlckhpbnQ7XG4gIH1cbiAgcmV0dXJuIGVycm9ySW5mbztcbn0sIFwiZ2V0UmV0cnlFcnJvckluZm9cIik7XG52YXIgZ2V0UmV0cnlFcnJvclR5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlcnJvcikgPT4ge1xuICBpZiAoKDAsIGltcG9ydF9zZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uLmlzVGhyb3R0bGluZ0Vycm9yKShlcnJvcikpXG4gICAgcmV0dXJuIFwiVEhST1RUTElOR1wiO1xuICBpZiAoKDAsIGltcG9ydF9zZXJ2aWNlX2Vycm9yX2NsYXNzaWZpY2F0aW9uLmlzVHJhbnNpZW50RXJyb3IpKGVycm9yKSlcbiAgICByZXR1cm4gXCJUUkFOU0lFTlRcIjtcbiAgaWYgKCgwLCBpbXBvcnRfc2VydmljZV9lcnJvcl9jbGFzc2lmaWNhdGlvbi5pc1NlcnZlckVycm9yKShlcnJvcikpXG4gICAgcmV0dXJuIFwiU0VSVkVSX0VSUk9SXCI7XG4gIHJldHVybiBcIkNMSUVOVF9FUlJPUlwiO1xufSwgXCJnZXRSZXRyeUVycm9yVHlwZVwiKTtcbnZhciByZXRyeU1pZGRsZXdhcmVPcHRpb25zID0ge1xuICBuYW1lOiBcInJldHJ5TWlkZGxld2FyZVwiLFxuICB0YWdzOiBbXCJSRVRSWVwiXSxcbiAgc3RlcDogXCJmaW5hbGl6ZVJlcXVlc3RcIixcbiAgcHJpb3JpdHk6IFwiaGlnaFwiLFxuICBvdmVycmlkZTogdHJ1ZVxufTtcbnZhciBnZXRSZXRyeVBsdWdpbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+ICh7XG4gIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgY2xpZW50U3RhY2suYWRkKHJldHJ5TWlkZGxld2FyZShvcHRpb25zKSwgcmV0cnlNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH1cbn0pLCBcImdldFJldHJ5UGx1Z2luXCIpO1xudmFyIGdldFJldHJ5QWZ0ZXJIaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocmVzcG9uc2UpID0+IHtcbiAgaWYgKCFpbXBvcnRfcHJvdG9jb2xfaHR0cC5IdHRwUmVzcG9uc2UuaXNJbnN0YW5jZShyZXNwb25zZSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCByZXRyeUFmdGVySGVhZGVyTmFtZSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpLmZpbmQoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IFwicmV0cnktYWZ0ZXJcIik7XG4gIGlmICghcmV0cnlBZnRlckhlYWRlck5hbWUpXG4gICAgcmV0dXJuO1xuICBjb25zdCByZXRyeUFmdGVyID0gcmVzcG9uc2UuaGVhZGVyc1tyZXRyeUFmdGVySGVhZGVyTmFtZV07XG4gIGNvbnN0IHJldHJ5QWZ0ZXJTZWNvbmRzID0gTnVtYmVyKHJldHJ5QWZ0ZXIpO1xuICBpZiAoIU51bWJlci5pc05hTihyZXRyeUFmdGVyU2Vjb25kcykpXG4gICAgcmV0dXJuIG5ldyBEYXRlKHJldHJ5QWZ0ZXJTZWNvbmRzICogMWUzKTtcbiAgY29uc3QgcmV0cnlBZnRlckRhdGUgPSBuZXcgRGF0ZShyZXRyeUFmdGVyKTtcbiAgcmV0dXJuIHJldHJ5QWZ0ZXJEYXRlO1xufSwgXCJnZXRSZXRyeUFmdGVySGludFwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFkYXB0aXZlUmV0cnlTdHJhdGVneSxcbiAgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5LFxuICBFTlZfTUFYX0FUVEVNUFRTLFxuICBDT05GSUdfTUFYX0FUVEVNUFRTLFxuICBOT0RFX01BWF9BVFRFTVBUX0NPTkZJR19PUFRJT05TLFxuICByZXNvbHZlUmV0cnlDb25maWcsXG4gIEVOVl9SRVRSWV9NT0RFLFxuICBDT05GSUdfUkVUUllfTU9ERSxcbiAgTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICBkZWZhdWx0RGVsYXlEZWNpZGVyLFxuICBvbWl0UmV0cnlIZWFkZXJzTWlkZGxld2FyZSxcbiAgb21pdFJldHJ5SGVhZGVyc01pZGRsZXdhcmVPcHRpb25zLFxuICBnZXRPbWl0UmV0cnlIZWFkZXJzUGx1Z2luLFxuICBkZWZhdWx0UmV0cnlEZWNpZGVyLFxuICByZXRyeU1pZGRsZXdhcmUsXG4gIHJldHJ5TWlkZGxld2FyZU9wdGlvbnMsXG4gIGdldFJldHJ5UGx1Z2luLFxuICBnZXRSZXRyeUFmdGVySGludFxufSk7XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSB2b2lkIDA7XG5jb25zdCByZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogb3B0aW9ucy51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBvcHRpb25zLnVzZUZpcHNFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFNpZ25pbmdOYW1lOiBcImJlZHJvY2tcIixcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU3RzQXV0aENvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IHJlc29sdmVTdHNBdXRoQ29uZmlnID0gKGlucHV0LCB7IHN0c0NsaWVudEN0b3IgfSkgPT4gKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLnJlc29sdmVBd3NBdXRoQ29uZmlnKSh7XG4gICAgLi4uaW5wdXQsXG4gICAgc3RzQ2xpZW50Q3Rvcixcbn0pO1xuZXhwb3J0cy5yZXNvbHZlU3RzQXV0aENvbmZpZyA9IHJlc29sdmVTdHNBdXRoQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHZvaWQgMDtcbmNvbnN0IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBvcHRpb25zLnVzZUR1YWxzdGFja0VuZHBvaW50ID8/IGZhbHNlLFxuICAgICAgICB1c2VGaXBzRW5kcG9pbnQ6IG9wdGlvbnMudXNlRmlwc0VuZHBvaW50ID8/IGZhbHNlLFxuICAgICAgICB1c2VHbG9iYWxFbmRwb2ludDogb3B0aW9ucy51c2VHbG9iYWxFbmRwb2ludCA/PyBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFNpZ25pbmdOYW1lOiBcInN0c1wiLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNUU1NlcnZpY2VFeGNlcHRpb24gPSBleHBvcnRzLl9fU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuY2xhc3MgU1RTU2VydmljZUV4Y2VwdGlvbiBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgU1RTU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1RTU2VydmljZUV4Y2VwdGlvbiA9IFNUU1NlcnZpY2VFeGNlcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Bc3N1bWVSb2xlUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5JbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24gPSBleHBvcnRzLklEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24gPSBleHBvcnRzLklEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24gPSBleHBvcnRzLlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbiA9IGV4cG9ydHMuTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb24gPSBleHBvcnRzLkV4cGlyZWRUb2tlbkV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi9TVFNTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY2xhc3MgRXhwaXJlZFRva2VuRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkV4cGlyZWRUb2tlbkV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFeHBpcmVkVG9rZW5FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkV4cGlyZWRUb2tlbkV4Y2VwdGlvbiA9IEV4cGlyZWRUb2tlbkV4Y2VwdGlvbjtcbmNsYXNzIE1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLk1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uID0gTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb247XG5jbGFzcyBQYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvbiA9IFBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uO1xuY2xhc3MgUmVnaW9uRGlzYWJsZWRFeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBSZWdpb25EaXNhYmxlZEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVnaW9uRGlzYWJsZWRFeGNlcHRpb24gPSBSZWdpb25EaXNhYmxlZEV4Y2VwdGlvbjtcbmNsYXNzIElEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb24gZXh0ZW5kcyBTVFNTZXJ2aWNlRXhjZXB0aW9uXzEuU1RTU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIklEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIklEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbiA9IElEUFJlamVjdGVkQ2xhaW1FeGNlcHRpb247XG5jbGFzcyBJbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvbiA9IEludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uO1xuY2xhc3MgSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIklEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLklEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbiA9IElEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvbjtcbmNsYXNzIEludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvbiBleHRlbmRzIFNUU1NlcnZpY2VFeGNlcHRpb25fMS5TVFNTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24gPSBJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb247XG5jb25zdCBDcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouU2VjcmV0QWNjZXNzS2V5ICYmIHsgU2VjcmV0QWNjZXNzS2V5OiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZyA9IENyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgQXNzdW1lUm9sZVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5DcmVkZW50aWFscyAmJiB7IENyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5DcmVkZW50aWFsc0ZpbHRlclNlbnNpdGl2ZUxvZykob2JqLkNyZWRlbnRpYWxzKSB9KSxcbn0pO1xuZXhwb3J0cy5Bc3N1bWVSb2xlUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBBc3N1bWVSb2xlUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5TQU1MQXNzZXJ0aW9uICYmIHsgU0FNTEFzc2VydGlvbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IEFzc3VtZVJvbGVXaXRoU0FNTFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFNBTUxSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouQ3JlZGVudGlhbHMgJiYgeyBDcmVkZW50aWFsczogKDAsIGV4cG9ydHMuQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5DcmVkZW50aWFscykgfSksXG59KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBBc3N1bWVSb2xlV2l0aFNBTUxSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5XZWJJZGVudGl0eVRva2VuICYmIHsgV2ViSWRlbnRpdHlUb2tlbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouQ3JlZGVudGlhbHMgJiYgeyBDcmVkZW50aWFsczogKDAsIGV4cG9ydHMuQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5DcmVkZW50aWFscykgfSksXG59KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLkNyZWRlbnRpYWxzICYmIHsgQ3JlZGVudGlhbHM6ICgwLCBleHBvcnRzLkNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nKShvYmouQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkdldEZlZGVyYXRpb25Ub2tlblJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBHZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouQ3JlZGVudGlhbHMgJiYgeyBDcmVkZW50aWFsczogKDAsIGV4cG9ydHMuQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5DcmVkZW50aWFscykgfSksXG59KTtcbmV4cG9ydHMuR2V0U2Vzc2lvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBHZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBuYW1lU3RhcnRDaGFyID0gJzpBLVphLXpfXFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkQnO1xuY29uc3QgbmFtZUNoYXIgPSBuYW1lU3RhcnRDaGFyICsgJ1xcXFwtLlxcXFxkXFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDAnO1xuY29uc3QgbmFtZVJlZ2V4cCA9ICdbJyArIG5hbWVTdGFydENoYXIgKyAnXVsnICsgbmFtZUNoYXIgKyAnXSonXG5jb25zdCByZWdleE5hbWUgPSBuZXcgUmVnRXhwKCdeJyArIG5hbWVSZWdleHAgKyAnJCcpO1xuXG5jb25zdCBnZXRBbGxNYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkge1xuICBjb25zdCBtYXRjaGVzID0gW107XG4gIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgY29uc3QgYWxsbWF0Y2hlcyA9IFtdO1xuICAgIGFsbG1hdGNoZXMuc3RhcnRJbmRleCA9IHJlZ2V4Lmxhc3RJbmRleCAtIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChhcnJheU1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IFsgYVtrZXlzW2ldXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gYVtrZXlzW2ldXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4vKiBleHBvcnRzLm1lcmdlID1mdW5jdGlvbiAoYixhKXtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYixhKTtcbn0gKi9cblxuZXhwb3J0cy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgaWYgKGV4cG9ydHMuaXNFeGlzdCh2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLy8gY29uc3QgZmFrZUNhbGwgPSBmdW5jdGlvbihhKSB7cmV0dXJuIGE7fTtcbi8vIGNvbnN0IGZha2VDYWxsTm9SZXR1cm4gPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnRzLmlzTmFtZSA9IGlzTmFtZTtcbmV4cG9ydHMuZ2V0QWxsTWF0Y2hlcyA9IGdldEFsbE1hdGNoZXM7XG5leHBvcnRzLm5hbWVSZWdleHAgPSBuYW1lUmVnZXhwO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL0EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgdW5wYWlyZWRUYWdzOiBbXVxufTtcblxuLy9jb25zdCB0YWdzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCI8XFxcXC8/KFtcXFxcdzpcXFxcLV9cXC5dKylcXFxccypcXC8/PlwiLFwiZ1wiKTtcbmV4cG9ydHMudmFsaWRhdGUgPSBmdW5jdGlvbiAoeG1sRGF0YSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuICBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnICYmIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG4gICAgICBpKz0yO1xuICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLGkpO1xuICAgICAgaWYgKGkuZXJyKSByZXR1cm4gaTtcbiAgICB9ZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAvL3N0YXJ0aW5nIG9mIHRhZ1xuICAgICAgLy9yZWFkIHVudGlsIHlvdSByZWFjaCB0byAnPicgYXZvaWRpbmcgYW55ICc+JyBpbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIGxldCB0YWdTdGFydFBvcyA9IGk7XG4gICAgICBpKys7XG4gICAgICBcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnIScpIHtcbiAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsb3NpbmdUYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICcvJykge1xuICAgICAgICAgIC8vY2xvc2luZyB0YWdcbiAgICAgICAgICBjbG9zaW5nVGFnID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWFkIHRhZ25hbWVcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAnJztcbiAgICAgICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICc+JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICcgJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHQnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcbicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxyJzsgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHRhZ05hbWUgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS50cmltKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGFnTmFtZSk7XG5cbiAgICAgICAgaWYgKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnIHdpdGhvdXQgYXR0cmlidXRlc1xuICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVUYWdOYW1lKHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICBpZiAodGFnTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtc2cgPSBcIkludmFsaWQgc3BhY2UgYWZ0ZXIgJzwnLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgY29uc3QgYXR0clN0clN0YXJ0ID0gaSAtIGF0dHJTdHIubGVuZ3RoO1xuICAgICAgICAgIGF0dHJTdHIgPSBhdHRyU3RyLnN1YnN0cmluZygwLCBhdHRyU3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGFnRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgLy9jb250aW51ZTsgLy90ZXh0IG1heSBwcmVzZW50cyBhZnRlciBzZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGF0dHJTdHJTdGFydCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xvc2luZ1RhZykge1xuICAgICAgICAgIGlmICghcmVzdWx0LnRhZ0Nsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgZG9lc24ndCBoYXZlIHByb3BlciBjbG9zaW5nLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0clN0ci50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgY2FuJ3QgaGF2ZSBhdHRyaWJ1dGVzIG9yIGludmFsaWQgc3RhcnRpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvdGcgPSB0YWdzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRhZ05hbWUgIT09IG90Zy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgIGxldCBvcGVuUG9zID0gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIG90Zy50YWdTdGFydFBvcyk7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjbG9zaW5nIHRhZyAnXCIrb3RnLnRhZ05hbWUrXCInIChvcGVuZWQgaW4gbGluZSBcIitvcGVuUG9zLmxpbmUrXCIsIGNvbCBcIitvcGVuUG9zLmNvbCtcIikgaW5zdGVhZCBvZiBjbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicuXCIsXG4gICAgICAgICAgICAgICAgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0YWdzLCB3ZSByZWFjaGVkIHRoZSByb290IGxldmVsLlxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgcmVhY2hlZFJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGlzVmFsaWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkgLSBhdHRyU3RyLmxlbmd0aCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL2lmIHRoZSByb290IGxldmVsIGhhcyBiZWVuIHJlYWNoZWQgYmVmb3JlIC4uLlxuICAgICAgICAgIGlmIChyZWFjaGVkUm9vdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgJ011bHRpcGxlIHBvc3NpYmxlIHJvb3Qgbm9kZXMgZm91bmQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgLy9kb24ndCBwdXNoIGludG8gc3RhY2tcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lLCB0YWdTdGFydFBvc30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NraXAgdGFnIHRleHQgdmFsdWVcbiAgICAgICAgLy9JdCBtYXkgaW5jbHVkZSBjb21tZW50cyBhbmQgQ0RBVEEgdmFsdWVcbiAgICAgICAgZm9yIChpKys7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaSArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgLy9jb21tZW50IG9yIENBREFUQVxuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLCArK2kpO1xuICAgICAgICAgICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICcmJykge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJBbXAgPSB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgICAgICAgICAgIGlmIChhZnRlckFtcCA9PSAtMSlcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnJicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgaSA9IGFmdGVyQW1wO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlICYmICFpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJFeHRyYSB0ZXh0IGF0IHRoZSBlbmRcIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggaXNXaGl0ZVNwYWNlKHhtbERhdGFbaV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnXCIreG1sRGF0YVtpXStcIicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGFnRm91bmQpIHtcbiAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnU3RhcnQgdGFnIGV4cGVjdGVkLicsIDEpO1xuICB9ZWxzZSBpZiAodGFncy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJVbmNsb3NlZCB0YWcgJ1wiK3RhZ3NbMF0udGFnTmFtZStcIicuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdzWzBdLnRhZ1N0YXJ0UG9zKSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsIFwiSW52YWxpZCAnXCIrXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGFncy5tYXAodCA9PiB0LnRhZ05hbWUpLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcbiAgICAgICAgICBcIicgZm91bmQuXCIsIHtsaW5lOiAxLCBjb2w6IDF9KTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoYXIpe1xuICByZXR1cm4gY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXG4nICB8fCBjaGFyID09PSAnXFxyJztcbn1cbi8qKlxuICogUmVhZCBQcm9jZXNzaW5nIGluc3N0cnVjdGlvbnMgYW5kIHNraXBcbiAqIEBwYXJhbSB7Kn0geG1sRGF0YVxuICogQHBhcmFtIHsqfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRQSSh4bWxEYXRhLCBpKSB7XG4gIGNvbnN0IHN0YXJ0ID0gaTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT0gJz8nIHx8IHhtbERhdGFbaV0gPT0gJyAnKSB7XG4gICAgICAvL3RhZ25hbWVcbiAgICAgIGNvbnN0IHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxuY29uc3QgZG91YmxlUXVvdGUgPSAnXCInO1xuY29uc3Qgc2luZ2xlUXVvdGUgPSBcIidcIjtcblxuLyoqXG4gKiBLZWVwIHJlYWRpbmcgeG1sRGF0YSB1bnRpbCAnPCcgaXMgZm91bmQgb3V0c2lkZSB0aGUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgc3RhcnRDaGFyID0gJyc7XG4gIGxldCB0YWdDbG9zZWQgPSBmYWxzZTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09IGRvdWJsZVF1b3RlIHx8IHhtbERhdGFbaV0gPT09IHNpbmdsZVF1b3RlKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICBzdGFydENoYXIgPSB4bWxEYXRhW2ldO1xuICAgICAgfSBlbHNlIGlmIChzdGFydENoYXIgIT09IHhtbERhdGFbaV0pIHtcbiAgICAgICAgLy9pZiB2YXVlIGlzIGVuY2xvc2VkIHdpdGggZG91YmxlIHF1b3RlIHRoZW4gc2luZ2xlIHF1b3RlcyBhcmUgYWxsb3dlZCBpbnNpZGUgdGhlIHZhbHVlIGFuZCB2aWNlIHZlcnNhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdICE9PSB1bmRlZmluZWQgJiYgbWF0Y2hlc1tpXVs0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIHdpdGhvdXQgdmFsdWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gPT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAvL2luZGVwZW5kZW50IGF0dHJpYnV0ZTogYWJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcImJvb2xlYW4gYXR0cmlidXRlICdcIittYXRjaGVzW2ldWzJdK1wiJyBpcyBub3QgYWxsb3dlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICAvKiBlbHNlIGlmKG1hdGNoZXNbaV1bNl0gPT09IHVuZGVmaW5lZCl7Ly9hdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZTogYWI9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycjogeyBjb2RlOlwiSW52YWxpZEF0dHJcIixtc2c6XCJhdHRyaWJ1dGUgXCIgKyBtYXRjaGVzW2ldWzJdICsgXCIgaGFzIG5vIHZhbHVlIGFzc2lnbmVkLlwifX07XG4gICAgICAgICAgICAgICAgfSAqL1xuICAgIGNvbnN0IGF0dHJOYW1lID0gbWF0Y2hlc1tpXVsyXTtcbiAgICBpZiAoIXZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gICAgaWYgKCFhdHRyTmFtZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKSB7XG4gICAgICAvL2NoZWNrIGZvciBkdXBsaWNhdGUgYXR0cmlidXRlLlxuICAgICAgYXR0ck5hbWVzW2F0dHJOYW1lXSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIHJlcGVhdGVkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgbGV0IHJlID0gL1xcZC87XG4gIGlmICh4bWxEYXRhW2ldID09PSAneCcpIHtcbiAgICBpKys7XG4gICAgcmUgPSAvW1xcZGEtZkEtRl0vO1xuICB9XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICByZXR1cm4gaTtcbiAgICBpZiAoIXhtbERhdGFbaV0ubWF0Y2gocmUpKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI2R0LWNoYXJyZWZcbiAgaSsrO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHhtbERhdGFbaV0gPT09ICcjJykge1xuICAgIGkrKztcbiAgICByZXR1cm4gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0ubWF0Y2goL1xcdy8pICYmIGNvdW50IDwgMjApXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck9iamVjdChjb2RlLCBtZXNzYWdlLCBsaW5lTnVtYmVyKSB7XG4gIHJldHVybiB7XG4gICAgZXJyOiB7XG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbXNnOiBtZXNzYWdlLFxuICAgICAgbGluZTogbGluZU51bWJlci5saW5lIHx8IGxpbmVOdW1iZXIsXG4gICAgICBjb2w6IGxpbmVOdW1iZXIuY29sLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKGF0dHJOYW1lKTtcbn1cblxuLy8gY29uc3Qgc3RhcnRzV2l0aFhNTCA9IC9eeG1sL2k7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFnTmFtZSh0YWduYW1lKSB7XG4gIHJldHVybiB1dGlsLmlzTmFtZSh0YWduYW1lKSAvKiAmJiAhdGFnbmFtZS5tYXRjaChzdGFydHNXaXRoWE1MKSAqLztcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleFxuZnVuY3Rpb24gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGluZGV4KSB7XG4gIGNvbnN0IGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiB7XG4gICAgbGluZTogbGluZXMubGVuZ3RoLFxuXG4gICAgLy8gY29sdW1uIG51bWJlciBpcyBsYXN0IGxpbmUncyBsZW5ndGggKyAxLCBiZWNhdXNlIGNvbHVtbiBudW1iZXJpbmcgc3RhcnRzIGF0IDE6XG4gICAgY29sOiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggKyAxXG4gIH07XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIG1hdGNoIHdpdGhpbiBhdHRyU3RyXG5mdW5jdGlvbiBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaCkge1xuICByZXR1cm4gbWF0Y2guc3RhcnRJbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbn1cbiIsCiAgICAiXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBwcmVzZXJ2ZU9yZGVyOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICAgIHRleHROb2RlTmFtZTogJyN0ZXh0JyxcbiAgICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICAgIHJlbW92ZU5TUHJlZml4OiBmYWxzZSwgLy8gcmVtb3ZlIE5TIGZyb20gdGFnIG5hbWUgb3IgYXR0cmlidXRlIG5hbWUgaWYgdHJ1ZVxuICAgIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL2EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgICAvL2lnbm9yZVJvb3RFbGVtZW50IDogZmFsc2UsXG4gICAgcGFyc2VUYWdWYWx1ZTogdHJ1ZSxcbiAgICBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSxcbiAgICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgICBudW1iZXJQYXJzZU9wdGlvbnM6IHtcbiAgICAgIGhleDogdHJ1ZSxcbiAgICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIH0sXG4gICAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKHRhZ05hbWUsIHZhbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgIGF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgc3RvcE5vZGVzOiBbXSwgLy9uZXN0ZWQgdGFncyB3aWxsIG5vdCBiZSBwYXJzZWQgZXZlbiBmb3IgZXJyb3JzXG4gICAgYWx3YXlzQ3JlYXRlVGV4dE5vZGU6IGZhbHNlLFxuICAgIGlzQXJyYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gICAgdW5wYWlyZWRUYWdzOiBbXSxcbiAgICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gICAgaHRtbEVudGl0aWVzOiBmYWxzZSxcbiAgICBpZ25vcmVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgaWdub3JlUGlUYWdzOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgICB1cGRhdGVUYWc6IGZ1bmN0aW9uKHRhZ05hbWUsIGpQYXRoLCBhdHRycyl7XG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH0sXG4gICAgLy8gc2tpcEVtcHR5TGlzdEl0ZW06IGZhbHNlXG59O1xuICAgXG5jb25zdCBidWlsZE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydHMuYnVpbGRPcHRpb25zID0gYnVpbGRPcHRpb25zO1xuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBYbWxOb2Rle1xuICBjb25zdHJ1Y3Rvcih0YWduYW1lKSB7XG4gICAgdGhpcy50YWduYW1lID0gdGFnbmFtZTtcbiAgICB0aGlzLmNoaWxkID0gW107IC8vbmVzdGVkIHRhZ3MsIHRleHQsIGNkYXRhLCBjb21tZW50cyBpbiBvcmRlclxuICAgIHRoaXNbXCI6QFwiXSA9IHt9OyAvL2F0dHJpYnV0ZXMgbWFwXG4gIH1cbiAgYWRkKGtleSx2YWwpe1xuICAgIC8vIHRoaXMuY2hpbGQucHVzaCgge25hbWUgOiBrZXksIHZhbDogdmFsLCBpc0NkYXRhOiBpc0NkYXRhIH0pO1xuICAgIGlmKGtleSA9PT0gXCJfX3Byb3RvX19cIikga2V5ID0gXCIjX19wcm90b19fXCI7XG4gICAgdGhpcy5jaGlsZC5wdXNoKCB7W2tleV06IHZhbCB9KTtcbiAgfVxuICBhZGRDaGlsZChub2RlKSB7XG4gICAgaWYobm9kZS50YWduYW1lID09PSBcIl9fcHJvdG9fX1wiKSBub2RlLnRhZ25hbWUgPSBcIiNfX3Byb3RvX19cIjtcbiAgICBpZihub2RlW1wiOkBcIl0gJiYgT2JqZWN0LmtleXMobm9kZVtcIjpAXCJdKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCwgW1wiOkBcIl06IG5vZGVbXCI6QFwiXSB9KTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCB9KTtcbiAgICB9XG4gIH07XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gWG1sTm9kZTsiLAogICAgImNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8vVE9ETzogaGFuZGxlIGNvbW1lbnRzXG5mdW5jdGlvbiByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKXtcbiAgICBcbiAgICBjb25zdCBlbnRpdGllcyA9IHt9O1xuICAgIGlmKCB4bWxEYXRhW2kgKyAzXSA9PT0gJ08nICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0MnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1knICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1AnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA4XSA9PT0gJ0UnKVxuICAgIHsgICAgXG4gICAgICAgIGkgPSBpKzk7XG4gICAgICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgICAgICBsZXQgaGFzQm9keSA9IGZhbHNlLCBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBleHAgPSBcIlwiO1xuICAgICAgICBmb3IoO2k8eG1sRGF0YS5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgIWNvbW1lbnQpIHsgLy9EZXRlcm1pbmUgdGhlIHRhZyB0eXBlXG4gICAgICAgICAgICAgICAgaWYoIGhhc0JvZHkgJiYgaXNFbnRpdHkoeG1sRGF0YSwgaSkpe1xuICAgICAgICAgICAgICAgICAgICBpICs9IDc7IFxuICAgICAgICAgICAgICAgICAgICBbZW50aXR5TmFtZSwgdmFsLGldID0gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkrMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbC5pbmRleE9mKFwiJlwiKSA9PT0gLTEpIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdGllc1sgdmFsaWRhdGVFbnRpdHlOYW1lKGVudGl0eU5hbWUpIF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVneCA6IFJlZ0V4cCggYCYke2VudGl0eU5hbWV9O2AsXCJnXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzRWxlbWVudCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzQXR0bGlzdCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzTm90YXRpb24oeG1sRGF0YSwgaSkpIGkgKz0gOTsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc0NvbW1lbnQpICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBET0NUWVBFXCIpO1xuXG4gICAgICAgICAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICAgICAgICAgICAgZXhwID0gXCJcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7IC8vUmVhZCB0YWcgY29udGVudFxuICAgICAgICAgICAgICAgIGlmKGNvbW1lbnQpe1xuICAgICAgICAgICAgICAgICAgICBpZiggeG1sRGF0YVtpIC0gMV0gPT09IFwiLVwiICYmIHhtbERhdGFbaSAtIDJdID09PSBcIi1cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYoIHhtbERhdGFbaV0gPT09ICdbJyl7XG4gICAgICAgICAgICAgICAgaGFzQm9keSA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBleHAgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihhbmdsZUJyYWNrZXRzQ291bnQgIT09IDApe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmNsb3NlZCBET0NUWVBFYCk7XG4gICAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFRhZyBpbnN0ZWFkIG9mIERPQ1RZUEVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtlbnRpdGllcywgaX07XG59XG5cbmZ1bmN0aW9uIHJlYWRFbnRpdHlFeHAoeG1sRGF0YSxpKXtcbiAgICAvL0V4dGVybmFsIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZXh0IFNZU1RFTSBcImh0dHA6Ly9ub3JtYWwtd2Vic2l0ZS5jb21cIiA+XG5cbiAgICAvL1BhcmFtZXRlciBlbnRpdGllcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCImYW5vdGhlckVsZW1lbnQ7XCI+XG5cbiAgICAvL0ludGVybmFsIGVudGl0aWVzIGFyZSBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBlbnRpdHluYW1lIFwicmVwbGFjZW1lbnQgdGV4dFwiPlxuICAgIFxuICAgIC8vcmVhZCBFbnRpdHlOYW1lXG4gICAgbGV0IGVudGl0eU5hbWUgPSBcIlwiO1xuICAgIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGggJiYgKHhtbERhdGFbaV0gIT09IFwiJ1wiICYmIHhtbERhdGFbaV0gIT09ICdcIicgKTsgaSsrKSB7XG4gICAgICAgIC8vIGlmKHhtbERhdGFbaV0gPT09IFwiIFwiKSBjb250aW51ZTtcbiAgICAgICAgLy8gZWxzZSBcbiAgICAgICAgZW50aXR5TmFtZSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgICBlbnRpdHlOYW1lID0gZW50aXR5TmFtZS50cmltKCk7XG4gICAgaWYoZW50aXR5TmFtZS5pbmRleE9mKFwiIFwiKSAhPT0gLTEpIHRocm93IG5ldyBFcnJvcihcIkV4dGVybmFsIGVudGl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG5cbiAgICAvL3JlYWQgRW50aXR5IFZhbHVlXG4gICAgY29uc3Qgc3RhcnRDaGFyID0geG1sRGF0YVtpKytdO1xuICAgIGxldCB2YWwgPSBcIlwiXG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiB4bWxEYXRhW2ldICE9PSBzdGFydENoYXIgOyBpKyspIHtcbiAgICAgICAgdmFsICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIHJldHVybiBbZW50aXR5TmFtZSwgdmFsLCBpXTtcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnLScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICctJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cbmZ1bmN0aW9uIGlzRW50aXR5KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdOJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1knKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbGVtZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdMJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGlzQXR0bGlzdCh4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdTJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ1QnKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNOb3RhdGlvbih4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ08nICYmXG4gICAgeG1sRGF0YVtpKzldID09PSAnTicpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRW50aXR5TmFtZShuYW1lKXtcbiAgICBpZiAodXRpbC5pc05hbWUobmFtZSkpXG5cdHJldHVybiBuYW1lO1xuICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVudGl0eSBuYW1lICR7bmFtZX1gKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFkRG9jVHlwZTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuLy8vQHRzLWNoZWNrXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB4bWxOb2RlID0gcmVxdWlyZSgnLi94bWxOb2RlJyk7XG5jb25zdCByZWFkRG9jVHlwZSA9IHJlcXVpcmUoXCIuL0RvY1R5cGVSZWFkZXJcIik7XG5jb25zdCB0b051bWJlciA9IHJlcXVpcmUoXCJzdHJudW1cIik7XG5cbmNvbnN0IHJlZ3ggPVxuICAnPCgoIVxcXFxbQ0RBVEFcXFxcWyhbXFxcXHNcXFxcU10qPykoXV0+KSl8KChOQU1FOik/KE5BTUUpKShbXj5dKik+fCgoXFxcXC8pKE5BTUUpXFxcXHMqPikpKFtePF0qKSdcbiAgLnJlcGxhY2UoL05BTUUvZywgdXRpbC5uYW1lUmVnZXhwKTtcblxuLy9jb25zdCB0YWdzUmVneCA9IG5ldyBSZWdFeHAoXCI8KFxcXFwvP1tcXFxcdzpcXFxcLVxcLl9dKykoW14+XSopPihcXFxccypcIitjZGF0YVJlZ3grXCIpKihbXjxdKyk/XCIsXCJnXCIpO1xuLy9jb25zdCB0YWdzUmVneCA9IG5ldyBSZWdFeHAoXCI8KFxcXFwvPykoKFxcXFx3KjopPyhbXFxcXHc6XFxcXC1cXC5fXSspKShbXj5dKik+KFtePF0qKShcIitjZGF0YVJlZ3grXCIoW148XSopKSooW148XSspP1wiLFwiZ1wiKTtcblxuY2xhc3MgT3JkZXJlZE9ialBhcnNlcntcbiAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICB0aGlzLnRhZ3NOb2RlU3RhY2sgPSBbXTtcbiAgICB0aGlzLmRvY1R5cGVFbnRpdGllcyA9IHt9O1xuICAgIHRoaXMubGFzdEVudGl0aWVzID0ge1xuICAgICAgXCJhcG9zXCIgOiB7IHJlZ2V4OiAvJihhcG9zfCMzOXwjeDI3KTsvZywgdmFsIDogXCInXCJ9LFxuICAgICAgXCJndFwiIDogeyByZWdleDogLyYoZ3R8IzYyfCN4M0UpOy9nLCB2YWwgOiBcIj5cIn0sXG4gICAgICBcImx0XCIgOiB7IHJlZ2V4OiAvJihsdHwjNjB8I3gzQyk7L2csIHZhbCA6IFwiPFwifSxcbiAgICAgIFwicXVvdFwiIDogeyByZWdleDogLyYocXVvdHwjMzR8I3gyMik7L2csIHZhbCA6IFwiXFxcIlwifSxcbiAgICB9O1xuICAgIHRoaXMuYW1wRW50aXR5ID0geyByZWdleDogLyYoYW1wfCMzOHwjeDI2KTsvZywgdmFsIDogXCImXCJ9O1xuICAgIHRoaXMuaHRtbEVudGl0aWVzID0ge1xuICAgICAgXCJzcGFjZVwiOiB7IHJlZ2V4OiAvJihuYnNwfCMxNjApOy9nLCB2YWw6IFwiIFwiIH0sXG4gICAgICAvLyBcImx0XCIgOiB7IHJlZ2V4OiAvJihsdHwjNjApOy9nLCB2YWw6IFwiPFwiIH0sXG4gICAgICAvLyBcImd0XCIgOiB7IHJlZ2V4OiAvJihndHwjNjIpOy9nLCB2YWw6IFwiPlwiIH0sXG4gICAgICAvLyBcImFtcFwiIDogeyByZWdleDogLyYoYW1wfCMzOCk7L2csIHZhbDogXCImXCIgfSxcbiAgICAgIC8vIFwicXVvdFwiIDogeyByZWdleDogLyYocXVvdHwjMzQpOy9nLCB2YWw6IFwiXFxcIlwiIH0sXG4gICAgICAvLyBcImFwb3NcIiA6IHsgcmVnZXg6IC8mKGFwb3N8IzM5KTsvZywgdmFsOiBcIidcIiB9LFxuICAgICAgXCJjZW50XCIgOiB7IHJlZ2V4OiAvJihjZW50fCMxNjIpOy9nLCB2YWw6IFwiwqJcIiB9LFxuICAgICAgXCJwb3VuZFwiIDogeyByZWdleDogLyYocG91bmR8IzE2Myk7L2csIHZhbDogXCLCo1wiIH0sXG4gICAgICBcInllblwiIDogeyByZWdleDogLyYoeWVufCMxNjUpOy9nLCB2YWw6IFwiwqVcIiB9LFxuICAgICAgXCJldXJvXCIgOiB7IHJlZ2V4OiAvJihldXJvfCM4MzY0KTsvZywgdmFsOiBcIuKCrFwiIH0sXG4gICAgICBcImNvcHlyaWdodFwiIDogeyByZWdleDogLyYoY29weXwjMTY5KTsvZywgdmFsOiBcIsKpXCIgfSxcbiAgICAgIFwicmVnXCIgOiB7IHJlZ2V4OiAvJihyZWd8IzE3NCk7L2csIHZhbDogXCLCrlwiIH0sXG4gICAgICBcImluclwiIDogeyByZWdleDogLyYoaW5yfCM4Mzc3KTsvZywgdmFsOiBcIuKCuVwiIH0sXG4gICAgfTtcbiAgICB0aGlzLmFkZEV4dGVybmFsRW50aXRpZXMgPSBhZGRFeHRlcm5hbEVudGl0aWVzO1xuICAgIHRoaXMucGFyc2VYbWwgPSBwYXJzZVhtbDtcbiAgICB0aGlzLnBhcnNlVGV4dERhdGEgPSBwYXJzZVRleHREYXRhO1xuICAgIHRoaXMucmVzb2x2ZU5hbWVTcGFjZSA9IHJlc29sdmVOYW1lU3BhY2U7XG4gICAgdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAgPSBidWlsZEF0dHJpYnV0ZXNNYXA7XG4gICAgdGhpcy5pc0l0U3RvcE5vZGUgPSBpc0l0U3RvcE5vZGU7XG4gICAgdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlO1xuICAgIHRoaXMucmVhZFN0b3BOb2RlRGF0YSA9IHJlYWRTdG9wTm9kZURhdGE7XG4gICAgdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnID0gc2F2ZVRleHRUb1BhcmVudFRhZztcbiAgICB0aGlzLmFkZENoaWxkID0gYWRkQ2hpbGQ7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBhZGRFeHRlcm5hbEVudGl0aWVzKGV4dGVybmFsRW50aXRpZXMpe1xuICBjb25zdCBlbnRLZXlzID0gT2JqZWN0LmtleXMoZXh0ZXJuYWxFbnRpdGllcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVudCA9IGVudEtleXNbaV07XG4gICAgdGhpcy5sYXN0RW50aXRpZXNbZW50XSA9IHtcbiAgICAgICByZWdleDogbmV3IFJlZ0V4cChcIiZcIitlbnQrXCI7XCIsXCJnXCIpLFxuICAgICAgIHZhbCA6IGV4dGVybmFsRW50aXRpZXNbZW50XVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9udFRyaW1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQXR0cmlidXRlc1xuICogQHBhcmFtIHtib29sZWFufSBpc0xlYWZOb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY2FwZUVudGl0aWVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGV4dERhdGEodmFsLCB0YWdOYW1lLCBqUGF0aCwgZG9udFRyaW0sIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUsIGVzY2FwZUVudGl0aWVzKSB7XG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyAmJiAhZG9udFRyaW0pIHtcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgfVxuICAgIGlmKHZhbC5sZW5ndGggPiAwKXtcbiAgICAgIGlmKCFlc2NhcGVFbnRpdGllcykgdmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSh2YWwpO1xuICAgICAgXG4gICAgICBjb25zdCBuZXd2YWwgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdmFsLCBqUGF0aCwgaGFzQXR0cmlidXRlcywgaXNMZWFmTm9kZSk7XG4gICAgICBpZihuZXd2YWwgPT09IG51bGwgfHwgbmV3dmFsID09PSB1bmRlZmluZWQpe1xuICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3dmFsICE9PSB0eXBlb2YgdmFsIHx8IG5ld3ZhbCAhPT0gdmFsKXtcbiAgICAgICAgLy9vdmVyd3JpdGVcbiAgICAgICAgcmV0dXJuIG5ld3ZhbDtcbiAgICAgIH1lbHNlIGlmKHRoaXMub3B0aW9ucy50cmltVmFsdWVzKXtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbCA9IHZhbC50cmltKCk7XG4gICAgICAgIGlmKHRyaW1tZWRWYWwgPT09IHZhbCl7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpIHtcbiAgICBjb25zdCB0YWdzID0gdGFnbmFtZS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRhZ25hbWUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcbiAgICBpZiAodGFnc1swXSA9PT0gJ3htbG5zJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGFncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRhZ25hbWUgPSBwcmVmaXggKyB0YWdzWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFnbmFtZTtcbn1cblxuLy9UT0RPOiBjaGFuZ2UgcmVnZXggdG8gY2FwdHVyZSBOU1xuLy9jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKFwiKFtcXFxcd1xcXFwtXFxcXC5cXFxcOl0rKVxcXFxzKj1cXFxccyooWydcXFwiXSkoKC58XFxuKSo/KVxcXFwyXCIsXCJnbVwiKTtcbmNvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoJyhbXlxcXFxzPV0rKVxcXFxzKig9XFxcXHMqKFtcXCdcIl0pKFtcXFxcc1xcXFxTXSo/KVxcXFwzKT8nLCAnZ20nKTtcblxuZnVuY3Rpb24gYnVpbGRBdHRyaWJ1dGVzTWFwKGF0dHJTdHIsIGpQYXRoLCB0YWdOYW1lKSB7XG4gIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMgJiYgdHlwZW9mIGF0dHJTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gYXR0clN0ciA9IGF0dHJTdHIucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpO1xuICAgIC8vYXR0clN0ciA9IGF0dHJTdHIgfHwgYXR0clN0ci50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gdXRpbC5nZXRBbGxNYXRjaGVzKGF0dHJTdHIsIGF0dHJzUmVneCk7XG4gICAgY29uc3QgbGVuID0gbWF0Y2hlcy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5yZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0pO1xuICAgICAgbGV0IG9sZFZhbCA9IG1hdGNoZXNbaV1bNF07XG4gICAgICBsZXQgYU5hbWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zZm9ybUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICBhTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKGFOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZihhTmFtZSA9PT0gXCJfX3Byb3RvX19cIikgYU5hbWUgID0gXCIjX19wcm90b19fXCI7XG4gICAgICAgIGlmIChvbGRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgb2xkVmFsID0gb2xkVmFsLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2xkVmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShvbGRWYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgb2xkVmFsLCBqUGF0aCk7XG4gICAgICAgICAgaWYobmV3VmFsID09PSBudWxsIHx8IG5ld1ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIC8vZG9uJ3QgcGFyc2VcbiAgICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IG9sZFZhbDtcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3VmFsICE9PSB0eXBlb2Ygb2xkVmFsIHx8IG5ld1ZhbCAhPT0gb2xkVmFsKXtcbiAgICAgICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvL3BhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICBvbGRWYWwsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubnVtYmVyUGFyc2VPcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgY29uc3QgYXR0ckNvbGxlY3Rpb24gPSB7fTtcbiAgICAgIGF0dHJDb2xsZWN0aW9uW3RoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lXSA9IGF0dHJzO1xuICAgICAgcmV0dXJuIGF0dHJDb2xsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnNcbiAgfVxufVxuXG5jb25zdCBwYXJzZVhtbCA9IGZ1bmN0aW9uKHhtbERhdGEpIHtcbiAgeG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKTsgLy9UT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gIGNvbnN0IHhtbE9iaiA9IG5ldyB4bWxOb2RlKCcheG1sJyk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IHhtbE9iajtcbiAgbGV0IHRleHREYXRhID0gXCJcIjtcbiAgbGV0IGpQYXRoID0gXCJcIjtcbiAgZm9yKGxldCBpPTA7IGk8IHhtbERhdGEubGVuZ3RoOyBpKyspey8vZm9yIGVhY2ggY2hhciBpbiBYTUwgZGF0YVxuICAgIGNvbnN0IGNoID0geG1sRGF0YVtpXTtcbiAgICBpZihjaCA9PT0gJzwnKXtcbiAgICAgIC8vIGNvbnN0IG5leHRJbmRleCA9IGkrMTtcbiAgICAgIC8vIGNvbnN0IF8ybmRDaGFyID0geG1sRGF0YVtuZXh0SW5kZXhdO1xuICAgICAgaWYoIHhtbERhdGFbaSsxXSA9PT0gJy8nKSB7Ly9DbG9zaW5nIFRhZ1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgXCJDbG9zaW5nIFRhZyBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICBsZXQgdGFnTmFtZSA9IHhtbERhdGEuc3Vic3RyaW5nKGkrMixjbG9zZUluZGV4KS50cmltKCk7XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGN1cnJlbnROb2RlKXtcbiAgICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgb2YgbmVzdGVkIHRhZyB3YXMgdW5wYWlyZWQgdGFnXG4gICAgICAgIGNvbnN0IGxhc3RUYWdOYW1lID0galBhdGguc3Vic3RyaW5nKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSsxKTtcbiAgICAgICAgaWYodGFnTmFtZSAmJiB0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnBhaXJlZCB0YWcgY2FuIG5vdCBiZSB1c2VkIGFzIGNsb3NpbmcgdGFnOiA8LyR7dGFnTmFtZX0+YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb3BJbmRleCA9IDBcbiAgICAgICAgaWYobGFzdFRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWdOYW1lKSAhPT0gLTEgKXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZignLicsIGpQYXRoLmxhc3RJbmRleE9mKCcuJyktMSlcbiAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHByb3BJbmRleCA9IGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cmluZygwLCBwcm9wSW5kZXgpO1xuXG4gICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpOy8vYXZvaWQgcmVjdXJzaW9uLCBzZXQgdGhlIHBhcmVudCB0YWcgc2NvcGVcbiAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YVtpKzFdID09PSAnPycpIHtcblxuICAgICAgICBsZXQgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSxpLCBmYWxzZSwgXCI/PlwiKTtcbiAgICAgICAgaWYoIXRhZ0RhdGEpIHRocm93IG5ldyBFcnJvcihcIlBpIFRhZyBpcyBub3QgY2xvc2VkLlwiKTtcblxuICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgaWYoICh0aGlzLm9wdGlvbnMuaWdub3JlRGVjbGFyYXRpb24gJiYgdGFnRGF0YS50YWdOYW1lID09PSBcIj94bWxcIikgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVBpVGFncyl7XG5cbiAgICAgICAgfWVsc2V7XG4gIFxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCBcIlwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZih0YWdEYXRhLnRhZ05hbWUgIT09IHRhZ0RhdGEudGFnRXhwICYmIHRhZ0RhdGEuYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdEYXRhLnRhZ0V4cCwgalBhdGgsIHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaSA9IHRhZ0RhdGEuY2xvc2VJbmRleCArIDE7XG4gICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykge1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSs0LCBcIkNvbW1lbnQgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSl7XG4gICAgICAgICAgY29uc3QgY29tbWVudCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA0LCBlbmRJbmRleCAtIDIpO1xuXG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSwgWyB7IFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSA6IGNvbW1lbnQgfSBdKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gZW5kSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFEJykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKTtcbiAgICAgICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSByZXN1bHQuZW50aXRpZXM7XG4gICAgICAgIGkgPSByZXN1bHQuaTtcbiAgICAgIH1lbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFbJykge1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIl1dPlwiLCBpLCBcIkNEQVRBIGlzIG5vdCBjbG9zZWQuXCIpIC0gMjtcbiAgICAgICAgY29uc3QgdGFnRXhwID0geG1sRGF0YS5zdWJzdHJpbmcoaSArIDksY2xvc2VJbmRleCk7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgLy9jZGF0YSBzaG91bGQgYmUgc2V0IGV2ZW4gaWYgaXQgaXMgMCBsZW5ndGggc3RyaW5nXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKXtcbiAgICAgICAgICAvLyBsZXQgdmFsID0gdGhpcy5wYXJzZVRleHREYXRhKHRhZ0V4cCwgdGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUsIGpQYXRoICsgXCIuXCIgKyB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSwgdHJ1ZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIC8vIGlmKCF2YWwpIHZhbCA9IFwiXCI7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lLCBbIHsgW3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdIDogdGFnRXhwIH0gXSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnRXhwLCBjdXJyZW50Tm9kZS50YWduYW1lLCBqUGF0aCwgdHJ1ZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIGlmKHZhbCA9PSB1bmRlZmluZWQpIHZhbCA9IFwiXCI7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGkgPSBjbG9zZUluZGV4ICsgMjtcbiAgICAgIH1lbHNlIHsvL09wZW5pbmcgdGFnXG4gICAgICAgIGxldCByZXN1bHQgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgdGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KTtcbiAgICAgICAgbGV0IHRhZ05hbWU9IHJlc3VsdC50YWdOYW1lO1xuICAgICAgICBsZXQgdGFnRXhwID0gcmVzdWx0LnRhZ0V4cDtcbiAgICAgICAgbGV0IGF0dHJFeHBQcmVzZW50ID0gcmVzdWx0LmF0dHJFeHBQcmVzZW50O1xuICAgICAgICBsZXQgY2xvc2VJbmRleCA9IHJlc3VsdC5jbG9zZUluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy9zYXZlIHRleHQgYXMgY2hpbGQgbm9kZVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgdGV4dERhdGEpIHtcbiAgICAgICAgICBpZihjdXJyZW50Tm9kZS50YWduYW1lICE9PSAnIXhtbCcpe1xuICAgICAgICAgICAgLy93aGVuIG5lc3RlZCB0YWcgaXMgZm91bmRcbiAgICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIHdhcyB1bnBhaXJlZCB0YWdcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IGN1cnJlbnROb2RlO1xuICAgICAgICBpZihsYXN0VGFnICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnLnRhZ25hbWUpICE9PSAtMSApe1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyaW5nKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnTmFtZSAhPT0geG1sT2JqLnRhZ25hbWUpe1xuICAgICAgICAgIGpQYXRoICs9IGpQYXRoID8gXCIuXCIgKyB0YWdOYW1lIDogdGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0l0U3RvcE5vZGUodGhpcy5vcHRpb25zLnN0b3BOb2RlcywgalBhdGgsIHRhZ05hbWUpKSB7IC8vVE9ETzogbmFtZXNwYWNlXG4gICAgICAgICAgbGV0IHRhZ0NvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgIC8vc2VsZi1jbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGkgPSByZXN1bHQuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy91bnBhaXJlZCB0YWdcbiAgICAgICAgICBlbHNlIGlmKHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL25vcm1hbCB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy9yZWFkIHVudGlsIGNsb3NpbmcgdGFnIGlzIGZvdW5kXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgdGFnTmFtZSwgY2xvc2VJbmRleCArIDEpO1xuICAgICAgICAgICAgaWYoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiAke3RhZ05hbWV9YCk7XG4gICAgICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gcmVzdWx0LnRhZ0NvbnRlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRhZ0NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRhZ0NvbnRlbnQgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnQ29udGVudCwgdGFnTmFtZSwgalBhdGgsIHRydWUsIGF0dHJFeHBQcmVzZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICBjaGlsZE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRhZ0NvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgIH1lbHNle1xuICAvL3NlbGZDbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ05hbWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cigwLCB0YWdFeHAubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgICBpZih0YWdOYW1lICE9PSB0YWdFeHAgJiYgYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgsIHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjdXJyZW50Tm9kZSwgY2hpbGROb2RlLCBqUGF0aClcbiAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgICAgfVxuICAgIC8vb3BlbmluZyB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUoIHRhZ05hbWUpO1xuICAgICAgICAgICAgdGhpcy50YWdzTm9kZVN0YWNrLnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0YWdOYW1lICE9PSB0YWdFeHAgJiYgYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgsIHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjdXJyZW50Tm9kZSwgY2hpbGROb2RlLCBqUGF0aClcbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY2hpbGROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gICAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIHRleHREYXRhICs9IHhtbERhdGFbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB4bWxPYmouY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIGFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKXtcbiAgY29uc3QgcmVzdWx0ID0gdGhpcy5vcHRpb25zLnVwZGF0ZVRhZyhjaGlsZE5vZGUudGFnbmFtZSwgalBhdGgsIGNoaWxkTm9kZVtcIjpAXCJdKVxuICBpZihyZXN1bHQgPT09IGZhbHNlKXtcbiAgfWVsc2UgaWYodHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIil7XG4gICAgY2hpbGROb2RlLnRhZ25hbWUgPSByZXN1bHRcbiAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICB9ZWxzZXtcbiAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICB9XG59XG5cbmNvbnN0IHJlcGxhY2VFbnRpdGllc1ZhbHVlID0gZnVuY3Rpb24odmFsKXtcblxuICBpZih0aGlzLm9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKXtcbiAgICBmb3IobGV0IGVudGl0eU5hbWUgaW4gdGhpcy5kb2NUeXBlRW50aXRpZXMpe1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5kb2NUeXBlRW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ3gsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgICBmb3IobGV0IGVudGl0eU5hbWUgaW4gdGhpcy5sYXN0RW50aXRpZXMpe1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5sYXN0RW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gICAgaWYodGhpcy5vcHRpb25zLmh0bWxFbnRpdGllcyl7XG4gICAgICBmb3IobGV0IGVudGl0eU5hbWUgaW4gdGhpcy5odG1sRW50aXRpZXMpe1xuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmh0bWxFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbCA9IHZhbC5yZXBsYWNlKCB0aGlzLmFtcEVudGl0eS5yZWdleCwgdGhpcy5hbXBFbnRpdHkudmFsKTtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoLCBpc0xlYWZOb2RlKSB7XG4gIGlmICh0ZXh0RGF0YSkgeyAvL3N0b3JlIHByZXZpb3VzbHkgY29sbGVjdGVkIGRhdGEgYXMgdGV4dE5vZGVcbiAgICBpZihpc0xlYWZOb2RlID09PSB1bmRlZmluZWQpIGlzTGVhZk5vZGUgPSBPYmplY3Qua2V5cyhjdXJyZW50Tm9kZS5jaGlsZCkubGVuZ3RoID09PSAwXG4gICAgXG4gICAgdGV4dERhdGEgPSB0aGlzLnBhcnNlVGV4dERhdGEodGV4dERhdGEsXG4gICAgICBjdXJyZW50Tm9kZS50YWduYW1lLFxuICAgICAgalBhdGgsXG4gICAgICBmYWxzZSxcbiAgICAgIGN1cnJlbnROb2RlW1wiOkBcIl0gPyBPYmplY3Qua2V5cyhjdXJyZW50Tm9kZVtcIjpAXCJdKS5sZW5ndGggIT09IDAgOiBmYWxzZSxcbiAgICAgIGlzTGVhZk5vZGUpO1xuXG4gICAgaWYgKHRleHREYXRhICE9PSB1bmRlZmluZWQgJiYgdGV4dERhdGEgIT09IFwiXCIpXG4gICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgdGV4dERhdGEpO1xuICAgIHRleHREYXRhID0gXCJcIjtcbiAgfVxuICByZXR1cm4gdGV4dERhdGE7XG59XG5cbi8vVE9ETzogdXNlIGpQYXRoIHRvIHNpbXBsaWZ5IHRoZSBsb2dpY1xuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nW119IHN0b3BOb2RlcyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBqUGF0aFxuICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRUYWdOYW1lIFxuICovXG5mdW5jdGlvbiBpc0l0U3RvcE5vZGUoc3RvcE5vZGVzLCBqUGF0aCwgY3VycmVudFRhZ05hbWUpe1xuICBjb25zdCBhbGxOb2Rlc0V4cCA9IFwiKi5cIiArIGN1cnJlbnRUYWdOYW1lO1xuICBmb3IgKGNvbnN0IHN0b3BOb2RlUGF0aCBpbiBzdG9wTm9kZXMpIHtcbiAgICBjb25zdCBzdG9wTm9kZUV4cCA9IHN0b3BOb2Rlc1tzdG9wTm9kZVBhdGhdO1xuICAgIGlmKCBhbGxOb2Rlc0V4cCA9PT0gc3RvcE5vZGVFeHAgfHwgalBhdGggPT09IHN0b3BOb2RlRXhwICApIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0YWcgRXhwcmVzc2lvbiBhbmQgd2hlcmUgaXQgaXMgZW5kaW5nIGhhbmRsaW5nIHNpbmdsZS1kb3VibGUgcXVvdGVzIHNpdHVhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGEgXG4gKiBAcGFyYW0ge251bWJlcn0gaSBzdGFydGluZyBpbmRleFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHRhZ0V4cFdpdGhDbG9zaW5nSW5kZXgoeG1sRGF0YSwgaSwgY2xvc2luZ0NoYXIgPSBcIj5cIil7XG4gIGxldCBhdHRyQm91bmRhcnk7XG4gIGxldCB0YWdFeHAgPSBcIlwiO1xuICBmb3IgKGxldCBpbmRleCA9IGk7IGluZGV4IDwgeG1sRGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBsZXQgY2ggPSB4bWxEYXRhW2luZGV4XTtcbiAgICBpZiAoYXR0ckJvdW5kYXJ5KSB7XG4gICAgICAgIGlmIChjaCA9PT0gYXR0ckJvdW5kYXJ5KSBhdHRyQm91bmRhcnkgPSBcIlwiOy8vcmVzZXRcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnXCInIHx8IGNoID09PSBcIidcIikge1xuICAgICAgICBhdHRyQm91bmRhcnkgPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBjbG9zaW5nQ2hhclswXSkge1xuICAgICAgaWYoY2xvc2luZ0NoYXJbMV0pe1xuICAgICAgICBpZih4bWxEYXRhW2luZGV4ICsgMV0gPT09IGNsb3NpbmdDaGFyWzFdKXtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB0YWdFeHAsXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSAnXFx0Jykge1xuICAgICAgY2ggPSBcIiBcIlxuICAgIH1cbiAgICB0YWdFeHAgKz0gY2g7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBzdHIsIGksIGVyck1zZyl7XG4gIGNvbnN0IGNsb3NpbmdJbmRleCA9IHhtbERhdGEuaW5kZXhPZihzdHIsIGkpO1xuICBpZihjbG9zaW5nSW5kZXggPT09IC0xKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKVxuICB9ZWxzZXtcbiAgICByZXR1cm4gY2xvc2luZ0luZGV4ICsgc3RyLmxlbmd0aCAtIDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFRhZ0V4cCh4bWxEYXRhLGksIHJlbW92ZU5TUHJlZml4LCBjbG9zaW5nQ2hhciA9IFwiPlwiKXtcbiAgY29uc3QgcmVzdWx0ID0gdGFnRXhwV2l0aENsb3NpbmdJbmRleCh4bWxEYXRhLCBpKzEsIGNsb3NpbmdDaGFyKTtcbiAgaWYoIXJlc3VsdCkgcmV0dXJuO1xuICBsZXQgdGFnRXhwID0gcmVzdWx0LmRhdGE7XG4gIGNvbnN0IGNsb3NlSW5kZXggPSByZXN1bHQuaW5kZXg7XG4gIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gdGFnRXhwLnNlYXJjaCgvXFxzLyk7XG4gIGxldCB0YWdOYW1lID0gdGFnRXhwO1xuICBsZXQgYXR0ckV4cFByZXNlbnQgPSB0cnVlO1xuICBpZihzZXBhcmF0b3JJbmRleCAhPT0gLTEpey8vc2VwYXJhdGUgdGFnIG5hbWUgYW5kIGF0dHJpYnV0ZXMgZXhwcmVzc2lvblxuICAgIHRhZ05hbWUgPSB0YWdFeHAuc3Vic3RyKDAsIHNlcGFyYXRvckluZGV4KS5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB0YWdFeHAgPSB0YWdFeHAuc3Vic3RyKHNlcGFyYXRvckluZGV4ICsgMSk7XG4gIH1cblxuICBpZihyZW1vdmVOU1ByZWZpeCl7XG4gICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICBhdHRyRXhwUHJlc2VudCA9IHRhZ05hbWUgIT09IHJlc3VsdC5kYXRhLnN1YnN0cihjb2xvbkluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIHRhZ0V4cDogdGFnRXhwLFxuICAgIGNsb3NlSW5kZXg6IGNsb3NlSW5kZXgsXG4gICAgYXR0ckV4cFByZXNlbnQ6IGF0dHJFeHBQcmVzZW50LFxuICB9XG59XG4vKipcbiAqIGZpbmQgcGFpcmVkIHRhZyBmb3IgYSBzdG9wIG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxEYXRhIFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgXG4gKiBAcGFyYW0ge251bWJlcn0gaSBcbiAqL1xuZnVuY3Rpb24gcmVhZFN0b3BOb2RlRGF0YSh4bWxEYXRhLCB0YWdOYW1lLCBpKXtcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGk7XG4gIC8vIFN0YXJ0aW5nIGF0IDEgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGFuIG9wZW4gdGFnXG4gIGxldCBvcGVuVGFnQ291bnQgPSAxO1xuXG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmKCB4bWxEYXRhW2ldID09PSBcIjxcIil7IFxuICAgICAgaWYgKHhtbERhdGFbaSsxXSA9PT0gXCIvXCIpIHsvL2Nsb3NlIHRhZ1xuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPlwiLCBpLCBgJHt0YWdOYW1lfSBpcyBub3QgY2xvc2VkYCk7XG4gICAgICAgICAgbGV0IGNsb3NlVGFnTmFtZSA9IHhtbERhdGEuc3Vic3RyaW5nKGkrMixjbG9zZUluZGV4KS50cmltKCk7XG4gICAgICAgICAgaWYoY2xvc2VUYWdOYW1lID09PSB0YWdOYW1lKXtcbiAgICAgICAgICAgIG9wZW5UYWdDb3VudC0tO1xuICAgICAgICAgICAgaWYgKG9wZW5UYWdDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvbnRlbnQ6IHhtbERhdGEuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGkpLFxuICAgICAgICAgICAgICAgIGkgOiBjbG9zZUluZGV4XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YVtpKzFdID09PSAnPycpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI/PlwiLCBpKzEsIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMykgPT09ICchLS0nKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiLS0+XCIsIGkrMywgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFbJykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIl1dPlwiLCBpLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpIC0gMjtcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSwgaSwgJz4nKVxuXG4gICAgICAgICAgaWYgKHRhZ0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5UYWdOYW1lID0gdGFnRGF0YSAmJiB0YWdEYXRhLnRhZ05hbWU7XG4gICAgICAgICAgICBpZiAob3BlblRhZ05hbWUgPT09IHRhZ05hbWUgJiYgdGFnRGF0YS50YWdFeHBbdGFnRGF0YS50YWdFeHAubGVuZ3RoLTFdICE9PSBcIi9cIikge1xuICAgICAgICAgICAgICBvcGVuVGFnQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGk9dGFnRGF0YS5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9Ly9lbmQgZm9yIGxvb3Bcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZSh2YWwsIHNob3VsZFBhcnNlLCBvcHRpb25zKSB7XG4gIGlmIChzaG91bGRQYXJzZSAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIC8vY29uc29sZS5sb2cob3B0aW9ucylcbiAgICBjb25zdCBuZXd2YWwgPSB2YWwudHJpbSgpO1xuICAgIGlmKG5ld3ZhbCA9PT0gJ3RydWUnICkgcmV0dXJuIHRydWU7XG4gICAgZWxzZSBpZihuZXd2YWwgPT09ICdmYWxzZScgKSByZXR1cm4gZmFsc2U7XG4gICAgZWxzZSByZXR1cm4gdG9OdW1iZXIodmFsLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodXRpbC5pc0V4aXN0KHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IE9yZGVyZWRPYmpQYXJzZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IG5vZGUgXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiBwcmV0dGlmeShub2RlLCBvcHRpb25zKXtcbiAgcmV0dXJuIGNvbXByZXNzKCBub2RlLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IGFyciBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIFxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoIFxuICogQHJldHVybnMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNvbXByZXNzKGFyciwgb3B0aW9ucywgalBhdGgpe1xuICBsZXQgdGV4dDtcbiAgY29uc3QgY29tcHJlc3NlZE9iaiA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRhZ09iaiA9IGFycltpXTtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BOYW1lKHRhZ09iaik7XG4gICAgbGV0IG5ld0pwYXRoID0gXCJcIjtcbiAgICBpZihqUGF0aCA9PT0gdW5kZWZpbmVkKSBuZXdKcGF0aCA9IHByb3BlcnR5O1xuICAgIGVsc2UgbmV3SnBhdGggPSBqUGF0aCArIFwiLlwiICsgcHJvcGVydHk7XG5cbiAgICBpZihwcm9wZXJ0eSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpe1xuICAgICAgaWYodGV4dCA9PT0gdW5kZWZpbmVkKSB0ZXh0ID0gdGFnT2JqW3Byb3BlcnR5XTtcbiAgICAgIGVsc2UgdGV4dCArPSBcIlwiICsgdGFnT2JqW3Byb3BlcnR5XTtcbiAgICB9ZWxzZSBpZihwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKXtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1lbHNlIGlmKHRhZ09ialtwcm9wZXJ0eV0pe1xuICAgICAgXG4gICAgICBsZXQgdmFsID0gY29tcHJlc3ModGFnT2JqW3Byb3BlcnR5XSwgb3B0aW9ucywgbmV3SnBhdGgpO1xuICAgICAgY29uc3QgaXNMZWFmID0gaXNMZWFmVGFnKHZhbCwgb3B0aW9ucyk7XG5cbiAgICAgIGlmKHRhZ09ialtcIjpAXCJdKXtcbiAgICAgICAgYXNzaWduQXR0cmlidXRlcyggdmFsLCB0YWdPYmpbXCI6QFwiXSwgbmV3SnBhdGgsIG9wdGlvbnMpO1xuICAgICAgfWVsc2UgaWYoT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDEgJiYgdmFsW29wdGlvbnMudGV4dE5vZGVOYW1lXSAhPT0gdW5kZWZpbmVkICYmICFvcHRpb25zLmFsd2F5c0NyZWF0ZVRleHROb2RlKXtcbiAgICAgICAgdmFsID0gdmFsW29wdGlvbnMudGV4dE5vZGVOYW1lXTtcbiAgICAgIH1lbHNlIGlmKE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwKXtcbiAgICAgICAgaWYob3B0aW9ucy5hbHdheXNDcmVhdGVUZXh0Tm9kZSkgdmFsW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IFwiXCI7XG4gICAgICAgIGVsc2UgdmFsID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgaWYoY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCAmJiBjb21wcmVzc2VkT2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICBpZighQXJyYXkuaXNBcnJheShjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gWyBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgIH1lbHNle1xuICAgICAgICAvL1RPRE86IGlmIGEgbm9kZSBpcyBub3QgYW4gYXJyYXksIHRoZW4gY2hlY2sgaWYgaXQgc2hvdWxkIGJlIGFuIGFycmF5XG4gICAgICAgIC8vYWxzbyBkZXRlcm1pbmUgaWYgaXQgaXMgYSBsZWFmIG5vZGVcbiAgICAgICAgaWYgKG9wdGlvbnMuaXNBcnJheShwcm9wZXJ0eSwgbmV3SnBhdGgsIGlzTGVhZiApKSB7XG4gICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSBbdmFsXTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gIH1cbiAgLy8gaWYodGV4dCAmJiB0ZXh0Lmxlbmd0aCA+IDApIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgaWYodHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIpe1xuICAgIGlmKHRleHQubGVuZ3RoID4gMCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICB9ZWxzZSBpZih0ZXh0ICE9PSB1bmRlZmluZWQpIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgcmV0dXJuIGNvbXByZXNzZWRPYmo7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iail7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGlmKGtleSAhPT0gXCI6QFwiKSByZXR1cm4ga2V5O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkF0dHJpYnV0ZXMob2JqLCBhdHRyTWFwLCBqcGF0aCwgb3B0aW9ucyl7XG4gIGlmIChhdHRyTWFwKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJNYXApO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXRyck5hbWUgPSBrZXlzW2ldO1xuICAgICAgaWYgKG9wdGlvbnMuaXNBcnJheShhdHJyTmFtZSwganBhdGggKyBcIi5cIiArIGF0cnJOYW1lLCB0cnVlLCB0cnVlKSkge1xuICAgICAgICBvYmpbYXRyck5hbWVdID0gWyBhdHRyTWFwW2F0cnJOYW1lXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2F0cnJOYW1lXSA9IGF0dHJNYXBbYXRyck5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0xlYWZUYWcob2JqLCBvcHRpb25zKXtcbiAgY29uc3QgeyB0ZXh0Tm9kZU5hbWUgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoO1xuICBcbiAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgIHByb3BDb3VudCA9PT0gMSAmJlxuICAgIChvYmpbdGV4dE5vZGVOYW1lXSB8fCB0eXBlb2Ygb2JqW3RleHROb2RlTmFtZV0gPT09IFwiYm9vbGVhblwiIHx8IG9ialt0ZXh0Tm9kZU5hbWVdID09PSAwKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMucHJldHRpZnkgPSBwcmV0dGlmeTtcbiIsCiAgICAiY29uc3QgeyBidWlsZE9wdGlvbnN9ID0gcmVxdWlyZShcIi4vT3B0aW9uc0J1aWxkZXJcIik7XG5jb25zdCBPcmRlcmVkT2JqUGFyc2VyID0gcmVxdWlyZShcIi4vT3JkZXJlZE9ialBhcnNlclwiKTtcbmNvbnN0IHsgcHJldHRpZnl9ID0gcmVxdWlyZShcIi4vbm9kZTJqc29uXCIpO1xuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9yJyk7XG5cbmNsYXNzIFhNTFBhcnNlcntcbiAgICBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcbiAgICAgICAgdGhpcy5leHRlcm5hbEVudGl0aWVzID0ge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGJ1aWxkT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIFhNTCBkYXRzIHRvIEpTIG9iamVjdCBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGEgXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gdmFsaWRhdGlvbk9wdGlvbiBcbiAgICAgKi9cbiAgICBwYXJzZSh4bWxEYXRhLHZhbGlkYXRpb25PcHRpb24pe1xuICAgICAgICBpZih0eXBlb2YgeG1sRGF0YSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgIH1lbHNlIGlmKCB4bWxEYXRhLnRvU3RyaW5nKXtcbiAgICAgICAgICAgIHhtbERhdGEgPSB4bWxEYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWE1MIGRhdGEgaXMgYWNjZXB0ZWQgaW4gU3RyaW5nIG9yIEJ5dGVzW10gZm9ybS5cIilcbiAgICAgICAgfVxuICAgICAgICBpZiggdmFsaWRhdGlvbk9wdGlvbil7XG4gICAgICAgICAgICBpZih2YWxpZGF0aW9uT3B0aW9uID09PSB0cnVlKSB2YWxpZGF0aW9uT3B0aW9uID0ge307IC8vdmFsaWRhdGUgd2l0aCBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHhtbERhdGEsIHZhbGlkYXRpb25PcHRpb24pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggYCR7cmVzdWx0LmVyci5tc2d9OiR7cmVzdWx0LmVyci5saW5lfToke3Jlc3VsdC5lcnIuY29sfWAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JkZXJlZE9ialBhcnNlciA9IG5ldyBPcmRlcmVkT2JqUGFyc2VyKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIG9yZGVyZWRPYmpQYXJzZXIuYWRkRXh0ZXJuYWxFbnRpdGllcyh0aGlzLmV4dGVybmFsRW50aXRpZXMpO1xuICAgICAgICBjb25zdCBvcmRlcmVkUmVzdWx0ID0gb3JkZXJlZE9ialBhcnNlci5wYXJzZVhtbCh4bWxEYXRhKTtcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnByZXNlcnZlT3JkZXIgfHwgb3JkZXJlZFJlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gb3JkZXJlZFJlc3VsdDtcbiAgICAgICAgZWxzZSByZXR1cm4gcHJldHRpZnkob3JkZXJlZFJlc3VsdCwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgRW50aXR5IHdoaWNoIGlzIG5vdCBieSBkZWZhdWx0IHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBcbiAgICAgKi9cbiAgICBhZGRFbnRpdHkoa2V5LCB2YWx1ZSl7XG4gICAgICAgIGlmKHZhbHVlLmluZGV4T2YoXCImXCIpICE9PSAtMSl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbnRpdHkgdmFsdWUgY2FuJ3QgaGF2ZSAnJidcIilcbiAgICAgICAgfWVsc2UgaWYoa2V5LmluZGV4T2YoXCImXCIpICE9PSAtMSB8fCBrZXkuaW5kZXhPZihcIjtcIikgIT09IC0xKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSBtdXN0IGJlIHNldCB3aXRob3V0ICcmJyBhbmQgJzsnLiBFZy4gdXNlICcjeEQnIGZvciAnJiN4RDsnXCIpXG4gICAgICAgIH1lbHNlIGlmKHZhbHVlID09PSBcIiZcIil7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgd2l0aCB2YWx1ZSAnJicgaXMgbm90IHBlcm1pdHRlZFwiKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsRW50aXRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFhNTFBhcnNlcjsiLAogICAgImNvbnN0IEVPTCA9IFwiXFxuXCI7XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBqQXJyYXkgXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0b1htbChqQXJyYXksIG9wdGlvbnMpIHtcbiAgICBsZXQgaW5kZW50YXRpb24gPSBcIlwiO1xuICAgIGlmIChvcHRpb25zLmZvcm1hdCAmJiBvcHRpb25zLmluZGVudEJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaW5kZW50YXRpb24gPSBFT0w7XG4gICAgfVxuICAgIHJldHVybiBhcnJUb1N0cihqQXJyYXksIG9wdGlvbnMsIFwiXCIsIGluZGVudGF0aW9uKTtcbn1cblxuZnVuY3Rpb24gYXJyVG9TdHIoYXJyLCBvcHRpb25zLCBqUGF0aCwgaW5kZW50YXRpb24pIHtcbiAgICBsZXQgeG1sU3RyID0gXCJcIjtcbiAgICBsZXQgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRhZ09iaiA9IGFycltpXTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHByb3BOYW1lKHRhZ09iaik7XG4gICAgICAgIGxldCBuZXdKUGF0aCA9IFwiXCI7XG4gICAgICAgIGlmIChqUGF0aC5sZW5ndGggPT09IDApIG5ld0pQYXRoID0gdGFnTmFtZVxuICAgICAgICBlbHNlIG5ld0pQYXRoID0gYCR7alBhdGh9LiR7dGFnTmFtZX1gO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSBvcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRhZ1RleHQgPSB0YWdPYmpbdGFnTmFtZV07XG4gICAgICAgICAgICBpZiAoIWlzU3RvcE5vZGUobmV3SlBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IG9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdGFnVGV4dCk7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKHRhZ1RleHQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1RleHQ7XG4gICAgICAgICAgICBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c0VsZW1lbnRUYWcpIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwhW0NEQVRBWyR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX1dXT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY29tbWVudFByb3BOYW1lKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb24gKyBgPCEtLSR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX0tLT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXSA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dFN0ciA9IGF0dHJfdG9fc3RyKHRhZ09ialtcIjpAXCJdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBJbmQgPSB0YWdOYW1lID09PSBcIj94bWxcIiA/IFwiXCIgOiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGxldCBwaVRleHROb2RlTmFtZSA9IHRhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICAgICAgICBwaVRleHROb2RlTmFtZSA9IHBpVGV4dE5vZGVOYW1lLmxlbmd0aCAhPT0gMCA/IFwiIFwiICsgcGlUZXh0Tm9kZU5hbWUgOiBcIlwiOyAvL3JlbW92ZSBleHRyYSBzcGFjaW5nXG4gICAgICAgICAgICB4bWxTdHIgKz0gdGVtcEluZCArIGA8JHt0YWdOYW1lfSR7cGlUZXh0Tm9kZU5hbWV9JHthdHRTdHJ9Pz5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0lkZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgaWYgKG5ld0lkZW50YXRpb24gIT09IFwiXCIpIHtcbiAgICAgICAgICAgIG5ld0lkZW50YXRpb24gKz0gb3B0aW9ucy5pbmRlbnRCeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaW5kZW50YXRpb24gKyBgPCR7dGFnTmFtZX0ke2F0dFN0cn1gO1xuICAgICAgICBjb25zdCB0YWdWYWx1ZSA9IGFyclRvU3RyKHRhZ09ialt0YWdOYW1lXSwgb3B0aW9ucywgbmV3SlBhdGgsIG5ld0lkZW50YXRpb24pO1xuICAgICAgICBpZiAob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGVsc2UgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKCghdGFnVmFsdWUgfHwgdGFnVmFsdWUubGVuZ3RoID09PSAwKSAmJiBvcHRpb25zLnN1cHByZXNzRW1wdHlOb2RlKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIi8+XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnVmFsdWUgJiYgdGFnVmFsdWUuZW5kc1dpdGgoXCI+XCIpKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBgPiR7dGFnVmFsdWV9JHtpbmRlbnRhdGlvbn08LyR7dGFnTmFtZX0+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdTdGFydCArIFwiPlwiO1xuICAgICAgICAgICAgaWYgKHRhZ1ZhbHVlICYmIGluZGVudGF0aW9uICE9PSBcIlwiICYmICh0YWdWYWx1ZS5pbmNsdWRlcyhcIi8+XCIpIHx8IHRhZ1ZhbHVlLmluY2x1ZGVzKFwiPC9cIikpKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgb3B0aW9ucy5pbmRlbnRCeSArIHRhZ1ZhbHVlICsgaW5kZW50YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSB0YWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSBgPC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH1cbiAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB4bWxTdHI7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhdHRyX3RvX3N0cihhdHRyTWFwLCBvcHRpb25zKSB7XG4gICAgbGV0IGF0dHJTdHIgPSBcIlwiO1xuICAgIGlmIChhdHRyTWFwICYmICFvcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYXR0ciBpbiBhdHRyTWFwKSB7XG4gICAgICAgICAgICBsZXQgYXR0clZhbCA9IG9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ciwgYXR0ck1hcFthdHRyXSk7XG4gICAgICAgICAgICBhdHRyVmFsID0gcmVwbGFjZUVudGl0aWVzVmFsdWUoYXR0clZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoYXR0clZhbCA9PT0gdHJ1ZSAmJiBvcHRpb25zLnN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX09XCIke2F0dHJWYWx9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyU3RyO1xufVxuXG5mdW5jdGlvbiBpc1N0b3BOb2RlKGpQYXRoLCBvcHRpb25zKSB7XG4gICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUubGVuZ3RoIC0gMSk7XG4gICAgbGV0IHRhZ05hbWUgPSBqUGF0aC5zdWJzdHIoalBhdGgubGFzdEluZGV4T2YoXCIuXCIpICsgMSk7XG4gICAgZm9yIChsZXQgaW5kZXggaW4gb3B0aW9ucy5zdG9wTm9kZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0galBhdGggfHwgb3B0aW9ucy5zdG9wTm9kZXNbaW5kZXhdID09PSBcIiouXCIgKyB0YWdOYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXNWYWx1ZSh0ZXh0VmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodGV4dFZhbHVlICYmIHRleHRWYWx1ZS5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gb3B0aW9ucy5lbnRpdGllc1tpXTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRleHRWYWx1ZS5yZXBsYWNlKGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9YbWw7XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbi8vcGFyc2UgRW1wdHkgTm9kZSBhcyBzZWxmIGNsb3Npbmcgbm9kZVxuY29uc3QgYnVpbGRGcm9tT3JkZXJlZEpzID0gcmVxdWlyZSgnLi9vcmRlcmVkSnMyWG1sJyk7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgZm9ybWF0OiBmYWxzZSxcbiAgaW5kZW50Qnk6ICcgICcsXG4gIHN1cHByZXNzRW1wdHlOb2RlOiBmYWxzZSxcbiAgc3VwcHJlc3NVbnBhaXJlZE5vZGU6IHRydWUsXG4gIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IHRydWUsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihrZXksIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCBhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICBjb21tZW50UHJvcE5hbWU6IGZhbHNlLFxuICB1bnBhaXJlZFRhZ3M6IFtdLFxuICBlbnRpdGllczogW1xuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIsIFwiZ1wiKSwgdmFsOiBcIiZhbXA7XCIgfSwvL2l0IG11c3QgYmUgb24gdG9wXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpLCB2YWw6IFwiJmd0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIjxcIiwgXCJnXCIpLCB2YWw6IFwiJmx0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcJ1wiLCBcImdcIiksIHZhbDogXCImYXBvcztcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgdmFsOiBcIiZxdW90O1wiIH1cbiAgXSxcbiAgcHJvY2Vzc0VudGl0aWVzOiB0cnVlLFxuICBzdG9wTm9kZXM6IFtdLFxuICAvLyB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgLy8gdHJhbnNmb3JtQXR0cmlidXRlTmFtZTogZmFsc2UsXG4gIG9uZUxpc3RHcm91cDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIEJ1aWxkZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyB8fCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBmdW5jdGlvbigvKmEqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hdHRyUHJlZml4TGVuID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoO1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBpc0F0dHJpYnV0ZTtcbiAgfVxuXG4gIHRoaXMucHJvY2Vzc1RleHRPck9iak5vZGUgPSBwcm9jZXNzVGV4dE9yT2JqTm9kZVxuXG4gIGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBpbmRlbnRhdGU7XG4gICAgdGhpcy50YWdFbmRDaGFyID0gJz5cXG4nO1xuICAgIHRoaXMubmV3TGluZSA9ICdcXG4nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaW5kZW50YXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPic7XG4gICAgdGhpcy5uZXdMaW5lID0gJyc7XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihqT2JqKSB7XG4gIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyKXtcbiAgICByZXR1cm4gYnVpbGRGcm9tT3JkZXJlZEpzKGpPYmosIHRoaXMub3B0aW9ucyk7XG4gIH1lbHNlIHtcbiAgICBpZihBcnJheS5pc0FycmF5KGpPYmopICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lLmxlbmd0aCA+IDEpe1xuICAgICAgak9iaiA9IHtcbiAgICAgICAgW3RoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lXSA6IGpPYmpcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuajJ4KGpPYmosIDApLnZhbDtcbiAgfVxufTtcblxuQnVpbGRlci5wcm90b3R5cGUuajJ4ID0gZnVuY3Rpb24oak9iaiwgbGV2ZWwpIHtcbiAgbGV0IGF0dHJTdHIgPSAnJztcbiAgbGV0IHZhbCA9ICcnO1xuICBmb3IgKGxldCBrZXkgaW4gak9iaikge1xuICAgIGlmICh0eXBlb2Ygak9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gc3VwcmVzcyB1bmRlZmluZWQgbm9kZVxuICAgIH0gZWxzZSBpZiAoak9ialtrZXldID09PSBudWxsKSB7XG4gICAgICBpZihrZXlbMF0gPT09IFwiP1wiKSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJz8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgZWxzZSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9IGVsc2UgaWYgKGpPYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygak9ialtrZXldICE9PSAnb2JqZWN0Jykge1xuICAgICAgLy9wcmVtaXRpdmUgdHlwZVxuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuaXNBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgIGF0dHJTdHIgKz0gdGhpcy5idWlsZEF0dHJQYWlyU3RyKGF0dHIsICcnICsgak9ialtrZXldKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgLy90YWcgdmFsdWVcbiAgICAgICAgaWYgKGtleSA9PT0gdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgICAgICAgIGxldCBuZXd2YWwgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCAnJyArIGpPYmpba2V5XSk7XG4gICAgICAgICAgdmFsICs9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUobmV3dmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgKz0gdGhpcy5idWlsZFRleHRWYWxOb2RlKGpPYmpba2V5XSwga2V5LCAnJywgbGV2ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpPYmpba2V5XSkpIHtcbiAgICAgIC8vcmVwZWF0ZWQgbm9kZXNcbiAgICAgIGNvbnN0IGFyckxlbiA9IGpPYmpba2V5XS5sZW5ndGg7XG4gICAgICBsZXQgbGlzdFRhZ1ZhbCA9IFwiXCI7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFyckxlbjsgaisrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBqT2JqW2tleV1bal07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgZWxzZSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgICAgIC8vIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCApe1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLmoyeChpdGVtLCBsZXZlbCArIDEpLnZhbDtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShpdGVtLCBrZXksIGxldmVsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaXN0VGFnVmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShpdGVtLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHRoaXMub3B0aW9ucy5vbmVMaXN0R3JvdXApe1xuICAgICAgICBsaXN0VGFnVmFsID0gdGhpcy5idWlsZE9iamVjdE5vZGUobGlzdFRhZ1ZhbCwga2V5LCAnJywgbGV2ZWwpO1xuICAgICAgfVxuICAgICAgdmFsICs9IGxpc3RUYWdWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vbmVzdGVkIG5vZGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSB7XG4gICAgICAgIGNvbnN0IEtzID0gT2JqZWN0LmtleXMoak9ialtrZXldKTtcbiAgICAgICAgY29uc3QgTCA9IEtzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBMOyBqKyspIHtcbiAgICAgICAgICBhdHRyU3RyICs9IHRoaXMuYnVpbGRBdHRyUGFpclN0cihLc1tqXSwgJycgKyBqT2JqW2tleV1bS3Nbal1dKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsICs9IHRoaXMucHJvY2Vzc1RleHRPck9iak5vZGUoak9ialtrZXldLCBrZXksIGxldmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge2F0dHJTdHI6IGF0dHJTdHIsIHZhbDogdmFsfTtcbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkQXR0clBhaXJTdHIgPSBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKXtcbiAgdmFsID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHJOYW1lLCAnJyArIHZhbCk7XG4gIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzICYmIHZhbCA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4gJyAnICsgYXR0ck5hbWU7XG4gIH0gZWxzZSByZXR1cm4gJyAnICsgYXR0ck5hbWUgKyAnPVwiJyArIHZhbCArICdcIic7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUZXh0T3JPYmpOb2RlIChvYmplY3QsIGtleSwgbGV2ZWwpIHtcbiAgY29uc3QgcmVzdWx0ID0gdGhpcy5qMngob2JqZWN0LCBsZXZlbCArIDEpO1xuICBpZiAob2JqZWN0W3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFRleHRWYWxOb2RlKG9iamVjdFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSwga2V5LCByZXN1bHQuYXR0clN0ciwgbGV2ZWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkT2JqZWN0Tm9kZShyZXN1bHQudmFsLCBrZXksIHJlc3VsdC5hdHRyU3RyLCBsZXZlbCk7XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGRPYmplY3ROb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmKHZhbCA9PT0gXCJcIil7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHRoaXMuY2xvc2VUYWcoa2V5KSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1lbHNle1xuXG4gICAgbGV0IHRhZ0VuZEV4cCA9ICc8LycgKyBrZXkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgbGV0IHBpQ2xvc2luZ0NoYXIgPSBcIlwiO1xuICAgIFxuICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHtcbiAgICAgIHBpQ2xvc2luZ0NoYXIgPSBcIj9cIjtcbiAgICAgIHRhZ0VuZEV4cCA9IFwiXCI7XG4gICAgfVxuICBcbiAgICBpZiAoYXR0clN0ciAmJiB2YWwuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgcmV0dXJuICggdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsgIGtleSArIGF0dHJTdHIgKyBwaUNsb3NpbmdDaGFyICsgJz4nICsgdmFsICsgdGFnRW5kRXhwICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgJiYgcGlDbG9zaW5nQ2hhci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyB0aGlzLm5ld0xpbmU7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyB0aGlzLnRhZ0VuZENoYXIgK1xuICAgICAgICB2YWwgK1xuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyB0YWdFbmRFeHAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuY2xvc2VUYWcgPSBmdW5jdGlvbihrZXkpe1xuICBsZXQgY2xvc2VUYWcgPSBcIlwiO1xuICBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2Yoa2V5KSAhPT0gLTEpeyAvL3VucGFpcmVkXG4gICAgaWYoIXRoaXMub3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgY2xvc2VUYWcgPSBcIi9cIlxuICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMuc3VwcHJlc3NFbXB0eU5vZGUpeyAvL2VtcHR5XG4gICAgY2xvc2VUYWcgPSBcIi9cIjtcbiAgfWVsc2V7XG4gICAgY2xvc2VUYWcgPSBgPjwvJHtrZXl9YFxuICB9XG4gIHJldHVybiBjbG9zZVRhZztcbn1cblxuZnVuY3Rpb24gYnVpbGRFbXB0eU9iak5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh2YWwgIT09ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAvLyByZXR1cm4gdGhpcy5idWlsZFRhZ1N0cihsZXZlbCxrZXksIGF0dHJTdHIpO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZFRleHRWYWxOb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSAhPT0gZmFsc2UgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCFbQ0RBVEFbJHt2YWx9XV0+YCArICB0aGlzLm5ld0xpbmU7XG4gIH1lbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgYDwhLS0ke3ZhbH0tLT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYoa2V5WzBdID09PSBcIj9cIikgey8vUEkgdGFnXG4gICAgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7IFxuICB9ZWxzZXtcbiAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgdmFsKTtcbiAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gIFxuICAgIGlmKCB0ZXh0VmFsdWUgPT09ICcnKXtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnPicgK1xuICAgICAgICAgdGV4dFZhbHVlICtcbiAgICAgICAgJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUucmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih0ZXh0VmFsdWUpe1xuICBpZih0ZXh0VmFsdWUgJiYgdGV4dFZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMub3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5vcHRpb25zLmVudGl0aWVzW2ldO1xuICAgICAgdGV4dFZhbHVlID0gdGV4dFZhbHVlLnJlcGxhY2UoZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKGxldmVsKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50QnkucmVwZWF0KGxldmVsKTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyaWJ1dGUobmFtZSAvKiwgb3B0aW9ucyovKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgodGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgpKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyKHRoaXMuYXR0clByZWZpeExlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVpbGRlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB2YWxpZGF0b3IgPSByZXF1aXJlKCcuL3ZhbGlkYXRvcicpO1xuY29uc3QgWE1MUGFyc2VyID0gcmVxdWlyZSgnLi94bWxwYXJzZXIvWE1MUGFyc2VyJyk7XG5jb25zdCBYTUxCdWlsZGVyID0gcmVxdWlyZSgnLi94bWxidWlsZGVyL2pzb24yeG1sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBYTUxQYXJzZXI6IFhNTFBhcnNlcixcbiAgWE1MVmFsaWRhdG9yOiB2YWxpZGF0b3IsXG4gIFhNTEJ1aWxkZXI6IFhNTEJ1aWxkZXJcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy5kZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy5kZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBleHBvcnRzLmRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gZXhwb3J0cy5kZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBleHBvcnRzLmRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5kZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gZXhwb3J0cy5kZV9Bc3N1bWVSb2xlQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZCA9IGV4cG9ydHMuc2VfR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy5zZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IGV4cG9ydHMuc2VfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kID0gZXhwb3J0cy5zZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuc2VfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGV4cG9ydHMuc2VfQXNzdW1lUm9sZUNvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IGZhc3RfeG1sX3BhcnNlcl8xID0gcmVxdWlyZShcImZhc3QteG1sLXBhcnNlclwiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgU1RTU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4uL21vZGVscy9TVFNTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY29uc3Qgc2VfQXNzdW1lUm9sZUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9Bc3N1bWVSb2xlUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJBc3N1bWVSb2xlXCIsXG4gICAgICAgIFZlcnNpb246IFwiMjAxMS0wNi0xNVwiLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfQXNzdW1lUm9sZUNvbW1hbmQgPSBzZV9Bc3N1bWVSb2xlQ29tbWFuZDtcbmNvbnN0IHNlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0KGlucHV0LCBjb250ZXh0KSxcbiAgICAgICAgQWN0aW9uOiBcIkFzc3VtZVJvbGVXaXRoU0FNTFwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQgPSBzZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kO1xuY29uc3Qgc2VfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5XCIsXG4gICAgICAgIFZlcnNpb246IFwiMjAxMS0wNi0xNVwiLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEh0dHBScGNSZXF1ZXN0KGNvbnRleHQsIGhlYWRlcnMsIFwiL1wiLCB1bmRlZmluZWQsIGJvZHkpO1xufTtcbmV4cG9ydHMuc2VfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBzZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZDtcbmNvbnN0IHNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBTSEFSRURfSEVBREVSUztcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gYnVpbGRGb3JtVXJsZW5jb2RlZFN0cmluZyh7XG4gICAgICAgIC4uLnNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCA9IHNlX0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZDtcbmNvbnN0IHNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfR2V0QWNjZXNzS2V5SW5mb1JlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiR2V0QWNjZXNzS2V5SW5mb1wiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gc2VfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQ7XG5jb25zdCBzZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9HZXRDYWxsZXJJZGVudGl0eVJlcXVlc3QoaW5wdXQsIGNvbnRleHQpLFxuICAgICAgICBBY3Rpb246IFwiR2V0Q2FsbGVySWRlbnRpdHlcIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBzZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQ7XG5jb25zdCBzZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IFNIQVJFRF9IRUFERVJTO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nKHtcbiAgICAgICAgLi4uc2VfR2V0RmVkZXJhdGlvblRva2VuUmVxdWVzdChpbnB1dCwgY29udGV4dCksXG4gICAgICAgIEFjdGlvbjogXCJHZXRGZWRlcmF0aW9uVG9rZW5cIixcbiAgICAgICAgVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkSHR0cFJwY1JlcXVlc3QoY29udGV4dCwgaGVhZGVycywgXCIvXCIsIHVuZGVmaW5lZCwgYm9keSk7XG59O1xuZXhwb3J0cy5zZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gc2VfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDtcbmNvbnN0IHNlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gU0hBUkVEX0hFQURFUlM7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IGJ1aWxkRm9ybVVybGVuY29kZWRTdHJpbmcoe1xuICAgICAgICAuLi5zZV9HZXRTZXNzaW9uVG9rZW5SZXF1ZXN0KGlucHV0LCBjb250ZXh0KSxcbiAgICAgICAgQWN0aW9uOiBcIkdldFNlc3Npb25Ub2tlblwiLFxuICAgICAgICBWZXJzaW9uOiBcIjIwMTEtMDYtMTVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRIdHRwUnBjUmVxdWVzdChjb250ZXh0LCBoZWFkZXJzLCBcIi9cIiwgdW5kZWZpbmVkLCBib2R5KTtcbn07XG5leHBvcnRzLnNlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBzZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfQXNzdW1lUm9sZUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0Fzc3VtZVJvbGVSZXNwb25zZShkYXRhLkFzc3VtZVJvbGVSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9Bc3N1bWVSb2xlQ29tbWFuZCA9IGRlX0Fzc3VtZVJvbGVDb21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0V4cGlyZWRUb2tlbkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudFwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJQYWNrZWRQb2xpY3lUb29MYXJnZVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0Fzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlKGRhdGEuQXNzdW1lUm9sZVdpdGhTQU1MUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGRlX0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQ7XG5jb25zdCBkZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSURQUmVqZWN0ZWRDbGFpbVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZElkZW50aXR5VG9rZW5cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkSWRlbnRpdHlUb2tlbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUGFja2VkUG9saWN5VG9vTGFyZ2VcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9QYWNrZWRQb2xpY3lUb29MYXJnZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZShkYXRhLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCA9IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kO1xuY29uc3QgZGVfQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0V4cGlyZWRUb2tlbkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJRFBDb21tdW5pY2F0aW9uRXJyb3JcIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0lEUENvbW11bmljYXRpb25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJRFBSZWplY3RlZENsYWltXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnN0cyNJRFBSZWplY3RlZENsYWltRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkSWRlbnRpdHlUb2tlblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudFwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJQYWNrZWRQb2xpY3lUb29MYXJnZVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCk7XG4gICAgbGV0IGNvbnRlbnRzID0ge307XG4gICAgY29udGVudHMgPSBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZVJlc3BvbnNlKGRhdGEuRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQ7XG5jb25zdCBkZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI0ludmFsaWRBdXRob3JpemF0aW9uTWVzc2FnZUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gZGVfR2V0QWNjZXNzS2V5SW5mb1Jlc3BvbnNlKGRhdGEuR2V0QWNjZXNzS2V5SW5mb1Jlc3VsdCwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kID0gZGVfR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQ7XG5jb25zdCBkZV9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUXVlcnlFcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgZXJyb3JDb2RlLFxuICAgIH0pO1xufTtcbmNvbnN0IGRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0dldENhbGxlcklkZW50aXR5UmVzcG9uc2UoZGF0YS5HZXRDYWxsZXJJZGVudGl0eVJlc3VsdCwgY29udGV4dCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9O1xuICAgIHJldHVybiByZXNwb25zZTtcbn07XG5leHBvcnRzLmRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZDtcbmNvbnN0IGRlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUXVlcnlFcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgZXJyb3JDb2RlLFxuICAgIH0pO1xufTtcbmNvbnN0IGRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIGxldCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnRlbnRzID0gZGVfR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2UoZGF0YS5HZXRGZWRlcmF0aW9uVG9rZW5SZXN1bHQsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59O1xuZXhwb3J0cy5kZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZGVfR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDtcbmNvbnN0IGRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFF1ZXJ5RXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJNYWxmb3JtZWRQb2xpY3lEb2N1bWVudFwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJQYWNrZWRQb2xpY3lUb29MYXJnZVwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJSZWdpb25EaXNhYmxlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zdHMjUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5OiBwYXJzZWRCb2R5LkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBsZXQgY29udGVudHMgPSB7fTtcbiAgICBjb250ZW50cyA9IGRlX0dldFNlc3Npb25Ub2tlblJlc3BvbnNlKGRhdGEuR2V0U2Vzc2lvblRva2VuUmVzdWx0LCBjb250ZXh0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmV4cG9ydHMuZGVfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCA9IGRlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQ7XG5jb25zdCBkZV9HZXRTZXNzaW9uVG9rZW5Db21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRRdWVyeUVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3RzI1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZWdpb25EaXNhYmxlZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keTogcGFyc2VkQm9keS5FcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfRXhwaXJlZFRva2VuRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9FeHBpcmVkVG9rZW5FeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuRXhwaXJlZFRva2VuRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9JRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSURQQ29tbXVuaWNhdGlvbkVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVfSURQUmVqZWN0ZWRDbGFpbUV4Y2VwdGlvbihib2R5LkVycm9yLCBjb250ZXh0KTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZV9JbnZhbGlkQXV0aG9yaXphdGlvbk1lc3NhZ2VFeGNlcHRpb24oYm9keS5FcnJvciwgY29udGV4dCk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX0ludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkludmFsaWRJZGVudGl0eVRva2VuRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfTWFsZm9ybWVkUG9saWN5RG9jdW1lbnRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX01hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLk1hbGZvcm1lZFBvbGljeURvY3VtZW50RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfUGFja2VkUG9saWN5VG9vTGFyZ2VFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlBhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3QgZGVfUmVnaW9uRGlzYWJsZWRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlX1JlZ2lvbkRpc2FibGVkRXhjZXB0aW9uKGJvZHkuRXJyb3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlJlZ2lvbkRpc2FibGVkRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgYm9keSk7XG59O1xuY29uc3Qgc2VfQXNzdW1lUm9sZVJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0LlJvbGVBcm4gIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUm9sZUFyblwiXSA9IGlucHV0LlJvbGVBcm47XG4gICAgfVxuICAgIGlmIChpbnB1dC5Sb2xlU2Vzc2lvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUm9sZVNlc3Npb25OYW1lXCJdID0gaW5wdXQuUm9sZVNlc3Npb25OYW1lO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQb2xpY3lcIl0gPSBpbnB1dC5Qb2xpY3k7XG4gICAgfVxuICAgIGlmIChpbnB1dC5EdXJhdGlvblNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiRHVyYXRpb25TZWNvbmRzXCJdID0gaW5wdXQuRHVyYXRpb25TZWNvbmRzO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVGFncyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV90YWdMaXN0VHlwZShpbnB1dC5UYWdzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGlucHV0LlRhZ3M/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZW50cmllcy5UYWdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2MgPSBgVGFncy4ke2tleX1gO1xuICAgICAgICAgICAgZW50cmllc1tsb2NdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVHJhbnNpdGl2ZVRhZ0tleXMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfdGFnS2V5TGlzdFR5cGUoaW5wdXQuVHJhbnNpdGl2ZVRhZ0tleXMsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuVHJhbnNpdGl2ZVRhZ0tleXM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZW50cmllcy5UcmFuc2l0aXZlVGFnS2V5cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFRyYW5zaXRpdmVUYWdLZXlzLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5FeHRlcm5hbElkICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkV4dGVybmFsSWRcIl0gPSBpbnB1dC5FeHRlcm5hbElkO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuU2VyaWFsTnVtYmVyICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlNlcmlhbE51bWJlclwiXSA9IGlucHV0LlNlcmlhbE51bWJlcjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlRva2VuQ29kZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJUb2tlbkNvZGVcIl0gPSBpbnB1dC5Ub2tlbkNvZGU7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Tb3VyY2VJZGVudGl0eSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJTb3VyY2VJZGVudGl0eVwiXSA9IGlucHV0LlNvdXJjZUlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUHJvdmlkZWRDb250ZXh0cyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9Qcm92aWRlZENvbnRleHRzTGlzdFR5cGUoaW5wdXQuUHJvdmlkZWRDb250ZXh0cywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qcm92aWRlZENvbnRleHRzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUHJvdmlkZWRDb250ZXh0cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFByb3ZpZGVkQ29udGV4dHMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfQXNzdW1lUm9sZVdpdGhTQU1MUmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuUm9sZUFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJSb2xlQXJuXCJdID0gaW5wdXQuUm9sZUFybjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlByaW5jaXBhbEFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQcmluY2lwYWxBcm5cIl0gPSBpbnB1dC5QcmluY2lwYWxBcm47XG4gICAgfVxuICAgIGlmIChpbnB1dC5TQU1MQXNzZXJ0aW9uICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlNBTUxBc3NlcnRpb25cIl0gPSBpbnB1dC5TQU1MQXNzZXJ0aW9uO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQb2xpY3lcIl0gPSBpbnB1dC5Qb2xpY3k7XG4gICAgfVxuICAgIGlmIChpbnB1dC5EdXJhdGlvblNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiRHVyYXRpb25TZWNvbmRzXCJdID0gaW5wdXQuRHVyYXRpb25TZWNvbmRzO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5UmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuUm9sZUFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJSb2xlQXJuXCJdID0gaW5wdXQuUm9sZUFybjtcbiAgICB9XG4gICAgaWYgKGlucHV0LlJvbGVTZXNzaW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJSb2xlU2Vzc2lvbk5hbWVcIl0gPSBpbnB1dC5Sb2xlU2Vzc2lvbk5hbWU7XG4gICAgfVxuICAgIGlmIChpbnB1dC5XZWJJZGVudGl0eVRva2VuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIldlYklkZW50aXR5VG9rZW5cIl0gPSBpbnB1dC5XZWJJZGVudGl0eVRva2VuO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUHJvdmlkZXJJZCAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQcm92aWRlcklkXCJdID0gaW5wdXQuUHJvdmlkZXJJZDtcbiAgICB9XG4gICAgaWYgKGlucHV0LlBvbGljeUFybnMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfcG9saWN5RGVzY3JpcHRvckxpc3RUeXBlKGlucHV0LlBvbGljeUFybnMsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuUG9saWN5QXJucz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlbnRyaWVzLlBvbGljeUFybnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGBQb2xpY3lBcm5zLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3kgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUG9saWN5XCJdID0gaW5wdXQuUG9saWN5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuRHVyYXRpb25TZWNvbmRzICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIkR1cmF0aW9uU2Vjb25kc1wiXSA9IGlucHV0LkR1cmF0aW9uU2Vjb25kcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5FbmNvZGVkTWVzc2FnZSAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJFbmNvZGVkTWVzc2FnZVwiXSA9IGlucHV0LkVuY29kZWRNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9HZXRBY2Nlc3NLZXlJbmZvUmVxdWVzdCA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuQWNjZXNzS2V5SWQgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiQWNjZXNzS2V5SWRcIl0gPSBpbnB1dC5BY2Nlc3NLZXlJZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfR2V0Q2FsbGVySWRlbnRpdHlSZXF1ZXN0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX0dldEZlZGVyYXRpb25Ub2tlblJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0Lk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiTmFtZVwiXSA9IGlucHV0Lk5hbWU7XG4gICAgfVxuICAgIGlmIChpbnB1dC5Qb2xpY3kgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiUG9saWN5XCJdID0gaW5wdXQuUG9saWN5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuUG9saWN5QXJucyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlckVudHJpZXMgPSBzZV9wb2xpY3lEZXNjcmlwdG9yTGlzdFR5cGUoaW5wdXQuUG9saWN5QXJucywgY29udGV4dCk7XG4gICAgICAgIGlmIChpbnB1dC5Qb2xpY3lBcm5zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVudHJpZXMuUG9saWN5QXJucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYFBvbGljeUFybnMuJHtrZXl9YDtcbiAgICAgICAgICAgIGVudHJpZXNbbG9jXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0LkR1cmF0aW9uU2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJEdXJhdGlvblNlY29uZHNcIl0gPSBpbnB1dC5EdXJhdGlvblNlY29uZHM7XG4gICAgfVxuICAgIGlmIChpbnB1dC5UYWdzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX3RhZ0xpc3RUeXBlKGlucHV0LlRhZ3MsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW5wdXQuVGFncz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlbnRyaWVzLlRhZ3MgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhtZW1iZXJFbnRyaWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGBUYWdzLiR7a2V5fWA7XG4gICAgICAgICAgICBlbnRyaWVzW2xvY10gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufTtcbmNvbnN0IHNlX0dldFNlc3Npb25Ub2tlblJlcXVlc3QgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgaWYgKGlucHV0LkR1cmF0aW9uU2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJEdXJhdGlvblNlY29uZHNcIl0gPSBpbnB1dC5EdXJhdGlvblNlY29uZHM7XG4gICAgfVxuICAgIGlmIChpbnB1dC5TZXJpYWxOdW1iZXIgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiU2VyaWFsTnVtYmVyXCJdID0gaW5wdXQuU2VyaWFsTnVtYmVyO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVG9rZW5Db2RlICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcIlRva2VuQ29kZVwiXSA9IGlucHV0LlRva2VuQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfcG9saWN5RGVzY3JpcHRvckxpc3RUeXBlID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX1BvbGljeURlc2NyaXB0b3JUeXBlKGVudHJ5LCBjb250ZXh0KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBlbnRyaWVzW2BtZW1iZXIuJHtjb3VudGVyfS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBzZV9Qb2xpY3lEZXNjcmlwdG9yVHlwZSA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB7fTtcbiAgICBpZiAoaW5wdXQuYXJuICE9IG51bGwpIHtcbiAgICAgICAgZW50cmllc1tcImFyblwiXSA9IGlucHV0LmFybjtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfUHJvdmlkZWRDb250ZXh0ID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5Qcm92aWRlckFybiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJQcm92aWRlckFyblwiXSA9IGlucHV0LlByb3ZpZGVyQXJuO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuQ29udGV4dEFzc2VydGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGVudHJpZXNbXCJDb250ZXh0QXNzZXJ0aW9uXCJdID0gaW5wdXQuQ29udGV4dEFzc2VydGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfUHJvdmlkZWRDb250ZXh0c0xpc3RUeXBlID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVtYmVyRW50cmllcyA9IHNlX1Byb3ZpZGVkQ29udGV4dChlbnRyeSwgY29udGV4dCk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1lbWJlckVudHJpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgZW50cmllc1tgbWVtYmVyLiR7Y291bnRlcn0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfVGFnID0gKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHt9O1xuICAgIGlmIChpbnB1dC5LZXkgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiS2V5XCJdID0gaW5wdXQuS2V5O1xuICAgIH1cbiAgICBpZiAoaW5wdXQuVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBlbnRyaWVzW1wiVmFsdWVcIl0gPSBpbnB1dC5WYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfdGFnS2V5TGlzdFR5cGUgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzW2BtZW1iZXIuJHtjb3VudGVyfWBdID0gZW50cnk7XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59O1xuY29uc3Qgc2VfdGFnTGlzdFR5cGUgPSAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0ge307XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZW1iZXJFbnRyaWVzID0gc2VfVGFnKGVudHJ5LCBjb250ZXh0KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWVtYmVyRW50cmllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBlbnRyaWVzW2BtZW1iZXIuJHtjb3VudGVyfS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn07XG5jb25zdCBkZV9Bc3N1bWVkUm9sZVVzZXIgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQXNzdW1lZFJvbGVJZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFzc3VtZWRSb2xlSWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXNzdW1lZFJvbGVJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBcm5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bcm4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXJuXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkNyZWRlbnRpYWxzID0gZGVfQ3JlZGVudGlhbHMob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQXNzdW1lZFJvbGVVc2VyID0gZGVfQXNzdW1lZFJvbGVVc2VyKG91dHB1dFtcIkFzc3VtZWRSb2xlVXNlclwiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuUGFja2VkUG9saWN5U2l6ZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuc3RyaWN0UGFyc2VJbnQzMikob3V0cHV0W1wiUGFja2VkUG9saWN5U2l6ZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTb3VyY2VJZGVudGl0eVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNvdXJjZUlkZW50aXR5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQ3JlZGVudGlhbHMgPSBkZV9DcmVkZW50aWFscyhvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bc3N1bWVkUm9sZVVzZXIgPSBkZV9Bc3N1bWVkUm9sZVVzZXIob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlN1YmplY3RcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TdWJqZWN0ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlN1YmplY3RcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU3ViamVjdFR5cGVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TdWJqZWN0VHlwZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJTdWJqZWN0VHlwZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJJc3N1ZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Jc3N1ZXIgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiSXNzdWVyXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkF1ZGllbmNlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQXVkaWVuY2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXVkaWVuY2VcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiTmFtZVF1YWxpZmllclwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLk5hbWVRdWFsaWZpZXIgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiTmFtZVF1YWxpZmllclwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTb3VyY2VJZGVudGl0eVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNvdXJjZUlkZW50aXR5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkNyZWRlbnRpYWxzID0gZGVfQ3JlZGVudGlhbHMob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU3ViamVjdEZyb21XZWJJZGVudGl0eVRva2VuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU3ViamVjdEZyb21XZWJJZGVudGl0eVRva2VuID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlN1YmplY3RGcm9tV2ViSWRlbnRpdHlUb2tlblwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBc3N1bWVkUm9sZVVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bc3N1bWVkUm9sZVVzZXIgPSBkZV9Bc3N1bWVkUm9sZVVzZXIob3V0cHV0W1wiQXNzdW1lZFJvbGVVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlByb3ZpZGVyXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuUHJvdmlkZXIgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiUHJvdmlkZXJcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiQXVkaWVuY2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5BdWRpZW5jZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBdWRpZW5jZVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTb3VyY2VJZGVudGl0eVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLlNvdXJjZUlkZW50aXR5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNvdXJjZUlkZW50aXR5XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0NyZWRlbnRpYWxzID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkFjY2Vzc0tleUlkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQWNjZXNzS2V5SWQgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQWNjZXNzS2V5SWRcIl0pO1xuICAgIH1cbiAgICBpZiAob3V0cHV0W1wiU2VjcmV0QWNjZXNzS2V5XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuU2VjcmV0QWNjZXNzS2V5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlNlY3JldEFjY2Vzc0tleVwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJTZXNzaW9uVG9rZW5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5TZXNzaW9uVG9rZW4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiU2Vzc2lvblRva2VuXCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkV4cGlyYXRpb25cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5FeHBpcmF0aW9uID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLnBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCkob3V0cHV0W1wiRXhwaXJhdGlvblwiXSkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VSZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJEZWNvZGVkTWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkRlY29kZWRNZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkRlY29kZWRNZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0V4cGlyZWRUb2tlbkV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0ZlZGVyYXRlZFVzZXIgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiRmVkZXJhdGVkVXNlcklkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuRmVkZXJhdGVkVXNlcklkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIkZlZGVyYXRlZFVzZXJJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBcm5cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5Bcm4gPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wiQXJuXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0dldEFjY2Vzc0tleUluZm9SZXNwb25zZSA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJBY2NvdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQWNjb3VudCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBY2NvdW50XCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0dldENhbGxlcklkZW50aXR5UmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiVXNlcklkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuVXNlcklkID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIlVzZXJJZFwiXSk7XG4gICAgfVxuICAgIGlmIChvdXRwdXRbXCJBY2NvdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQWNjb3VudCA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBY2NvdW50XCJdKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkFyblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLkFybiA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJBcm5cIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2UgPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wiQ3JlZGVudGlhbHNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5DcmVkZW50aWFscyA9IGRlX0NyZWRlbnRpYWxzKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIkZlZGVyYXRlZFVzZXJcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5GZWRlcmF0ZWRVc2VyID0gZGVfRmVkZXJhdGVkVXNlcihvdXRwdXRbXCJGZWRlcmF0ZWRVc2VyXCJdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG91dHB1dFtcIlBhY2tlZFBvbGljeVNpemVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5QYWNrZWRQb2xpY3lTaXplID0gKDAsIHNtaXRoeV9jbGllbnRfMS5zdHJpY3RQYXJzZUludDMyKShvdXRwdXRbXCJQYWNrZWRQb2xpY3lTaXplXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX0dldFNlc3Npb25Ub2tlblJlc3BvbnNlID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIkNyZWRlbnRpYWxzXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuQ3JlZGVudGlhbHMgPSBkZV9DcmVkZW50aWFscyhvdXRwdXRbXCJDcmVkZW50aWFsc1wiXSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9JRFBDb21tdW5pY2F0aW9uRXJyb3JFeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9JRFBSZWplY3RlZENsYWltRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfSW52YWxpZEF1dGhvcml6YXRpb25NZXNzYWdlRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfSW52YWxpZElkZW50aXR5VG9rZW5FeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZV9NYWxmb3JtZWRQb2xpY3lEb2N1bWVudEV4Y2VwdGlvbiA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGlmIChvdXRwdXRbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMubWVzc2FnZSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nKShvdXRwdXRbXCJtZXNzYWdlXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX1BhY2tlZFBvbGljeVRvb0xhcmdlRXhjZXB0aW9uID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0ge307XG4gICAgaWYgKG91dHB1dFtcIm1lc3NhZ2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZW50cy5tZXNzYWdlID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcpKG91dHB1dFtcIm1lc3NhZ2VcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfUmVnaW9uRGlzYWJsZWRFeGNlcHRpb24gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBpZiAob3V0cHV0W1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLm1lc3NhZ2UgPSAoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZykob3V0cHV0W1wibWVzc2FnZVwiXSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbn07XG5jb25zdCBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gKG91dHB1dCkgPT4gKHtcbiAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgcmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0aWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16LXJlcXVlc3QtaWRcIl0sXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxufSk7XG5jb25zdCBjb2xsZWN0Qm9keVN0cmluZyA9IChzdHJlYW1Cb2R5LCBjb250ZXh0KSA9PiAoMCwgc21pdGh5X2NsaWVudF8xLmNvbGxlY3RCb2R5KShzdHJlYW1Cb2R5LCBjb250ZXh0KS50aGVuKChib2R5KSA9PiBjb250ZXh0LnV0ZjhFbmNvZGVyKGJvZHkpKTtcbmNvbnN0IHRocm93RGVmYXVsdEVycm9yID0gKDAsIHNtaXRoeV9jbGllbnRfMS53aXRoQmFzZUV4Y2VwdGlvbikoU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb24pO1xuY29uc3QgYnVpbGRIdHRwUnBjUmVxdWVzdCA9IGFzeW5jIChjb250ZXh0LCBoZWFkZXJzLCBwYXRoLCByZXNvbHZlZEhvc3RuYW1lLCBib2R5KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgY29udGVudHMgPSB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgcGF0aDogYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGguc2xpY2UoMCwgLTEpICsgcGF0aCA6IGJhc2VQYXRoICsgcGF0aCxcbiAgICAgICAgaGVhZGVycyxcbiAgICB9O1xuICAgIGlmIChyZXNvbHZlZEhvc3RuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGVudHMuaG9zdG5hbWUgPSByZXNvbHZlZEhvc3RuYW1lO1xuICAgIH1cbiAgICBpZiAoYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRlbnRzLmJvZHkgPSBib2R5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdChjb250ZW50cyk7XG59O1xuY29uc3QgU0hBUkVEX0hFQURFUlMgPSB7XG4gICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcbn07XG5jb25zdCBwYXJzZUJvZHkgPSAoc3RyZWFtQm9keSwgY29udGV4dCkgPT4gY29sbGVjdEJvZHlTdHJpbmcoc3RyZWFtQm9keSwgY29udGV4dCkudGhlbigoZW5jb2RlZCkgPT4ge1xuICAgIGlmIChlbmNvZGVkLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MUGFyc2VyKHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiXCIsXG4gICAgICAgICAgICBodG1sRW50aXRpZXM6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVBdHRyaWJ1dGVzOiBmYWxzZSxcbiAgICAgICAgICAgIGlnbm9yZURlY2xhcmF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgcGFyc2VUYWdWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICB0cmltVmFsdWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHRhZ1ZhbHVlUHJvY2Vzc29yOiAoXywgdmFsKSA9PiAodmFsLnRyaW0oKSA9PT0gXCJcIiAmJiB2YWwuaW5jbHVkZXMoXCJcXG5cIikgPyBcIlwiIDogdW5kZWZpbmVkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlci5hZGRFbnRpdHkoXCIjeERcIiwgXCJcXHJcIik7XG4gICAgICAgIHBhcnNlci5hZGRFbnRpdHkoXCIjMTBcIiwgXCJcXG5cIik7XG4gICAgICAgIGNvbnN0IHBhcnNlZE9iaiA9IHBhcnNlci5wYXJzZShlbmNvZGVkKTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGVOYW1lID0gXCIjdGV4dFwiO1xuICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhwYXJzZWRPYmopWzBdO1xuICAgICAgICBjb25zdCBwYXJzZWRPYmpUb1JldHVybiA9IHBhcnNlZE9ialtrZXldO1xuICAgICAgICBpZiAocGFyc2VkT2JqVG9SZXR1cm5bdGV4dE5vZGVOYW1lXSkge1xuICAgICAgICAgICAgcGFyc2VkT2JqVG9SZXR1cm5ba2V5XSA9IHBhcnNlZE9ialRvUmV0dXJuW3RleHROb2RlTmFtZV07XG4gICAgICAgICAgICBkZWxldGUgcGFyc2VkT2JqVG9SZXR1cm5bdGV4dE5vZGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5nZXRWYWx1ZUZyb21UZXh0Tm9kZSkocGFyc2VkT2JqVG9SZXR1cm4pO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59KTtcbmNvbnN0IHBhcnNlRXJyb3JCb2R5ID0gYXN5bmMgKGVycm9yQm9keSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFyc2VCb2R5KGVycm9yQm9keSwgY29udGV4dCk7XG4gICAgaWYgKHZhbHVlLkVycm9yKSB7XG4gICAgICAgIHZhbHVlLkVycm9yLm1lc3NhZ2UgPSB2YWx1ZS5FcnJvci5tZXNzYWdlID8/IHZhbHVlLkVycm9yLk1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBidWlsZEZvcm1VcmxlbmNvZGVkU3RyaW5nID0gKGZvcm1FbnRyaWVzKSA9PiBPYmplY3QuZW50cmllcyhmb3JtRW50cmllcylcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+ICgwLCBzbWl0aHlfY2xpZW50XzEuZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQpKGtleSkgKyBcIj1cIiArICgwLCBzbWl0aHlfY2xpZW50XzEuZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQpKHZhbHVlKSlcbiAgICAuam9pbihcIiZcIik7XG5jb25zdCBsb2FkUXVlcnlFcnJvckNvZGUgPSAob3V0cHV0LCBkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEuRXJyb3I/LkNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGF0YS5FcnJvci5Db2RlO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgPT0gNDA0KSB7XG4gICAgICAgIHJldHVybiBcIk5vdEZvdW5kXCI7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzc3VtZVJvbGVDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEFzc3VtZVJvbGVDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEFzc3VtZVJvbGVDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiQXNzdW1lUm9sZUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuQXNzdW1lUm9sZVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgW3R5cGVzXzEuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IFwiQVdTU2VjdXJpdHlUb2tlblNlcnZpY2VWMjAxMTA2MTVcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiQXNzdW1lUm9sZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0Fzc3VtZVJvbGVDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0Fzc3VtZVJvbGVDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXNzdW1lUm9sZUNvbW1hbmQgPSBBc3N1bWVSb2xlQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1RTQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIFt0eXBlc18xLlNNSVRIWV9DT05URVhUX0tFWV06IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBcIkFXU1NlY3VyaXR5VG9rZW5TZXJ2aWNlVjIwMTEwNjE1XCIsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBcIkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kID0gQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gdm9pZCAwO1xuY29uc3QgQXNzdW1lUm9sZUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVDb21tYW5kXCIpO1xuY29uc3QgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgQVNTVU1FX1JPTEVfREVGQVVMVF9SRUdJT04gPSBcInVzLWVhc3QtMVwiO1xuY29uc3QgZGVjb3JhdGVEZWZhdWx0UmVnaW9uID0gKHJlZ2lvbikgPT4ge1xuICAgIGlmICh0eXBlb2YgcmVnaW9uICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lvbiA9PT0gdW5kZWZpbmVkID8gQVNTVU1FX1JPTEVfREVGQVVMVF9SRUdJT04gOiByZWdpb247XG4gICAgfVxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVnaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBBU1NVTUVfUk9MRV9ERUZBVUxUX1JFR0lPTjtcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gKHN0c09wdGlvbnMsIHN0c0NsaWVudEN0b3IpID0+IHtcbiAgICBsZXQgc3RzQ2xpZW50O1xuICAgIGxldCBjbG9zdXJlU291cmNlQ3JlZHM7XG4gICAgcmV0dXJuIGFzeW5jIChzb3VyY2VDcmVkcywgcGFyYW1zKSA9PiB7XG4gICAgICAgIGNsb3N1cmVTb3VyY2VDcmVkcyA9IHNvdXJjZUNyZWRzO1xuICAgICAgICBpZiAoIXN0c0NsaWVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBsb2dnZXIsIHJlZ2lvbiwgcmVxdWVzdEhhbmRsZXIgfSA9IHN0c09wdGlvbnM7XG4gICAgICAgICAgICBzdHNDbGllbnQgPSBuZXcgc3RzQ2xpZW50Q3Rvcih7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXI6ICgpID0+IGFzeW5jICgpID0+IGNsb3N1cmVTb3VyY2VDcmVkcyxcbiAgICAgICAgICAgICAgICByZWdpb246IGRlY29yYXRlRGVmYXVsdFJlZ2lvbihyZWdpb24gfHwgc3RzT3B0aW9ucy5yZWdpb24pLFxuICAgICAgICAgICAgICAgIC4uLihyZXF1ZXN0SGFuZGxlciA/IHsgcmVxdWVzdEhhbmRsZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgQ3JlZGVudGlhbHMgfSA9IGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBBc3N1bWVSb2xlQ29tbWFuZF8xLkFzc3VtZVJvbGVDb21tYW5kKHBhcmFtcykpO1xuICAgICAgICBpZiAoIUNyZWRlbnRpYWxzIHx8ICFDcmVkZW50aWFscy5BY2Nlc3NLZXlJZCB8fCAhQ3JlZGVudGlhbHMuU2VjcmV0QWNjZXNzS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBTVFMuYXNzdW1lUm9sZSBjYWxsIHdpdGggcm9sZSAke3BhcmFtcy5Sb2xlQXJufWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDogQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IENyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogQ3JlZGVudGlhbHMuU2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogQ3JlZGVudGlhbHMuRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gZ2V0RGVmYXVsdFJvbGVBc3N1bWVyO1xuY29uc3QgZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gKHN0c09wdGlvbnMsIHN0c0NsaWVudEN0b3IpID0+IHtcbiAgICBsZXQgc3RzQ2xpZW50O1xuICAgIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmICghc3RzQ2xpZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IGxvZ2dlciwgcmVnaW9uLCByZXF1ZXN0SGFuZGxlciB9ID0gc3RzT3B0aW9ucztcbiAgICAgICAgICAgIHN0c0NsaWVudCA9IG5ldyBzdHNDbGllbnRDdG9yKHtcbiAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICAgICAgcmVnaW9uOiBkZWNvcmF0ZURlZmF1bHRSZWdpb24ocmVnaW9uIHx8IHN0c09wdGlvbnMucmVnaW9uKSxcbiAgICAgICAgICAgICAgICAuLi4ocmVxdWVzdEhhbmRsZXIgPyB7IHJlcXVlc3RIYW5kbGVyIH0gOiB7fSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IENyZWRlbnRpYWxzIH0gPSBhd2FpdCBzdHNDbGllbnQuc2VuZChuZXcgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRfMS5Bc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZChwYXJhbXMpKTtcbiAgICAgICAgaWYgKCFDcmVkZW50aWFscyB8fCAhQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQgfHwgIUNyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZyb20gU1RTLmFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHkgY2FsbCB3aXRoIHJvbGUgJHtwYXJhbXMuUm9sZUFybn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQ6IENyZWRlbnRpYWxzLkFjY2Vzc0tleUlkLFxuICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBDcmVkZW50aWFscy5TZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgICAgICBzZXNzaW9uVG9rZW46IENyZWRlbnRpYWxzLlNlc3Npb25Ub2tlbixcbiAgICAgICAgICAgIGV4cGlyYXRpb246IENyZWRlbnRpYWxzLkV4cGlyYXRpb24sXG4gICAgICAgIH07XG4gICAgfTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IGdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTtcbmNvbnN0IGRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IChwcm92aWRlcikgPT4gKGlucHV0KSA9PiBwcm92aWRlcih7XG4gICAgcm9sZUFzc3VtZXI6ICgwLCBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcikoaW5wdXQsIGlucHV0LnN0c0NsaWVudEN0b3IpLFxuICAgIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5OiAoMCwgZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpKGlucHV0LCBpbnB1dC5zdHNDbGllbnRDdG9yKSxcbiAgICAuLi5pbnB1dCxcbn0pO1xuZXhwb3J0cy5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSBkZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tRW52ID0gZXhwb3J0cy5FTlZfRVhQSVJBVElPTiA9IGV4cG9ydHMuRU5WX1NFU1NJT04gPSBleHBvcnRzLkVOVl9TRUNSRVQgPSBleHBvcnRzLkVOVl9LRVkgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5leHBvcnRzLkVOVl9LRVkgPSBcIkFXU19BQ0NFU1NfS0VZX0lEXCI7XG5leHBvcnRzLkVOVl9TRUNSRVQgPSBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiO1xuZXhwb3J0cy5FTlZfU0VTU0lPTiA9IFwiQVdTX1NFU1NJT05fVE9LRU5cIjtcbmV4cG9ydHMuRU5WX0VYUElSQVRJT04gPSBcIkFXU19DUkVERU5USUFMX0VYUElSQVRJT05cIjtcbmNvbnN0IGZyb21FbnYgPSAoKSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYWNjZXNzS2V5SWQgPSBwcm9jZXNzLmVudltleHBvcnRzLkVOVl9LRVldO1xuICAgIGNvbnN0IHNlY3JldEFjY2Vzc0tleSA9IHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX1NFQ1JFVF07XG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfU0VTU0lPTl07XG4gICAgY29uc3QgZXhwaXJ5ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5FTlZfRVhQSVJBVElPTl07XG4gICAgaWYgKGFjY2Vzc0tleUlkICYmIHNlY3JldEFjY2Vzc0tleSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgICAgICAuLi4oc2Vzc2lvblRva2VuICYmIHsgc2Vzc2lvblRva2VuIH0pLFxuICAgICAgICAgICAgLi4uKGV4cGlyeSAmJiB7IGV4cGlyYXRpb246IG5ldyBEYXRlKGV4cGlyeSkgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIlVuYWJsZSB0byBmaW5kIGVudmlyb25tZW50IHZhcmlhYmxlIGNyZWRlbnRpYWxzLlwiKTtcbn07XG5leHBvcnRzLmZyb21FbnYgPSBmcm9tRW52O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tRW52XCIpLCBleHBvcnRzKTtcbiIsCiAgICAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIERFRkFVTFRfTUFYX1JFVFJJRVM6ICgpID0+IERFRkFVTFRfTUFYX1JFVFJJRVMsXG4gIERFRkFVTFRfVElNRU9VVDogKCkgPT4gREVGQVVMVF9USU1FT1VULFxuICBFTlZfQ01EU19BVVRIX1RPS0VOOiAoKSA9PiBFTlZfQ01EU19BVVRIX1RPS0VOLFxuICBFTlZfQ01EU19GVUxMX1VSSTogKCkgPT4gRU5WX0NNRFNfRlVMTF9VUkksXG4gIEVOVl9DTURTX1JFTEFUSVZFX1VSSTogKCkgPT4gRU5WX0NNRFNfUkVMQVRJVkVfVVJJLFxuICBFbmRwb2ludDogKCkgPT4gRW5kcG9pbnQsXG4gIGZyb21Db250YWluZXJNZXRhZGF0YTogKCkgPT4gZnJvbUNvbnRhaW5lck1ldGFkYXRhLFxuICBmcm9tSW5zdGFuY2VNZXRhZGF0YTogKCkgPT4gZnJvbUluc3RhbmNlTWV0YWRhdGEsXG4gIGdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludDogKCkgPT4gZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50LFxuICBodHRwUmVxdWVzdDogKCkgPT4gaHR0cFJlcXVlc3QsXG4gIHByb3ZpZGVyQ29uZmlnRnJvbUluaXQ6ICgpID0+IHByb3ZpZGVyQ29uZmlnRnJvbUluaXRcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvZnJvbUNvbnRhaW5lck1ldGFkYXRhLnRzXG5cbnZhciBpbXBvcnRfdXJsID0gcmVxdWlyZShcInVybFwiKTtcblxuLy8gc3JjL3JlbW90ZVByb3ZpZGVyL2h0dHBSZXF1ZXN0LnRzXG52YXIgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG52YXIgaW1wb3J0X2J1ZmZlciA9IHJlcXVpcmUoXCJidWZmZXJcIik7XG52YXIgaW1wb3J0X2h0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbmZ1bmN0aW9uIGh0dHBSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVxID0gKDAsIGltcG9ydF9odHRwLnJlcXVlc3QpKHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBOb2RlLmpzIGh0dHAgbW9kdWxlIGRvZXNuJ3QgYWNjZXB0IGhvc3RuYW1lIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4gICAgICAvLyBSZWZzOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzM5NzM4XG4gICAgICBob3N0bmFtZTogKF9hID0gb3B0aW9ucy5ob3N0bmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnJlcGxhY2UoL15cXFsoLispXFxdJC8sIFwiJDFcIilcbiAgICB9KTtcbiAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICByZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLlByb3ZpZGVyRXJyb3IoXCJVbmFibGUgdG8gY29ubmVjdCB0byBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlXCIpLCBlcnIpKTtcbiAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgcmVxLm9uKFwidGltZW91dFwiLCAoKSA9PiB7XG4gICAgICByZWplY3QobmV3IGltcG9ydF9wcm9wZXJ0eV9wcm92aWRlci5Qcm92aWRlckVycm9yKFwiVGltZW91dEVycm9yIGZyb20gaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZVwiKSk7XG4gICAgICByZXEuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIHJlcS5vbihcInJlc3BvbnNlXCIsIChyZXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSA9IDQwMCB9ID0gcmVzO1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPCAyMDAgfHwgMzAwIDw9IHN0YXR1c0NvZGUpIHtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3IGltcG9ydF9wcm9wZXJ0eV9wcm92aWRlci5Qcm92aWRlckVycm9yKFwiRXJyb3IgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlXCIpLCB7IHN0YXR1c0NvZGUgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgfSk7XG4gICAgICByZXMub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKGltcG9ydF9idWZmZXIuQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJlcS5lbmQoKTtcbiAgfSk7XG59XG5fX25hbWUoaHR0cFJlcXVlc3QsIFwiaHR0cFJlcXVlc3RcIik7XG5cbi8vIHNyYy9yZW1vdGVQcm92aWRlci9JbWRzQ3JlZGVudGlhbHMudHNcbnZhciBpc0ltZHNDcmVkZW50aWFscyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFyZykgPT4gQm9vbGVhbihhcmcpICYmIHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGFyZy5BY2Nlc3NLZXlJZCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYXJnLlNlY3JldEFjY2Vzc0tleSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYXJnLlRva2VuID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBhcmcuRXhwaXJhdGlvbiA9PT0gXCJzdHJpbmdcIiwgXCJpc0ltZHNDcmVkZW50aWFsc1wiKTtcbnZhciBmcm9tSW1kc0NyZWRlbnRpYWxzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY3JlZHMpID0+ICh7XG4gIGFjY2Vzc0tleUlkOiBjcmVkcy5BY2Nlc3NLZXlJZCxcbiAgc2VjcmV0QWNjZXNzS2V5OiBjcmVkcy5TZWNyZXRBY2Nlc3NLZXksXG4gIHNlc3Npb25Ub2tlbjogY3JlZHMuVG9rZW4sXG4gIGV4cGlyYXRpb246IG5ldyBEYXRlKGNyZWRzLkV4cGlyYXRpb24pXG59KSwgXCJmcm9tSW1kc0NyZWRlbnRpYWxzXCIpO1xuXG4vLyBzcmMvcmVtb3RlUHJvdmlkZXIvUmVtb3RlUHJvdmlkZXJJbml0LnRzXG52YXIgREVGQVVMVF9USU1FT1VUID0gMWUzO1xudmFyIERFRkFVTFRfTUFYX1JFVFJJRVMgPSAwO1xudmFyIHByb3ZpZGVyQ29uZmlnRnJvbUluaXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7XG4gIG1heFJldHJpZXMgPSBERUZBVUxUX01BWF9SRVRSSUVTLFxuICB0aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUXG59KSA9PiAoeyBtYXhSZXRyaWVzLCB0aW1lb3V0IH0pLCBcInByb3ZpZGVyQ29uZmlnRnJvbUluaXRcIik7XG5cbi8vIHNyYy9yZW1vdGVQcm92aWRlci9yZXRyeS50c1xudmFyIHJldHJ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodG9SZXRyeSwgbWF4UmV0cmllcykgPT4ge1xuICBsZXQgcHJvbWlzZSA9IHRvUmV0cnkoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhSZXRyaWVzOyBpKyspIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaCh0b1JldHJ5KTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbn0sIFwicmV0cnlcIik7XG5cbi8vIHNyYy9mcm9tQ29udGFpbmVyTWV0YWRhdGEudHNcbnZhciBFTlZfQ01EU19GVUxMX1VSSSA9IFwiQVdTX0NPTlRBSU5FUl9DUkVERU5USUFMU19GVUxMX1VSSVwiO1xudmFyIEVOVl9DTURTX1JFTEFUSVZFX1VSSSA9IFwiQVdTX0NPTlRBSU5FUl9DUkVERU5USUFMU19SRUxBVElWRV9VUklcIjtcbnZhciBFTlZfQ01EU19BVVRIX1RPS0VOID0gXCJBV1NfQ09OVEFJTkVSX0FVVEhPUklaQVRJT05fVE9LRU5cIjtcbnZhciBmcm9tQ29udGFpbmVyTWV0YWRhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpbml0ID0ge30pID0+IHtcbiAgY29uc3QgeyB0aW1lb3V0LCBtYXhSZXRyaWVzIH0gPSBwcm92aWRlckNvbmZpZ0Zyb21Jbml0KGluaXQpO1xuICByZXR1cm4gKCkgPT4gcmV0cnkoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gYXdhaXQgZ2V0Q21kc1VyaSgpO1xuICAgIGNvbnN0IGNyZWRzUmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IHJlcXVlc3RGcm9tRWNzSW1kcyh0aW1lb3V0LCByZXF1ZXN0T3B0aW9ucykpO1xuICAgIGlmICghaXNJbWRzQ3JlZGVudGlhbHMoY3JlZHNSZXNwb25zZSkpIHtcbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcHJvcGVydHlfcHJvdmlkZXIuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiSW52YWxpZCByZXNwb25zZSByZWNlaXZlZCBmcm9tIGluc3RhbmNlIG1ldGFkYXRhIHNlcnZpY2UuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUltZHNDcmVkZW50aWFscyhjcmVkc1Jlc3BvbnNlKTtcbiAgfSwgbWF4UmV0cmllcyk7XG59LCBcImZyb21Db250YWluZXJNZXRhZGF0YVwiKTtcbnZhciByZXF1ZXN0RnJvbUVjc0ltZHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICh0aW1lb3V0LCBvcHRpb25zKSA9PiB7XG4gIGlmIChwcm9jZXNzLmVudltFTlZfQ01EU19BVVRIX1RPS0VOXSkge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIEF1dGhvcml6YXRpb246IHByb2Nlc3MuZW52W0VOVl9DTURTX0FVVEhfVE9LRU5dXG4gICAgfTtcbiAgfVxuICBjb25zdCBidWZmZXIgPSBhd2FpdCBodHRwUmVxdWVzdCh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0aW1lb3V0XG4gIH0pO1xuICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG59LCBcInJlcXVlc3RGcm9tRWNzSW1kc1wiKTtcbnZhciBDTURTX0lQID0gXCIxNjkuMjU0LjE3MC4yXCI7XG52YXIgR1JFRU5HUkFTU19IT1NUUyA9IHtcbiAgbG9jYWxob3N0OiB0cnVlLFxuICBcIjEyNy4wLjAuMVwiOiB0cnVlXG59O1xudmFyIEdSRUVOR1JBU1NfUFJPVE9DT0xTID0ge1xuICBcImh0dHA6XCI6IHRydWUsXG4gIFwiaHR0cHM6XCI6IHRydWVcbn07XG52YXIgZ2V0Q21kc1VyaSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnZbRU5WX0NNRFNfUkVMQVRJVkVfVVJJXSkge1xuICAgIHJldHVybiB7XG4gICAgICBob3N0bmFtZTogQ01EU19JUCxcbiAgICAgIHBhdGg6IHByb2Nlc3MuZW52W0VOVl9DTURTX1JFTEFUSVZFX1VSSV1cbiAgICB9O1xuICB9XG4gIGlmIChwcm9jZXNzLmVudltFTlZfQ01EU19GVUxMX1VSSV0pIHtcbiAgICBjb25zdCBwYXJzZWQgPSAoMCwgaW1wb3J0X3VybC5wYXJzZSkocHJvY2Vzcy5lbnZbRU5WX0NNRFNfRlVMTF9VUkldKTtcbiAgICBpZiAoIXBhcnNlZC5ob3N0bmFtZSB8fCAhKHBhcnNlZC5ob3N0bmFtZSBpbiBHUkVFTkdSQVNTX0hPU1RTKSkge1xuICAgICAgdGhyb3cgbmV3IGltcG9ydF9wcm9wZXJ0eV9wcm92aWRlci5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXG4gICAgICAgIGAke3BhcnNlZC5ob3N0bmFtZX0gaXMgbm90IGEgdmFsaWQgY29udGFpbmVyIG1ldGFkYXRhIHNlcnZpY2UgaG9zdG5hbWVgLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFwYXJzZWQucHJvdG9jb2wgfHwgIShwYXJzZWQucHJvdG9jb2wgaW4gR1JFRU5HUkFTU19QUk9UT0NPTFMpKSB7XG4gICAgICB0aHJvdyBuZXcgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcbiAgICAgICAgYCR7cGFyc2VkLnByb3RvY29sfSBpcyBub3QgYSB2YWxpZCBjb250YWluZXIgbWV0YWRhdGEgc2VydmljZSBwcm90b2NvbGAsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyc2VkLFxuICAgICAgcG9ydDogcGFyc2VkLnBvcnQgPyBwYXJzZUludChwYXJzZWQucG9ydCwgMTApIDogdm9pZCAwXG4gICAgfTtcbiAgfVxuICB0aHJvdyBuZXcgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcbiAgICBgVGhlIGNvbnRhaW5lciBtZXRhZGF0YSBjcmVkZW50aWFsIHByb3ZpZGVyIGNhbm5vdCBiZSB1c2VkIHVubGVzcyB0aGUgJHtFTlZfQ01EU19SRUxBVElWRV9VUkl9IG9yICR7RU5WX0NNRFNfRlVMTF9VUkl9IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldGAsXG4gICAgZmFsc2VcbiAgKTtcbn0sIFwiZ2V0Q21kc1VyaVwiKTtcblxuLy8gc3JjL2Zyb21JbnN0YW5jZU1ldGFkYXRhLnRzXG5cblxuXG4vLyBzcmMvZXJyb3IvSW5zdGFuY2VNZXRhZGF0YVYxRmFsbGJhY2tFcnJvci50c1xuXG52YXIgX0luc3RhbmNlTWV0YWRhdGFWMUZhbGxiYWNrRXJyb3IgPSBjbGFzcyBfSW5zdGFuY2VNZXRhZGF0YVYxRmFsbGJhY2tFcnJvciBleHRlbmRzIGltcG9ydF9wcm9wZXJ0eV9wcm92aWRlci5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0cnlOZXh0TGluayA9IHRydWUpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB0cnlOZXh0TGluayk7XG4gICAgdGhpcy50cnlOZXh0TGluayA9IHRyeU5leHRMaW5rO1xuICAgIHRoaXMubmFtZSA9IFwiSW5zdGFuY2VNZXRhZGF0YVYxRmFsbGJhY2tFcnJvclwiO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfSW5zdGFuY2VNZXRhZGF0YVYxRmFsbGJhY2tFcnJvci5wcm90b3R5cGUpO1xuICB9XG59O1xuX19uYW1lKF9JbnN0YW5jZU1ldGFkYXRhVjFGYWxsYmFja0Vycm9yLCBcIkluc3RhbmNlTWV0YWRhdGFWMUZhbGxiYWNrRXJyb3JcIik7XG52YXIgSW5zdGFuY2VNZXRhZGF0YVYxRmFsbGJhY2tFcnJvciA9IF9JbnN0YW5jZU1ldGFkYXRhVjFGYWxsYmFja0Vycm9yO1xuXG4vLyBzcmMvdXRpbHMvZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50LnRzXG52YXIgaW1wb3J0X25vZGVfY29uZmlnX3Byb3ZpZGVyID0gcmVxdWlyZShcIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXJcIik7XG52YXIgaW1wb3J0X3VybF9wYXJzZXIgPSByZXF1aXJlKFwiQHNtaXRoeS91cmwtcGFyc2VyXCIpO1xuXG4vLyBzcmMvY29uZmlnL0VuZHBvaW50LnRzXG52YXIgRW5kcG9pbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbmRwb2ludDIpID0+IHtcbiAgRW5kcG9pbnQyW1wiSVB2NFwiXSA9IFwiaHR0cDovLzE2OS4yNTQuMTY5LjI1NFwiO1xuICBFbmRwb2ludDJbXCJJUHY2XCJdID0gXCJodHRwOi8vW2ZkMDA6ZWMyOjoyNTRdXCI7XG4gIHJldHVybiBFbmRwb2ludDI7XG59KShFbmRwb2ludCB8fCB7fSk7XG5cbi8vIHNyYy9jb25maWcvRW5kcG9pbnRDb25maWdPcHRpb25zLnRzXG52YXIgRU5WX0VORFBPSU5UX05BTUUgPSBcIkFXU19FQzJfTUVUQURBVEFfU0VSVklDRV9FTkRQT0lOVFwiO1xudmFyIENPTkZJR19FTkRQT0lOVF9OQU1FID0gXCJlYzJfbWV0YWRhdGFfc2VydmljZV9lbmRwb2ludFwiO1xudmFyIEVORFBPSU5UX0NPTkZJR19PUFRJT05TID0ge1xuICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IGVudltFTlZfRU5EUE9JTlRfTkFNRV0sXG4gIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHByb2ZpbGVbQ09ORklHX0VORFBPSU5UX05BTUVdLFxuICBkZWZhdWx0OiB2b2lkIDBcbn07XG5cbi8vIHNyYy9jb25maWcvRW5kcG9pbnRNb2RlLnRzXG52YXIgRW5kcG9pbnRNb2RlID0gLyogQF9fUFVSRV9fICovICgoRW5kcG9pbnRNb2RlMikgPT4ge1xuICBFbmRwb2ludE1vZGUyW1wiSVB2NFwiXSA9IFwiSVB2NFwiO1xuICBFbmRwb2ludE1vZGUyW1wiSVB2NlwiXSA9IFwiSVB2NlwiO1xuICByZXR1cm4gRW5kcG9pbnRNb2RlMjtcbn0pKEVuZHBvaW50TW9kZSB8fCB7fSk7XG5cbi8vIHNyYy9jb25maWcvRW5kcG9pbnRNb2RlQ29uZmlnT3B0aW9ucy50c1xudmFyIEVOVl9FTkRQT0lOVF9NT0RFX05BTUUgPSBcIkFXU19FQzJfTUVUQURBVEFfU0VSVklDRV9FTkRQT0lOVF9NT0RFXCI7XG52YXIgQ09ORklHX0VORFBPSU5UX01PREVfTkFNRSA9IFwiZWMyX21ldGFkYXRhX3NlcnZpY2VfZW5kcG9pbnRfbW9kZVwiO1xudmFyIEVORFBPSU5UX01PREVfQ09ORklHX09QVElPTlMgPSB7XG4gIGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvcjogKGVudikgPT4gZW52W0VOVl9FTkRQT0lOVF9NT0RFX05BTUVdLFxuICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiBwcm9maWxlW0NPTkZJR19FTkRQT0lOVF9NT0RFX05BTUVdLFxuICBkZWZhdWx0OiBcIklQdjRcIiAvKiBJUHY0ICovXG59O1xuXG4vLyBzcmMvdXRpbHMvZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50LnRzXG52YXIgZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiAoMCwgaW1wb3J0X3VybF9wYXJzZXIucGFyc2VVcmwpKGF3YWl0IGdldEZyb21FbmRwb2ludENvbmZpZygpIHx8IGF3YWl0IGdldEZyb21FbmRwb2ludE1vZGVDb25maWcoKSksIFwiZ2V0SW5zdGFuY2VNZXRhZGF0YUVuZHBvaW50XCIpO1xudmFyIGdldEZyb21FbmRwb2ludENvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4gKDAsIGltcG9ydF9ub2RlX2NvbmZpZ19wcm92aWRlci5sb2FkQ29uZmlnKShFTkRQT0lOVF9DT05GSUdfT1BUSU9OUykoKSwgXCJnZXRGcm9tRW5kcG9pbnRDb25maWdcIik7XG52YXIgZ2V0RnJvbUVuZHBvaW50TW9kZUNvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBlbmRwb2ludE1vZGUgPSBhd2FpdCAoMCwgaW1wb3J0X25vZGVfY29uZmlnX3Byb3ZpZGVyLmxvYWRDb25maWcpKEVORFBPSU5UX01PREVfQ09ORklHX09QVElPTlMpKCk7XG4gIHN3aXRjaCAoZW5kcG9pbnRNb2RlKSB7XG4gICAgY2FzZSBcIklQdjRcIiAvKiBJUHY0ICovOlxuICAgICAgcmV0dXJuIFwiaHR0cDovLzE2OS4yNTQuMTY5LjI1NFwiIC8qIElQdjQgKi87XG4gICAgY2FzZSBcIklQdjZcIiAvKiBJUHY2ICovOlxuICAgICAgcmV0dXJuIFwiaHR0cDovL1tmZDAwOmVjMjo6MjU0XVwiIC8qIElQdjYgKi87XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZW5kcG9pbnQgbW9kZTogJHtlbmRwb2ludE1vZGV9LiBTZWxlY3QgZnJvbSAke09iamVjdC52YWx1ZXMoRW5kcG9pbnRNb2RlKX1gKTtcbiAgfVxufSwgXCJnZXRGcm9tRW5kcG9pbnRNb2RlQ29uZmlnXCIpO1xuXG4vLyBzcmMvdXRpbHMvZ2V0RXh0ZW5kZWRJbnN0YW5jZU1ldGFkYXRhQ3JlZGVudGlhbHMudHNcbnZhciBTVEFUSUNfU1RBQklMSVRZX1JFRlJFU0hfSU5URVJWQUxfU0VDT05EUyA9IDUgKiA2MDtcbnZhciBTVEFUSUNfU1RBQklMSVRZX1JFRlJFU0hfSU5URVJWQUxfSklUVEVSX1dJTkRPV19TRUNPTkRTID0gNSAqIDYwO1xudmFyIFNUQVRJQ19TVEFCSUxJVFlfRE9DX1VSTCA9IFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nka3JlZi9sYXRlc3QvZ3VpZGUvZmVhdHVyZS1zdGF0aWMtY3JlZGVudGlhbHMuaHRtbFwiO1xudmFyIGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY3JlZGVudGlhbHMsIGxvZ2dlcikgPT4ge1xuICBjb25zdCByZWZyZXNoSW50ZXJ2YWwgPSBTVEFUSUNfU1RBQklMSVRZX1JFRlJFU0hfSU5URVJWQUxfU0VDT05EUyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIFNUQVRJQ19TVEFCSUxJVFlfUkVGUkVTSF9JTlRFUlZBTF9KSVRURVJfV0lORE9XX1NFQ09ORFMpO1xuICBjb25zdCBuZXdFeHBpcmF0aW9uID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIHJlZnJlc2hJbnRlcnZhbCAqIDFlMyk7XG4gIGxvZ2dlci53YXJuKFxuICAgIGBBdHRlbXB0aW5nIGNyZWRlbnRpYWwgZXhwaXJhdGlvbiBleHRlbnNpb24gZHVlIHRvIGEgY3JlZGVudGlhbCBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBpc3N1ZS4gQSByZWZyZXNoIG9mIHRoZXNlIGNyZWRlbnRpYWxzIHdpbGwgYmUgYXR0ZW1wdGVkIGFmdGVyICR7bmV3IERhdGUobmV3RXhwaXJhdGlvbil9LlxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdDogYCArIFNUQVRJQ19TVEFCSUxJVFlfRE9DX1VSTFxuICApO1xuICBjb25zdCBvcmlnaW5hbEV4cGlyYXRpb24gPSBjcmVkZW50aWFscy5vcmlnaW5hbEV4cGlyYXRpb24gPz8gY3JlZGVudGlhbHMuZXhwaXJhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5jcmVkZW50aWFscyxcbiAgICAuLi5vcmlnaW5hbEV4cGlyYXRpb24gPyB7IG9yaWdpbmFsRXhwaXJhdGlvbiB9IDoge30sXG4gICAgZXhwaXJhdGlvbjogbmV3RXhwaXJhdGlvblxuICB9O1xufSwgXCJnZXRFeHRlbmRlZEluc3RhbmNlTWV0YWRhdGFDcmVkZW50aWFsc1wiKTtcblxuLy8gc3JjL3V0aWxzL3N0YXRpY1N0YWJpbGl0eVByb3ZpZGVyLnRzXG52YXIgc3RhdGljU3RhYmlsaXR5UHJvdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwcm92aWRlciwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxvZ2dlciA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmxvZ2dlcikgfHwgY29uc29sZTtcbiAgbGV0IHBhc3RDcmVkZW50aWFscztcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBsZXQgY3JlZGVudGlhbHM7XG4gICAgdHJ5IHtcbiAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgcHJvdmlkZXIoKTtcbiAgICAgIGlmIChjcmVkZW50aWFscy5leHBpcmF0aW9uICYmIGNyZWRlbnRpYWxzLmV4cGlyYXRpb24uZ2V0VGltZSgpIDwgRGF0ZS5ub3coKSkge1xuICAgICAgICBjcmVkZW50aWFscyA9IGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCBsb2dnZXIpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChwYXN0Q3JlZGVudGlhbHMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJDcmVkZW50aWFsIHJlbmV3IGZhaWxlZDogXCIsIGUpO1xuICAgICAgICBjcmVkZW50aWFscyA9IGdldEV4dGVuZGVkSW5zdGFuY2VNZXRhZGF0YUNyZWRlbnRpYWxzKHBhc3RDcmVkZW50aWFscywgbG9nZ2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHBhc3RDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuICAgIHJldHVybiBjcmVkZW50aWFscztcbiAgfTtcbn0sIFwic3RhdGljU3RhYmlsaXR5UHJvdmlkZXJcIik7XG5cbi8vIHNyYy9mcm9tSW5zdGFuY2VNZXRhZGF0YS50c1xudmFyIElNRFNfUEFUSCA9IFwiL2xhdGVzdC9tZXRhLWRhdGEvaWFtL3NlY3VyaXR5LWNyZWRlbnRpYWxzL1wiO1xudmFyIElNRFNfVE9LRU5fUEFUSCA9IFwiL2xhdGVzdC9hcGkvdG9rZW5cIjtcbnZhciBBV1NfRUMyX01FVEFEQVRBX1YxX0RJU0FCTEVEID0gXCJBV1NfRUMyX01FVEFEQVRBX1YxX0RJU0FCTEVEXCI7XG52YXIgUFJPRklMRV9BV1NfRUMyX01FVEFEQVRBX1YxX0RJU0FCTEVEID0gXCJlYzJfbWV0YWRhdGFfdjFfZGlzYWJsZWRcIjtcbnZhciBYX0FXU19FQzJfTUVUQURBVEFfVE9LRU4gPSBcIngtYXdzLWVjMi1tZXRhZGF0YS10b2tlblwiO1xudmFyIGZyb21JbnN0YW5jZU1ldGFkYXRhID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5pdCA9IHt9KSA9PiBzdGF0aWNTdGFiaWxpdHlQcm92aWRlcihnZXRJbnN0YW5jZUltZHNQcm92aWRlcihpbml0KSwgeyBsb2dnZXI6IGluaXQubG9nZ2VyIH0pLCBcImZyb21JbnN0YW5jZU1ldGFkYXRhXCIpO1xudmFyIGdldEluc3RhbmNlSW1kc1Byb3ZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaW5pdCkgPT4ge1xuICBsZXQgZGlzYWJsZUZldGNoVG9rZW4gPSBmYWxzZTtcbiAgY29uc3QgeyBsb2dnZXIsIHByb2ZpbGUgfSA9IGluaXQ7XG4gIGNvbnN0IHsgdGltZW91dCwgbWF4UmV0cmllcyB9ID0gcHJvdmlkZXJDb25maWdGcm9tSW5pdChpbml0KTtcbiAgY29uc3QgZ2V0Q3JlZGVudGlhbHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChtYXhSZXRyaWVzMiwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBpc0ltZHNWMUZhbGxiYWNrID0gZGlzYWJsZUZldGNoVG9rZW4gfHwgKChfYSA9IG9wdGlvbnMuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hW1hfQVdTX0VDMl9NRVRBREFUQV9UT0tFTl0pID09IG51bGw7XG4gICAgaWYgKGlzSW1kc1YxRmFsbGJhY2spIHtcbiAgICAgIGxldCBmYWxsYmFja0Jsb2NrZWRGcm9tUHJvZmlsZSA9IGZhbHNlO1xuICAgICAgbGV0IGZhbGxiYWNrQmxvY2tlZEZyb21Qcm9jZXNzRW52ID0gZmFsc2U7XG4gICAgICBjb25zdCBjb25maWdWYWx1ZSA9IGF3YWl0ICgwLCBpbXBvcnRfbm9kZV9jb25maWdfcHJvdmlkZXIubG9hZENvbmZpZykoXG4gICAgICAgIHtcbiAgICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gZW52W0FXU19FQzJfTUVUQURBVEFfVjFfRElTQUJMRURdO1xuICAgICAgICAgICAgZmFsbGJhY2tCbG9ja2VkRnJvbVByb2Nlc3NFbnYgPSAhIWVudlZhbHVlICYmIGVudlZhbHVlICE9PSBcImZhbHNlXCI7XG4gICAgICAgICAgICBpZiAoZW52VmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcbiAgICAgICAgICAgICAgICBgJHtBV1NfRUMyX01FVEFEQVRBX1YxX0RJU0FCTEVEfSBub3Qgc2V0IGluIGVudiwgY2hlY2tpbmcgY29uZmlnIGZpbGUgbmV4dC5gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tCbG9ja2VkRnJvbVByb2Nlc3NFbnY7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlMikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvZmlsZVZhbHVlID0gcHJvZmlsZTJbUFJPRklMRV9BV1NfRUMyX01FVEFEQVRBX1YxX0RJU0FCTEVEXTtcbiAgICAgICAgICAgIGZhbGxiYWNrQmxvY2tlZEZyb21Qcm9maWxlID0gISFwcm9maWxlVmFsdWUgJiYgcHJvZmlsZVZhbHVlICE9PSBcImZhbHNlXCI7XG4gICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tCbG9ja2VkRnJvbVByb2ZpbGU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZmlsZVxuICAgICAgICB9XG4gICAgICApKCk7XG4gICAgICBpZiAoaW5pdC5lYzJNZXRhZGF0YVYxRGlzYWJsZWQgfHwgY29uZmlnVmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2F1c2VzID0gW107XG4gICAgICAgIGlmIChpbml0LmVjMk1ldGFkYXRhVjFEaXNhYmxlZClcbiAgICAgICAgICBjYXVzZXMucHVzaChcImNyZWRlbnRpYWwgcHJvdmlkZXIgaW5pdGlhbGl6YXRpb24gKHJ1bnRpbWUgb3B0aW9uIGVjMk1ldGFkYXRhVjFEaXNhYmxlZClcIik7XG4gICAgICAgIGlmIChmYWxsYmFja0Jsb2NrZWRGcm9tUHJvZmlsZSlcbiAgICAgICAgICBjYXVzZXMucHVzaChgY29uZmlnIGZpbGUgcHJvZmlsZSAoJHtQUk9GSUxFX0FXU19FQzJfTUVUQURBVEFfVjFfRElTQUJMRUR9KWApO1xuICAgICAgICBpZiAoZmFsbGJhY2tCbG9ja2VkRnJvbVByb2Nlc3NFbnYpXG4gICAgICAgICAgY2F1c2VzLnB1c2goYHByb2Nlc3MgZW52aXJvbm1lbnQgdmFyaWFibGUgKCR7QVdTX0VDMl9NRVRBREFUQV9WMV9ESVNBQkxFRH0pYCk7XG4gICAgICAgIHRocm93IG5ldyBJbnN0YW5jZU1ldGFkYXRhVjFGYWxsYmFja0Vycm9yKFxuICAgICAgICAgIGBBV1MgRUMyIE1ldGFkYXRhIHYxIGZhbGxiYWNrIGhhcyBiZWVuIGJsb2NrZWQgYnkgQVdTIFNESyBjb25maWd1cmF0aW9uIGluIHRoZSBmb2xsb3dpbmc6IFske2NhdXNlcy5qb2luKFxuICAgICAgICAgICAgXCIsIFwiXG4gICAgICAgICAgKX1dLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW1kc1Byb2ZpbGUgPSAoYXdhaXQgcmV0cnkoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHByb2ZpbGUyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvZmlsZTIgPSBhd2FpdCBnZXRQcm9maWxlKG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSA9PT0gNDAxKSB7XG4gICAgICAgICAgZGlzYWJsZUZldGNoVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZmlsZTI7XG4gICAgfSwgbWF4UmV0cmllczIpKS50cmltKCk7XG4gICAgcmV0dXJuIHJldHJ5KGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBjcmVkcztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRzID0gYXdhaXQgZ2V0Q3JlZGVudGlhbHNGcm9tUHJvZmlsZShpbWRzUHJvZmlsZSwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5zdGF0dXNDb2RlID09PSA0MDEpIHtcbiAgICAgICAgICBkaXNhYmxlRmV0Y2hUb2tlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVkcztcbiAgICB9LCBtYXhSZXRyaWVzMik7XG4gIH0sIFwiZ2V0Q3JlZGVudGlhbHNcIik7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnQoKTtcbiAgICBpZiAoZGlzYWJsZUZldGNoVG9rZW4pIHtcbiAgICAgIGxvZ2dlciA9PSBudWxsID8gdm9pZCAwIDogbG9nZ2VyLmRlYnVnKFwiQVdTIFNESyBJbnN0YW5jZSBNZXRhZGF0YVwiLCBcInVzaW5nIHYxIGZhbGxiYWNrIChubyB0b2tlbiBmZXRjaClcIik7XG4gICAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbHMobWF4UmV0cmllcywgeyAuLi5lbmRwb2ludCwgdGltZW91dCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRva2VuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9rZW4gPSAoYXdhaXQgZ2V0TWV0YWRhdGFUb2tlbih7IC4uLmVuZHBvaW50LCB0aW1lb3V0IH0pKS50b1N0cmluZygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKChlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3Iuc3RhdHVzQ29kZSkgPT09IDQwMCkge1xuICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyb3IsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiRUMyIE1ldGFkYXRhIHRva2VuIHJlcXVlc3QgcmV0dXJuZWQgZXJyb3JcIlxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UgPT09IFwiVGltZW91dEVycm9yXCIgfHwgWzQwMywgNDA0LCA0MDVdLmluY2x1ZGVzKGVycm9yLnN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgZGlzYWJsZUZldGNoVG9rZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlciA9PSBudWxsID8gdm9pZCAwIDogbG9nZ2VyLmRlYnVnKFwiQVdTIFNESyBJbnN0YW5jZSBNZXRhZGF0YVwiLCBcInVzaW5nIHYxIGZhbGxiYWNrIChpbml0aWFsKVwiKTtcbiAgICAgICAgcmV0dXJuIGdldENyZWRlbnRpYWxzKG1heFJldHJpZXMsIHsgLi4uZW5kcG9pbnQsIHRpbWVvdXQgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbHMobWF4UmV0cmllcywge1xuICAgICAgICAuLi5lbmRwb2ludCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFtYX0FXU19FQzJfTUVUQURBVEFfVE9LRU5dOiB0b2tlblxuICAgICAgICB9LFxuICAgICAgICB0aW1lb3V0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59LCBcImdldEluc3RhbmNlSW1kc1Byb3ZpZGVyXCIpO1xudmFyIGdldE1ldGFkYXRhVG9rZW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChvcHRpb25zKSA9PiBodHRwUmVxdWVzdCh7XG4gIC4uLm9wdGlvbnMsXG4gIHBhdGg6IElNRFNfVE9LRU5fUEFUSCxcbiAgbWV0aG9kOiBcIlBVVFwiLFxuICBoZWFkZXJzOiB7XG4gICAgXCJ4LWF3cy1lYzItbWV0YWRhdGEtdG9rZW4tdHRsLXNlY29uZHNcIjogXCIyMTYwMFwiXG4gIH1cbn0pLCBcImdldE1ldGFkYXRhVG9rZW5cIik7XG52YXIgZ2V0UHJvZmlsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKG9wdGlvbnMpID0+IChhd2FpdCBodHRwUmVxdWVzdCh7IC4uLm9wdGlvbnMsIHBhdGg6IElNRFNfUEFUSCB9KSkudG9TdHJpbmcoKSwgXCJnZXRQcm9maWxlXCIpO1xudmFyIGdldENyZWRlbnRpYWxzRnJvbVByb2ZpbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwcm9maWxlLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IGNyZWRzUmVzcG9uc2UgPSBKU09OLnBhcnNlKFxuICAgIChhd2FpdCBodHRwUmVxdWVzdCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGF0aDogSU1EU19QQVRIICsgcHJvZmlsZVxuICAgIH0pKS50b1N0cmluZygpXG4gICk7XG4gIGlmICghaXNJbWRzQ3JlZGVudGlhbHMoY3JlZHNSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlLlwiKTtcbiAgfVxuICByZXR1cm4gZnJvbUltZHNDcmVkZW50aWFscyhjcmVkc1Jlc3BvbnNlKTtcbn0sIFwiZ2V0Q3JlZGVudGlhbHNGcm9tUHJvZmlsZVwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGh0dHBSZXF1ZXN0LFxuICBnZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnQsXG4gIEVuZHBvaW50LFxuICBFTlZfQ01EU19GVUxMX1VSSSxcbiAgRU5WX0NNRFNfUkVMQVRJVkVfVVJJLFxuICBFTlZfQ01EU19BVVRIX1RPS0VOLFxuICBmcm9tQ29udGFpbmVyTWV0YWRhdGEsXG4gIGZyb21JbnN0YW5jZU1ldGFkYXRhLFxuICBERUZBVUxUX1RJTUVPVVQsXG4gIERFRkFVTFRfTUFYX1JFVFJJRVMsXG4gIHByb3ZpZGVyQ29uZmlnRnJvbUluaXRcbn0pO1xuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnZcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX2ltZHNfMSA9IHJlcXVpcmUoXCJAc21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kc1wiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHJlc29sdmVDcmVkZW50aWFsU291cmNlID0gKGNyZWRlbnRpYWxTb3VyY2UsIHByb2ZpbGVOYW1lKSA9PiB7XG4gICAgY29uc3Qgc291cmNlUHJvdmlkZXJzTWFwID0ge1xuICAgICAgICBFY3NDb250YWluZXI6IGNyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xLmZyb21Db250YWluZXJNZXRhZGF0YSxcbiAgICAgICAgRWMySW5zdGFuY2VNZXRhZGF0YTogY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUluc3RhbmNlTWV0YWRhdGEsXG4gICAgICAgIEVudmlyb25tZW50OiBjcmVkZW50aWFsX3Byb3ZpZGVyX2Vudl8xLmZyb21FbnYsXG4gICAgfTtcbiAgICBpZiAoY3JlZGVudGlhbFNvdXJjZSBpbiBzb3VyY2VQcm92aWRlcnNNYXApIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVByb3ZpZGVyc01hcFtjcmVkZW50aWFsU291cmNlXSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBVbnN1cHBvcnRlZCBjcmVkZW50aWFsIHNvdXJjZSBpbiBwcm9maWxlICR7cHJvZmlsZU5hbWV9LiBHb3QgJHtjcmVkZW50aWFsU291cmNlfSwgYCArXG4gICAgICAgICAgICBgZXhwZWN0ZWQgRWNzQ29udGFpbmVyIG9yIEVjMkluc3RhbmNlTWV0YWRhdGEgb3IgRW52aXJvbm1lbnQuYCk7XG4gICAgfVxufTtcbmV4cG9ydHMucmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2UgPSByZXNvbHZlQ3JlZGVudGlhbFNvdXJjZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHMgPSBleHBvcnRzLmlzQXNzdW1lUm9sZVByb2ZpbGUgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgcmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2VfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVDcmVkZW50aWFsU291cmNlXCIpO1xuY29uc3QgcmVzb2x2ZVByb2ZpbGVEYXRhXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvZmlsZURhdGFcIik7XG5jb25zdCBpc0Fzc3VtZVJvbGVQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBhcmcucm9sZV9hcm4gPT09IFwic3RyaW5nXCIgJiZcbiAgICBbXCJ1bmRlZmluZWRcIiwgXCJzdHJpbmdcIl0uaW5kZXhPZih0eXBlb2YgYXJnLnJvbGVfc2Vzc2lvbl9uYW1lKSA+IC0xICYmXG4gICAgW1widW5kZWZpbmVkXCIsIFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIGFyZy5leHRlcm5hbF9pZCkgPiAtMSAmJlxuICAgIFtcInVuZGVmaW5lZFwiLCBcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBhcmcubWZhX3NlcmlhbCkgPiAtMSAmJlxuICAgIChpc0Fzc3VtZVJvbGVXaXRoU291cmNlUHJvZmlsZShhcmcpIHx8IGlzQXNzdW1lUm9sZVdpdGhQcm92aWRlclByb2ZpbGUoYXJnKSk7XG5leHBvcnRzLmlzQXNzdW1lUm9sZVByb2ZpbGUgPSBpc0Fzc3VtZVJvbGVQcm9maWxlO1xuY29uc3QgaXNBc3N1bWVSb2xlV2l0aFNvdXJjZVByb2ZpbGUgPSAoYXJnKSA9PiB0eXBlb2YgYXJnLnNvdXJjZV9wcm9maWxlID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBhcmcuY3JlZGVudGlhbF9zb3VyY2UgPT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBpc0Fzc3VtZVJvbGVXaXRoUHJvdmlkZXJQcm9maWxlID0gKGFyZykgPT4gdHlwZW9mIGFyZy5jcmVkZW50aWFsX3NvdXJjZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYXJnLnNvdXJjZV9wcm9maWxlID09PSBcInVuZGVmaW5lZFwiO1xuY29uc3QgcmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscyA9IGFzeW5jIChwcm9maWxlTmFtZSwgcHJvZmlsZXMsIG9wdGlvbnMsIHZpc2l0ZWRQcm9maWxlcyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHByb2ZpbGVzW3Byb2ZpbGVOYW1lXTtcbiAgICBpZiAoIW9wdGlvbnMucm9sZUFzc3VtZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IHJlcXVpcmVzIGEgcm9sZSB0byBiZSBhc3N1bWVkLCBidXQgbm8gcm9sZSBhc3N1bXB0aW9uIGNhbGxiYWNrIHdhcyBwcm92aWRlZC5gLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbnN0IHsgc291cmNlX3Byb2ZpbGUgfSA9IGRhdGE7XG4gICAgaWYgKHNvdXJjZV9wcm9maWxlICYmIHNvdXJjZV9wcm9maWxlIGluIHZpc2l0ZWRQcm9maWxlcykge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYERldGVjdGVkIGEgY3ljbGUgYXR0ZW1wdGluZyB0byByZXNvbHZlIGNyZWRlbnRpYWxzIGZvciBwcm9maWxlYCArXG4gICAgICAgICAgICBgICR7KDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRQcm9maWxlTmFtZSkob3B0aW9ucyl9LiBQcm9maWxlcyB2aXNpdGVkOiBgICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZpc2l0ZWRQcm9maWxlcykuam9pbihcIiwgXCIpLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZUNyZWRzUHJvdmlkZXIgPSBzb3VyY2VfcHJvZmlsZVxuICAgICAgICA/ICgwLCByZXNvbHZlUHJvZmlsZURhdGFfMS5yZXNvbHZlUHJvZmlsZURhdGEpKHNvdXJjZV9wcm9maWxlLCBwcm9maWxlcywgb3B0aW9ucywge1xuICAgICAgICAgICAgLi4udmlzaXRlZFByb2ZpbGVzLFxuICAgICAgICAgICAgW3NvdXJjZV9wcm9maWxlXTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgOiAoMCwgcmVzb2x2ZUNyZWRlbnRpYWxTb3VyY2VfMS5yZXNvbHZlQ3JlZGVudGlhbFNvdXJjZSkoZGF0YS5jcmVkZW50aWFsX3NvdXJjZSwgcHJvZmlsZU5hbWUpKCk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBSb2xlQXJuOiBkYXRhLnJvbGVfYXJuLFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6IGRhdGEucm9sZV9zZXNzaW9uX25hbWUgfHwgYGF3cy1zZGstanMtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIEV4dGVybmFsSWQ6IGRhdGEuZXh0ZXJuYWxfaWQsXG4gICAgICAgIER1cmF0aW9uU2Vjb25kczogcGFyc2VJbnQoZGF0YS5kdXJhdGlvbl9zZWNvbmRzIHx8IFwiMzYwMFwiLCAxMCksXG4gICAgfTtcbiAgICBjb25zdCB7IG1mYV9zZXJpYWwgfSA9IGRhdGE7XG4gICAgaWYgKG1mYV9zZXJpYWwpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLm1mYUNvZGVQcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IHJlcXVpcmVzIG11bHRpLWZhY3RvciBhdXRoZW50aWNhdGlvbiwgYnV0IG5vIE1GQSBjb2RlIGNhbGxiYWNrIHdhcyBwcm92aWRlZC5gLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLlNlcmlhbE51bWJlciA9IG1mYV9zZXJpYWw7XG4gICAgICAgIHBhcmFtcy5Ub2tlbkNvZGUgPSBhd2FpdCBvcHRpb25zLm1mYUNvZGVQcm92aWRlcihtZmFfc2VyaWFsKTtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlQ3JlZHMgPSBhd2FpdCBzb3VyY2VDcmVkc1Byb3ZpZGVyO1xuICAgIHJldHVybiBvcHRpb25zLnJvbGVBc3N1bWVyKHNvdXJjZUNyZWRzLCBwYXJhbXMpO1xufTtcbmV4cG9ydHMucmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscyA9IHJlc29sdmVBc3N1bWVSb2xlQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBnZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHMgPSAocHJvZmlsZU5hbWUsIGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YS5WZXJzaW9uICE9PSAxKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGNyZWRlbnRpYWxfcHJvY2VzcyBkaWQgbm90IHJldHVybiBWZXJzaW9uIDEuYCk7XG4gICAgfVxuICAgIGlmIChkYXRhLkFjY2Vzc0tleUlkID09PSB1bmRlZmluZWQgfHwgZGF0YS5TZWNyZXRBY2Nlc3NLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjcmVkZW50aWFsX3Byb2Nlc3MgcmV0dXJuZWQgaW52YWxpZCBjcmVkZW50aWFscy5gKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuRXhwaXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGV4cGlyZVRpbWUgPSBuZXcgRGF0ZShkYXRhLkV4cGlyYXRpb24pO1xuICAgICAgICBpZiAoZXhwaXJlVGltZSA8IGN1cnJlbnRUaW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjcmVkZW50aWFsX3Byb2Nlc3MgcmV0dXJuZWQgZXhwaXJlZCBjcmVkZW50aWFscy5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NLZXlJZDogZGF0YS5BY2Nlc3NLZXlJZCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBkYXRhLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgLi4uKGRhdGEuU2Vzc2lvblRva2VuICYmIHsgc2Vzc2lvblRva2VuOiBkYXRhLlNlc3Npb25Ub2tlbiB9KSxcbiAgICAgICAgLi4uKGRhdGEuRXhwaXJhdGlvbiAmJiB7IGV4cGlyYXRpb246IG5ldyBEYXRlKGRhdGEuRXhwaXJhdGlvbikgfSksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFscyA9IGdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBjaGlsZF9wcm9jZXNzXzEgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgZ2V0VmFsaWRhdGVkUHJvY2Vzc0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9nZXRWYWxpZGF0ZWRQcm9jZXNzQ3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzID0gYXN5bmMgKHByb2ZpbGVOYW1lLCBwcm9maWxlcykgPT4ge1xuICAgIGNvbnN0IHByb2ZpbGUgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgaWYgKHByb2ZpbGVzW3Byb2ZpbGVOYW1lXSkge1xuICAgICAgICBjb25zdCBjcmVkZW50aWFsUHJvY2VzcyA9IHByb2ZpbGVbXCJjcmVkZW50aWFsX3Byb2Nlc3NcIl07XG4gICAgICAgIGlmIChjcmVkZW50aWFsUHJvY2VzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9ICgwLCB1dGlsXzEucHJvbWlzaWZ5KShjaGlsZF9wcm9jZXNzXzEuZXhlYyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjUHJvbWlzZShjcmVkZW50aWFsUHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0LnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjcmVkZW50aWFsX3Byb2Nlc3MgcmV0dXJuZWQgaW52YWxpZCBKU09OLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFsc18xLmdldFZhbGlkYXRlZFByb2Nlc3NDcmVkZW50aWFscykocHJvZmlsZU5hbWUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGRpZCBub3QgY29udGFpbiBjcmVkZW50aWFsX3Byb2Nlc3MuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgaW4gc2hhcmVkIGNyZWRlbnRpYWxzIGZpbGUuYCk7XG4gICAgfVxufTtcbmV4cG9ydHMucmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscyA9IHJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tUHJvY2VzcyA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgZnJvbVByb2Nlc3MgPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJvZmlsZXMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLnBhcnNlS25vd25GaWxlcykoaW5pdCk7XG4gICAgcmV0dXJuICgwLCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEucmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscykoKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRQcm9maWxlTmFtZSkoaW5pdCksIHByb2ZpbGVzKTtcbn07XG5leHBvcnRzLmZyb21Qcm9jZXNzID0gZnJvbVByb2Nlc3M7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21Qcm9jZXNzXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVQcm9jZXNzQ3JlZGVudGlhbHMgPSBleHBvcnRzLmlzUHJvY2Vzc1Byb2ZpbGUgPSB2b2lkIDA7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3NcIik7XG5jb25zdCBpc1Byb2Nlc3NQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmIHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGFyZy5jcmVkZW50aWFsX3Byb2Nlc3MgPT09IFwic3RyaW5nXCI7XG5leHBvcnRzLmlzUHJvY2Vzc1Byb2ZpbGUgPSBpc1Byb2Nlc3NQcm9maWxlO1xuY29uc3QgcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscyA9IGFzeW5jIChvcHRpb25zLCBwcm9maWxlKSA9PiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9wcm9jZXNzXzEuZnJvbVByb2Nlc3MpKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHByb2ZpbGUsXG59KSgpO1xuZXhwb3J0cy5yZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzID0gcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzU3NvUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGlzU3NvUHJvZmlsZSA9IChhcmcpID0+IGFyZyAmJlxuICAgICh0eXBlb2YgYXJnLnNzb19zdGFydF91cmwgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdHlwZW9mIGFyZy5zc29fYWNjb3VudF9pZCA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgYXJnLnNzb19zZXNzaW9uID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBhcmcuc3NvX3JlZ2lvbiA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgYXJnLnNzb19yb2xlX25hbWUgPT09IFwic3RyaW5nXCIpO1xuZXhwb3J0cy5pc1Nzb1Byb2ZpbGUgPSBpc1Nzb1Byb2ZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gdm9pZCAwO1xuY29uc3QgcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IChvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IG9wdGlvbnMudXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogb3B0aW9ucy51c2VGaXBzRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIGRlZmF1bHRTaWduaW5nTmFtZTogXCJhd3Nzc29wb3J0YWxcIixcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyA9IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0NydEF2YWlsYWJsZSA9IHZvaWQgMDtcbmNvbnN0IGlzQ3J0QXZhaWxhYmxlID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVxdWlyZShcImF3cy1jcnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJtZC9jcnQtYXZhaWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5leHBvcnRzLmlzQ3J0QXZhaWxhYmxlID0gaXNDcnRBdmFpbGFibGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0VXNlckFnZW50ID0gZXhwb3J0cy5VQV9BUFBfSURfSU5JX05BTUUgPSBleHBvcnRzLlVBX0FQUF9JRF9FTlZfTkFNRSA9IHZvaWQgMDtcbmNvbnN0IG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwcm9jZXNzXzEgPSByZXF1aXJlKFwicHJvY2Vzc1wiKTtcbmNvbnN0IGlzX2NydF9hdmFpbGFibGVfMSA9IHJlcXVpcmUoXCIuL2lzLWNydC1hdmFpbGFibGVcIik7XG5leHBvcnRzLlVBX0FQUF9JRF9FTlZfTkFNRSA9IFwiQVdTX1NES19VQV9BUFBfSURcIjtcbmV4cG9ydHMuVUFfQVBQX0lEX0lOSV9OQU1FID0gXCJzZGstdWEtYXBwLWlkXCI7XG5jb25zdCBkZWZhdWx0VXNlckFnZW50ID0gKHsgc2VydmljZUlkLCBjbGllbnRWZXJzaW9uIH0pID0+IHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICAgICAgW1wiYXdzLXNkay1qc1wiLCBjbGllbnRWZXJzaW9uXSxcbiAgICAgICAgW1widWFcIiwgXCIyLjBcIl0sXG4gICAgICAgIFtgb3MvJHsoMCwgb3NfMS5wbGF0Zm9ybSkoKX1gLCAoMCwgb3NfMS5yZWxlYXNlKSgpXSxcbiAgICAgICAgW1wibGFuZy9qc1wiXSxcbiAgICAgICAgW1wibWQvbm9kZWpzXCIsIGAke3Byb2Nlc3NfMS52ZXJzaW9ucy5ub2RlfWBdLFxuICAgIF07XG4gICAgY29uc3QgY3J0QXZhaWxhYmxlID0gKDAsIGlzX2NydF9hdmFpbGFibGVfMS5pc0NydEF2YWlsYWJsZSkoKTtcbiAgICBpZiAoY3J0QXZhaWxhYmxlKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goY3J0QXZhaWxhYmxlKTtcbiAgICB9XG4gICAgaWYgKHNlcnZpY2VJZCkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKFtgYXBpLyR7c2VydmljZUlkfWAsIGNsaWVudFZlcnNpb25dKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3NfMS5lbnYuQVdTX0VYRUNVVElPTl9FTlYpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaChbYGV4ZWMtZW52LyR7cHJvY2Vzc18xLmVudi5BV1NfRVhFQ1VUSU9OX0VOVn1gXSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcElkUHJvbWlzZSA9ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52KSA9PiBlbnZbZXhwb3J0cy5VQV9BUFBfSURfRU5WX05BTUVdLFxuICAgICAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiBwcm9maWxlW2V4cG9ydHMuVUFfQVBQX0lEX0lOSV9OQU1FXSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH0pKCk7XG4gICAgbGV0IHJlc29sdmVkVXNlckFnZW50ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghcmVzb2x2ZWRVc2VyQWdlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcElkID0gYXdhaXQgYXBwSWRQcm9taXNlO1xuICAgICAgICAgICAgcmVzb2x2ZWRVc2VyQWdlbnQgPSBhcHBJZCA/IFsuLi5zZWN0aW9ucywgW2BhcHAvJHthcHBJZH1gXV0gOiBbLi4uc2VjdGlvbnNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZFVzZXJBZ2VudDtcbiAgICB9O1xufTtcbmV4cG9ydHMuZGVmYXVsdFVzZXJBZ2VudCA9IGRlZmF1bHRVc2VyQWdlbnQ7XG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBIYXNoOiAoKSA9PiBIYXNoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcbnZhciBpbXBvcnRfdXRpbF9idWZmZXJfZnJvbSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtYnVmZmVyLWZyb21cIik7XG52YXIgaW1wb3J0X3V0aWxfdXRmOCA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXRmOFwiKTtcbnZhciBpbXBvcnRfYnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKTtcbnZhciBpbXBvcnRfY3J5cHRvID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbnZhciBfSGFzaCA9IGNsYXNzIF9IYXNoIHtcbiAgY29uc3RydWN0b3IoYWxnb3JpdGhtSWRlbnRpZmllciwgc2VjcmV0KSB7XG4gICAgdGhpcy5hbGdvcml0aG1JZGVudGlmaWVyID0gYWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgICB0aGlzLnNlY3JldCA9IHNlY3JldDtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cbiAgdXBkYXRlKHRvSGFzaCwgZW5jb2RpbmcpIHtcbiAgICB0aGlzLmhhc2gudXBkYXRlKCgwLCBpbXBvcnRfdXRpbF91dGY4LnRvVWludDhBcnJheSkoY2FzdFNvdXJjZURhdGEodG9IYXNoLCBlbmNvZGluZykpKTtcbiAgfVxuICBkaWdlc3QoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmhhc2guZGlnZXN0KCkpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaGFzaCA9IHRoaXMuc2VjcmV0ID8gKDAsIGltcG9ydF9jcnlwdG8uY3JlYXRlSG1hYykodGhpcy5hbGdvcml0aG1JZGVudGlmaWVyLCBjYXN0U291cmNlRGF0YSh0aGlzLnNlY3JldCkpIDogKDAsIGltcG9ydF9jcnlwdG8uY3JlYXRlSGFzaCkodGhpcy5hbGdvcml0aG1JZGVudGlmaWVyKTtcbiAgfVxufTtcbl9fbmFtZShfSGFzaCwgXCJIYXNoXCIpO1xudmFyIEhhc2ggPSBfSGFzaDtcbmZ1bmN0aW9uIGNhc3RTb3VyY2VEYXRhKHRvQ2FzdCwgZW5jb2RpbmcpIHtcbiAgaWYgKGltcG9ydF9idWZmZXIuQnVmZmVyLmlzQnVmZmVyKHRvQ2FzdCkpIHtcbiAgICByZXR1cm4gdG9DYXN0O1xuICB9XG4gIGlmICh0eXBlb2YgdG9DYXN0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuICgwLCBpbXBvcnRfdXRpbF9idWZmZXJfZnJvbS5mcm9tU3RyaW5nKSh0b0Nhc3QsIGVuY29kaW5nKTtcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRvQ2FzdCkpIHtcbiAgICByZXR1cm4gKDAsIGltcG9ydF91dGlsX2J1ZmZlcl9mcm9tLmZyb21BcnJheUJ1ZmZlcikodG9DYXN0LmJ1ZmZlciwgdG9DYXN0LmJ5dGVPZmZzZXQsIHRvQ2FzdC5ieXRlTGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gKDAsIGltcG9ydF91dGlsX2J1ZmZlcl9mcm9tLmZyb21BcnJheUJ1ZmZlcikodG9DYXN0KTtcbn1cbl9fbmFtZShjYXN0U291cmNlRGF0YSwgXCJjYXN0U291cmNlRGF0YVwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhhc2hcbn0pO1xuXG4iLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHNyYy9pbmRleC50c1xudmFyIHNyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChzcmNfZXhwb3J0cywge1xuICBjYWxjdWxhdGVCb2R5TGVuZ3RoOiAoKSA9PiBjYWxjdWxhdGVCb2R5TGVuZ3RoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2NhbGN1bGF0ZUJvZHlMZW5ndGgudHNcbnZhciBpbXBvcnRfZnMgPSByZXF1aXJlKFwiZnNcIik7XG52YXIgY2FsY3VsYXRlQm9keUxlbmd0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGJvZHkpID0+IHtcbiAgaWYgKCFib2R5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGJvZHkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5LmJ5dGVMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5LnNpemUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5LnN0YXJ0ID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBib2R5LmVuZCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBib2R5LmVuZCArIDEgLSBib2R5LnN0YXJ0O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5LnBhdGggPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKGJvZHkucGF0aCkpIHtcbiAgICByZXR1cm4gKDAsIGltcG9ydF9mcy5sc3RhdFN5bmMpKGJvZHkucGF0aCkuc2l6ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYm9keS5mZCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiAoMCwgaW1wb3J0X2ZzLmZzdGF0U3luYykoYm9keS5mZCkuc2l6ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEJvZHkgTGVuZ3RoIGNvbXB1dGF0aW9uIGZhaWxlZCBmb3IgJHtib2R5fWApO1xufSwgXCJjYWxjdWxhdGVCb2R5TGVuZ3RoXCIpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2FsY3VsYXRlQm9keUxlbmd0aFxufSk7XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJ1bGVTZXQgPSB2b2lkIDA7XG5jb25zdCBzID0gXCJyZXF1aXJlZFwiLCB0ID0gXCJmblwiLCB1ID0gXCJhcmd2XCIsIHYgPSBcInJlZlwiO1xuY29uc3QgYSA9IFwiaXNTZXRcIiwgYiA9IFwidHJlZVwiLCBjID0gXCJlcnJvclwiLCBkID0gXCJlbmRwb2ludFwiLCBlID0gXCJQYXJ0aXRpb25SZXN1bHRcIiwgZiA9IFwiZ2V0QXR0clwiLCBnID0geyBbc106IGZhbHNlLCBcInR5cGVcIjogXCJTdHJpbmdcIiB9LCBoID0geyBbc106IHRydWUsIFwiZGVmYXVsdFwiOiBmYWxzZSwgXCJ0eXBlXCI6IFwiQm9vbGVhblwiIH0sIGkgPSB7IFt2XTogXCJFbmRwb2ludFwiIH0sIGogPSB7IFt0XTogXCJib29sZWFuRXF1YWxzXCIsIFt1XTogW3sgW3ZdOiBcIlVzZUZJUFNcIiB9LCB0cnVlXSB9LCBrID0geyBbdF06IFwiYm9vbGVhbkVxdWFsc1wiLCBbdV06IFt7IFt2XTogXCJVc2VEdWFsU3RhY2tcIiB9LCB0cnVlXSB9LCBsID0ge30sIG0gPSB7IFt0XTogXCJib29sZWFuRXF1YWxzXCIsIFt1XTogW3RydWUsIHsgW3RdOiBmLCBbdV06IFt7IFt2XTogZSB9LCBcInN1cHBvcnRzRklQU1wiXSB9XSB9LCBuID0geyBbdl06IGUgfSwgbyA9IHsgW3RdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3VdOiBbdHJ1ZSwgeyBbdF06IGYsIFt1XTogW24sIFwic3VwcG9ydHNEdWFsU3RhY2tcIl0gfV0gfSwgcCA9IFtqXSwgcSA9IFtrXSwgciA9IFt7IFt2XTogXCJSZWdpb25cIiB9XTtcbmNvbnN0IF9kYXRhID0geyB2ZXJzaW9uOiBcIjEuMFwiLCBwYXJhbWV0ZXJzOiB7IFJlZ2lvbjogZywgVXNlRHVhbFN0YWNrOiBoLCBVc2VGSVBTOiBoLCBFbmRwb2ludDogZyB9LCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3RdOiBhLCBbdV06IFtpXSB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IHAsIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIHR5cGU6IGMgfSwgeyBjb25kaXRpb25zOiBxLCBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IER1YWxzdGFjayBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIHR5cGU6IGMgfSwgeyBlbmRwb2ludDogeyB1cmw6IGksIHByb3BlcnRpZXM6IGwsIGhlYWRlcnM6IGwgfSwgdHlwZTogZCB9XSB9LCB7IGNvbmRpdGlvbnM6IFt7IFt0XTogYSwgW3VdOiByIH1dLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3RdOiBcImF3cy5wYXJ0aXRpb25cIiwgW3VdOiByLCBhc3NpZ246IGUgfV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbaiwga10sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbbSwgb10sIHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9wb3J0YWwuc3NvLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGwsIGhlYWRlcnM6IGwgfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkZJUFMgYW5kIER1YWxTdGFjayBhcmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgb25lIG9yIGJvdGhcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IHAsIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbbV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbdF06IFwic3RyaW5nRXF1YWxzXCIsIFt1XTogW1wiYXdzLXVzLWdvdlwiLCB7IFt0XTogZiwgW3VdOiBbbiwgXCJuYW1lXCJdIH1dIH1dLCBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9wb3J0YWwuc3NvLntSZWdpb259LmFtYXpvbmF3cy5jb21cIiwgcHJvcGVydGllczogbCwgaGVhZGVyczogbCB9LCB0eXBlOiBkIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBsLCBoZWFkZXJzOiBsIH0sIHR5cGU6IGQgfV0gfSwgeyBlcnJvcjogXCJGSVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRklQU1wiLCB0eXBlOiBjIH1dIH0sIHsgY29uZGl0aW9uczogcSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtvXSwgdHlwZTogYiwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3BvcnRhbC5zc28ue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGwsIGhlYWRlcnM6IGwgfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFja1wiLCB0eXBlOiBjIH1dIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogbCwgaGVhZGVyczogbCB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBNaXNzaW5nIFJlZ2lvblwiLCB0eXBlOiBjIH1dIH07XG5leHBvcnRzLnJ1bGVTZXQgPSBfZGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IHJ1bGVzZXRfMSA9IHJlcXVpcmUoXCIuL3J1bGVzZXRcIik7XG5jb25zdCBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IChlbmRwb2ludFBhcmFtcywgY29udGV4dCA9IHt9KSA9PiB7XG4gICAgcmV0dXJuICgwLCB1dGlsX2VuZHBvaW50c18xLnJlc29sdmVFbmRwb2ludCkocnVsZXNldF8xLnJ1bGVTZXQsIHtcbiAgICAgICAgZW5kcG9pbnRQYXJhbXM6IGVuZHBvaW50UGFyYW1zLFxuICAgICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyLFxuICAgIH0pO1xufTtcbmV4cG9ydHMuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgdXJsX3BhcnNlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXJsLXBhcnNlclwiKTtcbmNvbnN0IHV0aWxfYmFzZTY0XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJhc2U2NFwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC11dGY4XCIpO1xuY29uc3QgZW5kcG9pbnRSZXNvbHZlcl8xID0gcmVxdWlyZShcIi4vZW5kcG9pbnQvZW5kcG9pbnRSZXNvbHZlclwiKTtcbmNvbnN0IGdldFJ1bnRpbWVDb25maWcgPSAoY29uZmlnKSA9PiAoe1xuICAgIGFwaVZlcnNpb246IFwiMjAxOS0wNi0xMFwiLFxuICAgIGJhc2U2NERlY29kZXI6IGNvbmZpZz8uYmFzZTY0RGVjb2RlciA/PyB1dGlsX2Jhc2U2NF8xLmZyb21CYXNlNjQsXG4gICAgYmFzZTY0RW5jb2RlcjogY29uZmlnPy5iYXNlNjRFbmNvZGVyID8/IHV0aWxfYmFzZTY0XzEudG9CYXNlNjQsXG4gICAgZGlzYWJsZUhvc3RQcmVmaXg6IGNvbmZpZz8uZGlzYWJsZUhvc3RQcmVmaXggPz8gZmFsc2UsXG4gICAgZW5kcG9pbnRQcm92aWRlcjogY29uZmlnPy5lbmRwb2ludFByb3ZpZGVyID8/IGVuZHBvaW50UmVzb2x2ZXJfMS5kZWZhdWx0RW5kcG9pbnRSZXNvbHZlcixcbiAgICBleHRlbnNpb25zOiBjb25maWc/LmV4dGVuc2lvbnMgPz8gW10sXG4gICAgbG9nZ2VyOiBjb25maWc/LmxvZ2dlciA/PyBuZXcgc21pdGh5X2NsaWVudF8xLk5vT3BMb2dnZXIoKSxcbiAgICBzZXJ2aWNlSWQ6IGNvbmZpZz8uc2VydmljZUlkID8/IFwiU1NPXCIsXG4gICAgdXJsUGFyc2VyOiBjb25maWc/LnVybFBhcnNlciA/PyB1cmxfcGFyc2VyXzEucGFyc2VVcmwsXG4gICAgdXRmOERlY29kZXI6IGNvbmZpZz8udXRmOERlY29kZXIgPz8gdXRpbF91dGY4XzEuZnJvbVV0ZjgsXG4gICAgdXRmOEVuY29kZXI6IGNvbmZpZz8udXRmOEVuY29kZXIgPz8gdXRpbF91dGY4XzEudG9VdGY4LFxufSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJ2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhcbiAgLy8gSWYgdGhlIGltcG9ydGVyIGlzIGluIG5vZGUgY29tcGF0aWJpbGl0eSBtb2RlIG9yIHRoaXMgaXMgbm90IGFuIEVTTVxuICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLVxuICAvLyBjb21wYXRpYmxlIHRyYW5zZm9ybSAoaS5lLiBcIl9fZXNNb2R1bGVcIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXRcbiAgLy8gXCJkZWZhdWx0XCIgdG8gdGhlIENvbW1vbkpTIFwibW9kdWxlLmV4cG9ydHNcIiBmb3Igbm9kZSBjb21wYXRpYmlsaXR5LlxuICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldCxcbiAgbW9kXG4pKTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgcmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZzogKCkgPT4gcmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZ1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhzcmNfZXhwb3J0cyk7XG5cbi8vIHNyYy9yZXNvbHZlRGVmYXVsdHNNb2RlQ29uZmlnLnRzXG52YXIgaW1wb3J0X2NvbmZpZ19yZXNvbHZlciA9IHJlcXVpcmUoXCJAc21pdGh5L2NvbmZpZy1yZXNvbHZlclwiKTtcbnZhciBpbXBvcnRfbm9kZV9jb25maWdfcHJvdmlkZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbnZhciBpbXBvcnRfcHJvcGVydHlfcHJvdmlkZXIgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcblxuLy8gc3JjL2NvbnN0YW50cy50c1xudmFyIEFXU19FWEVDVVRJT05fRU5WID0gXCJBV1NfRVhFQ1VUSU9OX0VOVlwiO1xudmFyIEFXU19SRUdJT05fRU5WID0gXCJBV1NfUkVHSU9OXCI7XG52YXIgQVdTX0RFRkFVTFRfUkVHSU9OX0VOViA9IFwiQVdTX0RFRkFVTFRfUkVHSU9OXCI7XG52YXIgRU5WX0lNRFNfRElTQUJMRUQgPSBcIkFXU19FQzJfTUVUQURBVEFfRElTQUJMRURcIjtcbnZhciBERUZBVUxUU19NT0RFX09QVElPTlMgPSBbXCJpbi1yZWdpb25cIiwgXCJjcm9zcy1yZWdpb25cIiwgXCJtb2JpbGVcIiwgXCJzdGFuZGFyZFwiLCBcImxlZ2FjeVwiXTtcbnZhciBJTURTX1JFR0lPTl9QQVRIID0gXCIvbGF0ZXN0L21ldGEtZGF0YS9wbGFjZW1lbnQvcmVnaW9uXCI7XG5cbi8vIHNyYy9kZWZhdWx0c01vZGVDb25maWcudHNcbnZhciBBV1NfREVGQVVMVFNfTU9ERV9FTlYgPSBcIkFXU19ERUZBVUxUU19NT0RFXCI7XG52YXIgQVdTX0RFRkFVTFRTX01PREVfQ09ORklHID0gXCJkZWZhdWx0c19tb2RlXCI7XG52YXIgTk9ERV9ERUZBVUxUU19NT0RFX0NPTkZJR19PUFRJT05TID0ge1xuICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnYpID0+IHtcbiAgICByZXR1cm4gZW52W0FXU19ERUZBVUxUU19NT0RFX0VOVl07XG4gIH0sXG4gIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHtcbiAgICByZXR1cm4gcHJvZmlsZVtBV1NfREVGQVVMVFNfTU9ERV9DT05GSUddO1xuICB9LFxuICBkZWZhdWx0OiBcImxlZ2FjeVwiXG59O1xuXG4vLyBzcmMvcmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZy50c1xudmFyIHJlc29sdmVEZWZhdWx0c01vZGVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7XG4gIHJlZ2lvbiA9ICgwLCBpbXBvcnRfbm9kZV9jb25maWdfcHJvdmlkZXIubG9hZENvbmZpZykoaW1wb3J0X2NvbmZpZ19yZXNvbHZlci5OT0RFX1JFR0lPTl9DT05GSUdfT1BUSU9OUyksXG4gIGRlZmF1bHRzTW9kZSA9ICgwLCBpbXBvcnRfbm9kZV9jb25maWdfcHJvdmlkZXIubG9hZENvbmZpZykoTk9ERV9ERUZBVUxUU19NT0RFX0NPTkZJR19PUFRJT05TKVxufSA9IHt9KSA9PiAoMCwgaW1wb3J0X3Byb3BlcnR5X3Byb3ZpZGVyLm1lbW9pemUpKGFzeW5jICgpID0+IHtcbiAgY29uc3QgbW9kZSA9IHR5cGVvZiBkZWZhdWx0c01vZGUgPT09IFwiZnVuY3Rpb25cIiA/IGF3YWl0IGRlZmF1bHRzTW9kZSgpIDogZGVmYXVsdHNNb2RlO1xuICBzd2l0Y2ggKG1vZGUgPT0gbnVsbCA/IHZvaWQgMCA6IG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJhdXRvXCI6XG4gICAgICByZXR1cm4gcmVzb2x2ZU5vZGVEZWZhdWx0c01vZGVBdXRvKHJlZ2lvbik7XG4gICAgY2FzZSBcImluLXJlZ2lvblwiOlxuICAgIGNhc2UgXCJjcm9zcy1yZWdpb25cIjpcbiAgICBjYXNlIFwibW9iaWxlXCI6XG4gICAgY2FzZSBcInN0YW5kYXJkXCI6XG4gICAgY2FzZSBcImxlZ2FjeVwiOlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2RlID09IG51bGwgPyB2b2lkIDAgOiBtb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcImxlZ2FjeVwiKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIFwiZGVmYXVsdHNNb2RlXCIsIGV4cGVjdCAke0RFRkFVTFRTX01PREVfT1BUSU9OUy5qb2luKFwiLCBcIil9LCBnb3QgJHttb2RlfWBcbiAgICAgICk7XG4gIH1cbn0pLCBcInJlc29sdmVEZWZhdWx0c01vZGVDb25maWdcIik7XG52YXIgcmVzb2x2ZU5vZGVEZWZhdWx0c01vZGVBdXRvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoY2xpZW50UmVnaW9uKSA9PiB7XG4gIGlmIChjbGllbnRSZWdpb24pIHtcbiAgICBjb25zdCByZXNvbHZlZFJlZ2lvbiA9IHR5cGVvZiBjbGllbnRSZWdpb24gPT09IFwiZnVuY3Rpb25cIiA/IGF3YWl0IGNsaWVudFJlZ2lvbigpIDogY2xpZW50UmVnaW9uO1xuICAgIGNvbnN0IGluZmVycmVkUmVnaW9uID0gYXdhaXQgaW5mZXJQaHlzaWNhbFJlZ2lvbigpO1xuICAgIGlmICghaW5mZXJyZWRSZWdpb24pIHtcbiAgICAgIHJldHVybiBcInN0YW5kYXJkXCI7XG4gICAgfVxuICAgIGlmIChyZXNvbHZlZFJlZ2lvbiA9PT0gaW5mZXJyZWRSZWdpb24pIHtcbiAgICAgIHJldHVybiBcImluLXJlZ2lvblwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJjcm9zcy1yZWdpb25cIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwic3RhbmRhcmRcIjtcbn0sIFwicmVzb2x2ZU5vZGVEZWZhdWx0c01vZGVBdXRvXCIpO1xudmFyIGluZmVyUGh5c2ljYWxSZWdpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52W0FXU19FWEVDVVRJT05fRU5WXSAmJiAocHJvY2Vzcy5lbnZbQVdTX1JFR0lPTl9FTlZdIHx8IHByb2Nlc3MuZW52W0FXU19ERUZBVUxUX1JFR0lPTl9FTlZdKSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltBV1NfUkVHSU9OX0VOVl0gPz8gcHJvY2Vzcy5lbnZbQVdTX0RFRkFVTFRfUkVHSU9OX0VOVl07XG4gIH1cbiAgaWYgKCFwcm9jZXNzLmVudltFTlZfSU1EU19ESVNBQkxFRF0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBnZXRJbnN0YW5jZU1ldGFkYXRhRW5kcG9pbnQsIGh0dHBSZXF1ZXN0IH0gPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IF9fdG9FU00ocmVxdWlyZShcIkBzbWl0aHkvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzXCIpKSk7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGdldEluc3RhbmNlTWV0YWRhdGFFbmRwb2ludCgpO1xuICAgICAgcmV0dXJuIChhd2FpdCBodHRwUmVxdWVzdCh7IC4uLmVuZHBvaW50LCBwYXRoOiBJTURTX1JFR0lPTl9QQVRIIH0pKS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICB9XG4gIH1cbn0sIFwiaW5mZXJQaHlzaWNhbFJlZ2lvblwiKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcblxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlc29sdmVEZWZhdWx0c01vZGVDb25maWdcbn0pO1xuXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IHBhY2thZ2VfanNvbl8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3BhY2thZ2UuanNvblwiKSk7XG5jb25zdCB1dGlsX3VzZXJfYWdlbnRfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlXCIpO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBoYXNoX25vZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L2hhc2gtbm9kZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXJcIik7XG5jb25zdCBub2RlX2h0dHBfaGFuZGxlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXJcIik7XG5jb25zdCB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtYm9keS1sZW5ndGgtbm9kZVwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtcmV0cnlcIik7XG5jb25zdCBydW50aW1lQ29uZmlnX3NoYXJlZF8xID0gcmVxdWlyZShcIi4vcnVudGltZUNvbmZpZy5zaGFyZWRcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8yID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IGdldFJ1bnRpbWVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gICAgKDAsIHNtaXRoeV9jbGllbnRfMi5lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uKShwcm9jZXNzLnZlcnNpb24pO1xuICAgIGNvbnN0IGRlZmF1bHRzTW9kZSA9ICgwLCB1dGlsX2RlZmF1bHRzX21vZGVfbm9kZV8xLnJlc29sdmVEZWZhdWx0c01vZGVDb25maWcpKGNvbmZpZyk7XG4gICAgY29uc3QgZGVmYXVsdENvbmZpZ1Byb3ZpZGVyID0gKCkgPT4gZGVmYXVsdHNNb2RlKCkudGhlbihzbWl0aHlfY2xpZW50XzEubG9hZENvbmZpZ3NGb3JEZWZhdWx0TW9kZSk7XG4gICAgY29uc3QgY2xpZW50U2hhcmVkVmFsdWVzID0gKDAsIHJ1bnRpbWVDb25maWdfc2hhcmVkXzEuZ2V0UnVudGltZUNvbmZpZykoY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5jbGllbnRTaGFyZWRWYWx1ZXMsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgcnVudGltZTogXCJub2RlXCIsXG4gICAgICAgIGRlZmF1bHRzTW9kZSxcbiAgICAgICAgYm9keUxlbmd0aENoZWNrZXI6IGNvbmZpZz8uYm9keUxlbmd0aENoZWNrZXIgPz8gdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEuY2FsY3VsYXRlQm9keUxlbmd0aCxcbiAgICAgICAgZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyOiBjb25maWc/LmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlciA/P1xuICAgICAgICAgICAgKDAsIHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEuZGVmYXVsdFVzZXJBZ2VudCkoeyBzZXJ2aWNlSWQ6IGNsaWVudFNoYXJlZFZhbHVlcy5zZXJ2aWNlSWQsIGNsaWVudFZlcnNpb246IHBhY2thZ2VfanNvbl8xLmRlZmF1bHQudmVyc2lvbiB9KSxcbiAgICAgICAgbWF4QXR0ZW1wdHM6IGNvbmZpZz8ubWF4QXR0ZW1wdHMgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykobWlkZGxld2FyZV9yZXRyeV8xLk5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMpLFxuICAgICAgICByZWdpb246IGNvbmZpZz8ucmVnaW9uID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TLCBjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1JFR0lPTl9DT05GSUdfRklMRV9PUFRJT05TKSxcbiAgICAgICAgcmVxdWVzdEhhbmRsZXI6IGNvbmZpZz8ucmVxdWVzdEhhbmRsZXIgPz8gbmV3IG5vZGVfaHR0cF9oYW5kbGVyXzEuTm9kZUh0dHBIYW5kbGVyKGRlZmF1bHRDb25maWdQcm92aWRlciksXG4gICAgICAgIHJldHJ5TW9kZTogY29uZmlnPy5yZXRyeU1vZGUgPz9cbiAgICAgICAgICAgICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgICAgICAgICAuLi5taWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFzeW5jICgpID0+IChhd2FpdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIoKSkucmV0cnlNb2RlIHx8IHV0aWxfcmV0cnlfMS5ERUZBVUxUX1JFVFJZX01PREUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgc2hhMjU2OiBjb25maWc/LnNoYTI1NiA/PyBoYXNoX25vZGVfMS5IYXNoLmJpbmQobnVsbCwgXCJzaGEyNTZcIiksXG4gICAgICAgIHN0cmVhbUNvbGxlY3RvcjogY29uZmlnPy5zdHJlYW1Db2xsZWN0b3IgPz8gbm9kZV9odHRwX2hhbmRsZXJfMS5zdHJlYW1Db2xsZWN0b3IsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBjb25maWc/LnVzZUR1YWxzdGFja0VuZHBvaW50ID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfVVNFX0RVQUxTVEFDS19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogY29uZmlnPy51c2VGaXBzRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZUF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSBleHBvcnRzLmdldEF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBnZXRBd3NSZWdpb25FeHRlbnNpb25Db25maWd1cmF0aW9uID0gKHJ1bnRpbWVDb25maWcpID0+IHtcbiAgICBsZXQgcnVudGltZUNvbmZpZ1JlZ2lvbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHJ1bnRpbWVDb25maWcucmVnaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZ2lvbiBpcyBtaXNzaW5nIGZyb20gcnVudGltZUNvbmZpZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWdpb24gPSBydW50aW1lQ29uZmlnLnJlZ2lvbjtcbiAgICAgICAgaWYgKHR5cGVvZiByZWdpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWdpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2lvbigpO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2V0UmVnaW9uKHJlZ2lvbikge1xuICAgICAgICAgICAgcnVudGltZUNvbmZpZ1JlZ2lvbiA9IHJlZ2lvbjtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWVDb25maWdSZWdpb247XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5leHBvcnRzLmdldEF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSBnZXRBd3NSZWdpb25FeHRlbnNpb25Db25maWd1cmF0aW9uO1xuY29uc3QgcmVzb2x2ZUF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSAoYXdzUmVnaW9uRXh0ZW5zaW9uQ29uZmlndXJhdGlvbikgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lvbjogYXdzUmVnaW9uRXh0ZW5zaW9uQ29uZmlndXJhdGlvbi5yZWdpb24oKSxcbiAgICB9O1xufTtcbmV4cG9ydHMucmVzb2x2ZUF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSByZXNvbHZlQXdzUmVnaW9uRXh0ZW5zaW9uQ29uZmlndXJhdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5PREVfUkVHSU9OX0NPTkZJR19GSUxFX09QVElPTlMgPSBleHBvcnRzLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TID0gZXhwb3J0cy5SRUdJT05fSU5JX05BTUUgPSBleHBvcnRzLlJFR0lPTl9FTlZfTkFNRSA9IHZvaWQgMDtcbmV4cG9ydHMuUkVHSU9OX0VOVl9OQU1FID0gXCJBV1NfUkVHSU9OXCI7XG5leHBvcnRzLlJFR0lPTl9JTklfTkFNRSA9IFwicmVnaW9uXCI7XG5leHBvcnRzLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TID0ge1xuICAgIGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvcjogKGVudikgPT4gZW52W2V4cG9ydHMuUkVHSU9OX0VOVl9OQU1FXSxcbiAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiBwcm9maWxlW2V4cG9ydHMuUkVHSU9OX0lOSV9OQU1FXSxcbiAgICBkZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZ2lvbiBpcyBtaXNzaW5nXCIpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5OT0RFX1JFR0lPTl9DT05GSUdfRklMRV9PUFRJT05TID0ge1xuICAgIHByZWZlcnJlZEZpbGU6IFwiY3JlZGVudGlhbHNcIixcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0ZpcHNSZWdpb24gPSB2b2lkIDA7XG5jb25zdCBpc0ZpcHNSZWdpb24gPSAocmVnaW9uKSA9PiB0eXBlb2YgcmVnaW9uID09PSBcInN0cmluZ1wiICYmIChyZWdpb24uc3RhcnRzV2l0aChcImZpcHMtXCIpIHx8IHJlZ2lvbi5lbmRzV2l0aChcIi1maXBzXCIpKTtcbmV4cG9ydHMuaXNGaXBzUmVnaW9uID0gaXNGaXBzUmVnaW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmVhbFJlZ2lvbiA9IHZvaWQgMDtcbmNvbnN0IGlzRmlwc1JlZ2lvbl8xID0gcmVxdWlyZShcIi4vaXNGaXBzUmVnaW9uXCIpO1xuY29uc3QgZ2V0UmVhbFJlZ2lvbiA9IChyZWdpb24pID0+ICgwLCBpc0ZpcHNSZWdpb25fMS5pc0ZpcHNSZWdpb24pKHJlZ2lvbilcbiAgICA/IFtcImZpcHMtYXdzLWdsb2JhbFwiLCBcImF3cy1maXBzXCJdLmluY2x1ZGVzKHJlZ2lvbilcbiAgICAgICAgPyBcInVzLWVhc3QtMVwiXG4gICAgICAgIDogcmVnaW9uLnJlcGxhY2UoL2ZpcHMtKGRrci18cHJvZC0pP3wtZmlwcy8sIFwiXCIpXG4gICAgOiByZWdpb247XG5leHBvcnRzLmdldFJlYWxSZWdpb24gPSBnZXRSZWFsUmVnaW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVJlZ2lvbkNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IGdldFJlYWxSZWdpb25fMSA9IHJlcXVpcmUoXCIuL2dldFJlYWxSZWdpb25cIik7XG5jb25zdCBpc0ZpcHNSZWdpb25fMSA9IHJlcXVpcmUoXCIuL2lzRmlwc1JlZ2lvblwiKTtcbmNvbnN0IHJlc29sdmVSZWdpb25Db25maWcgPSAoaW5wdXQpID0+IHtcbiAgICBjb25zdCB7IHJlZ2lvbiwgdXNlRmlwc0VuZHBvaW50IH0gPSBpbnB1dDtcbiAgICBpZiAoIXJlZ2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWdpb24gaXMgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHJlZ2lvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWdpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldFJlYWxSZWdpb25fMS5nZXRSZWFsUmVnaW9uKShyZWdpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZWRSZWdpb24gPSBhd2FpdCByZWdpb24oKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0UmVhbFJlZ2lvbl8xLmdldFJlYWxSZWdpb24pKHByb3ZpZGVkUmVnaW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlZFJlZ2lvbiA9IHR5cGVvZiByZWdpb24gPT09IFwic3RyaW5nXCIgPyByZWdpb24gOiBhd2FpdCByZWdpb24oKTtcbiAgICAgICAgICAgIGlmICgoMCwgaXNGaXBzUmVnaW9uXzEuaXNGaXBzUmVnaW9uKShwcm92aWRlZFJlZ2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdXNlRmlwc0VuZHBvaW50ICE9PSBcImZ1bmN0aW9uXCIgPyBQcm9taXNlLnJlc29sdmUoISF1c2VGaXBzRW5kcG9pbnQpIDogdXNlRmlwc0VuZHBvaW50KCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVSZWdpb25Db25maWcgPSByZXNvbHZlUmVnaW9uQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb25maWdcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzb2x2ZVJlZ2lvbkNvbmZpZ1wiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2V4dGVuc2lvbnNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVnaW9uQ29uZmlnXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucyA9IHZvaWQgMDtcbmNvbnN0IHJlZ2lvbl9jb25maWdfcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9yZWdpb24tY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgcHJvdG9jb2xfaHR0cF8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvdG9jb2wtaHR0cFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBhc1BhcnRpYWwgPSAodCkgPT4gdDtcbmNvbnN0IHJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucyA9IChydW50aW1lQ29uZmlnLCBleHRlbnNpb25zKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgLi4uYXNQYXJ0aWFsKCgwLCByZWdpb25fY29uZmlnX3Jlc29sdmVyXzEuZ2V0QXdzUmVnaW9uRXh0ZW5zaW9uQ29uZmlndXJhdGlvbikocnVudGltZUNvbmZpZykpLFxuICAgICAgICAuLi5hc1BhcnRpYWwoKDAsIHNtaXRoeV9jbGllbnRfMS5nZXREZWZhdWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbikocnVudGltZUNvbmZpZykpLFxuICAgICAgICAuLi5hc1BhcnRpYWwoKDAsIHByb3RvY29sX2h0dHBfMS5nZXRIdHRwSGFuZGxlckV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pKHJ1bnRpbWVDb25maWcpKSxcbiAgICB9O1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24uY29uZmlndXJlKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5ydW50aW1lQ29uZmlnLFxuICAgICAgICAuLi4oMCwgcmVnaW9uX2NvbmZpZ19yZXNvbHZlcl8xLnJlc29sdmVBd3NSZWdpb25FeHRlbnNpb25Db25maWd1cmF0aW9uKShleHRlbnNpb25Db25maWd1cmF0aW9uKSxcbiAgICAgICAgLi4uKDAsIHNtaXRoeV9jbGllbnRfMS5yZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcpKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pLFxuICAgICAgICAuLi4oMCwgcHJvdG9jb2xfaHR0cF8xLnJlc29sdmVIdHRwSGFuZGxlclJ1bnRpbWVDb25maWcpKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pLFxuICAgIH07XG59O1xuZXhwb3J0cy5yZXNvbHZlUnVudGltZUV4dGVuc2lvbnMgPSByZXNvbHZlUnVudGltZUV4dGVuc2lvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TU09DbGllbnQgPSBleHBvcnRzLl9fQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtaG9zdC1oZWFkZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX2xvZ2dlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtbG9nZ2VyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZWN1cnNpb25fZGV0ZWN0aW9uXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uXCIpO1xuY29uc3QgbWlkZGxld2FyZV91c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50XCIpO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19DbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5DbGllbnQ7IH0gfSk7XG5jb25zdCBFbmRwb2ludFBhcmFtZXRlcnNfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVyc1wiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWdcIik7XG5jb25zdCBydW50aW1lRXh0ZW5zaW9uc18xID0gcmVxdWlyZShcIi4vcnVudGltZUV4dGVuc2lvbnNcIik7XG5jbGFzcyBTU09DbGllbnQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvciguLi5bY29uZmlndXJhdGlvbl0pIHtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18wID0gKDAsIHJ1bnRpbWVDb25maWdfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWd1cmF0aW9uIHx8IHt9KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18xID0gKDAsIEVuZHBvaW50UGFyYW1ldGVyc18xLnJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMpKF9jb25maWdfMCk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMiA9ICgwLCBjb25maWdfcmVzb2x2ZXJfMS5yZXNvbHZlUmVnaW9uQ29uZmlnKShfY29uZmlnXzEpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzMgPSAoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLnJlc29sdmVFbmRwb2ludENvbmZpZykoX2NvbmZpZ18yKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ180ID0gKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5yZXNvbHZlUmV0cnlDb25maWcpKF9jb25maWdfMyk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNSA9ICgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEucmVzb2x2ZUhvc3RIZWFkZXJDb25maWcpKF9jb25maWdfNCk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNiA9ICgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5yZXNvbHZlVXNlckFnZW50Q29uZmlnKShfY29uZmlnXzUpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzcgPSAoMCwgcnVudGltZUV4dGVuc2lvbnNfMS5yZXNvbHZlUnVudGltZUV4dGVuc2lvbnMpKF9jb25maWdfNiwgY29uZmlndXJhdGlvbj8uZXh0ZW5zaW9ucyB8fCBbXSk7XG4gICAgICAgIHN1cGVyKF9jb25maWdfNyk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX2NvbmZpZ183O1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5nZXRSZXRyeVBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEuZ2V0Q29udGVudExlbmd0aFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEuZ2V0SG9zdEhlYWRlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2xvZ2dlcl8xLmdldExvZ2dlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMS5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50UGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxufVxuZXhwb3J0cy5TU09DbGllbnQgPSBTU09DbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TU09TZXJ2aWNlRXhjZXB0aW9uID0gZXhwb3J0cy5fX1NlcnZpY2VFeGNlcHRpb24gPSB2b2lkIDA7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19TZXJ2aWNlRXhjZXB0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbjsgfSB9KTtcbmNsYXNzIFNTT1NlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFNTT1NlcnZpY2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlNTT1NlcnZpY2VFeGNlcHRpb24gPSBTU09TZXJ2aWNlRXhjZXB0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuTGlzdEFjY291bnRzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1Jlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5Sb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLlVuYXV0aG9yaXplZEV4Y2VwdGlvbiA9IGV4cG9ydHMuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uID0gZXhwb3J0cy5SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBTU09TZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi9TU09TZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY2xhc3MgSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gPSBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbjtcbmNsYXNzIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiA9IFJlc291cmNlTm90Rm91bmRFeGNlcHRpb247XG5jbGFzcyBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uXzEuU1NPU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uID0gVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uO1xuY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgU1NPU2VydmljZUV4Y2VwdGlvbl8xLlNTT1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBVbmF1dGhvcml6ZWRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlVuYXV0aG9yaXplZEV4Y2VwdGlvbiA9IFVuYXV0aG9yaXplZEV4Y2VwdGlvbjtcbmNvbnN0IEdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBHZXRSb2xlQ3JlZGVudGlhbHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgUm9sZUNyZWRlbnRpYWxzRmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5zZWNyZXRBY2Nlc3NLZXkgJiYgeyBzZWNyZXRBY2Nlc3NLZXk6IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxuICAgIC4uLihvYmouc2Vzc2lvblRva2VuICYmIHsgc2Vzc2lvblRva2VuOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9KSxcbn0pO1xuZXhwb3J0cy5Sb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cgPSBSb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBHZXRSb2xlQ3JlZGVudGlhbHNSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmoucm9sZUNyZWRlbnRpYWxzICYmIHsgcm9sZUNyZWRlbnRpYWxzOiAoMCwgZXhwb3J0cy5Sb2xlQ3JlZGVudGlhbHNGaWx0ZXJTZW5zaXRpdmVMb2cpKG9iai5yb2xlQ3JlZGVudGlhbHMpIH0pLFxufSk7XG5leHBvcnRzLkdldFJvbGVDcmVkZW50aWFsc1Jlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBMaXN0QWNjb3VudFJvbGVzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouYWNjZXNzVG9rZW4gJiYgeyBhY2Nlc3NUb2tlbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuTGlzdEFjY291bnRSb2xlc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBMaXN0QWNjb3VudFJvbGVzUmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZztcbmNvbnN0IExpc3RBY2NvdW50c1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkxpc3RBY2NvdW50c1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBMaXN0QWNjb3VudHNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouYWNjZXNzVG9rZW4gJiYgeyBhY2Nlc3NUb2tlbjogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuTG9nb3V0UmVxdWVzdEZpbHRlclNlbnNpdGl2ZUxvZyA9IExvZ291dFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2c7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZV9Mb2dvdXRDb21tYW5kID0gZXhwb3J0cy5kZV9MaXN0QWNjb3VudHNDb21tYW5kID0gZXhwb3J0cy5kZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IGV4cG9ydHMuZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGV4cG9ydHMuc2VfTG9nb3V0Q29tbWFuZCA9IGV4cG9ydHMuc2VfTGlzdEFjY291bnRzQ29tbWFuZCA9IGV4cG9ydHMuc2VfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBleHBvcnRzLnNlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgU1NPU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4uL21vZGVscy9TU09TZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY29uc3Qgc2VfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30sIGlzU2VyaWFsaXphYmxlSGVhZGVyVmFsdWUsIHtcbiAgICAgICAgXCJ4LWFtei1zc29fYmVhcmVyX3Rva2VuXCI6IGlucHV0LmFjY2Vzc1Rva2VuLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGAke2Jhc2VQYXRoPy5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifWAgKyBcIi9mZWRlcmF0aW9uL2NyZWRlbnRpYWxzXCI7XG4gICAgY29uc3QgcXVlcnkgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICByb2xlX25hbWU6IFssICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoaW5wdXQucm9sZU5hbWUsIGByb2xlTmFtZWApXSxcbiAgICAgICAgYWNjb3VudF9pZDogWywgKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKShpbnB1dC5hY2NvdW50SWQsIGBhY2NvdW50SWRgKV0sXG4gICAgfSk7XG4gICAgbGV0IGJvZHk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgPSBzZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kO1xuY29uc3Qgc2VfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9LCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlLCB7XG4gICAgICAgIFwieC1hbXotc3NvX2JlYXJlcl90b2tlblwiOiBpbnB1dC5hY2Nlc3NUb2tlbixcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHtiYXNlUGF0aD8uZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGguc2xpY2UoMCwgLTEpIDogYmFzZVBhdGggfHwgXCJcIn1gICsgXCIvYXNzaWdubWVudC9yb2xlc1wiO1xuICAgIGNvbnN0IHF1ZXJ5ID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgbmV4dF90b2tlbjogWywgaW5wdXQubmV4dFRva2VuXSxcbiAgICAgICAgbWF4X3Jlc3VsdDogWygpID0+IGlucHV0Lm1heFJlc3VsdHMgIT09IHZvaWQgMCwgKCkgPT4gaW5wdXQubWF4UmVzdWx0cy50b1N0cmluZygpXSxcbiAgICAgICAgYWNjb3VudF9pZDogWywgKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKShpbnB1dC5hY2NvdW50SWQsIGBhY2NvdW50SWRgKV0sXG4gICAgfSk7XG4gICAgbGV0IGJvZHk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gc2VfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQ7XG5jb25zdCBzZV9MaXN0QWNjb3VudHNDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSwgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSwge1xuICAgICAgICBcIngtYW16LXNzb19iZWFyZXJfdG9rZW5cIjogaW5wdXQuYWNjZXNzVG9rZW4sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL2Fzc2lnbm1lbnQvYWNjb3VudHNcIjtcbiAgICBjb25zdCBxdWVyeSA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgIG5leHRfdG9rZW46IFssIGlucHV0Lm5leHRUb2tlbl0sXG4gICAgICAgIG1heF9yZXN1bHQ6IFsoKSA9PiBpbnB1dC5tYXhSZXN1bHRzICE9PSB2b2lkIDAsICgpID0+IGlucHV0Lm1heFJlc3VsdHMudG9TdHJpbmcoKV0sXG4gICAgfSk7XG4gICAgbGV0IGJvZHk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX0xpc3RBY2NvdW50c0NvbW1hbmQgPSBzZV9MaXN0QWNjb3VudHNDb21tYW5kO1xuY29uc3Qgc2VfTG9nb3V0Q29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30sIGlzU2VyaWFsaXphYmxlSGVhZGVyVmFsdWUsIHtcbiAgICAgICAgXCJ4LWFtei1zc29fYmVhcmVyX3Rva2VuXCI6IGlucHV0LmFjY2Vzc1Rva2VuLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGAke2Jhc2VQYXRoPy5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifWAgKyBcIi9sb2dvdXRcIjtcbiAgICBsZXQgYm9keTtcbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBib2R5LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2VfTG9nb3V0Q29tbWFuZCA9IHNlX0xvZ291dENvbW1hbmQ7XG5jb25zdCBkZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RPYmplY3QpKGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCkpLCBcImJvZHlcIik7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIHJvbGVDcmVkZW50aWFsczogc21pdGh5X2NsaWVudF8xLl9qc29uLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmV4cG9ydHMuZGVfR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGRlX0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQ7XG5jb25zdCBkZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1VuYXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlICE9PSAyMDAgJiYgb3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9ICgwLCBzbWl0aHlfY2xpZW50XzEuZXhwZWN0Tm9uTnVsbCkoKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3RPYmplY3QpKGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCkpLCBcImJvZHlcIik7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG5leHRUb2tlbjogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgcm9sZUxpc3Q6IHNtaXRoeV9jbGllbnRfMS5fanNvbixcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG5leHBvcnRzLmRlX0xpc3RBY2NvdW50Um9sZXNDb21tYW5kID0gZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQ7XG5jb25zdCBkZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZFJlcXVlc3RFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9VbmF1dGhvcml6ZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbmNvbnN0IGRlX0xpc3RBY2NvdW50c0NvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlICE9PSAyMDAgJiYgb3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9MaXN0QWNjb3VudHNDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gKDAsIHNtaXRoeV9jbGllbnRfMS5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF8xLmV4cGVjdE9iamVjdCkoYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSksIFwiYm9keVwiKTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgYWNjb3VudExpc3Q6IHNtaXRoeV9jbGllbnRfMS5fanNvbixcbiAgICAgICAgbmV4dFRva2VuOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmV4cG9ydHMuZGVfTGlzdEFjY291bnRzQ29tbWFuZCA9IGRlX0xpc3RBY2NvdW50c0NvbW1hbmQ7XG5jb25zdCBkZV9MaXN0QWNjb3VudHNDb21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVW5hdXRob3JpemVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzbyNVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX1VuYXV0aG9yaXplZEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgZGVfTG9nb3V0Q29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiBvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0xvZ291dENvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgIH0pO1xuICAgIGF3YWl0ICgwLCBzbWl0aHlfY2xpZW50XzEuY29sbGVjdEJvZHkpKG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuZXhwb3J0cy5kZV9Mb2dvdXRDb21tYW5kID0gZGVfTG9nb3V0Q29tbWFuZDtcbmNvbnN0IGRlX0xvZ291dENvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc28jSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJUb29NYW55UmVxdWVzdHNFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3NvI1VuYXV0aG9yaXplZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCB0aHJvd0RlZmF1bHRFcnJvciA9ICgwLCBzbWl0aHlfY2xpZW50XzEud2l0aEJhc2VFeGNlcHRpb24pKFNTT1NlcnZpY2VFeGNlcHRpb25fMS5TU09TZXJ2aWNlRXhjZXB0aW9uKTtcbmNvbnN0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9Ub29NYW55UmVxdWVzdHNFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX1VuYXV0aG9yaXplZEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuVW5hdXRob3JpemVkRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVzZXJpYWxpemVNZXRhZGF0YSA9IChvdXRwdXQpID0+ICh7XG4gICAgaHR0cFN0YXR1c0NvZGU6IG91dHB1dC5zdGF0dXNDb2RlLFxuICAgIHJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdGlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3QtaWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1yZXF1ZXN0LWlkXCJdLFxuICAgIGV4dGVuZGVkUmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWlkLTJcIl0sXG4gICAgY2ZJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1jZi1pZFwiXSxcbn0pO1xuY29uc3QgY29sbGVjdEJvZHlTdHJpbmcgPSAoc3RyZWFtQm9keSwgY29udGV4dCkgPT4gKDAsIHNtaXRoeV9jbGllbnRfMS5jb2xsZWN0Qm9keSkoc3RyZWFtQm9keSwgY29udGV4dCkudGhlbigoYm9keSkgPT4gY29udGV4dC51dGY4RW5jb2Rlcihib2R5KSk7XG5jb25zdCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB2YWx1ZSAhPT0gXCJcIiAmJlxuICAgICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpLmluY2x1ZGVzKFwibGVuZ3RoXCIpIHx8IHZhbHVlLmxlbmd0aCAhPSAwKSAmJlxuICAgICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpLmluY2x1ZGVzKFwic2l6ZVwiKSB8fCB2YWx1ZS5zaXplICE9IDApO1xuY29uc3QgcGFyc2VCb2R5ID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5U3RyaW5nKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGVuY29kZWQpID0+IHtcbiAgICBpZiAoZW5jb2RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZW5jb2RlZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn0pO1xuY29uc3QgcGFyc2VFcnJvckJvZHkgPSBhc3luYyAoZXJyb3JCb2R5LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYXJzZUJvZHkoZXJyb3JCb2R5LCBjb250ZXh0KTtcbiAgICB2YWx1ZS5tZXNzYWdlID0gdmFsdWUubWVzc2FnZSA/PyB2YWx1ZS5NZXNzYWdlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBsb2FkUmVzdEpzb25FcnJvckNvZGUgPSAob3V0cHV0LCBkYXRhKSA9PiB7XG4gICAgY29uc3QgZmluZEtleSA9IChvYmplY3QsIGtleSkgPT4gT2JqZWN0LmtleXMob2JqZWN0KS5maW5kKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBzYW5pdGl6ZUVycm9yQ29kZSA9IChyYXdWYWx1ZSkgPT4ge1xuICAgICAgICBsZXQgY2xlYW5WYWx1ZSA9IHJhd1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFuVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIixcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIsXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCI6XCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiOlwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiI1wiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIiNcIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsZWFuVmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJLZXkgPSBmaW5kS2V5KG91dHB1dC5oZWFkZXJzLCBcIngtYW16bi1lcnJvcnR5cGVcIik7XG4gICAgaWYgKGhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShvdXRwdXQuaGVhZGVyc1toZWFkZXJLZXldKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhLmNvZGUpO1xuICAgIH1cbiAgICBpZiAoZGF0YVtcIl9fdHlwZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhW1wiX190eXBlXCJdKTtcbiAgICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBbdHlwZXNfMS5TTUlUSFlfQ09OVEVYVF9LRVldOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZTogXCJTV0JQb3J0YWxTZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBcIkdldFJvbGVDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5zZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5kZV9HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCA9IEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIExpc3RBY2NvdW50Um9sZXNDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIExpc3RBY2NvdW50Um9sZXNDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJMaXN0QWNjb3VudFJvbGVzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkxpc3RBY2NvdW50Um9sZXNSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIFt0eXBlc18xLlNNSVRIWV9DT05URVhUX0tFWV06IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBcIlNXQlBvcnRhbFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiTGlzdEFjY291bnRSb2xlc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5zZV9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfTGlzdEFjY291bnRSb2xlc0NvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IExpc3RBY2NvdW50Um9sZXNDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTGlzdEFjY291bnRzQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIExpc3RBY2NvdW50c0NvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgTGlzdEFjY291bnRzQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiTGlzdEFjY291bnRzQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkxpc3RBY2NvdW50c1JlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgW3R5cGVzXzEuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IFwiU1dCUG9ydGFsU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJMaXN0QWNjb3VudHNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfTGlzdEFjY291bnRzQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfTGlzdEFjY291bnRzQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxpc3RBY2NvdW50c0NvbW1hbmQgPSBMaXN0QWNjb3VudHNDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nb3V0Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIExvZ291dENvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgTG9nb3V0Q29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiTG9nb3V0Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkxvZ291dFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgW3R5cGVzXzEuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IFwiU1dCUG9ydGFsU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJMb2dvdXRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfTG9nb3V0Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfTG9nb3V0Q29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxvZ291dENvbW1hbmQgPSBMb2dvdXRDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldFJvbGVDcmVkZW50aWFsc0NvbW1hbmRcIik7XG5jb25zdCBMaXN0QWNjb3VudFJvbGVzQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvTGlzdEFjY291bnRSb2xlc0NvbW1hbmRcIik7XG5jb25zdCBMaXN0QWNjb3VudHNDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9MaXN0QWNjb3VudHNDb21tYW5kXCIpO1xuY29uc3QgTG9nb3V0Q29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvTG9nb3V0Q29tbWFuZFwiKTtcbmNvbnN0IFNTT0NsaWVudF8xID0gcmVxdWlyZShcIi4vU1NPQ2xpZW50XCIpO1xuY29uc3QgY29tbWFuZHMgPSB7XG4gICAgR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZDogR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZF8xLkdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQsXG4gICAgTGlzdEFjY291bnRSb2xlc0NvbW1hbmQ6IExpc3RBY2NvdW50Um9sZXNDb21tYW5kXzEuTGlzdEFjY291bnRSb2xlc0NvbW1hbmQsXG4gICAgTGlzdEFjY291bnRzQ29tbWFuZDogTGlzdEFjY291bnRzQ29tbWFuZF8xLkxpc3RBY2NvdW50c0NvbW1hbmQsXG4gICAgTG9nb3V0Q29tbWFuZDogTG9nb3V0Q29tbWFuZF8xLkxvZ291dENvbW1hbmQsXG59O1xuY2xhc3MgU1NPIGV4dGVuZHMgU1NPQ2xpZW50XzEuU1NPQ2xpZW50IHtcbn1cbmV4cG9ydHMuU1NPID0gU1NPO1xuKDAsIHNtaXRoeV9jbGllbnRfMS5jcmVhdGVBZ2dyZWdhdGVkQ2xpZW50KShjb21tYW5kcywgU1NPKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9MaXN0QWNjb3VudFJvbGVzQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9MaXN0QWNjb3VudHNDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xvZ291dENvbW1hbmRcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhZ2luYXRlTGlzdEFjY291bnRSb2xlcyA9IHZvaWQgMDtcbmNvbnN0IExpc3RBY2NvdW50Um9sZXNDb21tYW5kXzEgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTGlzdEFjY291bnRSb2xlc0NvbW1hbmRcIik7XG5jb25zdCBTU09DbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9TU09DbGllbnRcIik7XG5jb25zdCBtYWtlUGFnZWRDbGllbnRSZXF1ZXN0ID0gYXN5bmMgKGNsaWVudCwgaW5wdXQsIC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNlbmQobmV3IExpc3RBY2NvdW50Um9sZXNDb21tYW5kXzEuTGlzdEFjY291bnRSb2xlc0NvbW1hbmQoaW5wdXQpLCAuLi5hcmdzKTtcbn07XG5hc3luYyBmdW5jdGlvbiogcGFnaW5hdGVMaXN0QWNjb3VudFJvbGVzKGNvbmZpZywgaW5wdXQsIC4uLmFkZGl0aW9uYWxBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBjb25maWcuc3RhcnRpbmdUb2tlbiB8fCB1bmRlZmluZWQ7XG4gICAgbGV0IGhhc05leHQgPSB0cnVlO1xuICAgIGxldCBwYWdlO1xuICAgIHdoaWxlIChoYXNOZXh0KSB7XG4gICAgICAgIGlucHV0Lm5leHRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpbnB1dFtcIm1heFJlc3VsdHNcIl0gPSBjb25maWcucGFnZVNpemU7XG4gICAgICAgIGlmIChjb25maWcuY2xpZW50IGluc3RhbmNlb2YgU1NPQ2xpZW50XzEuU1NPQ2xpZW50KSB7XG4gICAgICAgICAgICBwYWdlID0gYXdhaXQgbWFrZVBhZ2VkQ2xpZW50UmVxdWVzdChjb25maWcuY2xpZW50LCBpbnB1dCwgLi4uYWRkaXRpb25hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNsaWVudCwgZXhwZWN0ZWQgU1NPIHwgU1NPQ2xpZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkIHBhZ2U7XG4gICAgICAgIGNvbnN0IHByZXZUb2tlbiA9IHRva2VuO1xuICAgICAgICB0b2tlbiA9IHBhZ2UubmV4dFRva2VuO1xuICAgICAgICBoYXNOZXh0ID0gISEodG9rZW4gJiYgKCFjb25maWcuc3RvcE9uU2FtZVRva2VuIHx8IHRva2VuICE9PSBwcmV2VG9rZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucGFnaW5hdGVMaXN0QWNjb3VudFJvbGVzID0gcGFnaW5hdGVMaXN0QWNjb3VudFJvbGVzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFnaW5hdGVMaXN0QWNjb3VudHMgPSB2b2lkIDA7XG5jb25zdCBMaXN0QWNjb3VudHNDb21tYW5kXzEgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTGlzdEFjY291bnRzQ29tbWFuZFwiKTtcbmNvbnN0IFNTT0NsaWVudF8xID0gcmVxdWlyZShcIi4uL1NTT0NsaWVudFwiKTtcbmNvbnN0IG1ha2VQYWdlZENsaWVudFJlcXVlc3QgPSBhc3luYyAoY2xpZW50LCBpbnB1dCwgLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2VuZChuZXcgTGlzdEFjY291bnRzQ29tbWFuZF8xLkxpc3RBY2NvdW50c0NvbW1hbmQoaW5wdXQpLCAuLi5hcmdzKTtcbn07XG5hc3luYyBmdW5jdGlvbiogcGFnaW5hdGVMaXN0QWNjb3VudHMoY29uZmlnLCBpbnB1dCwgLi4uYWRkaXRpb25hbEFyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IGNvbmZpZy5zdGFydGluZ1Rva2VuIHx8IHVuZGVmaW5lZDtcbiAgICBsZXQgaGFzTmV4dCA9IHRydWU7XG4gICAgbGV0IHBhZ2U7XG4gICAgd2hpbGUgKGhhc05leHQpIHtcbiAgICAgICAgaW5wdXQubmV4dFRva2VuID0gdG9rZW47XG4gICAgICAgIGlucHV0W1wibWF4UmVzdWx0c1wiXSA9IGNvbmZpZy5wYWdlU2l6ZTtcbiAgICAgICAgaWYgKGNvbmZpZy5jbGllbnQgaW5zdGFuY2VvZiBTU09DbGllbnRfMS5TU09DbGllbnQpIHtcbiAgICAgICAgICAgIHBhZ2UgPSBhd2FpdCBtYWtlUGFnZWRDbGllbnRSZXF1ZXN0KGNvbmZpZy5jbGllbnQsIGlucHV0LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2xpZW50LCBleHBlY3RlZCBTU08gfCBTU09DbGllbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQgcGFnZTtcbiAgICAgICAgY29uc3QgcHJldlRva2VuID0gdG9rZW47XG4gICAgICAgIHRva2VuID0gcGFnZS5uZXh0VG9rZW47XG4gICAgICAgIGhhc05leHQgPSAhISh0b2tlbiAmJiAoIWNvbmZpZy5zdG9wT25TYW1lVG9rZW4gfHwgdG9rZW4gIT09IHByZXZUb2tlbikpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5wYWdpbmF0ZUxpc3RBY2NvdW50cyA9IHBhZ2luYXRlTGlzdEFjY291bnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9JbnRlcmZhY2VzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0xpc3RBY2NvdW50Um9sZXNQYWdpbmF0b3JcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vTGlzdEFjY291bnRzUGFnaW5hdG9yXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbW9kZWxzXzBcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1NPU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TU09DbGllbnRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU1NPXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhZ2luYXRpb25cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbW9kZWxzXCIpLCBleHBvcnRzKTtcbnZhciBTU09TZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi9tb2RlbHMvU1NPU2VydmljZUV4Y2VwdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNTT1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNTT1NlcnZpY2VFeGNlcHRpb25fMS5TU09TZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb24gPSBleHBvcnRzLlVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvbiA9IGV4cG9ydHMuU2xvd0Rvd25FeGNlcHRpb24gPSBleHBvcnRzLlNTT09JRENDbGllbnQgPSBleHBvcnRzLkludmFsaWRTY29wZUV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gPSBleHBvcnRzLkludmFsaWRDbGllbnRFeGNlcHRpb24gPSBleHBvcnRzLkludGVybmFsU2VydmVyRXhjZXB0aW9uID0gZXhwb3J0cy5FeHBpcmVkVG9rZW5FeGNlcHRpb24gPSBleHBvcnRzLkNyZWF0ZVRva2VuQ29tbWFuZCA9IGV4cG9ydHMuQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24gPSBleHBvcnRzLkFjY2Vzc0RlbmllZEV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9sb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvblwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudFwiKTtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9jb250ZW50X2xlbmd0aF8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1jb250ZW50LWxlbmd0aFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JldHJ5XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5XCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbnZhciByZXNvbHZlQ2xpZW50RW5kcG9pbnRQYXJhbWV0ZXJzID0gKG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiAoX2EgPSBvcHRpb25zLnVzZUR1YWxzdGFja0VuZHBvaW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiAoX2IgPSBvcHRpb25zLnVzZUZpcHNFbmRwb2ludCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHRTaWduaW5nTmFtZTogXCJhd3Nzc29vaWRjXCJcbiAgICB9O1xufTtcbnZhciBwYWNrYWdlX2RlZmF1bHQgPSB7IHZlcnNpb246IFwiMy4zODcuMFwiIH07XG5jb25zdCB1dGlsX3VzZXJfYWdlbnRfbm9kZV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlXCIpO1xuY29uc3QgY29uZmlnX3Jlc29sdmVyXzIgPSByZXF1aXJlKFwiQHNtaXRoeS9jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBoYXNoX25vZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L2hhc2gtbm9kZVwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMiA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBub2RlX2NvbmZpZ19wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXJcIik7XG5jb25zdCBub2RlX2h0dHBfaGFuZGxlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXJcIik7XG5jb25zdCB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtYm9keS1sZW5ndGgtbm9kZVwiKTtcbmNvbnN0IHV0aWxfcmV0cnlfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtcmV0cnlcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzIgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgdXJsX3BhcnNlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXJsLXBhcnNlclwiKTtcbmNvbnN0IHV0aWxfYmFzZTY0XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJhc2U2NFwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC11dGY4XCIpO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbnZhciBwID0gXCJyZXF1aXJlZFwiO1xudmFyIHEgPSBcImZuXCI7XG52YXIgciA9IFwiYXJndlwiO1xudmFyIHMgPSBcInJlZlwiO1xudmFyIGEgPSBcIlBhcnRpdGlvblJlc3VsdFwiO1xudmFyIGIgPSBcInRyZWVcIjtcbnZhciBjID0gXCJlcnJvclwiO1xudmFyIGQgPSBcImVuZHBvaW50XCI7XG52YXIgZSA9IHsgW3BdOiBmYWxzZSwgXCJ0eXBlXCI6IFwiU3RyaW5nXCIgfTtcbnZhciBmID0geyBbcF06IHRydWUsIFwiZGVmYXVsdFwiOiBmYWxzZSwgXCJ0eXBlXCI6IFwiQm9vbGVhblwiIH07XG52YXIgZyA9IHsgW3NdOiBcIkVuZHBvaW50XCIgfTtcbnZhciBoID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt7IFtzXTogXCJVc2VGSVBTXCIgfSwgdHJ1ZV0gfTtcbnZhciBpID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt7IFtzXTogXCJVc2VEdWFsU3RhY2tcIiB9LCB0cnVlXSB9O1xudmFyIGogPSB7fTtcbnZhciBrID0geyBbcV06IFwiYm9vbGVhbkVxdWFsc1wiLCBbcl06IFt0cnVlLCB7IFtxXTogXCJnZXRBdHRyXCIsIFtyXTogW3sgW3NdOiBhIH0sIFwic3VwcG9ydHNGSVBTXCJdIH1dIH07XG52YXIgbCA9IHsgW3FdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3JdOiBbdHJ1ZSwgeyBbcV06IFwiZ2V0QXR0clwiLCBbcl06IFt7IFtzXTogYSB9LCBcInN1cHBvcnRzRHVhbFN0YWNrXCJdIH1dIH07XG52YXIgbSA9IFtnXTtcbnZhciBuID0gW2hdO1xudmFyIG8gPSBbaV07XG52YXIgX2RhdGEgPSB7IHZlcnNpb246IFwiMS4wXCIsIHBhcmFtZXRlcnM6IHsgUmVnaW9uOiBlLCBVc2VEdWFsU3RhY2s6IGYsIFVzZUZJUFM6IGYsIEVuZHBvaW50OiBlIH0sIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbcV06IFwiYXdzLnBhcnRpdGlvblwiLCBbcl06IFt7IFtzXTogXCJSZWdpb25cIiB9XSwgYXNzaWduOiBhIH1dLCB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3FdOiBcImlzU2V0XCIsIFtyXTogbSB9LCB7IFtxXTogXCJwYXJzZVVSTFwiLCBbcl06IG0sIGFzc2lnbjogXCJ1cmxcIiB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IG4sIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIHR5cGU6IGMgfSwgeyB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogbywgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBjIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBnLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBjb25kaXRpb25zOiBbaCwgaV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbaywgbF0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9vaWRjLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkZJUFMgYW5kIER1YWxTdGFjayBhcmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgb25lIG9yIGJvdGhcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IG4sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBba10sIHR5cGU6IGIsIHJ1bGVzOiBbeyB0eXBlOiBiLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vb2lkYy1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBqLCBoZWFkZXJzOiBqIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBlcnJvcjogXCJGSVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRklQU1wiLCB0eXBlOiBjIH1dIH0sIHsgY29uZGl0aW9uczogbywgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtsXSwgdHlwZTogYiwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL29pZGMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGosIGhlYWRlcnM6IGogfSwgdHlwZTogZCB9XSB9LCB7IGVycm9yOiBcIkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFja1wiLCB0eXBlOiBjIH1dIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vb2lkYy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaiwgaGVhZGVyczogaiB9LCB0eXBlOiBkIH1dIH1dIH07XG52YXIgcnVsZVNldCA9IF9kYXRhO1xudmFyIGRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gKGVuZHBvaW50UGFyYW1zLCBjb250ZXh0ID0ge30pID0+IHtcbiAgICByZXR1cm4gKDAsIHV0aWxfZW5kcG9pbnRzXzEucmVzb2x2ZUVuZHBvaW50KShydWxlU2V0LCB7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zLFxuICAgICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyXG4gICAgfSk7XG59O1xudmFyIGdldFJ1bnRpbWVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2o7XG4gICAgcmV0dXJuICh7XG4gICAgICAgIGFwaVZlcnNpb246IFwiMjAxOS0wNi0xMFwiLFxuICAgICAgICBiYXNlNjREZWNvZGVyOiAoX2EgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuYmFzZTY0RGVjb2RlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdXRpbF9iYXNlNjRfMS5mcm9tQmFzZTY0LFxuICAgICAgICBiYXNlNjRFbmNvZGVyOiAoX2IgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuYmFzZTY0RW5jb2RlcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdXRpbF9iYXNlNjRfMS50b0Jhc2U2NCxcbiAgICAgICAgZGlzYWJsZUhvc3RQcmVmaXg6IChfYyA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5kaXNhYmxlSG9zdFByZWZpeCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UsXG4gICAgICAgIGVuZHBvaW50UHJvdmlkZXI6IChfZCA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5lbmRwb2ludFByb3ZpZGVyKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlcixcbiAgICAgICAgbG9nZ2VyOiAoX2UgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcubG9nZ2VyKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBuZXcgc21pdGh5X2NsaWVudF8yLk5vT3BMb2dnZXIoKSxcbiAgICAgICAgc2VydmljZUlkOiAoX2YgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuc2VydmljZUlkKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBcIlNTTyBPSURDXCIsXG4gICAgICAgIHVybFBhcnNlcjogKF9nID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLnVybFBhcnNlcikgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogdXJsX3BhcnNlcl8xLnBhcnNlVXJsLFxuICAgICAgICB1dGY4RGVjb2RlcjogKF9oID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLnV0ZjhEZWNvZGVyKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiB1dGlsX3V0ZjhfMS5mcm9tVXRmOCxcbiAgICAgICAgdXRmOEVuY29kZXI6IChfaiA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy51dGY4RW5jb2RlcikgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogdXRpbF91dGY4XzEudG9VdGY4XG4gICAgfSk7XG59O1xuY29uc3Qgc21pdGh5X2NsaWVudF8zID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfNCA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG52YXIgZ2V0UnVudGltZUNvbmZpZzIgPSAoY29uZmlnKSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rO1xuICAgICgwLCBzbWl0aHlfY2xpZW50XzQuZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbikocHJvY2Vzcy52ZXJzaW9uKTtcbiAgICBjb25zdCBkZWZhdWx0c01vZGUgPSAoMCwgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMS5yZXNvbHZlRGVmYXVsdHNNb2RlQ29uZmlnKShjb25maWcpO1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWdQcm92aWRlciA9ICgpID0+IGRlZmF1bHRzTW9kZSgpLnRoZW4oc21pdGh5X2NsaWVudF8zLmxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGUpO1xuICAgIGNvbnN0IGNsaWVudFNoYXJlZFZhbHVlcyA9IGdldFJ1bnRpbWVDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5jbGllbnRTaGFyZWRWYWx1ZXMsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgcnVudGltZTogXCJub2RlXCIsXG4gICAgICAgIGRlZmF1bHRzTW9kZSxcbiAgICAgICAgYm9keUxlbmd0aENoZWNrZXI6IChfYSA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5ib2R5TGVuZ3RoQ2hlY2tlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEuY2FsY3VsYXRlQm9keUxlbmd0aCxcbiAgICAgICAgZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyOiAoX2IgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoMCwgdXRpbF91c2VyX2FnZW50X25vZGVfMS5kZWZhdWx0VXNlckFnZW50KSh7IHNlcnZpY2VJZDogY2xpZW50U2hhcmVkVmFsdWVzLnNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbjogcGFja2FnZV9kZWZhdWx0LnZlcnNpb24gfSksXG4gICAgICAgIG1heEF0dGVtcHRzOiAoX2MgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcubWF4QXR0ZW1wdHMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKG1pZGRsZXdhcmVfcmV0cnlfMi5OT0RFX01BWF9BVFRFTVBUX0NPTkZJR19PUFRJT05TKSxcbiAgICAgICAgcmVnaW9uOiAoX2QgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVnaW9uKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMi5OT0RFX1JFR0lPTl9DT05GSUdfT1BUSU9OUywgY29uZmlnX3Jlc29sdmVyXzIuTk9ERV9SRUdJT05fQ09ORklHX0ZJTEVfT1BUSU9OUyksXG4gICAgICAgIHJlcXVlc3RIYW5kbGVyOiAoX2UgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVxdWVzdEhhbmRsZXIpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IG5ldyBub2RlX2h0dHBfaGFuZGxlcl8xLk5vZGVIdHRwSGFuZGxlcihkZWZhdWx0Q29uZmlnUHJvdmlkZXIpLFxuICAgICAgICByZXRyeU1vZGU6IChfZiA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5yZXRyeU1vZGUpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgICAgIC4uLm1pZGRsZXdhcmVfcmV0cnlfMi5OT0RFX1JFVFJZX01PREVfQ09ORklHX09QVElPTlMsXG4gICAgICAgICAgICBkZWZhdWx0OiBhc3luYyAoKSA9PiAoYXdhaXQgZGVmYXVsdENvbmZpZ1Byb3ZpZGVyKCkpLnJldHJ5TW9kZSB8fCB1dGlsX3JldHJ5XzEuREVGQVVMVF9SRVRSWV9NT0RFXG4gICAgICAgIH0pLFxuICAgICAgICBzaGEyNTY6IChfZyA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5zaGEyNTYpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGhhc2hfbm9kZV8xLkhhc2guYmluZChudWxsLCBcInNoYTI1NlwiKSxcbiAgICAgICAgc3RyZWFtQ29sbGVjdG9yOiAoX2ggPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuc3RyZWFtQ29sbGVjdG9yKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiBub2RlX2h0dHBfaGFuZGxlcl8xLnN0cmVhbUNvbGxlY3RvcixcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IChfaiA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy51c2VEdWFsc3RhY2tFbmRwb2ludCkgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzIuTk9ERV9VU0VfRFVBTFNUQUNLX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKSxcbiAgICAgICAgdXNlRmlwc0VuZHBvaW50OiAoX2sgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcudXNlRmlwc0VuZHBvaW50KSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMi5OT0RFX1VTRV9GSVBTX0VORFBPSU5UX0NPTkZJR19PUFRJT05TKVxuICAgIH07XG59O1xudmFyIFNTT09JRENDbGllbnQgPSBjbGFzcyBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5DbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKC4uLltjb25maWd1cmF0aW9uXSkge1xuICAgICAgICBjb25zdCBfY29uZmlnXzAgPSBnZXRSdW50aW1lQ29uZmlnMihjb25maWd1cmF0aW9uIHx8IHt9KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18xID0gcmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycyhfY29uZmlnXzApO1xuICAgICAgICBjb25zdCBfY29uZmlnXzIgPSAoMCwgY29uZmlnX3Jlc29sdmVyXzEucmVzb2x2ZVJlZ2lvbkNvbmZpZykoX2NvbmZpZ18xKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18zID0gKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5yZXNvbHZlRW5kcG9pbnRDb25maWcpKF9jb25maWdfMik7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNCA9ICgwLCBtaWRkbGV3YXJlX3JldHJ5XzEucmVzb2x2ZVJldHJ5Q29uZmlnKShfY29uZmlnXzMpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzUgPSAoMCwgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xLnJlc29sdmVIb3N0SGVhZGVyQ29uZmlnKShfY29uZmlnXzQpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzYgPSAoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEucmVzb2x2ZVVzZXJBZ2VudENvbmZpZykoX2NvbmZpZ181KTtcbiAgICAgICAgc3VwZXIoX2NvbmZpZ182KTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBfY29uZmlnXzY7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9yZXRyeV8xLmdldFJldHJ5UGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMS5nZXRDb250ZW50TGVuZ3RoUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5nZXRIb3N0SGVhZGVyUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfbG9nZ2VyXzEuZ2V0TG9nZ2VyUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xLmdldFJlY3Vyc2lvbkRldGVjdGlvblBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59O1xuZXhwb3J0cy5TU09PSURDQ2xpZW50ID0gU1NPT0lEQ0NsaWVudDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfNSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzIgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfNiA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF83ID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfOCA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG52YXIgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24gPSBjbGFzcyBfU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzguU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9TU09PSURDU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn07XG52YXIgQWNjZXNzRGVuaWVkRXhjZXB0aW9uID0gY2xhc3MgX0FjY2Vzc0RlbmllZEV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiQWNjZXNzRGVuaWVkRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFjY2Vzc0RlbmllZEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfQWNjZXNzRGVuaWVkRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59O1xuZXhwb3J0cy5BY2Nlc3NEZW5pZWRFeGNlcHRpb24gPSBBY2Nlc3NEZW5pZWRFeGNlcHRpb247XG52YXIgQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24gPSBjbGFzcyBfQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24gZXh0ZW5kcyBTU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkF1dGhvcml6YXRpb25QZW5kaW5nRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkF1dGhvcml6YXRpb25QZW5kaW5nRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9BdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufTtcbmV4cG9ydHMuQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24gPSBBdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvbjtcbnZhciBFeHBpcmVkVG9rZW5FeGNlcHRpb24gPSBjbGFzcyBfRXhwaXJlZFRva2VuRXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJFeHBpcmVkVG9rZW5FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9FeHBpcmVkVG9rZW5FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn07XG5leHBvcnRzLkV4cGlyZWRUb2tlbkV4Y2VwdGlvbiA9IEV4cGlyZWRUb2tlbkV4Y2VwdGlvbjtcbnZhciBJbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiA9IGNsYXNzIF9JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJzZXJ2ZXJcIixcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcInNlcnZlclwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgX0ludGVybmFsU2VydmVyRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59O1xuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiA9IEludGVybmFsU2VydmVyRXhjZXB0aW9uO1xudmFyIEludmFsaWRDbGllbnRFeGNlcHRpb24gPSBjbGFzcyBfSW52YWxpZENsaWVudEV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW52YWxpZENsaWVudEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0c1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkQ2xpZW50RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9JbnZhbGlkQ2xpZW50RXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59O1xuZXhwb3J0cy5JbnZhbGlkQ2xpZW50RXhjZXB0aW9uID0gSW52YWxpZENsaWVudEV4Y2VwdGlvbjtcbnZhciBJbnZhbGlkR3JhbnRFeGNlcHRpb24gPSBjbGFzcyBfSW52YWxpZEdyYW50RXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkR3JhbnRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW52YWxpZEdyYW50RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9JbnZhbGlkR3JhbnRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn07XG52YXIgSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gPSBjbGFzcyBfSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBTU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufTtcbmV4cG9ydHMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gPSBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbjtcbnZhciBJbnZhbGlkU2NvcGVFeGNlcHRpb24gPSBjbGFzcyBfSW52YWxpZFNjb3BlRXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkU2NvcGVFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW52YWxpZFNjb3BlRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9JbnZhbGlkU2NvcGVFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn07XG5leHBvcnRzLkludmFsaWRTY29wZUV4Y2VwdGlvbiA9IEludmFsaWRTY29wZUV4Y2VwdGlvbjtcbnZhciBTbG93RG93bkV4Y2VwdGlvbiA9IGNsYXNzIF9TbG93RG93bkV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiU2xvd0Rvd25FeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU2xvd0Rvd25FeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgX1Nsb3dEb3duRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59O1xuZXhwb3J0cy5TbG93RG93bkV4Y2VwdGlvbiA9IFNsb3dEb3duRXhjZXB0aW9uO1xudmFyIFVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvbiA9IGNsYXNzIF9VbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb24gZXh0ZW5kcyBTU09PSURDU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0c1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJVbmF1dGhvcml6ZWRDbGllbnRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgX1VuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLmVycm9yID0gb3B0cy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IG9wdHMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgfVxufTtcbmV4cG9ydHMuVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uID0gVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uO1xudmFyIFVuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uID0gY2xhc3MgX1Vuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uIGV4dGVuZHMgU1NPT0lEQ1NlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0c1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG9wdHMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvcHRzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgIH1cbn07XG5leHBvcnRzLlVuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uID0gVW5zdXBwb3J0ZWRHcmFudFR5cGVFeGNlcHRpb247XG52YXIgSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uID0gY2xhc3MgX0ludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvbiBleHRlbmRzIFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gb3B0cy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICB9XG59O1xudmFyIHNlX0NyZWF0ZVRva2VuQ29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHsoYmFzZVBhdGggPT09IG51bGwgfHwgYmFzZVBhdGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJhc2VQYXRoLmVuZHNXaXRoKFwiL1wiKSkgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifS90b2tlbmA7XG4gICAgbGV0IGJvZHk7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KCgwLCBzbWl0aHlfY2xpZW50XzcudGFrZSkoaW5wdXQsIHtcbiAgICAgICAgY2xpZW50SWQ6IFtdLFxuICAgICAgICBjbGllbnRTZWNyZXQ6IFtdLFxuICAgICAgICBjb2RlOiBbXSxcbiAgICAgICAgZGV2aWNlQ29kZTogW10sXG4gICAgICAgIGdyYW50VHlwZTogW10sXG4gICAgICAgIHJlZGlyZWN0VXJpOiBbXSxcbiAgICAgICAgcmVmcmVzaFRva2VuOiBbXSxcbiAgICAgICAgc2NvcGU6IChfKSA9PiAoMCwgc21pdGh5X2NsaWVudF83Ll9qc29uKShfKVxuICAgIH0pKTtcbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBib2R5XG4gICAgfSk7XG59O1xudmFyIHNlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZCA9IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sID0gXCJodHRwc1wiLCBwb3J0LCBwYXRoOiBiYXNlUGF0aCB9ID0gYXdhaXQgY29udGV4dC5lbmRwb2ludCgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBgJHsoYmFzZVBhdGggPT09IG51bGwgfHwgYmFzZVBhdGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJhc2VQYXRoLmVuZHNXaXRoKFwiL1wiKSkgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifS9jbGllbnQvcmVnaXN0ZXJgO1xuICAgIGxldCBib2R5O1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeSgoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGlucHV0LCB7XG4gICAgICAgIGNsaWVudE5hbWU6IFtdLFxuICAgICAgICBjbGllbnRUeXBlOiBbXSxcbiAgICAgICAgc2NvcGVzOiAoXykgPT4gKDAsIHNtaXRoeV9jbGllbnRfNy5fanNvbikoXylcbiAgICB9KSk7XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgYm9keVxuICAgIH0pO1xufTtcbnZhciBzZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICB9O1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGAkeyhiYXNlUGF0aCA9PT0gbnVsbCB8fCBiYXNlUGF0aCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9L2RldmljZV9hdXRob3JpemF0aW9uYDtcbiAgICBsZXQgYm9keTtcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShpbnB1dCwge1xuICAgICAgICBjbGllbnRJZDogW10sXG4gICAgICAgIGNsaWVudFNlY3JldDogW10sXG4gICAgICAgIHN0YXJ0VXJsOiBbXVxuICAgIH0pKTtcbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBib2R5XG4gICAgfSk7XG59O1xudmFyIGRlX0NyZWF0ZVRva2VuQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiBvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0NyZWF0ZVRva2VuQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dClcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gKDAsIHNtaXRoeV9jbGllbnRfNy5leHBlY3ROb25OdWxsKSgoMCwgc21pdGh5X2NsaWVudF83LmV4cGVjdE9iamVjdCkoYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSksIFwiYm9keVwiKTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGRhdGEsIHtcbiAgICAgICAgYWNjZXNzVG9rZW46IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGV4cGlyZXNJbjogc21pdGh5X2NsaWVudF83LmV4cGVjdEludDMyLFxuICAgICAgICBpZFRva2VuOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICByZWZyZXNoVG9rZW46IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIHRva2VuVHlwZTogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbnZhciBkZV9DcmVhdGVUb2tlbkNvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpXG4gICAgfTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBsb2FkUmVzdEpzb25FcnJvckNvZGUob3V0cHV0LCBwYXJzZWRPdXRwdXQuYm9keSk7XG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkFjY2Vzc0RlbmllZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0FjY2Vzc0RlbmllZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfQWNjZXNzRGVuaWVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJBdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0F1dGhvcml6YXRpb25QZW5kaW5nRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9BdXRob3JpemF0aW9uUGVuZGluZ0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjRXhwaXJlZFRva2VuRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9FeHBpcmVkVG9rZW5FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkQ2xpZW50RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZENsaWVudEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZEdyYW50RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZEdyYW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkR3JhbnRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkU2NvcGVFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnZhbGlkU2NvcGVFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX0ludmFsaWRTY29wZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiU2xvd0Rvd25FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNTbG93RG93bkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfU2xvd0Rvd25FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI1VuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJVbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI1Vuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9VbnN1cHBvcnRlZEdyYW50VHlwZUV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RGVmYXVsdEVycm9yKHtcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgcGFyc2VkQm9keSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGVcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG52YXIgZGVfUmVnaXN0ZXJDbGllbnRDb21tYW5kID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuc3RhdHVzQ29kZSAhPT0gMjAwICYmIG91dHB1dC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICByZXR1cm4gZGVfUmVnaXN0ZXJDbGllbnRDb21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KVxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSAoMCwgc21pdGh5X2NsaWVudF83LmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzcuZXhwZWN0T2JqZWN0KShhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpKSwgXCJib2R5XCIpO1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzcudGFrZSkoZGF0YSwge1xuICAgICAgICBhdXRob3JpemF0aW9uRW5kcG9pbnQ6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGNsaWVudElkOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBjbGllbnRJZElzc3VlZEF0OiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0TG9uZyxcbiAgICAgICAgY2xpZW50U2VjcmV0OiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBjbGllbnRTZWNyZXRFeHBpcmVzQXQ6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RMb25nLFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xudmFyIGRlX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dClcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnRlcm5hbFNlcnZlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0ludmFsaWRDbGllbnRNZXRhZGF0YUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiSW52YWxpZFNjb3BlRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLnNzb29pZGMjSW52YWxpZFNjb3BlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkU2NvcGVFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0RlZmF1bHRFcnJvcih7XG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHBhcnNlZEJvZHksXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlXG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xudmFyIGRlX1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlICE9PSAyMDAgJiYgb3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kRXJyb3Iob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KVxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSAoMCwgc21pdGh5X2NsaWVudF83LmV4cGVjdE5vbk51bGwpKCgwLCBzbWl0aHlfY2xpZW50XzcuZXhwZWN0T2JqZWN0KShhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpKSwgXCJib2R5XCIpO1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzcudGFrZSkoZGF0YSwge1xuICAgICAgICBkZXZpY2VDb2RlOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBleHBpcmVzSW46IHNtaXRoeV9jbGllbnRfNy5leHBlY3RJbnQzMixcbiAgICAgICAgaW50ZXJ2YWw6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RJbnQzMixcbiAgICAgICAgdXNlckNvZGU6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIHZlcmlmaWNhdGlvblVyaTogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZyxcbiAgICAgICAgdmVyaWZpY2F0aW9uVXJpQ29tcGxldGU6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmdcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIHJldHVybiBjb250ZW50cztcbn07XG52YXIgZGVfU3RhcnREZXZpY2VBdXRob3JpemF0aW9uQ29tbWFuZEVycm9yID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUVycm9yQm9keShvdXRwdXQuYm9keSwgY29udGV4dClcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnRlcm5hbFNlcnZlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludmFsaWRDbGllbnRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNJbnZhbGlkQ2xpZW50RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkQ2xpZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiU2xvd0Rvd25FeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3Muc3Nvb2lkYyNTbG93RG93bkV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfU2xvd0Rvd25FeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5zc29vaWRjI1VuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZVxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcbnZhciB0aHJvd0RlZmF1bHRFcnJvciA9ICgwLCBzbWl0aHlfY2xpZW50Xzcud2l0aEJhc2VFeGNlcHRpb24pKFNTT09JRENTZXJ2aWNlRXhjZXB0aW9uKTtcbnZhciBkZV9BY2Nlc3NEZW5pZWRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgQWNjZXNzRGVuaWVkRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzcuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG52YXIgZGVfQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgQXV0aG9yaXphdGlvblBlbmRpbmdFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHNcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfNy5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbnZhciBkZV9FeHBpcmVkVG9rZW5FeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgRXhwaXJlZFRva2VuRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzcuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG52YXIgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHNcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfNy5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbnZhciBkZV9JbnZhbGlkQ2xpZW50RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IEludmFsaWRDbGllbnRFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHNcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfNy5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbnZhciBkZV9JbnZhbGlkQ2xpZW50TWV0YWRhdGFFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF83Lm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF83LnRha2UpKGRhdGEsIHtcbiAgICAgICAgZXJyb3I6IHNtaXRoeV9jbGllbnRfNy5leHBlY3RTdHJpbmcsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgSW52YWxpZENsaWVudE1ldGFkYXRhRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzcuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG52YXIgZGVfSW52YWxpZEdyYW50RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IEludmFsaWRHcmFudEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50c1xuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF83LmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xudmFyIGRlX0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IEludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzcuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG52YXIgZGVfSW52YWxpZFNjb3BlRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IEludmFsaWRTY29wZUV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50c1xuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF83LmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xudmFyIGRlX1Nsb3dEb3duRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IFNsb3dEb3duRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzcuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG52YXIgZGVfVW5hdXRob3JpemVkQ2xpZW50RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IFVuYXV0aG9yaXplZENsaWVudEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50c1xuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF83LmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xudmFyIGRlX1Vuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfNy5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfNy50YWtlKShkYXRhLCB7XG4gICAgICAgIGVycm9yOiBzbWl0aHlfY2xpZW50XzcuZXhwZWN0U3RyaW5nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogc21pdGh5X2NsaWVudF83LmV4cGVjdFN0cmluZ1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IFVuc3VwcG9ydGVkR3JhbnRUeXBlRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzcuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG52YXIgZGVzZXJpYWxpemVNZXRhZGF0YSA9IChvdXRwdXQpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoe1xuICAgICAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgICAgIHJlcXVlc3RJZDogKF9iID0gKF9hID0gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdGlkXCJdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0LWlkXCJdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LXJlcXVlc3QtaWRcIl0sXG4gICAgICAgIGV4dGVuZGVkUmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWlkLTJcIl0sXG4gICAgICAgIGNmSWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotY2YtaWRcIl1cbiAgICB9KTtcbn07XG52YXIgY29sbGVjdEJvZHlTdHJpbmcgPSAoc3RyZWFtQm9keSwgY29udGV4dCkgPT4gKDAsIHNtaXRoeV9jbGllbnRfNy5jb2xsZWN0Qm9keSkoc3RyZWFtQm9keSwgY29udGV4dCkudGhlbigoYm9keSkgPT4gY29udGV4dC51dGY4RW5jb2Rlcihib2R5KSk7XG52YXIgcGFyc2VCb2R5ID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5U3RyaW5nKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGVuY29kZWQpID0+IHtcbiAgICBpZiAoZW5jb2RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZW5jb2RlZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn0pO1xudmFyIHBhcnNlRXJyb3JCb2R5ID0gYXN5bmMgKGVycm9yQm9keSwgY29udGV4dCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhcnNlQm9keShlcnJvckJvZHksIGNvbnRleHQpO1xuICAgIHZhbHVlLm1lc3NhZ2UgPSAoX2EgPSB2YWx1ZS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5NZXNzYWdlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG52YXIgbG9hZFJlc3RKc29uRXJyb3JDb2RlID0gKG91dHB1dCwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGZpbmRLZXkgPSAob2JqZWN0LCBrZXkpID0+IE9iamVjdC5rZXlzKG9iamVjdCkuZmluZCgoazIpID0+IGsyLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBzYW5pdGl6ZUVycm9yQ29kZSA9IChyYXdWYWx1ZSkgPT4ge1xuICAgICAgICBsZXQgY2xlYW5WYWx1ZSA9IHJhd1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFuVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIixcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIsXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCI6XCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiOlwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiI1wiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIiNcIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsZWFuVmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJLZXkgPSBmaW5kS2V5KG91dHB1dC5oZWFkZXJzLCBcIngtYW16bi1lcnJvcnR5cGVcIik7XG4gICAgaWYgKGhlYWRlcktleSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShvdXRwdXQuaGVhZGVyc1toZWFkZXJLZXldKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY29kZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhLmNvZGUpO1xuICAgIH1cbiAgICBpZiAoZGF0YVtcIl9fdHlwZVwiXSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZUVycm9yQ29kZShkYXRhW1wiX190eXBlXCJdKTtcbiAgICB9XG59O1xudmFyIENyZWF0ZVRva2VuQ29tbWFuZCA9IGNsYXNzIF9DcmVhdGVUb2tlbkNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzYuQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8yLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBfQ3JlYXRlVG9rZW5Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1NPT0lEQ0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiQ3JlYXRlVG9rZW5Db21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gX1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBzZV9DcmVhdGVUb2tlbkNvbW1hbmQoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGRlX0NyZWF0ZVRva2VuQ29tbWFuZChvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn07XG5leHBvcnRzLkNyZWF0ZVRva2VuQ29tbWFuZCA9IENyZWF0ZVRva2VuQ29tbWFuZDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMyA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzIgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF85ID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbnZhciBSZWdpc3RlckNsaWVudENvbW1hbmQgPSBjbGFzcyBfUmVnaXN0ZXJDbGllbnRDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF85LkNvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8yLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMy5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgX1JlZ2lzdGVyQ2xpZW50Q29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNTT09JRENDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIlJlZ2lzdGVyQ2xpZW50Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF9cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gc2VfUmVnaXN0ZXJDbGllbnRDb21tYW5kKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBkZV9SZWdpc3RlckNsaWVudENvbW1hbmQob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59O1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF80ID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMyA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEwID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbnZhciBTdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kID0gY2xhc3MgX1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEwLkNvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8zLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfNC5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgX1N0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTU09PSURDQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJTdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gX1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBzZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBkZV9TdGFydERldmljZUF1dGhvcml6YXRpb25Db21tYW5kKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufTtcbnZhciBjb21tYW5kcyA9IHtcbiAgICBDcmVhdGVUb2tlbkNvbW1hbmQsXG4gICAgUmVnaXN0ZXJDbGllbnRDb21tYW5kLFxuICAgIFN0YXJ0RGV2aWNlQXV0aG9yaXphdGlvbkNvbW1hbmRcbn07XG52YXIgU1NPT0lEQyA9IGNsYXNzIGV4dGVuZHMgU1NPT0lEQ0NsaWVudCB7XG59O1xuKDAsIHNtaXRoeV9jbGllbnRfNS5jcmVhdGVBZ2dyZWdhdGVkQ2xpZW50KShjb21tYW5kcywgU1NPT0lEQyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SRUZSRVNIX01FU1NBR0UgPSBleHBvcnRzLkVYUElSRV9XSU5ET1dfTVMgPSB2b2lkIDA7XG5leHBvcnRzLkVYUElSRV9XSU5ET1dfTVMgPSA1ICogNjAgKiAxMDAwO1xuZXhwb3J0cy5SRUZSRVNIX01FU1NBR0UgPSBgVG8gcmVmcmVzaCB0aGlzIFNTTyBzZXNzaW9uIHJ1biAnYXdzIHNzbyBsb2dpbicgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9maWxlLmA7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTc29PaWRjQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3Nzb19vaWRjX25vZGVfMSA9IHJlcXVpcmUoXCIuL2J1bmRsZS9jbGllbnQtc3NvLW9pZGMtbm9kZVwiKTtcbmNvbnN0IHNzb09pZGNDbGllbnRzSGFzaCA9IHt9O1xuY29uc3QgZ2V0U3NvT2lkY0NsaWVudCA9IChzc29SZWdpb24pID0+IHtcbiAgICBpZiAoc3NvT2lkY0NsaWVudHNIYXNoW3Nzb1JlZ2lvbl0pIHtcbiAgICAgICAgcmV0dXJuIHNzb09pZGNDbGllbnRzSGFzaFtzc29SZWdpb25dO1xuICAgIH1cbiAgICBjb25zdCBzc29PaWRjQ2xpZW50ID0gbmV3IGNsaWVudF9zc29fb2lkY19ub2RlXzEuU1NPT0lEQ0NsaWVudCh7IHJlZ2lvbjogc3NvUmVnaW9uIH0pO1xuICAgIHNzb09pZGNDbGllbnRzSGFzaFtzc29SZWdpb25dID0gc3NvT2lkY0NsaWVudDtcbiAgICByZXR1cm4gc3NvT2lkY0NsaWVudDtcbn07XG5leHBvcnRzLmdldFNzb09pZGNDbGllbnQgPSBnZXRTc29PaWRjQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TmV3U3NvT2lkY1Rva2VuID0gdm9pZCAwO1xuY29uc3QgY2xpZW50X3Nzb19vaWRjX25vZGVfMSA9IHJlcXVpcmUoXCIuL2J1bmRsZS9jbGllbnQtc3NvLW9pZGMtbm9kZVwiKTtcbmNvbnN0IGdldFNzb09pZGNDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2dldFNzb09pZGNDbGllbnRcIik7XG5jb25zdCBnZXROZXdTc29PaWRjVG9rZW4gPSAoc3NvVG9rZW4sIHNzb1JlZ2lvbikgPT4ge1xuICAgIGNvbnN0IHNzb09pZGNDbGllbnQgPSAoMCwgZ2V0U3NvT2lkY0NsaWVudF8xLmdldFNzb09pZGNDbGllbnQpKHNzb1JlZ2lvbik7XG4gICAgcmV0dXJuIHNzb09pZGNDbGllbnQuc2VuZChuZXcgY2xpZW50X3Nzb19vaWRjX25vZGVfMS5DcmVhdGVUb2tlbkNvbW1hbmQoe1xuICAgICAgICBjbGllbnRJZDogc3NvVG9rZW4uY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogc3NvVG9rZW4uY2xpZW50U2VjcmV0LFxuICAgICAgICByZWZyZXNoVG9rZW46IHNzb1Rva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgICAgZ3JhbnRUeXBlOiBcInJlZnJlc2hfdG9rZW5cIixcbiAgICB9KSk7XG59O1xuZXhwb3J0cy5nZXROZXdTc29PaWRjVG9rZW4gPSBnZXROZXdTc29PaWRjVG9rZW47XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVRva2VuRXhwaXJ5ID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCB2YWxpZGF0ZVRva2VuRXhwaXJ5ID0gKHRva2VuKSA9PiB7XG4gICAgaWYgKHRva2VuLmV4cGlyYXRpb24gJiYgdG9rZW4uZXhwaXJhdGlvbi5nZXRUaW1lKCkgPCBEYXRlLm5vdygpKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgVG9rZW4gaXMgZXhwaXJlZC4gJHtjb25zdGFudHNfMS5SRUZSRVNIX01FU1NBR0V9YCwgZmFsc2UpO1xuICAgIH1cbn07XG5leHBvcnRzLnZhbGlkYXRlVG9rZW5FeHBpcnkgPSB2YWxpZGF0ZVRva2VuRXhwaXJ5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVUb2tlbktleSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdmFsaWRhdGVUb2tlbktleSA9IChrZXksIHZhbHVlLCBmb3JSZWZyZXNoID0gZmFsc2UpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgVmFsdWUgbm90IHByZXNlbnQgZm9yICcke2tleX0nIGluIFNTTyBUb2tlbiR7Zm9yUmVmcmVzaCA/IFwiLiBDYW5ub3QgcmVmcmVzaFwiIDogXCJcIn0uICR7Y29uc3RhbnRzXzEuUkVGUkVTSF9NRVNTQUdFfWAsIGZhbHNlKTtcbiAgICB9XG59O1xuZXhwb3J0cy52YWxpZGF0ZVRva2VuS2V5ID0gdmFsaWRhdGVUb2tlbktleTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndyaXRlU1NPVG9rZW5Ub0ZpbGUgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgd3JpdGVGaWxlIH0gPSBmc18xLnByb21pc2VzO1xuY29uc3Qgd3JpdGVTU09Ub2tlblRvRmlsZSA9IChpZCwgc3NvVG9rZW4pID0+IHtcbiAgICBjb25zdCB0b2tlbkZpbGVwYXRoID0gKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRTU09Ub2tlbkZpbGVwYXRoKShpZCk7XG4gICAgY29uc3QgdG9rZW5TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzc29Ub2tlbiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIHdyaXRlRmlsZSh0b2tlbkZpbGVwYXRoLCB0b2tlblN0cmluZyk7XG59O1xuZXhwb3J0cy53cml0ZVNTT1Rva2VuVG9GaWxlID0gd3JpdGVTU09Ub2tlblRvRmlsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Tc28gPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBnZXROZXdTc29PaWRjVG9rZW5fMSA9IHJlcXVpcmUoXCIuL2dldE5ld1Nzb09pZGNUb2tlblwiKTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5FeHBpcnlfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlVG9rZW5FeHBpcnlcIik7XG5jb25zdCB2YWxpZGF0ZVRva2VuS2V5XzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVRva2VuS2V5XCIpO1xuY29uc3Qgd3JpdGVTU09Ub2tlblRvRmlsZV8xID0gcmVxdWlyZShcIi4vd3JpdGVTU09Ub2tlblRvRmlsZVwiKTtcbmNvbnN0IGxhc3RSZWZyZXNoQXR0ZW1wdFRpbWUgPSBuZXcgRGF0ZSgwKTtcbmNvbnN0IGZyb21Tc28gPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJvZmlsZXMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLnBhcnNlS25vd25GaWxlcykoaW5pdCk7XG4gICAgY29uc3QgcHJvZmlsZU5hbWUgPSAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KTtcbiAgICBjb25zdCBwcm9maWxlID0gcHJvZmlsZXNbcHJvZmlsZU5hbWVdO1xuICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJyR7cHJvZmlsZU5hbWV9JyBjb3VsZCBub3QgYmUgZm91bmQgaW4gc2hhcmVkIGNyZWRlbnRpYWxzIGZpbGUuYCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICghcHJvZmlsZVtcInNzb19zZXNzaW9uXCJdKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLlRva2VuUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAnJHtwcm9maWxlTmFtZX0nIGlzIG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgJ3Nzb19zZXNzaW9uJy5gKTtcbiAgICB9XG4gICAgY29uc3Qgc3NvU2Vzc2lvbk5hbWUgPSBwcm9maWxlW1wic3NvX3Nlc3Npb25cIl07XG4gICAgY29uc3Qgc3NvU2Vzc2lvbnMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmxvYWRTc29TZXNzaW9uRGF0YSkoaW5pdCk7XG4gICAgY29uc3Qgc3NvU2Vzc2lvbiA9IHNzb1Nlc3Npb25zW3Nzb1Nlc3Npb25OYW1lXTtcbiAgICBpZiAoIXNzb1Nlc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBTc28gc2Vzc2lvbiAnJHtzc29TZXNzaW9uTmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBzaGFyZWQgY3JlZGVudGlhbHMgZmlsZS5gLCBmYWxzZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3NvU2Vzc2lvblJlcXVpcmVkS2V5IG9mIFtcInNzb19zdGFydF91cmxcIiwgXCJzc29fcmVnaW9uXCJdKSB7XG4gICAgICAgIGlmICghc3NvU2Vzc2lvbltzc29TZXNzaW9uUmVxdWlyZWRLZXldKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5Ub2tlblByb3ZpZGVyRXJyb3IoYFNzbyBzZXNzaW9uICcke3Nzb1Nlc3Npb25OYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAnJHtzc29TZXNzaW9uUmVxdWlyZWRLZXl9Jy5gLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3NvU3RhcnRVcmwgPSBzc29TZXNzaW9uW1wic3NvX3N0YXJ0X3VybFwiXTtcbiAgICBjb25zdCBzc29SZWdpb24gPSBzc29TZXNzaW9uW1wic3NvX3JlZ2lvblwiXTtcbiAgICBsZXQgc3NvVG9rZW47XG4gICAgdHJ5IHtcbiAgICAgICAgc3NvVG9rZW4gPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFNTT1Rva2VuRnJvbUZpbGUpKHNzb1Nlc3Npb25OYW1lKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBUaGUgU1NPIHNlc3Npb24gdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHByb2ZpbGU9JHtwcm9maWxlTmFtZX0gd2FzIG5vdCBmb3VuZCBvciBpcyBpbnZhbGlkLiAke2NvbnN0YW50c18xLlJFRlJFU0hfTUVTU0FHRX1gLCBmYWxzZSk7XG4gICAgfVxuICAgICgwLCB2YWxpZGF0ZVRva2VuS2V5XzEudmFsaWRhdGVUb2tlbktleSkoXCJhY2Nlc3NUb2tlblwiLCBzc29Ub2tlbi5hY2Nlc3NUb2tlbik7XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcImV4cGlyZXNBdFwiLCBzc29Ub2tlbi5leHBpcmVzQXQpO1xuICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCB9ID0gc3NvVG9rZW47XG4gICAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IHsgdG9rZW46IGFjY2Vzc1Rva2VuLCBleHBpcmF0aW9uOiBuZXcgRGF0ZShleHBpcmVzQXQpIH07XG4gICAgaWYgKGV4aXN0aW5nVG9rZW4uZXhwaXJhdGlvbi5nZXRUaW1lKCkgLSBEYXRlLm5vdygpID4gY29uc3RhbnRzXzEuRVhQSVJFX1dJTkRPV19NUykge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdUb2tlbjtcbiAgICB9XG4gICAgaWYgKERhdGUubm93KCkgLSBsYXN0UmVmcmVzaEF0dGVtcHRUaW1lLmdldFRpbWUoKSA8IDMwICogMTAwMCkge1xuICAgICAgICAoMCwgdmFsaWRhdGVUb2tlbkV4cGlyeV8xLnZhbGlkYXRlVG9rZW5FeHBpcnkpKGV4aXN0aW5nVG9rZW4pO1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdUb2tlbjtcbiAgICB9XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcImNsaWVudElkXCIsIHNzb1Rva2VuLmNsaWVudElkLCB0cnVlKTtcbiAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwiY2xpZW50U2VjcmV0XCIsIHNzb1Rva2VuLmNsaWVudFNlY3JldCwgdHJ1ZSk7XG4gICAgKDAsIHZhbGlkYXRlVG9rZW5LZXlfMS52YWxpZGF0ZVRva2VuS2V5KShcInJlZnJlc2hUb2tlblwiLCBzc29Ub2tlbi5yZWZyZXNoVG9rZW4sIHRydWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGxhc3RSZWZyZXNoQXR0ZW1wdFRpbWUuc2V0VGltZShEYXRlLm5vdygpKTtcbiAgICAgICAgY29uc3QgbmV3U3NvT2lkY1Rva2VuID0gYXdhaXQgKDAsIGdldE5ld1Nzb09pZGNUb2tlbl8xLmdldE5ld1Nzb09pZGNUb2tlbikoc3NvVG9rZW4sIHNzb1JlZ2lvbik7XG4gICAgICAgICgwLCB2YWxpZGF0ZVRva2VuS2V5XzEudmFsaWRhdGVUb2tlbktleSkoXCJhY2Nlc3NUb2tlblwiLCBuZXdTc29PaWRjVG9rZW4uYWNjZXNzVG9rZW4pO1xuICAgICAgICAoMCwgdmFsaWRhdGVUb2tlbktleV8xLnZhbGlkYXRlVG9rZW5LZXkpKFwiZXhwaXJlc0luXCIsIG5ld1Nzb09pZGNUb2tlbi5leHBpcmVzSW4pO1xuICAgICAgICBjb25zdCBuZXdUb2tlbkV4cGlyYXRpb24gPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgbmV3U3NvT2lkY1Rva2VuLmV4cGlyZXNJbiAqIDEwMDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIHdyaXRlU1NPVG9rZW5Ub0ZpbGVfMS53cml0ZVNTT1Rva2VuVG9GaWxlKShzc29TZXNzaW9uTmFtZSwge1xuICAgICAgICAgICAgICAgIC4uLnNzb1Rva2VuLFxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBuZXdTc29PaWRjVG9rZW4uYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBuZXdUb2tlbkV4cGlyYXRpb24udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW46IG5ld1Nzb09pZGNUb2tlbi5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IG5ld1Nzb09pZGNUb2tlbi5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIGV4cGlyYXRpb246IG5ld1Rva2VuRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICgwLCB2YWxpZGF0ZVRva2VuRXhwaXJ5XzEudmFsaWRhdGVUb2tlbkV4cGlyeSkoZXhpc3RpbmdUb2tlbik7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbn07XG5leHBvcnRzLmZyb21Tc28gPSBmcm9tU3NvO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZnJvbVN0YXRpYyA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IGZyb21TdGF0aWMgPSAoeyB0b2tlbiB9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCF0b2tlbiB8fCAhdG9rZW4udG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKGBQbGVhc2UgcGFzcyBhIHZhbGlkIHRva2VuIHRvIGZyb21TdGF0aWNgLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn07XG5leHBvcnRzLmZyb21TdGF0aWMgPSBmcm9tU3RhdGljO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm9kZVByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3QgZnJvbVNzb18xID0gcmVxdWlyZShcIi4vZnJvbVNzb1wiKTtcbmNvbnN0IG5vZGVQcm92aWRlciA9IChpbml0ID0ge30pID0+ICgwLCBwcm9wZXJ0eV9wcm92aWRlcl8xLm1lbW9pemUpKCgwLCBwcm9wZXJ0eV9wcm92aWRlcl8xLmNoYWluKSgoMCwgZnJvbVNzb18xLmZyb21Tc28pKGluaXQpLCBhc3luYyAoKSA9PiB7XG4gICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuVG9rZW5Qcm92aWRlckVycm9yKFwiQ291bGQgbm90IGxvYWQgdG9rZW4gZnJvbSBhbnkgcHJvdmlkZXJzXCIsIGZhbHNlKTtcbn0pLCAodG9rZW4pID0+IHRva2VuLmV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0b2tlbi5leHBpcmF0aW9uLmdldFRpbWUoKSAtIERhdGUubm93KCkgPCAzMDAwMDAsICh0b2tlbikgPT4gdG9rZW4uZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkKTtcbmV4cG9ydHMubm9kZVByb3ZpZGVyID0gbm9kZVByb3ZpZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9idW5kbGUvY2xpZW50LXNzby1vaWRjLW5vZGVcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVNzb1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tU3RhdGljXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL25vZGVQcm92aWRlclwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU1NPQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBjbGllbnRfc3NvXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNzb1wiKTtcbmNvbnN0IHRva2VuX3Byb3ZpZGVyc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3Rva2VuLXByb3ZpZGVyc1wiKTtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXJcIik7XG5jb25zdCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOID0gZmFsc2U7XG5jb25zdCByZXNvbHZlU1NPQ3JlZGVudGlhbHMgPSBhc3luYyAoeyBzc29TdGFydFVybCwgc3NvU2Vzc2lvbiwgc3NvQWNjb3VudElkLCBzc29SZWdpb24sIHNzb1JvbGVOYW1lLCBzc29DbGllbnQsIHByb2ZpbGUsIH0pID0+IHtcbiAgICBsZXQgdG9rZW47XG4gICAgY29uc3QgcmVmcmVzaE1lc3NhZ2UgPSBgVG8gcmVmcmVzaCB0aGlzIFNTTyBzZXNzaW9uIHJ1biBhd3Mgc3NvIGxvZ2luIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHJvZmlsZS5gO1xuICAgIGlmIChzc29TZXNzaW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBfdG9rZW4gPSBhd2FpdCAoMCwgdG9rZW5fcHJvdmlkZXJzXzEuZnJvbVNzbykoeyBwcm9maWxlIH0pKCk7XG4gICAgICAgICAgICB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogX3Rva2VuLnRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUoX3Rva2VuLmV4cGlyYXRpb24pLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoZS5tZXNzYWdlLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRva2VuID0gYXdhaXQgKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5nZXRTU09Ub2tlbkZyb21GaWxlKShzc29TdGFydFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgVGhlIFNTTyBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2ZpbGUgaXMgaW52YWxpZC4gJHtyZWZyZXNoTWVzc2FnZX1gLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3IERhdGUodG9rZW4uZXhwaXJlc0F0KS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBUaGUgU1NPIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvZmlsZSBoYXMgZXhwaXJlZC4gJHtyZWZyZXNoTWVzc2FnZX1gLCBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOKTtcbiAgICB9XG4gICAgY29uc3QgeyBhY2Nlc3NUb2tlbiB9ID0gdG9rZW47XG4gICAgY29uc3Qgc3NvID0gc3NvQ2xpZW50IHx8IG5ldyBjbGllbnRfc3NvXzEuU1NPQ2xpZW50KHsgcmVnaW9uOiBzc29SZWdpb24gfSk7XG4gICAgbGV0IHNzb1Jlc3A7XG4gICAgdHJ5IHtcbiAgICAgICAgc3NvUmVzcCA9IGF3YWl0IHNzby5zZW5kKG5ldyBjbGllbnRfc3NvXzEuR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCh7XG4gICAgICAgICAgICBhY2NvdW50SWQ6IHNzb0FjY291bnRJZCxcbiAgICAgICAgICAgIHJvbGVOYW1lOiBzc29Sb2xlTmFtZSxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yLmZyb20oZSwgU0hPVUxEX0ZBSUxfQ1JFREVOVElBTF9DSEFJTik7XG4gICAgfVxuICAgIGNvbnN0IHsgcm9sZUNyZWRlbnRpYWxzOiB7IGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbiwgZXhwaXJhdGlvbiB9ID0ge30gfSA9IHNzb1Jlc3A7XG4gICAgaWYgKCFhY2Nlc3NLZXlJZCB8fCAhc2VjcmV0QWNjZXNzS2V5IHx8ICFzZXNzaW9uVG9rZW4gfHwgIWV4cGlyYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiU1NPIHJldHVybnMgYW4gaW52YWxpZCB0ZW1wb3JhcnkgY3JlZGVudGlhbC5cIiwgU0hPVUxEX0ZBSUxfQ1JFREVOVElBTF9DSEFJTik7XG4gICAgfVxuICAgIHJldHVybiB7IGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbiwgZXhwaXJhdGlvbjogbmV3IERhdGUoZXhwaXJhdGlvbikgfTtcbn07XG5leHBvcnRzLnJlc29sdmVTU09DcmVkZW50aWFscyA9IHJlc29sdmVTU09DcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlU3NvUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IHByb3BlcnR5X3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlclwiKTtcbmNvbnN0IHZhbGlkYXRlU3NvUHJvZmlsZSA9IChwcm9maWxlKSA9PiB7XG4gICAgY29uc3QgeyBzc29fc3RhcnRfdXJsLCBzc29fYWNjb3VudF9pZCwgc3NvX3JlZ2lvbiwgc3NvX3JvbGVfbmFtZSB9ID0gcHJvZmlsZTtcbiAgICBpZiAoIXNzb19zdGFydF91cmwgfHwgIXNzb19hY2NvdW50X2lkIHx8ICFzc29fcmVnaW9uIHx8ICFzc29fcm9sZV9uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSBpcyBjb25maWd1cmVkIHdpdGggaW52YWxpZCBTU08gY3JlZGVudGlhbHMuIFJlcXVpcmVkIHBhcmFtZXRlcnMgXCJzc29fYWNjb3VudF9pZFwiLCBgICtcbiAgICAgICAgICAgIGBcInNzb19yZWdpb25cIiwgXCJzc29fcm9sZV9uYW1lXCIsIFwic3NvX3N0YXJ0X3VybFwiLiBHb3QgJHtPYmplY3Qua2V5cyhwcm9maWxlKS5qb2luKFwiLCBcIil9XFxuUmVmZXJlbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC91c2VyZ3VpZGUvY2xpLWNvbmZpZ3VyZS1zc28uaHRtbGAsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2ZpbGU7XG59O1xuZXhwb3J0cy52YWxpZGF0ZVNzb1Byb2ZpbGUgPSB2YWxpZGF0ZVNzb1Byb2ZpbGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tU1NPID0gdm9pZCAwO1xuY29uc3QgcHJvcGVydHlfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyXCIpO1xuY29uc3Qgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvc2hhcmVkLWluaS1maWxlLWxvYWRlclwiKTtcbmNvbnN0IGlzU3NvUHJvZmlsZV8xID0gcmVxdWlyZShcIi4vaXNTc29Qcm9maWxlXCIpO1xuY29uc3QgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlU1NPQ3JlZGVudGlhbHNcIik7XG5jb25zdCB2YWxpZGF0ZVNzb1Byb2ZpbGVfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlU3NvUHJvZmlsZVwiKTtcbmNvbnN0IGZyb21TU08gPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBzc29TdGFydFVybCwgc3NvQWNjb3VudElkLCBzc29SZWdpb24sIHNzb1JvbGVOYW1lLCBzc29DbGllbnQsIHNzb1Nlc3Npb24gfSA9IGluaXQ7XG4gICAgY29uc3QgcHJvZmlsZU5hbWUgPSAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KTtcbiAgICBpZiAoIXNzb1N0YXJ0VXJsICYmICFzc29BY2NvdW50SWQgJiYgIXNzb1JlZ2lvbiAmJiAhc3NvUm9sZU5hbWUgJiYgIXNzb1Nlc3Npb24pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZXMgPSBhd2FpdCAoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLnBhcnNlS25vd25GaWxlcykoaW5pdCk7XG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgaXNTc29Qcm9maWxlXzEuaXNTc29Qcm9maWxlKShwcm9maWxlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGlzIG5vdCBjb25maWd1cmVkIHdpdGggU1NPIGNyZWRlbnRpYWxzLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9maWxlID09PSBudWxsIHx8IHByb2ZpbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2ZpbGUuc3NvX3Nlc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNzb1Nlc3Npb25zID0gYXdhaXQgKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5sb2FkU3NvU2Vzc2lvbkRhdGEpKGluaXQpO1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNzb1Nlc3Npb25zW3Byb2ZpbGUuc3NvX3Nlc3Npb25dO1xuICAgICAgICAgICAgY29uc3QgY29uZmxpY3RNc2cgPSBgIGNvbmZpZ3VyYXRpb25zIGluIHByb2ZpbGUgJHtwcm9maWxlTmFtZX0gYW5kIHNzby1zZXNzaW9uICR7cHJvZmlsZS5zc29fc2Vzc2lvbn1gO1xuICAgICAgICAgICAgaWYgKHNzb1JlZ2lvbiAmJiBzc29SZWdpb24gIT09IHNlc3Npb24uc3NvX3JlZ2lvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgQ29uZmxpY3RpbmcgU1NPIHJlZ2lvbmAgKyBjb25mbGljdE1zZywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNzb1N0YXJ0VXJsICYmIHNzb1N0YXJ0VXJsICE9PSBzZXNzaW9uLnNzb19zdGFydF91cmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYENvbmZsaWN0aW5nIFNTTyBzdGFydF91cmxgICsgY29uZmxpY3RNc2csIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2ZpbGUuc3NvX3JlZ2lvbiA9IHNlc3Npb24uc3NvX3JlZ2lvbjtcbiAgICAgICAgICAgIHByb2ZpbGUuc3NvX3N0YXJ0X3VybCA9IHNlc3Npb24uc3NvX3N0YXJ0X3VybDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNzb19zdGFydF91cmwsIHNzb19hY2NvdW50X2lkLCBzc29fcmVnaW9uLCBzc29fcm9sZV9uYW1lLCBzc29fc2Vzc2lvbiB9ID0gKDAsIHZhbGlkYXRlU3NvUHJvZmlsZV8xLnZhbGlkYXRlU3NvUHJvZmlsZSkocHJvZmlsZSk7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzXzEucmVzb2x2ZVNTT0NyZWRlbnRpYWxzKSh7XG4gICAgICAgICAgICBzc29TdGFydFVybDogc3NvX3N0YXJ0X3VybCxcbiAgICAgICAgICAgIHNzb1Nlc3Npb246IHNzb19zZXNzaW9uLFxuICAgICAgICAgICAgc3NvQWNjb3VudElkOiBzc29fYWNjb3VudF9pZCxcbiAgICAgICAgICAgIHNzb1JlZ2lvbjogc3NvX3JlZ2lvbixcbiAgICAgICAgICAgIHNzb1JvbGVOYW1lOiBzc29fcm9sZV9uYW1lLFxuICAgICAgICAgICAgc3NvQ2xpZW50OiBzc29DbGllbnQsXG4gICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzc29TdGFydFVybCB8fCAhc3NvQWNjb3VudElkIHx8ICFzc29SZWdpb24gfHwgIXNzb1JvbGVOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIkluY29tcGxldGUgY29uZmlndXJhdGlvbi4gVGhlIGZyb21TU08oKSBhcmd1bWVudCBoYXNoIG11c3QgaW5jbHVkZSBcIiArXG4gICAgICAgICAgICAnXCJzc29TdGFydFVybFwiLCBcInNzb0FjY291bnRJZFwiLCBcInNzb1JlZ2lvblwiLCBcInNzb1JvbGVOYW1lXCInKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzXzEucmVzb2x2ZVNTT0NyZWRlbnRpYWxzKSh7XG4gICAgICAgICAgICBzc29TdGFydFVybCxcbiAgICAgICAgICAgIHNzb1Nlc3Npb24sXG4gICAgICAgICAgICBzc29BY2NvdW50SWQsXG4gICAgICAgICAgICBzc29SZWdpb24sXG4gICAgICAgICAgICBzc29Sb2xlTmFtZSxcbiAgICAgICAgICAgIHNzb0NsaWVudCxcbiAgICAgICAgICAgIHByb2ZpbGU6IHByb2ZpbGVOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG59O1xuZXhwb3J0cy5mcm9tU1NPID0gZnJvbVNTTztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21TU09cIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaXNTc29Qcm9maWxlXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3ZhbGlkYXRlU3NvUHJvZmlsZVwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU3NvQ3JlZGVudGlhbHMgPSBleHBvcnRzLmlzU3NvUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfc3NvXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc29cIik7XG52YXIgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMiA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3NvUHJvZmlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMi5pc1Nzb1Byb2ZpbGU7IH0gfSk7XG5jb25zdCByZXNvbHZlU3NvQ3JlZGVudGlhbHMgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgc3NvX3N0YXJ0X3VybCwgc3NvX2FjY291bnRfaWQsIHNzb19zZXNzaW9uLCBzc29fcmVnaW9uLCBzc29fcm9sZV9uYW1lIH0gPSAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMS52YWxpZGF0ZVNzb1Byb2ZpbGUpKGRhdGEpO1xuICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMS5mcm9tU1NPKSh7XG4gICAgICAgIHNzb1N0YXJ0VXJsOiBzc29fc3RhcnRfdXJsLFxuICAgICAgICBzc29BY2NvdW50SWQ6IHNzb19hY2NvdW50X2lkLFxuICAgICAgICBzc29TZXNzaW9uOiBzc29fc2Vzc2lvbixcbiAgICAgICAgc3NvUmVnaW9uOiBzc29fcmVnaW9uLFxuICAgICAgICBzc29Sb2xlTmFtZTogc3NvX3JvbGVfbmFtZSxcbiAgICB9KSgpO1xufTtcbmV4cG9ydHMucmVzb2x2ZVNzb0NyZWRlbnRpYWxzID0gcmVzb2x2ZVNzb0NyZWRlbnRpYWxzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzID0gZXhwb3J0cy5pc1N0YXRpY0NyZWRzUHJvZmlsZSA9IHZvaWQgMDtcbmNvbnN0IGlzU3RhdGljQ3JlZHNQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBhcmcuYXdzX2FjY2Vzc19rZXlfaWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgYXJnLmF3c19zZWNyZXRfYWNjZXNzX2tleSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFtcInVuZGVmaW5lZFwiLCBcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBhcmcuYXdzX3Nlc3Npb25fdG9rZW4pID4gLTE7XG5leHBvcnRzLmlzU3RhdGljQ3JlZHNQcm9maWxlID0gaXNTdGF0aWNDcmVkc1Byb2ZpbGU7XG5jb25zdCByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMgPSAocHJvZmlsZSkgPT4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICBhY2Nlc3NLZXlJZDogcHJvZmlsZS5hd3NfYWNjZXNzX2tleV9pZCxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6IHByb2ZpbGUuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgIHNlc3Npb25Ub2tlbjogcHJvZmlsZS5hd3Nfc2Vzc2lvbl90b2tlbixcbn0pO1xuZXhwb3J0cy5yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMgPSByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tV2ViVG9rZW4gPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmcm9tV2ViVG9rZW4gPSAoaW5pdCkgPT4gKCkgPT4ge1xuICAgIGNvbnN0IHsgcm9sZUFybiwgcm9sZVNlc3Npb25OYW1lLCB3ZWJJZGVudGl0eVRva2VuLCBwcm92aWRlcklkLCBwb2xpY3lBcm5zLCBwb2xpY3ksIGR1cmF0aW9uU2Vjb25kcywgcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHksIH0gPSBpbml0O1xuICAgIGlmICghcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBSb2xlIEFybiAnJHtyb2xlQXJufScgbmVlZHMgdG8gYmUgYXNzdW1lZCB3aXRoIHdlYiBpZGVudGl0eSxgICtcbiAgICAgICAgICAgIGAgYnV0IG5vIHJvbGUgYXNzdW1wdGlvbiBjYWxsYmFjayB3YXMgcHJvdmlkZWQuYCwgZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkoe1xuICAgICAgICBSb2xlQXJuOiByb2xlQXJuLFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6IHJvbGVTZXNzaW9uTmFtZSAhPT0gbnVsbCAmJiByb2xlU2Vzc2lvbk5hbWUgIT09IHZvaWQgMCA/IHJvbGVTZXNzaW9uTmFtZSA6IGBhd3Mtc2RrLWpzLXNlc3Npb24tJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIFdlYklkZW50aXR5VG9rZW46IHdlYklkZW50aXR5VG9rZW4sXG4gICAgICAgIFByb3ZpZGVySWQ6IHByb3ZpZGVySWQsXG4gICAgICAgIFBvbGljeUFybnM6IHBvbGljeUFybnMsXG4gICAgICAgIFBvbGljeTogcG9saWN5LFxuICAgICAgICBEdXJhdGlvblNlY29uZHM6IGR1cmF0aW9uU2Vjb25kcyxcbiAgICB9KTtcbn07XG5leHBvcnRzLmZyb21XZWJUb2tlbiA9IGZyb21XZWJUb2tlbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21Ub2tlbkZpbGUgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgZnJvbVdlYlRva2VuXzEgPSByZXF1aXJlKFwiLi9mcm9tV2ViVG9rZW5cIik7XG5jb25zdCBFTlZfVE9LRU5fRklMRSA9IFwiQVdTX1dFQl9JREVOVElUWV9UT0tFTl9GSUxFXCI7XG5jb25zdCBFTlZfUk9MRV9BUk4gPSBcIkFXU19ST0xFX0FSTlwiO1xuY29uc3QgRU5WX1JPTEVfU0VTU0lPTl9OQU1FID0gXCJBV1NfUk9MRV9TRVNTSU9OX05BTUVcIjtcbmNvbnN0IGZyb21Ub2tlbkZpbGUgPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoKSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgY29uc3Qgd2ViSWRlbnRpdHlUb2tlbkZpbGUgPSAoX2EgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQud2ViSWRlbnRpdHlUb2tlbkZpbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHByb2Nlc3MuZW52W0VOVl9UT0tFTl9GSUxFXTtcbiAgICBjb25zdCByb2xlQXJuID0gKF9iID0gaW5pdCA9PT0gbnVsbCB8fCBpbml0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0LnJvbGVBcm4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuZW52W0VOVl9ST0xFX0FSTl07XG4gICAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gKF9jID0gaW5pdCA9PT0gbnVsbCB8fCBpbml0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0LnJvbGVTZXNzaW9uTmFtZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogcHJvY2Vzcy5lbnZbRU5WX1JPTEVfU0VTU0lPTl9OQU1FXTtcbiAgICBpZiAoIXdlYklkZW50aXR5VG9rZW5GaWxlIHx8ICFyb2xlQXJuKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eV9wcm92aWRlcl8xLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIldlYiBpZGVudGl0eSBjb25maWd1cmF0aW9uIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZnJvbVdlYlRva2VuXzEuZnJvbVdlYlRva2VuKSh7XG4gICAgICAgIC4uLmluaXQsXG4gICAgICAgIHdlYklkZW50aXR5VG9rZW46ICgwLCBmc18xLnJlYWRGaWxlU3luYykod2ViSWRlbnRpdHlUb2tlbkZpbGUsIHsgZW5jb2Rpbmc6IFwiYXNjaWlcIiB9KSxcbiAgICAgICAgcm9sZUFybixcbiAgICAgICAgcm9sZVNlc3Npb25OYW1lLFxuICAgIH0pKCk7XG59O1xuZXhwb3J0cy5mcm9tVG9rZW5GaWxlID0gZnJvbVRva2VuRmlsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZnJvbVRva2VuRmlsZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mcm9tV2ViVG9rZW5cIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHMgPSBleHBvcnRzLmlzV2ViSWRlbnRpdHlQcm9maWxlID0gdm9pZCAwO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl93ZWJfaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eVwiKTtcbmNvbnN0IGlzV2ViSWRlbnRpdHlQcm9maWxlID0gKGFyZykgPT4gQm9vbGVhbihhcmcpICYmXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBhcmcud2ViX2lkZW50aXR5X3Rva2VuX2ZpbGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgYXJnLnJvbGVfYXJuID09PSBcInN0cmluZ1wiICYmXG4gICAgW1widW5kZWZpbmVkXCIsIFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIGFyZy5yb2xlX3Nlc3Npb25fbmFtZSkgPiAtMTtcbmV4cG9ydHMuaXNXZWJJZGVudGl0eVByb2ZpbGUgPSBpc1dlYklkZW50aXR5UHJvZmlsZTtcbmNvbnN0IHJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzID0gYXN5bmMgKHByb2ZpbGUsIG9wdGlvbnMpID0+ICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX3dlYl9pZGVudGl0eV8xLmZyb21Ub2tlbkZpbGUpKHtcbiAgICB3ZWJJZGVudGl0eVRva2VuRmlsZTogcHJvZmlsZS53ZWJfaWRlbnRpdHlfdG9rZW5fZmlsZSxcbiAgICByb2xlQXJuOiBwcm9maWxlLnJvbGVfYXJuLFxuICAgIHJvbGVTZXNzaW9uTmFtZTogcHJvZmlsZS5yb2xlX3Nlc3Npb25fbmFtZSxcbiAgICByb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTogb3B0aW9ucy5yb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSxcbn0pKCk7XG5leHBvcnRzLnJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzID0gcmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlUHJvZmlsZURhdGEgPSB2b2lkIDA7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFsc1wiKTtcbmNvbnN0IHJlc29sdmVTc29DcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVNzb0NyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlU3RhdGljQ3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlUHJvZmlsZURhdGEgPSBhc3luYyAocHJvZmlsZU5hbWUsIHByb2ZpbGVzLCBvcHRpb25zLCB2aXNpdGVkUHJvZmlsZXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwcm9maWxlc1twcm9maWxlTmFtZV07XG4gICAgaWYgKE9iamVjdC5rZXlzKHZpc2l0ZWRQcm9maWxlcykubGVuZ3RoID4gMCAmJiAoMCwgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEuaXNTdGF0aWNDcmVkc1Byb2ZpbGUpKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzXzEucmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzKShkYXRhKTtcbiAgICB9XG4gICAgaWYgKCgwLCByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXzEuaXNBc3N1bWVSb2xlUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlQXNzdW1lUm9sZUNyZWRlbnRpYWxzXzEucmVzb2x2ZUFzc3VtZVJvbGVDcmVkZW50aWFscykocHJvZmlsZU5hbWUsIHByb2ZpbGVzLCBvcHRpb25zLCB2aXNpdGVkUHJvZmlsZXMpO1xuICAgIH1cbiAgICBpZiAoKDAsIHJlc29sdmVTdGF0aWNDcmVkZW50aWFsc18xLmlzU3RhdGljQ3JlZHNQcm9maWxlKShkYXRhKSkge1xuICAgICAgICByZXR1cm4gKDAsIHJlc29sdmVTdGF0aWNDcmVkZW50aWFsc18xLnJlc29sdmVTdGF0aWNDcmVkZW50aWFscykoZGF0YSk7XG4gICAgfVxuICAgIGlmICgoMCwgcmVzb2x2ZVdlYklkZW50aXR5Q3JlZGVudGlhbHNfMS5pc1dlYklkZW50aXR5UHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlV2ViSWRlbnRpdHlDcmVkZW50aWFsc18xLnJlc29sdmVXZWJJZGVudGl0eUNyZWRlbnRpYWxzKShkYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCgwLCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEuaXNQcm9jZXNzUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlUHJvY2Vzc0NyZWRlbnRpYWxzXzEucmVzb2x2ZVByb2Nlc3NDcmVkZW50aWFscykob3B0aW9ucywgcHJvZmlsZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoKDAsIHJlc29sdmVTc29DcmVkZW50aWFsc18xLmlzU3NvUHJvZmlsZSkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvbHZlU3NvQ3JlZGVudGlhbHNfMS5yZXNvbHZlU3NvQ3JlZGVudGlhbHMpKGRhdGEpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJHtwcm9maWxlTmFtZX0gY291bGQgbm90IGJlIGZvdW5kIG9yIHBhcnNlZCBpbiBzaGFyZWQgY3JlZGVudGlhbHMgZmlsZS5gKTtcbn07XG5leHBvcnRzLnJlc29sdmVQcm9maWxlRGF0YSA9IHJlc29sdmVQcm9maWxlRGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21JbmkgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgcmVzb2x2ZVByb2ZpbGVEYXRhXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlUHJvZmlsZURhdGFcIik7XG5jb25zdCBmcm9tSW5pID0gKGluaXQgPSB7fSkgPT4gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb2ZpbGVzID0gYXdhaXQgKDAsIHNoYXJlZF9pbmlfZmlsZV9sb2FkZXJfMS5wYXJzZUtub3duRmlsZXMpKGluaXQpO1xuICAgIHJldHVybiAoMCwgcmVzb2x2ZVByb2ZpbGVEYXRhXzEucmVzb2x2ZVByb2ZpbGVEYXRhKSgoMCwgc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLmdldFByb2ZpbGVOYW1lKShpbml0KSwgcHJvZmlsZXMsIGluaXQpO1xufTtcbmV4cG9ydHMuZnJvbUluaSA9IGZyb21Jbmk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Zyb21JbmlcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVtb3RlUHJvdmlkZXIgPSBleHBvcnRzLkVOVl9JTURTX0RJU0FCTEVEID0gdm9pZCAwO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHNcIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5leHBvcnRzLkVOVl9JTURTX0RJU0FCTEVEID0gXCJBV1NfRUMyX01FVEFEQVRBX0RJU0FCTEVEXCI7XG5jb25zdCByZW1vdGVQcm92aWRlciA9IChpbml0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52W2NyZWRlbnRpYWxfcHJvdmlkZXJfaW1kc18xLkVOVl9DTURTX1JFTEFUSVZFX1VSSV0gfHwgcHJvY2Vzcy5lbnZbY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuRU5WX0NNRFNfRlVMTF9VUkldKSB7XG4gICAgICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUNvbnRhaW5lck1ldGFkYXRhKShpbml0KTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52W2V4cG9ydHMuRU5WX0lNRFNfRElTQUJMRURdKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlfcHJvdmlkZXJfMS5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJFQzIgSW5zdGFuY2UgTWV0YWRhdGEgU2VydmljZSBhY2Nlc3MgZGlzYWJsZWRcIik7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9pbWRzXzEuZnJvbUluc3RhbmNlTWV0YWRhdGEpKGluaXQpO1xufTtcbmV4cG9ydHMucmVtb3RlUHJvdmlkZXIgPSByZW1vdGVQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfZW52XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnZcIik7XG5jb25zdCBjcmVkZW50aWFsX3Byb3ZpZGVyX2luaV8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9wcm9jZXNzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9zc29fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzb1wiKTtcbmNvbnN0IGNyZWRlbnRpYWxfcHJvdmlkZXJfd2ViX2lkZW50aXR5XzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHlcIik7XG5jb25zdCBwcm9wZXJ0eV9wcm92aWRlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXJcIik7XG5jb25zdCBzaGFyZWRfaW5pX2ZpbGVfbG9hZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyXCIpO1xuY29uc3QgcmVtb3RlUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3JlbW90ZVByb3ZpZGVyXCIpO1xuY29uc3QgZGVmYXVsdFByb3ZpZGVyID0gKGluaXQgPSB7fSkgPT4gKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEubWVtb2l6ZSkoKDAsIHByb3BlcnR5X3Byb3ZpZGVyXzEuY2hhaW4pKC4uLihpbml0LnByb2ZpbGUgfHwgcHJvY2Vzcy5lbnZbc2hhcmVkX2luaV9maWxlX2xvYWRlcl8xLkVOVl9QUk9GSUxFXSA/IFtdIDogWygwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2Vudl8xLmZyb21FbnYpKCldKSwgKDAsIGNyZWRlbnRpYWxfcHJvdmlkZXJfc3NvXzEuZnJvbVNTTykoaW5pdCksICgwLCBjcmVkZW50aWFsX3Byb3ZpZGVyX2luaV8xLmZyb21JbmkpKGluaXQpLCAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl9wcm9jZXNzXzEuZnJvbVByb2Nlc3MpKGluaXQpLCAoMCwgY3JlZGVudGlhbF9wcm92aWRlcl93ZWJfaWRlbnRpdHlfMS5mcm9tVG9rZW5GaWxlKShpbml0KSwgKDAsIHJlbW90ZVByb3ZpZGVyXzEucmVtb3RlUHJvdmlkZXIpKGluaXQpLCBhc3luYyAoKSA9PiB7XG4gICAgdGhyb3cgbmV3IHByb3BlcnR5X3Byb3ZpZGVyXzEuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKFwiQ291bGQgbm90IGxvYWQgY3JlZGVudGlhbHMgZnJvbSBhbnkgcHJvdmlkZXJzXCIsIGZhbHNlKTtcbn0pLCAoY3JlZGVudGlhbHMpID0+IGNyZWRlbnRpYWxzLmV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCAmJiBjcmVkZW50aWFscy5leHBpcmF0aW9uLmdldFRpbWUoKSAtIERhdGUubm93KCkgPCAzMDAwMDAsIChjcmVkZW50aWFscykgPT4gY3JlZGVudGlhbHMuZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkKTtcbmV4cG9ydHMuZGVmYXVsdFByb3ZpZGVyID0gZGVmYXVsdFByb3ZpZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9kZWZhdWx0UHJvdmlkZXJcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucnVsZVNldCA9IHZvaWQgMDtcbmNvbnN0IEYgPSBcInJlcXVpcmVkXCIsIEcgPSBcInR5cGVcIiwgSCA9IFwiZm5cIiwgSSA9IFwiYXJndlwiLCBKID0gXCJyZWZcIjtcbmNvbnN0IGEgPSBmYWxzZSwgYiA9IHRydWUsIGMgPSBcImJvb2xlYW5FcXVhbHNcIiwgZCA9IFwidHJlZVwiLCBlID0gXCJzdHJpbmdFcXVhbHNcIiwgZiA9IFwic2lndjRcIiwgZyA9IFwic3RzXCIsIGggPSBcInVzLWVhc3QtMVwiLCBpID0gXCJlbmRwb2ludFwiLCBqID0gXCJodHRwczovL3N0cy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgayA9IFwiZXJyb3JcIiwgbCA9IFwiZ2V0QXR0clwiLCBtID0geyBbRl06IGZhbHNlLCBbR106IFwiU3RyaW5nXCIgfSwgbiA9IHsgW0ZdOiB0cnVlLCBcImRlZmF1bHRcIjogZmFsc2UsIFtHXTogXCJCb29sZWFuXCIgfSwgbyA9IHsgW0pdOiBcIkVuZHBvaW50XCIgfSwgcCA9IHsgW0hdOiBcImlzU2V0XCIsIFtJXTogW3sgW0pdOiBcIlJlZ2lvblwiIH1dIH0sIHEgPSB7IFtKXTogXCJSZWdpb25cIiB9LCByID0geyBbSF06IFwiYXdzLnBhcnRpdGlvblwiLCBbSV06IFtxXSwgXCJhc3NpZ25cIjogXCJQYXJ0aXRpb25SZXN1bHRcIiB9LCBzID0geyBbSl06IFwiVXNlRklQU1wiIH0sIHQgPSB7IFtKXTogXCJVc2VEdWFsU3RhY2tcIiB9LCB1ID0geyBcInVybFwiOiBcImh0dHBzOi8vc3RzLmFtYXpvbmF3cy5jb21cIiwgXCJwcm9wZXJ0aWVzXCI6IHsgXCJhdXRoU2NoZW1lc1wiOiBbeyBcIm5hbWVcIjogZiwgXCJzaWduaW5nTmFtZVwiOiBnLCBcInNpZ25pbmdSZWdpb25cIjogaCB9XSB9LCBcImhlYWRlcnNcIjoge30gfSwgdiA9IHt9LCB3ID0geyBcImNvbmRpdGlvbnNcIjogW3sgW0hdOiBlLCBbSV06IFtxLCBcImF3cy1nbG9iYWxcIl0gfV0sIFtpXTogdSwgW0ddOiBpIH0sIHggPSB7IFtIXTogYywgW0ldOiBbcywgdHJ1ZV0gfSwgeSA9IHsgW0hdOiBjLCBbSV06IFt0LCB0cnVlXSB9LCB6ID0geyBbSF06IGMsIFtJXTogW3RydWUsIHsgW0hdOiBsLCBbSV06IFt7IFtKXTogXCJQYXJ0aXRpb25SZXN1bHRcIiB9LCBcInN1cHBvcnRzRklQU1wiXSB9XSB9LCBBID0geyBbSl06IFwiUGFydGl0aW9uUmVzdWx0XCIgfSwgQiA9IHsgW0hdOiBjLCBbSV06IFt0cnVlLCB7IFtIXTogbCwgW0ldOiBbQSwgXCJzdXBwb3J0c0R1YWxTdGFja1wiXSB9XSB9LCBDID0gW3sgW0hdOiBcImlzU2V0XCIsIFtJXTogW29dIH1dLCBEID0gW3hdLCBFID0gW3ldO1xuY29uc3QgX2RhdGEgPSB7IHZlcnNpb246IFwiMS4wXCIsIHBhcmFtZXRlcnM6IHsgUmVnaW9uOiBtLCBVc2VEdWFsU3RhY2s6IG4sIFVzZUZJUFM6IG4sIEVuZHBvaW50OiBtLCBVc2VHbG9iYWxFbmRwb2ludDogbiB9LCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW0hdOiBjLCBbSV06IFt7IFtKXTogXCJVc2VHbG9iYWxFbmRwb2ludFwiIH0sIGJdIH0sIHsgW0hdOiBcIm5vdFwiLCBbSV06IEMgfSwgcCwgciwgeyBbSF06IGMsIFtJXTogW3MsIGFdIH0sIHsgW0hdOiBjLCBbSV06IFt0LCBhXSB9XSwgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImFwLW5vcnRoZWFzdC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImFwLXNvdXRoLTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiYXAtc291dGhlYXN0LTFcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiYXAtc291dGhlYXN0LTJcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgdywgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiY2EtY2VudHJhbC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImV1LWNlbnRyYWwtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJldS1ub3J0aC0xXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcImV1LXdlc3QtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJldS13ZXN0LTJcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwiZXUtd2VzdC0zXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcInNhLWVhc3QtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgaF0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW3EsIFwidXMtZWFzdC0yXCJdIH1dLCBlbmRwb2ludDogdSwgW0ddOiBpIH0sIHsgY29uZGl0aW9uczogW3sgW0hdOiBlLCBbSV06IFtxLCBcInVzLXdlc3QtMVwiXSB9XSwgZW5kcG9pbnQ6IHUsIFtHXTogaSB9LCB7IGNvbmRpdGlvbnM6IFt7IFtIXTogZSwgW0ldOiBbcSwgXCJ1cy13ZXN0LTJcIl0gfV0sIGVuZHBvaW50OiB1LCBbR106IGkgfSwgeyBlbmRwb2ludDogeyB1cmw6IGosIHByb3BlcnRpZXM6IHsgYXV0aFNjaGVtZXM6IFt7IG5hbWU6IGYsIHNpZ25pbmdOYW1lOiBnLCBzaWduaW5nUmVnaW9uOiBcIntSZWdpb259XCIgfV0gfSwgaGVhZGVyczogdiB9LCBbR106IGkgfV0gfSwgeyBjb25kaXRpb25zOiBDLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBELCBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IEZJUFMgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCBbR106IGsgfSwgeyBjb25kaXRpb25zOiBFLCBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IER1YWxzdGFjayBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIFtHXTogayB9LCB7IGVuZHBvaW50OiB7IHVybDogbywgcHJvcGVydGllczogdiwgaGVhZGVyczogdiB9LCBbR106IGkgfV0gfSwgeyBjb25kaXRpb25zOiBbcF0sIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtyXSwgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3gsIHldLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeiwgQl0sIFtHXTogZCwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3N0cy1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiB2LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9XSB9LCB7IGVycm9yOiBcIkZJUFMgYW5kIER1YWxTdGFjayBhcmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgb25lIG9yIGJvdGhcIiwgW0ddOiBrIH1dIH0sIHsgY29uZGl0aW9uczogRCwgW0ddOiBkLCBydWxlczogW3sgY29uZGl0aW9uczogW3pdLCBbR106IGQsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbSF06IGUsIFtJXTogW1wiYXdzLXVzLWdvdlwiLCB7IFtIXTogbCwgW0ldOiBbQSwgXCJuYW1lXCJdIH1dIH1dLCBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9zdHMue1JlZ2lvbn0uYW1hem9uYXdzLmNvbVwiLCBwcm9wZXJ0aWVzOiB2LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9LCB7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3N0cy1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiB2LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9XSB9LCB7IGVycm9yOiBcIkZJUFMgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBGSVBTXCIsIFtHXTogayB9XSB9LCB7IGNvbmRpdGlvbnM6IEUsIFtHXTogZCwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtCXSwgW0ddOiBkLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vc3RzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiB2LCBoZWFkZXJzOiB2IH0sIFtHXTogaSB9XSB9LCB7IGVycm9yOiBcIkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFja1wiLCBbR106IGsgfV0gfSwgdywgeyBlbmRwb2ludDogeyB1cmw6IGosIHByb3BlcnRpZXM6IHYsIGhlYWRlcnM6IHYgfSwgW0ddOiBpIH1dIH1dIH0sIHsgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBNaXNzaW5nIFJlZ2lvblwiLCBbR106IGsgfV0gfTtcbmV4cG9ydHMucnVsZVNldCA9IF9kYXRhO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2VuZHBvaW50c18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzXCIpO1xuY29uc3QgcnVsZXNldF8xID0gcmVxdWlyZShcIi4vcnVsZXNldFwiKTtcbmNvbnN0IGRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gKGVuZHBvaW50UGFyYW1zLCBjb250ZXh0ID0ge30pID0+IHtcbiAgICByZXR1cm4gKDAsIHV0aWxfZW5kcG9pbnRzXzEucmVzb2x2ZUVuZHBvaW50KShydWxlc2V0XzEucnVsZVNldCwge1xuICAgICAgICBlbmRwb2ludFBhcmFtczogZW5kcG9pbnRQYXJhbXMsXG4gICAgICAgIGxvZ2dlcjogY29udGV4dC5sb2dnZXIsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IGRlZmF1bHRFbmRwb2ludFJlc29sdmVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1cmxfcGFyc2VyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91cmwtcGFyc2VyXCIpO1xuY29uc3QgdXRpbF9iYXNlNjRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtYmFzZTY0XCIpO1xuY29uc3QgdXRpbF91dGY4XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG5jb25zdCBlbmRwb2ludFJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyXCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+ICh7XG4gICAgYXBpVmVyc2lvbjogXCIyMDExLTA2LTE1XCIsXG4gICAgYmFzZTY0RGVjb2RlcjogY29uZmlnPy5iYXNlNjREZWNvZGVyID8/IHV0aWxfYmFzZTY0XzEuZnJvbUJhc2U2NCxcbiAgICBiYXNlNjRFbmNvZGVyOiBjb25maWc/LmJhc2U2NEVuY29kZXIgPz8gdXRpbF9iYXNlNjRfMS50b0Jhc2U2NCxcbiAgICBkaXNhYmxlSG9zdFByZWZpeDogY29uZmlnPy5kaXNhYmxlSG9zdFByZWZpeCA/PyBmYWxzZSxcbiAgICBlbmRwb2ludFByb3ZpZGVyOiBjb25maWc/LmVuZHBvaW50UHJvdmlkZXIgPz8gZW5kcG9pbnRSZXNvbHZlcl8xLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyLFxuICAgIGV4dGVuc2lvbnM6IGNvbmZpZz8uZXh0ZW5zaW9ucyA/PyBbXSxcbiAgICBsb2dnZXI6IGNvbmZpZz8ubG9nZ2VyID8/IG5ldyBzbWl0aHlfY2xpZW50XzEuTm9PcExvZ2dlcigpLFxuICAgIHNlcnZpY2VJZDogY29uZmlnPy5zZXJ2aWNlSWQgPz8gXCJTVFNcIixcbiAgICB1cmxQYXJzZXI6IGNvbmZpZz8udXJsUGFyc2VyID8/IHVybF9wYXJzZXJfMS5wYXJzZVVybCxcbiAgICB1dGY4RGVjb2RlcjogY29uZmlnPy51dGY4RGVjb2RlciA/PyB1dGlsX3V0ZjhfMS5mcm9tVXRmOCxcbiAgICB1dGY4RW5jb2RlcjogY29uZmlnPy51dGY4RW5jb2RlciA/PyB1dGlsX3V0ZjhfMS50b1V0ZjgsXG59KTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IGdldFJ1bnRpbWVDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IHBhY2thZ2VfanNvbl8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3BhY2thZ2UuanNvblwiKSk7XG5jb25zdCBkZWZhdWx0U3RzUm9sZUFzc3VtZXJzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0U3RzUm9sZUFzc3VtZXJzXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlXCIpO1xuY29uc3QgdXRpbF91c2VyX2FnZW50X25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZVwiKTtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgaGFzaF9ub2RlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9oYXNoLW5vZGVcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JldHJ5XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5XCIpO1xuY29uc3Qgbm9kZV9jb25maWdfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyXCIpO1xuY29uc3Qgbm9kZV9odHRwX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyXCIpO1xuY29uc3QgdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGVcIik7XG5jb25zdCB1dGlsX3JldHJ5XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXJldHJ5XCIpO1xuY29uc3QgcnVudGltZUNvbmZpZ19zaGFyZWRfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWcuc2hhcmVkXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMiA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBnZXRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgICgwLCBzbWl0aHlfY2xpZW50XzIuZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbikocHJvY2Vzcy52ZXJzaW9uKTtcbiAgICBjb25zdCBkZWZhdWx0c01vZGUgPSAoMCwgdXRpbF9kZWZhdWx0c19tb2RlX25vZGVfMS5yZXNvbHZlRGVmYXVsdHNNb2RlQ29uZmlnKShjb25maWcpO1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWdQcm92aWRlciA9ICgpID0+IGRlZmF1bHRzTW9kZSgpLnRoZW4oc21pdGh5X2NsaWVudF8xLmxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGUpO1xuICAgIGNvbnN0IGNsaWVudFNoYXJlZFZhbHVlcyA9ICgwLCBydW50aW1lQ29uZmlnX3NoYXJlZF8xLmdldFJ1bnRpbWVDb25maWcpKGNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY2xpZW50U2hhcmVkVmFsdWVzLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHJ1bnRpbWU6IFwibm9kZVwiLFxuICAgICAgICBkZWZhdWx0c01vZGUsXG4gICAgICAgIGJvZHlMZW5ndGhDaGVja2VyOiBjb25maWc/LmJvZHlMZW5ndGhDaGVja2VyID8/IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xLmNhbGN1bGF0ZUJvZHlMZW5ndGgsXG4gICAgICAgIGNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXI6IGNvbmZpZz8uY3JlZGVudGlhbERlZmF1bHRQcm92aWRlciA/PyAoMCwgZGVmYXVsdFN0c1JvbGVBc3N1bWVyc18xLmRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcikoY3JlZGVudGlhbF9wcm92aWRlcl9ub2RlXzEuZGVmYXVsdFByb3ZpZGVyKSxcbiAgICAgICAgZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyOiBjb25maWc/LmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlciA/P1xuICAgICAgICAgICAgKDAsIHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEuZGVmYXVsdFVzZXJBZ2VudCkoeyBzZXJ2aWNlSWQ6IGNsaWVudFNoYXJlZFZhbHVlcy5zZXJ2aWNlSWQsIGNsaWVudFZlcnNpb246IHBhY2thZ2VfanNvbl8xLmRlZmF1bHQudmVyc2lvbiB9KSxcbiAgICAgICAgbWF4QXR0ZW1wdHM6IGNvbmZpZz8ubWF4QXR0ZW1wdHMgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykobWlkZGxld2FyZV9yZXRyeV8xLk5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMpLFxuICAgICAgICByZWdpb246IGNvbmZpZz8ucmVnaW9uID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TLCBjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1JFR0lPTl9DT05GSUdfRklMRV9PUFRJT05TKSxcbiAgICAgICAgcmVxdWVzdEhhbmRsZXI6IGNvbmZpZz8ucmVxdWVzdEhhbmRsZXIgPz8gbmV3IG5vZGVfaHR0cF9oYW5kbGVyXzEuTm9kZUh0dHBIYW5kbGVyKGRlZmF1bHRDb25maWdQcm92aWRlciksXG4gICAgICAgIHJldHJ5TW9kZTogY29uZmlnPy5yZXRyeU1vZGUgPz9cbiAgICAgICAgICAgICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgICAgICAgICAuLi5taWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFzeW5jICgpID0+IChhd2FpdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIoKSkucmV0cnlNb2RlIHx8IHV0aWxfcmV0cnlfMS5ERUZBVUxUX1JFVFJZX01PREUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgc2hhMjU2OiBjb25maWc/LnNoYTI1NiA/PyBoYXNoX25vZGVfMS5IYXNoLmJpbmQobnVsbCwgXCJzaGEyNTZcIiksXG4gICAgICAgIHN0cmVhbUNvbGxlY3RvcjogY29uZmlnPy5zdHJlYW1Db2xsZWN0b3IgPz8gbm9kZV9odHRwX2hhbmRsZXJfMS5zdHJlYW1Db2xsZWN0b3IsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBjb25maWc/LnVzZUR1YWxzdGFja0VuZHBvaW50ID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfVVNFX0RVQUxTVEFDS19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogY29uZmlnPy51c2VGaXBzRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVJ1bnRpbWVFeHRlbnNpb25zID0gdm9pZCAwO1xuY29uc3QgcmVnaW9uX2NvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IGFzUGFydGlhbCA9ICh0KSA9PiB0O1xuY29uc3QgcmVzb2x2ZVJ1bnRpbWVFeHRlbnNpb25zID0gKHJ1bnRpbWVDb25maWcsIGV4dGVuc2lvbnMpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgICAuLi5hc1BhcnRpYWwoKDAsIHJlZ2lvbl9jb25maWdfcmVzb2x2ZXJfMS5nZXRBd3NSZWdpb25FeHRlbnNpb25Db25maWd1cmF0aW9uKShydW50aW1lQ29uZmlnKSksXG4gICAgICAgIC4uLmFzUGFydGlhbCgoMCwgc21pdGh5X2NsaWVudF8xLmdldERlZmF1bHRFeHRlbnNpb25Db25maWd1cmF0aW9uKShydW50aW1lQ29uZmlnKSksXG4gICAgICAgIC4uLmFzUGFydGlhbCgoMCwgcHJvdG9jb2xfaHR0cF8xLmdldEh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvbikocnVudGltZUNvbmZpZykpLFxuICAgIH07XG4gICAgZXh0ZW5zaW9ucy5mb3JFYWNoKChleHRlbnNpb24pID0+IGV4dGVuc2lvbi5jb25maWd1cmUoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbikpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJ1bnRpbWVDb25maWcsXG4gICAgICAgIC4uLigwLCByZWdpb25fY29uZmlnX3Jlc29sdmVyXzEucmVzb2x2ZUF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pLFxuICAgICAgICAuLi4oMCwgc21pdGh5X2NsaWVudF8xLnJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZykoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiksXG4gICAgICAgIC4uLigwLCBwcm90b2NvbF9odHRwXzEucmVzb2x2ZUh0dHBIYW5kbGVyUnVudGltZUNvbmZpZykoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiksXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucyA9IHJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNUU0NsaWVudCA9IGV4cG9ydHMuX19DbGllbnQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb25cIik7XG5jb25zdCBtaWRkbGV3YXJlX3Nka19zdHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNkay1zdHNcIik7XG5jb25zdCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnRcIik7XG5jb25zdCBjb25maWdfcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfY29udGVudF9sZW5ndGhfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtY29udGVudC1sZW5ndGhcIik7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX0NsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNsaWVudDsgfSB9KTtcbmNvbnN0IEVuZHBvaW50UGFyYW1ldGVyc18xID0gcmVxdWlyZShcIi4vZW5kcG9pbnQvRW5kcG9pbnRQYXJhbWV0ZXJzXCIpO1xuY29uc3QgcnVudGltZUNvbmZpZ18xID0gcmVxdWlyZShcIi4vcnVudGltZUNvbmZpZ1wiKTtcbmNvbnN0IHJ1bnRpbWVFeHRlbnNpb25zXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lRXh0ZW5zaW9uc1wiKTtcbmNsYXNzIFNUU0NsaWVudCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5DbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKC4uLltjb25maWd1cmF0aW9uXSkge1xuICAgICAgICBjb25zdCBfY29uZmlnXzAgPSAoMCwgcnVudGltZUNvbmZpZ18xLmdldFJ1bnRpbWVDb25maWcpKGNvbmZpZ3VyYXRpb24gfHwge30pO1xuICAgICAgICBjb25zdCBfY29uZmlnXzEgPSAoMCwgRW5kcG9pbnRQYXJhbWV0ZXJzXzEucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycykoX2NvbmZpZ18wKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18yID0gKDAsIGNvbmZpZ19yZXNvbHZlcl8xLnJlc29sdmVSZWdpb25Db25maWcpKF9jb25maWdfMSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMyA9ICgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEucmVzb2x2ZUVuZHBvaW50Q29uZmlnKShfY29uZmlnXzIpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzQgPSAoMCwgbWlkZGxld2FyZV9yZXRyeV8xLnJlc29sdmVSZXRyeUNvbmZpZykoX2NvbmZpZ18zKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ181ID0gKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZykoX2NvbmZpZ180KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ182ID0gKDAsIG1pZGRsZXdhcmVfc2RrX3N0c18xLnJlc29sdmVTdHNBdXRoQ29uZmlnKShfY29uZmlnXzUsIHsgc3RzQ2xpZW50Q3RvcjogU1RTQ2xpZW50IH0pO1xuICAgICAgICBjb25zdCBfY29uZmlnXzcgPSAoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEucmVzb2x2ZVVzZXJBZ2VudENvbmZpZykoX2NvbmZpZ182KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ184ID0gKDAsIHJ1bnRpbWVFeHRlbnNpb25zXzEucmVzb2x2ZVJ1bnRpbWVFeHRlbnNpb25zKShfY29uZmlnXzcsIGNvbmZpZ3VyYXRpb24/LmV4dGVuc2lvbnMgfHwgW10pO1xuICAgICAgICBzdXBlcihfY29uZmlnXzgpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IF9jb25maWdfODtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JldHJ5XzEuZ2V0UmV0cnlQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9jb250ZW50X2xlbmd0aF8xLmdldENvbnRlbnRMZW5ndGhQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9ob3N0X2hlYWRlcl8xLmdldEhvc3RIZWFkZXJQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9sb2dnZXJfMS5nZXRMb2dnZXJQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9yZWN1cnNpb25fZGV0ZWN0aW9uXzEuZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luKSh0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1RTQ2xpZW50ID0gU1RTQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19xdWVyeV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcXVlcnlcIik7XG5jbGFzcyBBc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5Bc3N1bWVSb2xlV2l0aFNBTUxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkFzc3VtZVJvbGVXaXRoU0FNTFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgW3R5cGVzXzEuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IFwiQVdTU2VjdXJpdHlUb2tlblNlcnZpY2VWMjAxMTA2MTVcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiQXNzdW1lUm9sZVdpdGhTQU1MXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuc2VfQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXNzdW1lUm9sZVdpdGhTQU1MQ29tbWFuZCA9IEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLmdldEF3c0F1dGhQbHVnaW4pKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBjbGllbnRTdGFjay5jb25jYXQodGhpcy5taWRkbGV3YXJlU3RhY2spO1xuICAgICAgICBjb25zdCB7IGxvZ2dlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwiU1RTQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgW3R5cGVzXzEuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IFwiQVdTU2VjdXJpdHlUb2tlblNlcnZpY2VWMjAxMTA2MTVcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9EZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuZGVfRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kID0gRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEdldEFjY2Vzc0tleUluZm9Db21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldEFjY2Vzc0tleUluZm9Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IChfKSA9PiBfLFxuICAgICAgICAgICAgW3R5cGVzXzEuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IFwiQVdTU2VjdXJpdHlUb2tlblNlcnZpY2VWMjAxMTA2MTVcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiR2V0QWNjZXNzS2V5SW5mb1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0dldEFjY2Vzc0tleUluZm9Db21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2V0QWNjZXNzS2V5SW5mb0NvbW1hbmQgPSBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldENhbGxlcklkZW50aXR5Q29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX3NpZ25pbmdfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLXNpZ25pbmdcIik7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBBd3NfcXVlcnlfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3F1ZXJ5XCIpO1xuY2xhc3MgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUdsb2JhbEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUdsb2JhbEVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEdldENhbGxlcklkZW50aXR5Q29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldENhbGxlcklkZW50aXR5Q29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBbdHlwZXNfMS5TTUlUSFlfQ09OVEVYVF9LRVldOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZTogXCJBV1NTZWN1cml0eVRva2VuU2VydmljZVYyMDExMDYxNVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJHZXRDYWxsZXJJZGVudGl0eVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0dldENhbGxlcklkZW50aXR5Q29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5kZV9HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgPSBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3F1ZXJ5XzEgPSByZXF1aXJlKFwiLi4vcHJvdG9jb2xzL0F3c19xdWVyeVwiKTtcbmNsYXNzIEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQgZXh0ZW5kcyBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZCB7XG4gICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgVXNlR2xvYmFsRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlR2xvYmFsRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgRW5kcG9pbnQ6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwiZW5kcG9pbnRcIiB9LFxuICAgICAgICAgICAgUmVnaW9uOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInJlZ2lvblwiIH0sXG4gICAgICAgICAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuICAgIHJlc29sdmVNaWRkbGV3YXJlKGNsaWVudFN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zZXJkZV8xLmdldFNlcmRlUGx1Z2luKShjb25maWd1cmF0aW9uLCB0aGlzLnNlcmlhbGl6ZSwgdGhpcy5kZXNlcmlhbGl6ZSkpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfZW5kcG9pbnRfMS5nZXRFbmRwb2ludFBsdWdpbikoY29uZmlndXJhdGlvbiwgR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikoY29uZmlndXJhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJTVFNDbGllbnRcIjtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIkdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogKF8pID0+IF8sXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuR2V0RmVkZXJhdGlvblRva2VuUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBbdHlwZXNfMS5TTUlUSFlfQ09OVEVYVF9LRVldOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZTogXCJBV1NTZWN1cml0eVRva2VuU2VydmljZVYyMDExMDYxNVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJHZXRGZWRlcmF0aW9uVG9rZW5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcXVlcnlfMS5zZV9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLmRlX0dldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kID0gR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBleHBvcnRzLiRDb21tYW5kID0gdm9pZCAwO1xuY29uc3QgbWlkZGxld2FyZV9zaWduaW5nXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zaWduaW5nXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2VyZGVfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kOyB9IH0pO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3R5cGVzXCIpO1xuY29uc3QgbW9kZWxzXzBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbHMvbW9kZWxzXzBcIik7XG5jb25zdCBBd3NfcXVlcnlfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3F1ZXJ5XCIpO1xuY2xhc3MgR2V0U2Vzc2lvblRva2VuQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VHbG9iYWxFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VHbG9iYWxFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBHZXRTZXNzaW9uVG9rZW5Db21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NpZ25pbmdfMS5nZXRBd3NBdXRoUGx1Z2luKShjb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIlNUU0NsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiR2V0U2Vzc2lvblRva2VuQ29tbWFuZFwiO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiAoXykgPT4gXyxcbiAgICAgICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5HZXRTZXNzaW9uVG9rZW5SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIFt0eXBlc18xLlNNSVRIWV9DT05URVhUX0tFWV06IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBcIkFXU1NlY3VyaXR5VG9rZW5TZXJ2aWNlVjIwMTEwNjE1XCIsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBcIkdldFNlc3Npb25Ub2tlblwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SGFuZGxlciB9ID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnJlc29sdmUoKHJlcXVlc3QpID0+IHJlcXVlc3RIYW5kbGVyLmhhbmRsZShyZXF1ZXN0LnJlcXVlc3QsIG9wdGlvbnMgfHwge30pLCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19xdWVyeV8xLnNlX0dldFNlc3Npb25Ub2tlbkNvbW1hbmQpKGlucHV0LCBjb250ZXh0KTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUob3V0cHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3F1ZXJ5XzEuZGVfR2V0U2Vzc2lvblRva2VuQ29tbWFuZCkob3V0cHV0LCBjb250ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkdldFNlc3Npb25Ub2tlbkNvbW1hbmQgPSBHZXRTZXNzaW9uVG9rZW5Db21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1RTID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IEFzc3VtZVJvbGVDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9Bc3N1bWVSb2xlQ29tbWFuZFwiKTtcbmNvbnN0IEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRcIik7XG5jb25zdCBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRcIik7XG5jb25zdCBEZWNvZGVBdXRob3JpemF0aW9uTWVzc2FnZUNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0RlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZFwiKTtcbmNvbnN0IEdldEFjY2Vzc0tleUluZm9Db21tYW5kXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kcy9HZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZFwiKTtcbmNvbnN0IEdldENhbGxlcklkZW50aXR5Q29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kXCIpO1xuY29uc3QgR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvR2V0RmVkZXJhdGlvblRva2VuQ29tbWFuZFwiKTtcbmNvbnN0IEdldFNlc3Npb25Ub2tlbkNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0dldFNlc3Npb25Ub2tlbkNvbW1hbmRcIik7XG5jb25zdCBTVFNDbGllbnRfMSA9IHJlcXVpcmUoXCIuL1NUU0NsaWVudFwiKTtcbmNvbnN0IGNvbW1hbmRzID0ge1xuICAgIEFzc3VtZVJvbGVDb21tYW5kOiBBc3N1bWVSb2xlQ29tbWFuZF8xLkFzc3VtZVJvbGVDb21tYW5kLFxuICAgIEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmQ6IEFzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRfMS5Bc3N1bWVSb2xlV2l0aFNBTUxDb21tYW5kLFxuICAgIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kOiBBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5Q29tbWFuZF8xLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlDb21tYW5kLFxuICAgIERlY29kZUF1dGhvcml6YXRpb25NZXNzYWdlQ29tbWFuZDogRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kXzEuRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kLFxuICAgIEdldEFjY2Vzc0tleUluZm9Db21tYW5kOiBHZXRBY2Nlc3NLZXlJbmZvQ29tbWFuZF8xLkdldEFjY2Vzc0tleUluZm9Db21tYW5kLFxuICAgIEdldENhbGxlcklkZW50aXR5Q29tbWFuZDogR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kXzEuR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kLFxuICAgIEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmQ6IEdldEZlZGVyYXRpb25Ub2tlbkNvbW1hbmRfMS5HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kLFxuICAgIEdldFNlc3Npb25Ub2tlbkNvbW1hbmQ6IEdldFNlc3Npb25Ub2tlbkNvbW1hbmRfMS5HZXRTZXNzaW9uVG9rZW5Db21tYW5kLFxufTtcbmNsYXNzIFNUUyBleHRlbmRzIFNUU0NsaWVudF8xLlNUU0NsaWVudCB7XG59XG5leHBvcnRzLlNUUyA9IFNUUztcbigwLCBzbWl0aHlfY2xpZW50XzEuY3JlYXRlQWdncmVnYXRlZENsaWVudCkoY29tbWFuZHMsIFNUUyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Fzc3VtZVJvbGVDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Fzc3VtZVJvbGVXaXRoU0FNTENvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eUNvbW1hbmRcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRGVjb2RlQXV0aG9yaXphdGlvbk1lc3NhZ2VDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0dldEFjY2Vzc0tleUluZm9Db21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0dldENhbGxlcklkZW50aXR5Q29tbWFuZFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9HZXRGZWRlcmF0aW9uVG9rZW5Db21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0dldFNlc3Npb25Ub2tlbkNvbW1hbmRcIiksIGV4cG9ydHMpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tb2RlbHNfMFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IGV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gdm9pZCAwO1xuY29uc3QgZGVmYXVsdFN0c1JvbGVBc3N1bWVyc18xID0gcmVxdWlyZShcIi4vZGVmYXVsdFN0c1JvbGVBc3N1bWVyc1wiKTtcbmNvbnN0IFNUU0NsaWVudF8xID0gcmVxdWlyZShcIi4vU1RTQ2xpZW50XCIpO1xuY29uc3QgZ2V0Q3VzdG9taXphYmxlU3RzQ2xpZW50Q3RvciA9IChiYXNlQ3RvciwgY3VzdG9taXphdGlvbnMpID0+IHtcbiAgICBpZiAoIWN1c3RvbWl6YXRpb25zKVxuICAgICAgICByZXR1cm4gYmFzZUN0b3I7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gY2xhc3MgQ3VzdG9taXphYmxlU1RTQ2xpZW50IGV4dGVuZHMgYmFzZUN0b3Ige1xuICAgICAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1c3RvbWl6YXRpb24gb2YgY3VzdG9taXphdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKGN1c3RvbWl6YXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbn07XG5jb25zdCBnZXREZWZhdWx0Um9sZUFzc3VtZXIgPSAoc3RzT3B0aW9ucyA9IHt9LCBzdHNQbHVnaW5zKSA9PiAoMCwgZGVmYXVsdFN0c1JvbGVBc3N1bWVyc18xLmdldERlZmF1bHRSb2xlQXNzdW1lcikoc3RzT3B0aW9ucywgZ2V0Q3VzdG9taXphYmxlU3RzQ2xpZW50Q3RvcihTVFNDbGllbnRfMS5TVFNDbGllbnQsIHN0c1BsdWdpbnMpKTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFJvbGVBc3N1bWVyID0gZ2V0RGVmYXVsdFJvbGVBc3N1bWVyO1xuY29uc3QgZ2V0RGVmYXVsdFJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5ID0gKHN0c09wdGlvbnMgPSB7fSwgc3RzUGx1Z2lucykgPT4gKDAsIGRlZmF1bHRTdHNSb2xlQXNzdW1lcnNfMS5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpKHN0c09wdGlvbnMsIGdldEN1c3RvbWl6YWJsZVN0c0NsaWVudEN0b3IoU1RTQ2xpZW50XzEuU1RTQ2xpZW50LCBzdHNQbHVnaW5zKSk7XG5leHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eSA9IGdldERlZmF1bHRSb2xlQXNzdW1lcldpdGhXZWJJZGVudGl0eTtcbmNvbnN0IGRlY29yYXRlRGVmYXVsdENyZWRlbnRpYWxQcm92aWRlciA9IChwcm92aWRlcikgPT4gKGlucHV0KSA9PiBwcm92aWRlcih7XG4gICAgcm9sZUFzc3VtZXI6ICgwLCBleHBvcnRzLmdldERlZmF1bHRSb2xlQXNzdW1lcikoaW5wdXQpLFxuICAgIHJvbGVBc3N1bWVyV2l0aFdlYklkZW50aXR5OiAoMCwgZXhwb3J0cy5nZXREZWZhdWx0Um9sZUFzc3VtZXJXaXRoV2ViSWRlbnRpdHkpKGlucHV0KSxcbiAgICAuLi5pbnB1dCxcbn0pO1xuZXhwb3J0cy5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIgPSBkZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TVFNTZXJ2aWNlRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NUU0NsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9TVFNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29tbWFuZHNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbW9kZWxzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2RlZmF1bHRSb2xlQXNzdW1lcnNcIiksIGV4cG9ydHMpO1xudmFyIFNUU1NlcnZpY2VFeGNlcHRpb25fMSA9IHJlcXVpcmUoXCIuL21vZGVscy9TVFNTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1RTU2VydmljZUV4Y2VwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU1RTU2VydmljZUV4Y2VwdGlvbl8xLlNUU1NlcnZpY2VFeGNlcHRpb247IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ydWxlU2V0ID0gdm9pZCAwO1xuY29uc3QgcSA9IFwicmVxdWlyZWRcIiwgciA9IFwiZm5cIiwgcyA9IFwiYXJndlwiLCB0ID0gXCJyZWZcIjtcbmNvbnN0IGEgPSBcImlzU2V0XCIsIGIgPSBcInRyZWVcIiwgYyA9IFwiZXJyb3JcIiwgZCA9IFwiZW5kcG9pbnRcIiwgZSA9IFwiUGFydGl0aW9uUmVzdWx0XCIsIGYgPSB7IFtxXTogZmFsc2UsIFwidHlwZVwiOiBcIlN0cmluZ1wiIH0sIGcgPSB7IFtxXTogdHJ1ZSwgXCJkZWZhdWx0XCI6IGZhbHNlLCBcInR5cGVcIjogXCJCb29sZWFuXCIgfSwgaCA9IHsgW3RdOiBcIkVuZHBvaW50XCIgfSwgaSA9IHsgW3JdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3NdOiBbeyBbdF06IFwiVXNlRklQU1wiIH0sIHRydWVdIH0sIGogPSB7IFtyXTogXCJib29sZWFuRXF1YWxzXCIsIFtzXTogW3sgW3RdOiBcIlVzZUR1YWxTdGFja1wiIH0sIHRydWVdIH0sIGsgPSB7fSwgbCA9IHsgW3JdOiBcImJvb2xlYW5FcXVhbHNcIiwgW3NdOiBbdHJ1ZSwgeyBbcl06IFwiZ2V0QXR0clwiLCBbc106IFt7IFt0XTogZSB9LCBcInN1cHBvcnRzRklQU1wiXSB9XSB9LCBtID0geyBbcl06IFwiYm9vbGVhbkVxdWFsc1wiLCBbc106IFt0cnVlLCB7IFtyXTogXCJnZXRBdHRyXCIsIFtzXTogW3sgW3RdOiBlIH0sIFwic3VwcG9ydHNEdWFsU3RhY2tcIl0gfV0gfSwgbiA9IFtpXSwgbyA9IFtqXSwgcCA9IFt7IFt0XTogXCJSZWdpb25cIiB9XTtcbmNvbnN0IF9kYXRhID0geyB2ZXJzaW9uOiBcIjEuMFwiLCBwYXJhbWV0ZXJzOiB7IFJlZ2lvbjogZiwgVXNlRHVhbFN0YWNrOiBnLCBVc2VGSVBTOiBnLCBFbmRwb2ludDogZiB9LCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3JdOiBhLCBbc106IFtoXSB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IG4sIGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkXCIsIHR5cGU6IGMgfSwgeyB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogbywgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBjIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBoLCBwcm9wZXJ0aWVzOiBrLCBoZWFkZXJzOiBrIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyB0eXBlOiBiLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3JdOiBhLCBbc106IHAgfV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbcl06IFwiYXdzLnBhcnRpdGlvblwiLCBbc106IHAsIGFzc2lnbjogZSB9XSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtpLCBqXSwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtsLCBtXSwgdHlwZTogYiwgcnVsZXM6IFt7IHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9iZWRyb2NrLXJ1bnRpbWUtZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaywgaGVhZGVyczogayB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgZXJyb3I6IFwiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBlbmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBvbmUgb3IgYm90aFwiLCB0eXBlOiBjIH1dIH0sIHsgY29uZGl0aW9uczogbiwgdHlwZTogYiwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtsXSwgdHlwZTogYiwgcnVsZXM6IFt7IHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9iZWRyb2NrLXJ1bnRpbWUtZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogaywgaGVhZGVyczogayB9LCB0eXBlOiBkIH1dIH1dIH0sIHsgZXJyb3I6IFwiRklQUyBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IEZJUFNcIiwgdHlwZTogYyB9XSB9LCB7IGNvbmRpdGlvbnM6IG8sIHR5cGU6IGIsIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbbV0sIHR5cGU6IGIsIHJ1bGVzOiBbeyB0eXBlOiBiLCBydWxlczogW3sgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vYmVkcm9jay1ydW50aW1lLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBrLCBoZWFkZXJzOiBrIH0sIHR5cGU6IGQgfV0gfV0gfSwgeyBlcnJvcjogXCJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBEdWFsU3RhY2tcIiwgdHlwZTogYyB9XSB9LCB7IHR5cGU6IGIsIHJ1bGVzOiBbeyBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9iZWRyb2NrLXJ1bnRpbWUue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IGssIGhlYWRlcnM6IGsgfSwgdHlwZTogZCB9XSB9XSB9XSB9LCB7IGVycm9yOiBcIkludmFsaWQgQ29uZmlndXJhdGlvbjogTWlzc2luZyBSZWdpb25cIiwgdHlwZTogYyB9XSB9XSB9O1xuZXhwb3J0cy5ydWxlU2V0ID0gX2RhdGE7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfZW5kcG9pbnRzXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHNcIik7XG5jb25zdCBydWxlc2V0XzEgPSByZXF1aXJlKFwiLi9ydWxlc2V0XCIpO1xuY29uc3QgZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSAoZW5kcG9pbnRQYXJhbXMsIGNvbnRleHQgPSB7fSkgPT4ge1xuICAgIHJldHVybiAoMCwgdXRpbF9lbmRwb2ludHNfMS5yZXNvbHZlRW5kcG9pbnQpKHJ1bGVzZXRfMS5ydWxlU2V0LCB7XG4gICAgICAgIGVuZHBvaW50UGFyYW1zOiBlbmRwb2ludFBhcmFtcyxcbiAgICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlcixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IHVybF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3VybC1wYXJzZXJcIik7XG5jb25zdCB1dGlsX2Jhc2U2NF8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1iYXNlNjRcIik7XG5jb25zdCB1dGlsX3V0ZjhfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtdXRmOFwiKTtcbmNvbnN0IGVuZHBvaW50UmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L2VuZHBvaW50UmVzb2x2ZXJcIik7XG5jb25zdCBnZXRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4gKHtcbiAgICBhcGlWZXJzaW9uOiBcIjIwMjMtMDktMzBcIixcbiAgICBiYXNlNjREZWNvZGVyOiBjb25maWc/LmJhc2U2NERlY29kZXIgPz8gdXRpbF9iYXNlNjRfMS5mcm9tQmFzZTY0LFxuICAgIGJhc2U2NEVuY29kZXI6IGNvbmZpZz8uYmFzZTY0RW5jb2RlciA/PyB1dGlsX2Jhc2U2NF8xLnRvQmFzZTY0LFxuICAgIGRpc2FibGVIb3N0UHJlZml4OiBjb25maWc/LmRpc2FibGVIb3N0UHJlZml4ID8/IGZhbHNlLFxuICAgIGVuZHBvaW50UHJvdmlkZXI6IGNvbmZpZz8uZW5kcG9pbnRQcm92aWRlciA/PyBlbmRwb2ludFJlc29sdmVyXzEuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIsXG4gICAgZXh0ZW5zaW9uczogY29uZmlnPy5leHRlbnNpb25zID8/IFtdLFxuICAgIGxvZ2dlcjogY29uZmlnPy5sb2dnZXIgPz8gbmV3IHNtaXRoeV9jbGllbnRfMS5Ob09wTG9nZ2VyKCksXG4gICAgc2VydmljZUlkOiBjb25maWc/LnNlcnZpY2VJZCA/PyBcIkJlZHJvY2sgUnVudGltZVwiLFxuICAgIHVybFBhcnNlcjogY29uZmlnPy51cmxQYXJzZXIgPz8gdXJsX3BhcnNlcl8xLnBhcnNlVXJsLFxuICAgIHV0ZjhEZWNvZGVyOiBjb25maWc/LnV0ZjhEZWNvZGVyID8/IHV0aWxfdXRmOF8xLmZyb21VdGY4LFxuICAgIHV0ZjhFbmNvZGVyOiBjb25maWc/LnV0ZjhFbmNvZGVyID8/IHV0aWxfdXRmOF8xLnRvVXRmOCxcbn0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gZ2V0UnVudGltZUNvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgcGFja2FnZV9qc29uXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpKTtcbmNvbnN0IGNsaWVudF9zdHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtc3RzXCIpO1xuY29uc3QgY3JlZGVudGlhbF9wcm92aWRlcl9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlXCIpO1xuY29uc3QgdXRpbF91c2VyX2FnZW50X25vZGVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZVwiKTtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgZXZlbnRzdHJlYW1fc2VyZGVfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvZXZlbnRzdHJlYW0tc2VyZGUtbm9kZVwiKTtcbmNvbnN0IGhhc2hfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvaGFzaC1ub2RlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbmNvbnN0IG5vZGVfaHR0cF9oYW5kbGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlclwiKTtcbmNvbnN0IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1ib2R5LWxlbmd0aC1ub2RlXCIpO1xuY29uc3QgdXRpbF9yZXRyeV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1yZXRyeVwiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfc2hhcmVkXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lQ29uZmlnLnNoYXJlZFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1dGlsX2RlZmF1bHRzX21vZGVfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLW5vZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzIgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICAoMCwgc21pdGh5X2NsaWVudF8yLmVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb24pKHByb2Nlc3MudmVyc2lvbik7XG4gICAgY29uc3QgZGVmYXVsdHNNb2RlID0gKDAsIHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEucmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZykoY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSAoKSA9PiBkZWZhdWx0c01vZGUoKS50aGVuKHNtaXRoeV9jbGllbnRfMS5sb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlKTtcbiAgICBjb25zdCBjbGllbnRTaGFyZWRWYWx1ZXMgPSAoMCwgcnVudGltZUNvbmZpZ19zaGFyZWRfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNsaWVudFNoYXJlZFZhbHVlcyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBydW50aW1lOiBcIm5vZGVcIixcbiAgICAgICAgZGVmYXVsdHNNb2RlLFxuICAgICAgICBib2R5TGVuZ3RoQ2hlY2tlcjogY29uZmlnPy5ib2R5TGVuZ3RoQ2hlY2tlciA/PyB1dGlsX2JvZHlfbGVuZ3RoX25vZGVfMS5jYWxjdWxhdGVCb2R5TGVuZ3RoLFxuICAgICAgICBjcmVkZW50aWFsRGVmYXVsdFByb3ZpZGVyOiBjb25maWc/LmNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXIgPz8gKDAsIGNsaWVudF9zdHNfMS5kZWNvcmF0ZURlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIpKGNyZWRlbnRpYWxfcHJvdmlkZXJfbm9kZV8xLmRlZmF1bHRQcm92aWRlciksXG4gICAgICAgIGRlZmF1bHRVc2VyQWdlbnRQcm92aWRlcjogY29uZmlnPy5kZWZhdWx0VXNlckFnZW50UHJvdmlkZXIgPz9cbiAgICAgICAgICAgICgwLCB1dGlsX3VzZXJfYWdlbnRfbm9kZV8xLmRlZmF1bHRVc2VyQWdlbnQpKHsgc2VydmljZUlkOiBjbGllbnRTaGFyZWRWYWx1ZXMuc2VydmljZUlkLCBjbGllbnRWZXJzaW9uOiBwYWNrYWdlX2pzb25fMS5kZWZhdWx0LnZlcnNpb24gfSksXG4gICAgICAgIGV2ZW50U3RyZWFtU2VyZGVQcm92aWRlcjogY29uZmlnPy5ldmVudFN0cmVhbVNlcmRlUHJvdmlkZXIgPz8gZXZlbnRzdHJlYW1fc2VyZGVfbm9kZV8xLmV2ZW50U3RyZWFtU2VyZGVQcm92aWRlcixcbiAgICAgICAgbWF4QXR0ZW1wdHM6IGNvbmZpZz8ubWF4QXR0ZW1wdHMgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykobWlkZGxld2FyZV9yZXRyeV8xLk5PREVfTUFYX0FUVEVNUFRfQ09ORklHX09QVElPTlMpLFxuICAgICAgICByZWdpb246IGNvbmZpZz8ucmVnaW9uID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfUkVHSU9OX0NPTkZJR19PUFRJT05TLCBjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1JFR0lPTl9DT05GSUdfRklMRV9PUFRJT05TKSxcbiAgICAgICAgcmVxdWVzdEhhbmRsZXI6IGNvbmZpZz8ucmVxdWVzdEhhbmRsZXIgPz8gbmV3IG5vZGVfaHR0cF9oYW5kbGVyXzEuTm9kZUh0dHBIYW5kbGVyKGRlZmF1bHRDb25maWdQcm92aWRlciksXG4gICAgICAgIHJldHJ5TW9kZTogY29uZmlnPy5yZXRyeU1vZGUgPz9cbiAgICAgICAgICAgICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKHtcbiAgICAgICAgICAgICAgICAuLi5taWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9SRVRSWV9NT0RFX0NPTkZJR19PUFRJT05TLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFzeW5jICgpID0+IChhd2FpdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIoKSkucmV0cnlNb2RlIHx8IHV0aWxfcmV0cnlfMS5ERUZBVUxUX1JFVFJZX01PREUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgc2hhMjU2OiBjb25maWc/LnNoYTI1NiA/PyBoYXNoX25vZGVfMS5IYXNoLmJpbmQobnVsbCwgXCJzaGEyNTZcIiksXG4gICAgICAgIHN0cmVhbUNvbGxlY3RvcjogY29uZmlnPy5zdHJlYW1Db2xsZWN0b3IgPz8gbm9kZV9odHRwX2hhbmRsZXJfMS5zdHJlYW1Db2xsZWN0b3IsXG4gICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBjb25maWc/LnVzZUR1YWxzdGFja0VuZHBvaW50ID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvbmZpZ19yZXNvbHZlcl8xLk5PREVfVVNFX0RVQUxTVEFDS19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogY29uZmlnPy51c2VGaXBzRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUyksXG4gICAgfTtcbn07XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSBnZXRSdW50aW1lQ29uZmlnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVJ1bnRpbWVFeHRlbnNpb25zID0gdm9pZCAwO1xuY29uc3QgcmVnaW9uX2NvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBwcm90b2NvbF9odHRwXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9wcm90b2NvbC1odHRwXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IGFzUGFydGlhbCA9ICh0KSA9PiB0O1xuY29uc3QgcmVzb2x2ZVJ1bnRpbWVFeHRlbnNpb25zID0gKHJ1bnRpbWVDb25maWcsIGV4dGVuc2lvbnMpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgICAuLi5hc1BhcnRpYWwoKDAsIHJlZ2lvbl9jb25maWdfcmVzb2x2ZXJfMS5nZXRBd3NSZWdpb25FeHRlbnNpb25Db25maWd1cmF0aW9uKShydW50aW1lQ29uZmlnKSksXG4gICAgICAgIC4uLmFzUGFydGlhbCgoMCwgc21pdGh5X2NsaWVudF8xLmdldERlZmF1bHRFeHRlbnNpb25Db25maWd1cmF0aW9uKShydW50aW1lQ29uZmlnKSksXG4gICAgICAgIC4uLmFzUGFydGlhbCgoMCwgcHJvdG9jb2xfaHR0cF8xLmdldEh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvbikocnVudGltZUNvbmZpZykpLFxuICAgIH07XG4gICAgZXh0ZW5zaW9ucy5mb3JFYWNoKChleHRlbnNpb24pID0+IGV4dGVuc2lvbi5jb25maWd1cmUoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbikpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJ1bnRpbWVDb25maWcsXG4gICAgICAgIC4uLigwLCByZWdpb25fY29uZmlnX3Jlc29sdmVyXzEucmVzb2x2ZUF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pLFxuICAgICAgICAuLi4oMCwgc21pdGh5X2NsaWVudF8xLnJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZykoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiksXG4gICAgICAgIC4uLigwLCBwcm90b2NvbF9odHRwXzEucmVzb2x2ZUh0dHBIYW5kbGVyUnVudGltZUNvbmZpZykoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiksXG4gICAgfTtcbn07XG5leHBvcnRzLnJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucyA9IHJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJlZHJvY2tSdW50aW1lQ2xpZW50ID0gZXhwb3J0cy5fX0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyXCIpO1xuY29uc3QgbWlkZGxld2FyZV9sb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlclwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmVjdXJzaW9uX2RldGVjdGlvbl8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvblwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfc2lnbmluZ18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc2lnbmluZ1wiKTtcbmNvbnN0IG1pZGRsZXdhcmVfdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudFwiKTtcbmNvbnN0IGNvbmZpZ19yZXNvbHZlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvY29uZmlnLXJlc29sdmVyXCIpO1xuY29uc3QgZXZlbnRzdHJlYW1fc2VyZGVfY29uZmlnX3Jlc29sdmVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9ldmVudHN0cmVhbS1zZXJkZS1jb25maWctcmVzb2x2ZXJcIik7XG5jb25zdCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoXCIpO1xuY29uc3QgbWlkZGxld2FyZV9lbmRwb2ludF8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludFwiKTtcbmNvbnN0IG1pZGRsZXdhcmVfcmV0cnlfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtcmV0cnlcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19DbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5DbGllbnQ7IH0gfSk7XG5jb25zdCBFbmRwb2ludFBhcmFtZXRlcnNfMSA9IHJlcXVpcmUoXCIuL2VuZHBvaW50L0VuZHBvaW50UGFyYW1ldGVyc1wiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWVDb25maWdcIik7XG5jb25zdCBydW50aW1lRXh0ZW5zaW9uc18xID0gcmVxdWlyZShcIi4vcnVudGltZUV4dGVuc2lvbnNcIik7XG5jbGFzcyBCZWRyb2NrUnVudGltZUNsaWVudCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5DbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKC4uLltjb25maWd1cmF0aW9uXSkge1xuICAgICAgICBjb25zdCBfY29uZmlnXzAgPSAoMCwgcnVudGltZUNvbmZpZ18xLmdldFJ1bnRpbWVDb25maWcpKGNvbmZpZ3VyYXRpb24gfHwge30pO1xuICAgICAgICBjb25zdCBfY29uZmlnXzEgPSAoMCwgRW5kcG9pbnRQYXJhbWV0ZXJzXzEucmVzb2x2ZUNsaWVudEVuZHBvaW50UGFyYW1ldGVycykoX2NvbmZpZ18wKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18yID0gKDAsIGNvbmZpZ19yZXNvbHZlcl8xLnJlc29sdmVSZWdpb25Db25maWcpKF9jb25maWdfMSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMyA9ICgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEucmVzb2x2ZUVuZHBvaW50Q29uZmlnKShfY29uZmlnXzIpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzQgPSAoMCwgbWlkZGxld2FyZV9yZXRyeV8xLnJlc29sdmVSZXRyeUNvbmZpZykoX2NvbmZpZ18zKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ181ID0gKDAsIG1pZGRsZXdhcmVfaG9zdF9oZWFkZXJfMS5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZykoX2NvbmZpZ180KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ182ID0gKDAsIG1pZGRsZXdhcmVfc2lnbmluZ18xLnJlc29sdmVBd3NBdXRoQ29uZmlnKShfY29uZmlnXzUpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzcgPSAoMCwgbWlkZGxld2FyZV91c2VyX2FnZW50XzEucmVzb2x2ZVVzZXJBZ2VudENvbmZpZykoX2NvbmZpZ182KTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ184ID0gKDAsIGV2ZW50c3RyZWFtX3NlcmRlX2NvbmZpZ19yZXNvbHZlcl8xLnJlc29sdmVFdmVudFN0cmVhbVNlcmRlQ29uZmlnKShfY29uZmlnXzcpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzkgPSAoMCwgcnVudGltZUV4dGVuc2lvbnNfMS5yZXNvbHZlUnVudGltZUV4dGVuc2lvbnMpKF9jb25maWdfOCwgY29uZmlndXJhdGlvbj8uZXh0ZW5zaW9ucyB8fCBbXSk7XG4gICAgICAgIHN1cGVyKF9jb25maWdfOSk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX2NvbmZpZ185O1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfcmV0cnlfMS5nZXRSZXRyeVBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2NvbnRlbnRfbGVuZ3RoXzEuZ2V0Q29udGVudExlbmd0aFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2hvc3RfaGVhZGVyXzEuZ2V0SG9zdEhlYWRlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2xvZ2dlcl8xLmdldExvZ2dlclBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3JlY3Vyc2lvbl9kZXRlY3Rpb25fMS5nZXRSZWN1cnNpb25EZXRlY3Rpb25QbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9zaWduaW5nXzEuZ2V0QXdzQXV0aFBsdWdpbikodGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3VzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRQbHVnaW4pKHRoaXMuY29uZmlnKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5leHBvcnRzLkJlZHJvY2tSdW50aW1lQ2xpZW50ID0gQmVkcm9ja1J1bnRpbWVDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24gPSBleHBvcnRzLl9fU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX1NlcnZpY2VFeGNlcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeV9jbGllbnRfMS5TZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuY2xhc3MgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLlNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBCZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbiA9IEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLlJlc3BvbnNlU3RyZWFtRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5QYXlsb2FkUGFydEZpbHRlclNlbnNpdGl2ZUxvZyA9IGV4cG9ydHMuSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5JbnZva2VNb2RlbFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gZXhwb3J0cy5JbnZva2VNb2RlbFJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2cgPSBleHBvcnRzLlJlc3BvbnNlU3RyZWFtID0gZXhwb3J0cy5Nb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uID0gZXhwb3J0cy5WYWxpZGF0aW9uRXhjZXB0aW9uID0gZXhwb3J0cy5UaHJvdHRsaW5nRXhjZXB0aW9uID0gZXhwb3J0cy5TZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvbiA9IGV4cG9ydHMuUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiA9IGV4cG9ydHMuTW9kZWxUaW1lb3V0RXhjZXB0aW9uID0gZXhwb3J0cy5Nb2RlbE5vdFJlYWR5RXhjZXB0aW9uID0gZXhwb3J0cy5Nb2RlbEVycm9yRXhjZXB0aW9uID0gZXhwb3J0cy5JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiA9IGV4cG9ydHMuQWNjZXNzRGVuaWVkRXhjZXB0aW9uID0gdm9pZCAwO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbmNvbnN0IEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uXCIpO1xuY2xhc3MgQWNjZXNzRGVuaWVkRXhjZXB0aW9uIGV4dGVuZHMgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uXzEuQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiQWNjZXNzRGVuaWVkRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBY2Nlc3NEZW5pZWRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQWNjZXNzRGVuaWVkRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5BY2Nlc3NEZW5pZWRFeGNlcHRpb24gPSBBY2Nlc3NEZW5pZWRFeGNlcHRpb247XG5jbGFzcyBJbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiBleHRlbmRzIEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbl8xLkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwic2VydmVyXCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnRlcm5hbFNlcnZlckV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwic2VydmVyXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnRlcm5hbFNlcnZlckV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24gPSBJbnRlcm5hbFNlcnZlckV4Y2VwdGlvbjtcbmNsYXNzIE1vZGVsRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb25fMS5CZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJNb2RlbEVycm9yRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNb2RlbEVycm9yRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIE1vZGVsRXJyb3JFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFN0YXR1c0NvZGUgPSBvcHRzLm9yaWdpbmFsU3RhdHVzQ29kZTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZU5hbWUgPSBvcHRzLnJlc291cmNlTmFtZTtcbiAgICB9XG59XG5leHBvcnRzLk1vZGVsRXJyb3JFeGNlcHRpb24gPSBNb2RlbEVycm9yRXhjZXB0aW9uO1xuY2xhc3MgTW9kZWxOb3RSZWFkeUV4Y2VwdGlvbiBleHRlbmRzIEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbl8xLkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIk1vZGVsTm90UmVhZHlFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIk1vZGVsTm90UmVhZHlFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTW9kZWxOb3RSZWFkeUV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuTW9kZWxOb3RSZWFkeUV4Y2VwdGlvbiA9IE1vZGVsTm90UmVhZHlFeGNlcHRpb247XG5jbGFzcyBNb2RlbFRpbWVvdXRFeGNlcHRpb24gZXh0ZW5kcyBCZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb25fMS5CZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJNb2RlbFRpbWVvdXRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIk1vZGVsVGltZW91dEV4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNb2RlbFRpbWVvdXRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLk1vZGVsVGltZW91dEV4Y2VwdGlvbiA9IE1vZGVsVGltZW91dEV4Y2VwdGlvbjtcbmNsYXNzIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBCZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb25fMS5CZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gPSBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uO1xuY2xhc3MgU2VydmljZVF1b3RhRXhjZWVkZWRFeGNlcHRpb24gZXh0ZW5kcyBCZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb25fMS5CZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJTZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU2VydmljZVF1b3RhRXhjZWVkZWRFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgU2VydmljZVF1b3RhRXhjZWVkZWRFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VRdW90YUV4Y2VlZGVkRXhjZXB0aW9uID0gU2VydmljZVF1b3RhRXhjZWVkZWRFeGNlcHRpb247XG5jbGFzcyBUaHJvdHRsaW5nRXhjZXB0aW9uIGV4dGVuZHMgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uXzEuQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG5hbWU6IFwiVGhyb3R0bGluZ0V4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVGhyb3R0bGluZ0V4Y2VwdGlvblwiO1xuICAgICAgICB0aGlzLiRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUaHJvdHRsaW5nRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5UaHJvdHRsaW5nRXhjZXB0aW9uID0gVGhyb3R0bGluZ0V4Y2VwdGlvbjtcbmNsYXNzIFZhbGlkYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBCZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb25fMS5CZWRyb2NrUnVudGltZVNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJWYWxpZGF0aW9uRXhjZXB0aW9uXCIsXG4gICAgICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJWYWxpZGF0aW9uRXhjZXB0aW9uXCI7XG4gICAgICAgIHRoaXMuJGZhdWx0ID0gXCJjbGllbnRcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFZhbGlkYXRpb25FeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlZhbGlkYXRpb25FeGNlcHRpb24gPSBWYWxpZGF0aW9uRXhjZXB0aW9uO1xuY2xhc3MgTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbiBleHRlbmRzIEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbl8xLkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIk1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIk1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25cIjtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBcImNsaWVudFwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgICAgICB0aGlzLm9yaWdpbmFsU3RhdHVzQ29kZSA9IG9wdHMub3JpZ2luYWxTdGF0dXNDb2RlO1xuICAgICAgICB0aGlzLm9yaWdpbmFsTWVzc2FnZSA9IG9wdHMub3JpZ2luYWxNZXNzYWdlO1xuICAgIH1cbn1cbmV4cG9ydHMuTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbiA9IE1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb247XG52YXIgUmVzcG9uc2VTdHJlYW07XG4oZnVuY3Rpb24gKFJlc3BvbnNlU3RyZWFtKSB7XG4gICAgUmVzcG9uc2VTdHJlYW0udmlzaXQgPSAodmFsdWUsIHZpc2l0b3IpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdmlzaXRvci5jaHVuayh2YWx1ZS5jaHVuayk7XG4gICAgICAgIGlmICh2YWx1ZS5pbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IuaW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24odmFsdWUuaW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24pO1xuICAgICAgICBpZiAodmFsdWUubW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IubW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbih2YWx1ZS5tb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uKTtcbiAgICAgICAgaWYgKHZhbHVlLnZhbGlkYXRpb25FeGNlcHRpb24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB2aXNpdG9yLnZhbGlkYXRpb25FeGNlcHRpb24odmFsdWUudmFsaWRhdGlvbkV4Y2VwdGlvbik7XG4gICAgICAgIGlmICh2YWx1ZS50aHJvdHRsaW5nRXhjZXB0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdmlzaXRvci50aHJvdHRsaW5nRXhjZXB0aW9uKHZhbHVlLnRocm90dGxpbmdFeGNlcHRpb24pO1xuICAgICAgICBpZiAodmFsdWUubW9kZWxUaW1lb3V0RXhjZXB0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdmlzaXRvci5tb2RlbFRpbWVvdXRFeGNlcHRpb24odmFsdWUubW9kZWxUaW1lb3V0RXhjZXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IuXyh2YWx1ZS4kdW5rbm93blswXSwgdmFsdWUuJHVua25vd25bMV0pO1xuICAgIH07XG59KShSZXNwb25zZVN0cmVhbSA9IGV4cG9ydHMuUmVzcG9uc2VTdHJlYW0gfHwgKGV4cG9ydHMuUmVzcG9uc2VTdHJlYW0gPSB7fSkpO1xuY29uc3QgSW52b2tlTW9kZWxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5ib2R5ICYmIHsgYm9keTogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuSW52b2tlTW9kZWxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gSW52b2tlTW9kZWxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgSW52b2tlTW9kZWxSZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouYm9keSAmJiB7IGJvZHk6IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLkludm9rZU1vZGVsUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2cgPSBJbnZva2VNb2RlbFJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gKG9iaikgPT4gKHtcbiAgICAuLi5vYmosXG4gICAgLi4uKG9iai5ib2R5ICYmIHsgYm9keTogc21pdGh5X2NsaWVudF8xLlNFTlNJVElWRV9TVFJJTkcgfSksXG59KTtcbmV4cG9ydHMuSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nID0gSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgUGF5bG9hZFBhcnRGaWx0ZXJTZW5zaXRpdmVMb2cgPSAob2JqKSA9PiAoe1xuICAgIC4uLm9iaixcbiAgICAuLi4ob2JqLmJ5dGVzICYmIHsgYnl0ZXM6IHNtaXRoeV9jbGllbnRfMS5TRU5TSVRJVkVfU1RSSU5HIH0pLFxufSk7XG5leHBvcnRzLlBheWxvYWRQYXJ0RmlsdGVyU2Vuc2l0aXZlTG9nID0gUGF5bG9hZFBhcnRGaWx0ZXJTZW5zaXRpdmVMb2c7XG5jb25zdCBSZXNwb25zZVN0cmVhbUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+IHtcbiAgICBpZiAob2JqLmNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB7IGNodW5rOiBzbWl0aHlfY2xpZW50XzEuU0VOU0lUSVZFX1NUUklORyB9O1xuICAgIGlmIChvYmouaW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHsgaW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb246IG9iai5pbnRlcm5hbFNlcnZlckV4Y2VwdGlvbiB9O1xuICAgIGlmIChvYmoubW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4geyBtb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uOiBvYmoubW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbiB9O1xuICAgIGlmIChvYmoudmFsaWRhdGlvbkV4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4geyB2YWxpZGF0aW9uRXhjZXB0aW9uOiBvYmoudmFsaWRhdGlvbkV4Y2VwdGlvbiB9O1xuICAgIGlmIChvYmoudGhyb3R0bGluZ0V4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4geyB0aHJvdHRsaW5nRXhjZXB0aW9uOiBvYmoudGhyb3R0bGluZ0V4Y2VwdGlvbiB9O1xuICAgIGlmIChvYmoubW9kZWxUaW1lb3V0RXhjZXB0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB7IG1vZGVsVGltZW91dEV4Y2VwdGlvbjogb2JqLm1vZGVsVGltZW91dEV4Y2VwdGlvbiB9O1xuICAgIGlmIChvYmouJHVua25vd24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHsgW29iai4kdW5rbm93blswXV06IFwiVU5LTk9XTlwiIH07XG59O1xuZXhwb3J0cy5SZXNwb25zZVN0cmVhbUZpbHRlclNlbnNpdGl2ZUxvZyA9IFJlc3BvbnNlU3RyZWFtRmlsdGVyU2Vuc2l0aXZlTG9nO1xuY29uc3QgSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyA9IChvYmopID0+ICh7XG4gICAgLi4ub2JqLFxuICAgIC4uLihvYmouYm9keSAmJiB7IGJvZHk6IFwiU1RSRUFNSU5HX0NPTlRFTlRcIiB9KSxcbn0pO1xuZXhwb3J0cy5JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbVJlc3BvbnNlRmlsdGVyU2Vuc2l0aXZlTG9nID0gSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlX0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZCA9IGV4cG9ydHMuZGVfSW52b2tlTW9kZWxDb21tYW5kID0gZXhwb3J0cy5zZV9JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmQgPSBleHBvcnRzLnNlX0ludm9rZU1vZGVsQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IHByb3RvY29sX2h0dHBfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3Byb3RvY29sLWh0dHBcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL0JlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvblwiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3Qgc2VfSW52b2tlTW9kZWxDb21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSwgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSwge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBpbnB1dC5jb250ZW50VHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgICBhY2NlcHQ6IGlucHV0LmFjY2VwdCxcbiAgICB9KTtcbiAgICBsZXQgcmVzb2x2ZWRQYXRoID0gYCR7YmFzZVBhdGg/LmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoLnNsaWNlKDAsIC0xKSA6IGJhc2VQYXRoIHx8IFwiXCJ9YCArIFwiL21vZGVsL3ttb2RlbElkfS9pbnZva2VcIjtcbiAgICByZXNvbHZlZFBhdGggPSAoMCwgc21pdGh5X2NsaWVudF8xLnJlc29sdmVkUGF0aCkocmVzb2x2ZWRQYXRoLCBpbnB1dCwgXCJtb2RlbElkXCIsICgpID0+IGlucHV0Lm1vZGVsSWQsIFwie21vZGVsSWR9XCIsIGZhbHNlKTtcbiAgICBsZXQgYm9keTtcbiAgICBpZiAoaW5wdXQuYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5ib2R5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHByb3RvY29sX2h0dHBfMS5IdHRwUmVxdWVzdCh7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBib2R5LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2VfSW52b2tlTW9kZWxDb21tYW5kID0gc2VfSW52b2tlTW9kZWxDb21tYW5kO1xuY29uc3Qgc2VfSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kID0gYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcHJvdG9jb2wgPSBcImh0dHBzXCIsIHBvcnQsIHBhdGg6IGJhc2VQYXRoIH0gPSBhd2FpdCBjb250ZXh0LmVuZHBvaW50KCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSwgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSwge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBpbnB1dC5jb250ZW50VHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgICBcIngtYW16bi1iZWRyb2NrLWFjY2VwdFwiOiBpbnB1dC5hY2NlcHQsXG4gICAgfSk7XG4gICAgbGV0IHJlc29sdmVkUGF0aCA9IGAke2Jhc2VQYXRoPy5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifWAgK1xuICAgICAgICBcIi9tb2RlbC97bW9kZWxJZH0vaW52b2tlLXdpdGgtcmVzcG9uc2Utc3RyZWFtXCI7XG4gICAgcmVzb2x2ZWRQYXRoID0gKDAsIHNtaXRoeV9jbGllbnRfMS5yZXNvbHZlZFBhdGgpKHJlc29sdmVkUGF0aCwgaW5wdXQsIFwibW9kZWxJZFwiLCAoKSA9PiBpbnB1dC5tb2RlbElkLCBcInttb2RlbElkfVwiLCBmYWxzZSk7XG4gICAgbGV0IGJvZHk7XG4gICAgaWYgKGlucHV0LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBib2R5ID0gaW5wdXQuYm9keTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBwcm90b2NvbF9odHRwXzEuSHR0cFJlcXVlc3Qoe1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgYm9keSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnNlX0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZCA9IHNlX0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZDtcbmNvbnN0IGRlX0ludm9rZU1vZGVsQ29tbWFuZCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAob3V0cHV0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiBvdXRwdXQuc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgICAgcmV0dXJuIGRlX0ludm9rZU1vZGVsQ29tbWFuZEVycm9yKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCksXG4gICAgICAgIGNvbnRlbnRUeXBlOiBbLCBvdXRwdXQuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXV0sXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0ICgwLCBzbWl0aHlfY2xpZW50XzEuY29sbGVjdEJvZHkpKG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBjb250ZW50cy5ib2R5ID0gZGF0YTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuZXhwb3J0cy5kZV9JbnZva2VNb2RlbENvbW1hbmQgPSBkZV9JbnZva2VNb2RlbENvbW1hbmQ7XG5jb25zdCBkZV9JbnZva2VNb2RlbENvbW1hbmRFcnJvciA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VFcnJvckJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbG9hZFJlc3RKc29uRXJyb3JDb2RlKG91dHB1dCwgcGFyc2VkT3V0cHV0LmJvZHkpO1xuICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgICAgIGNhc2UgXCJBY2Nlc3NEZW5pZWRFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuYmVkcm9ja3J1bnRpbWUjQWNjZXNzRGVuaWVkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9BY2Nlc3NEZW5pZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIkludGVybmFsU2VydmVyRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmJlZHJvY2tydW50aW1lI0ludGVybmFsU2VydmVyRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9JbnRlcm5hbFNlcnZlckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTW9kZWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNNb2RlbEVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Nb2RlbEVycm9yRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJNb2RlbE5vdFJlYWR5RXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmJlZHJvY2tydW50aW1lI01vZGVsTm90UmVhZHlFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01vZGVsTm90UmVhZHlFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk1vZGVsVGltZW91dEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNNb2RlbFRpbWVvdXRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01vZGVsVGltZW91dEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJTZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNTZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfU2VydmljZVF1b3RhRXhjZWVkZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRocm90dGxpbmdFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuYmVkcm9ja3J1bnRpbWUjVGhyb3R0bGluZ0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVGhyb3R0bGluZ0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVmFsaWRhdGlvbkV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNWYWxpZGF0aW9uRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9WYWxpZGF0aW9uRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCBkZV9JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5zdGF0dXNDb2RlICE9PSAyMDAgJiYgb3V0cHV0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICAgIHJldHVybiBkZV9JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmRFcnJvcihvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShvdXRwdXQpLFxuICAgICAgICBjb250ZW50VHlwZTogWywgb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tYmVkcm9jay1jb250ZW50LXR5cGVcIl1dLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBvdXRwdXQuYm9keTtcbiAgICBjb250ZW50cy5ib2R5ID0gZGVfUmVzcG9uc2VTdHJlYW0oZGF0YSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmV4cG9ydHMuZGVfSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kID0gZGVfSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kO1xuY29uc3QgZGVfSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kRXJyb3IgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlRXJyb3JCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGxvYWRSZXN0SnNvbkVycm9yQ29kZShvdXRwdXQsIHBhcnNlZE91dHB1dC5ib2R5KTtcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgICBjYXNlIFwiQWNjZXNzRGVuaWVkRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmJlZHJvY2tydW50aW1lI0FjY2Vzc0RlbmllZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfQWNjZXNzRGVuaWVkRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJJbnRlcm5hbFNlcnZlckV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNJbnRlcm5hbFNlcnZlckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk1vZGVsRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuYmVkcm9ja3J1bnRpbWUjTW9kZWxFcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfTW9kZWxFcnJvckV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiTW9kZWxOb3RSZWFkeUV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNNb2RlbE5vdFJlYWR5RXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9Nb2RlbE5vdFJlYWR5RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJNb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb20uYW1hem9uYXdzLmJlZHJvY2tydW50aW1lI01vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIk1vZGVsVGltZW91dEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNNb2RlbFRpbWVvdXRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHRocm93IGF3YWl0IGRlX01vZGVsVGltZW91dEV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgXCJTZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNTZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfU2VydmljZVF1b3RhRXhjZWVkZWRFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSBcIlRocm90dGxpbmdFeGNlcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbS5hbWF6b25hd3MuYmVkcm9ja3J1bnRpbWUjVGhyb3R0bGluZ0V4Y2VwdGlvblwiOlxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgZGVfVGhyb3R0bGluZ0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xuICAgICAgICBjYXNlIFwiVmFsaWRhdGlvbkV4Y2VwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29tLmFtYXpvbmF3cy5iZWRyb2NrcnVudGltZSNWYWxpZGF0aW9uRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCBkZV9WYWxpZGF0aW9uRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dEZWZhdWx0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn07XG5jb25zdCB0aHJvd0RlZmF1bHRFcnJvciA9ICgwLCBzbWl0aHlfY2xpZW50XzEud2l0aEJhc2VFeGNlcHRpb24pKEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbl8xLkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbik7XG5jb25zdCBkZV9BY2Nlc3NEZW5pZWRFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLkFjY2Vzc0RlbmllZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX0ludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX01vZGVsRXJyb3JFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICAgICAgb3JpZ2luYWxTdGF0dXNDb2RlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0SW50MzIsXG4gICAgICAgIHJlc291cmNlTmFtZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLk1vZGVsRXJyb3JFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9Nb2RlbE5vdFJlYWR5RXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5Nb2RlbE5vdFJlYWR5RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgICAgICBvcmlnaW5hbE1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgICAgIG9yaWdpbmFsU3RhdHVzQ29kZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdEludDMyLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX01vZGVsVGltZW91dEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuTW9kZWxUaW1lb3V0RXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9ICgwLCBzbWl0aHlfY2xpZW50XzEubWFwKSh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9ICgwLCBzbWl0aHlfY2xpZW50XzEudGFrZSkoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBzbWl0aHlfY2xpZW50XzEuZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IG1vZGVsc18wXzEuUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX1NlcnZpY2VRdW90YUV4Y2VlZGVkRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5TZXJ2aWNlUXVvdGFFeGNlZWRlZEV4Y2VwdGlvbih7XG4gICAgICAgICRtZXRhZGF0YTogZGVzZXJpYWxpemVNZXRhZGF0YShwYXJzZWRPdXRwdXQpLFxuICAgICAgICAuLi5jb250ZW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHNtaXRoeV9jbGllbnRfMS5kZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24pKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbmNvbnN0IGRlX1Rocm90dGxpbmdFeGNlcHRpb25SZXMgPSBhc3luYyAocGFyc2VkT3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSAoMCwgc21pdGh5X2NsaWVudF8xLm1hcCkoe30pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZWRPdXRwdXQuYm9keTtcbiAgICBjb25zdCBkb2MgPSAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKGRhdGEsIHtcbiAgICAgICAgbWVzc2FnZTogc21pdGh5X2NsaWVudF8xLmV4cGVjdFN0cmluZyxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkb2MpO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBtb2RlbHNfMF8xLlRocm90dGxpbmdFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBzbWl0aHlfY2xpZW50XzEuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKShleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG5jb25zdCBkZV9WYWxpZGF0aW9uRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gKDAsIHNtaXRoeV9jbGllbnRfMS5tYXApKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gKDAsIHNtaXRoeV9jbGllbnRfMS50YWtlKShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IHNtaXRoeV9jbGllbnRfMS5leHBlY3RTdHJpbmcsXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihjb250ZW50cywgZG9jKTtcbiAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgbW9kZWxzXzBfMS5WYWxpZGF0aW9uRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLmRlY29yYXRlU2VydmljZUV4Y2VwdGlvbikoZXhjZXB0aW9uLCBwYXJzZWRPdXRwdXQuYm9keSk7XG59O1xuY29uc3QgZGVfUmVzcG9uc2VTdHJlYW0gPSAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgcmV0dXJuIGNvbnRleHQuZXZlbnRTdHJlYW1NYXJzaGFsbGVyLmRlc2VyaWFsaXplKG91dHB1dCwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudFtcImNodW5rXCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2h1bms6IGF3YWl0IGRlX1BheWxvYWRQYXJ0X2V2ZW50KGV2ZW50W1wiY2h1bmtcIl0sIGNvbnRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnRbXCJpbnRlcm5hbFNlcnZlckV4Y2VwdGlvblwiXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGludGVybmFsU2VydmVyRXhjZXB0aW9uOiBhd2FpdCBkZV9JbnRlcm5hbFNlcnZlckV4Y2VwdGlvbl9ldmVudChldmVudFtcImludGVybmFsU2VydmVyRXhjZXB0aW9uXCJdLCBjb250ZXh0KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50W1wibW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvblwiXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb246IGF3YWl0IGRlX01vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25fZXZlbnQoZXZlbnRbXCJtb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uXCJdLCBjb250ZXh0KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50W1widmFsaWRhdGlvbkV4Y2VwdGlvblwiXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25FeGNlcHRpb246IGF3YWl0IGRlX1ZhbGlkYXRpb25FeGNlcHRpb25fZXZlbnQoZXZlbnRbXCJ2YWxpZGF0aW9uRXhjZXB0aW9uXCJdLCBjb250ZXh0KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50W1widGhyb3R0bGluZ0V4Y2VwdGlvblwiXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRocm90dGxpbmdFeGNlcHRpb246IGF3YWl0IGRlX1Rocm90dGxpbmdFeGNlcHRpb25fZXZlbnQoZXZlbnRbXCJ0aHJvdHRsaW5nRXhjZXB0aW9uXCJdLCBjb250ZXh0KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50W1wibW9kZWxUaW1lb3V0RXhjZXB0aW9uXCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW9kZWxUaW1lb3V0RXhjZXB0aW9uOiBhd2FpdCBkZV9Nb2RlbFRpbWVvdXRFeGNlcHRpb25fZXZlbnQoZXZlbnRbXCJtb2RlbFRpbWVvdXRFeGNlcHRpb25cIl0sIGNvbnRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAkdW5rbm93bjogb3V0cHV0IH07XG4gICAgfSk7XG59O1xuY29uc3QgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25fZXZlbnQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICByZXR1cm4gZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbn07XG5jb25zdCBkZV9Nb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uX2V2ZW50ID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgcmV0dXJuIGRlX01vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbn07XG5jb25zdCBkZV9Nb2RlbFRpbWVvdXRFeGNlcHRpb25fZXZlbnQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICByZXR1cm4gZGVfTW9kZWxUaW1lb3V0RXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG59O1xuY29uc3QgZGVfUGF5bG9hZFBhcnRfZXZlbnQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSB7fTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KTtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRzLCBkZV9QYXlsb2FkUGFydChkYXRhLCBjb250ZXh0KSk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xufTtcbmNvbnN0IGRlX1Rocm90dGxpbmdFeGNlcHRpb25fZXZlbnQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICByZXR1cm4gZGVfVGhyb3R0bGluZ0V4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xufTtcbmNvbnN0IGRlX1ZhbGlkYXRpb25FeGNlcHRpb25fZXZlbnQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICByZXR1cm4gZGVfVmFsaWRhdGlvbkV4Y2VwdGlvblJlcyhwYXJzZWRPdXRwdXQsIGNvbnRleHQpO1xufTtcbmNvbnN0IGRlX1BheWxvYWRQYXJ0ID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIHJldHVybiAoMCwgc21pdGh5X2NsaWVudF8xLnRha2UpKG91dHB1dCwge1xuICAgICAgICBieXRlczogY29udGV4dC5iYXNlNjREZWNvZGVyLFxuICAgIH0pO1xufTtcbmNvbnN0IGRlc2VyaWFsaXplTWV0YWRhdGEgPSAob3V0cHV0KSA9PiAoe1xuICAgIGh0dHBTdGF0dXNDb2RlOiBvdXRwdXQuc3RhdHVzQ29kZSxcbiAgICByZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0LWlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXotcmVxdWVzdC1pZFwiXSxcbiAgICBleHRlbmRlZFJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICAgIGNmSWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXotY2YtaWRcIl0sXG59KTtcbmNvbnN0IGNvbGxlY3RCb2R5U3RyaW5nID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+ICgwLCBzbWl0aHlfY2xpZW50XzEuY29sbGVjdEJvZHkpKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGJvZHkpID0+IGNvbnRleHQudXRmOEVuY29kZXIoYm9keSkpO1xuY29uc3QgaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdmFsdWUgIT09IFwiXCIgJiZcbiAgICAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5pbmNsdWRlcyhcImxlbmd0aFwiKSB8fCB2YWx1ZS5sZW5ndGggIT0gMCkgJiZcbiAgICAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5pbmNsdWRlcyhcInNpemVcIikgfHwgdmFsdWUuc2l6ZSAhPSAwKTtcbmNvbnN0IHBhcnNlQm9keSA9IChzdHJlYW1Cb2R5LCBjb250ZXh0KSA9PiBjb2xsZWN0Qm9keVN0cmluZyhzdHJlYW1Cb2R5LCBjb250ZXh0KS50aGVuKChlbmNvZGVkKSA9PiB7XG4gICAgaWYgKGVuY29kZWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGVuY29kZWQpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59KTtcbmNvbnN0IHBhcnNlRXJyb3JCb2R5ID0gYXN5bmMgKGVycm9yQm9keSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFyc2VCb2R5KGVycm9yQm9keSwgY29udGV4dCk7XG4gICAgdmFsdWUubWVzc2FnZSA9IHZhbHVlLm1lc3NhZ2UgPz8gdmFsdWUuTWVzc2FnZTtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuY29uc3QgbG9hZFJlc3RKc29uRXJyb3JDb2RlID0gKG91dHB1dCwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGZpbmRLZXkgPSAob2JqZWN0LCBrZXkpID0+IE9iamVjdC5rZXlzKG9iamVjdCkuZmluZCgoaykgPT4gay50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3Qgc2FuaXRpemVFcnJvckNvZGUgPSAocmF3VmFsdWUpID0+IHtcbiAgICAgICAgbGV0IGNsZWFuVmFsdWUgPSByYXdWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhblZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhblZhbHVlLmluZGV4T2YoXCIsXCIpID49IDApIHtcbiAgICAgICAgICAgIGNsZWFuVmFsdWUgPSBjbGVhblZhbHVlLnNwbGl0KFwiLFwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYW5WYWx1ZS5pbmRleE9mKFwiOlwiKSA+PSAwKSB7XG4gICAgICAgICAgICBjbGVhblZhbHVlID0gY2xlYW5WYWx1ZS5zcGxpdChcIjpcIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFuVmFsdWUuaW5kZXhPZihcIiNcIikgPj0gMCkge1xuICAgICAgICAgICAgY2xlYW5WYWx1ZSA9IGNsZWFuVmFsdWUuc3BsaXQoXCIjXCIpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGVhblZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgaGVhZGVyS2V5ID0gZmluZEtleShvdXRwdXQuaGVhZGVycywgXCJ4LWFtem4tZXJyb3J0eXBlXCIpO1xuICAgIGlmIChoZWFkZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUob3V0cHV0LmhlYWRlcnNbaGVhZGVyS2V5XSk7XG4gICAgfVxuICAgIGlmIChkYXRhLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUoZGF0YS5jb2RlKTtcbiAgICB9XG4gICAgaWYgKGRhdGFbXCJfX3R5cGVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVFcnJvckNvZGUoZGF0YVtcIl9fdHlwZVwiXSk7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkludm9rZU1vZGVsQ29tbWFuZCA9IGV4cG9ydHMuJENvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBtaWRkbGV3YXJlX2VuZHBvaW50XzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50XCIpO1xuY29uc3QgbWlkZGxld2FyZV9zZXJkZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCIkQ29tbWFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc21pdGh5X2NsaWVudF8xLkNvbW1hbmQ7IH0gfSk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIkBzbWl0aHkvdHlwZXNcIik7XG5jb25zdCBtb2RlbHNfMF8xID0gcmVxdWlyZShcIi4uL21vZGVscy9tb2RlbHNfMFwiKTtcbmNvbnN0IEF3c19yZXN0SnNvbjFfMSA9IHJlcXVpcmUoXCIuLi9wcm90b2NvbHMvQXdzX3Jlc3RKc29uMVwiKTtcbmNsYXNzIEludm9rZU1vZGVsQ29tbWFuZCBleHRlbmRzIHNtaXRoeV9jbGllbnRfMS5Db21tYW5kIHtcbiAgICBzdGF0aWMgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBVc2VGSVBTOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUZpcHNFbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBFbmRwb2ludDogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJlbmRwb2ludFwiIH0sXG4gICAgICAgICAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICAgICAgICAgIFVzZUR1YWxTdGFjazogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VEdWFsc3RhY2tFbmRwb2ludFwiIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmUoY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX3NlcmRlXzEuZ2V0U2VyZGVQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIHRoaXMuc2VyaWFsaXplLCB0aGlzLmRlc2VyaWFsaXplKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZSgoMCwgbWlkZGxld2FyZV9lbmRwb2ludF8xLmdldEVuZHBvaW50UGx1Z2luKShjb25maWd1cmF0aW9uLCBJbnZva2VNb2RlbENvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSkpO1xuICAgICAgICBjb25zdCBzdGFjayA9IGNsaWVudFN0YWNrLmNvbmNhdCh0aGlzLm1pZGRsZXdhcmVTdGFjayk7XG4gICAgICAgIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gXCJCZWRyb2NrUnVudGltZUNsaWVudFwiO1xuICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IFwiSW52b2tlTW9kZWxDb21tYW5kXCI7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuSW52b2tlTW9kZWxSZXF1ZXN0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nOiBtb2RlbHNfMF8xLkludm9rZU1vZGVsUmVzcG9uc2VGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBbdHlwZXNfMS5TTUlUSFlfQ09OVEVYVF9LRVldOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZTogXCJBbWF6b25CZWRyb2NrRnJvbnRlbmRTZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBcIkludm9rZU1vZGVsXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgQXdzX3Jlc3RKc29uMV8xLnNlX0ludm9rZU1vZGVsQ29tbWFuZCkoaW5wdXQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBkZXNlcmlhbGl6ZShvdXRwdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuZGVfSW52b2tlTW9kZWxDb21tYW5kKShvdXRwdXQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52b2tlTW9kZWxDb21tYW5kID0gSW52b2tlTW9kZWxDb21tYW5kO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kID0gZXhwb3J0cy4kQ29tbWFuZCA9IHZvaWQgMDtcbmNvbnN0IG1pZGRsZXdhcmVfZW5kcG9pbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnRcIik7XG5jb25zdCBtaWRkbGV3YXJlX3NlcmRlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlXCIpO1xuY29uc3Qgc21pdGh5X2NsaWVudF8xID0gcmVxdWlyZShcIkBzbWl0aHkvc21pdGh5LWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIiRDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlfY2xpZW50XzEuQ29tbWFuZDsgfSB9KTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiQHNtaXRoeS90eXBlc1wiKTtcbmNvbnN0IG1vZGVsc18wXzEgPSByZXF1aXJlKFwiLi4vbW9kZWxzL21vZGVsc18wXCIpO1xuY29uc3QgQXdzX3Jlc3RKc29uMV8xID0gcmVxdWlyZShcIi4uL3Byb3RvY29scy9Bd3NfcmVzdEpzb24xXCIpO1xuY2xhc3MgSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kIGV4dGVuZHMgc21pdGh5X2NsaWVudF8xLkNvbW1hbmQge1xuICAgIHN0YXRpYyBnZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZUZJUFM6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRmlwc0VuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICAgICAgICAgIFJlZ2lvbjogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJyZWdpb25cIiB9LFxuICAgICAgICAgICAgVXNlRHVhbFN0YWNrOiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcInVzZUR1YWxzdGFja0VuZHBvaW50XCIgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgICByZXNvbHZlTWlkZGxld2FyZShjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UoKDAsIG1pZGRsZXdhcmVfc2VyZGVfMS5nZXRTZXJkZVBsdWdpbikoY29uZmlndXJhdGlvbiwgdGhpcy5zZXJpYWxpemUsIHRoaXMuZGVzZXJpYWxpemUpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKCgwLCBtaWRkbGV3YXJlX2VuZHBvaW50XzEuZ2V0RW5kcG9pbnRQbHVnaW4pKGNvbmZpZ3VyYXRpb24sIEludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZC5nZXRFbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucygpKSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBcIkJlZHJvY2tSdW50aW1lQ2xpZW50XCI7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmRcIjtcbiAgICAgICAgY29uc3QgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogbW9kZWxzXzBfMS5JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbVJlcXVlc3RGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IG1vZGVsc18wXzEuSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1SZXNwb25zZUZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgICAgIFt0eXBlc18xLlNNSVRIWV9DT05URVhUX0tFWV06IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBcIkFtYXpvbkJlZHJvY2tGcm9udGVuZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdEhhbmRsZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiBzdGFjay5yZXNvbHZlKChyZXF1ZXN0KSA9PiByZXF1ZXN0SGFuZGxlci5oYW5kbGUocmVxdWVzdC5yZXF1ZXN0LCBvcHRpb25zIHx8IHt9KSwgaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBBd3NfcmVzdEpzb24xXzEuc2VfSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kKShpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKG91dHB1dCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIEF3c19yZXN0SnNvbjFfMS5kZV9JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmQpKG91dHB1dCwgY29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmQgPSBJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CZWRyb2NrUnVudGltZSA9IHZvaWQgMDtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCBCZWRyb2NrUnVudGltZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmVkcm9ja1J1bnRpbWVDbGllbnRcIik7XG5jb25zdCBJbnZva2VNb2RlbENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0ludm9rZU1vZGVsQ29tbWFuZFwiKTtcbmNvbnN0IEludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZHMvSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kXCIpO1xuY29uc3QgY29tbWFuZHMgPSB7XG4gICAgSW52b2tlTW9kZWxDb21tYW5kOiBJbnZva2VNb2RlbENvbW1hbmRfMS5JbnZva2VNb2RlbENvbW1hbmQsXG4gICAgSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW1Db21tYW5kOiBJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmRfMS5JbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbUNvbW1hbmQsXG59O1xuY2xhc3MgQmVkcm9ja1J1bnRpbWUgZXh0ZW5kcyBCZWRyb2NrUnVudGltZUNsaWVudF8xLkJlZHJvY2tSdW50aW1lQ2xpZW50IHtcbn1cbmV4cG9ydHMuQmVkcm9ja1J1bnRpbWUgPSBCZWRyb2NrUnVudGltZTtcbigwLCBzbWl0aHlfY2xpZW50XzEuY3JlYXRlQWdncmVnYXRlZENsaWVudCkoY29tbWFuZHMsIEJlZHJvY2tSdW50aW1lKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vSW52b2tlTW9kZWxDb21tYW5kXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtQ29tbWFuZFwiKSwgZXhwb3J0cyk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL21vZGVsc18wXCIpLCBleHBvcnRzKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbiA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9CZWRyb2NrUnVudGltZUNsaWVudFwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9CZWRyb2NrUnVudGltZVwiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb21tYW5kc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9tb2RlbHNcIiksIGV4cG9ydHMpO1xudmFyIEJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvbl8xID0gcmVxdWlyZShcIi4vbW9kZWxzL0JlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJlZHJvY2tSdW50aW1lU2VydmljZUV4Y2VwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uXzEuQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXhjZXB0aW9uOyB9IH0pO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycikge1xuXHRpZiAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpO1xuXHR9XG5cblx0cmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcblx0aWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgJ2NvbnN0cnVjdG9yJyk7XG5cdHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKTtcblx0Ly8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXHRpZiAob2JqLmNvbnN0cnVjdG9yICYmICFoYXNPd25Db25zdHJ1Y3RvciAmJiAhaGFzSXNQcm90b3R5cGVPZikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLFxuXHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi5cblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gb2JqKSB7IC8qKi8gfVxuXG5cdHJldHVybiB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJyB8fCBoYXNPd24uY2FsbChvYmosIGtleSk7XG59O1xuXG4vLyBJZiBuYW1lIGlzICdfX3Byb3RvX18nLCBhbmQgT2JqZWN0LmRlZmluZVByb3BlcnR5IGlzIGF2YWlsYWJsZSwgZGVmaW5lIF9fcHJvdG9fXyBhcyBhbiBvd24gcHJvcGVydHkgb24gdGFyZ2V0XG52YXIgc2V0UHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMpIHtcblx0aWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG5cdH1cbn07XG5cbi8vIFJldHVybiB1bmRlZmluZWQgaW5zdGVhZCBvZiBfX3Byb3RvX18gaWYgJ19fcHJvdG9fXycgaXMgbm90IGFuIG93biBwcm9wZXJ0eVxudmFyIGdldFByb3BlcnR5ID0gZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqLCBuYW1lKSB7XG5cdGlmIChuYW1lID09PSAnX19wcm90b19fJykge1xuXHRcdGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkge1xuXHRcdFx0cmV0dXJuIHZvaWQgMDtcblx0XHR9IGVsc2UgaWYgKGdPUEQpIHtcblx0XHRcdC8vIEluIGVhcmx5IHZlcnNpb25zIG9mIG5vZGUsIG9ialsnX19wcm90b19fJ10gaXMgYnVnZ3kgd2hlbiBvYmogaGFzXG5cdFx0XHQvLyBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5LiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgd29ya3MuXG5cdFx0XHRyZXR1cm4gZ09QRChvYmosIG5hbWUpLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmpbbmFtZV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZCgpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lO1xuXHR2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzBdO1xuXHR2YXIgaSA9IDE7XG5cdHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHR2YXIgZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdib29sZWFuJykge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuXHRcdC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHRpID0gMjtcblx0fVxuXHRpZiAodGFyZ2V0ID09IG51bGwgfHwgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHRmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1tpXTtcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yIChuYW1lIGluIG9wdGlvbnMpIHtcblx0XHRcdFx0c3JjID0gZ2V0UHJvcGVydHkodGFyZ2V0LCBuYW1lKTtcblx0XHRcdFx0Y29weSA9IGdldFByb3BlcnR5KG9wdGlvbnMsIG5hbWUpO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gY29weSkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gaXNBcnJheShjb3B5KSkpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGV4dGVuZChkZWVwLCBjbG9uZSwgY29weSkgfSk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29weSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdHNldFByb3BlcnR5KHRhcmdldCwgeyBuYW1lOiBuYW1lLCBuZXdWYWx1ZTogY29weSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc1N0cmVhbSA9IHN0cmVhbSA9PlxuXHRzdHJlYW0gIT09IG51bGwgJiZcblx0dHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCcgJiZcblx0dHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5pc1N0cmVhbS53cml0YWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbicgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG5cbmlzU3RyZWFtLnJlYWRhYmxlID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtKHN0cmVhbSkgJiZcblx0c3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZSAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5kdXBsZXggPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0ud3JpdGFibGUoc3RyZWFtKSAmJlxuXHRpc1N0cmVhbS5yZWFkYWJsZShzdHJlYW0pO1xuXG5pc1N0cmVhbS50cmFuc2Zvcm0gPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0uZHVwbGV4KHN0cmVhbSkgJiZcblx0dHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyZWFtO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wa2cgPSB2b2lkIDA7XG5leHBvcnRzLnBrZyA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQ1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdheGlvc0Vycm9yID0gZXhwb3J0cy5HQVhJT1NfRVJST1JfU1lNQk9MID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0RXJyb3JSZWRhY3RvciA9IGRlZmF1bHRFcnJvclJlZGFjdG9yO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IGV4dGVuZF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJleHRlbmRcIikpO1xuLyoqXG4gKiBTdXBwb3J0IGBpbnN0YW5jZW9mYCBvcGVyYXRvciBmb3IgYEdheGlvc0Vycm9yYHMgaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoaXMgbGlicmFyeS5cbiAqXG4gKiBAc2VlIHtAbGluayBHYXhpb3NFcnJvcltTeW1ib2wuaGFzSW5zdGFuY2VdfVxuICovXG5leHBvcnRzLkdBWElPU19FUlJPUl9TWU1CT0wgPSBTeW1ib2wuZm9yKGAke3V0aWxfMS5wa2cubmFtZX0tZ2F4aW9zLWVycm9yYCk7XG4vKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuY2xhc3MgR2F4aW9zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgLyoqXG4gICAgICogU3VwcG9ydCBgaW5zdGFuY2VvZmAgb3BlcmF0b3IgZm9yIGBHYXhpb3NFcnJvcmAgYWNyb3NzIGJ1aWxkcy9kdXBsaWNhdGVkIGZpbGVzLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgR0FYSU9TX0VSUk9SX1NZTUJPTH1cbiAgICAgKiBAc2VlIHtAbGluayBHYXhpb3NFcnJvcltHQVhJT1NfRVJST1JfU1lNQk9MXX1cbiAgICAgKi9cbiAgICBzdGF0aWMgWyhfYSA9IGV4cG9ydHMuR0FYSU9TX0VSUk9SX1NZTUJPTCwgU3ltYm9sLmhhc0luc3RhbmNlKV0oaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGluc3RhbmNlICYmXG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBleHBvcnRzLkdBWElPU19FUlJPUl9TWU1CT0wgaW4gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgIGluc3RhbmNlW2V4cG9ydHMuR0FYSU9TX0VSUk9SX1NZTUJPTF0gPT09IHV0aWxfMS5wa2cudmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gbmF0aXZlXG4gICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKEdheGlvc0Vycm9yLCBpbnN0YW5jZSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvbmZpZywgcmVzcG9uc2UsIGVycm9yKSB7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHBvcnQgYGluc3RhbmNlb2ZgIG9wZXJhdG9yIGZvciBgR2F4aW9zRXJyb3JgIGFjcm9zcyBidWlsZHMvZHVwbGljYXRlZCBmaWxlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgR0FYSU9TX0VSUk9SX1NZTUJPTH1cbiAgICAgICAgICogQHNlZSB7QGxpbmsgR2F4aW9zRXJyb3JbU3ltYm9sLmhhc0luc3RhbmNlXX1cbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xMzk2NSNpc3N1ZWNvbW1lbnQtMjc4NTcwMjAwfVxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NjYxODg1Mi9yZXF1aXJlLWFuZC1pbnN0YW5jZW9mfVxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9AQGhhc0luc3RhbmNlI3JldmVydGluZ190b19kZWZhdWx0X2luc3RhbmNlb2ZfYmVoYXZpb3J9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzW19hXSA9IHV0aWxfMS5wa2cudmVyc2lvbjtcbiAgICAgICAgLy8gZGVlcC1jb3B5IGNvbmZpZyBhcyB3ZSBkbyBub3Qgd2FudCB0byBtdXRhdGVcbiAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGNvbmZpZyBmb3IgZnV0dXJlIHJldHJpZXMvdXNlXG4gICAgICAgIHRoaXMuY29uZmlnID0gKDAsIGV4dGVuZF8xLmRlZmF1bHQpKHRydWUsIHt9LCBjb25maWcpO1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zZS5jb25maWcgPSAoMCwgZXh0ZW5kXzEuZGVmYXVsdCkodHJ1ZSwge30sIHRoaXMucmVzcG9uc2UuY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2xhdGVEYXRhKHRoaXMuY29uZmlnLnJlc3BvbnNlVHlwZSwgKF9iID0gdGhpcy5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9jKSB7XG4gICAgICAgICAgICAgICAgLy8gYmVzdCBlZmZvcnQgLSBkb24ndCB0aHJvdyBhbiBlcnJvciB3aXRoaW4gYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZCBzZXQgYHRoaXMucmVzcG9uc2UuY29uZmlnLnJlc3BvbnNlVHlwZSA9ICd1bmtub3duJ2AsIGJ1dFxuICAgICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgbXV0YXRlIGZ1dHVyZSBjYWxscyB3aXRoIHRoaXMgY29uZmlnIG9iamVjdC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5yZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICdjb2RlJyBpbiBlcnJvciAmJiBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZXJyb3JSZWRhY3Rvcikge1xuICAgICAgICAgICAgY29uZmlnLmVycm9yUmVkYWN0b3Ioe1xuICAgICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IHRoaXMucmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuR2F4aW9zRXJyb3IgPSBHYXhpb3NFcnJvcjtcbmZ1bmN0aW9uIHRyYW5zbGF0ZURhdGEocmVzcG9uc2VUeXBlLCBkYXRhKSB7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RyZWFtJzpcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgY2FzZSAnYXJyYXlidWZmZXInOlxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgICAgIGNhc2UgJ2Jsb2InOlxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50ZXh0KCkpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuLyoqXG4gKiBBbiBleHBlcmltZW50YWwgZXJyb3IgcmVkYWN0b3IuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWcgdG8gcG90ZW50aWFsbHkgcmVkYWN0IHByb3BlcnRpZXMgb2ZcbiAqIEBwYXJhbSByZXNwb25zZSBDb25maWcgdG8gcG90ZW50aWFsbHkgcmVkYWN0IHByb3BlcnRpZXMgb2ZcbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvclJlZGFjdG9yKGRhdGEpIHtcbiAgICBjb25zdCBSRURBQ1QgPSAnPDxSRURBQ1RFRD4gLSBTZWUgYGVycm9yUmVkYWN0b3JgIG9wdGlvbiBpbiBgZ2F4aW9zYCBmb3IgY29uZmlndXJhdGlvbj4uJztcbiAgICBmdW5jdGlvbiByZWRhY3RIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKCFoZWFkZXJzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgLy8gYW55IGNhc2luZyBvZiBgQXV0aGVudGljYXRpb25gXG4gICAgICAgICAgICBpZiAoL15hdXRoZW50aWNhdGlvbiQvaS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBSRURBQ1Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbnkgY2FzaW5nIG9mIGBBdXRob3JpemF0aW9uYFxuICAgICAgICAgICAgaWYgKC9eYXV0aG9yaXphdGlvbiQvaS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBSRURBQ1Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbnl0aGluZyBjb250YWluaW5nIHNlY3JldCwgc3VjaCBhcyAnY2xpZW50IHNlY3JldCdcbiAgICAgICAgICAgIGlmICgvc2VjcmV0L2kudGVzdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1trZXldID0gUkVEQUNUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZGFjdFN0cmluZyhvYmosIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIG9ialtrZXldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKC9ncmFudF90eXBlPS9pLnRlc3QodGV4dCkgfHxcbiAgICAgICAgICAgICAgICAvYXNzZXJ0aW9uPS9pLnRlc3QodGV4dCkgfHxcbiAgICAgICAgICAgICAgICAvc2VjcmV0L2kudGVzdCh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gUkVEQUNUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZGFjdE9iamVjdChvYmopIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCdncmFudF90eXBlJyBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBvYmpbJ2dyYW50X3R5cGUnXSA9IFJFREFDVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnYXNzZXJ0aW9uJyBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBvYmpbJ2Fzc2VydGlvbiddID0gUkVEQUNUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdjbGllbnRfc2VjcmV0JyBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBvYmpbJ2NsaWVudF9zZWNyZXQnXSA9IFJFREFDVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgcmVkYWN0SGVhZGVycyhkYXRhLmNvbmZpZy5oZWFkZXJzKTtcbiAgICAgICAgcmVkYWN0U3RyaW5nKGRhdGEuY29uZmlnLCAnZGF0YScpO1xuICAgICAgICByZWRhY3RPYmplY3QoZGF0YS5jb25maWcuZGF0YSk7XG4gICAgICAgIHJlZGFjdFN0cmluZyhkYXRhLmNvbmZpZywgJ2JvZHknKTtcbiAgICAgICAgcmVkYWN0T2JqZWN0KGRhdGEuY29uZmlnLmJvZHkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IHVybF8xLlVSTCgnJywgZGF0YS5jb25maWcudXJsKTtcbiAgICAgICAgICAgIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcygndG9rZW4nKSkge1xuICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd0b2tlbicsIFJFREFDVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoJ2NsaWVudF9zZWNyZXQnKSkge1xuICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdjbGllbnRfc2VjcmV0JywgUkVEQUNUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuY29uZmlnLnVybCA9IHVybC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYikge1xuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yIC0gbm8gbmVlZCB0byBwYXJzZSBhbiBpbnZhbGlkIFVSTFxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgIGRlZmF1bHRFcnJvclJlZGFjdG9yKHsgY29uZmlnOiBkYXRhLnJlc3BvbnNlLmNvbmZpZyB9KTtcbiAgICAgICAgcmVkYWN0SGVhZGVycyhkYXRhLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICByZWRhY3RTdHJpbmcoZGF0YS5yZXNwb25zZSwgJ2RhdGEnKTtcbiAgICAgICAgcmVkYWN0T2JqZWN0KGRhdGEucmVzcG9uc2UuZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tbW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmV0cnlDb25maWcgPSBnZXRSZXRyeUNvbmZpZztcbmFzeW5jIGZ1bmN0aW9uIGdldFJldHJ5Q29uZmlnKGVycikge1xuICAgIGxldCBjb25maWcgPSBnZXRDb25maWcoZXJyKTtcbiAgICBpZiAoIWVyciB8fCAhZXJyLmNvbmZpZyB8fCAoIWNvbmZpZyAmJiAhZXJyLmNvbmZpZy5yZXRyeSkpIHtcbiAgICAgICAgcmV0dXJuIHsgc2hvdWxkUmV0cnk6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcuY3VycmVudFJldHJ5QXR0ZW1wdCA9IGNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0IHx8IDA7XG4gICAgY29uZmlnLnJldHJ5ID1cbiAgICAgICAgY29uZmlnLnJldHJ5ID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnJldHJ5ID09PSBudWxsID8gMyA6IGNvbmZpZy5yZXRyeTtcbiAgICBjb25maWcuaHR0cE1ldGhvZHNUb1JldHJ5ID0gY29uZmlnLmh0dHBNZXRob2RzVG9SZXRyeSB8fCBbXG4gICAgICAgICdHRVQnLFxuICAgICAgICAnSEVBRCcsXG4gICAgICAgICdQVVQnLFxuICAgICAgICAnT1BUSU9OUycsXG4gICAgICAgICdERUxFVEUnLFxuICAgIF07XG4gICAgY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzID1cbiAgICAgICAgY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzID09PSB1bmRlZmluZWQgfHwgY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzID09PSBudWxsXG4gICAgICAgICAgICA/IDJcbiAgICAgICAgICAgIDogY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzO1xuICAgIGNvbmZpZy5yZXRyeURlbGF5TXVsdGlwbGllciA9IGNvbmZpZy5yZXRyeURlbGF5TXVsdGlwbGllclxuICAgICAgICA/IGNvbmZpZy5yZXRyeURlbGF5TXVsdGlwbGllclxuICAgICAgICA6IDI7XG4gICAgY29uZmlnLnRpbWVPZkZpcnN0UmVxdWVzdCA9IGNvbmZpZy50aW1lT2ZGaXJzdFJlcXVlc3RcbiAgICAgICAgPyBjb25maWcudGltZU9mRmlyc3RSZXF1ZXN0XG4gICAgICAgIDogRGF0ZS5ub3coKTtcbiAgICBjb25maWcudG90YWxUaW1lb3V0ID0gY29uZmlnLnRvdGFsVGltZW91dFxuICAgICAgICA/IGNvbmZpZy50b3RhbFRpbWVvdXRcbiAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBjb25maWcubWF4UmV0cnlEZWxheSA9IGNvbmZpZy5tYXhSZXRyeURlbGF5XG4gICAgICAgID8gY29uZmlnLm1heFJldHJ5RGVsYXlcbiAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAvLyBJZiB0aGlzIHdhc24ndCBpbiB0aGUgbGlzdCBvZiBzdGF0dXMgY29kZXMgd2hlcmUgd2Ugd2FudFxuICAgIC8vIHRvIGF1dG9tYXRpY2FsbHkgcmV0cnksIHJldHVybi5cbiAgICBjb25zdCByZXRyeVJhbmdlcyA9IFtcbiAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9IVFRQX3N0YXR1c19jb2Rlc1xuICAgICAgICAvLyAxeHggLSBSZXRyeSAoSW5mb3JtYXRpb25hbCwgcmVxdWVzdCBzdGlsbCBwcm9jZXNzaW5nKVxuICAgICAgICAvLyAyeHggLSBEbyBub3QgcmV0cnkgKFN1Y2Nlc3MpXG4gICAgICAgIC8vIDN4eCAtIERvIG5vdCByZXRyeSAoUmVkaXJlY3QpXG4gICAgICAgIC8vIDR4eCAtIERvIG5vdCByZXRyeSAoQ2xpZW50IGVycm9ycylcbiAgICAgICAgLy8gNDA4IC0gUmV0cnkgKFwiUmVxdWVzdCBUaW1lb3V0XCIpXG4gICAgICAgIC8vIDQyOSAtIFJldHJ5IChcIlRvbyBNYW55IFJlcXVlc3RzXCIpXG4gICAgICAgIC8vIDV4eCAtIFJldHJ5IChTZXJ2ZXIgZXJyb3JzKVxuICAgICAgICBbMTAwLCAxOTldLFxuICAgICAgICBbNDA4LCA0MDhdLFxuICAgICAgICBbNDI5LCA0MjldLFxuICAgICAgICBbNTAwLCA1OTldLFxuICAgIF07XG4gICAgY29uZmlnLnN0YXR1c0NvZGVzVG9SZXRyeSA9IGNvbmZpZy5zdGF0dXNDb2Rlc1RvUmV0cnkgfHwgcmV0cnlSYW5nZXM7XG4gICAgLy8gUHV0IHRoZSBjb25maWcgYmFjayBpbnRvIHRoZSBlcnJcbiAgICBlcnIuY29uZmlnLnJldHJ5Q29uZmlnID0gY29uZmlnO1xuICAgIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgcmV0cnkgdGhlIHJlcXVlc3RcbiAgICBjb25zdCBzaG91bGRSZXRyeUZuID0gY29uZmlnLnNob3VsZFJldHJ5IHx8IHNob3VsZFJldHJ5UmVxdWVzdDtcbiAgICBpZiAoIShhd2FpdCBzaG91bGRSZXRyeUZuKGVycikpKSB7XG4gICAgICAgIHJldHVybiB7IHNob3VsZFJldHJ5OiBmYWxzZSwgY29uZmlnOiBlcnIuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IGRlbGF5ID0gZ2V0TmV4dFJldHJ5RGVsYXkoY29uZmlnKTtcbiAgICAvLyBXZSdyZSBnb2luZyB0byByZXRyeSEgIEluY3JlbWVuZW50IHRoZSBjb3VudGVyLlxuICAgIGVyci5jb25maWcucmV0cnlDb25maWcuY3VycmVudFJldHJ5QXR0ZW1wdCArPSAxO1xuICAgIC8vIENyZWF0ZSBhIHByb21pc2UgdGhhdCBpbnZva2VzIHRoZSByZXRyeSBhZnRlciB0aGUgYmFja09mZkRlbGF5XG4gICAgY29uc3QgYmFja29mZiA9IGNvbmZpZy5yZXRyeUJhY2tvZmZcbiAgICAgICAgPyBjb25maWcucmV0cnlCYWNrb2ZmKGVyciwgZGVsYXkpXG4gICAgICAgIDogbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcbiAgICAgICAgfSk7XG4gICAgLy8gTm90aWZ5IHRoZSB1c2VyIGlmIHRoZXkgYWRkZWQgYW4gYG9uUmV0cnlBdHRlbXB0YCBoYW5kbGVyXG4gICAgaWYgKGNvbmZpZy5vblJldHJ5QXR0ZW1wdCkge1xuICAgICAgICBjb25maWcub25SZXRyeUF0dGVtcHQoZXJyKTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBwcm9taXNlIGluIHdoaWNoIHJlY2FsbHMgR2F4aW9zIHRvIHJldHJ5IHRoZSByZXF1ZXN0XG4gICAgYXdhaXQgYmFja29mZjtcbiAgICByZXR1cm4geyBzaG91bGRSZXRyeTogdHJ1ZSwgY29uZmlnOiBlcnIuY29uZmlnIH07XG59XG4vKipcbiAqIERldGVybWluZSBiYXNlZCBvbiBjb25maWcgaWYgd2Ugc2hvdWxkIHJldHJ5IHRoZSByZXF1ZXN0LlxuICogQHBhcmFtIGVyciBUaGUgR2F4aW9zRXJyb3IgcGFzc2VkIHRvIHRoZSBpbnRlcmNlcHRvci5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUmV0cnlSZXF1ZXN0KGVycikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoZXJyKTtcbiAgICAvLyBub2RlLWZldGNoIHJhaXNlcyBhbiBBYm9ydEVycm9yIGlmIHNpZ25hbGVkOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaCNyZXF1ZXN0LWNhbmNlbGxhdGlvbi13aXRoLWFib3J0c2lnbmFsXG4gICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicgfHwgKChfYSA9IGVyci5lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGNvbmZpZywgb3IgcmV0cmllcyBhcmUgZGlzYWJsZWQsIHJldHVybi5cbiAgICBpZiAoIWNvbmZpZyB8fCBjb25maWcucmV0cnkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGlzIGVycm9yIGhhcyBubyByZXNwb25zZSAoRVRJTUVET1VULCBFTk9URk9VTkQsIGV0YylcbiAgICBpZiAoIWVyci5yZXNwb25zZSAmJlxuICAgICAgICAoY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgfHwgMCkgPj0gY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gT25seSByZXRyeSB3aXRoIGNvbmZpZ3VyZWQgSHR0cE1ldGhvZHMuXG4gICAgaWYgKCFlcnIuY29uZmlnLm1ldGhvZCB8fFxuICAgICAgICBjb25maWcuaHR0cE1ldGhvZHNUb1JldHJ5LmluZGV4T2YoZXJyLmNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSkgPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgdGhpcyB3YXNuJ3QgaW4gdGhlIGxpc3Qgb2Ygc3RhdHVzIGNvZGVzIHdoZXJlIHdlIHdhbnRcbiAgICAvLyB0byBhdXRvbWF0aWNhbGx5IHJldHJ5LCByZXR1cm4uXG4gICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgIGxldCBpc0luUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBbbWluLCBtYXhdIG9mIGNvbmZpZy5zdGF0dXNDb2Rlc1RvUmV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGVyci5yZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID49IG1pbiAmJiBzdGF0dXMgPD0gbWF4KSB7XG4gICAgICAgICAgICAgICAgaXNJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzSW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBvdXQgb2YgcmV0cnkgYXR0ZW1wdHMsIHJldHVyblxuICAgIGNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0ID0gY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgfHwgMDtcbiAgICBpZiAoY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgPj0gY29uZmlnLnJldHJ5KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEFjcXVpcmUgdGhlIHJheENvbmZpZyBvYmplY3QgZnJvbSBhbiBHYXhpb3NFcnJvciBpZiBhdmFpbGFibGUuXG4gKiBAcGFyYW0gZXJyIFRoZSBHYXhpb3MgZXJyb3Igd2l0aCBhIGNvbmZpZyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZyhlcnIpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb25maWcgJiYgZXJyLmNvbmZpZy5yZXRyeUNvbmZpZykge1xuICAgICAgICByZXR1cm4gZXJyLmNvbmZpZy5yZXRyeUNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBkZWxheSB0byB3YWl0IGJlZm9yZSB0aGUgbmV4dCByZXRyeS5cbiAqXG4gKiBAcGFyYW0ge1JldHJ5Q29uZmlnfSBjb25maWcgVGhlIGN1cnJlbnQgc2V0IG9mIHJldHJ5IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgbXMgdG8gd2FpdCBiZWZvcmUgdGhlIG5leHQgcmV0cnkgYXR0ZW1wdC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dFJldHJ5RGVsYXkoY29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIENhbGN1bGF0ZSB0aW1lIHRvIHdhaXQgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJldHJ5LCBsb29rIGZvciBhIGNvbmZpZ3VyZWQgcmV0cnlEZWxheS5cbiAgICBjb25zdCByZXRyeURlbGF5ID0gY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgPyAwIDogKF9hID0gY29uZmlnLnJldHJ5RGVsYXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEwMDtcbiAgICAvLyBGb3JtdWxhOiByZXRyeURlbGF5ICsgKChyZXRyeURlbGF5TXVsdGlwbGllcl5jdXJyZW50UmV0cnlBdHRlbXB0IC0gMSAvIDIpICogMTAwMClcbiAgICBjb25zdCBjYWxjdWxhdGVkRGVsYXkgPSByZXRyeURlbGF5ICtcbiAgICAgICAgKChNYXRoLnBvdyhjb25maWcucmV0cnlEZWxheU11bHRpcGxpZXIsIGNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0KSAtIDEpIC9cbiAgICAgICAgICAgIDIpICpcbiAgICAgICAgICAgIDEwMDA7XG4gICAgY29uc3QgbWF4QWxsb3dhYmxlRGVsYXkgPSBjb25maWcudG90YWxUaW1lb3V0IC0gKERhdGUubm93KCkgLSBjb25maWcudGltZU9mRmlyc3RSZXF1ZXN0KTtcbiAgICByZXR1cm4gTWF0aC5taW4oY2FsY3VsYXRlZERlbGF5LCBtYXhBbGxvd2FibGVEZWxheSwgY29uZmlnLm1heFJldHJ5RGVsYXkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJuZztcblxudmFyIF9jcnlwdG8gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCBybmRzOFBvb2wgPSBuZXcgVWludDhBcnJheSgyNTYpOyAvLyAjIG9mIHJhbmRvbSB2YWx1ZXMgdG8gcHJlLWFsbG9jYXRlXG5cbmxldCBwb29sUHRyID0gcm5kczhQb29sLmxlbmd0aDtcblxuZnVuY3Rpb24gcm5nKCkge1xuICBpZiAocG9vbFB0ciA+IHJuZHM4UG9vbC5sZW5ndGggLSAxNikge1xuICAgIF9jcnlwdG8uZGVmYXVsdC5yYW5kb21GaWxsU3luYyhybmRzOFBvb2wpO1xuXG4gICAgcG9vbFB0ciA9IDA7XG4gIH1cblxuICByZXR1cm4gcm5kczhQb29sLnNsaWNlKHBvb2xQdHIsIHBvb2xQdHIgKz0gMTYpO1xufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLnVuc2FmZVN0cmluZ2lmeSA9IHVuc2FmZVN0cmluZ2lmeTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5sZXQgX25vZGVJZDtcblxubGV0IF9jbG9ja3NlcTsgLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG5cblxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgbGV0IGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIGxldCBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgbGV0IG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgY29uc3QgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwOyAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG5cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfSAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG5cblxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfSAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG5cblxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTsgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG5cbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7IC8vIGB0aW1lX2xvd2BcblxuICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICBjb25zdCB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHYxO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbnZhciBfZGVmYXVsdCA9IHBhcnNlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShieXRlcykpIHtcbiAgICBieXRlcyA9IEJ1ZmZlci5mcm9tKGJ5dGVzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcywgJ3V0ZjgnKTtcbiAgfVxuXG4gIHJldHVybiBfY3J5cHRvLmRlZmF1bHQuY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGJ5dGVzKS5kaWdlc3QoKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX21kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZDUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCB2MyA9ICgwLCBfdi5kZWZhdWx0KSgndjMnLCAweDMwLCBfbWQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2MztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiY3J5cHRvXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEOiBfY3J5cHRvLmRlZmF1bHQucmFuZG9tVVVJRFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMsICd1dGY4Jyk7XG4gIH1cblxuICByZXR1cm4gX2NyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzaGExO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9uaWwuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcGFyc2UuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF92LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HYXhpb3NJbnRlcmNlcHRvck1hbmFnZXIgPSB2b2lkIDA7XG4vKipcbiAqIENsYXNzIHRvIG1hbmFnZSBjb2xsZWN0aW9ucyBvZiBHYXhpb3NJbnRlcmNlcHRvcnMgZm9yIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy5cbiAqL1xuY2xhc3MgR2F4aW9zSW50ZXJjZXB0b3JNYW5hZ2VyIGV4dGVuZHMgU2V0IHtcbn1cbmV4cG9ydHMuR2F4aW9zSW50ZXJjZXB0b3JNYW5hZ2VyID0gR2F4aW9zSW50ZXJjZXB0b3JNYW5hZ2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJjZXB0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXEgPSBleHBvcnRzLmpzb24gPSBleHBvcnRzLnRvQnVmZmVyID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuYXN5bmMgZnVuY3Rpb24gdG9CdWZmZXIoc3RyZWFtKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCk7XG59XG5leHBvcnRzLnRvQnVmZmVyID0gdG9CdWZmZXI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24ganNvbihzdHJlYW0pIHtcbiAgICBjb25zdCBidWYgPSBhd2FpdCB0b0J1ZmZlcihzdHJlYW0pO1xuICAgIGNvbnN0IHN0ciA9IGJ1Zi50b1N0cmluZygndXRmOCcpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IF9lcnI7XG4gICAgICAgIGVyci5tZXNzYWdlICs9IGAgKGlucHV0OiAke3N0cn0pYDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuanNvbiA9IGpzb247XG5mdW5jdGlvbiByZXEodXJsLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBocmVmID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiB1cmwuaHJlZjtcbiAgICBjb25zdCByZXEgPSAoaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSA/IGh0dHBzIDogaHR0cCkucmVxdWVzdCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlcVxuICAgICAgICAgICAgLm9uY2UoJ3Jlc3BvbnNlJywgcmVzb2x2ZSlcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgIC5lbmQoKTtcbiAgICB9KTtcbiAgICByZXEudGhlbiA9IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpO1xuICAgIHJldHVybiByZXE7XG59XG5leHBvcnRzLnJlcSA9IHJlcTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzXzEgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaGVscGVyc1wiKSwgZXhwb3J0cyk7XG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnQWdlbnRCYXNlSW50ZXJuYWxTdGF0ZScpO1xuY2xhc3MgQWdlbnQgZXh0ZW5kcyBodHRwLkFnZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzW0lOVEVSTkFMXSA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuXG4gICAgICovXG4gICAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgXCJwYXNzaW5nIHRocm91Z2hcIiB0byB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpc1xuICAgICAgICAgICAgLy8gc2V0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY2FzZSBzaW5jZSB1c2luZyBhIGZ1bGwgc3RyaW5nIFVSTFxuICAgICAgICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluYWxseSwgaWYgbm8gYHByb3RvY29sYCBwcm9wZXJ0eSB3YXMgc2V0LCB0aGVuIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0b1xuICAgICAgICAvLyBkZXRlY3QgdGhlIFwiaHR0cHNcIiBtb2R1bGUuXG4gICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuc29tZSgobCkgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8XG4gICAgICAgICAgICBsLmluZGV4T2YoJ25vZGU6aHR0cHM6JykgIT09IC0xKTtcbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBhc3luYyBzaWduYXR1cmVzIGluIGBjb25uZWN0KClgIGFuZCBOb2RlJ3MgbmF0aXZlXG4gICAgLy8gY29ubmVjdGlvbiBwb29saW5nIGluIGBodHRwLkFnZW50YCwgdGhlIGFycmF5IG9mIHNvY2tldHMgZm9yIGVhY2ggb3JpZ2luXG4gICAgLy8gaGFzIHRvIGJlIHVwZGF0ZWQgc3luY2hyb25vdXNseS4gVGhpcyBpcyBzbyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpc1xuICAgIC8vIGFjY3VyYXRlIHdoZW4gYGFkZFJlcXVlc3QoKWAgaXMgbmV4dCBjYWxsZWQuIFdlIGFjaGlldmUgdGhpcyBieSBjcmVhdGluZyBhXG4gICAgLy8gZmFrZSBzb2NrZXQgYW5kIGFkZGluZyBpdCB0byBgc29ja2V0c1tvcmlnaW5dYCBhbmQgaW5jcmVtZW50aW5nXG4gICAgLy8gYHRvdGFsU29ja2V0Q291bnRgLlxuICAgIGluY3JlbWVudFNvY2tldHMobmFtZSkge1xuICAgICAgICAvLyBJZiBgbWF4U29ja2V0c2AgYW5kIGBtYXhUb3RhbFNvY2tldHNgIGFyZSBib3RoIEluZmluaXR5IHRoZW4gdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBmYWtlIHNvY2tldCBiZWNhdXNlIE5vZGUuanMgbmF0aXZlIGNvbm5lY3Rpb24gcG9vbGluZ1xuICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGludm9rZWQuXG4gICAgICAgIGlmICh0aGlzLm1heFNvY2tldHMgPT09IEluZmluaXR5ICYmIHRoaXMubWF4VG90YWxTb2NrZXRzID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsIGluc3RhbmNlcyBvZiBgc29ja2V0c2AgYXJlIGV4cGVjdGVkIFR5cGVTY3JpcHQgZXJyb3JzLiBUaGVcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gYWRkIGl0IGFzIGEgcHJpdmF0ZSBwcm9wZXJ0eSBvZiB0aGlzIGNsYXNzIGJ1dCB0aGF0XG4gICAgICAgIC8vIHdpbGwgYnJlYWsgVHlwZVNjcmlwdCBzdWJjbGFzc2luZy5cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXRzW25hbWVdLnB1c2goZmFrZVNvY2tldCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHRvdGFsU29ja2V0Q291bnRgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQrKztcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxuICAgIGRlY3JlbWVudFNvY2tldHMobmFtZSwgc29ja2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdIHx8IHNvY2tldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldHMgPSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc29ja2V0cy5pbmRleE9mKHNvY2tldCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNvY2tldHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMudG90YWxTb2NrZXRDb3VudC0tO1xuICAgICAgICAgICAgaWYgKHNvY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgc29ja2V0c2AgaXMgcmVhZG9ubHkgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzb2NrZXQgcG9vbCwgd2UgbmVlZCB0byBjYWxsIGBnZXROYW1lKClgIG9uXG4gICAgLy8gdGhlIGNvcmUgYGh0dHBzLkFnZW50YCBpZiBpdCBpcyBhIHNlY3VyZUVuZHBvaW50LlxuICAgIGdldE5hbWUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN1cmVFbmRwb2ludCA9IHR5cGVvZiBvcHRpb25zLnNlY3VyZUVuZHBvaW50ID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8gb3B0aW9ucy5zZWN1cmVFbmRwb2ludFxuICAgICAgICAgICAgOiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyk7XG4gICAgICAgIGlmIChzZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHJldHVybiBodHRwc18xLkFnZW50LnByb3RvdHlwZS5nZXROYW1lLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5hbWUob3B0aW9ucyk7XG4gICAgfVxuICAgIGNyZWF0ZVNvY2tldChyZXEsIG9wdGlvbnMsIGNiKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoY29ubmVjdE9wdHMpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gdGhpcy5pbmNyZW1lbnRTb2NrZXRzKG5hbWUpO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKVxuICAgICAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRTb2NrZXRzKG5hbWUsIGZha2VTb2NrZXQpO1xuICAgICAgICAgICAgaWYgKHNvY2tldCBpbnN0YW5jZW9mIGh0dHAuQWdlbnQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmFkZFJlcXVlc3QocmVxLCBjb25uZWN0T3B0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGNyZWF0ZVNvY2tldCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZVNvY2tldChyZXEsIG9wdGlvbnMsIGNiKTtcbiAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRTb2NrZXRzKG5hbWUsIGZha2VTb2NrZXQpO1xuICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZUNvbm5lY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQ7XG4gICAgICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghc29ja2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvY2tldDtcbiAgICB9XG4gICAgZ2V0IGRlZmF1bHRQb3J0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0ID8/XG4gICAgICAgICAgICAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpO1xuICAgIH1cbiAgICBzZXQgZGVmYXVsdFBvcnQodikge1xuICAgICAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHtcbiAgICAgICAgICAgIHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0ID0gdjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcHJvdG9jb2woKSB7XG4gICAgICAgIHJldHVybiAodGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPz9cbiAgICAgICAgICAgICh0aGlzLmlzU2VjdXJlRW5kcG9pbnQoKSA/ICdodHRwczonIDogJ2h0dHA6JykpO1xuICAgIH1cbiAgICBzZXQgcHJvdG9jb2wodikge1xuICAgICAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHtcbiAgICAgICAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQWdlbnQgPSBBZ2VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlUHJveHlSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGRlYnVnID0gKDAsIGRlYnVnXzEuZGVmYXVsdCkoJ2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlJyk7XG5mdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBidWZmZXIgYW55IEhUVFAgdHJhZmZpYyB0aGF0IGhhcHBlbnMgd2l0aCB0aGUgcHJveHkgYmVmb3JlIHdlIGdldFxuICAgICAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiBcIjIwMFwiXG4gICAgICAgIC8vIHJlc3BvbnNlIGNvZGUsIHRoZW4gd2UgY2FuIHJlLXBsYXkgdGhlIFwiZGF0YVwiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlXG4gICAgICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLlxuICAgICAgICBsZXQgYnVmZmVyc0xlbmd0aCA9IDA7XG4gICAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBzb2NrZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGIpXG4gICAgICAgICAgICAgICAgb25kYXRhKGIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNvY2tldC5vbmNlKCdyZWFkYWJsZScsIHJlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCByZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIGRlYnVnKCdvbmVycm9yICVvJywgZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZGF0YShiKSB7XG4gICAgICAgICAgICBidWZmZXJzLnB1c2goYik7XG4gICAgICAgICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgZW5kT2ZIZWFkZXJzID0gYnVmZmVyZWQuaW5kZXhPZignXFxyXFxuXFxyXFxuJyk7XG4gICAgICAgICAgICBpZiAoZW5kT2ZIZWFkZXJzID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nXG4gICAgICAgICAgICAgICAgZGVidWcoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7XG4gICAgICAgICAgICAgICAgcmVhZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclBhcnRzID0gYnVmZmVyZWRcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgZW5kT2ZIZWFkZXJzKVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygnYXNjaWknKVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBoZWFkZXJQYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKCFmaXJzdExpbmUpIHtcbiAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RMaW5lUGFydHMgPSBmaXJzdExpbmUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSArZmlyc3RMaW5lUGFydHNbMV07XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVyUGFydHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29sb24gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6IFwiJHtoZWFkZXJ9XCJgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZSgwLCBmaXJzdENvbG9uKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnNsaWNlKGZpcnN0Q29sb24gKyAxKS50cmltU3RhcnQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1trZXldID0gW2N1cnJlbnQsIHZhbHVlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVidWcoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJ1ZmZlcmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgICAgICBzb2NrZXQub24oJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgcmVhZCgpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5wYXJzZVByb3h5UmVzcG9uc2UgPSBwYXJzZVByb3h5UmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZS1wcm94eS1yZXNwb25zZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBzUHJveHlBZ2VudCA9IHZvaWQgMDtcbmNvbnN0IG5ldCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibmV0XCIpKTtcbmNvbnN0IHRscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidGxzXCIpKTtcbmNvbnN0IGFzc2VydF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJhc3NlcnRcIikpO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgYWdlbnRfYmFzZV8xID0gcmVxdWlyZShcImFnZW50LWJhc2VcIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBwYXJzZV9wcm94eV9yZXNwb25zZV8xID0gcmVxdWlyZShcIi4vcGFyc2UtcHJveHktcmVzcG9uc2VcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwcy1wcm94eS1hZ2VudCcpO1xuY29uc3Qgc2V0U2VydmVybmFtZUZyb21Ob25JcEhvc3QgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmIChvcHRpb25zLnNlcnZlcm5hbWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBvcHRpb25zLmhvc3QgJiZcbiAgICAgICAgIW5ldC5pc0lQKG9wdGlvbnMuaG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzZXJ2ZXJuYW1lOiBvcHRpb25zLmhvc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xufTtcbi8qKlxuICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvXG4gKiB0aGUgc3BlY2lmaWVkIFwiSFRUUChzKSBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy5cbiAqXG4gKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlXG4gKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsXG4gKiBhbmQgdGhlbiB0aGUgcHJveHkgc2VydmVyIGNvbm5lY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiB0YXJnZXQgYW5kIGlzc3VlcyB0aGVcbiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuXG4gKlxuICogYGh0dHBzOmAgcmVxdWVzdHMgaGF2ZSB0aGVpciBzb2NrZXQgY29ubmVjdGlvbiB1cGdyYWRlZCB0byBUTFMgb25jZVxuICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiAqL1xuY2xhc3MgSHR0cHNQcm94eUFnZW50IGV4dGVuZHMgYWdlbnRfYmFzZV8xLkFnZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm94eSwgb3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0geyBwYXRoOiB1bmRlZmluZWQgfTtcbiAgICAgICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgdXJsXzEuVVJMKHByb3h5KSA6IHByb3h5O1xuICAgICAgICB0aGlzLnByb3h5SGVhZGVycyA9IG9wdHM/LmhlYWRlcnMgPz8ge307XG4gICAgICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yXG4gICAgICAgICAgICBBTFBOUHJvdG9jb2xzOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhXG4gICAgICogbmV3IEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdHMuaG9zdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCJob3N0XCIgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoc2V0U2VydmVybmFtZUZyb21Ob25JcEhvc3QodGhpcy5jb25uZWN0T3B0cykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGBuZXQuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXFxyXFxuYDtcbiAgICAgICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKHByb3h5LnVzZXJuYW1lIHx8IHByb3h5LnBhc3N3b3JkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gO1xuICAgICAgICBpZiAoIWhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSkge1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmVcbiAgICAgICAgICAgICAgICA/ICdLZWVwLUFsaXZlJ1xuICAgICAgICAgICAgICAgIDogJ2Nsb3NlJztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cXHJcXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3h5UmVzcG9uc2VQcm9taXNlID0gKDAsIHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEucGFyc2VQcm94eVJlc3BvbnNlKShzb2NrZXQpO1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cXHJcXG5gKTtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7XG4gICAgICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTtcbiAgICAgICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpO1xuICAgICAgICBpZiAoY29ubmVjdC5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpO1xuICAgICAgICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgICAgICAuLi5vbWl0KHNldFNlcnZlcm5hbWVGcm9tTm9uSXBIb3N0KG9wdHMpLCAnaG9zdCcsICdwYXRoJywgJ3BvcnQnKSxcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNvY2tldDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21lIG90aGVyIHN0YXR1cyBjb2RlIHRoYXQncyBub3QgMjAwLi4uIG5lZWQgdG8gcmUtcGxheSB0aGUgSFRUUFxuICAgICAgICAvLyBoZWFkZXIgXCJkYXRhXCIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpc1xuICAgICAgICAvLyBhdHRhY2hlZCBzbyB0aGF0IHRoZSBub2RlIGNvcmUgYGh0dHBgIGNhbiBwYXJzZSBhbmQgaGFuZGxlIHRoZVxuICAgICAgICAvLyBlcnJvciBzdGF0dXMgY29kZS5cbiAgICAgICAgLy8gQ2xvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCwgYW5kIGEgbmV3IFwiZmFrZVwiIHNvY2tldCBpcyByZXR1cm5lZFxuICAgICAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0XG4gICAgICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyXG4gICAgICAgIC8vIHNlbnNpdGl2ZSBkYXRhKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDJcbiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgICAgICBmYWtlU29ja2V0LnJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgXCJzb2NrZXRcIiBldmVudCB0byByZS1wbGF5IHRoZSBcImRhdGFcIiBldmVudHMuXG4gICAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCAocykgPT4ge1xuICAgICAgICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7XG4gICAgICAgICAgICAoMCwgYXNzZXJ0XzEuZGVmYXVsdCkocy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKTtcbiAgICAgICAgICAgIC8vIFJlcGxheSB0aGUgXCJidWZmZXJlZFwiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdFxuICAgICAgICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3JcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyLlxuICAgICAgICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTtcbiAgICAgICAgICAgIHMucHVzaChudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWtlU29ja2V0O1xuICAgIH1cbn1cbkh0dHBzUHJveHlBZ2VudC5wcm90b2NvbHMgPSBbJ2h0dHAnLCAnaHR0cHMnXTtcbmV4cG9ydHMuSHR0cHNQcm94eUFnZW50ID0gSHR0cHNQcm94eUFnZW50O1xuZnVuY3Rpb24gcmVzdW1lKHNvY2tldCkge1xuICAgIHNvY2tldC5yZXN1bWUoKTtcbn1cbmZ1bmN0aW9uIG9taXQob2JqLCAuLi5rZXlzKSB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgbGV0IGtleTtcbiAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xudmFyIF9HYXhpb3NfaW5zdGFuY2VzLCBfYSwgX0dheGlvc191cmxNYXlVc2VQcm94eSwgX0dheGlvc19hcHBseVJlcXVlc3RJbnRlcmNlcHRvcnMsIF9HYXhpb3NfYXBwbHlSZXNwb25zZUludGVyY2VwdG9ycywgX0dheGlvc19wcmVwYXJlUmVxdWVzdCwgX0dheGlvc19wcm94eUFnZW50LCBfR2F4aW9zX2dldFByb3h5QWdlbnQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdheGlvcyA9IHZvaWQgMDtcbmNvbnN0IGV4dGVuZF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJleHRlbmRcIikpO1xuY29uc3QgaHR0cHNfMSA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbmNvbnN0IG5vZGVfZmV0Y2hfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibm9kZS1mZXRjaFwiKSk7XG5jb25zdCBxdWVyeXN0cmluZ18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKSk7XG5jb25zdCBpc19zdHJlYW1fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiaXMtc3RyZWFtXCIpKTtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IGNvbW1vbl8xID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuY29uc3QgcmV0cnlfMSA9IHJlcXVpcmUoXCIuL3JldHJ5XCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3QgdXVpZF8xID0gcmVxdWlyZShcInV1aWRcIik7XG5jb25zdCBpbnRlcmNlcHRvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJjZXB0b3JcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5jb25zdCBmZXRjaCA9IGhhc0ZldGNoKCkgPyB3aW5kb3cuZmV0Y2ggOiBub2RlX2ZldGNoXzEuZGVmYXVsdDtcbmZ1bmN0aW9uIGhhc1dpbmRvdygpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISF3aW5kb3c7XG59XG5mdW5jdGlvbiBoYXNGZXRjaCgpIHtcbiAgICByZXR1cm4gaGFzV2luZG93KCkgJiYgISF3aW5kb3cuZmV0Y2g7XG59XG5mdW5jdGlvbiBoYXNCdWZmZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gaGFzSGVhZGVyKG9wdGlvbnMsIGhlYWRlcikge1xuICAgIHJldHVybiAhIWdldEhlYWRlcihvcHRpb25zLCBoZWFkZXIpO1xufVxuZnVuY3Rpb24gZ2V0SGVhZGVyKG9wdGlvbnMsIGhlYWRlcikge1xuICAgIGhlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycykgfHwge30pKSB7XG4gICAgICAgIGlmIChoZWFkZXIgPT09IGtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXJzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmNsYXNzIEdheGlvcyB7XG4gICAgLyoqXG4gICAgICogVGhlIEdheGlvcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIEhUVFAgcmVxdWVzdHMuXG4gICAgICogQHBhcmFtIGRlZmF1bHRzIFRoZSBkZWZhdWx0IHNldCBvZiBvcHRpb25zIHRvIGJlIHVzZWQgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdHMpIHtcbiAgICAgICAgX0dheGlvc19pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICB0aGlzLmFnZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cyB8fCB7fTtcbiAgICAgICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICAgICAgICByZXF1ZXN0OiBuZXcgaW50ZXJjZXB0b3JfMS5HYXhpb3NJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgICAgICAgIHJlc3BvbnNlOiBuZXcgaW50ZXJjZXB0b3JfMS5HYXhpb3NJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBIVFRQIHJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0cyBTZXQgb2YgSFRUUCBvcHRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGlzIEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyByZXF1ZXN0KG9wdHMgPSB7fSkge1xuICAgICAgICBvcHRzID0gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR2F4aW9zX2luc3RhbmNlcywgXCJtXCIsIF9HYXhpb3NfcHJlcGFyZVJlcXVlc3QpLmNhbGwodGhpcywgb3B0cyk7XG4gICAgICAgIG9wdHMgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HYXhpb3NfaW5zdGFuY2VzLCBcIm1cIiwgX0dheGlvc19hcHBseVJlcXVlc3RJbnRlcmNlcHRvcnMpLmNhbGwodGhpcywgb3B0cyk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HYXhpb3NfaW5zdGFuY2VzLCBcIm1cIiwgX0dheGlvc19hcHBseVJlc3BvbnNlSW50ZXJjZXB0b3JzKS5jYWxsKHRoaXMsIHRoaXMuX3JlcXVlc3Qob3B0cykpO1xuICAgIH1cbiAgICBhc3luYyBfZGVmYXVsdEFkYXB0ZXIob3B0cykge1xuICAgICAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRzLmZldGNoSW1wbGVtZW50YXRpb24gfHwgZmV0Y2g7XG4gICAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCBmZXRjaEltcGwob3B0cy51cmwsIG9wdHMpKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VEYXRhKG9wdHMsIHJlcyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVJlc3BvbnNlKG9wdHMsIHJlcywgZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsLCByZXRyeWFibGUgdmVyc2lvbiBvZiB0aGUgYHJlcXVlc3RgIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gb3B0cyBTZXQgb2YgSFRUUCBvcHRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGlzIEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBfcmVxdWVzdChvcHRzID0ge30pIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHRyYW5zbGF0ZWRSZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChvcHRzLmFkYXB0ZXIpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVkUmVzcG9uc2UgPSBhd2FpdCBvcHRzLmFkYXB0ZXIob3B0cywgdGhpcy5fZGVmYXVsdEFkYXB0ZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVkUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9kZWZhdWx0QWRhcHRlcihvcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0cy52YWxpZGF0ZVN0YXR1cyh0cmFuc2xhdGVkUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRyYW5zbGF0ZWRSZXNwb25zZSA9PT0gbnVsbCB8fCB0cmFuc2xhdGVkUmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyYW5zbGF0ZWRSZXNwb25zZS5kYXRhKS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRyYW5zbGF0ZWRSZXNwb25zZSA9PT0gbnVsbCB8fCB0cmFuc2xhdGVkUmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyYW5zbGF0ZWRSZXNwb25zZS5kYXRhKS5vbignZW5kJywgcmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkUmVzcG9uc2UuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29tbW9uXzEuR2F4aW9zRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHt0cmFuc2xhdGVkUmVzcG9uc2Uuc3RhdHVzfWAsIG9wdHMsIHRyYW5zbGF0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBlIGluc3RhbmNlb2YgY29tbW9uXzEuR2F4aW9zRXJyb3JcbiAgICAgICAgICAgICAgICA/IGVcbiAgICAgICAgICAgICAgICA6IG5ldyBjb21tb25fMS5HYXhpb3NFcnJvcihlLm1lc3NhZ2UsIG9wdHMsIHVuZGVmaW5lZCwgZSk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5LCBjb25maWcgfSA9IGF3YWl0ICgwLCByZXRyeV8xLmdldFJldHJ5Q29uZmlnKShlcnIpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJldHJ5ICYmIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGVyci5jb25maWcucmV0cnlDb25maWcuY3VycmVudFJldHJ5QXR0ZW1wdCA9XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5yZXRyeUNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0O1xuICAgICAgICAgICAgICAgIC8vIFRoZSBlcnJvcidzIGNvbmZpZyBjb3VsZCBiZSByZWRhY3RlZCAtIHRoZXJlZm9yZSB3ZSBvbmx5IHdhbnQgdG9cbiAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSByZXRyeSBzdGF0ZSBvdmVyIHRvIHRoZSBleGlzdGluZyBjb25maWdcbiAgICAgICAgICAgICAgICBvcHRzLnJldHJ5Q29uZmlnID0gKF9iID0gZXJyLmNvbmZpZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJldHJ5Q29uZmlnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0KG9wdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGdldFJlc3BvbnNlRGF0YShvcHRzLCByZXMpIHtcbiAgICAgICAgc3dpdGNoIChvcHRzLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyZWFtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmJvZHk7XG4gICAgICAgICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF9iKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnYXJyYXlidWZmZXInOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2InOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuYmxvYigpO1xuICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy50ZXh0KCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlc3BvbnNlRGF0YUZyb21Db250ZW50VHlwZShyZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRocm93IGZvciBhbnkgbm9uLTJ4eCBzdGF0dXMgY29kZVxuICAgICAqIEBwYXJhbSBzdGF0dXMgc3RhdHVzIGNvZGUgZnJvbSB0aGUgSFRUUCByZXNwb25zZVxuICAgICAqL1xuICAgIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgICAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBhIHNldCBvZiBrZXkvdmFsdWUgcGFycyBpbnRvIGEgcXVlcnlzdHJpbmcgZm9ybWF0ICg/Zm9vPWJhciZiYXo9Ym9vKVxuICAgICAqIEBwYXJhbSBwYXJhbXMga2V5IHZhbHVlIHBhcnMgdG8gZW5jb2RlXG4gICAgICovXG4gICAgcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5c3RyaW5nXzEuZGVmYXVsdC5zdHJpbmdpZnkocGFyYW1zKTtcbiAgICB9XG4gICAgdHJhbnNsYXRlUmVzcG9uc2Uob3B0cywgcmVzLCBkYXRhKSB7XG4gICAgICAgIC8vIGhlYWRlcnMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBhIG1hcCB0byBhbiBvYmpcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICByZXMuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25maWc6IG9wdHMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3RMaWtlXG4gICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VVUkw6IHJlcy51cmwsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBwYXJzZSBhIHJlc3BvbnNlIGJ5IGxvb2tpbmcgYXQgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuXG4gICAgICogQHBhcmFtIHtGZXRjaFJlc3BvbnNlfSByZXNwb25zZSB0aGUgSFRUUCByZXNwb25zZS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVzcG9uc2UgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZXNwb25zZURhdGFGcm9tQ29udGVudFR5cGUocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIE1haW50YWluIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgYnkgY2FsbGluZyB0ZXh0KClcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9iKSB7XG4gICAgICAgICAgICAgICAgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRlbnRUeXBlLm1hdGNoKC9edGV4dFxcLy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgdHlwZSBpcyBzb21ldGhpbmcgbm90IGVhc2lseSBoYW5kbGVkLCBqdXN0IHJldHVybiB0aGUgcmF3IGRhdGEgKGJsb2IpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXN5bmMgZ2VuZXJhdG9yIHRoYXQgeWllbGRzIHRoZSBwaWVjZXMgb2YgYSBtdWx0aXBhcnQvcmVsYXRlZCByZXF1ZXN0IGJvZHkuXG4gICAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIHRoZSBzcGVjOiBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjM4Ny50eHQuIEhvd2V2ZXIsIHJlY3Vyc2l2ZVxuICAgICAqIG11bHRpcGFydC9yZWxhdGVkIHJlcXVlc3RzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7R2F4aW9NdWx0aXBhcnRPcHRpb25zW119IG11bHRpcGFydE9wdGlvbnMgdGhlIHBpZWNlcyB0byB0dXJuIGludG8gYSBtdWx0aXBhcnQvcmVsYXRlZCBib2R5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBib3VuZGFyeSB0aGUgYm91bmRhcnkgc3RyaW5nIHRvIGJlIHBsYWNlZCBiZXR3ZWVuIGVhY2ggcGFydC5cbiAgICAgKi9cbiAgICBhc3luYyAqZ2V0TXVsdGlwYXJ0UmVxdWVzdChtdWx0aXBhcnRPcHRpb25zLCBib3VuZGFyeSkge1xuICAgICAgICBjb25zdCBmaW5hbGUgPSBgLS0ke2JvdW5kYXJ5fS0tYDtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50UGFydCBvZiBtdWx0aXBhcnRPcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0Q29udGVudFR5cGUgPSBjdXJyZW50UGFydC5oZWFkZXJzWydDb250ZW50LVR5cGUnXSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcbiAgICAgICAgICAgIGNvbnN0IHByZWFtYmxlID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LVR5cGU6ICR7cGFydENvbnRlbnRUeXBlfVxcclxcblxcclxcbmA7XG4gICAgICAgICAgICB5aWVsZCBwcmVhbWJsZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudFBhcnQuY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjdXJyZW50UGFydC5jb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIGN1cnJlbnRQYXJ0LmNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCAnXFxyXFxuJztcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBmaW5hbGU7XG4gICAgfVxufVxuZXhwb3J0cy5HYXhpb3MgPSBHYXhpb3M7XG5fYSA9IEdheGlvcywgX0dheGlvc19pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfR2F4aW9zX3VybE1heVVzZVByb3h5ID0gZnVuY3Rpb24gX0dheGlvc191cmxNYXlVc2VQcm94eSh1cmwsIG5vUHJveHkgPSBbXSkge1xuICAgIHZhciBfYiwgX2M7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gbmV3IHVybF8xLlVSTCh1cmwpO1xuICAgIGNvbnN0IG5vUHJveHlMaXN0ID0gWy4uLm5vUHJveHldO1xuICAgIGNvbnN0IG5vUHJveHlFbnZMaXN0ID0gKChfYyA9ICgoX2IgPSBwcm9jZXNzLmVudi5OT19QUk9YWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvY2Vzcy5lbnYubm9fcHJveHkpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc3BsaXQoJywnKSkgfHwgW107XG4gICAgZm9yIChjb25zdCBydWxlIG9mIG5vUHJveHlFbnZMaXN0KSB7XG4gICAgICAgIG5vUHJveHlMaXN0LnB1c2gocnVsZS50cmltKCkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2Ygbm9Qcm94eUxpc3QpIHtcbiAgICAgICAgLy8gTWF0Y2ggcmVnZXhcbiAgICAgICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgIGlmIChydWxlLnRlc3QoY2FuZGlkYXRlLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hdGNoIFVSTFxuICAgICAgICBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgdXJsXzEuVVJMKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5vcmlnaW4gPT09IGNhbmRpZGF0ZS5vcmlnaW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWF0Y2ggc3RyaW5nIHJlZ2V4XG4gICAgICAgIGVsc2UgaWYgKHJ1bGUuc3RhcnRzV2l0aCgnKi4nKSB8fCBydWxlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5lZFJ1bGUgPSBydWxlLnJlcGxhY2UoL15cXCpcXC4vLCAnLicpO1xuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5ob3N0bmFtZS5lbmRzV2l0aChjbGVhbmVkUnVsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQmFzaWMgc3RyaW5nIG1hdGNoXG4gICAgICAgIGVsc2UgaWYgKHJ1bGUgPT09IGNhbmRpZGF0ZS5vcmlnaW4gfHxcbiAgICAgICAgICAgIHJ1bGUgPT09IGNhbmRpZGF0ZS5ob3N0bmFtZSB8fFxuICAgICAgICAgICAgcnVsZSA9PT0gY2FuZGlkYXRlLmhyZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn0sIF9HYXhpb3NfYXBwbHlSZXF1ZXN0SW50ZXJjZXB0b3JzID0gXG4vKipcbiAqIEFwcGxpZXMgdGhlIHJlcXVlc3QgaW50ZXJjZXB0b3JzLiBUaGUgcmVxdWVzdCBpbnRlcmNlcHRvcnMgYXJlIGFwcGxpZWQgYWZ0ZXIgdGhlXG4gKiBjYWxsIHRvIHByZXBhcmVSZXF1ZXN0IGlzIGNvbXBsZXRlZC5cbiAqXG4gKiBAcGFyYW0ge0dheGlvc09wdGlvbnN9IG9wdGlvbnMgVGhlIGN1cnJlbnQgc2V0IG9mIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8R2F4aW9zT3B0aW9ucz59IFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgc2V0IG9mIG9wdGlvbnMgb3IgcmVzcG9uc2UgYWZ0ZXIgaW50ZXJjZXB0b3JzIGFyZSBhcHBsaWVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBfR2F4aW9zX2FwcGx5UmVxdWVzdEludGVyY2VwdG9ycyhvcHRpb25zKSB7XG4gICAgbGV0IHByb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZShvcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QudmFsdWVzKCkpIHtcbiAgICAgICAgaWYgKGludGVyY2VwdG9yKSB7XG4gICAgICAgICAgICBwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihpbnRlcmNlcHRvci5yZXNvbHZlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG59LCBfR2F4aW9zX2FwcGx5UmVzcG9uc2VJbnRlcmNlcHRvcnMgPSBcbi8qKlxuICogQXBwbGllcyB0aGUgcmVzcG9uc2UgaW50ZXJjZXB0b3JzLiBUaGUgcmVzcG9uc2UgaW50ZXJjZXB0b3JzIGFyZSBhcHBsaWVkIGFmdGVyIHRoZVxuICogY2FsbCB0byByZXF1ZXN0IGlzIG1hZGUuXG4gKlxuICogQHBhcmFtIHtHYXhpb3NPcHRpb25zfSBvcHRpb25zIFRoZSBjdXJyZW50IHNldCBvZiBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPEdheGlvc09wdGlvbnM+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNldCBvZiBvcHRpb25zIG9yIHJlc3BvbnNlIGFmdGVyIGludGVyY2VwdG9ycyBhcmUgYXBwbGllZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX0dheGlvc19hcHBseVJlc3BvbnNlSW50ZXJjZXB0b3JzKHJlc3BvbnNlKSB7XG4gICAgbGV0IHByb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS52YWx1ZXMoKSkge1xuICAgICAgICBpZiAoaW50ZXJjZXB0b3IpIHtcbiAgICAgICAgICAgIHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKGludGVyY2VwdG9yLnJlc29sdmVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbn0sIF9HYXhpb3NfcHJlcGFyZVJlcXVlc3QgPSBcbi8qKlxuICogVmFsaWRhdGVzIHRoZSBvcHRpb25zLCBtZXJnZXMgdGhlbSB3aXRoIGRlZmF1bHRzLCBhbmQgcHJlcGFyZSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcmlnaW5hbCBvcHRpb25zIHBhc3NlZCBmcm9tIHRoZSBjbGllbnQuXG4gKiBAcmV0dXJucyBQcmVwYXJlZCBvcHRpb25zLCByZWFkeSB0byBtYWtlIGEgcmVxdWVzdFxuICovXG5hc3luYyBmdW5jdGlvbiBfR2F4aW9zX3ByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICB2YXIgX2IsIF9jLCBfZCwgX2U7XG4gICAgY29uc3Qgb3B0cyA9ICgwLCBleHRlbmRfMS5kZWZhdWx0KSh0cnVlLCB7fSwgdGhpcy5kZWZhdWx0cywgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRzLnVybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gICAgLy8gYmFzZVVybCBoYXMgYmVlbiBkZXByZWNhdGVkLCByZW1vdmUgaW4gMi4wXG4gICAgY29uc3QgYmFzZVVybCA9IG9wdHMuYmFzZVVybCB8fCBvcHRzLmJhc2VVUkw7XG4gICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgb3B0cy51cmwgPSBiYXNlVXJsLnRvU3RyaW5nKCkgKyBvcHRzLnVybDtcbiAgICB9XG4gICAgb3B0cy5wYXJhbXNTZXJpYWxpemVyID0gb3B0cy5wYXJhbXNTZXJpYWxpemVyIHx8IHRoaXMucGFyYW1zU2VyaWFsaXplcjtcbiAgICBpZiAob3B0cy5wYXJhbXMgJiYgT2JqZWN0LmtleXMob3B0cy5wYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGFkZGl0aW9uYWxRdWVyeVBhcmFtcyA9IG9wdHMucGFyYW1zU2VyaWFsaXplcihvcHRzLnBhcmFtcyk7XG4gICAgICAgIGlmIChhZGRpdGlvbmFsUXVlcnlQYXJhbXMuc3RhcnRzV2l0aCgnPycpKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUXVlcnlQYXJhbXMgPSBhZGRpdGlvbmFsUXVlcnlQYXJhbXMuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gb3B0cy51cmwudG9TdHJpbmcoKS5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgICAgICBvcHRzLnVybCA9IG9wdHMudXJsICsgcHJlZml4ICsgYWRkaXRpb25hbFF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4Q29udGVudExlbmd0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgb3B0cy5zaXplID0gb3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4UmVkaXJlY3RzID09PSAnbnVtYmVyJykge1xuICAgICAgICBvcHRzLmZvbGxvdyA9IG9wdGlvbnMubWF4UmVkaXJlY3RzO1xuICAgIH1cbiAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgaWYgKG9wdHMubXVsdGlwYXJ0ID09PSB1bmRlZmluZWQgJiYgb3B0cy5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSB0eXBlb2YgRm9ybURhdGEgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMuZGF0YSkgaW5zdGFuY2VvZiBGb3JtRGF0YTtcbiAgICAgICAgaWYgKGlzX3N0cmVhbV8xLmRlZmF1bHQucmVhZGFibGUob3B0cy5kYXRhKSkge1xuICAgICAgICAgICAgb3B0cy5ib2R5ID0gb3B0cy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc0J1ZmZlcigpICYmIEJ1ZmZlci5pc0J1ZmZlcihvcHRzLmRhdGEpKSB7XG4gICAgICAgICAgICAvLyBEbyBub3QgYXR0ZW1wdCB0byBKU09OLnN0cmluZ2lmeSgpIGEgQnVmZmVyOlxuICAgICAgICAgICAgb3B0cy5ib2R5ID0gb3B0cy5kYXRhO1xuICAgICAgICAgICAgaWYgKCFoYXNIZWFkZXIob3B0cywgJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5kYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gSWYgd3d3LWZvcm0tdXJsZW5jb2RlZCBjb250ZW50IHR5cGUgaGFzIGJlZW4gc2V0LCBidXQgZGF0YSBpc1xuICAgICAgICAgICAgLy8gcHJvdmlkZWQgYXMgYW4gb2JqZWN0LCBzZXJpYWxpemUgdGhlIGNvbnRlbnQgdXNpbmcgcXVlcnlzdHJpbmc6XG4gICAgICAgICAgICBpZiAoIWlzRm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SGVhZGVyKG9wdHMsICdjb250ZW50LXR5cGUnKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5ib2R5ID0gb3B0cy5wYXJhbXNTZXJpYWxpemVyKG9wdHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKCEob3B0cy5kYXRhIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzSGVhZGVyKG9wdHMsICdDb250ZW50LVR5cGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvcHRzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMuYm9keSA9IG9wdHMuZGF0YTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRzLm11bHRpcGFydCAmJiBvcHRzLm11bHRpcGFydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIG5vdGU6IG9uY2UgdGhlIG1pbmltdW0gdmVyc2lvbiByZWFjaGVzIE5vZGUgMTYsXG4gICAgICAgIC8vIHRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggcmFuZG9tVVVJRCgpIGZ1bmN0aW9uIGZyb20gY3J5cHRvXG4gICAgICAgIC8vIGFuZCB0aGUgZGVwZW5kZW5jeSBvbiBVVUlEIHJlbW92ZWRcbiAgICAgICAgY29uc3QgYm91bmRhcnkgPSAoMCwgdXVpZF8xLnY0KSgpO1xuICAgICAgICBvcHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gYG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWA7XG4gICAgICAgIGNvbnN0IGJvZHlTdHJlYW0gPSBuZXcgc3RyZWFtXzEuUGFzc1Rocm91Z2goKTtcbiAgICAgICAgb3B0cy5ib2R5ID0gYm9keVN0cmVhbTtcbiAgICAgICAgKDAsIHN0cmVhbV8xLnBpcGVsaW5lKSh0aGlzLmdldE11bHRpcGFydFJlcXVlc3Qob3B0cy5tdWx0aXBhcnQsIGJvdW5kYXJ5KSwgYm9keVN0cmVhbSwgKCkgPT4geyB9KTtcbiAgICB9XG4gICAgb3B0cy52YWxpZGF0ZVN0YXR1cyA9IG9wdHMudmFsaWRhdGVTdGF0dXMgfHwgdGhpcy52YWxpZGF0ZVN0YXR1cztcbiAgICBvcHRzLnJlc3BvbnNlVHlwZSA9IG9wdHMucmVzcG9uc2VUeXBlIHx8ICd1bmtub3duJztcbiAgICBpZiAoIW9wdHMuaGVhZGVyc1snQWNjZXB0J10gJiYgb3B0cy5yZXNwb25zZVR5cGUgPT09ICdqc29uJykge1xuICAgICAgICBvcHRzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgIH1cbiAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kIHx8ICdHRVQnO1xuICAgIGNvbnN0IHByb3h5ID0gb3B0cy5wcm94eSB8fFxuICAgICAgICAoKF9iID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLmVudikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLkhUVFBTX1BST1hZKSB8fFxuICAgICAgICAoKF9jID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLmVudikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmh0dHBzX3Byb3h5KSB8fFxuICAgICAgICAoKF9kID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLmVudikgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLkhUVFBfUFJPWFkpIHx8XG4gICAgICAgICgoX2UgPSBwcm9jZXNzID09PSBudWxsIHx8IHByb2Nlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2Nlc3MuZW52KSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaHR0cF9wcm94eSk7XG4gICAgY29uc3QgdXJsTWF5VXNlUHJveHkgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HYXhpb3NfaW5zdGFuY2VzLCBcIm1cIiwgX0dheGlvc191cmxNYXlVc2VQcm94eSkuY2FsbCh0aGlzLCBvcHRzLnVybCwgb3B0cy5ub1Byb3h5KTtcbiAgICBpZiAob3B0cy5hZ2VudCkge1xuICAgICAgICAvLyBkb24ndCBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zIC0gdXNlIHRoZSB1c2VyLXByb3ZpZGVkIGFnZW50LlxuICAgIH1cbiAgICBlbHNlIGlmIChwcm94eSAmJiB1cmxNYXlVc2VQcm94eSkge1xuICAgICAgICBjb25zdCBIdHRwc1Byb3h5QWdlbnQgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hLCBfYSwgXCJtXCIsIF9HYXhpb3NfZ2V0UHJveHlBZ2VudCkuY2FsbChfYSk7XG4gICAgICAgIGlmICh0aGlzLmFnZW50Q2FjaGUuaGFzKHByb3h5KSkge1xuICAgICAgICAgICAgb3B0cy5hZ2VudCA9IHRoaXMuYWdlbnRDYWNoZS5nZXQocHJveHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0cy5hZ2VudCA9IG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHksIHtcbiAgICAgICAgICAgICAgICBjZXJ0OiBvcHRzLmNlcnQsXG4gICAgICAgICAgICAgICAga2V5OiBvcHRzLmtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZ2VudENhY2hlLnNldChwcm94eSwgb3B0cy5hZ2VudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAob3B0cy5jZXJ0ICYmIG9wdHMua2V5KSB7XG4gICAgICAgIC8vIENvbmZpZ3VyZSBjbGllbnQgZm9yIG1UTFNcbiAgICAgICAgaWYgKHRoaXMuYWdlbnRDYWNoZS5oYXMob3B0cy5rZXkpKSB7XG4gICAgICAgICAgICBvcHRzLmFnZW50ID0gdGhpcy5hZ2VudENhY2hlLmdldChvcHRzLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzLmFnZW50ID0gbmV3IGh0dHBzXzEuQWdlbnQoe1xuICAgICAgICAgICAgICAgIGNlcnQ6IG9wdHMuY2VydCxcbiAgICAgICAgICAgICAgICBrZXk6IG9wdHMua2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFnZW50Q2FjaGUuc2V0KG9wdHMua2V5LCBvcHRzLmFnZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMuZXJyb3JSZWRhY3RvciAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBvcHRzLmVycm9yUmVkYWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICAgIG9wdHMuZXJyb3JSZWRhY3RvciA9IGNvbW1vbl8xLmRlZmF1bHRFcnJvclJlZGFjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn0sIF9HYXhpb3NfZ2V0UHJveHlBZ2VudCA9IGFzeW5jIGZ1bmN0aW9uIF9HYXhpb3NfZ2V0UHJveHlBZ2VudCgpIHtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9hLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9hLCBcImZcIiwgX0dheGlvc19wcm94eUFnZW50KSB8fCAoYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBfX2ltcG9ydFN0YXIocmVxdWlyZSgnaHR0cHMtcHJveHktYWdlbnQnKSkpKS5IdHRwc1Byb3h5QWdlbnQsIFwiZlwiLCBfR2F4aW9zX3Byb3h5QWdlbnQpO1xuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9hLCBcImZcIiwgX0dheGlvc19wcm94eUFnZW50KTtcbn07XG4vKipcbiAqIEEgY2FjaGUgZm9yIHRoZSBsYXppbHktbG9hZGVkIHByb3h5IGFnZW50LlxuICpcbiAqIFNob3VsZCB1c2Uge0BsaW5rIEdheGlvc1sjZ2V0UHJveHlBZ2VudF19IHRvIHJldHJpZXZlLlxuICovXG4vLyB1c2luZyBgaW1wb3J0YCB0byBkeW5hbWljYWxseSBpbXBvcnQgdGhlIHR5cGVzIGhlcmVcbl9HYXhpb3NfcHJveHlBZ2VudCA9IHsgdmFsdWU6IHZvaWQgMCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2F4aW9zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnN0YW5jZSA9IGV4cG9ydHMuR2F4aW9zID0gZXhwb3J0cy5HYXhpb3NFcnJvciA9IHZvaWQgMDtcbmV4cG9ydHMucmVxdWVzdCA9IHJlcXVlc3Q7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCIuL2dheGlvc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdheGlvc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2F4aW9zXzEuR2F4aW9zOyB9IH0pO1xudmFyIGNvbW1vbl8xID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2F4aW9zRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1vbl8xLkdheGlvc0Vycm9yOyB9IH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVyY2VwdG9yXCIpLCBleHBvcnRzKTtcbi8qKlxuICogVGhlIGRlZmF1bHQgaW5zdGFuY2UgdXNlZCB3aGVuIHRoZSBgcmVxdWVzdGAgbWV0aG9kIGlzIGRpcmVjdGx5XG4gKiBpbnZva2VkLlxuICovXG5leHBvcnRzLmluc3RhbmNlID0gbmV3IGdheGlvc18xLkdheGlvcygpO1xuLyoqXG4gKiBNYWtlIGFuIEhUVFAgcmVxdWVzdCB1c2luZyB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRzIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3Qob3B0cykge1xuICAgIHJldHVybiBleHBvcnRzLmluc3RhbmNlLnJlcXVlc3Qob3B0cyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIjsoZnVuY3Rpb24gKGdsb2JhbE9iamVjdCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbi8qXHJcbiAqICAgICAgYmlnbnVtYmVyLmpzIHY5LjEuMlxyXG4gKiAgICAgIEEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBhcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMuXHJcbiAqICAgICAgaHR0cHM6Ly9naXRodWIuY29tL01pa2VNY2wvYmlnbnVtYmVyLmpzXHJcbiAqICAgICAgQ29weXJpZ2h0IChjKSAyMDIyIE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAqICAgICAgTUlUIExpY2Vuc2VkLlxyXG4gKlxyXG4gKiAgICAgIEJpZ051bWJlci5wcm90b3R5cGUgbWV0aG9kcyAgICAgfCAgQmlnTnVtYmVyIG1ldGhvZHNcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBhYnNvbHV0ZVZhbHVlICAgICAgICAgICAgYWJzICAgIHwgIGNsb25lXHJcbiAqICAgICAgY29tcGFyZWRUbyAgICAgICAgICAgICAgICAgICAgICB8ICBjb25maWcgICAgICAgICAgICAgICBzZXRcclxuICogICAgICBkZWNpbWFsUGxhY2VzICAgICAgICAgICAgZHAgICAgIHwgICAgICBERUNJTUFMX1BMQUNFU1xyXG4gKiAgICAgIGRpdmlkZWRCeSAgICAgICAgICAgICAgICBkaXYgICAgfCAgICAgIFJPVU5ESU5HX01PREVcclxuICogICAgICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgaWRpdiAgIHwgICAgICBFWFBPTkVOVElBTF9BVFxyXG4gKiAgICAgIGV4cG9uZW50aWF0ZWRCeSAgICAgICAgICBwb3cgICAgfCAgICAgIFJBTkdFXHJcbiAqICAgICAgaW50ZWdlclZhbHVlICAgICAgICAgICAgICAgICAgICB8ICAgICAgQ1JZUFRPXHJcbiAqICAgICAgaXNFcXVhbFRvICAgICAgICAgICAgICAgIGVxICAgICB8ICAgICAgTU9EVUxPX01PREVcclxuICogICAgICBpc0Zpbml0ZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBQT1dfUFJFQ0lTSU9OXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbiAgICAgICAgICAgIGd0ICAgICB8ICAgICAgRk9STUFUXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyAgIGd0ZSAgICB8ICAgICAgQUxQSEFCRVRcclxuICogICAgICBpc0ludGVnZXIgICAgICAgICAgICAgICAgICAgICAgIHwgIGlzQmlnTnVtYmVyXHJcbiAqICAgICAgaXNMZXNzVGhhbiAgICAgICAgICAgICAgIGx0ICAgICB8ICBtYXhpbXVtICAgICAgICAgICAgICBtYXhcclxuICogICAgICBpc0xlc3NUaGFuT3JFcXVhbFRvICAgICAgbHRlICAgIHwgIG1pbmltdW0gICAgICAgICAgICAgIG1pblxyXG4gKiAgICAgIGlzTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmFuZG9tXHJcbiAqICAgICAgaXNOZWdhdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICBzdW1cclxuICogICAgICBpc1Bvc2l0aXZlICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBpc1plcm8gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtaW51cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtb2R1bG8gICAgICAgICAgICAgICAgICAgbW9kICAgIHxcclxuICogICAgICBtdWx0aXBsaWVkQnkgICAgICAgICAgICAgdGltZXMgIHxcclxuICogICAgICBuZWdhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwcmVjaXNpb24gICAgICAgICAgICAgICAgc2QgICAgIHxcclxuICogICAgICBzaGlmdGVkQnkgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBzcXVhcmVSb290ICAgICAgICAgICAgICAgc3FydCAgIHxcclxuICogICAgICB0b0V4cG9uZW50aWFsICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0pTT04gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b051bWJlciAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1ByZWNpc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICpcclxuICovXHJcblxyXG5cclxuICB2YXIgQmlnTnVtYmVyLFxyXG4gICAgaXNOdW1lcmljID0gL14tPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8kL2ksXHJcbiAgICBtYXRoY2VpbCA9IE1hdGguY2VpbCxcclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcblxyXG4gICAgYmlnbnVtYmVyRXJyb3IgPSAnW0JpZ051bWJlciBFcnJvcl0gJyxcclxuICAgIHRvb01hbnlEaWdpdHMgPSBiaWdudW1iZXJFcnJvciArICdOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAnLFxyXG5cclxuICAgIEJBU0UgPSAxZTE0LFxyXG4gICAgTE9HX0JBU0UgPSAxNCxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFmZmZmZmZmZmZmZmZmLCAgICAgICAgIC8vIDJeNTMgLSAxXHJcbiAgICAvLyBNQVhfSU5UMzIgPSAweDdmZmZmZmZmLCAgICAgICAgICAgICAgICAgICAvLyAyXjMxIC0gMVxyXG4gICAgUE9XU19URU4gPSBbMSwgMTAsIDEwMCwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsIDFlOCwgMWU5LCAxZTEwLCAxZTExLCAxZTEyLCAxZTEzXSxcclxuICAgIFNRUlRfQkFTRSA9IDFlNyxcclxuXHJcbiAgICAvLyBFRElUQUJMRVxyXG4gICAgLy8gVGhlIGxpbWl0IG9uIHRoZSB2YWx1ZSBvZiBERUNJTUFMX1BMQUNFUywgVE9fRVhQX05FRywgVE9fRVhQX1BPUywgTUlOX0VYUCwgTUFYX0VYUCwgYW5kXHJcbiAgICAvLyB0aGUgYXJndW1lbnRzIHRvIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0LCBhbmQgdG9QcmVjaXNpb24uXHJcbiAgICBNQVggPSAxRTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWF9JTlQzMlxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIEJpZ051bWJlciBjb25zdHJ1Y3Rvci5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShjb25maWdPYmplY3QpIHtcclxuICAgIHZhciBkaXYsIGNvbnZlcnRCYXNlLCBwYXJzZU51bWVyaWMsXHJcbiAgICAgIFAgPSBCaWdOdW1iZXIucHJvdG90eXBlID0geyBjb25zdHJ1Y3RvcjogQmlnTnVtYmVyLCB0b1N0cmluZzogbnVsbCwgdmFsdWVPZjogbnVsbCB9LFxyXG4gICAgICBPTkUgPSBuZXcgQmlnTnVtYmVyKDEpLFxyXG5cclxuXHJcbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVEFCTEUgQ09ORklHIERFRkFVTFRTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbnRlZ2VycyB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZXMgc3RhdGVkLlxyXG4gICAgICAvLyBUaGUgdmFsdWVzIGNhbiBhbHNvIGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUgdXNpbmcgQmlnTnVtYmVyLnNldC5cclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmb3Igb3BlcmF0aW9ucyBpbnZvbHZpbmcgZGl2aXNpb24uXHJcbiAgICAgIERFQ0lNQUxfUExBQ0VTID0gMjAsICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSByb3VuZGluZyBtb2RlIHVzZWQgd2hlbiByb3VuZGluZyB0byB0aGUgYWJvdmUgZGVjaW1hbCBwbGFjZXMsIGFuZCB3aGVuIHVzaW5nXHJcbiAgICAgIC8vIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0IGFuZCB0b1ByZWNpc2lvbiwgYW5kIHJvdW5kIChkZWZhdWx0IHZhbHVlKS5cclxuICAgICAgLy8gVVAgICAgICAgICAwIEF3YXkgZnJvbSB6ZXJvLlxyXG4gICAgICAvLyBET1dOICAgICAgIDEgVG93YXJkcyB6ZXJvLlxyXG4gICAgICAvLyBDRUlMICAgICAgIDIgVG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEZMT09SICAgICAgMyBUb3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9VUCAgICA0IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB1cC5cclxuICAgICAgLy8gSEFMRl9ET1dOICA1IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCBkb3duLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgZXZlbiBuZWlnaGJvdXIuXHJcbiAgICAgIC8vIEhBTEZfQ0VJTCAgNyBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfRkxPT1IgOCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIFJPVU5ESU5HX01PREUgPSA0LCAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA4XHJcblxyXG4gICAgICAvLyBFWFBPTkVOVElBTF9BVCA6IFtUT19FWFBfTkVHICwgVE9fRVhQX1BPU11cclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYmVuZWF0aCB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTdcclxuICAgICAgVE9fRVhQX05FRyA9IC03LCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IDIxXHJcbiAgICAgIFRPX0VYUF9QT1MgPSAyMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFJBTkdFIDogW01JTl9FWFAsIE1BWF9FWFBdXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtMzI0ICAoNWUtMzI0KVxyXG4gICAgICBNSU5fRVhQID0gLTFlNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0xIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlLCBhYm92ZSB3aGljaCBvdmVyZmxvdyB0byBJbmZpbml0eSBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAgMzA4ICAoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpXHJcbiAgICAgIC8vIEZvciBNQVhfRVhQID4gMWU3LCBlLmcuIG5ldyBCaWdOdW1iZXIoJzFlMTAwMDAwMDAwJykucGx1cygxKSBtYXkgYmUgc2xvdy5cclxuICAgICAgTUFYX0VYUCA9IDFlNywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIHRvIE1BWFxyXG5cclxuICAgICAgLy8gV2hldGhlciB0byB1c2UgY3J5cHRvZ3JhcGhpY2FsbHktc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgaWYgYXZhaWxhYmxlLlxyXG4gICAgICBDUllQVE8gPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUgb3IgZmFsc2VcclxuXHJcbiAgICAgIC8vIFRoZSBtb2R1bG8gbW9kZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG1vZHVsdXM6IGEgbW9kIG4uXHJcbiAgICAgIC8vIFRoZSBxdW90aWVudCAocSA9IGEgLyBuKSBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyByb3VuZGluZyBtb2RlLlxyXG4gICAgICAvLyBUaGUgcmVtYWluZGVyIChyKSBpcyBjYWxjdWxhdGVkIGFzOiByID0gYSAtIG4gKiBxLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBVUCAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgIDEgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlbmQuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoaXMgbW9kdWxvIG1vZGUgaXMgY29tbW9ubHkga25vd24gYXMgJ3RydW5jYXRlZCBkaXZpc2lvbicgYW5kIGlzXHJcbiAgICAgIC8vICAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gKGEgJSBuKSBpbiBKYXZhU2NyaXB0LlxyXG4gICAgICAvLyBGTE9PUiAgICAgMyBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpc29yIChQeXRob24gJSkuXHJcbiAgICAgIC8vIEhBTEZfRVZFTiA2IFRoaXMgbW9kdWxvIG1vZGUgaW1wbGVtZW50cyB0aGUgSUVFRSA3NTQgcmVtYWluZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAvLyBFVUNMSUQgICAgOSBFdWNsaWRpYW4gZGl2aXNpb24uIHEgPSBzaWduKG4pICogZmxvb3IoYSAvIGFicyhuKSkuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUaGUgdHJ1bmNhdGVkIGRpdmlzaW9uLCBmbG9vcmVkIGRpdmlzaW9uLCBFdWNsaWRpYW4gZGl2aXNpb24gYW5kIElFRUUgNzU0IHJlbWFpbmRlclxyXG4gICAgICAvLyBtb2RlcyBhcmUgY29tbW9ubHkgdXNlZCBmb3IgdGhlIG1vZHVsdXMgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBBbHRob3VnaCB0aGUgb3RoZXIgcm91bmRpbmcgbW9kZXMgY2FuIGFsc28gYmUgdXNlZCwgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIE1PRFVMT19NT0RFID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA5XHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgdGhlIGV4cG9uZW50aWF0ZWRCeSBvcGVyYXRpb24uXHJcbiAgICAgIC8vIElmIFBPV19QUkVDSVNJT04gaXMgMCwgdGhlcmUgd2lsbCBiZSB1bmxpbWl0ZWQgc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICBQT1dfUFJFQ0lTSU9OID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZm9ybWF0IHNwZWNpZmljYXRpb24gdXNlZCBieSB0aGUgQmlnTnVtYmVyLnByb3RvdHlwZS50b0Zvcm1hdCBtZXRob2QuXHJcbiAgICAgIEZPUk1BVCA9IHtcclxuICAgICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAgICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICAgIHN1ZmZpeDogJydcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFRoZSBhbHBoYWJldCB1c2VkIGZvciBiYXNlIGNvbnZlcnNpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggbm8gJysnLFxyXG4gICAgICAvLyAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAvLyAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXydcclxuICAgICAgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyxcclxuICAgICAgYWxwaGFiZXRIYXNOb3JtYWxEZWNpbWFsRGlnaXRzID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1JcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBCaWdOdW1iZXIgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCaWdOdW1iZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKiBbYl0ge251bWJlcn0gVGhlIGJhc2Ugb2Ygdi4gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCaWdOdW1iZXIodiwgYikge1xyXG4gICAgICB2YXIgYWxwaGFiZXQsIGMsIGNhc2VDaGFuZ2VkLCBlLCBpLCBpc051bSwgbGVuLCBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBFbmFibGUgY29uc3RydWN0b3IgY2FsbCB3aXRob3V0IGBuZXdgLlxyXG4gICAgICBpZiAoISh4IGluc3RhbmNlb2YgQmlnTnVtYmVyKSkgcmV0dXJuIG5ldyBCaWdOdW1iZXIodiwgYik7XHJcblxyXG4gICAgICBpZiAoYiA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh2ICYmIHYuX2lzQmlnTnVtYmVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgICAgaWYgKCF2LmMgfHwgdi5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5jID0gdi5jLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSAmJiB2ICogMCA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXNlIGAxIC8gbmAgdG8gaGFuZGxlIG1pbnVzIHplcm8gYWxzby5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/ICh2ID0gLXYsIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBpbnRlZ2Vycywgd2hlcmUgbiA8IDIxNDc0ODM2NDggKDIqKjMxKS5cclxuICAgICAgICAgIGlmICh2ID09PSB+fnYpIHtcclxuICAgICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTAsIGUrKyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5jID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCFpc051bWVyaWMudGVzdChzdHIgPSBTdHJpbmcodikpKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0pO1xyXG5cclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/XHJcbiAgICAgICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICAgICAgaWYgKGUgPCAwKSBlID0gaTtcclxuICAgICAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYmUgdXNlZCB3aXRoIGJhc2UgMTAgYXJndW1lbnQsIHdoaWxlXHJcbiAgICAgICAgLy8gYWxzbyByb3VuZGluZyB0byBERUNJTUFMX1BMQUNFUyBhcyB3aXRoIG90aGVyIGJhc2VzLlxyXG4gICAgICAgIGlmIChiID09IDEwICYmIGFscGhhYmV0SGFzTm9ybWFsRGVjaW1hbERpZ2l0cykge1xyXG4gICAgICAgICAgeCA9IG5ldyBCaWdOdW1iZXIodik7XHJcbiAgICAgICAgICByZXR1cm4gcm91bmQoeCwgREVDSU1BTF9QTEFDRVMgKyB4LmUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuXHJcbiAgICAgICAgaWYgKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpIHtcclxuXHJcbiAgICAgICAgICAvLyBBdm9pZCBwb3RlbnRpYWwgaW50ZXJwcmV0YXRpb24gb2YgSW5maW5pdHkgYW5kIE5hTiBhcyBiYXNlIDQ0KyB2YWx1ZXMuXHJcbiAgICAgICAgICBpZiAodiAqIDAgIT0gMCkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtLCBiKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHICYmIHN0ci5yZXBsYWNlKC9eMFxcLjAqfFxcLi8sICcnKS5sZW5ndGggPiAxNSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyB2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFscGhhYmV0ID0gQUxQSEFCRVQuc2xpY2UoMCwgYik7XHJcbiAgICAgICAgZSA9IGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB0aGF0IHN0ciBpcyBhIHZhbGlkIGJhc2UgYiBudW1iZXIuXHJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFJlZ0V4cCwgc28gYWxwaGFiZXQgY2FuIGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzLlxyXG4gICAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjID0gc3RyLmNoYXJBdChpKSkgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09ICcuJykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiAnLicgaXMgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGl0IGhhcyBub3QgYmUgZm91bmQgYmVmb3JlLlxyXG4gICAgICAgICAgICAgIGlmIChpID4gZSkge1xyXG4gICAgICAgICAgICAgICAgZSA9IGxlbjtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2FzZUNoYW5nZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQWxsb3cgZS5nLiBoZXhhZGVjaW1hbCAnRkYnIGFzIHdlbGwgYXMgJ2ZmJy5cclxuICAgICAgICAgICAgICBpZiAoc3RyID09IHN0ci50b1VwcGVyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9Mb3dlckNhc2UoKSkgfHxcclxuICAgICAgICAgICAgICAgICAgc3RyID09IHN0ci50b0xvd2VyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgIGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljKHgsIFN0cmluZyh2KSwgaXNOdW0sIGIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCBsYXRlciBjaGVjayBmb3IgbGVuZ3RoIG9uIGNvbnZlcnRlZCBudW1iZXIuXHJcbiAgICAgICAgaXNOdW0gPSBmYWxzZTtcclxuICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZShzdHIsIGIsIDEwLCB4LnMpO1xyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIGVsc2UgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVybWluZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSAwOyBzdHIuY2hhckNvZGVBdChpKSA9PT0gNDg7IGkrKyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgc3RyLmNoYXJDb2RlQXQoLS1sZW4pID09PSA0ODspO1xyXG5cclxuICAgICAgaWYgKHN0ciA9IHN0ci5zbGljZShpLCArK2xlbikpIHtcclxuICAgICAgICBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICBpZiAoaXNOdW0gJiYgQmlnTnVtYmVyLkRFQlVHICYmXHJcbiAgICAgICAgICBsZW4gPiAxNSAmJiAodiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdiAhPT0gbWF0aGZsb29yKHYpKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyAoeC5zICogdikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICAgIGlmICgoZSA9IGUgLSBpIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4LmMgPSBbXTtcclxuXHJcbiAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgICAgIC8vIGUgaXMgdGhlIGJhc2UgMTAgZXhwb25lbnQuXHJcbiAgICAgICAgICAvLyBpIGlzIHdoZXJlIHRvIHNsaWNlIHN0ciB0byBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvZWZmaWNpZW50IGFycmF5LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTsgIC8vIGkgPCAxXHJcblxyXG4gICAgICAgICAgaWYgKGkgPCBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKGkpIHguYy5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZW4gLT0gTE9HX0JBU0U7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgICAgeC5jLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgPSBMT0dfQkFTRSAtIChzdHIgPSBzdHIuc2xpY2UoaSkpLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgLT0gbGVuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgeC5jLnB1c2goK3N0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUiBQUk9QRVJUSUVTXHJcblxyXG5cclxuICAgIEJpZ051bWJlci5jbG9uZSA9IGNsb25lO1xyXG5cclxuICAgIEJpZ051bWJlci5ST1VORF9VUCA9IDA7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRE9XTiA9IDE7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRkxPT1IgPSAzO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVAgPSA0O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9FVkVOID0gNjtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0NFSUwgPSA3O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgQmlnTnVtYmVyLkVVQ0xJRCA9IDk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25maWd1cmUgaW5mcmVxdWVudGx5LWNoYW5naW5nIGxpYnJhcnktd2lkZSBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBBY2NlcHQgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwcm9wZXJ0aWVzIChpZiB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBpc1xyXG4gICAgICogYSBudW1iZXIsIGl0IG11c3QgYmUgYW4gaW50ZWdlciB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBzdGF0ZWQpOlxyXG4gICAgICpcclxuICAgICAqICAgREVDSU1BTF9QTEFDRVMgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgUk9VTkRJTkdfTU9ERSAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA4XHJcbiAgICAgKiAgIEVYUE9ORU5USUFMX0FUICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYICBvciAgWy1NQVggdG8gMCwgMCB0byBNQVhdXHJcbiAgICAgKiAgIFJBTkdFICAgICAgICAgICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYIChub3QgemVybykgIG9yICBbLU1BWCB0byAtMSwgMSB0byBNQVhdXHJcbiAgICAgKiAgIENSWVBUTyAgICAgICAgICAge2Jvb2xlYW59ICAgICAgICAgIHRydWUgb3IgZmFsc2VcclxuICAgICAqICAgTU9EVUxPX01PREUgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA5XHJcbiAgICAgKiAgIFBPV19QUkVDSVNJT04gICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIEFMUEhBQkVUICAgICAgICAge3N0cmluZ30gICAgICAgICAgIEEgc3RyaW5nIG9mIHR3byBvciBtb3JlIHVuaXF1ZSBjaGFyYWN0ZXJzIHdoaWNoIGRvZXNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnRhaW4gJy4nLlxyXG4gICAgICogICBGT1JNQVQgICAgICAgICAgIHtvYmplY3R9ICAgICAgICAgICBBbiBvYmplY3Qgd2l0aCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgICAqICAgICBwcmVmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZ3JvdXBTaXplICAgICAgICAgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIHNlY29uZGFyeUdyb3VwU2l6ZSAgICAge251bWJlcn1cclxuICAgICAqICAgICBncm91cFNlcGFyYXRvciAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZGVjaW1hbFNlcGFyYXRvciAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTaXplICAgICAge251bWJlcn1cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgc3VmZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICpcclxuICAgICAqIChUaGUgdmFsdWVzIGFzc2lnbmVkIHRvIHRoZSBhYm92ZSBGT1JNQVQgb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdCBjaGVja2VkIGZvciB2YWxpZGl0eS4pXHJcbiAgICAgKlxyXG4gICAgICogRS5nLlxyXG4gICAgICogQmlnTnVtYmVyLmNvbmZpZyh7IERFQ0lNQUxfUExBQ0VTIDogMjAsIFJPVU5ESU5HX01PREUgOiA0IH0pXHJcbiAgICAgKlxyXG4gICAgICogSWdub3JlIHByb3BlcnRpZXMvcGFyYW1ldGVycyBzZXQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGV4Y2VwdCBmb3IgQUxQSEFCRVQuXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGN1cnJlbnQgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuY29uZmlnID0gQmlnTnVtYmVyLnNldCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgdmFyIHAsIHY7XHJcblxyXG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgICAvLyBERUNJTUFMX1BMQUNFUyB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gREVDSU1BTF9QTEFDRVMge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0RFQ0lNQUxfUExBQ0VTJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgREVDSU1BTF9QTEFDRVMgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJPVU5ESU5HX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBST1VORElOR19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdST1VORElOR19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOCwgcCk7XHJcbiAgICAgICAgICAgIFJPVU5ESU5HX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEVYUE9ORU5USUFMX0FUIHtudW1iZXJ8bnVtYmVyW119XHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gMCBpbmNsdXNpdmUsIDAgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRVhQT05FTlRJQUxfQVQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0VYUE9ORU5USUFMX0FUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAwLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9QT1MgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IC0oVE9fRVhQX1BPUyA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJBTkdFIHtudW1iZXJ8bnVtYmVyW119IE5vbi16ZXJvIGludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAtMSBpbmNsdXNpdmUsIGludGVnZXIgMSB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBSQU5HRSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V8Y2Fubm90IGJlIHplcm99OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUkFOR0UnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIC0xLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAxLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIE1JTl9FWFAgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIE1BWF9FWFAgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIE1JTl9FWFAgPSAtKE1BWF9FWFAgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgY2Fubm90IGJlIHplcm86ICcgKyB2KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDUllQVE8ge2Jvb2xlYW59IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQ1JZUFRPIG5vdCB0cnVlIG9yIGZhbHNlOiB7dn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0NSWVBUTycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ID09PSAhIXYpIHtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgICAgICAgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgfHwgY3J5cHRvLnJhbmRvbUJ5dGVzKSkge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gIXY7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCB0cnVlIG9yIGZhbHNlOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBNT0RVTE9fTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDkgaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE1PRFVMT19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdNT0RVTE9fTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDksIHApO1xyXG4gICAgICAgICAgICBNT0RVTE9fTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUE9XX1BSRUNJU0lPTiB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUE9XX1BSRUNJU0lPTiB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUE9XX1BSRUNJU0lPTicpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIFBPV19QUkVDSVNJT04gPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEZPUk1BVCB7b2JqZWN0fVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEZPUk1BVCBub3QgYW4gb2JqZWN0OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRk9STUFUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdvYmplY3QnKSBGT1JNQVQgPSB2O1xyXG4gICAgICAgICAgICBlbHNlIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgYW4gb2JqZWN0OiAnICsgdik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQUxQSEFCRVQge3N0cmluZ31cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBBTFBIQUJFVCBpbnZhbGlkOiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQUxQSEFCRVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWxsb3cgaWYgbGVzcyB0aGFuIHR3byBjaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICAvLyBvciBpZiBpdCBjb250YWlucyAnKycsICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciBhIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdzdHJpbmcnICYmICEvXi4/JHxbK1xcLS5cXHNdfCguKS4qXFwxLy50ZXN0KHYpKSB7XHJcbiAgICAgICAgICAgICAgYWxwaGFiZXRIYXNOb3JtYWxEZWNpbWFsRGlnaXRzID0gdi5zbGljZSgwLCAxMCkgPT0gJzAxMjM0NTY3ODknO1xyXG4gICAgICAgICAgICAgIEFMUEhBQkVUID0gdjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBpbnZhbGlkOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gT2JqZWN0IGV4cGVjdGVkOiB7dn0nXHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdPYmplY3QgZXhwZWN0ZWQ6ICcgKyBvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBERUNJTUFMX1BMQUNFUzogREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgUk9VTkRJTkdfTU9ERTogUk9VTkRJTkdfTU9ERSxcclxuICAgICAgICBFWFBPTkVOVElBTF9BVDogW1RPX0VYUF9ORUcsIFRPX0VYUF9QT1NdLFxyXG4gICAgICAgIFJBTkdFOiBbTUlOX0VYUCwgTUFYX0VYUF0sXHJcbiAgICAgICAgQ1JZUFRPOiBDUllQVE8sXHJcbiAgICAgICAgTU9EVUxPX01PREU6IE1PRFVMT19NT0RFLFxyXG4gICAgICAgIFBPV19QUkVDSVNJT046IFBPV19QUkVDSVNJT04sXHJcbiAgICAgICAgRk9STUFUOiBGT1JNQVQsXHJcbiAgICAgICAgQUxQSEFCRVQ6IEFMUEhBQkVUXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdiBpcyBhIEJpZ051bWJlciBpbnN0YW5jZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBCaWdOdW1iZXIuREVCVUcgaXMgdHJ1ZSwgdGhyb3cgaWYgYSBCaWdOdW1iZXIgaW5zdGFuY2UgaXMgbm90IHdlbGwtZm9ybWVkLlxyXG4gICAgICpcclxuICAgICAqIHYge2FueX1cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gSW52YWxpZCBCaWdOdW1iZXI6IHt2fSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmlzQmlnTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgaWYgKCF2IHx8IHYuX2lzQmlnTnVtYmVyICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGlmICghQmlnTnVtYmVyLkRFQlVHKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBpLCBuLFxyXG4gICAgICAgIGMgPSB2LmMsXHJcbiAgICAgICAgZSA9IHYuZSxcclxuICAgICAgICBzID0gdi5zO1xyXG5cclxuICAgICAgb3V0OiBpZiAoe30udG9TdHJpbmcuY2FsbChjKSA9PSAnW29iamVjdCBBcnJheV0nKSB7XHJcblxyXG4gICAgICAgIGlmICgocyA9PT0gMSB8fCBzID09PSAtMSkgJiYgZSA+PSAtTUFYICYmIGUgPD0gTUFYICYmIGUgPT09IG1hdGhmbG9vcihlKSkge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBlbGVtZW50IGlzIHplcm8sIHRoZSBCaWdOdW1iZXIgdmFsdWUgbXVzdCBiZSB6ZXJvLlxyXG4gICAgICAgICAgaWYgKGNbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09IDAgJiYgYy5sZW5ndGggPT09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgdGhhdCBjWzBdIHNob3VsZCBoYXZlLCBiYXNlZCBvbiB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGkgPCAxKSBpICs9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgICAgICAvL2lmIChNYXRoLmNlaWwoTWF0aC5sb2coY1swXSArIDEpIC8gTWF0aC5MTjEwKSA9PSBpKSB7XHJcbiAgICAgICAgICBpZiAoU3RyaW5nKGNbMF0pLmxlbmd0aCA9PSBpKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIG4gPSBjW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID49IEJBU0UgfHwgbiAhPT0gbWF0aGZsb29yKG4pKSBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhc3QgZWxlbWVudCBjYW5ub3QgYmUgemVybywgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IGVsZW1lbnQuXHJcbiAgICAgICAgICAgIGlmIChuICE9PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAvLyBJbmZpbml0eS9OYU5cclxuICAgICAgfSBlbHNlIGlmIChjID09PSBudWxsICYmIGUgPT09IG51bGwgJiYgKHMgPT09IG51bGwgfHwgcyA9PT0gMSB8fCBzID09PSAtMSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnSW52YWxpZCBCaWdOdW1iZXI6ICcgKyB2KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1heGltdW0gPSBCaWdOdW1iZXIubWF4ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCAtMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5taW5pbXVtID0gQmlnTnVtYmVyLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSxcclxuICAgICAqIGFuZCB3aXRoIGRwLCBvciBERUNJTUFMX1BMQUNFUyBpZiBkcCBpcyBvbWl0dGVkLCBkZWNpbWFsIHBsYWNlcyAob3IgbGVzcyBpZiB0cmFpbGluZ1xyXG4gICAgICogemVyb3MgYXJlIHByb2R1Y2VkKS5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcH0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIucmFuZG9tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHBvdzJfNTMgPSAweDIwMDAwMDAwMDAwMDAwO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIGEgNTMgYml0IGludGVnZXIgbiwgd2hlcmUgMCA8PSBuIDwgOTAwNzE5OTI1NDc0MDk5Mi5cclxuICAgICAgLy8gQ2hlY2sgaWYgTWF0aC5yYW5kb20oKSBwcm9kdWNlcyBtb3JlIHRoYW4gMzIgYml0cyBvZiByYW5kb21uZXNzLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCBhc3N1bWUgYXQgbGVhc3QgNTMgYml0cyBhcmUgcHJvZHVjZWQsIG90aGVyd2lzZSBhc3N1bWUgYXQgbGVhc3QgMzAgYml0cy5cclxuICAgICAgLy8gMHg0MDAwMDAwMCBpcyAyXjMwLCAweDgwMDAwMCBpcyAyXjIzLCAweDFmZmZmZiBpcyAyXjIxIC0gMS5cclxuICAgICAgdmFyIHJhbmRvbTUzYml0SW50ID0gKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKSAmIDB4MWZmZmZmXHJcbiAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogcG93Ml81Myk7IH1cclxuICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKChNYXRoLnJhbmRvbSgpICogMHg0MDAwMDAwMCB8IDApICogMHg4MDAwMDApICtcclxuICAgICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDgwMDAwMCB8IDApOyB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICAgIHZhciBhLCBiLCBlLCBrLCB2LFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBjID0gW10sXHJcbiAgICAgICAgICByYW5kID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgICBpZiAoZHAgPT0gbnVsbCkgZHAgPSBERUNJTUFMX1BMQUNFUztcclxuICAgICAgICBlbHNlIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG5cclxuICAgICAgICBrID0gbWF0aGNlaWwoZHAgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgIGlmIChDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICAgICAgICBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG5cclxuICAgICAgICAgICAgYSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGsgKj0gMikpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyA1MyBiaXRzOlxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgKiBNYXRoLnBvdygyLCAyMSkpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDBcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpID4+PiAxMSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDB4MjAwMDAgaXMgMl4yMS5cclxuICAgICAgICAgICAgICB2ID0gYVtpXSAqIDB4MjAwMDAgKyAoYVtpICsgMV0gPj4+IDExKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVqZWN0aW9uIHNhbXBsaW5nOlxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSB0aGF0IHYgPj0gOWUxNSwgaXNcclxuICAgICAgICAgICAgICAvLyA3MTk5MjU0NzQwOTkyIC8gOTAwNzE5OTI1NDc0MDk5MiB+PSAwLjAwMDgsIGkuZS4gMSBpbiAxMjUxXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKTtcclxuICAgICAgICAgICAgICAgIGFbaV0gPSBiWzBdO1xyXG4gICAgICAgICAgICAgICAgYVtpICsgMV0gPSBiWzFdO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSB2IDw9IDg5OTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vZGUuanMgc3VwcG9ydGluZyBjcnlwdG8ucmFuZG9tQnl0ZXMuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyeXB0by5yYW5kb21CeXRlcykge1xyXG5cclxuICAgICAgICAgICAgLy8gYnVmZmVyXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoayAqPSA3KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAwMDAwIGlzIDJeNDgsIDB4MTAwMDAwMDAwMDAgaXMgMl40MFxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwIGlzIDJeMzIsIDB4MTAwMDAwMCBpcyAyXjI0XHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgdiA9ICgoYVtpXSAmIDMxKSAqIDB4MTAwMDAwMDAwMDAwMCkgKyAoYVtpICsgMV0gKiAweDEwMDAwMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDJdICogMHgxMDAwMDAwMDApICsgKGFbaSArIDNdICogMHgxMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDRdIDw8IDE2KSArIChhW2kgKyA1XSA8PCA4KSArIGFbaSArIDZdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShhLCBpKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gNztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQ1JZUFRPID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVc2UgTWF0aC5yYW5kb20uXHJcbiAgICAgICAgaWYgKCFDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcbiAgICAgICAgICAgIHYgPSByYW5kb201M2JpdEludCgpO1xyXG4gICAgICAgICAgICBpZiAodiA8IDllMTUpIGNbaSsrXSA9IHYgJSAxZTE0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayA9IGNbLS1pXTtcclxuICAgICAgICBkcCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIGRwLlxyXG4gICAgICAgIGlmIChrICYmIGRwKSB7XHJcbiAgICAgICAgICB2ID0gUE9XU19URU5bTE9HX0JBU0UgLSBkcF07XHJcbiAgICAgICAgICBjW2ldID0gbWF0aGZsb29yKGsgLyB2KSAqIHY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICAgICAgZm9yICg7IGNbaV0gPT09IDA7IGMucG9wKCksIGktLSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICBjID0gW2UgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBmb3IgKGUgPSAtMSA7IGNbMF0gPT09IDA7IGMuc3BsaWNlKDAsIDEpLCBlIC09IExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIGMgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MsIGFuZC4uLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgdiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgLy8gYWRqdXN0IHRoZSBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGlmIChpIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmFuZC5lID0gZTtcclxuICAgICAgICByYW5kLmMgPSBjO1xyXG4gICAgICAgIHJldHVybiByYW5kO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXHJcbiAgICAgICAgc3VtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDspIHN1bSA9IHN1bS5wbHVzKGFyZ3NbaSsrXSk7XHJcbiAgICAgIHJldHVybiBzdW07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xyXG5cclxuXHJcbiAgICAvLyBDYWxsZWQgYnkgQmlnTnVtYmVyIGFuZCBCaWdOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nLlxyXG4gICAgY29udmVydEJhc2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGVjaW1hbCA9ICcwMTIzNDU2Nzg5JztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENvbnZlcnQgc3RyaW5nIG9mIGJhc2VJbiB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGJhc2VPdXQuXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBhbHBoYWJldCkge1xyXG4gICAgICAgIHZhciBqLFxyXG4gICAgICAgICAgYXJyID0gWzBdLFxyXG4gICAgICAgICAgYXJyTCxcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07IGFyclthcnJMXSAqPSBiYXNlSW4pO1xyXG5cclxuICAgICAgICAgIGFyclswXSArPSBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQoaSsrKSk7XHJcblxyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycltqICsgMV0gPT0gbnVsbCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2ogKyAxXSArPSBhcnJbal0gLyBiYXNlT3V0IHwgMDtcclxuICAgICAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgYSBudW1lcmljIHN0cmluZyBvZiBiYXNlSW4gdG8gYSBudW1lcmljIHN0cmluZyBvZiBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHRvU3RyaW5nLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2UgMTAgdG8gYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBCaWdOdW1iZXIsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZUluIHRvIGJhc2UgMTAuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIHNpZ24sIGNhbGxlcklzVG9TdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxwaGFiZXQsIGQsIGUsIGssIHIsIHgsIHhjLCB5LFxyXG4gICAgICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyksXHJcbiAgICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgICAgcm0gPSBST1VORElOR19NT0RFO1xyXG5cclxuICAgICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICBrID0gUE9XX1BSRUNJU0lPTjtcclxuXHJcbiAgICAgICAgICAvLyBVbmxpbWl0ZWQgcHJlY2lzaW9uLlxyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IDA7XHJcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGJhc2VJbik7XHJcbiAgICAgICAgICB4ID0geS5wb3coc3RyLmxlbmd0aCAtIGkpO1xyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IGs7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzdHIgYXMgaWYgYW4gaW50ZWdlciwgdGhlbiByZXN0b3JlIHRoZSBmcmFjdGlvbiBwYXJ0IGJ5IGRpdmlkaW5nIHRoZVxyXG4gICAgICAgICAgLy8gcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyLlxyXG5cclxuICAgICAgICAgIHkuYyA9IHRvQmFzZU91dCh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyh4LmMpLCB4LmUsICcwJyksXHJcbiAgICAgICAgICAgMTAsIGJhc2VPdXQsIGRlY2ltYWwpO1xyXG4gICAgICAgICAgeS5lID0geS5jLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBpbnRlZ2VyLlxyXG5cclxuICAgICAgICB4YyA9IHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgY2FsbGVySXNUb1N0cmluZ1xyXG4gICAgICAgICA/IChhbHBoYWJldCA9IEFMUEhBQkVULCBkZWNpbWFsKVxyXG4gICAgICAgICA6IChhbHBoYWJldCA9IGRlY2ltYWwsIEFMUEhBQkVUKSk7XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBhcyBhbiBpbnRlZ2VyIGFuZCBjb252ZXJ0ZWQgdG8gYmFzZU91dC4gZSBpcyB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgZSA9IGsgPSB4Yy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgeGNbLS1rXSA9PSAwOyB4Yy5wb3AoKSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSkgcmV0dXJuIGFscGhhYmV0LmNoYXJBdCgwKTtcclxuXHJcbiAgICAgICAgLy8gRG9lcyBzdHIgcmVwcmVzZW50IGFuIGludGVnZXI/IElmIHNvLCBubyBuZWVkIGZvciB0aGUgZGl2aXNpb24uXHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAtLWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguYyA9IHhjO1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuXHJcbiAgICAgICAgICAvLyBUaGUgc2lnbiBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuXHJcbiAgICAgICAgICB4LnMgPSBzaWduO1xyXG4gICAgICAgICAgeCA9IGRpdih4LCB5LCBkcCwgcm0sIGJhc2VPdXQpO1xyXG4gICAgICAgICAgeGMgPSB4LmM7XHJcbiAgICAgICAgICByID0geC5yO1xyXG4gICAgICAgICAgZSA9IHguZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBjb252ZXJ0ZWQgdG8gYmFzZU91dC5cclxuXHJcbiAgICAgICAgLy8gVEhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBkID0gZSArIGRwICsgMTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0OiB0aGUgZGlnaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4Y1tkXTtcclxuXHJcbiAgICAgICAgLy8gTG9vayBhdCB0aGUgcm91bmRpbmcgZGlnaXRzIGFuZCBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJvdW5kIHVwLlxyXG5cclxuICAgICAgICBrID0gYmFzZU91dCAvIDI7XHJcbiAgICAgICAgciA9IHIgfHwgZCA8IDAgfHwgeGNbZCArIDFdICE9IG51bGw7XHJcblxyXG4gICAgICAgIHIgPSBybSA8IDQgPyAoaSAhPSBudWxsIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgICAgIDogaSA+IGsgfHwgaSA9PSBrICYmKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmIHhjW2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG5vdCBncmVhdGVyIHRoYW4gemVybywgb3IgeGMgcmVwcmVzZW50c1xyXG4gICAgICAgIC8vIHplcm8sIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmFzZSBjb252ZXJzaW9uIGlzIHplcm8gb3IsIGlmIHJvdW5kaW5nIHVwLCBhIHZhbHVlXHJcbiAgICAgICAgLy8gc3VjaCBhcyAwLjAwMDAxLlxyXG4gICAgICAgIGlmIChkIDwgMSB8fCAheGNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyAxXi1kcCBvciAwXHJcbiAgICAgICAgICBzdHIgPSByID8gdG9GaXhlZFBvaW50KGFscGhhYmV0LmNoYXJBdCgxKSwgLWRwLCBhbHBoYWJldC5jaGFyQXQoMCkpIDogYWxwaGFiZXQuY2hhckF0KDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gVHJ1bmNhdGUgeGMgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHhjLmxlbmd0aCA9IGQ7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgICAgZm9yICgtLWJhc2VPdXQ7ICsreGNbLS1kXSA+IGJhc2VPdXQ7KSB7XHJcbiAgICAgICAgICAgICAgeGNbZF0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIWQpIHtcclxuICAgICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICAgIHhjID0gWzFdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChrID0geGMubGVuZ3RoOyAheGNbLS1rXTspO1xyXG5cclxuICAgICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuXHJcbiAgICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8PSBrOyBzdHIgKz0gYWxwaGFiZXQuY2hhckF0KHhjW2krK10pKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB6ZXJvcywgZGVjaW1hbCBwb2ludCBhbmQgdHJhaWxpbmcgemVyb3MgYXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCBhbHBoYWJldC5jaGFyQXQoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGNhbGxlciB3aWxsIGFkZCB0aGUgc2lnbi5cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLy8gUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuIENhbGxlZCBieSBkaXYgYW5kIGNvbnZlcnRCYXNlLlxyXG4gICAgZGl2ID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgIC8vIEFzc3VtZSBub24temVybyB4IGFuZCBrLlxyXG4gICAgICBmdW5jdGlvbiBtdWx0aXBseSh4LCBrLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIG0sIHRlbXAsIHhsbywgeGhpLFxyXG4gICAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgICAgaSA9IHgubGVuZ3RoLFxyXG4gICAgICAgICAga2xvID0gayAlIFNRUlRfQkFTRSxcclxuICAgICAgICAgIGtoaSA9IGsgLyBTUVJUX0JBU0UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHtcclxuICAgICAgICAgIHhsbyA9IHhbaV0gJSBTUVJUX0JBU0U7XHJcbiAgICAgICAgICB4aGkgPSB4W2ldIC8gU1FSVF9CQVNFIHwgMDtcclxuICAgICAgICAgIG0gPSBraGkgKiB4bG8gKyB4aGkgKiBrbG87XHJcbiAgICAgICAgICB0ZW1wID0ga2xvICogeGxvICsgKChtICUgU1FSVF9CQVNFKSAqIFNRUlRfQkFTRSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gKHRlbXAgLyBiYXNlIHwgMCkgKyAobSAvIFNRUlRfQkFTRSB8IDApICsga2hpICogeGhpO1xyXG4gICAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhcnJ5KSB4ID0gW2NhcnJ5XS5jb25jYXQoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIsIGFMLCBiTCkge1xyXG4gICAgICAgIHZhciBpLCBjbXA7XHJcblxyXG4gICAgICAgIGlmIChhTCAhPSBiTCkge1xyXG4gICAgICAgICAgY21wID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGZvciAoaSA9IGNtcCA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgY21wID0gYVtpXSA+IGJbaV0gPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICAgIGFbYUxdIC09IGk7XHJcbiAgICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOyBhLnNwbGljZSgwLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHg6IGRpdmlkZW5kLCB5OiBkaXZpc29yLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIGRwLCBybSwgYmFzZSkge1xyXG4gICAgICAgIHZhciBjbXAsIGUsIGksIG1vcmUsIG4sIHByb2QsIHByb2RMLCBxLCBxYywgcmVtLCByZW1MLCByZW0wLCB4aSwgeEwsIHljMCxcclxuICAgICAgICAgIHlMLCB5eixcclxuICAgICAgICAgIHMgPSB4LnMgPT0geS5zID8gMSA6IC0xLFxyXG4gICAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIE5hTiwgSW5maW5pdHkgb3IgMD9cclxuICAgICAgICBpZiAoIXhjIHx8ICF4Y1swXSB8fCAheWMgfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoXHJcblxyXG4gICAgICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGMgPyB5YyAmJiB4Y1swXSA9PSB5Y1swXSA6ICF5YykgPyBOYU4gOlxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIMKxMCBvciB5IGlzIMKxSW5maW5pdHksIG9yIHJldHVybiDCsUluZmluaXR5IGFzIHkgaXMgwrEwLlxyXG4gICAgICAgICAgICB4YyAmJiB4Y1swXSA9PSAwIHx8ICF5YyA/IHMgKiAwIDogcyAvIDBcclxuICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHEgPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG4gICAgICAgIHFjID0gcS5jID0gW107XHJcbiAgICAgICAgZSA9IHguZSAtIHkuZTtcclxuICAgICAgICBzID0gZHAgKyBlICsgMTtcclxuXHJcbiAgICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgLSBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgICBzID0gcyAvIExPR19CQVNFIHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBlLlxyXG4gICAgICAgIC8vIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEJpZ051bWJlcnMgZnJvbSBjb252ZXJ0QmFzZSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKGkgPSAwOyB5Y1tpXSA9PSAoeGNbaV0gfHwgMCk7IGkrKyk7XHJcblxyXG4gICAgICAgIGlmICh5Y1tpXSA+ICh4Y1tpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgICBpZiAocyA8IDApIHtcclxuICAgICAgICAgIHFjLnB1c2goMSk7XHJcbiAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgcyArPSAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4YyBhbmQgeWMgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5YyBpcyA+PSBiYXNlIC8gMi5cclxuXHJcbiAgICAgICAgICBuID0gbWF0aGZsb29yKGJhc2UgLyAoeWNbMF0gKyAxKSk7XHJcblxyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIGhhbmRsZSBvZGQgYmFzZXMgd2hlcmUgeWNbMF0gPT0gKGJhc2UgLyAyKSAtIDEuXHJcbiAgICAgICAgICAvLyBpZiAobiA+IDEgfHwgbisrID09IDEgJiYgeWNbMF0gPCBiYXNlIC8gMikge1xyXG4gICAgICAgICAgaWYgKG4gPiAxKSB7XHJcbiAgICAgICAgICAgIHljID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB4YyA9IG11bHRpcGx5KHhjLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4Yy5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDsgcmVtW3JlbUwrK10gPSAwKTtcclxuICAgICAgICAgIHl6ID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgIHl6ID0gWzBdLmNvbmNhdCh5eik7XHJcbiAgICAgICAgICB5YzAgPSB5Y1swXTtcclxuICAgICAgICAgIGlmICh5Y1sxXSA+PSBiYXNlIC8gMikgeWMwKys7XHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gcHJldmVudCB0cmlhbCBkaWdpdCBuID4gYmFzZSwgd2hlbiB1c2luZyBiYXNlIDMuXHJcbiAgICAgICAgICAvLyBlbHNlIGlmIChiYXNlID09IDMgJiYgeWMwID09IDEpIHljMCA9IDEgKyAxZS0xNTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIG4gPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBuLlxyXG5cclxuICAgICAgICAgICAgICByZW0wID0gcmVtWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuIGlzIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgbiA9IG1hdGhmbG9vcihyZW0wIC8geWMwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgcHJvZHVjdCA9IGRpdmlzb3IgbXVsdGlwbGllZCBieSB0cmlhbCBkaWdpdCAobikuXHJcbiAgICAgICAgICAgICAgLy8gIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IGlzIGdyZWF0ZXIgdGhhbiByZW1haW5kZXI6XHJcbiAgICAgICAgICAgICAgLy8gICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QsIGRlY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAvLyAgU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCB3YXMgbGVzcyB0aGFuIHJlbWFpbmRlciBhdCB0aGUgbGFzdCBjb21wYXJlOlxyXG4gICAgICAgICAgICAgIC8vICAgIENvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvci5cclxuICAgICAgICAgICAgICAvLyAgICBJZiByZW1haW5kZXIgaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3I6XHJcbiAgICAgICAgICAgICAgLy8gICAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLCBpbmNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChuID4gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gbWF5IGJlID4gYmFzZSBvbmx5IHdoZW4gYmFzZSBpcyAzLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPj0gYmFzZSkgbiA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCA+IHJlbWFpbmRlciB0aGVuIHRyaWFsIGRpZ2l0IG4gdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGhpZ2ggYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCBpcyBub3Qga25vd24gdG8gaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gZXZlciBiZWVuIG1vcmUgdGhhbiAxIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCkgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBuLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWMsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY21wID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMCBvciAxLCBjbXAgaXMgLTEuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcGFyZSB5YyBhbmQgcmVtIGFnYWluIGJlbG93LFxyXG4gICAgICAgICAgICAgICAgLy8gc28gY2hhbmdlIGNtcCB0byAxIHRvIGF2b2lkIGl0LlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAxLCBsZWF2ZSBjbXAgYXMgLTEsIHNvIHljIGFuZCByZW0gYXJlIGNvbXBhcmVkIGFnYWluLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gZGl2aXNvciA8IHJlbWFpbmRlciwgc28gbiBtdXN0IGJlIGF0IGxlYXN0IDEuXHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IG4gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yXHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kID0gWzBdLmNvbmNhdChwcm9kKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHByb2QsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gVHJpYWwgZGlnaXQgbiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBsb3cgYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCB2ZXJ5IHJhcmVseSAyIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgeUwgPCByZW1MID8geXogOiB5YywgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHtcclxuICAgICAgICAgICAgICBuKys7XHJcbiAgICAgICAgICAgICAgcmVtID0gWzBdO1xyXG4gICAgICAgICAgICB9IC8vIGVsc2UgY21wID09PSAxIGFuZCBuIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBuLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxY1tpKytdID0gbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAocmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4Y1t4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGNbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSB3aGlsZSAoKHhpKysgPCB4TCB8fCByZW1bMF0gIT0gbnVsbCkgJiYgcy0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gTGVhZGluZyB6ZXJvP1xyXG4gICAgICAgICAgaWYgKCFxY1swXSkgcWMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2UgPT0gQkFTRSkge1xyXG5cclxuICAgICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxY1swXS5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHMgPSBxY1swXTsgcyA+PSAxMDsgcyAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICByb3VuZChxLCBkcCArIChxLmUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgKyAxLCBybSwgbW9yZSk7XHJcblxyXG4gICAgICAgIC8vIENhbGxlciBpcyBjb252ZXJ0QmFzZS5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcS5lID0gZTtcclxuICAgICAgICAgIHEuciA9ICttb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyIG4gaW4gZml4ZWQtcG9pbnQgb3IgZXhwb25lbnRpYWxcclxuICAgICAqIG5vdGF0aW9uIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBkZWNpbWFsIHBsYWNlcyBvciBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgKlxyXG4gICAgICogbjogYSBCaWdOdW1iZXIuXHJcbiAgICAgKiBpOiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZGlnaXQgcmVxdWlyZWQgKGkuZS4gdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXApLlxyXG4gICAgICogcm06IHRoZSByb3VuZGluZyBtb2RlLlxyXG4gICAgICogaWQ6IDEgKHRvRXhwb25lbnRpYWwpIG9yIDIgKHRvUHJlY2lzaW9uKS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0KG4sIGksIHJtLCBpZCkge1xyXG4gICAgICB2YXIgYzAsIGUsIG5lLCBsZW4sIHN0cjtcclxuXHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgaWYgKCFuLmMpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBjMCA9IG4uY1swXTtcclxuICAgICAgbmUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoaSA9PSBudWxsKSB7XHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIHN0ciA9IGlkID09IDEgfHwgaWQgPT0gMiAmJiAobmUgPD0gVE9fRVhQX05FRyB8fCBuZSA+PSBUT19FWFBfUE9TKVxyXG4gICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBuZSlcclxuICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBuZSwgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgaSwgcm0pO1xyXG5cclxuICAgICAgICAvLyBuLmUgbWF5IGhhdmUgY2hhbmdlZCBpZiB0aGUgdmFsdWUgd2FzIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHRvUHJlY2lzaW9uIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAgICAvLyBzcGVjaWZpZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXJcclxuICAgICAgICAvLyBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi5cclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgICAgaWYgKGlkID09IDEgfHwgaWQgPT0gMiAmJiAoaSA8PSBlIHx8IGUgPD0gVE9fRVhQX05FRykpIHtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBmb3IgKDsgbGVuIDwgaTsgc3RyICs9ICcwJywgbGVuKyspO1xyXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbChzdHIsIGUpO1xyXG5cclxuICAgICAgICAvLyBGaXhlZC1wb2ludCBub3RhdGlvbi5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSAtPSBuZTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgaWYgKGUgKyAxID4gbGVuKSB7XHJcbiAgICAgICAgICAgIGlmICgtLWkgPiAwKSBmb3IgKHN0ciArPSAnLic7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpICs9IGUgLSBsZW47XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChlICsgMSA9PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwICYmIGMwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgQmlnTnVtYmVyLm1heCBhbmQgQmlnTnVtYmVyLm1pbi5cclxuICAgIC8vIElmIGFueSBudW1iZXIgaXMgTmFOLCByZXR1cm4gTmFOLlxyXG4gICAgZnVuY3Rpb24gbWF4T3JNaW4oYXJncywgbikge1xyXG4gICAgICB2YXIgaywgeSxcclxuICAgICAgICBpID0gMSxcclxuICAgICAgICB4ID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGFyZ3NbaV0pO1xyXG4gICAgICAgIGlmICgheS5zIHx8IChrID0gY29tcGFyZSh4LCB5KSkgPT09IG4gfHwgayA9PT0gMCAmJiB4LnMgPT09IG4pIHtcclxuICAgICAgICAgIHggPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBTdHJpcCB0cmFpbGluZyB6ZXJvcywgY2FsY3VsYXRlIGJhc2UgMTAgZXhwb25lbnQgYW5kIGNoZWNrIGFnYWluc3QgTUlOX0VYUCBhbmQgTUFYX0VYUC5cclxuICAgICAqIENhbGxlZCBieSBtaW51cywgcGx1cyBhbmQgdGltZXMuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG5vcm1hbGlzZShuLCBjLCBlKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBqID0gYy5sZW5ndGg7XHJcblxyXG4gICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWNbLS1qXTsgYy5wb3AoKSk7XHJcblxyXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGJhc2UgMTAgZXhwb25lbnQuIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICBmb3IgKGogPSBjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgIGlmICgoZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgbi5jID0gbi5lID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIG4uYyA9IFtuLmUgPSAwXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuLmUgPSBlO1xyXG4gICAgICAgIG4uYyA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgdmFsdWVzIHRoYXQgZmFpbCB0aGUgdmFsaWRpdHkgdGVzdCBpbiBCaWdOdW1iZXIuXHJcbiAgICBwYXJzZU51bWVyaWMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2ksXHJcbiAgICAgICAgZG90QWZ0ZXIgPSAvXihbXi5dKylcXC4kLyxcclxuICAgICAgICBkb3RCZWZvcmUgPSAvXlxcLihbXi5dKykkLyxcclxuICAgICAgICBpc0luZmluaXR5T3JOYU4gPSAvXi0/KEluZmluaXR5fE5hTikkLyxcclxuICAgICAgICB3aGl0ZXNwYWNlT3JQbHVzID0gL15cXHMqXFwrKD89W1xcdy5dKXxeXFxzK3xcXHMrJC9nO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCBzdHIsIGlzTnVtLCBiKSB7XHJcbiAgICAgICAgdmFyIGJhc2UsXHJcbiAgICAgICAgICBzID0gaXNOdW0gPyBzdHIgOiBzdHIucmVwbGFjZSh3aGl0ZXNwYWNlT3JQbHVzLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIE5vIGV4Y2VwdGlvbiBvbiDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAgICBpZiAoaXNJbmZpbml0eU9yTmFOLnRlc3QocykpIHtcclxuICAgICAgICAgIHgucyA9IGlzTmFOKHMpID8gbnVsbCA6IHMgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIWlzTnVtKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaVxyXG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKGJhc2VQcmVmaXgsIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gKHAyID0gcDIudG9Mb3dlckNhc2UoKSkgPT0gJ3gnID8gMTYgOiBwMiA9PSAnYicgPyAyIDogODtcclxuICAgICAgICAgICAgICByZXR1cm4gIWIgfHwgYiA9PSBiYXNlID8gcDEgOiBtO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChiKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IGI7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEUuZy4gJzEuJyB0byAnMScsICcuMScgdG8gJzAuMSdcclxuICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKGRvdEFmdGVyLCAnJDEnKS5yZXBsYWNlKGRvdEJlZm9yZSwgJzAuJDEnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ciAhPSBzKSByZXR1cm4gbmV3IEJpZ051bWJlcihzLCBiYXNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgYmFzZSB7Yn0gbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ05vdCBhJyArIChiID8gJyBiYXNlICcgKyBiIDogJycpICsgJyBudW1iZXI6ICcgKyBzdHIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE5hTlxyXG4gICAgICAgICAgeC5zID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSb3VuZCB4IHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLiBDaGVjayBmb3Igb3Zlci91bmRlci1mbG93LlxyXG4gICAgICogSWYgciBpcyB0cnV0aHksIGl0IGlzIGtub3duIHRoYXQgdGhlcmUgYXJlIG1vcmUgZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcm91bmQoeCwgc2QsIHJtLCByKSB7XHJcbiAgICAgIHZhciBkLCBpLCBqLCBrLCBuLCBuaSwgcmQsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgcG93czEwID0gUE9XU19URU47XHJcblxyXG4gICAgICAvLyBpZiB4IGlzIG5vdCBJbmZpbml0eSBvciBOYU4uLi5cclxuICAgICAgaWYgKHhjKSB7XHJcblxyXG4gICAgICAgIC8vIHJkIGlzIHRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgLy8gbiBpcyBhIGJhc2UgMWUxNCBudW1iZXIsIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBvZiBhcnJheSB4LmMgY29udGFpbmluZyByZC5cclxuICAgICAgICAvLyBuaSBpcyB0aGUgaW5kZXggb2YgbiB3aXRoaW4geC5jLlxyXG4gICAgICAgIC8vIGQgaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAvLyBpIGlzIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiBpbmNsdWRpbmcgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAvLyBqIGlzIHRoZSBhY3R1YWwgaW5kZXggb2YgcmQgd2l0aGluIG4gKGlmIDwgMCwgcmQgaXMgYSBsZWFkaW5nIHplcm8pLlxyXG4gICAgICAgIG91dDoge1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy5cclxuICAgICAgICAgIGZvciAoZCA9IDEsIGsgPSB4Y1swXTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuICAgICAgICAgIGkgPSBzZCAtIGQ7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgaSArPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgaiA9IHNkO1xyXG4gICAgICAgICAgICBuID0geGNbbmkgPSAwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICByZCA9IG1hdGhmbG9vcihuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuaSA9IG1hdGhjZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmkgPj0geGMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IHNxcnQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgeGMubGVuZ3RoIDw9IG5pOyB4Yy5wdXNoKDApKTtcclxuICAgICAgICAgICAgICAgIG4gPSByZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBkID0gMTtcclxuICAgICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuID0gayA9IHhjW25pXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgICAgICAgZm9yIChkID0gMTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbi5cclxuICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgbiBpcyBnaXZlbiBieSBMT0dfQkFTRSAtIGQuXHJcbiAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogbWF0aGZsb29yKG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHIgPSByIHx8IHNkIDwgMCB8fFxyXG5cclxuICAgICAgICAgIC8vIEFyZSB0aGVyZSBhbnkgbm9uLXplcm8gZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdD9cclxuICAgICAgICAgIC8vIFRoZSBleHByZXNzaW9uICBuICUgcG93czEwW2QgLSBqIC0gMV0gIHJldHVybnMgYWxsIGRpZ2l0cyBvZiBuIHRvIHRoZSByaWdodFxyXG4gICAgICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IGosIGUuZy4gaWYgbiBpcyA5MDg3MTQgYW5kIGogaXMgMiwgdGhlIGV4cHJlc3Npb24gZ2l2ZXMgNzE0LlxyXG4gICAgICAgICAgIHhjW25pICsgMV0gIT0gbnVsbCB8fCAoaiA8IDAgPyBuIDogbiAlIHBvd3MxMFtkIC0gaiAtIDFdKTtcclxuXHJcbiAgICAgICAgICByID0gcm0gPCA0XHJcbiAgICAgICAgICAgPyAocmQgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgOiByZCA+IDUgfHwgcmQgPT0gNSAmJiAocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiZcclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAgICgoaSA+IDAgPyBqID4gMCA/IG4gLyBwb3dzMTBbZCAtIGpdIDogMCA6IHhjW25pIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAgIGlmIChzZCA8IDEgfHwgIXhjWzBdKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgICAgIHNkIC09IHguZSArIDE7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDEsIDAuMSwgMC4wMSwgMC4wMDEsIDAuMDAwMSBldGMuXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSBwb3dzMTBbKExPR19CQVNFIC0gc2QgJSBMT0dfQkFTRSkgJSBMT0dfQkFTRV07XHJcbiAgICAgICAgICAgICAgeC5lID0gLXNkIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSB4LmUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmk7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICBuaS0tO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmkgKyAxO1xyXG4gICAgICAgICAgICBrID0gcG93czEwW0xPR19CQVNFIC0gaV07XHJcblxyXG4gICAgICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIC8vIGogPiAwIG1lYW5zIGkgPiBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuLlxyXG4gICAgICAgICAgICB4Y1tuaV0gPSBqID4gMCA/IG1hdGhmbG9vcihuIC8gcG93czEwW2QgLSBqXSAlIHBvd3MxMFtqXSkgKiBrIDogMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgZGlnaXQgdG8gYmUgcm91bmRlZCB1cCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgICAgIGlmIChuaSA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaSB3aWxsIGJlIHRoZSBsZW5ndGggb2YgeGNbMF0gYmVmb3JlIGsgaXMgYWRkZWQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcbiAgICAgICAgICAgICAgICBqID0geGNbMF0gKz0gaztcclxuICAgICAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTAsIGsrKyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgaSAhPSBrIHRoZSBsZW5ndGggaGFzIGluY3JlYXNlZC5cclxuICAgICAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICAgICAgeC5lKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4Y1swXSA9PSBCQVNFKSB4Y1swXSA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHhjW25pXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHhjW25pXSAhPSBCQVNFKSBicmVhaztcclxuICAgICAgICAgICAgICAgIHhjW25pLS1dID0gMDtcclxuICAgICAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoaSA9IHhjLmxlbmd0aDsgeGNbLS1pXSA9PT0gMDsgeGMucG9wKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3ZlcmZsb3c/IEluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/IFplcm8uXHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gdmFsdWVPZihuKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChlID09PSBudWxsKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG5cclxuICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIGUpXHJcbiAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIFBST1RPVFlQRS9JTlNUQU5DRSBNRVRIT0RTXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVyblxyXG4gICAgICogICAxIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgLTEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAwIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgICAqICAgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgZWl0aGVyIGlzIE5hTi5cclxuICAgICAqL1xyXG4gICAgUC5jb21wYXJlZFRvID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgZHAgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlXHJcbiAgICAgKiB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBkcCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGRwIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlczogaW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLmRlY2ltYWxQbGFjZXMgPSBQLmRwID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIG4gPSAoKHYgPSBjLmxlbmd0aCAtIDEpIC0gYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBudW1iZXIuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLyAwID0gSVxyXG4gICAgICogIG4gLyBOID0gTlxyXG4gICAgICogIG4gLyBJID0gMFxyXG4gICAgICogIDAgLyBuID0gMFxyXG4gICAgICogIDAgLyAwID0gTlxyXG4gICAgICogIDAgLyBOID0gTlxyXG4gICAgICogIDAgLyBJID0gMFxyXG4gICAgICogIE4gLyBuID0gTlxyXG4gICAgICogIE4gLyAwID0gTlxyXG4gICAgICogIE4gLyBOID0gTlxyXG4gICAgICogIE4gLyBJID0gTlxyXG4gICAgICogIEkgLyBuID0gSVxyXG4gICAgICogIEkgLyAwID0gSVxyXG4gICAgICogIEkgLyBOID0gTlxyXG4gICAgICogIEkgLyBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCBERUNJTUFMX1BMQUNFUywgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlciBwYXJ0IG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgYnkgdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkVG9JbnRlZ2VyQnkgPSBQLmlkaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIDAsIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZXhwb25lbnRpYXRlZCBieSBuLlxyXG4gICAgICpcclxuICAgICAqIElmIG0gaXMgcHJlc2VudCwgcmV0dXJuIHRoZSByZXN1bHQgbW9kdWxvIG0uXHJcbiAgICAgKiBJZiBuIGlzIG5lZ2F0aXZlIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqIElmIFBPV19QUkVDSVNJT04gaXMgbm9uLXplcm8gYW5kIG0gaXMgbm90IHByZXNlbnQsIHJvdW5kIHRvIFBPV19QUkVDSVNJT04gdXNpbmcgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9kdWxhciBwb3dlciBvcGVyYXRpb24gd29ya3MgZWZmaWNpZW50bHkgd2hlbiB4LCBuLCBhbmQgbSBhcmUgaW50ZWdlcnMsIG90aGVyd2lzZSBpdFxyXG4gICAgICogaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB4LmV4cG9uZW50aWF0ZWRCeShuKS5tb2R1bG8obSkgd2l0aCBhIFBPV19QUkVDSVNJT04gb2YgMC5cclxuICAgICAqXHJcbiAgICAgKiBuIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIGV4cG9uZW50LiBBbiBpbnRlZ2VyLlxyXG4gICAgICogW21dIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIG1vZHVsdXMuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiB7bn0nXHJcbiAgICAgKi9cclxuICAgIFAuZXhwb25lbnRpYXRlZEJ5ID0gUC5wb3cgPSBmdW5jdGlvbiAobiwgbSkge1xyXG4gICAgICB2YXIgaGFsZiwgaXNNb2RFeHAsIGksIGssIG1vcmUsIG5Jc0JpZywgbklzTmVnLCBuSXNPZGQsIHksXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihuKTtcclxuXHJcbiAgICAgIC8vIEFsbG93IE5hTiBhbmQgwrFJbmZpbml0eSwgYnV0IG5vdCBvdGhlciBub24taW50ZWdlcnMuXHJcbiAgICAgIGlmIChuLmMgJiYgIW4uaXNJbnRlZ2VyKCkpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0V4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAnICsgdmFsdWVPZihuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChtICE9IG51bGwpIG0gPSBuZXcgQmlnTnVtYmVyKG0pO1xyXG5cclxuICAgICAgLy8gRXhwb25lbnQgb2YgTUFYX1NBRkVfSU5URUdFUiBpcyAxNS5cclxuICAgICAgbklzQmlnID0gbi5lID4gMTQ7XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIE5hTiwgwrFJbmZpbml0eSwgwrEwIG9yIMKxMSwgb3IgbiBpcyDCsUluZmluaXR5LCBOYU4gb3IgwrEwLlxyXG4gICAgICBpZiAoIXguYyB8fCAheC5jWzBdIHx8IHguY1swXSA9PSAxICYmICF4LmUgJiYgeC5jLmxlbmd0aCA9PSAxIHx8ICFuLmMgfHwgIW4uY1swXSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgc2lnbiBvZiB0aGUgcmVzdWx0IG9mIHBvdyB3aGVuIHggaXMgbmVnYXRpdmUgZGVwZW5kcyBvbiB0aGUgZXZlbm5lc3Mgb2Ygbi5cclxuICAgICAgICAvLyBJZiArbiBvdmVyZmxvd3MgdG8gwrFJbmZpbml0eSwgdGhlIGV2ZW5uZXNzIG9mIG4gd291bGQgYmUgbm90IGJlIGtub3duLlxyXG4gICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE1hdGgucG93KCt2YWx1ZU9mKHgpLCBuSXNCaWcgPyBuLnMgKiAoMiAtIGlzT2RkKG4pKSA6ICt2YWx1ZU9mKG4pKSk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5Jc05lZyA9IG4ucyA8IDA7XHJcblxyXG4gICAgICBpZiAobSkge1xyXG5cclxuICAgICAgICAvLyB4ICUgbSByZXR1cm5zIE5hTiBpZiBhYnMobSkgaXMgemVybywgb3IgbSBpcyBOYU4uXHJcbiAgICAgICAgaWYgKG0uYyA/ICFtLmNbMF0gOiAhbS5zKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgICBpc01vZEV4cCA9ICFuSXNOZWcgJiYgeC5pc0ludGVnZXIoKSAmJiBtLmlzSW50ZWdlcigpO1xyXG5cclxuICAgICAgICBpZiAoaXNNb2RFeHApIHggPSB4Lm1vZChtKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93IHRvIMKxSW5maW5pdHk6ID49MioqMWUxMCBvciA+PTEuMDAwMDAyNCoqMWUxNS5cclxuICAgICAgLy8gVW5kZXJmbG93IHRvIMKxMDogPD0wLjc5KioxZTEwIG9yIDw9MC45OTk5OTc1KioxZTE1LlxyXG4gICAgICB9IGVsc2UgaWYgKG4uZSA+IDkgJiYgKHguZSA+IDAgfHwgeC5lIDwgLTEgfHwgKHguZSA9PSAwXHJcbiAgICAgICAgLy8gWzEsIDI0MDAwMDAwMF1cclxuICAgICAgICA/IHguY1swXSA+IDEgfHwgbklzQmlnICYmIHguY1sxXSA+PSAyNGU3XHJcbiAgICAgICAgLy8gWzgwMDAwMDAwMDAwMDAwXSAgWzk5OTk5NzUwMDAwMDAwXVxyXG4gICAgICAgIDogeC5jWzBdIDwgOGUxMyB8fCBuSXNCaWcgJiYgeC5jWzBdIDw9IDk5OTk5NzVlNykpKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHggaXMgbmVnYXRpdmUgYW5kIG4gaXMgb2RkLCBrID0gLTAsIGVsc2UgayA9IDAuXHJcbiAgICAgICAgayA9IHgucyA8IDAgJiYgaXNPZGQobikgPyAtMCA6IDA7XHJcblxyXG4gICAgICAgIC8vIElmIHggPj0gMSwgayA9IMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IC0xKSBrID0gMSAvIGs7XHJcblxyXG4gICAgICAgIC8vIElmIG4gaXMgbmVnYXRpdmUgcmV0dXJuIMKxMCwgZWxzZSByZXR1cm4gwrFJbmZpbml0eS5cclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihuSXNOZWcgPyAxIC8gayA6IGspO1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChQT1dfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRpbmcgZWFjaCBjb2VmZmljaWVudCBhcnJheSB0byBhIGxlbmd0aCBvZiBrIGFmdGVyIGVhY2ggbXVsdGlwbGljYXRpb25cclxuICAgICAgICAvLyBlcXVhdGVzIHRvIHRydW5jYXRpbmcgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIFBPV19QUkVDSVNJT04gKyBbMjgsIDQxXSxcclxuICAgICAgICAvLyBpLmUuIHRoZXJlIHdpbGwgYmUgYSBtaW5pbXVtIG9mIDI4IGd1YXJkIGRpZ2l0cyByZXRhaW5lZC5cclxuICAgICAgICBrID0gbWF0aGNlaWwoUE9XX1BSRUNJU0lPTiAvIExPR19CQVNFICsgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuSXNCaWcpIHtcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcigwLjUpO1xyXG4gICAgICAgIGlmIChuSXNOZWcpIG4ucyA9IDE7XHJcbiAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSA9IE1hdGguYWJzKCt2YWx1ZU9mKG4pKTtcclxuICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgIC8vIFBlcmZvcm1zIDU0IGxvb3AgaXRlcmF0aW9ucyBmb3IgbiBvZiA5MDA3MTk5MjU0NzQwOTkxLlxyXG4gICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICBpZiAobklzT2RkKSB7XHJcbiAgICAgICAgICB5ID0geS50aW1lcyh4KTtcclxuICAgICAgICAgIGlmICgheS5jKSBicmVhaztcclxuXHJcbiAgICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgICBpZiAoeS5jLmxlbmd0aCA+IGspIHkuYy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgICB5ID0geS5tb2QobSk7ICAgIC8veSA9IHkubWludXMoZGl2KHksIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaSkge1xyXG4gICAgICAgICAgaSA9IG1hdGhmbG9vcihpIC8gMik7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IG4udGltZXMoaGFsZik7XHJcbiAgICAgICAgICByb3VuZChuLCBuLmUgKyAxLCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAobi5lID4gMTQpIHtcclxuICAgICAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpID0gK3ZhbHVlT2Yobik7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ID0geC50aW1lcyh4KTtcclxuXHJcbiAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgIGlmICh4LmMgJiYgeC5jLmxlbmd0aCA+IGspIHguYy5sZW5ndGggPSBrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgIHggPSB4Lm1vZChtKTsgICAgLy94ID0geC5taW51cyhkaXYoeCwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc01vZEV4cCkgcmV0dXJuIHk7XHJcbiAgICAgIGlmIChuSXNOZWcpIHkgPSBPTkUuZGl2KHkpO1xyXG5cclxuICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IGsgPyByb3VuZCh5LCBQT1dfUFJFQ0lTSU9OLCBST1VORElOR19NT0RFLCBtb3JlKSA6IHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBhbiBpbnRlZ2VyXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7cm19J1xyXG4gICAgICovXHJcbiAgICBQLmludGVnZXJWYWx1ZSA9IGZ1bmN0aW9uIChybSkge1xyXG4gICAgICB2YXIgbiA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG4gICAgICByZXR1cm4gcm91bmQobiwgbi5lICsgMSwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0VxdWFsVG8gPSBQLmVxID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gMSB8fCBiID09PSAwO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0ludGVnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmMubGVuZ3RoIC0gMjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IC0xIHx8IGIgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05hTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBwb3NpdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiB0aGlzLmNbMF0gPT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAtIDAgPSBuXHJcbiAgICAgKiAgbiAtIE4gPSBOXHJcbiAgICAgKiAgbiAtIEkgPSAtSVxyXG4gICAgICogIDAgLSBuID0gLW5cclxuICAgICAqICAwIC0gMCA9IDBcclxuICAgICAqICAwIC0gTiA9IE5cclxuICAgICAqICAwIC0gSSA9IC1JXHJcbiAgICAgKiAgTiAtIG4gPSBOXHJcbiAgICAgKiAgTiAtIDAgPSBOXHJcbiAgICAgKiAgTiAtIE4gPSBOXHJcbiAgICAgKiAgTiAtIEkgPSBOXHJcbiAgICAgKiAgSSAtIG4gPSBJXHJcbiAgICAgKiAgSSAtIDAgPSBJXHJcbiAgICAgKiAgSSAtIE4gPSBOXHJcbiAgICAgKiAgSSAtIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbWludXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubWludXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgaSwgaiwgdCwgeExUeSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5wbHVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4geGMgPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih5YyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgICAgcmV0dXJuIHljWzBdID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDpcclxuXHJcbiAgICAgICAgICAgLy8gSUVFRSA3NTQgKDIwMDgpIDYuMzogbiAtIG4gPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eVxyXG4gICAgICAgICAgIFJPVU5ESU5HX01PREUgPT0gMyA/IC0wIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcblxyXG4gICAgICAgIGlmICh4TFR5ID0gYSA8IDApIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy5cclxuICAgICAgICBmb3IgKGIgPSBhOyBiLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50cyBlcXVhbC4gQ2hlY2sgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICAgICAgaiA9ICh4TFR5ID0gKGEgPSB4Yy5sZW5ndGgpIDwgKGIgPSB5Yy5sZW5ndGgpKSA/IGEgOiBiO1xyXG5cclxuICAgICAgICBmb3IgKGEgPSBiID0gMDsgYiA8IGo7IGIrKykge1xyXG5cclxuICAgICAgICAgIGlmICh4Y1tiXSAhPSB5Y1tiXSkge1xyXG4gICAgICAgICAgICB4TFR5ID0geGNbYl0gPCB5Y1tiXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4IDwgeT8gUG9pbnQgeGMgdG8gdGhlIGFycmF5IG9mIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoeExUeSkge1xyXG4gICAgICAgIHQgPSB4YztcclxuICAgICAgICB4YyA9IHljO1xyXG4gICAgICAgIHljID0gdDtcclxuICAgICAgICB5LnMgPSAteS5zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBiID0gKGogPSB5Yy5sZW5ndGgpIC0gKGkgPSB4Yy5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zIHRvIHhjIGlmIHNob3J0ZXIuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIHplcm9zIHRvIHljIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Qgb25seSBuZWVkcyB0byBzdGFydCBhdCB5Yy5sZW5ndGguXHJcbiAgICAgIGlmIChiID4gMCkgZm9yICg7IGItLTsgeGNbaSsrXSA9IDApO1xyXG4gICAgICBiID0gQkFTRSAtIDE7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB5YyBmcm9tIHhjLlxyXG4gICAgICBmb3IgKDsgaiA+IGE7KSB7XHJcblxyXG4gICAgICAgIGlmICh4Y1stLWpdIDwgeWNbal0pIHtcclxuICAgICAgICAgIGZvciAoaSA9IGo7IGkgJiYgIXhjWy0taV07IHhjW2ldID0gYik7XHJcbiAgICAgICAgICAtLXhjW2ldO1xyXG4gICAgICAgICAgeGNbal0gKz0gQkFTRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhjW2pdIC09IHljW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgeGNbMF0gPT0gMDsgeGMuc3BsaWNlKDAsIDEpLCAtLXllKTtcclxuXHJcbiAgICAgIC8vIFplcm8/XHJcbiAgICAgIGlmICgheGNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gRm9sbG93aW5nIElFRUUgNzU0ICgyMDA4KSA2LjMsXHJcbiAgICAgICAgLy8gbiAtIG4gPSArMCAgYnV0ICBuIC0gbiA9IC0wICB3aGVuIHJvdW5kaW5nIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAgIHkucyA9IFJPVU5ESU5HX01PREUgPT0gMyA/IC0xIDogMTtcclxuICAgICAgICB5LmMgPSBbeS5lID0gMF07XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIEluZmluaXR5IGFzICt4IC0gK3kgIT0gSW5maW5pdHkgJiYgLXggLSAteSAhPSBJbmZpbml0eVxyXG4gICAgICAvLyBmb3IgZmluaXRlIHggYW5kIHkuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgIG4gJSAwID0gIE5cclxuICAgICAqICAgbiAlIE4gPSAgTlxyXG4gICAgICogICBuICUgSSA9ICBuXHJcbiAgICAgKiAgIDAgJSBuID0gIDBcclxuICAgICAqICAtMCAlIG4gPSAtMFxyXG4gICAgICogICAwICUgMCA9ICBOXHJcbiAgICAgKiAgIDAgJSBOID0gIE5cclxuICAgICAqICAgMCAlIEkgPSAgMFxyXG4gICAgICogICBOICUgbiA9ICBOXHJcbiAgICAgKiAgIE4gJSAwID0gIE5cclxuICAgICAqICAgTiAlIE4gPSAgTlxyXG4gICAgICogICBOICUgSSA9ICBOXHJcbiAgICAgKiAgIEkgJSBuID0gIE5cclxuICAgICAqICAgSSAlIDAgPSAgTlxyXG4gICAgICogICBJICUgTiA9ICBOXHJcbiAgICAgKiAgIEkgJSBJID0gIE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtb2R1bG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgTU9EVUxPX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgcSwgcyxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIEluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgemVyby5cclxuICAgICAgaWYgKCF4LmMgfHwgIXkucyB8fCB5LmMgJiYgIXkuY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIEluZmluaXR5IG9yIHggaXMgemVyby5cclxuICAgICAgfSBlbHNlIGlmICgheS5jIHx8IHguYyAmJiAheC5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChNT0RVTE9fTU9ERSA9PSA5KSB7XHJcblxyXG4gICAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAgIC8vIHIgPSB4IC0gcXkgICAgd2hlcmUgIDAgPD0gciA8IGFicyh5KVxyXG4gICAgICAgIHMgPSB5LnM7XHJcbiAgICAgICAgeS5zID0gMTtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIDMpO1xyXG4gICAgICAgIHkucyA9IHM7XHJcbiAgICAgICAgcS5zICo9IHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCBNT0RVTE9fTU9ERSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSB4Lm1pbnVzKHEudGltZXMoeSkpO1xyXG5cclxuICAgICAgLy8gVG8gbWF0Y2ggSmF2YVNjcmlwdCAlLCBlbnN1cmUgc2lnbiBvZiB6ZXJvIGlzIHNpZ24gb2YgZGl2aWRlbmQuXHJcbiAgICAgIGlmICgheS5jWzBdICYmIE1PRFVMT19NT0RFID09IDEpIHkucyA9IHgucztcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICogMCA9IDBcclxuICAgICAqICBuICogTiA9IE5cclxuICAgICAqICBuICogSSA9IElcclxuICAgICAqICAwICogbiA9IDBcclxuICAgICAqICAwICogMCA9IDBcclxuICAgICAqICAwICogTiA9IE5cclxuICAgICAqICAwICogSSA9IE5cclxuICAgICAqICBOICogbiA9IE5cclxuICAgICAqICBOICogMCA9IE5cclxuICAgICAqICBOICogTiA9IE5cclxuICAgICAqICBOICogSSA9IE5cclxuICAgICAqICBJICogbiA9IElcclxuICAgICAqICBJICogMCA9IE5cclxuICAgICAqICBJICogTiA9IE5cclxuICAgICAqICBJICogSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtdWx0aXBsaWVkIGJ5IHRoZSB2YWx1ZVxyXG4gICAgICogb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm11bHRpcGxpZWRCeSA9IFAudGltZXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgYywgZSwgaSwgaiwgaywgbSwgeGNMLCB4bG8sIHhoaSwgeWNMLCB5bG8sIHloaSwgemMsXHJcbiAgICAgICAgYmFzZSwgc3FydEJhc2UsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSAoeSA9IG5ldyBCaWdOdW1iZXIoeSwgYikpLmM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCDCsUluZmluaXR5IG9yIMKxMD9cclxuICAgICAgaWYgKCF4YyB8fCAheWMgfHwgIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4sIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4LnMgfHwgIXkucyB8fCB4YyAmJiAheGNbMF0gJiYgIXljIHx8IHljICYmICF5Y1swXSAmJiAheGMpIHtcclxuICAgICAgICAgIHkuYyA9IHkuZSA9IHkucyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHkucyAqPSB4LnM7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgICBpZiAoIXhjIHx8ICF5Yykge1xyXG4gICAgICAgICAgICB5LmMgPSB5LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHkuYyA9IFswXTtcclxuICAgICAgICAgICAgeS5lID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpICsgYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICB5LnMgKj0geC5zO1xyXG4gICAgICB4Y0wgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIHljTCA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB4YyBwb2ludHMgdG8gbG9uZ2VyIGFycmF5IGFuZCB4Y0wgdG8gaXRzIGxlbmd0aC5cclxuICAgICAgaWYgKHhjTCA8IHljTCkge1xyXG4gICAgICAgIHpjID0geGM7XHJcbiAgICAgICAgeGMgPSB5YztcclxuICAgICAgICB5YyA9IHpjO1xyXG4gICAgICAgIGkgPSB4Y0w7XHJcbiAgICAgICAgeGNMID0geWNMO1xyXG4gICAgICAgIHljTCA9IGk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluaXRpYWxpc2UgdGhlIHJlc3VsdCBhcnJheSB3aXRoIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4Y0wgKyB5Y0wsIHpjID0gW107IGktLTsgemMucHVzaCgwKSk7XHJcblxyXG4gICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgc3FydEJhc2UgPSBTUVJUX0JBU0U7XHJcblxyXG4gICAgICBmb3IgKGkgPSB5Y0w7IC0taSA+PSAwOykge1xyXG4gICAgICAgIGMgPSAwO1xyXG4gICAgICAgIHlsbyA9IHljW2ldICUgc3FydEJhc2U7XHJcbiAgICAgICAgeWhpID0geWNbaV0gLyBzcXJ0QmFzZSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoayA9IHhjTCwgaiA9IGkgKyBrOyBqID4gaTspIHtcclxuICAgICAgICAgIHhsbyA9IHhjWy0ta10gJSBzcXJ0QmFzZTtcclxuICAgICAgICAgIHhoaSA9IHhjW2tdIC8gc3FydEJhc2UgfCAwO1xyXG4gICAgICAgICAgbSA9IHloaSAqIHhsbyArIHhoaSAqIHlsbztcclxuICAgICAgICAgIHhsbyA9IHlsbyAqIHhsbyArICgobSAlIHNxcnRCYXNlKSAqIHNxcnRCYXNlKSArIHpjW2pdICsgYztcclxuICAgICAgICAgIGMgPSAoeGxvIC8gYmFzZSB8IDApICsgKG0gLyBzcXJ0QmFzZSB8IDApICsgeWhpICogeGhpO1xyXG4gICAgICAgICAgemNbai0tXSA9IHhsbyAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB6Y1tqXSA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjKSB7XHJcbiAgICAgICAgKytlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHpjLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB6YywgZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbmVnYXRlZCxcclxuICAgICAqIGkuZS4gbXVsdGlwbGllZCBieSAtMS5cclxuICAgICAqL1xyXG4gICAgUC5uZWdhdGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIHgucyA9IC14LnMgfHwgbnVsbDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKyAwID0gblxyXG4gICAgICogIG4gKyBOID0gTlxyXG4gICAgICogIG4gKyBJID0gSVxyXG4gICAgICogIDAgKyBuID0gblxyXG4gICAgICogIDAgKyAwID0gMFxyXG4gICAgICogIDAgKyBOID0gTlxyXG4gICAgICogIDAgKyBJID0gSVxyXG4gICAgICogIE4gKyBuID0gTlxyXG4gICAgICogIE4gKyAwID0gTlxyXG4gICAgICogIE4gKyBOID0gTlxyXG4gICAgICogIE4gKyBJID0gTlxyXG4gICAgICogIEkgKyBuID0gSVxyXG4gICAgICogIEkgKyAwID0gSVxyXG4gICAgICogIEkgKyBOID0gTlxyXG4gICAgICogIEkgKyBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHBsdXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAucGx1cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5taW51cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gbmV3IEJpZ051bWJlcihhIC8gMCk7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSByZXR1cm4geWNbMF0gPyB5IDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOiBhICogMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuIEZhc3RlciB0byB1c2UgcmV2ZXJzZSB0aGVuIGRvIHVuc2hpZnRzLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuICAgICAgICBpZiAoYSA+IDApIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICAgIGZvciAoOyBhLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGEgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIGIgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBQb2ludCB4YyB0byB0aGUgbG9uZ2VyIGFycmF5LCBhbmQgYiB0byB0aGUgc2hvcnRlciBsZW5ndGguXHJcbiAgICAgIGlmIChhIC0gYiA8IDApIHtcclxuICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgeWMgPSB4YztcclxuICAgICAgICB4YyA9IHQ7XHJcbiAgICAgICAgYiA9IGE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHljLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhjIGNhbiBiZSBpZ25vcmVkLlxyXG4gICAgICBmb3IgKGEgPSAwOyBiOykge1xyXG4gICAgICAgIGEgPSAoeGNbLS1iXSA9IHhjW2JdICsgeWNbYl0gKyBhKSAvIEJBU0UgfCAwO1xyXG4gICAgICAgIHhjW2JdID0gQkFTRSA9PT0geGNbYl0gPyAwIDogeGNbYl0gJSBCQVNFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYSkge1xyXG4gICAgICAgIHhjID0gW2FdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgKyt5ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgICAvLyB5ZSA9IE1BWF9FWFAgKyAxIHBvc3NpYmxlXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBzZCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2ZcclxuICAgICAqIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKiBJZiBzZCBpcyB0cnVlIGluY2x1ZGUgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zIGluIHRoZSBjb3VudC5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIHNkIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2Ygc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogc2Qge251bWJlcnxib29sZWFufSBudW1iZXI6IHNpZ25pZmljYW50IGRpZ2l0czogaW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICBib29sZWFuOiB3aGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSBvciBmYWxzZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5wcmVjaXNpb24gPSBQLnNkID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZCAhPSBudWxsICYmIHNkICE9PSAhIXNkKSB7XHJcbiAgICAgICAgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIHNkLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgdiA9IGMubGVuZ3RoIC0gMTtcclxuICAgICAgbiA9IHYgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgICBpZiAodiA9IGNbdl0pIHtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAodiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIG4rKyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCAmJiB4LmUgKyAxID4gbikgbiA9IHguZSArIDE7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBzaGlmdGVkIGJ5IGsgcGxhY2VzXHJcbiAgICAgKiAocG93ZXJzIG9mIDEwKS4gU2hpZnQgdG8gdGhlIHJpZ2h0IGlmIG4gPiAwLCBhbmQgdG8gdGhlIGxlZnQgaWYgbiA8IDAuXHJcbiAgICAgKlxyXG4gICAgICogayB7bnVtYmVyfSBJbnRlZ2VyLCAtTUFYX1NBRkVfSU5URUdFUiB0byBNQVhfU0FGRV9JTlRFR0VSIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2t9J1xyXG4gICAgICovXHJcbiAgICBQLnNoaWZ0ZWRCeSA9IGZ1bmN0aW9uIChrKSB7XHJcbiAgICAgIGludENoZWNrKGssIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgICAgcmV0dXJuIHRoaXMudGltZXMoJzFlJyArIGspO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBzcXJ0KC1uKSA9ICBOXHJcbiAgICAgKiAgc3FydChOKSA9ICBOXHJcbiAgICAgKiAgc3FydCgtSSkgPSAgTlxyXG4gICAgICogIHNxcnQoSSkgPSAgSVxyXG4gICAgICogIHNxcnQoMCkgPSAgMFxyXG4gICAgICogIHNxcnQoLTApID0gLTBcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsXHJcbiAgICAgKiByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5zcXVhcmVSb290ID0gUC5zcXJ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgbSwgbiwgciwgcmVwLCB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGMgPSB4LmMsXHJcbiAgICAgICAgcyA9IHgucyxcclxuICAgICAgICBlID0geC5lLFxyXG4gICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMgKyA0LFxyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKCcwLjUnKTtcclxuXHJcbiAgICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgICBpZiAocyAhPT0gMSB8fCAhYyB8fCAhY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKCFzIHx8IHMgPCAwICYmICghYyB8fCBjWzBdKSA/IE5hTiA6IGMgPyB4IDogMSAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJbml0aWFsIGVzdGltYXRlLlxyXG4gICAgICBzID0gTWF0aC5zcXJ0KCt2YWx1ZU9mKHgpKTtcclxuXHJcbiAgICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAgIC8vIFBhc3MgeCB0byBNYXRoLnNxcnQgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChzID09IDAgfHwgcyA9PSAxIC8gMCkge1xyXG4gICAgICAgIG4gPSBjb2VmZlRvU3RyaW5nKGMpO1xyXG4gICAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgICAgcyA9IE1hdGguc3FydCgrbik7XHJcbiAgICAgICAgZSA9IGJpdEZsb29yKChlICsgMSkgLyAyKSAtIChlIDwgMCB8fCBlICUgMik7XHJcblxyXG4gICAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIocyArICcnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgZm9yIHplcm8uXHJcbiAgICAgIC8vIHIgY291bGQgYmUgemVybyBpZiBNSU5fRVhQIGlzIGNoYW5nZWQgYWZ0ZXIgdGhlIHRoaXMgdmFsdWUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgIC8vIFRoaXMgd291bGQgY2F1c2UgYSBkaXZpc2lvbiBieSB6ZXJvICh4L3QpIGFuZCBoZW5jZSBJbmZpbml0eSBiZWxvdywgd2hpY2ggd291bGQgY2F1c2VcclxuICAgICAgLy8gY29lZmZUb1N0cmluZyB0byB0aHJvdy5cclxuICAgICAgaWYgKHIuY1swXSkge1xyXG4gICAgICAgIGUgPSByLmU7XHJcbiAgICAgICAgcyA9IGUgKyBkcDtcclxuICAgICAgICBpZiAocyA8IDMpIHMgPSAwO1xyXG5cclxuICAgICAgICAvLyBOZXd0b24tUmFwaHNvbiBpdGVyYXRpb24uXHJcbiAgICAgICAgZm9yICg7IDspIHtcclxuICAgICAgICAgIHQgPSByO1xyXG4gICAgICAgICAgciA9IGhhbGYudGltZXModC5wbHVzKGRpdih4LCB0LCBkcCwgMSkpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29lZmZUb1N0cmluZyh0LmMpLnNsaWNlKDAsIHMpID09PSAobiA9IGNvZWZmVG9TdHJpbmcoci5jKSkuc2xpY2UoMCwgcykpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSBleHBvbmVudCBvZiByIG1heSBoZXJlIGJlIG9uZSBsZXNzIHRoYW4gdGhlIGZpbmFsIHJlc3VsdCBleHBvbmVudCxcclxuICAgICAgICAgICAgLy8gZS5nIDAuMDAwOTk5OSAoZS00KSAtLT4gMC4wMDEgKGUtMyksIHNvIGFkanVzdCBzIHNvIHRoZSByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIGluZGV4ZWQgY29ycmVjdGx5LlxyXG4gICAgICAgICAgICBpZiAoci5lIDwgZSkgLS1zO1xyXG4gICAgICAgICAgICBuID0gbi5zbGljZShzIC0gMywgcyArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSA5OTk5IG9yIDQ5OTkgKGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSkgY29udGludWUgdGhlXHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGlvbi5cclxuICAgICAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlXHJcbiAgICAgICAgICAgICAgLy8gZXhhY3QgcmVzdWx0IGFzIHRoZSBuaW5lcyBtYXkgaW5maW5pdGVseSByZXBlYXQuXHJcbiAgICAgICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgICAgIHJvdW5kKHQsIHQuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZHAgKz0gNDtcclxuICAgICAgICAgICAgICBzICs9IDQ7XHJcbiAgICAgICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGV4YWN0XHJcbiAgICAgICAgICAgICAgLy8gcmVzdWx0LiBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRydW5jYXRlIHRvIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMSk7XHJcbiAgICAgICAgICAgICAgICBtID0gIXIudGltZXMocikuZXEoeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMSwgUk9VTkRJTkdfTU9ERSwgbSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gYW5kXHJcbiAgICAgKiByb3VuZGVkIHVzaW5nIFJPVU5ESU5HX01PREUgdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRXhwb25lbnRpYWwgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHArKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRpbmdcclxuICAgICAqIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlOiBhcyB3aXRoIEphdmFTY3JpcHQncyBudW1iZXIgdHlwZSwgKC0wKS50b0ZpeGVkKDApIGlzICcwJyxcclxuICAgICAqIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZpeGVkID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwID0gZHAgKyB0aGlzLmUgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGVkXHJcbiAgICAgKiB1c2luZyBybSBvciBST1VORElOR19NT0RFIHRvIGRwIGRlY2ltYWwgcGxhY2VzLCBhbmQgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllc1xyXG4gICAgICogb2YgdGhlIGZvcm1hdCBvciBGT1JNQVQgb2JqZWN0IChzZWUgQmlnTnVtYmVyLnNldCkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvcm1hdHRpbmcgb2JqZWN0IG1heSBjb250YWluIHNvbWUgb3IgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHNob3duIGJlbG93LlxyXG4gICAgICpcclxuICAgICAqIEZPUk1BVCA9IHtcclxuICAgICAqICAgcHJlZml4OiAnJyxcclxuICAgICAqICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICogICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgKiAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgKiAgIHN1ZmZpeDogJydcclxuICAgICAqIH07XHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICogW2Zvcm1hdF0ge29iamVjdH0gRm9ybWF0dGluZyBvcHRpb25zLiBTZWUgRk9STUFUIHBiamVjdCBhYm92ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCBub3QgYW4gb2JqZWN0OiB7Zm9ybWF0fSdcclxuICAgICAqL1xyXG4gICAgUC50b0Zvcm1hdCA9IGZ1bmN0aW9uIChkcCwgcm0sIGZvcm1hdCkge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRwICE9IG51bGwgJiYgcm0gJiYgdHlwZW9mIHJtID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBybTtcclxuICAgICAgICAgIHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKGRwICYmIHR5cGVvZiBkcCA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gZHA7XHJcbiAgICAgICAgICBkcCA9IHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRk9STUFUO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ICE9ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAnICsgZm9ybWF0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0geC50b0ZpeGVkKGRwLCBybSk7XHJcblxyXG4gICAgICBpZiAoeC5jKSB7XHJcbiAgICAgICAgdmFyIGksXHJcbiAgICAgICAgICBhcnIgPSBzdHIuc3BsaXQoJy4nKSxcclxuICAgICAgICAgIGcxID0gK2Zvcm1hdC5ncm91cFNpemUsXHJcbiAgICAgICAgICBnMiA9ICtmb3JtYXQuc2Vjb25kYXJ5R3JvdXBTaXplLFxyXG4gICAgICAgICAgZ3JvdXBTZXBhcmF0b3IgPSBmb3JtYXQuZ3JvdXBTZXBhcmF0b3IgfHwgJycsXHJcbiAgICAgICAgICBpbnRQYXJ0ID0gYXJyWzBdLFxyXG4gICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gYXJyWzFdLFxyXG4gICAgICAgICAgaXNOZWcgPSB4LnMgPCAwLFxyXG4gICAgICAgICAgaW50RGlnaXRzID0gaXNOZWcgPyBpbnRQYXJ0LnNsaWNlKDEpIDogaW50UGFydCxcclxuICAgICAgICAgIGxlbiA9IGludERpZ2l0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChnMikge1xyXG4gICAgICAgICAgaSA9IGcxO1xyXG4gICAgICAgICAgZzEgPSBnMjtcclxuICAgICAgICAgIGcyID0gaTtcclxuICAgICAgICAgIGxlbiAtPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGcxID4gMCAmJiBsZW4gPiAwKSB7XHJcbiAgICAgICAgICBpID0gbGVuICUgZzEgfHwgZzE7XHJcbiAgICAgICAgICBpbnRQYXJ0ID0gaW50RGlnaXRzLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpICs9IGcxKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnN1YnN0cihpLCBnMSk7XHJcbiAgICAgICAgICBpZiAoZzIgPiAwKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnNsaWNlKGkpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnKSBpbnRQYXJ0ID0gJy0nICsgaW50UGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IGZyYWN0aW9uUGFydFxyXG4gICAgICAgICA/IGludFBhcnQgKyAoZm9ybWF0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJycpICsgKChnMiA9ICtmb3JtYXQuZnJhY3Rpb25Hcm91cFNpemUpXHJcbiAgICAgICAgICA/IGZyYWN0aW9uUGFydC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxkeycgKyBnMiArICd9XFxcXEInLCAnZycpLFxyXG4gICAgICAgICAgICckJicgKyAoZm9ybWF0LmZyYWN0aW9uR3JvdXBTZXBhcmF0b3IgfHwgJycpKVxyXG4gICAgICAgICAgOiBmcmFjdGlvblBhcnQpXHJcbiAgICAgICAgIDogaW50UGFydDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIChmb3JtYXQucHJlZml4IHx8ICcnKSArIHN0ciArIChmb3JtYXQuc3VmZml4IHx8ICcnKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdHdvIEJpZ051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBhcyBhIHNpbXBsZVxyXG4gICAgICogZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyIG51bWVyYXRvciBhbmQgYW4gaW50ZWdlciBkZW5vbWluYXRvci5cclxuICAgICAqIFRoZSBkZW5vbWluYXRvciB3aWxsIGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIG1heGltdW0gZGVub21pbmF0b3IuIElmIGEgbWF4aW11bSBkZW5vbWluYXRvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVub21pbmF0b3Igd2lsbCBiZVxyXG4gICAgICogdGhlIGxvd2VzdCB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBbbWRdIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gSW50ZWdlciA+PSAxLCBvciBJbmZpbml0eS4gVGhlIG1heGltdW0gZGVub21pbmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9IDoge21kfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZyYWN0aW9uID0gZnVuY3Rpb24gKG1kKSB7XHJcbiAgICAgIHZhciBkLCBkMCwgZDEsIGQyLCBlLCBleHAsIG4sIG4wLCBuMSwgcSwgciwgcyxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYztcclxuXHJcbiAgICAgIGlmIChtZCAhPSBudWxsKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobWQpO1xyXG5cclxuICAgICAgICAvLyBUaHJvdyBpZiBtZCBpcyBsZXNzIHRoYW4gb25lIG9yIGlzIG5vdCBhbiBpbnRlZ2VyLCB1bmxlc3MgaXQgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCFuLmlzSW50ZWdlcigpICYmIChuLmMgfHwgbi5zICE9PSAxKSB8fCBuLmx0KE9ORSkpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCAnICtcclxuICAgICAgICAgICAgICAobi5pc0ludGVnZXIoKSA/ICdvdXQgb2YgcmFuZ2U6ICcgOiAnbm90IGFuIGludGVnZXI6ICcpICsgdmFsdWVPZihuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXhjKSByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuXHJcbiAgICAgIGQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIG4xID0gZDAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIGQxID0gbjAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIHMgPSBjb2VmZlRvU3RyaW5nKHhjKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBpbml0aWFsIGRlbm9taW5hdG9yLlxyXG4gICAgICAvLyBkIGlzIGEgcG93ZXIgb2YgMTAgYW5kIHRoZSBtaW5pbXVtIG1heCBkZW5vbWluYXRvciB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgZXhhY3RseS5cclxuICAgICAgZSA9IGQuZSA9IHMubGVuZ3RoIC0geC5lIC0gMTtcclxuICAgICAgZC5jWzBdID0gUE9XU19URU5bKGV4cCA9IGUgJSBMT0dfQkFTRSkgPCAwID8gTE9HX0JBU0UgKyBleHAgOiBleHBdO1xyXG4gICAgICBtZCA9ICFtZCB8fCBuLmNvbXBhcmVkVG8oZCkgPiAwID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcblxyXG4gICAgICBleHAgPSBNQVhfRVhQO1xyXG4gICAgICBNQVhfRVhQID0gMSAvIDA7XHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG5cclxuICAgICAgLy8gbjAgPSBkMSA9IDBcclxuICAgICAgbjAuY1swXSA9IDA7XHJcblxyXG4gICAgICBmb3IgKDsgOykgIHtcclxuICAgICAgICBxID0gZGl2KG4sIGQsIDAsIDEpO1xyXG4gICAgICAgIGQyID0gZDAucGx1cyhxLnRpbWVzKGQxKSk7XHJcbiAgICAgICAgaWYgKGQyLmNvbXBhcmVkVG8obWQpID09IDEpIGJyZWFrO1xyXG4gICAgICAgIGQwID0gZDE7XHJcbiAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMiA9IG4xKSk7XHJcbiAgICAgICAgbjAgPSBkMjtcclxuICAgICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyID0gZCkpO1xyXG4gICAgICAgIG4gPSBkMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZDIgPSBkaXYobWQubWludXMoZDApLCBkMSwgMCwgMSk7XHJcbiAgICAgIG4wID0gbjAucGx1cyhkMi50aW1lcyhuMSkpO1xyXG4gICAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTtcclxuICAgICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcbiAgICAgIGUgPSBlICogMjtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDFcclxuICAgICAgciA9IGRpdihuMSwgZDEsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpLmNvbXBhcmVkVG8oXHJcbiAgICAgICAgICBkaXYobjAsIGQwLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKSkgPCAxID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICAgIE1BWF9FWFAgPSBleHA7XHJcblxyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICAgKi9cclxuICAgIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiArdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSBvciBST1VORElOR19NT0RFLiBJZiBzZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHNcclxuICAgICAqIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24sIHRoZW4gdXNlXHJcbiAgICAgKiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvUHJlY2lzaW9uID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICBpZiAoc2QgIT0gbnVsbCkgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgc2QsIHJtLCAyKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBiYXNlIGIsIG9yIGJhc2UgMTAgaWYgYiBpc1xyXG4gICAgICogb21pdHRlZC4gSWYgYSBiYXNlIGlzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGJhc2UgMTAsIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmRcclxuICAgICAqIFJPVU5ESU5HX01PREUuIElmIGEgYmFzZSBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgdGhpcyBCaWdOdW1iZXIgaGFzIGEgcG9zaXRpdmUgZXhwb25lbnRcclxuICAgICAqIHRoYXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFRPX0VYUF9QT1MsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuXHJcbiAgICAgKiBUT19FWFBfTkVHLCByZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW2JdIHtudW1iZXJ9IEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgKi9cclxuICAgIFAudG9TdHJpbmcgPSBmdW5jdGlvbiAoYikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIG4gPSB0aGlzLFxyXG4gICAgICAgIHMgPSBuLnMsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5IG9yIE5hTj9cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc3RyID0gJ0luZmluaXR5JztcclxuICAgICAgICAgIGlmIChzIDwgMCkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSAnTmFOJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgICAgID8gdG9FeHBvbmVudGlhbChjb2VmZlRvU3RyaW5nKG4uYyksIGUpXHJcbiAgICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYiA9PT0gMTAgJiYgYWxwaGFiZXRIYXNOb3JtYWxEZWNpbWFsRGlnaXRzKSB7XHJcbiAgICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgREVDSU1BTF9QTEFDRVMgKyBlICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBuLmUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuICAgICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyksIDEwLCBiLCBzLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCAmJiBuLmNbMF0pIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYXMgdG9TdHJpbmcsIGJ1dCBkbyBub3QgYWNjZXB0IGEgYmFzZSBhcmd1bWVudCwgYW5kIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24gZm9yXHJcbiAgICAgKiBuZWdhdGl2ZSB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBQLl9pc0JpZ051bWJlciA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNvbmZpZ09iamVjdCAhPSBudWxsKSBCaWdOdW1iZXIuc2V0KGNvbmZpZ09iamVjdCk7XHJcblxyXG4gICAgcmV0dXJuIEJpZ051bWJlcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBQUklWQVRFIEhFTFBFUiBGVU5DVElPTlNcclxuXHJcbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZhcmlhYmxlcyxcclxuICAvLyBlLmcuIERFQ0lNQUxfUExBQ0VTLCBpbiB0aGUgc2NvcGUgb2YgdGhlIGBjbG9uZWAgZnVuY3Rpb24gYWJvdmUuXHJcblxyXG5cclxuICBmdW5jdGlvbiBiaXRGbG9vcihuKSB7XHJcbiAgICB2YXIgaSA9IG4gfCAwO1xyXG4gICAgcmV0dXJuIG4gPiAwIHx8IG4gPT09IGkgPyBpIDogaSAtIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIGEgY29lZmZpY2llbnQgYXJyYXkgYXMgYSBzdHJpbmcgb2YgYmFzZSAxMCBkaWdpdHMuXHJcbiAgZnVuY3Rpb24gY29lZmZUb1N0cmluZyhhKSB7XHJcbiAgICB2YXIgcywgeixcclxuICAgICAgaSA9IDEsXHJcbiAgICAgIGogPSBhLmxlbmd0aCxcclxuICAgICAgciA9IGFbMF0gKyAnJztcclxuXHJcbiAgICBmb3IgKDsgaSA8IGo7KSB7XHJcbiAgICAgIHMgPSBhW2krK10gKyAnJztcclxuICAgICAgeiA9IExPR19CQVNFIC0gcy5sZW5ndGg7XHJcbiAgICAgIGZvciAoOyB6LS07IHMgPSAnMCcgKyBzKTtcclxuICAgICAgciArPSBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaiA9IHIubGVuZ3RoOyByLmNoYXJDb2RlQXQoLS1qKSA9PT0gNDg7KTtcclxuXHJcbiAgICByZXR1cm4gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb21wYXJlIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXJzIHggYW5kIHkuXHJcbiAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XHJcbiAgICB2YXIgYSwgYixcclxuICAgICAgeGMgPSB4LmMsXHJcbiAgICAgIHljID0geS5jLFxyXG4gICAgICBpID0geC5zLFxyXG4gICAgICBqID0geS5zLFxyXG4gICAgICBrID0geC5lLFxyXG4gICAgICBsID0geS5lO1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICBpZiAoIWkgfHwgIWopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGEgPSB4YyAmJiAheGNbMF07XHJcbiAgICBiID0geWMgJiYgIXljWzBdO1xyXG5cclxuICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgaWYgKGEgfHwgYikgcmV0dXJuIGEgPyBiID8gMCA6IC1qIDogaTtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoaSAhPSBqKSByZXR1cm4gaTtcclxuXHJcbiAgICBhID0gaSA8IDA7XHJcbiAgICBiID0gayA9PSBsO1xyXG5cclxuICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gYiA/IDAgOiAheGMgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKCFiKSByZXR1cm4gayA+IGwgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIGogPSAoayA9IHhjLmxlbmd0aCkgPCAobCA9IHljLmxlbmd0aCkgPyBrIDogbDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgaWYgKHhjW2ldICE9IHljW2ldKSByZXR1cm4geGNbaV0gPiB5Y1tpXSBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBsZW5ndGhzLlxyXG4gICAgcmV0dXJuIGsgPT0gbCA/IDAgOiBrID4gbCBeIGEgPyAxIDogLTE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDaGVjayB0aGF0IG4gaXMgYSBwcmltaXRpdmUgbnVtYmVyLCBhbiBpbnRlZ2VyLCBhbmQgaW4gcmFuZ2UsIG90aGVyd2lzZSB0aHJvdy5cclxuICAgKi9cclxuICBmdW5jdGlvbiBpbnRDaGVjayhuLCBtaW4sIG1heCwgbmFtZSkge1xyXG4gICAgaWYgKG4gPCBtaW4gfHwgbiA+IG1heCB8fCBuICE9PSBtYXRoZmxvb3IobikpIHtcclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgIChiaWdudW1iZXJFcnJvciArIChuYW1lIHx8ICdBcmd1bWVudCcpICsgKHR5cGVvZiBuID09ICdudW1iZXInXHJcbiAgICAgICAgID8gbiA8IG1pbiB8fCBuID4gbWF4ID8gJyBvdXQgb2YgcmFuZ2U6ICcgOiAnIG5vdCBhbiBpbnRlZ2VyOiAnXHJcbiAgICAgICAgIDogJyBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAnKSArIFN0cmluZyhuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXNzdW1lcyBmaW5pdGUgbi5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICB2YXIgayA9IG4uYy5sZW5ndGggLSAxO1xyXG4gICAgcmV0dXJuIGJpdEZsb29yKG4uZSAvIExPR19CQVNFKSA9PSBrICYmIG4uY1trXSAlIDIgIT0gMDtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKHN0ciwgZSkge1xyXG4gICAgcmV0dXJuIChzdHIubGVuZ3RoID4gMSA/IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSkgOiBzdHIpICtcclxuICAgICAoZSA8IDAgPyAnZScgOiAnZSsnKSArIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9GaXhlZFBvaW50KHN0ciwgZSwgeikge1xyXG4gICAgdmFyIGxlbiwgenM7XHJcblxyXG4gICAgLy8gTmVnYXRpdmUgZXhwb25lbnQ/XHJcbiAgICBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MuXHJcbiAgICAgIGZvciAoenMgPSB6ICsgJy4nOyArK2U7IHpzICs9IHopO1xyXG4gICAgICBzdHIgPSB6cyArIHN0cjtcclxuXHJcbiAgICAvLyBQb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cclxuICAgICAgaWYgKCsrZSA+IGxlbikge1xyXG4gICAgICAgIGZvciAoenMgPSB6LCBlIC09IGxlbjsgLS1lOyB6cyArPSB6KTtcclxuICAgICAgICBzdHIgKz0genM7XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IGxlbikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRVhQT1JUXHJcblxyXG5cclxuICBCaWdOdW1iZXIgPSBjbG9uZSgpO1xyXG4gIEJpZ051bWJlclsnZGVmYXVsdCddID0gQmlnTnVtYmVyLkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJpZ051bWJlcjsgfSk7XHJcblxyXG4gIC8vIE5vZGUuanMgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxPYmplY3QpIHtcclxuICAgICAgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiA/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLAogICAgInZhciBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcblxuLypcbiAgICBqc29uMi5qc1xuICAgIDIwMTMtMDUtMjZcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBTZWUgaHR0cDovL3d3dy5KU09OLm9yZy9qcy5odG1sXG5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cblxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBnbG9iYWwgSlNPTiBvYmplY3QgY29udGFpbmluZyB0d28gbWV0aG9kczogc3RyaW5naWZ5XG4gICAgYW5kIHBhcnNlLlxuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpXG4gICAgICAgICAgICB2YWx1ZSAgICAgICBhbnkgSmF2YVNjcmlwdCB2YWx1ZSwgdXN1YWxseSBhbiBvYmplY3Qgb3IgYXJyYXkuXG5cbiAgICAgICAgICAgIHJlcGxhY2VyICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGRldGVybWluZXMgaG93IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBzdHJpbmdpZmllZCBmb3Igb2JqZWN0cy4gSXQgY2FuIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG5cbiAgICAgICAgICAgIHNwYWNlICAgICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG5lc3RlZCBzdHJ1Y3R1cmVzLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgdGV4dCB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZSBwYWNrZWQgd2l0aG91dCBleHRyYSB3aGl0ZXNwYWNlLiBJZiBpdCBpcyBhIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgYXQgZWFjaFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuIElmIGl0IGlzIGEgc3RyaW5nIChzdWNoIGFzICdcXHQnIG9yICcmbmJzcDsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuXG5cbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLlxuXG4gICAgICAgICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBjb250YWlucyBhIHRvSlNPTlxuICAgICAgICAgICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGVcbiAgICAgICAgICAgIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCxcbiAgICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3RoaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgdG9KU09OIG1ldGhvZFxuICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgICBib3VuZCB0byB0aGUgdmFsdWVcblxuICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLlxuXG4gICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVhcigpICAgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250aCgpICsgMSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkpICAgICAgKyAnVCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhlXG4gICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVhY2ggbWVtYmVyLCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIG9iamVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJlXG4gICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGxcbiAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNlcmlhbGl6YXRpb24uXG5cbiAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBpdCB3aWxsIGJlXG4gICAgICAgICAgICB1c2VkIHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzZXJpYWxpemVkLiBJdCBmaWx0ZXJzIHRoZSByZXN1bHRzXG4gICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBsaXN0ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRpb25zLCBzdWNoIGFzIHVuZGVmaW5lZCBvclxuICAgICAgICAgICAgZnVuY3Rpb25zLCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkLiBTdWNoIHZhbHVlcyBpbiBvYmplY3RzIHdpbGwgYmVcbiAgICAgICAgICAgIGRyb3BwZWQ7IGluIGFycmF5cyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBZb3UgY2FuIHVzZVxuICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRob3NlIHdpdGggSlNPTiB2YWx1ZXMuXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpIHJldHVybnMgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2UgcGFyYW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgdmFsdWUgdGhhdCBpcyBmaWxsZWQgd2l0aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8gbWFrZSBpdFxuICAgICAgICAgICAgZWFzaWVyIHRvIHJlYWQuXG5cbiAgICAgICAgICAgIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5nIHdpbGxcbiAgICAgICAgICAgIGJlIHVzZWQgZm9yIGluZGVudGF0aW9uLiBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCB0aGVuXG4gICAgICAgICAgICB0aGUgaW5kZW50YXRpb24gd2lsbCBiZSB0aGF0IG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJlXCIse1wicGx1cmlidXNcIjpcInVudW1cIn1dJ1xuXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dLCBudWxsLCAnXFx0Jyk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXFxuXFx0XCJlXCIsXFxuXFx0e1xcblxcdFxcdFwicGx1cmlidXNcIjogXCJ1bnVtXCJcXG5cXHR9XFxuXSdcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgpXSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trZXldIGluc3RhbmNlb2YgRGF0ZSA/XG4gICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlzW2tleV0gKyAnKScgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0pXCJdJ1xuXG5cbiAgICAgICAgSlNPTi5wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKCdbXCJEYXRlKDA5LzA5LzIwMDEpXCJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKC0xKSA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWx1ZS5zbGljZSg1LCAtMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgcmVnZXhwOiB0cnVlICovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcYlwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcZlwiLCBcIlxcclwiLCBcIlxcXCJcIiwgSlNPTiwgXCJcXFxcXCIsIGFwcGx5LFxuICAgIGNhbGwsIGNoYXJDb2RlQXQsIGdldFVUQ0RhdGUsIGdldFVUQ0Z1bGxZZWFyLCBnZXRVVENIb3VycyxcbiAgICBnZXRVVENNaW51dGVzLCBnZXRVVENNb250aCwgZ2V0VVRDU2Vjb25kcywgaGFzT3duUHJvcGVydHksIGpvaW4sXG4gICAgbGFzdEluZGV4LCBsZW5ndGgsIHBhcnNlLCBwcm90b3R5cGUsIHB1c2gsIHJlcGxhY2UsIHNsaWNlLCBzdHJpbmdpZnksXG4gICAgdGVzdCwgdG9KU09OLCB0b1N0cmluZywgdmFsdWVPZlxuKi9cblxuXG4vLyBDcmVhdGUgYSBKU09OIG9iamVjdCBvbmx5IGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiBXZSBjcmVhdGUgdGhlXG4vLyBtZXRob2RzIGluIGEgY2xvc3VyZSB0byBhdm9pZCBjcmVhdGluZyBnbG9iYWwgdmFyaWFibGVzLlxuXG52YXIgSlNPTiA9IG1vZHVsZS5leHBvcnRzO1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgfVxuXG4gICAgdmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGdhcCxcbiAgICAgICAgaW5kZW50LFxuICAgICAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAgICAgJ1xcZic6ICdcXFxcZicsXG4gICAgICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJ1xuICAgICAgICB9LFxuICAgICAgICByZXA7XG5cblxuICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuXG4vLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4vLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4vLyBzZXF1ZW5jZXMuXG5cbiAgICAgICAgZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICA6ICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgICAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuXG4vLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVyW2tleV0uXG5cbiAgICAgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuXG4gICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV0sXG4gICAgICAgICAgICBpc0JpZ051bWJlciA9IHZhbHVlICE9IG51bGwgJiYgKHZhbHVlIGluc3RhbmNlb2YgQmlnTnVtYmVyIHx8IEJpZ051bWJlci5pc0JpZ051bWJlcih2YWx1ZSkpO1xuXG4vLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgICAgIH1cblxuLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvXG4vLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG5cbi8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgaWYgKGlzQmlnTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG5cbi8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuXG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJztcblxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIGNhc2UgJ2JpZ2ludCc6XG5cbi8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gTm90ZTpcbi8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluXG4vLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LlxuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcblxuLy8gSWYgdGhlIHR5cGUgaXMgJ29iamVjdCcsIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb3Jcbi8vIG51bGwuXG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuLy8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLFxuLy8gc28gd2F0Y2ggb3V0IGZvciB0aGF0IGNhc2UuXG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGFuIGFycmF5IHRvIGhvbGQgdGhlIHBhcnRpYWwgcmVzdWx0cyBvZiBzdHJpbmdpZnlpbmcgdGhpcyBvYmplY3QgdmFsdWUuXG5cbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG5cbi8vIElzIHRoZSB2YWx1ZSBhbiBhcnJheT9cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cbi8vIFRoZSB2YWx1ZSBpcyBhbiBhcnJheS4gU3RyaW5naWZ5IGV2ZXJ5IGVsZW1lbnQuIFVzZSBudWxsIGFzIGEgcGxhY2Vob2xkZXJcbi8vIGZvciBub24tSlNPTiB2YWx1ZXMuXG5cbiAgICAgICAgICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmQgd3JhcCB0aGVtIGluXG4vLyBicmFja2V0cy5cblxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/ICdbXSdcbiAgICAgICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICAgICAgPyAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJ1xuICAgICAgICAgICAgICAgICAgICA6ICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbi8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LlxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4vLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAne30nXG4gICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICA/ICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nXG4gICAgICAgICAgICAgICAgOiAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JztcbiAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgIH1cblxuLy8gSWYgdGhlIEpTT04gb2JqZWN0IGRvZXMgbm90IHlldCBoYXZlIGEgc3RyaW5naWZ5IG1ldGhvZCwgZ2l2ZSBpdCBvbmUuXG5cbiAgICBpZiAodHlwZW9mIEpTT04uc3RyaW5naWZ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcblxuLy8gVGhlIHN0cmluZ2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBvcHRpb25hbFxuLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4gVGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uXG4vLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLlxuLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhblxuLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVhZGFibGUuXG5cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZ2FwID0gJyc7XG4gICAgICAgICAgICBpbmRlbnQgPSAnJztcblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdFxuLy8gbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy5cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS5cbi8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG5cbiAgICAgICAgICAgIHJlcCA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4vLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuXG4gICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcbiIsCiAgICAidmFyIEJpZ051bWJlciA9IG51bGw7XG5cbi8vIHJlZ2V4cHhzIGV4dHJhY3RlZCBmcm9tXG4vLyAoYykgQlNELTMtQ2xhdXNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFzdGlmeS9zZWN1cmUtanNvbi1wYXJzZS9ncmFwaHMvY29udHJpYnV0b3JzIGFuZCBodHRwczovL2dpdGh1Yi5jb20vaGFwaWpzL2JvdXJuZS9ncmFwaHMvY29udHJpYnV0b3JzXG5cbmNvbnN0IHN1c3BlY3RQcm90b1J4ID0gLyg/Ol98XFxcXHUwMDVbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKSg/OnB8XFxcXHUwMDcwKSg/OnJ8XFxcXHUwMDcyKSg/Om98XFxcXHUwMDZbRmZdKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKS87XG5jb25zdCBzdXNwZWN0Q29uc3RydWN0b3JSeCA9IC8oPzpjfFxcXFx1MDA2MykoPzpvfFxcXFx1MDA2W0ZmXSkoPzpufFxcXFx1MDA2W0VlXSkoPzpzfFxcXFx1MDA3MykoPzp0fFxcXFx1MDA3NCkoPzpyfFxcXFx1MDA3MikoPzp1fFxcXFx1MDA3NSkoPzpjfFxcXFx1MDA2MykoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpyfFxcXFx1MDA3MikvO1xuXG4vKlxuICAgIGpzb25fcGFyc2UuanNcbiAgICAyMDEyLTA2LTIwXG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBqc29uX3BhcnNlIGZ1bmN0aW9uLlxuICAgIER1cmluZyBjcmVhdGUgeW91IGNhbiAob3B0aW9uYWxseSkgc3BlY2lmeSBzb21lIGJlaGF2aW91cmFsIHN3aXRjaGVzXG5cbiAgICAgICAgcmVxdWlyZSgnanNvbi1iaWdpbnQnKShvcHRpb25zKVxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgb3B0aW9ucyBwYXJhbWV0ZXIgaG9sZHMgc3dpdGNoZXMgdGhhdCBkcml2ZSBjZXJ0YWluXG4gICAgICAgICAgICBhc3BlY3RzIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3M6XG4gICAgICAgICAgICAqIG9wdGlvbnMuc3RyaWN0ID0gdHJ1ZSB3aWxsIHdhcm4gYWJvdXQgZHVwbGljYXRlLWtleSB1c2FnZSBpbiB0aGUganNvbi5cbiAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgKHN0cmljdCA9IGZhbHNlKSB3aWxsIHNpbGVudGx5IGlnbm9yZSB0aG9zZSBhbmQgb3ZlcndyaXRlXG4gICAgICAgICAgICAgIHZhbHVlcyBmb3Iga2V5cyB0aGF0IGFyZSBpbiBkdXBsaWNhdGUgdXNlLlxuXG4gICAgVGhlIHJlc3VsdGluZyBmdW5jdGlvbiBmb2xsb3dzIHRoaXMgc2lnbmF0dXJlOlxuICAgICAgICBqc29uX3BhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0ganNvbl9wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cbiovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcXCJcIiwgXCJcXC9cIiwgXCJcXFxcXCIsIGF0LCBiLCBjYWxsLCBjaGFyQXQsIGYsIGZyb21DaGFyQ29kZSxcbiAgICBoYXNPd25Qcm9wZXJ0eSwgbWVzc2FnZSwgbiwgbmFtZSwgcHJvdG90eXBlLCBwdXNoLCByLCB0LCB0ZXh0XG4qL1xuXG52YXIganNvbl9wYXJzZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBUaGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gcGFyc2UgYSBKU09OIHRleHQsIHByb2R1Y2luZyBhIEphdmFTY3JpcHRcbiAgLy8gZGF0YSBzdHJ1Y3R1cmUuIEl0IGlzIGEgc2ltcGxlLCByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIuIEl0IGRvZXMgbm90IHVzZVxuICAvLyBldmFsIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEgbW9kZWwgZm9yIGltcGxlbWVudGluZ1xuICAvLyBhIEpTT04gcGFyc2VyIGluIG90aGVyIGxhbmd1YWdlcy5cblxuICAvLyBXZSBhcmUgZGVmaW5pbmcgdGhlIGZ1bmN0aW9uIGluc2lkZSBvZiBhbm90aGVyIGZ1bmN0aW9uIHRvIGF2b2lkIGNyZWF0aW5nXG4gIC8vIGdsb2JhbCB2YXJpYWJsZXMuXG5cbiAgLy8gRGVmYXVsdCBvcHRpb25zIG9uZSBjYW4gb3ZlcnJpZGUgYnkgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBwYXJzZSgpXG4gIHZhciBfb3B0aW9ucyA9IHtcbiAgICBzdHJpY3Q6IGZhbHNlLCAvLyBub3QgYmVpbmcgc3RyaWN0IG1lYW5zIGRvIG5vdCBnZW5lcmF0ZSBzeW50YXggZXJyb3JzIGZvciBcImR1cGxpY2F0ZSBrZXlcIlxuICAgIHN0b3JlQXNTdHJpbmc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgc3RvcmVkIGFzIEJpZ051bWJlciAoZGVmYXVsdCkgb3IgYSBzdHJpbmdcbiAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIGFsbCBudW1iZXJzIHNob3VsZCBiZSBCaWdcbiAgICB1c2VOYXRpdmVCaWdJbnQ6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgdG8gdXNlIG5hdGl2ZSBCaWdJbnQgaW5zdGVhZCBvZiBiaWdudW1iZXIuanNcbiAgICBwcm90b0FjdGlvbjogJ2Vycm9yJyxcbiAgICBjb25zdHJ1Y3RvckFjdGlvbjogJ2Vycm9yJyxcbiAgfTtcblxuICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9ucywgdGhlbiB1c2UgdGhlbSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBfb3B0aW9uc1xuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QgPT09IHRydWUpIHtcbiAgICAgIF9vcHRpb25zLnN0cmljdCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0b3JlQXNTdHJpbmcgPT09IHRydWUpIHtcbiAgICAgIF9vcHRpb25zLnN0b3JlQXNTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID1cbiAgICAgIG9wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9PT0gdHJ1ZSA/IG9wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA6IGZhbHNlO1xuICAgIF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA9XG4gICAgICBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA9PT0gdHJ1ZSA/IG9wdGlvbnMudXNlTmF0aXZlQmlnSW50IDogZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID0gb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBjb25zdHJ1Y3RvckFjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5wcm90b0FjdGlvbiA9IG9wdGlvbnMucHJvdG9BY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgcHJvdG9BY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMucHJvdG9BY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBhdCwgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGNoLCAvLyBUaGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBlc2NhcGVlID0ge1xuICAgICAgJ1wiJzogJ1wiJyxcbiAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgJy8nOiAnLycsXG4gICAgICBiOiAnXFxiJyxcbiAgICAgIGY6ICdcXGYnLFxuICAgICAgbjogJ1xcbicsXG4gICAgICByOiAnXFxyJyxcbiAgICAgIHQ6ICdcXHQnLFxuICAgIH0sXG4gICAgdGV4dCxcbiAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAvLyBDYWxsIGVycm9yIHdoZW4gc29tZXRoaW5nIGlzIHdyb25nLlxuXG4gICAgICB0aHJvdyB7XG4gICAgICAgIG5hbWU6ICdTeW50YXhFcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgIGF0OiBhdCxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgIH07XG4gICAgfSxcbiAgICBuZXh0ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgIC8vIElmIGEgYyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuXG4gICAgICBpZiAoYyAmJiBjICE9PSBjaCkge1xuICAgICAgICBlcnJvcihcIkV4cGVjdGVkICdcIiArIGMgKyBcIicgaW5zdGVhZCBvZiAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxuICAgICAgLy8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpO1xuICAgICAgYXQgKz0gMTtcbiAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGEgbnVtYmVyIHZhbHVlLlxuXG4gICAgICB2YXIgbnVtYmVyLFxuICAgICAgICBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKGNoID09PSAnLScpIHtcbiAgICAgICAgc3RyaW5nID0gJy0nO1xuICAgICAgICBuZXh0KCctJyk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJy4nKSB7XG4gICAgICAgIHN0cmluZyArPSAnLic7XG4gICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykge1xuICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgIGVycm9yKCdCYWQgbnVtYmVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQmlnTnVtYmVyID09IG51bGwpIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuICAgICAgICAvL2lmIChudW1iZXIgPiA5MDA3MTk5MjU0NzQwOTkyIHx8IG51bWJlciA8IC05MDA3MTk5MjU0NzQwOTkyKVxuICAgICAgICAvLyBCaWdudW1iZXIgaGFzIHN0cmljdGVyIGNoZWNrOiBldmVyeXRoaW5nIHdpdGggbGVuZ3RoID4gMTUgZGlnaXRzIGRpc2FsbG93ZWRcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxNSlcbiAgICAgICAgICByZXR1cm4gX29wdGlvbnMuc3RvcmVBc1N0cmluZ1xuICAgICAgICAgICAgPyBzdHJpbmdcbiAgICAgICAgICAgIDogX29wdGlvbnMudXNlTmF0aXZlQmlnSW50XG4gICAgICAgICAgICA/IEJpZ0ludChzdHJpbmcpXG4gICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAhX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZ1xuICAgICAgICAgICAgPyBudW1iZXJcbiAgICAgICAgICAgIDogX29wdGlvbnMudXNlTmF0aXZlQmlnSW50XG4gICAgICAgICAgICA/IEJpZ0ludChudW1iZXIpXG4gICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIobnVtYmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLlxuXG4gICAgICB2YXIgaGV4LFxuICAgICAgICBpLFxuICAgICAgICBzdHJpbmcgPSAnJyxcbiAgICAgICAgdWZmZmY7XG5cbiAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cblxuICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgIHZhciBzdGFydEF0ID0gYXQ7XG4gICAgICAgIHdoaWxlIChuZXh0KCkpIHtcbiAgICAgICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICB1ZmZmZiA9IDA7XG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1ZmZmZiA9IHVmZmZmICogMTYgKyBoZXg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcnRBdCA9IGF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBzdHJpbmcnKTtcbiAgICB9LFxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlLlxuXG4gICAgICB3aGlsZSAoY2ggJiYgY2ggPD0gJyAnKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyB0cnVlLCBmYWxzZSwgb3IgbnVsbC5cblxuICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgbmV4dCgncicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgIG5leHQoJ2YnKTtcbiAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ3MnKTtcbiAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICBuZXh0KCduJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBlcnJvcihcIlVuZXhwZWN0ZWQgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgfSxcbiAgICB2YWx1ZSwgLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgdmFsdWUgZnVuY3Rpb24uXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS5cblxuICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgIG5leHQoJ1snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgcmV0dXJuIGFycmF5OyAvLyBlbXB0eSBhcnJheVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgIGFycmF5LnB1c2godmFsdWUoKSk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBhcnJheScpO1xuICAgIH0sXG4gICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gb2JqZWN0IHZhbHVlLlxuXG4gICAgICB2YXIga2V5LFxuICAgICAgICBvYmplY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICBpZiAoY2ggPT09ICd7Jykge1xuICAgICAgICBuZXh0KCd7Jyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7IC8vIGVtcHR5IG9iamVjdFxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgIGtleSA9IHN0cmluZygpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgbmV4dCgnOicpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIF9vcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3VzcGVjdFByb3RvUngudGVzdChrZXkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ09iamVjdCBjb250YWlucyBmb3JiaWRkZW4gcHJvdG90eXBlIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3VzcGVjdENvbnN0cnVjdG9yUngudGVzdChrZXkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ09iamVjdCBjb250YWlucyBmb3JiaWRkZW4gY29uc3RydWN0b3IgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBvYmplY3QnKTtcbiAgICB9O1xuXG4gIHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuICAgIC8vIG9yIGEgd29yZC5cblxuICAgIHdoaXRlKCk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICByZXR1cm4gYXJyYXkoKTtcbiAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgcmV0dXJuIHN0cmluZygpO1xuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknID8gbnVtYmVyKCkgOiB3b3JkKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4gIC8vIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLlxuXG4gIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcblxuICAgIHRleHQgPSBzb3VyY2UgKyAnJztcbiAgICBhdCA9IDA7XG4gICAgY2ggPSAnICc7XG4gICAgcmVzdWx0ID0gdmFsdWUoKTtcbiAgICB3aGl0ZSgpO1xuICAgIGlmIChjaCkge1xuICAgICAgZXJyb3IoJ1N5bnRheCBlcnJvcicpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHtcbiAgICAgICAgICB2YXIgayxcbiAgICAgICAgICAgIHYsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7XG4gICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9KSh7ICcnOiByZXN1bHQgfSwgJycpXG4gICAgICA6IHJlc3VsdDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbl9wYXJzZTtcbiIsCiAgICAidmFyIGpzb25fc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5LmpzJykuc3RyaW5naWZ5O1xudmFyIGpzb25fcGFyc2UgICAgID0gcmVxdWlyZSgnLi9saWIvcGFyc2UuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuICB7XG4gICAgICAgIHBhcnNlOiBqc29uX3BhcnNlKG9wdGlvbnMpLFxuICAgICAgICBzdHJpbmdpZnk6IGpzb25fc3RyaW5naWZ5XG4gICAgfVxufTtcbi8vY3JlYXRlIHRoZSBkZWZhdWx0IG1ldGhvZCBtZW1iZXJzIHdpdGggbm8gb3B0aW9ucyBhcHBsaWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBqc29uX3BhcnNlKCk7XG5tb2R1bGUuZXhwb3J0cy5zdHJpbmdpZnkgPSBqc29uX3N0cmluZ2lmeTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdDRV9MSU5VWF9CSU9TX1BBVEhTID0gdm9pZCAwO1xuZXhwb3J0cy5pc0dvb2dsZUNsb3VkU2VydmVybGVzcyA9IGlzR29vZ2xlQ2xvdWRTZXJ2ZXJsZXNzO1xuZXhwb3J0cy5pc0dvb2dsZUNvbXB1dGVFbmdpbmVMaW51eCA9IGlzR29vZ2xlQ29tcHV0ZUVuZ2luZUxpbnV4O1xuZXhwb3J0cy5pc0dvb2dsZUNvbXB1dGVFbmdpbmVNQUNBZGRyZXNzID0gaXNHb29nbGVDb21wdXRlRW5naW5lTUFDQWRkcmVzcztcbmV4cG9ydHMuaXNHb29nbGVDb21wdXRlRW5naW5lID0gaXNHb29nbGVDb21wdXRlRW5naW5lO1xuZXhwb3J0cy5kZXRlY3RHQ1BSZXNpZGVuY3kgPSBkZXRlY3RHQ1BSZXNpZGVuY3k7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgb3NfMSA9IHJlcXVpcmUoXCJvc1wiKTtcbi8qKlxuICogS25vd24gcGF0aHMgdW5pcXVlIHRvIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBMaW51eCBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0cy5HQ0VfTElOVVhfQklPU19QQVRIUyA9IHtcbiAgICBCSU9TX0RBVEU6ICcvc3lzL2NsYXNzL2RtaS9pZC9iaW9zX2RhdGUnLFxuICAgIEJJT1NfVkVORE9SOiAnL3N5cy9jbGFzcy9kbWkvaWQvYmlvc192ZW5kb3InLFxufTtcbmNvbnN0IEdDRV9NQUNfQUREUkVTU19SRUdFWCA9IC9eNDI6MDEvO1xuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gYSBHb29nbGUgQ2xvdWQgU2VydmVybGVzcyBlbnZpcm9ubWVudCAoQ2xvdWQgUnVuIG9yIENsb3VkIEZ1bmN0aW9ucyBpbnN0YW5jZSkuXG4gKlxuICogVXNlcyB0aGU6XG4gKiAtIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcnVuL2RvY3MvY29udGFpbmVyLWNvbnRyYWN0I2Vudi12YXJzIENsb3VkIFJ1biBlbnZpcm9ubWVudCB2YXJpYWJsZXN9LlxuICogLSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Z1bmN0aW9ucy9kb2NzL2Vudi12YXIgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50IHZhcmlhYmxlc30uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIEdDUCBzZXJ2ZXJsZXNzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNHb29nbGVDbG91ZFNlcnZlcmxlc3MoKSB7XG4gICAgLyoqXG4gICAgICogYENMT1VEX1JVTl9KT0JgIGlzIHVzZWQgZm9yIENsb3VkIFJ1biBKb2JzXG4gICAgICogLSBTZWUge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9ydW4vZG9jcy9jb250YWluZXItY29udHJhY3QjZW52LXZhcnMgQ2xvdWQgUnVuIGVudmlyb25tZW50IHZhcmlhYmxlc30uXG4gICAgICpcbiAgICAgKiBgRlVOQ1RJT05fTkFNRWAgaXMgdXNlZCBpbiBvbGRlciBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRzOlxuICAgICAqIC0gU2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZnVuY3Rpb25zL2RvY3MvZW52LXZhciBQeXRob24gMy43IGFuZCBHbyAxLjExfS5cbiAgICAgKlxuICAgICAqIGBLX1NFUlZJQ0VgIGlzIHVzZWQgaW4gQ2xvdWQgUnVuIGFuZCBuZXdlciBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRzOlxuICAgICAqIC0gU2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcnVuL2RvY3MvY29udGFpbmVyLWNvbnRyYWN0I2Vudi12YXJzIENsb3VkIFJ1biBlbnZpcm9ubWVudCB2YXJpYWJsZXN9LlxuICAgICAqIC0gU2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZnVuY3Rpb25zL2RvY3MvZW52LXZhciBDbG91ZCBGdW5jdGlvbnMgbmV3ZXIgcnVudGltZXN9LlxuICAgICAqL1xuICAgIGNvbnN0IGlzR0ZFbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52LkNMT1VEX1JVTl9KT0IgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuRlVOQ1RJT05fTkFNRSB8fFxuICAgICAgICBwcm9jZXNzLmVudi5LX1NFUlZJQ0U7XG4gICAgcmV0dXJuICEhaXNHRkVudmlyb25tZW50O1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gYSBMaW51eCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgaW5zdGFuY2UuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIExpbnV4IEdDRSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzR29vZ2xlQ29tcHV0ZUVuZ2luZUxpbnV4KCkge1xuICAgIGlmICgoMCwgb3NfMS5wbGF0Zm9ybSkoKSAhPT0gJ2xpbnV4JylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGlzIGZpbGUgZXhpc3RcbiAgICAgICAgKDAsIGZzXzEuc3RhdFN5bmMpKGV4cG9ydHMuR0NFX0xJTlVYX0JJT1NfUEFUSFMuQklPU19EQVRFKTtcbiAgICAgICAgLy8gZW5zdXJlIHRoaXMgZmlsZSBleGlzdCBhbmQgbWF0Y2hlc1xuICAgICAgICBjb25zdCBiaW9zVmVuZG9yID0gKDAsIGZzXzEucmVhZEZpbGVTeW5jKShleHBvcnRzLkdDRV9MSU5VWF9CSU9TX1BBVEhTLkJJT1NfVkVORE9SLCAndXRmOCcpO1xuICAgICAgICByZXR1cm4gL0dvb2dsZS8udGVzdChiaW9zVmVuZG9yKTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBhIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpbnN0YW5jZSB3aXRoIGEga25vd25cbiAqIE1BQyBhZGRyZXNzLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBHQ0UgKGFzIGRldGVybWluZWQgYnkgTUFDIGFkZHJlc3MpLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNHb29nbGVDb21wdXRlRW5naW5lTUFDQWRkcmVzcygpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VzID0gKDAsIG9zXzEubmV0d29ya0ludGVyZmFjZXMpKCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIE9iamVjdC52YWx1ZXMoaW50ZXJmYWNlcykpIHtcbiAgICAgICAgaWYgKCFpdGVtKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgeyBtYWMgfSBvZiBpdGVtKSB7XG4gICAgICAgICAgICBpZiAoR0NFX01BQ19BRERSRVNTX1JFR0VYLnRlc3QobWFjKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIGEgR29vZ2xlIENvbXB1dGUgRW5naW5lIGluc3RhbmNlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBHQ0UsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0dvb2dsZUNvbXB1dGVFbmdpbmUoKSB7XG4gICAgcmV0dXJuIGlzR29vZ2xlQ29tcHV0ZUVuZ2luZUxpbnV4KCkgfHwgaXNHb29nbGVDb21wdXRlRW5naW5lTUFDQWRkcmVzcygpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gR29vZ2xlIENsb3VkIFBsYXRmb3JtLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBHQ1AsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBkZXRlY3RHQ1BSZXNpZGVuY3koKSB7XG4gICAgcmV0dXJuIGlzR29vZ2xlQ2xvdWRTZXJ2ZXJsZXNzKCkgfHwgaXNHb29nbGVDb21wdXRlRW5naW5lKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nY3AtcmVzaWRlbmN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29sb3VycyA9IHZvaWQgMDtcbi8qKlxuICogSGFuZGxlcyBmaWd1cmluZyBvdXQgaWYgd2UgY2FuIHVzZSBBTlNJIGNvbG91cnMgYW5kIGhhbmRpbmcgb3V0IHRoZSBlc2NhcGUgY29kZXMuXG4gKlxuICogVGhpcyBpcyBmb3IgcGFja2FnZS1pbnRlcm5hbCB1c2Ugb25seSwgYW5kIG1heSBjaGFuZ2UgYXQgYW55IHRpbWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBDb2xvdXJzIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBzdHJlYW0gKGUuZy4gcHJvY2Vzcy5zdGRlcnIpXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyZWFtIHNob3VsZCBoYXZlIGNvbG91cml6YXRpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0VuYWJsZWQoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiAoc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICAodHlwZW9mIHN0cmVhbS5nZXRDb2xvckRlcHRoID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBzdHJlYW0uZ2V0Q29sb3JEZXB0aCgpID4gMlxuICAgICAgICAgICAgICAgIDogdHJ1ZSkpO1xuICAgIH1cbiAgICBzdGF0aWMgcmVmcmVzaCgpIHtcbiAgICAgICAgQ29sb3Vycy5lbmFibGVkID0gQ29sb3Vycy5pc0VuYWJsZWQocHJvY2Vzcy5zdGRlcnIpO1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xuICAgICAgICAgICAgQ29sb3Vycy5yZXNldCA9ICcnO1xuICAgICAgICAgICAgQ29sb3Vycy5icmlnaHQgPSAnJztcbiAgICAgICAgICAgIENvbG91cnMuZGltID0gJyc7XG4gICAgICAgICAgICBDb2xvdXJzLnJlZCA9ICcnO1xuICAgICAgICAgICAgQ29sb3Vycy5ncmVlbiA9ICcnO1xuICAgICAgICAgICAgQ29sb3Vycy55ZWxsb3cgPSAnJztcbiAgICAgICAgICAgIENvbG91cnMuYmx1ZSA9ICcnO1xuICAgICAgICAgICAgQ29sb3Vycy5tYWdlbnRhID0gJyc7XG4gICAgICAgICAgICBDb2xvdXJzLmN5YW4gPSAnJztcbiAgICAgICAgICAgIENvbG91cnMud2hpdGUgPSAnJztcbiAgICAgICAgICAgIENvbG91cnMuZ3JleSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgQ29sb3Vycy5yZXNldCA9ICdcXHUwMDFiWzBtJztcbiAgICAgICAgICAgIENvbG91cnMuYnJpZ2h0ID0gJ1xcdTAwMWJbMW0nO1xuICAgICAgICAgICAgQ29sb3Vycy5kaW0gPSAnXFx1MDAxYlsybSc7XG4gICAgICAgICAgICBDb2xvdXJzLnJlZCA9ICdcXHUwMDFiWzMxbSc7XG4gICAgICAgICAgICBDb2xvdXJzLmdyZWVuID0gJ1xcdTAwMWJbMzJtJztcbiAgICAgICAgICAgIENvbG91cnMueWVsbG93ID0gJ1xcdTAwMWJbMzNtJztcbiAgICAgICAgICAgIENvbG91cnMuYmx1ZSA9ICdcXHUwMDFiWzM0bSc7XG4gICAgICAgICAgICBDb2xvdXJzLm1hZ2VudGEgPSAnXFx1MDAxYlszNW0nO1xuICAgICAgICAgICAgQ29sb3Vycy5jeWFuID0gJ1xcdTAwMWJbMzZtJztcbiAgICAgICAgICAgIENvbG91cnMud2hpdGUgPSAnXFx1MDAxYlszN20nO1xuICAgICAgICAgICAgQ29sb3Vycy5ncmV5ID0gJ1xcdTAwMWJbOTBtJztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQ29sb3VycyA9IENvbG91cnM7XG5Db2xvdXJzLmVuYWJsZWQgPSBmYWxzZTtcbkNvbG91cnMucmVzZXQgPSAnJztcbkNvbG91cnMuYnJpZ2h0ID0gJyc7XG5Db2xvdXJzLmRpbSA9ICcnO1xuQ29sb3Vycy5yZWQgPSAnJztcbkNvbG91cnMuZ3JlZW4gPSAnJztcbkNvbG91cnMueWVsbG93ID0gJyc7XG5Db2xvdXJzLmJsdWUgPSAnJztcbkNvbG91cnMubWFnZW50YSA9ICcnO1xuQ29sb3Vycy5jeWFuID0gJyc7XG5Db2xvdXJzLndoaXRlID0gJyc7XG5Db2xvdXJzLmdyZXkgPSAnJztcbkNvbG91cnMucmVmcmVzaCgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29sb3Vycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjEtMjAyNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbnYgPSBleHBvcnRzLkRlYnVnTG9nQmFja2VuZEJhc2UgPSBleHBvcnRzLnBsYWNlaG9sZGVyID0gZXhwb3J0cy5BZGhvY0RlYnVnTG9nZ2VyID0gZXhwb3J0cy5Mb2dTZXZlcml0eSA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0Tm9kZUJhY2tlbmQgPSBnZXROb2RlQmFja2VuZDtcbmV4cG9ydHMuZ2V0RGVidWdCYWNrZW5kID0gZ2V0RGVidWdCYWNrZW5kO1xuZXhwb3J0cy5nZXRTdHJ1Y3R1cmVkQmFja2VuZCA9IGdldFN0cnVjdHVyZWRCYWNrZW5kO1xuZXhwb3J0cy5zZXRCYWNrZW5kID0gc2V0QmFja2VuZDtcbmV4cG9ydHMubG9nID0gbG9nO1xuY29uc3Qgbm9kZV9ldmVudHNfMSA9IHJlcXVpcmUoXCJub2RlOmV2ZW50c1wiKTtcbmNvbnN0IHByb2Nlc3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG5jb25zdCB1dGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnV0aWxcIikpO1xuY29uc3QgY29sb3Vyc18xID0gcmVxdWlyZShcIi4vY29sb3Vyc1wiKTtcbi8vIFNvbWUgZnVuY3Rpb25zIChhcyBub3RlZCkgYXJlIGJhc2VkIG9uIHRoZSBOb2RlIHN0YW5kYXJkIGxpYnJhcnksIGZyb21cbi8vIHRoZSBmb2xsb3dpbmcgZmlsZTpcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9pbnRlcm5hbC91dGlsL2RlYnVnbG9nLmpzXG4vKipcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gYWQtaG9jIGRlYnVnIGxvZ2dlciBmb3IgR29vZ2xlIENsb3VkIFBsYXRmb3JtXG4gKiBjbGllbnQgbGlicmFyaWVzIGluIE5vZGUuIEFuIGFkLWhvYyBkZWJ1ZyBsb2dnZXIgaXMgYSB0b29sIHdoaWNoIGxldHNcbiAqIHVzZXJzIHVzZSBhbiBleHRlcm5hbCwgdW5pZmllZCBpbnRlcmZhY2UgKGluIHRoaXMgY2FzZSwgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcykgdG8gZGV0ZXJtaW5lIHdoYXQgbG9nZ2luZyB0aGV5IHdhbnQgdG8gc2VlIGF0IHJ1bnRpbWUuIFRoaXNcbiAqIGlzbid0IG5lY2Vzc2FyaWx5IGZlZCBpbnRvIHRoZSBjb25zb2xlLCBidXQgaXMgbWVhbnQgdG8gYmUgdW5kZXIgdGhlXG4gKiBjb250cm9sIG9mIHRoZSB1c2VyLiBUaGUga2luZCBvZiBsb2dnaW5nIHRoYXQgd2lsbCBiZSBwcm9kdWNlZCBieSB0aGlzXG4gKiBpcyBtb3JlIGxpa2UgXCJjYWxsIHJldHJ5IGhhcHBlbmVkXCIsIG5vdCBcImV2ZW50IHlvdSdkIHdhbnQgdG8gcmVjb3JkXG4gKiBpbiBDbG91ZCBMb2dnZXJcIi5cbiAqXG4gKiBNb3JlIGZvciBHb29nbGVycyBpbXBsZW1lbnRpbmcgbGlicmFyaWVzIHdpdGggaXQ6XG4gKiBnby9jbG91ZC1jbGllbnQtbG9nZ2luZy1kZXNpZ25cbiAqL1xuLyoqXG4gKiBQb3NzaWJsZSBsb2cgbGV2ZWxzLiBUaGVzZSBhcmUgYSBzdWJzZXQgb2YgQ2xvdWQgT2JzZXJ2YWJpbGl0eSBsZXZlbHMuXG4gKiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vbG9nZ2luZy9kb2NzL3JlZmVyZW5jZS92Mi9yZXN0L3YyL0xvZ0VudHJ5I0xvZ1NldmVyaXR5XG4gKi9cbnZhciBMb2dTZXZlcml0eTtcbihmdW5jdGlvbiAoTG9nU2V2ZXJpdHkpIHtcbiAgICBMb2dTZXZlcml0eVtcIkRFRkFVTFRcIl0gPSBcIkRFRkFVTFRcIjtcbiAgICBMb2dTZXZlcml0eVtcIkRFQlVHXCJdID0gXCJERUJVR1wiO1xuICAgIExvZ1NldmVyaXR5W1wiSU5GT1wiXSA9IFwiSU5GT1wiO1xuICAgIExvZ1NldmVyaXR5W1wiV0FSTklOR1wiXSA9IFwiV0FSTklOR1wiO1xuICAgIExvZ1NldmVyaXR5W1wiRVJST1JcIl0gPSBcIkVSUk9SXCI7XG59KShMb2dTZXZlcml0eSB8fCAoZXhwb3J0cy5Mb2dTZXZlcml0eSA9IExvZ1NldmVyaXR5ID0ge30pKTtcbi8qKlxuICogT3VyIGxvZ2dlciBpbnN0YW5jZS4gVGhpcyBhY3R1YWxseSBjb250YWlucyB0aGUgbWVhdCBvZiBkZWFsaW5nXG4gKiB3aXRoIGxvZyBsaW5lcywgaW5jbHVkaW5nIEV2ZW50RW1pdHRlci4gVGhpcyBjb250YWlucyB0aGUgZnVuY3Rpb25cbiAqIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB1c2VycyBvZiB0aGUgcGFja2FnZS5cbiAqL1xuY2xhc3MgQWRob2NEZWJ1Z0xvZ2dlciBleHRlbmRzIG5vZGVfZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdXBzdHJlYW0gVGhlIGJhY2tlbmQgd2lsbCBwYXNzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gICAgICogICBjYWxsZWQgd2hlbmV2ZXIgb3VyIGxvZ2dlciBmdW5jdGlvbiBpcyBpbnZva2VkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWVzcGFjZSwgdXBzdHJlYW0pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG4gICAgICAgIHRoaXMudXBzdHJlYW0gPSB1cHN0cmVhbTtcbiAgICAgICAgdGhpcy5mdW5jID0gT2JqZWN0LmFzc2lnbih0aGlzLmludm9rZS5iaW5kKHRoaXMpLCB7XG4gICAgICAgICAgICAvLyBBbHNvIGFkZCBhbiBpbnN0YW5jZSBwb2ludGVyIGJhY2sgdG8gdXMuXG4gICAgICAgICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgICAgICAgIC8vIEFuZCBwdWxsIG92ZXIgdGhlIEV2ZW50RW1pdHRlciBmdW5jdGlvbmFsaXR5LlxuICAgICAgICAgICAgb246IChldmVudCwgbGlzdGVuZXIpID0+IHRoaXMub24oZXZlbnQsIGxpc3RlbmVyKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGxvZyBsZXZlbHMuXG4gICAgICAgIHRoaXMuZnVuYy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiB0aGlzLmludm9rZVNldmVyaXR5KExvZ1NldmVyaXR5LkRFQlVHLCAuLi5hcmdzKTtcbiAgICAgICAgdGhpcy5mdW5jLmluZm8gPSAoLi4uYXJncykgPT4gdGhpcy5pbnZva2VTZXZlcml0eShMb2dTZXZlcml0eS5JTkZPLCAuLi5hcmdzKTtcbiAgICAgICAgdGhpcy5mdW5jLndhcm4gPSAoLi4uYXJncykgPT4gdGhpcy5pbnZva2VTZXZlcml0eShMb2dTZXZlcml0eS5XQVJOSU5HLCAuLi5hcmdzKTtcbiAgICAgICAgdGhpcy5mdW5jLmVycm9yID0gKC4uLmFyZ3MpID0+IHRoaXMuaW52b2tlU2V2ZXJpdHkoTG9nU2V2ZXJpdHkuRVJST1IsIC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLmZ1bmMuc3VibG9nID0gKG5hbWVzcGFjZSkgPT4gbG9nKG5hbWVzcGFjZSwgdGhpcy5mdW5jKTtcbiAgICB9XG4gICAgaW52b2tlKGZpZWxkcywgLi4uYXJncykge1xuICAgICAgICAvLyBQdXNoIG91dCBhbnkgdXBzdHJlYW0gbG9nZ2VyIGZpcnN0LlxuICAgICAgICBpZiAodGhpcy51cHN0cmVhbSkge1xuICAgICAgICAgICAgdGhpcy51cHN0cmVhbShmaWVsZHMsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgc2luayBldmVudHMuXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywgZmllbGRzLCBhcmdzKTtcbiAgICB9XG4gICAgaW52b2tlU2V2ZXJpdHkoc2V2ZXJpdHksIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5pbnZva2UoeyBzZXZlcml0eSB9LCAuLi5hcmdzKTtcbiAgICB9XG59XG5leHBvcnRzLkFkaG9jRGVidWdMb2dnZXIgPSBBZGhvY0RlYnVnTG9nZ2VyO1xuLyoqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGEgcmVhbCBsb2dnZXIgd2hpbGUgd2FpdGluZyBmb3IgUHJvbWlzZXMgb3IgZGlzYWJsaW5nIGxvZ2dpbmcuXG4gKi9cbmV4cG9ydHMucGxhY2Vob2xkZXIgPSBuZXcgQWRob2NEZWJ1Z0xvZ2dlcignJywgKCkgPT4geyB9KS5mdW5jO1xuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgZGVidWcgbG9nZ2luZyBiYWNrZW5kcy4gSXQncyBwb3NzaWJsZSB0byB1c2UgdGhpcywgYnV0IHRoZVxuICogc2FtZSBub24tZ3VhcmFudGVlcyBhYm92ZSBzdGlsbCBhcHBseSAodW5zdGFibGUgaW50ZXJmYWNlLCBldGMpLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgRGVidWdMb2dCYWNrZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jYWNoZWQgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlcnNTZXQgPSBmYWxzZTtcbiAgICAgICAgLy8gTG9vayBmb3IgdGhlIE5vZGUgY29uZmlnIHZhcmlhYmxlIGZvciB3aGF0IHN5c3RlbXMgdG8gZW5hYmxlLiBXZSdsbCBzdG9yZVxuICAgICAgICAvLyB0aGVzZSBmb3IgdGhlIGxvZyBtZXRob2QgYmVsb3csIHdoaWNoIHdpbGwgY2FsbCBzZXRGaWx0ZXJzKCkgb25jZS5cbiAgICAgICAgbGV0IG5vZGVGbGFnID0gKF9hID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5lbnYubm9kZUVuYWJsZXNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnKic7XG4gICAgICAgIGlmIChub2RlRmxhZyA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIG5vZGVGbGFnID0gJyonO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IG5vZGVGbGFnLnNwbGl0KCcsJyk7XG4gICAgfVxuICAgIGxvZyhuYW1lc3BhY2UsIGZpZWxkcywgLi4uYXJncykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlcnNTZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNTZXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxvZ2dlciA9IHRoaXMuY2FjaGVkLmdldChuYW1lc3BhY2UpO1xuICAgICAgICAgICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIgPSB0aGlzLm1ha2VMb2dnZXIobmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZC5zZXQobmFtZXNwYWNlLCBsb2dnZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nZ2VyKGZpZWxkcywgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBhbGwgZXJyb3JzOyB3ZSBkb24ndCB3YW50IHRoZW0gdG8gaW50ZXJmZXJlIHdpdGhcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyJ3MgcnVubmluZyBhcHAuXG4gICAgICAgICAgICAvLyBlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuRGVidWdMb2dCYWNrZW5kQmFzZSA9IERlYnVnTG9nQmFja2VuZEJhc2U7XG4vLyBUaGUgYmFzaWMgYmFja2VuZC4gVGhpcyBvbmUgZGVmaW5pdGVseSB3b3JrcywgYnV0IGl0J3MgbGVzcyBmZWF0dXJlLWZpbGxlZC5cbi8vXG4vLyBSYXRoZXIgdGhhbiB1c2luZyB1dGlsLmRlYnVnbG9nLCB0aGlzIGltcGxlbWVudHMgdGhlIHNhbWUgYmFzaWMgbG9naWMgZGlyZWN0bHkuXG4vLyBUaGUgcmVhc29uIGZvciB0aGlzIGRlY2lzaW9uIGlzIHRoYXQgZGVidWdsb2cgY2hlY2tzIHRoZSB2YWx1ZSBvZiB0aGVcbi8vIE5PREVfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIGFueSB1c2VyIGNvZGUgcnVuczsgd2UgdGhlcmVmb3JlXG4vLyBjYW4ndCBwaXBlIG91ciBvd24gZW5hYmxlcyBpbnRvIGl0IChhbmQgdXRpbC5kZWJ1Z2xvZyB3aWxsIG5ldmVyIHByaW50IHVubGVzc1xuLy8gdGhlIHVzZXIgZHVwbGljYXRlcyBpdCBpbnRvIE5PREVfREVCVUcsIHdoaWNoIGlzbid0IHJlYXNvbmFibGUpLlxuLy9cbmNsYXNzIE5vZGVCYWNrZW5kIGV4dGVuZHMgRGVidWdMb2dCYWNrZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIERlZmF1bHQgdG8gYWxsb3dpbmcgYWxsIHN5c3RlbXMsIHNpbmNlIHdlIGdhdGUgZWFybGllciBiYXNlZCBvbiB3aGV0aGVyIHRoZVxuICAgICAgICAvLyB2YXJpYWJsZSBpcyBlbXB0eS5cbiAgICAgICAgdGhpcy5lbmFibGVkUmVnZXhwID0gLy4qL2c7XG4gICAgfVxuICAgIGlzRW5hYmxlZChuYW1lc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlZFJlZ2V4cC50ZXN0KG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIG1ha2VMb2dnZXIobmFtZXNwYWNlKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkUmVnZXhwLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHsgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGZpZWxkcywgLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgLy8gVE9ETzogYGZpZWxkc2AgbmVlZHMgdG8gYmUgdHVybmVkIGludG8gYSBzdHJpbmcgaGVyZSwgb25lIHdheSBvciBhbm90aGVyLlxuICAgICAgICAgICAgY29uc3QgbnNjb2xvdXIgPSBgJHtjb2xvdXJzXzEuQ29sb3Vycy5ncmVlbn0ke25hbWVzcGFjZX0ke2NvbG91cnNfMS5Db2xvdXJzLnJlc2V0fWA7XG4gICAgICAgICAgICBjb25zdCBwaWQgPSBgJHtjb2xvdXJzXzEuQ29sb3Vycy55ZWxsb3d9JHtwcm9jZXNzLnBpZH0ke2NvbG91cnNfMS5Db2xvdXJzLnJlc2V0fWA7XG4gICAgICAgICAgICBsZXQgbGV2ZWw7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkcy5zZXZlcml0eSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTG9nU2V2ZXJpdHkuRVJST1I6XG4gICAgICAgICAgICAgICAgICAgIGxldmVsID0gYCR7Y29sb3Vyc18xLkNvbG91cnMucmVkfSR7ZmllbGRzLnNldmVyaXR5fSR7Y29sb3Vyc18xLkNvbG91cnMucmVzZXR9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMb2dTZXZlcml0eS5JTkZPOlxuICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGAke2NvbG91cnNfMS5Db2xvdXJzLm1hZ2VudGF9JHtmaWVsZHMuc2V2ZXJpdHl9JHtjb2xvdXJzXzEuQ29sb3Vycy5yZXNldH1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExvZ1NldmVyaXR5LldBUk5JTkc6XG4gICAgICAgICAgICAgICAgICAgIGxldmVsID0gYCR7Y29sb3Vyc18xLkNvbG91cnMueWVsbG93fSR7ZmllbGRzLnNldmVyaXR5fSR7Y29sb3Vyc18xLkNvbG91cnMucmVzZXR9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAoX2EgPSBmaWVsZHMuc2V2ZXJpdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IExvZ1NldmVyaXR5LkRFRkFVTFQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbXNnID0gdXRpbC5mb3JtYXRXaXRoT3B0aW9ucyh7IGNvbG9yczogY29sb3Vyc18xLkNvbG91cnMuZW5hYmxlZCB9LCAuLi5hcmdzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzID0gT2JqZWN0LmFzc2lnbih7fSwgZmllbGRzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJlZEZpZWxkcy5zZXZlcml0eTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0pzb24gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmaWx0ZXJlZEZpZWxkcykubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShmaWx0ZXJlZEZpZWxkcylcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRzQ29sb3VyID0gZmllbGRzSnNvblxuICAgICAgICAgICAgICAgID8gYCR7Y29sb3Vyc18xLkNvbG91cnMuZ3JleX0ke2ZpZWxkc0pzb259JHtjb2xvdXJzXzEuQ29sb3Vycy5yZXNldH1gXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzIFslc3wlc10gJXMlcycsIHBpZCwgbnNjb2xvdXIsIGxldmVsLCBtc2csIGZpZWxkc0pzb24gPyBgICR7ZmllbGRzQ29sb3VyfWAgOiAnJyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFJlZ2V4cCBwYXR0ZXJucyBiZWxvdyBhcmUgZnJvbSBoZXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2MwYWViZWQ0YjMzOTViZDY1ZDU0YjE4ZDFmZDAwZjA3MTAwMmFjMjAvbGliL2ludGVybmFsL3V0aWwvZGVidWdsb2cuanMjTDM2XG4gICAgc2V0RmlsdGVycygpIHtcbiAgICAgICAgY29uc3QgdG90YWxGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLmpvaW4oJywnKTtcbiAgICAgICAgY29uc3QgcmVnZXhwID0gdG90YWxGaWx0ZXJzXG4gICAgICAgICAgICAucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZywgJ1xcXFwkJicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwqL2csICcuKicpXG4gICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAnJHxeJyk7XG4gICAgICAgIHRoaXMuZW5hYmxlZFJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3JlZ2V4cH0kYCwgJ2knKTtcbiAgICB9XG59XG4vKipcbiAqIEByZXR1cm5zIEEgYmFja2VuZCBiYXNlZCBvbiBOb2RlIHV0aWwuZGVidWdsb2c7IHRoaXMgaXMgdGhlIGRlZmF1bHQuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVCYWNrZW5kKCkge1xuICAgIHJldHVybiBuZXcgTm9kZUJhY2tlbmQoKTtcbn1cbmNsYXNzIERlYnVnQmFja2VuZCBleHRlbmRzIERlYnVnTG9nQmFja2VuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHBrZykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRlYnVnUGtnID0gcGtnO1xuICAgIH1cbiAgICBtYWtlTG9nZ2VyKG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBkZWJ1Z0xvZ2dlciA9IHRoaXMuZGVidWdQa2cobmFtZXNwYWNlKTtcbiAgICAgICAgcmV0dXJuIChmaWVsZHMsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE86IGBmaWVsZHNgIG5lZWRzIHRvIGJlIHR1cm5lZCBpbnRvIGEgc3RyaW5nIGhlcmUuXG4gICAgICAgICAgICBkZWJ1Z0xvZ2dlcihhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0RmlsdGVycygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBleGlzdGluZ0ZpbHRlcnMgPSAoX2EgPSBwcm9jZXNzLmVudlsnTk9ERV9ERUJVRyddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ05PREVfREVCVUcnXSA9IGAke2V4aXN0aW5nRmlsdGVyc30ke2V4aXN0aW5nRmlsdGVycyA/ICcsJyA6ICcnfSR7dGhpcy5maWx0ZXJzLmpvaW4oJywnKX1gO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIFwiZGVidWdcIiBwYWNrYWdlIGJhY2tlbmQuIFRoZSB1c2VyIG11c3QgY2FsbCByZXF1aXJlKCdkZWJ1ZycpIGFuZCBwYXNzXG4gKiB0aGUgcmVzdWx0aW5nIG9iamVjdCB0byB0aGlzIGZ1bmN0aW9uLlxuICpcbiAqIGBgYFxuICogIHNldEJhY2tlbmQoZ2V0RGVidWdCYWNrZW5kKHJlcXVpcmUoJ2RlYnVnJykpKVxuICogYGBgXG4gKlxuICogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZGVidWdcbiAqXG4gKiBOb3RlOiBHb29nbGUgZG9lcyBub3QgZXhwbGljaXRseSBlbmRvcnNlIG9yIHJlY29tbWVuZCB0aGlzIHBhY2thZ2U7IGl0J3MganVzdFxuICogYmVpbmcgcHJvdmlkZWQgYXMgYW4gb3B0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgYmFja2VuZCBiYXNlZCBvbiB0aGUgbnBtIFwiZGVidWdcIiBwYWNrYWdlLlxuICovXG5mdW5jdGlvbiBnZXREZWJ1Z0JhY2tlbmQoZGVidWdQa2cpIHtcbiAgICByZXR1cm4gbmV3IERlYnVnQmFja2VuZChkZWJ1Z1BrZyk7XG59XG4vKipcbiAqIFRoaXMgcHJldHR5IG11Y2ggd29ya3MgbGlrZSB0aGUgTm9kZSBsb2dnZXIsIGJ1dCBpdCBvdXRwdXRzIHN0cnVjdHVyZWRcbiAqIGxvZ2dpbmcgSlNPTiBtYXRjaGluZyBHb29nbGUgQ2xvdWQncyBpbmdlc3Rpb24gc3BlY3MuIFJhdGhlciB0aGFuIGhhbmRsaW5nXG4gKiBpdHMgb3duIG91dHB1dCwgaXQgd3JhcHMgYW5vdGhlciBiYWNrZW5kLiBUaGUgcGFzc2VkIGJhY2tlbmQgbXVzdCBiZSBhIHN1YmNsYXNzXG4gKiBvZiBgRGVidWdMb2dCYWNrZW5kQmFzZWAgKGFueSBvZiB0aGUgYmFja2VuZHMgZXhwb3NlZCBieSB0aGlzIHBhY2thZ2Ugd2lsbCB3b3JrKS5cbiAqL1xuY2xhc3MgU3RydWN0dXJlZEJhY2tlbmQgZXh0ZW5kcyBEZWJ1Z0xvZ0JhY2tlbmRCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcih1cHN0cmVhbSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudXBzdHJlYW0gPSAoX2EgPSB1cHN0cmVhbSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IE5vZGVCYWNrZW5kKCk7XG4gICAgfVxuICAgIG1ha2VMb2dnZXIobmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IGRlYnVnTG9nZ2VyID0gdGhpcy51cHN0cmVhbS5tYWtlTG9nZ2VyKG5hbWVzcGFjZSk7XG4gICAgICAgIHJldHVybiAoZmllbGRzLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBzZXZlcml0eSA9IChfYSA9IGZpZWxkcy5zZXZlcml0eSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTG9nU2V2ZXJpdHkuSU5GTztcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBzZXZlcml0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB1dGlsLmZvcm1hdCguLi5hcmdzKSxcbiAgICAgICAgICAgIH0sIGZpZWxkcyk7XG4gICAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gICAgICAgICAgICBkZWJ1Z0xvZ2dlcihmaWVsZHMsIGpzb25TdHJpbmcpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzZXRGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnVwc3RyZWFtLnNldEZpbHRlcnMoKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBcInN0cnVjdHVyZWQgbG9nZ2luZ1wiIGJhY2tlbmQuIFRoaXMgcHJldHR5IG11Y2ggd29ya3MgbGlrZSB0aGVcbiAqIE5vZGUgbG9nZ2VyLCBidXQgaXQgb3V0cHV0cyBzdHJ1Y3R1cmVkIGxvZ2dpbmcgSlNPTiBtYXRjaGluZyBHb29nbGVcbiAqIENsb3VkJ3MgaW5nZXN0aW9uIHNwZWNzIGluc3RlYWQgb2YgcGxhaW4gdGV4dC5cbiAqXG4gKiBgYGBcbiAqICBzZXRCYWNrZW5kKGdldFN0cnVjdHVyZWRCYWNrZW5kKCkpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXBzdHJlYW0gSWYgeW91IHdhbnQgdG8gdXNlIHNvbWV0aGluZyBiZXNpZGVzIHRoZSBOb2RlIGJhY2tlbmQgdG9cbiAqICAgd3JpdGUgdGhlIGFjdHVhbCBsb2cgbGluZXMgaW50bywgcGFzcyB0aGF0IGhlcmUuXG4gKiBAcmV0dXJucyBBIGJhY2tlbmQgYmFzZWQgb24gR29vZ2xlIENsb3VkIHN0cnVjdHVyZWQgbG9nZ2luZy5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RydWN0dXJlZEJhY2tlbmQodXBzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRCYWNrZW5kKHVwc3RyZWFtKTtcbn1cbi8qKlxuICogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdlIHN0YW5kYXJkaXplZCBvbiwgZm9yIGFsbCBhZC1ob2MgbG9nZ2luZy5cbiAqL1xuZXhwb3J0cy5lbnYgPSB7XG4gICAgLyoqXG4gICAgICogRmlsdGVyIHdpbGRjYXJkcyBzcGVjaWZpYyB0byB0aGUgTm9kZSBzeW50YXgsIGFuZCBzaW1pbGFyIHRvIHRoZSBidWlsdC1pblxuICAgICAqIHV0aWxzLmRlYnVnbG9nKCkgZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIG1pc3NpbmcsIGRpc2FibGVzIGxvZ2dpbmcuXG4gICAgICovXG4gICAgbm9kZUVuYWJsZXM6ICdHT09HTEVfU0RLX05PREVfTE9HR0lORycsXG59O1xuLy8gS2VlcCBhIGNvcHkgb2YgYWxsIG5hbWVzcGFjZWQgbG9nZ2VycyBzbyB1c2VycyBjYW4gcmVsaWFibHkgLm9uKCkgdGhlbS5cbi8vIE5vdGUgdGhhdCB0aGVzZSBjYWNoZWQgZnVuY3Rpb25zIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggY2hhbmdlcyBpbiB0aGUgYmFja2VuZC5cbmNvbnN0IGxvZ2dlckNhY2hlID0gbmV3IE1hcCgpO1xuLy8gT3VyIGN1cnJlbnQgZ2xvYmFsIGJhY2tlbmQuIFRoaXMgbWlnaHQgYmU6XG5sZXQgY2FjaGVkQmFja2VuZCA9IHVuZGVmaW5lZDtcbi8qKlxuICogU2V0IHRoZSBiYWNrZW5kIHRvIHVzZSBmb3Igb3VyIGxvZyBvdXRwdXQuXG4gKiAtIEEgYmFja2VuZCBvYmplY3RcbiAqIC0gbnVsbCB0byBkaXNhYmxlIGxvZ2dpbmdcbiAqIC0gdW5kZWZpbmVkIGZvciBcIm5vdGhpbmcgeWV0XCIsIGRlZmF1bHRzIHRvIHRoZSBOb2RlIGJhY2tlbmRcbiAqXG4gKiBAcGFyYW0gYmFja2VuZCBSZXN1bHRzIGZyb20gb25lIG9mIHRoZSBnZXQqQmFja2VuZCgpIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2V0QmFja2VuZChiYWNrZW5kKSB7XG4gICAgY2FjaGVkQmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgbG9nZ2VyQ2FjaGUuY2xlYXIoKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGxvZ2dpbmcgZnVuY3Rpb24uIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgd2l0aCB0aGUgc2FtZSBuYW1lc3BhY2VcbiAqIHdpbGwgcHJvZHVjZSB0aGUgc2FtZSBsb2dnZXIsIHdpdGggdGhlIHNhbWUgZXZlbnQgZW1pdHRlciBob29rcy5cbiAqXG4gKiBOYW1lc3BhY2VzIGNhbiBiZSBhIHNpbXBsZSBzdHJpbmcgKFwic3lzdGVtXCIgbmFtZSksIG9yIGEgcXVhbGlmaWVkIHN0cmluZ1xuICogKHN5c3RlbTpzdWJzeXN0ZW0pLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZmlsdGVyaW5nLCBvciBmb3IgXCJzeXN0ZW06KlwiLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSwgYSBkZXNjcmlwdGl2ZSB0ZXh0IHN0cmluZy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24geW91IGNhbiBjYWxsIHRoYXQgd29ya3Mgc2ltaWxhciB0byBjb25zb2xlLmxvZygpLlxuICovXG5mdW5jdGlvbiBsb2cobmFtZXNwYWNlLCBwYXJlbnQpIHtcbiAgICAvLyBJZiB0aGUgZW5hYmxlIGZsYWcgaXNuJ3Qgc2V0LCBkbyBub3RoaW5nLlxuICAgIGNvbnN0IGVuYWJsZXNGbGFnID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5lbnYubm9kZUVuYWJsZXNdO1xuICAgIGlmICghZW5hYmxlc0ZsYWcpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucGxhY2Vob2xkZXI7XG4gICAgfVxuICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIG1vc3RseSBpZiB0aGUgdHlwaW5ncyBhcmUgZHJvcHBlZCBpbiBhIHVzZXIncyBjb2RlLFxuICAgIC8vIG9yIGlmIHRoZXkncmUgY2FsbGluZyBmcm9tIEphdmFTY3JpcHQuXG4gICAgaWYgKCFuYW1lc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucGxhY2Vob2xkZXI7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBzdWItbG9nZ2Vycy5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIG5hbWVzcGFjZSA9IGAke3BhcmVudC5pbnN0YW5jZS5uYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWA7XG4gICAgfVxuICAgIC8vIFJldXNlIGxvZ2dlcnMgc28gdGhpbmdzIGxpa2UgZXZlbnQgc2lua3MgYXJlIHBlcnNpc3RlbnQuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBsb2dnZXJDYWNoZS5nZXQobmFtZXNwYWNlKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nLmZ1bmM7XG4gICAgfVxuICAgIC8vIERvIHdlIGhhdmUgYSBiYWNrZW5kIHlldD9cbiAgICBpZiAoY2FjaGVkQmFja2VuZCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFeHBsaWNpdGx5IGRpc2FibGVkLlxuICAgICAgICByZXR1cm4gZXhwb3J0cy5wbGFjZWhvbGRlcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2FjaGVkQmFja2VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE9uZSBoYXNuJ3QgYmVlbiBtYWRlIHlldCwgc28gZGVmYXVsdCB0byBOb2RlLlxuICAgICAgICBjYWNoZWRCYWNrZW5kID0gZ2V0Tm9kZUJhY2tlbmQoKTtcbiAgICB9XG4gICAgLy8gVGhlIGxvZ2dlciBpcyBmdXJ0aGVyIHdyYXBwZWQgc28gd2UgY2FuIGhhbmRsZSB0aGUgYmFja2VuZCBjaGFuZ2luZyBvdXQuXG4gICAgY29uc3QgbG9nZ2VyID0gKCgpID0+IHtcbiAgICAgICAgbGV0IHByZXZpb3VzQmFja2VuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV3TG9nZ2VyID0gbmV3IEFkaG9jRGVidWdMb2dnZXIobmFtZXNwYWNlLCAoZmllbGRzLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNCYWNrZW5kICE9PSBjYWNoZWRCYWNrZW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gRGlkIHRoZSB1c2VyIHBhc3MgYSBjdXN0b20gYmFja2VuZD9cbiAgICAgICAgICAgICAgICBpZiAoY2FjaGVkQmFja2VuZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBsaWNpdGx5IGRpc2FibGVkLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhY2hlZEJhY2tlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmUgaGFzbid0IGJlZW4gbWFkZSB5ZXQsIHNvIGRlZmF1bHQgdG8gTm9kZS5cbiAgICAgICAgICAgICAgICAgICAgY2FjaGVkQmFja2VuZCA9IGdldE5vZGVCYWNrZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXZpb3VzQmFja2VuZCA9IGNhY2hlZEJhY2tlbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZWRCYWNrZW5kID09PSBudWxsIHx8IGNhY2hlZEJhY2tlbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhY2hlZEJhY2tlbmQubG9nKG5hbWVzcGFjZSwgZmllbGRzLCAuLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdMb2dnZXI7XG4gICAgfSkoKTtcbiAgICBsb2dnZXJDYWNoZS5zZXQobmFtZXNwYWNlLCBsb2dnZXIpO1xuICAgIHJldHVybiBsb2dnZXIuZnVuYztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dpbmctdXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbG9nZ2luZy11dGlsc1wiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdjcFJlc2lkZW5jeUNhY2hlID0gZXhwb3J0cy5NRVRBREFUQV9TRVJWRVJfREVURUNUSU9OID0gZXhwb3J0cy5IRUFERVJTID0gZXhwb3J0cy5IRUFERVJfVkFMVUUgPSBleHBvcnRzLkhFQURFUl9OQU1FID0gZXhwb3J0cy5TRUNPTkRBUllfSE9TVF9BRERSRVNTID0gZXhwb3J0cy5IT1NUX0FERFJFU1MgPSBleHBvcnRzLkJBU0VfUEFUSCA9IHZvaWQgMDtcbmV4cG9ydHMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbmV4cG9ydHMucHJvamVjdCA9IHByb2plY3Q7XG5leHBvcnRzLnVuaXZlcnNlID0gdW5pdmVyc2U7XG5leHBvcnRzLmJ1bGsgPSBidWxrO1xuZXhwb3J0cy5pc0F2YWlsYWJsZSA9IGlzQXZhaWxhYmxlO1xuZXhwb3J0cy5yZXNldElzQXZhaWxhYmxlQ2FjaGUgPSByZXNldElzQXZhaWxhYmxlQ2FjaGU7XG5leHBvcnRzLmdldEdDUFJlc2lkZW5jeSA9IGdldEdDUFJlc2lkZW5jeTtcbmV4cG9ydHMuc2V0R0NQUmVzaWRlbmN5ID0gc2V0R0NQUmVzaWRlbmN5O1xuZXhwb3J0cy5yZXF1ZXN0VGltZW91dCA9IHJlcXVlc3RUaW1lb3V0O1xuY29uc3QgZ2F4aW9zXzEgPSByZXF1aXJlKFwiZ2F4aW9zXCIpO1xuY29uc3QganNvbkJpZ2ludCA9IHJlcXVpcmUoXCJqc29uLWJpZ2ludFwiKTtcbmNvbnN0IGdjcF9yZXNpZGVuY3lfMSA9IHJlcXVpcmUoXCIuL2djcC1yZXNpZGVuY3lcIik7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKFwiZ29vZ2xlLWxvZ2dpbmctdXRpbHNcIik7XG5leHBvcnRzLkJBU0VfUEFUSCA9ICcvY29tcHV0ZU1ldGFkYXRhL3YxJztcbmV4cG9ydHMuSE9TVF9BRERSRVNTID0gJ2h0dHA6Ly8xNjkuMjU0LjE2OS4yNTQnO1xuZXhwb3J0cy5TRUNPTkRBUllfSE9TVF9BRERSRVNTID0gJ2h0dHA6Ly9tZXRhZGF0YS5nb29nbGUuaW50ZXJuYWwuJztcbmV4cG9ydHMuSEVBREVSX05BTUUgPSAnTWV0YWRhdGEtRmxhdm9yJztcbmV4cG9ydHMuSEVBREVSX1ZBTFVFID0gJ0dvb2dsZSc7XG5leHBvcnRzLkhFQURFUlMgPSBPYmplY3QuZnJlZXplKHsgW2V4cG9ydHMuSEVBREVSX05BTUVdOiBleHBvcnRzLkhFQURFUl9WQUxVRSB9KTtcbmNvbnN0IGxvZyA9IGxvZ2dlci5sb2coJ2djcCBtZXRhZGF0YScpO1xuLyoqXG4gKiBNZXRhZGF0YSBzZXJ2ZXIgZGV0ZWN0aW9uIG92ZXJyaWRlIG9wdGlvbnMuXG4gKlxuICogQXZhaWxhYmxlIHZpYSBgcHJvY2Vzcy5lbnYuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTmAuXG4gKi9cbmV4cG9ydHMuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgICdhc3N1bWUtcHJlc2VudCc6IFwiZG9uJ3QgdHJ5IHRvIHBpbmcgdGhlIG1ldGFkYXRhIHNlcnZlciwgYnV0IGFzc3VtZSBpdCdzIHByZXNlbnRcIixcbiAgICBub25lOiBcImRvbid0IHRyeSB0byBwaW5nIHRoZSBtZXRhZGF0YSBzZXJ2ZXIsIGJ1dCBkb24ndCB0cnkgdG8gdXNlIGl0IGVpdGhlclwiLFxuICAgICdiaW9zLW9ubHknOiBcInRyZWF0IHRoZSByZXN1bHQgb2YgYSBCSU9TIHByb2JlIGFzIGNhbm9uaWNhbCAoZG9uJ3QgZmFsbCBiYWNrIHRvIHBpbmdpbmcpXCIsXG4gICAgJ3Bpbmctb25seSc6ICdza2lwIHRoZSBCSU9TIHByb2JlLCBhbmQgZ28gc3RyYWlnaHQgdG8gcGluZ2luZycsXG59KTtcbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSBVUkwgd2hpbGUgdGFraW5nIGludG8gYWNjb3VudCB0aGUgR0NFX01FVEFEQVRBX0hPU1RcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYmFzZSBVUkwsIGUuZy4sIGh0dHA6Ly8xNjkuMjU0LjE2OS4yNTQvY29tcHV0ZU1ldGFkYXRhL3YxLlxuICovXG5mdW5jdGlvbiBnZXRCYXNlVXJsKGJhc2VVcmwpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgYmFzZVVybCA9XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5HQ0VfTUVUQURBVEFfSVAgfHxcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5HQ0VfTUVUQURBVEFfSE9TVCB8fFxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSE9TVF9BRERSRVNTO1xuICAgIH1cbiAgICAvLyBJZiBubyBzY2hlbWUgaXMgcHJvdmlkZWQgZGVmYXVsdCB0byBIVFRQOlxuICAgIGlmICghL15odHRwcz86XFwvXFwvLy50ZXN0KGJhc2VVcmwpKSB7XG4gICAgICAgIGJhc2VVcmwgPSBgaHR0cDovLyR7YmFzZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVSTChleHBvcnRzLkJBU0VfUEFUSCwgYmFzZVVybCkuaHJlZjtcbn1cbi8vIEFjY2VwdHMgYW4gb3B0aW9ucyBvYmplY3QgcGFzc2VkIGZyb20gdGhlIHVzZXIgdG8gdGhlIEFQSS4gSW4gcHJldmlvdXNcbi8vIHZlcnNpb25zIG9mIHRoZSBBUEksIGl0IHJlZmVycmVkIHRvIGEgYFJlcXVlc3RgIG9yIGFuIGBBeGlvc2AgcmVxdWVzdFxuLy8gb3B0aW9ucyBvYmplY3QuICBOb3cgaXQgcmVmZXJzIHRvIGFuIG9iamVjdCB3aXRoIHZlcnkgbGltaXRlZCBwcm9wZXJ0eVxuLy8gbmFtZXMuIFRoaXMgaXMgaGVyZSB0byBoZWxwIGVuc3VyZSB1c2VycyBkb24ndCBwYXNzIGludmFsaWQgb3B0aW9ucyB3aGVuXG4vLyB0aGV5ICB1cGdyYWRlIGZyb20gMC40IHRvIDAuNSB0byAwLjguXG5mdW5jdGlvbiB2YWxpZGF0ZShvcHRpb25zKSB7XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncGFyYW1zJzpcbiAgICAgICAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgICAgIGNhc2UgJ2hlYWRlcnMnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXMnOlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIidxcycgaXMgbm90IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIFBsZWFzZSB1c2UgJ3BhcmFtcycgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7a2V5fScgaXMgbm90IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG1ldGFkYXRhQWNjZXNzb3IodHlwZSwgb3B0aW9ucyA9IHt9LCBub1Jlc3BvbnNlUmV0cmllcyA9IDMsIGZhc3RGYWlsID0gZmFsc2UpIHtcbiAgICBsZXQgbWV0YWRhdGFLZXkgPSAnJztcbiAgICBsZXQgcGFyYW1zID0ge307XG4gICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQWNjZXNzb3IgPSB0eXBlO1xuICAgICAgICBtZXRhZGF0YUtleSA9IG1ldGFkYXRhQWNjZXNzb3IubWV0YWRhdGFLZXk7XG4gICAgICAgIHBhcmFtcyA9IG1ldGFkYXRhQWNjZXNzb3IucGFyYW1zIHx8IHBhcmFtcztcbiAgICAgICAgaGVhZGVycyA9IG1ldGFkYXRhQWNjZXNzb3IuaGVhZGVycyB8fCBoZWFkZXJzO1xuICAgICAgICBub1Jlc3BvbnNlUmV0cmllcyA9IG1ldGFkYXRhQWNjZXNzb3Iubm9SZXNwb25zZVJldHJpZXMgfHwgbm9SZXNwb25zZVJldHJpZXM7XG4gICAgICAgIGZhc3RGYWlsID0gbWV0YWRhdGFBY2Nlc3Nvci5mYXN0RmFpbCB8fCBmYXN0RmFpbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG1ldGFkYXRhS2V5ID0gdHlwZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICBtZXRhZGF0YUtleSArPSBgLyR7b3B0aW9uc31gO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFsaWRhdGUob3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLnByb3BlcnR5KSB7XG4gICAgICAgICAgICBtZXRhZGF0YUtleSArPSBgLyR7b3B0aW9ucy5wcm9wZXJ0eX1gO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwgaGVhZGVycztcbiAgICAgICAgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXMgfHwgcGFyYW1zO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0TWV0aG9kID0gZmFzdEZhaWwgPyBmYXN0RmFpbE1ldGFkYXRhUmVxdWVzdCA6IGdheGlvc18xLnJlcXVlc3Q7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgICB1cmw6IGAke2dldEJhc2VVcmwoKX0vJHttZXRhZGF0YUtleX1gLFxuICAgICAgICBoZWFkZXJzOiB7IC4uLmV4cG9ydHMuSEVBREVSUywgLi4uaGVhZGVycyB9LFxuICAgICAgICByZXRyeUNvbmZpZzogeyBub1Jlc3BvbnNlUmV0cmllcyB9LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICB0aW1lb3V0OiByZXF1ZXN0VGltZW91dCgpLFxuICAgIH07XG4gICAgbG9nLmluZm8oJ2luc3RhbmNlIHJlcXVlc3QgJWonLCByZXEpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlcXVlc3RNZXRob2QocmVxKTtcbiAgICBsb2cuaW5mbygnaW5zdGFuY2UgbWV0YWRhdGEgaXMgJXMnLCByZXMuZGF0YSk7XG4gICAgLy8gTk9URTogbm9kZS5qcyBjb252ZXJ0cyBhbGwgaW5jb21pbmcgaGVhZGVycyB0byBsb3dlciBjYXNlLlxuICAgIGlmIChyZXMuaGVhZGVyc1tleHBvcnRzLkhFQURFUl9OQU1FLnRvTG93ZXJDYXNlKCldICE9PSBleHBvcnRzLkhFQURFUl9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBtZXRhZGF0YSBzZXJ2aWNlOiBpbmNvcnJlY3QgJHtleHBvcnRzLkhFQURFUl9OQU1FfSBoZWFkZXIuIEV4cGVjdGVkICcke2V4cG9ydHMuSEVBREVSX1ZBTFVFfScsIGdvdCAke3Jlcy5oZWFkZXJzW2V4cG9ydHMuSEVBREVSX05BTUUudG9Mb3dlckNhc2UoKV0gPyBgJyR7cmVzLmhlYWRlcnNbZXhwb3J0cy5IRUFERVJfTkFNRS50b0xvd2VyQ2FzZSgpXX0nYCA6ICdubyBoZWFkZXInfWApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb25CaWdpbnQucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcy5kYXRhO1xufVxuYXN5bmMgZnVuY3Rpb24gZmFzdEZhaWxNZXRhZGF0YVJlcXVlc3Qob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBzZWNvbmRhcnlPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB1cmw6IChfYSA9IG9wdGlvbnMudXJsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKS5yZXBsYWNlKGdldEJhc2VVcmwoKSwgZ2V0QmFzZVVybChleHBvcnRzLlNFQ09OREFSWV9IT1NUX0FERFJFU1MpKSxcbiAgICB9O1xuICAgIC8vIFdlIHJhY2UgYSBjb25uZWN0aW9uIGJldHdlZW4gRE5TL0lQIHRvIG1ldGFkYXRhIHNlcnZlci4gVGhlcmUgYXJlIGEgY291cGxlXG4gICAgLy8gcmVhc29ucyBmb3IgdGhpczpcbiAgICAvL1xuICAgIC8vIDEuIHRoZSBETlMgaXMgc2xvdyBpbiBzb21lIEdDUCBlbnZpcm9ubWVudHM7IGJ5IGNoZWNraW5nIGJvdGgsIHdlIG1pZ2h0XG4gICAgLy8gICAgZGV0ZWN0IHRoZSBydW50aW1lIGVudmlyb25tZW50IHNpZ25maWNhbnRseSBmYXN0ZXIuXG4gICAgLy8gMi4gd2UgY2FuJ3QganVzdCBjaGVjayB0aGUgSVAsIHdoaWNoIGlzIHRhcnBpdHRlZCBhbmQgc2xvdyB0byByZXNwb25kXG4gICAgLy8gICAgb24gYSB1c2VyJ3MgbG9jYWwgbWFjaGluZS5cbiAgICAvL1xuICAgIC8vIEFkZGl0aW9uYWwgbG9naWMgaGFzIGJlZW4gYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgY3JlYXRlIGFuXG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbiBpbiBzY2VuYXJpb3Mgd2hlcmUgYSBmYWlsdXJlIGhhcHBlbnMgc29tZXRpbWVcbiAgICAvLyBhZnRlciBhIHN1Y2Nlc3MuXG4gICAgLy9cbiAgICAvLyBOb3RlLCBob3dldmVyLCBpZiBhIGZhaWx1cmUgaGFwcGVucyBwcmlvciB0byBhIHN1Y2Nlc3MsIGEgcmVqZWN0aW9uIHNob3VsZFxuICAgIC8vIG9jY3VyLCB0aGlzIGlzIGZvciBmb2xrcyBydW5uaW5nIGxvY2FsbHkuXG4gICAgLy9cbiAgICBsZXQgcmVzcG9uZGVkID0gZmFsc2U7XG4gICAgY29uc3QgcjEgPSAoMCwgZ2F4aW9zXzEucmVxdWVzdCkob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgcmVzcG9uZGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbmRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHIyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHIyID0gKDAsIGdheGlvc18xLnJlcXVlc3QpKHNlY29uZGFyeU9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHJlc3BvbmRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGlmIChyZXNwb25kZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbmRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtyMSwgcjJdKTtcbn1cbi8qKlxuICogT2J0YWluIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBHQ0UgaW5zdGFuY2UuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy9tZXRhZGF0YS9wcmVkZWZpbmVkLW1ldGFkYXRhLWtleXN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogY29uc3Qgc2VydmljZUFjY291bnQ6IHt9ID0gYXdhaXQgaW5zdGFuY2UoJ3NlcnZpY2UtYWNjb3VudHMvJyk7XG4gKiBjb25zdCBzZXJ2aWNlQWNjb3VudEVtYWlsOiBzdHJpbmcgPSBhd2FpdCBpbnN0YW5jZSgnc2VydmljZS1hY2NvdW50cy9kZWZhdWx0L2VtYWlsJyk7XG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFBY2Nlc3NvcignaW5zdGFuY2UnLCBvcHRpb25zKTtcbn1cbi8qKlxuICogT2J0YWluIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBHQ1AgcHJvamVjdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21ldGFkYXRhL3ByZWRlZmluZWQtbWV0YWRhdGEta2V5c31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBjb25zdCBwcm9qZWN0SWQ6IHN0cmluZyA9IGF3YWl0IHByb2plY3QoJ3Byb2plY3QtaWQnKTtcbiAqIGNvbnN0IG51bWVyaWNQcm9qZWN0SWQ6IG51bWJlciA9IGF3YWl0IHByb2plY3QoJ251bWVyaWMtcHJvamVjdC1pZCcpO1xuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBwcm9qZWN0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFBY2Nlc3NvcigncHJvamVjdCcsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBPYnRhaW4gbWV0YWRhdGEgZm9yIHRoZSBjdXJyZW50IHVuaXZlcnNlLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvbWV0YWRhdGEvcHJlZGVmaW5lZC1tZXRhZGF0YS1rZXlzfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGNvbnN0IHVuaXZlcnNlRG9tYWluOiBzdHJpbmcgPSBhd2FpdCB1bml2ZXJzZSgndW5pdmVyc2UtZG9tYWluJyk7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gdW5pdmVyc2Uob3B0aW9ucykge1xuICAgIHJldHVybiBtZXRhZGF0YUFjY2Vzc29yKCd1bml2ZXJzZScsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBSZXRyaWV2ZSBtZXRhZGF0YSBpdGVtcyBpbiBwYXJhbGxlbC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21ldGFkYXRhL3ByZWRlZmluZWQtbWV0YWRhdGEta2V5c31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBjb25zdCBkYXRhID0gYXdhaXQgYnVsayhbXG4gKiAgIHtcbiAqICAgICBtZXRhZGF0YUtleTogJ2luc3RhbmNlJyxcbiAqICAgfSxcbiAqICAge1xuICogICAgIG1ldGFkYXRhS2V5OiAncHJvamVjdC9wcm9qZWN0LWlkJyxcbiAqICAgfSxcbiAqIF0gYXMgY29uc3QpO1xuICpcbiAqIC8vIGRhdGEuaW5zdGFuY2U7XG4gKiAvLyBkYXRhWydwcm9qZWN0L3Byb2plY3QtaWQnXTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIFRoZSBtZXRhZGF0YSBwcm9wZXJ0aWVzIHRvIHJldHJpZXZlXG4gKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgaW4gYG1ldGFkYXRha2V5OnZhbHVlYCBmb3JtYXRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVsayhwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgciA9IHt9O1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb3BlcnRpZXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG1ldGFkYXRhQWNjZXNzb3IoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtLm1ldGFkYXRhS2V5O1xuICAgICAgICAgICAgcltrZXldID0gcmVzO1xuICAgICAgICB9KSgpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gcjtcbn1cbi8qXG4gKiBIb3cgbWFueSB0aW1lcyBzaG91bGQgd2UgcmV0cnkgZGV0ZWN0aW5nIEdDUCBlbnZpcm9ubWVudC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0R0NQQXZhaWxhYmxlUmV0cmllcygpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuREVURUNUX0dDUF9SRVRSSUVTXG4gICAgICAgID8gTnVtYmVyKHByb2Nlc3MuZW52LkRFVEVDVF9HQ1BfUkVUUklFUylcbiAgICAgICAgOiAwO1xufVxubGV0IGNhY2hlZElzQXZhaWxhYmxlUmVzcG9uc2U7XG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgbWV0YWRhdGEgc2VydmVyIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXZhaWxhYmxlKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5NRVRBREFUQV9TRVJWRVJfREVURUNUSU9OKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTi50cmltKCkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCEodmFsdWUgaW4gZXhwb3J0cy5NRVRBREFUQV9TRVJWRVJfREVURUNUSU9OKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gXFxgTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTlxcYCBlbnYgdmFyaWFibGUuIEdvdCBcXGAke3ZhbHVlfVxcYCwgYnV0IGl0IHNob3VsZCBiZSBcXGAke09iamVjdC5rZXlzKGV4cG9ydHMuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTikuam9pbignYCwgYCcpfVxcYCwgb3IgdW5zZXRgKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdhc3N1bWUtcHJlc2VudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlICdub25lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlICdiaW9zLW9ubHknOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRHQ1BSZXNpZGVuY3koKTtcbiAgICAgICAgICAgIGNhc2UgJ3Bpbmctb25seSc6XG4gICAgICAgICAgICAvLyBjb250aW51ZSwgd2Ugd2FudCB0byBwaW5nIHRoZSBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyBJZiBhIHVzZXIgaXMgaW5zdGFudGlhdGluZyBzZXZlcmFsIEdDUCBsaWJyYXJpZXMgYXQgdGhlIHNhbWUgdGltZSxcbiAgICAgICAgLy8gdGhpcyBtYXkgcmVzdWx0IGluIG11bHRpcGxlIGNhbGxzIHRvIGlzQXZhaWxhYmxlKCksIHRvIGRldGVjdCB0aGVcbiAgICAgICAgLy8gcnVudGltZSBlbnZpcm9ubWVudC4gV2UgdXNlIHRoZSBzYW1lIHByb21pc2UgZm9yIGVhY2ggb2YgdGhlc2UgY2FsbHNcbiAgICAgICAgLy8gdG8gcmVkdWNlIHRoZSBuZXR3b3JrIGxvYWQuXG4gICAgICAgIGlmIChjYWNoZWRJc0F2YWlsYWJsZVJlc3BvbnNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNhY2hlZElzQXZhaWxhYmxlUmVzcG9uc2UgPSBtZXRhZGF0YUFjY2Vzc29yKCdpbnN0YW5jZScsIHVuZGVmaW5lZCwgZGV0ZWN0R0NQQXZhaWxhYmxlUmV0cmllcygpLCBcbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWZhdWx0IEhPU1RfQUREUkVTUyBoYXMgYmVlbiBvdmVycmlkZGVuLCB3ZSBzaG91bGQgbm90XG4gICAgICAgICAgICAvLyBtYWtlIGFuIGVmZm9ydCB0byB0cnkgU0VDT05EQVJZX0hPU1RfQUREUkVTUyAoYXMgd2UgYXJlIGxpa2VseSBpblxuICAgICAgICAgICAgLy8gYSBub24tR0NQIGVudmlyb25tZW50KTpcbiAgICAgICAgICAgICEocHJvY2Vzcy5lbnYuR0NFX01FVEFEQVRBX0lQIHx8IHByb2Nlc3MuZW52LkdDRV9NRVRBREFUQV9IT1NUKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY2FjaGVkSXNBdmFpbGFibGVSZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IGU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5ERUJVR19BVVRIKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyLnR5cGUgPT09ICdyZXF1ZXN0LXRpbWVvdXQnKSB7XG4gICAgICAgICAgICAvLyBJZiBydW5uaW5nIGluIGEgR0NQIGVudmlyb25tZW50LCBtZXRhZGF0YSBlbmRwb2ludCBzaG91bGQgcmV0dXJuXG4gICAgICAgICAgICAvLyB3aXRoaW4gbXMuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpICYmXG4gICAgICAgICAgICAgICAgLy8gQSB3YXJuaW5nIGlzIGVtaXR0ZWQgaWYgd2Ugc2VlIGFuIHVuZXhwZWN0ZWQgZXJyLmNvZGUsIG9yIGVyci5jb2RlXG4gICAgICAgICAgICAgICAgLy8gaXMgbm90IHBvcHVsYXRlZDpcbiAgICAgICAgICAgICAgICAoIWVyci5jb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFTk9FTlQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhlcnIuY29kZSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAnVU5LTk9XTic7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlKVxuICAgICAgICAgICAgICAgICAgICBjb2RlID0gZXJyLmNvZGU7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhgcmVjZWl2ZWQgdW5leHBlY3RlZCBlcnJvciA9ICR7ZXJyLm1lc3NhZ2V9IGNvZGUgPSAke2NvZGV9YCwgJ01ldGFkYXRhTG9va3VwV2FybmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRmFpbHVyZSB0byByZXNvbHZlIHRoZSBtZXRhZGF0YSBzZXJ2aWNlIG1lYW5zIHRoYXQgaXQgaXMgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogcmVzZXQgdGhlIG1lbW9pemVkIGlzQXZhaWxhYmxlKCkgbG9va3VwLlxuICovXG5mdW5jdGlvbiByZXNldElzQXZhaWxhYmxlQ2FjaGUoKSB7XG4gICAgY2FjaGVkSXNBdmFpbGFibGVSZXNwb25zZSA9IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogQSBjYWNoZSBmb3IgdGhlIGRldGVjdGVkIEdDUCBSZXNpZGVuY3kuXG4gKi9cbmV4cG9ydHMuZ2NwUmVzaWRlbmN5Q2FjaGUgPSBudWxsO1xuLyoqXG4gKiBEZXRlY3RzIEdDUCBSZXNpZGVuY3kuXG4gKiBDYWNoZXMgcmVzdWx0cyB0byByZWR1Y2UgY29zdHMgZm9yIHN1YnNlcXVlbnQgY2FsbHMuXG4gKlxuICogQHNlZSBzZXRHQ1BSZXNpZGVuY3kgZm9yIHNldHRpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R0NQUmVzaWRlbmN5KCkge1xuICAgIGlmIChleHBvcnRzLmdjcFJlc2lkZW5jeUNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIHNldEdDUFJlc2lkZW5jeSgpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0cy5nY3BSZXNpZGVuY3lDYWNoZTtcbn1cbi8qKlxuICogU2V0cyB0aGUgZGV0ZWN0ZWQgR0NQIFJlc2lkZW5jeS5cbiAqIFVzZWZ1bCBmb3IgZm9yY2luZyBtZXRhZGF0YSBzZXJ2ZXIgZGV0ZWN0aW9uIGJlaGF2aW9yLlxuICpcbiAqIFNldCBgbnVsbGAgdG8gYXV0b2RldGVjdCB0aGUgZW52aXJvbm1lbnQgKGRlZmF1bHQgYmVoYXZpb3IpLlxuICogQHNlZSBnZXRHQ1BSZXNpZGVuY3kgZm9yIGdldHRpbmdcbiAqL1xuZnVuY3Rpb24gc2V0R0NQUmVzaWRlbmN5KHZhbHVlID0gbnVsbCkge1xuICAgIGV4cG9ydHMuZ2NwUmVzaWRlbmN5Q2FjaGUgPSB2YWx1ZSAhPT0gbnVsbCA/IHZhbHVlIDogKDAsIGdjcF9yZXNpZGVuY3lfMS5kZXRlY3RHQ1BSZXNpZGVuY3kpKCk7XG59XG4vKipcbiAqIE9idGFpbiB0aGUgdGltZW91dCBmb3IgcmVxdWVzdHMgdG8gdGhlIG1ldGFkYXRhIHNlcnZlci5cbiAqXG4gKiBJbiBjZXJ0YWluIGVudmlyb25tZW50cyBhbmQgY29uZGl0aW9ucyByZXF1ZXN0cyBjYW4gdGFrZSBsb25nZXIgdGhhblxuICogdGhlIGRlZmF1bHQgdGltZW91dCB0byBjb21wbGV0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGRldGVybWluZSB0aGVcbiAqIGFwcHJvcHJpYXRlIHRpbWVvdXQgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGEgcmVxdWVzdCB0aW1lb3V0IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIGdldEdDUFJlc2lkZW5jeSgpID8gMCA6IDMwMDA7XG59XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2NwLXJlc2lkZW5jeVwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLyogZ2xvYmFsIHdpbmRvdyAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ccm93c2VyQ3J5cHRvID0gdm9pZCAwO1xuLy8gVGhpcyBmaWxlIGltcGxlbWVudHMgY3J5cHRvIGZ1bmN0aW9ucyB3ZSBuZWVkIHVzaW5nIGluLWJyb3dzZXJcbi8vIFN1YnRsZUNyeXB0byBpbnRlcmZhY2UgYHdpbmRvdy5jcnlwdG8uc3VidGxlYC5cbmNvbnN0IGJhc2U2NGpzID0gcmVxdWlyZShcImJhc2U2NC1qc1wiKTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcIi4uL2NyeXB0b1wiKTtcbmNsYXNzIEJyb3dzZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgICAgIHdpbmRvdy5jcnlwdG8gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgd2luZG93LmNyeXB0by5zdWJ0bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3VidGxlQ3J5cHRvIG5vdCBmb3VuZC4gTWFrZSBzdXJlIGl0J3MgYW4gaHR0cHM6Ly8gd2Vic2l0ZS5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgc2hhMjU2RGlnZXN0QmFzZTY0KHN0cikge1xuICAgICAgICAvLyBTdWJ0bGVDcnlwdG8gZGlnZXN0KCkgbWV0aG9kIGlzIGFzeW5jLCBzbyB3ZSBtdXN0IG1ha2VcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgYXN5bmMgYXMgd2VsbC5cbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIFNIQTI1NiBkaWdlc3QgdXNpbmcgU3VidGxlQ3J5cHRvLCB3ZSBmaXJzdFxuICAgICAgICAvLyBuZWVkIHRvIGNvbnZlcnQgYW4gaW5wdXQgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyOlxuICAgICAgICBjb25zdCBpbnB1dEJ1ZmZlciA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpO1xuICAgICAgICAvLyBSZXN1bHQgaXMgQXJyYXlCdWZmZXIgYXMgd2VsbC5cbiAgICAgICAgY29uc3Qgb3V0cHV0QnVmZmVyID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgaW5wdXRCdWZmZXIpO1xuICAgICAgICByZXR1cm4gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShuZXcgVWludDhBcnJheShvdXRwdXRCdWZmZXIpKTtcbiAgICB9XG4gICAgcmFuZG9tQnl0ZXNCYXNlNjQoY291bnQpIHtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShjb3VudCk7XG4gICAgICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICAgICAgcmV0dXJuIGJhc2U2NGpzLmZyb21CeXRlQXJyYXkoYXJyYXkpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFkQmFzZTY0KGJhc2U2NCkge1xuICAgICAgICAvLyBiYXNlNjRqcyByZXF1aXJlcyBwYWRkaW5nLCBzbyBsZXQncyBhZGQgc29tZSAnPSdcbiAgICAgICAgd2hpbGUgKGJhc2U2NC5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgICAgICAgICBiYXNlNjQgKz0gJz0nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlNjQ7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeShwdWJrZXksIGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBhbGdvID0ge1xuICAgICAgICAgICAgbmFtZTogJ1JTQVNTQS1QS0NTMS12MV81JyxcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogJ1NIQS0yNTYnIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlQXJyYXkgPSBiYXNlNjRqcy50b0J5dGVBcnJheShCcm93c2VyQ3J5cHRvLnBhZEJhc2U2NChzaWduYXR1cmUpKTtcbiAgICAgICAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCdqd2snLCBwdWJrZXksIGFsZ28sIHRydWUsIFsndmVyaWZ5J10pO1xuICAgICAgICAvLyBTdWJ0bGVDcnlwdG8ncyB2ZXJpZnkgbWV0aG9kIGlzIGFzeW5jIHNvIHdlIG11c3QgbWFrZVxuICAgICAgICAvLyB0aGlzIG1ldGhvZCBhc3luYyBhcyB3ZWxsLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS52ZXJpZnkoYWxnbywgY3J5cHRvS2V5LCBzaWduYXR1cmVBcnJheSwgZGF0YUFycmF5KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgc2lnbihwcml2YXRlS2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsZ28gPSB7XG4gICAgICAgICAgICBuYW1lOiAnUlNBU1NBLVBLQ1MxLXYxXzUnLFxuICAgICAgICAgICAgaGFzaDogeyBuYW1lOiAnU0hBLTI1NicgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGF0YUFycmF5ID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRhdGEpO1xuICAgICAgICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ2p3aycsIHByaXZhdGVLZXksIGFsZ28sIHRydWUsIFsnc2lnbiddKTtcbiAgICAgICAgLy8gU3VidGxlQ3J5cHRvJ3Mgc2lnbiBtZXRob2QgaXMgYXN5bmMgc28gd2UgbXVzdCBtYWtlXG4gICAgICAgIC8vIHRoaXMgbWV0aG9kIGFzeW5jIGFzIHdlbGwuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLnNpZ24oYWxnbywgY3J5cHRvS2V5LCBkYXRhQXJyYXkpO1xuICAgICAgICByZXR1cm4gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShuZXcgVWludDhBcnJheShyZXN1bHQpKTtcbiAgICB9XG4gICAgZGVjb2RlQmFzZTY0U3RyaW5nVXRmOChiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgdWludDhhcnJheSA9IGJhc2U2NGpzLnRvQnl0ZUFycmF5KEJyb3dzZXJDcnlwdG8ucGFkQmFzZTY0KGJhc2U2NCkpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodWludDhhcnJheSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGVuY29kZUJhc2U2NFN0cmluZ1V0ZjgodGV4dCkge1xuICAgICAgICBjb25zdCB1aW50OGFycmF5ID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHRleHQpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRqcy5mcm9tQnl0ZUFycmF5KHVpbnQ4YXJyYXkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBwcm92aWRlZCBzdHJpbmcuXG4gICAgICogQHBhcmFtIHN0ciBUaGUgcGxhaW4gdGV4dCBzdHJpbmcgdG8gaGFzaC5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgcHJvdmlkZWRcbiAgICAgKiAgIHN0cmluZyBpbiBoZXhhZGVjaW1hbCBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBhc3luYyBzaGEyNTZEaWdlc3RIZXgoc3RyKSB7XG4gICAgICAgIC8vIFN1YnRsZUNyeXB0byBkaWdlc3QoKSBtZXRob2QgaXMgYXN5bmMsIHNvIHdlIG11c3QgbWFrZVxuICAgICAgICAvLyB0aGlzIG1ldGhvZCBhc3luYyBhcyB3ZWxsLlxuICAgICAgICAvLyBUbyBjYWxjdWxhdGUgU0hBMjU2IGRpZ2VzdCB1c2luZyBTdWJ0bGVDcnlwdG8sIHdlIGZpcnN0XG4gICAgICAgIC8vIG5lZWQgdG8gY29udmVydCBhbiBpbnB1dCBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXI6XG4gICAgICAgIGNvbnN0IGlucHV0QnVmZmVyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7XG4gICAgICAgIC8vIFJlc3VsdCBpcyBBcnJheUJ1ZmZlciBhcyB3ZWxsLlxuICAgICAgICBjb25zdCBvdXRwdXRCdWZmZXIgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBpbnB1dEJ1ZmZlcik7XG4gICAgICAgIHJldHVybiAoMCwgY3J5cHRvXzEuZnJvbUFycmF5QnVmZmVyVG9IZXgpKG91dHB1dEJ1ZmZlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBITUFDIGhhc2ggb2YgYSBtZXNzYWdlIHVzaW5nIHRoZSBwcm92aWRlZCBjcnlwdG8ga2V5IGFuZCB0aGVcbiAgICAgKiBTSEEtMjU2IGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBzZWNyZXQgY3J5cHRvIGtleSBpbiB1dGYtOCBvciBBcnJheUJ1ZmZlciBmb3JtYXQuXG4gICAgICogQHBhcmFtIG1zZyBUaGUgcGxhaW4gdGV4dCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSE1BQy1TSEEyNTYgaGFzaCBpbiBBcnJheUJ1ZmZlclxuICAgICAqICAgZm9ybWF0LlxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25XaXRoSG1hY1NoYTI1NihrZXksIG1zZykge1xuICAgICAgICAvLyBDb252ZXJ0IGtleSwgaWYgcHJvdmlkZWQgaW4gQXJyYXlCdWZmZXIgZm9ybWF0LCB0byBzdHJpbmcuXG4gICAgICAgIGNvbnN0IHJhd0tleSA9IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLm5ldyBVaW50MTZBcnJheShrZXkpKTtcbiAgICAgICAgY29uc3QgZW5jID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmltcG9ydEtleSgncmF3JywgZW5jLmVuY29kZShyYXdLZXkpLCB7XG4gICAgICAgICAgICBuYW1lOiAnSE1BQycsXG4gICAgICAgICAgICBoYXNoOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NIQS0yNTYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgZmFsc2UsIFsnc2lnbiddKTtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jcnlwdG8uc3VidGxlLnNpZ24oJ0hNQUMnLCBjcnlwdG9LZXksIGVuYy5lbmNvZGUobXNnKSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ccm93c2VyQ3J5cHRvID0gQnJvd3NlckNyeXB0bztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9kZUNyeXB0byA9IHZvaWQgMDtcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG5jbGFzcyBOb2RlQ3J5cHRvIHtcbiAgICBhc3luYyBzaGEyNTZEaWdlc3RCYXNlNjQoc3RyKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHN0cikuZGlnZXN0KCdiYXNlNjQnKTtcbiAgICB9XG4gICAgcmFuZG9tQnl0ZXNCYXNlNjQoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhjb3VudCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkocHVia2V5LCBkYXRhLCBzaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KCdSU0EtU0hBMjU2Jyk7XG4gICAgICAgIHZlcmlmaWVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgdmVyaWZpZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiB2ZXJpZmllci52ZXJpZnkocHVia2V5LCBzaWduYXR1cmUsICdiYXNlNjQnKTtcbiAgICB9XG4gICAgYXN5bmMgc2lnbihwcml2YXRlS2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVTaWduKCdSU0EtU0hBMjU2Jyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoZGF0YSk7XG4gICAgICAgIHNpZ25lci5lbmQoKTtcbiAgICAgICAgcmV0dXJuIHNpZ25lci5zaWduKHByaXZhdGVLZXksICdiYXNlNjQnKTtcbiAgICB9XG4gICAgZGVjb2RlQmFzZTY0U3RyaW5nVXRmOChiYXNlNjQpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIH1cbiAgICBlbmNvZGVCYXNlNjRTdHJpbmdVdGY4KHRleHQpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRleHQsICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgcHJvdmlkZWQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIHBsYWluIHRleHQgc3RyaW5nIHRvIGhhc2guXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIHByb3ZpZGVkXG4gICAgICogICBzdHJpbmcgaW4gaGV4YWRlY2ltYWwgZW5jb2RpbmcuXG4gICAgICovXG4gICAgYXN5bmMgc2hhMjU2RGlnZXN0SGV4KHN0cikge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzdHIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBITUFDIGhhc2ggb2YgYSBtZXNzYWdlIHVzaW5nIHRoZSBwcm92aWRlZCBjcnlwdG8ga2V5IGFuZCB0aGVcbiAgICAgKiBTSEEtMjU2IGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBzZWNyZXQgY3J5cHRvIGtleSBpbiB1dGYtOCBvciBBcnJheUJ1ZmZlciBmb3JtYXQuXG4gICAgICogQHBhcmFtIG1zZyBUaGUgcGxhaW4gdGV4dCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSE1BQy1TSEEyNTYgaGFzaCBpbiBBcnJheUJ1ZmZlclxuICAgICAqICAgZm9ybWF0LlxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25XaXRoSG1hY1NoYTI1NihrZXksIG1zZykge1xuICAgICAgICBjb25zdCBjcnlwdG9LZXkgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IGtleSA6IHRvQnVmZmVyKGtleSk7XG4gICAgICAgIHJldHVybiB0b0FycmF5QnVmZmVyKGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBjcnlwdG9LZXkpLnVwZGF0ZShtc2cpLmRpZ2VzdCgpKTtcbiAgICB9XG59XG5leHBvcnRzLk5vZGVDcnlwdG8gPSBOb2RlQ3J5cHRvO1xuLyoqXG4gKiBDb252ZXJ0cyBhIE5vZGUuanMgQnVmZmVyIHRvIGFuIEFycmF5QnVmZmVyLlxuICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODYwOTI4OS9jb252ZXJ0LWEtYmluYXJ5LW5vZGVqcy1idWZmZXItdG8tamF2YXNjcmlwdC1hcnJheWJ1ZmZlclxuICogQHBhcmFtIGJ1ZmZlciBUaGUgQnVmZmVyIGlucHV0IHRvIGNvdmVydC5cbiAqIEByZXR1cm4gVGhlIEFycmF5QnVmZmVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dC5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheUJ1ZmZlcihidWZmZXIpIHtcbiAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlci5zbGljZShidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVPZmZzZXQgKyBidWZmZXIuYnl0ZUxlbmd0aCk7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIEFycmF5QnVmZmVyIHRvIGEgTm9kZS5qcyBCdWZmZXIuXG4gKiBAcGFyYW0gYXJyYXlCdWZmZXIgVGhlIEFycmF5QnVmZmVyIGlucHV0IHRvIGNvdmVydC5cbiAqIEByZXR1cm4gVGhlIEJ1ZmZlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIHRvQnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi8qIGdsb2JhbCB3aW5kb3cgKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ3J5cHRvID0gY3JlYXRlQ3J5cHRvO1xuZXhwb3J0cy5oYXNCcm93c2VyQ3J5cHRvID0gaGFzQnJvd3NlckNyeXB0bztcbmV4cG9ydHMuZnJvbUFycmF5QnVmZmVyVG9IZXggPSBmcm9tQXJyYXlCdWZmZXJUb0hleDtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcIi4vYnJvd3Nlci9jcnlwdG9cIik7XG5jb25zdCBjcnlwdG9fMiA9IHJlcXVpcmUoXCIuL25vZGUvY3J5cHRvXCIpO1xuZnVuY3Rpb24gY3JlYXRlQ3J5cHRvKCkge1xuICAgIGlmIChoYXNCcm93c2VyQ3J5cHRvKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjcnlwdG9fMS5Ccm93c2VyQ3J5cHRvKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgY3J5cHRvXzIuTm9kZUNyeXB0bygpO1xufVxuZnVuY3Rpb24gaGFzQnJvd3NlckNyeXB0bygpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cuY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LmNyeXB0by5zdWJ0bGUgIT09ICd1bmRlZmluZWQnKTtcbn1cbi8qKlxuICogQ29udmVydHMgYW4gQXJyYXlCdWZmZXIgdG8gYSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gKiBAcGFyYW0gYXJyYXlCdWZmZXIgVGhlIEFycmF5QnVmZmVyIHRvIGNvbnZlcnQgdG8gaGV4YWRlY2ltYWwgc3RyaW5nLlxuICogQHJldHVybiBUaGUgaGV4YWRlY2ltYWwgZW5jb2Rpbmcgb2YgdGhlIEFycmF5QnVmZmVyLlxuICovXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXJUb0hleChhcnJheUJ1ZmZlcikge1xuICAgIC8vIENvbnZlcnQgYnVmZmVyIHRvIGJ5dGUgYXJyYXkuXG4gICAgY29uc3QgYnl0ZUFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICAgIC8vIENvbnZlcnQgYnl0ZXMgdG8gaGV4IHN0cmluZy5cbiAgICByZXR1cm4gYnl0ZUFycmF5XG4gICAgICAgIC5tYXAoYnl0ZSA9PiB7XG4gICAgICAgIHJldHVybiBieXRlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIH0pXG4gICAgICAgIC5qb2luKCcnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbi8vIEFjY2VwdHMgYW4gb3B0aW9ucyBvYmplY3QgcGFzc2VkIGZyb20gdGhlIHVzZXIgdG8gdGhlIEFQSS4gIEluIHRoZVxuLy8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJLCBpdCByZWZlcnJlZCB0byBhIGBSZXF1ZXN0YCBvcHRpb25zIG9iamVjdC5cbi8vIE5vdyBpdCByZWZlcnMgdG8gYW4gQXhpb3ggUmVxdWVzdCBDb25maWcgb2JqZWN0LiAgVGhpcyBpcyBoZXJlIHRvIGhlbHBcbi8vIGVuc3VyZSB1c2VycyBkb24ndCBwYXNzIGludmFsaWQgb3B0aW9ucyB3aGVuIHRoZXkgdXBncmFkZSBmcm9tIDAueCB0byAxLnguXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gdmFsaWRhdGUob3B0aW9ucykge1xuICAgIGNvbnN0IHZwYWlycyA9IFtcbiAgICAgICAgeyBpbnZhbGlkOiAndXJpJywgZXhwZWN0ZWQ6ICd1cmwnIH0sXG4gICAgICAgIHsgaW52YWxpZDogJ2pzb24nLCBleHBlY3RlZDogJ2RhdGEnIH0sXG4gICAgICAgIHsgaW52YWxpZDogJ3FzJywgZXhwZWN0ZWQ6ICdwYXJhbXMnIH0sXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgdnBhaXJzKSB7XG4gICAgICAgIGlmIChvcHRpb25zW3BhaXIuaW52YWxpZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBgJyR7cGFpci5pbnZhbGlkfScgaXMgbm90IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIFBsZWFzZSB1c2UgJyR7cGFpci5leHBlY3RlZH0nIGluc3RlYWQuIFRoaXMgbGlicmFyeSBpcyB1c2luZyBBeGlvcyBmb3IgcmVxdWVzdHMuIFBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHZhbGlkIHJlcXVlc3Qgb3B0aW9ucy5gO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0VHJhbnNwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG5jb25zdCBvcHRpb25zXzEgPSByZXF1aXJlKFwiLi9vcHRpb25zXCIpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpO1xuY29uc3QgUFJPRFVDVF9OQU1FID0gJ2dvb2dsZS1hcGktbm9kZWpzLWNsaWVudCc7XG5jbGFzcyBEZWZhdWx0VHJhbnNwb3J0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBjb25maWd1cmFibGUsIHJlcGxhY2FibGUgYEdheGlvc2AgaW5zdGFuY2UuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gbmV3IGdheGlvc18xLkdheGlvcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHJlcXVlc3Qgb3B0aW9ucyBiZWZvcmUgbWFraW5nIGEgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0cyBHYXhpb3NPcHRpb25zIG9wdGlvbnMuXG4gICAgICogQHJldHVybiBDb25maWd1cmVkIG9wdGlvbnMuXG4gICAgICovXG4gICAgY29uZmlndXJlKG9wdHMgPSB7fSkge1xuICAgICAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gc2V0IHRyYW5zcG9ydGVyIHVzZXIgYWdlbnQgaWYgbm90IGluIGJyb3dzZXJcbiAgICAgICAgICAgIGNvbnN0IHVhVmFsdWUgPSBvcHRzLmhlYWRlcnNbJ1VzZXItQWdlbnQnXTtcbiAgICAgICAgICAgIGlmICghdWFWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gRGVmYXVsdFRyYW5zcG9ydGVyLlVTRVJfQUdFTlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghdWFWYWx1ZS5pbmNsdWRlcyhgJHtQUk9EVUNUX05BTUV9L2ApKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWydVc2VyLUFnZW50J10gPVxuICAgICAgICAgICAgICAgICAgICBgJHt1YVZhbHVlfSAke0RlZmF1bHRUcmFuc3BvcnRlci5VU0VSX0FHRU5UfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0cmFjayBnb29nbGUtYXV0aC1saWJyYXJ5LW5vZGVqcyB2ZXJzaW9uOlxuICAgICAgICAgICAgaWYgKCFvcHRzLmhlYWRlcnNbJ3gtZ29vZy1hcGktY2xpZW50J10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbi5yZXBsYWNlKC9edi8sICcnKTtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ3gtZ29vZy1hcGktY2xpZW50J10gPSBgZ2wtbm9kZS8ke25vZGVWZXJzaW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIGEgcmVxdWVzdCB1c2luZyBHYXhpb3Mgd2l0aCBnaXZlbiBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRzIEdheGlvc09wdGlvbnMgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgb3B0aW9uYWwgY2FsbGJhY2sgdGhhdCBjb250YWlucyBHYXhpb3NSZXNwb25zZSBvYmplY3QuXG4gICAgICogQHJldHVybiBHYXhpb3NQcm9taXNlLCBhc3N1bWluZyBubyBjYWxsYmFjayBpcyBwYXNzZWQuXG4gICAgICovXG4gICAgcmVxdWVzdChvcHRzKSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGUgdXNlciBpc24ndCBwYXNzaW5nIGluIHJlcXVlc3Qtc3R5bGUgb3B0aW9uc1xuICAgICAgICBvcHRzID0gdGhpcy5jb25maWd1cmUob3B0cyk7XG4gICAgICAgICgwLCBvcHRpb25zXzEudmFsaWRhdGUpKG9wdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5yZXF1ZXN0KG9wdHMpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5wcm9jZXNzRXJyb3IoZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLmRlZmF1bHRzO1xuICAgIH1cbiAgICBzZXQgZGVmYXVsdHMob3B0cykge1xuICAgICAgICB0aGlzLmluc3RhbmNlLmRlZmF1bHRzID0gb3B0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgZXJyb3IgdG8gaW5jbHVkZSBkZXRhaWxzIGZyb20gdGhlIGJvZHkuXG4gICAgICovXG4gICAgcHJvY2Vzc0Vycm9yKGUpIHtcbiAgICAgICAgY29uc3QgcmVzID0gZS5yZXNwb25zZTtcbiAgICAgICAgY29uc3QgZXJyID0gZTtcbiAgICAgICAgY29uc3QgYm9keSA9IHJlcyA/IHJlcy5kYXRhIDogbnVsbDtcbiAgICAgICAgaWYgKHJlcyAmJiBib2R5ICYmIGJvZHkuZXJyb3IgJiYgcmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkuZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBib2R5LmVycm9yO1xuICAgICAgICAgICAgICAgIGVyci5zdGF0dXMgPSByZXMuc3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShib2R5LmVycm9yLmVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IGJvZHkuZXJyb3IuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGVycjIpID0+IGVycjIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgIGVyci5jb2RlID0gYm9keS5lcnJvci5jb2RlO1xuICAgICAgICAgICAgICAgIGVyci5lcnJvcnMgPSBib2R5LmVycm9yLmVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gYm9keS5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGVyci5jb2RlID0gYm9keS5lcnJvci5jb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlcyAmJiByZXMuc3RhdHVzID49IDQwMCkge1xuICAgICAgICAgICAgLy8gQ29uc2lkZXIgYWxsIDR4eCBhbmQgNXh4IHJlc3BvbnNlcyBlcnJvcnMuXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9IGJvZHk7XG4gICAgICAgICAgICBlcnIuc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdFRyYW5zcG9ydGVyID0gRGVmYXVsdFRyYW5zcG9ydGVyO1xuLyoqXG4gKiBEZWZhdWx0IHVzZXIgYWdlbnQuXG4gKi9cbkRlZmF1bHRUcmFuc3BvcnRlci5VU0VSX0FHRU5UID0gYCR7UFJPRFVDVF9OQU1FfS8ke3BrZy52ZXJzaW9ufWA7XG4iLAogICAgIi8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyLnByb3RvdHlwZSlcblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gZ2V0UGFyYW1TaXplKGtleVNpemUpIHtcblx0dmFyIHJlc3VsdCA9ICgoa2V5U2l6ZSAvIDgpIHwgMCkgKyAoa2V5U2l6ZSAlIDggPT09IDAgPyAwIDogMSk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBwYXJhbUJ5dGVzRm9yQWxnID0ge1xuXHRFUzI1NjogZ2V0UGFyYW1TaXplKDI1NiksXG5cdEVTMzg0OiBnZXRQYXJhbVNpemUoMzg0KSxcblx0RVM1MTI6IGdldFBhcmFtU2l6ZSg1MjEpXG59O1xuXG5mdW5jdGlvbiBnZXRQYXJhbUJ5dGVzRm9yQWxnKGFsZykge1xuXHR2YXIgcGFyYW1CeXRlcyA9IHBhcmFtQnl0ZXNGb3JBbGdbYWxnXTtcblx0aWYgKHBhcmFtQnl0ZXMpIHtcblx0XHRyZXR1cm4gcGFyYW1CeXRlcztcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcignVW5rbm93biBhbGdvcml0aG0gXCInICsgYWxnICsgJ1wiJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UGFyYW1CeXRlc0ZvckFsZztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG5cbnZhciBnZXRQYXJhbUJ5dGVzRm9yQWxnID0gcmVxdWlyZSgnLi9wYXJhbS1ieXRlcy1mb3ItYWxnJyk7XG5cbnZhciBNQVhfT0NURVQgPSAweDgwLFxuXHRDTEFTU19VTklWRVJTQUwgPSAwLFxuXHRQUklNSVRJVkVfQklUID0gMHgyMCxcblx0VEFHX1NFUSA9IDB4MTAsXG5cdFRBR19JTlQgPSAweDAyLFxuXHRFTkNPREVEX1RBR19TRVEgPSAoVEFHX1NFUSB8IFBSSU1JVElWRV9CSVQpIHwgKENMQVNTX1VOSVZFUlNBTCA8PCA2KSxcblx0RU5DT0RFRF9UQUdfSU5UID0gVEFHX0lOVCB8IChDTEFTU19VTklWRVJTQUwgPDwgNik7XG5cbmZ1bmN0aW9uIGJhc2U2NFVybChiYXNlNjQpIHtcblx0cmV0dXJuIGJhc2U2NFxuXHRcdC5yZXBsYWNlKC89L2csICcnKVxuXHRcdC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuXHRcdC5yZXBsYWNlKC9cXC8vZywgJ18nKTtcbn1cblxuZnVuY3Rpb24gc2lnbmF0dXJlQXNCdWZmZXIoc2lnbmF0dXJlKSB7XG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoc2lnbmF0dXJlKSkge1xuXHRcdHJldHVybiBzaWduYXR1cmU7XG5cdH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBzaWduYXR1cmUpIHtcblx0XHRyZXR1cm4gQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnYmFzZTY0Jyk7XG5cdH1cblxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFQ0RTQSBzaWduYXR1cmUgbXVzdCBiZSBhIEJhc2U2NCBzdHJpbmcgb3IgYSBCdWZmZXInKTtcbn1cblxuZnVuY3Rpb24gZGVyVG9Kb3NlKHNpZ25hdHVyZSwgYWxnKSB7XG5cdHNpZ25hdHVyZSA9IHNpZ25hdHVyZUFzQnVmZmVyKHNpZ25hdHVyZSk7XG5cdHZhciBwYXJhbUJ5dGVzID0gZ2V0UGFyYW1CeXRlc0ZvckFsZyhhbGcpO1xuXG5cdC8vIHRoZSBERVIgZW5jb2RlZCBwYXJhbSBzaG91bGQgYXQgbW9zdCBiZSB0aGUgcGFyYW0gc2l6ZSwgcGx1cyBhIHBhZGRpbmdcblx0Ly8gemVybywgc2luY2UgZHVlIHRvIGJlaW5nIGEgc2lnbmVkIGludGVnZXJcblx0dmFyIG1heEVuY29kZWRQYXJhbUxlbmd0aCA9IHBhcmFtQnl0ZXMgKyAxO1xuXG5cdHZhciBpbnB1dExlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG5cblx0dmFyIG9mZnNldCA9IDA7XG5cdGlmIChzaWduYXR1cmVbb2Zmc2V0KytdICE9PSBFTkNPREVEX1RBR19TRVEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGV4cGVjdGVkIFwic2VxXCInKTtcblx0fVxuXG5cdHZhciBzZXFMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0KytdO1xuXHRpZiAoc2VxTGVuZ3RoID09PSAoTUFYX09DVEVUIHwgMSkpIHtcblx0XHRzZXFMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0KytdO1xuXHR9XG5cblx0aWYgKGlucHV0TGVuZ3RoIC0gb2Zmc2V0IDwgc2VxTGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdcInNlcVwiIHNwZWNpZmllZCBsZW5ndGggb2YgXCInICsgc2VxTGVuZ3RoICsgJ1wiLCBvbmx5IFwiJyArIChpbnB1dExlbmd0aCAtIG9mZnNldCkgKyAnXCIgcmVtYWluaW5nJyk7XG5cdH1cblxuXHRpZiAoc2lnbmF0dXJlW29mZnNldCsrXSAhPT0gRU5DT0RFRF9UQUdfSU5UKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBleHBlY3RlZCBcImludFwiIGZvciBcInJcIicpO1xuXHR9XG5cblx0dmFyIHJMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0KytdO1xuXG5cdGlmIChpbnB1dExlbmd0aCAtIG9mZnNldCAtIDIgPCByTGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdcInJcIiBzcGVjaWZpZWQgbGVuZ3RoIG9mIFwiJyArIHJMZW5ndGggKyAnXCIsIG9ubHkgXCInICsgKGlucHV0TGVuZ3RoIC0gb2Zmc2V0IC0gMikgKyAnXCIgYXZhaWxhYmxlJyk7XG5cdH1cblxuXHRpZiAobWF4RW5jb2RlZFBhcmFtTGVuZ3RoIDwgckxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignXCJyXCIgc3BlY2lmaWVkIGxlbmd0aCBvZiBcIicgKyByTGVuZ3RoICsgJ1wiLCBtYXggb2YgXCInICsgbWF4RW5jb2RlZFBhcmFtTGVuZ3RoICsgJ1wiIGlzIGFjY2VwdGFibGUnKTtcblx0fVxuXG5cdHZhciByT2Zmc2V0ID0gb2Zmc2V0O1xuXHRvZmZzZXQgKz0gckxlbmd0aDtcblxuXHRpZiAoc2lnbmF0dXJlW29mZnNldCsrXSAhPT0gRU5DT0RFRF9UQUdfSU5UKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBleHBlY3RlZCBcImludFwiIGZvciBcInNcIicpO1xuXHR9XG5cblx0dmFyIHNMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0KytdO1xuXG5cdGlmIChpbnB1dExlbmd0aCAtIG9mZnNldCAhPT0gc0xlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignXCJzXCIgc3BlY2lmaWVkIGxlbmd0aCBvZiBcIicgKyBzTGVuZ3RoICsgJ1wiLCBleHBlY3RlZCBcIicgKyAoaW5wdXRMZW5ndGggLSBvZmZzZXQpICsgJ1wiJyk7XG5cdH1cblxuXHRpZiAobWF4RW5jb2RlZFBhcmFtTGVuZ3RoIDwgc0xlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignXCJzXCIgc3BlY2lmaWVkIGxlbmd0aCBvZiBcIicgKyBzTGVuZ3RoICsgJ1wiLCBtYXggb2YgXCInICsgbWF4RW5jb2RlZFBhcmFtTGVuZ3RoICsgJ1wiIGlzIGFjY2VwdGFibGUnKTtcblx0fVxuXG5cdHZhciBzT2Zmc2V0ID0gb2Zmc2V0O1xuXHRvZmZzZXQgKz0gc0xlbmd0aDtcblxuXHRpZiAob2Zmc2V0ICE9PSBpbnB1dExlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gY29uc3VtZSBlbnRpcmUgYnVmZmVyLCBidXQgXCInICsgKGlucHV0TGVuZ3RoIC0gb2Zmc2V0KSArICdcIiBieXRlcyByZW1haW4nKTtcblx0fVxuXG5cdHZhciByUGFkZGluZyA9IHBhcmFtQnl0ZXMgLSByTGVuZ3RoLFxuXHRcdHNQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHNMZW5ndGg7XG5cblx0dmFyIGRzdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShyUGFkZGluZyArIHJMZW5ndGggKyBzUGFkZGluZyArIHNMZW5ndGgpO1xuXG5cdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgclBhZGRpbmc7ICsrb2Zmc2V0KSB7XG5cdFx0ZHN0W29mZnNldF0gPSAwO1xuXHR9XG5cdHNpZ25hdHVyZS5jb3B5KGRzdCwgb2Zmc2V0LCByT2Zmc2V0ICsgTWF0aC5tYXgoLXJQYWRkaW5nLCAwKSwgck9mZnNldCArIHJMZW5ndGgpO1xuXG5cdG9mZnNldCA9IHBhcmFtQnl0ZXM7XG5cblx0Zm9yICh2YXIgbyA9IG9mZnNldDsgb2Zmc2V0IDwgbyArIHNQYWRkaW5nOyArK29mZnNldCkge1xuXHRcdGRzdFtvZmZzZXRdID0gMDtcblx0fVxuXHRzaWduYXR1cmUuY29weShkc3QsIG9mZnNldCwgc09mZnNldCArIE1hdGgubWF4KC1zUGFkZGluZywgMCksIHNPZmZzZXQgKyBzTGVuZ3RoKTtcblxuXHRkc3QgPSBkc3QudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHRkc3QgPSBiYXNlNjRVcmwoZHN0KTtcblxuXHRyZXR1cm4gZHN0O1xufVxuXG5mdW5jdGlvbiBjb3VudFBhZGRpbmcoYnVmLCBzdGFydCwgc3RvcCkge1xuXHR2YXIgcGFkZGluZyA9IDA7XG5cdHdoaWxlIChzdGFydCArIHBhZGRpbmcgPCBzdG9wICYmIGJ1ZltzdGFydCArIHBhZGRpbmddID09PSAwKSB7XG5cdFx0KytwYWRkaW5nO1xuXHR9XG5cblx0dmFyIG5lZWRzU2lnbiA9IGJ1ZltzdGFydCArIHBhZGRpbmddID49IE1BWF9PQ1RFVDtcblx0aWYgKG5lZWRzU2lnbikge1xuXHRcdC0tcGFkZGluZztcblx0fVxuXG5cdHJldHVybiBwYWRkaW5nO1xufVxuXG5mdW5jdGlvbiBqb3NlVG9EZXIoc2lnbmF0dXJlLCBhbGcpIHtcblx0c2lnbmF0dXJlID0gc2lnbmF0dXJlQXNCdWZmZXIoc2lnbmF0dXJlKTtcblx0dmFyIHBhcmFtQnl0ZXMgPSBnZXRQYXJhbUJ5dGVzRm9yQWxnKGFsZyk7XG5cblx0dmFyIHNpZ25hdHVyZUJ5dGVzID0gc2lnbmF0dXJlLmxlbmd0aDtcblx0aWYgKHNpZ25hdHVyZUJ5dGVzICE9PSBwYXJhbUJ5dGVzICogMikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiJyArIGFsZyArICdcIiBzaWduYXR1cmVzIG11c3QgYmUgXCInICsgcGFyYW1CeXRlcyAqIDIgKyAnXCIgYnl0ZXMsIHNhdyBcIicgKyBzaWduYXR1cmVCeXRlcyArICdcIicpO1xuXHR9XG5cblx0dmFyIHJQYWRkaW5nID0gY291bnRQYWRkaW5nKHNpZ25hdHVyZSwgMCwgcGFyYW1CeXRlcyk7XG5cdHZhciBzUGFkZGluZyA9IGNvdW50UGFkZGluZyhzaWduYXR1cmUsIHBhcmFtQnl0ZXMsIHNpZ25hdHVyZS5sZW5ndGgpO1xuXHR2YXIgckxlbmd0aCA9IHBhcmFtQnl0ZXMgLSByUGFkZGluZztcblx0dmFyIHNMZW5ndGggPSBwYXJhbUJ5dGVzIC0gc1BhZGRpbmc7XG5cblx0dmFyIHJzQnl0ZXMgPSAxICsgMSArIHJMZW5ndGggKyAxICsgMSArIHNMZW5ndGg7XG5cblx0dmFyIHNob3J0TGVuZ3RoID0gcnNCeXRlcyA8IE1BWF9PQ1RFVDtcblxuXHR2YXIgZHN0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKChzaG9ydExlbmd0aCA/IDIgOiAzKSArIHJzQnl0ZXMpO1xuXG5cdHZhciBvZmZzZXQgPSAwO1xuXHRkc3Rbb2Zmc2V0KytdID0gRU5DT0RFRF9UQUdfU0VRO1xuXHRpZiAoc2hvcnRMZW5ndGgpIHtcblx0XHQvLyBCaXQgOCBoYXMgdmFsdWUgXCIwXCJcblx0XHQvLyBiaXRzIDctMSBnaXZlIHRoZSBsZW5ndGguXG5cdFx0ZHN0W29mZnNldCsrXSA9IHJzQnl0ZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQml0IDggb2YgZmlyc3Qgb2N0ZXQgaGFzIHZhbHVlIFwiMVwiXG5cdFx0Ly8gYml0cyA3LTEgZ2l2ZSB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbGVuZ3RoIG9jdGV0cy5cblx0XHRkc3Rbb2Zmc2V0KytdID0gTUFYX09DVEVUXHR8IDE7XG5cdFx0Ly8gbGVuZ3RoLCBiYXNlIDI1NlxuXHRcdGRzdFtvZmZzZXQrK10gPSByc0J5dGVzICYgMHhmZjtcblx0fVxuXHRkc3Rbb2Zmc2V0KytdID0gRU5DT0RFRF9UQUdfSU5UO1xuXHRkc3Rbb2Zmc2V0KytdID0gckxlbmd0aDtcblx0aWYgKHJQYWRkaW5nIDwgMCkge1xuXHRcdGRzdFtvZmZzZXQrK10gPSAwO1xuXHRcdG9mZnNldCArPSBzaWduYXR1cmUuY29weShkc3QsIG9mZnNldCwgMCwgcGFyYW1CeXRlcyk7XG5cdH0gZWxzZSB7XG5cdFx0b2Zmc2V0ICs9IHNpZ25hdHVyZS5jb3B5KGRzdCwgb2Zmc2V0LCByUGFkZGluZywgcGFyYW1CeXRlcyk7XG5cdH1cblx0ZHN0W29mZnNldCsrXSA9IEVOQ09ERURfVEFHX0lOVDtcblx0ZHN0W29mZnNldCsrXSA9IHNMZW5ndGg7XG5cdGlmIChzUGFkZGluZyA8IDApIHtcblx0XHRkc3Rbb2Zmc2V0KytdID0gMDtcblx0XHRzaWduYXR1cmUuY29weShkc3QsIG9mZnNldCwgcGFyYW1CeXRlcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2lnbmF0dXJlLmNvcHkoZHN0LCBvZmZzZXQsIHBhcmFtQnl0ZXMgKyBzUGFkZGluZyk7XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0ZGVyVG9Kb3NlOiBkZXJUb0pvc2UsXG5cdGpvc2VUb0Rlcjogam9zZVRvRGVyXG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0xSVUNhY2hlX2luc3RhbmNlcywgX0xSVUNhY2hlX2NhY2hlLCBfTFJVQ2FjaGVfbW92ZVRvRW5kLCBfTFJVQ2FjaGVfZXZpY3Q7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxSVUNhY2hlID0gdm9pZCAwO1xuZXhwb3J0cy5zbmFrZVRvQ2FtZWwgPSBzbmFrZVRvQ2FtZWw7XG5leHBvcnRzLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMgPSBvcmlnaW5hbE9yQ2FtZWxPcHRpb25zO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlIG9mIGEgcHJvdmlkZWQgc3RyaW5nLlxuICpcbiAqIEByZW1hcmtzXG4gKlxuICogTWF0Y2ggYW55IGBfYCBhbmQgbm90IGBfYCBwYWlyLCB0aGVuIHJldHVybiB0aGUgdXBwZXJjYXNlIG9mIHRoZSBub3QgYF9gXG4gKiBjaGFyYWN0ZXIuXG4gKlxuICogQGludGVybmFsXG4gKlxuICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHRoZSBjYW1lbENhc2UnZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc25ha2VUb0NhbWVsKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFtfXVteX10pL2csIG1hdGNoID0+IG1hdGNoLnNsaWNlKDEpLnRvVXBwZXJDYXNlKCkpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBvYmpba2V5XWAgb3IgYG9ialtjYW1lbENhc2VLZXldYCwgd2l0aCBhIHByZWZlcmVuY2VcbiAqIGZvciBvcmlnaW5hbCwgbm9uLWNhbWVsQ2FzZSBrZXkuXG4gKlxuICogQHBhcmFtIG9iaiBvYmplY3QgdG8gbG9va3VwIGEgdmFsdWUgaW5cbiAqIEByZXR1cm5zIGEgYGdldGAgZnVuY3Rpb24gZm9yIGdldHRpbmcgYG9ialtrZXkgfHwgc25ha2VLZXldYCwgaWYgYXZhaWxhYmxlXG4gKi9cbmZ1bmN0aW9uIG9yaWdpbmFsT3JDYW1lbE9wdGlvbnMob2JqKSB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IGFuIGluZGV4IG9mIG9iamVjdCwgcHJlZmVyYWJseSBzbmFrZV9jYXNlXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlIGBvYmpba2V5IHx8IHNuYWtlS2V5XWAsIGlmIGF2YWlsYWJsZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBvID0gKG9iaiB8fCB7fSk7XG4gICAgICAgIHJldHVybiAoX2EgPSBvW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9bc25ha2VUb0NhbWVsKGtleSldO1xuICAgIH1cbiAgICByZXR1cm4geyBnZXQgfTtcbn1cbi8qKlxuICogQSBzaW1wbGUgTFJVIGNhY2hlIHV0aWxpdHkuXG4gKiBOb3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzYWdlLlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBMUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBfTFJVQ2FjaGVfaW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1hcHMgYXJlIGluIG9yZGVyLiBUaHVzLCB0aGUgb2xkZXIgaXRlbSBpcyB0aGUgZmlyc3QgaXRlbS5cbiAgICAgICAgICpcbiAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hcH1cbiAgICAgICAgICovXG4gICAgICAgIF9MUlVDYWNoZV9jYWNoZS5zZXQodGhpcywgbmV3IE1hcCgpKTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IG9wdGlvbnMuY2FwYWNpdHk7XG4gICAgICAgIHRoaXMubWF4QWdlID0gb3B0aW9ucy5tYXhBZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBhbiBpdGVtIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byB1cHNlcnRcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBrZXlcbiAgICAgKi9cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9pbnN0YW5jZXMsIFwibVwiLCBfTFJVQ2FjaGVfbW92ZVRvRW5kKS5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9pbnN0YW5jZXMsIFwibVwiLCBfTFJVQ2FjaGVfZXZpY3QpLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhbiBpdGVtIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSB0aGUga2V5IHRvIHJldHJpZXZlXG4gICAgICovXG4gICAgZ2V0KGtleSkge1xuICAgICAgICBjb25zdCBpdGVtID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfY2FjaGUsIFwiZlwiKS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFpdGVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9pbnN0YW5jZXMsIFwibVwiLCBfTFJVQ2FjaGVfbW92ZVRvRW5kKS5jYWxsKHRoaXMsIGtleSwgaXRlbS52YWx1ZSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xSVUNhY2hlX2luc3RhbmNlcywgXCJtXCIsIF9MUlVDYWNoZV9ldmljdCkuY2FsbCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfVxufVxuZXhwb3J0cy5MUlVDYWNoZSA9IExSVUNhY2hlO1xuX0xSVUNhY2hlX2NhY2hlID0gbmV3IFdlYWtNYXAoKSwgX0xSVUNhY2hlX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9MUlVDYWNoZV9tb3ZlVG9FbmQgPSBmdW5jdGlvbiBfTFJVQ2FjaGVfbW92ZVRvRW5kKGtleSwgdmFsdWUpIHtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9jYWNoZSwgXCJmXCIpLmRlbGV0ZShrZXkpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xSVUNhY2hlX2NhY2hlLCBcImZcIikuc2V0KGtleSwge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbGFzdEFjY2Vzc2VkOiBEYXRlLm5vdygpLFxuICAgIH0pO1xufSwgX0xSVUNhY2hlX2V2aWN0ID0gZnVuY3Rpb24gX0xSVUNhY2hlX2V2aWN0KCkge1xuICAgIGNvbnN0IGN1dG9mZkRhdGUgPSB0aGlzLm1heEFnZSA/IERhdGUubm93KCkgLSB0aGlzLm1heEFnZSA6IDA7XG4gICAgLyoqXG4gICAgICogQmVjYXVzZSB3ZSBrbm93IE1hcHMgYXJlIGluIG9yZGVyLCB0aGlzIGl0ZW0gaXMgYm90aCB0aGVcbiAgICAgKiBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QgKGNhcGFjaXR5KSBhbmQgb2xkZXN0IChtYXhBZ2UpLlxuICAgICAqL1xuICAgIGxldCBvbGRlc3RJdGVtID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfY2FjaGUsIFwiZlwiKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgIHdoaWxlICghb2xkZXN0SXRlbS5kb25lICYmXG4gICAgICAgIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9jYWNoZSwgXCJmXCIpLnNpemUgPiB0aGlzLmNhcGFjaXR5IHx8IC8vIHRvbyBtYW55XG4gICAgICAgICAgICBvbGRlc3RJdGVtLnZhbHVlWzFdLmxhc3RBY2Nlc3NlZCA8IGN1dG9mZkRhdGUpIC8vIHRvbyBvbGRcbiAgICApIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfY2FjaGUsIFwiZlwiKS5kZWxldGUob2xkZXN0SXRlbS52YWx1ZVswXSk7XG4gICAgICAgIG9sZGVzdEl0ZW0gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9jYWNoZSwgXCJmXCIpLmVudHJpZXMoKS5uZXh0KCk7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXV0aENsaWVudCA9IGV4cG9ydHMuREVGQVVMVF9FQUdFUl9SRUZSRVNIX1RIUkVTSE9MRF9NSUxMSVMgPSBleHBvcnRzLkRFRkFVTFRfVU5JVkVSU0UgPSB2b2lkIDA7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG5jb25zdCB0cmFuc3BvcnRlcnNfMSA9IHJlcXVpcmUoXCIuLi90cmFuc3BvcnRlcnNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbi8qKlxuICogVGhlIGRlZmF1bHQgY2xvdWQgdW5pdmVyc2VcbiAqXG4gKiBAc2VlIHtAbGluayBBdXRoSlNPTk9wdGlvbnMudW5pdmVyc2VfZG9tYWlufVxuICovXG5leHBvcnRzLkRFRkFVTFRfVU5JVkVSU0UgPSAnZ29vZ2xlYXBpcy5jb20nO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCB7QGxpbmsgQXV0aENsaWVudE9wdGlvbnMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzfVxuICovXG5leHBvcnRzLkRFRkFVTFRfRUFHRVJfUkVGUkVTSF9USFJFU0hPTERfTUlMTElTID0gNSAqIDYwICogMTAwMDtcbmNsYXNzIEF1dGhDbGllbnQgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0ge307XG4gICAgICAgIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzID0gZXhwb3J0cy5ERUZBVUxUX0VBR0VSX1JFRlJFU0hfVEhSRVNIT0xEX01JTExJUztcbiAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51bml2ZXJzZURvbWFpbiA9IGV4cG9ydHMuREVGQVVMVF9VTklWRVJTRTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykob3B0cyk7XG4gICAgICAgIC8vIFNoYXJlZCBhdXRoIG9wdGlvbnNcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBvcHRzLmFwaUtleTtcbiAgICAgICAgdGhpcy5wcm9qZWN0SWQgPSAoX2EgPSBvcHRpb25zLmdldCgncHJvamVjdF9pZCcpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICB0aGlzLnF1b3RhUHJvamVjdElkID0gb3B0aW9ucy5nZXQoJ3F1b3RhX3Byb2plY3RfaWQnKTtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IChfYiA9IG9wdGlvbnMuZ2V0KCdjcmVkZW50aWFscycpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICAgICAgdGhpcy51bml2ZXJzZURvbWFpbiA9IChfYyA9IG9wdGlvbnMuZ2V0KCd1bml2ZXJzZV9kb21haW4nKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZXhwb3J0cy5ERUZBVUxUX1VOSVZFUlNFO1xuICAgICAgICAvLyBTaGFyZWQgY2xpZW50IG9wdGlvbnNcbiAgICAgICAgdGhpcy50cmFuc3BvcnRlciA9IChfZCA9IG9wdHMudHJhbnNwb3J0ZXIpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IG5ldyB0cmFuc3BvcnRlcnNfMS5EZWZhdWx0VHJhbnNwb3J0ZXIoKTtcbiAgICAgICAgaWYgKG9wdHMudHJhbnNwb3J0ZXJPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGVyLmRlZmF1bHRzID0gb3B0cy50cmFuc3BvcnRlck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzKSB7XG4gICAgICAgICAgICB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyA9IG9wdHMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoT25GYWlsdXJlID0gKF9lID0gb3B0cy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHtAbGluayBHYXhpb3MgYEdheGlvc2B9IGluc3RhbmNlIGZyb20gdGhlIHtAbGluayBBdXRoQ2xpZW50LnRyYW5zcG9ydGVyfS5cbiAgICAgKlxuICAgICAqIEBleHBpcmVtZW50YWxcbiAgICAgKi9cbiAgICBnZXQgZ2F4aW9zKCkge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BvcnRlciBpbnN0YW5jZW9mIGdheGlvc18xLkdheGlvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy50cmFuc3BvcnRlciBpbnN0YW5jZW9mIHRyYW5zcG9ydGVyc18xLkRlZmF1bHRUcmFuc3BvcnRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0ZXIuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoJ2luc3RhbmNlJyBpbiB0aGlzLnRyYW5zcG9ydGVyICYmXG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGVyLmluc3RhbmNlIGluc3RhbmNlb2YgZ2F4aW9zXzEuR2F4aW9zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnRlci5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYXV0aCBjcmVkZW50aWFscy5cbiAgICAgKi9cbiAgICBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscykge1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFwcGVuZCBhZGRpdGlvbmFsIGhlYWRlcnMsIGUuZy4sIHgtZ29vZy11c2VyLXByb2plY3QsIHNoYXJlZCBhY3Jvc3MgdGhlXG4gICAgICogY2xhc3NlcyBpbmhlcml0aW5nIEF1dGhDbGllbnQuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGJ5IGFueSBtZXRob2RcbiAgICAgKiB0aGF0IG92ZXJyaWRlcyBnZXRSZXF1ZXN0TWV0YWRhdGFBc3luYygpLCB3aGljaCBpcyBhIHNoYXJlZCBoZWxwZXIgZm9yXG4gICAgICogc2V0dGluZyByZXF1ZXN0IGluZm9ybWF0aW9uIGluIGJvdGggZ1JQQyBhbmQgSFRUUCBBUEkgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGVhZGVycyBvYmplY3QgdG8gYXBwZW5kIGFkZGl0aW9uYWwgaGVhZGVycyB0by5cbiAgICAgKi9cbiAgICBhZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycykge1xuICAgICAgICAvLyBxdW90YV9wcm9qZWN0X2lkLCBzdG9yZWQgaW4gYXBwbGljYXRpb25fZGVmYXVsdF9jcmVkZW50aWFscy5qc29uLCBpcyBzZXQgaW5cbiAgICAgICAgLy8gdGhlIHgtZ29vZy11c2VyLXByb2plY3QgaGVhZGVyLCB0byBpbmRpY2F0ZSBhbiBhbHRlcm5hdGUgYWNjb3VudCBmb3JcbiAgICAgICAgLy8gYmlsbGluZyBhbmQgcXVvdGE6XG4gICAgICAgIGlmICghaGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddICYmIC8vIGRvbid0IG92ZXJyaWRlIGEgdmFsdWUgdGhlIHVzZXIgc2V0cy5cbiAgICAgICAgICAgIHRoaXMucXVvdGFQcm9qZWN0SWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSA9IHRoaXMucXVvdGFQcm9qZWN0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJ5IGNvbmZpZyBmb3IgQXV0aC1yZWxhdGVkIHJlcXVlc3RzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IGEgcGFydCBvZiB0aGUgZGVmYXVsdCB7QGxpbmsgQXV0aENsaWVudC50cmFuc3BvcnRlciB0cmFuc3BvcnRlci9nYXhpb3N9XG4gICAgICogY29uZmlnIGFzIHNvbWUgZG93bnN0cmVhbSBBUElzIHdvdWxkIHByZWZlciBpZiBjdXN0b21lcnMgZXhwbGljaXRseSBlbmFibGUgcmV0cmllcyxcbiAgICAgKiBzdWNoIGFzIEdDUy5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IFJFVFJZX0NPTkZJRygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICAgICAgcmV0cnlDb25maWc6IHtcbiAgICAgICAgICAgICAgICBodHRwTWV0aG9kc1RvUmV0cnk6IFsnR0VUJywgJ1BVVCcsICdQT1NUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdERUxFVEUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5BdXRoQ2xpZW50ID0gQXV0aENsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9naW5UaWNrZXQgPSB2b2lkIDA7XG5jbGFzcyBMb2dpblRpY2tldCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgc2ltcGxlIGNsYXNzIHRvIGV4dHJhY3QgdXNlciBJRCBmcm9tIGFuIElEIFRva2VuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZW52IEVudmVsb3BlIG9mIHRoZSBqd3RcbiAgICAgKiBAcGFyYW0ge1Rva2VuUGF5bG9hZH0gcGF5IFBheWxvYWQgb2YgdGhlIGp3dFxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVudiwgcGF5KSB7XG4gICAgICAgIHRoaXMuZW52ZWxvcGUgPSBlbnY7XG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheTtcbiAgICB9XG4gICAgZ2V0RW52ZWxvcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudmVsb3BlO1xuICAgIH1cbiAgICBnZXRQYXlsb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBzaW1wbGUgY2xhc3MgdG8gZXh0cmFjdCB1c2VyIElEIGZyb20gYW4gSUQgVG9rZW5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gVGhlIHVzZXIgSURcbiAgICAgKi9cbiAgICBnZXRVc2VySWQoKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmdldFBheWxvYWQoKTtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5zdWIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLnN1YjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhdHRyaWJ1dGVzIGZyb20gdGhlIGxvZ2luIHRpY2tldC4gIFRoaXMgY2FuIGNvbnRhaW5cbiAgICAgKiB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIHNlc3Npb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBlbnZlbG9wZSBhbmQgcGF5bG9hZFxuICAgICAqL1xuICAgIGdldEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB7IGVudmVsb3BlOiB0aGlzLmdldEVudmVsb3BlKCksIHBheWxvYWQ6IHRoaXMuZ2V0UGF5bG9hZCgpIH07XG4gICAgfVxufVxuZXhwb3J0cy5Mb2dpblRpY2tldCA9IExvZ2luVGlja2V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PQXV0aDJDbGllbnQgPSBleHBvcnRzLkNsaWVudEF1dGhlbnRpY2F0aW9uID0gZXhwb3J0cy5DZXJ0aWZpY2F0ZUZvcm1hdCA9IGV4cG9ydHMuQ29kZUNoYWxsZW5nZU1ldGhvZCA9IHZvaWQgMDtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcImdheGlvc1wiKTtcbmNvbnN0IHF1ZXJ5c3RyaW5nID0gcmVxdWlyZShcInF1ZXJ5c3RyaW5nXCIpO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGZvcm1hdEVjZHNhID0gcmVxdWlyZShcImVjZHNhLXNpZy1mb3JtYXR0ZXJcIik7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCIuLi9jcnlwdG8vY3J5cHRvXCIpO1xuY29uc3QgYXV0aGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aGNsaWVudFwiKTtcbmNvbnN0IGxvZ2ludGlja2V0XzEgPSByZXF1aXJlKFwiLi9sb2dpbnRpY2tldFwiKTtcbnZhciBDb2RlQ2hhbGxlbmdlTWV0aG9kO1xuKGZ1bmN0aW9uIChDb2RlQ2hhbGxlbmdlTWV0aG9kKSB7XG4gICAgQ29kZUNoYWxsZW5nZU1ldGhvZFtcIlBsYWluXCJdID0gXCJwbGFpblwiO1xuICAgIENvZGVDaGFsbGVuZ2VNZXRob2RbXCJTMjU2XCJdID0gXCJTMjU2XCI7XG59KShDb2RlQ2hhbGxlbmdlTWV0aG9kIHx8IChleHBvcnRzLkNvZGVDaGFsbGVuZ2VNZXRob2QgPSBDb2RlQ2hhbGxlbmdlTWV0aG9kID0ge30pKTtcbnZhciBDZXJ0aWZpY2F0ZUZvcm1hdDtcbihmdW5jdGlvbiAoQ2VydGlmaWNhdGVGb3JtYXQpIHtcbiAgICBDZXJ0aWZpY2F0ZUZvcm1hdFtcIlBFTVwiXSA9IFwiUEVNXCI7XG4gICAgQ2VydGlmaWNhdGVGb3JtYXRbXCJKV0tcIl0gPSBcIkpXS1wiO1xufSkoQ2VydGlmaWNhdGVGb3JtYXQgfHwgKGV4cG9ydHMuQ2VydGlmaWNhdGVGb3JtYXQgPSBDZXJ0aWZpY2F0ZUZvcm1hdCA9IHt9KSk7XG4vKipcbiAqIFRoZSBjbGllbnQgYXV0aGVudGljYXRpb24gdHlwZS4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgYmFzaWMsIHBvc3QsIGFuZCBub25lLlxuICogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3NTkxI3NlY3Rpb24tMlxuICovXG52YXIgQ2xpZW50QXV0aGVudGljYXRpb247XG4oZnVuY3Rpb24gKENsaWVudEF1dGhlbnRpY2F0aW9uKSB7XG4gICAgQ2xpZW50QXV0aGVudGljYXRpb25bXCJDbGllbnRTZWNyZXRQb3N0XCJdID0gXCJDbGllbnRTZWNyZXRQb3N0XCI7XG4gICAgQ2xpZW50QXV0aGVudGljYXRpb25bXCJDbGllbnRTZWNyZXRCYXNpY1wiXSA9IFwiQ2xpZW50U2VjcmV0QmFzaWNcIjtcbiAgICBDbGllbnRBdXRoZW50aWNhdGlvbltcIk5vbmVcIl0gPSBcIk5vbmVcIjtcbn0pKENsaWVudEF1dGhlbnRpY2F0aW9uIHx8IChleHBvcnRzLkNsaWVudEF1dGhlbnRpY2F0aW9uID0gQ2xpZW50QXV0aGVudGljYXRpb24gPSB7fSkpO1xuY2xhc3MgT0F1dGgyQ2xpZW50IGV4dGVuZHMgYXV0aGNsaWVudF8xLkF1dGhDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNPckNsaWVudElkLCBjbGllbnRTZWNyZXQsIHJlZGlyZWN0VXJpKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zT3JDbGllbnRJZCAmJiB0eXBlb2Ygb3B0aW9uc09yQ2xpZW50SWQgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IG9wdGlvbnNPckNsaWVudElkXG4gICAgICAgICAgICA6IHsgY2xpZW50SWQ6IG9wdGlvbnNPckNsaWVudElkLCBjbGllbnRTZWNyZXQsIHJlZGlyZWN0VXJpIH07XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlQ2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUV4cGlyeSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVDYWNoZUZvcm1hdCA9IENlcnRpZmljYXRlRm9ybWF0LlBFTTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5Qcm9taXNlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fY2xpZW50SWQgPSBvcHRzLmNsaWVudElkO1xuICAgICAgICB0aGlzLl9jbGllbnRTZWNyZXQgPSBvcHRzLmNsaWVudFNlY3JldDtcbiAgICAgICAgdGhpcy5yZWRpcmVjdFVyaSA9IG9wdHMucmVkaXJlY3RVcmk7XG4gICAgICAgIHRoaXMuZW5kcG9pbnRzID0ge1xuICAgICAgICAgICAgdG9rZW5JbmZvVXJsOiAnaHR0cHM6Ly9vYXV0aDIuZ29vZ2xlYXBpcy5jb20vdG9rZW5pbmZvJyxcbiAgICAgICAgICAgIG9hdXRoMkF1dGhCYXNlVXJsOiAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL28vb2F1dGgyL3YyL2F1dGgnLFxuICAgICAgICAgICAgb2F1dGgyVG9rZW5Vcmw6ICdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsXG4gICAgICAgICAgICBvYXV0aDJSZXZva2VVcmw6ICdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS9yZXZva2UnLFxuICAgICAgICAgICAgb2F1dGgyRmVkZXJhdGVkU2lnbm9uUGVtQ2VydHNVcmw6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjEvY2VydHMnLFxuICAgICAgICAgICAgb2F1dGgyRmVkZXJhdGVkU2lnbm9uSndrQ2VydHNVcmw6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjMvY2VydHMnLFxuICAgICAgICAgICAgb2F1dGgySWFwUHVibGljS2V5VXJsOiAnaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaWFwL3ZlcmlmeS9wdWJsaWNfa2V5JyxcbiAgICAgICAgICAgIC4uLm9wdHMuZW5kcG9pbnRzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uID1cbiAgICAgICAgICAgIG9wdHMuY2xpZW50QXV0aGVudGljYXRpb24gfHwgQ2xpZW50QXV0aGVudGljYXRpb24uQ2xpZW50U2VjcmV0UG9zdDtcbiAgICAgICAgdGhpcy5pc3N1ZXJzID0gb3B0cy5pc3N1ZXJzIHx8IFtcbiAgICAgICAgICAgICdhY2NvdW50cy5nb29nbGUuY29tJyxcbiAgICAgICAgICAgICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20nLFxuICAgICAgICAgICAgdGhpcy51bml2ZXJzZURvbWFpbixcbiAgICAgICAgXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIFVSTCBmb3IgY29uc2VudCBwYWdlIGxhbmRpbmcuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucy5cbiAgICAgKiBAcmV0dXJuIFVSTCB0byBjb25zZW50IHBhZ2UuXG4gICAgICovXG4gICAgZ2VuZXJhdGVBdXRoVXJsKG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAob3B0cy5jb2RlX2NoYWxsZW5nZV9tZXRob2QgJiYgIW9wdHMuY29kZV9jaGFsbGVuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSWYgYSBjb2RlX2NoYWxsZW5nZV9tZXRob2QgaXMgcHJvdmlkZWQsIGNvZGVfY2hhbGxlbmdlIG11c3QgYmUgaW5jbHVkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5yZXNwb25zZV90eXBlID0gb3B0cy5yZXNwb25zZV90eXBlIHx8ICdjb2RlJztcbiAgICAgICAgb3B0cy5jbGllbnRfaWQgPSBvcHRzLmNsaWVudF9pZCB8fCB0aGlzLl9jbGllbnRJZDtcbiAgICAgICAgb3B0cy5yZWRpcmVjdF91cmkgPSBvcHRzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnJlZGlyZWN0VXJpO1xuICAgICAgICAvLyBBbGxvdyBzY29wZXMgdG8gYmUgcGFzc2VkIGVpdGhlciBhcyBhcnJheSBvciBhIHN0cmluZ1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLnNjb3BlKSkge1xuICAgICAgICAgICAgb3B0cy5zY29wZSA9IG9wdHMuc2NvcGUuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RVcmwgPSB0aGlzLmVuZHBvaW50cy5vYXV0aDJBdXRoQmFzZVVybC50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gKHJvb3RVcmwgK1xuICAgICAgICAgICAgJz8nICtcbiAgICAgICAgICAgIHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShvcHRzKSk7XG4gICAgfVxuICAgIGdlbmVyYXRlQ29kZVZlcmlmaWVyKCkge1xuICAgICAgICAvLyBUbyBtYWtlIHRoZSBjb2RlIGNvbXBhdGlibGUgd2l0aCBicm93c2VyIFN1YnRsZUNyeXB0byB3ZSBuZWVkIHRvIG1ha2VcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgYXN5bmMuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VuZXJhdGVDb2RlVmVyaWZpZXIgaXMgcmVtb3ZlZCwgcGxlYXNlIHVzZSBnZW5lcmF0ZUNvZGVWZXJpZmllckFzeW5jIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29kZV92ZXJpZmllciwgYW5kIGl0c1xuICAgICAqIHJlc3VsdGluZyBTSEEyNTYuIElmIHVzZWQsIHRoaXMgbXVzdCBiZSBwYWlyZWQgd2l0aCBhIFMyNTZcbiAgICAgKiBjb2RlX2NoYWxsZW5nZV9tZXRob2QuXG4gICAgICpcbiAgICAgKiBGb3IgYSBmdWxsIGV4YW1wbGUgc2VlOlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL2dvb2dsZS1hdXRoLWxpYnJhcnktbm9kZWpzL2Jsb2IvbWFpbi9zYW1wbGVzL29hdXRoMi1jb2RlVmVyaWZpZXIuanNcbiAgICAgKi9cbiAgICBhc3luYyBnZW5lcmF0ZUNvZGVWZXJpZmllckFzeW5jKCkge1xuICAgICAgICAvLyBiYXNlNjQgZW5jb2RpbmcgdXNlcyA2IGJpdHMgcGVyIGNoYXJhY3RlciwgYW5kIHdlIHdhbnQgdG8gZ2VuZXJhdGUxMjhcbiAgICAgICAgLy8gY2hhcmFjdGVycy4gNioxMjgvOCA9IDk2LlxuICAgICAgICBjb25zdCBjcnlwdG8gPSAoMCwgY3J5cHRvXzEuY3JlYXRlQ3J5cHRvKSgpO1xuICAgICAgICBjb25zdCByYW5kb21TdHJpbmcgPSBjcnlwdG8ucmFuZG9tQnl0ZXNCYXNlNjQoOTYpO1xuICAgICAgICAvLyBUaGUgdmFsaWQgY2hhcmFjdGVycyBpbiB0aGUgY29kZV92ZXJpZmllciBhcmUgW0EtWl0vW2Etel0vWzAtOV0vXG4gICAgICAgIC8vIFwiLVwiL1wiLlwiL1wiX1wiL1wiflwiLiBCYXNlNjQgZW5jb2RlZCBzdHJpbmdzIGFyZSBwcmV0dHkgY2xvc2UsIHNvIHdlJ3JlIGp1c3RcbiAgICAgICAgLy8gc3dhcHBpbmcgb3V0IGEgZmV3IGNoYXJzLlxuICAgICAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSByYW5kb21TdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXCsvZywgJ34nKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz0vZywgJ18nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnLScpO1xuICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgYmFzZTY0IGVuY29kZWQgU0hBMjU2XG4gICAgICAgIGNvbnN0IHVuZW5jb2RlZENvZGVDaGFsbGVuZ2UgPSBhd2FpdCBjcnlwdG8uc2hhMjU2RGlnZXN0QmFzZTY0KGNvZGVWZXJpZmllcik7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXNlIGJhc2U2NFVybEVuY29kaW5nIGluc3RlYWQgb2Ygc3RhbmRhcmQgYmFzZTY0XG4gICAgICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSB1bmVuY29kZWRDb2RlQ2hhbGxlbmdlXG4gICAgICAgICAgICAuc3BsaXQoJz0nKVswXVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gICAgICAgIHJldHVybiB7IGNvZGVWZXJpZmllciwgY29kZUNoYWxsZW5nZSB9O1xuICAgIH1cbiAgICBnZXRUb2tlbihjb2RlT3JPcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGNvZGVPck9wdGlvbnMgPT09ICdzdHJpbmcnID8geyBjb2RlOiBjb2RlT3JPcHRpb25zIH0gOiBjb2RlT3JPcHRpb25zO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW5Bc3luYyhvcHRpb25zKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgci50b2tlbnMsIHIucmVzKSwgZSA9PiBjYWxsYmFjayhlLCBudWxsLCBlLnJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkFzeW5jKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGdldFRva2VuQXN5bmMob3B0aW9ucykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5vYXV0aDJUb2tlblVybC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICAgICAgICBjbGllbnRfaWQ6IG9wdGlvbnMuY2xpZW50X2lkIHx8IHRoaXMuX2NsaWVudElkLFxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogb3B0aW9ucy5jb2RlVmVyaWZpZXIsXG4gICAgICAgICAgICBjb2RlOiBvcHRpb25zLmNvZGUsXG4gICAgICAgICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogb3B0aW9ucy5yZWRpcmVjdF91cmkgfHwgdGhpcy5yZWRpcmVjdFVyaSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuY2xpZW50QXV0aGVudGljYXRpb24gPT09IENsaWVudEF1dGhlbnRpY2F0aW9uLkNsaWVudFNlY3JldEJhc2ljKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNpYyA9IEJ1ZmZlci5mcm9tKGAke3RoaXMuX2NsaWVudElkfToke3RoaXMuX2NsaWVudFNlY3JldH1gKTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke2Jhc2ljLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uID09PSBDbGllbnRBdXRoZW50aWNhdGlvbi5DbGllbnRTZWNyZXRQb3N0KSB7XG4gICAgICAgICAgICB2YWx1ZXMuY2xpZW50X3NlY3JldCA9IHRoaXMuX2NsaWVudFNlY3JldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4uT0F1dGgyQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgZGF0YTogcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHZhbHVlcyksXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gcmVzLmRhdGE7XG4gICAgICAgIGlmIChyZXMuZGF0YSAmJiByZXMuZGF0YS5leHBpcmVzX2luKSB7XG4gICAgICAgICAgICB0b2tlbnMuZXhwaXJ5X2RhdGUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHJlcy5kYXRhLmV4cGlyZXNfaW4gKiAxMDAwO1xuICAgICAgICAgICAgZGVsZXRlIHRva2Vucy5leHBpcmVzX2luO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdCgndG9rZW5zJywgdG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIHsgdG9rZW5zLCByZXMgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAgICogQHBhcmFtIHJlZnJlc2hfdG9rZW4gRXhpc3RpbmcgcmVmcmVzaCB0b2tlbi5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlbk5vQ2FjaGUocmVmcmVzaFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhIHJlcXVlc3QgdG8gcmVmcmVzaCB1c2luZyB0aGUgc2FtZSB0b2tlbiBoYXMgc3RhcnRlZCxcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBzYW1lIHByb21pc2UuXG4gICAgICAgIGlmICh0aGlzLnJlZnJlc2hUb2tlblByb21pc2VzLmhhcyhyZWZyZXNoVG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5Qcm9taXNlcy5nZXQocmVmcmVzaFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gdGhpcy5yZWZyZXNoVG9rZW5Ob0NhY2hlKHJlZnJlc2hUb2tlbikudGhlbihyID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuUHJvbWlzZXMuZGVsZXRlKHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSwgZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblByb21pc2VzLmRlbGV0ZShyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuUHJvbWlzZXMuc2V0KHJlZnJlc2hUb2tlbiwgcCk7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBhc3luYyByZWZyZXNoVG9rZW5Ob0NhY2hlKHJlZnJlc2hUb2tlbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZnJlc2ggdG9rZW4gaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLm9hdXRoMlRva2VuVXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuX2NsaWVudElkLFxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gcmVxdWVzdCBmb3IgbmV3IHRva2VuXG4gICAgICAgICAgICByZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIC4uLk9BdXRoMkNsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIGRhdGE6IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgZ2F4aW9zXzEuR2F4aW9zRXJyb3IgJiZcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPT09ICdpbnZhbGlkX2dyYW50JyAmJlxuICAgICAgICAgICAgICAgICgoX2EgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGF0YSkgJiZcbiAgICAgICAgICAgICAgICAvUmVBdXRoL2kudGVzdChlLnJlc3BvbnNlLmRhdGEuZXJyb3JfZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoZS5yZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW5zID0gcmVzLmRhdGE7XG4gICAgICAgIC8vIFRPRE86IGRlLWR1cGxpY2F0ZSB0aGlzIGNvZGUgZnJvbSBhIGZldyBzcG90c1xuICAgICAgICBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEuZXhwaXJlc19pbikge1xuICAgICAgICAgICAgdG9rZW5zLmV4cGlyeV9kYXRlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyByZXMuZGF0YS5leHBpcmVzX2luICogMTAwMDtcbiAgICAgICAgICAgIGRlbGV0ZSB0b2tlbnMuZXhwaXJlc19pbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3Rva2VucycsIHRva2Vucyk7XG4gICAgICAgIHJldHVybiB7IHRva2VucywgcmVzIH07XG4gICAgfVxuICAgIHJlZnJlc2hBY2Nlc3NUb2tlbihjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgci5jcmVkZW50aWFscywgci5yZXMpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4odGhpcy5jcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gci50b2tlbnM7XG4gICAgICAgIHRva2Vucy5yZWZyZXNoX3Rva2VuID0gdGhpcy5jcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gdG9rZW5zO1xuICAgICAgICByZXR1cm4geyBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscywgcmVzOiByLnJlcyB9O1xuICAgIH1cbiAgICBnZXRBY2Nlc3NUb2tlbihjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWNjZXNzVG9rZW5Bc3luYygpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByLnRva2VuLCByLnJlcyksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRBY2Nlc3NUb2tlbkFzeW5jKCkge1xuICAgICAgICBjb25zdCBzaG91bGRSZWZyZXNoID0gIXRoaXMuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuIHx8IHRoaXMuaXNUb2tlbkV4cGlyaW5nKCk7XG4gICAgICAgIGlmIChzaG91bGRSZWZyZXNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZnJlc2hIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZEFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5wcm9jZXNzQW5kVmFsaWRhdGVSZWZyZXNoSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaGVkQWNjZXNzVG9rZW4gPT09IG51bGwgfHwgcmVmcmVzaGVkQWNjZXNzVG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZnJlc2hlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDcmVkZW50aWFscyhyZWZyZXNoZWRBY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0b2tlbjogdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4gfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWZyZXNoIHRva2VuIG9yIHJlZnJlc2ggaGFuZGxlciBjYWxsYmFjayBpcyBzZXQuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgICAgIGlmICghci5jcmVkZW50aWFscyB8fCAoci5jcmVkZW50aWFscyAmJiAhci5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVmcmVzaCBhY2Nlc3MgdG9rZW4uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyB0b2tlbjogci5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4sIHJlczogci5yZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHRva2VuOiB0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbiB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGF1dGhlbnRpY2F0aW9uIGludGVyZmFjZS4gIEl0IHRha2VzIGFuIG9wdGlvbmFsIHVybCB3aGljaCB3aGVuXG4gICAgICogcHJlc2VudCBpcyB0aGUgZW5kcG9pbnQgYmVpbmcgYWNjZXNzZWQsIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB3aGljaFxuICAgICAqIHJlc29sdmVzIHdpdGggYXV0aG9yaXphdGlvbiBoZWFkZXIgZmllbGRzLlxuICAgICAqXG4gICAgICogSW4gT0F1dGgyQ2xpZW50LCB0aGUgcmVzdWx0IGhhcyB0aGUgZm9ybTpcbiAgICAgKiB7IEF1dGhvcml6YXRpb246ICdCZWFyZXIgPGFjY2Vzc190b2tlbl92YWx1ZT4nIH1cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBvcHRpb25hbCB1cmwgYmVpbmcgYXV0aG9yaXplZFxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcXVlc3RIZWFkZXJzKHVybCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gKGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGFkYXRhQXN5bmModXJsKSkuaGVhZGVycztcbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIGFzeW5jIGdldFJlcXVlc3RNZXRhZGF0YUFzeW5jKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB1cmwpIHtcbiAgICAgICAgY29uc3QgdGhpc0NyZWRzID0gdGhpcy5jcmVkZW50aWFscztcbiAgICAgICAgaWYgKCF0aGlzQ3JlZHMuYWNjZXNzX3Rva2VuICYmXG4gICAgICAgICAgICAhdGhpc0NyZWRzLnJlZnJlc2hfdG9rZW4gJiZcbiAgICAgICAgICAgICF0aGlzLmFwaUtleSAmJlxuICAgICAgICAgICAgIXRoaXMucmVmcmVzaEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzLCByZWZyZXNoIHRva2VuLCBBUEkga2V5IG9yIHJlZnJlc2ggaGFuZGxlciBjYWxsYmFjayBpcyBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNDcmVkcy5hY2Nlc3NfdG9rZW4gJiYgIXRoaXMuaXNUb2tlbkV4cGlyaW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXNDcmVkcy50b2tlbl90eXBlID0gdGhpc0NyZWRzLnRva2VuX3R5cGUgfHwgJ0JlYXJlcic7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHRoaXNDcmVkcy50b2tlbl90eXBlICsgJyAnICsgdGhpc0NyZWRzLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4geyBoZWFkZXJzOiB0aGlzLmFkZFNoYXJlZE1ldGFkYXRhSGVhZGVycyhoZWFkZXJzKSB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHJlZnJlc2hIYW5kbGVyIGV4aXN0cywgY2FsbCBwcm9jZXNzQW5kVmFsaWRhdGVSZWZyZXNoSGFuZGxlcigpLlxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgcmVmcmVzaGVkQWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnByb2Nlc3NBbmRWYWxpZGF0ZVJlZnJlc2hIYW5kbGVyKCk7XG4gICAgICAgICAgICBpZiAocmVmcmVzaGVkQWNjZXNzVG9rZW4gPT09IG51bGwgfHwgcmVmcmVzaGVkQWNjZXNzVG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZnJlc2hlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3JlZGVudGlhbHMocmVmcmVzaGVkQWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRoaXMuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaGVhZGVyczogdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycykgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcGlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGhlYWRlcnM6IHsgJ1gtR29vZy1BcGktS2V5JzogdGhpcy5hcGlLZXkgfSB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByID0gbnVsbDtcbiAgICAgICAgbGV0IHRva2VucyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4odGhpc0NyZWRzLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgICAgdG9rZW5zID0gci50b2tlbnM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgZSA9IGVycjtcbiAgICAgICAgICAgIGlmIChlLnJlc3BvbnNlICYmXG4gICAgICAgICAgICAgICAgKGUucmVzcG9uc2Uuc3RhdHVzID09PSA0MDMgfHwgZS5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBgQ291bGQgbm90IHJlZnJlc2ggYWNjZXNzIHRva2VuOiAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuY3JlZGVudGlhbHM7XG4gICAgICAgIGNyZWRlbnRpYWxzLnRva2VuX3R5cGUgPSBjcmVkZW50aWFscy50b2tlbl90eXBlIHx8ICdCZWFyZXInO1xuICAgICAgICB0b2tlbnMucmVmcmVzaF90b2tlbiA9IGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW47XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSB0b2tlbnM7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBjcmVkZW50aWFscy50b2tlbl90eXBlICsgJyAnICsgdG9rZW5zLmFjY2Vzc190b2tlbixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgaGVhZGVyczogdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycyksIHJlczogci5yZXMgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGFuIFVSTCB0byByZXZva2UgdGhlIGdpdmVuIHRva2VuLlxuICAgICAqIEBwYXJhbSB0b2tlbiBUaGUgZXhpc3RpbmcgdG9rZW4gdG8gYmUgcmV2b2tlZC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbnN0YW5jZSBtZXRob2Qge0BsaW5rIE9BdXRoMkNsaWVudC5nZXRSZXZva2VUb2tlblVSTH1cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmV2b2tlVG9rZW5VcmwodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPQXV0aDJDbGllbnQoKS5nZXRSZXZva2VUb2tlblVSTCh0b2tlbikudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgVVJMIHRvIHJldm9rZSB0aGUgZ2l2ZW4gdG9rZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdG9rZW4gVGhlIGV4aXN0aW5nIHRva2VuIHRvIGJlIHJldm9rZWQuXG4gICAgICovXG4gICAgZ2V0UmV2b2tlVG9rZW5VUkwodG9rZW4pIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmVuZHBvaW50cy5vYXV0aDJSZXZva2VVcmwpO1xuICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIHJldm9rZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgLi4uT0F1dGgyQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdGhpcy5nZXRSZXZva2VUb2tlblVSTCh0b2tlbikudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ZXJcbiAgICAgICAgICAgICAgICAucmVxdWVzdChvcHRzKVxuICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV2b2tlQ3JlZGVudGlhbHMoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJldm9rZUNyZWRlbnRpYWxzQXN5bmMoKS50aGVuKHJlcyA9PiBjYWxsYmFjayhudWxsLCByZXMpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXZva2VDcmVkZW50aWFsc0FzeW5jKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmV2b2tlQ3JlZGVudGlhbHNBc3luYygpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbjtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IHt9O1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldm9rZVRva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRva2VuIHRvIHJldm9rZS4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0KG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0QXN5bmMob3B0cykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSwgZS5yZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBc3luYyhvcHRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZXF1ZXN0QXN5bmMob3B0cywgcmVBdXRoUmV0cmllZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByMjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RNZXRhZGF0YUFzeW5jKG9wdHMudXJsKTtcbiAgICAgICAgICAgIG9wdHMuaGVhZGVycyA9IG9wdHMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgICAgIGlmIChyLmhlYWRlcnMgJiYgci5oZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J10pIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSA9IHIuaGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHIuaGVhZGVycyAmJiByLmhlYWRlcnMuQXV0aG9yaXphdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gci5oZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hcGlLZXkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ1gtR29vZy1BcGktS2V5J10gPSB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIyID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBlLnJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMuc3RhdHVzO1xuICAgICAgICAgICAgICAgIC8vIFJldHJ5IHRoZSByZXF1ZXN0IGZvciBtZXRhZGF0YSBpZiB0aGUgZm9sbG93aW5nIGNyaXRlcmlhIGFyZSB0cnVlOlxuICAgICAgICAgICAgICAgIC8vIC0gV2UgaGF2ZW4ndCBhbHJlYWR5IHJldHJpZWQuICBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHJldHJ5IG9uY2UuXG4gICAgICAgICAgICAgICAgLy8gLSBUaGUgcmVzcG9uc2Ugd2FzIGEgNDAxIG9yIGEgNDAzXG4gICAgICAgICAgICAgICAgLy8gLSBUaGUgcmVxdWVzdCBkaWRuJ3Qgc2VuZCBhIHJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgLy8gLSBBbiBhY2Nlc3NfdG9rZW4gYW5kIHJlZnJlc2hfdG9rZW4gd2VyZSBhdmFpbGFibGUsIGJ1dCBlaXRoZXIgbm9cbiAgICAgICAgICAgICAgICAvLyAgIGV4cGlyeV9kYXRlIHdhcyBhdmFpbGFibGUgb3IgdGhlIGZvcmNlUmVmcmVzaE9uRmFpbHVyZSBmbGFnIGlzIHNldC5cbiAgICAgICAgICAgICAgICAvLyAgIFRoZSBhYnNlbnQgZXhwaXJ5X2RhdGUgY2FzZSBjYW4gaGFwcGVuIHdoZW4gZGV2ZWxvcGVycyBzdGFzaCB0aGVcbiAgICAgICAgICAgICAgICAvLyAgIGFjY2Vzc190b2tlbiBhbmQgcmVmcmVzaF90b2tlbiBmb3IgbGF0ZXIgdXNlLCBidXQgdGhlIGFjY2Vzc190b2tlblxuICAgICAgICAgICAgICAgIC8vICAgZmFpbHMgb24gdGhlIGZpcnN0IHRyeSBiZWNhdXNlIGl0J3MgZXhwaXJlZC4gU29tZSBkZXZlbG9wZXJzIG1heVxuICAgICAgICAgICAgICAgIC8vICAgY2hvb3NlIHRvIGVuYWJsZSBmb3JjZVJlZnJlc2hPbkZhaWx1cmUgdG8gbWl0aWdhdGUgdGltZS1yZWxhdGVkXG4gICAgICAgICAgICAgICAgLy8gICBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gT3IgdGhlIGZvbGxvd2luZyBjcml0ZXJpYSBhcmUgdHJ1ZTpcbiAgICAgICAgICAgICAgICAvLyAtIFdlIGhhdmVuJ3QgYWxyZWFkeSByZXRyaWVkLiAgSXQgb25seSBtYWtlcyBzZW5zZSB0byByZXRyeSBvbmNlLlxuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlc3BvbnNlIHdhcyBhIDQwMSBvciBhIDQwM1xuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlcXVlc3QgZGlkbid0IHNlbmQgYSByZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIC8vIC0gTm8gcmVmcmVzaF90b2tlbiB3YXMgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgLy8gLSBBbiBhY2Nlc3NfdG9rZW4gYW5kIGEgcmVmcmVzaEhhbmRsZXIgY2FsbGJhY2sgd2VyZSBhdmFpbGFibGUsIGJ1dFxuICAgICAgICAgICAgICAgIC8vICAgZWl0aGVyIG5vIGV4cGlyeV9kYXRlIHdhcyBhdmFpbGFibGUgb3IgdGhlIGZvcmNlUmVmcmVzaE9uRmFpbHVyZVxuICAgICAgICAgICAgICAgIC8vICAgZmxhZyBpcyBzZXQuIFRoZSBhY2Nlc3NfdG9rZW4gZmFpbHMgb24gdGhlIGZpcnN0IHRyeSBiZWNhdXNlIGl0J3NcbiAgICAgICAgICAgICAgICAvLyAgIGV4cGlyZWQuIFNvbWUgZGV2ZWxvcGVycyBtYXkgY2hvb3NlIHRvIGVuYWJsZSBmb3JjZVJlZnJlc2hPbkZhaWx1cmVcbiAgICAgICAgICAgICAgICAvLyAgIHRvIG1pdGlnYXRlIHRpbWUtcmVsYXRlZCBlcnJvcnMuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF5UmVxdWlyZVJlZnJlc2ggPSB0aGlzLmNyZWRlbnRpYWxzICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMuY3JlZGVudGlhbHMuZXhwaXJ5X2RhdGUgfHwgdGhpcy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heVJlcXVpcmVSZWZyZXNoV2l0aE5vUmVmcmVzaFRva2VuID0gdGhpcy5jcmVkZW50aWFscyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuICYmXG4gICAgICAgICAgICAgICAgICAgICghdGhpcy5jcmVkZW50aWFscy5leHBpcnlfZGF0ZSB8fCB0aGlzLmZvcmNlUmVmcmVzaE9uRmFpbHVyZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoSGFuZGxlcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlYWRhYmxlU3RyZWFtID0gcmVzLmNvbmZpZy5kYXRhIGluc3RhbmNlb2Ygc3RyZWFtLlJlYWRhYmxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXV0aEVyciA9IHN0YXR1c0NvZGUgPT09IDQwMSB8fCBzdGF0dXNDb2RlID09PSA0MDM7XG4gICAgICAgICAgICAgICAgaWYgKCFyZUF1dGhSZXRyaWVkICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aEVyciAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNSZWFkYWJsZVN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICBtYXlSZXF1aXJlUmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBc3luYyhvcHRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlQXV0aFJldHJpZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNBdXRoRXJyICYmXG4gICAgICAgICAgICAgICAgICAgICFpc1JlYWRhYmxlU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgIG1heVJlcXVpcmVSZWZyZXNoV2l0aE5vUmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZEFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5wcm9jZXNzQW5kVmFsaWRhdGVSZWZyZXNoSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaGVkQWNjZXNzVG9rZW4gPT09IG51bGwgfHwgcmVmcmVzaGVkQWNjZXNzVG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZnJlc2hlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDcmVkZW50aWFscyhyZWZyZXNoZWRBY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFzeW5jKG9wdHMsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIyO1xuICAgIH1cbiAgICB2ZXJpZnlJZFRva2VuKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBhY2NlcHQgdHdvIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGFuIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgICAvLyBDaGVjayB0aGUgdHlwZXMgdG8gaGVscCB1c2VycyB1cGdyYWRlIHdpdGggbGVzcyBwYWluLlxuICAgICAgICAvLyBUaGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkIGFmdGVyIGEgMi4wIHJlbGVhc2UuXG4gICAgICAgIGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBtZXRob2QgYWNjZXB0cyBhbiBvcHRpb25zIG9iamVjdCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLCB3aGljaCBpbmNsdWRlcyB0aGUgaWRUb2tlbiwgYXVkaWVuY2UsIGFuZCBtYXhFeHBpcnkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnZlcmlmeUlkVG9rZW5Bc3luYyhvcHRpb25zKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcmlmeUlkVG9rZW5Bc3luYyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyB2ZXJpZnlJZFRva2VuQXN5bmMob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuaWRUb2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdmVyaWZ5SWRUb2tlbiBtZXRob2QgcmVxdWlyZXMgYW4gSUQgVG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RmVkZXJhdGVkU2lnbm9uQ2VydHNBc3luYygpO1xuICAgICAgICBjb25zdCBsb2dpbiA9IGF3YWl0IHRoaXMudmVyaWZ5U2lnbmVkSnd0V2l0aENlcnRzQXN5bmMob3B0aW9ucy5pZFRva2VuLCByZXNwb25zZS5jZXJ0cywgb3B0aW9ucy5hdWRpZW5jZSwgdGhpcy5pc3N1ZXJzLCBvcHRpb25zLm1heEV4cGlyeSk7XG4gICAgICAgIHJldHVybiBsb2dpbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2J0YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvdmlzaW9uZWQgYWNjZXNzIHRva2VuLiAgRXNwZWNpYWxseSB1c2VmdWxcbiAgICAgKiBpZiB5b3Ugd2FudCB0byBjaGVjayB0aGUgc2NvcGVzIHRoYXQgd2VyZSBwcm92aXNpb25lZCB0byBhIGdpdmVuIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjY2Vzc1Rva2VuIFJlcXVpcmVkLiAgVGhlIEFjY2VzcyBUb2tlbiBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZ2V0XG4gICAgICogdXNlciBpbmZvLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFRva2VuSW5mbyhhY2Nlc3NUb2tlbikge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgICAgICAuLi5PQXV0aDJDbGllbnQuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVybDogdGhpcy5lbmRwb2ludHMudG9rZW5JbmZvVXJsLnRvU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbmZvID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBleHBpcnlfZGF0ZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgICAgICAgICAgc2NvcGVzOiBkYXRhLnNjb3BlLnNwbGl0KCcgJyksXG4gICAgICAgIH0sIGRhdGEpO1xuICAgICAgICBkZWxldGUgaW5mby5leHBpcmVzX2luO1xuICAgICAgICBkZWxldGUgaW5mby5zY29wZTtcbiAgICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIGdldEZlZGVyYXRlZFNpZ25vbkNlcnRzKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5nZXRGZWRlcmF0ZWRTaWdub25DZXJ0c0FzeW5jKCkudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIuY2VydHMsIHIucmVzKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmVkZXJhdGVkU2lnbm9uQ2VydHNBc3luYygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGdldEZlZGVyYXRlZFNpZ25vbkNlcnRzQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IG5vd1RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gKDAsIGNyeXB0b18xLmhhc0Jyb3dzZXJDcnlwdG8pKClcbiAgICAgICAgICAgID8gQ2VydGlmaWNhdGVGb3JtYXQuSldLXG4gICAgICAgICAgICA6IENlcnRpZmljYXRlRm9ybWF0LlBFTTtcbiAgICAgICAgaWYgKHRoaXMuY2VydGlmaWNhdGVFeHBpcnkgJiZcbiAgICAgICAgICAgIG5vd1RpbWUgPCB0aGlzLmNlcnRpZmljYXRlRXhwaXJ5LmdldFRpbWUoKSAmJlxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUNhY2hlRm9ybWF0ID09PSBmb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGNlcnRzOiB0aGlzLmNlcnRpZmljYXRlQ2FjaGUsIGZvcm1hdCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIENlcnRpZmljYXRlRm9ybWF0LlBFTTpcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmVuZHBvaW50cy5vYXV0aDJGZWRlcmF0ZWRTaWdub25QZW1DZXJ0c1VybC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDZXJ0aWZpY2F0ZUZvcm1hdC5KV0s6XG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5lbmRwb2ludHMub2F1dGgyRmVkZXJhdGVkU2lnbm9uSndrQ2VydHNVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjZXJ0aWZpY2F0ZSBmb3JtYXQgJHtmb3JtYXR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgLi4uT0F1dGgyQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IGBGYWlsZWQgdG8gcmV0cmlldmUgdmVyaWZpY2F0aW9uIGNlcnRpZmljYXRlczogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0gcmVzID8gcmVzLmhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGNhY2hlQWdlID0gLTE7XG4gICAgICAgIGlmIChjYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKCdtYXgtYWdlPShbMC05XSopJyk7XG4gICAgICAgICAgICBjb25zdCByZWdleFJlc3VsdCA9IHBhdHRlcm4uZXhlYyhjYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKHJlZ2V4UmVzdWx0ICYmIHJlZ2V4UmVzdWx0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIENhY2hlIHJlc3VsdHMgd2l0aCBtYXgtYWdlIChpbiBzZWNvbmRzKVxuICAgICAgICAgICAgICAgIGNhY2hlQWdlID0gTnVtYmVyKHJlZ2V4UmVzdWx0WzFdKSAqIDEwMDA7IC8vIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBjZXJ0aWZpY2F0ZXMgPSB7fTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgQ2VydGlmaWNhdGVGb3JtYXQuUEVNOlxuICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcyA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDZXJ0aWZpY2F0ZUZvcm1hdC5KV0s6XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmVzLmRhdGEua2V5cykge1xuICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXNba2V5LmtpZF0gPSBrZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNlcnRpZmljYXRlIGZvcm1hdCAke2Zvcm1hdH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlRXhwaXJ5ID1cbiAgICAgICAgICAgIGNhY2hlQWdlID09PSAtMSA/IG51bGwgOiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgY2FjaGVBZ2UpO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlQ2FjaGUgPSBjZXJ0aWZpY2F0ZXM7XG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVDYWNoZUZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHsgY2VydHM6IGNlcnRpZmljYXRlcywgZm9ybWF0LCByZXMgfTtcbiAgICB9XG4gICAgZ2V0SWFwUHVibGljS2V5cyhjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0SWFwUHVibGljS2V5c0FzeW5jKCkudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIucHVia2V5cywgci5yZXMpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJYXBQdWJsaWNLZXlzQXN5bmMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRJYXBQdWJsaWNLZXlzQXN5bmMoKSB7XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLm9hdXRoMklhcFB1YmxpY0tleVVybC50b1N0cmluZygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAuLi5PQXV0aDJDbGllbnQuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gYEZhaWxlZCB0byByZXRyaWV2ZSB2ZXJpZmljYXRpb24gY2VydGlmaWNhdGVzOiAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBwdWJrZXlzOiByZXMuZGF0YSwgcmVzIH07XG4gICAgfVxuICAgIHZlcmlmeVNpZ25lZEp3dFdpdGhDZXJ0cygpIHtcbiAgICAgICAgLy8gVG8gbWFrZSB0aGUgY29kZSBjb21wYXRpYmxlIHdpdGggYnJvd3NlciBTdWJ0bGVDcnlwdG8gd2UgbmVlZCB0byBtYWtlXG4gICAgICAgIC8vIHRoaXMgbWV0aG9kIGFzeW5jLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlcmlmeVNpZ25lZEp3dFdpdGhDZXJ0cyBpcyByZW1vdmVkLCBwbGVhc2UgdXNlIHZlcmlmeVNpZ25lZEp3dFdpdGhDZXJ0c0FzeW5jIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFZlcmlmeSB0aGUgaWQgdG9rZW4gaXMgc2lnbmVkIHdpdGggdGhlIGNvcnJlY3QgY2VydGlmaWNhdGVcbiAgICAgKiBhbmQgaXMgZnJvbSB0aGUgY29ycmVjdCBhdWRpZW5jZS5cbiAgICAgKiBAcGFyYW0gand0IFRoZSBqd3QgdG8gdmVyaWZ5IChUaGUgSUQgVG9rZW4gaW4gdGhpcyBjYXNlKS5cbiAgICAgKiBAcGFyYW0gY2VydHMgVGhlIGFycmF5IG9mIGNlcnRzIHRvIHRlc3QgdGhlIGp3dCBhZ2FpbnN0LlxuICAgICAqIEBwYXJhbSByZXF1aXJlZEF1ZGllbmNlIFRoZSBhdWRpZW5jZSB0byB0ZXN0IHRoZSBqd3QgYWdhaW5zdC5cbiAgICAgKiBAcGFyYW0gaXNzdWVycyBUaGUgYWxsb3dlZCBpc3N1ZXJzIG9mIHRoZSBqd3QgKE9wdGlvbmFsKS5cbiAgICAgKiBAcGFyYW0gbWF4RXhwaXJ5IFRoZSBtYXggZXhwaXJ5IHRoZSBjZXJ0aWZpY2F0ZSBjYW4gYmUgKE9wdGlvbmFsKS5cbiAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byBMb2dpblRpY2tldCBvbiB2ZXJpZmljYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdmVyaWZ5U2lnbmVkSnd0V2l0aENlcnRzQXN5bmMoand0LCBjZXJ0cywgcmVxdWlyZWRBdWRpZW5jZSwgaXNzdWVycywgbWF4RXhwaXJ5KSB7XG4gICAgICAgIGNvbnN0IGNyeXB0byA9ICgwLCBjcnlwdG9fMS5jcmVhdGVDcnlwdG8pKCk7XG4gICAgICAgIGlmICghbWF4RXhwaXJ5KSB7XG4gICAgICAgICAgICBtYXhFeHBpcnkgPSBPQXV0aDJDbGllbnQuREVGQVVMVF9NQVhfVE9LRU5fTElGRVRJTUVfU0VDU187XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqd3Quc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2Ygc2VnbWVudHMgaW4gdG9rZW46ICcgKyBqd3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25lZCA9IHNlZ21lbnRzWzBdICsgJy4nICsgc2VnbWVudHNbMV07XG4gICAgICAgIGxldCBzaWduYXR1cmUgPSBzZWdtZW50c1syXTtcbiAgICAgICAgbGV0IGVudmVsb3BlO1xuICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVudmVsb3BlID0gSlNPTi5wYXJzZShjcnlwdG8uZGVjb2RlQmFzZTY0U3RyaW5nVXRmOChzZWdtZW50c1swXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gYENhbid0IHBhcnNlIHRva2VuIGVudmVsb3BlOiAke3NlZ21lbnRzWzBdfSc6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudmVsb3BlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBwYXJzZSB0b2tlbiBlbnZlbG9wZTogXCIgKyBzZWdtZW50c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKGNyeXB0by5kZWNvZGVCYXNlNjRTdHJpbmdVdGY4KHNlZ21lbnRzWzFdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBgQ2FuJ3QgcGFyc2UgdG9rZW4gcGF5bG9hZCAnJHtzZWdtZW50c1swXX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGFyc2UgdG9rZW4gcGF5bG9hZDogXCIgKyBzZWdtZW50c1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2VydHMsIGVudmVsb3BlLmtpZCkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHByZXNlbnQsIHRoZW4gdGhlcmUncyBubyByZWFzb24gdG8gYXR0ZW1wdCB2ZXJpZmljYXRpb25cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGVtIGZvdW5kIGZvciBlbnZlbG9wZTogJyArIEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VydCA9IGNlcnRzW2VudmVsb3BlLmtpZF07XG4gICAgICAgIGlmIChlbnZlbG9wZS5hbGcgPT09ICdFUzI1NicpIHtcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IGZvcm1hdEVjZHNhLmpvc2VUb0RlcihzaWduYXR1cmUsICdFUzI1NicpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ZXJpZmllZCA9IGF3YWl0IGNyeXB0by52ZXJpZnkoY2VydCwgc2lnbmVkLCBzaWduYXR1cmUpO1xuICAgICAgICBpZiAoIXZlcmlmaWVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdG9rZW4gc2lnbmF0dXJlOiAnICsgand0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBheWxvYWQuaWF0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGlzc3VlIHRpbWUgaW4gdG9rZW46ICcgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXlsb2FkLmV4cCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBleHBpcmF0aW9uIHRpbWUgaW4gdG9rZW46ICcgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWF0ID0gTnVtYmVyKHBheWxvYWQuaWF0KTtcbiAgICAgICAgaWYgKGlzTmFOKGlhdCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lhdCBmaWVsZCB1c2luZyBpbnZhbGlkIGZvcm1hdCcpO1xuICAgICAgICBjb25zdCBleHAgPSBOdW1iZXIocGF5bG9hZC5leHApO1xuICAgICAgICBpZiAoaXNOYU4oZXhwKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwIGZpZWxkIHVzaW5nIGludmFsaWQgZm9ybWF0Jyk7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDtcbiAgICAgICAgaWYgKGV4cCA+PSBub3cgKyBtYXhFeHBpcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwaXJhdGlvbiB0aW1lIHRvbyBmYXIgaW4gZnV0dXJlOiAnICsgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVhcmxpZXN0ID0gaWF0IC0gT0F1dGgyQ2xpZW50LkNMT0NLX1NLRVdfU0VDU187XG4gICAgICAgIGNvbnN0IGxhdGVzdCA9IGV4cCArIE9BdXRoMkNsaWVudC5DTE9DS19TS0VXX1NFQ1NfO1xuICAgICAgICBpZiAobm93IDwgZWFybGllc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gdXNlZCB0b28gZWFybHksICcgK1xuICAgICAgICAgICAgICAgIG5vdyArXG4gICAgICAgICAgICAgICAgJyA8ICcgK1xuICAgICAgICAgICAgICAgIGVhcmxpZXN0ICtcbiAgICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vdyA+IGxhdGVzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiB1c2VkIHRvbyBsYXRlLCAnICtcbiAgICAgICAgICAgICAgICBub3cgK1xuICAgICAgICAgICAgICAgICcgPiAnICtcbiAgICAgICAgICAgICAgICBsYXRlc3QgK1xuICAgICAgICAgICAgICAgICc6ICcgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNzdWVycyAmJiBpc3N1ZXJzLmluZGV4T2YocGF5bG9hZC5pc3MpIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlzc3VlciwgZXhwZWN0ZWQgb25lIG9mIFsnICtcbiAgICAgICAgICAgICAgICBpc3N1ZXJzICtcbiAgICAgICAgICAgICAgICAnXSwgYnV0IGdvdCAnICtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgdGhlIGF1ZGllbmNlIG1hdGNoZXMgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlZEF1ZGllbmNlICE9PSAndW5kZWZpbmVkJyAmJiByZXF1aXJlZEF1ZGllbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBhdWQgPSBwYXlsb2FkLmF1ZDtcbiAgICAgICAgICAgIGxldCBhdWRWZXJpZmllZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVpcmVkQXVkaWVuY2UgaXMgYW4gYXJyYXksIGNoZWNrIGlmIGl0IGNvbnRhaW5zIHRva2VuXG4gICAgICAgICAgICAvLyBhdWRpZW5jZVxuICAgICAgICAgICAgaWYgKHJlcXVpcmVkQXVkaWVuY2UuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXVkVmVyaWZpZWQgPSByZXF1aXJlZEF1ZGllbmNlLmluZGV4T2YoYXVkKSA+IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXVkVmVyaWZpZWQgPSBhdWQgPT09IHJlcXVpcmVkQXVkaWVuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWF1ZFZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyByZWNpcGllbnQsIHBheWxvYWQgYXVkaWVuY2UgIT0gcmVxdWlyZWRBdWRpZW5jZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgbG9naW50aWNrZXRfMS5Mb2dpblRpY2tldChlbnZlbG9wZSwgcGF5bG9hZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBBY2Nlc3NUb2tlblJlc3BvbnNlIHR5cGUgaWZcbiAgICAgKiByZWZyZXNoSGFuZGxlciBpcyBkZWZpbmVkLlxuICAgICAqIElmIG5vdCwgbm90aGluZyBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9jZXNzQW5kVmFsaWRhdGVSZWZyZXNoSGFuZGxlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlZnJlc2hIYW5kbGVyKCk7XG4gICAgICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuUmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG9rZW4gaXMgcmV0dXJuZWQgYnkgdGhlIHJlZnJlc2hIYW5kbGVyIGNhbGxiYWNrLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc1Rva2VuUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSB0b2tlbiBpcyBleHBpcmVkIG9yIHdpbGwgZXhwaXJlIHdpdGhpblxuICAgICAqIGVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpc21pbGxpc2Vjb25kcy5cbiAgICAgKiBJZiB0aGVyZSBpcyBubyBleHBpcnkgdGltZSwgYXNzdW1lcyB0aGUgdG9rZW4gaXMgbm90IGV4cGlyZWQgb3IgZXhwaXJpbmcuXG4gICAgICovXG4gICAgaXNUb2tlbkV4cGlyaW5nKCkge1xuICAgICAgICBjb25zdCBleHBpcnlEYXRlID0gdGhpcy5jcmVkZW50aWFscy5leHBpcnlfZGF0ZTtcbiAgICAgICAgcmV0dXJuIGV4cGlyeURhdGVcbiAgICAgICAgICAgID8gZXhwaXJ5RGF0ZSA8PSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuT0F1dGgyQ2xpZW50ID0gT0F1dGgyQ2xpZW50O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgaW5zdGFuY2UncyB7QGxpbmsgT0F1dGgyQ2xpZW50LmVuZHBvaW50c31cbiAqL1xuT0F1dGgyQ2xpZW50LkdPT0dMRV9UT0tFTl9JTkZPX1VSTCA9ICdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbmluZm8nO1xuLyoqXG4gKiBDbG9jayBza2V3IC0gZml2ZSBtaW51dGVzIGluIHNlY29uZHNcbiAqL1xuT0F1dGgyQ2xpZW50LkNMT0NLX1NLRVdfU0VDU18gPSAzMDA7XG4vKipcbiAqIFRoZSBkZWZhdWx0IG1heCBUb2tlbiBMaWZldGltZSBpcyBvbmUgZGF5IGluIHNlY29uZHNcbiAqL1xuT0F1dGgyQ2xpZW50LkRFRkFVTFRfTUFYX1RPS0VOX0xJRkVUSU1FX1NFQ1NfID0gODY0MDA7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTMgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbXB1dGUgPSB2b2lkIDA7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG5jb25zdCBnY3BNZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBvYXV0aDJjbGllbnRfMSA9IHJlcXVpcmUoXCIuL29hdXRoMmNsaWVudFwiKTtcbmNsYXNzIENvbXB1dGUgZXh0ZW5kcyBvYXV0aDJjbGllbnRfMS5PQXV0aDJDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBzZXJ2aWNlIGFjY291bnQgY3JlZGVudGlhbHMuXG4gICAgICpcbiAgICAgKiBSZXRyaWV2ZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgbWV0YWRhdGEgc2VydmVyLlxuICAgICAqIFNlZTogaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy9hY2Nlc3MvYXV0aGVudGljYXRlLXdvcmtsb2FkcyNhcHBsaWNhdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYW4gZXhwaXJlZCByZWZyZXNoIHRva2VuLCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVcbiAgICAgICAgLy8gcmVmcmVzaGVkIGJlZm9yZSB0aGUgZmlyc3QgQVBJIGNhbGwgaXMgbWFkZS5cbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IHsgZXhwaXJ5X2RhdGU6IDEsIHJlZnJlc2hfdG9rZW46ICdjb21wdXRlLXBsYWNlaG9sZGVyJyB9O1xuICAgICAgICB0aGlzLnNlcnZpY2VBY2NvdW50RW1haWwgPSBvcHRpb25zLnNlcnZpY2VBY2NvdW50RW1haWwgfHwgJ2RlZmF1bHQnO1xuICAgICAgICB0aGlzLnNjb3BlcyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY29wZXMpXG4gICAgICAgICAgICA/IG9wdGlvbnMuc2NvcGVzXG4gICAgICAgICAgICA6IG9wdGlvbnMuc2NvcGVzXG4gICAgICAgICAgICAgICAgPyBbb3B0aW9ucy5zY29wZXNdXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiBVbnVzZWQgcGFyYW1ldGVyXG4gICAgICovXG4gICAgYXN5bmMgcmVmcmVzaFRva2VuTm9DYWNoZShcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcmVmcmVzaFRva2VuKSB7XG4gICAgICAgIGNvbnN0IHRva2VuUGF0aCA9IGBzZXJ2aWNlLWFjY291bnRzLyR7dGhpcy5zZXJ2aWNlQWNjb3VudEVtYWlsfS90b2tlbmA7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiB0b2tlblBhdGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU9wdGlvbnMucGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICBzY29wZXM6IHRoaXMuc2NvcGVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGdjcE1ldGFkYXRhLmluc3RhbmNlKGluc3RhbmNlT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgZ2F4aW9zXzEuR2F4aW9zRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBgQ291bGQgbm90IHJlZnJlc2ggYWNjZXNzIHRva2VuOiAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIHRoaXMud3JhcEVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlbnMgPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmV4cGlyZXNfaW4pIHtcbiAgICAgICAgICAgIHRva2Vucy5leHBpcnlfZGF0ZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgZGF0YS5leHBpcmVzX2luICogMTAwMDtcbiAgICAgICAgICAgIGRlbGV0ZSB0b2tlbnMuZXhwaXJlc19pbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3Rva2VucycsIHRva2Vucyk7XG4gICAgICAgIHJldHVybiB7IHRva2VucywgcmVzOiBudWxsIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgYW4gSUQgdG9rZW4uXG4gICAgICogQHBhcmFtIHRhcmdldEF1ZGllbmNlIHRoZSBhdWRpZW5jZSBmb3IgdGhlIGZldGNoZWQgSUQgdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgZmV0Y2hJZFRva2VuKHRhcmdldEF1ZGllbmNlKSB7XG4gICAgICAgIGNvbnN0IGlkVG9rZW5QYXRoID0gYHNlcnZpY2UtYWNjb3VudHMvJHt0aGlzLnNlcnZpY2VBY2NvdW50RW1haWx9L2lkZW50aXR5YCArXG4gICAgICAgICAgICBgP2Zvcm1hdD1mdWxsJmF1ZGllbmNlPSR7dGFyZ2V0QXVkaWVuY2V9YDtcbiAgICAgICAgbGV0IGlkVG9rZW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IGlkVG9rZW5QYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlkVG9rZW4gPSBhd2FpdCBnY3BNZXRhZGF0YS5pbnN0YW5jZShpbnN0YW5jZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gYENvdWxkIG5vdCBmZXRjaCBJRCB0b2tlbjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkVG9rZW47XG4gICAgfVxuICAgIHdyYXBFcnJvcihlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGUucmVzcG9uc2U7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnN0YXR1cykge1xuICAgICAgICAgICAgZS5zdGF0dXMgPSByZXMuc3RhdHVzO1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICdBIEZvcmJpZGRlbiBlcnJvciB3YXMgcmV0dXJuZWQgd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBhbiBhY2Nlc3MgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAndG9rZW4gZm9yIHRoZSBDb21wdXRlIEVuZ2luZSBidWlsdC1pbiBzZXJ2aWNlIGFjY291bnQuIFRoaXMgbWF5IGJlIGJlY2F1c2UgdGhlIENvbXB1dGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnRW5naW5lIGluc3RhbmNlIGRvZXMgbm90IGhhdmUgdGhlIGNvcnJlY3QgcGVybWlzc2lvbiBzY29wZXMgc3BlY2lmaWVkOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICdBIE5vdCBGb3VuZCBlcnJvciB3YXMgcmV0dXJuZWQgd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBhbiBhY2Nlc3MnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbiBmb3IgdGhlIENvbXB1dGUgRW5naW5lIGJ1aWx0LWluIHNlcnZpY2UgYWNjb3VudC4gVGhpcyBtYXkgYmUgYmVjYXVzZSB0aGUgQ29tcHV0ZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdFbmdpbmUgaW5zdGFuY2UgZG9lcyBub3QgaGF2ZSBhbnkgcGVybWlzc2lvbiBzY29wZXMgc3BlY2lmaWVkOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQ29tcHV0ZSA9IENvbXB1dGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLklkVG9rZW5DbGllbnQgPSB2b2lkIDA7XG5jb25zdCBvYXV0aDJjbGllbnRfMSA9IHJlcXVpcmUoXCIuL29hdXRoMmNsaWVudFwiKTtcbmNsYXNzIElkVG9rZW5DbGllbnQgZXh0ZW5kcyBvYXV0aDJjbGllbnRfMS5PQXV0aDJDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEdvb2dsZSBJRCBUb2tlbiBjbGllbnRcbiAgICAgKlxuICAgICAqIFJldHJpZXZlIElEIHRva2VuIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZlci5cbiAgICAgKiBTZWU6IGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL2dldC1pZC10b2tlbiNtZXRhZGF0YS1zZXJ2ZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlID0gb3B0aW9ucy50YXJnZXRBdWRpZW5jZTtcbiAgICAgICAgdGhpcy5pZFRva2VuUHJvdmlkZXIgPSBvcHRpb25zLmlkVG9rZW5Qcm92aWRlcjtcbiAgICB9XG4gICAgYXN5bmMgZ2V0UmVxdWVzdE1ldGFkYXRhQXN5bmMoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHVybCkge1xuICAgICAgICBpZiAoIXRoaXMuY3JlZGVudGlhbHMuaWRfdG9rZW4gfHxcbiAgICAgICAgICAgICF0aGlzLmNyZWRlbnRpYWxzLmV4cGlyeV9kYXRlIHx8XG4gICAgICAgICAgICB0aGlzLmlzVG9rZW5FeHBpcmluZygpKSB7XG4gICAgICAgICAgICBjb25zdCBpZFRva2VuID0gYXdhaXQgdGhpcy5pZFRva2VuUHJvdmlkZXIuZmV0Y2hJZFRva2VuKHRoaXMudGFyZ2V0QXVkaWVuY2UpO1xuICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IHtcbiAgICAgICAgICAgICAgICBpZF90b2tlbjogaWRUb2tlbixcbiAgICAgICAgICAgICAgICBleHBpcnlfZGF0ZTogdGhpcy5nZXRJZFRva2VuRXhwaXJ5RGF0ZShpZFRva2VuKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRoaXMuY3JlZGVudGlhbHMuaWRfdG9rZW4sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGhlYWRlcnMgfTtcbiAgICB9XG4gICAgZ2V0SWRUb2tlbkV4cGlyeURhdGUoaWRUb2tlbikge1xuICAgICAgICBjb25zdCBwYXlsb2FkQjY0ID0gaWRUb2tlbi5zcGxpdCgnLicpWzFdO1xuICAgICAgICBpZiAocGF5bG9hZEI2NCkge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20ocGF5bG9hZEI2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdhc2NpaScpKTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLmV4cCAqIDEwMDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLklkVG9rZW5DbGllbnQgPSBJZFRva2VuQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HQ1BFbnYgPSB2b2lkIDA7XG5leHBvcnRzLmNsZWFyID0gY2xlYXI7XG5leHBvcnRzLmdldEVudiA9IGdldEVudjtcbmNvbnN0IGdjcE1ldGFkYXRhID0gcmVxdWlyZShcImdjcC1tZXRhZGF0YVwiKTtcbnZhciBHQ1BFbnY7XG4oZnVuY3Rpb24gKEdDUEVudikge1xuICAgIEdDUEVudltcIkFQUF9FTkdJTkVcIl0gPSBcIkFQUF9FTkdJTkVcIjtcbiAgICBHQ1BFbnZbXCJLVUJFUk5FVEVTX0VOR0lORVwiXSA9IFwiS1VCRVJORVRFU19FTkdJTkVcIjtcbiAgICBHQ1BFbnZbXCJDTE9VRF9GVU5DVElPTlNcIl0gPSBcIkNMT1VEX0ZVTkNUSU9OU1wiO1xuICAgIEdDUEVudltcIkNPTVBVVEVfRU5HSU5FXCJdID0gXCJDT01QVVRFX0VOR0lORVwiO1xuICAgIEdDUEVudltcIkNMT1VEX1JVTlwiXSA9IFwiQ0xPVURfUlVOXCI7XG4gICAgR0NQRW52W1wiTk9ORVwiXSA9IFwiTk9ORVwiO1xufSkoR0NQRW52IHx8IChleHBvcnRzLkdDUEVudiA9IEdDUEVudiA9IHt9KSk7XG5sZXQgZW52UHJvbWlzZTtcbmZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGVudlByb21pc2UgPSB1bmRlZmluZWQ7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRFbnYoKSB7XG4gICAgaWYgKGVudlByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGVudlByb21pc2U7XG4gICAgfVxuICAgIGVudlByb21pc2UgPSBnZXRFbnZNZW1vaXplZCgpO1xuICAgIHJldHVybiBlbnZQcm9taXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0RW52TWVtb2l6ZWQoKSB7XG4gICAgbGV0IGVudiA9IEdDUEVudi5OT05FO1xuICAgIGlmIChpc0FwcEVuZ2luZSgpKSB7XG4gICAgICAgIGVudiA9IEdDUEVudi5BUFBfRU5HSU5FO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Nsb3VkRnVuY3Rpb24oKSkge1xuICAgICAgICBlbnYgPSBHQ1BFbnYuQ0xPVURfRlVOQ1RJT05TO1xuICAgIH1cbiAgICBlbHNlIGlmIChhd2FpdCBpc0NvbXB1dGVFbmdpbmUoKSkge1xuICAgICAgICBpZiAoYXdhaXQgaXNLdWJlcm5ldGVzRW5naW5lKCkpIHtcbiAgICAgICAgICAgIGVudiA9IEdDUEVudi5LVUJFUk5FVEVTX0VOR0lORTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0Nsb3VkUnVuKCkpIHtcbiAgICAgICAgICAgIGVudiA9IEdDUEVudi5DTE9VRF9SVU47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbnYgPSBHQ1BFbnYuQ09NUFVURV9FTkdJTkU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVudiA9IEdDUEVudi5OT05FO1xuICAgIH1cbiAgICByZXR1cm4gZW52O1xufVxuZnVuY3Rpb24gaXNBcHBFbmdpbmUoKSB7XG4gICAgcmV0dXJuICEhKHByb2Nlc3MuZW52LkdBRV9TRVJWSUNFIHx8IHByb2Nlc3MuZW52LkdBRV9NT0RVTEVfTkFNRSk7XG59XG5mdW5jdGlvbiBpc0Nsb3VkRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhKHByb2Nlc3MuZW52LkZVTkNUSU9OX05BTUUgfHwgcHJvY2Vzcy5lbnYuRlVOQ1RJT05fVEFSR0VUKTtcbn1cbi8qKlxuICogVGhpcyBjaGVjayBvbmx5IHZlcmlmaWVzIHRoYXQgdGhlIGVudmlyb25tZW50IGlzIHJ1bm5pbmcga25hdGl2ZS5cbiAqIFRoaXMgbXVzdCBiZSBydW4gKmFmdGVyKiBjaGVja2luZyBmb3IgS3ViZXJuZXRlcywgb3RoZXJ3aXNlIGl0IHdpbGxcbiAqIHJldHVybiBhIGZhbHNlIHBvc2l0aXZlLlxuICovXG5mdW5jdGlvbiBpc0Nsb3VkUnVuKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MuZW52LktfQ09ORklHVVJBVElPTjtcbn1cbmFzeW5jIGZ1bmN0aW9uIGlzS3ViZXJuZXRlc0VuZ2luZSgpIHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBnY3BNZXRhZGF0YS5pbnN0YW5jZSgnYXR0cmlidXRlcy9jbHVzdGVyLW5hbWUnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBpc0NvbXB1dGVFbmdpbmUoKSB7XG4gICAgcmV0dXJuIGdjcE1ldGFkYXRhLmlzQXZhaWxhYmxlKCk7XG59XG4iLAogICAgIi8qZ2xvYmFsIG1vZHVsZSwgcHJvY2VzcyovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gRGF0YVN0cmVhbShkYXRhKSB7XG4gIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIE5vIGlucHV0XG4gIGlmICghZGF0YSkge1xuICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gU3RyZWFtXG4gIGlmICh0eXBlb2YgZGF0YS5waXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgZGF0YS5waXBlKHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gQnVmZmVyIG9yIFN0cmluZ1xuICAvLyBvciBPYmplY3QgKGFzc3VtZWRseSBhIHBhc3N3b3JkZWQga2V5KVxuICBpZiAoZGF0YS5sZW5ndGggfHwgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW5kJywgZGF0YSk7XG4gICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgZGF0YSB0eXBlICgnKyB0eXBlb2YgZGF0YSArICcpJyk7XG59XG51dGlsLmluaGVyaXRzKERhdGFTdHJlYW0sIFN0cmVhbSk7XG5cbkRhdGFTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoZGF0YSkge1xuICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLCBCdWZmZXIuZnJvbShkYXRhKV0pO1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkRhdGFTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZChkYXRhKSB7XG4gIGlmIChkYXRhKVxuICAgIHRoaXMud3JpdGUoZGF0YSk7XG4gIHRoaXMuZW1pdCgnZW5kJywgZGF0YSk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFTdHJlYW07XG4iLAogICAgIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjsgLy8gYnJvd3NlcmlmeVxudmFyIFNsb3dCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5TbG93QnVmZmVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlckVxO1xuXG5mdW5jdGlvbiBidWZmZXJFcShhLCBiKSB7XG5cbiAgLy8gc2hvcnRjdXR0aW5nIG9uIHR5cGUgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzc1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gYnVmZmVyIHNpemVzIHNob3VsZCBiZSB3ZWxsLWtub3duIGluZm9ybWF0aW9uLCBzbyBkZXNwaXRlIHRoaXNcbiAgLy8gc2hvcnRjdXR0aW5nLCBpdCBkb2Vzbid0IGxlYWsgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSAqY29udGVudHMqIG9mIHRoZVxuICAvLyBidWZmZXJzLlxuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAvKmpzaGludCBiaXR3aXNlOmZhbHNlICovXG4gICAgYyB8PSBhW2ldIF4gYltpXTsgLy8gWE9SXG4gIH1cbiAgcmV0dXJuIGMgPT09IDA7XG59XG5cbmJ1ZmZlckVxLmluc3RhbGwgPSBmdW5jdGlvbigpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5lcXVhbCA9IFNsb3dCdWZmZXIucHJvdG90eXBlLmVxdWFsID0gZnVuY3Rpb24gZXF1YWwodGhhdCkge1xuICAgIHJldHVybiBidWZmZXJFcSh0aGlzLCB0aGF0KTtcbiAgfTtcbn07XG5cbnZhciBvcmlnQnVmRXF1YWwgPSBCdWZmZXIucHJvdG90eXBlLmVxdWFsO1xudmFyIG9yaWdTbG93QnVmRXF1YWwgPSBTbG93QnVmZmVyLnByb3RvdHlwZS5lcXVhbDtcbmJ1ZmZlckVxLnJlc3RvcmUgPSBmdW5jdGlvbigpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5lcXVhbCA9IG9yaWdCdWZFcXVhbDtcbiAgU2xvd0J1ZmZlci5wcm90b3R5cGUuZXF1YWwgPSBvcmlnU2xvd0J1ZkVxdWFsO1xufTtcbiIsCiAgICAidmFyIGJ1ZmZlckVxdWFsID0gcmVxdWlyZSgnYnVmZmVyLWVxdWFsLWNvbnN0YW50LXRpbWUnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBmb3JtYXRFY2RzYSA9IHJlcXVpcmUoJ2VjZHNhLXNpZy1mb3JtYXR0ZXInKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgTVNHX0lOVkFMSURfQUxHT1JJVEhNID0gJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCBhbGdvcml0aG0uXFxuICBTdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmU6XFxuICBcIkhTMjU2XCIsIFwiSFMzODRcIiwgXCJIUzUxMlwiLCBcIlJTMjU2XCIsIFwiUlMzODRcIiwgXCJSUzUxMlwiLCBcIlBTMjU2XCIsIFwiUFMzODRcIiwgXCJQUzUxMlwiLCBcIkVTMjU2XCIsIFwiRVMzODRcIiwgXCJFUzUxMlwiIGFuZCBcIm5vbmVcIi4nXG52YXIgTVNHX0lOVkFMSURfU0VDUkVUID0gJ3NlY3JldCBtdXN0IGJlIGEgc3RyaW5nIG9yIGJ1ZmZlcic7XG52YXIgTVNHX0lOVkFMSURfVkVSSUZJRVJfS0VZID0gJ2tleSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyJztcbnZhciBNU0dfSU5WQUxJRF9TSUdORVJfS0VZID0gJ2tleSBtdXN0IGJlIGEgc3RyaW5nLCBhIGJ1ZmZlciBvciBhbiBvYmplY3QnO1xuXG52YXIgc3VwcG9ydHNLZXlPYmplY3RzID0gdHlwZW9mIGNyeXB0by5jcmVhdGVQdWJsaWNLZXkgPT09ICdmdW5jdGlvbic7XG5pZiAoc3VwcG9ydHNLZXlPYmplY3RzKSB7XG4gIE1TR19JTlZBTElEX1ZFUklGSUVSX0tFWSArPSAnIG9yIGEgS2V5T2JqZWN0JztcbiAgTVNHX0lOVkFMSURfU0VDUkVUICs9ICdvciBhIEtleU9iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNQdWJsaWNLZXkoa2V5KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoa2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNLZXlPYmplY3RzKSB7XG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1ZFUklGSUVSX0tFWSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfVkVSSUZJRVJfS0VZKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5LnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1ZFUklGSUVSX0tFWSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGtleS5hc3ltbWV0cmljS2V5VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfVkVSSUZJRVJfS0VZKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5LmV4cG9ydCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IHR5cGVFcnJvcihNU0dfSU5WQUxJRF9WRVJJRklFUl9LRVkpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja0lzUHJpdmF0ZUtleShrZXkpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1NJR05FUl9LRVkpO1xufTtcblxuZnVuY3Rpb24gY2hlY2tJc1NlY3JldEtleShrZXkpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNLZXlPYmplY3RzKSB7XG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1NFQ1JFVCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfU0VDUkVUKTtcbiAgfVxuXG4gIGlmIChrZXkudHlwZSAhPT0gJ3NlY3JldCcpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfU0VDUkVUKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5LmV4cG9ydCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IHR5cGVFcnJvcihNU0dfSU5WQUxJRF9TRUNSRVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZyb21CYXNlNjQoYmFzZTY0KSB7XG4gIHJldHVybiBiYXNlNjRcbiAgICAucmVwbGFjZSgvPS9nLCAnJylcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJyk7XG59XG5cbmZ1bmN0aW9uIHRvQmFzZTY0KGJhc2U2NHVybCkge1xuICBiYXNlNjR1cmwgPSBiYXNlNjR1cmwudG9TdHJpbmcoKTtcblxuICB2YXIgcGFkZGluZyA9IDQgLSBiYXNlNjR1cmwubGVuZ3RoICUgNDtcbiAgaWYgKHBhZGRpbmcgIT09IDQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkge1xuICAgICAgYmFzZTY0dXJsICs9ICc9JztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFzZTY0dXJsXG4gICAgLnJlcGxhY2UoL1xcLS9nLCAnKycpXG4gICAgLnJlcGxhY2UoL18vZywgJy8nKTtcbn1cblxuZnVuY3Rpb24gdHlwZUVycm9yKHRlbXBsYXRlKSB7XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgZXJyTXNnID0gdXRpbC5mb3JtYXQuYmluZCh1dGlsLCB0ZW1wbGF0ZSkuYXBwbHkobnVsbCwgYXJncyk7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKGVyck1zZyk7XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlck9yU3RyaW5nKG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KHRoaW5nKSB7XG4gIGlmICghYnVmZmVyT3JTdHJpbmcodGhpbmcpKVxuICAgIHRoaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpbmcpO1xuICByZXR1cm4gdGhpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhtYWNTaWduZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gc2lnbih0aGluZywgc2VjcmV0KSB7XG4gICAgY2hlY2tJc1NlY3JldEtleShzZWNyZXQpO1xuICAgIHRoaW5nID0gbm9ybWFsaXplSW5wdXQodGhpbmcpO1xuICAgIHZhciBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYScgKyBiaXRzLCBzZWNyZXQpO1xuICAgIHZhciBzaWcgPSAoaG1hYy51cGRhdGUodGhpbmcpLCBobWFjLmRpZ2VzdCgnYmFzZTY0JykpXG4gICAgcmV0dXJuIGZyb21CYXNlNjQoc2lnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIbWFjVmVyaWZpZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHNlY3JldCkge1xuICAgIHZhciBjb21wdXRlZFNpZyA9IGNyZWF0ZUhtYWNTaWduZXIoYml0cykodGhpbmcsIHNlY3JldCk7XG4gICAgcmV0dXJuIGJ1ZmZlckVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSksIEJ1ZmZlci5mcm9tKGNvbXB1dGVkU2lnKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5U2lnbmVyKGJpdHMpIHtcbiByZXR1cm4gZnVuY3Rpb24gc2lnbih0aGluZywgcHJpdmF0ZUtleSkge1xuICAgIGNoZWNrSXNQcml2YXRlS2V5KHByaXZhdGVLZXkpO1xuICAgIHRoaW5nID0gbm9ybWFsaXplSW5wdXQodGhpbmcpO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGFyZSBzcGVjaWZ5aW5nIFwiUlNBXCIgaGVyZSwgdGhpcyB3b3JrcyB3aXRoIEVDRFNBXG4gICAgLy8ga2V5cyBhcyB3ZWxsLlxuICAgIHZhciBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbignUlNBLVNIQScgKyBiaXRzKTtcbiAgICB2YXIgc2lnID0gKHNpZ25lci51cGRhdGUodGhpbmcpLCBzaWduZXIuc2lnbihwcml2YXRlS2V5LCAnYmFzZTY0JykpO1xuICAgIHJldHVybiBmcm9tQmFzZTY0KHNpZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VmVyaWZpZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSkge1xuICAgIGNoZWNrSXNQdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICB0aGluZyA9IG5vcm1hbGl6ZUlucHV0KHRoaW5nKTtcbiAgICBzaWduYXR1cmUgPSB0b0Jhc2U2NChzaWduYXR1cmUpO1xuICAgIHZhciB2ZXJpZmllciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoJ1JTQS1TSEEnICsgYml0cyk7XG4gICAgdmVyaWZpZXIudXBkYXRlKHRoaW5nKTtcbiAgICByZXR1cm4gdmVyaWZpZXIudmVyaWZ5KHB1YmxpY0tleSwgc2lnbmF0dXJlLCAnYmFzZTY0Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUFNTS2V5U2lnbmVyKGJpdHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24odGhpbmcsIHByaXZhdGVLZXkpIHtcbiAgICBjaGVja0lzUHJpdmF0ZUtleShwcml2YXRlS2V5KTtcbiAgICB0aGluZyA9IG5vcm1hbGl6ZUlucHV0KHRoaW5nKTtcbiAgICB2YXIgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVNpZ24oJ1JTQS1TSEEnICsgYml0cyk7XG4gICAgdmFyIHNpZyA9IChzaWduZXIudXBkYXRlKHRoaW5nKSwgc2lnbmVyLnNpZ24oe1xuICAgICAga2V5OiBwcml2YXRlS2V5LFxuICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkcsXG4gICAgICBzYWx0TGVuZ3RoOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QU1NfU0FMVExFTl9ESUdFU1RcbiAgICB9LCAnYmFzZTY0JykpO1xuICAgIHJldHVybiBmcm9tQmFzZTY0KHNpZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUFNTS2V5VmVyaWZpZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSkge1xuICAgIGNoZWNrSXNQdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICB0aGluZyA9IG5vcm1hbGl6ZUlucHV0KHRoaW5nKTtcbiAgICBzaWduYXR1cmUgPSB0b0Jhc2U2NChzaWduYXR1cmUpO1xuICAgIHZhciB2ZXJpZmllciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoJ1JTQS1TSEEnICsgYml0cyk7XG4gICAgdmVyaWZpZXIudXBkYXRlKHRoaW5nKTtcbiAgICByZXR1cm4gdmVyaWZpZXIudmVyaWZ5KHtcbiAgICAgIGtleTogcHVibGljS2V5LFxuICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkcsXG4gICAgICBzYWx0TGVuZ3RoOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QU1NfU0FMVExFTl9ESUdFU1RcbiAgICB9LCBzaWduYXR1cmUsICdiYXNlNjQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFQ0RTQVNpZ25lcihiaXRzKSB7XG4gIHZhciBpbm5lciA9IGNyZWF0ZUtleVNpZ25lcihiaXRzKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGlubmVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgc2lnbmF0dXJlID0gZm9ybWF0RWNkc2EuZGVyVG9Kb3NlKHNpZ25hdHVyZSwgJ0VTJyArIGJpdHMpO1xuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVDRFNBVmVyaWZlcihiaXRzKSB7XG4gIHZhciBpbm5lciA9IGNyZWF0ZUtleVZlcmlmaWVyKGJpdHMpO1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSkge1xuICAgIHNpZ25hdHVyZSA9IGZvcm1hdEVjZHNhLmpvc2VUb0RlcihzaWduYXR1cmUsICdFUycgKyBiaXRzKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgdmFyIHJlc3VsdCA9IGlubmVyKHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTm9uZVNpZ25lcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vbmVWZXJpZmllcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHZlcmlmeSh0aGluZywgc2lnbmF0dXJlKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZSA9PT0gJyc7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBqd2EoYWxnb3JpdGhtKSB7XG4gIHZhciBzaWduZXJGYWN0b3JpZXMgPSB7XG4gICAgaHM6IGNyZWF0ZUhtYWNTaWduZXIsXG4gICAgcnM6IGNyZWF0ZUtleVNpZ25lcixcbiAgICBwczogY3JlYXRlUFNTS2V5U2lnbmVyLFxuICAgIGVzOiBjcmVhdGVFQ0RTQVNpZ25lcixcbiAgICBub25lOiBjcmVhdGVOb25lU2lnbmVyLFxuICB9XG4gIHZhciB2ZXJpZmllckZhY3RvcmllcyA9IHtcbiAgICBoczogY3JlYXRlSG1hY1ZlcmlmaWVyLFxuICAgIHJzOiBjcmVhdGVLZXlWZXJpZmllcixcbiAgICBwczogY3JlYXRlUFNTS2V5VmVyaWZpZXIsXG4gICAgZXM6IGNyZWF0ZUVDRFNBVmVyaWZlcixcbiAgICBub25lOiBjcmVhdGVOb25lVmVyaWZpZXIsXG4gIH1cbiAgdmFyIG1hdGNoID0gYWxnb3JpdGhtLm1hdGNoKC9eKFJTfFBTfEVTfEhTKSgyNTZ8Mzg0fDUxMikkfF4obm9uZSkkLyk7XG4gIGlmICghbWF0Y2gpXG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX0FMR09SSVRITSwgYWxnb3JpdGhtKTtcbiAgdmFyIGFsZ28gPSAobWF0Y2hbMV0gfHwgbWF0Y2hbM10pLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBiaXRzID0gbWF0Y2hbMl07XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduOiBzaWduZXJGYWN0b3JpZXNbYWxnb10oYml0cyksXG4gICAgdmVyaWZ5OiB2ZXJpZmllckZhY3Rvcmllc1thbGdvXShiaXRzKSxcbiAgfVxufTtcbiIsCiAgICAiLypnbG9iYWwgbW9kdWxlKi9cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdG9TdHJpbmcob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gb2JqO1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicgfHwgQnVmZmVyLmlzQnVmZmVyKG9iaikpXG4gICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn07XG4iLAogICAgIi8qZ2xvYmFsIG1vZHVsZSovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgRGF0YVN0cmVhbSA9IHJlcXVpcmUoJy4vZGF0YS1zdHJlYW0nKTtcbnZhciBqd2EgPSByZXF1aXJlKCdqd2EnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9zdHJpbmcnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBiYXNlNjR1cmwoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyXG4gICAgLmZyb20oc3RyaW5nLCBlbmNvZGluZylcbiAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpO1xufVxuXG5mdW5jdGlvbiBqd3NTZWN1cmVkSW5wdXQoaGVhZGVyLCBwYXlsb2FkLCBlbmNvZGluZykge1xuICBlbmNvZGluZyA9IGVuY29kaW5nIHx8ICd1dGY4JztcbiAgdmFyIGVuY29kZWRIZWFkZXIgPSBiYXNlNjR1cmwodG9TdHJpbmcoaGVhZGVyKSwgJ2JpbmFyeScpO1xuICB2YXIgZW5jb2RlZFBheWxvYWQgPSBiYXNlNjR1cmwodG9TdHJpbmcocGF5bG9hZCksIGVuY29kaW5nKTtcbiAgcmV0dXJuIHV0aWwuZm9ybWF0KCclcy4lcycsIGVuY29kZWRIZWFkZXIsIGVuY29kZWRQYXlsb2FkKTtcbn1cblxuZnVuY3Rpb24gandzU2lnbihvcHRzKSB7XG4gIHZhciBoZWFkZXIgPSBvcHRzLmhlYWRlcjtcbiAgdmFyIHBheWxvYWQgPSBvcHRzLnBheWxvYWQ7XG4gIHZhciBzZWNyZXRPcktleSA9IG9wdHMuc2VjcmV0IHx8IG9wdHMucHJpdmF0ZUtleTtcbiAgdmFyIGVuY29kaW5nID0gb3B0cy5lbmNvZGluZztcbiAgdmFyIGFsZ28gPSBqd2EoaGVhZGVyLmFsZyk7XG4gIHZhciBzZWN1cmVkSW5wdXQgPSBqd3NTZWN1cmVkSW5wdXQoaGVhZGVyLCBwYXlsb2FkLCBlbmNvZGluZyk7XG4gIHZhciBzaWduYXR1cmUgPSBhbGdvLnNpZ24oc2VjdXJlZElucHV0LCBzZWNyZXRPcktleSk7XG4gIHJldHVybiB1dGlsLmZvcm1hdCgnJXMuJXMnLCBzZWN1cmVkSW5wdXQsIHNpZ25hdHVyZSk7XG59XG5cbmZ1bmN0aW9uIFNpZ25TdHJlYW0ob3B0cykge1xuICB2YXIgc2VjcmV0ID0gb3B0cy5zZWNyZXR8fG9wdHMucHJpdmF0ZUtleXx8b3B0cy5rZXk7XG4gIHZhciBzZWNyZXRTdHJlYW0gPSBuZXcgRGF0YVN0cmVhbShzZWNyZXQpO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5oZWFkZXIgPSBvcHRzLmhlYWRlcjtcbiAgdGhpcy5lbmNvZGluZyA9IG9wdHMuZW5jb2Rpbmc7XG4gIHRoaXMuc2VjcmV0ID0gdGhpcy5wcml2YXRlS2V5ID0gdGhpcy5rZXkgPSBzZWNyZXRTdHJlYW07XG4gIHRoaXMucGF5bG9hZCA9IG5ldyBEYXRhU3RyZWFtKG9wdHMucGF5bG9hZCk7XG4gIHRoaXMuc2VjcmV0Lm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5wYXlsb2FkLndyaXRhYmxlICYmIHRoaXMucmVhZGFibGUpXG4gICAgICB0aGlzLnNpZ24oKTtcbiAgfS5iaW5kKHRoaXMpKTtcblxuICB0aGlzLnBheWxvYWQub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLnNlY3JldC53cml0YWJsZSAmJiB0aGlzLnJlYWRhYmxlKVxuICAgICAgdGhpcy5zaWduKCk7XG4gIH0uYmluZCh0aGlzKSk7XG59XG51dGlsLmluaGVyaXRzKFNpZ25TdHJlYW0sIFN0cmVhbSk7XG5cblNpZ25TdHJlYW0ucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKCkge1xuICB0cnkge1xuICAgIHZhciBzaWduYXR1cmUgPSBqd3NTaWduKHtcbiAgICAgIGhlYWRlcjogdGhpcy5oZWFkZXIsXG4gICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQuYnVmZmVyLFxuICAgICAgc2VjcmV0OiB0aGlzLnNlY3JldC5idWZmZXIsXG4gICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1xuICAgIH0pO1xuICAgIHRoaXMuZW1pdCgnZG9uZScsIHNpZ25hdHVyZSk7XG4gICAgdGhpcy5lbWl0KCdkYXRhJywgc2lnbmF0dXJlKTtcbiAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlKTtcbiAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gIH1cbn07XG5cblNpZ25TdHJlYW0uc2lnbiA9IGp3c1NpZ247XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnblN0cmVhbTtcbiIsCiAgICAiLypnbG9iYWwgbW9kdWxlKi9cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBEYXRhU3RyZWFtID0gcmVxdWlyZSgnLi9kYXRhLXN0cmVhbScpO1xudmFyIGp3YSA9IHJlcXVpcmUoJ2p3YScpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b3N0cmluZycpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgSldTX1JFR0VYID0gL15bYS16QS1aMC05XFwtX10rP1xcLlthLXpBLVowLTlcXC1fXSs/XFwuKFthLXpBLVowLTlcXC1fXSspPyQvO1xuXG5mdW5jdGlvbiBpc09iamVjdCh0aGluZykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmZ1bmN0aW9uIHNhZmVKc29uUGFyc2UodGhpbmcpIHtcbiAgaWYgKGlzT2JqZWN0KHRoaW5nKSlcbiAgICByZXR1cm4gdGhpbmc7XG4gIHRyeSB7IHJldHVybiBKU09OLnBhcnNlKHRoaW5nKTsgfVxuICBjYXRjaCAoZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG59XG5cbmZ1bmN0aW9uIGhlYWRlckZyb21KV1MoandzU2lnKSB7XG4gIHZhciBlbmNvZGVkSGVhZGVyID0gandzU2lnLnNwbGl0KCcuJywgMSlbMF07XG4gIHJldHVybiBzYWZlSnNvblBhcnNlKEJ1ZmZlci5mcm9tKGVuY29kZWRIZWFkZXIsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5JykpO1xufVxuXG5mdW5jdGlvbiBzZWN1cmVkSW5wdXRGcm9tSldTKGp3c1NpZykge1xuICByZXR1cm4gandzU2lnLnNwbGl0KCcuJywgMikuam9pbignLicpO1xufVxuXG5mdW5jdGlvbiBzaWduYXR1cmVGcm9tSldTKGp3c1NpZykge1xuICByZXR1cm4gandzU2lnLnNwbGl0KCcuJylbMl07XG59XG5cbmZ1bmN0aW9uIHBheWxvYWRGcm9tSldTKGp3c1NpZywgZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAndXRmOCc7XG4gIHZhciBwYXlsb2FkID0gandzU2lnLnNwbGl0KCcuJylbMV07XG4gIHJldHVybiBCdWZmZXIuZnJvbShwYXlsb2FkLCAnYmFzZTY0JykudG9TdHJpbmcoZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkSndzKHN0cmluZykge1xuICByZXR1cm4gSldTX1JFR0VYLnRlc3Qoc3RyaW5nKSAmJiAhIWhlYWRlckZyb21KV1Moc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gandzVmVyaWZ5KGp3c1NpZywgYWxnb3JpdGhtLCBzZWNyZXRPcktleSkge1xuICBpZiAoIWFsZ29yaXRobSkge1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJNaXNzaW5nIGFsZ29yaXRobSBwYXJhbWV0ZXIgZm9yIGp3cy52ZXJpZnlcIik7XG4gICAgZXJyLmNvZGUgPSBcIk1JU1NJTkdfQUxHT1JJVEhNXCI7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIGp3c1NpZyA9IHRvU3RyaW5nKGp3c1NpZyk7XG4gIHZhciBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSldTKGp3c1NpZyk7XG4gIHZhciBzZWN1cmVkSW5wdXQgPSBzZWN1cmVkSW5wdXRGcm9tSldTKGp3c1NpZyk7XG4gIHZhciBhbGdvID0gandhKGFsZ29yaXRobSk7XG4gIHJldHVybiBhbGdvLnZlcmlmeShzZWN1cmVkSW5wdXQsIHNpZ25hdHVyZSwgc2VjcmV0T3JLZXkpO1xufVxuXG5mdW5jdGlvbiBqd3NEZWNvZGUoandzU2lnLCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBqd3NTaWcgPSB0b1N0cmluZyhqd3NTaWcpO1xuXG4gIGlmICghaXNWYWxpZEp3cyhqd3NTaWcpKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBoZWFkZXIgPSBoZWFkZXJGcm9tSldTKGp3c1NpZyk7XG5cbiAgaWYgKCFoZWFkZXIpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHBheWxvYWQgPSBwYXlsb2FkRnJvbUpXUyhqd3NTaWcpO1xuICBpZiAoaGVhZGVyLnR5cCA9PT0gJ0pXVCcgfHwgb3B0cy5qc29uKVxuICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWQsIG9wdHMuZW5jb2RpbmcpO1xuXG4gIHJldHVybiB7XG4gICAgaGVhZGVyOiBoZWFkZXIsXG4gICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICBzaWduYXR1cmU6IHNpZ25hdHVyZUZyb21KV1MoandzU2lnKVxuICB9O1xufVxuXG5mdW5jdGlvbiBWZXJpZnlTdHJlYW0ob3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHNlY3JldE9yS2V5ID0gb3B0cy5zZWNyZXR8fG9wdHMucHVibGljS2V5fHxvcHRzLmtleTtcbiAgdmFyIHNlY3JldFN0cmVhbSA9IG5ldyBEYXRhU3RyZWFtKHNlY3JldE9yS2V5KTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuYWxnb3JpdGhtID0gb3B0cy5hbGdvcml0aG07XG4gIHRoaXMuZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nO1xuICB0aGlzLnNlY3JldCA9IHRoaXMucHVibGljS2V5ID0gdGhpcy5rZXkgPSBzZWNyZXRTdHJlYW07XG4gIHRoaXMuc2lnbmF0dXJlID0gbmV3IERhdGFTdHJlYW0ob3B0cy5zaWduYXR1cmUpO1xuICB0aGlzLnNlY3JldC5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuc2lnbmF0dXJlLndyaXRhYmxlICYmIHRoaXMucmVhZGFibGUpXG4gICAgICB0aGlzLnZlcmlmeSgpO1xuICB9LmJpbmQodGhpcykpO1xuXG4gIHRoaXMuc2lnbmF0dXJlLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5zZWNyZXQud3JpdGFibGUgJiYgdGhpcy5yZWFkYWJsZSlcbiAgICAgIHRoaXMudmVyaWZ5KCk7XG4gIH0uYmluZCh0aGlzKSk7XG59XG51dGlsLmluaGVyaXRzKFZlcmlmeVN0cmVhbSwgU3RyZWFtKTtcblZlcmlmeVN0cmVhbS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KCkge1xuICB0cnkge1xuICAgIHZhciB2YWxpZCA9IGp3c1ZlcmlmeSh0aGlzLnNpZ25hdHVyZS5idWZmZXIsIHRoaXMuYWxnb3JpdGhtLCB0aGlzLmtleS5idWZmZXIpO1xuICAgIHZhciBvYmogPSBqd3NEZWNvZGUodGhpcy5zaWduYXR1cmUuYnVmZmVyLCB0aGlzLmVuY29kaW5nKTtcbiAgICB0aGlzLmVtaXQoJ2RvbmUnLCB2YWxpZCwgb2JqKTtcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCB2YWxpZCk7XG4gICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlKTtcbiAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gIH1cbn07XG5cblZlcmlmeVN0cmVhbS5kZWNvZGUgPSBqd3NEZWNvZGU7XG5WZXJpZnlTdHJlYW0uaXNWYWxpZCA9IGlzVmFsaWRKd3M7XG5WZXJpZnlTdHJlYW0udmVyaWZ5ID0gandzVmVyaWZ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlcmlmeVN0cmVhbTtcbiIsCiAgICAiLypnbG9iYWwgZXhwb3J0cyovXG52YXIgU2lnblN0cmVhbSA9IHJlcXVpcmUoJy4vbGliL3NpZ24tc3RyZWFtJyk7XG52YXIgVmVyaWZ5U3RyZWFtID0gcmVxdWlyZSgnLi9saWIvdmVyaWZ5LXN0cmVhbScpO1xuXG52YXIgQUxHT1JJVEhNUyA9IFtcbiAgJ0hTMjU2JywgJ0hTMzg0JywgJ0hTNTEyJyxcbiAgJ1JTMjU2JywgJ1JTMzg0JywgJ1JTNTEyJyxcbiAgJ1BTMjU2JywgJ1BTMzg0JywgJ1BTNTEyJyxcbiAgJ0VTMjU2JywgJ0VTMzg0JywgJ0VTNTEyJ1xuXTtcblxuZXhwb3J0cy5BTEdPUklUSE1TID0gQUxHT1JJVEhNUztcbmV4cG9ydHMuc2lnbiA9IFNpZ25TdHJlYW0uc2lnbjtcbmV4cG9ydHMudmVyaWZ5ID0gVmVyaWZ5U3RyZWFtLnZlcmlmeTtcbmV4cG9ydHMuZGVjb2RlID0gVmVyaWZ5U3RyZWFtLmRlY29kZTtcbmV4cG9ydHMuaXNWYWxpZCA9IFZlcmlmeVN0cmVhbS5pc1ZhbGlkO1xuZXhwb3J0cy5jcmVhdGVTaWduID0gZnVuY3Rpb24gY3JlYXRlU2lnbihvcHRzKSB7XG4gIHJldHVybiBuZXcgU2lnblN0cmVhbShvcHRzKTtcbn07XG5leHBvcnRzLmNyZWF0ZVZlcmlmeSA9IGZ1bmN0aW9uIGNyZWF0ZVZlcmlmeShvcHRzKSB7XG4gIHJldHVybiBuZXcgVmVyaWZ5U3RyZWFtKG9wdHMpO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTENcbiAqXG4gKiBEaXN0cmlidXRlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFNlZSBmaWxlIExJQ0VOU0UgZm9yIGRldGFpbCBvciBjb3B5IGF0IGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKi9cbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLCBfR29vZ2xlVG9rZW5faW5GbGlnaHRSZXF1ZXN0LCBfR29vZ2xlVG9rZW5fZ2V0VG9rZW5Bc3luYywgX0dvb2dsZVRva2VuX2dldFRva2VuQXN5bmNJbm5lciwgX0dvb2dsZVRva2VuX2Vuc3VyZUVtYWlsLCBfR29vZ2xlVG9rZW5fcmV2b2tlVG9rZW5Bc3luYywgX0dvb2dsZVRva2VuX2NvbmZpZ3VyZSwgX0dvb2dsZVRva2VuX3JlcXVlc3RUb2tlbjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR29vZ2xlVG9rZW4gPSB2b2lkIDA7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcImdheGlvc1wiKTtcbmNvbnN0IGp3cyA9IHJlcXVpcmUoXCJqd3NcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgICA/ICgwLCB1dGlsXzEucHJvbWlzaWZ5KShmcy5yZWFkRmlsZSlcbiAgICA6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gaWYgcnVubmluZyBpbiB0aGUgd2ViLWJyb3dzZXIsIGZzLnJlYWRGaWxlIG1heSBub3QgaGF2ZSBiZWVuIHNoaW1tZWQuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcldpdGhDb2RlKCd1c2Uga2V5IHJhdGhlciB0aGFuIGtleUZpbGUuJywgJ01JU1NJTkdfQ1JFREVOVElBTFMnKTtcbiAgICB9O1xuY29uc3QgR09PR0xFX1RPS0VOX1VSTCA9ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjQvdG9rZW4nO1xuY29uc3QgR09PR0xFX1JFVk9LRV9UT0tFTl9VUkwgPSAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL28vb2F1dGgyL3Jldm9rZT90b2tlbj0nO1xuY2xhc3MgRXJyb3JXaXRoQ29kZSBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbn1cbmNsYXNzIEdvb2dsZVRva2VuIHtcbiAgICBnZXQgYWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd1Rva2VuID8gdGhpcy5yYXdUb2tlbi5hY2Nlc3NfdG9rZW4gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpZFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdUb2tlbiA/IHRoaXMucmF3VG9rZW4uaWRfdG9rZW4gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCB0b2tlblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd1Rva2VuID8gdGhpcy5yYXdUb2tlbi50b2tlbl90eXBlIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgcmVmcmVzaFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdUb2tlbiA/IHRoaXMucmF3VG9rZW4ucmVmcmVzaF90b2tlbiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgR29vZ2xlVG9rZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAgQ29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRlciA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IG9wdHMgPT4gKDAsIGdheGlvc18xLnJlcXVlc3QpKG9wdHMpLFxuICAgICAgICB9O1xuICAgICAgICBfR29vZ2xlVG9rZW5faW5GbGlnaHRSZXF1ZXN0LnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlVG9rZW5fY29uZmlndXJlKS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHRva2VuIGhhcyBleHBpcmVkLlxuICAgICAqXG4gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0b2tlbiBoYXMgZXhwaXJlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGhhc0V4cGlyZWQoKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBpZiAodGhpcy5yYXdUb2tlbiAmJiB0aGlzLmV4cGlyZXNBdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vdyA+PSB0aGlzLmV4cGlyZXNBdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgdG9rZW4gd2lsbCBleHBpcmUgd2l0aGluIGVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpc1xuICAgICAqXG4gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0b2tlbiB3aWxsIGJlIGV4cGlyZWQgd2l0aGluIGVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzVG9rZW5FeHBpcmluZygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzID0gKF9hID0gdGhpcy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmICh0aGlzLnJhd1Rva2VuICYmIHRoaXMuZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBpcmVzQXQgPD0gbm93ICsgZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0VG9rZW4oY2FsbGJhY2ssIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3B0cyA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgfSwgb3B0cyk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jKS5jYWxsKHRoaXMsIG9wdHMpLnRoZW4odCA9PiBjYihudWxsLCB0KSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlVG9rZW5fZ2V0VG9rZW5Bc3luYykuY2FsbCh0aGlzLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBrZXlGaWxlLCBleHRyYWN0IHRoZSBrZXkgYW5kIGNsaWVudCBlbWFpbCBpZiBhdmFpbGFibGVcbiAgICAgKiBAcGFyYW0ga2V5RmlsZSBQYXRoIHRvIGEganNvbiwgcGVtLCBvciBwMTIgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBrZXkuXG4gICAgICogQHJldHVybnMgYW4gb2JqZWN0IHdpdGggcHJpdmF0ZUtleSBhbmQgY2xpZW50RW1haWwgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGFzeW5jIGdldENyZWRlbnRpYWxzKGtleUZpbGUpIHtcbiAgICAgICAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGtleUZpbGUpO1xuICAgICAgICBzd2l0Y2ggKGV4dCkge1xuICAgICAgICAgICAgY2FzZSAnLmpzb24nOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcmVhZEZpbGUoa2V5RmlsZSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBib2R5LnByaXZhdGVfa2V5O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudEVtYWlsID0gYm9keS5jbGllbnRfZW1haWw7XG4gICAgICAgICAgICAgICAgaWYgKCFwcml2YXRlS2V5IHx8ICFjbGllbnRFbWFpbCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3JXaXRoQ29kZSgncHJpdmF0ZV9rZXkgYW5kIGNsaWVudF9lbWFpbCBhcmUgcmVxdWlyZWQuJywgJ01JU1NJTkdfQ1JFREVOVElBTFMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJpdmF0ZUtleSwgY2xpZW50RW1haWwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJy5kZXInOlxuICAgICAgICAgICAgY2FzZSAnLmNydCc6XG4gICAgICAgICAgICBjYXNlICcucGVtJzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBhd2FpdCByZWFkRmlsZShrZXlGaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHByaXZhdGVLZXkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJy5wMTInOlxuICAgICAgICAgICAgY2FzZSAnLnBmeCc6IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3JXaXRoQ29kZSgnKi5wMTIgY2VydGlmaWNhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIGFmdGVyIHY2LjEuMi4gJyArXG4gICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1dGlsaXppbmcgKi5qc29uIGZvcm1hdCBvciBjb252ZXJ0aW5nICoucDEyIHRvICoucGVtIHVzaW5nIHRoZSBPcGVuU1NMIENMSS4nLCAnVU5LTk9XTl9DRVJUSUZJQ0FURV9UWVBFJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcldpdGhDb2RlKCdVbmtub3duIGNlcnRpZmljYXRlIHR5cGUuIFR5cGUgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvbi4gJyArXG4gICAgICAgICAgICAgICAgICAgICdDdXJyZW50IHN1cHBvcnRlZCBleHRlbnNpb25zIGFyZSAqLmpzb24sIGFuZCAqLnBlbS4nLCAnVU5LTk9XTl9DRVJUSUZJQ0FURV9UWVBFJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV2b2tlVG9rZW4oY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlVG9rZW5fcmV2b2tlVG9rZW5Bc3luYykuY2FsbCh0aGlzKS50aGVuKCgpID0+IGNhbGxiYWNrKCksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZVRva2VuX3Jldm9rZVRva2VuQXN5bmMpLmNhbGwodGhpcyk7XG4gICAgfVxufVxuZXhwb3J0cy5Hb29nbGVUb2tlbiA9IEdvb2dsZVRva2VuO1xuX0dvb2dsZVRva2VuX2luRmxpZ2h0UmVxdWVzdCA9IG5ldyBXZWFrTWFwKCksIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfR29vZ2xlVG9rZW5fZ2V0VG9rZW5Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jKG9wdHMpIHtcbiAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlVG9rZW5faW5GbGlnaHRSZXF1ZXN0LCBcImZcIikgJiYgIW9wdHMuZm9yY2VSZWZyZXNoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbkZsaWdodFJlcXVlc3QsIFwiZlwiKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IChfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbkZsaWdodFJlcXVlc3QsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jSW5uZXIpLmNhbGwodGhpcywgb3B0cyksIFwiZlwiKSk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbkZsaWdodFJlcXVlc3QsIHVuZGVmaW5lZCwgXCJmXCIpO1xuICAgIH1cbn0sIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jSW5uZXIgPSBhc3luYyBmdW5jdGlvbiBfR29vZ2xlVG9rZW5fZ2V0VG9rZW5Bc3luY0lubmVyKG9wdHMpIHtcbiAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJpbmcoKSA9PT0gZmFsc2UgJiYgb3B0cy5mb3JjZVJlZnJlc2ggPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5yYXdUb2tlbik7XG4gICAgfVxuICAgIGlmICghdGhpcy5rZXkgJiYgIXRoaXMua2V5RmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGtleSBvciBrZXlGaWxlIHNldC4nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleSAmJiB0aGlzLmtleUZpbGUpIHtcbiAgICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKHRoaXMua2V5RmlsZSk7XG4gICAgICAgIHRoaXMua2V5ID0gY3JlZHMucHJpdmF0ZUtleTtcbiAgICAgICAgdGhpcy5pc3MgPSBjcmVkcy5jbGllbnRFbWFpbCB8fCB0aGlzLmlzcztcbiAgICAgICAgaWYgKCFjcmVkcy5jbGllbnRFbWFpbCkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZVRva2VuX2Vuc3VyZUVtYWlsKS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlVG9rZW5fcmVxdWVzdFRva2VuKS5jYWxsKHRoaXMpO1xufSwgX0dvb2dsZVRva2VuX2Vuc3VyZUVtYWlsID0gZnVuY3Rpb24gX0dvb2dsZVRva2VuX2Vuc3VyZUVtYWlsKCkge1xuICAgIGlmICghdGhpcy5pc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yV2l0aENvZGUoJ2VtYWlsIGlzIHJlcXVpcmVkLicsICdNSVNTSU5HX0NSRURFTlRJQUxTJyk7XG4gICAgfVxufSwgX0dvb2dsZVRva2VuX3Jldm9rZVRva2VuQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBfR29vZ2xlVG9rZW5fcmV2b2tlVG9rZW5Bc3luYygpIHtcbiAgICBpZiAoIXRoaXMuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0b2tlbiB0byByZXZva2UuJyk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IEdPT0dMRV9SRVZPS0VfVE9LRU5fVVJMICsgdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICB1cmwsXG4gICAgICAgIHJldHJ5OiB0cnVlLFxuICAgIH0pO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9jb25maWd1cmUpLmNhbGwodGhpcywge1xuICAgICAgICBlbWFpbDogdGhpcy5pc3MsXG4gICAgICAgIHN1YjogdGhpcy5zdWIsXG4gICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgIGtleUZpbGU6IHRoaXMua2V5RmlsZSxcbiAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXG4gICAgICAgIGFkZGl0aW9uYWxDbGFpbXM6IHRoaXMuYWRkaXRpb25hbENsYWltcyxcbiAgICB9KTtcbn0sIF9Hb29nbGVUb2tlbl9jb25maWd1cmUgPSBmdW5jdGlvbiBfR29vZ2xlVG9rZW5fY29uZmlndXJlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMua2V5RmlsZSA9IG9wdGlvbnMua2V5RmlsZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMucmF3VG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc3MgPSBvcHRpb25zLmVtYWlsIHx8IG9wdGlvbnMuaXNzO1xuICAgIHRoaXMuc3ViID0gb3B0aW9ucy5zdWI7XG4gICAgdGhpcy5hZGRpdGlvbmFsQ2xhaW1zID0gb3B0aW9ucy5hZGRpdGlvbmFsQ2xhaW1zO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zY29wZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5zY29wZSA9IG9wdGlvbnMuc2NvcGUuam9pbignICcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5zY29wZSA9IG9wdGlvbnMuc2NvcGU7XG4gICAgfVxuICAgIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzID0gb3B0aW9ucy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXM7XG4gICAgaWYgKG9wdGlvbnMudHJhbnNwb3J0ZXIpIHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRlciA9IG9wdGlvbnMudHJhbnNwb3J0ZXI7XG4gICAgfVxufSwgX0dvb2dsZVRva2VuX3JlcXVlc3RUb2tlbiA9IFxuLyoqXG4gKiBSZXF1ZXN0IHRoZSB0b2tlbiBmcm9tIEdvb2dsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX0dvb2dsZVRva2VuX3JlcXVlc3RUb2tlbigpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGlhdCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICBjb25zdCBhZGRpdGlvbmFsQ2xhaW1zID0gdGhpcy5hZGRpdGlvbmFsQ2xhaW1zIHx8IHt9O1xuICAgIGNvbnN0IHBheWxvYWQgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgaXNzOiB0aGlzLmlzcyxcbiAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXG4gICAgICAgIGF1ZDogR09PR0xFX1RPS0VOX1VSTCxcbiAgICAgICAgZXhwOiBpYXQgKyAzNjAwLFxuICAgICAgICBpYXQsXG4gICAgICAgIHN1YjogdGhpcy5zdWIsXG4gICAgfSwgYWRkaXRpb25hbENsYWltcyk7XG4gICAgY29uc3Qgc2lnbmVkSldUID0gandzLnNpZ24oe1xuICAgICAgICBoZWFkZXI6IHsgYWxnOiAnUlMyNTYnIH0sXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIHNlY3JldDogdGhpcy5rZXksXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHVybDogR09PR0xFX1RPS0VOX1VSTCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBncmFudF90eXBlOiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6and0LWJlYXJlcicsXG4gICAgICAgICAgICAgICAgYXNzZXJ0aW9uOiBzaWduZWRKV1QsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgcmV0cnlDb25maWc6IHtcbiAgICAgICAgICAgICAgICBodHRwTWV0aG9kc1RvUmV0cnk6IFsnUE9TVCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmF3VG9rZW4gPSByLmRhdGE7XG4gICAgICAgIHRoaXMuZXhwaXJlc0F0ID1cbiAgICAgICAgICAgIHIuZGF0YS5leHBpcmVzX2luID09PSBudWxsIHx8IHIuZGF0YS5leHBpcmVzX2luID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIDogKGlhdCArIHIuZGF0YS5leHBpcmVzX2luKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd1Rva2VuO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLnJhd1Rva2VuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRva2VuRXhwaXJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYm9keSA9IGUucmVzcG9uc2UgJiYgKChfYSA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kYXRhKVxuICAgICAgICAgICAgPyAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGF0YVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgaWYgKGJvZHkuZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBib2R5LmVycm9yX2Rlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgPyBgOiAke2JvZHkuZXJyb3JfZGVzY3JpcHRpb259YFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBlLm1lc3NhZ2UgPSBgJHtib2R5LmVycm9yfSR7ZGVzY31gO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSldUQWNjZXNzID0gdm9pZCAwO1xuY29uc3QgandzID0gcmVxdWlyZShcImp3c1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgREVGQVVMVF9IRUFERVIgPSB7XG4gICAgYWxnOiAnUlMyNTYnLFxuICAgIHR5cDogJ0pXVCcsXG59O1xuY2xhc3MgSldUQWNjZXNzIHtcbiAgICAvKipcbiAgICAgKiBKV1RBY2Nlc3Mgc2VydmljZSBhY2NvdW50IGNyZWRlbnRpYWxzLlxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgbmV3IGFjY2VzcyB0b2tlbiBieSB1c2luZyB0aGUgY3JlZGVudGlhbCB0byBjcmVhdGUgYSBuZXcgSldUIHRva2VuXG4gICAgICogdGhhdCdzIHJlY29nbml6ZWQgYXMgdGhlIGFjY2VzcyB0b2tlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbWFpbCB0aGUgc2VydmljZSBhY2NvdW50IGVtYWlsIGFkZHJlc3MuXG4gICAgICogQHBhcmFtIGtleSB0aGUgcHJpdmF0ZSBrZXkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2lnbiB0aGUgdG9rZW4uXG4gICAgICogQHBhcmFtIGtleUlkIHRoZSBJRCBvZiB0aGUgcHJpdmF0ZSBrZXkgdXNlZCB0byBzaWduIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihlbWFpbCwga2V5LCBrZXlJZCwgZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzKSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgdXRpbF8xLkxSVUNhY2hlKHtcbiAgICAgICAgICAgIGNhcGFjaXR5OiA1MDAsXG4gICAgICAgICAgICBtYXhBZ2U6IDYwICogNjAgKiAxMDAwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5rZXlJZCA9IGtleUlkO1xuICAgICAgICB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyA9XG4gICAgICAgICAgICBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgIT09IG51bGwgJiYgZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzICE9PSB2b2lkIDAgPyBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgOiA1ICogNjAgKiAxMDAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbnN1cmVzIHRoYXQgd2UncmUgY2FjaGluZyBhIGtleSBhcHByb3ByaWF0ZWx5LCBnaXZpbmcgcHJlY2VkZW5jZSB0byBzY29wZXMgdnMuIHVybFxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJJIGJlaW5nIGF1dGhvcml6ZWQuXG4gICAgICogQHBhcmFtIHNjb3BlcyBUaGUgc2NvcGUgb3Igc2NvcGVzIGJlaW5nIGF1dGhvcml6ZWRcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyB0aGF0IHJldHVybnMgdGhlIGNhY2hlZCBrZXkuXG4gICAgICovXG4gICAgZ2V0Q2FjaGVkS2V5KHVybCwgc2NvcGVzKSB7XG4gICAgICAgIGxldCBjYWNoZUtleSA9IHVybDtcbiAgICAgICAgaWYgKHNjb3BlcyAmJiBBcnJheS5pc0FycmF5KHNjb3BlcykgJiYgc2NvcGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FjaGVLZXkgPSB1cmwgPyBgJHt1cmx9XyR7c2NvcGVzLmpvaW4oJ18nKX1gIDogYCR7c2NvcGVzLmpvaW4oJ18nKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY29wZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjYWNoZUtleSA9IHVybCA/IGAke3VybH1fJHtzY29wZXN9YCA6IHNjb3BlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhY2hlS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignU2NvcGVzIG9yIHVybCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlS2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBub24tZXhwaXJlZCBhY2Nlc3MgdG9rZW4sIGFmdGVyIHJlZnJlc2hpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJJIGJlaW5nIGF1dGhvcml6ZWQuXG4gICAgICogQHBhcmFtIGFkZGl0aW9uYWxDbGFpbXMgQW4gb2JqZWN0IHdpdGggYSBzZXQgb2YgYWRkaXRpb25hbCBjbGFpbXMgdG9cbiAgICAgKiBpbmNsdWRlIGluIHRoZSBwYXlsb2FkLlxuICAgICAqIEByZXR1cm5zIEFuIG9iamVjdCB0aGF0IGluY2x1ZGVzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICAgKi9cbiAgICBnZXRSZXF1ZXN0SGVhZGVycyh1cmwsIGFkZGl0aW9uYWxDbGFpbXMsIHNjb3Blcykge1xuICAgICAgICAvLyBSZXR1cm4gY2FjaGVkIGF1dGhvcml6YXRpb24gaGVhZGVycywgdW5sZXNzIHdlIGFyZSB3aXRoaW5cbiAgICAgICAgLy8gZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzIG1zIG9mIHRoZW0gZXhwaXJpbmc6XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q2FjaGVkS2V5KHVybCwgc2NvcGVzKTtcbiAgICAgICAgY29uc3QgY2FjaGVkVG9rZW4gPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAoY2FjaGVkVG9rZW4gJiZcbiAgICAgICAgICAgIGNhY2hlZFRva2VuLmV4cGlyYXRpb24gLSBub3cgPiB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFRva2VuLmhlYWRlcnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgIGNvbnN0IGV4cCA9IEpXVEFjY2Vzcy5nZXRFeHBpcmF0aW9uVGltZShpYXQpO1xuICAgICAgICBsZXQgZGVmYXVsdENsYWltcztcbiAgICAgICAgLy8gVHVybiBzY29wZXMgaW50byBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjb3BlcykpIHtcbiAgICAgICAgICAgIHNjb3BlcyA9IHNjb3Blcy5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgc2NvcGVzIGFyZSBzcGVjaWZpZWQsIHNpZ24gd2l0aCBzY29wZXNcbiAgICAgICAgaWYgKHNjb3Blcykge1xuICAgICAgICAgICAgZGVmYXVsdENsYWltcyA9IHtcbiAgICAgICAgICAgICAgICBpc3M6IHRoaXMuZW1haWwsXG4gICAgICAgICAgICAgICAgc3ViOiB0aGlzLmVtYWlsLFxuICAgICAgICAgICAgICAgIHNjb3BlOiBzY29wZXMsXG4gICAgICAgICAgICAgICAgZXhwLFxuICAgICAgICAgICAgICAgIGlhdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0Q2xhaW1zID0ge1xuICAgICAgICAgICAgICAgIGlzczogdGhpcy5lbWFpbCxcbiAgICAgICAgICAgICAgICBzdWI6IHRoaXMuZW1haWwsXG4gICAgICAgICAgICAgICAgYXVkOiB1cmwsXG4gICAgICAgICAgICAgICAgZXhwLFxuICAgICAgICAgICAgICAgIGlhdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWRkaXRpb25hbENsYWltcyBhcmUgcHJvdmlkZWQsIGVuc3VyZSB0aGV5IGRvIG5vdCBjb2xsaWRlIHdpdGhcbiAgICAgICAgLy8gb3RoZXIgcmVxdWlyZWQgY2xhaW1zLlxuICAgICAgICBpZiAoYWRkaXRpb25hbENsYWltcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFpbSBpbiBkZWZhdWx0Q2xhaW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxDbGFpbXNbY2xhaW1dKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2NsYWltfScgcHJvcGVydHkgaXMgbm90IGFsbG93ZWQgd2hlbiBwYXNzaW5nIGFkZGl0aW9uYWxDbGFpbXMuIFRoaXMgY2xhaW0gaXMgaW5jbHVkZWQgaW4gdGhlIEpXVCBieSBkZWZhdWx0LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmtleUlkXG4gICAgICAgICAgICA/IHsgLi4uREVGQVVMVF9IRUFERVIsIGtpZDogdGhpcy5rZXlJZCB9XG4gICAgICAgICAgICA6IERFRkFVTFRfSEVBREVSO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0Q2xhaW1zLCBhZGRpdGlvbmFsQ2xhaW1zKTtcbiAgICAgICAgLy8gU2lnbiB0aGUgand0IGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlXG4gICAgICAgIGNvbnN0IHNpZ25lZEpXVCA9IGp3cy5zaWduKHsgaGVhZGVyLCBwYXlsb2FkLCBzZWNyZXQ6IHRoaXMua2V5IH0pO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7c2lnbmVkSldUfWAgfTtcbiAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7XG4gICAgICAgICAgICBleHBpcmF0aW9uOiBleHAgKiAxMDAwLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIEpXVCB0b2tlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpYXQgVGhlIGlzc3VlZCBhdCB0aW1lIGZvciB0aGUgSldULlxuICAgICAqIEByZXR1cm5zIEFuIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIEpXVC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RXhwaXJhdGlvblRpbWUoaWF0KSB7XG4gICAgICAgIGNvbnN0IGV4cCA9IGlhdCArIDM2MDA7IC8vIDM2MDAgc2Vjb25kcyA9IDEgaG91clxuICAgICAgICByZXR1cm4gZXhwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBKV1RBY2Nlc3MgY3JlZGVudGlhbHMgaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGlucHV0IG9wdGlvbnMuXG4gICAgICogQHBhcmFtIGpzb24gVGhlIGlucHV0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBzZXJ2aWNlIGFjY291bnQgYXV0aCBzZXR0aW5ncy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24uY2xpZW50X2VtYWlsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgY2xpZW50X2VtYWlsIGZpZWxkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLnByaXZhdGVfa2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgcHJpdmF0ZV9rZXkgZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeHRyYWN0IHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBqc29uIGtleSBmaWxlLlxuICAgICAgICB0aGlzLmVtYWlsID0ganNvbi5jbGllbnRfZW1haWw7XG4gICAgICAgIHRoaXMua2V5ID0ganNvbi5wcml2YXRlX2tleTtcbiAgICAgICAgdGhpcy5rZXlJZCA9IGpzb24ucHJpdmF0ZV9rZXlfaWQ7XG4gICAgICAgIHRoaXMucHJvamVjdElkID0ganNvbi5wcm9qZWN0X2lkO1xuICAgIH1cbiAgICBmcm9tU3RyZWFtKGlucHV0U3RyZWFtLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtKS50aGVuKCgpID0+IGNhbGxiYWNrKCksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlucHV0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTXVzdCBwYXNzIGluIGEgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIHNlcnZpY2UgYWNjb3VudCBhdXRoIHNldHRpbmdzLicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzID0gJyc7XG4gICAgICAgICAgICBpbnB1dFN0cmVhbVxuICAgICAgICAgICAgICAgIC5zZXRFbmNvZGluZygndXRmOCcpXG4gICAgICAgICAgICAgICAgLm9uKCdkYXRhJywgY2h1bmsgPT4gKHMgKz0gY2h1bmspKVxuICAgICAgICAgICAgICAgIC5vbignZXJyb3InLCByZWplY3QpXG4gICAgICAgICAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uocyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUpTT04oZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5KV1RBY2Nlc3MgPSBKV1RBY2Nlc3M7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTMgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkpXVCA9IHZvaWQgMDtcbmNvbnN0IGd0b2tlbl8xID0gcmVxdWlyZShcImd0b2tlblwiKTtcbmNvbnN0IGp3dGFjY2Vzc18xID0gcmVxdWlyZShcIi4vand0YWNjZXNzXCIpO1xuY29uc3Qgb2F1dGgyY2xpZW50XzEgPSByZXF1aXJlKFwiLi9vYXV0aDJjbGllbnRcIik7XG5jb25zdCBhdXRoY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoY2xpZW50XCIpO1xuY2xhc3MgSldUIGV4dGVuZHMgb2F1dGgyY2xpZW50XzEuT0F1dGgyQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zT3JFbWFpbCwga2V5RmlsZSwga2V5LCBzY29wZXMsIHN1YmplY3QsIGtleUlkKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zT3JFbWFpbCAmJiB0eXBlb2Ygb3B0aW9uc09yRW1haWwgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IG9wdGlvbnNPckVtYWlsXG4gICAgICAgICAgICA6IHsgZW1haWw6IG9wdGlvbnNPckVtYWlsLCBrZXlGaWxlLCBrZXksIGtleUlkLCBzY29wZXMsIHN1YmplY3QgfTtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuZW1haWwgPSBvcHRzLmVtYWlsO1xuICAgICAgICB0aGlzLmtleUZpbGUgPSBvcHRzLmtleUZpbGU7XG4gICAgICAgIHRoaXMua2V5ID0gb3B0cy5rZXk7XG4gICAgICAgIHRoaXMua2V5SWQgPSBvcHRzLmtleUlkO1xuICAgICAgICB0aGlzLnNjb3BlcyA9IG9wdHMuc2NvcGVzO1xuICAgICAgICB0aGlzLnN1YmplY3QgPSBvcHRzLnN1YmplY3Q7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbENsYWltcyA9IG9wdHMuYWRkaXRpb25hbENsYWltcztcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhbiBleHBpcmVkIHJlZnJlc2ggdG9rZW4sIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBiZVxuICAgICAgICAvLyByZWZyZXNoZWQgYmVmb3JlIHRoZSBmaXJzdCBBUEkgY2FsbCBpcyBtYWRlLlxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0geyByZWZyZXNoX3Rva2VuOiAnand0LXBsYWNlaG9sZGVyJywgZXhwaXJ5X2RhdGU6IDEgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGNyZWRlbnRpYWwgd2l0aCB0aGUgc3BlY2lmaWVkIHNjb3Blcy5cbiAgICAgKiBAcGFyYW0gc2NvcGVzIExpc3Qgb2YgcmVxdWVzdGVkIHNjb3BlcyBvciBhIHNpbmdsZSBzY29wZS5cbiAgICAgKiBAcmV0dXJuIFRoZSBjbG9uZWQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgY3JlYXRlU2NvcGVkKHNjb3Blcykge1xuICAgICAgICBjb25zdCBqd3QgPSBuZXcgSldUKHRoaXMpO1xuICAgICAgICBqd3Quc2NvcGVzID0gc2NvcGVzO1xuICAgICAgICByZXR1cm4gand0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnRhaW5zIHRoZSBtZXRhZGF0YSB0byBiZSBzZW50IHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHRoZSBVUkkgYmVpbmcgYXV0aG9yaXplZC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZXF1ZXN0TWV0YWRhdGFBc3luYyh1cmwpIHtcbiAgICAgICAgdXJsID0gdGhpcy5kZWZhdWx0U2VydmljZVBhdGggPyBgaHR0cHM6Ly8ke3RoaXMuZGVmYXVsdFNlcnZpY2VQYXRofS9gIDogdXJsO1xuICAgICAgICBjb25zdCB1c2VTZWxmU2lnbmVkSldUID0gKCF0aGlzLmhhc1VzZXJTY29wZXMoKSAmJiB1cmwpIHx8XG4gICAgICAgICAgICAodGhpcy51c2VKV1RBY2Nlc3NXaXRoU2NvcGUgJiYgdGhpcy5oYXNBbnlTY29wZXMoKSkgfHxcbiAgICAgICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gIT09IGF1dGhjbGllbnRfMS5ERUZBVUxUX1VOSVZFUlNFO1xuICAgICAgICBpZiAodGhpcy5zdWJqZWN0ICYmIHRoaXMudW5pdmVyc2VEb21haW4gIT09IGF1dGhjbGllbnRfMS5ERUZBVUxUX1VOSVZFUlNFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2VydmljZSBBY2NvdW50IHVzZXIgaXMgY29uZmlndXJlZCBmb3IgdGhlIGNyZWRlbnRpYWwuIERvbWFpbi13aWRlIGRlbGVnYXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB1bml2ZXJzZXMgb3RoZXIgdGhhbiAke2F1dGhjbGllbnRfMS5ERUZBVUxUX1VOSVZFUlNFfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkgJiYgdXNlU2VsZlNpZ25lZEpXVCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbENsYWltcyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbENsYWltcy50YXJnZXRfYXVkaWVuY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRva2VucyB9ID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmFkZFNoYXJlZE1ldGFkYXRhSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW5zLmlkX3Rva2VufWAsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyBzY29wZXMgaGF2ZSBiZWVuIHNldCwgYnV0IGEgdXJpIGhhcyBiZWVuIHByb3ZpZGVkLiBVc2UgSldUQWNjZXNzXG4gICAgICAgICAgICAgICAgLy8gY3JlZGVudGlhbHMuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2VzcyA9IG5ldyBqd3RhY2Nlc3NfMS5KV1RBY2Nlc3ModGhpcy5lbWFpbCwgdGhpcy5rZXksIHRoaXMua2V5SWQsIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNjb3BlcztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNVc2VyU2NvcGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzID0gdGhpcy5zY29wZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzID0gdGhpcy5kZWZhdWx0U2NvcGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1c2VTY29wZXMgPSB0aGlzLnVzZUpXVEFjY2Vzc1dpdGhTY29wZSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXZlcnNlRG9tYWluICE9PSBhdXRoY2xpZW50XzEuREVGQVVMVF9VTklWRVJTRTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5hY2Nlc3MuZ2V0UmVxdWVzdEhlYWRlcnModXJsICE9PSBudWxsICYmIHVybCAhPT0gdm9pZCAwID8gdXJsIDogdW5kZWZpbmVkLCB0aGlzLmFkZGl0aW9uYWxDbGFpbXMsIFxuICAgICAgICAgICAgICAgIC8vIFNjb3BlcyB0YWtlIHByZWNlZGVudCBvdmVyIGF1ZGllbmNlIGZvciBzaWduaW5nLFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIG9ubHkgcHJvdmlkZSB0aGVtIGlmIGB1c2VKV1RBY2Nlc3NXaXRoU2NvcGVgIGlzIG9uIG9yXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGluIGEgbm9uLWRlZmF1bHQgdW5pdmVyc2VcbiAgICAgICAgICAgICAgICB1c2VTY29wZXMgPyBzY29wZXMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGhlYWRlcnM6IHRoaXMuYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKGhlYWRlcnMpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5oYXNBbnlTY29wZXMoKSB8fCB0aGlzLmFwaUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFJlcXVlc3RNZXRhZGF0YUFzeW5jKHVybCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBubyBhdWRpZW5jZSwgYXBpS2V5LCBvciBzY29wZXMgYXJlIHByb3ZpZGVkLCB3ZSBzaG91bGQgbm90IGF0dGVtcHRcbiAgICAgICAgICAgIC8vIHRvIHBvcHVsYXRlIGFueSBoZWFkZXJzOlxuICAgICAgICAgICAgcmV0dXJuIHsgaGVhZGVyczoge30gfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIGFuIElEIHRva2VuLlxuICAgICAqIEBwYXJhbSB0YXJnZXRBdWRpZW5jZSB0aGUgYXVkaWVuY2UgZm9yIHRoZSBmZXRjaGVkIElEIHRva2VuLlxuICAgICAqL1xuICAgIGFzeW5jIGZldGNoSWRUb2tlbih0YXJnZXRBdWRpZW5jZSkge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZ1Rva2VuIGZvciBmZXRjaGluZyBhbiBJRCB0b2tlblxuICAgICAgICBjb25zdCBndG9rZW4gPSBuZXcgZ3Rva2VuXzEuR29vZ2xlVG9rZW4oe1xuICAgICAgICAgICAgaXNzOiB0aGlzLmVtYWlsLFxuICAgICAgICAgICAgc3ViOiB0aGlzLnN1YmplY3QsXG4gICAgICAgICAgICBzY29wZTogdGhpcy5zY29wZXMgfHwgdGhpcy5kZWZhdWx0U2NvcGVzLFxuICAgICAgICAgICAga2V5RmlsZTogdGhpcy5rZXlGaWxlLFxuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxDbGFpbXM6IHsgdGFyZ2V0X2F1ZGllbmNlOiB0YXJnZXRBdWRpZW5jZSB9LFxuICAgICAgICAgICAgdHJhbnNwb3J0ZXI6IHRoaXMudHJhbnNwb3J0ZXIsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBndG9rZW4uZ2V0VG9rZW4oe1xuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFndG9rZW4uaWRUb2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVycm9yOiBGYWlsZWQgdG8gZmV0Y2ggSUQgdG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3Rva2VuLmlkVG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGVyZSBhcmUgY3VycmVudGx5IHNjb3BlcyBhdmFpbGFibGUuXG4gICAgICovXG4gICAgaGFzVXNlclNjb3BlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNjb3Blcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3Blcy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcmUgdGhlcmUgYW55IGRlZmF1bHQgb3IgdXNlciBzY29wZXMgZGVmaW5lZC5cbiAgICAgKi9cbiAgICBoYXNBbnlTY29wZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNjb3BlcyAmJiB0aGlzLnNjb3Blcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRTY29wZXMgJiYgdGhpcy5kZWZhdWx0U2NvcGVzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhdXRob3JpemUoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZUFzeW5jKCkudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRob3JpemVBc3luYygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGF1dGhvcml6ZUFzeW5jKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZXN1bHQgcmV0dXJuZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gcmVzdWx0LnRva2VucztcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuID0gJ2p3dC1wbGFjZWhvbGRlcic7XG4gICAgICAgIHRoaXMua2V5ID0gdGhpcy5ndG9rZW4ua2V5O1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5ndG9rZW4uaXNzO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRva2VucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiBpZ25vcmVkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoVG9rZW5Ob0NhY2hlKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICByZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgY29uc3QgZ3Rva2VuID0gdGhpcy5jcmVhdGVHVG9rZW4oKTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBndG9rZW4uZ2V0VG9rZW4oe1xuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiB0aGlzLmlzVG9rZW5FeHBpcmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0ge1xuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0b2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICB0b2tlbl90eXBlOiAnQmVhcmVyJyxcbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiBndG9rZW4uZXhwaXJlc0F0LFxuICAgICAgICAgICAgaWRfdG9rZW46IGd0b2tlbi5pZFRva2VuLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVtaXQoJ3Rva2VucycsIHRva2Vucyk7XG4gICAgICAgIHJldHVybiB7IHJlczogbnVsbCwgdG9rZW5zIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGdUb2tlbiBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuXG4gICAgICovXG4gICAgY3JlYXRlR1Rva2VuKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3Rva2VuKSB7XG4gICAgICAgICAgICB0aGlzLmd0b2tlbiA9IG5ldyBndG9rZW5fMS5Hb29nbGVUb2tlbih7XG4gICAgICAgICAgICAgICAgaXNzOiB0aGlzLmVtYWlsLFxuICAgICAgICAgICAgICAgIHN1YjogdGhpcy5zdWJqZWN0LFxuICAgICAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlcyB8fCB0aGlzLmRlZmF1bHRTY29wZXMsXG4gICAgICAgICAgICAgICAga2V5RmlsZTogdGhpcy5rZXlGaWxlLFxuICAgICAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbENsYWltczogdGhpcy5hZGRpdGlvbmFsQ2xhaW1zLFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydGVyOiB0aGlzLnRyYW5zcG9ydGVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ3Rva2VuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBKV1QgY3JlZGVudGlhbHMgaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGlucHV0IG9wdGlvbnMuXG4gICAgICogQHBhcmFtIGpzb24gVGhlIGlucHV0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiBJZiB5b3UgYWNjZXB0IGEgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uIChjcmVkZW50aWFsIEpTT04vRmlsZS9TdHJlYW0pIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlIGZvciBhdXRoZW50aWNhdGlvbiB0byBHb29nbGUgQ2xvdWQsIHlvdSBtdXN0IHZhbGlkYXRlIGl0IGJlZm9yZSBwcm92aWRpbmcgaXQgdG8gYW55IEdvb2dsZSBBUEkgb3IgbGlicmFyeS4gUHJvdmlkaW5nIGFuIHVudmFsaWRhdGVkIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbiB0byBHb29nbGUgQVBJcyBjYW4gY29tcHJvbWlzZSB0aGUgc2VjdXJpdHkgb2YgeW91ciBzeXN0ZW1zIGFuZCBkYXRhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8ge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL2V4dGVybmFsL2V4dGVybmFsbHktc291cmNlZC1jcmVkZW50aWFscyBWYWxpZGF0ZSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb25zIGZyb20gZXh0ZXJuYWwgc291cmNlc30uXG4gICAgICovXG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwYXNzIGluIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VydmljZSBhY2NvdW50IGF1dGggc2V0dGluZ3MuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLmNsaWVudF9lbWFpbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIGNsaWVudF9lbWFpbCBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi5wcml2YXRlX2tleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIHByaXZhdGVfa2V5IGZpZWxkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZnJvbSB0aGUganNvbiBrZXkgZmlsZS5cbiAgICAgICAgdGhpcy5lbWFpbCA9IGpzb24uY2xpZW50X2VtYWlsO1xuICAgICAgICB0aGlzLmtleSA9IGpzb24ucHJpdmF0ZV9rZXk7XG4gICAgICAgIHRoaXMua2V5SWQgPSBqc29uLnByaXZhdGVfa2V5X2lkO1xuICAgICAgICB0aGlzLnByb2plY3RJZCA9IGpzb24ucHJvamVjdF9pZDtcbiAgICAgICAgdGhpcy5xdW90YVByb2plY3RJZCA9IGpzb24ucXVvdGFfcHJvamVjdF9pZDtcbiAgICAgICAgdGhpcy51bml2ZXJzZURvbWFpbiA9IGpzb24udW5pdmVyc2VfZG9tYWluIHx8IHRoaXMudW5pdmVyc2VEb21haW47XG4gICAgfVxuICAgIGZyb21TdHJlYW0oaW5wdXRTdHJlYW0sIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5mcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0pLnRoZW4oKCkgPT4gY2FsbGJhY2soKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5wdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcGFzcyBpbiBhIHN0cmVhbSBjb250YWluaW5nIHRoZSBzZXJ2aWNlIGFjY291bnQgYXV0aCBzZXR0aW5ncy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzID0gJyc7XG4gICAgICAgICAgICBpbnB1dFN0cmVhbVxuICAgICAgICAgICAgICAgIC5zZXRFbmNvZGluZygndXRmOCcpXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCBjaHVuayA9PiAocyArPSBjaHVuaykpXG4gICAgICAgICAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uocyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUpTT04oZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEpXVCBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyBhbiBBUEkgS2V5IGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gYXBpS2V5IFRoZSBBUEkgS2V5IGluIHN0cmluZyBmb3JtLlxuICAgICAqL1xuICAgIGZyb21BUElLZXkoYXBpS2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXBpS2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYW4gQVBJIEtleSBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzaW5nIHRoZSBrZXkgb3Iga2V5RmlsZSBvbiB0aGUgSldUIGNsaWVudCwgb2J0YWluIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAgICogdGhlIGtleSBhbmQgdGhlIGNsaWVudCBlbWFpbC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRDcmVkZW50aWFscygpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5KSB7XG4gICAgICAgICAgICByZXR1cm4geyBwcml2YXRlX2tleTogdGhpcy5rZXksIGNsaWVudF9lbWFpbDogdGhpcy5lbWFpbCB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua2V5RmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZ3Rva2VuID0gdGhpcy5jcmVhdGVHVG9rZW4oKTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWRzID0gYXdhaXQgZ3Rva2VuLmdldENyZWRlbnRpYWxzKHRoaXMua2V5RmlsZSk7XG4gICAgICAgICAgICByZXR1cm4geyBwcml2YXRlX2tleTogY3JlZHMucHJpdmF0ZUtleSwgY2xpZW50X2VtYWlsOiBjcmVkcy5jbGllbnRFbWFpbCB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQSBrZXkgb3IgYSBrZXlGaWxlIG11c3QgYmUgcHJvdmlkZWQgdG8gZ2V0Q3JlZGVudGlhbHMuJyk7XG4gICAgfVxufVxuZXhwb3J0cy5KV1QgPSBKV1Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVzZXJSZWZyZXNoQ2xpZW50ID0gZXhwb3J0cy5VU0VSX1JFRlJFU0hfQUNDT1VOVF9UWVBFID0gdm9pZCAwO1xuY29uc3Qgb2F1dGgyY2xpZW50XzEgPSByZXF1aXJlKFwiLi9vYXV0aDJjbGllbnRcIik7XG5jb25zdCBxdWVyeXN0cmluZ18xID0gcmVxdWlyZShcInF1ZXJ5c3RyaW5nXCIpO1xuZXhwb3J0cy5VU0VSX1JFRlJFU0hfQUNDT1VOVF9UWVBFID0gJ2F1dGhvcml6ZWRfdXNlcic7XG5jbGFzcyBVc2VyUmVmcmVzaENsaWVudCBleHRlbmRzIG9hdXRoMmNsaWVudF8xLk9BdXRoMkNsaWVudCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uc09yQ2xpZW50SWQsIGNsaWVudFNlY3JldCwgcmVmcmVzaFRva2VuLCBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMsIGZvcmNlUmVmcmVzaE9uRmFpbHVyZSkge1xuICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9uc09yQ2xpZW50SWQgJiYgdHlwZW9mIG9wdGlvbnNPckNsaWVudElkID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBvcHRpb25zT3JDbGllbnRJZFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnNPckNsaWVudElkLFxuICAgICAgICAgICAgICAgIGNsaWVudFNlY3JldCxcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICAgICAgZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzLFxuICAgICAgICAgICAgICAgIGZvcmNlUmVmcmVzaE9uRmFpbHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoVG9rZW4gPSBvcHRzLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuID0gb3B0cy5yZWZyZXNoVG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuLlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gQW4gaWdub3JlZCByZWZyZXNoVG9rZW4uLlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBPcHRpb25hbCBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoVG9rZW5Ob0NhY2hlKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICByZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnJlZnJlc2hUb2tlbk5vQ2FjaGUodGhpcy5fcmVmcmVzaFRva2VuKTtcbiAgICB9XG4gICAgYXN5bmMgZmV0Y2hJZFRva2VuKHRhcmdldEF1ZGllbmNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgICAgICAuLi5Vc2VyUmVmcmVzaENsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICB1cmw6IHRoaXMuZW5kcG9pbnRzLm9hdXRoMlRva2VuVXJsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGRhdGE6ICgwLCBxdWVyeXN0cmluZ18xLnN0cmluZ2lmeSkoe1xuICAgICAgICAgICAgICAgIGNsaWVudF9pZDogdGhpcy5fY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLl9yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICAgICAgdGFyZ2V0X2F1ZGllbmNlOiB0YXJnZXRBdWRpZW5jZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcy5kYXRhLmlkX3Rva2VuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBVc2VyUmVmcmVzaENsaWVudCBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gaW5wdXRcbiAgICAgKiBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBqc29uIFRoZSBpbnB1dCBvYmplY3QuXG4gICAgICovXG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwYXNzIGluIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgdXNlciByZWZyZXNoIHRva2VuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24udHlwZSAhPT0gJ2F1dGhvcml6ZWRfdXNlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluY29taW5nIEpTT04gb2JqZWN0IGRvZXMgbm90IGhhdmUgdGhlIFwiYXV0aG9yaXplZF91c2VyXCIgdHlwZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi5jbGllbnRfaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluY29taW5nIEpTT04gb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gYSBjbGllbnRfaWQgZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24uY2xpZW50X3NlY3JldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIGNsaWVudF9zZWNyZXQgZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ucmVmcmVzaF90b2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIHJlZnJlc2hfdG9rZW4gZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGllbnRJZCA9IGpzb24uY2xpZW50X2lkO1xuICAgICAgICB0aGlzLl9jbGllbnRTZWNyZXQgPSBqc29uLmNsaWVudF9zZWNyZXQ7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hUb2tlbiA9IGpzb24ucmVmcmVzaF90b2tlbjtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuID0ganNvbi5yZWZyZXNoX3Rva2VuO1xuICAgICAgICB0aGlzLnF1b3RhUHJvamVjdElkID0ganNvbi5xdW90YV9wcm9qZWN0X2lkO1xuICAgICAgICB0aGlzLnVuaXZlcnNlRG9tYWluID0ganNvbi51bml2ZXJzZV9kb21haW4gfHwgdGhpcy51bml2ZXJzZURvbWFpbjtcbiAgICB9XG4gICAgZnJvbVN0cmVhbShpbnB1dFN0cmVhbSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSkudGhlbigoKSA9PiBjYWxsYmFjaygpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBzdHJlYW0gY29udGFpbmluZyB0aGUgdXNlciByZWZyZXNoIHRva2VuLicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzID0gJyc7XG4gICAgICAgICAgICBpbnB1dFN0cmVhbVxuICAgICAgICAgICAgICAgIC5zZXRFbmNvZGluZygndXRmOCcpXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCBjaHVuayA9PiAocyArPSBjaHVuaykpXG4gICAgICAgICAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uocyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUpTT04oZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgVXNlclJlZnJlc2hDbGllbnQgY3JlZGVudGlhbHMgaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGlucHV0XG4gICAgICogb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ganNvbiBUaGUgaW5wdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBVc2VyUmVmcmVzaENsaWVudCgpO1xuICAgICAgICBjbGllbnQuZnJvbUpTT04oanNvbik7XG4gICAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfVxufVxuZXhwb3J0cy5Vc2VyUmVmcmVzaENsaWVudCA9IFVzZXJSZWZyZXNoQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW1wZXJzb25hdGVkID0gZXhwb3J0cy5JTVBFUlNPTkFURURfQUNDT1VOVF9UWVBFID0gdm9pZCAwO1xuY29uc3Qgb2F1dGgyY2xpZW50XzEgPSByZXF1aXJlKFwiLi9vYXV0aDJjbGllbnRcIik7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmV4cG9ydHMuSU1QRVJTT05BVEVEX0FDQ09VTlRfVFlQRSA9ICdpbXBlcnNvbmF0ZWRfc2VydmljZV9hY2NvdW50JztcbmNsYXNzIEltcGVyc29uYXRlZCBleHRlbmRzIG9hdXRoMmNsaWVudF8xLk9BdXRoMkNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW1wZXJzb25hdGVkIHNlcnZpY2UgYWNjb3VudCBjcmVkZW50aWFscy5cbiAgICAgKlxuICAgICAqIENyZWF0ZSBhIG5ldyBhY2Nlc3MgdG9rZW4gYnkgaW1wZXJzb25hdGluZyBhbm90aGVyIHNlcnZpY2UgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIEltcGVyc29uYXRlZCBDcmVkZW50aWFscyBhbGxvd2luZyBjcmVkZW50aWFscyBpc3N1ZWQgdG8gYSB1c2VyIG9yXG4gICAgICogc2VydmljZSBhY2NvdW50IHRvIGltcGVyc29uYXRlIGFub3RoZXIuIFRoZSBzb3VyY2UgcHJvamVjdCB1c2luZ1xuICAgICAqIEltcGVyc29uYXRlZCBDcmVkZW50aWFscyBtdXN0IGVuYWJsZSB0aGUgXCJJQU1DcmVkZW50aWFsc1wiIEFQSS5cbiAgICAgKiBBbHNvLCB0aGUgdGFyZ2V0IHNlcnZpY2UgYWNjb3VudCBtdXN0IGdyYW50IHRoZSBvcmdpbmF0aW5nIHByaW5jaXBhbFxuICAgICAqIHRoZSBcIlNlcnZpY2UgQWNjb3VudCBUb2tlbiBDcmVhdG9yXCIgSUFNIHJvbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuc291cmNlQ2xpZW50XSB0aGUgc291cmNlIGNyZWRlbnRpYWwgdXNlZCBhcyB0b1xuICAgICAqIGFjcXVpcmUgdGhlIGltcGVyc29uYXRlZCBjcmVkZW50aWFscy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudGFyZ2V0UHJpbmNpcGFsXSB0aGUgc2VydmljZSBhY2NvdW50IHRvXG4gICAgICogaW1wZXJzb25hdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuZGVsZWdhdGVzXSB0aGUgY2hhaW5lZCBsaXN0IG9mIGRlbGVnYXRlc1xuICAgICAqIHJlcXVpcmVkIHRvIGdyYW50IHRoZSBmaW5hbCBhY2Nlc3NfdG9rZW4uIElmIHNldCwgdGhlIHNlcXVlbmNlIG9mXG4gICAgICogaWRlbnRpdGllcyBtdXN0IGhhdmUgXCJTZXJ2aWNlIEFjY291bnQgVG9rZW4gQ3JlYXRvclwiIGNhcGFiaWxpdHkgZ3JhbnRlZCB0b1xuICAgICAqIHRoZSBwcmVjZWRpbmcgaWRlbnRpdHkuIEZvciBleGFtcGxlLCBpZiBzZXQgdG8gW3NlcnZpY2VBY2NvdW50QixcbiAgICAgKiBzZXJ2aWNlQWNjb3VudENdLCB0aGUgc291cmNlQ3JlZGVudGlhbCBtdXN0IGhhdmUgdGhlIFRva2VuIENyZWF0b3Igcm9sZSBvblxuICAgICAqIHNlcnZpY2VBY2NvdW50Qi4gc2VydmljZUFjY291bnRCIG11c3QgaGF2ZSB0aGUgVG9rZW4gQ3JlYXRvciBvblxuICAgICAqIHNlcnZpY2VBY2NvdW50Qy4gRmluYWxseSwgQyBtdXN0IGhhdmUgVG9rZW4gQ3JlYXRvciBvbiB0YXJnZXRfcHJpbmNpcGFsLlxuICAgICAqIElmIGxlZnQgdW5zZXQsIHNvdXJjZUNyZWRlbnRpYWwgbXVzdCBoYXZlIHRoYXQgcm9sZSBvbiB0YXJnZXRQcmluY2lwYWwuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMudGFyZ2V0U2NvcGVzXSBzY29wZXMgdG8gcmVxdWVzdCBkdXJpbmcgdGhlXG4gICAgICogYXV0aG9yaXphdGlvbiBncmFudC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGlmZXRpbWVdIG51bWJlciBvZiBzZWNvbmRzIHRoZSBkZWxlZ2F0ZWRcbiAgICAgKiBjcmVkZW50aWFsIHNob3VsZCBiZSB2YWxpZCBmb3IgdXAgdG8gMzYwMCBzZWNvbmRzIGJ5IGRlZmF1bHQsIG9yIDQzLDIwMFxuICAgICAqIHNlY29uZHMgYnkgZXh0ZW5kaW5nIHRoZSB0b2tlbidzIGxpZmV0aW1lLCBzZWU6XG4gICAgICogaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2lhbS9kb2NzL2NyZWF0aW5nLXNob3J0LWxpdmVkLXNlcnZpY2UtYWNjb3VudC1jcmVkZW50aWFscyNzYS1jcmVkZW50aWFscy1vYXV0aFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lbmRwb2ludF0gYXBpIGVuZHBvaW50IG92ZXJyaWRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYW4gZXhwaXJlZCByZWZyZXNoIHRva2VuLCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVcbiAgICAgICAgLy8gcmVmcmVzaGVkIGJlZm9yZSB0aGUgZmlyc3QgQVBJIGNhbGwgaXMgbWFkZS5cbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IHtcbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiAxLFxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogJ2ltcGVyc29uYXRlZC1wbGFjZWhvbGRlcicsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlQ2xpZW50ID0gKF9hID0gb3B0aW9ucy5zb3VyY2VDbGllbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBvYXV0aDJjbGllbnRfMS5PQXV0aDJDbGllbnQoKTtcbiAgICAgICAgdGhpcy50YXJnZXRQcmluY2lwYWwgPSAoX2IgPSBvcHRpb25zLnRhcmdldFByaW5jaXBhbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGVzID0gKF9jID0gb3B0aW9ucy5kZWxlZ2F0ZXMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IFtdO1xuICAgICAgICB0aGlzLnRhcmdldFNjb3BlcyA9IChfZCA9IG9wdGlvbnMudGFyZ2V0U2NvcGVzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXTtcbiAgICAgICAgdGhpcy5saWZldGltZSA9IChfZSA9IG9wdGlvbnMubGlmZXRpbWUpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IDM2MDA7XG4gICAgICAgIGNvbnN0IHVzaW5nRXhwbGljaXRVbml2ZXJzZURvbWFpbiA9ICEhKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShvcHRpb25zKS5nZXQoJ3VuaXZlcnNlX2RvbWFpbicpO1xuICAgICAgICBpZiAoIXVzaW5nRXhwbGljaXRVbml2ZXJzZURvbWFpbikge1xuICAgICAgICAgICAgLy8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdW5pdmVyc2Ugd2l0aCB0aGUgc291cmNlJ3MgdW5pdmVyc2VcbiAgICAgICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gPSB0aGlzLnNvdXJjZUNsaWVudC51bml2ZXJzZURvbWFpbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNvdXJjZUNsaWVudC51bml2ZXJzZURvbWFpbiAhPT0gdGhpcy51bml2ZXJzZURvbWFpbikge1xuICAgICAgICAgICAgLy8gbm9uLWRlZmF1bHQgdW5pdmVyc2UgYW5kIGlzIG5vdCBtYXRjaGluZyB0aGUgc291cmNlIC0gdGhpcyBjb3VsZCBiZSBhIGNyZWRlbnRpYWwgbGVha1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVuaXZlcnNlIGRvbWFpbiAke3RoaXMuc291cmNlQ2xpZW50LnVuaXZlcnNlRG9tYWlufSBpbiBzb3VyY2UgY3JlZGVudGlhbHMgZG9lcyBub3QgbWF0Y2ggJHt0aGlzLnVuaXZlcnNlRG9tYWlufSB1bml2ZXJzZSBkb21haW4gc2V0IGZvciBpbXBlcnNvbmF0ZWQgY3JlZGVudGlhbHMuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRwb2ludCA9XG4gICAgICAgICAgICAoX2YgPSBvcHRpb25zLmVuZHBvaW50KSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBgaHR0cHM6Ly9pYW1jcmVkZW50aWFscy4ke3RoaXMudW5pdmVyc2VEb21haW59YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2lnbnMgc29tZSBieXRlcy5cbiAgICAgKlxuICAgICAqIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vaWFtL2RvY3MvcmVmZXJlbmNlL2NyZWRlbnRpYWxzL3Jlc3QvdjEvcHJvamVjdHMuc2VydmljZUFjY291bnRzL3NpZ25CbG9iIFJlZmVyZW5jZSBEb2N1bWVudGF0aW9ufVxuICAgICAqIEBwYXJhbSBibG9iVG9TaWduIFN0cmluZyB0byBzaWduLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB7QGxpbmsgU2lnbkJsb2JSZXNwb25zZX0gZGVub3RpbmcgdGhlIGtleUlEIGFuZCBzaWduZWRCbG9iIGluIGJhc2U2NCBzdHJpbmdcbiAgICAgKi9cbiAgICBhc3luYyBzaWduKGJsb2JUb1NpZ24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGBwcm9qZWN0cy8tL3NlcnZpY2VBY2NvdW50cy8ke3RoaXMudGFyZ2V0UHJpbmNpcGFsfWA7XG4gICAgICAgIGNvbnN0IHUgPSBgJHt0aGlzLmVuZHBvaW50fS92MS8ke25hbWV9OnNpZ25CbG9iYDtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGRlbGVnYXRlczogdGhpcy5kZWxlZ2F0ZXMsXG4gICAgICAgICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShibG9iVG9TaWduKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc291cmNlQ2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4uSW1wZXJzb25hdGVkLlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdSxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9XG4gICAgLyoqIFRoZSBzZXJ2aWNlIGFjY291bnQgZW1haWwgdG8gYmUgaW1wZXJzb25hdGVkLiAqL1xuICAgIGdldFRhcmdldFByaW5jaXBhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0UHJpbmNpcGFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbi5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoVG9rZW4oKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSAncHJvamVjdHMvLS9zZXJ2aWNlQWNjb3VudHMvJyArIHRoaXMudGFyZ2V0UHJpbmNpcGFsO1xuICAgICAgICAgICAgY29uc3QgdSA9IGAke3RoaXMuZW5kcG9pbnR9L3YxLyR7bmFtZX06Z2VuZXJhdGVBY2Nlc3NUb2tlbmA7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgICAgIGRlbGVnYXRlczogdGhpcy5kZWxlZ2F0ZXMsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMudGFyZ2V0U2NvcGVzLFxuICAgICAgICAgICAgICAgIGxpZmV0aW1lOiB0aGlzLmxpZmV0aW1lICsgJ3MnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc291cmNlQ2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIC4uLkltcGVyc29uYXRlZC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICAgICAgdXJsOiB1LFxuICAgICAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuID0gdG9rZW5SZXNwb25zZS5hY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMuZXhwaXJ5X2RhdGUgPSBEYXRlLnBhcnNlKHRva2VuUmVzcG9uc2UuZXhwaXJlVGltZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICByZXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gMDtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBnYXhpb3NfMS5HYXhpb3NFcnJvcikge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9IChfYyA9IChfYiA9IChfYSA9IGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5yZXNwb25zZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGEpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5lcnJvcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnN0YXR1cztcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gKF9mID0gKF9lID0gKF9kID0gZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZGF0YSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmVycm9yKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0dXMgJiYgbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgJHtzdGF0dXN9OiB1bmFibGUgdG8gaW1wZXJzb25hdGU6ICR7bWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGB1bmFibGUgdG8gaW1wZXJzb25hdGU6ICR7ZXJyb3J9YDtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYW4gT3BlbklEIENvbm5lY3QgSUQgdG9rZW4gZm9yIGEgc2VydmljZSBhY2NvdW50LlxuICAgICAqXG4gICAgICoge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9pYW0vZG9jcy9yZWZlcmVuY2UvY3JlZGVudGlhbHMvcmVzdC92MS9wcm9qZWN0cy5zZXJ2aWNlQWNjb3VudHMvZ2VuZXJhdGVJZFRva2VuIFJlZmVyZW5jZSBEb2N1bWVudGF0aW9ufVxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldEF1ZGllbmNlIHRoZSBhdWRpZW5jZSBmb3IgdGhlIGZldGNoZWQgSUQgdG9rZW4uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgdGhlIGZvciB0aGUgcmVxdWVzdFxuICAgICAqIEByZXR1cm4gYW4gT3BlbklEIENvbm5lY3QgSUQgdG9rZW5cbiAgICAgKi9cbiAgICBhc3luYyBmZXRjaElkVG9rZW4odGFyZ2V0QXVkaWVuY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGBwcm9qZWN0cy8tL3NlcnZpY2VBY2NvdW50cy8ke3RoaXMudGFyZ2V0UHJpbmNpcGFsfWA7XG4gICAgICAgIGNvbnN0IHUgPSBgJHt0aGlzLmVuZHBvaW50fS92MS8ke25hbWV9OmdlbmVyYXRlSWRUb2tlbmA7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICBkZWxlZ2F0ZXM6IHRoaXMuZGVsZWdhdGVzLFxuICAgICAgICAgICAgYXVkaWVuY2U6IHRhcmdldEF1ZGllbmNlLFxuICAgICAgICAgICAgaW5jbHVkZUVtYWlsOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaW5jbHVkZUVtYWlsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlLFxuICAgICAgICAgICAgdXNlRW1haWxBenA6IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pbmNsdWRlRW1haWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc291cmNlQ2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4uSW1wZXJzb25hdGVkLlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdSxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXMuZGF0YS50b2tlbjtcbiAgICB9XG59XG5leHBvcnRzLkltcGVyc29uYXRlZCA9IEltcGVyc29uYXRlZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT0F1dGhDbGllbnRBdXRoSGFuZGxlciA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0RXJyb3JGcm9tT0F1dGhFcnJvclJlc3BvbnNlID0gZ2V0RXJyb3JGcm9tT0F1dGhFcnJvclJlc3BvbnNlO1xuY29uc3QgcXVlcnlzdHJpbmcgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCIuLi9jcnlwdG8vY3J5cHRvXCIpO1xuLyoqIExpc3Qgb2YgSFRUUCBtZXRob2RzIHRoYXQgYWNjZXB0IHJlcXVlc3QgYm9kaWVzLiAqL1xuY29uc3QgTUVUSE9EU19TVVBQT1JUSU5HX1JFUVVFU1RfQk9EWSA9IFsnUFVUJywgJ1BPU1QnLCAnUEFUQ0gnXTtcbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIGhhbmRsaW5nIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpbiBPQXV0aC1iYXNlZFxuICogb3BlcmF0aW9ucy5cbiAqIFdoZW4gcmVxdWVzdC1ib2R5IGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyB1c2VkLCBvbmx5IGFwcGxpY2F0aW9uL2pzb24gYW5kXG4gKiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgY29udGVudCB0eXBlcyBmb3IgSFRUUCBtZXRob2RzIHRoYXQgc3VwcG9ydFxuICogcmVxdWVzdCBib2RpZXMgYXJlIHN1cHBvcnRlZC5cbiAqL1xuY2xhc3MgT0F1dGhDbGllbnRBdXRoSGFuZGxlciB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFuIE9BdXRoIGNsaWVudCBhdXRoZW50aWNhdGlvbiBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBjbGllbnRBdXRoZW50aWNhdGlvbiBUaGUgY2xpZW50IGF1dGggY3JlZGVudGlhbHMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50QXV0aGVudGljYXRpb24pIHtcbiAgICAgICAgdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbiA9IGNsaWVudEF1dGhlbnRpY2F0aW9uO1xuICAgICAgICB0aGlzLmNyeXB0byA9ICgwLCBjcnlwdG9fMS5jcmVhdGVDcnlwdG8pKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG9uIHRoZSBPQXV0aCByZXF1ZXN0J3MgaGVhZGVycyBvciBQT1NUXG4gICAgICogYm9keSBidXQgZG9lcyBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgR2F4aW9zT3B0aW9ucyB3aG9zZSBoZWFkZXJzIG9yIGRhdGEgYXJlIHRvIGJlIG1vZGlmaWVkXG4gICAgICogICBkZXBlbmRpbmcgb24gdGhlIGNsaWVudCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gdG8gYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gVGhlIG9wdGlvbmFsIGJlYXJlciB0b2tlbiB0byB1c2UgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqICAgV2hlbiB0aGlzIGlzIHVzZWQsIG5vIGNsaWVudCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBhcmUgbmVlZGVkLlxuICAgICAqL1xuICAgIGFwcGx5Q2xpZW50QXV0aGVudGljYXRpb25PcHRpb25zKG9wdHMsIGJlYXJlclRva2VuKSB7XG4gICAgICAgIC8vIEluamVjdCBhdXRoZW50aWNhdGVkIGhlYWRlci5cbiAgICAgICAgdGhpcy5pbmplY3RBdXRoZW50aWNhdGVkSGVhZGVycyhvcHRzLCBiZWFyZXJUb2tlbik7XG4gICAgICAgIC8vIEluamVjdCBhdXRoZW50aWNhdGVkIHJlcXVlc3QgYm9keS5cbiAgICAgICAgaWYgKCFiZWFyZXJUb2tlbikge1xuICAgICAgICAgICAgdGhpcy5pbmplY3RBdXRoZW50aWNhdGVkUmVxdWVzdEJvZHkob3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwbGllcyBjbGllbnQgYXV0aGVudGljYXRpb24gb24gdGhlIHJlcXVlc3QncyBoZWFkZXIgaWYgZWl0aGVyXG4gICAgICogYmFzaWMgYXV0aGVudGljYXRpb24gb3IgYmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIEdheGlvc09wdGlvbnMgd2hvc2UgaGVhZGVycyBvciBkYXRhIGFyZSB0byBiZSBtb2RpZmllZFxuICAgICAqICAgZGVwZW5kaW5nIG9uIHRoZSBjbGllbnQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHRvIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIGJlYXJlclRva2VuIFRoZSBvcHRpb25hbCBiZWFyZXIgdG9rZW4gdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiAgIFdoZW4gdGhpcyBpcyB1c2VkLCBubyBjbGllbnQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgYXJlIG5lZWRlZC5cbiAgICAgKi9cbiAgICBpbmplY3RBdXRoZW50aWNhdGVkSGVhZGVycyhvcHRzLCBiZWFyZXJUb2tlbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIC8vIEJlYXJlciB0b2tlbiBwcmlvcml0aXplZCBoaWdoZXIgdGhhbiBiYXNpYyBBdXRoLlxuICAgICAgICBpZiAoYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgICAgIG9wdHMuaGVhZGVycyA9IG9wdHMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3B0cy5oZWFkZXJzLCB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufX1gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKChfYSA9IHRoaXMuY2xpZW50QXV0aGVudGljYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25maWRlbnRpYWxDbGllbnRUeXBlKSA9PT0gJ2Jhc2ljJykge1xuICAgICAgICAgICAgb3B0cy5oZWFkZXJzID0gb3B0cy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgY2xpZW50SWQgPSB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNsaWVudElkO1xuICAgICAgICAgICAgY29uc3QgY2xpZW50U2VjcmV0ID0gdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbi5jbGllbnRTZWNyZXQgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjRFbmNvZGVkQ3JlZHMgPSB0aGlzLmNyeXB0by5lbmNvZGVCYXNlNjRTdHJpbmdVdGY4KGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3B0cy5oZWFkZXJzLCB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzZTY0RW5jb2RlZENyZWRzfWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGNsaWVudCBhdXRoZW50aWNhdGlvbiBvbiB0aGUgcmVxdWVzdCdzIGJvZHkgaWYgcmVxdWVzdC1ib2R5XG4gICAgICogY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIEdheGlvc09wdGlvbnMgd2hvc2UgaGVhZGVycyBvciBkYXRhIGFyZSB0byBiZSBtb2RpZmllZFxuICAgICAqICAgZGVwZW5kaW5nIG9uIHRoZSBjbGllbnQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHRvIGJlIHVzZWQuXG4gICAgICovXG4gICAgaW5qZWN0QXV0aGVudGljYXRlZFJlcXVlc3RCb2R5KG9wdHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKChfYSA9IHRoaXMuY2xpZW50QXV0aGVudGljYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25maWRlbnRpYWxDbGllbnRUeXBlKSA9PT0gJ3JlcXVlc3QtYm9keScpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IChvcHRzLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIC8vIEluamVjdCBhdXRoZW50aWNhdGVkIHJlcXVlc3QgYm9keS5cbiAgICAgICAgICAgIGlmIChNRVRIT0RTX1NVUFBPUlRJTkdfUkVRVUVTVF9CT0RZLmluZGV4T2YobWV0aG9kKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgY29udGVudC10eXBlLlxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50VHlwZTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gb3B0cy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJyAmJiBoZWFkZXJzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gaGVhZGVyc1trZXldLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGF0YSA9IG9wdHMuZGF0YSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKG9wdHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNsaWVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbi5jbGllbnRTZWNyZXQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmRhdGEgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5kYXRhID0gb3B0cy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG9wdHMuZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNsaWVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbi5jbGllbnRTZWNyZXQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2NvbnRlbnRUeXBlfSBjb250ZW50LXR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNvbmZpZGVudGlhbENsaWVudFR5cGV9IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWVudCBhdXRoZW50aWNhdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IEhUVFAgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2xpZW50QXV0aGVudGljYXRpb24uY29uZmlkZW50aWFsQ2xpZW50VHlwZX0gYCArXG4gICAgICAgICAgICAgICAgICAgICdjbGllbnQgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyeSBjb25maWcgZm9yIEF1dGgtcmVsYXRlZCByZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5vdCBhIHBhcnQgb2YgdGhlIGRlZmF1bHQge0BsaW5rIEF1dGhDbGllbnQudHJhbnNwb3J0ZXIgdHJhbnNwb3J0ZXIvZ2F4aW9zfVxuICAgICAqIGNvbmZpZyBhcyBzb21lIGRvd25zdHJlYW0gQVBJcyB3b3VsZCBwcmVmZXIgaWYgY3VzdG9tZXJzIGV4cGxpY2l0bHkgZW5hYmxlIHJldHJpZXMsXG4gICAgICogc3VjaCBhcyBHQ1MuXG4gICAgICovXG4gICAgc3RhdGljIGdldCBSRVRSWV9DT05GSUcoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXRyeTogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgaHR0cE1ldGhvZHNUb1JldHJ5OiBbJ0dFVCcsICdQVVQnLCAnUE9TVCcsICdIRUFEJywgJ09QVElPTlMnLCAnREVMRVRFJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuT0F1dGhDbGllbnRBdXRoSGFuZGxlciA9IE9BdXRoQ2xpZW50QXV0aEhhbmRsZXI7XG4vKipcbiAqIENvbnZlcnRzIGFuIE9BdXRoIGVycm9yIHJlc3BvbnNlIHRvIGEgbmF0aXZlIEphdmFTY3JpcHQgRXJyb3IuXG4gKiBAcGFyYW0gcmVzcCBUaGUgT0F1dGggZXJyb3IgcmVzcG9uc2UgdG8gY29udmVydCB0byBhIG5hdGl2ZSBFcnJvciBvYmplY3QuXG4gKiBAcGFyYW0gZXJyIFRoZSBvcHRpb25hbCBvcmlnaW5hbCBlcnJvci4gSWYgcHJvdmlkZWQsIHRoZSBlcnJvciBwcm9wZXJ0aWVzXG4gKiAgIHdpbGwgYmUgY29waWVkIHRvIHRoZSBuZXcgZXJyb3IuXG4gKiBAcmV0dXJuIFRoZSBjb252ZXJ0ZWQgbmF0aXZlIEVycm9yIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0RXJyb3JGcm9tT0F1dGhFcnJvclJlc3BvbnNlKHJlc3AsIGVycikge1xuICAgIC8vIEVycm9yIHJlc3BvbnNlLlxuICAgIGNvbnN0IGVycm9yQ29kZSA9IHJlc3AuZXJyb3I7XG4gICAgY29uc3QgZXJyb3JEZXNjcmlwdGlvbiA9IHJlc3AuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgY29uc3QgZXJyb3JVcmkgPSByZXNwLmVycm9yX3VyaTtcbiAgICBsZXQgbWVzc2FnZSA9IGBFcnJvciBjb2RlICR7ZXJyb3JDb2RlfWA7XG4gICAgaWYgKHR5cGVvZiBlcnJvckRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBtZXNzYWdlICs9IGA6ICR7ZXJyb3JEZXNjcmlwdGlvbn1gO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGVycm9yVXJpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBtZXNzYWdlICs9IGAgLSAke2Vycm9yVXJpfWA7XG4gICAgfVxuICAgIGNvbnN0IG5ld0Vycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIG9yaWdpbmFsIGVycm9yIHRvIG5ld2x5IGdlbmVyYXRlZCBlcnJvci5cbiAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlcnIpO1xuICAgICAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICAvLyBDb3B5IGVycm9yLnN0YWNrIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgICAgIGtleXMucHVzaCgnc3RhY2snKTtcbiAgICAgICAgfVxuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgdGhlIG1lc3NhZ2UgZmllbGQuXG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3RXJyb3IsIGtleSwge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZXJyW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdFcnJvcjtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RzQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG5jb25zdCBxdWVyeXN0cmluZyA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcbmNvbnN0IHRyYW5zcG9ydGVyc18xID0gcmVxdWlyZShcIi4uL3RyYW5zcG9ydGVyc1wiKTtcbmNvbnN0IG9hdXRoMmNvbW1vbl8xID0gcmVxdWlyZShcIi4vb2F1dGgyY29tbW9uXCIpO1xuLyoqXG4gKiBJbXBsZW1lbnRzIHRoZSBPQXV0aCAyLjAgdG9rZW4gZXhjaGFuZ2UgYmFzZWQgb25cbiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4NjkzXG4gKi9cbmNsYXNzIFN0c0NyZWRlbnRpYWxzIGV4dGVuZHMgb2F1dGgyY29tbW9uXzEuT0F1dGhDbGllbnRBdXRoSGFuZGxlciB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gU1RTIGNyZWRlbnRpYWxzIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB0b2tlbkV4Y2hhbmdlRW5kcG9pbnQgVGhlIHRva2VuIGV4Y2hhbmdlIGVuZHBvaW50LlxuICAgICAqIEBwYXJhbSBjbGllbnRBdXRoZW50aWNhdGlvbiBUaGUgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGlmXG4gICAgICogICBhdmFpbGFibGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodG9rZW5FeGNoYW5nZUVuZHBvaW50LCBjbGllbnRBdXRoZW50aWNhdGlvbikge1xuICAgICAgICBzdXBlcihjbGllbnRBdXRoZW50aWNhdGlvbik7XG4gICAgICAgIHRoaXMudG9rZW5FeGNoYW5nZUVuZHBvaW50ID0gdG9rZW5FeGNoYW5nZUVuZHBvaW50O1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGVyID0gbmV3IHRyYW5zcG9ydGVyc18xLkRlZmF1bHRUcmFuc3BvcnRlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGNoYW5nZXMgdGhlIHByb3ZpZGVkIHRva2VuIGZvciBhbm90aGVyIHR5cGUgb2YgdG9rZW4gYmFzZWQgb24gdGhlXG4gICAgICogcmZjODY5MyBzcGVjLlxuICAgICAqIEBwYXJhbSBzdHNDcmVkZW50aWFsc09wdGlvbnMgVGhlIHRva2VuIGV4Y2hhbmdlIG9wdGlvbnMgdXNlZCB0byBwb3B1bGF0ZVxuICAgICAqICAgdGhlIHRva2VuIGV4Y2hhbmdlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGFkZGl0aW9uYWxIZWFkZXJzIE9wdGlvbmFsIGFkZGl0aW9uYWwgaGVhZGVycyB0byBwYXNzIGFsb25nIHRoZVxuICAgICAqICAgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBhZGRpdGlvbmFsIEdDUC1zcGVjaWZpYyBub24tc3BlYyBkZWZpbmVkIG9wdGlvbnNcbiAgICAgKiAgIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiAgIEV4YW1wbGU6IGAmb3B0aW9ucz0ke2VuY29kZVVyaUNvbXBvbmVudChKU09OLnN0cmluZ2lmaWVkKG9wdGlvbnMpKX1gXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBleGNoYW5nZSByZXNwb25zZSBjb250YWluaW5nXG4gICAgICogICB0aGUgcmVxdWVzdGVkIHRva2VuIGFuZCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuICAgICAqL1xuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oc3RzQ3JlZGVudGlhbHNPcHRpb25zLCBhZGRpdGlvbmFsSGVhZGVycywgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICAgICAgICBncmFudF90eXBlOiBzdHNDcmVkZW50aWFsc09wdGlvbnMuZ3JhbnRUeXBlLFxuICAgICAgICAgICAgcmVzb3VyY2U6IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5yZXNvdXJjZSxcbiAgICAgICAgICAgIGF1ZGllbmNlOiBzdHNDcmVkZW50aWFsc09wdGlvbnMuYXVkaWVuY2UsXG4gICAgICAgICAgICBzY29wZTogKF9hID0gc3RzQ3JlZGVudGlhbHNPcHRpb25zLnNjb3BlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euam9pbignICcpLFxuICAgICAgICAgICAgcmVxdWVzdGVkX3Rva2VuX3R5cGU6IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5yZXF1ZXN0ZWRUb2tlblR5cGUsXG4gICAgICAgICAgICBzdWJqZWN0X3Rva2VuOiBzdHNDcmVkZW50aWFsc09wdGlvbnMuc3ViamVjdFRva2VuLFxuICAgICAgICAgICAgc3ViamVjdF90b2tlbl90eXBlOiBzdHNDcmVkZW50aWFsc09wdGlvbnMuc3ViamVjdFRva2VuVHlwZSxcbiAgICAgICAgICAgIGFjdG9yX3Rva2VuOiAoX2IgPSBzdHNDcmVkZW50aWFsc09wdGlvbnMuYWN0aW5nUGFydHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hY3RvclRva2VuLFxuICAgICAgICAgICAgYWN0b3JfdG9rZW5fdHlwZTogKF9jID0gc3RzQ3JlZGVudGlhbHNPcHRpb25zLmFjdGluZ1BhcnR5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuYWN0b3JUb2tlblR5cGUsXG4gICAgICAgICAgICAvLyBOb24tc3RhbmRhcmQgR0NQLXNwZWNpZmljIG9wdGlvbnMuXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zICYmIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgICAgICAvLyBSZW1vdmUgdW5kZWZpbmVkIGZpZWxkcy5cbiAgICAgICAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgIH07XG4gICAgICAgIC8vIEluamVjdCBhZGRpdGlvbmFsIFNUUyBoZWFkZXJzIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICAuLi5TdHNDcmVkZW50aWFscy5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICB1cmw6IHRoaXMudG9rZW5FeGNoYW5nZUVuZHBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBxdWVyeXN0cmluZy5zdHJpbmdpZnkodmFsdWVzKSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBcHBseSBPQXV0aCBjbGllbnQgYXV0aGVudGljYXRpb24uXG4gICAgICAgIHRoaXMuYXBwbHlDbGllbnRBdXRoZW50aWNhdGlvbk9wdGlvbnMob3B0cyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgcmVzcG9uc2UuXG4gICAgICAgICAgICBjb25zdCBzdHNTdWNjZXNzZnVsUmVzcG9uc2UgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgc3RzU3VjY2Vzc2Z1bFJlc3BvbnNlLnJlcyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIHN0c1N1Y2Nlc3NmdWxSZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBlcnJvciB0byBPQXV0aEVycm9yLlxuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZ2F4aW9zXzEuR2F4aW9zRXJyb3IgJiYgZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoMCwgb2F1dGgyY29tbW9uXzEuZ2V0RXJyb3JGcm9tT0F1dGhFcnJvclJlc3BvbnNlKShlcnJvci5yZXNwb25zZS5kYXRhLCBcbiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBvdGhlciBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gICAgICAgICAgICAgICAgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVxdWVzdCBjb3VsZCBmYWlsIGJlZm9yZSB0aGUgc2VydmVyIHJlc3BvbmRzLlxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlN0c0NyZWRlbnRpYWxzID0gU3RzQ3JlZGVudGlhbHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfaW5zdGFuY2VzLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9wZW5kaW5nQWNjZXNzVG9rZW4sIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X2ludGVybmFsUmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmM7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQgPSBleHBvcnRzLkRFRkFVTFRfVU5JVkVSU0UgPSBleHBvcnRzLkNMT1VEX1JFU09VUkNFX01BTkFHRVIgPSBleHBvcnRzLkVYVEVSTkFMX0FDQ09VTlRfVFlQRSA9IGV4cG9ydHMuRVhQSVJBVElPTl9USU1FX09GRlNFVCA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBhdXRoY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoY2xpZW50XCIpO1xuY29uc3Qgc3RzID0gcmVxdWlyZShcIi4vc3RzY3JlZGVudGlhbHNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbi8qKlxuICogVGhlIHJlcXVpcmVkIHRva2VuIGV4Y2hhbmdlIGdyYW50X3R5cGU6IHJmYzg2OTMjc2VjdGlvbi0yLjFcbiAqL1xuY29uc3QgU1RTX0dSQU5UX1RZUEUgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6dG9rZW4tZXhjaGFuZ2UnO1xuLyoqXG4gKiBUaGUgcmVxdWVzdGVkIHRva2VuIGV4Y2hhbmdlIHJlcXVlc3RlZF90b2tlbl90eXBlOiByZmM4NjkzI3NlY3Rpb24tMi4xXG4gKi9cbmNvbnN0IFNUU19SRVFVRVNUX1RPS0VOX1RZUEUgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6YWNjZXNzX3Rva2VuJztcbi8qKiBUaGUgZGVmYXVsdCBPQXV0aCBzY29wZSB0byByZXF1ZXN0IHdoZW4gbm9uZSBpcyBwcm92aWRlZC4gKi9cbmNvbnN0IERFRkFVTFRfT0FVVEhfU0NPUEUgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9jbG91ZC1wbGF0Zm9ybSc7XG4vKiogRGVmYXVsdCBpbXBlcnNvbmF0ZWQgdG9rZW4gbGlmZXNwYW4gaW4gc2Vjb25kcy4qL1xuY29uc3QgREVGQVVMVF9UT0tFTl9MSUZFU1BBTiA9IDM2MDA7XG4vKipcbiAqIE9mZnNldCB0byB0YWtlIGludG8gYWNjb3VudCBuZXR3b3JrIGRlbGF5cyBhbmQgc2VydmVyIGNsb2NrIHNrZXdzLlxuICovXG5leHBvcnRzLkVYUElSQVRJT05fVElNRV9PRkZTRVQgPSA1ICogNjAgKiAxMDAwO1xuLyoqXG4gKiBUaGUgY3JlZGVudGlhbHMgSlNPTiBmaWxlIHR5cGUgZm9yIGV4dGVybmFsIGFjY291bnQgY2xpZW50cy5cbiAqIFRoZXJlIGFyZSAzIHR5cGVzIG9mIEpTT04gY29uZmlnczpcbiAqIDEuIGF1dGhvcml6ZWRfdXNlciA9PiBHb29nbGUgZW5kIHVzZXIgY3JlZGVudGlhbFxuICogMi4gc2VydmljZV9hY2NvdW50ID0+IEdvb2dsZSBzZXJ2aWNlIGFjY291bnQgY3JlZGVudGlhbFxuICogMy4gZXh0ZXJuYWxfQWNjb3VudCA9PiBub24tR0NQIHNlcnZpY2UgKGVnLiBBV1MsIEF6dXJlLCBLOHMpXG4gKi9cbmV4cG9ydHMuRVhURVJOQUxfQUNDT1VOVF9UWVBFID0gJ2V4dGVybmFsX2FjY291bnQnO1xuLyoqXG4gKiBDbG91ZCByZXNvdXJjZSBtYW5hZ2VyIFVSTCB1c2VkIHRvIHJldHJpZXZlIHByb2plY3QgaW5mb3JtYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBCYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50LmNsb3VkUmVzb3VyY2VNYW5hZ2VyVVJMfSBpbnN0ZWFkXG4gKiovXG5leHBvcnRzLkNMT1VEX1JFU09VUkNFX01BTkFHRVIgPSAnaHR0cHM6Ly9jbG91ZHJlc291cmNlbWFuYWdlci5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy8nO1xuLyoqIFRoZSB3b3JrZm9yY2UgYXVkaWVuY2UgcGF0dGVybi4gKi9cbmNvbnN0IFdPUktGT1JDRV9BVURJRU5DRV9QQVRURVJOID0gJy8vaWFtXFxcXC5nb29nbGVhcGlzXFxcXC5jb20vbG9jYXRpb25zL1teL10rL3dvcmtmb3JjZVBvb2xzL1teL10rL3Byb3ZpZGVycy8uKyc7XG5jb25zdCBERUZBVUxUX1RPS0VOX1VSTCA9ICdodHRwczovL3N0cy57dW5pdmVyc2VEb21haW59L3YxL3Rva2VuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBwa2cgPSByZXF1aXJlKCcuLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcbi8qKlxuICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICovXG52YXIgYXV0aGNsaWVudF8yID0gcmVxdWlyZShcIi4vYXV0aGNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRFRkFVTFRfVU5JVkVSU0VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhjbGllbnRfMi5ERUZBVUxUX1VOSVZFUlNFOyB9IH0pO1xuLyoqXG4gKiBCYXNlIGV4dGVybmFsIGFjY291bnQgY2xpZW50LiBUaGlzIGlzIHVzZWQgdG8gaW5zdGFudGlhdGUgQXV0aENsaWVudHMgZm9yXG4gKiBleGNoYW5naW5nIGV4dGVybmFsIGFjY291bnQgY3JlZGVudGlhbHMgZm9yIEdDUCBhY2Nlc3MgdG9rZW4gYW5kIGF1dGhvcml6aW5nXG4gKiByZXF1ZXN0cyB0byBHQ1AgQVBJcy5cbiAqIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudHMgY29tbW9uIGxvZ2ljIGZvciBleGNoYW5naW5nIHZhcmlvdXMgdHlwZSBvZlxuICogZXh0ZXJuYWwgY3JlZGVudGlhbHMgZm9yIEdDUCBhY2Nlc3MgdG9rZW4uIFRoZSBsb2dpYyBvZiBkZXRlcm1pbmluZyBhbmRcbiAqIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIGNyZWRlbnRpYWwgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IGFuZFxuICogY3JlZGVudGlhbF9zb3VyY2Ugd2lsbCBiZSBsZWZ0IGZvciB0aGUgc3ViY2xhc3Nlcy5cbiAqL1xuY2xhc3MgQmFzZUV4dGVybmFsQWNjb3VudENsaWVudCBleHRlbmRzIGF1dGhjbGllbnRfMS5BdXRoQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZSBhIEJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIEpTT05cbiAgICAgKiBvYmplY3QgbG9hZGVkIGZyb20gYW4gZXh0ZXJuYWwgYWNjb3VudCBjcmVkZW50aWFscyBmaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBleHRlcm5hbCBhY2NvdW50IG9wdGlvbnMgb2JqZWN0IHR5cGljYWxseSBsb2FkZWRcbiAgICAgKiAgIGZyb20gdGhlIGV4dGVybmFsIGFjY291bnQgSlNPTiBjcmVkZW50aWFsIGZpbGUuIFRoZSBjYW1lbENhc2VkIG9wdGlvbnNcbiAgICAgKiAgIGFyZSBhbGlhc2VzIGZvciB0aGUgc25ha2VfY2FzZWQgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbE9wdGlvbnMgKipERVBSRUNBVEVELCBhbGwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZVxuICAgICAqICAgYG9wdGlvbnNgIHBhcmFtZXRlci4qKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJlaGF2aW9yIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAgICAgKiAgIFRoZXNlIGN1cnJlbnRseSBjdXN0b21pemUgZXhwaXJhdGlvbiB0aHJlc2hvbGQgdGltZSBhbmQgd2hldGhlciB0byByZXRyeVxuICAgICAqICAgb24gNDAxLzQwMyBBUEkgcmVxdWVzdCBlcnJvcnMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcih7IC4uLm9wdGlvbnMsIC4uLmFkZGl0aW9uYWxPcHRpb25zIH0pO1xuICAgICAgICBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBwZW5kaW5nIGFjY2VzcyB0b2tlbiByZXF1ZXN0LiBVc2VkIGZvciBjb25jdXJyZW50IGNhbGxzLlxuICAgICAgICAgKi9cbiAgICAgICAgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfcGVuZGluZ0FjY2Vzc1Rva2VuLnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBvcHRzLmdldCgndHlwZScpO1xuICAgICAgICBpZiAodHlwZSAmJiB0eXBlICE9PSBleHBvcnRzLkVYVEVSTkFMX0FDQ09VTlRfVFlQRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBcIiR7ZXhwb3J0cy5FWFRFUk5BTF9BQ0NPVU5UX1RZUEV9XCIgdHlwZSBidXQgYCArXG4gICAgICAgICAgICAgICAgYHJlY2VpdmVkIFwiJHtvcHRpb25zLnR5cGV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRJZCA9IG9wdHMuZ2V0KCdjbGllbnRfaWQnKTtcbiAgICAgICAgY29uc3QgY2xpZW50U2VjcmV0ID0gb3B0cy5nZXQoJ2NsaWVudF9zZWNyZXQnKTtcbiAgICAgICAgY29uc3QgdG9rZW5VcmwgPSAoX2EgPSBvcHRzLmdldCgndG9rZW5fdXJsJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfVE9LRU5fVVJMLnJlcGxhY2UoJ3t1bml2ZXJzZURvbWFpbn0nLCB0aGlzLnVuaXZlcnNlRG9tYWluKTtcbiAgICAgICAgY29uc3Qgc3ViamVjdFRva2VuVHlwZSA9IG9wdHMuZ2V0KCdzdWJqZWN0X3Rva2VuX3R5cGUnKTtcbiAgICAgICAgY29uc3Qgd29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0ID0gb3B0cy5nZXQoJ3dvcmtmb3JjZV9wb29sX3VzZXJfcHJvamVjdCcpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25VcmwgPSBvcHRzLmdldCgnc2VydmljZV9hY2NvdW50X2ltcGVyc29uYXRpb25fdXJsJyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvbiA9IG9wdHMuZ2V0KCdzZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbicpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25MaWZldGltZSA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykoc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uKS5nZXQoJ3Rva2VuX2xpZmV0aW1lX3NlY29uZHMnKTtcbiAgICAgICAgdGhpcy5jbG91ZFJlc291cmNlTWFuYWdlclVSTCA9IG5ldyBVUkwob3B0cy5nZXQoJ2Nsb3VkX3Jlc291cmNlX21hbmFnZXJfdXJsJykgfHxcbiAgICAgICAgICAgIGBodHRwczovL2Nsb3VkcmVzb3VyY2VtYW5hZ2VyLiR7dGhpcy51bml2ZXJzZURvbWFpbn0vdjEvcHJvamVjdHMvYCk7XG4gICAgICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5jbGllbnRBdXRoID0ge1xuICAgICAgICAgICAgICAgIGNvbmZpZGVudGlhbENsaWVudFR5cGU6ICdiYXNpYycsXG4gICAgICAgICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0c0NyZWRlbnRpYWwgPSBuZXcgc3RzLlN0c0NyZWRlbnRpYWxzKHRva2VuVXJsLCB0aGlzLmNsaWVudEF1dGgpO1xuICAgICAgICB0aGlzLnNjb3BlcyA9IG9wdHMuZ2V0KCdzY29wZXMnKSB8fCBbREVGQVVMVF9PQVVUSF9TQ09QRV07XG4gICAgICAgIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmF1ZGllbmNlID0gb3B0cy5nZXQoJ2F1ZGllbmNlJyk7XG4gICAgICAgIHRoaXMuc3ViamVjdFRva2VuVHlwZSA9IHN1YmplY3RUb2tlblR5cGU7XG4gICAgICAgIHRoaXMud29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0ID0gd29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0O1xuICAgICAgICBjb25zdCB3b3JrZm9yY2VBdWRpZW5jZVBhdHRlcm4gPSBuZXcgUmVnRXhwKFdPUktGT1JDRV9BVURJRU5DRV9QQVRURVJOKTtcbiAgICAgICAgaWYgKHRoaXMud29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0ICYmXG4gICAgICAgICAgICAhdGhpcy5hdWRpZW5jZS5tYXRjaCh3b3JrZm9yY2VBdWRpZW5jZVBhdHRlcm4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dvcmtmb3JjZVBvb2xVc2VyUHJvamVjdCBzaG91bGQgbm90IGJlIHNldCBmb3Igbm9uLXdvcmtmb3JjZSBwb29sICcgK1xuICAgICAgICAgICAgICAgICdjcmVkZW50aWFscy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybCA9IHNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybDtcbiAgICAgICAgdGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25MaWZldGltZSA9XG4gICAgICAgICAgICBzZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25MaWZldGltZTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uTGlmZXRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnTGlmZXRpbWVSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWdMaWZldGltZVJlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25MaWZldGltZSA9IERFRkFVTFRfVE9LRU5fTElGRVNQQU47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9qZWN0TnVtYmVyID0gdGhpcy5nZXRQcm9qZWN0TnVtYmVyKHRoaXMuYXVkaWVuY2UpO1xuICAgICAgICB0aGlzLnN1cHBsaWVyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGF1ZGllbmNlOiB0aGlzLmF1ZGllbmNlLFxuICAgICAgICAgICAgc3ViamVjdFRva2VuVHlwZTogdGhpcy5zdWJqZWN0VG9rZW5UeXBlLFxuICAgICAgICAgICAgdHJhbnNwb3J0ZXI6IHRoaXMudHJhbnNwb3J0ZXIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBUaGUgc2VydmljZSBhY2NvdW50IGVtYWlsIHRvIGJlIGltcGVyc29uYXRlZCwgaWYgYXZhaWxhYmxlLiAqL1xuICAgIGdldFNlcnZpY2VBY2NvdW50RW1haWwoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25VcmwubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogUHJldmVudHMgRE9TIGF0dGFja3MuXG4gICAgICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvZ29vZ2xlLWF1dGgtbGlicmFyeS1ub2RlanMvc2VjdXJpdHkvY29kZS1zY2FubmluZy84NH1cbiAgICAgICAgICAgICAgICAgKiovXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVSTCBpcyB0b28gbG9uZzogJHt0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnNlIGVtYWlsIGZyb20gVVJMLiBUaGUgZm9ybWFsIGxvb2tzIGFzIGZvbGxvd3M6XG4gICAgICAgICAgICAvLyBodHRwczovL2lhbWNyZWRlbnRpYWxzLmdvb2dsZWFwaXMuY29tL3YxL3Byb2plY3RzLy0vc2VydmljZUFjY291bnRzL25hbWVAcHJvamVjdC1pZC5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbTpnZW5lcmF0ZUFjY2Vzc1Rva2VuXG4gICAgICAgICAgICBjb25zdCByZSA9IC9zZXJ2aWNlQWNjb3VudHNcXC8oPzxlbWFpbD5bXjpdKyk6Z2VuZXJhdGVBY2Nlc3NUb2tlbiQvO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmUuZXhlYyh0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybCk7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ncm91cHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbWFpbCkgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gaW5qZWN0IEdDUCBhY2Nlc3MgdG9rZW5zIGRpcmVjdGx5LlxuICAgICAqIFdoZW4gdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWwgZXhwaXJlcywgYSBuZXcgY3JlZGVudGlhbCwgdXNpbmcgdGhlXG4gICAgICogZXh0ZXJuYWwgYWNjb3VudCBvcHRpb25zLCBpcyByZXRyaWV2ZWQuXG4gICAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBDcmVkZW50aWFscyBvYmplY3QgdG8gc2V0IG9uIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgKi9cbiAgICBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscykge1xuICAgICAgICBzdXBlci5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgICAgIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gPSBjcmVkZW50aWFscztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjdXJyZW50IEdDUCBhY2Nlc3MgdG9rZW5cbiAgICAgKiAgIHJlc3BvbnNlLiBJZiB0aGUgY3VycmVudCBjcmVkZW50aWFsIGlzIGV4cGlyZWQsIGEgbmV3IG9uZSBpcyByZXRyaWV2ZWQuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIC8vIElmIGNhY2hlZCBhY2Nlc3MgdG9rZW4gaXMgdW5hdmFpbGFibGUgb3IgZXhwaXJlZCwgZm9yY2UgcmVmcmVzaC5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuIHx8IHRoaXMuaXNFeHBpcmVkKHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIEdDUCBhY2Nlc3MgdG9rZW4gaW4gR2V0QWNjZXNzVG9rZW5SZXNwb25zZSBmb3JtYXQuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b2tlbjogdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICByZXM6IHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4ucmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBhdXRoZW50aWNhdGlvbiBpbnRlcmZhY2UuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHVybCB3aGljaCB3aGVuXG4gICAgICogcHJlc2VudCBpcyB0aGUgZW5kcG9pbnQgYmVpbmcgYWNjZXNzZWQsIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB3aGljaFxuICAgICAqIHJlc29sdmVzIHdpdGggYXV0aG9yaXphdGlvbiBoZWFkZXIgZmllbGRzLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdCBoYXMgdGhlIGZvcm06XG4gICAgICogeyBBdXRob3JpemF0aW9uOiAnQmVhcmVyIDxhY2Nlc3NfdG9rZW5fdmFsdWU+JyB9XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UmVxdWVzdEhlYWRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW5SZXNwb25zZS50b2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycyk7XG4gICAgfVxuICAgIHJlcXVlc3Qob3B0cywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RBc3luYyhvcHRzKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlLCBlLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFzeW5jKG9wdHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcHJvamVjdCBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZVxuICAgICAqICAgY3VycmVudCB3b3JrbG9hZCBpZGVudGl0eSBwb29sIG9yIGN1cnJlbnQgd29ya2ZvcmNlIHBvb2wgaWZcbiAgICAgKiAgIGRldGVybWluYWJsZS4gRm9yIHdvcmtmb3JjZSBwb29sIGNyZWRlbnRpYWwsIGl0IHJldHVybnMgdGhlIHByb2plY3QgSURcbiAgICAgKiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdvcmtmb3JjZVBvb2xVc2VyUHJvamVjdC5cbiAgICAgKiAgIFRoaXMgaXMgaW50cm9kdWNlZCB0byBtYXRjaCB0aGUgY3VycmVudCBwYXR0ZXJuIG9mIHVzaW5nIHRoZSBBdXRoXG4gICAgICogICBsaWJyYXJ5OlxuICAgICAqICAgY29uc3QgcHJvamVjdElkID0gYXdhaXQgYXV0aC5nZXRQcm9qZWN0SWQoKTtcbiAgICAgKiAgIGNvbnN0IHVybCA9IGBodHRwczovL2Rucy5nb29nbGVhcGlzLmNvbS9kbnMvdjEvcHJvamVjdHMvJHtwcm9qZWN0SWR9YDtcbiAgICAgKiAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgdXJsIH0pO1xuICAgICAqICAgVGhlIHJlc291cmNlIG1heSBub3QgaGF2ZSBwZXJtaXNzaW9uXG4gICAgICogICAocmVzb3VyY2VtYW5hZ2VyLnByb2plY3RzLmdldCkgdG8gY2FsbCB0aGlzIEFQSSBvciB0aGUgcmVxdWlyZWRcbiAgICAgKiAgIHNjb3BlcyBtYXkgbm90IGJlIHNlbGVjdGVkOlxuICAgICAqICAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3Jlc291cmNlLW1hbmFnZXIvcmVmZXJlbmNlL3Jlc3QvdjEvcHJvamVjdHMvZ2V0I2F1dGhvcml6YXRpb24tc2NvcGVzXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvamVjdElkKCkge1xuICAgICAgICBjb25zdCBwcm9qZWN0TnVtYmVyID0gdGhpcy5wcm9qZWN0TnVtYmVyIHx8IHRoaXMud29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0O1xuICAgICAgICBpZiAodGhpcy5wcm9qZWN0SWQpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBwcmV2aW91c2x5IGRldGVybWluZWQgcHJvamVjdCBJRC5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9qZWN0TnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBQcmVmZXJhYmxlIG5vdCB0byB1c2UgcmVxdWVzdCgpIHRvIGF2b2lkIHJldHJpYWwgcG9saWNpZXMuXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRSZXF1ZXN0SGVhZGVycygpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIC4uLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmNsb3VkUmVzb3VyY2VNYW5hZ2VyVVJMLnRvU3RyaW5nKCl9JHtwcm9qZWN0TnVtYmVyfWAsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdElkID0gcmVzcG9uc2UuZGF0YS5wcm9qZWN0SWQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHByb3ZpZGVkIEhUVFAgcmVxdWVzdCwgcHJvY2Vzc2VzIGl0IGFuZCByZXNvbHZlcyB3aXRoIHRoZVxuICAgICAqIHJldHVybmVkIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBIVFRQIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gcmVBdXRoUmV0cmllZCBXaGV0aGVyIHRoZSBjdXJyZW50IGF0dGVtcHQgaXMgYSByZXRyeSBhZnRlciBhIGZhaWxlZCBhdHRlbXB0IGR1ZSB0byBhbiBhdXRoIGZhaWx1cmUuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIHJlcXVlc3RBc3luYyhvcHRzLCByZUF1dGhSZXRyaWVkID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgICAgICAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnMgJiYgcmVxdWVzdEhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSkge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddID1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SGVhZGVycyAmJiByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGUucmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlcy5zdGF0dXM7XG4gICAgICAgICAgICAgICAgLy8gUmV0cnkgdGhlIHJlcXVlc3QgZm9yIG1ldGFkYXRhIGlmIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEgYXJlIHRydWU6XG4gICAgICAgICAgICAgICAgLy8gLSBXZSBoYXZlbid0IGFscmVhZHkgcmV0cmllZC4gIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gcmV0cnkgb25jZS5cbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXNwb25zZSB3YXMgYSA0MDEgb3IgYSA0MDNcbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXF1ZXN0IGRpZG4ndCBzZW5kIGEgcmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAvLyAtIGZvcmNlUmVmcmVzaE9uRmFpbHVyZSBpcyB0cnVlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbSA9IHJlcy5jb25maWcuZGF0YSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhFcnIgPSBzdGF0dXNDb2RlID09PSA0MDEgfHwgc3RhdHVzQ29kZSA9PT0gNDAzO1xuICAgICAgICAgICAgICAgIGlmICghcmVBdXRoUmV0cmllZCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0F1dGhFcnIgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVhZGFibGVTdHJlYW0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0QXN5bmMob3B0cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvcmNlcyB0b2tlbiByZWZyZXNoLCBldmVuIGlmIHVuZXhwaXJlZCB0b2tlbnMgYXJlIGN1cnJlbnRseSBjYWNoZWQuXG4gICAgICogRXh0ZXJuYWwgY3JlZGVudGlhbHMgYXJlIGV4Y2hhbmdlZCBmb3IgR0NQIGFjY2VzcyB0b2tlbnMgdmlhIHRoZSB0b2tlblxuICAgICAqIGV4Y2hhbmdlIGVuZHBvaW50IGFuZCBvdGhlciBzZXR0aW5ncyBwcm92aWRlZCBpbiB0aGUgY2xpZW50IG9wdGlvbnNcbiAgICAgKiBvYmplY3QuXG4gICAgICogSWYgdGhlIHNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybCBpcyBwcm92aWRlZCwgYW4gYWRkaXRpb25hbFxuICAgICAqIHN0ZXAgdG8gZXhjaGFuZ2UgdGhlIGV4dGVybmFsIGFjY291bnQgR0NQIGFjY2VzcyB0b2tlbiBmb3IgYSBzZXJ2aWNlXG4gICAgICogYWNjb3VudCBpbXBlcnNvbmF0ZWQgdG9rZW4gaXMgcGVyZm9ybWVkLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZnJlc2ggR0NQIGFjY2VzcyB0b2tlbnMuXG4gICAgICovXG4gICAgYXN5bmMgcmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKSB7XG4gICAgICAgIC8vIFVzZSBhbiBleGlzdGluZyBhY2Nlc3MgdG9rZW4gcmVxdWVzdCwgb3IgY2FjaGUgYSBuZXcgb25lXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfcGVuZGluZ0FjY2Vzc1Rva2VuLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X3BlbmRpbmdBY2Nlc3NUb2tlbiwgXCJmXCIpIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfaW50ZXJuYWxSZWZyZXNoQWNjZXNzVG9rZW5Bc3luYykuY2FsbCh0aGlzKSwgXCJmXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfcGVuZGluZ0FjY2Vzc1Rva2VuLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAvLyBjbGVhciBwZW5kaW5nIGFjY2VzcyB0b2tlbiBmb3IgZnV0dXJlIHJlcXVlc3RzXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X3BlbmRpbmdBY2Nlc3NUb2tlbiwgbnVsbCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdvcmtsb2FkIGlkZW50aXR5IHBvb2wgcHJvamVjdCBudW1iZXIgaWYgaXQgaXMgZGV0ZXJtaW5hYmxlXG4gICAgICogZnJvbSB0aGUgYXVkaWVuY2UgcmVzb3VyY2UgbmFtZS5cbiAgICAgKiBAcGFyYW0gYXVkaWVuY2UgVGhlIFNUUyBhdWRpZW5jZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcHJvamVjdCBudW1iZXIuXG4gICAgICogQHJldHVybiBUaGUgcHJvamVjdCBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSB3b3JrbG9hZCBpZGVudGl0eSBwb29sLCBpZlxuICAgICAqICAgdGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBTVFMgYXVkaWVuY2UgZmllbGQuIE90aGVyd2lzZSwgbnVsbCBpc1xuICAgICAqICAgcmV0dXJuZWQuXG4gICAgICovXG4gICAgZ2V0UHJvamVjdE51bWJlcihhdWRpZW5jZSkge1xuICAgICAgICAvLyBTVFMgYXVkaWVuY2UgcGF0dGVybjpcbiAgICAgICAgLy8gLy9pYW0uZ29vZ2xlYXBpcy5jb20vcHJvamVjdHMvJFBST0pFQ1RfTlVNQkVSL2xvY2F0aW9ucy8uLi5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSBhdWRpZW5jZS5tYXRjaCgvXFwvcHJvamVjdHNcXC8oW14vXSspLyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRjaFsxXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhjaGFuZ2VzIGFuIGV4dGVybmFsIGFjY291bnQgR0NQIGFjY2VzcyB0b2tlbiBmb3IgYSBzZXJ2aWNlXG4gICAgICogYWNjb3VudCBpbXBlcnNvbmF0ZWQgYWNjZXNzIHRva2VuIHVzaW5nIGlhbWNyZWRlbnRpYWxzXG4gICAgICogR2VuZXJhdGVBY2Nlc3NUb2tlbiBBUEkuXG4gICAgICogQHBhcmFtIHRva2VuIFRoZSBhY2Nlc3MgdG9rZW4gdG8gZXhjaGFuZ2UgZm9yIGEgc2VydmljZSBhY2NvdW50IGFjY2Vzc1xuICAgICAqICAgdG9rZW4uXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2aWNlIGFjY291bnQgaW1wZXJzb25hdGVkXG4gICAgICogICBjcmVkZW50aWFscyByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRJbXBlcnNvbmF0ZWRBY2Nlc3NUb2tlbih0b2tlbikge1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgLi4uQmFzZUV4dGVybmFsQWNjb3VudENsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICB1cmw6IHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMuZ2V0U2NvcGVzQXJyYXkoKSxcbiAgICAgICAgICAgICAgICBsaWZldGltZTogdGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25MaWZldGltZSArICdzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSZXNwb25zZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHN1Y2Nlc3NSZXNwb25zZS5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZnJvbSBJU08gZm9ybWF0IHRvIHRpbWVzdGFtcC5cbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiBuZXcgRGF0ZShzdWNjZXNzUmVzcG9uc2UuZXhwaXJlVGltZSkuZ2V0VGltZSgpLFxuICAgICAgICAgICAgcmVzOiByZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCBvciBub3QuXG4gICAgICogSWYgdGhlcmUgaXMgbm8gZXhwaXJ5IHRpbWUsIGFzc3VtZXMgdGhlIHRva2VuIGlzIG5vdCBleHBpcmVkIG9yIGV4cGlyaW5nLlxuICAgICAqIEBwYXJhbSBhY2Nlc3NUb2tlbiBUaGUgY3JlZGVudGlhbHMgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb24uXG4gICAgICogQHJldHVybiBXaGV0aGVyIHRoZSBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCBvciBub3QuXG4gICAgICovXG4gICAgaXNFeHBpcmVkKGFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICByZXR1cm4gYWNjZXNzVG9rZW4uZXhwaXJ5X2RhdGVcbiAgICAgICAgICAgID8gbm93ID49IGFjY2Vzc1Rva2VuLmV4cGlyeV9kYXRlIC0gdGhpcy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXNcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gVGhlIGxpc3Qgb2Ygc2NvcGVzIGZvciB0aGUgcmVxdWVzdGVkIEdDUCBhY2Nlc3MgdG9rZW4uXG4gICAgICovXG4gICAgZ2V0U2NvcGVzQXJyYXkoKSB7XG4gICAgICAgIC8vIFNpbmNlIHNjb3BlcyBjYW4gYmUgcHJvdmlkZWQgYXMgc3RyaW5nIG9yIGFycmF5LCB0aGUgdHlwZSBzaG91bGRcbiAgICAgICAgLy8gYmUgbm9ybWFsaXplZC5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjb3BlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5zY29wZXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlcyB8fCBbREVGQVVMVF9PQVVUSF9TQ09QRV07XG4gICAgfVxuICAgIGdldE1ldHJpY3NIZWFkZXJWYWx1ZSgpIHtcbiAgICAgICAgY29uc3Qgbm9kZVZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyk7XG4gICAgICAgIGNvbnN0IHNhSW1wZXJzb25hdGlvbiA9IHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxTb3VyY2VUeXBlID0gdGhpcy5jcmVkZW50aWFsU291cmNlVHlwZVxuICAgICAgICAgICAgPyB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlXG4gICAgICAgICAgICA6ICd1bmtub3duJztcbiAgICAgICAgcmV0dXJuIGBnbC1ub2RlLyR7bm9kZVZlcnNpb259IGF1dGgvJHtwa2cudmVyc2lvbn0gZ29vZ2xlLWJ5b2lkLXNkayBzb3VyY2UvJHtjcmVkZW50aWFsU291cmNlVHlwZX0gc2EtaW1wZXJzb25hdGlvbi8ke3NhSW1wZXJzb25hdGlvbn0gY29uZmlnLWxpZmV0aW1lLyR7dGhpcy5jb25maWdMaWZldGltZVJlcXVlc3RlZH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzZUV4dGVybmFsQWNjb3VudENsaWVudCA9IEJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQ7XG5fQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9wZW5kaW5nQWNjZXNzVG9rZW4gPSBuZXcgV2Vha01hcCgpLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnRlcm5hbFJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jID0gYXN5bmMgZnVuY3Rpb24gX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfaW50ZXJuYWxSZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpIHtcbiAgICAvLyBSZXRyaWV2ZSB0aGUgZXh0ZXJuYWwgY3JlZGVudGlhbC5cbiAgICBjb25zdCBzdWJqZWN0VG9rZW4gPSBhd2FpdCB0aGlzLnJldHJpZXZlU3ViamVjdFRva2VuKCk7XG4gICAgLy8gQ29uc3RydWN0IHRoZSBTVFMgY3JlZGVudGlhbHMgb3B0aW9ucy5cbiAgICBjb25zdCBzdHNDcmVkZW50aWFsc09wdGlvbnMgPSB7XG4gICAgICAgIGdyYW50VHlwZTogU1RTX0dSQU5UX1RZUEUsXG4gICAgICAgIGF1ZGllbmNlOiB0aGlzLmF1ZGllbmNlLFxuICAgICAgICByZXF1ZXN0ZWRUb2tlblR5cGU6IFNUU19SRVFVRVNUX1RPS0VOX1RZUEUsXG4gICAgICAgIHN1YmplY3RUb2tlbixcbiAgICAgICAgc3ViamVjdFRva2VuVHlwZTogdGhpcy5zdWJqZWN0VG9rZW5UeXBlLFxuICAgICAgICAvLyBnZW5lcmF0ZUFjY2Vzc1Rva2VuIHJlcXVpcmVzIHRoZSBwcm92aWRlZCBhY2Nlc3MgdG9rZW4gdG8gaGF2ZVxuICAgICAgICAvLyBzY29wZXM6XG4gICAgICAgIC8vIGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvaWFtIG9yXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvY2xvdWQtcGxhdGZvcm1cbiAgICAgICAgLy8gVGhlIG5ldyBzZXJ2aWNlIGFjY291bnQgYWNjZXNzIHRva2VuIHNjb3BlcyB3aWxsIG1hdGNoIHRoZSB1c2VyXG4gICAgICAgIC8vIHByb3ZpZGVkIG9uZXMuXG4gICAgICAgIHNjb3BlOiB0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybFxuICAgICAgICAgICAgPyBbREVGQVVMVF9PQVVUSF9TQ09QRV1cbiAgICAgICAgICAgIDogdGhpcy5nZXRTY29wZXNBcnJheSgpLFxuICAgIH07XG4gICAgLy8gRXhjaGFuZ2UgdGhlIGV4dGVybmFsIGNyZWRlbnRpYWxzIGZvciBhIEdDUCBhY2Nlc3MgdG9rZW4uXG4gICAgLy8gQ2xpZW50IGF1dGggaXMgcHJpb3JpdGl6ZWQgb3ZlciBwYXNzaW5nIHRoZSB3b3JrZm9yY2VQb29sVXNlclByb2plY3RcbiAgICAvLyBwYXJhbWV0ZXIgZm9yIFNUUyB0b2tlbiBleGNoYW5nZS5cbiAgICBjb25zdCBhZGRpdGlvbmFsT3B0aW9ucyA9ICF0aGlzLmNsaWVudEF1dGggJiYgdGhpcy53b3JrZm9yY2VQb29sVXNlclByb2plY3RcbiAgICAgICAgPyB7IHVzZXJQcm9qZWN0OiB0aGlzLndvcmtmb3JjZVBvb2xVc2VyUHJvamVjdCB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxIZWFkZXJzID0ge1xuICAgICAgICAneC1nb29nLWFwaS1jbGllbnQnOiB0aGlzLmdldE1ldHJpY3NIZWFkZXJWYWx1ZSgpLFxuICAgIH07XG4gICAgY29uc3Qgc3RzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN0c0NyZWRlbnRpYWwuZXhjaGFuZ2VUb2tlbihzdHNDcmVkZW50aWFsc09wdGlvbnMsIGFkZGl0aW9uYWxIZWFkZXJzLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgaWYgKHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsKSB7XG4gICAgICAgIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLmdldEltcGVyc29uYXRlZEFjY2Vzc1Rva2VuKHN0c1Jlc3BvbnNlLmFjY2Vzc190b2tlbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0c1Jlc3BvbnNlLmV4cGlyZXNfaW4pIHtcbiAgICAgICAgLy8gU2F2ZSByZXNwb25zZSBpbiBjYWNoZWQgYWNjZXNzIHRva2VuLlxuICAgICAgICB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuID0ge1xuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBzdHNSZXNwb25zZS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICBleHBpcnlfZGF0ZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBzdHNSZXNwb25zZS5leHBpcmVzX2luICogMTAwMCxcbiAgICAgICAgICAgIHJlczogc3RzUmVzcG9uc2UucmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gU2F2ZSByZXNwb25zZSBpbiBjYWNoZWQgYWNjZXNzIHRva2VuLlxuICAgICAgICB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuID0ge1xuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBzdHNSZXNwb25zZS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICByZXM6IHN0c1Jlc3BvbnNlLnJlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gU2F2ZSBjcmVkZW50aWFscy5cbiAgICB0aGlzLmNyZWRlbnRpYWxzID0ge307XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuKTtcbiAgICBkZWxldGUgdGhpcy5jcmVkZW50aWFscy5yZXM7XG4gICAgLy8gVHJpZ2dlciB0b2tlbnMgZXZlbnQgdG8gbm90aWZ5IGV4dGVybmFsIGxpc3RlbmVycy5cbiAgICB0aGlzLmVtaXQoJ3Rva2VucycsIHtcbiAgICAgICAgcmVmcmVzaF90b2tlbjogbnVsbCxcbiAgICAgICAgZXhwaXJ5X2RhdGU6IHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4uZXhwaXJ5X2RhdGUsXG4gICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgIHRva2VuX3R5cGU6ICdCZWFyZXInLFxuICAgICAgICBpZF90b2tlbjogbnVsbCxcbiAgICB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIGNhY2hlZCBhY2Nlc3MgdG9rZW4uXG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW47XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9hLCBfYiwgX2M7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpbGVTdWJqZWN0VG9rZW5TdXBwbGllciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4vLyBmcy5yZWFkZmlsZSBpcyB1bmRlZmluZWQgaW4gYnJvd3NlciBrYXJtYSB0ZXN0cyBjYXVzaW5nXG4vLyBgbnBtIHJ1biBicm93c2VyLXRlc3RgIHRvIGZhaWwgYXMgdGVzdC5vYXV0aDIudHMgaW1wb3J0cyB0aGlzIGZpbGUgdmlhXG4vLyBzcmMvaW5kZXgudHMuXG4vLyBGYWxsYmFjayB0byB2b2lkIGZ1bmN0aW9uIHRvIGF2b2lkIHByb21pc2lmeSB0aHJvd2luZyBhIFR5cGVFcnJvci5cbmNvbnN0IHJlYWRGaWxlID0gKDAsIHV0aWxfMS5wcm9taXNpZnkpKChfYSA9IGZzLnJlYWRGaWxlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKCkgPT4geyB9KSk7XG5jb25zdCByZWFscGF0aCA9ICgwLCB1dGlsXzEucHJvbWlzaWZ5KSgoX2IgPSBmcy5yZWFscGF0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKCgpID0+IHsgfSkpO1xuY29uc3QgbHN0YXQgPSAoMCwgdXRpbF8xLnByb21pc2lmeSkoKF9jID0gZnMubHN0YXQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICgoKSA9PiB7IH0pKTtcbi8qKlxuICogSW50ZXJuYWwgc3ViamVjdCB0b2tlbiBzdXBwbGllciBpbXBsZW1lbnRhdGlvbiB1c2VkIHdoZW4gYSBmaWxlIGxvY2F0aW9uXG4gKiBpcyBjb25maWd1cmVkIGluIHRoZSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBidWlsZCBhbiB7QGxpbmsgSWRlbnRpdHlQb29sQ2xpZW50fVxuICovXG5jbGFzcyBGaWxlU3ViamVjdFRva2VuU3VwcGxpZXIge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBmaWxlIGJhc2VkIHN1YmplY3QgdG9rZW4gc3VwcGxpZXIuXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIGZpbGUgc3ViamVjdCB0b2tlbiBzdXBwbGllciBvcHRpb25zIHRvIGJ1aWxkIHRoZSBzdXBwbGllclxuICAgICAqICAgd2l0aC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBvcHRzLmZpbGVQYXRoO1xuICAgICAgICB0aGlzLmZvcm1hdFR5cGUgPSBvcHRzLmZvcm1hdFR5cGU7XG4gICAgICAgIHRoaXMuc3ViamVjdFRva2VuRmllbGROYW1lID0gb3B0cy5zdWJqZWN0VG9rZW5GaWVsZE5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN1YmplY3QgdG9rZW4gc3RvcmVkIGF0IHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQHBhcmFtIGNvbnRleHQge0BsaW5rIEV4dGVybmFsQWNjb3VudFN1cHBsaWVyQ29udGV4dH0gZnJvbSB0aGUgY2FsbGluZ1xuICAgICAqICAge0BsaW5rIElkZW50aXR5UG9vbENsaWVudH0sIGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgYXVkaWVuY2UgYW5kIHN1YmplY3RcbiAgICAgKiAgIHRva2VuIHR5cGUgZm9yIHRoZSBleHRlcm5hbCBhY2NvdW50IGlkZW50aXR5LiBOb3QgdXNlZC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTdWJqZWN0VG9rZW4oY29udGV4dCkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBmaWxlIGF0IHRoZSBwYXRoLiBsc3RhdFN5bmMgd2lsbCB0aHJvdyBpZiB0aGVyZSBpc1xuICAgICAgICAvLyBub3RoaW5nIHRoZXJlLlxuICAgICAgICBsZXQgcGFyc2VkRmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSBwYXRoIHRvIGFjdHVhbCBmaWxlIGluIGNhc2Ugb2Ygc3ltbGluay4gRXhwZWN0IGEgdGhyb3duIGVycm9yXG4gICAgICAgICAgICAvLyBpZiBub3QgcmVzb2x2YWJsZS5cbiAgICAgICAgICAgIHBhcnNlZEZpbGVQYXRoID0gYXdhaXQgcmVhbHBhdGgocGFyc2VkRmlsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgbHN0YXQocGFyc2VkRmlsZVBhdGgpKS5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gYFRoZSBmaWxlIGF0ICR7cGFyc2VkRmlsZVBhdGh9IGRvZXMgbm90IGV4aXN0LCBvciBpdCBpcyBub3QgYSBmaWxlLiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1YmplY3RUb2tlbjtcbiAgICAgICAgY29uc3QgcmF3VGV4dCA9IGF3YWl0IHJlYWRGaWxlKHBhcnNlZEZpbGVQYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1hdFR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgc3ViamVjdFRva2VuID0gcmF3VGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmZvcm1hdFR5cGUgPT09ICdqc29uJyAmJiB0aGlzLnN1YmplY3RUb2tlbkZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UocmF3VGV4dCk7XG4gICAgICAgICAgICBzdWJqZWN0VG9rZW4gPSBqc29uW3RoaXMuc3ViamVjdFRva2VuRmllbGROYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN1YmplY3RUb2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcGFyc2UgdGhlIHN1YmplY3RfdG9rZW4gZnJvbSB0aGUgY3JlZGVudGlhbF9zb3VyY2UgZmlsZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWJqZWN0VG9rZW47XG4gICAgfVxufVxuZXhwb3J0cy5GaWxlU3ViamVjdFRva2VuU3VwcGxpZXIgPSBGaWxlU3ViamVjdFRva2VuU3VwcGxpZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjQgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVybFN1YmplY3RUb2tlblN1cHBsaWVyID0gdm9pZCAwO1xuLyoqXG4gKiBJbnRlcm5hbCBzdWJqZWN0IHRva2VuIHN1cHBsaWVyIGltcGxlbWVudGF0aW9uIHVzZWQgd2hlbiBhIFVSTFxuICogaXMgY29uZmlndXJlZCBpbiB0aGUgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uIHVzZWQgdG8gYnVpbGQgYW4ge0BsaW5rIElkZW50aXR5UG9vbENsaWVudH1cbiAqL1xuY2xhc3MgVXJsU3ViamVjdFRva2VuU3VwcGxpZXIge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhIFVSTCBzdWJqZWN0IHRva2VuIHN1cHBsaWVyLlxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBVUkwgc3ViamVjdCB0b2tlbiBzdXBwbGllciBvcHRpb25zIHRvIGJ1aWxkIHRoZSBzdXBwbGllciB3aXRoLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgdGhpcy51cmwgPSBvcHRzLnVybDtcbiAgICAgICAgdGhpcy5mb3JtYXRUeXBlID0gb3B0cy5mb3JtYXRUeXBlO1xuICAgICAgICB0aGlzLnN1YmplY3RUb2tlbkZpZWxkTmFtZSA9IG9wdHMuc3ViamVjdFRva2VuRmllbGROYW1lO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnM7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEdheGlvc09wdGlvbnMgPSBvcHRzLmFkZGl0aW9uYWxHYXhpb3NPcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBVUkwgcHJvdmlkZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCByZXNvbHZlc1xuICAgICAqIHdpdGggdGhlIHJldHVybmVkIGV4dGVybmFsIHN1YmplY3QgdG9rZW4uXG4gICAgICogQHBhcmFtIGNvbnRleHQge0BsaW5rIEV4dGVybmFsQWNjb3VudFN1cHBsaWVyQ29udGV4dH0gZnJvbSB0aGUgY2FsbGluZ1xuICAgICAqICAge0BsaW5rIElkZW50aXR5UG9vbENsaWVudH0sIGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgYXVkaWVuY2UgYW5kIHN1YmplY3RcbiAgICAgKiAgIHRva2VuIHR5cGUgZm9yIHRoZSBleHRlcm5hbCBhY2NvdW50IGlkZW50aXR5LiBOb3QgdXNlZC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTdWJqZWN0VG9rZW4oY29udGV4dCkge1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5hZGRpdGlvbmFsR2F4aW9zT3B0aW9ucyxcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiB0aGlzLmZvcm1hdFR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzdWJqZWN0VG9rZW47XG4gICAgICAgIGlmICh0aGlzLmZvcm1hdFR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb250ZXh0LnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgICAgICBzdWJqZWN0VG9rZW4gPSByZXNwb25zZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZm9ybWF0VHlwZSA9PT0gJ2pzb24nICYmIHRoaXMuc3ViamVjdFRva2VuRmllbGROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnRleHQudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgICAgIHN1YmplY3RUb2tlbiA9IHJlc3BvbnNlLmRhdGFbdGhpcy5zdWJqZWN0VG9rZW5GaWVsZE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3ViamVjdFRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSB0aGUgc3ViamVjdF90b2tlbiBmcm9tIHRoZSBjcmVkZW50aWFsX3NvdXJjZSBVUkwnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3ViamVjdFRva2VuO1xuICAgIH1cbn1cbmV4cG9ydHMuVXJsU3ViamVjdFRva2VuU3VwcGxpZXIgPSBVcmxTdWJqZWN0VG9rZW5TdXBwbGllcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSWRlbnRpdHlQb29sQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgYmFzZWV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9iYXNlZXh0ZXJuYWxjbGllbnRcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGZpbGVzdWJqZWN0dG9rZW5zdXBwbGllcl8xID0gcmVxdWlyZShcIi4vZmlsZXN1YmplY3R0b2tlbnN1cHBsaWVyXCIpO1xuY29uc3QgdXJsc3ViamVjdHRva2Vuc3VwcGxpZXJfMSA9IHJlcXVpcmUoXCIuL3VybHN1YmplY3R0b2tlbnN1cHBsaWVyXCIpO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBVcmwtc291cmNlZCBhbmQgZmlsZS1zb3VyY2VkIGV4dGVybmFsIGFjY291bnQgY2xpZW50cyBtYWlubHlcbiAqIHVzZWQgZm9yIEs4cyBhbmQgQXp1cmUgd29ya2xvYWRzLlxuICovXG5jbGFzcyBJZGVudGl0eVBvb2xDbGllbnQgZXh0ZW5kcyBiYXNlZXh0ZXJuYWxjbGllbnRfMS5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZSBhbiBJZGVudGl0eVBvb2xDbGllbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIEpTT05cbiAgICAgKiBvYmplY3QgbG9hZGVkIGZyb20gYW4gZXh0ZXJuYWwgYWNjb3VudCBjcmVkZW50aWFscyBmaWxlLlxuICAgICAqIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY3JlZGVudGlhbCBpcyBub3QgYSB2YWxpZCBmaWxlLXNvdXJjZWQgb3JcbiAgICAgKiB1cmwtc291cmNlZCBjcmVkZW50aWFsIG9yIGEgd29ya2ZvcmNlIHBvb2wgdXNlciBwcm9qZWN0IGlzIHByb3ZpZGVkXG4gICAgICogd2l0aCBhIG5vbiB3b3JrZm9yY2UgYXVkaWVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGV4dGVybmFsIGFjY291bnQgb3B0aW9ucyBvYmplY3QgdHlwaWNhbGx5IGxvYWRlZFxuICAgICAqICAgZnJvbSB0aGUgZXh0ZXJuYWwgYWNjb3VudCBKU09OIGNyZWRlbnRpYWwgZmlsZS4gVGhlIGNhbWVsQ2FzZWQgb3B0aW9uc1xuICAgICAqICAgYXJlIGFsaWFzZXMgZm9yIHRoZSBzbmFrZV9jYXNlZCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsT3B0aW9ucyAqKkRFUFJFQ0FURUQsIGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlXG4gICAgICogICBgb3B0aW9uc2AgcGFyYW1ldGVyLioqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYmVoYXZpb3IgY3VzdG9taXphdGlvbiBvcHRpb25zLlxuICAgICAqICAgVGhlc2UgY3VycmVudGx5IGN1c3RvbWl6ZSBleHBpcmF0aW9uIHRocmVzaG9sZCB0aW1lIGFuZCB3aGV0aGVyIHRvIHJldHJ5XG4gICAgICogICBvbiA0MDEvNDAzIEFQSSByZXF1ZXN0IGVycm9ycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSAoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjcmVkZW50aWFsU291cmNlID0gb3B0cy5nZXQoJ2NyZWRlbnRpYWxfc291cmNlJyk7XG4gICAgICAgIGNvbnN0IHN1YmplY3RUb2tlblN1cHBsaWVyID0gb3B0cy5nZXQoJ3N1YmplY3RfdG9rZW5fc3VwcGxpZXInKTtcbiAgICAgICAgLy8gVmFsaWRhdGUgY3JlZGVudGlhbCBzb3VyY2luZyBjb25maWd1cmF0aW9uLlxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxTb3VyY2UgJiYgIXN1YmplY3RUb2tlblN1cHBsaWVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgY3JlZGVudGlhbCBzb3VyY2Ugb3Igc3ViamVjdCB0b2tlbiBzdXBwbGllciBtdXN0IGJlIHNwZWNpZmllZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3JlZGVudGlhbFNvdXJjZSAmJiBzdWJqZWN0VG9rZW5TdXBwbGllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG9uZSBvZiBjcmVkZW50aWFsIHNvdXJjZSBvciBzdWJqZWN0IHRva2VuIHN1cHBsaWVyIGNhbiBiZSBzcGVjaWZpZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1YmplY3RUb2tlblN1cHBsaWVyKSB7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3RUb2tlblN1cHBsaWVyID0gc3ViamVjdFRva2VuU3VwcGxpZXI7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlID0gJ3Byb2dyYW1tYXRpYyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjcmVkZW50aWFsU291cmNlT3B0cyA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykoY3JlZGVudGlhbFNvdXJjZSk7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ2Zvcm1hdCcpKTtcbiAgICAgICAgICAgIC8vIFRleHQgaXMgdGhlIGRlZmF1bHQgZm9ybWF0IHR5cGUuXG4gICAgICAgICAgICBjb25zdCBmb3JtYXRUeXBlID0gZm9ybWF0T3B0cy5nZXQoJ3R5cGUnKSB8fCAndGV4dCc7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXRTdWJqZWN0VG9rZW5GaWVsZE5hbWUgPSBmb3JtYXRPcHRzLmdldCgnc3ViamVjdF90b2tlbl9maWVsZF9uYW1lJyk7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VHlwZSAhPT0gJ2pzb24nICYmIGZvcm1hdFR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjcmVkZW50aWFsX3NvdXJjZSBmb3JtYXQgXCIke2Zvcm1hdFR5cGV9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXRUeXBlID09PSAnanNvbicgJiYgIWZvcm1hdFN1YmplY3RUb2tlbkZpZWxkTmFtZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzdWJqZWN0X3Rva2VuX2ZpZWxkX25hbWUgZm9yIEpTT04gY3JlZGVudGlhbF9zb3VyY2UgZm9ybWF0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gY3JlZGVudGlhbFNvdXJjZU9wdHMuZ2V0KCdmaWxlJyk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ3VybCcpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGNyZWRlbnRpYWxTb3VyY2VPcHRzLmdldCgnaGVhZGVycycpO1xuICAgICAgICAgICAgaWYgKGZpbGUgJiYgdXJsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2YWxpZCBJZGVudGl0eSBQb29sIFwiY3JlZGVudGlhbF9zb3VyY2VcIiBwcm92aWRlZCwgbXVzdCBiZSBlaXRoZXIgZmlsZSBvciB1cmwuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWxlICYmICF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlID0gJ2ZpbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdFRva2VuU3VwcGxpZXIgPSBuZXcgZmlsZXN1YmplY3R0b2tlbnN1cHBsaWVyXzEuRmlsZVN1YmplY3RUb2tlblN1cHBsaWVyKHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZVBhdGg6IGZpbGUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFR5cGU6IGZvcm1hdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3RUb2tlbkZpZWxkTmFtZTogZm9ybWF0U3ViamVjdFRva2VuRmllbGROYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWZpbGUgJiYgdXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFsU291cmNlVHlwZSA9ICd1cmwnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdFRva2VuU3VwcGxpZXIgPSBuZXcgdXJsc3ViamVjdHRva2Vuc3VwcGxpZXJfMS5VcmxTdWJqZWN0VG9rZW5TdXBwbGllcih7XG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRUeXBlOiBmb3JtYXRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0VG9rZW5GaWVsZE5hbWU6IGZvcm1hdFN1YmplY3RUb2tlbkZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEdheGlvc09wdGlvbnM6IElkZW50aXR5UG9vbENsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIElkZW50aXR5IFBvb2wgXCJjcmVkZW50aWFsX3NvdXJjZVwiIHByb3ZpZGVkLCBtdXN0IGJlIGVpdGhlciBmaWxlIG9yIHVybC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIGV4dGVybmFsIHN1YmplY3QgdG9rZW4gaXMgbmVlZGVkIHRvIGJlIGV4Y2hhbmdlZCBmb3IgYSBHQ1BcbiAgICAgKiBhY2Nlc3MgdG9rZW4gdmlhIEdDUCBTVFMgZW5kcG9pbnQuIEdldHMgYSBzdWJqZWN0IHRva2VuIGJ5IGNhbGxpbmdcbiAgICAgKiB0aGUgY29uZmlndXJlZCB7QGxpbmsgU3ViamVjdFRva2VuU3VwcGxpZXJ9XG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBleHRlcm5hbCBzdWJqZWN0IHRva2VuLlxuICAgICAqL1xuICAgIGFzeW5jIHJldHJpZXZlU3ViamVjdFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0VG9rZW5TdXBwbGllci5nZXRTdWJqZWN0VG9rZW4odGhpcy5zdXBwbGllckNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuSWRlbnRpdHlQb29sQ2xpZW50ID0gSWRlbnRpdHlQb29sQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bd3NSZXF1ZXN0U2lnbmVyID0gdm9pZCAwO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiLi4vY3J5cHRvL2NyeXB0b1wiKTtcbi8qKiBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCBzaWduaW5nIGFsZ29yaXRobSBpZGVudGlmaWVyLiAgKi9cbmNvbnN0IEFXU19BTEdPUklUSE0gPSAnQVdTNC1ITUFDLVNIQTI1Nic7XG4vKipcbiAqIFRoZSB0ZXJtaW5hdGlvbiBzdHJpbmcgZm9yIHRoZSBBV1MgY3JlZGVudGlhbCBzY29wZSB2YWx1ZSBhcyBkZWZpbmVkIGluXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lndjQtY3JlYXRlLXN0cmluZy10by1zaWduLmh0bWxcbiAqL1xuY29uc3QgQVdTX1JFUVVFU1RfVFlQRSA9ICdhd3M0X3JlcXVlc3QnO1xuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIEFXUyBBUEkgcmVxdWVzdCBzaWduZXIgYmFzZWQgb24gdGhlIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0XG4gKiBzaWduaW5nIHByb2Nlc3MuXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lnbmF0dXJlLXZlcnNpb24tNC5odG1sXG4gKi9cbmNsYXNzIEF3c1JlcXVlc3RTaWduZXIge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbiBBV1MgQVBJIHJlcXVlc3Qgc2lnbmVyIHVzZWQgdG8gc2VuZCBhdXRoZW50aWNhdGVkIHNpZ25lZFxuICAgICAqIHJlcXVlc3RzIHRvIEFXUyBBUElzIGJhc2VkIG9uIHRoZSBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCBzaWduaW5nIHByb2Nlc3MuXG4gICAgICogVGhpcyBhbHNvIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIGdlbmVyYXRlIHRoZSBzaWduZWQgcmVxdWVzdCB3aXRob3V0XG4gICAgICogc2VuZGluZyBpdC5cbiAgICAgKiBAcGFyYW0gZ2V0Q3JlZGVudGlhbHMgQSBtZWNoYW5pc20gdG8gcmV0cmlldmUgQVdTIHNlY3VyaXR5IGNyZWRlbnRpYWxzXG4gICAgICogICB3aGVuIG5lZWRlZC5cbiAgICAgKiBAcGFyYW0gcmVnaW9uIFRoZSBBV1MgcmVnaW9uIHRvIHVzZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihnZXRDcmVkZW50aWFscywgcmVnaW9uKSB7XG4gICAgICAgIHRoaXMuZ2V0Q3JlZGVudGlhbHMgPSBnZXRDcmVkZW50aWFscztcbiAgICAgICAgdGhpcy5yZWdpb24gPSByZWdpb247XG4gICAgICAgIHRoaXMuY3J5cHRvID0gKDAsIGNyeXB0b18xLmNyZWF0ZUNyeXB0bykoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIHRoZSBzaWduZWQgcmVxdWVzdCBmb3IgdGhlIHByb3ZpZGVkIEhUVFAgcmVxdWVzdCBmb3IgY2FsbGluZ1xuICAgICAqIGFuIEFXUyBBUEkuIFRoaXMgZm9sbG93cyB0aGUgc3RlcHMgZGVzY3JpYmVkIGF0OlxuICAgICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWd2NF9zaWduaW5nLmh0bWxcbiAgICAgKiBAcGFyYW0gYW16T3B0aW9ucyBUaGUgQVdTIHJlcXVlc3Qgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgc2lnbmVkLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgR2F4aW9zT3B0aW9ucyBjb250YWluaW5nIHRoZVxuICAgICAqICAgc2lnbmVkIEhUVFAgcmVxdWVzdCBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcXVlc3RPcHRpb25zKGFtek9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFhbXpPcHRpb25zLnVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInVybFwiIGlzIHJlcXVpcmVkIGluIFwiYW16T3B0aW9uc1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RyaW5naWZ5IEpTT04gcmVxdWVzdHMuIFRoaXMgd2lsbCBiZSBzZXQgaW4gdGhlIHJlcXVlc3QgYm9keSBvZiB0aGVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHNpZ25lZCByZXF1ZXN0LlxuICAgICAgICBjb25zdCByZXF1ZXN0UGF5bG9hZERhdGEgPSB0eXBlb2YgYW16T3B0aW9ucy5kYXRhID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShhbXpPcHRpb25zLmRhdGEpXG4gICAgICAgICAgICA6IGFtek9wdGlvbnMuZGF0YTtcbiAgICAgICAgY29uc3QgdXJsID0gYW16T3B0aW9ucy51cmw7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGFtek9wdGlvbnMubWV0aG9kIHx8ICdHRVQnO1xuICAgICAgICBjb25zdCByZXF1ZXN0UGF5bG9hZCA9IGFtek9wdGlvbnMuYm9keSB8fCByZXF1ZXN0UGF5bG9hZERhdGE7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxBbXpIZWFkZXJzID0gYW16T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICBjb25zdCBhd3NTZWN1cml0eUNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpO1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIGNvbnN0IGhlYWRlck1hcCA9IGF3YWl0IGdlbmVyYXRlQXV0aGVudGljYXRpb25IZWFkZXJNYXAoe1xuICAgICAgICAgICAgY3J5cHRvOiB0aGlzLmNyeXB0byxcbiAgICAgICAgICAgIGhvc3Q6IHVyaS5ob3N0LFxuICAgICAgICAgICAgY2Fub25pY2FsVXJpOiB1cmkucGF0aG5hbWUsXG4gICAgICAgICAgICBjYW5vbmljYWxRdWVyeXN0cmluZzogdXJpLnNlYXJjaC5zdWJzdHIoMSksXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICAgICAgc2VjdXJpdHlDcmVkZW50aWFsczogYXdzU2VjdXJpdHlDcmVkZW50aWFscyxcbiAgICAgICAgICAgIHJlcXVlc3RQYXlsb2FkLFxuICAgICAgICAgICAgYWRkaXRpb25hbEFtekhlYWRlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBcHBlbmQgYWRkaXRpb25hbCBvcHRpb25hbCBoZWFkZXJzLCBlZy4gWC1BbXotVGFyZ2V0LCBDb250ZW50LVR5cGUsIGV0Yy5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIC8vIEFkZCB4LWFtei1kYXRlIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgaGVhZGVyTWFwLmFtekRhdGUgPyB7ICd4LWFtei1kYXRlJzogaGVhZGVyTWFwLmFtekRhdGUgfSA6IHt9LCB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBoZWFkZXJNYXAuYXV0aG9yaXphdGlvbkhlYWRlcixcbiAgICAgICAgICAgIGhvc3Q6IHVyaS5ob3N0LFxuICAgICAgICB9LCBhZGRpdGlvbmFsQW16SGVhZGVycyB8fCB7fSk7XG4gICAgICAgIGlmIChhd3NTZWN1cml0eUNyZWRlbnRpYWxzLnRva2VuKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIHtcbiAgICAgICAgICAgICAgICAneC1hbXotc2VjdXJpdHktdG9rZW4nOiBhd3NTZWN1cml0eUNyZWRlbnRpYWxzLnRva2VuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXdzU2lnbmVkUmVxID0ge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RQYXlsb2FkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgYXdzU2lnbmVkUmVxLmJvZHkgPSByZXF1ZXN0UGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdzU2lnbmVkUmVxO1xuICAgIH1cbn1cbmV4cG9ydHMuQXdzUmVxdWVzdFNpZ25lciA9IEF3c1JlcXVlc3RTaWduZXI7XG4vKipcbiAqIENyZWF0ZXMgdGhlIEhNQUMtU0hBMjU2IGhhc2ggb2YgdGhlIHByb3ZpZGVkIG1lc3NhZ2UgdXNpbmcgdGhlXG4gKiBwcm92aWRlZCBrZXkuXG4gKlxuICogQHBhcmFtIGNyeXB0byBUaGUgY3J5cHRvIGluc3RhbmNlIHVzZWQgdG8gZmFjaWxpdGF0ZSBjcnlwdG9ncmFwaGljXG4gKiAgIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ga2V5IFRoZSBITUFDLVNIQTI1NiBrZXkgdG8gdXNlLlxuICogQHBhcmFtIG1zZyBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICogQHJldHVybiBUaGUgY29tcHV0ZWQgaGFzaCBieXRlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2lnbihjcnlwdG8sIGtleSwgbXNnKSB7XG4gICAgcmV0dXJuIGF3YWl0IGNyeXB0by5zaWduV2l0aEhtYWNTaGEyNTYoa2V5LCBtc2cpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaWduaW5nIGtleSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIGZvclxuICogQVdTIFNpZ25hdHVyZSBWZXJzaW9uIDQgYmFzZWQgb246XG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lndjQtY2FsY3VsYXRlLXNpZ25hdHVyZS5odG1sXG4gKlxuICogQHBhcmFtIGNyeXB0byBUaGUgY3J5cHRvIGluc3RhbmNlIHVzZWQgdG8gZmFjaWxpdGF0ZSBjcnlwdG9ncmFwaGljXG4gKiAgIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ga2V5IFRoZSBBV1Mgc2VjcmV0IGFjY2VzcyBrZXkuXG4gKiBAcGFyYW0gZGF0ZVN0YW1wIFRoZSAnJVklbSVkJyBkYXRlIGZvcm1hdC5cbiAqIEBwYXJhbSByZWdpb24gVGhlIEFXUyByZWdpb24uXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgVGhlIEFXUyBzZXJ2aWNlIG5hbWUsIGVnLiBzdHMuXG4gKiBAcmV0dXJuIFRoZSBzaWduaW5nIGtleSBieXRlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmluZ0tleShjcnlwdG8sIGtleSwgZGF0ZVN0YW1wLCByZWdpb24sIHNlcnZpY2VOYW1lKSB7XG4gICAgY29uc3Qga0RhdGUgPSBhd2FpdCBzaWduKGNyeXB0bywgYEFXUzQke2tleX1gLCBkYXRlU3RhbXApO1xuICAgIGNvbnN0IGtSZWdpb24gPSBhd2FpdCBzaWduKGNyeXB0bywga0RhdGUsIHJlZ2lvbik7XG4gICAgY29uc3Qga1NlcnZpY2UgPSBhd2FpdCBzaWduKGNyeXB0bywga1JlZ2lvbiwgc2VydmljZU5hbWUpO1xuICAgIGNvbnN0IGtTaWduaW5nID0gYXdhaXQgc2lnbihjcnlwdG8sIGtTZXJ2aWNlLCAnYXdzNF9yZXF1ZXN0Jyk7XG4gICAgcmV0dXJuIGtTaWduaW5nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIGhlYWRlciBtYXAgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBBV1NcbiAqIFNpZ25hdHVyZSBWZXJzaW9uIDQgc2lnbmVkIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIG9wdGlvbiBUaGUgb3B0aW9ucyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgYXV0aGVudGljYXRpb24gaGVhZGVyIG1hcC5cbiAqIEByZXR1cm4gVGhlIEFXUyBhdXRoZW50aWNhdGlvbiBoZWFkZXIgbWFwIHdoaWNoIGNvbnN0aXR1dGVzIG9mIHRoZSBmb2xsb3dpbmdcbiAqICAgY29tcG9uZW50czogYW16LWRhdGUsIGF1dGhvcml6YXRpb24gaGVhZGVyIGFuZCBjYW5vbmljYWwgcXVlcnkgc3RyaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uSGVhZGVyTWFwKG9wdGlvbnMpIHtcbiAgICBjb25zdCBhZGRpdGlvbmFsQW16SGVhZGVycyA9IG9wdGlvbnMuYWRkaXRpb25hbEFtekhlYWRlcnMgfHwge307XG4gICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSBvcHRpb25zLnJlcXVlc3RQYXlsb2FkIHx8ICcnO1xuICAgIC8vIGlhbS5hbWF6b25hd3MuY29tIGhvc3QgPT4gaWFtIHNlcnZpY2UuXG4gICAgLy8gc3RzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tID0+IHN0cyBzZXJ2aWNlLlxuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gb3B0aW9ucy5ob3N0LnNwbGl0KCcuJylbMF07XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAvLyBGb3JtYXQ6ICclWSVtJWRUJUglTSVTWicuXG4gICAgY29uc3QgYW16RGF0ZSA9IG5vd1xuICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAucmVwbGFjZSgvWy06XS9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLlswLTldKy8sICcnKTtcbiAgICAvLyBGb3JtYXQ6ICclWSVtJWQnLlxuICAgIGNvbnN0IGRhdGVTdGFtcCA9IG5vdy50b0lTT1N0cmluZygpLnJlcGxhY2UoL1stXS9nLCAnJykucmVwbGFjZSgvVC4qLywgJycpO1xuICAgIC8vIENoYW5nZSBhbGwgYWRkaXRpb25hbCBoZWFkZXJzIHRvIGJlIGxvd2VyIGNhc2UuXG4gICAgY29uc3QgcmVmb3JtYXR0ZWRBZGRpdGlvbmFsQW16SGVhZGVycyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxBbXpIZWFkZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJlZm9ybWF0dGVkQWRkaXRpb25hbEFtekhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID1cbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbXpIZWFkZXJzW2tleV07XG4gICAgfSk7XG4gICAgLy8gQWRkIEFXUyB0b2tlbiBpZiBhdmFpbGFibGUuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJpdHlDcmVkZW50aWFscy50b2tlbikge1xuICAgICAgICByZWZvcm1hdHRlZEFkZGl0aW9uYWxBbXpIZWFkZXJzWyd4LWFtei1zZWN1cml0eS10b2tlbiddID1cbiAgICAgICAgICAgIG9wdGlvbnMuc2VjdXJpdHlDcmVkZW50aWFscy50b2tlbjtcbiAgICB9XG4gICAgLy8gSGVhZGVyIGtleXMgbmVlZCB0byBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuXG4gICAgY29uc3QgYW16SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBob3N0OiBvcHRpb25zLmhvc3QsXG4gICAgfSwgXG4gICAgLy8gUHJldmlvdXNseSB0aGUgZGF0ZSB3YXMgbm90IGZpeGVkIHdpdGggeC1hbXotIGFuZCBjb3VsZCBiZSBwcm92aWRlZCBtYW51YWxseS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYm90by9ib3RvY29yZS9ibG9iLzg3OWY4NDQwYTRlOWFjZTVkM2NmMTQ1Y2U4YjNkNWU1ZmZiODkyZWYvdGVzdHMvdW5pdC9hdXRoL2F3czRfdGVzdHN1aXRlL2dldC1oZWFkZXItdmFsdWUtdHJpbS5yZXFcbiAgICByZWZvcm1hdHRlZEFkZGl0aW9uYWxBbXpIZWFkZXJzLmRhdGUgPyB7fSA6IHsgJ3gtYW16LWRhdGUnOiBhbXpEYXRlIH0sIHJlZm9ybWF0dGVkQWRkaXRpb25hbEFtekhlYWRlcnMpO1xuICAgIGxldCBjYW5vbmljYWxIZWFkZXJzID0gJyc7XG4gICAgY29uc3Qgc2lnbmVkSGVhZGVyc0xpc3QgPSBPYmplY3Qua2V5cyhhbXpIZWFkZXJzKS5zb3J0KCk7XG4gICAgc2lnbmVkSGVhZGVyc0xpc3QuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjYW5vbmljYWxIZWFkZXJzICs9IGAke2tleX06JHthbXpIZWFkZXJzW2tleV19XFxuYDtcbiAgICB9KTtcbiAgICBjb25zdCBzaWduZWRIZWFkZXJzID0gc2lnbmVkSGVhZGVyc0xpc3Quam9pbignOycpO1xuICAgIGNvbnN0IHBheWxvYWRIYXNoID0gYXdhaXQgb3B0aW9ucy5jcnlwdG8uc2hhMjU2RGlnZXN0SGV4KHJlcXVlc3RQYXlsb2FkKTtcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lndjQtY3JlYXRlLWNhbm9uaWNhbC1yZXF1ZXN0Lmh0bWxcbiAgICBjb25zdCBjYW5vbmljYWxSZXF1ZXN0ID0gYCR7b3B0aW9ucy5tZXRob2R9XFxuYCArXG4gICAgICAgIGAke29wdGlvbnMuY2Fub25pY2FsVXJpfVxcbmAgK1xuICAgICAgICBgJHtvcHRpb25zLmNhbm9uaWNhbFF1ZXJ5c3RyaW5nfVxcbmAgK1xuICAgICAgICBgJHtjYW5vbmljYWxIZWFkZXJzfVxcbmAgK1xuICAgICAgICBgJHtzaWduZWRIZWFkZXJzfVxcbmAgK1xuICAgICAgICBgJHtwYXlsb2FkSGFzaH1gO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxTY29wZSA9IGAke2RhdGVTdGFtcH0vJHtvcHRpb25zLnJlZ2lvbn0vJHtzZXJ2aWNlTmFtZX0vJHtBV1NfUkVRVUVTVF9UWVBFfWA7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3NpZ3Y0LWNyZWF0ZS1zdHJpbmctdG8tc2lnbi5odG1sXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gYCR7QVdTX0FMR09SSVRITX1cXG5gICtcbiAgICAgICAgYCR7YW16RGF0ZX1cXG5gICtcbiAgICAgICAgYCR7Y3JlZGVudGlhbFNjb3BlfVxcbmAgK1xuICAgICAgICAoYXdhaXQgb3B0aW9ucy5jcnlwdG8uc2hhMjU2RGlnZXN0SGV4KGNhbm9uaWNhbFJlcXVlc3QpKTtcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lndjQtY2FsY3VsYXRlLXNpZ25hdHVyZS5odG1sXG4gICAgY29uc3Qgc2lnbmluZ0tleSA9IGF3YWl0IGdldFNpZ25pbmdLZXkob3B0aW9ucy5jcnlwdG8sIG9wdGlvbnMuc2VjdXJpdHlDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXksIGRhdGVTdGFtcCwgb3B0aW9ucy5yZWdpb24sIHNlcnZpY2VOYW1lKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKG9wdGlvbnMuY3J5cHRvLCBzaWduaW5nS2V5LCBzdHJpbmdUb1NpZ24pO1xuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWd2NC1hZGQtc2lnbmF0dXJlLXRvLXJlcXVlc3QuaHRtbFxuICAgIGNvbnN0IGF1dGhvcml6YXRpb25IZWFkZXIgPSBgJHtBV1NfQUxHT1JJVEhNfSBDcmVkZW50aWFsPSR7b3B0aW9ucy5zZWN1cml0eUNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkfS9gICtcbiAgICAgICAgYCR7Y3JlZGVudGlhbFNjb3BlfSwgU2lnbmVkSGVhZGVycz0ke3NpZ25lZEhlYWRlcnN9LCBgICtcbiAgICAgICAgYFNpZ25hdHVyZT0keygwLCBjcnlwdG9fMS5mcm9tQXJyYXlCdWZmZXJUb0hleCkoc2lnbmF0dXJlKX1gO1xuICAgIHJldHVybiB7XG4gICAgICAgIC8vIERvIG5vdCByZXR1cm4geC1hbXotZGF0ZSBpZiBkYXRlIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgYW16RGF0ZTogcmVmb3JtYXR0ZWRBZGRpdGlvbmFsQW16SGVhZGVycy5kYXRlID8gdW5kZWZpbmVkIDogYW16RGF0ZSxcbiAgICAgICAgYXV0aG9yaXphdGlvbkhlYWRlcixcbiAgICAgICAgY2Fub25pY2FsUXVlcnlzdHJpbmc6IG9wdGlvbnMuY2Fub25pY2FsUXVlcnlzdHJpbmcsXG4gICAgfTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0SW1kc1YyU2Vzc2lvblRva2VuLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRBd3NSb2xlTmFtZSwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmV0cmlldmVBd3NTZWN1cml0eUNyZWRlbnRpYWxzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZWdpb25Gcm9tRW52X2dldCwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfc2VjdXJpdHlDcmVkZW50aWFsc0Zyb21FbnZfZ2V0O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyID0gdm9pZCAwO1xuLyoqXG4gKiBJbnRlcm5hbCBBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHMgc3VwcGxpZXIgaW1wbGVtZW50YXRpb24gdXNlZCBieSB7QGxpbmsgQXdzQ2xpZW50fVxuICogd2hlbiBhIGNyZWRlbnRpYWwgc291cmNlIGlzIHByb3ZpZGVkIGluc3RlYWQgb2YgYSB1c2VyIGRlZmluZWQgc3VwcGxpZXIuXG4gKiBUaGUgbG9naWMgaXMgc3VtbWFyaXplZCBhczpcbiAqIDEuIElmIGltZHN2Ml9zZXNzaW9uX3Rva2VuX3VybCBpcyBwcm92aWRlZCBpbiB0aGUgY3JlZGVudGlhbCBzb3VyY2UsIHRoZW5cbiAqICAgIGZldGNoIHRoZSBhd3Mgc2Vzc2lvbiB0b2tlbiBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgaGVhZGVycyBvZiB0aGVcbiAqICAgIG1ldGFkYXRhIHJlcXVlc3RzLiBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgZm9yIElETVN2MiBidXQgb3B0aW9uYWxcbiAqICAgIGZvciBJRE1TdjEuXG4gKiAyLiBSZXRyaWV2ZSBBV1MgcmVnaW9uIGZyb20gYXZhaWxhYmlsaXR5LXpvbmUuXG4gKiAzYS4gQ2hlY2sgQVdTIGNyZWRlbnRpYWxzIGluIGVudmlyb25tZW50IHZhcmlhYmxlcy4gSWYgbm90IGZvdW5kLCBnZXRcbiAqICAgICBmcm9tIHNlY3VyaXR5LWNyZWRlbnRpYWxzIGVuZHBvaW50LlxuICogM2IuIEdldCBBV1MgY3JlZGVudGlhbHMgZnJvbSBzZWN1cml0eS1jcmVkZW50aWFscyBlbmRwb2ludC4gSW4gb3JkZXJcbiAqICAgICB0byByZXRyaWV2ZSB0aGlzLCB0aGUgQVdTIHJvbGUgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nXG4gKiAgICAgc2VjdXJpdHktY3JlZGVudGlhbHMgZW5kcG9pbnQgd2l0aG91dCBhbnkgYXJndW1lbnQuIFRoZW4gdGhlXG4gKiAgICAgY3JlZGVudGlhbHMgY2FuIGJlIHJldHJpZXZlZCB2aWE6IHNlY3VyaXR5LWNyZWRlbnRpYWxzL3JvbGVfbmFtZVxuICogNC4gR2VuZXJhdGUgdGhlIHNpZ25lZCByZXF1ZXN0IHRvIEFXUyBTVFMgR2V0Q2FsbGVySWRlbnRpdHkgYWN0aW9uLlxuICogNS4gSW5qZWN0IHgtZ29vZy1jbG91ZC10YXJnZXQtcmVzb3VyY2UgaW50byBoZWFkZXIgYW5kIHNlcmlhbGl6ZSB0aGVcbiAqICAgIHNpZ25lZCByZXF1ZXN0LiBUaGlzIHdpbGwgYmUgdGhlIHN1YmplY3QtdG9rZW4gdG8gcGFzcyB0byBHQ1AgU1RTLlxuICovXG5jbGFzcyBEZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyIHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllciB1c2luZyBpbmZvcm1hdGlvblxuICAgICAqIGZyb20gdGhlIGNyZWRlbnRpYWxfc291cmNlIHN0b3JlZCBpbiB0aGUgQURDIGZpbGUuXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIGRlZmF1bHQgYXdzIHNlY3VyaXR5IGNyZWRlbnRpYWxzIHN1cHBsaWVyIG9wdGlvbnMgb2JqZWN0IHRvXG4gICAgICogICBidWlsZCB0aGUgc3VwcGxpZXIgd2l0aC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMucmVnaW9uVXJsID0gb3B0cy5yZWdpb25Vcmw7XG4gICAgICAgIHRoaXMuc2VjdXJpdHlDcmVkZW50aWFsc1VybCA9IG9wdHMuc2VjdXJpdHlDcmVkZW50aWFsc1VybDtcbiAgICAgICAgdGhpcy5pbWRzVjJTZXNzaW9uVG9rZW5VcmwgPSBvcHRzLmltZHNWMlNlc3Npb25Ub2tlblVybDtcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsR2F4aW9zT3B0aW9ucyA9IG9wdHMuYWRkaXRpb25hbEdheGlvc09wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdGl2ZSBBV1MgcmVnaW9uLiBUaGlzIGZpcnN0IGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlZ2lvblxuICAgICAqIGlzIGF2YWlsYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgaXQgaXMgbm90LCB0aGVuIHRoZSBzdXBwbGllclxuICAgICAqIHdpbGwgY2FsbCB0aGUgcmVnaW9uIFVSTC5cbiAgICAgKiBAcGFyYW0gY29udGV4dCB7QGxpbmsgRXh0ZXJuYWxBY2NvdW50U3VwcGxpZXJDb250ZXh0fSBmcm9tIHRoZSBjYWxsaW5nXG4gICAgICogICB7QGxpbmsgQXdzQ2xpZW50fSwgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBhdWRpZW5jZSBhbmQgc3ViamVjdCB0b2tlbiB0eXBlXG4gICAgICogICBmb3IgdGhlIGV4dGVybmFsIGFjY291bnQgaWRlbnRpdHkuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBBV1MgcmVnaW9uIHN0cmluZy5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBd3NSZWdpb24oY29udGV4dCkge1xuICAgICAgICAvLyBQcmlvcml0eSBvcmRlciBmb3IgcmVnaW9uIGRldGVybWluYXRpb246XG4gICAgICAgIC8vIEFXU19SRUdJT04gPiBBV1NfREVGQVVMVF9SRUdJT04gPiBtZXRhZGF0YSBzZXJ2ZXIuXG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgXCJhXCIsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3JlZ2lvbkZyb21FbnZfZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcImFcIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmVnaW9uRnJvbUVudl9nZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhSGVhZGVycyA9IHt9O1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcImFcIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmVnaW9uRnJvbUVudl9nZXQpICYmIHRoaXMuaW1kc1YyU2Vzc2lvblRva2VuVXJsKSB7XG4gICAgICAgICAgICBtZXRhZGF0YUhlYWRlcnNbJ3gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbiddID1cbiAgICAgICAgICAgICAgICBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgXCJtXCIsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2dldEltZHNWMlNlc3Npb25Ub2tlbikuY2FsbCh0aGlzLCBjb250ZXh0LnRyYW5zcG9ydGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucmVnaW9uVXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgQVdTIHJlZ2lvbiBkdWUgdG8gbWlzc2luZyAnICtcbiAgICAgICAgICAgICAgICAnXCJvcHRpb25zLmNyZWRlbnRpYWxfc291cmNlLnJlZ2lvbl91cmxcIicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmFkZGl0aW9uYWxHYXhpb3NPcHRpb25zLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnJlZ2lvblVybCxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG1ldGFkYXRhSGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb250ZXh0LnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgIC8vIFJlbW92ZSBsYXN0IGNoYXJhY3Rlci4gRm9yIGV4YW1wbGUsIGlmIHVzLWVhc3QtMmIgaXMgcmV0dXJuZWQsXG4gICAgICAgIC8vIHRoZSByZWdpb24gd291bGQgYmUgdXMtZWFzdC0yLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5zdWJzdHIoMCwgcmVzcG9uc2UuZGF0YS5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHMuIFRoaXMgZmlyc3QgY2hlY2tzIHRvIHNlZSBpZiB0aGUgY3JlZGVudGlhbHNcbiAgICAgKiBpcyBhdmFpbGFibGUgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJZiBpdCBpcyBub3QsIHRoZW4gdGhlIHN1cHBsaWVyXG4gICAgICogd2lsbCBjYWxsIHRoZSBzZWN1cml0eSBjcmVkZW50aWFscyBVUkwuXG4gICAgICogQHBhcmFtIGNvbnRleHQge0BsaW5rIEV4dGVybmFsQWNjb3VudFN1cHBsaWVyQ29udGV4dH0gZnJvbSB0aGUgY2FsbGluZ1xuICAgICAqICAge0BsaW5rIEF3c0NsaWVudH0sIGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgYXVkaWVuY2UgYW5kIHN1YmplY3QgdG9rZW4gdHlwZVxuICAgICAqICAgZm9yIHRoZSBleHRlcm5hbCBhY2NvdW50IGlkZW50aXR5LlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgQVdTIHNlY3VyaXR5IGNyZWRlbnRpYWxzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEF3c1NlY3VyaXR5Q3JlZGVudGlhbHMoY29udGV4dCkge1xuICAgICAgICAvLyBDaGVjayBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHBlcm1hbmVudCBjcmVkZW50aWFscyBmaXJzdC5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL2F3cy1zZWMtY3JlZC10eXBlcy5odG1sXG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgXCJhXCIsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3NlY3VyaXR5Q3JlZGVudGlhbHNGcm9tRW52X2dldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgXCJhXCIsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3NlY3VyaXR5Q3JlZGVudGlhbHNGcm9tRW52X2dldCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0YWRhdGFIZWFkZXJzID0ge307XG4gICAgICAgIGlmICh0aGlzLmltZHNWMlNlc3Npb25Ub2tlblVybCkge1xuICAgICAgICAgICAgbWV0YWRhdGFIZWFkZXJzWyd4LWF3cy1lYzItbWV0YWRhdGEtdG9rZW4nXSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9pbnN0YW5jZXMsIFwibVwiLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRJbWRzVjJTZXNzaW9uVG9rZW4pLmNhbGwodGhpcywgY29udGV4dC50cmFuc3BvcnRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2luY2UgdGhlIHJvbGUgb24gYSBWTSBjYW4gY2hhbmdlLCB3ZSBkb24ndCBuZWVkIHRvIGNhY2hlIGl0LlxuICAgICAgICBjb25zdCByb2xlTmFtZSA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcIm1cIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0QXdzUm9sZU5hbWUpLmNhbGwodGhpcywgbWV0YWRhdGFIZWFkZXJzLCBjb250ZXh0LnRyYW5zcG9ydGVyKTtcbiAgICAgICAgLy8gVGVtcG9yYXJ5IGNyZWRlbnRpYWxzIHR5cGljYWxseSBsYXN0IGZvciBzZXZlcmFsIGhvdXJzLlxuICAgICAgICAvLyBFeHBpcmF0aW9uIGlzIHJldHVybmVkIGluIHJlc3BvbnNlLlxuICAgICAgICAvLyBDb25zaWRlciBmdXR1cmUgb3B0aW1pemF0aW9uIG9mIHRoaXMgbG9naWMgdG8gY2FjaGUgQVdTIHRva2Vuc1xuICAgICAgICAvLyB1bnRpbCB0aGVpciBuYXR1cmFsIGV4cGlyYXRpb24uXG4gICAgICAgIGNvbnN0IGF3c0NyZWRzID0gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9pbnN0YW5jZXMsIFwibVwiLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZXRyaWV2ZUF3c1NlY3VyaXR5Q3JlZGVudGlhbHMpLmNhbGwodGhpcywgcm9sZU5hbWUsIG1ldGFkYXRhSGVhZGVycywgY29udGV4dC50cmFuc3BvcnRlcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDogYXdzQ3JlZHMuQWNjZXNzS2V5SWQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGF3c0NyZWRzLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgICAgIHRva2VuOiBhd3NDcmVkcy5Ub2tlbixcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkRlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIgPSBEZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyO1xuX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0SW1kc1YyU2Vzc2lvblRva2VuID0gXG4vKipcbiAqIEBwYXJhbSB0cmFuc3BvcnRlciBUaGUgdHJhbnNwb3J0ZXIgdG8gdXNlIGZvciByZXF1ZXN0cy5cbiAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSU1EU3YyIFNlc3Npb24gVG9rZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2dldEltZHNWMlNlc3Npb25Ub2tlbih0cmFuc3BvcnRlcikge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEdheGlvc09wdGlvbnMsXG4gICAgICAgIHVybDogdGhpcy5pbWRzVjJTZXNzaW9uVG9rZW5VcmwsXG4gICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICBoZWFkZXJzOiB7ICd4LWF3cy1lYzItbWV0YWRhdGEtdG9rZW4tdHRsLXNlY29uZHMnOiAnMzAwJyB9LFxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xufSwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0QXdzUm9sZU5hbWUgPSBcbi8qKlxuICogQHBhcmFtIGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgdXNlZCBpbiB0aGUgbWV0YWRhdGEgcmVxdWVzdC5cbiAqIEBwYXJhbSB0cmFuc3BvcnRlciBUaGUgdHJhbnNwb3J0ZXIgdG8gdXNlIGZvciByZXF1ZXN0cy5cbiAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXNzaWduZWQgcm9sZSB0byB0aGUgY3VycmVudFxuICogICBBV1MgVk0uIFRoaXMgaXMgbmVlZGVkIGZvciBjYWxsaW5nIHRoZSBzZWN1cml0eS1jcmVkZW50aWFscyBlbmRwb2ludC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0QXdzUm9sZU5hbWUoaGVhZGVycywgdHJhbnNwb3J0ZXIpIHtcbiAgICBpZiAoIXRoaXMuc2VjdXJpdHlDcmVkZW50aWFsc1VybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgQVdTIHJvbGUgbmFtZSBkdWUgdG8gbWlzc2luZyAnICtcbiAgICAgICAgICAgICdcIm9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UudXJsXCInKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgLi4udGhpcy5hZGRpdGlvbmFsR2F4aW9zT3B0aW9ucyxcbiAgICAgICAgdXJsOiB0aGlzLnNlY3VyaXR5Q3JlZGVudGlhbHNVcmwsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xufSwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmV0cmlldmVBd3NTZWN1cml0eUNyZWRlbnRpYWxzID0gXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGVtcG9yYXJ5IEFXUyBjcmVkZW50aWFscyBieSBjYWxsaW5nIHRoZSBzZWN1cml0eS1jcmVkZW50aWFsc1xuICogZW5kcG9pbnQgYXMgc3BlY2lmaWVkIGluIHRoZSBgY3JlZGVudGlhbF9zb3VyY2VgIG9iamVjdC5cbiAqIEBwYXJhbSByb2xlTmFtZSBUaGUgcm9sZSBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBWTS5cbiAqIEBwYXJhbSBoZWFkZXJzIFRoZSBoZWFkZXJzIHRvIGJlIHVzZWQgaW4gdGhlIG1ldGFkYXRhIHJlcXVlc3QuXG4gKiBAcGFyYW0gdHJhbnNwb3J0ZXIgVGhlIHRyYW5zcG9ydGVyIHRvIHVzZSBmb3IgcmVxdWVzdHMuXG4gKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRlbXBvcmFyeSBBV1MgY3JlZGVudGlhbHNcbiAqICAgbmVlZGVkIGZvciBjcmVhdGluZyB0aGUgR2V0Q2FsbGVySWRlbnRpdHkgc2lnbmVkIHJlcXVlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3JldHJpZXZlQXdzU2VjdXJpdHlDcmVkZW50aWFscyhyb2xlTmFtZSwgaGVhZGVycywgdHJhbnNwb3J0ZXIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICAuLi50aGlzLmFkZGl0aW9uYWxHYXhpb3NPcHRpb25zLFxuICAgICAgICB1cmw6IGAke3RoaXMuc2VjdXJpdHlDcmVkZW50aWFsc1VybH0vJHtyb2xlTmFtZX1gLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn0sIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3JlZ2lvbkZyb21FbnZfZ2V0ID0gZnVuY3Rpb24gX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmVnaW9uRnJvbUVudl9nZXQoKSB7XG4gICAgLy8gVGhlIEFXUyByZWdpb24gY2FuIGJlIHByb3ZpZGVkIHRocm91Z2ggQVdTX1JFR0lPTiBvciBBV1NfREVGQVVMVF9SRUdJT04uXG4gICAgLy8gT25seSBvbmUgaXMgcmVxdWlyZWQuXG4gICAgcmV0dXJuIChwcm9jZXNzLmVudlsnQVdTX1JFR0lPTiddIHx8IHByb2Nlc3MuZW52WydBV1NfREVGQVVMVF9SRUdJT04nXSB8fCBudWxsKTtcbn0sIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3NlY3VyaXR5Q3JlZGVudGlhbHNGcm9tRW52X2dldCA9IGZ1bmN0aW9uIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3NlY3VyaXR5Q3JlZGVudGlhbHNGcm9tRW52X2dldCgpIHtcbiAgICAvLyBCb3RoIEFXU19BQ0NFU1NfS0VZX0lEIGFuZCBBV1NfU0VDUkVUX0FDQ0VTU19LRVkgYXJlIHJlcXVpcmVkLlxuICAgIGlmIChwcm9jZXNzLmVudlsnQVdTX0FDQ0VTU19LRVlfSUQnXSAmJlxuICAgICAgICBwcm9jZXNzLmVudlsnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJ10pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiBwcm9jZXNzLmVudlsnQVdTX0FDQ0VTU19LRVlfSUQnXSxcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogcHJvY2Vzcy5lbnZbJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSddLFxuICAgICAgICAgICAgdG9rZW46IHByb2Nlc3MuZW52WydBV1NfU0VTU0lPTl9UT0tFTiddLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfYSwgX0F3c0NsaWVudF9ERUZBVUxUX0FXU19SRUdJT05BTF9DUkVERU5USUFMX1ZFUklGSUNBVElPTl9VUkw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF3c0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGF3c3JlcXVlc3RzaWduZXJfMSA9IHJlcXVpcmUoXCIuL2F3c3JlcXVlc3RzaWduZXJcIik7XG5jb25zdCBiYXNlZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2Jhc2VleHRlcm5hbGNsaWVudFwiKTtcbmNvbnN0IGRlZmF1bHRhd3NzZWN1cml0eWNyZWRlbnRpYWxzc3VwcGxpZXJfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRhd3NzZWN1cml0eWNyZWRlbnRpYWxzc3VwcGxpZXJcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbi8qKlxuICogQVdTIGV4dGVybmFsIGFjY291bnQgY2xpZW50LiBUaGlzIGlzIHVzZWQgZm9yIEFXUyB3b3JrbG9hZHMsIHdoZXJlXG4gKiBBV1MgU1RTIEdldENhbGxlcklkZW50aXR5IHNlcmlhbGl6ZWQgc2lnbmVkIHJlcXVlc3RzIGFyZSBleGNoYW5nZWQgZm9yXG4gKiBHQ1AgYWNjZXNzIHRva2VuLlxuICovXG5jbGFzcyBBd3NDbGllbnQgZXh0ZW5kcyBiYXNlZXh0ZXJuYWxjbGllbnRfMS5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYW4gQXdzQ2xpZW50IGluc3RhbmNlIHVzaW5nIHRoZSBwcm92aWRlZCBKU09OXG4gICAgICogb2JqZWN0IGxvYWRlZCBmcm9tIGFuIGV4dGVybmFsIGFjY291bnQgY3JlZGVudGlhbHMgZmlsZS5cbiAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGNyZWRlbnRpYWwgaXMgbm90IGEgdmFsaWQgQVdTIGNyZWRlbnRpYWwuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGV4dGVybmFsIGFjY291bnQgb3B0aW9ucyBvYmplY3QgdHlwaWNhbGx5IGxvYWRlZFxuICAgICAqICAgZnJvbSB0aGUgZXh0ZXJuYWwgYWNjb3VudCBKU09OIGNyZWRlbnRpYWwgZmlsZS5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbE9wdGlvbnMgKipERVBSRUNBVEVELCBhbGwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZVxuICAgICAqICAgYG9wdGlvbnNgIHBhcmFtZXRlci4qKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJlaGF2aW9yIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAgICAgKiAgIFRoZXNlIGN1cnJlbnRseSBjdXN0b21pemUgZXhwaXJhdGlvbiB0aHJlc2hvbGQgdGltZSBhbmQgd2hldGhlciB0byByZXRyeVxuICAgICAqICAgb24gNDAxLzQwMyBBUEkgcmVxdWVzdCBlcnJvcnMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBvcHRzID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbFNvdXJjZSA9IG9wdHMuZ2V0KCdjcmVkZW50aWFsX3NvdXJjZScpO1xuICAgICAgICBjb25zdCBhd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIgPSBvcHRzLmdldCgnYXdzX3NlY3VyaXR5X2NyZWRlbnRpYWxzX3N1cHBsaWVyJyk7XG4gICAgICAgIC8vIFZhbGlkYXRlIGNyZWRlbnRpYWwgc291cmNpbmcgY29uZmlndXJhdGlvbi5cbiAgICAgICAgaWYgKCFjcmVkZW50aWFsU291cmNlICYmICFhd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSBjcmVkZW50aWFsIHNvdXJjZSBvciBBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHMgc3VwcGxpZXIgbXVzdCBiZSBzcGVjaWZpZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNyZWRlbnRpYWxTb3VyY2UgJiYgYXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIG9mIGNyZWRlbnRpYWwgc291cmNlIG9yIEFXUyBzZWN1cml0eSBjcmVkZW50aWFscyBzdXBwbGllciBjYW4gYmUgc3BlY2lmaWVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyID0gYXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyO1xuICAgICAgICAgICAgdGhpcy5yZWdpb25hbENyZWRWZXJpZmljYXRpb25VcmwgPVxuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQoX2EsIF9hLCBcImZcIiwgX0F3c0NsaWVudF9ERUZBVUxUX0FXU19SRUdJT05BTF9DUkVERU5USUFMX1ZFUklGSUNBVElPTl9VUkwpO1xuICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFsU291cmNlVHlwZSA9ICdwcm9ncmFtbWF0aWMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3JlZGVudGlhbFNvdXJjZU9wdHMgPSAoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKGNyZWRlbnRpYWxTb3VyY2UpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudElkID0gY3JlZGVudGlhbFNvdXJjZU9wdHMuZ2V0KCdlbnZpcm9ubWVudF9pZCcpO1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGlmIHRoZSBBV1MgcmVnaW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAgICAgICAvLyBBV1NfUkVHSU9OIG9yIEFXU19ERUZBVUxUX1JFR0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICAgICAgICBjb25zdCByZWdpb25VcmwgPSBjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ3JlZ2lvbl91cmwnKTtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgb25seSByZXF1aXJlZCBpZiBBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHMgYXJlIG5vdCBhdmFpbGFibGUgaW5cbiAgICAgICAgICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICAgICAgICAgIGNvbnN0IHNlY3VyaXR5Q3JlZGVudGlhbHNVcmwgPSBjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ3VybCcpO1xuICAgICAgICAgICAgY29uc3QgaW1kc1YyU2Vzc2lvblRva2VuVXJsID0gY3JlZGVudGlhbFNvdXJjZU9wdHMuZ2V0KCdpbWRzdjJfc2Vzc2lvbl90b2tlbl91cmwnKTtcbiAgICAgICAgICAgIHRoaXMuYXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyID1cbiAgICAgICAgICAgICAgICBuZXcgZGVmYXVsdGF3c3NlY3VyaXR5Y3JlZGVudGlhbHNzdXBwbGllcl8xLkRlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIoe1xuICAgICAgICAgICAgICAgICAgICByZWdpb25Vcmw6IHJlZ2lvblVybCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlDcmVkZW50aWFsc1VybDogc2VjdXJpdHlDcmVkZW50aWFsc1VybCxcbiAgICAgICAgICAgICAgICAgICAgaW1kc1YyU2Vzc2lvblRva2VuVXJsOiBpbWRzVjJTZXNzaW9uVG9rZW5VcmwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbmFsQ3JlZFZlcmlmaWNhdGlvblVybCA9IGNyZWRlbnRpYWxTb3VyY2VPcHRzLmdldCgncmVnaW9uYWxfY3JlZF92ZXJpZmljYXRpb25fdXJsJyk7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlID0gJ2F3cyc7XG4gICAgICAgICAgICAvLyBEYXRhIHZhbGlkYXRvcnMuXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlRW52aXJvbm1lbnRJZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXdzUmVxdWVzdFNpZ25lciA9IG51bGw7XG4gICAgICAgIHRoaXMucmVnaW9uID0gJyc7XG4gICAgfVxuICAgIHZhbGlkYXRlRW52aXJvbm1lbnRJZCgpIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICBjb25zdCBtYXRjaCA9IChfYiA9IHRoaXMuZW52aXJvbm1lbnRJZCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm1hdGNoKC9eKGF3cykoXFxkKykkLyk7XG4gICAgICAgIGlmICghbWF0Y2ggfHwgIXRoaXMucmVnaW9uYWxDcmVkVmVyaWZpY2F0aW9uVXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIEFXUyBcImNyZWRlbnRpYWxfc291cmNlXCIgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJzZUludChtYXRjaFsyXSwgMTApICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGF3cyB2ZXJzaW9uIFwiJHttYXRjaFsyXX1cIiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGJ1aWxkLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGFuIGV4dGVybmFsIHN1YmplY3QgdG9rZW4gaXMgbmVlZGVkIHRvIGJlIGV4Y2hhbmdlZCBmb3IgYVxuICAgICAqIEdDUCBhY2Nlc3MgdG9rZW4gdmlhIEdDUCBTVFMgZW5kcG9pbnQuIFRoaXMgd2lsbCBjYWxsIHRoZVxuICAgICAqIHtAbGluayBBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJ9IHRvIHJldHJpZXZlIGFuIEFXUyByZWdpb24gYW5kIEFXU1xuICAgICAqIFNlY3VyaXR5IENyZWRlbnRpYWxzLCB0aGVuIHVzZSB0aGVtIHRvIGNyZWF0ZSBhIHNpZ25lZCBBV1MgU1RTIHJlcXVlc3QgdGhhdFxuICAgICAqIGNhbiBiZSBleGNoYW5nZWQgZm9yIGEgR0NQIGFjY2VzcyB0b2tlbi5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGV4dGVybmFsIHN1YmplY3QgdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgcmV0cmlldmVTdWJqZWN0VG9rZW4oKSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgQVdTIHJlcXVlc3Qgc2lnbmVyIGlmIG5vdCBhbHJlYWR5IGluaXRpYWxpemVkLlxuICAgICAgICBpZiAoIXRoaXMuYXdzUmVxdWVzdFNpZ25lcikge1xuICAgICAgICAgICAgdGhpcy5yZWdpb24gPSBhd2FpdCB0aGlzLmF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllci5nZXRBd3NSZWdpb24odGhpcy5zdXBwbGllckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5hd3NSZXF1ZXN0U2lnbmVyID0gbmV3IGF3c3JlcXVlc3RzaWduZXJfMS5Bd3NSZXF1ZXN0U2lnbmVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIuZ2V0QXdzU2VjdXJpdHlDcmVkZW50aWFscyh0aGlzLnN1cHBsaWVyQ29udGV4dCk7XG4gICAgICAgICAgICB9LCB0aGlzLnJlZ2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2VuZXJhdGUgc2lnbmVkIHJlcXVlc3QgdG8gQVdTIFNUUyBHZXRDYWxsZXJJZGVudGl0eSBBUEkuXG4gICAgICAgIC8vIFVzZSB0aGUgcmVxdWlyZWQgcmVnaW9uYWwgZW5kcG9pbnQuIE90aGVyd2lzZSwgdGhlIHJlcXVlc3Qgd2lsbCBmYWlsLlxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5hd3NSZXF1ZXN0U2lnbmVyLmdldFJlcXVlc3RPcHRpb25zKHtcbiAgICAgICAgICAgIC4uLl9hLlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdGhpcy5yZWdpb25hbENyZWRWZXJpZmljYXRpb25VcmwucmVwbGFjZSgne3JlZ2lvbn0nLCB0aGlzLnJlZ2lvbiksXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRoZSBHQ1AgU1RTIGVuZHBvaW50IGV4cGVjdHMgdGhlIGhlYWRlcnMgdG8gYmUgZm9ybWF0dGVkIGFzOlxuICAgICAgICAvLyBbXG4gICAgICAgIC8vICAge2tleTogJ3gtYW16LWRhdGUnLCB2YWx1ZTogJy4uLid9LFxuICAgICAgICAvLyAgIHtrZXk6ICdBdXRob3JpemF0aW9uJywgdmFsdWU6ICcuLi4nfSxcbiAgICAgICAgLy8gICAuLi5cbiAgICAgICAgLy8gXVxuICAgICAgICAvLyBBbmQgdGhlbiBzZXJpYWxpemVkIGFzOlxuICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAvLyAgIHVybDogJy4uLicsXG4gICAgICAgIC8vICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIC8vICAgaGVhZGVyczogW3trZXk6ICd4LWFtei1kYXRlJywgdmFsdWU6ICcuLi4nfSwgLi4uXVxuICAgICAgICAvLyB9KSlcbiAgICAgICAgY29uc3QgcmVmb3JtYXR0ZWRIZWFkZXIgPSBbXTtcbiAgICAgICAgY29uc3QgZXh0ZW5kZWRIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAvLyBUaGUgZnVsbCwgY2Fub25pY2FsIHJlc291cmNlIG5hbWUgb2YgdGhlIHdvcmtsb2FkIGlkZW50aXR5IHBvb2xcbiAgICAgICAgICAgIC8vIHByb3ZpZGVyLCB3aXRoIG9yIHdpdGhvdXQgdGhlIEhUVFBTIHByZWZpeC5cbiAgICAgICAgICAgIC8vIEluY2x1ZGluZyB0aGlzIGhlYWRlciBhcyBwYXJ0IG9mIHRoZSBzaWduYXR1cmUgaXMgcmVjb21tZW5kZWQgdG9cbiAgICAgICAgICAgIC8vIGVuc3VyZSBkYXRhIGludGVncml0eS5cbiAgICAgICAgICAgICd4LWdvb2ctY2xvdWQtdGFyZ2V0LXJlc291cmNlJzogdGhpcy5hdWRpZW5jZSxcbiAgICAgICAgfSwgb3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgICAgLy8gUmVmb3JtYXQgaGVhZGVyIHRvIEdDUCBTVFMgZXhwZWN0ZWQgZm9ybWF0LlxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBleHRlbmRlZEhlYWRlcnMpIHtcbiAgICAgICAgICAgIHJlZm9ybWF0dGVkSGVhZGVyLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXh0ZW5kZWRIZWFkZXJzW2tleV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXJpYWxpemUgdGhlIHJlZm9ybWF0dGVkIHNpZ25lZCByZXF1ZXN0LlxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyczogcmVmb3JtYXR0ZWRIZWFkZXIsXG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5leHBvcnRzLkF3c0NsaWVudCA9IEF3c0NsaWVudDtcbl9hID0gQXdzQ2xpZW50O1xuX0F3c0NsaWVudF9ERUZBVUxUX0FXU19SRUdJT05BTF9DUkVERU5USUFMX1ZFUklGSUNBVElPTl9VUkwgPSB7IHZhbHVlOiAnaHR0cHM6Ly9zdHMue3JlZ2lvbn0uYW1hem9uYXdzLmNvbT9BY3Rpb249R2V0Q2FsbGVySWRlbnRpdHkmVmVyc2lvbj0yMDExLTA2LTE1JyB9O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBBV1MgY2xpZW50IG5vIHZhbGlkYXRlcyB0aGUgRUMyIG1ldGFkYXRhIGFkZHJlc3MuXG4gKiovXG5Bd3NDbGllbnQuQVdTX0VDMl9NRVRBREFUQV9JUFY0X0FERFJFU1MgPSAnMTY5LjI1NC4xNjkuMjU0Jztcbi8qKlxuICogQGRlcHJlY2F0ZWQgQVdTIGNsaWVudCBubyB2YWxpZGF0ZXMgdGhlIEVDMiBtZXRhZGF0YSBhZGRyZXNzLlxuICoqL1xuQXdzQ2xpZW50LkFXU19FQzJfTUVUQURBVEFfSVBWNl9BRERSRVNTID0gJ2ZkMDA6ZWMyOjoyNTQnO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnZhbGlkU3ViamVjdFRva2VuRXJyb3IgPSBleHBvcnRzLkludmFsaWRNZXNzYWdlRmllbGRFcnJvciA9IGV4cG9ydHMuSW52YWxpZENvZGVGaWVsZEVycm9yID0gZXhwb3J0cy5JbnZhbGlkVG9rZW5UeXBlRmllbGRFcnJvciA9IGV4cG9ydHMuSW52YWxpZEV4cGlyYXRpb25UaW1lRmllbGRFcnJvciA9IGV4cG9ydHMuSW52YWxpZFN1Y2Nlc3NGaWVsZEVycm9yID0gZXhwb3J0cy5JbnZhbGlkVmVyc2lvbkZpZWxkRXJyb3IgPSBleHBvcnRzLkV4ZWN1dGFibGVSZXNwb25zZUVycm9yID0gZXhwb3J0cy5FeGVjdXRhYmxlUmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBTQU1MX1NVQkpFQ1RfVE9LRU5fVFlQRSA9ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6dG9rZW4tdHlwZTpzYW1sMic7XG5jb25zdCBPSURDX1NVQkpFQ1RfVE9LRU5fVFlQRTEgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6aWRfdG9rZW4nO1xuY29uc3QgT0lEQ19TVUJKRUNUX1RPS0VOX1RZUEUyID0gJ3VybjppZXRmOnBhcmFtczpvYXV0aDp0b2tlbi10eXBlOmp3dCc7XG4vKipcbiAqIERlZmluZXMgdGhlIHJlc3BvbnNlIG9mIGEgM3JkIHBhcnR5IGV4ZWN1dGFibGUgcnVuIGJ5IHRoZSBwbHVnZ2FibGUgYXV0aCBjbGllbnQuXG4gKi9cbmNsYXNzIEV4ZWN1dGFibGVSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFuIEV4ZWN1dGFibGVSZXNwb25zZSBpbnN0YW5jZSB1c2luZyB0aGUgcHJvdmlkZWQgSlNPTiBvYmplY3RcbiAgICAgKiBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlIGV4ZWN1dGFibGUuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlSnNvbiBSZXNwb25zZSBmcm9tIGEgM3JkIHBhcnR5IGV4ZWN1dGFibGUsIGxvYWRlZCBmcm9tIGFcbiAgICAgKiBydW4gb2YgdGhlIGV4ZWN1dGFibGUgb3IgYSBjYWNoZWQgb3V0cHV0IGZpbGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocmVzcG9uc2VKc29uKSB7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlcXVpcmVkIGZpZWxkcyBleGlzdCBpbiB0aGUganNvbiByZXNwb25zZS5cbiAgICAgICAgaWYgKCFyZXNwb25zZUpzb24udmVyc2lvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRWZXJzaW9uRmllbGRFcnJvcihcIkV4ZWN1dGFibGUgcmVzcG9uc2UgbXVzdCBjb250YWluIGEgJ3ZlcnNpb24nIGZpZWxkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2VKc29uLnN1Y2Nlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTdWNjZXNzRmllbGRFcnJvcihcIkV4ZWN1dGFibGUgcmVzcG9uc2UgbXVzdCBjb250YWluIGEgJ3N1Y2Nlc3MnIGZpZWxkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZlcnNpb24gPSByZXNwb25zZUpzb24udmVyc2lvbjtcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gcmVzcG9uc2VKc29uLnN1Y2Nlc3M7XG4gICAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkcyBmb3IgYSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAgICBpZiAodGhpcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gcmVzcG9uc2VKc29uLmV4cGlyYXRpb25fdGltZTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gcmVzcG9uc2VKc29uLnRva2VuX3R5cGU7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSB0b2tlbiB0eXBlIGZpZWxkLlxuICAgICAgICAgICAgaWYgKHRoaXMudG9rZW5UeXBlICE9PSBTQU1MX1NVQkpFQ1RfVE9LRU5fVFlQRSAmJlxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlICE9PSBPSURDX1NVQkpFQ1RfVE9LRU5fVFlQRTEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSAhPT0gT0lEQ19TVUJKRUNUX1RPS0VOX1RZUEUyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUb2tlblR5cGVGaWVsZEVycm9yKFwiRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAndG9rZW5fdHlwZScgZmllbGQgd2hlbiBzdWNjZXNzZnVsIFwiICtcbiAgICAgICAgICAgICAgICAgICAgYGFuZCBpdCBtdXN0IGJlIG9uZSBvZiAke09JRENfU1VCSkVDVF9UT0tFTl9UWVBFMX0sICR7T0lEQ19TVUJKRUNUX1RPS0VOX1RZUEUyfSwgb3IgJHtTQU1MX1NVQkpFQ1RfVE9LRU5fVFlQRX0uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBzdWJqZWN0IHRva2VuLlxuICAgICAgICAgICAgaWYgKHRoaXMudG9rZW5UeXBlID09PSBTQU1MX1NVQkpFQ1RfVE9LRU5fVFlQRSkge1xuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VKc29uLnNhbWxfcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTdWJqZWN0VG9rZW5FcnJvcihgRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAnc2FtbF9yZXNwb25zZScgZmllbGQgd2hlbiB0b2tlbl90eXBlPSR7U0FNTF9TVUJKRUNUX1RPS0VOX1RZUEV9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN1YmplY3RUb2tlbiA9IHJlc3BvbnNlSnNvbi5zYW1sX3Jlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZUpzb24uaWRfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTdWJqZWN0VG9rZW5FcnJvcihcIkV4ZWN1dGFibGUgcmVzcG9uc2UgbXVzdCBjb250YWluIGEgJ2lkX3Rva2VuJyBmaWVsZCB3aGVuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGB0b2tlbl90eXBlPSR7T0lEQ19TVUJKRUNUX1RPS0VOX1RZUEUxfSBvciAke09JRENfU1VCSkVDVF9UT0tFTl9UWVBFMn0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdFRva2VuID0gcmVzcG9uc2VKc29uLmlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQm90aCBjb2RlIGFuZCBtZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgZm9yIHVuc3VjY2Vzc2Z1bCByZXNwb25zZXMuXG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlSnNvbi5jb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb2RlRmllbGRFcnJvcihcIkV4ZWN1dGFibGUgcmVzcG9uc2UgbXVzdCBjb250YWluIGEgJ2NvZGUnIGZpZWxkIHdoZW4gdW5zdWNjZXNzZnVsLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VKc29uLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE1lc3NhZ2VGaWVsZEVycm9yKFwiRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAnbWVzc2FnZScgZmllbGQgd2hlbiB1bnN1Y2Nlc3NmdWwuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lcnJvckNvZGUgPSByZXNwb25zZUpzb24uY29kZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gcmVzcG9uc2VKc29uLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybiBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSByZXNwb25zZSBoYXMgYSB2YWxpZCB0b2tlbi4gUmV0dXJuc1xuICAgICAqIHRydWUgd2hlbiB0aGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWwgYW5kIHRoZSB0b2tlbiBpcyBub3QgZXhwaXJlZC5cbiAgICAgKi9cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNFeHBpcmVkKCkgJiYgdGhpcy5zdWNjZXNzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHJlc3BvbnNlIGlzIGV4cGlyZWQuIFJldHVybnMgdHJ1ZSBpZiB0aGVcbiAgICAgKiBwcm92aWRlZCB0aW1lb3V0IGhhcyBwYXNzZWQuXG4gICAgICovXG4gICAgaXNFeHBpcmVkKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZXhwaXJhdGlvblRpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uVGltZSA8IE1hdGgucm91bmQoRGF0ZS5ub3coKSAvIDEwMDApKTtcbiAgICB9XG59XG5leHBvcnRzLkV4ZWN1dGFibGVSZXNwb25zZSA9IEV4ZWN1dGFibGVSZXNwb25zZTtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIGJ5IHRoZSBFeGVjdXRhYmxlUmVzcG9uc2UgY2xhc3MuXG4gKi9cbmNsYXNzIEV4ZWN1dGFibGVSZXNwb25zZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5FeGVjdXRhYmxlUmVzcG9uc2VFcnJvciA9IEV4ZWN1dGFibGVSZXNwb25zZUVycm9yO1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiB0aGUgJ3ZlcnNpb24nIGZpZWxkIGluIGFuIGV4ZWN1dGFibGUgcmVzcG9uc2UgaXMgbWlzc2luZyBvciBpbnZhbGlkLlxuICovXG5jbGFzcyBJbnZhbGlkVmVyc2lvbkZpZWxkRXJyb3IgZXh0ZW5kcyBFeGVjdXRhYmxlUmVzcG9uc2VFcnJvciB7XG59XG5leHBvcnRzLkludmFsaWRWZXJzaW9uRmllbGRFcnJvciA9IEludmFsaWRWZXJzaW9uRmllbGRFcnJvcjtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gdGhlICdzdWNjZXNzJyBmaWVsZCBpbiBhbiBleGVjdXRhYmxlIHJlc3BvbnNlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5cbiAqL1xuY2xhc3MgSW52YWxpZFN1Y2Nlc3NGaWVsZEVycm9yIGV4dGVuZHMgRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3Ige1xufVxuZXhwb3J0cy5JbnZhbGlkU3VjY2Vzc0ZpZWxkRXJyb3IgPSBJbnZhbGlkU3VjY2Vzc0ZpZWxkRXJyb3I7XG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHRoZSAnZXhwaXJhdGlvbl90aW1lJyBmaWVsZCBpbiBhbiBleGVjdXRhYmxlIHJlc3BvbnNlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5cbiAqL1xuY2xhc3MgSW52YWxpZEV4cGlyYXRpb25UaW1lRmllbGRFcnJvciBleHRlbmRzIEV4ZWN1dGFibGVSZXNwb25zZUVycm9yIHtcbn1cbmV4cG9ydHMuSW52YWxpZEV4cGlyYXRpb25UaW1lRmllbGRFcnJvciA9IEludmFsaWRFeHBpcmF0aW9uVGltZUZpZWxkRXJyb3I7XG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHRoZSAndG9rZW5fdHlwZScgZmllbGQgaW4gYW4gZXhlY3V0YWJsZSByZXNwb25zZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuXG4gKi9cbmNsYXNzIEludmFsaWRUb2tlblR5cGVGaWVsZEVycm9yIGV4dGVuZHMgRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3Ige1xufVxuZXhwb3J0cy5JbnZhbGlkVG9rZW5UeXBlRmllbGRFcnJvciA9IEludmFsaWRUb2tlblR5cGVGaWVsZEVycm9yO1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiB0aGUgJ2NvZGUnIGZpZWxkIGluIGFuIGV4ZWN1dGFibGUgcmVzcG9uc2UgaXMgbWlzc2luZyBvciBpbnZhbGlkLlxuICovXG5jbGFzcyBJbnZhbGlkQ29kZUZpZWxkRXJyb3IgZXh0ZW5kcyBFeGVjdXRhYmxlUmVzcG9uc2VFcnJvciB7XG59XG5leHBvcnRzLkludmFsaWRDb2RlRmllbGRFcnJvciA9IEludmFsaWRDb2RlRmllbGRFcnJvcjtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gdGhlICdtZXNzYWdlJyBmaWVsZCBpbiBhbiBleGVjdXRhYmxlIHJlc3BvbnNlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5cbiAqL1xuY2xhc3MgSW52YWxpZE1lc3NhZ2VGaWVsZEVycm9yIGV4dGVuZHMgRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3Ige1xufVxuZXhwb3J0cy5JbnZhbGlkTWVzc2FnZUZpZWxkRXJyb3IgPSBJbnZhbGlkTWVzc2FnZUZpZWxkRXJyb3I7XG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHRoZSBzdWJqZWN0IHRva2VuIGluIGFuIGV4ZWN1dGFibGUgcmVzcG9uc2UgaXMgbWlzc2luZyBvciBpbnZhbGlkLlxuICovXG5jbGFzcyBJbnZhbGlkU3ViamVjdFRva2VuRXJyb3IgZXh0ZW5kcyBFeGVjdXRhYmxlUmVzcG9uc2VFcnJvciB7XG59XG5leHBvcnRzLkludmFsaWRTdWJqZWN0VG9rZW5FcnJvciA9IEludmFsaWRTdWJqZWN0VG9rZW5FcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGx1Z2dhYmxlQXV0aEhhbmRsZXIgPSB2b2lkIDA7XG5jb25zdCBwbHVnZ2FibGVfYXV0aF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL3BsdWdnYWJsZS1hdXRoLWNsaWVudFwiKTtcbmNvbnN0IGV4ZWN1dGFibGVfcmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL2V4ZWN1dGFibGUtcmVzcG9uc2VcIik7XG5jb25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuLyoqXG4gKiBBIGhhbmRsZXIgdXNlZCB0byByZXRyaWV2ZSAzcmQgcGFydHkgdG9rZW4gcmVzcG9uc2VzIGZyb20gdXNlciBkZWZpbmVkXG4gKiBleGVjdXRhYmxlcyBhbmQgY2FjaGVkIGZpbGUgb3V0cHV0IGZvciB0aGUgUGx1Z2dhYmxlQXV0aENsaWVudCBjbGFzcy5cbiAqL1xuY2xhc3MgUGx1Z2dhYmxlQXV0aEhhbmRsZXIge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhIFBsdWdnYWJsZUF1dGhIYW5kbGVyIGluc3RhbmNlIHVzaW5nIHRoZSBwcm92aWRlZFxuICAgICAqIFBsdWdnYWJsZUF1dGhIYW5kbGVyT3B0aW9ucyBvYmplY3QuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29tbWFuZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb21tYW5kIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbWFuZENvbXBvbmVudHMgPSBQbHVnZ2FibGVBdXRoSGFuZGxlci5wYXJzZUNvbW1hbmQob3B0aW9ucy5jb21tYW5kKTtcbiAgICAgICAgdGhpcy50aW1lb3V0TWlsbGlzID0gb3B0aW9ucy50aW1lb3V0TWlsbGlzO1xuICAgICAgICBpZiAoIXRoaXMudGltZW91dE1pbGxpcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0aW1lb3V0TWlsbGlzIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0cHV0RmlsZSA9IG9wdGlvbnMub3V0cHV0RmlsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbHMgdXNlciBwcm92aWRlZCBleGVjdXRhYmxlIHRvIGdldCBhIDNyZCBwYXJ0eSBzdWJqZWN0IHRva2VuIGFuZFxuICAgICAqIHJldHVybnMgdGhlIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSBlbnZNYXAgYSBNYXAgb2YgYWRkaXRpb25hbCBFbnZpcm9ubWVudCBWYXJpYWJsZXMgcmVxdWlyZWQgZm9yXG4gICAgICogICB0aGUgZXhlY3V0YWJsZS5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGV4ZWN1dGFibGUgcmVzcG9uc2UuXG4gICAgICovXG4gICAgcmV0cmlldmVSZXNwb25zZUZyb21FeGVjdXRhYmxlKGVudk1hcCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gU3Bhd24gcHJvY2VzcyB0byBydW4gZXhlY3V0YWJsZSB1c2luZyBhZGRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkUHJvY2Vzcy5zcGF3bih0aGlzLmNvbW1hbmRDb21wb25lbnRzWzBdLCB0aGlzLmNvbW1hbmRDb21wb25lbnRzLnNsaWNlKDEpLCB7XG4gICAgICAgICAgICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5PYmplY3QuZnJvbUVudHJpZXMoZW52TWFwKSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgICAgICAgICAvLyBBcHBlbmQgc3Rkb3V0IHRvIG91dHB1dCBhcyBleGVjdXRhYmxlIHJ1bnMuXG4gICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBcHBlbmQgc3RkZXJyIGFzIGV4ZWN1dGFibGUgcnVucy5cbiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBTZXQgdXAgYSB0aW1lb3V0IHRvIGVuZCB0aGUgY2hpbGQgcHJvY2VzcyBhbmQgdGhyb3cgYW4gZXJyb3IuXG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gS2lsbCBjaGlsZCBwcm9jZXNzIGFuZCByZW1vdmUgbGlzdGVuZXJzIHNvICdjbG9zZScgZXZlbnQgZG9lc24ndCBnZXRcbiAgICAgICAgICAgICAgICAvLyByZWFkIGFmdGVyIGNoaWxkIHByb2Nlc3MgaXMga2lsbGVkLlxuICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgIGNoaWxkLmtpbGwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignVGhlIGV4ZWN1dGFibGUgZmFpbGVkIHRvIGZpbmlzaCB3aXRoaW4gdGhlIHRpbWVvdXQgc3BlY2lmaWVkLicpKTtcbiAgICAgICAgICAgIH0sIHRoaXMudGltZW91dE1pbGxpcyk7XG4gICAgICAgICAgICBjaGlsZC5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENhbmNlbCB0aW1lb3V0IGlmIGV4ZWN1dGFibGUgY2xvc2VzIGJlZm9yZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBleGVjdXRhYmxlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRyeSB0byByZXR1cm4gdGhlIHBhcnNlZCByZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlSnNvbiA9IEpTT04ucGFyc2Uob3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gbmV3IGV4ZWN1dGFibGVfcmVzcG9uc2VfMS5FeGVjdXRhYmxlUmVzcG9uc2UocmVzcG9uc2VKc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGV4ZWN1dGFibGVfcmVzcG9uc2VfMS5FeGVjdXRhYmxlUmVzcG9uc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhlY3V0YWJsZV9yZXNwb25zZV8xLkV4ZWN1dGFibGVSZXNwb25zZUVycm9yKGBUaGUgZXhlY3V0YWJsZSByZXR1cm5lZCBhbiBpbnZhbGlkIHJlc3BvbnNlOiAke291dHB1dH1gKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IHBsdWdnYWJsZV9hdXRoX2NsaWVudF8xLkV4ZWN1dGFibGVFcnJvcihvdXRwdXQsIGNvZGUudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHVzZXIgcHJvdmlkZWQgb3V0cHV0IGZpbGUgZm9yIHJlc3BvbnNlIGZyb20gcHJldmlvdXMgcnVuIG9mXG4gICAgICogZXhlY3V0YWJsZSBhbmQgcmV0dXJuIHRoZSByZXNwb25zZSBpZiBpdCBleGlzdHMsIGlzIGZvcm1hdHRlZCBjb3JyZWN0bHksIGFuZCBpcyBub3QgZXhwaXJlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZXRyaWV2ZUNhY2hlZFJlc3BvbnNlKCkge1xuICAgICAgICBpZiAoIXRoaXMub3V0cHV0RmlsZSB8fCB0aGlzLm91dHB1dEZpbGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlUGF0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbGVQYXRoID0gYXdhaXQgZnMucHJvbWlzZXMucmVhbHBhdGgodGhpcy5vdXRwdXRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIElmIGZpbGUgcGF0aCBjYW5ub3QgYmUgcmVzb2x2ZWQsIHJldHVybiB1bmRlZmluZWQuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGF3YWl0IGZzLnByb21pc2VzLmxzdGF0KGZpbGVQYXRoKSkuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgIC8vIElmIHBhdGggZG9lcyBub3QgbGVhZCB0byBmaWxlLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZVN0cmluZyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoLCB7XG4gICAgICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlU3RyaW5nID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VKc29uID0gSlNPTi5wYXJzZShyZXNwb25zZVN0cmluZyk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IG5ldyBleGVjdXRhYmxlX3Jlc3BvbnNlXzEuRXhlY3V0YWJsZVJlc3BvbnNlKHJlc3BvbnNlSnNvbik7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiByZXNwb25zZSBpcyBzdWNjZXNzZnVsIGFuZCB1bmV4cGlyZWQuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBleGVjdXRhYmxlX3Jlc3BvbnNlXzEuRXhlY3V0YWJsZVJlc3BvbnNlKHJlc3BvbnNlSnNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZXhlY3V0YWJsZV9yZXNwb25zZV8xLkV4ZWN1dGFibGVSZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXhlY3V0YWJsZV9yZXNwb25zZV8xLkV4ZWN1dGFibGVSZXNwb25zZUVycm9yKGBUaGUgb3V0cHV0IGZpbGUgY29udGFpbmVkIGFuIGludmFsaWQgcmVzcG9uc2U6ICR7cmVzcG9uc2VTdHJpbmd9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2VzIGdpdmVuIGNvbW1hbmQgc3RyaW5nIGludG8gY29tcG9uZW50IGFycmF5LCBzcGxpdHRpbmcgb24gc3BhY2VzIHVubGVzc1xuICAgICAqIHNwYWNlcyBhcmUgYmV0d2VlbiBxdW90YXRpb24gbWFya3MuXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICAgIC8vIFNwbGl0IHRoZSBjb21tYW5kIGludG8gY29tcG9uZW50cyBieSBzcGxpdHRpbmcgb24gc3BhY2VzLFxuICAgICAgICAvLyB1bmxlc3Mgc3BhY2VzIGFyZSBjb250YWluZWQgaW4gcXVvdGF0aW9uIG1hcmtzLlxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29tbWFuZC5tYXRjaCgvKD86W15cXHNcIl0rfFwiW15cIl0qXCIpKy9nKTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVkIGNvbW1hbmQ6IFwiJHtjb21tYW5kfVwiIGNvdWxkIG5vdCBiZSBwYXJzZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIHF1b3RhdGlvbiBtYXJrcyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNvbXBvbmVudCBpZiB0aGV5IGFyZSBwcmVzZW50LlxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2ldWzBdID09PSAnXCInICYmIGNvbXBvbmVudHNbaV0uc2xpY2UoLTEpID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50c1tpXSA9IGNvbXBvbmVudHNbaV0uc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbmV4cG9ydHMuUGx1Z2dhYmxlQXV0aEhhbmRsZXIgPSBQbHVnZ2FibGVBdXRoSGFuZGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGx1Z2dhYmxlQXV0aENsaWVudCA9IGV4cG9ydHMuRXhlY3V0YWJsZUVycm9yID0gdm9pZCAwO1xuY29uc3QgYmFzZWV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9iYXNlZXh0ZXJuYWxjbGllbnRcIik7XG5jb25zdCBleGVjdXRhYmxlX3Jlc3BvbnNlXzEgPSByZXF1aXJlKFwiLi9leGVjdXRhYmxlLXJlc3BvbnNlXCIpO1xuY29uc3QgcGx1Z2dhYmxlX2F1dGhfaGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcGx1Z2dhYmxlLWF1dGgtaGFuZGxlclwiKTtcbi8qKlxuICogRXJyb3IgdGhyb3duIGZyb20gdGhlIGV4ZWN1dGFibGUgcnVuIGJ5IFBsdWdnYWJsZUF1dGhDbGllbnQuXG4gKi9cbmNsYXNzIEV4ZWN1dGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlKSB7XG4gICAgICAgIHN1cGVyKGBUaGUgZXhlY3V0YWJsZSBmYWlsZWQgd2l0aCBleGl0IGNvZGU6ICR7Y29kZX0gYW5kIGVycm9yIG1lc3NhZ2U6ICR7bWVzc2FnZX0uYCk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5FeGVjdXRhYmxlRXJyb3IgPSBFeGVjdXRhYmxlRXJyb3I7XG4vKipcbiAqIFRoZSBkZWZhdWx0IGV4ZWN1dGFibGUgdGltZW91dCB3aGVuIG5vbmUgaXMgcHJvdmlkZWQsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuY29uc3QgREVGQVVMVF9FWEVDVVRBQkxFX1RJTUVPVVRfTUlMTElTID0gMzAgKiAxMDAwO1xuLyoqXG4gKiBUaGUgbWluaW11bSBhbGxvd2VkIGV4ZWN1dGFibGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmNvbnN0IE1JTklNVU1fRVhFQ1VUQUJMRV9USU1FT1VUX01JTExJUyA9IDUgKiAxMDAwO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBhbGxvd2VkIGV4ZWN1dGFibGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmNvbnN0IE1BWElNVU1fRVhFQ1VUQUJMRV9USU1FT1VUX01JTExJUyA9IDEyMCAqIDEwMDA7XG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBjaGVjayB0byBzZWUgaWYgZXhlY3V0YWJsZSBjYW4gYmUgcnVuLlxuICogVmFsdWUgbXVzdCBiZSBzZXQgdG8gJzEnIGZvciB0aGUgZXhlY3V0YWJsZSB0byBydW4uXG4gKi9cbmNvbnN0IEdPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX0FMTE9XX0VYRUNVVEFCTEVTID0gJ0dPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX0FMTE9XX0VYRUNVVEFCTEVTJztcbi8qKlxuICogVGhlIG1heGltdW0gY3VycmVudGx5IHN1cHBvcnRlZCBleGVjdXRhYmxlIHZlcnNpb24uXG4gKi9cbmNvbnN0IE1BWElNVU1fRVhFQ1VUQUJMRV9WRVJTSU9OID0gMTtcbi8qKlxuICogUGx1Z2dhYmxlQXV0aENsaWVudCBlbmFibGVzIHRoZSBleGNoYW5nZSBvZiB3b3JrbG9hZCBpZGVudGl0eSBwb29sIGV4dGVybmFsIGNyZWRlbnRpYWxzIGZvclxuICogR29vZ2xlIGFjY2VzcyB0b2tlbnMgYnkgcmV0cmlldmluZyAzcmQgcGFydHkgdG9rZW5zIHRocm91Z2ggYSB1c2VyIHN1cHBsaWVkIGV4ZWN1dGFibGUuIFRoZXNlXG4gKiBzY3JpcHRzL2V4ZWN1dGFibGVzIGFyZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBHb29nbGUgQ2xvdWQgQXV0aCBsaWJyYXJpZXMuIFRoZXNlXG4gKiBjcmVkZW50aWFscyBwbHVnIGludG8gQURDIGFuZCB3aWxsIGNhbGwgdGhlIHNwZWNpZmllZCBleGVjdXRhYmxlIHRvIHJldHJpZXZlIHRoZSAzcmQgcGFydHkgdG9rZW5cbiAqIHRvIGJlIGV4Y2hhbmdlZCBmb3IgYSBHb29nbGUgYWNjZXNzIHRva2VuLlxuICpcbiAqIDxwPlRvIHVzZSB0aGVzZSBjcmVkZW50aWFscywgdGhlIEdPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX0FMTE9XX0VYRUNVVEFCTEVTIGVudmlyb25tZW50IHZhcmlhYmxlXG4gKiBtdXN0IGJlIHNldCB0byAnMScuIFRoaXMgaXMgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gKlxuICogPHA+Qm90aCBPSURDIGFuZCBTQU1MIGFyZSBzdXBwb3J0ZWQuIFRoZSBleGVjdXRhYmxlIG11c3QgYWRoZXJlIHRvIGEgc3BlY2lmaWMgcmVzcG9uc2UgZm9ybWF0XG4gKiBkZWZpbmVkIGJlbG93LlxuICpcbiAqIDxwPlRoZSBleGVjdXRhYmxlIG11c3QgcHJpbnQgb3V0IHRoZSAzcmQgcGFydHkgdG9rZW4gdG8gU1RET1VUIGluIEpTT04gZm9ybWF0LiBXaGVuIGFuXG4gKiBvdXRwdXRfZmlsZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbiwgdGhlIGV4ZWN1dGFibGUgbXVzdCBhbHNvIGhhbmRsZSB3cml0aW5nIHRoZVxuICogSlNPTiByZXNwb25zZSB0byB0aGlzIGZpbGUuXG4gKlxuICogPHByZT5cbiAqIE9JREMgcmVzcG9uc2Ugc2FtcGxlOlxuICoge1xuICogICBcInZlcnNpb25cIjogMSxcbiAqICAgXCJzdWNjZXNzXCI6IHRydWUsXG4gKiAgIFwidG9rZW5fdHlwZVwiOiBcInVybjppZXRmOnBhcmFtczpvYXV0aDp0b2tlbi10eXBlOmlkX3Rva2VuXCIsXG4gKiAgIFwiaWRfdG9rZW5cIjogXCJIRUFERVIuUEFZTE9BRC5TSUdOQVRVUkVcIixcbiAqICAgXCJleHBpcmF0aW9uX3RpbWVcIjogMTYyMDQzMzM0MVxuICogfVxuICpcbiAqIFNBTUwyIHJlc3BvbnNlIHNhbXBsZTpcbiAqIHtcbiAqICAgXCJ2ZXJzaW9uXCI6IDEsXG4gKiAgIFwic3VjY2Vzc1wiOiB0cnVlLFxuICogICBcInRva2VuX3R5cGVcIjogXCJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6dG9rZW4tdHlwZTpzYW1sMlwiLFxuICogICBcInNhbWxfcmVzcG9uc2VcIjogXCIuLi5cIixcbiAqICAgXCJleHBpcmF0aW9uX3RpbWVcIjogMTYyMDQzMzM0MVxuICogfVxuICpcbiAqIEVycm9yIHJlc3BvbnNlIHNhbXBsZTpcbiAqIHtcbiAqICAgXCJ2ZXJzaW9uXCI6IDEsXG4gKiAgIFwic3VjY2Vzc1wiOiBmYWxzZSxcbiAqICAgXCJjb2RlXCI6IFwiNDAxXCIsXG4gKiAgIFwibWVzc2FnZVwiOiBcIkVycm9yIG1lc3NhZ2UuXCJcbiAqIH1cbiAqIDwvcHJlPlxuICpcbiAqIDxwPlRoZSBcImV4cGlyYXRpb25fdGltZVwiIGZpZWxkIGluIHRoZSBKU09OIHJlc3BvbnNlIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHN1Y2Nlc3NmdWxcbiAqIHJlc3BvbnNlcyB3aGVuIGFuIG91dHB1dCBmaWxlIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvblxuICpcbiAqIDxwPlRoZSBhdXRoIGxpYnJhcmllcyB3aWxsIHBvcHVsYXRlIGNlcnRhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZVxuICogZXhlY3V0YWJsZSwgc3VjaCBhczogR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQVVESUVOQ0UsIEdPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX1RPS0VOX1RZUEUsXG4gKiBHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9JTlRFUkFDVElWRSwgR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfSU1QRVJTT05BVEVEX0VNQUlMLCBhbmRcbiAqIEdPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX09VVFBVVF9GSUxFLlxuICpcbiAqIDxwPlBsZWFzZSBzZWUgdGhpcyByZXBvc2l0b3JpZXMgUkVBRE1FIGZvciBhIGNvbXBsZXRlIGV4ZWN1dGFibGUgcmVxdWVzdC9yZXNwb25zZSBzcGVjaWZpY2F0aW9uLlxuICovXG5jbGFzcyBQbHVnZ2FibGVBdXRoQ2xpZW50IGV4dGVuZHMgYmFzZWV4dGVybmFsY2xpZW50XzEuQmFzZUV4dGVybmFsQWNjb3VudENsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGEgUGx1Z2dhYmxlQXV0aENsaWVudCBpbnN0YW5jZSB1c2luZyB0aGUgcHJvdmlkZWQgSlNPTlxuICAgICAqIG9iamVjdCBsb2FkZWQgZnJvbSBhbiBleHRlcm5hbCBhY2NvdW50IGNyZWRlbnRpYWxzIGZpbGUuXG4gICAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIHRoZSBjcmVkZW50aWFsIGlzIG5vdCBhIHZhbGlkIHBsdWdnYWJsZSBhdXRoIGNyZWRlbnRpYWwuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGV4dGVybmFsIGFjY291bnQgb3B0aW9ucyBvYmplY3QgdHlwaWNhbGx5IGxvYWRlZCBmcm9tXG4gICAgICogICB0aGUgZXh0ZXJuYWwgYWNjb3VudCBKU09OIGNyZWRlbnRpYWwgZmlsZS5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbE9wdGlvbnMgKipERVBSRUNBVEVELCBhbGwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZVxuICAgICAqICAgYG9wdGlvbnNgIHBhcmFtZXRlci4qKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJlaGF2aW9yIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAgICAgKiAgIFRoZXNlIGN1cnJlbnRseSBjdXN0b21pemUgZXhwaXJhdGlvbiB0aHJlc2hvbGQgdGltZSBhbmQgd2hldGhlciB0byByZXRyeVxuICAgICAqICAgb24gNDAxLzQwMyBBUEkgcmVxdWVzdCBlcnJvcnMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UuZXhlY3V0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2YWxpZCBQbHVnZ2FibGUgQXV0aCBcImNyZWRlbnRpYWxfc291cmNlXCIgcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tYW5kID0gb3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZS5leGVjdXRhYmxlLmNvbW1hbmQ7XG4gICAgICAgIGlmICghdGhpcy5jb21tYW5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIFBsdWdnYWJsZSBBdXRoIFwiY3JlZGVudGlhbF9zb3VyY2VcIiBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJvdmlkZWQgdGltZW91dCBleGlzdHMgYW5kIGlmIGl0IGlzIHZhbGlkLlxuICAgICAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZS5leGVjdXRhYmxlLnRpbWVvdXRfbWlsbGlzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dE1pbGxpcyA9IERFRkFVTFRfRVhFQ1VUQUJMRV9USU1FT1VUX01JTExJUztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dE1pbGxpcyA9IG9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UuZXhlY3V0YWJsZS50aW1lb3V0X21pbGxpcztcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRNaWxsaXMgPCBNSU5JTVVNX0VYRUNVVEFCTEVfVElNRU9VVF9NSUxMSVMgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRNaWxsaXMgPiBNQVhJTVVNX0VYRUNVVEFCTEVfVElNRU9VVF9NSUxMSVMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuICR7TUlOSU1VTV9FWEVDVVRBQkxFX1RJTUVPVVRfTUlMTElTfSBhbmQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAke01BWElNVU1fRVhFQ1VUQUJMRV9USU1FT1VUX01JTExJU30gbWlsbGlzZWNvbmRzLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0cHV0RmlsZSA9IG9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UuZXhlY3V0YWJsZS5vdXRwdXRfZmlsZTtcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gbmV3IHBsdWdnYWJsZV9hdXRoX2hhbmRsZXJfMS5QbHVnZ2FibGVBdXRoSGFuZGxlcih7XG4gICAgICAgICAgICBjb21tYW5kOiB0aGlzLmNvbW1hbmQsXG4gICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiB0aGlzLnRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICBvdXRwdXRGaWxlOiB0aGlzLm91dHB1dEZpbGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlID0gJ2V4ZWN1dGFibGUnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhbiBleHRlcm5hbCBzdWJqZWN0IHRva2VuIGlzIG5lZWRlZCB0byBiZSBleGNoYW5nZWQgZm9yIGFcbiAgICAgKiBHQ1AgYWNjZXNzIHRva2VuIHZpYSBHQ1AgU1RTIGVuZHBvaW50LlxuICAgICAqIFRoaXMgdXNlcyB0aGUgYG9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2VgIG9iamVjdCB0byBmaWd1cmUgb3V0IGhvd1xuICAgICAqIHRvIHJldHJpZXZlIHRoZSB0b2tlbiB1c2luZyB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gSW4gdGhpcyBjYXNlLFxuICAgICAqIHRoaXMgY2FsbHMgYSB1c2VyIHByb3ZpZGVkIGV4ZWN1dGFibGUgd2hpY2ggcmV0dXJucyB0aGUgc3ViamVjdCB0b2tlbi5cbiAgICAgKiBUaGUgbG9naWMgaXMgc3VtbWFyaXplZCBhczpcbiAgICAgKiAxLiBWYWxpZGF0ZWQgdGhhdCB0aGUgZXhlY3V0YWJsZSBpcyBhbGxvd2VkIHRvIHJ1bi4gVGhlXG4gICAgICogICAgR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQUxMT1dfRVhFQ1VUQUJMRVMgZW52aXJvbm1lbnQgbXVzdCBiZSBzZXQgdG9cbiAgICAgKiAgICAxIGZvciBzZWN1cml0eSByZWFzb25zLlxuICAgICAqIDIuIElmIGFuIG91dHB1dCBmaWxlIGlzIHNwZWNpZmllZCBieSB0aGUgdXNlciwgY2hlY2sgdGhlIGZpbGUgbG9jYXRpb25cbiAgICAgKiAgICBmb3IgYSByZXNwb25zZS4gSWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBjb250YWlucyBhIHZhbGlkIHJlc3BvbnNlLFxuICAgICAqICAgIHJldHVybiB0aGUgc3ViamVjdCB0b2tlbiBmcm9tIHRoZSBmaWxlLlxuICAgICAqIDMuIENhbGwgdGhlIHByb3ZpZGVkIGV4ZWN1dGFibGUgYW5kIHJldHVybiByZXNwb25zZS5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGV4dGVybmFsIHN1YmplY3QgdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgcmV0cmlldmVTdWJqZWN0VG9rZW4oKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBleGVjdXRhYmxlIGlzIGFsbG93ZWQgdG8gcnVuLlxuICAgICAgICBpZiAocHJvY2Vzcy5lbnZbR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQUxMT1dfRVhFQ1VUQUJMRVNdICE9PSAnMScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGx1Z2dhYmxlIEF1dGggZXhlY3V0YWJsZXMgbmVlZCB0byBiZSBleHBsaWNpdGx5IGFsbG93ZWQgdG8gcnVuIGJ5ICcgK1xuICAgICAgICAgICAgICAgICdzZXR0aW5nIHRoZSBHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9BTExPV19FWEVDVVRBQkxFUyBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgICAgICAgICAnVmFyaWFibGUgdG8gMS4nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXhlY3V0YWJsZVJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNhY2hlZCBleGVjdXRhYmxlIHJlc3BvbnNlIGZyb20gb3V0cHV0IGZpbGUuXG4gICAgICAgIGlmICh0aGlzLm91dHB1dEZpbGUpIHtcbiAgICAgICAgICAgIGV4ZWN1dGFibGVSZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlci5yZXRyaWV2ZUNhY2hlZFJlc3BvbnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm8gcmVzcG9uc2UgZnJvbSBvdXRwdXQgZmlsZSwgY2FsbCB0aGUgZXhlY3V0YWJsZS5cbiAgICAgICAgaWYgKCFleGVjdXRhYmxlUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIFNldCB1cCBlbnZpcm9ubWVudCBtYXAgd2l0aCByZXF1aXJlZCB2YWx1ZXMgZm9yIHRoZSBleGVjdXRhYmxlLlxuICAgICAgICAgICAgY29uc3QgZW52TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZW52TWFwLnNldCgnR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQVVESUVOQ0UnLCB0aGlzLmF1ZGllbmNlKTtcbiAgICAgICAgICAgIGVudk1hcC5zZXQoJ0dPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX1RPS0VOX1RZUEUnLCB0aGlzLnN1YmplY3RUb2tlblR5cGUpO1xuICAgICAgICAgICAgLy8gQWx3YXlzIHNldCB0byAwIGJlY2F1c2UgaW50ZXJhY3RpdmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAgICAgICAgZW52TWFwLnNldCgnR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfSU5URVJBQ1RJVkUnLCAnMCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0RmlsZSkge1xuICAgICAgICAgICAgICAgIGVudk1hcC5zZXQoJ0dPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX09VVFBVVF9GSUxFJywgdGhpcy5vdXRwdXRGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VBY2NvdW50RW1haWwgPSB0aGlzLmdldFNlcnZpY2VBY2NvdW50RW1haWwoKTtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlQWNjb3VudEVtYWlsKSB7XG4gICAgICAgICAgICAgICAgZW52TWFwLnNldCgnR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfSU1QRVJTT05BVEVEX0VNQUlMJywgc2VydmljZUFjY291bnRFbWFpbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleGVjdXRhYmxlUmVzcG9uc2UgPVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlci5yZXRyaWV2ZVJlc3BvbnNlRnJvbUV4ZWN1dGFibGUoZW52TWFwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhlY3V0YWJsZVJlc3BvbnNlLnZlcnNpb24gPiBNQVhJTVVNX0VYRUNVVEFCTEVfVkVSU0lPTikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWZXJzaW9uIG9mIGV4ZWN1dGFibGUgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIG1heGltdW0gc3VwcG9ydGVkIHZlcnNpb24gaXMgJHtNQVhJTVVNX0VYRUNVVEFCTEVfVkVSU0lPTn0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bC5cbiAgICAgICAgaWYgKCFleGVjdXRhYmxlUmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4ZWN1dGFibGVFcnJvcihleGVjdXRhYmxlUmVzcG9uc2UuZXJyb3JNZXNzYWdlLCBleGVjdXRhYmxlUmVzcG9uc2UuZXJyb3JDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayB0aGF0IHJlc3BvbnNlIGNvbnRhaW5zIGV4cGlyYXRpb24gdGltZSBpZiBvdXRwdXQgZmlsZSB3YXMgc3BlY2lmaWVkLlxuICAgICAgICBpZiAodGhpcy5vdXRwdXRGaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWV4ZWN1dGFibGVSZXNwb25zZS5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBleGVjdXRhYmxlX3Jlc3BvbnNlXzEuSW52YWxpZEV4cGlyYXRpb25UaW1lRmllbGRFcnJvcignVGhlIGV4ZWN1dGFibGUgcmVzcG9uc2UgbXVzdCBjb250YWluIHRoZSBgZXhwaXJhdGlvbl90aW1lYCBmaWVsZCBmb3Igc3VjY2Vzc2Z1bCByZXNwb25zZXMgd2hlbiBhbiBvdXRwdXRfZmlsZSBoYXMgYmVlbiBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCByZXNwb25zZSBpcyBub3QgZXhwaXJlZC5cbiAgICAgICAgaWYgKGV4ZWN1dGFibGVSZXNwb25zZS5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeGVjdXRhYmxlIHJlc3BvbnNlIGlzIGV4cGlyZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHN1YmplY3QgdG9rZW4gZnJvbSByZXNwb25zZS5cbiAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGVSZXNwb25zZS5zdWJqZWN0VG9rZW47XG4gICAgfVxufVxuZXhwb3J0cy5QbHVnZ2FibGVBdXRoQ2xpZW50ID0gUGx1Z2dhYmxlQXV0aENsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXh0ZXJuYWxBY2NvdW50Q2xpZW50ID0gdm9pZCAwO1xuY29uc3QgYmFzZWV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9iYXNlZXh0ZXJuYWxjbGllbnRcIik7XG5jb25zdCBpZGVudGl0eXBvb2xjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2lkZW50aXR5cG9vbGNsaWVudFwiKTtcbmNvbnN0IGF3c2NsaWVudF8xID0gcmVxdWlyZShcIi4vYXdzY2xpZW50XCIpO1xuY29uc3QgcGx1Z2dhYmxlX2F1dGhfY2xpZW50XzEgPSByZXF1aXJlKFwiLi9wbHVnZ2FibGUtYXV0aC1jbGllbnRcIik7XG4vKipcbiAqIER1bW15IGNsYXNzIHdpdGggbm8gY29uc3RydWN0b3IuIERldmVsb3BlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSBmcm9tSlNPTi5cbiAqL1xuY2xhc3MgRXh0ZXJuYWxBY2NvdW50Q2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHRlcm5hbEFjY291bnRDbGllbnRzIHNob3VsZCBiZSBpbml0aWFsaXplZCB2aWE6ICcgK1xuICAgICAgICAgICAgJ0V4dGVybmFsQWNjb3VudENsaWVudC5mcm9tSlNPTigpLCAnICtcbiAgICAgICAgICAgICdkaXJlY3RseSB2aWEgZXhwbGljaXQgY29uc3RydWN0b3JzLCBlZy4gJyArXG4gICAgICAgICAgICAnbmV3IEF3c0NsaWVudChvcHRpb25zKSwgbmV3IElkZW50aXR5UG9vbENsaWVudChvcHRpb25zKSwgbmV3JyArXG4gICAgICAgICAgICAnUGx1Z2dhYmxlQXV0aENsaWVudE9wdGlvbnMsIG9yIHZpYSAnICtcbiAgICAgICAgICAgICduZXcgR29vZ2xlQXV0aChvcHRpb25zKS5nZXRDbGllbnQoKScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2Qgd2lsbCBpbnN0YW50aWF0ZSB0aGVcbiAgICAgKiBjb3JyZXNwb25kaW5nIHR5cGUgb2YgZXh0ZXJuYWwgYWNjb3VudCBjcmVkZW50aWFsIGRlcGVuZGluZyBvbiB0aGVcbiAgICAgKiB1bmRlcmx5aW5nIGNyZWRlbnRpYWwgc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBleHRlcm5hbCBhY2NvdW50IG9wdGlvbnMgb2JqZWN0IHR5cGljYWxseSBsb2FkZWRcbiAgICAgKiAgIGZyb20gdGhlIGV4dGVybmFsIGFjY291bnQgSlNPTiBjcmVkZW50aWFsIGZpbGUuXG4gICAgICogQHBhcmFtIGFkZGl0aW9uYWxPcHRpb25zICoqREVQUkVDQVRFRCwgYWxsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgKiAgIGBvcHRpb25zYCBwYXJhbWV0ZXIuKiogT3B0aW9uYWwgYWRkaXRpb25hbCBiZWhhdmlvciBjdXN0b21pemF0aW9uIG9wdGlvbnMuXG4gICAgICogICBUaGVzZSBjdXJyZW50bHkgY3VzdG9taXplIGV4cGlyYXRpb24gdGhyZXNob2xkIHRpbWUgYW5kIHdoZXRoZXIgdG8gcmV0cnlcbiAgICAgKiAgIG9uIDQwMS80MDMgQVBJIHJlcXVlc3QgZXJyb3JzLlxuICAgICAqIEByZXR1cm4gQSBCYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50IGluc3RhbmNlIG9yIG51bGwgaWYgdGhlIG9wdGlvbnNcbiAgICAgKiAgIHByb3ZpZGVkIGRvIG5vdCBjb3JyZXNwb25kIHRvIGFuIGV4dGVybmFsIGFjY291bnQgY3JlZGVudGlhbC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04ob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlID09PSBiYXNlZXh0ZXJuYWxjbGllbnRfMS5FWFRFUk5BTF9BQ0NPVU5UX1RZUEUpIHtcbiAgICAgICAgICAgIGlmICgoX2EgPSBvcHRpb25zLmNyZWRlbnRpYWxfc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW52aXJvbm1lbnRfaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGF3c2NsaWVudF8xLkF3c0NsaWVudChvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoX2IgPSBvcHRpb25zLmNyZWRlbnRpYWxfc291cmNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhlY3V0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgcGx1Z2dhYmxlX2F1dGhfY2xpZW50XzEuUGx1Z2dhYmxlQXV0aENsaWVudChvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGlkZW50aXR5cG9vbGNsaWVudF8xLklkZW50aXR5UG9vbENsaWVudChvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuRXh0ZXJuYWxBY2NvdW50Q2xpZW50ID0gRXh0ZXJuYWxBY2NvdW50Q2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FeHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudCA9IGV4cG9ydHMuRVhURVJOQUxfQUNDT1VOVF9BVVRIT1JJWkVEX1VTRVJfVFlQRSA9IHZvaWQgMDtcbmNvbnN0IGF1dGhjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGhjbGllbnRcIik7XG5jb25zdCBvYXV0aDJjb21tb25fMSA9IHJlcXVpcmUoXCIuL29hdXRoMmNvbW1vblwiKTtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcImdheGlvc1wiKTtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBiYXNlZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2Jhc2VleHRlcm5hbGNsaWVudFwiKTtcbi8qKlxuICogVGhlIGNyZWRlbnRpYWxzIEpTT04gZmlsZSB0eXBlIGZvciBleHRlcm5hbCBhY2NvdW50IGF1dGhvcml6ZWQgdXNlciBjbGllbnRzLlxuICovXG5leHBvcnRzLkVYVEVSTkFMX0FDQ09VTlRfQVVUSE9SSVpFRF9VU0VSX1RZUEUgPSAnZXh0ZXJuYWxfYWNjb3VudF9hdXRob3JpemVkX3VzZXInO1xuY29uc3QgREVGQVVMVF9UT0tFTl9VUkwgPSAnaHR0cHM6Ly9zdHMue3VuaXZlcnNlRG9tYWlufS92MS9vYXV0aHRva2VuJztcbi8qKlxuICogSGFuZGxlciBmb3IgdG9rZW4gcmVmcmVzaCByZXF1ZXN0cyBzZW50IHRvIHRoZSB0b2tlbl91cmwgZW5kcG9pbnQgZm9yIGV4dGVybmFsXG4gKiBhdXRob3JpemVkIHVzZXIgY3JlZGVudGlhbHMuXG4gKi9cbmNsYXNzIEV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VySGFuZGxlciBleHRlbmRzIG9hdXRoMmNvbW1vbl8xLk9BdXRoQ2xpZW50QXV0aEhhbmRsZXIge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIEV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VySGFuZGxlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHRva2VuIHJlZnJlc2ggZW5kcG9pbnQuXG4gICAgICogQHBhcmFtIHRyYW5zcG9ydGVyIFRoZSB0cmFuc3BvcnRlciB0byB1c2UgZm9yIHRoZSByZWZyZXNoIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGNsaWVudEF1dGhlbnRpY2F0aW9uIFRoZSBjbGllbnQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gdXNlXG4gICAgICogICBmb3IgdGhlIHJlZnJlc2ggcmVxdWVzdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIHRyYW5zcG9ydGVyLCBjbGllbnRBdXRoZW50aWNhdGlvbikge1xuICAgICAgICBzdXBlcihjbGllbnRBdXRoZW50aWNhdGlvbik7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGVyID0gdHJhbnNwb3J0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlcXVlc3RzIGEgbmV3IGFjY2VzcyB0b2tlbiBmcm9tIHRoZSB0b2tlbl91cmwgZW5kcG9pbnQgdXNpbmcgdGhlIHByb3ZpZGVkXG4gICAgICogICByZWZyZXNoIHRva2VuLlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdG8gdXNlIHRvIGdlbmVyYXRlIGEgbmV3IGFjY2VzcyB0b2tlbi5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbEhlYWRlcnMgT3B0aW9uYWwgYWRkaXRpb25hbCBoZWFkZXJzIHRvIHBhc3MgYWxvbmcgdGhlXG4gICAgICogICByZXF1ZXN0LlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVmcmVzaCByZXNwb25zZSBjb250YWluaW5nXG4gICAgICogICB0aGUgcmVxdWVzdGVkIGFjY2VzcyB0b2tlbiBhbmQgaXRzIGV4cGlyYXRpb24gdGltZS5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAuLi5hZGRpdGlvbmFsSGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIC4uLkV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VySGFuZGxlci5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogdmFsdWVzLnRvU3RyaW5nKCksXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQXBwbHkgT0F1dGggY2xpZW50IGF1dGhlbnRpY2F0aW9uLlxuICAgICAgICB0aGlzLmFwcGx5Q2xpZW50QXV0aGVudGljYXRpb25PcHRpb25zKG9wdHMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgICAgICAvLyBTdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAgICAgICAgY29uc3QgdG9rZW5SZWZyZXNoUmVzcG9uc2UgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgdG9rZW5SZWZyZXNoUmVzcG9uc2UucmVzID0gcmVzcG9uc2U7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5SZWZyZXNoUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBUcmFuc2xhdGUgZXJyb3IgdG8gT0F1dGhFcnJvci5cbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGdheGlvc18xLkdheGlvc0Vycm9yICYmIGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgKDAsIG9hdXRoMmNvbW1vbl8xLmdldEVycm9yRnJvbU9BdXRoRXJyb3JSZXNwb25zZSkoZXJyb3IucmVzcG9uc2UuZGF0YSwgXG4gICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgb3RoZXIgZmllbGRzIGZyb20gdGhlIG9yaWdpbmFsIGVycm9yLlxuICAgICAgICAgICAgICAgIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlcXVlc3QgY291bGQgZmFpbCBiZWZvcmUgdGhlIHNlcnZlciByZXNwb25kcy5cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBFeHRlcm5hbCBBY2NvdW50IEF1dGhvcml6ZWQgVXNlciBDbGllbnQuIFRoaXMgaXMgdXNlZCBmb3IgT0F1dGgyIGNyZWRlbnRpYWxzXG4gKiBzb3VyY2VkIHVzaW5nIGV4dGVybmFsIGlkZW50aXRpZXMgdGhyb3VnaCBXb3JrZm9yY2UgSWRlbnRpdHkgRmVkZXJhdGlvbi5cbiAqIE9idGFpbmluZyB0aGUgaW5pdGlhbCBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW4gY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGVcbiAqIEdvb2dsZSBDbG91ZCBDTEkuXG4gKi9cbmNsYXNzIEV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50IGV4dGVuZHMgYXV0aGNsaWVudF8xLkF1dGhDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbiBFeHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudCBpbnN0YW5jZXMgdXNpbmcgdGhlXG4gICAgICogcHJvdmlkZWQgSlNPTiBvYmplY3QgbG9hZGVkIGZyb20gYSBjcmVkZW50aWFscyBmaWxlcy5cbiAgICAgKiBBbiBlcnJvciBpcyB0aHJvd3MgaWYgdGhlIGNyZWRlbnRpYWwgaXMgbm90IHZhbGlkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBleHRlcm5hbCBhY2NvdW50IGF1dGhvcml6ZWQgdXNlciBvcHRpb24gb2JqZWN0IHR5cGljYWxseVxuICAgICAqICAgZnJvbSB0aGUgZXh0ZXJuYWwgYWNjb3V0biBhdXRob3JpemVkIHVzZXIgSlNPTiBjcmVkZW50aWFsIGZpbGUuXG4gICAgICogQHBhcmFtIGFkZGl0aW9uYWxPcHRpb25zICoqREVQUkVDQVRFRCwgYWxsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgKiAgIGBvcHRpb25zYCBwYXJhbWV0ZXIuKiogT3B0aW9uYWwgYWRkaXRpb25hbCBiZWhhdmlvciBjdXN0b21pemF0aW9uIG9wdGlvbnMuXG4gICAgICogICBUaGVzZSBjdXJyZW50bHkgY3VzdG9taXplIGV4cGlyYXRpb24gdGhyZXNob2xkIHRpbWUgYW5kIHdoZXRoZXIgdG8gcmV0cnlcbiAgICAgKiAgIG9uIDQwMS80MDMgQVBJIHJlcXVlc3QgZXJyb3JzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIoeyAuLi5vcHRpb25zLCAuLi5hZGRpdGlvbmFsT3B0aW9ucyB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5pdmVyc2VfZG9tYWluKSB7XG4gICAgICAgICAgICB0aGlzLnVuaXZlcnNlRG9tYWluID0gb3B0aW9ucy51bml2ZXJzZV9kb21haW47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBvcHRpb25zLnJlZnJlc2hfdG9rZW47XG4gICAgICAgIGNvbnN0IGNsaWVudEF1dGggPSB7XG4gICAgICAgICAgICBjb25maWRlbnRpYWxDbGllbnRUeXBlOiAnYmFzaWMnLFxuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50X2lkLFxuICAgICAgICAgICAgY2xpZW50U2VjcmV0OiBvcHRpb25zLmNsaWVudF9zZWNyZXQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJIYW5kbGVyID1cbiAgICAgICAgICAgIG5ldyBFeHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckhhbmRsZXIoKF9hID0gb3B0aW9ucy50b2tlbl91cmwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfVE9LRU5fVVJMLnJlcGxhY2UoJ3t1bml2ZXJzZURvbWFpbn0nLCB0aGlzLnVuaXZlcnNlRG9tYWluKSwgdGhpcy50cmFuc3BvcnRlciwgY2xpZW50QXV0aCk7XG4gICAgICAgIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnF1b3RhUHJvamVjdElkID0gb3B0aW9ucy5xdW90YV9wcm9qZWN0X2lkO1xuICAgICAgICAvLyBBcyB0aHJlc2hvbGQgY291bGQgYmUgemVybyxcbiAgICAgICAgLy8gZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzIHx8IEVYUElSQVRJT05fVElNRV9PRkZTRVQgd2lsbCBvdmVycmlkZSB0aGVcbiAgICAgICAgLy8gemVybyB2YWx1ZS5cbiAgICAgICAgaWYgKHR5cGVvZiAoYWRkaXRpb25hbE9wdGlvbnMgPT09IG51bGwgfHwgYWRkaXRpb25hbE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxPcHRpb25zLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcykgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyA9IGJhc2VleHRlcm5hbGNsaWVudF8xLkVYUElSQVRJT05fVElNRV9PRkZTRVQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyA9IGFkZGl0aW9uYWxPcHRpb25zXG4gICAgICAgICAgICAgICAgLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcmNlUmVmcmVzaE9uRmFpbHVyZSA9ICEhKGFkZGl0aW9uYWxPcHRpb25zID09PSBudWxsIHx8IGFkZGl0aW9uYWxPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhZGRpdGlvbmFsT3B0aW9ucy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpO1xuICAgIH1cbiAgICBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgLy8gSWYgY2FjaGVkIGFjY2VzcyB0b2tlbiBpcyB1bmF2YWlsYWJsZSBvciBleHBpcmVkLCBmb3JjZSByZWZyZXNoLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gfHwgdGhpcy5pc0V4cGlyZWQodGhpcy5jYWNoZWRBY2Nlc3NUb2tlbikpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXR1cm4gR0NQIGFjY2VzcyB0b2tlbiBpbiBHZXRBY2Nlc3NUb2tlblJlc3BvbnNlIGZvcm1hdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIHJlczogdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbi5yZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGdldFJlcXVlc3RIZWFkZXJzKCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlblJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VuUmVzcG9uc2UudG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKGhlYWRlcnMpO1xuICAgIH1cbiAgICByZXF1ZXN0KG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0QXN5bmMob3B0cykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSwgZS5yZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBc3luYyhvcHRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdXRoZW50aWNhdGVzIHRoZSBwcm92aWRlZCBIVFRQIHJlcXVlc3QsIHByb2Nlc3NlcyBpdCBhbmQgcmVzb2x2ZXMgd2l0aCB0aGVcbiAgICAgKiByZXR1cm5lZCByZXNwb25zZS5cbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgSFRUUCByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHJlQXV0aFJldHJpZWQgV2hldGhlciB0aGUgY3VycmVudCBhdHRlbXB0IGlzIGEgcmV0cnkgYWZ0ZXIgYSBmYWlsZWQgYXR0ZW1wdCBkdWUgdG8gYW4gYXV0aCBmYWlsdXJlLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc3VjY2Vzc2Z1bCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyByZXF1ZXN0QXN5bmMob3B0cywgcmVBdXRoUmV0cmllZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRSZXF1ZXN0SGVhZGVycygpO1xuICAgICAgICAgICAgb3B0cy5oZWFkZXJzID0gb3B0cy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RIZWFkZXJzICYmIHJlcXVlc3RIZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J10pIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSA9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnMgJiYgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBlLnJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMuc3RhdHVzO1xuICAgICAgICAgICAgICAgIC8vIFJldHJ5IHRoZSByZXF1ZXN0IGZvciBtZXRhZGF0YSBpZiB0aGUgZm9sbG93aW5nIGNyaXRlcmlhIGFyZSB0cnVlOlxuICAgICAgICAgICAgICAgIC8vIC0gV2UgaGF2ZW4ndCBhbHJlYWR5IHJldHJpZWQuICBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHJldHJ5IG9uY2UuXG4gICAgICAgICAgICAgICAgLy8gLSBUaGUgcmVzcG9uc2Ugd2FzIGEgNDAxIG9yIGEgNDAzXG4gICAgICAgICAgICAgICAgLy8gLSBUaGUgcmVxdWVzdCBkaWRuJ3Qgc2VuZCBhIHJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgLy8gLSBmb3JjZVJlZnJlc2hPbkZhaWx1cmUgaXMgdHJ1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVhZGFibGVTdHJlYW0gPSByZXMuY29uZmlnLmRhdGEgaW5zdGFuY2VvZiBzdHJlYW0uUmVhZGFibGU7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdXRoRXJyID0gc3RhdHVzQ29kZSA9PT0gNDAxIHx8IHN0YXR1c0NvZGUgPT09IDQwMztcbiAgICAgICAgICAgICAgICBpZiAoIXJlQXV0aFJldHJpZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNBdXRoRXJyICYmXG4gICAgICAgICAgICAgICAgICAgICFpc1JlYWRhYmxlU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoT25GYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdEFzeW5jKG9wdHMsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdG9rZW4gcmVmcmVzaCwgZXZlbiBpZiB1bmV4cGlyZWQgdG9rZW5zIGFyZSBjdXJyZW50bHkgY2FjaGVkLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVmcmVzaGVkIGNyZWRlbnRpYWwuXG4gICAgICovXG4gICAgYXN5bmMgcmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKSB7XG4gICAgICAgIC8vIFJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiB1c2luZyB0aGUgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgY29uc3QgcmVmcmVzaFJlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckhhbmRsZXIucmVmcmVzaFRva2VuKHRoaXMucmVmcmVzaFRva2VuKTtcbiAgICAgICAgdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbiA9IHtcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogcmVmcmVzaFJlc3BvbnNlLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHJlZnJlc2hSZXNwb25zZS5leHBpcmVzX2luICogMTAwMCxcbiAgICAgICAgICAgIHJlczogcmVmcmVzaFJlc3BvbnNlLnJlcyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlZnJlc2hSZXNwb25zZS5yZWZyZXNoX3Rva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gcmVmcmVzaFJlc3BvbnNlLnJlZnJlc2hfdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMgYXJlIGV4cGlyZWQgb3Igbm90LlxuICAgICAqIElmIHRoZXJlIGlzIG5vIGV4cGlyeSB0aW1lLCBhc3N1bWVzIHRoZSB0b2tlbiBpcyBub3QgZXhwaXJlZCBvciBleHBpcmluZy5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIGNyZWRlbnRpYWxzIHRvIGNoZWNrIGZvciBleHBpcmF0aW9uLlxuICAgICAqIEByZXR1cm4gV2hldGhlciB0aGUgY3JlZGVudGlhbHMgYXJlIGV4cGlyZWQgb3Igbm90LlxuICAgICAqL1xuICAgIGlzRXhwaXJlZChjcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzLmV4cGlyeV9kYXRlXG4gICAgICAgICAgICA/IG5vdyA+PSBjcmVkZW50aWFscy5leHBpcnlfZGF0ZSAtIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuRXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJDbGllbnQgPSBFeHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfR29vZ2xlQXV0aF9pbnN0YW5jZXMsIF9Hb29nbGVBdXRoX3BlbmRpbmdBdXRoQ2xpZW50LCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQsIF9Hb29nbGVBdXRoX2RldGVybWluZUNsaWVudDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR29vZ2xlQXV0aCA9IGV4cG9ydHMuR29vZ2xlQXV0aEV4Y2VwdGlvbk1lc3NhZ2VzID0gZXhwb3J0cy5DTE9VRF9TREtfQ0xJRU5UX0lEID0gdm9pZCAwO1xuY29uc3QgY2hpbGRfcHJvY2Vzc18xID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGdjcE1ldGFkYXRhID0gcmVxdWlyZShcImdjcC1tZXRhZGF0YVwiKTtcbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiLi4vY3J5cHRvL2NyeXB0b1wiKTtcbmNvbnN0IHRyYW5zcG9ydGVyc18xID0gcmVxdWlyZShcIi4uL3RyYW5zcG9ydGVyc1wiKTtcbmNvbnN0IGNvbXB1dGVjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NvbXB1dGVjbGllbnRcIik7XG5jb25zdCBpZHRva2VuY2xpZW50XzEgPSByZXF1aXJlKFwiLi9pZHRva2VuY2xpZW50XCIpO1xuY29uc3QgZW52RGV0ZWN0XzEgPSByZXF1aXJlKFwiLi9lbnZEZXRlY3RcIik7XG5jb25zdCBqd3RjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2p3dGNsaWVudFwiKTtcbmNvbnN0IHJlZnJlc2hjbGllbnRfMSA9IHJlcXVpcmUoXCIuL3JlZnJlc2hjbGllbnRcIik7XG5jb25zdCBpbXBlcnNvbmF0ZWRfMSA9IHJlcXVpcmUoXCIuL2ltcGVyc29uYXRlZFwiKTtcbmNvbnN0IGV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9leHRlcm5hbGNsaWVudFwiKTtcbmNvbnN0IGJhc2VleHRlcm5hbGNsaWVudF8xID0gcmVxdWlyZShcIi4vYmFzZWV4dGVybmFsY2xpZW50XCIpO1xuY29uc3QgYXV0aGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aGNsaWVudFwiKTtcbmNvbnN0IGV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9leHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZXhwb3J0cy5DTE9VRF9TREtfQ0xJRU5UX0lEID0gJzc2NDA4NjA1MTg1MC02cXI0cDZncGk2aG41MDZwdDhlanVxODNkaTM0MWh1ci5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSc7XG5leHBvcnRzLkdvb2dsZUF1dGhFeGNlcHRpb25NZXNzYWdlcyA9IHtcbiAgICBBUElfS0VZX1dJVEhfQ1JFREVOVElBTFM6ICdBUEkgS2V5cyBhbmQgQ3JlZGVudGlhbHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFuZCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4nLFxuICAgIE5PX1BST0pFQ1RfSURfRk9VTkQ6ICdVbmFibGUgdG8gZGV0ZWN0IGEgUHJvamVjdCBJZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gXFxuJyArXG4gICAgICAgICdUbyBsZWFybiBtb3JlIGFib3V0IGF1dGhlbnRpY2F0aW9uIGFuZCBHb29nbGUgQVBJcywgdmlzaXQ6IFxcbicgK1xuICAgICAgICAnaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2RvY3MvYXV0aGVudGljYXRpb24vZ2V0dGluZy1zdGFydGVkJyxcbiAgICBOT19DUkVERU5USUFMU19GT1VORDogJ1VuYWJsZSB0byBmaW5kIGNyZWRlbnRpYWxzIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuIFxcbicgK1xuICAgICAgICAnVG8gbGVhcm4gbW9yZSBhYm91dCBhdXRoZW50aWNhdGlvbiBhbmQgR29vZ2xlIEFQSXMsIHZpc2l0OiBcXG4nICtcbiAgICAgICAgJ2h0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL2dldHRpbmctc3RhcnRlZCcsXG4gICAgTk9fQURDX0ZPVU5EOiAnQ291bGQgbm90IGxvYWQgdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMuIEJyb3dzZSB0byBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZG9jcy9hdXRoZW50aWNhdGlvbi9nZXR0aW5nLXN0YXJ0ZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyxcbiAgICBOT19VTklWRVJTRV9ET01BSU5fRk9VTkQ6ICdVbmFibGUgdG8gZGV0ZWN0IGEgVW5pdmVyc2UgRG9tYWluIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxcbicgK1xuICAgICAgICAnVG8gbGVhcm4gbW9yZSBhYm91dCBVbml2ZXJzZSBEb21haW4gcmV0cmlldmFsLCB2aXNpdDogXFxuJyArXG4gICAgICAgICdodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21ldGFkYXRhL3ByZWRlZmluZWQtbWV0YWRhdGEta2V5cycsXG59O1xuY2xhc3MgR29vZ2xlQXV0aCB7XG4gICAgLy8gTm90ZTogIHRoaXMgcHJvcGVybHkgaXMgb25seSBwdWJsaWMgdG8gc2F0aXNmeSB1bml0IHRlc3RzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvNTIyOFxuICAgIGdldCBpc0dDRSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJc0dDRTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBpcyByZXNvbHZlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIG9mIHByZWNlZGVuY2U6XG4gICAgICogLSB7QGxpbmsgR29vZ2xlQXV0aE9wdGlvbnMuY3JlZGVudGlhbHMgYGNyZWRlbnRpYWxzYH1cbiAgICAgKiAtIHtAbGluayBHb29nbGVBdXRoT3B0aW9ucy5rZXlGaWxlbmFtZSBga2V5RmlsZW5hbWVgfVxuICAgICAqIC0ge0BsaW5rIEdvb2dsZUF1dGhPcHRpb25zLmtleUZpbGUgYGtleUZpbGVgfVxuICAgICAqXG4gICAgICoge0BsaW5rIEdvb2dsZUF1dGhPcHRpb25zLmNsaWVudE9wdGlvbnMgYGNsaWVudE9wdGlvbnNgfSBhcmUgcGFzc2VkIHRvIHRoZVxuICAgICAqIHtAbGluayBBdXRoQ2xpZW50IGBBdXRoQ2xpZW50YHN9LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgX0dvb2dsZUF1dGhfaW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhY2hlcyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgYXV0aCBsYXllciBpcyBydW5uaW5nIG9uIEdvb2dsZVxuICAgICAgICAgKiBDb21wdXRlIEVuZ2luZS5cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2hlY2tJc0dDRSA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gVG8gc2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIEpTT04gY3JlZGVudGlhbCBmaWxlXG4gICAgICAgIHRoaXMuanNvbkNvbnRlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmNhY2hlZENyZWRlbnRpYWwgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBwZW5kaW5nIHtAbGluayBBdXRoQ2xpZW50fS4gVXNlZCBmb3IgY29uY3VycmVudCB7QGxpbmsgR29vZ2xlQXV0aC5nZXRDbGllbnR9IGNhbGxzLlxuICAgICAgICAgKi9cbiAgICAgICAgX0dvb2dsZUF1dGhfcGVuZGluZ0F1dGhDbGllbnQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICB0aGlzLmNsaWVudE9wdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGVkUHJvamVjdElkID0gb3B0cy5wcm9qZWN0SWQgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5jYWNoZWRDcmVkZW50aWFsID0gb3B0cy5hdXRoQ2xpZW50IHx8IG51bGw7XG4gICAgICAgIHRoaXMua2V5RmlsZW5hbWUgPSBvcHRzLmtleUZpbGVuYW1lIHx8IG9wdHMua2V5RmlsZTtcbiAgICAgICAgdGhpcy5zY29wZXMgPSBvcHRzLnNjb3BlcztcbiAgICAgICAgdGhpcy5jbGllbnRPcHRpb25zID0gb3B0cy5jbGllbnRPcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLmpzb25Db250ZW50ID0gb3B0cy5jcmVkZW50aWFscyB8fCBudWxsO1xuICAgICAgICB0aGlzLmFwaUtleSA9IG9wdHMuYXBpS2V5IHx8IHRoaXMuY2xpZW50T3B0aW9ucy5hcGlLZXkgfHwgbnVsbDtcbiAgICAgICAgLy8gQ2Fubm90IHVzZSBib3RoIEFQSSBLZXkgKyBDcmVkZW50aWFsc1xuICAgICAgICBpZiAodGhpcy5hcGlLZXkgJiYgKHRoaXMuanNvbkNvbnRlbnQgfHwgdGhpcy5jbGllbnRPcHRpb25zLmNyZWRlbnRpYWxzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoZXhwb3J0cy5Hb29nbGVBdXRoRXhjZXB0aW9uTWVzc2FnZXMuQVBJX0tFWV9XSVRIX0NSRURFTlRJQUxTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy51bml2ZXJzZURvbWFpbikge1xuICAgICAgICAgICAgdGhpcy5jbGllbnRPcHRpb25zLnVuaXZlcnNlRG9tYWluID0gb3B0cy51bml2ZXJzZURvbWFpbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBHQVBJQyBjbGllbnQgbGlicmFyaWVzIHNob3VsZCBhbHdheXMgdXNlIHNlbGYtc2lnbmVkIEpXVHMuIFRoZSBmb2xsb3dpbmdcbiAgICAvLyB2YXJpYWJsZXMgYXJlIHNldCBvbiB0aGUgSldUIGNsaWVudCBpbiBvcmRlciB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsaWJyYXJ5LFxuICAgIC8vIGFuZCBzaWduIHRoZSBKV1Qgd2l0aCB0aGUgY29ycmVjdCBhdWRpZW5jZSBhbmQgc2NvcGVzIChpZiBub3Qgc3VwcGxpZWQpLlxuICAgIHNldEdhcGljSldUVmFsdWVzKGNsaWVudCkge1xuICAgICAgICBjbGllbnQuZGVmYXVsdFNlcnZpY2VQYXRoID0gdGhpcy5kZWZhdWx0U2VydmljZVBhdGg7XG4gICAgICAgIGNsaWVudC51c2VKV1RBY2Nlc3NXaXRoU2NvcGUgPSB0aGlzLnVzZUpXVEFjY2Vzc1dpdGhTY29wZTtcbiAgICAgICAgY2xpZW50LmRlZmF1bHRTY29wZXMgPSB0aGlzLmRlZmF1bHRTY29wZXM7XG4gICAgfVxuICAgIGdldFByb2plY3RJZChjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvamVjdElkQXN5bmMoKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb2plY3RJZEFzeW5jKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQSB0ZW1wb3JhcnkgbWV0aG9kIGZvciBpbnRlcm5hbCBgZ2V0UHJvamVjdElkYCB1c2FnZXMgd2hlcmUgYG51bGxgIGlzXG4gICAgICogYWNjZXB0YWJsZS4gSW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZSwgYGdldFByb2plY3RJZGAgc2hvdWxkIHJldHVybiBgbnVsbGBcbiAgICAgKiAoYXMgdGhlIGBQcm9taXNlPHN0cmluZyB8IG51bGw+YCBiYXNlIHNpZ25hdHVyZSBkZXNjcmliZXMpIGFuZCB0aGlzIHByaXZhdGVcbiAgICAgKiBtZXRob2Qgc2hvdWxkIGJlIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBwcm9qZWN0IGlkIChvciBgbnVsbGApXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvamVjdElkT3B0aW9uYWwoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRQcm9qZWN0SWQoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9PT0gZXhwb3J0cy5Hb29nbGVBdXRoRXhjZXB0aW9uTWVzc2FnZXMuTk9fUFJPSkVDVF9JRF9GT1VORCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIHByaXZhdGUgbWV0aG9kIGZvciBmaW5kaW5nIGFuZCBjYWNoaW5nIGEgcHJvamVjdElkLlxuICAgICAqXG4gICAgICogU3VwcG9ydHMgZW52aXJvbm1lbnRzIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6XG4gICAgICogLSBHQ0xPVURfUFJPSkVDVCBvciBHT09HTEVfQ0xPVURfUFJPSkVDVCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgICAqIC0gR09PR0xFX0FQUExJQ0FUSU9OX0NSRURFTlRJQUxTIEpTT04gZmlsZVxuICAgICAqIC0gQ2xvdWQgU0RLOiBgZ2Nsb3VkIGNvbmZpZyBjb25maWctaGVscGVyIC0tZm9ybWF0IGpzb25gXG4gICAgICogLSBHQ0UgcHJvamVjdCBJRCBmcm9tIG1ldGFkYXRhIHNlcnZlclxuICAgICAqXG4gICAgICogQHJldHVybnMgcHJvamVjdElkXG4gICAgICovXG4gICAgYXN5bmMgZmluZEFuZENhY2hlUHJvamVjdElkKCkge1xuICAgICAgICBsZXQgcHJvamVjdElkID0gbnVsbDtcbiAgICAgICAgcHJvamVjdElkIHx8IChwcm9qZWN0SWQgPSBhd2FpdCB0aGlzLmdldFByb2R1Y3Rpb25Qcm9qZWN0SWQoKSk7XG4gICAgICAgIHByb2plY3RJZCB8fCAocHJvamVjdElkID0gYXdhaXQgdGhpcy5nZXRGaWxlUHJvamVjdElkKCkpO1xuICAgICAgICBwcm9qZWN0SWQgfHwgKHByb2plY3RJZCA9IGF3YWl0IHRoaXMuZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0SWQoKSk7XG4gICAgICAgIHByb2plY3RJZCB8fCAocHJvamVjdElkID0gYXdhaXQgdGhpcy5nZXRHQ0VQcm9qZWN0SWQoKSk7XG4gICAgICAgIHByb2plY3RJZCB8fCAocHJvamVjdElkID0gYXdhaXQgdGhpcy5nZXRFeHRlcm5hbEFjY291bnRDbGllbnRQcm9qZWN0SWQoKSk7XG4gICAgICAgIGlmIChwcm9qZWN0SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlZFByb2plY3RJZCA9IHByb2plY3RJZDtcbiAgICAgICAgICAgIHJldHVybiBwcm9qZWN0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwb3J0cy5Hb29nbGVBdXRoRXhjZXB0aW9uTWVzc2FnZXMuTk9fUFJPSkVDVF9JRF9GT1VORCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0UHJvamVjdElkQXN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWNoZWRQcm9qZWN0SWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRQcm9qZWN0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9maW5kUHJvamVjdElkUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5fZmluZFByb2plY3RJZFByb21pc2UgPSB0aGlzLmZpbmRBbmRDYWNoZVByb2plY3RJZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kUHJvamVjdElkUHJvbWlzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgdW5pdmVyc2UgZG9tYWluIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZlciB2aWFcbiAgICAgKiB7QGxpbmsgZ2NwTWV0YWRhdGEudW5pdmVyc2V9LlxuICAgICAqXG4gICAgICogQHJldHVybnMgYSB1bml2ZXJzZSBkb21haW5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRVbml2ZXJzZURvbWFpbkZyb21NZXRhZGF0YVNlcnZlcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgdW5pdmVyc2VEb21haW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1bml2ZXJzZURvbWFpbiA9IGF3YWl0IGdjcE1ldGFkYXRhLnVuaXZlcnNlKCd1bml2ZXJzZS1kb21haW4nKTtcbiAgICAgICAgICAgIHVuaXZlcnNlRG9tYWluIHx8ICh1bml2ZXJzZURvbWFpbiA9IGF1dGhjbGllbnRfMS5ERUZBVUxUX1VOSVZFUlNFKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgJiYgKChfYSA9IGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0YXR1cykgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIHVuaXZlcnNlRG9tYWluID0gYXV0aGNsaWVudF8xLkRFRkFVTFRfVU5JVkVSU0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bml2ZXJzZURvbWFpbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzLCBjYWNoZXMsIGFuZCByZXR1cm5zIHRoZSB1bml2ZXJzZSBkb21haW4gaW4gdGhlIGZvbGxvd2luZyBvcmRlclxuICAgICAqIG9mIHByZWNlZGVuY2U6XG4gICAgICogLSBUaGUgdW5pdmVyc2UgZG9tYWluIGluIHtAbGluayBHb29nbGVBdXRoLmNsaWVudE9wdGlvbnN9XG4gICAgICogLSBBbiBleGlzdGluZyBvciBBREMge0BsaW5rIEF1dGhDbGllbnR9J3MgdW5pdmVyc2UgZG9tYWluXG4gICAgICogLSB7QGxpbmsgZ2NwTWV0YWRhdGEudW5pdmVyc2V9LCBpZiB7QGxpbmsgQ29tcHV0ZX0gY2xpZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgdW5pdmVyc2UgZG9tYWluXG4gICAgICovXG4gICAgYXN5bmMgZ2V0VW5pdmVyc2VEb21haW4oKSB7XG4gICAgICAgIGxldCB1bml2ZXJzZURvbWFpbiA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykodGhpcy5jbGllbnRPcHRpb25zKS5nZXQoJ3VuaXZlcnNlX2RvbWFpbicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdW5pdmVyc2VEb21haW4gIT09IG51bGwgJiYgdW5pdmVyc2VEb21haW4gIT09IHZvaWQgMCA/IHVuaXZlcnNlRG9tYWluIDogKHVuaXZlcnNlRG9tYWluID0gKGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkpLnVuaXZlcnNlRG9tYWluKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIGNsaWVudCBvciBBREMgaXMgbm90IGF2YWlsYWJsZVxuICAgICAgICAgICAgdW5pdmVyc2VEb21haW4gIT09IG51bGwgJiYgdW5pdmVyc2VEb21haW4gIT09IHZvaWQgMCA/IHVuaXZlcnNlRG9tYWluIDogKHVuaXZlcnNlRG9tYWluID0gYXV0aGNsaWVudF8xLkRFRkFVTFRfVU5JVkVSU0UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bml2ZXJzZURvbWFpbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgQW55IHNjb3BlcyAodXNlci1zcGVjaWZpZWQgb3IgZGVmYXVsdCBzY29wZXMgc3BlY2lmaWVkIGJ5IHRoZVxuICAgICAqICAgY2xpZW50IGxpYnJhcnkpIHRoYXQgbmVlZCB0byBiZSBzZXQgb24gdGhlIGN1cnJlbnQgQXV0aCBjbGllbnQuXG4gICAgICovXG4gICAgZ2V0QW55U2NvcGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZXMgfHwgdGhpcy5kZWZhdWx0U2NvcGVzO1xuICAgIH1cbiAgICBnZXRBcHBsaWNhdGlvbkRlZmF1bHQob3B0aW9uc09yQ2FsbGJhY2sgPSB7fSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IG9wdGlvbnM7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9uc09yQ2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yQ2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFwcGxpY2F0aW9uRGVmYXVsdEFzeW5jKG9wdGlvbnMpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByLmNyZWRlbnRpYWwsIHIucHJvamVjdElkKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25EZWZhdWx0QXN5bmMob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25EZWZhdWx0QXN5bmMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGEgY2FjaGVkIGNyZWRlbnRpYWwsIHJldHVybiBpdC5cbiAgICAgICAgLy8gVGhpcyB3aWxsIGFsc28gcHJlc2VydmUgb25lJ3MgY29uZmlndXJlZCBxdW90YSBwcm9qZWN0LCBpbiBjYXNlIHRoZXlcbiAgICAgICAgLy8gc2V0IG9uZSBkaXJlY3RseSBvbiB0aGUgY3JlZGVudGlhbCBwcmV2aW91c2x5LlxuICAgICAgICBpZiAodGhpcy5jYWNoZWRDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICAvLyBjYWNoZSwgd2hpbGUgcHJlc2VydmluZyBleGlzdGluZyBxdW90YSBwcm9qZWN0IHByZWZlcmVuY2VzXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQpLmNhbGwodGhpcywgdGhpcy5jYWNoZWRDcmVkZW50aWFsLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3JlZGVudGlhbDtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBsb2NhbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBwb2ludGluZyB0byB0aGVcbiAgICAgICAgLy8gbG9jYXRpb24gb2YgdGhlIGNyZWRlbnRpYWwgZmlsZS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBpbiBsb2NhbFxuICAgICAgICAvLyBkZXZlbG9wZXIgc2NlbmFyaW9zLlxuICAgICAgICBjcmVkZW50aWFsID1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeUdldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tRW52aXJvbm1lbnRWYXJpYWJsZShvcHRpb25zKTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGlmIChjcmVkZW50aWFsIGluc3RhbmNlb2Ygand0Y2xpZW50XzEuSldUKSB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbC5zY29wZXMgPSB0aGlzLnNjb3BlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBiYXNlZXh0ZXJuYWxjbGllbnRfMS5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50KSB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbC5zY29wZXMgPSB0aGlzLmdldEFueVNjb3BlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZUF1dGhfcHJlcGFyZUFuZENhY2hlQ2xpZW50KS5jYWxsKHRoaXMsIGNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIExvb2sgaW4gdGhlIHdlbGwta25vd24gY3JlZGVudGlhbCBmaWxlIGxvY2F0aW9uLlxuICAgICAgICBjcmVkZW50aWFsID1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeUdldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tV2VsbEtub3duRmlsZShvcHRpb25zKTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGlmIChjcmVkZW50aWFsIGluc3RhbmNlb2Ygand0Y2xpZW50XzEuSldUKSB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbC5zY29wZXMgPSB0aGlzLnNjb3BlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBiYXNlZXh0ZXJuYWxjbGllbnRfMS5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50KSB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbC5zY29wZXMgPSB0aGlzLmdldEFueVNjb3BlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZUF1dGhfcHJlcGFyZUFuZENhY2hlQ2xpZW50KS5jYWxsKHRoaXMsIGNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9uIEdDRS5cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX2NoZWNrSXNHQ0UoKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zY29wZXMgPSB0aGlzLmdldEFueVNjb3BlcygpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZUF1dGhfcHJlcGFyZUFuZENhY2hlQ2xpZW50KS5jYWxsKHRoaXMsIG5ldyBjb21wdXRlY2xpZW50XzEuQ29tcHV0ZShvcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cG9ydHMuR29vZ2xlQXV0aEV4Y2VwdGlvbk1lc3NhZ2VzLk5PX0FEQ19GT1VORCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYXV0aCBsYXllciBpcyBydW5uaW5nIG9uIEdvb2dsZSBDb21wdXRlIEVuZ2luZS5cbiAgICAgKiBDaGVja3MgZm9yIEdDUCBSZXNpZGVuY3ksIHRoZW4gZmFsbGJhY2sgdG8gY2hlY2tpbmcgaWYgbWV0YWRhdGEgc2VydmVyXG4gICAgICogaXMgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYm9vbGVhbi5cbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cbiAgICBhc3luYyBfY2hlY2tJc0dDRSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJc0dDRSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrSXNHQ0UgPVxuICAgICAgICAgICAgICAgIGdjcE1ldGFkYXRhLmdldEdDUFJlc2lkZW5jeSgpIHx8IChhd2FpdCBnY3BNZXRhZGF0YS5pc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0lzR0NFO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBsb2FkIGRlZmF1bHQgY3JlZGVudGlhbHMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgcGF0aC4uXG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIE9BdXRoMkNsaWVudCBvciBudWxsLlxuICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIF90cnlHZXRBcHBsaWNhdGlvbkNyZWRlbnRpYWxzRnJvbUVudmlyb25tZW50VmFyaWFibGUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBjcmVkZW50aWFsc1BhdGggPSBwcm9jZXNzLmVudlsnR09PR0xFX0FQUExJQ0FUSU9OX0NSRURFTlRJQUxTJ10gfHxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Wydnb29nbGVfYXBwbGljYXRpb25fY3JlZGVudGlhbHMnXTtcbiAgICAgICAgaWYgKCFjcmVkZW50aWFsc1BhdGggfHwgY3JlZGVudGlhbHNQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRBcHBsaWNhdGlvbkNyZWRlbnRpYWxzRnJvbUZpbGVQYXRoKGNyZWRlbnRpYWxzUGF0aCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBgVW5hYmxlIHRvIHJlYWQgdGhlIGNyZWRlbnRpYWwgZmlsZSBzcGVjaWZpZWQgYnkgdGhlIEdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMUyBlbnZpcm9ubWVudCB2YXJpYWJsZTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gbG9hZCBkZWZhdWx0IGNyZWRlbnRpYWxzIGZyb20gYSB3ZWxsLWtub3duIGZpbGUgbG9jYXRpb25cbiAgICAgKiBAcmV0dXJuIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBPQXV0aDJDbGllbnQgb3IgbnVsbC5cbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cbiAgICBhc3luYyBfdHJ5R2V0QXBwbGljYXRpb25DcmVkZW50aWFsc0Zyb21XZWxsS25vd25GaWxlKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gRmlyc3QsIGZpZ3VyZSBvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlLCBkZXBlbmRpbmcgdXBvbiB0aGUgT1MgdHlwZS5cbiAgICAgICAgbGV0IGxvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX2lzV2luZG93cygpKSB7XG4gICAgICAgICAgICAvLyBXaW5kb3dzXG4gICAgICAgICAgICBsb2NhdGlvbiA9IHByb2Nlc3MuZW52WydBUFBEQVRBJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBMaW51eCBvciBNYWNcbiAgICAgICAgICAgIGNvbnN0IGhvbWUgPSBwcm9jZXNzLmVudlsnSE9NRSddO1xuICAgICAgICAgICAgaWYgKGhvbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBhdGguam9pbihob21lLCAnLmNvbmZpZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIGZvdW5kIHRoZSByb290IHBhdGgsIGV4cGFuZCBpdC5cbiAgICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBsb2NhdGlvbiA9IHBhdGguam9pbihsb2NhdGlvbiwgJ2djbG91ZCcsICdhcHBsaWNhdGlvbl9kZWZhdWx0X2NyZWRlbnRpYWxzLmpzb24nKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhsb2NhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBmaWxlIHNlZW1zIHRvIGV4aXN0LiBUcnkgdG8gdXNlIGl0LlxuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLl9nZXRBcHBsaWNhdGlvbkNyZWRlbnRpYWxzRnJvbUZpbGVQYXRoKGxvY2F0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gbG9hZCBkZWZhdWx0IGNyZWRlbnRpYWxzIGZyb20gYSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoLi5cbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gcmVhZC5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgT0F1dGgyQ2xpZW50XG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG4gICAgYXN5bmMgX2dldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tRmlsZVBhdGgoZmlsZVBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhdGggbG9va3MgbGlrZSBhIHN0cmluZy5cbiAgICAgICAgaWYgKCFmaWxlUGF0aCB8fCBmaWxlUGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpbGUgcGF0aCBpcyBpbnZhbGlkLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGZpbGUgYXQgdGhlIHBhdGguIGxzdGF0U3luYyB3aWxsIHRocm93IGlmIHRoZXJlIGlzXG4gICAgICAgIC8vIG5vdGhpbmcgdGhlcmUuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIHBhdGggdG8gYWN0dWFsIGZpbGUgaW4gY2FzZSBvZiBzeW1saW5rLiBFeHBlY3QgYSB0aHJvd24gZXJyb3JcbiAgICAgICAgICAgIC8vIGlmIG5vdCByZXNvbHZhYmxlLlxuICAgICAgICAgICAgZmlsZVBhdGggPSBmcy5yZWFscGF0aFN5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCFmcy5sc3RhdFN5bmMoZmlsZVBhdGgpLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBgVGhlIGZpbGUgYXQgJHtmaWxlUGF0aH0gZG9lcyBub3QgZXhpc3QsIG9yIGl0IGlzIG5vdCBhIGZpbGUuICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgb3BlbiBhIHJlYWQgc3RyZWFtIG9uIHRoZSBmaWxlLCBhbmQgcGFyc2UgaXQuXG4gICAgICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVN0cmVhbShyZWFkU3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY3JlZGVudGlhbHMgaW5zdGFuY2UgdXNpbmcgYSBnaXZlbiBpbXBlcnNvbmF0ZWQgaW5wdXQgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ganNvbiBUaGUgaW1wZXJzb25hdGVkIGlucHV0IG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyBKV1Qgb3IgVXNlclJlZnJlc2ggQ2xpZW50IHdpdGggZGF0YVxuICAgICAqL1xuICAgIGZyb21JbXBlcnNvbmF0ZWRKU09OKGpzb24pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBpZiAoIWpzb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwYXNzIGluIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyBhbiAgaW1wZXJzb25hdGVkIHJlZnJlc2ggdG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoanNvbi50eXBlICE9PSBpbXBlcnNvbmF0ZWRfMS5JTVBFUlNPTkFURURfQUNDT1VOVF9UWVBFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBcIiR7aW1wZXJzb25hdGVkXzEuSU1QRVJTT05BVEVEX0FDQ09VTlRfVFlQRX1cIiB0eXBlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLnNvdXJjZV9jcmVkZW50aWFscykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIHNvdXJjZV9jcmVkZW50aWFscyBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi5zZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluY29taW5nIEpTT04gb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gYSBzZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmwgZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VDbGllbnQgPSB0aGlzLmZyb21KU09OKGpzb24uc291cmNlX2NyZWRlbnRpYWxzKTtcbiAgICAgICAgaWYgKCgoX2EgPSBqc29uLnNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAyNTYpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUHJldmVudHMgRE9TIGF0dGFja3MuXG4gICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9nb29nbGUtYXV0aC1saWJyYXJ5LW5vZGVqcy9zZWN1cml0eS9jb2RlLXNjYW5uaW5nLzg1fVxuICAgICAgICAgICAgICoqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRhcmdldCBwcmluY2lwYWwgaXMgdG9vIGxvbmc6ICR7anNvbi5zZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXh0cmFjdCBzZXJ2aWNlIGFjY291bnQgZnJvbSBzZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmxcbiAgICAgICAgY29uc3QgdGFyZ2V0UHJpbmNpcGFsID0gKF9jID0gKF9iID0gLyg/PHRhcmdldD5bXi9dKyk6KGdlbmVyYXRlQWNjZXNzVG9rZW58Z2VuZXJhdGVJZFRva2VuKSQvLmV4ZWMoanNvbi5zZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmwpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ3JvdXBzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudGFyZ2V0O1xuICAgICAgICBpZiAoIXRhcmdldFByaW5jaXBhbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm5vdCBleHRyYWN0IHRhcmdldCBwcmluY2lwYWwgZnJvbSAke2pzb24uc2VydmljZV9hY2NvdW50X2ltcGVyc29uYXRpb25fdXJsfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldFNjb3BlcyA9IChfZCA9IHRoaXMuZ2V0QW55U2NvcGVzKCkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICByZXR1cm4gbmV3IGltcGVyc29uYXRlZF8xLkltcGVyc29uYXRlZCh7XG4gICAgICAgICAgICAuLi5qc29uLFxuICAgICAgICAgICAgc291cmNlQ2xpZW50LFxuICAgICAgICAgICAgdGFyZ2V0UHJpbmNpcGFsLFxuICAgICAgICAgICAgdGFyZ2V0U2NvcGVzOiBBcnJheS5pc0FycmF5KHRhcmdldFNjb3BlcykgPyB0YXJnZXRTY29wZXMgOiBbdGFyZ2V0U2NvcGVzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGNyZWRlbnRpYWxzIGluc3RhbmNlIHVzaW5nIHRoZSBnaXZlbiBpbnB1dCBvcHRpb25zLlxuICAgICAqIFRoaXMgY2xpZW50IGlzIG5vdCBjYWNoZWQuXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiBJZiB5b3UgYWNjZXB0IGEgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uIChjcmVkZW50aWFsIEpTT04vRmlsZS9TdHJlYW0pIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlIGZvciBhdXRoZW50aWNhdGlvbiB0byBHb29nbGUgQ2xvdWQsIHlvdSBtdXN0IHZhbGlkYXRlIGl0IGJlZm9yZSBwcm92aWRpbmcgaXQgdG8gYW55IEdvb2dsZSBBUEkgb3IgbGlicmFyeS4gUHJvdmlkaW5nIGFuIHVudmFsaWRhdGVkIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbiB0byBHb29nbGUgQVBJcyBjYW4gY29tcHJvbWlzZSB0aGUgc2VjdXJpdHkgb2YgeW91ciBzeXN0ZW1zIGFuZCBkYXRhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8ge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL2V4dGVybmFsL2V4dGVybmFsbHktc291cmNlZC1jcmVkZW50aWFscyBWYWxpZGF0ZSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb25zIGZyb20gZXh0ZXJuYWwgc291cmNlc30uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ganNvbiBUaGUgaW5wdXQgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBKV1Qgb3IgVXNlclJlZnJlc2ggb3B0aW9ucyBmb3IgdGhlIGNsaWVudFxuICAgICAqIEByZXR1cm5zIEpXVCBvciBVc2VyUmVmcmVzaCBDbGllbnQgd2l0aCBkYXRhXG4gICAgICovXG4gICAgZnJvbUpTT04oanNvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGxldCBjbGllbnQ7XG4gICAgICAgIC8vIHVzZXIncyBwcmVmZXJyZWQgdW5pdmVyc2UgZG9tYWluXG4gICAgICAgIGNvbnN0IHByZWZlcnJlZFVuaXZlcnNlRG9tYWluID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShvcHRpb25zKS5nZXQoJ3VuaXZlcnNlX2RvbWFpbicpO1xuICAgICAgICBpZiAoanNvbi50eXBlID09PSByZWZyZXNoY2xpZW50XzEuVVNFUl9SRUZSRVNIX0FDQ09VTlRfVFlQRSkge1xuICAgICAgICAgICAgY2xpZW50ID0gbmV3IHJlZnJlc2hjbGllbnRfMS5Vc2VyUmVmcmVzaENsaWVudChvcHRpb25zKTtcbiAgICAgICAgICAgIGNsaWVudC5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChqc29uLnR5cGUgPT09IGltcGVyc29uYXRlZF8xLklNUEVSU09OQVRFRF9BQ0NPVU5UX1RZUEUpIHtcbiAgICAgICAgICAgIGNsaWVudCA9IHRoaXMuZnJvbUltcGVyc29uYXRlZEpTT04oanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoanNvbi50eXBlID09PSBiYXNlZXh0ZXJuYWxjbGllbnRfMS5FWFRFUk5BTF9BQ0NPVU5UX1RZUEUpIHtcbiAgICAgICAgICAgIGNsaWVudCA9IGV4dGVybmFsY2xpZW50XzEuRXh0ZXJuYWxBY2NvdW50Q2xpZW50LmZyb21KU09OKGpzb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2xpZW50LnNjb3BlcyA9IHRoaXMuZ2V0QW55U2NvcGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoanNvbi50eXBlID09PSBleHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudF8xLkVYVEVSTkFMX0FDQ09VTlRfQVVUSE9SSVpFRF9VU0VSX1RZUEUpIHtcbiAgICAgICAgICAgIGNsaWVudCA9IG5ldyBleHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudF8xLkV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50KGpzb24sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5zY29wZXMgPSB0aGlzLnNjb3BlcztcbiAgICAgICAgICAgIGNsaWVudCA9IG5ldyBqd3RjbGllbnRfMS5KV1Qob3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnNldEdhcGljSldUVmFsdWVzKGNsaWVudCk7XG4gICAgICAgICAgICBjbGllbnQuZnJvbUpTT04oanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZlcnJlZFVuaXZlcnNlRG9tYWluKSB7XG4gICAgICAgICAgICBjbGllbnQudW5pdmVyc2VEb21haW4gPSBwcmVmZXJyZWRVbml2ZXJzZURvbWFpbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBKV1Qgb3IgVXNlclJlZnJlc2hDbGllbnQgZnJvbSBKYXZhU2NyaXB0IG9iamVjdCwgY2FjaGluZyBib3RoIHRoZVxuICAgICAqIG9iamVjdCB1c2VkIHRvIGluc3RhbnRpYXRlIGFuZCB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBqc29uIFRoZSBpbnB1dCBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIEpXVCBvciBVc2VyUmVmcmVzaCBvcHRpb25zIGZvciB0aGUgY2xpZW50XG4gICAgICogQHJldHVybnMgSldUIG9yIFVzZXJSZWZyZXNoIENsaWVudCB3aXRoIGRhdGFcbiAgICAgKi9cbiAgICBfY2FjaGVDbGllbnRGcm9tSlNPTihqc29uLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZnJvbUpTT04oanNvbiwgb3B0aW9ucyk7XG4gICAgICAgIC8vIGNhY2hlIGJvdGggcmF3IGRhdGEgdXNlZCB0byBpbnN0YW50aWF0ZSBjbGllbnQgYW5kIGNsaWVudCBpdHNlbGYuXG4gICAgICAgIHRoaXMuanNvbkNvbnRlbnQgPSBqc29uO1xuICAgICAgICB0aGlzLmNhY2hlZENyZWRlbnRpYWwgPSBjbGllbnQ7XG4gICAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfVxuICAgIGZyb21TdHJlYW0oaW5wdXRTdHJlYW0sIG9wdGlvbnNPckNhbGxiYWNrID0ge30sIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9uc09yQ2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yQ2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSwgb3B0aW9ucykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwYXNzIGluIGEgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIEdvb2dsZSBhdXRoIHNldHRpbmdzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICAgICAgICBpbnB1dFN0cmVhbVxuICAgICAgICAgICAgICAgIC5zZXRFbmNvZGluZygndXRmOCcpXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCBjaHVuayA9PiBjaHVua3MucHVzaChjaHVuaykpXG4gICAgICAgICAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNodW5rcy5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5fY2FjaGVDbGllbnRGcm9tSlNPTihkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGZhaWxlZCBwYXJzaW5nIHRoaXMua2V5RmlsZU5hbWUsIGFzc3VtZSB0aGF0IGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIFBFTSBvciBwMTIgY2VydGlmaWNhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMua2V5RmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGp3dGNsaWVudF8xLkpXVCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jbGllbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUZpbGU6IHRoaXMua2V5RmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkQ3JlZGVudGlhbCA9IGNsaWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R2FwaWNKV1RWYWx1ZXMoY2xpZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGNsaWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gQVBJIGtleSBzdHJpbmcuXG4gICAgICogVGhlIGNyZWF0ZWQgY2xpZW50IGlzIG5vdCBjYWNoZWQuIEluIG9yZGVyIHRvIGNyZWF0ZSBhbmQgY2FjaGUgaXQgdXNlIHRoZSB7QGxpbmsgR29vZ2xlQXV0aC5nZXRDbGllbnQgYGdldENsaWVudGB9IG1ldGhvZCBhZnRlciBmaXJzdCBwcm92aWRpbmcgYW4ge0BsaW5rIEdvb2dsZUF1dGguYXBpS2V5IGBhcGlLZXlgfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcGlLZXkgVGhlIEFQSSBrZXkgc3RyaW5nXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQW4gb3B0aW9uYWwgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHJldHVybnMgQSBKV1QgbG9hZGVkIGZyb20gdGhlIGtleVxuICAgICAqL1xuICAgIGZyb21BUElLZXkoYXBpS2V5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBqd3RjbGllbnRfMS5KV1QoeyAuLi5vcHRpb25zLCBhcGlLZXkgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgY3VycmVudCBvcGVyYXRpbmcgc3lzdGVtIGlzIFdpbmRvd3MuXG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG4gICAgX2lzV2luZG93cygpIHtcbiAgICAgICAgY29uc3Qgc3lzID0gb3MucGxhdGZvcm0oKTtcbiAgICAgICAgaWYgKHN5cyAmJiBzeXMubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgIGlmIChzeXMuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCkgPT09ICd3aW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIEdvb2dsZSBDbG91ZCBTREsgY29tbWFuZCB0aGF0IHByaW50cyB0aGUgZGVmYXVsdCBwcm9qZWN0IElEXG4gICAgICovXG4gICAgYXN5bmMgZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0SWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICgwLCBjaGlsZF9wcm9jZXNzXzEuZXhlYykoJ2djbG91ZCBjb25maWcgY29uZmlnLWhlbHBlciAtLWZvcm1hdCBqc29uJywgKGVyciwgc3Rkb3V0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIgJiYgc3Rkb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9qZWN0SWQgPSBKU09OLnBhcnNlKHN0ZG91dCkuY29uZmlndXJhdGlvbi5wcm9wZXJ0aWVzLmNvcmUucHJvamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocHJvamVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBwcm9qZWN0IGlkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldFByb2R1Y3Rpb25Qcm9qZWN0SWQoKSB7XG4gICAgICAgIHJldHVybiAocHJvY2Vzcy5lbnZbJ0dDTE9VRF9QUk9KRUNUJ10gfHxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydHT09HTEVfQ0xPVURfUFJPSkVDVCddIHx8XG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnZ2Nsb3VkX3Byb2plY3QnXSB8fFxuICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ2dvb2dsZV9jbG91ZF9wcm9qZWN0J10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2FkcyB0aGUgcHJvamVjdCBpZCBmcm9tIHRoZSBHT09HTEVfQVBQTElDQVRJT05fQ1JFREVOVElBTFMganNvbiBmaWxlLlxuICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIGdldEZpbGVQcm9qZWN0SWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZENyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIC8vIFRyeSB0byByZWFkIHRoZSBwcm9qZWN0IElEIGZyb20gdGhlIGNhY2hlZCBjcmVkZW50aWFscyBmaWxlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRDcmVkZW50aWFsLnByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhlIHByb2plY3RJZCBpcyBsb2FkZWQgZnJvbSB0aGUga2V5RmlsZSBpZiBhdmFpbGFibGUuXG4gICAgICAgIGlmICh0aGlzLmtleUZpbGVuYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICAgICAgICBpZiAoY3JlZHMgJiYgY3JlZHMucHJvamVjdElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWRzLnByb2plY3RJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIGNyZWRlbnRpYWxzIGZpbGUgYW5kIHJlYWQgaXRzIHByb2plY3QgSURcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX3RyeUdldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tRW52aXJvbm1lbnRWYXJpYWJsZSgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgcmV0dXJuIHIucHJvamVjdElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvamVjdCBJRCBmcm9tIGV4dGVybmFsIGFjY291bnQgY2xpZW50IGlmIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRFeHRlcm5hbEFjY291bnRDbGllbnRQcm9qZWN0SWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uQ29udGVudCB8fCB0aGlzLmpzb25Db250ZW50LnR5cGUgIT09IGJhc2VleHRlcm5hbGNsaWVudF8xLkVYVEVSTkFMX0FDQ09VTlRfVFlQRSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgICAvLyBEbyBub3Qgc3VwcHJlc3MgdGhlIHVuZGVybHlpbmcgZXJyb3IsIGFzIHRoZSBlcnJvciBjb3VsZCBjb250YWluIGhlbHBmdWxcbiAgICAgICAgLy8gaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZyBhbmQgZml4aW5nLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3JcbiAgICAgICAgLy8gZXh0ZXJuYWwgYWNjb3VudCBjcmVkcyBhcyBpbiBvcmRlciB0byBnZXQgdGhlIHByb2plY3QgSUQsIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gb3BlcmF0aW9ucyBoYXZlIHRvIHN1Y2NlZWQ6XG4gICAgICAgIC8vIDEuIFZhbGlkIGNyZWRlbnRpYWxzIGZpbGUgc2hvdWxkIGJlIHN1cHBsaWVkLlxuICAgICAgICAvLyAyLiBBYmlsaXR5IHRvIHJldHJpZXZlIGFjY2VzcyB0b2tlbnMgZnJvbSBTVFMgdG9rZW4gZXhjaGFuZ2UgQVBJLlxuICAgICAgICAvLyAzLiBBYmlsaXR5IHRvIGV4Y2hhbmdlIGZvciBzZXJ2aWNlIGFjY291bnQgaW1wZXJzb25hdGVkIGNyZWRlbnRpYWxzIChpZlxuICAgICAgICAvLyAgICBlbmFibGVkKS5cbiAgICAgICAgLy8gNC4gQWJpbGl0eSB0byBnZXQgcHJvamVjdCBpbmZvIHVzaW5nIHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSBzdGVwIDIgb3IgMy5cbiAgICAgICAgLy8gV2l0aG91dCBzdXJmYWNpbmcgdGhlIGVycm9yLCBpdCBpcyBoYXJkZXIgZm9yIGRldmVsb3BlcnMgdG8gZGV0ZXJtaW5lXG4gICAgICAgIC8vIHdoaWNoIHN0ZXAgd2VudCB3cm9uZy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNyZWRzLmdldFByb2plY3RJZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBDb21wdXRlIEVuZ2luZSBwcm9qZWN0IElEIGlmIGl0IGNhbiBiZSBpbmZlcnJlZC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRHQ0VQcm9qZWN0SWQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByID0gYXdhaXQgZ2NwTWV0YWRhdGEucHJvamVjdCgncHJvamVjdC1pZCcpO1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBhbnkgZXJyb3JzXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDcmVkZW50aWFscyhjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q3JlZGVudGlhbHNBc3luYygpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3JlZGVudGlhbHNBc3luYygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGdldENyZWRlbnRpYWxzQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICAgIGlmIChjbGllbnQgaW5zdGFuY2VvZiBpbXBlcnNvbmF0ZWRfMS5JbXBlcnNvbmF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGNsaWVudF9lbWFpbDogY2xpZW50LmdldFRhcmdldFByaW5jaXBhbCgpIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudCBpbnN0YW5jZW9mIGJhc2VleHRlcm5hbGNsaWVudF8xLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VBY2NvdW50RW1haWwgPSBjbGllbnQuZ2V0U2VydmljZUFjY291bnRFbWFpbCgpO1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VBY2NvdW50RW1haWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjbGllbnRfZW1haWw6IHNlcnZpY2VBY2NvdW50RW1haWwsXG4gICAgICAgICAgICAgICAgICAgIHVuaXZlcnNlX2RvbWFpbjogY2xpZW50LnVuaXZlcnNlRG9tYWluLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuanNvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2xpZW50X2VtYWlsOiB0aGlzLmpzb25Db250ZW50LmNsaWVudF9lbWFpbCxcbiAgICAgICAgICAgICAgICBwcml2YXRlX2tleTogdGhpcy5qc29uQ29udGVudC5wcml2YXRlX2tleSxcbiAgICAgICAgICAgICAgICB1bml2ZXJzZV9kb21haW46IHRoaXMuanNvbkNvbnRlbnQudW5pdmVyc2VfZG9tYWluLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXdhaXQgdGhpcy5fY2hlY2tJc0dDRSgpKSB7XG4gICAgICAgICAgICBjb25zdCBbY2xpZW50X2VtYWlsLCB1bml2ZXJzZV9kb21haW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGdjcE1ldGFkYXRhLmluc3RhbmNlKCdzZXJ2aWNlLWFjY291bnRzL2RlZmF1bHQvZW1haWwnKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFVuaXZlcnNlRG9tYWluKCksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNsaWVudF9lbWFpbCwgdW5pdmVyc2VfZG9tYWluIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cG9ydHMuR29vZ2xlQXV0aEV4Y2VwdGlvbk1lc3NhZ2VzLk5PX0NSRURFTlRJQUxTX0ZPVU5EKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSBvYnRhaW4gYW4ge0BsaW5rIEF1dGhDbGllbnQgYEF1dGhDbGllbnRgfSBiYXNlZCBvbiB0aGVcbiAgICAgKiBwcm92aWRlZCBjb25maWd1cmF0aW9uLiBJZiBubyBvcHRpb25zIHdlcmUgcGFzc2VkLCB1c2UgQXBwbGljYXRpb25cbiAgICAgKiBEZWZhdWx0IENyZWRlbnRpYWxzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldENsaWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkQ3JlZGVudGlhbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgYW4gZXhpc3RpbmcgYXV0aCBjbGllbnQgcmVxdWVzdCwgb3IgY2FjaGUgYSBuZXcgb25lXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0dvb2dsZUF1dGhfcGVuZGluZ0F1dGhDbGllbnQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfcGVuZGluZ0F1dGhDbGllbnQsIFwiZlwiKSB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVBdXRoX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVBdXRoX2RldGVybWluZUNsaWVudCkuY2FsbCh0aGlzKSwgXCJmXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfcGVuZGluZ0F1dGhDbGllbnQsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBwZW5kaW5nIGF1dGggY2xpZW50IGluIGNhc2UgaXQgaXMgY2hhbmdlZCBsYXRlclxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfR29vZ2xlQXV0aF9wZW5kaW5nQXV0aENsaWVudCwgbnVsbCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbGllbnQgd2hpY2ggd2lsbCBmZXRjaCBhbiBJRCB0b2tlbiBmb3IgYXV0aG9yaXphdGlvbi5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0QXVkaWVuY2UgdGhlIGF1ZGllbmNlIGZvciB0aGUgZmV0Y2hlZCBJRCB0b2tlbi5cbiAgICAgKiBAcmV0dXJucyBJZFRva2VuQ2xpZW50IGZvciBtYWtpbmcgSFRUUCBjYWxscyBhdXRoZW50aWNhdGVkIHdpdGggSUQgdG9rZW5zLlxuICAgICAqL1xuICAgIGFzeW5jIGdldElkVG9rZW5DbGllbnQodGFyZ2V0QXVkaWVuY2UpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgaWYgKCEoJ2ZldGNoSWRUb2tlbicgaW4gY2xpZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmV0Y2ggSUQgdG9rZW4gaW4gdGhpcyBlbnZpcm9ubWVudCwgdXNlIEdDRSBvciBzZXQgdGhlIEdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHNlcnZpY2UgYWNjb3VudCBjcmVkZW50aWFscyBKU09OIGZpbGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBpZHRva2VuY2xpZW50XzEuSWRUb2tlbkNsaWVudCh7IHRhcmdldEF1ZGllbmNlLCBpZFRva2VuUHJvdmlkZXI6IGNsaWVudCB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSBvYnRhaW4gYXBwbGljYXRpb24gZGVmYXVsdCBjcmVkZW50aWFscywgYW5kIHJldHVyblxuICAgICAqIGFuIGFjY2VzcyB0b2tlbiBmb3IgbWFraW5nIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgICByZXR1cm4gKGF3YWl0IGNsaWVudC5nZXRBY2Nlc3NUb2tlbigpKS50b2tlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2J0YWluIHRoZSBIVFRQIGhlYWRlcnMgdGhhdCB3aWxsIHByb3ZpZGUgYXV0aG9yaXphdGlvbiBmb3IgYSBnaXZlblxuICAgICAqIHJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UmVxdWVzdEhlYWRlcnModXJsKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICAgIHJldHVybiBjbGllbnQuZ2V0UmVxdWVzdEhlYWRlcnModXJsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2J0YWluIGNyZWRlbnRpYWxzIGZvciBhIHJlcXVlc3QsIHRoZW4gYXR0YWNoIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXJzIHRvXG4gICAgICogdGhlIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0cyBBeGlvcyBvciBSZXF1ZXN0IG9wdGlvbnMgb24gd2hpY2ggdG8gYXR0YWNoIHRoZSBoZWFkZXJzXG4gICAgICovXG4gICAgYXN5bmMgYXV0aG9yaXplUmVxdWVzdChvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICBjb25zdCB1cmwgPSBvcHRzLnVybCB8fCBvcHRzLnVyaTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IGNsaWVudC5nZXRSZXF1ZXN0SGVhZGVycyh1cmwpO1xuICAgICAgICBvcHRzLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdHMuaGVhZGVycyB8fCB7fSwgaGVhZGVycyk7XG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IG9idGFpbiBhcHBsaWNhdGlvbiBkZWZhdWx0IGNyZWRlbnRpYWxzLCBhbmQgbWFrZSBhblxuICAgICAqIEhUVFAgcmVxdWVzdCB1c2luZyB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0cyBBeGlvcyByZXF1ZXN0IG9wdGlvbnMgZm9yIHRoZSBIVFRQIHJlcXVlc3QuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBhc3luYyByZXF1ZXN0KG9wdHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgcnVubmluZy5cbiAgICAgKi9cbiAgICBnZXRFbnYoKSB7XG4gICAgICAgIHJldHVybiAoMCwgZW52RGV0ZWN0XzEuZ2V0RW52KSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaWduIHRoZSBnaXZlbiBkYXRhIHdpdGggdGhlIGN1cnJlbnQgcHJpdmF0ZSBrZXksIG9yIGdvIG91dFxuICAgICAqIHRvIHRoZSBJQU0gQVBJIHRvIHNpZ24gaXQuXG4gICAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gYmUgc2lnbmVkLlxuICAgICAqIEBwYXJhbSBlbmRwb2ludCBBIGN1c3RvbSBlbmRwb2ludCB0byB1c2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYFxuICAgICAqIHNpZ24oJ2RhdGEnLCAnaHR0cHM6Ly9pYW1jcmVkZW50aWFscy5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy8tL3NlcnZpY2VBY2NvdW50cy8nKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduKGRhdGEsIGVuZHBvaW50KSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHVuaXZlcnNlID0gYXdhaXQgdGhpcy5nZXRVbml2ZXJzZURvbWFpbigpO1xuICAgICAgICBlbmRwb2ludCA9XG4gICAgICAgICAgICBlbmRwb2ludCB8fFxuICAgICAgICAgICAgICAgIGBodHRwczovL2lhbWNyZWRlbnRpYWxzLiR7dW5pdmVyc2V9L3YxL3Byb2plY3RzLy0vc2VydmljZUFjY291bnRzL2A7XG4gICAgICAgIGlmIChjbGllbnQgaW5zdGFuY2VvZiBpbXBlcnNvbmF0ZWRfMS5JbXBlcnNvbmF0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGNsaWVudC5zaWduKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNpZ25lZC5zaWduZWRCbG9iO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyeXB0byA9ICgwLCBjcnlwdG9fMS5jcmVhdGVDcnlwdG8pKCk7XG4gICAgICAgIGlmIChjbGllbnQgaW5zdGFuY2VvZiBqd3RjbGllbnRfMS5KV1QgJiYgY2xpZW50LmtleSkge1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IGF3YWl0IGNyeXB0by5zaWduKGNsaWVudC5rZXksIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNpZ247XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKCk7XG4gICAgICAgIGlmICghY3JlZHMuY2xpZW50X2VtYWlsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaWduIGRhdGEgd2l0aG91dCBgY2xpZW50X2VtYWlsYC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zaWduQmxvYihjcnlwdG8sIGNyZWRzLmNsaWVudF9lbWFpbCwgZGF0YSwgZW5kcG9pbnQpO1xuICAgIH1cbiAgICBhc3luYyBzaWduQmxvYihjcnlwdG8sIGVtYWlsT3JVbmlxdWVJZCwgZGF0YSwgZW5kcG9pbnQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChlbmRwb2ludCArIGAke2VtYWlsT3JVbmlxdWVJZH06c2lnbkJsb2JgKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgdXJsOiB1cmwuaHJlZixcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBjcnlwdG8uZW5jb2RlQmFzZTY0U3RyaW5nVXRmOChkYXRhKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXRyeTogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgaHR0cE1ldGhvZHNUb1JldHJ5OiBbJ1BPU1QnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzLmRhdGEuc2lnbmVkQmxvYjtcbiAgICB9XG59XG5leHBvcnRzLkdvb2dsZUF1dGggPSBHb29nbGVBdXRoO1xuX0dvb2dsZUF1dGhfcGVuZGluZ0F1dGhDbGllbnQgPSBuZXcgV2Vha01hcCgpLCBfR29vZ2xlQXV0aF9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQgPSBhc3luYyBmdW5jdGlvbiBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQoY3JlZGVudGlhbCwgcXVvdGFQcm9qZWN0SWRPdmVycmlkZSA9IHByb2Nlc3MuZW52WydHT09HTEVfQ0xPVURfUVVPVEFfUFJPSkVDVCddIHx8IG51bGwpIHtcbiAgICBjb25zdCBwcm9qZWN0SWQgPSBhd2FpdCB0aGlzLmdldFByb2plY3RJZE9wdGlvbmFsKCk7XG4gICAgaWYgKHF1b3RhUHJvamVjdElkT3ZlcnJpZGUpIHtcbiAgICAgICAgY3JlZGVudGlhbC5xdW90YVByb2plY3RJZCA9IHF1b3RhUHJvamVjdElkT3ZlcnJpZGU7XG4gICAgfVxuICAgIHRoaXMuY2FjaGVkQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIHsgY3JlZGVudGlhbCwgcHJvamVjdElkIH07XG59LCBfR29vZ2xlQXV0aF9kZXRlcm1pbmVDbGllbnQgPSBhc3luYyBmdW5jdGlvbiBfR29vZ2xlQXV0aF9kZXRlcm1pbmVDbGllbnQoKSB7XG4gICAgaWYgKHRoaXMuanNvbkNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQ2xpZW50RnJvbUpTT04odGhpcy5qc29uQ29udGVudCwgdGhpcy5jbGllbnRPcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5rZXlGaWxlbmFtZSkge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmtleUZpbGVuYW1lKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZyb21TdHJlYW1Bc3luYyhzdHJlYW0sIHRoaXMuY2xpZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZnJvbUFQSUtleSh0aGlzLmFwaUtleSwgdGhpcy5jbGllbnRPcHRpb25zKTtcbiAgICAgICAgY2xpZW50LnNjb3BlcyA9IHRoaXMuc2NvcGVzO1xuICAgICAgICBjb25zdCB7IGNyZWRlbnRpYWwgfSA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZUF1dGhfcHJlcGFyZUFuZENhY2hlQ2xpZW50KS5jYWxsKHRoaXMsIGNsaWVudCk7XG4gICAgICAgIHJldHVybiBjcmVkZW50aWFsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBjcmVkZW50aWFsIH0gPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uRGVmYXVsdEFzeW5jKHRoaXMuY2xpZW50T3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjcmVkZW50aWFsO1xuICAgIH1cbn07XG4vKipcbiAqIEV4cG9ydCBEZWZhdWx0VHJhbnNwb3J0ZXIgYXMgYSBzdGF0aWMgcHJvcGVydHkgb2YgdGhlIGNsYXNzLlxuICovXG5Hb29nbGVBdXRoLkRlZmF1bHRUcmFuc3BvcnRlciA9IHRyYW5zcG9ydGVyc18xLkRlZmF1bHRUcmFuc3BvcnRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSUFNQXV0aCA9IHZvaWQgMDtcbmNsYXNzIElBTUF1dGgge1xuICAgIC8qKlxuICAgICAqIElBTSBjcmVkZW50aWFscy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciB0aGUgaWFtIGF1dGhvcml0eSBzZWxlY3RvclxuICAgICAqIEBwYXJhbSB0b2tlbiB0aGUgdG9rZW5cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgdG9rZW4pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY3F1aXJlIHRoZSBIVFRQIGhlYWRlcnMgcmVxdWlyZWQgdG8gbWFrZSBhbiBhdXRoZW50aWNhdGVkIHJlcXVlc3QuXG4gICAgICovXG4gICAgZ2V0UmVxdWVzdEhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAneC1nb29nLWlhbS1hdXRob3JpdHktc2VsZWN0b3InOiB0aGlzLnNlbGVjdG9yLFxuICAgICAgICAgICAgJ3gtZ29vZy1pYW0tYXV0aG9yaXphdGlvbi10b2tlbic6IHRoaXMudG9rZW4sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5JQU1BdXRoID0gSUFNQXV0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRG93bnNjb3BlZENsaWVudCA9IGV4cG9ydHMuRVhQSVJBVElPTl9USU1FX09GRlNFVCA9IGV4cG9ydHMuTUFYX0FDQ0VTU19CT1VOREFSWV9SVUxFU19DT1VOVCA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBhdXRoY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoY2xpZW50XCIpO1xuY29uc3Qgc3RzID0gcmVxdWlyZShcIi4vc3RzY3JlZGVudGlhbHNcIik7XG4vKipcbiAqIFRoZSByZXF1aXJlZCB0b2tlbiBleGNoYW5nZSBncmFudF90eXBlOiByZmM4NjkzI3NlY3Rpb24tMi4xXG4gKi9cbmNvbnN0IFNUU19HUkFOVF9UWVBFID0gJ3VybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOnRva2VuLWV4Y2hhbmdlJztcbi8qKlxuICogVGhlIHJlcXVlc3RlZCB0b2tlbiBleGNoYW5nZSByZXF1ZXN0ZWRfdG9rZW5fdHlwZTogcmZjODY5MyNzZWN0aW9uLTIuMVxuICovXG5jb25zdCBTVFNfUkVRVUVTVF9UT0tFTl9UWVBFID0gJ3VybjppZXRmOnBhcmFtczpvYXV0aDp0b2tlbi10eXBlOmFjY2Vzc190b2tlbic7XG4vKipcbiAqIFRoZSByZXF1ZXN0ZWQgdG9rZW4gZXhjaGFuZ2Ugc3ViamVjdF90b2tlbl90eXBlOiByZmM4NjkzI3NlY3Rpb24tMi4xXG4gKi9cbmNvbnN0IFNUU19TVUJKRUNUX1RPS0VOX1RZUEUgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6YWNjZXNzX3Rva2VuJztcbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFjY2VzcyBib3VuZGFyeSBydWxlcyBhIENyZWRlbnRpYWwgQWNjZXNzIEJvdW5kYXJ5XG4gKiBjYW4gY29udGFpbi5cbiAqL1xuZXhwb3J0cy5NQVhfQUNDRVNTX0JPVU5EQVJZX1JVTEVTX0NPVU5UID0gMTA7XG4vKipcbiAqIE9mZnNldCB0byB0YWtlIGludG8gYWNjb3VudCBuZXR3b3JrIGRlbGF5cyBhbmQgc2VydmVyIGNsb2NrIHNrZXdzLlxuICovXG5leHBvcnRzLkVYUElSQVRJT05fVElNRV9PRkZTRVQgPSA1ICogNjAgKiAxMDAwO1xuLyoqXG4gKiBEZWZpbmVzIGEgc2V0IG9mIEdvb2dsZSBjcmVkZW50aWFscyB0aGF0IGFyZSBkb3duc2NvcGVkIGZyb20gYW4gZXhpc3Rpbmcgc2V0XG4gKiBvZiBHb29nbGUgT0F1dGgyIGNyZWRlbnRpYWxzLiBUaGlzIGlzIHVzZWZ1bCB0byByZXN0cmljdCB0aGUgSWRlbnRpdHkgYW5kXG4gKiBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSBwZXJtaXNzaW9ucyB0aGF0IGEgc2hvcnQtbGl2ZWQgY3JlZGVudGlhbCBjYW4gdXNlLlxuICogVGhlIGNvbW1vbiBwYXR0ZXJuIG9mIHVzYWdlIGlzIHRvIGhhdmUgYSB0b2tlbiBicm9rZXIgd2l0aCBlbGV2YXRlZCBhY2Nlc3NcbiAqIGdlbmVyYXRlIHRoZXNlIGRvd25zY29wZWQgY3JlZGVudGlhbHMgZnJvbSBoaWdoZXIgYWNjZXNzIHNvdXJjZSBjcmVkZW50aWFsc1xuICogYW5kIHBhc3MgdGhlIGRvd25zY29wZWQgc2hvcnQtbGl2ZWQgYWNjZXNzIHRva2VucyB0byBhIHRva2VuIGNvbnN1bWVyIHZpYVxuICogc29tZSBzZWN1cmUgYXV0aGVudGljYXRlZCBjaGFubmVsIGZvciBsaW1pdGVkIGFjY2VzcyB0byBHb29nbGUgQ2xvdWQgU3RvcmFnZVxuICogcmVzb3VyY2VzLlxuICovXG5jbGFzcyBEb3duc2NvcGVkQ2xpZW50IGV4dGVuZHMgYXV0aGNsaWVudF8xLkF1dGhDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhIGRvd25zY29wZWQgY2xpZW50IG9iamVjdCB1c2luZyB0aGUgcHJvdmlkZWQgc291cmNlXG4gICAgICogQXV0aENsaWVudCBhbmQgY3JlZGVudGlhbCBhY2Nlc3MgYm91bmRhcnkgcnVsZXMuXG4gICAgICogVG8gZG93bnNjb3BlIHBlcm1pc3Npb25zIG9mIGEgc291cmNlIEF1dGhDbGllbnQsIGEgQ3JlZGVudGlhbCBBY2Nlc3NcbiAgICAgKiBCb3VuZGFyeSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXNvdXJjZXMgdGhlIG5ldyBjcmVkZW50aWFsIGNhbiBhY2Nlc3MsIGFzXG4gICAgICogd2VsbCBhcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIGVhY2hcbiAgICAgKiByZXNvdXJjZSwgaGFzIHRvIGJlIGRlZmluZWQuIEEgZG93bnNjb3BlZCBjbGllbnQgY2FuIHRoZW4gYmUgaW5zdGFudGlhdGVkXG4gICAgICogdXNpbmcgdGhlIHNvdXJjZSBBdXRoQ2xpZW50IGFuZCB0aGUgQ3JlZGVudGlhbCBBY2Nlc3MgQm91bmRhcnkuXG4gICAgICogQHBhcmFtIGF1dGhDbGllbnQgVGhlIHNvdXJjZSBBdXRoQ2xpZW50IHRvIGJlIGRvd25zY29wZWQgYmFzZWQgb24gdGhlXG4gICAgICogICBwcm92aWRlZCBDcmVkZW50aWFsIEFjY2VzcyBCb3VuZGFyeSBydWxlcy5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbEFjY2Vzc0JvdW5kYXJ5IFRoZSBDcmVkZW50aWFsIEFjY2VzcyBCb3VuZGFyeSB3aGljaFxuICAgICAqICAgY29udGFpbnMgYSBsaXN0IG9mIGFjY2VzcyBib3VuZGFyeSBydWxlcy4gRWFjaCBydWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uXG4gICAgICogICBvbiB0aGUgcmVzb3VyY2UgdGhhdCB0aGUgcnVsZSBhcHBsaWVzIHRvLCB0aGUgdXBwZXIgYm91bmQgb2YgdGhlXG4gICAgICogICBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhhdCByZXNvdXJjZSBhbmQgYW4gb3B0aW9uYWxcbiAgICAgKiAgIGNvbmRpdGlvbiB0byBmdXJ0aGVyIHJlc3RyaWN0IHBlcm1pc3Npb25zLlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsT3B0aW9ucyAqKkRFUFJFQ0FURUQsIHNldCB0aGlzIGluIHRoZSBwcm92aWRlZCBgYXV0aENsaWVudGAuKipcbiAgICAgKiAgIE9wdGlvbmFsIGFkZGl0aW9uYWwgYmVoYXZpb3IgY3VzdG9taXphdGlvbiBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBxdW90YVByb2plY3RJZCAqKkRFUFJFQ0FURUQsIHNldCB0aGlzIGluIHRoZSBwcm92aWRlZCBgYXV0aENsaWVudGAuKipcbiAgICAgKiAgIE9wdGlvbmFsIHF1b3RhIHByb2plY3QgaWQgZm9yIHNldHRpbmcgdXAgaW4gdGhlIHgtZ29vZy11c2VyLXByb2plY3QgaGVhZGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGF1dGhDbGllbnQsIGNyZWRlbnRpYWxBY2Nlc3NCb3VuZGFyeSwgYWRkaXRpb25hbE9wdGlvbnMsIHF1b3RhUHJvamVjdElkKSB7XG4gICAgICAgIHN1cGVyKHsgLi4uYWRkaXRpb25hbE9wdGlvbnMsIHF1b3RhUHJvamVjdElkIH0pO1xuICAgICAgICB0aGlzLmF1dGhDbGllbnQgPSBhdXRoQ2xpZW50O1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxBY2Nlc3NCb3VuZGFyeSA9IGNyZWRlbnRpYWxBY2Nlc3NCb3VuZGFyeTtcbiAgICAgICAgLy8gQ2hlY2sgMS0xMCBBY2Nlc3MgQm91bmRhcnkgUnVsZXMgYXJlIGRlZmluZWQgd2l0aGluIENyZWRlbnRpYWwgQWNjZXNzXG4gICAgICAgIC8vIEJvdW5kYXJ5LlxuICAgICAgICBpZiAoY3JlZGVudGlhbEFjY2Vzc0JvdW5kYXJ5LmFjY2Vzc0JvdW5kYXJ5LmFjY2Vzc0JvdW5kYXJ5UnVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBhY2Nlc3MgYm91bmRhcnkgcnVsZSBuZWVkcyB0byBiZSBkZWZpbmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxBY2Nlc3NCb3VuZGFyeS5hY2Nlc3NCb3VuZGFyeS5hY2Nlc3NCb3VuZGFyeVJ1bGVzLmxlbmd0aCA+XG4gICAgICAgICAgICBleHBvcnRzLk1BWF9BQ0NFU1NfQk9VTkRBUllfUlVMRVNfQ09VTlQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFjY2VzcyBib3VuZGFyeSBoYXMgbW9yZSB0aGFuICcgK1xuICAgICAgICAgICAgICAgIGAke2V4cG9ydHMuTUFYX0FDQ0VTU19CT1VOREFSWV9SVUxFU19DT1VOVH0gYWNjZXNzIGJvdW5kYXJ5IHJ1bGVzLmApO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNob3VsZCBiZSBkZWZpbmVkIGluIGVhY2ggQWNjZXNzIEJvdW5kYXJ5XG4gICAgICAgIC8vIFJ1bGUuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBjcmVkZW50aWFsQWNjZXNzQm91bmRhcnkuYWNjZXNzQm91bmRhcnlcbiAgICAgICAgICAgIC5hY2Nlc3NCb3VuZGFyeVJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5hdmFpbGFibGVQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNob3VsZCBiZSBkZWZpbmVkIGluIGFjY2VzcyBib3VuZGFyeSBydWxlcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0c0NyZWRlbnRpYWwgPSBuZXcgc3RzLlN0c0NyZWRlbnRpYWxzKGBodHRwczovL3N0cy4ke3RoaXMudW5pdmVyc2VEb21haW59L3YxL3Rva2VuYCk7XG4gICAgICAgIHRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gaW5qZWN0IERvd25zY29wZWQgYWNjZXNzIHRva2VucyBkaXJlY3RseS5cbiAgICAgKiBUaGUgZXhwaXJ5X2RhdGUgZmllbGQgaXMgcmVxdWlyZWQgdG8gZmFjaWxpdGF0ZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSB0b2tlblxuICAgICAqIGV4cGlyYXRpb24gd2hpY2ggd291bGQgbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSB0b2tlbiBjb25zdW1lciB0byBoYW5kbGUuXG4gICAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBDcmVkZW50aWFscyBvYmplY3QgdG8gc2V0IG9uIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgKi9cbiAgICBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscykge1xuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzLmV4cGlyeV9kYXRlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhY2Nlc3MgdG9rZW4gZXhwaXJ5X2RhdGUgZmllbGQgaXMgbWlzc2luZyBpbiB0aGUgcHJvdmlkZWQgJyArXG4gICAgICAgICAgICAgICAgJ2NyZWRlbnRpYWxzLicpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTtcbiAgICAgICAgdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4gPSBjcmVkZW50aWFscztcbiAgICB9XG4gICAgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIC8vIElmIHRoZSBjYWNoZWQgYWNjZXNzIHRva2VuIGlzIHVuYXZhaWxhYmxlIG9yIGV4cGlyZWQsIGZvcmNlIHJlZnJlc2guXG4gICAgICAgIC8vIFRoZSBEb3duc2NvcGVkIGFjY2VzcyB0b2tlbiB3aWxsIGJlIHJldHVybmVkIGluXG4gICAgICAgIC8vIERvd25zY29wZWRBY2Nlc3NUb2tlblJlc3BvbnNlIGZvcm1hdC5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbiB8fFxuICAgICAgICAgICAgdGhpcy5pc0V4cGlyZWQodGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIERvd25zY29wZWQgYWNjZXNzIHRva2VuIGluIERvd25zY29wZWRBY2Nlc3NUb2tlblJlc3BvbnNlIGZvcm1hdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICBleHBpcmF0aW9uVGltZTogdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4uZXhwaXJ5X2RhdGUsXG4gICAgICAgICAgICByZXM6IHRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuLnJlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYXV0aGVudGljYXRpb24gaW50ZXJmYWNlLiBJdCB0YWtlcyBhbiBvcHRpb25hbCB1cmwgd2hpY2ggd2hlblxuICAgICAqIHByZXNlbnQgaXMgdGhlIGVuZHBvaW50IGJlaW5nIGFjY2Vzc2VkLCBhbmQgcmV0dXJucyBhIFByb21pc2Ugd2hpY2hcbiAgICAgKiByZXNvbHZlcyB3aXRoIGF1dGhvcml6YXRpb24gaGVhZGVyIGZpZWxkcy5cbiAgICAgKlxuICAgICAqIFRoZSByZXN1bHQgaGFzIHRoZSBmb3JtOlxuICAgICAqIHsgQXV0aG9yaXphdGlvbjogJ0JlYXJlciA8YWNjZXNzX3Rva2VuX3ZhbHVlPicgfVxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcXVlc3RIZWFkZXJzKCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlblJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VuUmVzcG9uc2UudG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKGhlYWRlcnMpO1xuICAgIH1cbiAgICByZXF1ZXN0KG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0QXN5bmMob3B0cykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSwgZS5yZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBc3luYyhvcHRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdXRoZW50aWNhdGVzIHRoZSBwcm92aWRlZCBIVFRQIHJlcXVlc3QsIHByb2Nlc3NlcyBpdCBhbmQgcmVzb2x2ZXMgd2l0aCB0aGVcbiAgICAgKiByZXR1cm5lZCByZXNwb25zZS5cbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgSFRUUCByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHJlQXV0aFJldHJpZWQgV2hldGhlciB0aGUgY3VycmVudCBhdHRlbXB0IGlzIGEgcmV0cnkgYWZ0ZXIgYSBmYWlsZWQgYXR0ZW1wdCBkdWUgdG8gYW4gYXV0aCBmYWlsdXJlXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIHJlcXVlc3RBc3luYyhvcHRzLCByZUF1dGhSZXRyaWVkID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgICAgICAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnMgJiYgcmVxdWVzdEhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSkge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddID1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SGVhZGVycyAmJiByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGUucmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlcy5zdGF0dXM7XG4gICAgICAgICAgICAgICAgLy8gUmV0cnkgdGhlIHJlcXVlc3QgZm9yIG1ldGFkYXRhIGlmIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEgYXJlIHRydWU6XG4gICAgICAgICAgICAgICAgLy8gLSBXZSBoYXZlbid0IGFscmVhZHkgcmV0cmllZC4gIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gcmV0cnkgb25jZS5cbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXNwb25zZSB3YXMgYSA0MDEgb3IgYSA0MDNcbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXF1ZXN0IGRpZG4ndCBzZW5kIGEgcmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAvLyAtIGZvcmNlUmVmcmVzaE9uRmFpbHVyZSBpcyB0cnVlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbSA9IHJlcy5jb25maWcuZGF0YSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhFcnIgPSBzdGF0dXNDb2RlID09PSA0MDEgfHwgc3RhdHVzQ29kZSA9PT0gNDAzO1xuICAgICAgICAgICAgICAgIGlmICghcmVBdXRoUmV0cmllZCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0F1dGhFcnIgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVhZGFibGVTdHJlYW0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0QXN5bmMob3B0cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvcmNlcyB0b2tlbiByZWZyZXNoLCBldmVuIGlmIHVuZXhwaXJlZCB0b2tlbnMgYXJlIGN1cnJlbnRseSBjYWNoZWQuXG4gICAgICogR0NQIGFjY2VzcyB0b2tlbnMgYXJlIHJldHJpZXZlZCBmcm9tIGF1dGhjbGllbnQgb2JqZWN0L3NvdXJjZSBjcmVkZW50aWFsLlxuICAgICAqIFRoZW4gR0NQIGFjY2VzcyB0b2tlbnMgYXJlIGV4Y2hhbmdlZCBmb3IgZG93bnNjb3BlZCBhY2Nlc3MgdG9rZW5zIHZpYSB0aGVcbiAgICAgKiB0b2tlbiBleGNoYW5nZSBlbmRwb2ludC5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGZyZXNoIGRvd25zY29wZWQgYWNjZXNzIHRva2VuLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIC8vIFJldHJpZXZlIEdDUCBhY2Nlc3MgdG9rZW4gZnJvbSBzb3VyY2UgY3JlZGVudGlhbC5cbiAgICAgICAgY29uc3Qgc3ViamVjdFRva2VuID0gKGF3YWl0IHRoaXMuYXV0aENsaWVudC5nZXRBY2Nlc3NUb2tlbigpKS50b2tlbjtcbiAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBTVFMgY3JlZGVudGlhbHMgb3B0aW9ucy5cbiAgICAgICAgY29uc3Qgc3RzQ3JlZGVudGlhbHNPcHRpb25zID0ge1xuICAgICAgICAgICAgZ3JhbnRUeXBlOiBTVFNfR1JBTlRfVFlQRSxcbiAgICAgICAgICAgIHJlcXVlc3RlZFRva2VuVHlwZTogU1RTX1JFUVVFU1RfVE9LRU5fVFlQRSxcbiAgICAgICAgICAgIHN1YmplY3RUb2tlbjogc3ViamVjdFRva2VuLFxuICAgICAgICAgICAgc3ViamVjdFRva2VuVHlwZTogU1RTX1NVQkpFQ1RfVE9LRU5fVFlQRSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRXhjaGFuZ2UgdGhlIHNvdXJjZSBBdXRoQ2xpZW50IGFjY2VzcyB0b2tlbiBmb3IgYSBEb3duc2NvcGVkIGFjY2Vzc1xuICAgICAgICAvLyB0b2tlbi5cbiAgICAgICAgY29uc3Qgc3RzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN0c0NyZWRlbnRpYWwuZXhjaGFuZ2VUb2tlbihzdHNDcmVkZW50aWFsc09wdGlvbnMsIHVuZGVmaW5lZCwgdGhpcy5jcmVkZW50aWFsQWNjZXNzQm91bmRhcnkpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIFNUUyBlbmRwb2ludCB3aWxsIG9ubHkgcmV0dXJuIHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBkb3duc2NvcGVkXG4gICAgICAgICAqIGFjY2VzcyB0b2tlbiBpZiB0aGUgb3JpZ2luYWwgYWNjZXNzIHRva2VuIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGFjY291bnQuXG4gICAgICAgICAqIFRoZSBkb3duc2NvcGVkIHRva2VuJ3MgZXhwaXJhdGlvbiB0aW1lIHdpbGwgYWx3YXlzIG1hdGNoIHRoZSBzb3VyY2VcbiAgICAgICAgICogY3JlZGVudGlhbCBleHBpcmF0aW9uLiBXaGVuIG5vIGV4cGlyZXNfaW4gaXMgcmV0dXJuZWQsIHdlIGNhbiBjb3B5IHRoZVxuICAgICAgICAgKiBzb3VyY2UgY3JlZGVudGlhbCdzIGV4cGlyYXRpb24gdGltZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHNvdXJjZUNyZWRFeHBpcmVEYXRlID0gKChfYSA9IHRoaXMuYXV0aENsaWVudC5jcmVkZW50aWFscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV4cGlyeV9kYXRlKSB8fCBudWxsO1xuICAgICAgICBjb25zdCBleHBpcnlEYXRlID0gc3RzUmVzcG9uc2UuZXhwaXJlc19pblxuICAgICAgICAgICAgPyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHN0c1Jlc3BvbnNlLmV4cGlyZXNfaW4gKiAxMDAwXG4gICAgICAgICAgICA6IHNvdXJjZUNyZWRFeHBpcmVEYXRlO1xuICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGluIGNhY2hlZCBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIHRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuID0ge1xuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBzdHNSZXNwb25zZS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICBleHBpcnlfZGF0ZTogZXhwaXJ5RGF0ZSxcbiAgICAgICAgICAgIHJlczogc3RzUmVzcG9uc2UucmVzLFxuICAgICAgICB9O1xuICAgICAgICAvLyBTYXZlIGNyZWRlbnRpYWxzLlxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0ge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jcmVkZW50aWFscywgdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4pO1xuICAgICAgICBkZWxldGUgdGhpcy5jcmVkZW50aWFscy5yZXM7XG4gICAgICAgIC8vIFRyaWdnZXIgdG9rZW5zIGV2ZW50IHRvIG5vdGlmeSBleHRlcm5hbCBsaXN0ZW5lcnMuXG4gICAgICAgIHRoaXMuZW1pdCgndG9rZW5zJywge1xuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiB0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbi5leHBpcnlfZGF0ZSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgICAgICBpZF90b2tlbjogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgY2FjaGVkIGFjY2VzcyB0b2tlbi5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIGFyZSBleHBpcmVkIG9yIG5vdC5cbiAgICAgKiBJZiB0aGVyZSBpcyBubyBleHBpcnkgdGltZSwgYXNzdW1lcyB0aGUgdG9rZW4gaXMgbm90IGV4cGlyZWQgb3IgZXhwaXJpbmcuXG4gICAgICogQHBhcmFtIGRvd25zY29wZWRBY2Nlc3NUb2tlbiBUaGUgY3JlZGVudGlhbHMgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb24uXG4gICAgICogQHJldHVybiBXaGV0aGVyIHRoZSBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCBvciBub3QuXG4gICAgICovXG4gICAgaXNFeHBpcmVkKGRvd25zY29wZWRBY2Nlc3NUb2tlbikge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGRvd25zY29wZWRBY2Nlc3NUb2tlbi5leHBpcnlfZGF0ZVxuICAgICAgICAgICAgPyBub3cgPj1cbiAgICAgICAgICAgICAgICBkb3duc2NvcGVkQWNjZXNzVG9rZW4uZXhwaXJ5X2RhdGUgLSB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpc1xuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLkRvd25zY29wZWRDbGllbnQgPSBEb3duc2NvcGVkQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXNzVGhyb3VnaENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGF1dGhjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGhjbGllbnRcIik7XG4vKipcbiAqIEFuIEF1dGhDbGllbnQgd2l0aG91dCBhbnkgQXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uIFVzZWZ1bCBmb3I6XG4gKiAtIEFub255bW91cyBhY2Nlc3NcbiAqIC0gTG9jYWwgRW11bGF0b3JzXG4gKiAtIFRlc3RpbmcgRW52aXJvbm1lbnRzXG4gKlxuICovXG5jbGFzcyBQYXNzVGhyb3VnaENsaWVudCBleHRlbmRzIGF1dGhjbGllbnRfMS5BdXRoQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcmVxdWVzdCB3aXRob3V0IGFueSBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIG9yIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICpcbiAgICAgKiBJbiB0ZXN0aW5nIGVudmlyb25tZW50cyBpdCBtYXkgYmUgdXNlZnVsIHRvIGNoYW5nZSB0aGUgcHJvdmlkZWRcbiAgICAgKiB7QGxpbmsgQXV0aENsaWVudC50cmFuc3BvcnRlcn0gZm9yIGFueSBkZXNpcmVkIHJlcXVlc3Qgb3ZlcnJpZGVzL2hhbmRsaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHNcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2Ugb2YgdGhlIHJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgcmVxdWVzdChvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgcmVxdWlyZWQgbWV0aG9kIG9mIHRoZSBiYXNlIGNsYXNzLlxuICAgICAqIEFsd2F5cyB3aWxsIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7fVxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgcmVxdWlyZWQgbWV0aG9kIG9mIHRoZSBiYXNlIGNsYXNzLlxuICAgICAqIEFsd2F5cyB3aWxsIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7fVxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcXVlc3RIZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuZXhwb3J0cy5QYXNzVGhyb3VnaENsaWVudCA9IFBhc3NUaHJvdWdoQ2xpZW50O1xuY29uc3QgYSA9IG5ldyBQYXNzVGhyb3VnaENsaWVudCgpO1xuYS5nZXRBY2Nlc3NUb2tlbigpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR29vZ2xlQXV0aCA9IGV4cG9ydHMuYXV0aCA9IGV4cG9ydHMuRGVmYXVsdFRyYW5zcG9ydGVyID0gZXhwb3J0cy5QYXNzVGhyb3VnaENsaWVudCA9IGV4cG9ydHMuRXhlY3V0YWJsZUVycm9yID0gZXhwb3J0cy5QbHVnZ2FibGVBdXRoQ2xpZW50ID0gZXhwb3J0cy5Eb3duc2NvcGVkQ2xpZW50ID0gZXhwb3J0cy5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50ID0gZXhwb3J0cy5FeHRlcm5hbEFjY291bnRDbGllbnQgPSBleHBvcnRzLklkZW50aXR5UG9vbENsaWVudCA9IGV4cG9ydHMuQXdzUmVxdWVzdFNpZ25lciA9IGV4cG9ydHMuQXdzQ2xpZW50ID0gZXhwb3J0cy5Vc2VyUmVmcmVzaENsaWVudCA9IGV4cG9ydHMuTG9naW5UaWNrZXQgPSBleHBvcnRzLkNsaWVudEF1dGhlbnRpY2F0aW9uID0gZXhwb3J0cy5PQXV0aDJDbGllbnQgPSBleHBvcnRzLkNvZGVDaGFsbGVuZ2VNZXRob2QgPSBleHBvcnRzLkltcGVyc29uYXRlZCA9IGV4cG9ydHMuSldUID0gZXhwb3J0cy5KV1RBY2Nlc3MgPSBleHBvcnRzLklkVG9rZW5DbGllbnQgPSBleHBvcnRzLklBTUF1dGggPSBleHBvcnRzLkdDUEVudiA9IGV4cG9ydHMuQ29tcHV0ZSA9IGV4cG9ydHMuREVGQVVMVF9VTklWRVJTRSA9IGV4cG9ydHMuQXV0aENsaWVudCA9IGV4cG9ydHMuZ2F4aW9zID0gZXhwb3J0cy5nY3BNZXRhZGF0YSA9IHZvaWQgMDtcbi8vIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuY29uc3QgZ29vZ2xlYXV0aF8xID0gcmVxdWlyZShcIi4vYXV0aC9nb29nbGVhdXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR29vZ2xlQXV0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ29vZ2xlYXV0aF8xLkdvb2dsZUF1dGg7IH0gfSk7XG4vLyBFeHBvcnQgY29tbW9uIGRlcHMgdG8gZW5zdXJlIHR5cGVzL2luc3RhbmNlcyBhcmUgdGhlIGV4YWN0IG1hdGNoLiBVc2VmdWxcbi8vIGZvciBjb25zaXN0ZW50bHkgY29uZmlndXJpbmcgdGhlIGxpYnJhcnkgYWNyb3NzIHZlcnNpb25zLlxuZXhwb3J0cy5nY3BNZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5leHBvcnRzLmdheGlvcyA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG52YXIgYXV0aGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9hdXRoY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXV0aENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV0aGNsaWVudF8xLkF1dGhDbGllbnQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJERUZBVUxUX1VOSVZFUlNFXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRoY2xpZW50XzEuREVGQVVMVF9VTklWRVJTRTsgfSB9KTtcbnZhciBjb21wdXRlY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2NvbXB1dGVjbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wdXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21wdXRlY2xpZW50XzEuQ29tcHV0ZTsgfSB9KTtcbnZhciBlbnZEZXRlY3RfMSA9IHJlcXVpcmUoXCIuL2F1dGgvZW52RGV0ZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR0NQRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnZEZXRlY3RfMS5HQ1BFbnY7IH0gfSk7XG52YXIgaWFtXzEgPSByZXF1aXJlKFwiLi9hdXRoL2lhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklBTUF1dGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlhbV8xLklBTUF1dGg7IH0gfSk7XG52YXIgaWR0b2tlbmNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9pZHRva2VuY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSWRUb2tlbkNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWR0b2tlbmNsaWVudF8xLklkVG9rZW5DbGllbnQ7IH0gfSk7XG52YXIgand0YWNjZXNzXzEgPSByZXF1aXJlKFwiLi9hdXRoL2p3dGFjY2Vzc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpXVEFjY2Vzc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gand0YWNjZXNzXzEuSldUQWNjZXNzOyB9IH0pO1xudmFyIGp3dGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9qd3RjbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJKV1RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGp3dGNsaWVudF8xLkpXVDsgfSB9KTtcbnZhciBpbXBlcnNvbmF0ZWRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvaW1wZXJzb25hdGVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW1wZXJzb25hdGVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbXBlcnNvbmF0ZWRfMS5JbXBlcnNvbmF0ZWQ7IH0gfSk7XG52YXIgb2F1dGgyY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL29hdXRoMmNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvZGVDaGFsbGVuZ2VNZXRob2RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9hdXRoMmNsaWVudF8xLkNvZGVDaGFsbGVuZ2VNZXRob2Q7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPQXV0aDJDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9hdXRoMmNsaWVudF8xLk9BdXRoMkNsaWVudDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudEF1dGhlbnRpY2F0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYXV0aDJjbGllbnRfMS5DbGllbnRBdXRoZW50aWNhdGlvbjsgfSB9KTtcbnZhciBsb2dpbnRpY2tldF8xID0gcmVxdWlyZShcIi4vYXV0aC9sb2dpbnRpY2tldFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxvZ2luVGlja2V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dpbnRpY2tldF8xLkxvZ2luVGlja2V0OyB9IH0pO1xudmFyIHJlZnJlc2hjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvcmVmcmVzaGNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVzZXJSZWZyZXNoQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZyZXNoY2xpZW50XzEuVXNlclJlZnJlc2hDbGllbnQ7IH0gfSk7XG52YXIgYXdzY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2F3c2NsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF3c0NsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXdzY2xpZW50XzEuQXdzQ2xpZW50OyB9IH0pO1xudmFyIGF3c3JlcXVlc3RzaWduZXJfMSA9IHJlcXVpcmUoXCIuL2F1dGgvYXdzcmVxdWVzdHNpZ25lclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF3c1JlcXVlc3RTaWduZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF3c3JlcXVlc3RzaWduZXJfMS5Bd3NSZXF1ZXN0U2lnbmVyOyB9IH0pO1xudmFyIGlkZW50aXR5cG9vbGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9pZGVudGl0eXBvb2xjbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJZGVudGl0eVBvb2xDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlkZW50aXR5cG9vbGNsaWVudF8xLklkZW50aXR5UG9vbENsaWVudDsgfSB9KTtcbnZhciBleHRlcm5hbGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9leHRlcm5hbGNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV4dGVybmFsQWNjb3VudENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXh0ZXJuYWxjbGllbnRfMS5FeHRlcm5hbEFjY291bnRDbGllbnQ7IH0gfSk7XG52YXIgYmFzZWV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2Jhc2VleHRlcm5hbGNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhc2VleHRlcm5hbGNsaWVudF8xLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQ7IH0gfSk7XG52YXIgZG93bnNjb3BlZGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9kb3duc2NvcGVkY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRG93bnNjb3BlZENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG93bnNjb3BlZGNsaWVudF8xLkRvd25zY29wZWRDbGllbnQ7IH0gfSk7XG52YXIgcGx1Z2dhYmxlX2F1dGhfY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL3BsdWdnYWJsZS1hdXRoLWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBsdWdnYWJsZUF1dGhDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsdWdnYWJsZV9hdXRoX2NsaWVudF8xLlBsdWdnYWJsZUF1dGhDbGllbnQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeGVjdXRhYmxlRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsdWdnYWJsZV9hdXRoX2NsaWVudF8xLkV4ZWN1dGFibGVFcnJvcjsgfSB9KTtcbnZhciBwYXNzdGhyb3VnaF8xID0gcmVxdWlyZShcIi4vYXV0aC9wYXNzdGhyb3VnaFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhc3NUaHJvdWdoQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXNzdGhyb3VnaF8xLlBhc3NUaHJvdWdoQ2xpZW50OyB9IH0pO1xudmFyIHRyYW5zcG9ydGVyc18xID0gcmVxdWlyZShcIi4vdHJhbnNwb3J0ZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmYXVsdFRyYW5zcG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFuc3BvcnRlcnNfMS5EZWZhdWx0VHJhbnNwb3J0ZXI7IH0gfSk7XG5jb25zdCBhdXRoID0gbmV3IGdvb2dsZWF1dGhfMS5Hb29nbGVBdXRoKCk7XG5leHBvcnRzLmF1dGggPSBhdXRoO1xuIiwKICAgICJjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKVxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJylcblxuY29uc3QgdmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb25cblxuY29uc3QgTElORSA9IC8oPzpefF4pXFxzKig/OmV4cG9ydFxccyspPyhbXFx3Li1dKykoPzpcXHMqPVxccyo/fDpcXHMrPykoXFxzKicoPzpcXFxcJ3xbXiddKSonfFxccypcIig/OlxcXFxcInxbXlwiXSkqXCJ8XFxzKmAoPzpcXFxcYHxbXmBdKSpgfFteI1xcclxcbl0rKT9cXHMqKD86Iy4qKT8oPzokfCQpL21nXG5cbi8vIFBhcnNlIHNyYyBpbnRvIGFuIE9iamVjdFxuZnVuY3Rpb24gcGFyc2UgKHNyYykge1xuICBjb25zdCBvYmogPSB7fVxuXG4gIC8vIENvbnZlcnQgYnVmZmVyIHRvIHN0cmluZ1xuICBsZXQgbGluZXMgPSBzcmMudG9TdHJpbmcoKVxuXG4gIC8vIENvbnZlcnQgbGluZSBicmVha3MgdG8gc2FtZSBmb3JtYXRcbiAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKC9cXHJcXG4/L21nLCAnXFxuJylcblxuICBsZXQgbWF0Y2hcbiAgd2hpbGUgKChtYXRjaCA9IExJTkUuZXhlYyhsaW5lcykpICE9IG51bGwpIHtcbiAgICBjb25zdCBrZXkgPSBtYXRjaFsxXVxuXG4gICAgLy8gRGVmYXVsdCB1bmRlZmluZWQgb3IgbnVsbCB0byBlbXB0eSBzdHJpbmdcbiAgICBsZXQgdmFsdWUgPSAobWF0Y2hbMl0gfHwgJycpXG5cbiAgICAvLyBSZW1vdmUgd2hpdGVzcGFjZVxuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgICAvLyBDaGVjayBpZiBkb3VibGUgcXVvdGVkXG4gICAgY29uc3QgbWF5YmVRdW90ZSA9IHZhbHVlWzBdXG5cbiAgICAvLyBSZW1vdmUgc3Vycm91bmRpbmcgcXVvdGVzXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eKFsnXCJgXSkoW1xcc1xcU10qKVxcMSQvbWcsICckMicpXG5cbiAgICAvLyBFeHBhbmQgbmV3bGluZXMgaWYgZG91YmxlIHF1b3RlZFxuICAgIGlmIChtYXliZVF1b3RlID09PSAnXCInKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKVxuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXFxcci9nLCAnXFxyJylcbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gb2JqZWN0XG4gICAgb2JqW2tleV0gPSB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBfcGFyc2VWYXVsdCAob3B0aW9ucykge1xuICBjb25zdCB2YXVsdFBhdGggPSBfdmF1bHRQYXRoKG9wdGlvbnMpXG5cbiAgLy8gUGFyc2UgLmVudi52YXVsdFxuICBjb25zdCByZXN1bHQgPSBEb3RlbnZNb2R1bGUuY29uZmlnRG90ZW52KHsgcGF0aDogdmF1bHRQYXRoIH0pXG4gIGlmICghcmVzdWx0LnBhcnNlZCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgTUlTU0lOR19EQVRBOiBDYW5ub3QgcGFyc2UgJHt2YXVsdFBhdGh9IGZvciBhbiB1bmtub3duIHJlYXNvbmApXG4gICAgZXJyLmNvZGUgPSAnTUlTU0lOR19EQVRBJ1xuICAgIHRocm93IGVyclxuICB9XG5cbiAgLy8gaGFuZGxlIHNjZW5hcmlvIGZvciBjb21tYSBzZXBhcmF0ZWQga2V5cyAtIGZvciB1c2Ugd2l0aCBrZXkgcm90YXRpb25cbiAgLy8gZXhhbXBsZTogRE9URU5WX0tFWT1cImRvdGVudjovLzprZXlfMTIzNEBkb3RlbnZ4LmNvbS92YXVsdC8uZW52LnZhdWx0P2Vudmlyb25tZW50PXByb2QsZG90ZW52Oi8vOmtleV83ODkwQGRvdGVudnguY29tL3ZhdWx0Ly5lbnYudmF1bHQ/ZW52aXJvbm1lbnQ9cHJvZFwiXG4gIGNvbnN0IGtleXMgPSBfZG90ZW52S2V5KG9wdGlvbnMpLnNwbGl0KCcsJylcbiAgY29uc3QgbGVuZ3RoID0ga2V5cy5sZW5ndGhcblxuICBsZXQgZGVjcnlwdGVkXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGZ1bGwga2V5XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldLnRyaW0oKVxuXG4gICAgICAvLyBHZXQgaW5zdHJ1Y3Rpb25zIGZvciBkZWNyeXB0XG4gICAgICBjb25zdCBhdHRycyA9IF9pbnN0cnVjdGlvbnMocmVzdWx0LCBrZXkpXG5cbiAgICAgIC8vIERlY3J5cHRcbiAgICAgIGRlY3J5cHRlZCA9IERvdGVudk1vZHVsZS5kZWNyeXB0KGF0dHJzLmNpcGhlcnRleHQsIGF0dHJzLmtleSlcblxuICAgICAgYnJlYWtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gbGFzdCBrZXlcbiAgICAgIGlmIChpICsgMSA+PSBsZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICAgIC8vIHRyeSBuZXh0IGtleVxuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlIGRlY3J5cHRlZCAuZW52IHN0cmluZ1xuICByZXR1cm4gRG90ZW52TW9kdWxlLnBhcnNlKGRlY3J5cHRlZClcbn1cblxuZnVuY3Rpb24gX2xvZyAobWVzc2FnZSkge1xuICBjb25zb2xlLmxvZyhgW2RvdGVudkAke3ZlcnNpb259XVtJTkZPXSAke21lc3NhZ2V9YClcbn1cblxuZnVuY3Rpb24gX3dhcm4gKG1lc3NhZ2UpIHtcbiAgY29uc29sZS5sb2coYFtkb3RlbnZAJHt2ZXJzaW9ufV1bV0FSTl0gJHttZXNzYWdlfWApXG59XG5cbmZ1bmN0aW9uIF9kZWJ1ZyAobWVzc2FnZSkge1xuICBjb25zb2xlLmxvZyhgW2RvdGVudkAke3ZlcnNpb259XVtERUJVR10gJHttZXNzYWdlfWApXG59XG5cbmZ1bmN0aW9uIF9kb3RlbnZLZXkgKG9wdGlvbnMpIHtcbiAgLy8gcHJpb3JpdGl6ZSBkZXZlbG9wZXIgZGlyZWN0bHkgc2V0dGluZyBvcHRpb25zLkRPVEVOVl9LRVlcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5ET1RFTlZfS0VZICYmIG9wdGlvbnMuRE9URU5WX0tFWS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuRE9URU5WX0tFWVxuICB9XG5cbiAgLy8gc2Vjb25kYXJ5IGluZnJhIGFscmVhZHkgY29udGFpbnMgYSBET1RFTlZfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlXG4gIGlmIChwcm9jZXNzLmVudi5ET1RFTlZfS0VZICYmIHByb2Nlc3MuZW52LkRPVEVOVl9LRVkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5ET1RFTlZfS0VZXG4gIH1cblxuICAvLyBmYWxsYmFjayB0byBlbXB0eSBzdHJpbmdcbiAgcmV0dXJuICcnXG59XG5cbmZ1bmN0aW9uIF9pbnN0cnVjdGlvbnMgKHJlc3VsdCwgZG90ZW52S2V5KSB7XG4gIC8vIFBhcnNlIERPVEVOVl9LRVkuIEZvcm1hdCBpcyBhIFVSSVxuICBsZXQgdXJpXG4gIHRyeSB7XG4gICAgdXJpID0gbmV3IFVSTChkb3RlbnZLZXkpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9VUkwnKSB7XG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ0lOVkFMSURfRE9URU5WX0tFWTogV3JvbmcgZm9ybWF0LiBNdXN0IGJlIGluIHZhbGlkIHVyaSBmb3JtYXQgbGlrZSBkb3RlbnY6Ly86a2V5XzEyMzRAZG90ZW52eC5jb20vdmF1bHQvLmVudi52YXVsdD9lbnZpcm9ubWVudD1kZXZlbG9wbWVudCcpXG4gICAgICBlcnIuY29kZSA9ICdJTlZBTElEX0RPVEVOVl9LRVknXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvclxuICB9XG5cbiAgLy8gR2V0IGRlY3J5cHQga2V5XG4gIGNvbnN0IGtleSA9IHVyaS5wYXNzd29yZFxuICBpZiAoIWtleSkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignSU5WQUxJRF9ET1RFTlZfS0VZOiBNaXNzaW5nIGtleSBwYXJ0JylcbiAgICBlcnIuY29kZSA9ICdJTlZBTElEX0RPVEVOVl9LRVknXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICAvLyBHZXQgZW52aXJvbm1lbnRcbiAgY29uc3QgZW52aXJvbm1lbnQgPSB1cmkuc2VhcmNoUGFyYW1zLmdldCgnZW52aXJvbm1lbnQnKVxuICBpZiAoIWVudmlyb25tZW50KSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdJTlZBTElEX0RPVEVOVl9LRVk6IE1pc3NpbmcgZW52aXJvbm1lbnQgcGFydCcpXG4gICAgZXJyLmNvZGUgPSAnSU5WQUxJRF9ET1RFTlZfS0VZJ1xuICAgIHRocm93IGVyclxuICB9XG5cbiAgLy8gR2V0IGNpcGhlcnRleHQgcGF5bG9hZFxuICBjb25zdCBlbnZpcm9ubWVudEtleSA9IGBET1RFTlZfVkFVTFRfJHtlbnZpcm9ubWVudC50b1VwcGVyQ2FzZSgpfWBcbiAgY29uc3QgY2lwaGVydGV4dCA9IHJlc3VsdC5wYXJzZWRbZW52aXJvbm1lbnRLZXldIC8vIERPVEVOVl9WQVVMVF9QUk9EVUNUSU9OXG4gIGlmICghY2lwaGVydGV4dCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgTk9UX0ZPVU5EX0RPVEVOVl9FTlZJUk9OTUVOVDogQ2Fubm90IGxvY2F0ZSBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50S2V5fSBpbiB5b3VyIC5lbnYudmF1bHQgZmlsZS5gKVxuICAgIGVyci5jb2RlID0gJ05PVF9GT1VORF9ET1RFTlZfRU5WSVJPTk1FTlQnXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICByZXR1cm4geyBjaXBoZXJ0ZXh0LCBrZXkgfVxufVxuXG5mdW5jdGlvbiBfdmF1bHRQYXRoIChvcHRpb25zKSB7XG4gIGxldCBwb3NzaWJsZVZhdWx0UGF0aCA9IG51bGxcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdGggJiYgb3B0aW9ucy5wYXRoLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnBhdGgpKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGVwYXRoIG9mIG9wdGlvbnMucGF0aCkge1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkpIHtcbiAgICAgICAgICBwb3NzaWJsZVZhdWx0UGF0aCA9IGZpbGVwYXRoLmVuZHNXaXRoKCcudmF1bHQnKSA/IGZpbGVwYXRoIDogYCR7ZmlsZXBhdGh9LnZhdWx0YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3NpYmxlVmF1bHRQYXRoID0gb3B0aW9ucy5wYXRoLmVuZHNXaXRoKCcudmF1bHQnKSA/IG9wdGlvbnMucGF0aCA6IGAke29wdGlvbnMucGF0aH0udmF1bHRgXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBvc3NpYmxlVmF1bHRQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52LnZhdWx0JylcbiAgfVxuXG4gIGlmIChmcy5leGlzdHNTeW5jKHBvc3NpYmxlVmF1bHRQYXRoKSkge1xuICAgIHJldHVybiBwb3NzaWJsZVZhdWx0UGF0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gX3Jlc29sdmVIb21lIChlbnZQYXRoKSB7XG4gIHJldHVybiBlbnZQYXRoWzBdID09PSAnficgPyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBlbnZQYXRoLnNsaWNlKDEpKSA6IGVudlBhdGhcbn1cblxuZnVuY3Rpb24gX2NvbmZpZ1ZhdWx0IChvcHRpb25zKSB7XG4gIF9sb2coJ0xvYWRpbmcgZW52IGZyb20gZW5jcnlwdGVkIC5lbnYudmF1bHQnKVxuXG4gIGNvbnN0IHBhcnNlZCA9IERvdGVudk1vZHVsZS5fcGFyc2VWYXVsdChvcHRpb25zKVxuXG4gIGxldCBwcm9jZXNzRW52ID0gcHJvY2Vzcy5lbnZcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wcm9jZXNzRW52ICE9IG51bGwpIHtcbiAgICBwcm9jZXNzRW52ID0gb3B0aW9ucy5wcm9jZXNzRW52XG4gIH1cblxuICBEb3RlbnZNb2R1bGUucG9wdWxhdGUocHJvY2Vzc0VudiwgcGFyc2VkLCBvcHRpb25zKVxuXG4gIHJldHVybiB7IHBhcnNlZCB9XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ0RvdGVudiAob3B0aW9ucykge1xuICBjb25zdCBkb3RlbnZQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52JylcbiAgbGV0IGVuY29kaW5nID0gJ3V0ZjgnXG4gIGNvbnN0IGRlYnVnID0gQm9vbGVhbihvcHRpb25zICYmIG9wdGlvbnMuZGVidWcpXG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGluZykge1xuICAgIGVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZ1xuICB9IGVsc2Uge1xuICAgIGlmIChkZWJ1Zykge1xuICAgICAgX2RlYnVnKCdObyBlbmNvZGluZyBpcyBzcGVjaWZpZWQuIFVURi04IGlzIHVzZWQgYnkgZGVmYXVsdCcpXG4gICAgfVxuICB9XG5cbiAgbGV0IG9wdGlvblBhdGhzID0gW2RvdGVudlBhdGhdIC8vIGRlZmF1bHQsIGxvb2sgZm9yIC5lbnZcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXRoKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMucGF0aCkpIHtcbiAgICAgIG9wdGlvblBhdGhzID0gW19yZXNvbHZlSG9tZShvcHRpb25zLnBhdGgpXVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25QYXRocyA9IFtdIC8vIHJlc2V0IGRlZmF1bHRcbiAgICAgIGZvciAoY29uc3QgZmlsZXBhdGggb2Ygb3B0aW9ucy5wYXRoKSB7XG4gICAgICAgIG9wdGlvblBhdGhzLnB1c2goX3Jlc29sdmVIb21lKGZpbGVwYXRoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcGFyc2VkIGRhdGEgaW4gYSB0ZW1wb3Jhcnkgb2JqZWN0IChiZWNhdXNlIHdlIG5lZWQgdG8gcmV0dXJuIGl0KS4gIE9uY2Ugd2UgaGF2ZSB0aGUgZmluYWxcbiAgLy8gcGFyc2VkIGRhdGEsIHdlIHdpbGwgY29tYmluZSBpdCB3aXRoIHByb2Nlc3MuZW52IChvciBvcHRpb25zLnByb2Nlc3NFbnYgaWYgcHJvdmlkZWQpLlxuICBsZXQgbGFzdEVycm9yXG4gIGNvbnN0IHBhcnNlZEFsbCA9IHt9XG4gIGZvciAoY29uc3QgcGF0aCBvZiBvcHRpb25QYXRocykge1xuICAgIHRyeSB7XG4gICAgICAvLyBTcGVjaWZ5aW5nIGFuIGVuY29kaW5nIHJldHVybnMgYSBzdHJpbmcgaW5zdGVhZCBvZiBhIGJ1ZmZlclxuICAgICAgY29uc3QgcGFyc2VkID0gRG90ZW52TW9kdWxlLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nIH0pKVxuXG4gICAgICBEb3RlbnZNb2R1bGUucG9wdWxhdGUocGFyc2VkQWxsLCBwYXJzZWQsIG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIF9kZWJ1ZyhgRmFpbGVkIHRvIGxvYWQgJHtwYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgfVxuICAgICAgbGFzdEVycm9yID0gZVxuICAgIH1cbiAgfVxuXG4gIGxldCBwcm9jZXNzRW52ID0gcHJvY2Vzcy5lbnZcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wcm9jZXNzRW52ICE9IG51bGwpIHtcbiAgICBwcm9jZXNzRW52ID0gb3B0aW9ucy5wcm9jZXNzRW52XG4gIH1cblxuICBEb3RlbnZNb2R1bGUucG9wdWxhdGUocHJvY2Vzc0VudiwgcGFyc2VkQWxsLCBvcHRpb25zKVxuXG4gIGlmIChsYXN0RXJyb3IpIHtcbiAgICByZXR1cm4geyBwYXJzZWQ6IHBhcnNlZEFsbCwgZXJyb3I6IGxhc3RFcnJvciB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgcGFyc2VkOiBwYXJzZWRBbGwgfVxuICB9XG59XG5cbi8vIFBvcHVsYXRlcyBwcm9jZXNzLmVudiBmcm9tIC5lbnYgZmlsZVxuZnVuY3Rpb24gY29uZmlnIChvcHRpb25zKSB7XG4gIC8vIGZhbGxiYWNrIHRvIG9yaWdpbmFsIGRvdGVudiBpZiBET1RFTlZfS0VZIGlzIG5vdCBzZXRcbiAgaWYgKF9kb3RlbnZLZXkob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIERvdGVudk1vZHVsZS5jb25maWdEb3RlbnYob3B0aW9ucylcbiAgfVxuXG4gIGNvbnN0IHZhdWx0UGF0aCA9IF92YXVsdFBhdGgob3B0aW9ucylcblxuICAvLyBkb3RlbnZLZXkgZXhpc3RzIGJ1dCAuZW52LnZhdWx0IGZpbGUgZG9lcyBub3QgZXhpc3RcbiAgaWYgKCF2YXVsdFBhdGgpIHtcbiAgICBfd2FybihgWW91IHNldCBET1RFTlZfS0VZIGJ1dCB5b3UgYXJlIG1pc3NpbmcgYSAuZW52LnZhdWx0IGZpbGUgYXQgJHt2YXVsdFBhdGh9LiBEaWQgeW91IGZvcmdldCB0byBidWlsZCBpdD9gKVxuXG4gICAgcmV0dXJuIERvdGVudk1vZHVsZS5jb25maWdEb3RlbnYob3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBEb3RlbnZNb2R1bGUuX2NvbmZpZ1ZhdWx0KG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGRlY3J5cHQgKGVuY3J5cHRlZCwga2V5U3RyKSB7XG4gIGNvbnN0IGtleSA9IEJ1ZmZlci5mcm9tKGtleVN0ci5zbGljZSgtNjQpLCAnaGV4JylcbiAgbGV0IGNpcGhlcnRleHQgPSBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiYXNlNjQnKVxuXG4gIGNvbnN0IG5vbmNlID0gY2lwaGVydGV4dC5zdWJhcnJheSgwLCAxMilcbiAgY29uc3QgYXV0aFRhZyA9IGNpcGhlcnRleHQuc3ViYXJyYXkoLTE2KVxuICBjaXBoZXJ0ZXh0ID0gY2lwaGVydGV4dC5zdWJhcnJheSgxMiwgLTE2KVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWVzZ2NtID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBub25jZSlcbiAgICBhZXNnY20uc2V0QXV0aFRhZyhhdXRoVGFnKVxuICAgIHJldHVybiBgJHthZXNnY20udXBkYXRlKGNpcGhlcnRleHQpfSR7YWVzZ2NtLmZpbmFsKCl9YFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGlzUmFuZ2UgPSBlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3JcbiAgICBjb25zdCBpbnZhbGlkS2V5TGVuZ3RoID0gZXJyb3IubWVzc2FnZSA9PT0gJ0ludmFsaWQga2V5IGxlbmd0aCdcbiAgICBjb25zdCBkZWNyeXB0aW9uRmFpbGVkID0gZXJyb3IubWVzc2FnZSA9PT0gJ1Vuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSdcblxuICAgIGlmIChpc1JhbmdlIHx8IGludmFsaWRLZXlMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignSU5WQUxJRF9ET1RFTlZfS0VZOiBJdCBtdXN0IGJlIDY0IGNoYXJhY3RlcnMgbG9uZyAob3IgbW9yZSknKVxuICAgICAgZXJyLmNvZGUgPSAnSU5WQUxJRF9ET1RFTlZfS0VZJ1xuICAgICAgdGhyb3cgZXJyXG4gICAgfSBlbHNlIGlmIChkZWNyeXB0aW9uRmFpbGVkKSB7XG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ0RFQ1JZUFRJT05fRkFJTEVEOiBQbGVhc2UgY2hlY2sgeW91ciBET1RFTlZfS0VZJylcbiAgICAgIGVyci5jb2RlID0gJ0RFQ1JZUFRJT05fRkFJTEVEJ1xuICAgICAgdGhyb3cgZXJyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG5cbi8vIFBvcHVsYXRlIHByb2Nlc3MuZW52IHdpdGggcGFyc2VkIHZhbHVlc1xuZnVuY3Rpb24gcG9wdWxhdGUgKHByb2Nlc3NFbnYsIHBhcnNlZCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGRlYnVnID0gQm9vbGVhbihvcHRpb25zICYmIG9wdGlvbnMuZGVidWcpXG4gIGNvbnN0IG92ZXJyaWRlID0gQm9vbGVhbihvcHRpb25zICYmIG9wdGlvbnMub3ZlcnJpZGUpXG5cbiAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdPQkpFQ1RfUkVRVUlSRUQ6IFBsZWFzZSBjaGVjayB0aGUgcHJvY2Vzc0VudiBhcmd1bWVudCBiZWluZyBwYXNzZWQgdG8gcG9wdWxhdGUnKVxuICAgIGVyci5jb2RlID0gJ09CSkVDVF9SRVFVSVJFRCdcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIC8vIFNldCBwcm9jZXNzLmVudlxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWQpKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9jZXNzRW52LCBrZXkpKSB7XG4gICAgICBpZiAob3ZlcnJpZGUgPT09IHRydWUpIHtcbiAgICAgICAgcHJvY2Vzc0VudltrZXldID0gcGFyc2VkW2tleV1cbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIGlmIChvdmVycmlkZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIF9kZWJ1ZyhgXCIke2tleX1cIiBpcyBhbHJlYWR5IGRlZmluZWQgYW5kIFdBUyBvdmVyd3JpdHRlbmApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2RlYnVnKGBcIiR7a2V5fVwiIGlzIGFscmVhZHkgZGVmaW5lZCBhbmQgd2FzIE5PVCBvdmVyd3JpdHRlbmApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzc0VudltrZXldID0gcGFyc2VkW2tleV1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgRG90ZW52TW9kdWxlID0ge1xuICBjb25maWdEb3RlbnYsXG4gIF9jb25maWdWYXVsdCxcbiAgX3BhcnNlVmF1bHQsXG4gIGNvbmZpZyxcbiAgZGVjcnlwdCxcbiAgcGFyc2UsXG4gIHBvcHVsYXRlXG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbmZpZ0RvdGVudiA9IERvdGVudk1vZHVsZS5jb25maWdEb3RlbnZcbm1vZHVsZS5leHBvcnRzLl9jb25maWdWYXVsdCA9IERvdGVudk1vZHVsZS5fY29uZmlnVmF1bHRcbm1vZHVsZS5leHBvcnRzLl9wYXJzZVZhdWx0ID0gRG90ZW52TW9kdWxlLl9wYXJzZVZhdWx0XG5tb2R1bGUuZXhwb3J0cy5jb25maWcgPSBEb3RlbnZNb2R1bGUuY29uZmlnXG5tb2R1bGUuZXhwb3J0cy5kZWNyeXB0ID0gRG90ZW52TW9kdWxlLmRlY3J5cHRcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gRG90ZW52TW9kdWxlLnBhcnNlXG5tb2R1bGUuZXhwb3J0cy5wb3B1bGF0ZSA9IERvdGVudk1vZHVsZS5wb3B1bGF0ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IERvdGVudk1vZHVsZVxuIiwKICAgICIvLyAuLi9jb25maWcuanMgYWNjZXB0cyBvcHRpb25zIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbmNvbnN0IG9wdGlvbnMgPSB7fVxuXG5pZiAocHJvY2Vzcy5lbnYuRE9URU5WX0NPTkZJR19FTkNPRElORyAhPSBudWxsKSB7XG4gIG9wdGlvbnMuZW5jb2RpbmcgPSBwcm9jZXNzLmVudi5ET1RFTlZfQ09ORklHX0VOQ09ESU5HXG59XG5cbmlmIChwcm9jZXNzLmVudi5ET1RFTlZfQ09ORklHX1BBVEggIT0gbnVsbCkge1xuICBvcHRpb25zLnBhdGggPSBwcm9jZXNzLmVudi5ET1RFTlZfQ09ORklHX1BBVEhcbn1cblxuaWYgKHByb2Nlc3MuZW52LkRPVEVOVl9DT05GSUdfREVCVUcgIT0gbnVsbCkge1xuICBvcHRpb25zLmRlYnVnID0gcHJvY2Vzcy5lbnYuRE9URU5WX0NPTkZJR19ERUJVR1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuRE9URU5WX0NPTkZJR19PVkVSUklERSAhPSBudWxsKSB7XG4gIG9wdGlvbnMub3ZlcnJpZGUgPSBwcm9jZXNzLmVudi5ET1RFTlZfQ09ORklHX09WRVJSSURFXG59XG5cbmlmIChwcm9jZXNzLmVudi5ET1RFTlZfQ09ORklHX0RPVEVOVl9LRVkgIT0gbnVsbCkge1xuICBvcHRpb25zLkRPVEVOVl9LRVkgPSBwcm9jZXNzLmVudi5ET1RFTlZfQ09ORklHX0RPVEVOVl9LRVlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvcHRpb25zXG4iLAogICAgImNvbnN0IHJlID0gL15kb3RlbnZfY29uZmlnXyhlbmNvZGluZ3xwYXRofGRlYnVnfG92ZXJyaWRlfERPVEVOVl9LRVkpPSguKykkL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9wdGlvbk1hdGNoZXIgKGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cikge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjdXIubWF0Y2gocmUpXG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgIGFjY1ttYXRjaGVzWzFdXSA9IG1hdGNoZXNbMl1cbiAgICB9XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSlcbn1cbiIsCiAgICAiKGZ1bmN0aW9uICgpIHtcbiAgcmVxdWlyZSgnLi9saWIvbWFpbicpLmNvbmZpZyhcbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICByZXF1aXJlKCcuL2xpYi9lbnYtb3B0aW9ucycpLFxuICAgICAgcmVxdWlyZSgnLi9saWIvY2xpLW9wdGlvbnMnKShwcm9jZXNzLmFyZ3YpXG4gICAgKVxuICApXG59KSgpXG4iLAogICAgImZ1bmN0aW9uIGRlZXBGcmVlemUob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gb2JqLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWFwIGlzIHJlYWQtb25seScpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXQgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRnJlZXplIHNlbGZcbiAgICBPYmplY3QuZnJlZXplKG9iaik7XG5cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHByb3AgPSBvYmpbbmFtZV07XG5cbiAgICAgICAgLy8gRnJlZXplIHByb3AgaWYgaXQgaXMgYW4gb2JqZWN0XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmlzRnJvemVuKHByb3ApKSB7XG4gICAgICAgICAgICBkZWVwRnJlZXplKHByb3ApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG52YXIgZGVlcEZyZWV6ZUVzNiA9IGRlZXBGcmVlemU7XG52YXIgX2RlZmF1bHQgPSBkZWVwRnJlZXplO1xuZGVlcEZyZWV6ZUVzNi5kZWZhdWx0ID0gX2RlZmF1bHQ7XG5cbi8qKiBAaW1wbGVtZW50cyBDYWxsYmFja1Jlc3BvbnNlICovXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICBpZiAobW9kZS5kYXRhID09PSB1bmRlZmluZWQpIG1vZGUuZGF0YSA9IHt9O1xuXG4gICAgdGhpcy5kYXRhID0gbW9kZS5kYXRhO1xuICAgIHRoaXMuaXNNYXRjaElnbm9yZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGlnbm9yZU1hdGNoKCkge1xuICAgIHRoaXMuaXNNYXRjaElnbm9yZWQgPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpO1xufVxuXG4vKipcbiAqIHBlcmZvcm1zIGEgc2hhbGxvdyBtZXJnZSBvZiBtdWx0aXBsZSBvYmplY3RzIGludG8gb25lXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gb3JpZ2luYWxcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZyxhbnk+W119IG9iamVjdHNcbiAqIEByZXR1cm5zIHtUfSBhIHNpbmdsZSBuZXcgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluaGVyaXQob3JpZ2luYWwsIC4uLm9iamVjdHMpIHtcbiAgLyoqIEB0eXBlIFJlY29yZDxzdHJpbmcsYW55PiAqL1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgcmVzdWx0W2tleV0gPSBvcmlnaW5hbFtrZXldO1xuICB9XG4gIG9iamVjdHMuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKHJlc3VsdCk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVuZGVyZXJcbiAqIEBwcm9wZXJ0eSB7KHRleHQ6IHN0cmluZykgPT4gdm9pZH0gYWRkVGV4dFxuICogQHByb3BlcnR5IHsobm9kZTogTm9kZSkgPT4gdm9pZH0gb3Blbk5vZGVcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IE5vZGUpID0+IHZvaWR9IGNsb3NlTm9kZVxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmd9IHZhbHVlXG4gKi9cblxuLyoqIEB0eXBlZGVmIHt7a2luZD86IHN0cmluZywgc3VibGFuZ3VhZ2U/OiBib29sZWFufX0gTm9kZSAqL1xuLyoqIEB0eXBlZGVmIHt7d2FsazogKHI6IFJlbmRlcmVyKSA9PiB2b2lkfX0gVHJlZSAqL1xuLyoqICovXG5cbmNvbnN0IFNQQU5fQ0xPU0UgPSAnPC9zcGFuPic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIG5vZGUgbmVlZHMgdG8gYmUgd3JhcHBlZCBpbiA8c3Bhbj5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbmNvbnN0IGVtaXRzV3JhcHBpbmdUYWdzID0gKG5vZGUpID0+IHtcbiAgcmV0dXJuICEhbm9kZS5raW5kO1xufTtcblxuLyoqIEB0eXBlIHtSZW5kZXJlcn0gKi9cbmNsYXNzIEhUTUxSZW5kZXJlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEhUTUxSZW5kZXJlclxuICAgKlxuICAgKiBAcGFyYW0ge1RyZWV9IHBhcnNlVHJlZSAtIHRoZSBwYXJzZSB0cmVlIChtdXN0IHN1cHBvcnQgYHdhbGtgIEFQSSlcbiAgICogQHBhcmFtIHt7Y2xhc3NQcmVmaXg6IHN0cmluZ319IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcnNlVHJlZSwgb3B0aW9ucykge1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLmNsYXNzUHJlZml4ID0gb3B0aW9ucy5jbGFzc1ByZWZpeDtcbiAgICBwYXJzZVRyZWUud2Fsayh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRleHRzIHRvIHRoZSBvdXRwdXQgc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICovXG4gIGFkZFRleHQodGV4dCkge1xuICAgIHRoaXMuYnVmZmVyICs9IGVzY2FwZUhUTUwodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5vZGUgb3BlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSAoaWYgbmVlZGVkKVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbiAgb3Blbk5vZGUobm9kZSkge1xuICAgIGlmICghZW1pdHNXcmFwcGluZ1RhZ3Mobm9kZSkpIHJldHVybjtcblxuICAgIGxldCBjbGFzc05hbWUgPSBub2RlLmtpbmQ7XG4gICAgaWYgKCFub2RlLnN1Ymxhbmd1YWdlKSB7XG4gICAgICBjbGFzc05hbWUgPSBgJHt0aGlzLmNsYXNzUHJlZml4fSR7Y2xhc3NOYW1lfWA7XG4gICAgfVxuICAgIHRoaXMuc3BhbihjbGFzc05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub2RlIGNsb3NlIHRvIHRoZSBvdXRwdXQgc3RyZWFtIChpZiBuZWVkZWQpXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAqL1xuICBjbG9zZU5vZGUobm9kZSkge1xuICAgIGlmICghZW1pdHNXcmFwcGluZ1RhZ3Mobm9kZSkpIHJldHVybjtcblxuICAgIHRoaXMuYnVmZmVyICs9IFNQQU5fQ0xPU0U7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgYnVmZmVyXG4gICovXG4gIHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlcjtcbiAgfVxuXG4gIC8vIGhlbHBlcnNcblxuICAvKipcbiAgICogQnVpbGRzIGEgc3BhbiBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgKi9cbiAgc3BhbihjbGFzc05hbWUpIHtcbiAgICB0aGlzLmJ1ZmZlciArPSBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX1cIj5gO1xuICB9XG59XG5cbi8qKiBAdHlwZWRlZiB7e2tpbmQ/OiBzdHJpbmcsIHN1Ymxhbmd1YWdlPzogYm9vbGVhbiwgY2hpbGRyZW46IE5vZGVbXX0gfCBzdHJpbmd9IE5vZGUgKi9cbi8qKiBAdHlwZWRlZiB7e2tpbmQ/OiBzdHJpbmcsIHN1Ymxhbmd1YWdlPzogYm9vbGVhbiwgY2hpbGRyZW46IE5vZGVbXX0gfSBEYXRhTm9kZSAqL1xuLyoqICAqL1xuXG5jbGFzcyBUb2tlblRyZWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKiogQHR5cGUgRGF0YU5vZGUgKi9cbiAgICB0aGlzLnJvb3ROb2RlID0geyBjaGlsZHJlbjogW10gfTtcbiAgICB0aGlzLnN0YWNrID0gW3RoaXMucm9vdE5vZGVdO1xuICB9XG5cbiAgZ2V0IHRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgZ2V0IHJvb3QoKSB7IHJldHVybiB0aGlzLnJvb3ROb2RlOyB9XG5cbiAgLyoqIEBwYXJhbSB7Tm9kZX0gbm9kZSAqL1xuICBhZGQobm9kZSkge1xuICAgIHRoaXMudG9wLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHtzdHJpbmd9IGtpbmQgKi9cbiAgb3Blbk5vZGUoa2luZCkge1xuICAgIC8qKiBAdHlwZSBOb2RlICovXG4gICAgY29uc3Qgbm9kZSA9IHsga2luZCwgY2hpbGRyZW46IFtdIH07XG4gICAgdGhpcy5hZGQobm9kZSk7XG4gICAgdGhpcy5zdGFjay5wdXNoKG5vZGUpO1xuICB9XG5cbiAgY2xvc2VOb2RlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNsb3NlQWxsTm9kZXMoKSB7XG4gICAgd2hpbGUgKHRoaXMuY2xvc2VOb2RlKCkpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3ROb2RlLCBudWxsLCA0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vaHRtbF9yZW5kZXJlclwiKS5SZW5kZXJlciB9IFJlbmRlcmVyXG4gICAqIEBwYXJhbSB7UmVuZGVyZXJ9IGJ1aWxkZXJcbiAgICovXG4gIHdhbGsoYnVpbGRlcikge1xuICAgIC8vIHRoaXMgZG9lcyBub3RcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5fd2FsayhidWlsZGVyLCB0aGlzLnJvb3ROb2RlKTtcbiAgICAvLyB0aGlzIHdvcmtzXG4gICAgLy8gcmV0dXJuIFRva2VuVHJlZS5fd2FsayhidWlsZGVyLCB0aGlzLnJvb3ROb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlbmRlcmVyfSBidWlsZGVyXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKi9cbiAgc3RhdGljIF93YWxrKGJ1aWxkZXIsIG5vZGUpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGJ1aWxkZXIuYWRkVGV4dChub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGJ1aWxkZXIub3Blbk5vZGUobm9kZSk7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLl93YWxrKGJ1aWxkZXIsIGNoaWxkKSk7XG4gICAgICBidWlsZGVyLmNsb3NlTm9kZShub2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqL1xuICBzdGF0aWMgX2NvbGxhcHNlKG5vZGUpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwic3RyaW5nXCIpIHJldHVybjtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHJldHVybjtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuLmV2ZXJ5KGVsID0+IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgIC8vIG5vZGUudGV4dCA9IG5vZGUuY2hpbGRyZW4uam9pbihcIlwiKTtcbiAgICAgIC8vIGRlbGV0ZSBub2RlLmNoaWxkcmVuO1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IFtub2RlLmNoaWxkcmVuLmpvaW4oXCJcIildO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIFRva2VuVHJlZS5fY29sbGFwc2UoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICBDdXJyZW50bHkgdGhpcyBpcyBhbGwgcHJpdmF0ZSBBUEksIGJ1dCB0aGlzIGlzIHRoZSBtaW5pbWFsIEFQSSBuZWNlc3NhcnlcbiAgdGhhdCBhbiBFbWl0dGVyIG11c3QgaW1wbGVtZW50IHRvIGZ1bGx5IHN1cHBvcnQgdGhlIHBhcnNlci5cblxuICBNaW5pbWFsIGludGVyZmFjZTpcblxuICAtIGFkZEtleXdvcmQodGV4dCwga2luZClcbiAgLSBhZGRUZXh0KHRleHQpXG4gIC0gYWRkU3VibGFuZ3VhZ2UoZW1pdHRlciwgc3ViTGFuZ3VhZ2VOYW1lKVxuICAtIGZpbmFsaXplKClcbiAgLSBvcGVuTm9kZShraW5kKVxuICAtIGNsb3NlTm9kZSgpXG4gIC0gY2xvc2VBbGxOb2RlcygpXG4gIC0gdG9IVE1MKClcblxuKi9cblxuLyoqXG4gKiBAaW1wbGVtZW50cyB7RW1pdHRlcn1cbiAqL1xuY2xhc3MgVG9rZW5UcmVlRW1pdHRlciBleHRlbmRzIFRva2VuVHJlZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmRcbiAgICovXG4gIGFkZEtleXdvcmQodGV4dCwga2luZCkge1xuICAgIGlmICh0ZXh0ID09PSBcIlwiKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5vcGVuTm9kZShraW5kKTtcbiAgICB0aGlzLmFkZFRleHQodGV4dCk7XG4gICAgdGhpcy5jbG9zZU5vZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgYWRkVGV4dCh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IFwiXCIpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLmFkZCh0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VtaXR0ZXIgJiB7cm9vdDogRGF0YU5vZGV9fSBlbWl0dGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBhZGRTdWJsYW5ndWFnZShlbWl0dGVyLCBuYW1lKSB7XG4gICAgLyoqIEB0eXBlIERhdGFOb2RlICovXG4gICAgY29uc3Qgbm9kZSA9IGVtaXR0ZXIucm9vdDtcbiAgICBub2RlLmtpbmQgPSBuYW1lO1xuICAgIG5vZGUuc3VibGFuZ3VhZ2UgPSB0cnVlO1xuICAgIHRoaXMuYWRkKG5vZGUpO1xuICB9XG5cbiAgdG9IVE1MKCkge1xuICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEhUTUxSZW5kZXJlcih0aGlzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHJldHVybiByZW5kZXJlci52YWx1ZSgpO1xuICB9XG5cbiAgZmluYWxpemUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuZnVuY3Rpb24gZXNjYXBlKHZhbHVlKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKHZhbHVlLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKSwgJ20nKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEFueSBvZiB0aGUgcGFzc2VkIGV4cHJlc3NzaW9ucyBtYXkgbWF0Y2hcbiAqXG4gKiBDcmVhdGVzIGEgaHVnZSB0aGlzIHwgdGhpcyB8IHRoYXQgfCB0aGF0IG1hdGNoXG4gKiBAcGFyYW0geyhSZWdFeHAgfCBzdHJpbmcpW10gfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlaXRoZXIoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSAnKCcgKyBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwifFwiKSArIFwiKVwiO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gY291bnRNYXRjaEdyb3VwcyhyZSkge1xuICByZXR1cm4gKG5ldyBSZWdFeHAocmUudG9TdHJpbmcoKSArICd8JykpLmV4ZWMoJycpLmxlbmd0aCAtIDE7XG59XG5cbi8qKlxuICogRG9lcyBsZXhlbWUgc3RhcnQgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBsZXhlbWVcbiAqL1xuZnVuY3Rpb24gc3RhcnRzV2l0aChyZSwgbGV4ZW1lKSB7XG4gIGNvbnN0IG1hdGNoID0gcmUgJiYgcmUuZXhlYyhsZXhlbWUpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IDA7XG59XG5cbi8vIEJBQ0tSRUZfUkUgbWF0Y2hlcyBhbiBvcGVuIHBhcmVudGhlc2lzIG9yIGJhY2tyZWZlcmVuY2UuIFRvIGF2b2lkXG4vLyBhbiBpbmNvcnJlY3QgcGFyc2UsIGl0IGFkZGl0aW9uYWxseSBtYXRjaGVzIHRoZSBmb2xsb3dpbmc6XG4vLyAtIFsuLi5dIGVsZW1lbnRzLCB3aGVyZSB0aGUgbWVhbmluZyBvZiBwYXJlbnRoZXNlcyBhbmQgZXNjYXBlcyBjaGFuZ2Vcbi8vIC0gb3RoZXIgZXNjYXBlIHNlcXVlbmNlcywgc28gd2UgZG8gbm90IG1pc3BhcnNlIGVzY2FwZSBzZXF1ZW5jZXMgYXNcbi8vICAgaW50ZXJlc3RpbmcgZWxlbWVudHNcbi8vIC0gbm9uLW1hdGNoaW5nIG9yIGxvb2thaGVhZCBwYXJlbnRoZXNlcywgd2hpY2ggZG8gbm90IGNhcHR1cmUuIFRoZXNlXG4vLyAgIGZvbGxvdyB0aGUgJygnIHdpdGggYSAnPycuXG5jb25zdCBCQUNLUkVGX1JFID0gL1xcWyg/OlteXFxcXFxcXV18XFxcXC4pKlxcXXxcXChcXD8/fFxcXFwoWzEtOV1bMC05XSopfFxcXFwuLztcblxuLy8gam9pbiBsb2dpY2FsbHkgY29tcHV0ZXMgcmVnZXhwcy5qb2luKHNlcGFyYXRvciksIGJ1dCBmaXhlcyB0aGVcbi8vIGJhY2tyZWZlcmVuY2VzIHNvIHRoZXkgY29udGludWUgdG8gbWF0Y2guXG4vLyBpdCBhbHNvIHBsYWNlcyBlYWNoIGluZGl2aWR1YWwgcmVndWxhciBleHByZXNzaW9uIGludG8gaXQncyBvd25cbi8vIG1hdGNoIGdyb3VwLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBzZXF1ZW5jaW5nIG9mIHRob3NlIG1hdGNoIGdyb3Vwc1xuLy8gaXMgY3VycmVudGx5IGFuIGV4ZXJjaXNlIGZvciB0aGUgY2FsbGVyLiA6LSlcbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgUmVnRXhwKVtdfSByZWdleHBzXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBqb2luKHJlZ2V4cHMsIHNlcGFyYXRvciA9IFwifFwiKSB7XG4gIGxldCBudW1DYXB0dXJlcyA9IDA7XG5cbiAgcmV0dXJuIHJlZ2V4cHMubWFwKChyZWdleCkgPT4ge1xuICAgIG51bUNhcHR1cmVzICs9IDE7XG4gICAgY29uc3Qgb2Zmc2V0ID0gbnVtQ2FwdHVyZXM7XG4gICAgbGV0IHJlID0gc291cmNlKHJlZ2V4KTtcbiAgICBsZXQgb3V0ID0gJyc7XG5cbiAgICB3aGlsZSAocmUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBCQUNLUkVGX1JFLmV4ZWMocmUpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBvdXQgKz0gcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgb3V0ICs9IHJlLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCk7XG4gICAgICByZSA9IHJlLnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICBpZiAobWF0Y2hbMF1bMF0gPT09ICdcXFxcJyAmJiBtYXRjaFsxXSkge1xuICAgICAgICAvLyBBZGp1c3QgdGhlIGJhY2tyZWZlcmVuY2UuXG4gICAgICAgIG91dCArPSAnXFxcXCcgKyBTdHJpbmcoTnVtYmVyKG1hdGNoWzFdKSArIG9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gbWF0Y2hbMF07XG4gICAgICAgIGlmIChtYXRjaFswXSA9PT0gJygnKSB7XG4gICAgICAgICAgbnVtQ2FwdHVyZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9KS5tYXAocmUgPT4gYCgke3JlfSlgKS5qb2luKHNlcGFyYXRvcik7XG59XG5cbi8vIENvbW1vbiByZWdleHBzXG5jb25zdCBNQVRDSF9OT1RISU5HX1JFID0gL1xcYlxcQi87XG5jb25zdCBJREVOVF9SRSA9ICdbYS16QS1aXVxcXFx3Kic7XG5jb25zdCBVTkRFUlNDT1JFX0lERU5UX1JFID0gJ1thLXpBLVpfXVxcXFx3Kic7XG5jb25zdCBOVU1CRVJfUkUgPSAnXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCspPyc7XG5jb25zdCBDX05VTUJFUl9SRSA9ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KSc7IC8vIDB4Li4uLCAwLi4uLCBkZWNpbWFsLCBmbG9hdFxuY29uc3QgQklOQVJZX05VTUJFUl9SRSA9ICdcXFxcYigwYlswMV0rKSc7IC8vIDBiLi4uXG5jb25zdCBSRV9TVEFSVEVSU19SRSA9ICchfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFxcXCp8XFxcXCo9fFxcXFwrfFxcXFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFxcXD98XFxcXFt8XFxcXHt8XFxcXCh8XFxcXF58XFxcXF49fFxcXFx8fFxcXFx8PXxcXFxcfFxcXFx8fH4nO1xuXG4vKipcbiogQHBhcmFtIHsgUGFydGlhbDxNb2RlPiAmIHtiaW5hcnk/OiBzdHJpbmcgfCBSZWdFeHB9IH0gb3B0c1xuKi9cbmNvbnN0IFNIRUJBTkcgPSAob3B0cyA9IHt9KSA9PiB7XG4gIGNvbnN0IGJlZ2luU2hlYmFuZyA9IC9eIyFbIF0qXFwvLztcbiAgaWYgKG9wdHMuYmluYXJ5KSB7XG4gICAgb3B0cy5iZWdpbiA9IGNvbmNhdChcbiAgICAgIGJlZ2luU2hlYmFuZyxcbiAgICAgIC8uKlxcYi8sXG4gICAgICBvcHRzLmJpbmFyeSxcbiAgICAgIC9cXGIuKi8pO1xuICB9XG4gIHJldHVybiBpbmhlcml0KHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogYmVnaW5TaGViYW5nLFxuICAgIGVuZDogLyQvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICAvKiogQHR5cGUge01vZGVDYWxsYmFja30gKi9cbiAgICBcIm9uOmJlZ2luXCI6IChtLCByZXNwKSA9PiB7XG4gICAgICBpZiAobS5pbmRleCAhPT0gMCkgcmVzcC5pZ25vcmVNYXRjaCgpO1xuICAgIH1cbiAgfSwgb3B0cyk7XG59O1xuXG4vLyBDb21tb24gbW9kZXNcbmNvbnN0IEJBQ0tTTEFTSF9FU0NBUEUgPSB7XG4gIGJlZ2luOiAnXFxcXFxcXFxbXFxcXHNcXFxcU10nLCByZWxldmFuY2U6IDBcbn07XG5jb25zdCBBUE9TX1NUUklOR19NT0RFID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBiZWdpbjogJ1xcJycsXG4gIGVuZDogJ1xcJycsXG4gIGlsbGVnYWw6ICdcXFxcbicsXG4gIGNvbnRhaW5zOiBbQkFDS1NMQVNIX0VTQ0FQRV1cbn07XG5jb25zdCBRVU9URV9TVFJJTkdfTU9ERSA9IHtcbiAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgYmVnaW46ICdcIicsXG4gIGVuZDogJ1wiJyxcbiAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgY29udGFpbnM6IFtCQUNLU0xBU0hfRVNDQVBFXVxufTtcbmNvbnN0IFBIUkFTQUxfV09SRFNfTU9ERSA9IHtcbiAgYmVnaW46IC9cXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxcYi9cbn07XG4vKipcbiAqIENyZWF0ZXMgYSBjb21tZW50IG1vZGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IFJlZ0V4cH0gYmVnaW5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgUmVnRXhwfSBlbmRcbiAqIEBwYXJhbSB7TW9kZSB8IHt9fSBbbW9kZU9wdGlvbnNdXG4gKiBAcmV0dXJucyB7UGFydGlhbDxNb2RlPn1cbiAqL1xuY29uc3QgQ09NTUVOVCA9IGZ1bmN0aW9uKGJlZ2luLCBlbmQsIG1vZGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgbW9kZSA9IGluaGVyaXQoXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICBiZWdpbixcbiAgICAgIGVuZCxcbiAgICAgIGNvbnRhaW5zOiBbXVxuICAgIH0sXG4gICAgbW9kZU9wdGlvbnNcbiAgKTtcbiAgbW9kZS5jb250YWlucy5wdXNoKFBIUkFTQUxfV09SRFNfTU9ERSk7XG4gIG1vZGUuY29udGFpbnMucHVzaCh7XG4gICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICBiZWdpbjogJyg/OlRPRE98RklYTUV8Tk9URXxCVUd8T1BUSU1JWkV8SEFDS3xYWFgpOicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH0pO1xuICByZXR1cm4gbW9kZTtcbn07XG5jb25zdCBDX0xJTkVfQ09NTUVOVF9NT0RFID0gQ09NTUVOVCgnLy8nLCAnJCcpO1xuY29uc3QgQ19CTE9DS19DT01NRU5UX01PREUgPSBDT01NRU5UKCcvXFxcXConLCAnXFxcXCovJyk7XG5jb25zdCBIQVNIX0NPTU1FTlRfTU9ERSA9IENPTU1FTlQoJyMnLCAnJCcpO1xuY29uc3QgTlVNQkVSX01PREUgPSB7XG4gIGNsYXNzTmFtZTogJ251bWJlcicsXG4gIGJlZ2luOiBOVU1CRVJfUkUsXG4gIHJlbGV2YW5jZTogMFxufTtcbmNvbnN0IENfTlVNQkVSX01PREUgPSB7XG4gIGNsYXNzTmFtZTogJ251bWJlcicsXG4gIGJlZ2luOiBDX05VTUJFUl9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgQklOQVJZX05VTUJFUl9NT0RFID0ge1xuICBjbGFzc05hbWU6ICdudW1iZXInLFxuICBiZWdpbjogQklOQVJZX05VTUJFUl9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgQ1NTX05VTUJFUl9NT0RFID0ge1xuICBjbGFzc05hbWU6ICdudW1iZXInLFxuICBiZWdpbjogTlVNQkVSX1JFICsgJygnICtcbiAgICAnJXxlbXxleHxjaHxyZW0nICtcbiAgICAnfHZ3fHZofHZtaW58dm1heCcgK1xuICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAnfGRlZ3xncmFkfHJhZHx0dXJuJyArXG4gICAgJ3xzfG1zJyArXG4gICAgJ3xIenxrSHonICtcbiAgICAnfGRwaXxkcGNtfGRwcHgnICtcbiAgICAnKT8nLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBSRUdFWFBfTU9ERSA9IHtcbiAgLy8gdGhpcyBvdXRlciBydWxlIG1ha2VzIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSBhIFdIT0xFIHJlZ2V4IGFuZCBub3Qgc2ltcGx5XG4gIC8vIGFuIGV4cHJlc3Npb24gc3VjaCBhczpcbiAgLy9cbiAgLy8gICAgIDMgLyBzb21ldGhpbmdcbiAgLy9cbiAgLy8gKHdoaWNoIHdpbGwgdGhlbiBibG93IHVwIHdoZW4gcmVnZXgncyBgaWxsZWdhbGAgc2VlcyB0aGUgbmV3bGluZSlcbiAgYmVnaW46IC8oPz1cXC9bXi9cXG5dKlxcLykvLFxuICBjb250YWluczogW3tcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGJlZ2luOiAvXFwvLyxcbiAgICBlbmQ6IC9cXC9bZ2ltdXldKi8sXG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW0JBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9XVxufTtcbmNvbnN0IFRJVExFX01PREUgPSB7XG4gIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgYmVnaW46IElERU5UX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBVTkRFUlNDT1JFX1RJVExFX01PREUgPSB7XG4gIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gIHJlbGV2YW5jZTogMFxufTtcbmNvbnN0IE1FVEhPRF9HVUFSRCA9IHtcbiAgLy8gZXhjbHVkZXMgbWV0aG9kIG5hbWVzIGZyb20ga2V5d29yZCBwcm9jZXNzaW5nXG4gIGJlZ2luOiAnXFxcXC5cXFxccyonICsgVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuXG4vKipcbiAqIEFkZHMgZW5kIHNhbWUgYXMgYmVnaW4gbWVjaGFuaWNzIHRvIGEgbW9kZVxuICpcbiAqIFlvdXIgbW9kZSBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgYSBzaW5nbGUgKCkgbWF0Y2ggZ3JvdXAgYXMgdGhhdCBmaXJzdCBtYXRjaFxuICogZ3JvdXAgaXMgd2hhdCBpcyB1c2VkIGZvciBjb21wYXJpc29uXG4gKiBAcGFyYW0ge1BhcnRpYWw8TW9kZT59IG1vZGVcbiAqL1xuY29uc3QgRU5EX1NBTUVfQVNfQkVHSU4gPSBmdW5jdGlvbihtb2RlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG1vZGUsXG4gICAge1xuICAgICAgLyoqIEB0eXBlIHtNb2RlQ2FsbGJhY2t9ICovXG4gICAgICAnb246YmVnaW4nOiAobSwgcmVzcCkgPT4geyByZXNwLmRhdGEuX2JlZ2luTWF0Y2ggPSBtWzFdOyB9LFxuICAgICAgLyoqIEB0eXBlIHtNb2RlQ2FsbGJhY2t9ICovXG4gICAgICAnb246ZW5kJzogKG0sIHJlc3ApID0+IHsgaWYgKHJlc3AuZGF0YS5fYmVnaW5NYXRjaCAhPT0gbVsxXSkgcmVzcC5pZ25vcmVNYXRjaCgpOyB9XG4gICAgfSk7XG59O1xuXG52YXIgTU9ERVMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIE1BVENIX05PVEhJTkdfUkU6IE1BVENIX05PVEhJTkdfUkUsXG4gICAgSURFTlRfUkU6IElERU5UX1JFLFxuICAgIFVOREVSU0NPUkVfSURFTlRfUkU6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgTlVNQkVSX1JFOiBOVU1CRVJfUkUsXG4gICAgQ19OVU1CRVJfUkU6IENfTlVNQkVSX1JFLFxuICAgIEJJTkFSWV9OVU1CRVJfUkU6IEJJTkFSWV9OVU1CRVJfUkUsXG4gICAgUkVfU1RBUlRFUlNfUkU6IFJFX1NUQVJURVJTX1JFLFxuICAgIFNIRUJBTkc6IFNIRUJBTkcsXG4gICAgQkFDS1NMQVNIX0VTQ0FQRTogQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICBBUE9TX1NUUklOR19NT0RFOiBBUE9TX1NUUklOR19NT0RFLFxuICAgIFFVT1RFX1NUUklOR19NT0RFOiBRVU9URV9TVFJJTkdfTU9ERSxcbiAgICBQSFJBU0FMX1dPUkRTX01PREU6IFBIUkFTQUxfV09SRFNfTU9ERSxcbiAgICBDT01NRU5UOiBDT01NRU5ULFxuICAgIENfTElORV9DT01NRU5UX01PREU6IENfTElORV9DT01NRU5UX01PREUsXG4gICAgQ19CTE9DS19DT01NRU5UX01PREU6IENfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIEhBU0hfQ09NTUVOVF9NT0RFOiBIQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJfTU9ERTogTlVNQkVSX01PREUsXG4gICAgQ19OVU1CRVJfTU9ERTogQ19OVU1CRVJfTU9ERSxcbiAgICBCSU5BUllfTlVNQkVSX01PREU6IEJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICBDU1NfTlVNQkVSX01PREU6IENTU19OVU1CRVJfTU9ERSxcbiAgICBSRUdFWFBfTU9ERTogUkVHRVhQX01PREUsXG4gICAgVElUTEVfTU9ERTogVElUTEVfTU9ERSxcbiAgICBVTkRFUlNDT1JFX1RJVExFX01PREU6IFVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICBNRVRIT0RfR1VBUkQ6IE1FVEhPRF9HVUFSRCxcbiAgICBFTkRfU0FNRV9BU19CRUdJTjogRU5EX1NBTUVfQVNfQkVHSU5cbn0pO1xuXG4vLyBHcmFtbWFyIGV4dGVuc2lvbnMgLyBwbHVnaW5zXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzI4MzNcblxuLy8gR3JhbW1hciBleHRlbnNpb25zIGFsbG93IFwic3ludGFjdGljIHN1Z2FyXCIgdG8gYmUgYWRkZWQgdG8gdGhlIGdyYW1tYXIgbW9kZXNcbi8vIHdpdGhvdXQgcmVxdWlyaW5nIGFueSB1bmRlcmx5aW5nIGNoYW5nZXMgdG8gdGhlIGNvbXBpbGVyIGludGVybmFscy5cblxuLy8gYGNvbXBpbGVNYXRjaGAgYmVpbmcgdGhlIHBlcmZlY3Qgc21hbGwgZXhhbXBsZSBvZiBub3cgYWxsb3dpbmcgYSBncmFtbWFyXG4vLyBhdXRob3IgdG8gd3JpdGUgYG1hdGNoYCB3aGVuIHRoZXkgZGVzaXJlIHRvIG1hdGNoIGEgc2luZ2xlIGV4cHJlc3Npb24gcmF0aGVyXG4vLyB0aGFuIGJlaW5nIGZvcmNlZCB0byB1c2UgYGJlZ2luYC4gIFRoZSBleHRlbnNpb24gdGhlbiBqdXN0IG1vdmVzIGBtYXRjaGAgaW50b1xuLy8gYGJlZ2luYCB3aGVuIGl0IHJ1bnMuICBJZSwgbm8gZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkLCBidXQgd2UndmUganVzdCBtYWRlXG4vLyB0aGUgZXhwZXJpZW5jZSBvZiB3cml0aW5nIChhbmQgcmVhZGluZyBncmFtbWFycykgYSBsaXR0bGUgYml0IG5pY2VyLlxuXG4vLyAtLS0tLS1cblxuLy8gVE9ETzogV2UgbmVlZCBuZWdhdGl2ZSBsb29rLWJlaGluZCBzdXBwb3J0IHRvIGRvIHRoaXMgcHJvcGVybHlcbi8qKlxuICogU2tpcCBhIG1hdGNoIGlmIGl0IGhhcyBhIHByZWNlZGluZyBkb3RcbiAqXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGBiZWdpbktleXdvcmRzYCB0byBwcmV2ZW50IG1hdGNoaW5nIGV4cHJlc3Npb25zIHN1Y2ggYXNcbiAqIGBib2Iua2V5d29yZC5kbygpYC4gVGhlIG1vZGUgY29tcGlsZXIgYXV0b21hdGljYWxseSB3aXJlcyB0aGlzIHVwIGFzIGFcbiAqIHNwZWNpYWwgX2ludGVybmFsXyAnb246YmVnaW4nIGNhbGxiYWNrIGZvciBtb2RlcyB3aXRoIGBiZWdpbktleXdvcmRzYFxuICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICogQHBhcmFtIHtDYWxsYmFja1Jlc3BvbnNlfSByZXNwb25zZVxuICovXG5mdW5jdGlvbiBza2lwSWZoYXNQcmVjZWRpbmdEb3QobWF0Y2gsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGJlZm9yZSA9IG1hdGNoLmlucHV0W21hdGNoLmluZGV4IC0gMV07XG4gIGlmIChiZWZvcmUgPT09IFwiLlwiKSB7XG4gICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgfVxufVxuXG5cbi8qKlxuICogYGJlZ2luS2V5d29yZHNgIHN5bnRhY3RpYyBzdWdhclxuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBiZWdpbktleXdvcmRzKG1vZGUsIHBhcmVudCkge1xuICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICBpZiAoIW1vZGUuYmVnaW5LZXl3b3JkcykgcmV0dXJuO1xuXG4gIC8vIGZvciBsYW5ndWFnZXMgd2l0aCBrZXl3b3JkcyB0aGF0IGluY2x1ZGUgbm9uLXdvcmQgY2hhcmFjdGVycyBjaGVja2luZyBmb3JcbiAgLy8gYSB3b3JkIGJvdW5kYXJ5IGlzIG5vdCBzdWZmaWNpZW50LCBzbyBpbnN0ZWFkIHdlIGNoZWNrIGZvciBhIHdvcmQgYm91bmRhcnlcbiAgLy8gb3Igd2hpdGVzcGFjZSAtIHRoaXMgZG9lcyBubyBoYXJtIGluIGFueSBjYXNlIHNpbmNlIG91ciBrZXl3b3JkIGVuZ2luZVxuICAvLyBkb2Vzbid0IGFsbG93IHNwYWNlcyBpbiBrZXl3b3JkcyBhbnl3YXlzIGFuZCB3ZSBzdGlsbCBjaGVjayBmb3IgdGhlIGJvdW5kYXJ5XG4gIC8vIGZpcnN0XG4gIG1vZGUuYmVnaW4gPSAnXFxcXGIoJyArIG1vZGUuYmVnaW5LZXl3b3Jkcy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpKD8hXFxcXC4pKD89XFxcXGJ8XFxcXHMpJztcbiAgbW9kZS5fX2JlZm9yZUJlZ2luID0gc2tpcElmaGFzUHJlY2VkaW5nRG90O1xuICBtb2RlLmtleXdvcmRzID0gbW9kZS5rZXl3b3JkcyB8fCBtb2RlLmJlZ2luS2V5d29yZHM7XG4gIGRlbGV0ZSBtb2RlLmJlZ2luS2V5d29yZHM7XG5cbiAgLy8gcHJldmVudHMgZG91YmxlIHJlbGV2YW5jZSwgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMgcHJvdmlkZVxuICAvLyByZWxldmFuY2UsIHRoZSBtb2RlIGRvZXNuJ3QgbmVlZCB0byBkb3VibGUgaXRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICBpZiAobW9kZS5yZWxldmFuY2UgPT09IHVuZGVmaW5lZCkgbW9kZS5yZWxldmFuY2UgPSAwO1xufVxuXG4vKipcbiAqIEFsbG93IGBpbGxlZ2FsYCB0byBjb250YWluIGFuIGFycmF5IG9mIGlsbGVnYWwgdmFsdWVzXG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbGxlZ2FsKG1vZGUsIF9wYXJlbnQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGUuaWxsZWdhbCkpIHJldHVybjtcblxuICBtb2RlLmlsbGVnYWwgPSBlaXRoZXIoLi4ubW9kZS5pbGxlZ2FsKTtcbn1cblxuLyoqXG4gKiBgbWF0Y2hgIHRvIG1hdGNoIGEgc2luZ2xlIGV4cHJlc3Npb24gZm9yIHJlYWRhYmlsaXR5XG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVNYXRjaChtb2RlLCBfcGFyZW50KSB7XG4gIGlmICghbW9kZS5tYXRjaCkgcmV0dXJuO1xuICBpZiAobW9kZS5iZWdpbiB8fCBtb2RlLmVuZCkgdGhyb3cgbmV3IEVycm9yKFwiYmVnaW4gJiBlbmQgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBtYXRjaFwiKTtcblxuICBtb2RlLmJlZ2luID0gbW9kZS5tYXRjaDtcbiAgZGVsZXRlIG1vZGUubWF0Y2g7XG59XG5cbi8qKlxuICogcHJvdmlkZXMgdGhlIGRlZmF1bHQgMSByZWxldmFuY2UgdG8gYWxsIG1vZGVzXG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVSZWxldmFuY2UobW9kZSwgX3BhcmVudCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gIGlmIChtb2RlLnJlbGV2YW5jZSA9PT0gdW5kZWZpbmVkKSBtb2RlLnJlbGV2YW5jZSA9IDE7XG59XG5cbi8vIGtleXdvcmRzIHRoYXQgc2hvdWxkIGhhdmUgbm8gZGVmYXVsdCByZWxldmFuY2UgdmFsdWVcbmNvbnN0IENPTU1PTl9LRVlXT1JEUyA9IFtcbiAgJ29mJyxcbiAgJ2FuZCcsXG4gICdmb3InLFxuICAnaW4nLFxuICAnbm90JyxcbiAgJ29yJyxcbiAgJ2lmJyxcbiAgJ3RoZW4nLFxuICAncGFyZW50JywgLy8gY29tbW9uIHZhcmlhYmxlIG5hbWVcbiAgJ2xpc3QnLCAvLyBjb21tb24gdmFyaWFibGUgbmFtZVxuICAndmFsdWUnIC8vIGNvbW1vbiB2YXJpYWJsZSBuYW1lXG5dO1xuXG5jb25zdCBERUZBVUxUX0tFWVdPUkRfQ0xBU1NOQU1FID0gXCJrZXl3b3JkXCI7XG5cbi8qKlxuICogR2l2ZW4gcmF3IGtleXdvcmRzIGZyb20gYSBsYW5ndWFnZSBkZWZpbml0aW9uLCBjb21waWxlIHRoZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xzdHJpbmdbXT4gfCBBcnJheTxzdHJpbmc+fSByYXdLZXl3b3Jkc1xuICogQHBhcmFtIHtib29sZWFufSBjYXNlSW5zZW5zaXRpdmVcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUtleXdvcmRzKHJhd0tleXdvcmRzLCBjYXNlSW5zZW5zaXRpdmUsIGNsYXNzTmFtZSA9IERFRkFVTFRfS0VZV09SRF9DTEFTU05BTUUpIHtcbiAgLyoqIEB0eXBlIEtleXdvcmREaWN0ICovXG4gIGNvbnN0IGNvbXBpbGVkS2V5d29yZHMgPSB7fTtcblxuICAvLyBpbnB1dCBjYW4gYmUgYSBzdHJpbmcgb2Yga2V5d29yZHMsIGFuIGFycmF5IG9mIGtleXdvcmRzLCBvciBhIG9iamVjdCB3aXRoXG4gIC8vIG5hbWVkIGtleXMgcmVwcmVzZW50aW5nIGNsYXNzTmFtZSAod2hpY2ggY2FuIHRoZW4gcG9pbnQgdG8gYSBzdHJpbmcgb3IgYXJyYXkpXG4gIGlmICh0eXBlb2YgcmF3S2V5d29yZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29tcGlsZUxpc3QoY2xhc3NOYW1lLCByYXdLZXl3b3Jkcy5zcGxpdChcIiBcIikpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmF3S2V5d29yZHMpKSB7XG4gICAgY29tcGlsZUxpc3QoY2xhc3NOYW1lLCByYXdLZXl3b3Jkcyk7XG4gIH0gZWxzZSB7XG4gICAgT2JqZWN0LmtleXMocmF3S2V5d29yZHMpLmZvckVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICAvLyBjb2xsYXBzZSBhbGwgb3VyIG9iamVjdHMgYmFjayBpbnRvIHRoZSBwYXJlbnQgb2JqZWN0XG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICBjb21waWxlZEtleXdvcmRzLFxuICAgICAgICBjb21waWxlS2V5d29yZHMocmF3S2V5d29yZHNbY2xhc3NOYW1lXSwgY2FzZUluc2Vuc2l0aXZlLCBjbGFzc05hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21waWxlZEtleXdvcmRzO1xuXG4gIC8vIC0tLVxuXG4gIC8qKlxuICAgKiBDb21waWxlcyBhbiBpbmRpdmlkdWFsIGxpc3Qgb2Yga2V5d29yZHNcbiAgICpcbiAgICogRXg6IFwiZm9yIGlmIHdoZW4gd2hpbGV8NVwiXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBrZXl3b3JkTGlzdFxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGlsZUxpc3QoY2xhc3NOYW1lLCBrZXl3b3JkTGlzdCkge1xuICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgIGtleXdvcmRMaXN0ID0ga2V5d29yZExpc3QubWFwKHggPT4geC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gICAga2V5d29yZExpc3QuZm9yRWFjaChmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICBjb25zdCBwYWlyID0ga2V5d29yZC5zcGxpdCgnfCcpO1xuICAgICAgY29tcGlsZWRLZXl3b3Jkc1twYWlyWzBdXSA9IFtjbGFzc05hbWUsIHNjb3JlRm9yS2V5d29yZChwYWlyWzBdLCBwYWlyWzFdKV07XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm9wZXIgc2NvcmUgZm9yIGEgZ2l2ZW4ga2V5d29yZFxuICpcbiAqIEFsc28gdGFrZXMgaW50byBhY2NvdW50IGNvbW1lbnQga2V5d29yZHMsIHdoaWNoIHdpbGwgYmUgc2NvcmVkIDAgVU5MRVNTXG4gKiBhbm90aGVyIHNjb3JlIGhhcyBiZWVuIG1hbnVhbGx5IGFzc2lnbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleXdvcmRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvdmlkZWRTY29yZV1cbiAqL1xuZnVuY3Rpb24gc2NvcmVGb3JLZXl3b3JkKGtleXdvcmQsIHByb3ZpZGVkU2NvcmUpIHtcbiAgLy8gbWFudWFsIHNjb3JlcyBhbHdheXMgd2luIG92ZXIgY29tbW9uIGtleXdvcmRzXG4gIC8vIHNvIHlvdSBjYW4gZm9yY2UgYSBzY29yZSBvZiAxIGlmIHlvdSByZWFsbHkgaW5zaXN0XG4gIGlmIChwcm92aWRlZFNjb3JlKSB7XG4gICAgcmV0dXJuIE51bWJlcihwcm92aWRlZFNjb3JlKTtcbiAgfVxuXG4gIHJldHVybiBjb21tb25LZXl3b3JkKGtleXdvcmQpID8gMCA6IDE7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGtleXdvcmQgaXMgY29tbW9uIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXl3b3JkICovXG5mdW5jdGlvbiBjb21tb25LZXl3b3JkKGtleXdvcmQpIHtcbiAgcmV0dXJuIENPTU1PTl9LRVlXT1JEUy5pbmNsdWRlcyhrZXl3b3JkLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vLyBjb21waWxhdGlvblxuXG4vKipcbiAqIENvbXBpbGVzIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiByZXN1bHRcbiAqXG4gKiBHaXZlbiB0aGUgcmF3IHJlc3VsdCBvZiBhIGxhbmd1YWdlIGRlZmluaXRpb24gKExhbmd1YWdlKSwgY29tcGlsZXMgdGhpcyBzb1xuICogdGhhdCBpdCBpcyByZWFkeSBmb3IgaGlnaGxpZ2h0aW5nIGNvZGUuXG4gKiBAcGFyYW0ge0xhbmd1YWdlfSBsYW5ndWFnZVxuICogQHBhcmFtIHt7cGx1Z2luczogSExKU1BsdWdpbltdfX0gb3B0c1xuICogQHJldHVybnMge0NvbXBpbGVkTGFuZ3VhZ2V9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVMYW5ndWFnZShsYW5ndWFnZSwgeyBwbHVnaW5zIH0pIHtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHJlZ2V4IHdpdGggdGhlIGNhc2Ugc2Vuc2F0aXZpbGl0eSBvZiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBbZ2xvYmFsXVxuICAgKi9cbiAgZnVuY3Rpb24gbGFuZ1JlKHZhbHVlLCBnbG9iYWwpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgIHNvdXJjZSh2YWx1ZSksXG4gICAgICAnbScgKyAobGFuZ3VhZ2UuY2FzZV9pbnNlbnNpdGl2ZSA/ICdpJyA6ICcnKSArIChnbG9iYWwgPyAnZycgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAgU3RvcmVzIG11bHRpcGxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIGFsbG93cyB5b3UgdG8gcXVpY2tseSBzZWFyY2ggZm9yXG4gICAgdGhlbSBhbGwgaW4gYSBzdHJpbmcgc2ltdWx0YW5lb3VzbHkgLSByZXR1cm5pbmcgdGhlIGZpcnN0IG1hdGNoLiAgSXQgZG9lc1xuICAgIHRoaXMgYnkgY3JlYXRpbmcgYSBodWdlIChhfGJ8YykgcmVnZXggLSBlYWNoIGluZGl2aWR1YWwgaXRlbSB3cmFwcGVkIHdpdGggKClcbiAgICBhbmQgam9pbmVkIGJ5IGB8YCAtIHVzaW5nIG1hdGNoIGdyb3VwcyB0byB0cmFjayBwb3NpdGlvbi4gIFdoZW4gYSBtYXRjaCBpc1xuICAgIGZvdW5kIGNoZWNraW5nIHdoaWNoIHBvc2l0aW9uIGluIHRoZSBhcnJheSBoYXMgY29udGVudCBhbGxvd3MgdXMgdG8gZmlndXJlXG4gICAgb3V0IHdoaWNoIG9mIHRoZSBvcmlnaW5hbCByZWdleGVzIC8gbWF0Y2ggZ3JvdXBzIHRyaWdnZXJlZCB0aGUgbWF0Y2guXG5cbiAgICBUaGUgbWF0Y2ggb2JqZWN0IGl0c2VsZiAodGhlIHJlc3VsdCBvZiBgUmVnZXguZXhlY2ApIGlzIHJldHVybmVkIGJ1dCBhbHNvXG4gICAgZW5oYW5jZWQgYnkgbWVyZ2luZyBpbiBhbnkgbWV0YS1kYXRhIHRoYXQgd2FzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVnZXguXG4gICAgVGhpcyBpcyBob3cgd2Uga2VlcCB0cmFjayBvZiB3aGljaCBtb2RlIG1hdGNoZWQsIGFuZCB3aGF0IHR5cGUgb2YgcnVsZVxuICAgIChgaWxsZWdhbGAsIGBiZWdpbmAsIGVuZCwgZXRjKS5cbiAgKi9cbiAgY2xhc3MgTXVsdGlSZWdleCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLm1hdGNoSW5kZXhlcyA9IHt9O1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5yZWdleGVzID0gW107XG4gICAgICB0aGlzLm1hdGNoQXQgPSAxO1xuICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGFkZFJ1bGUocmUsIG9wdHMpIHtcbiAgICAgIG9wdHMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uKys7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLm1hdGNoSW5kZXhlc1t0aGlzLm1hdGNoQXRdID0gb3B0cztcbiAgICAgIHRoaXMucmVnZXhlcy5wdXNoKFtvcHRzLCByZV0pO1xuICAgICAgdGhpcy5tYXRjaEF0ICs9IGNvdW50TWF0Y2hHcm91cHMocmUpICsgMTtcbiAgICB9XG5cbiAgICBjb21waWxlKCkge1xuICAgICAgaWYgKHRoaXMucmVnZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYXZvaWRzIHRoZSBuZWVkIHRvIGNoZWNrIGxlbmd0aCBldmVyeSB0aW1lIGV4ZWMgaXMgY2FsbGVkXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5leGVjID0gKCkgPT4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRlcm1pbmF0b3JzID0gdGhpcy5yZWdleGVzLm1hcChlbCA9PiBlbFsxXSk7XG4gICAgICB0aGlzLm1hdGNoZXJSZSA9IGxhbmdSZShqb2luKHRlcm1pbmF0b3JzKSwgdHJ1ZSk7XG4gICAgICB0aGlzLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSB7c3RyaW5nfSBzICovXG4gICAgZXhlYyhzKSB7XG4gICAgICB0aGlzLm1hdGNoZXJSZS5sYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleDtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaGVyUmUuZXhlYyhzKTtcbiAgICAgIGlmICghbWF0Y2gpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgY29uc3QgaSA9IG1hdGNoLmZpbmRJbmRleCgoZWwsIGkpID0+IGkgPiAwICYmIGVsICE9PSB1bmRlZmluZWQpO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbWF0Y2hEYXRhID0gdGhpcy5tYXRjaEluZGV4ZXNbaV07XG4gICAgICAvLyB0cmltIG9mZiBhbnkgZWFybGllciBub24tcmVsZXZhbnQgbWF0Y2ggZ3JvdXBzIChpZSwgdGhlIG90aGVyIHJlZ2V4XG4gICAgICAvLyBtYXRjaCBncm91cHMgdGhhdCBtYWtlIHVwIHRoZSBtdWx0aS1tYXRjaGVyKVxuICAgICAgbWF0Y2guc3BsaWNlKDAsIGkpO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtYXRjaCwgbWF0Y2hEYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIENyZWF0ZWQgdG8gc29sdmUgdGhlIGtleSBkZWZpY2llbnRseSB3aXRoIE11bHRpUmVnZXggLSB0aGVyZSBpcyBubyB3YXkgdG9cbiAgICB0ZXN0IGZvciBtdWx0aXBsZSBtYXRjaGVzIGF0IGEgc2luZ2xlIGxvY2F0aW9uLiAgV2h5IHdvdWxkIHdlIG5lZWQgdG8gZG9cbiAgICB0aGF0PyAgSW4gdGhlIGZ1dHVyZSBhIG1vcmUgZHluYW1pYyBlbmdpbmUgd2lsbCBhbGxvdyBjZXJ0YWluIG1hdGNoZXMgdG8gYmVcbiAgICBpZ25vcmVkLiAgQW4gZXhhbXBsZTogaWYgd2UgbWF0Y2hlZCBzYXkgdGhlIDNyZCByZWdleCBpbiBhIGxhcmdlIGdyb3VwIGJ1dFxuICAgIGRlY2lkZWQgdG8gaWdub3JlIGl0IC0gd2UnZCBuZWVkIHRvIHN0YXJ0ZWQgdGVzdGluZyBhZ2FpbiBhdCB0aGUgNHRoXG4gICAgcmVnZXguLi4gYnV0IE11bHRpUmVnZXggaXRzZWxmIGdpdmVzIHVzIG5vIHJlYWwgd2F5IHRvIGRvIHRoYXQuXG5cbiAgICBTbyB3aGF0IHRoaXMgY2xhc3MgY3JlYXRlcyBNdWx0aVJlZ2V4cyBvbiB0aGUgZmx5IGZvciB3aGF0ZXZlciBzZWFyY2hcbiAgICBwb3NpdGlvbiB0aGV5IGFyZSBuZWVkZWQuXG5cbiAgICBOT1RFOiBUaGVzZSBhZGRpdGlvbmFsIE11bHRpUmVnZXggb2JqZWN0cyBhcmUgY3JlYXRlZCBkeW5hbWljYWxseS4gIEZvciBtb3N0XG4gICAgZ3JhbW1hcnMgbW9zdCBvZiB0aGUgdGltZSB3ZSB3aWxsIG5ldmVyIGFjdHVhbGx5IG5lZWQgYW55dGhpbmcgbW9yZSB0aGFuIHRoZVxuICAgIGZpcnN0IE11bHRpUmVnZXggLSBzbyB0aGlzIHNob3VsZG4ndCBoYXZlIHRvbyBtdWNoIG92ZXJoZWFkLlxuXG4gICAgU2F5IHRoaXMgaXMgb3VyIHNlYXJjaCBncm91cCwgYW5kIHdlIG1hdGNoIHJlZ2V4MywgYnV0IHdpc2ggdG8gaWdub3JlIGl0LlxuXG4gICAgICByZWdleDEgfCByZWdleDIgfCByZWdleDMgfCByZWdleDQgfCByZWdleDUgICAgJyBpZSwgc3RhcnRBdCA9IDBcblxuICAgIFdoYXQgd2UgbmVlZCBpcyBhIG5ldyBNdWx0aVJlZ2V4IHRoYXQgb25seSBpbmNsdWRlcyB0aGUgcmVtYWluaW5nXG4gICAgcG9zc2liaWxpdGllczpcblxuICAgICAgcmVnZXg0IHwgcmVnZXg1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaWUsIHN0YXJ0QXQgPSAzXG5cbiAgICBUaGlzIGNsYXNzIHdyYXBzIGFsbCB0aGF0IGNvbXBsZXhpdHkgdXAgaW4gYSBzaW1wbGUgQVBJLi4uIGBzdGFydEF0YCBkZWNpZGVzXG4gICAgd2hlcmUgaW4gdGhlIGFycmF5IG9mIGV4cHJlc3Npb25zIHRvIHN0YXJ0IGRvaW5nIHRoZSBtYXRjaGluZy4gSXRcbiAgICBhdXRvLWluY3JlbWVudHMsIHNvIGlmIGEgbWF0Y2ggaXMgZm91bmQgYXQgcG9zaXRpb24gMiwgdGhlbiBzdGFydEF0IHdpbGwgYmVcbiAgICBzZXQgdG8gMy4gIElmIHRoZSBlbmQgaXMgcmVhY2hlZCBzdGFydEF0IHdpbGwgcmV0dXJuIHRvIDAuXG5cbiAgICBNT1NUIG9mIHRoZSB0aW1lIHRoZSBwYXJzZXIgd2lsbCBiZSBzZXR0aW5nIHN0YXJ0QXQgbWFudWFsbHkgdG8gMC5cbiAgKi9cbiAgY2xhc3MgUmVzdW1hYmxlTXVsdGlSZWdleCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnJ1bGVzID0gW107XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLm11bHRpUmVnZXhlcyA9IFtdO1xuICAgICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICAgIHRoaXMubGFzdEluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVnZXhJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGdldE1hdGNoZXIoaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpUmVnZXhlc1tpbmRleF0pIHJldHVybiB0aGlzLm11bHRpUmVnZXhlc1tpbmRleF07XG5cbiAgICAgIGNvbnN0IG1hdGNoZXIgPSBuZXcgTXVsdGlSZWdleCgpO1xuICAgICAgdGhpcy5ydWxlcy5zbGljZShpbmRleCkuZm9yRWFjaCgoW3JlLCBvcHRzXSkgPT4gbWF0Y2hlci5hZGRSdWxlKHJlLCBvcHRzKSk7XG4gICAgICBtYXRjaGVyLmNvbXBpbGUoKTtcbiAgICAgIHRoaXMubXVsdGlSZWdleGVzW2luZGV4XSA9IG1hdGNoZXI7XG4gICAgICByZXR1cm4gbWF0Y2hlcjtcbiAgICB9XG5cbiAgICByZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZ2V4SW5kZXggIT09IDA7XG4gICAgfVxuXG4gICAgY29uc2lkZXJBbGwoKSB7XG4gICAgICB0aGlzLnJlZ2V4SW5kZXggPSAwO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhZGRSdWxlKHJlLCBvcHRzKSB7XG4gICAgICB0aGlzLnJ1bGVzLnB1c2goW3JlLCBvcHRzXSk7XG4gICAgICBpZiAob3B0cy50eXBlID09PSBcImJlZ2luXCIpIHRoaXMuY291bnQrKztcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtzdHJpbmd9IHMgKi9cbiAgICBleGVjKHMpIHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLmdldE1hdGNoZXIodGhpcy5yZWdleEluZGV4KTtcbiAgICAgIG0ubGFzdEluZGV4ID0gdGhpcy5sYXN0SW5kZXg7XG4gICAgICBsZXQgcmVzdWx0ID0gbS5leGVjKHMpO1xuXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgaGF2ZSBubyBlYXN5IHdheSB0byBzYXkgXCJyZXN1bWUgc2Nhbm5pbmcgYXQgdGhlXG4gICAgICAvLyBleGlzdGluZyBwb3NpdGlvbiBidXQgYWxzbyBza2lwIHRoZSBjdXJyZW50IHJ1bGUgT05MWVwiLiBXaGF0IGhhcHBlbnMgaXNcbiAgICAgIC8vIGFsbCBwcmlvciBydWxlcyBhcmUgYWxzbyBza2lwcGVkIHdoaWNoIGNhbiByZXN1bHQgaW4gbWF0Y2hpbmcgdGhlIHdyb25nXG4gICAgICAvLyB0aGluZy4gRXhhbXBsZSBvZiBtYXRjaGluZyBcImJvb2dlclwiOlxuXG4gICAgICAvLyBvdXIgbWF0Y2hlciBpcyBbc3RyaW5nLCBcImJvb2dlclwiLCBudW1iZXJdXG4gICAgICAvL1xuICAgICAgLy8gLi4uLmJvb2dlci4uLi5cblxuICAgICAgLy8gaWYgXCJib29nZXJcIiBpcyBpZ25vcmVkIHRoZW4gd2UnZCByZWFsbHkgbmVlZCBhIHJlZ2V4IHRvIHNjYW4gZnJvbSB0aGVcbiAgICAgIC8vIFNBTUUgcG9zaXRpb24gZm9yIG9ubHk6IFtzdHJpbmcsIG51bWJlcl0gYnV0IGlnbm9yaW5nIFwiYm9vZ2VyXCIgKGlmIGl0XG4gICAgICAvLyB3YXMgdGhlIGZpcnN0IG1hdGNoKSwgYSBzaW1wbGUgcmVzdW1lIHdvdWxkIHNjYW4gYWhlYWQgd2hvIGtub3dzIGhvd1xuICAgICAgLy8gZmFyIGxvb2tpbmcgb25seSBmb3IgXCJudW1iZXJcIiwgaWdub3JpbmcgcG90ZW50aWFsIHN0cmluZyBtYXRjaGVzIChvclxuICAgICAgLy8gZnV0dXJlIFwiYm9vZ2VyXCIgbWF0Y2hlcyB0aGF0IG1pZ2h0IGJlIHZhbGlkLilcblxuICAgICAgLy8gU28gd2hhdCB3ZSBkbzogV2UgZXhlY3V0ZSB0d28gbWF0Y2hlcnMsIG9uZSByZXN1bWluZyBhdCB0aGUgc2FtZVxuICAgICAgLy8gcG9zaXRpb24sIGJ1dCB0aGUgc2Vjb25kIGZ1bGwgbWF0Y2hlciBzdGFydGluZyBhdCB0aGUgcG9zaXRpb24gYWZ0ZXI6XG5cbiAgICAgIC8vICAgICAvLS0tIHJlc3VtZSBmaXJzdCByZWdleCBtYXRjaCBoZXJlIChmb3IgW251bWJlcl0pXG4gICAgICAvLyAgICAgfC8tLS0tIGZ1bGwgbWF0Y2ggaGVyZSBmb3IgW3N0cmluZywgXCJib29nZXJcIiwgbnVtYmVyXVxuICAgICAgLy8gICAgIHZ2XG4gICAgICAvLyAuLi4uYm9vZ2VyLi4uLlxuXG4gICAgICAvLyBXaGljaCBldmVyIHJlc3VsdHMgaW4gYSBtYXRjaCBmaXJzdCBpcyB0aGVuIHVzZWQuIFNvIHRoaXMgMy00IHN0ZXBcbiAgICAgIC8vIHByb2Nlc3MgZXNzZW50aWFsbHkgYWxsb3dzIHVzIHRvIHNheSBcIm1hdGNoIGF0IHRoaXMgcG9zaXRpb24sIGV4Y2x1ZGluZ1xuICAgICAgLy8gYSBwcmlvciBydWxlIHRoYXQgd2FzIGlnbm9yZWRcIi5cbiAgICAgIC8vXG4gICAgICAvLyAxLiBNYXRjaCBcImJvb2dlclwiIGZpcnN0LCBpZ25vcmUuIEFsc28gcHJvdmVzIHRoYXQgW3N0cmluZ10gZG9lcyBub24gbWF0Y2guXG4gICAgICAvLyAyLiBSZXN1bWUgbWF0Y2hpbmcgZm9yIFtudW1iZXJdXG4gICAgICAvLyAzLiBNYXRjaCBhdCBpbmRleCArIDEgZm9yIFtzdHJpbmcsIFwiYm9vZ2VyXCIsIG51bWJlcl1cbiAgICAgIC8vIDQuIElmICMyIGFuZCAjMyByZXN1bHQgaW4gbWF0Y2hlcywgd2hpY2ggY2FtZSBmaXJzdD9cbiAgICAgIGlmICh0aGlzLnJlc3VtaW5nU2NhbkF0U2FtZVBvc2l0aW9uKCkpIHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaW5kZXggPT09IHRoaXMubGFzdEluZGV4KSA7IGVsc2UgeyAvLyB1c2UgdGhlIHNlY29uZCBtYXRjaGVyIHJlc3VsdFxuICAgICAgICAgIGNvbnN0IG0yID0gdGhpcy5nZXRNYXRjaGVyKDApO1xuICAgICAgICAgIG0yLmxhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4ICsgMTtcbiAgICAgICAgICByZXN1bHQgPSBtMi5leGVjKHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZWdleEluZGV4ICs9IHJlc3VsdC5wb3NpdGlvbiArIDE7XG4gICAgICAgIGlmICh0aGlzLnJlZ2V4SW5kZXggPT09IHRoaXMuY291bnQpIHtcbiAgICAgICAgICAvLyB3cmFwLWFyb3VuZCB0byBjb25zaWRlcmluZyBhbGwgbWF0Y2hlcyBhZ2FpblxuICAgICAgICAgIHRoaXMuY29uc2lkZXJBbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIG1vZGUsIGJ1aWxkcyBhIGh1Z2UgUmVzdW1hYmxlTXVsdGlSZWdleCB0aGF0IGNhbiBiZSB1c2VkIHRvIHdhbGtcbiAgICogdGhlIGNvbnRlbnQgYW5kIGZpbmQgbWF0Y2hlcy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAgICogQHJldHVybnMge1Jlc3VtYWJsZU11bHRpUmVnZXh9XG4gICAqL1xuICBmdW5jdGlvbiBidWlsZE1vZGVSZWdleChtb2RlKSB7XG4gICAgY29uc3QgbW0gPSBuZXcgUmVzdW1hYmxlTXVsdGlSZWdleCgpO1xuXG4gICAgbW9kZS5jb250YWlucy5mb3JFYWNoKHRlcm0gPT4gbW0uYWRkUnVsZSh0ZXJtLmJlZ2luLCB7IHJ1bGU6IHRlcm0sIHR5cGU6IFwiYmVnaW5cIiB9KSk7XG5cbiAgICBpZiAobW9kZS50ZXJtaW5hdG9yRW5kKSB7XG4gICAgICBtbS5hZGRSdWxlKG1vZGUudGVybWluYXRvckVuZCwgeyB0eXBlOiBcImVuZFwiIH0pO1xuICAgIH1cbiAgICBpZiAobW9kZS5pbGxlZ2FsKSB7XG4gICAgICBtbS5hZGRSdWxlKG1vZGUuaWxsZWdhbCwgeyB0eXBlOiBcImlsbGVnYWxcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW07XG4gIH1cblxuICAvKiogc2tpcCB2cyBhYm9ydCB2cyBpZ25vcmVcbiAgICpcbiAgICogQHNraXAgICAtIFRoZSBtb2RlIGlzIHN0aWxsIGVudGVyZWQgYW5kIGV4aXRlZCBub3JtYWxseSAoYW5kIGNvbnRhaW5zIHJ1bGVzIGFwcGx5KSxcbiAgICogICAgICAgICAgIGJ1dCBhbGwgY29udGVudCBpcyBoZWxkIGFuZCBhZGRlZCB0byB0aGUgcGFyZW50IGJ1ZmZlciByYXRoZXIgdGhhbiBiZWluZ1xuICAgKiAgICAgICAgICAgb3V0cHV0IHdoZW4gdGhlIG1vZGUgZW5kcy4gIE1vc3RseSB1c2VkIHdpdGggYHN1Ymxhbmd1YWdlYCB0byBidWlsZCB1cFxuICAgKiAgICAgICAgICAgYSBzaW5nbGUgbGFyZ2UgYnVmZmVyIHRoYW4gY2FuIGJlIHBhcnNlZCBieSBzdWJsYW5ndWFnZS5cbiAgICpcbiAgICogICAgICAgICAgICAgLSBUaGUgbW9kZSBiZWdpbiBhbmRzIGVuZHMgbm9ybWFsbHkuXG4gICAqICAgICAgICAgICAgIC0gQ29udGVudCBtYXRjaGVkIGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQgbW9kZSBidWZmZXIuXG4gICAqICAgICAgICAgICAgIC0gVGhlIHBhcnNlciBjdXJzb3IgaXMgbW92ZWQgZm9yd2FyZCBub3JtYWxseS5cbiAgICpcbiAgICogQGFib3J0ICAtIEEgaGFjayBwbGFjZWhvbGRlciB1bnRpbCB3ZSBoYXZlIGlnbm9yZS4gIEFib3J0cyB0aGUgbW9kZSAoYXMgaWYgaXRcbiAgICogICAgICAgICAgIG5ldmVyIG1hdGNoZWQpIGJ1dCBET0VTIE5PVCBjb250aW51ZSB0byBtYXRjaCBzdWJzZXF1ZW50IGBjb250YWluc2BcbiAgICogICAgICAgICAgIG1vZGVzLiAgQWJvcnQgaXMgYmFkL3N1Ym9wdGltYWwgYmVjYXVzZSBpdCBjYW4gcmVzdWx0IGluIG1vZGVzXG4gICAqICAgICAgICAgICBmYXJ0aGVyIGRvd24gbm90IGdldHRpbmcgYXBwbGllZCBiZWNhdXNlIGFuIGVhcmxpZXIgcnVsZSBlYXRzIHRoZVxuICAgKiAgICAgICAgICAgY29udGVudCBidXQgdGhlbiBhYm9ydHMuXG4gICAqXG4gICAqICAgICAgICAgICAgIC0gVGhlIG1vZGUgZG9lcyBub3QgYmVnaW4uXG4gICAqICAgICAgICAgICAgIC0gQ29udGVudCBtYXRjaGVkIGJ5IGBiZWdpbmAgaXMgYWRkZWQgdG8gdGhlIG1vZGUgYnVmZmVyLlxuICAgKiAgICAgICAgICAgICAtIFRoZSBwYXJzZXIgY3Vyc29yIGlzIG1vdmVkIGZvcndhcmQgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBpZ25vcmUgLSBJZ25vcmVzIHRoZSBtb2RlIChhcyBpZiBpdCBuZXZlciBtYXRjaGVkKSBhbmQgY29udGludWVzIHRvIG1hdGNoIGFueVxuICAgKiAgICAgICAgICAgc3Vic2VxdWVudCBgY29udGFpbnNgIG1vZGVzLiAgSWdub3JlIGlzbid0IHRlY2huaWNhbGx5IHBvc3NpYmxlIHdpdGhcbiAgICogICAgICAgICAgIHRoZSBjdXJyZW50IHBhcnNlciBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogICAgICAgICAgICAgLSBUaGUgbW9kZSBkb2VzIG5vdCBiZWdpbi5cbiAgICogICAgICAgICAgICAgLSBDb250ZW50IG1hdGNoZWQgYnkgYGJlZ2luYCBpcyBpZ25vcmVkLlxuICAgKiAgICAgICAgICAgICAtIFRoZSBwYXJzZXIgY3Vyc29yIGlzIG5vdCBtb3ZlZCBmb3J3YXJkLlxuICAgKi9cblxuICAvKipcbiAgICogQ29tcGlsZXMgYW4gaW5kaXZpZHVhbCBtb2RlXG4gICAqXG4gICAqIFRoaXMgY2FuIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBtb2RlIGNvbnRhaW5zIGNlcnRhaW4gZGV0ZWN0YWJsZSBrbm93biBsb2dpY1xuICAgKiBpc3N1ZXMuXG4gICAqIEBwYXJhbSB7TW9kZX0gbW9kZVxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZSB8IG51bGx9IFtwYXJlbnRdXG4gICAqIEByZXR1cm5zIHtDb21waWxlZE1vZGUgfCBuZXZlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGVNb2RlKG1vZGUsIHBhcmVudCkge1xuICAgIGNvbnN0IGNtb2RlID0gLyoqIEB0eXBlIENvbXBpbGVkTW9kZSAqLyAobW9kZSk7XG4gICAgaWYgKG1vZGUuaXNDb21waWxlZCkgcmV0dXJuIGNtb2RlO1xuXG4gICAgW1xuICAgICAgLy8gZG8gdGhpcyBlYXJseSBzbyBjb21waWxlciBleHRlbnNpb25zIGdlbmVyYWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0XG4gICAgICAvLyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBtYXRjaC9iZWdpblxuICAgICAgY29tcGlsZU1hdGNoXG4gICAgXS5mb3JFYWNoKGV4dCA9PiBleHQobW9kZSwgcGFyZW50KSk7XG5cbiAgICBsYW5ndWFnZS5jb21waWxlckV4dGVuc2lvbnMuZm9yRWFjaChleHQgPT4gZXh0KG1vZGUsIHBhcmVudCkpO1xuXG4gICAgLy8gX19iZWZvcmVCZWdpbiBpcyBjb25zaWRlcmVkIHByaXZhdGUgQVBJLCBpbnRlcm5hbCB1c2Ugb25seVxuICAgIG1vZGUuX19iZWZvcmVCZWdpbiA9IG51bGw7XG5cbiAgICBbXG4gICAgICBiZWdpbktleXdvcmRzLFxuICAgICAgLy8gZG8gdGhpcyBsYXRlciBzbyBjb21waWxlciBleHRlbnNpb25zIHRoYXQgY29tZSBlYXJsaWVyIGhhdmUgYWNjZXNzIHRvIHRoZVxuICAgICAgLy8gcmF3IGFycmF5IGlmIHRoZXkgd2FudGVkIHRvIHBlcmhhcHMgbWFuaXB1bGF0ZSBpdCwgZXRjLlxuICAgICAgY29tcGlsZUlsbGVnYWwsXG4gICAgICAvLyBkZWZhdWx0IHRvIDEgcmVsZXZhbmNlIGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgIGNvbXBpbGVSZWxldmFuY2VcbiAgICBdLmZvckVhY2goZXh0ID0+IGV4dChtb2RlLCBwYXJlbnQpKTtcblxuICAgIG1vZGUuaXNDb21waWxlZCA9IHRydWU7XG5cbiAgICBsZXQga2V5d29yZFBhdHRlcm4gPSBudWxsO1xuICAgIGlmICh0eXBlb2YgbW9kZS5rZXl3b3JkcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAga2V5d29yZFBhdHRlcm4gPSBtb2RlLmtleXdvcmRzLiRwYXR0ZXJuO1xuICAgICAgZGVsZXRlIG1vZGUua2V5d29yZHMuJHBhdHRlcm47XG4gICAgfVxuXG4gICAgaWYgKG1vZGUua2V5d29yZHMpIHtcbiAgICAgIG1vZGUua2V5d29yZHMgPSBjb21waWxlS2V5d29yZHMobW9kZS5rZXl3b3JkcywgbGFuZ3VhZ2UuY2FzZV9pbnNlbnNpdGl2ZSk7XG4gICAgfVxuXG4gICAgLy8gYm90aCBhcmUgbm90IGFsbG93ZWRcbiAgICBpZiAobW9kZS5sZXhlbWVzICYmIGtleXdvcmRQYXR0ZXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFUlI6IFByZWZlciBga2V5d29yZHMuJHBhdHRlcm5gIHRvIGBtb2RlLmxleGVtZXNgLCBCT1RIIGFyZSBub3QgYWxsb3dlZC4gKHNlZSBtb2RlIHJlZmVyZW5jZSkgXCIpO1xuICAgIH1cblxuICAgIC8vIGBtb2RlLmxleGVtZXNgIHdhcyB0aGUgb2xkIHN0YW5kYXJkIGJlZm9yZSB3ZSBhZGRlZCBhbmQgbm93IHJlY29tbWVuZFxuICAgIC8vIHVzaW5nIGBrZXl3b3Jkcy4kcGF0dGVybmAgdG8gcGFzcyB0aGUga2V5d29yZCBwYXR0ZXJuXG4gICAga2V5d29yZFBhdHRlcm4gPSBrZXl3b3JkUGF0dGVybiB8fCBtb2RlLmxleGVtZXMgfHwgL1xcdysvO1xuICAgIGNtb2RlLmtleXdvcmRQYXR0ZXJuUmUgPSBsYW5nUmUoa2V5d29yZFBhdHRlcm4sIHRydWUpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKCFtb2RlLmJlZ2luKSBtb2RlLmJlZ2luID0gL1xcQnxcXGIvO1xuICAgICAgY21vZGUuYmVnaW5SZSA9IGxhbmdSZShtb2RlLmJlZ2luKTtcbiAgICAgIGlmIChtb2RlLmVuZFNhbWVBc0JlZ2luKSBtb2RlLmVuZCA9IG1vZGUuYmVnaW47XG4gICAgICBpZiAoIW1vZGUuZW5kICYmICFtb2RlLmVuZHNXaXRoUGFyZW50KSBtb2RlLmVuZCA9IC9cXEJ8XFxiLztcbiAgICAgIGlmIChtb2RlLmVuZCkgY21vZGUuZW5kUmUgPSBsYW5nUmUobW9kZS5lbmQpO1xuICAgICAgY21vZGUudGVybWluYXRvckVuZCA9IHNvdXJjZShtb2RlLmVuZCkgfHwgJyc7XG4gICAgICBpZiAobW9kZS5lbmRzV2l0aFBhcmVudCAmJiBwYXJlbnQudGVybWluYXRvckVuZCkge1xuICAgICAgICBjbW9kZS50ZXJtaW5hdG9yRW5kICs9IChtb2RlLmVuZCA/ICd8JyA6ICcnKSArIHBhcmVudC50ZXJtaW5hdG9yRW5kO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobW9kZS5pbGxlZ2FsKSBjbW9kZS5pbGxlZ2FsUmUgPSBsYW5nUmUoLyoqIEB0eXBlIHtSZWdFeHAgfCBzdHJpbmd9ICovIChtb2RlLmlsbGVnYWwpKTtcbiAgICBpZiAoIW1vZGUuY29udGFpbnMpIG1vZGUuY29udGFpbnMgPSBbXTtcblxuICAgIG1vZGUuY29udGFpbnMgPSBbXS5jb25jYXQoLi4ubW9kZS5jb250YWlucy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGV4cGFuZE9yQ2xvbmVNb2RlKGMgPT09ICdzZWxmJyA/IG1vZGUgOiBjKTtcbiAgICB9KSk7XG4gICAgbW9kZS5jb250YWlucy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHsgY29tcGlsZU1vZGUoLyoqIEB0eXBlIE1vZGUgKi8gKGMpLCBjbW9kZSk7IH0pO1xuXG4gICAgaWYgKG1vZGUuc3RhcnRzKSB7XG4gICAgICBjb21waWxlTW9kZShtb2RlLnN0YXJ0cywgcGFyZW50KTtcbiAgICB9XG5cbiAgICBjbW9kZS5tYXRjaGVyID0gYnVpbGRNb2RlUmVnZXgoY21vZGUpO1xuICAgIHJldHVybiBjbW9kZTtcbiAgfVxuXG4gIGlmICghbGFuZ3VhZ2UuY29tcGlsZXJFeHRlbnNpb25zKSBsYW5ndWFnZS5jb21waWxlckV4dGVuc2lvbnMgPSBbXTtcblxuICAvLyBzZWxmIGlzIG5vdCB2YWxpZCBhdCB0aGUgdG9wLWxldmVsXG4gIGlmIChsYW5ndWFnZS5jb250YWlucyAmJiBsYW5ndWFnZS5jb250YWlucy5pbmNsdWRlcygnc2VsZicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRVJSOiBjb250YWlucyBgc2VsZmAgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgdG9wLWxldmVsIG9mIGEgbGFuZ3VhZ2UuICBTZWUgZG9jdW1lbnRhdGlvbi5cIik7XG4gIH1cblxuICAvLyB3ZSBuZWVkIGEgbnVsbCBvYmplY3QsIHdoaWNoIGluaGVyaXQgd2lsbCBndWFyYW50ZWVcbiAgbGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlcyA9IGluaGVyaXQobGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlcyB8fCB7fSk7XG5cbiAgcmV0dXJuIGNvbXBpbGVNb2RlKC8qKiBAdHlwZSBNb2RlICovIChsYW5ndWFnZSkpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBtb2RlIGhhcyBhIGRlcGVuZGVuY3kgb24gaXQncyBwYXJlbnQgb3Igbm90XG4gKlxuICogSWYgYSBtb2RlIGRvZXMgaGF2ZSBhIHBhcmVudCBkZXBlbmRlbmN5IHRoZW4gb2Z0ZW4gd2UgbmVlZCB0byBjbG9uZSBpdCBpZlxuICogaXQncyB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBzbyB0aGF0IGVhY2ggY29weSBwb2ludHMgdG8gdGhlIGNvcnJlY3QgcGFyZW50LFxuICogd2hlcmUtYXMgbW9kZXMgd2l0aG91dCBhIHBhcmVudCBjYW4gb2Z0ZW4gc2FmZWx5IGJlIHJlLXVzZWQgYXQgdGhlIGJvdHRvbSBvZlxuICogYSBtb2RlIGNoYWluLlxuICpcbiAqIEBwYXJhbSB7TW9kZSB8IG51bGx9IG1vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIGlzIHRoZXJlIGEgZGVwZW5kZW5jeSBvbiB0aGUgcGFyZW50P1xuICogKi9cbmZ1bmN0aW9uIGRlcGVuZGVuY3lPblBhcmVudChtb2RlKSB7XG4gIGlmICghbW9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBtb2RlLmVuZHNXaXRoUGFyZW50IHx8IGRlcGVuZGVuY3lPblBhcmVudChtb2RlLnN0YXJ0cyk7XG59XG5cbi8qKlxuICogRXhwYW5kcyBhIG1vZGUgb3IgY2xvbmVzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBtb2RlcyB3aXRoIHBhcmVudGFsIGRlcGVuZGVuY2VpcyAoc2VlIG5vdGVzIG9uXG4gKiBgZGVwZW5kZW5jeU9uUGFyZW50YCkgYW5kIGZvciBub2RlcyB0aGF0IGhhdmUgYHZhcmlhbnRzYCAtIHdoaWNoIG11c3QgdGhlbiBiZVxuICogZXhwbG9kZWQgaW50byB0aGVpciBvd24gaW5kaXZpZHVhbCBtb2RlcyBhdCBjb21waWxlIHRpbWUuXG4gKlxuICogQHBhcmFtIHtNb2RlfSBtb2RlXG4gKiBAcmV0dXJucyB7TW9kZSB8IE1vZGVbXX1cbiAqICovXG5mdW5jdGlvbiBleHBhbmRPckNsb25lTW9kZShtb2RlKSB7XG4gIGlmIChtb2RlLnZhcmlhbnRzICYmICFtb2RlLmNhY2hlZFZhcmlhbnRzKSB7XG4gICAgbW9kZS5jYWNoZWRWYXJpYW50cyA9IG1vZGUudmFyaWFudHMubWFwKGZ1bmN0aW9uKHZhcmlhbnQpIHtcbiAgICAgIHJldHVybiBpbmhlcml0KG1vZGUsIHsgdmFyaWFudHM6IG51bGwgfSwgdmFyaWFudCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBFWFBBTkRcbiAgLy8gaWYgd2UgaGF2ZSB2YXJpYW50cyB0aGVuIGVzc2VudGlhbGx5IFwicmVwbGFjZVwiIHRoZSBtb2RlIHdpdGggdGhlIHZhcmlhbnRzXG4gIC8vIHRoaXMgaGFwcGVucyBpbiBjb21waWxlTW9kZSwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuICBpZiAobW9kZS5jYWNoZWRWYXJpYW50cykge1xuICAgIHJldHVybiBtb2RlLmNhY2hlZFZhcmlhbnRzO1xuICB9XG5cbiAgLy8gQ0xPTkVcbiAgLy8gaWYgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgb24gcGFyZW50cyB0aGVuIHdlIG5lZWQgYSB1bmlxdWVcbiAgLy8gaW5zdGFuY2Ugb2Ygb3Vyc2VsdmVzLCBzbyB3ZSBjYW4gYmUgcmV1c2VkIHdpdGggbWFueVxuICAvLyBkaWZmZXJlbnQgcGFyZW50cyB3aXRob3V0IGlzc3VlXG4gIGlmIChkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkpIHtcbiAgICByZXR1cm4gaW5oZXJpdChtb2RlLCB7IHN0YXJ0czogbW9kZS5zdGFydHMgPyBpbmhlcml0KG1vZGUuc3RhcnRzKSA6IG51bGwgfSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmlzRnJvemVuKG1vZGUpKSB7XG4gICAgcmV0dXJuIGluaGVyaXQobW9kZSk7XG4gIH1cblxuICAvLyBubyBzcGVjaWFsIGRlcGVuZGVuY3kgaXNzdWVzLCBqdXN0IHJldHVybiBvdXJzZWx2ZXNcbiAgcmV0dXJuIG1vZGU7XG59XG5cbnZhciB2ZXJzaW9uID0gXCIxMC43LjNcIjtcblxuLy8gQHRzLW5vY2hlY2tcblxuZnVuY3Rpb24gaGFzVmFsdWVPckVtcHR5QXR0cmlidXRlKHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlIHx8IHZhbHVlID09PSBcIlwiKTtcbn1cblxuZnVuY3Rpb24gQnVpbGRWdWVQbHVnaW4oaGxqcykge1xuICBjb25zdCBDb21wb25lbnQgPSB7XG4gICAgcHJvcHM6IFtcImxhbmd1YWdlXCIsIFwiY29kZVwiLCBcImF1dG9kZXRlY3RcIl0sXG4gICAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXRlY3RlZExhbmd1YWdlOiBcIlwiLFxuICAgICAgICB1bmtub3duTGFuZ3VhZ2U6IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGNsYXNzTmFtZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudW5rbm93bkxhbmd1YWdlKSByZXR1cm4gXCJcIjtcblxuICAgICAgICByZXR1cm4gXCJobGpzIFwiICsgdGhpcy5kZXRlY3RlZExhbmd1YWdlO1xuICAgICAgfSxcbiAgICAgIGhpZ2hsaWdodGVkKCkge1xuICAgICAgICAvLyBubyBpZGVhIHdoYXQgbGFuZ3VhZ2UgdG8gdXNlLCByZXR1cm4gcmF3IGNvZGVcbiAgICAgICAgaWYgKCF0aGlzLmF1dG9EZXRlY3QgJiYgIWhsanMuZ2V0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBsYW5ndWFnZSBcIiR7dGhpcy5sYW5ndWFnZX1cIiB5b3Ugc3BlY2lmaWVkIGNvdWxkIG5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgICB0aGlzLnVua25vd25MYW5ndWFnZSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGVzY2FwZUhUTUwodGhpcy5jb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0RldGVjdCkge1xuICAgICAgICAgIHJlc3VsdCA9IGhsanMuaGlnaGxpZ2h0QXV0byh0aGlzLmNvZGUpO1xuICAgICAgICAgIHRoaXMuZGV0ZWN0ZWRMYW5ndWFnZSA9IHJlc3VsdC5sYW5ndWFnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBobGpzLmhpZ2hsaWdodCh0aGlzLmxhbmd1YWdlLCB0aGlzLmNvZGUsIHRoaXMuaWdub3JlSWxsZWdhbHMpO1xuICAgICAgICAgIHRoaXMuZGV0ZWN0ZWRMYW5ndWFnZSA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBhdXRvRGV0ZWN0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubGFuZ3VhZ2UgfHwgaGFzVmFsdWVPckVtcHR5QXR0cmlidXRlKHRoaXMuYXV0b2RldGVjdCk7XG4gICAgICB9LFxuICAgICAgaWdub3JlSWxsZWdhbHMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gdGhpcyBhdm9pZHMgbmVlZGluZyB0byB1c2UgYSB3aG9sZSBWdWUgY29tcGlsYXRpb24gcGlwZWxpbmUganVzdFxuICAgIC8vIHRvIGJ1aWxkIEhpZ2hsaWdodC5qc1xuICAgIHJlbmRlcihjcmVhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcInByZVwiLCB7fSwgW1xuICAgICAgICBjcmVhdGVFbGVtZW50KFwiY29kZVwiLCB7XG4gICAgICAgICAgY2xhc3M6IHRoaXMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogdGhpcy5oaWdobGlnaHRlZCB9XG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICB9XG4gICAgLy8gdGVtcGxhdGU6IGA8cHJlPjxjb2RlIDpjbGFzcz1cImNsYXNzTmFtZVwiIHYtaHRtbD1cImhpZ2hsaWdodGVkXCI+PC9jb2RlPjwvcHJlPmBcbiAgfTtcblxuICBjb25zdCBWdWVQbHVnaW4gPSB7XG4gICAgaW5zdGFsbChWdWUpIHtcbiAgICAgIFZ1ZS5jb21wb25lbnQoJ2hpZ2hsaWdodGpzJywgQ29tcG9uZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHsgQ29tcG9uZW50LCBWdWVQbHVnaW4gfTtcbn1cblxuLyogcGx1Z2luIGl0c2VsZiAqL1xuXG4vKiogQHR5cGUge0hMSlNQbHVnaW59ICovXG5jb25zdCBtZXJnZUhUTUxQbHVnaW4gPSB7XG4gIFwiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiOiAoeyBlbCwgcmVzdWx0LCB0ZXh0IH0pID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFN0cmVhbSA9IG5vZGVTdHJlYW0oZWwpO1xuICAgIGlmICghb3JpZ2luYWxTdHJlYW0ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCByZXN1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgcmVzdWx0Tm9kZS5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7XG4gICAgcmVzdWx0LnZhbHVlID0gbWVyZ2VTdHJlYW1zKG9yaWdpbmFsU3RyZWFtLCBub2RlU3RyZWFtKHJlc3VsdE5vZGUpLCB0ZXh0KTtcbiAgfVxufTtcblxuLyogU3RyZWFtIG1lcmdpbmcgc3VwcG9ydCBmdW5jdGlvbnMgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBFdmVudFxuICogQHByb3BlcnR5IHsnc3RhcnQnfCdzdG9wJ30gZXZlbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwcm9wZXJ0eSB7Tm9kZX0gbm9kZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHRhZyhub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVTdHJlYW0obm9kZSkge1xuICAvKiogQHR5cGUgRXZlbnRbXSAqL1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgKGZ1bmN0aW9uIF9ub2RlU3RyZWFtKG5vZGUsIG9mZnNldCkge1xuICAgIGZvciAobGV0IGNoaWxkID0gbm9kZS5maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZykge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIG9mZnNldCArPSBjaGlsZC5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgZXZlbnQ6ICdzdGFydCcsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgbm9kZTogY2hpbGRcbiAgICAgICAgfSk7XG4gICAgICAgIG9mZnNldCA9IF9ub2RlU3RyZWFtKGNoaWxkLCBvZmZzZXQpO1xuICAgICAgICAvLyBQcmV2ZW50IHZvaWQgZWxlbWVudHMgZnJvbSBoYXZpbmcgYW4gZW5kIHRhZyB0aGF0IHdvdWxkIGFjdHVhbGx5XG4gICAgICAgIC8vIGRvdWJsZSB0aGVtIGluIHRoZSBvdXRwdXQuIFRoZXJlIGFyZSBtb3JlIHZvaWQgZWxlbWVudHMgaW4gSFRNTFxuICAgICAgICAvLyBidXQgd2UgbGlzdCBvbmx5IHRob3NlIHJlYWxpc3RpY2FsbHkgZXhwZWN0ZWQgaW4gY29kZSBkaXNwbGF5LlxuICAgICAgICBpZiAoIXRhZyhjaGlsZCkubWF0Y2goL2JyfGhyfGltZ3xpbnB1dC8pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6ICdzdG9wJyxcbiAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgbm9kZTogY2hpbGRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9KShub2RlLCAwKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb3JpZ2luYWwgLSB0aGUgb3JpZ2luYWwgc3RyZWFtXG4gKiBAcGFyYW0ge2FueX0gaGlnaGxpZ2h0ZWQgLSBzdHJlYW0gb2YgdGhlIGhpZ2hsaWdodGVkIHNvdXJjZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gdGhlIG9yaWdpbmFsIHNvdXJjZSBpdHNlbGZcbiAqL1xuZnVuY3Rpb24gbWVyZ2VTdHJlYW1zKG9yaWdpbmFsLCBoaWdobGlnaHRlZCwgdmFsdWUpIHtcbiAgbGV0IHByb2Nlc3NlZCA9IDA7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgY29uc3Qgbm9kZVN0YWNrID0gW107XG5cbiAgZnVuY3Rpb24gc2VsZWN0U3RyZWFtKCkge1xuICAgIGlmICghb3JpZ2luYWwubGVuZ3RoIHx8ICFoaWdobGlnaHRlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5sZW5ndGggPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkO1xuICAgIH1cbiAgICBpZiAob3JpZ2luYWxbMF0ub2Zmc2V0ICE9PSBoaWdobGlnaHRlZFswXS5vZmZzZXQpIHtcbiAgICAgIHJldHVybiAob3JpZ2luYWxbMF0ub2Zmc2V0IDwgaGlnaGxpZ2h0ZWRbMF0ub2Zmc2V0KSA/IG9yaWdpbmFsIDogaGlnaGxpZ2h0ZWQ7XG4gICAgfVxuXG4gICAgLypcbiAgICBUbyBhdm9pZCBzdGFydGluZyB0aGUgc3RyZWFtIGp1c3QgYmVmb3JlIGl0IHNob3VsZCBzdG9wIHRoZSBvcmRlciBpc1xuICAgIGVuc3VyZWQgdGhhdCBvcmlnaW5hbCBhbHdheXMgc3RhcnRzIGZpcnN0IGFuZCBjbG9zZXMgbGFzdDpcblxuICAgIGlmIChldmVudDEgPT0gJ3N0YXJ0JyAmJiBldmVudDIgPT0gJ3N0YXJ0JylcbiAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICBpZiAoZXZlbnQxID09ICdzdGFydCcgJiYgZXZlbnQyID09ICdzdG9wJylcbiAgICAgIHJldHVybiBoaWdobGlnaHRlZDtcbiAgICBpZiAoZXZlbnQxID09ICdzdG9wJyAmJiBldmVudDIgPT0gJ3N0YXJ0JylcbiAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICBpZiAoZXZlbnQxID09ICdzdG9wJyAmJiBldmVudDIgPT0gJ3N0b3AnKVxuICAgICAgcmV0dXJuIGhpZ2hsaWdodGVkO1xuXG4gICAgLi4uIHdoaWNoIGlzIGNvbGxhcHNlZCB0bzpcbiAgICAqL1xuICAgIHJldHVybiBoaWdobGlnaHRlZFswXS5ldmVudCA9PT0gJ3N0YXJ0JyA/IG9yaWdpbmFsIDogaGlnaGxpZ2h0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKG5vZGUpIHtcbiAgICAvKiogQHBhcmFtIHtBdHRyfSBhdHRyICovXG4gICAgZnVuY3Rpb24gYXR0cmlidXRlU3RyaW5nKGF0dHIpIHtcbiAgICAgIHJldHVybiAnICcgKyBhdHRyLm5vZGVOYW1lICsgJz1cIicgKyBlc2NhcGVIVE1MKGF0dHIudmFsdWUpICsgJ1wiJztcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlc3VsdCArPSAnPCcgKyB0YWcobm9kZSkgKyBbXS5tYXAuY2FsbChub2RlLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZVN0cmluZykuam9pbignJykgKyAnPic7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqL1xuICBmdW5jdGlvbiBjbG9zZShub2RlKSB7XG4gICAgcmVzdWx0ICs9ICc8LycgKyB0YWcobm9kZSkgKyAnPic7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlbmRlcihldmVudCkge1xuICAgIChldmVudC5ldmVudCA9PT0gJ3N0YXJ0JyA/IG9wZW4gOiBjbG9zZSkoZXZlbnQubm9kZSk7XG4gIH1cblxuICB3aGlsZSAob3JpZ2luYWwubGVuZ3RoIHx8IGhpZ2hsaWdodGVkLmxlbmd0aCkge1xuICAgIGxldCBzdHJlYW0gPSBzZWxlY3RTdHJlYW0oKTtcbiAgICByZXN1bHQgKz0gZXNjYXBlSFRNTCh2YWx1ZS5zdWJzdHJpbmcocHJvY2Vzc2VkLCBzdHJlYW1bMF0ub2Zmc2V0KSk7XG4gICAgcHJvY2Vzc2VkID0gc3RyZWFtWzBdLm9mZnNldDtcbiAgICBpZiAoc3RyZWFtID09PSBvcmlnaW5hbCkge1xuICAgICAgLypcbiAgICAgIE9uIGFueSBvcGVuaW5nIG9yIGNsb3NpbmcgdGFnIG9mIHRoZSBvcmlnaW5hbCBtYXJrdXAgd2UgZmlyc3QgY2xvc2VcbiAgICAgIHRoZSBlbnRpcmUgaGlnaGxpZ2h0ZWQgbm9kZSBzdGFjaywgdGhlbiByZW5kZXIgdGhlIG9yaWdpbmFsIHRhZyBhbG9uZ1xuICAgICAgd2l0aCBhbGwgdGhlIGZvbGxvd2luZyBvcmlnaW5hbCB0YWdzIGF0IHRoZSBzYW1lIG9mZnNldCBhbmQgdGhlblxuICAgICAgcmVvcGVuIGFsbCB0aGUgdGFncyBvbiB0aGUgaGlnaGxpZ2h0ZWQgc3RhY2suXG4gICAgICAqL1xuICAgICAgbm9kZVN0YWNrLnJldmVyc2UoKS5mb3JFYWNoKGNsb3NlKTtcbiAgICAgIGRvIHtcbiAgICAgICAgcmVuZGVyKHN0cmVhbS5zcGxpY2UoMCwgMSlbMF0pO1xuICAgICAgICBzdHJlYW0gPSBzZWxlY3RTdHJlYW0oKTtcbiAgICAgIH0gd2hpbGUgKHN0cmVhbSA9PT0gb3JpZ2luYWwgJiYgc3RyZWFtLmxlbmd0aCAmJiBzdHJlYW1bMF0ub2Zmc2V0ID09PSBwcm9jZXNzZWQpO1xuICAgICAgbm9kZVN0YWNrLnJldmVyc2UoKS5mb3JFYWNoKG9wZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RyZWFtWzBdLmV2ZW50ID09PSAnc3RhcnQnKSB7XG4gICAgICAgIG5vZGVTdGFjay5wdXNoKHN0cmVhbVswXS5ub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVTdGFjay5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJlbmRlcihzdHJlYW0uc3BsaWNlKDAsIDEpWzBdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCArIGVzY2FwZUhUTUwodmFsdWUuc3Vic3RyKHByb2Nlc3NlZCkpO1xufVxuXG4vKlxuXG5Gb3IgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwbGVhc2Ugc2VlOlxuaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjg4MCNpc3N1ZWNvbW1lbnQtNzQ3Mjc1NDE5XG5cbiovXG5cbi8qKlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsIGJvb2xlYW4+fVxuICovXG5jb25zdCBzZWVuRGVwcmVjYXRpb25zID0ge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuY29uc3QgZXJyb3IgPSAobWVzc2FnZSkgPT4ge1xuICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHthbnl9IGFyZ3NcbiAqL1xuY29uc3Qgd2FybiA9IChtZXNzYWdlLCAuLi5hcmdzKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBXQVJOOiAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5jb25zdCBkZXByZWNhdGVkID0gKHZlcnNpb24sIG1lc3NhZ2UpID0+IHtcbiAgaWYgKHNlZW5EZXByZWNhdGlvbnNbYCR7dmVyc2lvbn0vJHttZXNzYWdlfWBdKSByZXR1cm47XG5cbiAgY29uc29sZS5sb2coYERlcHJlY2F0ZWQgYXMgb2YgJHt2ZXJzaW9ufS4gJHttZXNzYWdlfWApO1xuICBzZWVuRGVwcmVjYXRpb25zW2Ake3ZlcnNpb259LyR7bWVzc2FnZX1gXSA9IHRydWU7XG59O1xuXG4vKlxuU3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIGxhbmd1YWdlIGF1dG9kZXRlY3Rpb24uXG5odHRwczovL2hpZ2hsaWdodGpzLm9yZy9cbiovXG5cbmNvbnN0IGVzY2FwZSQxID0gZXNjYXBlSFRNTDtcbmNvbnN0IGluaGVyaXQkMSA9IGluaGVyaXQ7XG5jb25zdCBOT19NQVRDSCA9IFN5bWJvbChcIm5vbWF0Y2hcIik7XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGhsanMgLSBvYmplY3QgdGhhdCBpcyBleHRlbmRlZCAobGVnYWN5KVxuICogQHJldHVybnMge0hMSlNBcGl9XG4gKi9cbmNvbnN0IEhMSlMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIEdsb2JhbCBpbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIExhbmd1YWdlPn0gKi9cbiAgY29uc3QgbGFuZ3VhZ2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBhbGlhc2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLyoqIEB0eXBlIHtITEpTUGx1Z2luW119ICovXG4gIGNvbnN0IHBsdWdpbnMgPSBbXTtcblxuICAvLyBzYWZlL3Byb2R1Y3Rpb24gbW9kZSAtIHN3YWxsb3dzIG1vcmUgZXJyb3JzLCB0cmllcyB0byBrZWVwIHJ1bm5pbmdcbiAgLy8gZXZlbiBpZiBhIHNpbmdsZSBzeW50YXggb3IgcGFyc2UgaGl0cyBhIGZhdGFsIGVycm9yXG4gIGxldCBTQUZFX01PREUgPSB0cnVlO1xuICBjb25zdCBmaXhNYXJrdXBSZSA9IC8oXig8W14+XSs+fFxcdHwpK3xcXG4pL2dtO1xuICBjb25zdCBMQU5HVUFHRV9OT1RfRk9VTkQgPSBcIkNvdWxkIG5vdCBmaW5kIHRoZSBsYW5ndWFnZSAne30nLCBkaWQgeW91IGZvcmdldCB0byBsb2FkL2luY2x1ZGUgYSBsYW5ndWFnZSBtb2R1bGU/XCI7XG4gIC8qKiBAdHlwZSB7TGFuZ3VhZ2V9ICovXG4gIGNvbnN0IFBMQUlOVEVYVF9MQU5HVUFHRSA9IHsgZGlzYWJsZUF1dG9kZXRlY3Q6IHRydWUsIG5hbWU6ICdQbGFpbiB0ZXh0JywgY29udGFpbnM6IFtdIH07XG5cbiAgLy8gR2xvYmFsIG9wdGlvbnMgdXNlZCB3aGVuIHdpdGhpbiBleHRlcm5hbCBBUElzLiBUaGlzIGlzIG1vZGlmaWVkIHdoZW5cbiAgLy8gY2FsbGluZyB0aGUgYGhsanMuY29uZmlndXJlYCBmdW5jdGlvbi5cbiAgLyoqIEB0eXBlIEhMSlNPcHRpb25zICovXG4gIGxldCBvcHRpb25zID0ge1xuICAgIG5vSGlnaGxpZ2h0UmU6IC9eKG5vLT9oaWdobGlnaHQpJC9pLFxuICAgIGxhbmd1YWdlRGV0ZWN0UmU6IC9cXGJsYW5nKD86dWFnZSk/LShbXFx3LV0rKVxcYi9pLFxuICAgIGNsYXNzUHJlZml4OiAnaGxqcy0nLFxuICAgIHRhYlJlcGxhY2U6IG51bGwsXG4gICAgdXNlQlI6IGZhbHNlLFxuICAgIGxhbmd1YWdlczogbnVsbCxcbiAgICAvLyBiZXRhIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3ViamVjdCB0byBjaGFuZ2UsIHdlbGNvbWUgdG8gZGlzY3Vzc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzEwODZcbiAgICBfX2VtaXR0ZXI6IFRva2VuVHJlZUVtaXR0ZXJcbiAgfTtcblxuICAvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqL1xuXG4gIC8qKlxuICAgKiBUZXN0cyBhIGxhbmd1YWdlIG5hbWUgdG8gc2VlIGlmIGhpZ2hsaWdodGluZyBzaG91bGQgYmUgc2tpcHBlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VOYW1lXG4gICAqL1xuICBmdW5jdGlvbiBzaG91bGROb3RIaWdobGlnaHQobGFuZ3VhZ2VOYW1lKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubm9IaWdobGlnaHRSZS50ZXN0KGxhbmd1YWdlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIaWdobGlnaHRlZEhUTUxFbGVtZW50fSBibG9jayAtIHRoZSBIVE1MIGVsZW1lbnQgdG8gZGV0ZXJtaW5lIGxhbmd1YWdlIGZvclxuICAgKi9cbiAgZnVuY3Rpb24gYmxvY2tMYW5ndWFnZShibG9jaykge1xuICAgIGxldCBjbGFzc2VzID0gYmxvY2suY2xhc3NOYW1lICsgJyAnO1xuXG4gICAgY2xhc3NlcyArPSBibG9jay5wYXJlbnROb2RlID8gYmxvY2sucGFyZW50Tm9kZS5jbGFzc05hbWUgOiAnJztcblxuICAgIC8vIGxhbmd1YWdlLSogdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG5vbi1wcmVmaXhlZCBjbGFzcyBuYW1lcy5cbiAgICBjb25zdCBtYXRjaCA9IG9wdGlvbnMubGFuZ3VhZ2VEZXRlY3RSZS5leGVjKGNsYXNzZXMpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShtYXRjaFsxXSk7XG4gICAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICAgIHdhcm4oTEFOR1VBR0VfTk9UX0ZPVU5ELnJlcGxhY2UoXCJ7fVwiLCBtYXRjaFsxXSkpO1xuICAgICAgICB3YXJuKFwiRmFsbGluZyBiYWNrIHRvIG5vLWhpZ2hsaWdodCBtb2RlIGZvciB0aGlzIGJsb2NrLlwiLCBibG9jayk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UgPyBtYXRjaFsxXSA6ICduby1oaWdobGlnaHQnO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLmZpbmQoKF9jbGFzcykgPT4gc2hvdWxkTm90SGlnaGxpZ2h0KF9jbGFzcykgfHwgZ2V0TGFuZ3VhZ2UoX2NsYXNzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29yZSBoaWdobGlnaHRpbmcgZnVuY3Rpb24uXG4gICAqXG4gICAqIE9MRCBBUElcbiAgICogaGlnaGxpZ2h0KGxhbmcsIGNvZGUsIGlnbm9yZUlsbGVnYWxzLCBjb250aW51YXRpb24pXG4gICAqXG4gICAqIE5FVyBBUElcbiAgICogaGlnaGxpZ2h0KGNvZGUsIHtsYW5nLCBpZ25vcmVJbGxlZ2Fsc30pXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlT3JsYW5ndWFnZU5hbWUgLSB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBoaWdobGlnaHRpbmdcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBIaWdobGlnaHRPcHRpb25zfSBvcHRpb25zT3JDb2RlIC0gdGhlIGNvZGUgdG8gaGlnaGxpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUlsbGVnYWxzXSAtIHdoZXRoZXIgdG8gaWdub3JlIGlsbGVnYWwgbWF0Y2hlcywgZGVmYXVsdCBpcyB0byBiYWlsXG4gICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBbY29udGludWF0aW9uXSAtIGN1cnJlbnQgY29udGludWF0aW9uIG1vZGUsIGlmIGFueVxuICAgKlxuICAgKiBAcmV0dXJucyB7SGlnaGxpZ2h0UmVzdWx0fSBSZXN1bHQgLSBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlIC0gdGhlIGxhbmd1YWdlIG5hbWVcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHJlbGV2YW5jZSAtIHRoZSByZWxldmFuY2Ugc2NvcmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdGhlIGhpZ2hsaWdodGVkIEhUTUwgY29kZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gY29kZSAtIHRoZSBvcmlnaW5hbCByYXcgY29kZVxuICAgKiBAcHJvcGVydHkge0NvbXBpbGVkTW9kZX0gdG9wIC0gdG9wIG9mIHRoZSBjdXJyZW50IG1vZGUgc3RhY2tcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBpbGxlZ2FsIC0gaW5kaWNhdGVzIHdoZXRoZXIgYW55IGlsbGVnYWwgbWF0Y2hlcyB3ZXJlIGZvdW5kXG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlT3JsYW5ndWFnZU5hbWUsIG9wdGlvbnNPckNvZGUsIGlnbm9yZUlsbGVnYWxzLCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgY29kZSA9IFwiXCI7XG4gICAgbGV0IGxhbmd1YWdlTmFtZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDb2RlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb2RlID0gY29kZU9ybGFuZ3VhZ2VOYW1lO1xuICAgICAgaWdub3JlSWxsZWdhbHMgPSBvcHRpb25zT3JDb2RlLmlnbm9yZUlsbGVnYWxzO1xuICAgICAgbGFuZ3VhZ2VOYW1lID0gb3B0aW9uc09yQ29kZS5sYW5ndWFnZTtcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBub3Qgc3VwcG9ydGVkIGF0IGFsbCB2aWEgdGhlIG5ldyBBUElcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICAgIGNvbnRpbnVhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb2xkIEFQSVxuICAgICAgZGVwcmVjYXRlZChcIjEwLjcuMFwiLCBcImhpZ2hsaWdodChsYW5nLCBjb2RlLCAuLi5hcmdzKSBoYXMgYmVlbiBkZXByZWNhdGVkLlwiKTtcbiAgICAgIGRlcHJlY2F0ZWQoXCIxMC43LjBcIiwgXCJQbGVhc2UgdXNlIGhpZ2hsaWdodChjb2RlLCBvcHRpb25zKSBpbnN0ZWFkLlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIyNzdcIik7XG4gICAgICBsYW5ndWFnZU5hbWUgPSBjb2RlT3JsYW5ndWFnZU5hbWU7XG4gICAgICBjb2RlID0gb3B0aW9uc09yQ29kZTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0JlZm9yZUhpZ2hsaWdodENvbnRleHR9ICovXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIGNvZGUsXG4gICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VOYW1lXG4gICAgfTtcbiAgICAvLyB0aGUgcGx1Z2luIGNhbiBjaGFuZ2UgdGhlIGRlc2lyZWQgbGFuZ3VhZ2Ugb3IgdGhlIGNvZGUgdG8gYmUgaGlnaGxpZ2h0ZWRcbiAgICAvLyBqdXN0IGJlIGNoYW5naW5nIHRoZSBvYmplY3QgaXQgd2FzIHBhc3NlZFxuICAgIGZpcmUoXCJiZWZvcmU6aGlnaGxpZ2h0XCIsIGNvbnRleHQpO1xuXG4gICAgLy8gYSBiZWZvcmUgcGx1Z2luIGNhbiB1c3VycCB0aGUgcmVzdWx0IGNvbXBsZXRlbHkgYnkgcHJvdmlkaW5nIGl0J3Mgb3duXG4gICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBldmVuIG5lZWQgdG8gY2FsbCBoaWdobGlnaHRcbiAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LnJlc3VsdFxuICAgICAgPyBjb250ZXh0LnJlc3VsdFxuICAgICAgOiBfaGlnaGxpZ2h0KGNvbnRleHQubGFuZ3VhZ2UsIGNvbnRleHQuY29kZSwgaWdub3JlSWxsZWdhbHMsIGNvbnRpbnVhdGlvbik7XG5cbiAgICByZXN1bHQuY29kZSA9IGNvbnRleHQuY29kZTtcbiAgICAvLyB0aGUgcGx1Z2luIGNhbiBjaGFuZ2UgYW55dGhpbmcgaW4gcmVzdWx0IHRvIHN1aXRlIGl0XG4gICAgZmlyZShcImFmdGVyOmhpZ2hsaWdodFwiLCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBwcml2YXRlIGhpZ2hsaWdodCB0aGF0J3MgdXNlZCBpbnRlcm5hbGx5IGFuZCBkb2VzIG5vdCBmaXJlIGNhbGxiYWNrc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VOYW1lIC0gdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgaGlnaGxpZ2h0aW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlVG9IaWdobGlnaHQgLSB0aGUgY29kZSB0byBoaWdobGlnaHRcbiAgICogQHBhcmFtIHtib29sZWFuP30gW2lnbm9yZUlsbGVnYWxzXSAtIHdoZXRoZXIgdG8gaWdub3JlIGlsbGVnYWwgbWF0Y2hlcywgZGVmYXVsdCBpcyB0byBiYWlsXG4gICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlP30gW2NvbnRpbnVhdGlvbl0gLSBjdXJyZW50IGNvbnRpbnVhdGlvbiBtb2RlLCBpZiBhbnlcbiAgICogQHJldHVybnMge0hpZ2hsaWdodFJlc3VsdH0gLSByZXN1bHQgb2YgdGhlIGhpZ2hsaWdodCBvcGVyYXRpb25cbiAgKi9cbiAgZnVuY3Rpb24gX2hpZ2hsaWdodChsYW5ndWFnZU5hbWUsIGNvZGVUb0hpZ2hsaWdodCwgaWdub3JlSWxsZWdhbHMsIGNvbnRpbnVhdGlvbikge1xuICAgIC8qKlxuICAgICAqIFJldHVybiBrZXl3b3JkIGRhdGEgaWYgYSBtYXRjaCBpcyBhIGtleXdvcmRcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZSAtIGN1cnJlbnQgbW9kZVxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2ggLSByZWdleHAgbWF0Y2ggZGF0YVxuICAgICAqIEByZXR1cm5zIHtLZXl3b3JkRGF0YSB8IGZhbHNlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXdvcmREYXRhKG1vZGUsIG1hdGNoKSB7XG4gICAgICBjb25zdCBtYXRjaFRleHQgPSBsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKSA6IG1hdGNoWzBdO1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2RlLmtleXdvcmRzLCBtYXRjaFRleHQpICYmIG1vZGUua2V5d29yZHNbbWF0Y2hUZXh0XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzS2V5d29yZHMoKSB7XG4gICAgICBpZiAoIXRvcC5rZXl3b3Jkcykge1xuICAgICAgICBlbWl0dGVyLmFkZFRleHQobW9kZUJ1ZmZlcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgICB0b3Aua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgbGV0IG1hdGNoID0gdG9wLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhtb2RlQnVmZmVyKTtcbiAgICAgIGxldCBidWYgPSBcIlwiO1xuXG4gICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgYnVmICs9IG1vZGVCdWZmZXIuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBkYXRhID0ga2V5d29yZERhdGEodG9wLCBtYXRjaCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgW2tpbmQsIGtleXdvcmRSZWxldmFuY2VdID0gZGF0YTtcbiAgICAgICAgICBlbWl0dGVyLmFkZFRleHQoYnVmKTtcbiAgICAgICAgICBidWYgPSBcIlwiO1xuXG4gICAgICAgICAgcmVsZXZhbmNlICs9IGtleXdvcmRSZWxldmFuY2U7XG4gICAgICAgICAgaWYgKGtpbmQuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgICAgIC8vIF8gaW1wbGllZCBmb3IgcmVsZXZhbmNlIG9ubHksIGRvIG5vdCBoaWdobGlnaHRcbiAgICAgICAgICAgIC8vIGJ5IGFwcGx5aW5nIGEgY2xhc3MgbmFtZVxuICAgICAgICAgICAgYnVmICs9IG1hdGNoWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjc3NDbGFzcyA9IGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXNba2luZF0gfHwga2luZDtcbiAgICAgICAgICAgIGVtaXR0ZXIuYWRkS2V5d29yZChtYXRjaFswXSwgY3NzQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWYgKz0gbWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEluZGV4ID0gdG9wLmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4O1xuICAgICAgICBtYXRjaCA9IHRvcC5rZXl3b3JkUGF0dGVyblJlLmV4ZWMobW9kZUJ1ZmZlcik7XG4gICAgICB9XG4gICAgICBidWYgKz0gbW9kZUJ1ZmZlci5zdWJzdHIobGFzdEluZGV4KTtcbiAgICAgIGVtaXR0ZXIuYWRkVGV4dChidWYpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NTdWJMYW5ndWFnZSgpIHtcbiAgICAgIGlmIChtb2RlQnVmZmVyID09PSBcIlwiKSByZXR1cm47XG4gICAgICAvKiogQHR5cGUgSGlnaGxpZ2h0UmVzdWx0ICovXG4gICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiB0b3Auc3ViTGFuZ3VhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghbGFuZ3VhZ2VzW3RvcC5zdWJMYW5ndWFnZV0pIHtcbiAgICAgICAgICBlbWl0dGVyLmFkZFRleHQobW9kZUJ1ZmZlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IF9oaWdobGlnaHQodG9wLnN1Ykxhbmd1YWdlLCBtb2RlQnVmZmVyLCB0cnVlLCBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0pO1xuICAgICAgICBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0gPSAvKiogQHR5cGUge0NvbXBpbGVkTW9kZX0gKi8gKHJlc3VsdC50b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaGlnaGxpZ2h0QXV0byhtb2RlQnVmZmVyLCB0b3Auc3ViTGFuZ3VhZ2UubGVuZ3RoID8gdG9wLnN1Ykxhbmd1YWdlIDogbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvdW50aW5nIGVtYmVkZGVkIGxhbmd1YWdlIHNjb3JlIHRvd2FyZHMgdGhlIGhvc3QgbGFuZ3VhZ2UgbWF5IGJlIGRpc2FibGVkXG4gICAgICAvLyB3aXRoIHplcm9pbmcgdGhlIGNvbnRhaW5pbmcgbW9kZSByZWxldmFuY2UuIFVzZSBjYXNlIGluIHBvaW50IGlzIE1hcmtkb3duIHRoYXRcbiAgICAgIC8vIGFsbG93cyBYTUwgZXZlcnl3aGVyZSBhbmQgbWFrZXMgZXZlcnkgWE1MIHNuaXBwZXQgdG8gaGF2ZSBhIG11Y2ggbGFyZ2VyIE1hcmtkb3duXG4gICAgICAvLyBzY29yZS5cbiAgICAgIGlmICh0b3AucmVsZXZhbmNlID4gMCkge1xuICAgICAgICByZWxldmFuY2UgKz0gcmVzdWx0LnJlbGV2YW5jZTtcbiAgICAgIH1cbiAgICAgIGVtaXR0ZXIuYWRkU3VibGFuZ3VhZ2UocmVzdWx0LmVtaXR0ZXIsIHJlc3VsdC5sYW5ndWFnZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0J1ZmZlcigpIHtcbiAgICAgIGlmICh0b3Auc3ViTGFuZ3VhZ2UgIT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzU3ViTGFuZ3VhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3NLZXl3b3JkcygpO1xuICAgICAgfVxuICAgICAgbW9kZUJ1ZmZlciA9ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7TW9kZX0gbW9kZSAtIG5ldyBtb2RlIHRvIHN0YXJ0XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhcnROZXdNb2RlKG1vZGUpIHtcbiAgICAgIGlmIChtb2RlLmNsYXNzTmFtZSkge1xuICAgICAgICBlbWl0dGVyLm9wZW5Ob2RlKGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXNbbW9kZS5jbGFzc05hbWVdIHx8IG1vZGUuY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICAgIHRvcCA9IE9iamVjdC5jcmVhdGUobW9kZSwgeyBwYXJlbnQ6IHsgdmFsdWU6IHRvcCB9IH0pO1xuICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZSB9IG1vZGUgLSB0aGUgbW9kZSB0byBwb3RlbnRpYWxseSBlbmRcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoIC0gdGhlIGxhdGVzdCBtYXRjaFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaFBsdXNSZW1haW5kZXIgLSBtYXRjaCBwbHVzIHJlbWFpbmRlciBvZiBjb250ZW50XG4gICAgICogQHJldHVybnMge0NvbXBpbGVkTW9kZSB8IHZvaWR9IC0gdGhlIG5leHQgbW9kZSwgb3IgaWYgdm9pZCBjb250aW51ZSBvbiBpbiBjdXJyZW50IG1vZGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbmRPZk1vZGUobW9kZSwgbWF0Y2gsIG1hdGNoUGx1c1JlbWFpbmRlcikge1xuICAgICAgbGV0IG1hdGNoZWQgPSBzdGFydHNXaXRoKG1vZGUuZW5kUmUsIG1hdGNoUGx1c1JlbWFpbmRlcik7XG5cbiAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIGlmIChtb2RlW1wib246ZW5kXCJdKSB7XG4gICAgICAgICAgY29uc3QgcmVzcCA9IG5ldyBSZXNwb25zZShtb2RlKTtcbiAgICAgICAgICBtb2RlW1wib246ZW5kXCJdKG1hdGNoLCByZXNwKTtcbiAgICAgICAgICBpZiAocmVzcC5pc01hdGNoSWdub3JlZCkgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICB3aGlsZSAobW9kZS5lbmRzUGFyZW50ICYmIG1vZGUucGFyZW50KSB7XG4gICAgICAgICAgICBtb2RlID0gbW9kZS5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBldmVuIGlmIG9uOmVuZCBmaXJlcyBhbiBgaWdub3JlYCBpdCdzIHN0aWxsIHBvc3NpYmxlXG4gICAgICAvLyB0aGF0IHdlIG1pZ2h0IHRyaWdnZXIgdGhlIGVuZCBub2RlIGJlY2F1c2Ugb2YgYSBwYXJlbnQgbW9kZVxuICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGVuZE9mTW9kZShtb2RlLnBhcmVudCwgbWF0Y2gsIG1hdGNoUGx1c1JlbWFpbmRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIG1hdGNoaW5nIGJ1dCB0aGVuIGlnbm9yaW5nIGEgc2VxdWVuY2Ugb2YgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxleGVtZSAtIHN0cmluZyBjb250YWluaW5nIGZ1bGwgbWF0Y2ggdGV4dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvSWdub3JlKGxleGVtZSkge1xuICAgICAgaWYgKHRvcC5tYXRjaGVyLnJlZ2V4SW5kZXggPT09IDApIHtcbiAgICAgICAgLy8gbm8gbW9yZSByZWdleHMgdG8gcG90ZW50aWFsbHkgbWF0Y2ggaGVyZSwgc28gd2UgbW92ZSB0aGUgY3Vyc29yIGZvcndhcmQgb25lXG4gICAgICAgIC8vIHNwYWNlXG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lWzBdO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gbW92ZSB0aGUgY3Vyc29yLCB3ZSBzdGlsbCBoYXZlIGFkZGl0aW9uYWwgcmVnZXhlcyB0byB0cnkgYW5kXG4gICAgICAgIC8vIG1hdGNoIGF0IHRoaXMgdmVyeSBzcG90XG4gICAgICAgIHJlc3VtZVNjYW5BdFNhbWVQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSB0aGUgc3RhcnQgb2YgYSBuZXcgcG90ZW50aWFsIG1vZGUgbWF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RW5oYW5jZWRNYXRjaH0gbWF0Y2ggLSB0aGUgY3VycmVudCBtYXRjaFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGhvdyBmYXIgdG8gYWR2YW5jZSB0aGUgcGFyc2UgY3Vyc29yXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9CZWdpbk1hdGNoKG1hdGNoKSB7XG4gICAgICBjb25zdCBsZXhlbWUgPSBtYXRjaFswXTtcbiAgICAgIGNvbnN0IG5ld01vZGUgPSBtYXRjaC5ydWxlO1xuXG4gICAgICBjb25zdCByZXNwID0gbmV3IFJlc3BvbnNlKG5ld01vZGUpO1xuICAgICAgLy8gZmlyc3QgaW50ZXJuYWwgYmVmb3JlIGNhbGxiYWNrcywgdGhlbiB0aGUgcHVibGljIG9uZXNcbiAgICAgIGNvbnN0IGJlZm9yZUNhbGxiYWNrcyA9IFtuZXdNb2RlLl9fYmVmb3JlQmVnaW4sIG5ld01vZGVbXCJvbjpiZWdpblwiXV07XG4gICAgICBmb3IgKGNvbnN0IGNiIG9mIGJlZm9yZUNhbGxiYWNrcykge1xuICAgICAgICBpZiAoIWNiKSBjb250aW51ZTtcbiAgICAgICAgY2IobWF0Y2gsIHJlc3ApO1xuICAgICAgICBpZiAocmVzcC5pc01hdGNoSWdub3JlZCkgcmV0dXJuIGRvSWdub3JlKGxleGVtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdNb2RlICYmIG5ld01vZGUuZW5kU2FtZUFzQmVnaW4pIHtcbiAgICAgICAgbmV3TW9kZS5lbmRSZSA9IGVzY2FwZShsZXhlbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3TW9kZS5za2lwKSB7XG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld01vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZUJ1ZmZlciArPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0J1ZmZlcigpO1xuICAgICAgICBpZiAoIW5ld01vZGUucmV0dXJuQmVnaW4gJiYgIW5ld01vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZUJ1ZmZlciA9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhcnROZXdNb2RlKG5ld01vZGUpO1xuICAgICAgLy8gaWYgKG1vZGVbXCJhZnRlcjpiZWdpblwiXSkge1xuICAgICAgLy8gICBsZXQgcmVzcCA9IG5ldyBSZXNwb25zZShtb2RlKTtcbiAgICAgIC8vICAgbW9kZVtcImFmdGVyOmJlZ2luXCJdKG1hdGNoLCByZXNwKTtcbiAgICAgIC8vIH1cbiAgICAgIHJldHVybiBuZXdNb2RlLnJldHVybkJlZ2luID8gMCA6IGxleGVtZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBwb3RlbnRpYWwgZW5kIG9mIG1vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2ggLSB0aGUgY3VycmVudCBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvRW5kTWF0Y2gobWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxleGVtZSA9IG1hdGNoWzBdO1xuICAgICAgY29uc3QgbWF0Y2hQbHVzUmVtYWluZGVyID0gY29kZVRvSGlnaGxpZ2h0LnN1YnN0cihtYXRjaC5pbmRleCk7XG5cbiAgICAgIGNvbnN0IGVuZE1vZGUgPSBlbmRPZk1vZGUodG9wLCBtYXRjaCwgbWF0Y2hQbHVzUmVtYWluZGVyKTtcbiAgICAgIGlmICghZW5kTW9kZSkgeyByZXR1cm4gTk9fTUFUQ0g7IH1cblxuICAgICAgY29uc3Qgb3JpZ2luID0gdG9wO1xuICAgICAgaWYgKG9yaWdpbi5za2lwKSB7XG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEob3JpZ2luLnJldHVybkVuZCB8fCBvcmlnaW4uZXhjbHVkZUVuZCkpIHtcbiAgICAgICAgICBtb2RlQnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGlmIChvcmlnaW4uZXhjbHVkZUVuZCkge1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRvcC5jbGFzc05hbWUpIHtcbiAgICAgICAgICBlbWl0dGVyLmNsb3NlTm9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdG9wLnNraXAgJiYgIXRvcC5zdWJMYW5ndWFnZSkge1xuICAgICAgICAgIHJlbGV2YW5jZSArPSB0b3AucmVsZXZhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHRvcCA9IHRvcC5wYXJlbnQ7XG4gICAgICB9IHdoaWxlICh0b3AgIT09IGVuZE1vZGUucGFyZW50KTtcbiAgICAgIGlmIChlbmRNb2RlLnN0YXJ0cykge1xuICAgICAgICBpZiAoZW5kTW9kZS5lbmRTYW1lQXNCZWdpbikge1xuICAgICAgICAgIGVuZE1vZGUuc3RhcnRzLmVuZFJlID0gZW5kTW9kZS5lbmRSZTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydE5ld01vZGUoZW5kTW9kZS5zdGFydHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbi5yZXR1cm5FbmQgPyAwIDogbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQ29udGludWF0aW9ucygpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgIGZvciAobGV0IGN1cnJlbnQgPSB0b3A7IGN1cnJlbnQgIT09IGxhbmd1YWdlOyBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgbGlzdC51bnNoaWZ0KGN1cnJlbnQuY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4gZW1pdHRlci5vcGVuTm9kZShpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHt7dHlwZT86IE1hdGNoVHlwZSwgaW5kZXg/OiBudW1iZXIsIHJ1bGU/OiBNb2RlfX19ICovXG4gICAgbGV0IGxhc3RNYXRjaCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogIFByb2Nlc3MgYW4gaW5kaXZpZHVhbCBtYXRjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRCZWZvcmVNYXRjaCAtIHRleHQgcHJlY2VlZGluZyB0aGUgbWF0Y2ggKHNpbmNlIHRoZSBsYXN0IG1hdGNoKVxuICAgICAqIEBwYXJhbSB7RW5oYW5jZWRNYXRjaH0gW21hdGNoXSAtIHRoZSBtYXRjaCBpdHNlbGZcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTGV4ZW1lKHRleHRCZWZvcmVNYXRjaCwgbWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxleGVtZSA9IG1hdGNoICYmIG1hdGNoWzBdO1xuXG4gICAgICAvLyBhZGQgbm9uLW1hdGNoZWQgdGV4dCB0byB0aGUgY3VycmVudCBtb2RlIGJ1ZmZlclxuICAgICAgbW9kZUJ1ZmZlciArPSB0ZXh0QmVmb3JlTWF0Y2g7XG5cbiAgICAgIGlmIChsZXhlbWUgPT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSd2ZSBmb3VuZCBhIDAgd2lkdGggbWF0Y2ggYW5kIHdlJ3JlIHN0dWNrLCBzbyB3ZSBuZWVkIHRvIGFkdmFuY2VcbiAgICAgIC8vIHRoaXMgaGFwcGVucyB3aGVuIHdlIGhhdmUgYmFkbHkgYmVoYXZlZCBydWxlcyB0aGF0IGhhdmUgb3B0aW9uYWwgbWF0Y2hlcnMgdG8gdGhlIGRlZ3JlZSB0aGF0XG4gICAgICAvLyBzb21ldGltZXMgdGhleSBjYW4gZW5kIHVwIG1hdGNoaW5nIG5vdGhpbmcgYXQgYWxsXG4gICAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIxNDBcbiAgICAgIGlmIChsYXN0TWF0Y2gudHlwZSA9PT0gXCJiZWdpblwiICYmIG1hdGNoLnR5cGUgPT09IFwiZW5kXCIgJiYgbGFzdE1hdGNoLmluZGV4ID09PSBtYXRjaC5pbmRleCAmJiBsZXhlbWUgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gc3BpdCB0aGUgXCJza2lwcGVkXCIgY2hhcmFjdGVyIHRoYXQgb3VyIHJlZ2V4IGNob2tlZCBvbiBiYWNrIGludG8gdGhlIG91dHB1dCBzZXF1ZW5jZVxuICAgICAgICBtb2RlQnVmZmVyICs9IGNvZGVUb0hpZ2hsaWdodC5zbGljZShtYXRjaC5pbmRleCwgbWF0Y2guaW5kZXggKyAxKTtcbiAgICAgICAgaWYgKCFTQUZFX01PREUpIHtcbiAgICAgICAgICAvKiogQHR5cGUge0Fubm90YXRlZEVycm9yfSAqL1xuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignMCB3aWR0aCBtYXRjaCByZWdleCcpO1xuICAgICAgICAgIGVyci5sYW5ndWFnZU5hbWUgPSBsYW5ndWFnZU5hbWU7XG4gICAgICAgICAgZXJyLmJhZFJ1bGUgPSBsYXN0TWF0Y2gucnVsZTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBsYXN0TWF0Y2ggPSBtYXRjaDtcblxuICAgICAgaWYgKG1hdGNoLnR5cGUgPT09IFwiYmVnaW5cIikge1xuICAgICAgICByZXR1cm4gZG9CZWdpbk1hdGNoKG1hdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2gudHlwZSA9PT0gXCJpbGxlZ2FsXCIgJiYgIWlnbm9yZUlsbGVnYWxzKSB7XG4gICAgICAgIC8vIGlsbGVnYWwgbWF0Y2gsIHdlIGRvIG5vdCBjb250aW51ZSBwcm9jZXNzaW5nXG4gICAgICAgIC8qKiBAdHlwZSB7QW5ub3RhdGVkRXJyb3J9ICovXG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignSWxsZWdhbCBsZXhlbWUgXCInICsgbGV4ZW1lICsgJ1wiIGZvciBtb2RlIFwiJyArICh0b3AuY2xhc3NOYW1lIHx8ICc8dW5uYW1lZD4nKSArICdcIicpO1xuICAgICAgICBlcnIubW9kZSA9IHRvcDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaC50eXBlID09PSBcImVuZFwiKSB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IGRvRW5kTWF0Y2gobWF0Y2gpO1xuICAgICAgICBpZiAocHJvY2Vzc2VkICE9PSBOT19NQVRDSCkge1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZWRnZSBjYXNlIGZvciB3aGVuIGlsbGVnYWwgbWF0Y2hlcyAkIChlbmQgb2YgbGluZSkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcbiAgICAgIC8vIGEgMCB3aWR0aCBtYXRjaCBidXQgbm90IGEgYmVnaW4vZW5kIG1hdGNoIHNvIGl0J3Mgbm90IGNhdWdodCBieSB0aGVcbiAgICAgIC8vIGZpcnN0IGhhbmRsZXIgKHdoZW4gaWdub3JlSWxsZWdhbHMgaXMgdHJ1ZSlcbiAgICAgIGlmIChtYXRjaC50eXBlID09PSBcImlsbGVnYWxcIiAmJiBsZXhlbWUgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gYWR2YW5jZSBzbyB3ZSBhcmVuJ3Qgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgLy8gaW5maW5pdGUgbG9vcHMgYXJlIEJBRCwgdGhpcyBpcyBhIGxhc3QgZGl0Y2ggY2F0Y2ggYWxsLiBpZiB3ZSBoYXZlIGFcbiAgICAgIC8vIGRlY2VudCBudW1iZXIgb2YgaXRlcmF0aW9ucyB5ZXQgb3VyIGluZGV4IChjdXJzb3IgcG9zaXRpb24gaW4gb3VyXG4gICAgICAvLyBwYXJzaW5nKSBzdGlsbCAzeCBiZWhpbmQgb3VyIGluZGV4IHRoZW4gc29tZXRoaW5nIGlzIHZlcnkgd3JvbmdcbiAgICAgIC8vIHNvIHdlIGJhaWxcbiAgICAgIGlmIChpdGVyYXRpb25zID4gMTAwMDAwICYmIGl0ZXJhdGlvbnMgPiBtYXRjaC5pbmRleCAqIDMpIHtcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCwgd2F5IG1vcmUgaXRlcmF0aW9ucyB0aGFuIG1hdGNoZXMnKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgV2h5IG1pZ2h0IGJlIGZpbmQgb3Vyc2VsdmVzIGhlcmU/ICBPbmx5IG9uZSBvY2Nhc2lvbiBub3cuICBBbiBlbmQgbWF0Y2ggdGhhdCB3YXNcbiAgICAgIHRyaWdnZXJlZCBidXQgY291bGQgbm90IGJlIGNvbXBsZXRlZC4gIFdoZW4gbWlnaHQgdGhpcyBoYXBwZW4/ICBXaGVuIGFuIGBlbmRTYW1lYXNCZWdpbmBcbiAgICAgIHJ1bGUgc2V0cyB0aGUgZW5kIHJ1bGUgdG8gYSBzcGVjaWZpYyBtYXRjaC4gIFNpbmNlIHRoZSBvdmVyYWxsIG1vZGUgdGVybWluYXRpb24gcnVsZSB0aGF0J3NcbiAgICAgIGJlaW5nIHVzZWQgdG8gc2NhbiB0aGUgdGV4dCBpc24ndCByZWNvbXBpbGVkIHRoYXQgbWVhbnMgdGhhdCBhbnkgbWF0Y2ggdGhhdCBMT09LUyBsaWtlXG4gICAgICB0aGUgZW5kIChidXQgaXMgbm90LCBiZWNhdXNlIGl0IGlzIG5vdCBhbiBleGFjdCBtYXRjaCB0byB0aGUgYmVnaW5uaW5nKSB3aWxsXG4gICAgICBlbmQgdXAgaGVyZS4gIEEgZGVmaW5pdGUgZW5kIG1hdGNoLCBidXQgd2hlbiBgZG9FbmRNYXRjaGAgdHJpZXMgdG8gXCJyZWFwcGx5XCJcbiAgICAgIHRoZSBlbmQgcnVsZSBhbmQgZmFpbHMgdG8gbWF0Y2gsIHdlIHdpbmQgdXAgaGVyZSwgYW5kIGp1c3Qgc2lsZW50bHkgaWdub3JlIHRoZSBlbmQuXG5cbiAgICAgIFRoaXMgY2F1c2VzIG5vIHJlYWwgaGFybSBvdGhlciB0aGFuIHN0b3BwaW5nIGEgZmV3IHRpbWVzIHRvbyBtYW55LlxuICAgICAgKi9cblxuICAgICAgbW9kZUJ1ZmZlciArPSBsZXhlbWU7XG4gICAgICByZXR1cm4gbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGxhbmd1YWdlTmFtZSk7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgZXJyb3IoTEFOR1VBR0VfTk9UX0ZPVU5ELnJlcGxhY2UoXCJ7fVwiLCBsYW5ndWFnZU5hbWUpKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogXCInICsgbGFuZ3VhZ2VOYW1lICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWQgPSBjb21waWxlTGFuZ3VhZ2UobGFuZ3VhZ2UsIHsgcGx1Z2lucyB9KTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgLyoqIEB0eXBlIHtDb21waWxlZE1vZGV9ICovXG4gICAgbGV0IHRvcCA9IGNvbnRpbnVhdGlvbiB8fCBtZDtcbiAgICAvKiogQHR5cGUgUmVjb3JkPHN0cmluZyxDb21waWxlZE1vZGU+ICovXG4gICAgY29uc3QgY29udGludWF0aW9ucyA9IHt9OyAvLyBrZWVwIGNvbnRpbnVhdGlvbnMgZm9yIHN1Yi1sYW5ndWFnZXNcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IG9wdGlvbnMuX19lbWl0dGVyKG9wdGlvbnMpO1xuICAgIHByb2Nlc3NDb250aW51YXRpb25zKCk7XG4gICAgbGV0IG1vZGVCdWZmZXIgPSAnJztcbiAgICBsZXQgcmVsZXZhbmNlID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBpdGVyYXRpb25zID0gMDtcbiAgICBsZXQgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgdG9wLm1hdGNoZXIuY29uc2lkZXJBbGwoKTtcblxuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpdGVyYXRpb25zKys7XG4gICAgICAgIGlmIChyZXN1bWVTY2FuQXRTYW1lUG9zaXRpb24pIHtcbiAgICAgICAgICAvLyBvbmx5IHJlZ2V4ZXMgbm90IG1hdGNoZWQgcHJldmlvdXNseSB3aWxsIG5vdyBiZVxuICAgICAgICAgIC8vIGNvbnNpZGVyZWQgZm9yIGEgcG90ZW50aWFsIG1hdGNoXG4gICAgICAgICAgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wLm1hdGNoZXIuY29uc2lkZXJBbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0b3AubWF0Y2hlci5sYXN0SW5kZXggPSBpbmRleDtcblxuICAgICAgICBjb25zdCBtYXRjaCA9IHRvcC5tYXRjaGVyLmV4ZWMoY29kZVRvSGlnaGxpZ2h0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJtYXRjaFwiLCBtYXRjaFswXSwgbWF0Y2gucnVsZSAmJiBtYXRjaC5ydWxlLmJlZ2luKVxuXG4gICAgICAgIGlmICghbWF0Y2gpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGJlZm9yZU1hdGNoID0gY29kZVRvSGlnaGxpZ2h0LnN1YnN0cmluZyhpbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRDb3VudCA9IHByb2Nlc3NMZXhlbWUoYmVmb3JlTWF0Y2gsIG1hdGNoKTtcbiAgICAgICAgaW5kZXggPSBtYXRjaC5pbmRleCArIHByb2Nlc3NlZENvdW50O1xuICAgICAgfVxuICAgICAgcHJvY2Vzc0xleGVtZShjb2RlVG9IaWdobGlnaHQuc3Vic3RyKGluZGV4KSk7XG4gICAgICBlbWl0dGVyLmNsb3NlQWxsTm9kZXMoKTtcbiAgICAgIGVtaXR0ZXIuZmluYWxpemUoKTtcbiAgICAgIHJlc3VsdCA9IGVtaXR0ZXIudG9IVE1MKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIGF2b2lkIHBvc3NpYmxlIGJyZWFrYWdlIHdpdGggdjEwIGNsaWVudHMgZXhwZWN0aW5nXG4gICAgICAgIC8vIHRoaXMgdG8gYWx3YXlzIGJlIGFuIGludGVnZXJcbiAgICAgICAgcmVsZXZhbmNlOiBNYXRoLmZsb29yKHJlbGV2YW5jZSksXG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgIGlsbGVnYWw6IGZhbHNlLFxuICAgICAgICBlbWl0dGVyOiBlbWl0dGVyLFxuICAgICAgICB0b3A6IHRvcFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSWxsZWdhbCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWxsZWdhbDogdHJ1ZSxcbiAgICAgICAgICBpbGxlZ2FsQnk6IHtcbiAgICAgICAgICAgIG1zZzogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICBjb250ZXh0OiBjb2RlVG9IaWdobGlnaHQuc2xpY2UoaW5kZXggLSAxMDAsIGluZGV4ICsgMTAwKSxcbiAgICAgICAgICAgIG1vZGU6IGVyci5tb2RlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb2ZhcjogcmVzdWx0LFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICB2YWx1ZTogZXNjYXBlJDEoY29kZVRvSGlnaGxpZ2h0KSxcbiAgICAgICAgICBlbWl0dGVyOiBlbWl0dGVyXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFNBRkVfTU9ERSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlsbGVnYWw6IGZhbHNlLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICB2YWx1ZTogZXNjYXBlJDEoY29kZVRvSGlnaGxpZ2h0KSxcbiAgICAgICAgICBlbWl0dGVyOiBlbWl0dGVyLFxuICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgICAgZXJyb3JSYWlzZWQ6IGVyclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgdmFsaWQgaGlnaGxpZ2h0IHJlc3VsdCwgd2l0aG91dCBhY3R1YWxseSBkb2luZyBhbnkgYWN0dWFsIHdvcmssXG4gICAqIGF1dG8gaGlnaGxpZ2h0IHN0YXJ0cyB3aXRoIHRoaXMgYW5kIGl0J3MgcG9zc2libGUgZm9yIHNtYWxsIHNuaXBwZXRzIHRoYXRcbiAgICogYXV0by1kZXRlY3Rpb24gbWF5IG5vdCBmaW5kIGEgYmV0dGVyIG1hdGNoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlXG4gICAqIEByZXR1cm5zIHtIaWdobGlnaHRSZXN1bHR9XG4gICAqL1xuICBmdW5jdGlvbiBqdXN0VGV4dEhpZ2hsaWdodFJlc3VsdChjb2RlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgZW1pdHRlcjogbmV3IG9wdGlvbnMuX19lbWl0dGVyKG9wdGlvbnMpLFxuICAgICAgdmFsdWU6IGVzY2FwZSQxKGNvZGUpLFxuICAgICAgaWxsZWdhbDogZmFsc2UsXG4gICAgICB0b3A6IFBMQUlOVEVYVF9MQU5HVUFHRVxuICAgIH07XG4gICAgcmVzdWx0LmVtaXR0ZXIuYWRkVGV4dChjb2RlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gIEhpZ2hsaWdodGluZyB3aXRoIGxhbmd1YWdlIGRldGVjdGlvbi4gQWNjZXB0cyBhIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvXG4gIGhpZ2hsaWdodC4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG5cbiAgLSBsYW5ndWFnZSAoZGV0ZWN0ZWQgbGFuZ3VhZ2UpXG4gIC0gcmVsZXZhbmNlIChpbnQpXG4gIC0gdmFsdWUgKGFuIEhUTUwgc3RyaW5nIHdpdGggaGlnaGxpZ2h0aW5nIG1hcmt1cClcbiAgLSBzZWNvbmRfYmVzdCAob2JqZWN0IHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGZvciBzZWNvbmQtYmVzdCBoZXVyaXN0aWNhbGx5XG4gICAgZGV0ZWN0ZWQgbGFuZ3VhZ2UsIG1heSBiZSBhYnNlbnQpXG5cbiAgICBAcGFyYW0ge3N0cmluZ30gY29kZVxuICAgIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2xhbmd1YWdlU3Vic2V0XVxuICAgIEByZXR1cm5zIHtBdXRvSGlnaGxpZ2h0UmVzdWx0fVxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRBdXRvKGNvZGUsIGxhbmd1YWdlU3Vic2V0KSB7XG4gICAgbGFuZ3VhZ2VTdWJzZXQgPSBsYW5ndWFnZVN1YnNldCB8fCBvcHRpb25zLmxhbmd1YWdlcyB8fCBPYmplY3Qua2V5cyhsYW5ndWFnZXMpO1xuICAgIGNvbnN0IHBsYWludGV4dCA9IGp1c3RUZXh0SGlnaGxpZ2h0UmVzdWx0KGNvZGUpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGxhbmd1YWdlU3Vic2V0LmZpbHRlcihnZXRMYW5ndWFnZSkuZmlsdGVyKGF1dG9EZXRlY3Rpb24pLm1hcChuYW1lID0+XG4gICAgICBfaGlnaGxpZ2h0KG5hbWUsIGNvZGUsIGZhbHNlKVxuICAgICk7XG4gICAgcmVzdWx0cy51bnNoaWZ0KHBsYWludGV4dCk7IC8vIHBsYWludGV4dCBpcyBhbHdheXMgYW4gb3B0aW9uXG5cbiAgICBjb25zdCBzb3J0ZWQgPSByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIHNvcnQgYmFzZSBvbiByZWxldmFuY2VcbiAgICAgIGlmIChhLnJlbGV2YW5jZSAhPT0gYi5yZWxldmFuY2UpIHJldHVybiBiLnJlbGV2YW5jZSAtIGEucmVsZXZhbmNlO1xuXG4gICAgICAvLyBhbHdheXMgYXdhcmQgdGhlIHRpZSB0byB0aGUgYmFzZSBsYW5ndWFnZVxuICAgICAgLy8gaWUgaWYgQysrIGFuZCBBcmR1aW5vIGFyZSB0aWVkLCBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIEMrK1xuICAgICAgaWYgKGEubGFuZ3VhZ2UgJiYgYi5sYW5ndWFnZSkge1xuICAgICAgICBpZiAoZ2V0TGFuZ3VhZ2UoYS5sYW5ndWFnZSkuc3VwZXJzZXRPZiA9PT0gYi5sYW5ndWFnZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2UgaWYgKGdldExhbmd1YWdlKGIubGFuZ3VhZ2UpLnN1cGVyc2V0T2YgPT09IGEubGFuZ3VhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gb3RoZXJ3aXNlIHNheSB0aGV5IGFyZSBlcXVhbCwgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2Ygc29ydGluZyBvblxuICAgICAgLy8gcmVsZXZhbmNlIHdoaWxlIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIG9yZGVyaW5nIC0gd2hpY2ggaXMgaG93IHRpZXNcbiAgICAgIC8vIGhhdmUgaGlzdG9yaWNhbGx5IGJlZW4gc2V0dGxlZCwgaWUgdGhlIGxhbmd1YWdlIHRoYXQgY29tZXMgZmlyc3QgYWx3YXlzXG4gICAgICAvLyB3aW5zIGluIHRoZSBjYXNlIG9mIGEgdGllXG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcblxuICAgIGNvbnN0IFtiZXN0LCBzZWNvbmRCZXN0XSA9IHNvcnRlZDtcblxuICAgIC8qKiBAdHlwZSB7QXV0b0hpZ2hsaWdodFJlc3VsdH0gKi9cbiAgICBjb25zdCByZXN1bHQgPSBiZXN0O1xuICAgIHJlc3VsdC5zZWNvbmRfYmVzdCA9IHNlY29uZEJlc3Q7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gIFBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgaGlnaGxpZ2h0ZWQgbWFya3VwOlxuXG4gIC0gcmVwbGFjZSBUQUJzIHdpdGggc29tZXRoaW5nIG1vcmUgdXNlZnVsXG4gIC0gcmVwbGFjZSByZWFsIGxpbmUtYnJlYWtzIHdpdGggJzxicj4nIGZvciBub24tcHJlIGNvbnRhaW5lcnNcblxuICAgIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gICAgQHJldHVybnMge3N0cmluZ31cbiAgKi9cbiAgZnVuY3Rpb24gZml4TWFya3VwKGh0bWwpIHtcbiAgICBpZiAoIShvcHRpb25zLnRhYlJlcGxhY2UgfHwgb3B0aW9ucy51c2VCUikpIHtcbiAgICAgIHJldHVybiBodG1sO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sLnJlcGxhY2UoZml4TWFya3VwUmUsIG1hdGNoID0+IHtcbiAgICAgIGlmIChtYXRjaCA9PT0gJ1xcbicpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudXNlQlIgPyAnPGJyPicgOiBtYXRjaDtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50YWJSZXBsYWNlKSB7XG4gICAgICAgIHJldHVybiBtYXRjaC5yZXBsYWNlKC9cXHQvZywgb3B0aW9ucy50YWJSZXBsYWNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgbmV3IGNsYXNzIG5hbWUgZm9yIGJsb2NrIGdpdmVuIHRoZSBsYW5ndWFnZSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjdXJyZW50TGFuZ11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZXN1bHRMYW5nXVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NOYW1lKGVsZW1lbnQsIGN1cnJlbnRMYW5nLCByZXN1bHRMYW5nKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBjdXJyZW50TGFuZyA/IGFsaWFzZXNbY3VycmVudExhbmddIDogcmVzdWx0TGFuZztcblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImhsanNcIik7XG4gICAgaWYgKGxhbmd1YWdlKSBlbGVtZW50LmNsYXNzTGlzdC5hZGQobGFuZ3VhZ2UpO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtITEpTUGx1Z2lufSAqL1xuICBjb25zdCBiclBsdWdpbiA9IHtcbiAgICBcImJlZm9yZTpoaWdobGlnaHRFbGVtZW50XCI6ICh7IGVsIH0pID0+IHtcbiAgICAgIGlmIChvcHRpb25zLnVzZUJSKSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGVsLmlubmVySFRNTC5yZXBsYWNlKC9cXG4vZywgJycpLnJlcGxhY2UoLzxiclsgL10qPi9nLCAnXFxuJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIjogKHsgcmVzdWx0IH0pID0+IHtcbiAgICAgIGlmIChvcHRpb25zLnVzZUJSKSB7XG4gICAgICAgIHJlc3VsdC52YWx1ZSA9IHJlc3VsdC52YWx1ZS5yZXBsYWNlKC9cXG4vZywgXCI8YnI+XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBUQUJfUkVQTEFDRV9SRSA9IC9eKDxbXj5dKz58XFx0KSsvZ207XG4gIC8qKiBAdHlwZSB7SExKU1BsdWdpbn0gKi9cbiAgY29uc3QgdGFiUmVwbGFjZVBsdWdpbiA9IHtcbiAgICBcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIjogKHsgcmVzdWx0IH0pID0+IHtcbiAgICAgIGlmIChvcHRpb25zLnRhYlJlcGxhY2UpIHtcbiAgICAgICAgcmVzdWx0LnZhbHVlID0gcmVzdWx0LnZhbHVlLnJlcGxhY2UoVEFCX1JFUExBQ0VfUkUsIChtKSA9PlxuICAgICAgICAgIG0ucmVwbGFjZSgvXFx0L2csIG9wdGlvbnMudGFiUmVwbGFjZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaGlnaGxpZ2h0aW5nIHRvIGEgRE9NIG5vZGUgY29udGFpbmluZyBjb2RlLiBBY2NlcHRzIGEgRE9NIG5vZGUgYW5kXG4gICAqIHR3byBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBmaXhNYXJrdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7SGlnaGxpZ2h0ZWRIVE1MRWxlbWVudH0gZWxlbWVudCAtIHRoZSBIVE1MIGVsZW1lbnQgdG8gaGlnaGxpZ2h0XG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudCkge1xuICAgIC8qKiBAdHlwZSBIVE1MRWxlbWVudCAqL1xuICAgIGxldCBub2RlID0gbnVsbDtcbiAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrTGFuZ3VhZ2UoZWxlbWVudCk7XG5cbiAgICBpZiAoc2hvdWxkTm90SGlnaGxpZ2h0KGxhbmd1YWdlKSkgcmV0dXJuO1xuXG4gICAgLy8gc3VwcG9ydCBmb3IgdjEwIEFQSVxuICAgIGZpcmUoXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiLFxuICAgICAgeyBlbDogZWxlbWVudCwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH0pO1xuXG4gICAgbm9kZSA9IGVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgY29uc3QgcmVzdWx0ID0gbGFuZ3VhZ2UgPyBoaWdobGlnaHQodGV4dCwgeyBsYW5ndWFnZSwgaWdub3JlSWxsZWdhbHM6IHRydWUgfSkgOiBoaWdobGlnaHRBdXRvKHRleHQpO1xuXG4gICAgLy8gc3VwcG9ydCBmb3IgdjEwIEFQSVxuICAgIGZpcmUoXCJhZnRlcjpoaWdobGlnaHRFbGVtZW50XCIsIHsgZWw6IGVsZW1lbnQsIHJlc3VsdCwgdGV4dCB9KTtcblxuICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlO1xuICAgIHVwZGF0ZUNsYXNzTmFtZShlbGVtZW50LCBsYW5ndWFnZSwgcmVzdWx0Lmxhbmd1YWdlKTtcbiAgICBlbGVtZW50LnJlc3VsdCA9IHtcbiAgICAgIGxhbmd1YWdlOiByZXN1bHQubGFuZ3VhZ2UsXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2l0aCB2ZXJzaW9uIDExLjBcbiAgICAgIHJlOiByZXN1bHQucmVsZXZhbmNlLFxuICAgICAgcmVsYXZhbmNlOiByZXN1bHQucmVsZXZhbmNlXG4gICAgfTtcbiAgICBpZiAocmVzdWx0LnNlY29uZF9iZXN0KSB7XG4gICAgICBlbGVtZW50LnNlY29uZF9iZXN0ID0ge1xuICAgICAgICBsYW5ndWFnZTogcmVzdWx0LnNlY29uZF9iZXN0Lmxhbmd1YWdlLFxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgd2l0aCB2ZXJzaW9uIDExLjBcbiAgICAgICAgcmU6IHJlc3VsdC5zZWNvbmRfYmVzdC5yZWxldmFuY2UsXG4gICAgICAgIHJlbGF2YW5jZTogcmVzdWx0LnNlY29uZF9iZXN0LnJlbGV2YW5jZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBoaWdobGlnaHQuanMgZ2xvYmFsIG9wdGlvbnMgd2l0aCB0aGUgcGFzc2VkIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEhMSlNPcHRpb25zPn0gdXNlck9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZSh1c2VyT3B0aW9ucykge1xuICAgIGlmICh1c2VyT3B0aW9ucy51c2VCUikge1xuICAgICAgZGVwcmVjYXRlZChcIjEwLjMuMFwiLCBcIid1c2VCUicgd2lsbCBiZSByZW1vdmVkIGVudGlyZWx5IGluIHYxMS4wXCIpO1xuICAgICAgZGVwcmVjYXRlZChcIjEwLjMuMFwiLCBcIlBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjU1OVwiKTtcbiAgICB9XG4gICAgb3B0aW9ucyA9IGluaGVyaXQkMShvcHRpb25zLCB1c2VyT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogSGlnaGxpZ2h0cyB0byBhbGwgPHByZT48Y29kZT4gYmxvY2tzIG9uIGEgcGFnZVxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb24gJiB7Y2FsbGVkPzogYm9vbGVhbn19XG4gICAqL1xuICAvLyBUT0RPOiByZW1vdmUgdjEyLCBkZXByZWNhdGVkXG4gIGNvbnN0IGluaXRIaWdobGlnaHRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKGluaXRIaWdobGlnaHRpbmcuY2FsbGVkKSByZXR1cm47XG4gICAgaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQgPSB0cnVlO1xuXG4gICAgZGVwcmVjYXRlZChcIjEwLjYuMFwiLCBcImluaXRIaWdobGlnaHRpbmcoKSBpcyBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIGluc3RlYWQuXCIpO1xuXG4gICAgY29uc3QgYmxvY2tzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgncHJlIGNvZGUnKTtcbiAgICBibG9ja3MuZm9yRWFjaChoaWdobGlnaHRFbGVtZW50KTtcbiAgfTtcblxuICAvLyBIaWdsaWdodHMgYWxsIHdoZW4gRE9NQ29udGVudExvYWRlZCBmaXJlc1xuICAvLyBUT0RPOiByZW1vdmUgdjEyLCBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIGluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSB7XG4gICAgZGVwcmVjYXRlZChcIjEwLjYuMFwiLCBcImluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSBpcyBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIGluc3RlYWQuXCIpO1xuICAgIHdhbnRzSGlnaGxpZ2h0ID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCB3YW50c0hpZ2hsaWdodCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBhdXRvLWhpZ2hsaWdodHMgYWxsIHByZT5jb2RlIGVsZW1lbnRzIG9uIHRoZSBwYWdlXG4gICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRBbGwoKSB7XG4gICAgLy8gaWYgd2UgYXJlIGNhbGxlZCB0b28gZWFybHkgaW4gdGhlIGxvYWRpbmcgcHJvY2Vzc1xuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgd2FudHNIaWdobGlnaHQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZSBjb2RlJyk7XG4gICAgYmxvY2tzLmZvckVhY2goaGlnaGxpZ2h0RWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBib290KCkge1xuICAgIC8vIGlmIGEgaGlnaGxpZ2h0IHdhcyByZXF1ZXN0ZWQgYmVmb3JlIERPTSB3YXMgbG9hZGVkLCBkbyBub3dcbiAgICBpZiAod2FudHNIaWdobGlnaHQpIGhpZ2hsaWdodEFsbCgpO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGJvb3QsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGxhbmd1YWdlIGdyYW1tYXIgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZU5hbWVcbiAgICogQHBhcmFtIHtMYW5ndWFnZUZufSBsYW5ndWFnZURlZmluaXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyTGFuZ3VhZ2UobGFuZ3VhZ2VOYW1lLCBsYW5ndWFnZURlZmluaXRpb24pIHtcbiAgICBsZXQgbGFuZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGxhbmcgPSBsYW5ndWFnZURlZmluaXRpb24oaGxqcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IkMSkge1xuICAgICAgZXJyb3IoXCJMYW5ndWFnZSBkZWZpbml0aW9uIGZvciAne30nIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkLlwiLnJlcGxhY2UoXCJ7fVwiLCBsYW5ndWFnZU5hbWUpKTtcbiAgICAgIC8vIGhhcmQgb3Igc29mdCBlcnJvclxuICAgICAgaWYgKCFTQUZFX01PREUpIHsgdGhyb3cgZXJyb3IkMTsgfSBlbHNlIHsgZXJyb3IoZXJyb3IkMSk7IH1cbiAgICAgIC8vIGxhbmd1YWdlcyB0aGF0IGhhdmUgc2VyaW91cyBlcnJvcnMgYXJlIHJlcGxhY2VkIHdpdGggZXNzZW50aWFsbHkgYVxuICAgICAgLy8gXCJwbGFpbnRleHRcIiBzdGFuZC1pbiBzbyB0aGF0IHRoZSBjb2RlIGJsb2NrcyB3aWxsIHN0aWxsIGdldCBub3JtYWxcbiAgICAgIC8vIGNzcyBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlbSAtIGFuZCBvbmUgYmFkIGxhbmd1YWdlIHdvbid0IGJyZWFrIHRoZVxuICAgICAgLy8gZW50aXJlIGhpZ2hsaWdodGVyXG4gICAgICBsYW5nID0gUExBSU5URVhUX0xBTkdVQUdFO1xuICAgIH1cbiAgICAvLyBnaXZlIGl0IGEgdGVtcG9yYXJ5IG5hbWUgaWYgaXQgZG9lc24ndCBoYXZlIG9uZSBpbiB0aGUgbWV0YS1kYXRhXG4gICAgaWYgKCFsYW5nLm5hbWUpIGxhbmcubmFtZSA9IGxhbmd1YWdlTmFtZTtcbiAgICBsYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXSA9IGxhbmc7XG4gICAgbGFuZy5yYXdEZWZpbml0aW9uID0gbGFuZ3VhZ2VEZWZpbml0aW9uLmJpbmQobnVsbCwgaGxqcyk7XG5cbiAgICBpZiAobGFuZy5hbGlhc2VzKSB7XG4gICAgICByZWdpc3RlckFsaWFzZXMobGFuZy5hbGlhc2VzLCB7IGxhbmd1YWdlTmFtZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbGFuZ3VhZ2UgZ3JhbW1hciBtb2R1bGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZVxuICAgKi9cbiAgZnVuY3Rpb24gdW5yZWdpc3Rlckxhbmd1YWdlKGxhbmd1YWdlTmFtZSkge1xuICAgIGRlbGV0ZSBsYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXTtcbiAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIE9iamVjdC5rZXlzKGFsaWFzZXMpKSB7XG4gICAgICBpZiAoYWxpYXNlc1thbGlhc10gPT09IGxhbmd1YWdlTmFtZSkge1xuICAgICAgICBkZWxldGUgYWxpYXNlc1thbGlhc107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gTGlzdCBvZiBsYW5ndWFnZSBpbnRlcm5hbCBuYW1lc1xuICAgKi9cbiAgZnVuY3Rpb24gbGlzdExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgIGludGVuZGVkIHVzYWdlOiBXaGVuIG9uZSBsYW5ndWFnZSB0cnVseSByZXF1aXJlcyBhbm90aGVyXG5cbiAgICBVbmxpa2UgYGdldExhbmd1YWdlYCwgdGhpcyB3aWxsIHRocm93IHdoZW4gdGhlIHJlcXVlc3RlZCBsYW5ndWFnZVxuICAgIGlzIG5vdCBhdmFpbGFibGUuXG5cbiAgICBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIGZldGNoL3JlcXVpcmVcbiAgICBAcmV0dXJucyB7TGFuZ3VhZ2UgfCBuZXZlcn1cbiAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUxhbmd1YWdlKG5hbWUpIHtcbiAgICBkZXByZWNhdGVkKFwiMTAuNC4wXCIsIFwicmVxdWlyZUxhbmd1YWdlIHdpbGwgYmUgcmVtb3ZlZCBlbnRpcmVseSBpbiB2MTEuXCIpO1xuICAgIGRlcHJlY2F0ZWQoXCIxMC40LjBcIiwgXCJQbGVhc2Ugc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvcHVsbC8yODQ0XCIpO1xuXG4gICAgY29uc3QgbGFuZyA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIGlmIChsYW5nKSB7IHJldHVybiBsYW5nOyB9XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1RoZSBcXCd7fVxcJyBsYW5ndWFnZSBpcyByZXF1aXJlZCwgYnV0IG5vdCBsb2FkZWQuJy5yZXBsYWNlKCd7fScsIG5hbWUpKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyB7TGFuZ3VhZ2UgfCB1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRMYW5ndWFnZShuYW1lKSB7XG4gICAgbmFtZSA9IChuYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsYW5ndWFnZXNbbmFtZV0gfHwgbGFuZ3VhZ2VzW2FsaWFzZXNbbmFtZV1dO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBhbGlhc0xpc3QgLSBzaW5nbGUgYWxpYXMgb3IgbGlzdCBvZiBhbGlhc2VzXG4gICAqIEBwYXJhbSB7e2xhbmd1YWdlTmFtZTogc3RyaW5nfX0gb3B0c1xuICAgKi9cbiAgZnVuY3Rpb24gcmVnaXN0ZXJBbGlhc2VzKGFsaWFzTGlzdCwgeyBsYW5ndWFnZU5hbWUgfSkge1xuICAgIGlmICh0eXBlb2YgYWxpYXNMaXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgYWxpYXNMaXN0ID0gW2FsaWFzTGlzdF07XG4gICAgfVxuICAgIGFsaWFzTGlzdC5mb3JFYWNoKGFsaWFzID0+IHsgYWxpYXNlc1thbGlhcy50b0xvd2VyQ2FzZSgpXSA9IGxhbmd1YWdlTmFtZTsgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGxhbmd1YWdlIGhhcyBhdXRvLWRldGVjdGlvbiBlbmFibGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2VcbiAgICovXG4gIGZ1bmN0aW9uIGF1dG9EZXRlY3Rpb24obmFtZSkge1xuICAgIGNvbnN0IGxhbmcgPSBnZXRMYW5ndWFnZShuYW1lKTtcbiAgICByZXR1cm4gbGFuZyAmJiAhbGFuZy5kaXNhYmxlQXV0b2RldGVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGdyYWRlcyB0aGUgb2xkIGhpZ2hsaWdodEJsb2NrIHBsdWdpbnMgdG8gdGhlIG5ld1xuICAgKiBoaWdobGlnaHRFbGVtZW50IEFQSVxuICAgKiBAcGFyYW0ge0hMSlNQbHVnaW59IHBsdWdpblxuICAgKi9cbiAgZnVuY3Rpb24gdXBncmFkZVBsdWdpbkFQSShwbHVnaW4pIHtcbiAgICAvLyBUT0RPOiByZW1vdmUgd2l0aCB2MTJcbiAgICBpZiAocGx1Z2luW1wiYmVmb3JlOmhpZ2hsaWdodEJsb2NrXCJdICYmICFwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiXSkge1xuICAgICAgcGx1Z2luW1wiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnRcIl0gPSAoZGF0YSkgPT4ge1xuICAgICAgICBwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0QmxvY2tcIl0oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7IGJsb2NrOiBkYXRhLmVsIH0sIGRhdGEpXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocGx1Z2luW1wiYWZ0ZXI6aGlnaGxpZ2h0QmxvY2tcIl0gJiYgIXBsdWdpbltcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIl0pIHtcbiAgICAgIHBsdWdpbltcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIl0gPSAoZGF0YSkgPT4ge1xuICAgICAgICBwbHVnaW5bXCJhZnRlcjpoaWdobGlnaHRCbG9ja1wiXShcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHsgYmxvY2s6IGRhdGEuZWwgfSwgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SExKU1BsdWdpbn0gcGx1Z2luXG4gICAqL1xuICBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luKSB7XG4gICAgdXBncmFkZVBsdWdpbkFQSShwbHVnaW4pO1xuICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7UGx1Z2luRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7YW55fSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKGV2ZW50LCBhcmdzKSB7XG4gICAgY29uc3QgY2IgPSBldmVudDtcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7XG4gICAgICBpZiAocGx1Z2luW2NiXSkge1xuICAgICAgICBwbHVnaW5bY2JdKGFyZ3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gIE5vdGU6IGZpeE1hcmt1cCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjExXG5cbiAgQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICBAcmV0dXJucyB7c3RyaW5nfVxuICAqL1xuICBmdW5jdGlvbiBkZXByZWNhdGVGaXhNYXJrdXAoYXJnKSB7XG4gICAgZGVwcmVjYXRlZChcIjEwLjIuMFwiLCBcImZpeE1hcmt1cCB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjExLjBcIik7XG4gICAgZGVwcmVjYXRlZChcIjEwLjIuMFwiLCBcIlBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjUzNFwiKTtcblxuICAgIHJldHVybiBmaXhNYXJrdXAoYXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0hpZ2hsaWdodGVkSFRNTEVsZW1lbnR9IGVsXG4gICAqL1xuICBmdW5jdGlvbiBkZXByZWNhdGVIaWdobGlnaHRCbG9jayhlbCkge1xuICAgIGRlcHJlY2F0ZWQoXCIxMC43LjBcIiwgXCJoaWdobGlnaHRCbG9jayB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjEyLjBcIik7XG4gICAgZGVwcmVjYXRlZChcIjEwLjcuMFwiLCBcIlBsZWFzZSB1c2UgaGlnaGxpZ2h0RWxlbWVudCBub3cuXCIpO1xuXG4gICAgcmV0dXJuIGhpZ2hsaWdodEVsZW1lbnQoZWwpO1xuICB9XG5cbiAgLyogSW50ZXJmYWNlIGRlZmluaXRpb24gKi9cbiAgT2JqZWN0LmFzc2lnbihobGpzLCB7XG4gICAgaGlnaGxpZ2h0LFxuICAgIGhpZ2hsaWdodEF1dG8sXG4gICAgaGlnaGxpZ2h0QWxsLFxuICAgIGZpeE1hcmt1cDogZGVwcmVjYXRlRml4TWFya3VwLFxuICAgIGhpZ2hsaWdodEVsZW1lbnQsXG4gICAgLy8gVE9ETzogUmVtb3ZlIHdpdGggdjEyIEFQSVxuICAgIGhpZ2hsaWdodEJsb2NrOiBkZXByZWNhdGVIaWdobGlnaHRCbG9jayxcbiAgICBjb25maWd1cmUsXG4gICAgaW5pdEhpZ2hsaWdodGluZyxcbiAgICBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkLFxuICAgIHJlZ2lzdGVyTGFuZ3VhZ2UsXG4gICAgdW5yZWdpc3Rlckxhbmd1YWdlLFxuICAgIGxpc3RMYW5ndWFnZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgcmVnaXN0ZXJBbGlhc2VzLFxuICAgIHJlcXVpcmVMYW5ndWFnZSxcbiAgICBhdXRvRGV0ZWN0aW9uLFxuICAgIGluaGVyaXQ6IGluaGVyaXQkMSxcbiAgICBhZGRQbHVnaW4sXG4gICAgLy8gcGx1Z2lucyBmb3IgZnJhbWV3b3Jrc1xuICAgIHZ1ZVBsdWdpbjogQnVpbGRWdWVQbHVnaW4oaGxqcykuVnVlUGx1Z2luXG4gIH0pO1xuXG4gIGhsanMuZGVidWdNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IGZhbHNlOyB9O1xuICBobGpzLnNhZmVNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IHRydWU7IH07XG4gIGhsanMudmVyc2lvblN0cmluZyA9IHZlcnNpb247XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gTU9ERVMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBNT0RFU1trZXldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWVwRnJlZXplRXM2KE1PREVTW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlIGFsbCB0aGUgbW9kZXMvcmVnZXhzIGludG8gb3VyIG1haW4gb2JqZWN0XG4gIE9iamVjdC5hc3NpZ24oaGxqcywgTU9ERVMpO1xuXG4gIC8vIGJ1aWx0LWluIHBsdWdpbnMsIGxpa2VseSB0byBiZSBtb3ZlZCBvdXQgb2YgY29yZSBpbiB0aGUgZnV0dXJlXG4gIGhsanMuYWRkUGx1Z2luKGJyUGx1Z2luKTsgLy8gc2xhdGVkIHRvIGJlIHJlbW92ZWQgaW4gdjExXG4gIGhsanMuYWRkUGx1Z2luKG1lcmdlSFRNTFBsdWdpbik7XG4gIGhsanMuYWRkUGx1Z2luKHRhYlJlcGxhY2VQbHVnaW4pO1xuICByZXR1cm4gaGxqcztcbn07XG5cbi8vIGV4cG9ydCBhbiBcImluc3RhbmNlXCIgb2YgdGhlIGhpZ2hsaWdodGVyXG52YXIgaGlnaGxpZ2h0ID0gSExKUyh7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaGlnaGxpZ2h0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IDFDOkVudGVycHJpc2VcbkF1dGhvcjogU3RhbmlzbGF2IEJlbG92IDxzdGJlbG92QGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBidWlsdC1pbiBsYW5ndWFnZSAxQzpFbnRlcnByaXNlICh2NywgdjgpXG5DYXRlZ29yeTogZW50ZXJwcmlzZVxuKi9cblxuZnVuY3Rpb24gXzFjKGhsanMpIHtcblxuICAvLyDQvtCx0YnQuNC5INC/0LDRgtGC0LXRgNC9INC00LvRjyDQvtC/0YDQtdC00LXQu9C10L3QuNGPINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QslxuICB2YXIgVU5ERVJTQ09SRV9JREVOVF9SRSA9ICdbQS1aYS160JAt0K/QsC3Rj9GR0IFfXVtBLVphLXrQkC3Qr9CwLdGP0ZHQgV8wLTldKyc7XG5cbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4ga2V5d29yZFxuICB2YXIgdjdfa2V5d29yZHMgPVxuICAn0LTQsNC70LXQtSAnO1xuXG4gIC8vIHY4INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCA9PT4ga2V5d29yZFxuICB2YXIgdjhfa2V5d29yZHMgPVxuICAn0LLQvtC30LLRgNCw0YIg0LLRi9C30LLQsNGC0YzQuNGB0LrQu9GO0YfQtdC90LjQtSDQstGL0L/QvtC70L3QuNGC0Ywg0LTQu9GPINC10YHQu9C4INC4INC40Lcg0LjQu9C4INC40L3QsNGH0LUg0LjQvdCw0YfQtdC10YHQu9C4INC40YHQutC70Y7Rh9C10L3QuNC1INC60LDQttC00L7Qs9C+INC60L7QvdC10YbQtdGB0LvQuCAnICtcbiAgJ9C60L7QvdC10YbQv9C+0L/Ri9GC0LrQuCDQutC+0L3QtdGG0YbQuNC60LvQsCDQvdC1INC90L7QstGL0Lkg0L/QtdGA0LXQudGC0Lgg0L/QtdGA0LXQvCDQv9C+INC/0L7QutCwINC/0L7Qv9GL0YLQutCwINC/0YDQtdGA0LLQsNGC0Ywg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0YLQvtCz0LTQsCDRhtC40LrQuyDRjdC60YHQv9C+0YDRgiAnO1xuXG4gIC8vIGtleXdvcmQgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LBcbiAgdmFyIEtFWVdPUkQgPSB2N19rZXl3b3JkcyArIHY4X2tleXdvcmRzO1xuXG4gIC8vIHY3INGD0L3QuNC60LDQu9GM0L3Ri9C1INC00LjRgNC10LrRgtC40LLRiywg0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40LUg0LIgdjggPT0+IG1ldGEta2V5d29yZFxuICB2YXIgdjdfbWV0YV9rZXl3b3JkcyA9XG4gICfQt9Cw0LPRgNGD0LfQuNGC0YzQuNC30YTQsNC50LvQsCAnO1xuXG4gIC8vIHY4INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCDQsiDQuNC90YHRgtGA0YPQutGG0LjRj9GFINC/0YDQtdC/0YDQvtGG0LXRgdGB0L7RgNCwLCDQtNC40YDQtdC60YLQuNCy0LDRhSDQutC+0LzQv9C40LvRj9GG0LjQuCwg0LDQvdC90L7RgtCw0YbQuNGP0YUgPT0+IG1ldGEta2V5d29yZFxuICB2YXIgdjhfbWV0YV9rZXl3b3JkcyA9XG4gICfQstC10LHQutC70LjQtdC90YIg0LLQvNC10YHRgtC+INCy0L3QtdGI0L3QtdC10YHQvtC10LTQuNC90LXQvdC40LUg0LrQu9C40LXQvdGCINC60L7QvdC10YbQvtCx0LvQsNGB0YLQuCDQvNC+0LHQuNC70YzQvdC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtdC60LvQuNC10L3RgiDQvNC+0LHQuNC70YzQvdC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtdGB0LXRgNCy0LXRgCAnICtcbiAgJ9C90LDQutC70LjQtdC90YLQtSDQvdCw0LrQu9C40LXQvdGC0LXQvdCw0YHQtdGA0LLQtdGA0LUg0L3QsNC60LvQuNC10L3RgtC10L3QsNGB0LXRgNCy0LXRgNC10LHQtdC30LrQvtC90YLQtdC60YHRgtCwINC90LDRgdC10YDQstC10YDQtSDQvdCw0YHQtdGA0LLQtdGA0LXQsdC10LfQutC+0L3RgtC10LrRgdGC0LAg0L7QsdC70LDRgdGC0Ywg0L/QtdGA0LXQtCAnICtcbiAgJ9C/0L7RgdC70LUg0YHQtdGA0LLQtdGAINGC0L7Qu9GB0YLRi9C50LrQu9C40LXQvdGC0L7QsdGL0YfQvdC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtSDRgtC+0LvRgdGC0YvQudC60LvQuNC10L3RgtGD0L/RgNCw0LLQu9GP0LXQvNC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtSDRgtC+0L3QutC40LnQutC70LjQtdC90YIgJztcblxuICAvLyBtZXRhLWtleXdvcmQgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LAg0LIg0LjQvdGB0YLRgNGD0LrRhtC40Y/RhSDQv9GA0LXQv9GA0L7RhtC10YHRgdC+0YDQsCwg0LTQuNGA0LXQutGC0LjQstCw0YUg0LrQvtC80L/QuNC70Y/RhtC40LgsINCw0L3QvdC+0YLQsNGG0LjRj9GFXG4gIHZhciBNRVRBS0VZV09SRCA9IHY3X21ldGFfa2V5d29yZHMgKyB2OF9tZXRhX2tleXdvcmRzO1xuXG4gIC8vIHY3INGB0LjRgdGC0LXQvNC90YvQtSDQutC+0L3RgdGC0LDQvdGC0YsgPT0+IGJ1aWx0X2luXG4gIHZhciB2N19zeXN0ZW1fY29uc3RhbnRzID1cbiAgJ9GA0LDQt9C00LXQu9C40YLQtdC70YzRgdGC0YDQsNC90LjRhiDRgNCw0LfQtNC10LvQuNGC0LXQu9GM0YHRgtGA0L7QuiDRgdC40LzQstC+0LvRgtCw0LHRg9C70Y/RhtC40LggJztcblxuICAvLyB2NyDRg9C90LjQutCw0LvRjNC90YvQtSDQvNC10YLQvtC00Ysg0LPQu9C+0LHQsNC70YzQvdC+0LPQviDQutC+0L3RgtC10LrRgdGC0LAsINC+0YLRgdGD0YLRgdGC0LLRg9GO0YnQuNC1INCyIHY4ID09PiBidWlsdF9pblxuICB2YXIgdjdfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyA9XG4gICdhbnNpdG9vZW0gb2VtdG9hbnNpINCy0LLQtdGB0YLQuNCy0LjQtNGB0YPQsdC60L7QvdGC0L4g0LLQstC10YHRgtC40L/QtdGA0LXRh9C40YHQu9C10L3QuNC1INCy0LLQtdGB0YLQuNC/0LXRgNC40L7QtCDQstCy0LXRgdGC0LjQv9C70LDQvdGB0YfQtdGC0L7QsiDQstGL0LHRgNCw0L3QvdGL0LnQv9C70LDQvdGB0YfQtdGC0L7QsiAnICtcbiAgJ9C00LDRgtCw0LPQvtC0INC00LDRgtCw0LzQtdGB0Y/RhiDQtNCw0YLQsNGH0LjRgdC70L4g0LfQsNCz0L7Qu9C+0LLQvtC60YHQuNGB0YLQtdC80Ysg0LfQvdCw0YfQtdC90LjQtdCy0YHRgtGA0L7QutGDINC30L3QsNGH0LXQvdC40LXQuNC30YHRgtGA0L7QutC4INC60LDRgtCw0LvQvtCz0LjQsSDQutCw0YLQsNC70L7Qs9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyAnICtcbiAgJ9C60L7QtNGB0LjQvNCyINC60L7QvdCz0L7QtNCwINC60L7QvdC10YbQv9C10YDQuNC+0LTQsNCx0Lgg0LrQvtC90LXRhtGA0LDRgdGB0YfQuNGC0LDQvdC90L7Qs9C+0L/QtdGA0LjQvtC00LDQsdC4INC60L7QvdC10YbRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0LLQsNC70LAg0LrQvtC90LrQstCw0YDRgtCw0LvQsCDQutC+0L3QvNC10YHRj9GG0LAgJyArXG4gICfQutC+0L3QvdC10LTQtdC70Lgg0LvQvtCzINC70L7QszEwINC80LDQutGB0LjQvNCw0LvRjNC90L7QtdC60L7Qu9C40YfQtdGB0YLQstC+0YHRg9Cx0LrQvtC90YLQviDQvdCw0LfQstCw0L3QuNC10LjQvdGC0LXRgNGE0LXQudGB0LAg0L3QsNC30LLQsNC90LjQtdC90LDQsdC+0YDQsNC/0YDQsNCyINC90LDQt9C90LDRh9C40YLRjNCy0LjQtCAnICtcbiAgJ9C90LDQt9C90LDRh9C40YLRjNGB0YfQtdGCINC90LDQudGC0LjRgdGB0YvQu9C60Lgg0L3QsNGH0LDQu9C+0L/QtdGA0LjQvtC00LDQsdC4INC90LDRh9Cw0LvQvtGB0YLQsNC90LTQsNGA0YLQvdC+0LPQvtC40L3RgtC10YDQstCw0LvQsCDQvdCw0YfQs9C+0LTQsCDQvdCw0YfQutCy0LDRgNGC0LDQu9CwINC90LDRh9C80LXRgdGP0YbQsCAnICtcbiAgJ9C90LDRh9C90LXQtNC10LvQuCDQvdC+0LzQtdGA0LTQvdGP0LPQvtC00LAg0L3QvtC80LXRgNC00L3Rj9C90LXQtNC10LvQuCDQvdC+0LzQtdGA0L3QtdC00LXQu9C40LPQvtC00LAg0L7QsdGA0LDQsdC+0YLQutCw0L7QttC40LTQsNC90LjRjyDQvtGB0L3QvtCy0L3QvtC50LbRg9GA0L3QsNC70YDQsNGB0YfQtdGC0L7QsiAnICtcbiAgJ9C+0YHQvdC+0LLQvdC+0LnQv9C70LDQvdGB0YfQtdGC0L7QsiDQvtGB0L3QvtCy0L3QvtC50Y/Qt9GL0Log0L7Rh9C40YHRgtC40YLRjNC+0LrQvdC+0YHQvtC+0LHRidC10L3QuNC5INC/0LXRgNC40L7QtNGB0YLRgCDQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9GC0LAg0L/QvtC70YPRh9C40YLRjNC00LDRgtGD0YLQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQtNC+0LrRg9C80LXQvdGC0YLQsCDQv9C+0LvRg9GH0LjRgtGM0LfQvdCw0YfQtdC90LjRj9C+0YLQsdC+0YDQsCDQv9C+0LvRg9GH0LjRgtGM0L/QvtC30LjRhtC40Y7RgtCwINC/0L7Qu9GD0YfQuNGC0YzQv9GD0YHRgtC+0LXQt9C90LDRh9C10L3QuNC1INC/0L7Qu9GD0YfQuNGC0YzRgtCwICcgK1xuICAn0L/RgNC10YTQuNC60YHQsNCy0YLQvtC90YPQvNC10YDQsNGG0LjQuCDQv9GA0L7Qv9C40YHRjCDQv9GD0YHRgtC+0LXQt9C90LDRh9C10L3QuNC1INGA0LDQt9C8INGA0LDQt9C+0LHRgNCw0YLRjNC/0L7Qt9C40YbQuNGO0LTQvtC60YPQvNC10L3RgtCwINGA0LDRgdGB0YfQuNGC0LDRgtGM0YDQtdCz0LjRgdGC0YDRi9C90LAgJyArXG4gICfRgNCw0YHRgdGH0LjRgtCw0YLRjNGA0LXQs9C40YHRgtGA0YvQv9C+INGB0LjQvNCyINGB0L7Qt9C00LDRgtGM0L7QsdGK0LXQutGCINGB0YLQsNGC0YPRgdCy0L7Qt9Cy0YDQsNGC0LAg0YHRgtGA0LrQvtC70LjRh9C10YHRgtCy0L7RgdGC0YDQvtC6INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjNC/0L7Qt9C40YbQuNGO0LTQvtC60YPQvNC10L3RgtCwICcgK1xuICAn0YHRh9C10YLQv9C+0LrQvtC00YMg0YLQtdC60YPRidC10LXQstGA0LXQvNGPINGC0LjQv9C30L3QsNGH0LXQvdC40Y8g0YLQuNC/0LfQvdCw0YfQtdC90LjRj9GB0YLRgCDRg9GB0YLQsNC90L7QstC40YLRjNGC0LDQvdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0YLQsNC/0L4g0YTQuNC60YHRiNCw0LHQu9C+0L0g0YjQsNCx0LvQvtC9ICc7XG5cbiAgLy8gdjgg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyA9XG4gICdhY29zIGFzaW4gYXRhbiBiYXNlNjTQt9C90LDRh9C10L3QuNC1IGJhc2U2NNGB0YLRgNC+0LrQsCBjb3MgZXhwIGxvZyBsb2cxMCBwb3cgc2luIHNxcnQgdGFuIHhtbNC30L3QsNGH0LXQvdC40LUgeG1s0YHRgtGA0L7QutCwICcgK1xuICAneG1s0YLQuNC/IHhtbNGC0LjQv9C30L3RhyDQsNC60YLQuNCy0L3QvtC10L7QutC90L4g0LHQtdC30L7Qv9Cw0YHQvdGL0LnRgNC10LbQuNC8INCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINCx0YPQu9C10LLQviDQstCy0LXRgdGC0LjQtNCw0YLRgyDQstCy0LXRgdGC0LjQt9C90LDRh9C10L3QuNC1ICcgK1xuICAn0LLQstC10YHRgtC40YHRgtGA0L7QutGDINCy0LLQtdGB0YLQuNGH0LjRgdC70L4g0LLQvtC30LzQvtC20L3QvtGB0YLRjNGH0YLQtdC90LjRj3htbCDQstC+0L/RgNC+0YEg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGM0LfQvdCw0YfQtdC90LjQtSDQstGA0LXQsyDQstGL0LPRgNGD0LfQuNGC0YzQttGD0YDQvdCw0LvRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0LLRi9C/0L7Qu9C90LjRgtGM0L7QsdGA0LDQsdC+0YLQutGD0L7Qv9C+0LLQtdGJ0LXQvdC40Y8g0LLRi9C/0L7Qu9C90LjRgtGM0L/RgNC+0LLQtdGA0LrRg9C/0YDQsNCy0LTQvtGB0YLRg9C/0LAg0LLRi9GH0LjRgdC70LjRgtGMINCz0L7QtCDQtNCw0L3QvdGL0LXRhNC+0YDQvNGL0LLQt9C90LDRh9C10L3QuNC1INC00LDRgtCwINC00LXQvdGMINC00LXQvdGM0LPQvtC00LAgJyArXG4gICfQtNC10L3RjNC90LXQtNC10LvQuCDQtNC+0LHQsNCy0LjRgtGM0LzQtdGB0Y/RhiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0YzRgNCw0LHQvtGC0YPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LfQsNCy0LXRgNGI0LjRgtGM0YDQsNCx0L7RgtGD0YHQuNGB0YLQtdC80YsgJyArXG4gICfQt9Cw0LPRgNGD0LfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDINC30LDQutGA0YvRgtGM0YHQv9GA0LDQstC60YMg0LfQsNC/0LjRgdCw0YLRjGpzb24g0LfQsNC/0LjRgdCw0YLRjHhtbCDQt9Cw0L/QuNGB0LDRgtGM0LTQsNGC0YNqc29uINC30LDQv9C40YHRjNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C30LDQv9C+0LvQvdC40YLRjNC30L3QsNGH0LXQvdC40Y/RgdCy0L7QudGB0YLQsiDQt9Cw0L/RgNC+0YHQuNGC0YzRgNCw0LfRgNC10YjQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQt9Cw0L/Rg9GB0YLQuNGC0YzQv9GA0LjQu9C+0LbQtdC90LjQtSDQt9Cw0L/Rg9GB0YLQuNGC0YzRgdC40YHRgtC10LzRgyDQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOICcgK1xuICAn0LfQvdCw0YfQtdC90LjQtdCy0LTQsNC90L3Ri9C10YTQvtGA0LzRiyDQt9C90LDRh9C10L3QuNC10LLRgdGC0YDQvtC60YPQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQstGE0LDQudC7INC30L3QsNGH0LXQvdC40LXQt9Cw0L/QvtC70L3QtdC90L4g0LfQvdCw0YfQtdC90LjQtdC40LfRgdGC0YDQvtC60LjQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQuNC30YTQsNC50LvQsCAnICtcbiAgJ9C40Ld4bWzRgtC40L/QsCDQuNC80L/QvtGA0YLQvNC+0LTQtdC70Lh4ZHRvINC40LzRj9C60L7QvNC/0YzRjtGC0LXRgNCwINC40LzRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjNC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9C10LTQsNC90L3Ri9C1INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC+0YjQuNCx0LrQtSAnICtcbiAgJ9C60LDRgtCw0LvQvtCz0LHQuNCx0LvQuNC+0YLQtdC60LjQvNC+0LHQuNC70YzQvdC+0LPQvtGD0YHRgtGA0L7QudGB0YLQstCwINC60LDRgtCw0LvQvtCz0LLRgNC10LzQtdC90L3Ri9GF0YTQsNC50LvQvtCyINC60LDRgtCw0LvQvtCz0LTQvtC60YPQvNC10L3RgtC+0LIg0LrQsNGC0LDQu9C+0LPQv9GA0L7Qs9GA0LDQvNC80Ysg0LrQvtC00LjRgNC+0LLQsNGC0YzRgdGC0YDQvtC60YMgJyArXG4gICfQutC+0LTQu9C+0LrQsNC70LjQt9Cw0YbQuNC40LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC60L7QtNGB0LjQvNCy0L7Qu9CwINC60L7QvNCw0L3QtNCw0YHQuNGB0YLQtdC80Ysg0LrQvtC90LXRhtCz0L7QtNCwINC60L7QvdC10YbQtNC90Y8g0LrQvtC90LXRhtC60LLQsNGA0YLQsNC70LAg0LrQvtC90LXRhtC80LXRgdGP0YbQsCDQutC+0L3QtdGG0LzQuNC90YPRgtGLICcgK1xuICAn0LrQvtC90LXRhtC90LXQtNC10LvQuCDQutC+0L3QtdGG0YfQsNGB0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGP0LHQsNC30YvQtNCw0L3QvdGL0YXQuNC30LzQtdC90LXQvdCw0LTQuNC90LDQvNC40YfQtdGB0LrQuCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y/QuNC30LzQtdC90LXQvdCwINC60L7Qv9C40YDQvtCy0LDRgtGM0LTQsNC90L3Ri9C10YTQvtGA0LzRiyAnICtcbiAgJ9C60L7Qv9C40YDQvtCy0LDRgtGM0YTQsNC50Lsg0LrRgNCw0YLQutC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCDQu9C10LIg0LzQsNC60YEg0LzQtdGB0YLQvdC+0LXQstGA0LXQvNGPINC80LXRgdGP0YYg0LzQuNC9INC80LjQvdGD0YLQsCDQvNC+0L3QvtC/0L7Qu9GM0L3Ri9C50YDQtdC20LjQvCDQvdCw0LnRgtC4ICcgK1xuICAn0L3QsNC50YLQuNC90LXQtNC+0L/Rg9GB0YLQuNC80YvQtdGB0LjQvNCy0L7Qu9GLeG1sINC90LDQudGC0LjQvtC60L3QvtC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQvdCw0LnRgtC40L/QvtC80LXRh9C10L3QvdGL0LXQvdCw0YPQtNCw0LvQtdC90LjQtSDQvdCw0LnRgtC40L/QvtGB0YHRi9C70LrQsNC8INC90LDQudGC0LjRhNCw0LnQu9GLICcgK1xuICAn0L3QsNGH0LDQu9C+0LPQvtC00LAg0L3QsNGH0LDQu9C+0LTQvdGPINC90LDRh9Cw0LvQvtC60LLQsNGA0YLQsNC70LAg0L3QsNGH0LDQu9C+0LzQtdGB0Y/RhtCwINC90LDRh9Cw0LvQvtC80LjQvdGD0YLRiyDQvdCw0YfQsNC70L7QvdC10LTQtdC70Lgg0L3QsNGH0LDQu9C+0YfQsNGB0LAg0L3QsNGH0LDRgtGM0LfQsNC/0YDQvtGB0YDQsNC30YDQtdGI0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQt9Cw0L/Rg9GB0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0YfQsNGC0YzQutC+0L/QuNGA0L7QstCw0L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C10YDQtdC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LTQutC70Y7Rh9C10L3QuNC10LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyAnICtcbiAgJ9C90LDRh9Cw0YLRjNC/0L7QtNC60LvRjtGH0LXQvdC40LXRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10Lkg0L3QsNGH0LDRgtGM0L/QvtC00LrQu9GO0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQvdCw0YfQsNGC0YzQv9C+0LjRgdC60YTQsNC50LvQvtCyICcgK1xuICAn0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10LrQsNGC0LDQu9C+0LPQsNCy0YDQtdC80LXQvdC90YvRhdGE0LDQudC70L7QsiDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXQutCw0YLQsNC70L7Qs9Cw0LTQvtC60YPQvNC10L3RgtC+0LIg0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10YDQsNCx0L7Rh9C10LPQvtC60LDRgtCw0LvQvtCz0LDQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0L/QvtC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LzQtdGJ0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YHQvtC30LTQsNC90LjQtdC00LLQvtC40YfQvdGL0YXQtNCw0L3QvdGL0YXQuNC30YTQsNC50LvQsCDQvdCw0YfQsNGC0YzRgdC+0LfQtNCw0L3QuNC10LrQsNGC0LDQu9C+0LPQsCAnICtcbiAgJ9C90LDRh9Cw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOINC90LDRh9Cw0YLRjNGD0LTQsNC70LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YPRgdGC0LDQvdC+0LLQutGD0LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyDQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10LkgJyArXG4gICfQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0L3QtdC00LXQu9GP0LPQvtC00LAg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0YzQt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L7QtdC00LjQvdC10L3QuNGPINC90L7QvNC10YDRgdC10LDQvdGB0LDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfQvdC+0LzQtdGA0YHQvtC10LTQuNC90LXQvdC40Y/QuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L3RgNC10LMg0L3RgdGC0YAg0L7QsdC90L7QstC40YLRjNC40L3RgtC10YDRhNC10LnRgSDQvtCx0L3QvtCy0LjRgtGM0L3Rg9C80LXRgNCw0YbQuNGO0L7QsdGK0LXQutGC0L7QsiDQvtCx0L3QvtCy0LjRgtGM0L/QvtCy0YLQvtGA0L3QvtC40YHQv9C+0LvRjNC30YPQtdC80YvQtdC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQvtCx0YDQsNCx0L7RgtC60LDQv9GA0LXRgNGL0LLQsNC90LjRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvtCx0YrQtdC00LjQvdC40YLRjNGE0LDQudC70Ysg0L7QutGAINC+0L/QuNGB0LDQvdC40LXQvtGI0LjQsdC60Lgg0L7Qv9C+0LLQtdGB0YLQuNGC0Ywg0L7Qv9C+0LLQtdGB0YLQuNGC0YzQvtCx0LjQt9C80LXQvdC10L3QuNC4ICcgK1xuICAn0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQt9Cw0L/RgNC+0YHQsNC90LDRgdGC0YDQvtC10LrQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQvtC20LjQtNCw0L3QuNGPINC+0YLQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQvtGC0LrRgNGL0YLRjNC30L3QsNGH0LXQvdC40LUg0L7RgtC60YDRi9GC0YzQuNC90LTQtdC60YHRgdC/0YDQsNCy0LrQuCDQvtGC0LrRgNGL0YLRjNGB0L7QtNC10YDQttCw0L3QuNC10YHQv9GA0LDQstC60Lgg0L7RgtC60YDRi9GC0YzRgdC/0YDQsNCy0LrRgyDQvtGC0LrRgNGL0YLRjNGE0L7RgNC80YMg0L7RgtC60YDRi9GC0YzRhNC+0YDQvNGD0LzQvtC00LDQu9GM0L3QviAnICtcbiAgJ9C+0YLQvNC10L3QuNGC0YzRgtGA0LDQvdC30LDQutGG0LjRjiDQvtGH0LjRgdGC0LjRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQvtGH0LjRgdGC0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC+0YfQuNGB0YLQuNGC0YzRgdC+0L7QsdGJ0LXQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNGL0LTQvtGB0YLRg9C/0LAgJyArXG4gICfQv9C10YDQtdC50YLQuNC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQv9C10YDQtdC80LXRgdGC0LjRgtGM0YTQsNC50Lsg0L/QvtC00LrQu9GO0YfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDICcgK1xuICAn0L/QvtC00LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC30LDQv9GA0L7RgdCw0L3QsNGB0YLRgNC+0LXQutC60LvQuNC10L3RgtCw0LvQuNGG0LXQvdC30LjRgNC+0LLQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7QttC40LTQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHQutGA0LjQv9GC0L7Qs9GA0LDRhNC40LXQuSDQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQv9C+0LTRgNC+0LHQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC00LDRgtGLINC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC30L3QsNGH0LXQvdC40Y8g0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00YHRgtGA0L7QutC4INC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNGH0LjRgdC70LAg0L/QvtC60LDQt9Cw0YLRjNCy0L7Qv9GA0L7RgSDQv9C+0LrQsNC30LDRgtGM0LfQvdCw0YfQtdC90LjQtSAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQuNC90YTQvtGA0LzQsNGG0LjRjtC+0LHQvtGI0LjQsdC60LUg0L/QvtC60LDQt9Cw0YLRjNC90LDQutCw0YDRgtC1INC/0L7QutCw0LfQsNGC0YzQvtC/0L7QstC10YnQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+0LrQsNC30LDRgtGM0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQv9C+0LvQvdC+0LXQuNC80Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGMY29t0L7QsdGK0LXQutGCINC/0L7Qu9GD0YfQuNGC0Yx4bWzRgtC40L8g0L/QvtC70YPRh9C40YLRjNCw0LTRgNC10YHQv9C+0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjiDQv9C+0LvRg9GH0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDQstC10YDRiNC10L3QuNGP0YHQv9GP0YnQtdCz0L7RgdC10LDQvdGB0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINC/0L7Qu9GD0YfQuNGC0YzQstGA0LXQvNGP0L7QttC40LTQsNC90LjRj9Cx0LvQvtC60LjRgNC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQtNCw0L3QvdGL0LXQstGL0LHQvtGA0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQudC/0LDRgNCw0LzQtdGC0YDQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC00L7Qv9GD0YHRgtC40LzRi9C10LrQvtC00YvQu9C+0LrQsNC70LjQt9Cw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQtNC+0L/Rg9GB0YLQuNC80YvQtdGH0LDRgdC+0LLRi9C10L/QvtGP0YHQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQt9Cw0LPQvtC70L7QstC+0LrQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC/0L7Qu9GD0YfQuNGC0YzQt9C90LDRh9C10L3QuNGP0L7RgtCx0L7RgNCw0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQuNC30LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAg0L/QvtC70YPRh9C40YLRjNC40LzRj9Cy0YDQtdC80LXQvdC90L7Qs9C+0YTQsNC50LvQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQuNC80Y/QutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC40L3RhNC+0YDQvNCw0YbQuNGO0Y3QutGA0LDQvdC+0LLQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40LggJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0LvRg9GH0LjRgtGM0LrRgNCw0YLQutC40LnQt9Cw0LPQvtC70L7QstC+0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQv9C+0LvRg9GH0LjRgtGM0LzQsNC60LXRgtC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC80LDRgdC60YPQstGB0LXRhNCw0LnQu9GLINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9C60LvQuNC10L3RgtCwINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9GB0LXRgNCy0LXRgNCwINC/0L7Qu9GD0YfQuNGC0YzQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10L/QvtCw0LTRgNC10YHRgyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvNC40L3QuNC80LDQu9GM0L3Rg9GO0LTQu9C40L3Rg9C/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNC90LDQstC40LPQsNGG0LjQvtC90L3Rg9GO0YHRgdGL0LvQutGDINC/0L7Qu9GD0YfQuNGC0YzQvdCw0LLQuNCz0LDRhtC40L7QvdC90YPRjtGB0YHRi9C70LrRg9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuNCx0LDQt9GL0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzQvtCx0YnQuNC50LzQsNC60LXRgiAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0YnRg9GO0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0L7QutC90LAg0L/QvtC70YPRh9C40YLRjNC+0L/QtdGA0LDRgtC40LLQvdGD0Y7QvtGC0LzQtdGC0LrRg9Cy0YDQtdC80LXQvdC4INC/0L7Qu9GD0YfQuNGC0YzQvtGC0LrQu9GO0YfQtdC90LjQtdCx0LXQt9C+0L/QsNGB0L3QvtCz0L7RgNC10LbQuNC80LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/QsNGA0LDQvNC10YLRgNGL0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YvRhdC+0L/RhtC40LnQuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0L/QvtC70L3QvtC10LjQvNGP0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQvtC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y/QvdCw0LLQuNCz0LDRhtC40L7QvdC90YvRhdGB0YHRi9C70L7QuiDQv9C+0LvRg9GH0LjRgtGM0L/RgNC+0LLQtdGA0LrRg9GB0LvQvtC20L3QvtGB0YLQuNC/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNGA0LDQt9C00LXQu9C40YLQtdC70YzQv9GD0YLQuCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgNCw0LfQtNC10LvQuNGC0LXQu9GM0L/Rg9GC0LjQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0YDQsNC30LTQtdC70LjRgtC10LvRjNC/0YPRgtC40YHQtdGA0LLQtdGA0LAg0L/QvtC70YPRh9C40YLRjNGB0LXQsNC90YHRi9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgdC60L7RgNC+0YHRgtGM0LrQu9C40LXQvdGC0YHQutC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPINC/0L7Qu9GD0YfQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjRj9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0YHQvtC+0LHRidC10L3QuNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLINC/0L7Qu9GD0YfQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDRg9C60YLRg9GA0YPRhdGA0LDQvdC10L3QuNGP0LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YLQtdC60YPRidC40LnRgdC10LDQvdGB0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzRhNCw0LnQuyDQv9C+0LvRg9GH0LjRgtGM0YTQsNC50LvRiyDQv9C+0LvRg9GH0LjRgtGM0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y4gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y7QuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQvtGBINC/0L7QvNC10YHRgtC40YLRjNCy0L7QstGA0LXQvNC10L3QvdC+0LXRhdGA0LDQvdC40LvQuNGJ0LUgJyArXG4gICfQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQuyDQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQu9GLINC/0YDQsNCyINC/0YDQsNCy0L7QtNC+0YHRgtGD0L/QsCDQv9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90L7QtdC30L3QsNGH0LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQutC+0LTQsNC70L7QutCw0LvQuNC30LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQv9C10YDQuNC+0LTQsCAnICtcbiAgJ9C/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/RgNCw0LLQsCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC/0YDQuNC70L7QttC10L3QuNGPINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10YHQvtCx0YvRgtC40Y/QttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRh9Cw0YHQvtCy0L7Qs9C+0L/QvtGP0YHQsCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1ICcgK1xuICAn0L/RgNC10LrRgNCw0YLQuNGC0YzRgNCw0LHQvtGC0YPRgdC40YHRgtC10LzRiyDQv9GA0LjQstC40LvQtdCz0LjRgNC+0LLQsNC90L3Ri9C50YDQtdC20LjQvCDQv9GA0L7QtNC+0LvQttC40YLRjNCy0YvQt9C+0LIg0L/RgNC+0YfQuNGC0LDRgtGManNvbiDQv9GA0L7Rh9C40YLQsNGC0Yx4bWwg0L/RgNC+0YfQuNGC0LDRgtGM0LTQsNGC0YNqc29uINC/0YPRgdGC0LDRj9GB0YLRgNC+0LrQsCAnICtcbiAgJ9GA0LDQsdC+0YfQuNC50LrQsNGC0LDQu9C+0LPQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YDQsNC30LTQtdC70LjRgtGM0YTQsNC50Lsg0YDQsNC30L7RgNCy0LDRgtGM0YHQvtC10LTQuNC90LXQvdC40LXRgdCy0L3QtdGI0L3QuNC80LjRgdGC0L7Rh9C90LjQutC+0LzQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQutC+0LTQuNGA0L7QstCw0YLRjNGB0YLRgNC+0LrRgyDRgNC+0LvRjNC00L7RgdGC0YPQv9C90LAg0YHQtdC60YPQvdC00LAg0YHQuNCz0L3QsNC7INGB0LjQvNCy0L7QuyDRgdC60L7Qv9C40YDQvtCy0LDRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRgdC80LXRidC10L3QuNC10LvQtdGC0L3QtdCz0L7QstGA0LXQvNC10L3QuCAnICtcbiAgJ9GB0LzQtdGJ0LXQvdC40LXRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QstGA0LXQvNC10L3QuCDRgdC+0LXQtNC40L3QuNGC0YzQsdGD0YTQtdGA0YvQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINGB0L7Qt9C00LDRgtGM0LrQsNGC0LDQu9C+0LMg0YHQvtC30LTQsNGC0YzRhNCw0LHRgNC40LrRg3hkdG8g0YHQvtC60YDQuyDRgdC+0LrRgNC70L8g0YHQvtC60YDQvyDRgdC+0L7QsdGJ0LjRgtGMICcgK1xuICAn0YHQvtGB0YLQvtGP0L3QuNC1INGB0L7RhdGA0LDQvdC40YLRjNC30L3QsNGH0LXQvdC40LUg0YHQvtGF0YDQsNC90LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGB0YDQtdC0INGB0YLRgNC00LvQuNC90LAg0YHRgtGA0LfQsNC60LDQvdGH0LjQstCw0LXRgtGB0Y/QvdCwINGB0YLRgNC30LDQvNC10L3QuNGC0Ywg0YHRgtGA0L3QsNC50YLQuCDRgdGC0YDQvdCw0YfQuNC90LDQtdGC0YHRj9GBICcgK1xuICAn0YHRgtGA0L7QutCwINGB0YLRgNC+0LrQsNGB0L7QtdC00LjQvdC10L3QuNGP0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGB0YLRgNC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDQvtC60YMg0YHRgtGA0YDQsNC30LTQtdC70LjRgtGMINGB0YLRgNGB0L7QtdC00LjQvdC40YLRjCDRgdGC0YDRgdGA0LDQstC90LjRgtGMINGB0YLRgNGH0LjRgdC70L7QstGF0L7QttC00LXQvdC40LkgJytcbiAgJ9GB0YLRgNGH0LjRgdC70L7RgdGC0YDQvtC6INGB0YLRgNGI0LDQsdC70L7QvSDRgtC10LrRg9GJ0LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0LTQsNGC0LDRgdC10LDQvdGB0LAg0YLQtdC60YPRidCw0Y/Rg9C90LjQstC10YDRgdCw0LvRjNC90LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0YPQvdC40LLQtdGA0YHQsNC70YzQvdCw0Y/QtNCw0YLQsNCy0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUgJyArXG4gICfRgtC10LrRg9GJ0LjQudCy0LDRgNC40LDQvdGC0LjQvdGC0LXRgNGE0LXQudGB0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YLQtdC60YPRidC40LnQstCw0YDQuNCw0L3RgtC+0YHQvdC+0LLQvdC+0LPQvtGI0YDQuNGE0YLQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgtC10LrRg9GJ0LjQudC60L7QtNC70L7QutCw0LvQuNC30LDRhtC40LggJyArXG4gICfRgtC10LrRg9GJ0LjQudGA0LXQttC40LzQt9Cw0L/Rg9GB0LrQsCDRgtC10LrRg9GJ0LjQudGP0LfRi9C6INGC0LXQutGD0YnQuNC50Y/Qt9GL0LrRgdC40YHRgtC10LzRiyDRgtC40L8g0YLQuNC/0LfQvdGHINGC0YDQsNC90LfQsNC60YbQuNGP0LDQutGC0LjQstC90LAg0YLRgNC10LMg0YPQtNCw0LvQuNGC0YzQtNCw0L3QvdGL0LXQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfRg9C00LDQu9C40YLRjNC40LfQstGA0LXQvNC10L3QvdC+0LPQvtGF0YDQsNC90LjQu9C40YnQsCDRg9C00LDQu9C40YLRjNC+0LHRitC10LrRgtGLINGD0LTQsNC70LjRgtGM0YTQsNC50LvRiyDRg9C90LjQstC10YDRgdCw0LvRjNC90L7QtdCy0YDQtdC80Y8g0YPRgdGC0LDQvdC+0LLQuNGC0YzQsdC10LfQvtC/0LDRgdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINGD0YHRgtCw0L3QvtCy0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDRg9GB0YLQsNC90L7QstC40YLRjNCy0L3QtdGI0L3RjtGO0LrQvtC80L/QvtC90LXQvdGC0YMgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCy0YDQtdC80Y/Qt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L/Rj9GJ0LXQs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C+0LbQuNC00LDQvdC40Y/QsdC70L7QutC40YDQvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINGD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60YHQuNGB0YLQtdC80Ysg0YPRgdGC0LDQvdC+0LLQuNGC0YzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRg9GB0YLQsNC90L7QstC40YLRjNC60YDQsNGC0LrQuNC50LfQsNCz0L7Qu9C+0LLQvtC60L/RgNC40LvQvtC20LXQvdC40Y8gJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC80LjQvdC40LzQsNC70YzQvdGD0Y7QtNC70LjQvdGD0L/QsNGA0L7Qu9C10LnQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDRg9GB0YLQsNC90L7QstC40YLRjNC80L7QvdC+0L/QvtC70YzQvdGL0LnRgNC10LbQuNC8INGD0YHRgtCw0L3QvtCy0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40LrQu9C40LXQvdGC0LDQu9C40YbQtdC90LfQuNGA0L7QstCw0L3QuNGPICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGD0YHRgtCw0L3QvtCy0LjRgtGM0L7RgtC60LvRjtGH0LXQvdC40LXQsdC10LfQvtC/0LDRgdC90L7Qs9C+0YDQtdC20LjQvNCwICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQv9Cw0YDQsNC80LXRgtGA0YvRhNGD0L3QutGG0LjQvtC90LDQu9GM0L3Ri9GF0L7Qv9GG0LjQudC40L3RgtC10YDRhNC10LnRgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0L/RgNC40LLQuNC70LXQs9C40YDQvtCy0LDQvdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC/0YDQvtCy0LXRgNC60YPRgdC70L7QttC90L7RgdGC0LjQv9Cw0YDQvtC70LXQudC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INGD0YHRgtCw0L3QvtCy0LjRgtGM0YDQsNGB0YjQuNGA0LXQvdC40LXRgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5ICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgNCw0YHRiNC40YDQtdC90LjQtdGA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjQtdGB0LLQvdC10YjQvdC40LzQuNGB0YLQvtGH0L3QuNC60L7QvNC00LDQvdC90YvRhSDRg9GB0YLQsNC90L7QstC40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINGD0YHRgtCw0L3QvtCy0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDRg9GB0YLQsNC90L7QstC40YLRjNGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAgJyArXG4gICfRhNC+0YDQvNCw0YIg0YbQtdC7INGH0LDRgSDRh9Cw0YHQvtCy0L7QudC/0L7Rj9GBINGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAg0YfQuNGB0LvQviDRh9C40YHQu9C+0L/RgNC+0L/QuNGB0YzRjiDRjdGC0L7QsNC00YDQtdGB0LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAgJztcblxuICAvLyB2OCDRgdCy0L7QudGB0YLQstCwINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfcHJvcGVydHkgPVxuICAnd3PRgdGB0YvQu9C60Lgg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INCx0LjQsdC70LjQvtGC0LXQutCw0LzQsNC60LXRgtC+0LLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCx0LjQsdC70LjQvtGC0LXQutCw0YHRgtC40LvQtdC5INCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0YsgJyArXG4gICfQstC90LXRiNC90LjQtdC40YHRgtC+0YfQvdC40LrQuNC00LDQvdC90YvRhSDQstC90LXRiNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuCDQstC90LXRiNC90LjQtdC+0YLRh9C10YLRiyDQstGB0YLRgNC+0LXQvdC90YvQtdC/0L7QutGD0L/QutC4INCz0LvQsNCy0L3Ri9C50LjQvdGC0LXRgNGE0LXQudGBINCz0LvQsNCy0L3Ri9C50YHRgtC40LvRjCAnICtcbiAgJ9C00L7QutGD0LzQtdC90YLRiyDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0LXRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC20YPRgNC90LDQu9GL0LTQvtC60YPQvNC10L3RgtC+0LIg0LfQsNC00LDRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC40L3RgtC10YDQvdC10YLRgdC+0LXQtNC40L3QtdC90LjQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LDQsdC+0YfQtdC50LTQsNGC0YsgJyArXG4gICfQuNGB0YLQvtGA0LjRj9GA0LDQsdC+0YLRi9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQutC+0L3RgdGC0LDQvdGC0Ysg0LrRgNC40YLQtdGA0LjQuNC+0YLQsdC+0YDQsCDQvNC10YLQsNC00LDQvdC90YvQtSDQvtCx0YDQsNCx0L7RgtC60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGA0LXQutC70LDQvNGLINC+0YLQv9GA0LDQstC60LDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YXRg9Cy0LXQtNC+0LzQu9C10L3QuNC5ICcgK1xuICAn0L7RgtGH0LXRgtGLINC/0LDQvdC10LvRjNC30LDQtNCw0YfQvtGBINC/0LDRgNCw0LzQtdGC0YDQt9Cw0L/Rg9GB0LrQsCDQv9Cw0YDQsNC80LXRgtGA0YvRgdC10LDQvdGB0LAg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPINC/0LvQsNC90YvQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0L/Qu9Cw0L3Ri9Cy0LjQtNC+0LLRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiAnICtcbiAgJ9C/0LvQsNC90YvQvtCx0LzQtdC90LAg0L/Qu9Cw0L3Ri9GB0YfQtdGC0L7QsiDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQuiDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4INC/0YDQvtCy0LXRgNC60LDQstGB0YLRgNC+0LXQvdC90YvRhdC/0L7QutGD0L/QvtC6ICcgK1xuICAn0YDQsNCx0L7Rh9Cw0Y/QtNCw0YLQsCDRgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgNC10LPQuNGB0YLRgNGL0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDRgNC10LPQuNGB0YLRgNGL0L3QsNC60L7Qv9C70LXQvdC40Y8g0YDQtdCz0LjRgdGC0YDRi9GA0LDRgdGH0LXRgtCwINGA0LXQs9C40YHRgtGA0YvRgdCy0LXQtNC10L3QuNC5ICcgK1xuICAn0YDQtdCz0LvQsNC80LXQvdGC0L3Ri9C10LfQsNC00LDQvdC40Y8g0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byDRgdC/0YDQsNCy0L7Rh9C90LjQutC4INGB0YDQtdC00YHRgtCy0LDQs9C10L7Qv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjyDRgdGA0LXQtNGB0YLQstCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGB0YDQtdC00YHRgtCy0LDQvNGD0LvRjNGC0LjQvNC10LTQuNCwICcgK1xuICAn0YHRgNC10LTRgdGC0LLQsNC+0YLQvtCx0YDQsNC20LXQvdC40Y/RgNC10LrQu9Cw0LzRiyDRgdGA0LXQtNGB0YLQstCw0L/QvtGH0YLRiyDRgdGA0LXQtNGB0YLQstCw0YLQtdC70LXRhNC+0L3QuNC4INGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQu9C+0LLRi9C10L/QvtGC0L7QutC4INGE0L7QvdC+0LLRi9C10LfQsNC00LDQvdC40Y8g0YXRgNCw0L3QuNC70LjRidCw0L3QsNGB0YLRgNC+0LXQuiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdCy0LDRgNC40LDQvdGC0L7QstC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdC90LDRgdGC0YDQvtC10LrQtNCw0L3QvdGL0YXRhNC+0YDQvCDRhdGA0LDQvdC40LvQuNGJ0LXQvtCx0YnQuNGF0L3QsNGB0YLRgNC+0LXQuiDRhdGA0LDQvdC40LvQuNGJ0LXQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhdC90LDRgdGC0YDQvtC10LrQtNC40L3QsNC80LjRh9C10YHQutC40YXRgdC/0LjRgdC60L7QsiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQuNGF0L3QsNGB0YLRgNC+0LXQutC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdGB0LjRgdGC0LXQvNC90YvRhdC90LDRgdGC0YDQvtC10LogJztcblxuICAvLyBidWlsdF9pbiA6INCy0YHRgtGA0L7QtdC90L3Ri9C1INC40LvQuCDQsdC40LHQu9C40L7RgtC10YfQvdGL0LUg0L7QsdGK0LXQutGC0YsgKNC60L7QvdGB0YLQsNC90YLRiywg0LrQu9Cw0YHRgdGLLCDRhNGD0L3QutGG0LjQuClcbiAgdmFyIEJVSUxUSU4gPVxuICB2N19zeXN0ZW1fY29uc3RhbnRzICtcbiAgdjdfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyArIHY4X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgK1xuICB2OF9nbG9iYWxfY29udGV4dF9wcm9wZXJ0eTtcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L3QsNCx0L7RgNGLINC30L3QsNGH0LXQvdC40LkgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fc2V0c19vZl92YWx1ZXMgPVxuICAnd2Vi0YbQstC10YLQsCB3aW5kb3dz0YbQstC10YLQsCB3aW5kb3dz0YjRgNC40YTRgtGLINCx0LjQsdC70LjQvtGC0LXQutCw0LrQsNGA0YLQuNC90L7QuiDRgNCw0LzQutC40YHRgtC40LvRjyDRgdC40LzQstC+0LvRiyDRhtCy0LXRgtCw0YHRgtC40LvRjyDRiNGA0LjRhNGC0YvRgdGC0LjQu9GPICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC40L3RgtC10YDRhNC10LnRgdC90YvQtSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19pbnRlcmZhY2UgPVxuICAn0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7QtdGB0L7RhdGA0LDQvdC10L3QuNC10LTQsNC90L3Ri9GF0YTQvtGA0LzRi9Cy0L3QsNGB0YLRgNC+0LnQutCw0YUg0LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40Y/QstGE0L7RgNC80LUg0LDQstGC0L7RgNCw0LfQtNCy0LjQttC10L3QuNC10YHQtdGA0LjQuSAnICtcbiAgJ9Cw0L3QuNC80LDRhtC40Y/QtNC40LDQs9GA0LDQvNC80Ysg0LLQsNGA0LjQsNC90YLQstGL0YDQsNCy0L3QuNCy0LDQvdC40Y/RjdC70LXQvNC10L3RgtC+0LLQuNC30LDQs9C+0LvQvtCy0LrQvtCyINCy0LDRgNC40LDQvdGC0YPQv9GA0LDQstC70LXQvdC40Y/QstGL0YHQvtGC0L7QudGC0LDQsdC70LjRhtGLICcgK1xuICAn0LLQtdGA0YLQuNC60LDQu9GM0L3QsNGP0L/RgNC+0LrRgNGD0YLQutCw0YTQvtGA0LzRiyDQstC10YDRgtC40LrQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LUg0LLQtdGA0YLQuNC60LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC10Y3Qu9C10LzQtdC90YLQsCDQstC40LTQs9GA0YPQv9C/0YvRhNC+0YDQvNGLICcgK1xuICAn0LLQuNC00LTQtdC60L7RgNCw0YbQuNC40YTQvtGA0LzRiyDQstC40LTQtNC+0L/QvtC70L3QtdC90LjRj9GN0LvQtdC80LXQvdGC0LDRhNC+0YDQvNGLINCy0LjQtNC40LfQvNC10L3QtdC90LjRj9C00LDQvdC90YvRhSDQstC40LTQutC90L7Qv9C60LjRhNC+0YDQvNGLINCy0LjQtNC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GPICcgK1xuICAn0LLQuNC00L/QvtC00L/QuNGB0LXQudC60LTQuNCw0LPRgNCw0LzQvNC1INCy0LjQtNC/0L7Qu9GP0YTQvtGA0LzRiyDQstC40LTRhNC70LDQttC60LAg0LLQu9C40Y/QvdC40LXRgNCw0LfQvNC10YDQsNC90LDQv9GD0LfRi9GA0LXQutC00LjQsNCz0YDQsNC80LzRiyDQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC1ICcgK1xuICAn0LPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90L7QtdC/0L7Qu9C+0LbQtdC90LjQtdGN0LvQtdC80LXQvdGC0LAg0LPRgNGD0L/Qv9C40YDQvtCy0LrQsNC60L7Qu9C+0L3QvtC6INCz0YDRg9C/0L/QuNGA0L7QstC60LDQv9C+0LTRh9C40L3QtdC90L3Ri9GF0Y3Qu9C10LzQtdC90YLQvtCy0YTQvtGA0LzRiyAnICtcbiAgJ9Cz0YDRg9C/0L/Ri9C40Y3Qu9C10LzQtdC90YLRiyDQtNC10LnRgdGC0LLQuNC10L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C50YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0LTQvtC/0YPRgdGC0LjQvNGL0LXQtNC10LnRgdGC0LLQuNGP0L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjRjyAnICtcbiAgJ9C40L3RgtC10YDQstCw0LvQvNC10LbQtNGD0Y3Qu9C10LzQtdC90YLQsNC80LjRhNC+0YDQvNGLINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LLRi9Cy0L7QtNCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC70L7RgdGL0L/RgNC+0LrRgNGD0YLQutC4ICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfRg9C10LzQvtC10LfQvdCw0YfQtdC90LjQtdGC0L7Rh9C60LjQsdC40YDQttC10LLQvtC50LTQuNCw0LPRgNCw0LzQvNGLINC40YHRgtC+0YDQuNGP0LLRi9Cx0L7RgNCw0L/RgNC40LLQstC+0LTQtSDQuNGB0YLQvtGH0L3QuNC60LfQvdCw0YfQtdC90LjQudC+0YHQuNGC0L7Rh9C10LrQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQuNGB0YLQvtGH0L3QuNC60LfQvdCw0YfQtdC90LjRj9GA0LDQt9C80LXRgNCw0L/Rg9C30YvRgNGM0LrQsNC00LjQsNCz0YDQsNC80LzRiyDQutCw0YLQtdCz0L7RgNC40Y/Qs9GA0YPQv9C/0YvQutC+0LzQsNC90LQg0LzQsNC60YHQuNC80YPQvNGB0LXRgNC40Lkg0L3QsNGH0LDQu9GM0L3QvtC10L7RgtC+0LHRgNCw0LbQtdC90LjQtdC00LXRgNC10LLQsCAnICtcbiAgJ9C90LDRh9Cw0LvRjNC90L7QtdC+0YLQvtCx0YDQsNC20LXQvdC40LXRgdC/0LjRgdC60LAg0L7QsdC90L7QstC70LXQvdC40LXRgtC10LrRgdGC0LDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC+0YDQuNC10L3RgtCw0YbQuNGP0LTQtdC90LTRgNC+0LPRgNCw0LzQvNGLINC+0YDQuNC10L3RgtCw0YbQuNGP0LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgNC40LXQvdGC0LDRhtC40Y/QvNC10YLQvtC60LTQuNCw0LPRgNCw0LzQvNGLINC+0YDQuNC10L3RgtCw0YbQuNGP0LzQtdGC0L7QutGB0LLQvtC00L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLINC+0YDQuNC10L3RgtCw0YbQuNGP0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdCy0LTQuNCw0LPRgNCw0LzQvNC1ICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdCy0LvQtdCz0LXQvdC00LXQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdCz0YDRg9C/0L/Ri9C60L3QvtC/0L7QuiDQvtGC0L7QsdGA0LDQttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9C+0YLQvtCx0YDQsNC20LXQvdC40LXQt9C90LDRh9C10L3QuNC50YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC30L3QsNGH0LXQvdC40Y/QuNC30LzQtdGA0LjRgtC10LvRjNC90L7QudC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9C+0YLQvtCx0YDQsNC20LXQvdC40LXQuNC90YLQtdGA0LLQsNC70LDQtNC40LDQs9GA0LDQvNC80YvQs9Cw0L3RgtCwINC+0YLQvtCx0YDQsNC20LXQvdC40LXQutC90L7Qv9C60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC60L3QvtC/0LrQuNCy0YvQsdC+0YDQsCDQvtGC0L7QsdGA0LDQttC10L3QuNC10L7QsdGB0YPQttC00LXQvdC40LnRhNC+0YDQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC+0LHRi9GH0L3QvtC50LPRgNGD0L/Qv9GLINC+0YLQvtCx0YDQsNC20LXQvdC40LXQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvRhdC30L3QsNGH0LXQvdC40LnQv9GD0LfRi9GA0YzQutC+0LLQvtC50LTQuNCw0LPRgNCw0LzQvNGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXQv9Cw0L3QtdC70LjQv9C+0LjRgdC60LAgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10L/QvtC00YHQutCw0LfQutC4INC+0YLQvtCx0YDQsNC20LXQvdC40LXQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGP0L/RgNC40YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQuCDQvtGC0L7QsdGA0LDQttC10L3QuNC10YDQsNC30LzQtdGC0LrQuNC/0L7Qu9C+0YHRi9GA0LXQs9GD0LvQuNGA0L7QstCw0L3QuNGPICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGB0YLRgNCw0L3QuNGG0YTQvtGA0LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YLQsNCx0LvQuNGG0Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGC0LXQutGB0YLQsNC30L3QsNGH0LXQvdC40Y/QtNC40LDQs9GA0LDQvNC80YvQs9Cw0L3RgtCwICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGD0L/RgNCw0LLQu9C10L3QuNGP0L7QsdGL0YfQvdC+0LnQs9GA0YPQv9C/0Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGE0LjQs9GD0YDRi9C60L3QvtC/0LrQuCDQv9Cw0LvQuNGC0YDQsNGG0LLQtdGC0L7QstC00LjQsNCz0YDQsNC80LzRiyDQv9C+0LLQtdC00LXQvdC40LXQvtCx0YvRh9C90L7QudCz0YDRg9C/0L/RiyAnICtcbiAgJ9C/0L7QtNC00LXRgNC20LrQsNC80LDRgdGI0YLQsNCx0LDQtNC10L3QtNGA0L7Qs9GA0LDQvNC80Ysg0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNGB0LLQvtC00L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L/QvtC40YHQutCy0YLQsNCx0LvQuNGG0LXQv9GA0LjQstCy0L7QtNC1INC/0L7Qu9C+0LbQtdC90LjQtdC30LDQs9C+0LvQvtCy0LrQsNGN0LvQtdC80LXQvdGC0LDRhNC+0YDQvNGLINC/0L7Qu9C+0LbQtdC90LjQtdC60LDRgNGC0LjQvdC60LjQutC90L7Qv9C60LjRhNC+0YDQvNGLICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10LrQsNGA0YLQuNC90LrQuNGN0LvQtdC80LXQvdGC0LDQs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDQv9C+0LvQvtC20LXQvdC40LXQutC+0LzQsNC90LTQvdC+0LnQv9Cw0L3QtdC70LjRhNC+0YDQvNGLINC/0L7Qu9C+0LbQtdC90LjQtdC60L7QvNCw0L3QtNC90L7QudC/0LDQvdC10LvQuNGN0LvQtdC80LXQvdGC0LDRhNC+0YDQvNGLICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10L7Qv9C+0YDQvdC+0LnRgtC+0YfQutC40L7RgtGA0LjRgdC+0LLQutC4INC/0L7Qu9C+0LbQtdC90LjQtdC/0L7QtNC/0LjRgdC10LnQutC00LjQsNCz0YDQsNC80LzQtSDQv9C+0LvQvtC20LXQvdC40LXQv9C+0LTQv9C40YHQtdC50YjQutCw0LvRi9C30L3QsNGH0LXQvdC40LnQuNC30LzQtdGA0LjRgtC10LvRjNC90L7QudC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9C/0L7Qu9C+0LbQtdC90LjQtdGB0L7RgdGC0L7Rj9C90LjRj9C/0YDQvtGB0LzQvtGC0YDQsCDQv9C+0LvQvtC20LXQvdC40LXRgdGC0YDQvtC60LjQv9C+0LjRgdC60LAg0L/QvtC70L7QttC10L3QuNC10YLQtdC60YHRgtCw0YHQvtC10LTQuNC90LjRgtC10LvRjNC90L7QudC70LjQvdC40Lgg0L/QvtC70L7QttC10L3QuNC10YPQv9GA0LDQstC70LXQvdC40Y/Qv9C+0LjRgdC60L7QvCAnICtcbiAgJ9C/0L7Qu9C+0LbQtdC90LjQtdGI0LrQsNC70YvQstGA0LXQvNC10L3QuCDQv9C+0YDRj9C00L7QutC+0YLQvtCx0YDQsNC20LXQvdC40Y/RgtC+0YfQtdC60LPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90L7QudCz0LjRgdGC0L7Qs9GA0LDQvNC80Ysg0L/QvtGA0Y/QtNC+0LrRgdC10YDQuNC50LLQu9C10LPQtdC90LTQtdC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GA0LDQt9C80LXRgNC60LDRgNGC0LjQvdC60Lgg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyDRgNCw0YHRgtGP0LPQuNCy0LDQvdC40LXQv9C+0LLQtdGA0YLQuNC60LDQu9C40LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCAnICtcbiAgJ9GA0LXQttC40LzQsNCy0YLQvtC+0YLQvtCx0YDQsNC20LXQvdC40Y/RgdC+0YHRgtC+0Y/QvdC40Y8g0YDQtdC20LjQvNCy0LLQvtC00LDRgdGC0YDQvtC60YLQsNCx0LvQuNGG0Ysg0YDQtdC20LjQvNCy0YvQsdC+0YDQsNC90LXQt9Cw0L/QvtC70L3QtdC90L3QvtCz0L4g0YDQtdC20LjQvNCy0YvQtNC10LvQtdC90LjRj9C00LDRgtGLICcgK1xuICAn0YDQtdC20LjQvNCy0YvQtNC10LvQtdC90LjRj9GB0YLRgNC+0LrQuNGC0LDQsdC70LjRhtGLINGA0LXQttC40LzQstGL0LTQtdC70LXQvdC40Y/RgtCw0LHQu9C40YbRiyDRgNC10LbQuNC80LjQt9C80LXQvdC10L3QuNGP0YDQsNC30LzQtdGA0LAg0YDQtdC20LjQvNC40LfQvNC10L3QtdC90LjRj9GB0LLRj9C30LDQvdC90L7Qs9C+0LfQvdCw0YfQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C00LjQsNC70L7Qs9Cw0L/QtdGH0LDRgtC4INGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C/0LDRgNCw0LzQtdGC0YDQsNC60L7QvNCw0L3QtNGLINGA0LXQttC40LzQvNCw0YHRiNGC0LDQsdC40YDQvtCy0LDQvdC40Y/Qv9GA0L7RgdC80L7RgtGA0LAgJyArXG4gICfRgNC10LbQuNC80L7RgdC90L7QstC90L7Qs9C+0L7QutC90LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YDQtdC20LjQvNC+0YLQutGA0YvRgtC40Y/QvtC60L3QsNGE0L7RgNC80Ysg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/QstGL0LTQtdC70LXQvdC40Y8gJyArXG4gICfRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0LfQvdCw0YfQtdC90LjQudGB0LXRgNC40Lgg0YDQtdC20LjQvNC+0YLRgNC40YHQvtCy0LrQuNGB0LXRgtC60LjQs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyAnICtcbiAgJ9GA0LXQttC40LzQv9C+0LvRg9C/0YDQvtC30YDQsNGH0L3QvtGB0YLQuNC00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80L/RgNC+0LHQtdC70L7QstC00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80YDQsNC30LzQtdGJ0LXQvdC40Y/QvdCw0YHRgtGA0LDQvdC40YbQtSDRgNC10LbQuNC80YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRj9C60L7Qu9C+0L3QutC4ICcgK1xuICAn0YDQtdC20LjQvNGB0LPQu9Cw0LbQuNCy0LDQvdC40Y/QtNC40LDQs9GA0LDQvNC80Ysg0YDQtdC20LjQvNGB0LPQu9Cw0LbQuNCy0LDQvdC40Y/QuNC90LTQuNC60LDRgtC+0YDQsCDRgNC10LbQuNC80YHQv9C40YHQutCw0LfQsNC00LDRhyDRgdC60LLQvtC30L3QvtC10LLRi9GA0LDQstC90LjQstCw0L3QuNC1ICcgK1xuICAn0YHQvtGF0YDQsNC90LXQvdC40LXQtNCw0L3QvdGL0YXRhNC+0YDQvNGL0LLQvdCw0YHRgtGA0L7QudC60LDRhSDRgdC/0L7RgdC+0LHQt9Cw0L/QvtC70L3QtdC90LjRj9GC0LXQutGB0YLQsNC30LDQs9C+0LvQvtCy0LrQsNGI0LrQsNC70YvQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgdC/0L7RgdC+0LHQvtC/0YDQtdC00LXQu9C10L3QuNGP0L7Qs9GA0LDQvdC40YfQuNCy0LDRjtGJ0LXQs9C+0LfQvdCw0YfQtdC90LjRj9C00LjQsNCz0YDQsNC80LzRiyDRgdGC0LDQvdC00LDRgNGC0L3QsNGP0LPRgNGD0L/Qv9Cw0LrQvtC80LDQvdC0INGB0YLQsNC90LTQsNGA0YLQvdC+0LXQvtGE0L7RgNC80LvQtdC90LjQtSAnICtcbiAgJ9GB0YLQsNGC0YPRgdC+0L/QvtCy0LXRidC10L3QuNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGB0YLQuNC70YzRgdGC0YDQtdC70LrQuCDRgtC40L/QsNC/0L/RgNC+0LrRgdC40LzQsNGG0LjQuNC70LjQvdC40LjRgtGA0LXQvdC00LDQtNC40LDQs9GA0LDQvNC80Ysg0YLQuNC/0LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0LXQtNC40L3QuNGG0YvRiNC60LDQu9GL0LLRgNC10LzQtdC90Lgg0YLQuNC/0LjQvNC/0L7RgNGC0LDRgdC10YDQuNC50YHQu9C+0Y/Qs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/Qu9C40L3QuNC40LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0LvQuNC90LjQuNC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GC0LjQv9C80LDRgNC60LXRgNCw0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0LzQsNGA0LrQtdGA0LDQtNC40LDQs9GA0LDQvNC80Ysg0YLQuNC/0L7QsdC70LDRgdGC0LjQvtGE0L7RgNC80LvQtdC90LjRjyAnICtcbiAgJ9GC0LjQv9C+0YDQs9Cw0L3QuNC30LDRhtC40LjQuNGB0YLQvtGH0L3QuNC60LDQtNCw0L3QvdGL0YXQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/QvtGC0L7QsdGA0LDQttC10L3QuNGP0YHQtdGA0LjQuNGB0LvQvtGP0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80YsgJyArXG4gICfRgtC40L/QvtGC0L7QsdGA0LDQttC10L3QuNGP0YLQvtGH0LXRh9C90L7Qs9C+0L7QsdGK0LXQutGC0LDQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/QvtGC0L7QsdGA0LDQttC10L3QuNGP0YjQutCw0LvRi9GN0LvQtdC80LXQvdGC0LDQu9C10LPQtdC90LTRi9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLICcgK1xuICAn0YLQuNC/0L/QvtC40YHQutCw0L7QsdGK0LXQutGC0L7QstCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C/0YDQvtC10LrRhtC40LjQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9C40LfQvNC10YDQtdC90LjQuSAnICtcbiAgJ9GC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0YDQtdC60LLQuNC30LjRgtC+0LLQuNC30LzQtdGA0LXQvdC40Lkg0YLQuNC/0YDQsNC80LrQuNGN0LvQtdC80LXQvdGC0LDRg9C/0YDQsNCy0LvQtdC90LjRjyDRgtC40L/RgdCy0L7QtNC90L7QudC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GC0LjQv9GB0LLRj9C30LjQtNC40LDQs9GA0LDQvNC80YvQs9Cw0L3RgtCwINGC0LjQv9GB0L7QtdC00LjQvdC10L3QuNGP0LfQvdCw0YfQtdC90LjQudC/0L7RgdC10YDQuNGP0LzQtNC40LDQs9GA0LDQvNC80Ysg0YLQuNC/0YHQvtC10LTQuNC90LXQvdC40Y/RgtC+0YfQtdC60LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0YHQvtC10LTQuNC90LjRgtC10LvRjNC90L7QudC70LjQvdC40Lgg0YLQuNC/0YHRgtC+0YDQvtC90YvRjdC70LXQvNC10L3RgtCw0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0YTQvtGA0LzRi9C+0YLRh9C10YLQsCDRgtC40L/RiNC60LDQu9GL0YDQsNC00LDRgNC90L7QudC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GE0LDQutGC0L7RgNC70LjQvdC40LjRgtGA0LXQvdC00LDQtNC40LDQs9GA0LDQvNC80Ysg0YTQuNCz0YPRgNCw0LrQvdC+0L/QutC4INGE0LjQs9GD0YDRi9Cz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGE0LjQutGB0LDRhtC40Y/QstGC0LDQsdC70LjRhtC1INGE0L7RgNC80LDRgtC00L3Rj9GI0LrQsNC70YvQstGA0LXQvNC10L3QuCAnICtcbiAgJ9GE0L7RgNC80LDRgtC60LDRgNGC0LjQvdC60Lgg0YjQuNGA0LjQvdCw0L/QvtC00YfQuNC90LXQvdC90YvRhdGN0LvQtdC80LXQvdGC0L7QstGE0L7RgNC80YsgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0YHQstC+0LnRgdGC0LLQsCDQv9GA0LjQutC70LDQtNC90YvRhSDQvtCx0YrQtdC60YLQvtCyID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX29iamVjdHNfcHJvcGVydGllcyA9XG4gICfQstC40LTQtNCy0LjQttC10L3QuNGP0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDQstC40LTQtNCy0LjQttC10L3QuNGP0L3QsNC60L7Qv9C70LXQvdC40Y8g0LLQuNC00L/QtdGA0LjQvtC00LDRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0LLQuNC00YHRh9C10YLQsCDQstC40LTRgtC+0YfQutC40LzQsNGA0YjRgNGD0YLQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAgJyArXG4gICfQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCw0LPRgNC10LPQsNGC0LDRgNC10LPQuNGB0YLRgNCw0L3QsNC60L7Qv9C70LXQvdC40Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQs9GA0YPQv9C/0LjRjdC70LXQvNC10L3RgtC+0LIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgNC10LbQuNC80LDQv9GA0L7QstC10LTQtdC90LjRjyAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YHRgNC10LfQsCDQv9C10YDQuNC+0LTQuNGH0L3QvtGB0YLRjNCw0LPRgNC10LPQsNGC0LDRgNC10LPQuNGB0YLRgNCw0L3QsNC60L7Qv9C70LXQvdC40Y8g0YDQtdC20LjQvNCw0LLRgtC+0LLRgNC10LzRjyDRgNC10LbQuNC80LfQsNC/0LjRgdC40LTQvtC60YPQvNC10L3RgtCwINGA0LXQttC40LzQv9GA0L7QstC10LTQtdC90LjRj9C00L7QutGD0LzQtdC90YLQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQv9C70LDQvdGLINC+0LHQvNC10L3QsCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19leGNoYW5nZV9wbGFucyA9XG4gICfQsNCy0YLQvtGA0LXQs9C40YHRgtGA0LDRhtC40Y/QuNC30LzQtdC90LXQvdC40Lkg0LTQvtC/0YPRgdGC0LjQvNGL0LnQvdC+0LzQtdGA0YHQvtC+0LHRidC10L3QuNGPINC+0YLQv9GA0LDQstC60LDRjdC70LXQvNC10L3RgtCw0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQtdC90LjQtdGN0LvQtdC80LXQvdGC0LDQtNCw0L3QvdGL0YUgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0YLQsNCx0LvQuNGH0L3Ri9C5INC00L7QutGD0LzQtdC90YIgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfdGFidWxhcl9kb2N1bWVudCA9XG4gICfQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LDRgdGI0LjRhNGA0L7QstC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDQvtGA0LjQtdC90YLQsNGG0LjRj9GB0YLRgNCw0L3QuNGG0Ysg0L/QvtC70L7QttC10L3QuNC10LjRgtC+0LPQvtCy0LrQvtC70L7QvdC+0LrRgdCy0L7QtNC90L7QudGC0LDQsdC70LjRhtGLICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10LjRgtC+0LPQvtCy0YHRgtGA0L7QutGB0LLQvtC00L3QvtC50YLQsNCx0LvQuNGG0Ysg0L/QvtC70L7QttC10L3QuNC10YLQtdC60YHRgtCw0L7RgtC90L7RgdC40YLQtdC70YzQvdC+0LrQsNGA0YLQuNC90LrQuCDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDQs9GA0YPQv9C/0LjRgNC+0LLQutC40YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJyArXG4gICfRgdC/0L7RgdC+0LHRh9GC0LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0LTQstGD0YHRgtC+0YDQvtC90L3QtdC50L/QtdGH0LDRgtC4INGC0LjQv9C30LDQv9C+0LvQvdC10L3QuNGP0L7QsdC70LDRgdGC0LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GC0LjQv9C60YPRgNGB0L7RgNC+0LLRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/Qu9C40L3QuNC40YDQuNGB0YPQvdC60LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/Qu9C40L3QuNC40Y/Rh9C10LnQutC40YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJyArXG4gICfRgtC40L/QvdCw0L/RgNCw0LLQu9C10L3QuNGP0L/QtdGA0LXRhdC+0LTQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/QstGL0LTQtdC70LXQvdC40Y/RgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QvtGC0L7QsdGA0LDQttC10L3QuNGP0LvQuNC90LjQudGB0LLQvtC00L3QvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9GC0LXQutGB0YLQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9GA0LjRgdGD0L3QutCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YHQvNC10YnQtdC90LjRj9GC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwICcgK1xuICAn0YLQuNC/0YPQt9C+0YDQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9GE0LDQudC70LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC+0YfQvdC+0YHRgtGM0L/QtdGH0LDRgtC4INGH0LXRgNC10LTQvtCy0LDQvdC40LXRgNCw0YHQv9C+0LvQvtC20LXQvdC40Y/RgdGC0YDQsNC90LjRhiAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQv9C70LDQvdC40YDQvtCy0YnQuNC6ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3NoZWR1bGVyID1cbiAgJ9C+0YLQvtCx0YDQsNC20LXQvdC40LXQstGA0LXQvNC10L3QuNGN0LvQtdC80LXQvdGC0L7QstC/0LvQsNC90LjRgNC+0LLRidC40LrQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0Lkg0LTQvtC60YPQvNC10L3RgiA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19mb3JtYXR0ZWRfZG9jdW1lbnQgPVxuICAn0YLQuNC/0YTQsNC50LvQsNGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC30LDQv9GA0L7RgSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19xdWVyeSA9XG4gICfQvtCx0YXQvtC00YDQtdC30YPQu9GM0YLQsNGC0LDQt9Cw0L/RgNC+0YHQsCDRgtC40L/Qt9Cw0L/QuNGB0LjQt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQv9C+0YHRgtGA0L7QuNGC0LXQu9GMINC+0YLRh9C10YLQsCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19yZXBvcnRfYnVpbGRlciA9XG4gICfQstC40LTQt9Cw0L/QvtC70L3QtdC90LjRj9GA0LDRgdGI0LjRhNGA0L7QstC60LjQv9C+0YHRgtGA0L7QuNGC0LXQu9GP0L7RgtGH0LXRgtCwINGC0LjQv9C00L7QsdCw0LLQu9C10L3QuNGP0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Lkg0YLQuNC/0LjQt9C80LXRgNC10L3QuNGP0L/QvtGB0YLRgNC+0LjRgtC10LvRj9C+0YLRh9C10YLQsCDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9C40YLQvtCz0L7QsiAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgNCw0LHQvtGC0LAg0YEg0YTQsNC50LvQsNC80LggPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfZmlsZXMgPVxuICAn0LTQvtGB0YLRg9C/0LrRhNCw0LnQu9GDINGA0LXQttC40LzQtNC40LDQu9C+0LPQsNCy0YvQsdC+0YDQsNGE0LDQudC70LAg0YDQtdC20LjQvNC+0YLQutGA0YvRgtC40Y/RhNCw0LnQu9CwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7RgdGC0YDQvtC40YLQtdC70Ywg0LfQsNC/0YDQvtGB0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcXVlcnlfYnVpbGRlciA9XG4gICfRgtC40L/QuNC30LzQtdGA0LXQvdC40Y/Qv9C+0YHRgtGA0L7QuNGC0LXQu9GP0LfQsNC/0YDQvtGB0LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LDQvdCw0LvQuNC3INC00LDQvdC90YvRhSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19kYXRhX2FuYWx5c2lzID1cbiAgJ9Cy0LjQtNC00LDQvdC90YvRhdCw0L3QsNC70LjQt9CwINC80LXRgtC+0LTQutC70LDRgdGC0LXRgNC40LfQsNGG0LjQuCDRgtC40L/QtdC00LjQvdC40YbRi9C40L3RgtC10YDQstCw0LvQsNCy0YDQtdC80LXQvdC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0LfQsNC/0L7Qu9C90LXQvdC40Y/RgtCw0LHQu9C40YbRi9GA0LXQt9GD0LvRjNGC0LDRgtCw0LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfRgtC40L/QuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GH0LjRgdC70L7QstGL0YXQt9C90LDRh9C10L3QuNC50LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GF0L/QvtC40YHQutCw0LDRgdGB0L7RhtC40LDRhtC40Lkg0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC00LXRgNC10LLQvtGA0LXRiNC10L3QuNC5ICcgK1xuICAn0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC60LvQsNGB0YLQtdGA0LjQt9Cw0YbQuNGPINGC0LjQv9C60L7Qu9C+0L3QutC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YXQvtCx0YnQsNGP0YHRgtCw0YLQuNGB0YLQuNC60LAg0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC/0L7QuNGB0LrQsNGB0YHQvtGG0LjQsNGG0LjQuSAnICtcbiAgJ9GC0LjQv9C60L7Qu9C+0L3QutC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YXQv9C+0LjRgdC60L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC10Lkg0YLQuNC/0LrQvtC70L7QvdC60LjQvNC+0LTQtdC70LjQv9GA0L7Qs9C90L7Qt9CwINGC0LjQv9C80LXRgNGL0YDQsNGB0YHRgtC+0Y/QvdC40Y/QsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C+0YLRgdC10YfQtdC90LjRj9C/0YDQsNCy0LjQu9Cw0YHRgdC+0YbQuNCw0YbQuNC4INGC0LjQv9C/0L7Qu9GP0LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YHRgtCw0L3QtNCw0YDRgtC40LfQsNGG0LjQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFINGC0LjQv9GD0L/QvtGA0Y/QtNC+0YfQuNCy0LDQvdC40Y/Qv9GA0LDQstC40LvQsNGB0YHQvtGG0LjQsNGG0LjQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0YPQv9C+0YDRj9C00L7Rh9C40LLQsNC90LjRj9GI0LDQsdC70L7QvdC+0LLQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LXQudCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFINGC0LjQv9GD0L/RgNC+0YnQtdC90LjRj9C00LXRgNC10LLQsNGA0LXRiNC10L3QuNC5ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIHhtbCwganNvbiwgeHMsIGRvbSwgeGR0bywgd2ViLdGB0LXRgNCy0LjRgdGLID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3htbF9qc29uX3hzX2RvbV94ZHRvX3dzID1cbiAgJ3dz0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC/0LDRgNCw0LzQtdGC0YDQsCDQstCw0YDQuNCw0L3RgnhwYXRoeHMg0LLQsNGA0LjQsNC90YLQt9Cw0L/QuNGB0LjQtNCw0YLRi2pzb24g0LLQsNGA0LjQsNC90YLQv9GA0L7RgdGC0L7Qs9C+0YLQuNC/0LB4cyDQstC40LTQs9GA0YPQv9C/0YvQvNC+0LTQtdC70Lh4cyDQstC40LTRhNCw0YHQtdGC0LB4ZHRvICcgK1xuICAn0LTQtdC50YHRgtCy0LjQtdC/0L7RgdGC0YDQvtC40YLQtdC70Y9kb20g0LfQsNCy0LXRgNGI0LXQvdC90L7RgdGC0YzQv9GA0L7RgdGC0L7Qs9C+0YLQuNC/0LB4cyDQt9Cw0LLQtdGA0YjQtdC90L3QvtGB0YLRjNGB0L7RgdGC0LDQstC90L7Qs9C+0YLQuNC/0LB4cyDQt9Cw0LLQtdGA0YjQtdC90L3QvtGB0YLRjNGB0YXQtdC80Yt4cyDQt9Cw0L/RgNC10YnQtdC90L3Ri9C10L/QvtC00YHRgtCw0L3QvtCy0LrQuHhzICcgK1xuICAn0LjRgdC60LvRjtGH0LXQvdC40Y/Qs9GA0YPQv9C/0L/QvtC00YHRgtCw0L3QvtCy0LrQuHhzINC60LDRgtC10LPQvtGA0LjRj9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LDRgtGA0LjQsdGD0YLQsHhzINC60LDRgtC10LPQvtGA0LjRj9C+0LPRgNCw0L3QuNGH0LXQvdC40Y/QuNC00LXQvdGC0LjRh9C90L7RgdGC0Lh4cyDQutCw0YLQtdCz0L7RgNC40Y/QvtCz0YDQsNC90LjRh9C10L3QuNGP0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC40LzQtdC9eHMgJyArXG4gICfQvNC10YLQvtC00L3QsNGB0LvQtdC00L7QstCw0L3QuNGPeHMg0LzQvtC00LXQu9GM0YHQvtC00LXRgNC20LjQvNC+0LPQvnhzINC90LDQt9C90LDRh9C10L3QuNC10YLQuNC/0LB4bWwg0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C10L/QvtC00YHRgtCw0L3QvtCy0LrQuHhzINC+0LHRgNCw0LHQvtGC0LrQsNC/0YDQvtCx0LXQu9GM0L3Ri9GF0YHQuNC80LLQvtC70L7QsnhzINC+0LHRgNCw0LHQvtGC0LrQsNGB0L7QtNC10YDQttC40LzQvtCz0L54cyAnICtcbiAgJ9C+0LPRgNCw0L3QuNGH0LXQvdC40LXQt9C90LDRh9C10L3QuNGPeHMg0L/QsNGA0LDQvNC10YLRgNGL0L7RgtCx0L7RgNCw0YPQt9C70L7QsmRvbSDQv9C10YDQtdC90L7RgdGB0YLRgNC+0Lpqc29uINC/0L7Qt9C40YbQuNGP0LLQtNC+0LrRg9C80LXQvdGC0LVkb20g0L/RgNC+0LHQtdC70YzQvdGL0LXRgdC40LzQstC+0LvRi3htbCDRgtC40L/QsNGC0YDQuNCx0YPRgtCweG1sINGC0LjQv9C30L3QsNGH0LXQvdC40Y9qc29uICcgK1xuICAn0YLQuNC/0LrQsNC90L7QvdC40YfQtdGB0LrQvtCz0L54bWwg0YLQuNC/0LrQvtC80L/QvtC90LXQvdGC0Yt4cyDRgtC40L/Qv9GA0L7QstC10YDQutC4eG1sINGC0LjQv9GA0LXQt9GD0LvRjNGC0LDRgtCwZG9teHBhdGgg0YLQuNC/0YPQt9C70LBkb20g0YLQuNC/0YPQt9C70LB4bWwg0YTQvtGA0LzQsHhtbCDRhNC+0YDQvNCw0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y94cyAnICtcbiAgJ9GE0L7RgNC80LDRgtC00LDRgtGLanNvbiDRjdC60YDQsNC90LjRgNC+0LLQsNC90LjQtdGB0LjQvNCy0L7Qu9C+0LJqc29uICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGB0LjRgdGC0LXQvNCwINC60L7QvNC/0L7QvdC+0LLQutC4INC00LDQvdC90YvRhSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19kYXRhX2NvbXBvc2l0aW9uX3N5c3RlbSA9XG4gICfQstC40LTRgdGA0LDQstC90LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQtNC10LnRgdGC0LLQuNC10L7QsdGA0LDQsdC+0YLQutC40YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC90LDQv9GA0LDQstC70LXQvdC40LXRgdC+0YDRgtC40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LLQu9C+0LbQtdC90L3Ri9GF0Y3Qu9C10LzQtdC90YLQvtCy0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQv9C+0LvQtdC50LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC/0L7Qu9GP0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdC60LLQuNC30LjRgtC+0LLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdGA0LXRgdGD0YDRgdC+0LLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QsdGD0YXQs9Cw0LvRgtC10YDRgdC60L7Qs9C+0L7RgdGC0LDRgtC60LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QstGL0LLQvtC00LDRgtC10LrRgdGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9Cz0YDRg9C/0L/QuNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/Qs9GA0YPQv9C/0YvRjdC70LXQvNC10L3RgtC+0LLQvtGC0LHQvtGA0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QtNC+0L/QvtC70L3QtdC90LjRj9C/0LXRgNC40L7QtNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgtC40L/Qt9Cw0LPQvtC70L7QstC60LDQv9C+0LvQtdC50LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LzQsNC60LXRgtCw0LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C80LDQutC10YLQsNC+0LHQu9Cw0YHRgtC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0L7RgdGC0LDRgtC60LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C/0LXRgNC40L7QtNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0YDQsNC30LzQtdGJ0LXQvdC40Y/RgtC10LrRgdGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RgdCy0Y/Qt9C40L3QsNCx0L7RgNC+0LLQtNCw0L3QvdGL0YXQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RjdC70LXQvNC10L3RgtCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC70LXQs9C10L3QtNGL0LTQuNCw0LPRgNCw0LzQvNGL0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0L/RgNC40LzQtdC90LXQvdC40Y/QvtGC0LHQvtGA0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRj9GN0LvQtdC80LXQvdGC0LDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0L3QsNGB0YLRgNC+0LXQutC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGB0L7RgdGC0L7Rj9C90LjQtdGN0LvQtdC80LXQvdGC0LDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgdC/0L7RgdC+0LHQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGP0L3QsNGB0YLRgNC+0LXQutC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQtdC20LjQvNC60L7QvNC/0L7QvdC+0LLQutC40YDQtdC30YPQu9GM0YLQsNGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9Cw0YDQsNC80LXRgtGA0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQsNCy0YLQvtC/0L7Qt9C40YbQuNGP0YDQtdGB0YPRgNGB0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcrXG4gICfQstCw0YDQuNCw0L3RgtC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdGA0LXRgdGD0YDRgdC+0LLQstC00LjQsNCz0YDQsNC80LzQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGE0LjQutGB0LDRhtC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YPRgdC70L7QstC90L7Qs9C+0L7RhNC+0YDQvNC70LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQv9C+0YfRgtCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2VtYWlsID1cbiAgJ9Cy0LDQttC90L7RgdGC0YzQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINC+0LHRgNCw0LHQvtGC0LrQsNGC0LXQutGB0YLQsNC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0YHQv9C+0YHQvtCx0LrQvtC00LjRgNC+0LLQsNC90LjRj9C40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7QstC70L7QttC10L3QuNGPICcgK1xuICAn0YHQv9C+0YHQvtCx0LrQvtC00LjRgNC+0LLQsNC90LjRj9C90LVhc2NpadGB0LjQvNCy0L7Qu9C+0LLQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINGC0LjQv9GC0LXQutGB0YLQsNC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyDQv9GA0L7RgtC+0LrQvtC70LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0YsgJyArXG4gICfRgdGC0LDRgtGD0YHRgNCw0LfQsdC+0YDQsNC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQttGD0YDQvdCw0Lsg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19sb2dib29rID1cbiAgJ9GA0LXQttC40LzRgtGA0LDQvdC30LDQutGG0LjQuNC30LDQv9C40YHQuNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRgdGC0LDRgtGD0YHRgtGA0LDQvdC30LDQutGG0LjQuNC30LDQv9C40YHQuNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRg9GA0L7QstC10L3RjNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQutGA0LjQv9GC0L7Qs9GA0LDRhNC40Y8gPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfY3J5cHRvZ3JhcGh5ID1cbiAgJ9GA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdGF0YDQsNC90LjQu9C40YnQsNGB0LXRgNGC0LjRhNC40LrQsNGC0L7QstC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDRgNC10LbQuNC80LLQutC70Y7Rh9C10L3QuNGP0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGA0LXQttC40LzQv9GA0L7QstC10YDQutC40YHQtdGA0YLQuNGE0LjQutCw0YLQsNC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCAnICtcbiAgJ9GC0LjQv9GF0YDQsNC90LjQu9C40YnQsNGB0LXRgNGC0LjRhNC40LrQsNGC0L7QstC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSBaSVAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfemlwID1cbiAgJ9C60L7QtNC40YDQvtCy0LrQsNC40LzQtdC90YTQsNC50LvQvtCy0LJ6aXDRhNCw0LnQu9C1INC80LXRgtC+0LTRgdC20LDRgtC40Y96aXAg0LzQtdGC0L7QtNGI0LjRhNGA0L7QstCw0L3QuNGPemlwINGA0LXQttC40LzQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGP0L/Rg9GC0LXQudGE0LDQudC70L7QsnppcCDRgNC10LbQuNC80L7QsdGA0LDQsdC+0YLQutC40L/QvtC00LrQsNGC0LDQu9C+0LPQvtCyemlwICcgK1xuICAn0YDQtdC20LjQvNGB0L7RhdGA0LDQvdC10L3QuNGP0L/Rg9GC0LXQuXppcCDRg9GA0L7QstC10L3RjNGB0LbQsNGC0LjRj3ppcCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLVxuICAvLyDQkdC70L7QutC40YDQvtCy0LrQsCDQtNCw0L3QvdGL0YUsINCk0L7QvdC+0LLRi9C1INC30LDQtNCw0L3QuNGPLCDQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdC+0LUg0YLQtdGB0YLQuNGA0L7QstCw0L3QuNC1LFxuICAvLyDQlNC+0YHRgtCw0LLQu9GP0LXQvNGL0LUg0YPQstC10LTQvtC80LvQtdC90LjRjywg0JLRgdGC0YDQvtC10L3QvdGL0LUg0L/QvtC60YPQv9C60LgsINCY0L3RgtC10YDQvdC10YIsINCg0LDQsdC+0YLQsCDRgSDQtNCy0L7QuNGH0L3Ri9C80Lgg0LTQsNC90L3Ri9C80LggPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb3RoZXIgPVxuICAn0LfQstGD0LrQvtCy0L7QtdC+0L/QvtCy0LXRidC10L3QuNC1INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdGF0L7QtNCw0LrRgdGC0YDQvtC60LUg0L/QvtC30LjRhtC40Y/QstC/0L7RgtC+0LrQtSDQv9C+0YDRj9C00L7QutCx0LDQudGC0L7QsiDRgNC10LbQuNC80LHQu9C+0LrQuNGA0L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhSAnICtcbiAgJ9GB0LXRgNCy0LjRgdCy0YHRgtGA0L7QtdC90L3Ri9GF0L/QvtC60YPQv9C+0Log0YHQvtGB0YLQvtGP0L3QuNC10YTQvtC90L7QstC+0LPQvtC30LDQtNCw0L3QuNGPINGC0LjQv9C/0L7QtNC/0LjRgdGH0LjQutCw0LTQvtGB0YLQsNCy0LvRj9C10LzRi9GF0YPQstC10LTQvtC80LvQtdC90LjQuSDRg9GA0L7QstC10L3RjNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LfQsNGJ0LjRidC10L3QvdC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPZnRwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGB0YXQtdC80LAg0LfQsNC/0YDQvtGB0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcmVxdWVzdF9zY2hlbWEgPVxuICAn0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC/0L7RgNGP0LTQutCw0YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQvNC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C60L7QvdGC0YDQvtC70YzQvdC+0LnRgtC+0YfQutC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C+0LHRitC10LTQuNC90LXQvdC40Y/RgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAgJyArXG4gICfRgtC40L/Qv9Cw0YDQsNC80LXRgtGA0LDQtNC+0YHRgtGD0L/QvdC+0LnRgtCw0LHQu9C40YbRi9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC+0LHRitC10LrRgtC+0LIg0LzQtdGC0LDQtNCw0L3QvdGL0YUgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcHJvcGVydGllc19vZl9tZXRhZGF0YV9vYmplY3RzID1cbiAgJ2h0dHDQvNC10YLQvtC0INCw0LLRgtC+0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LDQstGC0L7Qv9GA0LXRhNC40LrRgdC90L7QvNC10YDQsNC30LDQtNCw0YfQuCDQstCw0YDQuNCw0L3RgtCy0YHRgtGA0L7QtdC90L3QvtCz0L7Rj9C30YvQutCwINCy0LjQtNC40LXRgNCw0YDRhdC40Lgg0LLQuNC00YDQtdCz0LjRgdGC0YDQsNC90LDQutC+0L/Qu9C10L3QuNGPICcgK1xuICAn0LLQuNC00YLQsNCx0LvQuNGG0YvQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINC30LDQv9C40YHRjNC00LLQuNC20LXQvdC40LnQv9GA0LjQv9GA0L7QstC10LTQtdC90LjQuCDQt9Cw0L/QvtC70L3QtdC90LjQtdC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC5INC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40LUgJyArXG4gICfQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0LDQt9GL0L/Qu9Cw0L3QsNCy0LjQtNC+0LLRgNCw0YHRh9C10YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0YvRgdGC0YDQvtCz0L7QstGL0LHQvtGA0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LTRh9C40L3QtdC90LjRjyAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0L7Qs9C+0L/QvtC40YHQutCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNC30LTQtdC70Y/QtdC80YvRhdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQutCy0LjQt9C40YLQsCAnICtcbiAgJ9C90LDQt9C90LDRh9C10L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0LfQvdCw0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdC00LDRh9C4INC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0YXQtNCw0L3QvdGL0YUgJyArXG4gICfQvtC/0LXRgNCw0YLQuNCy0L3QvtC10L/RgNC+0LLQtdC00LXQvdC40LUg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LLQuNC00LDRgNCw0YHRh9C10YLQsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQstC40LTQsNGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LfQsNC00LDRh9C4ICcgK1xuICAn0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/Qu9Cw0L3QsNC+0LHQvNC10L3QsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRgdC/0YDQsNCy0L7Rh9C90LjQutCwINC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdGB0YfQtdGC0LAg0L/QtdGA0LXQvNC10YnQtdC90LjQtdCz0YDQsNC90LjRhtGL0L/RgNC40L/RgNC+0LLQtdC00LXQvdC40LggJyArXG4gICfQv9C10YDQuNC+0LTQuNGH0L3QvtGB0YLRjNC90L7QvNC10YDQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzQvdC+0LzQtdGA0LDQtNC+0LrRg9C80LXQvdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YHQstC10LTQtdC90LjQuSAnICtcbiAgJ9C/0L7QstGC0L7RgNC90L7QtdC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LLQvtC30LLRgNCw0YnQsNC10LzRi9GF0LfQvdCw0YfQtdC90LjQuSDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQutC/0YDQuNCy0LLQvtC00LXQv9C+0YHRgtGA0L7QutC1INC/0YDQuNC90LDQtNC70LXQttC90L7RgdGC0YzQvtCx0YrQtdC60YLQsCDQv9GA0L7QstC10LTQtdC90LjQtSAnICtcbiAgJ9GA0LDQt9C00LXQu9C10L3QuNC10LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuNC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwICcrXG4gICfRgNC10LbQuNC80LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40LjQvtCx0YrQtdC60YLQvtCyINGA0LXQttC40LzQt9Cw0L/QuNGB0LjRgNC10LPQuNGB0YLRgNCwINGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C80L7QtNCw0LvRjNC90L7RgdGC0LggJyArXG4gICfRgNC10LbQuNC80LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC40L3RhdGA0L7QvdC90YvRhdCy0YvQt9C+0LLQvtCy0YDQsNGB0YjQuNGA0LXQvdC40LnQv9C70LDRgtGE0L7RgNC80YvQuNCy0L3QtdGI0L3QuNGF0LrQvtC80L/QvtC90LXQvdGCINGA0LXQttC40LzQv9C+0LLRgtC+0YDQvdC+0LPQvtC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YHQtdCw0L3RgdC+0LIgJyArXG4gICfRgNC10LbQuNC80L/QvtC70YPRh9C10L3QuNGP0LTQsNC90L3Ri9GF0LLRi9Cx0L7RgNCw0L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YDQtdC20LjQvNGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGA0LXQttC40LzRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuNC40L3RgtC10YDRhNC10LnRgdCwICcgK1xuICAn0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhdC/0L7Rg9C80L7Qu9GH0LDQvdC40Y4g0YHQtdGA0LjQuNC60L7QtNC+0LLQv9C70LDQvdCw0LLQuNC00L7QstGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6INGB0LXRgNC40LjQutC+0LTQvtCy0L/Qu9Cw0L3QsNGB0YfQtdGC0L7QsiAnICtcbiAgJ9GB0LXRgNC40LjQutC+0LTQvtCy0YHQv9GA0LDQstC+0YfQvdC40LrQsCDRgdC+0LfQtNCw0L3QuNC10L/RgNC40LLQstC+0LTQtSDRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LAg0YHQv9C+0YHQvtCx0L/QvtC40YHQutCw0YHRgtGA0L7QutC40L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YHQv9C+0YHQvtCx0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyAnICtcbiAgJ9GC0LjQv9C00LDQvdC90YvRhdGC0LDQsdC70LjRhtGL0LLQvdC10YjQvdC10LPQvtC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhSDRgtC40L/QutC+0LTQsNC/0LvQsNC90LDQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0YLQuNC/0LrQvtC00LDRgdC/0YDQsNCy0L7Rh9C90LjQutCwINGC0LjQv9C80LDQutC10YLQsCDRgtC40L/QvdC+0LzQtdGA0LDQsdC40LfQvdC10YHQv9GA0L7RhtC10YHRgdCwICcgK1xuICAn0YLQuNC/0L3QvtC80LXRgNCw0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C90L7QvNC10YDQsNC30LDQtNCw0YfQuCDRgtC40L/RhNC+0YDQvNGLINGD0LTQsNC70LXQvdC40LXQtNCy0LjQttC10L3QuNC5ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQt9C90YvQtSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19kaWZmZXJlbnRzID1cbiAgJ9Cy0LDQttC90L7RgdGC0YzQv9GA0L7QsdC70LXQvNGL0L/RgNC40LzQtdC90LXQvdC40Y/RgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQstCw0YDQuNCw0L3RgtC40L3RgtC10YDRhNC10LnRgdCw0LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINCy0LDRgNC40LDQvdGC0LzQsNGB0YjRgtCw0LHQsNGE0L7RgNC80LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPICcgK1xuICAn0LLQsNGA0LjQsNC90YLQvtGB0L3QvtCy0L3QvtCz0L7RiNGA0LjRhNGC0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0LLQsNGA0LjQsNC90YLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7Qv9C10YDQuNC+0LTQsCDQstCw0YDQuNCw0L3RgtGB0YLQsNC90LTQsNGA0YLQvdC+0LnQtNCw0YLRi9C90LDRh9Cw0LvQsCDQstC40LTQs9GA0LDQvdC40YbRiyDQstC40LTQutCw0YDRgtC40L3QutC4ICcgK1xuICAn0LLQuNC00L7RgtC+0LHRgNCw0LbQtdC90LjRj9C/0L7Qu9C90L7RgtC10LrRgdGC0L7QstC+0LPQvtC/0L7QuNGB0LrQsCDQstC40LTRgNCw0LzQutC4INCy0LjQtNGB0YDQsNCy0L3QtdC90LjRjyDQstC40LTRhtCy0LXRgtCwINCy0LjQtNGH0LjRgdC70L7QstC+0LPQvtC30L3QsNGH0LXQvdC40Y8g0LLQuNC00YjRgNC40YTRgtCwINC00L7Qv9GD0YHRgtC40LzQsNGP0LTQu9C40L3QsCDQtNC+0L/Rg9GB0YLQuNC80YvQudC30L3QsNC6ICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LVieXRlb3JkZXJtYXJrINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LzQtdGC0LDQtNCw0L3QvdGL0YXQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0LjRgdGC0L7Rh9C90LjQutGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC60LvQsNCy0LjRiNCwINC60L7QtNCy0L7Qt9Cy0YDQsNGC0LDQtNC40LDQu9C+0LPQsCAnICtcbiAgJ9C60L7QtNC40YDQvtCy0LrQsHhiYXNlINC60L7QtNC40YDQvtCy0LrQsNGC0LXQutGB0YLQsCDQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QvtC40YHQutCwINC90LDQv9GA0LDQstC70LXQvdC40LXRgdC+0YDRgtC40YDQvtCy0LrQuCDQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GFINC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC40LjQt9C80LXQvdC10L3QuNC40LTQsNC90L3Ri9GFICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNGA0LDQt9C00LXQu9C+0LIg0L/RgNC+0LLQtdGA0LrQsNC30LDQv9C+0LvQvdC10L3QuNGPINGA0LXQttC40LzQtNC40LDQu9C+0LPQsNCy0L7Qv9GA0L7RgSDRgNC10LbQuNC80LfQsNC/0YPRgdC60LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YDQtdC20LjQvNC+0LrRgNGD0LPQu9C10L3QuNGPINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0YTQvtGA0LzQv9GA0LjQu9C+0LbQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0YHQutC+0YDQvtGB0YLRjNC60LvQuNC10L3RgtGB0LrQvtCz0L7RgdC+0LXQtNC40L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40LXQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINGB0L7RgdGC0L7Rj9C90LjQtdC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LDRgdC10YDRgtC40YTQuNC60LDRgtCwd2luZG93cyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0YHRgtGA0L7QutC4INGB0YLQsNGC0YPRgdGB0L7QvtCx0YnQtdC90LjRjyDRgtC40L/QstC90LXRiNC90LXQudC60L7QvNC/0L7QvdC10L3RgtGLINGC0LjQv9C/0LvQsNGC0YTQvtGA0LzRiyDRgtC40L/Qv9C+0LLQtdC00LXQvdC40Y/QutC70LDQstC40YjQuGVudGVyICcgK1xuICAn0YLQuNC/0Y3Qu9C10LzQtdC90YLQsNC40L3RhNC+0YDQvNCw0YbQuNC40L7QstGL0L/QvtC70L3QtdC90LjQuNC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUg0YPRgNC+0LLQtdC90YzQuNC30L7Qu9GP0YbQuNC40YLRgNCw0L3Qt9Cw0LrRhtC40Lkg0YXQtdGI0YTRg9C90LrRhtC40Y8g0YfQsNGB0YLQuNC00LDRgtGLJztcblxuICAvLyBjbGFzczog0LLRgdGC0YDQvtC10L3QvdGL0LUg0L3QsNCx0L7RgNGLINC30L3QsNGH0LXQvdC40LksINGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gKNGB0L7QtNC10YDQttCw0YIg0LTQvtGH0LXRgNC90LjQtSDQt9C90LDRh9C10L3QuNGPLCDQvtCx0YDQsNGJ0LXQvdC40Y8g0Log0LrQvtGC0L7RgNGL0Lwg0YfQtdGA0LXQtyDRgNCw0LfRi9C80LXQvdC+0LLQsNC90LjQtSlcbiAgdmFyIENMQVNTID1cbiAgdjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzICtcbiAgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSArXG4gIHY4X3N5c3RlbV9lbnVtc19vYmplY3RzX3Byb3BlcnRpZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZXhjaGFuZ2VfcGxhbnMgK1xuICB2OF9zeXN0ZW1fZW51bXNfdGFidWxhcl9kb2N1bWVudCArXG4gIHY4X3N5c3RlbV9lbnVtc19zaGVkdWxlciArXG4gIHY4X3N5c3RlbV9lbnVtc19mb3JtYXR0ZWRfZG9jdW1lbnQgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnkgK1xuICB2OF9zeXN0ZW1fZW51bXNfcmVwb3J0X2J1aWxkZXIgK1xuICB2OF9zeXN0ZW1fZW51bXNfZmlsZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnlfYnVpbGRlciArXG4gIHY4X3N5c3RlbV9lbnVtc19kYXRhX2FuYWx5c2lzICtcbiAgdjhfc3lzdGVtX2VudW1zX3htbF9qc29uX3hzX2RvbV94ZHRvX3dzICtcbiAgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtICtcbiAgdjhfc3lzdGVtX2VudW1zX2VtYWlsICtcbiAgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgK1xuICB2OF9zeXN0ZW1fZW51bXNfY3J5cHRvZ3JhcGh5ICtcbiAgdjhfc3lzdGVtX2VudW1zX3ppcCArXG4gIHY4X3N5c3RlbV9lbnVtc19vdGhlciArXG4gIHY4X3N5c3RlbV9lbnVtc19yZXF1ZXN0X3NjaGVtYSArXG4gIHY4X3N5c3RlbV9lbnVtc19wcm9wZXJ0aWVzX29mX21ldGFkYXRhX29iamVjdHMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZGlmZmVyZW50cztcblxuICAvLyB2OCDQvtCx0YnQuNC1INC+0LHRitC10LrRgtGLICjRgyDQvtCx0YrQtdC60YLQvtCyINC10YHRgtGMINC60L7QvdGB0YLRgNGD0LrRgtC+0YAsINGN0LrQt9C10LzQv9C70Y/RgNGLINGB0L7Qt9C00LDRjtGC0YHRjyDQvNC10YLQvtC00L7QvCDQndCe0JLQq9CZKSA9PT4gdHlwZVxuICB2YXIgdjhfc2hhcmVkX29iamVjdCA9XG4gICdjb23QvtCx0YrQtdC60YIgZnRw0YHQvtC10LTQuNC90LXQvdC40LUgaHR0cNC30LDQv9GA0L7RgSBodHRw0YHQtdGA0LLQuNGB0L7RgtCy0LXRgiBodHRw0YHQvtC10LTQuNC90LXQvdC40LUgd3PQvtC/0YDQtdC00LXQu9C10L3QuNGPIHdz0L/RgNC+0LrRgdC4IHhiYXNlINCw0L3QsNC70LjQt9C00LDQvdC90YvRhSDQsNC90L3QvtGC0LDRhtC40Y94cyAnICtcbiAgJ9Cx0LvQvtC60LjRgNC+0LLQutCw0LTQsNC90L3Ri9GFINCx0YPRhNC10YDQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINCy0LrQu9GO0YfQtdC90LjQtXhzINCy0YvRgNCw0LbQtdC90LjQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCz0LXQvdC10YDQsNGC0L7RgNGB0LvRg9GH0LDQudC90YvRhdGH0LjRgdC10Lsg0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAgJyArXG4gICfQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQuNC10LrQvtC+0YDQtNC40L3QsNGC0Ysg0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAg0LPRgNGD0L/Qv9Cw0LzQvtC00LXQu9C4eHMg0LTQsNC90L3Ri9C10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LLQvtC40YfQvdGL0LXQtNCw0L3QvdGL0LUg0LTQtdC90LTRgNC+0LPRgNCw0LzQvNCwICcgK1xuICAn0LTQuNCw0LPRgNCw0LzQvNCwINC00LjQsNCz0YDQsNC80LzQsNCz0LDQvdGC0LAg0LTQuNCw0LvQvtCz0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDQtNC40LDQu9C+0LPQstGL0LHQvtGA0LDRhtCy0LXRgtCwINC00LjQsNC70L7Qs9Cy0YvQsdC+0YDQsNGI0YDQuNGE0YLQsCDQtNC40LDQu9C+0LPRgNCw0YHQv9C40YHQsNC90LjRj9GA0LXQs9C70LDQvNC10L3RgtC90L7Qs9C+0LfQsNC00LDQvdC40Y8gJyArXG4gICfQtNC40LDQu9C+0LPRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0L/QtdGA0LjQvtC00LAg0LTQuNCw0L/QsNC30L7QvSDQtNC+0LrRg9C80LXQvdGCZG9tINC00L7QutGD0LzQtdC90YJodG1sINC00L7QutGD0LzQtdC90YLQsNGG0LjRj3hzINC00L7RgdGC0LDQstC70Y/QtdC80L7QtdGD0LLQtdC00L7QvNC70LXQvdC40LUgJyArXG4gICfQt9Cw0L/QuNGB0Yxkb20g0LfQsNC/0LjRgdGMZmFzdGluZm9zZXQg0LfQsNC/0LjRgdGMaHRtbCDQt9Cw0L/QuNGB0Yxqc29uINC30LDQv9C40YHRjHhtbCDQt9Cw0L/QuNGB0Yx6aXDRhNCw0LnQu9CwINC30LDQv9C40YHRjNC00LDQvdC90YvRhSDQt9Cw0L/QuNGB0YzRgtC10LrRgdGC0LAg0LfQsNC/0LjRgdGM0YPQt9C70L7QsmRvbSAnICtcbiAgJ9C30LDQv9GA0L7RgSDQt9Cw0YnQuNGJ0LXQvdC90L7QtdGB0L7QtdC00LjQvdC10L3QuNC1b3BlbnNzbCDQt9C90LDRh9C10L3QuNGP0L/QvtC70LXQudGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQuNC30LLQu9C10YfQtdC90LjQtdGC0LXQutGB0YLQsCDQuNC80L/QvtGA0YJ4cyDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQsCAnICtcbiAgJ9C40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtC10YHQvtC+0LHRidC10L3QuNC1INC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLRi9C50L/RgNC+0YTQuNC70Ywg0LjQvdGC0LXRgNC90LXRgtC/0YDQvtC60YHQuCDQuNC90YLQtdGA0L3QtdGC0YHQvtC10LTQuNC90LXQvdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Y/QtNC70Y/Qv9GA0LjQu9C+0LbQtdC90LjRj3hzICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsNGC0YDQuNCx0YPRgtCweHMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQuNGB0YLQvtGH0L3QuNC60LTQvtGB0YLRg9C/0L3Ri9GF0L3QsNGB0YLRgNC+0LXQutC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgtC10YDQsNGC0L7RgNGD0LfQu9C+0LJkb20g0LrQsNGA0YLQuNC90LrQsCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9C00LDRgtGLINC60LLQsNC70LjRhNC40LrQsNGC0L7RgNGL0LTQstC+0LjRh9C90YvRhdC00LDQvdC90YvRhSDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GB0YLRgNC+0LrQuCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GH0LjRgdC70LAgJyArXG4gICfQutC+0LzQv9C+0L3QvtCy0YnQuNC60LzQsNC60LXRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC80L/QvtC90L7QstGJ0LjQutC90LDRgdGC0YDQvtC10LrQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LzQsNC60LXRgtCw0L7RhNC+0YDQvNC70LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C60L7QvdGB0YLRgNGD0LrRgtC+0YDQvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC90YHRgtGA0YPQutGC0L7RgNGE0L7RgNC80LDRgtC90L7QudGB0YLRgNC+0LrQuCDQu9C40L3QuNGPINC80LDQutC10YLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvNCw0LrQtdGC0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C80LDQutC10YLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDRgdC60LB4cyDQvNC10L3QtdC00LbQtdGA0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INC90LDQsdC+0YDRgdGF0LXQvHhtbCDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvdCw0YHRgtGA0L7QudC60LjRgdC10YDQuNCw0LvQuNC30LDRhtC40Lhqc29uICcgK1xuICAn0L7QsdGA0LDQsdC+0YLQutCw0LrQsNGA0YLQuNC90L7QuiDQvtCx0YDQsNCx0L7RgtC60LDRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L7QsdGF0L7QtNC00LXRgNC10LLQsGRvbSDQvtCx0YrRj9Cy0LvQtdC90LjQtdCw0YLRgNC40LHRg9GC0LB4cyDQvtCx0YrRj9Cy0LvQtdC90LjQtdC90L7RgtCw0YbQuNC4eHMgJyArXG4gICfQvtCx0YrRj9Cy0LvQtdC90LjQtdGN0LvQtdC80LXQvdGC0LB4cyDQvtC/0LjRgdCw0L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC+0LHRi9GC0LjRj9C00L7RgdGC0YPQv9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0L7QsdGL0YLQuNGP0L7RgtC60LDQt9Cy0LTQvtGB0YLRg9C/0LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L7Qv9C40YHQsNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuNGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQv9C10YDQtdC00LDQstCw0LXQvNC+0LPQvtGE0LDQudC70LAg0L7Qv9C40YHQsNC90LjQtdGC0LjQv9C+0LIg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdCz0YDRg9C/0L/Ri9Cw0YLRgNC40LHRg9GC0L7QsnhzINC+0L/RgNC10LTQtdC70LXQvdC40LXQs9GA0YPQv9C/0YvQvNC+0LTQtdC70Lh4cyAnICtcbiAgJ9C+0L/RgNC10LTQtdC70LXQvdC40LXQvtCz0YDQsNC90LjRh9C10L3QuNGP0LjQtNC10L3RgtC40YfQvdC+0YHRgtC4eHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC+0L/RgNC10LTQtdC70LXQvdC40LXRgdC+0YHRgtCw0LLQvdC+0LPQvtGC0LjQv9CweHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdGC0LjQv9Cw0LTQvtC60YPQvNC10L3RgtCwZG9tICcgK1xuICAn0L7Qv9GA0LXQtNC10LvQtdC90LjRj3hwYXRoeHMg0L7RgtCx0L7RgNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0LDQutC10YLQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YXQtNC+0LrRg9C80LXQvdGC0L7QsiDQv9Cw0YDQsNC80LXRgtGA0LLRi9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C/0LDRgNCw0LzQtdGC0YDRi9C30LDQv9C40YHQuGpzb24g0L/QsNGA0LDQvNC10YLRgNGL0LfQsNC/0LjRgdC4eG1sINC/0LDRgNCw0LzQtdGC0YDRi9GH0YLQtdC90LjRj3htbCDQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LV4cyDQv9C70LDQvdC40YDQvtCy0YnQuNC6INC/0L7Qu9C10LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7RgdGC0YDQvtC40YLQtdC70Yxkb20g0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC30LDQv9GA0L7RgdCwINC/0L7RgdGC0YDQvtC40YLQtdC70YzQvtGC0YfQtdGC0LAg0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC+0YLRh9C10YLQsNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0L/QvtGB0YLRgNC+0LjRgtC10LvRjNGB0YXQtdC8eG1sINC/0L7RgtC+0Log0L/QvtGC0L7QutCy0L/QsNC80Y/RgtC4INC/0L7Rh9GC0LAg0L/QvtGH0YLQvtCy0L7QtdGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1eHNsINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LXQutC60LDQvdC+0L3QuNGH0LXRgdC60L7QvNGDeG1sICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LLRi9Cy0L7QtNCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhdCy0LrQvtC70LvQtdC60YbQuNGO0LfQvdCw0YfQtdC90LjQuSDQv9GA0L7RhtC10YHRgdC+0YDQstGL0LLQvtC00LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GF0LLRgtCw0LHQu9C40YfQvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNC30YvQvNC10L3QvtCy0LDRgtC10LvRjNC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQuNC80LXQvWRvbSDRgNCw0LzQutCwINGA0LDRgdC/0LjRgdCw0L3QuNC10YDQtdCz0LvQsNC80LXQvdGC0L3QvtCz0L7Qt9Cw0LTQsNC90LjRjyDRgNCw0YHRiNC40YDQtdC90L3QvtC10LjQvNGPeG1sICcgK1xuICAn0YDQtdC30YPQu9GM0YLQsNGC0YfRgtC10L3QuNGP0LTQsNC90L3Ri9GFINGB0LLQvtC00L3QsNGP0LTQuNCw0LPRgNCw0LzQvNCwINGB0LLRj9C30YzQv9Cw0YDQsNC80LXRgtGA0LDQstGL0LHQvtGA0LAg0YHQstGP0LfRjNC/0L7RgtC40L/RgyDRgdCy0Y/Qt9GM0L/QvtGC0LjQv9GD0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LB3aW5kb3dzINGB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LDRhNCw0LnQuyDRgdC10YDRgtC40YTQuNC60LDRgtC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDRgdC10YDRgtC40YTQuNC60LDRgtGL0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjRhdGG0LXQvdGC0YDQvtCyd2luZG93cyAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0YvRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNGF0YbQtdC90YLRgNC+0LLRhNCw0LnQuyDRgdC20LDRgtC40LXQtNCw0L3QvdGL0YUg0YHQuNGB0YLQtdC80L3QsNGP0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHQvtC+0LHRidC10L3QuNC10L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOINGB0L7Rh9C10YLQsNC90LjQtdC60LvQsNCy0LjRiCAnICtcbiAgJ9GB0YDQsNCy0L3QtdC90LjQtdC30L3QsNGH0LXQvdC40Lkg0YHRgtCw0L3QtNCw0YDRgtC90LDRj9C00LDRgtCw0L3QsNGH0LDQu9CwINGB0YLQsNC90LTQsNGA0YLQvdGL0LnQv9C10YDQuNC+0LQg0YHRhdC10LzQsHhtbCDRgdGF0LXQvNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQsNCx0LvQuNGH0L3Ri9C50LTQvtC60YPQvNC10L3RgiAnICtcbiAgJ9GC0LXQutGB0YLQvtCy0YvQudC00L7QutGD0LzQtdC90YIg0YLQtdGB0YLQuNGA0YPQtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0LjQv9C00LDQvdC90YvRhXhtbCDRg9C90LjQutCw0LvRjNC90YvQudC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQuyDRhNCw0LnQu9C+0LLRi9C50L/QvtGC0L7QuiAnICtcbiAgJ9GE0LDRgdC10YLQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QstC00YDQvtCx0L3QvtC50YfQsNGB0YLQuHhzINGE0LDRgdC10YLQvNCw0LrRgdC40LzQsNC70YzQvdC+0LPQvtCy0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMgJyArXG4gICfRhNCw0YHQtdGC0LzQsNC60YHQuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LDQutGB0LjQvNCw0LvRjNC90L7QudC00LvQuNC90Yt4cyDRhNCw0YHQtdGC0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+0LLQutC70Y7Rh9Cw0Y7RidC10LPQvtC30L3QsNGH0LXQvdC40Y94cyAnICtcbiAgJ9GE0LDRgdC10YLQvNC40L3QuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LjQvdC40LzQsNC70YzQvdC+0LnQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC+0LHRgNCw0LfRhtCweHMg0YTQsNGB0LXRgtC+0LHRidC10LPQvtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QsnhzICcgK1xuICAn0YTQsNGB0LXRgtC/0LXRgNC10YfQuNGB0LvQtdC90LjRj3hzINGE0LDRgdC10YLQv9GA0L7QsdC10LvRjNC90YvRhdGB0LjQvNCy0L7Qu9C+0LJ4cyDRhNC40LvRjNGC0YDRg9C30LvQvtCyZG9tINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90LDRj9GB0YLRgNC+0LrQsCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0YTRgNCw0LPQvNC10L3RgnhzINGF0LXRiNC40YDQvtCy0LDQvdC40LXQtNCw0L3QvdGL0YUg0YXRgNCw0L3QuNC70LjRidC10LfQvdCw0YfQtdC90LjRjyDRhtCy0LXRgiDRh9GC0LXQvdC40LVmYXN0aW5mb3NldCDRh9GC0LXQvdC40LVodG1sINGH0YLQtdC90LjQtWpzb24g0YfRgtC10L3QuNC1eG1sINGH0YLQtdC90LjQtXppcNGE0LDQudC70LAgJyArXG4gICfRh9GC0LXQvdC40LXQtNCw0L3QvdGL0YUg0YfRgtC10L3QuNC10YLQtdC60YHRgtCwINGH0YLQtdC90LjQtdGD0LfQu9C+0LJkb20g0YjRgNC40YTRgiDRjdC70LXQvNC10L3RgtGA0LXQt9GD0LvRjNGC0LDRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJztcblxuICAvLyB2OCDRg9C90LjQstC10YDRgdCw0LvRjNC90YvQtSDQutC+0LvQu9C10LrRhtC40Lgg0LfQvdCw0YfQtdC90LjQuSA9PT4gdHlwZVxuICB2YXIgdjhfdW5pdmVyc2FsX2NvbGxlY3Rpb24gPVxuICAnY29tc2FmZWFycmF5INC00LXRgNC10LLQvtC30L3QsNGH0LXQvdC40Lkg0LzQsNGB0YHQuNCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRgdC/0LjRgdC+0LrQt9C90LDRh9C10L3QuNC5INGB0YLRgNGD0LrRgtGD0YDQsCDRgtCw0LHQu9C40YbQsNC30L3QsNGH0LXQvdC40Lkg0YTQuNC60YHQuNGA0L7QstCw0L3QvdCw0Y/RgdGC0YDRg9C60YLRg9GA0LAgJyArXG4gICfRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQudC80LDRgdGB0LjQsiAnO1xuXG4gIC8vIHR5cGUgOiDQstGB0YLRgNC+0LXQvdC90YvQtSDRgtC40L/Ri1xuICB2YXIgVFlQRSA9XG4gIHY4X3NoYXJlZF9vYmplY3QgK1xuICB2OF91bml2ZXJzYWxfY29sbGVjdGlvbjtcblxuICAvLyBsaXRlcmFsIDog0L/RgNC40LzQuNGC0LjQstC90YvQtSDRgtC40L/Ri1xuICB2YXIgTElURVJBTCA9ICdudWxsINC40YHRgtC40L3QsCDQu9C+0LbRjCDQvdC10L7Qv9GA0LXQtNC10LvQtdC90L4nO1xuXG4gIC8vIG51bWJlciA6INGH0LjRgdC70LBcbiAgdmFyIE5VTUJFUlMgPSBobGpzLmluaGVyaXQoaGxqcy5OVU1CRVJfTU9ERSk7XG5cbiAgLy8gc3RyaW5nIDog0YHRgtGA0L7QutC4XG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcInxcXFxcfCcsIGVuZDogJ1wifCQnLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICB9O1xuXG4gIC8vIG51bWJlciA6INC00LDRgtGLXG4gIHZhciBEQVRFID0ge1xuICAgIGJlZ2luOiBcIidcIiwgZW5kOiBcIidcIiwgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGR7NH0oW1xcXFwuXFxcXFxcXFwvOi1dP1xcXFxkezJ9KXswLDV9J1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBjb21tZW50IDog0LrQvtC80LzQtdC90YLQsNGA0LjQuFxuICB2YXIgQ09NTUVOVFMgPSBobGpzLmluaGVyaXQoaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFKTtcblxuICAvLyBtZXRhIDog0LjQvdGB0YLRgNGD0LrRhtC40Lgg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLRiyDQutC+0LzQv9C40LvRj9GG0LjQuFxuICB2YXIgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcblxuICAgIGJlZ2luOiAnI3wmJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgJ21ldGEta2V5d29yZCc6IEtFWVdPUkQgKyBNRVRBS0VZV09SRFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1FTlRTXG4gICAgXVxuICB9O1xuXG4gIC8vIHN5bWJvbCA6INC80LXRgtC60LAgZ290b1xuICB2YXIgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICd+JywgZW5kOiAnO3w6JywgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIC8vIGZ1bmN0aW9uIDog0L7QsdGK0Y/QstC70LXQvdC40LUg0L/RgNC+0YbQtdC00YPRgCDQuCDRhNGD0L3QutGG0LjQuVxuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICfQv9GA0L7RhtC10LTRg9GA0LB80YTRg9C90LrRhtC40Y8nLCBlbmQ6ICdcXFxcKScsIGtleXdvcmRzOiAn0L/RgNC+0YbQtdC00YPRgNCwINGE0YPQvdC60YbQuNGPJ30sXG4gICAgICB7YmVnaW46ICfQutC+0L3QtdGG0L/RgNC+0YbQtdC00YPRgNGLfNC60L7QvdC10YbRhNGD0L3QutGG0LjQuCcsIGtleXdvcmRzOiAn0LrQvtC90LXRhtC/0YDQvtGG0LXQtNGD0YDRiyDQutC+0L3QtdGG0YTRg9C90LrRhtC40LgnfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJywgZW5kc1BhcmVudCA6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiBVTkRFUlNDT1JFX0lERU5UX1JFLCBlbmQ6ICcsJywgZXhjbHVkZUVuZDogdHJ1ZSwgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICAkcGF0dGVybjogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgICAgICAga2V5d29yZDogJ9C30L3QsNGHJyxcbiAgICAgICAgICAgICAgbGl0ZXJhbDogTElURVJBTFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgICAgIERBVEVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIENPTU1FTlRTXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkV9KVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICcxQzpFbnRlcnByaXNlJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkQsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTixcbiAgICAgIGNsYXNzOiBDTEFTUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgTUVUQSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgQ09NTUVOVFMsXG4gICAgICBTWU1CT0wsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIERBVEVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gXzFjO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBBdWdtZW50ZWQgQmFja3VzLU5hdXIgRm9ybVxuQXV0aG9yOiBBbGV4IE1jS2liYmVuIDxhbGV4QG51bGxzY29wZS5uZXQ+XG5XZWJzaXRlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTIzNFxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhYm5mKGhsanMpIHtcbiAgY29uc3QgcmVnZXhlcyA9IHtcbiAgICBydWxlRGVjbGFyYXRpb246IC9eW2EtekEtWl1bYS16QS1aMC05LV0qLyxcbiAgICB1bmV4cGVjdGVkQ2hhcnM6IC9bIUAjJF4mJyw/K35gfDpdL1xuICB9O1xuXG4gIGNvbnN0IGtleXdvcmRzID0gW1xuICAgIFwiQUxQSEFcIixcbiAgICBcIkJJVFwiLFxuICAgIFwiQ0hBUlwiLFxuICAgIFwiQ1JcIixcbiAgICBcIkNSTEZcIixcbiAgICBcIkNUTFwiLFxuICAgIFwiRElHSVRcIixcbiAgICBcIkRRVU9URVwiLFxuICAgIFwiSEVYRElHXCIsXG4gICAgXCJIVEFCXCIsXG4gICAgXCJMRlwiLFxuICAgIFwiTFdTUFwiLFxuICAgIFwiT0NURVRcIixcbiAgICBcIlNQXCIsXG4gICAgXCJWQ0hBUlwiLFxuICAgIFwiV1NQXCJcbiAgXTtcblxuICBjb25zdCBjb21tZW50TW9kZSA9IGhsanMuQ09NTUVOVCgvOy8sIC8kLyk7XG5cbiAgY29uc3QgdGVybWluYWxCaW5hcnlNb2RlID0ge1xuICAgIGNsYXNzTmFtZTogXCJzeW1ib2xcIixcbiAgICBiZWdpbjogLyViWzAtMV0rKC1bMC0xXSt8KFxcLlswLTFdKykrKXswLDF9L1xuICB9O1xuXG4gIGNvbnN0IHRlcm1pbmFsRGVjaW1hbE1vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgIGJlZ2luOiAvJWRbMC05XSsoLVswLTldK3woXFwuWzAtOV0rKSspezAsMX0vXG4gIH07XG5cbiAgY29uc3QgdGVybWluYWxIZXhhZGVjaW1hbE1vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgIGJlZ2luOiAvJXhbMC05QS1GXSsoLVswLTlBLUZdK3woXFwuWzAtOUEtRl0rKSspezAsMX0vXG4gIH07XG5cbiAgY29uc3QgY2FzZVNlbnNpdGl2aXR5SW5kaWNhdG9yTW9kZSA9IHtcbiAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgYmVnaW46IC8lW3NpXS9cbiAgfTtcblxuICBjb25zdCBydWxlRGVjbGFyYXRpb25Nb2RlID0ge1xuICAgIGNsYXNzTmFtZTogXCJhdHRyaWJ1dGVcIixcbiAgICBiZWdpbjogY29uY2F0KHJlZ2V4ZXMucnVsZURlY2xhcmF0aW9uLCAvKD89XFxzKj0pLylcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdBdWdtZW50ZWQgQmFja3VzLU5hdXIgRm9ybScsXG4gICAgaWxsZWdhbDogcmVnZXhlcy51bmV4cGVjdGVkQ2hhcnMsXG4gICAga2V5d29yZHM6IGtleXdvcmRzLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBydWxlRGVjbGFyYXRpb25Nb2RlLFxuICAgICAgY29tbWVudE1vZGUsXG4gICAgICB0ZXJtaW5hbEJpbmFyeU1vZGUsXG4gICAgICB0ZXJtaW5hbERlY2ltYWxNb2RlLFxuICAgICAgdGVybWluYWxIZXhhZGVjaW1hbE1vZGUsXG4gICAgICBjYXNlU2Vuc2l0aXZpdHlJbmRpY2F0b3JNb2RlLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWJuZjtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG4gTGFuZ3VhZ2U6IEFwYWNoZSBBY2Nlc3MgTG9nXG4gQXV0aG9yOiBPbGVnIEVmaW1vdiA8ZWZpbW92b3ZAZ21haWwuY29tPlxuIERlc2NyaXB0aW9uOiBBcGFjaGUvTmdpbnggQWNjZXNzIExvZ3NcbiBXZWJzaXRlOiBodHRwczovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbG9ncy5odG1sI2FjY2Vzc2xvZ1xuIEF1ZGl0OiAyMDIwXG4gKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFjY2Vzc2xvZyhfaGxqcykge1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL01ldGhvZHNcbiAgY29uc3QgSFRUUF9WRVJCUyA9IFtcbiAgICBcIkdFVFwiLFxuICAgIFwiUE9TVFwiLFxuICAgIFwiSEVBRFwiLFxuICAgIFwiUFVUXCIsXG4gICAgXCJERUxFVEVcIixcbiAgICBcIkNPTk5FQ1RcIixcbiAgICBcIk9QVElPTlNcIixcbiAgICBcIlBBVENIXCIsXG4gICAgXCJUUkFDRVwiXG4gIF07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FwYWNoZSBBY2Nlc3MgTG9nJyxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gSVBcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IC9eXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIvLFxuICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgIH0sXG4gICAgICAvLyBPdGhlciBudW1iZXJzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAvXFxiXFxkK1xcYi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIFJlcXVlc3RzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiBjb25jYXQoL1wiLywgZWl0aGVyKC4uLkhUVFBfVkVSQlMpKSxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICBrZXl3b3JkczogSFRUUF9WRVJCUyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogNSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL0hUVFBcXC9bMTJdXFwuXFxkJy8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBEYXRlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAvLyBkYXRlcyBtdXN0IGhhdmUgYSBjZXJ0YWluIGxlbmd0aCwgdGhpcyBwcmV2ZW50cyBtYXRjaGluZ1xuICAgICAgICAvLyBzaW1wbGUgYXJyYXkgYWNjZXNzZXMgYVsxMjNdIGFuZCBbXSBhbmQgb3RoZXIgY29tbW9uIHBhdHRlcm5zXG4gICAgICAgIC8vIGZvdW5kIGluIG90aGVyIGxhbmd1YWdlc1xuICAgICAgICBiZWdpbjogL1xcW1xcZFteXFxdXFxuXXs4LH1cXF0vLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgIGVuZDogL1xcXS8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBVc2VyIGFnZW50IC8gcmVsZXZhbmNlIGJvb3N0XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvXCJNb3ppbGxhXFwvXFxkXFwuXFxkIFxcKC8sXG4gICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogM1xuICAgICAgfSxcbiAgICAgIC8vIFN0cmluZ3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3Nsb2c7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEFjdGlvblNjcmlwdFxuQXV0aG9yOiBBbGV4YW5kZXIgTXlhZHplbCA8bXlhZHplbEBnbWFpbC5jb20+XG5DYXRlZ29yeTogc2NyaXB0aW5nXG5BdWRpdDogMjAyMFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFjdGlvbnNjcmlwdChobGpzKSB7XG4gIGNvbnN0IElERU5UX1JFID0gL1thLXpBLVpfJF1bYS16QS1aMC05XyRdKi87XG4gIGNvbnN0IElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUgPSAvKFsqXXxbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopLztcblxuICBjb25zdCBBUzNfUkVTVF9BUkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdyZXN0X2FyZycsXG4gICAgYmVnaW46IC9bLl17M30vLFxuICAgIGVuZDogSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FjdGlvblNjcmlwdCcsXG4gICAgYWxpYXNlczogWyAnYXMnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhcyBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZXRlIGRvIGR5bmFtaWMgZWFjaCAnICtcbiAgICAgICAgJ2Vsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZvciBmdW5jdGlvbiBnZXQgaWYgaW1wbGVtZW50cyBpbXBvcnQgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luc3RhbmNlb2YgaW50ZXJmYWNlIGludGVybmFsIGlzIG5hbWVzcGFjZSBuYXRpdmUgbmV3IG92ZXJyaWRlIHBhY2thZ2UgcHJpdmF0ZSAnICtcbiAgICAgICAgJ3Byb3RlY3RlZCBwdWJsaWMgcmV0dXJuIHNldCBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1c2UgdmFyIHZvaWQgJyArXG4gICAgICAgICd3aGlsZSB3aXRoJyxcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwYWNrYWdlJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5USVRMRV9NT0RFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCBpbmNsdWRlJyxcbiAgICAgICAgZW5kOiAvOy8sXG4gICAgICAgIGtleXdvcmRzOiB7ICdtZXRhLWtleXdvcmQnOiAnaW1wb3J0IGluY2x1ZGUnIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJyxcbiAgICAgICAgZW5kOiAvW3s7XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBBUzNfUkVTVF9BUkdfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBiZWdpbjogY29uY2F0KC86XFxzKi8sIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUpIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuTUVUSE9EX0dVQVJEXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvIy9cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhY3Rpb25zY3JpcHQ7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQWRhXG5BdXRob3I6IExhcnMgU2NodWxuYSA8a2FydG9mZmVsYnJlaS5taXQubXVza2F0bnVzc0BnbWFpbC5vcmc+XG5EZXNjcmlwdGlvbjogQWRhIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgaGFzIGdyZWF0IHN1cHBvcnQgZm9yIHNhZnRleSBjcml0aWNhbCBhbmQgcmVhbC10aW1lIGFwcGxpY2F0aW9ucy5cbiAgICAgICAgICAgICBJdCBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgdGhlIERvRCBhbmQgdGh1cyBoYXMgYmVlbiB1c2VkIGluIG1pbGl0YXJ5IGFuZCBzYWZldHktY3JpdGljYWwgYXBwbGljYXRpb25zIChsaWtlIGNpdmlsIGF2aWF0aW9uKS5cbiAgICAgICAgICAgICBUaGUgZmlyc3QgdmVyc2lvbiBhcHBlYXJlZCBpbiB0aGUgODBzLCBidXQgaXQncyBzdGlsbCBhY3RpdmVseSBkZXZlbG9wZWQgdG9kYXkgd2l0aFxuICAgICAgICAgICAgIHRoZSBuZXdlc3Qgc3RhbmRhcmQgYmVpbmcgQWRhMjAxMi5cbiovXG5cbi8vIFdlIHRyeSB0byBzdXBwb3J0IGZ1bGwgQWRhMjAxMlxuLy9cbi8vIFdlIGhpZ2hsaWdodCBhbGwgYXBwZWFyYW5jZXMgb2YgdHlwZXMsIGtleXdvcmRzLCBsaXRlcmFscyAoc3RyaW5nLCBjaGFyLCBudW1iZXIsIGJvb2wpXG4vLyBhbmQgdGl0bGVzICh1c2VyIGRlZmluZWQgZnVuY3Rpb24vcHJvY2VkdXJlL3BhY2thZ2UpXG4vLyBDU1MgY2xhc3NlcyBhcmUgc2V0IGFjY29yZGluZ2x5XG4vL1xuLy8gTGFuZ3VhZ2VzIGNhdXNpbmcgcHJvYmxlbXMgZm9yIGxhbmd1YWdlIGRldGVjdGlvbjpcbi8vIHhtbCAoYnJva2VuIGJ5IEZvbyA6IEJhciB0eXBlKSwgZWxtIChicm9rZW4gYnkgRm9vIDogQmFyIHR5cGUpLCB2YnNjcmlwdC1odG1sIChicm9rZW4gYnkgYm9keSBrZXl3b3JkKVxuLy8gc3FsIChhZGEgZGVmYXVsdC50eHQgaGFzIGEgbG90IG9mIHNxbCBrZXl3b3JkcylcblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFkYShobGpzKSB7XG4gIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgQWRhIG51bWVyaWMgbGl0ZXJhbHMuXG4gIC8vIHN0b2xlbiBmb3JtIHRoZSBWSERMIGhpZ2hsaWdodGVyXG5cbiAgLy8gRGVjaW1hbCBsaXRlcmFsOlxuICBjb25zdCBJTlRFR0VSX1JFID0gJ1xcXFxkKF98XFxcXGQpKic7XG4gIGNvbnN0IEVYUE9ORU5UX1JFID0gJ1tlRV1bLStdPycgKyBJTlRFR0VSX1JFO1xuICBjb25zdCBERUNJTUFMX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyhcXFxcLicgKyBJTlRFR0VSX1JFICsgJyk/JyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAvLyBCYXNlZCBsaXRlcmFsOlxuICBjb25zdCBCQVNFRF9JTlRFR0VSX1JFID0gJ1xcXFx3Kyc7XG4gIGNvbnN0IEJBU0VEX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyMnICsgQkFTRURfSU5URUdFUl9SRSArICcoXFxcXC4nICsgQkFTRURfSU5URUdFUl9SRSArICcpPycgKyAnIycgKyAnKCcgKyBFWFBPTkVOVF9SRSArICcpPyc7XG5cbiAgY29uc3QgTlVNQkVSX1JFID0gJ1xcXFxiKCcgKyBCQVNFRF9MSVRFUkFMX1JFICsgJ3wnICsgREVDSU1BTF9MSVRFUkFMX1JFICsgJyknO1xuXG4gIC8vIElkZW50aWZpZXIgcmVnZXhcbiAgY29uc3QgSURfUkVHRVggPSAnW0EtWmEtel0oXz9bQS1aYS16MC05Ll0pKic7XG5cbiAgLy8gYmFkIGNoYXJzLCBvbmx5IGFsbG93ZWQgaW4gbGl0ZXJhbHNcbiAgY29uc3QgQkFEX0NIQVJTID0gYFtdXFxcXHtcXFxcfSUjJ1wiYDtcblxuICAvLyBBZGEgZG9lc24ndCBoYXZlIGJsb2NrIGNvbW1lbnRzLCBvbmx5IGxpbmUgY29tbWVudHNcbiAgY29uc3QgQ09NTUVOVFMgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcblxuICAvLyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIGZvcm1cbiAgLy8gRm9vIDogQmFyIDo9IEJhejtcbiAgLy8gd2hlcmUgb25seSBCYXIgd2lsbCBiZSBoaWdobGlnaHRlZFxuICBjb25zdCBWQVJfREVDTFMgPSB7XG4gICAgLy8gVE9ETzogVGhlc2Ugc3BhY2VzIGFyZSBub3QgcmVxdWlyZWQgYnkgdGhlIEFkYSBzeW50YXhcbiAgICAvLyBob3dldmVyLCBJIGhhdmUgeWV0IHRvIHNlZSBoYW5kd3JpdHRlbiBBZGEgY29kZSB3aGVyZVxuICAgIC8vIHNvbWVvbmUgZG9lcyBub3QgcHV0IHNwYWNlcyBhcm91bmQgOlxuICAgIGJlZ2luOiAnXFxcXHMrOlxcXFxzKycsXG4gICAgZW5kOiAnXFxcXHMqKDo9fDt8XFxcXCl8PT58JCknLFxuICAgIC8vIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIC8vIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGlsbGVnYWw6IEJBRF9DSEFSUyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICAvLyB3b3JrYXJvdW5kIHRvIGF2b2lkIGhpZ2hsaWdodGluZ1xuICAgICAgICAvLyBuYW1lZCBsb29wcyBhbmQgZGVjbGFyZSBibG9ja3NcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2xvb3AgZm9yIGRlY2xhcmUgb3RoZXJzJyxcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gcHJvcGVybHkgaGlnaGxpZ2h0IGFsbCBtb2RpZmllcnNcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdub3QgbnVsbCBjb25zdGFudCBhY2Nlc3MgZnVuY3Rpb24gcHJvY2VkdXJlIGluIG91dCBhbGlhc2VkIGV4Y2VwdGlvbidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBiZWdpbjogSURfUkVHRVgsXG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdBZGEnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgICAgICAgJ2Fib3J0IGVsc2UgbmV3IHJldHVybiBhYnMgZWxzaWYgbm90IHJldmVyc2UgYWJzdHJhY3QgZW5kICcgK1xuICAgICAgICAgICAgICAgICdhY2NlcHQgZW50cnkgc2VsZWN0IGFjY2VzcyBleGNlcHRpb24gb2Ygc2VwYXJhdGUgYWxpYXNlZCBleGl0IG9yIHNvbWUgJyArXG4gICAgICAgICAgICAgICAgJ2FsbCBvdGhlcnMgc3VidHlwZSBhbmQgZm9yIG91dCBzeW5jaHJvbml6ZWQgYXJyYXkgZnVuY3Rpb24gb3ZlcnJpZGluZyAnICtcbiAgICAgICAgICAgICAgICAnYXQgdGFnZ2VkIGdlbmVyaWMgcGFja2FnZSB0YXNrIGJlZ2luIGdvdG8gcHJhZ21hIHRlcm1pbmF0ZSAnICtcbiAgICAgICAgICAgICAgICAnYm9keSBwcml2YXRlIHRoZW4gaWYgcHJvY2VkdXJlIHR5cGUgY2FzZSBpbiBwcm90ZWN0ZWQgY29uc3RhbnQgaW50ZXJmYWNlICcgK1xuICAgICAgICAgICAgICAgICdpcyByYWlzZSB1c2UgZGVjbGFyZSByYW5nZSBkZWxheSBsaW1pdGVkIHJlY29yZCB3aGVuIGRlbHRhIGxvb3AgcmVtIHdoaWxlICcgK1xuICAgICAgICAgICAgICAgICdkaWdpdHMgcmVuYW1lcyB3aXRoIGRvIG1vZCByZXF1ZXVlIHhvcicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAgICAgICAgICdUcnVlIEZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1FTlRTLFxuICAgICAgLy8gc3RyaW5ncyBcImZvb2JhclwiXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiAvXCJcIi8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAgLy8gY2hhcmFjdGVycyAnJ1xuICAgICAge1xuICAgICAgICAvLyBjaGFyYWN0ZXIgbGl0ZXJhbHMgYWx3YXlzIGNvbnRhaW4gb25lIGNoYXJcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC8nLicvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBudW1iZXIgbGl0ZXJhbHNcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IE5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBBdHRyaWJ1dGVzXG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiBcIidcIiArIElEX1JFR0VYXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBwYWNrYWdlIGRlZmluaXRpb24sIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICcoXFxcXGJ3aXRoXFxcXHMrKT8oXFxcXGJwcml2YXRlXFxcXHMrKT9cXFxcYnBhY2thZ2VcXFxccysoXFxcXGJib2R5XFxcXHMrKT8nLFxuICAgICAgICBlbmQ6ICcoaXN8JCknLFxuICAgICAgICBrZXl3b3JkczogJ3BhY2thZ2UgYm9keScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBmdW5jdGlvbi9wcm9jZWR1cmUgZGVjbGFyYXRpb24vZGVmaW5pdGlvblxuICAgICAgICAvLyBtYXliZSBpbnNpZGUgZ2VuZXJpY1xuICAgICAgICBiZWdpbjogJyhcXFxcYih3aXRofG92ZXJyaWRpbmcpXFxcXHMrKT9cXFxcYihmdW5jdGlvbnxwcm9jZWR1cmUpXFxcXHMrJyxcbiAgICAgICAgZW5kOiAnKFxcXFxiaXN8XFxcXGJ3aXRofFxcXFxicmVuYW1lc3xcXFxcKVxcXFxzKjspJyxcbiAgICAgICAga2V5d29yZHM6ICdvdmVycmlkaW5nIGZ1bmN0aW9uIHByb2NlZHVyZSB3aXRoIGlzIHJlbmFtZXMgcmV0dXJuJyxcbiAgICAgICAgLy8gd2UgbmVlZCB0byByZS1tYXRjaCB0aGUgJ2Z1bmN0aW9uJyBrZXl3b3JkLCBzbyB0aGF0XG4gICAgICAgIC8vIHRoZSB0aXRsZSBtb2RlIGJlbG93IG1hdGNoZXMgb25seSBleGFjdGx5IG9uY2VcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOlxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIENPTU1FTlRTLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIHRoZSBmdW5jdGlvbi9wcm9jZWR1cmVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJyhcXFxcYndpdGhcXFxccyspP1xcXFxiKGZ1bmN0aW9ufHByb2NlZHVyZSlcXFxccysnLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICcoXFxcXCh8XFxcXHMrfCQpJyxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsOiBCQURfQ0hBUlNcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAvLyAnc2VsZidcbiAgICAgICAgICAgICAgICAgIC8vIC8vIHBhcmFtZXRlciB0eXBlc1xuICAgICAgICAgICAgICAgICAgVkFSX0RFQ0xTLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdHlwZVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYnJldHVyblxcXFxzKycsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogJyhcXFxccyt8O3wkKScsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiAncmV0dXJuJyxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgZG9uZSB3aXRoIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsOiBCQURfQ0hBUlNcblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG5ldyB0eXBlIGRlY2xhcmF0aW9uc1xuICAgICAgICAvLyBtYXliZSBpbnNpZGUgZ2VuZXJpY1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYihzdWIpP3R5cGVcXFxccysnLFxuICAgICAgICBlbmQ6ICdcXFxccysnLFxuICAgICAgICBrZXl3b3JkczogJ3R5cGUnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IEJBRF9DSEFSU1xuICAgICAgfSxcblxuICAgICAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgdGhlIGRlZmluaXRpb25cbiAgICAgIFZBUl9ERUNMU1xuXG4gICAgICAvLyBubyBtYXJrdXBcbiAgICAgIC8vIHJlbGV2YW5jZSBib29zdGVycyBmb3Igc21hbGwgc25pcHBldHNcbiAgICAgIC8vIHtiZWdpbjogJ1xcXFxzKj0+XFxcXHMqJ30sXG4gICAgICAvLyB7YmVnaW46ICdcXFxccyo6PVxcXFxzKid9LFxuICAgICAgLy8ge2JlZ2luOiAnXFxcXHMrOj1cXFxccysnfSxcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWRhO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEFuZ2VsU2NyaXB0XG5BdXRob3I6IE1lbGlzc2EgR2VlbHMgPG1lbGlzc2FAbmltYmxlLnRvb2xzPlxuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuV2Vic2l0ZTogaHR0cHM6Ly93d3cuYW5nZWxjb2RlLmNvbS9hbmdlbHNjcmlwdC9cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhbmdlbHNjcmlwdChobGpzKSB7XG4gIHZhciBidWlsdEluVHlwZU1vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnXFxcXGIodm9pZHxib29sfGludHxpbnQ4fGludDE2fGludDMyfGludDY0fHVpbnR8dWludDh8dWludDE2fHVpbnQzMnx1aW50NjR8c3RyaW5nfHJlZnxhcnJheXxkb3VibGV8ZmxvYXR8YXV0b3xkaWN0aW9uYXJ5KSdcbiAgfTtcblxuICB2YXIgb2JqZWN0SGFuZGxlTW9kZSA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnW2EtekEtWjAtOV9dK0AnXG4gIH07XG5cbiAgdmFyIGdlbmVyaWNNb2RlID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnPCcsIGVuZDogJz4nLFxuICAgIGNvbnRhaW5zOiBbIGJ1aWx0SW5UeXBlTW9kZSwgb2JqZWN0SGFuZGxlTW9kZSBdXG4gIH07XG5cbiAgYnVpbHRJblR5cGVNb2RlLmNvbnRhaW5zID0gWyBnZW5lcmljTW9kZSBdO1xuICBvYmplY3RIYW5kbGVNb2RlLmNvbnRhaW5zID0gWyBnZW5lcmljTW9kZSBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FuZ2VsU2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbJ2FzYyddLFxuXG4gICAga2V5d29yZHM6XG4gICAgICAnZm9yIGlufDAgYnJlYWsgY29udGludWUgd2hpbGUgZG98MCByZXR1cm4gaWYgZWxzZSBjYXNlIHN3aXRjaCBuYW1lc3BhY2UgaXMgY2FzdCAnICtcbiAgICAgICdvciBhbmQgeG9yIG5vdCBnZXR8MCBpbiBpbm91dHwxMCBvdXQgb3ZlcnJpZGUgc2V0fDAgcHJpdmF0ZSBwdWJsaWMgY29uc3QgZGVmYXVsdHwwICcgK1xuICAgICAgJ2ZpbmFsIHNoYXJlZCBleHRlcm5hbCBtaXhpbnwxMCBlbnVtIHR5cGVkZWYgZnVuY2RlZiB0aGlzIHN1cGVyIGltcG9ydCBmcm9tIGludGVyZmFjZSAnICtcbiAgICAgICdhYnN0cmFjdHwwIHRyeSBjYXRjaCBwcm90ZWN0ZWQgZXhwbGljaXQgcHJvcGVydHknLFxuXG4gICAgLy8gYXZvaWQgY2xvc2UgZGV0ZWN0aW9uIHdpdGggQyMgYW5kIEpTXG4gICAgaWxsZWdhbDogJyhedXNpbmdcXFxccytbQS1aYS16MC05X1xcXFwuXSs7JHxcXFxcYmZ1bmN0aW9uXFxcXHMqW15cXFxcKF0pJyxcblxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vICdzdHJpbmdzJ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIC8vIFwiXCJcImhlcmVkb2Mgc3RyaW5nc1wiXCJcIlxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIidcbiAgICAgIH0sXG5cbiAgICAgIHsgLy8gXCJzdHJpbmdzXCJcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLCAvLyBzaW5nbGUtbGluZSBjb21tZW50c1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgLy8gY29tbWVudCBibG9ja3NcblxuICAgICAgeyAvLyBtZXRhZGF0YVxuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgIH0sXG5cbiAgICAgIHsgLy8gaW50ZXJmYWNlIG9yIG5hbWVzcGFjZSBkZWNsYXJhdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW50ZXJmYWNlIG5hbWVzcGFjZScsIGVuZDogL1xcey8sXG4gICAgICAgIGlsbGVnYWw6ICdbOy5cXFxcLV0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgLy8gaW50ZXJmYWNlIG9yIG5hbWVzcGFjZSBuYW1lXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdbYS16QS1aMC05X10rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgeyAvLyBjbGFzcyBkZWNsYXJhdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAnWzsuXFxcXC1dJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IC8vIGNsYXNzIG5hbWVcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgICBiZWdpbjogJ1thLXpBLVowLTlfXSsnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnWzosXVxcXFxzKicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdbYS16QS1aMC05X10rJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgYnVpbHRJblR5cGVNb2RlLCAvLyBidWlsdC1pbiB0eXBlc1xuICAgICAgb2JqZWN0SGFuZGxlTW9kZSwgLy8gb2JqZWN0IGhhbmRsZXNcblxuICAgICAgeyAvLyBsaXRlcmFsc1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYihudWxsfHRydWV8ZmFsc2UpJ1xuICAgICAgfSxcblxuICAgICAgeyAvLyBudW1iZXJzXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgYmVnaW46ICcoLT8pKFxcXFxiMFt4WGJCb09kRF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT9mP3xcXFxcLlxcXFxkK2Y/KShbZUVdWy0rXT9cXFxcZCtmPyk/KSdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYW5nZWxzY3JpcHQ7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQXBhY2hlIGNvbmZpZ1xuQXV0aG9yOiBSdXNsYW4gS2ViYSA8cnVrZWJhQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogSXZhbiBTYWdhbGFldiA8bWFuaWFjQHNvZnR3YXJlbWFuaWFjcy5vcmc+XG5XZWJzaXRlOiBodHRwczovL2h0dHBkLmFwYWNoZS5vcmdcbkRlc2NyaXB0aW9uOiBsYW5ndWFnZSBkZWZpbml0aW9uIGZvciBBcGFjaGUgY29uZmlndXJhdGlvbiBmaWxlcyAoaHR0cGQuY29uZiAmIC5odGFjY2VzcylcbkNhdGVnb3J5OiBjb21tb24sIGNvbmZpZ1xuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhcGFjaGUoaGxqcykge1xuICBjb25zdCBOVU1CRVJfUkVGID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IC9bJCVdXFxkKy9cbiAgfTtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IC9cXGQrL1xuICB9O1xuICBjb25zdCBJUF9BRERSRVNTID0ge1xuICAgIGNsYXNzTmFtZTogXCJudW1iZXJcIixcbiAgICBiZWdpbjogL1xcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9KDpcXGR7MSw1fSk/L1xuICB9O1xuICBjb25zdCBQT1JUX05VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IC86XFxkezEsNX0vXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FwYWNoZSBjb25maWcnLFxuICAgIGFsaWFzZXM6IFsgJ2FwYWNoZWNvbmYnIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIGJlZ2luOiAvPFxcLz8vLFxuICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBJUF9BRERSRVNTLFxuICAgICAgICAgIFBPUlRfTlVNQkVSLFxuICAgICAgICAgIC8vIGxvdyByZWxldmFuY2UgcHJldmVudHMgdXMgZnJvbSBjbGFtaW5nIFhNTC9IVE1MIHdoZXJlIHRoaXMgcnVsZSB3b3VsZFxuICAgICAgICAgIC8vIG1hdGNoIHN0cmluZ3MgaW5zaWRlIG9mIFhNTCB0YWdzXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHsgcmVsZXZhbmNlOiAwIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgLy8ga2V5d29yZHMgYXJlbuKAmXQgbmVlZGVkIGZvciBoaWdobGlnaHRpbmcgcGVyIHNlLCB0aGV5IG9ubHkgYm9vc3QgcmVsZXZhbmNlXG4gICAgICAgIC8vIGZvciBhIHZlcnkgZ2VuZXJhbGx5IGRlZmluZWQgbW9kZSAoc3RhcnRzIHdpdGggYSB3b3JkLCBlbmRzIHdpdGggbGluZS1lbmRcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBub21hcmt1cDpcbiAgICAgICAgICAgICdvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCAnICtcbiAgICAgICAgICAgICdzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCAnICtcbiAgICAgICAgICAgICdzZXJ2ZXJuYW1lJ1xuICAgICAgICB9LFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAga2V5d29yZHM6IHsgbGl0ZXJhbDogJ29uIG9mZiBhbGwgZGVueSBhbGxvdycgfSxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHNcXFsvLFxuICAgICAgICAgICAgICBlbmQ6IC9cXF0kL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICBiZWdpbjogL1tcXCQlXVxcey8sXG4gICAgICAgICAgICAgIGVuZDogL1xcfS8sXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICAgIE5VTUJFUl9SRUZcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIElQX0FERFJFU1MsXG4gICAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvXFxTL1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwYWNoZTtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogQXBwbGVTY3JpcHRcbkF1dGhvcnM6IE5hdGhhbiBHcmlnZyA8bmF0aGFuQG5hdGhhbmFteS5vcmc+LCBEci4gRHJhbmcgPGRyZHJhbmdAZ21haWwuY29tPlxuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvYXJjaGl2ZS9kb2N1bWVudGF0aW9uL0FwcGxlU2NyaXB0L0NvbmNlcHR1YWwvQXBwbGVTY3JpcHRMYW5nR3VpZGUvaW50cm9kdWN0aW9uL0FTTFJfaW50cm8uaHRtbFxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhcHBsZXNjcmlwdChobGpzKSB7XG4gIGNvbnN0IFNUUklORyA9IGhsanMuaW5oZXJpdChcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgICBpbGxlZ2FsOiBudWxsXG4gICAgfSk7XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBTVFJJTkdcbiAgICBdXG4gIH07XG4gIGNvbnN0IENPTU1FTlRfTU9ERV8xID0gaGxqcy5DT01NRU5UKC8tLS8sIC8kLyk7XG4gIGNvbnN0IENPTU1FTlRfTU9ERV8yID0gaGxqcy5DT01NRU5UKFxuICAgIC9cXChcXCovLFxuICAgIC9cXCpcXCkvLFxuICAgIHtcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICdzZWxmJywgLy8gYWxsb3cgbmVzdGluZ1xuICAgICAgICBDT01NRU5UX01PREVfMVxuICAgICAgXVxuICAgIH1cbiAgKTtcbiAgY29uc3QgQ09NTUVOVFMgPSBbXG4gICAgQ09NTUVOVF9NT0RFXzEsXG4gICAgQ09NTUVOVF9NT0RFXzIsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRfUEFUVEVSTlMgPSBbXG4gICAgL2FwYXJ0IGZyb20vLFxuICAgIC9hc2lkZSBmcm9tLyxcbiAgICAvaW5zdGVhZCBvZi8sXG4gICAgL291dCBvZi8sXG4gICAgL2dyZWF0ZXIgdGhhbi8sXG4gICAgL2lzbid0fChkb2Vzbid0fGRvZXMgbm90KSAoZXF1YWx8Y29tZSBiZWZvcmV8Y29tZSBhZnRlcnxjb250YWluKS8sXG4gICAgLyhncmVhdGVyfGxlc3MpIHRoYW4oIG9yIGVxdWFsKT8vLFxuICAgIC8oc3RhcnRzP3xlbmRzfGJlZ2lucz8pIHdpdGgvLFxuICAgIC9jb250YWluZWQgYnkvLFxuICAgIC9jb21lcyAoYmVmb3JlfGFmdGVyKS8sXG4gICAgL2EgKHJlZnxyZWZlcmVuY2UpLyxcbiAgICAvUE9TSVggKGZpbGV8cGF0aCkvLFxuICAgIC8oZGF0ZXx0aW1lKSBzdHJpbmcvLFxuICAgIC9xdW90ZWQgZm9ybS9cbiAgXTtcblxuICBjb25zdCBCVUlMVF9JTl9QQVRURVJOUyA9IFtcbiAgICAvY2xpcGJvYXJkIGluZm8vLFxuICAgIC90aGUgY2xpcGJvYXJkLyxcbiAgICAvaW5mbyBmb3IvLFxuICAgIC9saXN0IChkaXNrc3xmb2xkZXIpLyxcbiAgICAvbW91bnQgdm9sdW1lLyxcbiAgICAvcGF0aCB0by8sXG4gICAgLyhjbG9zZXxvcGVuIGZvcikgYWNjZXNzLyxcbiAgICAvKGdldHxzZXQpIGVvZi8sXG4gICAgL2N1cnJlbnQgZGF0ZS8sXG4gICAgL2RvIHNoZWxsIHNjcmlwdC8sXG4gICAgL2dldCB2b2x1bWUgc2V0dGluZ3MvLFxuICAgIC9yYW5kb20gbnVtYmVyLyxcbiAgICAvc2V0IHZvbHVtZS8sXG4gICAgL3N5c3RlbSBhdHRyaWJ1dGUvLFxuICAgIC9zeXN0ZW0gaW5mby8sXG4gICAgL3RpbWUgdG8gR01ULyxcbiAgICAvKGxvYWR8cnVufHN0b3JlKSBzY3JpcHQvLFxuICAgIC9zY3JpcHRpbmcgY29tcG9uZW50cy8sXG4gICAgL0FTQ0lJIChjaGFyYWN0ZXJ8bnVtYmVyKS8sXG4gICAgL2xvY2FsaXplZCBzdHJpbmcvLFxuICAgIC9jaG9vc2UgKGFwcGxpY2F0aW9ufGNvbG9yfGZpbGV8ZmlsZSBuYW1lfGZvbGRlcnxmcm9tIGxpc3R8cmVtb3RlIGFwcGxpY2F0aW9ufFVSTCkvLFxuICAgIC9kaXNwbGF5IChhbGVydHxkaWFsb2cpL1xuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FwcGxlU2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbICdvc2FzY3JpcHQnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhYm91dCBhYm92ZSBhZnRlciBhZ2FpbnN0IGFuZCBhcm91bmQgYXMgYXQgYmFjayBiZWZvcmUgYmVnaW5uaW5nICcgK1xuICAgICAgICAnYmVoaW5kIGJlbG93IGJlbmVhdGggYmVzaWRlIGJldHdlZW4gYnV0IGJ5IGNvbnNpZGVyaW5nICcgK1xuICAgICAgICAnY29udGFpbiBjb250YWlucyBjb250aW51ZSBjb3B5IGRpdiBkb2VzIGVpZ2h0aCBlbHNlIGVuZCBlcXVhbCAnICtcbiAgICAgICAgJ2VxdWFscyBlcnJvciBldmVyeSBleGl0IGZpZnRoIGZpcnN0IGZvciBmb3VydGggZnJvbSBmcm9udCAnICtcbiAgICAgICAgJ2dldCBnaXZlbiBnbG9iYWwgaWYgaWdub3JpbmcgaW4gaW50byBpcyBpdCBpdHMgbGFzdCBsb2NhbCBtZSAnICtcbiAgICAgICAgJ21pZGRsZSBtb2QgbXkgbmludGggbm90IG9mIG9uIG9udG8gb3Igb3ZlciBwcm9wIHByb3BlcnR5IHB1dCByZWYgJyArXG4gICAgICAgICdyZWZlcmVuY2UgcmVwZWF0IHJldHVybmluZyBzY3JpcHQgc2Vjb25kIHNldCBzZXZlbnRoIHNpbmNlICcgK1xuICAgICAgICAnc2l4dGggc29tZSB0ZWxsIHRlbnRoIHRoYXQgdGhlfDAgdGhlbiB0aGlyZCB0aHJvdWdoIHRocnUgJyArXG4gICAgICAgICd0aW1lb3V0IHRpbWVzIHRvIHRyYW5zYWN0aW9uIHRyeSB1bnRpbCB3aGVyZSB3aGlsZSB3aG9zZSB3aXRoICcgK1xuICAgICAgICAnd2l0aG91dCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnQXBwbGVTY3JpcHQgZmFsc2UgbGluZWZlZWQgcmV0dXJuIHBpIHF1b3RlIHJlc3VsdCBzcGFjZSB0YWIgdHJ1ZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2FsaWFzIGFwcGxpY2F0aW9uIGJvb2xlYW4gY2xhc3MgY29uc3RhbnQgZGF0ZSBmaWxlIGludGVnZXIgbGlzdCAnICtcbiAgICAgICAgJ251bWJlciByZWFsIHJlY29yZCBzdHJpbmcgdGV4dCAnICtcbiAgICAgICAgJ2FjdGl2YXRlIGJlZXAgY291bnQgZGVsYXkgbGF1bmNoIGxvZyBvZmZzZXQgcmVhZCByb3VuZCAnICtcbiAgICAgICAgJ3J1biBzYXkgc3VtbWFyaXplIHdyaXRlICcgK1xuICAgICAgICAnY2hhcmFjdGVyIGNoYXJhY3RlcnMgY29udGVudHMgZGF5IGZyb250bW9zdCBpZCBpdGVtIGxlbmd0aCAnICtcbiAgICAgICAgJ21vbnRoIG5hbWUgcGFyYWdyYXBoIHBhcmFncmFwaHMgcmVzdCByZXZlcnNlIHJ1bm5pbmcgdGltZSB2ZXJzaW9uICcgK1xuICAgICAgICAnd2Vla2RheSB3b3JkIHdvcmRzIHllYXInXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAgICAgL1xcYi8sXG4gICAgICAgICAgZWl0aGVyKC4uLkJVSUxUX0lOX1BBVFRFUk5TKSxcbiAgICAgICAgICAvXFxiL1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvXlxccypyZXR1cm5cXGIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgL1xcYih0ZXh0IGl0ZW0gZGVsaW1pdGVyc3xjdXJyZW50IGFwcGxpY2F0aW9ufG1pc3NpbmcgdmFsdWUpXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAgICAgL1xcYi8sXG4gICAgICAgICAgZWl0aGVyKC4uLktFWVdPUkRfUEFUVEVSTlMpLFxuICAgICAgICAgIC9cXGIvXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdvbicsXG4gICAgICAgIGlsbGVnYWw6IC9bJHs9O1xcbl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIFBBUkFNU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLi4uQ09NTUVOVFNcbiAgICBdLFxuICAgIGlsbGVnYWw6IC9cXC9cXC98LT58PT58XFxbXFxbL1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGxlc2NyaXB0O1xuIiwKICAgICIvKlxuIExhbmd1YWdlOiBBcmNHSVMgQXJjYWRlXG4gQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuIEF1dGhvcjogSm9obiBGb3N0ZXIgPGpmb3N0ZXJAZXNyaS5jb20+XG4gV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vYXJjYWRlL1xuIERlc2NyaXB0aW9uOiBBcmNHSVMgQXJjYWRlIGlzIGFuIGV4cHJlc3Npb24gbGFuZ3VhZ2UgdXNlZCBpbiBtYW55IEVzcmkgQXJjR0lTIHByb2R1Y3RzIHN1Y2ggYXMgUHJvLCBPbmxpbmUsIFNlcnZlciwgUnVudGltZSwgSmF2YVNjcmlwdCwgYW5kIFB5dGhvblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFyY2FkZShobGpzKSB7XG4gIGNvbnN0IElERU5UX1JFID0gJ1tBLVphLXpfXVswLTlBLVphLXpfXSonO1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2lmIGZvciB3aGlsZSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsnLFxuICAgIGxpdGVyYWw6XG4gICAgICAnQmFja1NsYXNoIERvdWJsZVF1b3RlIGZhbHNlIEZvcndhcmRTbGFzaCBJbmZpbml0eSBOYU4gTmV3TGluZSBudWxsIFBJIFNpbmdsZVF1b3RlIFRhYiBUZXh0Rm9ybWF0dGluZyB0cnVlIHVuZGVmaW5lZCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnQWJzIEFjb3MgQW5nbGUgQXR0YWNobWVudHMgQXJlYSBBcmVhR2VvZGV0aWMgQXNpbiBBdGFuIEF0YW4yIEF2ZXJhZ2UgQmVhcmluZyBCb29sZWFuIEJ1ZmZlciBCdWZmZXJHZW9kZXRpYyAnICtcbiAgICAgICdDZWlsIENlbnRyb2lkIENsaXAgQ29uc29sZSBDb25zdHJhaW4gQ29udGFpbnMgQ29zIENvdW50IENyb3NzZXMgQ3V0IERhdGUgRGF0ZUFkZCAnICtcbiAgICAgICdEYXRlRGlmZiBEYXkgRGVjb2RlIERlZmF1bHRWYWx1ZSBEaWN0aW9uYXJ5IERpZmZlcmVuY2UgRGlzam9pbnQgRGlzdGFuY2UgRGlzdGFuY2VHZW9kZXRpYyBEaXN0aW5jdCAnICtcbiAgICAgICdEb21haW5Db2RlIERvbWFpbk5hbWUgRXF1YWxzIEV4cCBFeHRlbnQgRmVhdHVyZSBGZWF0dXJlU2V0IEZlYXR1cmVTZXRCeUFzc29jaWF0aW9uIEZlYXR1cmVTZXRCeUlkIEZlYXR1cmVTZXRCeVBvcnRhbEl0ZW0gJyArXG4gICAgICAnRmVhdHVyZVNldEJ5UmVsYXRpb25zaGlwTmFtZSBGZWF0dXJlU2V0QnlUaXRsZSBGZWF0dXJlU2V0QnlVcmwgRmlsdGVyIEZpcnN0IEZsb29yIEdlb21ldHJ5IEdyb3VwQnkgR3VpZCBIYXNLZXkgSG91ciBJSWYgSW5kZXhPZiAnICtcbiAgICAgICdJbnRlcnNlY3Rpb24gSW50ZXJzZWN0cyBJc0VtcHR5IElzTmFuIElzU2VsZkludGVyc2VjdGluZyBMZW5ndGggTGVuZ3RoR2VvZGV0aWMgTG9nIE1heCBNZWFuIE1pbGxpc2Vjb25kIE1pbiBNaW51dGUgTW9udGggJyArXG4gICAgICAnTXVsdGlQYXJ0VG9TaW5nbGVQYXJ0IE11bHRpcG9pbnQgTmV4dFNlcXVlbmNlVmFsdWUgTm93IE51bWJlciBPcmRlckJ5IE92ZXJsYXBzIFBvaW50IFBvbHlnb24gJyArXG4gICAgICAnUG9seWxpbmUgUG9ydGFsIFBvdyBSYW5kb20gUmVsYXRlIFJldmVyc2UgUmluZ0lzQ2xvY2tXaXNlIFJvdW5kIFNlY29uZCBTZXRHZW9tZXRyeSBTaW4gU29ydCBTcXJ0IFN0ZGV2IFN1bSAnICtcbiAgICAgICdTeW1tZXRyaWNEaWZmZXJlbmNlIFRhbiBUZXh0IFRpbWVzdGFtcCBUb2RheSBUb0xvY2FsIFRvcCBUb3VjaGVzIFRvVVRDIFRyYWNrQ3VycmVudFRpbWUgJyArXG4gICAgICAnVHJhY2tHZW9tZXRyeVdpbmRvdyBUcmFja0luZGV4IFRyYWNrU3RhcnRUaW1lIFRyYWNrV2luZG93IFR5cGVPZiBVbmlvbiBVcmxFbmNvZGUgVmFyaWFuY2UgJyArXG4gICAgICAnV2Vla2RheSBXaGVuIFdpdGhpbiBZZWFyICdcbiAgfTtcbiAgY29uc3QgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXFxcJFtkYXRhc3RvcmV8ZmVhdHVyZXxsYXllcnxtYXB8bWVhc3VyZXxzb3VyY2VmZWF0dXJlfHNvdXJjZWxheWVyfHRhcmdldGZlYXR1cmV8dGFyZ2V0bGF5ZXJ8dmFsdWV8dmlld10rJ1xuICB9O1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYigwW29PXVswLTddKyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRVxuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLFxuICAgIGVuZDogJ1xcXFx9JyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtdIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgY29uc3QgVEVNUExBVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICBOVU1CRVIsXG4gICAgaGxqcy5SRUdFWFBfTU9ERVxuICBdO1xuICBjb25zdCBQQVJBTVNfQ09OVEFJTlMgPSBTVUJTVC5jb250YWlucy5jb25jYXQoW1xuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FyY0dJUyBBcmNhZGUnLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBTWU1CT0wsXG4gICAgICBOVU1CRVIsXG4gICAgICB7IC8vIG9iamVjdCBhdHRyIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogL1t7LF1cXHMqLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsXG4gICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHsgLy8gXCJ2YWx1ZVwiIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIocmV0dXJuKVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKFxcXFwoLio/XFxcXCl8JyArIElERU5UX1JFICsgJylcXFxccyo9PicsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiBJREVOVF9SRVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpL1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgYmVnaW46IElERU5UX1JFXG4gICAgICAgICAgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFBBUkFNU19DT05UQUlOU1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogL1xcW3wlL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbKC5dL1xuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMoPyEhKS9cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcmNhZGU7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBvcHRpb25hbChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoJywgcmUsICcpPycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEMrK1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG5XZWJzaXRlOiBodHRwczovL2lzb2NwcC5vcmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjUGx1c1BsdXMoaGxqcykge1xuICAvLyBhZGRlZCBmb3IgaGlzdG9yaWMgcmVhc29ucyBiZWNhdXNlIGBobGpzLkNfTElORV9DT01NRU5UX01PREVgIGRvZXNcbiAgLy8gbm90IGluY2x1ZGUgc3VjaCBzdXBwb3J0IG5vciBjYW4gd2UgYmUgc3VyZSBhbGwgdGhlIGdyYW1tYXJzIGRlcGVuZGluZ1xuICAvLyBvbiBpdCB3b3VsZCBkZXNpcmUgdGhpcyBiZWhhdmlvclxuICBjb25zdCBDX0xJTkVfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcvLycsICckJywge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi9cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICBjb25zdCBERUNMVFlQRV9BVVRPX1JFID0gJ2RlY2x0eXBlXFxcXChhdXRvXFxcXCknO1xuICBjb25zdCBOQU1FU1BBQ0VfUkUgPSAnW2EtekEtWl9dXFxcXHcqOjonO1xuICBjb25zdCBURU1QTEFURV9BUkdVTUVOVF9SRSA9ICc8W148Pl0rPic7XG4gIGNvbnN0IEZVTkNUSU9OX1RZUEVfUkUgPSAnKCcgK1xuICAgIERFQ0xUWVBFX0FVVE9fUkUgKyAnfCcgK1xuICAgIG9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgK1xuICAgICdbYS16QS1aX11cXFxcdyonICsgb3B0aW9uYWwoVEVNUExBVEVfQVJHVU1FTlRfUkUpICtcbiAgJyknO1xuICBjb25zdCBDUFBfUFJJTUlUSVZFX1RZUEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnXFxcXGJbYS16XFxcXGRfXSpfdFxcXFxiJ1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9lc2NhcGVcbiAgLy8gXFxcXCBcXHggXFx4RkYgXFx1MjgzNyBcXHUwMDMyMzc0NyBcXDM3NFxuICBjb25zdCBDSEFSQUNURVJfRVNDQVBFUyA9ICdcXFxcXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxcXFMpJztcbiAgY29uc3QgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVfEwpP1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XFwnKCcgKyBDSEFSQUNURVJfRVNDQVBFUyArIFwifC4pXCIsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfSxcbiAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICBiZWdpbjogLyg/OnU4P3xVfEwpP1JcIihbXigpXFxcXCBdezAsMTZ9KVxcKC8sXG4gICAgICAgIGVuZDogL1xcKShbXigpXFxcXCBdezAsMTZ9KVwiL1xuICAgICAgfSlcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJygtPylcXFxcYihbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoKGxsfExMfGx8TCkodXxVKT98KHV8VSkobGx8TEx8bHxMKT98ZnxGfGJ8QiknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sXG4gICAgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgJyArXG4gICAgICAgICdwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ1xuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC88Lio/Pi9cbiAgICAgIH0sXG4gICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBUSVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogb3B0aW9uYWwoTkFNRVNQQUNFX1JFKSArIGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fVElUTEUgPSBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCc7XG5cbiAgY29uc3QgQ09NTU9OX0NQUF9ISU5UUyA9IFtcbiAgICAnYXNpbicsXG4gICAgJ2F0YW4yJyxcbiAgICAnYXRhbicsXG4gICAgJ2NhbGxvYycsXG4gICAgJ2NlaWwnLFxuICAgICdjb3NoJyxcbiAgICAnY29zJyxcbiAgICAnZXhpdCcsXG4gICAgJ2V4cCcsXG4gICAgJ2ZhYnMnLFxuICAgICdmbG9vcicsXG4gICAgJ2Ztb2QnLFxuICAgICdmcHJpbnRmJyxcbiAgICAnZnB1dHMnLFxuICAgICdmcmVlJyxcbiAgICAnZnJleHAnLFxuICAgICdhdXRvX3B0cicsXG4gICAgJ2RlcXVlJyxcbiAgICAnbGlzdCcsXG4gICAgJ3F1ZXVlJyxcbiAgICAnc3RhY2snLFxuICAgICd2ZWN0b3InLFxuICAgICdtYXAnLFxuICAgICdzZXQnLFxuICAgICdwYWlyJyxcbiAgICAnYml0c2V0JyxcbiAgICAnbXVsdGlzZXQnLFxuICAgICdtdWx0aW1hcCcsXG4gICAgJ3Vub3JkZXJlZF9zZXQnLFxuICAgICdmc2NhbmYnLFxuICAgICdmdXR1cmUnLFxuICAgICdpc2FsbnVtJyxcbiAgICAnaXNhbHBoYScsXG4gICAgJ2lzY250cmwnLFxuICAgICdpc2RpZ2l0JyxcbiAgICAnaXNncmFwaCcsXG4gICAgJ2lzbG93ZXInLFxuICAgICdpc3ByaW50JyxcbiAgICAnaXNwdW5jdCcsXG4gICAgJ2lzc3BhY2UnLFxuICAgICdpc3VwcGVyJyxcbiAgICAnaXN4ZGlnaXQnLFxuICAgICd0b2xvd2VyJyxcbiAgICAndG91cHBlcicsXG4gICAgJ2xhYnMnLFxuICAgICdsZGV4cCcsXG4gICAgJ2xvZzEwJyxcbiAgICAnbG9nJyxcbiAgICAnbWFsbG9jJyxcbiAgICAncmVhbGxvYycsXG4gICAgJ21lbWNocicsXG4gICAgJ21lbWNtcCcsXG4gICAgJ21lbWNweScsXG4gICAgJ21lbXNldCcsXG4gICAgJ21vZGYnLFxuICAgICdwb3cnLFxuICAgICdwcmludGYnLFxuICAgICdwdXRjaGFyJyxcbiAgICAncHV0cycsXG4gICAgJ3NjYW5mJyxcbiAgICAnc2luaCcsXG4gICAgJ3NpbicsXG4gICAgJ3NucHJpbnRmJyxcbiAgICAnc3ByaW50ZicsXG4gICAgJ3NxcnQnLFxuICAgICdzc2NhbmYnLFxuICAgICdzdHJjYXQnLFxuICAgICdzdHJjaHInLFxuICAgICdzdHJjbXAnLFxuICAgICdzdHJjcHknLFxuICAgICdzdHJjc3BuJyxcbiAgICAnc3RybGVuJyxcbiAgICAnc3RybmNhdCcsXG4gICAgJ3N0cm5jbXAnLFxuICAgICdzdHJuY3B5JyxcbiAgICAnc3RycGJyaycsXG4gICAgJ3N0cnJjaHInLFxuICAgICdzdHJzcG4nLFxuICAgICdzdHJzdHInLFxuICAgICd0YW5oJyxcbiAgICAndGFuJyxcbiAgICAndW5vcmRlcmVkX21hcCcsXG4gICAgJ3Vub3JkZXJlZF9tdWx0aXNldCcsXG4gICAgJ3Vub3JkZXJlZF9tdWx0aW1hcCcsXG4gICAgJ3ByaW9yaXR5X3F1ZXVlJyxcbiAgICAnbWFrZV9wYWlyJyxcbiAgICAnYXJyYXknLFxuICAgICdzaGFyZWRfcHRyJyxcbiAgICAnYWJvcnQnLFxuICAgICd0ZXJtaW5hdGUnLFxuICAgICdhYnMnLFxuICAgICdhY29zJyxcbiAgICAndmZwcmludGYnLFxuICAgICd2cHJpbnRmJyxcbiAgICAndnNwcmludGYnLFxuICAgICdlbmRsJyxcbiAgICAnaW5pdGlhbGl6ZXJfbGlzdCcsXG4gICAgJ3VuaXF1ZV9wdHInLFxuICAgICdjb21wbGV4JyxcbiAgICAnaW1hZ2luYXJ5JyxcbiAgICAnc3RkJyxcbiAgICAnc3RyaW5nJyxcbiAgICAnd3N0cmluZycsXG4gICAgJ2NpbicsXG4gICAgJ2NvdXQnLFxuICAgICdjZXJyJyxcbiAgICAnY2xvZycsXG4gICAgJ3N0ZGluJyxcbiAgICAnc3Rkb3V0JyxcbiAgICAnc3RkZXJyJyxcbiAgICAnc3RyaW5nc3RyZWFtJyxcbiAgICAnaXN0cmluZ3N0cmVhbScsXG4gICAgJ29zdHJpbmdzdHJlYW0nXG4gIF07XG5cbiAgY29uc3QgQ1BQX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNoYXI4X3QgY2hhcjE2X3QgY2hhcjMyX3QgY2F0Y2ggaW1wb3J0IG1vZHVsZSBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgJyArXG4gICAgICAnZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlICcgK1xuICAgICAgJ3Vuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCAnICtcbiAgICAgICdkbyBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIHVzaW5nIGFzbSBjYXNlIHR5cGVpZCB3Y2hhcl90ICcgK1xuICAgICAgJ3Nob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWduYXMgYWxpZ25vZiBjb25zdGV4cHIgY29uc3RldmFsIGNvbnN0aW5pdCBkZWNsdHlwZSAnICtcbiAgICAgICdjb25jZXB0IGNvX2F3YWl0IGNvX3JldHVybiBjb195aWVsZCByZXF1aXJlcyAnICtcbiAgICAgICdub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBmaW5hbCBvdmVycmlkZSAnICtcbiAgICAgICdhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgJyArXG4gICAgICAnYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyAnICtcbiAgICAgICdhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gJyArXG4gICAgICAnYW5kIGFuZF9lcSBiaXRhbmQgYml0b3IgY29tcGwgbm90IG5vdF9lcSBvciBvcl9lcSB4b3IgeG9yX2VxJyxcbiAgICBidWlsdF9pbjogJ19Cb29sIF9Db21wbGV4IF9JbWFnaW5hcnknLFxuICAgIF9yZWxldmFuY2VfaGludHM6IENPTU1PTl9DUFBfSElOVFMsXG4gICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbnVsbHB0ciBOVUxMJ1xuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0RJU1BBVENIID0ge1xuICAgIGNsYXNzTmFtZTogXCJmdW5jdGlvbi5kaXNwYXRjaFwiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAvXFxiLyxcbiAgICAgIC8oPyFkZWNsdHlwZSkvLFxuICAgICAgLyg/IWlmKS8sXG4gICAgICAvKD8hZm9yKS8sXG4gICAgICAvKD8hd2hpbGUpLyxcbiAgICAgIGhsanMuSURFTlRfUkUsXG4gICAgICBsb29rYWhlYWQoL1xccypcXCgvKSlcbiAgfTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRBSU5TID0gW1xuICAgIEZVTkNUSU9OX0RJU1BBVENILFxuICAgIFBSRVBST0NFU1NPUixcbiAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJTLFxuICAgIFNUUklOR1NcbiAgXTtcblxuXG4gIGNvbnN0IEVYUFJFU1NJT05fQ09OVEVYVCA9IHtcbiAgICAvLyBUaGlzIG1vZGUgY292ZXJzIGV4cHJlc3Npb24gY29udGV4dCB3aGVyZSB3ZSBjYW4ndCBleHBlY3QgYSBmdW5jdGlvblxuICAgIC8vIGRlZmluaXRpb24gYW5kIHNob3VsZG4ndCBoaWdobGlnaHQgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIG9uZTpcbiAgICAvLyBgcmV0dXJuIHNvbWUoKWAsIGBlbHNlIGlmKClgLCBgKHgqc3VtKDEsIDIpKWBcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLz0vLFxuICAgICAgICBlbmQ6IC87L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmV3IHRocm93IHJldHVybiBlbHNlJyxcbiAgICAgICAgZW5kOiAvOy9cbiAgICAgIH1cbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoWyAnc2VsZicgXSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0RFQ0xBUkFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbjogJygnICsgRlVOQ1RJT05fVFlQRV9SRSArICdbXFxcXComXFxcXHNdKykrJyArIEZVTkNUSU9OX1RJVExFLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGVuZDogL1t7Oz1dLyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1teXFx3XFxzXFwqJjo8Pi5dLyxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY29uZnVzZWQgYXMgdGhlIGZ1bmN0aW9uIHRpdGxlXG4gICAgICAgIGJlZ2luOiBERUNMVFlQRV9BVVRPX1JFLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBGVU5DVElPTl9USVRMRSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbIFRJVExFX01PREUgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgbG9vay1iZWhpbmQgb24gdGhlIGJlbG93IHJ1bGVcbiAgICAgIC8vIHRvIHByZXZlbnQgaXQgZnJvbSBncmFiYmluZyB0aGUgZmluYWwgOiBpbiBhIDo6IHBhaXJcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86Oi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGluaXRpYWxpemVyc1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgIE5VTUJFUlNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgICAgICAgIC8vIENvdW50IG1hdGNoaW5nIHBhcmVudGhlc2VzLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgUFJFUFJPQ0VTU09SXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0MrKycsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2NjJyxcbiAgICAgICdjKysnLFxuICAgICAgJ2grKycsXG4gICAgICAnaHBwJyxcbiAgICAgICdoaCcsXG4gICAgICAnaHh4JyxcbiAgICAgICdjeHgnXG4gICAgXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY2xhc3NOYW1lQWxpYXNlczoge1xuICAgICAgXCJmdW5jdGlvbi5kaXNwYXRjaFwiOiBcImJ1aWx0X2luXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXS5jb25jYXQoXG4gICAgICBFWFBSRVNTSU9OX0NPTlRFWFQsXG4gICAgICBGVU5DVElPTl9ERUNMQVJBVElPTixcbiAgICAgIEZVTkNUSU9OX0RJU1BBVENILFxuICAgICAgRVhQUkVTU0lPTl9DT05UQUlOUyxcbiAgICAgIFtcbiAgICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAgICB7IC8vIGNvbnRhaW5lcnM6IGllLCBgdmVjdG9yIDxpbnQ+IHJvb21zICg5KTtgXG4gICAgICAgICAgYmVnaW46ICdcXFxcYihkZXF1ZXxsaXN0fHF1ZXVlfHByaW9yaXR5X3F1ZXVlfHBhaXJ8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxcXFxzKjwnLFxuICAgICAgICAgIGVuZDogJz4nLFxuICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgIENQUF9QUklNSVRJVkVfVFlQRVNcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEU1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdlbnVtIGNsYXNzIHN0cnVjdCB1bmlvbicsXG4gICAgICAgICAgZW5kOiAvW3s7Ojw+PV0vLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6IFwiZmluYWwgY2xhc3Mgc3RydWN0XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0pLFxuICAgIGV4cG9ydHM6IHtcbiAgICAgIHByZXByb2Nlc3NvcjogUFJFUFJPQ0VTU09SLFxuICAgICAgc3RyaW5nczogU1RSSU5HUyxcbiAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICB9XG4gIH07XG59XG5cbi8qXG5MYW5ndWFnZTogQXJkdWlub1xuQXV0aG9yOiBTdGVmYW5pYSBNZWxsYWkgPHMubWVsbGFpQGFyZHVpbm8uY2M+XG5EZXNjcmlwdGlvbjogVGhlIEFyZHVpbm/CriBMYW5ndWFnZSBpcyBhIHN1cGVyc2V0IG9mIEMrKy4gVGhpcyBydWxlcyBhcmUgZGVzaWduZWQgdG8gaGlnaGxpZ2h0IHRoZSBBcmR1aW5vwq4gc291cmNlIGNvZGUuIEZvciBpbmZvIGFib3V0IGxhbmd1YWdlIHNlZSBodHRwOi8vd3d3LmFyZHVpbm8uY2MuXG5XZWJzaXRlOiBodHRwczovL3d3dy5hcmR1aW5vLmNjXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYXJkdWlubyhobGpzKSB7XG4gIGNvbnN0IEFSRFVJTk9fS1cgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdib29sZWFuIGJ5dGUgd29yZCBTdHJpbmcnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0tleWJvYXJkQ29udHJvbGxlciBNb3VzZUNvbnRyb2xsZXIgU29mdHdhcmVTZXJpYWwgJyArXG4gICAgICAnRXRoZXJuZXRTZXJ2ZXIgRXRoZXJuZXRDbGllbnQgTGlxdWlkQ3J5c3RhbCAnICtcbiAgICAgICdSb2JvdENvbnRyb2wgR1NNVm9pY2VDYWxsIEV0aGVybmV0VURQIEVzcGxvcmFURlQgJyArXG4gICAgICAnSHR0cENsaWVudCBSb2JvdE1vdG9yIFdpRmlDbGllbnQgR1NNU2Nhbm5lciAnICtcbiAgICAgICdGaWxlU3lzdGVtIFNjaGVkdWxlciBHU01TZXJ2ZXIgWXVuQ2xpZW50IFl1blNlcnZlciAnICtcbiAgICAgICdJUEFkZHJlc3MgR1NNQ2xpZW50IEdTTU1vZGVtIEtleWJvYXJkIEV0aGVybmV0ICcgK1xuICAgICAgJ0NvbnNvbGUgR1NNQmFuZCBFc3Bsb3JhIFN0ZXBwZXIgUHJvY2VzcyAnICtcbiAgICAgICdXaUZpVURQIEdTTV9TTVMgTWFpbGJveCBVU0JIb3N0IEZpcm1hdGEgUEltYWdlICcgK1xuICAgICAgJ0NsaWVudCBTZXJ2ZXIgR1NNUElOIEZpbGVJTyBCcmlkZ2UgU2VyaWFsICcgK1xuICAgICAgJ0VFUFJPTSBTdHJlYW0gTW91c2UgQXVkaW8gU2Vydm8gRmlsZSBUYXNrICcgK1xuICAgICAgJ0dQUlMgV2lGaSBXaXJlIFRGVCBHU00gU1BJIFNEICcsXG4gICAgXzpcbiAgICAgICdzZXR1cCBsb29wICcgK1xuICAgICAgJ3J1blNoZWxsQ29tbWFuZEFzeW5jaHJvbm91c2x5IGFuYWxvZ1dyaXRlUmVzb2x1dGlvbiAnICtcbiAgICAgICdyZXRyaWV2ZUNhbGxpbmdOdW1iZXIgcHJpbnRGaXJtd2FyZVZlcnNpb24gJyArXG4gICAgICAnYW5hbG9nUmVhZFJlc29sdXRpb24gc2VuZERpZ2l0YWxQb3J0UGFpciAnICtcbiAgICAgICdub0xpc3Rlbk9uTG9jYWxob3N0IHJlYWRKb3lzdGlja0J1dHRvbiBzZXRGaXJtd2FyZVZlcnNpb24gJyArXG4gICAgICAncmVhZEpveXN0aWNrU3dpdGNoIHNjcm9sbERpc3BsYXlSaWdodCBnZXRWb2ljZUNhbGxTdGF0dXMgJyArXG4gICAgICAnc2Nyb2xsRGlzcGxheUxlZnQgd3JpdGVNaWNyb3NlY29uZHMgZGVsYXlNaWNyb3NlY29uZHMgJyArXG4gICAgICAnYmVnaW5UcmFuc21pc3Npb24gZ2V0U2lnbmFsU3RyZW5ndGggcnVuQXN5bmNocm9ub3VzbHkgJyArXG4gICAgICAnZ2V0QXN5bmNocm9ub3VzbHkgbGlzdGVuT25Mb2NhbGhvc3QgZ2V0Q3VycmVudENhcnJpZXIgJyArXG4gICAgICAncmVhZEFjY2VsZXJvbWV0ZXIgbWVzc2FnZUF2YWlsYWJsZSBzZW5kRGlnaXRhbFBvcnRzICcgK1xuICAgICAgJ2xpbmVGb2xsb3dDb25maWcgY291bnRyeU5hbWVXcml0ZSBydW5TaGVsbENvbW1hbmQgJyArXG4gICAgICAncmVhZFN0cmluZ1VudGlsIHJld2luZERpcmVjdG9yeSByZWFkVGVtcGVyYXR1cmUgJyArXG4gICAgICAnc2V0Q2xvY2tEaXZpZGVyIHJlYWRMaWdodFNlbnNvciBlbmRUcmFuc21pc3Npb24gJyArXG4gICAgICAnYW5hbG9nUmVmZXJlbmNlIGRldGFjaEludGVycnVwdCBjb3VudHJ5TmFtZVJlYWQgJyArXG4gICAgICAnYXR0YWNoSW50ZXJydXB0IGVuY3J5cHRpb25UeXBlIHJlYWRCeXRlc1VudGlsICcgK1xuICAgICAgJ3JvYm90TmFtZVdyaXRlIHJlYWRNaWNyb3Bob25lIHJvYm90TmFtZVJlYWQgY2l0eU5hbWVXcml0ZSAnICtcbiAgICAgICd1c2VyTmFtZVdyaXRlIHJlYWRKb3lzdGlja1kgcmVhZEpveXN0aWNrWCBtb3VzZVJlbGVhc2VkICcgK1xuICAgICAgJ29wZW5OZXh0RmlsZSBzY2FuTmV0d29ya3Mgbm9JbnRlcnJ1cHRzIGRpZ2l0YWxXcml0ZSAnICtcbiAgICAgICdiZWdpblNwZWFrZXIgbW91c2VQcmVzc2VkIGlzQWN0aW9uRG9uZSBtb3VzZURyYWdnZWQgJyArXG4gICAgICAnZGlzcGxheUxvZ29zIG5vQXV0b3Njcm9sbCBhZGRQYXJhbWV0ZXIgcmVtb3RlTnVtYmVyICcgK1xuICAgICAgJ2dldE1vZGlmaWVycyBrZXlib2FyZFJlYWQgdXNlck5hbWVSZWFkIHdhaXRDb250aW51ZSAnICtcbiAgICAgICdwcm9jZXNzSW5wdXQgcGFyc2VDb21tYW5kIHByaW50VmVyc2lvbiByZWFkTmV0d29ya3MgJyArXG4gICAgICAnd3JpdGVNZXNzYWdlIGJsaW5rVmVyc2lvbiBjaXR5TmFtZVJlYWQgcmVhZE1lc3NhZ2UgJyArXG4gICAgICAnc2V0RGF0YU1vZGUgcGFyc2VQYWNrZXQgaXNMaXN0ZW5pbmcgc2V0Qml0T3JkZXIgJyArXG4gICAgICAnYmVnaW5QYWNrZXQgaXNEaXJlY3RvcnkgbW90b3JzV3JpdGUgZHJhd0NvbXBhc3MgJyArXG4gICAgICAnZGlnaXRhbFJlYWQgY2xlYXJTY3JlZW4gc2VyaWFsRXZlbnQgcmlnaHRUb0xlZnQgJyArXG4gICAgICAnc2V0VGV4dFNpemUgbGVmdFRvUmlnaHQgcmVxdWVzdEZyb20ga2V5UmVsZWFzZWQgJyArXG4gICAgICAnY29tcGFzc1JlYWQgYW5hbG9nV3JpdGUgaW50ZXJydXB0cyBXaUZpU2VydmVyICcgK1xuICAgICAgJ2Rpc2Nvbm5lY3QgcGxheU1lbG9keSBwYXJzZUZsb2F0IGF1dG9zY3JvbGwgJyArXG4gICAgICAnZ2V0UElOVXNlZCBzZXRQSU5Vc2VkIHNldFRpbWVvdXQgc2VuZEFuYWxvZyAnICtcbiAgICAgICdyZWFkU2xpZGVyIGFuYWxvZ1JlYWQgYmVnaW5Xcml0ZSBjcmVhdGVDaGFyICcgK1xuICAgICAgJ21vdG9yc1N0b3Aga2V5UHJlc3NlZCB0ZW1wb1dyaXRlIHJlYWRCdXR0b24gJyArXG4gICAgICAnc3VibmV0TWFzayBkZWJ1Z1ByaW50IG1hY0FkZHJlc3Mgd3JpdGVHcmVlbiAnICtcbiAgICAgICdyYW5kb21TZWVkIGF0dGFjaEdQUlMgcmVhZFN0cmluZyBzZW5kU3RyaW5nICcgK1xuICAgICAgJ3JlbW90ZVBvcnQgcmVsZWFzZUFsbCBtb3VzZU1vdmVkIGJhY2tncm91bmQgJyArXG4gICAgICAnZ2V0WENoYW5nZSBnZXRZQ2hhbmdlIGFuc3dlckNhbGwgZ2V0UmVzdWx0ICcgK1xuICAgICAgJ3ZvaWNlQ2FsbCBlbmRQYWNrZXQgY29uc3RyYWluIGdldFNvY2tldCB3cml0ZUpTT04gJyArXG4gICAgICAnZ2V0QnV0dG9uIGF2YWlsYWJsZSBjb25uZWN0ZWQgZmluZFVudGlsIHJlYWRCeXRlcyAnICtcbiAgICAgICdleGl0VmFsdWUgcmVhZEdyZWVuIHdyaXRlQmx1ZSBzdGFydExvb3AgSVBBZGRyZXNzICcgK1xuICAgICAgJ2lzUHJlc3NlZCBzZW5kU3lzZXggcGF1c2VNb2RlIGdhdGV3YXlJUCBzZXRDdXJzb3IgJyArXG4gICAgICAnZ2V0T2VtS2V5IHR1bmVXcml0ZSBub0Rpc3BsYXkgbG9hZEltYWdlIHN3aXRjaFBJTiAnICtcbiAgICAgICdvblJlcXVlc3Qgb25SZWNlaXZlIGNoYW5nZVBJTiBwbGF5RmlsZSBub0J1ZmZlciAnICtcbiAgICAgICdwYXJzZUludCBvdmVyZmxvdyBjaGVja1BJTiBrbm9iUmVhZCBiZWdpblRGVCAnICtcbiAgICAgICdiaXRDbGVhciB1cGRhdGVJUiBiaXRXcml0ZSBwb3NpdGlvbiB3cml0ZVJHQiAnICtcbiAgICAgICdoaWdoQnl0ZSB3cml0ZVJlZCBzZXRTcGVlZCByZWFkQmx1ZSBub1N0cm9rZSAnICtcbiAgICAgICdyZW1vdGVJUCB0cmFuc2ZlciBzaHV0ZG93biBoYW5nQ2FsbCBiZWdpblNNUyAnICtcbiAgICAgICdlbmRXcml0ZSBhdHRhY2hlZCBtYWludGFpbiBub0N1cnNvciBjaGVja1JlZyAnICtcbiAgICAgICdjaGVja1BVSyBzaGlmdE91dCBpc1ZhbGlkIHNoaWZ0SW4gcHVsc2VJbiAnICtcbiAgICAgICdjb25uZWN0IHByaW50bG4gbG9jYWxJUCBwaW5Nb2RlIGdldElNRUkgJyArXG4gICAgICAnZGlzcGxheSBub0JsaW5rIHByb2Nlc3MgZ2V0QmFuZCBydW5uaW5nIGJlZ2luU0QgJyArXG4gICAgICAnZHJhd0JNUCBsb3dCeXRlIHNldEJhbmQgcmVsZWFzZSBiaXRSZWFkIHByZXBhcmUgJyArXG4gICAgICAncG9pbnRUbyByZWFkUmVkIHNldE1vZGUgbm9GaWxsIHJlbW92ZSBsaXN0ZW4gJyArXG4gICAgICAnc3Ryb2tlIGRldGFjaCBhdHRhY2ggbm9Ub25lIGV4aXN0cyBidWZmZXIgJyArXG4gICAgICAnaGVpZ2h0IGJpdFNldCBjaXJjbGUgY29uZmlnIGN1cnNvciByYW5kb20gJyArXG4gICAgICAnSVJyZWFkIHNldEROUyBlbmRTTVMgZ2V0S2V5IG1pY3JvcyAnICtcbiAgICAgICdtaWxsaXMgYmVnaW4gcHJpbnQgd3JpdGUgcmVhZHkgZmx1c2ggd2lkdGggJyArXG4gICAgICAnaXNQSU4gYmxpbmsgY2xlYXIgcHJlc3MgbWtkaXIgcm1kaXIgY2xvc2UgJyArXG4gICAgICAncG9pbnQgeWllbGQgaW1hZ2UgQlNTSUQgY2xpY2sgZGVsYXkgJyArXG4gICAgICAncmVhZCB0ZXh0IG1vdmUgcGVlayBiZWVwIHJlY3QgbGluZSBvcGVuICcgK1xuICAgICAgJ3NlZWsgZmlsbCBzaXplIHR1cm4gc3RvcCBob21lIGZpbmQgJyArXG4gICAgICAnc3RlcCB0b25lIHNxcnQgUlNTSSBTU0lEICcgK1xuICAgICAgJ2VuZCBiaXQgdGFuIGNvcyBzaW4gcG93IG1hcCBhYnMgbWF4ICcgK1xuICAgICAgJ21pbiBnZXQgcnVuIHB1dCcsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdESUdJVEFMX01FU1NBR0UgRklSTUFUQV9TVFJJTkcgQU5BTE9HX01FU1NBR0UgJyArXG4gICAgICAnUkVQT1JUX0RJR0lUQUwgUkVQT1JUX0FOQUxPRyBJTlBVVF9QVUxMVVAgJyArXG4gICAgICAnU0VUX1BJTl9NT0RFIElOVEVSTkFMMlY1NiBTWVNURU1fUkVTRVQgTEVEX0JVSUxUSU4gJyArXG4gICAgICAnSU5URVJOQUwxVjEgU1lTRVhfU1RBUlQgSU5URVJOQUwgRVhURVJOQUwgJyArXG4gICAgICAnREVGQVVMVCBPVVRQVVQgSU5QVVQgSElHSCBMT1cnXG4gIH07XG5cbiAgY29uc3QgQVJEVUlOTyA9IGNQbHVzUGx1cyhobGpzKTtcblxuICBjb25zdCBrd3MgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsYW55Pn0gKi8gKEFSRFVJTk8ua2V5d29yZHMpO1xuXG4gIGt3cy5rZXl3b3JkICs9ICcgJyArIEFSRFVJTk9fS1cua2V5d29yZDtcbiAga3dzLmxpdGVyYWwgKz0gJyAnICsgQVJEVUlOT19LVy5saXRlcmFsO1xuICBrd3MuYnVpbHRfaW4gKz0gJyAnICsgQVJEVUlOT19LVy5idWlsdF9pbjtcbiAga3dzLl8gKz0gJyAnICsgQVJEVUlOT19LVy5fO1xuXG4gIEFSRFVJTk8ubmFtZSA9ICdBcmR1aW5vJztcbiAgQVJEVUlOTy5hbGlhc2VzID0gWydpbm8nXTtcbiAgQVJEVUlOTy5zdXBlcnNldE9mID0gXCJjcHBcIjtcblxuICByZXR1cm4gQVJEVUlOTztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcmR1aW5vO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEFSTSBBc3NlbWJseVxuQXV0aG9yOiBEYW4gUGFuemFyZWxsYSA8YWxzb2VscEBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogQVJNIEFzc2VtYmx5IGluY2x1ZGluZyBUaHVtYiBhbmQgVGh1bWIyIGluc3RydWN0aW9uc1xuQ2F0ZWdvcnk6IGFzc2VtYmxlclxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFybWFzbShobGpzKSB7XG4gIC8vIGxvY2FsIGxhYmVsczogJT9bRkJdP1tBVF0/XFxkezEsMn1cXHcrXG5cbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5DT01NRU5UKCdeWyBcXFxcdF0qKD89IyknLCAnJCcsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWVcbiAgICAgIH0pLFxuICAgICAgaGxqcy5DT01NRU5UKCdbO0BdJywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FSTSBBc3NlbWJseScsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbJ2FybSddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogJ1xcXFwuPycgKyBobGpzLklERU5UX1JFLFxuICAgICAgbWV0YTpcbiAgICAgICAgLy8gR05VIHByZXByb2NzXG4gICAgICAgICcuMmJ5dGUgLjRieXRlIC5hbGlnbiAuYXNjaWkgLmFzY2l6IC5iYWxpZ24gLmJ5dGUgLmNvZGUgLmRhdGEgLmVsc2UgLmVuZCAuZW5kaWYgLmVuZG0gLmVuZHIgLmVxdSAuZXJyIC5leGl0bSAuZXh0ZXJuIC5nbG9iYWwgLmh3b3JkIC5pZiAuaWZkZWYgLmlmbmRlZiAuaW5jbHVkZSAuaXJwIC5sb25nIC5tYWNybyAucmVwdCAucmVxIC5zZWN0aW9uIC5zZXQgLnNraXAgLnNwYWNlIC50ZXh0IC53b3JkIC5hcm0gLnRodW1iIC5jb2RlMTYgLmNvZGUzMiAuZm9yY2VfdGh1bWIgLnRodW1iX2Z1bmMgLmx0b3JnICcgK1xuICAgICAgICAvLyBBUk0gZGlyZWN0aXZlc1xuICAgICAgICAnQUxJQVMgQUxJR04gQVJNIEFSRUEgQVNTRVJUIEFUVFIgQ04gQ09ERSBDT0RFMTYgQ09ERTMyIENPTU1PTiBDUCBEQVRBIERDQiBEQ0QgRENEVSBEQ0RPIERDRkQgRENGRFUgRENJIERDUSBEQ1FVIERDVyBEQ1dVIEROIEVMSUYgRUxTRSBFTkQgRU5ERlVOQyBFTkRJRiBFTkRQIEVOVFJZIEVRVSBFWFBPUlQgRVhQT1JUQVMgRVhURVJOIEZJRUxEIEZJTEwgRlVOQ1RJT04gR0JMQSBHQkxMIEdCTFMgR0VUIEdMT0JBTCBJRiBJTVBPUlQgSU5DQklOIElOQ0xVREUgSU5GTyBLRUVQIExDTEEgTENMTCBMQ0xTIExUT1JHIE1BQ1JPIE1BUCBNRU5EIE1FWElUIE5PRlAgT1BUIFBSRVNFUlZFOCBQUk9DIFFOIFJFQURPTkxZIFJFTE9DIFJFUVVJUkUgUkVRVUlSRTggUkxJU1QgRk4gUk9VVCBTRVRBIFNFVEwgU0VUUyBTTiBTUEFDRSBTVUJUIFRIVU1CIFRIVU1CWCBUVEwgV0hJTEUgV0VORCAnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdyMCByMSByMiByMyByNCByNSByNiByNyByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnICsgLy8gc3RhbmRhcmQgcmVnaXN0ZXJzXG4gICAgICAgICdwYyBsciBzcCBpcCBzbCBzYiBmcCAnICsgLy8gdHlwaWNhbCByZWdzIHBsdXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAnYTEgYTIgYTMgYTQgdjEgdjIgdjMgdjQgdjUgdjYgdjcgdjggZjAgZjEgZjIgZjMgZjQgZjUgZjYgZjcgJyArIC8vIG1vcmUgcmVncyBhbmQgZnBcbiAgICAgICAgJ3AwIHAxIHAyIHAzIHA0IHA1IHA2IHA3IHA4IHA5IHAxMCBwMTEgcDEyIHAxMyBwMTQgcDE1ICcgKyAvLyBjb3Byb2Nlc3NvciByZWdzXG4gICAgICAgICdjMCBjMSBjMiBjMyBjNCBjNSBjNiBjNyBjOCBjOSBjMTAgYzExIGMxMiBjMTMgYzE0IGMxNSAnICsgLy8gbW9yZSBjb3Byb2NcbiAgICAgICAgJ3EwIHExIHEyIHEzIHE0IHE1IHE2IHE3IHE4IHE5IHExMCBxMTEgcTEyIHExMyBxMTQgcTE1ICcgKyAvLyBhZHZhbmNlZCBTSU1EIE5FT04gcmVnc1xuXG4gICAgICAgIC8vIHByb2dyYW0gc3RhdHVzIHJlZ2lzdGVyc1xuICAgICAgICAnY3Bzcl9jIGNwc3JfeCBjcHNyX3MgY3Bzcl9mIGNwc3JfY3ggY3Bzcl9jeHMgY3Bzcl94cyBjcHNyX3hzZiBjcHNyX3NmIGNwc3JfY3hzZiAnICtcbiAgICAgICAgJ3Nwc3JfYyBzcHNyX3ggc3Bzcl9zIHNwc3JfZiBzcHNyX2N4IHNwc3JfY3hzIHNwc3JfeHMgc3Bzcl94c2Ygc3Bzcl9zZiBzcHNyX2N4c2YgJyArXG5cbiAgICAgICAgLy8gTkVPTiBhbmQgVkZQIHJlZ2lzdGVyc1xuICAgICAgICAnczAgczEgczIgczMgczQgczUgczYgczcgczggczkgczEwIHMxMSBzMTIgczEzIHMxNCBzMTUgJyArXG4gICAgICAgICdzMTYgczE3IHMxOCBzMTkgczIwIHMyMSBzMjIgczIzIHMyNCBzMjUgczI2IHMyNyBzMjggczI5IHMzMCBzMzEgJyArXG4gICAgICAgICdkMCBkMSBkMiBkMyBkNCBkNSBkNiBkNyBkOCBkOSBkMTAgZDExIGQxMiBkMTMgZDE0IGQxNSAnICtcbiAgICAgICAgJ2QxNiBkMTcgZDE4IGQxOSBkMjAgZDIxIGQyMiBkMjMgZDI0IGQyNSBkMjYgZDI3IGQyOCBkMjkgZDMwIGQzMSAnICtcblxuICAgICAgICAne1BDfSB7VkFSfSB7VFJVRX0ge0ZBTFNFfSB7T1BUfSB7Q09ORklHfSB7RU5ESUFOfSB7Q09ERVNJWkV9IHtDUFV9IHtGUFV9IHtBUkNISVRFQ1RVUkV9IHtQQ1NUT1JFT0ZGU0VUfSB7QVJNQVNNX1ZFUlNJT059IHtJTlRFUn0ge1JPUEl9IHtSV1BJfSB7U1dTVH0ge05PU1dTVH0gLiBAJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIC8vIG1uZW1vbmljc1xuICAgICAgICAgICAgJ2FkY3wnICtcbiAgICAgICAgICAgICcocWQ/fHNoP3x1W3FoXT8pP2FkZCg4fDE2KT98dXNhZGE/OHwocXxzaD98dVtxaF0/KT8oYXN8c2EpeHwnICtcbiAgICAgICAgICAgICdhbmR8YWRybD98c2JjfHJzW2JjXXxhc3J8YltseF0/fGJseHxieGp8Y2JuP3p8dGJbYmhdfGJpY3wnICtcbiAgICAgICAgICAgICdiZmN8YmZpfFtzdV1iZnh8YmtwdHxjZHAyP3xjbHp8Y2xyZXh8Y21wfGNtbnxjcHNpW2VkXXxjcHN8JyArXG4gICAgICAgICAgICAnc2V0ZW5kfGRiZ3xkbWJ8ZHNifGVvcnxpc2J8aXRbdGVdezAsM318bHNsfGxzcnxyb3J8cnJ4fCcgK1xuICAgICAgICAgICAgJ2xkbSgoW2lkXVthYl0pfGZbZHNdKT98bGRyKChzfGV4KT9bYmhkXSk/fG1vdnQ/fG12bnxtcmF8bWFyfCcgK1xuICAgICAgICAgICAgJ211bHxbdXNdbXVsbHxzbXVsW2J3dF1bYnRdfHNtdVthc11kfHNtbXVsfHNtbWxhfCcgK1xuICAgICAgICAgICAgJ21sYXx1bWxhYWx8c21sYWw/KFt3YnRdW2J0XXxkKXxtbHN8c21sc2w/W2RzXXxzbWN8c3ZjfHNldnwnICtcbiAgICAgICAgICAgICdtaWEoW2J0XXsyfXxwaCk/fG1ycj9jMj98bWNycjI/fG1yc3xtc3J8b3JyfG9ybnxwa2godGJ8YnQpfHJiaXR8JyArXG4gICAgICAgICAgICAncmV2KDE2fHNoKT98c2VsfFtzdV1zYXQoMTYpP3xub3B8cG9wfHB1c2h8cmZlKFtpZF1bYWJdKT98JyArXG4gICAgICAgICAgICAnc3RtKFtpZF1bYWJdKT98c3RyKGV4KT9bYmhkXT98KHFkPyk/c3VifChzaD98cXx1W3FoXT8pP3N1Yig4fDE2KXwnICtcbiAgICAgICAgICAgICdbc3VdeHQoYT9ofGE/YigxNik/KXxzcnMoW2lkXVthYl0pP3xzd3BiP3xzd2l8c21pfHRzdHx0ZXF8JyArXG4gICAgICAgICAgICAnd2ZlfHdmaXx5aWVsZCcgK1xuICAgICAgICAnKScgK1xuICAgICAgICAnKGVxfG5lfGNzfGNjfG1pfHBsfHZzfHZjfGhpfGxzfGdlfGx0fGd0fGxlfGFsfGhzfGxvKT8nICsgLy8gY29uZGl0aW9uIGNvZGVzXG4gICAgICAgICdbc3B0cnhdPycgKyAvLyBsZWdhbCBwb3N0Zml4ZXNcbiAgICAgICAgJyg/PVxcXFxzKScgLy8gZm9sbG93ZWQgYnkgc3BhY2VcbiAgICAgIH0sXG4gICAgICBDT01NRU5ULFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdbXlxcXFxcXFxcXVxcJycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFx8JyxcbiAgICAgICAgZW5kOiAnXFxcXHwnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyAvLyBoZXhcbiAgICAgICAgICAgIGJlZ2luOiAnWyMkPV0/MHhbMC05YS1mXSsnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIGJpblxuICAgICAgICAgICAgYmVnaW46ICdbIyQ9XT8wYlswMV0rJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBsaXRlcmFsXG4gICAgICAgICAgICBiZWdpbjogJ1sjJD1dXFxcXGQrJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBiYXJlIG51bWJlclxuICAgICAgICAgICAgYmVnaW46ICdcXFxcYlxcXFxkKydcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IC8vIEdOVSBBUk0gc3ludGF4XG4gICAgICAgICAgICBiZWdpbjogJ15bIFxcXFx0XSpbYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSs6J1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBBUk0gc3ludGF4XG4gICAgICAgICAgICBiZWdpbjogJ15bYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSsnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIGxhYmVsIHJlZmVyZW5jZVxuICAgICAgICAgICAgYmVnaW46ICdbPSNdXFxcXHcrJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFybWFzbTtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbG9va2FoZWFkKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJyg/PScsIHJlLCAnKScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbmFsKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJygnLCByZSwgJyk/Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogSFRNTCwgWE1MXG5XZWJzaXRlOiBodHRwczovL3d3dy53My5vcmcvWE1ML1xuQ2F0ZWdvcnk6IGNvbW1vblxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiB4bWwoaGxqcykge1xuICAvLyBFbGVtZW50IG5hbWVzIGNhbiBjb250YWluIGxldHRlcnMsIGRpZ2l0cywgaHlwaGVucywgdW5kZXJzY29yZXMsIGFuZCBwZXJpb2RzXG4gIGNvbnN0IFRBR19OQU1FX1JFID0gY29uY2F0KC9bQS1aX10vLCBvcHRpb25hbCgvW0EtWjAtOV8uLV0qOi8pLCAvW0EtWjAtOV8uLV0qLyk7XG4gIGNvbnN0IFhNTF9JREVOVF9SRSA9IC9bQS1aYS16MC05Ll86LV0rLztcbiAgY29uc3QgWE1MX0VOVElUSUVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46IC8mW2Etel0rO3wmI1swLTldKzt8JiN4W2EtZjAtOV0rOy9cbiAgfTtcbiAgY29uc3QgWE1MX01FVEFfS0VZV09SRFMgPSB7XG4gICAgYmVnaW46IC9cXHMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEta2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvIz9bYS16X11bYS16MS05Xy1dKy8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBYTUxfTUVUQV9QQVJfS0VZV09SRFMgPSBobGpzLmluaGVyaXQoWE1MX01FVEFfS0VZV09SRFMsIHtcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpL1xuICB9KTtcbiAgY29uc3QgQVBPU19NRVRBX1NUUklOR19NT0RFID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge1xuICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ1xuICB9KTtcbiAgY29uc3QgUVVPVEVfTUVUQV9TVFJJTkdfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnXG4gIH0pO1xuICBjb25zdCBUQUdfSU5URVJOQUxTID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGlsbGVnYWw6IC88LyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiBYTUxfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89XFxzKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFsgWE1MX0VOVElUSUVTIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvJy8sXG4gICAgICAgICAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFsgWE1MX0VOVElUSUVTIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvW15cXHNcIic9PD5gXSsvXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0hUTUwsIFhNTCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2h0bWwnLFxuICAgICAgJ3hodG1sJyxcbiAgICAgICdyc3MnLFxuICAgICAgJ2F0b20nLFxuICAgICAgJ3hqYicsXG4gICAgICAneHNkJyxcbiAgICAgICd4c2wnLFxuICAgICAgJ3BsaXN0JyxcbiAgICAgICd3c2YnLFxuICAgICAgJ3N2ZydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvPCFbYS16XS8sXG4gICAgICAgIGVuZDogLz4vLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFhNTF9NRVRBX0tFWVdPUkRTLFxuICAgICAgICAgIFFVT1RFX01FVEFfU1RSSU5HX01PREUsXG4gICAgICAgICAgQVBPU19NRVRBX1NUUklOR19NT0RFLFxuICAgICAgICAgIFhNTF9NRVRBX1BBUl9LRVlXT1JEUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgICAgICBlbmQ6IC9cXF0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvPCFbYS16XS8sXG4gICAgICAgICAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIFhNTF9NRVRBX0tFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgWE1MX01FVEFfUEFSX0tFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgUVVPVEVfTUVUQV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgICAgIEFQT1NfTUVUQV9TVFJJTkdfTU9ERVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgLzwhLS0vLFxuICAgICAgICAvLS0+LyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88IVxcW0NEQVRBXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdXFxdPi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICBYTUxfRU5USVRJRVMsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogLzxcXD94bWwvLFxuICAgICAgICBlbmQ6IC9cXD8+LyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLypcbiAgICAgICAgVGhlIGxvb2thaGVhZCBwYXR0ZXJuICg/PS4uLikgZW5zdXJlcyB0aGF0ICdiZWdpbicgb25seSBtYXRjaGVzXG4gICAgICAgICc8c3R5bGUnIGFzIGEgc2luZ2xlIHdvcmQsIGZvbGxvd2VkIGJ5IGEgd2hpdGVzcGFjZSBvciBhblxuICAgICAgICBlbmRpbmcgYnJha2V0LiBUaGUgJyQnIGlzIG5lZWRlZCBmb3IgdGhlIGxleGVtZSB0byBiZSByZWNvZ25pemVkXG4gICAgICAgIGJ5IGhsanMuc3ViTW9kZSgpIHRoYXQgdGVzdHMgbGV4ZW1lcyBvdXRzaWRlIHRoZSBzdHJlYW0uXG4gICAgICAgICovXG4gICAgICAgIGJlZ2luOiAvPHN0eWxlKD89XFxzfD4pLyxcbiAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgbmFtZTogJ3N0eWxlJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogWyBUQUdfSU5URVJOQUxTIF0sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLzxcXC9zdHlsZT4vLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogW1xuICAgICAgICAgICAgJ2NzcycsXG4gICAgICAgICAgICAneG1sJ1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZSA8c3R5bGUgdGFnIGFib3V0IHRoZSBsb29rYWhlYWQgcGF0dGVyblxuICAgICAgICBiZWdpbjogLzxzY3JpcHQoPz1cXHN8PikvLFxuICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBuYW1lOiAnc2NyaXB0J1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogWyBUQUdfSU5URVJOQUxTIF0sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLzxcXC9zY3JpcHQ+LyxcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6IFtcbiAgICAgICAgICAgICdqYXZhc2NyaXB0JyxcbiAgICAgICAgICAgICdoYW5kbGViYXJzJyxcbiAgICAgICAgICAgICd4bWwnXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gd2UgbmVlZCB0aGlzIGZvciBub3cgZm9yIGpTWFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICBiZWdpbjogLzw+fDxcXC8+L1xuICAgICAgfSxcbiAgICAgIC8vIG9wZW4gdGFnXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAgICAgLzwvLFxuICAgICAgICAgIGxvb2thaGVhZChjb25jYXQoXG4gICAgICAgICAgICBUQUdfTkFNRV9SRSxcbiAgICAgICAgICAgIC8vIDx0YWcvPlxuICAgICAgICAgICAgLy8gPHRhZz5cbiAgICAgICAgICAgIC8vIDx0YWcgLi4uXG4gICAgICAgICAgICBlaXRoZXIoL1xcLz4vLCAvPi8sIC9cXHMvKVxuICAgICAgICAgICkpXG4gICAgICAgICksXG4gICAgICAgIGVuZDogL1xcLz8+LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiBUQUdfTkFNRV9SRSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIHN0YXJ0czogVEFHX0lOVEVSTkFMU1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGNsb3NlIHRhZ1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICBiZWdpbjogY29uY2F0KFxuICAgICAgICAgIC88XFwvLyxcbiAgICAgICAgICBsb29rYWhlYWQoY29uY2F0KFxuICAgICAgICAgICAgVEFHX05BTUVfUkUsIC8+L1xuICAgICAgICAgICkpXG4gICAgICAgICksXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICAgICAgICBiZWdpbjogVEFHX05BTUVfUkUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvPi8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHhtbDtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogQXNjaWlEb2NcblJlcXVpcmVzOiB4bWwuanNcbkF1dGhvcjogRGFuIEFsbGVuIDxkYW4uai5hbGxlbkBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwOi8vYXNjaWlkb2Mub3JnXG5EZXNjcmlwdGlvbjogQSBzZW1hbnRpYywgdGV4dC1iYXNlZCBkb2N1bWVudCBmb3JtYXQgdGhhdCBjYW4gYmUgZXhwb3J0ZWQgdG8gSFRNTCwgRG9jQm9vayBhbmQgb3RoZXIgYmFja2VuZHMuXG5DYXRlZ29yeTogbWFya3VwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYXNjaWlkb2MoaGxqcykge1xuICBjb25zdCBIT1JJWk9OVEFMX1JVTEUgPSB7XG4gICAgYmVnaW46ICdeXFwnezMsfVsgXFxcXHRdKiQnLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcbiAgY29uc3QgRVNDQVBFRF9GT1JNQVRUSU5HID0gW1xuICAgIC8vIGVzY2FwZWQgY29uc3RyYWluZWQgZm9ybWF0dGluZyBtYXJrcyAoaS5lLiwgXFwqIFxcXyBvciBcXGApXG4gICAge1xuICAgICAgYmVnaW46IC9cXFxcWypfYF0vXG4gICAgfSxcbiAgICAvLyBlc2NhcGVkIHVuY29uc3RyYWluZWQgZm9ybWF0dGluZyBtYXJrcyAoaS5lLiwgXFxcXCoqIFxcXFxfXyBvciBcXFxcYGApXG4gICAgLy8gbXVzdCBpZ25vcmUgdW50aWwgdGhlIG5leHQgZm9ybWF0dGluZyBtYXJrc1xuICAgIC8vIHRoaXMgcnVsZSBtaWdodCBub3QgYmUgMTAwJSBjb21wbGlhbnQgd2l0aCBBc2NpaWRvY3RvciAyLjAgYnV0IHdlIGFyZSBlbnRlcmluZyB1bmRlZmluZWQgYmVoYXZpb3IgdGVycml0b3J5Li4uXG4gICAge1xuICAgICAgYmVnaW46IC9cXFxcXFxcXFxcKnsyfVteXFxuXSo/XFwqezJ9L1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXFxcXFxcXF97Mn1bXlxcbl0qX3syfS9cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvXFxcXFxcXFxgezJ9W15cXG5dKmB7Mn0vXG4gICAgfSxcbiAgICAvLyBndWFyZDogY29uc3RyYWluZWQgZm9ybWF0dGluZyBtYXJrIG1heSBub3QgYmUgcHJlY2VkZWQgYnkgXCI6XCIsIFwiO1wiIG9yXG4gICAgLy8gXCJ9XCIuIG1hdGNoIHRoZXNlIHNvIHRoZSBjb25zdHJhaW5lZCBydWxlIGRvZXNuJ3Qgc2VlIHRoZW1cbiAgICB7XG4gICAgICBiZWdpbjogL1s6O31dWypfYF0oPyFbKl9gXSkvXG4gICAgfVxuICBdO1xuICBjb25zdCBTVFJPTkcgPSBbXG4gICAgLy8gaW5saW5lIHVuY29uc3RyYWluZWQgc3Ryb25nIChzaW5nbGUgbGluZSlcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJvbmcnLFxuICAgICAgYmVnaW46IC9cXCp7Mn0oW15cXG5dKz8pXFwqezJ9L1xuICAgIH0sXG4gICAgLy8gaW5saW5lIHVuY29uc3RyYWluZWQgc3Ryb25nIChtdWx0aS1saW5lKVxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cm9uZycsXG4gICAgICBiZWdpbjogY29uY2F0KFxuICAgICAgICAvXFwqXFwqLyxcbiAgICAgICAgLygoXFwqKD8hXFwqKXxcXFxcW15cXG5dfFteKlxcblxcXFxdKStcXG4pKy8sXG4gICAgICAgIC8oXFwqKD8hXFwqKXxcXFxcW15cXG5dfFteKlxcblxcXFxdKSovLFxuICAgICAgICAvXFwqXFwqL1xuICAgICAgKSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgLy8gaW5saW5lIGNvbnN0cmFpbmVkIHN0cm9uZyAoc2luZ2xlIGxpbmUpXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3Ryb25nJyxcbiAgICAgIC8vIG11c3Qgbm90IHByZWNlZGUgb3IgZm9sbG93IGEgd29yZCBjaGFyYWN0ZXJcbiAgICAgIGJlZ2luOiAvXFxCXFwqKFxcU3xcXFNbXlxcbl0qP1xcUylcXCooPyFcXHcpL1xuICAgIH0sXG4gICAgLy8gaW5saW5lIGNvbnN0cmFpbmVkIHN0cm9uZyAobXVsdGktbGluZSlcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJvbmcnLFxuICAgICAgLy8gbXVzdCBub3QgcHJlY2VkZSBvciBmb2xsb3cgYSB3b3JkIGNoYXJhY3RlclxuICAgICAgYmVnaW46IC9cXCpbXlxcc10oW15cXG5dK1xcbikrKFteXFxuXSspXFwqL1xuICAgIH1cbiAgXTtcbiAgY29uc3QgRU1QSEFTSVMgPSBbXG4gICAgLy8gaW5saW5lIHVuY29uc3RyYWluZWQgZW1waGFzaXMgKHNpbmdsZSBsaW5lKVxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgIGJlZ2luOiAvX3syfShbXlxcbl0rPylfezJ9L1xuICAgIH0sXG4gICAgLy8gaW5saW5lIHVuY29uc3RyYWluZWQgZW1waGFzaXMgKG11bHRpLWxpbmUpXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZW1waGFzaXMnLFxuICAgICAgYmVnaW46IGNvbmNhdChcbiAgICAgICAgL19fLyxcbiAgICAgICAgLygoXyg/IV8pfFxcXFxbXlxcbl18W15fXFxuXFxcXF0pK1xcbikrLyxcbiAgICAgICAgLyhfKD8hXyl8XFxcXFteXFxuXXxbXl9cXG5cXFxcXSkqLyxcbiAgICAgICAgL19fL1xuICAgICAgKSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgLy8gaW5saW5lIGNvbnN0cmFpbmVkIGVtcGhhc2lzIChzaW5nbGUgbGluZSlcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAvLyBtdXN0IG5vdCBwcmVjZWRlIG9yIGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyXG4gICAgICBiZWdpbjogL1xcYl8oXFxTfFxcU1teXFxuXSo/XFxTKV8oPyFcXHcpL1xuICAgIH0sXG4gICAgLy8gaW5saW5lIGNvbnN0cmFpbmVkIGVtcGhhc2lzIChtdWx0aS1saW5lKVxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgIC8vIG11c3Qgbm90IHByZWNlZGUgb3IgZm9sbG93IGEgd29yZCBjaGFyYWN0ZXJcbiAgICAgIGJlZ2luOiAvX1teXFxzXShbXlxcbl0rXFxuKSsoW15cXG5dKylfL1xuICAgIH0sXG4gICAgLy8gaW5saW5lIGNvbnN0cmFpbmVkIGVtcGhhc2lzIHVzaW5nIHNpbmdsZSBxdW90ZSAobGVnYWN5KVxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgIC8vIG11c3Qgbm90IGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyIG9yIGJlIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIHF1b3RlIG9yIHNwYWNlXG4gICAgICBiZWdpbjogJ1xcXFxCXFwnKD8hW1xcJ1xcXFxzXSknLFxuICAgICAgZW5kOiAnKFxcXFxuezJ9fFxcJyknLFxuICAgICAgLy8gYWxsb3cgZXNjYXBlZCBzaW5nbGUgcXVvdGUgZm9sbG93ZWQgYnkgd29yZCBjaGFyXG4gICAgICBjb250YWluczogW3tcbiAgICAgICAgYmVnaW46ICdcXFxcXFxcXFxcJ1xcXFx3JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXTtcbiAgY29uc3QgQURNT05JVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXihOT1RFfFRJUHxJTVBPUlRBTlR8V0FSTklOR3xDQVVUSU9OKTpcXFxccysnLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcbiAgY29uc3QgQlVMTEVUX0xJU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVsbGV0JyxcbiAgICBiZWdpbjogJ14oXFxcXCorfC0rfFxcXFwuK3xbXlxcXFxuXSs/OjopXFxcXHMrJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FzY2lpRG9jJyxcbiAgICBhbGlhc2VzOiBbJ2Fkb2MnXSxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gYmxvY2sgY29tbWVudFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXi97NCx9XFxcXG4nLFxuICAgICAgICAnXFxcXG4vezQsfSQnLFxuICAgICAgICAvLyBjYW4gYWxzbyBiZSBkb25lIGFzLi4uXG4gICAgICAgIC8vICdeL3s0LH0kJyxcbiAgICAgICAgLy8gJ14vezQsfSQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLy8gbGluZSBjb21tZW50XG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdeLy8nLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8vIHRpdGxlXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXC5cXFxcdy4qJCdcbiAgICAgIH0sXG4gICAgICAvLyBleGFtcGxlLCBhZG1vbml0aW9uICYgc2lkZWJhciBibG9ja3NcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeWz1cXFxcKl17NCx9XFxcXG4nLFxuICAgICAgICBlbmQ6ICdcXFxcbl5bPVxcXFwqXXs0LH0kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGhlYWRpbmdzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXig9ezEsNn0pWyBcXHRdLis/KFsgXFx0XVxcXFwxKT8kJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeW15cXFxcW1xcXFxdXFxcXG5dKz9cXFxcbls9XFxcXC1+XFxcXF5cXFxcK117Mix9JCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBkb2N1bWVudCBhdHRyaWJ1dGVzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ146Lis/OicsXG4gICAgICAgIGVuZDogJ1xcXFxzJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGJsb2NrIGF0dHJpYnV0ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxbLis/XFxcXF0kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gcXVvdGVibG9ja3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgICAgICBiZWdpbjogJ15fezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5fezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gbGlzdGluZyBhbmQgbGl0ZXJhbCBibG9ja3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnXltcXFxcLVxcXFwuXXs0LH1cXFxcbicsXG4gICAgICAgIGVuZDogJ1xcXFxuW1xcXFwtXFxcXC5dezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gcGFzc3Rocm91Z2ggYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlxcXFwrezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5cXFxcK3s0LH0kJyxcbiAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgYmVnaW46ICc8JyxcbiAgICAgICAgICBlbmQ6ICc+JyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1dLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuXG4gICAgICBCVUxMRVRfTElTVCxcbiAgICAgIEFETU9OSVRJT04sXG4gICAgICAuLi5FU0NBUEVEX0ZPUk1BVFRJTkcsXG4gICAgICAuLi5TVFJPTkcsXG4gICAgICAuLi5FTVBIQVNJUyxcblxuICAgICAgLy8gaW5saW5lIHNtYXJ0IHF1b3Rlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcImBgLis/JydcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IFwiYC4rPydcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSB1bmNvbnN0cmFpbmVkIGVtcGhhc2lzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgICAgICBiZWdpbjogL2B7Mn0vLFxuICAgICAgICBlbmQ6IC8oXFxuezJ9fGB7Mn0pL1xuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBjb2RlIHNuaXBwZXRzIChUT0RPIHNob3VsZCBnZXQgc2FtZSB0cmVhdG1lbnQgYXMgc3Ryb25nIGFuZCBlbXBoYXNpcylcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnKGAuKz9gfFxcXFwrLis/XFxcXCspJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaW5kZW50ZWQgbGl0ZXJhbCBibG9ja1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb2RlJyxcbiAgICAgICAgYmVnaW46ICdeWyBcXFxcdF0nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgSE9SSVpPTlRBTF9SVUxFLFxuICAgICAgLy8gaW1hZ2VzIGFuZCBsaW5rc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyhsaW5rOik/KGh0dHB8aHR0cHN8ZnRwfGZpbGV8aXJjfGltYWdlOj8pOlxcXFxTKz9cXFxcW1teW10qP1xcXFxdJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcobGlua3xpbWFnZTo/KTonLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdsaW5rJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcnLFxuICAgICAgICAgICAgZW5kOiAnW15cXFxcW10rJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXFsnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXF0nLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaWRvYztcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogQXNwZWN0SlxuQXV0aG9yOiBIYWthbiBPemxlciA8b3psZXIuaGFrYW5AZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvYXNwZWN0ai9cbkRlc2NyaXB0aW9uOiBTeW50YXggSGlnaGxpZ2h0aW5nIGZvciB0aGUgQXNwZWN0SiBMYW5ndWFnZSB3aGljaCBpcyBhIGdlbmVyYWwtcHVycG9zZSBhc3BlY3Qtb3JpZW50ZWQgZXh0ZW5zaW9uIHRvIHRoZSBKYXZhIHByb2dyYW1taW5nIGxhbmd1YWdlLlxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhc3BlY3RqKGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPVxuICAgICdmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0ICcgK1xuICAgICdmb3IgdHJ1ZSB3aGlsZSBsb25nIHRocm93IHN0cmljdGZwIGZpbmFsbHkgcHJvdGVjdGVkIGltcG9ydCBuYXRpdmUgZmluYWwgcmV0dXJuIHZvaWQgJyArXG4gICAgJ2VudW0gZWxzZSBleHRlbmRzIGltcGxlbWVudHMgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSAnICtcbiAgICAnYXNzZXJ0IHNob3J0IHBhY2thZ2UgZGVmYXVsdCBkb3VibGUgcHVibGljIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0aHJvd3MgcHJpdmlsZWdlZCAnICtcbiAgICAnYXNwZWN0T2YgYWR2aWNlZXhlY3V0aW9uIHByb2NlZWQgY2Zsb3diZWxvdyBjZmxvdyBpbml0aWFsaXphdGlvbiBwcmVpbml0aWFsaXphdGlvbiAnICtcbiAgICAnc3RhdGljaW5pdGlhbGl6YXRpb24gd2l0aGluY29kZSB0YXJnZXQgd2l0aGluIGV4ZWN1dGlvbiBnZXRXaXRoaW5UeXBlTmFtZSBoYW5kbGVyICcgK1xuICAgICd0aGlzSm9pblBvaW50IHRoaXNKb2luUG9pbnRTdGF0aWNQYXJ0IHRoaXNFbmNsb3NpbmdKb2luUG9pbnRTdGF0aWNQYXJ0IGRlY2xhcmUgcGFyZW50cyAnICtcbiAgICAnd2FybmluZyBlcnJvciBzb2Z0IHByZWNlZGVuY2UgdGhpc0FzcGVjdEluc3RhbmNlJztcbiAgY29uc3QgU0hPUlRLRVlTID0gJ2dldCBzZXQgYXJncyBjYWxsJztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdBc3BlY3RKJyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLzxcXC98Iy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgL1xcL1xcKlxcKi8sXG4gICAgICAgIC9cXCpcXC8vLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGVhdCB1cCBAJ3MgaW4gZW1haWxzIHRvIHByZXZlbnQgdGhlbSB0byBiZSByZWNvZ25pemVkIGFzIGRvY3RhZ3NcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHcrQC8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46IC9AW0EtWmEtel0rL1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdhc3BlY3QnLFxuICAgICAgICBlbmQ6IC9bezs9XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9bOjtcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMgcGVydHlwZXdpdGhpbiBwZXJ0aGlzIHBlcnRhcmdldCBwZXJjZmxvd2JlbG93IHBlcmNmbG93IGlzc2luZ2xldG9uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXChbXlxcKV0qLyxcbiAgICAgICAgICAgIGVuZDogL1spXSsvLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTICsgJyAnICsgU0hPUlRLRVlTLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBrZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGlsbGVnYWw6IC9bOlwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEFzcGVjdEogQ29uc3RydWN0c1xuICAgICAgICBiZWdpbktleXdvcmRzOiAncG9pbnRjdXQgYWZ0ZXIgYmVmb3JlIGFyb3VuZCB0aHJvd2luZyByZXR1cm5pbmcnLFxuICAgICAgICBlbmQ6IC9bKV0vLFxuICAgICAgICBleGNsdWRlRW5kOiBmYWxzZSxcbiAgICAgICAgaWxsZWdhbDogL1tcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBjb25jYXQoaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLCAvXFxzKlxcKC8pLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogWyBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1s6XS8sXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6IC9beztdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlRW5kOiBmYWxzZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBpbGxlZ2FsOiAvW1wiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGNvbmNhdChobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsIC9cXHMqXFwoLyksXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMgKyAnICcgKyBTSE9SVEtFWVMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBwcmV2ZW50cyAnbmV3IE5hbWUoLi4uKSwgb3IgdGhyb3cgLi4uJyBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduZXcgdGhyb3cnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBjbGFzcyBpcyBhIGJpdCBkaWZmZXJlbnQgZm9yIEFzcGVjdEogY29tcGFyZWQgdG8gdGhlIEphdmEgbGFuZ3VhZ2VcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogL1xcdysgK1xcdysoXFwuXFx3Kyk/XFxzKlxcKFteXFwpXSpcXClcXHMqKCh0aHJvd3MpW1xcd1xccyxdKyk/W1xceztdLyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBjb25jYXQoaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLCAvXFxzKlxcKC8pLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogWyBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICAvLyBhbm5vdGF0aW9uIGlzIGFsc28gdXNlZCBpbiB0aGlzIGxhbmd1YWdlXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL0BbQS1aYS16XSsvXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzcGVjdGo7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQXV0b0hvdGtleVxuQXV0aG9yOiBTZW9uZ3dvbiBMZWUgPGRsaW1waWRAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IEF1dG9Ib3RrZXkgbGFuZ3VhZ2UgZGVmaW5pdGlvblxuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGF1dG9ob3RrZXkoaGxqcykge1xuICBjb25zdCBCQUNLVElDS19FU0NBUEUgPSB7XG4gICAgYmVnaW46ICdgW1xcXFxzXFxcXFNdJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0F1dG9Ib3RrZXknLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWydhaGsnXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ0JyZWFrIENvbnRpbnVlIENyaXRpY2FsIEV4aXQgRXhpdEFwcCBHb3N1YiBHb3RvIE5ldyBPbkV4aXQgUGF1c2UgcmV0dXJuIFNldEJhdGNoTGluZXMgU2V0VGltZXIgU3VzcGVuZCBUaHJlYWQgVGhyb3cgVW50aWwgYWhrX2lkIGFoa19jbGFzcyBhaGtfcGlkIGFoa19leGUgYWhrX2dyb3VwJyxcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIE5PVCBBTkQgT1InLFxuICAgICAgYnVpbHRfaW46ICdDb21TcGVjIENsaXBib2FyZCBDbGlwYm9hcmRBbGwgRXJyb3JMZXZlbCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBCQUNLVElDS19FU0NBUEUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICBjb250YWluczogW0JBQ0tUSUNLX0VTQ0FQRV1cbiAgICAgIH0pLFxuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gc3Vic3Qgd291bGQgYmUgdGhlIG1vc3QgYWNjdXJhdGUgaG93ZXZlciBmYWlscyB0aGUgcG9pbnQgb2ZcbiAgICAgICAgLy8gaGlnaGxpZ2h0aW5nLiB2YXJpYWJsZSBpcyBjb21wYXJhYmx5IHRoZSBtb3N0IGFjY3VyYXRlIHRoYXQgYWN0dWFsbHlcbiAgICAgICAgLy8gaGFzIHNvbWUgZWZmZWN0XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46ICclW2EtekEtWjAtOSNfJEBdKyUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKlxcXFx3K1xcXFxzKigsfCUpJ1xuICAgICAgICAvLyBJIGRvbid0IHJlYWxseSBrbm93IGlmIHRoaXMgaXMgdG90YWxseSByZWxldmFudFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gc3ltYm9sIHdvdWxkIGJlIG1vc3QgYWNjdXJhdGUgaG93ZXZlciBpcyBoaWdobGlnaHRlZCBqdXN0IGxpa2VcbiAgICAgICAgLy8gYnVpbHRfaW4gYW5kIHRoYXQgbWFrZXMgdXAgYSBsb3Qgb2YgQXV0b0hvdGtleSBjb2RlIG1lYW5pbmcgdGhhdCBpdFxuICAgICAgICAvLyB3b3VsZCBmYWlsIHRvIGhpZ2hsaWdodCBhbnl0aGluZ1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeW15cXFxcblwiO10rOjooPyE9KSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXlteXFxcXG5cIjtdKzooPyE9KScsXG4gICAgICAgICAgICAvLyB6ZXJvIHJlbGV2YW5jZSBhcyBpdCBjYXRjaGVzIGEgbG90IG9mIHRoaW5nc1xuICAgICAgICAgICAgLy8gZm9sbG93ZWQgYnkgYSBzaW5nbGUgJzonIGluIG1hbnkgbGFuZ3VhZ2VzXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxccyojXFxcXHcrJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ0FfW2EtekEtWjAtOV0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY29uc2VjdXRpdmUgY29tbWFzLCBub3QgZm9yIGhpZ2hsaWdodGluZyBidXQganVzdCBmb3IgcmVsZXZhbmNlXG4gICAgICAgIGJlZ2luOiAnLFxcXFxzKiwnXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGF1dG9ob3RrZXk7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQXV0b0l0XG5BdXRob3I6IE1hbmggVHVhbiA8anVub29reW9AZ21haWwuY29tPlxuRGVzY3JpcHRpb246IEF1dG9JdCBsYW5ndWFnZSBkZWZpbml0aW9uXG5DYXRlZ29yeTogc2NyaXB0aW5nXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYXV0b2l0KGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSAnQnlSZWYgQ2FzZSBDb25zdCBDb250aW51ZUNhc2UgQ29udGludWVMb29wICcgK1xuICAgICAgICAnRGltIERvIEVsc2UgRWxzZUlmIEVuZEZ1bmMgRW5kSWYgRW5kU2VsZWN0ICcgK1xuICAgICAgICAnRW5kU3dpdGNoIEVuZFdpdGggRW51bSBFeGl0IEV4aXRMb29wIEZvciBGdW5jICcgK1xuICAgICAgICAnR2xvYmFsIElmIEluIExvY2FsIE5leHQgUmVEaW0gUmV0dXJuIFNlbGVjdCBTdGF0aWMgJyArXG4gICAgICAgICdTdGVwIFN3aXRjaCBUaGVuIFRvIFVudGlsIFZvbGF0aWxlIFdFbmQgV2hpbGUgV2l0aCc7XG5cbiAgY29uc3QgRElSRUNUSVZFUyA9IFtcbiAgICBcIkVuZFJlZ2lvblwiLFxuICAgIFwiZm9yY2VkZWZcIixcbiAgICBcImZvcmNlcmVmXCIsXG4gICAgXCJpZ25vcmVmdW5jXCIsXG4gICAgXCJpbmNsdWRlXCIsXG4gICAgXCJpbmNsdWRlLW9uY2VcIixcbiAgICBcIk5vVHJheUljb25cIixcbiAgICBcIk9uQXV0b0l0U3RhcnRSZWdpc3RlclwiLFxuICAgIFwicHJhZ21hXCIsXG4gICAgXCJSZWdpb25cIixcbiAgICBcIlJlcXVpcmVBZG1pblwiLFxuICAgIFwiVGlkeV9PZmZcIixcbiAgICBcIlRpZHlfT25cIixcbiAgICBcIlRpZHlfUGFyYW1ldGVyc1wiXG4gIF07XG4gIFxuICBjb25zdCBMSVRFUkFMID0gJ1RydWUgRmFsc2UgQW5kIE51bGwgTm90IE9yIERlZmF1bHQnO1xuXG4gIGNvbnN0IEJVSUxUX0lOXG4gICAgICAgICAgPSAnQWJzIEFDb3MgQWRsaWJSZWdpc3RlciBBZGxpYlVuUmVnaXN0ZXIgQXNjIEFzY1cgQVNpbiBBc3NpZ24gQVRhbiBBdXRvSXRTZXRPcHRpb24gQXV0b0l0V2luR2V0VGl0bGUgQXV0b0l0V2luU2V0VGl0bGUgQmVlcCBCaW5hcnkgQmluYXJ5TGVuIEJpbmFyeU1pZCBCaW5hcnlUb1N0cmluZyBCaXRBTkQgQml0Tk9UIEJpdE9SIEJpdFJvdGF0ZSBCaXRTaGlmdCBCaXRYT1IgQmxvY2tJbnB1dCBCcmVhayBDYWxsIENEVHJheSBDZWlsaW5nIENociBDaHJXIENsaXBHZXQgQ2xpcFB1dCBDb25zb2xlUmVhZCBDb25zb2xlV3JpdGUgQ29uc29sZVdyaXRlRXJyb3IgQ29udHJvbENsaWNrIENvbnRyb2xDb21tYW5kIENvbnRyb2xEaXNhYmxlIENvbnRyb2xFbmFibGUgQ29udHJvbEZvY3VzIENvbnRyb2xHZXRGb2N1cyBDb250cm9sR2V0SGFuZGxlIENvbnRyb2xHZXRQb3MgQ29udHJvbEdldFRleHQgQ29udHJvbEhpZGUgQ29udHJvbExpc3RWaWV3IENvbnRyb2xNb3ZlIENvbnRyb2xTZW5kIENvbnRyb2xTZXRUZXh0IENvbnRyb2xTaG93IENvbnRyb2xUcmVlVmlldyBDb3MgRGVjIERpckNvcHkgRGlyQ3JlYXRlIERpckdldFNpemUgRGlyTW92ZSBEaXJSZW1vdmUgRGxsQ2FsbCBEbGxDYWxsQWRkcmVzcyBEbGxDYWxsYmFja0ZyZWUgRGxsQ2FsbGJhY2tHZXRQdHIgRGxsQ2FsbGJhY2tSZWdpc3RlciBEbGxDbG9zZSBEbGxPcGVuIERsbFN0cnVjdENyZWF0ZSBEbGxTdHJ1Y3RHZXREYXRhIERsbFN0cnVjdEdldFB0ciBEbGxTdHJ1Y3RHZXRTaXplIERsbFN0cnVjdFNldERhdGEgRHJpdmVHZXREcml2ZSBEcml2ZUdldEZpbGVTeXN0ZW0gRHJpdmVHZXRMYWJlbCBEcml2ZUdldFNlcmlhbCBEcml2ZUdldFR5cGUgRHJpdmVNYXBBZGQgRHJpdmVNYXBEZWwgRHJpdmVNYXBHZXQgRHJpdmVTZXRMYWJlbCBEcml2ZVNwYWNlRnJlZSBEcml2ZVNwYWNlVG90YWwgRHJpdmVTdGF0dXMgRW52R2V0IEVudlNldCBFbnZVcGRhdGUgRXZhbCBFeGVjdXRlIEV4cCBGaWxlQ2hhbmdlRGlyIEZpbGVDbG9zZSBGaWxlQ29weSBGaWxlQ3JlYXRlTlRGU0xpbmsgRmlsZUNyZWF0ZVNob3J0Y3V0IEZpbGVEZWxldGUgRmlsZUV4aXN0cyBGaWxlRmluZEZpcnN0RmlsZSBGaWxlRmluZE5leHRGaWxlIEZpbGVGbHVzaCBGaWxlR2V0QXR0cmliIEZpbGVHZXRFbmNvZGluZyBGaWxlR2V0TG9uZ05hbWUgRmlsZUdldFBvcyBGaWxlR2V0U2hvcnRjdXQgRmlsZUdldFNob3J0TmFtZSBGaWxlR2V0U2l6ZSBGaWxlR2V0VGltZSBGaWxlR2V0VmVyc2lvbiBGaWxlSW5zdGFsbCBGaWxlTW92ZSBGaWxlT3BlbiBGaWxlT3BlbkRpYWxvZyBGaWxlUmVhZCBGaWxlUmVhZExpbmUgRmlsZVJlYWRUb0FycmF5IEZpbGVSZWN5Y2xlIEZpbGVSZWN5Y2xlRW1wdHkgRmlsZVNhdmVEaWFsb2cgRmlsZVNlbGVjdEZvbGRlciBGaWxlU2V0QXR0cmliIEZpbGVTZXRFbmQgRmlsZVNldFBvcyBGaWxlU2V0VGltZSBGaWxlV3JpdGUgRmlsZVdyaXRlTGluZSBGbG9vciBGdHBTZXRQcm94eSBGdW5jTmFtZSBHVUlDcmVhdGUgR1VJQ3RybENyZWF0ZUF2aSBHVUlDdHJsQ3JlYXRlQnV0dG9uIEdVSUN0cmxDcmVhdGVDaGVja2JveCBHVUlDdHJsQ3JlYXRlQ29tYm8gR1VJQ3RybENyZWF0ZUNvbnRleHRNZW51IEdVSUN0cmxDcmVhdGVEYXRlIEdVSUN0cmxDcmVhdGVEdW1teSBHVUlDdHJsQ3JlYXRlRWRpdCBHVUlDdHJsQ3JlYXRlR3JhcGhpYyBHVUlDdHJsQ3JlYXRlR3JvdXAgR1VJQ3RybENyZWF0ZUljb24gR1VJQ3RybENyZWF0ZUlucHV0IEdVSUN0cmxDcmVhdGVMYWJlbCBHVUlDdHJsQ3JlYXRlTGlzdCBHVUlDdHJsQ3JlYXRlTGlzdFZpZXcgR1VJQ3RybENyZWF0ZUxpc3RWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlTWVudSBHVUlDdHJsQ3JlYXRlTWVudUl0ZW0gR1VJQ3RybENyZWF0ZU1vbnRoQ2FsIEdVSUN0cmxDcmVhdGVPYmogR1VJQ3RybENyZWF0ZVBpYyBHVUlDdHJsQ3JlYXRlUHJvZ3Jlc3MgR1VJQ3RybENyZWF0ZVJhZGlvIEdVSUN0cmxDcmVhdGVTbGlkZXIgR1VJQ3RybENyZWF0ZVRhYiBHVUlDdHJsQ3JlYXRlVGFiSXRlbSBHVUlDdHJsQ3JlYXRlVHJlZVZpZXcgR1VJQ3RybENyZWF0ZVRyZWVWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlVXBkb3duIEdVSUN0cmxEZWxldGUgR1VJQ3RybEdldEhhbmRsZSBHVUlDdHJsR2V0U3RhdGUgR1VJQ3RybFJlYWQgR1VJQ3RybFJlY3ZNc2cgR1VJQ3RybFJlZ2lzdGVyTGlzdFZpZXdTb3J0IEdVSUN0cmxTZW5kTXNnIEdVSUN0cmxTZW5kVG9EdW1teSBHVUlDdHJsU2V0QmtDb2xvciBHVUlDdHJsU2V0Q29sb3IgR1VJQ3RybFNldEN1cnNvciBHVUlDdHJsU2V0RGF0YSBHVUlDdHJsU2V0RGVmQmtDb2xvciBHVUlDdHJsU2V0RGVmQ29sb3IgR1VJQ3RybFNldEZvbnQgR1VJQ3RybFNldEdyYXBoaWMgR1VJQ3RybFNldEltYWdlIEdVSUN0cmxTZXRMaW1pdCBHVUlDdHJsU2V0T25FdmVudCBHVUlDdHJsU2V0UG9zIEdVSUN0cmxTZXRSZXNpemluZyBHVUlDdHJsU2V0U3RhdGUgR1VJQ3RybFNldFN0eWxlIEdVSUN0cmxTZXRUaXAgR1VJRGVsZXRlIEdVSUdldEN1cnNvckluZm8gR1VJR2V0TXNnIEdVSUdldFN0eWxlIEdVSVJlZ2lzdGVyTXNnIEdVSVNldEFjY2VsZXJhdG9ycyBHVUlTZXRCa0NvbG9yIEdVSVNldENvb3JkIEdVSVNldEN1cnNvciBHVUlTZXRGb250IEdVSVNldEhlbHAgR1VJU2V0SWNvbiBHVUlTZXRPbkV2ZW50IEdVSVNldFN0YXRlIEdVSVNldFN0eWxlIEdVSVN0YXJ0R3JvdXAgR1VJU3dpdGNoIEhleCBIb3RLZXlTZXQgSHR0cFNldFByb3h5IEh0dHBTZXRVc2VyQWdlbnQgSFduZCBJbmV0Q2xvc2UgSW5ldEdldCBJbmV0R2V0SW5mbyBJbmV0R2V0U2l6ZSBJbmV0UmVhZCBJbmlEZWxldGUgSW5pUmVhZCBJbmlSZWFkU2VjdGlvbiBJbmlSZWFkU2VjdGlvbk5hbWVzIEluaVJlbmFtZVNlY3Rpb24gSW5pV3JpdGUgSW5pV3JpdGVTZWN0aW9uIElucHV0Qm94IEludCBJc0FkbWluIElzQXJyYXkgSXNCaW5hcnkgSXNCb29sIElzRGVjbGFyZWQgSXNEbGxTdHJ1Y3QgSXNGbG9hdCBJc0Z1bmMgSXNIV25kIElzSW50IElzS2V5d29yZCBJc051bWJlciBJc09iaiBJc1B0ciBJc1N0cmluZyBMb2cgTWVtR2V0U3RhdHMgTW9kIE1vdXNlQ2xpY2sgTW91c2VDbGlja0RyYWcgTW91c2VEb3duIE1vdXNlR2V0Q3Vyc29yIE1vdXNlR2V0UG9zIE1vdXNlTW92ZSBNb3VzZVVwIE1vdXNlV2hlZWwgTXNnQm94IE51bWJlciBPYmpDcmVhdGUgT2JqQ3JlYXRlSW50ZXJmYWNlIE9iakV2ZW50IE9iakdldCBPYmpOYW1lIE9uQXV0b0l0RXhpdFJlZ2lzdGVyIE9uQXV0b0l0RXhpdFVuUmVnaXN0ZXIgUGluZyBQaXhlbENoZWNrc3VtIFBpeGVsR2V0Q29sb3IgUGl4ZWxTZWFyY2ggUHJvY2Vzc0Nsb3NlIFByb2Nlc3NFeGlzdHMgUHJvY2Vzc0dldFN0YXRzIFByb2Nlc3NMaXN0IFByb2Nlc3NTZXRQcmlvcml0eSBQcm9jZXNzV2FpdCBQcm9jZXNzV2FpdENsb3NlIFByb2dyZXNzT2ZmIFByb2dyZXNzT24gUHJvZ3Jlc3NTZXQgUHRyIFJhbmRvbSBSZWdEZWxldGUgUmVnRW51bUtleSBSZWdFbnVtVmFsIFJlZ1JlYWQgUmVnV3JpdGUgUm91bmQgUnVuIFJ1bkFzIFJ1bkFzV2FpdCBSdW5XYWl0IFNlbmQgU2VuZEtlZXBBY3RpdmUgU2V0RXJyb3IgU2V0RXh0ZW5kZWQgU2hlbGxFeGVjdXRlIFNoZWxsRXhlY3V0ZVdhaXQgU2h1dGRvd24gU2luIFNsZWVwIFNvdW5kUGxheSBTb3VuZFNldFdhdmVWb2x1bWUgU3BsYXNoSW1hZ2VPbiBTcGxhc2hPZmYgU3BsYXNoVGV4dE9uIFNxcnQgU1JhbmRvbSBTdGF0dXNiYXJHZXRUZXh0IFN0ZGVyclJlYWQgU3RkaW5Xcml0ZSBTdGRpb0Nsb3NlIFN0ZG91dFJlYWQgU3RyaW5nIFN0cmluZ0FkZENSIFN0cmluZ0NvbXBhcmUgU3RyaW5nRm9ybWF0IFN0cmluZ0Zyb21BU0NJSUFycmF5IFN0cmluZ0luU3RyIFN0cmluZ0lzQWxOdW0gU3RyaW5nSXNBbHBoYSBTdHJpbmdJc0FTQ0lJIFN0cmluZ0lzRGlnaXQgU3RyaW5nSXNGbG9hdCBTdHJpbmdJc0ludCBTdHJpbmdJc0xvd2VyIFN0cmluZ0lzU3BhY2UgU3RyaW5nSXNVcHBlciBTdHJpbmdJc1hEaWdpdCBTdHJpbmdMZWZ0IFN0cmluZ0xlbiBTdHJpbmdMb3dlciBTdHJpbmdNaWQgU3RyaW5nUmVnRXhwIFN0cmluZ1JlZ0V4cFJlcGxhY2UgU3RyaW5nUmVwbGFjZSBTdHJpbmdSZXZlcnNlIFN0cmluZ1JpZ2h0IFN0cmluZ1NwbGl0IFN0cmluZ1N0cmlwQ1IgU3RyaW5nU3RyaXBXUyBTdHJpbmdUb0FTQ0lJQXJyYXkgU3RyaW5nVG9CaW5hcnkgU3RyaW5nVHJpbUxlZnQgU3RyaW5nVHJpbVJpZ2h0IFN0cmluZ1VwcGVyIFRhbiBUQ1BBY2NlcHQgVENQQ2xvc2VTb2NrZXQgVENQQ29ubmVjdCBUQ1BMaXN0ZW4gVENQTmFtZVRvSVAgVENQUmVjdiBUQ1BTZW5kIFRDUFNodXRkb3duLCBVRFBTaHV0ZG93biBUQ1BTdGFydHVwLCBVRFBTdGFydHVwIFRpbWVyRGlmZiBUaW1lckluaXQgVG9vbFRpcCBUcmF5Q3JlYXRlSXRlbSBUcmF5Q3JlYXRlTWVudSBUcmF5R2V0TXNnIFRyYXlJdGVtRGVsZXRlIFRyYXlJdGVtR2V0SGFuZGxlIFRyYXlJdGVtR2V0U3RhdGUgVHJheUl0ZW1HZXRUZXh0IFRyYXlJdGVtU2V0T25FdmVudCBUcmF5SXRlbVNldFN0YXRlIFRyYXlJdGVtU2V0VGV4dCBUcmF5U2V0Q2xpY2sgVHJheVNldEljb24gVHJheVNldE9uRXZlbnQgVHJheVNldFBhdXNlSWNvbiBUcmF5U2V0U3RhdGUgVHJheVNldFRvb2xUaXAgVHJheVRpcCBVQm91bmQgVURQQmluZCBVRFBDbG9zZVNvY2tldCBVRFBPcGVuIFVEUFJlY3YgVURQU2VuZCBWYXJHZXRUeXBlIFdpbkFjdGl2YXRlIFdpbkFjdGl2ZSBXaW5DbG9zZSBXaW5FeGlzdHMgV2luRmxhc2ggV2luR2V0Q2FyZXRQb3MgV2luR2V0Q2xhc3NMaXN0IFdpbkdldENsaWVudFNpemUgV2luR2V0SGFuZGxlIFdpbkdldFBvcyBXaW5HZXRQcm9jZXNzIFdpbkdldFN0YXRlIFdpbkdldFRleHQgV2luR2V0VGl0bGUgV2luS2lsbCBXaW5MaXN0IFdpbk1lbnVTZWxlY3RJdGVtIFdpbk1pbmltaXplQWxsIFdpbk1pbmltaXplQWxsVW5kbyBXaW5Nb3ZlIFdpblNldE9uVG9wIFdpblNldFN0YXRlIFdpblNldFRpdGxlIFdpblNldFRyYW5zIFdpbldhaXQgV2luV2FpdEFjdGl2ZSBXaW5XYWl0Q2xvc2UgV2luV2FpdE5vdEFjdGl2ZSc7XG5cbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICBobGpzLkNPTU1FTlQoJyNjcycsICcjY2UnKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnI2NvbW1lbnRzLXN0YXJ0JywgJyNjb21tZW50cy1lbmQnKVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBiZWdpbjogJ1xcXFwkW0EtejAtOV9dKydcbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBiZWdpbjogL1wiXCIvLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiAvJycvLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJyMnLFxuICAgIGVuZDogJyQnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAnbWV0YS1rZXl3b3JkJzogRElSRUNUSVZFU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5jbHVkZScsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgJ21ldGEta2V5d29yZCc6ICdpbmNsdWRlJ1xuICAgICAgICB9LFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnPCcsXG4gICAgICAgICAgICAgICAgZW5kOiAnPidcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXCJcIi8sXG4gICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAvJycvLFxuICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIENPTU1FTlRcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgQ09OU1RBTlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAvLyBiZWdpbjogJ0AnLFxuICAgIC8vIGVuZDogJyQnLFxuICAgIC8vIGtleXdvcmRzOiAnQXBwRGF0YUNvbW1vbkRpciBBcHBEYXRhRGlyIEF1dG9JdEV4ZSBBdXRvSXRQSUQgQXV0b0l0VmVyc2lvbiBBdXRvSXRYNjQgQ09NX0V2ZW50T2JqIENvbW1vbkZpbGVzRGlyIENvbXBpbGVkIENvbXB1dGVyTmFtZSBDb21TcGVjIENQVUFyY2ggQ1IgQ1JMRiBEZXNrdG9wQ29tbW9uRGlyIERlc2t0b3BEZXB0aCBEZXNrdG9wRGlyIERlc2t0b3BIZWlnaHQgRGVza3RvcFJlZnJlc2ggRGVza3RvcFdpZHRoIERvY3VtZW50c0NvbW1vbkRpciBlcnJvciBleGl0Q29kZSBleGl0TWV0aG9kIGV4dGVuZGVkIEZhdm9yaXRlc0NvbW1vbkRpciBGYXZvcml0ZXNEaXIgR1VJX0N0cmxIYW5kbGUgR1VJX0N0cmxJZCBHVUlfRHJhZ0ZpbGUgR1VJX0RyYWdJZCBHVUlfRHJvcElkIEdVSV9XaW5IYW5kbGUgSG9tZURyaXZlIEhvbWVQYXRoIEhvbWVTaGFyZSBIb3RLZXlQcmVzc2VkIEhPVVIgSVBBZGRyZXNzMSBJUEFkZHJlc3MyIElQQWRkcmVzczMgSVBBZGRyZXNzNCBLQkxheW91dCBMRiBMb2NhbEFwcERhdGFEaXIgTG9nb25ETlNEb21haW4gTG9nb25Eb21haW4gTG9nb25TZXJ2ZXIgTURBWSBNSU4gTU9OIE1TRUMgTVVJTGFuZyBNeURvY3VtZW50c0RpciBOdW1QYXJhbXMgT1NBcmNoIE9TQnVpbGQgT1NMYW5nIE9TU2VydmljZVBhY2sgT1NUeXBlIE9TVmVyc2lvbiBQcm9ncmFtRmlsZXNEaXIgUHJvZ3JhbXNDb21tb25EaXIgUHJvZ3JhbXNEaXIgU2NyaXB0RGlyIFNjcmlwdEZ1bGxQYXRoIFNjcmlwdExpbmVOdW1iZXIgU2NyaXB0TmFtZSBTRUMgU3RhcnRNZW51Q29tbW9uRGlyIFN0YXJ0TWVudURpciBTdGFydHVwQ29tbW9uRGlyIFN0YXJ0dXBEaXIgU1dfRElTQUJMRSBTV19FTkFCTEUgU1dfSElERSBTV19MT0NLIFNXX01BWElNSVpFIFNXX01JTklNSVpFIFNXX1JFU1RPUkUgU1dfU0hPVyBTV19TSE9XREVGQVVMVCBTV19TSE9XTUFYSU1JWkVEIFNXX1NIT1dNSU5JTUlaRUQgU1dfU0hPV01JTk5PQUNUSVZFIFNXX1NIT1dOQSBTV19TSE9XTk9BQ1RJVkFURSBTV19TSE9XTk9STUFMIFNXX1VOTE9DSyBTeXN0ZW1EaXIgVEFCIFRlbXBEaXIgVFJBWV9JRCBUcmF5SWNvbkZsYXNoaW5nIFRyYXlJY29uVmlzaWJsZSBVc2VyTmFtZSBVc2VyUHJvZmlsZURpciBXREFZIFdpbmRvd3NEaXIgV29ya2luZ0RpciBZREFZIFlFQVInLFxuICAgIC8vIHJlbGV2YW5jZTogNVxuICAgIGJlZ2luOiAnQFtBLXowLTlfXSsnXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdGdW5jJyxcbiAgICBlbmQ6ICckJyxcbiAgICBpbGxlZ2FsOiAnXFxcXCR8XFxcXFt8JScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICBOVU1CRVJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdBdXRvSXQnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgICAgYnVpbHRfaW46IEJVSUxUX0lOLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1FTlQsXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUixcbiAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgIENPTlNUQU5ULFxuICAgICAgRlVOQ1RJT05cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXV0b2l0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEFWUiBBc3NlbWJseVxuQXV0aG9yOiBWbGFkaW1pciBFcm1ha292IDx2b29vbjM0MUBnbWFpbC5jb20+XG5DYXRlZ29yeTogYXNzZW1ibGVyXG5XZWJzaXRlOiBodHRwczovL3d3dy5taWNyb2NoaXAuY29tL3dlYmRvYy9hdnJhc3NlbWJsZXIvYXZyYXNzZW1ibGVyLndiX2luc3RydWN0aW9uX2xpc3QuaHRtbFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGF2cmFzbShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0FWUiBBc3NlbWJseScsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46ICdcXFxcLj8nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIG1uZW1vbmljICovXG4gICAgICAgICdhZGMgYWRkIGFkaXcgYW5kIGFuZGkgYXNyIGJjbHIgYmxkIGJyYmMgYnJicyBicmNjIGJyY3MgYnJlYWsgYnJlcSBicmdlIGJyaGMgYnJocyAnICtcbiAgICAgICAgJ2JyaWQgYnJpZSBicmxvIGJybHQgYnJtaSBicm5lIGJycGwgYnJzaCBicnRjIGJydHMgYnJ2YyBicnZzIGJzZXQgYnN0IGNhbGwgY2JpIGNiciAnICtcbiAgICAgICAgJ2NsYyBjbGggY2xpIGNsbiBjbHIgY2xzIGNsdCBjbHYgY2x6IGNvbSBjcCBjcGMgY3BpIGNwc2UgZGVjIGVpY2FsbCBlaWptcCBlbHBtIGVvciAnICtcbiAgICAgICAgJ2ZtdWwgZm11bHMgZm11bHN1IGljYWxsIGlqbXAgaW4gaW5jIGptcCBsZCBsZGQgbGRpIGxkcyBscG0gbHNsIGxzciBtb3YgbW92dyBtdWwgJyArXG4gICAgICAgICdtdWxzIG11bHN1IG5lZyBub3Agb3Igb3JpIG91dCBwb3AgcHVzaCByY2FsbCByZXQgcmV0aSByam1wIHJvbCByb3Igc2JjIHNiciBzYnJjIHNicnMgJyArXG4gICAgICAgICdzZWMgc2VoIHNiaSBzYmNpIHNiaWMgc2JpcyBzYml3IHNlaSBzZW4gc2VyIHNlcyBzZXQgc2V2IHNleiBzbGVlcCBzcG0gc3Qgc3RkIHN0cyBzdWIgJyArXG4gICAgICAgICdzdWJpIHN3YXAgdHN0IHdkcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAqL1xuICAgICAgICAncjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgcjE2IHIxNyByMTggcjE5IHIyMCByMjEgcjIyICcgK1xuICAgICAgICAncjIzIHIyNCByMjUgcjI2IHIyNyByMjggcjI5IHIzMCByMzEgeHwwIHhoIHhsIHl8MCB5aCB5bCB6fDAgemggemwgJyArXG4gICAgICAgIC8qIElPIFJlZ2lzdGVycyAoQVRNZWdhMTI4KSAqL1xuICAgICAgICAndWNzcjFjIHVkcjEgdWNzcjFhIHVjc3IxYiB1YnJyMWwgdWJycjFoIHVjc3IwYyB1YnJyMGggdGNjcjNjIHRjY3IzYSB0Y2NyM2IgdGNudDNoICcgK1xuICAgICAgICAndGNudDNsIG9jcjNhaCBvY3IzYWwgb2NyM2JoIG9jcjNibCBvY3IzY2ggb2NyM2NsIGljcjNoIGljcjNsIGV0aW1zayBldGlmciB0Y2NyMWMgJyArXG4gICAgICAgICdvY3IxY2ggb2NyMWNsIHR3Y3IgdHdkciB0d2FyIHR3c3IgdHdiciBvc2NjYWwgeG1jcmEgeG1jcmIgZWljcmEgc3BtY3NyIHNwbWNyIHBvcnRnICcgK1xuICAgICAgICAnZGRyZyBwaW5nIHBvcnRmIGRkcmYgc3JlZyBzcGggc3BsIHhkaXYgcmFtcHogZWljcmIgZWltc2sgZ2ltc2sgZ2ljciBlaWZyIGdpZnIgdGltc2sgJyArXG4gICAgICAgICd0aWZyIG1jdWNyIG1jdWNzciB0Y2NyMCB0Y250MCBvY3IwIGFzc3IgdGNjcjFhIHRjY3IxYiB0Y250MWggdGNudDFsIG9jcjFhaCBvY3IxYWwgJyArXG4gICAgICAgICdvY3IxYmggb2NyMWJsIGljcjFoIGljcjFsIHRjY3IyIHRjbnQyIG9jcjIgb2NkciB3ZHRjciBzZmlvciBlZWFyaCBlZWFybCBlZWRyIGVlY3IgJyArXG4gICAgICAgICdwb3J0YSBkZHJhIHBpbmEgcG9ydGIgZGRyYiBwaW5iIHBvcnRjIGRkcmMgcGluYyBwb3J0ZCBkZHJkIHBpbmQgc3BkciBzcHNyIHNwY3IgdWRyMCAnICtcbiAgICAgICAgJ3Vjc3IwYSB1Y3NyMGIgdWJycjBsIGFjc3IgYWRtdXggYWRjc3IgYWRjaCBhZGNsIHBvcnRlIGRkcmUgcGluZSBwaW5mJyxcbiAgICAgIG1ldGE6XG4gICAgICAgICcuYnl0ZSAuY3NlZyAuZGIgLmRlZiAuZGV2aWNlIC5kc2VnIC5kdyAuZW5kbWFjcm8gLmVxdSAuZXNlZyAuZXhpdCAuaW5jbHVkZSAubGlzdCAnICtcbiAgICAgICAgJy5saXN0bWFjIC5tYWNybyAubm9saXN0IC5vcmcgLnNldCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnOycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLCAvLyAweC4uLiwgZGVjaW1hbCwgZmxvYXRcbiAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLCAvLyAwYi4uLlxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFwkW2EtekEtWjAtOV0rfDBvWzAtN10rKScgLy8gJC4uLiwgMG8uLi5cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1teXFxcXFxcXFxdW15cXCddJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdeW0EtWmEtejAtOV8uJF0rOidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLFxuICAgICAgICBlbmQ6ICckJ1xuICAgICAgfSxcbiAgICAgIHsgLy8gc3Vic3RpdHV0aW9uIHdpdGhpbiBhIG1hY3JvXG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgYmVnaW46ICdAWzAtOV0rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhdnJhc207XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQXdrXG5BdXRob3I6IE1hdHRoZXcgRGFseSA8bWF0dGhld2JkYWx5QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2F3ay9tYW51YWwvZ2F3ay5odG1sXG5EZXNjcmlwdGlvbjogbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgQXdrIHNjcmlwdHNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhd2soaGxqcykge1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkXFx7KC4qPylcXH0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBLRVlXT1JEUyA9ICdCRUdJTiBFTkQgaWYgZWxzZSB3aGlsZSBkbyBmb3IgaW4gYnJlYWsgY29udGludWUgZGVsZXRlIG5leHQgbmV4dGZpbGUgZnVuY3Rpb24gZnVuYyBleGl0fDEwJztcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8Yik/cj8nJycvLFxuICAgICAgICBlbmQ6IC8nJycvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fGIpP3I/XCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxyfHVyKScvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxyfHVyKVwiLyxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhifGJyKScvLFxuICAgICAgICBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oYnxicilcIi8sXG4gICAgICAgIGVuZDogL1wiL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0F3aycsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXdrO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE1pY3Jvc29mdCBYKytcbkRlc2NyaXB0aW9uOiBYKysgaXMgYSBsYW5ndWFnZSB1c2VkIGluIE1pY3Jvc29mdCBEeW5hbWljcyAzNjUsIER5bmFtaWNzIEFYLCBhbmQgQXhhcHRhLlxuQXV0aG9yOiBEbWl0cmkgUm91ZGFrb3YgPGRtaXRyaUByb3VkYWtvdi5ydT5cbldlYnNpdGU6IGh0dHBzOi8vZHluYW1pY3MubWljcm9zb2Z0LmNvbS9lbi11cy9heC1vdmVydmlldy9cbkNhdGVnb3J5OiBlbnRlcnByaXNlXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYXhhcHRhKGhsanMpIHtcbiAgY29uc3QgQlVJTFRfSU5fS0VZV09SRFMgPSBbXG4gICAgJ2FueXR5cGUnLFxuICAgICdib29sZWFuJyxcbiAgICAnYnl0ZScsXG4gICAgJ2NoYXInLFxuICAgICdjb250YWluZXInLFxuICAgICdkYXRlJyxcbiAgICAnZG91YmxlJyxcbiAgICAnZW51bScsXG4gICAgJ2d1aWQnLFxuICAgICdpbnQnLFxuICAgICdpbnQ2NCcsXG4gICAgJ2xvbmcnLFxuICAgICdyZWFsJyxcbiAgICAnc2hvcnQnLFxuICAgICdzdHInLFxuICAgICd1dGNkYXRldGltZScsXG4gICAgJ3ZhcidcbiAgXTtcblxuICBjb25zdCBMSVRFUkFMX0tFWVdPUkRTID0gW1xuICAgICdkZWZhdWx0JyxcbiAgICAnZmFsc2UnLFxuICAgICdudWxsJyxcbiAgICAndHJ1ZSdcbiAgXTtcblxuICBjb25zdCBOT1JNQUxfS0VZV09SRFMgPSBbXG4gICAgJ2Fic3RyYWN0JyxcbiAgICAnYXMnLFxuICAgICdhc2MnLFxuICAgICdhdmcnLFxuICAgICdicmVhaycsXG4gICAgJ2JyZWFrcG9pbnQnLFxuICAgICdieScsXG4gICAgJ2J5cmVmJyxcbiAgICAnY2FzZScsXG4gICAgJ2NhdGNoJyxcbiAgICAnY2hhbmdlY29tcGFueScsXG4gICAgJ2NsYXNzJyxcbiAgICAnY2xpZW50JyxcbiAgICAnY2xpZW50JyxcbiAgICAnY29tbW9uJyxcbiAgICAnY29uc3QnLFxuICAgICdjb250aW51ZScsXG4gICAgJ2NvdW50JyxcbiAgICAnY3Jvc3Njb21wYW55JyxcbiAgICAnZGVsZWdhdGUnLFxuICAgICdkZWxldGVfZnJvbScsXG4gICAgJ2Rlc2MnLFxuICAgICdkaXNwbGF5JyxcbiAgICAnZGl2JyxcbiAgICAnZG8nLFxuICAgICdlZGl0JyxcbiAgICAnZWxzZScsXG4gICAgJ2V2ZW50aGFuZGxlcicsXG4gICAgJ2V4aXN0cycsXG4gICAgJ2V4dGVuZHMnLFxuICAgICdmaW5hbCcsXG4gICAgJ2ZpbmFsbHknLFxuICAgICdmaXJzdGZhc3QnLFxuICAgICdmaXJzdG9ubHknLFxuICAgICdmaXJzdG9ubHkxJyxcbiAgICAnZmlyc3Rvbmx5MTAnLFxuICAgICdmaXJzdG9ubHkxMDAnLFxuICAgICdmaXJzdG9ubHkxMDAwJyxcbiAgICAnZmx1c2gnLFxuICAgICdmb3InLFxuICAgICdmb3JjZWxpdGVyYWxzJyxcbiAgICAnZm9yY2VuZXN0ZWRsb29wJyxcbiAgICAnZm9yY2VwbGFjZWhvbGRlcnMnLFxuICAgICdmb3JjZXNlbGVjdG9yZGVyJyxcbiAgICAnZm9ydXBkYXRlJyxcbiAgICAnZnJvbScsXG4gICAgJ2dlbmVyYXRlb25seScsXG4gICAgJ2dyb3VwJyxcbiAgICAnaGludCcsXG4gICAgJ2lmJyxcbiAgICAnaW1wbGVtZW50cycsXG4gICAgJ2luJyxcbiAgICAnaW5kZXgnLFxuICAgICdpbnNlcnRfcmVjb3Jkc2V0JyxcbiAgICAnaW50ZXJmYWNlJyxcbiAgICAnaW50ZXJuYWwnLFxuICAgICdpcycsXG4gICAgJ2pvaW4nLFxuICAgICdsaWtlJyxcbiAgICAnbWF4b2YnLFxuICAgICdtaW5vZicsXG4gICAgJ21vZCcsXG4gICAgJ25hbWVzcGFjZScsXG4gICAgJ25ldycsXG4gICAgJ25leHQnLFxuICAgICdub2ZldGNoJyxcbiAgICAnbm90ZXhpc3RzJyxcbiAgICAnb3B0aW1pc3RpY2xvY2snLFxuICAgICdvcmRlcicsXG4gICAgJ291dGVyJyxcbiAgICAncGVzc2ltaXN0aWNsb2NrJyxcbiAgICAncHJpbnQnLFxuICAgICdwcml2YXRlJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAncHVibGljJyxcbiAgICAncmVhZG9ubHknLFxuICAgICdyZXBlYXRhYmxlcmVhZCcsXG4gICAgJ3JldHJ5JyxcbiAgICAncmV0dXJuJyxcbiAgICAncmV2ZXJzZScsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3NlcnZlcicsXG4gICAgJ3NldHRpbmcnLFxuICAgICdzdGF0aWMnLFxuICAgICdzdW0nLFxuICAgICdzdXBlcicsXG4gICAgJ3N3aXRjaCcsXG4gICAgJ3RoaXMnLFxuICAgICd0aHJvdycsXG4gICAgJ3RyeScsXG4gICAgJ3R0c2Fib3J0JyxcbiAgICAndHRzYmVnaW4nLFxuICAgICd0dHNjb21taXQnLFxuICAgICd1bmNoZWNrZWQnLFxuICAgICd1cGRhdGVfcmVjb3Jkc2V0JyxcbiAgICAndXNpbmcnLFxuICAgICd2YWxpZHRpbWVzdGF0ZScsXG4gICAgJ3ZvaWQnLFxuICAgICd3aGVyZScsXG4gICAgJ3doaWxlJ1xuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IE5PUk1BTF9LRVlXT1JEUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5fS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTF9LRVlXT1JEU1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1grKycsXG4gICAgYWxpYXNlczogWyd4KysnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICc6JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBheGFwdGE7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEJhc2hcbkF1dGhvcjogdmFoIDx2YWh0ZW5iZXJnQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dHJvcnM6IEJlbmphbWluIFBhbm5lbGwgPGNvbnRhY3RAc2llcnJhc29mdHdvcmtzLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9cbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBiYXNoKGhsanMpIHtcbiAgY29uc3QgVkFSID0ge307XG4gIGNvbnN0IEJSQUNFRF9WQVIgPSB7XG4gICAgYmVnaW46IC9cXCRcXHsvLFxuICAgIGVuZDovXFx9LyxcbiAgICBjb250YWluczogW1xuICAgICAgXCJzZWxmXCIsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOi0vLFxuICAgICAgICBjb250YWluczogWyBWQVIgXVxuICAgICAgfSAvLyBkZWZhdWx0IHZhbHVlc1xuICAgIF1cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihWQVIse1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiBjb25jYXQoL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qLyxcbiAgICAgICAgLy8gbmVnYXRpdmUgbG9vay1haGVhZCB0cmllcyB0byBhdm9pZCBtYXRjaGluZyBwYXR0ZXJucyB0aGF0IGFyZSBub3RcbiAgICAgICAgLy8gUGVybCBhdCBhbGwgbGlrZSAkaWRlbnQkLCBAaWRlbnRALCBldGMuXG4gICAgICAgIGAoPyFbXFxcXHdcXFxcZF0pKD8hWyRdKWApIH0sXG4gICAgICBCUkFDRURfVkFSXG4gICAgXVxuICB9KTtcblxuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC9cXCRcXCgvLCBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBjb25zdCBIRVJFX0RPQyA9IHtcbiAgICBiZWdpbjogLzw8LT9cXHMqKD89XFx3KykvLFxuICAgIHN0YXJ0czoge1xuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgICAgYmVnaW46IC8oXFx3KykvLFxuICAgICAgICAgIGVuZDogLyhcXHcrKS8sXG4gICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJ1xuICAgICAgICB9KVxuICAgICAgXVxuICAgIH1cbiAgfTtcbiAgY29uc3QgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zLnB1c2goUVVPVEVfU1RSSU5HKTtcbiAgY29uc3QgRVNDQVBFRF9RVU9URSA9IHtcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGJlZ2luOiAvXFxcXFwiL1xuXG4gIH07XG4gIGNvbnN0IEFQT1NfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLywgZW5kOiAvJy9cbiAgfTtcbiAgY29uc3QgQVJJVEhNRVRJQyA9IHtcbiAgICBiZWdpbjogL1xcJFxcKFxcKC8sXG4gICAgZW5kOiAvXFwpXFwpLyxcbiAgICBjb250YWluczogW1xuICAgICAgeyBiZWdpbjogL1xcZCsjWzAtOWEtZl0rLywgY2xhc3NOYW1lOiBcIm51bWJlclwiIH0sXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgVkFSXG4gICAgXVxuICB9O1xuICBjb25zdCBTSF9MSUtFX1NIRUxMUyA9IFtcbiAgICBcImZpc2hcIixcbiAgICBcImJhc2hcIixcbiAgICBcInpzaFwiLFxuICAgIFwic2hcIixcbiAgICBcImNzaFwiLFxuICAgIFwia3NoXCIsXG4gICAgXCJ0Y3NoXCIsXG4gICAgXCJkYXNoXCIsXG4gICAgXCJzY3NoXCIsXG4gIF07XG4gIGNvbnN0IEtOT1dOX1NIRUJBTkcgPSBobGpzLlNIRUJBTkcoe1xuICAgIGJpbmFyeTogYCgke1NIX0xJS0VfU0hFTExTLmpvaW4oXCJ8XCIpfSlgLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfSk7XG4gIGNvbnN0IEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbjogL1xcd1tcXHdcXGRfXSpcXHMqXFwoXFxzKlxcKVxccypcXHsvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAvXFx3W1xcd1xcZF9dKi99KV0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQmFzaCcsXG4gICAgYWxpYXNlczogWydzaCcsICd6c2gnXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9cXGJbYS16Ll8tXStcXGIvLFxuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciB3aGlsZSBpbiBkbyBkb25lIGNhc2UgZXNhYyBmdW5jdGlvbicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gU2hlbGwgYnVpbHQtaW5zXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtQnVpbHRpbi1Db21tYW5kcy5odG1sXG4gICAgICAgICdicmVhayBjZCBjb250aW51ZSBldmFsIGV4ZWMgZXhpdCBleHBvcnQgZ2V0b3B0cyBoYXNoIHB3ZCByZWFkb25seSByZXR1cm4gc2hpZnQgdGVzdCB0aW1lcyAnICtcbiAgICAgICAgJ3RyYXAgdW1hc2sgdW5zZXQgJyArXG4gICAgICAgIC8vIEJhc2ggYnVpbHQtaW5zXG4gICAgICAgICdhbGlhcyBiaW5kIGJ1aWx0aW4gY2FsbGVyIGNvbW1hbmQgZGVjbGFyZSBlY2hvIGVuYWJsZSBoZWxwIGxldCBsb2NhbCBsb2dvdXQgbWFwZmlsZSBwcmludGYgJyArXG4gICAgICAgICdyZWFkIHJlYWRhcnJheSBzb3VyY2UgdHlwZSB0eXBlc2V0IHVsaW1pdCB1bmFsaWFzICcgK1xuICAgICAgICAvLyBTaGVsbCBtb2RpZmllcnNcbiAgICAgICAgJ3NldCBzaG9wdCAnICtcbiAgICAgICAgLy8gWnNoIGJ1aWx0LWluc1xuICAgICAgICAnYXV0b2xvYWQgYmcgYmluZGtleSBieWUgY2FwIGNoZGlyIGNsb25lIGNvbXBhcmd1bWVudHMgY29tcGNhbGwgY29tcGN0bCBjb21wZGVzY3JpYmUgY29tcGZpbGVzICcgK1xuICAgICAgICAnY29tcGdyb3VwcyBjb21wcXVvdGUgY29tcHRhZ3MgY29tcHRyeSBjb21wdmFsdWVzIGRpcnMgZGlzYWJsZSBkaXNvd24gZWNob3RjIGVjaG90aSBlbXVsYXRlICcgK1xuICAgICAgICAnZmMgZmcgZmxvYXQgZnVuY3Rpb25zIGdldGNhcCBnZXRsbiBoaXN0b3J5IGludGVnZXIgam9icyBraWxsIGxpbWl0IGxvZyBub2dsb2IgcG9wZCBwcmludCAnICtcbiAgICAgICAgJ3B1c2hkIHB1c2hsbiByZWhhc2ggc2NoZWQgc2V0Y2FwIHNldG9wdCBzdGF0IHN1c3BlbmQgdHR5Y3RsIHVuZnVuY3Rpb24gdW5oYXNoIHVubGltaXQgJyArXG4gICAgICAgICd1bnNldG9wdCB2YXJlZCB3YWl0IHdoZW5jZSB3aGVyZSB3aGljaCB6Y29tcGlsZSB6Zm9ybWF0IHpmdHAgemxlIHptb2Rsb2FkIHpwYXJzZW9wdHMgenByb2YgJyArXG4gICAgICAgICd6cHR5IHpyZWdleHBhcnNlIHpzb2NrZXQgenN0eWxlIHp0Y3AnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgS05PV05fU0hFQkFORywgLy8gdG8gY2F0Y2gga25vd24gc2hlbGxzIGFuZCBib29zdCByZWxldmFuY3lcbiAgICAgIGhsanMuU0hFQkFORygpLCAvLyB0byBjYXRjaCB1bmtub3duIHNoZWxscyBidXQgc3RpbGwgaGlnaGxpZ2h0IHRoZSBzaGViYW5nXG4gICAgICBGVU5DVElPTixcbiAgICAgIEFSSVRITUVUSUMsXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgSEVSRV9ET0MsXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBFU0NBUEVEX1FVT1RFLFxuICAgICAgQVBPU19TVFJJTkcsXG4gICAgICBWQVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzaDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBCQVNJQ1xuQXV0aG9yOiBSYXBoYcOrbCBBc3PDqW5hdCA8cmFwaEByYXBobmV0Lm5ldD5cbkRlc2NyaXB0aW9uOiBCYXNlZCBvbiB0aGUgQkFTSUMgcmVmZXJlbmNlIGZyb20gdGhlIFRhbmR5IDEwMDAgZ3VpZGVcbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RhbmR5XzEwMDBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBiYXNpYyhobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0JBU0lDJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6ICdeXFwuJyxcbiAgICAvLyBTdXBwb3J0IGV4cGxpY2l0bHkgdHlwZWQgdmFyaWFibGVzIHRoYXQgZW5kIHdpdGggJCUhIG9yICMuXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnW2EtekEtWl1bYS16QS1aMC05XyQlISNdKicsXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnQUJTIEFTQyBBTkQgQVROIEFVVE98MCBCRUVQIEJMT0FEfDEwIEJTQVZFfDEwIENBTEwgQ0FMTFMgQ0RCTCBDSEFJTiBDSERJUiBDSFIkfDEwIENJTlQgQ0lSQ0xFICcgK1xuICAgICAgICAnQ0xFQVIgQ0xPU0UgQ0xTIENPTE9SIENPTSBDT01NT04gQ09OVCBDT1MgQ1NORyBDU1JMSU4gQ1ZEIENWSSBDVlMgREFUQSBEQVRFJCAnICtcbiAgICAgICAgJ0RFRkRCTCBERUZJTlQgREVGU05HIERFRlNUUiBERUZ8MCBTRUcgVVNSIERFTEVURSBESU0gRFJBVyBFRElUIEVORCBFTlZJUk9OIEVOVklST04kICcgK1xuICAgICAgICAnRU9GIEVRViBFUkFTRSBFUkRFViBFUkRFViQgRVJMIEVSUiBFUlJPUiBFWFAgRklFTEQgRklMRVMgRklYIEZPUnwwIEZSRSBHRVQgR09TVUJ8MTAgR09UTyAnICtcbiAgICAgICAgJ0hFWCQgSUYgVEhFTiBFTFNFfDAgSU5LRVkkIElOUCBJTlBVVCBJTlBVVCMgSU5QVVQkIElOU1RSIElNUCBJTlQgSU9DVEwgSU9DVEwkIEtFWSBPTiAnICtcbiAgICAgICAgJ09GRiBMSVNUIEtJTEwgTEVGVCQgTEVOIExFVCBMSU5FIExMSVNUIExPQUQgTE9DIExPQ0FURSBMT0YgTE9HIExQUklOVCBVU0lORyBMU0VUICcgK1xuICAgICAgICAnTUVSR0UgTUlEJCBNS0RJUiBNS0QkIE1LSSQgTUtTJCBNT0QgTkFNRSBORVcgTkVYVCBOT0lTRSBOT1QgT0NUJCBPTiBPUiBQRU4gUExBWSBTVFJJRyBPUEVOIE9QVElPTiAnICtcbiAgICAgICAgJ0JBU0UgT1VUIFBBSU5UIFBBTEVUVEUgUENPUFkgUEVFSyBQTUFQIFBPSU5UIFBPS0UgUE9TIFBSSU5UIFBSSU5UXSBQU0VUIFBSRVNFVCAnICtcbiAgICAgICAgJ1BVVCBSQU5ET01JWkUgUkVBRCBSRU0gUkVOVU0gUkVTRVR8MCBSRVNUT1JFIFJFU1VNRSBSRVRVUk58MCBSSUdIVCQgUk1ESVIgUk5EIFJTRVQgJyArXG4gICAgICAgICdSVU4gU0FWRSBTQ1JFRU4gU0dOIFNIRUxMIFNJTiBTT1VORCBTUEFDRSQgU1BDIFNRUiBTVEVQIFNUSUNLIFNUT1AgU1RSJCBTVFJJTkckIFNXQVAgJyArXG4gICAgICAgICdTWVNURU0gVEFCIFRBTiBUSU1FJCBUSU1FUiBUUk9GRiBUUk9OIFRPIFVTUiBWQUwgVkFSUFRSIFZBUlBUUiQgVklFVyBXQUlUIFdISUxFICcgK1xuICAgICAgICAnV0VORCBXSURUSCBXSU5ET1cgV1JJVEUgWE9SJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJ1JFTScsICckJywge1xuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9KSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXFwnJywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIGxpbmUgbnVtYmVyc1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ15bMC05XSsgJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTWF0Y2ggdHlwZWQgbnVtZXJpYyBjb25zdGFudHMgKDEwMDAsIDEyLjM0ISwgMS4yZTUsIDEuNSMsIDEuMkQyKVxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8oW2VkRURdXFxcXGQrKT9bI1xcIV0/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBNYXRjaCBoZXhhZGVjaW1hbCBudW1iZXJzICgmSHh4eHgpXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKCZbaEhdWzAtOWEtZkEtRl17MSw0fSknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBNYXRjaCBvY3RhbCBudW1iZXJzICgmT3h4eHh4eClcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoJltvT11bMC03XXsxLDZ9KSdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzaWM7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQmFja3Vz4oCTTmF1ciBGb3JtXG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYWNrdXPigJNOYXVyX2Zvcm1cbkF1dGhvcjogT2xlZyBFZmltb3YgPGVmaW1vdm92QGdtYWlsLmNvbT5cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBibmYoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCYWNrdXPigJNOYXVyIEZvcm0nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBBdHRyaWJ1dGVcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46IC88LyxcbiAgICAgICAgZW5kOiAvPi9cbiAgICAgIH0sXG4gICAgICAvLyBTcGVjaWZpY1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzo6PS8sXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sXG4gICAgICAgICAgICBlbmQ6IC8+L1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gQ29tbW9uXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBibmY7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQnJhaW5mdWNrXG5BdXRob3I6IEV2Z2VueSBTdGVwYW5pc2NoZXYgPGltYm9sa0BnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2Vzb2xhbmdzLm9yZy93aWtpL0JyYWluZnVja1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGJyYWluZnVjayhobGpzKSB7XG4gIGNvbnN0IExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9bKy1dLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQnJhaW5mdWNrJyxcbiAgICBhbGlhc2VzOiBbJ2JmJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1teXFxcXFtcXFxcXVxcXFwuLFxcXFwrXFxcXC08PiBcXHJcXG5dJyxcbiAgICAgICAgJ1tcXFxcW1xcXFxdXFxcXC4sXFxcXCtcXFxcLTw+IFxcclxcbl0nLFxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnW1xcXFxbXFxcXF1dJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1tcXFxcLixdJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0aGlzIG1vZGUgd29ya3MgYXMgdGhlIG9ubHkgcmVsZXZhbmNlIGNvdW50ZXJcbiAgICAgICAgYmVnaW46IC8oPzpcXCtcXCt8LS0pLyxcbiAgICAgICAgY29udGFpbnM6IFtMSVRFUkFMXVxuICAgICAgfSxcbiAgICAgIExJVEVSQUxcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnJhaW5mdWNrO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rYWhlYWQocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD89JywgcmUsICcpJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb3B0aW9uYWwocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKCcsIHJlLCAnKT8nKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBDKytcbkNhdGVnb3J5OiBjb21tb24sIHN5c3RlbVxuV2Vic2l0ZTogaHR0cHM6Ly9pc29jcHAub3JnXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY1BsdXNQbHVzKGhsanMpIHtcbiAgLy8gYWRkZWQgZm9yIGhpc3RvcmljIHJlYXNvbnMgYmVjYXVzZSBgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFYCBkb2VzXG4gIC8vIG5vdCBpbmNsdWRlIHN1Y2ggc3VwcG9ydCBub3IgY2FuIHdlIGJlIHN1cmUgYWxsIHRoZSBncmFtbWFycyBkZXBlbmRpbmdcbiAgLy8gb24gaXQgd291bGQgZGVzaXJlIHRoaXMgYmVoYXZpb3JcbiAgY29uc3QgQ19MSU5FX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLy8nLCAnJCcsIHtcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vXG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgY29uc3QgREVDTFRZUEVfQVVUT19SRSA9ICdkZWNsdHlwZVxcXFwoYXV0b1xcXFwpJztcbiAgY29uc3QgTkFNRVNQQUNFX1JFID0gJ1thLXpBLVpfXVxcXFx3Kjo6JztcbiAgY29uc3QgVEVNUExBVEVfQVJHVU1FTlRfUkUgPSAnPFtePD5dKz4nO1xuICBjb25zdCBGVU5DVElPTl9UWVBFX1JFID0gJygnICtcbiAgICBERUNMVFlQRV9BVVRPX1JFICsgJ3wnICtcbiAgICBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICtcbiAgICAnW2EtekEtWl9dXFxcXHcqJyArIG9wdGlvbmFsKFRFTVBMQVRFX0FSR1VNRU5UX1JFKSArXG4gICcpJztcbiAgY29uc3QgQ1BQX1BSSU1JVElWRV9UWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogJ1xcXFxiW2EtelxcXFxkX10qX3RcXFxcYidcbiAgfTtcblxuICAvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvZXNjYXBlXG4gIC8vIFxcXFwgXFx4IFxceEZGIFxcdTI4MzcgXFx1MDAzMjM3NDcgXFwzNzRcbiAgY29uc3QgQ0hBUkFDVEVSX0VTQ0FQRVMgPSAnXFxcXFxcXFwoeFswLTlBLUZhLWZdezJ9fHVbMC05QS1GYS1mXXs0LDh9fFswLTddezN9fFxcXFxTKSc7XG4gIGNvbnN0IFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VXxMKT9cIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVfEwpP1xcJygnICsgQ0hBUkFDVEVSX0VTQ0FQRVMgKyBcInwuKVwiLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnLidcbiAgICAgIH0sXG4gICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgYmVnaW46IC8oPzp1OD98VXxMKT9SXCIoW14oKVxcXFwgXXswLDE2fSlcXCgvLFxuICAgICAgICBlbmQ6IC9cXCkoW14oKVxcXFwgXXswLDE2fSlcIi9cbiAgICAgIH0pXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKDBiWzAxXFwnXSspJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoLT8pXFxcXGIoW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKChsbHxMTHxsfEwpKHV8VSk/fCh1fFUpKGxsfExMfGx8TCk/fGZ8RnxifEIpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XFwnXSt8KFxcXFxiW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKFtlRV1bLStdP1tcXFxcZFxcJ10rKT8pJ1xuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvI1xccypbYS16XStcXGIvLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAnbWV0YS1rZXl3b3JkJzpcbiAgICAgICAgJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lICcgK1xuICAgICAgICAncHJhZ21hIF9QcmFnbWEgaWZkZWYgaWZuZGVmIGluY2x1ZGUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoU1RSSU5HUywge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZydcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPC4qPz4vXG4gICAgICB9LFxuICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IG9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKyBobGpzLklERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX1RJVExFID0gb3B0aW9uYWwoTkFNRVNQQUNFX1JFKSArIGhsanMuSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnO1xuXG4gIGNvbnN0IENPTU1PTl9DUFBfSElOVFMgPSBbXG4gICAgJ2FzaW4nLFxuICAgICdhdGFuMicsXG4gICAgJ2F0YW4nLFxuICAgICdjYWxsb2MnLFxuICAgICdjZWlsJyxcbiAgICAnY29zaCcsXG4gICAgJ2NvcycsXG4gICAgJ2V4aXQnLFxuICAgICdleHAnLFxuICAgICdmYWJzJyxcbiAgICAnZmxvb3InLFxuICAgICdmbW9kJyxcbiAgICAnZnByaW50ZicsXG4gICAgJ2ZwdXRzJyxcbiAgICAnZnJlZScsXG4gICAgJ2ZyZXhwJyxcbiAgICAnYXV0b19wdHInLFxuICAgICdkZXF1ZScsXG4gICAgJ2xpc3QnLFxuICAgICdxdWV1ZScsXG4gICAgJ3N0YWNrJyxcbiAgICAndmVjdG9yJyxcbiAgICAnbWFwJyxcbiAgICAnc2V0JyxcbiAgICAncGFpcicsXG4gICAgJ2JpdHNldCcsXG4gICAgJ211bHRpc2V0JyxcbiAgICAnbXVsdGltYXAnLFxuICAgICd1bm9yZGVyZWRfc2V0JyxcbiAgICAnZnNjYW5mJyxcbiAgICAnZnV0dXJlJyxcbiAgICAnaXNhbG51bScsXG4gICAgJ2lzYWxwaGEnLFxuICAgICdpc2NudHJsJyxcbiAgICAnaXNkaWdpdCcsXG4gICAgJ2lzZ3JhcGgnLFxuICAgICdpc2xvd2VyJyxcbiAgICAnaXNwcmludCcsXG4gICAgJ2lzcHVuY3QnLFxuICAgICdpc3NwYWNlJyxcbiAgICAnaXN1cHBlcicsXG4gICAgJ2lzeGRpZ2l0JyxcbiAgICAndG9sb3dlcicsXG4gICAgJ3RvdXBwZXInLFxuICAgICdsYWJzJyxcbiAgICAnbGRleHAnLFxuICAgICdsb2cxMCcsXG4gICAgJ2xvZycsXG4gICAgJ21hbGxvYycsXG4gICAgJ3JlYWxsb2MnLFxuICAgICdtZW1jaHInLFxuICAgICdtZW1jbXAnLFxuICAgICdtZW1jcHknLFxuICAgICdtZW1zZXQnLFxuICAgICdtb2RmJyxcbiAgICAncG93JyxcbiAgICAncHJpbnRmJyxcbiAgICAncHV0Y2hhcicsXG4gICAgJ3B1dHMnLFxuICAgICdzY2FuZicsXG4gICAgJ3NpbmgnLFxuICAgICdzaW4nLFxuICAgICdzbnByaW50ZicsXG4gICAgJ3NwcmludGYnLFxuICAgICdzcXJ0JyxcbiAgICAnc3NjYW5mJyxcbiAgICAnc3RyY2F0JyxcbiAgICAnc3RyY2hyJyxcbiAgICAnc3RyY21wJyxcbiAgICAnc3RyY3B5JyxcbiAgICAnc3RyY3NwbicsXG4gICAgJ3N0cmxlbicsXG4gICAgJ3N0cm5jYXQnLFxuICAgICdzdHJuY21wJyxcbiAgICAnc3RybmNweScsXG4gICAgJ3N0cnBicmsnLFxuICAgICdzdHJyY2hyJyxcbiAgICAnc3Ryc3BuJyxcbiAgICAnc3Ryc3RyJyxcbiAgICAndGFuaCcsXG4gICAgJ3RhbicsXG4gICAgJ3Vub3JkZXJlZF9tYXAnLFxuICAgICd1bm9yZGVyZWRfbXVsdGlzZXQnLFxuICAgICd1bm9yZGVyZWRfbXVsdGltYXAnLFxuICAgICdwcmlvcml0eV9xdWV1ZScsXG4gICAgJ21ha2VfcGFpcicsXG4gICAgJ2FycmF5JyxcbiAgICAnc2hhcmVkX3B0cicsXG4gICAgJ2Fib3J0JyxcbiAgICAndGVybWluYXRlJyxcbiAgICAnYWJzJyxcbiAgICAnYWNvcycsXG4gICAgJ3ZmcHJpbnRmJyxcbiAgICAndnByaW50ZicsXG4gICAgJ3ZzcHJpbnRmJyxcbiAgICAnZW5kbCcsXG4gICAgJ2luaXRpYWxpemVyX2xpc3QnLFxuICAgICd1bmlxdWVfcHRyJyxcbiAgICAnY29tcGxleCcsXG4gICAgJ2ltYWdpbmFyeScsXG4gICAgJ3N0ZCcsXG4gICAgJ3N0cmluZycsXG4gICAgJ3dzdHJpbmcnLFxuICAgICdjaW4nLFxuICAgICdjb3V0JyxcbiAgICAnY2VycicsXG4gICAgJ2Nsb2cnLFxuICAgICdzdGRpbicsXG4gICAgJ3N0ZG91dCcsXG4gICAgJ3N0ZGVycicsXG4gICAgJ3N0cmluZ3N0cmVhbScsXG4gICAgJ2lzdHJpbmdzdHJlYW0nLFxuICAgICdvc3RyaW5nc3RyZWFtJ1xuICBdO1xuXG4gIGNvbnN0IENQUF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjaGFyOF90IGNoYXIxNl90IGNoYXIzMl90IGNhdGNoIGltcG9ydCBtb2R1bGUgZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mICcgK1xuICAgICAgJ2R5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSAnICtcbiAgICAgICd1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgJyArXG4gICAgICAnZG8gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiB1c2luZyBhc20gY2FzZSB0eXBlaWQgd2NoYXJfdCAnICtcbiAgICAgICdzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyAnICtcbiAgICAgICdzd2l0Y2ggY29udGludWUgaW5saW5lIGRlbGV0ZSBhbGlnbmFzIGFsaWdub2YgY29uc3RleHByIGNvbnN0ZXZhbCBjb25zdGluaXQgZGVjbHR5cGUgJyArXG4gICAgICAnY29uY2VwdCBjb19hd2FpdCBjb19yZXR1cm4gY29feWllbGQgcmVxdWlyZXMgJyArXG4gICAgICAnbm9leGNlcHQgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgZmluYWwgb3ZlcnJpZGUgJyArXG4gICAgICAnYXRvbWljX2Jvb2wgYXRvbWljX2NoYXIgYXRvbWljX3NjaGFyICcgK1xuICAgICAgJ2F0b21pY191Y2hhciBhdG9taWNfc2hvcnQgYXRvbWljX3VzaG9ydCBhdG9taWNfaW50IGF0b21pY191aW50IGF0b21pY19sb25nIGF0b21pY191bG9uZyBhdG9taWNfbGxvbmcgJyArXG4gICAgICAnYXRvbWljX3VsbG9uZyBuZXcgdGhyb3cgcmV0dXJuICcgK1xuICAgICAgJ2FuZCBhbmRfZXEgYml0YW5kIGJpdG9yIGNvbXBsIG5vdCBub3RfZXEgb3Igb3JfZXEgeG9yIHhvcl9lcScsXG4gICAgYnVpbHRfaW46ICdfQm9vbCBfQ29tcGxleCBfSW1hZ2luYXJ5JyxcbiAgICBfcmVsZXZhbmNlX2hpbnRzOiBDT01NT05fQ1BQX0hJTlRTLFxuICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGxwdHIgTlVMTCdcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ESVNQQVRDSCA9IHtcbiAgICBjbGFzc05hbWU6IFwiZnVuY3Rpb24uZGlzcGF0Y2hcIixcbiAgICByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBiZWdpbjogY29uY2F0KFxuICAgICAgL1xcYi8sXG4gICAgICAvKD8hZGVjbHR5cGUpLyxcbiAgICAgIC8oPyFpZikvLFxuICAgICAgLyg/IWZvcikvLFxuICAgICAgLyg/IXdoaWxlKS8sXG4gICAgICBobGpzLklERU5UX1JFLFxuICAgICAgbG9va2FoZWFkKC9cXHMqXFwoLykpXG4gIH07XG5cbiAgY29uc3QgRVhQUkVTU0lPTl9DT05UQUlOUyA9IFtcbiAgICBGVU5DVElPTl9ESVNQQVRDSCxcbiAgICBQUkVQUk9DRVNTT1IsXG4gICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBTVFJJTkdTXG4gIF07XG5cblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRFWFQgPSB7XG4gICAgLy8gVGhpcyBtb2RlIGNvdmVycyBleHByZXNzaW9uIGNvbnRleHQgd2hlcmUgd2UgY2FuJ3QgZXhwZWN0IGEgZnVuY3Rpb25cbiAgICAvLyBkZWZpbml0aW9uIGFuZCBzaG91bGRuJ3QgaGlnaGxpZ2h0IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBvbmU6XG4gICAgLy8gYHJldHVybiBzb21lKClgLCBgZWxzZSBpZigpYCwgYCh4KnN1bSgxLCAyKSlgXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89LyxcbiAgICAgICAgZW5kOiAvOy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIGVuZDogLzsvXG4gICAgICB9XG4gICAgXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFsgJ3NlbGYnIF0pLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ERUNMQVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46ICcoJyArIEZVTkNUSU9OX1RZUEVfUkUgKyAnW1xcXFwqJlxcXFxzXSspKycgKyBGVU5DVElPTl9USVRMRSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBlbmQ6IC9bezs9XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9bXlxcd1xcc1xcKiY6PD4uXS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBmdW5jdGlvbiB0aXRsZVxuICAgICAgICBiZWdpbjogREVDTFRZUEVfQVVUT19SRSxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogWyBUSVRMRV9NT0RFIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIGxvb2stYmVoaW5kIG9uIHRoZSBiZWxvdyBydWxlXG4gICAgICAvLyB0byBwcmV2ZW50IGl0IGZyb20gZ3JhYmJpbmcgdGhlIGZpbmFsIDogaW4gYSA6OiBwYWlyXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOjovLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBpbml0aWFsaXplcnNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86LyxcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICBOVU1CRVJTXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICAgICAgICAvLyBDb3VudCBtYXRjaGluZyBwYXJlbnRoZXNlcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFU1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIENQUF9QUklNSVRJVkVfVFlQRVMsXG4gICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIFBSRVBST0NFU1NPUlxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDKysnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdjYycsXG4gICAgICAnYysrJyxcbiAgICAgICdoKysnLFxuICAgICAgJ2hwcCcsXG4gICAgICAnaGgnLFxuICAgICAgJ2h4eCcsXG4gICAgICAnY3h4J1xuICAgIF0sXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNsYXNzTmFtZUFsaWFzZXM6IHtcbiAgICAgIFwiZnVuY3Rpb24uZGlzcGF0Y2hcIjogXCJidWlsdF9pblwiXG4gICAgfSxcbiAgICBjb250YWluczogW10uY29uY2F0KFxuICAgICAgRVhQUkVTU0lPTl9DT05URVhULFxuICAgICAgRlVOQ1RJT05fREVDTEFSQVRJT04sXG4gICAgICBGVU5DVElPTl9ESVNQQVRDSCxcbiAgICAgIEVYUFJFU1NJT05fQ09OVEFJTlMsXG4gICAgICBbXG4gICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAgeyAvLyBjb250YWluZXJzOiBpZSwgYHZlY3RvciA8aW50PiByb29tcyAoOSk7YFxuICAgICAgICAgIGJlZ2luOiAnXFxcXGIoZGVxdWV8bGlzdHxxdWV1ZXxwcmlvcml0eV9xdWV1ZXxwYWlyfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXFxccyo8JyxcbiAgICAgICAgICBlbmQ6ICc+JyxcbiAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZW51bSBjbGFzcyBzdHJ1Y3QgdW5pb24nLFxuICAgICAgICAgIGVuZDogL1t7Ozo8Pj1dLyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcImZpbmFsIGNsYXNzIHN0cnVjdFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdKSxcbiAgICBleHBvcnRzOiB7XG4gICAgICBwcmVwcm9jZXNzb3I6IFBSRVBST0NFU1NPUixcbiAgICAgIHN0cmluZ3M6IFNUUklOR1MsXG4gICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTXG4gICAgfVxuICB9O1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEMtbGlrZSAoZGVwcmVjYXRlZCwgdXNlIEMgYW5kIEMrKyBpbnN0ZWFkKVxuQXV0aG9yOiBJdmFuIFNhZ2FsYWV2IDxtYW5pYWNAc29mdHdhcmVtYW5pYWNzLm9yZz5cbkNvbnRyaWJ1dG9yczogRXZnZW55IFN0ZXBhbmlzY2hldiA8aW1ib2xrQGdtYWlsLmNvbT4sIFphdmVuIE11cmFkeWFuIDxtZWdhbGl2b2l0aG9zQGdtYWlsLmNvbT4sIFJvZWwgRGVja2VycyA8YWRtaW5AY29kaW5nY2F0Lm5sPiwgU2FtIFd1IDxzYW1zYW0yMzEwQGdtYWlsLmNvbT4sIEpvcmRpIFBldGl0IDxqb3JkaS5wZXRpdEBnbWFpbC5jb20+LCBQaWV0ZXIgVmFudG9ycmUgPHBpZXRlcnZhbnRvcnJlQGdtYWlsLmNvbT4sIEdvb2dsZSBJbmMuIChEYXZpZCBCZW5qYW1pbikgPGRhdmlkYmVuQGdvb2dsZS5jb20+XG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY0xpa2UoaGxqcykge1xuICBjb25zdCBsYW5nID0gY1BsdXNQbHVzKGhsanMpO1xuXG4gIGNvbnN0IENfQUxJQVNFUyA9IFtcbiAgICBcImNcIixcbiAgICBcImhcIlxuICBdO1xuXG4gIGNvbnN0IENQUF9BTElBU0VTID0gW1xuICAgICdjYycsXG4gICAgJ2MrKycsXG4gICAgJ2grKycsXG4gICAgJ2hwcCcsXG4gICAgJ2hoJyxcbiAgICAnaHh4JyxcbiAgICAnY3h4J1xuICBdO1xuXG4gIGxhbmcuZGlzYWJsZUF1dG9kZXRlY3QgPSB0cnVlO1xuICBsYW5nLmFsaWFzZXMgPSBbXTtcbiAgLy8gc3VwcG9ydCB1c2VycyBvbmx5IGxvYWRpbmcgYy1saWtlIChsZWdhY3kpXG4gIGlmICghaGxqcy5nZXRMYW5ndWFnZShcImNcIikpIGxhbmcuYWxpYXNlcy5wdXNoKC4uLkNfQUxJQVNFUyk7XG4gIGlmICghaGxqcy5nZXRMYW5ndWFnZShcImNwcFwiKSkgbGFuZy5hbGlhc2VzLnB1c2goLi4uQ1BQX0FMSUFTRVMpO1xuXG4gIC8vIGlmIGMgYW5kIGNwcCBhcmUgbG9hZGVkIGFmdGVyIHRoZW4gdGhleSB3aWxsIHJlY2xhaW0gdGhlc2VcbiAgLy8gYWxpYXNlcyBmb3IgdGhlbXNlbHZlc1xuXG4gIHJldHVybiBsYW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNMaWtlO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBvcHRpb25hbChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoJywgcmUsICcpPycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IENcbkNhdGVnb3J5OiBjb21tb24sIHN5c3RlbVxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ18ocHJvZ3JhbW1pbmdfbGFuZ3VhZ2UpXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYyhobGpzKSB7XG4gIC8vIGFkZGVkIGZvciBoaXN0b3JpYyByZWFzb25zIGJlY2F1c2UgYGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERWAgZG9lc1xuICAvLyBub3QgaW5jbHVkZSBzdWNoIHN1cHBvcnQgbm9yIGNhbiB3ZSBiZSBzdXJlIGFsbCB0aGUgZ3JhbW1hcnMgZGVwZW5kaW5nXG4gIC8vIG9uIGl0IHdvdWxkIGRlc2lyZSB0aGlzIGJlaGF2aW9yXG4gIGNvbnN0IENfTElORV9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy8vJywgJyQnLCB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuL1xuICAgICAgfVxuICAgIF1cbiAgfSk7XG4gIGNvbnN0IERFQ0xUWVBFX0FVVE9fUkUgPSAnZGVjbHR5cGVcXFxcKGF1dG9cXFxcKSc7XG4gIGNvbnN0IE5BTUVTUEFDRV9SRSA9ICdbYS16QS1aX11cXFxcdyo6Oic7XG4gIGNvbnN0IFRFTVBMQVRFX0FSR1VNRU5UX1JFID0gJzxbXjw+XSs+JztcbiAgY29uc3QgRlVOQ1RJT05fVFlQRV9SRSA9ICcoJyArXG4gICAgREVDTFRZUEVfQVVUT19SRSArICd8JyArXG4gICAgb3B0aW9uYWwoTkFNRVNQQUNFX1JFKSArXG4gICAgJ1thLXpBLVpfXVxcXFx3KicgKyBvcHRpb25hbChURU1QTEFURV9BUkdVTUVOVF9SRSkgK1xuICAnKSc7XG4gIGNvbnN0IENQUF9QUklNSVRJVkVfVFlQRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdcXFxcYlthLXpcXFxcZF9dKl90XFxcXGInXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2VzY2FwZVxuICAvLyBcXFxcIFxceCBcXHhGRiBcXHUyODM3IFxcdTAwMzIzNzQ3IFxcMzc0XG4gIGNvbnN0IENIQVJBQ1RFUl9FU0NBUEVTID0gJ1xcXFxcXFxcKHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NCw4fXxbMC03XXszfXxcXFxcUyknO1xuICBjb25zdCBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VXxMKT9cXCcoJyArIENIQVJBQ1RFUl9FU0NBUEVTICsgXCJ8LilcIixcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJy4nXG4gICAgICB9LFxuICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgIGJlZ2luOiAvKD86dTg/fFV8TCk/UlwiKFteKClcXFxcIF17MCwxNn0pXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpKFteKClcXFxcIF17MCwxNn0pXCIvXG4gICAgICB9KVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYigwYlswMVxcJ10rKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSgobGx8TEx8bHxMKSh1fFUpP3wodXxVKShsbHxMTHxsfEwpP3xmfEZ8YnxCKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKC0/KShcXFxcYjBbeFhdW2EtZkEtRjAtOVxcJ10rfChcXFxcYltcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKShbZUVdWy0rXT9bXFxcXGRcXCddKyk/KSdcbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLyxcbiAgICBlbmQ6IC8kLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJ21ldGEta2V5d29yZCc6XG4gICAgICAgICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSAnICtcbiAgICAgICAgJ3ByYWdtYSBfUHJhZ21hIGlmZGVmIGlmbmRlZiBpbmNsdWRlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICBiZWdpbjogLzwuKj8+L1xuICAgICAgfSxcbiAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFRJVExFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9USVRMRSA9IG9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJztcblxuICBjb25zdCBDUFBfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ2ludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2hhcjhfdCBjaGFyMTZfdCBjaGFyMzJfdCBjYXRjaCBpbXBvcnQgbW9kdWxlIGV4cG9ydCB2aXJ0dWFsIG9wZXJhdG9yIHNpemVvZiAnICtcbiAgICAgICdkeW5hbWljX2Nhc3R8MTAgdHlwZWRlZiBjb25zdF9jYXN0fDEwIGNvbnN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgJyArXG4gICAgICAndW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kICcgK1xuICAgICAgJ2RvIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gdXNpbmcgYXNtIGNhc2UgdHlwZWlkIHdjaGFyX3QgJyArXG4gICAgICAnc2hvcnQgcmVpbnRlcnByZXRfY2FzdHwxMCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgJyArXG4gICAgICAnc3dpdGNoIGNvbnRpbnVlIGlubGluZSBkZWxldGUgYWxpZ25hcyBhbGlnbm9mIGNvbnN0ZXhwciBjb25zdGV2YWwgY29uc3Rpbml0IGRlY2x0eXBlICcgK1xuICAgICAgJ2NvbmNlcHQgY29fYXdhaXQgY29fcmV0dXJuIGNvX3lpZWxkIHJlcXVpcmVzICcgK1xuICAgICAgJ25vZXhjZXB0IHN0YXRpY19hc3NlcnQgdGhyZWFkX2xvY2FsIHJlc3RyaWN0IGZpbmFsIG92ZXJyaWRlICcgK1xuICAgICAgJ2F0b21pY19ib29sIGF0b21pY19jaGFyIGF0b21pY19zY2hhciAnICtcbiAgICAgICdhdG9taWNfdWNoYXIgYXRvbWljX3Nob3J0IGF0b21pY191c2hvcnQgYXRvbWljX2ludCBhdG9taWNfdWludCBhdG9taWNfbG9uZyBhdG9taWNfdWxvbmcgYXRvbWljX2xsb25nICcgK1xuICAgICAgJ2F0b21pY191bGxvbmcgbmV3IHRocm93IHJldHVybiAnICtcbiAgICAgICdhbmQgYW5kX2VxIGJpdGFuZCBiaXRvciBjb21wbCBub3Qgbm90X2VxIG9yIG9yX2VxIHhvciB4b3JfZXEnLFxuICAgIGJ1aWx0X2luOiAnc3RkIHN0cmluZyB3c3RyaW5nIGNpbiBjb3V0IGNlcnIgY2xvZyBzdGRpbiBzdGRvdXQgc3RkZXJyIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gJyArXG4gICAgICAnYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBwYWlyIGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0ICcgK1xuICAgICAgJ3Vub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBwcmlvcml0eV9xdWV1ZSBtYWtlX3BhaXIgYXJyYXkgc2hhcmVkX3B0ciBhYm9ydCB0ZXJtaW5hdGUgYWJzIGFjb3MgJyArXG4gICAgICAnYXNpbiBhdGFuMiBhdGFuIGNhbGxvYyBjZWlsIGNvc2ggY29zIGV4aXQgZXhwIGZhYnMgZmxvb3IgZm1vZCBmcHJpbnRmIGZwdXRzIGZyZWUgZnJleHAgJyArXG4gICAgICAnZnNjYW5mIGZ1dHVyZSBpc2FsbnVtIGlzYWxwaGEgaXNjbnRybCBpc2RpZ2l0IGlzZ3JhcGggaXNsb3dlciBpc3ByaW50IGlzcHVuY3QgaXNzcGFjZSBpc3VwcGVyICcgK1xuICAgICAgJ2lzeGRpZ2l0IHRvbG93ZXIgdG91cHBlciBsYWJzIGxkZXhwIGxvZzEwIGxvZyBtYWxsb2MgcmVhbGxvYyBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1zZXQgbW9kZiBwb3cgJyArXG4gICAgICAncHJpbnRmIHB1dGNoYXIgcHV0cyBzY2FuZiBzaW5oIHNpbiBzbnByaW50ZiBzcHJpbnRmIHNxcnQgc3NjYW5mIHN0cmNhdCBzdHJjaHIgc3RyY21wICcgK1xuICAgICAgJ3N0cmNweSBzdHJjc3BuIHN0cmxlbiBzdHJuY2F0IHN0cm5jbXAgc3RybmNweSBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIHN0cnN0ciB0YW5oIHRhbiAnICtcbiAgICAgICd2ZnByaW50ZiB2cHJpbnRmIHZzcHJpbnRmIGVuZGwgaW5pdGlhbGl6ZXJfbGlzdCB1bmlxdWVfcHRyIF9Cb29sIGNvbXBsZXggX0NvbXBsZXggaW1hZ2luYXJ5IF9JbWFnaW5hcnknLFxuICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGxwdHIgTlVMTCdcbiAgfTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRBSU5TID0gW1xuICAgIFBSRVBST0NFU1NPUixcbiAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJTLFxuICAgIFNUUklOR1NcbiAgXTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRFWFQgPSB7XG4gICAgLy8gVGhpcyBtb2RlIGNvdmVycyBleHByZXNzaW9uIGNvbnRleHQgd2hlcmUgd2UgY2FuJ3QgZXhwZWN0IGEgZnVuY3Rpb25cbiAgICAvLyBkZWZpbml0aW9uIGFuZCBzaG91bGRuJ3QgaGlnaGxpZ2h0IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBvbmU6XG4gICAgLy8gYHJldHVybiBzb21lKClgLCBgZWxzZSBpZigpYCwgYCh4KnN1bSgxLCAyKSlgXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89LyxcbiAgICAgICAgZW5kOiAvOy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIGVuZDogLzsvXG4gICAgICB9XG4gICAgXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFsgJ3NlbGYnIF0pLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ERUNMQVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46ICcoJyArIEZVTkNUSU9OX1RZUEVfUkUgKyAnW1xcXFwqJlxcXFxzXSspKycgKyBGVU5DVElPTl9USVRMRSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBlbmQ6IC9bezs9XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9bXlxcd1xcc1xcKiY6PD4uXS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBmdW5jdGlvbiB0aXRsZVxuICAgICAgICBiZWdpbjogREVDTFRZUEVfQVVUT19SRSxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogWyBUSVRMRV9NT0RFIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgICAgICAgIC8vIENvdW50IG1hdGNoaW5nIHBhcmVudGhlc2VzLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgUFJFUFJPQ0VTU09SXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJDXCIsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2gnXG4gICAgXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIC8vIFVudGlsIGRpZmZlcmVudGlhdGlvbnMgYXJlIGFkZGVkIGJldHdlZW4gYGNgIGFuZCBgY3BwYCwgYGNgIHdpbGxcbiAgICAvLyBub3QgYmUgYXV0by1kZXRlY3RlZCB0byBhdm9pZCBhdXRvLWRldGVjdCBjb25mbGljdHMgYmV0d2VlbiBDIGFuZCBDKytcbiAgICBkaXNhYmxlQXV0b2RldGVjdDogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXS5jb25jYXQoXG4gICAgICBFWFBSRVNTSU9OX0NPTlRFWFQsXG4gICAgICBGVU5DVElPTl9ERUNMQVJBVElPTixcbiAgICAgIEVYUFJFU1NJT05fQ09OVEFJTlMsXG4gICAgICBbXG4gICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAgeyAvLyBjb250YWluZXJzOiBpZSwgYHZlY3RvciA8aW50PiByb29tcyAoOSk7YFxuICAgICAgICAgIGJlZ2luOiAnXFxcXGIoZGVxdWV8bGlzdHxxdWV1ZXxwcmlvcml0eV9xdWV1ZXxwYWlyfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXFxccyo8JyxcbiAgICAgICAgICBlbmQ6ICc+JyxcbiAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZW51bSBjbGFzcyBzdHJ1Y3QgdW5pb24nLFxuICAgICAgICAgIGVuZDogL1t7Ozo8Pj1dLyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcImZpbmFsIGNsYXNzIHN0cnVjdFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdKSxcbiAgICBleHBvcnRzOiB7XG4gICAgICBwcmVwcm9jZXNzb3I6IFBSRVBST0NFU1NPUixcbiAgICAgIHN0cmluZ3M6IFNUUklOR1MsXG4gICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTXG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGM7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQy9BTFxuQXV0aG9yOiBLZW5uZXRoIEZ1Z2xzYW5nIENocmlzdGVuc2VuIDxrZnVnbHNhbmdAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IFByb3ZpZGVzIGhpZ2hsaWdodGluZyBvZiBNaWNyb3NvZnQgRHluYW1pY3MgTkFWIEMvQUwgY29kZSBmaWxlc1xuV2Vic2l0ZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZHluYW1pY3MtbmF2L3Byb2dyYW1taW5nLWluLWMtYWxcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjYWwoaGxqcykge1xuICBjb25zdCBLRVlXT1JEUyA9XG4gICAgJ2RpdiBtb2QgaW4gYW5kIG9yIG5vdCB4b3IgYXNzZXJ0ZXJyb3IgYmVnaW4gY2FzZSBkbyBkb3dudG8gZWxzZSBlbmQgZXhpdCBmb3IgaWYgb2YgcmVwZWF0IHRoZW4gdG8gJyArXG4gICAgJ3VudGlsIHdoaWxlIHdpdGggdmFyJztcbiAgY29uc3QgTElURVJBTFMgPSAnZmFsc2UgdHJ1ZSc7XG4gIGNvbnN0IENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgIC9cXHsvLFxuICAgICAgL1xcfS8sXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL1xcKFxcKi8sXG4gICAgICAvXFwqXFwpLyxcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIClcbiAgXTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLyxcbiAgICBlbmQ6IC8nLyxcbiAgICBjb250YWluczogW3tcbiAgICAgIGJlZ2luOiAvJycvXG4gICAgfV1cbiAgfTtcbiAgY29uc3QgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLygjXFxkKykrL1xuICB9O1xuICBjb25zdCBEQVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/KERUfER8VCknLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBEQkxfUVVPVEVEX1ZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIG5vdCBhIHN0cmluZyB0ZWNobmljYWxseSBidXQgbWFrZXMgc2Vuc2UgdG8gYmUgaGlnaGxpZ2h0ZWQgaW4gdGhlIHNhbWUgc3R5bGVcbiAgICBiZWdpbjogJ1wiJyxcbiAgICBlbmQ6ICdcIidcbiAgfTtcblxuICBjb25zdCBQUk9DRURVUkUgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdwcm9jZWR1cmUnLFxuICAgIGVuZDogL1s6O10vLFxuICAgIGtleXdvcmRzOiAncHJvY2VkdXJlfDEwJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgQ0hBUl9TVFJJTkdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG5cbiAgY29uc3QgT0JKRUNUID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbjogJ09CSkVDVCAoVGFibGV8Rm9ybXxSZXBvcnR8RGF0YXBvcnR8Q29kZXVuaXR8WE1McG9ydHxNZW51U3VpdGV8UGFnZXxRdWVyeSkgKFxcXFxkKykgKFteXFxcXHJcXFxcbl0rKScsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIFBST0NFRFVSRVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDL0FMJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgQ0hBUl9TVFJJTkcsXG4gICAgICBEQVRFLFxuICAgICAgREJMX1FVT1RFRF9WQVJJQUJMRSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBPQkpFQ1QsXG4gICAgICBQUk9DRURVUkVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IENhcOKAmW4gUHJvdG9cbkF1dGhvcjogT2xlZyBFZmltb3YgPGVmaW1vdm92QGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBDYXDigJluIFByb3RvIG1lc3NhZ2UgZGVmaW5pdGlvbiBmb3JtYXRcbldlYnNpdGU6IGh0dHBzOi8vY2FwbnByb3RvLm9yZy9jYXBucC10b29sLmh0bWxcbkNhdGVnb3J5OiBwcm90b2NvbHNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjYXBucHJvdG8oaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDYXDigJluIFByb3RvJyxcbiAgICBhbGlhc2VzOiBbJ2NhcG5wJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdzdHJ1Y3QgZW51bSBpbnRlcmZhY2UgdW5pb24gZ3JvdXAgaW1wb3J0IHVzaW5nIGNvbnN0IGFubm90YXRpb24gZXh0ZW5kcyBpbiBvZiBvbiBhcyB3aXRoIGZyb20gZml4ZWQnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdWb2lkIEJvb2wgSW50OCBJbnQxNiBJbnQzMiBJbnQ2NCBVSW50OCBVSW50MTYgVUludDMyIFVJbnQ2NCBGbG9hdDMyIEZsb2F0NjQgJyArXG4gICAgICAgICdUZXh0IERhdGEgQW55UG9pbnRlciBBbnlTdHJ1Y3QgQ2FwYWJpbGl0eSBMaXN0JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvQDB4W1xcd1xcZF17MTZ9Oy8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL0BcXGQrXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IGVudW0nLFxuICAgICAgICBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9IC8vIGhhY2s6IGVhdGluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCB0aXRsZVxuICAgICAgICB9KV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgIH0pXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXBucHJvdG87XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQ2V5bG9uXG5BdXRob3I6IEx1Y2FzIFdlcmttZWlzdGVyIDxtYWlsQGx1Y2Fzd2Vya21laXN0ZXIuZGU+XG5XZWJzaXRlOiBodHRwczovL2NleWxvbi1sYW5nLm9yZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNleWxvbihobGpzKSB7XG4gIC8vIDIuMy4gSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzXG4gIGNvbnN0IEtFWVdPUkRTID1cbiAgICAnYXNzZW1ibHkgbW9kdWxlIHBhY2thZ2UgaW1wb3J0IGFsaWFzIGNsYXNzIGludGVyZmFjZSBvYmplY3QgZ2l2ZW4gdmFsdWUgJyArXG4gICAgJ2Fzc2lnbiB2b2lkIGZ1bmN0aW9uIG5ldyBvZiBleHRlbmRzIHNhdGlzZmllcyBhYnN0cmFjdHMgaW4gb3V0IHJldHVybiAnICtcbiAgICAnYnJlYWsgY29udGludWUgdGhyb3cgYXNzZXJ0IGR5bmFtaWMgaWYgZWxzZSBzd2l0Y2ggY2FzZSBmb3Igd2hpbGUgdHJ5ICcgK1xuICAgICdjYXRjaCBmaW5hbGx5IHRoZW4gbGV0IHRoaXMgb3V0ZXIgc3VwZXIgaXMgZXhpc3RzIG5vbmVtcHR5JztcbiAgLy8gNy40LjEgRGVjbGFyYXRpb24gTW9kaWZpZXJzXG4gIGNvbnN0IERFQ0xBUkFUSU9OX01PRElGSUVSUyA9XG4gICAgJ3NoYXJlZCBhYnN0cmFjdCBmb3JtYWwgZGVmYXVsdCBhY3R1YWwgdmFyaWFibGUgbGF0ZSBuYXRpdmUgZGVwcmVjYXRlZCAnICtcbiAgICAnZmluYWwgc2VhbGVkIGFubm90YXRpb24gc3VwcHJlc3NXYXJuaW5ncyBzbWFsbCc7XG4gIC8vIDcuNC4yIERvY3VtZW50YXRpb25cbiAgY29uc3QgRE9DVU1FTlRBVElPTiA9XG4gICAgJ2RvYyBieSBsaWNlbnNlIHNlZSB0aHJvd3MgdGFnZ2VkJztcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGJlZ2luOiAvYGAvLFxuICAgIGVuZDogL2BgLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuICBjb25zdCBFWFBSRVNTSU9OUyA9IFtcbiAgICB7XG4gICAgICAvLyB2ZXJiYXRpbSBzdHJpbmdcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICBlbmQ6ICdcIlwiXCInLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RyaW5nIGxpdGVyYWwgb3IgdGVtcGxhdGVcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1wiJyxcbiAgICAgIGVuZDogJ1wiJyxcbiAgICAgIGNvbnRhaW5zOiBbU1VCU1RdXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBjaGFyYWN0ZXIgbGl0ZXJhbFxuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiBcIidcIixcbiAgICAgIGVuZDogXCInXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIG51bWVyaWMgbGl0ZXJhbFxuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnI1swLTlhLWZBLUZfXSt8XFxcXCRbMDFfXSt8WzAtOV9dKyg/OlxcXFwuWzAtOV9dKD86W2VFXVsrLV0/XFxcXGQrKT8pP1trTUdUUG11bnBmXT8nLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NleWxvbicsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTICsgJyAnICsgREVDTEFSQVRJT05fTU9ESUZJRVJTLFxuICAgICAgbWV0YTogRE9DVU1FTlRBVElPTlxuICAgIH0sXG4gICAgaWxsZWdhbDogJ1xcXFwkW14wMV18I1teMC05YS1mQS1GXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVCgnL1xcXFwqJywgJ1xcXFwqLycsIHtcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgLy8gY29tcGlsZXIgYW5ub3RhdGlvblxuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW2Etel1cXFxcdyooPzo6XCJbXlwiXSpcIik/J1xuICAgICAgfVxuICAgIF0uY29uY2F0KEVYUFJFU1NJT05TKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNleWxvbjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBDbGVhblxuQXV0aG9yOiBDYW1pbCBTdGFwcyA8aW5mb0BjYW1pbHN0YXBzLm5sPlxuQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbldlYnNpdGU6IGh0dHA6Ly9jbGVhbi5jcy5ydS5ubFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNsZWFuKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQ2xlYW4nLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdpY2wnLFxuICAgICAgJ2RjbCdcbiAgICBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnaWYgbGV0IGluIHdpdGggd2hlcmUgY2FzZSBvZiBjbGFzcyBpbnN0YW5jZSBvdGhlcndpc2UgJyArXG4gICAgICAgICdpbXBsZW1lbnRhdGlvbiBkZWZpbml0aW9uIHN5c3RlbSBtb2R1bGUgZnJvbSBpbXBvcnQgcXVhbGlmaWVkIGFzICcgK1xuICAgICAgICAnc3BlY2lhbCBjb2RlIGlubGluZSBmb3JlaWduIGV4cG9ydCBjY2FsbCBzdGRjYWxsIGdlbmVyaWMgZGVyaXZlICcgK1xuICAgICAgICAnaW5maXggaW5maXhsIGluZml4cicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ0ludCBSZWFsIENoYXIgQm9vbCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnVHJ1ZSBGYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgYmVnaW46ICctPnw8LVt8Ol0/fCMhP3w+Pj18XFxcXHtcXFxcfHxcXFxcfFxcXFx9fDo9PXw9Onw8PidcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xlYW47XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQ2xvanVyZVxuRGVzY3JpcHRpb246IENsb2p1cmUgc3ludGF4IChiYXNlZCBvbiBsaXNwLmpzKVxuQXV0aG9yOiBtZm9ybm9zXG5XZWJzaXRlOiBodHRwczovL2Nsb2p1cmUub3JnXG5DYXRlZ29yeTogbGlzcFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNsb2p1cmUoaGxqcykge1xuICBjb25zdCBTWU1CT0xTVEFSVCA9ICdhLXpBLVpfXFxcXC0hLj8rKj08PiYjXFwnJztcbiAgY29uc3QgU1lNQk9MX1JFID0gJ1snICsgU1lNQk9MU1RBUlQgKyAnXVsnICsgU1lNQk9MU1RBUlQgKyAnMC05Lzs6XSonO1xuICBjb25zdCBnbG9iYWxzID0gJ2RlZiBkZWZvbmNlIGRlZnByb3RvY29sIGRlZnN0cnVjdCBkZWZtdWx0aSBkZWZtZXRob2QgZGVmbi0gZGVmbiBkZWZtYWNybyBkZWZ0eXBlIGRlZnJlY29yZCc7XG4gIGNvbnN0IGtleXdvcmRzID0ge1xuICAgICRwYXR0ZXJuOiBTWU1CT0xfUkUsXG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBDbG9qdXJlIGtleXdvcmRzXG4gICAgICBnbG9iYWxzICsgJyAnICtcbiAgICAgICdjb25kIGFwcGx5IGlmLW5vdCBpZi1sZXQgaWYgbm90IG5vdD0gPXwwIDx8MCA+fDAgPD18MCA+PXwwID09fDAgK3wwIC98MCAqfDAgLXwwIHJlbSAnICtcbiAgICAgICdxdW90IG5lZz8gcG9zPyBkZWxheT8gc3ltYm9sPyBrZXl3b3JkPyB0cnVlPyBmYWxzZT8gaW50ZWdlcj8gZW1wdHk/IGNvbGw/IGxpc3Q/ICcgK1xuICAgICAgJ3NldD8gaWZuPyBmbj8gYXNzb2NpYXRpdmU/IHNlcXVlbnRpYWw/IHNvcnRlZD8gY291bnRlZD8gcmV2ZXJzaWJsZT8gbnVtYmVyPyBkZWNpbWFsPyAnICtcbiAgICAgICdjbGFzcz8gZGlzdGluY3Q/IGlzYT8gZmxvYXQ/IHJhdGlvbmFsPyByZWR1Y2VkPyByYXRpbz8gb2RkPyBldmVuPyBjaGFyPyBzZXE/IHZlY3Rvcj8gJyArXG4gICAgICAnc3RyaW5nPyBtYXA/IG5pbD8gY29udGFpbnM/IHplcm8/IGluc3RhbmNlPyBub3QtZXZlcnk/IG5vdC1hbnk/IGxpYnNwZWM/IC0+IC0+PiAuLiAuICcgK1xuICAgICAgJ2luYyBjb21wYXJlIGRvIGRvdGltZXMgbWFwY2F0IHRha2UgcmVtb3ZlIHRha2Utd2hpbGUgZHJvcCBsZXRmbiBkcm9wLWxhc3QgdGFrZS1sYXN0ICcgK1xuICAgICAgJ2Ryb3Atd2hpbGUgd2hpbGUgaW50ZXJuIGNvbmRwIGNhc2UgcmVkdWNlZCBjeWNsZSBzcGxpdC1hdCBzcGxpdC13aXRoIHJlcGVhdCByZXBsaWNhdGUgJyArXG4gICAgICAnaXRlcmF0ZSByYW5nZSBtZXJnZSB6aXBtYXAgZGVjbGFyZSBsaW5lLXNlcSBzb3J0IGNvbXBhcmF0b3Igc29ydC1ieSBkb3J1biBkb2FsbCBudGhuZXh0ICcgK1xuICAgICAgJ250aHJlc3QgcGFydGl0aW9uIGV2YWwgZG9zZXEgYXdhaXQgYXdhaXQtZm9yIGxldCBhZ2VudCBhdG9tIHNlbmQgc2VuZC1vZmYgcmVsZWFzZS1wZW5kaW5nLXNlbmRzICcgK1xuICAgICAgJ2FkZC13YXRjaCBtYXB2IGZpbHRlcnYgcmVtb3ZlLXdhdGNoIGFnZW50LWVycm9yIHJlc3RhcnQtYWdlbnQgc2V0LWVycm9yLWhhbmRsZXIgZXJyb3ItaGFuZGxlciAnICtcbiAgICAgICdzZXQtZXJyb3ItbW9kZSEgZXJyb3ItbW9kZSBzaHV0ZG93bi1hZ2VudHMgcXVvdGUgdmFyIGZuIGxvb3AgcmVjdXIgdGhyb3cgdHJ5IG1vbml0b3ItZW50ZXIgJyArXG4gICAgICAnbW9uaXRvci1leGl0IG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgZm9yIGRvc3luYyBhbmQgb3IgJyArXG4gICAgICAnd2hlbiB3aGVuLW5vdCB3aGVuLWxldCBjb21wIGp1eHQgcGFydGlhbCBzZXF1ZW5jZSBtZW1vaXplIGNvbnN0YW50bHkgY29tcGxlbWVudCBpZGVudGl0eSBhc3NlcnQgJyArXG4gICAgICAncGVlayBwb3AgZG90byBwcm94eSBmaXJzdCByZXN0IGNvbnMgY2FzdCBjb2xsIGxhc3QgYnV0bGFzdCAnICtcbiAgICAgICdzaWdzIHJlaWZ5IHNlY29uZCBmZmlyc3QgZm5leHQgbmZpcnN0IG5uZXh0IG1ldGEgd2l0aC1tZXRhIG5zIGluLW5zIGNyZWF0ZS1ucyBpbXBvcnQgJyArXG4gICAgICAncmVmZXIga2V5cyBzZWxlY3Qta2V5cyB2YWxzIGtleSB2YWwgcnNlcSBuYW1lIG5hbWVzcGFjZSBwcm9taXNlIGludG8gdHJhbnNpZW50IHBlcnNpc3RlbnQhIGNvbmohICcgK1xuICAgICAgJ2Fzc29jISBkaXNzb2MhIHBvcCEgZGlzaiEgdXNlIGNsYXNzIHR5cGUgbnVtIGZsb2F0IGRvdWJsZSBzaG9ydCBieXRlIGJvb2xlYW4gYmlnaW50IGJpZ2ludGVnZXIgJyArXG4gICAgICAnYmlnZGVjIHByaW50LW1ldGhvZCBwcmludC1kdXAgdGhyb3ctaWYgcHJpbnRmIGZvcm1hdCBsb2FkIGNvbXBpbGUgZ2V0LWluIHVwZGF0ZS1pbiBwciBwci1vbiBuZXdsaW5lICcgK1xuICAgICAgJ2ZsdXNoIHJlYWQgc2x1cnAgcmVhZC1saW5lIHN1YnZlYyB3aXRoLW9wZW4gbWVtZm4gdGltZSByZS1maW5kIHJlLWdyb3VwcyByYW5kLWludCByYW5kIG1vZCBsb2NraW5nICcgK1xuICAgICAgJ2Fzc2VydC12YWxpZC1mZGVjbCBhbGlhcyByZXNvbHZlIHJlZiBkZXJlZiByZWZzZXQgc3dhcCEgcmVzZXQhIHNldC12YWxpZGF0b3IhIGNvbXBhcmUtYW5kLXNldCEgYWx0ZXItbWV0YSEgJyArXG4gICAgICAncmVzZXQtbWV0YSEgY29tbXV0ZSBnZXQtdmFsaWRhdG9yIGFsdGVyIHJlZi1zZXQgcmVmLWhpc3RvcnktY291bnQgcmVmLW1pbi1oaXN0b3J5IHJlZi1tYXgtaGlzdG9yeSBlbnN1cmUgc3luYyBpbyEgJyArXG4gICAgICAnbmV3IG5leHQgY29uaiBzZXQhIHRvLWFycmF5IGZ1dHVyZSBmdXR1cmUtY2FsbCBpbnRvLWFycmF5IGFzZXQgZ2VuLWNsYXNzIHJlZHVjZSBtYXAgZmlsdGVyIGZpbmQgZW1wdHkgJyArXG4gICAgICAnaGFzaC1tYXAgaGFzaC1zZXQgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSB2ZWMgdmVjdG9yIHNlcSBmbGF0dGVuIHJldmVyc2UgYXNzb2MgZGlzc29jIGxpc3QgJyArXG4gICAgICAnZGlzaiBnZXQgdW5pb24gZGlmZmVyZW5jZSBpbnRlcnNlY3Rpb24gZXh0ZW5kIGV4dGVuZC10eXBlIGV4dGVuZC1wcm90b2NvbCBpbnQgbnRoIGRlbGF5IGNvdW50IGNvbmNhdCBjaHVuayBjaHVuay1idWZmZXIgJyArXG4gICAgICAnY2h1bmstYXBwZW5kIGNodW5rLWZpcnN0IGNodW5rLXJlc3QgbWF4IG1pbiBkZWMgdW5jaGVja2VkLWluYy1pbnQgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtZGVjLWluYyB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1uZWdhdGUgJyArXG4gICAgICAndW5jaGVja2VkLWFkZC1pbnQgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtc3VidHJhY3QtaW50IHVuY2hlY2tlZC1zdWJ0cmFjdCBjaHVuay1uZXh0IGNodW5rLWNvbnMgY2h1bmtlZC1zZXE/IHBybiB2YXJ5LW1ldGEgJyArXG4gICAgICAnbGF6eS1zZXEgc3ByZWFkIGxpc3QqIHN0ciBmaW5kLWtleXdvcmQga2V5d29yZCBzeW1ib2wgZ2Vuc3ltIGZvcmNlIHJhdGlvbmFsaXplJ1xuICB9O1xuXG4gIGNvbnN0IFNJTVBMRV9OVU1CRVJfUkUgPSAnWy0rXT9cXFxcZCsoXFxcXC5cXFxcZCspPyc7XG5cbiAgY29uc3QgU1lNQk9MID0ge1xuICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBTSU1QTEVfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgIGlsbGVnYWw6IG51bGxcbiAgfSk7XG4gIGNvbnN0IENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzsnLFxuICAgICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIGNvbnN0IExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9cXGIodHJ1ZXxmYWxzZXxuaWwpXFxiL1xuICB9O1xuICBjb25zdCBDT0xMRUNUSU9OID0ge1xuICAgIGJlZ2luOiAnW1xcXFxbXFxcXHtdJyxcbiAgICBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIGNvbnN0IEhJTlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgYmVnaW46ICdcXFxcXicgKyBTWU1CT0xfUkVcbiAgfTtcbiAgY29uc3QgSElOVF9DT0wgPSBobGpzLkNPTU1FTlQoJ1xcXFxeXFxcXHsnLCAnXFxcXH0nKTtcbiAgY29uc3QgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgY29uc3QgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKSdcbiAgfTtcbiAgY29uc3QgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTkFNRSA9IHtcbiAgICBrZXl3b3Jkczoga2V5d29yZHMsXG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgYmVnaW46IFNZTUJPTF9SRSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgc3RhcnRzOiBCT0RZXG4gIH07XG4gIGNvbnN0IERFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgTElTVCxcbiAgICBTVFJJTkcsXG4gICAgSElOVCxcbiAgICBISU5UX0NPTCxcbiAgICBDT01NRU5ULFxuICAgIEtFWSxcbiAgICBDT0xMRUNUSU9OLFxuICAgIE5VTUJFUixcbiAgICBMSVRFUkFMLFxuICAgIFNZTUJPTFxuICBdO1xuXG4gIGNvbnN0IEdMT0JBTCA9IHtcbiAgICBiZWdpbktleXdvcmRzOiBnbG9iYWxzLFxuICAgIGxleGVtZXM6IFNZTUJPTF9SRSxcbiAgICBlbmQ6ICcoXFxcXFt8I3xcXFxcZHxcInw6fFxcXFx7fFxcXFwpfFxcXFwofCQpJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgLy8gd2UgY2FuIG9ubHkgaGF2ZSBhIHNpbmdsZSB0aXRsZVxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICB9XG4gICAgXS5jb25jYXQoREVGQVVMVF9DT05UQUlOUylcbiAgfTtcblxuICBMSVNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQ09NTUVOVCgnY29tbWVudCcsICcnKSxcbiAgICBHTE9CQUwsXG4gICAgTkFNRSxcbiAgICBCT0RZXG4gIF07XG4gIEJPRFkuY29udGFpbnMgPSBERUZBVUxUX0NPTlRBSU5TO1xuICBDT0xMRUNUSU9OLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcbiAgSElOVF9DT0wuY29udGFpbnMgPSBbIENPTExFQ1RJT04gXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDbG9qdXJlJyxcbiAgICBhbGlhc2VzOiBbICdjbGonIF0sXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIExJU1QsXG4gICAgICBTVFJJTkcsXG4gICAgICBISU5ULFxuICAgICAgSElOVF9DT0wsXG4gICAgICBDT01NRU5ULFxuICAgICAgS0VZLFxuICAgICAgQ09MTEVDVElPTixcbiAgICAgIE5VTUJFUixcbiAgICAgIExJVEVSQUxcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvanVyZTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBDbG9qdXJlIFJFUExcbkRlc2NyaXB0aW9uOiBDbG9qdXJlIFJFUEwgc2Vzc2lvbnNcbkF1dGhvcjogSXZhbiBTYWdhbGFldiA8bWFuaWFjQHNvZnR3YXJlbWFuaWFjcy5vcmc+XG5SZXF1aXJlczogY2xvanVyZS5qc1xuV2Vic2l0ZTogaHR0cHM6Ly9jbG9qdXJlLm9yZ1xuQ2F0ZWdvcnk6IGxpc3BcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjbG9qdXJlUmVwbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0Nsb2p1cmUgUkVQTCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXihbXFx3Li1dK3xcXHMqI18pPz0+LyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdjbG9qdXJlJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb2p1cmVSZXBsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IENNYWtlXG5EZXNjcmlwdGlvbjogQ01ha2UgaXMgYW4gb3Blbi1zb3VyY2UgY3Jvc3MtcGxhdGZvcm0gc3lzdGVtIGZvciBidWlsZCBhdXRvbWF0aW9uLlxuQXV0aG9yOiBJZ29yIEthbG5pdHNreSA8aWdvckBrYWxuaXRza3kub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly9jbWFrZS5vcmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjbWFrZShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NNYWtlJyxcbiAgICBhbGlhc2VzOiBbJ2NtYWtlLmluJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8gc2NyaXB0aW5nIGNvbW1hbmRzXG4gICAgICAgICdicmVhayBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAnICtcbiAgICAgICAgJ2NtYWtlX3BvbGljeSBjb25maWd1cmVfZmlsZSBjb250aW51ZSBlbHNlaWYgZWxzZSBlbmRmb3JlYWNoIGVuZGZ1bmN0aW9uIGVuZGlmIGVuZG1hY3JvICcgK1xuICAgICAgICAnZW5kd2hpbGUgZXhlY3V0ZV9wcm9jZXNzIGZpbGUgZmluZF9maWxlIGZpbmRfbGlicmFyeSBmaW5kX3BhY2thZ2UgZmluZF9wYXRoICcgK1xuICAgICAgICAnZmluZF9wcm9ncmFtIGZvcmVhY2ggZnVuY3Rpb24gZ2V0X2NtYWtlX3Byb3BlcnR5IGdldF9kaXJlY3RvcnlfcHJvcGVydHkgJyArXG4gICAgICAgICdnZXRfZmlsZW5hbWVfY29tcG9uZW50IGdldF9wcm9wZXJ0eSBpZiBpbmNsdWRlIGluY2x1ZGVfZ3VhcmQgbGlzdCBtYWNybyAnICtcbiAgICAgICAgJ21hcmtfYXNfYWR2YW5jZWQgbWF0aCBtZXNzYWdlIG9wdGlvbiByZXR1cm4gc2VwYXJhdGVfYXJndW1lbnRzICcgK1xuICAgICAgICAnc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzIHNldF9wcm9wZXJ0eSBzZXQgc2l0ZV9uYW1lIHN0cmluZyB1bnNldCB2YXJpYWJsZV93YXRjaCB3aGlsZSAnICtcbiAgICAgICAgLy8gcHJvamVjdCBjb21tYW5kc1xuICAgICAgICAnYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMgYWRkX2NvbXBpbGVfb3B0aW9ucyBhZGRfY3VzdG9tX2NvbW1hbmQgYWRkX2N1c3RvbV90YXJnZXQgJyArXG4gICAgICAgICdhZGRfZGVmaW5pdGlvbnMgYWRkX2RlcGVuZGVuY2llcyBhZGRfZXhlY3V0YWJsZSBhZGRfbGlicmFyeSBhZGRfbGlua19vcHRpb25zICcgK1xuICAgICAgICAnYWRkX3N1YmRpcmVjdG9yeSBhZGRfdGVzdCBhdXhfc291cmNlX2RpcmVjdG9yeSBidWlsZF9jb21tYW5kIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QgJyArXG4gICAgICAgICdkZWZpbmVfcHJvcGVydHkgZW5hYmxlX2xhbmd1YWdlIGVuYWJsZV90ZXN0aW5nIGV4cG9ydCBmbHRrX3dyYXBfdWkgJyArXG4gICAgICAgICdnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2V0X3RhcmdldF9wcm9wZXJ0eSBnZXRfdGVzdF9wcm9wZXJ0eSBpbmNsdWRlX2RpcmVjdG9yaWVzICcgK1xuICAgICAgICAnaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QgaW5jbHVkZV9yZWd1bGFyX2V4cHJlc3Npb24gaW5zdGFsbCBsaW5rX2RpcmVjdG9yaWVzICcgK1xuICAgICAgICAnbGlua19saWJyYXJpZXMgbG9hZF9jYWNoZSBwcm9qZWN0IHF0X3dyYXBfY3BwIHF0X3dyYXBfdWkgcmVtb3ZlX2RlZmluaXRpb25zICcgK1xuICAgICAgICAnc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIHNldF90YXJnZXRfcHJvcGVydGllcyBzZXRfdGVzdHNfcHJvcGVydGllcyBzb3VyY2VfZ3JvdXAgJyArXG4gICAgICAgICd0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyB0YXJnZXRfY29tcGlsZV9vcHRpb25zICcgK1xuICAgICAgICAndGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfbGlicmFyaWVzICcgK1xuICAgICAgICAndGFyZ2V0X2xpbmtfb3B0aW9ucyB0YXJnZXRfc291cmNlcyB0cnlfY29tcGlsZSB0cnlfcnVuICcgK1xuICAgICAgICAvLyBDVGVzdCBjb21tYW5kc1xuICAgICAgICAnY3Rlc3RfYnVpbGQgY3Rlc3RfY29uZmlndXJlIGN0ZXN0X2NvdmVyYWdlIGN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkgY3Rlc3RfbWVtY2hlY2sgJyArXG4gICAgICAgICdjdGVzdF9yZWFkX2N1c3RvbV9maWxlcyBjdGVzdF9ydW5fc2NyaXB0IGN0ZXN0X3NsZWVwIGN0ZXN0X3N0YXJ0IGN0ZXN0X3N1Ym1pdCAnICtcbiAgICAgICAgJ2N0ZXN0X3Rlc3QgY3Rlc3RfdXBkYXRlIGN0ZXN0X3VwbG9hZCAnICtcbiAgICAgICAgLy8gZGVwcmVjYXRlZCBjb21tYW5kc1xuICAgICAgICAnYnVpbGRfbmFtZSBleGVjX3Byb2dyYW0gZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzIGluc3RhbGxfZmlsZXMgaW5zdGFsbF9wcm9ncmFtcyAnICtcbiAgICAgICAgJ2luc3RhbGxfdGFyZ2V0cyBsb2FkX2NvbW1hbmQgbWFrZV9kaXJlY3Rvcnkgb3V0cHV0X3JlcXVpcmVkX2ZpbGVzIHJlbW92ZSAnICtcbiAgICAgICAgJ3N1YmRpcl9kZXBlbmRzIHN1YmRpcnMgdXNlX21hbmdsZWRfbWVzYSB1dGlsaXR5X3NvdXJjZSB2YXJpYWJsZV9yZXF1aXJlcyB3cml0ZV9maWxlICcgK1xuICAgICAgICAncXQ1X3VzZV9tb2R1bGVzIHF0NV91c2VfcGFja2FnZSBxdDVfd3JhcF9jcHAgJyArXG4gICAgICAgIC8vIGNvcmUga2V5d29yZHNcbiAgICAgICAgJ29uIG9mZiB0cnVlIGZhbHNlIGFuZCBvciBub3QgY29tbWFuZCBwb2xpY3kgdGFyZ2V0IHRlc3QgZXhpc3RzIGlzX25ld2VyX3RoYW4gJyArXG4gICAgICAgICdpc19kaXJlY3RvcnkgaXNfc3ltbGluayBpc19hYnNvbHV0ZSBtYXRjaGVzIGxlc3MgZ3JlYXRlciBlcXVhbCBsZXNzX2VxdWFsICcgK1xuICAgICAgICAnZ3JlYXRlcl9lcXVhbCBzdHJsZXNzIHN0cmdyZWF0ZXIgc3RyZXF1YWwgc3RybGVzc19lcXVhbCBzdHJncmVhdGVyX2VxdWFsIHZlcnNpb25fbGVzcyAnICtcbiAgICAgICAgJ3ZlcnNpb25fZ3JlYXRlciB2ZXJzaW9uX2VxdWFsIHZlcnNpb25fbGVzc19lcXVhbCB2ZXJzaW9uX2dyZWF0ZXJfZXF1YWwgaW5fbGlzdCBkZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgICAgIGVuZDogL1xcfS9cbiAgICAgIH0sXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY21ha2U7XG4iLAogICAgImNvbnN0IEtFWVdPUkRTID0gW1xuICBcImFzXCIsIC8vIGZvciBleHBvcnRzXG4gIFwiaW5cIixcbiAgXCJvZlwiLFxuICBcImlmXCIsXG4gIFwiZm9yXCIsXG4gIFwid2hpbGVcIixcbiAgXCJmaW5hbGx5XCIsXG4gIFwidmFyXCIsXG4gIFwibmV3XCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJkb1wiLFxuICBcInJldHVyblwiLFxuICBcInZvaWRcIixcbiAgXCJlbHNlXCIsXG4gIFwiYnJlYWtcIixcbiAgXCJjYXRjaFwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhyb3dcIixcbiAgXCJjYXNlXCIsXG4gIFwiZGVmYXVsdFwiLFxuICBcInRyeVwiLFxuICBcInN3aXRjaFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwidHlwZW9mXCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwibGV0XCIsXG4gIFwieWllbGRcIixcbiAgXCJjb25zdFwiLFxuICBcImNsYXNzXCIsXG4gIC8vIEpTIGhhbmRsZXMgdGhlc2Ugd2l0aCBhIHNwZWNpYWwgcnVsZVxuICAvLyBcImdldFwiLFxuICAvLyBcInNldFwiLFxuICBcImRlYnVnZ2VyXCIsXG4gIFwiYXN5bmNcIixcbiAgXCJhd2FpdFwiLFxuICBcInN0YXRpY1wiLFxuICBcImltcG9ydFwiLFxuICBcImZyb21cIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCJcbl07XG5jb25zdCBMSVRFUkFMUyA9IFtcbiAgXCJ0cnVlXCIsXG4gIFwiZmFsc2VcIixcbiAgXCJudWxsXCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwiTmFOXCIsXG4gIFwiSW5maW5pdHlcIlxuXTtcblxuY29uc3QgVFlQRVMgPSBbXG4gIFwiSW50bFwiLFxuICBcIkRhdGFWaWV3XCIsXG4gIFwiTnVtYmVyXCIsXG4gIFwiTWF0aFwiLFxuICBcIkRhdGVcIixcbiAgXCJTdHJpbmdcIixcbiAgXCJSZWdFeHBcIixcbiAgXCJPYmplY3RcIixcbiAgXCJGdW5jdGlvblwiLFxuICBcIkJvb2xlYW5cIixcbiAgXCJFcnJvclwiLFxuICBcIlN5bWJvbFwiLFxuICBcIlNldFwiLFxuICBcIk1hcFwiLFxuICBcIldlYWtTZXRcIixcbiAgXCJXZWFrTWFwXCIsXG4gIFwiUHJveHlcIixcbiAgXCJSZWZsZWN0XCIsXG4gIFwiSlNPTlwiLFxuICBcIlByb21pc2VcIixcbiAgXCJGbG9hdDY0QXJyYXlcIixcbiAgXCJJbnQxNkFycmF5XCIsXG4gIFwiSW50MzJBcnJheVwiLFxuICBcIkludDhBcnJheVwiLFxuICBcIlVpbnQxNkFycmF5XCIsXG4gIFwiVWludDMyQXJyYXlcIixcbiAgXCJGbG9hdDMyQXJyYXlcIixcbiAgXCJBcnJheVwiLFxuICBcIlVpbnQ4QXJyYXlcIixcbiAgXCJVaW50OENsYW1wZWRBcnJheVwiLFxuICBcIkFycmF5QnVmZmVyXCIsXG4gIFwiQmlnSW50NjRBcnJheVwiLFxuICBcIkJpZ1VpbnQ2NEFycmF5XCIsXG4gIFwiQmlnSW50XCJcbl07XG5cbmNvbnN0IEVSUk9SX1RZUEVTID0gW1xuICBcIkV2YWxFcnJvclwiLFxuICBcIkludGVybmFsRXJyb3JcIixcbiAgXCJSYW5nZUVycm9yXCIsXG4gIFwiUmVmZXJlbmNlRXJyb3JcIixcbiAgXCJTeW50YXhFcnJvclwiLFxuICBcIlR5cGVFcnJvclwiLFxuICBcIlVSSUVycm9yXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX0dMT0JBTFMgPSBbXG4gIFwic2V0SW50ZXJ2YWxcIixcbiAgXCJzZXRUaW1lb3V0XCIsXG4gIFwiY2xlYXJJbnRlcnZhbFwiLFxuICBcImNsZWFyVGltZW91dFwiLFxuXG4gIFwicmVxdWlyZVwiLFxuICBcImV4cG9ydHNcIixcblxuICBcImV2YWxcIixcbiAgXCJpc0Zpbml0ZVwiLFxuICBcImlzTmFOXCIsXG4gIFwicGFyc2VGbG9hdFwiLFxuICBcInBhcnNlSW50XCIsXG4gIFwiZGVjb2RlVVJJXCIsXG4gIFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZW5jb2RlVVJJXCIsXG4gIFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZXNjYXBlXCIsXG4gIFwidW5lc2NhcGVcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fVkFSSUFCTEVTID0gW1xuICBcImFyZ3VtZW50c1wiLFxuICBcInRoaXNcIixcbiAgXCJzdXBlclwiLFxuICBcImNvbnNvbGVcIixcbiAgXCJ3aW5kb3dcIixcbiAgXCJkb2N1bWVudFwiLFxuICBcImxvY2FsU3RvcmFnZVwiLFxuICBcIm1vZHVsZVwiLFxuICBcImdsb2JhbFwiIC8vIE5vZGUuanNcbl07XG5cbmNvbnN0IEJVSUxUX0lOUyA9IFtdLmNvbmNhdChcbiAgQlVJTFRfSU5fR0xPQkFMUyxcbiAgQlVJTFRfSU5fVkFSSUFCTEVTLFxuICBUWVBFUyxcbiAgRVJST1JfVFlQRVNcbik7XG5cbi8qXG5MYW5ndWFnZTogQ29mZmVlU2NyaXB0XG5BdXRob3I6IERteXRyaWkgTmFnaXJuaWFrIDxkbmFnaXJAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBPbGVnIEVmaW1vdiA8ZWZpbW92b3ZAZ21haWwuY29tPiwgQ8OpZHJpYyBOw6low6ltaWUgPGNlZHJpYy5uZWhlbWllQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBDb2ZmZWVTY3JpcHQgaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IHRyYW5zY29tcGlsZXMgdG8gSmF2YVNjcmlwdC4gRm9yIGluZm8gYWJvdXQgbGFuZ3VhZ2Ugc2VlIGh0dHA6Ly9jb2ZmZWVzY3JpcHQub3JnL1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nXG5XZWJzaXRlOiBodHRwczovL2NvZmZlZXNjcmlwdC5vcmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjb2ZmZWVzY3JpcHQoaGxqcykge1xuICBjb25zdCBDT0ZGRUVfQlVJTFRfSU5TID0gW1xuICAgICducG0nLFxuICAgICdwcmludCdcbiAgXTtcbiAgY29uc3QgQ09GRkVFX0xJVEVSQUxTID0gW1xuICAgICd5ZXMnLFxuICAgICdubycsXG4gICAgJ29uJyxcbiAgICAnb2ZmJ1xuICBdO1xuICBjb25zdCBDT0ZGRUVfS0VZV09SRFMgPSBbXG4gICAgJ3RoZW4nLFxuICAgICd1bmxlc3MnLFxuICAgICd1bnRpbCcsXG4gICAgJ2xvb3AnLFxuICAgICdieScsXG4gICAgJ3doZW4nLFxuICAgICdhbmQnLFxuICAgICdvcicsXG4gICAgJ2lzJyxcbiAgICAnaXNudCcsXG4gICAgJ25vdCdcbiAgXTtcbiAgY29uc3QgTk9UX1ZBTElEX0tFWVdPUkRTID0gW1xuICAgIFwidmFyXCIsXG4gICAgXCJjb25zdFwiLFxuICAgIFwibGV0XCIsXG4gICAgXCJmdW5jdGlvblwiLFxuICAgIFwic3RhdGljXCJcbiAgXTtcbiAgY29uc3QgZXhjbHVkaW5nID0gKGxpc3QpID0+XG4gICAgKGt3KSA9PiAhbGlzdC5pbmNsdWRlcyhrdyk7XG4gIGNvbnN0IEtFWVdPUkRTJDEgPSB7XG4gICAga2V5d29yZDogS0VZV09SRFMuY29uY2F0KENPRkZFRV9LRVlXT1JEUykuZmlsdGVyKGV4Y2x1ZGluZyhOT1RfVkFMSURfS0VZV09SRFMpKSxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUy5jb25jYXQoQ09GRkVFX0xJVEVSQUxTKSxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLmNvbmNhdChDT0ZGRUVfQlVJTFRfSU5TKVxuICB9O1xuICBjb25zdCBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxXG4gIH07XG4gIGNvbnN0IEVYUFJFU1NJT05TID0gW1xuICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgIGhsanMuaW5oZXJpdChobGpzLkNfTlVNQkVSX01PREUsIHtcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6ICcoXFxcXHMqLyk/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgfSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJycnLyxcbiAgICAgICAgICBlbmQ6IC8nJycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCJcIlwiLyxcbiAgICAgICAgICBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICBTVUJTVFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgICAgU1VCU1RcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcvLy8nLFxuICAgICAgICAgIGVuZDogJy8vLycsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIFNVQlNULFxuICAgICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLy9bZ2ltXXswLDN9KD89XFxcXFcpJyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggc3BhY2UgdG8gcGFyc2UgeCAvIDIgLyAzIGFzIHR3byBkaXZpc2lvbnNcbiAgICAgICAgICAvLyByZWdleCBjYW4ndCBzdGFydCB3aXRoICosIGFuZCBpdCBzdXBwb3J0cyBhbiBcImlsbGVnYWxcIiBpbiB0aGUgbWFpbiBtb2RlXG4gICAgICAgICAgYmVnaW46IC9cXC8oPyFbICpdKS4qPyg/IVtcXFxcXSkuXFwvW2dpbV17MCwzfSg/PVxcVykvXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBKU19JREVOVF9SRSAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIH0sXG4gICAge1xuICAgICAgc3ViTGFuZ3VhZ2U6ICdqYXZhc2NyaXB0JyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdgYGAnLFxuICAgICAgICAgIGVuZDogJ2BgYCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgICAgZW5kOiAnYCdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBFWFBSRVNTSU9OUztcblxuICBjb25zdCBUSVRMRSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICBiZWdpbjogSlNfSURFTlRfUkVcbiAgfSk7XG4gIGNvbnN0IFBPU1NJQkxFX1BBUkFNU19SRSA9ICcoXFxcXCguKlxcXFwpXFxcXHMqKT9cXFxcQlstPV0+JztcbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKFteXFxcXChdJyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAvKiBXZSBuZWVkIGFub3RoZXIgY29udGFpbmVkIG5hbWVsZXNzIG1vZGUgdG8gbm90IGhhdmUgZXZlcnkgbmVzdGVkXG4gICAgcGFpciBvZiBwYXJlbnMgdG8gYmUgY2FsbGVkIFwicGFyYW1zXCIgKi9cbiAgICBjb250YWluczogW3tcbiAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgIGVuZDogL1xcKS8sXG4gICAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXS5jb25jYXQoRVhQUkVTU0lPTlMpXG4gICAgfV1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDb2ZmZWVTY3JpcHQnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdjb2ZmZWUnLFxuICAgICAgJ2Nzb24nLFxuICAgICAgJ2ljZWQnXG4gICAgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTlMuY29uY2F0KFtcbiAgICAgIGhsanMuQ09NTUVOVCgnIyMjJywgJyMjIycpLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ15cXFxccyonICsgSlNfSURFTlRfUkUgKyAnXFxcXHMqPVxcXFxzKicgKyBQT1NTSUJMRV9QQVJBTVNfUkUsXG4gICAgICAgIGVuZDogJ1stPV0+JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEUsXG4gICAgICAgICAgUEFSQU1TXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGFub255bW91cyBmdW5jdGlvbiBzdGFydFxuICAgICAgICBiZWdpbjogL1s6XFwoLD1dXFxzKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgIGJlZ2luOiBQT1NTSUJMRV9QQVJBTVNfUkUsXG4gICAgICAgICAgZW5kOiAnWy09XT4nLFxuICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbUEFSQU1TXVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgaWxsZWdhbDogL1s6PVwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMnLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbVElUTEVdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBUSVRMRVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogSlNfSURFTlRfUkUgKyAnOicsXG4gICAgICAgIGVuZDogJzonLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvZmZlZXNjcmlwdDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBDb3FcbkF1dGhvcjogU3RlcGhhbiBCb3llciA8c3RlcGhhbkBzdGVwaGFuYm95ZXIuY29tPlxuQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbldlYnNpdGU6IGh0dHBzOi8vY29xLmlucmlhLmZyXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY29xKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQ29xJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ198MCBhcyBhdCBjb2ZpeCBlbHNlIGVuZCBleGlzdHMgZXhpc3RzMiBmaXggZm9yIGZvcmFsbCBmdW4gaWYgSUYgaW4gbGV0ICcgK1xuICAgICAgICAnbWF0Y2ggbW9kIFByb3AgcmV0dXJuIFNldCB0aGVuIFR5cGUgdXNpbmcgd2hlcmUgd2l0aCAnICtcbiAgICAgICAgJ0Fib3J0IEFib3V0IEFkZCBBZG1pdCBBZG1pdHRlZCBBbGwgQXJndW1lbnRzIEFzc3VtcHRpb25zIEF4aW9tIEJhY2sgQmFja1RvICcgK1xuICAgICAgICAnQmFja3RyYWNrIEJpbmQgQmxhY2tsaXN0IENhbm9uaWNhbCBDZCBDaGVjayBDbGFzcyBDbGFzc2VzIENsb3NlIENvZXJjaW9uICcgK1xuICAgICAgICAnQ29lcmNpb25zIENvRml4cG9pbnQgQ29JbmR1Y3RpdmUgQ29sbGVjdGlvbiBDb21iaW5lZCBDb21wdXRlIENvbmplY3R1cmUgJyArXG4gICAgICAgICdDb25qZWN0dXJlcyBDb25zdGFudCBjb25zdHIgQ29uc3RyYWludCBDb25zdHJ1Y3RvcnMgQ29udGV4dCBDb3JvbGxhcnkgJyArXG4gICAgICAgICdDcmVhdGVIaW50RGIgQ3V0IERlY2xhcmUgRGVmaW5lZCBEZWZpbml0aW9uIERlbGltaXQgRGVwZW5kZW5jaWVzIERlcGVuZGVudCAnICtcbiAgICAgICAgJ0Rlcml2ZSBEcm9wIGVhdXRvIEVuZCBFcXVhbGl0eSBFdmFsIEV4YW1wbGUgRXhpc3RlbnRpYWwgRXhpc3RlbnRpYWxzICcgK1xuICAgICAgICAnRXhpc3RpbmcgRXhwb3J0IGV4cG9ydGluZyBFeHRlcm4gRXh0cmFjdCBFeHRyYWN0aW9uIEZhY3QgRmllbGQgRmllbGRzIEZpbGUgJyArXG4gICAgICAgICdGaXhwb2ludCBGb2N1cyBmb3IgRnJvbSBGdW5jdGlvbiBGdW5jdGlvbmFsIEdlbmVyYWxpemFibGUgR2xvYmFsIEdvYWwgR3JhYiAnICtcbiAgICAgICAgJ0dyYW1tYXIgR3JhcGggR3VhcmRlZCBIZWFwIEhpbnQgSGludERiIEhpbnRzIEh5cG90aGVzZXMgSHlwb3RoZXNpcyBpZGVudCAnICtcbiAgICAgICAgJ0lkZW50aXR5IElmIEltbWVkaWF0ZSBJbXBsaWNpdCBJbXBvcnQgSW5jbHVkZSBJbmR1Y3RpdmUgSW5maXggSW5mbyBJbml0aWFsICcgK1xuICAgICAgICAnSW5saW5lIEluc3BlY3QgSW5zdGFuY2UgSW5zdGFuY2VzIEludHJvIEludHJvcyBJbnZlcnNpb24gSW52ZXJzaW9uX2NsZWFyICcgK1xuICAgICAgICAnTGFuZ3VhZ2UgTGVmdCBMZW1tYSBMZXQgTGlicmFyaWVzIExpYnJhcnkgTG9hZCBMb2FkUGF0aCBMb2NhbCBMb2NhdGUgTHRhYyBNTCAnICtcbiAgICAgICAgJ01vZGUgTW9kdWxlIE1vZHVsZXMgTW9ub21vcnBoaWMgTW9ycGhpc20gTmV4dCBOb0lubGluZSBOb3RhdGlvbiBPYmxpZ2F0aW9uICcgK1xuICAgICAgICAnT2JsaWdhdGlvbnMgT3BhcXVlIE9wZW4gT3B0aW1pemUgT3B0aW9ucyBQYXJhbWV0ZXIgUGFyYW1ldGVycyBQYXJhbWV0cmljICcgK1xuICAgICAgICAnUGF0aCBQYXRocyBwYXR0ZXJuIFBvbHltb3JwaGljIFByZXRlcm0gUHJpbnQgUHJpbnRpbmcgUHJvZ3JhbSBQcm9qZWN0aW9ucyAnICtcbiAgICAgICAgJ1Byb29mIFByb3Bvc2l0aW9uIFB3ZCBRZWQgUXVpdCBSZWMgUmVjb3JkIFJlY3Vyc2l2ZSBSZWRpcmVjdCBSZWxhdGlvbiBSZW1hcmsgJyArXG4gICAgICAgICdSZW1vdmUgUmVxdWlyZSBSZXNlcnZlZCBSZXNldCBSZXNvbHZlIFJlc3RhcnQgUmV3cml0ZSBSaWdodCBSaW5nIFJpbmdzIFNhdmUgJyArXG4gICAgICAgICdTY2hlbWUgU2NvcGUgU2NvcGVzIFNjcmlwdCBTZWFyY2ggU2VhcmNoQWJvdXQgU2VhcmNoSGVhZCBTZWFyY2hQYXR0ZXJuICcgK1xuICAgICAgICAnU2VhcmNoUmV3cml0ZSBTZWN0aW9uIFNlcGFyYXRlIFNldCBTZXRvaWQgU2hvdyBTb2x2ZSBTb3J0ZWQgU3RlcCBTdHJhdGVnaWVzICcgK1xuICAgICAgICAnU3RyYXRlZ3kgU3RydWN0dXJlIFN1YkNsYXNzIFRhYmxlIFRhYmxlcyBUYWN0aWMgVGVybSBUZXN0IFRoZW9yZW0gVGltZSAnICtcbiAgICAgICAgJ1RpbWVvdXQgVHJhbnNwYXJlbnQgVHlwZSBUeXBlY2xhc3NlcyBUeXBlcyBVbmRlbGltaXQgVW5kbyBVbmZvY3VzIFVuZm9jdXNlZCAnICtcbiAgICAgICAgJ1VuZm9sZCBVbml2ZXJzZSBVbml2ZXJzZXMgVW5zZXQgVW5zaGVsdmUgdXNpbmcgVmFyaWFibGUgVmFyaWFibGVzIFZhcmlhbnQgJyArXG4gICAgICAgICdWZXJib3NlIFZpc2liaWxpdHkgd2hlcmUgd2l0aCcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2Fic3RyYWN0IGFic3VyZCBhZG1pdCBhZnRlciBhcHBseSBhcyBhc3NlcnQgYXNzdW1wdGlvbiBhdCBhdXRvIGF1dG9yZXdyaXRlICcgK1xuICAgICAgICAnYXV0b3VuZm9sZCBiZWZvcmUgYm90dG9tIGJ0YXV0byBieSBjYXNlIGNhc2VfZXEgY2JuIGNidiBjaGFuZ2UgJyArXG4gICAgICAgICdjbGFzc2ljYWxfbGVmdCBjbGFzc2ljYWxfcmlnaHQgY2xlYXIgY2xlYXJib2R5IGNvZml4IGNvbXBhcmUgY29tcHV0ZSAnICtcbiAgICAgICAgJ2NvbmdydWVuY2UgY29uc3RyX2VxIGNvbnN0cnVjdG9yIGNvbnRyYWRpY3QgY29udHJhZGljdGlvbiBjdXQgY3V0cmV3cml0ZSAnICtcbiAgICAgICAgJ2N5Y2xlIGRlY2lkZSBkZWNvbXBvc2UgZGVwZW5kZW50IGRlc3RydWN0IGRlc3RydWN0aW9uIGRpbnR1aXRpb24gJyArXG4gICAgICAgICdkaXNjcmltaW5hdGUgZGlzY3JSIGRvIGRvdWJsZSBkdGF1dG8gZWFwcGx5IGVhc3N1bXB0aW9uIGVhdXRvIGVjYXNlICcgK1xuICAgICAgICAnZWNvbnN0cnVjdG9yIGVkZXN0cnVjdCBlZGlzY3JpbWluYXRlIGVlbGltIGVleGFjdCBlZXhpc3RzIGVpbmR1Y3Rpb24gJyArXG4gICAgICAgICdlaW5qZWN0aW9uIGVsZWZ0IGVsaW0gZWxpbXR5cGUgZW5vdWdoIGVxdWFsaXR5IGVyZXdyaXRlIGVyaWdodCAnICtcbiAgICAgICAgJ2VzaW1wbGlmeV9lcSBlc3BsaXQgZXZhciBleGFjdCBleGFjdGx5X29uY2UgZXhmYWxzbyBleGlzdHMgZl9lcXVhbCBmYWlsICcgK1xuICAgICAgICAnZmllbGQgZmllbGRfc2ltcGxpZnkgZmllbGRfc2ltcGxpZnlfZXEgZmlyc3QgZmlyc3RvcmRlciBmaXggZm9sZCBmb3VyaWVyICcgK1xuICAgICAgICAnZnVuY3Rpb25hbCBnZW5lcmFsaXplIGdlbmVyYWxpemluZyBnZmFpbCBnaXZlX3VwIGhhc19ldmFyIGhuZiBpZHRhYyBpbiAnICtcbiAgICAgICAgJ2luZHVjdGlvbiBpbmplY3Rpb24gaW5zdGFudGlhdGUgaW50cm8gaW50cm9fcGF0dGVybiBpbnRyb3MgaW50dWl0aW9uICcgK1xuICAgICAgICAnaW52ZXJzaW9uIGludmVyc2lvbl9jbGVhciBpc19ldmFyIGlzX3ZhciBsYXBwbHkgbGF6eSBsZWZ0IGxpYSBscmEgbW92ZSAnICtcbiAgICAgICAgJ25hdGl2ZV9jb21wdXRlIG5pYSBuc2F0eiBvbWVnYSBvbmNlIHBhdHRlcm4gcG9zZSBwcm9ncmVzcyBwcm9vZiBwc2F0eiBxdW90ZSAnICtcbiAgICAgICAgJ3JlY29yZCByZWQgcmVmaW5lIHJlZmxleGl2aXR5IHJlbWVtYmVyIHJlbmFtZSByZXBlYXQgcmVwbGFjZSByZXZlcnQgJyArXG4gICAgICAgICdyZXZnb2FscyByZXdyaXRlIHJld3JpdGVfc3RyYXQgcmlnaHQgcmluZyByaW5nX3NpbXBsaWZ5IHJ0YXV0byBzZXQgJyArXG4gICAgICAgICdzZXRvaWRfcmVmbGV4aXZpdHkgc2V0b2lkX3JlcGxhY2Ugc2V0b2lkX3Jld3JpdGUgc2V0b2lkX3N5bW1ldHJ5ICcgK1xuICAgICAgICAnc2V0b2lkX3RyYW5zaXRpdml0eSBzaGVsdmUgc2hlbHZlX3VuaWZpYWJsZSBzaW1wbCBzaW1wbGUgc2ltcGxpZnlfZXEgc29sdmUgJyArXG4gICAgICAgICdzcGVjaWFsaXplIHNwbGl0IHNwbGl0X1JhYnMgc3BsaXRfUm11bHQgc3RlcGwgc3RlcHIgc3Vic3Qgc3VtIHN3YXAgJyArXG4gICAgICAgICdzeW1tZXRyeSB0YWN0aWMgdGF1dG8gdGltZSB0aW1lb3V0IHRvcCB0cmFuc2l0aXZpdHkgdHJpdmlhbCB0cnkgdHJ5aWYgJyArXG4gICAgICAgICd1bmZvbGQgdW5pZnkgdW50aWwgdXNpbmcgdm1fY29tcHV0ZSB3aXRoJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwoXFxcXConLCAnXFxcXCpcXFxcKScpLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBiZWdpbjogJ1xcXFx8XFxcXHMqJyxcbiAgICAgICAgZW5kOiAnXFxcXHcrJ1xuICAgICAgfSxcbiAgICAgIHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgYmVnaW46IC9bLT1dPi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29xO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IENhY2jDqSBPYmplY3QgU2NyaXB0XG5BdXRob3I6IE5pa2l0YSBTYXZjaGVua28gPHppdHJvcy5sYWJAZ21haWwuY29tPlxuQ2F0ZWdvcnk6IGVudGVycHJpc2UsIHNjcmlwdGluZ1xuV2Vic2l0ZTogaHR0cHM6Ly9jZWRvY3MuaW50ZXJzeXN0ZW1zLmNvbS9sYXRlc3QvY3NwL2RvY2Jvb2svRG9jQm9vay5VSS5QYWdlLmNsc1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNvcyhobGpzKSB7XG4gIGNvbnN0IFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgZW5kOiAnXCInLFxuICAgICAgY29udGFpbnM6IFt7IC8vIGVzY2FwZWRcbiAgICAgICAgYmVnaW46IFwiXFxcIlxcXCJcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XVxuICAgIH1dXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IFwiXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgQ09TX0tFWVdPUkRTID1cbiAgICAncHJvcGVydHkgcGFyYW1ldGVyIGNsYXNzIGNsYXNzbWV0aG9kIGNsaWVudG1ldGhvZCBleHRlbmRzIGFzIGJyZWFrICcgK1xuICAgICdjYXRjaCBjbG9zZSBjb250aW51ZSBkbyBkfDAgZWxzZSBlbHNlaWYgZm9yIGdvdG8gaGFsdCBoYW5nIGh8MCBpZiBqb2IgJyArXG4gICAgJ2p8MCBraWxsIGt8MCBsb2NrIGx8MCBtZXJnZSBuZXcgb3BlbiBxdWl0IHF8MCByZWFkIHJ8MCByZXR1cm4gc2V0IHN8MCAnICtcbiAgICAndGNvbW1pdCB0aHJvdyB0cm9sbGJhY2sgdHJ5IHRzdGFydCB1c2UgdmlldyB3aGlsZSB3cml0ZSB3fDAgeGVjdXRlIHh8MCAnICtcbiAgICAnemtpbGwgem5zcGFjZSB6biB6dHJhcCB6d3JpdGUgencgenpkdW1wIHp6d3JpdGUgcHJpbnQgemJyZWFrIHppbnNlcnQgJyArXG4gICAgJ3psb2FkIHpwcmludCB6cmVtb3ZlIHpzYXZlIHp6cHJpbnQgbXYgbXZjYWxsIG12Y3J0IG12ZGltIG12cHJpbnQgenF1aXQgJyArXG4gICAgJ3pzeW5jIGFzY2lpJztcblxuICAvLyByZWdpc3RlcmVkIGZ1bmN0aW9uIC0gbm8gbmVlZCBpbiB0aGVtIGR1ZSB0byBhbGwgZnVuY3Rpb25zIGFyZSBoaWdobGlnaHRlZCxcbiAgLy8gYnV0IEknbGwganVzdCBsZWF2ZSB0aGlzIGhlcmUuXG5cbiAgLy8gXCIkYml0XCIsIFwiJGJpdGNvdW50XCIsXG4gIC8vIFwiJGJpdGZpbmRcIiwgXCIkYml0bG9naWNcIiwgXCIkY2FzZVwiLCBcIiRjaGFyXCIsIFwiJGNsYXNzbWV0aG9kXCIsIFwiJGNsYXNzbmFtZVwiLFxuICAvLyBcIiRjb21waWxlXCIsIFwiJGRhdGFcIiwgXCIkZGVjaW1hbFwiLCBcIiRkb3VibGVcIiwgXCIkZXh0cmFjdFwiLCBcIiRmYWN0b3JcIixcbiAgLy8gXCIkZmluZFwiLCBcIiRmbnVtYmVyXCIsIFwiJGdldFwiLCBcIiRpbmNyZW1lbnRcIiwgXCIkaW51bWJlclwiLCBcIiRpc29iamVjdFwiLFxuICAvLyBcIiRpc3ZhbGlkZG91YmxlXCIsIFwiJGlzdmFsaWRudW1cIiwgXCIkanVzdGlmeVwiLCBcIiRsZW5ndGhcIiwgXCIkbGlzdFwiLFxuICAvLyBcIiRsaXN0YnVpbGRcIiwgXCIkbGlzdGRhdGFcIiwgXCIkbGlzdGZpbmRcIiwgXCIkbGlzdGZyb21zdHJpbmdcIiwgXCIkbGlzdGdldFwiLFxuICAvLyBcIiRsaXN0bGVuZ3RoXCIsIFwiJGxpc3RuZXh0XCIsIFwiJGxpc3RzYW1lXCIsIFwiJGxpc3R0b3N0cmluZ1wiLCBcIiRsaXN0dmFsaWRcIixcbiAgLy8gXCIkbG9jYXRlXCIsIFwiJG1hdGNoXCIsIFwiJG1ldGhvZFwiLCBcIiRuYW1lXCIsIFwiJG5jb252ZXJ0XCIsIFwiJG5leHRcIixcbiAgLy8gXCIkbm9ybWFsaXplXCIsIFwiJG5vd1wiLCBcIiRudW1iZXJcIiwgXCIkb3JkZXJcIiwgXCIkcGFyYW1ldGVyXCIsIFwiJHBpZWNlXCIsXG4gIC8vIFwiJHByZWZldGNob2ZmXCIsIFwiJHByZWZldGNob25cIiwgXCIkcHJvcGVydHlcIiwgXCIkcWxlbmd0aFwiLCBcIiRxc3Vic2NyaXB0XCIsXG4gIC8vIFwiJHF1ZXJ5XCIsIFwiJHJhbmRvbVwiLCBcIiRyZXBsYWNlXCIsIFwiJHJldmVyc2VcIiwgXCIkc2NvbnZlcnRcIiwgXCIkc2VsZWN0XCIsXG4gIC8vIFwiJHNvcnRiZWdpblwiLCBcIiRzb3J0ZW5kXCIsIFwiJHN0YWNrXCIsIFwiJHRleHRcIiwgXCIkdHJhbnNsYXRlXCIsIFwiJHZpZXdcIixcbiAgLy8gXCIkd2FzY2lpXCIsIFwiJHdjaGFyXCIsIFwiJHdleHRyYWN0XCIsIFwiJHdmaW5kXCIsIFwiJHdpc3dpZGVcIiwgXCIkd2xlbmd0aFwiLFxuICAvLyBcIiR3cmV2ZXJzZVwiLCBcIiR4ZWN1dGVcIiwgXCIkemFic1wiLCBcIiR6YXJjY29zXCIsIFwiJHphcmNzaW5cIiwgXCIkemFyY3RhblwiLFxuICAvLyBcIiR6Y29zXCIsIFwiJHpjb3RcIiwgXCIkemNzY1wiLCBcIiR6ZGF0ZVwiLCBcIiR6ZGF0ZWhcIiwgXCIkemRhdGV0aW1lXCIsXG4gIC8vIFwiJHpkYXRldGltZWhcIiwgXCIkemV4cFwiLCBcIiR6aGV4XCIsIFwiJHpsblwiLCBcIiR6bG9nXCIsIFwiJHpwb3dlclwiLCBcIiR6c2VjXCIsXG4gIC8vIFwiJHpzaW5cIiwgXCIkenNxclwiLCBcIiR6dGFuXCIsIFwiJHp0aW1lXCIsIFwiJHp0aW1laFwiLCBcIiR6Ym9vbGVhblwiLFxuICAvLyBcIiR6Y29udmVydFwiLCBcIiR6Y3JjXCIsIFwiJHpjeWNcIiwgXCIkemRhc2NpaVwiLCBcIiR6ZGNoYXJcIiwgXCIkemZcIixcbiAgLy8gXCIkemlzd2lkZVwiLCBcIiR6bGFzY2lpXCIsIFwiJHpsY2hhclwiLCBcIiR6bmFtZVwiLCBcIiR6cG9zaXRpb25cIiwgXCIkenFhc2NpaVwiLFxuICAvLyBcIiR6cWNoYXJcIiwgXCIkenNlYXJjaFwiLCBcIiR6c2Vla1wiLCBcIiR6c3RyaXBcIiwgXCIkendhc2NpaVwiLCBcIiR6d2NoYXJcIixcbiAgLy8gXCIkendpZHRoXCIsIFwiJHp3cGFja1wiLCBcIiR6d2JwYWNrXCIsIFwiJHp3dW5wYWNrXCIsIFwiJHp3YnVucGFja1wiLCBcIiR6emVua2FrdVwiLFxuICAvLyBcIiRjaGFuZ2VcIiwgXCIkbXZcIiwgXCIkbXZhdFwiLCBcIiRtdmZtdFwiLCBcIiRtdmZtdHNcIiwgXCIkbXZpY29udlwiLFxuICAvLyBcIiRtdmljb252c1wiLCBcIiRtdmlubWF0XCIsIFwiJG12bG92ZXJcIiwgXCIkbXZvY29udlwiLCBcIiRtdm9jb252c1wiLCBcIiRtdnJhaXNlXCIsXG4gIC8vIFwiJG12dHJhbnNcIiwgXCIkbXZ2XCIsIFwiJG12bmFtZVwiLCBcIiR6Yml0YW5kXCIsIFwiJHpiaXRjb3VudFwiLCBcIiR6Yml0ZmluZFwiLFxuICAvLyBcIiR6Yml0Z2V0XCIsIFwiJHpiaXRsZW5cIiwgXCIkemJpdG5vdFwiLCBcIiR6Yml0b3JcIiwgXCIkemJpdHNldFwiLCBcIiR6Yml0c3RyXCIsXG4gIC8vIFwiJHpiaXR4b3JcIiwgXCIkemluY3JlbWVudFwiLCBcIiR6bmV4dFwiLCBcIiR6b3JkZXJcIiwgXCIkenByZXZpb3VzXCIsIFwiJHpzb3J0XCIsXG4gIC8vIFwiZGV2aWNlXCIsIFwiJGVjb2RlXCIsIFwiJGVzdGFja1wiLCBcIiRldHJhcFwiLCBcIiRoYWx0XCIsIFwiJGhvcm9sb2dcIixcbiAgLy8gXCIkaW9cIiwgXCIkam9iXCIsIFwiJGtleVwiLCBcIiRuYW1lc3BhY2VcIiwgXCIkcHJpbmNpcGFsXCIsIFwiJHF1aXRcIiwgXCIkcm9sZXNcIixcbiAgLy8gXCIkc3RvcmFnZVwiLCBcIiRzeXN0ZW1cIiwgXCIkdGVzdFwiLCBcIiR0aGlzXCIsIFwiJHRsZXZlbFwiLCBcIiR1c2VybmFtZVwiLFxuICAvLyBcIiR4XCIsIFwiJHlcIiwgXCIkemFcIiwgXCIkemJcIiwgXCIkemNoaWxkXCIsIFwiJHplb2ZcIiwgXCIkemVvc1wiLCBcIiR6ZXJyb3JcIixcbiAgLy8gXCIkemhvcm9sb2dcIiwgXCIkemlvXCIsIFwiJHpqb2JcIiwgXCIkem1vZGVcIiwgXCIkem5zcGFjZVwiLCBcIiR6cGFyZW50XCIsIFwiJHpwaVwiLFxuICAvLyBcIiR6cG9zXCIsIFwiJHpyZWZlcmVuY2VcIiwgXCIkenN0b3JhZ2VcIiwgXCIkenRpbWVzdGFtcFwiLCBcIiR6dGltZXpvbmVcIixcbiAgLy8gXCIkenRyYXBcIiwgXCIkenZlcnNpb25cIlxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NhY2jDqSBPYmplY3QgU2NyaXB0JyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgIFwiY2xzXCJcbiAgICBdLFxuICAgIGtleXdvcmRzOiBDT1NfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE5VTUJFUlMsXG4gICAgICBTVFJJTkdTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIixcbiAgICAgICAgYmVnaW46IC87LyxcbiAgICAgICAgZW5kOiBcIiRcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBGdW5jdGlvbnMgYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM6IHdyaXRlICR6dGltZSg2MCo2MCozKSwgJCRteUZ1bmMoMTApLCAkJF5WYWwoMSlcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIGJlZ2luOiAvKD86XFwkXFwkP3xcXC5cXC4pXFxeP1thLXpBLVpdKy9cbiAgICAgIH0sXG4gICAgICB7IC8vIE1hY3JvIGNvbW1hbmQ6IHF1aXQgJCQkT0tcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIGJlZ2luOiAvXFwkXFwkXFwkW2EtekEtWl0rL1xuICAgICAgfSxcbiAgICAgIHsgLy8gU3BlY2lhbCAoZ2xvYmFsKSB2YXJpYWJsZXM6IHdyaXRlICVyZXF1ZXN0LkNvbnRlbnQ7IEJ1aWx0LWluIGNsYXNzZXM6ICVMaWJyYXJ5LkludGVnZXJcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIGJlZ2luOiAvJVthLXpdKyg/OlxcLlthLXpdKykqL1xuICAgICAgfSxcbiAgICAgIHsgLy8gR2xvYmFsIHZhcmlhYmxlOiBzZXQgXmdsb2JhbE5hbWUgPSAxMiB3cml0ZSBeZ2xvYmFsTmFtZVxuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvXFxeJT9bYS16QS1aXVtcXHddKi9cbiAgICAgIH0sXG4gICAgICB7IC8vIFNvbWUgY29udHJvbCBjb25zdHJ1Y3Rpb25zOiBkbyAjI2NsYXNzKFBhY2thZ2UuQ2xhc3NOYW1lKS5NZXRob2QoKSwgIyNzdXBlcigpXG4gICAgICAgIGNsYXNzTmFtZTogXCJrZXl3b3JkXCIsXG4gICAgICAgIGJlZ2luOiAvIyNjbGFzc3wjI3N1cGVyfCNkZWZpbmV8I2RpbS9cbiAgICAgIH0sXG4gICAgICAvLyBzdWItbGFuZ3VhZ2VzOiBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSBobGpzIGJ5IDExLzE1LzIwMTVcbiAgICAgIC8vIGxlZnQgZm9yIHRoZSBmdXR1cmUgaW1wbGVtZW50YXRpb24uXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJnNxbFxcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6IFwic3FsXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJihqc3xqc2NyaXB0fGphdmFzY3JpcHQpPC8sXG4gICAgICAgIGVuZDogLz4vLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcImphdmFzY3JpcHRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBicmFrZXMgZmlyc3QgYW5kIGxhc3QgdGFnLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW1iZWQgYSB2YWxpZCBodG1sXG4gICAgICAgIGJlZ2luOiAvJmh0bWw8XFxzKjwvLFxuICAgICAgICBlbmQ6IC8+XFxzKj4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogXCJ4bWxcIlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3M7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBvcHRpb25hbChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoJywgcmUsICcpPycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEMrK1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG5XZWJzaXRlOiBodHRwczovL2lzb2NwcC5vcmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjcHAoaGxqcykge1xuICAvLyBhZGRlZCBmb3IgaGlzdG9yaWMgcmVhc29ucyBiZWNhdXNlIGBobGpzLkNfTElORV9DT01NRU5UX01PREVgIGRvZXNcbiAgLy8gbm90IGluY2x1ZGUgc3VjaCBzdXBwb3J0IG5vciBjYW4gd2UgYmUgc3VyZSBhbGwgdGhlIGdyYW1tYXJzIGRlcGVuZGluZ1xuICAvLyBvbiBpdCB3b3VsZCBkZXNpcmUgdGhpcyBiZWhhdmlvclxuICBjb25zdCBDX0xJTkVfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcvLycsICckJywge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi9cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICBjb25zdCBERUNMVFlQRV9BVVRPX1JFID0gJ2RlY2x0eXBlXFxcXChhdXRvXFxcXCknO1xuICBjb25zdCBOQU1FU1BBQ0VfUkUgPSAnW2EtekEtWl9dXFxcXHcqOjonO1xuICBjb25zdCBURU1QTEFURV9BUkdVTUVOVF9SRSA9ICc8W148Pl0rPic7XG4gIGNvbnN0IEZVTkNUSU9OX1RZUEVfUkUgPSAnKCcgK1xuICAgIERFQ0xUWVBFX0FVVE9fUkUgKyAnfCcgK1xuICAgIG9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgK1xuICAgICdbYS16QS1aX11cXFxcdyonICsgb3B0aW9uYWwoVEVNUExBVEVfQVJHVU1FTlRfUkUpICtcbiAgJyknO1xuICBjb25zdCBDUFBfUFJJTUlUSVZFX1RZUEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnXFxcXGJbYS16XFxcXGRfXSpfdFxcXFxiJ1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9lc2NhcGVcbiAgLy8gXFxcXCBcXHggXFx4RkYgXFx1MjgzNyBcXHUwMDMyMzc0NyBcXDM3NFxuICBjb25zdCBDSEFSQUNURVJfRVNDQVBFUyA9ICdcXFxcXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxcXFMpJztcbiAgY29uc3QgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVfEwpP1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XFwnKCcgKyBDSEFSQUNURVJfRVNDQVBFUyArIFwifC4pXCIsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfSxcbiAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICBiZWdpbjogLyg/OnU4P3xVfEwpP1JcIihbXigpXFxcXCBdezAsMTZ9KVxcKC8sXG4gICAgICAgIGVuZDogL1xcKShbXigpXFxcXCBdezAsMTZ9KVwiL1xuICAgICAgfSlcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJygtPylcXFxcYihbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoKGxsfExMfGx8TCkodXxVKT98KHV8VSkobGx8TEx8bHxMKT98ZnxGfGJ8QiknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sXG4gICAgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgJyArXG4gICAgICAgICdwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ1xuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC88Lio/Pi9cbiAgICAgIH0sXG4gICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBUSVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogb3B0aW9uYWwoTkFNRVNQQUNFX1JFKSArIGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fVElUTEUgPSBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCc7XG5cbiAgY29uc3QgQ09NTU9OX0NQUF9ISU5UUyA9IFtcbiAgICAnYXNpbicsXG4gICAgJ2F0YW4yJyxcbiAgICAnYXRhbicsXG4gICAgJ2NhbGxvYycsXG4gICAgJ2NlaWwnLFxuICAgICdjb3NoJyxcbiAgICAnY29zJyxcbiAgICAnZXhpdCcsXG4gICAgJ2V4cCcsXG4gICAgJ2ZhYnMnLFxuICAgICdmbG9vcicsXG4gICAgJ2Ztb2QnLFxuICAgICdmcHJpbnRmJyxcbiAgICAnZnB1dHMnLFxuICAgICdmcmVlJyxcbiAgICAnZnJleHAnLFxuICAgICdhdXRvX3B0cicsXG4gICAgJ2RlcXVlJyxcbiAgICAnbGlzdCcsXG4gICAgJ3F1ZXVlJyxcbiAgICAnc3RhY2snLFxuICAgICd2ZWN0b3InLFxuICAgICdtYXAnLFxuICAgICdzZXQnLFxuICAgICdwYWlyJyxcbiAgICAnYml0c2V0JyxcbiAgICAnbXVsdGlzZXQnLFxuICAgICdtdWx0aW1hcCcsXG4gICAgJ3Vub3JkZXJlZF9zZXQnLFxuICAgICdmc2NhbmYnLFxuICAgICdmdXR1cmUnLFxuICAgICdpc2FsbnVtJyxcbiAgICAnaXNhbHBoYScsXG4gICAgJ2lzY250cmwnLFxuICAgICdpc2RpZ2l0JyxcbiAgICAnaXNncmFwaCcsXG4gICAgJ2lzbG93ZXInLFxuICAgICdpc3ByaW50JyxcbiAgICAnaXNwdW5jdCcsXG4gICAgJ2lzc3BhY2UnLFxuICAgICdpc3VwcGVyJyxcbiAgICAnaXN4ZGlnaXQnLFxuICAgICd0b2xvd2VyJyxcbiAgICAndG91cHBlcicsXG4gICAgJ2xhYnMnLFxuICAgICdsZGV4cCcsXG4gICAgJ2xvZzEwJyxcbiAgICAnbG9nJyxcbiAgICAnbWFsbG9jJyxcbiAgICAncmVhbGxvYycsXG4gICAgJ21lbWNocicsXG4gICAgJ21lbWNtcCcsXG4gICAgJ21lbWNweScsXG4gICAgJ21lbXNldCcsXG4gICAgJ21vZGYnLFxuICAgICdwb3cnLFxuICAgICdwcmludGYnLFxuICAgICdwdXRjaGFyJyxcbiAgICAncHV0cycsXG4gICAgJ3NjYW5mJyxcbiAgICAnc2luaCcsXG4gICAgJ3NpbicsXG4gICAgJ3NucHJpbnRmJyxcbiAgICAnc3ByaW50ZicsXG4gICAgJ3NxcnQnLFxuICAgICdzc2NhbmYnLFxuICAgICdzdHJjYXQnLFxuICAgICdzdHJjaHInLFxuICAgICdzdHJjbXAnLFxuICAgICdzdHJjcHknLFxuICAgICdzdHJjc3BuJyxcbiAgICAnc3RybGVuJyxcbiAgICAnc3RybmNhdCcsXG4gICAgJ3N0cm5jbXAnLFxuICAgICdzdHJuY3B5JyxcbiAgICAnc3RycGJyaycsXG4gICAgJ3N0cnJjaHInLFxuICAgICdzdHJzcG4nLFxuICAgICdzdHJzdHInLFxuICAgICd0YW5oJyxcbiAgICAndGFuJyxcbiAgICAndW5vcmRlcmVkX21hcCcsXG4gICAgJ3Vub3JkZXJlZF9tdWx0aXNldCcsXG4gICAgJ3Vub3JkZXJlZF9tdWx0aW1hcCcsXG4gICAgJ3ByaW9yaXR5X3F1ZXVlJyxcbiAgICAnbWFrZV9wYWlyJyxcbiAgICAnYXJyYXknLFxuICAgICdzaGFyZWRfcHRyJyxcbiAgICAnYWJvcnQnLFxuICAgICd0ZXJtaW5hdGUnLFxuICAgICdhYnMnLFxuICAgICdhY29zJyxcbiAgICAndmZwcmludGYnLFxuICAgICd2cHJpbnRmJyxcbiAgICAndnNwcmludGYnLFxuICAgICdlbmRsJyxcbiAgICAnaW5pdGlhbGl6ZXJfbGlzdCcsXG4gICAgJ3VuaXF1ZV9wdHInLFxuICAgICdjb21wbGV4JyxcbiAgICAnaW1hZ2luYXJ5JyxcbiAgICAnc3RkJyxcbiAgICAnc3RyaW5nJyxcbiAgICAnd3N0cmluZycsXG4gICAgJ2NpbicsXG4gICAgJ2NvdXQnLFxuICAgICdjZXJyJyxcbiAgICAnY2xvZycsXG4gICAgJ3N0ZGluJyxcbiAgICAnc3Rkb3V0JyxcbiAgICAnc3RkZXJyJyxcbiAgICAnc3RyaW5nc3RyZWFtJyxcbiAgICAnaXN0cmluZ3N0cmVhbScsXG4gICAgJ29zdHJpbmdzdHJlYW0nXG4gIF07XG5cbiAgY29uc3QgQ1BQX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNoYXI4X3QgY2hhcjE2X3QgY2hhcjMyX3QgY2F0Y2ggaW1wb3J0IG1vZHVsZSBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgJyArXG4gICAgICAnZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlICcgK1xuICAgICAgJ3Vuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCAnICtcbiAgICAgICdkbyBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIHVzaW5nIGFzbSBjYXNlIHR5cGVpZCB3Y2hhcl90ICcgK1xuICAgICAgJ3Nob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWduYXMgYWxpZ25vZiBjb25zdGV4cHIgY29uc3RldmFsIGNvbnN0aW5pdCBkZWNsdHlwZSAnICtcbiAgICAgICdjb25jZXB0IGNvX2F3YWl0IGNvX3JldHVybiBjb195aWVsZCByZXF1aXJlcyAnICtcbiAgICAgICdub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBmaW5hbCBvdmVycmlkZSAnICtcbiAgICAgICdhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgJyArXG4gICAgICAnYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyAnICtcbiAgICAgICdhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gJyArXG4gICAgICAnYW5kIGFuZF9lcSBiaXRhbmQgYml0b3IgY29tcGwgbm90IG5vdF9lcSBvciBvcl9lcSB4b3IgeG9yX2VxJyxcbiAgICBidWlsdF9pbjogJ19Cb29sIF9Db21wbGV4IF9JbWFnaW5hcnknLFxuICAgIF9yZWxldmFuY2VfaGludHM6IENPTU1PTl9DUFBfSElOVFMsXG4gICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbnVsbHB0ciBOVUxMJ1xuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0RJU1BBVENIID0ge1xuICAgIGNsYXNzTmFtZTogXCJmdW5jdGlvbi5kaXNwYXRjaFwiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAvXFxiLyxcbiAgICAgIC8oPyFkZWNsdHlwZSkvLFxuICAgICAgLyg/IWlmKS8sXG4gICAgICAvKD8hZm9yKS8sXG4gICAgICAvKD8hd2hpbGUpLyxcbiAgICAgIGhsanMuSURFTlRfUkUsXG4gICAgICBsb29rYWhlYWQoL1xccypcXCgvKSlcbiAgfTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRBSU5TID0gW1xuICAgIEZVTkNUSU9OX0RJU1BBVENILFxuICAgIFBSRVBST0NFU1NPUixcbiAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJTLFxuICAgIFNUUklOR1NcbiAgXTtcblxuXG4gIGNvbnN0IEVYUFJFU1NJT05fQ09OVEVYVCA9IHtcbiAgICAvLyBUaGlzIG1vZGUgY292ZXJzIGV4cHJlc3Npb24gY29udGV4dCB3aGVyZSB3ZSBjYW4ndCBleHBlY3QgYSBmdW5jdGlvblxuICAgIC8vIGRlZmluaXRpb24gYW5kIHNob3VsZG4ndCBoaWdobGlnaHQgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIG9uZTpcbiAgICAvLyBgcmV0dXJuIHNvbWUoKWAsIGBlbHNlIGlmKClgLCBgKHgqc3VtKDEsIDIpKWBcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLz0vLFxuICAgICAgICBlbmQ6IC87L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmV3IHRocm93IHJldHVybiBlbHNlJyxcbiAgICAgICAgZW5kOiAvOy9cbiAgICAgIH1cbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoWyAnc2VsZicgXSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0RFQ0xBUkFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbjogJygnICsgRlVOQ1RJT05fVFlQRV9SRSArICdbXFxcXComXFxcXHNdKykrJyArIEZVTkNUSU9OX1RJVExFLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGVuZDogL1t7Oz1dLyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1teXFx3XFxzXFwqJjo8Pi5dLyxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY29uZnVzZWQgYXMgdGhlIGZ1bmN0aW9uIHRpdGxlXG4gICAgICAgIGJlZ2luOiBERUNMVFlQRV9BVVRPX1JFLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBGVU5DVElPTl9USVRMRSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbIFRJVExFX01PREUgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgbG9vay1iZWhpbmQgb24gdGhlIGJlbG93IHJ1bGVcbiAgICAgIC8vIHRvIHByZXZlbnQgaXQgZnJvbSBncmFiYmluZyB0aGUgZmluYWwgOiBpbiBhIDo6IHBhaXJcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86Oi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGluaXRpYWxpemVyc1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgIE5VTUJFUlNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgICAgICAgIC8vIENvdW50IG1hdGNoaW5nIHBhcmVudGhlc2VzLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgUFJFUFJPQ0VTU09SXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0MrKycsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2NjJyxcbiAgICAgICdjKysnLFxuICAgICAgJ2grKycsXG4gICAgICAnaHBwJyxcbiAgICAgICdoaCcsXG4gICAgICAnaHh4JyxcbiAgICAgICdjeHgnXG4gICAgXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY2xhc3NOYW1lQWxpYXNlczoge1xuICAgICAgXCJmdW5jdGlvbi5kaXNwYXRjaFwiOiBcImJ1aWx0X2luXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXS5jb25jYXQoXG4gICAgICBFWFBSRVNTSU9OX0NPTlRFWFQsXG4gICAgICBGVU5DVElPTl9ERUNMQVJBVElPTixcbiAgICAgIEZVTkNUSU9OX0RJU1BBVENILFxuICAgICAgRVhQUkVTU0lPTl9DT05UQUlOUyxcbiAgICAgIFtcbiAgICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAgICB7IC8vIGNvbnRhaW5lcnM6IGllLCBgdmVjdG9yIDxpbnQ+IHJvb21zICg5KTtgXG4gICAgICAgICAgYmVnaW46ICdcXFxcYihkZXF1ZXxsaXN0fHF1ZXVlfHByaW9yaXR5X3F1ZXVlfHBhaXJ8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxcXFxzKjwnLFxuICAgICAgICAgIGVuZDogJz4nLFxuICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgIENQUF9QUklNSVRJVkVfVFlQRVNcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEU1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdlbnVtIGNsYXNzIHN0cnVjdCB1bmlvbicsXG4gICAgICAgICAgZW5kOiAvW3s7Ojw+PV0vLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6IFwiZmluYWwgY2xhc3Mgc3RydWN0XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0pLFxuICAgIGV4cG9ydHM6IHtcbiAgICAgIHByZXByb2Nlc3NvcjogUFJFUFJPQ0VTU09SLFxuICAgICAgc3RyaW5nczogU1RSSU5HUyxcbiAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3BwO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IGNybXNoXG5BdXRob3I6IEtyaXN0b2ZmZXIgR3Jvbmx1bmQgPGtncm9ubHVuZEBzdXNlLmNvbT5cbldlYnNpdGU6IGh0dHA6Ly9jcm1zaC5naXRodWIuaW9cbkRlc2NyaXB0aW9uOiBTeW50YXggSGlnaGxpZ2h0aW5nIGZvciB0aGUgY3Jtc2ggRFNMXG5DYXRlZ29yeTogY29uZmlnXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY3Jtc2goaGxqcykge1xuICBjb25zdCBSRVNPVVJDRVMgPSAncHJpbWl0aXZlIHJzY190ZW1wbGF0ZSc7XG4gIGNvbnN0IENPTU1BTkRTID0gJ2dyb3VwIGNsb25lIG1zIG1hc3RlciBsb2NhdGlvbiBjb2xvY2F0aW9uIG9yZGVyIGZlbmNpbmdfdG9wb2xvZ3kgJyArXG4gICAgICAncnNjX3RpY2tldCBhY2xfdGFyZ2V0IGFjbF9ncm91cCB1c2VyIHJvbGUgJyArXG4gICAgICAndGFnIHhtbCc7XG4gIGNvbnN0IFBST1BFUlRZX1NFVFMgPSAncHJvcGVydHkgcnNjX2RlZmF1bHRzIG9wX2RlZmF1bHRzJztcbiAgY29uc3QgS0VZV09SRFMgPSAncGFyYW1zIG1ldGEgb3BlcmF0aW9ucyBvcCBydWxlIGF0dHJpYnV0ZXMgdXRpbGl6YXRpb24nO1xuICBjb25zdCBPUEVSQVRPUlMgPSAncmVhZCB3cml0ZSBkZW55IGRlZmluZWQgbm90X2RlZmluZWQgaW5fcmFuZ2UgZGF0ZSBzcGVjIGluICcgK1xuICAgICAgJ3JlZiByZWZlcmVuY2UgYXR0cmlidXRlIHR5cGUgeHBhdGggdmVyc2lvbiBhbmQgb3IgbHQgZ3QgdGFnICcgK1xuICAgICAgJ2x0ZSBndGUgZXEgbmUgXFxcXCc7XG4gIGNvbnN0IFRZUEVTID0gJ251bWJlciBzdHJpbmcnO1xuICBjb25zdCBMSVRFUkFMUyA9ICdNYXN0ZXIgU3RhcnRlZCBTbGF2ZSBTdG9wcGVkIHN0YXJ0IHByb21vdGUgZGVtb3RlIHN0b3AgbW9uaXRvciB0cnVlIGZhbHNlJztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdjcm1zaCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2NybScsXG4gICAgICAncGNtaydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTICsgJyAnICsgT1BFUkFUT1JTICsgJyAnICsgVFlQRVMsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdub2RlJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFxcXHMqKFtcXFxcd18tXSs6KT8nLFxuICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXHMqW1xcXFwkXFxcXHdfXVtcXFxcd18tXSonXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiBSRVNPVVJDRVMsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICBlbmQ6ICdcXFxccypbXFxcXCRcXFxcd19dW1xcXFx3Xy1dKicsXG4gICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICBlbmQ6ICdcXFxccypAP1tcXFxcd19dW1xcXFx3X1xcXFwuOi1dKidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIENPTU1BTkRTLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxccysnLFxuICAgICAgICBrZXl3b3JkczogQ09NTUFORFMsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICBlbmQ6ICdbXFxcXCRcXFxcd19dW1xcXFx3Xy1dKidcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogUFJPUEVSVFlfU0VUUyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgIGVuZDogJ1xcXFxzKihbXFxcXHdfLV0rOik/J1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnKG9jZnxzeXN0ZW1kfHNlcnZpY2V8bHNiKTpbXFxcXHdfOi1dKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/KG1zfHN8aHxtKT8nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICBiZWdpbjogJ1stXT8oaW5maW5pdHl8aW5mKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiAvKFtBLVphLXokXyNdW1xcd18tXSspPS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICc8Lz8nLFxuICAgICAgICBlbmQ6ICcvPz4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3Jtc2g7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQ3J5c3RhbFxuQXV0aG9yOiBUU1VZVVNBVE8gS2l0c3VuZSA8bWFrZS5qdXN0Lm9uQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vY3J5c3RhbC1sYW5nLm9yZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNyeXN0YWwoaGxqcykge1xuICBjb25zdCBJTlRfU1VGRklYID0gJyhfP1t1aV0oOHwxNnwzMnw2NHwxMjgpKT8nO1xuICBjb25zdCBGTE9BVF9TVUZGSVggPSAnKF8/ZigzMnw2NCkpPyc7XG4gIGNvbnN0IENSWVNUQUxfSURFTlRfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/JztcbiAgY29uc3QgQ1JZU1RBTF9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dQHw8PHw+PnxbPSFdfnw9PT0/fDw9PnxbPD5dPT98XFxcXCpcXFxcKnxbLS8rJV4mKn58XXwvL3wvLz18JlstKypdPT98JlxcXFwqXFxcXCp8XFxcXFtcXFxcXVs9P10/JztcbiAgY29uc3QgQ1JZU1RBTF9QQVRIX1JFID0gJ1tBLVphLXpfXVxcXFx3Kig6OlxcXFx3KykqKFxcXFw/fCEpPyc7XG4gIGNvbnN0IENSWVNUQUxfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IENSWVNUQUxfSURFTlRfUkUsXG4gICAga2V5d29yZDpcbiAgICAgICdhYnN0cmFjdCBhbGlhcyBhbm5vdGF0aW9uIGFzIGFzPyBhc20gYmVnaW4gYnJlYWsgY2FzZSBjbGFzcyBkZWYgZG8gZWxzZSBlbHNpZiBlbmQgZW5zdXJlIGVudW0gZXh0ZW5kIGZvciBmdW4gaWYgJyArXG4gICAgICAnaW5jbHVkZSBpbnN0YW5jZV9zaXplb2YgaXNfYT8gbGliIG1hY3JvIG1vZHVsZSBuZXh0IG5pbD8gb2Ygb3V0IHBvaW50ZXJvZiBwcml2YXRlIHByb3RlY3RlZCByZXNjdWUgcmVzcG9uZHNfdG8/ICcgK1xuICAgICAgJ3JldHVybiByZXF1aXJlIHNlbGVjdCBzZWxmIHNpemVvZiBzdHJ1Y3Qgc3VwZXIgdGhlbiB0eXBlIHR5cGVvZiB1bmlvbiB1bmluaXRpYWxpemVkIHVubGVzcyB1bnRpbCB2ZXJiYXRpbSB3aGVuIHdoaWxlIHdpdGggeWllbGQgJyArXG4gICAgICAnX19ESVJfXyBfX0VORF9MSU5FX18gX19GSUxFX18gX19MSU5FX18nLFxuICAgIGxpdGVyYWw6ICdmYWxzZSBuaWwgdHJ1ZSdcbiAgfTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogQ1JZU1RBTF9LRVlXT1JEU1xuICB9O1xuICBjb25zdCBFWFBBTlNJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHtcXFxceycsXG4gICAgICAgIGVuZDogJ1xcXFx9XFxcXH0nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFx7JScsXG4gICAgICAgIGVuZDogJyVcXFxcfSdcbiAgICAgIH1cbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlUGFyZW4oYmVnaW4sIGVuZCkge1xuICAgIGNvbnN0XG4gICAgICAgIGNvbnRhaW5zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBiZWdpbixcbiAgICAgICAgICAgIGVuZDogZW5kXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIGNvbnRhaW5zWzBdLmNvbnRhaW5zID0gY29udGFpbnM7XG4gICAgcmV0dXJuIGNvbnRhaW5zO1xuICB9XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvYC8sXG4gICAgICAgIGVuZDogL2AvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyVbUXdpXT9cXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcKCcsICdcXFxcKScpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyVbUXdpXT9cXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcWycsICdcXFxcXScpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyVbUXdpXT9cXFxceycsXG4gICAgICAgIGVuZDogL1xcfS8sXG4gICAgICAgIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbigvXFx7LywgL1xcfS8pXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyVbUXdpXT88JyxcbiAgICAgICAgZW5kOiAnPicsXG4gICAgICAgIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJVtRd2ldP1xcXFx8JyxcbiAgICAgICAgZW5kOiAnXFxcXHwnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLzw8LVxcdyskLyxcbiAgICAgICAgZW5kOiAvXlxccypcXHcrJC9cbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBRX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJXFcXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcKCcsICdcXFxcKScpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyVxXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXFsnLCAnXFxcXF0nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICclcVxcXFx7JyxcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKC9cXHsvLCAvXFx9LylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJXE8JyxcbiAgICAgICAgZW5kOiAnPicsXG4gICAgICAgIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJXFcXFxcfCcsXG4gICAgICAgIGVuZDogJ1xcXFx8J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88PC0nXFx3KyckLyxcbiAgICAgICAgZW5kOiAvXlxccypcXHcrJC9cbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBSRUdFWFAgPSB7XG4gICAgYmVnaW46ICcoPyElXFxcXH0pKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcbnxcXFxcYihjYXNlfGlmfHNlbGVjdHx1bmxlc3N8dW50aWx8d2hlbnx3aGlsZSlcXFxcYilcXFxccyonLFxuICAgIGtleXdvcmRzOiAnY2FzZSBpZiBzZWxlY3QgdW5sZXNzIHVudGlsIHdoZW4gd2hpbGUnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF0sXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcvL1thLXpdKicsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnLyg/IVxcXFwvKScsXG4gICAgICAgICAgICBlbmQ6ICcvW2Etel0qJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFJFR0VYUDIgPSB7XG4gICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJXJcXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcKCcsICdcXFxcKScpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyVyXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXFsnLCAnXFxcXF0nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICclclxcXFx7JyxcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKC9cXHsvLCAvXFx9LylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJXI8JyxcbiAgICAgICAgZW5kOiAnPicsXG4gICAgICAgIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnJXJcXFxcfCcsXG4gICAgICAgIGVuZDogJ1xcXFx8J1xuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IEFUVFJJQlVURSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0BcXFxcWycsXG4gICAgZW5kOiAnXFxcXF0nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZydcbiAgICAgIH0pXG4gICAgXVxuICB9O1xuICBjb25zdCBDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgRVhQQU5TSU9OLFxuICAgIFNUUklORyxcbiAgICBRX1NUUklORyxcbiAgICBSRUdFWFAyLFxuICAgIFJFR0VYUCxcbiAgICBBVFRSSUJVVEUsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgbW9kdWxlIHN0cnVjdCcsXG4gICAgICBlbmQ6ICckfDsnLFxuICAgICAgaWxsZWdhbDogLz0vLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgIGJlZ2luOiBDUllTVEFMX1BBVEhfUkVcbiAgICAgICAgfSksXG4gICAgICAgIHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXIgZm9yIGluaGVyaXRhbmNlXG4gICAgICAgICAgYmVnaW46ICc8J1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnbGliIGVudW0gdW5pb24nLFxuICAgICAgZW5kOiAnJHw7JyxcbiAgICAgIGlsbGVnYWw6IC89LyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICBiZWdpbjogQ1JZU1RBTF9QQVRIX1JFXG4gICAgICAgIH0pXG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbktleXdvcmRzOiAnYW5ub3RhdGlvbicsXG4gICAgICBlbmQ6ICckfDsnLFxuICAgICAgaWxsZWdhbDogLz0vLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgIGJlZ2luOiBDUllTVEFMX1BBVEhfUkVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDJcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdkZWYnLFxuICAgICAgZW5kOiAvXFxCXFxiLyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICBiZWdpbjogQ1JZU1RBTF9NRVRIT0RfUkUsXG4gICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1biBtYWNybycsXG4gICAgICBlbmQ6IC9cXEJcXGIvLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgIGJlZ2luOiBDUllTVEFMX01FVEhPRF9SRSxcbiAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAyXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoIXxcXFxcPyk/OicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogJzonLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgU1RSSU5HLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IENSWVNUQUxfTUVUSE9EX1JFXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXFxcYjBiKFswMV9dKyknICsgSU5UX1NVRkZJWFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXFxcYjBvKFswLTdfXSspJyArIElOVF9TVUZGSVhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFxcXGIweChbQS1GYS1mMC05X10rKScgKyBJTlRfU1VGRklYXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1xcXFxiKFsxLTldWzAtOV9dKlswLTldfFswLTldKShcXFxcLlswLTldWzAtOV9dKik/KFtlRV1fP1stK10/WzAtOV9dKik/JyArIEZMT0FUX1NVRkZJWCArICcoPyFfKSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFxcXGIoWzEtOV1bMC05X10qfDApJyArIElOVF9TVUZGSVhcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlM7XG4gIEVYUEFOU0lPTi5jb250YWlucyA9IENSWVNUQUxfREVGQVVMVF9DT05UQUlOUy5zbGljZSgxKTsgLy8gd2l0aG91dCBFWFBBTlNJT05cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDcnlzdGFsJyxcbiAgICBhbGlhc2VzOiBbICdjcicgXSxcbiAgICBrZXl3b3JkczogQ1JZU1RBTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogQ1JZU1RBTF9ERUZBVUxUX0NPTlRBSU5TXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3J5c3RhbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBDI1xuQXV0aG9yOiBKYXNvbiBEaWFtb25kIDxqYXNvbkBkaWFtb25kLm5hbWU+XG5Db250cmlidXRvcjogTmljb2xhcyBMTE9CRVJBIDxubGxvYmVyYUBnbWFpbC5jb20+LCBQaWV0ZXIgVmFudG9ycmUgPHBpZXRlcnZhbnRvcnJlQGdtYWlsLmNvbT4sIERhdmlkIFBpbmUgPGRhdmlkLnBpbmVAbWljcm9zb2Z0LmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY3NoYXJwKGhsanMpIHtcbiAgY29uc3QgQlVJTFRfSU5fS0VZV09SRFMgPSBbXG4gICAgJ2Jvb2wnLFxuICAgICdieXRlJyxcbiAgICAnY2hhcicsXG4gICAgJ2RlY2ltYWwnLFxuICAgICdkZWxlZ2F0ZScsXG4gICAgJ2RvdWJsZScsXG4gICAgJ2R5bmFtaWMnLFxuICAgICdlbnVtJyxcbiAgICAnZmxvYXQnLFxuICAgICdpbnQnLFxuICAgICdsb25nJyxcbiAgICAnbmludCcsXG4gICAgJ251aW50JyxcbiAgICAnb2JqZWN0JyxcbiAgICAnc2J5dGUnLFxuICAgICdzaG9ydCcsXG4gICAgJ3N0cmluZycsXG4gICAgJ3Vsb25nJyxcbiAgICAndWludCcsXG4gICAgJ3VzaG9ydCdcbiAgXTtcbiAgY29uc3QgRlVOQ1RJT05fTU9ESUZJRVJTID0gW1xuICAgICdwdWJsaWMnLFxuICAgICdwcml2YXRlJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAnc3RhdGljJyxcbiAgICAnaW50ZXJuYWwnLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdhYnN0cmFjdCcsXG4gICAgJ2FzeW5jJyxcbiAgICAnZXh0ZXJuJyxcbiAgICAnb3ZlcnJpZGUnLFxuICAgICd1bnNhZmUnLFxuICAgICd2aXJ0dWFsJyxcbiAgICAnbmV3JyxcbiAgICAnc2VhbGVkJyxcbiAgICAncGFydGlhbCdcbiAgXTtcbiAgY29uc3QgTElURVJBTF9LRVlXT1JEUyA9IFtcbiAgICAnZGVmYXVsdCcsXG4gICAgJ2ZhbHNlJyxcbiAgICAnbnVsbCcsXG4gICAgJ3RydWUnXG4gIF07XG4gIGNvbnN0IE5PUk1BTF9LRVlXT1JEUyA9IFtcbiAgICAnYWJzdHJhY3QnLFxuICAgICdhcycsXG4gICAgJ2Jhc2UnLFxuICAgICdicmVhaycsXG4gICAgJ2Nhc2UnLFxuICAgICdjbGFzcycsXG4gICAgJ2NvbnN0JyxcbiAgICAnY29udGludWUnLFxuICAgICdkbycsXG4gICAgJ2Vsc2UnLFxuICAgICdldmVudCcsXG4gICAgJ2V4cGxpY2l0JyxcbiAgICAnZXh0ZXJuJyxcbiAgICAnZmluYWxseScsXG4gICAgJ2ZpeGVkJyxcbiAgICAnZm9yJyxcbiAgICAnZm9yZWFjaCcsXG4gICAgJ2dvdG8nLFxuICAgICdpZicsXG4gICAgJ2ltcGxpY2l0JyxcbiAgICAnaW4nLFxuICAgICdpbnRlcmZhY2UnLFxuICAgICdpbnRlcm5hbCcsXG4gICAgJ2lzJyxcbiAgICAnbG9jaycsXG4gICAgJ25hbWVzcGFjZScsXG4gICAgJ25ldycsXG4gICAgJ29wZXJhdG9yJyxcbiAgICAnb3V0JyxcbiAgICAnb3ZlcnJpZGUnLFxuICAgICdwYXJhbXMnLFxuICAgICdwcml2YXRlJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAncHVibGljJyxcbiAgICAncmVhZG9ubHknLFxuICAgICdyZWNvcmQnLFxuICAgICdyZWYnLFxuICAgICdyZXR1cm4nLFxuICAgICdzZWFsZWQnLFxuICAgICdzaXplb2YnLFxuICAgICdzdGFja2FsbG9jJyxcbiAgICAnc3RhdGljJyxcbiAgICAnc3RydWN0JyxcbiAgICAnc3dpdGNoJyxcbiAgICAndGhpcycsXG4gICAgJ3Rocm93JyxcbiAgICAndHJ5JyxcbiAgICAndHlwZW9mJyxcbiAgICAndW5jaGVja2VkJyxcbiAgICAndW5zYWZlJyxcbiAgICAndXNpbmcnLFxuICAgICd2aXJ0dWFsJyxcbiAgICAndm9pZCcsXG4gICAgJ3ZvbGF0aWxlJyxcbiAgICAnd2hpbGUnXG4gIF07XG4gIGNvbnN0IENPTlRFWFRVQUxfS0VZV09SRFMgPSBbXG4gICAgJ2FkZCcsXG4gICAgJ2FsaWFzJyxcbiAgICAnYW5kJyxcbiAgICAnYXNjZW5kaW5nJyxcbiAgICAnYXN5bmMnLFxuICAgICdhd2FpdCcsXG4gICAgJ2J5JyxcbiAgICAnZGVzY2VuZGluZycsXG4gICAgJ2VxdWFscycsXG4gICAgJ2Zyb20nLFxuICAgICdnZXQnLFxuICAgICdnbG9iYWwnLFxuICAgICdncm91cCcsXG4gICAgJ2luaXQnLFxuICAgICdpbnRvJyxcbiAgICAnam9pbicsXG4gICAgJ2xldCcsXG4gICAgJ25hbWVvZicsXG4gICAgJ25vdCcsXG4gICAgJ25vdG51bGwnLFxuICAgICdvbicsXG4gICAgJ29yJyxcbiAgICAnb3JkZXJieScsXG4gICAgJ3BhcnRpYWwnLFxuICAgICdyZW1vdmUnLFxuICAgICdzZWxlY3QnLFxuICAgICdzZXQnLFxuICAgICd1bm1hbmFnZWQnLFxuICAgICd2YWx1ZXwwJyxcbiAgICAndmFyJyxcbiAgICAnd2hlbicsXG4gICAgJ3doZXJlJyxcbiAgICAnd2l0aCcsXG4gICAgJ3lpZWxkJ1xuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IE5PUk1BTF9LRVlXT1JEUy5jb25jYXQoQ09OVEVYVFVBTF9LRVlXT1JEUyksXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOX0tFWVdPUkRTLFxuICAgIGxpdGVyYWw6IExJVEVSQUxfS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgVElUTEVfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICBiZWdpbjogJ1thLXpBLVpdKFxcXFwuP1xcXFx3KSonXG4gIH0pO1xuICBjb25zdCBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYigwYlswMVxcJ10rKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XFwnXSt8KFxcXFxiW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKFtlRV1bLStdP1tcXFxcZFxcJ10rKT8pJ1xuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFZFUkJBVElNX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnQFwiJyxcbiAgICBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgVkVSQkFUSU1fU1RSSU5HX05PX0xGID0gaGxqcy5pbmhlcml0KFZFUkJBVElNX1NUUklORywge1xuICAgIGlsbGVnYWw6IC9cXG4vXG4gIH0pO1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC9cXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIGNvbnN0IFNVQlNUX05PX0xGID0gaGxqcy5pbmhlcml0KFNVQlNULCB7XG4gICAgaWxsZWdhbDogL1xcbi9cbiAgfSk7XG4gIGNvbnN0IElOVEVSUE9MQVRFRF9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJFwiLyxcbiAgICBlbmQ6ICdcIicsXG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXHtcXHsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcfVxcfS9cbiAgICAgIH0sXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVF9OT19MRlxuICAgIF1cbiAgfTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFwkQFwiLyxcbiAgICBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXHtcXHsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcfVxcfS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIidcbiAgICAgIH0sXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklOR19OT19MRiA9IGhsanMuaW5oZXJpdChJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLCB7XG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXHtcXHsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcfVxcfS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIidcbiAgICAgIH0sXG4gICAgICBTVUJTVF9OT19MRlxuICAgIF1cbiAgfSk7XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkcsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gIF07XG4gIFNVQlNUX05PX0xGLmNvbnRhaW5zID0gW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkdfTk9fTEYsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkdfTk9fTEYsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwge1xuICAgICAgaWxsZWdhbDogL1xcbi9cbiAgICB9KVxuICBdO1xuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgICBJTlRFUlBPTEFURURfU1RSSU5HLFxuICAgICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBHRU5FUklDX01PRElGSUVSID0ge1xuICAgIGJlZ2luOiBcIjxcIixcbiAgICBlbmQ6IFwiPlwiLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFwiaW4gb3V0XCJcbiAgICAgIH0sXG4gICAgICBUSVRMRV9NT0RFXG4gICAgXVxuICB9O1xuICBjb25zdCBUWVBFX0lERU5UX1JFID0gaGxqcy5JREVOVF9SRSArICcoPCcgKyBobGpzLklERU5UX1JFICsgJyhcXFxccyosXFxcXHMqJyArIGhsanMuSURFTlRfUkUgKyAnKSo+KT8oXFxcXFtcXFxcXSk/JztcbiAgY29uc3QgQVRfSURFTlRJRklFUiA9IHtcbiAgICAvLyBwcmV2ZW50cyBleHByZXNzaW9ucyBsaWtlIGBAY2xhc3NgIGZyb20gaW5jb3JyZWN0IGZsYWdnaW5nXG4gICAgLy8gYGNsYXNzYCBhcyBhIGtleXdvcmRcbiAgICBiZWdpbjogXCJAXCIgKyBobGpzLklERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0MjJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnY3MnLFxuICAgICAgJ2MjJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC86Oi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy8vLycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICcvLy8nLFxuICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiZWdpbjogJzwhLS18LS0+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICc8Lz8nLFxuICAgICAgICAgICAgICAgICAgZW5kOiAnPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgJ21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUlMsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOixdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcIndoZXJlIGNsYXNzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFX01PREUsXG4gICAgICAgICAgR0VORVJJQ19NT0RJRklFUixcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBlbmQ6IC9bezs9XS8sXG4gICAgICAgIGlsbGVnYWw6IC9bXlxcczpdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBUSVRMRV9NT0RFLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdyZWNvcmQnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFRJVExFX01PREUsXG4gICAgICAgICAgR0VORVJJQ19NT0RJRklFUixcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBbQXR0cmlidXRlcyhcIlwiKV1cbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKlxcXFxbJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgICAgICBlbmQ6IC9cIi9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyByZXR1cm4gdGhyb3cgYXdhaXQgZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgVFlQRV9JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKig8Lis+XFxcXHMqKT9cXFxcKCcsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6IC9cXHMqW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLy8gcHJldmVudHMgdGhlc2UgZnJvbSBiZWluZyBoaWdobGlnaHRlZCBgdGl0bGVgXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogRlVOQ1RJT05fTU9ESUZJRVJTLmpvaW4oXCIgXCIpLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccyooPC4rPlxcXFxzKik/XFxcXCgnLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAgICAgIEdFTkVSSUNfTU9ESUZJRVJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIEFUX0lERU5USUZJRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3NoYXJwO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IENTUFxuRGVzY3JpcHRpb246IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRlZmluaXRpb24gaGlnaGxpZ2h0aW5nXG5BdXRob3I6IFRhcmFzIDxveGRlZkBveGRlZi5pbmZvPlxuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DU1BcblxudmltOiB0cz0yIHN3PTIgc3Q9MlxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNzcChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NTUCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnW2EtekEtWl1bYS16QS1aMC05Xy1dKicsXG4gICAgICBrZXl3b3JkOiAnYmFzZS11cmkgY2hpbGQtc3JjIGNvbm5lY3Qtc3JjIGRlZmF1bHQtc3JjIGZvbnQtc3JjIGZvcm0tYWN0aW9uICcgK1xuICAgICAgICAnZnJhbWUtYW5jZXN0b3JzIGZyYW1lLXNyYyBpbWctc3JjIG1lZGlhLXNyYyBvYmplY3Qtc3JjIHBsdWdpbi10eXBlcyAnICtcbiAgICAgICAgJ3JlcG9ydC11cmkgc2FuZGJveCBzY3JpcHQtc3JjIHN0eWxlLXNyYydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiBcIidcIixcbiAgICAgICAgZW5kOiBcIidcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdeQ29udGVudCcsXG4gICAgICAgIGVuZDogJzonLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNzcDtcbiIsCiAgICAiY29uc3QgTU9ERVMgPSAoaGxqcykgPT4ge1xuICByZXR1cm4ge1xuICAgIElNUE9SVEFOVDoge1xuICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgfSxcbiAgICBIRVhDT0xPUjoge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnIyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSknXG4gICAgfSxcbiAgICBBVFRSSUJVVEVfU0VMRUNUT1JfTU9ERToge1xuICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICBiZWdpbjogL1xcWy8sXG4gICAgICBlbmQ6IC9cXF0vLFxuICAgICAgaWxsZWdhbDogJyQnLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICBdXG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgVEFHUyA9IFtcbiAgJ2EnLFxuICAnYWJicicsXG4gICdhZGRyZXNzJyxcbiAgJ2FydGljbGUnLFxuICAnYXNpZGUnLFxuICAnYXVkaW8nLFxuICAnYicsXG4gICdibG9ja3F1b3RlJyxcbiAgJ2JvZHknLFxuICAnYnV0dG9uJyxcbiAgJ2NhbnZhcycsXG4gICdjYXB0aW9uJyxcbiAgJ2NpdGUnLFxuICAnY29kZScsXG4gICdkZCcsXG4gICdkZWwnLFxuICAnZGV0YWlscycsXG4gICdkZm4nLFxuICAnZGl2JyxcbiAgJ2RsJyxcbiAgJ2R0JyxcbiAgJ2VtJyxcbiAgJ2ZpZWxkc2V0JyxcbiAgJ2ZpZ2NhcHRpb24nLFxuICAnZmlndXJlJyxcbiAgJ2Zvb3RlcicsXG4gICdmb3JtJyxcbiAgJ2gxJyxcbiAgJ2gyJyxcbiAgJ2gzJyxcbiAgJ2g0JyxcbiAgJ2g1JyxcbiAgJ2g2JyxcbiAgJ2hlYWRlcicsXG4gICdoZ3JvdXAnLFxuICAnaHRtbCcsXG4gICdpJyxcbiAgJ2lmcmFtZScsXG4gICdpbWcnLFxuICAnaW5wdXQnLFxuICAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsXG4gICdsZWdlbmQnLFxuICAnbGknLFxuICAnbWFpbicsXG4gICdtYXJrJyxcbiAgJ21lbnUnLFxuICAnbmF2JyxcbiAgJ29iamVjdCcsXG4gICdvbCcsXG4gICdwJyxcbiAgJ3EnLFxuICAncXVvdGUnLFxuICAnc2FtcCcsXG4gICdzZWN0aW9uJyxcbiAgJ3NwYW4nLFxuICAnc3Ryb25nJyxcbiAgJ3N1bW1hcnknLFxuICAnc3VwJyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3RleHRhcmVhJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpbWUnLFxuICAndHInLFxuICAndWwnLFxuICAndmFyJyxcbiAgJ3ZpZGVvJ1xuXTtcblxuY29uc3QgTUVESUFfRkVBVFVSRVMgPSBbXG4gICdhbnktaG92ZXInLFxuICAnYW55LXBvaW50ZXInLFxuICAnYXNwZWN0LXJhdGlvJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbG9yLWdhbXV0JyxcbiAgJ2NvbG9yLWluZGV4JyxcbiAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxuICAnZGV2aWNlLWhlaWdodCcsXG4gICdkZXZpY2Utd2lkdGgnLFxuICAnZGlzcGxheS1tb2RlJyxcbiAgJ2ZvcmNlZC1jb2xvcnMnLFxuICAnZ3JpZCcsXG4gICdoZWlnaHQnLFxuICAnaG92ZXInLFxuICAnaW52ZXJ0ZWQtY29sb3JzJyxcbiAgJ21vbm9jaHJvbWUnLFxuICAnb3JpZW50YXRpb24nLFxuICAnb3ZlcmZsb3ctYmxvY2snLFxuICAnb3ZlcmZsb3ctaW5saW5lJyxcbiAgJ3BvaW50ZXInLFxuICAncHJlZmVycy1jb2xvci1zY2hlbWUnLFxuICAncHJlZmVycy1jb250cmFzdCcsXG4gICdwcmVmZXJzLXJlZHVjZWQtbW90aW9uJyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC10cmFuc3BhcmVuY3knLFxuICAncmVzb2x1dGlvbicsXG4gICdzY2FuJyxcbiAgJ3NjcmlwdGluZycsXG4gICd1cGRhdGUnLFxuICAnd2lkdGgnLFxuICAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uP1xuICAnbWluLXdpZHRoJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21heC1oZWlnaHQnXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWNsYXNzZXNcbmNvbnN0IFBTRVVET19DTEFTU0VTID0gW1xuICAnYWN0aXZlJyxcbiAgJ2FueS1saW5rJyxcbiAgJ2JsYW5rJyxcbiAgJ2NoZWNrZWQnLFxuICAnY3VycmVudCcsXG4gICdkZWZhdWx0JyxcbiAgJ2RlZmluZWQnLFxuICAnZGlyJywgLy8gZGlyKClcbiAgJ2Rpc2FibGVkJyxcbiAgJ2Ryb3AnLFxuICAnZW1wdHknLFxuICAnZW5hYmxlZCcsXG4gICdmaXJzdCcsXG4gICdmaXJzdC1jaGlsZCcsXG4gICdmaXJzdC1vZi10eXBlJyxcbiAgJ2Z1bGxzY3JlZW4nLFxuICAnZnV0dXJlJyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAnZm9jdXMtd2l0aGluJyxcbiAgJ2hhcycsIC8vIGhhcygpXG4gICdob3N0JywgLy8gaG9zdCBvciBob3N0KClcbiAgJ2hvc3QtY29udGV4dCcsIC8vIGhvc3QtY29udGV4dCgpXG4gICdob3ZlcicsXG4gICdpbmRldGVybWluYXRlJyxcbiAgJ2luLXJhbmdlJyxcbiAgJ2ludmFsaWQnLFxuICAnaXMnLCAvLyBpcygpXG4gICdsYW5nJywgLy8gbGFuZygpXG4gICdsYXN0LWNoaWxkJyxcbiAgJ2xhc3Qtb2YtdHlwZScsXG4gICdsZWZ0JyxcbiAgJ2xpbmsnLFxuICAnbG9jYWwtbGluaycsXG4gICdub3QnLCAvLyBub3QoKVxuICAnbnRoLWNoaWxkJywgLy8gbnRoLWNoaWxkKClcbiAgJ250aC1jb2wnLCAvLyBudGgtY29sKClcbiAgJ250aC1sYXN0LWNoaWxkJywgLy8gbnRoLWxhc3QtY2hpbGQoKVxuICAnbnRoLWxhc3QtY29sJywgLy8gbnRoLWxhc3QtY29sKClcbiAgJ250aC1sYXN0LW9mLXR5cGUnLCAvL250aC1sYXN0LW9mLXR5cGUoKVxuICAnbnRoLW9mLXR5cGUnLCAvL250aC1vZi10eXBlKClcbiAgJ29ubHktY2hpbGQnLFxuICAnb25seS1vZi10eXBlJyxcbiAgJ29wdGlvbmFsJyxcbiAgJ291dC1vZi1yYW5nZScsXG4gICdwYXN0JyxcbiAgJ3BsYWNlaG9sZGVyLXNob3duJyxcbiAgJ3JlYWQtb25seScsXG4gICdyZWFkLXdyaXRlJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvb3QnLFxuICAnc2NvcGUnLFxuICAndGFyZ2V0JyxcbiAgJ3RhcmdldC13aXRoaW4nLFxuICAndXNlci1pbnZhbGlkJyxcbiAgJ3ZhbGlkJyxcbiAgJ3Zpc2l0ZWQnLFxuICAnd2hlcmUnIC8vIHdoZXJlKClcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tZWxlbWVudHNcbmNvbnN0IFBTRVVET19FTEVNRU5UUyA9IFtcbiAgJ2FmdGVyJyxcbiAgJ2JhY2tkcm9wJyxcbiAgJ2JlZm9yZScsXG4gICdjdWUnLFxuICAnY3VlLXJlZ2lvbicsXG4gICdmaXJzdC1sZXR0ZXInLFxuICAnZmlyc3QtbGluZScsXG4gICdncmFtbWFyLWVycm9yJyxcbiAgJ21hcmtlcicsXG4gICdwYXJ0JyxcbiAgJ3BsYWNlaG9sZGVyJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdzbG90dGVkJyxcbiAgJ3NwZWxsaW5nLWVycm9yJ1xuXTtcblxuY29uc3QgQVRUUklCVVRFUyA9IFtcbiAgJ2FsaWduLWNvbnRlbnQnLFxuICAnYWxpZ24taXRlbXMnLFxuICAnYWxpZ24tc2VsZicsXG4gICdhbmltYXRpb24nLFxuICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgJ2FuaW1hdGlvbi1kaXJlY3Rpb24nLFxuICAnYW5pbWF0aW9uLWR1cmF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsXG4gICdhbmltYXRpb24tbmFtZScsXG4gICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICdhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ2F1dG8nLFxuICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxuICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAnYmFja2dyb3VuZC1zaXplJyxcbiAgJ2JvcmRlcicsXG4gICdib3JkZXItYm90dG9tJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgJ2JvcmRlci1ib3R0b20td2lkdGgnLFxuICAnYm9yZGVyLWNvbGxhcHNlJyxcbiAgJ2JvcmRlci1jb2xvcicsXG4gICdib3JkZXItaW1hZ2UnLFxuICAnYm9yZGVyLWltYWdlLW91dHNldCcsXG4gICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgJ2JvcmRlci1pbWFnZS1zbGljZScsXG4gICdib3JkZXItaW1hZ2Utc291cmNlJyxcbiAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICdib3JkZXItbGVmdCcsXG4gICdib3JkZXItbGVmdC1jb2xvcicsXG4gICdib3JkZXItbGVmdC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCcsXG4gICdib3JkZXItcmFkaXVzJyxcbiAgJ2JvcmRlci1yaWdodCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICdib3JkZXItc3BhY2luZycsXG4gICdib3JkZXItc3R5bGUnLFxuICAnYm9yZGVyLXRvcCcsXG4gICdib3JkZXItdG9wLWNvbG9yJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1zdHlsZScsXG4gICdib3JkZXItdG9wLXdpZHRoJyxcbiAgJ2JvcmRlci13aWR0aCcsXG4gICdib3R0b20nLFxuICAnYm94LWRlY29yYXRpb24tYnJlYWsnLFxuICAnYm94LXNoYWRvdycsXG4gICdib3gtc2l6aW5nJyxcbiAgJ2JyZWFrLWFmdGVyJyxcbiAgJ2JyZWFrLWJlZm9yZScsXG4gICdicmVhay1pbnNpZGUnLFxuICAnY2FwdGlvbi1zaWRlJyxcbiAgJ2NsZWFyJyxcbiAgJ2NsaXAnLFxuICAnY2xpcC1wYXRoJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbHVtbi1jb3VudCcsXG4gICdjb2x1bW4tZmlsbCcsXG4gICdjb2x1bW4tZ2FwJyxcbiAgJ2NvbHVtbi1ydWxlJyxcbiAgJ2NvbHVtbi1ydWxlLWNvbG9yJyxcbiAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgJ2NvbHVtbi1ydWxlLXdpZHRoJyxcbiAgJ2NvbHVtbi1zcGFuJyxcbiAgJ2NvbHVtbi13aWR0aCcsXG4gICdjb2x1bW5zJyxcbiAgJ2NvbnRlbnQnLFxuICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAnY291bnRlci1yZXNldCcsXG4gICdjdXJzb3InLFxuICAnZGlyZWN0aW9uJyxcbiAgJ2Rpc3BsYXknLFxuICAnZW1wdHktY2VsbHMnLFxuICAnZmlsdGVyJyxcbiAgJ2ZsZXgnLFxuICAnZmxleC1iYXNpcycsXG4gICdmbGV4LWRpcmVjdGlvbicsXG4gICdmbGV4LWZsb3cnLFxuICAnZmxleC1ncm93JyxcbiAgJ2ZsZXgtc2hyaW5rJyxcbiAgJ2ZsZXgtd3JhcCcsXG4gICdmbG9hdCcsXG4gICdmb250JyxcbiAgJ2ZvbnQtZGlzcGxheScsXG4gICdmb250LWZhbWlseScsXG4gICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAnZm9udC1rZXJuaW5nJyxcbiAgJ2ZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUnLFxuICAnZm9udC1zaXplJyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAnZm9udC1zbW9vdGhpbmcnLFxuICAnZm9udC1zdHJldGNoJyxcbiAgJ2ZvbnQtc3R5bGUnLFxuICAnZm9udC12YXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudC1saWdhdHVyZXMnLFxuICAnZm9udC12YXJpYXRpb24tc2V0dGluZ3MnLFxuICAnZm9udC13ZWlnaHQnLFxuICAnaGVpZ2h0JyxcbiAgJ2h5cGhlbnMnLFxuICAnaWNvbicsXG4gICdpbWFnZS1vcmllbnRhdGlvbicsXG4gICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICdpbWUtbW9kZScsXG4gICdpbmhlcml0JyxcbiAgJ2luaXRpYWwnLFxuICAnanVzdGlmeS1jb250ZW50JyxcbiAgJ2xlZnQnLFxuICAnbGV0dGVyLXNwYWNpbmcnLFxuICAnbGluZS1oZWlnaHQnLFxuICAnbGlzdC1zdHlsZScsXG4gICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgJ2xpc3Qtc3R5bGUtcG9zaXRpb24nLFxuICAnbGlzdC1zdHlsZS10eXBlJyxcbiAgJ21hcmdpbicsXG4gICdtYXJnaW4tYm90dG9tJyxcbiAgJ21hcmdpbi1sZWZ0JyxcbiAgJ21hcmdpbi1yaWdodCcsXG4gICdtYXJnaW4tdG9wJyxcbiAgJ21hcmtzJyxcbiAgJ21hc2snLFxuICAnbWF4LWhlaWdodCcsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWhlaWdodCcsXG4gICdtaW4td2lkdGgnLFxuICAnbmF2LWRvd24nLFxuICAnbmF2LWluZGV4JyxcbiAgJ25hdi1sZWZ0JyxcbiAgJ25hdi1yaWdodCcsXG4gICduYXYtdXAnLFxuICAnbm9uZScsXG4gICdub3JtYWwnLFxuICAnb2JqZWN0LWZpdCcsXG4gICdvYmplY3QtcG9zaXRpb24nLFxuICAnb3BhY2l0eScsXG4gICdvcmRlcicsXG4gICdvcnBoYW5zJyxcbiAgJ291dGxpbmUnLFxuICAnb3V0bGluZS1jb2xvcicsXG4gICdvdXRsaW5lLW9mZnNldCcsXG4gICdvdXRsaW5lLXN0eWxlJyxcbiAgJ291dGxpbmUtd2lkdGgnLFxuICAnb3ZlcmZsb3cnLFxuICAnb3ZlcmZsb3ctd3JhcCcsXG4gICdvdmVyZmxvdy14JyxcbiAgJ292ZXJmbG93LXknLFxuICAncGFkZGluZycsXG4gICdwYWRkaW5nLWJvdHRvbScsXG4gICdwYWRkaW5nLWxlZnQnLFxuICAncGFkZGluZy1yaWdodCcsXG4gICdwYWRkaW5nLXRvcCcsXG4gICdwYWdlLWJyZWFrLWFmdGVyJyxcbiAgJ3BhZ2UtYnJlYWstYmVmb3JlJyxcbiAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgJ3BlcnNwZWN0aXZlJyxcbiAgJ3BlcnNwZWN0aXZlLW9yaWdpbicsXG4gICdwb2ludGVyLWV2ZW50cycsXG4gICdwb3NpdGlvbicsXG4gICdxdW90ZXMnLFxuICAncmVzaXplJyxcbiAgJ3JpZ2h0JyxcbiAgJ3NyYycsIC8vIEBmb250LWZhY2VcbiAgJ3RhYi1zaXplJyxcbiAgJ3RhYmxlLWxheW91dCcsXG4gICd0ZXh0LWFsaWduJyxcbiAgJ3RleHQtYWxpZ24tbGFzdCcsXG4gICd0ZXh0LWRlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uLWNvbG9yJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1saW5lJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICd0ZXh0LWluZGVudCcsXG4gICd0ZXh0LW92ZXJmbG93JyxcbiAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgJ3RleHQtc2hhZG93JyxcbiAgJ3RleHQtdHJhbnNmb3JtJyxcbiAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgJ3RvcCcsXG4gICd0cmFuc2Zvcm0nLFxuICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICd0cmFuc2Zvcm0tc3R5bGUnLFxuICAndHJhbnNpdGlvbicsXG4gICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICd1bmljb2RlLWJpZGknLFxuICAndmVydGljYWwtYWxpZ24nLFxuICAndmlzaWJpbGl0eScsXG4gICd3aGl0ZS1zcGFjZScsXG4gICd3aWRvd3MnLFxuICAnd2lkdGgnLFxuICAnd29yZC1icmVhaycsXG4gICd3b3JkLXNwYWNpbmcnLFxuICAnd29yZC13cmFwJyxcbiAgJ3otaW5kZXgnXG4gIC8vIHJldmVyc2UgbWFrZXMgc3VyZSBsb25nZXIgYXR0cmlidXRlcyBgZm9udC13ZWlnaHRgIGFyZSBtYXRjaGVkIGZ1bGx5XG4gIC8vIGluc3RlYWQgb2YgZ2V0dGluZyBmYWxzZSBwb3NpdGl2ZXMgb24gc2F5IGBmb250YFxuXS5yZXZlcnNlKCk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBDU1NcbkNhdGVnb3J5OiBjb21tb24sIGNzc1xuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY3NzKGhsanMpIHtcbiAgY29uc3QgbW9kZXMgPSBNT0RFUyhobGpzKTtcbiAgY29uc3QgRlVOQ1RJT05fRElTUEFUQ0ggPSB7XG4gICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgYmVnaW46IC9bXFx3LV0rKD89XFwoKS9cbiAgfTtcbiAgY29uc3QgVkVORE9SX1BSRUZJWCA9IHtcbiAgICBiZWdpbjogLy0od2Via2l0fG1venxtc3xvKS0oPz1bYS16XSkvXG4gIH07XG4gIGNvbnN0IEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCI7XG4gIGNvbnN0IEFUX1BST1BFUlRZX1JFID0gL0AtP1xcd1tcXHddKigtXFx3KykqLzsgLy8gQC13ZWJraXQta2V5ZnJhbWVzXG4gIGNvbnN0IElERU5UX1JFID0gJ1thLXpBLVotXVthLXpBLVowLTlfLV0qJztcbiAgY29uc3QgU1RSSU5HUyA9IFtcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NTUycsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvWz18J1xcJF0vLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXlmcmFtZVBvc2l0aW9uOiBcImZyb20gdG9cIlxuICAgIH0sXG4gICAgY2xhc3NOYW1lQWxpYXNlczoge1xuICAgICAgLy8gZm9yIHZpc3VhbCBjb250aW51aXR5IHdpdGggYHRhZyB7fWAgYW5kIGJlY2F1c2Ugd2VcbiAgICAgIC8vIGRvbid0IGhhdmUgYSBncmVhdCBjbGFzcyBmb3IgdGhpcz9cbiAgICAgIGtleWZyYW1lUG9zaXRpb246IFwic2VsZWN0b3ItdGFnXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgVkVORE9SX1BSRUZJWCxcbiAgICAgIC8vIHRvIHJlY29nbml6ZSBrZXlmcmFtZSA0MCUgZXRjIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBvdXJcbiAgICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZSBtb2RlXG4gICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLFxuICAgICAgICBiZWdpbjogLyNbQS1aYS16MC05Xy1dKy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLFxuICAgICAgICBiZWdpbjogJ1xcXFwuJyArIElERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBtb2Rlcy5BVFRSSUJVVEVfU0VMRUNUT1JfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJzooJyArIFBTRVVET19DTEFTU0VTLmpvaW4oJ3wnKSArICcpJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc6OignICsgUFNFVURPX0VMRU1FTlRTLmpvaW4oJ3wnKSArICcpJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIHdlIG1heSBhY3R1YWxseSBuZWVkIHRoaXMgKDEyLzIwMjApXG4gICAgICAvLyB7IC8vIHBzZXVkby1zZWxlY3RvciBwYXJhbXNcbiAgICAgIC8vICAgYmVnaW46IC9cXCgvLFxuICAgICAgLy8gICBlbmQ6IC9cXCkvLFxuICAgICAgLy8gICBjb250YWluczogWyBobGpzLkNTU19OVU1CRVJfTU9ERSBdXG4gICAgICAvLyB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBBVFRSSUJVVEVTLmpvaW4oJ3wnKSArICcpXFxcXGInXG4gICAgICB9LFxuICAgICAgLy8gYXR0cmlidXRlIHZhbHVlc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJzonLFxuICAgICAgICBlbmQ6ICdbO31dJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBtb2Rlcy5IRVhDT0xPUixcbiAgICAgICAgICBtb2Rlcy5JTVBPUlRBTlQsXG4gICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAgLi4uU1RSSU5HUyxcbiAgICAgICAgICAvLyBuZWVkZWQgdG8gaGlnaGxpZ2h0IHRoZXNlIGFzIHN0cmluZ3MgYW5kIHRvIGF2b2lkIGlzc3VlcyB3aXRoXG4gICAgICAgICAgLy8gaWxsZWdhbCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgaW5zaWRlIHVybHMgdGhhdCB3b3VsZCB0aWdnZXIgdGhlXG4gICAgICAgICAgLy8gbGFuZ3VhZ2VzIGlsbGVnYWwgc3RhY2tcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLyh1cmx8ZGF0YS11cmkpXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsIC8vIGZyb20ga2V5d29yZHNcbiAgICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAgIGJ1aWx0X2luOiBcInVybCBkYXRhLXVyaVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAvLyBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gYClgIGFzIGluIGB1cmwoKWAgd2lsbCBiZSB0aGUgc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBvZiBhIHN0cmluZywgd2hpY2ggZW5kcyB3aXRoIGApYCAoZnJvbSB0aGUgcGFyZW50IG1vZGUpXG4gICAgICAgICAgICAgICAgYmVnaW46IC9bXildLyxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEZVTkNUSU9OX0RJU1BBVENIXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBsb29rYWhlYWQoL0AvKSxcbiAgICAgICAgZW5kOiAnW3s7XScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgaWxsZWdhbDogLzovLCAvLyBicmVhayBvbiBMZXNzIHZhcmlhYmxlcyBAdmFyOiAuLi5cbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiBBVF9QUk9QRVJUWV9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHMvLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgICAgJHBhdHRlcm46IC9bYS16LV0rLyxcbiAgICAgICAgICAgICAga2V5d29yZDogQVRfTU9ESUZJRVJTLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGU6IE1FRElBX0ZFQVRVUkVTLmpvaW4oXCIgXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvW2Etei1dKyg/PTopLyxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLi4uU1RSSU5HUyxcbiAgICAgICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZycsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJylcXFxcYidcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3NzO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IERcbkF1dGhvcjogQWxla3NhbmRhciBSdXppY2ljIDxhbGVrc2FuZGFyQHJ1emljaWMuaW5mbz5cbkRlc2NyaXB0aW9uOiBEIGlzIGEgbGFuZ3VhZ2Ugd2l0aCBDLWxpa2Ugc3ludGF4IGFuZCBzdGF0aWMgdHlwaW5nLiBJdCBwcmFnbWF0aWNhbGx5IGNvbWJpbmVzIGVmZmljaWVuY3ksIGNvbnRyb2wsIGFuZCBtb2RlbGluZyBwb3dlciwgd2l0aCBzYWZldHkgYW5kIHByb2dyYW1tZXIgcHJvZHVjdGl2aXR5LlxuVmVyc2lvbjogMS4wYVxuV2Vic2l0ZTogaHR0cHM6Ly9kbGFuZy5vcmdcbkRhdGU6IDIwMTItMDQtMDhcbiovXG5cbi8qKlxuICogS25vd24gaXNzdWVzOlxuICpcbiAqIC0gaW52YWxpZCBoZXggc3RyaW5nIGxpdGVyYWxzIHdpbGwgYmUgcmVjb2duaXplZCBhcyBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nc1xuICogICBidXQgJ3gnIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RyaW5nIHdpbGwgbm90IGJlIG1hdGNoZWRcbiAqXG4gKiAtIGRlbGltaXRlZCBzdHJpbmcgbGl0ZXJhbHMgYXJlIG5vdCBjaGVja2VkIGZvciBtYXRjaGluZyBlbmQgZGVsaW1pdGVyXG4gKiAgIChub3QgcG9zc2libGUgdG8gZG8gd2l0aCBqcyByZWdleHApXG4gKlxuICogLSBjb250ZW50IG9mIHRva2VuIHN0cmluZyBpcyBjb2xvcmVkIGFzIGEgc3RyaW5nIChpLmUuIG5vIGtleXdvcmQgY29sb3JpbmcgaW5zaWRlIGEgdG9rZW4gc3RyaW5nKVxuICogICBhbHNvLCBjb250ZW50IG9mIHRva2VuIHN0cmluZyBpcyBub3QgdmFsaWRhdGVkIHRvIGNvbnRhaW4gb25seSB2YWxpZCBEIHRva2Vuc1xuICpcbiAqIC0gc3BlY2lhbCB0b2tlbiBzZXF1ZW5jZSBydWxlIGlzIG5vdCBzdHJpY3RseSBmb2xsb3dpbmcgRCBncmFtbWFyIChhbnl0aGluZyBmb2xsb3dpbmcgI2xpbmVcbiAqICAgdXAgdG8gdGhlIGVuZCBvZiBsaW5lIGlzIG1hdGNoZWQgYXMgc3BlY2lhbCB0b2tlbiBzZXF1ZW5jZSlcbiAqL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZChobGpzKSB7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBrZXl3b3Jkc1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgY29uc3QgRF9LRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmQ6XG4gICAgICAnYWJzdHJhY3QgYWxpYXMgYWxpZ24gYXNtIGFzc2VydCBhdXRvIGJvZHkgYnJlYWsgYnl0ZSBjYXNlIGNhc3QgY2F0Y2ggY2xhc3MgJyArXG4gICAgICAnY29uc3QgY29udGludWUgZGVidWcgZGVmYXVsdCBkZWxldGUgZGVwcmVjYXRlZCBkbyBlbHNlIGVudW0gZXhwb3J0IGV4dGVybiBmaW5hbCAnICtcbiAgICAgICdmaW5hbGx5IGZvciBmb3JlYWNoIGZvcmVhY2hfcmV2ZXJzZXwxMCBnb3RvIGlmIGltbXV0YWJsZSBpbXBvcnQgaW4gaW5vdXQgaW50ICcgK1xuICAgICAgJ2ludGVyZmFjZSBpbnZhcmlhbnQgaXMgbGF6eSBtYWNybyBtaXhpbiBtb2R1bGUgbmV3IG5vdGhyb3cgb3V0IG92ZXJyaWRlIHBhY2thZ2UgJyArXG4gICAgICAncHJhZ21hIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBwdXJlIHJlZiByZXR1cm4gc2NvcGUgc2hhcmVkIHN0YXRpYyBzdHJ1Y3QgJyArXG4gICAgICAnc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0ZW1wbGF0ZSB0aGlzIHRocm93IHRyeSB0eXBlZGVmIHR5cGVpZCB0eXBlb2YgdW5pb24gJyArXG4gICAgICAndW5pdHRlc3QgdmVyc2lvbiB2b2lkIHZvbGF0aWxlIHdoaWxlIHdpdGggX19GSUxFX18gX19MSU5FX18gX19nc2hhcmVkfDEwICcgK1xuICAgICAgJ19fdGhyZWFkIF9fdHJhaXRzIF9fREFURV9fIF9fRU9GX18gX19USU1FX18gX19USU1FU1RBTVBfXyBfX1ZFTkRPUl9fIF9fVkVSU0lPTl9fJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdib29sIGNkb3VibGUgY2VudCBjZmxvYXQgY2hhciBjcmVhbCBkY2hhciBkZWxlZ2F0ZSBkb3VibGUgZHN0cmluZyBmbG9hdCBmdW5jdGlvbiAnICtcbiAgICAgICdpZG91YmxlIGlmbG9hdCBpcmVhbCBsb25nIHJlYWwgc2hvcnQgc3RyaW5nIHVieXRlIHVjZW50IHVpbnQgdWxvbmcgdXNob3J0IHdjaGFyICcgK1xuICAgICAgJ3dzdHJpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAnZmFsc2UgbnVsbCB0cnVlJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgbGl0ZXJhbCByZWdleHBzXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBjb25zdCBkZWNpbWFsX2ludGVnZXJfcmUgPSAnKDB8WzEtOV1bXFxcXGRfXSopJztcbiAgY29uc3QgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlID0gJygwfFsxLTldW1xcXFxkX10qfFxcXFxkW1xcXFxkX10qfFtcXFxcZF9dKz9cXFxcZCknO1xuICBjb25zdCBiaW5hcnlfaW50ZWdlcl9yZSA9ICcwW2JCXVswMV9dKyc7XG4gIGNvbnN0IGhleGFkZWNpbWFsX2RpZ2l0c19yZSA9ICcoW1xcXFxkYS1mQS1GXVtcXFxcZGEtZkEtRl9dKnxfW1xcXFxkYS1mQS1GXVtcXFxcZGEtZkEtRl9dKiknO1xuICBjb25zdCBoZXhhZGVjaW1hbF9pbnRlZ2VyX3JlID0gJzBbeFhdJyArIGhleGFkZWNpbWFsX2RpZ2l0c19yZTtcblxuICBjb25zdCBkZWNpbWFsX2V4cG9uZW50X3JlID0gJyhbZUVdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknO1xuICBjb25zdCBkZWNpbWFsX2Zsb2F0X3JlID0gJygnICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyhcXFxcLlxcXFxkKnwnICsgZGVjaW1hbF9leHBvbmVudF9yZSArICcpfCcgK1xuICAgICAgICAgICAgICAgICdcXFxcZCtcXFxcLicgKyBkZWNpbWFsX2ludGVnZXJfbm9zdXNfcmUgKyAnfCcgK1xuICAgICAgICAgICAgICAgICdcXFxcLicgKyBkZWNpbWFsX2ludGVnZXJfcmUgKyBkZWNpbWFsX2V4cG9uZW50X3JlICsgJz8nICtcbiAgICAgICAgICAgICAgJyknO1xuICBjb25zdCBoZXhhZGVjaW1hbF9mbG9hdF9yZSA9ICcoMFt4WF0oJyArXG4gICAgICAgICAgICAgICAgICBoZXhhZGVjaW1hbF9kaWdpdHNfcmUgKyAnXFxcXC4nICsgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICsgJ3wnICtcbiAgICAgICAgICAgICAgICAgICdcXFxcLj8nICsgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICtcbiAgICAgICAgICAgICAgICAgJylbcFBdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknO1xuXG4gIGNvbnN0IGludGVnZXJfcmUgPSAnKCcgK1xuICAgICAgZGVjaW1hbF9pbnRlZ2VyX3JlICsgJ3wnICtcbiAgICAgIGJpbmFyeV9pbnRlZ2VyX3JlICsgJ3wnICtcbiAgICAgICBoZXhhZGVjaW1hbF9pbnRlZ2VyX3JlICtcbiAgICAnKSc7XG5cbiAgY29uc3QgZmxvYXRfcmUgPSAnKCcgK1xuICAgICAgaGV4YWRlY2ltYWxfZmxvYXRfcmUgKyAnfCcgK1xuICAgICAgZGVjaW1hbF9mbG9hdF9yZSArXG4gICAgJyknO1xuXG4gIC8qKlxuICAgKiBFc2NhcGUgc2VxdWVuY2Ugc3VwcG9ydGVkIGluIEQgc3RyaW5nIGFuZCBjaGFyYWN0ZXIgbGl0ZXJhbHNcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIGNvbnN0IGVzY2FwZV9zZXF1ZW5jZV9yZSA9ICdcXFxcXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1tcXCdcIlxcXFw/XFxcXFxcXFxhYmZucnR2XXwnICsgLy8gY29tbW9uIGVzY2FwZXNcbiAgICAgICAgICAgICAgJ3VbXFxcXGRBLUZhLWZdezR9fCcgKyAvLyBmb3VyIGhleCBkaWdpdCB1bmljb2RlIGNvZGVwb2ludFxuICAgICAgICAgICAgICAnWzAtN117MSwzfXwnICsgLy8gb25lIHRvIHRocmVlIG9jdGFsIGRpZ2l0IGFzY2lpIGNoYXIgY29kZVxuICAgICAgICAgICAgICAneFtcXFxcZEEtRmEtZl17Mn18JyArIC8vIHR3byBoZXggZGlnaXQgYXNjaWkgY2hhciBjb2RlXG4gICAgICAgICAgICAgICdVW1xcXFxkQS1GYS1mXXs4fScgKyAvLyBlaWdodCBoZXggZGlnaXQgdW5pY29kZSBjb2RlcG9pbnRcbiAgICAgICAgICAgICAgJyl8JyArXG4gICAgICAgICAgICAgICcmW2EtekEtWlxcXFxkXXsyLH07JzsgLy8gbmFtZWQgY2hhcmFjdGVyIGVudGl0eVxuXG4gIC8qKlxuICAgKiBEIGludGVnZXIgbnVtYmVyIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBjb25zdCBEX0lOVEVHRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnXFxcXGInICsgaW50ZWdlcl9yZSArICcoTHx1fFV8THV8TFV8dUx8VUwpPycsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIFtEX0ZMT0FUX01PREUgZGVzY3JpcHRpb25dXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBjb25zdCBEX0ZMT0FUX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiKCcgK1xuICAgICAgICBmbG9hdF9yZSArICcoW2ZGXXxMfGl8W2ZGXWl8TGkpP3wnICtcbiAgICAgICAgaW50ZWdlcl9yZSArICcoaXxbZkZdaXxMaSknICtcbiAgICAgICcpJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogRCBjaGFyYWN0ZXIgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgY29uc3QgRF9DSEFSQUNURVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnKCcgKyBlc2NhcGVfc2VxdWVuY2VfcmUgKyAnfC4pJyxcbiAgICBlbmQ6ICdcXCcnLFxuICAgIGlsbGVnYWw6ICcuJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIHN0cmluZyBlc2NhcGUgc2VxdWVuY2VcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGNvbnN0IERfRVNDQVBFX1NFUVVFTkNFID0ge1xuICAgIGJlZ2luOiBlc2NhcGVfc2VxdWVuY2VfcmUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgZG91YmxlIHF1b3RlZCBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgY29uc3QgRF9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbRF9FU0NBUEVfU0VRVUVOQ0VdLFxuICAgIGVuZDogJ1wiW2N3ZF0/J1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIHd5c2l3eWcgYW5kIGRlbGltaXRlZCBzdHJpbmcgbGl0ZXJhbHNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGNvbnN0IERfV1lTSVdZR19ERUxJTUlURURfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1tycV1cIicsXG4gICAgZW5kOiAnXCJbY3dkXT8nLFxuICAgIHJlbGV2YW5jZTogNVxuICB9O1xuXG4gIC8qKlxuICAgKiBEIGFsdGVybmF0ZSB3eXNpd3lnIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBjb25zdCBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgW2N3ZF0/J1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIGhleGFkZWNpbWFsIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBjb25zdCBEX0hFWF9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAneFwiW1xcXFxkYS1mQS1GXFxcXHNcXFxcblxcXFxyXSpcIltjd2RdPycsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuXG4gIC8qKlxuICAgKiBEIGRlbGltaXRlZCBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgY29uc3QgRF9UT0tFTl9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAncVwiXFxcXHsnLFxuICAgIGVuZDogJ1xcXFx9XCInXG4gIH07XG5cbiAgLyoqXG4gICAqIEhhc2hiYW5nIHN1cHBvcnRcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGNvbnN0IERfSEFTSEJBTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3BlY2lhbCB0b2tlbiBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgY29uc3QgRF9TUEVDSUFMX1RPS0VOX1NFUVVFTkNFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjKGxpbmUpJyxcbiAgICBlbmQ6ICckJyxcbiAgICByZWxldmFuY2U6IDVcbiAgfTtcblxuICAvKipcbiAgICogRCBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBjb25zdCBEX0FUVFJJQlVURV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnQFthLXpBLVpfXVthLXpBLVpfXFxcXGRdKidcbiAgfTtcblxuICAvKipcbiAgICogRCBuZXN0aW5nIGNvbW1lbnRcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGNvbnN0IERfTkVTVElOR19DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoXG4gICAgJ1xcXFwvXFxcXCsnLFxuICAgICdcXFxcK1xcXFwvJyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ10sXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0QnLFxuICAgIGtleXdvcmRzOiBEX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgRF9ORVNUSU5HX0NPTU1FTlRfTU9ERSxcbiAgICAgIERfSEVYX1NUUklOR19NT0RFLFxuICAgICAgRF9TVFJJTkdfTU9ERSxcbiAgICAgIERfV1lTSVdZR19ERUxJTUlURURfU1RSSU5HX01PREUsXG4gICAgICBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFLFxuICAgICAgRF9UT0tFTl9TVFJJTkdfTU9ERSxcbiAgICAgIERfRkxPQVRfTU9ERSxcbiAgICAgIERfSU5URUdFUl9NT0RFLFxuICAgICAgRF9DSEFSQUNURVJfTU9ERSxcbiAgICAgIERfSEFTSEJBTkdfTU9ERSxcbiAgICAgIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFLFxuICAgICAgRF9BVFRSSUJVVEVfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBNYXJrZG93blxuUmVxdWlyZXM6IHhtbC5qc1xuQXV0aG9yOiBKb2huIENyZXBlenppIDxqb2huLmNyZXBlenppQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duL1xuQ2F0ZWdvcnk6IGNvbW1vbiwgbWFya3VwXG4qL1xuXG5mdW5jdGlvbiBtYXJrZG93bihobGpzKSB7XG4gIGNvbnN0IElOTElORV9IVE1MID0ge1xuICAgIGJlZ2luOiAvPFxcLz9bQS1aYS16X10vLFxuICAgIGVuZDogJz4nLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgSE9SSVpPTlRBTF9SVUxFID0ge1xuICAgIGJlZ2luOiAnXlstXFxcXCpdezMsfScsXG4gICAgZW5kOiAnJCdcbiAgfTtcbiAgY29uc3QgQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdjb2RlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gVE9ETzogZml4IHRvIGFsbG93IHRoZXNlIHRvIHdvcmsgd2l0aCBzdWJsYW5ndWFnZSBhbHNvXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKGB7Myx9KVteYF0oLnxcXFxcbikqP1xcXFwxYCpbIF0qJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcofnszLH0pW15+XSgufFxcXFxuKSo/XFxcXDF+KlsgXSonXG4gICAgICB9LFxuICAgICAgLy8gbmVlZGVkIHRvIGFsbG93IG1hcmtkb3duIGFzIGEgc3VibGFuZ3VhZ2UgdG8gd29ya1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ2BgYCcsXG4gICAgICAgIGVuZDogJ2BgYCtbIF0qJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnfn5+JyxcbiAgICAgICAgZW5kOiAnfn5+K1sgXSokJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdgLis/YCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKD89XiggezR9fFxcXFx0KSknLFxuICAgICAgICAvLyB1c2UgY29udGFpbnMgdG8gZ29iYmxlIHVwIG11bHRpcGxlIGxpbmVzIHRvIGFsbG93IHRoZSBibG9jayB0byBiZSB3aGF0ZXZlciBzaXplXG4gICAgICAgIC8vIGJ1dCBvbmx5IGhhdmUgYSBzaW5nbGUgb3Blbi9jbG9zZSB0YWcgdnMgb25lIHBlciBsaW5lXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeKCB7NH18XFxcXHQpJyxcbiAgICAgICAgICAgIGVuZDogJyhcXFxcbikkJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBMSVNUID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgYmVnaW46ICdeWyBcXHRdKihbKistXXwoXFxcXGQrXFxcXC4pKSg/PVxcXFxzKyknLFxuICAgIGVuZDogJ1xcXFxzKycsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuICBjb25zdCBMSU5LX1JFRkVSRU5DRSA9IHtcbiAgICBiZWdpbjogL15cXFtbXlxcbl0rXFxdOi8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgICBlbmQ6IC9cXF0vLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpbmsnLFxuICAgICAgICBiZWdpbjogLzpcXHMqLyxcbiAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgVVJMX1NDSEVNRSA9IC9bQS1aYS16XVtBLVphLXowLTkrLi1dKi87XG4gIGNvbnN0IExJTksgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIHRvbyBtdWNoIGxpa2UgbmVzdGVkIGFycmF5IGFjY2VzcyBpbiBzbyBtYW55IGxhbmd1YWdlc1xuICAgICAgLy8gdG8gaGF2ZSBhbnkgcmVhbCByZWxldmFuY2VcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsuKz9cXF1cXFsuKj9cXF0vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBwb3B1bGFyIGludGVybmV0IFVSTHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsuKz9cXF1cXCgoKGRhdGF8amF2YXNjcmlwdHxtYWlsdG8pOnwoPzpodHRwfGZ0cClzPzpcXC9cXC8pLio/XFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogY29uY2F0KC9cXFsuKz9cXF1cXCgvLCBVUkxfU0NIRU1FLCAvOlxcL1xcLy4qP1xcKS8pLFxuICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgIH0sXG4gICAgICAvLyByZWxhdGl2ZSB1cmxzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLis/XFxdXFwoWy4vPyYjXS4qP1xcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMVxuICAgICAgfSxcbiAgICAgIC8vIHdoYXRldmVyIGVsc2UsIGxvd2VyIHJlbGV2YW5jZSAobWlnaHQgbm90IGJlIGEgbGluayBhdCBhbGwpXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLis/XFxdXFwoLio/XFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiAnXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaW5rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXCgnLFxuICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQk9MRCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJvbmcnLFxuICAgIGNvbnRhaW5zOiBbXSwgLy8gZGVmaW5lZCBsYXRlclxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvX3syfS8sXG4gICAgICAgIGVuZDogL197Mn0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKnsyfS8sXG4gICAgICAgIGVuZDogL1xcKnsyfS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IElUQUxJQyA9IHtcbiAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgY29udGFpbnM6IFtdLCAvLyBkZWZpbmVkIGxhdGVyXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCooPyFcXCopLyxcbiAgICAgICAgZW5kOiAvXFwqL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9fKD8hXykvLFxuICAgICAgICBlbmQ6IC9fLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBCT0xELmNvbnRhaW5zLnB1c2goSVRBTElDKTtcbiAgSVRBTElDLmNvbnRhaW5zLnB1c2goQk9MRCk7XG5cbiAgbGV0IENPTlRBSU5BQkxFID0gW1xuICAgIElOTElORV9IVE1MLFxuICAgIExJTktcbiAgXTtcblxuICBCT0xELmNvbnRhaW5zID0gQk9MRC5jb250YWlucy5jb25jYXQoQ09OVEFJTkFCTEUpO1xuICBJVEFMSUMuY29udGFpbnMgPSBJVEFMSUMuY29udGFpbnMuY29uY2F0KENPTlRBSU5BQkxFKTtcblxuICBDT05UQUlOQUJMRSA9IENPTlRBSU5BQkxFLmNvbmNhdChCT0xELCBJVEFMSUMpO1xuXG4gIGNvbnN0IEhFQURFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ14jezEsNn0nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IENPTlRBSU5BQkxFXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyg/PV4uKz9cXFxcbls9LV17Mix9JCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXls9LV0qJCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXicsXG4gICAgICAgICAgICBlbmQ6IFwiXFxcXG5cIixcbiAgICAgICAgICAgIGNvbnRhaW5zOiBDT05UQUlOQUJMRVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBCTE9DS1FVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3F1b3RlJyxcbiAgICBiZWdpbjogJ14+XFxcXHMrJyxcbiAgICBjb250YWluczogQ09OVEFJTkFCTEUsXG4gICAgZW5kOiAnJCdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNYXJrZG93bicsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ21kJyxcbiAgICAgICdta2Rvd24nLFxuICAgICAgJ21rZCdcbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBIRUFERVIsXG4gICAgICBJTkxJTkVfSFRNTCxcbiAgICAgIExJU1QsXG4gICAgICBCT0xELFxuICAgICAgSVRBTElDLFxuICAgICAgQkxPQ0tRVU9URSxcbiAgICAgIENPREUsXG4gICAgICBIT1JJWk9OVEFMX1JVTEUsXG4gICAgICBMSU5LLFxuICAgICAgTElOS19SRUZFUkVOQ0VcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFya2Rvd247XG4iLAogICAgIi8qXG5MYW5ndWFnZTogRGFydFxuUmVxdWlyZXM6IG1hcmtkb3duLmpzXG5BdXRob3I6IE1heGltIERpa3VuIDxkaWttYXhAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IERhcnQgYSBtb2Rlcm4sIG9iamVjdC1vcmllbnRlZCBsYW5ndWFnZSBkZXZlbG9wZWQgYnkgR29vZ2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL1xuV2Vic2l0ZTogaHR0cHM6Ly9kYXJ0LmRldlxuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGRhcnQoaGxqcykge1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFt7XG4gICAgICBiZWdpbjogJ1xcXFwkW0EtWmEtejAtOV9dKydcbiAgICB9XVxuICB9O1xuXG4gIGNvbnN0IEJSQUNFRF9TVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFt7XG4gICAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgICBlbmQ6IC9cXH0vXG4gICAgfV0sXG4gICAga2V5d29yZHM6ICd0cnVlIGZhbHNlIG51bGwgdGhpcyBpcyBuZXcgc3VwZXInXG4gIH07XG5cbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXFwnXFwnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnXFwnXFwnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgU1VCU1QsXG4gICAgICAgICAgQlJBQ0VEX1NVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgU1VCU1QsXG4gICAgICAgICAgQlJBQ0VEX1NVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgU1VCU1QsXG4gICAgICAgICAgQlJBQ0VEX1NVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFNVQlNULFxuICAgICAgICAgIEJSQUNFRF9TVUJTVFxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBCUkFDRURfU1VCU1QuY29udGFpbnMgPSBbXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgIFNUUklOR1xuICBdO1xuXG4gIGNvbnN0IEJVSUxUX0lOX1RZUEVTID0gW1xuICAgIC8vIGRhcnQ6Y29yZVxuICAgICdDb21wYXJhYmxlJyxcbiAgICAnRGF0ZVRpbWUnLFxuICAgICdEdXJhdGlvbicsXG4gICAgJ0Z1bmN0aW9uJyxcbiAgICAnSXRlcmFibGUnLFxuICAgICdJdGVyYXRvcicsXG4gICAgJ0xpc3QnLFxuICAgICdNYXAnLFxuICAgICdNYXRjaCcsXG4gICAgJ09iamVjdCcsXG4gICAgJ1BhdHRlcm4nLFxuICAgICdSZWdFeHAnLFxuICAgICdTZXQnLFxuICAgICdTdG9wd2F0Y2gnLFxuICAgICdTdHJpbmcnLFxuICAgICdTdHJpbmdCdWZmZXInLFxuICAgICdTdHJpbmdTaW5rJyxcbiAgICAnU3ltYm9sJyxcbiAgICAnVHlwZScsXG4gICAgJ1VyaScsXG4gICAgJ2Jvb2wnLFxuICAgICdkb3VibGUnLFxuICAgICdpbnQnLFxuICAgICdudW0nLFxuICAgIC8vIGRhcnQ6aHRtbFxuICAgICdFbGVtZW50JyxcbiAgICAnRWxlbWVudExpc3QnXG4gIF07XG4gIGNvbnN0IE5VTExBQkxFX0JVSUxUX0lOX1RZUEVTID0gQlVJTFRfSU5fVFlQRVMubWFwKChlKSA9PiBgJHtlfT9gKTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnYWJzdHJhY3QgYXMgYXNzZXJ0IGFzeW5jIGF3YWl0IGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY29uc3QgY29udGludWUgY292YXJpYW50IGRlZmF1bHQgZGVmZXJyZWQgZG8gJyArXG4gICAgICAnZHluYW1pYyBlbHNlIGVudW0gZXhwb3J0IGV4dGVuZHMgZXh0ZW5zaW9uIGV4dGVybmFsIGZhY3RvcnkgZmFsc2UgZmluYWwgZmluYWxseSBmb3IgRnVuY3Rpb24gZ2V0IGhpZGUgaWYgJyArXG4gICAgICAnaW1wbGVtZW50cyBpbXBvcnQgaW4gaW5mZXJmYWNlIGlzIGxhdGUgbGlicmFyeSBtaXhpbiBuZXcgbnVsbCBvbiBvcGVyYXRvciBwYXJ0IHJlcXVpcmVkIHJldGhyb3cgcmV0dXJuIHNldCAnICtcbiAgICAgICdzaG93IHN0YXRpYyBzdXBlciBzd2l0Y2ggc3luYyB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVkZWYgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZCcsXG4gICAgYnVpbHRfaW46XG4gICAgICBCVUlMVF9JTl9UWVBFU1xuICAgICAgICAuY29uY2F0KE5VTExBQkxFX0JVSUxUX0lOX1RZUEVTKVxuICAgICAgICAuY29uY2F0KFtcbiAgICAgICAgICAvLyBkYXJ0OmNvcmVcbiAgICAgICAgICAnTmV2ZXInLFxuICAgICAgICAgICdOdWxsJyxcbiAgICAgICAgICAnZHluYW1pYycsXG4gICAgICAgICAgJ3ByaW50JyxcbiAgICAgICAgICAvLyBkYXJ0Omh0bWxcbiAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICdxdWVyeVNlbGVjdG9yJyxcbiAgICAgICAgICAncXVlcnlTZWxlY3RvckFsbCcsXG4gICAgICAgICAgJ3dpbmRvdydcbiAgICAgICAgXSksXG4gICAgJHBhdHRlcm46IC9bQS1aYS16XVtBLVphLXowLTlfXSpcXD8/L1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0RhcnQnLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvXFwvXFwqXFwqKD8hXFwvKS8sXG4gICAgICAgIC9cXCpcXC8vLFxuICAgICAgICB7XG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdtYXJrZG93bicsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC9cXC97Myx9ID8vLFxuICAgICAgICAvJC8sIHtcbiAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAnbWFya2Rvd24nLFxuICAgICAgICAgICAgYmVnaW46ICcuJyxcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJz0+JyAvLyBObyBtYXJrdXAsIGp1c3QgYSByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkYXJ0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IERlbHBoaVxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZW1iYXJjYWRlcm8uY29tL3Byb2R1Y3RzL2RlbHBoaVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGRlbHBoaShobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID1cbiAgICAnZXhwb3J0cyByZWdpc3RlciBmaWxlIHNobCBhcnJheSByZWNvcmQgcHJvcGVydHkgZm9yIG1vZCB3aGlsZSBzZXQgYWxseSBsYWJlbCB1c2VzIHJhaXNlIG5vdCAnICtcbiAgICAnc3RvcmVkIGNsYXNzIHNhZmVjYWxsIHZhciBpbnRlcmZhY2Ugb3IgcHJpdmF0ZSBzdGF0aWMgZXhpdCBpbmRleCBpbmhlcml0ZWQgdG8gZWxzZSBzdGRjYWxsICcgK1xuICAgICdvdmVycmlkZSBzaHIgYXNtIGZhciByZXNvdXJjZXN0cmluZyBmaW5hbGl6YXRpb24gcGFja2VkIHZpcnR1YWwgb3V0IGFuZCBwcm90ZWN0ZWQgbGlicmFyeSBkbyAnICtcbiAgICAneG9yd3JpdGUgZ290byBuZWFyIGZ1bmN0aW9uIGVuZCBkaXYgb3ZlcmxvYWQgb2JqZWN0IHVuaXQgYmVnaW4gc3RyaW5nIG9uIGlubGluZSByZXBlYXQgdW50aWwgJyArXG4gICAgJ2Rlc3RydWN0b3Igd3JpdGUgbWVzc2FnZSBwcm9ncmFtIHdpdGggcmVhZCBpbml0aWFsaXphdGlvbiBleGNlcHQgZGVmYXVsdCBuaWwgaWYgY2FzZSBjZGVjbCBpbiAnICtcbiAgICAnZG93bnRvIHRocmVhZHZhciBvZiB0cnkgcGFzY2FsIGNvbnN0IGV4dGVybmFsIGNvbnN0cnVjdG9yIHR5cGUgcHVibGljIHRoZW4gaW1wbGVtZW50YXRpb24gJyArXG4gICAgJ2ZpbmFsbHkgcHVibGlzaGVkIHByb2NlZHVyZSBhYnNvbHV0ZSByZWludHJvZHVjZSBvcGVyYXRvciBhcyBpcyBhYnN0cmFjdCBhbGlhcyBhc3NlbWJsZXIgJyArXG4gICAgJ2JpdHBhY2tlZCBicmVhayBjb250aW51ZSBjcHBkZWNsIGN2YXIgZW51bWVyYXRvciBleHBlcmltZW50YWwgcGxhdGZvcm0gZGVwcmVjYXRlZCAnICtcbiAgICAndW5pbXBsZW1lbnRlZCBkeW5hbWljIGV4cG9ydCBmYXIxNiBmb3J3YXJkIGdlbmVyaWMgaGVscGVyIGltcGxlbWVudHMgaW50ZXJydXB0IGlvY2hlY2tzICcgK1xuICAgICdsb2NhbCBuYW1lIG5vZGVmYXVsdCBub3JldHVybiBub3N0YWNrZnJhbWUgb2xkZnBjY2FsbCBvdGhlcndpc2Ugc2F2ZXJlZ2lzdGVycyBzb2Z0ZmxvYXQgJyArXG4gICAgJ3NwZWNpYWxpemUgc3RyaWN0IHVuYWxpZ25lZCB2YXJhcmdzICc7XG4gIGNvbnN0IENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVCgvXFx7LywgL1xcfS8sIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0pLFxuICAgIGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8sIHtcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9KVxuICBdO1xuICBjb25zdCBESVJFQ1RJVkUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXHtcXCQvLFxuICAgICAgICBlbmQ6IC9cXH0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKFxcKlxcJC8sXG4gICAgICAgIGVuZDogL1xcKlxcKS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sXG4gICAgZW5kOiAvJy8sXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBiZWdpbjogLycnL1xuICAgIH1dXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vd3d3LmZyZWVwYXNjYWwub3JnL2RvY3MtaHRtbC9yZWYvcmVmc2U2Lmh0bWxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICAvLyBIZXhhZGVjaW1hbCBub3RhdGlvbiwgZS5nLiwgJDdGLlxuICAgICAgICBiZWdpbjogJ1xcXFwkWzAtOUEtRmEtZl0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gT2N0YWwgbm90YXRpb24sIGUuZy4sICY0Mi5cbiAgICAgICAgYmVnaW46ICcmWzAtN10rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQmluYXJ5IG5vdGF0aW9uLCBlLmcuLCAlMTAxMC5cbiAgICAgICAgYmVnaW46ICclWzAxXSsnXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBDSEFSX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIGNvbnN0IENMQVNTID0ge1xuICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxzKj1cXFxccypjbGFzc1xcXFxzKlxcXFwoJyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW2hsanMuVElUTEVfTU9ERV1cbiAgfTtcbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIHByb2NlZHVyZScsXG4gICAgZW5kOiAvWzo7XS8sXG4gICAga2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvcnwxMCBkZXN0cnVjdG9yfDEwIHByb2NlZHVyZXwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgIENIQVJfU1RSSU5HLFxuICAgICAgICAgIERJUkVDVElWRVxuICAgICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgICAgfSxcbiAgICAgIERJUkVDVElWRVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0RlbHBoaScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2RwcicsXG4gICAgICAnZGZtJyxcbiAgICAgICdwYXMnLFxuICAgICAgJ3Bhc2NhbCcsXG4gICAgICAnZnJlZXBhc2NhbCcsXG4gICAgICAnbGF6YXJ1cycsXG4gICAgICAnbHByJyxcbiAgICAgICdsZm0nXG4gICAgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXCJ8XFwkW0ctWmctel18XFwvXFwqfDxcXC98XFx8LyxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgQ0hBUl9TVFJJTkcsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgTlVNQkVSLFxuICAgICAgQ0xBU1MsXG4gICAgICBGVU5DVElPTixcbiAgICAgIERJUkVDVElWRVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVscGhpO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IERpZmZcbkRlc2NyaXB0aW9uOiBVbmlmaWVkIGFuZCBjb250ZXh0IGRpZmZcbkF1dGhvcjogVmFzaWx5IFBvbG92bnlvdiA8dmFzdEB3aGl0ZWFudHMubmV0PlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kaWZmdXRpbHMvXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZGlmZihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0RpZmYnLFxuICAgIGFsaWFzZXM6IFsncGF0Y2gnXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL15AQCArLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtAQC9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9eLS0tICtcXGQrLFxcZCsgKy0tLS0kL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9JbmRleDogLyxcbiAgICAgICAgICAgIGVuZDogLyQvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL15pbmRleC8sXG4gICAgICAgICAgICBlbmQ6IC8kL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC89ezMsfS8sXG4gICAgICAgICAgICBlbmQ6IC8kL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9eLXszfS8sXG4gICAgICAgICAgICBlbmQ6IC8kL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9eXFwqezN9IC8sXG4gICAgICAgICAgICBlbmQ6IC8kL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9eXFwrezN9LyxcbiAgICAgICAgICAgIGVuZDogLyQvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL15cXCp7MTV9JC9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXmRpZmYgLS1naXQvLFxuICAgICAgICAgICAgZW5kOiAvJC9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2FkZGl0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eXFwrLyxcbiAgICAgICAgZW5kOiAvJC9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2RlbGV0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eLS8sXG4gICAgICAgIGVuZDogLyQvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhZGRpdGlvbicsXG4gICAgICAgIGJlZ2luOiAvXiEvLFxuICAgICAgICBlbmQ6IC8kL1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IERqYW5nb1xuRGVzY3JpcHRpb246IERqYW5nbyBpcyBhIGhpZ2gtbGV2ZWwgUHl0aG9uIFdlYiBmcmFtZXdvcmsgdGhhdCBlbmNvdXJhZ2VzIHJhcGlkIGRldmVsb3BtZW50IGFuZCBjbGVhbiwgcHJhZ21hdGljIGRlc2lnbi5cblJlcXVpcmVzOiB4bWwuanNcbkF1dGhvcjogSXZhbiBTYWdhbGFldiA8bWFuaWFjQHNvZnR3YXJlbWFuaWFjcy5vcmc+XG5Db250cmlidXRvcnM6IElseWEgQmFyeXNoZXYgPGJhcnlzaGV2QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmRqYW5nb3Byb2plY3QuY29tXG5DYXRlZ29yeTogdGVtcGxhdGVcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBkamFuZ28oaGxqcykge1xuICBjb25zdCBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16XSs6Py8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIG5hbWU6XG4gICAgICAgICd0cnVuY2F0ZXdvcmRzIHJlbW92ZXRhZ3MgbGluZWJyZWFrc2JyIHllc25vIGdldF9kaWdpdCB0aW1lc2luY2UgcmFuZG9tIHN0cmlwdGFncyAnICtcbiAgICAgICAgJ2ZpbGVzaXplZm9ybWF0IGVzY2FwZSBsaW5lYnJlYWtzIGxlbmd0aF9pcyBsanVzdCByanVzdCBjdXQgdXJsaXplIGZpeF9hbXBlcnNhbmRzICcgK1xuICAgICAgICAndGl0bGUgZmxvYXRmb3JtYXQgY2FwZmlyc3QgcHByaW50IGRpdmlzaWJsZWJ5IGFkZCBtYWtlX2xpc3QgdW5vcmRlcmVkX2xpc3QgdXJsZW5jb2RlICcgK1xuICAgICAgICAndGltZXVudGlsIHVybGl6ZXRydW5jIHdvcmRjb3VudCBzdHJpbmdmb3JtYXQgbGluZW51bWJlcnMgc2xpY2UgZGF0ZSBkaWN0c29ydCAnICtcbiAgICAgICAgJ2RpY3Rzb3J0cmV2ZXJzZWQgZGVmYXVsdF9pZl9ub25lIHBsdXJhbGl6ZSBsb3dlciBqb2luIGNlbnRlciBkZWZhdWx0ICcgK1xuICAgICAgICAndHJ1bmNhdGV3b3Jkc19odG1sIHVwcGVyIGxlbmd0aCBwaG9uZTJudW1lcmljIHdvcmR3cmFwIHRpbWUgYWRkc2xhc2hlcyBzbHVnaWZ5IGZpcnN0ICcgK1xuICAgICAgICAnZXNjYXBlanMgZm9yY2VfZXNjYXBlIGlyaWVuY29kZSBsYXN0IHNhZmUgc2FmZXNlcSB0cnVuY2F0ZWNoYXJzIGxvY2FsaXplIHVubG9jYWxpemUgJyArXG4gICAgICAgICdsb2NhbHRpbWUgdXRjIHRpbWV6b25lJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRGphbmdvJyxcbiAgICBhbGlhc2VzOiBbJ2ppbmphJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7JVxccypjb21tZW50XFxzKiVcXH0vLCAvXFx7JVxccyplbmRjb21tZW50XFxzKiVcXH0vKSxcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7Iy8sIC8jXFx9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sXG4gICAgICAgIGVuZDogLyVcXH0vLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICBiZWdpbjogL1xcdysvLFxuICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICdjb21tZW50IGVuZGNvbW1lbnQgbG9hZCB0ZW1wbGF0ZXRhZyBpZmNoYW5nZWQgZW5kaWZjaGFuZ2VkIGlmIGVuZGlmIGZpcnN0b2YgZm9yICcgK1xuICAgICAgICAgICAgICAgICdlbmRmb3IgaWZub3RlcXVhbCBlbmRpZm5vdGVxdWFsIHdpZHRocmF0aW8gZXh0ZW5kcyBpbmNsdWRlIHNwYWNlbGVzcyAnICtcbiAgICAgICAgICAgICAgICAnZW5kc3BhY2VsZXNzIHJlZ3JvdXAgaWZlcXVhbCBlbmRpZmVxdWFsIHNzaSBub3cgd2l0aCBjeWNsZSB1cmwgZmlsdGVyICcgK1xuICAgICAgICAgICAgICAgICdlbmRmaWx0ZXIgZGVidWcgYmxvY2sgZW5kYmxvY2sgZWxzZSBhdXRvZXNjYXBlIGVuZGF1dG9lc2NhcGUgY3NyZl90b2tlbiBlbXB0eSBlbGlmICcgK1xuICAgICAgICAgICAgICAgICdlbmR3aXRoIHN0YXRpYyB0cmFucyBibG9ja3RyYW5zIGVuZGJsb2NrdHJhbnMgZ2V0X3N0YXRpY19wcmVmaXggZ2V0X21lZGlhX3ByZWZpeCAnICtcbiAgICAgICAgICAgICAgICAncGx1cmFsIGdldF9jdXJyZW50X2xhbmd1YWdlIGxhbmd1YWdlIGdldF9hdmFpbGFibGVfbGFuZ3VhZ2VzICcgK1xuICAgICAgICAgICAgICAgICdnZXRfY3VycmVudF9sYW5ndWFnZV9iaWRpIGdldF9sYW5ndWFnZV9pbmZvIGdldF9sYW5ndWFnZV9pbmZvX2xpc3QgbG9jYWxpemUgJyArXG4gICAgICAgICAgICAgICAgJ2VuZGxvY2FsaXplIGxvY2FsdGltZSBlbmRsb2NhbHRpbWUgdGltZXpvbmUgZW5kdGltZXpvbmUgZ2V0X2N1cnJlbnRfdGltZXpvbmUgJyArXG4gICAgICAgICAgICAgICAgJ3ZlcmJhdGltJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiAnaW4gYnkgYXMnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtGSUxURVJdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xcey8sXG4gICAgICAgIGVuZDogL1xcfVxcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbRklMVEVSXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkamFuZ287XG4iLAogICAgIi8qXG5MYW5ndWFnZTogRE5TIFpvbmVcbkF1dGhvcjogVGltIFNjaHVtYWNoZXIgPHRpbUBkYXRlbmtub3Rlbi5tZT5cbkNhdGVnb3J5OiBjb25maWdcbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1pvbmVfZmlsZVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGRucyhobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0ROUyBab25lJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnYmluZCcsXG4gICAgICAnem9uZSdcbiAgICBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnSU4gQSBBQUFBIEFGU0RCIEFQTCBDQUEgQ0ROU0tFWSBDRFMgQ0VSVCBDTkFNRSBESENJRCBETFYgRE5BTUUgRE5TS0VZIERTIEhJUCBJUFNFQ0tFWSBLRVkgS1ggJyArXG4gICAgICAgICdMT0MgTVggTkFQVFIgTlMgTlNFQyBOU0VDMyBOU0VDM1BBUkFNIFBUUiBSUlNJRyBSUCBTSUcgU09BIFNSViBTU0hGUCBUQSBUS0VZIFRMU0EgVFNJRyBUWFQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15cXCQoVFRMfEdFTkVSQVRFfElOQ0xVREV8T1JJR0lOKVxcYi9cbiAgICAgIH0sXG4gICAgICAvLyBJUHY2XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSkpXFxcXGInXG4gICAgICB9LFxuICAgICAgLy8gSVB2NFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJygoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLk5VTUJFUl9NT0RFLCB7XG4gICAgICAgIGJlZ2luOiAvXFxiXFxkK1tkaHdtXT8vXG4gICAgICB9KVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkbnM7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogRG9ja2VyZmlsZVxuUmVxdWlyZXM6IGJhc2guanNcbkF1dGhvcjogQWxleGlzIEjDqW5hdXQgPGFsZXhpc0BoZW5hdXQubmV0PlxuRGVzY3JpcHRpb246IGxhbmd1YWdlIGRlZmluaXRpb24gZm9yIERvY2tlcmZpbGUgZmlsZXNcbldlYnNpdGU6IGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci9cbkNhdGVnb3J5OiBjb25maWdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBkb2NrZXJmaWxlKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRG9ja2VyZmlsZScsXG4gICAgYWxpYXNlczogWydkb2NrZXInXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiAnZnJvbSBtYWludGFpbmVyIGV4cG9zZSBlbnYgYXJnIHVzZXIgb25idWlsZCBzdG9wc2lnbmFsJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAncnVuIGNtZCBlbnRyeXBvaW50IHZvbHVtZSBhZGQgY29weSB3b3JrZGlyIGxhYmVsIGhlYWx0aGNoZWNrIHNoZWxsJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvW15cXFxcXSQvLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAnYmFzaCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogJzwvJ1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvY2tlcmZpbGU7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogQmF0Y2ggZmlsZSAoRE9TKVxuQXV0aG9yOiBBbGV4YW5kZXIgTWFrYXJvdiA8c2FtQHJtY3JlYXRpdmUucnU+XG5Db250cmlidXRvcnM6IEFudG9uIEtvY2hrb3YgPGFudG9uLmtvY2hrb3ZAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmF0Y2hfZmlsZVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGRvcyhobGpzKSB7XG4gIGNvbnN0IENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgL15cXHMqQD9yZW1cXGIvLCAvJC8sXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH1cbiAgKTtcbiAgY29uc3QgTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ15cXFxccypbQS1aYS16Ll8/XVtBLVphLXowLTlfJCNAfi4/XSooOnxcXFxccytsYWJlbCknLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCYXRjaCBmaWxlIChET1MpJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnYmF0JyxcbiAgICAgICdjbWQnXG4gICAgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnaWYgZWxzZSBnb3RvIGZvciBpbiBkbyBjYWxsIGV4aXQgbm90IGV4aXN0IGVycm9ybGV2ZWwgZGVmaW5lZCAnICtcbiAgICAgICAgJ2VxdSBuZXEgbHNzIGxlcSBndHIgZ2VxJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAncHJuIG51bCBscHQzIGxwdDIgbHB0MSBjb24gY29tNCBjb20zIGNvbTIgY29tMSBhdXggJyArXG4gICAgICAgICdzaGlmdCBjZCBkaXIgZWNobyBzZXRsb2NhbCBlbmRsb2NhbCBzZXQgcGF1c2UgY29weSAnICtcbiAgICAgICAgJ2FwcGVuZCBhc3NvYyBhdCBhdHRyaWIgYnJlYWsgY2FjbHMgY2QgY2hjcCBjaGRpciBjaGtkc2sgY2hrbnRmcyBjbHMgY21kIGNvbG9yICcgK1xuICAgICAgICAnY29tcCBjb21wYWN0IGNvbnZlcnQgZGF0ZSBkaXIgZGlza2NvbXAgZGlza2NvcHkgZG9za2V5IGVyYXNlIGZzICcgK1xuICAgICAgICAnZmluZCBmaW5kc3RyIGZvcm1hdCBmdHlwZSBncmFmdGFibCBoZWxwIGtleWIgbGFiZWwgbWQgbWtkaXIgbW9kZSBtb3JlIG1vdmUgcGF0aCAnICtcbiAgICAgICAgJ3BhdXNlIHByaW50IHBvcGQgcHVzaGQgcHJvbXQgcmQgcmVjb3ZlciByZW0gcmVuYW1lIHJlcGxhY2UgcmVzdG9yZSBybWRpciBzaGlmdCAnICtcbiAgICAgICAgJ3NvcnQgc3RhcnQgc3Vic3QgdGltZSB0aXRsZSB0cmVlIHR5cGUgdmVyIHZlcmlmeSB2b2wgJyArXG4gICAgICAgIC8vIHdpbnV0aWxzXG4gICAgICAgICdwaW5nIG5ldCBpcGNvbmZpZyB0YXNra2lsbCB4Y29weSByZW4gZGVsJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogLyUlW14gXXwlW14gXSs/JXwhW14gXSs/IS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IExBQkVMLmJlZ2luLFxuICAgICAgICBlbmQ6ICdnb3RvOmVvZicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgYmVnaW46ICcoW19hLXpBLVpdXFxcXHcqXFxcXC4pKihbX2EtekEtWl1cXFxcdyo6KT9bX2EtekEtWl1cXFxcdyonXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb3M7XG4iLAogICAgIi8qXG4gTGFuZ3VhZ2U6IGRzY29uZmlnXG4gRGVzY3JpcHRpb246IGRzY29uZmlnIGJhdGNoIGNvbmZpZ3VyYXRpb24gbGFuZ3VhZ2UgZm9yIExEQVAgZGlyZWN0b3J5IHNlcnZlcnNcbiBDb250cmlidXRvcnM6IEphY29iIENoaWxkcmVzcyA8amFjb2JjQGdtYWlsLmNvbT5cbiBDYXRlZ29yeTogZW50ZXJwcmlzZSwgY29uZmlnXG4gKi9cblxuIC8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBkc2NvbmZpZyhobGpzKSB7XG4gIGNvbnN0IFFVT1RFRF9QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLFxuICAgIGVuZDogL1wiL1xuICB9O1xuICBjb25zdCBBUE9TX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLyxcbiAgICBlbmQ6IC8nL1xuICB9O1xuICBjb25zdCBVTlFVT1RFRF9QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvW1xcd1xcLT9dKzpcXHcrLyxcbiAgICBlbmQ6IC9cXFcvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBWQUxVRUxFU1NfUFJPUEVSVFkgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcdysoXFwtXFx3KykqLyxcbiAgICBlbmQ6IC8oPz1cXFcpLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiAnZHNjb25maWcnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ15kc2NvbmZpZycsXG4gICAgICAgIGVuZDogL1xccy8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46IC8obGlzdHxjcmVhdGV8Z2V0fHNldHxkZWxldGUpLShcXHcrKS8sXG4gICAgICAgIGVuZDogL1xccy8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICchQCMkJV4mKigpJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogLy0tKFxcdyspLyxcbiAgICAgICAgZW5kOiAvXFxzLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFFVT1RFRF9QUk9QRVJUWSxcbiAgICAgIEFQT1NfUFJPUEVSVFksXG4gICAgICBVTlFVT1RFRF9QUk9QRVJUWSxcbiAgICAgIFZBTFVFTEVTU19QUk9QRVJUWSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZHNjb25maWc7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogRGV2aWNlIFRyZWVcbkRlc2NyaXB0aW9uOiAqLmR0cyBmaWxlcyB1c2VkIGluIHRoZSBMaW51eCBrZXJuZWxcbkF1dGhvcjogTWFydGluIEJyYXVuIDxtYXJ0aW4uYnJhdW5AZXR0dXMuY29tPiwgTW9yaXR6IEZpc2NoZXIgPG1vcml0ei5maXNjaGVyQGV0dHVzLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZWxpbnV4Lm9yZy9EZXZpY2VfVHJlZV9SZWZlcmVuY2VcbkNhdGVnb3J5OiBjb25maWdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBkdHMoaGxqcykge1xuICBjb25zdCBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgICAgIGJlZ2luOiAnKCh1OD98VSl8TCk/XCInXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFUpP1JcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJ1xcXFxcXFxcPy4nLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnLidcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKHV8VXxsfEx8dWx8VUx8ZnxGKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjJyxcbiAgICBlbmQ6ICckJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJ21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIGlmZGVmIGlmbmRlZidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2luY2x1ZGUnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAnbWV0YS1rZXl3b3JkJzogJ2luY2x1ZGUnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnPCcsXG4gICAgICAgICAgICBlbmQ6ICc+JyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBTVFJJTkdTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBEVFNfUkVGRVJFTkNFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogLyZbYS16XFxkX10qXFxiL1xuICB9O1xuXG4gIGNvbnN0IERUU19LRVlXT1JEID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEta2V5d29yZCcsXG4gICAgYmVnaW46ICcvW2Etel1bYS16XFxcXGQtXSovJ1xuICB9O1xuXG4gIGNvbnN0IERUU19MQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXlxcXFxzKlthLXpBLVpfXVthLXpBLVpcXFxcZF9dKjonXG4gIH07XG5cbiAgY29uc3QgRFRTX0NFTExfUFJPUEVSVFkgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJzwnLFxuICAgIGVuZDogJz4nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOVU1CRVJTLFxuICAgICAgRFRTX1JFRkVSRU5DRVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBEVFNfTk9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46IC9bYS16QS1aX11bYS16QS1aXFxkX0BdKlxcc1xcey8sXG4gICAgZW5kOiAvW3s7PV0vLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTtcblxuICBjb25zdCBEVFNfUk9PVF9OT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbjogJy9cXFxccypcXFxceycsXG4gICAgZW5kOiAvXFx9Oy8sXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICBjb250YWluczogW1xuICAgICAgRFRTX1JFRkVSRU5DRSxcbiAgICAgIERUU19LRVlXT1JELFxuICAgICAgRFRTX0xBQkVMLFxuICAgICAgRFRTX05PREUsXG4gICAgICBEVFNfQ0VMTF9QUk9QRVJUWSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdEZXZpY2UgVHJlZScsXG4gICAga2V5d29yZHM6IFwiXCIsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIERUU19ST09UX05PREUsXG4gICAgICBEVFNfUkVGRVJFTkNFLFxuICAgICAgRFRTX0tFWVdPUkQsXG4gICAgICBEVFNfTEFCRUwsXG4gICAgICBEVFNfTk9ERSxcbiAgICAgIERUU19DRUxMX1BST1BFUlRZLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIE5VTUJFUlMsXG4gICAgICBTVFJJTkdTLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiBcIlwiXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGR0cztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBEdXN0XG5SZXF1aXJlczogeG1sLmpzXG5BdXRob3I6IE1pY2hhZWwgQWxsZW4gPG1pY2hhZWwuYWxsZW5AYmVuZWZpdGZvY3VzLmNvbT5cbkRlc2NyaXB0aW9uOiBNYXRjaGVyIGZvciBkdXN0LmpzIHRlbXBsYXRlcy5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmR1c3Rqcy5jb21cbkNhdGVnb3J5OiB0ZW1wbGF0ZVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGR1c3QoaGxqcykge1xuICBjb25zdCBFWFBSRVNTSU9OX0tFWVdPUkRTID0gJ2lmIGVxIG5lIGx0IGx0ZSBndCBndGUgc2VsZWN0IGRlZmF1bHQgbWF0aCBzZXAnO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdEdXN0JyxcbiAgICBhbGlhc2VzOiBbJ2RzdCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7WyNcXC9dLyxcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgaWxsZWdhbDogLzsvLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICBiZWdpbjogL1thLXpBLVpcXC4tXSsvLFxuICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuUVVPVEVfU1RSSU5HX01PREVdXG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcey8sXG4gICAgICAgIGVuZDogL1xcfS8sXG4gICAgICAgIGlsbGVnYWw6IC87LyxcbiAgICAgICAga2V5d29yZHM6IEVYUFJFU1NJT05fS0VZV09SRFNcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZHVzdDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBFeHRlbmRlZCBCYWNrdXMtTmF1ciBGb3JtXG5BdXRob3I6IEFsZXggTWNLaWJiZW4gPGFsZXhAbnVsbHNjb3BlLm5ldD5cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0JhY2t1c+KAk05hdXJfZm9ybVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGVibmYoaGxqcykge1xuICBjb25zdCBjb21tZW50TW9kZSA9IGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8pO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTW9kZSA9IHtcbiAgICBjbGFzc05hbWU6IFwiYXR0cmlidXRlXCIsXG4gICAgYmVnaW46IC9eWyBdKlthLXpBLVpdKyhbXFxzXy1dK1thLXpBLVpdKykqL1xuICB9O1xuXG4gIGNvbnN0IHNwZWNpYWxTZXF1ZW5jZU1vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1ldGFcIixcbiAgICBiZWdpbjogL1xcPy4qXFw/L1xuICB9O1xuXG4gIGNvbnN0IHJ1bGVCb2R5TW9kZSA9IHtcbiAgICBiZWdpbjogLz0vLFxuICAgIGVuZDogL1suO10vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBjb21tZW50TW9kZSxcbiAgICAgIHNwZWNpYWxTZXF1ZW5jZU1vZGUsXG4gICAgICB7XG4gICAgICAgIC8vIHRlcm1pbmFsc1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgICAgICBlbmQ6ICdgJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdFeHRlbmRlZCBCYWNrdXMtTmF1ciBGb3JtJyxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgY29tbWVudE1vZGUsXG4gICAgICBub25UZXJtaW5hbE1vZGUsXG4gICAgICBydWxlQm9keU1vZGVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZWJuZjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBFbGl4aXJcbkF1dGhvcjogSm9zaCBBZGFtcyA8am9zaEBpc290b3BlMTEuY29tPlxuRGVzY3JpcHRpb246IGxhbmd1YWdlIGRlZmluaXRpb24gZm9yIEVsaXhpciBzb3VyY2UgY29kZSBmaWxlcyAoLmV4IGFuZCAuZXhzKS4gIEJhc2VkIG9uIHJ1YnkgbGFuZ3VhZ2Ugc3VwcG9ydC5cbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG5XZWJzaXRlOiBodHRwczovL2VsaXhpci1sYW5nLm9yZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGVsaXhpcihobGpzKSB7XG4gIGNvbnN0IEVMSVhJUl9JREVOVF9SRSA9ICdbYS16QS1aX11bYS16QS1aMC05Xy5dKighfFxcXFw/KT8nO1xuICBjb25zdCBFTElYSVJfTUVUSE9EX1JFID0gJ1thLXpBLVpfXVxcXFx3KlshPz1dP3xbLSt+XUB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+YHxdfFxcXFxbXFxcXF09Pyc7XG4gIGNvbnN0IEVMSVhJUl9LRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogRUxJWElSX0lERU5UX1JFLFxuICAgIGtleXdvcmQ6ICdhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuICcgK1xuICAgICduZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBuaWwgYnJlYWsgbm90IGNhc2UgY29uZCBhbGlhcyB3aGlsZSBlbnN1cmUgb3IgJyArXG4gICAgJ2luY2x1ZGUgdXNlIGFsaWFzIGZuIHF1b3RlIHJlcXVpcmUgaW1wb3J0IHdpdGh8MCdcbiAgfTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogRUxJWElSX0tFWVdPUkRTXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnKFxcXFxiMG9bMC03X10rKXwoXFxcXGIwYlswMV9dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoLT9cXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSsoW2VFXVstK10/WzAtOV0rKT8pPyknLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBTSUdJTF9ERUxJTUlURVJTID0gJ1svfChbezxcIlxcJ10nO1xuICBjb25zdCBMT1dFUkNBU0VfU0lHSUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ35bYS16XScgKyAnKD89JyArIFNJR0lMX0RFTElNSVRFUlMgKyAnKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICAgIFNVQlNUXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgIGVuZDogL1wiL1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgICAgICBlbmQ6IC8nL1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC9cXC8vLFxuICAgICAgICAgICAgICAgIGVuZDogL1xcLy9cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFx8LyxcbiAgICAgICAgICAgICAgICBlbmQ6IC9cXHwvXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICAgICAgZW5kOiAvXFwpL1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgICAgICAgICAgIGVuZDogL1xcXS9cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFx7LyxcbiAgICAgICAgICAgICAgICBlbmQ6IC9cXH0vXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLzwvLFxuICAgICAgICAgICAgICAgIGVuZDogLz4vXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgVVBDQVNFX1NJR0lMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICd+W0EtWl0nICsgJyg/PScgKyBTSUdJTF9ERUxJTUlURVJTICsgJyknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sXG4gICAgICAgIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcLy8sXG4gICAgICAgIGVuZDogL1xcLy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFx8LyxcbiAgICAgICAgZW5kOiAvXFx8L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgIGVuZDogL1xcXS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFx7LyxcbiAgICAgICAgZW5kOiAvXFx9L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88LyxcbiAgICAgICAgZW5kOiAvPi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJycnLyxcbiAgICAgICAgZW5kOiAvJycnL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9+U1wiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXSAvLyBvdmVycmlkZSBkZWZhdWx0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXSAvLyBvdmVycmlkZSBkZWZhdWx0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TJycnLyxcbiAgICAgICAgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtdIC8vIG92ZXJyaWRlIGRlZmF1bHRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvflMnLyxcbiAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXSAvLyBvdmVycmlkZSBkZWZhdWx0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiL1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWYgZGVmcCBkZWZtYWNybycsXG4gICAgZW5kOiAvXFxCXFxiLywgLy8gdGhlIG1vZGUgaXMgZW5kZWQgYnkgdGhlIHRpdGxlXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgYmVnaW46IEVMSVhJUl9JREVOVF9SRSxcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgfSlcbiAgICBdXG4gIH07XG4gIGNvbnN0IENMQVNTID0gaGxqcy5pbmhlcml0KEZVTkNUSU9OLCB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWZpbXBsIGRlZm1vZHVsZSBkZWZwcm90b2NvbCBkZWZyZWNvcmQnLFxuICAgIGVuZDogL1xcYmRvXFxifCR8Oy9cbiAgfSk7XG4gIGNvbnN0IEVMSVhJUl9ERUZBVUxUX0NPTlRBSU5TID0gW1xuICAgIFNUUklORyxcbiAgICBVUENBU0VfU0lHSUwsXG4gICAgTE9XRVJDQVNFX1NJR0lMLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgQ0xBU1MsXG4gICAgRlVOQ1RJT04sXG4gICAge1xuICAgICAgYmVnaW46ICc6OidcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogJzooPyFbXFxcXHM6XSknLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgU1RSSU5HLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IEVMSVhJUl9NRVRIT0RfUkVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiBFTElYSVJfSURFTlRfUkUgKyAnOig/ITopJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgTlVNQkVSLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgIGJlZ2luOiAnKFxcXFwkXFxcXFcpfCgoXFxcXCR8QEA/KShcXFxcdyspKSdcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLT4nXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJylcXFxccyonLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIHRvIHByZXZlbnQgZmFsc2UgcmVnZXggdHJpZ2dlcnMgZm9yIHRoZSBkaXZpc2lvbiBmdW5jdGlvbjpcbiAgICAgICAgICAvLyAvOlxuICAgICAgICAgIGJlZ2luOiAvXFwvOiAoPz1cXGQrXFxzKlssXFxdXSkvLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW05VTUJFUl1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgICAgU1VCU1RcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnLycsXG4gICAgICAgICAgICAgIGVuZDogJy9bYS16XSonXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyXFxcXFsnLFxuICAgICAgICAgICAgICBlbmQ6ICdcXFxcXVthLXpdKidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRUxJWElSX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRWxpeGlyJyxcbiAgICBrZXl3b3JkczogRUxJWElSX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBFTElYSVJfREVGQVVMVF9DT05UQUlOU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVsaXhpcjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBFbG1cbkF1dGhvcjogSmFuaXMgVm9pZ3RsYWVuZGVyIDxqYW5pcy52b2lndGxhZW5kZXJAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbG0tbGFuZy5vcmdcbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZWxtKGhsanMpIHtcbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC9cXHstLyxcbiAgICAgICAgLy1cXH0vLFxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICAgIH1cbiAgICAgIClcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgQ09OU1RSVUNUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLCAvLyBUT0RPOiBvdGhlciBjb25zdHJ1Y3RvcnMgKGJ1aWx0LWluLCBpbmZpeCkuXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgaWxsZWdhbDogJ1wiJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XSooXFxcXCgoXFxcXC5cXFxcLnwsfFxcXFx3KylcXFxcKSk/J1xuICAgICAgfSxcbiAgICAgIENPTU1FTlRcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgUkVDT1JEID0ge1xuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGNvbnRhaW5zOiBMSVNULmNvbnRhaW5zXG4gIH07XG5cbiAgY29uc3QgQ0hBUkFDVEVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXCdcXFxcXFxcXD8uJyxcbiAgICBlbmQ6ICdcXCcnLFxuICAgIGlsbGVnYWw6ICcuJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0VsbScsXG4gICAga2V5d29yZHM6XG4gICAgICAnbGV0IGluIGlmIHRoZW4gZWxzZSBjYXNlIG9mIHdoZXJlIG1vZHVsZSBpbXBvcnQgZXhwb3NpbmcgJyArXG4gICAgICAndHlwZSBhbGlhcyBhcyBpbmZpeCBpbmZpeGwgaW5maXhyIHBvcnQgZWZmZWN0IGNvbW1hbmQgc3Vic2NyaXB0aW9uJyxcbiAgICBjb250YWluczogW1xuXG4gICAgICAvLyBUb3AtbGV2ZWwgY29uc3RydWN0aW9ucy5cblxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAncG9ydCBlZmZlY3QgbW9kdWxlJyxcbiAgICAgICAgZW5kOiAnZXhwb3NpbmcnLFxuICAgICAgICBrZXl3b3JkczogJ3BvcnQgZWZmZWN0IG1vZHVsZSB3aGVyZSBjb21tYW5kIHN1YnNjcmlwdGlvbiBleHBvc2luZycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgTElTVCxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcV1xcXFwufDsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ2ltcG9ydCcsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2ltcG9ydCBhcyBleHBvc2luZycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgTElTVCxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcV1xcXFwufDsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ3R5cGUnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICd0eXBlIGFsaWFzJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDT05TVFJVQ1RPUixcbiAgICAgICAgICBMSVNULFxuICAgICAgICAgIFJFQ09SRCxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmZpeCBpbmZpeGwgaW5maXhyJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIENPTU1FTlRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdwb3J0JyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAncG9ydCcsXG4gICAgICAgIGNvbnRhaW5zOiBbQ09NTUVOVF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIExpdGVyYWxzIGFuZCBuYW1lcy5cblxuICAgICAgQ0hBUkFDVEVSLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICBiZWdpbjogJ15bX2Etel1bXFxcXHdcXCddKidcbiAgICAgIH0pLFxuICAgICAgQ09NTUVOVCxcblxuICAgICAge1xuICAgICAgICBiZWdpbjogJy0+fDwtJ1xuICAgICAgfSAvLyBObyBtYXJrdXAsIHJlbGV2YW5jZSBib29zdGVyXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvOy9cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbG07XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBSdWJ5XG5EZXNjcmlwdGlvbjogUnVieSBpcyBhIGR5bmFtaWMsIG9wZW4gc291cmNlIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGggYSBmb2N1cyBvbiBzaW1wbGljaXR5IGFuZCBwcm9kdWN0aXZpdHkuXG5XZWJzaXRlOiBodHRwczovL3d3dy5ydWJ5LWxhbmcub3JnL1xuQXV0aG9yOiBBbnRvbiBLb3ZhbHlvdiA8YW50b25Aa292YWx5b3YubmV0PlxuQ29udHJpYnV0b3JzOiBQZXRlciBMZW9ub3YgPGdvanBlZ0B5YW5kZXgucnU+LCBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+LCBMb3JlbiBTZWdhbCA8bHNlZ2FsQHNvZW4uY2E+LCBQYXNjYWwgSHVybmkgPHBoaUBydWJ5LXJlYWN0aXZlLm9yZz4sIENlZHJpYyBTb2hyYXVlciA8c29ocmF1ZXJAZ29vZ2xlbWFpbC5jb20+XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBydWJ5KGhsanMpIHtcbiAgY29uc3QgUlVCWV9NRVRIT0RfUkUgPSAnKFthLXpBLVpfXVxcXFx3KlshPz1dP3xbLSt+XUB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+YHxdfFxcXFxbXFxcXF09PyknO1xuICBjb25zdCBSVUJZX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYW5kIHRoZW4gZGVmaW5lZCBtb2R1bGUgaW4gcmV0dXJuIHJlZG8gaWYgQkVHSU4gcmV0cnkgZW5kIGZvciBzZWxmIHdoZW4gJyArXG4gICAgICAnbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBlbHNlIGJyZWFrIHVuZGVmIG5vdCBzdXBlciBjbGFzcyBjYXNlICcgK1xuICAgICAgJ3JlcXVpcmUgeWllbGQgYWxpYXMgd2hpbGUgZW5zdXJlIGVsc2lmIG9yIGluY2x1ZGUgYXR0cl9yZWFkZXIgYXR0cl93cml0ZXIgYXR0cl9hY2Nlc3NvciAnICtcbiAgICAgICdfX0ZJTEVfXycsXG4gICAgYnVpbHRfaW46ICdwcm9jIGxhbWJkYScsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG5pbCdcbiAgfTtcbiAgY29uc3QgWUFSRE9DVEFHID0ge1xuICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICB9O1xuICBjb25zdCBJUkJfT0JKRUNUID0ge1xuICAgIGJlZ2luOiAnIzwnLFxuICAgIGVuZDogJz4nXG4gIH07XG4gIGNvbnN0IENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJyMnLFxuICAgICAgJyQnLFxuICAgICAge1xuICAgICAgICBjb250YWluczogWyBZQVJET0NUQUcgXVxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJ149YmVnaW4nLFxuICAgICAgJ149ZW5kJyxcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IFsgWUFSRE9DVEFHIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVCgnXl9fRU5EX18nLCAnXFxcXG4kJylcbiAgXTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICB9O1xuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sXG4gICAgICAgIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL2AvLFxuICAgICAgICBlbmQ6IC9gL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdP1xcWy8sXG4gICAgICAgIGVuZDogL1xcXS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/XFx7LyxcbiAgICAgICAgZW5kOiAvXFx9L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT88LyxcbiAgICAgICAgZW5kOiAvPi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/XFwvLyxcbiAgICAgICAgZW5kOiAvXFwvL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT8lLyxcbiAgICAgICAgZW5kOiAvJS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/LS8sXG4gICAgICAgIGVuZDogLy0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdP1xcfC8sXG4gICAgICAgIGVuZDogL1xcfC9cbiAgICAgIH0sXG4gICAgICAvLyBpbiB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zLCBcXEIgaW4gdGhlIGJlZ2lubmluZyBzdXBwcmVzc2VzIHJlY29nbml0aW9uIG9mID8tc2VxdWVuY2VzXG4gICAgICAvLyB3aGVyZSA/IGlzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHByZWNlZGluZyBpZGVudGlmaWVyLCBhcyBpbjogYGZ1bmM/NGBcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXEJcXD8oXFxcXFxcZHsxLDN9KS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxCXFw/KFxcXFx4W0EtRmEtZjAtOV17MSwyfSkvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcQlxcPyhcXFxcdVxcez9bQS1GYS1mMC05XXsxLDZ9XFx9PykvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcQlxcPyhcXFxcTS1cXFxcQy18XFxcXE0tXFxcXGN8XFxcXGNcXFxcTS18XFxcXE0tfFxcXFxDLVxcXFxNLSlbXFx4MjAtXFx4N2VdL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXEJcXD9cXFxcKGN8Qy0pW1xceDIwLVxceDdlXS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxCXFw/XFxcXD9cXFMvXG4gICAgICB9LFxuICAgICAgeyAvLyBoZXJlZG9jc1xuICAgICAgICBiZWdpbjogLzw8Wy1+XT8nPyhcXHcrKVxcbig/OlteXFxuXSpcXG4pKj9cXHMqXFwxXFxiLyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC88PFstfl0/Jz8vXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgICAgIGJlZ2luOiAvKFxcdyspLyxcbiAgICAgICAgICAgIGVuZDogLyhcXHcrKS8sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICAgIFNVQlNUXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBSdWJ5IHN5bnRheCBpcyB1bmRlcmRvY3VtZW50ZWQsIGJ1dCB0aGlzIGdyYW1tYXIgc2VlbXMgdG8gYmUgYWNjdXJhdGVcbiAgLy8gYXMgb2YgdmVyc2lvbiAyLjcuMiAoY29uZmlybWVkIHdpdGggKGlyYiBhbmQgYFJpcHBlci5zZXhwKC4uLilgKVxuICAvLyBodHRwczovL2RvY3MucnVieS1sYW5nLm9yZy9lbi8yLjcuMC9kb2Mvc3ludGF4L2xpdGVyYWxzX3Jkb2MuaHRtbCNsYWJlbC1OdW1iZXJzXG4gIGNvbnN0IGRlY2ltYWwgPSAnWzEtOV0oXz9bMC05XSkqfDAnO1xuICBjb25zdCBkaWdpdHMgPSAnWzAtOV0oXz9bMC05XSkqJztcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBkZWNpbWFsIGludGVnZXIvZmxvYXQsIG9wdGlvbmFsbHkgZXhwb25lbnRpYWwgb3IgcmF0aW9uYWwsIG9wdGlvbmFsbHkgaW1hZ2luYXJ5XG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsfSkoXFxcXC4oJHtkaWdpdHN9KSk/KFtlRV1bKy1dPygke2RpZ2l0c30pfHIpP2k/XFxcXGJgXG4gICAgICB9LFxuXG4gICAgICAvLyBleHBsaWNpdCBkZWNpbWFsL2JpbmFyeS9vY3RhbC9oZXhhZGVjaW1hbCBpbnRlZ2VyLFxuICAgICAgLy8gb3B0aW9uYWxseSByYXRpb25hbCBhbmQvb3IgaW1hZ2luYXJ5XG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiMFtkRF1bMC05XShfP1swLTldKSpyP2k/XFxcXGJcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIwW2JCXVswLTFdKF8/WzAtMV0pKnI/aT9cXFxcYlwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogXCJcXFxcYjBbb09dWzAtN10oXz9bMC03XSkqcj9pP1xcXFxiXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpyP2k/XFxcXGJcIlxuICAgICAgfSxcblxuICAgICAgLy8gMC1wcmVmaXhlZCBpbXBsaWNpdCBvY3RhbCBpbnRlZ2VyLCBvcHRpb25hbGx5IHJhdGlvbmFsIGFuZC9vciBpbWFnaW5hcnlcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIwKF8/WzAtN10pK3I/aT9cXFxcYlwiXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgIGVuZDogJ1xcXFwpJyxcbiAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gIH07XG5cbiAgY29uc3QgUlVCWV9ERUZBVUxUX0NPTlRBSU5TID0gW1xuICAgIFNUUklORyxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgbW9kdWxlJyxcbiAgICAgIGVuZDogJyR8OycsXG4gICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgYmVnaW46ICdbQS1aYS16X11cXFxcdyooOjpcXFxcdyspKihcXFxcP3whKT8nXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICc8XFxcXHMqJyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJygnICsgaGxqcy5JREVOVF9SRSArICc6Oik/JyArIGhsanMuSURFTlRfUkUsXG4gICAgICAgICAgICAgIC8vIHdlIGFscmVhZHkgZ2V0IHBvaW50cyBmb3IgPCwgd2UgZG9uJ3QgbmVlZCBwb2l0bnNcbiAgICAgICAgICAgICAgLy8gZm9yIHRoZSBuYW1lIGFsc29cbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgLy8gZGVmIG1ldGhvZF9uYW1lKFxuICAgICAgLy8gZGVmIG1ldGhvZF9uYW1lO1xuICAgICAgLy8gZGVmIG1ldGhvZF9uYW1lIChlbmQgb2YgbGluZSlcbiAgICAgIGJlZ2luOiBjb25jYXQoL2RlZlxccysvLCBsb29rYWhlYWQoUlVCWV9NRVRIT0RfUkUgKyBcIlxcXFxzKihcXFxcKHw7fCQpXCIpKSxcbiAgICAgIHJlbGV2YW5jZTogMCwgLy8gcmVsZXZhbmNlIGNvbWVzIGZyb20ga2V3b3Jkc1xuICAgICAga2V5d29yZHM6IFwiZGVmXCIsXG4gICAgICBlbmQ6ICckfDsnLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgIGJlZ2luOiBSVUJZX01FVEhPRF9SRVxuICAgICAgICB9KSxcbiAgICAgICAgUEFSQU1TXG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3dhbGxvdyBuYW1lc3BhY2UgcXVhbGlmaWVycyBiZWZvcmUgc3ltYm9sc1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoIXxcXFxcPyk/OicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogJzooPyFcXFxccyknLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgU1RSSU5HLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IFJVQllfTUVUSE9EX1JFXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIE5VTUJFUixcbiAgICB7XG4gICAgICAvLyBuZWdhdGl2ZS1sb29rIGZvcndhcmQgYXR0ZW1wcyB0byBwcmV2ZW50IGZhbHNlIG1hdGNoZXMgbGlrZTpcbiAgICAgIC8vIEBpZGVudEAgb3IgJGlkZW50JCB0aGF0IG1pZ2h0IGluZGljYXRlIHRoaXMgaXMgbm90IHJ1YnkgYXQgYWxsXG4gICAgICBjbGFzc05hbWU6IFwidmFyaWFibGVcIixcbiAgICAgIGJlZ2luOiAnKFxcXFwkXFxcXFcpfCgoXFxcXCR8QEA/KShcXFxcdyspKSg/PVteQCQ/XSknICsgYCg/IVtBLVphLXpdKSg/IVtAJD8nXSlgXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgYmVnaW46IC9cXHwvLFxuICAgICAgZW5kOiAvXFx8LyxcbiAgICAgIHJlbGV2YW5jZTogMCwgLy8gdGhpcyBjb3VsZCBiZSBhIGxvdCBvZiB0aGluZ3MgKGluIG90aGVyIGxhbmd1YWdlcykgb3RoZXIgdGhhbiBwYXJhbXNcbiAgICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3x1bmxlc3MpXFxcXHMqJyxcbiAgICAgIGtleXdvcmRzOiAndW5sZXNzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICBTVUJTVFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46ICcvJyxcbiAgICAgICAgICAgICAgZW5kOiAnL1thLXpdKidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvJXJcXHsvLFxuICAgICAgICAgICAgICBlbmQ6IC9cXH1bYS16XSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyXFxcXCgnLFxuICAgICAgICAgICAgICBlbmQ6ICdcXFxcKVthLXpdKidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnJXIhJyxcbiAgICAgICAgICAgICAgZW5kOiAnIVthLXpdKidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnJXJcXFxcWycsXG4gICAgICAgICAgICAgIGVuZDogJ1xcXFxdW2Etel0qJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXS5jb25jYXQoSVJCX09CSkVDVCwgQ09NTUVOVF9NT0RFUyksXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF0uY29uY2F0KElSQl9PQkpFQ1QsIENPTU1FTlRfTU9ERVMpO1xuXG4gIFNVQlNULmNvbnRhaW5zID0gUlVCWV9ERUZBVUxUX0NPTlRBSU5TO1xuICBQQVJBTVMuY29udGFpbnMgPSBSVUJZX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgLy8gPj5cbiAgLy8gPz5cbiAgY29uc3QgU0lNUExFX1BST01QVCA9IFwiWz4/XT5cIjtcbiAgLy8gaXJiKG1haW4pOjAwMTowPlxuICBjb25zdCBERUZBVUxUX1BST01QVCA9IFwiW1xcXFx3I10rXFxcXChcXFxcdytcXFxcKTpcXFxcZCs6XFxcXGQrPlwiO1xuICBjb25zdCBSVk1fUFJPTVBUID0gXCIoXFxcXHcrLSk/XFxcXGQrXFxcXC5cXFxcZCtcXFxcLlxcXFxkKyhwXFxcXGQrKT9bXlxcXFxkXVtePl0rPlwiO1xuXG4gIGNvbnN0IElSQl9ERUZBVUxUID0gW1xuICAgIHtcbiAgICAgIGJlZ2luOiAvXlxccyo9Pi8sXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBSVUJZX0RFRkFVTFRfQ09OVEFJTlNcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICdeKCcgKyBTSU1QTEVfUFJPTVBUICsgXCJ8XCIgKyBERUZBVUxUX1BST01QVCArICd8JyArIFJWTV9QUk9NUFQgKyAnKSg/PVsgXSknLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfVxuICBdO1xuXG4gIENPTU1FTlRfTU9ERVMudW5zaGlmdChJUkJfT0JKRUNUKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdSdWJ5JyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncmInLFxuICAgICAgJ2dlbXNwZWMnLFxuICAgICAgJ3BvZHNwZWMnLFxuICAgICAgJ3Rob3InLFxuICAgICAgJ2lyYidcbiAgICBdLFxuICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlNIRUJBTkcoe1xuICAgICAgICBiaW5hcnk6IFwicnVieVwiXG4gICAgICB9KVxuICAgIF1cbiAgICAgIC5jb25jYXQoSVJCX0RFRkFVTFQpXG4gICAgICAuY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gICAgICAuY29uY2F0KFJVQllfREVGQVVMVF9DT05UQUlOUylcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBydWJ5O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEVSQiAoRW1iZWRkZWQgUnVieSlcblJlcXVpcmVzOiB4bWwuanMsIHJ1YnkuanNcbkF1dGhvcjogTHVjYXMgTWF6emEgPGx1Y2FzdG1henphQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogS2Fzc2lvIEJvcmdlcyA8a2Fzc2lvYm9yZ2VzbUBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogXCJCcmlkZ2VcIiBsYW5ndWFnZSBkZWZpbmluZyBmcmFnbWVudHMgb2YgUnVieSBpbiBIVE1MIHdpdGhpbiA8JSAuLiAlPlxuV2Vic2l0ZTogaHR0cHM6Ly9ydWJ5LWRvYy5vcmcvc3RkbGliLTIuNi41L2xpYmRvYy9lcmIvcmRvYy9FUkIuaHRtbFxuQ2F0ZWdvcnk6IHRlbXBsYXRlXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZXJiKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRVJCJyxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnPCUjJywgJyU+JyksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCVbJT0tXT8nLFxuICAgICAgICBlbmQ6ICdbJS1dPyU+JyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVyYjtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogRXJsYW5nIFJFUExcbkF1dGhvcjogU2VyZ2V5IElnbmF0b3YgPHNlcmdleUBpZ25hdG92LnNwYi5zdT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmVybGFuZy5vcmdcbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZXJsYW5nUmVwbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0VybGFuZyBSRVBMJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdzcGF3biBzcGF3bl9saW5rIHNlbGYnLFxuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FmdGVyIGFuZCBhbmRhbHNvfDEwIGJhbmQgYmVnaW4gYm5vdCBib3IgYnNsIGJzciBieG9yIGNhc2UgY2F0Y2ggY29uZCBkaXYgZW5kIGZ1biBpZiAnICtcbiAgICAgICAgJ2xldCBub3Qgb2Ygb3Igb3JlbHNlfDEwIHF1ZXJ5IHJlY2VpdmUgcmVtIHRyeSB3aGVuIHhvcidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15bMC05XSs+ICcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJyUnLCAnJCcpLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFxkKyhfXFxcXGQrKSojW2EtZkEtRjAtOV0rKF9bYS1mQS1GMC05XSspKnxcXFxcZCsoX1xcXFxkKykqKFxcXFwuXFxcXGQrKF9cXFxcZCspKik/KFtlRV1bLStdP1xcXFxkKyk/KScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAgICAgL1xcPyg6Oik/LyxcbiAgICAgICAgICAvKFtBLVpdXFx3KikvLCAvLyBhdCBsZWFzdCBvbmUgaWRlbnRpZmllclxuICAgICAgICAgIC8oKDo6KVtBLVpdXFx3KikqLyAvLyBwZXJoYXBzIG1vcmVcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICctPidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnb2snXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyEnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhcXFxcYlthLXpcXCddW2EtekEtWjAtOV9cXCddKjpbYS16XFwnXVthLXpBLVowLTlfXFwnXSopfChcXFxcYlthLXpcXCddW2EtekEtWjAtOV9cXCddKiknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW0EtWl1bYS16QS1aMC05X1xcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVybGFuZ1JlcGw7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogRXJsYW5nXG5EZXNjcmlwdGlvbjogRXJsYW5nIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uYWwgbGFuZ3VhZ2UsIHdpdGggc3RyaWN0IGV2YWx1YXRpb24sIHNpbmdsZSBhc3NpZ25tZW50LCBhbmQgZHluYW1pYyB0eXBpbmcuXG5BdXRob3I6IE5pa29sYXkgWmFraGFyb3YgPG5pa29sYXkuZGVzaEBnbWFpbC5jb20+LCBEbWl0cnkgS292ZWdhIDxhcmhpYm90QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmVybGFuZy5vcmdcbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZXJsYW5nKGhsanMpIHtcbiAgY29uc3QgQkFTSUNfQVRPTV9SRSA9ICdbYS16XFwnXVthLXpBLVowLTlfXFwnXSonO1xuICBjb25zdCBGVU5DVElPTl9OQU1FX1JFID0gJygnICsgQkFTSUNfQVRPTV9SRSArICc6JyArIEJBU0lDX0FUT01fUkUgKyAnfCcgKyBCQVNJQ19BVE9NX1JFICsgJyknO1xuICBjb25zdCBFUkxBTkdfUkVTRVJWRUQgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhZnRlciBhbmQgYW5kYWxzb3wxMCBiYW5kIGJlZ2luIGJub3QgYm9yIGJzbCBienIgYnhvciBjYXNlIGNhdGNoIGNvbmQgZGl2IGVuZCBmdW4gaWYgJyArXG4gICAgICAnbGV0IG5vdCBvZiBvcmVsc2V8MTAgcXVlcnkgcmVjZWl2ZSByZW0gdHJ5IHdoZW4geG9yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIHRydWUnXG4gIH07XG5cbiAgY29uc3QgQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgnJScsICckJyk7XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrKF9cXFxcZCspKiNbYS1mQS1GMC05XSsoX1thLWZBLUYwLTldKykqfFxcXFxkKyhfXFxcXGQrKSooXFxcXC5cXFxcZCsoX1xcXFxkKykqKT8oW2VFXVstK10/XFxcXGQrKT8pJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTkFNRURfRlVOID0ge1xuICAgIGJlZ2luOiAnZnVuXFxcXHMrJyArIEJBU0lDX0FUT01fUkUgKyAnL1xcXFxkKydcbiAgfTtcbiAgY29uc3QgRlVOQ1RJT05fQ0FMTCA9IHtcbiAgICBiZWdpbjogRlVOQ1RJT05fTkFNRV9SRSArICdcXFxcKCcsXG4gICAgZW5kOiAnXFxcXCknLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fTkFNRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgLy8gXCJjb250YWluc1wiIGRlZmluZWQgbGF0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFRVUExFID0ge1xuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIHJlbGV2YW5jZTogMFxuICAgIC8vIFwiY29udGFpbnNcIiBkZWZpbmVkIGxhdGVyXG4gIH07XG4gIGNvbnN0IFZBUjEgPSB7XG4gICAgYmVnaW46ICdcXFxcYl8oW0EtWl1bQS1aYS16MC05X10qKT8nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBWQVIyID0ge1xuICAgIGJlZ2luOiAnW0EtWl1bYS16QS1aMC05X10qJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgUkVDT1JEX0FDQ0VTUyA9IHtcbiAgICBiZWdpbjogJyMnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyMnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFx7LyxcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIC8vIFwiY29udGFpbnNcIiBkZWZpbmVkIGxhdGVyXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEJMT0NLX1NUQVRFTUVOVFMgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2Z1biByZWNlaXZlIGlmIHRyeSBjYXNlJyxcbiAgICBlbmQ6ICdlbmQnLFxuICAgIGtleXdvcmRzOiBFUkxBTkdfUkVTRVJWRURcbiAgfTtcbiAgQkxPQ0tfU1RBVEVNRU5UUy5jb250YWlucyA9IFtcbiAgICBDT01NRU5ULFxuICAgIE5BTUVEX0ZVTixcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7XG4gICAgICBjbGFzc05hbWU6ICcnXG4gICAgfSksXG4gICAgQkxPQ0tfU1RBVEVNRU5UUyxcbiAgICBGVU5DVElPTl9DQUxMLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSLFxuICAgIFRVUExFLFxuICAgIFZBUjEsXG4gICAgVkFSMixcbiAgICBSRUNPUkRfQUNDRVNTXG4gIF07XG5cbiAgY29uc3QgQkFTSUNfTU9ERVMgPSBbXG4gICAgQ09NTUVOVCxcbiAgICBOQU1FRF9GVU4sXG4gICAgQkxPQ0tfU1RBVEVNRU5UUyxcbiAgICBGVU5DVElPTl9DQUxMLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSLFxuICAgIFRVUExFLFxuICAgIFZBUjEsXG4gICAgVkFSMixcbiAgICBSRUNPUkRfQUNDRVNTXG4gIF07XG4gIEZVTkNUSU9OX0NBTEwuY29udGFpbnNbMV0uY29udGFpbnMgPSBCQVNJQ19NT0RFUztcbiAgVFVQTEUuY29udGFpbnMgPSBCQVNJQ19NT0RFUztcbiAgUkVDT1JEX0FDQ0VTUy5jb250YWluc1sxXS5jb250YWlucyA9IEJBU0lDX01PREVTO1xuXG4gIGNvbnN0IERJUkVDVElWRVMgPSBbXG4gICAgXCItbW9kdWxlXCIsXG4gICAgXCItcmVjb3JkXCIsXG4gICAgXCItdW5kZWZcIixcbiAgICBcIi1leHBvcnRcIixcbiAgICBcIi1pZmRlZlwiLFxuICAgIFwiLWlmbmRlZlwiLFxuICAgIFwiLWF1dGhvclwiLFxuICAgIFwiLWNvcHlyaWdodFwiLFxuICAgIFwiLWRvY1wiLFxuICAgIFwiLXZzblwiLFxuICAgIFwiLWltcG9ydFwiLFxuICAgIFwiLWluY2x1ZGVcIixcbiAgICBcIi1pbmNsdWRlX2xpYlwiLFxuICAgIFwiLWNvbXBpbGVcIixcbiAgICBcIi1kZWZpbmVcIixcbiAgICBcIi1lbHNlXCIsXG4gICAgXCItZW5kaWZcIixcbiAgICBcIi1maWxlXCIsXG4gICAgXCItYmVoYXZpb3VyXCIsXG4gICAgXCItYmVoYXZpb3JcIixcbiAgICBcIi1zcGVjXCJcbiAgXTtcblxuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IEJBU0lDX01PREVTXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0VybGFuZycsXG4gICAgYWxpYXNlczogWydlcmwnXSxcbiAgICBrZXl3b3JkczogRVJMQU5HX1JFU0VSVkVELFxuICAgIGlsbGVnYWw6ICcoPC98XFxcXCo9fFxcXFwrPXwtPXwvXFxcXCp8XFxcXCovfFxcXFwoXFxcXCp8XFxcXCpcXFxcKSknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdeJyArIEJBU0lDX0FUT01fUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgICAgICBlbmQ6ICctPicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXCh8I3wvL3wvXFxcXCp8XFxcXFxcXFx8Onw7JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgYmVnaW46IEJBU0lDX0FUT01fUkVcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICc7fFxcXFwuJyxcbiAgICAgICAgICBrZXl3b3JkczogRVJMQU5HX1JFU0VSVkVELFxuICAgICAgICAgIGNvbnRhaW5zOiBCQVNJQ19NT0RFU1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ09NTUVOVCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeLScsXG4gICAgICAgIGVuZDogJ1xcXFwuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAkcGF0dGVybjogJy0nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgICAgICBrZXl3b3JkOiBESVJFQ1RJVkVTLm1hcCh4ID0+IGAke3h9fDEuNWApLmpvaW4oXCIgXCIpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIE5VTUJFUixcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBSRUNPUkRfQUNDRVNTLFxuICAgICAgVkFSMSxcbiAgICAgIFZBUjIsXG4gICAgICBUVVBMRSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXC4kL1xuICAgICAgfSAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcmxhbmc7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogRXhjZWwgZm9ybXVsYWVcbkF1dGhvcjogVmljdG9yIFpob3UgPE9pQ011ZGtpcHNAdXNlcnMubm9yZXBseS5naXRodWIuY29tPlxuRGVzY3JpcHRpb246IEV4Y2VsIGZvcm11bGFlXG5XZWJzaXRlOiBodHRwczovL3Byb2R1Y3RzLm9mZmljZS5jb20vZW4tdXMvZXhjZWwvXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZXhjZWwoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdFeGNlbCBmb3JtdWxhZScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3hsc3gnLFxuICAgICAgJ3hscydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGltcG9ydGVkIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNTEzMDQyNzEwL2h0dHBzOi8vc3VwcG9ydC5vZmZpY2UuY29tL2VuLXVzL2FydGljbGUvRXhjZWwtZnVuY3Rpb25zLWFscGhhYmV0aWNhbC1iMzk0NDU3Mi0yNTVkLTRlZmItYmI5Ni1jNmQ5MDAzM2UxODhcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9bYS16QS1aXVtcXHdcXC5dKi8sXG4gICAgICBidWlsdF9pbjogJ0FCUyBBQ0NSSU5UIEFDQ1JJTlRNIEFDT1MgQUNPU0ggQUNPVCBBQ09USCBBR0dSRUdBVEUgQUREUkVTUyBBTU9SREVHUkMgQU1PUkxJTkMgQU5EIEFSQUJJQyBBUkVBUyBBU0MgQVNJTiBBU0lOSCBBVEFOIEFUQU4yIEFUQU5IIEFWRURFViBBVkVSQUdFIEFWRVJBR0VBIEFWRVJBR0VJRiBBVkVSQUdFSUZTIEJBSFRURVhUIEJBU0UgQkVTU0VMSSBCRVNTRUxKIEJFU1NFTEsgQkVTU0VMWSBCRVRBRElTVCBCRVRBLkRJU1QgQkVUQUlOViBCRVRBLklOViBCSU4yREVDIEJJTjJIRVggQklOMk9DVCBCSU5PTURJU1QgQklOT00uRElTVCBCSU5PTS5ESVNULlJBTkdFIEJJTk9NLklOViBCSVRBTkQgQklUTFNISUZUIEJJVE9SIEJJVFJTSElGVCBCSVRYT1IgQ0FMTCBDRUlMSU5HIENFSUxJTkcuTUFUSCBDRUlMSU5HLlBSRUNJU0UgQ0VMTCBDSEFSIENISURJU1QgQ0hJSU5WIENISVRFU1QgQ0hJU1EuRElTVCBDSElTUS5ESVNULlJUIENISVNRLklOViBDSElTUS5JTlYuUlQgQ0hJU1EuVEVTVCBDSE9PU0UgQ0xFQU4gQ09ERSBDT0xVTU4gQ09MVU1OUyBDT01CSU4gQ09NQklOQSBDT01QTEVYIENPTkNBVCBDT05DQVRFTkFURSBDT05GSURFTkNFIENPTkZJREVOQ0UuTk9STSBDT05GSURFTkNFLlQgQ09OVkVSVCBDT1JSRUwgQ09TIENPU0ggQ09UIENPVEggQ09VTlQgQ09VTlRBIENPVU5UQkxBTksgQ09VTlRJRiBDT1VOVElGUyBDT1VQREFZQlMgQ09VUERBWVMgQ09VUERBWVNOQyBDT1VQTkNEIENPVVBOVU0gQ09VUFBDRCBDT1ZBUiBDT1ZBUklBTkNFLlAgQ09WQVJJQU5DRS5TIENSSVRCSU5PTSBDU0MgQ1NDSCBDVUJFS1BJTUVNQkVSIENVQkVNRU1CRVIgQ1VCRU1FTUJFUlBST1BFUlRZIENVQkVSQU5LRURNRU1CRVIgQ1VCRVNFVCBDVUJFU0VUQ09VTlQgQ1VCRVZBTFVFIENVTUlQTVQgQ1VNUFJJTkMgREFURSBEQVRFRElGIERBVEVWQUxVRSBEQVZFUkFHRSBEQVkgREFZUyBEQVlTMzYwIERCIERCQ1MgRENPVU5UIERDT1VOVEEgRERCIERFQzJCSU4gREVDMkhFWCBERUMyT0NUIERFQ0lNQUwgREVHUkVFUyBERUxUQSBERVZTUSBER0VUIERJU0MgRE1BWCBETUlOIERPTExBUiBET0xMQVJERSBET0xMQVJGUiBEUFJPRFVDVCBEU1RERVYgRFNUREVWUCBEU1VNIERVUkFUSU9OIERWQVIgRFZBUlAgRURBVEUgRUZGRUNUIEVOQ09ERVVSTCBFT01PTlRIIEVSRiBFUkYuUFJFQ0lTRSBFUkZDIEVSRkMuUFJFQ0lTRSBFUlJPUi5UWVBFIEVVUk9DT05WRVJUIEVWRU4gRVhBQ1QgRVhQIEVYUE9OLkRJU1QgRVhQT05ESVNUIEZBQ1QgRkFDVERPVUJMRSBGQUxTRXwwIEYuRElTVCBGRElTVCBGLkRJU1QuUlQgRklMVEVSWE1MIEZJTkQgRklOREIgRi5JTlYgRi5JTlYuUlQgRklOViBGSVNIRVIgRklTSEVSSU5WIEZJWEVEIEZMT09SIEZMT09SLk1BVEggRkxPT1IuUFJFQ0lTRSBGT1JFQ0FTVCBGT1JFQ0FTVC5FVFMgRk9SRUNBU1QuRVRTLkNPTkZJTlQgRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIEZPUkVDQVNULkVUUy5TVEFUIEZPUkVDQVNULkxJTkVBUiBGT1JNVUxBVEVYVCBGUkVRVUVOQ1kgRi5URVNUIEZURVNUIEZWIEZWU0NIRURVTEUgR0FNTUEgR0FNTUEuRElTVCBHQU1NQURJU1QgR0FNTUEuSU5WIEdBTU1BSU5WIEdBTU1BTE4gR0FNTUFMTi5QUkVDSVNFIEdBVVNTIEdDRCBHRU9NRUFOIEdFU1RFUCBHRVRQSVZPVERBVEEgR1JPV1RIIEhBUk1FQU4gSEVYMkJJTiBIRVgyREVDIEhFWDJPQ1QgSExPT0tVUCBIT1VSIEhZUEVSTElOSyBIWVBHRU9NLkRJU1QgSFlQR0VPTURJU1QgSUYgSUZFUlJPUiBJRk5BIElGUyBJTUFCUyBJTUFHSU5BUlkgSU1BUkdVTUVOVCBJTUNPTkpVR0FURSBJTUNPUyBJTUNPU0ggSU1DT1QgSU1DU0MgSU1DU0NIIElNRElWIElNRVhQIElNTE4gSU1MT0cxMCBJTUxPRzIgSU1QT1dFUiBJTVBST0RVQ1QgSU1SRUFMIElNU0VDIElNU0VDSCBJTVNJTiBJTVNJTkggSU1TUVJUIElNU1VCIElNU1VNIElNVEFOIElOREVYIElORElSRUNUIElORk8gSU5UIElOVEVSQ0VQVCBJTlRSQVRFIElQTVQgSVJSIElTQkxBTksgSVNFUlIgSVNFUlJPUiBJU0VWRU4gSVNGT1JNVUxBIElTTE9HSUNBTCBJU05BIElTTk9OVEVYVCBJU05VTUJFUiBJU09ERCBJU1JFRiBJU1RFWFQgSVNPLkNFSUxJTkcgSVNPV0VFS05VTSBJU1BNVCBKSVMgS1VSVCBMQVJHRSBMQ00gTEVGVCBMRUZUQiBMRU4gTEVOQiBMSU5FU1QgTE4gTE9HIExPRzEwIExPR0VTVCBMT0dJTlYgTE9HTk9STS5ESVNUIExPR05PUk1ESVNUIExPR05PUk0uSU5WIExPT0tVUCBMT1dFUiBNQVRDSCBNQVggTUFYQSBNQVhJRlMgTURFVEVSTSBNRFVSQVRJT04gTUVESUFOIE1JRCBNSURCcyBNSU4gTUlOSUZTIE1JTkEgTUlOVVRFIE1JTlZFUlNFIE1JUlIgTU1VTFQgTU9EIE1PREUgTU9ERS5NVUxUIE1PREUuU05HTCBNT05USCBNUk9VTkQgTVVMVElOT01JQUwgTVVOSVQgTiBOQSBORUdCSU5PTS5ESVNUIE5FR0JJTk9NRElTVCBORVRXT1JLREFZUyBORVRXT1JLREFZUy5JTlRMIE5PTUlOQUwgTk9STS5ESVNUIE5PUk1ESVNUIE5PUk1JTlYgTk9STS5JTlYgTk9STS5TLkRJU1QgTk9STVNESVNUIE5PUk0uUy5JTlYgTk9STVNJTlYgTk9UIE5PVyBOUEVSIE5QViBOVU1CRVJWQUxVRSBPQ1QyQklOIE9DVDJERUMgT0NUMkhFWCBPREQgT0RERlBSSUNFIE9EREZZSUVMRCBPRERMUFJJQ0UgT0RETFlJRUxEIE9GRlNFVCBPUiBQRFVSQVRJT04gUEVBUlNPTiBQRVJDRU5USUxFLkVYQyBQRVJDRU5USUxFLklOQyBQRVJDRU5USUxFIFBFUkNFTlRSQU5LLkVYQyBQRVJDRU5UUkFOSy5JTkMgUEVSQ0VOVFJBTksgUEVSTVVUIFBFUk1VVEFUSU9OQSBQSEkgUEhPTkVUSUMgUEkgUE1UIFBPSVNTT04uRElTVCBQT0lTU09OIFBPV0VSIFBQTVQgUFJJQ0UgUFJJQ0VESVNDIFBSSUNFTUFUIFBST0IgUFJPRFVDVCBQUk9QRVIgUFYgUVVBUlRJTEUgUVVBUlRJTEUuRVhDIFFVQVJUSUxFLklOQyBRVU9USUVOVCBSQURJQU5TIFJBTkQgUkFOREJFVFdFRU4gUkFOSy5BVkcgUkFOSy5FUSBSQU5LIFJBVEUgUkVDRUlWRUQgUkVHSVNURVIuSUQgUkVQTEFDRSBSRVBMQUNFQiBSRVBUIFJJR0hUIFJJR0hUQiBST01BTiBST1VORCBST1VORERPV04gUk9VTkRVUCBST1cgUk9XUyBSUkkgUlNRIFJURCBTRUFSQ0ggU0VBUkNIQiBTRUMgU0VDSCBTRUNPTkQgU0VSSUVTU1VNIFNIRUVUIFNIRUVUUyBTSUdOIFNJTiBTSU5IIFNLRVcgU0tFVy5QIFNMTiBTTE9QRSBTTUFMTCBTUUwuUkVRVUVTVCBTUVJUIFNRUlRQSSBTVEFOREFSRElaRSBTVERFViBTVERFVi5QIFNUREVWLlMgU1RERVZBIFNUREVWUCBTVERFVlBBIFNURVlYIFNVQlNUSVRVVEUgU1VCVE9UQUwgU1VNIFNVTUlGIFNVTUlGUyBTVU1QUk9EVUNUIFNVTVNRIFNVTVgyTVkyIFNVTVgyUFkyIFNVTVhNWTIgU1dJVENIIFNZRCBUIFRBTiBUQU5IIFRCSUxMRVEgVEJJTExQUklDRSBUQklMTFlJRUxEIFQuRElTVCBULkRJU1QuMlQgVC5ESVNULlJUIFRESVNUIFRFWFQgVEVYVEpPSU4gVElNRSBUSU1FVkFMVUUgVC5JTlYgVC5JTlYuMlQgVElOViBUT0RBWSBUUkFOU1BPU0UgVFJFTkQgVFJJTSBUUklNTUVBTiBUUlVFfDAgVFJVTkMgVC5URVNUIFRURVNUIFRZUEUgVU5JQ0hBUiBVTklDT0RFIFVQUEVSIFZBTFVFIFZBUiBWQVIuUCBWQVIuUyBWQVJBIFZBUlAgVkFSUEEgVkRCIFZMT09LVVAgV0VCU0VSVklDRSBXRUVLREFZIFdFRUtOVU0gV0VJQlVMTCBXRUlCVUxMLkRJU1QgV09SS0RBWSBXT1JLREFZLklOVEwgWElSUiBYTlBWIFhPUiBZRUFSIFlFQVJGUkFDIFlJRUxEIFlJRUxERElTQyBZSUVMRE1BVCBaLlRFU1QgWlRFU1QnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICAvKiBtYXRjaGVzIGEgYmVnaW5uaW5nIGVxdWFsIHNpZ24gZm91bmQgaW4gRXhjZWwgZm9ybXVsYSBleGFtcGxlcyAqL1xuICAgICAgICBiZWdpbjogL149LyxcbiAgICAgICAgZW5kOiAvW149XS8sXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogLz0vLCAvKiBvbmx5IGFsbG93IHNpbmdsZSBlcXVhbCBzaWduIGF0IGZyb250IG9mIGxpbmUgKi9cbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8qIHRlY2huaWNhbGx5LCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIDIgbGV0dGVycyBpbiBjb2x1bW4gbmFtZXMsIGJ1dCB0aGlzIHByZXZlbnRzIGNvbmZsaWN0IHdpdGggc29tZSBrZXl3b3JkcyAqL1xuICAgICAge1xuICAgICAgICAvKiBtYXRjaGVzIGEgcmVmZXJlbmNlIHRvIGEgc2luZ2xlIGNlbGwgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9cXGJbQS1aXXsxLDJ9XFxkK1xcYi8sXG4gICAgICAgIGVuZDogL1teXFxkXS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLyogbWF0Y2hlcyBhIHJlZmVyZW5jZSB0byBhIHJhbmdlIG9mIGNlbGxzICovXG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvW0EtWl17MCwyfVxcZCo6W0EtWl17MCwyfVxcZCovLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCUpPycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8qIEV4Y2VsIGZvcm11bGEgY29tbWVudHMgYXJlIGRvbmUgYnkgcHV0dGluZyB0aGUgY29tbWVudCBpbiBhIGZ1bmN0aW9uIGNhbGwgdG8gTigpICovXG4gICAgICBobGpzLkNPTU1FTlQoL1xcYk5cXCgvLCAvXFwpLyxcbiAgICAgICAge1xuICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgIGlsbGVnYWw6IC9cXG4vXG4gICAgICAgIH0pXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4Y2VsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEZJWFxuQXV0aG9yOiBCcmVudCBCcmFkYnVyeSA8YnJlbnRAYnJlbnRpdW0uY29tPlxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGZpeChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0ZJWCcsXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBiZWdpbjogL1teXFx1MjQwMVxcdTAwMDFdKy8sXG4gICAgICBlbmQ6IC9bXFx1MjQwMVxcdTAwMDFdLyxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgIHJldHVybkVuZDogZmFsc2UsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC8oW15cXHUyNDAxXFx1MDAwMT1dKykvLFxuICAgICAgICAgIGVuZDogLz0oW15cXHUyNDAxXFx1MDAwMT1dKykvLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICByZXR1cm5CZWdpbjogZmFsc2UsXG4gICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvPS8sXG4gICAgICAgICAgZW5kOiAvKFtcXHUyNDAxXFx1MDAwMV0pLyxcbiAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZml4O1xuIiwKICAgICIvKlxuIExhbmd1YWdlOiBGbGl4XG4gQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbiBBdXRob3I6IE1hZ251cyBNYWRzZW4gPG1tYWRzZW5AdXdhdGVybG9vLmNhPlxuIFdlYnNpdGU6IGh0dHBzOi8vZmxpeC5kZXYvXG4gKi9cblxuIC8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBmbGl4KGhsanMpIHtcbiAgY29uc3QgQ0hBUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJygufFxcXFxbeFh1VV1bYS16QS1aMC05XSspJy9cbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgZW5kOiAnXCInXG4gICAgfV1cbiAgfTtcblxuICBjb25zdCBOQU1FID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vXG4gIH07XG5cbiAgY29uc3QgTUVUSE9EID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnZGVmJyxcbiAgICBlbmQ6IC9bOj17XFxbKFxcbjtdLyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbTkFNRV1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdGbGl4JyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnLFxuICAgICAga2V5d29yZDogJ2Nhc2UgY2xhc3MgZGVmIGVsc2UgZW51bSBpZiBpbXBsIGltcG9ydCBpbiBsYXQgcmVsIGluZGV4IGxldCBtYXRjaCBuYW1lc3BhY2Ugc3dpdGNoIHR5cGUgeWllbGQgd2l0aCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQ0hBUixcbiAgICAgIFNUUklORyxcbiAgICAgIE1FVEhPRCxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGl4O1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBGb3J0cmFuXG5BdXRob3I6IEFudGhvbnkgU2NlbWFtYSA8c2NlbWFtYUBpcnNhbWMudXBzLXRsc2UuZnI+XG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3J0cmFuXG5DYXRlZ29yeTogc2NpZW50aWZpY1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGZvcnRyYW4oaGxqcykge1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKSdcbiAgfTtcblxuICBjb25zdCBDT01NRU5UID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJyEnLCAnJCcsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9KSxcbiAgICAgIC8vIGFsbG93IEZPUlRSQU4gNzcgc3R5bGUgY29tbWVudHNcbiAgICAgIGhsanMuQ09NTUVOVCgnXkNbIF0nLCAnJCcsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9KSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXkMkJywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSlcbiAgICBdXG4gIH07XG5cbiAgLy8gcmVnZXggaW4gYm90aCBmb3J0cmFuIGFuZCBpcnBmOTAgc2hvdWxkIG1hdGNoXG4gIGNvbnN0IE9QVElPTkFMX05VTUJFUl9TVUZGSVggPSAvKF9bYS16X1xcZF0rKT8vO1xuICBjb25zdCBPUFRJT05BTF9OVU1CRVJfRVhQID0gLyhbZGVdWystXT9cXGQrKT8vO1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogY29uY2F0KC9cXGJcXGQrLywgL1xcLihcXGQqKS8sIE9QVElPTkFMX05VTUJFUl9FWFAsIE9QVElPTkFMX05VTUJFUl9TVUZGSVgpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogY29uY2F0KC9cXGJcXGQrLywgT1BUSU9OQUxfTlVNQkVSX0VYUCwgT1BUSU9OQUxfTlVNQkVSX1NVRkZJWClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBjb25jYXQoL1xcLlxcZCsvLCBPUFRJT05BTF9OVU1CRVJfRVhQLCBPUFRJT05BTF9OVU1CRVJfU1VGRklYKVxuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fREVGID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnc3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtJyxcbiAgICBpbGxlZ2FsOiAnWyR7PVxcXFxuXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgUEFSQU1TXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBsaXRlcmFsOiAnLkZhbHNlLiAuVHJ1ZS4nLFxuICAgIGtleXdvcmQ6ICdraW5kIGRvIGNvbmN1cnJlbnQgbG9jYWwgc2hhcmVkIHdoaWxlIHByaXZhdGUgY2FsbCBpbnRyaW5zaWMgd2hlcmUgZWxzZXdoZXJlICcgK1xuICAgICAgJ3R5cGUgZW5kdHlwZSBlbmRtb2R1bGUgZW5kc2VsZWN0IGVuZGludGVyZmFjZSBlbmQgZW5kZG8gZW5kaWYgaWYgZm9yYWxsIGVuZGZvcmFsbCBvbmx5IGNvbnRhaW5zIGRlZmF1bHQgcmV0dXJuIHN0b3AgdGhlbiBibG9jayBlbmRibG9jayBlbmRhc3NvY2lhdGUgJyArXG4gICAgICAncHVibGljIHN1YnJvdXRpbmV8MTAgZnVuY3Rpb24gcHJvZ3JhbSAuYW5kLiAub3IuIC5ub3QuIC5sZS4gLmVxLiAuZ2UuIC5ndC4gLmx0LiAnICtcbiAgICAgICdnb3RvIHNhdmUgZWxzZSB1c2UgbW9kdWxlIHNlbGVjdCBjYXNlICcgK1xuICAgICAgJ2FjY2VzcyBibGFuayBkaXJlY3QgZXhpc3QgZmlsZSBmbXQgZm9ybSBmb3JtYXR0ZWQgaW9zdGF0IG5hbWUgbmFtZWQgbmV4dHJlYyBudW1iZXIgb3BlbmVkIHJlYyByZWNsIHNlcXVlbnRpYWwgc3RhdHVzIHVuZm9ybWF0dGVkIHVuaXQgJyArXG4gICAgICAnY29udGludWUgZm9ybWF0IHBhdXNlIGN5Y2xlIGV4aXQgJyArXG4gICAgICAnY19udWxsX2NoYXIgY19hbGVydCBjX2JhY2tzcGFjZSBjX2Zvcm1fZmVlZCBmbHVzaCB3YWl0IGRlY2ltYWwgcm91bmQgaW9tc2cgJyArXG4gICAgICAnc3luY2hyb25vdXMgbm9wYXNzIG5vbl9vdmVycmlkYWJsZSBwYXNzIHByb3RlY3RlZCB2b2xhdGlsZSBhYnN0cmFjdCBleHRlbmRzIGltcG9ydCAnICtcbiAgICAgICdub25faW50cmluc2ljIHZhbHVlIGRlZmVycmVkIGdlbmVyaWMgZmluYWwgZW51bWVyYXRvciBjbGFzcyBhc3NvY2lhdGUgYmluZCBlbnVtICcgK1xuICAgICAgJ2NfaW50IGNfc2hvcnQgY19sb25nIGNfbG9uZ19sb25nIGNfc2lnbmVkX2NoYXIgY19zaXplX3QgY19pbnQ4X3QgY19pbnQxNl90IGNfaW50MzJfdCBjX2ludDY0X3QgY19pbnRfbGVhc3Q4X3QgY19pbnRfbGVhc3QxNl90ICcgK1xuICAgICAgJ2NfaW50X2xlYXN0MzJfdCBjX2ludF9sZWFzdDY0X3QgY19pbnRfZmFzdDhfdCBjX2ludF9mYXN0MTZfdCBjX2ludF9mYXN0MzJfdCBjX2ludF9mYXN0NjRfdCBjX2ludG1heF90IENfaW50cHRyX3QgY19mbG9hdCBjX2RvdWJsZSAnICtcbiAgICAgICdjX2xvbmdfZG91YmxlIGNfZmxvYXRfY29tcGxleCBjX2RvdWJsZV9jb21wbGV4IGNfbG9uZ19kb3VibGVfY29tcGxleCBjX2Jvb2wgY19jaGFyIGNfbnVsbF9wdHIgY19udWxsX2Z1bnB0ciAnICtcbiAgICAgICdjX25ld19saW5lIGNfY2FycmlhZ2VfcmV0dXJuIGNfaG9yaXpvbnRhbF90YWIgY192ZXJ0aWNhbF90YWIgaXNvX2NfYmluZGluZyBjX2xvYyBjX2Z1bmxvYyBjX2Fzc29jaWF0ZWQgIGNfZl9wb2ludGVyICcgK1xuICAgICAgJ2NfcHRyIGNfZnVucHRyIGlzb19mb3J0cmFuX2VudiBjaGFyYWN0ZXJfc3RvcmFnZV9zaXplIGVycm9yX3VuaXQgZmlsZV9zdG9yYWdlX3NpemUgaW5wdXRfdW5pdCBpb3N0YXRfZW5kIGlvc3RhdF9lb3IgJyArXG4gICAgICAnbnVtZXJpY19zdG9yYWdlX3NpemUgb3V0cHV0X3VuaXQgY19mX3Byb2Nwb2ludGVyIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgJyArXG4gICAgICAnaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgbmV3dW5pdCBjb250aWd1b3VzIHJlY3Vyc2l2ZSAnICtcbiAgICAgICdwYWQgcG9zaXRpb24gYWN0aW9uIGRlbGltIHJlYWR3cml0ZSBlb3IgYWR2YW5jZSBubWwgaW50ZXJmYWNlIHByb2NlZHVyZSBuYW1lbGlzdCBpbmNsdWRlIHNlcXVlbmNlIGVsZW1lbnRhbCBwdXJlIGltcHVyZSAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgY2hhcmFjdGVyIGNvbXBsZXggbG9naWNhbCBjb2RpbWVuc2lvbiBkaW1lbnNpb24gYWxsb2NhdGFibGV8MTAgcGFyYW1ldGVyICcgK1xuICAgICAgJ2V4dGVybmFsIGltcGxpY2l0fDEwIG5vbmUgZG91YmxlIHByZWNpc2lvbiBhc3NpZ24gaW50ZW50IG9wdGlvbmFsIHBvaW50ZXIgJyArXG4gICAgICAndGFyZ2V0IGluIG91dCBjb21tb24gZXF1aXZhbGVuY2UgZGF0YScsXG4gICAgYnVpbHRfaW46ICdhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50ICcgK1xuICAgICAgJ2Rsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgJyArXG4gICAgICAnYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hICcgK1xuICAgICAgJ2lxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgJyArXG4gICAgICAncW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgJyArXG4gICAgICAnbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgJyArXG4gICAgICAnYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgJyArXG4gICAgICAnZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCAnICtcbiAgICAgICdtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0ICcgK1xuICAgICAgJ3JhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kICcgK1xuICAgICAgJ3NldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgJyArXG4gICAgICAnZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kICcgK1xuICAgICAgJ2llZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgJyArXG4gICAgICAnaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mICcgK1xuICAgICAgJ2Fjb3NoIGFzaW5oIGF0YW5oIGJlc3NlbF9qMCBiZXNzZWxfajEgYmVzc2VsX2puIGJlc3NlbF95MCBiZXNzZWxfeTEgYmVzc2VsX3luIGVyZiBlcmZjIGVyZmNfc2NhbGVkIGdhbW1hIGxvZ19nYW1tYSBoeXBvdCBub3JtMiAnICtcbiAgICAgICdhdG9taWNfZGVmaW5lIGF0b21pY19yZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUgbGVhZHogdHJhaWx6IHN0b3JhZ2Vfc2l6ZSBtZXJnZV9iaXRzICcgK1xuICAgICAgJ2JnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciAnICtcbiAgICAgICdudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2Ugc3luYyBjaGFuZ2UgdGVhbSBjb19icm9hZGNhc3QgY29fbWF4IGNvX21pbiBjb19zdW0gY29fcmVkdWNlJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdGb3J0cmFuJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdmOTAnLFxuICAgICAgJ2Y5NSdcbiAgICBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgRlVOQ1RJT05fREVGLFxuICAgICAgLy8gYWxsb3cgYEMgPSB2YWx1ZWAgZm9yIGFzc2lnbm1lbnRzIHNvIHRoZXkgYXJlbid0IG1pc2RldGVjdGVkXG4gICAgICAvLyBhcyBGb3J0cmFuIDc3IHN0eWxlIGNvbW1lbnRzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXkNcXHMqPSg/IT0pLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgQ09NTUVOVCxcbiAgICAgIE5VTUJFUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3J0cmFuO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEYjXG5BdXRob3I6IEpvbmFzIEZvbGxlc8O4IDxqb25hc0Bmb2xsZXNvZS5ubz5cbkNvbnRyaWJ1dG9yczogVHJveSBLZXJzaGF3IDxoZWxsb0B0cm95a2Vyc2hhdy5jb20+LCBIZW5yaWsgRmVsZHQgPGhlbnJpa0BoYWYuc2U+XG5XZWJzaXRlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvZnNoYXJwL1xuQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBmc2hhcnAoaGxqcykge1xuICBjb25zdCBUWVBFUEFSQU0gPSB7XG4gICAgYmVnaW46ICc8JyxcbiAgICBlbmQ6ICc+JyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICBiZWdpbjogLydbYS16QS1aMC05X10rL1xuICAgICAgfSlcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRiMnLFxuICAgIGFsaWFzZXM6IFsnZnMnXSxcbiAgICBrZXl3b3JkczpcbiAgICAgICdhYnN0cmFjdCBhbmQgYXMgYXNzZXJ0IGJhc2UgYmVnaW4gY2xhc3MgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb25lICcgK1xuICAgICAgJ2Rvd25jYXN0IGRvd250byBlbGlmIGVsc2UgZW5kIGV4Y2VwdGlvbiBleHRlcm4gZmFsc2UgZmluYWxseSBmb3IgJyArXG4gICAgICAnZnVuIGZ1bmN0aW9uIGdsb2JhbCBpZiBpbiBpbmhlcml0IGlubGluZSBpbnRlcmZhY2UgaW50ZXJuYWwgbGF6eSBsZXQgJyArXG4gICAgICAnbWF0Y2ggbWVtYmVyIG1vZHVsZSBtdXRhYmxlIG5hbWVzcGFjZSBuZXcgbnVsbCBvZiBvcGVuIG9yICcgK1xuICAgICAgJ292ZXJyaWRlIHByaXZhdGUgcHVibGljIHJlYyByZXR1cm4gc2lnIHN0YXRpYyBzdHJ1Y3QgdGhlbiB0byAnICtcbiAgICAgICd0cnVlIHRyeSB0eXBlIHVwY2FzdCB1c2UgdmFsIHZvaWQgd2hlbiB3aGlsZSB3aXRoIHlpZWxkJyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICAvLyBtb25hZCBidWlsZGVyIGtleXdvcmRzIChtYXRjaGVzIGJlZm9yZSBub24tYmFuZyBrd3MpXG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogL1xcYih5aWVsZHxyZXR1cm58bGV0fGRvKSEvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ0BcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1wiXCInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICAgIGVuZDogJ1wiXCJcIidcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwoXFxcXCooXFxcXHMpJywgJ1xcXFwqXFxcXCknLCB7XG4gICAgICAgIGNvbnRhaW5zOiBbXCJzZWxmXCJdXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAndHlwZScsXG4gICAgICAgIGVuZDogJ1xcXFwofD18JCcsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAgVFlQRVBBUkFNXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ1xcXFxbPCcsXG4gICAgICAgIGVuZDogJz5cXFxcXScsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXEIoXFwnW0EtWmEtel0pXFxcXGInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICBpbGxlZ2FsOiBudWxsXG4gICAgICB9KSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmc2hhcnA7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGFueU51bWJlck9mVGltZXMocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKCcsIHJlLCAnKSonKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGdhbXMoaGxqcykge1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fib3J0IGFjcm9ueW0gYWNyb255bXMgYWxpYXMgYWxsIGFuZCBhc3NpZ24gYmluYXJ5IGNhcmQgZGlhZyBkaXNwbGF5ICcgK1xuICAgICAgJ2Vsc2UgZXEgZmlsZSBmaWxlcyBmb3IgZnJlZSBnZSBndCBpZiBpbnRlZ2VyIGxlIGxvb3AgbHQgbWF4aW1pemluZyAnICtcbiAgICAgICdtaW5pbWl6aW5nIG1vZGVsIG1vZGVscyBuZSBuZWdhdGl2ZSBubyBub3Qgb3B0aW9uIG9wdGlvbnMgb3Igb3JkICcgK1xuICAgICAgJ3Bvc2l0aXZlIHByb2QgcHV0IHB1dHBhZ2UgcHV0dGwgcmVwZWF0IHNhbWVhcyBzZW1pY29udCBzZW1paW50IHNtYXggJyArXG4gICAgICAnc21pbiBzb2x2ZSBzb3MxIHNvczIgc3VtIHN5c3RlbSB0YWJsZSB0aGVuIHVudGlsIHVzaW5nIHdoaWxlIHhvciB5ZXMnLFxuICAgIGxpdGVyYWw6XG4gICAgICAnZXBzIGluZiBuYScsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYWJzIGFyY2NvcyBhcmNzaW4gYXJjdGFuIGFyY3RhbjIgQmV0YSBiZXRhUmVnIGJpbm9taWFsIGNlaWwgY2VudHJvcHkgJyArXG4gICAgICAnY29zIGNvc2ggY3ZQb3dlciBkaXYgZGl2MCBlRGlzdCBlbnRyb3B5IGVycm9yZiBleGVjU2VlZCBleHAgZmFjdCAnICtcbiAgICAgICdmbG9vciBmcmFjIGdhbW1hIGdhbW1hUmVnIGxvZyBsb2dCZXRhIGxvZ0dhbW1hIGxvZzEwIGxvZzIgbWFwVmFsIG1heCAnICtcbiAgICAgICdtaW4gbW9kIG5jcENNIG5jcEYgbmNwVlVwb3cgbmNwVlVzaW4gbm9ybWFsIHBpIHBvbHkgcG93ZXIgJyArXG4gICAgICAncmFuZEJpbm9taWFsIHJhbmRMaW5lYXIgcmFuZFRyaWFuZ2xlIHJvdW5kIHJQb3dlciBzaWdtb2lkIHNpZ24gJyArXG4gICAgICAnc2lnblBvd2VyIHNpbiBzaW5oIHNsZXhwIHNsbG9nMTAgc2xyZWMgc3FleHAgc3Fsb2cxMCBzcXIgc3FyZWMgc3FydCAnICtcbiAgICAgICd0YW4gdGFuaCB0cnVuYyB1bmlmb3JtIHVuaWZvcm1JbnQgdmNQb3dlciBib29sX2FuZCBib29sX2VxdiBib29sX2ltcCAnICtcbiAgICAgICdib29sX25vdCBib29sX29yIGJvb2xfeG9yIGlmVGhlbiByZWxfZXEgcmVsX2dlIHJlbF9ndCByZWxfbGUgcmVsX2x0ICcgK1xuICAgICAgJ3JlbF9uZSBnZGF5IGdkb3cgZ2hvdXIgZ2xlYXAgZ21pbGxpc2VjIGdtaW51dGUgZ21vbnRoIGdzZWNvbmQgZ3llYXIgJyArXG4gICAgICAnamRhdGUgam5vdyBqc3RhcnQganRpbWUgZXJyb3JMZXZlbCBleGVjRXJyb3IgZ2Ftc1JlbGVhc2UgZ2Ftc1ZlcnNpb24gJyArXG4gICAgICAnaGFuZGxlQ29sbGVjdCBoYW5kbGVEZWxldGUgaGFuZGxlU3RhdHVzIGhhbmRsZVN1Ym1pdCBoZWFwRnJlZSAnICtcbiAgICAgICdoZWFwTGltaXQgaGVhcFNpemUgam9iSGFuZGxlIGpvYktpbGwgam9iU3RhdHVzIGpvYlRlcm1pbmF0ZSAnICtcbiAgICAgICdsaWNlbnNlTGV2ZWwgbGljZW5zZVN0YXR1cyBtYXhFeGVjRXJyb3Igc2xlZXAgdGltZUNsb3NlIHRpbWVDb21wICcgK1xuICAgICAgJ3RpbWVFbGFwc2VkIHRpbWVFeGVjIHRpbWVTdGFydCdcbiAgfTtcbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTtcbiAgY29uc3QgU1lNQk9MUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPVtsZ2VueGNdPS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkL1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgUVNUUiA9IHsgLy8gT25lLWxpbmUgcXVvdGVkIGNvbW1lbnQgc3RyaW5nXG4gICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBjb25zdCBBU1NJR05NRU5UID0ge1xuICAgIGJlZ2luOiAnLycsXG4gICAgZW5kOiAnLycsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBRU1RSLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG4gIGNvbnN0IENPTU1FTlRfV09SRCA9IC9bYS16MC05JiMqPT9AXFxcXD48OiwoKSRbXFxdXy57fSErJV4tXSsvO1xuICBjb25zdCBERVNDVEVYVCA9IHsgLy8gUGFyYW1ldGVyL3NldC92YXJpYWJsZSBkZXNjcmlwdGlvbiB0ZXh0XG4gICAgYmVnaW46IC9bYS16XVthLXowLTlfXSooXFwoW2EtejAtOV8sIF0qXFwpKT9bIFxcdF0rLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZW5kOiAnJCcsXG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFTVFIsXG4gICAgICBBU1NJR05NRU5ULFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgLy8gb25lIGNvbW1lbnQgd29yZCwgdGhlbiBwb3NzaWJseSBtb3JlXG4gICAgICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAgICAgQ09NTUVOVF9XT1JELFxuICAgICAgICAgIC8vIFsgXSBiZWNhdXNlIFxccyB3b3VsZCBiZSB0b28gYnJvYWQgKG1hdGNoaW5nIG5ld2xpbmVzKVxuICAgICAgICAgIGFueU51bWJlck9mVGltZXMoY29uY2F0KC9bIF0rLywgQ09NTUVOVF9XT1JEKSlcbiAgICAgICAgKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dBTVMnLFxuICAgIGFsaWFzZXM6IFsnZ21zJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXlxcJG9udGV4dC8sIC9eXFwkb2ZmdGV4dC8pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCRbYS16MC05XSsnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1rZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXlxcXFwkW2EtejAtOV0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFwqJywgJyQnKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgLy8gRGVjbGFyYXRpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ3NldCBzZXRzIHBhcmFtZXRlciBwYXJhbWV0ZXJzIHZhcmlhYmxlIHZhcmlhYmxlcyAnICtcbiAgICAgICAgICAnc2NhbGFyIHNjYWxhcnMgZXF1YXRpb24gZXF1YXRpb25zJyxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXConLCAnJCcpLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIEFTU0lHTk1FTlQsXG4gICAgICAgICAgREVTQ1RFWFRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgLy8gdGFibGUgZW52aXJvbm1lbnRcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3RhYmxlJyxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgLy8gdGFibGUgaGVhZGVyIHJvd1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ3RhYmxlJyxcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtERVNDVEVYVF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFwqJywgJyQnKSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgICAvLyBUYWJsZSBkb2VzIG5vdCBjb250YWluIERFU0NURVhUIG9yIEFTU0lHTk1FTlRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eW2Etel1bYS16MC05XyxcXC0rJyAoKSRdK1xcLnsyfS8sXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgLy8gRnVuY3Rpb24gdGl0bGVcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXlthLXowLTlfXSsvXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgU1lNQk9MU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgU1lNQk9MU1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnYW1zO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEdBVVNTXG5BdXRob3I6IE1hdHQgRXZhbnMgPG1hdHRAYXB0ZWNoLmNvbT5cbkRlc2NyaXB0aW9uOiBHQVVTUyBNYXRoZW1hdGljYWwgYW5kIFN0YXRpc3RpY2FsIGxhbmd1YWdlXG5XZWJzaXRlOiBodHRwczovL3d3dy5hcHRlY2guY29tXG5DYXRlZ29yeTogc2NpZW50aWZpY1xuKi9cbmZ1bmN0aW9uIGdhdXNzKGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ2Jvb2wgYnJlYWsgY2FsbCBjYWxsZXhlIGNoZWNraW50ZXJydXB0IGNsZWFyIGNsZWFyZyBjbG9zZWFsbCBjbHMgY29tbG9nIGNvbXBpbGUgJyArXG4gICAgICAgICAgICAgICdjb250aW51ZSBjcmVhdGUgZGVidWcgZGVjbGFyZSBkZWxldGUgZGlzYWJsZSBkbGlicmFyeSBkbGxjYWxsIGRvIGRvcyBlZCBlZGl0IGVsc2UgJyArXG4gICAgICAgICAgICAgICdlbHNlaWYgZW5hYmxlIGVuZCBlbmRmb3IgZW5kaWYgZW5kcCBlbmRvIGVycm9ybG9nIGVycm9ybG9nYXQgZXhwciBleHRlcm5hbCBmbiAnICtcbiAgICAgICAgICAgICAgJ2ZvciBmb3JtYXQgZ290byBnb3N1YiBncmFwaCBpZiBrZXl3b3JkIGxldCBsaWIgbGlicmFyeSBsaW5lIGxvYWQgbG9hZGFycmF5IGxvYWRleGUgJyArXG4gICAgICAgICAgICAgICdsb2FkZiBsb2FkayBsb2FkbSBsb2FkcCBsb2FkcyBsb2FkeCBsb2NhbCBsb2NhdGUgbG9vcG5leHRpbmRleCBscHJpbnQgbHB3aWR0aCBsc2hvdyAnICtcbiAgICAgICAgICAgICAgJ21hdHJpeCBtc3ltIG5kcGNsZXggbmV3IG9wZW4gb3V0cHV0IG91dHdpZHRoIHBsb3QgcGxvdHN5bSBwb3AgcHJjc24gcHJpbnQgJyArXG4gICAgICAgICAgICAgICdwcmludGRvcyBwcm9jIHB1c2ggcmV0cCByZXR1cm4gcm5kY29uIHJuZG1vZCBybmRtdWx0IHJuZHNlZWQgcnVuIHNhdmUgc2F2ZWFsbCBzY3JlZW4gJyArXG4gICAgICAgICAgICAgICdzY3JvbGwgc2V0YXJyYXkgc2hvdyBzcGFyc2Ugc3RvcCBzdHJpbmcgc3RydWN0IHN5c3RlbSB0cmFjZSB0cmFwIHRocmVhZGZvciAnICtcbiAgICAgICAgICAgICAgJ3RocmVhZGVuZGZvciB0aHJlYWRiZWdpbiB0aHJlYWRqb2luIHRocmVhZHN0YXQgdGhyZWFkZW5kIHVudGlsIHVzZSB3aGlsZSB3aW5wcmludCAnICtcbiAgICAgICAgICAgICAgJ25lIGdlIGxlIGd0IGx0IGFuZCB4b3Igb3Igbm90IGVxIGVxdicsXG4gICAgYnVpbHRfaW46ICdhYnMgYWNmIGFjb25jYXQgYWV5ZSBhbWF4IGFtZWFuIEFtZXJpY2FuQmlub21DYWxsIEFtZXJpY2FuQmlub21DYWxsX0dyZWVrcyBBbWVyaWNhbkJpbm9tQ2FsbF9JbXBWb2wgJyArXG4gICAgICAgICAgICAgICdBbWVyaWNhbkJpbm9tUHV0IEFtZXJpY2FuQmlub21QdXRfR3JlZWtzIEFtZXJpY2FuQmlub21QdXRfSW1wVm9sIEFtZXJpY2FuQlNDYWxsIEFtZXJpY2FuQlNDYWxsX0dyZWVrcyAnICtcbiAgICAgICAgICAgICAgJ0FtZXJpY2FuQlNDYWxsX0ltcFZvbCBBbWVyaWNhbkJTUHV0IEFtZXJpY2FuQlNQdXRfR3JlZWtzIEFtZXJpY2FuQlNQdXRfSW1wVm9sIGFtaW4gYW11bHQgYW5ub3RhdGlvbkdldERlZmF1bHRzICcgK1xuICAgICAgICAgICAgICAnYW5ub3RhdGlvblNldEJrZCBhbm5vdGF0aW9uU2V0Rm9udCBhbm5vdGF0aW9uU2V0TGluZUNvbG9yIGFubm90YXRpb25TZXRMaW5lU3R5bGUgYW5ub3RhdGlvblNldExpbmVUaGlja25lc3MgJyArXG4gICAgICAgICAgICAgICdhbm51YWxUcmFkaW5nRGF5cyBhcmNjb3MgYXJjc2luIGFyZXNoYXBlIGFycmF5YWxsb2MgYXJyYXlpbmRleCBhcnJheWluaXQgYXJyYXl0b21hdCBhc2NpaWxvYWQgYXNjbGFiZWwgYXN0ZCAnICtcbiAgICAgICAgICAgICAgJ2FzdGRzIGFzdW0gYXRhbiBhdGFuMiBhdHJhbnNwb3NlIGF4bWFyZ2luIGJhbGFuY2UgYmFuZCBiYW5kY2hvbCBiYW5kY2hvbHNvbCBiYW5kbHRzb2wgYmFuZHJ2IGJhbmRzb2xwZCBiYXIgJyArXG4gICAgICAgICAgICAgICdiYXNlMTAgYmVnd2luZCBiZXNzZWxqIGJlc3NlbHkgYmV0YSBib3ggYm94Y294IGNkZkJldGEgY2RmQmV0YUludiBjZGZCaW5vbWlhbCBjZGZCaW5vbWlhbEludiBjZGZCdm4gY2RmQnZuMiAnICtcbiAgICAgICAgICAgICAgJ2NkZkJ2bjJlIGNkZkNhdWNoeSBjZGZDYXVjaHlJbnYgY2RmQ2hpYyBjZGZDaGlpIGNkZkNoaW5jIGNkZkNoaW5jSW52IGNkZkV4cCBjZGZFeHBJbnYgY2RmRmMgY2RmRm5jIGNkZkZuY0ludiAnICtcbiAgICAgICAgICAgICAgJ2NkZkdhbSBjZGZHZW5QYXJldG8gY2RmSHlwZXJHZW8gY2RmTGFwbGFjZSBjZGZMYXBsYWNlSW52IGNkZkxvZ2lzdGljIGNkZkxvZ2lzdGljSW52IGNkZm1Db250cm9sQ3JlYXRlIGNkZk12biAnICtcbiAgICAgICAgICAgICAgJ2NkZk12bjJlIGNkZk12bmNlIGNkZk12bmUgY2RmTXZ0MmUgY2RmTXZ0Y2UgY2RmTXZ0ZSBjZGZOIGNkZk4yIGNkZk5jIGNkZk5lZ0Jpbm9taWFsIGNkZk5lZ0Jpbm9taWFsSW52IGNkZk5pICcgK1xuICAgICAgICAgICAgICAnY2RmUG9pc3NvbiBjZGZQb2lzc29uSW52IGNkZlJheWxlaWdoIGNkZlJheWxlaWdoSW52IGNkZlRjIGNkZlRjaSBjZGZUbmMgY2RmVHZuIGNkZldlaWJ1bGwgY2RmV2VpYnVsbEludiBjZGlyICcgK1xuICAgICAgICAgICAgICAnY2VpbCBDaGFuZ2VEaXIgY2hkaXIgY2hpQmFyU3F1YXJlIGNob2wgY2hvbGRuIGNob2xzb2wgY2hvbHVwIGNocnMgY2xvc2UgY29kZSBjb2xzIGNvbHNmIGNvbWJpbmF0ZSBjb21iaW5hdGVkICcgK1xuICAgICAgICAgICAgICAnY29tcGxleCBjb24gY29uZCBjb25qIGNvbnMgQ29uU2NvcmUgY29udG91ciBjb252IGNvbnZlcnRzYXRvc3RyIGNvbnZlcnRzdHJ0b3NhIGNvcnJtIGNvcnJtcyBjb3JydmMgY29ycnggY29ycnhzICcgK1xuICAgICAgICAgICAgICAnY29zIGNvc2ggY291bnRzIGNvdW50d3RzIGNyb3NzcHJkIGNyb3V0IGNyb3V0cCBjc3Jjb2wgY3NybGluIGNzdlJlYWRNIGNzdlJlYWRTQSBjdW1wcm9kYyBjdW1zdW1jIGN1cnZlIGN2dG9zICcgK1xuICAgICAgICAgICAgICAnZGF0YWNyZWF0ZSBkYXRhY3JlYXRlY29tcGxleCBkYXRhbGlzdCBkYXRhbG9hZCBkYXRhbG9vcCBkYXRhb3BlbiBkYXRhc2F2ZSBkYXRlIGRhdGVzdHIgZGF0ZXN0cmluZyBkYXRlc3RyeW1kICcgK1xuICAgICAgICAgICAgICAnZGF5aW55ciBkYXlvZndlZWsgZGJBZGREYXRhYmFzZSBkYkNsb3NlIGRiQ29tbWl0IGRiQ3JlYXRlUXVlcnkgZGJFeGVjUXVlcnkgZGJHZXRDb25uZWN0T3B0aW9ucyBkYkdldERhdGFiYXNlTmFtZSAnICtcbiAgICAgICAgICAgICAgJ2RiR2V0RHJpdmVyTmFtZSBkYkdldERyaXZlcnMgZGJHZXRIb3N0TmFtZSBkYkdldExhc3RFcnJvck51bSBkYkdldExhc3RFcnJvclRleHQgZGJHZXROdW1lcmljYWxQcmVjUG9saWN5ICcgK1xuICAgICAgICAgICAgICAnZGJHZXRQYXNzd29yZCBkYkdldFBvcnQgZGJHZXRUYWJsZUhlYWRlcnMgZGJHZXRUYWJsZXMgZGJHZXRVc2VyTmFtZSBkYkhhc0ZlYXR1cmUgZGJJc0RyaXZlckF2YWlsYWJsZSBkYklzT3BlbiAnICtcbiAgICAgICAgICAgICAgJ2RiSXNPcGVuRXJyb3IgZGJPcGVuIGRiUXVlcnlCaW5kVmFsdWUgZGJRdWVyeUNsZWFyIGRiUXVlcnlDb2xzIGRiUXVlcnlFeGVjUHJlcGFyZWQgZGJRdWVyeUZldGNoQWxsTSBkYlF1ZXJ5RmV0Y2hBbGxTQSAnICtcbiAgICAgICAgICAgICAgJ2RiUXVlcnlGZXRjaE9uZU0gZGJRdWVyeUZldGNoT25lU0EgZGJRdWVyeUZpbmlzaCBkYlF1ZXJ5R2V0Qm91bmRWYWx1ZSBkYlF1ZXJ5R2V0Qm91bmRWYWx1ZXMgZGJRdWVyeUdldEZpZWxkICcgK1xuICAgICAgICAgICAgICAnZGJRdWVyeUdldExhc3RFcnJvck51bSBkYlF1ZXJ5R2V0TGFzdEVycm9yVGV4dCBkYlF1ZXJ5R2V0TGFzdEluc2VydElEIGRiUXVlcnlHZXRMYXN0UXVlcnkgZGJRdWVyeUdldFBvc2l0aW9uICcgK1xuICAgICAgICAgICAgICAnZGJRdWVyeUlzQWN0aXZlIGRiUXVlcnlJc0ZvcndhcmRPbmx5IGRiUXVlcnlJc051bGwgZGJRdWVyeUlzU2VsZWN0IGRiUXVlcnlJc1ZhbGlkIGRiUXVlcnlQcmVwYXJlIGRiUXVlcnlSb3dzICcgK1xuICAgICAgICAgICAgICAnZGJRdWVyeVNlZWsgZGJRdWVyeVNlZWtGaXJzdCBkYlF1ZXJ5U2Vla0xhc3QgZGJRdWVyeVNlZWtOZXh0IGRiUXVlcnlTZWVrUHJldmlvdXMgZGJRdWVyeVNldEZvcndhcmRPbmx5ICcgK1xuICAgICAgICAgICAgICAnZGJSZW1vdmVEYXRhYmFzZSBkYlJvbGxiYWNrIGRiU2V0Q29ubmVjdE9wdGlvbnMgZGJTZXREYXRhYmFzZU5hbWUgZGJTZXRIb3N0TmFtZSBkYlNldE51bWVyaWNhbFByZWNQb2xpY3kgJyArXG4gICAgICAgICAgICAgICdkYlNldFBvcnQgZGJTZXRVc2VyTmFtZSBkYlRyYW5zYWN0aW9uIERlbGV0ZUZpbGUgZGVsaWYgZGVscm93cyBkZW5zZVRvU3AgZGVuc2VUb1NwUkUgZGVuVG9aZXJvIGRlc2lnbiBkZXQgZGV0bCAnICtcbiAgICAgICAgICAgICAgJ2RmZnQgZGZmdGkgZGlhZyBkaWFncnYgZGlnYW1tYSBkb3N3aW4gRE9TV2luQ2xvc2VhbGwgRE9TV2luT3BlbiBkb3RmZXEgZG90ZmVxbXQgZG90ZmdlIGRvdGZnZW10IGRvdGZndCBkb3RmZ3RtdCAnICtcbiAgICAgICAgICAgICAgJ2RvdGZsZSBkb3RmbGVtdCBkb3RmbHQgZG90Zmx0bXQgZG90Zm5lIGRvdGZuZW10IGRyYXcgZHJvcCBkc0NyZWF0ZSBkc3RhdCBkc3RhdG10IGRzdGF0bXRDb250cm9sQ3JlYXRlIGR0ZGF0ZSBkdGRheSAnICtcbiAgICAgICAgICAgICAgJ2R0dGltZSBkdHRvZHR2IGR0dG9zdHIgZHR0b3V0YyBkdHZub3JtYWwgZHR2dG9kdCBkdHZ0b3V0YyBkdW1teSBkdW1teWJyIGR1bW15ZG4gZWlnIGVpZ2ggZWlnaHYgZWlndiBlbGFwc2VkVHJhZGluZ0RheXMgJyArXG4gICAgICAgICAgICAgICdlbmR3aW5kIGVudmdldCBlb2YgZXFTb2x2ZSBlcVNvbHZlbXQgZXFTb2x2ZW10Q29udHJvbENyZWF0ZSBlcVNvbHZlbXRPdXRDcmVhdGUgZXFTb2x2ZXNldCBlcmYgZXJmYyBlcmZjY3BseCBlcmZjcGx4IGVycm9yICcgK1xuICAgICAgICAgICAgICAnZXRkYXlzIGV0aHNlYyBldHN0ciBFdXJvcGVhbkJpbm9tQ2FsbCBFdXJvcGVhbkJpbm9tQ2FsbF9HcmVla3MgRXVyb3BlYW5CaW5vbUNhbGxfSW1wVm9sIEV1cm9wZWFuQmlub21QdXQgJyArXG4gICAgICAgICAgICAgICdFdXJvcGVhbkJpbm9tUHV0X0dyZWVrcyBFdXJvcGVhbkJpbm9tUHV0X0ltcFZvbCBFdXJvcGVhbkJTQ2FsbCBFdXJvcGVhbkJTQ2FsbF9HcmVla3MgRXVyb3BlYW5CU0NhbGxfSW1wVm9sICcgK1xuICAgICAgICAgICAgICAnRXVyb3BlYW5CU1B1dCBFdXJvcGVhbkJTUHV0X0dyZWVrcyBFdXJvcGVhbkJTUHV0X0ltcFZvbCBleGN0c21wbCBleGVjIGV4ZWNiZyBleHAgZXh0ZXJuIGV5ZSBmY2hlY2tlcnIgZmNsZWFyZXJyIGZlcSAnICtcbiAgICAgICAgICAgICAgJ2ZlcW10IGZmbHVzaCBmZnQgZmZ0aSBmZnRtIGZmdG1pIGZmdG4gZmdlIGZnZW10IGZnZXRzIGZnZXRzYSBmZ2V0c2F0IGZnZXRzdCBmZ3QgZmd0bXQgZmlsZWluZm8gZmlsZXNhIGZsZSBmbGVtdCAnICtcbiAgICAgICAgICAgICAgJ2Zsb29yIGZsdCBmbHRtdCBmbW9kIGZuZSBmbmVtdCBmb250cyBmb3BlbiBmb3JtYXRjdiBmb3JtYXRudiBmcHV0cyBmcHV0c3QgZnNlZWsgZnN0cmVycm9yIGZ0ZWxsIGZ0b2N2IGZ0b3MgZnRvc3RyQyAnICtcbiAgICAgICAgICAgICAgJ2dhbW1hIGdhbW1hY3BseCBnYW1tYWlpIGdhdXNzZXQgZ2RhQXBwZW5kIGdkYUNyZWF0ZSBnZGFEU3RhdCBnZGFEU3RhdE1hdCBnZGFHZXRJbmRleCBnZGFHZXROYW1lIGdkYUdldE5hbWVzIGdkYUdldE9yZGVycyAnICtcbiAgICAgICAgICAgICAgJ2dkYUdldFR5cGUgZ2RhR2V0VHlwZXMgZ2RhR2V0VmFySW5mbyBnZGFJc0NwbHggZ2RhTG9hZCBnZGFQYWNrIGdkYVJlYWQgZ2RhUmVhZEJ5SW5kZXggZ2RhUmVhZFNvbWUgZ2RhUmVhZFNwYXJzZSAnICtcbiAgICAgICAgICAgICAgJ2dkYVJlYWRTdHJ1Y3QgZ2RhUmVwb3J0VmFySW5mbyBnZGFTYXZlIGdkYVVwZGF0ZSBnZGFVcGRhdGVBbmRQYWNrIGdkYVZhcnMgZ2RhV3JpdGUgZ2RhV3JpdGUzMiBnZGFXcml0ZVNvbWUgZ2V0YXJyYXkgJyArXG4gICAgICAgICAgICAgICdnZXRkaW1zIGdldGYgZ2V0R0FVU1Nob21lIGdldG1hdHJpeCBnZXRtYXRyaXg0RCBnZXRuYW1lIGdldG5hbWVmIGdldE5leHRUcmFkaW5nRGF5IGdldE5leHRXZWVrRGF5IGdldG5yIGdldG9yZGVycyAnICtcbiAgICAgICAgICAgICAgJ2dldHBhdGggZ2V0UHJldmlvdXNUcmFkaW5nRGF5IGdldFByZXZpb3VzV2Vla0RheSBnZXRSb3cgZ2V0c2NhbGFyM0QgZ2V0c2NhbGFyNEQgZ2V0VHJSb3cgZ2V0d2luZCBnbG0gZ3JhZGNwbHggZ3JhZE1UICcgK1xuICAgICAgICAgICAgICAnZ3JhZE1UbSBncmFkTVRUIGdyYWRNVFRtIGdyYWRwIGdyYXBocHJ0IGdyYXBoc2V0IGhhc2ltYWcgaGVhZGVyIGhlYWRlcm10IGhlc3MgaGVzc01UIGhlc3NNVGcgaGVzc01UZ3cgaGVzc01UbSAnICtcbiAgICAgICAgICAgICAgJ2hlc3NNVG13IGhlc3NNVFQgaGVzc01UVGcgaGVzc01UVGd3IGhlc3NNVFRtIGhlc3NNVHcgaGVzc3AgaGlzdCBoaXN0ZiBoaXN0cCBoc2VjIGltYWcgaW5kY3YgaW5kZXhjYXQgaW5kaWNlcyBpbmRpY2VzMiAnICtcbiAgICAgICAgICAgICAgJ2luZGljZXNmIGluZGljZXNmbiBpbmRudiBpbmRzYXYgaW50ZWdyYXRlMWQgaW50ZWdyYXRlQ29udHJvbENyZWF0ZSBpbnRncmF0MiBpbnRncmF0MyBpbnRocDEgaW50aHAyIGludGhwMyBpbnRocDQgJyArXG4gICAgICAgICAgICAgICdpbnRocENvbnRyb2xDcmVhdGUgaW50cXVhZDEgaW50cXVhZDIgaW50cXVhZDMgaW50cmxlYXYgaW50cmxlYXZzYSBpbnRyc2VjdCBpbnRzaW1wIGludiBpbnZwZCBpbnZzd3AgaXNjcGx4IGlzY3BseGYgJyArXG4gICAgICAgICAgICAgICdpc2RlbiBpc2luZm5hbm1pc3MgaXNtaXNzIGtleSBrZXlhdiBrZXl3IGxhZyBsYWcxIGxhZ24gbGFwRWlnaGIgbGFwRWlnaGkgbGFwRWlnaHZiIGxhcEVpZ2h2aSBsYXBnRWlnIGxhcGdFaWdoIGxhcGdFaWdodiAnICtcbiAgICAgICAgICAgICAgJ2xhcGdFaWd2IGxhcGdTY2h1ciBsYXBnU3ZkY3N0IGxhcGdTdmRzIGxhcGdTdmRzdCBsYXBTdmRjdXN2IGxhcFN2ZHMgbGFwU3ZkdXN2IGxkbHAgbGRsc29sIGxpblNvbHZlIGxpc3R3aXNlIGxuIGxuY2RmYnZuICcgK1xuICAgICAgICAgICAgICAnbG5jZGZidm4yIGxuY2RmbXZuIGxuY2RmbiBsbmNkZm4yIGxuY2RmbmMgbG5mYWN0IGxuZ2FtbWFjcGx4IGxucGRmbXZuIGxucGRmbXZ0IGxucGRmbiBsbnBkZnQgbG9hZGQgbG9hZHN0cnVjdCBsb2Fkd2luZCAnICtcbiAgICAgICAgICAgICAgJ2xvZXNzIGxvZXNzbXQgbG9lc3NtdENvbnRyb2xDcmVhdGUgbG9nIGxvZ2xvZyBsb2d4IGxvZ3kgbG93ZXIgbG93bWF0IGxvd21hdDEgbHRyaXNvbCBsdSBsdXNvbCBtYWNoRXBzaWxvbiBtYWtlIG1ha2V2YXJzICcgK1xuICAgICAgICAgICAgICAnbWFrZXdpbmQgbWFyZ2luIG1hdGFsbG9jIG1hdGluaXQgbWF0dG9hcnJheSBtYXhieXRlcyBtYXhjIG1heGluZGMgbWF4diBtYXh2ZWMgbWJlc3NlbGVpIG1iZXNzZWxlaTAgbWJlc3NlbGVpMSBtYmVzc2VsaSAnICtcbiAgICAgICAgICAgICAgJ21iZXNzZWxpMCBtYmVzc2VsaTEgbWVhbmMgbWVkaWFuIG1lcmdlYnkgbWVyZ2V2YXIgbWluYyBtaW5pbmRjIG1pbnYgbWlzcyBtaXNzZXggbWlzc3J2IG1vbWVudCBtb21lbnRkIG1vdmluZ2F2ZSAnICtcbiAgICAgICAgICAgICAgJ21vdmluZ2F2ZUV4cHdndCBtb3ZpbmdhdmVXZ3QgbmV4dGluZGV4IG5leHRuIG5leHRuZXZuIG5leHR3aW5kIG50b3MgbnVsbCBudWxsMSBudW1Db21iaW5hdGlvbnMgb2xzIG9sc210IG9sc210Q29udHJvbENyZWF0ZSAnICtcbiAgICAgICAgICAgICAgJ29sc3FyIG9sc3FyMiBvbHNxcm10IG9uZXMgb3B0biBvcHRuZXZuIG9ydGggb3V0dHlwIHBhY2YgcGFja2VkVG9TcCBwYWNrciBwYXJzZSBwYXVzZSBwZGZDYXVjaHkgcGRmQ2hpIHBkZkV4cCBwZGZHZW5QYXJldG8gJyArXG4gICAgICAgICAgICAgICdwZGZIeXBlckdlbyBwZGZMYXBsYWNlIHBkZkxvZ2lzdGljIHBkZm4gcGRmUG9pc3NvbiBwZGZSYXlsZWlnaCBwZGZXZWlidWxsIHBpIHBpbnYgcGludm10IHBsb3RBZGRBcnJvdyBwbG90QWRkQmFyIHBsb3RBZGRCb3ggJyArXG4gICAgICAgICAgICAgICdwbG90QWRkSGlzdCBwbG90QWRkSGlzdEYgcGxvdEFkZEhpc3RQIHBsb3RBZGRQb2xhciBwbG90QWRkU2NhdHRlciBwbG90QWRkU2hhcGUgcGxvdEFkZFRleHRib3ggcGxvdEFkZFRTIHBsb3RBZGRYWSBwbG90QXJlYSAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RCYXIgcGxvdEJveCBwbG90Q2xlYXJMYXlvdXQgcGxvdENvbnRvdXIgcGxvdEN1c3RvbUxheW91dCBwbG90R2V0RGVmYXVsdHMgcGxvdEhpc3QgcGxvdEhpc3RGIHBsb3RIaXN0UCBwbG90TGF5b3V0ICcgK1xuICAgICAgICAgICAgICAncGxvdExvZ0xvZyBwbG90TG9nWCBwbG90TG9nWSBwbG90T3BlbldpbmRvdyBwbG90UG9sYXIgcGxvdFNhdmUgcGxvdFNjYXR0ZXIgcGxvdFNldEF4ZXNQZW4gcGxvdFNldEJhciBwbG90U2V0QmFyRmlsbCAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RTZXRCYXJTdGFja2VkIHBsb3RTZXRCa2RDb2xvciBwbG90U2V0RmlsbCBwbG90U2V0R3JpZCBwbG90U2V0TGVnZW5kIHBsb3RTZXRMaW5lQ29sb3IgcGxvdFNldExpbmVTdHlsZSBwbG90U2V0TGluZVN5bWJvbCAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RTZXRMaW5lVGhpY2tuZXNzIHBsb3RTZXROZXdXaW5kb3cgcGxvdFNldFRpdGxlIHBsb3RTZXRXaGljaFlBeGlzIHBsb3RTZXRYQXhpc1Nob3cgcGxvdFNldFhMYWJlbCBwbG90U2V0WFJhbmdlICcgK1xuICAgICAgICAgICAgICAncGxvdFNldFhUaWNJbnRlcnZhbCBwbG90U2V0WFRpY0xhYmVsIHBsb3RTZXRZQXhpc1Nob3cgcGxvdFNldFlMYWJlbCBwbG90U2V0WVJhbmdlIHBsb3RTZXRaQXhpc1Nob3cgcGxvdFNldFpMYWJlbCAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RTdXJmYWNlIHBsb3RUUyBwbG90WFkgcG9sYXIgcG9seWNoYXIgcG9seWV2YWwgcG9seWdhbW1hIHBvbHlpbnQgcG9seW1ha2UgcG9seW1hdCBwb2x5bXJvb3QgcG9seW11bHQgcG9seXJvb3QgJyArXG4gICAgICAgICAgICAgICdwcWd3aW4gcHJldmlvdXNpbmRleCBwcmluY29tcCBwcmludGZtIHByaW50Zm10IHByb2RjIHBzaSBwdXRhcnJheSBwdXRmIHB1dHZhbHMgcHZDcmVhdGUgcHZHZXRJbmRleCBwdkdldFBhck5hbWVzICcgK1xuICAgICAgICAgICAgICAncHZHZXRQYXJWZWN0b3IgcHZMZW5ndGggcHZMaXN0IHB2UGFjayBwdlBhY2tpIHB2UGFja20gcHZQYWNrbWkgcHZQYWNrcyBwdlBhY2tzaSBwdlBhY2tzbSBwdlBhY2tzbWkgcHZQdXRQYXJWZWN0b3IgJyArXG4gICAgICAgICAgICAgICdwdlRlc3QgcHZVbnBhY2sgUU5ld3RvbiBRTmV3dG9ubXQgUU5ld3Rvbm10Q29udHJvbENyZWF0ZSBRTmV3dG9ubXRPdXRDcmVhdGUgUU5ld3RvblNldCBRUHJvZyBRUHJvZ210IFFQcm9nbXRJbkNyZWF0ZSAnICtcbiAgICAgICAgICAgICAgJ3FxciBxcXJlIHFxcmVwIHFyIHFyZSBxcmVwIHFyc29sIHFydHNvbCBxdHlyIHF0eXJlIHF0eXJlcCBxdWFudGlsZSBxdWFudGlsZWQgcXlyIHF5cmUgcXlyZXAgcXogcmFuayByYW5raW5keCByZWFkciAnICtcbiAgICAgICAgICAgICAgJ3JlYWwgcmVjbGFzc2lmeSByZWNsYXNzaWZ5Q3V0cyByZWNvZGUgcmVjc2VyYXIgcmVjc2VyY3AgcmVjc2VycmMgcmVydW4gcmVzY2FsZSByZXNoYXBlIHJldHMgcmV2IHJmZnQgcmZmdGkgcmZmdGlwIHJmZnRuICcgK1xuICAgICAgICAgICAgICAncmZmdG5wIHJmZnRwIHJuZEJlcm5vdWxsaSBybmRCZXRhIHJuZEJpbm9taWFsIHJuZENhdWNoeSBybmRDaGlTcXVhcmUgcm5kQ29uIHJuZENyZWF0ZVN0YXRlIHJuZEV4cCBybmRHYW1tYSBybmRHZW8gcm5kR3VtYmVsICcgK1xuICAgICAgICAgICAgICAncm5kSHlwZXJHZW8gcm5kaSBybmRLTWJldGEgcm5kS01nYW0gcm5kS01pIHJuZEtNbiBybmRLTW5iIHJuZEtNcCBybmRLTXUgcm5kS012bSBybmRMYXBsYWNlIHJuZExDYmV0YSBybmRMQ2dhbSBybmRMQ2kgcm5kTENuICcgK1xuICAgICAgICAgICAgICAncm5kTENuYiBybmRMQ3Agcm5kTEN1IHJuZExDdm0gcm5kTG9nTm9ybSBybmRNVHUgcm5kTVZuIHJuZE1WdCBybmRuIHJuZG5iIHJuZE5lZ0Jpbm9taWFsIHJuZHAgcm5kUG9pc3NvbiBybmRSYXlsZWlnaCAnICtcbiAgICAgICAgICAgICAgJ3JuZFN0YXRlU2tpcCBybmR1IHJuZHZtIHJuZFdlaWJ1bGwgcm5kV2lzaGFydCByb3RhdGVyIHJvdW5kIHJvd3Mgcm93c2YgcnJlZiBzYW1wbGVEYXRhIHNhdG9zdHJDIHNhdmVkIHNhdmVTdHJ1Y3Qgc2F2ZXdpbmQgJyArXG4gICAgICAgICAgICAgICdzY2FsZSBzY2FsZTNkIHNjYWxlcnIgc2NhbGluZm5hbm1pc3Mgc2NhbG1pc3Mgc2NodG9jIHNjaHVyIHNlYXJjaHNvdXJjZXBhdGggc2Vla3Igc2VsZWN0IHNlbGlmIHNlcWEgc2VxbSBzZXRkaWYgc2V0ZGlmc2EgJyArXG4gICAgICAgICAgICAgICdzZXR2YXJzIHNldHZ3cm1vZGUgc2V0d2luZCBzaGVsbCBzaGlmdHIgc2luIHNpbmdsZWluZGV4IHNpbmggc2xlZXAgc29scGQgc29ydGMgc29ydGNjIHNvcnRkIHNvcnRoYyBzb3J0aGNjIHNvcnRpbmQgJyArXG4gICAgICAgICAgICAgICdzb3J0aW5kYyBzb3J0bWMgc29ydHIgc29ydHJjIHNwQmljb25qR3JhZFNvbCBzcENob2wgc3BDb25qR3JhZFNvbCBzcENyZWF0ZSBzcERlbnNlU3VibWF0IHNwRGlhZ1J2TWF0IHNwRWlndiBzcEV5ZSBzcExETCAnICtcbiAgICAgICAgICAgICAgJ3NwbGluZSBzcExVIHNwTnVtTlpFIHNwT25lcyBzcHJlYWRTaGVldFJlYWRNIHNwcmVhZFNoZWV0UmVhZFNBIHNwcmVhZFNoZWV0V3JpdGUgc3BTY2FsZSBzcFN1Ym1hdCBzcFRvRGVuc2Ugc3BUclREZW5zZSAnICtcbiAgICAgICAgICAgICAgJ3NwVFNjYWxhciBzcFplcm9zIHNxcFNvbHZlIHNxcFNvbHZlTVQgc3FwU29sdmVNVENvbnRyb2xDcmVhdGUgc3FwU29sdmVNVGxhZ3JhbmdlQ3JlYXRlIHNxcFNvbHZlTVRvdXRDcmVhdGUgc3FwU29sdmVTZXQgJyArXG4gICAgICAgICAgICAgICdzcXJ0IHN0YXRlbWVudHMgc3RkYyBzdGRzYyBzdG9jdiBzdG9mIHN0cmNvbWJpbmUgc3RyaW5keCBzdHJsZW4gc3RycHV0IHN0cnJpbmR4IHN0cnNlY3Qgc3Ryc3BsaXQgc3Ryc3BsaXRQYWQgc3RydG9kdCAnICtcbiAgICAgICAgICAgICAgJ3N0cnRvZiBzdHJ0b2ZjcGx4IHN0cnRyaW1sIHN0cnRyaW1yIHN0cnRydW5jIHN0cnRydW5jbCBzdHJ0cnVuY3BhZCBzdHJ0cnVuY3Igc3VibWF0IHN1YnNjYXQgc3Vic3R1dGUgc3VidmVjIHN1bWMgc3VtciAnICtcbiAgICAgICAgICAgICAgJ3N1cmZhY2Ugc3ZkIHN2ZDEgc3ZkMiBzdmRjdXN2IHN2ZHMgc3ZkdXN2IHN5c3N0YXRlIHRhYiB0YW4gdGFuaCB0ZW1wbmFtZSAnICtcbiAgICAgICAgICAgICAgJ3RpbWUgdGltZWR0IHRpbWVzdHIgdGltZXV0YyB0aXRsZSB0a2YyZXBzIHRrZjJwcyB0b2NhcnQgdG9kYXlkdCB0b2VwbGl0eiB0b2tlbiB0b3BvbGFyIHRyYXBjaGsgJyArXG4gICAgICAgICAgICAgICd0cmlnYW1tYSB0cmltciB0cnVuYyB0eXBlIHR5cGVjdiB0eXBlZiB1bmlvbiB1bmlvbnNhIHVuaXFpbmR4IHVuaXFpbmR4c2EgdW5pcXVlIHVuaXF1ZXNhIHVwbWF0IHVwbWF0MSB1cHBlciB1dGN0b2R0ICcgK1xuICAgICAgICAgICAgICAndXRjdG9kdHYgdXRyaXNvbCB2YWxzIHZhckNvdk1TIHZhckNvdlhTIHZhcmdldCB2YXJnZXRsIHZhcm1hbGwgdmFybWFyZXMgdmFycHV0IHZhcnB1dGwgdmFydHlwZWYgdmNtIHZjbXMgdmN4IHZjeHMgJyArXG4gICAgICAgICAgICAgICd2ZWMgdmVjaCB2ZWNyIHZlY3RvciB2Z2V0IHZpZXcgdmlld3h5eiB2bGlzdCB2bmFtZWN2IHZvbHVtZSB2cHV0IHZyZWFkIHZ0eXBlY3Ygd2FpdCB3YWl0YyB3YWxraW5kZXggd2hlcmUgd2luZG93ICcgK1xuICAgICAgICAgICAgICAnd3JpdGVyIHhsYWJlbCB4bHNHZXRTaGVldENvdW50IHhsc0dldFNoZWV0U2l6ZSB4bHNHZXRTaGVldFR5cGVzIHhsc01ha2VSYW5nZSB4bHNSZWFkTSB4bHNSZWFkU0EgeGxzV3JpdGUgeGxzV3JpdGVNICcgK1xuICAgICAgICAgICAgICAneGxzV3JpdGVTQSB4cG5kIHh0aWNzIHh5IHh5eiB5bGFiZWwgeXRpY3MgemVyb3MgemV0YSB6bGFiZWwgenRpY3MgY2RmRW1waXJpY2FsIGRvdCBoNWNyZWF0ZSBoNW9wZW4gaDVyZWFkIGg1cmVhZEF0dHJpYnV0ZSAnICtcbiAgICAgICAgICAgICAgJ2g1d3JpdGUgaDV3cml0ZUF0dHJpYnV0ZSBsZGwgcGxvdEFkZEVycm9yQmFyIHBsb3RBZGRTdXJmYWNlIHBsb3RDREZFbXBpcmljYWwgcGxvdFNldENvbG9ybWFwIHBsb3RTZXRDb250b3VyTGFiZWxzICcgK1xuICAgICAgICAgICAgICAncGxvdFNldExlZ2VuZEZvbnQgcGxvdFNldFRleHRJbnRlcnByZXRlciBwbG90U2V0WFRpY0NvdW50IHBsb3RTZXRZVGljQ291bnQgcGxvdFNldFpMZXZlbHMgcG93ZXJtIHN0cmpvaW4gc3lsdmVzdGVyICcgK1xuICAgICAgICAgICAgICAnc3RydHJpbScsXG4gICAgbGl0ZXJhbDogJ0RCX0FGVEVSX0xBU1RfUk9XIERCX0FMTF9UQUJMRVMgREJfQkFUQ0hfT1BFUkFUSU9OUyBEQl9CRUZPUkVfRklSU1RfUk9XIERCX0JMT0IgREJfRVZFTlRfTk9USUZJQ0FUSU9OUyAnICtcbiAgICAgICAgICAgICAnREJfRklOSVNIX1FVRVJZIERCX0hJR0hfUFJFQ0lTSU9OIERCX0xBU1RfSU5TRVJUX0lEIERCX0xPV19QUkVDSVNJT05fRE9VQkxFIERCX0xPV19QUkVDSVNJT05fSU5UMzIgJyArXG4gICAgICAgICAgICAgJ0RCX0xPV19QUkVDSVNJT05fSU5UNjQgREJfTE9XX1BSRUNJU0lPTl9OVU1CRVJTIERCX01VTFRJUExFX1JFU1VMVF9TRVRTIERCX05BTUVEX1BMQUNFSE9MREVSUyAnICtcbiAgICAgICAgICAgICAnREJfUE9TSVRJT05BTF9QTEFDRUhPTERFUlMgREJfUFJFUEFSRURfUVVFUklFUyBEQl9RVUVSWV9TSVpFIERCX1NJTVBMRV9MT0NLSU5HIERCX1NZU1RFTV9UQUJMRVMgREJfVEFCTEVTICcgK1xuICAgICAgICAgICAgICdEQl9UUkFOU0FDVElPTlMgREJfVU5JQ09ERSBEQl9WSUVXUyBfX1NURElOIF9fU1RET1VUIF9fU1RERVJSIF9fRklMRV9ESVInXG4gIH07XG5cbiAgY29uc3QgQVRfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCdAJywgJ0AnKTtcblxuICBjb25zdCBQUkVQUk9DRVNTT1IgPVxuICB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjJyxcbiAgICBlbmQ6ICckJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJ21ldGEta2V5d29yZCc6ICdkZWZpbmUgZGVmaW5lY3N8MTAgdW5kZWYgaWZkZWYgaWZuZGVmIGlmbGlnaHQgaWZkbGxjYWxsIGlmbWFjIGlmb3Myd2luIGlmdW5peCBlbHNlIGVuZGlmIGxpbmVzb24gbGluZXNvZmYgc3JjZmlsZSBzcmNsaW5lJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5jbHVkZScsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICdtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSdcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQVRfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFNUUlVDVF9UWVBFID1cbiAge1xuICAgIGJlZ2luOiAvXFxic3RydWN0XFxzKy8sXG4gICAgZW5kOiAvXFxzLyxcbiAgICBrZXl3b3JkczogXCJzdHJ1Y3RcIixcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6IFwidHlwZVwiLFxuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gb25seSBmb3IgZGVmaW5pdGlvbnNcbiAgY29uc3QgUEFSU0VfUEFSQU1TID0gW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICBiZWdpbjogL1xcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgeyAvLyBkb3RzXG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgYmVnaW46IC9cXC5cXC5cXC4vXG4gICAgICAgIH0sXG4gICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgICAgICBTVFJVQ1RfVFlQRVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICBjb25zdCBGVU5DVElPTl9ERUYgPVxuICB7XG4gICAgY2xhc3NOYW1lOiBcInRpdGxlXCIsXG4gICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBERUZJTklUSU9OID0gZnVuY3Rpb24oYmVnaW5LZXl3b3JkcywgZW5kLCBpbmhlcml0cykge1xuICAgIGNvbnN0IG1vZGUgPSBobGpzLmluaGVyaXQoXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJmdW5jdGlvblwiLFxuICAgICAgICBiZWdpbktleXdvcmRzOiBiZWdpbktleXdvcmRzLFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtdLmNvbmNhdChQQVJTRV9QQVJBTVMpXG4gICAgICB9LFxuICAgICAgaW5oZXJpdHMgfHwge31cbiAgICApO1xuICAgIG1vZGUuY29udGFpbnMucHVzaChGVU5DVElPTl9ERUYpO1xuICAgIG1vZGUuY29udGFpbnMucHVzaChobGpzLkNfTlVNQkVSX01PREUpO1xuICAgIG1vZGUuY29udGFpbnMucHVzaChobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goQVRfQ09NTUVOVF9NT0RFKTtcbiAgICByZXR1cm4gbW9kZTtcbiAgfTtcblxuICBjb25zdCBCVUlMVF9JTl9SRUYgPVxuICB7IC8vIHRoZXNlIGFyZSBleHBsaWNpdGx5IG5hbWVkIGludGVybmFsIGZ1bmN0aW9uIGNhbGxzXG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnXFxcXGIoJyArIEtFWVdPUkRTLmJ1aWx0X2luLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxcYidcbiAgfTtcblxuICBjb25zdCBTVFJJTkdfUkVGID1cbiAge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsXG4gICAgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9SRUYgPVxuICB7XG4gICAgLy8gY2xhc3NOYW1lOiBcImZuX3JlZlwiLFxuICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogS0VZV09SRFMua2V5d29yZFxuICAgICAgfSxcbiAgICAgIEJVSUxUX0lOX1JFRixcbiAgICAgIHsgLy8gYW1iaWd1b3VzbHkgbmFtZWQgZnVuY3Rpb24gY2FsbHMgZ2V0IGEgcmVsZXZhbmNlIG9mIDBcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fUkVGX1BBUkFNUyA9XG4gIHtcbiAgICAvLyBjbGFzc05hbWU6IFwiZm5fcmVmX3BhcmFtc1wiLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46IEtFWVdPUkRTLmJ1aWx0X2luLFxuICAgICAgbGl0ZXJhbDogS0VZV09SRFMubGl0ZXJhbFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBBVF9DT01NRU5UX01PREUsXG4gICAgICBCVUlMVF9JTl9SRUYsXG4gICAgICBGVU5DVElPTl9SRUYsXG4gICAgICBTVFJJTkdfUkVGLFxuICAgICAgJ3NlbGYnXG4gICAgXVxuICB9O1xuXG4gIEZVTkNUSU9OX1JFRi5jb250YWlucy5wdXNoKEZVTkNUSU9OX1JFRl9QQVJBTVMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dBVVNTJyxcbiAgICBhbGlhc2VzOiBbJ2dzcyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsIC8vIGxhbmd1YWdlIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyhcXHtbJSNdfFslI11cXH18IDwtICkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgICAgU1RSSU5HX1JFRixcbiAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFxiZXh0ZXJuYWwgKG1hdHJpeHxzdHJpbmd8YXJyYXl8c3BhcnNlIG1hdHJpeHxzdHJ1Y3R8cHJvY3xrZXl3b3JkfGZuKS9cbiAgICAgIH0sXG4gICAgICBERUZJTklUSU9OKCdwcm9jIGtleXdvcmQnLCAnOycpLFxuICAgICAgREVGSU5JVElPTignZm4nLCAnPScpLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZm9yIHRocmVhZGZvcicsXG4gICAgICAgIGVuZDogLzsvLFxuICAgICAgICAvLyBlbmQ6IC9cXCgvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBBVF9DT01NRU5UX01PREUsXG4gICAgICAgICAgRlVOQ1RJT05fUkVGX1BBUkFNU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyAvLyBjdXN0b20gbWV0aG9kIGd1YXJkXG4gICAgICAgIC8vIGV4Y2x1ZGVzIG1ldGhvZCBuYW1lcyBmcm9tIGtleXdvcmQgcHJvY2Vzc2luZ1xuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXC4nICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKj0nXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9SRUYsXG4gICAgICBTVFJVQ1RfVFlQRVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnYXVzcztcbiIsCiAgICAiLypcbiBMYW5ndWFnZTogRy1jb2RlIChJU08gNjk4MylcbiBDb250cmlidXRvcnM6IEFkYW0gSm9zZXBoIENvb2sgPGFkYW0uam9zZXBoLmNvb2tAZ21haWwuY29tPlxuIERlc2NyaXB0aW9uOiBHLWNvZGUgc3ludGF4IGhpZ2hsaWdodGVyIGZvciBGYW51YyBhbmQgb3RoZXIgY29tbW9uIENOQyBtYWNoaW5lIHRvb2wgY29udHJvbHMuXG4gV2Vic2l0ZTogaHR0cHM6Ly93d3cuc2lzLnNlL2FwaS9kb2N1bWVudC9wcmV2aWV3LzkxMTk1Mi9cbiAqL1xuXG5mdW5jdGlvbiBnY29kZShobGpzKSB7XG4gIGNvbnN0IEdDT0RFX0lERU5UX1JFID0gJ1tBLVpfXVtBLVowLTlfLl0qJztcbiAgY29uc3QgR0NPREVfQ0xPU0VfUkUgPSAnJSc7XG4gIGNvbnN0IEdDT0RFX0tFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiBHQ09ERV9JREVOVF9SRSxcbiAgICBrZXl3b3JkOiAnSUYgRE8gV0hJTEUgRU5EV0hJTEUgQ0FMTCBFTkRJRiBTVUIgRU5EU1VCIEdPVE8gUkVQRUFUIEVORFJFUEVBVCAnICtcbiAgICAgICdFUSBMVCBHVCBORSBHRSBMRSBPUiBYT1InXG4gIH07XG4gIGNvbnN0IEdDT0RFX1NUQVJUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnKFtPXSkoWzAtOV0rKSdcbiAgfTtcbiAgY29uc3QgTlVNQkVSID0gaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSwge1xuICAgIGJlZ2luOiAnKFstK10/KChcXFxcLlxcXFxkKyl8KFxcXFxkKykoXFxcXC5cXFxcZCopPykpfCcgKyBobGpzLkNfTlVNQkVSX1JFXG4gIH0pO1xuICBjb25zdCBHQ09ERV9DT0RFID0gW1xuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVCgvXFwoLywgL1xcKS8pLFxuICAgIE5VTUJFUixcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7XG4gICAgICBpbGxlZ2FsOiBudWxsXG4gICAgfSksXG4gICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICAgIGlsbGVnYWw6IG51bGxcbiAgICB9KSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgIGJlZ2luOiAnKFtHXSkoWzAtOV0rXFxcXC4/WzAtOV0/KSdcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgYmVnaW46ICcoW01dKShbMC05XStcXFxcLj9bMC05XT8pJ1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICBiZWdpbjogJyhWQ3xWU3wjKScsXG4gICAgICBlbmQ6ICcoXFxcXGQrKSdcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgYmVnaW46ICcoVlpPRlh8VlpPRll8VlpPRlopJ1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgYmVnaW46ICcoQVRBTnxBQlN8QUNPU3xBU0lOfFNJTnxDT1N8RVhQfEZJWHxGVVB8Uk9VTkR8TE58VEFOKShcXFxcWyknLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgTlVNQkVSXG4gICAgICBdLFxuICAgICAgZW5kOiAnXFxcXF0nXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnTicsXG4gICAgICAgICAgZW5kOiAnXFxcXGQrJyxcbiAgICAgICAgICBpbGxlZ2FsOiAnXFxcXFcnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRy1jb2RlIChJU08gNjk4MyknLFxuICAgIGFsaWFzZXM6IFsnbmMnXSxcbiAgICAvLyBTb21lIGltcGxlbWVudGF0aW9ucyAoQ05DIGNvbnRyb2xzKSBvZiBHLWNvZGUgYXJlIGludGVyb3BlcmFibGUgd2l0aCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzIHNlYW1sZXNzbHkuXG4gICAgLy8gSG93ZXZlciwgbW9zdCBwcmVmZXIgYWxsIHVwcGVyY2FzZSBhbmQgdXBwZXJjYXNlIGlzIGN1c3RvbWFyeS5cbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiBHQ09ERV9LRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IEdDT0RFX0NMT1NFX1JFXG4gICAgICB9LFxuICAgICAgR0NPREVfU1RBUlRcbiAgICBdLmNvbmNhdChHQ09ERV9DT0RFKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdjb2RlO1xuIiwKICAgICIvKlxuIExhbmd1YWdlOiBHaGVya2luXG4gQXV0aG9yOiBTYW0gUGlrZXNsZXkgKEBwaWtlc2xleSkgPHNhbS5waWtlc2xleUB0aGVvZGkub3JnPlxuIERlc2NyaXB0aW9uOiBHaGVya2luIGlzIHRoZSBmb3JtYXQgZm9yIGN1Y3VtYmVyIHNwZWNpZmljYXRpb25zLiBJdCBpcyBhIGRvbWFpbiBzcGVjaWZpYyBsYW5ndWFnZSB3aGljaCBoZWxwcyB5b3UgdG8gZGVzY3JpYmUgYnVzaW5lc3MgYmVoYXZpb3Igd2l0aG91dCB0aGUgbmVlZCB0byBnbyBpbnRvIGRldGFpbCBvZiBpbXBsZW1lbnRhdGlvbi5cbiBXZWJzaXRlOiBodHRwczovL2N1Y3VtYmVyLmlvL2RvY3MvZ2hlcmtpbi9cbiAqL1xuXG5mdW5jdGlvbiBnaGVya2luKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnR2hlcmtpbicsXG4gICAgYWxpYXNlczogWydmZWF0dXJlJ10sXG4gICAga2V5d29yZHM6ICdGZWF0dXJlIEJhY2tncm91bmQgQWJpbGl0eSBCdXNpbmVzc1xcIE5lZWQgU2NlbmFyaW8gU2NlbmFyaW9zIFNjZW5hcmlvXFwgT3V0bGluZSBTY2VuYXJpb1xcIFRlbXBsYXRlIEV4YW1wbGVzIEdpdmVuIEFuZCBUaGVuIEJ1dCBXaGVuJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcXFwqJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW15AXFxcXHNdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLFxuICAgICAgICBlbmQ6ICdcXFxcfFxcXFx3KiQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1tefF0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJzwnLFxuICAgICAgICBlbmQ6ICc+J1xuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2hlcmtpbjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBHTFNMXG5EZXNjcmlwdGlvbjogT3BlbkdMIFNoYWRpbmcgTGFuZ3VhZ2VcbkF1dGhvcjogU2VyZ2V5IFRpa2hvbWlyb3YgPHNlcmdleUB0aWtob21pcm92LmlvPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BlbkdMX1NoYWRpbmdfTGFuZ3VhZ2VcbkNhdGVnb3J5OiBncmFwaGljc1xuKi9cblxuZnVuY3Rpb24gZ2xzbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dMU0wnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBTdGF0ZW1lbnRzXG4gICAgICAgICdicmVhayBjb250aW51ZSBkaXNjYXJkIGRvIGVsc2UgZm9yIGlmIHJldHVybiB3aGlsZSBzd2l0Y2ggY2FzZSBkZWZhdWx0ICcgK1xuICAgICAgICAvLyBRdWFsaWZpZXJzXG4gICAgICAgICdhdHRyaWJ1dGUgYmluZGluZyBidWZmZXIgY2N3IGNlbnRyb2lkIGNlbnRyb2lkIHZhcnlpbmcgY29oZXJlbnQgY29sdW1uX21ham9yIGNvbnN0IGN3ICcgK1xuICAgICAgICAnZGVwdGhfYW55IGRlcHRoX2dyZWF0ZXIgZGVwdGhfbGVzcyBkZXB0aF91bmNoYW5nZWQgZWFybHlfZnJhZ21lbnRfdGVzdHMgZXF1YWxfc3BhY2luZyAnICtcbiAgICAgICAgJ2ZsYXQgZnJhY3Rpb25hbF9ldmVuX3NwYWNpbmcgZnJhY3Rpb25hbF9vZGRfc3BhY2luZyBoaWdocCBpbiBpbmRleCBpbm91dCBpbnZhcmlhbnQgJyArXG4gICAgICAgICdpbnZvY2F0aW9ucyBpc29saW5lcyBsYXlvdXQgbGluZV9zdHJpcCBsaW5lcyBsaW5lc19hZGphY2VuY3kgbG9jYWxfc2l6ZV94IGxvY2FsX3NpemVfeSAnICtcbiAgICAgICAgJ2xvY2FsX3NpemVfeiBsb2NhdGlvbiBsb3dwIG1heF92ZXJ0aWNlcyBtZWRpdW1wIG5vcGVyc3BlY3RpdmUgb2Zmc2V0IG9yaWdpbl91cHBlcl9sZWZ0ICcgK1xuICAgICAgICAnb3V0IHBhY2tlZCBwYXRjaCBwaXhlbF9jZW50ZXJfaW50ZWdlciBwb2ludF9tb2RlIHBvaW50cyBwcmVjaXNlIHByZWNpc2lvbiBxdWFkcyByMTFmX2cxMWZfYjEwZiAnICtcbiAgICAgICAgJ3IxNiByMTZfc25vcm0gcjE2ZiByMTZpIHIxNnVpIHIzMmYgcjMyaSByMzJ1aSByOCByOF9zbm9ybSByOGkgcjh1aSByZWFkb25seSByZXN0cmljdCAnICtcbiAgICAgICAgJ3JnMTYgcmcxNl9zbm9ybSByZzE2ZiByZzE2aSByZzE2dWkgcmczMmYgcmczMmkgcmczMnVpIHJnOCByZzhfc25vcm0gcmc4aSByZzh1aSByZ2IxMF9hMiAnICtcbiAgICAgICAgJ3JnYjEwX2EydWkgcmdiYTE2IHJnYmExNl9zbm9ybSByZ2JhMTZmIHJnYmExNmkgcmdiYTE2dWkgcmdiYTMyZiByZ2JhMzJpIHJnYmEzMnVpIHJnYmE4ICcgK1xuICAgICAgICAncmdiYThfc25vcm0gcmdiYThpIHJnYmE4dWkgcm93X21ham9yIHNhbXBsZSBzaGFyZWQgc21vb3RoIHN0ZDE0MCBzdGQ0MzAgc3RyZWFtIHRyaWFuZ2xlX3N0cmlwICcgK1xuICAgICAgICAndHJpYW5nbGVzIHRyaWFuZ2xlc19hZGphY2VuY3kgdW5pZm9ybSB2YXJ5aW5nIHZlcnRpY2VzIHZvbGF0aWxlIHdyaXRlb25seScsXG4gICAgICB0eXBlOlxuICAgICAgICAnYXRvbWljX3VpbnQgYm9vbCBidmVjMiBidmVjMyBidmVjNCBkbWF0MiBkbWF0MngyIGRtYXQyeDMgZG1hdDJ4NCBkbWF0MyBkbWF0M3gyIGRtYXQzeDMgJyArXG4gICAgICAgICdkbWF0M3g0IGRtYXQ0IGRtYXQ0eDIgZG1hdDR4MyBkbWF0NHg0IGRvdWJsZSBkdmVjMiBkdmVjMyBkdmVjNCBmbG9hdCBpaW1hZ2UxRCBpaW1hZ2UxREFycmF5ICcgK1xuICAgICAgICAnaWltYWdlMkQgaWltYWdlMkRBcnJheSBpaW1hZ2UyRE1TIGlpbWFnZTJETVNBcnJheSBpaW1hZ2UyRFJlY3QgaWltYWdlM0QgaWltYWdlQnVmZmVyICcgK1xuICAgICAgICAnaWltYWdlQ3ViZSBpaW1hZ2VDdWJlQXJyYXkgaW1hZ2UxRCBpbWFnZTFEQXJyYXkgaW1hZ2UyRCBpbWFnZTJEQXJyYXkgaW1hZ2UyRE1TIGltYWdlMkRNU0FycmF5ICcgK1xuICAgICAgICAnaW1hZ2UyRFJlY3QgaW1hZ2UzRCBpbWFnZUJ1ZmZlciBpbWFnZUN1YmUgaW1hZ2VDdWJlQXJyYXkgaW50IGlzYW1wbGVyMUQgaXNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAnaXNhbXBsZXIyRCBpc2FtcGxlcjJEQXJyYXkgaXNhbXBsZXIyRE1TIGlzYW1wbGVyMkRNU0FycmF5IGlzYW1wbGVyMkRSZWN0IGlzYW1wbGVyM0QgJyArXG4gICAgICAgICdpc2FtcGxlckJ1ZmZlciBpc2FtcGxlckN1YmUgaXNhbXBsZXJDdWJlQXJyYXkgaXZlYzIgaXZlYzMgaXZlYzQgbWF0MiBtYXQyeDIgbWF0MngzICcgK1xuICAgICAgICAnbWF0Mng0IG1hdDMgbWF0M3gyIG1hdDN4MyBtYXQzeDQgbWF0NCBtYXQ0eDIgbWF0NHgzIG1hdDR4NCBzYW1wbGVyMUQgc2FtcGxlcjFEQXJyYXkgJyArXG4gICAgICAgICdzYW1wbGVyMURBcnJheVNoYWRvdyBzYW1wbGVyMURTaGFkb3cgc2FtcGxlcjJEIHNhbXBsZXIyREFycmF5IHNhbXBsZXIyREFycmF5U2hhZG93ICcgK1xuICAgICAgICAnc2FtcGxlcjJETVMgc2FtcGxlcjJETVNBcnJheSBzYW1wbGVyMkRSZWN0IHNhbXBsZXIyRFJlY3RTaGFkb3cgc2FtcGxlcjJEU2hhZG93IHNhbXBsZXIzRCAnICtcbiAgICAgICAgJ3NhbXBsZXJCdWZmZXIgc2FtcGxlckN1YmUgc2FtcGxlckN1YmVBcnJheSBzYW1wbGVyQ3ViZUFycmF5U2hhZG93IHNhbXBsZXJDdWJlU2hhZG93ICcgK1xuICAgICAgICAnaW1hZ2UxRCB1aW1hZ2UxREFycmF5IHVpbWFnZTJEIHVpbWFnZTJEQXJyYXkgdWltYWdlMkRNUyB1aW1hZ2UyRE1TQXJyYXkgdWltYWdlMkRSZWN0ICcgK1xuICAgICAgICAndWltYWdlM0QgdWltYWdlQnVmZmVyIHVpbWFnZUN1YmUgdWltYWdlQ3ViZUFycmF5IHVpbnQgdXNhbXBsZXIxRCB1c2FtcGxlcjFEQXJyYXkgJyArXG4gICAgICAgICd1c2FtcGxlcjJEIHVzYW1wbGVyMkRBcnJheSB1c2FtcGxlcjJETVMgdXNhbXBsZXIyRE1TQXJyYXkgdXNhbXBsZXIyRFJlY3QgdXNhbXBsZXIzRCAnICtcbiAgICAgICAgJ3NhbXBsZXJCdWZmZXIgdXNhbXBsZXJDdWJlIHVzYW1wbGVyQ3ViZUFycmF5IHV2ZWMyIHV2ZWMzIHV2ZWM0IHZlYzIgdmVjMyB2ZWM0IHZvaWQnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8vIENvbnN0YW50c1xuICAgICAgICAnZ2xfTWF4QXRvbWljQ291bnRlckJpbmRpbmdzIGdsX01heEF0b21pY0NvdW50ZXJCdWZmZXJTaXplIGdsX01heENsaXBEaXN0YW5jZXMgZ2xfTWF4Q2xpcFBsYW5lcyAnICtcbiAgICAgICAgJ2dsX01heENvbWJpbmVkQXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4Q29tYmluZWRBdG9taWNDb3VudGVycyBnbF9NYXhDb21iaW5lZEltYWdlVW5pZm9ybXMgJyArXG4gICAgICAgICdnbF9NYXhDb21iaW5lZEltYWdlVW5pdHNBbmRGcmFnbWVudE91dHB1dHMgZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyBnbF9NYXhDb21wdXRlQXRvbWljQ291bnRlckJ1ZmZlcnMgJyArXG4gICAgICAgICdnbF9NYXhDb21wdXRlQXRvbWljQ291bnRlcnMgZ2xfTWF4Q29tcHV0ZUltYWdlVW5pZm9ybXMgZ2xfTWF4Q29tcHV0ZVRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4Q29tcHV0ZVVuaWZvcm1Db21wb25lbnRzIGdsX01heENvbXB1dGVXb3JrR3JvdXBDb3VudCBnbF9NYXhDb21wdXRlV29ya0dyb3VwU2l6ZSAnICtcbiAgICAgICAgJ2dsX01heERyYXdCdWZmZXJzIGdsX01heEZyYWdtZW50QXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4RnJhZ21lbnRBdG9taWNDb3VudGVycyAnICtcbiAgICAgICAgJ2dsX01heEZyYWdtZW50SW1hZ2VVbmlmb3JtcyBnbF9NYXhGcmFnbWVudElucHV0Q29tcG9uZW50cyBnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyAnICtcbiAgICAgICAgJ2dsX01heEZyYWdtZW50VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyBnbF9NYXhHZW9tZXRyeUF0b21pY0NvdW50ZXJCdWZmZXJzICcgK1xuICAgICAgICAnZ2xfTWF4R2VvbWV0cnlBdG9taWNDb3VudGVycyBnbF9NYXhHZW9tZXRyeUltYWdlVW5pZm9ybXMgZ2xfTWF4R2VvbWV0cnlJbnB1dENvbXBvbmVudHMgJyArXG4gICAgICAgICdnbF9NYXhHZW9tZXRyeU91dHB1dENvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlPdXRwdXRWZXJ0aWNlcyBnbF9NYXhHZW9tZXRyeVRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4R2VvbWV0cnlUb3RhbE91dHB1dENvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhHZW9tZXRyeVZhcnlpbmdDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4SW1hZ2VTYW1wbGVzIGdsX01heEltYWdlVW5pdHMgZ2xfTWF4TGlnaHRzIGdsX01heFBhdGNoVmVydGljZXMgZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0ICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0NvbnRyb2xBdG9taWNDb3VudGVyQnVmZmVycyBnbF9NYXhUZXNzQ29udHJvbEF0b21pY0NvdW50ZXJzIGdsX01heFRlc3NDb250cm9sSW1hZ2VVbmlmb3JtcyAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sSW5wdXRDb21wb25lbnRzIGdsX01heFRlc3NDb250cm9sT3V0cHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzQ29udHJvbFRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0NvbnRyb2xUb3RhbE91dHB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0NvbnRyb2xVbmlmb3JtQ29tcG9uZW50cyAnICtcbiAgICAgICAgJ2dsX01heFRlc3NFdmFsdWF0aW9uQXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VGVzc0V2YWx1YXRpb25BdG9taWNDb3VudGVycyAnICtcbiAgICAgICAgJ2dsX01heFRlc3NFdmFsdWF0aW9uSW1hZ2VVbmlmb3JtcyBnbF9NYXhUZXNzRXZhbHVhdGlvbklucHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzRXZhbHVhdGlvbk91dHB1dENvbXBvbmVudHMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvblRleHR1cmVJbWFnZVVuaXRzIGdsX01heFRlc3NFdmFsdWF0aW9uVW5pZm9ybUNvbXBvbmVudHMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzR2VuTGV2ZWwgZ2xfTWF4VGVzc1BhdGNoQ29tcG9uZW50cyBnbF9NYXhUZXh0dXJlQ29vcmRzIGdsX01heFRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4VGV4dHVyZVVuaXRzIGdsX01heFZhcnlpbmdDb21wb25lbnRzIGdsX01heFZhcnlpbmdGbG9hdHMgZ2xfTWF4VmFyeWluZ1ZlY3RvcnMgJyArXG4gICAgICAgICdnbF9NYXhWZXJ0ZXhBdG9taWNDb3VudGVyQnVmZmVycyBnbF9NYXhWZXJ0ZXhBdG9taWNDb3VudGVycyBnbF9NYXhWZXJ0ZXhBdHRyaWJzIGdsX01heFZlcnRleEltYWdlVW5pZm9ybXMgJyArXG4gICAgICAgICdnbF9NYXhWZXJ0ZXhPdXRwdXRDb21wb25lbnRzIGdsX01heFZlcnRleE91dHB1dFZlY3RvcnMgZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgJyArXG4gICAgICAgICdnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyBnbF9NYXhWaWV3cG9ydHMgZ2xfTWluUHJvZ3JhbVRleGVsT2Zmc2V0ICcgK1xuICAgICAgICAvLyBWYXJpYWJsZXNcbiAgICAgICAgJ2dsX0JhY2tDb2xvciBnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3QgZ2xfQmFja0xpZ2h0UHJvZHVjdCBnbF9CYWNrTWF0ZXJpYWwgJyArXG4gICAgICAgICdnbF9CYWNrU2Vjb25kYXJ5Q29sb3IgZ2xfQ2xpcERpc3RhbmNlIGdsX0NsaXBQbGFuZSBnbF9DbGlwVmVydGV4IGdsX0NvbG9yICcgK1xuICAgICAgICAnZ2xfRGVwdGhSYW5nZSBnbF9FeWVQbGFuZVEgZ2xfRXllUGxhbmVSIGdsX0V5ZVBsYW5lUyBnbF9FeWVQbGFuZVQgZ2xfRm9nIGdsX0ZvZ0Nvb3JkICcgK1xuICAgICAgICAnZ2xfRm9nRnJhZ0Nvb3JkIGdsX0ZyYWdDb2xvciBnbF9GcmFnQ29vcmQgZ2xfRnJhZ0RhdGEgZ2xfRnJhZ0RlcHRoIGdsX0Zyb250Q29sb3IgJyArXG4gICAgICAgICdnbF9Gcm9udEZhY2luZyBnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0IGdsX0Zyb250TGlnaHRQcm9kdWN0IGdsX0Zyb250TWF0ZXJpYWwgJyArXG4gICAgICAgICdnbF9Gcm9udFNlY29uZGFyeUNvbG9yIGdsX0dsb2JhbEludm9jYXRpb25JRCBnbF9JbnN0YW5jZUlEIGdsX0ludm9jYXRpb25JRCBnbF9MYXllciBnbF9MaWdodE1vZGVsICcgK1xuICAgICAgICAnZ2xfTGlnaHRTb3VyY2UgZ2xfTG9jYWxJbnZvY2F0aW9uSUQgZ2xfTG9jYWxJbnZvY2F0aW9uSW5kZXggZ2xfTW9kZWxWaWV3TWF0cml4ICcgK1xuICAgICAgICAnZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZSBnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIGdsX01vZGVsVmlld01hdHJpeFRyYW5zcG9zZSAnICtcbiAgICAgICAgJ2dsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2UgZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UgJyArXG4gICAgICAgICdnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIGdsX011bHRpVGV4Q29vcmQwIGdsX011bHRpVGV4Q29vcmQxIGdsX011bHRpVGV4Q29vcmQyICcgK1xuICAgICAgICAnZ2xfTXVsdGlUZXhDb29yZDMgZ2xfTXVsdGlUZXhDb29yZDQgZ2xfTXVsdGlUZXhDb29yZDUgZ2xfTXVsdGlUZXhDb29yZDYgZ2xfTXVsdGlUZXhDb29yZDcgJyArXG4gICAgICAgICdnbF9Ob3JtYWwgZ2xfTm9ybWFsTWF0cml4IGdsX05vcm1hbFNjYWxlIGdsX051bVNhbXBsZXMgZ2xfTnVtV29ya0dyb3VwcyBnbF9PYmplY3RQbGFuZVEgJyArXG4gICAgICAgICdnbF9PYmplY3RQbGFuZVIgZ2xfT2JqZWN0UGxhbmVTIGdsX09iamVjdFBsYW5lVCBnbF9QYXRjaFZlcnRpY2VzSW4gZ2xfUG9pbnQgZ2xfUG9pbnRDb29yZCAnICtcbiAgICAgICAgJ2dsX1BvaW50U2l6ZSBnbF9Qb3NpdGlvbiBnbF9QcmltaXRpdmVJRCBnbF9QcmltaXRpdmVJREluIGdsX1Byb2plY3Rpb25NYXRyaXggZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UgJyArXG4gICAgICAgICdnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSBnbF9Qcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIGdsX1NhbXBsZUlEIGdsX1NhbXBsZU1hc2sgJyArXG4gICAgICAgICdnbF9TYW1wbGVNYXNrSW4gZ2xfU2FtcGxlUG9zaXRpb24gZ2xfU2Vjb25kYXJ5Q29sb3IgZ2xfVGVzc0Nvb3JkIGdsX1Rlc3NMZXZlbElubmVyIGdsX1Rlc3NMZXZlbE91dGVyICcgK1xuICAgICAgICAnZ2xfVGV4Q29vcmQgZ2xfVGV4dHVyZUVudkNvbG9yIGdsX1RleHR1cmVNYXRyaXggZ2xfVGV4dHVyZU1hdHJpeEludmVyc2UgZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UgJyArXG4gICAgICAgICdnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIGdsX1ZlcnRleCBnbF9WZXJ0ZXhJRCBnbF9WaWV3cG9ydEluZGV4IGdsX1dvcmtHcm91cElEIGdsX1dvcmtHcm91cFNpemUgZ2xfaW4gZ2xfb3V0ICcgK1xuICAgICAgICAvLyBGdW5jdGlvbnNcbiAgICAgICAgJ0VtaXRTdHJlYW1WZXJ0ZXggRW1pdFZlcnRleCBFbmRQcmltaXRpdmUgRW5kU3RyZWFtUHJpbWl0aXZlIGFicyBhY29zIGFjb3NoIGFsbCBhbnkgYXNpbiAnICtcbiAgICAgICAgJ2FzaW5oIGF0YW4gYXRhbmggYXRvbWljQWRkIGF0b21pY0FuZCBhdG9taWNDb21wU3dhcCBhdG9taWNDb3VudGVyIGF0b21pY0NvdW50ZXJEZWNyZW1lbnQgJyArXG4gICAgICAgICdhdG9taWNDb3VudGVySW5jcmVtZW50IGF0b21pY0V4Y2hhbmdlIGF0b21pY01heCBhdG9taWNNaW4gYXRvbWljT3IgYXRvbWljWG9yIGJhcnJpZXIgJyArXG4gICAgICAgICdiaXRDb3VudCBiaXRmaWVsZEV4dHJhY3QgYml0ZmllbGRJbnNlcnQgYml0ZmllbGRSZXZlcnNlIGNlaWwgY2xhbXAgY29zIGNvc2ggY3Jvc3MgJyArXG4gICAgICAgICdkRmR4IGRGZHkgZGVncmVlcyBkZXRlcm1pbmFudCBkaXN0YW5jZSBkb3QgZXF1YWwgZXhwIGV4cDIgZmFjZWZvcndhcmQgZmluZExTQiBmaW5kTVNCICcgK1xuICAgICAgICAnZmxvYXRCaXRzVG9JbnQgZmxvYXRCaXRzVG9VaW50IGZsb29yIGZtYSBmcmFjdCBmcmV4cCBmdHJhbnNmb3JtIGZ3aWR0aCBncmVhdGVyVGhhbiAnICtcbiAgICAgICAgJ2dyZWF0ZXJUaGFuRXF1YWwgZ3JvdXBNZW1vcnlCYXJyaWVyIGltYWdlQXRvbWljQWRkIGltYWdlQXRvbWljQW5kIGltYWdlQXRvbWljQ29tcFN3YXAgJyArXG4gICAgICAgICdpbWFnZUF0b21pY0V4Y2hhbmdlIGltYWdlQXRvbWljTWF4IGltYWdlQXRvbWljTWluIGltYWdlQXRvbWljT3IgaW1hZ2VBdG9taWNYb3IgaW1hZ2VMb2FkICcgK1xuICAgICAgICAnaW1hZ2VTaXplIGltYWdlU3RvcmUgaW11bEV4dGVuZGVkIGludEJpdHNUb0Zsb2F0IGludGVycG9sYXRlQXRDZW50cm9pZCBpbnRlcnBvbGF0ZUF0T2Zmc2V0ICcgK1xuICAgICAgICAnaW50ZXJwb2xhdGVBdFNhbXBsZSBpbnZlcnNlIGludmVyc2VzcXJ0IGlzaW5mIGlzbmFuIGxkZXhwIGxlbmd0aCBsZXNzVGhhbiBsZXNzVGhhbkVxdWFsIGxvZyAnICtcbiAgICAgICAgJ2xvZzIgbWF0cml4Q29tcE11bHQgbWF4IG1lbW9yeUJhcnJpZXIgbWVtb3J5QmFycmllckF0b21pY0NvdW50ZXIgbWVtb3J5QmFycmllckJ1ZmZlciAnICtcbiAgICAgICAgJ21lbW9yeUJhcnJpZXJJbWFnZSBtZW1vcnlCYXJyaWVyU2hhcmVkIG1pbiBtaXggbW9kIG1vZGYgbm9pc2UxIG5vaXNlMiBub2lzZTMgbm9pc2U0ICcgK1xuICAgICAgICAnbm9ybWFsaXplIG5vdCBub3RFcXVhbCBvdXRlclByb2R1Y3QgcGFja0RvdWJsZTJ4MzIgcGFja0hhbGYyeDE2IHBhY2tTbm9ybTJ4MTYgcGFja1Nub3JtNHg4ICcgK1xuICAgICAgICAncGFja1Vub3JtMngxNiBwYWNrVW5vcm00eDggcG93IHJhZGlhbnMgcmVmbGVjdCByZWZyYWN0IHJvdW5kIHJvdW5kRXZlbiBzaGFkb3cxRCBzaGFkb3cxRExvZCAnICtcbiAgICAgICAgJ3NoYWRvdzFEUHJvaiBzaGFkb3cxRFByb2pMb2Qgc2hhZG93MkQgc2hhZG93MkRMb2Qgc2hhZG93MkRQcm9qIHNoYWRvdzJEUHJvakxvZCBzaWduIHNpbiBzaW5oICcgK1xuICAgICAgICAnc21vb3Roc3RlcCBzcXJ0IHN0ZXAgdGFuIHRhbmggdGV4ZWxGZXRjaCB0ZXhlbEZldGNoT2Zmc2V0IHRleHR1cmUgdGV4dHVyZTFEIHRleHR1cmUxRExvZCAnICtcbiAgICAgICAgJ3RleHR1cmUxRFByb2ogdGV4dHVyZTFEUHJvakxvZCB0ZXh0dXJlMkQgdGV4dHVyZTJETG9kIHRleHR1cmUyRFByb2ogdGV4dHVyZTJEUHJvakxvZCAnICtcbiAgICAgICAgJ3RleHR1cmUzRCB0ZXh0dXJlM0RMb2QgdGV4dHVyZTNEUHJvaiB0ZXh0dXJlM0RQcm9qTG9kIHRleHR1cmVDdWJlIHRleHR1cmVDdWJlTG9kICcgK1xuICAgICAgICAndGV4dHVyZUdhdGhlciB0ZXh0dXJlR2F0aGVyT2Zmc2V0IHRleHR1cmVHYXRoZXJPZmZzZXRzIHRleHR1cmVHcmFkIHRleHR1cmVHcmFkT2Zmc2V0ICcgK1xuICAgICAgICAndGV4dHVyZUxvZCB0ZXh0dXJlTG9kT2Zmc2V0IHRleHR1cmVPZmZzZXQgdGV4dHVyZVByb2ogdGV4dHVyZVByb2pHcmFkIHRleHR1cmVQcm9qR3JhZE9mZnNldCAnICtcbiAgICAgICAgJ3RleHR1cmVQcm9qTG9kIHRleHR1cmVQcm9qTG9kT2Zmc2V0IHRleHR1cmVQcm9qT2Zmc2V0IHRleHR1cmVRdWVyeUxldmVscyB0ZXh0dXJlUXVlcnlMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlU2l6ZSB0cmFuc3Bvc2UgdHJ1bmMgdWFkZENhcnJ5IHVpbnRCaXRzVG9GbG9hdCB1bXVsRXh0ZW5kZWQgdW5wYWNrRG91YmxlMngzMiAnICtcbiAgICAgICAgJ3VucGFja0hhbGYyeDE2IHVucGFja1Nub3JtMngxNiB1bnBhY2tTbm9ybTR4OCB1bnBhY2tVbm9ybTJ4MTYgdW5wYWNrVW5vcm00eDggdXN1YkJvcnJvdycsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLFxuICAgICAgICBlbmQ6ICckJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnbHNsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEdNTFxuQXV0aG9yOiBNZXNldGEgPG1lc2V0YUBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogR2FtZSBNYWtlciBMYW5ndWFnZSBmb3IgR2FtZU1ha2VyIFN0dWRpbyAyXG5XZWJzaXRlOiBodHRwczovL2RvY3MyLnlveW9nYW1lcy5jb21cbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbmZ1bmN0aW9uIGdtbChobGpzKSB7XG4gIGNvbnN0IEdNTF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnYmVnaW4gZW5kIGlmIHRoZW4gZWxzZSB3aGlsZSBkbyBmb3IgYnJlYWsgY29udGludWUgd2l0aCB1bnRpbCAnICtcbiAgICAgICdyZXBlYXQgZXhpdCBhbmQgb3IgeG9yIG5vdCByZXR1cm4gbW9kIGRpdiBzd2l0Y2ggY2FzZSBkZWZhdWx0IHZhciAnICtcbiAgICAgICdnbG9iYWx2YXIgZW51bSBmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZWxldGUgI21hY3JvICNyZWdpb24gI2VuZHJlZ2lvbicsXG4gICAgYnVpbHRfaW46ICdpc19yZWFsIGlzX3N0cmluZyBpc19hcnJheSBpc191bmRlZmluZWQgaXNfaW50MzIgaXNfaW50NjQgaXNfcHRyICcgK1xuICAgICAgJ2lzX3ZlYzMgaXNfdmVjNCBpc19tYXRyaXggaXNfYm9vbCBpc19tZXRob2QgaXNfc3RydWN0IGlzX2luZmluaXR5IGlzX25hbiAnICtcbiAgICAgICdpc19udW1lcmljIHR5cGVvZiB2YXJpYWJsZV9nbG9iYWxfZXhpc3RzIHZhcmlhYmxlX2dsb2JhbF9nZXQgdmFyaWFibGVfZ2xvYmFsX3NldCAnICtcbiAgICAgICd2YXJpYWJsZV9pbnN0YW5jZV9leGlzdHMgdmFyaWFibGVfaW5zdGFuY2VfZ2V0IHZhcmlhYmxlX2luc3RhbmNlX3NldCAnICtcbiAgICAgICd2YXJpYWJsZV9pbnN0YW5jZV9nZXRfbmFtZXMgdmFyaWFibGVfc3RydWN0X2V4aXN0cyB2YXJpYWJsZV9zdHJ1Y3RfZ2V0ICcgK1xuICAgICAgJ3ZhcmlhYmxlX3N0cnVjdF9nZXRfbmFtZXMgdmFyaWFibGVfc3RydWN0X25hbWVzX2NvdW50IHZhcmlhYmxlX3N0cnVjdF9yZW1vdmUgJyArXG4gICAgICAndmFyaWFibGVfc3RydWN0X3NldCBhcnJheV9kZWxldGUgYXJyYXlfaW5zZXJ0IGFycmF5X2xlbmd0aCBhcnJheV9sZW5ndGhfMWQgJyArXG4gICAgICAnYXJyYXlfbGVuZ3RoXzJkIGFycmF5X2hlaWdodF8yZCBhcnJheV9lcXVhbHMgYXJyYXlfY3JlYXRlICcgK1xuICAgICAgJ2FycmF5X2NvcHkgYXJyYXlfcG9wIGFycmF5X3B1c2ggYXJyYXlfcmVzaXplIGFycmF5X3NvcnQgJyArXG4gICAgICAncmFuZG9tIHJhbmRvbV9yYW5nZSBpcmFuZG9tIGlyYW5kb21fcmFuZ2UgcmFuZG9tX3NldF9zZWVkIHJhbmRvbV9nZXRfc2VlZCAnICtcbiAgICAgICdyYW5kb21pemUgcmFuZG9taXNlIGNob29zZSBhYnMgcm91bmQgZmxvb3IgY2VpbCBzaWduIGZyYWMgc3FydCBzcXIgJyArXG4gICAgICAnZXhwIGxuIGxvZzIgbG9nMTAgc2luIGNvcyB0YW4gYXJjc2luIGFyY2NvcyBhcmN0YW4gYXJjdGFuMiBkc2luIGRjb3MgJyArXG4gICAgICAnZHRhbiBkYXJjc2luIGRhcmNjb3MgZGFyY3RhbiBkYXJjdGFuMiBkZWd0b3JhZCByYWR0b2RlZyBwb3dlciBsb2duICcgK1xuICAgICAgJ21pbiBtYXggbWVhbiBtZWRpYW4gY2xhbXAgbGVycCBkb3RfcHJvZHVjdCBkb3RfcHJvZHVjdF8zZCAnICtcbiAgICAgICdkb3RfcHJvZHVjdF9ub3JtYWxpc2VkIGRvdF9wcm9kdWN0XzNkX25vcm1hbGlzZWQgJyArXG4gICAgICAnZG90X3Byb2R1Y3Rfbm9ybWFsaXplZCBkb3RfcHJvZHVjdF8zZF9ub3JtYWxpemVkIG1hdGhfc2V0X2Vwc2lsb24gJyArXG4gICAgICAnbWF0aF9nZXRfZXBzaWxvbiBhbmdsZV9kaWZmZXJlbmNlIHBvaW50X2Rpc3RhbmNlXzNkIHBvaW50X2Rpc3RhbmNlICcgK1xuICAgICAgJ3BvaW50X2RpcmVjdGlvbiBsZW5ndGhkaXJfeCBsZW5ndGhkaXJfeSByZWFsIHN0cmluZyBpbnQ2NCBwdHIgJyArXG4gICAgICAnc3RyaW5nX2Zvcm1hdCBjaHIgYW5zaV9jaGFyIG9yZCBzdHJpbmdfbGVuZ3RoIHN0cmluZ19ieXRlX2xlbmd0aCAnICtcbiAgICAgICdzdHJpbmdfcG9zIHN0cmluZ19jb3B5IHN0cmluZ19jaGFyX2F0IHN0cmluZ19vcmRfYXQgc3RyaW5nX2J5dGVfYXQgJyArXG4gICAgICAnc3RyaW5nX3NldF9ieXRlX2F0IHN0cmluZ19kZWxldGUgc3RyaW5nX2luc2VydCBzdHJpbmdfbG93ZXIgJyArXG4gICAgICAnc3RyaW5nX3VwcGVyIHN0cmluZ19yZXBlYXQgc3RyaW5nX2xldHRlcnMgc3RyaW5nX2RpZ2l0cyAnICtcbiAgICAgICdzdHJpbmdfbGV0dGVyc2RpZ2l0cyBzdHJpbmdfcmVwbGFjZSBzdHJpbmdfcmVwbGFjZV9hbGwgc3RyaW5nX2NvdW50ICcgK1xuICAgICAgJ3N0cmluZ19oYXNoX3RvX25ld2xpbmUgY2xpcGJvYXJkX2hhc190ZXh0IGNsaXBib2FyZF9zZXRfdGV4dCAnICtcbiAgICAgICdjbGlwYm9hcmRfZ2V0X3RleHQgZGF0ZV9jdXJyZW50X2RhdGV0aW1lIGRhdGVfY3JlYXRlX2RhdGV0aW1lICcgK1xuICAgICAgJ2RhdGVfdmFsaWRfZGF0ZXRpbWUgZGF0ZV9pbmNfeWVhciBkYXRlX2luY19tb250aCBkYXRlX2luY193ZWVrICcgK1xuICAgICAgJ2RhdGVfaW5jX2RheSBkYXRlX2luY19ob3VyIGRhdGVfaW5jX21pbnV0ZSBkYXRlX2luY19zZWNvbmQgJyArXG4gICAgICAnZGF0ZV9nZXRfeWVhciBkYXRlX2dldF9tb250aCBkYXRlX2dldF93ZWVrIGRhdGVfZ2V0X2RheSAnICtcbiAgICAgICdkYXRlX2dldF9ob3VyIGRhdGVfZ2V0X21pbnV0ZSBkYXRlX2dldF9zZWNvbmQgZGF0ZV9nZXRfd2Vla2RheSAnICtcbiAgICAgICdkYXRlX2dldF9kYXlfb2ZfeWVhciBkYXRlX2dldF9ob3VyX29mX3llYXIgZGF0ZV9nZXRfbWludXRlX29mX3llYXIgJyArXG4gICAgICAnZGF0ZV9nZXRfc2Vjb25kX29mX3llYXIgZGF0ZV95ZWFyX3NwYW4gZGF0ZV9tb250aF9zcGFuICcgK1xuICAgICAgJ2RhdGVfd2Vla19zcGFuIGRhdGVfZGF5X3NwYW4gZGF0ZV9ob3VyX3NwYW4gZGF0ZV9taW51dGVfc3BhbiAnICtcbiAgICAgICdkYXRlX3NlY29uZF9zcGFuIGRhdGVfY29tcGFyZV9kYXRldGltZSBkYXRlX2NvbXBhcmVfZGF0ZSAnICtcbiAgICAgICdkYXRlX2NvbXBhcmVfdGltZSBkYXRlX2RhdGVfb2YgZGF0ZV90aW1lX29mIGRhdGVfZGF0ZXRpbWVfc3RyaW5nICcgK1xuICAgICAgJ2RhdGVfZGF0ZV9zdHJpbmcgZGF0ZV90aW1lX3N0cmluZyBkYXRlX2RheXNfaW5fbW9udGggJyArXG4gICAgICAnZGF0ZV9kYXlzX2luX3llYXIgZGF0ZV9sZWFwX3llYXIgZGF0ZV9pc190b2RheSBkYXRlX3NldF90aW1lem9uZSAnICtcbiAgICAgICdkYXRlX2dldF90aW1lem9uZSBnYW1lX3NldF9zcGVlZCBnYW1lX2dldF9zcGVlZCBtb3Rpb25fc2V0ICcgK1xuICAgICAgJ21vdGlvbl9hZGQgcGxhY2VfZnJlZSBwbGFjZV9lbXB0eSBwbGFjZV9tZWV0aW5nIHBsYWNlX3NuYXBwZWQgJyArXG4gICAgICAnbW92ZV9yYW5kb20gbW92ZV9zbmFwIG1vdmVfdG93YXJkc19wb2ludCBtb3ZlX2NvbnRhY3Rfc29saWQgJyArXG4gICAgICAnbW92ZV9jb250YWN0X2FsbCBtb3ZlX291dHNpZGVfc29saWQgbW92ZV9vdXRzaWRlX2FsbCAnICtcbiAgICAgICdtb3ZlX2JvdW5jZV9zb2xpZCBtb3ZlX2JvdW5jZV9hbGwgbW92ZV93cmFwIGRpc3RhbmNlX3RvX3BvaW50ICcgK1xuICAgICAgJ2Rpc3RhbmNlX3RvX29iamVjdCBwb3NpdGlvbl9lbXB0eSBwb3NpdGlvbl9tZWV0aW5nIHBhdGhfc3RhcnQgJyArXG4gICAgICAncGF0aF9lbmQgbXBfbGluZWFyX3N0ZXAgbXBfcG90ZW50aWFsX3N0ZXAgbXBfbGluZWFyX3N0ZXBfb2JqZWN0ICcgK1xuICAgICAgJ21wX3BvdGVudGlhbF9zdGVwX29iamVjdCBtcF9wb3RlbnRpYWxfc2V0dGluZ3MgbXBfbGluZWFyX3BhdGggJyArXG4gICAgICAnbXBfcG90ZW50aWFsX3BhdGggbXBfbGluZWFyX3BhdGhfb2JqZWN0IG1wX3BvdGVudGlhbF9wYXRoX29iamVjdCAnICtcbiAgICAgICdtcF9ncmlkX2NyZWF0ZSBtcF9ncmlkX2Rlc3Ryb3kgbXBfZ3JpZF9jbGVhcl9hbGwgbXBfZ3JpZF9jbGVhcl9jZWxsICcgK1xuICAgICAgJ21wX2dyaWRfY2xlYXJfcmVjdGFuZ2xlIG1wX2dyaWRfYWRkX2NlbGwgbXBfZ3JpZF9nZXRfY2VsbCAnICtcbiAgICAgICdtcF9ncmlkX2FkZF9yZWN0YW5nbGUgbXBfZ3JpZF9hZGRfaW5zdGFuY2VzIG1wX2dyaWRfcGF0aCAnICtcbiAgICAgICdtcF9ncmlkX2RyYXcgbXBfZ3JpZF90b19kc19ncmlkIGNvbGxpc2lvbl9wb2ludCBjb2xsaXNpb25fcmVjdGFuZ2xlICcgK1xuICAgICAgJ2NvbGxpc2lvbl9jaXJjbGUgY29sbGlzaW9uX2VsbGlwc2UgY29sbGlzaW9uX2xpbmUgJyArXG4gICAgICAnY29sbGlzaW9uX3BvaW50X2xpc3QgY29sbGlzaW9uX3JlY3RhbmdsZV9saXN0IGNvbGxpc2lvbl9jaXJjbGVfbGlzdCAnICtcbiAgICAgICdjb2xsaXNpb25fZWxsaXBzZV9saXN0IGNvbGxpc2lvbl9saW5lX2xpc3QgaW5zdGFuY2VfcG9zaXRpb25fbGlzdCAnICtcbiAgICAgICdpbnN0YW5jZV9wbGFjZV9saXN0IHBvaW50X2luX3JlY3RhbmdsZSAnICtcbiAgICAgICdwb2ludF9pbl90cmlhbmdsZSBwb2ludF9pbl9jaXJjbGUgcmVjdGFuZ2xlX2luX3JlY3RhbmdsZSAnICtcbiAgICAgICdyZWN0YW5nbGVfaW5fdHJpYW5nbGUgcmVjdGFuZ2xlX2luX2NpcmNsZSBpbnN0YW5jZV9maW5kICcgK1xuICAgICAgJ2luc3RhbmNlX2V4aXN0cyBpbnN0YW5jZV9udW1iZXIgaW5zdGFuY2VfcG9zaXRpb24gaW5zdGFuY2VfbmVhcmVzdCAnICtcbiAgICAgICdpbnN0YW5jZV9mdXJ0aGVzdCBpbnN0YW5jZV9wbGFjZSBpbnN0YW5jZV9jcmVhdGVfZGVwdGggJyArXG4gICAgICAnaW5zdGFuY2VfY3JlYXRlX2xheWVyIGluc3RhbmNlX2NvcHkgaW5zdGFuY2VfY2hhbmdlIGluc3RhbmNlX2Rlc3Ryb3kgJyArXG4gICAgICAncG9zaXRpb25fZGVzdHJveSBwb3NpdGlvbl9jaGFuZ2UgaW5zdGFuY2VfaWRfZ2V0ICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfYWxsIGluc3RhbmNlX2RlYWN0aXZhdGVfb2JqZWN0ICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfcmVnaW9uIGluc3RhbmNlX2FjdGl2YXRlX2FsbCAnICtcbiAgICAgICdpbnN0YW5jZV9hY3RpdmF0ZV9vYmplY3QgaW5zdGFuY2VfYWN0aXZhdGVfcmVnaW9uIHJvb21fZ290byAnICtcbiAgICAgICdyb29tX2dvdG9fcHJldmlvdXMgcm9vbV9nb3RvX25leHQgcm9vbV9wcmV2aW91cyByb29tX25leHQgJyArXG4gICAgICAncm9vbV9yZXN0YXJ0IGdhbWVfZW5kIGdhbWVfcmVzdGFydCBnYW1lX2xvYWQgZ2FtZV9zYXZlICcgK1xuICAgICAgJ2dhbWVfc2F2ZV9idWZmZXIgZ2FtZV9sb2FkX2J1ZmZlciBldmVudF9wZXJmb3JtIGV2ZW50X3VzZXIgJyArXG4gICAgICAnZXZlbnRfcGVyZm9ybV9vYmplY3QgZXZlbnRfaW5oZXJpdGVkIHNob3dfZGVidWdfbWVzc2FnZSAnICtcbiAgICAgICdzaG93X2RlYnVnX292ZXJsYXkgZGVidWdfZXZlbnQgZGVidWdfZ2V0X2NhbGxzdGFjayBhbGFybV9nZXQgJyArXG4gICAgICAnYWxhcm1fc2V0IGZvbnRfdGV4dHVyZV9wYWdlX3NpemUga2V5Ym9hcmRfc2V0X21hcCBrZXlib2FyZF9nZXRfbWFwICcgK1xuICAgICAgJ2tleWJvYXJkX3Vuc2V0X21hcCBrZXlib2FyZF9jaGVjayBrZXlib2FyZF9jaGVja19wcmVzc2VkICcgK1xuICAgICAgJ2tleWJvYXJkX2NoZWNrX3JlbGVhc2VkIGtleWJvYXJkX2NoZWNrX2RpcmVjdCBrZXlib2FyZF9nZXRfbnVtbG9jayAnICtcbiAgICAgICdrZXlib2FyZF9zZXRfbnVtbG9jayBrZXlib2FyZF9rZXlfcHJlc3Mga2V5Ym9hcmRfa2V5X3JlbGVhc2UgJyArXG4gICAgICAna2V5Ym9hcmRfY2xlYXIgaW9fY2xlYXIgbW91c2VfY2hlY2tfYnV0dG9uICcgK1xuICAgICAgJ21vdXNlX2NoZWNrX2J1dHRvbl9wcmVzc2VkIG1vdXNlX2NoZWNrX2J1dHRvbl9yZWxlYXNlZCAnICtcbiAgICAgICdtb3VzZV93aGVlbF91cCBtb3VzZV93aGVlbF9kb3duIG1vdXNlX2NsZWFyIGRyYXdfc2VsZiBkcmF3X3Nwcml0ZSAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9wb3MgZHJhd19zcHJpdGVfZXh0IGRyYXdfc3ByaXRlX3N0cmV0Y2hlZCAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9zdHJldGNoZWRfZXh0IGRyYXdfc3ByaXRlX3RpbGVkIGRyYXdfc3ByaXRlX3RpbGVkX2V4dCAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9wYXJ0IGRyYXdfc3ByaXRlX3BhcnRfZXh0IGRyYXdfc3ByaXRlX2dlbmVyYWwgZHJhd19jbGVhciAnICtcbiAgICAgICdkcmF3X2NsZWFyX2FscGhhIGRyYXdfcG9pbnQgZHJhd19saW5lIGRyYXdfbGluZV93aWR0aCBkcmF3X3JlY3RhbmdsZSAnICtcbiAgICAgICdkcmF3X3JvdW5kcmVjdCBkcmF3X3JvdW5kcmVjdF9leHQgZHJhd190cmlhbmdsZSBkcmF3X2NpcmNsZSAnICtcbiAgICAgICdkcmF3X2VsbGlwc2UgZHJhd19zZXRfY2lyY2xlX3ByZWNpc2lvbiBkcmF3X2Fycm93IGRyYXdfYnV0dG9uICcgK1xuICAgICAgJ2RyYXdfcGF0aCBkcmF3X2hlYWx0aGJhciBkcmF3X2dldHBpeGVsIGRyYXdfZ2V0cGl4ZWxfZXh0ICcgK1xuICAgICAgJ2RyYXdfc2V0X2NvbG91ciBkcmF3X3NldF9jb2xvciBkcmF3X3NldF9hbHBoYSBkcmF3X2dldF9jb2xvdXIgJyArXG4gICAgICAnZHJhd19nZXRfY29sb3IgZHJhd19nZXRfYWxwaGEgbWVyZ2VfY29sb3VyIG1ha2VfY29sb3VyX3JnYiAnICtcbiAgICAgICdtYWtlX2NvbG91cl9oc3YgY29sb3VyX2dldF9yZWQgY29sb3VyX2dldF9ncmVlbiBjb2xvdXJfZ2V0X2JsdWUgJyArXG4gICAgICAnY29sb3VyX2dldF9odWUgY29sb3VyX2dldF9zYXR1cmF0aW9uIGNvbG91cl9nZXRfdmFsdWUgbWVyZ2VfY29sb3IgJyArXG4gICAgICAnbWFrZV9jb2xvcl9yZ2IgbWFrZV9jb2xvcl9oc3YgY29sb3JfZ2V0X3JlZCBjb2xvcl9nZXRfZ3JlZW4gJyArXG4gICAgICAnY29sb3JfZ2V0X2JsdWUgY29sb3JfZ2V0X2h1ZSBjb2xvcl9nZXRfc2F0dXJhdGlvbiBjb2xvcl9nZXRfdmFsdWUgJyArXG4gICAgICAnbWVyZ2VfY29sb3Igc2NyZWVuX3NhdmUgc2NyZWVuX3NhdmVfcGFydCBkcmF3X3NldF9mb250ICcgK1xuICAgICAgJ2RyYXdfc2V0X2hhbGlnbiBkcmF3X3NldF92YWxpZ24gZHJhd190ZXh0IGRyYXdfdGV4dF9leHQgc3RyaW5nX3dpZHRoICcgK1xuICAgICAgJ3N0cmluZ19oZWlnaHQgc3RyaW5nX3dpZHRoX2V4dCBzdHJpbmdfaGVpZ2h0X2V4dCAnICtcbiAgICAgICdkcmF3X3RleHRfdHJhbnNmb3JtZWQgZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZCBkcmF3X3RleHRfY29sb3VyICcgK1xuICAgICAgJ2RyYXdfdGV4dF9leHRfY29sb3VyIGRyYXdfdGV4dF90cmFuc2Zvcm1lZF9jb2xvdXIgJyArXG4gICAgICAnZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZF9jb2xvdXIgZHJhd190ZXh0X2NvbG9yIGRyYXdfdGV4dF9leHRfY29sb3IgJyArXG4gICAgICAnZHJhd190ZXh0X3RyYW5zZm9ybWVkX2NvbG9yIGRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRfY29sb3IgJyArXG4gICAgICAnZHJhd19wb2ludF9jb2xvdXIgZHJhd19saW5lX2NvbG91ciBkcmF3X2xpbmVfd2lkdGhfY29sb3VyICcgK1xuICAgICAgJ2RyYXdfcmVjdGFuZ2xlX2NvbG91ciBkcmF3X3JvdW5kcmVjdF9jb2xvdXIgJyArXG4gICAgICAnZHJhd19yb3VuZHJlY3RfY29sb3VyX2V4dCBkcmF3X3RyaWFuZ2xlX2NvbG91ciBkcmF3X2NpcmNsZV9jb2xvdXIgJyArXG4gICAgICAnZHJhd19lbGxpcHNlX2NvbG91ciBkcmF3X3BvaW50X2NvbG9yIGRyYXdfbGluZV9jb2xvciAnICtcbiAgICAgICdkcmF3X2xpbmVfd2lkdGhfY29sb3IgZHJhd19yZWN0YW5nbGVfY29sb3IgZHJhd19yb3VuZHJlY3RfY29sb3IgJyArXG4gICAgICAnZHJhd19yb3VuZHJlY3RfY29sb3JfZXh0IGRyYXdfdHJpYW5nbGVfY29sb3IgZHJhd19jaXJjbGVfY29sb3IgJyArXG4gICAgICAnZHJhd19lbGxpcHNlX2NvbG9yIGRyYXdfcHJpbWl0aXZlX2JlZ2luIGRyYXdfdmVydGV4ICcgK1xuICAgICAgJ2RyYXdfdmVydGV4X2NvbG91ciBkcmF3X3ZlcnRleF9jb2xvciBkcmF3X3ByaW1pdGl2ZV9lbmQgJyArXG4gICAgICAnc3ByaXRlX2dldF91dnMgZm9udF9nZXRfdXZzIHNwcml0ZV9nZXRfdGV4dHVyZSBmb250X2dldF90ZXh0dXJlICcgK1xuICAgICAgJ3RleHR1cmVfZ2V0X3dpZHRoIHRleHR1cmVfZ2V0X2hlaWdodCB0ZXh0dXJlX2dldF91dnMgJyArXG4gICAgICAnZHJhd19wcmltaXRpdmVfYmVnaW5fdGV4dHVyZSBkcmF3X3ZlcnRleF90ZXh0dXJlICcgK1xuICAgICAgJ2RyYXdfdmVydGV4X3RleHR1cmVfY29sb3VyIGRyYXdfdmVydGV4X3RleHR1cmVfY29sb3IgJyArXG4gICAgICAndGV4dHVyZV9nbG9iYWxfc2NhbGUgc3VyZmFjZV9jcmVhdGUgc3VyZmFjZV9jcmVhdGVfZXh0ICcgK1xuICAgICAgJ3N1cmZhY2VfcmVzaXplIHN1cmZhY2VfZnJlZSBzdXJmYWNlX2V4aXN0cyBzdXJmYWNlX2dldF93aWR0aCAnICtcbiAgICAgICdzdXJmYWNlX2dldF9oZWlnaHQgc3VyZmFjZV9nZXRfdGV4dHVyZSBzdXJmYWNlX3NldF90YXJnZXQgJyArXG4gICAgICAnc3VyZmFjZV9zZXRfdGFyZ2V0X2V4dCBzdXJmYWNlX3Jlc2V0X3RhcmdldCBzdXJmYWNlX2RlcHRoX2Rpc2FibGUgJyArXG4gICAgICAnc3VyZmFjZV9nZXRfZGVwdGhfZGlzYWJsZSBkcmF3X3N1cmZhY2UgZHJhd19zdXJmYWNlX3N0cmV0Y2hlZCAnICtcbiAgICAgICdkcmF3X3N1cmZhY2VfdGlsZWQgZHJhd19zdXJmYWNlX3BhcnQgZHJhd19zdXJmYWNlX2V4dCAnICtcbiAgICAgICdkcmF3X3N1cmZhY2Vfc3RyZXRjaGVkX2V4dCBkcmF3X3N1cmZhY2VfdGlsZWRfZXh0ICcgK1xuICAgICAgJ2RyYXdfc3VyZmFjZV9wYXJ0X2V4dCBkcmF3X3N1cmZhY2VfZ2VuZXJhbCBzdXJmYWNlX2dldHBpeGVsICcgK1xuICAgICAgJ3N1cmZhY2VfZ2V0cGl4ZWxfZXh0IHN1cmZhY2Vfc2F2ZSBzdXJmYWNlX3NhdmVfcGFydCBzdXJmYWNlX2NvcHkgJyArXG4gICAgICAnc3VyZmFjZV9jb3B5X3BhcnQgYXBwbGljYXRpb25fc3VyZmFjZV9kcmF3X2VuYWJsZSAnICtcbiAgICAgICdhcHBsaWNhdGlvbl9nZXRfcG9zaXRpb24gYXBwbGljYXRpb25fc3VyZmFjZV9lbmFibGUgJyArXG4gICAgICAnYXBwbGljYXRpb25fc3VyZmFjZV9pc19lbmFibGVkIGRpc3BsYXlfZ2V0X3dpZHRoIGRpc3BsYXlfZ2V0X2hlaWdodCAnICtcbiAgICAgICdkaXNwbGF5X2dldF9vcmllbnRhdGlvbiBkaXNwbGF5X2dldF9ndWlfd2lkdGggZGlzcGxheV9nZXRfZ3VpX2hlaWdodCAnICtcbiAgICAgICdkaXNwbGF5X3Jlc2V0IGRpc3BsYXlfbW91c2VfZ2V0X3ggZGlzcGxheV9tb3VzZV9nZXRfeSAnICtcbiAgICAgICdkaXNwbGF5X21vdXNlX3NldCBkaXNwbGF5X3NldF91aV92aXNpYmlsaXR5ICcgK1xuICAgICAgJ3dpbmRvd19zZXRfZnVsbHNjcmVlbiB3aW5kb3dfZ2V0X2Z1bGxzY3JlZW4gJyArXG4gICAgICAnd2luZG93X3NldF9jYXB0aW9uIHdpbmRvd19zZXRfbWluX3dpZHRoIHdpbmRvd19zZXRfbWF4X3dpZHRoICcgK1xuICAgICAgJ3dpbmRvd19zZXRfbWluX2hlaWdodCB3aW5kb3dfc2V0X21heF9oZWlnaHQgd2luZG93X2dldF92aXNpYmxlX3JlY3RzICcgK1xuICAgICAgJ3dpbmRvd19nZXRfY2FwdGlvbiB3aW5kb3dfc2V0X2N1cnNvciB3aW5kb3dfZ2V0X2N1cnNvciAnICtcbiAgICAgICd3aW5kb3dfc2V0X2NvbG91ciB3aW5kb3dfZ2V0X2NvbG91ciB3aW5kb3dfc2V0X2NvbG9yICcgK1xuICAgICAgJ3dpbmRvd19nZXRfY29sb3Igd2luZG93X3NldF9wb3NpdGlvbiB3aW5kb3dfc2V0X3NpemUgJyArXG4gICAgICAnd2luZG93X3NldF9yZWN0YW5nbGUgd2luZG93X2NlbnRlciB3aW5kb3dfZ2V0X3ggd2luZG93X2dldF95ICcgK1xuICAgICAgJ3dpbmRvd19nZXRfd2lkdGggd2luZG93X2dldF9oZWlnaHQgd2luZG93X21vdXNlX2dldF94ICcgK1xuICAgICAgJ3dpbmRvd19tb3VzZV9nZXRfeSB3aW5kb3dfbW91c2Vfc2V0IHdpbmRvd192aWV3X21vdXNlX2dldF94ICcgK1xuICAgICAgJ3dpbmRvd192aWV3X21vdXNlX2dldF95IHdpbmRvd192aWV3c19tb3VzZV9nZXRfeCAnICtcbiAgICAgICd3aW5kb3dfdmlld3NfbW91c2VfZ2V0X3kgYXVkaW9fbGlzdGVuZXJfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fbGlzdGVuZXJfdmVsb2NpdHkgYXVkaW9fbGlzdGVuZXJfb3JpZW50YXRpb24gJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9wb3NpdGlvbiBhdWRpb19lbWl0dGVyX2NyZWF0ZSBhdWRpb19lbWl0dGVyX2ZyZWUgJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9leGlzdHMgYXVkaW9fZW1pdHRlcl9waXRjaCBhdWRpb19lbWl0dGVyX3ZlbG9jaXR5ICcgK1xuICAgICAgJ2F1ZGlvX2VtaXR0ZXJfZmFsbG9mZiBhdWRpb19lbWl0dGVyX2dhaW4gYXVkaW9fcGxheV9zb3VuZCAnICtcbiAgICAgICdhdWRpb19wbGF5X3NvdW5kX29uIGF1ZGlvX3BsYXlfc291bmRfYXQgYXVkaW9fc3RvcF9zb3VuZCAnICtcbiAgICAgICdhdWRpb19yZXN1bWVfbXVzaWMgYXVkaW9fbXVzaWNfaXNfcGxheWluZyBhdWRpb19yZXN1bWVfc291bmQgJyArXG4gICAgICAnYXVkaW9fcGF1c2Vfc291bmQgYXVkaW9fcGF1c2VfbXVzaWMgYXVkaW9fY2hhbm5lbF9udW0gJyArXG4gICAgICAnYXVkaW9fc291bmRfbGVuZ3RoIGF1ZGlvX2dldF90eXBlIGF1ZGlvX2ZhbGxvZmZfc2V0X21vZGVsICcgK1xuICAgICAgJ2F1ZGlvX3BsYXlfbXVzaWMgYXVkaW9fc3RvcF9tdXNpYyBhdWRpb19tYXN0ZXJfZ2FpbiBhdWRpb19tdXNpY19nYWluICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX2dhaW4gYXVkaW9fc291bmRfcGl0Y2ggYXVkaW9fc3RvcF9hbGwgYXVkaW9fcmVzdW1lX2FsbCAnICtcbiAgICAgICdhdWRpb19wYXVzZV9hbGwgYXVkaW9faXNfcGxheWluZyBhdWRpb19pc19wYXVzZWQgYXVkaW9fZXhpc3RzICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX3NldF90cmFja19wb3NpdGlvbiBhdWRpb19zb3VuZF9nZXRfdHJhY2tfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9nZXRfZ2FpbiBhdWRpb19lbWl0dGVyX2dldF9waXRjaCBhdWRpb19lbWl0dGVyX2dldF94ICcgK1xuICAgICAgJ2F1ZGlvX2VtaXR0ZXJfZ2V0X3kgYXVkaW9fZW1pdHRlcl9nZXRfeiBhdWRpb19lbWl0dGVyX2dldF92eCAnICtcbiAgICAgICdhdWRpb19lbWl0dGVyX2dldF92eSBhdWRpb19lbWl0dGVyX2dldF92eiAnICtcbiAgICAgICdhdWRpb19saXN0ZW5lcl9zZXRfcG9zaXRpb24gYXVkaW9fbGlzdGVuZXJfc2V0X3ZlbG9jaXR5ICcgK1xuICAgICAgJ2F1ZGlvX2xpc3RlbmVyX3NldF9vcmllbnRhdGlvbiBhdWRpb19saXN0ZW5lcl9nZXRfZGF0YSAnICtcbiAgICAgICdhdWRpb19zZXRfbWFzdGVyX2dhaW4gYXVkaW9fZ2V0X21hc3Rlcl9nYWluIGF1ZGlvX3NvdW5kX2dldF9nYWluICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX2dldF9waXRjaCBhdWRpb19nZXRfbmFtZSBhdWRpb19zb3VuZF9zZXRfdHJhY2tfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fc291bmRfZ2V0X3RyYWNrX3Bvc2l0aW9uIGF1ZGlvX2NyZWF0ZV9zdHJlYW0gJyArXG4gICAgICAnYXVkaW9fZGVzdHJveV9zdHJlYW0gYXVkaW9fY3JlYXRlX3N5bmNfZ3JvdXAgJyArXG4gICAgICAnYXVkaW9fZGVzdHJveV9zeW5jX2dyb3VwIGF1ZGlvX3BsYXlfaW5fc3luY19ncm91cCAnICtcbiAgICAgICdhdWRpb19zdGFydF9zeW5jX2dyb3VwIGF1ZGlvX3N0b3Bfc3luY19ncm91cCBhdWRpb19wYXVzZV9zeW5jX2dyb3VwICcgK1xuICAgICAgJ2F1ZGlvX3Jlc3VtZV9zeW5jX2dyb3VwIGF1ZGlvX3N5bmNfZ3JvdXBfZ2V0X3RyYWNrX3BvcyAnICtcbiAgICAgICdhdWRpb19zeW5jX2dyb3VwX2RlYnVnIGF1ZGlvX3N5bmNfZ3JvdXBfaXNfcGxheWluZyBhdWRpb19kZWJ1ZyAnICtcbiAgICAgICdhdWRpb19ncm91cF9sb2FkIGF1ZGlvX2dyb3VwX3VubG9hZCBhdWRpb19ncm91cF9pc19sb2FkZWQgJyArXG4gICAgICAnYXVkaW9fZ3JvdXBfbG9hZF9wcm9ncmVzcyBhdWRpb19ncm91cF9uYW1lIGF1ZGlvX2dyb3VwX3N0b3BfYWxsICcgK1xuICAgICAgJ2F1ZGlvX2dyb3VwX3NldF9nYWluIGF1ZGlvX2NyZWF0ZV9idWZmZXJfc291bmQgJyArXG4gICAgICAnYXVkaW9fZnJlZV9idWZmZXJfc291bmQgYXVkaW9fY3JlYXRlX3BsYXlfcXVldWUgJyArXG4gICAgICAnYXVkaW9fZnJlZV9wbGF5X3F1ZXVlIGF1ZGlvX3F1ZXVlX3NvdW5kIGF1ZGlvX2dldF9yZWNvcmRlcl9jb3VudCAnICtcbiAgICAgICdhdWRpb19nZXRfcmVjb3JkZXJfaW5mbyBhdWRpb19zdGFydF9yZWNvcmRpbmcgYXVkaW9fc3RvcF9yZWNvcmRpbmcgJyArXG4gICAgICAnYXVkaW9fc291bmRfZ2V0X2xpc3RlbmVyX21hc2sgYXVkaW9fZW1pdHRlcl9nZXRfbGlzdGVuZXJfbWFzayAnICtcbiAgICAgICdhdWRpb19nZXRfbGlzdGVuZXJfbWFzayBhdWRpb19zb3VuZF9zZXRfbGlzdGVuZXJfbWFzayAnICtcbiAgICAgICdhdWRpb19lbWl0dGVyX3NldF9saXN0ZW5lcl9tYXNrIGF1ZGlvX3NldF9saXN0ZW5lcl9tYXNrICcgK1xuICAgICAgJ2F1ZGlvX2dldF9saXN0ZW5lcl9jb3VudCBhdWRpb19nZXRfbGlzdGVuZXJfaW5mbyBhdWRpb19zeXN0ZW0gJyArXG4gICAgICAnc2hvd19tZXNzYWdlIHNob3dfbWVzc2FnZV9hc3luYyBjbGlja2FibGVfYWRkIGNsaWNrYWJsZV9hZGRfZXh0ICcgK1xuICAgICAgJ2NsaWNrYWJsZV9jaGFuZ2UgY2xpY2thYmxlX2NoYW5nZV9leHQgY2xpY2thYmxlX2RlbGV0ZSAnICtcbiAgICAgICdjbGlja2FibGVfZXhpc3RzIGNsaWNrYWJsZV9zZXRfc3R5bGUgc2hvd19xdWVzdGlvbiAnICtcbiAgICAgICdzaG93X3F1ZXN0aW9uX2FzeW5jIGdldF9pbnRlZ2VyIGdldF9zdHJpbmcgZ2V0X2ludGVnZXJfYXN5bmMgJyArXG4gICAgICAnZ2V0X3N0cmluZ19hc3luYyBnZXRfbG9naW5fYXN5bmMgZ2V0X29wZW5fZmlsZW5hbWUgZ2V0X3NhdmVfZmlsZW5hbWUgJyArXG4gICAgICAnZ2V0X29wZW5fZmlsZW5hbWVfZXh0IGdldF9zYXZlX2ZpbGVuYW1lX2V4dCBzaG93X2Vycm9yICcgK1xuICAgICAgJ2hpZ2hzY29yZV9jbGVhciBoaWdoc2NvcmVfYWRkIGhpZ2hzY29yZV92YWx1ZSBoaWdoc2NvcmVfbmFtZSAnICtcbiAgICAgICdkcmF3X2hpZ2hzY29yZSBzcHJpdGVfZXhpc3RzIHNwcml0ZV9nZXRfbmFtZSBzcHJpdGVfZ2V0X251bWJlciAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3dpZHRoIHNwcml0ZV9nZXRfaGVpZ2h0IHNwcml0ZV9nZXRfeG9mZnNldCAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3lvZmZzZXQgc3ByaXRlX2dldF9iYm94X2xlZnQgc3ByaXRlX2dldF9iYm94X3JpZ2h0ICcgK1xuICAgICAgJ3Nwcml0ZV9nZXRfYmJveF90b3Agc3ByaXRlX2dldF9iYm94X2JvdHRvbSBzcHJpdGVfc2F2ZSAnICtcbiAgICAgICdzcHJpdGVfc2F2ZV9zdHJpcCBzcHJpdGVfc2V0X2NhY2hlX3NpemUgc3ByaXRlX3NldF9jYWNoZV9zaXplX2V4dCAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3RwZSBzcHJpdGVfcHJlZmV0Y2ggc3ByaXRlX3ByZWZldGNoX211bHRpIHNwcml0ZV9mbHVzaCAnICtcbiAgICAgICdzcHJpdGVfZmx1c2hfbXVsdGkgc3ByaXRlX3NldF9zcGVlZCBzcHJpdGVfZ2V0X3NwZWVkX3R5cGUgJyArXG4gICAgICAnc3ByaXRlX2dldF9zcGVlZCBmb250X2V4aXN0cyBmb250X2dldF9uYW1lIGZvbnRfZ2V0X2ZvbnRuYW1lICcgK1xuICAgICAgJ2ZvbnRfZ2V0X2JvbGQgZm9udF9nZXRfaXRhbGljIGZvbnRfZ2V0X2ZpcnN0IGZvbnRfZ2V0X2xhc3QgJyArXG4gICAgICAnZm9udF9nZXRfc2l6ZSBmb250X3NldF9jYWNoZV9zaXplIHBhdGhfZXhpc3RzIHBhdGhfZ2V0X25hbWUgJyArXG4gICAgICAncGF0aF9nZXRfbGVuZ3RoIHBhdGhfZ2V0X3RpbWUgcGF0aF9nZXRfa2luZCBwYXRoX2dldF9jbG9zZWQgJyArXG4gICAgICAncGF0aF9nZXRfcHJlY2lzaW9uIHBhdGhfZ2V0X251bWJlciBwYXRoX2dldF9wb2ludF94IHBhdGhfZ2V0X3BvaW50X3kgJyArXG4gICAgICAncGF0aF9nZXRfcG9pbnRfc3BlZWQgcGF0aF9nZXRfeCBwYXRoX2dldF95IHBhdGhfZ2V0X3NwZWVkICcgK1xuICAgICAgJ3NjcmlwdF9leGlzdHMgc2NyaXB0X2dldF9uYW1lIHRpbWVsaW5lX2FkZCB0aW1lbGluZV9kZWxldGUgJyArXG4gICAgICAndGltZWxpbmVfY2xlYXIgdGltZWxpbmVfZXhpc3RzIHRpbWVsaW5lX2dldF9uYW1lICcgK1xuICAgICAgJ3RpbWVsaW5lX21vbWVudF9jbGVhciB0aW1lbGluZV9tb21lbnRfYWRkX3NjcmlwdCB0aW1lbGluZV9zaXplICcgK1xuICAgICAgJ3RpbWVsaW5lX21heF9tb21lbnQgb2JqZWN0X2V4aXN0cyBvYmplY3RfZ2V0X25hbWUgb2JqZWN0X2dldF9zcHJpdGUgJyArXG4gICAgICAnb2JqZWN0X2dldF9zb2xpZCBvYmplY3RfZ2V0X3Zpc2libGUgb2JqZWN0X2dldF9wZXJzaXN0ZW50ICcgK1xuICAgICAgJ29iamVjdF9nZXRfbWFzayBvYmplY3RfZ2V0X3BhcmVudCBvYmplY3RfZ2V0X3BoeXNpY3MgJyArXG4gICAgICAnb2JqZWN0X2lzX2FuY2VzdG9yIHJvb21fZXhpc3RzIHJvb21fZ2V0X25hbWUgc3ByaXRlX3NldF9vZmZzZXQgJyArXG4gICAgICAnc3ByaXRlX2R1cGxpY2F0ZSBzcHJpdGVfYXNzaWduIHNwcml0ZV9tZXJnZSBzcHJpdGVfYWRkICcgK1xuICAgICAgJ3Nwcml0ZV9yZXBsYWNlIHNwcml0ZV9jcmVhdGVfZnJvbV9zdXJmYWNlIHNwcml0ZV9hZGRfZnJvbV9zdXJmYWNlICcgK1xuICAgICAgJ3Nwcml0ZV9kZWxldGUgc3ByaXRlX3NldF9hbHBoYV9mcm9tX3Nwcml0ZSBzcHJpdGVfY29sbGlzaW9uX21hc2sgJyArXG4gICAgICAnZm9udF9hZGRfZW5hYmxlX2FhIGZvbnRfYWRkX2dldF9lbmFibGVfYWEgZm9udF9hZGQgZm9udF9hZGRfc3ByaXRlICcgK1xuICAgICAgJ2ZvbnRfYWRkX3Nwcml0ZV9leHQgZm9udF9yZXBsYWNlIGZvbnRfcmVwbGFjZV9zcHJpdGUgJyArXG4gICAgICAnZm9udF9yZXBsYWNlX3Nwcml0ZV9leHQgZm9udF9kZWxldGUgcGF0aF9zZXRfa2luZCBwYXRoX3NldF9jbG9zZWQgJyArXG4gICAgICAncGF0aF9zZXRfcHJlY2lzaW9uIHBhdGhfYWRkIHBhdGhfYXNzaWduIHBhdGhfZHVwbGljYXRlIHBhdGhfYXBwZW5kICcgK1xuICAgICAgJ3BhdGhfZGVsZXRlIHBhdGhfYWRkX3BvaW50IHBhdGhfaW5zZXJ0X3BvaW50IHBhdGhfY2hhbmdlX3BvaW50ICcgK1xuICAgICAgJ3BhdGhfZGVsZXRlX3BvaW50IHBhdGhfY2xlYXJfcG9pbnRzIHBhdGhfcmV2ZXJzZSBwYXRoX21pcnJvciAnICtcbiAgICAgICdwYXRoX2ZsaXAgcGF0aF9yb3RhdGUgcGF0aF9yZXNjYWxlIHBhdGhfc2hpZnQgc2NyaXB0X2V4ZWN1dGUgJyArXG4gICAgICAnb2JqZWN0X3NldF9zcHJpdGUgb2JqZWN0X3NldF9zb2xpZCBvYmplY3Rfc2V0X3Zpc2libGUgJyArXG4gICAgICAnb2JqZWN0X3NldF9wZXJzaXN0ZW50IG9iamVjdF9zZXRfbWFzayByb29tX3NldF93aWR0aCByb29tX3NldF9oZWlnaHQgJyArXG4gICAgICAncm9vbV9zZXRfcGVyc2lzdGVudCByb29tX3NldF9iYWNrZ3JvdW5kX2NvbG91ciAnICtcbiAgICAgICdyb29tX3NldF9iYWNrZ3JvdW5kX2NvbG9yIHJvb21fc2V0X3ZpZXcgcm9vbV9zZXRfdmlld3BvcnQgJyArXG4gICAgICAncm9vbV9nZXRfdmlld3BvcnQgcm9vbV9zZXRfdmlld19lbmFibGVkIHJvb21fYWRkIHJvb21fZHVwbGljYXRlICcgK1xuICAgICAgJ3Jvb21fYXNzaWduIHJvb21faW5zdGFuY2VfYWRkIHJvb21faW5zdGFuY2VfY2xlYXIgcm9vbV9nZXRfY2FtZXJhICcgK1xuICAgICAgJ3Jvb21fc2V0X2NhbWVyYSBhc3NldF9nZXRfaW5kZXggYXNzZXRfZ2V0X3R5cGUgJyArXG4gICAgICAnZmlsZV90ZXh0X29wZW5fZnJvbV9zdHJpbmcgZmlsZV90ZXh0X29wZW5fcmVhZCBmaWxlX3RleHRfb3Blbl93cml0ZSAnICtcbiAgICAgICdmaWxlX3RleHRfb3Blbl9hcHBlbmQgZmlsZV90ZXh0X2Nsb3NlIGZpbGVfdGV4dF93cml0ZV9zdHJpbmcgJyArXG4gICAgICAnZmlsZV90ZXh0X3dyaXRlX3JlYWwgZmlsZV90ZXh0X3dyaXRlbG4gZmlsZV90ZXh0X3JlYWRfc3RyaW5nICcgK1xuICAgICAgJ2ZpbGVfdGV4dF9yZWFkX3JlYWwgZmlsZV90ZXh0X3JlYWRsbiBmaWxlX3RleHRfZW9mIGZpbGVfdGV4dF9lb2xuICcgK1xuICAgICAgJ2ZpbGVfZXhpc3RzIGZpbGVfZGVsZXRlIGZpbGVfcmVuYW1lIGZpbGVfY29weSBkaXJlY3RvcnlfZXhpc3RzICcgK1xuICAgICAgJ2RpcmVjdG9yeV9jcmVhdGUgZGlyZWN0b3J5X2Rlc3Ryb3kgZmlsZV9maW5kX2ZpcnN0IGZpbGVfZmluZF9uZXh0ICcgK1xuICAgICAgJ2ZpbGVfZmluZF9jbG9zZSBmaWxlX2F0dHJpYnV0ZXMgZmlsZW5hbWVfbmFtZSBmaWxlbmFtZV9wYXRoICcgK1xuICAgICAgJ2ZpbGVuYW1lX2RpciBmaWxlbmFtZV9kcml2ZSBmaWxlbmFtZV9leHQgZmlsZW5hbWVfY2hhbmdlX2V4dCAnICtcbiAgICAgICdmaWxlX2Jpbl9vcGVuIGZpbGVfYmluX3Jld3JpdGUgZmlsZV9iaW5fY2xvc2UgZmlsZV9iaW5fcG9zaXRpb24gJyArXG4gICAgICAnZmlsZV9iaW5fc2l6ZSBmaWxlX2Jpbl9zZWVrIGZpbGVfYmluX3dyaXRlX2J5dGUgZmlsZV9iaW5fcmVhZF9ieXRlICcgK1xuICAgICAgJ3BhcmFtZXRlcl9jb3VudCBwYXJhbWV0ZXJfc3RyaW5nIGVudmlyb25tZW50X2dldF92YXJpYWJsZSAnICtcbiAgICAgICdpbmlfb3Blbl9mcm9tX3N0cmluZyBpbmlfb3BlbiBpbmlfY2xvc2UgaW5pX3JlYWRfc3RyaW5nICcgK1xuICAgICAgJ2luaV9yZWFkX3JlYWwgaW5pX3dyaXRlX3N0cmluZyBpbmlfd3JpdGVfcmVhbCBpbmlfa2V5X2V4aXN0cyAnICtcbiAgICAgICdpbmlfc2VjdGlvbl9leGlzdHMgaW5pX2tleV9kZWxldGUgaW5pX3NlY3Rpb25fZGVsZXRlICcgK1xuICAgICAgJ2RzX3NldF9wcmVjaXNpb24gZHNfZXhpc3RzIGRzX3N0YWNrX2NyZWF0ZSBkc19zdGFja19kZXN0cm95ICcgK1xuICAgICAgJ2RzX3N0YWNrX2NsZWFyIGRzX3N0YWNrX2NvcHkgZHNfc3RhY2tfc2l6ZSBkc19zdGFja19lbXB0eSAnICtcbiAgICAgICdkc19zdGFja19wdXNoIGRzX3N0YWNrX3BvcCBkc19zdGFja190b3AgZHNfc3RhY2tfd3JpdGUgZHNfc3RhY2tfcmVhZCAnICtcbiAgICAgICdkc19xdWV1ZV9jcmVhdGUgZHNfcXVldWVfZGVzdHJveSBkc19xdWV1ZV9jbGVhciBkc19xdWV1ZV9jb3B5ICcgK1xuICAgICAgJ2RzX3F1ZXVlX3NpemUgZHNfcXVldWVfZW1wdHkgZHNfcXVldWVfZW5xdWV1ZSBkc19xdWV1ZV9kZXF1ZXVlICcgK1xuICAgICAgJ2RzX3F1ZXVlX2hlYWQgZHNfcXVldWVfdGFpbCBkc19xdWV1ZV93cml0ZSBkc19xdWV1ZV9yZWFkICcgK1xuICAgICAgJ2RzX2xpc3RfY3JlYXRlIGRzX2xpc3RfZGVzdHJveSBkc19saXN0X2NsZWFyIGRzX2xpc3RfY29weSAnICtcbiAgICAgICdkc19saXN0X3NpemUgZHNfbGlzdF9lbXB0eSBkc19saXN0X2FkZCBkc19saXN0X2luc2VydCAnICtcbiAgICAgICdkc19saXN0X3JlcGxhY2UgZHNfbGlzdF9kZWxldGUgZHNfbGlzdF9maW5kX2luZGV4IGRzX2xpc3RfZmluZF92YWx1ZSAnICtcbiAgICAgICdkc19saXN0X21hcmtfYXNfbGlzdCBkc19saXN0X21hcmtfYXNfbWFwIGRzX2xpc3Rfc29ydCAnICtcbiAgICAgICdkc19saXN0X3NodWZmbGUgZHNfbGlzdF93cml0ZSBkc19saXN0X3JlYWQgZHNfbGlzdF9zZXQgZHNfbWFwX2NyZWF0ZSAnICtcbiAgICAgICdkc19tYXBfZGVzdHJveSBkc19tYXBfY2xlYXIgZHNfbWFwX2NvcHkgZHNfbWFwX3NpemUgZHNfbWFwX2VtcHR5ICcgK1xuICAgICAgJ2RzX21hcF9hZGQgZHNfbWFwX2FkZF9saXN0IGRzX21hcF9hZGRfbWFwIGRzX21hcF9yZXBsYWNlICcgK1xuICAgICAgJ2RzX21hcF9yZXBsYWNlX21hcCBkc19tYXBfcmVwbGFjZV9saXN0IGRzX21hcF9kZWxldGUgZHNfbWFwX2V4aXN0cyAnICtcbiAgICAgICdkc19tYXBfZmluZF92YWx1ZSBkc19tYXBfZmluZF9wcmV2aW91cyBkc19tYXBfZmluZF9uZXh0ICcgK1xuICAgICAgJ2RzX21hcF9maW5kX2ZpcnN0IGRzX21hcF9maW5kX2xhc3QgZHNfbWFwX3dyaXRlIGRzX21hcF9yZWFkICcgK1xuICAgICAgJ2RzX21hcF9zZWN1cmVfc2F2ZSBkc19tYXBfc2VjdXJlX2xvYWQgZHNfbWFwX3NlY3VyZV9sb2FkX2J1ZmZlciAnICtcbiAgICAgICdkc19tYXBfc2VjdXJlX3NhdmVfYnVmZmVyIGRzX21hcF9zZXQgZHNfcHJpb3JpdHlfY3JlYXRlICcgK1xuICAgICAgJ2RzX3ByaW9yaXR5X2Rlc3Ryb3kgZHNfcHJpb3JpdHlfY2xlYXIgZHNfcHJpb3JpdHlfY29weSAnICtcbiAgICAgICdkc19wcmlvcml0eV9zaXplIGRzX3ByaW9yaXR5X2VtcHR5IGRzX3ByaW9yaXR5X2FkZCAnICtcbiAgICAgICdkc19wcmlvcml0eV9jaGFuZ2VfcHJpb3JpdHkgZHNfcHJpb3JpdHlfZmluZF9wcmlvcml0eSAnICtcbiAgICAgICdkc19wcmlvcml0eV9kZWxldGVfdmFsdWUgZHNfcHJpb3JpdHlfZGVsZXRlX21pbiBkc19wcmlvcml0eV9maW5kX21pbiAnICtcbiAgICAgICdkc19wcmlvcml0eV9kZWxldGVfbWF4IGRzX3ByaW9yaXR5X2ZpbmRfbWF4IGRzX3ByaW9yaXR5X3dyaXRlICcgK1xuICAgICAgJ2RzX3ByaW9yaXR5X3JlYWQgZHNfZ3JpZF9jcmVhdGUgZHNfZ3JpZF9kZXN0cm95IGRzX2dyaWRfY29weSAnICtcbiAgICAgICdkc19ncmlkX3Jlc2l6ZSBkc19ncmlkX3dpZHRoIGRzX2dyaWRfaGVpZ2h0IGRzX2dyaWRfY2xlYXIgJyArXG4gICAgICAnZHNfZ3JpZF9zZXQgZHNfZ3JpZF9hZGQgZHNfZ3JpZF9tdWx0aXBseSBkc19ncmlkX3NldF9yZWdpb24gJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfcmVnaW9uIGRzX2dyaWRfbXVsdGlwbHlfcmVnaW9uIGRzX2dyaWRfc2V0X2Rpc2sgJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfZGlzayBkc19ncmlkX211bHRpcGx5X2Rpc2sgZHNfZ3JpZF9zZXRfZ3JpZF9yZWdpb24gJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfZ3JpZF9yZWdpb24gZHNfZ3JpZF9tdWx0aXBseV9ncmlkX3JlZ2lvbiBkc19ncmlkX2dldCAnICtcbiAgICAgICdkc19ncmlkX2dldF9zdW0gZHNfZ3JpZF9nZXRfbWF4IGRzX2dyaWRfZ2V0X21pbiBkc19ncmlkX2dldF9tZWFuICcgK1xuICAgICAgJ2RzX2dyaWRfZ2V0X2Rpc2tfc3VtIGRzX2dyaWRfZ2V0X2Rpc2tfbWluIGRzX2dyaWRfZ2V0X2Rpc2tfbWF4ICcgK1xuICAgICAgJ2RzX2dyaWRfZ2V0X2Rpc2tfbWVhbiBkc19ncmlkX3ZhbHVlX2V4aXN0cyBkc19ncmlkX3ZhbHVlX3ggJyArXG4gICAgICAnZHNfZ3JpZF92YWx1ZV95IGRzX2dyaWRfdmFsdWVfZGlza19leGlzdHMgZHNfZ3JpZF92YWx1ZV9kaXNrX3ggJyArXG4gICAgICAnZHNfZ3JpZF92YWx1ZV9kaXNrX3kgZHNfZ3JpZF9zaHVmZmxlIGRzX2dyaWRfd3JpdGUgZHNfZ3JpZF9yZWFkICcgK1xuICAgICAgJ2RzX2dyaWRfc29ydCBkc19ncmlkX3NldCBkc19ncmlkX2dldCBlZmZlY3RfY3JlYXRlX2JlbG93ICcgK1xuICAgICAgJ2VmZmVjdF9jcmVhdGVfYWJvdmUgZWZmZWN0X2NsZWFyIHBhcnRfdHlwZV9jcmVhdGUgcGFydF90eXBlX2Rlc3Ryb3kgJyArXG4gICAgICAncGFydF90eXBlX2V4aXN0cyBwYXJ0X3R5cGVfY2xlYXIgcGFydF90eXBlX3NoYXBlIHBhcnRfdHlwZV9zcHJpdGUgJyArXG4gICAgICAncGFydF90eXBlX3NpemUgcGFydF90eXBlX3NjYWxlIHBhcnRfdHlwZV9vcmllbnRhdGlvbiBwYXJ0X3R5cGVfbGlmZSAnICtcbiAgICAgICdwYXJ0X3R5cGVfc3RlcCBwYXJ0X3R5cGVfZGVhdGggcGFydF90eXBlX3NwZWVkIHBhcnRfdHlwZV9kaXJlY3Rpb24gJyArXG4gICAgICAncGFydF90eXBlX2dyYXZpdHkgcGFydF90eXBlX2NvbG91cjEgcGFydF90eXBlX2NvbG91cjIgJyArXG4gICAgICAncGFydF90eXBlX2NvbG91cjMgcGFydF90eXBlX2NvbG91cl9taXggcGFydF90eXBlX2NvbG91cl9yZ2IgJyArXG4gICAgICAncGFydF90eXBlX2NvbG91cl9oc3YgcGFydF90eXBlX2NvbG9yMSBwYXJ0X3R5cGVfY29sb3IyICcgK1xuICAgICAgJ3BhcnRfdHlwZV9jb2xvcjMgcGFydF90eXBlX2NvbG9yX21peCBwYXJ0X3R5cGVfY29sb3JfcmdiICcgK1xuICAgICAgJ3BhcnRfdHlwZV9jb2xvcl9oc3YgcGFydF90eXBlX2FscGhhMSBwYXJ0X3R5cGVfYWxwaGEyICcgK1xuICAgICAgJ3BhcnRfdHlwZV9hbHBoYTMgcGFydF90eXBlX2JsZW5kIHBhcnRfc3lzdGVtX2NyZWF0ZSAnICtcbiAgICAgICdwYXJ0X3N5c3RlbV9jcmVhdGVfbGF5ZXIgcGFydF9zeXN0ZW1fZGVzdHJveSBwYXJ0X3N5c3RlbV9leGlzdHMgJyArXG4gICAgICAncGFydF9zeXN0ZW1fY2xlYXIgcGFydF9zeXN0ZW1fZHJhd19vcmRlciBwYXJ0X3N5c3RlbV9kZXB0aCAnICtcbiAgICAgICdwYXJ0X3N5c3RlbV9wb3NpdGlvbiBwYXJ0X3N5c3RlbV9hdXRvbWF0aWNfdXBkYXRlICcgK1xuICAgICAgJ3BhcnRfc3lzdGVtX2F1dG9tYXRpY19kcmF3IHBhcnRfc3lzdGVtX3VwZGF0ZSBwYXJ0X3N5c3RlbV9kcmF3aXQgJyArXG4gICAgICAncGFydF9zeXN0ZW1fZ2V0X2xheWVyIHBhcnRfc3lzdGVtX2xheWVyIHBhcnRfcGFydGljbGVzX2NyZWF0ZSAnICtcbiAgICAgICdwYXJ0X3BhcnRpY2xlc19jcmVhdGVfY29sb3VyIHBhcnRfcGFydGljbGVzX2NyZWF0ZV9jb2xvciAnICtcbiAgICAgICdwYXJ0X3BhcnRpY2xlc19jbGVhciBwYXJ0X3BhcnRpY2xlc19jb3VudCBwYXJ0X2VtaXR0ZXJfY3JlYXRlICcgK1xuICAgICAgJ3BhcnRfZW1pdHRlcl9kZXN0cm95IHBhcnRfZW1pdHRlcl9kZXN0cm95X2FsbCBwYXJ0X2VtaXR0ZXJfZXhpc3RzICcgK1xuICAgICAgJ3BhcnRfZW1pdHRlcl9jbGVhciBwYXJ0X2VtaXR0ZXJfcmVnaW9uIHBhcnRfZW1pdHRlcl9idXJzdCAnICtcbiAgICAgICdwYXJ0X2VtaXR0ZXJfc3RyZWFtIGV4dGVybmFsX2NhbGwgZXh0ZXJuYWxfZGVmaW5lIGV4dGVybmFsX2ZyZWUgJyArXG4gICAgICAnd2luZG93X2hhbmRsZSB3aW5kb3dfZGV2aWNlIG1hdHJpeF9nZXQgbWF0cml4X3NldCAnICtcbiAgICAgICdtYXRyaXhfYnVpbGRfaWRlbnRpdHkgbWF0cml4X2J1aWxkIG1hdHJpeF9idWlsZF9sb29rYXQgJyArXG4gICAgICAnbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fb3J0aG8gbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmUgJyArXG4gICAgICAnbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmVfZm92IG1hdHJpeF9tdWx0aXBseSAnICtcbiAgICAgICdtYXRyaXhfdHJhbnNmb3JtX3ZlcnRleCBtYXRyaXhfc3RhY2tfcHVzaCBtYXRyaXhfc3RhY2tfcG9wICcgK1xuICAgICAgJ21hdHJpeF9zdGFja19tdWx0aXBseSBtYXRyaXhfc3RhY2tfc2V0IG1hdHJpeF9zdGFja19jbGVhciAnICtcbiAgICAgICdtYXRyaXhfc3RhY2tfdG9wIG1hdHJpeF9zdGFja19pc19lbXB0eSBicm93c2VyX2lucHV0X2NhcHR1cmUgJyArXG4gICAgICAnb3NfZ2V0X2NvbmZpZyBvc19nZXRfaW5mbyBvc19nZXRfbGFuZ3VhZ2Ugb3NfZ2V0X3JlZ2lvbiAnICtcbiAgICAgICdvc19sb2NrX29yaWVudGF0aW9uIGRpc3BsYXlfZ2V0X2RwaV94IGRpc3BsYXlfZ2V0X2RwaV95ICcgK1xuICAgICAgJ2Rpc3BsYXlfc2V0X2d1aV9zaXplIGRpc3BsYXlfc2V0X2d1aV9tYXhpbWlzZSAnICtcbiAgICAgICdkaXNwbGF5X3NldF9ndWlfbWF4aW1pemUgZGV2aWNlX21vdXNlX2RiY2xpY2tfZW5hYmxlICcgK1xuICAgICAgJ2Rpc3BsYXlfc2V0X3RpbWluZ19tZXRob2QgZGlzcGxheV9nZXRfdGltaW5nX21ldGhvZCAnICtcbiAgICAgICdkaXNwbGF5X3NldF9zbGVlcF9tYXJnaW4gZGlzcGxheV9nZXRfc2xlZXBfbWFyZ2luIHZpcnR1YWxfa2V5X2FkZCAnICtcbiAgICAgICd2aXJ0dWFsX2tleV9oaWRlIHZpcnR1YWxfa2V5X2RlbGV0ZSB2aXJ0dWFsX2tleV9zaG93ICcgK1xuICAgICAgJ2RyYXdfZW5hYmxlX2RyYXdldmVudCBkcmF3X2VuYWJsZV9zd2ZfYWEgZHJhd19zZXRfc3dmX2FhX2xldmVsICcgK1xuICAgICAgJ2RyYXdfZ2V0X3N3Zl9hYV9sZXZlbCBkcmF3X3RleHR1cmVfZmx1c2ggZHJhd19mbHVzaCAnICtcbiAgICAgICdncHVfc2V0X2JsZW5kZW5hYmxlIGdwdV9zZXRfenRlc3RlbmFibGUgZ3B1X3NldF96ZnVuYyAnICtcbiAgICAgICdncHVfc2V0X3p3cml0ZWVuYWJsZSBncHVfc2V0X2xpZ2h0aW5nZW5hYmxlIGdwdV9zZXRfZm9nICcgK1xuICAgICAgJ2dwdV9zZXRfY3VsbG1vZGUgZ3B1X3NldF9ibGVuZG1vZGUgZ3B1X3NldF9ibGVuZG1vZGVfZXh0ICcgK1xuICAgICAgJ2dwdV9zZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfc2V0X2NvbG9yd3JpdGVlbmFibGUgJyArXG4gICAgICAnZ3B1X3NldF9jb2xvdXJ3cml0ZWVuYWJsZSBncHVfc2V0X2FscGhhdGVzdGVuYWJsZSAnICtcbiAgICAgICdncHVfc2V0X2FscGhhdGVzdHJlZiBncHVfc2V0X2FscGhhdGVzdGZ1bmMgZ3B1X3NldF90ZXhmaWx0ZXIgJyArXG4gICAgICAnZ3B1X3NldF90ZXhmaWx0ZXJfZXh0IGdwdV9zZXRfdGV4cmVwZWF0IGdwdV9zZXRfdGV4cmVwZWF0X2V4dCAnICtcbiAgICAgICdncHVfc2V0X3RleF9maWx0ZXIgZ3B1X3NldF90ZXhfZmlsdGVyX2V4dCBncHVfc2V0X3RleF9yZXBlYXQgJyArXG4gICAgICAnZ3B1X3NldF90ZXhfcmVwZWF0X2V4dCBncHVfc2V0X3RleF9taXBfZmlsdGVyICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21pcF9maWx0ZXJfZXh0IGdwdV9zZXRfdGV4X21pcF9iaWFzICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21pcF9iaWFzX2V4dCBncHVfc2V0X3RleF9taW5fbWlwIGdwdV9zZXRfdGV4X21pbl9taXBfZXh0ICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21heF9taXAgZ3B1X3NldF90ZXhfbWF4X21pcF9leHQgZ3B1X3NldF90ZXhfbWF4X2FuaXNvICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21heF9hbmlzb19leHQgZ3B1X3NldF90ZXhfbWlwX2VuYWJsZSAnICtcbiAgICAgICdncHVfc2V0X3RleF9taXBfZW5hYmxlX2V4dCBncHVfZ2V0X2JsZW5kZW5hYmxlIGdwdV9nZXRfenRlc3RlbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF96ZnVuYyBncHVfZ2V0X3p3cml0ZWVuYWJsZSBncHVfZ2V0X2xpZ2h0aW5nZW5hYmxlICcgK1xuICAgICAgJ2dwdV9nZXRfZm9nIGdwdV9nZXRfY3VsbG1vZGUgZ3B1X2dldF9ibGVuZG1vZGUgZ3B1X2dldF9ibGVuZG1vZGVfZXh0ICcgK1xuICAgICAgJ2dwdV9nZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfZ2V0X2JsZW5kbW9kZV9zcmMgJyArXG4gICAgICAnZ3B1X2dldF9ibGVuZG1vZGVfZGVzdCBncHVfZ2V0X2JsZW5kbW9kZV9zcmNhbHBoYSAnICtcbiAgICAgICdncHVfZ2V0X2JsZW5kbW9kZV9kZXN0YWxwaGEgZ3B1X2dldF9jb2xvcndyaXRlZW5hYmxlICcgK1xuICAgICAgJ2dwdV9nZXRfY29sb3Vyd3JpdGVlbmFibGUgZ3B1X2dldF9hbHBoYXRlc3RlbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF9hbHBoYXRlc3RyZWYgZ3B1X2dldF9hbHBoYXRlc3RmdW5jIGdwdV9nZXRfdGV4ZmlsdGVyICcgK1xuICAgICAgJ2dwdV9nZXRfdGV4ZmlsdGVyX2V4dCBncHVfZ2V0X3RleHJlcGVhdCBncHVfZ2V0X3RleHJlcGVhdF9leHQgJyArXG4gICAgICAnZ3B1X2dldF90ZXhfZmlsdGVyIGdwdV9nZXRfdGV4X2ZpbHRlcl9leHQgZ3B1X2dldF90ZXhfcmVwZWF0ICcgK1xuICAgICAgJ2dwdV9nZXRfdGV4X3JlcGVhdF9leHQgZ3B1X2dldF90ZXhfbWlwX2ZpbHRlciAnICtcbiAgICAgICdncHVfZ2V0X3RleF9taXBfZmlsdGVyX2V4dCBncHVfZ2V0X3RleF9taXBfYmlhcyAnICtcbiAgICAgICdncHVfZ2V0X3RleF9taXBfYmlhc19leHQgZ3B1X2dldF90ZXhfbWluX21pcCBncHVfZ2V0X3RleF9taW5fbWlwX2V4dCAnICtcbiAgICAgICdncHVfZ2V0X3RleF9tYXhfbWlwIGdwdV9nZXRfdGV4X21heF9taXBfZXh0IGdwdV9nZXRfdGV4X21heF9hbmlzbyAnICtcbiAgICAgICdncHVfZ2V0X3RleF9tYXhfYW5pc29fZXh0IGdwdV9nZXRfdGV4X21pcF9lbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF90ZXhfbWlwX2VuYWJsZV9leHQgZ3B1X3B1c2hfc3RhdGUgZ3B1X3BvcF9zdGF0ZSAnICtcbiAgICAgICdncHVfZ2V0X3N0YXRlIGdwdV9zZXRfc3RhdGUgZHJhd19saWdodF9kZWZpbmVfYW1iaWVudCAnICtcbiAgICAgICdkcmF3X2xpZ2h0X2RlZmluZV9kaXJlY3Rpb24gZHJhd19saWdodF9kZWZpbmVfcG9pbnQgJyArXG4gICAgICAnZHJhd19saWdodF9lbmFibGUgZHJhd19zZXRfbGlnaHRpbmcgZHJhd19saWdodF9nZXRfYW1iaWVudCAnICtcbiAgICAgICdkcmF3X2xpZ2h0X2dldCBkcmF3X2dldF9saWdodGluZyBzaG9wX2xlYXZlX3JhdGluZyB1cmxfZ2V0X2RvbWFpbiAnICtcbiAgICAgICd1cmxfb3BlbiB1cmxfb3Blbl9leHQgdXJsX29wZW5fZnVsbCBnZXRfdGltZXIgYWNoaWV2ZW1lbnRfbG9naW4gJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfbG9nb3V0IGFjaGlldmVtZW50X3Bvc3QgYWNoaWV2ZW1lbnRfaW5jcmVtZW50ICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3Bvc3Rfc2NvcmUgYWNoaWV2ZW1lbnRfYXZhaWxhYmxlICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnRzIGFjaGlldmVtZW50X3Nob3dfbGVhZGVyYm9hcmRzICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2xvYWRfZnJpZW5kcyBhY2hpZXZlbWVudF9sb2FkX2xlYWRlcmJvYXJkICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3NlbmRfY2hhbGxlbmdlIGFjaGlldmVtZW50X2xvYWRfcHJvZ3Jlc3MgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfcmVzZXQgYWNoaWV2ZW1lbnRfbG9naW5fc3RhdHVzIGFjaGlldmVtZW50X2dldF9waWMgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfc2hvd19jaGFsbGVuZ2Vfbm90aWZpY2F0aW9ucyBhY2hpZXZlbWVudF9nZXRfY2hhbGxlbmdlcyAnICtcbiAgICAgICdhY2hpZXZlbWVudF9ldmVudCBhY2hpZXZlbWVudF9zaG93IGFjaGlldmVtZW50X2dldF9pbmZvICcgK1xuICAgICAgJ2Nsb3VkX2ZpbGVfc2F2ZSBjbG91ZF9zdHJpbmdfc2F2ZSBjbG91ZF9zeW5jaHJvbmlzZSBhZHNfZW5hYmxlICcgK1xuICAgICAgJ2Fkc19kaXNhYmxlIGFkc19zZXR1cCBhZHNfZW5nYWdlbWVudF9sYXVuY2ggYWRzX2VuZ2FnZW1lbnRfYXZhaWxhYmxlICcgK1xuICAgICAgJ2Fkc19lbmdhZ2VtZW50X2FjdGl2ZSBhZHNfZXZlbnQgYWRzX2V2ZW50X3ByZWxvYWQgJyArXG4gICAgICAnYWRzX3NldF9yZXdhcmRfY2FsbGJhY2sgYWRzX2dldF9kaXNwbGF5X2hlaWdodCBhZHNfZ2V0X2Rpc3BsYXlfd2lkdGggJyArXG4gICAgICAnYWRzX21vdmUgYWRzX2ludGVyc3RpdGlhbF9hdmFpbGFibGUgYWRzX2ludGVyc3RpdGlhbF9kaXNwbGF5ICcgK1xuICAgICAgJ2RldmljZV9nZXRfdGlsdF94IGRldmljZV9nZXRfdGlsdF95IGRldmljZV9nZXRfdGlsdF96ICcgK1xuICAgICAgJ2RldmljZV9pc19rZXlwYWRfb3BlbiBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uICcgK1xuICAgICAgJ2RldmljZV9tb3VzZV9jaGVja19idXR0b25fcHJlc3NlZCBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uX3JlbGVhc2VkICcgK1xuICAgICAgJ2RldmljZV9tb3VzZV94IGRldmljZV9tb3VzZV95IGRldmljZV9tb3VzZV9yYXdfeCBkZXZpY2VfbW91c2VfcmF3X3kgJyArXG4gICAgICAnZGV2aWNlX21vdXNlX3hfdG9fZ3VpIGRldmljZV9tb3VzZV95X3RvX2d1aSBpYXBfYWN0aXZhdGUgaWFwX3N0YXR1cyAnICtcbiAgICAgICdpYXBfZW51bWVyYXRlX3Byb2R1Y3RzIGlhcF9yZXN0b3JlX2FsbCBpYXBfYWNxdWlyZSBpYXBfY29uc3VtZSAnICtcbiAgICAgICdpYXBfcHJvZHVjdF9kZXRhaWxzIGlhcF9wdXJjaGFzZV9kZXRhaWxzIGZhY2Vib29rX2luaXQgJyArXG4gICAgICAnZmFjZWJvb2tfbG9naW4gZmFjZWJvb2tfc3RhdHVzIGZhY2Vib29rX2dyYXBoX3JlcXVlc3QgJyArXG4gICAgICAnZmFjZWJvb2tfZGlhbG9nIGZhY2Vib29rX2xvZ291dCBmYWNlYm9va19sYXVuY2hfb2ZmZXJ3YWxsICcgK1xuICAgICAgJ2ZhY2Vib29rX3Bvc3RfbWVzc2FnZSBmYWNlYm9va19zZW5kX2ludml0ZSBmYWNlYm9va191c2VyX2lkICcgK1xuICAgICAgJ2ZhY2Vib29rX2FjY2Vzc3Rva2VuIGZhY2Vib29rX2NoZWNrX3Blcm1pc3Npb24gJyArXG4gICAgICAnZmFjZWJvb2tfcmVxdWVzdF9yZWFkX3Blcm1pc3Npb25zICcgK1xuICAgICAgJ2ZhY2Vib29rX3JlcXVlc3RfcHVibGlzaF9wZXJtaXNzaW9ucyBnYW1lcGFkX2lzX3N1cHBvcnRlZCAnICtcbiAgICAgICdnYW1lcGFkX2dldF9kZXZpY2VfY291bnQgZ2FtZXBhZF9pc19jb25uZWN0ZWQgJyArXG4gICAgICAnZ2FtZXBhZF9nZXRfZGVzY3JpcHRpb24gZ2FtZXBhZF9nZXRfYnV0dG9uX3RocmVzaG9sZCAnICtcbiAgICAgICdnYW1lcGFkX3NldF9idXR0b25fdGhyZXNob2xkIGdhbWVwYWRfZ2V0X2F4aXNfZGVhZHpvbmUgJyArXG4gICAgICAnZ2FtZXBhZF9zZXRfYXhpc19kZWFkem9uZSBnYW1lcGFkX2J1dHRvbl9jb3VudCBnYW1lcGFkX2J1dHRvbl9jaGVjayAnICtcbiAgICAgICdnYW1lcGFkX2J1dHRvbl9jaGVja19wcmVzc2VkIGdhbWVwYWRfYnV0dG9uX2NoZWNrX3JlbGVhc2VkICcgK1xuICAgICAgJ2dhbWVwYWRfYnV0dG9uX3ZhbHVlIGdhbWVwYWRfYXhpc19jb3VudCBnYW1lcGFkX2F4aXNfdmFsdWUgJyArXG4gICAgICAnZ2FtZXBhZF9zZXRfdmlicmF0aW9uIGdhbWVwYWRfc2V0X2NvbG91ciBnYW1lcGFkX3NldF9jb2xvciAnICtcbiAgICAgICdvc19pc19wYXVzZWQgd2luZG93X2hhc19mb2N1cyBjb2RlX2lzX2NvbXBpbGVkIGh0dHBfZ2V0ICcgK1xuICAgICAgJ2h0dHBfZ2V0X2ZpbGUgaHR0cF9wb3N0X3N0cmluZyBodHRwX3JlcXVlc3QganNvbl9lbmNvZGUganNvbl9kZWNvZGUgJyArXG4gICAgICAnemlwX3VuemlwIGxvYWRfY3N2IGJhc2U2NF9lbmNvZGUgYmFzZTY0X2RlY29kZSBtZDVfc3RyaW5nX3VuaWNvZGUgJyArXG4gICAgICAnbWQ1X3N0cmluZ191dGY4IG1kNV9maWxlIG9zX2lzX25ldHdvcmtfY29ubmVjdGVkIHNoYTFfc3RyaW5nX3VuaWNvZGUgJyArXG4gICAgICAnc2hhMV9zdHJpbmdfdXRmOCBzaGExX2ZpbGUgb3NfcG93ZXJzYXZlX2VuYWJsZSBhbmFseXRpY3NfZXZlbnQgJyArXG4gICAgICAnYW5hbHl0aWNzX2V2ZW50X2V4dCB3aW44X2xpdmV0aWxlX3RpbGVfbm90aWZpY2F0aW9uICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfdGlsZV9jbGVhciB3aW44X2xpdmV0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICd3aW44X2xpdmV0aWxlX2JhZGdlX2NsZWFyIHdpbjhfbGl2ZXRpbGVfcXVldWVfZW5hYmxlICcgK1xuICAgICAgJ3dpbjhfc2Vjb25kYXJ5dGlsZV9waW4gd2luOF9zZWNvbmRhcnl0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICd3aW44X3NlY29uZGFyeXRpbGVfZGVsZXRlIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2JlZ2luICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3NlY29uZGFyeV9iZWdpbiAnICtcbiAgICAgICd3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9leHBpcnkgd2luOF9saXZldGlsZV9ub3RpZmljYXRpb25fdGFnICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3RleHRfYWRkICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2ltYWdlX2FkZCB3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9lbmQgJyArXG4gICAgICAnd2luOF9hcHBiYXJfZW5hYmxlIHdpbjhfYXBwYmFyX2FkZF9lbGVtZW50ICcgK1xuICAgICAgJ3dpbjhfYXBwYmFyX3JlbW92ZV9lbGVtZW50IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfZW50cnkgJyArXG4gICAgICAnd2luOF9zZXR0aW5nc2NoYXJtX2FkZF9odG1sX2VudHJ5IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfeGFtbF9lbnRyeSAnICtcbiAgICAgICd3aW44X3NldHRpbmdzY2hhcm1fc2V0X3hhbWxfcHJvcGVydHkgJyArXG4gICAgICAnd2luOF9zZXR0aW5nc2NoYXJtX2dldF94YW1sX3Byb3BlcnR5IHdpbjhfc2V0dGluZ3NjaGFybV9yZW1vdmVfZW50cnkgJyArXG4gICAgICAnd2luOF9zaGFyZV9pbWFnZSB3aW44X3NoYXJlX3NjcmVlbnNob3Qgd2luOF9zaGFyZV9maWxlICcgK1xuICAgICAgJ3dpbjhfc2hhcmVfdXJsIHdpbjhfc2hhcmVfdGV4dCB3aW44X3NlYXJjaF9lbmFibGUgJyArXG4gICAgICAnd2luOF9zZWFyY2hfZGlzYWJsZSB3aW44X3NlYXJjaF9hZGRfc3VnZ2VzdGlvbnMgJyArXG4gICAgICAnd2luOF9kZXZpY2VfdG91Y2hzY3JlZW5fYXZhaWxhYmxlIHdpbjhfbGljZW5zZV9pbml0aWFsaXplX3NhbmRib3ggJyArXG4gICAgICAnd2luOF9saWNlbnNlX3RyaWFsX3ZlcnNpb24gd2lucGhvbmVfbGljZW5zZV90cmlhbF92ZXJzaW9uICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfdGl0bGUgd2lucGhvbmVfdGlsZV9jb3VudCB3aW5waG9uZV90aWxlX2JhY2tfdGl0bGUgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnQgd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnRfd2lkZSAnICtcbiAgICAgICd3aW5waG9uZV90aWxlX2Zyb250X2ltYWdlIHdpbnBob25lX3RpbGVfZnJvbnRfaW1hZ2Vfc21hbGwgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9mcm9udF9pbWFnZV93aWRlIHdpbnBob25lX3RpbGVfYmFja19pbWFnZSAnICtcbiAgICAgICd3aW5waG9uZV90aWxlX2JhY2tfaW1hZ2Vfd2lkZSB3aW5waG9uZV90aWxlX2JhY2tncm91bmRfY29sb3VyICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfYmFja2dyb3VuZF9jb2xvciB3aW5waG9uZV90aWxlX2ljb25faW1hZ2UgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9zbWFsbF9pY29uX2ltYWdlIHdpbnBob25lX3RpbGVfd2lkZV9jb250ZW50ICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfY3ljbGVfaW1hZ2VzIHdpbnBob25lX3RpbGVfc21hbGxfYmFja2dyb3VuZF9pbWFnZSAnICtcbiAgICAgICdwaHlzaWNzX3dvcmxkX2NyZWF0ZSBwaHlzaWNzX3dvcmxkX2dyYXZpdHkgJyArXG4gICAgICAncGh5c2ljc193b3JsZF91cGRhdGVfc3BlZWQgcGh5c2ljc193b3JsZF91cGRhdGVfaXRlcmF0aW9ucyAnICtcbiAgICAgICdwaHlzaWNzX3dvcmxkX2RyYXdfZGVidWcgcGh5c2ljc19wYXVzZV9lbmFibGUgcGh5c2ljc19maXh0dXJlX2NyZWF0ZSAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2tpbmVtYXRpYyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2RlbnNpdHkgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9hd2FrZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X3Jlc3RpdHV0aW9uICcgK1xuICAgICAgJ3BoeXNpY3NfZml4dHVyZV9zZXRfZnJpY3Rpb24gcGh5c2ljc19maXh0dXJlX3NldF9jb2xsaXNpb25fZ3JvdXAgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9zZW5zb3IgcGh5c2ljc19maXh0dXJlX3NldF9saW5lYXJfZGFtcGluZyAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2FuZ3VsYXJfZGFtcGluZyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2NpcmNsZV9zaGFwZSAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2JveF9zaGFwZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X2VkZ2Vfc2hhcGUgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9wb2x5Z29uX3NoYXBlIHBoeXNpY3NfZml4dHVyZV9zZXRfY2hhaW5fc2hhcGUgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX2FkZF9wb2ludCBwaHlzaWNzX2ZpeHR1cmVfYmluZCAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfYmluZF9leHQgcGh5c2ljc19maXh0dXJlX2RlbGV0ZSBwaHlzaWNzX2FwcGx5X2ZvcmNlICcgK1xuICAgICAgJ3BoeXNpY3NfYXBwbHlfaW1wdWxzZSBwaHlzaWNzX2FwcGx5X2FuZ3VsYXJfaW1wdWxzZSAnICtcbiAgICAgICdwaHlzaWNzX2FwcGx5X2xvY2FsX2ZvcmNlIHBoeXNpY3NfYXBwbHlfbG9jYWxfaW1wdWxzZSAnICtcbiAgICAgICdwaHlzaWNzX2FwcGx5X3RvcnF1ZSBwaHlzaWNzX21hc3NfcHJvcGVydGllcyBwaHlzaWNzX2RyYXdfZGVidWcgJyArXG4gICAgICAncGh5c2ljc190ZXN0X292ZXJsYXAgcGh5c2ljc19yZW1vdmVfZml4dHVyZSBwaHlzaWNzX3NldF9mcmljdGlvbiAnICtcbiAgICAgICdwaHlzaWNzX3NldF9kZW5zaXR5IHBoeXNpY3Nfc2V0X3Jlc3RpdHV0aW9uIHBoeXNpY3NfZ2V0X2ZyaWN0aW9uICcgK1xuICAgICAgJ3BoeXNpY3NfZ2V0X2RlbnNpdHkgcGh5c2ljc19nZXRfcmVzdGl0dXRpb24gJyArXG4gICAgICAncGh5c2ljc19qb2ludF9kaXN0YW5jZV9jcmVhdGUgcGh5c2ljc19qb2ludF9yb3BlX2NyZWF0ZSAnICtcbiAgICAgICdwaHlzaWNzX2pvaW50X3Jldm9sdXRlX2NyZWF0ZSBwaHlzaWNzX2pvaW50X3ByaXNtYXRpY19jcmVhdGUgJyArXG4gICAgICAncGh5c2ljc19qb2ludF9wdWxsZXlfY3JlYXRlIHBoeXNpY3Nfam9pbnRfd2hlZWxfY3JlYXRlICcgK1xuICAgICAgJ3BoeXNpY3Nfam9pbnRfd2VsZF9jcmVhdGUgcGh5c2ljc19qb2ludF9mcmljdGlvbl9jcmVhdGUgJyArXG4gICAgICAncGh5c2ljc19qb2ludF9nZWFyX2NyZWF0ZSBwaHlzaWNzX2pvaW50X2VuYWJsZV9tb3RvciAnICtcbiAgICAgICdwaHlzaWNzX2pvaW50X2dldF92YWx1ZSBwaHlzaWNzX2pvaW50X3NldF92YWx1ZSBwaHlzaWNzX2pvaW50X2RlbGV0ZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2NyZWF0ZSBwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZV9yZWdpb25fY2lyY2xlICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9ib3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9kZWxldGVfcmVnaW9uX3BvbHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZmxhZ3MgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9zZXRfY2F0ZWdvcnlfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9kcmF3ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZHJhd19leHQgcGh5c2ljc19wYXJ0aWNsZV9jb3VudCAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dldF9kYXRhIHBoeXNpY3NfcGFydGljbGVfZ2V0X2RhdGFfcGFydGljbGUgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9iZWdpbiBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2NpcmNsZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2JveCBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX3BvbHlnb24gJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9hZGRfcG9pbnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9lbmQgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9qb2luIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZGVsZXRlICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ3JvdXBfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfZGF0YSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9tYXNzIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X2luZXJ0aWEgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nX3ZlbCAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF94IHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X3kgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nbGUgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZ3JvdXBfZmxhZ3MgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3JvdXBfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9nZXRfbWF4X2NvdW50ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ2V0X3JhZGl1cyBwaHlzaWNzX3BhcnRpY2xlX2dldF9kZW5zaXR5ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ2V0X2RhbXBpbmcgcGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3Jhdml0eV9zY2FsZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX3NldF9tYXhfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9zZXRfcmFkaXVzICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfc2V0X2RlbnNpdHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZGFtcGluZyAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX3NldF9ncmF2aXR5X3NjYWxlIG5ldHdvcmtfY3JlYXRlX3NvY2tldCAnICtcbiAgICAgICduZXR3b3JrX2NyZWF0ZV9zb2NrZXRfZXh0IG5ldHdvcmtfY3JlYXRlX3NlcnZlciAnICtcbiAgICAgICduZXR3b3JrX2NyZWF0ZV9zZXJ2ZXJfcmF3IG5ldHdvcmtfY29ubmVjdCBuZXR3b3JrX2Nvbm5lY3RfcmF3ICcgK1xuICAgICAgJ25ldHdvcmtfc2VuZF9wYWNrZXQgbmV0d29ya19zZW5kX3JhdyBuZXR3b3JrX3NlbmRfYnJvYWRjYXN0ICcgK1xuICAgICAgJ25ldHdvcmtfc2VuZF91ZHAgbmV0d29ya19zZW5kX3VkcF9yYXcgbmV0d29ya19zZXRfdGltZW91dCAnICtcbiAgICAgICduZXR3b3JrX3NldF9jb25maWcgbmV0d29ya19yZXNvbHZlIG5ldHdvcmtfZGVzdHJveSBidWZmZXJfY3JlYXRlICcgK1xuICAgICAgJ2J1ZmZlcl93cml0ZSBidWZmZXJfcmVhZCBidWZmZXJfc2VlayBidWZmZXJfZ2V0X3N1cmZhY2UgJyArXG4gICAgICAnYnVmZmVyX3NldF9zdXJmYWNlIGJ1ZmZlcl9kZWxldGUgYnVmZmVyX2V4aXN0cyBidWZmZXJfZ2V0X3R5cGUgJyArXG4gICAgICAnYnVmZmVyX2dldF9hbGlnbm1lbnQgYnVmZmVyX3Bva2UgYnVmZmVyX3BlZWsgYnVmZmVyX3NhdmUgJyArXG4gICAgICAnYnVmZmVyX3NhdmVfZXh0IGJ1ZmZlcl9sb2FkIGJ1ZmZlcl9sb2FkX2V4dCBidWZmZXJfbG9hZF9wYXJ0aWFsICcgK1xuICAgICAgJ2J1ZmZlcl9jb3B5IGJ1ZmZlcl9maWxsIGJ1ZmZlcl9nZXRfc2l6ZSBidWZmZXJfdGVsbCBidWZmZXJfcmVzaXplICcgK1xuICAgICAgJ2J1ZmZlcl9tZDUgYnVmZmVyX3NoYTEgYnVmZmVyX2Jhc2U2NF9lbmNvZGUgYnVmZmVyX2Jhc2U2NF9kZWNvZGUgJyArXG4gICAgICAnYnVmZmVyX2Jhc2U2NF9kZWNvZGVfZXh0IGJ1ZmZlcl9zaXplb2YgYnVmZmVyX2dldF9hZGRyZXNzICcgK1xuICAgICAgJ2J1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyICcgK1xuICAgICAgJ2J1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyX2V4dCBidWZmZXJfY29weV9mcm9tX3ZlcnRleF9idWZmZXIgJyArXG4gICAgICAnYnVmZmVyX2FzeW5jX2dyb3VwX2JlZ2luIGJ1ZmZlcl9hc3luY19ncm91cF9vcHRpb24gJyArXG4gICAgICAnYnVmZmVyX2FzeW5jX2dyb3VwX2VuZCBidWZmZXJfbG9hZF9hc3luYyBidWZmZXJfc2F2ZV9hc3luYyAnICtcbiAgICAgICdnbWxfcmVsZWFzZV9tb2RlIGdtbF9wcmFnbWEgc3RlYW1fYWN0aXZhdGVfb3ZlcmxheSAnICtcbiAgICAgICdzdGVhbV9pc19vdmVybGF5X2VuYWJsZWQgc3RlYW1faXNfb3ZlcmxheV9hY3RpdmF0ZWQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3BlcnNvbmFfbmFtZSBzdGVhbV9pbml0aWFsaXNlZCAnICtcbiAgICAgICdzdGVhbV9pc19jbG91ZF9lbmFibGVkX2Zvcl9hcHAgc3RlYW1faXNfY2xvdWRfZW5hYmxlZF9mb3JfYWNjb3VudCAnICtcbiAgICAgICdzdGVhbV9maWxlX3BlcnNpc3RlZCBzdGVhbV9nZXRfcXVvdGFfdG90YWwgc3RlYW1fZ2V0X3F1b3RhX2ZyZWUgJyArXG4gICAgICAnc3RlYW1fZmlsZV93cml0ZSBzdGVhbV9maWxlX3dyaXRlX2ZpbGUgc3RlYW1fZmlsZV9yZWFkICcgK1xuICAgICAgJ3N0ZWFtX2ZpbGVfZGVsZXRlIHN0ZWFtX2ZpbGVfZXhpc3RzIHN0ZWFtX2ZpbGVfc2l6ZSBzdGVhbV9maWxlX3NoYXJlICcgK1xuICAgICAgJ3N0ZWFtX2lzX3NjcmVlbnNob3RfcmVxdWVzdGVkIHN0ZWFtX3NlbmRfc2NyZWVuc2hvdCAnICtcbiAgICAgICdzdGVhbV9pc191c2VyX2xvZ2dlZF9vbiBzdGVhbV9nZXRfdXNlcl9zdGVhbV9pZCBzdGVhbV91c2VyX293bnNfZGxjICcgK1xuICAgICAgJ3N0ZWFtX3VzZXJfaW5zdGFsbGVkX2RsYyBzdGVhbV9zZXRfYWNoaWV2ZW1lbnQgc3RlYW1fZ2V0X2FjaGlldmVtZW50ICcgK1xuICAgICAgJ3N0ZWFtX2NsZWFyX2FjaGlldmVtZW50IHN0ZWFtX3NldF9zdGF0X2ludCBzdGVhbV9zZXRfc3RhdF9mbG9hdCAnICtcbiAgICAgICdzdGVhbV9zZXRfc3RhdF9hdmdfcmF0ZSBzdGVhbV9nZXRfc3RhdF9pbnQgc3RlYW1fZ2V0X3N0YXRfZmxvYXQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3N0YXRfYXZnX3JhdGUgc3RlYW1fcmVzZXRfYWxsX3N0YXRzICcgK1xuICAgICAgJ3N0ZWFtX3Jlc2V0X2FsbF9zdGF0c19hY2hpZXZlbWVudHMgc3RlYW1fc3RhdHNfcmVhZHkgJyArXG4gICAgICAnc3RlYW1fY3JlYXRlX2xlYWRlcmJvYXJkIHN0ZWFtX3VwbG9hZF9zY29yZSBzdGVhbV91cGxvYWRfc2NvcmVfZXh0ICcgK1xuICAgICAgJ3N0ZWFtX2Rvd25sb2FkX3Njb3Jlc19hcm91bmRfdXNlciBzdGVhbV9kb3dubG9hZF9zY29yZXMgJyArXG4gICAgICAnc3RlYW1fZG93bmxvYWRfZnJpZW5kc19zY29yZXMgc3RlYW1fdXBsb2FkX3Njb3JlX2J1ZmZlciAnICtcbiAgICAgICdzdGVhbV91cGxvYWRfc2NvcmVfYnVmZmVyX2V4dCBzdGVhbV9jdXJyZW50X2dhbWVfbGFuZ3VhZ2UgJyArXG4gICAgICAnc3RlYW1fYXZhaWxhYmxlX2xhbmd1YWdlcyBzdGVhbV9hY3RpdmF0ZV9vdmVybGF5X2Jyb3dzZXIgJyArXG4gICAgICAnc3RlYW1fYWN0aXZhdGVfb3ZlcmxheV91c2VyIHN0ZWFtX2FjdGl2YXRlX292ZXJsYXlfc3RvcmUgJyArXG4gICAgICAnc3RlYW1fZ2V0X3VzZXJfcGVyc29uYV9uYW1lIHN0ZWFtX2dldF9hcHBfaWQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3VzZXJfYWNjb3VudF9pZCBzdGVhbV91Z2NfZG93bmxvYWQgc3RlYW1fdWdjX2NyZWF0ZV9pdGVtICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zdGFydF9pdGVtX3VwZGF0ZSBzdGVhbV91Z2Nfc2V0X2l0ZW1fdGl0bGUgJyArXG4gICAgICAnc3RlYW1fdWdjX3NldF9pdGVtX2Rlc2NyaXB0aW9uIHN0ZWFtX3VnY19zZXRfaXRlbV92aXNpYmlsaXR5ICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zZXRfaXRlbV90YWdzIHN0ZWFtX3VnY19zZXRfaXRlbV9jb250ZW50ICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zZXRfaXRlbV9wcmV2aWV3IHN0ZWFtX3VnY19zdWJtaXRfaXRlbV91cGRhdGUgJyArXG4gICAgICAnc3RlYW1fdWdjX2dldF9pdGVtX3VwZGF0ZV9wcm9ncmVzcyBzdGVhbV91Z2Nfc3Vic2NyaWJlX2l0ZW0gJyArXG4gICAgICAnc3RlYW1fdWdjX3Vuc3Vic2NyaWJlX2l0ZW0gc3RlYW1fdWdjX251bV9zdWJzY3JpYmVkX2l0ZW1zICcgK1xuICAgICAgJ3N0ZWFtX3VnY19nZXRfc3Vic2NyaWJlZF9pdGVtcyBzdGVhbV91Z2NfZ2V0X2l0ZW1faW5zdGFsbF9pbmZvICcgK1xuICAgICAgJ3N0ZWFtX3VnY19nZXRfaXRlbV91cGRhdGVfaW5mbyBzdGVhbV91Z2NfcmVxdWVzdF9pdGVtX2RldGFpbHMgJyArXG4gICAgICAnc3RlYW1fdWdjX2NyZWF0ZV9xdWVyeV91c2VyIHN0ZWFtX3VnY19jcmVhdGVfcXVlcnlfdXNlcl9leCAnICtcbiAgICAgICdzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbCBzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbF9leCAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X2Nsb3VkX2ZpbGVuYW1lX2ZpbHRlciAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X21hdGNoX2FueV90YWcgc3RlYW1fdWdjX3F1ZXJ5X3NldF9zZWFyY2hfdGV4dCAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X3JhbmtlZF9ieV90cmVuZF9kYXlzICcgK1xuICAgICAgJ3N0ZWFtX3VnY19xdWVyeV9hZGRfcmVxdWlyZWRfdGFnIHN0ZWFtX3VnY19xdWVyeV9hZGRfZXhjbHVkZWRfdGFnICcgK1xuICAgICAgJ3N0ZWFtX3VnY19xdWVyeV9zZXRfcmV0dXJuX2xvbmdfZGVzY3JpcHRpb24gJyArXG4gICAgICAnc3RlYW1fdWdjX3F1ZXJ5X3NldF9yZXR1cm5fdG90YWxfb25seSAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X2FsbG93X2NhY2hlZF9yZXNwb25zZSBzdGVhbV91Z2Nfc2VuZF9xdWVyeSAnICtcbiAgICAgICdzaGFkZXJfc2V0IHNoYWRlcl9nZXRfbmFtZSBzaGFkZXJfcmVzZXQgc2hhZGVyX2N1cnJlbnQgJyArXG4gICAgICAnc2hhZGVyX2lzX2NvbXBpbGVkIHNoYWRlcl9nZXRfc2FtcGxlcl9pbmRleCBzaGFkZXJfZ2V0X3VuaWZvcm0gJyArXG4gICAgICAnc2hhZGVyX3NldF91bmlmb3JtX2kgc2hhZGVyX3NldF91bmlmb3JtX2lfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX2YgJyArXG4gICAgICAnc2hhZGVyX3NldF91bmlmb3JtX2ZfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX21hdHJpeCAnICtcbiAgICAgICdzaGFkZXJfc2V0X3VuaWZvcm1fbWF0cml4X2FycmF5IHNoYWRlcl9lbmFibGVfY29ybmVyX2lkICcgK1xuICAgICAgJ3RleHR1cmVfc2V0X3N0YWdlIHRleHR1cmVfZ2V0X3RleGVsX3dpZHRoIHRleHR1cmVfZ2V0X3RleGVsX2hlaWdodCAnICtcbiAgICAgICdzaGFkZXJzX2FyZV9zdXBwb3J0ZWQgdmVydGV4X2Zvcm1hdF9iZWdpbiB2ZXJ0ZXhfZm9ybWF0X2VuZCAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2RlbGV0ZSB2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbiAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbl8zZCB2ZXJ0ZXhfZm9ybWF0X2FkZF9jb2xvdXIgJyArXG4gICAgICAndmVydGV4X2Zvcm1hdF9hZGRfY29sb3IgdmVydGV4X2Zvcm1hdF9hZGRfbm9ybWFsICcgK1xuICAgICAgJ3ZlcnRleF9mb3JtYXRfYWRkX3RleGNvb3JkIHZlcnRleF9mb3JtYXRfYWRkX3RleHRjb29yZCAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2FkZF9jdXN0b20gdmVydGV4X2NyZWF0ZV9idWZmZXIgJyArXG4gICAgICAndmVydGV4X2NyZWF0ZV9idWZmZXJfZXh0IHZlcnRleF9kZWxldGVfYnVmZmVyIHZlcnRleF9iZWdpbiAnICtcbiAgICAgICd2ZXJ0ZXhfZW5kIHZlcnRleF9wb3NpdGlvbiB2ZXJ0ZXhfcG9zaXRpb25fM2QgdmVydGV4X2NvbG91ciAnICtcbiAgICAgICd2ZXJ0ZXhfY29sb3IgdmVydGV4X2FyZ2IgdmVydGV4X3RleGNvb3JkIHZlcnRleF9ub3JtYWwgdmVydGV4X2Zsb2F0MSAnICtcbiAgICAgICd2ZXJ0ZXhfZmxvYXQyIHZlcnRleF9mbG9hdDMgdmVydGV4X2Zsb2F0NCB2ZXJ0ZXhfdWJ5dGU0ICcgK1xuICAgICAgJ3ZlcnRleF9zdWJtaXQgdmVydGV4X2ZyZWV6ZSB2ZXJ0ZXhfZ2V0X251bWJlciB2ZXJ0ZXhfZ2V0X2J1ZmZlcl9zaXplICcgK1xuICAgICAgJ3ZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyICcgK1xuICAgICAgJ3ZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyX2V4dCBwdXNoX2xvY2FsX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICdwdXNoX2dldF9maXJzdF9sb2NhbF9ub3RpZmljYXRpb24gcHVzaF9nZXRfbmV4dF9sb2NhbF9ub3RpZmljYXRpb24gJyArXG4gICAgICAncHVzaF9jYW5jZWxfbG9jYWxfbm90aWZpY2F0aW9uIHNrZWxldG9uX2FuaW1hdGlvbl9zZXQgJyArXG4gICAgICAnc2tlbGV0b25fYW5pbWF0aW9uX2dldCBza2VsZXRvbl9hbmltYXRpb25fbWl4ICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9zZXRfZXh0IHNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZXh0ICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9nZXRfZHVyYXRpb24gc2tlbGV0b25fYW5pbWF0aW9uX2dldF9mcmFtZXMgJyArXG4gICAgICAnc2tlbGV0b25fYW5pbWF0aW9uX2NsZWFyIHNrZWxldG9uX3NraW5fc2V0IHNrZWxldG9uX3NraW5fZ2V0ICcgK1xuICAgICAgJ3NrZWxldG9uX2F0dGFjaG1lbnRfc2V0IHNrZWxldG9uX2F0dGFjaG1lbnRfZ2V0ICcgK1xuICAgICAgJ3NrZWxldG9uX2F0dGFjaG1lbnRfY3JlYXRlIHNrZWxldG9uX2NvbGxpc2lvbl9kcmF3X3NldCAnICtcbiAgICAgICdza2VsZXRvbl9ib25lX2RhdGFfZ2V0IHNrZWxldG9uX2JvbmVfZGF0YV9zZXQgJyArXG4gICAgICAnc2tlbGV0b25fYm9uZV9zdGF0ZV9nZXQgc2tlbGV0b25fYm9uZV9zdGF0ZV9zZXQgc2tlbGV0b25fZ2V0X21pbm1heCAnICtcbiAgICAgICdza2VsZXRvbl9nZXRfbnVtX2JvdW5kcyBza2VsZXRvbl9nZXRfYm91bmRzICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9nZXRfZnJhbWUgc2tlbGV0b25fYW5pbWF0aW9uX3NldF9mcmFtZSAnICtcbiAgICAgICdkcmF3X3NrZWxldG9uIGRyYXdfc2tlbGV0b25fdGltZSBkcmF3X3NrZWxldG9uX2luc3RhbmNlICcgK1xuICAgICAgJ2RyYXdfc2tlbGV0b25fY29sbGlzaW9uIHNrZWxldG9uX2FuaW1hdGlvbl9saXN0IHNrZWxldG9uX3NraW5fbGlzdCAnICtcbiAgICAgICdza2VsZXRvbl9zbG90X2RhdGEgbGF5ZXJfZ2V0X2lkIGxheWVyX2dldF9pZF9hdF9kZXB0aCAnICtcbiAgICAgICdsYXllcl9nZXRfZGVwdGggbGF5ZXJfY3JlYXRlIGxheWVyX2Rlc3Ryb3kgbGF5ZXJfZGVzdHJveV9pbnN0YW5jZXMgJyArXG4gICAgICAnbGF5ZXJfYWRkX2luc3RhbmNlIGxheWVyX2hhc19pbnN0YW5jZSBsYXllcl9zZXRfdmlzaWJsZSAnICtcbiAgICAgICdsYXllcl9nZXRfdmlzaWJsZSBsYXllcl9leGlzdHMgbGF5ZXJfeCBsYXllcl95IGxheWVyX2dldF94ICcgK1xuICAgICAgJ2xheWVyX2dldF95IGxheWVyX2hzcGVlZCBsYXllcl92c3BlZWQgbGF5ZXJfZ2V0X2hzcGVlZCAnICtcbiAgICAgICdsYXllcl9nZXRfdnNwZWVkIGxheWVyX3NjcmlwdF9iZWdpbiBsYXllcl9zY3JpcHRfZW5kIGxheWVyX3NoYWRlciAnICtcbiAgICAgICdsYXllcl9nZXRfc2NyaXB0X2JlZ2luIGxheWVyX2dldF9zY3JpcHRfZW5kIGxheWVyX2dldF9zaGFkZXIgJyArXG4gICAgICAnbGF5ZXJfc2V0X3RhcmdldF9yb29tIGxheWVyX2dldF90YXJnZXRfcm9vbSBsYXllcl9yZXNldF90YXJnZXRfcm9vbSAnICtcbiAgICAgICdsYXllcl9nZXRfYWxsIGxheWVyX2dldF9hbGxfZWxlbWVudHMgbGF5ZXJfZ2V0X25hbWUgbGF5ZXJfZGVwdGggJyArXG4gICAgICAnbGF5ZXJfZ2V0X2VsZW1lbnRfbGF5ZXIgbGF5ZXJfZ2V0X2VsZW1lbnRfdHlwZSBsYXllcl9lbGVtZW50X21vdmUgJyArXG4gICAgICAnbGF5ZXJfZm9yY2VfZHJhd19kZXB0aCBsYXllcl9pc19kcmF3X2RlcHRoX2ZvcmNlZCAnICtcbiAgICAgICdsYXllcl9nZXRfZm9yY2VkX2RlcHRoIGxheWVyX2JhY2tncm91bmRfZ2V0X2lkICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfZXhpc3RzIGxheWVyX2JhY2tncm91bmRfY3JlYXRlICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfZGVzdHJveSBsYXllcl9iYWNrZ3JvdW5kX3Zpc2libGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9jaGFuZ2UgbGF5ZXJfYmFja2dyb3VuZF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9odGlsZWQgbGF5ZXJfYmFja2dyb3VuZF92dGlsZWQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfeXNjYWxlICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfeHNjYWxlIGxheWVyX2JhY2tncm91bmRfYmxlbmQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9hbHBoYSBsYXllcl9iYWNrZ3JvdW5kX2luZGV4IGxheWVyX2JhY2tncm91bmRfc3BlZWQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfdmlzaWJsZSBsYXllcl9iYWNrZ3JvdW5kX2dldF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfaHRpbGVkIGxheWVyX2JhY2tncm91bmRfZ2V0X3Z0aWxlZCAnICtcbiAgICAgICdsYXllcl9iYWNrZ3JvdW5kX2dldF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfZ2V0X3lzY2FsZSAnICtcbiAgICAgICdsYXllcl9iYWNrZ3JvdW5kX2dldF94c2NhbGUgbGF5ZXJfYmFja2dyb3VuZF9nZXRfYmxlbmQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfYWxwaGEgbGF5ZXJfYmFja2dyb3VuZF9nZXRfaW5kZXggJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF9pZCBsYXllcl9zcHJpdGVfZXhpc3RzICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9jcmVhdGUgbGF5ZXJfc3ByaXRlX2Rlc3Ryb3kgbGF5ZXJfc3ByaXRlX2NoYW5nZSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfaW5kZXggbGF5ZXJfc3ByaXRlX3NwZWVkIGxheWVyX3Nwcml0ZV94c2NhbGUgJyArXG4gICAgICAnbGF5ZXJfc3ByaXRlX3lzY2FsZSBsYXllcl9zcHJpdGVfYW5nbGUgbGF5ZXJfc3ByaXRlX2JsZW5kICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9hbHBoYSBsYXllcl9zcHJpdGVfeCBsYXllcl9zcHJpdGVfeSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfZ2V0X3Nwcml0ZSBsYXllcl9zcHJpdGVfZ2V0X2luZGV4ICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF94c2NhbGUgJyArXG4gICAgICAnbGF5ZXJfc3ByaXRlX2dldF95c2NhbGUgbGF5ZXJfc3ByaXRlX2dldF9hbmdsZSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfZ2V0X2JsZW5kIGxheWVyX3Nwcml0ZV9nZXRfYWxwaGEgbGF5ZXJfc3ByaXRlX2dldF94ICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9nZXRfeSBsYXllcl90aWxlbWFwX2dldF9pZCBsYXllcl90aWxlbWFwX2V4aXN0cyAnICtcbiAgICAgICdsYXllcl90aWxlbWFwX2NyZWF0ZSBsYXllcl90aWxlbWFwX2Rlc3Ryb3kgdGlsZW1hcF90aWxlc2V0IHRpbGVtYXBfeCAnICtcbiAgICAgICd0aWxlbWFwX3kgdGlsZW1hcF9zZXQgdGlsZW1hcF9zZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfdGlsZXNldCAnICtcbiAgICAgICd0aWxlbWFwX2dldF90aWxlX3dpZHRoIHRpbGVtYXBfZ2V0X3RpbGVfaGVpZ2h0IHRpbGVtYXBfZ2V0X3dpZHRoICcgK1xuICAgICAgJ3RpbGVtYXBfZ2V0X2hlaWdodCB0aWxlbWFwX2dldF94IHRpbGVtYXBfZ2V0X3kgdGlsZW1hcF9nZXQgJyArXG4gICAgICAndGlsZW1hcF9nZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfY2VsbF94X2F0X3BpeGVsICcgK1xuICAgICAgJ3RpbGVtYXBfZ2V0X2NlbGxfeV9hdF9waXhlbCB0aWxlbWFwX2NsZWFyIGRyYXdfdGlsZW1hcCBkcmF3X3RpbGUgJyArXG4gICAgICAndGlsZW1hcF9zZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9nZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9zZXRfbWFzayAnICtcbiAgICAgICd0aWxlbWFwX2dldF9tYXNrIHRpbGVtYXBfZ2V0X2ZyYW1lIHRpbGVfc2V0X2VtcHR5IHRpbGVfc2V0X2luZGV4ICcgK1xuICAgICAgJ3RpbGVfc2V0X2ZsaXAgdGlsZV9zZXRfbWlycm9yIHRpbGVfc2V0X3JvdGF0ZSB0aWxlX2dldF9lbXB0eSAnICtcbiAgICAgICd0aWxlX2dldF9pbmRleCB0aWxlX2dldF9mbGlwIHRpbGVfZ2V0X21pcnJvciB0aWxlX2dldF9yb3RhdGUgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9leGlzdHMgbGF5ZXJfdGlsZV9jcmVhdGUgbGF5ZXJfdGlsZV9kZXN0cm95ICcgK1xuICAgICAgJ2xheWVyX3RpbGVfY2hhbmdlIGxheWVyX3RpbGVfeHNjYWxlIGxheWVyX3RpbGVfeXNjYWxlICcgK1xuICAgICAgJ2xheWVyX3RpbGVfYmxlbmQgbGF5ZXJfdGlsZV9hbHBoYSBsYXllcl90aWxlX3ggbGF5ZXJfdGlsZV95ICcgK1xuICAgICAgJ2xheWVyX3RpbGVfcmVnaW9uIGxheWVyX3RpbGVfdmlzaWJsZSBsYXllcl90aWxlX2dldF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9nZXRfeHNjYWxlIGxheWVyX3RpbGVfZ2V0X3lzY2FsZSBsYXllcl90aWxlX2dldF9ibGVuZCAnICtcbiAgICAgICdsYXllcl90aWxlX2dldF9hbHBoYSBsYXllcl90aWxlX2dldF94IGxheWVyX3RpbGVfZ2V0X3kgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9nZXRfcmVnaW9uIGxheWVyX3RpbGVfZ2V0X3Zpc2libGUgJyArXG4gICAgICAnbGF5ZXJfaW5zdGFuY2VfZ2V0X2luc3RhbmNlIGluc3RhbmNlX2FjdGl2YXRlX2xheWVyICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfbGF5ZXIgY2FtZXJhX2NyZWF0ZSBjYW1lcmFfY3JlYXRlX3ZpZXcgJyArXG4gICAgICAnY2FtZXJhX2Rlc3Ryb3kgY2FtZXJhX2FwcGx5IGNhbWVyYV9nZXRfYWN0aXZlIGNhbWVyYV9nZXRfZGVmYXVsdCAnICtcbiAgICAgICdjYW1lcmFfc2V0X2RlZmF1bHQgY2FtZXJhX3NldF92aWV3X21hdCBjYW1lcmFfc2V0X3Byb2pfbWF0ICcgK1xuICAgICAgJ2NhbWVyYV9zZXRfdXBkYXRlX3NjcmlwdCBjYW1lcmFfc2V0X2JlZ2luX3NjcmlwdCAnICtcbiAgICAgICdjYW1lcmFfc2V0X2VuZF9zY3JpcHQgY2FtZXJhX3NldF92aWV3X3BvcyBjYW1lcmFfc2V0X3ZpZXdfc2l6ZSAnICtcbiAgICAgICdjYW1lcmFfc2V0X3ZpZXdfc3BlZWQgY2FtZXJhX3NldF92aWV3X2JvcmRlciBjYW1lcmFfc2V0X3ZpZXdfYW5nbGUgJyArXG4gICAgICAnY2FtZXJhX3NldF92aWV3X3RhcmdldCBjYW1lcmFfZ2V0X3ZpZXdfbWF0IGNhbWVyYV9nZXRfcHJval9tYXQgJyArXG4gICAgICAnY2FtZXJhX2dldF91cGRhdGVfc2NyaXB0IGNhbWVyYV9nZXRfYmVnaW5fc2NyaXB0ICcgK1xuICAgICAgJ2NhbWVyYV9nZXRfZW5kX3NjcmlwdCBjYW1lcmFfZ2V0X3ZpZXdfeCBjYW1lcmFfZ2V0X3ZpZXdfeSAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfd2lkdGggY2FtZXJhX2dldF92aWV3X2hlaWdodCBjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeCAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeSBjYW1lcmFfZ2V0X3ZpZXdfYm9yZGVyX3ggJyArXG4gICAgICAnY2FtZXJhX2dldF92aWV3X2JvcmRlcl95IGNhbWVyYV9nZXRfdmlld19hbmdsZSAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfdGFyZ2V0IHZpZXdfZ2V0X2NhbWVyYSB2aWV3X2dldF92aXNpYmxlICcgK1xuICAgICAgJ3ZpZXdfZ2V0X3hwb3J0IHZpZXdfZ2V0X3lwb3J0IHZpZXdfZ2V0X3dwb3J0IHZpZXdfZ2V0X2hwb3J0ICcgK1xuICAgICAgJ3ZpZXdfZ2V0X3N1cmZhY2VfaWQgdmlld19zZXRfY2FtZXJhIHZpZXdfc2V0X3Zpc2libGUgdmlld19zZXRfeHBvcnQgJyArXG4gICAgICAndmlld19zZXRfeXBvcnQgdmlld19zZXRfd3BvcnQgdmlld19zZXRfaHBvcnQgdmlld19zZXRfc3VyZmFjZV9pZCAnICtcbiAgICAgICdnZXN0dXJlX2RyYWdfdGltZSBnZXN0dXJlX2RyYWdfZGlzdGFuY2UgZ2VzdHVyZV9mbGlja19zcGVlZCAnICtcbiAgICAgICdnZXN0dXJlX2RvdWJsZV90YXBfdGltZSBnZXN0dXJlX2RvdWJsZV90YXBfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9waW5jaF9kaXN0YW5jZSBnZXN0dXJlX3BpbmNoX2FuZ2xlX3Rvd2FyZHMgJyArXG4gICAgICAnZ2VzdHVyZV9waW5jaF9hbmdsZV9hd2F5IGdlc3R1cmVfcm90YXRlX3RpbWUgZ2VzdHVyZV9yb3RhdGVfYW5nbGUgJyArXG4gICAgICAnZ2VzdHVyZV90YXBfY291bnQgZ2VzdHVyZV9nZXRfZHJhZ190aW1lIGdlc3R1cmVfZ2V0X2RyYWdfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9nZXRfZmxpY2tfc3BlZWQgZ2VzdHVyZV9nZXRfZG91YmxlX3RhcF90aW1lICcgK1xuICAgICAgJ2dlc3R1cmVfZ2V0X2RvdWJsZV90YXBfZGlzdGFuY2UgZ2VzdHVyZV9nZXRfcGluY2hfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9nZXRfcGluY2hfYW5nbGVfdG93YXJkcyBnZXN0dXJlX2dldF9waW5jaF9hbmdsZV9hd2F5ICcgK1xuICAgICAgJ2dlc3R1cmVfZ2V0X3JvdGF0ZV90aW1lIGdlc3R1cmVfZ2V0X3JvdGF0ZV9hbmdsZSAnICtcbiAgICAgICdnZXN0dXJlX2dldF90YXBfY291bnQga2V5Ym9hcmRfdmlydHVhbF9zaG93IGtleWJvYXJkX3ZpcnR1YWxfaGlkZSAnICtcbiAgICAgICdrZXlib2FyZF92aXJ0dWFsX3N0YXR1cyBrZXlib2FyZF92aXJ0dWFsX2hlaWdodCcsXG4gICAgbGl0ZXJhbDogJ3NlbGYgb3RoZXIgYWxsIG5vb25lIGdsb2JhbCBsb2NhbCB1bmRlZmluZWQgcG9pbnRlcl9pbnZhbGlkICcgK1xuICAgICAgJ3BvaW50ZXJfbnVsbCBwYXRoX2FjdGlvbl9zdG9wIHBhdGhfYWN0aW9uX3Jlc3RhcnQgJyArXG4gICAgICAncGF0aF9hY3Rpb25fY29udGludWUgcGF0aF9hY3Rpb25fcmV2ZXJzZSB0cnVlIGZhbHNlIHBpIEdNX2J1aWxkX2RhdGUgJyArXG4gICAgICAnR01fdmVyc2lvbiBHTV9ydW50aW1lX3ZlcnNpb24gIHRpbWV6b25lX2xvY2FsIHRpbWV6b25lX3V0YyAnICtcbiAgICAgICdnYW1lc3BlZWRfZnBzIGdhbWVzcGVlZF9taWNyb3NlY29uZHMgIGV2X2NyZWF0ZSBldl9kZXN0cm95IGV2X3N0ZXAgJyArXG4gICAgICAnZXZfYWxhcm0gZXZfa2V5Ym9hcmQgZXZfbW91c2UgZXZfY29sbGlzaW9uIGV2X290aGVyIGV2X2RyYXcgJyArXG4gICAgICAnZXZfZHJhd19iZWdpbiBldl9kcmF3X2VuZCBldl9kcmF3X3ByZSBldl9kcmF3X3Bvc3QgZXZfa2V5cHJlc3MgJyArXG4gICAgICAnZXZfa2V5cmVsZWFzZSBldl90cmlnZ2VyIGV2X2xlZnRfYnV0dG9uIGV2X3JpZ2h0X2J1dHRvbiAnICtcbiAgICAgICdldl9taWRkbGVfYnV0dG9uIGV2X25vX2J1dHRvbiBldl9sZWZ0X3ByZXNzIGV2X3JpZ2h0X3ByZXNzICcgK1xuICAgICAgJ2V2X21pZGRsZV9wcmVzcyBldl9sZWZ0X3JlbGVhc2UgZXZfcmlnaHRfcmVsZWFzZSBldl9taWRkbGVfcmVsZWFzZSAnICtcbiAgICAgICdldl9tb3VzZV9lbnRlciBldl9tb3VzZV9sZWF2ZSBldl9tb3VzZV93aGVlbF91cCBldl9tb3VzZV93aGVlbF9kb3duICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X2J1dHRvbiBldl9nbG9iYWxfcmlnaHRfYnV0dG9uIGV2X2dsb2JhbF9taWRkbGVfYnV0dG9uICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X3ByZXNzIGV2X2dsb2JhbF9yaWdodF9wcmVzcyBldl9nbG9iYWxfbWlkZGxlX3ByZXNzICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X3JlbGVhc2UgZXZfZ2xvYmFsX3JpZ2h0X3JlbGVhc2UgJyArXG4gICAgICAnZXZfZ2xvYmFsX21pZGRsZV9yZWxlYXNlIGV2X2pveXN0aWNrMV9sZWZ0IGV2X2pveXN0aWNrMV9yaWdodCAnICtcbiAgICAgICdldl9qb3lzdGljazFfdXAgZXZfam95c3RpY2sxX2Rvd24gZXZfam95c3RpY2sxX2J1dHRvbjEgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjIgZXZfam95c3RpY2sxX2J1dHRvbjMgZXZfam95c3RpY2sxX2J1dHRvbjQgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjUgZXZfam95c3RpY2sxX2J1dHRvbjYgZXZfam95c3RpY2sxX2J1dHRvbjcgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjggZXZfam95c3RpY2syX2xlZnQgZXZfam95c3RpY2syX3JpZ2h0ICcgK1xuICAgICAgJ2V2X2pveXN0aWNrMl91cCBldl9qb3lzdGljazJfZG93biBldl9qb3lzdGljazJfYnV0dG9uMSAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uMiBldl9qb3lzdGljazJfYnV0dG9uMyBldl9qb3lzdGljazJfYnV0dG9uNCAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uNSBldl9qb3lzdGljazJfYnV0dG9uNiBldl9qb3lzdGljazJfYnV0dG9uNyAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uOCBldl9vdXRzaWRlIGV2X2JvdW5kYXJ5IGV2X2dhbWVfc3RhcnQgJyArXG4gICAgICAnZXZfZ2FtZV9lbmQgZXZfcm9vbV9zdGFydCBldl9yb29tX2VuZCBldl9ub19tb3JlX2xpdmVzICcgK1xuICAgICAgJ2V2X2FuaW1hdGlvbl9lbmQgZXZfZW5kX29mX3BhdGggZXZfbm9fbW9yZV9oZWFsdGggZXZfY2xvc2VfYnV0dG9uICcgK1xuICAgICAgJ2V2X3VzZXIwIGV2X3VzZXIxIGV2X3VzZXIyIGV2X3VzZXIzIGV2X3VzZXI0IGV2X3VzZXI1IGV2X3VzZXI2ICcgK1xuICAgICAgJ2V2X3VzZXI3IGV2X3VzZXI4IGV2X3VzZXI5IGV2X3VzZXIxMCBldl91c2VyMTEgZXZfdXNlcjEyIGV2X3VzZXIxMyAnICtcbiAgICAgICdldl91c2VyMTQgZXZfdXNlcjE1IGV2X3N0ZXBfbm9ybWFsIGV2X3N0ZXBfYmVnaW4gZXZfc3RlcF9lbmQgZXZfZ3VpICcgK1xuICAgICAgJ2V2X2d1aV9iZWdpbiBldl9ndWlfZW5kIGV2X2NsZWFudXAgZXZfZ2VzdHVyZSBldl9nZXN0dXJlX3RhcCAnICtcbiAgICAgICdldl9nZXN0dXJlX2RvdWJsZV90YXAgZXZfZ2VzdHVyZV9kcmFnX3N0YXJ0IGV2X2dlc3R1cmVfZHJhZ2dpbmcgJyArXG4gICAgICAnZXZfZ2VzdHVyZV9kcmFnX2VuZCBldl9nZXN0dXJlX2ZsaWNrIGV2X2dlc3R1cmVfcGluY2hfc3RhcnQgJyArXG4gICAgICAnZXZfZ2VzdHVyZV9waW5jaF9pbiBldl9nZXN0dXJlX3BpbmNoX291dCBldl9nZXN0dXJlX3BpbmNoX2VuZCAnICtcbiAgICAgICdldl9nZXN0dXJlX3JvdGF0ZV9zdGFydCBldl9nZXN0dXJlX3JvdGF0aW5nIGV2X2dlc3R1cmVfcm90YXRlX2VuZCAnICtcbiAgICAgICdldl9nbG9iYWxfZ2VzdHVyZV90YXAgZXZfZ2xvYmFsX2dlc3R1cmVfZG91YmxlX3RhcCAnICtcbiAgICAgICdldl9nbG9iYWxfZ2VzdHVyZV9kcmFnX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX2RyYWdnaW5nICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX2RyYWdfZW5kIGV2X2dsb2JhbF9nZXN0dXJlX2ZsaWNrICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX2luICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX291dCBldl9nbG9iYWxfZ2VzdHVyZV9waW5jaF9lbmQgJyArXG4gICAgICAnZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRlX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX3JvdGF0aW5nICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3JvdGF0ZV9lbmQgdmtfbm9rZXkgdmtfYW55a2V5IHZrX2VudGVyIHZrX3JldHVybiAnICtcbiAgICAgICd2a19zaGlmdCB2a19jb250cm9sIHZrX2FsdCB2a19lc2NhcGUgdmtfc3BhY2UgdmtfYmFja3NwYWNlIHZrX3RhYiAnICtcbiAgICAgICd2a19wYXVzZSB2a19wcmludHNjcmVlbiB2a19sZWZ0IHZrX3JpZ2h0IHZrX3VwIHZrX2Rvd24gdmtfaG9tZSAnICtcbiAgICAgICd2a19lbmQgdmtfZGVsZXRlIHZrX2luc2VydCB2a19wYWdldXAgdmtfcGFnZWRvd24gdmtfZjEgdmtfZjIgdmtfZjMgJyArXG4gICAgICAndmtfZjQgdmtfZjUgdmtfZjYgdmtfZjcgdmtfZjggdmtfZjkgdmtfZjEwIHZrX2YxMSB2a19mMTIgdmtfbnVtcGFkMCAnICtcbiAgICAgICd2a19udW1wYWQxIHZrX251bXBhZDIgdmtfbnVtcGFkMyB2a19udW1wYWQ0IHZrX251bXBhZDUgdmtfbnVtcGFkNiAnICtcbiAgICAgICd2a19udW1wYWQ3IHZrX251bXBhZDggdmtfbnVtcGFkOSB2a19kaXZpZGUgdmtfbXVsdGlwbHkgdmtfc3VidHJhY3QgJyArXG4gICAgICAndmtfYWRkIHZrX2RlY2ltYWwgdmtfbHNoaWZ0IHZrX2xjb250cm9sIHZrX2xhbHQgdmtfcnNoaWZ0ICcgK1xuICAgICAgJ3ZrX3Jjb250cm9sIHZrX3JhbHQgIG1iX2FueSBtYl9ub25lIG1iX2xlZnQgbWJfcmlnaHQgbWJfbWlkZGxlICcgK1xuICAgICAgJ2NfYXF1YSBjX2JsYWNrIGNfYmx1ZSBjX2RrZ3JheSBjX2Z1Y2hzaWEgY19ncmF5IGNfZ3JlZW4gY19saW1lICcgK1xuICAgICAgJ2NfbHRncmF5IGNfbWFyb29uIGNfbmF2eSBjX29saXZlIGNfcHVycGxlIGNfcmVkIGNfc2lsdmVyIGNfdGVhbCAnICtcbiAgICAgICdjX3doaXRlIGNfeWVsbG93IGNfb3JhbmdlIGZhX2xlZnQgZmFfY2VudGVyIGZhX3JpZ2h0IGZhX3RvcCAnICtcbiAgICAgICdmYV9taWRkbGUgZmFfYm90dG9tIHByX3BvaW50bGlzdCBwcl9saW5lbGlzdCBwcl9saW5lc3RyaXAgJyArXG4gICAgICAncHJfdHJpYW5nbGVsaXN0IHByX3RyaWFuZ2xlc3RyaXAgcHJfdHJpYW5nbGVmYW4gYm1fY29tcGxleCBibV9ub3JtYWwgJyArXG4gICAgICAnYm1fYWRkIGJtX21heCBibV9zdWJ0cmFjdCBibV96ZXJvIGJtX29uZSBibV9zcmNfY29sb3VyICcgK1xuICAgICAgJ2JtX2ludl9zcmNfY29sb3VyIGJtX3NyY19jb2xvciBibV9pbnZfc3JjX2NvbG9yIGJtX3NyY19hbHBoYSAnICtcbiAgICAgICdibV9pbnZfc3JjX2FscGhhIGJtX2Rlc3RfYWxwaGEgYm1faW52X2Rlc3RfYWxwaGEgYm1fZGVzdF9jb2xvdXIgJyArXG4gICAgICAnYm1faW52X2Rlc3RfY29sb3VyIGJtX2Rlc3RfY29sb3IgYm1faW52X2Rlc3RfY29sb3IgYm1fc3JjX2FscGhhX3NhdCAnICtcbiAgICAgICd0Zl9wb2ludCB0Zl9saW5lYXIgdGZfYW5pc290cm9waWMgbWlwX29mZiBtaXBfb24gbWlwX21hcmtlZG9ubHkgJyArXG4gICAgICAnYXVkaW9fZmFsbG9mZl9ub25lIGF1ZGlvX2ZhbGxvZmZfaW52ZXJzZV9kaXN0YW5jZSAnICtcbiAgICAgICdhdWRpb19mYWxsb2ZmX2ludmVyc2VfZGlzdGFuY2VfY2xhbXBlZCBhdWRpb19mYWxsb2ZmX2xpbmVhcl9kaXN0YW5jZSAnICtcbiAgICAgICdhdWRpb19mYWxsb2ZmX2xpbmVhcl9kaXN0YW5jZV9jbGFtcGVkICcgK1xuICAgICAgJ2F1ZGlvX2ZhbGxvZmZfZXhwb25lbnRfZGlzdGFuY2UgJyArXG4gICAgICAnYXVkaW9fZmFsbG9mZl9leHBvbmVudF9kaXN0YW5jZV9jbGFtcGVkIGF1ZGlvX29sZF9zeXN0ZW0gJyArXG4gICAgICAnYXVkaW9fbmV3X3N5c3RlbSBhdWRpb19tb25vIGF1ZGlvX3N0ZXJlbyBhdWRpb18zZCBjcl9kZWZhdWx0IGNyX25vbmUgJyArXG4gICAgICAnY3JfYXJyb3cgY3JfY3Jvc3MgY3JfYmVhbSBjcl9zaXplX25lc3cgY3Jfc2l6ZV9ucyBjcl9zaXplX253c2UgJyArXG4gICAgICAnY3Jfc2l6ZV93ZSBjcl91cGFycm93IGNyX2hvdXJnbGFzcyBjcl9kcmFnIGNyX2FwcHN0YXJ0IGNyX2hhbmRwb2ludCAnICtcbiAgICAgICdjcl9zaXplX2FsbCBzcHJpdGVzcGVlZF9mcmFtZXNwZXJzZWNvbmQgJyArXG4gICAgICAnc3ByaXRlc3BlZWRfZnJhbWVzcGVyZ2FtZWZyYW1lIGFzc2V0X29iamVjdCBhc3NldF91bmtub3duICcgK1xuICAgICAgJ2Fzc2V0X3Nwcml0ZSBhc3NldF9zb3VuZCBhc3NldF9yb29tIGFzc2V0X3BhdGggYXNzZXRfc2NyaXB0ICcgK1xuICAgICAgJ2Fzc2V0X2ZvbnQgYXNzZXRfdGltZWxpbmUgYXNzZXRfdGlsZXMgYXNzZXRfc2hhZGVyIGZhX3JlYWRvbmx5ICcgK1xuICAgICAgJ2ZhX2hpZGRlbiBmYV9zeXNmaWxlIGZhX3ZvbHVtZWlkIGZhX2RpcmVjdG9yeSBmYV9hcmNoaXZlICAnICtcbiAgICAgICdkc190eXBlX21hcCBkc190eXBlX2xpc3QgZHNfdHlwZV9zdGFjayBkc190eXBlX3F1ZXVlIGRzX3R5cGVfZ3JpZCAnICtcbiAgICAgICdkc190eXBlX3ByaW9yaXR5IGVmX2V4cGxvc2lvbiBlZl9yaW5nIGVmX2VsbGlwc2UgZWZfZmlyZXdvcmsgJyArXG4gICAgICAnZWZfc21va2UgZWZfc21va2V1cCBlZl9zdGFyIGVmX3NwYXJrIGVmX2ZsYXJlIGVmX2Nsb3VkIGVmX3JhaW4gJyArXG4gICAgICAnZWZfc25vdyBwdF9zaGFwZV9waXhlbCBwdF9zaGFwZV9kaXNrIHB0X3NoYXBlX3NxdWFyZSBwdF9zaGFwZV9saW5lICcgK1xuICAgICAgJ3B0X3NoYXBlX3N0YXIgcHRfc2hhcGVfY2lyY2xlIHB0X3NoYXBlX3JpbmcgcHRfc2hhcGVfc3BoZXJlICcgK1xuICAgICAgJ3B0X3NoYXBlX2ZsYXJlIHB0X3NoYXBlX3NwYXJrIHB0X3NoYXBlX2V4cGxvc2lvbiBwdF9zaGFwZV9jbG91ZCAnICtcbiAgICAgICdwdF9zaGFwZV9zbW9rZSBwdF9zaGFwZV9zbm93IHBzX2Rpc3RyX2xpbmVhciBwc19kaXN0cl9nYXVzc2lhbiAnICtcbiAgICAgICdwc19kaXN0cl9pbnZnYXVzc2lhbiBwc19zaGFwZV9yZWN0YW5nbGUgcHNfc2hhcGVfZWxsaXBzZSAnICtcbiAgICAgICdwc19zaGFwZV9kaWFtb25kIHBzX3NoYXBlX2xpbmUgdHlfcmVhbCB0eV9zdHJpbmcgZGxsX2NkZWNsICcgK1xuICAgICAgJ2RsbF9zdGRjYWxsIG1hdHJpeF92aWV3IG1hdHJpeF9wcm9qZWN0aW9uIG1hdHJpeF93b3JsZCBvc193aW4zMiAnICtcbiAgICAgICdvc193aW5kb3dzIG9zX21hY29zeCBvc19pb3Mgb3NfYW5kcm9pZCBvc19zeW1iaWFuIG9zX2xpbnV4ICcgK1xuICAgICAgJ29zX3Vua25vd24gb3Nfd2lucGhvbmUgb3NfdGl6ZW4gb3Nfd2luOG5hdGl2ZSAnICtcbiAgICAgICdvc193aWl1IG9zXzNkcyAgb3NfcHN2aXRhIG9zX2JiMTAgb3NfcHM0IG9zX3hib3hvbmUgJyArXG4gICAgICAnb3NfcHMzIG9zX3hib3gzNjAgb3NfdXdwIG9zX3R2b3Mgb3Nfc3dpdGNoICcgK1xuICAgICAgJ2Jyb3dzZXJfbm90X2FfYnJvd3NlciBicm93c2VyX3Vua25vd24gYnJvd3Nlcl9pZSBicm93c2VyX2ZpcmVmb3ggJyArXG4gICAgICAnYnJvd3Nlcl9jaHJvbWUgYnJvd3Nlcl9zYWZhcmkgYnJvd3Nlcl9zYWZhcmlfbW9iaWxlIGJyb3dzZXJfb3BlcmEgJyArXG4gICAgICAnYnJvd3Nlcl90aXplbiBicm93c2VyX2VkZ2UgYnJvd3Nlcl93aW5kb3dzX3N0b3JlIGJyb3dzZXJfaWVfbW9iaWxlICAnICtcbiAgICAgICdkZXZpY2VfaW9zX3Vua25vd24gZGV2aWNlX2lvc19pcGhvbmUgZGV2aWNlX2lvc19pcGhvbmVfcmV0aW5hICcgK1xuICAgICAgJ2RldmljZV9pb3NfaXBhZCBkZXZpY2VfaW9zX2lwYWRfcmV0aW5hIGRldmljZV9pb3NfaXBob25lNSAnICtcbiAgICAgICdkZXZpY2VfaW9zX2lwaG9uZTYgZGV2aWNlX2lvc19pcGhvbmU2cGx1cyBkZXZpY2VfZW11bGF0b3IgJyArXG4gICAgICAnZGV2aWNlX3RhYmxldCBkaXNwbGF5X2xhbmRzY2FwZSBkaXNwbGF5X2xhbmRzY2FwZV9mbGlwcGVkICcgK1xuICAgICAgJ2Rpc3BsYXlfcG9ydHJhaXQgZGlzcGxheV9wb3J0cmFpdF9mbGlwcGVkIHRtX3NsZWVwIHRtX2NvdW50dnN5bmNzICcgK1xuICAgICAgJ29mX2NoYWxsZW5nZV93aW4gb2ZfY2hhbGxlbiBnZV9sb3NlIG9mX2NoYWxsZW5nZV90aWUgJyArXG4gICAgICAnbGVhZGVyYm9hcmRfdHlwZV9udW1iZXIgbGVhZGVyYm9hcmRfdHlwZV90aW1lX21pbnNfc2VjcyAnICtcbiAgICAgICdjbXBmdW5jX25ldmVyIGNtcGZ1bmNfbGVzcyBjbXBmdW5jX2VxdWFsIGNtcGZ1bmNfbGVzc2VxdWFsICcgK1xuICAgICAgJ2NtcGZ1bmNfZ3JlYXRlciBjbXBmdW5jX25vdGVxdWFsIGNtcGZ1bmNfZ3JlYXRlcmVxdWFsIGNtcGZ1bmNfYWx3YXlzICcgK1xuICAgICAgJ2N1bGxfbm9jdWxsaW5nIGN1bGxfY2xvY2t3aXNlIGN1bGxfY291bnRlcmNsb2Nrd2lzZSBsaWdodHR5cGVfZGlyICcgK1xuICAgICAgJ2xpZ2h0dHlwZV9wb2ludCBpYXBfZXZfc3RvcmVsb2FkIGlhcF9ldl9wcm9kdWN0IGlhcF9ldl9wdXJjaGFzZSAnICtcbiAgICAgICdpYXBfZXZfY29uc3VtZSBpYXBfZXZfcmVzdG9yZSBpYXBfc3RvcmVsb2FkX29rIGlhcF9zdG9yZWxvYWRfZmFpbGVkICcgK1xuICAgICAgJ2lhcF9zdGF0dXNfdW5pbml0aWFsaXNlZCBpYXBfc3RhdHVzX3VuYXZhaWxhYmxlIGlhcF9zdGF0dXNfbG9hZGluZyAnICtcbiAgICAgICdpYXBfc3RhdHVzX2F2YWlsYWJsZSBpYXBfc3RhdHVzX3Byb2Nlc3NpbmcgaWFwX3N0YXR1c19yZXN0b3JpbmcgJyArXG4gICAgICAnaWFwX2ZhaWxlZCBpYXBfdW5hdmFpbGFibGUgaWFwX2F2YWlsYWJsZSBpYXBfcHVyY2hhc2VkIGlhcF9jYW5jZWxlZCAnICtcbiAgICAgICdpYXBfcmVmdW5kZWQgZmJfbG9naW5fZGVmYXVsdCBmYl9sb2dpbl9mYWxsYmFja190b193ZWJ2aWV3ICcgK1xuICAgICAgJ2ZiX2xvZ2luX25vX2ZhbGxiYWNrX3RvX3dlYnZpZXcgZmJfbG9naW5fZm9yY2luZ193ZWJ2aWV3ICcgK1xuICAgICAgJ2ZiX2xvZ2luX3VzZV9zeXN0ZW1fYWNjb3VudCBmYl9sb2dpbl9mb3JjaW5nX3NhZmFyaSAgJyArXG4gICAgICAncGh5X2pvaW50X2FuY2hvcl8xX3ggcGh5X2pvaW50X2FuY2hvcl8xX3kgcGh5X2pvaW50X2FuY2hvcl8yX3ggJyArXG4gICAgICAncGh5X2pvaW50X2FuY2hvcl8yX3kgcGh5X2pvaW50X3JlYWN0aW9uX2ZvcmNlX3ggJyArXG4gICAgICAncGh5X2pvaW50X3JlYWN0aW9uX2ZvcmNlX3kgcGh5X2pvaW50X3JlYWN0aW9uX3RvcnF1ZSAnICtcbiAgICAgICdwaHlfam9pbnRfbW90b3Jfc3BlZWQgcGh5X2pvaW50X2FuZ2xlIHBoeV9qb2ludF9tb3Rvcl90b3JxdWUgJyArXG4gICAgICAncGh5X2pvaW50X21heF9tb3Rvcl90b3JxdWUgcGh5X2pvaW50X3RyYW5zbGF0aW9uIHBoeV9qb2ludF9zcGVlZCAnICtcbiAgICAgICdwaHlfam9pbnRfbW90b3JfZm9yY2UgcGh5X2pvaW50X21heF9tb3Rvcl9mb3JjZSBwaHlfam9pbnRfbGVuZ3RoXzEgJyArXG4gICAgICAncGh5X2pvaW50X2xlbmd0aF8yIHBoeV9qb2ludF9kYW1waW5nX3JhdGlvIHBoeV9qb2ludF9mcmVxdWVuY3kgJyArXG4gICAgICAncGh5X2pvaW50X2xvd2VyX2FuZ2xlX2xpbWl0IHBoeV9qb2ludF91cHBlcl9hbmdsZV9saW1pdCAnICtcbiAgICAgICdwaHlfam9pbnRfYW5nbGVfbGltaXRzIHBoeV9qb2ludF9tYXhfbGVuZ3RoIHBoeV9qb2ludF9tYXhfdG9ycXVlICcgK1xuICAgICAgJ3BoeV9qb2ludF9tYXhfZm9yY2UgcGh5X2RlYnVnX3JlbmRlcl9hYWJiICcgK1xuICAgICAgJ3BoeV9kZWJ1Z19yZW5kZXJfY29sbGlzaW9uX3BhaXJzIHBoeV9kZWJ1Z19yZW5kZXJfY29tcyAnICtcbiAgICAgICdwaHlfZGVidWdfcmVuZGVyX2NvcmVfc2hhcGVzIHBoeV9kZWJ1Z19yZW5kZXJfam9pbnRzICcgK1xuICAgICAgJ3BoeV9kZWJ1Z19yZW5kZXJfb2JiIHBoeV9kZWJ1Z19yZW5kZXJfc2hhcGVzICAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZmxhZ193YXRlciBwaHlfcGFydGljbGVfZmxhZ196b21iaWUgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2ZsYWdfd2FsbCBwaHlfcGFydGljbGVfZmxhZ19zcHJpbmcgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2ZsYWdfZWxhc3RpYyBwaHlfcGFydGljbGVfZmxhZ192aXNjb3VzICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9mbGFnX3Bvd2RlciBwaHlfcGFydGljbGVfZmxhZ190ZW5zaWxlICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9mbGFnX2NvbG91cm1peGluZyBwaHlfcGFydGljbGVfZmxhZ19jb2xvcm1peGluZyAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZ3JvdXBfZmxhZ19zb2xpZCBwaHlfcGFydGljbGVfZ3JvdXBfZmxhZ19yaWdpZCAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZGF0YV9mbGFnX3R5cGVmbGFncyBwaHlfcGFydGljbGVfZGF0YV9mbGFnX3Bvc2l0aW9uICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfdmVsb2NpdHkgcGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvdXIgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvciBwaHlfcGFydGljbGVfZGF0YV9mbGFnX2NhdGVnb3J5ICAnICtcbiAgICAgICdhY2hpZXZlbWVudF9vdXJfaW5mbyBhY2hpZXZlbWVudF9mcmllbmRzX2luZm8gJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfbGVhZGVyYm9hcmRfaW5mbyBhY2hpZXZlbWVudF9hY2hpZXZlbWVudF9pbmZvICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2ZpbHRlcl9hbGxfcGxheWVycyBhY2hpZXZlbWVudF9maWx0ZXJfZnJpZW5kc19vbmx5ICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2ZpbHRlcl9mYXZvcml0ZXNfb25seSAnICtcbiAgICAgICdhY2hpZXZlbWVudF90eXBlX2FjaGlldmVtZW50X2NoYWxsZW5nZSAnICtcbiAgICAgICdhY2hpZXZlbWVudF90eXBlX3Njb3JlX2NoYWxsZW5nZSBhY2hpZXZlbWVudF9waWNfbG9hZGVkICAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X3VpIGFjaGlldmVtZW50X3Nob3dfcHJvZmlsZSAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X2xlYWRlcmJvYXJkIGFjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnQgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfc2hvd19iYW5rIGFjaGlldmVtZW50X3Nob3dfZnJpZW5kX3BpY2tlciAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X3B1cmNoYXNlX3Byb21wdCBuZXR3b3JrX3NvY2tldF90Y3AgJyArXG4gICAgICAnbmV0d29ya19zb2NrZXRfdWRwIG5ldHdvcmtfc29ja2V0X2JsdWV0b290aCBuZXR3b3JrX3R5cGVfY29ubmVjdCAnICtcbiAgICAgICduZXR3b3JrX3R5cGVfZGlzY29ubmVjdCBuZXR3b3JrX3R5cGVfZGF0YSAnICtcbiAgICAgICduZXR3b3JrX3R5cGVfbm9uX2Jsb2NraW5nX2Nvbm5lY3QgbmV0d29ya19jb25maWdfY29ubmVjdF90aW1lb3V0ICcgK1xuICAgICAgJ25ldHdvcmtfY29uZmlnX3VzZV9ub25fYmxvY2tpbmdfc29ja2V0ICcgK1xuICAgICAgJ25ldHdvcmtfY29uZmlnX2VuYWJsZV9yZWxpYWJsZV91ZHAgJyArXG4gICAgICAnbmV0d29ya19jb25maWdfZGlzYWJsZV9yZWxpYWJsZV91ZHAgYnVmZmVyX2ZpeGVkIGJ1ZmZlcl9ncm93ICcgK1xuICAgICAgJ2J1ZmZlcl93cmFwIGJ1ZmZlcl9mYXN0IGJ1ZmZlcl92YnVmZmVyIGJ1ZmZlcl9uZXR3b3JrIGJ1ZmZlcl91OCAnICtcbiAgICAgICdidWZmZXJfczggYnVmZmVyX3UxNiBidWZmZXJfczE2IGJ1ZmZlcl91MzIgYnVmZmVyX3MzMiBidWZmZXJfdTY0ICcgK1xuICAgICAgJ2J1ZmZlcl9mMTYgYnVmZmVyX2YzMiBidWZmZXJfZjY0IGJ1ZmZlcl9ib29sIGJ1ZmZlcl90ZXh0ICcgK1xuICAgICAgJ2J1ZmZlcl9zdHJpbmcgYnVmZmVyX3N1cmZhY2VfY29weSBidWZmZXJfc2Vla19zdGFydCAnICtcbiAgICAgICdidWZmZXJfc2Vla19yZWxhdGl2ZSBidWZmZXJfc2Vla19lbmQgJyArXG4gICAgICAnYnVmZmVyX2dlbmVyYWxlcnJvciBidWZmZXJfb3V0b2ZzcGFjZSBidWZmZXJfb3V0b2Zib3VuZHMgJyArXG4gICAgICAnYnVmZmVyX2ludmFsaWR0eXBlICB0ZXh0X3R5cGUgYnV0dG9uX3R5cGUgaW5wdXRfdHlwZSBBTlNJX0NIQVJTRVQgJyArXG4gICAgICAnREVGQVVMVF9DSEFSU0VUIEVBU1RFVVJPUEVfQ0hBUlNFVCBSVVNTSUFOX0NIQVJTRVQgU1lNQk9MX0NIQVJTRVQgJyArXG4gICAgICAnU0hJRlRKSVNfQ0hBUlNFVCBIQU5HRVVMX0NIQVJTRVQgR0IyMzEyX0NIQVJTRVQgQ0hJTkVTRUJJRzVfQ0hBUlNFVCAnICtcbiAgICAgICdKT0hBQl9DSEFSU0VUIEhFQlJFV19DSEFSU0VUIEFSQUJJQ19DSEFSU0VUIEdSRUVLX0NIQVJTRVQgJyArXG4gICAgICAnVFVSS0lTSF9DSEFSU0VUIFZJRVROQU1FU0VfQ0hBUlNFVCBUSEFJX0NIQVJTRVQgTUFDX0NIQVJTRVQgJyArXG4gICAgICAnQkFMVElDX0NIQVJTRVQgT0VNX0NIQVJTRVQgIGdwX2ZhY2UxIGdwX2ZhY2UyIGdwX2ZhY2UzIGdwX2ZhY2U0ICcgK1xuICAgICAgJ2dwX3Nob3VsZGVybCBncF9zaG91bGRlcnIgZ3Bfc2hvdWxkZXJsYiBncF9zaG91bGRlcnJiIGdwX3NlbGVjdCAnICtcbiAgICAgICdncF9zdGFydCBncF9zdGlja2wgZ3Bfc3RpY2tyIGdwX3BhZHUgZ3BfcGFkZCBncF9wYWRsIGdwX3BhZHIgJyArXG4gICAgICAnZ3BfYXhpc2xoIGdwX2F4aXNsdiBncF9heGlzcmggZ3BfYXhpc3J2IG92X2ZyaWVuZHMgb3ZfY29tbXVuaXR5ICcgK1xuICAgICAgJ292X3BsYXllcnMgb3Zfc2V0dGluZ3Mgb3ZfZ2FtZWdyb3VwIG92X2FjaGlldmVtZW50cyBsYl9zb3J0X25vbmUgJyArXG4gICAgICAnbGJfc29ydF9hc2NlbmRpbmcgbGJfc29ydF9kZXNjZW5kaW5nIGxiX2Rpc3Bfbm9uZSBsYl9kaXNwX251bWVyaWMgJyArXG4gICAgICAnbGJfZGlzcF90aW1lX3NlYyBsYl9kaXNwX3RpbWVfbXMgdWdjX3Jlc3VsdF9zdWNjZXNzICcgK1xuICAgICAgJ3VnY19maWxldHlwZV9jb21tdW5pdHkgdWdjX2ZpbGV0eXBlX21pY3JvdHJhbnMgdWdjX3Zpc2liaWxpdHlfcHVibGljICcgK1xuICAgICAgJ3VnY192aXNpYmlsaXR5X2ZyaWVuZHNfb25seSB1Z2NfdmlzaWJpbGl0eV9wcml2YXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeVZvdGUgdWdjX3F1ZXJ5X1JhbmtlZEJ5UHVibGljYXRpb25EYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9BY2NlcHRlZEZvckdhbWVSYW5rZWRCeUFjY2VwdGFuY2VEYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeVRyZW5kICcgK1xuICAgICAgJ3VnY19xdWVyeV9GYXZvcml0ZWRCeUZyaWVuZHNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZSAnICtcbiAgICAgICd1Z2NfcXVlcnlfQ3JlYXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeU51bVRpbWVzUmVwb3J0ZWQgJyArXG4gICAgICAndWdjX3F1ZXJ5X0NyZWF0ZWRCeUZvbGxvd2VkVXNlcnNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZSAnICtcbiAgICAgICd1Z2NfcXVlcnlfTm90WWV0UmF0ZWQgdWdjX3F1ZXJ5X1JhbmtlZEJ5VG90YWxWb3Rlc0FzYyAnICtcbiAgICAgICd1Z2NfcXVlcnlfUmFua2VkQnlWb3Rlc1VwIHVnY19xdWVyeV9SYW5rZWRCeVRleHRTZWFyY2ggJyArXG4gICAgICAndWdjX3NvcnRvcmRlcl9DcmVhdGlvbk9yZGVyRGVzYyB1Z2Nfc29ydG9yZGVyX0NyZWF0aW9uT3JkZXJBc2MgJyArXG4gICAgICAndWdjX3NvcnRvcmRlcl9UaXRsZUFzYyB1Z2Nfc29ydG9yZGVyX0xhc3RVcGRhdGVkRGVzYyAnICtcbiAgICAgICd1Z2Nfc29ydG9yZGVyX1N1YnNjcmlwdGlvbkRhdGVEZXNjIHVnY19zb3J0b3JkZXJfVm90ZVNjb3JlRGVzYyAnICtcbiAgICAgICd1Z2Nfc29ydG9yZGVyX0Zvck1vZGVyYXRpb24gdWdjX2xpc3RfUHVibGlzaGVkIHVnY19saXN0X1ZvdGVkT24gJyArXG4gICAgICAndWdjX2xpc3RfVm90ZWRVcCB1Z2NfbGlzdF9Wb3RlZERvd24gdWdjX2xpc3RfV2lsbFZvdGVMYXRlciAnICtcbiAgICAgICd1Z2NfbGlzdF9GYXZvcml0ZWQgdWdjX2xpc3RfU3Vic2NyaWJlZCB1Z2NfbGlzdF9Vc2VkT3JQbGF5ZWQgJyArXG4gICAgICAndWdjX2xpc3RfRm9sbG93ZWQgdWdjX21hdGNoX0l0ZW1zIHVnY19tYXRjaF9JdGVtc19NdHggJyArXG4gICAgICAndWdjX21hdGNoX0l0ZW1zX1JlYWR5VG9Vc2UgdWdjX21hdGNoX0NvbGxlY3Rpb25zIHVnY19tYXRjaF9BcnR3b3JrICcgK1xuICAgICAgJ3VnY19tYXRjaF9WaWRlb3MgdWdjX21hdGNoX1NjcmVlbnNob3RzIHVnY19tYXRjaF9BbGxHdWlkZXMgJyArXG4gICAgICAndWdjX21hdGNoX1dlYkd1aWRlcyB1Z2NfbWF0Y2hfSW50ZWdyYXRlZEd1aWRlcyAnICtcbiAgICAgICd1Z2NfbWF0Y2hfVXNhYmxlSW5HYW1lIHVnY19tYXRjaF9Db250cm9sbGVyQmluZGluZ3MgICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9wb3NpdGlvbiB2ZXJ0ZXhfdXNhZ2VfY29sb3VyIHZlcnRleF91c2FnZV9jb2xvciAnICtcbiAgICAgICd2ZXJ0ZXhfdXNhZ2Vfbm9ybWFsIHZlcnRleF91c2FnZV90ZXhjb29yZCB2ZXJ0ZXhfdXNhZ2VfdGV4dGNvb3JkICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9ibGVuZHdlaWdodCB2ZXJ0ZXhfdXNhZ2VfYmxlbmRpbmRpY2VzICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9wc2l6ZSB2ZXJ0ZXhfdXNhZ2VfdGFuZ2VudCB2ZXJ0ZXhfdXNhZ2VfYmlub3JtYWwgJyArXG4gICAgICAndmVydGV4X3VzYWdlX2ZvZyB2ZXJ0ZXhfdXNhZ2VfZGVwdGggdmVydGV4X3VzYWdlX3NhbXBsZSAnICtcbiAgICAgICd2ZXJ0ZXhfdHlwZV9mbG9hdDEgdmVydGV4X3R5cGVfZmxvYXQyIHZlcnRleF90eXBlX2Zsb2F0MyAnICtcbiAgICAgICd2ZXJ0ZXhfdHlwZV9mbG9hdDQgdmVydGV4X3R5cGVfY29sb3VyIHZlcnRleF90eXBlX2NvbG9yICcgK1xuICAgICAgJ3ZlcnRleF90eXBlX3VieXRlNCBsYXllcmVsZW1lbnR0eXBlX3VuZGVmaW5lZCAnICtcbiAgICAgICdsYXllcmVsZW1lbnR0eXBlX2JhY2tncm91bmQgbGF5ZXJlbGVtZW50dHlwZV9pbnN0YW5jZSAnICtcbiAgICAgICdsYXllcmVsZW1lbnR0eXBlX29sZHRpbGVtYXAgbGF5ZXJlbGVtZW50dHlwZV9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJlbGVtZW50dHlwZV90aWxlbWFwIGxheWVyZWxlbWVudHR5cGVfcGFydGljbGVzeXN0ZW0gJyArXG4gICAgICAnbGF5ZXJlbGVtZW50dHlwZV90aWxlIHRpbGVfcm90YXRlIHRpbGVfZmxpcCB0aWxlX21pcnJvciAnICtcbiAgICAgICd0aWxlX2luZGV4X21hc2sga2J2X3R5cGVfZGVmYXVsdCBrYnZfdHlwZV9hc2NpaSBrYnZfdHlwZV91cmwgJyArXG4gICAgICAna2J2X3R5cGVfZW1haWwga2J2X3R5cGVfbnVtYmVycyBrYnZfdHlwZV9waG9uZSBrYnZfdHlwZV9waG9uZV9uYW1lICcgK1xuICAgICAgJ2tidl9yZXR1cm5rZXlfZGVmYXVsdCBrYnZfcmV0dXJua2V5X2dvIGtidl9yZXR1cm5rZXlfZ29vZ2xlICcgK1xuICAgICAgJ2tidl9yZXR1cm5rZXlfam9pbiBrYnZfcmV0dXJua2V5X25leHQga2J2X3JldHVybmtleV9yb3V0ZSAnICtcbiAgICAgICdrYnZfcmV0dXJua2V5X3NlYXJjaCBrYnZfcmV0dXJua2V5X3NlbmQga2J2X3JldHVybmtleV95YWhvbyAnICtcbiAgICAgICdrYnZfcmV0dXJua2V5X2RvbmUga2J2X3JldHVybmtleV9jb250aW51ZSBrYnZfcmV0dXJua2V5X2VtZXJnZW5jeSAnICtcbiAgICAgICdrYnZfYXV0b2NhcGl0YWxpemVfbm9uZSBrYnZfYXV0b2NhcGl0YWxpemVfd29yZHMgJyArXG4gICAgICAna2J2X2F1dG9jYXBpdGFsaXplX3NlbnRlbmNlcyBrYnZfYXV0b2NhcGl0YWxpemVfY2hhcmFjdGVycycsXG4gICAgc3ltYm9sOiAnYXJndW1lbnRfcmVsYXRpdmUgYXJndW1lbnQgYXJndW1lbnQwIGFyZ3VtZW50MSBhcmd1bWVudDIgJyArXG4gICAgICAnYXJndW1lbnQzIGFyZ3VtZW50NCBhcmd1bWVudDUgYXJndW1lbnQ2IGFyZ3VtZW50NyBhcmd1bWVudDggJyArXG4gICAgICAnYXJndW1lbnQ5IGFyZ3VtZW50MTAgYXJndW1lbnQxMSBhcmd1bWVudDEyIGFyZ3VtZW50MTMgYXJndW1lbnQxNCAnICtcbiAgICAgICdhcmd1bWVudDE1IGFyZ3VtZW50X2NvdW50IHh8MCB5fDAgeHByZXZpb3VzIHlwcmV2aW91cyB4c3RhcnQgeXN0YXJ0ICcgK1xuICAgICAgJ2hzcGVlZCB2c3BlZWQgZGlyZWN0aW9uIHNwZWVkIGZyaWN0aW9uIGdyYXZpdHkgZ3Jhdml0eV9kaXJlY3Rpb24gJyArXG4gICAgICAncGF0aF9pbmRleCBwYXRoX3Bvc2l0aW9uIHBhdGhfcG9zaXRpb25wcmV2aW91cyBwYXRoX3NwZWVkICcgK1xuICAgICAgJ3BhdGhfc2NhbGUgcGF0aF9vcmllbnRhdGlvbiBwYXRoX2VuZGFjdGlvbiBvYmplY3RfaW5kZXggaWQgc29saWQgJyArXG4gICAgICAncGVyc2lzdGVudCBtYXNrX2luZGV4IGluc3RhbmNlX2NvdW50IGluc3RhbmNlX2lkIHJvb21fc3BlZWQgZnBzICcgK1xuICAgICAgJ2Zwc19yZWFsIGN1cnJlbnRfdGltZSBjdXJyZW50X3llYXIgY3VycmVudF9tb250aCBjdXJyZW50X2RheSAnICtcbiAgICAgICdjdXJyZW50X3dlZWtkYXkgY3VycmVudF9ob3VyIGN1cnJlbnRfbWludXRlIGN1cnJlbnRfc2Vjb25kIGFsYXJtICcgK1xuICAgICAgJ3RpbWVsaW5lX2luZGV4IHRpbWVsaW5lX3Bvc2l0aW9uIHRpbWVsaW5lX3NwZWVkIHRpbWVsaW5lX3J1bm5pbmcgJyArXG4gICAgICAndGltZWxpbmVfbG9vcCByb29tIHJvb21fZmlyc3Qgcm9vbV9sYXN0IHJvb21fd2lkdGggcm9vbV9oZWlnaHQgJyArXG4gICAgICAncm9vbV9jYXB0aW9uIHJvb21fcGVyc2lzdGVudCBzY29yZSBsaXZlcyBoZWFsdGggc2hvd19zY29yZSAnICtcbiAgICAgICdzaG93X2xpdmVzIHNob3dfaGVhbHRoIGNhcHRpb25fc2NvcmUgY2FwdGlvbl9saXZlcyBjYXB0aW9uX2hlYWx0aCAnICtcbiAgICAgICdldmVudF90eXBlIGV2ZW50X251bWJlciBldmVudF9vYmplY3QgZXZlbnRfYWN0aW9uICcgK1xuICAgICAgJ2FwcGxpY2F0aW9uX3N1cmZhY2UgZ2FtZW1ha2VyX3BybyBnYW1lbWFrZXJfcmVnaXN0ZXJlZCAnICtcbiAgICAgICdnYW1lbWFrZXJfdmVyc2lvbiBlcnJvcl9vY2N1cnJlZCBlcnJvcl9sYXN0IGRlYnVnX21vZGUgJyArXG4gICAgICAna2V5Ym9hcmRfa2V5IGtleWJvYXJkX2xhc3RrZXkga2V5Ym9hcmRfbGFzdGNoYXIga2V5Ym9hcmRfc3RyaW5nICcgK1xuICAgICAgJ21vdXNlX3ggbW91c2VfeSBtb3VzZV9idXR0b24gbW91c2VfbGFzdGJ1dHRvbiBjdXJzb3Jfc3ByaXRlICcgK1xuICAgICAgJ3Zpc2libGUgc3ByaXRlX2luZGV4IHNwcml0ZV93aWR0aCBzcHJpdGVfaGVpZ2h0IHNwcml0ZV94b2Zmc2V0ICcgK1xuICAgICAgJ3Nwcml0ZV95b2Zmc2V0IGltYWdlX251bWJlciBpbWFnZV9pbmRleCBpbWFnZV9zcGVlZCBkZXB0aCAnICtcbiAgICAgICdpbWFnZV94c2NhbGUgaW1hZ2VfeXNjYWxlIGltYWdlX2FuZ2xlIGltYWdlX2FscGhhIGltYWdlX2JsZW5kICcgK1xuICAgICAgJ2Jib3hfbGVmdCBiYm94X3JpZ2h0IGJib3hfdG9wIGJib3hfYm90dG9tIGxheWVyIGJhY2tncm91bmRfY29sb3VyICAnICtcbiAgICAgICdiYWNrZ3JvdW5kX3Nob3djb2xvdXIgYmFja2dyb3VuZF9jb2xvciBiYWNrZ3JvdW5kX3Nob3djb2xvciAnICtcbiAgICAgICd2aWV3X2VuYWJsZWQgdmlld19jdXJyZW50IHZpZXdfdmlzaWJsZSB2aWV3X3h2aWV3IHZpZXdfeXZpZXcgJyArXG4gICAgICAndmlld193dmlldyB2aWV3X2h2aWV3IHZpZXdfeHBvcnQgdmlld195cG9ydCB2aWV3X3dwb3J0IHZpZXdfaHBvcnQgJyArXG4gICAgICAndmlld19hbmdsZSB2aWV3X2hib3JkZXIgdmlld192Ym9yZGVyIHZpZXdfaHNwZWVkIHZpZXdfdnNwZWVkICcgK1xuICAgICAgJ3ZpZXdfb2JqZWN0IHZpZXdfc3VyZmFjZV9pZCB2aWV3X2NhbWVyYSBnYW1lX2lkIGdhbWVfZGlzcGxheV9uYW1lICcgK1xuICAgICAgJ2dhbWVfcHJvamVjdF9uYW1lIGdhbWVfc2F2ZV9pZCB3b3JraW5nX2RpcmVjdG9yeSB0ZW1wX2RpcmVjdG9yeSAnICtcbiAgICAgICdwcm9ncmFtX2RpcmVjdG9yeSBicm93c2VyX3dpZHRoIGJyb3dzZXJfaGVpZ2h0IG9zX3R5cGUgb3NfZGV2aWNlICcgK1xuICAgICAgJ29zX2Jyb3dzZXIgb3NfdmVyc2lvbiBkaXNwbGF5X2FhIGFzeW5jX2xvYWQgZGVsdGFfdGltZSAnICtcbiAgICAgICd3ZWJnbF9lbmFibGVkIGV2ZW50X2RhdGEgaWFwX2RhdGEgcGh5X3JvdGF0aW9uIHBoeV9wb3NpdGlvbl94ICcgK1xuICAgICAgJ3BoeV9wb3NpdGlvbl95IHBoeV9hbmd1bGFyX3ZlbG9jaXR5IHBoeV9saW5lYXJfdmVsb2NpdHlfeCAnICtcbiAgICAgICdwaHlfbGluZWFyX3ZlbG9jaXR5X3kgcGh5X3NwZWVkX3ggcGh5X3NwZWVkX3kgcGh5X3NwZWVkICcgK1xuICAgICAgJ3BoeV9hbmd1bGFyX2RhbXBpbmcgcGh5X2xpbmVhcl9kYW1waW5nIHBoeV9idWxsZXQgJyArXG4gICAgICAncGh5X2ZpeGVkX3JvdGF0aW9uIHBoeV9hY3RpdmUgcGh5X21hc3MgcGh5X2luZXJ0aWEgcGh5X2NvbV94ICcgK1xuICAgICAgJ3BoeV9jb21feSBwaHlfZHluYW1pYyBwaHlfa2luZW1hdGljIHBoeV9zbGVlcGluZyAnICtcbiAgICAgICdwaHlfY29sbGlzaW9uX3BvaW50cyBwaHlfY29sbGlzaW9uX3ggcGh5X2NvbGxpc2lvbl95ICcgK1xuICAgICAgJ3BoeV9jb2xfbm9ybWFsX3ggcGh5X2NvbF9ub3JtYWxfeSBwaHlfcG9zaXRpb25feHByZXZpb3VzICcgK1xuICAgICAgJ3BoeV9wb3NpdGlvbl95cHJldmlvdXMnXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnR01MJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSwgLy8gbGFuZ3VhZ2UgaXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgIGtleXdvcmRzOiBHTUxfS0VZV09SRFMsXG5cbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ21sO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEdvXG5BdXRob3I6IFN0ZXBoYW4gS291bnRzbyBha2EgU3RlcExnIDxzdGVwbGdAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBFdmdlbnkgU3RlcGFuaXNjaGV2IDxpbWJvbGtAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IEdvb2dsZSBnbyBsYW5ndWFnZSAoZ29sYW5nKS4gRm9yIGluZm8gYWJvdXQgbGFuZ3VhZ2VcbldlYnNpdGU6IGh0dHA6Ly9nb2xhbmcub3JnL1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG4qL1xuXG5mdW5jdGlvbiBnbyhobGpzKSB7XG4gIGNvbnN0IEdPX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYnJlYWsgZGVmYXVsdCBmdW5jIGludGVyZmFjZSBzZWxlY3QgY2FzZSBtYXAgc3RydWN0IGNoYW4gZWxzZSBnb3RvIHBhY2thZ2Ugc3dpdGNoICcgK1xuICAgICAgJ2NvbnN0IGZhbGx0aHJvdWdoIGlmIHJhbmdlIHR5cGUgY29udGludWUgZm9yIGltcG9ydCByZXR1cm4gdmFyIGdvIGRlZmVyICcgK1xuICAgICAgJ2Jvb2wgYnl0ZSBjb21wbGV4NjQgY29tcGxleDEyOCBmbG9hdDMyIGZsb2F0NjQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCBzdHJpbmcgdWludDggJyArXG4gICAgICAndWludDE2IHVpbnQzMiB1aW50NjQgaW50IHVpbnQgdWludHB0ciBydW5lJyxcbiAgICBsaXRlcmFsOlxuICAgICAgICd0cnVlIGZhbHNlIGlvdGEgbmlsJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUnXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dvJyxcbiAgICBhbGlhc2VzOiBbJ2dvbGFuZyddLFxuICAgIGtleXdvcmRzOiBHT19LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgICAgICBlbmQ6ICdgJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdbaV0nLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86PS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLFxuICAgICAgICBlbmQ6ICdcXFxccyooXFxcXHt8JCknLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBHT19LRVlXT1JEUyxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bXCInXS9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ287XG4iLAogICAgIi8qXG5MYW5ndWFnZTogR29sb1xuQXV0aG9yOiBQaGlsaXBwZSBDaGFycmllcmUgPHBoLmNoYXJyaWVyZUBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogYSBsaWdodHdlaWdodCBkeW5hbWljIGxhbmd1YWdlIGZvciB0aGUgSlZNXG5XZWJzaXRlOiBodHRwOi8vZ29sby1sYW5nLm9yZy9cbiovXG5cbmZ1bmN0aW9uIGdvbG8oaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdHb2xvJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgICAncHJpbnRsbiByZWFkbG4gcHJpbnQgaW1wb3J0IG1vZHVsZSBmdW5jdGlvbiBsb2NhbCByZXR1cm4gbGV0IHZhciAnICtcbiAgICAgICAgICAnd2hpbGUgZm9yIGZvcmVhY2ggdGltZXMgaW4gY2FzZSB3aGVuIG1hdGNoIHdpdGggYnJlYWsgY29udGludWUgJyArXG4gICAgICAgICAgJ2F1Z21lbnQgYXVnbWVudGF0aW9uIGVhY2ggZmluZCBmaWx0ZXIgcmVkdWNlICcgK1xuICAgICAgICAgICdpZiB0aGVuIGVsc2Ugb3RoZXJ3aXNlIHRyeSBjYXRjaCBmaW5hbGx5IHJhaXNlIHRocm93IG9ySWZOdWxsICcgK1xuICAgICAgICAgICdEeW5hbWljT2JqZWN0fDEwIER5bmFtaWNWYXJpYWJsZSBzdHJ1Y3QgT2JzZXJ2YWJsZSBtYXAgc2V0IHZlY3RvciBsaXN0IGFycmF5JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ29sbztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBHcmFkbGVcbkRlc2NyaXB0aW9uOiBHcmFkbGUgaXMgYW4gb3Blbi1zb3VyY2UgYnVpbGQgYXV0b21hdGlvbiB0b29sIGZvY3VzZWQgb24gZmxleGliaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuV2Vic2l0ZTogaHR0cHM6Ly9ncmFkbGUub3JnXG5BdXRob3I6IERhbWlhbiBNZWUgPG1lZS5kYW1pYW5AZ21haWwuY29tPlxuKi9cblxuZnVuY3Rpb24gZ3JhZGxlKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnR3JhZGxlJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAndGFzayBwcm9qZWN0IGFsbHByb2plY3RzIHN1YnByb2plY3RzIGFydGlmYWN0cyBidWlsZHNjcmlwdCBjb25maWd1cmF0aW9ucyAnICtcbiAgICAgICAgJ2RlcGVuZGVuY2llcyByZXBvc2l0b3JpZXMgc291cmNlU2V0cyBkZXNjcmlwdGlvbiBkZWxldGUgZnJvbSBpbnRvIGluY2x1ZGUgJyArXG4gICAgICAgICdleGNsdWRlIHNvdXJjZSBjbGFzc3BhdGggZGVzdGluYXRpb25EaXIgaW5jbHVkZXMgb3B0aW9ucyBzb3VyY2VDb21wYXRpYmlsaXR5ICcgK1xuICAgICAgICAndGFyZ2V0Q29tcGF0aWJpbGl0eSBncm91cCBmbGF0RGlyIGRvTGFzdCBkb0ZpcnN0IGZsYXR0ZW4gdG9kaXIgZnJvbWRpciBhbnQgJyArXG4gICAgICAgICdkZWYgYWJzdHJhY3QgYnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWZhdWx0IGRvIGVsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5ICcgK1xuICAgICAgICAnZm9yIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBuYXRpdmUgbmV3IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZXR1cm4gc3RhdGljICcgK1xuICAgICAgICAnc3dpdGNoIHN5bmNocm9uaXplZCB0aHJvdyB0aHJvd3MgdHJhbnNpZW50IHRyeSB2b2xhdGlsZSB3aGlsZSBzdHJpY3RmcCBwYWNrYWdlICcgK1xuICAgICAgICAnaW1wb3J0IGZhbHNlIG51bGwgc3VwZXIgdGhpcyB0cnVlIGFudGxydGFzayBjaGVja3N0eWxlIGNvZGVuYXJjIGNvcHkgYm9vbGVhbiAnICtcbiAgICAgICAgJ2J5dGUgY2hhciBjbGFzcyBkb3VibGUgZmxvYXQgaW50IGludGVyZmFjZSBsb25nIHNob3J0IHZvaWQgY29tcGlsZSBydW5UaW1lICcgK1xuICAgICAgICAnZmlsZSBmaWxlVHJlZSBhYnMgYW55IGFwcGVuZCBhc0xpc3QgYXNXcml0YWJsZSBjYWxsIGNvbGxlY3QgY29tcGFyZVRvIGNvdW50ICcgK1xuICAgICAgICAnZGl2IGR1bXAgZWFjaCBlYWNoQnl0ZSBlYWNoRmlsZSBlYWNoTGluZSBldmVyeSBmaW5kIGZpbmRBbGwgZmxhdHRlbiBnZXRBdCAnICtcbiAgICAgICAgJ2dldEVyciBnZXRJbiBnZXRPdXQgZ2V0VGV4dCBncmVwIGltbXV0YWJsZSBpbmplY3QgaW5zcGVjdCBpbnRlcnNlY3QgaW52b2tlTWV0aG9kcyAnICtcbiAgICAgICAgJ2lzQ2FzZSBqb2luIGxlZnRTaGlmdCBtaW51cyBtdWx0aXBseSBuZXdJbnB1dFN0cmVhbSBuZXdPdXRwdXRTdHJlYW0gbmV3UHJpbnRXcml0ZXIgJyArXG4gICAgICAgICduZXdSZWFkZXIgbmV3V3JpdGVyIG5leHQgcGx1cyBwb3AgcG93ZXIgcHJldmlvdXMgcHJpbnQgcHJpbnRsbiBwdXNoIHB1dEF0IHJlYWQgJyArXG4gICAgICAgICdyZWFkQnl0ZXMgcmVhZExpbmVzIHJldmVyc2UgcmV2ZXJzZUVhY2ggcm91bmQgc2l6ZSBzb3J0IHNwbGl0RWFjaExpbmUgc3RlcCBzdWJNYXAgJyArXG4gICAgICAgICd0aW1lcyB0b0ludGVnZXIgdG9MaXN0IHRva2VuaXplIHVwdG8gd2FpdEZvck9yS2lsbCB3aXRoUHJpbnRXcml0ZXIgd2l0aFJlYWRlciAnICtcbiAgICAgICAgJ3dpdGhTdHJlYW0gd2l0aFdyaXRlciB3aXRoV3JpdGVyQXBwZW5kIHdyaXRlIHdyaXRlTGluZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFXG5cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ3JhZGxlO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rYWhlYWQocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD89JywgcmUsICcpJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG4gTGFuZ3VhZ2U6IEdyb292eVxuIEF1dGhvcjogR3VpbGxhdW1lIExhZm9yZ2UgPGdsYWZvcmdlQGdtYWlsLmNvbT5cbiBEZXNjcmlwdGlvbjogR3Jvb3Z5IHByb2dyYW1taW5nIGxhbmd1YWdlIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGZyb20gVnNldm9sb2QncyBKYXZhIG1vZGVcbiBXZWJzaXRlOiBodHRwczovL2dyb292eS1sYW5nLm9yZ1xuICovXG5cbmZ1bmN0aW9uIHZhcmlhbnRzKHZhcmlhbnRzLCBvYmogPSB7fSkge1xuICBvYmoudmFyaWFudHMgPSB2YXJpYW50cztcbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZ3Jvb3Z5KGhsanMpIHtcbiAgY29uc3QgSURFTlRfUkUgPSAnW0EtWmEtejAtOV8kXSsnO1xuICBjb25zdCBDT01NRU5UID0gdmFyaWFudHMoW1xuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAnXFxcXCovJyxcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVhdCB1cCBAJ3MgaW4gZW1haWxzIHRvIHByZXZlbnQgdGhlbSB0byBiZSByZWNvZ25pemVkIGFzIGRvY3RhZ3NcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3K0AvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIClcbiAgXSk7XG4gIGNvbnN0IFJFR0VYUCA9IHtcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGJlZ2luOiAvfj9cXC9bXlxcL1xcbl0rXFwvLyxcbiAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICB9O1xuICBjb25zdCBOVU1CRVIgPSB2YXJpYW50cyhbXG4gICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gIF0pO1xuICBjb25zdCBTVFJJTkcgPSB2YXJpYW50cyhbXG4gICAge1xuICAgICAgYmVnaW46IC9cIlwiXCIvLFxuICAgICAgZW5kOiAvXCJcIlwiL1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC8nJycvLFxuICAgICAgZW5kOiAvJycnL1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IFwiXFxcXCQvXCIsXG4gICAgICBlbmQ6IFwiL1xcXFwkXCIsXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfSxcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICBdLFxuICB7XG4gICAgY2xhc3NOYW1lOiBcInN0cmluZ1wiXG4gIH1cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdHcm9vdnknLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBidWlsdF9pbjogJ3RoaXMgc3VwZXInLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbnVsbCcsXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2J5dGUgc2hvcnQgY2hhciBpbnQgbG9uZyBib29sZWFuIGZsb2F0IGRvdWJsZSB2b2lkICcgK1xuICAgICAgICAgICAgLy8gZ3Jvb3Z5IHNwZWNpZmljIGtleXdvcmRzXG4gICAgICAgICAgICAnZGVmIGFzIGluIGFzc2VydCB0cmFpdCAnICtcbiAgICAgICAgICAgIC8vIGNvbW1vbiBrZXl3b3JkcyB3aXRoIEphdmFcbiAgICAgICAgICAgICdhYnN0cmFjdCBzdGF0aWMgdm9sYXRpbGUgdHJhbnNpZW50IHB1YmxpYyBwcml2YXRlIHByb3RlY3RlZCBzeW5jaHJvbml6ZWQgZmluYWwgJyArXG4gICAgICAgICAgICAnY2xhc3MgaW50ZXJmYWNlIGVudW0gaWYgZWxzZSBmb3Igd2hpbGUgc3dpdGNoIGNhc2UgYnJlYWsgZGVmYXVsdCBjb250aW51ZSAnICtcbiAgICAgICAgICAgICd0aHJvdyB0aHJvd3MgdHJ5IGNhdGNoIGZpbmFsbHkgaW1wbGVtZW50cyBleHRlbmRzIG5ldyBpbXBvcnQgcGFja2FnZSByZXR1cm4gaW5zdGFuY2VvZidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlNIRUJBTkcoe1xuICAgICAgICBiaW5hcnk6IFwiZ3Jvb3Z5XCIsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0pLFxuICAgICAgQ09NTUVOVCxcbiAgICAgIFNUUklORyxcbiAgICAgIFJFR0VYUCxcbiAgICAgIE5VTUJFUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIHRyYWl0IGVudW0nLFxuICAgICAgICBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAnOicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGhpZ2hsaWdodCBtYXAga2V5cyBhbmQgbmFtZWQgcGFyYW1ldGVycyBhcyBhdHRyc1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgYmVnaW46IElERU5UX1JFICsgJ1sgXFx0XSo6JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBjYXRjaCBtaWRkbGUgZWxlbWVudCBvZiB0aGUgdGVybmFyeSBvcGVyYXRvclxuICAgICAgICAvLyB0byBhdm9pZCBoaWdobGlnaHQgaXQgYXMgYSBsYWJlbCwgbmFtZWQgcGFyYW1ldGVyLCBvciBtYXAga2V5XG4gICAgICAgIGJlZ2luOiAvXFw/LyxcbiAgICAgICAgZW5kOiAvOi8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDT01NRU5ULFxuICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICBSRUdFWFAsXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgICdzZWxmJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBoaWdobGlnaHQgbGFiZWxlZCBzdGF0ZW1lbnRzXG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXlsgXFx0XSonICsgbG9va2FoZWFkKElERU5UX1JFICsgJzonKSxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6IElERU5UX1JFICsgJzonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jfDxcXC8vXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ3Jvb3Z5O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEhBTUxcblJlcXVpcmVzOiBydWJ5LmpzXG5BdXRob3I6IERhbiBBbGxlbiA8ZGFuLmouYWxsZW5AZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cDovL2hhbWwuaW5mb1xuQ2F0ZWdvcnk6IHRlbXBsYXRlXG4qL1xuXG4vLyBUT0RPIHN1cHBvcnQgZmlsdGVyIHRhZ3MgbGlrZSA6amF2YXNjcmlwdCwgc3VwcG9ydCBpbmxpbmUgSFRNTFxuZnVuY3Rpb24gaGFtbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0hBTUwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiEhISggKDV8MVxcXFwuMXxTdHJpY3R8RnJhbWVzZXR8QmFzaWN8TW9iaWxlfFJERmF8WE1MXFxcXGIuKikpPyQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gRklYTUUgdGhlc2UgY29tbWVudHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3BhbiBpbmRlbnRlZCBsaW5lc1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXlxcXFxzKighPSN8PSN8LSN8LykuKiQnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyooLXw9fCE9KSg/ISMpJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFxcXG4nLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAncnVieSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqJScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLFxuICAgICAgICAgICAgYmVnaW46ICcjW1xcXFx3LV0rJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcLltcXFxcdy1dKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFx7XFxzKi8sXG4gICAgICAgICAgICBlbmQ6IC9cXHMqXFx9LyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJzpcXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgICAgICAgZW5kOiAnLFxcXFxzKycsXG4gICAgICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnOlxcXFx3KydcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcKFxcXFxzKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccypcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrXFxcXHMqPScsXG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXHMrJyxcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcdysnLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqWz1+XVxcXFxzKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvI1xcey8sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogL1xcfS8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5J1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhbWw7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGFueU51bWJlck9mVGltZXMocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKCcsIHJlLCAnKSonKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBvcHRpb25hbChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoJywgcmUsICcpPycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEFueSBvZiB0aGUgcGFzc2VkIGV4cHJlc3NzaW9ucyBtYXkgbWF0Y2hcbiAqXG4gKiBDcmVhdGVzIGEgaHVnZSB0aGlzIHwgdGhpcyB8IHRoYXQgfCB0aGF0IG1hdGNoXG4gKiBAcGFyYW0geyhSZWdFeHAgfCBzdHJpbmcpW10gfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlaXRoZXIoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSAnKCcgKyBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwifFwiKSArIFwiKVwiO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEhhbmRsZWJhcnNcblJlcXVpcmVzOiB4bWwuanNcbkF1dGhvcjogUm9iaW4gV2FyZCA8cm9iaW4ud2FyZEBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogTWF0Y2hlciBmb3IgSGFuZGxlYmFycyBhcyB3ZWxsIGFzIEVtYmVySlMgYWRkaXRpb25zLlxuV2Vic2l0ZTogaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tXG5DYXRlZ29yeTogdGVtcGxhdGVcbiovXG5cbmZ1bmN0aW9uIGhhbmRsZWJhcnMoaGxqcykge1xuICBjb25zdCBCVUlMVF9JTlMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6IFtcbiAgICAgICdhY3Rpb24nLFxuICAgICAgJ2JpbmRhdHRyJyxcbiAgICAgICdjb2xsZWN0aW9uJyxcbiAgICAgICdjb21wb25lbnQnLFxuICAgICAgJ2NvbmNhdCcsXG4gICAgICAnZGVidWdnZXInLFxuICAgICAgJ2VhY2gnLFxuICAgICAgJ2VhY2gtaW4nLFxuICAgICAgJ2dldCcsXG4gICAgICAnaGFzaCcsXG4gICAgICAnaWYnLFxuICAgICAgJ2luJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICAnbGluay10bycsXG4gICAgICAnbG9jJyxcbiAgICAgICdsb2cnLFxuICAgICAgJ2xvb2t1cCcsXG4gICAgICAnbXV0JyxcbiAgICAgICdvdXRsZXQnLFxuICAgICAgJ3BhcnRpYWwnLFxuICAgICAgJ3F1ZXJ5LXBhcmFtcycsXG4gICAgICAncmVuZGVyJyxcbiAgICAgICd0ZW1wbGF0ZScsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3VuYm91bmQnLFxuICAgICAgJ3VubGVzcycsXG4gICAgICAndmlldycsXG4gICAgICAnd2l0aCcsXG4gICAgICAneWllbGQnXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IExJVEVSQUxTID0ge1xuICAgIGxpdGVyYWw6IFtcbiAgICAgICd0cnVlJyxcbiAgICAgICdmYWxzZScsXG4gICAgICAndW5kZWZpbmVkJyxcbiAgICAgICdudWxsJ1xuICAgIF1cbiAgfTtcblxuICAvLyBhcyBkZWZpbmVkIGluIGh0dHBzOi8vaGFuZGxlYmFyc2pzLmNvbS9ndWlkZS9leHByZXNzaW9ucy5odG1sI2xpdGVyYWwtc2VnbWVudHNcbiAgLy8gdGhpcyByZWdleCBtYXRjaGVzIGxpdGVyYWwgc2VnbWVudHMgbGlrZSAnIGFiYyAnIG9yIFsgYWJjIF0gYXMgd2VsbCBhcyBoZWxwZXJzIGFuZCBwYXRoc1xuICAvLyBsaWtlIGEvYiwgLi9hYmMvY2RlLCBhbmQgYWJjLmJjZFxuXG4gIGNvbnN0IERPVUJMRV9RVU9URURfSURfUkVHRVggPSAvXCJcInxcIlteXCJdK1wiLztcbiAgY29uc3QgU0lOR0xFX1FVT1RFRF9JRF9SRUdFWCA9IC8nJ3wnW14nXSsnLztcbiAgY29uc3QgQlJBQ0tFVF9RVU9URURfSURfUkVHRVggPSAvXFxbXFxdfFxcW1teXFxdXStcXF0vO1xuICBjb25zdCBQTEFJTl9JRF9SRUdFWCA9IC9bXlxccyFcIiMlJicoKSorLC5cXC87PD0+QFxcW1xcXFxcXF1eYHt8fX5dKy87XG4gIGNvbnN0IFBBVEhfREVMSU1JVEVSX1JFR0VYID0gLyhcXC58XFwvKS87XG4gIGNvbnN0IEFOWV9JRCA9IGVpdGhlcihcbiAgICBET1VCTEVfUVVPVEVEX0lEX1JFR0VYLFxuICAgIFNJTkdMRV9RVU9URURfSURfUkVHRVgsXG4gICAgQlJBQ0tFVF9RVU9URURfSURfUkVHRVgsXG4gICAgUExBSU5fSURfUkVHRVhcbiAgICApO1xuXG4gIGNvbnN0IElERU5USUZJRVJfUkVHRVggPSBjb25jYXQoXG4gICAgb3B0aW9uYWwoL1xcLnxcXC5cXC98XFwvLyksIC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhcbiAgICBBTllfSUQsXG4gICAgYW55TnVtYmVyT2ZUaW1lcyhjb25jYXQoXG4gICAgICBQQVRIX0RFTElNSVRFUl9SRUdFWCxcbiAgICAgIEFOWV9JRFxuICAgICkpXG4gICk7XG5cbiAgLy8gaWRlbnRpZmllciBmb2xsb3dlZCBieSBhIGVxdWFsLXNpZ24gKHdpdGhvdXQgdGhlIGVxdWFsIHNpZ24pXG4gIGNvbnN0IEhBU0hfUEFSQU1fUkVHRVggPSBjb25jYXQoXG4gICAgJygnLFxuICAgIEJSQUNLRVRfUVVPVEVEX0lEX1JFR0VYLCAnfCcsXG4gICAgUExBSU5fSURfUkVHRVgsXG4gICAgJykoPz09KSdcbiAgKTtcblxuICBjb25zdCBIRUxQRVJfTkFNRV9PUl9QQVRIX0VYUFJFU1NJT04gPSB7XG4gICAgYmVnaW46IElERU5USUZJRVJfUkVHRVgsXG4gICAgbGV4ZW1lczogL1tcXHcuXFwvXSsvXG4gIH07XG5cbiAgY29uc3QgSEVMUEVSX1BBUkFNRVRFUiA9IGhsanMuaW5oZXJpdChIRUxQRVJfTkFNRV9PUl9QQVRIX0VYUFJFU1NJT04sIHtcbiAgICBrZXl3b3JkczogTElURVJBTFNcbiAgfSk7XG5cbiAgY29uc3QgU1VCX0VYUFJFU1NJT04gPSB7XG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS9cbiAgICAvLyB0aGUgXCJjb250YWluc1wiIGlzIGFkZGVkIGJlbG93IHdoZW4gYWxsIG5lY2Vzc2FyeSBzdWItbW9kZXMgYXJlIGRlZmluZWRcbiAgfTtcblxuICBjb25zdCBIQVNIID0ge1xuICAgIC8vIGZrYSBcImF0dHJpYnV0ZS1hc3NpZ25tZW50XCIsIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm0gJ2tleT12YWx1ZSdcbiAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICBiZWdpbjogSEFTSF9QQVJBTV9SRUdFWCxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgc3RhcnRzOiB7XG4gICAgICBiZWdpbjogLz0vLFxuICAgICAgZW5kOiAvPS8sXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIEhFTFBFUl9QQVJBTUVURVIsXG4gICAgICAgICAgU1VCX0VYUFJFU1NJT05cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBCTE9DS19QQVJBTVMgPSB7XG4gICAgLy8gcGFyYW1ldGVycyBvZiB0aGUgZm9ybSAne3sjd2l0aCB4IGFzIHwgeSB8fX0uLi57ey93aXRofX0nXG4gICAgYmVnaW46IC9hc1xccytcXHwvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnYXMnXG4gICAgfSxcbiAgICBlbmQ6IC9cXHwvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIC8vIGRlZmluZSBzdWItbW9kZSBpbiBvcmRlciB0byBwcmV2ZW50IGhpZ2hsaWdodGluZyBvZiBibG9jay1wYXJhbWV0ZXIgbmFtZWQgXCJhc1wiXG4gICAgICAgIGJlZ2luOiAvXFx3Ky9cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgSEVMUEVSX1BBUkFNRVRFUlMgPSB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgQkxPQ0tfUEFSQU1TLFxuICAgICAgSEFTSCxcbiAgICAgIEhFTFBFUl9QQVJBTUVURVIsXG4gICAgICBTVUJfRVhQUkVTU0lPTlxuICAgIF0sXG4gICAgcmV0dXJuRW5kOiB0cnVlXG4gICAgLy8gdGhlIHByb3BlcnR5IFwiZW5kXCIgaXMgZGVmaW5lZCB0aHJvdWdoIGluaGVyaXRhbmNlIHdoZW4gdGhlIG1vZGUgaXMgdXNlZC4gSWYgZGVwZW5kc1xuICAgIC8vIG9uIHRoZSBzdXJyb3VuZGluZyBtb2RlLCBidXQgXCJlbmRzV2l0aFBhcmVudFwiIGRvZXMgbm90IHdvcmsgaGVyZSAoaS5lLiBpdCBpbmNsdWRlcyB0aGVcbiAgICAvLyBlbmQtdG9rZW4gb2YgdGhlIHN1cnJvdW5kaW5nIG1vZGUpXG4gIH07XG5cbiAgY29uc3QgU1VCX0VYUFJFU1NJT05fQ09OVEVOVFMgPSBobGpzLmluaGVyaXQoSEVMUEVSX05BTUVfT1JfUEFUSF9FWFBSRVNTSU9OLCB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICBzdGFydHM6IGhsanMuaW5oZXJpdChIRUxQRVJfUEFSQU1FVEVSUywge1xuICAgICAgZW5kOiAvXFwpL1xuICAgIH0pXG4gIH0pO1xuXG4gIFNVQl9FWFBSRVNTSU9OLmNvbnRhaW5zID0gW1NVQl9FWFBSRVNTSU9OX0NPTlRFTlRTXTtcblxuICBjb25zdCBPUEVOSU5HX0JMT0NLX01VU1RBQ0hFX0NPTlRFTlRTID0gaGxqcy5pbmhlcml0KEhFTFBFUl9OQU1FX09SX1BBVEhfRVhQUkVTU0lPTiwge1xuICAgIGtleXdvcmRzOiBCVUlMVF9JTlMsXG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgc3RhcnRzOiBobGpzLmluaGVyaXQoSEVMUEVSX1BBUkFNRVRFUlMsIHtcbiAgICAgIGVuZDogL1xcfVxcfS9cbiAgICB9KVxuICB9KTtcblxuICBjb25zdCBDTE9TSU5HX0JMT0NLX01VU1RBQ0hFX0NPTlRFTlRTID0gaGxqcy5pbmhlcml0KEhFTFBFUl9OQU1FX09SX1BBVEhfRVhQUkVTU0lPTiwge1xuICAgIGtleXdvcmRzOiBCVUlMVF9JTlMsXG4gICAgY2xhc3NOYW1lOiAnbmFtZSdcbiAgfSk7XG5cbiAgY29uc3QgQkFTSUNfTVVTVEFDSEVfQ09OVEVOVFMgPSBobGpzLmluaGVyaXQoSEVMUEVSX05BTUVfT1JfUEFUSF9FWFBSRVNTSU9OLCB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICBzdGFydHM6IGhsanMuaW5oZXJpdChIRUxQRVJfUEFSQU1FVEVSUywge1xuICAgICAgZW5kOiAvXFx9XFx9L1xuICAgIH0pXG4gIH0pO1xuXG4gIGNvbnN0IEVTQ0FQRV9NVVNUQUNIRV9XSVRIX1BSRUNFRURJTkdfQkFDS1NMQVNIID0ge1xuICAgIGJlZ2luOiAvXFxcXFxce1xcey8sXG4gICAgc2tpcDogdHJ1ZVxuICB9O1xuICBjb25zdCBQUkVWRU5UX0VTQ0FQRV9XSVRIX0FOT1RIRVJfUFJFQ0VFRElOR19CQUNLU0xBU0ggPSB7XG4gICAgYmVnaW46IC9cXFxcXFxcXCg/PVxce1xceykvLFxuICAgIHNraXA6IHRydWVcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdIYW5kbGViYXJzJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnaGJzJyxcbiAgICAgICdodG1sLmhicycsXG4gICAgICAnaHRtbC5oYW5kbGViYXJzJyxcbiAgICAgICdodG1sYmFycydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBFU0NBUEVfTVVTVEFDSEVfV0lUSF9QUkVDRUVESU5HX0JBQ0tTTEFTSCxcbiAgICAgIFBSRVZFTlRfRVNDQVBFX1dJVEhfQU5PVEhFUl9QUkVDRUVESU5HX0JBQ0tTTEFTSCxcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7XFx7IS0tLywgLy0tXFx9XFx9LyksXG4gICAgICBobGpzLkNPTU1FTlQoL1xce1xceyEvLCAvXFx9XFx9LyksXG4gICAgICB7XG4gICAgICAgIC8vIG9wZW4gcmF3IGJsb2NrIFwie3t7e3Jhd319fX0gY29udGVudCBub3QgZXZhbHVhdGVkIHt7e3svcmF3fX19fVwiXG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7XFx7XFx7KD8hXFwvKS8sXG4gICAgICAgIGVuZDogL1xcfVxcfVxcfVxcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbT1BFTklOR19CTE9DS19NVVNUQUNIRV9DT05URU5UU10sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogL1xce1xce1xce1xce1xcLy8sXG4gICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBjbG9zZSByYXcgYmxvY2tcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtcXHtcXHtcXC8vLFxuICAgICAgICBlbmQ6IC9cXH1cXH1cXH1cXH0vLFxuICAgICAgICBjb250YWluczogW0NMT1NJTkdfQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBvcGVuIGJsb2NrIHN0YXRlbWVudFxuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS10YWcnLFxuICAgICAgICBiZWdpbjogL1xce1xceyMvLFxuICAgICAgICBlbmQ6IC9cXH1cXH0vLFxuICAgICAgICBjb250YWluczogW09QRU5JTkdfQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS10YWcnLFxuICAgICAgICBiZWdpbjogL1xce1xceyg/PWVsc2VcXH1cXH0pLyxcbiAgICAgICAgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAga2V5d29yZHM6ICdlbHNlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHsoPz1lbHNlIGlmKS8sXG4gICAgICAgIGVuZDogL1xcfVxcfS8sXG4gICAgICAgIGtleXdvcmRzOiAnZWxzZSBpZidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGNsb3NpbmcgYmxvY2sgc3RhdGVtZW50XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7XFwvLyxcbiAgICAgICAgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtDTE9TSU5HX0JMT0NLX01VU1RBQ0hFX0NPTlRFTlRTXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGVtcGxhdGUgdmFyaWFibGUgb3IgaGVscGVyLWNhbGwgdGhhdCBpcyBOT1QgaHRtbC1lc2NhcGVkXG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtcXHsvLFxuICAgICAgICBlbmQ6IC9cXH1cXH1cXH0vLFxuICAgICAgICBjb250YWluczogW0JBU0lDX01VU1RBQ0hFX0NPTlRFTlRTXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGVtcGxhdGUgdmFyaWFibGUgb3IgaGVscGVyLWNhbGwgdGhhdCBpcyBodG1sLWVzY2FwZWRcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xcey8sXG4gICAgICAgIGVuZDogL1xcfVxcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbQkFTSUNfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhbmRsZWJhcnM7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogSGFza2VsbFxuQXV0aG9yOiBKZXJlbXkgSHVsbCA8c291cmRydW1zQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogWmVuYSBUcmVlcCA8emVuYS50cmVlcEBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5oYXNrZWxsLm9yZ1xuQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbiovXG5cbmZ1bmN0aW9uIGhhc2tlbGwoaGxqcykge1xuICBjb25zdCBDT01NRU5UID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgL1xcey0vLFxuICAgICAgICAvLVxcfS8sXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBQUkFHTUEgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC9cXHstIy8sXG4gICAgZW5kOiAvIy1cXH0vXG4gIH07XG5cbiAgY29uc3QgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnXiMnLFxuICAgIGVuZDogJyQnXG4gIH07XG5cbiAgY29uc3QgQ09OU1RSVUNUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLCAvLyBUT0RPOiBvdGhlciBjb25zdHJ1Y3RvcnMgKGJ1aWxkLWluLCBpbmZpeCkuXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgaWxsZWdhbDogJ1wiJyxcbiAgICBjb250YWluczogW1xuICAgICAgUFJBR01BLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XSooXFxcXCgoXFxcXC5cXFxcLnwsfFxcXFx3KylcXFxcKSk/J1xuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgYmVnaW46ICdbX2Etel1bXFxcXHdcXCddKidcbiAgICAgIH0pLFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcblxuICBjb25zdCBSRUNPUkQgPSB7XG4gICAgYmVnaW46IC9cXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAgY29udGFpbnM6IExJU1QuY29udGFpbnNcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdIYXNrZWxsJyxcbiAgICBhbGlhc2VzOiBbJ2hzJ10sXG4gICAga2V5d29yZHM6XG4gICAgICAnbGV0IGluIGlmIHRoZW4gZWxzZSBjYXNlIG9mIHdoZXJlIGRvIG1vZHVsZSBpbXBvcnQgaGlkaW5nICcgK1xuICAgICAgJ3F1YWxpZmllZCB0eXBlIGRhdGEgbmV3dHlwZSBkZXJpdmluZyBjbGFzcyBpbnN0YW5jZSBhcyBkZWZhdWx0ICcgK1xuICAgICAgJ2luZml4IGluZml4bCBpbmZpeHIgZm9yZWlnbiBleHBvcnQgY2NhbGwgc3RkY2FsbCBjcGx1c3BsdXMgJyArXG4gICAgICAnanZtIGRvdG5ldCBzYWZlIHVuc2FmZSBmYW1pbHkgZm9yYWxsIG1kbyBwcm9jIHJlYycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIFRvcC1sZXZlbCBjb25zdHJ1Y3Rpb25zLlxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbW9kdWxlJyxcbiAgICAgICAgZW5kOiAnd2hlcmUnLFxuICAgICAgICBrZXl3b3JkczogJ21vZHVsZSB3aGVyZScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgTElTVCxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcV1xcXFwufDsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiaW1wb3J0XFxcXGInLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdpbXBvcnQgcXVhbGlmaWVkIGFzIGhpZGluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgTElTVCxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcV1xcXFwufDsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXihcXFxccyopPyhjbGFzc3xpbnN0YW5jZSlcXFxcYicsXG4gICAgICAgIGVuZDogJ3doZXJlJyxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBmYW1pbHkgaW5zdGFuY2Ugd2hlcmUnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgICAgIExJU1QsXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoZGF0YXwobmV3KT90eXBlKVxcXFxiJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnZGF0YSBmYW1pbHkgdHlwZSBuZXd0eXBlIGRlcml2aW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQUkFHTUEsXG4gICAgICAgICAgQ09OU1RSVUNUT1IsXG4gICAgICAgICAgTElTVCxcbiAgICAgICAgICBSRUNPUkQsXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmYXVsdCcsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgICAgIExJU1QsXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5maXggaW5maXhsIGluZml4cicsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGJmb3JlaWduXFxcXGInLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdmb3JlaWduIGltcG9ydCBleHBvcnQgY2NhbGwgc3RkY2FsbCBjcGx1c3BsdXMganZtICcgK1xuICAgICAgICAgICAgICAgICAgJ2RvdG5ldCBzYWZlIHVuc2FmZScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ09OU1RSVUNUT1IsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBDT01NRU5UXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMhXFxcXC91c3JcXFxcL2JpblxcXFwvZW52XFwgcnVuaGFza2VsbCcsXG4gICAgICAgIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgLy8gXCJXaGl0ZXNwYWNlc1wiLlxuICAgICAgUFJBR01BLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuXG4gICAgICAvLyBMaXRlcmFscyBhbmQgbmFtZXMuXG5cbiAgICAgIC8vIFRPRE86IGNoYXJhY3RlcnMuXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgQ09OU1RSVUNUT1IsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgIGJlZ2luOiAnXltfYS16XVtcXFxcd1xcJ10qJ1xuICAgICAgfSksXG4gICAgICBDT01NRU5ULFxuICAgICAgeyAvLyBObyBtYXJrdXAsIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICAgIGJlZ2luOiAnLT58PC0nXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2tlbGw7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogSGF4ZVxuRGVzY3JpcHRpb246IEhheGUgaXMgYW4gb3BlbiBzb3VyY2UgdG9vbGtpdCBiYXNlZCBvbiBhIG1vZGVybiwgaGlnaCBsZXZlbCwgc3RyaWN0bHkgdHlwZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuXG5BdXRob3I6IENocmlzdG9waGVyIEthc3RlciA8aWthc29raUBnbWFpbC5jb20+IChCYXNlZCBvbiB0aGUgYWN0aW9uc2NyaXB0LmpzIGxhbmd1YWdlIGZpbGUgYnkgQWxleGFuZGVyIE15YWR6ZWwpXG5Db250cmlidXRvcnM6IEtlbnRvbiBIYW1hbHVpayA8a2VudG9uaEBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2hheGUub3JnXG4qL1xuXG5mdW5jdGlvbiBoYXhlKGhsanMpIHtcblxuICBjb25zdCBIQVhFX0JBU0lDX1RZUEVTID0gJ0ludCBGbG9hdCBTdHJpbmcgQm9vbCBEeW5hbWljIFZvaWQgQXJyYXkgJztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdIYXhlJyxcbiAgICBhbGlhc2VzOiBbJ2h4J10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdicmVhayBjYXNlIGNhc3QgY2F0Y2ggY29udGludWUgZGVmYXVsdCBkbyBkeW5hbWljIGVsc2UgZW51bSBleHRlcm4gJyArXG4gICAgICAgICAgICAgICAnZm9yIGZ1bmN0aW9uIGhlcmUgaWYgaW1wb3J0IGluIGlubGluZSBuZXZlciBuZXcgb3ZlcnJpZGUgcGFja2FnZSBwcml2YXRlIGdldCBzZXQgJyArXG4gICAgICAgICAgICAgICAncHVibGljIHJldHVybiBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJhY2UgdHJ5IHR5cGVkZWYgdW50eXBlZCB1c2luZyB2YXIgd2hpbGUgJyArXG4gICAgICAgICAgICAgICBIQVhFX0JBU0lDX1RZUEVTLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICd0cmFjZSB0aGlzJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIGludGVycG9sYXRlLWFibGUgc3RyaW5nc1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JywgLy8gaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7JyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFx9J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLCAvLyBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkJyxcbiAgICAgICAgICAgIGVuZDogL1xcV1xcfS9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIC8vIGNvbXBpbGVyIG1ldGFcbiAgICAgICAgYmVnaW46ICdAOicsXG4gICAgICAgIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgLy8gY29tcGlsZXIgY29uZGl0aW9uYWxzXG4gICAgICAgIGJlZ2luOiAnIycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICdtZXRhLWtleXdvcmQnOiAnaWYgZWxzZSBlbHNlaWYgZW5kIGVycm9yJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJywgLy8gZnVuY3Rpb24gdHlwZXNcbiAgICAgICAgYmVnaW46ICc6WyBcXHRdKicsXG4gICAgICAgIGVuZDogJ1teQS1aYS16MC05XyBcXHRcXFxcLT5dJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLCAvLyB0eXBlc1xuICAgICAgICBiZWdpbjogJzpbIFxcdF0qJyxcbiAgICAgICAgZW5kOiAnXFxcXFcnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLCAvLyBpbnN0YW50aWF0aW9uXG4gICAgICAgIGJlZ2luOiAnbmV3IConLFxuICAgICAgICBlbmQ6ICdcXFxcVycsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLCAvLyBlbnVtc1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZW51bScsXG4gICAgICAgIGVuZDogJ1xcXFx7JyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlRJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsIC8vIGFic3RyYWN0c1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnYWJzdHJhY3QnLFxuICAgICAgICBlbmQ6ICdbXFxcXHskXScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46ICdmcm9tICsnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXFcnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ3RvICsnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXFcnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgIF0sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAga2V5d29yZDogJ2Fic3RyYWN0IGZyb20gdG8nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJywgLy8gY2xhc3Nlc1xuICAgICAgICBiZWdpbjogJ1xcXFxiKGNsYXNzfGludGVyZmFjZSkgKycsXG4gICAgICAgIGVuZDogJ1tcXFxceyRdJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihleHRlbmRzfGltcGxlbWVudHMpICsnLFxuICAgICAgICAgICAga2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFLFxuICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLFxuICAgICAgICBlbmQ6ICdcXFxcKCcsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcUycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXVxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogLzxcXC8vXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGF4ZTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBIU1BcbkF1dGhvcjogcHJpbmNlIDxNQy5wcmluY2UuMDIwM0BnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ib3RfU291cF9Qcm9jZXNzb3JcbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbmZ1bmN0aW9uIGhzcChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0hTUCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9bXFx3Ll9dKy8sXG4gICAgICBrZXl3b3JkOiAnZ290byBnb3N1YiByZXR1cm4gYnJlYWsgcmVwZWF0IGxvb3AgY29udGludWUgd2FpdCBhd2FpdCBkaW0gc2RpbSBmb3JlYWNoIGRpbXR5cGUgZHVwIGR1cHB0ciBlbmQgc3RvcCBuZXdtb2QgZGVsbW9kIG1yZWYgcnVuIGV4Z290byBvbiBtY2FsbCBhc3NlcnQgbG9nbWVzIG5ld2xhYiByZXN1bWUgeWllbGQgb25leGl0IG9uZXJyb3Igb25rZXkgb25jbGljayBvbmNtZCBleGlzdCBkZWxldGUgbWtkaXIgY2hkaXIgZGlybGlzdCBibG9hZCBic2F2ZSBiY29weSBtZW1maWxlIGlmIGVsc2UgcG9rZSB3cG9rZSBscG9rZSBnZXRzdHIgY2hkcG0gbWVtZXhwYW5kIG1lbWNweSBtZW1zZXQgbm90ZXNlbCBub3RlYWRkIG5vdGVkZWwgbm90ZWxvYWQgbm90ZXNhdmUgcmFuZG9taXplIG5vdGV1bnNlbCBub3RlZ2V0IHNwbGl0IHN0cnJlcCBzZXRlYXNlIGJ1dHRvbiBjaGdkaXNwIGV4ZWMgZGlhbG9nIG1tbG9hZCBtbXBsYXkgbW1zdG9wIG1jaSBwc2V0IHBnZXQgc3lzY29sb3IgbWVzIHByaW50IHRpdGxlIHBvcyBjaXJjbGUgY2xzIGZvbnQgc3lzZm9udCBvYmpzaXplIHBpY2xvYWQgY29sb3IgcGFsY29sb3IgcGFsZXR0ZSByZWRyYXcgd2lkdGggZ3NlbCBnY29weSBnem9vbSBnbW9kZSBibXBzYXZlIGhzdmNvbG9yIGdldGtleSBsaXN0Ym94IGNoa2JveCBjb21ib3ggaW5wdXQgbWVzYm94IGJ1ZmZlciBzY3JlZW4gYmdzY3IgbW91c2Ugb2Jqc2VsIGdyb2xsIGxpbmUgY2xyb2JqIGJveGYgb2JqcHJtIG9iam1vZGUgc3RpY2sgZ3JlY3QgZ3JvdGF0ZSBnc3F1YXJlIGdyYWRmIG9iamltYWdlIG9ianNraXAgb2JqZW5hYmxlIGNlbGxvYWQgY2VsZGl2IGNlbHB1dCBuZXdjb20gcXVlcnljb20gZGVsY29tIGNudnN0b3cgY29tcmVzIGF4b2JqIHdpbm9iaiBzZW5kbXNnIGNvbWV2ZW50IGNvbWV2YXJnIHNhcnJheWNvbnYgY2FsbGZ1bmMgY252d3RvcyBjb21ldmRpc3AgbGlicHRyIHN5c3RlbSBoc3BzdGF0IGhzcHZlciBzdGF0IGNudCBlcnIgc3Ryc2l6ZSBsb29wbGV2IHN1YmxldiBpcGFyYW0gd3BhcmFtIGxwYXJhbSByZWZzdHIgcmVmZHZhbCBpbnQgcm5kIHN0cmxlbiBsZW5ndGggbGVuZ3RoMiBsZW5ndGgzIGxlbmd0aDQgdmFydHlwZSBnZXR0aW1lIHBlZWsgd3BlZWsgbHBlZWsgdmFycHRyIHZhcnVzZSBub3RlaW5mbyBpbnN0ciBhYnMgbGltaXQgZ2V0ZWFzZSBzdHIgc3RybWlkIHN0cmYgZ2V0cGF0aCBzdHJ0cmltIHNpbiBjb3MgdGFuIGF0YW4gc3FydCBkb3VibGUgYWJzZiBleHBmIGxvZ2YgbGltaXRmIHBvd2YgZ2V0ZWFzZWYgbW91c2V4IG1vdXNleSBtb3VzZXcgaHduZCBoaW5zdGFuY2UgaGRjIGdpbmZvIG9iamluZm8gZGlyaW5mbyBzeXNpbmZvIHRoaXNtb2QgX19oc3B2ZXJfXyBfX2hzcDMwX18gX19kYXRlX18gX190aW1lX18gX19saW5lX18gX19maWxlX18gX2RlYnVnIF9faHNwZGVmX18gYW5kIG9yIHhvciBub3Qgc2NyZWVuX25vcm1hbCBzY3JlZW5fcGFsZXR0ZSBzY3JlZW5faGlkZSBzY3JlZW5fZml4ZWRzaXplIHNjcmVlbl90b29sIHNjcmVlbl9mcmFtZSBnbW9kZV9nZGkgZ21vZGVfbWVtIGdtb2RlX3JnYjAgZ21vZGVfYWxwaGEgZ21vZGVfcmdiMGFscGhhIGdtb2RlX2FkZCBnbW9kZV9zdWIgZ21vZGVfcGl4ZWxhIGdpbmZvX214IGdpbmZvX215IGdpbmZvX2FjdCBnaW5mb19zZWwgZ2luZm9fd3gxIGdpbmZvX3d5MSBnaW5mb193eDIgZ2luZm9fd3kyIGdpbmZvX3Z4IGdpbmZvX3Z5IGdpbmZvX3NpemV4IGdpbmZvX3NpemV5IGdpbmZvX3dpbnggZ2luZm9fd2lueSBnaW5mb19tZXN4IGdpbmZvX21lc3kgZ2luZm9fciBnaW5mb19nIGdpbmZvX2IgZ2luZm9fcGFsdXNlIGdpbmZvX2Rpc3B4IGdpbmZvX2Rpc3B5IGdpbmZvX2N4IGdpbmZvX2N5IGdpbmZvX2ludGlkIGdpbmZvX25ld2lkIGdpbmZvX3N4IGdpbmZvX3N5IG9iamluZm9fbW9kZSBvYmppbmZvX2Jtc2NyIG9iamluZm9faHduZCBub3RlbWF4IG5vdGVzaXplIGRpcl9jdXIgZGlyX2V4ZSBkaXJfd2luIGRpcl9zeXMgZGlyX2NtZGxpbmUgZGlyX2Rlc2t0b3AgZGlyX215ZG9jIGRpcl90diBmb250X25vcm1hbCBmb250X2JvbGQgZm9udF9pdGFsaWMgZm9udF91bmRlcmxpbmUgZm9udF9zdHJpa2VvdXQgZm9udF9hbnRpYWxpYXMgb2JqbW9kZV9ub3JtYWwgb2JqbW9kZV9ndWlmb250IG9iam1vZGVfdXNlZm9udCBnc3F1YXJlX2dyYWQgbXNnb3RoaWMgbXNtaW5jaG8gZG8gdW50aWwgd2hpbGUgd2VuZCBmb3IgbmV4dCBfYnJlYWsgX2NvbnRpbnVlIHN3aXRjaCBjYXNlIGRlZmF1bHQgc3dicmVhayBzd2VuZCBkZGltIGxkaW0gYWxsb2MgbV9waSByYWQyZGVnIGRlZzJyYWQgZWFzZV9saW5lYXIgZWFzZV9xdWFkX2luIGVhc2VfcXVhZF9vdXQgZWFzZV9xdWFkX2lub3V0IGVhc2VfY3ViaWNfaW4gZWFzZV9jdWJpY19vdXQgZWFzZV9jdWJpY19pbm91dCBlYXNlX3F1YXJ0aWNfaW4gZWFzZV9xdWFydGljX291dCBlYXNlX3F1YXJ0aWNfaW5vdXQgZWFzZV9ib3VuY2VfaW4gZWFzZV9ib3VuY2Vfb3V0IGVhc2VfYm91bmNlX2lub3V0IGVhc2Vfc2hha2VfaW4gZWFzZV9zaGFrZV9vdXQgZWFzZV9zaGFrZV9pbm91dCBlYXNlX2xvb3AnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG5cbiAgICAgIHtcbiAgICAgICAgLy8gbXVsdGktbGluZSBzdHJpbmdcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC9cXHtcIi8sXG4gICAgICAgIGVuZDogL1wiXFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9KSxcblxuICAgICAge1xuICAgICAgICAvLyBwcmUtcHJvY2Vzc29yXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAnbWV0YS1rZXl3b3JkJzogJ2FkZGlvbiBjZnVuYyBjbWQgY21wb3B0IGNvbWZ1bmMgY29uc3QgZGVmY2Z1bmMgZGVmZnVuYyBkZWZpbmUgZWxzZSBlbmRpZiBlbnVtIGVwYWNrIGZ1bmMgZ2xvYmFsIGlmIGlmZGVmIGlmbmRlZiBpbmNsdWRlIG1vZGNmdW5jIG1vZGZ1bmMgbW9kaW5pdCBtb2R0ZXJtIG1vZHVsZSBwYWNrIHBhY2tvcHQgcmVnY21kIHJ1bnRpbWUgdW5kZWYgdXNlY29tIHVzZWxpYidcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICAvLyBsYWJlbFxuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ15cXFxcKihcXFxcdyt8QCknXG4gICAgICB9LFxuXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhzcDtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gYW55TnVtYmVyT2ZUaW1lcyhyZSkge1xuICByZXR1cm4gY29uY2F0KCcoJywgcmUsICcpKicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbmFsKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJygnLCByZSwgJyk/Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogSGFuZGxlYmFyc1xuUmVxdWlyZXM6IHhtbC5qc1xuQXV0aG9yOiBSb2JpbiBXYXJkIDxyb2Jpbi53YXJkQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBNYXRjaGVyIGZvciBIYW5kbGViYXJzIGFzIHdlbGwgYXMgRW1iZXJKUyBhZGRpdGlvbnMuXG5XZWJzaXRlOiBodHRwczovL2hhbmRsZWJhcnNqcy5jb21cbkNhdGVnb3J5OiB0ZW1wbGF0ZVxuKi9cblxuZnVuY3Rpb24gaGFuZGxlYmFycyhobGpzKSB7XG4gIGNvbnN0IEJVSUxUX0lOUyA9IHtcbiAgICAnYnVpbHRpbi1uYW1lJzogW1xuICAgICAgJ2FjdGlvbicsXG4gICAgICAnYmluZGF0dHInLFxuICAgICAgJ2NvbGxlY3Rpb24nLFxuICAgICAgJ2NvbXBvbmVudCcsXG4gICAgICAnY29uY2F0JyxcbiAgICAgICdkZWJ1Z2dlcicsXG4gICAgICAnZWFjaCcsXG4gICAgICAnZWFjaC1pbicsXG4gICAgICAnZ2V0JyxcbiAgICAgICdoYXNoJyxcbiAgICAgICdpZicsXG4gICAgICAnaW4nLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICdsaW5rLXRvJyxcbiAgICAgICdsb2MnLFxuICAgICAgJ2xvZycsXG4gICAgICAnbG9va3VwJyxcbiAgICAgICdtdXQnLFxuICAgICAgJ291dGxldCcsXG4gICAgICAncGFydGlhbCcsXG4gICAgICAncXVlcnktcGFyYW1zJyxcbiAgICAgICdyZW5kZXInLFxuICAgICAgJ3RlbXBsYXRlJyxcbiAgICAgICd0ZXh0YXJlYScsXG4gICAgICAndW5ib3VuZCcsXG4gICAgICAndW5sZXNzJyxcbiAgICAgICd2aWV3JyxcbiAgICAgICd3aXRoJyxcbiAgICAgICd5aWVsZCdcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTElURVJBTFMgPSB7XG4gICAgbGl0ZXJhbDogW1xuICAgICAgJ3RydWUnLFxuICAgICAgJ2ZhbHNlJyxcbiAgICAgICd1bmRlZmluZWQnLFxuICAgICAgJ251bGwnXG4gICAgXVxuICB9O1xuXG4gIC8vIGFzIGRlZmluZWQgaW4gaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2d1aWRlL2V4cHJlc3Npb25zLmh0bWwjbGl0ZXJhbC1zZWdtZW50c1xuICAvLyB0aGlzIHJlZ2V4IG1hdGNoZXMgbGl0ZXJhbCBzZWdtZW50cyBsaWtlICcgYWJjICcgb3IgWyBhYmMgXSBhcyB3ZWxsIGFzIGhlbHBlcnMgYW5kIHBhdGhzXG4gIC8vIGxpa2UgYS9iLCAuL2FiYy9jZGUsIGFuZCBhYmMuYmNkXG5cbiAgY29uc3QgRE9VQkxFX1FVT1RFRF9JRF9SRUdFWCA9IC9cIlwifFwiW15cIl0rXCIvO1xuICBjb25zdCBTSU5HTEVfUVVPVEVEX0lEX1JFR0VYID0gLycnfCdbXiddKycvO1xuICBjb25zdCBCUkFDS0VUX1FVT1RFRF9JRF9SRUdFWCA9IC9cXFtcXF18XFxbW15cXF1dK1xcXS87XG4gIGNvbnN0IFBMQUlOX0lEX1JFR0VYID0gL1teXFxzIVwiIyUmJygpKissLlxcLzs8PT5AXFxbXFxcXFxcXV5ge3x9fl0rLztcbiAgY29uc3QgUEFUSF9ERUxJTUlURVJfUkVHRVggPSAvKFxcLnxcXC8pLztcbiAgY29uc3QgQU5ZX0lEID0gZWl0aGVyKFxuICAgIERPVUJMRV9RVU9URURfSURfUkVHRVgsXG4gICAgU0lOR0xFX1FVT1RFRF9JRF9SRUdFWCxcbiAgICBCUkFDS0VUX1FVT1RFRF9JRF9SRUdFWCxcbiAgICBQTEFJTl9JRF9SRUdFWFxuICAgICk7XG5cbiAgY29uc3QgSURFTlRJRklFUl9SRUdFWCA9IGNvbmNhdChcbiAgICBvcHRpb25hbCgvXFwufFxcLlxcL3xcXC8vKSwgLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aFxuICAgIEFOWV9JRCxcbiAgICBhbnlOdW1iZXJPZlRpbWVzKGNvbmNhdChcbiAgICAgIFBBVEhfREVMSU1JVEVSX1JFR0VYLFxuICAgICAgQU5ZX0lEXG4gICAgKSlcbiAgKTtcblxuICAvLyBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IGEgZXF1YWwtc2lnbiAod2l0aG91dCB0aGUgZXF1YWwgc2lnbilcbiAgY29uc3QgSEFTSF9QQVJBTV9SRUdFWCA9IGNvbmNhdChcbiAgICAnKCcsXG4gICAgQlJBQ0tFVF9RVU9URURfSURfUkVHRVgsICd8JyxcbiAgICBQTEFJTl9JRF9SRUdFWCxcbiAgICAnKSg/PT0pJ1xuICApO1xuXG4gIGNvbnN0IEhFTFBFUl9OQU1FX09SX1BBVEhfRVhQUkVTU0lPTiA9IHtcbiAgICBiZWdpbjogSURFTlRJRklFUl9SRUdFWCxcbiAgICBsZXhlbWVzOiAvW1xcdy5cXC9dKy9cbiAgfTtcblxuICBjb25zdCBIRUxQRVJfUEFSQU1FVEVSID0gaGxqcy5pbmhlcml0KEhFTFBFUl9OQU1FX09SX1BBVEhfRVhQUkVTU0lPTiwge1xuICAgIGtleXdvcmRzOiBMSVRFUkFMU1xuICB9KTtcblxuICBjb25zdCBTVUJfRVhQUkVTU0lPTiA9IHtcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpL1xuICAgIC8vIHRoZSBcImNvbnRhaW5zXCIgaXMgYWRkZWQgYmVsb3cgd2hlbiBhbGwgbmVjZXNzYXJ5IHN1Yi1tb2RlcyBhcmUgZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IEhBU0ggPSB7XG4gICAgLy8gZmthIFwiYXR0cmlidXRlLWFzc2lnbm1lbnRcIiwgcGFyYW1ldGVycyBvZiB0aGUgZm9ybSAna2V5PXZhbHVlJ1xuICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgIGJlZ2luOiBIQVNIX1BBUkFNX1JFR0VYLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBzdGFydHM6IHtcbiAgICAgIGJlZ2luOiAvPS8sXG4gICAgICBlbmQ6IC89LyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgSEVMUEVSX1BBUkFNRVRFUixcbiAgICAgICAgICBTVUJfRVhQUkVTU0lPTlxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IEJMT0NLX1BBUkFNUyA9IHtcbiAgICAvLyBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtICd7eyN3aXRoIHggYXMgfCB5IHx9fS4uLnt7L3dpdGh9fSdcbiAgICBiZWdpbjogL2FzXFxzK1xcfC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhcydcbiAgICB9LFxuICAgIGVuZDogL1xcfC8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gZGVmaW5lIHN1Yi1tb2RlIGluIG9yZGVyIHRvIHByZXZlbnQgaGlnaGxpZ2h0aW5nIG9mIGJsb2NrLXBhcmFtZXRlciBuYW1lZCBcImFzXCJcbiAgICAgICAgYmVnaW46IC9cXHcrL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBIRUxQRVJfUEFSQU1FVEVSUyA9IHtcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBCTE9DS19QQVJBTVMsXG4gICAgICBIQVNILFxuICAgICAgSEVMUEVSX1BBUkFNRVRFUixcbiAgICAgIFNVQl9FWFBSRVNTSU9OXG4gICAgXSxcbiAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAvLyB0aGUgcHJvcGVydHkgXCJlbmRcIiBpcyBkZWZpbmVkIHRocm91Z2ggaW5oZXJpdGFuY2Ugd2hlbiB0aGUgbW9kZSBpcyB1c2VkLiBJZiBkZXBlbmRzXG4gICAgLy8gb24gdGhlIHN1cnJvdW5kaW5nIG1vZGUsIGJ1dCBcImVuZHNXaXRoUGFyZW50XCIgZG9lcyBub3Qgd29yayBoZXJlIChpLmUuIGl0IGluY2x1ZGVzIHRoZVxuICAgIC8vIGVuZC10b2tlbiBvZiB0aGUgc3Vycm91bmRpbmcgbW9kZSlcbiAgfTtcblxuICBjb25zdCBTVUJfRVhQUkVTU0lPTl9DT05URU5UUyA9IGhsanMuaW5oZXJpdChIRUxQRVJfTkFNRV9PUl9QQVRIX0VYUFJFU1NJT04sIHtcbiAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICBrZXl3b3JkczogQlVJTFRfSU5TLFxuICAgIHN0YXJ0czogaGxqcy5pbmhlcml0KEhFTFBFUl9QQVJBTUVURVJTLCB7XG4gICAgICBlbmQ6IC9cXCkvXG4gICAgfSlcbiAgfSk7XG5cbiAgU1VCX0VYUFJFU1NJT04uY29udGFpbnMgPSBbU1VCX0VYUFJFU1NJT05fQ09OVEVOVFNdO1xuXG4gIGNvbnN0IE9QRU5JTkdfQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFMgPSBobGpzLmluaGVyaXQoSEVMUEVSX05BTUVfT1JfUEFUSF9FWFBSRVNTSU9OLCB7XG4gICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICBzdGFydHM6IGhsanMuaW5oZXJpdChIRUxQRVJfUEFSQU1FVEVSUywge1xuICAgICAgZW5kOiAvXFx9XFx9L1xuICAgIH0pXG4gIH0pO1xuXG4gIGNvbnN0IENMT1NJTkdfQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFMgPSBobGpzLmluaGVyaXQoSEVMUEVSX05BTUVfT1JfUEFUSF9FWFBSRVNTSU9OLCB7XG4gICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICBjbGFzc05hbWU6ICduYW1lJ1xuICB9KTtcblxuICBjb25zdCBCQVNJQ19NVVNUQUNIRV9DT05URU5UUyA9IGhsanMuaW5oZXJpdChIRUxQRVJfTkFNRV9PUl9QQVRIX0VYUFJFU1NJT04sIHtcbiAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICBrZXl3b3JkczogQlVJTFRfSU5TLFxuICAgIHN0YXJ0czogaGxqcy5pbmhlcml0KEhFTFBFUl9QQVJBTUVURVJTLCB7XG4gICAgICBlbmQ6IC9cXH1cXH0vXG4gICAgfSlcbiAgfSk7XG5cbiAgY29uc3QgRVNDQVBFX01VU1RBQ0hFX1dJVEhfUFJFQ0VFRElOR19CQUNLU0xBU0ggPSB7XG4gICAgYmVnaW46IC9cXFxcXFx7XFx7LyxcbiAgICBza2lwOiB0cnVlXG4gIH07XG4gIGNvbnN0IFBSRVZFTlRfRVNDQVBFX1dJVEhfQU5PVEhFUl9QUkVDRUVESU5HX0JBQ0tTTEFTSCA9IHtcbiAgICBiZWdpbjogL1xcXFxcXFxcKD89XFx7XFx7KS8sXG4gICAgc2tpcDogdHJ1ZVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0hhbmRsZWJhcnMnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdoYnMnLFxuICAgICAgJ2h0bWwuaGJzJyxcbiAgICAgICdodG1sLmhhbmRsZWJhcnMnLFxuICAgICAgJ2h0bWxiYXJzJ1xuICAgIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEVTQ0FQRV9NVVNUQUNIRV9XSVRIX1BSRUNFRURJTkdfQkFDS1NMQVNILFxuICAgICAgUFJFVkVOVF9FU0NBUEVfV0lUSF9BTk9USEVSX1BSRUNFRURJTkdfQkFDS1NMQVNILFxuICAgICAgaGxqcy5DT01NRU5UKC9cXHtcXHshLS0vLCAvLS1cXH1cXH0vKSxcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7XFx7IS8sIC9cXH1cXH0vKSxcbiAgICAgIHtcbiAgICAgICAgLy8gb3BlbiByYXcgYmxvY2sgXCJ7e3t7cmF3fX19fSBjb250ZW50IG5vdCBldmFsdWF0ZWQge3t7ey9yYXd9fX19XCJcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtcXHtcXHsoPyFcXC8pLyxcbiAgICAgICAgZW5kOiAvXFx9XFx9XFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtPUEVOSU5HX0JMT0NLX01VU1RBQ0hFX0NPTlRFTlRTXSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvXFx7XFx7XFx7XFx7XFwvLyxcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGNsb3NlIHJhdyBibG9ja1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS10YWcnLFxuICAgICAgICBiZWdpbjogL1xce1xce1xce1xce1xcLy8sXG4gICAgICAgIGVuZDogL1xcfVxcfVxcfVxcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbQ0xPU0lOR19CTE9DS19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG9wZW4gYmxvY2sgc3RhdGVtZW50XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7Iy8sXG4gICAgICAgIGVuZDogL1xcfVxcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbT1BFTklOR19CTE9DS19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7KD89ZWxzZVxcfVxcfSkvLFxuICAgICAgICBlbmQ6IC9cXH1cXH0vLFxuICAgICAgICBrZXl3b3JkczogJ2Vsc2UnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS10YWcnLFxuICAgICAgICBiZWdpbjogL1xce1xceyg/PWVsc2UgaWYpLyxcbiAgICAgICAgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAga2V5d29yZHM6ICdlbHNlIGlmJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY2xvc2luZyBibG9jayBzdGF0ZW1lbnRcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtcXC8vLFxuICAgICAgICBlbmQ6IC9cXH1cXH0vLFxuICAgICAgICBjb250YWluczogW0NMT1NJTkdfQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZSBvciBoZWxwZXItY2FsbCB0aGF0IGlzIE5PVCBodG1sLWVzY2FwZWRcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xce1xcey8sXG4gICAgICAgIGVuZDogL1xcfVxcfVxcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbQkFTSUNfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZSBvciBoZWxwZXItY2FsbCB0aGF0IGlzIGh0bWwtZXNjYXBlZFxuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LyxcbiAgICAgICAgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCQVNJQ19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbi8qXG4gTGFuZ3VhZ2U6IEhUTUxCYXJzIChsZWdhY3kpXG4gUmVxdWlyZXM6IHhtbC5qc1xuIERlc2NyaXB0aW9uOiBNYXRjaGVyIGZvciBIYW5kbGViYXJzIGFzIHdlbGwgYXMgRW1iZXJKUyBhZGRpdGlvbnMuXG4gV2Vic2l0ZTogaHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vaHRtbGJhcnNcbiBDYXRlZ29yeTogdGVtcGxhdGVcbiAqL1xuXG5mdW5jdGlvbiBodG1sYmFycyhobGpzKSB7XG4gIGNvbnN0IGRlZmluaXRpb24gPSBoYW5kbGViYXJzKGhsanMpO1xuXG4gIGRlZmluaXRpb24ubmFtZSA9IFwiSFRNTGJhcnNcIjtcblxuICAvLyBIQUNLOiBUaGlzIGxldHMgaGFuZGxlYmFycyBkbyB0aGUgYXV0by1kZXRlY3Rpb24gaWYgaXQncyBiZWVuIGxvYWRlZCAoYnlcbiAgLy8gZGVmYXVsdCB0aGUgYnVpbGQgc2NyaXB0IHdpbGwgbG9hZCBpbiBhbHBoYWJldGljYWwgb3JkZXIpIGFuZCBpZiBub3QgKHBlcmhhcHNcbiAgLy8gYW4gaW5zdGFsbCBpcyBvbmx5IHVzaW5nIGBodG1sYmFyc2AsIG5vdCBgaGFuZGxlYmFyc2ApIHRoZW4gdGhpcyB3aWxsIHN0aWxsXG4gIC8vIGFsbG93IEhUTUxCYXJzIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBhdXRvLWRldGVjdGlvblxuXG4gIC8vIHdvcnNlIGNhc2Ugc29tZW9uZSB3aWxsIGhhdmUgSFRNTGJhcnMgYW5kIGhhbmRsZWJhcnMgY29tcGV0aW5nIGZvciB0aGUgc2FtZVxuICAvLyBjb250ZW50IGFuZCB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZWlyIHNldHVwIHRvIG9ubHkgcmVxdWlyZSBoYW5kbGViYXJzLCBidXRcbiAgLy8gSSBkb24ndCBjb25zaWRlciB0aGlzIGEgYnJlYWtpbmcgY2hhbmdlXG4gIGlmIChobGpzLmdldExhbmd1YWdlKFwiaGFuZGxlYmFyc1wiKSkge1xuICAgIGRlZmluaXRpb24uZGlzYWJsZUF1dG9kZXRlY3QgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGRlZmluaXRpb247XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaHRtbGJhcnM7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEhUVFBcbkRlc2NyaXB0aW9uOiBIVFRQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhlYWRlcnMgd2l0aCBhdXRvbWF0aWMgYm9keSBoaWdobGlnaHRpbmdcbkF1dGhvcjogSXZhbiBTYWdhbGFldiA8bWFuaWFjQHNvZnR3YXJlbWFuaWFjcy5vcmc+XG5DYXRlZ29yeTogY29tbW9uLCBwcm90b2NvbHNcbldlYnNpdGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvT3ZlcnZpZXdcbiovXG5cbmZ1bmN0aW9uIGh0dHAoaGxqcykge1xuICBjb25zdCBWRVJTSU9OID0gJ0hUVFAvKDJ8MVxcXFwuWzAxXSknO1xuICBjb25zdCBIRUFERVJfTkFNRSA9IC9bQS1aYS16XVtBLVphLXowLTktXSovO1xuICBjb25zdCBIRUFERVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICBiZWdpbjogY29uY2F0KCdeJywgSEVBREVSX05BTUUsICcoPz1cXFxcOlxcXFxzKScpLFxuICAgIHN0YXJ0czoge1xuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJwdW5jdHVhdGlvblwiLFxuICAgICAgICAgIGJlZ2luOiAvOiAvLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuICBjb25zdCBIRUFERVJTX0FORF9CT0RZID0gW1xuICAgIEhFQURFUixcbiAgICB7XG4gICAgICBiZWdpbjogJ1xcXFxuXFxcXG4nLFxuICAgICAgc3RhcnRzOiB7IHN1Ykxhbmd1YWdlOiBbXSwgZW5kc1dpdGhQYXJlbnQ6IHRydWUgfVxuICAgIH1cbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdIVFRQJyxcbiAgICBhbGlhc2VzOiBbJ2h0dHBzJ10sXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIHJlc3BvbnNlXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXig/PScgKyBWRVJTSU9OICsgXCIgXFxcXGR7M30pXCIsXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJtZXRhXCIsXG4gICAgICAgICAgICBiZWdpbjogVkVSU0lPTlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdcXFxcYlxcXFxkezN9XFxcXGInXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC9cXGJcXEIvLFxuICAgICAgICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgICAgICAgIGNvbnRhaW5zOiBIRUFERVJTX0FORF9CT0RZXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXF1ZXN0XG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKD89XltBLVpdKyAoLio/KSAnICsgVkVSU0lPTiArICckKScsXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJyAnLFxuICAgICAgICAgICAgZW5kOiAnICcsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwibWV0YVwiLFxuICAgICAgICAgICAgYmVnaW46IFZFUlNJT05cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICdbQS1aXSsnXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC9cXGJcXEIvLFxuICAgICAgICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgICAgICAgIGNvbnRhaW5zOiBIRUFERVJTX0FORF9CT0RZXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB0byBhbGxvdyBoZWFkZXJzIHRvIHdvcmsgZXZlbiB3aXRob3V0IGEgcHJlYW1ibGVcbiAgICAgIGhsanMuaW5oZXJpdChIRUFERVIsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9KVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBodHRwO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEh5XG5EZXNjcmlwdGlvbjogSHkgaXMgYSB3b25kZXJmdWwgZGlhbGVjdCBvZiBMaXNwIHRoYXTigJlzIGVtYmVkZGVkIGluIFB5dGhvbi5cbkF1dGhvcjogU2VyZ2V5IFNvYmtvIDxzLnNvYmtvQHByb2ZpdHdhcmUucnU+XG5XZWJzaXRlOiBodHRwOi8vZG9jcy5oeWxhbmcub3JnL2VuL3N0YWJsZS9cbkNhdGVnb3J5OiBsaXNwXG4qL1xuXG5mdW5jdGlvbiBoeShobGpzKSB7XG4gIHZhciBTWU1CT0xTVEFSVCA9ICdhLXpBLVpfXFxcXC0hLj8rKj08PiYjXFwnJztcbiAgdmFyIFNZTUJPTF9SRSA9ICdbJyArIFNZTUJPTFNUQVJUICsgJ11bJyArIFNZTUJPTFNUQVJUICsgJzAtOS87Ol0qJztcbiAgdmFyIGtleXdvcmRzID0ge1xuICAgICRwYXR0ZXJuOiBTWU1CT0xfUkUsXG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBrZXl3b3Jkc1xuICAgICAgJyE9ICUgJT0gJiAmPSAqICoqICoqPSAqPSAqbWFwICcgK1xuICAgICAgJysgKz0gLCAtLWJ1aWxkLWNsYXNzLS0gLS1pbXBvcnQtLSAtPSAuIC8gLy8gLy89ICcgK1xuICAgICAgJy89IDwgPDwgPDw9IDw9ID0gPiA+PSA+PiA+Pj0gJyArXG4gICAgICAnQCBAPSBeIF49IGFicyBhY2N1bXVsYXRlIGFsbCBhbmQgYW55IGFwLWNvbXBvc2UgJyArXG4gICAgICAnYXAtZG90aW1lcyBhcC1lYWNoIGFwLWVhY2gtd2hpbGUgYXAtZmlsdGVyIGFwLWZpcnN0IGFwLWlmIGFwLWxhc3QgYXAtbWFwIGFwLW1hcC13aGVuIGFwLXBpcGUgJyArXG4gICAgICAnYXAtcmVkdWNlIGFwLXJlamVjdCBhcHBseSBhcy0+IGFzY2lpIGFzc2VydCBhc3NvYyBiaW4gYnJlYWsgYnV0bGFzdCAnICtcbiAgICAgICdjYWxsYWJsZSBjYWxsaW5nLW1vZHVsZS1uYW1lIGNhciBjYXNlIGNkciBjaGFpbiBjaHIgY29sbD8gY29tYmluYXRpb25zIGNvbXBpbGUgJyArXG4gICAgICAnY29tcHJlc3MgY29uZCBjb25zIGNvbnM/IGNvbnRpbnVlIGNvdW50IGN1cnJ5IGN1dCBjeWNsZSBkZWMgJyArXG4gICAgICAnZGVmIGRlZmF1bHQtbWV0aG9kIGRlZmNsYXNzIGRlZm1hY3JvIGRlZm1hY3JvLWFsaWFzIGRlZm1hY3JvL2chIGRlZm1haW4gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gJyArXG4gICAgICAnZGVmbi1hbGlhcyBkZWZuYyBkZWZuciBkZWZyZWFkZXIgZGVmc2VxIGRlbCBkZWxhdHRyIGRlbGV0ZS1yb3V0ZSBkaWN0LWNvbXAgZGlyICcgK1xuICAgICAgJ2Rpc2Fzc2VtYmxlIGRpc3BhdGNoLXJlYWRlci1tYWNybyBkaXN0aW5jdCBkaXZtb2QgZG8gZG90byBkcm9wIGRyb3AtbGFzdCBkcm9wLXdoaWxlIGVtcHR5PyAnICtcbiAgICAgICdlbmQtc2VxdWVuY2UgZXZhbCBldmFsLWFuZC1jb21waWxlIGV2YWwtd2hlbi1jb21waWxlIGV2ZW4/IGV2ZXJ5PyBleGNlcHQgZXhlYyBmaWx0ZXIgZmlyc3QgJyArXG4gICAgICAnZmxhdHRlbiBmbG9hdD8gZm4gZm5jIGZuciBmb3IgZm9yKiBmb3JtYXQgZnJhY3Rpb24gZ2VuZXhwciAnICtcbiAgICAgICdnZW5zeW0gZ2V0IGdldGF0dHIgZ2xvYmFsIGdsb2JhbHMgZ3JvdXAtYnkgaGFzYXR0ciBoYXNoIGhleCBpZCAnICtcbiAgICAgICdpZGVudGl0eSBpZiBpZiogaWYtbm90IGlmLXB5dGhvbjIgaW1wb3J0IGluIGluYyBpbnB1dCBpbnN0YW5jZT8gJyArXG4gICAgICAnaW50ZWdlciBpbnRlZ2VyLWNoYXI/IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJwb3NlIGlzIGlzLWNvbGwgaXMtY29ucyBpcy1lbXB0eSBpcy1ldmVuICcgK1xuICAgICAgJ2lzLWV2ZXJ5IGlzLWZsb2F0IGlzLWluc3RhbmNlIGlzLWludGVnZXIgaXMtaW50ZWdlci1jaGFyIGlzLWl0ZXJhYmxlIGlzLWl0ZXJhdG9yIGlzLWtleXdvcmQgaXMtbmVnIGlzLW5vbmUgJyArXG4gICAgICAnaXMtbm90IGlzLW51bWVyaWMgaXMtb2RkIGlzLXBvcyBpcy1zdHJpbmcgaXMtc3ltYm9sIGlzLXplcm8gaXNpbnN0YW5jZSBpc2xpY2UgaXNzdWJjbGFzcyAnICtcbiAgICAgICdpdGVyIGl0ZXJhYmxlPyBpdGVyYXRlIGl0ZXJhdG9yPyBrZXl3b3JkIGtleXdvcmQ/IGxhbWJkYSBsYXN0IGxlbiBsZXQgJyArXG4gICAgICAnbGlmIGxpZi1ub3QgbGlzdCogbGlzdC1jb21wIGxvY2FscyBsb29wIG1hY3JvLWVycm9yIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFjcm9leHBhbmQtYWxsICcgK1xuICAgICAgJ21hcCBtYXggbWVyZ2Utd2l0aCBtZXRob2QtZGVjb3JhdG9yIG1pbiBtdWx0aS1kZWNvcmF0b3IgbXVsdGljb21iaW5hdGlvbnMgbmFtZSBuZWc/IG5leHQgJyArXG4gICAgICAnbm9uZT8gbm9ubG9jYWwgbm90IG5vdC1pbiBub3Q/IG50aCBudW1lcmljPyBvY3Qgb2RkPyBvcGVuICcgK1xuICAgICAgJ29yIG9yZCBwYXJ0aXRpb24gcGVybXV0YXRpb25zIHBvcz8gcG9zdC1yb3V0ZSBwb3N0d2FsayBwb3cgcHJld2FsayBwcmludCAnICtcbiAgICAgICdwcm9kdWN0IHByb2ZpbGUvY2FsbHMgcHJvZmlsZS9jcHUgcHV0LXJvdXRlIHF1YXNpcXVvdGUgcXVvdGUgcmFpc2UgcmFuZ2UgcmVhZCByZWFkLXN0ciAnICtcbiAgICAgICdyZWN1cnNpdmUtcmVwbGFjZSByZWR1Y2UgcmVtb3ZlIHJlcGVhdCByZXBlYXRlZGx5IHJlcHIgcmVxdWlyZSByZXN0IHJvdW5kIHJvdXRlICcgK1xuICAgICAgJ3JvdXRlLXdpdGgtbWV0aG9kcyByd20gc2Vjb25kIHNlcSBzZXQtY29tcCBzZXRhdHRyIHNldHYgc29tZSBzb3J0ZWQgc3RyaW5nICcgK1xuICAgICAgJ3N0cmluZz8gc3VtIHN3aXRjaCBzeW1ib2w/IHRha2UgdGFrZS1udGggdGFrZS13aGlsZSB0ZWUgdHJ5IHVubGVzcyAnICtcbiAgICAgICd1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdmFycyB3YWxrIHdoZW4gd2hpbGUgd2l0aCB3aXRoKiB3aXRoLWRlY29yYXRvciB3aXRoLWdlbnN5bXMgJyArXG4gICAgICAneGkgeG9yIHlpZWxkIHlpZWxkLWZyb20gemVybz8gemlwIHppcC1sb25nZXN0IHwgfD0gfidcbiAgIH07XG5cbiAgdmFyIFNJTVBMRV9OVU1CRVJfUkUgPSAnWy0rXT9cXFxcZCsoXFxcXC5cXFxcZCspPyc7XG5cbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBiZWdpbjogU1lNQk9MX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiBTSU1QTEVfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSk7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JyxcbiAgICAnJCcsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICApO1xuICB2YXIgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogL1xcYihbVHRdcnVlfFtGZl1hbHNlfG5pbHxOb25lKVxcYi9cbiAgfTtcbiAgdmFyIENPTExFQ1RJT04gPSB7XG4gICAgYmVnaW46ICdbXFxcXFtcXFxce10nLCBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIHZhciBISU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXF4nICsgU1lNQk9MX1JFXG4gIH07XG4gIHZhciBISU5UX0NPTCA9IGhsanMuQ09NTUVOVCgnXFxcXF5cXFxceycsICdcXFxcfScpO1xuICB2YXIgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIE5BTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGtleXdvcmRzOiBrZXl3b3JkcyxcbiAgICBiZWdpbjogU1lNQk9MX1JFLFxuICAgIHN0YXJ0czogQk9EWVxuICB9O1xuICB2YXIgREVGQVVMVF9DT05UQUlOUyA9IFtMSVNULCBTVFJJTkcsIEhJTlQsIEhJTlRfQ09MLCBDT01NRU5ULCBLRVksIENPTExFQ1RJT04sIE5VTUJFUiwgTElURVJBTCwgU1lNQk9MXTtcblxuICBMSVNULmNvbnRhaW5zID0gW2hsanMuQ09NTUVOVCgnY29tbWVudCcsICcnKSwgTkFNRSwgQk9EWV07XG4gIEJPRFkuY29udGFpbnMgPSBERUZBVUxUX0NPTlRBSU5TO1xuICBDT0xMRUNUSU9OLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdIeScsXG4gICAgYWxpYXNlczogWydoeWxhbmcnXSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW2hsanMuU0hFQkFORygpLCBMSVNULCBTVFJJTkcsIEhJTlQsIEhJTlRfQ09MLCBDT01NRU5ULCBLRVksIENPTExFQ1RJT04sIE5VTUJFUiwgTElURVJBTF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBJbmZvcm0gN1xuQXV0aG9yOiBCcnVubyBEaWFzIDxicnVuby5yLmRpYXNAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IExhbmd1YWdlIGRlZmluaXRpb24gZm9yIEluZm9ybSA3LCBhIERTTCBmb3Igd3JpdGluZyBwYXJzZXIgaW50ZXJhY3RpdmUgZmljdGlvbi5cbldlYnNpdGU6IGh0dHA6Ly9pbmZvcm03LmNvbVxuKi9cblxuZnVuY3Rpb24gaW5mb3JtNyhobGpzKSB7XG4gIGNvbnN0IFNUQVJUX0JSQUNLRVQgPSAnXFxcXFsnO1xuICBjb25zdCBFTkRfQlJBQ0tFVCA9ICdcXFxcXSc7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0luZm9ybSA3JyxcbiAgICBhbGlhc2VzOiBbJ2k3J10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgLy8gU29tZSBrZXl3b3JkcyBtb3JlIG9yIGxlc3MgdW5pcXVlIHRvIEk3LCBmb3IgcmVsZXZhbmNlLlxuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8ga2luZDpcbiAgICAgICAgJ3RoaW5nIHJvb20gcGVyc29uIG1hbiB3b21hbiBhbmltYWwgY29udGFpbmVyICcgK1xuICAgICAgICAnc3VwcG9ydGVyIGJhY2tkcm9wIGRvb3IgJyArXG4gICAgICAgIC8vIGNoYXJhY3RlcmlzdGljOlxuICAgICAgICAnc2NlbmVyeSBvcGVuIGNsb3NlZCBsb2NrZWQgaW5zaWRlIGdlbmRlciAnICtcbiAgICAgICAgLy8gdmVyYjpcbiAgICAgICAgJ2lzIGFyZSBzYXkgdW5kZXJzdGFuZCAnICtcbiAgICAgICAgLy8gbWlzYyBrZXl3b3JkOlxuICAgICAgICAna2luZCBvZiBydWxlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIGJlZ2luOiBTVEFSVF9CUkFDS0VULFxuICAgICAgICAgICAgZW5kOiBFTkRfQlJBQ0tFVFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIGJlZ2luOiAvXihWb2x1bWV8Qm9va3xQYXJ0fENoYXB0ZXJ8U2VjdGlvbnxUYWJsZSlcXGIvLFxuICAgICAgICBlbmQ6ICckJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gUnVsZSBkZWZpbml0aW9uXG4gICAgICAgIC8vIFRoaXMgaXMgaGVyZSBmb3IgcmVsZXZhbmNlLlxuICAgICAgICBiZWdpbjogL14oQ2hlY2t8Q2Fycnkgb3V0fFJlcG9ydHxJbnN0ZWFkIG9mfFRvfFJ1bGV8V2hlbnxCZWZvcmV8QWZ0ZXIpXFxiLyxcbiAgICAgICAgZW5kOiAnOicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUnVsZSBuYW1lXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoVGhpcycsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICBiZWdpbjogU1RBUlRfQlJBQ0tFVCxcbiAgICAgICAgZW5kOiBFTkRfQlJBQ0tFVCxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluZm9ybTc7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLyoqXG4gKiBBbnkgb2YgdGhlIHBhc3NlZCBleHByZXNzc2lvbnMgbWF5IG1hdGNoXG4gKlxuICogQ3JlYXRlcyBhIGh1Z2UgdGhpcyB8IHRoaXMgfCB0aGF0IHwgdGhhdCBtYXRjaFxuICogQHBhcmFtIHsoUmVnRXhwIHwgc3RyaW5nKVtdIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZWl0aGVyKC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gJygnICsgYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcInxcIikgKyBcIilcIjtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBUT01MLCBhbHNvIElOSVxuRGVzY3JpcHRpb246IFRPTUwgYWltcyB0byBiZSBhIG1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCB0aGF0J3MgZWFzeSB0byByZWFkIGR1ZSB0byBvYnZpb3VzIHNlbWFudGljcy5cbkNvbnRyaWJ1dG9yczogR3VpbGxhdW1lIEdvbWV6IDxndWlsbGF1bWUxLmdvbWV6QGdtYWlsLmNvbT5cbkNhdGVnb3J5OiBjb21tb24sIGNvbmZpZ1xuV2Vic2l0ZTogaHR0cHM6Ly9naXRodWIuY29tL3RvbWwtbGFuZy90b21sXG4qL1xuXG5mdW5jdGlvbiBpbmkoaGxqcykge1xuICBjb25zdCBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFsrLV0rKT9bXFxkXStfW1xcZF9dKy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ09NTUVOVFMgPSBobGpzLkNPTU1FTlQoKTtcbiAgQ09NTUVOVFMudmFyaWFudHMgPSBbXG4gICAge1xuICAgICAgYmVnaW46IC87LyxcbiAgICAgIGVuZDogLyQvXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogLyMvLFxuICAgICAgZW5kOiAvJC9cbiAgICB9XG4gIF07XG4gIGNvbnN0IFZBUklBQkxFUyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbXFx3XFxkXCJdW1xcd1xcZF9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkXFx7KC4qPylcXH0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBMSVRFUkFMUyA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogL1xcYm9ufG9mZnx0cnVlfGZhbHNlfHllc3xub1xcYi9cbiAgfTtcbiAgY29uc3QgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6IFwic3RyaW5nXCIsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIicnJ1wiLFxuICAgICAgICBlbmQ6IFwiJycnXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiJ1wiLFxuICAgICAgICBlbmQ6IFwiJ1wiXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBBUlJBWSA9IHtcbiAgICBiZWdpbjogL1xcWy8sXG4gICAgZW5kOiAvXFxdLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICBMSVRFUkFMUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgJ3NlbGYnXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBCQVJFX0tFWSA9IC9bQS1aYS16MC05Xy1dKy87XG4gIGNvbnN0IFFVT1RFRF9LRVlfRE9VQkxFX1FVT1RFID0gL1wiKFxcXFxcInxbXlwiXSkqXCIvO1xuICBjb25zdCBRVU9URURfS0VZX1NJTkdMRV9RVU9URSA9IC8nW14nXSonLztcbiAgY29uc3QgQU5ZX0tFWSA9IGVpdGhlcihcbiAgICBCQVJFX0tFWSwgUVVPVEVEX0tFWV9ET1VCTEVfUVVPVEUsIFFVT1RFRF9LRVlfU0lOR0xFX1FVT1RFXG4gICk7XG4gIGNvbnN0IERPVFRFRF9LRVkgPSBjb25jYXQoXG4gICAgQU5ZX0tFWSwgJyhcXFxccypcXFxcLlxcXFxzKicsIEFOWV9LRVksICcpKicsXG4gICAgbG9va2FoZWFkKC9cXHMqPVxccypbXiNcXHNdLylcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUT01MLCBhbHNvIElOSScsXG4gICAgYWxpYXNlczogWyd0b21sJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICBiZWdpbjogL1xcWysvLFxuICAgICAgICBlbmQ6IC9cXF0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IERPVFRFRF9LRVksXG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgQ09NTUVOVFMsXG4gICAgICAgICAgICBBUlJBWSxcbiAgICAgICAgICAgIExJVEVSQUxTLFxuICAgICAgICAgICAgVkFSSUFCTEVTLFxuICAgICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICAgIE5VTUJFUlNcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBJUlBGOTBcbkF1dGhvcjogQW50aG9ueSBTY2VtYW1hIDxzY2VtYW1hQGlyc2FtYy51cHMtdGxzZS5mcj5cbkRlc2NyaXB0aW9uOiBJUlBGOTAgaXMgYW4gb3Blbi1zb3VyY2UgRm9ydHJhbiBjb2RlIGdlbmVyYXRvclxuV2Vic2l0ZTogaHR0cDovL2lycGY5MC51cHMtdGxzZS5mclxuQ2F0ZWdvcnk6IHNjaWVudGlmaWNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBpcnBmOTAoaGxqcykge1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKSdcbiAgfTtcblxuICAvLyByZWdleCBpbiBib3RoIGZvcnRyYW4gYW5kIGlycGY5MCBzaG91bGQgbWF0Y2hcbiAgY29uc3QgT1BUSU9OQUxfTlVNQkVSX1NVRkZJWCA9IC8oX1thLXpfXFxkXSspPy87XG4gIGNvbnN0IE9QVElPTkFMX05VTUJFUl9FWFAgPSAvKFtkZV1bKy1dP1xcZCspPy87XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBjb25jYXQoL1xcYlxcZCsvLCAvXFwuKFxcZCopLywgT1BUSU9OQUxfTlVNQkVSX0VYUCwgT1BUSU9OQUxfTlVNQkVSX1NVRkZJWClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBjb25jYXQoL1xcYlxcZCsvLCBPUFRJT05BTF9OVU1CRVJfRVhQLCBPUFRJT05BTF9OVU1CRVJfU1VGRklYKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGNvbmNhdCgvXFwuXFxkKy8sIE9QVElPTkFMX05VTUJFUl9FWFAsIE9QVElPTkFMX05VTUJFUl9TVUZGSVgpXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGX0tFWVdPUkRTID0ge1xuICAgIGxpdGVyYWw6ICcuRmFsc2UuIC5UcnVlLicsXG4gICAga2V5d29yZDogJ2tpbmQgZG8gd2hpbGUgcHJpdmF0ZSBjYWxsIGludHJpbnNpYyB3aGVyZSBlbHNld2hlcmUgJyArXG4gICAgICAndHlwZSBlbmR0eXBlIGVuZG1vZHVsZSBlbmRzZWxlY3QgZW5kaW50ZXJmYWNlIGVuZCBlbmRkbyBlbmRpZiBpZiBmb3JhbGwgZW5kZm9yYWxsIG9ubHkgY29udGFpbnMgZGVmYXVsdCByZXR1cm4gc3RvcCB0aGVuICcgK1xuICAgICAgJ3B1YmxpYyBzdWJyb3V0aW5lfDEwIGZ1bmN0aW9uIHByb2dyYW0gLmFuZC4gLm9yLiAubm90LiAubGUuIC5lcS4gLmdlLiAuZ3QuIC5sdC4gJyArXG4gICAgICAnZ290byBzYXZlIGVsc2UgdXNlIG1vZHVsZSBzZWxlY3QgY2FzZSAnICtcbiAgICAgICdhY2Nlc3MgYmxhbmsgZGlyZWN0IGV4aXN0IGZpbGUgZm10IGZvcm0gZm9ybWF0dGVkIGlvc3RhdCBuYW1lIG5hbWVkIG5leHRyZWMgbnVtYmVyIG9wZW5lZCByZWMgcmVjbCBzZXF1ZW50aWFsIHN0YXR1cyB1bmZvcm1hdHRlZCB1bml0ICcgK1xuICAgICAgJ2NvbnRpbnVlIGZvcm1hdCBwYXVzZSBjeWNsZSBleGl0ICcgK1xuICAgICAgJ2NfbnVsbF9jaGFyIGNfYWxlcnQgY19iYWNrc3BhY2UgY19mb3JtX2ZlZWQgZmx1c2ggd2FpdCBkZWNpbWFsIHJvdW5kIGlvbXNnICcgK1xuICAgICAgJ3N5bmNocm9ub3VzIG5vcGFzcyBub25fb3ZlcnJpZGFibGUgcGFzcyBwcm90ZWN0ZWQgdm9sYXRpbGUgYWJzdHJhY3QgZXh0ZW5kcyBpbXBvcnQgJyArXG4gICAgICAnbm9uX2ludHJpbnNpYyB2YWx1ZSBkZWZlcnJlZCBnZW5lcmljIGZpbmFsIGVudW1lcmF0b3IgY2xhc3MgYXNzb2NpYXRlIGJpbmQgZW51bSAnICtcbiAgICAgICdjX2ludCBjX3Nob3J0IGNfbG9uZyBjX2xvbmdfbG9uZyBjX3NpZ25lZF9jaGFyIGNfc2l6ZV90IGNfaW50OF90IGNfaW50MTZfdCBjX2ludDMyX3QgY19pbnQ2NF90IGNfaW50X2xlYXN0OF90IGNfaW50X2xlYXN0MTZfdCAnICtcbiAgICAgICdjX2ludF9sZWFzdDMyX3QgY19pbnRfbGVhc3Q2NF90IGNfaW50X2Zhc3Q4X3QgY19pbnRfZmFzdDE2X3QgY19pbnRfZmFzdDMyX3QgY19pbnRfZmFzdDY0X3QgY19pbnRtYXhfdCBDX2ludHB0cl90IGNfZmxvYXQgY19kb3VibGUgJyArXG4gICAgICAnY19sb25nX2RvdWJsZSBjX2Zsb2F0X2NvbXBsZXggY19kb3VibGVfY29tcGxleCBjX2xvbmdfZG91YmxlX2NvbXBsZXggY19ib29sIGNfY2hhciBjX251bGxfcHRyIGNfbnVsbF9mdW5wdHIgJyArXG4gICAgICAnY19uZXdfbGluZSBjX2NhcnJpYWdlX3JldHVybiBjX2hvcml6b250YWxfdGFiIGNfdmVydGljYWxfdGFiIGlzb19jX2JpbmRpbmcgY19sb2MgY19mdW5sb2MgY19hc3NvY2lhdGVkICBjX2ZfcG9pbnRlciAnICtcbiAgICAgICdjX3B0ciBjX2Z1bnB0ciBpc29fZm9ydHJhbl9lbnYgY2hhcmFjdGVyX3N0b3JhZ2Vfc2l6ZSBlcnJvcl91bml0IGZpbGVfc3RvcmFnZV9zaXplIGlucHV0X3VuaXQgaW9zdGF0X2VuZCBpb3N0YXRfZW9yICcgK1xuICAgICAgJ251bWVyaWNfc3RvcmFnZV9zaXplIG91dHB1dF91bml0IGNfZl9wcm9jcG9pbnRlciBpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sICcgK1xuICAgICAgJ2llZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlIG5ld3VuaXQgY29udGlndW91cyByZWN1cnNpdmUgJyArXG4gICAgICAncGFkIHBvc2l0aW9uIGFjdGlvbiBkZWxpbSByZWFkd3JpdGUgZW9yIGFkdmFuY2Ugbm1sIGludGVyZmFjZSBwcm9jZWR1cmUgbmFtZWxpc3QgaW5jbHVkZSBzZXF1ZW5jZSBlbGVtZW50YWwgcHVyZSAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgY2hhcmFjdGVyIGNvbXBsZXggbG9naWNhbCBkaW1lbnNpb24gYWxsb2NhdGFibGV8MTAgcGFyYW1ldGVyICcgK1xuICAgICAgJ2V4dGVybmFsIGltcGxpY2l0fDEwIG5vbmUgZG91YmxlIHByZWNpc2lvbiBhc3NpZ24gaW50ZW50IG9wdGlvbmFsIHBvaW50ZXIgJyArXG4gICAgICAndGFyZ2V0IGluIG91dCBjb21tb24gZXF1aXZhbGVuY2UgZGF0YSAnICtcbiAgICAgIC8vIElSUEY5MCBzcGVjaWFsIGtleXdvcmRzXG4gICAgICAnYmVnaW5fcHJvdmlkZXIgJmJlZ2luX3Byb3ZpZGVyIGVuZF9wcm92aWRlciBiZWdpbl9zaGVsbCBlbmRfc2hlbGwgYmVnaW5fdGVtcGxhdGUgZW5kX3RlbXBsYXRlIHN1YnN0IGFzc2VydCB0b3VjaCAnICtcbiAgICAgICdzb2Z0X3RvdWNoIHByb3ZpZGUgbm9fZGVwIGZyZWUgaXJwX2lmIGlycF9lbHNlIGlycF9lbmRpZiBpcnBfd3JpdGUgaXJwX3JlYWQnLFxuICAgIGJ1aWx0X2luOiAnYWxvZyBhbG9nMTAgYW1heDAgYW1heDEgYW1pbjAgYW1pbjEgYW1vZCBjYWJzIGNjb3MgY2V4cCBjbG9nIGNzaW4gY3NxcnQgZGFicyBkYWNvcyBkYXNpbiBkYXRhbiBkYXRhbjIgZGNvcyBkY29zaCBkZGltIGRleHAgZGludCAnICtcbiAgICAgICdkbG9nIGRsb2cxMCBkbWF4MSBkbWluMSBkbW9kIGRuaW50IGRzaWduIGRzaW4gZHNpbmggZHNxcnQgZHRhbiBkdGFuaCBmbG9hdCBpYWJzIGlkaW0gaWRpbnQgaWRuaW50IGlmaXggaXNpZ24gbWF4MCBtYXgxIG1pbjAgbWluMSBzbmdsICcgK1xuICAgICAgJ2FsZ2FtYSBjZGFicyBjZGNvcyBjZGV4cCBjZGxvZyBjZHNpbiBjZHNxcnQgY3FhYnMgY3Fjb3MgY3FleHAgY3Fsb2cgY3FzaW4gY3FzcXJ0IGRjbXBseCBkY29uamcgZGVyZiBkZXJmYyBkZmxvYXQgZGdhbW1hIGRpbWFnIGRsZ2FtYSAnICtcbiAgICAgICdpcWludCBxYWJzIHFhY29zIHFhc2luIHFhdGFuIHFhdGFuMiBxY21wbHggcWNvbmpnIHFjb3MgcWNvc2ggcWRpbSBxZXJmIHFlcmZjIHFleHAgcWdhbW1hIHFpbWFnIHFsZ2FtYSBxbG9nIHFsb2cxMCBxbWF4MSBxbWluMSBxbW9kICcgK1xuICAgICAgJ3FuaW50IHFzaWduIHFzaW4gcXNpbmggcXNxcnQgcXRhbiBxdGFuaCBhYnMgYWNvcyBhaW1hZyBhaW50IGFuaW50IGFzaW4gYXRhbiBhdGFuMiBjaGFyIGNtcGx4IGNvbmpnIGNvcyBjb3NoIGV4cCBpY2hhciBpbmRleCBpbnQgbG9nICcgK1xuICAgICAgJ2xvZzEwIG1heCBtaW4gbmludCBzaWduIHNpbiBzaW5oIHNxcnQgdGFuIHRhbmggcHJpbnQgd3JpdGUgZGltIGxnZSBsZ3QgbGxlIGxsdCBtb2QgbnVsbGlmeSBhbGxvY2F0ZSBkZWFsbG9jYXRlICcgK1xuICAgICAgJ2FkanVzdGwgYWRqdXN0ciBhbGwgYWxsb2NhdGVkIGFueSBhc3NvY2lhdGVkIGJpdF9zaXplIGJ0ZXN0IGNlaWxpbmcgY291bnQgY3NoaWZ0IGRhdGVfYW5kX3RpbWUgZGlnaXRzIGRvdF9wcm9kdWN0ICcgK1xuICAgICAgJ2Vvc2hpZnQgZXBzaWxvbiBleHBvbmVudCBmbG9vciBmcmFjdGlvbiBodWdlIGlhbmQgaWJjbHIgaWJpdHMgaWJzZXQgaWVvciBpb3IgaXNoZnQgaXNoZnRjIGxib3VuZCBsZW5fdHJpbSBtYXRtdWwgJyArXG4gICAgICAnbWF4ZXhwb25lbnQgbWF4bG9jIG1heHZhbCBtZXJnZSBtaW5leHBvbmVudCBtaW5sb2MgbWludmFsIG1vZHVsbyBtdmJpdHMgbmVhcmVzdCBwYWNrIHByZXNlbnQgcHJvZHVjdCAnICtcbiAgICAgICdyYWRpeCByYW5kb21fbnVtYmVyIHJhbmRvbV9zZWVkIHJhbmdlIHJlcGVhdCByZXNoYXBlIHJyc3BhY2luZyBzY2FsZSBzY2FuIHNlbGVjdGVkX2ludF9raW5kIHNlbGVjdGVkX3JlYWxfa2luZCAnICtcbiAgICAgICdzZXRfZXhwb25lbnQgc2hhcGUgc2l6ZSBzcGFjaW5nIHNwcmVhZCBzdW0gc3lzdGVtX2Nsb2NrIHRpbnkgdHJhbnNwb3NlIHRyaW0gdWJvdW5kIHVucGFjayB2ZXJpZnkgYWNoYXIgaWFjaGFyIHRyYW5zZmVyICcgK1xuICAgICAgJ2RibGUgZW50cnkgZHByb2QgY3B1X3RpbWUgY29tbWFuZF9hcmd1bWVudF9jb3VudCBnZXRfY29tbWFuZCBnZXRfY29tbWFuZF9hcmd1bWVudCBnZXRfZW52aXJvbm1lbnRfdmFyaWFibGUgaXNfaW9zdGF0X2VuZCAnICtcbiAgICAgICdpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sIGllZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlICcgK1xuICAgICAgJ2lzX2lvc3RhdF9lb3IgbW92ZV9hbGxvYyBuZXdfbGluZSBzZWxlY3RlZF9jaGFyX2tpbmQgc2FtZV90eXBlX2FzIGV4dGVuZHNfdHlwZV9vZiAnICtcbiAgICAgICdhY29zaCBhc2luaCBhdGFuaCBiZXNzZWxfajAgYmVzc2VsX2oxIGJlc3NlbF9qbiBiZXNzZWxfeTAgYmVzc2VsX3kxIGJlc3NlbF95biBlcmYgZXJmYyBlcmZjX3NjYWxlZCBnYW1tYSBsb2dfZ2FtbWEgaHlwb3Qgbm9ybTIgJyArXG4gICAgICAnYXRvbWljX2RlZmluZSBhdG9taWNfcmVmIGV4ZWN1dGVfY29tbWFuZF9saW5lIGxlYWR6IHRyYWlseiBzdG9yYWdlX3NpemUgbWVyZ2VfYml0cyAnICtcbiAgICAgICdiZ2UgYmd0IGJsZSBibHQgZHNoaWZ0bCBkc2hpZnRyIGZpbmRsb2MgaWFsbCBpYW55IGlwYXJpdHkgaW1hZ2VfaW5kZXggbGNvYm91bmQgdWNvYm91bmQgbWFza2wgbWFza3IgJyArXG4gICAgICAnbnVtX2ltYWdlcyBwYXJpdHkgcG9wY250IHBvcHBhciBzaGlmdGEgc2hpZnRsIHNoaWZ0ciB0aGlzX2ltYWdlICcgK1xuICAgICAgLy8gSVJQRjkwIHNwZWNpYWwgYnVpbHRfaW5zXG4gICAgICAnSVJQX0FMSUdOIGlycF9oZXJlJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdJUlBGOTAnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IEZfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N1YnJvdXRpbmUgZnVuY3Rpb24gcHJvZ3JhbScsXG4gICAgICAgIGlsbGVnYWw6ICdbJHs9XFxcXG5dJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICBQQVJBTVNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnIScsICckJywge1xuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0pLFxuICAgICAgaGxqcy5DT01NRU5UKCdiZWdpbl9kb2MnLCAnZW5kX2RvYycsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSksXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXJwZjkwO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IElTQkxcbkF1dGhvcjogRG1pdHJpeSBUYXJhc292IDxkaW1hdGFyQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBidWlsdC1pbiBsYW5ndWFnZSBESVJFQ1RVTVxuQ2F0ZWdvcnk6IGVudGVycHJpc2VcbiovXG5cbmZ1bmN0aW9uIGlzYmwoaGxqcykge1xuICAvLyDQntC/0YDQtdC00LXQu9C10L3QuNC1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QslxuICBjb25zdCBVTkRFUlNDT1JFX0lERU5UX1JFID0gXCJbQS1aYS160JAt0K/QsC3Rj9GR0IFfIV1bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSpcIjtcblxuICAvLyDQntC/0YDQtdC00LXQu9C10L3QuNC1INC40LzQtdC9INGE0YPQvdC60YbQuNC5XG4gIGNvbnN0IEZVTkNUSU9OX05BTUVfSURFTlRfUkUgPSBcIltBLVphLXrQkC3Qr9CwLdGP0ZHQgV9dW0EtWmEtetCQLdCv0LAt0Y/RkdCBXzAtOV0qXCI7XG5cbiAgLy8ga2V5d29yZCA6INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsFxuICBjb25zdCBLRVlXT1JEID1cbiAgICBcImFuZCDQuCBlbHNlINC40L3QsNGH0LUgZW5kZXhjZXB0IGVuZGZpbmFsbHkgZW5kZm9yZWFjaCDQutC+0L3QtdGG0LLRgdC1IGVuZGlmINC60L7QvdC10YbQtdGB0LvQuCBlbmR3aGlsZSDQutC+0L3QtdGG0L/QvtC60LAgXCIgK1xuICAgIFwiZXhjZXB0IGV4aXRmb3IgZmluYWxseSBmb3JlYWNoINCy0YHQtSBpZiDQtdGB0LvQuCBpbiDQsiBub3Qg0L3QtSBvciDQuNC70LggdHJ5IHdoaWxlINC/0L7QutCwIFwiO1xuXG4gIC8vIFNZU1JFUyBDb25zdGFudHNcbiAgY29uc3Qgc3lzcmVzX2NvbnN0YW50cyA9XG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNfUklHSFRfVFlQRV9FRElUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU19SSUdIVF9UWVBFX0ZVTEwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTX1JJR0hUX1RZUEVfVklFVyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX01PREVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19OT19BQ0NFU1NfVklFVyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX05PX0FDQ0VTU19WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfQUREX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0FERF9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfQ0hBTkdFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0NIQU5HRV9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfREVMRVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0RFTEVURV9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfRVhFQ1VURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19FWEVDVVRFX1JFUVVJU0lURV9ZRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19OT19BQ0NFU1NfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfTk9fQUNDRVNTX1JFUVVJU0lURV9ZRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19SQVRJRllfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfUkFUSUZZX1JFUVVJU0lURV9ZRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19WSUVXIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19WSUVXX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1ZJRVdfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9DSEFOR0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX0NIQU5HRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9FWElTVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX0VYSVNUU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9GVUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9GVUxMX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX1ZJRVcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQUJPUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FDQ0VQVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQUREX0FUVEFDSE1FTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NIQU5HRV9DQVJEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DSEFOR0VfS0lORCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ0hBTkdFX1NUT1JBR0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NPTlRJTlVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DT1BZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DUkVBVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NSRUFURV9WRVJTSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9ERUxFVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0RFTEVURV9BVFRBQ0hNRU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9ERUxFVEVfVkVSU0lPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRElTQUJMRV9ERUxFR0FURV9BQ0NFU1NfUklHSFRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FTkFCTEVfREVMRUdBVEVfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRU5DUllQVElPTl9CWV9DRVJUSUZJQ0FURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRU5DUllQVElPTl9CWV9DRVJUSUZJQ0FURV9BTkRfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VOQ1JZUFRJT05fQllfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VYUE9SVF9XSVRIX0xPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VYUE9SVF9XSVRIT1VUX0xPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0lNUE9SVF9XSVRIX1VOTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfSU1QT1JUX1dJVEhPVVRfVU5MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9MSUZFX0NZQ0xFX1NUQUdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9MT0NLX0ZPUl9TRVJWRVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0xPQ0tfTU9ESUZZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9NQVJLX0FTX1JFQURFRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTUFSS19BU19VTlJFQURFRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTU9ESUZZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9NT0RJRllfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTU9WRV9UT19BUkNISVZFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9PRkZfRU5DUllQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUEFTU1dPUkRfQ0hBTkdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9QRVJGT1JNIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9SRUNPVkVSX0ZST01fTE9DQUxfQ09QWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUkVTVEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUkVTVE9SRV9GUk9NX0FSQ0hJVkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1JFVklTSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9TRU5EX0JZX01BSUwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1NJR04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1NUQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9VTkxPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1VOTE9DS19GUk9NX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVkVSU0lPTl9TVEFURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVkVSU0lPTl9WSVNJQklMSVRZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9WSUVXIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9WSUVXX1NIQURPV19DT1BZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9XT1JLRkxPV19ERVNDUklQVElPTl9NT0RJRlkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1dSSVRFX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElWRV9WRVJTSU9OX1NUQVRFX1BJQ0tfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FERF9SRUZFUkVOQ0VfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRERJVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURESVRJT05BTF9QQVJBTVNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FESVRJT05BTF9KT0JfRU5EX0RBVEVfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FESVRJT05BTF9KT0JfUkVBRF9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURJVElPTkFMX0pPQl9TVEFSVF9EQVRFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRElUSU9OQUxfSk9CX1NUQVRFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0FERElOR19VU0VSX1RPX0dST1VQX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9BRERJTkdfVVNFUl9UT19HUk9VUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9DT01QX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9DT01QX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0NSRUFUSU9OX0dST1VQX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9HUk9VUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9VU0VSX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9VU0VSX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RBVEFCQVNFX1VTRVJfQ1JFQVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREFUQUJBU0VfVVNFUl9DUkVBVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREFUQUJBU0VfVVNFUl9ERUxFVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9EQVRBQkFTRV9VU0VSX0RFTEVUSU9OX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9DT01QX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9DT01QX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX0dST1VQX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9HUk9VUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9VU0VSX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9VU0VSX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX1VTRVJfRlJPTV9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fVVNFUl9GUk9NX0dST1VQX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX0ZJTFRFUkVSX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19GSUxURVJFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19GSUxURVJFUl9SRVNUUklDVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfRklMVEVSRVJfUkVTVFJJQ1RJT05fQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfUFJJVklMRUdFX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19QUklWSUxFR0VfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfUklHSFRTX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19SSUdIVFNfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfSVNfTUFJTl9TRVJWRVJfQ0hBTkdFRF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfSVNfTUFJTl9TRVJWRVJfQ0hBTkdFRF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9JU19QVUJMSUNfQ0hBTkdFRF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfSVNfUFVCTElDX0NIQU5HRURfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfRklMVEVSRVJfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX0ZJTFRFUkVSX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX0ZJTFRFUkVSX1JFU1RSSUNUSU9OX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19GSUxURVJFUl9SRVNUUklDVElPTl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19QUklWSUxFR0VfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX1BSSVZJTEVHRV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19SSUdIVFNfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX1JJR0hUU19BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9TRVJWRVJfTE9HSU5fQ1JFQVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfU0VSVkVSX0xPR0lOX0NSRUFUSU9OX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9TRVJWRVJfTE9HSU5fREVMRVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfU0VSVkVSX0xPR0lOX0RFTEVUSU9OX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19DQVRFR09SWV9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfQ0FURUdPUllfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfQ09NUF9USVRMRV9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfQ09NUF9USVRMRV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19GVUxMX05BTUVfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0ZVTExfTkFNRV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfUEFSRU5UX0dST1VQX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19QQVJFTlRfR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfVVNFUl9BVVRIX1RZUEVfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfQVVUSF9UWVBFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfTE9HSU5fQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfTE9HSU5fQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfVVNFUl9TVEFUVVNfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfU1RBVFVTX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VTRVJfUEFTU1dPUkRfQ0hBTkdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VTRVJfUEFTU1dPUkRfQ0hBTkdFX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUxMX0FDQ0VQVF9DT05ESVRJT05fUlVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BTExfVVNFUlNfR1JPVVAgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FMTF9VU0VSU19HUk9VUF9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BTExfVVNFUlNfU0VSVkVSX0dST1VQX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FMTE9XRURfQUNDRVNTX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUxMT1dFRF9BQ0NFU1NfVFlQRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BUFBfVklFV0VSX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FQUFJPVklOR19TSUdOQVRVUkVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVBQUk9WSU5HX1NJR05BVFVSRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVNTSVNUQU5UX1NVQlNUSVRVRV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BU1NJU1RBTlRfU1VCU1RJVFVFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfQ09NUE9ORU5UX1RPS0VOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9ET0MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0VET0MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0ZPTERFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfSk9CIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX1RBU0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhfRU5DT0RFRF9QQVNTV09SRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUSF9FTkNPREVEX1BBU1NXT1JEX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhfTk9WRUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX1BBU1NXT1JEX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhfV0lORE9XUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUSEVOVElDQVRJTkdfU0lHTkFUVVJFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhFTlRJQ0FUSU5HX1NJR05BVFVSRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT19FTlVNX01FVEhPRF9GTEFHIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPX05VTUVSQVRJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT19TVFJPTkdfRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVEVYVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfQUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0FHRV9BTExfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfU0lHTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfU0lHTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0FHRV9XT1JLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0FHRV9XT1JLX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTRV9BTllXSEVSRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0VfT05fU0lHTklOR19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0VfT05fV09SS19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9CRUdJTl9EQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9CTEFDS19MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0JMVUVfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9CVE5fUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0FMQ1VMQVRFRF9ST0xFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0FMTF9UWVBFX1ZBUklBQkxFX0JVVFRPTl9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0FMTF9UWVBFX1ZBUklBQkxFX1BST0dSQU1fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTkNFTF9NRVNTQUdFX0ZVTkNUSU9OX1JFU1VMVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0FSRF9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DQVJEX1JFRkVSRU5DRV9NT0RFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NFUlRJRklDQVRFX1RZUEVfUkVRVUlTSVRFX0VOQ1JZUFRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NFUlRJRklDQVRFX1RZUEVfUkVRVUlTSVRFX1NJR05fQU5EX0VOQ1JZUFRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NFUlRJRklDQVRFX1RZUEVfUkVRVUlTSVRFX1NJR05fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX0RBVEVfUEFSQU1fVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0hFQ0tfUEFSQU1fVkFMVUVfRkxPQVRfUEFSQU1fVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0hFQ0tfUEFSQU1fVkFMVUVfSU5URUdFUl9QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9QSUNLX1BBUkFNX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX1JFRUZSRU5DRV9QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DTE9TRURfUkVDT1JEX0ZMQUdfVkFMVUVfRkVNSU5JTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NMT1NFRF9SRUNPUkRfRkxBR19WQUxVRV9NQVNDVUxJTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfQURNSU4gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfREVWRUxPUEVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0RPQ1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfRURPQ19DQVJEUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9FWFRFUk5BTF9FWEVDVVRBQkxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX09USEVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX1JFRkVSRU5DRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9SRVBPUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfU0NSSVBUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX1VSTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfQUNDRVNTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9DT01QT05FTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX0RFU0NSSVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9FWENMVURFX0NPTVBPTkVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfUkVDT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01NRU5UX1JFUV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01NT05fU0VUVElOR1NfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBfQ09ERV9HUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9HUk9VUF9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9BRE1JTl9DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9ERVZFTE9QRVJfQ09NUE9ORU5UUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfRE9DUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfRURPQ19DQVJEUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfRURPQ1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0VYVEVSTkFMX0VYRUNVVEFCTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX09USEVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9SRUZFUkVOQ0VfVFlQRVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX1JFRkVSRU5DRVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX1JFUE9SVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX1NDUklQVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX1VSTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UU19SRU1PVEVfU0VSVkVSU19WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTkRJVElPTl9CTE9DS19ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OU1RfRklSTV9TVEFUVVNfQ09NTU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05TVF9GSVJNX1NUQVRVU19JTkRJVklEVUFMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05TVF9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OU1RfUE9TSVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTlNUX1NFUlZFUl9TVEFUVVNfRE9OVF9SRVBMSUNBVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTlNUX1NFUlZFUl9TVEFUVVNfUkVQTElDQVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05URU5UU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX0JPT0xFQU4gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9EQVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfRkxPQVQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9JTlRFR0VSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfUElDSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX1JFRkVSRU5DRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX1NUUklORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX1RFWFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9WQVJJQU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRFX0NMT1NFX1JFUV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRFX0ZPUk1BVF9EQVRFX09OTFlfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9PUEVOX1JFUV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRFX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9SRVFVSVNJVEVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVUSU1FX0ZPUk1BVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVBX0FDQ0VTU19SSUdIVFNfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVNDUklQVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUMV9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVQyX1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVDNfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUNF9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVQ1X1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVDZfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUQUlMX0RBVEFTRVRfS0VZX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVRBSUxfUElDS19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUQUlMX1JFUV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET19OT1RfVVNFX0FDQ0VTU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RPX05PVF9VU0VfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9fTk9UX1VTRV9PTl9WSUVXX0FDQ0VTU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RPX05PVF9VU0VfT05fVklFV19BQ0NFU1NfVFlQRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET0NVTUVOVF9TVE9SQUdFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET0NVTUVOVF9URU1QTEFURVNfVFlQRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET1VCTEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUl9DTE9TRV9GSUxFX09CU0VSVl9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUl9DTE9TRV9QUk9DRVNTX09CU0VSVl9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX0FQUExJQ0FUSU9OX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUlNfQ1JFQVRFX1NFVkVSQUxfUFJPQ0VTU0VTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX0VYVEVOU0lPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19PQlNFUlZFUl9CWV9QUk9DRVNTX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUlNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUlNfUkVQTEFDRV9TUEVDX0NIQVJTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX1VTRV9QTFVHSU5TX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX1ZJRVdfRE9DVU1FTlRfT1BFTkVEX1RPX0VESVRfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19DQVJEX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfQ0FSRF9UWVBFU19MSU5LX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX0NFUlRJRklDQVRFX0FORF9QQVNTV09SRF9FTkNPREVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19DRVJUSUZJQ0FURV9FTkNPREVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19EQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX0tJTkRfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfS0lORFNfQllfVEVNUExBVEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfTUFOQUdFX0FDQ0VTU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX05PTkVfRU5DT0RFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfTlVNQkVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1BBU1NXT1JEX0VOQ09ERV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1JFQURPTkxZX0FDQ0VTU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NIRUxMX0xJRkVfVFlQRV9WSUVXX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NJWkVfUkVTVFJJQ1RJT05fUFJJT1JJVFlfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9DSEVDS19BQ0NFU1NfUklHSFRTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfQ09NUFVURVJfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX0RBVEFCQVNFX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9FRElUX0lOX1NUT1JBR0VfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9MT0NBTF9QQVRIX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfU0hBUkVEX1NPVVJDRV9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1RFTVBMQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1RZUEVTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1ZFUlNJT05fQUNUSVZFX1NUQUdFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfVkVSU0lPTl9ERVNJR05fU1RBR0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19WRVJTSU9OX09CU09MRVRFX1NUQUdFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfV1JJVEVfQUNDRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ1VNRU5UX0NBUkRfUkVRVUlTSVRFU19SRUZFUkVOQ0VfQ09ERV9TRUxFQ1RFRF9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VOQ09ERV9DRVJUSUZJQ0FURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VORF9EQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FTlVNRVJBVElPTl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWEVDVVRFX0FDQ0VTU19SSUdIVFNfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWEVDVVRJVkVfRklMRV9TVE9SQUdFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYSVNUX0NPTlNUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWElTVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhQT1JUX0xPQ0tfVFlQRV9BU0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9MT0NLX1RZUEVfV0lUSF9MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWFBPUlRfTE9DS19UWVBFX1dJVEhPVVRfTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhQT1JUX1ZFUlNJT05fVFlQRV9BU0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9WRVJTSU9OX1RZUEVfTEFTVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhQT1JUX1ZFUlNJT05fVFlQRV9MQVNUX0FDVElWRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhURU5TSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GSUxURVJfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GSUxURVJfVFlQRV9DT01NT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1RZUEVfQ09NTU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9UWVBFX1VTRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1RZUEVfVVNFUl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GSUxURVJfVkFMVUVfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZMT0FUX05VTUJFUl9GT1JNQVRfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRkxPQVRfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9BVVRIT1JfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX0FOWV9PQkpFQ1RTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfS0lORF9DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfS0lORF9FRE9DUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfSk9CUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfVEFTS1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX0NPTU1PTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9GQVZPUklURVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX0lOQk9YIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9PVVRCT1ggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX1FVSUNLX0xBVU5DSCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfU0VBUkNIIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9TSE9SVENVVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX1VTRVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZST01fRElDVElPTkFSWV9FTlVNX01FVEhPRF9GTEFHIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GVUxMX1NVQlNUSVRVVEVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVMTF9TVUJTVElUVVRFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fQ0FOQ0VMX1JFU1VMVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fQ0FURUdPUllfU1lTVEVNIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GVU5DVElPTl9DQVRFR09SWV9VU0VSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GVU5DVElPTl9GQUlMVVJFX1JFU1VMVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fU0FWRV9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dFTkVSQVRFRF9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dSRUVOX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfQUNDT1VOVF9UWVBFX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0NBVEVHT1JZX05PUk1BTF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9DQVRFR09SWV9OT1JNQUxfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfQ0FURUdPUllfU0VSVklDRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9DQVRFR09SWV9TRVJWSUNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0NPTU1PTl9DQVRFR09SWV9GSUVMRF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfRlVMTF9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9SSUdIVFNfVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfU0VSVkVSX0NPREVTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9TRVJWRVJfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfU0VSVklDRV9DQVRFR09SWV9GSUVMRF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfVVNFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUFNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hJRERFTl9NT0RFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hJR0hfTFZMX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISVNUT1JZX0FDVElPTl9DUkVBVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSElTVE9SWV9BQ1RJT05fREVMRVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hJU1RPUllfQUNUSU9OX0VESVRfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSE9VUl9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSURTUFNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lNQUdFX01PREVfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lNQUdFX01PREVfR1JFWVNDQUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTUFHRV9NT0RFX01PTk9DSFJPTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lNUE9SVEFOQ0VfSElHSCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU1QT1JUQU5DRV9MT1cgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lNUE9SVEFOQ0VfTk9STUFMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTl9ERVNJR05fVkVSU0lPTl9TVEFURV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTkNPTUlOR19XT1JLX1JVTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTlRfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTlRfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lOVEVHRVJfTlVNQkVSX0ZPUk1BVF9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTlRFR0VSX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSVNfR0VORVJBVEVEX1JFUVVJU0lURV9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSVNfUFVCTElDX1JPTEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1JFTU9URV9VU0VSX05FR0FUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JU19SRU1PVEVfVVNFUl9QT1NJVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSVNfU1RPUkVEX1JFUVVJU0lURV9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSVNfU1RPUkVEX1JFUVVJU0lURV9TVE9SRURfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lUQUxJQ19MSUZFX0NZQ0xFX1NUQUdFX0RSQVdfU1RZTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9CTE9DS19ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX0tJTkRfQ09OVFJPTF9KT0IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9LSU5EX0pPQiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX0tJTkRfTk9USUNFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9KT0JfU1RBVEVfQUJPUlRFRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX1NUQVRFX0NPTVBMRVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9KT0JfU1RBVEVfV09SS0lORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORF9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfQ1JFQVRFX1NIQURPV19DT1BJRVNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX0RFRkFVTFRfRURPQ19MSUZFX1NUQUdFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX0FMTF9URVBMQVRFU19BTExPV0VEX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX0FMTE9XX0xJRkVfQ1lDTEVfU1RBR0VfQ0hBTkdJTkdfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX0VET0NfQUxMT1dfTVVMVElQTEVfQUNUSVZFX1ZFUlNJT05TX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX1NIQVJFX0FDQ0VTX1JJR0hUU19CWV9ERUZBVUxUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX0VET0NfVEVNUExBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX0VET0NfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfU0lHTkVSU19SRVFVSVNJVEVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tPRF9JTlBVVF9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MQVNUX1VQREFURV9EQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSUZFX0NZQ0xFX1NUQVJUX1NUQUdFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSUxBQ19MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0RPQ1VNRU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0VET0MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfRk9MREVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0pPQiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfVEFTSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19SRUZfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElTVF9SRUZFUkVOQ0VfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MT0NBTElaQVRJT05fRElDVElPTkFSWV9NQUlOX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFJTl9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01BTlVBTF9FTlVNX01FVEhPRF9GTEFHIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NQVNURVJfQ09NUF9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NQVNURVJfVEFCTEVfUkVDX0lEX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NQVhJTUlaRURfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVTU0FHRV9BVFRFTlRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVTU0FHRV9DT05GSVJNQVRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVTU0FHRV9FUlJPUl9DQVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NRVNTQUdFX0lORk9STUFUSU9OX0NBUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01JTklNSVpFRF9NT0RFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01JTlVURV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NT0RVTEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01PTklUT1JJTkdfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01PTlRIX0ZPUk1BVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTkFNRV9MT0NBTElaRV9JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTkFNRV9TSU5HVUxBUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTkFNRUFOX0lOUFVUX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05FR0FUSVZFX1BJQ0tfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05FR0FUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OTyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9fUElDS19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9fU0lHTkFUVVJFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9ORV9BQ0NFU1NfUklHSFRTX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9OT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT05PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUVfTUFTQ1VMSU5FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1JNQUxfQUNDRVNTX1JJR0hUU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PUk1BTF9MSUZFX0NZQ0xFX1NUQUdFX0RSQVdfU1RZTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PUk1BTF9NT0RFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PVF9BTExPV0VEX0FDQ0VTU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PVF9BTExPV0VEX0FDQ0VTU19UWVBFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PVElDRV9CTE9DS19ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTlVNX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTlVNX1NUUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTlVNRVJBVElPTl9BVVRPX05PVF9TVFJPTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTUVSQVRJT05fQVVUT19TVFJPTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTUVSQVRJT05fRlJPTV9ESUNUT05BUlkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTUVSQVRJT05fTUFOVUFMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUklDX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTlVNUkVRX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PQlNPTEVURV9WRVJTSU9OX1NUQVRFX1BJQ0tfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9GRU1JTklORSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX01BU0NVTElORSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1BUSU9OQUxfRk9STV9DT01QX1JFUUNPREVfUFJFRklYIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PUkFOR0VfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PUklHSU5BTFJFRl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1VSRklSTV9SRUZfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1VSRklSTV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1VSRklSTV9WQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VVEdPSU5HX1dPUktfUlVMRV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BJQ0tfTkVHQVRJVkVfUkVTVUxUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX1BPU0lUSVZFX1JFU1VMVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUElDS19SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BJQ0tfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BJQ0tfVFlQRV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QTEFOX1NUQVRVU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUExBVEZPUk1fVkVSU0lPTl9DT01NRU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QTFVHSU5TX1NFVFRJTkdTX0RFU0NSSVBUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QT1NJVElWRV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QT1dFUl9UT19DUkVBVEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BPV0VSX1RPX1NJR05fQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BSSU9SSVRZX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9RVUFMSUZJRURfVEFTS19UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9RVUFMSUZJRURfVEFTS19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFQ1NUQVRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRF9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRl9JRF9UX1JFRl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRl9SRVFVSVNJVEVTX1JFRkVSRU5DRV9DT0RFX1NFTEVDVEVEX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGRVJFTkNFX1JFQ09SRF9ISVNUT1JZX0NSRUFURV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGRVJFTkNFX1JFQ09SRF9ISVNUT1JZX0RFTEVURV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGRVJFTkNFX1JFQ09SRF9ISVNUT1JZX01PRElGWV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGRVJFTkNFX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGRVJFTkNFX1RZUEVfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRVNfQUREX1BBUkFNU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGRVJFTkNFU19ESVNQTEFZX1JFUVVJU0lURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVNT1RFX1NFUlZFUl9TVEFUVVNfV09SS0lORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVNT1RFX1NFUlZFUl9UWVBFX01BSU4gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFTU9URV9TRVJWRVJfVFlQRV9TRUNPTkRBUlkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFTU9URV9VU0VSX0ZMQUdfVkFMVUVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVQT1JUX0FQUF9FRElUT1JfSU5URVJOQUwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUE9SVF9CQVNFX1JFUE9SVF9JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVQT1JUX0JBU0VfUkVQT1JUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVBPUlRfU0NSSVBUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVBPUlRfVEVNUExBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUE9SVF9WSUVXRVJfQ09ERV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX0FMTE9XX0NPTVBPTkVOVF9ERUZBVUxUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfQUxMT1dfUkVDT1JEX0RFRkFVTFRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9BTExPV19TRVJWRVJfQ09NUE9ORU5UX0RFRkFVTFRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9NT0RFX0FWQUlMQUJMRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9FRElUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9NT0RFX0hJRERFTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9OT1RfQVZBSUxBQkxFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9NT0RFX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX05VTUJFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX1NFQ1RJT05fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9UWVBFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX0JZX1VOSVQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfREFURV9GVUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX0RBVEVfVElNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9MRUZUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX1JJR0hUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX1dJVEhPVVRfVU5JVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX05VTUJFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fQUNUSU9OUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fQlVUVE9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9CVVRUT05TIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9DQVJEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxMCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxMSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxMiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxMyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxNCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxNSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxNiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxNyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxOCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUxOSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTIwIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTIxIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTIyIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTIzIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTI0IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFNCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU1IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTYgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFNyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU4IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURVNfUFNFVURPUkVGRVJFTkNFX1JFUVVJU0lURV9OVU1CRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JJR0hUX0FMSUdOTUVOVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST0xFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9VVEVfU1RFUF9BRlRFUl9SVVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JPVVRFX1NURVBfQU5EX0NPTkRJVElPTl9SVVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JPVVRFX1NURVBfT1JfQ09ORElUSU9OX1JVUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9VVEVfVFlQRV9DT01QTEVYIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST1VURV9UWVBFX1BBUkFMTEVMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST1VURV9UWVBFX1NFUklBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0JEQVRBU0VUREVTQ19ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0JEQVRBU0VUREVTQ19QT1NJVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0JWSUVXU0RFU0NfUE9TSVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NDUklQVF9CTE9DS19ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIX0JZX1RFWFRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0NPTVBPTkVOVF9DT05URU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19DUklURVJJQV9BQ1RJT05fTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfRURPQ19DT05URU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19GT0xERVJfQ09OVEVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfSk9CX0NPTlRFTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSEVTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19UQVNLX0NPTlRFTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ09ORF9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9BQ1RJT05TX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9DQVJEX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfMV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzJfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF8zX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfNF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF82X1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUxFQ1RfUkVGRVJFTkNFX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VMRUNUX1RZUEVfU0VMRUNUQUJMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VMRUNUX1RZUEVfU0VMRUNUQUJMRV9PTkxZX0NISUxEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUxFQ1RfVFlQRV9TRUxFQ1RBQkxFX1dJVEhfQ0hJTEQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFTEVDVF9UWVBFX1VOU0xFQ1RBQkxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRVJWRVJfVFlQRV9NQUlOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRVJWSUNFX1VTRVJfQ0FURUdPUllfRklFTERfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFVFRJTkdTX1VTRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NJR05BVFVSRV9BTkRfRU5DT0RFX0NFUlRJRklDQVRFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0lHTkFUVVJFX0NFUlRJRklDQVRFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0lOR1VMQVJfVElUTEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NRTF9TRVJWRVJfQVVUSEVOVElGSUNBVElPTl9GTEFHX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NRTF9TRVJWRVJfRU5DT0RFX0FVVEhFTlRJRklDQVRJT05fRkxBR19WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFOREFSVF9ST1VURV9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBTkRBUlRfUk9VVEVfUkVGRVJFTkNFX0NPTU1FTlRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQU5EQVJUX1JPVVRFU19HUk9VUFNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRFX1JFUV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFURV9SRVFVSVNJVEVfQUNUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFURV9SRVFVSVNJVEVfQ0xPU0VEX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVElDX1JPTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfUExBTl9ERUZBVUxUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfQVVUT0NMRUFOSU5HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfQkxVRV9TUVVBUkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9DT01QTEVURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX0dSRUVOX1NRVUFSRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX09SQU5HRV9TUVVBUkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9QVVJQTEVfU1FVQVJFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfUkVEX1NRVUFSRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX1NVU1BFTkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9ZRUxMT1dfU1FVQVJFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVERST1VURV9TSE9XX1RPX1VTRVJTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVE9SQUdFX1RZUEVfRklMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RPUkFHRV9UWVBFX1NRTF9TRVJWRVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUUl9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUUklLRU9VVF9MSUZFX0NZQ0xFX1NUQUdFX0RSQVdfU1RZTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUUklOR19GT1JNQVRfTEVGVF9BTElHTl9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJTkdfRk9STUFUX1JJR0hUX0FMSUdOX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUUklOR19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RSSU5HX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJTkdfVFlQRV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVUJTVElUVVRFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1VCVEFTS19CTE9DS19ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1lTVEVNX1NFVFRJTkdfQ1VSUkVOVF9VU0VSX1BBUkFNX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TWVNURU1fU0VUVElOR19FTVBUWV9WQUxVRV9QQVJBTV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1lTVEVNX1ZFUlNJT05fQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19BQ0NFU1NfVFlQRV9BTEwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfQUNDRVNTX1RZUEVfQUxMX01FTUJFUlMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfQUNDRVNTX1RZUEVfTUFOVUFMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0VOQ09ERV9UWVBFX0NFUlRJRklDQVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfRU5DT0RFX1RZUEVfQ0VSVElGSUNBVElPTl9BTkRfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfRU5DT0RFX1RZUEVfTk9ORSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19FTkNPREVfVFlQRV9QQVNTV09SRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19ST1VURV9BTExfQ09ORElUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1JPVVRFX0FORF9DT05ESVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfUk9VVEVfT1JfQ09ORElUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0FCT1JURUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfQ09NUExFVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfQ09OVElOVUVEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0NPTlRST0wgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfSU5JVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9XT1JLSU5HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1RJVExFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1RZUEVTX0dST1VQU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19UWVBFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVNUExBVEVTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0RBVEVfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfREVWX0RBVEFCQVNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfREVWX1NZU1RFTV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0VETVNfREFUQUJBU0VfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX01BSU5fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX01BSU5fREJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX1NFQ09ORF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0VETVNfU0VDT05EX0RCX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19TWVNURU1fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9OVU1FUklDX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVhUX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVYVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVYVF9SRVFVSVNJVEVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVYVF9UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RZUEVfQ09ERV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVU5ERUZJTkVEX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVU5JVFNfU0VDVElPTl9JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVU5JVFNfU0VDVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVU5PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVU5TVE9SRURfREFUQV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVU5TVE9SRURfREFUQV9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFX0FDQ0VTU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRV9BQ0NFU1NfVFlQRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0FDQ09VTlRfVFlQRV9WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0FERElUSU9OQUxfSU5GT1JNQVRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQU5EX0dST1VQX0lEX0ZST01fUFNFVURPUkVGRVJFTkNFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0NBVEVHT1JZX05PUk1BTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9DRVJUSUZJQ0FURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9DRVJUSUZJQ0FURV9TVEFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9DRVJUSUZJQ0FURV9TVUJKRUNUX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfVEhVTUJQUklOVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9DT01NT05fQ0FURUdPUlkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ09NTU9OX0NBVEVHT1JZX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfRlVMTF9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0dST1VQX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfTE9HSU5fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfUkVNT1RFX0NPTlRST0xMRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfUkVNT1RFX1NZU1RFTV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9SSUdIVFNfVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TRVJWRVJfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TRVJWSUNFX0NBVEVHT1JZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NFUlZJQ0VfQ0FURUdPUllfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfQURNSU5JU1RSQVRPUl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19BRE1JTklTVFJBVE9SX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0RFVkVMT1BFUl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19ERVZFTE9QRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfRElTQUJMRURfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfRElTQUJMRURfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfU1lTVEVNX0RFVkVMT1BFUl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19VU0VSX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX1VTRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfVVNFUl9OQU1FX0RFUFJFQ0FURUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfVFlQRV9GSUVMRF9WQUxVRV9VU0VSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX0NPTlRST0xMRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX0lTX01BSU5fU0VSVkVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfUkVHSVNUUkFUSU9OX0NFUlRJRklDQVRFU19BQ1RJT05fTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1NZU1RFTV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfVVNFUl9BQ0NFU1NfUklHSFRTX1RZUFJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1VTRVJfQVVUSEVOVElDQVRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1VTRVJfQ09NUE9ORU5UX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19VU0VSX0dST1VQX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19WSUVXX0NFUlRJRklDQVRFU19BQ1RJT05fTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVklFV19ERUZBVUxUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1ZJRVdfREVGQVVMVF9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9WSUVXRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dBSVRJTkdfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dJWkFSRF9GT1JNX0xBQkVMX1RFU1RfU1RSSU5HICBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV0laQVJEX1FVRVJZX1BBUkFNX0hFSUdIVF9FVEFMT05fU1RSSU5HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XSVpBUkRfUkVGRVJFTkNFX0NPTU1FTlRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktfUlVMRVNfREVTQ1JJUFRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktfVElNRV9DQUxFTkRBUl9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV09SS19XT1JLRkxPV19IQVJEX1JPVVRFX1RZUEVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktfV09SS0ZMT1dfSEFSRF9ST1VURV9UWVBFX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktfV09SS0ZMT1dfSEFSRF9ST1VURV9UWVBFX1ZBTFVFX0NPREVfUlVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1dPUktGTE9XX1NPRlRfUk9VVEVfVFlQRV9WQUxVRV9DT0RFX1JVUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV09SS0ZMT1dfUk9VVEVfVFlQUl9IQVJEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLRkxPV19ST1VURV9UWVBSX1NPRlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1hNTF9FTkNPRElORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWFJFQ19TVEFUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9YUkVDSURfRklFTERfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ZRVNfTk9fMl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTX05PX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ZRVNfTk9fVF9SRUZfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTX1BJQ0tfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFU19WQUxVRSBcIjtcblxuICAvLyBCYXNlIGNvbnN0YW50XG4gIGNvbnN0IGJhc2VfY29uc3RhbnRzID0gXCJDUiBGQUxTRSBuaWwgTk9fVkFMVUUgTlVMTCBUQUIgVFJVRSBZRVNfVkFMVUUgXCI7XG5cbiAgLy8gQmFzZSBncm91cCBuYW1lXG4gIGNvbnN0IGJhc2VfZ3JvdXBfbmFtZV9jb25zdGFudHMgPVxuICAgIFwiQURNSU5JU1RSQVRPUlNfR1JPVVBfTkFNRSBDVVNUT01JWkVSU19HUk9VUF9OQU1FIERFVkVMT1BFUlNfR1JPVVBfTkFNRSBTRVJWSUNFX1VTRVJTX0dST1VQX05BTUUgXCI7XG5cbiAgLy8gRGVjaXNpb24gYmxvY2sgcHJvcGVydGllc1xuICBjb25zdCBkZWNpc2lvbl9ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyA9XG4gICAgXCJERUNJU0lPTl9CTE9DS19GSVJTVF9PUEVSQU5EX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX05BTUVfUFJPUEVSVFkgREVDSVNJT05fQkxPQ0tfT1BFUkFUSU9OX1BST1BFUlRZIFwiICtcbiAgICBcIkRFQ0lTSU9OX0JMT0NLX1JFU1VMVF9UWVBFX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX1NFQ09ORF9PUEVSQU5EX1BST1BFUlRZIFwiO1xuXG4gIC8vIEZpbGUgZXh0ZW5zaW9uXG4gIGNvbnN0IGZpbGVfZXh0ZW5zaW9uX2NvbnN0YW50cyA9XG4gICAgXCJBTllfRklMRV9FWFRFTlRJT04gQ09NUFJFU1NFRF9ET0NVTUVOVF9FWFRFTlNJT04gRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OIFwiICtcbiAgICBcIlNIT1JUX0NPTVBSRVNTRURfRE9DVU1FTlRfRVhURU5TSU9OIFNIT1JUX0VYVEVOREVEX0RPQ1VNRU5UX0VYVEVOU0lPTiBcIjtcblxuICAvLyBKb2IgYmxvY2sgcHJvcGVydGllc1xuICBjb25zdCBqb2JfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiSk9CX0JMT0NLX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FGVEVSX1FVRVJZX1BBUkFNRVRFUlNfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FUVEFDSE1FTlRfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19HUk9VUF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0JFRk9SRV9RVUVSWV9QQVJBTUVURVJTX0VWRU5UIFwiICtcbiAgICBcIkpPQl9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0NSRUFURURfSk9CU19QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0VYRUNVVElPTl9SRVNVTFRTX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19JU19QQVJBTExFTF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfSVNfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19KT0JfVEVYVF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfTkVFRF9TSUdOX09OX1BFUkZPUk1fUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX1BFUkZPUk1FUl9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIjtcblxuICAvLyBMYW5ndWFnZSBjb2RlXG4gIGNvbnN0IGxhbmd1YWdlX2NvZGVfY29uc3RhbnRzID0gXCJFTkdMSVNIX0xBTkdVQUdFX0NPREUgUlVTU0lBTl9MQU5HVUFHRV9DT0RFIFwiO1xuXG4gIC8vIExhdW5jaGluZyBleHRlcm5hbCBhcHBsaWNhdGlvbnNcbiAgY29uc3QgbGF1bmNoaW5nX2V4dGVybmFsX2FwcGxpY2F0aW9uc19jb25zdGFudHMgPVxuICAgIFwic21IaWRkZW4gc21NYXhpbWl6ZWQgc21NaW5pbWl6ZWQgc21Ob3JtYWwgd21ObyB3bVllcyBcIjtcblxuICAvLyBMaW5rIGtpbmRcbiAgY29uc3QgbGlua19raW5kX2NvbnN0YW50cyA9XG4gICAgXCJDT01QT05FTlRfVE9LRU5fTElOS19LSU5EIFwiICtcbiAgICBcIkRPQ1VNRU5UX0xJTktfS0lORCBcIiArXG4gICAgXCJFRE9DVU1FTlRfTElOS19LSU5EIFwiICtcbiAgICBcIkZPTERFUl9MSU5LX0tJTkQgXCIgK1xuICAgIFwiSk9CX0xJTktfS0lORCBcIiArXG4gICAgXCJSRUZFUkVOQ0VfTElOS19LSU5EIFwiICtcbiAgICBcIlRBU0tfTElOS19LSU5EIFwiO1xuXG4gIC8vIExvY2sgdHlwZVxuICBjb25zdCBsb2NrX3R5cGVfY29uc3RhbnRzID1cbiAgICBcIkNPTVBPTkVOVF9UT0tFTl9MT0NLX1RZUEUgRURPQ1VNRU5UX1ZFUlNJT05fTE9DS19UWVBFIFwiO1xuXG4gIC8vIE1vbml0b3IgYmxvY2sgcHJvcGVydGllc1xuICBjb25zdCBtb25pdG9yX2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzID1cbiAgICBcIk1PTklUT1JfQkxPQ0tfQUZURVJfRklOSVNIX0VWRU5UIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19JTlRFUlZBTF9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX0lOVEVSVkFMX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19JU19SRUxBVElWRV9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX05BTUVfUFJPUEVSVFkgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19SRUxBVElWRV9ERUFETElORV9UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfU0VBUkNIX1NDUklQVF9QUk9QRVJUWSBcIjtcblxuICAvLyBOb3RpY2UgYmxvY2sgcHJvcGVydGllc1xuICBjb25zdCBub3RpY2VfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiTk9USUNFX0JMT0NLX0FGVEVSX0ZJTklTSF9FVkVOVCBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVF9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX0dST1VQX1BST1BFUlRZIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19BVFRBQ0hNRU5UU19SSUdIVFNfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19DUkVBVEVEX05PVElDRVNfUFJPUEVSVFkgXCIgK1xuICAgIFwiTk9USUNFX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19JU19SRUxBVElWRV9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfTk9USUNFX1RFWFRfUFJPUEVSVFkgXCIgK1xuICAgIFwiTk9USUNFX0JMT0NLX1BFUkZPUk1FUl9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIjtcblxuICAvLyBPYmplY3QgZXZlbnRzXG4gIGNvbnN0IG9iamVjdF9ldmVudHNfY29uc3RhbnRzID1cbiAgICBcImRzZUFmdGVyQ2FuY2VsIFwiICtcbiAgICBcImRzZUFmdGVyQ2xvc2UgXCIgK1xuICAgIFwiZHNlQWZ0ZXJEZWxldGUgXCIgK1xuICAgIFwiZHNlQWZ0ZXJEZWxldGVPdXRPZlRyYW5zYWN0aW9uIFwiICtcbiAgICBcImRzZUFmdGVySW5zZXJ0IFwiICtcbiAgICBcImRzZUFmdGVyT3BlbiBcIiArXG4gICAgXCJkc2VBZnRlclNjcm9sbCBcIiArXG4gICAgXCJkc2VBZnRlclVwZGF0ZSBcIiArXG4gICAgXCJkc2VBZnRlclVwZGF0ZU91dE9mVHJhbnNhY3Rpb24gXCIgK1xuICAgIFwiZHNlQmVmb3JlQ2FuY2VsIFwiICtcbiAgICBcImRzZUJlZm9yZUNsb3NlIFwiICtcbiAgICBcImRzZUJlZm9yZURlbGV0ZSBcIiArXG4gICAgXCJkc2VCZWZvcmVEZXRhaWxVcGRhdGUgXCIgK1xuICAgIFwiZHNlQmVmb3JlSW5zZXJ0IFwiICtcbiAgICBcImRzZUJlZm9yZU9wZW4gXCIgK1xuICAgIFwiZHNlQmVmb3JlVXBkYXRlIFwiICtcbiAgICBcImRzZU9uQW55UmVxdWlzaXRlQ2hhbmdlIFwiICtcbiAgICBcImRzZU9uQ2xvc2VSZWNvcmQgXCIgK1xuICAgIFwiZHNlT25EZWxldGVFcnJvciBcIiArXG4gICAgXCJkc2VPbk9wZW5SZWNvcmQgXCIgK1xuICAgIFwiZHNlT25QcmVwYXJlVXBkYXRlIFwiICtcbiAgICBcImRzZU9uVXBkYXRlRXJyb3IgXCIgK1xuICAgIFwiZHNlT25VcGRhdGVSYXRpZmllZFJlY29yZCBcIiArXG4gICAgXCJkc2VPblZhbGlkRGVsZXRlIFwiICtcbiAgICBcImRzZU9uVmFsaWRVcGRhdGUgXCIgK1xuICAgIFwicmVPbkNoYW5nZSBcIiArXG4gICAgXCJyZU9uQ2hhbmdlVmFsdWVzIFwiICtcbiAgICBcIlNFTEVDVElPTl9CRUdJTl9ST1VURV9FVkVOVCBcIiArXG4gICAgXCJTRUxFQ1RJT05fRU5EX1JPVVRFX0VWRU5UIFwiO1xuXG4gIC8vIE9iamVjdCBwYXJhbXNcbiAgY29uc3Qgb2JqZWN0X3BhcmFtc19jb25zdGFudHMgPVxuICAgIFwiQ1VSUkVOVF9QRVJJT0RfSVNfUkVRVUlSRUQgXCIgK1xuICAgIFwiUFJFVklPVVNfQ0FSRF9UWVBFX05BTUUgXCIgK1xuICAgIFwiU0hPV19SRUNPUkRfUFJPUEVSVElFU19GT1JNIFwiO1xuXG4gIC8vIE90aGVyXG4gIGNvbnN0IG90aGVyX2NvbnN0YW50cyA9XG4gICAgXCJBQ0NFU1NfUklHSFRTX1NFVFRJTkdfRElBTE9HX0NPREUgXCIgK1xuICAgIFwiQURNSU5JU1RSQVRPUl9VU0VSX0NPREUgXCIgK1xuICAgIFwiQU5BTFlUSUNfUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiYXNydEhpZGVMb2NhbCBcIiArXG4gICAgXCJhc3J0SGlkZVJlbW90ZSBcIiArXG4gICAgXCJDQUxDVUxBVEVEX1JPTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIkNPTVBPTkVOVFNfUkVGRVJFTkNFX0RFVkVMT1BFUl9WSUVXX0NPREUgXCIgK1xuICAgIFwiRENUU19URVNUX1BST1RPQ09MU19GT0xERVJfUEFUSCBcIiArXG4gICAgXCJFX0VET0NfVkVSU0lPTl9BTFJFQURZX0FQUFJPVklOR0xZX1NJR05FRCBcIiArXG4gICAgXCJFX0VET0NfVkVSU0lPTl9BTFJFQURZX0FQUFJPVklOR0xZX1NJR05FRF9CWV9VU0VSIFwiICtcbiAgICBcIkVfRURPQ19WRVJTSU9OX0FMUkVEWV9TSUdORUQgXCIgK1xuICAgIFwiRV9FRE9DX1ZFUlNJT05fQUxSRURZX1NJR05FRF9CWV9VU0VSIFwiICtcbiAgICBcIkVET0NfVFlQRVNfQ09ERV9SRVFVSVNJVEVfRklFTERfTkFNRSBcIiArXG4gICAgXCJFRE9DVU1FTlRTX0FMSUFTX05BTUUgXCIgK1xuICAgIFwiRklMRVNfRk9MREVSX1BBVEggXCIgK1xuICAgIFwiRklMVEVSX09QRVJBTkRTX0RFTElNSVRFUiBcIiArXG4gICAgXCJGSUxURVJfT1BFUkFUSU9OU19ERUxJTUlURVIgXCIgK1xuICAgIFwiRk9STUNBUkRfTkFNRSBcIiArXG4gICAgXCJGT1JNTElTVF9OQU1FIFwiICtcbiAgICBcIkdFVF9FWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT05fQ1JFQVRJT05fTU9ERSBcIiArXG4gICAgXCJHRVRfRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OX0lNUE9SVF9NT0RFIFwiICtcbiAgICBcIklOVEVHUkFURURfUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiSVNfQlVJTERFUl9BUFBMSUNBVElPTl9ST0xFIFwiICtcbiAgICBcIklTX0JVSUxERVJfQVBQTElDQVRJT05fUk9MRTIgXCIgK1xuICAgIFwiSVNfQlVJTERFUl9VU0VSUyBcIiArXG4gICAgXCJJU0JTWVNERVYgXCIgK1xuICAgIFwiTE9HX0ZPTERFUl9QQVRIIFwiICtcbiAgICBcIm1iQ2FuY2VsIFwiICtcbiAgICBcIm1iTm8gXCIgK1xuICAgIFwibWJOb1RvQWxsIFwiICtcbiAgICBcIm1iT0sgXCIgK1xuICAgIFwibWJZZXMgXCIgK1xuICAgIFwibWJZZXNUb0FsbCBcIiArXG4gICAgXCJNRU1PUllfREFUQVNFVF9ERVNSSVBUSU9OU19GSUxFTkFNRSBcIiArXG4gICAgXCJtck5vIFwiICtcbiAgICBcIm1yTm9Ub0FsbCBcIiArXG4gICAgXCJtclllcyBcIiArXG4gICAgXCJtclllc1RvQWxsIFwiICtcbiAgICBcIk1VTFRJUExFX1NFTEVDVF9ESUFMT0dfQ09ERSBcIiArXG4gICAgXCJOT05PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfRkVNSU5JTkUgXCIgK1xuICAgIFwiTk9OT1BFUkFUSU5HX1JFQ09SRF9GTEFHX01BU0NVTElORSBcIiArXG4gICAgXCJPUEVSQVRJTkdfUkVDT1JEX0ZMQUdfRkVNSU5JTkUgXCIgK1xuICAgIFwiT1BFUkFUSU5HX1JFQ09SRF9GTEFHX01BU0NVTElORSBcIiArXG4gICAgXCJQUk9GSUxJTkdfU0VUVElOR1NfQ09NTU9OX1NFVFRJTkdTX0NPREVfVkFMVUUgXCIgK1xuICAgIFwiUFJPR1JBTV9JTklUSUFURURfTE9PS1VQX0FDVElPTiBcIiArXG4gICAgXCJyYXREZWxldGUgXCIgK1xuICAgIFwicmF0RWRpdCBcIiArXG4gICAgXCJyYXRJbnNlcnQgXCIgK1xuICAgIFwiUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiUkVRVUlSRURfUElDS19WQUxVRVNfVkFSSUFCTEUgXCIgK1xuICAgIFwicm1DYXJkIFwiICtcbiAgICBcInJtTGlzdCBcIiArXG4gICAgXCJTQlJURV9QUk9HSURfREVWIFwiICtcbiAgICBcIlNCUlRFX1BST0dJRF9SRUxFQVNFIFwiICtcbiAgICBcIlNUQVRJQ19ST0xFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTVVBQUkVTU19FTVBUWV9URU1QTEFURV9DUkVBVElPTiBcIiArXG4gICAgXCJTWVNURU1fVVNFUl9DT0RFIFwiICtcbiAgICBcIlVQREFURV9ESUFMT0dfREFUQVNFVCBcIiArXG4gICAgXCJVU0VEX0lOX09CSkVDVF9ISU5UX1BBUkFNIFwiICtcbiAgICBcIlVTRVJfSU5JVElBVEVEX0xPT0tVUF9BQ1RJT04gXCIgK1xuICAgIFwiVVNFUl9OQU1FX0ZPUk1BVCBcIiArXG4gICAgXCJVU0VSX1NFTEVDVElPTl9SRVNUUklDVElPTlMgXCIgK1xuICAgIFwiV09SS0ZMT1dfVEVTVF9QUk9UT0NPTFNfRk9MREVSX1BBVEggXCIgK1xuICAgIFwiRUxTX1NVQlRZUEVfQ09OVFJPTF9OQU1FIFwiICtcbiAgICBcIkVMU19GT0xERVJfS0lORF9DT05UUk9MX05BTUUgXCIgK1xuICAgIFwiUkVQRUFUX1BST0NFU1NfQ1VSUkVOVF9PQkpFQ1RfRVhDRVBUSU9OX05BTUUgXCI7XG5cbiAgLy8gUHJpdmlsZWdlc1xuICBjb25zdCBwcml2aWxlZ2VzX2NvbnN0YW50cyA9XG4gICAgXCJQUklWSUxFR0VfQ09NUE9ORU5UX0ZVTExfQUNDRVNTIFwiICtcbiAgICBcIlBSSVZJTEVHRV9ERVZFTE9QTUVOVF9FWFBPUlQgXCIgK1xuICAgIFwiUFJJVklMRUdFX0RFVkVMT1BNRU5UX0lNUE9SVCBcIiArXG4gICAgXCJQUklWSUxFR0VfRE9DVU1FTlRfREVMRVRFIFwiICtcbiAgICBcIlBSSVZJTEVHRV9FU0QgXCIgK1xuICAgIFwiUFJJVklMRUdFX0ZPTERFUl9ERUxFVEUgXCIgK1xuICAgIFwiUFJJVklMRUdFX01BTkFHRV9BQ0NFU1NfUklHSFRTIFwiICtcbiAgICBcIlBSSVZJTEVHRV9NQU5BR0VfUkVQTElDQVRJT04gXCIgK1xuICAgIFwiUFJJVklMRUdFX01BTkFHRV9TRVNTSU9OX1NFUlZFUiBcIiArXG4gICAgXCJQUklWSUxFR0VfT0JKRUNUX0ZVTExfQUNDRVNTIFwiICtcbiAgICBcIlBSSVZJTEVHRV9PQkpFQ1RfVklFVyBcIiArXG4gICAgXCJQUklWSUxFR0VfUkVTRVJWRV9MSUNFTlNFIFwiICtcbiAgICBcIlBSSVZJTEVHRV9TWVNURU1fQ1VTVE9NSVpFIFwiICtcbiAgICBcIlBSSVZJTEVHRV9TWVNURU1fREVWRUxPUCBcIiArXG4gICAgXCJQUklWSUxFR0VfU1lTVEVNX0lOU1RBTEwgXCIgK1xuICAgIFwiUFJJVklMRUdFX1RBU0tfREVMRVRFIFwiICtcbiAgICBcIlBSSVZJTEVHRV9VU0VSX1BMVUdJTl9TRVRUSU5HU19DVVNUT01JWkUgXCIgK1xuICAgIFwiUFJJVklMRUdFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIjtcblxuICAvLyBQc2V1ZG9yZWZlcmVuY2UgY29kZVxuICBjb25zdCBwc2V1ZG9yZWZlcmVuY2VfY29kZV9jb25zdGFudHMgPVxuICAgIFwiQUNDRVNTX1RZUEVTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkFMTF9BVkFJTEFCTEVfQ09NUE9ORU5UU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJBTExfQVZBSUxBQkxFX1BSSVZJTEVHRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiQUxMX1JFUExJQ0FURV9DT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkFWQUlMQUJMRV9ERVZFTE9QRVJTX0NPTVBPTkVOVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiQ09NUE9ORU5UU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJGSUxUUkFURVJfU0VUVElOR1NfQ09ORkxJQ1RTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkdST1VQU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRUNFSVZFX1BST1RPQ09MX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlJFRkVSRU5DRV9SRVFVSVNJVEVfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiUkVGRVJFTkNFX1JFUVVJU0lURVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiUkVGVFlQRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiUkVQTElDQVRJT05fU0VBTkNFU19ESUFSWV9QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTRU5EX1BST1RPQ09MX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNVQlNUSVRVVEVTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1RFTV9TRVRUSU5HU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJVTklUU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJVU0VSU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJWSUVXRVJTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiO1xuXG4gIC8vIFJlcXVpc2l0ZSBJU0JDZXJ0aWZpY2F0ZVR5cGUgdmFsdWVzXG4gIGNvbnN0IHJlcXVpc2l0ZV9JU0JDZXJ0aWZpY2F0ZVR5cGVfdmFsdWVzX2NvbnN0YW50cyA9XG4gICAgXCJDRVJUSUZJQ0FURV9UWVBFX0VOQ1JZUFQgXCIgK1xuICAgIFwiQ0VSVElGSUNBVEVfVFlQRV9TSUdOIFwiICtcbiAgICBcIkNFUlRJRklDQVRFX1RZUEVfU0lHTl9BTkRfRU5DUllQVCBcIjtcblxuICAvLyBSZXF1aXNpdGUgSVNCRURvY1N0b3JhZ2VUeXBlIHZhbHVlc1xuICBjb25zdCByZXF1aXNpdGVfSVNCRURvY1N0b3JhZ2VUeXBlX3ZhbHVlc19jb25zdGFudHMgPVxuICAgIFwiU1RPUkFHRV9UWVBFX0ZJTEUgXCIgK1xuICAgIFwiU1RPUkFHRV9UWVBFX05BU19DSUZTIFwiICtcbiAgICBcIlNUT1JBR0VfVFlQRV9TQVBFUklPTiBcIiArXG4gICAgXCJTVE9SQUdFX1RZUEVfU1FMX1NFUlZFUiBcIjtcblxuICAvLyBSZXF1aXNpdGUgQ29tcFR5cGUyIHZhbHVlc1xuICBjb25zdCByZXF1aXNpdGVfY29tcFR5cGUyX3ZhbHVlc19jb25zdGFudHMgPVxuICAgIFwiQ09NUFRZUEUyX1JFUVVJU0lURV9ET0NVTUVOVFNfVkFMVUUgXCIgK1xuICAgIFwiQ09NUFRZUEUyX1JFUVVJU0lURV9UQVNLU19WQUxVRSBcIiArXG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX0ZPTERFUlNfVkFMVUUgXCIgK1xuICAgIFwiQ09NUFRZUEUyX1JFUVVJU0lURV9SRUZFUkVOQ0VTX1ZBTFVFIFwiO1xuXG4gIC8vIFJlcXVpc2l0ZSBuYW1lXG4gIGNvbnN0IHJlcXVpc2l0ZV9uYW1lX2NvbnN0YW50cyA9XG4gICAgXCJTWVNSRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfQ09NUFRZUEUyIFwiICtcbiAgICBcIlNZU1JFUV9DT05TVF9BVkFJTEFCTEVfRk9SX1dFQiBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfQ09NTU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0NPTlNUX0NPTU1PTl9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfRklSTV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9DT05TVF9GSVJNX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfRklSTV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfU0VSVkVSX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfQ09OVEVOVFMgXCIgK1xuICAgIFwiU1lTUkVRX0RBVEVfT1BFTiBcIiArXG4gICAgXCJTWVNSRVFfREFURV9DTE9TRSBcIiArXG4gICAgXCJTWVNSRVFfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVRX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9ET1VCTEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfQUNDRVNTX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfQVVUSE9SIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0NSRUFURUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfREVMRUdBVEVfUklHSFRTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0VESVRPUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19FTkNPREVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19FTkNSWVBUSU9OX1BMVUdJTl9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0VOQ1JZUFRJT05fUExVR0lOX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfRVhQT1JUX0RBVEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfRVhQT1JURVIgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19MSUZFX1NUQUdFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfTE9DS0VEX0ZPUl9TRVJWRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19NT0RJRklFRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX05PVEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfUVVBTElGSUVEX0lEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NFU1NJT05fS0VZIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NFU1NJT05fS0VZX0VOQ1JZUFRJT05fUExVR0lOX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU0VTU0lPTl9LRVlfRU5DUllQVElPTl9QTFVHSU5fVkVSU0lPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TSUdOQVRVUkVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TSUdORUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19BUkNISVZFX1NUT1JBR0UgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfQ0hFQ0tfUklHSFRTIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0NPTVBVVEVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfRURJVF9JTl9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0VYRUNVVElWRV9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0ZVTkNUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0lOSVRJQUxJWkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0xPQ0FMX1BBVEggXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfU0FQRVJJT05fREFUQUJBU0VfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TRUFSQ0hfQllfVEVYVCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TRVJWRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TSEFSRURfU09VUkNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19URVhUX01PRElGSUVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfQUNUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfREVTQ1JJUFRJT05fTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfT05fRVhFQ1VURSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0FDVF9PTl9FWEVDVVRFX0VYSVNUUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0FDVF9TRUNUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfQUREX1BBUkFNUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9FVkVOVF9URVhUIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfTkFNRV9JTl9TSU5HVUxBUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX05BTUVfSU5fU0lOR1VMQVJfTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9OQU1FX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfTlVNRVJBVElPTl9NRVRIT0QgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9QU0VVRE9fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9ERVNDUklQVElPTl9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9JU19MRUFESU5HIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfUkVRX0lTX1JFUVVJUkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfUkVRX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9PTl9DSEFOR0UgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fQ0hBTkdFX0VYSVNUUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9PTl9TRUxFQ1QgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fU0VMRUNUX0tJTkQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfSVNfTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfTkFNRV9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0FVVEhPUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0NSQyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0RBVEEgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVkVSU0lPTl9FRElUT1IgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVkVSU0lPTl9FWFBPUlRfREFURSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0VYUE9SVEVSIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fSElEREVOIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fTElGRV9TVEFHRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX01PRElGSUVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fTk9URSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1NJR05BVFVSRV9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fU0lHTkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fU0laRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1NPVVJDRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1RFWFRfTU9ESUZJRUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NLSU5EX0RFRkFVTFRfVkVSU0lPTl9TVEFURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9GT0xERVJfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19DT01NRU5UIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0dST1VQIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0dST1VQX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX0ZVTkNfR1JPVVBfTlVNQkVSIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0hFTFAgXCIgK1xuICAgIFwiU1lTUkVRX0ZVTkNfUEFSQU1fREVGX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1BBUkFNX0lERU5UIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1BBUkFNX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1RFWFQgXCIgK1xuICAgIFwiU1lTUkVRX0dST1VQX0NBVEVHT1JZIFwiICtcbiAgICBcIlNZU1JFUV9JRCBcIiArXG4gICAgXCJTWVNSRVFfTEFTVF9VUERBVEUgXCIgK1xuICAgIFwiU1lTUkVRX0xFQURFUl9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVRX0xJTkVfTlVNQkVSIFwiICtcbiAgICBcIlNZU1JFUV9NQUlOX1JFQ09SRF9JRCBcIiArXG4gICAgXCJTWVNSRVFfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfTkFNRV9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfTk9URSBcIiArXG4gICAgXCJTWVNSRVFfT1JJR0lOQUxfUkVDT1JEIFwiICtcbiAgICBcIlNZU1JFUV9PVVJfRklSTSBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX0JBVENIX0xPR0lORyBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX0JBVENIX1NJWkUgXCIgK1xuICAgIFwiU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19QUk9GSUxJTkdfRU5BQkxFRCBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX1NRTF9QUk9GSUxJTkdfRU5BQkxFRCBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX1NUQVJUX0xPR0dFRCBcIiArXG4gICAgXCJTWVNSRVFfUkVDT1JEX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9GSUVMRF9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX0ZPUk1BVCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9HRU5FUkFURUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfTEVOR1RIIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX1BSRUNJU0lPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9TVE9SRUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfVE9LRU5TIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfVklFVyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX0FDVF9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9BQ1RfT05fRVhFQ1VURSBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX09OX0VYRUNVVEVfRVhJU1RTIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9BQ1RfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUREX1BBUkFNUyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQ09NTU9OX1NFVFRJTkdTIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9ESVNQTEFZX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9FVkVOVF9URVhUIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9NQUlOX0xFQURJTkdfUkVGIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0lOX1NJTkdVTEFSIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0lOX1NJTkdVTEFSX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OVU1FUkFUSU9OX01FVEhPRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9SRVFfSVNfQ09OVFJPTCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0ZJTFRFUiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0xFQURJTkcgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9JU19SRVFVSVJFRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX09OX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX09OX0NIQU5HRV9FWElTVFMgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9TRUxFQ1QgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9TRUxFQ1RfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX1NFQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1ZJRVdfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9WSUVXX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1ZJRVdfSVNfTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfVklFV19OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9WSUVXX05BTUVfTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRkVSRU5DRV9UWVBFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9TVEFURSBcIiArXG4gICAgXCJTWVNSRVFfU1RBVNCVIFwiICtcbiAgICBcIlNZU1JFUV9TWVNURU1fU0VUVElOR1NfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVRX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX1VOSVQgXCIgK1xuICAgIFwiU1lTUkVRX1VOSVRfSUQgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJfR1JPVVBTX0dST1VQX0ZVTExfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUl9HUk9VUFNfR1JPVVBfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUl9HUk9VUFNfR1JPVVBfU0VSVkVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0FVVEhFTlRJQ0FUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19DT01QT05FTlRfVVNFUl9JU19QVUJMSUMgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0RPTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfRlVMTF9VU0VSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0dST1VQIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19JU19NQUlOX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfTE9HSU4gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1JFRkVSRU5DRV9VU0VSX0lTX1BVQkxJQyBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfU1RBVFVTIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX0lORk8gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfUExVR0lOX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfUExVR0lOX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfU1RBVEUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfU1VCSkVDVF9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1RIVU1CUFJJTlQgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfREVGQVVMVF9DRVJUSUZJQ0FURSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9HTE9CQUxfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9MT0dJTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9NQUlOX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9XT1JLX1JVTEVTX0ZPTERFUl9JRCBcIjtcblxuICAvLyBSZXN1bHRcbiAgY29uc3QgcmVzdWx0X2NvbnN0YW50cyA9IFwiUkVTVUxUX1ZBUl9OQU1FIFJFU1VMVF9WQVJfTkFNRV9FTkcgXCI7XG5cbiAgLy8gUnVsZSBpZGVudGlmaWNhdGlvblxuICBjb25zdCBydWxlX2lkZW50aWZpY2F0aW9uX2NvbnN0YW50cyA9XG4gICAgXCJBVVRPX05VTUVSQVRJT05fUlVMRV9JRCBcIiArXG4gICAgXCJDQU5UX0NIQU5HRV9JRF9SRVFVSVNJVEVfUlVMRV9JRCBcIiArXG4gICAgXCJDQU5UX0NIQU5HRV9PVVJGSVJNX1JFUVVJU0lURV9SVUxFX0lEIFwiICtcbiAgICBcIkNIRUNLX0NIQU5HSU5HX1JFRkVSRU5DRV9SRUNPUkRfVVNFX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfQ09ERV9SRVFVSVNJVEVfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19ERUxFVElOR19SRUZFUkVOQ0VfUkVDT1JEX1VTRV9SVUxFX0lEIFwiICtcbiAgICBcIkNIRUNLX0ZJTFRSQVRFUl9DSEFOR0VTX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfUkVDT1JEX0lOVEVSVkFMX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfUkVGRVJFTkNFX0lOVEVSVkFMX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfUkVRVUlSRURfREFUQV9GVUxMTkVTU19SVUxFX0lEIFwiICtcbiAgICBcIkNIRUNLX1JFUVVJUkVEX1JFUVVJU0lURVNfRlVMTE5FU1NfUlVMRV9JRCBcIiArXG4gICAgXCJNQUtFX1JFQ09SRF9VTlJBVElGSUVEX1JVTEVfSUQgXCIgK1xuICAgIFwiUkVTVE9SRV9BVVRPX05VTUVSQVRJT05fUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfRklSTV9DT05URVhUX0ZST01fUkVDT1JEX1JVTEVfSUQgXCIgK1xuICAgIFwiU0VUX0ZJUlNUX1JFQ09SRF9JTl9MSVNUX0ZPUk1fUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfSURTUFNfVkFMVUVfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfTkVYVF9DT0RFX1ZBTFVFX1JVTEVfSUQgXCIgK1xuICAgIFwiU0VUX09VUkZJUk1fQk9VTkRTX1JVTEVfSUQgXCIgK1xuICAgIFwiU0VUX09VUkZJUk1fUkVRVUlTSVRFX1JVTEVfSUQgXCI7XG5cbiAgLy8gU2NyaXB0IGJsb2NrIHByb3BlcnRpZXNcbiAgY29uc3Qgc2NyaXB0X2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzID1cbiAgICBcIlNDUklQVF9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX0JFRk9SRV9TVEFSVF9FVkVOVCBcIiArXG4gICAgXCJTQ1JJUFRfQkxPQ0tfRVhFQ1VUSU9OX1JFU1VMVFNfUFJPUEVSVFkgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX05BTUVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX1NDUklQVF9QUk9QRVJUWSBcIjtcblxuICAvLyBTdWJ0YXNrIGJsb2NrIHByb3BlcnRpZXNcbiAgY29uc3Qgc3VidGFza19ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyA9XG4gICAgXCJTVUJUQVNLX0JMT0NLX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQUZURVJfRklOSVNIX0VWRU5UIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQVNTSUdOX1BBUkFNU19FVkVOVCBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FUVEFDSE1FTlRTX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX0dST1VQX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19DUkVBVEVEX1RBU0tfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19DUkVBVElPTl9FVkVOVCBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfSU1QT1JUQU5DRV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0lOSVRJQVRPUl9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0lTX1JFTEFUSVZFX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfSVNfUkVMQVRJVkVfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19KT0JTX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19OQU1FX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfUEFSQUxMRUxfUk9VVEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19QRVJGT1JNRVJTX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19SRVFVSVJFX1NJR05fUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19TVEFOREFSRF9ST1VURV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfU1RFUF9DT05UUk9MX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1RBU0tfQ09OVFJPTF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1RFWFRfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19VTkxPQ0tfQVRUQUNITUVOVFNfT05fU1RPUF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1VTRV9TVEFOREFSRF9ST1VURV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1dBSVRfRk9SX1RBU0tfQ09NUExFVEVfUFJPUEVSVFkgXCI7XG5cbiAgLy8gU3lzdGVtIGNvbXBvbmVudFxuICBjb25zdCBzeXN0ZW1fY29tcG9uZW50X2NvbnN0YW50cyA9XG4gICAgXCJTWVNDT01QX0NPTlRST0xfSk9CUyBcIiArXG4gICAgXCJTWVNDT01QX0ZPTERFUlMgXCIgK1xuICAgIFwiU1lTQ09NUF9KT0JTIFwiICtcbiAgICBcIlNZU0NPTVBfTk9USUNFUyBcIiArXG4gICAgXCJTWVNDT01QX1RBU0tTIFwiO1xuXG4gIC8vIFN5c3RlbSBkaWFsb2dzXG4gIGNvbnN0IHN5c3RlbV9kaWFsb2dzX2NvbnN0YW50cyA9XG4gICAgXCJTWVNETEdfQ1JFQVRFX0VET0NVTUVOVCBcIiArXG4gICAgXCJTWVNETEdfQ1JFQVRFX0VET0NVTUVOVF9WRVJTSU9OIFwiICtcbiAgICBcIlNZU0RMR19DVVJSRU5UX1BFUklPRCBcIiArXG4gICAgXCJTWVNETEdfRURJVF9GVU5DVElPTl9IRUxQIFwiICtcbiAgICBcIlNZU0RMR19FRE9DVU1FTlRfS0lORFNfRk9SX1RFTVBMQVRFIFwiICtcbiAgICBcIlNZU0RMR19FWFBPUlRfTVVMVElQTEVfRURPQ1VNRU5UUyBcIiArXG4gICAgXCJTWVNETEdfRVhQT1JUX1NJTkdMRV9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX0lNUE9SVF9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX01VTFRJUExFX1NFTEVDVCBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfREVGQVVMVF9SSUdIVFMgXCIgK1xuICAgIFwiU1lTRExHX1NFVFVQX0ZJTFRFUl9DT05ESVRJT04gXCIgK1xuICAgIFwiU1lTRExHX1NFVFVQX1NJR05fUklHSFRTIFwiICtcbiAgICBcIlNZU0RMR19TRVRVUF9UQVNLX09CU0VSVkVSUyBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfVEFTS19ST1VURSBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfVVNFUlNfTElTVCBcIiArXG4gICAgXCJTWVNETEdfU0lHTl9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX1NJR05fTVVMVElQTEVfRURPQ1VNRU5UUyBcIjtcblxuICAvLyBTeXN0ZW0gcmVmZXJlbmNlIG5hbWVzXG4gIGNvbnN0IHN5c3RlbV9yZWZlcmVuY2VfbmFtZXNfY29uc3RhbnRzID1cbiAgICBcIlNZU1JFRl9BQ0NFU1NfUklHSFRTX1RZUEVTIFwiICtcbiAgICBcIlNZU1JFRl9BRE1JTklTVFJBVElPTl9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9BTExfQVZBSUxBQkxFX0NPTVBPTkVOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0FMTF9BVkFJTEFCTEVfUFJJVklMRUdFUyBcIiArXG4gICAgXCJTWVNSRUZfQUxMX1JFUExJQ0FUSU5HX0NPTVBPTkVOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0FWQUlMQUJMRV9ERVZFTE9QRVJTX0NPTVBPTkVOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0NBTEVOREFSX0VWRU5UUyBcIiArXG4gICAgXCJTWVNSRUZfQ09NUE9ORU5UX1RPS0VOX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX0NPTVBPTkVOVF9UT0tFTlMgXCIgK1xuICAgIFwiU1lTUkVGX0NPTVBPTkVOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0NPTlNUQU5UUyBcIiArXG4gICAgXCJTWVNSRUZfREFUQV9SRUNFSVZFX1BST1RPQ09MIFwiICtcbiAgICBcIlNZU1JFRl9EQVRBX1NFTkRfUFJPVE9DT0wgXCIgK1xuICAgIFwiU1lTUkVGX0RJQUxPR1MgXCIgK1xuICAgIFwiU1lTUkVGX0RJQUxPR1NfUkVRVUlTSVRFUyBcIiArXG4gICAgXCJTWVNSRUZfRURJVE9SUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ19DQVJEUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ19UWVBFUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX0NBUkRfUkVRVUlTSVRFUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX0NBUkRfVFlQRVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEX1RZUEVTX1JFRkVSRU5DRSBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX0NBUkRTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfSElTVE9SWSBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX0tJTkRTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfUkVRVUlTSVRFUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX1NJR05BVFVSRVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9URU1QTEFURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9URVhUX1NUT1JBR0VTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfVklFV1MgXCIgK1xuICAgIFwiU1lTUkVGX0ZJTFRFUkVSX1NFVFVQX0NPTkZMSUNUUyBcIiArXG4gICAgXCJTWVNSRUZfRklMVFJBVEVSX1NFVFRJTkdfQ09ORkxJQ1RTIFwiICtcbiAgICBcIlNZU1JFRl9GT0xERVJfSElTVE9SWSBcIiArXG4gICAgXCJTWVNSRUZfRk9MREVSUyBcIiArXG4gICAgXCJTWVNSRUZfRlVOQ1RJT05fR1JPVVBTIFwiICtcbiAgICBcIlNZU1JFRl9GVU5DVElPTl9QQVJBTVMgXCIgK1xuICAgIFwiU1lTUkVGX0ZVTkNUSU9OUyBcIiArXG4gICAgXCJTWVNSRUZfSk9CX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX0xJTktTIFwiICtcbiAgICBcIlNZU1JFRl9MT0NBTElaQVRJT05fRElDVElPTkFSWSBcIiArXG4gICAgXCJTWVNSRUZfTE9DQUxJWkFUSU9OX0xBTkdVQUdFUyBcIiArXG4gICAgXCJTWVNSRUZfTU9EVUxFUyBcIiArXG4gICAgXCJTWVNSRUZfUFJJVklMRUdFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVDT1JEX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX1JFRkVSRU5DRV9SRVFVSVNJVEVTIFwiICtcbiAgICBcIlNZU1JFRl9SRUZFUkVOQ0VfVFlQRV9WSUVXUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFX1RZUEVTIFwiICtcbiAgICBcIlNZU1JFRl9SRUZFUkVOQ0VTIFwiICtcbiAgICBcIlNZU1JFRl9SRUZFUkVOQ0VTX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX1JFTU9URV9TRVJWRVJTIFwiICtcbiAgICBcIlNZU1JFRl9SRVBMSUNBVElPTl9TRVNTSU9OU19MT0cgXCIgK1xuICAgIFwiU1lTUkVGX1JFUExJQ0FUSU9OX1NFU1NJT05TX1BST1RPQ09MIFwiICtcbiAgICBcIlNZU1JFRl9SRVBPUlRTIFwiICtcbiAgICBcIlNZU1JFRl9ST0xFUyBcIiArXG4gICAgXCJTWVNSRUZfUk9VVEVfQkxPQ0tfR1JPVVBTIFwiICtcbiAgICBcIlNZU1JFRl9ST1VURV9CTE9DS1MgXCIgK1xuICAgIFwiU1lTUkVGX1NDUklQVFMgXCIgK1xuICAgIFwiU1lTUkVGX1NFQVJDSEVTIFwiICtcbiAgICBcIlNZU1JFRl9TRVJWRVJfRVZFTlRTIFwiICtcbiAgICBcIlNZU1JFRl9TRVJWRVJfRVZFTlRTX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX1NUQU5EQVJEX1JPVVRFX0dST1VQUyBcIiArXG4gICAgXCJTWVNSRUZfU1RBTkRBUkRfUk9VVEVTIFwiICtcbiAgICBcIlNZU1JFRl9TVEFUVVNFUyBcIiArXG4gICAgXCJTWVNSRUZfU1lTVEVNX1NFVFRJTkdTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX1RBU0tfS0lORF9HUk9VUFMgXCIgK1xuICAgIFwiU1lTUkVGX1RBU0tfS0lORFMgXCIgK1xuICAgIFwiU1lTUkVGX1RBU0tfUklHSFRTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX1NJR05BVFVSRVMgXCIgK1xuICAgIFwiU1lTUkVGX1RBU0tTIFwiICtcbiAgICBcIlNZU1JFRl9VTklUUyBcIiArXG4gICAgXCJTWVNSRUZfVVNFUl9HUk9VUFMgXCIgK1xuICAgIFwiU1lTUkVGX1VTRVJfR1JPVVBTX1JFRkVSRU5DRSBcIiArXG4gICAgXCJTWVNSRUZfVVNFUl9TVUJTVElUVVRJT04gXCIgK1xuICAgIFwiU1lTUkVGX1VTRVJTIFwiICtcbiAgICBcIlNZU1JFRl9VU0VSU19SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVGX1ZJRVdFUlMgXCIgK1xuICAgIFwiU1lTUkVGX1dPUktJTkdfVElNRV9DQUxFTkRBUlMgXCI7XG5cbiAgLy8gVGFibGUgbmFtZVxuICBjb25zdCB0YWJsZV9uYW1lX2NvbnN0YW50cyA9XG4gICAgXCJBQ0NFU1NfUklHSFRTX1RBQkxFX05BTUUgXCIgK1xuICAgIFwiRURNU19BQ0NFU1NfVEFCTEVfTkFNRSBcIiArXG4gICAgXCJFRE9DX1RZUEVTX1RBQkxFX05BTUUgXCI7XG5cbiAgLy8gVGVzdFxuICBjb25zdCB0ZXN0X2NvbnN0YW50cyA9XG4gICAgXCJURVNUX0RFVl9EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfREVWX1NZU1RFTV9DT0RFIFwiICtcbiAgICBcIlRFU1RfRURNU19EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfRURNU19NQUlOX0NPREUgXCIgK1xuICAgIFwiVEVTVF9FRE1TX01BSU5fREJfTkFNRSBcIiArXG4gICAgXCJURVNUX0VETVNfU0VDT05EX0NPREUgXCIgK1xuICAgIFwiVEVTVF9FRE1TX1NFQ09ORF9EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfRURNU19TWVNURU1fQ09ERSBcIiArXG4gICAgXCJURVNUX0lTQjVfTUFJTl9DT0RFIFwiICtcbiAgICBcIlRFU1RfSVNCNV9TRUNPTkRfQ09ERSBcIiArXG4gICAgXCJURVNUX1NRTF9TRVJWRVJfMjAwNV9OQU1FIFwiICtcbiAgICBcIlRFU1RfU1FMX1NFUlZFUl9OQU1FIFwiO1xuXG4gIC8vIFVzaW5nIHRoZSBkaWFsb2cgd2luZG93c1xuICBjb25zdCB1c2luZ190aGVfZGlhbG9nX3dpbmRvd3NfY29uc3RhbnRzID1cbiAgICBcIkFUVEVOVElPTl9DQVBUSU9OIFwiICtcbiAgICBcImNic0NvbW1hbmRMaW5rcyBcIiArXG4gICAgXCJjYnNEZWZhdWx0IFwiICtcbiAgICBcIkNPTkZJUk1BVElPTl9DQVBUSU9OIFwiICtcbiAgICBcIkVSUk9SX0NBUFRJT04gXCIgK1xuICAgIFwiSU5GT1JNQVRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJtckNhbmNlbCBcIiArXG4gICAgXCJtck9rIFwiO1xuXG4gIC8vIFVzaW5nIHRoZSBkb2N1bWVudFxuICBjb25zdCB1c2luZ190aGVfZG9jdW1lbnRfY29uc3RhbnRzID1cbiAgICBcIkVET0NfVkVSU0lPTl9BQ1RJVkVfU1RBR0VfQ09ERSBcIiArXG4gICAgXCJFRE9DX1ZFUlNJT05fREVTSUdOX1NUQUdFX0NPREUgXCIgK1xuICAgIFwiRURPQ19WRVJTSU9OX09CU09MRVRFX1NUQUdFX0NPREUgXCI7XG5cbiAgLy8gVXNpbmcgdGhlIEVBIGFuZCBlbmNyeXB0aW9uXG4gIGNvbnN0IHVzaW5nX3RoZV9FQV9hbmRfZW5jcnlwdGlvbl9jb25zdGFudHMgPVxuICAgIFwiY3BEYXRhRW5jaXBoZXJtZW50RW5hYmxlZCBcIiArXG4gICAgXCJjcERpZ2l0YWxTaWduYXR1cmVFbmFibGVkIFwiICtcbiAgICBcImNwSUQgXCIgK1xuICAgIFwiY3BJc3N1ZXIgXCIgK1xuICAgIFwiY3BQbHVnaW5WZXJzaW9uIFwiICtcbiAgICBcImNwU2VyaWFsIFwiICtcbiAgICBcImNwU3ViamVjdE5hbWUgXCIgK1xuICAgIFwiY3BTdWJqU2ltcGxlTmFtZSBcIiArXG4gICAgXCJjcFZhbGlkRnJvbURhdGUgXCIgK1xuICAgIFwiY3BWYWxpZFRvRGF0ZSBcIjtcblxuICAvLyBVc2luZyB0aGUgSVNCTC1lZGl0b3JcbiAgY29uc3QgdXNpbmdfdGhlX0lTQkxfZWRpdG9yX2NvbnN0YW50cyA9XG4gICAgXCJJU0JMX1NZTlRBWCBcIiArIFwiTk9fU1lOVEFYIFwiICsgXCJYTUxfU1lOVEFYIFwiO1xuXG4gIC8vIFdhaXQgYmxvY2sgcHJvcGVydGllc1xuICBjb25zdCB3YWl0X2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzID1cbiAgICBcIldBSVRfQkxPQ0tfQUZURVJfRklOSVNIX0VWRU5UIFwiICtcbiAgICBcIldBSVRfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIldBSVRfQkxPQ0tfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiV0FJVF9CTE9DS19JU19SRUxBVElWRV9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJXQUlUX0JMT0NLX05BTUVfUFJPUEVSVFkgXCIgK1xuICAgIFwiV0FJVF9CTE9DS19SRUxBVElWRV9ERUFETElORV9UWVBFX1BST1BFUlRZIFwiO1xuXG4gIC8vIFNZU1JFUyBDb21tb25cbiAgY29uc3Qgc3lzcmVzX2NvbW1vbl9jb25zdGFudHMgPVxuICAgIFwiU1lTUkVTX0NPTU1PTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1QgXCIgK1xuICAgIFwiU1lTUkVTX01CRlVOQyBcIiArXG4gICAgXCJTWVNSRVNfU0JEQVRBIFwiICtcbiAgICBcIlNZU1JFU19TQkdVSSBcIiArXG4gICAgXCJTWVNSRVNfU0JJTlRGIFwiICtcbiAgICBcIlNZU1JFU19TQlJFRkRTQyBcIiArXG4gICAgXCJTWVNSRVNfU1FMRVJST1JTIFwiICtcbiAgICBcIlNZU1JFU19TWVNDT01QIFwiO1xuXG4gIC8vINCa0L7QvdGB0YLQsNC90YLRiyA9PT4gYnVpbHRfaW5cbiAgY29uc3QgQ09OU1RBTlRTID1cbiAgICBzeXNyZXNfY29uc3RhbnRzICtcbiAgICBiYXNlX2NvbnN0YW50cyArXG4gICAgYmFzZV9ncm91cF9uYW1lX2NvbnN0YW50cyArXG4gICAgZGVjaXNpb25fYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIGZpbGVfZXh0ZW5zaW9uX2NvbnN0YW50cyArXG4gICAgam9iX2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzICtcbiAgICBsYW5ndWFnZV9jb2RlX2NvbnN0YW50cyArXG4gICAgbGF1bmNoaW5nX2V4dGVybmFsX2FwcGxpY2F0aW9uc19jb25zdGFudHMgK1xuICAgIGxpbmtfa2luZF9jb25zdGFudHMgK1xuICAgIGxvY2tfdHlwZV9jb25zdGFudHMgK1xuICAgIG1vbml0b3JfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIG5vdGljZV9ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyArXG4gICAgb2JqZWN0X2V2ZW50c19jb25zdGFudHMgK1xuICAgIG9iamVjdF9wYXJhbXNfY29uc3RhbnRzICtcbiAgICBvdGhlcl9jb25zdGFudHMgK1xuICAgIHByaXZpbGVnZXNfY29uc3RhbnRzICtcbiAgICBwc2V1ZG9yZWZlcmVuY2VfY29kZV9jb25zdGFudHMgK1xuICAgIHJlcXVpc2l0ZV9JU0JDZXJ0aWZpY2F0ZVR5cGVfdmFsdWVzX2NvbnN0YW50cyArXG4gICAgcmVxdWlzaXRlX0lTQkVEb2NTdG9yYWdlVHlwZV92YWx1ZXNfY29uc3RhbnRzICtcbiAgICByZXF1aXNpdGVfY29tcFR5cGUyX3ZhbHVlc19jb25zdGFudHMgK1xuICAgIHJlcXVpc2l0ZV9uYW1lX2NvbnN0YW50cyArXG4gICAgcmVzdWx0X2NvbnN0YW50cyArXG4gICAgcnVsZV9pZGVudGlmaWNhdGlvbl9jb25zdGFudHMgK1xuICAgIHNjcmlwdF9ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyArXG4gICAgc3VidGFza19ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyArXG4gICAgc3lzdGVtX2NvbXBvbmVudF9jb25zdGFudHMgK1xuICAgIHN5c3RlbV9kaWFsb2dzX2NvbnN0YW50cyArXG4gICAgc3lzdGVtX3JlZmVyZW5jZV9uYW1lc19jb25zdGFudHMgK1xuICAgIHRhYmxlX25hbWVfY29uc3RhbnRzICtcbiAgICB0ZXN0X2NvbnN0YW50cyArXG4gICAgdXNpbmdfdGhlX2RpYWxvZ193aW5kb3dzX2NvbnN0YW50cyArXG4gICAgdXNpbmdfdGhlX2RvY3VtZW50X2NvbnN0YW50cyArXG4gICAgdXNpbmdfdGhlX0VBX2FuZF9lbmNyeXB0aW9uX2NvbnN0YW50cyArXG4gICAgdXNpbmdfdGhlX0lTQkxfZWRpdG9yX2NvbnN0YW50cyArXG4gICAgd2FpdF9ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyArXG4gICAgc3lzcmVzX2NvbW1vbl9jb25zdGFudHM7XG5cbiAgLy8gZW51bSBUQWNjb3VudFR5cGVcbiAgY29uc3QgVEFjY291bnRUeXBlID0gXCJhdFVzZXIgYXRHcm91cCBhdFJvbGUgXCI7XG5cbiAgLy8gZW51bSBUQWN0aW9uRW5hYmxlZE1vZGVcbiAgY29uc3QgVEFjdGlvbkVuYWJsZWRNb2RlID1cbiAgICBcImFlbUVuYWJsZWRBbHdheXMgXCIgK1xuICAgIFwiYWVtRGlzYWJsZWRBbHdheXMgXCIgK1xuICAgIFwiYWVtRW5hYmxlZE9uQnJvd3NlIFwiICtcbiAgICBcImFlbUVuYWJsZWRPbkVkaXQgXCIgK1xuICAgIFwiYWVtRGlzYWJsZWRPbkJyb3dzZUVtcHR5IFwiO1xuXG4gIC8vIGVudW0gVEFkZFBvc2l0aW9uXG4gIGNvbnN0IFRBZGRQb3NpdGlvbiA9IFwiYXBCZWdpbiBhcEVuZCBcIjtcblxuICAvLyBlbnVtIFRBbGlnbm1lbnRcbiAgY29uc3QgVEFsaWdubWVudCA9IFwiYWxMZWZ0IGFsUmlnaHQgXCI7XG5cbiAgLy8gZW51bSBUQXJlYVNob3dNb2RlXG4gIGNvbnN0IFRBcmVhU2hvd01vZGUgPVxuICAgIFwiYXNtTmV2ZXIgXCIgK1xuICAgIFwiYXNtTm9CdXRDdXN0b21pemUgXCIgK1xuICAgIFwiYXNtQXNMYXN0VGltZSBcIiArXG4gICAgXCJhc21ZZXNCdXRDdXN0b21pemUgXCIgK1xuICAgIFwiYXNtQWx3YXlzIFwiO1xuXG4gIC8vIGVudW0gVENlcnRpZmljYXRlSW52YWxpZGF0aW9uUmVhc29uXG4gIGNvbnN0IFRDZXJ0aWZpY2F0ZUludmFsaWRhdGlvblJlYXNvbiA9IFwiY2lyQ29tbW9uIGNpclJldm9rZWQgXCI7XG5cbiAgLy8gZW51bSBUQ2VydGlmaWNhdGVUeXBlXG4gIGNvbnN0IFRDZXJ0aWZpY2F0ZVR5cGUgPSBcImN0U2lnbmF0dXJlIGN0RW5jb2RlIGN0U2lnbmF0dXJlRW5jb2RlIFwiO1xuXG4gIC8vIGVudW0gVENoZWNrTGlzdEJveEl0ZW1TdGF0ZVxuICBjb25zdCBUQ2hlY2tMaXN0Qm94SXRlbVN0YXRlID0gXCJjbGJVbmNoZWNrZWQgY2xiQ2hlY2tlZCBjbGJHcmF5ZWQgXCI7XG5cbiAgLy8gZW51bSBUQ2xvc2VPbkVzY1xuICBjb25zdCBUQ2xvc2VPbkVzYyA9IFwiY2VJU0IgY2VBbHdheXMgY2VOZXZlciBcIjtcblxuICAvLyBlbnVtIFRDb21wVHlwZVxuICBjb25zdCBUQ29tcFR5cGUgPVxuICAgIFwiY3REb2N1bWVudCBcIiArXG4gICAgXCJjdFJlZmVyZW5jZSBcIiArXG4gICAgXCJjdFNjcmlwdCBcIiArXG4gICAgXCJjdFVua25vd24gXCIgK1xuICAgIFwiY3RSZXBvcnQgXCIgK1xuICAgIFwiY3REaWFsb2cgXCIgK1xuICAgIFwiY3RGdW5jdGlvbiBcIiArXG4gICAgXCJjdEZvbGRlciBcIiArXG4gICAgXCJjdEVEb2N1bWVudCBcIiArXG4gICAgXCJjdFRhc2sgXCIgK1xuICAgIFwiY3RKb2IgXCIgK1xuICAgIFwiY3ROb3RpY2UgXCIgK1xuICAgIFwiY3RDb250cm9sSm9iIFwiO1xuXG4gIC8vIGVudW0gVENvbmRpdGlvbkZvcm1hdFxuICBjb25zdCBUQ29uZGl0aW9uRm9ybWF0ID0gXCJjZkludGVybmFsIGNmRGlzcGxheSBcIjtcblxuICAvLyBlbnVtIFRDb25uZWN0aW9uSW50ZW50XG4gIGNvbnN0IFRDb25uZWN0aW9uSW50ZW50ID0gXCJjaVVuc3BlY2lmaWVkIGNpV3JpdGUgY2lSZWFkIFwiO1xuXG4gIC8vIGVudW0gVENvbnRlbnRLaW5kXG4gIGNvbnN0IFRDb250ZW50S2luZCA9XG4gICAgXCJja0ZvbGRlciBcIiArXG4gICAgXCJja0VEb2N1bWVudCBcIiArXG4gICAgXCJja1Rhc2sgXCIgK1xuICAgIFwiY2tKb2IgXCIgK1xuICAgIFwiY2tDb21wb25lbnRUb2tlbiBcIiArXG4gICAgXCJja0FueSBcIiArXG4gICAgXCJja1JlZmVyZW5jZSBcIiArXG4gICAgXCJja1NjcmlwdCBcIiArXG4gICAgXCJja1JlcG9ydCBcIiArXG4gICAgXCJja0RpYWxvZyBcIjtcblxuICAvLyBlbnVtIFRDb250cm9sVHlwZVxuICBjb25zdCBUQ29udHJvbFR5cGUgPVxuICAgIFwiY3RJU0JMRWRpdG9yIFwiICtcbiAgICBcImN0QmV2ZWwgXCIgK1xuICAgIFwiY3RCdXR0b24gXCIgK1xuICAgIFwiY3RDaGVja0xpc3RCb3ggXCIgK1xuICAgIFwiY3RDb21ib0JveCBcIiArXG4gICAgXCJjdENvbWJvRWRpdCBcIiArXG4gICAgXCJjdEdyaWQgXCIgK1xuICAgIFwiY3REQkNoZWNrQm94IFwiICtcbiAgICBcImN0REJDb21ib0JveCBcIiArXG4gICAgXCJjdERCRWRpdCBcIiArXG4gICAgXCJjdERCRWxsaXBzaXMgXCIgK1xuICAgIFwiY3REQk1lbW8gXCIgK1xuICAgIFwiY3REQk5hdmlnYXRvciBcIiArXG4gICAgXCJjdERCUmFkaW9Hcm91cCBcIiArXG4gICAgXCJjdERCU3RhdHVzTGFiZWwgXCIgK1xuICAgIFwiY3RFZGl0IFwiICtcbiAgICBcImN0R3JvdXBCb3ggXCIgK1xuICAgIFwiY3RJbnBsYWNlSGludCBcIiArXG4gICAgXCJjdE1lbW8gXCIgK1xuICAgIFwiY3RQYW5lbCBcIiArXG4gICAgXCJjdExpc3RCb3ggXCIgK1xuICAgIFwiY3RSYWRpb0J1dHRvbiBcIiArXG4gICAgXCJjdFJpY2hFZGl0IFwiICtcbiAgICBcImN0VGFiU2hlZXQgXCIgK1xuICAgIFwiY3RXZWJCcm93c2VyIFwiICtcbiAgICBcImN0SW1hZ2UgXCIgK1xuICAgIFwiY3RIeXBlckxpbmsgXCIgK1xuICAgIFwiY3RMYWJlbCBcIiArXG4gICAgXCJjdERCTXVsdGlFbGxpcHNpcyBcIiArXG4gICAgXCJjdFJpYmJvbiBcIiArXG4gICAgXCJjdFJpY2hWaWV3IFwiICtcbiAgICBcImN0SW5uZXJQYW5lbCBcIiArXG4gICAgXCJjdFBhbmVsR3JvdXAgXCIgK1xuICAgIFwiY3RCaXRCdXR0b24gXCI7XG5cbiAgLy8gZW51bSBUQ3JpdGVyaW9uQ29udGVudFR5cGVcbiAgY29uc3QgVENyaXRlcmlvbkNvbnRlbnRUeXBlID1cbiAgICBcImNjdERhdGUgXCIgK1xuICAgIFwiY2N0SW50ZWdlciBcIiArXG4gICAgXCJjY3ROdW1lcmljIFwiICtcbiAgICBcImNjdFBpY2sgXCIgK1xuICAgIFwiY2N0UmVmZXJlbmNlIFwiICtcbiAgICBcImNjdFN0cmluZyBcIiArXG4gICAgXCJjY3RUZXh0IFwiO1xuXG4gIC8vIGVudW0gVEN1bHR1cmVUeXBlXG4gIGNvbnN0IFRDdWx0dXJlVHlwZSA9IFwiY2x0SW50ZXJuYWwgY2x0UHJpbWFyeSBjbHRHVUkgXCI7XG5cbiAgLy8gZW51bSBURGF0YVNldEV2ZW50VHlwZVxuICBjb25zdCBURGF0YVNldEV2ZW50VHlwZSA9XG4gICAgXCJkc2VCZWZvcmVPcGVuIFwiICtcbiAgICBcImRzZUFmdGVyT3BlbiBcIiArXG4gICAgXCJkc2VCZWZvcmVDbG9zZSBcIiArXG4gICAgXCJkc2VBZnRlckNsb3NlIFwiICtcbiAgICBcImRzZU9uVmFsaWREZWxldGUgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VPbkRlbGV0ZUVycm9yIFwiICtcbiAgICBcImRzZUJlZm9yZUluc2VydCBcIiArXG4gICAgXCJkc2VBZnRlckluc2VydCBcIiArXG4gICAgXCJkc2VPblZhbGlkVXBkYXRlIFwiICtcbiAgICBcImRzZUJlZm9yZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPblVwZGF0ZVJhdGlmaWVkUmVjb3JkIFwiICtcbiAgICBcImRzZUFmdGVyVXBkYXRlIFwiICtcbiAgICBcImRzZUFmdGVyVXBkYXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VPblVwZGF0ZUVycm9yIFwiICtcbiAgICBcImRzZUFmdGVyU2Nyb2xsIFwiICtcbiAgICBcImRzZU9uT3BlblJlY29yZCBcIiArXG4gICAgXCJkc2VPbkNsb3NlUmVjb3JkIFwiICtcbiAgICBcImRzZUJlZm9yZUNhbmNlbCBcIiArXG4gICAgXCJkc2VBZnRlckNhbmNlbCBcIiArXG4gICAgXCJkc2VPblVwZGF0ZURlYWRsb2NrRXJyb3IgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGV0YWlsVXBkYXRlIFwiICtcbiAgICBcImRzZU9uUHJlcGFyZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPbkFueVJlcXVpc2l0ZUNoYW5nZSBcIjtcblxuICAvLyBlbnVtIFREYXRhU2V0U3RhdGVcbiAgY29uc3QgVERhdGFTZXRTdGF0ZSA9IFwiZHNzRWRpdCBkc3NJbnNlcnQgZHNzQnJvd3NlIGRzc0luQWN0aXZlIFwiO1xuXG4gIC8vIGVudW0gVERhdGVGb3JtYXRUeXBlXG4gIGNvbnN0IFREYXRlRm9ybWF0VHlwZSA9IFwiZGZ0RGF0ZSBkZnRTaG9ydERhdGUgZGZ0RGF0ZVRpbWUgZGZ0VGltZVN0YW1wIFwiO1xuXG4gIC8vIGVudW0gVERhdGVPZmZzZXRUeXBlXG4gIGNvbnN0IFREYXRlT2Zmc2V0VHlwZSA9IFwiZG90RGF5cyBkb3RIb3VycyBkb3RNaW51dGVzIGRvdFNlY29uZHMgXCI7XG5cbiAgLy8gZW51bSBURGF0ZVRpbWVLaW5kXG4gIGNvbnN0IFREYXRlVGltZUtpbmQgPSBcImR0a25kTG9jYWwgZHRrbmRVVEMgXCI7XG5cbiAgLy8gZW51bSBURGVhQWNjZXNzUmlnaHRzXG4gIGNvbnN0IFREZWFBY2Nlc3NSaWdodHMgPSBcImFyTm9uZSBhclZpZXcgYXJFZGl0IGFyRnVsbCBcIjtcblxuICAvLyBlbnVtIFREb2N1bWVudERlZmF1bHRBY3Rpb25cbiAgY29uc3QgVERvY3VtZW50RGVmYXVsdEFjdGlvbiA9IFwiZGRhVmlldyBkZGFFZGl0IFwiO1xuXG4gIC8vIGVudW0gVEVkaXRNb2RlXG4gIGNvbnN0IFRFZGl0TW9kZSA9XG4gICAgXCJlbUxvY2sgXCIgK1xuICAgIFwiZW1FZGl0IFwiICtcbiAgICBcImVtU2lnbiBcIiArXG4gICAgXCJlbUV4cG9ydFdpdGhMb2NrIFwiICtcbiAgICBcImVtSW1wb3J0V2l0aFVubG9jayBcIiArXG4gICAgXCJlbUNoYW5nZVZlcnNpb25Ob3RlIFwiICtcbiAgICBcImVtT3BlbkZvck1vZGlmeSBcIiArXG4gICAgXCJlbUNoYW5nZUxpZmVTdGFnZSBcIiArXG4gICAgXCJlbURlbGV0ZSBcIiArXG4gICAgXCJlbUNyZWF0ZVZlcnNpb24gXCIgK1xuICAgIFwiZW1JbXBvcnQgXCIgK1xuICAgIFwiZW1VbmxvY2tFeHBvcnRlZFdpdGhMb2NrIFwiICtcbiAgICBcImVtU3RhcnQgXCIgK1xuICAgIFwiZW1BYm9ydCBcIiArXG4gICAgXCJlbVJlSW5pdCBcIiArXG4gICAgXCJlbU1hcmtBc1JlYWRlZCBcIiArXG4gICAgXCJlbU1hcmtBc1VucmVhZGVkIFwiICtcbiAgICBcImVtUGVyZm9ybSBcIiArXG4gICAgXCJlbUFjY2VwdCBcIiArXG4gICAgXCJlbVJlc3VtZSBcIiArXG4gICAgXCJlbUNoYW5nZVJpZ2h0cyBcIiArXG4gICAgXCJlbUVkaXRSb3V0ZSBcIiArXG4gICAgXCJlbUVkaXRPYnNlcnZlciBcIiArXG4gICAgXCJlbVJlY292ZXJ5RnJvbUxvY2FsQ29weSBcIiArXG4gICAgXCJlbUNoYW5nZVdvcmtBY2Nlc3NUeXBlIFwiICtcbiAgICBcImVtQ2hhbmdlRW5jb2RlVHlwZVRvQ2VydGlmaWNhdGUgXCIgK1xuICAgIFwiZW1DaGFuZ2VFbmNvZGVUeXBlVG9QYXNzd29yZCBcIiArXG4gICAgXCJlbUNoYW5nZUVuY29kZVR5cGVUb05vbmUgXCIgK1xuICAgIFwiZW1DaGFuZ2VFbmNvZGVUeXBlVG9DZXJ0aWZpY2F0ZVBhc3N3b3JkIFwiICtcbiAgICBcImVtQ2hhbmdlU3RhbmRhcmRSb3V0ZSBcIiArXG4gICAgXCJlbUdldFRleHQgXCIgK1xuICAgIFwiZW1PcGVuRm9yVmlldyBcIiArXG4gICAgXCJlbU1vdmVUb1N0b3JhZ2UgXCIgK1xuICAgIFwiZW1DcmVhdGVPYmplY3QgXCIgK1xuICAgIFwiZW1DaGFuZ2VWZXJzaW9uSGlkZGVuIFwiICtcbiAgICBcImVtRGVsZXRlVmVyc2lvbiBcIiArXG4gICAgXCJlbUNoYW5nZUxpZmVDeWNsZVN0YWdlIFwiICtcbiAgICBcImVtQXBwcm92aW5nU2lnbiBcIiArXG4gICAgXCJlbUV4cG9ydCBcIiArXG4gICAgXCJlbUNvbnRpbnVlIFwiICtcbiAgICBcImVtTG9ja0Zyb21FZGl0IFwiICtcbiAgICBcImVtVW5Mb2NrRm9yRWRpdCBcIiArXG4gICAgXCJlbUxvY2tGb3JTZXJ2ZXIgXCIgK1xuICAgIFwiZW1VbmxvY2tGcm9tU2VydmVyIFwiICtcbiAgICBcImVtRGVsZWdhdGVBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiZW1SZUVuY29kZSBcIjtcblxuICAvLyBlbnVtIFRFZGl0b3JDbG9zZU9ic2VydlR5cGVcbiAgY29uc3QgVEVkaXRvckNsb3NlT2JzZXJ2VHlwZSA9IFwiZWNvdEZpbGUgZWNvdFByb2Nlc3MgXCI7XG5cbiAgLy8gZW51bSBURWRtc0FwcGxpY2F0aW9uQWN0aW9uXG4gIGNvbnN0IFRFZG1zQXBwbGljYXRpb25BY3Rpb24gPSBcImVhR2V0IGVhQ29weSBlYUNyZWF0ZSBlYUNyZWF0ZVN0YW5kYXJkUm91dGUgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50TG9ja1R5cGVcbiAgY29uc3QgVEVEb2N1bWVudExvY2tUeXBlID0gXCJlZGx0QWxsIGVkbHROb3RoaW5nIGVkbHRRdWVyeSBcIjtcblxuICAvLyBlbnVtIFRFRG9jdW1lbnRTdGVwU2hvd01vZGVcbiAgY29uc3QgVEVEb2N1bWVudFN0ZXBTaG93TW9kZSA9IFwiZXNzbVRleHQgZXNzbUNhcmQgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RlcFZlcnNpb25UeXBlXG4gIGNvbnN0IFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGUgPSBcImVzdnRMYXN0IGVzdnRMYXN0QWN0aXZlIGVzdnRTcGVjaWZpZWQgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RvcmFnZUZ1bmN0aW9uXG4gIGNvbnN0IFRFRG9jdW1lbnRTdG9yYWdlRnVuY3Rpb24gPSBcImVkc2ZFeGVjdXRpdmUgZWRzZkFyY2hpdmUgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RvcmFnZVR5cGVcbiAgY29uc3QgVEVEb2N1bWVudFN0b3JhZ2VUeXBlID0gXCJlZHN0U1FMU2VydmVyIGVkc3RGaWxlIFwiO1xuXG4gIC8vIGVudW0gVEVEb2N1bWVudFZlcnNpb25Tb3VyY2VUeXBlXG4gIGNvbnN0IFRFRG9jdW1lbnRWZXJzaW9uU291cmNlVHlwZSA9XG4gICAgXCJlZHZzdE5vbmUgZWR2c3RFRG9jdW1lbnRWZXJzaW9uQ29weSBlZHZzdEZpbGUgZWR2c3RUZW1wbGF0ZSBlZHZzdFNjYW5uZWRGaWxlIFwiO1xuXG4gIC8vIGVudW0gVEVEb2N1bWVudFZlcnNpb25TdGF0ZVxuICBjb25zdCBURURvY3VtZW50VmVyc2lvblN0YXRlID0gXCJ2c0RlZmF1bHQgdnNEZXNpZ24gdnNBY3RpdmUgdnNPYnNvbGV0ZSBcIjtcblxuICAvLyBlbnVtIFRFbmNvZGVUeXBlXG4gIGNvbnN0IFRFbmNvZGVUeXBlID0gXCJldE5vbmUgZXRDZXJ0aWZpY2F0ZSBldFBhc3N3b3JkIGV0Q2VydGlmaWNhdGVQYXNzd29yZCBcIjtcblxuICAvLyBlbnVtIFRFeGNlcHRpb25DYXRlZ29yeVxuICBjb25zdCBURXhjZXB0aW9uQ2F0ZWdvcnkgPSBcImVjRXhjZXB0aW9uIGVjV2FybmluZyBlY0luZm9ybWF0aW9uIFwiO1xuXG4gIC8vIGVudW0gVEV4cG9ydGVkU2lnbmF0dXJlc1R5cGVcbiAgY29uc3QgVEV4cG9ydGVkU2lnbmF0dXJlc1R5cGUgPSBcImVzdEFsbCBlc3RBcHByb3ZpbmdPbmx5IFwiO1xuXG4gIC8vIGVudW0gVEV4cG9ydGVkVmVyc2lvblR5cGVcbiAgY29uc3QgVEV4cG9ydGVkVmVyc2lvblR5cGUgPSBcImV2dExhc3QgZXZ0TGFzdEFjdGl2ZSBldnRRdWVyeSBcIjtcblxuICAvLyBlbnVtIFRGaWVsZERhdGFUeXBlXG4gIGNvbnN0IFRGaWVsZERhdGFUeXBlID1cbiAgICBcImZkdFN0cmluZyBcIiArXG4gICAgXCJmZHROdW1lcmljIFwiICtcbiAgICBcImZkdEludGVnZXIgXCIgK1xuICAgIFwiZmR0RGF0ZSBcIiArXG4gICAgXCJmZHRUZXh0IFwiICtcbiAgICBcImZkdFVua25vd24gXCIgK1xuICAgIFwiZmR0V2lkZVN0cmluZyBcIiArXG4gICAgXCJmZHRMYXJnZUludGVnZXIgXCI7XG5cbiAgLy8gZW51bSBURm9sZGVyVHlwZVxuICBjb25zdCBURm9sZGVyVHlwZSA9XG4gICAgXCJmdEluYm94IFwiICtcbiAgICBcImZ0T3V0Ym94IFwiICtcbiAgICBcImZ0RmF2b3JpdGVzIFwiICtcbiAgICBcImZ0Q29tbW9uRm9sZGVyIFwiICtcbiAgICBcImZ0VXNlckZvbGRlciBcIiArXG4gICAgXCJmdENvbXBvbmVudHMgXCIgK1xuICAgIFwiZnRRdWlja0xhdW5jaCBcIiArXG4gICAgXCJmdFNob3J0Y3V0cyBcIiArXG4gICAgXCJmdFNlYXJjaCBcIjtcblxuICAvLyBlbnVtIFRHcmlkUm93SGVpZ2h0XG4gIGNvbnN0IFRHcmlkUm93SGVpZ2h0ID0gXCJncmhBdXRvIFwiICsgXCJncmhYMSBcIiArIFwiZ3JoWDIgXCIgKyBcImdyaFgzIFwiO1xuXG4gIC8vIGVudW0gVEh5cGVybGlua1R5cGVcbiAgY29uc3QgVEh5cGVybGlua1R5cGUgPSBcImhsdFRleHQgXCIgKyBcImhsdFJURiBcIiArIFwiaGx0SFRNTCBcIjtcblxuICAvLyBlbnVtIFRJbWFnZUZpbGVGb3JtYXRcbiAgY29uc3QgVEltYWdlRmlsZUZvcm1hdCA9XG4gICAgXCJpZmZCTVAgXCIgK1xuICAgIFwiaWZmSlBFRyBcIiArXG4gICAgXCJpZmZNdWx0aVBhZ2VUSUZGIFwiICtcbiAgICBcImlmZlNpbmdsZVBhZ2VUSUZGIFwiICtcbiAgICBcImlmZlRJRkYgXCIgK1xuICAgIFwiaWZmUE5HIFwiO1xuXG4gIC8vIGVudW0gVEltYWdlTW9kZVxuICBjb25zdCBUSW1hZ2VNb2RlID0gXCJpbThiR3JheXNjYWxlIFwiICsgXCJpbTI0YlJHQiBcIiArIFwiaW0xYk1vbm9jaHJvbWUgXCI7XG5cbiAgLy8gZW51bSBUSW1hZ2VUeXBlXG4gIGNvbnN0IFRJbWFnZVR5cGUgPSBcIml0Qk1QIFwiICsgXCJpdEpQRUcgXCIgKyBcIml0V01GIFwiICsgXCJpdFBORyBcIjtcblxuICAvLyBlbnVtIFRJbnBsYWNlSGludEtpbmRcbiAgY29uc3QgVElucGxhY2VIaW50S2luZCA9XG4gICAgXCJpa2hJbmZvcm1hdGlvbiBcIiArIFwiaWtoV2FybmluZyBcIiArIFwiaWtoRXJyb3IgXCIgKyBcImlraE5vSWNvbiBcIjtcblxuICAvLyBlbnVtIFRJU0JMQ29udGV4dFxuICBjb25zdCBUSVNCTENvbnRleHQgPVxuICAgIFwiaWNVbmtub3duIFwiICtcbiAgICBcImljU2NyaXB0IFwiICtcbiAgICBcImljRnVuY3Rpb24gXCIgK1xuICAgIFwiaWNJbnRlZ3JhdGVkUmVwb3J0IFwiICtcbiAgICBcImljQW5hbHl0aWNSZXBvcnQgXCIgK1xuICAgIFwiaWNEYXRhU2V0RXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQWN0aW9uSGFuZGxlciBcIiArXG4gICAgXCJpY0Zvcm1FdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNMb29rVXBFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNSZXF1aXNpdGVDaGFuZ2VFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNCZWZvcmVTZWFyY2hFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNSb2xlQ2FsY3VsYXRpb24gXCIgK1xuICAgIFwiaWNTZWxlY3RSb3V0ZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0Jsb2NrUHJvcGVydHlDYWxjdWxhdGlvbiBcIiArXG4gICAgXCJpY0Jsb2NrUXVlcnlQYXJhbXNFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNDaGFuZ2VTZWFyY2hSZXN1bHRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNCbG9ja0V2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1N1YlRhc2tJbml0RXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRURvY0RhdGFTZXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNFRG9jTG9va1VwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRURvY0FjdGlvbkhhbmRsZXIgXCIgK1xuICAgIFwiaWNFRG9jRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0VEb2NSZXF1aXNpdGVDaGFuZ2VFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNTdHJ1Y3R1cmVkQ29udmVyc2lvblJ1bGUgXCIgK1xuICAgIFwiaWNTdHJ1Y3R1cmVkQ29udmVyc2lvbkV2ZW50QmVmb3JlIFwiICtcbiAgICBcImljU3RydWN0dXJlZENvbnZlcnNpb25FdmVudEFmdGVyIFwiICtcbiAgICBcImljV2l6YXJkRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljV2l6YXJkRmluaXNoRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljV2l6YXJkU3RlcEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1dpemFyZFN0ZXBGaW5pc2hFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXaXphcmRBY3Rpb25FbmFibGVFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXaXphcmRBY3Rpb25FeGVjdXRlRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQ3JlYXRlSm9ic0hhbmRsZXIgXCIgK1xuICAgIFwiaWNDcmVhdGVOb3RpY2VzSGFuZGxlciBcIiArXG4gICAgXCJpY0JlZm9yZUxvb2tVcEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0FmdGVyTG9va1VwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljVGFza0Fib3J0RXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljV29ya2Zsb3dCbG9ja0FjdGlvbkhhbmRsZXIgXCIgK1xuICAgIFwiaWNEaWFsb2dEYXRhU2V0RXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nQWN0aW9uSGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ0xvb2tVcEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ0Zvcm1FdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNEaWFsb2dWYWxpZENsb3NlRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQmxvY2tGb3JtRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljVGFza0Zvcm1FdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNSZWZlcmVuY2VNZXRob2QgXCIgK1xuICAgIFwiaWNFRG9jTWV0aG9kIFwiICtcbiAgICBcImljRGlhbG9nTWV0aG9kIFwiICtcbiAgICBcImljUHJvY2Vzc01lc3NhZ2VIYW5kbGVyIFwiO1xuXG4gIC8vIGVudW0gVEl0ZW1TaG93XG4gIGNvbnN0IFRJdGVtU2hvdyA9IFwiaXNTaG93IFwiICsgXCJpc0hpZGUgXCIgKyBcImlzQnlVc2VyU2V0dGluZ3MgXCI7XG5cbiAgLy8gZW51bSBUSm9iS2luZFxuICBjb25zdCBUSm9iS2luZCA9IFwiamtKb2IgXCIgKyBcImprTm90aWNlIFwiICsgXCJqa0NvbnRyb2xKb2IgXCI7XG5cbiAgLy8gZW51bSBUSm9pblR5cGVcbiAgY29uc3QgVEpvaW5UeXBlID0gXCJqdElubmVyIFwiICsgXCJqdExlZnQgXCIgKyBcImp0UmlnaHQgXCIgKyBcImp0RnVsbCBcIiArIFwianRDcm9zcyBcIjtcblxuICAvLyBlbnVtIFRMYWJlbFBvc1xuICBjb25zdCBUTGFiZWxQb3MgPSBcImxicEFib3ZlIFwiICsgXCJsYnBCZWxvdyBcIiArIFwibGJwTGVmdCBcIiArIFwibGJwUmlnaHQgXCI7XG5cbiAgLy8gZW51bSBUTGljZW5zaW5nVHlwZVxuICBjb25zdCBUTGljZW5zaW5nVHlwZSA9IFwiZWx0UGVyQ29ubmVjdGlvbiBcIiArIFwiZWx0UGVyVXNlciBcIjtcblxuICAvLyBlbnVtIFRMaWZlQ3ljbGVTdGFnZUZvbnRDb2xvclxuICBjb25zdCBUTGlmZUN5Y2xlU3RhZ2VGb250Q29sb3IgPVxuICAgIFwic2ZjVW5kZWZpbmVkIFwiICtcbiAgICBcInNmY0JsYWNrIFwiICtcbiAgICBcInNmY0dyZWVuIFwiICtcbiAgICBcInNmY1JlZCBcIiArXG4gICAgXCJzZmNCbHVlIFwiICtcbiAgICBcInNmY09yYW5nZSBcIiArXG4gICAgXCJzZmNMaWxhYyBcIjtcblxuICAvLyBlbnVtIFRMaWZlQ3ljbGVTdGFnZUZvbnRTdHlsZVxuICBjb25zdCBUTGlmZUN5Y2xlU3RhZ2VGb250U3R5bGUgPSBcInNmc0l0YWxpYyBcIiArIFwic2ZzU3RyaWtlb3V0IFwiICsgXCJzZnNOb3JtYWwgXCI7XG5cbiAgLy8gZW51bSBUTG9ja2FibGVEZXZlbG9wbWVudENvbXBvbmVudFR5cGVcbiAgY29uc3QgVExvY2thYmxlRGV2ZWxvcG1lbnRDb21wb25lbnRUeXBlID1cbiAgICBcImxkY3RTdGFuZGFyZFJvdXRlIFwiICtcbiAgICBcImxkY3RXaXphcmQgXCIgK1xuICAgIFwibGRjdFNjcmlwdCBcIiArXG4gICAgXCJsZGN0RnVuY3Rpb24gXCIgK1xuICAgIFwibGRjdFJvdXRlQmxvY2sgXCIgK1xuICAgIFwibGRjdEludGVncmF0ZWRSZXBvcnQgXCIgK1xuICAgIFwibGRjdEFuYWx5dGljUmVwb3J0IFwiICtcbiAgICBcImxkY3RSZWZlcmVuY2VUeXBlIFwiICtcbiAgICBcImxkY3RFRG9jdW1lbnRUeXBlIFwiICtcbiAgICBcImxkY3REaWFsb2cgXCIgK1xuICAgIFwibGRjdFNlcnZlckV2ZW50cyBcIjtcblxuICAvLyBlbnVtIFRNYXhSZWNvcmRDb3VudFJlc3RyaWN0aW9uVHlwZVxuICBjb25zdCBUTWF4UmVjb3JkQ291bnRSZXN0cmljdGlvblR5cGUgPVxuICAgIFwibXJjcnROb25lIFwiICsgXCJtcmNydFVzZXIgXCIgKyBcIm1yY3J0TWF4aW1hbCBcIiArIFwibXJjcnRDdXN0b20gXCI7XG5cbiAgLy8gZW51bSBUUmFuZ2VWYWx1ZVR5cGVcbiAgY29uc3QgVFJhbmdlVmFsdWVUeXBlID1cbiAgICBcInZ0RXF1YWwgXCIgKyBcInZ0R3JlYXRlck9yRXF1YWwgXCIgKyBcInZ0TGVzc09yRXF1YWwgXCIgKyBcInZ0UmFuZ2UgXCI7XG5cbiAgLy8gZW51bSBUUmVsYXRpdmVEYXRlXG4gIGNvbnN0IFRSZWxhdGl2ZURhdGUgPVxuICAgIFwicmRZZXN0ZXJkYXkgXCIgK1xuICAgIFwicmRUb2RheSBcIiArXG4gICAgXCJyZFRvbW9ycm93IFwiICtcbiAgICBcInJkVGhpc1dlZWsgXCIgK1xuICAgIFwicmRUaGlzTW9udGggXCIgK1xuICAgIFwicmRUaGlzWWVhciBcIiArXG4gICAgXCJyZE5leHRNb250aCBcIiArXG4gICAgXCJyZE5leHRXZWVrIFwiICtcbiAgICBcInJkTGFzdFdlZWsgXCIgK1xuICAgIFwicmRMYXN0TW9udGggXCI7XG5cbiAgLy8gZW51bSBUUmVwb3J0RGVzdGluYXRpb25cbiAgY29uc3QgVFJlcG9ydERlc3RpbmF0aW9uID0gXCJyZFdpbmRvdyBcIiArIFwicmRGaWxlIFwiICsgXCJyZFByaW50ZXIgXCI7XG5cbiAgLy8gZW51bSBUUmVxRGF0YVR5cGVcbiAgY29uc3QgVFJlcURhdGFUeXBlID1cbiAgICBcInJkdFN0cmluZyBcIiArXG4gICAgXCJyZHROdW1lcmljIFwiICtcbiAgICBcInJkdEludGVnZXIgXCIgK1xuICAgIFwicmR0RGF0ZSBcIiArXG4gICAgXCJyZHRSZWZlcmVuY2UgXCIgK1xuICAgIFwicmR0QWNjb3VudCBcIiArXG4gICAgXCJyZHRUZXh0IFwiICtcbiAgICBcInJkdFBpY2sgXCIgK1xuICAgIFwicmR0VW5rbm93biBcIiArXG4gICAgXCJyZHRMYXJnZUludGVnZXIgXCIgK1xuICAgIFwicmR0RG9jdW1lbnQgXCI7XG5cbiAgLy8gZW51bSBUUmVxdWlzaXRlRXZlbnRUeXBlXG4gIGNvbnN0IFRSZXF1aXNpdGVFdmVudFR5cGUgPSBcInJlT25DaGFuZ2UgXCIgKyBcInJlT25DaGFuZ2VWYWx1ZXMgXCI7XG5cbiAgLy8gZW51bSBUU0JUaW1lVHlwZVxuICBjb25zdCBUU0JUaW1lVHlwZSA9IFwidHRHbG9iYWwgXCIgKyBcInR0TG9jYWwgXCIgKyBcInR0VXNlciBcIiArIFwidHRTeXN0ZW0gXCI7XG5cbiAgLy8gZW51bSBUU2VhcmNoU2hvd01vZGVcbiAgY29uc3QgVFNlYXJjaFNob3dNb2RlID1cbiAgICBcInNzbUJyb3dzZSBcIiArIFwic3NtU2VsZWN0IFwiICsgXCJzc21NdWx0aVNlbGVjdCBcIiArIFwic3NtQnJvd3NlTW9kYWwgXCI7XG5cbiAgLy8gZW51bSBUU2VsZWN0TW9kZVxuICBjb25zdCBUU2VsZWN0TW9kZSA9IFwic21TZWxlY3QgXCIgKyBcInNtTGlrZSBcIiArIFwic21DYXJkIFwiO1xuXG4gIC8vIGVudW0gVFNpZ25hdHVyZVR5cGVcbiAgY29uc3QgVFNpZ25hdHVyZVR5cGUgPSBcInN0Tm9uZSBcIiArIFwic3RBdXRoZW50aWNhdGluZyBcIiArIFwic3RBcHByb3ZpbmcgXCI7XG5cbiAgLy8gZW51bSBUU2lnbmVyQ29udGVudFR5cGVcbiAgY29uc3QgVFNpZ25lckNvbnRlbnRUeXBlID0gXCJzY3RTdHJpbmcgXCIgKyBcInNjdFN0cmVhbSBcIjtcblxuICAvLyBlbnVtIFRTdHJpbmdzU29ydFR5cGVcbiAgY29uc3QgVFN0cmluZ3NTb3J0VHlwZSA9IFwic3N0QW5zaVNvcnQgXCIgKyBcInNzdE5hdHVyYWxTb3J0IFwiO1xuXG4gIC8vIGVudW0gVFN0cmluZ1ZhbHVlVHlwZVxuICBjb25zdCBUU3RyaW5nVmFsdWVUeXBlID0gXCJzdnRFcXVhbCBcIiArIFwic3Z0Q29udGFpbiBcIjtcblxuICAvLyBlbnVtIFRTdHJ1Y3R1cmVkT2JqZWN0QXR0cmlidXRlVHlwZVxuICBjb25zdCBUU3RydWN0dXJlZE9iamVjdEF0dHJpYnV0ZVR5cGUgPVxuICAgIFwic29hdFN0cmluZyBcIiArXG4gICAgXCJzb2F0TnVtZXJpYyBcIiArXG4gICAgXCJzb2F0SW50ZWdlciBcIiArXG4gICAgXCJzb2F0RGF0ZXRpbWUgXCIgK1xuICAgIFwic29hdFJlZmVyZW5jZVJlY29yZCBcIiArXG4gICAgXCJzb2F0VGV4dCBcIiArXG4gICAgXCJzb2F0UGljayBcIiArXG4gICAgXCJzb2F0Qm9vbGVhbiBcIiArXG4gICAgXCJzb2F0RURvY3VtZW50IFwiICtcbiAgICBcInNvYXRBY2NvdW50IFwiICtcbiAgICBcInNvYXRJbnRlZ2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJzb2F0TnVtZXJpY0NvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdFN0cmluZ0NvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdFBpY2tDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXREYXRldGltZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdEJvb2xlYW5Db2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRSZWZlcmVuY2VSZWNvcmRDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRFRG9jdW1lbnRDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRBY2NvdW50Q29sbGVjdGlvbiBcIiArXG4gICAgXCJzb2F0Q29udGVudHMgXCIgK1xuICAgIFwic29hdFVua25vd24gXCI7XG5cbiAgLy8gZW51bSBUVGFza0Fib3J0UmVhc29uXG4gIGNvbnN0IFRUYXNrQWJvcnRSZWFzb24gPSBcInRhckFib3J0QnlVc2VyIFwiICsgXCJ0YXJBYm9ydEJ5V29ya2Zsb3dFeGNlcHRpb24gXCI7XG5cbiAgLy8gZW51bSBUVGV4dFZhbHVlVHlwZVxuICBjb25zdCBUVGV4dFZhbHVlVHlwZSA9IFwidHZ0QWxsV29yZHMgXCIgKyBcInR2dEV4YWN0UGhyYXNlIFwiICsgXCJ0dnRBbnlXb3JkIFwiO1xuXG4gIC8vIGVudW0gVFVzZXJPYmplY3RTdGF0dXNcbiAgY29uc3QgVFVzZXJPYmplY3RTdGF0dXMgPVxuICAgIFwidXNOb25lIFwiICtcbiAgICBcInVzQ29tcGxldGVkIFwiICtcbiAgICBcInVzUmVkU3F1YXJlIFwiICtcbiAgICBcInVzQmx1ZVNxdWFyZSBcIiArXG4gICAgXCJ1c1llbGxvd1NxdWFyZSBcIiArXG4gICAgXCJ1c0dyZWVuU3F1YXJlIFwiICtcbiAgICBcInVzT3JhbmdlU3F1YXJlIFwiICtcbiAgICBcInVzUHVycGxlU3F1YXJlIFwiICtcbiAgICBcInVzRm9sbG93VXAgXCI7XG5cbiAgLy8gZW51bSBUVXNlclR5cGVcbiAgY29uc3QgVFVzZXJUeXBlID1cbiAgICBcInV0VW5rbm93biBcIiArXG4gICAgXCJ1dFVzZXIgXCIgK1xuICAgIFwidXREZXZlbG9wZXIgXCIgK1xuICAgIFwidXRBZG1pbmlzdHJhdG9yIFwiICtcbiAgICBcInV0U3lzdGVtRGV2ZWxvcGVyIFwiICtcbiAgICBcInV0RGlzY29ubmVjdGVkIFwiO1xuXG4gIC8vIGVudW0gVFZhbHVlc0J1aWxkVHlwZVxuICBjb25zdCBUVmFsdWVzQnVpbGRUeXBlID1cbiAgICBcImJ0QW5kIFwiICsgXCJidERldGFpbEFuZCBcIiArIFwiYnRPciBcIiArIFwiYnROb3RPciBcIiArIFwiYnRPbmx5IFwiO1xuXG4gIC8vIGVudW0gVFZpZXdNb2RlXG4gIGNvbnN0IFRWaWV3TW9kZSA9IFwidm1WaWV3IFwiICsgXCJ2bVNlbGVjdCBcIiArIFwidm1OYXZpZ2F0aW9uIFwiO1xuXG4gIC8vIGVudW0gVFZpZXdTZWxlY3Rpb25Nb2RlXG4gIGNvbnN0IFRWaWV3U2VsZWN0aW9uTW9kZSA9XG4gICAgXCJ2c21TaW5nbGUgXCIgKyBcInZzbU11bHRpcGxlIFwiICsgXCJ2c21NdWx0aXBsZUNoZWNrIFwiICsgXCJ2c21Ob1NlbGVjdGlvbiBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRBY3Rpb25UeXBlXG4gIGNvbnN0IFRXaXphcmRBY3Rpb25UeXBlID1cbiAgICBcIndmYXRQcmV2aW91cyBcIiArIFwid2ZhdE5leHQgXCIgKyBcIndmYXRDYW5jZWwgXCIgKyBcIndmYXRGaW5pc2ggXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eVxuICBjb25zdCBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eSA9XG4gICAgXCJ3ZmVwVW5kZWZpbmVkIFwiICtcbiAgICBcIndmZXBUZXh0MyBcIiArXG4gICAgXCJ3ZmVwVGV4dDYgXCIgK1xuICAgIFwid2ZlcFRleHQ5IFwiICtcbiAgICBcIndmZXBTcGluRWRpdCBcIiArXG4gICAgXCJ3ZmVwRHJvcERvd24gXCIgK1xuICAgIFwid2ZlcFJhZGlvR3JvdXAgXCIgK1xuICAgIFwid2ZlcEZsYWcgXCIgK1xuICAgIFwid2ZlcFRleHQxMiBcIiArXG4gICAgXCJ3ZmVwVGV4dDE1IFwiICtcbiAgICBcIndmZXBUZXh0MTggXCIgK1xuICAgIFwid2ZlcFRleHQyMSBcIiArXG4gICAgXCJ3ZmVwVGV4dDI0IFwiICtcbiAgICBcIndmZXBUZXh0MjcgXCIgK1xuICAgIFwid2ZlcFRleHQzMCBcIiArXG4gICAgXCJ3ZmVwUmFkaW9Hcm91cENvbHVtbjEgXCIgK1xuICAgIFwid2ZlcFJhZGlvR3JvdXBDb2x1bW4yIFwiICtcbiAgICBcIndmZXBSYWRpb0dyb3VwQ29sdW1uMyBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRGb3JtRWxlbWVudFR5cGVcbiAgY29uc3QgVFdpemFyZEZvcm1FbGVtZW50VHlwZSA9XG4gICAgXCJ3ZmV0UXVlcnlQYXJhbWV0ZXIgXCIgKyBcIndmZXRUZXh0IFwiICsgXCJ3ZmV0RGVsaW1pdGVyIFwiICsgXCJ3ZmV0TGFiZWwgXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkUGFyYW1UeXBlXG4gIGNvbnN0IFRXaXphcmRQYXJhbVR5cGUgPVxuICAgIFwid3B0U3RyaW5nIFwiICtcbiAgICBcIndwdEludGVnZXIgXCIgK1xuICAgIFwid3B0TnVtZXJpYyBcIiArXG4gICAgXCJ3cHRCb29sZWFuIFwiICtcbiAgICBcIndwdERhdGVUaW1lIFwiICtcbiAgICBcIndwdFBpY2sgXCIgK1xuICAgIFwid3B0VGV4dCBcIiArXG4gICAgXCJ3cHRVc2VyIFwiICtcbiAgICBcIndwdFVzZXJMaXN0IFwiICtcbiAgICBcIndwdEVEb2N1bWVudEluZm8gXCIgK1xuICAgIFwid3B0RURvY3VtZW50SW5mb0xpc3QgXCIgK1xuICAgIFwid3B0UmVmZXJlbmNlUmVjb3JkSW5mbyBcIiArXG4gICAgXCJ3cHRSZWZlcmVuY2VSZWNvcmRJbmZvTGlzdCBcIiArXG4gICAgXCJ3cHRGb2xkZXJJbmZvIFwiICtcbiAgICBcIndwdFRhc2tJbmZvIFwiICtcbiAgICBcIndwdENvbnRlbnRzIFwiICtcbiAgICBcIndwdEZpbGVOYW1lIFwiICtcbiAgICBcIndwdERhdGUgXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkU3RlcFJlc3VsdFxuICBjb25zdCBUV2l6YXJkU3RlcFJlc3VsdCA9XG4gICAgXCJ3c3JDb21wbGV0ZSBcIiArXG4gICAgXCJ3c3JHb05leHQgXCIgK1xuICAgIFwid3NyR29QcmV2aW91cyBcIiArXG4gICAgXCJ3c3JDdXN0b20gXCIgK1xuICAgIFwid3NyQ2FuY2VsIFwiICtcbiAgICBcIndzckdvRmluYWwgXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkU3RlcFR5cGVcbiAgY29uc3QgVFdpemFyZFN0ZXBUeXBlID1cbiAgICBcIndzdEZvcm0gXCIgK1xuICAgIFwid3N0RURvY3VtZW50IFwiICtcbiAgICBcIndzdFRhc2tDYXJkIFwiICtcbiAgICBcIndzdFJlZmVyZW5jZVJlY29yZENhcmQgXCIgK1xuICAgIFwid3N0RmluYWwgXCI7XG5cbiAgLy8gZW51bSBUV29ya0FjY2Vzc1R5cGVcbiAgY29uc3QgVFdvcmtBY2Nlc3NUeXBlID0gXCJ3YUFsbCBcIiArIFwid2FQZXJmb3JtZXJzIFwiICsgXCJ3YU1hbnVhbCBcIjtcblxuICAvLyBlbnVtIFRXb3JrZmxvd0Jsb2NrVHlwZVxuICBjb25zdCBUV29ya2Zsb3dCbG9ja1R5cGUgPVxuICAgIFwid3NiU3RhcnQgXCIgK1xuICAgIFwid3NiRmluaXNoIFwiICtcbiAgICBcIndzYk5vdGljZSBcIiArXG4gICAgXCJ3c2JTdGVwIFwiICtcbiAgICBcIndzYkRlY2lzaW9uIFwiICtcbiAgICBcIndzYldhaXQgXCIgK1xuICAgIFwid3NiTW9uaXRvciBcIiArXG4gICAgXCJ3c2JTY3JpcHQgXCIgK1xuICAgIFwid3NiQ29ubmVjdG9yIFwiICtcbiAgICBcIndzYlN1YlRhc2sgXCIgK1xuICAgIFwid3NiTGlmZUN5Y2xlU3RhZ2UgXCIgK1xuICAgIFwid3NiUGF1c2UgXCI7XG5cbiAgLy8gZW51bSBUV29ya2Zsb3dEYXRhVHlwZVxuICBjb25zdCBUV29ya2Zsb3dEYXRhVHlwZSA9XG4gICAgXCJ3ZHRJbnRlZ2VyIFwiICtcbiAgICBcIndkdEZsb2F0IFwiICtcbiAgICBcIndkdFN0cmluZyBcIiArXG4gICAgXCJ3ZHRQaWNrIFwiICtcbiAgICBcIndkdERhdGVUaW1lIFwiICtcbiAgICBcIndkdEJvb2xlYW4gXCIgK1xuICAgIFwid2R0VGFzayBcIiArXG4gICAgXCJ3ZHRKb2IgXCIgK1xuICAgIFwid2R0Rm9sZGVyIFwiICtcbiAgICBcIndkdEVEb2N1bWVudCBcIiArXG4gICAgXCJ3ZHRSZWZlcmVuY2VSZWNvcmQgXCIgK1xuICAgIFwid2R0VXNlciBcIiArXG4gICAgXCJ3ZHRHcm91cCBcIiArXG4gICAgXCJ3ZHRSb2xlIFwiICtcbiAgICBcIndkdEludGVnZXJDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdEZsb2F0Q29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRTdHJpbmdDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdFBpY2tDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdERhdGVUaW1lQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRCb29sZWFuQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRUYXNrQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRKb2JDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdEZvbGRlckNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0RURvY3VtZW50Q29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRSZWZlcmVuY2VSZWNvcmRDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdFVzZXJDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdEdyb3VwQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRSb2xlQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRDb250ZW50cyBcIiArXG4gICAgXCJ3ZHRVc2VyTGlzdCBcIiArXG4gICAgXCJ3ZHRTZWFyY2hEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJ3ZHREZWFkTGluZSBcIiArXG4gICAgXCJ3ZHRQaWNrU2V0IFwiICtcbiAgICBcIndkdEFjY291bnRDb2xsZWN0aW9uIFwiO1xuXG4gIC8vIGVudW0gVFdvcmtJbXBvcnRhbmNlXG4gIGNvbnN0IFRXb3JrSW1wb3J0YW5jZSA9IFwid2lMb3cgXCIgKyBcIndpTm9ybWFsIFwiICsgXCJ3aUhpZ2ggXCI7XG5cbiAgLy8gZW51bSBUV29ya1JvdXRlVHlwZVxuICBjb25zdCBUV29ya1JvdXRlVHlwZSA9IFwid3J0U29mdCBcIiArIFwid3J0SGFyZCBcIjtcblxuICAvLyBlbnVtIFRXb3JrU3RhdGVcbiAgY29uc3QgVFdvcmtTdGF0ZSA9XG4gICAgXCJ3c0luaXQgXCIgK1xuICAgIFwid3NSdW5uaW5nIFwiICtcbiAgICBcIndzRG9uZSBcIiArXG4gICAgXCJ3c0NvbnRyb2xsZWQgXCIgK1xuICAgIFwid3NBYm9ydGVkIFwiICtcbiAgICBcIndzQ29udGludWVkIFwiO1xuXG4gIC8vIGVudW0gVFdvcmtUZXh0QnVpbGRpbmdNb2RlXG4gIGNvbnN0IFRXb3JrVGV4dEJ1aWxkaW5nTW9kZSA9XG4gICAgXCJ3dG1GdWxsIFwiICsgXCJ3dG1Gcm9tQ3VycmVudCBcIiArIFwid3RtT25seUN1cnJlbnQgXCI7XG5cbiAgLy8g0J/QtdGA0LXRh9C40YHQu9C10L3QuNGPXG4gIGNvbnN0IEVOVU1TID1cbiAgICBUQWNjb3VudFR5cGUgK1xuICAgIFRBY3Rpb25FbmFibGVkTW9kZSArXG4gICAgVEFkZFBvc2l0aW9uICtcbiAgICBUQWxpZ25tZW50ICtcbiAgICBUQXJlYVNob3dNb2RlICtcbiAgICBUQ2VydGlmaWNhdGVJbnZhbGlkYXRpb25SZWFzb24gK1xuICAgIFRDZXJ0aWZpY2F0ZVR5cGUgK1xuICAgIFRDaGVja0xpc3RCb3hJdGVtU3RhdGUgK1xuICAgIFRDbG9zZU9uRXNjICtcbiAgICBUQ29tcFR5cGUgK1xuICAgIFRDb25kaXRpb25Gb3JtYXQgK1xuICAgIFRDb25uZWN0aW9uSW50ZW50ICtcbiAgICBUQ29udGVudEtpbmQgK1xuICAgIFRDb250cm9sVHlwZSArXG4gICAgVENyaXRlcmlvbkNvbnRlbnRUeXBlICtcbiAgICBUQ3VsdHVyZVR5cGUgK1xuICAgIFREYXRhU2V0RXZlbnRUeXBlICtcbiAgICBURGF0YVNldFN0YXRlICtcbiAgICBURGF0ZUZvcm1hdFR5cGUgK1xuICAgIFREYXRlT2Zmc2V0VHlwZSArXG4gICAgVERhdGVUaW1lS2luZCArXG4gICAgVERlYUFjY2Vzc1JpZ2h0cyArXG4gICAgVERvY3VtZW50RGVmYXVsdEFjdGlvbiArXG4gICAgVEVkaXRNb2RlICtcbiAgICBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlICtcbiAgICBURWRtc0FwcGxpY2F0aW9uQWN0aW9uICtcbiAgICBURURvY3VtZW50TG9ja1R5cGUgK1xuICAgIFRFRG9jdW1lbnRTdGVwU2hvd01vZGUgK1xuICAgIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGUgK1xuICAgIFRFRG9jdW1lbnRTdG9yYWdlRnVuY3Rpb24gK1xuICAgIFRFRG9jdW1lbnRTdG9yYWdlVHlwZSArXG4gICAgVEVEb2N1bWVudFZlcnNpb25Tb3VyY2VUeXBlICtcbiAgICBURURvY3VtZW50VmVyc2lvblN0YXRlICtcbiAgICBURW5jb2RlVHlwZSArXG4gICAgVEV4Y2VwdGlvbkNhdGVnb3J5ICtcbiAgICBURXhwb3J0ZWRTaWduYXR1cmVzVHlwZSArXG4gICAgVEV4cG9ydGVkVmVyc2lvblR5cGUgK1xuICAgIFRGaWVsZERhdGFUeXBlICtcbiAgICBURm9sZGVyVHlwZSArXG4gICAgVEdyaWRSb3dIZWlnaHQgK1xuICAgIFRIeXBlcmxpbmtUeXBlICtcbiAgICBUSW1hZ2VGaWxlRm9ybWF0ICtcbiAgICBUSW1hZ2VNb2RlICtcbiAgICBUSW1hZ2VUeXBlICtcbiAgICBUSW5wbGFjZUhpbnRLaW5kICtcbiAgICBUSVNCTENvbnRleHQgK1xuICAgIFRJdGVtU2hvdyArXG4gICAgVEpvYktpbmQgK1xuICAgIFRKb2luVHlwZSArXG4gICAgVExhYmVsUG9zICtcbiAgICBUTGljZW5zaW5nVHlwZSArXG4gICAgVExpZmVDeWNsZVN0YWdlRm9udENvbG9yICtcbiAgICBUTGlmZUN5Y2xlU3RhZ2VGb250U3R5bGUgK1xuICAgIFRMb2NrYWJsZURldmVsb3BtZW50Q29tcG9uZW50VHlwZSArXG4gICAgVE1heFJlY29yZENvdW50UmVzdHJpY3Rpb25UeXBlICtcbiAgICBUUmFuZ2VWYWx1ZVR5cGUgK1xuICAgIFRSZWxhdGl2ZURhdGUgK1xuICAgIFRSZXBvcnREZXN0aW5hdGlvbiArXG4gICAgVFJlcURhdGFUeXBlICtcbiAgICBUUmVxdWlzaXRlRXZlbnRUeXBlICtcbiAgICBUU0JUaW1lVHlwZSArXG4gICAgVFNlYXJjaFNob3dNb2RlICtcbiAgICBUU2VsZWN0TW9kZSArXG4gICAgVFNpZ25hdHVyZVR5cGUgK1xuICAgIFRTaWduZXJDb250ZW50VHlwZSArXG4gICAgVFN0cmluZ3NTb3J0VHlwZSArXG4gICAgVFN0cmluZ1ZhbHVlVHlwZSArXG4gICAgVFN0cnVjdHVyZWRPYmplY3RBdHRyaWJ1dGVUeXBlICtcbiAgICBUVGFza0Fib3J0UmVhc29uICtcbiAgICBUVGV4dFZhbHVlVHlwZSArXG4gICAgVFVzZXJPYmplY3RTdGF0dXMgK1xuICAgIFRVc2VyVHlwZSArXG4gICAgVFZhbHVlc0J1aWxkVHlwZSArXG4gICAgVFZpZXdNb2RlICtcbiAgICBUVmlld1NlbGVjdGlvbk1vZGUgK1xuICAgIFRXaXphcmRBY3Rpb25UeXBlICtcbiAgICBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eSArXG4gICAgVFdpemFyZEZvcm1FbGVtZW50VHlwZSArXG4gICAgVFdpemFyZFBhcmFtVHlwZSArXG4gICAgVFdpemFyZFN0ZXBSZXN1bHQgK1xuICAgIFRXaXphcmRTdGVwVHlwZSArXG4gICAgVFdvcmtBY2Nlc3NUeXBlICtcbiAgICBUV29ya2Zsb3dCbG9ja1R5cGUgK1xuICAgIFRXb3JrZmxvd0RhdGFUeXBlICtcbiAgICBUV29ya0ltcG9ydGFuY2UgK1xuICAgIFRXb3JrUm91dGVUeXBlICtcbiAgICBUV29ya1N0YXRlICtcbiAgICBUV29ya1RleHRCdWlsZGluZ01vZGU7XG5cbiAgLy8g0KHQuNGB0YLQtdC80L3Ri9C1INGE0YPQvdC60YbQuNC4ID09PiBTWVNGVU5DVElPTlNcbiAgY29uc3Qgc3lzdGVtX2Z1bmN0aW9ucyA9XG4gICAgXCJBZGRTdWJTdHJpbmcgXCIgK1xuICAgIFwiQWRqdXN0TGluZUJyZWFrcyBcIiArXG4gICAgXCJBbW91bnRJbldvcmRzIFwiICtcbiAgICBcIkFuYWx5c2lzIFwiICtcbiAgICBcIkFycmF5RGltQ291bnQgXCIgK1xuICAgIFwiQXJyYXlIaWdoQm91bmQgXCIgK1xuICAgIFwiQXJyYXlMb3dCb3VuZCBcIiArXG4gICAgXCJBcnJheU9mIFwiICtcbiAgICBcIkFycmF5UmVEaW0gXCIgK1xuICAgIFwiQXNzZXJ0IFwiICtcbiAgICBcIkFzc2lnbmVkIFwiICtcbiAgICBcIkJlZ2luT2ZNb250aCBcIiArXG4gICAgXCJCZWdpbk9mUGVyaW9kIFwiICtcbiAgICBcIkJ1aWxkUHJvZmlsaW5nT3BlcmF0aW9uQW5hbHlzaXMgXCIgK1xuICAgIFwiQ2FsbFByb2NlZHVyZSBcIiArXG4gICAgXCJDYW5SZWFkRmlsZSBcIiArXG4gICAgXCJDQXJyYXlFbGVtZW50IFwiICtcbiAgICBcIkNEYXRhU2V0UmVxdWlzaXRlIFwiICtcbiAgICBcIkNoYW5nZURhdGUgXCIgK1xuICAgIFwiQ2hhbmdlUmVmZXJlbmNlRGF0YXNldCBcIiArXG4gICAgXCJDaGFyIFwiICtcbiAgICBcIkNoYXJQb3MgXCIgK1xuICAgIFwiQ2hlY2tQYXJhbSBcIiArXG4gICAgXCJDaGVja1BhcmFtVmFsdWUgXCIgK1xuICAgIFwiQ29tcGFyZVN0cmluZ3MgXCIgK1xuICAgIFwiQ29uc3RhbnRFeGlzdHMgXCIgK1xuICAgIFwiQ29udHJvbFN0YXRlIFwiICtcbiAgICBcIkNvbnZlcnREYXRlU3RyIFwiICtcbiAgICBcIkNvcHkgXCIgK1xuICAgIFwiQ29weUZpbGUgXCIgK1xuICAgIFwiQ3JlYXRlQXJyYXkgXCIgK1xuICAgIFwiQ3JlYXRlQ2FjaGVkUmVmZXJlbmNlIFwiICtcbiAgICBcIkNyZWF0ZUNvbm5lY3Rpb24gXCIgK1xuICAgIFwiQ3JlYXRlRGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZUR1YWxMaXN0RGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZUVkaXRvciBcIiArXG4gICAgXCJDcmVhdGVFeGNlcHRpb24gXCIgK1xuICAgIFwiQ3JlYXRlRmlsZSBcIiArXG4gICAgXCJDcmVhdGVGb2xkZXJEaWFsb2cgXCIgK1xuICAgIFwiQ3JlYXRlSW5wdXREaWFsb2cgXCIgK1xuICAgIFwiQ3JlYXRlTGlua0ZpbGUgXCIgK1xuICAgIFwiQ3JlYXRlTGlzdCBcIiArXG4gICAgXCJDcmVhdGVMb2NrIFwiICtcbiAgICBcIkNyZWF0ZU1lbW9yeURhdGFTZXQgXCIgK1xuICAgIFwiQ3JlYXRlT2JqZWN0IFwiICtcbiAgICBcIkNyZWF0ZU9wZW5EaWFsb2cgXCIgK1xuICAgIFwiQ3JlYXRlUHJvZ3Jlc3MgXCIgK1xuICAgIFwiQ3JlYXRlUXVlcnkgXCIgK1xuICAgIFwiQ3JlYXRlUmVmZXJlbmNlIFwiICtcbiAgICBcIkNyZWF0ZVJlcG9ydCBcIiArXG4gICAgXCJDcmVhdGVTYXZlRGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZVNjcmlwdCBcIiArXG4gICAgXCJDcmVhdGVTUUxQaXZvdEZ1bmN0aW9uIFwiICtcbiAgICBcIkNyZWF0ZVN0cmluZ0xpc3QgXCIgK1xuICAgIFwiQ3JlYXRlVHJlZUxpc3RTZWxlY3REaWFsb2cgXCIgK1xuICAgIFwiQ1NlbGVjdFNRTCBcIiArXG4gICAgXCJDU1FMIFwiICtcbiAgICBcIkNTdWJTdHJpbmcgXCIgK1xuICAgIFwiQ3VycmVudFVzZXJJRCBcIiArXG4gICAgXCJDdXJyZW50VXNlck5hbWUgXCIgK1xuICAgIFwiQ3VycmVudFZlcnNpb24gXCIgK1xuICAgIFwiRGF0YVNldExvY2F0ZUV4IFwiICtcbiAgICBcIkRhdGVEaWZmIFwiICtcbiAgICBcIkRhdGVUaW1lRGlmZiBcIiArXG4gICAgXCJEYXRlVG9TdHIgXCIgK1xuICAgIFwiRGF5T2ZXZWVrIFwiICtcbiAgICBcIkRlbGV0ZUZpbGUgXCIgK1xuICAgIFwiRGlyZWN0b3J5RXhpc3RzIFwiICtcbiAgICBcIkRpc2FibGVDaGVja0FjY2Vzc1JpZ2h0cyBcIiArXG4gICAgXCJEaXNhYmxlQ2hlY2tGdWxsU2hvd2luZ1Jlc3RyaWN0aW9uIFwiICtcbiAgICBcIkRpc2FibGVNYXNzVGFza1NlbmRpbmdSZXN0cmljdGlvbnMgXCIgK1xuICAgIFwiRHJvcFRhYmxlIFwiICtcbiAgICBcIkR1cGVTdHJpbmcgXCIgK1xuICAgIFwiRWRpdFRleHQgXCIgK1xuICAgIFwiRW5hYmxlQ2hlY2tBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiRW5hYmxlQ2hlY2tGdWxsU2hvd2luZ1Jlc3RyaWN0aW9uIFwiICtcbiAgICBcIkVuYWJsZU1hc3NUYXNrU2VuZGluZ1Jlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJFbmRPZk1vbnRoIFwiICtcbiAgICBcIkVuZE9mUGVyaW9kIFwiICtcbiAgICBcIkV4Y2VwdGlvbkV4aXN0cyBcIiArXG4gICAgXCJFeGNlcHRpb25zT2ZmIFwiICtcbiAgICBcIkV4Y2VwdGlvbnNPbiBcIiArXG4gICAgXCJFeGVjdXRlIFwiICtcbiAgICBcIkV4ZWN1dGVQcm9jZXNzIFwiICtcbiAgICBcIkV4aXQgXCIgK1xuICAgIFwiRXhwYW5kRW52aXJvbm1lbnRWYXJpYWJsZXMgXCIgK1xuICAgIFwiRXh0cmFjdEZpbGVEcml2ZSBcIiArXG4gICAgXCJFeHRyYWN0RmlsZUV4dCBcIiArXG4gICAgXCJFeHRyYWN0RmlsZU5hbWUgXCIgK1xuICAgIFwiRXh0cmFjdEZpbGVQYXRoIFwiICtcbiAgICBcIkV4dHJhY3RQYXJhbXMgXCIgK1xuICAgIFwiRmlsZUV4aXN0cyBcIiArXG4gICAgXCJGaWxlU2l6ZSBcIiArXG4gICAgXCJGaW5kRmlsZSBcIiArXG4gICAgXCJGaW5kU3ViU3RyaW5nIFwiICtcbiAgICBcIkZpcm1Db250ZXh0IFwiICtcbiAgICBcIkZvcmNlRGlyZWN0b3JpZXMgXCIgK1xuICAgIFwiRm9ybWF0IFwiICtcbiAgICBcIkZvcm1hdERhdGUgXCIgK1xuICAgIFwiRm9ybWF0TnVtZXJpYyBcIiArXG4gICAgXCJGb3JtYXRTUUxEYXRlIFwiICtcbiAgICBcIkZvcm1hdFN0cmluZyBcIiArXG4gICAgXCJGcmVlRXhjZXB0aW9uIFwiICtcbiAgICBcIkdldENvbXBvbmVudCBcIiArXG4gICAgXCJHZXRDb21wb25lbnRMYXVuY2hQYXJhbSBcIiArXG4gICAgXCJHZXRDb25zdGFudCBcIiArXG4gICAgXCJHZXRMYXN0RXhjZXB0aW9uIFwiICtcbiAgICBcIkdldFJlZmVyZW5jZVJlY29yZCBcIiArXG4gICAgXCJHZXRSZWZUeXBlQnlSZWZJRCBcIiArXG4gICAgXCJHZXRUYWJsZUlEIFwiICtcbiAgICBcIkdldFRlbXBGb2xkZXIgXCIgK1xuICAgIFwiSWZUaGVuIFwiICtcbiAgICBcIkluIFwiICtcbiAgICBcIkluZGV4T2YgXCIgK1xuICAgIFwiSW5wdXREaWFsb2cgXCIgK1xuICAgIFwiSW5wdXREaWFsb2dFeCBcIiArXG4gICAgXCJJbnRlcmFjdGl2ZU1vZGUgXCIgK1xuICAgIFwiSXNGaWxlTG9ja2VkIFwiICtcbiAgICBcIklzR3JhcGhpY0ZpbGUgXCIgK1xuICAgIFwiSXNOdW1lcmljIFwiICtcbiAgICBcIkxlbmd0aCBcIiArXG4gICAgXCJMb2FkU3RyaW5nIFwiICtcbiAgICBcIkxvYWRTdHJpbmdGbXQgXCIgK1xuICAgIFwiTG9jYWxUaW1lVG9VVEMgXCIgK1xuICAgIFwiTG93ZXJDYXNlIFwiICtcbiAgICBcIk1heCBcIiArXG4gICAgXCJNZXNzYWdlQm94IFwiICtcbiAgICBcIk1lc3NhZ2VCb3hFeCBcIiArXG4gICAgXCJNaW1lRGVjb2RlQmluYXJ5IFwiICtcbiAgICBcIk1pbWVEZWNvZGVTdHJpbmcgXCIgK1xuICAgIFwiTWltZUVuY29kZUJpbmFyeSBcIiArXG4gICAgXCJNaW1lRW5jb2RlU3RyaW5nIFwiICtcbiAgICBcIk1pbiBcIiArXG4gICAgXCJNb25leUluV29yZHMgXCIgK1xuICAgIFwiTW92ZUZpbGUgXCIgK1xuICAgIFwiTmV3SUQgXCIgK1xuICAgIFwiTm93IFwiICtcbiAgICBcIk9wZW5GaWxlIFwiICtcbiAgICBcIk9yZCBcIiArXG4gICAgXCJQcmVjaXNpb24gXCIgK1xuICAgIFwiUmFpc2UgXCIgK1xuICAgIFwiUmVhZENlcnRpZmljYXRlRnJvbUZpbGUgXCIgK1xuICAgIFwiUmVhZEZpbGUgXCIgK1xuICAgIFwiUmVmZXJlbmNlQ29kZUJ5SUQgXCIgK1xuICAgIFwiUmVmZXJlbmNlTnVtYmVyIFwiICtcbiAgICBcIlJlZmVyZW5jZVJlcXVpc2l0ZU1vZGUgXCIgK1xuICAgIFwiUmVmZXJlbmNlUmVxdWlzaXRlVmFsdWUgXCIgK1xuICAgIFwiUmVnaW9uRGF0ZVNldHRpbmdzIFwiICtcbiAgICBcIlJlZ2lvbk51bWJlclNldHRpbmdzIFwiICtcbiAgICBcIlJlZ2lvblRpbWVTZXR0aW5ncyBcIiArXG4gICAgXCJSZWdSZWFkIFwiICtcbiAgICBcIlJlZ1dyaXRlIFwiICtcbiAgICBcIlJlbmFtZUZpbGUgXCIgK1xuICAgIFwiUmVwbGFjZSBcIiArXG4gICAgXCJSb3VuZCBcIiArXG4gICAgXCJTZWxlY3RTZXJ2ZXJDb2RlIFwiICtcbiAgICBcIlNlbGVjdFNRTCBcIiArXG4gICAgXCJTZXJ2ZXJEYXRlVGltZSBcIiArXG4gICAgXCJTZXRDb25zdGFudCBcIiArXG4gICAgXCJTZXRNYW5hZ2VkRm9sZGVyRmllbGRzU3RhdGUgXCIgK1xuICAgIFwiU2hvd0NvbnN0YW50c0lucHV0RGlhbG9nIFwiICtcbiAgICBcIlNob3dNZXNzYWdlIFwiICtcbiAgICBcIlNsZWVwIFwiICtcbiAgICBcIlNwbGl0IFwiICtcbiAgICBcIlNRTCBcIiArXG4gICAgXCJTUUwyWExTVEFCIFwiICtcbiAgICBcIlNRTFByb2ZpbGluZ1NlbmRSZXBvcnQgXCIgK1xuICAgIFwiU3RyVG9EYXRlIFwiICtcbiAgICBcIlN1YlN0cmluZyBcIiArXG4gICAgXCJTdWJTdHJpbmdDb3VudCBcIiArXG4gICAgXCJTeXN0ZW1TZXR0aW5nIFwiICtcbiAgICBcIlRpbWUgXCIgK1xuICAgIFwiVGltZURpZmYgXCIgK1xuICAgIFwiVG9kYXkgXCIgK1xuICAgIFwiVHJhbnNsaXRlcmF0ZSBcIiArXG4gICAgXCJUcmltIFwiICtcbiAgICBcIlVwcGVyQ2FzZSBcIiArXG4gICAgXCJVc2VyU3RhdHVzIFwiICtcbiAgICBcIlVUQ1RvTG9jYWxUaW1lIFwiICtcbiAgICBcIlZhbGlkYXRlWE1MIFwiICtcbiAgICBcIlZhcklzQ2xlYXIgXCIgK1xuICAgIFwiVmFySXNFbXB0eSBcIiArXG4gICAgXCJWYXJJc051bGwgXCIgK1xuICAgIFwiV29ya1RpbWVEaWZmIFwiICtcbiAgICBcIldyaXRlRmlsZSBcIiArXG4gICAgXCJXcml0ZUZpbGVFeCBcIiArXG4gICAgXCJXcml0ZU9iamVjdEhpc3RvcnkgXCIgK1xuICAgIFwi0JDQvdCw0LvQuNC3IFwiICtcbiAgICBcItCR0LDQt9Cw0JTQsNC90L3Ri9GFIFwiICtcbiAgICBcItCR0LvQvtC60JXRgdGC0YwgXCIgK1xuICAgIFwi0JHQu9C+0LrQldGB0YLRjNCg0LDRgdGIIFwiICtcbiAgICBcItCR0LvQvtC60JjQvdGE0L4gXCIgK1xuICAgIFwi0JHQu9C+0LrQodC90Y/RgtGMIFwiICtcbiAgICBcItCR0LvQvtC60KHQvdGP0YLRjNCg0LDRgdGIIFwiICtcbiAgICBcItCR0LvQvtC60KPRgdGC0LDQvdC+0LLQuNGC0YwgXCIgK1xuICAgIFwi0JLQstC+0LQgXCIgK1xuICAgIFwi0JLQstC+0LTQnNC10L3RjiBcIiArXG4gICAgXCLQktC10LTQoSBcIiArXG4gICAgXCLQktC10LTQodC/0YAgXCIgK1xuICAgIFwi0JLQtdGA0YXQvdGP0Y/Qk9GA0LDQvdC40YbQsNCc0LDRgdGB0LjQstCwIFwiICtcbiAgICBcItCS0L3QtdGI0J/RgNC+0LPRgCBcIiArXG4gICAgXCLQktC+0YHRgdGCIFwiICtcbiAgICBcItCS0YDQtdC80LXQvdC90LDRj9Cf0LDQv9C60LAgXCIgK1xuICAgIFwi0JLRgNC10LzRjyBcIiArXG4gICAgXCLQktGL0LHQvtGAU1FMIFwiICtcbiAgICBcItCS0YvQsdGA0LDRgtGM0JfQsNC/0LjRgdGMIFwiICtcbiAgICBcItCS0YvQtNC10LvQuNGC0YzQodGC0YAgXCIgK1xuICAgIFwi0JLRi9C30LLQsNGC0YwgXCIgK1xuICAgIFwi0JLRi9C/0L7Qu9C90LjRgtGMIFwiICtcbiAgICBcItCS0YvQv9Cf0YDQvtCz0YAgXCIgK1xuICAgIFwi0JPRgNCw0YTQuNGH0LXRgdC60LjQudCk0LDQudC7IFwiICtcbiAgICBcItCT0YDRg9C/0L/QsNCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+IFwiICtcbiAgICBcItCU0LDRgtCw0JLRgNC10LzRj9Ch0LXRgNCyIFwiICtcbiAgICBcItCU0LXQvdGM0J3QtdC00LXQu9C4IFwiICtcbiAgICBcItCU0LjQsNC70L7Qs9CU0LDQndC10YIgXCIgK1xuICAgIFwi0JTQu9C40L3QsNCh0YLRgCBcIiArXG4gICAgXCLQlNC+0LHQn9C+0LTRgdGC0YAgXCIgK1xuICAgIFwi0JXQn9GD0YHRgtC+IFwiICtcbiAgICBcItCV0YHQu9C40KLQviBcIiArXG4gICAgXCLQldCn0LjRgdC70L4gXCIgK1xuICAgIFwi0JfQsNC80J/QvtC00YHRgtGAIFwiICtcbiAgICBcItCX0LDQv9C40YHRjNCh0L/RgNCw0LLQvtGH0L3QuNC60LAgXCIgK1xuICAgIFwi0JfQvdCw0YfQn9C+0LvRj9Ch0L/RgCBcIiArXG4gICAgXCLQmNCU0KLQuNC/0KHQv9GAIFwiICtcbiAgICBcItCY0LfQstC70LXRh9GM0JTQuNGB0LogXCIgK1xuICAgIFwi0JjQt9Cy0LvQtdGH0YzQmNC80Y/QpNCw0LnQu9CwIFwiICtcbiAgICBcItCY0LfQstC70LXRh9GM0J/Rg9GC0YwgXCIgK1xuICAgIFwi0JjQt9Cy0LvQtdGH0YzQoNCw0YHRiNC40YDQtdC90LjQtSBcIiArXG4gICAgXCLQmNC30LzQlNCw0YIgXCIgK1xuICAgIFwi0JjQt9C80LXQvdC40YLRjNCg0LDQt9C80LXRgNCc0LDRgdGB0LjQstCwIFwiICtcbiAgICBcItCY0LfQvNC10YDQtdC90LjQudCc0LDRgdGB0LjQstCwIFwiICtcbiAgICBcItCY0LzRj9Ce0YDQsyBcIiArXG4gICAgXCLQmNC80Y/Qn9C+0LvRj9Ch0L/RgCBcIiArXG4gICAgXCLQmNC90LTQtdC60YEgXCIgK1xuICAgIFwi0JjQvdC00LjQutCw0YLQvtGA0JfQsNC60YDRi9GC0YwgXCIgK1xuICAgIFwi0JjQvdC00LjQutCw0YLQvtGA0J7RgtC60YDRi9GC0YwgXCIgK1xuICAgIFwi0JjQvdC00LjQutCw0YLQvtGA0KjQsNCzIFwiICtcbiAgICBcItCY0L3RgtC10YDQsNC60YLQuNCy0L3Ri9C50KDQtdC20LjQvCBcIiArXG4gICAgXCLQmNGC0L7Qs9Ci0LHQu9Ch0L/RgCBcIiArXG4gICAgXCLQmtC+0LTQktC40LTQktC10LTQodC/0YAgXCIgK1xuICAgIFwi0JrQvtC00JLQuNC00KHQv9GA0J/QvtCY0JQgXCIgK1xuICAgIFwi0JrQvtC00J/QvkFuYWxpdCBcIiArXG4gICAgXCLQmtC+0LTQodC40LzQstC+0LvQsCBcIiArXG4gICAgXCLQmtC+0LTQodC/0YAgXCIgK1xuICAgIFwi0JrQvtC70J/QvtC00YHRgtGAIFwiICtcbiAgICBcItCa0L7Qu9Cf0YDQvtC/IFwiICtcbiAgICBcItCa0L7QvdCc0LXRgSBcIiArXG4gICAgXCLQmtC+0L3RgdGCIFwiICtcbiAgICBcItCa0L7QvdGB0YLQldGB0YLRjCBcIiArXG4gICAgXCLQmtC+0L3RgdGC0JfQvdCw0YcgXCIgK1xuICAgIFwi0JrQvtC90KLRgNCw0L0gXCIgK1xuICAgIFwi0JrQvtC/0LjRgNC+0LLQsNGC0YzQpNCw0LnQuyBcIiArXG4gICAgXCLQmtC+0L/QuNGP0KHRgtGAIFwiICtcbiAgICBcItCa0J/QtdGA0LjQvtC0IFwiICtcbiAgICBcItCa0KHRgtGA0KLQsdC70KHQv9GAIFwiICtcbiAgICBcItCc0LDQutGBIFwiICtcbiAgICBcItCc0LDQutGB0KHRgtGA0KLQsdC70KHQv9GAIFwiICtcbiAgICBcItCc0LDRgdGB0LjQsiBcIiArXG4gICAgXCLQnNC10L3RjiBcIiArXG4gICAgXCLQnNC10L3RjtCg0LDRgdGIIFwiICtcbiAgICBcItCc0LjQvSBcIiArXG4gICAgXCLQndCw0LHQvtGA0JTQsNC90L3Ri9GF0J3QsNC50YLQuNCg0LDRgdGIIFwiICtcbiAgICBcItCd0LDQuNC80JLQuNC00KHQv9GAIFwiICtcbiAgICBcItCd0LDQuNC80J/QvkFuYWxpdCBcIiArXG4gICAgXCLQndCw0LjQvNCh0L/RgCBcIiArXG4gICAgXCLQndCw0YHRgtGA0L7QuNGC0YzQn9C10YDQtdCy0L7QtNGL0KHRgtGA0L7QuiBcIiArXG4gICAgXCLQndCw0YfQnNC10YEgXCIgK1xuICAgIFwi0J3QsNGH0KLRgNCw0L0gXCIgK1xuICAgIFwi0J3QuNC20L3Rj9GP0JPRgNCw0L3QuNGG0LDQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQndC+0LzQtdGA0KHQv9GAIFwiICtcbiAgICBcItCd0J/QtdGA0LjQvtC0IFwiICtcbiAgICBcItCe0LrQvdC+IFwiICtcbiAgICBcItCe0LrRgCBcIiArXG4gICAgXCLQntC60YDRg9C20LXQvdC40LUgXCIgK1xuICAgIFwi0J7RgtC70JjQvdGE0JTQvtCx0LDQstC40YLRjCBcIiArXG4gICAgXCLQntGC0LvQmNC90YTQo9C00LDQu9C40YLRjCBcIiArXG4gICAgXCLQntGC0YfQtdGCIFwiICtcbiAgICBcItCe0YLRh9C10YLQkNC90LDQuyBcIiArXG4gICAgXCLQntGC0YfQtdGC0JjQvdGCIFwiICtcbiAgICBcItCf0LDQv9C60LDQodGD0YnQtdGB0YLQstGD0LXRgiBcIiArXG4gICAgXCLQn9Cw0YPQt9CwIFwiICtcbiAgICBcItCf0JLRi9Cx0L7RgFNRTCBcIiArXG4gICAgXCLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjNCk0LDQudC7IFwiICtcbiAgICBcItCf0LXRgNC10LzQtdC90L3Ri9C1IFwiICtcbiAgICBcItCf0LXRgNC10LzQtdGB0YLQuNGC0YzQpNCw0LnQuyBcIiArXG4gICAgXCLQn9C+0LTRgdGC0YAgXCIgK1xuICAgIFwi0J/QvtC40YHQutCf0L7QtNGB0YLRgCBcIiArXG4gICAgXCLQn9C+0LjRgdC60KHRgtGAIFwiICtcbiAgICBcItCf0L7Qu9GD0YfQuNGC0YzQmNCU0KLQsNCx0LvQuNGG0YsgXCIgK1xuICAgIFwi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L4gXCIgK1xuICAgIFwi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0JjQlCBcIiArXG4gICAgXCLQn9C+0LvRjNC30L7QstCw0YLQtdC70YzQmNC80Y8gXCIgK1xuICAgIFwi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0KHRgtCw0YLRg9GBIFwiICtcbiAgICBcItCf0YDQtdGA0LLQsNGC0YwgXCIgK1xuICAgIFwi0J/RgNC+0LLQtdGA0LjRgtGM0J/QsNGA0LDQvNC10YLRgCBcIiArXG4gICAgXCLQn9GA0L7QstC10YDQuNGC0YzQn9Cw0YDQsNC80LXRgtGA0JfQvdCw0YcgXCIgK1xuICAgIFwi0J/RgNC+0LLQtdGA0LjRgtGM0KPRgdC70L7QstC40LUgXCIgK1xuICAgIFwi0KDQsNC30LHQodGC0YAgXCIgK1xuICAgIFwi0KDQsNC30L3QktGA0LXQvNGPIFwiICtcbiAgICBcItCg0LDQt9C90JTQsNGCIFwiICtcbiAgICBcItCg0LDQt9C90JTQsNGC0LDQktGA0LXQvNGPIFwiICtcbiAgICBcItCg0LDQt9C90KDQsNCx0JLRgNC10LzRjyBcIiArXG4gICAgXCLQoNC10LPQo9GB0YLQktGA0LXQvCBcIiArXG4gICAgXCLQoNC10LPQo9GB0YLQlNCw0YIgXCIgK1xuICAgIFwi0KDQtdCz0KPRgdGC0KfRgdC7IFwiICtcbiAgICBcItCg0LXQtNCi0LXQutGB0YIgXCIgK1xuICAgIFwi0KDQtdC10YHRgtGA0JfQsNC/0LjRgdGMIFwiICtcbiAgICBcItCg0LXQtdGB0YLRgNCh0L/QuNGB0L7QutCY0LzQtdC90J/QsNGA0LDQvCBcIiArXG4gICAgXCLQoNC10LXRgdGC0YDQp9GC0LXQvdC40LUgXCIgK1xuICAgIFwi0KDQtdC60LLQodC/0YAgXCIgK1xuICAgIFwi0KDQtdC60LLQodC/0YDQn9GAIFwiICtcbiAgICBcItCh0LXQs9C+0LTQvdGPIFwiICtcbiAgICBcItCh0LXQudGH0LDRgSBcIiArXG4gICAgXCLQodC10YDQstC10YAgXCIgK1xuICAgIFwi0KHQtdGA0LLQtdGA0J/RgNC+0YbQtdGB0YHQmNCUIFwiICtcbiAgICBcItCh0LXRgNGC0LjRhNC40LrQsNGC0KTQsNC50LvQodGH0LjRgtCw0YLRjCBcIiArXG4gICAgXCLQodC20J/RgNC+0LEgXCIgK1xuICAgIFwi0KHQuNC80LLQvtC7IFwiICtcbiAgICBcItCh0LjRgdGC0LXQvNCw0JTQuNGA0LXQutGC0YPQvNCa0L7QtCBcIiArXG4gICAgXCLQodC40YHRgtC10LzQsNCY0L3RhNC+0YDQvNCw0YbQuNGPIFwiICtcbiAgICBcItCh0LjRgdGC0LXQvNCw0JrQvtC0IFwiICtcbiAgICBcItCh0L7QtNC10YDQttC40YIgXCIgK1xuICAgIFwi0KHQvtC10LTQuNC90LXQvdC40LXQl9Cw0LrRgNGL0YLRjCBcIiArXG4gICAgXCLQodC+0LXQtNC40L3QtdC90LjQtdCe0YLQutGA0YvRgtGMIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCzIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0JLRi9Cx0L7RgNCw0JjQt9CU0LLRg9GF0KHQv9C40YHQutC+0LIgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQlNC40LDQu9C+0LPQktGL0LHQvtGA0LDQn9Cw0L/QutC4IFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0J7RgtC60YDRi9GC0LjRj9Ck0LDQudC70LAgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQlNC40LDQu9C+0LPQodC+0YXRgNCw0L3QtdC90LjRj9Ck0LDQudC70LAgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQl9Cw0L/RgNC+0YEgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQmNC90LTQuNC60LDRgtC+0YAgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQmNGB0LrQu9GO0YfQtdC90LjQtSBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCa0Y3RiNC40YDQvtCy0LDQvdC90YvQudCh0L/RgNCw0LLQvtGH0L3QuNC6IFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JzQsNGB0YHQuNCyIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0J3QsNCx0L7RgNCU0LDQvdC90YvRhSBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCe0LHRitC10LrRgiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCe0YLRh9C10YIgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQn9Cw0L/QutGDIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0KDQtdC00LDQutGC0L7RgCBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0L7QtdC00LjQvdC10L3QuNC1IFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0KHQv9C40YHQvtC6IFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0KHQv9C40YHQvtC60KHRgtGA0L7QuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0L/RgNCw0LLQvtGH0L3QuNC6IFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0KHRhtC10L3QsNGA0LjQuSBcIiArXG4gICAgXCLQodC+0LfQtNCh0L/RgCBcIiArXG4gICAgXCLQodC+0YHRgtCh0L/RgCBcIiArXG4gICAgXCLQodC+0YXRgCBcIiArXG4gICAgXCLQodC+0YXRgNCh0L/RgCBcIiArXG4gICAgXCLQodC/0LjRgdC+0LrQodC40YHRgtC10LwgXCIgK1xuICAgIFwi0KHQv9GAIFwiICtcbiAgICBcItCh0L/RgNCw0LLQvtGH0L3QuNC6IFwiICtcbiAgICBcItCh0L/RgNCR0LvQvtC60JXRgdGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0JHQu9C+0LrQodC90Y/RgtGMIFwiICtcbiAgICBcItCh0L/RgNCR0LvQvtC60KHQvdGP0YLRjNCg0LDRgdGIIFwiICtcbiAgICBcItCh0L/RgNCR0LvQvtC60KPRgdGC0LDQvdC+0LLQuNGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0JjQt9C80J3QsNCx0JTQsNC9IFwiICtcbiAgICBcItCh0L/RgNCa0L7QtCBcIiArXG4gICAgXCLQodC/0YDQndC+0LzQtdGAIFwiICtcbiAgICBcItCh0L/RgNCe0LHQvdC+0LLQuNGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0J7RgtC60YDRi9GC0YwgXCIgK1xuICAgIFwi0KHQv9GA0J7RgtC80LXQvdC40YLRjCBcIiArXG4gICAgXCLQodC/0YDQn9Cw0YDQsNC8IFwiICtcbiAgICBcItCh0L/RgNCf0L7Qu9C10JfQvdCw0YcgXCIgK1xuICAgIFwi0KHQv9GA0J/QvtC70LXQmNC80Y8gXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LIgXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQktCy0LXQtNCX0L0gXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQndC+0LLRi9C1IFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0J/RgCBcIiArXG4gICAgXCLQodC/0YDQoNC10LrQstCf0YDQtdC00JfQvSBcIiArXG4gICAgXCLQodC/0YDQoNC10LrQstCg0LXQttC40LwgXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQotC40L/QotC10LrRgdGCIFwiICtcbiAgICBcItCh0L/RgNCh0L7Qt9C00LDRgtGMIFwiICtcbiAgICBcItCh0L/RgNCh0L7RgdGCIFwiICtcbiAgICBcItCh0L/RgNCh0L7RhdGA0LDQvdC40YLRjCBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQmNGC0L7QsyBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YAgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0JrQvtC7IFwiICtcbiAgICBcItCh0L/RgNCi0LHQu9Ch0YLRgNCc0LDQutGBIFwiICtcbiAgICBcItCh0L/RgNCi0LHQu9Ch0YLRgNCc0LjQvSBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQn9GA0LXQtCBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQodC70LXQtCBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQodC+0LfQtCBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQo9C0IFwiICtcbiAgICBcItCh0L/RgNCi0LXQutCf0YDQtdC00YHRgiBcIiArXG4gICAgXCLQodC/0YDQo9C00LDQu9C40YLRjCBcIiArXG4gICAgXCLQodGA0LDQstC90LjRgtGM0KHRgtGAIFwiICtcbiAgICBcItCh0YLRgNCS0LXRgNGF0KDQtdCz0LjRgdGC0YAgXCIgK1xuICAgIFwi0KHRgtGA0J3QuNC20L3QoNC10LPQuNGB0YLRgCBcIiArXG4gICAgXCLQodGC0YDQotCx0LvQodC/0YAgXCIgK1xuICAgIFwi0KHRg9C80J/RgNC+0L8gXCIgK1xuICAgIFwi0KHRhtC10L3QsNGA0LjQuSBcIiArXG4gICAgXCLQodGG0LXQvdCw0YDQuNC50J/QsNGA0LDQvCBcIiArXG4gICAgXCLQotC10LrQktC10YDRgdC40Y8gXCIgK1xuICAgIFwi0KLQtdC60J7RgNCzIFwiICtcbiAgICBcItCi0L7Rh9C9IFwiICtcbiAgICBcItCi0YDQsNC9IFwiICtcbiAgICBcItCi0YDQsNC90YHQu9C40YLQtdGA0LDRhtC40Y8gXCIgK1xuICAgIFwi0KPQtNCw0LvQuNGC0YzQotCw0LHQu9C40YbRgyBcIiArXG4gICAgXCLQo9C00LDQu9C40YLRjNCk0LDQudC7IFwiICtcbiAgICBcItCj0LTQodC/0YAgXCIgK1xuICAgIFwi0KPQtNCh0YLRgNCi0LHQu9Ch0L/RgCBcIiArXG4gICAgXCLQo9GB0YIgXCIgK1xuICAgIFwi0KPRgdGC0LDQvdC+0LLQutC40JrQvtC90YHRgtCw0L3RgiBcIiArXG4gICAgXCLQpNCw0LnQu9CQ0YLRgNC40LHRg9GC0KHRh9C40YLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQkNGC0YDQuNCx0YPRgtCj0YHRgtCw0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JLRgNC10LzRjyBcIiArXG4gICAgXCLQpNCw0LnQu9CS0YDQtdC80Y/Qo9GB0YLQsNC90L7QstC40YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9CS0YvQsdGA0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JfQsNC90Y/RgiBcIiArXG4gICAgXCLQpNCw0LnQu9CX0LDQv9C40YHQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQmNGB0LrQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQmtC+0L/QuNGA0L7QstCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cc0L7QttC90L7Qp9C40YLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQntGC0LrRgNGL0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70J/QtdGA0LXQutC+0LTQuNGA0L7QstCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cf0LXRgNC10LzQtdGB0YLQuNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQn9GA0L7RgdC80L7RgtGA0LXRgtGMIFwiICtcbiAgICBcItCk0LDQudC70KDQsNC30LzQtdGAIFwiICtcbiAgICBcItCk0LDQudC70KHQvtC30LTQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQodGB0YvQu9C60LDQodC+0LfQtNCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Ch0YPRidC10YHRgtCy0YPQtdGCIFwiICtcbiAgICBcItCk0LDQudC70KHRh9C40YLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQo9C00LDQu9C40YLRjCBcIiArXG4gICAgXCLQpNC80YJTUUzQlNCw0YIgXCIgK1xuICAgIFwi0KTQvNGC0JTQsNGCIFwiICtcbiAgICBcItCk0LzRgtCh0YLRgCBcIiArXG4gICAgXCLQpNC80YLQp9GB0LsgXCIgK1xuICAgIFwi0KTQvtGA0LzQsNGCIFwiICtcbiAgICBcItCm0JzQsNGB0YHQuNCy0K3Qu9C10LzQtdC90YIgXCIgK1xuICAgIFwi0KbQndCw0LHQvtGA0JTQsNC90L3Ri9GF0KDQtdC60LLQuNC30LjRgiBcIiArXG4gICAgXCLQptCf0L7QtNGB0YLRgCBcIjtcblxuICAvLyDQn9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90YvQtSDQv9C10YDQtdC80LXQvdC90YvQtSA9PT4gYnVpbHRfaW5cbiAgY29uc3QgcHJlZGVmaW5lZF92YXJpYWJsZXMgPVxuICAgIFwiQWx0U3RhdGUgXCIgK1xuICAgIFwiQXBwbGljYXRpb24gXCIgK1xuICAgIFwiQ2FsbFR5cGUgXCIgK1xuICAgIFwiQ29tcG9uZW50VG9rZW5zIFwiICtcbiAgICBcIkNyZWF0ZWRKb2JzIFwiICtcbiAgICBcIkNyZWF0ZWROb3RpY2VzIFwiICtcbiAgICBcIkNvbnRyb2xTdGF0ZSBcIiArXG4gICAgXCJEaWFsb2dSZXN1bHQgXCIgK1xuICAgIFwiRGlhbG9ncyBcIiArXG4gICAgXCJFRG9jdW1lbnRzIFwiICtcbiAgICBcIkVEb2N1bWVudFZlcnNpb25Tb3VyY2UgXCIgK1xuICAgIFwiRm9sZGVycyBcIiArXG4gICAgXCJHbG9iYWxJRHMgXCIgK1xuICAgIFwiSm9iIFwiICtcbiAgICBcIkpvYnMgXCIgK1xuICAgIFwiSW5wdXRWYWx1ZSBcIiArXG4gICAgXCJMb29rVXBSZWZlcmVuY2UgXCIgK1xuICAgIFwiTG9va1VwUmVxdWlzaXRlTmFtZXMgXCIgK1xuICAgIFwiTG9va1VwU2VhcmNoIFwiICtcbiAgICBcIk9iamVjdCBcIiArXG4gICAgXCJQYXJlbnRDb21wb25lbnQgXCIgK1xuICAgIFwiUHJvY2Vzc2VzIFwiICtcbiAgICBcIlJlZmVyZW5jZXMgXCIgK1xuICAgIFwiUmVxdWlzaXRlIFwiICtcbiAgICBcIlJlcG9ydE5hbWUgXCIgK1xuICAgIFwiUmVwb3J0cyBcIiArXG4gICAgXCJSZXN1bHQgXCIgK1xuICAgIFwiU2NyaXB0cyBcIiArXG4gICAgXCJTZWFyY2hlcyBcIiArXG4gICAgXCJTZWxlY3RlZEF0dGFjaG1lbnRzIFwiICtcbiAgICBcIlNlbGVjdGVkSXRlbXMgXCIgK1xuICAgIFwiU2VsZWN0TW9kZSBcIiArXG4gICAgXCJTZW5kZXIgXCIgK1xuICAgIFwiU2VydmVyRXZlbnRzIFwiICtcbiAgICBcIlNlcnZpY2VGYWN0b3J5IFwiICtcbiAgICBcIlNoaWZ0U3RhdGUgXCIgK1xuICAgIFwiU3ViVGFzayBcIiArXG4gICAgXCJTeXN0ZW1EaWFsb2dzIFwiICtcbiAgICBcIlRhc2tzIFwiICtcbiAgICBcIldpemFyZCBcIiArXG4gICAgXCJXaXphcmRzIFwiICtcbiAgICBcIldvcmsgXCIgK1xuICAgIFwi0JLRi9C30L7QstCh0L/QvtGB0L7QsSBcIiArXG4gICAgXCLQmNC80Y/QntGC0YfQtdGC0LAgXCIgK1xuICAgIFwi0KDQtdC60LLQl9C90LDRhyBcIjtcblxuICAvLyDQmNC90YLQtdGA0YTQtdC50YHRiyA9PT4gdHlwZVxuICBjb25zdCBpbnRlcmZhY2VzID1cbiAgICBcIklBcHBsaWNhdGlvbiBcIiArXG4gICAgXCJJQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIklBY2NvdW50UmVwb3NpdG9yeSBcIiArXG4gICAgXCJJQWNjb3VudFNlbGVjdGlvblJlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJJQWN0aW9uIFwiICtcbiAgICBcIklBY3Rpb25MaXN0IFwiICtcbiAgICBcIklBZG1pbmlzdHJhdGlvbkhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJQW5jaG9ycyBcIiArXG4gICAgXCJJQXBwbGljYXRpb24gXCIgK1xuICAgIFwiSUFyY2hpdmVJbmZvIFwiICtcbiAgICBcIklBdHRhY2htZW50IFwiICtcbiAgICBcIklBdHRhY2htZW50TGlzdCBcIiArXG4gICAgXCJJQ2hlY2tMaXN0Qm94IFwiICtcbiAgICBcIklDaGVja1BvaW50ZWRMaXN0IFwiICtcbiAgICBcIklDb2x1bW4gXCIgK1xuICAgIFwiSUNvbXBvbmVudCBcIiArXG4gICAgXCJJQ29tcG9uZW50RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSUNvbXBvbmVudFRva2VuIFwiICtcbiAgICBcIklDb21wb25lbnRUb2tlbkZhY3RvcnkgXCIgK1xuICAgIFwiSUNvbXBvbmVudFRva2VuSW5mbyBcIiArXG4gICAgXCJJQ29tcFJlY29yZEluZm8gXCIgK1xuICAgIFwiSUNvbm5lY3Rpb24gXCIgK1xuICAgIFwiSUNvbnRlbnRzIFwiICtcbiAgICBcIklDb250cm9sIFwiICtcbiAgICBcIklDb250cm9sSm9iIFwiICtcbiAgICBcIklDb250cm9sSm9iSW5mbyBcIiArXG4gICAgXCJJQ29udHJvbExpc3QgXCIgK1xuICAgIFwiSUNyeXB0byBcIiArXG4gICAgXCJJQ3J5cHRvMiBcIiArXG4gICAgXCJJQ3VzdG9tSm9iIFwiICtcbiAgICBcIklDdXN0b21Kb2JJbmZvIFwiICtcbiAgICBcIklDdXN0b21MaXN0Qm94IFwiICtcbiAgICBcIklDdXN0b21PYmplY3RXaXphcmRTdGVwIFwiICtcbiAgICBcIklDdXN0b21Xb3JrIFwiICtcbiAgICBcIklDdXN0b21Xb3JrSW5mbyBcIiArXG4gICAgXCJJRGF0YVNldCBcIiArXG4gICAgXCJJRGF0YVNldEFjY2Vzc0luZm8gXCIgK1xuICAgIFwiSURhdGFTaWduZXIgXCIgK1xuICAgIFwiSURhdGVDcml0ZXJpb24gXCIgK1xuICAgIFwiSURhdGVSZXF1aXNpdGUgXCIgK1xuICAgIFwiSURhdGVSZXF1aXNpdGVEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJRGF0ZVZhbHVlIFwiICtcbiAgICBcIklEZWFBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiSURlYU9iamVjdEluZm8gXCIgK1xuICAgIFwiSURldmVsb3BtZW50Q29tcG9uZW50TG9jayBcIiArXG4gICAgXCJJRGlhbG9nIFwiICtcbiAgICBcIklEaWFsb2dGYWN0b3J5IFwiICtcbiAgICBcIklEaWFsb2dQaWNrUmVxdWlzaXRlSXRlbXMgXCIgK1xuICAgIFwiSURpYWxvZ3NGYWN0b3J5IFwiICtcbiAgICBcIklESUNTRmFjdG9yeSBcIiArXG4gICAgXCJJRG9jUmVxdWlzaXRlIFwiICtcbiAgICBcIklEb2N1bWVudEluZm8gXCIgK1xuICAgIFwiSUR1YWxMaXN0RGlhbG9nIFwiICtcbiAgICBcIklFQ2VydGlmaWNhdGUgXCIgK1xuICAgIFwiSUVDZXJ0aWZpY2F0ZUluZm8gXCIgK1xuICAgIFwiSUVDZXJ0aWZpY2F0ZXMgXCIgK1xuICAgIFwiSUVkaXRDb250cm9sIFwiICtcbiAgICBcIklFZGl0b3JGb3JtIFwiICtcbiAgICBcIklFZG1zRXhwbG9yZXIgXCIgK1xuICAgIFwiSUVkbXNPYmplY3QgXCIgK1xuICAgIFwiSUVkbXNPYmplY3REZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJRWRtc09iamVjdEZhY3RvcnkgXCIgK1xuICAgIFwiSUVkbXNPYmplY3RJbmZvIFwiICtcbiAgICBcIklFRG9jdW1lbnQgXCIgK1xuICAgIFwiSUVEb2N1bWVudEFjY2Vzc1JpZ2h0cyBcIiArXG4gICAgXCJJRURvY3VtZW50RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSUVEb2N1bWVudEVkaXRvciBcIiArXG4gICAgXCJJRURvY3VtZW50RmFjdG9yeSBcIiArXG4gICAgXCJJRURvY3VtZW50SW5mbyBcIiArXG4gICAgXCJJRURvY3VtZW50U3RvcmFnZSBcIiArXG4gICAgXCJJRURvY3VtZW50VmVyc2lvbiBcIiArXG4gICAgXCJJRURvY3VtZW50VmVyc2lvbkxpc3REaWFsb2cgXCIgK1xuICAgIFwiSUVEb2N1bWVudFZlcnNpb25Tb3VyY2UgXCIgK1xuICAgIFwiSUVEb2N1bWVudFdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSUVEb2NWZXJTaWduYXR1cmUgXCIgK1xuICAgIFwiSUVEb2NWZXJzaW9uU3RhdGUgXCIgK1xuICAgIFwiSUVuYWJsZWRNb2RlIFwiICtcbiAgICBcIklFbmNvZGVQcm92aWRlciBcIiArXG4gICAgXCJJRW5jcnlwdGVyIFwiICtcbiAgICBcIklFdmVudCBcIiArXG4gICAgXCJJRXZlbnRMaXN0IFwiICtcbiAgICBcIklFeGNlcHRpb24gXCIgK1xuICAgIFwiSUV4dGVybmFsRXZlbnRzIFwiICtcbiAgICBcIklFeHRlcm5hbEhhbmRsZXIgXCIgK1xuICAgIFwiSUZhY3RvcnkgXCIgK1xuICAgIFwiSUZpZWxkIFwiICtcbiAgICBcIklGaWxlRGlhbG9nIFwiICtcbiAgICBcIklGb2xkZXIgXCIgK1xuICAgIFwiSUZvbGRlckRlc2NyaXB0aW9uIFwiICtcbiAgICBcIklGb2xkZXJEaWFsb2cgXCIgK1xuICAgIFwiSUZvbGRlckZhY3RvcnkgXCIgK1xuICAgIFwiSUZvbGRlckluZm8gXCIgK1xuICAgIFwiSUZvckVhY2ggXCIgK1xuICAgIFwiSUZvcm0gXCIgK1xuICAgIFwiSUZvcm1UaXRsZSBcIiArXG4gICAgXCJJRm9ybVdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSUdsb2JhbElERmFjdG9yeSBcIiArXG4gICAgXCJJR2xvYmFsSURJbmZvIFwiICtcbiAgICBcIklHcmlkIFwiICtcbiAgICBcIklIYXNoZXIgXCIgK1xuICAgIFwiSUhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJSHlwZXJMaW5rQ29udHJvbCBcIiArXG4gICAgXCJJSW1hZ2VCdXR0b24gXCIgK1xuICAgIFwiSUltYWdlQ29udHJvbCBcIiArXG4gICAgXCJJSW5uZXJQYW5lbCBcIiArXG4gICAgXCJJSW5wbGFjZUhpbnQgXCIgK1xuICAgIFwiSUludGVnZXJDcml0ZXJpb24gXCIgK1xuICAgIFwiSUludGVnZXJMaXN0IFwiICtcbiAgICBcIklJbnRlZ2VyUmVxdWlzaXRlIFwiICtcbiAgICBcIklJbnRlZ2VyVmFsdWUgXCIgK1xuICAgIFwiSUlTQkxFZGl0b3JGb3JtIFwiICtcbiAgICBcIklKb2IgXCIgK1xuICAgIFwiSUpvYkRlc2NyaXB0aW9uIFwiICtcbiAgICBcIklKb2JGYWN0b3J5IFwiICtcbiAgICBcIklKb2JGb3JtIFwiICtcbiAgICBcIklKb2JJbmZvIFwiICtcbiAgICBcIklMYWJlbENvbnRyb2wgXCIgK1xuICAgIFwiSUxhcmdlSW50ZWdlckNyaXRlcmlvbiBcIiArXG4gICAgXCJJTGFyZ2VJbnRlZ2VyUmVxdWlzaXRlIFwiICtcbiAgICBcIklMYXJnZUludGVnZXJWYWx1ZSBcIiArXG4gICAgXCJJTGljZW5zZUluZm8gXCIgK1xuICAgIFwiSUxpZmVDeWNsZVN0YWdlIFwiICtcbiAgICBcIklMaXN0IFwiICtcbiAgICBcIklMaXN0Qm94IFwiICtcbiAgICBcIklMb2NhbElESW5mbyBcIiArXG4gICAgXCJJTG9jYWxpemF0aW9uIFwiICtcbiAgICBcIklMb2NrIFwiICtcbiAgICBcIklNZW1vcnlEYXRhU2V0IFwiICtcbiAgICBcIklNZXNzYWdpbmdGYWN0b3J5IFwiICtcbiAgICBcIklNZXRhZGF0YVJlcG9zaXRvcnkgXCIgK1xuICAgIFwiSU5vdGljZSBcIiArXG4gICAgXCJJTm90aWNlSW5mbyBcIiArXG4gICAgXCJJTnVtZXJpY0NyaXRlcmlvbiBcIiArXG4gICAgXCJJTnVtZXJpY1JlcXVpc2l0ZSBcIiArXG4gICAgXCJJTnVtZXJpY1ZhbHVlIFwiICtcbiAgICBcIklPYmplY3QgXCIgK1xuICAgIFwiSU9iamVjdERlc2NyaXB0aW9uIFwiICtcbiAgICBcIklPYmplY3RJbXBvcnRlciBcIiArXG4gICAgXCJJT2JqZWN0SW5mbyBcIiArXG4gICAgXCJJT2JzZXJ2ZXIgXCIgK1xuICAgIFwiSVBhbmVsR3JvdXAgXCIgK1xuICAgIFwiSVBpY2tDcml0ZXJpb24gXCIgK1xuICAgIFwiSVBpY2tQcm9wZXJ0eSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklQaWNrUmVxdWlzaXRlSXRlbSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZUl0ZW1zIFwiICtcbiAgICBcIklQaWNrVmFsdWUgXCIgK1xuICAgIFwiSVByaXZpbGVnZSBcIiArXG4gICAgXCJJUHJpdmlsZWdlTGlzdCBcIiArXG4gICAgXCJJUHJvY2VzcyBcIiArXG4gICAgXCJJUHJvY2Vzc0ZhY3RvcnkgXCIgK1xuICAgIFwiSVByb2Nlc3NNZXNzYWdlIFwiICtcbiAgICBcIklQcm9ncmVzcyBcIiArXG4gICAgXCJJUHJvcGVydHkgXCIgK1xuICAgIFwiSVByb3BlcnR5Q2hhbmdlRXZlbnQgXCIgK1xuICAgIFwiSVF1ZXJ5IFwiICtcbiAgICBcIklSZWZlcmVuY2UgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUNyaXRlcmlvbiBcIiArXG4gICAgXCJJUmVmZXJlbmNlRW5hYmxlZE1vZGUgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUZhY3RvcnkgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJUmVmZXJlbmNlSW5mbyBcIiArXG4gICAgXCJJUmVmZXJlbmNlUmVjb3JkQ2FyZFdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSVJlZmVyZW5jZVJlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklSZWZlcmVuY2VzRmFjdG9yeSBcIiArXG4gICAgXCJJUmVmZXJlbmNlVmFsdWUgXCIgK1xuICAgIFwiSVJlZlJlcXVpc2l0ZSBcIiArXG4gICAgXCJJUmVwb3J0IFwiICtcbiAgICBcIklSZXBvcnRGYWN0b3J5IFwiICtcbiAgICBcIklSZXF1aXNpdGUgXCIgK1xuICAgIFwiSVJlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklSZXF1aXNpdGVEZXNjcmlwdGlvbkxpc3QgXCIgK1xuICAgIFwiSVJlcXVpc2l0ZUZhY3RvcnkgXCIgK1xuICAgIFwiSVJpY2hFZGl0IFwiICtcbiAgICBcIklSb3V0ZVN0ZXAgXCIgK1xuICAgIFwiSVJ1bGUgXCIgK1xuICAgIFwiSVJ1bGVMaXN0IFwiICtcbiAgICBcIklTY2hlbWVCbG9jayBcIiArXG4gICAgXCJJU2NyaXB0IFwiICtcbiAgICBcIklTY3JpcHRGYWN0b3J5IFwiICtcbiAgICBcIklTZWFyY2hDcml0ZXJpYSBcIiArXG4gICAgXCJJU2VhcmNoQ3JpdGVyaW9uIFwiICtcbiAgICBcIklTZWFyY2hEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJU2VhcmNoRmFjdG9yeSBcIiArXG4gICAgXCJJU2VhcmNoRm9sZGVySW5mbyBcIiArXG4gICAgXCJJU2VhcmNoRm9yT2JqZWN0RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVNlYXJjaFJlc3VsdFJlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJJU2VjdXJlZENvbnRleHQgXCIgK1xuICAgIFwiSVNlbGVjdERpYWxvZyBcIiArXG4gICAgXCJJU2VydmVyRXZlbnQgXCIgK1xuICAgIFwiSVNlcnZlckV2ZW50RmFjdG9yeSBcIiArXG4gICAgXCJJU2VydmljZURpYWxvZyBcIiArXG4gICAgXCJJU2VydmljZUZhY3RvcnkgXCIgK1xuICAgIFwiSVNpZ25hdHVyZSBcIiArXG4gICAgXCJJU2lnblByb3ZpZGVyIFwiICtcbiAgICBcIklTaWduUHJvdmlkZXIyIFwiICtcbiAgICBcIklTaWduUHJvdmlkZXIzIFwiICtcbiAgICBcIklTaW1wbGVDcml0ZXJpb24gXCIgK1xuICAgIFwiSVN0cmluZ0NyaXRlcmlvbiBcIiArXG4gICAgXCJJU3RyaW5nTGlzdCBcIiArXG4gICAgXCJJU3RyaW5nUmVxdWlzaXRlIFwiICtcbiAgICBcIklTdHJpbmdSZXF1aXNpdGVEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJU3RyaW5nVmFsdWUgXCIgK1xuICAgIFwiSVN5c3RlbURpYWxvZ3NGYWN0b3J5IFwiICtcbiAgICBcIklTeXN0ZW1JbmZvIFwiICtcbiAgICBcIklUYWJTaGVldCBcIiArXG4gICAgXCJJVGFzayBcIiArXG4gICAgXCJJVGFza0Fib3J0UmVhc29uSW5mbyBcIiArXG4gICAgXCJJVGFza0NhcmRXaXphcmRTdGVwIFwiICtcbiAgICBcIklUYXNrRGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVRhc2tGYWN0b3J5IFwiICtcbiAgICBcIklUYXNrSW5mbyBcIiArXG4gICAgXCJJVGFza1JvdXRlIFwiICtcbiAgICBcIklUZXh0Q3JpdGVyaW9uIFwiICtcbiAgICBcIklUZXh0UmVxdWlzaXRlIFwiICtcbiAgICBcIklUZXh0VmFsdWUgXCIgK1xuICAgIFwiSVRyZWVMaXN0U2VsZWN0RGlhbG9nIFwiICtcbiAgICBcIklVc2VyIFwiICtcbiAgICBcIklVc2VyTGlzdCBcIiArXG4gICAgXCJJVmFsdWUgXCIgK1xuICAgIFwiSVZpZXcgXCIgK1xuICAgIFwiSVdlYkJyb3dzZXJDb250cm9sIFwiICtcbiAgICBcIklXaXphcmQgXCIgK1xuICAgIFwiSVdpemFyZEFjdGlvbiBcIiArXG4gICAgXCJJV2l6YXJkRmFjdG9yeSBcIiArXG4gICAgXCJJV2l6YXJkRm9ybUVsZW1lbnQgXCIgK1xuICAgIFwiSVdpemFyZFBhcmFtIFwiICtcbiAgICBcIklXaXphcmRQaWNrUGFyYW0gXCIgK1xuICAgIFwiSVdpemFyZFJlZmVyZW5jZVBhcmFtIFwiICtcbiAgICBcIklXaXphcmRTdGVwIFwiICtcbiAgICBcIklXb3JrQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIklXb3JrRGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVdvcmtmbG93QXNrYWJsZVBhcmFtIFwiICtcbiAgICBcIklXb3JrZmxvd0Fza2FibGVQYXJhbXMgXCIgK1xuICAgIFwiSVdvcmtmbG93QmxvY2sgXCIgK1xuICAgIFwiSVdvcmtmbG93QmxvY2tSZXN1bHQgXCIgK1xuICAgIFwiSVdvcmtmbG93RW5hYmxlZE1vZGUgXCIgK1xuICAgIFwiSVdvcmtmbG93UGFyYW0gXCIgK1xuICAgIFwiSVdvcmtmbG93UGlja1BhcmFtIFwiICtcbiAgICBcIklXb3JrZmxvd1JlZmVyZW5jZVBhcmFtIFwiICtcbiAgICBcIklXb3JrU3RhdGUgXCIgK1xuICAgIFwiSVdvcmtUcmVlQ3VzdG9tTm9kZSBcIiArXG4gICAgXCJJV29ya1RyZWVKb2JOb2RlIFwiICtcbiAgICBcIklXb3JrVHJlZVRhc2tOb2RlIFwiICtcbiAgICBcIklYTUxFZGl0b3JGb3JtIFwiICtcbiAgICBcIlNCQ3J5cHRvIFwiO1xuXG4gIC8vIGJ1aWx0X2luIDog0LLRgdGC0YDQvtC10L3QvdGL0LUg0LjQu9C4INCx0LjQsdC70LjQvtGC0LXRh9C90YvQtSDQvtCx0YrQtdC60YLRiyAo0LrQvtC90YHRgtCw0L3RgtGLLCDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8pXG4gIGNvbnN0IEJVSUxUSU4gPSBDT05TVEFOVFMgKyBFTlVNUztcblxuICAvLyBjbGFzczog0LLRgdGC0YDQvtC10L3QvdGL0LUg0L3QsNCx0L7RgNGLINC30L3QsNGH0LXQvdC40LksINGB0LjRgdGC0LXQvNC90YvQtSDQvtCx0YrQtdC60YLRiywg0YTQsNCx0YDQuNC60LhcbiAgY29uc3QgQ0xBU1MgPSBwcmVkZWZpbmVkX3ZhcmlhYmxlcztcblxuICAvLyBsaXRlcmFsIDog0L/RgNC40LzQuNGC0LjQstC90YvQtSDRgtC40L/Ri1xuICBjb25zdCBMSVRFUkFMID0gXCJudWxsIHRydWUgZmFsc2UgbmlsIFwiO1xuXG4gIC8vIG51bWJlciA6INGH0LjRgdC70LBcbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IGhsanMuTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIC8vIHN0cmluZyA6INGB0YLRgNC+0LrQuFxuICBjb25zdCBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogXCInXCIsXG4gICAgICAgIGVuZDogXCInXCJcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8g0KLQvtC60LXQvdGLXG4gIGNvbnN0IERPQ1RBR1MgPSB7XG4gICAgY2xhc3NOYW1lOiBcImRvY3RhZ1wiLFxuICAgIGJlZ2luOiBcIlxcXFxiKD86VE9ET3xET05FfEJFR0lOfEVORHxTVFVCfENIR3xGSVhNRXxOT1RFfEJVR3xYWFgpXFxcXGJcIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvLyDQntC00L3QvtGB0YLRgNC+0YfQvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuVxuICBjb25zdCBJU0JMX0xJTkVfQ09NTUVOVF9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgYmVnaW46IFwiLy9cIixcbiAgICBlbmQ6IFwiJFwiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5QSFJBU0FMX1dPUkRTX01PREUsXG4gICAgICBET0NUQUdTXG4gICAgXVxuICB9O1xuXG4gIC8vINCc0L3QvtCz0L7RgdGC0YDQvtGH0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40LlcbiAgY29uc3QgSVNCTF9CTE9DS19DT01NRU5UX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIixcbiAgICBiZWdpbjogXCIvXFxcXCpcIixcbiAgICBlbmQ6IFwiXFxcXCovXCIsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSxcbiAgICAgIERPQ1RBR1NcbiAgICBdXG4gIH07XG5cbiAgLy8gY29tbWVudCA6INC60L7QvNC80LXQvdGC0LDRgNC40LhcbiAgY29uc3QgQ09NTUVOVFMgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIElTQkxfTElORV9DT01NRU5UX01PREUsXG4gICAgICBJU0JMX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICAvLyBrZXl3b3JkcyA6INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsFxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICBrZXl3b3JkOiBLRVlXT1JELFxuICAgIGJ1aWx0X2luOiBCVUlMVElOLFxuICAgIGNsYXNzOiBDTEFTUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMXG4gIH07XG5cbiAgLy8gbWV0aG9kcyA6INC80LXRgtC+0LTRi1xuICBjb25zdCBNRVRIT0RTID0ge1xuICAgIGJlZ2luOiBcIlxcXFwuXFxcXHMqXCIgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIC8vIHR5cGUgOiDQstGB0YLRgNC+0LXQvdC90YvQtSDRgtC40L/Ri1xuICBjb25zdCBUWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6IFwidHlwZVwiLFxuICAgIGJlZ2luOiBcIjpbIFxcXFx0XSooXCIgKyBpbnRlcmZhY2VzLnRyaW0oKS5yZXBsYWNlKC9cXHMvZywgXCJ8XCIpICsgXCIpXCIsXG4gICAgZW5kOiBcIlsgXFxcXHRdKj1cIixcbiAgICBleGNsdWRlRW5kOiB0cnVlXG4gIH07XG5cbiAgLy8gdmFyaWFibGVzIDog0L/QtdGA0LXQvNC10L3QvdGL0LVcbiAgY29uc3QgVkFSSUFCTEVTID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2YXJpYWJsZVwiLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBiZWdpbjogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFRZUEVTLFxuICAgICAgTUVUSE9EU1xuICAgIF1cbiAgfTtcblxuICAvLyDQmNC80LXQvdCwINGE0YPQvdC60YbQuNC5XG4gIGNvbnN0IEZVTkNUSU9OX1RJVExFID0gRlVOQ1RJT05fTkFNRV9JREVOVF9SRSArIFwiXFxcXChcIjtcblxuICBjb25zdCBUSVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0aXRsZVwiLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgIGJ1aWx0X2luOiBzeXN0ZW1fZnVuY3Rpb25zXG4gICAgfSxcbiAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgZW5kOiBcIlxcXFwoXCIsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIC8vIGZ1bmN0aW9uIDog0YTRg9C90LrRhtC40LhcbiAgY29uc3QgRlVOQ1RJT05TID0ge1xuICAgIGNsYXNzTmFtZTogXCJmdW5jdGlvblwiLFxuICAgIGJlZ2luOiBGVU5DVElPTl9USVRMRSxcbiAgICBlbmQ6IFwiXFxcXCkkXCIsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IFwiW1xcXFxbXFxcXF1cXFxcfFxcXFwkXFxcXD8lLH4jQF1cIixcbiAgICBjb250YWluczogW1xuICAgICAgVElUTEVfTU9ERSxcbiAgICAgIE1FVEhPRFMsXG4gICAgICBWQVJJQUJMRVMsXG4gICAgICBTVFJJTkdTLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIENPTU1FTlRTXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0lTQkwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IFwiXFxcXCR8XFxcXD98JXwsfDskfH58I3xAfDwvXCIsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEZVTkNUSU9OUyxcbiAgICAgIFRZUEVTLFxuICAgICAgTUVUSE9EUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgQ09NTUVOVFNcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNibDtcbiIsCiAgICAiLy8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlL3NwZWNzL2pscy9zZTE1L2h0bWwvamxzLTMuaHRtbCNqbHMtMy4xMFxudmFyIGRlY2ltYWxEaWdpdHMgPSAnWzAtOV0oXypbMC05XSkqJztcbnZhciBmcmFjID0gYFxcXFwuKCR7ZGVjaW1hbERpZ2l0c30pYDtcbnZhciBoZXhEaWdpdHMgPSAnWzAtOWEtZkEtRl0oXypbMC05YS1mQS1GXSkqJztcbnZhciBOVU1FUklDID0ge1xuICBjbGFzc05hbWU6ICdudW1iZXInLFxuICB2YXJpYW50czogW1xuICAgIC8vIERlY2ltYWxGbG9hdGluZ1BvaW50TGl0ZXJhbFxuICAgIC8vIGluY2x1ZGluZyBFeHBvbmVudFBhcnRcbiAgICB7IGJlZ2luOiBgKFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKCgke2ZyYWN9KXxcXFxcLik/fCgke2ZyYWN9KSlgICtcbiAgICAgIGBbZUVdWystXT8oJHtkZWNpbWFsRGlnaXRzfSlbZkZkRF0/XFxcXGJgIH0sXG4gICAgLy8gZXhjbHVkaW5nIEV4cG9uZW50UGFydFxuICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxEaWdpdHN9KSgoJHtmcmFjfSlbZkZkRF0/XFxcXGJ8XFxcXC4oW2ZGZERdXFxcXGIpPylgIH0sXG4gICAgeyBiZWdpbjogYCgke2ZyYWN9KVtmRmREXT9cXFxcYmAgfSxcbiAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSlbZkZkRF1cXFxcYmAgfSxcblxuICAgIC8vIEhleGFkZWNpbWFsRmxvYXRpbmdQb2ludExpdGVyYWxcbiAgICB7IGJlZ2luOiBgXFxcXGIwW3hYXSgoJHtoZXhEaWdpdHN9KVxcXFwuP3woJHtoZXhEaWdpdHN9KT9cXFxcLigke2hleERpZ2l0c30pKWAgK1xuICAgICAgYFtwUF1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVtmRmREXT9cXFxcYmAgfSxcblxuICAgIC8vIERlY2ltYWxJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYigwfFsxLTldKF8qWzAtOV0pKilbbExdP1xcXFxiJyB9LFxuXG4gICAgLy8gSGV4SW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiBgXFxcXGIwW3hYXSgke2hleERpZ2l0c30pW2xMXT9cXFxcYmAgfSxcblxuICAgIC8vIE9jdGFsSW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiAnXFxcXGIwKF8qWzAtN10pKltsTF0/XFxcXGInIH0sXG5cbiAgICAvLyBCaW5hcnlJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYjBbYkJdWzAxXShfKlswMV0pKltsTF0/XFxcXGInIH0sXG4gIF0sXG4gIHJlbGV2YW5jZTogMFxufTtcblxuLypcbkxhbmd1YWdlOiBKYXZhXG5BdXRob3I6IFZzZXZvbG9kIFNvbG92eW92IDx2c2V2b2xvZC5zb2xvdnlvdkBnbWFpbC5jb20+XG5DYXRlZ29yeTogY29tbW9uLCBlbnRlcnByaXNlXG5XZWJzaXRlOiBodHRwczovL3d3dy5qYXZhLmNvbS9cbiovXG5cbmZ1bmN0aW9uIGphdmEoaGxqcykge1xuICB2YXIgSkFWQV9JREVOVF9SRSA9ICdbXFx1MDBDMC1cXHUwMkI4YS16QS1aXyRdW1xcdTAwQzAtXFx1MDJCOGEtekEtWl8kMC05XSonO1xuICB2YXIgR0VORVJJQ19JREVOVF9SRSA9IEpBVkFfSURFTlRfUkUgKyAnKDwnICsgSkFWQV9JREVOVF9SRSArICcoXFxcXHMqLFxcXFxzKicgKyBKQVZBX0lERU5UX1JFICsgJykqPik/JztcbiAgdmFyIEtFWVdPUkRTID0gJ2ZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gdmFyIHN0YXRpYyBudWxsIGlmIGNvbnN0ICcgK1xuICAgICdmb3IgdHJ1ZSB3aGlsZSBsb25nIHN0cmljdGZwIGZpbmFsbHkgcHJvdGVjdGVkIGltcG9ydCBuYXRpdmUgZmluYWwgdm9pZCAnICtcbiAgICAnZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgJyArXG4gICAgJ3BhY2thZ2UgZGVmYXVsdCBkb3VibGUgcHVibGljIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0aHJvd3MgcHJvdGVjdGVkIHB1YmxpYyBwcml2YXRlICcgK1xuICAgICdtb2R1bGUgcmVxdWlyZXMgZXhwb3J0cyBkbyc7XG5cbiAgdmFyIEFOTk9UQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIEpBVkFfSURFTlRfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogW1wic2VsZlwiXSAvLyBhbGxvdyBuZXN0ZWQgKCkgaW5zaWRlIG91ciBhbm5vdGF0aW9uXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbiAgY29uc3QgTlVNQkVSID0gTlVNRVJJQztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKYXZhJyxcbiAgICBhbGlhc2VzOiBbJ2pzcCddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvPFxcL3wjLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBlYXQgdXAgQCdzIGluIGVtYWlscyB0byBwcmV2ZW50IHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBkb2N0YWdzXG4gICAgICAgICAgICAgIGJlZ2luOiAvXFx3K0AvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvLyByZWxldmFuY2UgYm9vc3RcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9pbXBvcnQgamF2YVxcLlthLXpdK1xcLi8sXG4gICAgICAgIGtleXdvcmRzOiBcImltcG9ydFwiLFxuICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIGVudW0nLCBlbmQ6IC9bezs9XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQgc29tZWhvdz9cbiAgICAgICAgLy8gYW4gZXh0cmEgYm9vc3QgYmVjYXVzZSBKYXZhIGlzIG1vcmUgcG9wdWxhciB0aGFuIG90aGVyIGxhbmd1YWdlcyB3aXRoXG4gICAgICAgIC8vIHRoaXMgc2FtZSBzeW50YXggZmVhdHVyZSAodGhpcyBpcyBqdXN0IHRvIHByZXNlcnZlIG91ciB0ZXN0cyBwYXNzaW5nXG4gICAgICAgIC8vIGZvciBub3cpXG4gICAgICAgIHJlbGV2YW5jZTogMSxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UgZW51bScsXG4gICAgICAgIGlsbGVnYWw6IC9bOlwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbjogJ3JlY29yZFxcXFxzKycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgZW5kOiAvW3s7PV0vLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiBcInJlY29yZFwiIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgR0VORVJJQ19JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBBTk5PVEFUSU9OLFxuICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIE5VTUJFUixcbiAgICAgIEFOTk9UQVRJT05cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gamF2YTtcbiIsCiAgICAiY29uc3QgSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbmNvbnN0IEtFWVdPUkRTID0gW1xuICBcImFzXCIsIC8vIGZvciBleHBvcnRzXG4gIFwiaW5cIixcbiAgXCJvZlwiLFxuICBcImlmXCIsXG4gIFwiZm9yXCIsXG4gIFwid2hpbGVcIixcbiAgXCJmaW5hbGx5XCIsXG4gIFwidmFyXCIsXG4gIFwibmV3XCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJkb1wiLFxuICBcInJldHVyblwiLFxuICBcInZvaWRcIixcbiAgXCJlbHNlXCIsXG4gIFwiYnJlYWtcIixcbiAgXCJjYXRjaFwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhyb3dcIixcbiAgXCJjYXNlXCIsXG4gIFwiZGVmYXVsdFwiLFxuICBcInRyeVwiLFxuICBcInN3aXRjaFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwidHlwZW9mXCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwibGV0XCIsXG4gIFwieWllbGRcIixcbiAgXCJjb25zdFwiLFxuICBcImNsYXNzXCIsXG4gIC8vIEpTIGhhbmRsZXMgdGhlc2Ugd2l0aCBhIHNwZWNpYWwgcnVsZVxuICAvLyBcImdldFwiLFxuICAvLyBcInNldFwiLFxuICBcImRlYnVnZ2VyXCIsXG4gIFwiYXN5bmNcIixcbiAgXCJhd2FpdFwiLFxuICBcInN0YXRpY1wiLFxuICBcImltcG9ydFwiLFxuICBcImZyb21cIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCJcbl07XG5jb25zdCBMSVRFUkFMUyA9IFtcbiAgXCJ0cnVlXCIsXG4gIFwiZmFsc2VcIixcbiAgXCJudWxsXCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwiTmFOXCIsXG4gIFwiSW5maW5pdHlcIlxuXTtcblxuY29uc3QgVFlQRVMgPSBbXG4gIFwiSW50bFwiLFxuICBcIkRhdGFWaWV3XCIsXG4gIFwiTnVtYmVyXCIsXG4gIFwiTWF0aFwiLFxuICBcIkRhdGVcIixcbiAgXCJTdHJpbmdcIixcbiAgXCJSZWdFeHBcIixcbiAgXCJPYmplY3RcIixcbiAgXCJGdW5jdGlvblwiLFxuICBcIkJvb2xlYW5cIixcbiAgXCJFcnJvclwiLFxuICBcIlN5bWJvbFwiLFxuICBcIlNldFwiLFxuICBcIk1hcFwiLFxuICBcIldlYWtTZXRcIixcbiAgXCJXZWFrTWFwXCIsXG4gIFwiUHJveHlcIixcbiAgXCJSZWZsZWN0XCIsXG4gIFwiSlNPTlwiLFxuICBcIlByb21pc2VcIixcbiAgXCJGbG9hdDY0QXJyYXlcIixcbiAgXCJJbnQxNkFycmF5XCIsXG4gIFwiSW50MzJBcnJheVwiLFxuICBcIkludDhBcnJheVwiLFxuICBcIlVpbnQxNkFycmF5XCIsXG4gIFwiVWludDMyQXJyYXlcIixcbiAgXCJGbG9hdDMyQXJyYXlcIixcbiAgXCJBcnJheVwiLFxuICBcIlVpbnQ4QXJyYXlcIixcbiAgXCJVaW50OENsYW1wZWRBcnJheVwiLFxuICBcIkFycmF5QnVmZmVyXCIsXG4gIFwiQmlnSW50NjRBcnJheVwiLFxuICBcIkJpZ1VpbnQ2NEFycmF5XCIsXG4gIFwiQmlnSW50XCJcbl07XG5cbmNvbnN0IEVSUk9SX1RZUEVTID0gW1xuICBcIkV2YWxFcnJvclwiLFxuICBcIkludGVybmFsRXJyb3JcIixcbiAgXCJSYW5nZUVycm9yXCIsXG4gIFwiUmVmZXJlbmNlRXJyb3JcIixcbiAgXCJTeW50YXhFcnJvclwiLFxuICBcIlR5cGVFcnJvclwiLFxuICBcIlVSSUVycm9yXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX0dMT0JBTFMgPSBbXG4gIFwic2V0SW50ZXJ2YWxcIixcbiAgXCJzZXRUaW1lb3V0XCIsXG4gIFwiY2xlYXJJbnRlcnZhbFwiLFxuICBcImNsZWFyVGltZW91dFwiLFxuXG4gIFwicmVxdWlyZVwiLFxuICBcImV4cG9ydHNcIixcblxuICBcImV2YWxcIixcbiAgXCJpc0Zpbml0ZVwiLFxuICBcImlzTmFOXCIsXG4gIFwicGFyc2VGbG9hdFwiLFxuICBcInBhcnNlSW50XCIsXG4gIFwiZGVjb2RlVVJJXCIsXG4gIFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZW5jb2RlVVJJXCIsXG4gIFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZXNjYXBlXCIsXG4gIFwidW5lc2NhcGVcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fVkFSSUFCTEVTID0gW1xuICBcImFyZ3VtZW50c1wiLFxuICBcInRoaXNcIixcbiAgXCJzdXBlclwiLFxuICBcImNvbnNvbGVcIixcbiAgXCJ3aW5kb3dcIixcbiAgXCJkb2N1bWVudFwiLFxuICBcImxvY2FsU3RvcmFnZVwiLFxuICBcIm1vZHVsZVwiLFxuICBcImdsb2JhbFwiIC8vIE5vZGUuanNcbl07XG5cbmNvbnN0IEJVSUxUX0lOUyA9IFtdLmNvbmNhdChcbiAgQlVJTFRfSU5fR0xPQkFMUyxcbiAgQlVJTFRfSU5fVkFSSUFCTEVTLFxuICBUWVBFUyxcbiAgRVJST1JfVFlQRVNcbik7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBKYXZhU2NyaXB0XG5EZXNjcmlwdGlvbjogSmF2YVNjcmlwdCAoSlMpIGlzIGEgbGlnaHR3ZWlnaHQsIGludGVycHJldGVkLCBvciBqdXN0LWluLXRpbWUgY29tcGlsZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugd2l0aCBmaXJzdC1jbGFzcyBmdW5jdGlvbnMuXG5DYXRlZ29yeTogY29tbW9uLCBzY3JpcHRpbmdcbldlYnNpdGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHRcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBqYXZhc2NyaXB0KGhsanMpIHtcbiAgLyoqXG4gICAqIFRha2VzIGEgc3RyaW5nIGxpa2UgXCI8Qm9vZ2VyXCIgYW5kIGNoZWNrcyB0byBzZWVcbiAgICogaWYgd2UgY2FuIGZpbmQgYSBtYXRjaGluZyBcIjwvQm9vZ2VyXCIgbGF0ZXIgaW4gdGhlXG4gICAqIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICogQHBhcmFtIHt7YWZ0ZXI6bnVtYmVyfX0gcGFyYW0xXG4gICAqL1xuICBjb25zdCBoYXNDbG9zaW5nVGFnID0gKG1hdGNoLCB7IGFmdGVyIH0pID0+IHtcbiAgICBjb25zdCB0YWcgPSBcIjwvXCIgKyBtYXRjaFswXS5zbGljZSgxKTtcbiAgICBjb25zdCBwb3MgPSBtYXRjaC5pbnB1dC5pbmRleE9mKHRhZywgYWZ0ZXIpO1xuICAgIHJldHVybiBwb3MgIT09IC0xO1xuICB9O1xuXG4gIGNvbnN0IElERU5UX1JFJDEgPSBJREVOVF9SRTtcbiAgY29uc3QgRlJBR01FTlQgPSB7XG4gICAgYmVnaW46ICc8PicsXG4gICAgZW5kOiAnPC8+J1xuICB9O1xuICBjb25zdCBYTUxfVEFHID0ge1xuICAgIGJlZ2luOiAvPFtBLVphLXowLTlcXFxcLl86LV0rLyxcbiAgICBlbmQ6IC9cXC9bQS1aYS16MC05XFxcXC5fOi1dKz58XFwvPi8sXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgICAqIEBwYXJhbSB7Q2FsbGJhY2tSZXNwb25zZX0gcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpc1RydWx5T3BlbmluZ1RhZzogKG1hdGNoLCByZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgYWZ0ZXJNYXRjaEluZGV4ID0gbWF0Y2hbMF0ubGVuZ3RoICsgbWF0Y2guaW5kZXg7XG4gICAgICBjb25zdCBuZXh0Q2hhciA9IG1hdGNoLmlucHV0W2FmdGVyTWF0Y2hJbmRleF07XG4gICAgICAvLyBuZXN0ZWQgdHlwZT9cbiAgICAgIC8vIEhUTUwgc2hvdWxkIG5vdCBpbmNsdWRlIGFub3RoZXIgcmF3IGA8YCBpbnNpZGUgYSB0YWdcbiAgICAgIC8vIEJ1dCBhIHR5cGUgbWlnaHQ6IGA8QXJyYXk8QXJyYXk8bnVtYmVyPj5gLCBldGMuXG4gICAgICBpZiAobmV4dENoYXIgPT09IFwiPFwiKSB7XG4gICAgICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIDxzb21ldGhpbmc+XG4gICAgICAvLyBUaGlzIGlzIG5vdyBlaXRoZXIgYSB0YWcgb3IgYSB0eXBlLlxuICAgICAgaWYgKG5leHRDaGFyID09PSBcIj5cIikge1xuICAgICAgICAvLyBpZiB3ZSBjYW5ub3QgZmluZCBhIG1hdGNoaW5nIGNsb3NpbmcgdGFnLCB0aGVuIHdlXG4gICAgICAgIC8vIHdpbGwgaWdub3JlIGl0XG4gICAgICAgIGlmICghaGFzQ2xvc2luZ1RhZyhtYXRjaCwgeyBhZnRlcjogYWZ0ZXJNYXRjaEluZGV4IH0pKSB7XG4gICAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgS0VZV09SRFMkMSA9IHtcbiAgICAkcGF0dGVybjogSURFTlRfUkUsXG4gICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOU1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGl0ZXJhbHMtbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkZWNpbWFsRGlnaXRzID0gJ1swLTldKF8/WzAtOV0pKic7XG4gIGNvbnN0IGZyYWMgPSBgXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSlgO1xuICAvLyBEZWNpbWFsSW50ZWdlckxpdGVyYWwsIGluY2x1ZGluZyBBbm5leCBCIE5vbk9jdGFsRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWRkaXRpb25hbC1zeW50YXgtbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkZWNpbWFsSW50ZWdlciA9IGAwfFsxLTldKF8/WzAtOV0pKnwwWzAtN10qWzg5XVswLTldKmA7XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBEZWNpbWFsTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogYChcXFxcYigke2RlY2ltYWxJbnRlZ2VyfSkoKCR7ZnJhY30pfFxcXFwuKT98KCR7ZnJhY30pKWAgK1xuICAgICAgICBgW2VFXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pXFxcXGJgIH0sXG4gICAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsSW50ZWdlcn0pXFxcXGIoKCR7ZnJhY30pXFxcXGJ8XFxcXC4pP3woJHtmcmFjfSlcXFxcYmAgfSxcblxuICAgICAgLy8gRGVjaW1hbEJpZ0ludGVnZXJMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBgXFxcXGIoMHxbMS05XShfP1swLTldKSopblxcXFxiYCB9LFxuXG4gICAgICAvLyBOb25EZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKm4/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbYkJdWzAtMV0oXz9bMC0xXSkqbj9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtvT11bMC03XShfP1swLTddKSpuP1xcXFxiXCIgfSxcblxuICAgICAgLy8gTGVnYWN5T2N0YWxJbnRlZ2VyTGl0ZXJhbCAoZG9lcyBub3QgaW5jbHVkZSB1bmRlcnNjb3JlIHNlcGFyYXRvcnMpXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkZGl0aW9uYWwtc3ludGF4LW51bWVyaWMtbGl0ZXJhbHNcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwWzAtN10rbj9cXFxcYlwiIH0sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JyxcbiAgICBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgY29udGFpbnM6IFtdIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgY29uc3QgSFRNTF9URU1QTEFURSA9IHtcbiAgICBiZWdpbjogJ2h0bWxgJyxcbiAgICBlbmQ6ICcnLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnYCcsXG4gICAgICByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJ1xuICAgIH1cbiAgfTtcbiAgY29uc3QgQ1NTX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnY3NzYCcsXG4gICAgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2NzcydcbiAgICB9XG4gIH07XG4gIGNvbnN0IFRFTVBMQVRFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnYCcsXG4gICAgZW5kOiAnYCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBjb25zdCBKU0RPQ19DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9cXC9cXCpcXCooPyFcXC8pLyxcbiAgICAnXFxcXCovJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx7JyxcbiAgICAgICAgICAgICAgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICAgICAgYmVnaW46IElERU5UX1JFJDEgKyAnKD89XFxcXHMqKC0pfCQpJyxcbiAgICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZWF0IHNwYWNlcyAobm90IG5ld2xpbmVzKSBzbyB3ZSBjYW4gZmluZFxuICAgICAgICAgICAgLy8gdHlwZXMgb3IgdmFyaWFibGVzXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvKD89W15cXG5dKVxccy8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgKTtcbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29tbWVudFwiLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBKU0RPQ19DT01NRU5ULFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbiAgY29uc3QgU1VCU1RfSU5URVJOQUxTID0gW1xuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIEhUTUxfVEVNUExBVEUsXG4gICAgQ1NTX1RFTVBMQVRFLFxuICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICBOVU1CRVIsXG4gICAgaGxqcy5SRUdFWFBfTU9ERVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFNVQlNUX0lOVEVSTkFMU1xuICAgIC5jb25jYXQoe1xuICAgICAgLy8gd2UgbmVlZCB0byBwYWlyIHVwIHt9IGluc2lkZSBvdXIgc3Vic3QgdG8gcHJldmVudFxuICAgICAgLy8gaXQgZnJvbSBlbmRpbmcgdG9vIGVhcmx5IGJ5IG1hdGNoaW5nIGFub3RoZXIgfVxuICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgZW5kOiAvXFx9LyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgXCJzZWxmXCJcbiAgICAgIF0uY29uY2F0KFNVQlNUX0lOVEVSTkFMUylcbiAgICB9KTtcbiAgY29uc3QgU1VCU1RfQU5EX0NPTU1FTlRTID0gW10uY29uY2F0KENPTU1FTlQsIFNVQlNULmNvbnRhaW5zKTtcbiAgY29uc3QgUEFSQU1TX0NPTlRBSU5TID0gU1VCU1RfQU5EX0NPTU1FTlRTLmNvbmNhdChbXG4gICAgLy8gZWF0IHJlY3Vyc2l2ZSBwYXJlbnMgaW4gc3ViIGV4cHJlc3Npb25zXG4gICAge1xuICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgZW5kOiAvXFwpLyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgY29udGFpbnM6IFtcInNlbGZcIl0uY29uY2F0KFNVQlNUX0FORF9DT01NRU5UUylcbiAgICB9XG4gIF0pO1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSmF2YXNjcmlwdCcsXG4gICAgYWxpYXNlczogWydqcycsICdqc3gnLCAnbWpzJywgJ2NqcyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIC8vIHRoaXMgd2lsbCBiZSBleHRlbmRlZCBieSBUeXBlU2NyaXB0XG4gICAgZXhwb3J0czogeyBQQVJBTVNfQ09OVEFJTlMgfSxcbiAgICBpbGxlZ2FsOiAvIyg/IVskX0Etel0pLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5TSEVCQU5HKHtcbiAgICAgICAgbGFiZWw6IFwic2hlYmFuZ1wiLFxuICAgICAgICBiaW5hcnk6IFwibm9kZVwiLFxuICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBsYWJlbDogXCJ1c2Vfc3RyaWN0XCIsXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIEhUTUxfVEVNUExBVEUsXG4gICAgICBDU1NfVEVNUExBVEUsXG4gICAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgICBDT01NRU5ULFxuICAgICAgTlVNQkVSLFxuICAgICAgeyAvLyBvYmplY3QgYXR0ciBjb250YWluZXJcbiAgICAgICAgYmVnaW46IGNvbmNhdCgvW3ssXFxuXVxccyovLFxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbG9vayBhaGVhZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIGFuXG4gICAgICAgICAgLy8gYXR0cmlidXRlIGNvbWluZyB1cCBzbyB3ZSBkb24ndCBzdGVhbCBhIGNvbW1hIGZyb20gYSBwb3RlbnRpYWxcbiAgICAgICAgICAvLyBcInZhbHVlXCIgY29udGFpbmVyXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBOT1RFOiB0aGlzIG1pZ2h0IG5vdCB3b3JrIGhvdyB5b3UgdGhpbmsuICBXZSBkb24ndCBhY3R1YWxseSBhbHdheXNcbiAgICAgICAgICAvLyBlbnRlciB0aGlzIG1vZGUgYW5kIHN0YXkuICBJbnN0ZWFkIGl0IG1pZ2h0IG1lcmVseSBtYXRjaCBgLFxuICAgICAgICAgIC8vIDxjb21tZW50cyB1cCBuZXh0PmAgYW5kIHRoZW4gaW1tZWRpYXRlbHkgZW5kIGFmdGVyIHRoZSAsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBmYWlscyB0byBmaW5kIGFueSBhY3R1YWwgYXR0cnMuIEJ1dCB0aGlzIHN0aWxsIGRvZXMgdGhlIGpvYiBiZWNhdXNlXG4gICAgICAgICAgLy8gaXQgcHJldmVudHMgdGhlIHZhbHVlIGNvbnRhaW4gcnVsZSBmcm9tIGdyYWJiaW5nIHRoaXMgaW5zdGVhZCBhbmRcbiAgICAgICAgICAvLyBwcmV2ZW5pbmcgdGhpcyBydWxlIGZyb20gZmlyaW5nIHdoZW4gd2UgYWN0dWFsbHkgRE8gaGF2ZSBrZXlzLlxuICAgICAgICAgIGxvb2thaGVhZChjb25jYXQoXG4gICAgICAgICAgICAvLyB3ZSBhbHNvIG5lZWQgdG8gYWxsb3cgZm9yIG11bHRpcGxlIHBvc3NpYmxlIGNvbW1lbnRzIGluYmV0d2VlblxuICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGtleTp2YWx1ZSBwYWlyaW5nXG4gICAgICAgICAgICAvKCgoXFwvXFwvLiokKXwoXFwvXFwqKFxcKlteL118W14qXSkqXFwqXFwvKSlcXHMqKSovLFxuICAgICAgICAgICAgSURFTlRfUkUkMSArICdcXFxccyo6JykpKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46IElERU5UX1JFJDEgKyBsb29rYWhlYWQoJ1xcXFxzKjonKSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgLy8gXCJ2YWx1ZVwiIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxcXGIpXFxcXHMqJyxcbiAgICAgICAga2V5d29yZHM6ICdyZXR1cm4gdGhyb3cgY2FzZScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gY291bnQgdGhlIHBhcmVucyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSB0aGVcbiAgICAgICAgICAgIC8vIGNvcnJlY3QgYm91bmRpbmcgKCApIGJlZm9yZSB0aGUgPT4uICBUaGVyZSBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mXG4gICAgICAgICAgICAvLyBzdWItZXhwcmVzc2lvbnMgaW5zaWRlIGFsc28gc3Vycm91bmRlZCBieSBwYXJlbnMuXG4gICAgICAgICAgICBiZWdpbjogJyhcXFxcKCcgK1xuICAgICAgICAgICAgJ1teKCldKihcXFxcKCcgK1xuICAgICAgICAgICAgJ1teKCldKihcXFxcKCcgK1xuICAgICAgICAgICAgJ1teKCldKicgK1xuICAgICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAgICdcXFxcKVteKCldKikqJyArXG4gICAgICAgICAgICAnXFxcXCl8JyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpXFxcXHMqPT4nLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyo9PicsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIGNvdWxkIGJlIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgcGFyYW1zIHRvIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICAgICAgYmVnaW46IC8sLywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgYmVnaW46IC9cXHMvLFxuICAgICAgICAgICAgZW5kOiAvXFxzKi8sXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIEpTWFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgeyBiZWdpbjogRlJBR01FTlQuYmVnaW4sIGVuZDogRlJBR01FTlQuZW5kIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogWE1MX1RBRy5iZWdpbixcbiAgICAgICAgICAgICAgICAvLyB3ZSBjYXJlZnVsbHkgY2hlY2sgdGhlIG9wZW5pbmcgdGFnIHRvIHNlZSBpZiBpdCB0cnVseVxuICAgICAgICAgICAgICAgIC8vIGlzIGEgdGFnIGFuZCBub3QgYSBmYWxzZSBwb3NpdGl2ZVxuICAgICAgICAgICAgICAgICdvbjpiZWdpbic6IFhNTF9UQUcuaXNUcnVseU9wZW5pbmdUYWcsXG4gICAgICAgICAgICAgICAgZW5kOiBYTUxfVEFHLmVuZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBYTUxfVEFHLmJlZ2luLFxuICAgICAgICAgICAgICAgIGVuZDogWE1MX1RBRy5lbmQsXG4gICAgICAgICAgICAgICAgc2tpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsXG4gICAgICAgIGVuZDogL1t7O10vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSURFTlRfUkUkMSB9KSxcbiAgICAgICAgICBQQVJBTVNcbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogLyUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBwcmV2ZW50IHRoaXMgZnJvbSBnZXR0aW5nIHN3YWxsb3dlZCB1cCBieSBmdW5jdGlvblxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFwcGVhciBcImZ1bmN0aW9uIGxpa2VcIlxuICAgICAgICBiZWdpbktleXdvcmRzOiBcIndoaWxlIGlmIHN3aXRjaCBjYXRjaCBmb3JcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAvLyB3ZSBoYXZlIHRvIGNvdW50IHRoZSBwYXJlbnMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgdGhlIGNvcnJlY3RcbiAgICAgICAgLy8gYm91bmRpbmcgKCApLiAgVGhlcmUgY291bGQgYmUgYW55IG51bWJlciBvZiBzdWItZXhwcmVzc2lvbnMgaW5zaWRlXG4gICAgICAgIC8vIGFsc28gc3Vycm91bmRlZCBieSBwYXJlbnMuXG4gICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgK1xuICAgICAgICAgICdcXFxcKCcgKyAvLyBmaXJzdCBwYXJlbnNcbiAgICAgICAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgICAgICAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgICAgICAgICAgICdbXigpXSonICtcbiAgICAgICAgICAgICdcXFxcKVteKCldKikqJyArXG4gICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAnXFxcXClcXFxccypcXFxceycsIC8vIGVuZCBwYXJlbnNcbiAgICAgICAgcmV0dXJuQmVnaW46dHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSURFTlRfUkUkMSB9KSxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGhhY2s6IHByZXZlbnRzIGRldGVjdGlvbiBvZiBrZXl3b3JkcyBpbiBzb21lIGNpcmN1bXN0YW5jZXNcbiAgICAgIC8vIC5rZXl3b3JkKClcbiAgICAgIC8vICRrZXl3b3JkID0geFxuICAgICAge1xuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdcXFxcLicgKyBJREVOVF9SRSQxIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFwkJyArIElERU5UX1JFJDEgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIEVTNiBjbGFzc1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6XCJbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYig/PWNvbnN0cnVjdG9yKS8sXG4gICAgICAgIGVuZDogL1t7O10vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgYmVnaW46IElERU5UX1JFJDEgfSksXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIFBBUkFNU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhnZXR8c2V0KVxcXFxzKyg/PScgKyBJREVOVF9SRSQxICsgJ1xcXFwoKScsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGtleXdvcmRzOiBcImdldCBzZXRcIixcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiBJREVOVF9SRSQxIH0pLFxuICAgICAgICAgIHsgYmVnaW46IC9cXChcXCkvIH0sIC8vIGVhdCB0byBhdm9pZCBlbXB0eSBwYXJhbXNcbiAgICAgICAgICBQQVJBTVNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbKC5dLyAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgYSBwYXR0ZXJuIGNvbW1vbiB0byBKUyBsaWJzOiBgJChzb21ldGhpbmcpYCBhbmQgYCQuc29tZXRoaW5nYFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqYXZhc2NyaXB0O1xuIiwKICAgICIvKlxuIExhbmd1YWdlOiBKQm9zcyBDTElcbiBBdXRob3I6IFJhcGhhw6tsIFBhcnLDq2UgPHJwYXJyZWVAZWRjNGl0LmNvbT5cbiBEZXNjcmlwdGlvbjogbGFuZ3VhZ2UgZGVmaW5pdGlvbiBqYm9zcyBjbGlcbiBXZWJzaXRlOiBodHRwczovL2RvY3MuamJvc3Mub3JnL2F1dGhvci9kaXNwbGF5L1dGTFkvQ29tbWFuZCtMaW5lK0ludGVyZmFjZVxuIENhdGVnb3J5OiBjb25maWdcbiAqL1xuXG5mdW5jdGlvbiBqYm9zc0NsaShobGpzKSB7XG4gIGNvbnN0IFBBUkFNID0ge1xuICAgIGJlZ2luOiAvW1xcdy1dKyAqPS8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogL1tcXHctXSsvXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBQQVJBTVNCTE9DSyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbUEFSQU1dLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBPUEVSQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvOltcXHdcXC0uXSsvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBQQVRIID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cXEIoW1xcLy5dKVtcXHdcXC0uXFwvPV0rL1xuICB9O1xuICBjb25zdCBDT01NQU5EX1BBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvLS1bXFx3XFwtPVxcL10rL1xuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKQm9zcyBDTEknLFxuICAgIGFsaWFzZXM6IFsnd2lsZGZseS1jbGknXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46ICdbYS16XFwtXSsnLFxuICAgICAga2V5d29yZDogJ2FsaWFzIGJhdGNoIGNkIGNsZWFyIGNvbW1hbmQgY29ubmVjdCBjb25uZWN0aW9uLWZhY3RvcnkgY29ubmVjdGlvbi1pbmZvIGRhdGEtc291cmNlIGRlcGxveSAnICtcbiAgICAgICdkZXBsb3ltZW50LWluZm8gZGVwbG95bWVudC1vdmVybGF5IGVjaG8gZWNoby1kbXIgaGVscCBoaXN0b3J5IGlmIGpkYmMtZHJpdmVyLWluZm8gam1zLXF1ZXVlfDIwIGptcy10b3BpY3wyMCBscyAnICtcbiAgICAgICdwYXRjaCBwd2QgcXVpdCByZWFkLWF0dHJpYnV0ZSByZWFkLW9wZXJhdGlvbiByZWxvYWQgcm9sbG91dC1wbGFuIHJ1bi1iYXRjaCBzZXQgc2h1dGRvd24gdHJ5IHVuYWxpYXMgJyArXG4gICAgICAndW5kZXBsb3kgdW5zZXQgdmVyc2lvbiB4YS1kYXRhLXNvdXJjZScsIC8vIG1vZHVsZVxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBDT01NQU5EX1BBUkFNUyxcbiAgICAgIE9QRVJBVElPTixcbiAgICAgIFBBVEgsXG4gICAgICBQQVJBTVNCTE9DS1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqYm9zc0NsaTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBKU09OXG5EZXNjcmlwdGlvbjogSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIGlzIGEgbGlnaHR3ZWlnaHQgZGF0YS1pbnRlcmNoYW5nZSBmb3JtYXQuXG5BdXRob3I6IEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuV2Vic2l0ZTogaHR0cDovL3d3dy5qc29uLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgcHJvdG9jb2xzXG4qL1xuXG5mdW5jdGlvbiBqc29uKGhsanMpIHtcbiAgY29uc3QgTElURVJBTFMgPSB7XG4gICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbnVsbCdcbiAgfTtcbiAgY29uc3QgQUxMT1dFRF9DT01NRU5UUyA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICBdO1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICBdO1xuICBjb25zdCBWQUxVRV9DT05UQUlORVIgPSB7XG4gICAgZW5kOiAnLCcsXG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBjb250YWluczogVFlQRVMsXG4gICAga2V5d29yZHM6IExJVEVSQUxTXG4gIH07XG4gIGNvbnN0IE9CSkVDVCA9IHtcbiAgICBiZWdpbjogL1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFZBTFVFX0NPTlRBSU5FUiwge1xuICAgICAgICBiZWdpbjogLzovXG4gICAgICB9KVxuICAgIF0uY29uY2F0KEFMTE9XRURfQ09NTUVOVFMpLFxuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgY29uc3QgQVJSQVkgPSB7XG4gICAgYmVnaW46ICdcXFxcWycsXG4gICAgZW5kOiAnXFxcXF0nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5pbmhlcml0KFZBTFVFX0NPTlRBSU5FUildLCAvLyBpbmhlcml0IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgdGhhdCBtYWtlcyBzaGFyZWQgbW9kZXMgd2l0aCBlbmRzV2l0aFBhcmVudCBjb21waWxlIG9ubHkgdGhlIGVuZGluZyBvZiBvbmUgb2YgdGhlIHBhcmVudHNcbiAgICBpbGxlZ2FsOiAnXFxcXFMnXG4gIH07XG4gIFRZUEVTLnB1c2goT0JKRUNULCBBUlJBWSk7XG4gIEFMTE9XRURfQ09NTUVOVFMuZm9yRWFjaChmdW5jdGlvbihydWxlKSB7XG4gICAgVFlQRVMucHVzaChydWxlKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0pTT04nLFxuICAgIGNvbnRhaW5zOiBUWVBFUyxcbiAgICBrZXl3b3JkczogTElURVJBTFMsXG4gICAgaWxsZWdhbDogJ1xcXFxTJ1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb247XG4iLAogICAgIi8qXG5MYW5ndWFnZTogSnVsaWFcbkRlc2NyaXB0aW9uOiBKdWxpYSBpcyBhIGhpZ2gtbGV2ZWwsIGhpZ2gtcGVyZm9ybWFuY2UsIGR5bmFtaWMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuXG5BdXRob3I6IEtlbnRhIFNhdG8gPGJpY3ljbGUxODg1QGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogQWxleCBBcnNsYW4gPGFyYXJzbGFuQGNvbWNhc3QubmV0PiwgRnJlZHJpayBFa3JlIDxla3JlZnJlZHJpa0BnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2p1bGlhbGFuZy5vcmdcbiovXG5cbmZ1bmN0aW9uIGp1bGlhKGhsanMpIHtcbiAgLy8gU2luY2UgdGhlcmUgYXJlIG51bWVyb3VzIHNwZWNpYWwgbmFtZXMgaW4gSnVsaWEsIGl0IGlzIHRvbyBtdWNoIHRyb3VibGVcbiAgLy8gdG8gbWFpbnRhaW4gdGhlbSBieSBoYW5kLiBIZW5jZSB0aGVzZSBuYW1lcyAoaS5lLiBrZXl3b3JkcywgbGl0ZXJhbHMgYW5kXG4gIC8vIGJ1aWx0LWlucykgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSnVsaWEgMS41LjIgaXRzZWxmIHRocm91Z2hcbiAgLy8gdGhlIGZvbGxvd2luZyBzY3JpcHRzIGZvciBlYWNoLlxuXG4gIC8vIHJlZjogaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL3ZhcmlhYmxlcy8jQWxsb3dlZC1WYXJpYWJsZS1OYW1lc1xuICB2YXIgVkFSSUFCTEVfTkFNRV9SRSA9ICdbQS1aYS16X1xcXFx1MDBBMS1cXFxcdUZGRkZdW0EtWmEtel8wLTlcXFxcdTAwQTEtXFxcXHVGRkZGXSonO1xuXG4gIC8vICMga2V5d29yZCBnZW5lcmF0b3IsIG11bHRpLXdvcmQga2V5d29yZHMgaGFuZGxlZCBtYW51YWxseSBiZWxvdyAoSnVsaWEgMS41LjIpXG4gIC8vIGltcG9ydCBSRVBMLlJFUExDb21wbGV0aW9uc1xuICAvLyByZXMgPSBTdHJpbmdbXCJpblwiLCBcImlzYVwiLCBcIndoZXJlXCJdXG4gIC8vIGZvciBrdyBpbiBjb2xsZWN0KHgua2V5d29yZCBmb3IgeCBpbiBSRVBMQ29tcGxldGlvbnMuY29tcGxldGVfa2V5d29yZChcIlwiKSlcbiAgLy8gICAgIGlmICEoY29udGFpbnMoa3csIFwiIFwiKSB8fCBrdyA9PSBcInN0cnVjdFwiKVxuICAvLyAgICAgICAgIHB1c2ghKHJlcywga3cpXG4gIC8vICAgICBlbmRcbiAgLy8gZW5kXG4gIC8vIHNvcnQhKHVuaXF1ZSEocmVzKSlcbiAgLy8gZm9yZWFjaCh4IC0+IHByaW50bG4oXCJcXCdcIiwgeCwgXCJcXCcsXCIpLCByZXMpXG4gIHZhciBLRVlXT1JEX0xJU1QgPSBbXG4gICAgJ2JhcmVtb2R1bGUnLFxuICAgICdiZWdpbicsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2F0Y2gnLFxuICAgICdjY2FsbCcsXG4gICAgJ2NvbnN0JyxcbiAgICAnY29udGludWUnLFxuICAgICdkbycsXG4gICAgJ2Vsc2UnLFxuICAgICdlbHNlaWYnLFxuICAgICdlbmQnLFxuICAgICdleHBvcnQnLFxuICAgICdmYWxzZScsXG4gICAgJ2ZpbmFsbHknLFxuICAgICdmb3InLFxuICAgICdmdW5jdGlvbicsXG4gICAgJ2dsb2JhbCcsXG4gICAgJ2lmJyxcbiAgICAnaW1wb3J0JyxcbiAgICAnaW4nLFxuICAgICdpc2EnLFxuICAgICdsZXQnLFxuICAgICdsb2NhbCcsXG4gICAgJ21hY3JvJyxcbiAgICAnbW9kdWxlJyxcbiAgICAncXVvdGUnLFxuICAgICdyZXR1cm4nLFxuICAgICd0cnVlJyxcbiAgICAndHJ5JyxcbiAgICAndXNpbmcnLFxuICAgICd3aGVyZScsXG4gICAgJ3doaWxlJyxcbiAgXTtcblxuICAvLyAjIGxpdGVyYWwgZ2VuZXJhdG9yIChKdWxpYSAxLjUuMilcbiAgLy8gaW1wb3J0IFJFUEwuUkVQTENvbXBsZXRpb25zXG4gIC8vIHJlcyA9IFN0cmluZ1tcInRydWVcIiwgXCJmYWxzZVwiXVxuICAvLyBmb3IgY29tcGwgaW4gZmlsdGVyISh4IC0+IGlzYSh4LCBSRVBMQ29tcGxldGlvbnMuTW9kdWxlQ29tcGxldGlvbikgJiYgKHgucGFyZW50ID09PSBCYXNlIHx8IHgucGFyZW50ID09PSBDb3JlKSxcbiAgLy8gICAgICAgICAgICAgICAgICAgICBSRVBMQ29tcGxldGlvbnMuY29tcGxldGlvbnMoXCJcIiwgMClbMV0pXG4gIC8vICAgICB0cnlcbiAgLy8gICAgICAgICB2ID0gZXZhbChTeW1ib2woY29tcGwubW9kKSlcbiAgLy8gICAgICAgICBpZiAhKHYgaXNhIEZ1bmN0aW9uIHx8IHYgaXNhIFR5cGUgfHwgdiBpc2EgVHlwZVZhciB8fCB2IGlzYSBNb2R1bGUgfHwgdiBpc2EgQ29sb24pXG4gIC8vICAgICAgICAgICAgIHB1c2ghKHJlcywgY29tcGwubW9kKVxuICAvLyAgICAgICAgIGVuZFxuICAvLyAgICAgY2F0Y2ggZVxuICAvLyAgICAgZW5kXG4gIC8vIGVuZFxuICAvLyBzb3J0ISh1bmlxdWUhKHJlcykpXG4gIC8vIGZvcmVhY2goeCAtPiBwcmludGxuKFwiXFwnXCIsIHgsIFwiXFwnLFwiKSwgcmVzKVxuICB2YXIgTElURVJBTF9MSVNUID0gW1xuICAgICdBUkdTJyxcbiAgICAnQ19OVUxMJyxcbiAgICAnREVQT1RfUEFUSCcsXG4gICAgJ0VORElBTl9CT00nLFxuICAgICdFTlYnLFxuICAgICdJbmYnLFxuICAgICdJbmYxNicsXG4gICAgJ0luZjMyJyxcbiAgICAnSW5mNjQnLFxuICAgICdJbnNlcnRpb25Tb3J0JyxcbiAgICAnTE9BRF9QQVRIJyxcbiAgICAnTWVyZ2VTb3J0JyxcbiAgICAnTmFOJyxcbiAgICAnTmFOMTYnLFxuICAgICdOYU4zMicsXG4gICAgJ05hTjY0JyxcbiAgICAnUFJPR1JBTV9GSUxFJyxcbiAgICAnUXVpY2tTb3J0JyxcbiAgICAnUm91bmREb3duJyxcbiAgICAnUm91bmRGcm9tWmVybycsXG4gICAgJ1JvdW5kTmVhcmVzdCcsXG4gICAgJ1JvdW5kTmVhcmVzdFRpZXNBd2F5JyxcbiAgICAnUm91bmROZWFyZXN0VGllc1VwJyxcbiAgICAnUm91bmRUb1plcm8nLFxuICAgICdSb3VuZFVwJyxcbiAgICAnVkVSU0lPTnwwJyxcbiAgICAnZGV2bnVsbCcsXG4gICAgJ2ZhbHNlJyxcbiAgICAnaW0nLFxuICAgICdtaXNzaW5nJyxcbiAgICAnbm90aGluZycsXG4gICAgJ3BpJyxcbiAgICAnc3RkZXJyJyxcbiAgICAnc3RkaW4nLFxuICAgICdzdGRvdXQnLFxuICAgICd0cnVlJyxcbiAgICAndW5kZWYnLFxuICAgICfPgCcsXG4gICAgJ+KErycsXG4gIF07XG5cbiAgLy8gIyBidWlsdF9pbiBnZW5lcmF0b3IgKEp1bGlhIDEuNS4yKVxuICAvLyBpbXBvcnQgUkVQTC5SRVBMQ29tcGxldGlvbnNcbiAgLy8gcmVzID0gU3RyaW5nW11cbiAgLy8gZm9yIGNvbXBsIGluIGZpbHRlciEoeCAtPiBpc2EoeCwgUkVQTENvbXBsZXRpb25zLk1vZHVsZUNvbXBsZXRpb24pICYmICh4LnBhcmVudCA9PT0gQmFzZSB8fCB4LnBhcmVudCA9PT0gQ29yZSksXG4gIC8vICAgICAgICAgICAgICAgICAgICAgUkVQTENvbXBsZXRpb25zLmNvbXBsZXRpb25zKFwiXCIsIDApWzFdKVxuICAvLyAgICAgdHJ5XG4gIC8vICAgICAgICAgdiA9IGV2YWwoU3ltYm9sKGNvbXBsLm1vZCkpXG4gIC8vICAgICAgICAgaWYgKHYgaXNhIFR5cGUgfHwgdiBpc2EgVHlwZVZhcikgJiYgKGNvbXBsLm1vZCAhPSBcIj0+XCIpXG4gIC8vICAgICAgICAgICAgIHB1c2ghKHJlcywgY29tcGwubW9kKVxuICAvLyAgICAgICAgIGVuZFxuICAvLyAgICAgY2F0Y2ggZVxuICAvLyAgICAgZW5kXG4gIC8vIGVuZFxuICAvLyBzb3J0ISh1bmlxdWUhKHJlcykpXG4gIC8vIGZvcmVhY2goeCAtPiBwcmludGxuKFwiXFwnXCIsIHgsIFwiXFwnLFwiKSwgcmVzKVxuICB2YXIgQlVJTFRfSU5fTElTVCA9IFtcbiAgICAnQWJzdHJhY3RBcnJheScsXG4gICAgJ0Fic3RyYWN0Q2hhbm5lbCcsXG4gICAgJ0Fic3RyYWN0Q2hhcicsXG4gICAgJ0Fic3RyYWN0RGljdCcsXG4gICAgJ0Fic3RyYWN0RGlzcGxheScsXG4gICAgJ0Fic3RyYWN0RmxvYXQnLFxuICAgICdBYnN0cmFjdElycmF0aW9uYWwnLFxuICAgICdBYnN0cmFjdE1hdHJpeCcsXG4gICAgJ0Fic3RyYWN0UmFuZ2UnLFxuICAgICdBYnN0cmFjdFNldCcsXG4gICAgJ0Fic3RyYWN0U3RyaW5nJyxcbiAgICAnQWJzdHJhY3RVbml0UmFuZ2UnLFxuICAgICdBYnN0cmFjdFZlY09yTWF0JyxcbiAgICAnQWJzdHJhY3RWZWN0b3InLFxuICAgICdBbnknLFxuICAgICdBcmd1bWVudEVycm9yJyxcbiAgICAnQXJyYXknLFxuICAgICdBc3NlcnRpb25FcnJvcicsXG4gICAgJ0JpZ0Zsb2F0JyxcbiAgICAnQmlnSW50JyxcbiAgICAnQml0QXJyYXknLFxuICAgICdCaXRNYXRyaXgnLFxuICAgICdCaXRTZXQnLFxuICAgICdCaXRWZWN0b3InLFxuICAgICdCb29sJyxcbiAgICAnQm91bmRzRXJyb3InLFxuICAgICdDYXB0dXJlZEV4Y2VwdGlvbicsXG4gICAgJ0NhcnRlc2lhbkluZGV4JyxcbiAgICAnQ2FydGVzaWFuSW5kaWNlcycsXG4gICAgJ0NjaGFyJyxcbiAgICAnQ2RvdWJsZScsXG4gICAgJ0NmbG9hdCcsXG4gICAgJ0NoYW5uZWwnLFxuICAgICdDaGFyJyxcbiAgICAnQ2ludCcsXG4gICAgJ0NpbnRtYXhfdCcsXG4gICAgJ0Nsb25nJyxcbiAgICAnQ2xvbmdsb25nJyxcbiAgICAnQ21kJyxcbiAgICAnQ29sb24nLFxuICAgICdDb21wbGV4JyxcbiAgICAnQ29tcGxleEYxNicsXG4gICAgJ0NvbXBsZXhGMzInLFxuICAgICdDb21wbGV4RjY0JyxcbiAgICAnQ29tcG9zaXRlRXhjZXB0aW9uJyxcbiAgICAnQ29uZGl0aW9uJyxcbiAgICAnQ3B0cmRpZmZfdCcsXG4gICAgJ0NzaG9ydCcsXG4gICAgJ0NzaXplX3QnLFxuICAgICdDc3NpemVfdCcsXG4gICAgJ0NzdHJpbmcnLFxuICAgICdDdWNoYXInLFxuICAgICdDdWludCcsXG4gICAgJ0N1aW50bWF4X3QnLFxuICAgICdDdWxvbmcnLFxuICAgICdDdWxvbmdsb25nJyxcbiAgICAnQ3VzaG9ydCcsXG4gICAgJ0N2b2lkJyxcbiAgICAnQ3djaGFyX3QnLFxuICAgICdDd3N0cmluZycsXG4gICAgJ0RhdGFUeXBlJyxcbiAgICAnRGVuc2VBcnJheScsXG4gICAgJ0RlbnNlTWF0cml4JyxcbiAgICAnRGVuc2VWZWNPck1hdCcsXG4gICAgJ0RlbnNlVmVjdG9yJyxcbiAgICAnRGljdCcsXG4gICAgJ0RpbWVuc2lvbk1pc21hdGNoJyxcbiAgICAnRGltcycsXG4gICAgJ0RpdmlkZUVycm9yJyxcbiAgICAnRG9tYWluRXJyb3InLFxuICAgICdFT0ZFcnJvcicsXG4gICAgJ0VudW0nLFxuICAgICdFcnJvckV4Y2VwdGlvbicsXG4gICAgJ0V4Y2VwdGlvbicsXG4gICAgJ0V4cG9uZW50aWFsQmFja09mZicsXG4gICAgJ0V4cHInLFxuICAgICdGbG9hdDE2JyxcbiAgICAnRmxvYXQzMicsXG4gICAgJ0Zsb2F0NjQnLFxuICAgICdGdW5jdGlvbicsXG4gICAgJ0dsb2JhbFJlZicsXG4gICAgJ0hUTUwnLFxuICAgICdJTycsXG4gICAgJ0lPQnVmZmVyJyxcbiAgICAnSU9Db250ZXh0JyxcbiAgICAnSU9TdHJlYW0nLFxuICAgICdJZERpY3QnLFxuICAgICdJbmRleENhcnRlc2lhbicsXG4gICAgJ0luZGV4TGluZWFyJyxcbiAgICAnSW5kZXhTdHlsZScsXG4gICAgJ0luZXhhY3RFcnJvcicsXG4gICAgJ0luaXRFcnJvcicsXG4gICAgJ0ludCcsXG4gICAgJ0ludDEyOCcsXG4gICAgJ0ludDE2JyxcbiAgICAnSW50MzInLFxuICAgICdJbnQ2NCcsXG4gICAgJ0ludDgnLFxuICAgICdJbnRlZ2VyJyxcbiAgICAnSW50ZXJydXB0RXhjZXB0aW9uJyxcbiAgICAnSW52YWxpZFN0YXRlRXhjZXB0aW9uJyxcbiAgICAnSXJyYXRpb25hbCcsXG4gICAgJ0tleUVycm9yJyxcbiAgICAnTGluUmFuZ2UnLFxuICAgICdMaW5lTnVtYmVyTm9kZScsXG4gICAgJ0xpbmVhckluZGljZXMnLFxuICAgICdMb2FkRXJyb3InLFxuICAgICdNSU1FJyxcbiAgICAnTWF0cml4JyxcbiAgICAnTWV0aG9kJyxcbiAgICAnTWV0aG9kRXJyb3InLFxuICAgICdNaXNzaW5nJyxcbiAgICAnTWlzc2luZ0V4Y2VwdGlvbicsXG4gICAgJ01vZHVsZScsXG4gICAgJ05UdXBsZScsXG4gICAgJ05hbWVkVHVwbGUnLFxuICAgICdOb3RoaW5nJyxcbiAgICAnTnVtYmVyJyxcbiAgICAnT3JkaW5hbFJhbmdlJyxcbiAgICAnT3V0T2ZNZW1vcnlFcnJvcicsXG4gICAgJ092ZXJmbG93RXJyb3InLFxuICAgICdQYWlyJyxcbiAgICAnUGFydGlhbFF1aWNrU29ydCcsXG4gICAgJ1Blcm11dGVkRGltc0FycmF5JyxcbiAgICAnUGlwZScsXG4gICAgJ1Byb2Nlc3NGYWlsZWRFeGNlcHRpb24nLFxuICAgICdQdHInLFxuICAgICdRdW90ZU5vZGUnLFxuICAgICdSYXRpb25hbCcsXG4gICAgJ1Jhd0ZEJyxcbiAgICAnUmVhZE9ubHlNZW1vcnlFcnJvcicsXG4gICAgJ1JlYWwnLFxuICAgICdSZWVudHJhbnRMb2NrJyxcbiAgICAnUmVmJyxcbiAgICAnUmVnZXgnLFxuICAgICdSZWdleE1hdGNoJyxcbiAgICAnUm91bmRpbmdNb2RlJyxcbiAgICAnU2VnbWVudGF0aW9uRmF1bHQnLFxuICAgICdTZXQnLFxuICAgICdTaWduZWQnLFxuICAgICdTb21lJyxcbiAgICAnU3RhY2tPdmVyZmxvd0Vycm9yJyxcbiAgICAnU3RlcFJhbmdlJyxcbiAgICAnU3RlcFJhbmdlTGVuJyxcbiAgICAnU3RyaWRlZEFycmF5JyxcbiAgICAnU3RyaWRlZE1hdHJpeCcsXG4gICAgJ1N0cmlkZWRWZWNPck1hdCcsXG4gICAgJ1N0cmlkZWRWZWN0b3InLFxuICAgICdTdHJpbmcnLFxuICAgICdTdHJpbmdJbmRleEVycm9yJyxcbiAgICAnU3ViQXJyYXknLFxuICAgICdTdWJTdHJpbmcnLFxuICAgICdTdWJzdGl0dXRpb25TdHJpbmcnLFxuICAgICdTeW1ib2wnLFxuICAgICdTeXN0ZW1FcnJvcicsXG4gICAgJ1Rhc2snLFxuICAgICdUYXNrRmFpbGVkRXhjZXB0aW9uJyxcbiAgICAnVGV4dCcsXG4gICAgJ1RleHREaXNwbGF5JyxcbiAgICAnVGltZXInLFxuICAgICdUdXBsZScsXG4gICAgJ1R5cGUnLFxuICAgICdUeXBlRXJyb3InLFxuICAgICdUeXBlVmFyJyxcbiAgICAnVUludCcsXG4gICAgJ1VJbnQxMjgnLFxuICAgICdVSW50MTYnLFxuICAgICdVSW50MzInLFxuICAgICdVSW50NjQnLFxuICAgICdVSW50OCcsXG4gICAgJ1VuZGVmSW5pdGlhbGl6ZXInLFxuICAgICdVbmRlZktleXdvcmRFcnJvcicsXG4gICAgJ1VuZGVmUmVmRXJyb3InLFxuICAgICdVbmRlZlZhckVycm9yJyxcbiAgICAnVW5pb24nLFxuICAgICdVbmlvbkFsbCcsXG4gICAgJ1VuaXRSYW5nZScsXG4gICAgJ1Vuc2lnbmVkJyxcbiAgICAnVmFsJyxcbiAgICAnVmFyYXJnJyxcbiAgICAnVmVjRWxlbWVudCcsXG4gICAgJ1ZlY09yTWF0JyxcbiAgICAnVmVjdG9yJyxcbiAgICAnVmVyc2lvbk51bWJlcicsXG4gICAgJ1dlYWtLZXlEaWN0JyxcbiAgICAnV2Vha1JlZicsXG4gIF07XG5cbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiBWQVJJQUJMRV9OQU1FX1JFLFxuICAgIGtleXdvcmQ6IEtFWVdPUkRfTElTVCxcbiAgICBsaXRlcmFsOiBMSVRFUkFMX0xJU1QsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOX0xJU1QsXG4gIH07XG5cbiAgLy8gcGxhY2Vob2xkZXIgZm9yIHJlY3Vyc2l2ZSBzZWxmLXJlZmVyZW5jZVxuICB2YXIgREVGQVVMVCA9IHtcbiAgICBrZXl3b3JkczogS0VZV09SRFMsIGlsbGVnYWw6IC88XFwvL1xuICB9O1xuXG4gIC8vIHJlZjogaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL2ludGVnZXJzLWFuZC1mbG9hdGluZy1wb2ludC1udW1iZXJzL1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgLy8gc3VwcG9ydGVkIG51bWVyaWMgbGl0ZXJhbHM6XG4gICAgLy8gICogYmluYXJ5IGxpdGVyYWwgKGUuZy4gMHgxMClcbiAgICAvLyAgKiBvY3RhbCBsaXRlcmFsIChlLmcuIDBvNzY1NDMyMTApXG4gICAgLy8gICogaGV4YWRlY2ltYWwgbGl0ZXJhbCAoZS5nLiAweGZlZGNiYTg3NjU0MzIxMClcbiAgICAvLyAgKiBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIChlLmcuIDB4MXAwLCAweDEuMnAyKVxuICAgIC8vICAqIGRlY2ltYWwgbGl0ZXJhbCAoZS5nLiA5ODc2NTQzMjEwLCAxMDBfMDAwXzAwMClcbiAgICAvLyAgKiBmbG9hdGluZyBwb2ludGUgbGl0ZXJhbCAoZS5nLiAxLjIsIDEuMmYsIC4yLCAxLiwgMS4yZTEwLCAxLjJlLTEwKVxuICAgIGJlZ2luOiAvKFxcYjB4W1xcZF9dKihcXC5bXFxkX10qKT98MHhcXC5cXGRbXFxkX10qKXBbLStdP1xcZCt8XFxiMFtib3hdW2EtZkEtRjAtOV1bYS1mQS1GMC05X10qfChcXGJcXGRbXFxkX10qKFxcLltcXGRfXSopP3xcXC5cXGRbXFxkX10qKShbZUVmRl1bLStdP1xcZCspPy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIENIQVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLycoLnxcXFxcW3hYdVVdW2EtekEtWjAtOV0rKScvXG4gIH07XG5cbiAgdmFyIElOVEVSUE9MQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFwkXFwoLywgZW5kOiAvXFwpLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcblxuICB2YXIgSU5URVJQT0xBVEVEX1ZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogJ1xcXFwkJyArIFZBUklBQkxFX05BTUVfUkVcbiAgfTtcblxuICAvLyBUT0RPOiBuZWF0bHkgZXNjYXBlIG5vcm1hbCBjb2RlIGluIHN0cmluZyBsaXRlcmFsXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgSU5URVJQT0xBVElPTiwgSU5URVJQT0xBVEVEX1ZBUklBQkxFXSxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogL1xcdypcIlwiXCIvLCBlbmQ6IC9cIlwiXCJcXHcqLywgcmVsZXZhbmNlOiAxMCB9LFxuICAgICAgeyBiZWdpbjogL1xcdypcIi8sIGVuZDogL1wiXFx3Ki8gfVxuICAgIF1cbiAgfTtcblxuICB2YXIgQ09NTUFORCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBJTlRFUlBPTEFUSU9OLCBJTlRFUlBPTEFURURfVkFSSUFCTEVdLFxuICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnXG4gIH07XG5cbiAgdmFyIE1BQ1JPQ0FMTCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0AnICsgVkFSSUFCTEVfTkFNRV9SRVxuICB9O1xuXG4gIHZhciBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnIz0nLCBlbmQ6ICc9IycsIHJlbGV2YW5jZTogMTAgfSxcbiAgICAgIHsgYmVnaW46ICcjJywgZW5kOiAnJCcgfVxuICAgIF1cbiAgfTtcblxuICBERUZBVUxULm5hbWUgPSAnSnVsaWEnO1xuICBERUZBVUxULmNvbnRhaW5zID0gW1xuICAgIE5VTUJFUixcbiAgICBDSEFSLFxuICAgIFNUUklORyxcbiAgICBDT01NQU5ELFxuICAgIE1BQ1JPQ0FMTCxcbiAgICBDT01NRU5ULFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICBiZWdpbjpcbiAgICAgICAgJ1xcXFxiKCgoYWJzdHJhY3R8cHJpbWl0aXZlKVxcXFxzKyl0eXBlfChtdXRhYmxlXFxcXHMrKT9zdHJ1Y3QpXFxcXGInXG4gICAgfSxcbiAgICB7YmVnaW46IC88Oi99ICAvLyByZWxldmFuY2UgYm9vc3RlclxuICBdO1xuICBJTlRFUlBPTEFUSU9OLmNvbnRhaW5zID0gREVGQVVMVC5jb250YWlucztcblxuICByZXR1cm4gREVGQVVMVDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqdWxpYTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBKdWxpYSBSRVBMXG5EZXNjcmlwdGlvbjogSnVsaWEgUkVQTCBzZXNzaW9uc1xuQXV0aG9yOiBNb3J0ZW4gUGlpYmVsZWh0IDxtb3J0ZW4ucGlpYmVsZWh0QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vanVsaWFsYW5nLm9yZ1xuUmVxdWlyZXM6IGp1bGlhLmpzXG5cblRoZSBKdWxpYSBSRVBMIGNvZGUgYmxvY2tzIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzpcblxuICBqdWxpYT4gZnVuY3Rpb24gZm9vKHgpXG4gICAgICAgICAgICAgeCArIDFcbiAgICAgICAgIGVuZFxuICBmb28gKGdlbmVyaWMgZnVuY3Rpb24gd2l0aCAxIG1ldGhvZClcblxuVGhleSBzdGFydCBvbiBhIG5ldyBsaW5lIHdpdGggXCJqdWxpYT5cIi4gVXN1YWxseSB0aGVyZSBzaG91bGQgYWxzbyBiZSBhIHNwYWNlIGFmdGVyIHRoaXMsIGJ1dFxud2UgYWxzbyBhbGxvdyB0aGUgY29kZSB0byBzdGFydCByaWdodCBhZnRlciB0aGUgPiBjaGFyYWN0ZXIuIFRoZSBjb2RlIG1heSBydW4gb3ZlciBtdWx0aXBsZVxubGluZXMsIGJ1dCB0aGUgYWRkaXRpb25hbCBsaW5lcyBtdXN0IHN0YXJ0IHdpdGggc2l4IHNwYWNlcyAoaS5lLiBiZSBpbmRlbnRlZCB0byBtYXRjaFxuXCJqdWxpYT5cIikuIFRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGFzc3VtZWQgdG8gYmUgb3V0cHV0IGZyb20gdGhlIGV4ZWN1dGVkIGNvZGUgYW5kIHdpbGwgYmVcbmxlZnQgdW4taGlnaGxpZ2h0ZWQuXG5cblVzaW5nIHNpbXBseSBzcGFjZXMgdG8gaWRlbnRpZnkgbGluZSBjb250aW51YXRpb25zIG1heSBnZXQgYSBmYWxzZS1wb3NpdGl2ZSBpZiB0aGUgb3V0cHV0XG5hbHNvIHByaW50cyBvdXQgc2l4IHNwYWNlcywgYnV0IHN1Y2ggY2FzZXMgc2hvdWxkIGJlIHJhcmUuXG4qL1xuXG5mdW5jdGlvbiBqdWxpYVJlcGwoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKdWxpYSBSRVBMJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eanVsaWE+LyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgLy8gZW5kIHRoZSBoaWdobGlnaHRpbmcgaWYgd2UgYXJlIG9uIGEgbmV3IGxpbmUgYW5kIHRoZSBsaW5lIGRvZXMgbm90IGhhdmUgYXRcbiAgICAgICAgICAvLyBsZWFzdCBzaXggc3BhY2VzIGluIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICBlbmQ6IC9eKD8hWyBdezZ9KS8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdqdWxpYSdcbiAgICAgIH0sXG4gICAgICAvLyBqbGRvY3Rlc3QgTWFya2Rvd24gYmxvY2tzIGFyZSB1c2VkIGluIHRoZSBKdWxpYSBtYW51YWwgYW5kIHBhY2thZ2UgZG9jcyBpbmRpY2F0ZVxuICAgICAgLy8gY29kZSBzbmlwcGV0cyB0aGF0IHNob3VsZCBiZSB2ZXJpZmllZCB3aGVuIHRoZSBkb2N1bWVudGF0aW9uIGlzIGJ1aWx0LiBUaGV5IGNhbiBiZVxuICAgICAgLy8gZWl0aGVyIFJFUEwtbGlrZSBvciBzY3JpcHQtbGlrZSwgYnV0IGFyZSB1c3VhbGx5IFJFUEwtbGlrZSBhbmQgdGhlcmVmb3JlIHdlIGFwcGx5XG4gICAgICAvLyBqdWxpYS1yZXBsIGhpZ2hsaWdodGluZyB0byB0aGVtLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBEb2N1bWVudGVyJ3NcbiAgICAgIC8vIG1hbnVhbDogaHR0cHM6Ly9qdWxpYWRvY3MuZ2l0aHViLmlvL0RvY3VtZW50ZXIuamwvbGF0ZXN0L21hbi9kb2N0ZXN0cy5odG1sXG4gICAgICBhbGlhc2VzOiBbJ2psZG9jdGVzdCddXG4gICAgICB9XG4gICAgXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ganVsaWFSZXBsO1xuIiwKICAgICIvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMTUvaHRtbC9qbHMtMy5odG1sI2pscy0zLjEwXG52YXIgZGVjaW1hbERpZ2l0cyA9ICdbMC05XShfKlswLTldKSonO1xudmFyIGZyYWMgPSBgXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSlgO1xudmFyIGhleERpZ2l0cyA9ICdbMC05YS1mQS1GXShfKlswLTlhLWZBLUZdKSonO1xudmFyIE5VTUVSSUMgPSB7XG4gIGNsYXNzTmFtZTogJ251bWJlcicsXG4gIHZhcmlhbnRzOiBbXG4gICAgLy8gRGVjaW1hbEZsb2F0aW5nUG9pbnRMaXRlcmFsXG4gICAgLy8gaW5jbHVkaW5nIEV4cG9uZW50UGFydFxuICAgIHsgYmVnaW46IGAoXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSkoKCR7ZnJhY30pfFxcXFwuKT98KCR7ZnJhY30pKWAgK1xuICAgICAgYFtlRV1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVtmRmREXT9cXFxcYmAgfSxcbiAgICAvLyBleGNsdWRpbmcgRXhwb25lbnRQYXJ0XG4gICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKCgke2ZyYWN9KVtmRmREXT9cXFxcYnxcXFxcLihbZkZkRF1cXFxcYik/KWAgfSxcbiAgICB7IGJlZ2luOiBgKCR7ZnJhY30pW2ZGZERdP1xcXFxiYCB9LFxuICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxEaWdpdHN9KVtmRmREXVxcXFxiYCB9LFxuXG4gICAgLy8gSGV4YWRlY2ltYWxGbG9hdGluZ1BvaW50TGl0ZXJhbFxuICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdKCgke2hleERpZ2l0c30pXFxcXC4/fCgke2hleERpZ2l0c30pP1xcXFwuKCR7aGV4RGlnaXRzfSkpYCArXG4gICAgICBgW3BQXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdP1xcXFxiYCB9LFxuXG4gICAgLy8gRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiKDB8WzEtOV0oXypbMC05XSkqKVtsTF0/XFxcXGInIH0sXG5cbiAgICAvLyBIZXhJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdKCR7aGV4RGlnaXRzfSlbbExdP1xcXFxiYCB9LFxuXG4gICAgLy8gT2N0YWxJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYjAoXypbMC03XSkqW2xMXT9cXFxcYicgfSxcblxuICAgIC8vIEJpbmFyeUludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiMFtiQl1bMDFdKF8qWzAxXSkqW2xMXT9cXFxcYicgfSxcbiAgXSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuXG4vKlxuIExhbmd1YWdlOiBLb3RsaW5cbiBEZXNjcmlwdGlvbjogS290bGluIGlzIGFuIE9TUyBzdGF0aWNhbGx5IHR5cGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgdGFyZ2V0cyB0aGUgSlZNLCBBbmRyb2lkLCBKYXZhU2NyaXB0IGFuZCBOYXRpdmUuXG4gQXV0aG9yOiBTZXJnZXkgTWFzaGtvdiA8Y3k2ZXJHbjBtQGdtYWlsLmNvbT5cbiBXZWJzaXRlOiBodHRwczovL2tvdGxpbmxhbmcub3JnXG4gQ2F0ZWdvcnk6IGNvbW1vblxuICovXG5cbmZ1bmN0aW9uIGtvdGxpbihobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWJzdHJhY3QgYXMgdmFsIHZhciB2YXJhcmcgZ2V0IHNldCBjbGFzcyBvYmplY3Qgb3BlbiBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgbm9pbmxpbmUgJyArXG4gICAgICAnY3Jvc3NpbmxpbmUgZHluYW1pYyBmaW5hbCBlbnVtIGlmIGVsc2UgZG8gd2hpbGUgZm9yIHdoZW4gdGhyb3cgdHJ5IGNhdGNoIGZpbmFsbHkgJyArXG4gICAgICAnaW1wb3J0IHBhY2thZ2UgaXMgaW4gZnVuIG92ZXJyaWRlIGNvbXBhbmlvbiByZWlmaWVkIGlubGluZSBsYXRlaW5pdCBpbml0ICcgK1xuICAgICAgJ2ludGVyZmFjZSBhbm5vdGF0aW9uIGRhdGEgc2VhbGVkIGludGVybmFsIGluZml4IG9wZXJhdG9yIG91dCBieSBjb25zdHJ1Y3RvciBzdXBlciAnICtcbiAgICAgICd0YWlscmVjIHdoZXJlIGNvbnN0IGlubmVyIHN1c3BlbmQgdHlwZWFsaWFzIGV4dGVybmFsIGV4cGVjdCBhY3R1YWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0J5dGUgU2hvcnQgQ2hhciBJbnQgTG9uZyBCb29sZWFuIEZsb2F0IERvdWJsZSBWb2lkIFVuaXQgTm90aGluZycsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG51bGwnXG4gIH07XG4gIGNvbnN0IEtFWVdPUkRTX1dJVEhfTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC9cXGIoYnJlYWt8Y29udGludWV8cmV0dXJufHRoaXMpXFxiLyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgIGJlZ2luOiAvQFxcdysvXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG4gIGNvbnN0IExBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdAJ1xuICB9O1xuXG4gIC8vIGZvciBzdHJpbmcgdGVtcGxhdGVzXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBjb250YWluczogWyBobGpzLkNfTlVNQkVSX01PREUgXVxuICB9O1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICdcXFxcJCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgfTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLFxuICAgICAgICBlbmQ6ICdcIlwiXCIoPz1bXlwiXSknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBDYW4ndCB1c2UgYnVpbHQtaW4gbW9kZXMgZWFzaWx5LCBhcyB3ZSB3YW50IHRvIHVzZSBTVFJJTkcgaW4gdGhlIG1ldGFcbiAgICAgIC8vIGNvbnRleHQgYXMgJ21ldGEtc3RyaW5nJyBhbmQgdGhlcmUncyBubyBzeW50YXggdG8gcmVtb3ZlIGV4cGxpY2l0bHkgc2V0XG4gICAgICAvLyBjbGFzc05hbWVzIGluIGJ1aWx0LWluIG1vZGVzLlxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zLnB1c2goU1RSSU5HKTtcblxuICBjb25zdCBBTk5PVEFUSU9OX1VTRV9TSVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnQCg/OmZpbGV8cHJvcGVydHl8ZmllbGR8Z2V0fHNldHxyZWNlaXZlcnxwYXJhbXxzZXRwYXJhbXxkZWxlZ2F0ZSlcXFxccyo6KD86XFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpPydcbiAgfTtcbiAgY29uc3QgQU5OT1RBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0AnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoU1RSSU5HLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZydcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8va290bGlubGFuZy5vcmcvZG9jcy9yZWZlcmVuY2Uvd2hhdHNuZXcxMS5odG1sI3VuZGVyc2NvcmVzLWluLW51bWVyaWMtbGl0ZXJhbHNcbiAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2MgYWJvdmUsIHRoZSBudW1iZXIgbW9kZSBvZiBrb3RsaW4gaXMgdGhlIHNhbWUgYXMgamF2YSA4LFxuICAvLyBzbyB0aGUgY29kZSBiZWxvdyBpcyBjb3BpZWQgZnJvbSBqYXZhLmpzXG4gIGNvbnN0IEtPVExJTl9OVU1CRVJfTU9ERSA9IE5VTUVSSUM7XG4gIGNvbnN0IEtPVExJTl9ORVNURURfQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAnL1xcXFwqJywgJ1xcXFwqLycsXG4gICAge1xuICAgICAgY29udGFpbnM6IFsgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSBdXG4gICAgfVxuICApO1xuICBjb25zdCBLT1RMSU5fUEFSRU5fVFlQRSA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogW10gLy8gZGVmaW5lZCBsYXRlclxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgS09UTElOX1BBUkVOX1RZUEUyID0gS09UTElOX1BBUkVOX1RZUEU7XG4gIEtPVExJTl9QQVJFTl9UWVBFMi52YXJpYW50c1sxXS5jb250YWlucyA9IFsgS09UTElOX1BBUkVOX1RZUEUgXTtcbiAgS09UTElOX1BBUkVOX1RZUEUudmFyaWFudHNbMV0uY29udGFpbnMgPSBbIEtPVExJTl9QQVJFTl9UWVBFMiBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0tvdGxpbicsXG4gICAgYWxpYXNlczogWyAna3QnLCAna3RzJyBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgS09UTElOX05FU1RFRF9DT01NRU5ULFxuICAgICAgS0VZV09SRFNfV0lUSF9MQUJFTCxcbiAgICAgIExBQkVMLFxuICAgICAgQU5OT1RBVElPTl9VU0VfU0lURSxcbiAgICAgIEFOTk9UQVRJT04sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bicsXG4gICAgICAgIGVuZDogJ1soXXwkJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiA1LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogWyBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sXG4gICAgICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgICAgIGtleXdvcmRzOiAncmVpZmllZCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICAgICAgICAgIGVuZDogL1s9LFxcL10vLFxuICAgICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICBLT1RMSU5fUEFSRU5fVFlQRSxcbiAgICAgICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgS09UTElOX05FU1RFRF9DT01NRU5ULFxuICAgICAgICAgICAgICBBTk5PVEFUSU9OX1VTRV9TSVRFLFxuICAgICAgICAgICAgICBBTk5PVEFUSU9OLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgS09UTElOX05FU1RFRF9DT01NRU5UXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZSB0cmFpdCcsIC8vIHJlbW92ZSAndHJhaXQnIHdoZW4gcmVtb3ZlZCBmcm9tIEtFWVdPUkRTXG4gICAgICAgIGVuZDogL1s6XFx7KF18JC8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdleHRlbmRzIGltcGxlbWVudHMnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdwdWJsaWMgcHJvdGVjdGVkIGludGVybmFsIHByaXZhdGUgY29uc3RydWN0b3InXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sXG4gICAgICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC9bLDpdXFxzKi8sXG4gICAgICAgICAgICBlbmQ6IC9bPFxcKCxdfCQvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBBTk5PVEFUSU9OX1VTRV9TSVRFLFxuICAgICAgICAgIEFOTk9UQVRJT05cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiBcIl4jIS91c3IvYmluL2VudlwiLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcbidcbiAgICAgIH0sXG4gICAgICBLT1RMSU5fTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga290bGluO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IExhc3NvXG5BdXRob3I6IEVyaWMgS25pYmJlIDxlcmljQGxhc3Nvc29mdC5jb20+XG5EZXNjcmlwdGlvbjogTGFzc28gaXMgYSBsYW5ndWFnZSBhbmQgc2VydmVyIHBsYXRmb3JtIGZvciBkYXRhYmFzZS1kcml2ZW4gd2ViIGFwcGxpY2F0aW9ucy4gVGhpcyBkZWZpbml0aW9uIGhhbmRsZXMgTGFzc28gOSBzeW50YXggYW5kIExhc3NvU2NyaXB0IGZvciBMYXNzbyA4LjYgYW5kIGVhcmxpZXIuXG5XZWJzaXRlOiBodHRwOi8vd3d3Lmxhc3Nvc29mdC5jb20vV2hhdC1Jcy1MYXNzb1xuKi9cblxuZnVuY3Rpb24gbGFzc28oaGxqcykge1xuICBjb25zdCBMQVNTT19JREVOVF9SRSA9ICdbYS16QS1aX11bXFxcXHcuXSonO1xuICBjb25zdCBMQVNTT19BTkdMRV9SRSA9ICc8XFxcXD8obGFzc28oc2NyaXB0KT98PSknO1xuICBjb25zdCBMQVNTT19DTE9TRV9SRSA9ICdcXFxcXXxcXFxcPz4nO1xuICBjb25zdCBMQVNTT19LRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogTEFTU09fSURFTlRfUkUgKyAnfCZbbGdddDsnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBub25lIG1pbmltYWwgZnVsbCBhbGwgdm9pZCBhbmQgb3Igbm90ICcgK1xuICAgICAgJ2J3IG5idyBldyBuZXcgY24gbmNuIGx0IGx0ZSBndCBndGUgZXEgbmVxIHJ4IG5yeCBmdCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYXJyYXkgZGF0ZSBkZWNpbWFsIGR1cmF0aW9uIGludGVnZXIgbWFwIHBhaXIgc3RyaW5nIHRhZyB4bWwgbnVsbCAnICtcbiAgICAgICdib29sZWFuIGJ5dGVzIGtleXdvcmQgbGlzdCBsb2NhbGUgcXVldWUgc2V0IHN0YWNrIHN0YXRpY2FycmF5ICcgK1xuICAgICAgJ2xvY2FsIHZhciB2YXJpYWJsZSBnbG9iYWwgZGF0YSBzZWxmIGluaGVyaXRlZCBjdXJyZW50Y2FwdHVyZSBnaXZlbmJsb2NrJyxcbiAgICBrZXl3b3JkOlxuICAgICAgJ2NhY2hlIGRhdGFiYXNlX25hbWVzIGRhdGFiYXNlX3NjaGVtYW5hbWVzIGRhdGFiYXNlX3RhYmxlbmFtZXMgJyArXG4gICAgICAnZGVmaW5lX3RhZyBkZWZpbmVfdHlwZSBlbWFpbF9iYXRjaCBlbmNvZGVfc2V0IGh0bWxfY29tbWVudCBoYW5kbGUgJyArXG4gICAgICAnaGFuZGxlX2Vycm9yIGhlYWRlciBpZiBpbmxpbmUgaXRlcmF0ZSBsamF4X3RhcmdldCBsaW5rICcgK1xuICAgICAgJ2xpbmtfY3VycmVudGFjdGlvbiBsaW5rX2N1cnJlbnRncm91cCBsaW5rX2N1cnJlbnRyZWNvcmQgbGlua19kZXRhaWwgJyArXG4gICAgICAnbGlua19maXJzdGdyb3VwIGxpbmtfZmlyc3RyZWNvcmQgbGlua19sYXN0Z3JvdXAgbGlua19sYXN0cmVjb3JkICcgK1xuICAgICAgJ2xpbmtfbmV4dGdyb3VwIGxpbmtfbmV4dHJlY29yZCBsaW5rX3ByZXZncm91cCBsaW5rX3ByZXZyZWNvcmQgbG9nICcgK1xuICAgICAgJ2xvb3AgbmFtZXNwYWNlX3VzaW5nIG91dHB1dF9ub25lIHBvcnRhbCBwcml2YXRlIHByb3RlY3QgcmVjb3JkcyAnICtcbiAgICAgICdyZWZlcmVyIHJlZmVycmVyIHJlcGVhdGluZyByZXN1bHRzZXQgcm93cyBzZWFyY2hfYXJncyAnICtcbiAgICAgICdzZWFyY2hfYXJndW1lbnRzIHNlbGVjdCBzb3J0X2FyZ3Mgc29ydF9hcmd1bWVudHMgdGhyZWFkX2F0b21pYyAnICtcbiAgICAgICd2YWx1ZV9saXN0IHdoaWxlIGFib3J0IGNhc2UgZWxzZSBmYWlsX2lmIGZhaWxfaWZub3QgZmFpbCBpZl9lbXB0eSAnICtcbiAgICAgICdpZl9mYWxzZSBpZl9udWxsIGlmX3RydWUgbG9vcF9hYm9ydCBsb29wX2NvbnRpbnVlIGxvb3BfY291bnQgcGFyYW1zICcgK1xuICAgICAgJ3BhcmFtc191cCByZXR1cm4gcmV0dXJuX3ZhbHVlIHJ1bl9jaGlsZHJlbiBzb2FwX2RlZmluZXRhZyAnICtcbiAgICAgICdzb2FwX2xhc3RyZXF1ZXN0IHNvYXBfbGFzdHJlc3BvbnNlIHRhZ19uYW1lIGFzY2VuZGluZyBhdmVyYWdlIGJ5ICcgK1xuICAgICAgJ2RlZmluZSBkZXNjZW5kaW5nIGRvIGVxdWFscyBmcm96ZW4gZ3JvdXAgaGFuZGxlX2ZhaWx1cmUgaW1wb3J0IGluICcgK1xuICAgICAgJ2ludG8gam9pbiBsZXQgbWF0Y2ggbWF4IG1pbiBvbiBvcmRlciBwYXJlbnQgcHJvdGVjdGVkIHByb3ZpZGUgcHVibGljICcgK1xuICAgICAgJ3JlcXVpcmUgcmV0dXJuaG9tZSBza2lwIHNwbGl0X3RocmVhZCBzdW0gdGFrZSB0aHJlYWQgdG8gdHJhaXQgdHlwZSAnICtcbiAgICAgICd3aGVyZSB3aXRoIHlpZWxkIHlpZWxkaG9tZSdcbiAgfTtcbiAgY29uc3QgSFRNTF9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc8IS0tJyxcbiAgICAnLS0+JyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIGNvbnN0IExBU1NPX05PUFJPQ0VTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ1xcXFxbbm9wcm9jZXNzXFxcXF0nLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnXFxcXFsvbm9wcm9jZXNzXFxcXF0nLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgfVxuICB9O1xuICBjb25zdCBMQVNTT19TVEFSVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ1xcXFxbL25vcHJvY2Vzc3wnICsgTEFTU09fQU5HTEVfUkVcbiAgfTtcbiAgY29uc3QgTEFTU09fREFUQU1FTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXFwnJyArIExBU1NPX0lERU5UX1JFICsgJ1xcJydcbiAgfTtcbiAgY29uc3QgTEFTU09fQ09ERSA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLCB7XG4gICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICd8KC0/aW5maW5pdHl8TmFOKVxcXFxiJ1xuICAgIH0pLFxuICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtcbiAgICAgIGlsbGVnYWw6IG51bGxcbiAgICB9KSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgaWxsZWdhbDogbnVsbFxuICAgIH0pLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ2AnLFxuICAgICAgZW5kOiAnYCdcbiAgICB9LFxuICAgIHsgLy8gdmFyaWFibGVzXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdbIyRdJyArIExBU1NPX0lERU5UX1JFXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJyMnLFxuICAgICAgICAgIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiAnOjpcXFxccyonLFxuICAgICAgZW5kOiBMQVNTT19JREVOVF9SRSxcbiAgICAgIGlsbGVnYWw6ICdcXFxcVydcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICctKD8haW5maW5pdHkpJyArIExBU1NPX0lERU5UX1JFLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcoXFxcXC5cXFxcLlxcXFwuKSdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC8oLT58XFwuKVxccyovLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtMQVNTT19EQVRBTUVNQkVSXVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZmluZScsXG4gICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICBlbmQ6ICdcXFxcKHw9PicsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgYmVnaW46IExBU1NPX0lERU5UX1JFICsgJyg9KD8hPikpP3xbLSsqLyVdKD8hPiknXG4gICAgICAgIH0pXG4gICAgICBdXG4gICAgfVxuICBdO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdMYXNzbycsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2xzJyxcbiAgICAgICdsYXNzb3NjcmlwdCdcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IExBU1NPX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogTEFTU09fQ0xPU0VfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgc3RhcnRzOiB7IC8vIG1hcmt1cFxuICAgICAgICAgIGVuZDogJ1xcXFxbfCcgKyBMQVNTT19BTkdMRV9SRSxcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbSFRNTF9DT01NRU5UXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgTEFTU09fTk9QUk9DRVNTLFxuICAgICAgTEFTU09fU1RBUlQsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ1xcXFxbbm9fc3F1YXJlX2JyYWNrZXRzJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFxcXFsvbm9fc3F1YXJlX2JyYWNrZXRzXFxcXF0nLCAvLyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGxhbmd1YWdlXG4gICAgICAgICAga2V5d29yZHM6IExBU1NPX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogTEFTU09fQ0xPU0VfUkUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXFtub3Byb2Nlc3NcXFxcXXwnICsgTEFTU09fQU5HTEVfUkUsXG4gICAgICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbSFRNTF9DT01NRU5UXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTEFTU09fTk9QUk9DRVNTLFxuICAgICAgICAgICAgTEFTU09fU1RBUlRcbiAgICAgICAgICBdLmNvbmNhdChMQVNTT19DT0RFKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiMhJyxcbiAgICAgICAgZW5kOiAnbGFzc285JCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICBdLmNvbmNhdChMQVNTT19DT0RFKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3NvO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBBbnkgb2YgdGhlIHBhc3NlZCBleHByZXNzc2lvbnMgbWF5IG1hdGNoXG4gKlxuICogQ3JlYXRlcyBhIGh1Z2UgdGhpcyB8IHRoaXMgfCB0aGF0IHwgdGhhdCBtYXRjaFxuICogQHBhcmFtIHsoUmVnRXhwIHwgc3RyaW5nKVtdIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZWl0aGVyKC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gJygnICsgYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcInxcIikgKyBcIilcIjtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBMYVRlWFxuQXV0aG9yOiBCZW5lZGlrdCBXaWxkZSA8YndpbGRlQHBvc3Rlby5kZT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnXG5DYXRlZ29yeTogbWFya3VwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gbGF0ZXgoaGxqcykge1xuICBjb25zdCBLTk9XTl9DT05UUk9MX1dPUkRTID0gZWl0aGVyKC4uLltcbiAgICAgICcoPzpOZWVkc1RlWEZvcm1hdHxSZXF1aXJlUGFja2FnZXxHZXRJZEluZm8pJyxcbiAgICAgICdQcm92aWRlcyg/OkV4cGwpPyg/OlBhY2thZ2V8Q2xhc3N8RmlsZSknLFxuICAgICAgJyg/OkRlY2xhcmVPcHRpb258UHJvY2Vzc09wdGlvbnMpJyxcbiAgICAgICcoPzpkb2N1bWVudGNsYXNzfHVzZXBhY2thZ2V8aW5wdXR8aW5jbHVkZSknLFxuICAgICAgJ21ha2VhdCg/OmxldHRlcnxvdGhlciknLFxuICAgICAgJ0V4cGxTeW50YXgoPzpPbnxPZmYpJyxcbiAgICAgICcoPzpuZXd8cmVuZXd8cHJvdmlkZSk/Y29tbWFuZCcsXG4gICAgICAnKD86cmUpbmV3ZW52aXJvbm1lbnQnLFxuICAgICAgJyg/Ok5ld3xSZW5ld3xQcm92aWRlfERlY2xhcmUpKD86RXhwYW5kYWJsZSk/RG9jdW1lbnRDb21tYW5kJyxcbiAgICAgICcoPzpOZXd8UmVuZXd8UHJvdmlkZXxEZWNsYXJlKURvY3VtZW50RW52aXJvbm1lbnQnLFxuICAgICAgJyg/Oig/OmV8Z3x4KT9kZWZ8bGV0KScsXG4gICAgICAnKD86YmVnaW58ZW5kKScsXG4gICAgICAnKD86cGFydHxjaGFwdGVyfCg/OnN1Yil7MCwyfXNlY3Rpb258KD86c3ViKT9wYXJhZ3JhcGgpJyxcbiAgICAgICdjYXB0aW9uJyxcbiAgICAgICcoPzpsYWJlbHwoPzplcXxwYWdlfG5hbWUpP3JlZnwoPzpwYXJlbnxmb290fHN1cGVyKT9jaXRlKScsXG4gICAgICAnKD86YWxwaGF8YmV0YXxbR2ddYW1tYXxbRGRdZWx0YXwoPzp2YXIpP2Vwc2lsb258emV0YXxldGF8W1R0XWhldGF8dmFydGhldGEpJyxcbiAgICAgICcoPzppb3RhfCg/OnZhcik/a2FwcGF8W0xsXWFtYmRhfG11fG51fFtYeF1pfFtQcF1pfHZhcnBpfCg/OnZhcilyaG8pJyxcbiAgICAgICcoPzpbU3NdaWdtYXx2YXJzaWdtYXx0YXV8W1V1XXBzaWxvbnxbUHBdaGl8dmFycGhpfGNoaXxbUHBdc2l8W09vXW1lZ2EpJyxcbiAgICAgICcoPzpmcmFjfHN1bXxwcm9kfGxpbXxpbmZ0eXx0aW1lc3xzcXJ0fGxlcXxnZXF8bGVmdHxyaWdodHxtaWRkbGV8W2JCXWlnZz8pJyxcbiAgICAgICcoPzpbbHJdYW5nbGV8cT9xdWFkfFtsY3ZkaV0/ZG90c3xkP2RvdHxoYXR8dGlsZGV8YmFyKSdcbiAgICBdLm1hcCh3b3JkID0+IHdvcmQgKyAnKD8hW2EtekEtWkA6X10pJykpO1xuICBjb25zdCBMM19SRUdFWCA9IG5ldyBSZWdFeHAoW1xuICAgICAgLy8gQSBmdW5jdGlvbiBcXG1vZHVsZV9mdW5jdGlvbl9uYW1lOnNpZ25hdHVyZSBvciBcXF9fbW9kdWxlX2Z1bmN0aW9uX25hbWU6c2lnbmF0dXJlLFxuICAgICAgLy8gd2hlcmUgYm90aCBtb2R1bGUgYW5kIGZ1bmN0aW9uX25hbWUgbmVlZCBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBhbmRcbiAgICAgIC8vIGZ1bmN0aW9uX25hbWUgbWF5IGNvbnRhaW4gc2luZ2xlIHVuZGVyc2NvcmVzLlxuICAgICAgJyg/Ol9fKT9bYS16QS1aXXsyLH1fW2EtekEtWl0oPzpfP1thLXpBLVpdKSs6W2EtekEtWl0qJyxcbiAgICAgIC8vIEEgdmFyaWFibGUgXFxzY29wZV9tb2R1bGVfYW5kX25hbWVfdHlwZSBvciBcXHNjb3BlX19tb2R1bGVfYW5lX25hbWVfdHlwZSxcbiAgICAgIC8vIHdoZXJlIHNjb3BlIGlzIG9uZSBvZiBsLCBnIG9yIGMsIHR5cGUgbmVlZHMgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnNcbiAgICAgIC8vIGFuZCBtb2R1bGVfYW5kX25hbWUgbWF5IGNvbnRhaW4gc2luZ2xlIHVuZGVyc2NvcmVzLlxuICAgICAgJ1tsZ2NdX18/W2EtekEtWl0oPzpfP1thLXpBLVpdKSpfW2EtekEtWl17Mix9JyxcbiAgICAgIC8vIEEgcXVhcmsgXFxxX3RoZV9uYW1lIG9yIFxccV9fdGhlX25hbWUgb3JcbiAgICAgIC8vIHNjYW4gbWFyayBcXHNfdGhlX25hbWUgb3IgXFxzX192dGhlX25hbWUsXG4gICAgICAvLyB3aGVyZSB2YXJpYWJsZV9uYW1lIG5lZWRzIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGFuZFxuICAgICAgLy8gbWF5IGNvbnRhaW4gc2luZ2xlIHVuZGVyc2NvcmVzLlxuICAgICAgJ1txc11fXz9bYS16QS1aXSg/Ol8/W2EtekEtWl0pKycsXG4gICAgICAvLyBPdGhlciBMYVRlWDMgbWFjcm8gbmFtZXMgdGhhdCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIHRocmVlIHJ1bGVzIGFib3ZlLlxuICAgICAgJ3VzZSg/Ol9pKT86W2EtekEtWl0qJyxcbiAgICAgICcoPzplbHNlfGZpfG9yKTonLFxuICAgICAgJyg/OmlmfGNzfGV4cCk6dycsXG4gICAgICAnKD86aGJveHx2Ym94KTpuJyxcbiAgICAgICc6OlthLXpBLVpdX3VuYnJhY2VkJyxcbiAgICAgICc6OlthLXpBLVo6XSdcbiAgICBdLm1hcChwYXR0ZXJuID0+IHBhdHRlcm4gKyAnKD8hW2EtekEtWjpfXSknKS5qb2luKCd8JykpO1xuICBjb25zdCBMMl9WQVJJQU5UUyA9IFtcbiAgICB7YmVnaW46IC9bYS16QS1aQF0rL30sIC8vIGNvbnRyb2wgd29yZFxuICAgIHtiZWdpbjogL1teYS16QS1aQF0/L30gLy8gY29udHJvbCBzeW1ib2xcbiAgXTtcbiAgY29uc3QgRE9VQkxFX0NBUkVUX1ZBUklBTlRTID0gW1xuICAgIHtiZWdpbjogL1xcXns2fVswLTlhLWZdezZ9L30sXG4gICAge2JlZ2luOiAvXFxeezV9WzAtOWEtZl17NX0vfSxcbiAgICB7YmVnaW46IC9cXF57NH1bMC05YS1mXXs0fS99LFxuICAgIHtiZWdpbjogL1xcXnszfVswLTlhLWZdezN9L30sXG4gICAge2JlZ2luOiAvXFxeezJ9WzAtOWEtZl17Mn0vfSxcbiAgICB7YmVnaW46IC9cXF57Mn1bXFx1MDAwMC1cXHUwMDdmXS99XG4gIF07XG4gIGNvbnN0IENPTlRST0xfU0VRVUVOQ0UgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC9cXFxcLyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgYmVnaW46IEtOT1dOX0NPTlRST0xfV09SRFNcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIGJlZ2luOiBMM19SRUdFWFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgdmFyaWFudHM6IERPVUJMRV9DQVJFVF9WQVJJQU5UU1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogTDJfVkFSSUFOVFNcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IE1BQ1JPX1BBUkFNID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiAvIytcXGQ/L1xuICB9O1xuICBjb25zdCBET1VCTEVfQ0FSRVRfQ0hBUiA9IHtcbiAgICAvLyByZWxldmFuY2U6IDFcbiAgICB2YXJpYW50czogRE9VQkxFX0NBUkVUX1ZBUklBTlRTXG4gIH07XG4gIGNvbnN0IFNQRUNJQUxfQ0FUQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiAvWyQmXl9dL1xuICB9O1xuICBjb25zdCBNQUdJQ19DT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnJSAhVGVYJyxcbiAgICBlbmQ6ICckJyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG4gIGNvbnN0IENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJyUnLFxuICAgICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIGNvbnN0IEVWRVJZVEhJTkdfQlVUX1ZFUkJBVElNID0gW1xuICAgIENPTlRST0xfU0VRVUVOQ0UsXG4gICAgTUFDUk9fUEFSQU0sXG4gICAgRE9VQkxFX0NBUkVUX0NIQVIsXG4gICAgU1BFQ0lBTF9DQVRDT0RFLFxuICAgIE1BR0lDX0NPTU1FTlQsXG4gICAgQ09NTUVOVFxuICBdO1xuICBjb25zdCBCUkFDRV9HUk9VUF9OT19WRVJCQVRJTSA9IHtcbiAgICBiZWdpbjogL1xcey8sIGVuZDogL1xcfS8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbJ3NlbGYnLCAuLi5FVkVSWVRISU5HX0JVVF9WRVJCQVRJTV1cbiAgfTtcbiAgY29uc3QgQVJHVU1FTlRfQlJBQ0VTID0gaGxqcy5pbmhlcml0KFxuICAgIEJSQUNFX0dST1VQX05PX1ZFUkJBVElNLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICBjb250YWluczogW0JSQUNFX0dST1VQX05PX1ZFUkJBVElNLCAuLi5FVkVSWVRISU5HX0JVVF9WRVJCQVRJTV1cbiAgICB9XG4gICk7XG4gIGNvbnN0IEFSR1VNRU5UX0JSQUNLRVRTID0ge1xuICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgIGVuZDogL1xcXS8sXG4gICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtCUkFDRV9HUk9VUF9OT19WRVJCQVRJTSwgLi4uRVZFUllUSElOR19CVVRfVkVSQkFUSU1dXG4gIH07XG4gIGNvbnN0IFNQQUNFX0dPQkJMRVIgPSB7XG4gICAgYmVnaW46IC9cXHMrLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgQVJHVU1FTlRfTSA9IFtBUkdVTUVOVF9CUkFDRVNdO1xuICBjb25zdCBBUkdVTUVOVF9PID0gW0FSR1VNRU5UX0JSQUNLRVRTXTtcbiAgY29uc3QgQVJHVU1FTlRfQU5EX1RIRU4gPSBmdW5jdGlvbihhcmcsIHN0YXJ0c19tb2RlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRhaW5zOiBbU1BBQ0VfR09CQkxFUl0sXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogYXJnLFxuICAgICAgICBzdGFydHM6IHN0YXJ0c19tb2RlXG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3QgQ1NOQU1FID0gZnVuY3Rpb24oY3NuYW1lLCBzdGFydHNfbW9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJlZ2luOiAnXFxcXFxcXFwnICsgY3NuYW1lICsgJyg/IVthLXpBLVpAOl9dKScsXG4gICAgICAgIGtleXdvcmRzOiB7JHBhdHRlcm46IC9cXFxcW2EtekEtWl0rLywga2V5d29yZDogJ1xcXFwnICsgY3NuYW1lfSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1NQQUNFX0dPQkJMRVJdLFxuICAgICAgICBzdGFydHM6IHN0YXJ0c19tb2RlXG4gICAgICB9O1xuICB9O1xuICBjb25zdCBCRUdJTl9FTlYgPSBmdW5jdGlvbihlbnZuYW1lLCBzdGFydHNfbW9kZSkge1xuICAgIHJldHVybiBobGpzLmluaGVyaXQoXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXFxcXFxiZWdpbig/PVsgXFx0XSooXFxcXHI/XFxcXG5bIFxcdF0qKT9cXFxceycgKyBlbnZuYW1lICsgJ1xcXFx9KScsXG4gICAgICAgIGtleXdvcmRzOiB7JHBhdHRlcm46IC9cXFxcW2EtekEtWl0rLywga2V5d29yZDogJ1xcXFxiZWdpbid9LFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICB9LFxuICAgICAgQVJHVU1FTlRfQU5EX1RIRU4oQVJHVU1FTlRfTSwgc3RhcnRzX21vZGUpXG4gICAgKTtcbiAgfTtcbiAgY29uc3QgVkVSQkFUSU1fREVMSU1JVEVEX0VRVUFMID0gKGlubmVyTmFtZSA9IFwic3RyaW5nXCIpID0+IHtcbiAgICByZXR1cm4gaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICBjbGFzc05hbWU6IGlubmVyTmFtZSxcbiAgICAgIGJlZ2luOiAvKC58XFxyP1xcbikvLFxuICAgICAgZW5kOiAvKC58XFxyP1xcbikvLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgVkVSQkFUSU1fREVMSU1JVEVEX0VOViA9IGZ1bmN0aW9uKGVudm5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGVuZDogJyg/PVxcXFxcXFxcZW5kXFxcXHsnICsgZW52bmFtZSArICdcXFxcfSknXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBWRVJCQVRJTV9ERUxJTUlURURfQlJBQ0VTID0gKGlubmVyTmFtZSA9IFwic3RyaW5nXCIpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBpbm5lck5hbWUsXG4gICAgICAgICAgICBlbmQ6IC8oPz1cXH0pLyxcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6dHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogL1xcey8sXG4gICAgICAgICAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcInNlbGZcIl1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9O1xuICB9O1xuICBjb25zdCBWRVJCQVRJTSA9IFtcbiAgICAuLi5bJ3ZlcmInLCAnbHN0aW5saW5lJ10ubWFwKGNzbmFtZSA9PiBDU05BTUUoY3NuYW1lLCB7Y29udGFpbnM6IFtWRVJCQVRJTV9ERUxJTUlURURfRVFVQUwoKV19KSksXG4gICAgQ1NOQU1FKCdtaW50JywgQVJHVU1FTlRfQU5EX1RIRU4oQVJHVU1FTlRfTSwge2NvbnRhaW5zOiBbVkVSQkFUSU1fREVMSU1JVEVEX0VRVUFMKCldfSkpLFxuICAgIENTTkFNRSgnbWludGlubGluZScsIEFSR1VNRU5UX0FORF9USEVOKEFSR1VNRU5UX00sIHtjb250YWluczogW1ZFUkJBVElNX0RFTElNSVRFRF9CUkFDRVMoKSwgVkVSQkFUSU1fREVMSU1JVEVEX0VRVUFMKCldfSkpLFxuICAgIENTTkFNRSgndXJsJywge2NvbnRhaW5zOiBbVkVSQkFUSU1fREVMSU1JVEVEX0JSQUNFUyhcImxpbmtcIiksIFZFUkJBVElNX0RFTElNSVRFRF9CUkFDRVMoXCJsaW5rXCIpXX0pLFxuICAgIENTTkFNRSgnaHlwZXJyZWYnLCB7Y29udGFpbnM6IFtWRVJCQVRJTV9ERUxJTUlURURfQlJBQ0VTKFwibGlua1wiKV19KSxcbiAgICBDU05BTUUoJ2hyZWYnLCBBUkdVTUVOVF9BTkRfVEhFTihBUkdVTUVOVF9PLCB7Y29udGFpbnM6IFtWRVJCQVRJTV9ERUxJTUlURURfQlJBQ0VTKFwibGlua1wiKV19KSksXG4gICAgLi4uW10uY29uY2F0KC4uLlsnJywgJ1xcXFwqJ10ubWFwKHN1ZmZpeCA9PiBbXG4gICAgICBCRUdJTl9FTlYoJ3ZlcmJhdGltJyArIHN1ZmZpeCwgVkVSQkFUSU1fREVMSU1JVEVEX0VOVigndmVyYmF0aW0nICsgc3VmZml4KSksXG4gICAgICBCRUdJTl9FTlYoJ2ZpbGVjb250ZW50cycgKyBzdWZmaXgsICBBUkdVTUVOVF9BTkRfVEhFTihBUkdVTUVOVF9NLCBWRVJCQVRJTV9ERUxJTUlURURfRU5WKCdmaWxlY29udGVudHMnICsgc3VmZml4KSkpLFxuICAgICAgLi4uWycnLCAnQicsICdMJ10ubWFwKHByZWZpeCA9PlxuICAgICAgICBCRUdJTl9FTlYocHJlZml4ICsgJ1ZlcmJhdGltJyArIHN1ZmZpeCwgQVJHVU1FTlRfQU5EX1RIRU4oQVJHVU1FTlRfTywgVkVSQkFUSU1fREVMSU1JVEVEX0VOVihwcmVmaXggKyAnVmVyYmF0aW0nICsgc3VmZml4KSkpXG4gICAgICApXG4gICAgXSkpLFxuICAgIEJFR0lOX0VOVignbWludGVkJywgQVJHVU1FTlRfQU5EX1RIRU4oQVJHVU1FTlRfTywgQVJHVU1FTlRfQU5EX1RIRU4oQVJHVU1FTlRfTSwgVkVSQkFUSU1fREVMSU1JVEVEX0VOVignbWludGVkJykpKSksXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTGFUZVgnLFxuICAgIGFsaWFzZXM6IFsndGV4J10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC4uLlZFUkJBVElNLFxuICAgICAgLi4uRVZFUllUSElOR19CVVRfVkVSQkFUSU1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGF0ZXg7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogTERJRlxuQ29udHJpYnV0b3JzOiBKYWNvYiBDaGlsZHJlc3MgPGphY29iY0BnbWFpbC5jb20+XG5DYXRlZ29yeTogZW50ZXJwcmlzZSwgY29uZmlnXG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MREFQX0RhdGFfSW50ZXJjaGFuZ2VfRm9ybWF0XG4qL1xuZnVuY3Rpb24gbGRpZihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0xESUYnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXmRuJyxcbiAgICAgICAgZW5kOiAnOiAnLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHcnLFxuICAgICAgICBlbmQ6ICc6ICcsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdeLScsXG4gICAgICAgIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsZGlmO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IExlYWZcbkF1dGhvcjogSGFsZSBDaGFuIDxoYWxlY2hhbkBxcS5jb20+XG5EZXNjcmlwdGlvbjogQmFzZWQgb24gdGhlIExlYWYgcmVmZXJlbmNlIGZyb20gaHR0cHM6Ly92YXBvci5naXRodWIuaW8vZG9jdW1lbnRhdGlvbi9ndWlkZS9sZWFmLmh0bWwuXG4qL1xuXG5mdW5jdGlvbiBsZWFmKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTGVhZicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJyMrJyArICdbQS1aYS16XzAtOV0qJyArICdcXFxcKCcsXG4gICAgICAgIGVuZDogLyBcXHsvLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiAnIysnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICBiZWdpbjogJ1tBLVphLXpfXVtBLVphLXpfMC05XSonXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgICAgICAgICAgZW5kOiAnXCInXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdbQS1aYS16X11bQS1aYS16XzAtOV0qJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlYWY7XG4iLAogICAgImNvbnN0IE1PREVTID0gKGhsanMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBJTVBPUlRBTlQ6IHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICchaW1wb3J0YW50J1xuICAgIH0sXG4gICAgSEVYQ09MT1I6IHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyMoW2EtZkEtRjAtOV17Nn18W2EtZkEtRjAtOV17M30pJ1xuICAgIH0sXG4gICAgQVRUUklCVVRFX1NFTEVDVE9SX01PREU6IHtcbiAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWF0dHInLFxuICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgZW5kOiAvXFxdLyxcbiAgICAgIGlsbGVnYWw6ICckJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgXVxuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFRBR1MgPSBbXG4gICdhJyxcbiAgJ2FiYnInLFxuICAnYWRkcmVzcycsXG4gICdhcnRpY2xlJyxcbiAgJ2FzaWRlJyxcbiAgJ2F1ZGlvJyxcbiAgJ2InLFxuICAnYmxvY2txdW90ZScsXG4gICdib2R5JyxcbiAgJ2J1dHRvbicsXG4gICdjYW52YXMnLFxuICAnY2FwdGlvbicsXG4gICdjaXRlJyxcbiAgJ2NvZGUnLFxuICAnZGQnLFxuICAnZGVsJyxcbiAgJ2RldGFpbHMnLFxuICAnZGZuJyxcbiAgJ2RpdicsXG4gICdkbCcsXG4gICdkdCcsXG4gICdlbScsXG4gICdmaWVsZHNldCcsXG4gICdmaWdjYXB0aW9uJyxcbiAgJ2ZpZ3VyZScsXG4gICdmb290ZXInLFxuICAnZm9ybScsXG4gICdoMScsXG4gICdoMicsXG4gICdoMycsXG4gICdoNCcsXG4gICdoNScsXG4gICdoNicsXG4gICdoZWFkZXInLFxuICAnaGdyb3VwJyxcbiAgJ2h0bWwnLFxuICAnaScsXG4gICdpZnJhbWUnLFxuICAnaW1nJyxcbiAgJ2lucHV0JyxcbiAgJ2lucycsXG4gICdrYmQnLFxuICAnbGFiZWwnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ21haW4nLFxuICAnbWFyaycsXG4gICdtZW51JyxcbiAgJ25hdicsXG4gICdvYmplY3QnLFxuICAnb2wnLFxuICAncCcsXG4gICdxJyxcbiAgJ3F1b3RlJyxcbiAgJ3NhbXAnLFxuICAnc2VjdGlvbicsXG4gICdzcGFuJyxcbiAgJ3N0cm9uZycsXG4gICdzdW1tYXJ5JyxcbiAgJ3N1cCcsXG4gICd0YWJsZScsXG4gICd0Ym9keScsXG4gICd0ZCcsXG4gICd0ZXh0YXJlYScsXG4gICd0Zm9vdCcsXG4gICd0aCcsXG4gICd0aGVhZCcsXG4gICd0aW1lJyxcbiAgJ3RyJyxcbiAgJ3VsJyxcbiAgJ3ZhcicsXG4gICd2aWRlbydcbl07XG5cbmNvbnN0IE1FRElBX0ZFQVRVUkVTID0gW1xuICAnYW55LWhvdmVyJyxcbiAgJ2FueS1wb2ludGVyJyxcbiAgJ2FzcGVjdC1yYXRpbycsXG4gICdjb2xvcicsXG4gICdjb2xvci1nYW11dCcsXG4gICdjb2xvci1pbmRleCcsXG4gICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcbiAgJ2RldmljZS1oZWlnaHQnLFxuICAnZGV2aWNlLXdpZHRoJyxcbiAgJ2Rpc3BsYXktbW9kZScsXG4gICdmb3JjZWQtY29sb3JzJyxcbiAgJ2dyaWQnLFxuICAnaGVpZ2h0JyxcbiAgJ2hvdmVyJyxcbiAgJ2ludmVydGVkLWNvbG9ycycsXG4gICdtb25vY2hyb21lJyxcbiAgJ29yaWVudGF0aW9uJyxcbiAgJ292ZXJmbG93LWJsb2NrJyxcbiAgJ292ZXJmbG93LWlubGluZScsXG4gICdwb2ludGVyJyxcbiAgJ3ByZWZlcnMtY29sb3Itc2NoZW1lJyxcbiAgJ3ByZWZlcnMtY29udHJhc3QnLFxuICAncHJlZmVycy1yZWR1Y2VkLW1vdGlvbicsXG4gICdwcmVmZXJzLXJlZHVjZWQtdHJhbnNwYXJlbmN5JyxcbiAgJ3Jlc29sdXRpb24nLFxuICAnc2NhbicsXG4gICdzY3JpcHRpbmcnLFxuICAndXBkYXRlJyxcbiAgJ3dpZHRoJyxcbiAgLy8gVE9ETzogZmluZCBhIGJldHRlciBzb2x1dGlvbj9cbiAgJ21pbi13aWR0aCcsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWhlaWdodCcsXG4gICdtYXgtaGVpZ2h0J1xuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1jbGFzc2VzXG5jb25zdCBQU0VVRE9fQ0xBU1NFUyA9IFtcbiAgJ2FjdGl2ZScsXG4gICdhbnktbGluaycsXG4gICdibGFuaycsXG4gICdjaGVja2VkJyxcbiAgJ2N1cnJlbnQnLFxuICAnZGVmYXVsdCcsXG4gICdkZWZpbmVkJyxcbiAgJ2RpcicsIC8vIGRpcigpXG4gICdkaXNhYmxlZCcsXG4gICdkcm9wJyxcbiAgJ2VtcHR5JyxcbiAgJ2VuYWJsZWQnLFxuICAnZmlyc3QnLFxuICAnZmlyc3QtY2hpbGQnLFxuICAnZmlyc3Qtb2YtdHlwZScsXG4gICdmdWxsc2NyZWVuJyxcbiAgJ2Z1dHVyZScsXG4gICdmb2N1cycsXG4gICdmb2N1cy12aXNpYmxlJyxcbiAgJ2ZvY3VzLXdpdGhpbicsXG4gICdoYXMnLCAvLyBoYXMoKVxuICAnaG9zdCcsIC8vIGhvc3Qgb3IgaG9zdCgpXG4gICdob3N0LWNvbnRleHQnLCAvLyBob3N0LWNvbnRleHQoKVxuICAnaG92ZXInLFxuICAnaW5kZXRlcm1pbmF0ZScsXG4gICdpbi1yYW5nZScsXG4gICdpbnZhbGlkJyxcbiAgJ2lzJywgLy8gaXMoKVxuICAnbGFuZycsIC8vIGxhbmcoKVxuICAnbGFzdC1jaGlsZCcsXG4gICdsYXN0LW9mLXR5cGUnLFxuICAnbGVmdCcsXG4gICdsaW5rJyxcbiAgJ2xvY2FsLWxpbmsnLFxuICAnbm90JywgLy8gbm90KClcbiAgJ250aC1jaGlsZCcsIC8vIG50aC1jaGlsZCgpXG4gICdudGgtY29sJywgLy8gbnRoLWNvbCgpXG4gICdudGgtbGFzdC1jaGlsZCcsIC8vIG50aC1sYXN0LWNoaWxkKClcbiAgJ250aC1sYXN0LWNvbCcsIC8vIG50aC1sYXN0LWNvbCgpXG4gICdudGgtbGFzdC1vZi10eXBlJywgLy9udGgtbGFzdC1vZi10eXBlKClcbiAgJ250aC1vZi10eXBlJywgLy9udGgtb2YtdHlwZSgpXG4gICdvbmx5LWNoaWxkJyxcbiAgJ29ubHktb2YtdHlwZScsXG4gICdvcHRpb25hbCcsXG4gICdvdXQtb2YtcmFuZ2UnLFxuICAncGFzdCcsXG4gICdwbGFjZWhvbGRlci1zaG93bicsXG4gICdyZWFkLW9ubHknLFxuICAncmVhZC13cml0ZScsXG4gICdyZXF1aXJlZCcsXG4gICdyaWdodCcsXG4gICdyb290JyxcbiAgJ3Njb3BlJyxcbiAgJ3RhcmdldCcsXG4gICd0YXJnZXQtd2l0aGluJyxcbiAgJ3VzZXItaW52YWxpZCcsXG4gICd2YWxpZCcsXG4gICd2aXNpdGVkJyxcbiAgJ3doZXJlJyAvLyB3aGVyZSgpXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWVsZW1lbnRzXG5jb25zdCBQU0VVRE9fRUxFTUVOVFMgPSBbXG4gICdhZnRlcicsXG4gICdiYWNrZHJvcCcsXG4gICdiZWZvcmUnLFxuICAnY3VlJyxcbiAgJ2N1ZS1yZWdpb24nLFxuICAnZmlyc3QtbGV0dGVyJyxcbiAgJ2ZpcnN0LWxpbmUnLFxuICAnZ3JhbW1hci1lcnJvcicsXG4gICdtYXJrZXInLFxuICAncGFydCcsXG4gICdwbGFjZWhvbGRlcicsXG4gICdzZWxlY3Rpb24nLFxuICAnc2xvdHRlZCcsXG4gICdzcGVsbGluZy1lcnJvcidcbl07XG5cbmNvbnN0IEFUVFJJQlVURVMgPSBbXG4gICdhbGlnbi1jb250ZW50JyxcbiAgJ2FsaWduLWl0ZW1zJyxcbiAgJ2FsaWduLXNlbGYnLFxuICAnYW5pbWF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1kZWxheScsXG4gICdhbmltYXRpb24tZGlyZWN0aW9uJyxcbiAgJ2FuaW1hdGlvbi1kdXJhdGlvbicsXG4gICdhbmltYXRpb24tZmlsbC1tb2RlJyxcbiAgJ2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnLFxuICAnYW5pbWF0aW9uLW5hbWUnLFxuICAnYW5pbWF0aW9uLXBsYXktc3RhdGUnLFxuICAnYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICdhdXRvJyxcbiAgJ2JhY2tmYWNlLXZpc2liaWxpdHknLFxuICAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLFxuICAnYmFja2dyb3VuZC1jbGlwJyxcbiAgJ2JhY2tncm91bmQtY29sb3InLFxuICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICdiYWNrZ3JvdW5kLW9yaWdpbicsXG4gICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcbiAgJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgJ2JhY2tncm91bmQtc2l6ZScsXG4gICdib3JkZXInLFxuICAnYm9yZGVyLWJvdHRvbScsXG4gICdib3JkZXItYm90dG9tLWNvbG9yJyxcbiAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1zdHlsZScsXG4gICdib3JkZXItYm90dG9tLXdpZHRoJyxcbiAgJ2JvcmRlci1jb2xsYXBzZScsXG4gICdib3JkZXItY29sb3InLFxuICAnYm9yZGVyLWltYWdlJyxcbiAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAnYm9yZGVyLWltYWdlLXJlcGVhdCcsXG4gICdib3JkZXItaW1hZ2Utc2xpY2UnLFxuICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICdib3JkZXItaW1hZ2Utd2lkdGgnLFxuICAnYm9yZGVyLWxlZnQnLFxuICAnYm9yZGVyLWxlZnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnLFxuICAnYm9yZGVyLWxlZnQtd2lkdGgnLFxuICAnYm9yZGVyLXJhZGl1cycsXG4gICdib3JkZXItcmlnaHQnLFxuICAnYm9yZGVyLXJpZ2h0LWNvbG9yJyxcbiAgJ2JvcmRlci1yaWdodC1zdHlsZScsXG4gICdib3JkZXItcmlnaHQtd2lkdGgnLFxuICAnYm9yZGVyLXNwYWNpbmcnLFxuICAnYm9yZGVyLXN0eWxlJyxcbiAgJ2JvcmRlci10b3AnLFxuICAnYm9yZGVyLXRvcC1jb2xvcicsXG4gICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnLFxuICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICdib3JkZXItd2lkdGgnLFxuICAnYm90dG9tJyxcbiAgJ2JveC1kZWNvcmF0aW9uLWJyZWFrJyxcbiAgJ2JveC1zaGFkb3cnLFxuICAnYm94LXNpemluZycsXG4gICdicmVhay1hZnRlcicsXG4gICdicmVhay1iZWZvcmUnLFxuICAnYnJlYWstaW5zaWRlJyxcbiAgJ2NhcHRpb24tc2lkZScsXG4gICdjbGVhcicsXG4gICdjbGlwJyxcbiAgJ2NsaXAtcGF0aCcsXG4gICdjb2xvcicsXG4gICdjb2x1bW4tY291bnQnLFxuICAnY29sdW1uLWZpbGwnLFxuICAnY29sdW1uLWdhcCcsXG4gICdjb2x1bW4tcnVsZScsXG4gICdjb2x1bW4tcnVsZS1jb2xvcicsXG4gICdjb2x1bW4tcnVsZS1zdHlsZScsXG4gICdjb2x1bW4tcnVsZS13aWR0aCcsXG4gICdjb2x1bW4tc3BhbicsXG4gICdjb2x1bW4td2lkdGgnLFxuICAnY29sdW1ucycsXG4gICdjb250ZW50JyxcbiAgJ2NvdW50ZXItaW5jcmVtZW50JyxcbiAgJ2NvdW50ZXItcmVzZXQnLFxuICAnY3Vyc29yJyxcbiAgJ2RpcmVjdGlvbicsXG4gICdkaXNwbGF5JyxcbiAgJ2VtcHR5LWNlbGxzJyxcbiAgJ2ZpbHRlcicsXG4gICdmbGV4JyxcbiAgJ2ZsZXgtYmFzaXMnLFxuICAnZmxleC1kaXJlY3Rpb24nLFxuICAnZmxleC1mbG93JyxcbiAgJ2ZsZXgtZ3JvdycsXG4gICdmbGV4LXNocmluaycsXG4gICdmbGV4LXdyYXAnLFxuICAnZmxvYXQnLFxuICAnZm9udCcsXG4gICdmb250LWRpc3BsYXknLFxuICAnZm9udC1mYW1pbHknLFxuICAnZm9udC1mZWF0dXJlLXNldHRpbmdzJyxcbiAgJ2ZvbnQta2VybmluZycsXG4gICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXNpemUtYWRqdXN0JyxcbiAgJ2ZvbnQtc21vb3RoaW5nJyxcbiAgJ2ZvbnQtc3RyZXRjaCcsXG4gICdmb250LXN0eWxlJyxcbiAgJ2ZvbnQtdmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQtbGlnYXR1cmVzJyxcbiAgJ2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzJyxcbiAgJ2ZvbnQtd2VpZ2h0JyxcbiAgJ2hlaWdodCcsXG4gICdoeXBoZW5zJyxcbiAgJ2ljb24nLFxuICAnaW1hZ2Utb3JpZW50YXRpb24nLFxuICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlc29sdXRpb24nLFxuICAnaW1lLW1vZGUnLFxuICAnaW5oZXJpdCcsXG4gICdpbml0aWFsJyxcbiAgJ2p1c3RpZnktY29udGVudCcsXG4gICdsZWZ0JyxcbiAgJ2xldHRlci1zcGFjaW5nJyxcbiAgJ2xpbmUtaGVpZ2h0JyxcbiAgJ2xpc3Qtc3R5bGUnLFxuICAnbGlzdC1zdHlsZS1pbWFnZScsXG4gICdsaXN0LXN0eWxlLXBvc2l0aW9uJyxcbiAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICdtYXJnaW4nLFxuICAnbWFyZ2luLWJvdHRvbScsXG4gICdtYXJnaW4tbGVmdCcsXG4gICdtYXJnaW4tcmlnaHQnLFxuICAnbWFyZ2luLXRvcCcsXG4gICdtYXJrcycsXG4gICdtYXNrJyxcbiAgJ21heC1oZWlnaHQnLFxuICAnbWF4LXdpZHRoJyxcbiAgJ21pbi1oZWlnaHQnLFxuICAnbWluLXdpZHRoJyxcbiAgJ25hdi1kb3duJyxcbiAgJ25hdi1pbmRleCcsXG4gICduYXYtbGVmdCcsXG4gICduYXYtcmlnaHQnLFxuICAnbmF2LXVwJyxcbiAgJ25vbmUnLFxuICAnbm9ybWFsJyxcbiAgJ29iamVjdC1maXQnLFxuICAnb2JqZWN0LXBvc2l0aW9uJyxcbiAgJ29wYWNpdHknLFxuICAnb3JkZXInLFxuICAnb3JwaGFucycsXG4gICdvdXRsaW5lJyxcbiAgJ291dGxpbmUtY29sb3InLFxuICAnb3V0bGluZS1vZmZzZXQnLFxuICAnb3V0bGluZS1zdHlsZScsXG4gICdvdXRsaW5lLXdpZHRoJyxcbiAgJ292ZXJmbG93JyxcbiAgJ292ZXJmbG93LXdyYXAnLFxuICAnb3ZlcmZsb3cteCcsXG4gICdvdmVyZmxvdy15JyxcbiAgJ3BhZGRpbmcnLFxuICAncGFkZGluZy1ib3R0b20nLFxuICAncGFkZGluZy1sZWZ0JyxcbiAgJ3BhZGRpbmctcmlnaHQnLFxuICAncGFkZGluZy10b3AnLFxuICAncGFnZS1icmVhay1hZnRlcicsXG4gICdwYWdlLWJyZWFrLWJlZm9yZScsXG4gICdwYWdlLWJyZWFrLWluc2lkZScsXG4gICdwZXJzcGVjdGl2ZScsXG4gICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAncG9pbnRlci1ldmVudHMnLFxuICAncG9zaXRpb24nLFxuICAncXVvdGVzJyxcbiAgJ3Jlc2l6ZScsXG4gICdyaWdodCcsXG4gICdzcmMnLCAvLyBAZm9udC1mYWNlXG4gICd0YWItc2l6ZScsXG4gICd0YWJsZS1sYXlvdXQnLFxuICAndGV4dC1hbGlnbicsXG4gICd0ZXh0LWFsaWduLWxhc3QnLFxuICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1jb2xvcicsXG4gICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICd0ZXh0LWRlY29yYXRpb24tc3R5bGUnLFxuICAndGV4dC1pbmRlbnQnLFxuICAndGV4dC1vdmVyZmxvdycsXG4gICd0ZXh0LXJlbmRlcmluZycsXG4gICd0ZXh0LXNoYWRvdycsXG4gICd0ZXh0LXRyYW5zZm9ybScsXG4gICd0ZXh0LXVuZGVybGluZS1wb3NpdGlvbicsXG4gICd0b3AnLFxuICAndHJhbnNmb3JtJyxcbiAgJ3RyYW5zZm9ybS1vcmlnaW4nLFxuICAndHJhbnNmb3JtLXN0eWxlJyxcbiAgJ3RyYW5zaXRpb24nLFxuICAndHJhbnNpdGlvbi1kZWxheScsXG4gICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAndW5pY29kZS1iaWRpJyxcbiAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgJ3Zpc2liaWxpdHknLFxuICAnd2hpdGUtc3BhY2UnLFxuICAnd2lkb3dzJyxcbiAgJ3dpZHRoJyxcbiAgJ3dvcmQtYnJlYWsnLFxuICAnd29yZC1zcGFjaW5nJyxcbiAgJ3dvcmQtd3JhcCcsXG4gICd6LWluZGV4J1xuICAvLyByZXZlcnNlIG1ha2VzIHN1cmUgbG9uZ2VyIGF0dHJpYnV0ZXMgYGZvbnQtd2VpZ2h0YCBhcmUgbWF0Y2hlZCBmdWxseVxuICAvLyBpbnN0ZWFkIG9mIGdldHRpbmcgZmFsc2UgcG9zaXRpdmVzIG9uIHNheSBgZm9udGBcbl0ucmV2ZXJzZSgpO1xuXG4vLyBzb21lIGdyYW1tYXJzIHVzZSB0aGVtIGFsbCBhcyBhIHNpbmdsZSBncm91cFxuY29uc3QgUFNFVURPX1NFTEVDVE9SUyA9IFBTRVVET19DTEFTU0VTLmNvbmNhdChQU0VVRE9fRUxFTUVOVFMpO1xuXG4vKlxuTGFuZ3VhZ2U6IExlc3NcbkRlc2NyaXB0aW9uOiBJdCdzIENTUywgd2l0aCBqdXN0IGEgbGl0dGxlIG1vcmUuXG5BdXRob3I6ICAgTWF4IE1pa2hhaWxvdiA8c2V2ZW4ucGhhc2VzLm1heEBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwOi8vbGVzc2Nzcy5vcmdcbkNhdGVnb3J5OiBjb21tb24sIGNzc1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGxlc3MoaGxqcykge1xuICBjb25zdCBtb2RlcyA9IE1PREVTKGhsanMpO1xuICBjb25zdCBQU0VVRE9fU0VMRUNUT1JTJDEgPSBQU0VVRE9fU0VMRUNUT1JTO1xuXG4gIGNvbnN0IEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCI7XG4gIGNvbnN0IElERU5UX1JFID0gJ1tcXFxcdy1dKyc7IC8vIHllcywgTGVzcyBpZGVudGlmaWVycyBtYXkgYmVnaW4gd2l0aCBhIGRpZ2l0XG4gIGNvbnN0IElOVEVSUF9JREVOVF9SRSA9ICcoJyArIElERU5UX1JFICsgJ3xAXFxcXHsnICsgSURFTlRfUkUgKyAnXFxcXH0pJztcblxuICAvKiBHZW5lcmljIE1vZGVzICovXG5cbiAgY29uc3QgUlVMRVMgPSBbXTsgY29uc3QgVkFMVUVfTU9ERVMgPSBbXTsgLy8gZm9yd2FyZCBkZWYuIGZvciByZWN1cnNpdmUgbW9kZXNcblxuICBjb25zdCBTVFJJTkdfTU9ERSA9IGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4ge1xuICAgIC8vIExlc3Mgc3RyaW5ncyBhcmUgbm90IG11bHRpbGluZSAoYWxzbyBpbmNsdWRlICd+JyBmb3IgbW9yZSBjb25zaXN0ZW50IGNvbG9yaW5nIG9mIFwiZXNjYXBlZFwiIHN0cmluZ3MpXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46ICd+PycgKyBjICsgJy4qPycgKyBjXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBJREVOVF9NT0RFID0gZnVuY3Rpb24obmFtZSwgYmVnaW4sIHJlbGV2YW5jZSkge1xuICAgIHJldHVybiB7XG4gICAgICBjbGFzc05hbWU6IG5hbWUsXG4gICAgICBiZWdpbjogYmVnaW4sXG4gICAgICByZWxldmFuY2U6IHJlbGV2YW5jZVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgQVRfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9bYS16LV0rLyxcbiAgICBrZXl3b3JkOiBBVF9NT0RJRklFUlMsXG4gICAgYXR0cmlidXRlOiBNRURJQV9GRUFUVVJFUy5qb2luKFwiIFwiKVxuICB9O1xuXG4gIGNvbnN0IFBBUkVOU19NT0RFID0ge1xuICAgIC8vIHVzZWQgb25seSB0byBwcm9wZXJseSBiYWxhbmNlIG5lc3RlZCBwYXJlbnMgaW5zaWRlIG1peGluIGNhbGwsIGRlZi4gYXJnIGxpc3RcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IFZBTFVFX01PREVTLFxuICAgIGtleXdvcmRzOiBBVF9LRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvLyBnZW5lcmljIExlc3MgaGlnaGxpZ2h0ZXIgKHVzZWQgYWxtb3N0IGV2ZXJ5d2hlcmUgZXhjZXB0IHNlbGVjdG9ycyk6XG4gIFZBTFVFX01PREVTLnB1c2goXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgU1RSSU5HX01PREUoXCInXCIpLFxuICAgIFNUUklOR19NT0RFKCdcIicpLFxuICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLCAvLyBmaXhtZTogaXQgZG9lcyBub3QgaW5jbHVkZSBkb3QgZm9yIG51bWJlcnMgbGlrZSAuNWVtIDooXG4gICAge1xuICAgICAgYmVnaW46ICcodXJsfGRhdGEtdXJpKVxcXFwoJyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBlbmQ6ICdbXFxcXClcXFxcbl0nLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBtb2Rlcy5IRVhDT0xPUixcbiAgICBQQVJFTlNfTU9ERSxcbiAgICBJREVOVF9NT0RFKCd2YXJpYWJsZScsICdAQD8nICsgSURFTlRfUkUsIDEwKSxcbiAgICBJREVOVF9NT0RFKCd2YXJpYWJsZScsICdAXFxcXHsnICsgSURFTlRfUkUgKyAnXFxcXH0nKSxcbiAgICBJREVOVF9NT0RFKCdidWlsdF9pbicsICd+P2BbXmBdKj9gJyksIC8vIGlubGluZSBqYXZhc2NyaXB0IChvciB3aGF0ZXZlciBob3N0IGxhbmd1YWdlKSAqbXVsdGlsaW5lKiBzdHJpbmdcbiAgICB7IC8vIEBtZWRpYSBmZWF0dXJlcyAoaXTigJlzIGhlcmUgdG8gbm90IGR1cGxpY2F0ZSB0aGluZ3MgaW4gQVRfUlVMRV9NT0RFIHdpdGggZXh0cmEgUEFSRU5TX01PREUgb3ZlcnJpZGluZyk6XG4gICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgYmVnaW46IElERU5UX1JFICsgJ1xcXFxzKjonLFxuICAgICAgZW5kOiAnOicsXG4gICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICB9LFxuICAgIG1vZGVzLklNUE9SVEFOVFxuICApO1xuXG4gIGNvbnN0IFZBTFVFX1dJVEhfUlVMRVNFVFMgPSBWQUxVRV9NT0RFUy5jb25jYXQoe1xuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGNvbnRhaW5zOiBSVUxFU1xuICB9KTtcblxuICBjb25zdCBNSVhJTl9HVUFSRF9NT0RFID0ge1xuICAgIGJlZ2luS2V5d29yZHM6ICd3aGVuJyxcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnYW5kIG5vdCdcbiAgICAgIH1cbiAgICBdLmNvbmNhdChWQUxVRV9NT0RFUykgLy8gdXNpbmcgdGhpcyBmb3JtIHRvIG92ZXJyaWRlIFZBTFVF4oCZcyAnZnVuY3Rpb24nIG1hdGNoXG4gIH07XG5cbiAgLyogUnVsZS1MZXZlbCBNb2RlcyAqL1xuXG4gIGNvbnN0IFJVTEVfTU9ERSA9IHtcbiAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFICsgJ1xcXFxzKjonLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGVuZDogL1s7fV0vLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLy0od2Via2l0fG1venxtc3xvKS0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBBVFRSSUJVVEVTLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICBlbmQ6IC8oPz06KS8sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgIGlsbGVnYWw6ICdbPD0kXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBWQUxVRV9NT0RFU1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEFUX1JVTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogJ0AoaW1wb3J0fG1lZGlhfGNoYXJzZXR8Zm9udC1mYWNlfCgtW2Etel0rLSk/a2V5ZnJhbWVzfHN1cHBvcnRzfGRvY3VtZW50fG5hbWVzcGFjZXxwYWdlfHZpZXdwb3J0fGhvc3QpXFxcXGInLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnWzt7fV0nLFxuICAgICAga2V5d29yZHM6IEFUX0tFWVdPUkRTLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFZBTFVFX01PREVTLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICB9O1xuXG4gIC8vIHZhcmlhYmxlIGRlZmluaXRpb25zIGFuZCBjYWxsc1xuICBjb25zdCBWQVJfUlVMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gdXNpbmcgbW9yZSBzdHJpY3QgcGF0dGVybiBmb3IgaGlnaGVyIHJlbGV2YW5jZSB0byBpbmNyZWFzZSBjaGFuY2VzIG9mIExlc3MgZGV0ZWN0aW9uLlxuICAgICAgLy8gdGhpcyBpcyAqdGhlIG9ubHkqIExlc3Mgc3BlY2lmaWMgc3RhdGVtZW50IHVzZWQgaW4gbW9zdCBvZiB0aGUgc291cmNlcywgc28uLi5cbiAgICAgIC8vICh3ZeKAmWxsIHN0aWxsIG9mdGVuIGxvb3NlIHRvIHRoZSBjc3MtcGFyc2VyIHVubGVzcyB0aGVyZSdzICcvLycgY29tbWVudCxcbiAgICAgIC8vIHNpbXBseSBiZWNhdXNlIDEgdmFyaWFibGUganVzdCBjYW4ndCBiZWF0IDk5IHByb3BlcnRpZXMgOilcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdAJyArIElERU5UX1JFICsgJ1xcXFxzKjonLFxuICAgICAgICByZWxldmFuY2U6IDE1XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnICsgSURFTlRfUkVcbiAgICAgIH1cbiAgICBdLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnWzt9XScsXG4gICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBTRUxFQ1RPUl9NT0RFID0ge1xuICAgIC8vIGZpcnN0IHBhcnNlIHVuYW1iaWd1b3VzIHNlbGVjdG9ycyAoaS5lLiB0aG9zZSBub3Qgc3RhcnRpbmcgd2l0aCB0YWcpXG4gICAgLy8gdGhlbiBmYWxsIGludG8gdGhlIHNjYXJ5IGxvb2thaGVhZC1kaXNjcmltaW5hdG9yIHZhcmlhbnQuXG4gICAgLy8gdGhpcyBtb2RlIGFsc28gaGFuZGxlcyBtaXhpbiBkZWZpbml0aW9ucyBhbmQgY2FsbHNcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1tcXFxcLiM6JlxcXFxbPl0nLFxuICAgICAgICBlbmQ6ICdbO3t9XScgLy8gbWl4aW4gY2FsbHMgZW5kIHdpdGggJzsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLFxuICAgICAgICBlbmQ6IC9cXHsvXG4gICAgICB9XG4gICAgXSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s8PVxcJyRcIl0nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIE1JWElOX0dVQVJEX01PREUsXG4gICAgICBJREVOVF9NT0RFKCdrZXl3b3JkJywgJ2FsbFxcXFxiJyksXG4gICAgICBJREVOVF9NT0RFKCd2YXJpYWJsZScsICdAXFxcXHsnICsgSURFTlRfUkUgKyAnXFxcXH0nKSwgLy8gb3RoZXJ3aXNlIGl04oCZcyBpZGVudGlmaWVkIGFzIHRhZ1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnXG4gICAgICB9LFxuICAgICAgSURFTlRfTU9ERSgnc2VsZWN0b3ItdGFnJywgSU5URVJQX0lERU5UX1JFICsgJyU/JywgMCksIC8vICclJyBmb3IgbW9yZSBjb25zaXN0ZW50IGNvbG9yaW5nIG9mIEBrZXlmcmFtZXMgXCJ0YWdzXCJcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWlkJywgJyMnICsgSU5URVJQX0lERU5UX1JFKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWNsYXNzJywgJ1xcXFwuJyArIElOVEVSUF9JREVOVF9SRSwgMCksXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAnJicsIDApLFxuICAgICAgbW9kZXMuQVRUUklCVVRFX1NFTEVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOignICsgUFNFVURPX0NMQVNTRVMuam9pbignfCcpICsgJyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzo6KCcgKyBQU0VVRE9fRUxFTUVOVFMuam9pbignfCcpICsgJyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU1xuICAgICAgfSwgLy8gYXJndW1lbnQgbGlzdCBvZiBwYXJhbWV0cmljIG1peGluc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgICB9IC8vIGVhdCAhaW1wb3J0YW50IGFmdGVyIG1peGluIGNhbGwgb3IgaXQgd2lsbCBiZSBjb2xvcmVkIGFzIHRhZ1xuICAgIF1cbiAgfTtcblxuICBjb25zdCBQU0VVRE9fU0VMRUNUT1JfTU9ERSA9IHtcbiAgICBiZWdpbjogSURFTlRfUkUgKyAnOig6KT8nICsgYCgke1BTRVVET19TRUxFQ1RPUlMkMS5qb2luKCd8Jyl9KWAsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFsgU0VMRUNUT1JfTU9ERSBdXG4gIH07XG5cbiAgUlVMRVMucHVzaChcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBBVF9SVUxFX01PREUsXG4gICAgVkFSX1JVTEVfTU9ERSxcbiAgICBQU0VVRE9fU0VMRUNUT1JfTU9ERSxcbiAgICBSVUxFX01PREUsXG4gICAgU0VMRUNUT1JfTU9ERVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0xlc3MnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s9PlxcJy88KCRcIl0nLFxuICAgIGNvbnRhaW5zOiBSVUxFU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlc3M7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogTGlzcFxuRGVzY3JpcHRpb246IEdlbmVyaWMgbGlzcCBzeW50YXhcbkF1dGhvcjogVmFzaWx5IFBvbG92bnlvdiA8dmFzdEB3aGl0ZWFudHMubmV0PlxuQ2F0ZWdvcnk6IGxpc3BcbiovXG5cbmZ1bmN0aW9uIGxpc3AoaGxqcykge1xuICB2YXIgTElTUF9JREVOVF9SRSA9ICdbYS16QS1aX1xcXFwtK1xcXFwqXFxcXC88PT4mI11bYS16QS1aMC05X1xcXFwtKypcXFxcLzw9PiYjIV0qJztcbiAgdmFyIE1FQ19SRSA9ICdcXFxcfFteXSo/XFxcXHwnO1xuICB2YXIgTElTUF9TSU1QTEVfTlVNQkVSX1JFID0gJygtfFxcXFwrKT9cXFxcZCsoXFxcXC5cXFxcZCt8XFxcXC9cXFxcZCspPygoZHxlfGZ8bHxzfER8RXxGfEx8UykoXFxcXCt8LSk/XFxcXGQrKT8nO1xuICB2YXIgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogJ1xcXFxiKHR7MX18bmlsKVxcXFxiJ1xuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogTElTUF9TSU1QTEVfTlVNQkVSX1JFLCByZWxldmFuY2U6IDB9LFxuICAgICAge2JlZ2luOiAnIyhifEIpWzAtMV0rKC9bMC0xXSspPyd9LFxuICAgICAge2JlZ2luOiAnIyhvfE8pWzAtN10rKC9bMC03XSspPyd9LFxuICAgICAge2JlZ2luOiAnIyh4fFgpWzAtOWEtZkEtRl0rKC9bMC05YS1mQS1GXSspPyd9LFxuICAgICAge2JlZ2luOiAnIyhjfEMpXFxcXCgnICsgTElTUF9TSU1QTEVfTlVNQkVSX1JFICsgJyArJyArIExJU1BfU0lNUExFX05VTUJFUl9SRSwgZW5kOiAnXFxcXCknfVxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pO1xuICB2YXIgQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAnOycsICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBiZWdpbjogJ1xcXFwqJywgZW5kOiAnXFxcXConXG4gIH07XG4gIHZhciBLRVlXT1JEID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOiZdJyArIExJU1BfSURFTlRfUkVcbiAgfTtcbiAgdmFyIElERU5UID0ge1xuICAgIGJlZ2luOiBMSVNQX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgTUVDID0ge1xuICAgIGJlZ2luOiBNRUNfUkVcbiAgfTtcbiAgdmFyIFFVT1RFRF9MSVNUID0ge1xuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IFsnc2VsZicsIExJVEVSQUwsIFNUUklORywgTlVNQkVSLCBJREVOVF1cbiAgfTtcbiAgdmFyIFFVT1RFRCA9IHtcbiAgICBjb250YWluczogW05VTUJFUiwgU1RSSU5HLCBWQVJJQUJMRSwgS0VZV09SRCwgUVVPVEVEX0xJU1QsIElERU5UXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1tcXCdgXVxcXFwoJywgZW5kOiAnXFxcXCknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwocXVvdGUgJywgZW5kOiAnXFxcXCknLFxuICAgICAgICBrZXl3b3Jkczoge25hbWU6ICdxdW90ZSd9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycgKyBNRUNfUkVcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHZhciBRVU9URURfQVRPTSA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAnXFwnJyArIExJU1BfSURFTlRfUkV9LFxuICAgICAge2JlZ2luOiAnI1xcJycgKyBMSVNQX0lERU5UX1JFICsgJyg6OicgKyBMSVNQX0lERU5UX1JFICsgJykqJ31cbiAgICBdXG4gIH07XG4gIHZhciBMSVNUID0ge1xuICAgIGJlZ2luOiAnXFxcXChcXFxccyonLCBlbmQ6ICdcXFxcKSdcbiAgfTtcbiAgdmFyIEJPRFkgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIExJU1QuY29udGFpbnMgPSBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IExJU1BfSURFTlRfUkUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB9LFxuICAgICAgICB7YmVnaW46IE1FQ19SRX1cbiAgICAgIF1cbiAgICB9LFxuICAgIEJPRFlcbiAgXTtcbiAgQk9EWS5jb250YWlucyA9IFtRVU9URUQsIFFVT1RFRF9BVE9NLCBMSVNULCBMSVRFUkFMLCBOVU1CRVIsIFNUUklORywgQ09NTUVOVCwgVkFSSUFCTEUsIEtFWVdPUkQsIE1FQywgSURFTlRdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0xpc3AnLFxuICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOVU1CRVIsXG4gICAgICBobGpzLlNIRUJBTkcoKSxcbiAgICAgIExJVEVSQUwsXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01NRU5ULFxuICAgICAgUVVPVEVELFxuICAgICAgUVVPVEVEX0FUT00sXG4gICAgICBMSVNULFxuICAgICAgSURFTlRcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzcDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBMaXZlQ29kZVxuQXV0aG9yOiBSYWxmIEJpdHRlciA8cmFiaXRAcmV2aWduaXRlci5jb20+XG5EZXNjcmlwdGlvbjogTGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgTGl2ZUNvZGUgc2VydmVyIGFjY291bnRpbmcgZm9yIHJldklnbml0ZXIgKGEgd2ViIGFwcGxpY2F0aW9uIGZyYW1ld29yaykgY2hhcmFjdGVyaXN0aWNzLlxuVmVyc2lvbjogMS4xXG5EYXRlOiAyMDE5LTA0LTE3XG5DYXRlZ29yeTogZW50ZXJwcmlzZVxuKi9cblxuZnVuY3Rpb24gbGl2ZWNvZGVzZXJ2ZXIoaGxqcykge1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYihbZ3Rwc11bQS1aXXsxfVthLXpBLVowLTldKikoXFxcXFsuK1xcXFxdKT8oPzpcXFxccyo/KSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCRfW0EtWl0rJ1xuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpLFxuICAgIGhsanMuQ09NTUVOVCgnW146XS8vJywgJyQnKVxuICBdO1xuICBjb25zdCBUSVRMRTEgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYl8qcmlnW0EtWl1bQS1aYS16MC05X1xcXFwtXSonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiX1thLXowLTlcXFxcLV0rJ1xuICAgICAgfVxuICAgIF1cbiAgfSk7XG4gIGNvbnN0IFRJVExFMiA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICBiZWdpbjogJ1xcXFxiKFtBLVphLXowLTlfXFxcXC1dKylcXFxcYidcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0xpdmVDb2RlJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJyRfQ09PS0lFICRfRklMRVMgJF9HRVQgJF9HRVRfQklOQVJZICRfR0VUX1JBVyAkX1BPU1QgJF9QT1NUX0JJTkFSWSAkX1BPU1RfUkFXICRfU0VTU0lPTiAkX1NFUlZFUiAnICtcbiAgICAgICAgJ2NvZGVwb2ludCBjb2RlcG9pbnRzIHNlZ21lbnQgc2VnbWVudHMgY29kZXVuaXQgY29kZXVuaXRzIHNlbnRlbmNlIHNlbnRlbmNlcyB0cnVlV29yZCB0cnVlV29yZHMgcGFyYWdyYXBoICcgK1xuICAgICAgICAnYWZ0ZXIgYnl0ZSBieXRlcyBlbmdsaXNoIHRoZSB1bnRpbCBodHRwIGZvcmV2ZXIgZGVzY2VuZGluZyB1c2luZyBsaW5lIHJlYWw4IHdpdGggc2V2ZW50aCAnICtcbiAgICAgICAgJ2ZvciBzdGRvdXQgZmluYWxseSBlbGVtZW50IHdvcmQgd29yZHMgZm91cnRoIGJlZm9yZSBibGFjayBuaW50aCBzaXh0aCBjaGFyYWN0ZXJzIGNoYXJzIHN0ZGVyciAnICtcbiAgICAgICAgJ3VJbnQxIHVJbnQxcyB1SW50MiB1SW50MnMgc3RkaW4gc3RyaW5nIGxpbmVzIHJlbGF0aXZlIHJlbCBhbnkgZmlmdGggaXRlbXMgZnJvbSBtaWRkbGUgbWlkICcgK1xuICAgICAgICAnYXQgZWxzZSBvZiBjYXRjaCB0aGVuIHRoaXJkIGl0IGZpbGUgbWlsbGlzZWNvbmRzIHNlY29uZHMgc2Vjb25kIHNlY3Mgc2VjIGludDEgaW50MXMgaW50NCAnICtcbiAgICAgICAgJ2ludDRzIGludGVybmV0IGludDIgaW50MnMgbm9ybWFsIHRleHQgaXRlbSBsYXN0IGxvbmcgZGV0YWlsZWQgZWZmZWN0aXZlIHVJbnQ0IHVJbnQ0cyByZXBlYXQgJyArXG4gICAgICAgICdlbmQgcmVwZWF0IFVSTCBpbiB0cnkgaW50byBzd2l0Y2ggdG8gd29yZHMgaHR0cHMgdG9rZW4gYmluZmlsZSBlYWNoIHRlbnRoIGFzIHRpY2tzIHRpY2sgJyArXG4gICAgICAgICdzeXN0ZW0gcmVhbDQgYnkgZGF0ZUl0ZW1zIHdpdGhvdXQgY2hhciBjaGFyYWN0ZXIgYXNjZW5kaW5nIGVpZ2h0aCB3aG9sZSBkYXRlVGltZSBudW1lcmljIHNob3J0ICcgK1xuICAgICAgICAnZmlyc3QgZnRwIGludGVnZXIgYWJicmV2aWF0ZWQgYWJiciBhYmJyZXYgcHJpdmF0ZSBjYXNlIHdoaWxlIGlmICcgK1xuICAgICAgICAnZGl2IG1vZCB3cmFwIGFuZCBvciBiaXRBbmQgYml0Tm90IGJpdE9yIGJpdFhvciBhbW9uZyBub3QgaW4gYSBhbiB3aXRoaW4gJyArXG4gICAgICAgICdjb250YWlucyBlbmRzIHdpdGggYmVnaW5zIHRoZSBrZXlzIG9mIGtleXMnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ1NJWCBURU4gRk9STUZFRUQgTklORSBaRVJPIE5PTkUgU1BBQ0UgRk9VUiBGQUxTRSBDT0xPTiBDUkxGIFBJIENPTU1BIEVORE9GRklMRSBFT0YgRUlHSFQgRklWRSAnICtcbiAgICAgICAgJ1FVT1RFIEVNUFRZIE9ORSBUUlVFIFJFVFVSTiBDUiBMSU5FRkVFRCBSSUdIVCBCQUNLU0xBU0ggTlVMTCBTRVZFTiBUQUIgVEhSRUUgVFdPICcgK1xuICAgICAgICAnc2l4IHRlbiBmb3JtZmVlZCBuaW5lIHplcm8gbm9uZSBzcGFjZSBmb3VyIGZhbHNlIGNvbG9uIGNybGYgcGkgY29tbWEgZW5kb2ZmaWxlIGVvZiBlaWdodCBmaXZlICcgK1xuICAgICAgICAncXVvdGUgZW1wdHkgb25lIHRydWUgcmV0dXJuIGNyIGxpbmVmZWVkIHJpZ2h0IGJhY2tzbGFzaCBudWxsIHNldmVuIHRhYiB0aHJlZSB0d28gJyArXG4gICAgICAgICdSSVZFUlNJT04gUklTVEFURSBGSUxFX1JFQURfTU9ERSBGSUxFX1dSSVRFX01PREUgRklMRV9XUklURV9NT0RFIERJUl9XUklURV9NT0RFIEZJTEVfUkVBRF9VTUFTSyAnICtcbiAgICAgICAgJ0ZJTEVfV1JJVEVfVU1BU0sgRElSX1JFQURfVU1BU0sgRElSX1dSSVRFX1VNQVNLJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAncHV0IGFicyBhY29zIGFsaWFzUmVmZXJlbmNlIGFubnVpdHkgYXJyYXlEZWNvZGUgYXJyYXlFbmNvZGUgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgYXZnIGF2Z0RldiBiYXNlNjREZWNvZGUgJyArXG4gICAgICAgICdiYXNlNjRFbmNvZGUgYmFzZUNvbnZlcnQgYmluYXJ5RGVjb2RlIGJpbmFyeUVuY29kZSBieXRlT2Zmc2V0IGJ5dGVUb051bSBjYWNoZWRVUkwgY2FjaGVkVVJMcyBjaGFyVG9OdW0gJyArXG4gICAgICAgICdjaXBoZXJOYW1lcyBjb2RlcG9pbnRPZmZzZXQgY29kZXBvaW50UHJvcGVydHkgY29kZXBvaW50VG9OdW0gY29kZXVuaXRPZmZzZXQgY29tbWFuZE5hbWVzIGNvbXBvdW5kIGNvbXByZXNzICcgK1xuICAgICAgICAnY29uc3RhbnROYW1lcyBjb3MgZGF0ZSBkYXRlRm9ybWF0IGRlY29tcHJlc3MgZGlmZmVyZW5jZSBkaXJlY3RvcmllcyAnICtcbiAgICAgICAgJ2Rpc2tTcGFjZSBETlNTZXJ2ZXJzIGV4cCBleHAxIGV4cDIgZXhwMTAgZXh0ZW50cyBmaWxlcyBmbHVzaEV2ZW50cyBmb2xkZXJzIGZvcm1hdCBmdW5jdGlvbk5hbWVzIGdlb21ldHJpY01lYW4gZ2xvYmFsICcgK1xuICAgICAgICAnZ2xvYmFscyBoYXNNZW1vcnkgaGFybW9uaWNNZWFuIGhvc3RBZGRyZXNzIGhvc3RBZGRyZXNzVG9OYW1lIGhvc3ROYW1lIGhvc3ROYW1lVG9BZGRyZXNzIGlzTnVtYmVyIElTT1RvTWFjIGl0ZW1PZmZzZXQgJyArXG4gICAgICAgICdrZXlzIGxlbiBsZW5ndGggbGliVVJMRXJyb3JEYXRhIGxpYlVybEZvcm1EYXRhIGxpYlVSTGZ0cENvbW1hbmQgbGliVVJMTGFzdEhUVFBIZWFkZXJzIGxpYlVSTExhc3RSSEhlYWRlcnMgJyArXG4gICAgICAgICdsaWJVcmxNdWx0aXBhcnRGb3JtQWRkUGFydCBsaWJVcmxNdWx0aXBhcnRGb3JtRGF0YSBsaWJVUkxWZXJzaW9uIGxpbmVPZmZzZXQgbG4gbG4xIGxvY2FsTmFtZXMgbG9nIGxvZzIgbG9nMTAgJyArXG4gICAgICAgICdsb25nRmlsZVBhdGggbG93ZXIgbWFjVG9JU08gbWF0Y2hDaHVuayBtYXRjaFRleHQgbWF0cml4TXVsdGlwbHkgbWF4IG1kNURpZ2VzdCBtZWRpYW4gbWVyZ2UgbWVzc2FnZUF1dGhlbnRpY2F0aW9uQ29kZSBtZXNzYWdlRGlnZXN0IG1pbGxpc2VjICcgK1xuICAgICAgICAnbWlsbGlzZWNzIG1pbGxpc2Vjb25kIG1pbGxpc2Vjb25kcyBtaW4gbW9udGhOYW1lcyBuYXRpdmVDaGFyVG9OdW0gbm9ybWFsaXplVGV4dCBudW0gbnVtYmVyIG51bVRvQnl0ZSBudW1Ub0NoYXIgJyArXG4gICAgICAgICdudW1Ub0NvZGVwb2ludCBudW1Ub05hdGl2ZUNoYXIgb2Zmc2V0IG9wZW4gb3BlbmZpbGVzIG9wZW5Qcm9jZXNzZXMgb3BlblByb2Nlc3NJRHMgb3BlblNvY2tldHMgJyArXG4gICAgICAgICdwYXJhZ3JhcGhPZmZzZXQgcGFyYW1Db3VudCBwYXJhbSBwYXJhbXMgcGVlckFkZHJlc3MgcGVuZGluZ01lc3NhZ2VzIHBsYXRmb3JtIHBvcFN0ZERldiBwb3B1bGF0aW9uU3RhbmRhcmREZXZpYXRpb24gJyArXG4gICAgICAgICdwb3B1bGF0aW9uVmFyaWFuY2UgcG9wVmFyaWFuY2UgcHJvY2Vzc0lEIHJhbmRvbSByYW5kb21CeXRlcyByZXBsYWNlVGV4dCByZXN1bHQgcmV2Q3JlYXRlWE1MVHJlZSByZXZDcmVhdGVYTUxUcmVlRnJvbUZpbGUgJyArXG4gICAgICAgICdyZXZDdXJyZW50UmVjb3JkIHJldkN1cnJlbnRSZWNvcmRJc0ZpcnN0IHJldkN1cnJlbnRSZWNvcmRJc0xhc3QgcmV2RGF0YWJhc2VDb2x1bW5Db3VudCByZXZEYXRhYmFzZUNvbHVtbklzTnVsbCAnICtcbiAgICAgICAgJ3JldkRhdGFiYXNlQ29sdW1uTGVuZ3RocyByZXZEYXRhYmFzZUNvbHVtbk5hbWVzIHJldkRhdGFiYXNlQ29sdW1uTmFtZWQgcmV2RGF0YWJhc2VDb2x1bW5OdW1iZXJlZCAnICtcbiAgICAgICAgJ3JldkRhdGFiYXNlQ29sdW1uVHlwZXMgcmV2RGF0YWJhc2VDb25uZWN0UmVzdWx0IHJldkRhdGFiYXNlQ3Vyc29ycyByZXZEYXRhYmFzZUlEIHJldkRhdGFiYXNlVGFibGVOYW1lcyAnICtcbiAgICAgICAgJ3JldkRhdGFiYXNlVHlwZSByZXZEYXRhRnJvbVF1ZXJ5IHJldmRiX2Nsb3NlQ3Vyc29yIHJldmRiX2NvbHVtbmJ5bnVtYmVyIHJldmRiX2NvbHVtbmNvdW50IHJldmRiX2NvbHVtbmlzbnVsbCAnICtcbiAgICAgICAgJ3JldmRiX2NvbHVtbmxlbmd0aHMgcmV2ZGJfY29sdW1ubmFtZXMgcmV2ZGJfY29sdW1udHlwZXMgcmV2ZGJfY29tbWl0IHJldmRiX2Nvbm5lY3QgcmV2ZGJfY29ubmVjdGlvbnMgJyArXG4gICAgICAgICdyZXZkYl9jb25uZWN0aW9uZXJyIHJldmRiX2N1cnJlbnRyZWNvcmQgcmV2ZGJfY3Vyc29yY29ubmVjdGlvbiByZXZkYl9jdXJzb3JlcnIgcmV2ZGJfY3Vyc29ycyByZXZkYl9kYnR5cGUgJyArXG4gICAgICAgICdyZXZkYl9kaXNjb25uZWN0IHJldmRiX2V4ZWN1dGUgcmV2ZGJfaXNlb2YgcmV2ZGJfaXNib2YgcmV2ZGJfbW92ZWZpcnN0IHJldmRiX21vdmVsYXN0IHJldmRiX21vdmVuZXh0ICcgK1xuICAgICAgICAncmV2ZGJfbW92ZXByZXYgcmV2ZGJfcXVlcnkgcmV2ZGJfcXVlcnlsaXN0IHJldmRiX3JlY29yZGNvdW50IHJldmRiX3JvbGxiYWNrIHJldmRiX3RhYmxlbmFtZXMgJyArXG4gICAgICAgICdyZXZHZXREYXRhYmFzZURyaXZlclBhdGggcmV2TnVtYmVyT2ZSZWNvcmRzIHJldk9wZW5EYXRhYmFzZSByZXZPcGVuRGF0YWJhc2VzIHJldlF1ZXJ5RGF0YWJhc2UgJyArXG4gICAgICAgICdyZXZRdWVyeURhdGFiYXNlQmxvYiByZXZRdWVyeVJlc3VsdCByZXZRdWVyeUlzQXRTdGFydCByZXZRdWVyeUlzQXRFbmQgcmV2VW5peEZyb21NYWNQYXRoIHJldlhNTEF0dHJpYnV0ZSAnICtcbiAgICAgICAgJ3JldlhNTEF0dHJpYnV0ZXMgcmV2WE1MQXR0cmlidXRlVmFsdWVzIHJldlhNTENoaWxkQ29udGVudHMgcmV2WE1MQ2hpbGROYW1lcyByZXZYTUxDcmVhdGVUcmVlRnJvbUZpbGVXaXRoTmFtZXNwYWNlcyAnICtcbiAgICAgICAgJ3JldlhNTENyZWF0ZVRyZWVXaXRoTmFtZXNwYWNlcyByZXZYTUxEYXRhRnJvbVhQYXRoUXVlcnkgcmV2WE1MRXZhbHVhdGVYUGF0aCByZXZYTUxGaXJzdENoaWxkIHJldlhNTE1hdGNoaW5nTm9kZSAnICtcbiAgICAgICAgJ3JldlhNTE5leHRTaWJsaW5nIHJldlhNTE5vZGVDb250ZW50cyByZXZYTUxOdW1iZXJPZkNoaWxkcmVuIHJldlhNTFBhcmVudCByZXZYTUxQcmV2aW91c1NpYmxpbmcgJyArXG4gICAgICAgICdyZXZYTUxSb290Tm9kZSByZXZYTUxSUENfQ3JlYXRlUmVxdWVzdCByZXZYTUxSUENfRG9jdW1lbnRzIHJldlhNTFJQQ19FcnJvciAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19HZXRIb3N0IHJldlhNTFJQQ19HZXRNZXRob2QgcmV2WE1MUlBDX0dldFBhcmFtIHJldlhNTFRleHQgcmV2WE1MUlBDX0V4ZWN1dGUgJyArXG4gICAgICAgICdyZXZYTUxSUENfR2V0UGFyYW1Db3VudCByZXZYTUxSUENfR2V0UGFyYW1Ob2RlIHJldlhNTFJQQ19HZXRQYXJhbVR5cGUgcmV2WE1MUlBDX0dldFBhdGggcmV2WE1MUlBDX0dldFBvcnQgJyArXG4gICAgICAgICdyZXZYTUxSUENfR2V0UHJvdG9jb2wgcmV2WE1MUlBDX0dldFJlcXVlc3QgcmV2WE1MUlBDX0dldFJlc3BvbnNlIHJldlhNTFJQQ19HZXRTb2NrZXQgcmV2WE1MVHJlZSAnICtcbiAgICAgICAgJ3JldlhNTFRyZWVzIHJldlhNTFZhbGlkYXRlRFREIHJldlppcERlc2NyaWJlSXRlbSByZXZaaXBFbnVtZXJhdGVJdGVtcyByZXZaaXBPcGVuQXJjaGl2ZXMgcm91bmQgc2FtcFZhcmlhbmNlICcgK1xuICAgICAgICAnc2VjIHNlY3Mgc2Vjb25kcyBzZW50ZW5jZU9mZnNldCBzaGExRGlnZXN0IHNoZWxsIHNob3J0RmlsZVBhdGggc2luIHNwZWNpYWxGb2xkZXJQYXRoIHNxcnQgc3RhbmRhcmREZXZpYXRpb24gc3RhdFJvdW5kICcgK1xuICAgICAgICAnc3RkRGV2IHN1bSBzeXNFcnJvciBzeXN0ZW1WZXJzaW9uIHRhbiB0ZW1wTmFtZSB0ZXh0RGVjb2RlIHRleHRFbmNvZGUgdGljayB0aWNrcyB0aW1lIHRvIHRva2VuT2Zmc2V0IHRvTG93ZXIgdG9VcHBlciAnICtcbiAgICAgICAgJ3RyYW5zcG9zZSB0cnVld29yZE9mZnNldCB0cnVuYyB1bmlEZWNvZGUgdW5pRW5jb2RlIHVwcGVyIFVSTERlY29kZSBVUkxFbmNvZGUgVVJMU3RhdHVzIHV1aWQgdmFsdWUgdmFyaWFibGVOYW1lcyAnICtcbiAgICAgICAgJ3ZhcmlhbmNlIHZlcnNpb24gd2FpdERlcHRoIHdlZWtkYXlOYW1lcyB3b3JkT2Zmc2V0IHhzbHRBcHBseVN0eWxlc2hlZXQgeHNsdEFwcGx5U3R5bGVzaGVldEZyb21GaWxlIHhzbHRMb2FkU3R5bGVzaGVldCAnICtcbiAgICAgICAgJ3hzbHRMb2FkU3R5bGVzaGVldEZyb21GaWxlIGFkZCBicmVha3BvaW50IGNhbmNlbCBjbGVhciBsb2NhbCB2YXJpYWJsZSBmaWxlIHdvcmQgbGluZSBmb2xkZXIgZGlyZWN0b3J5IFVSTCBjbG9zZSBzb2NrZXQgcHJvY2VzcyAnICtcbiAgICAgICAgJ2NvbWJpbmUgY29uc3RhbnQgY29udmVydCBjcmVhdGUgbmV3IGFsaWFzIGZvbGRlciBkaXJlY3RvcnkgZGVjcnlwdCBkZWxldGUgdmFyaWFibGUgd29yZCBsaW5lIGZvbGRlciAnICtcbiAgICAgICAgJ2RpcmVjdG9yeSBVUkwgZGlzcGF0Y2ggZGl2aWRlIGRvIGVuY3J5cHQgZmlsdGVyIGdldCBpbmNsdWRlIGludGVyc2VjdCBraWxsIGxpYlVSTERvd25sb2FkVG9GaWxlICcgK1xuICAgICAgICAnbGliVVJMRm9sbG93SHR0cFJlZGlyZWN0cyBsaWJVUkxmdHBVcGxvYWQgbGliVVJMZnRwVXBsb2FkRmlsZSBsaWJVUkxyZXNldEFsbCBsaWJVcmxTZXRBdXRoQ2FsbGJhY2sgbGliVVJMU2V0RHJpdmVyICcgK1xuICAgICAgICAnbGliVVJMU2V0Q3VzdG9tSFRUUEhlYWRlcnMgbGliVXJsU2V0RXhwZWN0MTAwIGxpYlVSTFNldEZUUExpc3RDb21tYW5kIGxpYlVSTFNldEZUUE1vZGUgbGliVVJMU2V0RlRQU3RvcFRpbWUgJyArXG4gICAgICAgICdsaWJVUkxTZXRTdGF0dXNDYWxsYmFjayBsb2FkIGV4dGVuc2lvbiBsb2FkZWRFeHRlbnNpb25zIG11bHRpcGx5IHNvY2tldCBwcmVwYXJlIHByb2Nlc3MgcG9zdCBzZWVrIHJlbCByZWxhdGl2ZSByZWFkIGZyb20gcHJvY2VzcyByZW5hbWUgJyArXG4gICAgICAgICdyZXBsYWNlIHJlcXVpcmUgcmVzZXRBbGwgcmVzb2x2ZSByZXZBZGRYTUxOb2RlIHJldkFwcGVuZFhNTCByZXZDbG9zZUN1cnNvciByZXZDbG9zZURhdGFiYXNlIHJldkNvbW1pdERhdGFiYXNlICcgK1xuICAgICAgICAncmV2Q29weUZpbGUgcmV2Q29weUZvbGRlciByZXZDb3B5WE1MTm9kZSByZXZEZWxldGVGb2xkZXIgcmV2RGVsZXRlWE1MTm9kZSByZXZEZWxldGVBbGxYTUxUcmVlcyAnICtcbiAgICAgICAgJ3JldkRlbGV0ZVhNTFRyZWUgcmV2RXhlY3V0ZVNRTCByZXZHb1VSTCByZXZJbnNlcnRYTUxOb2RlIHJldk1vdmVGb2xkZXIgcmV2TW92ZVRvRmlyc3RSZWNvcmQgcmV2TW92ZVRvTGFzdFJlY29yZCAnICtcbiAgICAgICAgJ3Jldk1vdmVUb05leHRSZWNvcmQgcmV2TW92ZVRvUHJldmlvdXNSZWNvcmQgcmV2TW92ZVRvUmVjb3JkIHJldk1vdmVYTUxOb2RlIHJldlB1dEludG9YTUxOb2RlIHJldlJvbGxCYWNrRGF0YWJhc2UgJyArXG4gICAgICAgICdyZXZTZXREYXRhYmFzZURyaXZlclBhdGggcmV2U2V0WE1MQXR0cmlidXRlIHJldlhNTFJQQ19BZGRQYXJhbSByZXZYTUxSUENfRGVsZXRlQWxsRG9jdW1lbnRzIHJldlhNTEFkZERURCAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19GcmVlIHJldlhNTFJQQ19GcmVlQWxsIHJldlhNTFJQQ19EZWxldGVEb2N1bWVudCByZXZYTUxSUENfRGVsZXRlUGFyYW0gcmV2WE1MUlBDX1NldEhvc3QgJyArXG4gICAgICAgICdyZXZYTUxSUENfU2V0TWV0aG9kIHJldlhNTFJQQ19TZXRQb3J0IHJldlhNTFJQQ19TZXRQcm90b2NvbCByZXZYTUxSUENfU2V0U29ja2V0IHJldlppcEFkZEl0ZW1XaXRoRGF0YSAnICtcbiAgICAgICAgJ3JldlppcEFkZEl0ZW1XaXRoRmlsZSByZXZaaXBBZGRVbmNvbXByZXNzZWRJdGVtV2l0aERhdGEgcmV2WmlwQWRkVW5jb21wcmVzc2VkSXRlbVdpdGhGaWxlIHJldlppcENhbmNlbCAnICtcbiAgICAgICAgJ3JldlppcENsb3NlQXJjaGl2ZSByZXZaaXBEZWxldGVJdGVtIHJldlppcEV4dHJhY3RJdGVtVG9GaWxlIHJldlppcEV4dHJhY3RJdGVtVG9WYXJpYWJsZSByZXZaaXBTZXRQcm9ncmVzc0NhbGxiYWNrICcgK1xuICAgICAgICAncmV2WmlwUmVuYW1lSXRlbSByZXZaaXBSZXBsYWNlSXRlbVdpdGhEYXRhIHJldlppcFJlcGxhY2VJdGVtV2l0aEZpbGUgcmV2WmlwT3BlbkFyY2hpdmUgc2VuZCBzZXQgc29ydCBzcGxpdCBzdGFydCBzdG9wICcgK1xuICAgICAgICAnc3VidHJhY3Qgc3ltbWV0cmljIHVuaW9uIHVubG9hZCB2ZWN0b3JEb3RQcm9kdWN0IHdhaXQgd3JpdGUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiZW5kXFxcXHNpZlxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBUSVRMRTIsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIFRJVExFMVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJlbmRcXFxccysnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdlbmQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFRJVExFMixcbiAgICAgICAgICBUSVRMRTFcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29tbWFuZCBvbicsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFRJVExFMixcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgVElUTEUxXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnPFxcXFw/KHJldnxsY3xsaXZlY29kZSknLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc8XFxcXD8nXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFw/PidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBUSVRMRTFcbiAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKSxcbiAgICBpbGxlZ2FsOiAnOyR8XlxcXFxbfF49fCZ8XFxcXHsnXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGl2ZWNvZGVzZXJ2ZXI7XG4iLAogICAgImNvbnN0IEtFWVdPUkRTID0gW1xuICBcImFzXCIsIC8vIGZvciBleHBvcnRzXG4gIFwiaW5cIixcbiAgXCJvZlwiLFxuICBcImlmXCIsXG4gIFwiZm9yXCIsXG4gIFwid2hpbGVcIixcbiAgXCJmaW5hbGx5XCIsXG4gIFwidmFyXCIsXG4gIFwibmV3XCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJkb1wiLFxuICBcInJldHVyblwiLFxuICBcInZvaWRcIixcbiAgXCJlbHNlXCIsXG4gIFwiYnJlYWtcIixcbiAgXCJjYXRjaFwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhyb3dcIixcbiAgXCJjYXNlXCIsXG4gIFwiZGVmYXVsdFwiLFxuICBcInRyeVwiLFxuICBcInN3aXRjaFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwidHlwZW9mXCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwibGV0XCIsXG4gIFwieWllbGRcIixcbiAgXCJjb25zdFwiLFxuICBcImNsYXNzXCIsXG4gIC8vIEpTIGhhbmRsZXMgdGhlc2Ugd2l0aCBhIHNwZWNpYWwgcnVsZVxuICAvLyBcImdldFwiLFxuICAvLyBcInNldFwiLFxuICBcImRlYnVnZ2VyXCIsXG4gIFwiYXN5bmNcIixcbiAgXCJhd2FpdFwiLFxuICBcInN0YXRpY1wiLFxuICBcImltcG9ydFwiLFxuICBcImZyb21cIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCJcbl07XG5jb25zdCBMSVRFUkFMUyA9IFtcbiAgXCJ0cnVlXCIsXG4gIFwiZmFsc2VcIixcbiAgXCJudWxsXCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwiTmFOXCIsXG4gIFwiSW5maW5pdHlcIlxuXTtcblxuY29uc3QgVFlQRVMgPSBbXG4gIFwiSW50bFwiLFxuICBcIkRhdGFWaWV3XCIsXG4gIFwiTnVtYmVyXCIsXG4gIFwiTWF0aFwiLFxuICBcIkRhdGVcIixcbiAgXCJTdHJpbmdcIixcbiAgXCJSZWdFeHBcIixcbiAgXCJPYmplY3RcIixcbiAgXCJGdW5jdGlvblwiLFxuICBcIkJvb2xlYW5cIixcbiAgXCJFcnJvclwiLFxuICBcIlN5bWJvbFwiLFxuICBcIlNldFwiLFxuICBcIk1hcFwiLFxuICBcIldlYWtTZXRcIixcbiAgXCJXZWFrTWFwXCIsXG4gIFwiUHJveHlcIixcbiAgXCJSZWZsZWN0XCIsXG4gIFwiSlNPTlwiLFxuICBcIlByb21pc2VcIixcbiAgXCJGbG9hdDY0QXJyYXlcIixcbiAgXCJJbnQxNkFycmF5XCIsXG4gIFwiSW50MzJBcnJheVwiLFxuICBcIkludDhBcnJheVwiLFxuICBcIlVpbnQxNkFycmF5XCIsXG4gIFwiVWludDMyQXJyYXlcIixcbiAgXCJGbG9hdDMyQXJyYXlcIixcbiAgXCJBcnJheVwiLFxuICBcIlVpbnQ4QXJyYXlcIixcbiAgXCJVaW50OENsYW1wZWRBcnJheVwiLFxuICBcIkFycmF5QnVmZmVyXCIsXG4gIFwiQmlnSW50NjRBcnJheVwiLFxuICBcIkJpZ1VpbnQ2NEFycmF5XCIsXG4gIFwiQmlnSW50XCJcbl07XG5cbmNvbnN0IEVSUk9SX1RZUEVTID0gW1xuICBcIkV2YWxFcnJvclwiLFxuICBcIkludGVybmFsRXJyb3JcIixcbiAgXCJSYW5nZUVycm9yXCIsXG4gIFwiUmVmZXJlbmNlRXJyb3JcIixcbiAgXCJTeW50YXhFcnJvclwiLFxuICBcIlR5cGVFcnJvclwiLFxuICBcIlVSSUVycm9yXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX0dMT0JBTFMgPSBbXG4gIFwic2V0SW50ZXJ2YWxcIixcbiAgXCJzZXRUaW1lb3V0XCIsXG4gIFwiY2xlYXJJbnRlcnZhbFwiLFxuICBcImNsZWFyVGltZW91dFwiLFxuXG4gIFwicmVxdWlyZVwiLFxuICBcImV4cG9ydHNcIixcblxuICBcImV2YWxcIixcbiAgXCJpc0Zpbml0ZVwiLFxuICBcImlzTmFOXCIsXG4gIFwicGFyc2VGbG9hdFwiLFxuICBcInBhcnNlSW50XCIsXG4gIFwiZGVjb2RlVVJJXCIsXG4gIFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZW5jb2RlVVJJXCIsXG4gIFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZXNjYXBlXCIsXG4gIFwidW5lc2NhcGVcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fVkFSSUFCTEVTID0gW1xuICBcImFyZ3VtZW50c1wiLFxuICBcInRoaXNcIixcbiAgXCJzdXBlclwiLFxuICBcImNvbnNvbGVcIixcbiAgXCJ3aW5kb3dcIixcbiAgXCJkb2N1bWVudFwiLFxuICBcImxvY2FsU3RvcmFnZVwiLFxuICBcIm1vZHVsZVwiLFxuICBcImdsb2JhbFwiIC8vIE5vZGUuanNcbl07XG5cbmNvbnN0IEJVSUxUX0lOUyA9IFtdLmNvbmNhdChcbiAgQlVJTFRfSU5fR0xPQkFMUyxcbiAgQlVJTFRfSU5fVkFSSUFCTEVTLFxuICBUWVBFUyxcbiAgRVJST1JfVFlQRVNcbik7XG5cbi8qXG5MYW5ndWFnZTogTGl2ZVNjcmlwdFxuQXV0aG9yOiBUYW5lbGkgVmF0YW5lbiA8dGFuZWxpLnZhdGFuZW5AZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBKZW4gRXZlcnMtQ29ydmluYSA8amVuQHNldnZpZS5uZXQ+XG5PcmlnaW46IGNvZmZlZXNjcmlwdC5qc1xuRGVzY3JpcHRpb246IExpdmVTY3JpcHQgaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IHRyYW5zY29tcGlsZXMgdG8gSmF2YVNjcmlwdC4gRm9yIGluZm8gYWJvdXQgbGFuZ3VhZ2Ugc2VlIGh0dHA6Ly9saXZlc2NyaXB0Lm5ldC9cbldlYnNpdGU6IGh0dHBzOi8vbGl2ZXNjcmlwdC5uZXRcbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbmZ1bmN0aW9uIGxpdmVzY3JpcHQoaGxqcykge1xuICBjb25zdCBMSVZFU0NSSVBUX0JVSUxUX0lOUyA9IFtcbiAgICAnbnBtJyxcbiAgICAncHJpbnQnXG4gIF07XG4gIGNvbnN0IExJVkVTQ1JJUFRfTElURVJBTFMgPSBbXG4gICAgJ3llcycsXG4gICAgJ25vJyxcbiAgICAnb24nLFxuICAgICdvZmYnLFxuICAgICdpdCcsXG4gICAgJ3RoYXQnLFxuICAgICd2b2lkJ1xuICBdO1xuICBjb25zdCBMSVZFU0NSSVBUX0tFWVdPUkRTID0gW1xuICAgICd0aGVuJyxcbiAgICAndW5sZXNzJyxcbiAgICAndW50aWwnLFxuICAgICdsb29wJyxcbiAgICAnb2YnLFxuICAgICdieScsXG4gICAgJ3doZW4nLFxuICAgICdhbmQnLFxuICAgICdvcicsXG4gICAgJ2lzJyxcbiAgICAnaXNudCcsXG4gICAgJ25vdCcsXG4gICAgJ2l0JyxcbiAgICAndGhhdCcsXG4gICAgJ290aGVyd2lzZScsXG4gICAgJ2Zyb20nLFxuICAgICd0bycsXG4gICAgJ3RpbCcsXG4gICAgJ2ZhbGx0aHJvdWdoJyxcbiAgICAnY2FzZScsXG4gICAgJ2VudW0nLFxuICAgICduYXRpdmUnLFxuICAgICdsaXN0JyxcbiAgICAnbWFwJyxcbiAgICAnX19oYXNQcm9wJyxcbiAgICAnX19leHRlbmRzJyxcbiAgICAnX19zbGljZScsXG4gICAgJ19fYmluZCcsXG4gICAgJ19faW5kZXhPZidcbiAgXTtcbiAgY29uc3QgS0VZV09SRFMkMSA9IHtcbiAgICBrZXl3b3JkOiBLRVlXT1JEUy5jb25jYXQoTElWRVNDUklQVF9LRVlXT1JEUyksXG4gICAgbGl0ZXJhbDogTElURVJBTFMuY29uY2F0KExJVkVTQ1JJUFRfTElURVJBTFMpLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlMuY29uY2F0KExJVkVTQ1JJUFRfQlVJTFRfSU5TKVxuICB9O1xuICBjb25zdCBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dKD86LVswLTlBLVphLXokX118WzAtOUEtWmEteiRfXSkqJztcbiAgY29uc3QgVElUTEUgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgYmVnaW46IEpTX0lERU5UX1JFXG4gIH0pO1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxXG4gIH07XG4gIGNvbnN0IFNVQlNUX1NJTVBMRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jW0EtWmEteiRfXS8sXG4gICAgZW5kOiAvKD86LVswLTlBLVphLXokX118WzAtOUEtWmEteiRfXSkqLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMVxuICB9O1xuICBjb25zdCBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcoXFxcXGIwW3hYXVthLWZBLUYwLTlfXSspfChcXFxcYlxcXFxkKFxcXFxkfF9cXFxcZCkqKFxcXFwuKFxcXFxkKFxcXFxkfF9cXFxcZCkqKT8pPyhfKltlRV0oWy0rXVxcXFxkKF9cXFxcZHxcXFxcZCkqKT8pP1tfYS16XSopJyxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6ICcoXFxcXHMqLyk/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9IC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC8nJycvLFxuICAgICAgICAgIGVuZDogLycnJy8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICAgIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIlwiXCIvLFxuICAgICAgICAgIGVuZDogL1wiXCJcIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICAgIFNVQlNULFxuICAgICAgICAgICAgU1VCU1RfU0lNUExFXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICBTVUJTVCxcbiAgICAgICAgICAgIFNVQlNUX1NJTVBMRVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXFxcXC8sXG4gICAgICAgICAgZW5kOiAvKFxcc3wkKS8sXG4gICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLy8nLFxuICAgICAgICAgIGVuZDogJy8vW2dpbV0qJyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgU1VCU1QsXG4gICAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLy8gcmVnZXggY2FuJ3Qgc3RhcnQgd2l0aCBzcGFjZSB0byBwYXJzZSB4IC8gMiAvIDMgYXMgdHdvIGRpdmlzaW9uc1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggKiwgYW5kIGl0IHN1cHBvcnRzIGFuIFwiaWxsZWdhbFwiIGluIHRoZSBtYWluIG1vZGVcbiAgICAgICAgICBiZWdpbjogL1xcLyg/IVsgKl0pKFxcXFwufFteXFxcXFxcbl0pKj9cXC9bZ2ltXSooPz1cXFcpL1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogJ0AnICsgSlNfSURFTlRfUkVcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnYGAnLFxuICAgICAgZW5kOiAnYGAnLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnamF2YXNjcmlwdCdcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgLyogV2UgbmVlZCBhbm90aGVyIGNvbnRhaW5lZCBuYW1lbGVzcyBtb2RlIHRvIG5vdCBoYXZlIGV2ZXJ5IG5lc3RlZFxuICAgIHBhaXIgb2YgcGFyZW5zIHRvIGJlIGNhbGxlZCBcInBhcmFtc1wiICovXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgU1lNQk9MUyA9IHtcbiAgICBiZWdpbjogJygjPT58PT58XFxcXHw+PnwtPy0+fCEtPiknXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTGl2ZVNjcmlwdCcsXG4gICAgYWxpYXNlczogWydscyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OUy5jb25jYXQoW1xuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcL1xcXFwqJywgJ1xcXFwqXFxcXC8nKSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBTWU1CT0xTLCAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEUsXG4gICAgICAgICAgUEFSQU1TXG4gICAgICAgIF0sXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBKU19JREVOVF9SRSArICdcXFxccyooPzo9fDo9KVxcXFxzKik/KFxcXFwoLipcXFxcKVxcXFxzKik/XFxcXEItPlxcXFwqPycsXG4gICAgICAgICAgICBlbmQ6ICctPlxcXFwqPydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBKU19JREVOVF9SRSArICdcXFxccyooPzo9fDo9KVxcXFxzKik/IT8oXFxcXCguKlxcXFwpXFxcXHMqKT9cXFxcQlstfl17MSwyfT5cXFxcKj8nLFxuICAgICAgICAgICAgZW5kOiAnWy1+XXsxLDJ9PlxcXFwqPydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBKU19JREVOVF9SRSArICdcXFxccyooPzo9fDo9KVxcXFxzKik/KFxcXFwoLipcXFxcKVxcXFxzKik/XFxcXEIhP1stfl17MSwyfT5cXFxcKj8nLFxuICAgICAgICAgICAgZW5kOiAnIT9bLX5dezEsMn0+XFxcXCo/J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgaWxsZWdhbDogL1s6PVwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMnLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbVElUTEVdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBUSVRMRVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogSlNfSURFTlRfUkUgKyAnOicsXG4gICAgICAgIGVuZDogJzonLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpdmVzY3JpcHQ7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IExMVk0gSVJcbkF1dGhvcjogTWljaGFlbCBSb2RsZXIgPGNvbnRhY3RAZjBya2kuYXQ+XG5EZXNjcmlwdGlvbjogbGFuZ3VhZ2UgdXNlZCBhcyBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gaW4gdGhlIExMVk0gY29tcGlsZXIgZnJhbWV3b3JrXG5XZWJzaXRlOiBodHRwczovL2xsdm0ub3JnL2RvY3MvTGFuZ1JlZi5odG1sXG5DYXRlZ29yeTogYXNzZW1ibGVyXG5BdWRpdDogMjAyMFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGxsdm0oaGxqcykge1xuICBjb25zdCBJREVOVF9SRSA9IC8oWy1hLXpBLVokLl9dW1xcdyQuLV0qKS87XG4gIGNvbnN0IFRZUEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46IC9cXGJpXFxkKyg/PVxcc3xcXGIpL1xuICB9O1xuICBjb25zdCBPUEVSQVRPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdvcGVyYXRvcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiAvPS9cbiAgfTtcbiAgY29uc3QgUFVOQ1RVQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAncHVuY3R1YXRpb24nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogLywvXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHsgYmVnaW46IC8wW3hYXVthLWZBLUYwLTldKy8gfSxcbiAgICAgICAgeyBiZWdpbjogLy0/XFxkKyg/OlsuXVxcZCspPyg/OltlRV1bLStdP1xcZCsoPzpbLl1cXGQrKT8pPy8gfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IExBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgICAgeyBiZWdpbjogL15cXHMqW2Etel0rOi8gfSwgLy8gbGFiZWxzXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiBjb25jYXQoLyUvLCBJREVOVF9SRSkgfSxcbiAgICAgIHsgYmVnaW46IC8lXFxkKy8gfSxcbiAgICAgIHsgYmVnaW46IC8jXFxkKy8gfSxcbiAgICBdXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogY29uY2F0KC9ALywgSURFTlRfUkUpIH0sXG4gICAgICB7IGJlZ2luOiAvQFxcZCsvIH0sXG4gICAgICB7IGJlZ2luOiBjb25jYXQoLyEvLCBJREVOVF9SRSkgfSxcbiAgICAgIHsgYmVnaW46IGNvbmNhdCgvIVxcZCsvLCBJREVOVF9SRSkgfSxcbiAgICAgIC8vIGh0dHBzOi8vbGx2bS5vcmcvZG9jcy9MYW5nUmVmLmh0bWwjbmFtZWRtZXRhZGF0YXN0cnVjdHVyZVxuICAgICAgLy8gb2J2aW91c2x5IGEgc2luZ2xlIGRpZ2l0IGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhpcyBmYXNoaW9uXG4gICAgICB7IGJlZ2luOiAvIVxcZCsvIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTExWTSBJUicsXG4gICAgLy8gVE9ETzogc3BsaXQgaW50byBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZiBrZXl3b3Jkc1xuICAgIGtleXdvcmRzOlxuICAgICAgJ2JlZ2luIGVuZCB0cnVlIGZhbHNlIGRlY2xhcmUgZGVmaW5lIGdsb2JhbCAnICtcbiAgICAgICdjb25zdGFudCBwcml2YXRlIGxpbmtlcl9wcml2YXRlIGludGVybmFsICcgK1xuICAgICAgJ2F2YWlsYWJsZV9leHRlcm5hbGx5IGxpbmtvbmNlIGxpbmtvbmNlX29kciB3ZWFrICcgK1xuICAgICAgJ3dlYWtfb2RyIGFwcGVuZGluZyBkbGxpbXBvcnQgZGxsZXhwb3J0IGNvbW1vbiAnICtcbiAgICAgICdkZWZhdWx0IGhpZGRlbiBwcm90ZWN0ZWQgZXh0ZXJuX3dlYWsgZXh0ZXJuYWwgJyArXG4gICAgICAndGhyZWFkX2xvY2FsIHplcm9pbml0aWFsaXplciB1bmRlZiBudWxsIHRvIHRhaWwgJyArXG4gICAgICAndGFyZ2V0IHRyaXBsZSBkYXRhbGF5b3V0IHZvbGF0aWxlIG51dyBuc3cgbm5hbiAnICtcbiAgICAgICduaW5mIG5zeiBhcmNwIGZhc3QgZXhhY3QgaW5ib3VuZHMgYWxpZ24gJyArXG4gICAgICAnYWRkcnNwYWNlIHNlY3Rpb24gYWxpYXMgbW9kdWxlIGFzbSBzaWRlZWZmZWN0ICcgK1xuICAgICAgJ2djIGRiZyBsaW5rZXJfcHJpdmF0ZV93ZWFrIGF0dHJpYnV0ZXMgYmxvY2thZGRyZXNzICcgK1xuICAgICAgJ2luaXRpYWxleGVjIGxvY2FsZHluYW1pYyBsb2NhbGV4ZWMgcHJlZml4IHVubmFtZWRfYWRkciAnICtcbiAgICAgICdjY2MgZmFzdGNjIGNvbGRjYyB4ODZfc3RkY2FsbGNjIHg4Nl9mYXN0Y2FsbGNjICcgK1xuICAgICAgJ2FybV9hcGNzY2MgYXJtX2FhcGNzY2MgYXJtX2FhcGNzX3ZmcGNjIHB0eF9kZXZpY2UgJyArXG4gICAgICAncHR4X2tlcm5lbCBpbnRlbF9vY2xfYmljYyBtc3A0MzBfaW50cmNjIHNwaXJfZnVuYyAnICtcbiAgICAgICdzcGlyX2tlcm5lbCB4ODZfNjRfc3lzdmNjIHg4Nl82NF93aW42NGNjIHg4Nl90aGlzY2FsbGNjICcgK1xuICAgICAgJ2NjIGMgc2lnbmV4dCB6ZXJvZXh0IGlucmVnIHNyZXQgbm91bndpbmQgJyArXG4gICAgICAnbm9yZXR1cm4gbm9hbGlhcyBub2NhcHR1cmUgYnl2YWwgbmVzdCByZWFkbm9uZSAnICtcbiAgICAgICdyZWFkb25seSBpbmxpbmVoaW50IG5vaW5saW5lIGFsd2F5c2lubGluZSBvcHRzaXplIHNzcCAnICtcbiAgICAgICdzc3ByZXEgbm9yZWR6b25lIG5vaW1wbGljaXRmbG9hdCBuYWtlZCBidWlsdGluIGNvbGQgJyArXG4gICAgICAnbm9idWlsdGluIG5vZHVwbGljYXRlIG5vbmxhenliaW5kIG9wdG5vbmUgcmV0dXJuc190d2ljZSAnICtcbiAgICAgICdzYW5pdGl6ZV9hZGRyZXNzIHNhbml0aXplX21lbW9yeSBzYW5pdGl6ZV90aHJlYWQgc3Nwc3Ryb25nICcgK1xuICAgICAgJ3V3dGFibGUgcmV0dXJuZWQgdHlwZSBvcGFxdWUgZXEgbmUgc2x0IHNndCAnICtcbiAgICAgICdzbGUgc2dlIHVsdCB1Z3QgdWxlIHVnZSBvZXEgb25lIG9sdCBvZ3QgJyArXG4gICAgICAnb2xlIG9nZSBvcmQgdW5vIHVlcSB1bmUgeCBhY3FfcmVsIGFjcXVpcmUgJyArXG4gICAgICAnYWxpZ25zdGFjayBhdG9taWMgY2F0Y2ggY2xlYW51cCBmaWx0ZXIgaW50ZWxkaWFsZWN0ICcgK1xuICAgICAgJ21heCBtaW4gbW9ub3RvbmljIG5hbmQgcGVyc29uYWxpdHkgcmVsZWFzZSBzZXFfY3N0ICcgK1xuICAgICAgJ3NpbmdsZXRocmVhZCB1bWF4IHVtaW4gdW5vcmRlcmVkIHhjaGcgYWRkIGZhZGQgJyArXG4gICAgICAnc3ViIGZzdWIgbXVsIGZtdWwgdWRpdiBzZGl2IGZkaXYgdXJlbSBzcmVtICcgK1xuICAgICAgJ2ZyZW0gc2hsIGxzaHIgYXNociBhbmQgb3IgeG9yIGljbXAgZmNtcCAnICtcbiAgICAgICdwaGkgY2FsbCB0cnVuYyB6ZXh0IHNleHQgZnB0cnVuYyBmcGV4dCB1aXRvZnAgJyArXG4gICAgICAnc2l0b2ZwIGZwdG91aSBmcHRvc2kgaW50dG9wdHIgcHRydG9pbnQgYml0Y2FzdCAnICtcbiAgICAgICdhZGRyc3BhY2VjYXN0IHNlbGVjdCB2YV9hcmcgcmV0IGJyIHN3aXRjaCBpbnZva2UgJyArXG4gICAgICAndW53aW5kIHVucmVhY2hhYmxlIGluZGlyZWN0YnIgbGFuZGluZ3BhZCByZXN1bWUgJyArXG4gICAgICAnbWFsbG9jIGFsbG9jYSBmcmVlIGxvYWQgc3RvcmUgZ2V0ZWxlbWVudHB0ciAnICtcbiAgICAgICdleHRyYWN0ZWxlbWVudCBpbnNlcnRlbGVtZW50IHNodWZmbGV2ZWN0b3IgZ2V0cmVzdWx0ICcgK1xuICAgICAgJ2V4dHJhY3R2YWx1ZSBpbnNlcnR2YWx1ZSBhdG9taWNybXcgY21weGNoZyBmZW5jZSAnICtcbiAgICAgICdhcmdtZW1vbmx5IGRvdWJsZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFRZUEUsXG4gICAgICAvLyB0aGlzIG1hdGNoZXMgXCJlbXB0eSBjb21tZW50c1wiLi4uXG4gICAgICAvLyAuLi5iZWNhdXNlIGl0J3MgZmFyIG1vcmUgbGlrZWx5IHRoaXMgaXMgYSBzdGF0ZW1lbnQgdGVybWluYXRvciBpblxuICAgICAgLy8gYW5vdGhlciBsYW5ndWFnZSB0aGFuIGFuIGFjdHVhbCBjb21tZW50XG4gICAgICBobGpzLkNPTU1FTlQoLztcXHMqJC8sIG51bGwsIHsgcmVsZXZhbmNlOiAwIH0pLFxuICAgICAgaGxqcy5DT01NRU5UKC87LywgLyQvKSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gRG91YmxlLXF1b3RlZCBzdHJpbmdcbiAgICAgICAgICB7IGJlZ2luOiAvXCIvLCBlbmQ6IC9bXlxcXFxdXCIvIH0sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBGVU5DVElPTixcbiAgICAgIFBVTkNUVUFUSU9OLFxuICAgICAgT1BFUkFUT1IsXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIExBQkVMLFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxsdm07XG4iLAogICAgIi8qXG5MYW5ndWFnZTogTFNMIChMaW5kZW4gU2NyaXB0aW5nIExhbmd1YWdlKVxuRGVzY3JpcHRpb246IFRoZSBMaW5kZW4gU2NyaXB0aW5nIExhbmd1YWdlIGlzIHVzZWQgaW4gU2Vjb25kIExpZmUgYnkgTGluZGVuIExhYnMuXG5BdXRob3I6IEJ1aWxkZXIncyBCcmV3ZXJ5IDxidWlsZGVyc2JyZXdlcnlAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cDovL3dpa2kuc2Vjb25kbGlmZS5jb20vd2lraS9MU0xfUG9ydGFsXG5DYXRlZ29yeTogc2NyaXB0aW5nXG4qL1xuXG5mdW5jdGlvbiBsc2woaGxqcykge1xuXG4gICAgdmFyIExTTF9TVFJJTkdfRVNDQVBFX0NIQVJTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgICAgIGJlZ2luOiAvXFxcXFt0blwiXFxcXF0vXG4gICAgfTtcblxuICAgIHZhciBMU0xfU1RSSU5HUyA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIExTTF9TVFJJTkdfRVNDQVBFX0NIQVJTXG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgdmFyIExTTF9OVU1CRVJTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICByZWxldmFuY2U6MCxcbiAgICAgICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkVcbiAgICB9O1xuXG4gICAgdmFyIExTTF9DT05TVEFOVFMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoUEl8VFdPX1BJfFBJX0JZX1RXT3xERUdfVE9fUkFEfFJBRF9UT19ERUd8U1FSVDIpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoWFBfRVJST1JfKEVYUEVSSUVOQ0VTX0RJU0FCTEVEfEVYUEVSSUVOQ0VfKERJU0FCTEVEfFNVU1BFTkRFRCl8SU5WQUxJRF8oRVhQRVJJRU5DRXxQQVJBTUVURVJTKXxLRVlfTk9UX0ZPVU5EfE1BVFVSSVRZX0VYQ0VFREVEfE5PTkV8Tk9UXyhGT1VORHxQRVJNSVRURUQoX0xBTkQpPyl8Tk9fRVhQRVJJRU5DRXxRVU9UQV9FWENFRURFRHxSRVRSWV9VUERBVEV8U1RPUkFHRV9FWENFUFRJT058U1RPUkVfRElTQUJMRUR8VEhST1RUTEVEfFVOS05PV05fRVJST1IpfEpTT05fQVBQRU5EfFNUQVRVU18oUEhZU0lDU3xST1RBVEVfW1hZWl18UEhBTlRPTXxTQU5EQk9YfEJMT0NLX0dSQUIoX09CSkVDVCk/fChESUV8UkVUVVJOKV9BVF9FREdFfENBU1RfU0hBRE9XU3xPS3xNQUxGT1JNRURfUEFSQU1TfFRZUEVfTUlTTUFUQ0h8Qk9VTkRTX0VSUk9SfE5PVF8oRk9VTkR8U1VQUE9SVEVEKXxJTlRFUk5BTF9FUlJPUnxXSElURUxJU1RfRkFJTEVEKXxBR0VOVChfKEJZXyhMRUdBQ1lffFVTRVIpTkFNRXxGTFlJTkd8QVRUQUNITUVOVFN8U0NSSVBURUR8TU9VU0VMT09LfFNJVFRJTkd8T05fT0JKRUNUfEFXQVl8V0FMS0lOR3xJTl9BSVJ8VFlQSU5HfENST1VDSElOR3xCVVNZfEFMV0FZU19SVU58QVVUT1BJTE9UfExJU1RfKFBBUkNFTChfT1dORVIpP3xSRUdJT04pKSk/fENBTUVSQV8oUElUQ0h8RElTVEFOQ0V8QkVISU5ETkVTU18oQU5HTEV8TEFHKXwoRk9DVVN8UE9TSVRJT04pKF8oVEhSRVNIT0xEfExPQ0tFRHxMQUcpKT98Rk9DVVNfT0ZGU0VUfEFDVElWRSl8QU5JTV9PTnxMT09QfFJFVkVSU0V8UElOR19QT05HfFNNT09USHxST1RBVEV8U0NBTEV8QUxMX1NJREVTfExJTktfKFJPT1R8U0VUfEFMTF8oT1RIRVJTfENISUxEUkVOKXxUSElTKXxBQ1RJVkV8UEFTUyhJVkV8XyhBTFdBWVN8SUZfTk9UX0hBTkRMRUR8TkVWRVIpKXxTQ1JJUFRFRHxDT05UUk9MXyhGV0R8QkFDS3woUk9UXyk/KExFRlR8UklHSFQpfFVQfERPV058KE1MXyk/TEJVVFRPTil8UEVSTUlTU0lPTl8oUkVUVVJOX09CSkVDVFN8REVCSVR8T1ZFUlJJREVfQU5JTUFUSU9OU3xTSUxFTlRfRVNUQVRFX01BTkFHRU1FTlR8VEFLRV9DT05UUk9MU3xUUklHR0VSX0FOSU1BVElPTnxBVFRBQ0h8Q0hBTkdFX0xJTktTfChDT05UUk9MfFRSQUNLKV9DQU1FUkF8VEVMRVBPUlQpfElOVkVOVE9SWV8oVEVYVFVSRXxTT1VORHxPQkpFQ1R8U0NSSVBUfExBTkRNQVJLfENMT1RISU5HfE5PVEVDQVJEfEJPRFlQQVJUfEFOSU1BVElPTnxHRVNUVVJFfEFMTHxOT05FKXxDSEFOR0VEXyhJTlZFTlRPUll8Q09MT1J8U0hBUEV8U0NBTEV8VEVYVFVSRXxMSU5LfEFMTE9XRURfRFJPUHxPV05FUnxSRUdJT04oX1NUQVJUKT98VEVMRVBPUlR8TUVESUEpfE9CSkVDVF8oQ0xJQ0tfQUNUSU9OfEhPVkVSX0hFSUdIVHxMQVNUX09XTkVSX0lEfChQSFlTSUNTfFNFUlZFUnxTVFJFQU1JTkcpX0NPU1R8VU5LTk9XTl9ERVRBSUx8Q0hBUkFDVEVSX1RJTUV8UEhBTlRPTXxQSFlTSUNTfFRFTVBfKEFUVEFDSEVEfE9OX1JFWil8TkFNRXxERVNDfFBPU3xQUklNXyhDT1VOVHxFUVVJVkFMRU5DRSl8UkVUVVJOXyhQQVJDRUwoX09XTkVSKT98UkVHSU9OKXxSRVpaRVJfS0VZfFJPTz9UfFZFTE9DSVRZfE9NRUdBfE9XTkVSfEdST1VQKF9UQUcpP3xDUkVBVE9SfEFUVEFDSEVEXyhQT0lOVHxTTE9UU19BVkFJTEFCTEUpfFJFTkRFUl9XRUlHSFR8KEJPRFlfU0hBUEV8UEFUSEZJTkRJTkcpX1RZUEV8KFJVTk5JTkd8VE9UQUwpX1NDUklQVF9DT1VOVHxUT1RBTF9JTlZFTlRPUllfQ09VTlR8U0NSSVBUXyhNRU1PUll8VElNRSkpfFRZUEVfKElOVEVHRVJ8RkxPQVR8U1RSSU5HfEtFWXxWRUNUT1J8Uk9UQVRJT058SU5WQUxJRCl8KERFQlVHfFBVQkxJQylfQ0hBTk5FTHxBVFRBQ0hfKEFWQVRBUl9DRU5URVJ8Q0hFU1R8SEVBRHxCQUNLfFBFTFZJU3xNT1VUSHxDSElOfE5FQ0t8Tk9TRXxCRUxMWXxbTFJdKFNIT1VMREVSfEhBTkR8Rk9PVHxFQVJ8RVlFfFtVTF0oQVJNfExFRyl8SElQKXwoTEVGVHxSSUdIVClfUEVDfEhVRF8oQ0VOVEVSX1sxMl18VE9QXyhSSUdIVHxDRU5URVJ8TEVGVCl8Qk9UVE9NKF8oUklHSFR8TEVGVCkpPyl8W0xSXUhBTkRfUklORzF8VEFJTF8oQkFTRXxUSVApfFtMUl1XSU5HfEZBQ0VfKEpBV3xbTFJdRUFSfFtMUl1FWUV8VE9VTkdFKXxHUk9JTnxISU5EX1tMUl1GT09UKXxMQU5EXyhMRVZFTHxSQUlTRXxMT1dFUnxTTU9PVEh8Tk9JU0V8UkVWRVJUKXxEQVRBXyhPTkxJTkV8TkFNRXxCT1JOfFNJTV8oUE9TfFNUQVRVU3xSQVRJTkcpfFBBWUlORk8pfFBBWU1FTlRfSU5GT18oT05fRklMRXxVU0VEKXxSRU1PVEVfREFUQV8oQ0hBTk5FTHxSRVFVRVNUfFJFUExZKXxQU1lTXyhQQVJUXyhCRl8oWkVST3xPTkUoX01JTlVTXyhERVNUX0NPTE9SfFNPVVJDRV8oQUxQSEF8Q09MT1IpKSk/fERFU1RfQ09MT1J8U09VUkNFXyhBTFBIQXxDT0xPUikpfEJMRU5EX0ZVTkNfKERFU1R8U09VUkNFKXxGTEFHU3woU1RBUlR8RU5EKV8oQ09MT1J8QUxQSEF8U0NBTEV8R0xPVyl8TUFYX0FHRXwoUklCQk9OfFdJTkR8SU5URVJQXyhDT0xPUnxTQ0FMRSl8Qk9VTkNFfEZPTExPV18oU1JDfFZFTE9DSVRZKXxUQVJHRVRfKFBPU3xMSU5FQVIpfEVNSVNTSVZFKV9NQVNLKXxTUkNfKE1BWF9BR0V8UEFUVEVSTnxBTkdMRV8oQkVHSU58RU5EKXxCVVJTVF8oUkFURXxQQVJUX0NPVU5UfFJBRElVU3xTUEVFRF8oTUlOfE1BWCkpfEFDQ0VMfFRFWFRVUkV8VEFSR0VUX0tFWXxPTUVHQXxQQVRURVJOXyhEUk9QfEVYUExPREV8QU5HTEUoX0NPTkUoX0VNUFRZKT8pPykpKXxWRUhJQ0xFXyhSRUZFUkVOQ0VfRlJBTUV8VFlQRV8oTk9ORXxTTEVEfENBUnxCT0FUfEFJUlBMQU5FfEJBTExPT04pfChMSU5FQVJ8QU5HVUxBUilfKEZSSUNUSU9OX1RJTUVTQ0FMRXxNT1RPUl9ESVJFQ1RJT04pfExJTkVBUl9NT1RPUl9PRkZTRVR8SE9WRVJfKEhFSUdIVHxFRkZJQ0lFTkNZfFRJTUVTQ0FMRSl8QlVPWUFOQ1l8KExJTkVBUnxBTkdVTEFSKV8oREVGTEVDVElPTl8oRUZGSUNJRU5DWXxUSU1FU0NBTEUpfE1PVE9SXyhERUNBWV8pP1RJTUVTQ0FMRSl8VkVSVElDQUxfQVRUUkFDVElPTl8oRUZGSUNJRU5DWXxUSU1FU0NBTEUpfEJBTktJTkdfKEVGRklDSUVOQ1l8TUlYfFRJTUVTQ0FMRSl8RkxBR18oTk9fREVGTEVDVElPTl9VUHxMSU1JVF8oUk9MTF9PTkxZfE1PVE9SX1VQKXxIT1ZFUl8oKFdBVEVSfFRFUlJBSU58VVApX09OTFl8R0xPQkFMX0hFSUdIVCl8TU9VU0VMT09LXyhTVEVFUnxCQU5LKXxDQU1FUkFfREVDT1VQTEVEKSl8UFJJTV8oQUxMT1dfVU5TSVR8QUxQSEFfTU9ERShfKEJMRU5EfEVNSVNTSVZFfE1BU0t8Tk9ORSkpP3xOT1JNQUx8U1BFQ1VMQVJ8VFlQRShfKEJPWHxDWUxJTkRFUnxQUklTTXxTUEhFUkV8VE9SVVN8VFVCRXxSSU5HfFNDVUxQVCkpP3xIT0xFXyhERUZBVUxUfENJUkNMRXxTUVVBUkV8VFJJQU5HTEUpfE1BVEVSSUFMKF8oU1RPTkV8TUVUQUx8R0xBU1N8V09PRHxGTEVTSHxQTEFTVElDfFJVQkJFUikpP3xTSElOWV8oTk9ORXxMT1d8TUVESVVNfEhJR0gpfEJVTVBfKE5PTkV8QlJJR0hUfERBUkt8V09PRHxCQVJLfEJSSUNLU3xDSEVDS0VSfENPTkNSRVRFfFRJTEV8U1RPTkV8RElTS1N8R1JBVkVMfEJMT0JTfFNJRElOR3xMQVJHRVRJTEV8U1RVQ0NPfFNVQ1RJT058V0VBVkUpfFRFWEdFTl8oREVGQVVMVHxQTEFOQVIpfFNDUklQVEVEX1NJVF9PTkxZfFNDVUxQVF8oVFlQRV8oU1BIRVJFfFRPUlVTfFBMQU5FfENZTElOREVSfE1BU0spfEZMQUdfKE1JUlJPUnxJTlZFUlQpKXxQSFlTSUNTKF8oU0hBUEVfKENPTlZFWHxOT05FfFBSSU18VFlQRSkpKT98KFBPU3xST1QpX0xPQ0FMfFNMSUNFfFRFWFR8RkxFWElCTEV8UE9JTlRfTElHSFR8VEVNUF9PTl9SRVp8UEhBTlRPTXxQT1NJVElPTnxTSVRfVEFSR0VUfFNJWkV8Uk9UQVRJT058VEVYVFVSRXxOQU1FfE9NRUdBfERFU0N8TElOS19UQVJHRVR8Q09MT1J8QlVNUF9TSElOWXxGVUxMQlJJR0hUfFRFWEdFTnxHTE9XfE1FRElBXyhBTFRfSU1BR0VfRU5BQkxFfENPTlRST0xTfChDVVJSRU5UfEhPTUUpX1VSTHxBVVRPXyhMT09QfFBMQVl8U0NBTEV8Wk9PTSl8RklSU1RfQ0xJQ0tfSU5URVJBQ1R8KFdJRFRIfEhFSUdIVClfUElYRUxTfFdISVRFTElTVChfRU5BQkxFKT98UEVSTVNfKElOVEVSQUNUfENPTlRST0wpfFBBUkFNX01BWHxDT05UUk9MU18oU1RBTkRBUkR8TUlOSSl8UEVSTV8oTk9ORXxPV05FUnxHUk9VUHxBTllPTkUpfE1BWF8oVVJMX0xFTkdUSHxXSElURUxJU1RfKFNJWkV8Q09VTlQpfChXSURUSHxIRUlHSFQpX1BJWEVMUykpKXxNQVNLXyhCQVNFfE9XTkVSfEdST1VQfEVWRVJZT05FfE5FWFQpfFBFUk1fKFRSQU5TRkVSfE1PRElGWXxDT1BZfE1PVkV8QUxMKXxQQVJDRUxfKE1FRElBX0NPTU1BTkRfKFNUT1B8UEFVU0V8UExBWXxMT09QfFRFWFRVUkV8VVJMfFRJTUV8QUdFTlR8VU5MT0FEfEFVVE9fQUxJR058VFlQRXxTSVpFfERFU0N8TE9PUF9TRVQpfEZMQUdfKEFMTE9XXyhGTFl8KEdST1VQXyk/U0NSSVBUU3xMQU5ETUFSS3xURVJSQUZPUk18REFNQUdFfENSRUFURV8oR1JPVVBfKT9PQkpFQ1RTKXxVU0VfKEFDQ0VTU18oR1JPVVB8TElTVCl8QkFOX0xJU1R8TEFORF9QQVNTX0xJU1QpfExPQ0FMX1NPVU5EX09OTFl8UkVTVFJJQ1RfUFVTSE9CSkVDVHxBTExPV18oR1JPVVB8QUxMKV9PQkpFQ1RfRU5UUlkpfENPVU5UXyhUT1RBTHxPV05FUnxHUk9VUHxPVEhFUnxTRUxFQ1RFRHxURU1QKXxERVRBSUxTXyhOQU1FfERFU0N8T1dORVJ8R1JPVVB8QVJFQXxJRHxTRUVfQVZBVEFSUykpfExJU1RfU1RBVF8oTUFYfE1JTnxNRUFOfE1FRElBTnxTVERfREVWfFNVTShfU1FVQVJFUyk/fE5VTV9DT1VOVHxHRU9NRVRSSUNfTUVBTnxSQU5HRSl8UEFZXyhISURFfERFRkFVTFQpfFJFR0lPTl9GTEFHXyhBTExPV19EQU1BR0V8RklYRURfU1VOfEJMT0NLX1RFUlJBRk9STXxTQU5EQk9YfERJU0FCTEVfKENPTExJU0lPTlN8UEhZU0lDUyl8QkxPQ0tfRkxZfEFMTE9XX0RJUkVDVF9URUxFUE9SVHxSRVNUUklDVF9QVVNIT0JKRUNUKXxIVFRQXyhNRVRIT0R8TUlNRVRZUEV8Qk9EWV8oTUFYTEVOR1RIfFRSVU5DQVRFRCl8Q1VTVE9NX0hFQURFUnxQUkFHTUFfTk9fQ0FDSEV8VkVSQk9TRV9USFJPVFRMRXxWRVJJRllfQ0VSVCl8U0lUXyhJTlZBTElEXyhBR0VOVHxMSU5LX09CSkVDVCl8Tk8oVF9FWFBFUklFTkNFfF8oQUNDRVNTfEVYUEVSSUVOQ0VfUEVSTUlTU0lPTnxTSVRfVEFSR0VUKSkpfFNUUklOR18oVFJJTShfKEhFQUR8VEFJTCkpPyl8Q0xJQ0tfQUNUSU9OXyhOT05FfFRPVUNIfFNJVHxCVVl8UEFZfE9QRU4oX01FRElBKT98UExBWXxaT09NKXxUT1VDSF9JTlZBTElEX0ZBQ0V8UFJPRklMRV8oTk9ORXxTQ1JJUFRfTUVNT1JZKXxSQ18oREFUQV9GTEFHU3xERVRFQ1RfUEhBTlRPTXxHRVRfKExJTktfTlVNfE5PUk1BTHxST09UX0tFWSl8TUFYX0hJVFN8UkVKRUNUXyhUWVBFU3xBR0VOVFN8KE5PTik/UEhZU0lDQUx8TEFORCkpfFJDRVJSXyhDQVNUX1RJTUVfRVhDRUVERUR8U0lNX1BFUkZfTE9XfFVOS05PV04pfEVTVEFURV9BQ0NFU1NfKEFMTE9XRURfKEFHRU5UfEdST1VQKV8oQUREfFJFTU9WRSl8QkFOTkVEX0FHRU5UXyhBRER8UkVNT1ZFKSl8REVOU0lUWXxGUklDVElPTnxSRVNUSVRVVElPTnxHUkFWSVRZX01VTFRJUExJRVJ8S0ZNXyhDT01NQU5EfENNRF8oUExBWXxTVE9QfFBBVVNFKXxNT0RFfEZPUldBUkR8TE9PUHxQSU5HX1BPTkd8UkVWRVJTRXxEQVRBfFJPVEFUSU9OfFRSQU5TTEFUSU9OKXxFUlJfKEdFTkVSSUN8UEFSQ0VMX1BFUk1JU1NJT05TfE1BTEZPUk1FRF9QQVJBTVN8UlVOVElNRV9QRVJNSVNTSU9OU3xUSFJPVFRMRUQpfENIQVJBQ1RFUl8oQ01EXygoU01PT1RIXyk/U1RPUHxKVU1QKXxERVNJUkVEXyhUVVJOXyk/U1BFRUR8UkFESVVTfFNUQVlfV0lUSElOX1BBUkNFTHxMRU5HVEh8T1JJRU5UQVRJT058QUNDT1VOVF9GT1JfU0tJUFBFRF9GUkFNRVN8QVZPSURBTkNFX01PREV8VFlQRShfKFtBQkNEXXxOT05FKSk/fE1BWF8oREVDRUx8VFVSTl9SQURJVVN8KEFDQ0VMfFNQRUVEKSkpfFBVUlNVSVRfKE9GRlNFVHxGVVpaX0ZBQ1RPUnxHT0FMX1RPTEVSQU5DRXxJTlRFUkNFUFQpfFJFUVVJUkVfTElORV9PRl9TSUdIVHxGT1JDRV9ESVJFQ1RfUEFUSHxWRVJUSUNBTHxIT1JJWk9OVEFMfEFWT0lEXyhDSEFSQUNURVJTfERZTkFNSUNfT0JTVEFDTEVTfE5PTkUpfFBVXyhFVkFERV8oSElEREVOfFNQT1RURUQpfEZBSUxVUkVfKERZTkFNSUNfUEFUSEZJTkRJTkdfRElTQUJMRUR8SU5WQUxJRF8oR09BTHxTVEFSVCl8Tk9fKE5BVk1FU0h8VkFMSURfREVTVElOQVRJT04pfE9USEVSfFRBUkdFVF9HT05FfChQQVJDRUxfKT9VTlJFQUNIQUJMRSl8KEdPQUx8U0xPV0RPV05fRElTVEFOQ0UpX1JFQUNIRUQpfFRSQVZFUlNBTF9UWVBFKF8oRkFTVHxOT05FfFNMT1cpKT98Q09OVEVOVF9UWVBFXyhBVE9NfEZPUk18SFRNTHxKU09OfExMU0R8UlNTfFRFWFR8WEhUTUx8WE1MKXxHQ05QXyhSQURJVVN8U1RBVElDKXwoUEFUUk9MfFdBTkRFUilfUEFVU0VfQVRfV0FZUE9JTlRTfE9QVF8oQVZBVEFSfENIQVJBQ1RFUnxFWENMVVNJT05fVk9MVU1FfExFR0FDWV9MSU5LU0VUfE1BVEVSSUFMX1ZPTFVNRXxPVEhFUnxTVEFUSUNfT0JTVEFDTEV8V0FMS0FCTEUpfFNJTV9TVEFUX1BDVF9DSEFSU19TVEVQUEVEKVxcXFxiJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKEZBTFNFfFRSVUUpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoWkVST19ST1RBVElPTilcXFxcYidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYihFT0Z8SlNPTl8oQVJSQVl8REVMRVRFfEZBTFNFfElOVkFMSUR8TlVMTHxOVU1CRVJ8T0JKRUNUfFNUUklOR3xUUlVFKXxOVUxMX0tFWXxURVhUVVJFXyhCTEFOS3xERUZBVUxUfE1FRElBfFBMWVdPT0R8VFJBTlNQQVJFTlQpfFVSTF9SRVFVRVNUXyhHUkFOVEVEfERFTklFRCkpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoWkVST19WRUNUT1J8VE9VQ0hfSU5WQUxJRF8oVEVYQ09PUkR8VkVDVE9SKSlcXFxcYidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG5cbiAgICB2YXIgTFNMX0ZVTkNUSU9OUyA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKGxsKEFnZW50SW5FeHBlcmllbmNlfChDcmVhdGV8RGF0YVNpemV8RGVsZXRlfEtleUNvdW50fEtleXN8UmVhZHxVcGRhdGUpS2V5VmFsdWV8R2V0RXhwZXJpZW5jZShEZXRhaWxzfEVycm9yTWVzc2FnZSl8UmV0dXJuT2JqZWN0c0J5KElEfE93bmVyKXxKc29uKDJMaXN0fFtHU11ldFZhbHVlfFZhbHVlVHlwZSl8U2lufENvc3xUYW58QXRhbjJ8U3FydHxQb3d8QWJzfEZhYnN8RnJhbmR8Rmxvb3J8Q2VpbHxSb3VuZHxWZWMoTWFnfE5vcm18RGlzdCl8Um90KEJldHdlZW58MihFdWxlcnxGd2R8TGVmdHxVcCkpfChFdWxlcnxBeGVzKTJSb3R8V2hpc3BlcnwoUmVnaW9ufE93bmVyKT9TYXl8U2hvdXR8TGlzdGVuKENvbnRyb2x8UmVtb3ZlKT98U2Vuc29yKFJlcGVhdHxSZW1vdmUpP3xEZXRlY3RlZChOYW1lfEtleXxPd25lcnxUeXBlfFBvc3xWZWx8R3JhYnxSb3R8R3JvdXB8TGlua051bWJlcil8RGllfEdyb3VuZHxXaW5kfChbR1NdZXQpKEFuaW1hdGlvbk92ZXJyaWRlfE1lbW9yeUxpbWl0fFByaW1NZWRpYVBhcmFtc3xQYXJjZWxNdXNpY1VSTHxPYmplY3QoRGVzY3xOYW1lKXxQaHlzaWNzTWF0ZXJpYWx8U3RhdHVzfFNjYWxlfENvbG9yfEFscGhhfFRleHR1cmV8UG9zfFJvdHxGb3JjZXxUb3JxdWUpfFJlc2V0QW5pbWF0aW9uT3ZlcnJpZGV8KFNjYWxlfE9mZnNldHxSb3RhdGUpVGV4dHVyZXwoUm90KT9UYXJnZXQoUmVtb3ZlKT98KFN0b3ApP01vdmVUb1RhcmdldHxBcHBseShSb3RhdGlvbmFsKT9JbXB1bHNlfFNldChLZXlmcmFtZWRNb3Rpb258Q29udGVudFR5cGV8UmVnaW9uUG9zfChBbmd1bGFyKT9WZWxvY2l0eXxCdW95YW5jeXxIb3ZlckhlaWdodHxGb3JjZUFuZFRvcnF1ZXxUaW1lckV2ZW50fFNjcmlwdFN0YXRlfERhbWFnZXxUZXh0dXJlQW5pbXxTb3VuZChRdWV1ZWluZ3xSYWRpdXMpfFZlaGljbGUoVHlwZXwoRmxvYXR8VmVjdG9yfFJvdGF0aW9uKVBhcmFtKXwoVG91Y2h8U2l0KT9UZXh0fENhbWVyYShFeWV8QXQpT2Zmc2V0fFByaW1pdGl2ZVBhcmFtc3xDbGlja0FjdGlvbnxMaW5rKEFscGhhfENvbG9yfFByaW1pdGl2ZVBhcmFtcyhGYXN0KT98VGV4dHVyZShBbmltKT98Q2FtZXJhfE1lZGlhKXxSZW1vdGVTY3JpcHRBY2Nlc3NQaW58UGF5UHJpY2V8TG9jYWxSb3QpfFNjYWxlQnlGYWN0b3J8R2V0KChNYXh8TWluKVNjYWxlRmFjdG9yfENsb3Nlc3ROYXZQb2ludHxTdGF0aWNQYXRofFNpbVN0YXRzfEVudnxQcmltaXRpdmVQYXJhbXN8TGluayhQcmltaXRpdmVQYXJhbXN8TnVtYmVyKE9mU2lkZXMpP3xLZXl8TmFtZXxNZWRpYSl8SFRUUEhlYWRlcnxGcmVlVVJMc3xPYmplY3QoRGV0YWlsc3xQZXJtTWFza3xQcmltQ291bnQpfFBhcmNlbChNYXhQcmltc3xEZXRhaWxzfFByaW0oQ291bnR8T3duZXJzKSl8QXR0YWNoZWQoTGlzdCk/fChTUE1heHxGcmVlfFVzZWQpTWVtb3J5fFJlZ2lvbihOYW1lfFRpbWVEaWxhdGlvbnxGUFN8Q29ybmVyfEFnZW50Q291bnQpfFJvb3QoUG9zaXRpb258Um90YXRpb24pfFVuaXhUaW1lfChQYXJjZWx8UmVnaW9uKUZsYWdzfChXYWxsfEdNVCljbG9ja3xTaW11bGF0b3JIb3N0bmFtZXxCb3VuZGluZ0JveHxHZW9tZXRyaWNDZW50ZXJ8Q3JlYXRvcnxOdW1iZXJPZihQcmltc3xOb3RlY2FyZExpbmVzfFNpZGVzKXxBbmltYXRpb24oTGlzdCk/fChDYW1lcmF8TG9jYWwpKFBvc3xSb3QpfFZlbHxBY2NlbHxPbWVnYXxUaW1lKHN0YW1wfE9mRGF5KXwoT2JqZWN0fENlbnRlck9mKT9NYXNzfE1hc3NNS1N8RW5lcmd5fE93bmVyfChPd25lcik/S2V5fFN1bkRpcmVjdGlvbnxUZXh0dXJlKE9mZnNldHxTY2FsZXxSb3QpfEludmVudG9yeShOdW1iZXJ8TmFtZXxLZXl8VHlwZXxDcmVhdG9yfFBlcm1NYXNrKXxQZXJtaXNzaW9ucyhLZXkpP3xTdGFydFBhcmFtZXRlcnxMaXN0KExlbmd0aHxFbnRyeVR5cGUpfERhdGV8QWdlbnQoU2l6ZXxJbmZvfExhbmd1YWdlfExpc3QpfExhbmRPd25lckF0fE5vdGVjYXJkTGluZXxTY3JpcHQoTmFtZXxTdGF0ZSkpfChHZXR8UmVzZXR8R2V0QW5kUmVzZXQpVGltZXxQbGF5U291bmQoU2xhdmUpP3xMb29wU291bmQoTWFzdGVyfFNsYXZlKT98KFRyaWdnZXJ8U3RvcHxQcmVsb2FkKVNvdW5kfCgoR2V0fERlbGV0ZSlTdWJ8SW5zZXJ0KVN0cmluZ3xUbyhVcHBlcnxMb3dlcil8R2l2ZShJbnZlbnRvcnlMaXN0fE1vbmV5KXxSZXpPYmplY3R8KFN0b3ApP0xvb2tBdHxTbGVlcHxDb2xsaXNpb25GaWx0ZXJ8KFRha2V8UmVsZWFzZSlDb250cm9sc3xEZXRhY2hGcm9tQXZhdGFyfEF0dGFjaFRvQXZhdGFyKFRlbXApP3xJbnN0YW50TWVzc2FnZXwoR2V0TmV4dCk/RW1haWx8U3RvcEhvdmVyfE1pbkV2ZW50RGVsYXl8Um90TG9va0F0fFN0cmluZyhMZW5ndGh8VHJpbSl8KFN0YXJ0fFN0b3ApQW5pbWF0aW9ufFRhcmdldE9tZWdhfFJlcXVlc3QoRXhwZXJpZW5jZSk/UGVybWlzc2lvbnN8KENyZWF0ZXxCcmVhaylMaW5rfEJyZWFrQWxsTGlua3N8KEdpdmV8UmVtb3ZlKUludmVudG9yeXxXYXRlcnxQYXNzVG91Y2hlc3xSZXF1ZXN0KEFnZW50fEludmVudG9yeSlEYXRhfFRlbGVwb3J0QWdlbnQoSG9tZXxHbG9iYWxDb29yZHMpP3xNb2RpZnlMYW5kfENvbGxpc2lvblNvdW5kfFJlc2V0U2NyaXB0fE1lc3NhZ2VMaW5rZWR8UHVzaE9iamVjdHxQYXNzQ29sbGlzaW9uc3xBeGlzQW5nbGUyUm90fFJvdDIoQXhpc3xBbmdsZSl8QShjb3N8c2luKXxBbmdsZUJldHdlZW58QWxsb3dJbnZlbnRvcnlEcm9wfFN1YlN0cmluZ0luZGV4fExpc3QyKENTVnxJbnRlZ2VyfEpzb258RmxvYXR8U3RyaW5nfEtleXxWZWN0b3J8Um90fExpc3QoU3RyaWRlZCk/KXxEZWxldGVTdWJMaXN0fExpc3QoU3RhdGlzdGljc3xTb3J0fFJhbmRvbWl6ZXwoSW5zZXJ0fEZpbmR8UmVwbGFjZSlMaXN0KXxFZGdlT2ZXb3JsZHxBZGp1c3RTb3VuZFZvbHVtZXxLZXkyTmFtZXxUcmlnZ2VyU291bmRMaW1pdGVkfEVqZWN0RnJvbUxhbmR8KENTVnxQYXJzZVN0cmluZykyTGlzdHxPdmVyTXlMYW5kfFNhbWVHcm91cHxVblNpdHxHcm91bmQoU2xvcGV8Tm9ybWFsfENvbnRvdXIpfEdyb3VuZFJlcGVsfChTZXR8UmVtb3ZlKVZlaGljbGVGbGFnc3xTaXRPbkxpbmt8KEF2YXRhck9uKT8oTGluayk/U2l0VGFyZ2V0fFNjcmlwdChEYW5nZXJ8UHJvZmlsZXIpfERpYWxvZ3xWb2x1bWVEZXRlY3R8UmVzZXRPdGhlclNjcmlwdHxSZW1vdGVMb2FkU2NyaXB0UGlufChPcGVufENsb3NlKVJlbW90ZURhdGFDaGFubmVsfFNlbmRSZW1vdGVEYXRhfFJlbW90ZURhdGFSZXBseXwoSW50ZWdlcnxTdHJpbmcpVG9CYXNlNjR8WG9yQmFzZTY0fExvZygxMCk/fEJhc2U2NFRvKFN0cmluZ3xJbnRlZ2VyKXxQYXJzZVN0cmluZ0tlZXBOdWxsc3xSZXpBdFJvb3R8UmVxdWVzdFNpbXVsYXRvckRhdGF8Rm9yY2VNb3VzZWxvb2t8KExvYWR8UmVsZWFzZXwoRXxVbmUpc2NhcGUpVVJMfFBhcmNlbE1lZGlhKENvbW1hbmRMaXN0fFF1ZXJ5KXxNb2RQb3d8TWFwRGVzdGluYXRpb258KFJlbW92ZUZyb218QWRkVG98UmVzZXQpTGFuZChQYXNzfEJhbilMaXN0fChTZXR8Q2xlYXIpQ2FtZXJhUGFyYW1zfEhUVFAoUmVxdWVzdHxSZXNwb25zZSl8VGV4dEJveHxEZXRlY3RlZFRvdWNoKFVWfEZhY2V8UG9zfChOfEJpbilvcm1hbHxTVCl8KE1ENXxTSEExfER1bXBMaXN0MilTdHJpbmd8UmVxdWVzdChTZWN1cmUpP1VSTHxDbGVhcihQcmltfExpbmspTWVkaWF8KExpbmspP1BhcnRpY2xlU3lzdGVtfChHZXR8UmVxdWVzdCkoVXNlcm5hbWV8RGlzcGxheU5hbWUpfFJlZ2lvblNheVRvfENhc3RSYXl8R2VuZXJhdGVLZXl8VHJhbnNmZXJMaW5kZW5Eb2xsYXJzfE1hbmFnZUVzdGF0ZUFjY2Vzc3woQ3JlYXRlfERlbGV0ZSlDaGFyYWN0ZXJ8RXhlY0NoYXJhY3RlckNtZHxFdmFkZXxGbGVlRnJvbXxOYXZpZ2F0ZVRvfFBhdHJvbFBvaW50c3xQdXJzdWV8VXBkYXRlQ2hhcmFjdGVyfFdhbmRlcldpdGhpbikpXFxcXGInXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdMU0wgKExpbmRlbiBTY3JpcHRpbmcgTGFuZ3VhZ2UpJyxcbiAgICAgICAgaWxsZWdhbDogJzonLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgTFNMX1NUUklOR1MsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgaGxqcy5DT01NRU5UKCcvLycsICckJyksXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnL1xcXFwqJywgJ1xcXFwqLycpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBMU0xfTlVNQkVSUyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKHN0YXRlfGRlZmF1bHQpXFxcXGInXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoc3RhdGVfKGVudHJ5fGV4aXQpfHRvdWNoKF8oc3RhcnR8ZW5kKSk/fChsYW5kXyk/Y29sbGlzaW9uKF8oc3RhcnR8ZW5kKSk/fHRpbWVyfGxpc3Rlbnwobm9fKT9zZW5zb3J8Y29udHJvbHwobm90Xyk/YXRfKHJvdF8pP3RhcmdldHxtb25leXxlbWFpbHxleHBlcmllbmNlX3Blcm1pc3Npb25zKF9kZW5pZWQpP3xydW5fdGltZV9wZXJtaXNzaW9uc3xjaGFuZ2VkfGF0dGFjaHxkYXRhc2VydmVyfG1vdmluZ18oc3RhcnR8ZW5kKXxsaW5rX21lc3NhZ2V8KG9ufG9iamVjdClfcmV6fHJlbW90ZV9kYXRhfGh0dHBfcmUoc3BvbnNlfHF1ZXN0KXxwYXRoX3VwZGF0ZXx0cmFuc2FjdGlvbl9yZXN1bHQpXFxcXGInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTFNMX0ZVTkNUSU9OUyxcbiAgICAgICAgICAgIExTTF9DT05TVEFOVFMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYihpbnRlZ2VyfGZsb2F0fHN0cmluZ3xrZXl8dmVjdG9yfHF1YXRlcm5pb258cm90YXRpb258bGlzdClcXFxcYidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbHNsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IEx1YVxuRGVzY3JpcHRpb246IEx1YSBpcyBhIHBvd2VyZnVsLCBlZmZpY2llbnQsIGxpZ2h0d2VpZ2h0LCBlbWJlZGRhYmxlIHNjcmlwdGluZyBsYW5ndWFnZS5cbkF1dGhvcjogQW5kcmV3IEZlZG9yb3YgPGRtbWRyc0BtYWlsLnJ1PlxuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nXG5XZWJzaXRlOiBodHRwczovL3d3dy5sdWEub3JnXG4qL1xuXG5mdW5jdGlvbiBsdWEoaGxqcykge1xuICBjb25zdCBPUEVOSU5HX0xPTkdfQlJBQ0tFVCA9ICdcXFxcWz0qXFxcXFsnO1xuICBjb25zdCBDTE9TSU5HX0xPTkdfQlJBQ0tFVCA9ICdcXFxcXT0qXFxcXF0nO1xuICBjb25zdCBMT05HX0JSQUNLRVRTID0ge1xuICAgIGJlZ2luOiBPUEVOSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICBlbmQ6IENMT1NJTkdfTE9OR19CUkFDS0VULFxuICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICB9O1xuICBjb25zdCBDT01NRU5UUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoJy0tKD8hJyArIE9QRU5JTkdfTE9OR19CUkFDS0VUICsgJyknLCAnJCcpLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICctLScgKyBPUEVOSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICAgIENMT1NJTkdfTE9OR19CUkFDS0VULFxuICAgICAge1xuICAgICAgICBjb250YWluczogW0xPTkdfQlJBQ0tFVFNdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgKVxuICBdO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdMdWEnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgbGl0ZXJhbDogXCJ0cnVlIGZhbHNlIG5pbFwiLFxuICAgICAga2V5d29yZDogXCJhbmQgYnJlYWsgZG8gZWxzZSBlbHNlaWYgZW5kIGZvciBnb3RvIGlmIGluIGxvY2FsIG5vdCBvciByZXBlYXQgcmV0dXJuIHRoZW4gdW50aWwgd2hpbGVcIixcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBNZXRhdGFncyBhbmQgZ2xvYmFsczpcbiAgICAgICAgJ19HIF9FTlYgX1ZFUlNJT04gX19pbmRleCBfX25ld2luZGV4IF9fbW9kZSBfX2NhbGwgX19tZXRhdGFibGUgX190b3N0cmluZyBfX2xlbiAnICtcbiAgICAgICAgJ19fZ2MgX19hZGQgX19zdWIgX19tdWwgX19kaXYgX19tb2QgX19wb3cgX19jb25jYXQgX191bm0gX19lcSBfX2x0IF9fbGUgYXNzZXJ0ICcgK1xuICAgICAgICAvLyBTdGFuZGFyZCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzOlxuICAgICAgICAnY29sbGVjdGdhcmJhZ2UgZG9maWxlIGVycm9yIGdldGZlbnYgZ2V0bWV0YXRhYmxlIGlwYWlycyBsb2FkIGxvYWRmaWxlIGxvYWRzdHJpbmcgJyArXG4gICAgICAgICdtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgc2VsZWN0IHNldGZlbnYgJyArXG4gICAgICAgICdzZXRtZXRhdGFibGUgdG9udW1iZXIgdG9zdHJpbmcgdHlwZSB1bnBhY2sgeHBjYWxsIGFyZyBzZWxmICcgK1xuICAgICAgICAvLyBMaWJyYXJ5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgKG9uZSBsaW5lIHBlciBsaWJyYXJ5KTpcbiAgICAgICAgJ2Nvcm91dGluZSByZXN1bWUgeWllbGQgc3RhdHVzIHdyYXAgY3JlYXRlIHJ1bm5pbmcgZGVidWcgZ2V0dXB2YWx1ZSAnICtcbiAgICAgICAgJ2RlYnVnIHNldGhvb2sgZ2V0bWV0YXRhYmxlIGdldGhvb2sgc2V0bWV0YXRhYmxlIHNldGxvY2FsIHRyYWNlYmFjayBzZXRmZW52IGdldGluZm8gc2V0dXB2YWx1ZSBnZXRsb2NhbCBnZXRyZWdpc3RyeSBnZXRmZW52ICcgK1xuICAgICAgICAnaW8gbGluZXMgd3JpdGUgY2xvc2UgZmx1c2ggb3BlbiBvdXRwdXQgdHlwZSByZWFkIHN0ZGVyciBzdGRpbiBpbnB1dCBzdGRvdXQgcG9wZW4gdG1wZmlsZSAnICtcbiAgICAgICAgJ21hdGggbG9nIG1heCBhY29zIGh1Z2UgbGRleHAgcGkgY29zIHRhbmggcG93IGRlZyB0YW4gY29zaCBzaW5oIHJhbmRvbSByYW5kb21zZWVkIGZyZXhwIGNlaWwgZmxvb3IgcmFkIGFicyBzcXJ0IG1vZGYgYXNpbiBtaW4gbW9kIGZtb2QgbG9nMTAgYXRhbjIgZXhwIHNpbiBhdGFuICcgK1xuICAgICAgICAnb3MgZXhpdCBzZXRsb2NhbGUgZGF0ZSBnZXRlbnYgZGlmZnRpbWUgcmVtb3ZlIHRpbWUgY2xvY2sgdG1wbmFtZSByZW5hbWUgZXhlY3V0ZSBwYWNrYWdlIHByZWxvYWQgbG9hZGxpYiBsb2FkZWQgbG9hZGVycyBjcGF0aCBjb25maWcgcGF0aCBzZWVhbGwgJyArXG4gICAgICAgICdzdHJpbmcgc3ViIHVwcGVyIGxlbiBnZmluZCByZXAgZmluZCBtYXRjaCBjaGFyIGR1bXAgZ21hdGNoIHJldmVyc2UgYnl0ZSBmb3JtYXQgZ3N1YiBsb3dlciAnICtcbiAgICAgICAgJ3RhYmxlIHNldG4gaW5zZXJ0IGdldG4gZm9yZWFjaGkgbWF4biBmb3JlYWNoIGNvbmNhdCBzb3J0IHJlbW92ZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBDT01NRU5UUy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBiZWdpbjogJyhbX2EtekEtWl1cXFxcdypcXFxcLikqKFtfYS16QS1aXVxcXFx3KjopP1tfYS16QS1aXVxcXFx3KidcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBDT01NRU5UU1xuICAgICAgICAgIH1cbiAgICAgICAgXS5jb25jYXQoQ09NTUVOVFMpXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IE9QRU5JTkdfTE9OR19CUkFDS0VULFxuICAgICAgICBlbmQ6IENMT1NJTkdfTE9OR19CUkFDS0VULFxuICAgICAgICBjb250YWluczogW0xPTkdfQlJBQ0tFVFNdLFxuICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGx1YTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBNYWtlZmlsZVxuQXV0aG9yOiBJdmFuIFNhZ2FsYWV2IDxtYW5pYWNAc29mdHdhcmVtYW5pYWNzLm9yZz5cbkNvbnRyaWJ1dG9yczogSm/Dq2wgUG9ycXVldCA8am9lbEBwb3JxdWV0Lm9yZz5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbWFrZS9tYW51YWwvaHRtbF9ub2RlL0ludHJvZHVjdGlvbi5odG1sXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBtYWtlZmlsZShobGpzKSB7XG4gIC8qIFZhcmlhYmxlczogc2ltcGxlIChlZyAkKHZhcikpIGFuZCBzcGVjaWFsIChlZyAkQCkgKi9cbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCRcXFxcKCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXCknLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbQCU8P1xcXlxcK1xcKl0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuICAvKiBRdW90ZWQgc3RyaW5nIHdpdGggdmFyaWFibGVzIGluc2lkZSAqL1xuICBjb25zdCBRVU9URV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLyxcbiAgICBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUklBQkxFXG4gICAgXVxuICB9O1xuICAvKiBGdW5jdGlvbjogJChmdW5jIGFyZywuLi4pICovXG4gIGNvbnN0IEZVTkMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkXFwoW1xcdy1dK1xccy8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgJyArXG4gICAgICAgICd3b3JkIHdvcmRsaXN0IGZpcnN0d29yZCBsYXN0d29yZCBkaXIgbm90ZGlyIHN1ZmZpeCBiYXNlbmFtZSAnICtcbiAgICAgICAgJ2FkZHN1ZmZpeCBhZGRwcmVmaXggam9pbiB3aWxkY2FyZCByZWFscGF0aCBhYnNwYXRoIGVycm9yIHdhcm5pbmcgJyArXG4gICAgICAgICdzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFsgVkFSSUFCTEUgXVxuICB9O1xuICAvKiBWYXJpYWJsZSBhc3NpZ25tZW50ICovXG4gIGNvbnN0IEFTU0lHTk1FTlQgPSB7XG4gICAgYmVnaW46ICdeJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccyooPz1bOis/XT89KSdcbiAgfTtcbiAgLyogTWV0YSB0YXJnZXRzICguUEhPTlkpICovXG4gIGNvbnN0IE1FVEEgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC9eXFwuUEhPTlk6LyxcbiAgICBlbmQ6IC8kLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9bXFwuXFx3XSsvLFxuICAgICAgJ21ldGEta2V5d29yZCc6ICcuUEhPTlknXG4gICAgfVxuICB9O1xuICAvKiBUYXJnZXRzICovXG4gIGNvbnN0IFRBUkdFVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICBiZWdpbjogL15bXlxcc10rOi8sXG4gICAgZW5kOiAvJC8sXG4gICAgY29udGFpbnM6IFsgVkFSSUFCTEUgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNYWtlZmlsZScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ21rJyxcbiAgICAgICdtYWsnLFxuICAgICAgJ21ha2UnLFxuICAgIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvW1xcdy1dKy8sXG4gICAgICBrZXl3b3JkOiAnZGVmaW5lIGVuZGVmIHVuZGVmaW5lIGlmZGVmIGlmbmRlZiBpZmVxIGlmbmVxIGVsc2UgZW5kaWYgJyArXG4gICAgICAnaW5jbHVkZSAtaW5jbHVkZSBzaW5jbHVkZSBvdmVycmlkZSBleHBvcnQgdW5leHBvcnQgcHJpdmF0ZSB2cGF0aCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBGVU5DLFxuICAgICAgQVNTSUdOTUVOVCxcbiAgICAgIE1FVEEsXG4gICAgICBUQVJHRVRcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFrZWZpbGU7XG4iLAogICAgImNvbnN0IFNZU1RFTV9TWU1CT0xTID0gW1xuICBcIkFBU1RyaWFuZ2xlXCIsXG4gIFwiQWJlbGlhbkdyb3VwXCIsXG4gIFwiQWJvcnRcIixcbiAgXCJBYm9ydEtlcm5lbHNcIixcbiAgXCJBYm9ydFByb3RlY3RcIixcbiAgXCJBYm9ydFNjaGVkdWxlZFRhc2tcIixcbiAgXCJBYm92ZVwiLFxuICBcIkFic1wiLFxuICBcIkFic0FyZ1wiLFxuICBcIkFic0FyZ1Bsb3RcIixcbiAgXCJBYnNvbHV0ZVwiLFxuICBcIkFic29sdXRlQ29ycmVsYXRpb25cIixcbiAgXCJBYnNvbHV0ZUNvcnJlbGF0aW9uRnVuY3Rpb25cIixcbiAgXCJBYnNvbHV0ZUN1cnJlbnRWYWx1ZVwiLFxuICBcIkFic29sdXRlRGFzaGluZ1wiLFxuICBcIkFic29sdXRlRmlsZU5hbWVcIixcbiAgXCJBYnNvbHV0ZU9wdGlvbnNcIixcbiAgXCJBYnNvbHV0ZVBvaW50U2l6ZVwiLFxuICBcIkFic29sdXRlVGhpY2tuZXNzXCIsXG4gIFwiQWJzb2x1dGVUaW1lXCIsXG4gIFwiQWJzb2x1dGVUaW1pbmdcIixcbiAgXCJBY2NlcHRhbmNlVGhyZXNob2xkXCIsXG4gIFwiQWNjb3VudGluZ0Zvcm1cIixcbiAgXCJBY2N1bXVsYXRlXCIsXG4gIFwiQWNjdXJhY3lcIixcbiAgXCJBY2N1cmFjeUdvYWxcIixcbiAgXCJBY3Rpb25EZWxheVwiLFxuICBcIkFjdGlvbk1lbnVcIixcbiAgXCJBY3Rpb25NZW51Qm94XCIsXG4gIFwiQWN0aW9uTWVudUJveE9wdGlvbnNcIixcbiAgXCJBY3RpdmF0ZVwiLFxuICBcIkFjdGl2ZVwiLFxuICBcIkFjdGl2ZUNsYXNzaWZpY2F0aW9uXCIsXG4gIFwiQWN0aXZlQ2xhc3NpZmljYXRpb25PYmplY3RcIixcbiAgXCJBY3RpdmVJdGVtXCIsXG4gIFwiQWN0aXZlUHJlZGljdGlvblwiLFxuICBcIkFjdGl2ZVByZWRpY3Rpb25PYmplY3RcIixcbiAgXCJBY3RpdmVTdHlsZVwiLFxuICBcIkFjeWNsaWNHcmFwaFFcIixcbiAgXCJBZGRPbkhlbHBQYXRoXCIsXG4gIFwiQWRkU2lkZXNcIixcbiAgXCJBZGRUb1wiLFxuICBcIkFkZFRvU2VhcmNoSW5kZXhcIixcbiAgXCJBZGRVc2Vyc1wiLFxuICBcIkFkamFjZW5jeUdyYXBoXCIsXG4gIFwiQWRqYWNlbmN5TGlzdFwiLFxuICBcIkFkamFjZW5jeU1hdHJpeFwiLFxuICBcIkFkamFjZW50TWVzaENlbGxzXCIsXG4gIFwiQWRqdXN0bWVudEJveFwiLFxuICBcIkFkanVzdG1lbnRCb3hPcHRpb25zXCIsXG4gIFwiQWRqdXN0VGltZVNlcmllc0ZvcmVjYXN0XCIsXG4gIFwiQWRtaW5pc3RyYXRpdmVEaXZpc2lvbkRhdGFcIixcbiAgXCJBZmZpbmVIYWxmU3BhY2VcIixcbiAgXCJBZmZpbmVTcGFjZVwiLFxuICBcIkFmZmluZVN0YXRlU3BhY2VNb2RlbFwiLFxuICBcIkFmZmluZVRyYW5zZm9ybVwiLFxuICBcIkFmdGVyXCIsXG4gIFwiQWdncmVnYXRlZEVudGl0eUNsYXNzXCIsXG4gIFwiQWdncmVnYXRpb25MYXllclwiLFxuICBcIkFpcmNyYWZ0RGF0YVwiLFxuICBcIkFpcnBvcnREYXRhXCIsXG4gIFwiQWlyUHJlc3N1cmVEYXRhXCIsXG4gIFwiQWlyVGVtcGVyYXR1cmVEYXRhXCIsXG4gIFwiQWlyeUFpXCIsXG4gIFwiQWlyeUFpUHJpbWVcIixcbiAgXCJBaXJ5QWlaZXJvXCIsXG4gIFwiQWlyeUJpXCIsXG4gIFwiQWlyeUJpUHJpbWVcIixcbiAgXCJBaXJ5QmlaZXJvXCIsXG4gIFwiQWxnZWJyYWljSW50ZWdlclFcIixcbiAgXCJBbGdlYnJhaWNOdW1iZXJcIixcbiAgXCJBbGdlYnJhaWNOdW1iZXJEZW5vbWluYXRvclwiLFxuICBcIkFsZ2VicmFpY051bWJlck5vcm1cIixcbiAgXCJBbGdlYnJhaWNOdW1iZXJQb2x5bm9taWFsXCIsXG4gIFwiQWxnZWJyYWljTnVtYmVyVHJhY2VcIixcbiAgXCJBbGdlYnJhaWNSdWxlc1wiLFxuICBcIkFsZ2VicmFpY1J1bGVzRGF0YVwiLFxuICBcIkFsZ2VicmFpY3NcIixcbiAgXCJBbGdlYnJhaWNVbml0UVwiLFxuICBcIkFsaWdubWVudFwiLFxuICBcIkFsaWdubWVudE1hcmtlclwiLFxuICBcIkFsaWdubWVudFBvaW50XCIsXG4gIFwiQWxsXCIsXG4gIFwiQWxsb3dBZHVsdENvbnRlbnRcIixcbiAgXCJBbGxvd2VkQ2xvdWRFeHRyYVBhcmFtZXRlcnNcIixcbiAgXCJBbGxvd2VkQ2xvdWRQYXJhbWV0ZXJFeHRlbnNpb25zXCIsXG4gIFwiQWxsb3dlZERpbWVuc2lvbnNcIixcbiAgXCJBbGxvd2VkRnJlcXVlbmN5UmFuZ2VcIixcbiAgXCJBbGxvd2VkSGVhZHNcIixcbiAgXCJBbGxvd0dyb3VwQ2xvc2VcIixcbiAgXCJBbGxvd0luY29tcGxldGVcIixcbiAgXCJBbGxvd0lubGluZUNlbGxzXCIsXG4gIFwiQWxsb3dLZXJuZWxJbml0aWFsaXphdGlvblwiLFxuICBcIkFsbG93TG9vc2VHcmFtbWFyXCIsXG4gIFwiQWxsb3dSZXZlcnNlR3JvdXBDbG9zZVwiLFxuICBcIkFsbG93U2NyaXB0TGV2ZWxDaGFuZ2VcIixcbiAgXCJBbGxvd1ZlcnNpb25VcGRhdGVcIixcbiAgXCJBbGxUcnVlXCIsXG4gIFwiQWxwaGFiZXRcIixcbiAgXCJBbHBoYWJldGljT3JkZXJcIixcbiAgXCJBbHBoYWJldGljU29ydFwiLFxuICBcIkFscGhhQ2hhbm5lbFwiLFxuICBcIkFsdGVybmF0ZUltYWdlXCIsXG4gIFwiQWx0ZXJuYXRpbmdGYWN0b3JpYWxcIixcbiAgXCJBbHRlcm5hdGluZ0dyb3VwXCIsXG4gIFwiQWx0ZXJuYXRpdmVIeXBvdGhlc2lzXCIsXG4gIFwiQWx0ZXJuYXRpdmVzXCIsXG4gIFwiQWx0aXR1ZGVNZXRob2RcIixcbiAgXCJBbWJpZW50TGlnaHRcIixcbiAgXCJBbWJpZ3VpdHlGdW5jdGlvblwiLFxuICBcIkFtYmlndWl0eUxpc3RcIixcbiAgXCJBbmFseXRpY1wiLFxuICBcIkFuYXRvbXlEYXRhXCIsXG4gIFwiQW5hdG9teUZvcm1cIixcbiAgXCJBbmF0b215UGxvdDNEXCIsXG4gIFwiQW5hdG9teVNraW5TdHlsZVwiLFxuICBcIkFuYXRvbXlTdHlsaW5nXCIsXG4gIFwiQW5jaG9yZWRTZWFyY2hcIixcbiAgXCJBbmRcIixcbiAgXCJBbmRlcnNvbkRhcmxpbmdUZXN0XCIsXG4gIFwiQW5nZXJKXCIsXG4gIFwiQW5nbGVCaXNlY3RvclwiLFxuICBcIkFuZ2xlQnJhY2tldFwiLFxuICBcIkFuZ2xlUGF0aFwiLFxuICBcIkFuZ2xlUGF0aDNEXCIsXG4gIFwiQW5nbGVWZWN0b3JcIixcbiAgXCJBbmd1bGFyR2F1Z2VcIixcbiAgXCJBbmltYXRlXCIsXG4gIFwiQW5pbWF0aW9uQ3ljbGVPZmZzZXRcIixcbiAgXCJBbmltYXRpb25DeWNsZVJlcGV0aXRpb25zXCIsXG4gIFwiQW5pbWF0aW9uRGlyZWN0aW9uXCIsXG4gIFwiQW5pbWF0aW9uRGlzcGxheVRpbWVcIixcbiAgXCJBbmltYXRpb25SYXRlXCIsXG4gIFwiQW5pbWF0aW9uUmVwZXRpdGlvbnNcIixcbiAgXCJBbmltYXRpb25SdW5uaW5nXCIsXG4gIFwiQW5pbWF0aW9uUnVuVGltZVwiLFxuICBcIkFuaW1hdGlvblRpbWVJbmRleFwiLFxuICBcIkFuaW1hdG9yXCIsXG4gIFwiQW5pbWF0b3JCb3hcIixcbiAgXCJBbmltYXRvckJveE9wdGlvbnNcIixcbiAgXCJBbmltYXRvckVsZW1lbnRzXCIsXG4gIFwiQW5ub3RhdGVcIixcbiAgXCJBbm5vdGF0aW9uXCIsXG4gIFwiQW5ub3RhdGlvbkRlbGV0ZVwiLFxuICBcIkFubm90YXRpb25LZXlzXCIsXG4gIFwiQW5ub3RhdGlvblJ1bGVzXCIsXG4gIFwiQW5ub3RhdGlvblZhbHVlXCIsXG4gIFwiQW5udWl0eVwiLFxuICBcIkFubnVpdHlEdWVcIixcbiAgXCJBbm51bHVzXCIsXG4gIFwiQW5vbWFseURldGVjdGlvblwiLFxuICBcIkFub21hbHlEZXRlY3RvclwiLFxuICBcIkFub21hbHlEZXRlY3RvckZ1bmN0aW9uXCIsXG4gIFwiQW5vbnltb3VzXCIsXG4gIFwiQW50aWFsaWFzaW5nXCIsXG4gIFwiQW50aWhlcm1pdGlhbk1hdHJpeFFcIixcbiAgXCJBbnRpc3ltbWV0cmljXCIsXG4gIFwiQW50aXN5bW1ldHJpY01hdHJpeFFcIixcbiAgXCJBbnRvbnltc1wiLFxuICBcIkFueU9yZGVyXCIsXG4gIFwiQW55U3Vic2V0XCIsXG4gIFwiQW55VHJ1ZVwiLFxuICBcIkFwYXJ0XCIsXG4gIFwiQXBhcnRTcXVhcmVGcmVlXCIsXG4gIFwiQVBJRnVuY3Rpb25cIixcbiAgXCJBcHBlYXJhbmNlXCIsXG4gIFwiQXBwZWFyYW5jZUVsZW1lbnRzXCIsXG4gIFwiQXBwZWFyYW5jZVJ1bGVzXCIsXG4gIFwiQXBwZWxsRjFcIixcbiAgXCJBcHBlbmRcIixcbiAgXCJBcHBlbmRDaGVja1wiLFxuICBcIkFwcGVuZExheWVyXCIsXG4gIFwiQXBwZW5kVG9cIixcbiAgXCJBcHBseVwiLFxuICBcIkFwcGx5U2lkZXNcIixcbiAgXCJBcmNDb3NcIixcbiAgXCJBcmNDb3NoXCIsXG4gIFwiQXJjQ290XCIsXG4gIFwiQXJjQ290aFwiLFxuICBcIkFyY0NzY1wiLFxuICBcIkFyY0NzY2hcIixcbiAgXCJBcmNDdXJ2YXR1cmVcIixcbiAgXCJBUkNIUHJvY2Vzc1wiLFxuICBcIkFyY0xlbmd0aFwiLFxuICBcIkFyY1NlY1wiLFxuICBcIkFyY1NlY2hcIixcbiAgXCJBcmNTaW5cIixcbiAgXCJBcmNTaW5EaXN0cmlidXRpb25cIixcbiAgXCJBcmNTaW5oXCIsXG4gIFwiQXJjVGFuXCIsXG4gIFwiQXJjVGFuaFwiLFxuICBcIkFyZWFcIixcbiAgXCJBcmdcIixcbiAgXCJBcmdNYXhcIixcbiAgXCJBcmdNaW5cIixcbiAgXCJBcmd1bWVudENvdW50UVwiLFxuICBcIkFSSU1BUHJvY2Vzc1wiLFxuICBcIkFyaXRobWV0aWNHZW9tZXRyaWNNZWFuXCIsXG4gIFwiQVJNQVByb2Nlc3NcIixcbiAgXCJBcm91bmRcIixcbiAgXCJBcm91bmRSZXBsYWNlXCIsXG4gIFwiQVJQcm9jZXNzXCIsXG4gIFwiQXJyYXlcIixcbiAgXCJBcnJheUNvbXBvbmVudHNcIixcbiAgXCJBcnJheURlcHRoXCIsXG4gIFwiQXJyYXlGaWx0ZXJcIixcbiAgXCJBcnJheUZsYXR0ZW5cIixcbiAgXCJBcnJheU1lc2hcIixcbiAgXCJBcnJheVBhZFwiLFxuICBcIkFycmF5UGxvdFwiLFxuICBcIkFycmF5UVwiLFxuICBcIkFycmF5UmVzYW1wbGVcIixcbiAgXCJBcnJheVJlc2hhcGVcIixcbiAgXCJBcnJheVJ1bGVzXCIsXG4gIFwiQXJyYXlzXCIsXG4gIFwiQXJyb3dcIixcbiAgXCJBcnJvdzNEQm94XCIsXG4gIFwiQXJyb3dCb3hcIixcbiAgXCJBcnJvd2hlYWRzXCIsXG4gIFwiQVNBVHJpYW5nbGVcIixcbiAgXCJBc2tcIixcbiAgXCJBc2tBcHBlbmRcIixcbiAgXCJBc2tDb25maXJtXCIsXG4gIFwiQXNrRGlzcGxheVwiLFxuICBcIkFza2VkUVwiLFxuICBcIkFza2VkVmFsdWVcIixcbiAgXCJBc2tGdW5jdGlvblwiLFxuICBcIkFza1N0YXRlXCIsXG4gIFwiQXNrVGVtcGxhdGVEaXNwbGF5XCIsXG4gIFwiQXNwZWN0UmF0aW9cIixcbiAgXCJBc3BlY3RSYXRpb0ZpeGVkXCIsXG4gIFwiQXNzZXJ0XCIsXG4gIFwiQXNzb2NpYXRlVG9cIixcbiAgXCJBc3NvY2lhdGlvblwiLFxuICBcIkFzc29jaWF0aW9uRm9ybWF0XCIsXG4gIFwiQXNzb2NpYXRpb25NYXBcIixcbiAgXCJBc3NvY2lhdGlvblFcIixcbiAgXCJBc3NvY2lhdGlvblRocmVhZFwiLFxuICBcIkFzc3VtZURldGVybWluaXN0aWNcIixcbiAgXCJBc3N1bWluZ1wiLFxuICBcIkFzc3VtcHRpb25zXCIsXG4gIFwiQXN0cm9ub21pY2FsRGF0YVwiLFxuICBcIkFzeW1wdG90aWNcIixcbiAgXCJBc3ltcHRvdGljRFNvbHZlVmFsdWVcIixcbiAgXCJBc3ltcHRvdGljRXF1YWxcIixcbiAgXCJBc3ltcHRvdGljRXF1aXZhbGVudFwiLFxuICBcIkFzeW1wdG90aWNHcmVhdGVyXCIsXG4gIFwiQXN5bXB0b3RpY0dyZWF0ZXJFcXVhbFwiLFxuICBcIkFzeW1wdG90aWNJbnRlZ3JhdGVcIixcbiAgXCJBc3ltcHRvdGljTGVzc1wiLFxuICBcIkFzeW1wdG90aWNMZXNzRXF1YWxcIixcbiAgXCJBc3ltcHRvdGljT3V0cHV0VHJhY2tlclwiLFxuICBcIkFzeW1wdG90aWNQcm9kdWN0XCIsXG4gIFwiQXN5bXB0b3RpY1JTb2x2ZVZhbHVlXCIsXG4gIFwiQXN5bXB0b3RpY1NvbHZlXCIsXG4gIFwiQXN5bXB0b3RpY1N1bVwiLFxuICBcIkFzeW5jaHJvbm91c1wiLFxuICBcIkFzeW5jaHJvbm91c1Rhc2tPYmplY3RcIixcbiAgXCJBc3luY2hyb25vdXNUYXNrc1wiLFxuICBcIkF0b21cIixcbiAgXCJBdG9tQ29vcmRpbmF0ZXNcIixcbiAgXCJBdG9tQ291bnRcIixcbiAgXCJBdG9tRGlhZ3JhbUNvb3JkaW5hdGVzXCIsXG4gIFwiQXRvbUxpc3RcIixcbiAgXCJBdG9tUVwiLFxuICBcIkF0dGVudGlvbkxheWVyXCIsXG4gIFwiQXR0cmlidXRlc1wiLFxuICBcIkF1ZGlvXCIsXG4gIFwiQXVkaW9BbXBsaWZ5XCIsXG4gIFwiQXVkaW9Bbm5vdGF0ZVwiLFxuICBcIkF1ZGlvQW5ub3RhdGlvbkxvb2t1cFwiLFxuICBcIkF1ZGlvQmxvY2tNYXBcIixcbiAgXCJBdWRpb0NhcHR1cmVcIixcbiAgXCJBdWRpb0NoYW5uZWxBc3NpZ25tZW50XCIsXG4gIFwiQXVkaW9DaGFubmVsQ29tYmluZVwiLFxuICBcIkF1ZGlvQ2hhbm5lbE1peFwiLFxuICBcIkF1ZGlvQ2hhbm5lbHNcIixcbiAgXCJBdWRpb0NoYW5uZWxTZXBhcmF0ZVwiLFxuICBcIkF1ZGlvRGF0YVwiLFxuICBcIkF1ZGlvRGVsYXlcIixcbiAgXCJBdWRpb0RlbGV0ZVwiLFxuICBcIkF1ZGlvRGV2aWNlXCIsXG4gIFwiQXVkaW9EaXN0YW5jZVwiLFxuICBcIkF1ZGlvRW5jb2RpbmdcIixcbiAgXCJBdWRpb0ZhZGVcIixcbiAgXCJBdWRpb0ZyZXF1ZW5jeVNoaWZ0XCIsXG4gIFwiQXVkaW9HZW5lcmF0b3JcIixcbiAgXCJBdWRpb0lkZW50aWZ5XCIsXG4gIFwiQXVkaW9JbnB1dERldmljZVwiLFxuICBcIkF1ZGlvSW5zZXJ0XCIsXG4gIFwiQXVkaW9JbnN0YW5jZVFcIixcbiAgXCJBdWRpb0ludGVydmFsc1wiLFxuICBcIkF1ZGlvSm9pblwiLFxuICBcIkF1ZGlvTGFiZWxcIixcbiAgXCJBdWRpb0xlbmd0aFwiLFxuICBcIkF1ZGlvTG9jYWxNZWFzdXJlbWVudHNcIixcbiAgXCJBdWRpb0xvb3BpbmdcIixcbiAgXCJBdWRpb0xvdWRuZXNzXCIsXG4gIFwiQXVkaW9NZWFzdXJlbWVudHNcIixcbiAgXCJBdWRpb05vcm1hbGl6ZVwiLFxuICBcIkF1ZGlvT3V0cHV0RGV2aWNlXCIsXG4gIFwiQXVkaW9PdmVybGF5XCIsXG4gIFwiQXVkaW9QYWRcIixcbiAgXCJBdWRpb1BhblwiLFxuICBcIkF1ZGlvUGFydGl0aW9uXCIsXG4gIFwiQXVkaW9QYXVzZVwiLFxuICBcIkF1ZGlvUGl0Y2hTaGlmdFwiLFxuICBcIkF1ZGlvUGxheVwiLFxuICBcIkF1ZGlvUGxvdFwiLFxuICBcIkF1ZGlvUVwiLFxuICBcIkF1ZGlvUmVjb3JkXCIsXG4gIFwiQXVkaW9SZXBsYWNlXCIsXG4gIFwiQXVkaW9SZXNhbXBsZVwiLFxuICBcIkF1ZGlvUmV2ZXJiXCIsXG4gIFwiQXVkaW9SZXZlcnNlXCIsXG4gIFwiQXVkaW9TYW1wbGVSYXRlXCIsXG4gIFwiQXVkaW9TcGVjdHJhbE1hcFwiLFxuICBcIkF1ZGlvU3BlY3RyYWxUcmFuc2Zvcm1hdGlvblwiLFxuICBcIkF1ZGlvU3BsaXRcIixcbiAgXCJBdWRpb1N0b3BcIixcbiAgXCJBdWRpb1N0cmVhbVwiLFxuICBcIkF1ZGlvU3RyZWFtc1wiLFxuICBcIkF1ZGlvVGltZVN0cmV0Y2hcIixcbiAgXCJBdWRpb1RyYWNrc1wiLFxuICBcIkF1ZGlvVHJpbVwiLFxuICBcIkF1ZGlvVHlwZVwiLFxuICBcIkF1Z21lbnRlZFBvbHloZWRyb25cIixcbiAgXCJBdWdtZW50ZWRTeW1tZXRyaWNQb2x5bm9taWFsXCIsXG4gIFwiQXV0aGVudGljYXRlXCIsXG4gIFwiQXV0aGVudGljYXRpb25cIixcbiAgXCJBdXRoZW50aWNhdGlvbkRpYWxvZ1wiLFxuICBcIkF1dG9BY3Rpb25cIixcbiAgXCJBdXRvY29tcGxldGVcIixcbiAgXCJBdXRvY29tcGxldGlvbkZ1bmN0aW9uXCIsXG4gIFwiQXV0b0NvcHlcIixcbiAgXCJBdXRvY29ycmVsYXRpb25UZXN0XCIsXG4gIFwiQXV0b0RlbGV0ZVwiLFxuICBcIkF1dG9FdmFsdWF0ZUV2ZW50c1wiLFxuICBcIkF1dG9HZW5lcmF0ZWRQYWNrYWdlXCIsXG4gIFwiQXV0b0luZGVudFwiLFxuICBcIkF1dG9JbmRlbnRTcGFjaW5nc1wiLFxuICBcIkF1dG9JdGFsaWNXb3Jkc1wiLFxuICBcIkF1dG9sb2FkUGF0aFwiLFxuICBcIkF1dG9NYXRjaFwiLFxuICBcIkF1dG9tYXRpY1wiLFxuICBcIkF1dG9tYXRpY0ltYWdlU2l6ZVwiLFxuICBcIkF1dG9NdWx0aXBsaWNhdGlvblN5bWJvbFwiLFxuICBcIkF1dG9OdW1iZXJGb3JtYXR0aW5nXCIsXG4gIFwiQXV0b09wZW5Ob3RlYm9va3NcIixcbiAgXCJBdXRvT3BlblBhbGV0dGVzXCIsXG4gIFwiQXV0b1F1b3RlQ2hhcmFjdGVyc1wiLFxuICBcIkF1dG9SZWZyZXNoZWRcIixcbiAgXCJBdXRvUmVtb3ZlXCIsXG4gIFwiQXV0b3J1blNlcXVlbmNpbmdcIixcbiAgXCJBdXRvU2NhbGluZ1wiLFxuICBcIkF1dG9TY3JvbGxcIixcbiAgXCJBdXRvU3BhY2luZ1wiLFxuICBcIkF1dG9TdHlsZU9wdGlvbnNcIixcbiAgXCJBdXRvU3R5bGVXb3Jkc1wiLFxuICBcIkF1dG9TdWJtaXR0aW5nXCIsXG4gIFwiQXhlc1wiLFxuICBcIkF4ZXNFZGdlXCIsXG4gIFwiQXhlc0xhYmVsXCIsXG4gIFwiQXhlc09yaWdpblwiLFxuICBcIkF4ZXNTdHlsZVwiLFxuICBcIkF4aW9tYXRpY1RoZW9yeVwiLFxuICBcIkF4aXNcIixcbiAgXCJCYWJ5TW9uc3Rlckdyb3VwQlwiLFxuICBcIkJhY2tcIixcbiAgXCJCYWNrZ3JvdW5kXCIsXG4gIFwiQmFja2dyb3VuZEFwcGVhcmFuY2VcIixcbiAgXCJCYWNrZ3JvdW5kVGFza3NTZXR0aW5nc1wiLFxuICBcIkJhY2tzbGFzaFwiLFxuICBcIkJhY2tzdWJzdGl0dXRpb25cIixcbiAgXCJCYWNrd2FyZFwiLFxuICBcIkJhbGxcIixcbiAgXCJCYW5kXCIsXG4gIFwiQmFuZHBhc3NGaWx0ZXJcIixcbiAgXCJCYW5kc3RvcEZpbHRlclwiLFxuICBcIkJhcmFiYXNpQWxiZXJ0R3JhcGhEaXN0cmlidXRpb25cIixcbiAgXCJCYXJDaGFydFwiLFxuICBcIkJhckNoYXJ0M0RcIixcbiAgXCJCYXJjb2RlSW1hZ2VcIixcbiAgXCJCYXJjb2RlUmVjb2duaXplXCIsXG4gIFwiQmFyaW5naGF1c0hlbnplVGVzdFwiLFxuICBcIkJhckxlZ2VuZFwiLFxuICBcIkJhcmxvd1Byb3NjaGFuSW1wb3J0YW5jZVwiLFxuICBcIkJhcm5lc0dcIixcbiAgXCJCYXJPcmlnaW5cIixcbiAgXCJCYXJTcGFjaW5nXCIsXG4gIFwiQmFydGxldHRIYW5uV2luZG93XCIsXG4gIFwiQmFydGxldHRXaW5kb3dcIixcbiAgXCJCYXNlRGVjb2RlXCIsXG4gIFwiQmFzZUVuY29kZVwiLFxuICBcIkJhc2VGb3JtXCIsXG4gIFwiQmFzZWxpbmVcIixcbiAgXCJCYXNlbGluZVBvc2l0aW9uXCIsXG4gIFwiQmFzZVN0eWxlXCIsXG4gIFwiQmFzaWNSZWN1cnJlbnRMYXllclwiLFxuICBcIkJhdGNoTm9ybWFsaXphdGlvbkxheWVyXCIsXG4gIFwiQmF0Y2hTaXplXCIsXG4gIFwiQmF0ZXNEaXN0cmlidXRpb25cIixcbiAgXCJCYXR0bGVMZW1hcmllV2F2ZWxldFwiLFxuICBcIkJheWVzaWFuTWF4aW1pemF0aW9uXCIsXG4gIFwiQmF5ZXNpYW5NYXhpbWl6YXRpb25PYmplY3RcIixcbiAgXCJCYXllc2lhbk1pbmltaXphdGlvblwiLFxuICBcIkJheWVzaWFuTWluaW1pemF0aW9uT2JqZWN0XCIsXG4gIFwiQmVjYXVzZVwiLFxuICBcIkJlY2ttYW5uRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVlcFwiLFxuICBcIkJlZm9yZVwiLFxuICBcIkJlZ2luXCIsXG4gIFwiQmVnaW5EaWFsb2dQYWNrZXRcIixcbiAgXCJCZWdpbkZyb250RW5kSW50ZXJhY3Rpb25QYWNrZXRcIixcbiAgXCJCZWdpblBhY2thZ2VcIixcbiAgXCJCZWxsQlwiLFxuICBcIkJlbGxZXCIsXG4gIFwiQmVsb3dcIixcbiAgXCJCZW5mb3JkRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVuaW5pRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVua3RhbmRlckdpYnJhdERpc3RyaWJ1dGlvblwiLFxuICBcIkJlbmt0YW5kZXJXZWlidWxsRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVybm91bGxpQlwiLFxuICBcIkJlcm5vdWxsaURpc3RyaWJ1dGlvblwiLFxuICBcIkJlcm5vdWxsaUdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVybm91bGxpUHJvY2Vzc1wiLFxuICBcIkJlcm5zdGVpbkJhc2lzXCIsXG4gIFwiQmVzc2VsRmlsdGVyTW9kZWxcIixcbiAgXCJCZXNzZWxJXCIsXG4gIFwiQmVzc2VsSlwiLFxuICBcIkJlc3NlbEpaZXJvXCIsXG4gIFwiQmVzc2VsS1wiLFxuICBcIkJlc3NlbFlcIixcbiAgXCJCZXNzZWxZWmVyb1wiLFxuICBcIkJldGFcIixcbiAgXCJCZXRhQmlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJCZXRhRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmV0YU5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJCZXRhUHJpbWVEaXN0cmlidXRpb25cIixcbiAgXCJCZXRhUmVndWxhcml6ZWRcIixcbiAgXCJCZXR3ZWVuXCIsXG4gIFwiQmV0d2Vlbm5lc3NDZW50cmFsaXR5XCIsXG4gIFwiQmV2ZWxlZFBvbHloZWRyb25cIixcbiAgXCJCZXppZXJDdXJ2ZVwiLFxuICBcIkJlemllckN1cnZlM0RCb3hcIixcbiAgXCJCZXppZXJDdXJ2ZTNEQm94T3B0aW9uc1wiLFxuICBcIkJlemllckN1cnZlQm94XCIsXG4gIFwiQmV6aWVyQ3VydmVCb3hPcHRpb25zXCIsXG4gIFwiQmV6aWVyRnVuY3Rpb25cIixcbiAgXCJCaWxhdGVyYWxGaWx0ZXJcIixcbiAgXCJCaW5hcml6ZVwiLFxuICBcIkJpbmFyeURlc2VyaWFsaXplXCIsXG4gIFwiQmluYXJ5RGlzdGFuY2VcIixcbiAgXCJCaW5hcnlGb3JtYXRcIixcbiAgXCJCaW5hcnlJbWFnZVFcIixcbiAgXCJCaW5hcnlSZWFkXCIsXG4gIFwiQmluYXJ5UmVhZExpc3RcIixcbiAgXCJCaW5hcnlTZXJpYWxpemVcIixcbiAgXCJCaW5hcnlXcml0ZVwiLFxuICBcIkJpbkNvdW50c1wiLFxuICBcIkJpbkxpc3RzXCIsXG4gIFwiQmlub21pYWxcIixcbiAgXCJCaW5vbWlhbERpc3RyaWJ1dGlvblwiLFxuICBcIkJpbm9taWFsUHJvY2Vzc1wiLFxuICBcIkJpbm9ybWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldFwiLFxuICBcIkJpcGFydGl0ZUdyYXBoUVwiLFxuICBcIkJpcXVhZHJhdGljRmlsdGVyTW9kZWxcIixcbiAgXCJCaXJuYmF1bUltcG9ydGFuY2VcIixcbiAgXCJCaXJuYmF1bVNhdW5kZXJzRGlzdHJpYnV0aW9uXCIsXG4gIFwiQml0QW5kXCIsXG4gIFwiQml0Q2xlYXJcIixcbiAgXCJCaXRHZXRcIixcbiAgXCJCaXRMZW5ndGhcIixcbiAgXCJCaXROb3RcIixcbiAgXCJCaXRPclwiLFxuICBcIkJpdFNldFwiLFxuICBcIkJpdFNoaWZ0TGVmdFwiLFxuICBcIkJpdFNoaWZ0UmlnaHRcIixcbiAgXCJCaXRYb3JcIixcbiAgXCJCaXdlaWdodExvY2F0aW9uXCIsXG4gIFwiQml3ZWlnaHRNaWR2YXJpYW5jZVwiLFxuICBcIkJsYWNrXCIsXG4gIFwiQmxhY2ttYW5IYXJyaXNXaW5kb3dcIixcbiAgXCJCbGFja21hbk51dHRhbGxXaW5kb3dcIixcbiAgXCJCbGFja21hbldpbmRvd1wiLFxuICBcIkJsYW5rXCIsXG4gIFwiQmxhbmtGb3JtXCIsXG4gIFwiQmxhbmtOdWxsU2VxdWVuY2VcIixcbiAgXCJCbGFua1NlcXVlbmNlXCIsXG4gIFwiQmxlbmRcIixcbiAgXCJCbG9ja1wiLFxuICBcIkJsb2NrY2hhaW5BZGRyZXNzRGF0YVwiLFxuICBcIkJsb2NrY2hhaW5CYXNlXCIsXG4gIFwiQmxvY2tjaGFpbkJsb2NrRGF0YVwiLFxuICBcIkJsb2NrY2hhaW5Db250cmFjdFZhbHVlXCIsXG4gIFwiQmxvY2tjaGFpbkRhdGFcIixcbiAgXCJCbG9ja2NoYWluR2V0XCIsXG4gIFwiQmxvY2tjaGFpbktleUVuY29kZVwiLFxuICBcIkJsb2NrY2hhaW5QdXRcIixcbiAgXCJCbG9ja2NoYWluVG9rZW5EYXRhXCIsXG4gIFwiQmxvY2tjaGFpblRyYW5zYWN0aW9uXCIsXG4gIFwiQmxvY2tjaGFpblRyYW5zYWN0aW9uRGF0YVwiLFxuICBcIkJsb2NrY2hhaW5UcmFuc2FjdGlvblNpZ25cIixcbiAgXCJCbG9ja2NoYWluVHJhbnNhY3Rpb25TdWJtaXRcIixcbiAgXCJCbG9ja01hcFwiLFxuICBcIkJsb2NrUmFuZG9tXCIsXG4gIFwiQmxvbXF2aXN0QmV0YVwiLFxuICBcIkJsb21xdmlzdEJldGFUZXN0XCIsXG4gIFwiQmx1ZVwiLFxuICBcIkJsdXJcIixcbiAgXCJCb2RlUGxvdFwiLFxuICBcIkJvaG1hbldpbmRvd1wiLFxuICBcIkJvbGRcIixcbiAgXCJCb25kXCIsXG4gIFwiQm9uZENvdW50XCIsXG4gIFwiQm9uZExpc3RcIixcbiAgXCJCb25kUVwiLFxuICBcIkJvb2ttYXJrc1wiLFxuICBcIkJvb2xlXCIsXG4gIFwiQm9vbGVhbkNvbnNlY3V0aXZlRnVuY3Rpb25cIixcbiAgXCJCb29sZWFuQ29udmVydFwiLFxuICBcIkJvb2xlYW5Db3VudGluZ0Z1bmN0aW9uXCIsXG4gIFwiQm9vbGVhbkZ1bmN0aW9uXCIsXG4gIFwiQm9vbGVhbkdyYXBoXCIsXG4gIFwiQm9vbGVhbk1heHRlcm1zXCIsXG4gIFwiQm9vbGVhbk1pbmltaXplXCIsXG4gIFwiQm9vbGVhbk1pbnRlcm1zXCIsXG4gIFwiQm9vbGVhblFcIixcbiAgXCJCb29sZWFuUmVnaW9uXCIsXG4gIFwiQm9vbGVhbnNcIixcbiAgXCJCb29sZWFuU3RyaW5nc1wiLFxuICBcIkJvb2xlYW5UYWJsZVwiLFxuICBcIkJvb2xlYW5WYXJpYWJsZXNcIixcbiAgXCJCb3JkZXJEaW1lbnNpb25zXCIsXG4gIFwiQm9yZWxUYW5uZXJEaXN0cmlidXRpb25cIixcbiAgXCJCb3R0b21cIixcbiAgXCJCb3R0b21IYXRUcmFuc2Zvcm1cIixcbiAgXCJCb3VuZGFyeURpc2NyZXRpemVHcmFwaGljc1wiLFxuICBcIkJvdW5kYXJ5RGlzY3JldGl6ZVJlZ2lvblwiLFxuICBcIkJvdW5kYXJ5TWVzaFwiLFxuICBcIkJvdW5kYXJ5TWVzaFJlZ2lvblwiLFxuICBcIkJvdW5kYXJ5TWVzaFJlZ2lvblFcIixcbiAgXCJCb3VuZGFyeVN0eWxlXCIsXG4gIFwiQm91bmRlZFJlZ2lvblFcIixcbiAgXCJCb3VuZGluZ1JlZ2lvblwiLFxuICBcIkJvdW5kc1wiLFxuICBcIkJveFwiLFxuICBcIkJveEJhc2VsaW5lU2hpZnRcIixcbiAgXCJCb3hEYXRhXCIsXG4gIFwiQm94RGltZW5zaW9uc1wiLFxuICBcIkJveGVkXCIsXG4gIFwiQm94ZXNcIixcbiAgXCJCb3hGb3JtXCIsXG4gIFwiQm94Rm9ybUZvcm1hdFR5cGVzXCIsXG4gIFwiQm94RnJhbWVcIixcbiAgXCJCb3hJRFwiLFxuICBcIkJveE1hcmdpbnNcIixcbiAgXCJCb3hNYXRyaXhcIixcbiAgXCJCb3hPYmplY3RcIixcbiAgXCJCb3hSYXRpb3NcIixcbiAgXCJCb3hSb3RhdGlvblwiLFxuICBcIkJveFJvdGF0aW9uUG9pbnRcIixcbiAgXCJCb3hTdHlsZVwiLFxuICBcIkJveFdoaXNrZXJDaGFydFwiLFxuICBcIkJyYVwiLFxuICBcIkJyYWNrZXRpbmdCYXJcIixcbiAgXCJCcmFLZXRcIixcbiAgXCJCcmF5Q3VydGlzRGlzdGFuY2VcIixcbiAgXCJCcmVhZHRoRmlyc3RTY2FuXCIsXG4gIFwiQnJlYWtcIixcbiAgXCJCcmlkZ2VEYXRhXCIsXG4gIFwiQnJpZ2h0bmVzc0VxdWFsaXplXCIsXG4gIFwiQnJvYWRjYXN0U3RhdGlvbkRhdGFcIixcbiAgXCJCcm93blwiLFxuICBcIkJyb3duRm9yc3l0aGVUZXN0XCIsXG4gIFwiQnJvd25pYW5CcmlkZ2VQcm9jZXNzXCIsXG4gIFwiQnJvd3NlckNhdGVnb3J5XCIsXG4gIFwiQlNwbGluZUJhc2lzXCIsXG4gIFwiQlNwbGluZUN1cnZlXCIsXG4gIFwiQlNwbGluZUN1cnZlM0RCb3hcIixcbiAgXCJCU3BsaW5lQ3VydmUzREJveE9wdGlvbnNcIixcbiAgXCJCU3BsaW5lQ3VydmVCb3hcIixcbiAgXCJCU3BsaW5lQ3VydmVCb3hPcHRpb25zXCIsXG4gIFwiQlNwbGluZUZ1bmN0aW9uXCIsXG4gIFwiQlNwbGluZVN1cmZhY2VcIixcbiAgXCJCU3BsaW5lU3VyZmFjZTNEQm94XCIsXG4gIFwiQlNwbGluZVN1cmZhY2UzREJveE9wdGlvbnNcIixcbiAgXCJCdWJibGVDaGFydFwiLFxuICBcIkJ1YmJsZUNoYXJ0M0RcIixcbiAgXCJCdWJibGVTY2FsZVwiLFxuICBcIkJ1YmJsZVNpemVzXCIsXG4gIFwiQnVpbGRpbmdEYXRhXCIsXG4gIFwiQnVsbGV0R2F1Z2VcIixcbiAgXCJCdXNpbmVzc0RheVFcIixcbiAgXCJCdXR0ZXJmbHlHcmFwaFwiLFxuICBcIkJ1dHRlcndvcnRoRmlsdGVyTW9kZWxcIixcbiAgXCJCdXR0b25cIixcbiAgXCJCdXR0b25CYXJcIixcbiAgXCJCdXR0b25Cb3hcIixcbiAgXCJCdXR0b25Cb3hPcHRpb25zXCIsXG4gIFwiQnV0dG9uQ2VsbFwiLFxuICBcIkJ1dHRvbkNvbnRlbnRzXCIsXG4gIFwiQnV0dG9uRGF0YVwiLFxuICBcIkJ1dHRvbkV2YWx1YXRvclwiLFxuICBcIkJ1dHRvbkV4cGFuZGFibGVcIixcbiAgXCJCdXR0b25GcmFtZVwiLFxuICBcIkJ1dHRvbkZ1bmN0aW9uXCIsXG4gIFwiQnV0dG9uTWFyZ2luc1wiLFxuICBcIkJ1dHRvbk1pbkhlaWdodFwiLFxuICBcIkJ1dHRvbk5vdGVcIixcbiAgXCJCdXR0b25Ob3RlYm9va1wiLFxuICBcIkJ1dHRvblNvdXJjZVwiLFxuICBcIkJ1dHRvblN0eWxlXCIsXG4gIFwiQnV0dG9uU3R5bGVNZW51TGlzdGluZ1wiLFxuICBcIkJ5dGVcIixcbiAgXCJCeXRlQXJyYXlcIixcbiAgXCJCeXRlQXJyYXlGb3JtYXRcIixcbiAgXCJCeXRlQXJyYXlRXCIsXG4gIFwiQnl0ZUFycmF5VG9TdHJpbmdcIixcbiAgXCJCeXRlQ291bnRcIixcbiAgXCJCeXRlT3JkZXJpbmdcIixcbiAgXCJDXCIsXG4gIFwiQ2FjaGVkVmFsdWVcIixcbiAgXCJDYWNoZUdyYXBoaWNzXCIsXG4gIFwiQ2FjaGVQZXJzaXN0ZW5jZVwiLFxuICBcIkNhbGVuZGFyQ29udmVydFwiLFxuICBcIkNhbGVuZGFyRGF0YVwiLFxuICBcIkNhbGVuZGFyVHlwZVwiLFxuICBcIkNhbGxvdXRcIixcbiAgXCJDYWxsb3V0TWFya2VyXCIsXG4gIFwiQ2FsbG91dFN0eWxlXCIsXG4gIFwiQ2FsbFBhY2tldFwiLFxuICBcIkNhbmJlcnJhRGlzdGFuY2VcIixcbiAgXCJDYW5jZWxcIixcbiAgXCJDYW5jZWxCdXR0b25cIixcbiAgXCJDYW5kbGVzdGlja0NoYXJ0XCIsXG4gIFwiQ2Fub25pY2FsR3JhcGhcIixcbiAgXCJDYW5vbmljYWxpemVQb2x5Z29uXCIsXG4gIFwiQ2Fub25pY2FsaXplUG9seWhlZHJvblwiLFxuICBcIkNhbm9uaWNhbE5hbWVcIixcbiAgXCJDYW5vbmljYWxXYXJwaW5nQ29ycmVzcG9uZGVuY2VcIixcbiAgXCJDYW5vbmljYWxXYXJwaW5nRGlzdGFuY2VcIixcbiAgXCJDYW50b3JNZXNoXCIsXG4gIFwiQ2FudG9yU3RhaXJjYXNlXCIsXG4gIFwiQ2FwXCIsXG4gIFwiQ2FwRm9ybVwiLFxuICBcIkNhcGl0YWxEaWZmZXJlbnRpYWxEXCIsXG4gIFwiQ2FwaXRhbGl6ZVwiLFxuICBcIkNhcHN1bGVTaGFwZVwiLFxuICBcIkNhcHR1cmVSdW5uaW5nXCIsXG4gIFwiQ2FyZGluYWxCU3BsaW5lQmFzaXNcIixcbiAgXCJDYXJsZW1hbkxpbmVhcml6ZVwiLFxuICBcIkNhcm1pY2hhZWxMYW1iZGFcIixcbiAgXCJDYXNlT3JkZXJpbmdcIixcbiAgXCJDYXNlc1wiLFxuICBcIkNhc2VTZW5zaXRpdmVcIixcbiAgXCJDYXNoZmxvd1wiLFxuICBcIkNhc29yYXRpYW5cIixcbiAgXCJDYXRhbGFuXCIsXG4gIFwiQ2F0YWxhbk51bWJlclwiLFxuICBcIkNhdGNoXCIsXG4gIFwiQ2F0ZWdvcmljYWxEaXN0cmlidXRpb25cIixcbiAgXCJDYXRlbmF0ZVwiLFxuICBcIkNhdGVuYXRlTGF5ZXJcIixcbiAgXCJDYXVjaHlEaXN0cmlidXRpb25cIixcbiAgXCJDYXVjaHlXaW5kb3dcIixcbiAgXCJDYXlsZXlHcmFwaFwiLFxuICBcIkNERlwiLFxuICBcIkNERkRlcGxveVwiLFxuICBcIkNERkluZm9ybWF0aW9uXCIsXG4gIFwiQ0RGV2F2ZWxldFwiLFxuICBcIkNlaWxpbmdcIixcbiAgXCJDZWxlc3RpYWxTeXN0ZW1cIixcbiAgXCJDZWxsXCIsXG4gIFwiQ2VsbEF1dG9PdmVyd3JpdGVcIixcbiAgXCJDZWxsQmFzZWxpbmVcIixcbiAgXCJDZWxsQm91bmRpbmdCb3hcIixcbiAgXCJDZWxsQnJhY2tldE9wdGlvbnNcIixcbiAgXCJDZWxsQ2hhbmdlVGltZXNcIixcbiAgXCJDZWxsQ29udGVudHNcIixcbiAgXCJDZWxsQ29udGV4dFwiLFxuICBcIkNlbGxEaW5nYmF0XCIsXG4gIFwiQ2VsbER5bmFtaWNFeHByZXNzaW9uXCIsXG4gIFwiQ2VsbEVkaXREdXBsaWNhdGVcIixcbiAgXCJDZWxsRWxlbWVudHNCb3VuZGluZ0JveFwiLFxuICBcIkNlbGxFbGVtZW50U3BhY2luZ3NcIixcbiAgXCJDZWxsRXBpbG9nXCIsXG4gIFwiQ2VsbEV2YWx1YXRpb25EdXBsaWNhdGVcIixcbiAgXCJDZWxsRXZhbHVhdGlvbkZ1bmN0aW9uXCIsXG4gIFwiQ2VsbEV2YWx1YXRpb25MYW5ndWFnZVwiLFxuICBcIkNlbGxFdmVudEFjdGlvbnNcIixcbiAgXCJDZWxsRnJhbWVcIixcbiAgXCJDZWxsRnJhbWVDb2xvclwiLFxuICBcIkNlbGxGcmFtZUxhYmVsTWFyZ2luc1wiLFxuICBcIkNlbGxGcmFtZUxhYmVsc1wiLFxuICBcIkNlbGxGcmFtZU1hcmdpbnNcIixcbiAgXCJDZWxsR3JvdXBcIixcbiAgXCJDZWxsR3JvdXBEYXRhXCIsXG4gIFwiQ2VsbEdyb3VwaW5nXCIsXG4gIFwiQ2VsbEdyb3VwaW5nUnVsZXNcIixcbiAgXCJDZWxsSG9yaXpvbnRhbFNjcm9sbGluZ1wiLFxuICBcIkNlbGxJRFwiLFxuICBcIkNlbGxMYWJlbFwiLFxuICBcIkNlbGxMYWJlbEF1dG9EZWxldGVcIixcbiAgXCJDZWxsTGFiZWxNYXJnaW5zXCIsXG4gIFwiQ2VsbExhYmVsUG9zaXRpb25pbmdcIixcbiAgXCJDZWxsTGFiZWxTdHlsZVwiLFxuICBcIkNlbGxMYWJlbFRlbXBsYXRlXCIsXG4gIFwiQ2VsbE1hcmdpbnNcIixcbiAgXCJDZWxsT2JqZWN0XCIsXG4gIFwiQ2VsbE9wZW5cIixcbiAgXCJDZWxsUHJpbnRcIixcbiAgXCJDZWxsUHJvbG9nXCIsXG4gIFwiQ2VsbHNcIixcbiAgXCJDZWxsU2l6ZVwiLFxuICBcIkNlbGxTdHlsZVwiLFxuICBcIkNlbGxUYWdzXCIsXG4gIFwiQ2VsbHVsYXJBdXRvbWF0b25cIixcbiAgXCJDZW5zb3JlZERpc3RyaWJ1dGlvblwiLFxuICBcIkNlbnNvcmluZ1wiLFxuICBcIkNlbnRlclwiLFxuICBcIkNlbnRlckFycmF5XCIsXG4gIFwiQ2VudGVyRG90XCIsXG4gIFwiQ2VudHJhbEZlYXR1cmVcIixcbiAgXCJDZW50cmFsTW9tZW50XCIsXG4gIFwiQ2VudHJhbE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvblwiLFxuICBcIkNlcHN0cm9ncmFtXCIsXG4gIFwiQ2Vwc3Ryb2dyYW1BcnJheVwiLFxuICBcIkNlcHN0cnVtQXJyYXlcIixcbiAgXCJDRm9ybVwiLFxuICBcIkNoYW1wZXJub3duZU51bWJlclwiLFxuICBcIkNoYW5nZU9wdGlvbnNcIixcbiAgXCJDaGFubmVsQmFzZVwiLFxuICBcIkNoYW5uZWxCcm9rZXJBY3Rpb25cIixcbiAgXCJDaGFubmVsRGF0YWJpblwiLFxuICBcIkNoYW5uZWxIaXN0b3J5TGVuZ3RoXCIsXG4gIFwiQ2hhbm5lbExpc3RlblwiLFxuICBcIkNoYW5uZWxMaXN0ZW5lclwiLFxuICBcIkNoYW5uZWxMaXN0ZW5lcnNcIixcbiAgXCJDaGFubmVsTGlzdGVuZXJXYWl0XCIsXG4gIFwiQ2hhbm5lbE9iamVjdFwiLFxuICBcIkNoYW5uZWxQcmVTZW5kRnVuY3Rpb25cIixcbiAgXCJDaGFubmVsUmVjZWl2ZXJGdW5jdGlvblwiLFxuICBcIkNoYW5uZWxTZW5kXCIsXG4gIFwiQ2hhbm5lbFN1YnNjcmliZXJzXCIsXG4gIFwiQ2hhblZlc2VCaW5hcml6ZVwiLFxuICBcIkNoYXJhY3RlclwiLFxuICBcIkNoYXJhY3RlckNvdW50c1wiLFxuICBcIkNoYXJhY3RlckVuY29kaW5nXCIsXG4gIFwiQ2hhcmFjdGVyRW5jb2RpbmdzUGF0aFwiLFxuICBcIkNoYXJhY3RlcmlzdGljRnVuY3Rpb25cIixcbiAgXCJDaGFyYWN0ZXJpc3RpY1BvbHlub21pYWxcIixcbiAgXCJDaGFyYWN0ZXJOYW1lXCIsXG4gIFwiQ2hhcmFjdGVyTm9ybWFsaXplXCIsXG4gIFwiQ2hhcmFjdGVyUmFuZ2VcIixcbiAgXCJDaGFyYWN0ZXJzXCIsXG4gIFwiQ2hhcnRCYXNlU3R5bGVcIixcbiAgXCJDaGFydEVsZW1lbnREYXRhXCIsXG4gIFwiQ2hhcnRFbGVtZW50RGF0YUZ1bmN0aW9uXCIsXG4gIFwiQ2hhcnRFbGVtZW50RnVuY3Rpb25cIixcbiAgXCJDaGFydEVsZW1lbnRzXCIsXG4gIFwiQ2hhcnRMYWJlbHNcIixcbiAgXCJDaGFydExheW91dFwiLFxuICBcIkNoYXJ0TGVnZW5kc1wiLFxuICBcIkNoYXJ0U3R5bGVcIixcbiAgXCJDaGVieXNoZXYxRmlsdGVyTW9kZWxcIixcbiAgXCJDaGVieXNoZXYyRmlsdGVyTW9kZWxcIixcbiAgXCJDaGVieXNoZXZEaXN0YW5jZVwiLFxuICBcIkNoZWJ5c2hldlRcIixcbiAgXCJDaGVieXNoZXZVXCIsXG4gIFwiQ2hlY2tcIixcbiAgXCJDaGVja0Fib3J0XCIsXG4gIFwiQ2hlY2tBbGxcIixcbiAgXCJDaGVja2JveFwiLFxuICBcIkNoZWNrYm94QmFyXCIsXG4gIFwiQ2hlY2tib3hCb3hcIixcbiAgXCJDaGVja2JveEJveE9wdGlvbnNcIixcbiAgXCJDaGVtaWNhbERhdGFcIixcbiAgXCJDaGVzc2JvYXJkRGlzdGFuY2VcIixcbiAgXCJDaGlEaXN0cmlidXRpb25cIixcbiAgXCJDaGluZXNlUmVtYWluZGVyXCIsXG4gIFwiQ2hpU3F1YXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiQ2hvaWNlQnV0dG9uc1wiLFxuICBcIkNob2ljZURpYWxvZ1wiLFxuICBcIkNob2xlc2t5RGVjb21wb3NpdGlvblwiLFxuICBcIkNob3BcIixcbiAgXCJDaHJvbWF0aWNpdHlQbG90XCIsXG4gIFwiQ2hyb21hdGljaXR5UGxvdDNEXCIsXG4gIFwiQ2hyb21hdGljUG9seW5vbWlhbFwiLFxuICBcIkNpcmNsZVwiLFxuICBcIkNpcmNsZUJveFwiLFxuICBcIkNpcmNsZURvdFwiLFxuICBcIkNpcmNsZU1pbnVzXCIsXG4gIFwiQ2lyY2xlUGx1c1wiLFxuICBcIkNpcmNsZVBvaW50c1wiLFxuICBcIkNpcmNsZVRocm91Z2hcIixcbiAgXCJDaXJjbGVUaW1lc1wiLFxuICBcIkNpcmN1bGFudEdyYXBoXCIsXG4gIFwiQ2lyY3VsYXJPcnRob2dvbmFsTWF0cml4RGlzdHJpYnV0aW9uXCIsXG4gIFwiQ2lyY3VsYXJRdWF0ZXJuaW9uTWF0cml4RGlzdHJpYnV0aW9uXCIsXG4gIFwiQ2lyY3VsYXJSZWFsTWF0cml4RGlzdHJpYnV0aW9uXCIsXG4gIFwiQ2lyY3VsYXJTeW1wbGVjdGljTWF0cml4RGlzdHJpYnV0aW9uXCIsXG4gIFwiQ2lyY3VsYXJVbml0YXJ5TWF0cml4RGlzdHJpYnV0aW9uXCIsXG4gIFwiQ2lyY3Vtc3BoZXJlXCIsXG4gIFwiQ2l0eURhdGFcIixcbiAgXCJDbGFzc2lmaWVyRnVuY3Rpb25cIixcbiAgXCJDbGFzc2lmaWVySW5mb3JtYXRpb25cIixcbiAgXCJDbGFzc2lmaWVyTWVhc3VyZW1lbnRzXCIsXG4gIFwiQ2xhc3NpZmllck1lYXN1cmVtZW50c09iamVjdFwiLFxuICBcIkNsYXNzaWZ5XCIsXG4gIFwiQ2xhc3NQcmlvcnNcIixcbiAgXCJDbGVhclwiLFxuICBcIkNsZWFyQWxsXCIsXG4gIFwiQ2xlYXJBdHRyaWJ1dGVzXCIsXG4gIFwiQ2xlYXJDb29raWVzXCIsXG4gIFwiQ2xlYXJQZXJtaXNzaW9uc1wiLFxuICBcIkNsZWFyU3lzdGVtQ2FjaGVcIixcbiAgXCJDbGVic2NoR29yZGFuXCIsXG4gIFwiQ2xpY2tQYW5lXCIsXG4gIFwiQ2xpcFwiLFxuICBcIkNsaXBib2FyZE5vdGVib29rXCIsXG4gIFwiQ2xpcEZpbGxcIixcbiAgXCJDbGlwcGluZ1N0eWxlXCIsXG4gIFwiQ2xpcFBsYW5lc1wiLFxuICBcIkNsaXBQbGFuZXNTdHlsZVwiLFxuICBcIkNsaXBSYW5nZVwiLFxuICBcIkNsb2NrXCIsXG4gIFwiQ2xvY2tHYXVnZVwiLFxuICBcIkNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbFwiLFxuICBcIkNsb3NlXCIsXG4gIFwiQ2xvc2VkXCIsXG4gIFwiQ2xvc2VLZXJuZWxzXCIsXG4gIFwiQ2xvc2VuZXNzQ2VudHJhbGl0eVwiLFxuICBcIkNsb3NpbmdcIixcbiAgXCJDbG9zaW5nQXV0b1NhdmVcIixcbiAgXCJDbG9zaW5nRXZlbnRcIixcbiAgXCJDbG9zaW5nU2F2ZURpYWxvZ1wiLFxuICBcIkNsb3VkQWNjb3VudERhdGFcIixcbiAgXCJDbG91ZEJhc2VcIixcbiAgXCJDbG91ZENvbm5lY3RcIixcbiAgXCJDbG91ZENvbm5lY3Rpb25zXCIsXG4gIFwiQ2xvdWREZXBsb3lcIixcbiAgXCJDbG91ZERpcmVjdG9yeVwiLFxuICBcIkNsb3VkRGlzY29ubmVjdFwiLFxuICBcIkNsb3VkRXZhbHVhdGVcIixcbiAgXCJDbG91ZEV4cG9ydFwiLFxuICBcIkNsb3VkRXhwcmVzc2lvblwiLFxuICBcIkNsb3VkRXhwcmVzc2lvbnNcIixcbiAgXCJDbG91ZEZ1bmN0aW9uXCIsXG4gIFwiQ2xvdWRHZXRcIixcbiAgXCJDbG91ZEltcG9ydFwiLFxuICBcIkNsb3VkTG9nZ2luZ0RhdGFcIixcbiAgXCJDbG91ZE9iamVjdFwiLFxuICBcIkNsb3VkT2JqZWN0SW5mb3JtYXRpb25cIixcbiAgXCJDbG91ZE9iamVjdEluZm9ybWF0aW9uRGF0YVwiLFxuICBcIkNsb3VkT2JqZWN0TmFtZUZvcm1hdFwiLFxuICBcIkNsb3VkT2JqZWN0c1wiLFxuICBcIkNsb3VkT2JqZWN0VVJMVHlwZVwiLFxuICBcIkNsb3VkUHVibGlzaFwiLFxuICBcIkNsb3VkUHV0XCIsXG4gIFwiQ2xvdWRSZW5kZXJpbmdNZXRob2RcIixcbiAgXCJDbG91ZFNhdmVcIixcbiAgXCJDbG91ZFNoYXJlXCIsXG4gIFwiQ2xvdWRTdWJtaXRcIixcbiAgXCJDbG91ZFN5bWJvbFwiLFxuICBcIkNsb3VkVW5zaGFyZVwiLFxuICBcIkNsb3VkVXNlcklEXCIsXG4gIFwiQ2x1c3RlckNsYXNzaWZ5XCIsXG4gIFwiQ2x1c3RlckRpc3NpbWlsYXJpdHlGdW5jdGlvblwiLFxuICBcIkNsdXN0ZXJpbmdDb21wb25lbnRzXCIsXG4gIFwiQ2x1c3RlcmluZ1RyZWVcIixcbiAgXCJDTVlLQ29sb3JcIixcbiAgXCJDb2Fyc2VcIixcbiAgXCJDb2RlQXNzaXN0T3B0aW9uc1wiLFxuICBcIkNvZWZmaWNpZW50XCIsXG4gIFwiQ29lZmZpY2llbnRBcnJheXNcIixcbiAgXCJDb2VmZmljaWVudERvbWFpblwiLFxuICBcIkNvZWZmaWNpZW50TGlzdFwiLFxuICBcIkNvZWZmaWNpZW50UnVsZXNcIixcbiAgXCJDb2lmbGV0V2F2ZWxldFwiLFxuICBcIkNvbGxlY3RcIixcbiAgXCJDb2xvblwiLFxuICBcIkNvbG9uRm9ybVwiLFxuICBcIkNvbG9yQmFsYW5jZVwiLFxuICBcIkNvbG9yQ29tYmluZVwiLFxuICBcIkNvbG9yQ29udmVydFwiLFxuICBcIkNvbG9yQ292ZXJhZ2VcIixcbiAgXCJDb2xvckRhdGFcIixcbiAgXCJDb2xvckRhdGFGdW5jdGlvblwiLFxuICBcIkNvbG9yRGV0ZWN0XCIsXG4gIFwiQ29sb3JEaXN0YW5jZVwiLFxuICBcIkNvbG9yRnVuY3Rpb25cIixcbiAgXCJDb2xvckZ1bmN0aW9uU2NhbGluZ1wiLFxuICBcIkNvbG9yaXplXCIsXG4gIFwiQ29sb3JOZWdhdGVcIixcbiAgXCJDb2xvck91dHB1dFwiLFxuICBcIkNvbG9yUHJvZmlsZURhdGFcIixcbiAgXCJDb2xvclFcIixcbiAgXCJDb2xvclF1YW50aXplXCIsXG4gIFwiQ29sb3JSZXBsYWNlXCIsXG4gIFwiQ29sb3JSdWxlc1wiLFxuICBcIkNvbG9yU2VsZWN0b3JTZXR0aW5nc1wiLFxuICBcIkNvbG9yU2VwYXJhdGVcIixcbiAgXCJDb2xvclNldHRlclwiLFxuICBcIkNvbG9yU2V0dGVyQm94XCIsXG4gIFwiQ29sb3JTZXR0ZXJCb3hPcHRpb25zXCIsXG4gIFwiQ29sb3JTbGlkZXJcIixcbiAgXCJDb2xvcnNOZWFyXCIsXG4gIFwiQ29sb3JTcGFjZVwiLFxuICBcIkNvbG9yVG9uZU1hcHBpbmdcIixcbiAgXCJDb2x1bW5cIixcbiAgXCJDb2x1bW5BbGlnbm1lbnRzXCIsXG4gIFwiQ29sdW1uQmFja2dyb3VuZHNcIixcbiAgXCJDb2x1bW5Gb3JtXCIsXG4gIFwiQ29sdW1uTGluZXNcIixcbiAgXCJDb2x1bW5zRXF1YWxcIixcbiAgXCJDb2x1bW5TcGFjaW5nc1wiLFxuICBcIkNvbHVtbldpZHRoc1wiLFxuICBcIkNvbWJpbmVkRW50aXR5Q2xhc3NcIixcbiAgXCJDb21iaW5lckZ1bmN0aW9uXCIsXG4gIFwiQ29tZXREYXRhXCIsXG4gIFwiQ29tbW9uRGVmYXVsdEZvcm1hdFR5cGVzXCIsXG4gIFwiQ29tbW9uZXN0XCIsXG4gIFwiQ29tbW9uZXN0RmlsdGVyXCIsXG4gIFwiQ29tbW9uTmFtZVwiLFxuICBcIkNvbW1vblVuaXRzXCIsXG4gIFwiQ29tbXVuaXR5Qm91bmRhcnlTdHlsZVwiLFxuICBcIkNvbW11bml0eUdyYXBoUGxvdFwiLFxuICBcIkNvbW11bml0eUxhYmVsc1wiLFxuICBcIkNvbW11bml0eVJlZ2lvblN0eWxlXCIsXG4gIFwiQ29tcGFueURhdGFcIixcbiAgXCJDb21wYXRpYmxlVW5pdFFcIixcbiAgXCJDb21waWxhdGlvbk9wdGlvbnNcIixcbiAgXCJDb21waWxhdGlvblRhcmdldFwiLFxuICBcIkNvbXBpbGVcIixcbiAgXCJDb21waWxlZFwiLFxuICBcIkNvbXBpbGVkQ29kZUZ1bmN0aW9uXCIsXG4gIFwiQ29tcGlsZWRGdW5jdGlvblwiLFxuICBcIkNvbXBpbGVyT3B0aW9uc1wiLFxuICBcIkNvbXBsZW1lbnRcIixcbiAgXCJDb21wbGVtZW50ZWRFbnRpdHlDbGFzc1wiLFxuICBcIkNvbXBsZXRlR3JhcGhcIixcbiAgXCJDb21wbGV0ZUdyYXBoUVwiLFxuICBcIkNvbXBsZXRlS2FyeVRyZWVcIixcbiAgXCJDb21wbGV0aW9uc0xpc3RQYWNrZXRcIixcbiAgXCJDb21wbGV4XCIsXG4gIFwiQ29tcGxleENvbnRvdXJQbG90XCIsXG4gIFwiQ29tcGxleGVzXCIsXG4gIFwiQ29tcGxleEV4cGFuZFwiLFxuICBcIkNvbXBsZXhJbmZpbml0eVwiLFxuICBcIkNvbXBsZXhpdHlGdW5jdGlvblwiLFxuICBcIkNvbXBsZXhMaXN0UGxvdFwiLFxuICBcIkNvbXBsZXhQbG90XCIsXG4gIFwiQ29tcGxleFBsb3QzRFwiLFxuICBcIkNvbXBsZXhSZWdpb25QbG90XCIsXG4gIFwiQ29tcGxleFN0cmVhbVBsb3RcIixcbiAgXCJDb21wbGV4VmVjdG9yUGxvdFwiLFxuICBcIkNvbXBvbmVudE1lYXN1cmVtZW50c1wiLFxuICBcIkNvbXBvbmVudHdpc2VDb250ZXh0TWVudVwiLFxuICBcIkNvbXBvc2VcIixcbiAgXCJDb21wb3NlTGlzdFwiLFxuICBcIkNvbXBvc2VTZXJpZXNcIixcbiAgXCJDb21wb3NpdGVRXCIsXG4gIFwiQ29tcG9zaXRpb25cIixcbiAgXCJDb21wb3VuZEVsZW1lbnRcIixcbiAgXCJDb21wb3VuZEV4cHJlc3Npb25cIixcbiAgXCJDb21wb3VuZFBvaXNzb25EaXN0cmlidXRpb25cIixcbiAgXCJDb21wb3VuZFBvaXNzb25Qcm9jZXNzXCIsXG4gIFwiQ29tcG91bmRSZW5ld2FsUHJvY2Vzc1wiLFxuICBcIkNvbXByZXNzXCIsXG4gIFwiQ29tcHJlc3NlZERhdGFcIixcbiAgXCJDb21wcmVzc2lvbkxldmVsXCIsXG4gIFwiQ29tcHV0ZVVuY2VydGFpbnR5XCIsXG4gIFwiQ29uZGl0aW9uXCIsXG4gIFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gIFwiQ29uZGl0aW9uZWRcIixcbiAgXCJDb25lXCIsXG4gIFwiQ29uZUJveFwiLFxuICBcIkNvbmZpZGVuY2VMZXZlbFwiLFxuICBcIkNvbmZpZGVuY2VSYW5nZVwiLFxuICBcIkNvbmZpZGVuY2VUcmFuc2Zvcm1cIixcbiAgXCJDb25maWd1cmF0aW9uUGF0aFwiLFxuICBcIkNvbmZvcm1BdWRpb1wiLFxuICBcIkNvbmZvcm1JbWFnZXNcIixcbiAgXCJDb25ncnVlbnRcIixcbiAgXCJDb25pY0h1bGxSZWdpb25cIixcbiAgXCJDb25pY0h1bGxSZWdpb24zREJveFwiLFxuICBcIkNvbmljSHVsbFJlZ2lvbkJveFwiLFxuICBcIkNvbmljT3B0aW1pemF0aW9uXCIsXG4gIFwiQ29uanVnYXRlXCIsXG4gIFwiQ29uanVnYXRlVHJhbnNwb3NlXCIsXG4gIFwiQ29uanVuY3Rpb25cIixcbiAgXCJDb25uZWN0XCIsXG4gIFwiQ29ubmVjdGVkQ29tcG9uZW50c1wiLFxuICBcIkNvbm5lY3RlZEdyYXBoQ29tcG9uZW50c1wiLFxuICBcIkNvbm5lY3RlZEdyYXBoUVwiLFxuICBcIkNvbm5lY3RlZE1lc2hDb21wb25lbnRzXCIsXG4gIFwiQ29ubmVjdGVkTW9sZWN1bGVDb21wb25lbnRzXCIsXG4gIFwiQ29ubmVjdGVkTW9sZWN1bGVRXCIsXG4gIFwiQ29ubmVjdGlvblNldHRpbmdzXCIsXG4gIFwiQ29ubmVjdExpYnJhcnlDYWxsYmFja0Z1bmN0aW9uXCIsXG4gIFwiQ29ubmVjdFN5c3RlbU1vZGVsQ29tcG9uZW50c1wiLFxuICBcIkNvbm5lc1dpbmRvd1wiLFxuICBcIkNvbm92ZXJUZXN0XCIsXG4gIFwiQ29uc29sZU1lc3NhZ2VcIixcbiAgXCJDb25zb2xlTWVzc2FnZVBhY2tldFwiLFxuICBcIkNvbnN0YW50XCIsXG4gIFwiQ29uc3RhbnRBcnJheVwiLFxuICBcIkNvbnN0YW50QXJyYXlMYXllclwiLFxuICBcIkNvbnN0YW50SW1hZ2VcIixcbiAgXCJDb25zdGFudFBsdXNMYXllclwiLFxuICBcIkNvbnN0YW50UmVnaW9uUVwiLFxuICBcIkNvbnN0YW50c1wiLFxuICBcIkNvbnN0YW50VGltZXNMYXllclwiLFxuICBcIkNvbnN0ZWxsYXRpb25EYXRhXCIsXG4gIFwiQ29uc3RyYWluZWRNYXhcIixcbiAgXCJDb25zdHJhaW5lZE1pblwiLFxuICBcIkNvbnN0cnVjdFwiLFxuICBcIkNvbnRhaW5pbmdcIixcbiAgXCJDb250YWluc0FsbFwiLFxuICBcIkNvbnRhaW5zQW55XCIsXG4gIFwiQ29udGFpbnNFeGFjdGx5XCIsXG4gIFwiQ29udGFpbnNOb25lXCIsXG4gIFwiQ29udGFpbnNPbmx5XCIsXG4gIFwiQ29udGVudEZpZWxkT3B0aW9uc1wiLFxuICBcIkNvbnRlbnRMb2NhdGlvbkZ1bmN0aW9uXCIsXG4gIFwiQ29udGVudE9iamVjdFwiLFxuICBcIkNvbnRlbnRQYWRkaW5nXCIsXG4gIFwiQ29udGVudHNCb3VuZGluZ0JveFwiLFxuICBcIkNvbnRlbnRTZWxlY3RhYmxlXCIsXG4gIFwiQ29udGVudFNpemVcIixcbiAgXCJDb250ZXh0XCIsXG4gIFwiQ29udGV4dE1lbnVcIixcbiAgXCJDb250ZXh0c1wiLFxuICBcIkNvbnRleHRUb0ZpbGVOYW1lXCIsXG4gIFwiQ29udGludWF0aW9uXCIsXG4gIFwiQ29udGludWVcIixcbiAgXCJDb250aW51ZWRGcmFjdGlvblwiLFxuICBcIkNvbnRpbnVlZEZyYWN0aW9uS1wiLFxuICBcIkNvbnRpbnVvdXNBY3Rpb25cIixcbiAgXCJDb250aW51b3VzTWFya292UHJvY2Vzc1wiLFxuICBcIkNvbnRpbnVvdXNUYXNrXCIsXG4gIFwiQ29udGludW91c1RpbWVNb2RlbFFcIixcbiAgXCJDb250aW51b3VzV2F2ZWxldERhdGFcIixcbiAgXCJDb250aW51b3VzV2F2ZWxldFRyYW5zZm9ybVwiLFxuICBcIkNvbnRvdXJEZXRlY3RcIixcbiAgXCJDb250b3VyR3JhcGhpY3NcIixcbiAgXCJDb250b3VySW50ZWdyYWxcIixcbiAgXCJDb250b3VyTGFiZWxzXCIsXG4gIFwiQ29udG91ckxpbmVzXCIsXG4gIFwiQ29udG91clBsb3RcIixcbiAgXCJDb250b3VyUGxvdDNEXCIsXG4gIFwiQ29udG91cnNcIixcbiAgXCJDb250b3VyU2hhZGluZ1wiLFxuICBcIkNvbnRvdXJTbW9vdGhpbmdcIixcbiAgXCJDb250b3VyU3R5bGVcIixcbiAgXCJDb250cmFoYXJtb25pY01lYW5cIixcbiAgXCJDb250cmFzdGl2ZUxvc3NMYXllclwiLFxuICBcIkNvbnRyb2xcIixcbiAgXCJDb250cm9sQWN0aXZlXCIsXG4gIFwiQ29udHJvbEFsaWdubWVudFwiLFxuICBcIkNvbnRyb2xHcm91cENvbnRlbnRzQm94XCIsXG4gIFwiQ29udHJvbGxhYmlsaXR5R3JhbWlhblwiLFxuICBcIkNvbnRyb2xsYWJpbGl0eU1hdHJpeFwiLFxuICBcIkNvbnRyb2xsYWJsZURlY29tcG9zaXRpb25cIixcbiAgXCJDb250cm9sbGFibGVNb2RlbFFcIixcbiAgXCJDb250cm9sbGVyRHVyYXRpb25cIixcbiAgXCJDb250cm9sbGVySW5mb3JtYXRpb25cIixcbiAgXCJDb250cm9sbGVySW5mb3JtYXRpb25EYXRhXCIsXG4gIFwiQ29udHJvbGxlckxpbmtpbmdcIixcbiAgXCJDb250cm9sbGVyTWFuaXB1bGF0ZVwiLFxuICBcIkNvbnRyb2xsZXJNZXRob2RcIixcbiAgXCJDb250cm9sbGVyUGF0aFwiLFxuICBcIkNvbnRyb2xsZXJTdGF0ZVwiLFxuICBcIkNvbnRyb2xQbGFjZW1lbnRcIixcbiAgXCJDb250cm9sc1JlbmRlcmluZ1wiLFxuICBcIkNvbnRyb2xUeXBlXCIsXG4gIFwiQ29udmVyZ2VudHNcIixcbiAgXCJDb252ZXJzaW9uT3B0aW9uc1wiLFxuICBcIkNvbnZlcnNpb25SdWxlc1wiLFxuICBcIkNvbnZlcnRUb0JpdG1hcFBhY2tldFwiLFxuICBcIkNvbnZlcnRUb1Bvc3RTY3JpcHRcIixcbiAgXCJDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0XCIsXG4gIFwiQ29udmV4SHVsbE1lc2hcIixcbiAgXCJDb252ZXhQb2x5Z29uUVwiLFxuICBcIkNvbnZleFBvbHloZWRyb25RXCIsXG4gIFwiQ29udm9sdXRpb25MYXllclwiLFxuICBcIkNvbnZvbHZlXCIsXG4gIFwiQ29ud2F5R3JvdXBDbzFcIixcbiAgXCJDb253YXlHcm91cENvMlwiLFxuICBcIkNvbndheUdyb3VwQ28zXCIsXG4gIFwiQ29va2llRnVuY3Rpb25cIixcbiAgXCJDb29raWVzXCIsXG4gIFwiQ29vcmRpbmF0ZUJvdW5kaW5nQm94XCIsXG4gIFwiQ29vcmRpbmF0ZUJvdW5kaW5nQm94QXJyYXlcIixcbiAgXCJDb29yZGluYXRlQm91bmRzXCIsXG4gIFwiQ29vcmRpbmF0ZUJvdW5kc0FycmF5XCIsXG4gIFwiQ29vcmRpbmF0ZUNoYXJ0RGF0YVwiLFxuICBcIkNvb3JkaW5hdGVzVG9vbE9wdGlvbnNcIixcbiAgXCJDb29yZGluYXRlVHJhbnNmb3JtXCIsXG4gIFwiQ29vcmRpbmF0ZVRyYW5zZm9ybURhdGFcIixcbiAgXCJDb3ByaW1lUVwiLFxuICBcIkNvcHJvZHVjdFwiLFxuICBcIkNvcHVsYURpc3RyaWJ1dGlvblwiLFxuICBcIkNvcHlhYmxlXCIsXG4gIFwiQ29weURhdGFiaW5cIixcbiAgXCJDb3B5RGlyZWN0b3J5XCIsXG4gIFwiQ29weUZpbGVcIixcbiAgXCJDb3B5VGFnXCIsXG4gIFwiQ29weVRvQ2xpcGJvYXJkXCIsXG4gIFwiQ29ybmVyRmlsdGVyXCIsXG4gIFwiQ29ybmVyTmVpZ2hib3JzXCIsXG4gIFwiQ29ycmVsYXRpb25cIixcbiAgXCJDb3JyZWxhdGlvbkRpc3RhbmNlXCIsXG4gIFwiQ29ycmVsYXRpb25GdW5jdGlvblwiLFxuICBcIkNvcnJlbGF0aW9uVGVzdFwiLFxuICBcIkNvc1wiLFxuICBcIkNvc2hcIixcbiAgXCJDb3NoSW50ZWdyYWxcIixcbiAgXCJDb3NpbmVEaXN0YW5jZVwiLFxuICBcIkNvc2luZVdpbmRvd1wiLFxuICBcIkNvc0ludGVncmFsXCIsXG4gIFwiQ290XCIsXG4gIFwiQ290aFwiLFxuICBcIkNvdW50XCIsXG4gIFwiQ291bnREaXN0aW5jdFwiLFxuICBcIkNvdW50RGlzdGluY3RCeVwiLFxuICBcIkNvdW50ZXJBc3NpZ25tZW50c1wiLFxuICBcIkNvdW50ZXJCb3hcIixcbiAgXCJDb3VudGVyQm94T3B0aW9uc1wiLFxuICBcIkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxcIixcbiAgXCJDb3VudGVyRXZhbHVhdG9yXCIsXG4gIFwiQ291bnRlckZ1bmN0aW9uXCIsXG4gIFwiQ291bnRlckluY3JlbWVudHNcIixcbiAgXCJDb3VudGVyU3R5bGVcIixcbiAgXCJDb3VudGVyU3R5bGVNZW51TGlzdGluZ1wiLFxuICBcIkNvdW50Um9vdHNcIixcbiAgXCJDb3VudHJ5RGF0YVwiLFxuICBcIkNvdW50c1wiLFxuICBcIkNvdW50c0J5XCIsXG4gIFwiQ292YXJpYW5jZVwiLFxuICBcIkNvdmFyaWFuY2VFc3RpbWF0b3JGdW5jdGlvblwiLFxuICBcIkNvdmFyaWFuY2VGdW5jdGlvblwiLFxuICBcIkNveGlhbkRpc3RyaWJ1dGlvblwiLFxuICBcIkNveEluZ2Vyc29sbFJvc3NQcm9jZXNzXCIsXG4gIFwiQ294TW9kZWxcIixcbiAgXCJDb3hNb2RlbEZpdFwiLFxuICBcIkNyYW1lclZvbk1pc2VzVGVzdFwiLFxuICBcIkNyZWF0ZUFyY2hpdmVcIixcbiAgXCJDcmVhdGVDZWxsSURcIixcbiAgXCJDcmVhdGVDaGFubmVsXCIsXG4gIFwiQ3JlYXRlQ2xvdWRFeHByZXNzaW9uXCIsXG4gIFwiQ3JlYXRlRGF0YWJpblwiLFxuICBcIkNyZWF0ZURhdGFTdHJ1Y3R1cmVcIixcbiAgXCJDcmVhdGVEYXRhU3lzdGVtTW9kZWxcIixcbiAgXCJDcmVhdGVEaWFsb2dcIixcbiAgXCJDcmVhdGVEaXJlY3RvcnlcIixcbiAgXCJDcmVhdGVEb2N1bWVudFwiLFxuICBcIkNyZWF0ZUZpbGVcIixcbiAgXCJDcmVhdGVJbnRlcm1lZGlhdGVEaXJlY3Rvcmllc1wiLFxuICBcIkNyZWF0ZU1hbmFnZWRMaWJyYXJ5RXhwcmVzc2lvblwiLFxuICBcIkNyZWF0ZU5vdGVib29rXCIsXG4gIFwiQ3JlYXRlUGFjbGV0QXJjaGl2ZVwiLFxuICBcIkNyZWF0ZVBhbGV0dGVcIixcbiAgXCJDcmVhdGVQYWxldHRlUGFja2V0XCIsXG4gIFwiQ3JlYXRlUGVybWlzc2lvbnNHcm91cFwiLFxuICBcIkNyZWF0ZVNjaGVkdWxlZFRhc2tcIixcbiAgXCJDcmVhdGVTZWFyY2hJbmRleFwiLFxuICBcIkNyZWF0ZVN5c3RlbU1vZGVsXCIsXG4gIFwiQ3JlYXRlVGVtcG9yYXJ5XCIsXG4gIFwiQ3JlYXRlVVVJRFwiLFxuICBcIkNyZWF0ZVdpbmRvd1wiLFxuICBcIkNyaXRlcmlvbkZ1bmN0aW9uXCIsXG4gIFwiQ3JpdGljYWxpdHlGYWlsdXJlSW1wb3J0YW5jZVwiLFxuICBcIkNyaXRpY2FsaXR5U3VjY2Vzc0ltcG9ydGFuY2VcIixcbiAgXCJDcml0aWNhbFNlY3Rpb25cIixcbiAgXCJDcm9zc1wiLFxuICBcIkNyb3NzRW50cm9weUxvc3NMYXllclwiLFxuICBcIkNyb3NzaW5nQ291bnRcIixcbiAgXCJDcm9zc2luZ0RldGVjdFwiLFxuICBcIkNyb3NzaW5nUG9seWdvblwiLFxuICBcIkNyb3NzTWF0cml4XCIsXG4gIFwiQ3NjXCIsXG4gIFwiQ3NjaFwiLFxuICBcIkNUQ0xvc3NMYXllclwiLFxuICBcIkN1YmVcIixcbiAgXCJDdWJlUm9vdFwiLFxuICBcIkN1Ymljc1wiLFxuICBcIkN1Ym9pZFwiLFxuICBcIkN1Ym9pZEJveFwiLFxuICBcIkN1bXVsYW50XCIsXG4gIFwiQ3VtdWxhbnRHZW5lcmF0aW5nRnVuY3Rpb25cIixcbiAgXCJDdXBcIixcbiAgXCJDdXBDYXBcIixcbiAgXCJDdXJsXCIsXG4gIFwiQ3VybHlEb3VibGVRdW90ZVwiLFxuICBcIkN1cmx5UXVvdGVcIixcbiAgXCJDdXJyZW5jeUNvbnZlcnRcIixcbiAgXCJDdXJyZW50RGF0ZVwiLFxuICBcIkN1cnJlbnRJbWFnZVwiLFxuICBcIkN1cnJlbnRseVNwZWFraW5nUGFja2V0XCIsXG4gIFwiQ3VycmVudE5vdGVib29rSW1hZ2VcIixcbiAgXCJDdXJyZW50U2NyZWVuSW1hZ2VcIixcbiAgXCJDdXJyZW50VmFsdWVcIixcbiAgXCJDdXJyeVwiLFxuICBcIkN1cnJ5QXBwbGllZFwiLFxuICBcIkN1cnZhdHVyZUZsb3dGaWx0ZXJcIixcbiAgXCJDdXJ2ZUNsb3NlZFwiLFxuICBcIkN5YW5cIixcbiAgXCJDeWNsZUdyYXBoXCIsXG4gIFwiQ3ljbGVJbmRleFBvbHlub21pYWxcIixcbiAgXCJDeWNsZXNcIixcbiAgXCJDeWNsaWNHcm91cFwiLFxuICBcIkN5Y2xvdG9taWNcIixcbiAgXCJDeWxpbmRlclwiLFxuICBcIkN5bGluZGVyQm94XCIsXG4gIFwiQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uXCIsXG4gIFwiRFwiLFxuICBcIkRhZ3VtRGlzdHJpYnV0aW9uXCIsXG4gIFwiRGFtRGF0YVwiLFxuICBcIkRhbWVyYXVMZXZlbnNodGVpbkRpc3RhbmNlXCIsXG4gIFwiRGFtcGluZ0ZhY3RvclwiLFxuICBcIkRhcmtlclwiLFxuICBcIkRhc2hlZFwiLFxuICBcIkRhc2hpbmdcIixcbiAgXCJEYXRhYmFzZUNvbm5lY3RcIixcbiAgXCJEYXRhYmFzZURpc2Nvbm5lY3RcIixcbiAgXCJEYXRhYmFzZVJlZmVyZW5jZVwiLFxuICBcIkRhdGFiaW5cIixcbiAgXCJEYXRhYmluQWRkXCIsXG4gIFwiRGF0YWJpblJlbW92ZVwiLFxuICBcIkRhdGFiaW5zXCIsXG4gIFwiRGF0YWJpblVwbG9hZFwiLFxuICBcIkRhdGFDb21wcmVzc2lvblwiLFxuICBcIkRhdGFEaXN0cmlidXRpb25cIixcbiAgXCJEYXRhUmFuZ2VcIixcbiAgXCJEYXRhUmV2ZXJzZWRcIixcbiAgXCJEYXRhc2V0XCIsXG4gIFwiRGF0YXNldERpc3BsYXlQYW5lbFwiLFxuICBcIkRhdGFTdHJ1Y3R1cmVcIixcbiAgXCJEYXRhU3RydWN0dXJlUVwiLFxuICBcIkRhdGVcIixcbiAgXCJEYXRlQm91bmRzXCIsXG4gIFwiRGF0ZWRcIixcbiAgXCJEYXRlRGVsaW1pdGVyc1wiLFxuICBcIkRhdGVEaWZmZXJlbmNlXCIsXG4gIFwiRGF0ZWRVbml0XCIsXG4gIFwiRGF0ZUZvcm1hdFwiLFxuICBcIkRhdGVGdW5jdGlvblwiLFxuICBcIkRhdGVIaXN0b2dyYW1cIixcbiAgXCJEYXRlSW50ZXJ2YWxcIixcbiAgXCJEYXRlTGlzdFwiLFxuICBcIkRhdGVMaXN0TG9nUGxvdFwiLFxuICBcIkRhdGVMaXN0UGxvdFwiLFxuICBcIkRhdGVMaXN0U3RlcFBsb3RcIixcbiAgXCJEYXRlT2JqZWN0XCIsXG4gIFwiRGF0ZU9iamVjdFFcIixcbiAgXCJEYXRlT3ZlcmxhcHNRXCIsXG4gIFwiRGF0ZVBhdHRlcm5cIixcbiAgXCJEYXRlUGx1c1wiLFxuICBcIkRhdGVSYW5nZVwiLFxuICBcIkRhdGVSZWR1Y3Rpb25cIixcbiAgXCJEYXRlU3RyaW5nXCIsXG4gIFwiRGF0ZVRpY2tzRm9ybWF0XCIsXG4gIFwiRGF0ZVZhbHVlXCIsXG4gIFwiRGF0ZVdpdGhpblFcIixcbiAgXCJEYXViZWNoaWVzV2F2ZWxldFwiLFxuICBcIkRhdmlzRGlzdHJpYnV0aW9uXCIsXG4gIFwiRGF3c29uRlwiLFxuICBcIkRheUNvdW50XCIsXG4gIFwiRGF5Q291bnRDb252ZW50aW9uXCIsXG4gIFwiRGF5SGVtaXNwaGVyZVwiLFxuICBcIkRheWxpZ2h0UVwiLFxuICBcIkRheU1hdGNoUVwiLFxuICBcIkRheU5hbWVcIixcbiAgXCJEYXlOaWdodFRlcm1pbmF0b3JcIixcbiAgXCJEYXlQbHVzXCIsXG4gIFwiRGF5UmFuZ2VcIixcbiAgXCJEYXlSb3VuZFwiLFxuICBcIkRlQnJ1aWpuR3JhcGhcIixcbiAgXCJEZUJydWlqblNlcXVlbmNlXCIsXG4gIFwiRGVidWdcIixcbiAgXCJEZWJ1Z1RhZ1wiLFxuICBcIkRlY2FwaXRhbGl6ZVwiLFxuICBcIkRlY2ltYWxcIixcbiAgXCJEZWNpbWFsRm9ybVwiLFxuICBcIkRlY2xhcmVLbm93blN5bWJvbHNcIixcbiAgXCJEZWNsYXJlUGFja2FnZVwiLFxuICBcIkRlY29tcG9zZVwiLFxuICBcIkRlY29udm9sdXRpb25MYXllclwiLFxuICBcIkRlY3JlbWVudFwiLFxuICBcIkRlY3J5cHRcIixcbiAgXCJEZWNyeXB0RmlsZVwiLFxuICBcIkRlZGVraW5kRXRhXCIsXG4gIFwiRGVlcFNwYWNlUHJvYmVEYXRhXCIsXG4gIFwiRGVmYXVsdFwiLFxuICBcIkRlZmF1bHRBeGVzU3R5bGVcIixcbiAgXCJEZWZhdWx0QmFzZVN0eWxlXCIsXG4gIFwiRGVmYXVsdEJveFN0eWxlXCIsXG4gIFwiRGVmYXVsdEJ1dHRvblwiLFxuICBcIkRlZmF1bHRDb2xvclwiLFxuICBcIkRlZmF1bHRDb250cm9sUGxhY2VtZW50XCIsXG4gIFwiRGVmYXVsdER1cGxpY2F0ZUNlbGxTdHlsZVwiLFxuICBcIkRlZmF1bHREdXJhdGlvblwiLFxuICBcIkRlZmF1bHRFbGVtZW50XCIsXG4gIFwiRGVmYXVsdEZhY2VHcmlkc1N0eWxlXCIsXG4gIFwiRGVmYXVsdEZpZWxkSGludFN0eWxlXCIsXG4gIFwiRGVmYXVsdEZvbnRcIixcbiAgXCJEZWZhdWx0Rm9udFByb3BlcnRpZXNcIixcbiAgXCJEZWZhdWx0Rm9ybWF0VHlwZVwiLFxuICBcIkRlZmF1bHRGb3JtYXRUeXBlRm9yU3R5bGVcIixcbiAgXCJEZWZhdWx0RnJhbWVTdHlsZVwiLFxuICBcIkRlZmF1bHRGcmFtZVRpY2tzU3R5bGVcIixcbiAgXCJEZWZhdWx0R3JpZExpbmVzU3R5bGVcIixcbiAgXCJEZWZhdWx0SW5saW5lRm9ybWF0VHlwZVwiLFxuICBcIkRlZmF1bHRJbnB1dEZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0TGFiZWxTdHlsZVwiLFxuICBcIkRlZmF1bHRNZW51U3R5bGVcIixcbiAgXCJEZWZhdWx0TmF0dXJhbExhbmd1YWdlXCIsXG4gIFwiRGVmYXVsdE5ld0NlbGxTdHlsZVwiLFxuICBcIkRlZmF1bHROZXdJbmxpbmVDZWxsU3R5bGVcIixcbiAgXCJEZWZhdWx0Tm90ZWJvb2tcIixcbiAgXCJEZWZhdWx0T3B0aW9uc1wiLFxuICBcIkRlZmF1bHRPdXRwdXRGb3JtYXRUeXBlXCIsXG4gIFwiRGVmYXVsdFByaW50UHJlY2lzaW9uXCIsXG4gIFwiRGVmYXVsdFN0eWxlXCIsXG4gIFwiRGVmYXVsdFN0eWxlRGVmaW5pdGlvbnNcIixcbiAgXCJEZWZhdWx0VGV4dEZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0VGV4dElubGluZUZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0VGlja3NTdHlsZVwiLFxuICBcIkRlZmF1bHRUb29sdGlwU3R5bGVcIixcbiAgXCJEZWZhdWx0VmFsdWVcIixcbiAgXCJEZWZhdWx0VmFsdWVzXCIsXG4gIFwiRGVmZXJcIixcbiAgXCJEZWZpbmVFeHRlcm5hbFwiLFxuICBcIkRlZmluZUlucHV0U3RyZWFtTWV0aG9kXCIsXG4gIFwiRGVmaW5lT3V0cHV0U3RyZWFtTWV0aG9kXCIsXG4gIFwiRGVmaW5lUmVzb3VyY2VGdW5jdGlvblwiLFxuICBcIkRlZmluaXRpb25cIixcbiAgXCJEZWdyZWVcIixcbiAgXCJEZWdyZWVDZW50cmFsaXR5XCIsXG4gIFwiRGVncmVlR3JhcGhEaXN0cmlidXRpb25cIixcbiAgXCJEZWdyZWVMZXhpY29ncmFwaGljXCIsXG4gIFwiRGVncmVlUmV2ZXJzZUxleGljb2dyYXBoaWNcIixcbiAgXCJERWlnZW5zeXN0ZW1cIixcbiAgXCJERWlnZW52YWx1ZXNcIixcbiAgXCJEZWluaXRpYWxpemF0aW9uXCIsXG4gIFwiRGVsXCIsXG4gIFwiRGVsYXVuYXlNZXNoXCIsXG4gIFwiRGVsYXllZFwiLFxuICBcIkRlbGV0YWJsZVwiLFxuICBcIkRlbGV0ZVwiLFxuICBcIkRlbGV0ZUFub21hbGllc1wiLFxuICBcIkRlbGV0ZUJvcmRlckNvbXBvbmVudHNcIixcbiAgXCJEZWxldGVDYXNlc1wiLFxuICBcIkRlbGV0ZUNoYW5uZWxcIixcbiAgXCJEZWxldGVDbG91ZEV4cHJlc3Npb25cIixcbiAgXCJEZWxldGVDb250ZW50c1wiLFxuICBcIkRlbGV0ZURpcmVjdG9yeVwiLFxuICBcIkRlbGV0ZUR1cGxpY2F0ZXNcIixcbiAgXCJEZWxldGVEdXBsaWNhdGVzQnlcIixcbiAgXCJEZWxldGVGaWxlXCIsXG4gIFwiRGVsZXRlTWlzc2luZ1wiLFxuICBcIkRlbGV0ZU9iamVjdFwiLFxuICBcIkRlbGV0ZVBlcm1pc3Npb25zS2V5XCIsXG4gIFwiRGVsZXRlU2VhcmNoSW5kZXhcIixcbiAgXCJEZWxldGVTbWFsbENvbXBvbmVudHNcIixcbiAgXCJEZWxldGVTdG9wd29yZHNcIixcbiAgXCJEZWxldGVXaXRoQ29udGVudHNcIixcbiAgXCJEZWxldGlvbldhcm5pbmdcIixcbiAgXCJEZWxpbWl0ZWRBcnJheVwiLFxuICBcIkRlbGltaXRlZFNlcXVlbmNlXCIsXG4gIFwiRGVsaW1pdGVyXCIsXG4gIFwiRGVsaW1pdGVyRmxhc2hUaW1lXCIsXG4gIFwiRGVsaW1pdGVyTWF0Y2hpbmdcIixcbiAgXCJEZWxpbWl0ZXJzXCIsXG4gIFwiRGVsaXZlcnlGdW5jdGlvblwiLFxuICBcIkRlbmRyb2dyYW1cIixcbiAgXCJEZW5vbWluYXRvclwiLFxuICBcIkRlbnNpdHlHcmFwaGljc1wiLFxuICBcIkRlbnNpdHlIaXN0b2dyYW1cIixcbiAgXCJEZW5zaXR5UGxvdFwiLFxuICBcIkRlbnNpdHlQbG90M0RcIixcbiAgXCJEZXBlbmRlbnRWYXJpYWJsZXNcIixcbiAgXCJEZXBsb3lcIixcbiAgXCJEZXBsb3llZFwiLFxuICBcIkRlcHRoXCIsXG4gIFwiRGVwdGhGaXJzdFNjYW5cIixcbiAgXCJEZXJpdmF0aXZlXCIsXG4gIFwiRGVyaXZhdGl2ZUZpbHRlclwiLFxuICBcIkRlcml2ZWRLZXlcIixcbiAgXCJEZXNjcmlwdG9yU3RhdGVTcGFjZVwiLFxuICBcIkRlc2lnbk1hdHJpeFwiLFxuICBcIkRlc3Ryb3lBZnRlckV2YWx1YXRpb25cIixcbiAgXCJEZXRcIixcbiAgXCJEZXZpY2VDbG9zZVwiLFxuICBcIkRldmljZUNvbmZpZ3VyZVwiLFxuICBcIkRldmljZUV4ZWN1dGVcIixcbiAgXCJEZXZpY2VFeGVjdXRlQXN5bmNocm9ub3VzXCIsXG4gIFwiRGV2aWNlT2JqZWN0XCIsXG4gIFwiRGV2aWNlT3BlblwiLFxuICBcIkRldmljZU9wZW5RXCIsXG4gIFwiRGV2aWNlUmVhZFwiLFxuICBcIkRldmljZVJlYWRCdWZmZXJcIixcbiAgXCJEZXZpY2VSZWFkTGF0ZXN0XCIsXG4gIFwiRGV2aWNlUmVhZExpc3RcIixcbiAgXCJEZXZpY2VSZWFkVGltZVNlcmllc1wiLFxuICBcIkRldmljZXNcIixcbiAgXCJEZXZpY2VTdHJlYW1zXCIsXG4gIFwiRGV2aWNlV3JpdGVcIixcbiAgXCJEZXZpY2VXcml0ZUJ1ZmZlclwiLFxuICBcIkRHYXVzc2lhbldhdmVsZXRcIixcbiAgXCJEaWFjcml0aWNhbFBvc2l0aW9uaW5nXCIsXG4gIFwiRGlhZ29uYWxcIixcbiAgXCJEaWFnb25hbGl6YWJsZU1hdHJpeFFcIixcbiAgXCJEaWFnb25hbE1hdHJpeFwiLFxuICBcIkRpYWdvbmFsTWF0cml4UVwiLFxuICBcIkRpYWxvZ1wiLFxuICBcIkRpYWxvZ0luZGVudFwiLFxuICBcIkRpYWxvZ0lucHV0XCIsXG4gIFwiRGlhbG9nTGV2ZWxcIixcbiAgXCJEaWFsb2dOb3RlYm9va1wiLFxuICBcIkRpYWxvZ1Byb2xvZ1wiLFxuICBcIkRpYWxvZ1JldHVyblwiLFxuICBcIkRpYWxvZ1N5bWJvbHNcIixcbiAgXCJEaWFtb25kXCIsXG4gIFwiRGlhbW9uZE1hdHJpeFwiLFxuICBcIkRpY2VEaXNzaW1pbGFyaXR5XCIsXG4gIFwiRGljdGlvbmFyeUxvb2t1cFwiLFxuICBcIkRpY3Rpb25hcnlXb3JkUVwiLFxuICBcIkRpZmZlcmVuY2VEZWx0YVwiLFxuICBcIkRpZmZlcmVuY2VPcmRlclwiLFxuICBcIkRpZmZlcmVuY2VRdW90aWVudFwiLFxuICBcIkRpZmZlcmVuY2VSb290XCIsXG4gIFwiRGlmZmVyZW5jZVJvb3RSZWR1Y2VcIixcbiAgXCJEaWZmZXJlbmNlc1wiLFxuICBcIkRpZmZlcmVudGlhbERcIixcbiAgXCJEaWZmZXJlbnRpYWxSb290XCIsXG4gIFwiRGlmZmVyZW50aWFsUm9vdFJlZHVjZVwiLFxuICBcIkRpZmZlcmVudGlhdG9yRmlsdGVyXCIsXG4gIFwiRGlnaXRhbFNpZ25hdHVyZVwiLFxuICBcIkRpZ2l0QmxvY2tcIixcbiAgXCJEaWdpdEJsb2NrTWluaW11bVwiLFxuICBcIkRpZ2l0Q2hhcmFjdGVyXCIsXG4gIFwiRGlnaXRDb3VudFwiLFxuICBcIkRpZ2l0UVwiLFxuICBcIkRpaGVkcmFsQW5nbGVcIixcbiAgXCJEaWhlZHJhbEdyb3VwXCIsXG4gIFwiRGlsYXRpb25cIixcbiAgXCJEaW1lbnNpb25hbENvbWJpbmF0aW9uc1wiLFxuICBcIkRpbWVuc2lvbmFsTWVzaENvbXBvbmVudHNcIixcbiAgXCJEaW1lbnNpb25SZWR1Y2VcIixcbiAgXCJEaW1lbnNpb25SZWR1Y2VyRnVuY3Rpb25cIixcbiAgXCJEaW1lbnNpb25SZWR1Y3Rpb25cIixcbiAgXCJEaW1lbnNpb25zXCIsXG4gIFwiRGlyYWNDb21iXCIsXG4gIFwiRGlyYWNEZWx0YVwiLFxuICBcIkRpcmVjdGVkRWRnZVwiLFxuICBcIkRpcmVjdGVkRWRnZXNcIixcbiAgXCJEaXJlY3RlZEdyYXBoXCIsXG4gIFwiRGlyZWN0ZWRHcmFwaFFcIixcbiAgXCJEaXJlY3RlZEluZmluaXR5XCIsXG4gIFwiRGlyZWN0aW9uXCIsXG4gIFwiRGlyZWN0aXZlXCIsXG4gIFwiRGlyZWN0b3J5XCIsXG4gIFwiRGlyZWN0b3J5TmFtZVwiLFxuICBcIkRpcmVjdG9yeVFcIixcbiAgXCJEaXJlY3RvcnlTdGFja1wiLFxuICBcIkRpcmljaGxldEJldGFcIixcbiAgXCJEaXJpY2hsZXRDaGFyYWN0ZXJcIixcbiAgXCJEaXJpY2hsZXRDb25kaXRpb25cIixcbiAgXCJEaXJpY2hsZXRDb252b2x2ZVwiLFxuICBcIkRpcmljaGxldERpc3RyaWJ1dGlvblwiLFxuICBcIkRpcmljaGxldEV0YVwiLFxuICBcIkRpcmljaGxldExcIixcbiAgXCJEaXJpY2hsZXRMYW1iZGFcIixcbiAgXCJEaXJpY2hsZXRUcmFuc2Zvcm1cIixcbiAgXCJEaXJpY2hsZXRXaW5kb3dcIixcbiAgXCJEaXNhYmxlQ29uc29sZVByaW50UGFja2V0XCIsXG4gIFwiRGlzYWJsZUZvcm1hdHRpbmdcIixcbiAgXCJEaXNjcmV0ZUFzeW1wdG90aWNcIixcbiAgXCJEaXNjcmV0ZUNoaXJwWlRyYW5zZm9ybVwiLFxuICBcIkRpc2NyZXRlQ29udm9sdmVcIixcbiAgXCJEaXNjcmV0ZURlbHRhXCIsXG4gIFwiRGlzY3JldGVIYWRhbWFyZFRyYW5zZm9ybVwiLFxuICBcIkRpc2NyZXRlSW5kaWNhdG9yXCIsXG4gIFwiRGlzY3JldGVMaW1pdFwiLFxuICBcIkRpc2NyZXRlTFFFc3RpbWF0b3JHYWluc1wiLFxuICBcIkRpc2NyZXRlTFFSZWd1bGF0b3JHYWluc1wiLFxuICBcIkRpc2NyZXRlTHlhcHVub3ZTb2x2ZVwiLFxuICBcIkRpc2NyZXRlTWFya292UHJvY2Vzc1wiLFxuICBcIkRpc2NyZXRlTWF4TGltaXRcIixcbiAgXCJEaXNjcmV0ZU1pbkxpbWl0XCIsXG4gIFwiRGlzY3JldGVQbG90XCIsXG4gIFwiRGlzY3JldGVQbG90M0RcIixcbiAgXCJEaXNjcmV0ZVJhdGlvXCIsXG4gIFwiRGlzY3JldGVSaWNjYXRpU29sdmVcIixcbiAgXCJEaXNjcmV0ZVNoaWZ0XCIsXG4gIFwiRGlzY3JldGVUaW1lTW9kZWxRXCIsXG4gIFwiRGlzY3JldGVVbmlmb3JtRGlzdHJpYnV0aW9uXCIsXG4gIFwiRGlzY3JldGVWYXJpYWJsZXNcIixcbiAgXCJEaXNjcmV0ZVdhdmVsZXREYXRhXCIsXG4gIFwiRGlzY3JldGVXYXZlbGV0UGFja2V0VHJhbnNmb3JtXCIsXG4gIFwiRGlzY3JldGVXYXZlbGV0VHJhbnNmb3JtXCIsXG4gIFwiRGlzY3JldGl6ZUdyYXBoaWNzXCIsXG4gIFwiRGlzY3JldGl6ZVJlZ2lvblwiLFxuICBcIkRpc2NyaW1pbmFudFwiLFxuICBcIkRpc2pvaW50UVwiLFxuICBcIkRpc2p1bmN0aW9uXCIsXG4gIFwiRGlza1wiLFxuICBcIkRpc2tCb3hcIixcbiAgXCJEaXNrTWF0cml4XCIsXG4gIFwiRGlza1NlZ21lbnRcIixcbiAgXCJEaXNwYXRjaFwiLFxuICBcIkRpc3BhdGNoUVwiLFxuICBcIkRpc3BlcnNpb25Fc3RpbWF0b3JGdW5jdGlvblwiLFxuICBcIkRpc3BsYXlcIixcbiAgXCJEaXNwbGF5QWxsU3RlcHNcIixcbiAgXCJEaXNwbGF5RW5kUGFja2V0XCIsXG4gIFwiRGlzcGxheUZsdXNoSW1hZ2VQYWNrZXRcIixcbiAgXCJEaXNwbGF5Rm9ybVwiLFxuICBcIkRpc3BsYXlGdW5jdGlvblwiLFxuICBcIkRpc3BsYXlQYWNrZXRcIixcbiAgXCJEaXNwbGF5UnVsZXNcIixcbiAgXCJEaXNwbGF5U2V0U2l6ZVBhY2tldFwiLFxuICBcIkRpc3BsYXlTdHJpbmdcIixcbiAgXCJEaXNwbGF5VGVtcG9yYXJ5XCIsXG4gIFwiRGlzcGxheVdpdGhcIixcbiAgXCJEaXNwbGF5V2l0aFJlZlwiLFxuICBcIkRpc3BsYXlXaXRoVmFyaWFibGVcIixcbiAgXCJEaXN0YW5jZUZ1bmN0aW9uXCIsXG4gIFwiRGlzdGFuY2VNYXRyaXhcIixcbiAgXCJEaXN0YW5jZVRyYW5zZm9ybVwiLFxuICBcIkRpc3RyaWJ1dGVcIixcbiAgXCJEaXN0cmlidXRlZFwiLFxuICBcIkRpc3RyaWJ1dGVkQ29udGV4dHNcIixcbiAgXCJEaXN0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgXCJEaXN0cmlidXRpb25DaGFydFwiLFxuICBcIkRpc3RyaWJ1dGlvbkRvbWFpblwiLFxuICBcIkRpc3RyaWJ1dGlvbkZpdFRlc3RcIixcbiAgXCJEaXN0cmlidXRpb25QYXJhbWV0ZXJBc3N1bXB0aW9uc1wiLFxuICBcIkRpc3RyaWJ1dGlvblBhcmFtZXRlclFcIixcbiAgXCJEaXRoZXJpbmdcIixcbiAgXCJEaXZcIixcbiAgXCJEaXZlcmdlbmNlXCIsXG4gIFwiRGl2aWRlXCIsXG4gIFwiRGl2aWRlQnlcIixcbiAgXCJEaXZpZGVyc1wiLFxuICBcIkRpdmlkZVNpZGVzXCIsXG4gIFwiRGl2aXNpYmxlXCIsXG4gIFwiRGl2aXNvcnNcIixcbiAgXCJEaXZpc29yU2lnbWFcIixcbiAgXCJEaXZpc29yU3VtXCIsXG4gIFwiRE1TTGlzdFwiLFxuICBcIkRNU1N0cmluZ1wiLFxuICBcIkRvXCIsXG4gIFwiRG9ja2VkQ2VsbHNcIixcbiAgXCJEb2N1bWVudEdlbmVyYXRvclwiLFxuICBcIkRvY3VtZW50R2VuZXJhdG9ySW5mb3JtYXRpb25cIixcbiAgXCJEb2N1bWVudEdlbmVyYXRvckluZm9ybWF0aW9uRGF0YVwiLFxuICBcIkRvY3VtZW50R2VuZXJhdG9yc1wiLFxuICBcIkRvY3VtZW50Tm90ZWJvb2tcIixcbiAgXCJEb2N1bWVudFdlaWdodGluZ1J1bGVzXCIsXG4gIFwiRG9kZWNhaGVkcm9uXCIsXG4gIFwiRG9tYWluUmVnaXN0cmF0aW9uSW5mb3JtYXRpb25cIixcbiAgXCJEb21pbmFudENvbG9yc1wiLFxuICBcIkRPU1RleHRGb3JtYXRcIixcbiAgXCJEb3RcIixcbiAgXCJEb3REYXNoZWRcIixcbiAgXCJEb3RFcXVhbFwiLFxuICBcIkRvdExheWVyXCIsXG4gIFwiRG90UGx1c0xheWVyXCIsXG4gIFwiRG90dGVkXCIsXG4gIFwiRG91YmxlQnJhY2tldGluZ0JhclwiLFxuICBcIkRvdWJsZUNvbnRvdXJJbnRlZ3JhbFwiLFxuICBcIkRvdWJsZURvd25BcnJvd1wiLFxuICBcIkRvdWJsZUxlZnRBcnJvd1wiLFxuICBcIkRvdWJsZUxlZnRSaWdodEFycm93XCIsXG4gIFwiRG91YmxlTGVmdFRlZVwiLFxuICBcIkRvdWJsZUxvbmdMZWZ0QXJyb3dcIixcbiAgXCJEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3dcIixcbiAgXCJEb3VibGVMb25nUmlnaHRBcnJvd1wiLFxuICBcIkRvdWJsZVJpZ2h0QXJyb3dcIixcbiAgXCJEb3VibGVSaWdodFRlZVwiLFxuICBcIkRvdWJsZVVwQXJyb3dcIixcbiAgXCJEb3VibGVVcERvd25BcnJvd1wiLFxuICBcIkRvdWJsZVZlcnRpY2FsQmFyXCIsXG4gIFwiRG91Ymx5SW5maW5pdGVcIixcbiAgXCJEb3duXCIsXG4gIFwiRG93bkFycm93XCIsXG4gIFwiRG93bkFycm93QmFyXCIsXG4gIFwiRG93bkFycm93VXBBcnJvd1wiLFxuICBcIkRvd25MZWZ0UmlnaHRWZWN0b3JcIixcbiAgXCJEb3duTGVmdFRlZVZlY3RvclwiLFxuICBcIkRvd25MZWZ0VmVjdG9yXCIsXG4gIFwiRG93bkxlZnRWZWN0b3JCYXJcIixcbiAgXCJEb3duUmlnaHRUZWVWZWN0b3JcIixcbiAgXCJEb3duUmlnaHRWZWN0b3JcIixcbiAgXCJEb3duUmlnaHRWZWN0b3JCYXJcIixcbiAgXCJEb3duc2FtcGxlXCIsXG4gIFwiRG93blRlZVwiLFxuICBcIkRvd25UZWVBcnJvd1wiLFxuICBcIkRvd25WYWx1ZXNcIixcbiAgXCJEcmFnQW5kRHJvcFwiLFxuICBcIkRyYXdFZGdlc1wiLFxuICBcIkRyYXdGcm9udEZhY2VzXCIsXG4gIFwiRHJhd0hpZ2hsaWdodGVkXCIsXG4gIFwiRHJvcFwiLFxuICBcIkRyb3BvdXRMYXllclwiLFxuICBcIkRTb2x2ZVwiLFxuICBcIkRTb2x2ZVZhbHVlXCIsXG4gIFwiRHRcIixcbiAgXCJEdWFsTGluZWFyUHJvZ3JhbW1pbmdcIixcbiAgXCJEdWFsUG9seWhlZHJvblwiLFxuICBcIkR1YWxTeXN0ZW1zTW9kZWxcIixcbiAgXCJEdW1wR2V0XCIsXG4gIFwiRHVtcFNhdmVcIixcbiAgXCJEdXBsaWNhdGVGcmVlUVwiLFxuICBcIkR1cmF0aW9uXCIsXG4gIFwiRHluYW1pY1wiLFxuICBcIkR5bmFtaWNCb3hcIixcbiAgXCJEeW5hbWljQm94T3B0aW9uc1wiLFxuICBcIkR5bmFtaWNFdmFsdWF0aW9uVGltZW91dFwiLFxuICBcIkR5bmFtaWNHZW9HcmFwaGljc1wiLFxuICBcIkR5bmFtaWNJbWFnZVwiLFxuICBcIkR5bmFtaWNMb2NhdGlvblwiLFxuICBcIkR5bmFtaWNNb2R1bGVcIixcbiAgXCJEeW5hbWljTW9kdWxlQm94XCIsXG4gIFwiRHluYW1pY01vZHVsZUJveE9wdGlvbnNcIixcbiAgXCJEeW5hbWljTW9kdWxlUGFyZW50XCIsXG4gIFwiRHluYW1pY01vZHVsZVZhbHVlc1wiLFxuICBcIkR5bmFtaWNOYW1lXCIsXG4gIFwiRHluYW1pY05hbWVzcGFjZVwiLFxuICBcIkR5bmFtaWNSZWZlcmVuY2VcIixcbiAgXCJEeW5hbWljU2V0dGluZ1wiLFxuICBcIkR5bmFtaWNVcGRhdGluZ1wiLFxuICBcIkR5bmFtaWNXcmFwcGVyXCIsXG4gIFwiRHluYW1pY1dyYXBwZXJCb3hcIixcbiAgXCJEeW5hbWljV3JhcHBlckJveE9wdGlvbnNcIixcbiAgXCJFXCIsXG4gIFwiRWFydGhJbXBhY3REYXRhXCIsXG4gIFwiRWFydGhxdWFrZURhdGFcIixcbiAgXCJFY2NlbnRyaWNpdHlDZW50cmFsaXR5XCIsXG4gIFwiRWNob1wiLFxuICBcIkVjaG9GdW5jdGlvblwiLFxuICBcIkVjbGlwc2VUeXBlXCIsXG4gIFwiRWRnZUFkZFwiLFxuICBcIkVkZ2VCZXR3ZWVubmVzc0NlbnRyYWxpdHlcIixcbiAgXCJFZGdlQ2FwYWNpdHlcIixcbiAgXCJFZGdlQ2FwRm9ybVwiLFxuICBcIkVkZ2VDb2xvclwiLFxuICBcIkVkZ2VDb25uZWN0aXZpdHlcIixcbiAgXCJFZGdlQ29udHJhY3RcIixcbiAgXCJFZGdlQ29zdFwiLFxuICBcIkVkZ2VDb3VudFwiLFxuICBcIkVkZ2VDb3ZlclFcIixcbiAgXCJFZGdlQ3ljbGVNYXRyaXhcIixcbiAgXCJFZGdlRGFzaGluZ1wiLFxuICBcIkVkZ2VEZWxldGVcIixcbiAgXCJFZGdlRGV0ZWN0XCIsXG4gIFwiRWRnZUZvcm1cIixcbiAgXCJFZGdlSW5kZXhcIixcbiAgXCJFZGdlSm9pbkZvcm1cIixcbiAgXCJFZGdlTGFiZWxpbmdcIixcbiAgXCJFZGdlTGFiZWxzXCIsXG4gIFwiRWRnZUxhYmVsU3R5bGVcIixcbiAgXCJFZGdlTGlzdFwiLFxuICBcIkVkZ2VPcGFjaXR5XCIsXG4gIFwiRWRnZVFcIixcbiAgXCJFZGdlUmVuZGVyaW5nRnVuY3Rpb25cIixcbiAgXCJFZGdlUnVsZXNcIixcbiAgXCJFZGdlU2hhcGVGdW5jdGlvblwiLFxuICBcIkVkZ2VTdHlsZVwiLFxuICBcIkVkZ2VUYWdnZWRHcmFwaFwiLFxuICBcIkVkZ2VUYWdnZWRHcmFwaFFcIixcbiAgXCJFZGdlVGFnc1wiLFxuICBcIkVkZ2VUaGlja25lc3NcIixcbiAgXCJFZGdlV2VpZ2h0XCIsXG4gIFwiRWRnZVdlaWdodGVkR3JhcGhRXCIsXG4gIFwiRWRpdGFibGVcIixcbiAgXCJFZGl0QnV0dG9uU2V0dGluZ3NcIixcbiAgXCJFZGl0Q2VsbFRhZ3NTZXR0aW5nc1wiLFxuICBcIkVkaXREaXN0YW5jZVwiLFxuICBcIkVmZmVjdGl2ZUludGVyZXN0XCIsXG4gIFwiRWlnZW5zeXN0ZW1cIixcbiAgXCJFaWdlbnZhbHVlc1wiLFxuICBcIkVpZ2VudmVjdG9yQ2VudHJhbGl0eVwiLFxuICBcIkVpZ2VudmVjdG9yc1wiLFxuICBcIkVsZW1lbnRcIixcbiAgXCJFbGVtZW50RGF0YVwiLFxuICBcIkVsZW1lbnR3aXNlTGF5ZXJcIixcbiAgXCJFbGlkZWRGb3Jtc1wiLFxuICBcIkVsaW1pbmF0ZVwiLFxuICBcIkVsaW1pbmF0aW9uT3JkZXJcIixcbiAgXCJFbGxpcHNvaWRcIixcbiAgXCJFbGxpcHRpY0VcIixcbiAgXCJFbGxpcHRpY0V4cFwiLFxuICBcIkVsbGlwdGljRXhwUHJpbWVcIixcbiAgXCJFbGxpcHRpY0ZcIixcbiAgXCJFbGxpcHRpY0ZpbHRlck1vZGVsXCIsXG4gIFwiRWxsaXB0aWNLXCIsXG4gIFwiRWxsaXB0aWNMb2dcIixcbiAgXCJFbGxpcHRpY05vbWVRXCIsXG4gIFwiRWxsaXB0aWNQaVwiLFxuICBcIkVsbGlwdGljUmVkdWNlZEhhbGZQZXJpb2RzXCIsXG4gIFwiRWxsaXB0aWNUaGV0YVwiLFxuICBcIkVsbGlwdGljVGhldGFQcmltZVwiLFxuICBcIkVtYmVkQ29kZVwiLFxuICBcIkVtYmVkZGVkSFRNTFwiLFxuICBcIkVtYmVkZGVkU2VydmljZVwiLFxuICBcIkVtYmVkZGluZ0xheWVyXCIsXG4gIFwiRW1iZWRkaW5nT2JqZWN0XCIsXG4gIFwiRW1pdFNvdW5kXCIsXG4gIFwiRW1waGFzaXplU3ludGF4RXJyb3JzXCIsXG4gIFwiRW1waXJpY2FsRGlzdHJpYnV0aW9uXCIsXG4gIFwiRW1wdHlcIixcbiAgXCJFbXB0eUdyYXBoUVwiLFxuICBcIkVtcHR5UmVnaW9uXCIsXG4gIFwiRW5hYmxlQ29uc29sZVByaW50UGFja2V0XCIsXG4gIFwiRW5hYmxlZFwiLFxuICBcIkVuY29kZVwiLFxuICBcIkVuY3J5cHRcIixcbiAgXCJFbmNyeXB0ZWRPYmplY3RcIixcbiAgXCJFbmNyeXB0RmlsZVwiLFxuICBcIkVuZFwiLFxuICBcIkVuZEFkZFwiLFxuICBcIkVuZERpYWxvZ1BhY2tldFwiLFxuICBcIkVuZEZyb250RW5kSW50ZXJhY3Rpb25QYWNrZXRcIixcbiAgXCJFbmRPZkJ1ZmZlclwiLFxuICBcIkVuZE9mRmlsZVwiLFxuICBcIkVuZE9mTGluZVwiLFxuICBcIkVuZE9mU3RyaW5nXCIsXG4gIFwiRW5kUGFja2FnZVwiLFxuICBcIkVuZ2luZUVudmlyb25tZW50XCIsXG4gIFwiRW5naW5lZXJpbmdGb3JtXCIsXG4gIFwiRW50ZXJcIixcbiAgXCJFbnRlckV4cHJlc3Npb25QYWNrZXRcIixcbiAgXCJFbnRlclRleHRQYWNrZXRcIixcbiAgXCJFbnRpdHlcIixcbiAgXCJFbnRpdHlDbGFzc1wiLFxuICBcIkVudGl0eUNsYXNzTGlzdFwiLFxuICBcIkVudGl0eUNvcGllc1wiLFxuICBcIkVudGl0eUZ1bmN0aW9uXCIsXG4gIFwiRW50aXR5R3JvdXBcIixcbiAgXCJFbnRpdHlJbnN0YW5jZVwiLFxuICBcIkVudGl0eUxpc3RcIixcbiAgXCJFbnRpdHlQcmVmZXRjaFwiLFxuICBcIkVudGl0eVByb3BlcnRpZXNcIixcbiAgXCJFbnRpdHlQcm9wZXJ0eVwiLFxuICBcIkVudGl0eVByb3BlcnR5Q2xhc3NcIixcbiAgXCJFbnRpdHlSZWdpc3RlclwiLFxuICBcIkVudGl0eVN0b3JlXCIsXG4gIFwiRW50aXR5U3RvcmVzXCIsXG4gIFwiRW50aXR5VHlwZU5hbWVcIixcbiAgXCJFbnRpdHlVbnJlZ2lzdGVyXCIsXG4gIFwiRW50aXR5VmFsdWVcIixcbiAgXCJFbnRyb3B5XCIsXG4gIFwiRW50cm9weUZpbHRlclwiLFxuICBcIkVudmlyb25tZW50XCIsXG4gIFwiRXBpbG9nXCIsXG4gIFwiRXBpbG9nRnVuY3Rpb25cIixcbiAgXCJFcXVhbFwiLFxuICBcIkVxdWFsQ29sdW1uc1wiLFxuICBcIkVxdWFsUm93c1wiLFxuICBcIkVxdWFsVGlsZGVcIixcbiAgXCJFcXVhbFRvXCIsXG4gIFwiRXF1YXRlZFRvXCIsXG4gIFwiRXF1aWxpYnJpdW1cIixcbiAgXCJFcXVpcmlwcGxlRmlsdGVyS2VybmVsXCIsXG4gIFwiRXF1aXZhbGVudFwiLFxuICBcIkVyZlwiLFxuICBcIkVyZmNcIixcbiAgXCJFcmZpXCIsXG4gIFwiRXJsYW5nQlwiLFxuICBcIkVybGFuZ0NcIixcbiAgXCJFcmxhbmdEaXN0cmlidXRpb25cIixcbiAgXCJFcm9zaW9uXCIsXG4gIFwiRXJyb3JCb3hcIixcbiAgXCJFcnJvckJveE9wdGlvbnNcIixcbiAgXCJFcnJvck5vcm1cIixcbiAgXCJFcnJvclBhY2tldFwiLFxuICBcIkVycm9yc0RpYWxvZ1NldHRpbmdzXCIsXG4gIFwiRXNjYXBlUmFkaXVzXCIsXG4gIFwiRXN0aW1hdGVkQmFja2dyb3VuZFwiLFxuICBcIkVzdGltYXRlZERpc3RyaWJ1dGlvblwiLFxuICBcIkVzdGltYXRlZFByb2Nlc3NcIixcbiAgXCJFc3RpbWF0b3JHYWluc1wiLFxuICBcIkVzdGltYXRvclJlZ3VsYXRvclwiLFxuICBcIkV1Y2xpZGVhbkRpc3RhbmNlXCIsXG4gIFwiRXVsZXJBbmdsZXNcIixcbiAgXCJFdWxlckNoYXJhY3RlcmlzdGljXCIsXG4gIFwiRXVsZXJFXCIsXG4gIFwiRXVsZXJHYW1tYVwiLFxuICBcIkV1bGVyaWFuR3JhcGhRXCIsXG4gIFwiRXVsZXJNYXRyaXhcIixcbiAgXCJFdWxlclBoaVwiLFxuICBcIkV2YWx1YXRhYmxlXCIsXG4gIFwiRXZhbHVhdGVcIixcbiAgXCJFdmFsdWF0ZWRcIixcbiAgXCJFdmFsdWF0ZVBhY2tldFwiLFxuICBcIkV2YWx1YXRlU2NoZWR1bGVkVGFza1wiLFxuICBcIkV2YWx1YXRpb25Cb3hcIixcbiAgXCJFdmFsdWF0aW9uQ2VsbFwiLFxuICBcIkV2YWx1YXRpb25Db21wbGV0aW9uQWN0aW9uXCIsXG4gIFwiRXZhbHVhdGlvbkRhdGFcIixcbiAgXCJFdmFsdWF0aW9uRWxlbWVudHNcIixcbiAgXCJFdmFsdWF0aW9uRW52aXJvbm1lbnRcIixcbiAgXCJFdmFsdWF0aW9uTW9kZVwiLFxuICBcIkV2YWx1YXRpb25Nb25pdG9yXCIsXG4gIFwiRXZhbHVhdGlvbk5vdGVib29rXCIsXG4gIFwiRXZhbHVhdGlvbk9iamVjdFwiLFxuICBcIkV2YWx1YXRpb25PcmRlclwiLFxuICBcIkV2YWx1YXRvclwiLFxuICBcIkV2YWx1YXRvck5hbWVzXCIsXG4gIFwiRXZlblFcIixcbiAgXCJFdmVudERhdGFcIixcbiAgXCJFdmVudEV2YWx1YXRvclwiLFxuICBcIkV2ZW50SGFuZGxlclwiLFxuICBcIkV2ZW50SGFuZGxlclRhZ1wiLFxuICBcIkV2ZW50TGFiZWxzXCIsXG4gIFwiRXZlbnRTZXJpZXNcIixcbiAgXCJFeGFjdEJsYWNrbWFuV2luZG93XCIsXG4gIFwiRXhhY3ROdW1iZXJRXCIsXG4gIFwiRXhhY3RSb290SXNvbGF0aW9uXCIsXG4gIFwiRXhhbXBsZURhdGFcIixcbiAgXCJFeGNlcHRcIixcbiAgXCJFeGNsdWRlZEZvcm1zXCIsXG4gIFwiRXhjbHVkZWRMaW5lc1wiLFxuICBcIkV4Y2x1ZGVkUGh5c2ljYWxRdWFudGl0aWVzXCIsXG4gIFwiRXhjbHVkZVBvZHNcIixcbiAgXCJFeGNsdXNpb25zXCIsXG4gIFwiRXhjbHVzaW9uc1N0eWxlXCIsXG4gIFwiRXhpc3RzXCIsXG4gIFwiRXhpdFwiLFxuICBcIkV4aXREaWFsb2dcIixcbiAgXCJFeG9wbGFuZXREYXRhXCIsXG4gIFwiRXhwXCIsXG4gIFwiRXhwYW5kXCIsXG4gIFwiRXhwYW5kQWxsXCIsXG4gIFwiRXhwYW5kRGVub21pbmF0b3JcIixcbiAgXCJFeHBhbmRGaWxlTmFtZVwiLFxuICBcIkV4cGFuZE51bWVyYXRvclwiLFxuICBcIkV4cGVjdGF0aW9uXCIsXG4gIFwiRXhwZWN0YXRpb25FXCIsXG4gIFwiRXhwZWN0ZWRWYWx1ZVwiLFxuICBcIkV4cEdhbW1hRGlzdHJpYnV0aW9uXCIsXG4gIFwiRXhwSW50ZWdyYWxFXCIsXG4gIFwiRXhwSW50ZWdyYWxFaVwiLFxuICBcIkV4cGlyYXRpb25EYXRlXCIsXG4gIFwiRXhwb25lbnRcIixcbiAgXCJFeHBvbmVudEZ1bmN0aW9uXCIsXG4gIFwiRXhwb25lbnRpYWxEaXN0cmlidXRpb25cIixcbiAgXCJFeHBvbmVudGlhbEZhbWlseVwiLFxuICBcIkV4cG9uZW50aWFsR2VuZXJhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiRXhwb25lbnRpYWxNb3ZpbmdBdmVyYWdlXCIsXG4gIFwiRXhwb25lbnRpYWxQb3dlckRpc3RyaWJ1dGlvblwiLFxuICBcIkV4cG9uZW50UG9zaXRpb25cIixcbiAgXCJFeHBvbmVudFN0ZXBcIixcbiAgXCJFeHBvcnRcIixcbiAgXCJFeHBvcnRBdXRvUmVwbGFjZW1lbnRzXCIsXG4gIFwiRXhwb3J0Qnl0ZUFycmF5XCIsXG4gIFwiRXhwb3J0Rm9ybVwiLFxuICBcIkV4cG9ydFBhY2tldFwiLFxuICBcIkV4cG9ydFN0cmluZ1wiLFxuICBcIkV4cHJlc3Npb25cIixcbiAgXCJFeHByZXNzaW9uQ2VsbFwiLFxuICBcIkV4cHJlc3Npb25HcmFwaFwiLFxuICBcIkV4cHJlc3Npb25QYWNrZXRcIixcbiAgXCJFeHByZXNzaW9uVVVJRFwiLFxuICBcIkV4cFRvVHJpZ1wiLFxuICBcIkV4dGVuZGVkRW50aXR5Q2xhc3NcIixcbiAgXCJFeHRlbmRlZEdDRFwiLFxuICBcIkV4dGVuc2lvblwiLFxuICBcIkV4dGVudEVsZW1lbnRGdW5jdGlvblwiLFxuICBcIkV4dGVudE1hcmtlcnNcIixcbiAgXCJFeHRlbnRTaXplXCIsXG4gIFwiRXh0ZXJuYWxCdW5kbGVcIixcbiAgXCJFeHRlcm5hbENhbGxcIixcbiAgXCJFeHRlcm5hbERhdGFDaGFyYWN0ZXJFbmNvZGluZ1wiLFxuICBcIkV4dGVybmFsRXZhbHVhdGVcIixcbiAgXCJFeHRlcm5hbEZ1bmN0aW9uXCIsXG4gIFwiRXh0ZXJuYWxGdW5jdGlvbk5hbWVcIixcbiAgXCJFeHRlcm5hbElkZW50aWZpZXJcIixcbiAgXCJFeHRlcm5hbE9iamVjdFwiLFxuICBcIkV4dGVybmFsT3B0aW9uc1wiLFxuICBcIkV4dGVybmFsU2Vzc2lvbk9iamVjdFwiLFxuICBcIkV4dGVybmFsU2Vzc2lvbnNcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VCYXNlXCIsXG4gIFwiRXh0ZXJuYWxTdG9yYWdlRG93bmxvYWRcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VHZXRcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VPYmplY3RcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VQdXRcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VVcGxvYWRcIixcbiAgXCJFeHRlcm5hbFR5cGVTaWduYXR1cmVcIixcbiAgXCJFeHRlcm5hbFZhbHVlXCIsXG4gIFwiRXh0cmFjdFwiLFxuICBcIkV4dHJhY3RBcmNoaXZlXCIsXG4gIFwiRXh0cmFjdExheWVyXCIsXG4gIFwiRXh0cmFjdFBhY2xldEFyY2hpdmVcIixcbiAgXCJFeHRyZW1lVmFsdWVEaXN0cmlidXRpb25cIixcbiAgXCJGYWNlQWxpZ25cIixcbiAgXCJGYWNlRm9ybVwiLFxuICBcIkZhY2VHcmlkc1wiLFxuICBcIkZhY2VHcmlkc1N0eWxlXCIsXG4gIFwiRmFjaWFsRmVhdHVyZXNcIixcbiAgXCJGYWN0b3JcIixcbiAgXCJGYWN0b3JDb21wbGV0ZVwiLFxuICBcIkZhY3RvcmlhbFwiLFxuICBcIkZhY3RvcmlhbDJcIixcbiAgXCJGYWN0b3JpYWxNb21lbnRcIixcbiAgXCJGYWN0b3JpYWxNb21lbnRHZW5lcmF0aW5nRnVuY3Rpb25cIixcbiAgXCJGYWN0b3JpYWxQb3dlclwiLFxuICBcIkZhY3RvckludGVnZXJcIixcbiAgXCJGYWN0b3JMaXN0XCIsXG4gIFwiRmFjdG9yU3F1YXJlRnJlZVwiLFxuICBcIkZhY3RvclNxdWFyZUZyZWVMaXN0XCIsXG4gIFwiRmFjdG9yVGVybXNcIixcbiAgXCJGYWN0b3JUZXJtc0xpc3RcIixcbiAgXCJGYWlsXCIsXG4gIFwiRmFpbHVyZVwiLFxuICBcIkZhaWx1cmVBY3Rpb25cIixcbiAgXCJGYWlsdXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiRmFpbHVyZVFcIixcbiAgXCJGYWxzZVwiLFxuICBcIkZhcmV5U2VxdWVuY2VcIixcbiAgXCJGQVJJTUFQcm9jZXNzXCIsXG4gIFwiRmVhdHVyZURpc3RhbmNlXCIsXG4gIFwiRmVhdHVyZUV4dHJhY3RcIixcbiAgXCJGZWF0dXJlRXh0cmFjdGlvblwiLFxuICBcIkZlYXR1cmVFeHRyYWN0b3JcIixcbiAgXCJGZWF0dXJlRXh0cmFjdG9yRnVuY3Rpb25cIixcbiAgXCJGZWF0dXJlTmFtZXNcIixcbiAgXCJGZWF0dXJlTmVhcmVzdFwiLFxuICBcIkZlYXR1cmVTcGFjZVBsb3RcIixcbiAgXCJGZWF0dXJlU3BhY2VQbG90M0RcIixcbiAgXCJGZWF0dXJlVHlwZXNcIixcbiAgXCJGRURpc2FibGVDb25zb2xlUHJpbnRQYWNrZXRcIixcbiAgXCJGZWVkYmFja0xpbmVhcml6ZVwiLFxuICBcIkZlZWRiYWNrU2VjdG9yXCIsXG4gIFwiRmVlZGJhY2tTZWN0b3JTdHlsZVwiLFxuICBcIkZlZWRiYWNrVHlwZVwiLFxuICBcIkZFRW5hYmxlQ29uc29sZVByaW50UGFja2V0XCIsXG4gIFwiRmV0YWxHcm93dGhEYXRhXCIsXG4gIFwiRmlib25hY2NpXCIsXG4gIFwiRmlib25vcmlhbFwiLFxuICBcIkZpZWxkQ29tcGxldGlvbkZ1bmN0aW9uXCIsXG4gIFwiRmllbGRIaW50XCIsXG4gIFwiRmllbGRIaW50U3R5bGVcIixcbiAgXCJGaWVsZE1hc2tlZFwiLFxuICBcIkZpZWxkU2l6ZVwiLFxuICBcIkZpbGVcIixcbiAgXCJGaWxlQmFzZU5hbWVcIixcbiAgXCJGaWxlQnl0ZUNvdW50XCIsXG4gIFwiRmlsZUNvbnZlcnRcIixcbiAgXCJGaWxlRGF0ZVwiLFxuICBcIkZpbGVFeGlzdHNRXCIsXG4gIFwiRmlsZUV4dGVuc2lvblwiLFxuICBcIkZpbGVGb3JtYXRcIixcbiAgXCJGaWxlSGFuZGxlclwiLFxuICBcIkZpbGVIYXNoXCIsXG4gIFwiRmlsZUluZm9ybWF0aW9uXCIsXG4gIFwiRmlsZU5hbWVcIixcbiAgXCJGaWxlTmFtZURlcHRoXCIsXG4gIFwiRmlsZU5hbWVEaWFsb2dTZXR0aW5nc1wiLFxuICBcIkZpbGVOYW1lRHJvcFwiLFxuICBcIkZpbGVOYW1lRm9ybXNcIixcbiAgXCJGaWxlTmFtZUpvaW5cIixcbiAgXCJGaWxlTmFtZXNcIixcbiAgXCJGaWxlTmFtZVNldHRlclwiLFxuICBcIkZpbGVOYW1lU3BsaXRcIixcbiAgXCJGaWxlTmFtZVRha2VcIixcbiAgXCJGaWxlUHJpbnRcIixcbiAgXCJGaWxlU2l6ZVwiLFxuICBcIkZpbGVTeXN0ZW1NYXBcIixcbiAgXCJGaWxlU3lzdGVtU2NhblwiLFxuICBcIkZpbGVUZW1wbGF0ZVwiLFxuICBcIkZpbGVUZW1wbGF0ZUFwcGx5XCIsXG4gIFwiRmlsZVR5cGVcIixcbiAgXCJGaWxsZWRDdXJ2ZVwiLFxuICBcIkZpbGxlZEN1cnZlQm94XCIsXG4gIFwiRmlsbGVkQ3VydmVCb3hPcHRpb25zXCIsXG4gIFwiRmlsbGluZ1wiLFxuICBcIkZpbGxpbmdTdHlsZVwiLFxuICBcIkZpbGxpbmdUcmFuc2Zvcm1cIixcbiAgXCJGaWx0ZXJlZEVudGl0eUNsYXNzXCIsXG4gIFwiRmlsdGVyUnVsZXNcIixcbiAgXCJGaW5hbmNpYWxCb25kXCIsXG4gIFwiRmluYW5jaWFsRGF0YVwiLFxuICBcIkZpbmFuY2lhbERlcml2YXRpdmVcIixcbiAgXCJGaW5hbmNpYWxJbmRpY2F0b3JcIixcbiAgXCJGaW5kXCIsXG4gIFwiRmluZEFub21hbGllc1wiLFxuICBcIkZpbmRBcmdNYXhcIixcbiAgXCJGaW5kQXJnTWluXCIsXG4gIFwiRmluZENoYW5uZWxzXCIsXG4gIFwiRmluZENsaXF1ZVwiLFxuICBcIkZpbmRDbHVzdGVyc1wiLFxuICBcIkZpbmRDb29raWVzXCIsXG4gIFwiRmluZEN1cnZlUGF0aFwiLFxuICBcIkZpbmRDeWNsZVwiLFxuICBcIkZpbmREZXZpY2VzXCIsXG4gIFwiRmluZERpc3RyaWJ1dGlvblwiLFxuICBcIkZpbmREaXN0cmlidXRpb25QYXJhbWV0ZXJzXCIsXG4gIFwiRmluZERpdmlzaW9uc1wiLFxuICBcIkZpbmRFZGdlQ292ZXJcIixcbiAgXCJGaW5kRWRnZUN1dFwiLFxuICBcIkZpbmRFZGdlSW5kZXBlbmRlbnRQYXRoc1wiLFxuICBcIkZpbmRFcXVhdGlvbmFsUHJvb2ZcIixcbiAgXCJGaW5kRXVsZXJpYW5DeWNsZVwiLFxuICBcIkZpbmRFeHRlcm5hbEV2YWx1YXRvcnNcIixcbiAgXCJGaW5kRmFjZXNcIixcbiAgXCJGaW5kRmlsZVwiLFxuICBcIkZpbmRGaXRcIixcbiAgXCJGaW5kRm9ybXVsYVwiLFxuICBcIkZpbmRGdW5kYW1lbnRhbEN5Y2xlc1wiLFxuICBcIkZpbmRHZW5lcmF0aW5nRnVuY3Rpb25cIixcbiAgXCJGaW5kR2VvTG9jYXRpb25cIixcbiAgXCJGaW5kR2VvbWV0cmljQ29uamVjdHVyZXNcIixcbiAgXCJGaW5kR2VvbWV0cmljVHJhbnNmb3JtXCIsXG4gIFwiRmluZEdyYXBoQ29tbXVuaXRpZXNcIixcbiAgXCJGaW5kR3JhcGhJc29tb3JwaGlzbVwiLFxuICBcIkZpbmRHcmFwaFBhcnRpdGlvblwiLFxuICBcIkZpbmRIYW1pbHRvbmlhbkN5Y2xlXCIsXG4gIFwiRmluZEhhbWlsdG9uaWFuUGF0aFwiLFxuICBcIkZpbmRIaWRkZW5NYXJrb3ZTdGF0ZXNcIixcbiAgXCJGaW5kSW1hZ2VUZXh0XCIsXG4gIFwiRmluZEluZGVwZW5kZW50RWRnZVNldFwiLFxuICBcIkZpbmRJbmRlcGVuZGVudFZlcnRleFNldFwiLFxuICBcIkZpbmRJbnN0YW5jZVwiLFxuICBcIkZpbmRJbnRlZ2VyTnVsbFZlY3RvclwiLFxuICBcIkZpbmRLQ2xhblwiLFxuICBcIkZpbmRLQ2xpcXVlXCIsXG4gIFwiRmluZEtDbHViXCIsXG4gIFwiRmluZEtQbGV4XCIsXG4gIFwiRmluZExpYnJhcnlcIixcbiAgXCJGaW5kTGluZWFyUmVjdXJyZW5jZVwiLFxuICBcIkZpbmRMaXN0XCIsXG4gIFwiRmluZE1hdGNoaW5nQ29sb3JcIixcbiAgXCJGaW5kTWF4aW11bVwiLFxuICBcIkZpbmRNYXhpbXVtQ3V0XCIsXG4gIFwiRmluZE1heGltdW1GbG93XCIsXG4gIFwiRmluZE1heFZhbHVlXCIsXG4gIFwiRmluZE1lc2hEZWZlY3RzXCIsXG4gIFwiRmluZE1pbmltdW1cIixcbiAgXCJGaW5kTWluaW11bUNvc3RGbG93XCIsXG4gIFwiRmluZE1pbmltdW1DdXRcIixcbiAgXCJGaW5kTWluVmFsdWVcIixcbiAgXCJGaW5kTW9sZWN1bGVTdWJzdHJ1Y3R1cmVcIixcbiAgXCJGaW5kUGF0aFwiLFxuICBcIkZpbmRQZWFrc1wiLFxuICBcIkZpbmRQZXJtdXRhdGlvblwiLFxuICBcIkZpbmRQb3N0bWFuVG91clwiLFxuICBcIkZpbmRQcm9jZXNzUGFyYW1ldGVyc1wiLFxuICBcIkZpbmRSZXBlYXRcIixcbiAgXCJGaW5kUm9vdFwiLFxuICBcIkZpbmRTZXF1ZW5jZUZ1bmN0aW9uXCIsXG4gIFwiRmluZFNldHRpbmdzXCIsXG4gIFwiRmluZFNob3J0ZXN0UGF0aFwiLFxuICBcIkZpbmRTaG9ydGVzdFRvdXJcIixcbiAgXCJGaW5kU3Bhbm5pbmdUcmVlXCIsXG4gIFwiRmluZFN5c3RlbU1vZGVsRXF1aWxpYnJpdW1cIixcbiAgXCJGaW5kVGV4dHVhbEFuc3dlclwiLFxuICBcIkZpbmRUaHJlc2hvbGRcIixcbiAgXCJGaW5kVHJhbnNpZW50UmVwZWF0XCIsXG4gIFwiRmluZFZlcnRleENvdmVyXCIsXG4gIFwiRmluZFZlcnRleEN1dFwiLFxuICBcIkZpbmRWZXJ0ZXhJbmRlcGVuZGVudFBhdGhzXCIsXG4gIFwiRmluZVwiLFxuICBcIkZpbmlzaER5bmFtaWNcIixcbiAgXCJGaW5pdGVBYmVsaWFuR3JvdXBDb3VudFwiLFxuICBcIkZpbml0ZUdyb3VwQ291bnRcIixcbiAgXCJGaW5pdGVHcm91cERhdGFcIixcbiAgXCJGaXJzdFwiLFxuICBcIkZpcnN0Q2FzZVwiLFxuICBcIkZpcnN0UGFzc2FnZVRpbWVEaXN0cmlidXRpb25cIixcbiAgXCJGaXJzdFBvc2l0aW9uXCIsXG4gIFwiRmlzY2hlckdyb3VwRmkyMlwiLFxuICBcIkZpc2NoZXJHcm91cEZpMjNcIixcbiAgXCJGaXNjaGVyR3JvdXBGaTI0UHJpbWVcIixcbiAgXCJGaXNoZXJIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkZpc2hlclJhdGlvVGVzdFwiLFxuICBcIkZpc2hlclpEaXN0cmlidXRpb25cIixcbiAgXCJGaXRcIixcbiAgXCJGaXRBbGxcIixcbiAgXCJGaXRSZWd1bGFyaXphdGlvblwiLFxuICBcIkZpdHRlZE1vZGVsXCIsXG4gIFwiRml4ZWRPcmRlclwiLFxuICBcIkZpeGVkUG9pbnRcIixcbiAgXCJGaXhlZFBvaW50TGlzdFwiLFxuICBcIkZsYXNoU2VsZWN0aW9uXCIsXG4gIFwiRmxhdFwiLFxuICBcIkZsYXR0ZW5cIixcbiAgXCJGbGF0dGVuQXRcIixcbiAgXCJGbGF0dGVuTGF5ZXJcIixcbiAgXCJGbGF0VG9wV2luZG93XCIsXG4gIFwiRmxpcFZpZXdcIixcbiAgXCJGbG9vclwiLFxuICBcIkZsb3dQb2x5bm9taWFsXCIsXG4gIFwiRmx1c2hQcmludE91dHB1dFBhY2tldFwiLFxuICBcIkZvbGRcIixcbiAgXCJGb2xkTGlzdFwiLFxuICBcIkZvbGRQYWlyXCIsXG4gIFwiRm9sZFBhaXJMaXN0XCIsXG4gIFwiRm9sbG93UmVkaXJlY3RzXCIsXG4gIFwiRm9udFwiLFxuICBcIkZvbnRDb2xvclwiLFxuICBcIkZvbnRGYW1pbHlcIixcbiAgXCJGb250Rm9ybVwiLFxuICBcIkZvbnROYW1lXCIsXG4gIFwiRm9udE9wYWNpdHlcIixcbiAgXCJGb250UG9zdFNjcmlwdE5hbWVcIixcbiAgXCJGb250UHJvcGVydGllc1wiLFxuICBcIkZvbnRSZWVuY29kaW5nXCIsXG4gIFwiRm9udFNpemVcIixcbiAgXCJGb250U2xhbnRcIixcbiAgXCJGb250U3Vic3RpdHV0aW9uc1wiLFxuICBcIkZvbnRUcmFja2luZ1wiLFxuICBcIkZvbnRWYXJpYXRpb25zXCIsXG4gIFwiRm9udFdlaWdodFwiLFxuICBcIkZvclwiLFxuICBcIkZvckFsbFwiLFxuICBcIkZvcmNlVmVyc2lvbkluc3RhbGxcIixcbiAgXCJGb3JtYXRcIixcbiAgXCJGb3JtYXRSdWxlc1wiLFxuICBcIkZvcm1hdFR5cGVcIixcbiAgXCJGb3JtYXRUeXBlQXV0b0NvbnZlcnRcIixcbiAgXCJGb3JtYXRWYWx1ZXNcIixcbiAgXCJGb3JtQm94XCIsXG4gIFwiRm9ybUJveE9wdGlvbnNcIixcbiAgXCJGb3JtQ29udHJvbFwiLFxuICBcIkZvcm1GdW5jdGlvblwiLFxuICBcIkZvcm1MYXlvdXRGdW5jdGlvblwiLFxuICBcIkZvcm1PYmplY3RcIixcbiAgXCJGb3JtUGFnZVwiLFxuICBcIkZvcm1UaGVtZVwiLFxuICBcIkZvcm11bGFEYXRhXCIsXG4gIFwiRm9ybXVsYUxvb2t1cFwiLFxuICBcIkZvcnRyYW5Gb3JtXCIsXG4gIFwiRm9yd2FyZFwiLFxuICBcIkZvcndhcmRCYWNrd2FyZFwiLFxuICBcIkZvdXJpZXJcIixcbiAgXCJGb3VyaWVyQ29lZmZpY2llbnRcIixcbiAgXCJGb3VyaWVyQ29zQ29lZmZpY2llbnRcIixcbiAgXCJGb3VyaWVyQ29zU2VyaWVzXCIsXG4gIFwiRm91cmllckNvc1RyYW5zZm9ybVwiLFxuICBcIkZvdXJpZXJEQ1RcIixcbiAgXCJGb3VyaWVyRENURmlsdGVyXCIsXG4gIFwiRm91cmllckRDVE1hdHJpeFwiLFxuICBcIkZvdXJpZXJEU1RcIixcbiAgXCJGb3VyaWVyRFNUTWF0cml4XCIsXG4gIFwiRm91cmllck1hdHJpeFwiLFxuICBcIkZvdXJpZXJQYXJhbWV0ZXJzXCIsXG4gIFwiRm91cmllclNlcXVlbmNlVHJhbnNmb3JtXCIsXG4gIFwiRm91cmllclNlcmllc1wiLFxuICBcIkZvdXJpZXJTaW5Db2VmZmljaWVudFwiLFxuICBcIkZvdXJpZXJTaW5TZXJpZXNcIixcbiAgXCJGb3VyaWVyU2luVHJhbnNmb3JtXCIsXG4gIFwiRm91cmllclRyYW5zZm9ybVwiLFxuICBcIkZvdXJpZXJUcmlnU2VyaWVzXCIsXG4gIFwiRnJhY3Rpb25hbEJyb3duaWFuTW90aW9uUHJvY2Vzc1wiLFxuICBcIkZyYWN0aW9uYWxHYXVzc2lhbk5vaXNlUHJvY2Vzc1wiLFxuICBcIkZyYWN0aW9uYWxQYXJ0XCIsXG4gIFwiRnJhY3Rpb25Cb3hcIixcbiAgXCJGcmFjdGlvbkJveE9wdGlvbnNcIixcbiAgXCJGcmFjdGlvbkxpbmVcIixcbiAgXCJGcmFtZVwiLFxuICBcIkZyYW1lQm94XCIsXG4gIFwiRnJhbWVCb3hPcHRpb25zXCIsXG4gIFwiRnJhbWVkXCIsXG4gIFwiRnJhbWVJbnNldFwiLFxuICBcIkZyYW1lTGFiZWxcIixcbiAgXCJGcmFtZWxlc3NcIixcbiAgXCJGcmFtZU1hcmdpbnNcIixcbiAgXCJGcmFtZVJhdGVcIixcbiAgXCJGcmFtZVN0eWxlXCIsXG4gIFwiRnJhbWVUaWNrc1wiLFxuICBcIkZyYW1lVGlja3NTdHlsZVwiLFxuICBcIkZSYXRpb0Rpc3RyaWJ1dGlvblwiLFxuICBcIkZyZWNoZXREaXN0cmlidXRpb25cIixcbiAgXCJGcmVlUVwiLFxuICBcIkZyZW5ldFNlcnJldFN5c3RlbVwiLFxuICBcIkZyZXF1ZW5jeVNhbXBsaW5nRmlsdGVyS2VybmVsXCIsXG4gIFwiRnJlc25lbENcIixcbiAgXCJGcmVzbmVsRlwiLFxuICBcIkZyZXNuZWxHXCIsXG4gIFwiRnJlc25lbFNcIixcbiAgXCJGcmlkYXlcIixcbiAgXCJGcm9iZW5pdXNOdW1iZXJcIixcbiAgXCJGcm9iZW5pdXNTb2x2ZVwiLFxuICBcIkZyb21BYnNvbHV0ZVRpbWVcIixcbiAgXCJGcm9tQ2hhcmFjdGVyQ29kZVwiLFxuICBcIkZyb21Db2VmZmljaWVudFJ1bGVzXCIsXG4gIFwiRnJvbUNvbnRpbnVlZEZyYWN0aW9uXCIsXG4gIFwiRnJvbURhdGVcIixcbiAgXCJGcm9tRGlnaXRzXCIsXG4gIFwiRnJvbURNU1wiLFxuICBcIkZyb21FbnRpdHlcIixcbiAgXCJGcm9tSnVsaWFuRGF0ZVwiLFxuICBcIkZyb21MZXR0ZXJOdW1iZXJcIixcbiAgXCJGcm9tUG9sYXJDb29yZGluYXRlc1wiLFxuICBcIkZyb21Sb21hbk51bWVyYWxcIixcbiAgXCJGcm9tU3BoZXJpY2FsQ29vcmRpbmF0ZXNcIixcbiAgXCJGcm9tVW5peFRpbWVcIixcbiAgXCJGcm9udFwiLFxuICBcIkZyb250RW5kRHluYW1pY0V4cHJlc3Npb25cIixcbiAgXCJGcm9udEVuZEV2ZW50QWN0aW9uc1wiLFxuICBcIkZyb250RW5kRXhlY3V0ZVwiLFxuICBcIkZyb250RW5kT2JqZWN0XCIsXG4gIFwiRnJvbnRFbmRSZXNvdXJjZVwiLFxuICBcIkZyb250RW5kUmVzb3VyY2VTdHJpbmdcIixcbiAgXCJGcm9udEVuZFN0YWNrU2l6ZVwiLFxuICBcIkZyb250RW5kVG9rZW5cIixcbiAgXCJGcm9udEVuZFRva2VuRXhlY3V0ZVwiLFxuICBcIkZyb250RW5kVmFsdWVDYWNoZVwiLFxuICBcIkZyb250RW5kVmVyc2lvblwiLFxuICBcIkZyb250RmFjZUNvbG9yXCIsXG4gIFwiRnJvbnRGYWNlT3BhY2l0eVwiLFxuICBcIkZ1bGxcIixcbiAgXCJGdWxsQXhlc1wiLFxuICBcIkZ1bGxEZWZpbml0aW9uXCIsXG4gIFwiRnVsbEZvcm1cIixcbiAgXCJGdWxsR3JhcGhpY3NcIixcbiAgXCJGdWxsSW5mb3JtYXRpb25PdXRwdXRSZWd1bGF0b3JcIixcbiAgXCJGdWxsT3B0aW9uc1wiLFxuICBcIkZ1bGxSZWdpb25cIixcbiAgXCJGdWxsU2ltcGxpZnlcIixcbiAgXCJGdW5jdGlvblwiLFxuICBcIkZ1bmN0aW9uQ29tcGlsZVwiLFxuICBcIkZ1bmN0aW9uQ29tcGlsZUV4cG9ydFwiLFxuICBcIkZ1bmN0aW9uQ29tcGlsZUV4cG9ydEJ5dGVBcnJheVwiLFxuICBcIkZ1bmN0aW9uQ29tcGlsZUV4cG9ydExpYnJhcnlcIixcbiAgXCJGdW5jdGlvbkNvbXBpbGVFeHBvcnRTdHJpbmdcIixcbiAgXCJGdW5jdGlvbkRvbWFpblwiLFxuICBcIkZ1bmN0aW9uRXhwYW5kXCIsXG4gIFwiRnVuY3Rpb25JbnRlcnBvbGF0aW9uXCIsXG4gIFwiRnVuY3Rpb25QZXJpb2RcIixcbiAgXCJGdW5jdGlvblJhbmdlXCIsXG4gIFwiRnVuY3Rpb25TcGFjZVwiLFxuICBcIkZ1c3NlbGxWZXNlbHlJbXBvcnRhbmNlXCIsXG4gIFwiR2Fib3JGaWx0ZXJcIixcbiAgXCJHYWJvck1hdHJpeFwiLFxuICBcIkdhYm9yV2F2ZWxldFwiLFxuICBcIkdhaW5NYXJnaW5zXCIsXG4gIFwiR2FpblBoYXNlTWFyZ2luc1wiLFxuICBcIkdhbGF4eURhdGFcIixcbiAgXCJHYWxsZXJ5Vmlld1wiLFxuICBcIkdhbW1hXCIsXG4gIFwiR2FtbWFEaXN0cmlidXRpb25cIixcbiAgXCJHYW1tYVJlZ3VsYXJpemVkXCIsXG4gIFwiR2FwUGVuYWx0eVwiLFxuICBcIkdBUkNIUHJvY2Vzc1wiLFxuICBcIkdhdGVkUmVjdXJyZW50TGF5ZXJcIixcbiAgXCJHYXRoZXJcIixcbiAgXCJHYXRoZXJCeVwiLFxuICBcIkdhdWdlRmFjZUVsZW1lbnRGdW5jdGlvblwiLFxuICBcIkdhdWdlRmFjZVN0eWxlXCIsXG4gIFwiR2F1Z2VGcmFtZUVsZW1lbnRGdW5jdGlvblwiLFxuICBcIkdhdWdlRnJhbWVTaXplXCIsXG4gIFwiR2F1Z2VGcmFtZVN0eWxlXCIsXG4gIFwiR2F1Z2VMYWJlbHNcIixcbiAgXCJHYXVnZU1hcmtlcnNcIixcbiAgXCJHYXVnZVN0eWxlXCIsXG4gIFwiR2F1c3NpYW5GaWx0ZXJcIixcbiAgXCJHYXVzc2lhbkludGVnZXJzXCIsXG4gIFwiR2F1c3NpYW5NYXRyaXhcIixcbiAgXCJHYXVzc2lhbk9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJHYXVzc2lhblN5bXBsZWN0aWNNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJHYXVzc2lhblVuaXRhcnlNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJHYXVzc2lhbldpbmRvd1wiLFxuICBcIkdDRFwiLFxuICBcIkdlZ2VuYmF1ZXJDXCIsXG4gIFwiR2VuZXJhbFwiLFxuICBcIkdlbmVyYWxpemVkTGluZWFyTW9kZWxGaXRcIixcbiAgXCJHZW5lcmF0ZUFzeW1tZXRyaWNLZXlQYWlyXCIsXG4gIFwiR2VuZXJhdGVDb25kaXRpb25zXCIsXG4gIFwiR2VuZXJhdGVkQ2VsbFwiLFxuICBcIkdlbmVyYXRlZERvY3VtZW50QmluZGluZ1wiLFxuICBcIkdlbmVyYXRlRGVyaXZlZEtleVwiLFxuICBcIkdlbmVyYXRlRGlnaXRhbFNpZ25hdHVyZVwiLFxuICBcIkdlbmVyYXRlRG9jdW1lbnRcIixcbiAgXCJHZW5lcmF0ZWRQYXJhbWV0ZXJzXCIsXG4gIFwiR2VuZXJhdGVkUXVhbnRpdHlNYWduaXR1ZGVzXCIsXG4gIFwiR2VuZXJhdGVGaWxlU2lnbmF0dXJlXCIsXG4gIFwiR2VuZXJhdGVIVFRQUmVzcG9uc2VcIixcbiAgXCJHZW5lcmF0ZVNlY3VyZWRBdXRoZW50aWNhdGlvbktleVwiLFxuICBcIkdlbmVyYXRlU3ltbWV0cmljS2V5XCIsXG4gIFwiR2VuZXJhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiR2VuZXJhdG9yRGVzY3JpcHRpb25cIixcbiAgXCJHZW5lcmF0b3JIaXN0b3J5TGVuZ3RoXCIsXG4gIFwiR2VuZXJhdG9yT3V0cHV0VHlwZVwiLFxuICBcIkdlbmVyaWNcIixcbiAgXCJHZW5lcmljQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uXCIsXG4gIFwiR2Vub21lRGF0YVwiLFxuICBcIkdlbm9tZUxvb2t1cFwiLFxuICBcIkdlb0FudGlwb2RlXCIsXG4gIFwiR2VvQXJlYVwiLFxuICBcIkdlb0FycmF5U2l6ZVwiLFxuICBcIkdlb0JhY2tncm91bmRcIixcbiAgXCJHZW9Cb3VuZGluZ0JveFwiLFxuICBcIkdlb0JvdW5kc1wiLFxuICBcIkdlb0JvdW5kc1JlZ2lvblwiLFxuICBcIkdlb0J1YmJsZUNoYXJ0XCIsXG4gIFwiR2VvQ2VudGVyXCIsXG4gIFwiR2VvQ2lyY2xlXCIsXG4gIFwiR2VvQ29udG91clBsb3RcIixcbiAgXCJHZW9EZW5zaXR5UGxvdFwiLFxuICBcIkdlb2Rlc2ljQ2xvc2luZ1wiLFxuICBcIkdlb2Rlc2ljRGlsYXRpb25cIixcbiAgXCJHZW9kZXNpY0Vyb3Npb25cIixcbiAgXCJHZW9kZXNpY09wZW5pbmdcIixcbiAgXCJHZW9EZXN0aW5hdGlvblwiLFxuICBcIkdlb2Rlc3lEYXRhXCIsXG4gIFwiR2VvRGlyZWN0aW9uXCIsXG4gIFwiR2VvRGlza1wiLFxuICBcIkdlb0Rpc3BsYWNlbWVudFwiLFxuICBcIkdlb0Rpc3RhbmNlXCIsXG4gIFwiR2VvRGlzdGFuY2VMaXN0XCIsXG4gIFwiR2VvRWxldmF0aW9uRGF0YVwiLFxuICBcIkdlb0VudGl0aWVzXCIsXG4gIFwiR2VvR3JhcGhpY3NcIixcbiAgXCJHZW9ncmF2aXR5TW9kZWxEYXRhXCIsXG4gIFwiR2VvR3JpZERpcmVjdGlvbkRpZmZlcmVuY2VcIixcbiAgXCJHZW9HcmlkTGluZXNcIixcbiAgXCJHZW9HcmlkTGluZXNTdHlsZVwiLFxuICBcIkdlb0dyaWRQb3NpdGlvblwiLFxuICBcIkdlb0dyaWRSYW5nZVwiLFxuICBcIkdlb0dyaWRSYW5nZVBhZGRpbmdcIixcbiAgXCJHZW9HcmlkVW5pdEFyZWFcIixcbiAgXCJHZW9HcmlkVW5pdERpc3RhbmNlXCIsXG4gIFwiR2VvR3JpZFZlY3RvclwiLFxuICBcIkdlb0dyb3VwXCIsXG4gIFwiR2VvSGVtaXNwaGVyZVwiLFxuICBcIkdlb0hlbWlzcGhlcmVCb3VuZGFyeVwiLFxuICBcIkdlb0hpc3RvZ3JhbVwiLFxuICBcIkdlb0lkZW50aWZ5XCIsXG4gIFwiR2VvSW1hZ2VcIixcbiAgXCJHZW9MYWJlbHNcIixcbiAgXCJHZW9MZW5ndGhcIixcbiAgXCJHZW9MaXN0UGxvdFwiLFxuICBcIkdlb0xvY2F0aW9uXCIsXG4gIFwiR2VvbG9naWNhbFBlcmlvZERhdGFcIixcbiAgXCJHZW9tYWduZXRpY01vZGVsRGF0YVwiLFxuICBcIkdlb01hcmtlclwiLFxuICBcIkdlb21ldHJpY0Fzc2VydGlvblwiLFxuICBcIkdlb21ldHJpY0Jyb3duaWFuTW90aW9uUHJvY2Vzc1wiLFxuICBcIkdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkdlb21ldHJpY01lYW5cIixcbiAgXCJHZW9tZXRyaWNNZWFuRmlsdGVyXCIsXG4gIFwiR2VvbWV0cmljT3B0aW1pemF0aW9uXCIsXG4gIFwiR2VvbWV0cmljU2NlbmVcIixcbiAgXCJHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvblwiLFxuICBcIkdlb21ldHJpY1RyYW5zZm9ybWF0aW9uM0RCb3hcIixcbiAgXCJHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbjNEQm94T3B0aW9uc1wiLFxuICBcIkdlb21ldHJpY1RyYW5zZm9ybWF0aW9uQm94XCIsXG4gIFwiR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3hPcHRpb25zXCIsXG4gIFwiR2VvTW9kZWxcIixcbiAgXCJHZW9OZWFyZXN0XCIsXG4gIFwiR2VvUGF0aFwiLFxuICBcIkdlb1Bvc2l0aW9uXCIsXG4gIFwiR2VvUG9zaXRpb25FTlVcIixcbiAgXCJHZW9Qb3NpdGlvblhZWlwiLFxuICBcIkdlb1Byb2plY3Rpb25cIixcbiAgXCJHZW9Qcm9qZWN0aW9uRGF0YVwiLFxuICBcIkdlb1JhbmdlXCIsXG4gIFwiR2VvUmFuZ2VQYWRkaW5nXCIsXG4gIFwiR2VvUmVnaW9uVmFsdWVQbG90XCIsXG4gIFwiR2VvUmVzb2x1dGlvblwiLFxuICBcIkdlb1NjYWxlQmFyXCIsXG4gIFwiR2VvU2VydmVyXCIsXG4gIFwiR2VvU21vb3RoSGlzdG9ncmFtXCIsXG4gIFwiR2VvU3RyZWFtUGxvdFwiLFxuICBcIkdlb1N0eWxpbmdcIixcbiAgXCJHZW9TdHlsaW5nSW1hZ2VGdW5jdGlvblwiLFxuICBcIkdlb1ZhcmlhbnRcIixcbiAgXCJHZW9WZWN0b3JcIixcbiAgXCJHZW9WZWN0b3JFTlVcIixcbiAgXCJHZW9WZWN0b3JQbG90XCIsXG4gIFwiR2VvVmVjdG9yWFlaXCIsXG4gIFwiR2VvVmlzaWJsZVJlZ2lvblwiLFxuICBcIkdlb1Zpc2libGVSZWdpb25Cb3VuZGFyeVwiLFxuICBcIkdlb1dpdGhpblFcIixcbiAgXCJHZW9ab29tTGV2ZWxcIixcbiAgXCJHZXN0dXJlSGFuZGxlclwiLFxuICBcIkdlc3R1cmVIYW5kbGVyVGFnXCIsXG4gIFwiR2V0XCIsXG4gIFwiR2V0Qm91bmRpbmdCb3hTaXplUGFja2V0XCIsXG4gIFwiR2V0Q29udGV4dFwiLFxuICBcIkdldEVudmlyb25tZW50XCIsXG4gIFwiR2V0RmlsZU5hbWVcIixcbiAgXCJHZXRGcm9udEVuZE9wdGlvbnNEYXRhUGFja2V0XCIsXG4gIFwiR2V0TGluZWJyZWFrSW5mb3JtYXRpb25QYWNrZXRcIixcbiAgXCJHZXRNZW51c1BhY2tldFwiLFxuICBcIkdldFBhZ2VCcmVha0luZm9ybWF0aW9uUGFja2V0XCIsXG4gIFwiR2xhaXNoZXJcIixcbiAgXCJHbG9iYWxDbHVzdGVyaW5nQ29lZmZpY2llbnRcIixcbiAgXCJHbG9iYWxQcmVmZXJlbmNlc1wiLFxuICBcIkdsb2JhbFNlc3Npb25cIixcbiAgXCJHbG93XCIsXG4gIFwiR29sZGVuQW5nbGVcIixcbiAgXCJHb2xkZW5SYXRpb1wiLFxuICBcIkdvbXBlcnR6TWFrZWhhbURpc3RyaWJ1dGlvblwiLFxuICBcIkdvb2NoU2hhZGluZ1wiLFxuICBcIkdvb2RtYW5LcnVza2FsR2FtbWFcIixcbiAgXCJHb29kbWFuS3J1c2thbEdhbW1hVGVzdFwiLFxuICBcIkdvdG9cIixcbiAgXCJHcmFkXCIsXG4gIFwiR3JhZGllbnRcIixcbiAgXCJHcmFkaWVudEZpbHRlclwiLFxuICBcIkdyYWRpZW50T3JpZW50YXRpb25GaWx0ZXJcIixcbiAgXCJHcmFtbWFyQXBwbHlcIixcbiAgXCJHcmFtbWFyUnVsZXNcIixcbiAgXCJHcmFtbWFyVG9rZW5cIixcbiAgXCJHcmFwaFwiLFxuICBcIkdyYXBoM0RcIixcbiAgXCJHcmFwaEFzc29ydGF0aXZpdHlcIixcbiAgXCJHcmFwaEF1dG9tb3JwaGlzbUdyb3VwXCIsXG4gIFwiR3JhcGhDZW50ZXJcIixcbiAgXCJHcmFwaENvbXBsZW1lbnRcIixcbiAgXCJHcmFwaERhdGFcIixcbiAgXCJHcmFwaERlbnNpdHlcIixcbiAgXCJHcmFwaERpYW1ldGVyXCIsXG4gIFwiR3JhcGhEaWZmZXJlbmNlXCIsXG4gIFwiR3JhcGhEaXNqb2ludFVuaW9uXCIsXG4gIFwiR3JhcGhEaXN0YW5jZVwiLFxuICBcIkdyYXBoRGlzdGFuY2VNYXRyaXhcIixcbiAgXCJHcmFwaEVsZW1lbnREYXRhXCIsXG4gIFwiR3JhcGhFbWJlZGRpbmdcIixcbiAgXCJHcmFwaEhpZ2hsaWdodFwiLFxuICBcIkdyYXBoSGlnaGxpZ2h0U3R5bGVcIixcbiAgXCJHcmFwaEh1YlwiLFxuICBcIkdyYXBoaWNzXCIsXG4gIFwiR3JhcGhpY3MzRFwiLFxuICBcIkdyYXBoaWNzM0RCb3hcIixcbiAgXCJHcmFwaGljczNEQm94T3B0aW9uc1wiLFxuICBcIkdyYXBoaWNzQXJyYXlcIixcbiAgXCJHcmFwaGljc0Jhc2VsaW5lXCIsXG4gIFwiR3JhcGhpY3NCb3hcIixcbiAgXCJHcmFwaGljc0JveE9wdGlvbnNcIixcbiAgXCJHcmFwaGljc0NvbG9yXCIsXG4gIFwiR3JhcGhpY3NDb2x1bW5cIixcbiAgXCJHcmFwaGljc0NvbXBsZXhcIixcbiAgXCJHcmFwaGljc0NvbXBsZXgzREJveFwiLFxuICBcIkdyYXBoaWNzQ29tcGxleDNEQm94T3B0aW9uc1wiLFxuICBcIkdyYXBoaWNzQ29tcGxleEJveFwiLFxuICBcIkdyYXBoaWNzQ29tcGxleEJveE9wdGlvbnNcIixcbiAgXCJHcmFwaGljc0NvbnRlbnRzXCIsXG4gIFwiR3JhcGhpY3NEYXRhXCIsXG4gIFwiR3JhcGhpY3NHcmlkXCIsXG4gIFwiR3JhcGhpY3NHcmlkQm94XCIsXG4gIFwiR3JhcGhpY3NHcm91cFwiLFxuICBcIkdyYXBoaWNzR3JvdXAzREJveFwiLFxuICBcIkdyYXBoaWNzR3JvdXAzREJveE9wdGlvbnNcIixcbiAgXCJHcmFwaGljc0dyb3VwQm94XCIsXG4gIFwiR3JhcGhpY3NHcm91cEJveE9wdGlvbnNcIixcbiAgXCJHcmFwaGljc0dyb3VwaW5nXCIsXG4gIFwiR3JhcGhpY3NIaWdobGlnaHRDb2xvclwiLFxuICBcIkdyYXBoaWNzUm93XCIsXG4gIFwiR3JhcGhpY3NTcGFjaW5nXCIsXG4gIFwiR3JhcGhpY3NTdHlsZVwiLFxuICBcIkdyYXBoSW50ZXJzZWN0aW9uXCIsXG4gIFwiR3JhcGhMYXlvdXRcIixcbiAgXCJHcmFwaExpbmtFZmZpY2llbmN5XCIsXG4gIFwiR3JhcGhQZXJpcGhlcnlcIixcbiAgXCJHcmFwaFBsb3RcIixcbiAgXCJHcmFwaFBsb3QzRFwiLFxuICBcIkdyYXBoUG93ZXJcIixcbiAgXCJHcmFwaFByb3BlcnR5RGlzdHJpYnV0aW9uXCIsXG4gIFwiR3JhcGhRXCIsXG4gIFwiR3JhcGhSYWRpdXNcIixcbiAgXCJHcmFwaFJlY2lwcm9jaXR5XCIsXG4gIFwiR3JhcGhSb290XCIsXG4gIFwiR3JhcGhTdHlsZVwiLFxuICBcIkdyYXBoVW5pb25cIixcbiAgXCJHcmF5XCIsXG4gIFwiR3JheUxldmVsXCIsXG4gIFwiR3JlYXRlclwiLFxuICBcIkdyZWF0ZXJFcXVhbFwiLFxuICBcIkdyZWF0ZXJFcXVhbExlc3NcIixcbiAgXCJHcmVhdGVyRXF1YWxUaGFuXCIsXG4gIFwiR3JlYXRlckZ1bGxFcXVhbFwiLFxuICBcIkdyZWF0ZXJHcmVhdGVyXCIsXG4gIFwiR3JlYXRlckxlc3NcIixcbiAgXCJHcmVhdGVyU2xhbnRFcXVhbFwiLFxuICBcIkdyZWF0ZXJUaGFuXCIsXG4gIFwiR3JlYXRlclRpbGRlXCIsXG4gIFwiR3JlZW5cIixcbiAgXCJHcmVlbkZ1bmN0aW9uXCIsXG4gIFwiR3JpZFwiLFxuICBcIkdyaWRCYXNlbGluZVwiLFxuICBcIkdyaWRCb3hcIixcbiAgXCJHcmlkQm94QWxpZ25tZW50XCIsXG4gIFwiR3JpZEJveEJhY2tncm91bmRcIixcbiAgXCJHcmlkQm94RGl2aWRlcnNcIixcbiAgXCJHcmlkQm94RnJhbWVcIixcbiAgXCJHcmlkQm94SXRlbVNpemVcIixcbiAgXCJHcmlkQm94SXRlbVN0eWxlXCIsXG4gIFwiR3JpZEJveE9wdGlvbnNcIixcbiAgXCJHcmlkQm94U3BhY2luZ3NcIixcbiAgXCJHcmlkQ3JlYXRpb25TZXR0aW5nc1wiLFxuICBcIkdyaWREZWZhdWx0RWxlbWVudFwiLFxuICBcIkdyaWRFbGVtZW50U3R5bGVPcHRpb25zXCIsXG4gIFwiR3JpZEZyYW1lXCIsXG4gIFwiR3JpZEZyYW1lTWFyZ2luc1wiLFxuICBcIkdyaWRHcmFwaFwiLFxuICBcIkdyaWRMaW5lc1wiLFxuICBcIkdyaWRMaW5lc1N0eWxlXCIsXG4gIFwiR3JvZWJuZXJCYXNpc1wiLFxuICBcIkdyb3VwQWN0aW9uQmFzZVwiLFxuICBcIkdyb3VwQnlcIixcbiAgXCJHcm91cENlbnRyYWxpemVyXCIsXG4gIFwiR3JvdXBFbGVtZW50RnJvbVdvcmRcIixcbiAgXCJHcm91cEVsZW1lbnRQb3NpdGlvblwiLFxuICBcIkdyb3VwRWxlbWVudFFcIixcbiAgXCJHcm91cEVsZW1lbnRzXCIsXG4gIFwiR3JvdXBFbGVtZW50VG9Xb3JkXCIsXG4gIFwiR3JvdXBHZW5lcmF0b3JzXCIsXG4gIFwiR3JvdXBpbmdzXCIsXG4gIFwiR3JvdXBNdWx0aXBsaWNhdGlvblRhYmxlXCIsXG4gIFwiR3JvdXBPcmJpdHNcIixcbiAgXCJHcm91cE9yZGVyXCIsXG4gIFwiR3JvdXBQYWdlQnJlYWtXaXRoaW5cIixcbiAgXCJHcm91cFNldHdpc2VTdGFiaWxpemVyXCIsXG4gIFwiR3JvdXBTdGFiaWxpemVyXCIsXG4gIFwiR3JvdXBTdGFiaWxpemVyQ2hhaW5cIixcbiAgXCJHcm91cFRvZ2V0aGVyR3JvdXBpbmdcIixcbiAgXCJHcm91cFRvZ2V0aGVyTmVzdGVkR3JvdXBpbmdcIixcbiAgXCJHcm93Q3V0Q29tcG9uZW50c1wiLFxuICBcIkd1ZGVybWFubmlhblwiLFxuICBcIkd1aWRlZEZpbHRlclwiLFxuICBcIkd1bWJlbERpc3RyaWJ1dGlvblwiLFxuICBcIkhhYXJXYXZlbGV0XCIsXG4gIFwiSGFkYW1hcmRNYXRyaXhcIixcbiAgXCJIYWxmTGluZVwiLFxuICBcIkhhbGZOb3JtYWxEaXN0cmlidXRpb25cIixcbiAgXCJIYWxmUGxhbmVcIixcbiAgXCJIYWxmU3BhY2VcIixcbiAgXCJIYWxmdG9uZVNoYWRpbmdcIixcbiAgXCJIYW1pbHRvbmlhbkdyYXBoUVwiLFxuICBcIkhhbW1pbmdEaXN0YW5jZVwiLFxuICBcIkhhbW1pbmdXaW5kb3dcIixcbiAgXCJIYW5kbGVyRnVuY3Rpb25zXCIsXG4gIFwiSGFuZGxlckZ1bmN0aW9uc0tleXNcIixcbiAgXCJIYW5rZWxIMVwiLFxuICBcIkhhbmtlbEgyXCIsXG4gIFwiSGFua2VsTWF0cml4XCIsXG4gIFwiSGFua2VsVHJhbnNmb3JtXCIsXG4gIFwiSGFublBvaXNzb25XaW5kb3dcIixcbiAgXCJIYW5uV2luZG93XCIsXG4gIFwiSGFyYWRhTm9ydG9uR3JvdXBITlwiLFxuICBcIkhhcmFyeUdyYXBoXCIsXG4gIFwiSGFybW9uaWNNZWFuXCIsXG4gIFwiSGFybW9uaWNNZWFuRmlsdGVyXCIsXG4gIFwiSGFybW9uaWNOdW1iZXJcIixcbiAgXCJIYXNoXCIsXG4gIFwiSGF0Y2hGaWxsaW5nXCIsXG4gIFwiSGF0Y2hTaGFkaW5nXCIsXG4gIFwiSGF2ZXJzaW5lXCIsXG4gIFwiSGF6YXJkRnVuY3Rpb25cIixcbiAgXCJIZWFkXCIsXG4gIFwiSGVhZENvbXBvc2VcIixcbiAgXCJIZWFkZXJBbGlnbm1lbnRcIixcbiAgXCJIZWFkZXJCYWNrZ3JvdW5kXCIsXG4gIFwiSGVhZGVyRGlzcGxheUZ1bmN0aW9uXCIsXG4gIFwiSGVhZGVyTGluZXNcIixcbiAgXCJIZWFkZXJTaXplXCIsXG4gIFwiSGVhZGVyU3R5bGVcIixcbiAgXCJIZWFkc1wiLFxuICBcIkhlYXZpc2lkZUxhbWJkYVwiLFxuICBcIkhlYXZpc2lkZVBpXCIsXG4gIFwiSGVhdmlzaWRlVGhldGFcIixcbiAgXCJIZWxkR3JvdXBIZVwiLFxuICBcIkhlbGRQYXJ0XCIsXG4gIFwiSGVscEJyb3dzZXJMb29rdXBcIixcbiAgXCJIZWxwQnJvd3Nlck5vdGVib29rXCIsXG4gIFwiSGVscEJyb3dzZXJTZXR0aW5nc1wiLFxuICBcIkhlcmVcIixcbiAgXCJIZXJtaXRlRGVjb21wb3NpdGlvblwiLFxuICBcIkhlcm1pdGVIXCIsXG4gIFwiSGVybWl0aWFuTWF0cml4UVwiLFxuICBcIkhlc3NlbmJlcmdEZWNvbXBvc2l0aW9uXCIsXG4gIFwiSGVzc2lhblwiLFxuICBcIkhldW5CXCIsXG4gIFwiSGV1bkJQcmltZVwiLFxuICBcIkhldW5DXCIsXG4gIFwiSGV1bkNQcmltZVwiLFxuICBcIkhldW5EXCIsXG4gIFwiSGV1bkRQcmltZVwiLFxuICBcIkhldW5HXCIsXG4gIFwiSGV1bkdQcmltZVwiLFxuICBcIkhldW5UXCIsXG4gIFwiSGV1blRQcmltZVwiLFxuICBcIkhleGFkZWNpbWFsQ2hhcmFjdGVyXCIsXG4gIFwiSGV4YWhlZHJvblwiLFxuICBcIkhleGFoZWRyb25Cb3hcIixcbiAgXCJIZXhhaGVkcm9uQm94T3B0aW9uc1wiLFxuICBcIkhpZGRlbkl0ZW1zXCIsXG4gIFwiSGlkZGVuTWFya292UHJvY2Vzc1wiLFxuICBcIkhpZGRlblN1cmZhY2VcIixcbiAgXCJIaWdobGlnaHRlZFwiLFxuICBcIkhpZ2hsaWdodEdyYXBoXCIsXG4gIFwiSGlnaGxpZ2h0SW1hZ2VcIixcbiAgXCJIaWdobGlnaHRNZXNoXCIsXG4gIFwiSGlnaHBhc3NGaWx0ZXJcIixcbiAgXCJIaWdtYW5TaW1zR3JvdXBIU1wiLFxuICBcIkhpbGJlcnRDdXJ2ZVwiLFxuICBcIkhpbGJlcnRGaWx0ZXJcIixcbiAgXCJIaWxiZXJ0TWF0cml4XCIsXG4gIFwiSGlzdG9ncmFtXCIsXG4gIFwiSGlzdG9ncmFtM0RcIixcbiAgXCJIaXN0b2dyYW1EaXN0cmlidXRpb25cIixcbiAgXCJIaXN0b2dyYW1MaXN0XCIsXG4gIFwiSGlzdG9ncmFtVHJhbnNmb3JtXCIsXG4gIFwiSGlzdG9ncmFtVHJhbnNmb3JtSW50ZXJwb2xhdGlvblwiLFxuICBcIkhpc3RvcmljYWxQZXJpb2REYXRhXCIsXG4gIFwiSGl0TWlzc1RyYW5zZm9ybVwiLFxuICBcIkhJVFNDZW50cmFsaXR5XCIsXG4gIFwiSGpvcnRoRGlzdHJpYnV0aW9uXCIsXG4gIFwiSG9kZ2VEdWFsXCIsXG4gIFwiSG9lZmZkaW5nRFwiLFxuICBcIkhvZWZmZGluZ0RUZXN0XCIsXG4gIFwiSG9sZFwiLFxuICBcIkhvbGRBbGxcIixcbiAgXCJIb2xkQWxsQ29tcGxldGVcIixcbiAgXCJIb2xkQ29tcGxldGVcIixcbiAgXCJIb2xkRmlyc3RcIixcbiAgXCJIb2xkRm9ybVwiLFxuICBcIkhvbGRQYXR0ZXJuXCIsXG4gIFwiSG9sZFJlc3RcIixcbiAgXCJIb2xpZGF5Q2FsZW5kYXJcIixcbiAgXCJIb21lRGlyZWN0b3J5XCIsXG4gIFwiSG9tZVBhZ2VcIixcbiAgXCJIb3Jpem9udGFsXCIsXG4gIFwiSG9yaXpvbnRhbEZvcm1cIixcbiAgXCJIb3Jpem9udGFsR2F1Z2VcIixcbiAgXCJIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb25cIixcbiAgXCJIb3JuZXJGb3JtXCIsXG4gIFwiSG9zdExvb2t1cFwiLFxuICBcIkhvdGVsbGluZ1RTcXVhcmVEaXN0cmlidXRpb25cIixcbiAgXCJIb3l0RGlzdHJpYnV0aW9uXCIsXG4gIFwiSFRNTFNhdmVcIixcbiAgXCJIVFRQRXJyb3JSZXNwb25zZVwiLFxuICBcIkhUVFBSZWRpcmVjdFwiLFxuICBcIkhUVFBSZXF1ZXN0XCIsXG4gIFwiSFRUUFJlcXVlc3REYXRhXCIsXG4gIFwiSFRUUFJlc3BvbnNlXCIsXG4gIFwiSHVlXCIsXG4gIFwiSHVtYW5Hcm93dGhEYXRhXCIsXG4gIFwiSHVtcERvd25IdW1wXCIsXG4gIFwiSHVtcEVxdWFsXCIsXG4gIFwiSHVyd2l0ekxlcmNoUGhpXCIsXG4gIFwiSHVyd2l0elpldGFcIixcbiAgXCJIeXBlcmJvbGljRGlzdHJpYnV0aW9uXCIsXG4gIFwiSHlwZXJjdWJlR3JhcGhcIixcbiAgXCJIeXBlcmV4cG9uZW50aWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiSHlwZXJmYWN0b3JpYWxcIixcbiAgXCJIeXBlcmdlb21ldHJpYzBGMVwiLFxuICBcIkh5cGVyZ2VvbWV0cmljMEYxUmVndWxhcml6ZWRcIixcbiAgXCJIeXBlcmdlb21ldHJpYzFGMVwiLFxuICBcIkh5cGVyZ2VvbWV0cmljMUYxUmVndWxhcml6ZWRcIixcbiAgXCJIeXBlcmdlb21ldHJpYzJGMVwiLFxuICBcIkh5cGVyZ2VvbWV0cmljMkYxUmVndWxhcml6ZWRcIixcbiAgXCJIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkh5cGVyZ2VvbWV0cmljUEZRXCIsXG4gIFwiSHlwZXJnZW9tZXRyaWNQRlFSZWd1bGFyaXplZFwiLFxuICBcIkh5cGVyZ2VvbWV0cmljVVwiLFxuICBcIkh5cGVybGlua1wiLFxuICBcIkh5cGVybGlua0FjdGlvblwiLFxuICBcIkh5cGVybGlua0NyZWF0aW9uU2V0dGluZ3NcIixcbiAgXCJIeXBlcnBsYW5lXCIsXG4gIFwiSHlwaGVuYXRpb25cIixcbiAgXCJIeXBoZW5hdGlvbk9wdGlvbnNcIixcbiAgXCJIeXBvZXhwb25lbnRpYWxEaXN0cmlidXRpb25cIixcbiAgXCJIeXBvdGhlc2lzVGVzdERhdGFcIixcbiAgXCJJXCIsXG4gIFwiSWNvbkRhdGFcIixcbiAgXCJJY29uaXplXCIsXG4gIFwiSWNvbml6ZWRPYmplY3RcIixcbiAgXCJJY29uUnVsZXNcIixcbiAgXCJJY29zYWhlZHJvblwiLFxuICBcIklkZW50aXR5XCIsXG4gIFwiSWRlbnRpdHlNYXRyaXhcIixcbiAgXCJJZlwiLFxuICBcIklnbm9yZUNhc2VcIixcbiAgXCJJZ25vcmVEaWFjcml0aWNzXCIsXG4gIFwiSWdub3JlUHVuY3R1YXRpb25cIixcbiAgXCJJZ25vcmVTcGVsbENoZWNrXCIsXG4gIFwiSWdub3JpbmdJbmFjdGl2ZVwiLFxuICBcIkltXCIsXG4gIFwiSW1hZ2VcIixcbiAgXCJJbWFnZTNEXCIsXG4gIFwiSW1hZ2UzRFByb2plY3Rpb25cIixcbiAgXCJJbWFnZTNEU2xpY2VzXCIsXG4gIFwiSW1hZ2VBY2N1bXVsYXRlXCIsXG4gIFwiSW1hZ2VBZGRcIixcbiAgXCJJbWFnZUFkanVzdFwiLFxuICBcIkltYWdlQWxpZ25cIixcbiAgXCJJbWFnZUFwcGx5XCIsXG4gIFwiSW1hZ2VBcHBseUluZGV4ZWRcIixcbiAgXCJJbWFnZUFzcGVjdFJhdGlvXCIsXG4gIFwiSW1hZ2VBc3NlbWJsZVwiLFxuICBcIkltYWdlQXVnbWVudGF0aW9uTGF5ZXJcIixcbiAgXCJJbWFnZUJvdW5kaW5nQm94ZXNcIixcbiAgXCJJbWFnZUNhY2hlXCIsXG4gIFwiSW1hZ2VDYWNoZVZhbGlkXCIsXG4gIFwiSW1hZ2VDYXB0dXJlXCIsXG4gIFwiSW1hZ2VDYXB0dXJlRnVuY3Rpb25cIixcbiAgXCJJbWFnZUNhc2VzXCIsXG4gIFwiSW1hZ2VDaGFubmVsc1wiLFxuICBcIkltYWdlQ2xpcFwiLFxuICBcIkltYWdlQ29sbGFnZVwiLFxuICBcIkltYWdlQ29sb3JTcGFjZVwiLFxuICBcIkltYWdlQ29tcG9zZVwiLFxuICBcIkltYWdlQ29udGFpbnNRXCIsXG4gIFwiSW1hZ2VDb250ZW50c1wiLFxuICBcIkltYWdlQ29udm9sdmVcIixcbiAgXCJJbWFnZUNvb2NjdXJyZW5jZVwiLFxuICBcIkltYWdlQ29ybmVyc1wiLFxuICBcIkltYWdlQ29ycmVsYXRlXCIsXG4gIFwiSW1hZ2VDb3JyZXNwb25kaW5nUG9pbnRzXCIsXG4gIFwiSW1hZ2VDcm9wXCIsXG4gIFwiSW1hZ2VEYXRhXCIsXG4gIFwiSW1hZ2VEZWNvbnZvbHZlXCIsXG4gIFwiSW1hZ2VEZW1vc2FpY1wiLFxuICBcIkltYWdlRGlmZmVyZW5jZVwiLFxuICBcIkltYWdlRGltZW5zaW9uc1wiLFxuICBcIkltYWdlRGlzcGxhY2VtZW50c1wiLFxuICBcIkltYWdlRGlzdGFuY2VcIixcbiAgXCJJbWFnZUVmZmVjdFwiLFxuICBcIkltYWdlRXhwb3N1cmVDb21iaW5lXCIsXG4gIFwiSW1hZ2VGZWF0dXJlVHJhY2tcIixcbiAgXCJJbWFnZUZpbGVBcHBseVwiLFxuICBcIkltYWdlRmlsZUZpbHRlclwiLFxuICBcIkltYWdlRmlsZVNjYW5cIixcbiAgXCJJbWFnZUZpbHRlclwiLFxuICBcIkltYWdlRm9jdXNDb21iaW5lXCIsXG4gIFwiSW1hZ2VGb3Jlc3RpbmdDb21wb25lbnRzXCIsXG4gIFwiSW1hZ2VGb3JtYXR0aW5nV2lkdGhcIixcbiAgXCJJbWFnZUZvcndhcmRUcmFuc2Zvcm1hdGlvblwiLFxuICBcIkltYWdlR3JhcGhpY3NcIixcbiAgXCJJbWFnZUhpc3RvZ3JhbVwiLFxuICBcIkltYWdlSWRlbnRpZnlcIixcbiAgXCJJbWFnZUluc3RhbmNlUVwiLFxuICBcIkltYWdlS2V5cG9pbnRzXCIsXG4gIFwiSW1hZ2VMYWJlbHNcIixcbiAgXCJJbWFnZUxlZ2VuZHNcIixcbiAgXCJJbWFnZUxldmVsc1wiLFxuICBcIkltYWdlTGluZXNcIixcbiAgXCJJbWFnZU1hcmdpbnNcIixcbiAgXCJJbWFnZU1hcmtlclwiLFxuICBcIkltYWdlTWFya2Vyc1wiLFxuICBcIkltYWdlTWVhc3VyZW1lbnRzXCIsXG4gIFwiSW1hZ2VNZXNoXCIsXG4gIFwiSW1hZ2VNdWx0aXBseVwiLFxuICBcIkltYWdlT2Zmc2V0XCIsXG4gIFwiSW1hZ2VQYWRcIixcbiAgXCJJbWFnZVBhZGRpbmdcIixcbiAgXCJJbWFnZVBhcnRpdGlvblwiLFxuICBcIkltYWdlUGVyaW9kb2dyYW1cIixcbiAgXCJJbWFnZVBlcnNwZWN0aXZlVHJhbnNmb3JtYXRpb25cIixcbiAgXCJJbWFnZVBvc2l0aW9uXCIsXG4gIFwiSW1hZ2VQcmV2aWV3RnVuY3Rpb25cIixcbiAgXCJJbWFnZVB5cmFtaWRcIixcbiAgXCJJbWFnZVB5cmFtaWRBcHBseVwiLFxuICBcIkltYWdlUVwiLFxuICBcIkltYWdlUmFuZ2VDYWNoZVwiLFxuICBcIkltYWdlUmVjb2xvclwiLFxuICBcIkltYWdlUmVmbGVjdFwiLFxuICBcIkltYWdlUmVnaW9uXCIsXG4gIFwiSW1hZ2VSZXNpemVcIixcbiAgXCJJbWFnZVJlc29sdXRpb25cIixcbiAgXCJJbWFnZVJlc3R5bGVcIixcbiAgXCJJbWFnZVJvdGF0ZVwiLFxuICBcIkltYWdlUm90YXRlZFwiLFxuICBcIkltYWdlU2FsaWVuY3lGaWx0ZXJcIixcbiAgXCJJbWFnZVNjYWxlZFwiLFxuICBcIkltYWdlU2NhblwiLFxuICBcIkltYWdlU2l6ZVwiLFxuICBcIkltYWdlU2l6ZUFjdGlvblwiLFxuICBcIkltYWdlU2l6ZUNhY2hlXCIsXG4gIFwiSW1hZ2VTaXplTXVsdGlwbGllcnNcIixcbiAgXCJJbWFnZVNpemVSYXdcIixcbiAgXCJJbWFnZVN1YnRyYWN0XCIsXG4gIFwiSW1hZ2VUYWtlXCIsXG4gIFwiSW1hZ2VUcmFuc2Zvcm1hdGlvblwiLFxuICBcIkltYWdlVHJpbVwiLFxuICBcIkltYWdlVHlwZVwiLFxuICBcIkltYWdlVmFsdWVcIixcbiAgXCJJbWFnZVZhbHVlUG9zaXRpb25zXCIsXG4gIFwiSW1hZ2luZ0RldmljZVwiLFxuICBcIkltcGxpY2l0UmVnaW9uXCIsXG4gIFwiSW1wbGllc1wiLFxuICBcIkltcG9ydFwiLFxuICBcIkltcG9ydEF1dG9SZXBsYWNlbWVudHNcIixcbiAgXCJJbXBvcnRCeXRlQXJyYXlcIixcbiAgXCJJbXBvcnRPcHRpb25zXCIsXG4gIFwiSW1wb3J0U3RyaW5nXCIsXG4gIFwiSW1wcm92ZW1lbnRJbXBvcnRhbmNlXCIsXG4gIFwiSW5cIixcbiAgXCJJbmFjdGl2YXRlXCIsXG4gIFwiSW5hY3RpdmVcIixcbiAgXCJJbmNpZGVuY2VHcmFwaFwiLFxuICBcIkluY2lkZW5jZUxpc3RcIixcbiAgXCJJbmNpZGVuY2VNYXRyaXhcIixcbiAgXCJJbmNsdWRlQXJvbWF0aWNCb25kc1wiLFxuICBcIkluY2x1ZGVDb25zdGFudEJhc2lzXCIsXG4gIFwiSW5jbHVkZURlZmluaXRpb25zXCIsXG4gIFwiSW5jbHVkZURpcmVjdG9yaWVzXCIsXG4gIFwiSW5jbHVkZUZpbGVFeHRlbnNpb25cIixcbiAgXCJJbmNsdWRlR2VuZXJhdG9yVGFza3NcIixcbiAgXCJJbmNsdWRlSHlkcm9nZW5zXCIsXG4gIFwiSW5jbHVkZUluZmxlY3Rpb25zXCIsXG4gIFwiSW5jbHVkZU1ldGFJbmZvcm1hdGlvblwiLFxuICBcIkluY2x1ZGVQb2RzXCIsXG4gIFwiSW5jbHVkZVF1YW50aXRpZXNcIixcbiAgXCJJbmNsdWRlUmVsYXRlZFRhYmxlc1wiLFxuICBcIkluY2x1ZGVTaW5ndWxhclRlcm1cIixcbiAgXCJJbmNsdWRlV2luZG93VGltZXNcIixcbiAgXCJJbmNyZW1lbnRcIixcbiAgXCJJbmRlZmluaXRlTWF0cml4UVwiLFxuICBcIkluZGVudFwiLFxuICBcIkluZGVudGluZ05ld2xpbmVTcGFjaW5nc1wiLFxuICBcIkluZGVudE1heEZyYWN0aW9uXCIsXG4gIFwiSW5kZXBlbmRlbmNlVGVzdFwiLFxuICBcIkluZGVwZW5kZW50RWRnZVNldFFcIixcbiAgXCJJbmRlcGVuZGVudFBoeXNpY2FsUXVhbnRpdHlcIixcbiAgXCJJbmRlcGVuZGVudFVuaXRcIixcbiAgXCJJbmRlcGVuZGVudFVuaXREaW1lbnNpb25cIixcbiAgXCJJbmRlcGVuZGVudFZlcnRleFNldFFcIixcbiAgXCJJbmRldGVybWluYXRlXCIsXG4gIFwiSW5kZXRlcm1pbmF0ZVRocmVzaG9sZFwiLFxuICBcIkluZGV4Q3JlYXRpb25PcHRpb25zXCIsXG4gIFwiSW5kZXhlZFwiLFxuICBcIkluZGV4RWRnZVRhZ2dlZEdyYXBoXCIsXG4gIFwiSW5kZXhHcmFwaFwiLFxuICBcIkluZGV4VGFnXCIsXG4gIFwiSW5lcXVhbGl0eVwiLFxuICBcIkluZXhhY3ROdW1iZXJRXCIsXG4gIFwiSW5leGFjdE51bWJlcnNcIixcbiAgXCJJbmZpbml0ZUZ1dHVyZVwiLFxuICBcIkluZmluaXRlTGluZVwiLFxuICBcIkluZmluaXRlUGFzdFwiLFxuICBcIkluZmluaXRlUGxhbmVcIixcbiAgXCJJbmZpbml0eVwiLFxuICBcIkluZml4XCIsXG4gIFwiSW5mbGF0aW9uQWRqdXN0XCIsXG4gIFwiSW5mbGF0aW9uTWV0aG9kXCIsXG4gIFwiSW5mb3JtYXRpb25cIixcbiAgXCJJbmZvcm1hdGlvbkRhdGFcIixcbiAgXCJJbmZvcm1hdGlvbkRhdGFHcmlkXCIsXG4gIFwiSW5oZXJpdGVkXCIsXG4gIFwiSW5oZXJpdFNjb3BlXCIsXG4gIFwiSW5ob21vZ2VuZW91c1BvaXNzb25Qcm9jZXNzXCIsXG4gIFwiSW5pdGlhbEV2YWx1YXRpb25IaXN0b3J5XCIsXG4gIFwiSW5pdGlhbGl6YXRpb25cIixcbiAgXCJJbml0aWFsaXphdGlvbkNlbGxcIixcbiAgXCJJbml0aWFsaXphdGlvbkNlbGxFdmFsdWF0aW9uXCIsXG4gIFwiSW5pdGlhbGl6YXRpb25DZWxsV2FybmluZ1wiLFxuICBcIkluaXRpYWxpemF0aW9uT2JqZWN0c1wiLFxuICBcIkluaXRpYWxpemF0aW9uVmFsdWVcIixcbiAgXCJJbml0aWFsaXplXCIsXG4gIFwiSW5pdGlhbFNlZWRpbmdcIixcbiAgXCJJbmxpbmVDb3VudGVyQXNzaWdubWVudHNcIixcbiAgXCJJbmxpbmVDb3VudGVySW5jcmVtZW50c1wiLFxuICBcIklubGluZVJ1bGVzXCIsXG4gIFwiSW5uZXJcIixcbiAgXCJJbm5lclBvbHlnb25cIixcbiAgXCJJbm5lclBvbHloZWRyb25cIixcbiAgXCJJbnBhaW50XCIsXG4gIFwiSW5wdXRcIixcbiAgXCJJbnB1dEFsaWFzZXNcIixcbiAgXCJJbnB1dEFzc3VtcHRpb25zXCIsXG4gIFwiSW5wdXRBdXRvUmVwbGFjZW1lbnRzXCIsXG4gIFwiSW5wdXRGaWVsZFwiLFxuICBcIklucHV0RmllbGRCb3hcIixcbiAgXCJJbnB1dEZpZWxkQm94T3B0aW9uc1wiLFxuICBcIklucHV0Rm9ybVwiLFxuICBcIklucHV0R3JvdXBpbmdcIixcbiAgXCJJbnB1dE5hbWVQYWNrZXRcIixcbiAgXCJJbnB1dE5vdGVib29rXCIsXG4gIFwiSW5wdXRQYWNrZXRcIixcbiAgXCJJbnB1dFNldHRpbmdzXCIsXG4gIFwiSW5wdXRTdHJlYW1cIixcbiAgXCJJbnB1dFN0cmluZ1wiLFxuICBcIklucHV0U3RyaW5nUGFja2V0XCIsXG4gIFwiSW5wdXRUb0JveEZvcm1QYWNrZXRcIixcbiAgXCJJbnNlcnRcIixcbiAgXCJJbnNlcnRpb25GdW5jdGlvblwiLFxuICBcIkluc2VydGlvblBvaW50T2JqZWN0XCIsXG4gIFwiSW5zZXJ0TGluZWJyZWFrc1wiLFxuICBcIkluc2VydFJlc3VsdHNcIixcbiAgXCJJbnNldFwiLFxuICBcIkluc2V0M0RCb3hcIixcbiAgXCJJbnNldDNEQm94T3B0aW9uc1wiLFxuICBcIkluc2V0Qm94XCIsXG4gIFwiSW5zZXRCb3hPcHRpb25zXCIsXG4gIFwiSW5zcGhlcmVcIixcbiAgXCJJbnN0YWxsXCIsXG4gIFwiSW5zdGFsbFNlcnZpY2VcIixcbiAgXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25MYXllclwiLFxuICBcIkluU3RyaW5nXCIsXG4gIFwiSW50ZWdlclwiLFxuICBcIkludGVnZXJEaWdpdHNcIixcbiAgXCJJbnRlZ2VyRXhwb25lbnRcIixcbiAgXCJJbnRlZ2VyTGVuZ3RoXCIsXG4gIFwiSW50ZWdlck5hbWVcIixcbiAgXCJJbnRlZ2VyUGFydFwiLFxuICBcIkludGVnZXJQYXJ0aXRpb25zXCIsXG4gIFwiSW50ZWdlclFcIixcbiAgXCJJbnRlZ2VyUmV2ZXJzZVwiLFxuICBcIkludGVnZXJzXCIsXG4gIFwiSW50ZWdlclN0cmluZ1wiLFxuICBcIkludGVncmFsXCIsXG4gIFwiSW50ZWdyYXRlXCIsXG4gIFwiSW50ZXJhY3RpdmVcIixcbiAgXCJJbnRlcmFjdGl2ZVRyYWRpbmdDaGFydFwiLFxuICBcIkludGVybGFjZWRcIixcbiAgXCJJbnRlcmxlYXZpbmdcIixcbiAgXCJJbnRlcm5hbGx5QmFsYW5jZWREZWNvbXBvc2l0aW9uXCIsXG4gIFwiSW50ZXJwb2xhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiSW50ZXJwb2xhdGluZ1BvbHlub21pYWxcIixcbiAgXCJJbnRlcnBvbGF0aW9uXCIsXG4gIFwiSW50ZXJwb2xhdGlvbk9yZGVyXCIsXG4gIFwiSW50ZXJwb2xhdGlvblBvaW50c1wiLFxuICBcIkludGVycG9sYXRpb25QcmVjaXNpb25cIixcbiAgXCJJbnRlcnByZXRhdGlvblwiLFxuICBcIkludGVycHJldGF0aW9uQm94XCIsXG4gIFwiSW50ZXJwcmV0YXRpb25Cb3hPcHRpb25zXCIsXG4gIFwiSW50ZXJwcmV0YXRpb25GdW5jdGlvblwiLFxuICBcIkludGVycHJldGVyXCIsXG4gIFwiSW50ZXJwcmV0VGVtcGxhdGVcIixcbiAgXCJJbnRlcnF1YXJ0aWxlUmFuZ2VcIixcbiAgXCJJbnRlcnJ1cHRcIixcbiAgXCJJbnRlcnJ1cHRTZXR0aW5nc1wiLFxuICBcIkludGVyc2VjdGVkRW50aXR5Q2xhc3NcIixcbiAgXCJJbnRlcnNlY3RpbmdRXCIsXG4gIFwiSW50ZXJzZWN0aW9uXCIsXG4gIFwiSW50ZXJ2YWxcIixcbiAgXCJJbnRlcnZhbEludGVyc2VjdGlvblwiLFxuICBcIkludGVydmFsTWFya2Vyc1wiLFxuICBcIkludGVydmFsTWFya2Vyc1N0eWxlXCIsXG4gIFwiSW50ZXJ2YWxNZW1iZXJRXCIsXG4gIFwiSW50ZXJ2YWxTbGlkZXJcIixcbiAgXCJJbnRlcnZhbFVuaW9uXCIsXG4gIFwiSW50b1wiLFxuICBcIkludmVyc2VcIixcbiAgXCJJbnZlcnNlQmV0YVJlZ3VsYXJpemVkXCIsXG4gIFwiSW52ZXJzZUNERlwiLFxuICBcIkludmVyc2VDaGlTcXVhcmVEaXN0cmlidXRpb25cIixcbiAgXCJJbnZlcnNlQ29udGludW91c1dhdmVsZXRUcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlRGlzdGFuY2VUcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlRWxsaXB0aWNOb21lUVwiLFxuICBcIkludmVyc2VFcmZcIixcbiAgXCJJbnZlcnNlRXJmY1wiLFxuICBcIkludmVyc2VGb3VyaWVyXCIsXG4gIFwiSW52ZXJzZUZvdXJpZXJDb3NUcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlRm91cmllclNlcXVlbmNlVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZUZvdXJpZXJTaW5UcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlRm91cmllclRyYW5zZm9ybVwiLFxuICBcIkludmVyc2VGdW5jdGlvblwiLFxuICBcIkludmVyc2VGdW5jdGlvbnNcIixcbiAgXCJJbnZlcnNlR2FtbWFEaXN0cmlidXRpb25cIixcbiAgXCJJbnZlcnNlR2FtbWFSZWd1bGFyaXplZFwiLFxuICBcIkludmVyc2VHYXVzc2lhbkRpc3RyaWJ1dGlvblwiLFxuICBcIkludmVyc2VHdWRlcm1hbm5pYW5cIixcbiAgXCJJbnZlcnNlSGFua2VsVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZUhhdmVyc2luZVwiLFxuICBcIkludmVyc2VJbWFnZVB5cmFtaWRcIixcbiAgXCJJbnZlcnNlSmFjb2JpQ0RcIixcbiAgXCJJbnZlcnNlSmFjb2JpQ05cIixcbiAgXCJJbnZlcnNlSmFjb2JpQ1NcIixcbiAgXCJJbnZlcnNlSmFjb2JpRENcIixcbiAgXCJJbnZlcnNlSmFjb2JpRE5cIixcbiAgXCJJbnZlcnNlSmFjb2JpRFNcIixcbiAgXCJJbnZlcnNlSmFjb2JpTkNcIixcbiAgXCJJbnZlcnNlSmFjb2JpTkRcIixcbiAgXCJJbnZlcnNlSmFjb2JpTlNcIixcbiAgXCJJbnZlcnNlSmFjb2JpU0NcIixcbiAgXCJJbnZlcnNlSmFjb2JpU0RcIixcbiAgXCJJbnZlcnNlSmFjb2JpU05cIixcbiAgXCJJbnZlcnNlTGFwbGFjZVRyYW5zZm9ybVwiLFxuICBcIkludmVyc2VNZWxsaW5UcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlUGVybXV0YXRpb25cIixcbiAgXCJJbnZlcnNlUmFkb25cIixcbiAgXCJJbnZlcnNlUmFkb25UcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlU2VyaWVzXCIsXG4gIFwiSW52ZXJzZVNob3J0VGltZUZvdXJpZXJcIixcbiAgXCJJbnZlcnNlU3BlY3Ryb2dyYW1cIixcbiAgXCJJbnZlcnNlU3Vydml2YWxGdW5jdGlvblwiLFxuICBcIkludmVyc2VUcmFuc2Zvcm1lZFJlZ2lvblwiLFxuICBcIkludmVyc2VXYXZlbGV0VHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZVdlaWVyc3RyYXNzUFwiLFxuICBcIkludmVyc2VXaXNoYXJ0TWF0cml4RGlzdHJpYnV0aW9uXCIsXG4gIFwiSW52ZXJzZVpUcmFuc2Zvcm1cIixcbiAgXCJJbnZpc2libGVcIixcbiAgXCJJbnZpc2libGVBcHBsaWNhdGlvblwiLFxuICBcIkludmlzaWJsZVRpbWVzXCIsXG4gIFwiSVBBZGRyZXNzXCIsXG4gIFwiSXJyZWR1Y2libGVQb2x5bm9taWFsUVwiLFxuICBcIklzbGFuZERhdGFcIixcbiAgXCJJc29sYXRpbmdJbnRlcnZhbFwiLFxuICBcIklzb21vcnBoaWNHcmFwaFFcIixcbiAgXCJJc290b3BlRGF0YVwiLFxuICBcIkl0YWxpY1wiLFxuICBcIkl0ZW1cIixcbiAgXCJJdGVtQXNwZWN0UmF0aW9cIixcbiAgXCJJdGVtQm94XCIsXG4gIFwiSXRlbUJveE9wdGlvbnNcIixcbiAgXCJJdGVtRGlzcGxheUZ1bmN0aW9uXCIsXG4gIFwiSXRlbVNpemVcIixcbiAgXCJJdGVtU3R5bGVcIixcbiAgXCJJdG9Qcm9jZXNzXCIsXG4gIFwiSmFjY2FyZERpc3NpbWlsYXJpdHlcIixcbiAgXCJKYWNvYmlBbXBsaXR1ZGVcIixcbiAgXCJKYWNvYmlhblwiLFxuICBcIkphY29iaUNEXCIsXG4gIFwiSmFjb2JpQ05cIixcbiAgXCJKYWNvYmlDU1wiLFxuICBcIkphY29iaURDXCIsXG4gIFwiSmFjb2JpRE5cIixcbiAgXCJKYWNvYmlEU1wiLFxuICBcIkphY29iaU5DXCIsXG4gIFwiSmFjb2JpTkRcIixcbiAgXCJKYWNvYmlOU1wiLFxuICBcIkphY29iaVBcIixcbiAgXCJKYWNvYmlTQ1wiLFxuICBcIkphY29iaVNEXCIsXG4gIFwiSmFjb2JpU05cIixcbiAgXCJKYWNvYmlTeW1ib2xcIixcbiAgXCJKYWNvYmlaZXRhXCIsXG4gIFwiSmFua29Hcm91cEoxXCIsXG4gIFwiSmFua29Hcm91cEoyXCIsXG4gIFwiSmFua29Hcm91cEozXCIsXG4gIFwiSmFua29Hcm91cEo0XCIsXG4gIFwiSmFycXVlQmVyYUFMTVRlc3RcIixcbiAgXCJKb2huc29uRGlzdHJpYnV0aW9uXCIsXG4gIFwiSm9pblwiLFxuICBcIkpvaW5BY3Jvc3NcIixcbiAgXCJKb2luZWRcIixcbiAgXCJKb2luZWRDdXJ2ZVwiLFxuICBcIkpvaW5lZEN1cnZlQm94XCIsXG4gIFwiSm9pbmVkQ3VydmVCb3hPcHRpb25zXCIsXG4gIFwiSm9pbkZvcm1cIixcbiAgXCJKb3JkYW5EZWNvbXBvc2l0aW9uXCIsXG4gIFwiSm9yZGFuTW9kZWxEZWNvbXBvc2l0aW9uXCIsXG4gIFwiSnVsaWFuRGF0ZVwiLFxuICBcIkp1bGlhU2V0Qm9ldHRjaGVyXCIsXG4gIFwiSnVsaWFTZXRJdGVyYXRpb25Db3VudFwiLFxuICBcIkp1bGlhU2V0UGxvdFwiLFxuICBcIkp1bGlhU2V0UG9pbnRzXCIsXG4gIFwiS1wiLFxuICBcIkthZ2lDaGFydFwiLFxuICBcIkthaXNlckJlc3NlbFdpbmRvd1wiLFxuICBcIkthaXNlcldpbmRvd1wiLFxuICBcIkthbG1hbkVzdGltYXRvclwiLFxuICBcIkthbG1hbkZpbHRlclwiLFxuICBcIkthcmh1bmVuTG9ldmVEZWNvbXBvc2l0aW9uXCIsXG4gIFwiS2FyeVRyZWVcIixcbiAgXCJLYXR6Q2VudHJhbGl0eVwiLFxuICBcIktDb3JlQ29tcG9uZW50c1wiLFxuICBcIktEaXN0cmlidXRpb25cIixcbiAgXCJLRWRnZUNvbm5lY3RlZENvbXBvbmVudHNcIixcbiAgXCJLRWRnZUNvbm5lY3RlZEdyYXBoUVwiLFxuICBcIktlZXBFeGlzdGluZ1ZlcnNpb25cIixcbiAgXCJLZWx2aW5CZWlcIixcbiAgXCJLZWx2aW5CZXJcIixcbiAgXCJLZWx2aW5LZWlcIixcbiAgXCJLZWx2aW5LZXJcIixcbiAgXCJLZW5kYWxsVGF1XCIsXG4gIFwiS2VuZGFsbFRhdVRlc3RcIixcbiAgXCJLZXJuZWxFeGVjdXRlXCIsXG4gIFwiS2VybmVsRnVuY3Rpb25cIixcbiAgXCJLZXJuZWxNaXh0dXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiS2VybmVsT2JqZWN0XCIsXG4gIFwiS2VybmVsc1wiLFxuICBcIktldFwiLFxuICBcIktleVwiLFxuICBcIktleUNvbGxpc2lvbkZ1bmN0aW9uXCIsXG4gIFwiS2V5Q29tcGxlbWVudFwiLFxuICBcIktleURyb3BcIixcbiAgXCJLZXlEcm9wRnJvbVwiLFxuICBcIktleUV4aXN0c1FcIixcbiAgXCJLZXlGcmVlUVwiLFxuICBcIktleUludGVyc2VjdGlvblwiLFxuICBcIktleU1hcFwiLFxuICBcIktleU1lbWJlclFcIixcbiAgXCJLZXlwb2ludFN0cmVuZ3RoXCIsXG4gIFwiS2V5c1wiLFxuICBcIktleVNlbGVjdFwiLFxuICBcIktleVNvcnRcIixcbiAgXCJLZXlTb3J0QnlcIixcbiAgXCJLZXlUYWtlXCIsXG4gIFwiS2V5VW5pb25cIixcbiAgXCJLZXlWYWx1ZU1hcFwiLFxuICBcIktleVZhbHVlUGF0dGVyblwiLFxuICBcIktoaW5jaGluXCIsXG4gIFwiS2lsbFByb2Nlc3NcIixcbiAgXCJLaXJjaGhvZmZHcmFwaFwiLFxuICBcIktpcmNoaG9mZk1hdHJpeFwiLFxuICBcIktsZWluSW52YXJpYW50SlwiLFxuICBcIktuYXBzYWNrU29sdmVcIixcbiAgXCJLbmlnaHRUb3VyR3JhcGhcIixcbiAgXCJLbm90RGF0YVwiLFxuICBcIktub3duVW5pdFFcIixcbiAgXCJLb2NoQ3VydmVcIixcbiAgXCJLb2xtb2dvcm92U21pcm5vdlRlc3RcIixcbiAgXCJLcm9uZWNrZXJEZWx0YVwiLFxuICBcIktyb25lY2tlck1vZGVsRGVjb21wb3NpdGlvblwiLFxuICBcIktyb25lY2tlclByb2R1Y3RcIixcbiAgXCJLcm9uZWNrZXJTeW1ib2xcIixcbiAgXCJLdWlwZXJUZXN0XCIsXG4gIFwiS3VtYXJhc3dhbXlEaXN0cmlidXRpb25cIixcbiAgXCJLdXJ0b3Npc1wiLFxuICBcIkt1d2FoYXJhRmlsdGVyXCIsXG4gIFwiS1ZlcnRleENvbm5lY3RlZENvbXBvbmVudHNcIixcbiAgXCJLVmVydGV4Q29ubmVjdGVkR3JhcGhRXCIsXG4gIFwiTEFCQ29sb3JcIixcbiAgXCJMYWJlbFwiLFxuICBcIkxhYmVsZWRcIixcbiAgXCJMYWJlbGVkU2xpZGVyXCIsXG4gIFwiTGFiZWxpbmdGdW5jdGlvblwiLFxuICBcIkxhYmVsaW5nU2l6ZVwiLFxuICBcIkxhYmVsU3R5bGVcIixcbiAgXCJMYWJlbFZpc2liaWxpdHlcIixcbiAgXCJMYWd1ZXJyZUxcIixcbiAgXCJMYWtlRGF0YVwiLFxuICBcIkxhbWJkYUNvbXBvbmVudHNcIixcbiAgXCJMYW1iZXJ0V1wiLFxuICBcIkxhbWluYURhdGFcIixcbiAgXCJMYW5jem9zV2luZG93XCIsXG4gIFwiTGFuZGF1RGlzdHJpYnV0aW9uXCIsXG4gIFwiTGFuZ3VhZ2VcIixcbiAgXCJMYW5ndWFnZUNhdGVnb3J5XCIsXG4gIFwiTGFuZ3VhZ2VEYXRhXCIsXG4gIFwiTGFuZ3VhZ2VJZGVudGlmeVwiLFxuICBcIkxhbmd1YWdlT3B0aW9uc1wiLFxuICBcIkxhcGxhY2VEaXN0cmlidXRpb25cIixcbiAgXCJMYXBsYWNlVHJhbnNmb3JtXCIsXG4gIFwiTGFwbGFjaWFuXCIsXG4gIFwiTGFwbGFjaWFuRmlsdGVyXCIsXG4gIFwiTGFwbGFjaWFuR2F1c3NpYW5GaWx0ZXJcIixcbiAgXCJMYXJnZVwiLFxuICBcIkxhcmdlclwiLFxuICBcIkxhc3RcIixcbiAgXCJMYXRpdHVkZVwiLFxuICBcIkxhdGl0dWRlTG9uZ2l0dWRlXCIsXG4gIFwiTGF0dGljZURhdGFcIixcbiAgXCJMYXR0aWNlUmVkdWNlXCIsXG4gIFwiTGF1bmNoXCIsXG4gIFwiTGF1bmNoS2VybmVsc1wiLFxuICBcIkxheWVyZWRHcmFwaFBsb3RcIixcbiAgXCJMYXllclNpemVGdW5jdGlvblwiLFxuICBcIkxheW91dEluZm9ybWF0aW9uXCIsXG4gIFwiTENIQ29sb3JcIixcbiAgXCJMQ01cIixcbiAgXCJMZWFkZXJTaXplXCIsXG4gIFwiTGVhZkNvdW50XCIsXG4gIFwiTGVhcFllYXJRXCIsXG4gIFwiTGVhcm5EaXN0cmlidXRpb25cIixcbiAgXCJMZWFybmVkRGlzdHJpYnV0aW9uXCIsXG4gIFwiTGVhcm5pbmdSYXRlXCIsXG4gIFwiTGVhcm5pbmdSYXRlTXVsdGlwbGllcnNcIixcbiAgXCJMZWFzdFNxdWFyZXNcIixcbiAgXCJMZWFzdFNxdWFyZXNGaWx0ZXJLZXJuZWxcIixcbiAgXCJMZWZ0XCIsXG4gIFwiTGVmdEFycm93XCIsXG4gIFwiTGVmdEFycm93QmFyXCIsXG4gIFwiTGVmdEFycm93UmlnaHRBcnJvd1wiLFxuICBcIkxlZnREb3duVGVlVmVjdG9yXCIsXG4gIFwiTGVmdERvd25WZWN0b3JcIixcbiAgXCJMZWZ0RG93blZlY3RvckJhclwiLFxuICBcIkxlZnRSaWdodEFycm93XCIsXG4gIFwiTGVmdFJpZ2h0VmVjdG9yXCIsXG4gIFwiTGVmdFRlZVwiLFxuICBcIkxlZnRUZWVBcnJvd1wiLFxuICBcIkxlZnRUZWVWZWN0b3JcIixcbiAgXCJMZWZ0VHJpYW5nbGVcIixcbiAgXCJMZWZ0VHJpYW5nbGVCYXJcIixcbiAgXCJMZWZ0VHJpYW5nbGVFcXVhbFwiLFxuICBcIkxlZnRVcERvd25WZWN0b3JcIixcbiAgXCJMZWZ0VXBUZWVWZWN0b3JcIixcbiAgXCJMZWZ0VXBWZWN0b3JcIixcbiAgXCJMZWZ0VXBWZWN0b3JCYXJcIixcbiAgXCJMZWZ0VmVjdG9yXCIsXG4gIFwiTGVmdFZlY3RvckJhclwiLFxuICBcIkxlZ2VuZEFwcGVhcmFuY2VcIixcbiAgXCJMZWdlbmRlZFwiLFxuICBcIkxlZ2VuZEZ1bmN0aW9uXCIsXG4gIFwiTGVnZW5kTGFiZWxcIixcbiAgXCJMZWdlbmRMYXlvdXRcIixcbiAgXCJMZWdlbmRNYXJnaW5zXCIsXG4gIFwiTGVnZW5kTWFya2Vyc1wiLFxuICBcIkxlZ2VuZE1hcmtlclNpemVcIixcbiAgXCJMZWdlbmRyZVBcIixcbiAgXCJMZWdlbmRyZVFcIixcbiAgXCJMZWdlbmRyZVR5cGVcIixcbiAgXCJMZW5ndGhcIixcbiAgXCJMZW5ndGhXaGlsZVwiLFxuICBcIkxlcmNoUGhpXCIsXG4gIFwiTGVzc1wiLFxuICBcIkxlc3NFcXVhbFwiLFxuICBcIkxlc3NFcXVhbEdyZWF0ZXJcIixcbiAgXCJMZXNzRXF1YWxUaGFuXCIsXG4gIFwiTGVzc0Z1bGxFcXVhbFwiLFxuICBcIkxlc3NHcmVhdGVyXCIsXG4gIFwiTGVzc0xlc3NcIixcbiAgXCJMZXNzU2xhbnRFcXVhbFwiLFxuICBcIkxlc3NUaGFuXCIsXG4gIFwiTGVzc1RpbGRlXCIsXG4gIFwiTGV0dGVyQ2hhcmFjdGVyXCIsXG4gIFwiTGV0dGVyQ291bnRzXCIsXG4gIFwiTGV0dGVyTnVtYmVyXCIsXG4gIFwiTGV0dGVyUVwiLFxuICBcIkxldmVsXCIsXG4gIFwiTGV2ZW5lVGVzdFwiLFxuICBcIkxldmlDaXZpdGFUZW5zb3JcIixcbiAgXCJMZXZ5RGlzdHJpYnV0aW9uXCIsXG4gIFwiTGV4aWNvZ3JhcGhpY1wiLFxuICBcIkxpYnJhcnlEYXRhVHlwZVwiLFxuICBcIkxpYnJhcnlGdW5jdGlvblwiLFxuICBcIkxpYnJhcnlGdW5jdGlvbkVycm9yXCIsXG4gIFwiTGlicmFyeUZ1bmN0aW9uSW5mb3JtYXRpb25cIixcbiAgXCJMaWJyYXJ5RnVuY3Rpb25Mb2FkXCIsXG4gIFwiTGlicmFyeUZ1bmN0aW9uVW5sb2FkXCIsXG4gIFwiTGlicmFyeUxvYWRcIixcbiAgXCJMaWJyYXJ5VW5sb2FkXCIsXG4gIFwiTGljZW5zZUlEXCIsXG4gIFwiTGlmdGluZ0ZpbHRlckRhdGFcIixcbiAgXCJMaWZ0aW5nV2F2ZWxldFRyYW5zZm9ybVwiLFxuICBcIkxpZ2h0Qmx1ZVwiLFxuICBcIkxpZ2h0QnJvd25cIixcbiAgXCJMaWdodEN5YW5cIixcbiAgXCJMaWdodGVyXCIsXG4gIFwiTGlnaHRHcmF5XCIsXG4gIFwiTGlnaHRHcmVlblwiLFxuICBcIkxpZ2h0aW5nXCIsXG4gIFwiTGlnaHRpbmdBbmdsZVwiLFxuICBcIkxpZ2h0TWFnZW50YVwiLFxuICBcIkxpZ2h0T3JhbmdlXCIsXG4gIFwiTGlnaHRQaW5rXCIsXG4gIFwiTGlnaHRQdXJwbGVcIixcbiAgXCJMaWdodFJlZFwiLFxuICBcIkxpZ2h0U291cmNlc1wiLFxuICBcIkxpZ2h0WWVsbG93XCIsXG4gIFwiTGlrZWxpaG9vZFwiLFxuICBcIkxpbWl0XCIsXG4gIFwiTGltaXRzUG9zaXRpb25pbmdcIixcbiAgXCJMaW1pdHNQb3NpdGlvbmluZ1Rva2Vuc1wiLFxuICBcIkxpbmRsZXlEaXN0cmlidXRpb25cIixcbiAgXCJMaW5lXCIsXG4gIFwiTGluZTNEQm94XCIsXG4gIFwiTGluZTNEQm94T3B0aW9uc1wiLFxuICBcIkxpbmVhckZpbHRlclwiLFxuICBcIkxpbmVhckZyYWN0aW9uYWxPcHRpbWl6YXRpb25cIixcbiAgXCJMaW5lYXJGcmFjdGlvbmFsVHJhbnNmb3JtXCIsXG4gIFwiTGluZWFyR3JhZGllbnRJbWFnZVwiLFxuICBcIkxpbmVhcml6aW5nVHJhbnNmb3JtYXRpb25EYXRhXCIsXG4gIFwiTGluZWFyTGF5ZXJcIixcbiAgXCJMaW5lYXJNb2RlbEZpdFwiLFxuICBcIkxpbmVhck9mZnNldEZ1bmN0aW9uXCIsXG4gIFwiTGluZWFyT3B0aW1pemF0aW9uXCIsXG4gIFwiTGluZWFyUHJvZ3JhbW1pbmdcIixcbiAgXCJMaW5lYXJSZWN1cnJlbmNlXCIsXG4gIFwiTGluZWFyU29sdmVcIixcbiAgXCJMaW5lYXJTb2x2ZUZ1bmN0aW9uXCIsXG4gIFwiTGluZUJveFwiLFxuICBcIkxpbmVCb3hPcHRpb25zXCIsXG4gIFwiTGluZUJyZWFrXCIsXG4gIFwiTGluZWJyZWFrQWRqdXN0bWVudHNcIixcbiAgXCJMaW5lQnJlYWtDaGFydFwiLFxuICBcIkxpbmVicmVha1NlbWljb2xvbldlaWdodGluZ1wiLFxuICBcIkxpbmVCcmVha1dpdGhpblwiLFxuICBcIkxpbmVDb2xvclwiLFxuICBcIkxpbmVHcmFwaFwiLFxuICBcIkxpbmVJbmRlbnRcIixcbiAgXCJMaW5lSW5kZW50TWF4RnJhY3Rpb25cIixcbiAgXCJMaW5lSW50ZWdyYWxDb252b2x1dGlvblBsb3RcIixcbiAgXCJMaW5lSW50ZWdyYWxDb252b2x1dGlvblNjYWxlXCIsXG4gIFwiTGluZUxlZ2VuZFwiLFxuICBcIkxpbmVPcGFjaXR5XCIsXG4gIFwiTGluZVNwYWNpbmdcIixcbiAgXCJMaW5lV3JhcFBhcnRzXCIsXG4gIFwiTGlua0FjdGl2YXRlXCIsXG4gIFwiTGlua0Nsb3NlXCIsXG4gIFwiTGlua0Nvbm5lY3RcIixcbiAgXCJMaW5rQ29ubmVjdGVkUVwiLFxuICBcIkxpbmtDcmVhdGVcIixcbiAgXCJMaW5rRXJyb3JcIixcbiAgXCJMaW5rRmx1c2hcIixcbiAgXCJMaW5rRnVuY3Rpb25cIixcbiAgXCJMaW5rSG9zdFwiLFxuICBcIkxpbmtJbnRlcnJ1cHRcIixcbiAgXCJMaW5rTGF1bmNoXCIsXG4gIFwiTGlua01vZGVcIixcbiAgXCJMaW5rT2JqZWN0XCIsXG4gIFwiTGlua09wZW5cIixcbiAgXCJMaW5rT3B0aW9uc1wiLFxuICBcIkxpbmtQYXR0ZXJuc1wiLFxuICBcIkxpbmtQcm90b2NvbFwiLFxuICBcIkxpbmtSYW5rQ2VudHJhbGl0eVwiLFxuICBcIkxpbmtSZWFkXCIsXG4gIFwiTGlua1JlYWRIZWxkXCIsXG4gIFwiTGlua1JlYWR5UVwiLFxuICBcIkxpbmtzXCIsXG4gIFwiTGlua1NlcnZpY2VcIixcbiAgXCJMaW5rV3JpdGVcIixcbiAgXCJMaW5rV3JpdGVIZWxkXCIsXG4gIFwiTGlvdXZpbGxlTGFtYmRhXCIsXG4gIFwiTGlzdFwiLFxuICBcIkxpc3RhYmxlXCIsXG4gIFwiTGlzdEFuaW1hdGVcIixcbiAgXCJMaXN0Q29udG91clBsb3RcIixcbiAgXCJMaXN0Q29udG91clBsb3QzRFwiLFxuICBcIkxpc3RDb252b2x2ZVwiLFxuICBcIkxpc3RDb3JyZWxhdGVcIixcbiAgXCJMaXN0Q3VydmVQYXRoUGxvdFwiLFxuICBcIkxpc3REZWNvbnZvbHZlXCIsXG4gIFwiTGlzdERlbnNpdHlQbG90XCIsXG4gIFwiTGlzdERlbnNpdHlQbG90M0RcIixcbiAgXCJMaXN0ZW5cIixcbiAgXCJMaXN0Rm9ybWF0XCIsXG4gIFwiTGlzdEZvdXJpZXJTZXF1ZW5jZVRyYW5zZm9ybVwiLFxuICBcIkxpc3RJbnRlcnBvbGF0aW9uXCIsXG4gIFwiTGlzdExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uUGxvdFwiLFxuICBcIkxpc3RMaW5lUGxvdFwiLFxuICBcIkxpc3RMb2dMaW5lYXJQbG90XCIsXG4gIFwiTGlzdExvZ0xvZ1Bsb3RcIixcbiAgXCJMaXN0TG9nUGxvdFwiLFxuICBcIkxpc3RQaWNrZXJcIixcbiAgXCJMaXN0UGlja2VyQm94XCIsXG4gIFwiTGlzdFBpY2tlckJveEJhY2tncm91bmRcIixcbiAgXCJMaXN0UGlja2VyQm94T3B0aW9uc1wiLFxuICBcIkxpc3RQbGF5XCIsXG4gIFwiTGlzdFBsb3RcIixcbiAgXCJMaXN0UGxvdDNEXCIsXG4gIFwiTGlzdFBvaW50UGxvdDNEXCIsXG4gIFwiTGlzdFBvbGFyUGxvdFwiLFxuICBcIkxpc3RRXCIsXG4gIFwiTGlzdFNsaWNlQ29udG91clBsb3QzRFwiLFxuICBcIkxpc3RTbGljZURlbnNpdHlQbG90M0RcIixcbiAgXCJMaXN0U2xpY2VWZWN0b3JQbG90M0RcIixcbiAgXCJMaXN0U3RlcFBsb3RcIixcbiAgXCJMaXN0U3RyZWFtRGVuc2l0eVBsb3RcIixcbiAgXCJMaXN0U3RyZWFtUGxvdFwiLFxuICBcIkxpc3RTdXJmYWNlUGxvdDNEXCIsXG4gIFwiTGlzdFZlY3RvckRlbnNpdHlQbG90XCIsXG4gIFwiTGlzdFZlY3RvclBsb3RcIixcbiAgXCJMaXN0VmVjdG9yUGxvdDNEXCIsXG4gIFwiTGlzdFpUcmFuc2Zvcm1cIixcbiAgXCJMaXRlcmFsXCIsXG4gIFwiTGl0ZXJhbFNlYXJjaFwiLFxuICBcIkxvY2FsQWRhcHRpdmVCaW5hcml6ZVwiLFxuICBcIkxvY2FsQ2FjaGVcIixcbiAgXCJMb2NhbENsdXN0ZXJpbmdDb2VmZmljaWVudFwiLFxuICBcIkxvY2FsaXplRGVmaW5pdGlvbnNcIixcbiAgXCJMb2NhbGl6ZVZhcmlhYmxlc1wiLFxuICBcIkxvY2FsT2JqZWN0XCIsXG4gIFwiTG9jYWxPYmplY3RzXCIsXG4gIFwiTG9jYWxSZXNwb25zZU5vcm1hbGl6YXRpb25MYXllclwiLFxuICBcIkxvY2FsU3VibWl0XCIsXG4gIFwiTG9jYWxTeW1ib2xcIixcbiAgXCJMb2NhbFRpbWVcIixcbiAgXCJMb2NhbFRpbWVab25lXCIsXG4gIFwiTG9jYXRpb25FcXVpdmFsZW5jZVRlc3RcIixcbiAgXCJMb2NhdGlvblRlc3RcIixcbiAgXCJMb2NhdG9yXCIsXG4gIFwiTG9jYXRvckF1dG9DcmVhdGVcIixcbiAgXCJMb2NhdG9yQm94XCIsXG4gIFwiTG9jYXRvckJveE9wdGlvbnNcIixcbiAgXCJMb2NhdG9yQ2VudGVyaW5nXCIsXG4gIFwiTG9jYXRvclBhbmVcIixcbiAgXCJMb2NhdG9yUGFuZUJveFwiLFxuICBcIkxvY2F0b3JQYW5lQm94T3B0aW9uc1wiLFxuICBcIkxvY2F0b3JSZWdpb25cIixcbiAgXCJMb2NrZWRcIixcbiAgXCJMb2dcIixcbiAgXCJMb2cxMFwiLFxuICBcIkxvZzJcIixcbiAgXCJMb2dCYXJuZXNHXCIsXG4gIFwiTG9nR2FtbWFcIixcbiAgXCJMb2dHYW1tYURpc3RyaWJ1dGlvblwiLFxuICBcIkxvZ2ljYWxFeHBhbmRcIixcbiAgXCJMb2dJbnRlZ3JhbFwiLFxuICBcIkxvZ2lzdGljRGlzdHJpYnV0aW9uXCIsXG4gIFwiTG9naXN0aWNTaWdtb2lkXCIsXG4gIFwiTG9naXRNb2RlbEZpdFwiLFxuICBcIkxvZ0xpa2VsaWhvb2RcIixcbiAgXCJMb2dMaW5lYXJQbG90XCIsXG4gIFwiTG9nTG9naXN0aWNEaXN0cmlidXRpb25cIixcbiAgXCJMb2dMb2dQbG90XCIsXG4gIFwiTG9nTXVsdGlub3JtYWxEaXN0cmlidXRpb25cIixcbiAgXCJMb2dOb3JtYWxEaXN0cmlidXRpb25cIixcbiAgXCJMb2dQbG90XCIsXG4gIFwiTG9nUmFua1Rlc3RcIixcbiAgXCJMb2dTZXJpZXNEaXN0cmlidXRpb25cIixcbiAgXCJMb25nRXF1YWxcIixcbiAgXCJMb25nZXN0XCIsXG4gIFwiTG9uZ2VzdENvbW1vblNlcXVlbmNlXCIsXG4gIFwiTG9uZ2VzdENvbW1vblNlcXVlbmNlUG9zaXRpb25zXCIsXG4gIFwiTG9uZ2VzdENvbW1vblN1YnNlcXVlbmNlXCIsXG4gIFwiTG9uZ2VzdENvbW1vblN1YnNlcXVlbmNlUG9zaXRpb25zXCIsXG4gIFwiTG9uZ2VzdE1hdGNoXCIsXG4gIFwiTG9uZ2VzdE9yZGVyZWRTZXF1ZW5jZVwiLFxuICBcIkxvbmdGb3JtXCIsXG4gIFwiTG9uZ2l0dWRlXCIsXG4gIFwiTG9uZ0xlZnRBcnJvd1wiLFxuICBcIkxvbmdMZWZ0UmlnaHRBcnJvd1wiLFxuICBcIkxvbmdSaWdodEFycm93XCIsXG4gIFwiTG9uZ1Nob3J0VGVybU1lbW9yeUxheWVyXCIsXG4gIFwiTG9va3VwXCIsXG4gIFwiTG9vcGJhY2tcIixcbiAgXCJMb29wRnJlZUdyYXBoUVwiLFxuICBcIkxvb3BpbmdcIixcbiAgXCJMb3NzRnVuY3Rpb25cIixcbiAgXCJMb3dlckNhc2VRXCIsXG4gIFwiTG93ZXJMZWZ0QXJyb3dcIixcbiAgXCJMb3dlclJpZ2h0QXJyb3dcIixcbiAgXCJMb3dlclRyaWFuZ3VsYXJpemVcIixcbiAgXCJMb3dlclRyaWFuZ3VsYXJNYXRyaXhRXCIsXG4gIFwiTG93cGFzc0ZpbHRlclwiLFxuICBcIkxRRXN0aW1hdG9yR2FpbnNcIixcbiAgXCJMUUdSZWd1bGF0b3JcIixcbiAgXCJMUU91dHB1dFJlZ3VsYXRvckdhaW5zXCIsXG4gIFwiTFFSZWd1bGF0b3JHYWluc1wiLFxuICBcIkxVQmFja1N1YnN0aXR1dGlvblwiLFxuICBcIkx1Y2FzTFwiLFxuICBcIkx1Y2Npb1NhbWlDb21wb25lbnRzXCIsXG4gIFwiTFVEZWNvbXBvc2l0aW9uXCIsXG4gIFwiTHVuYXJFY2xpcHNlXCIsXG4gIFwiTFVWQ29sb3JcIixcbiAgXCJMeWFwdW5vdlNvbHZlXCIsXG4gIFwiTHlvbnNHcm91cEx5XCIsXG4gIFwiTWFjaGluZUlEXCIsXG4gIFwiTWFjaGluZU5hbWVcIixcbiAgXCJNYWNoaW5lTnVtYmVyUVwiLFxuICBcIk1hY2hpbmVQcmVjaXNpb25cIixcbiAgXCJNYWNpbnRvc2hTeXN0ZW1QYWdlU2V0dXBcIixcbiAgXCJNYWdlbnRhXCIsXG4gIFwiTWFnbmlmaWNhdGlvblwiLFxuICBcIk1hZ25pZnlcIixcbiAgXCJNYWlsQWRkcmVzc1ZhbGlkYXRpb25cIixcbiAgXCJNYWlsRXhlY3V0ZVwiLFxuICBcIk1haWxGb2xkZXJcIixcbiAgXCJNYWlsSXRlbVwiLFxuICBcIk1haWxSZWNlaXZlckZ1bmN0aW9uXCIsXG4gIFwiTWFpbFJlc3BvbnNlRnVuY3Rpb25cIixcbiAgXCJNYWlsU2VhcmNoXCIsXG4gIFwiTWFpbFNlcnZlckNvbm5lY3RcIixcbiAgXCJNYWlsU2VydmVyQ29ubmVjdGlvblwiLFxuICBcIk1haWxTZXR0aW5nc1wiLFxuICBcIk1haW5Tb2x2ZVwiLFxuICBcIk1haW50YWluRHluYW1pY0NhY2hlc1wiLFxuICBcIk1ham9yaXR5XCIsXG4gIFwiTWFrZUJveGVzXCIsXG4gIFwiTWFrZUV4cHJlc3Npb25cIixcbiAgXCJNYWtlUnVsZXNcIixcbiAgXCJNYW5hZ2VkTGlicmFyeUV4cHJlc3Npb25JRFwiLFxuICBcIk1hbmFnZWRMaWJyYXJ5RXhwcmVzc2lvblFcIixcbiAgXCJNYW5kZWxicm90U2V0Qm9ldHRjaGVyXCIsXG4gIFwiTWFuZGVsYnJvdFNldERpc3RhbmNlXCIsXG4gIFwiTWFuZGVsYnJvdFNldEl0ZXJhdGlvbkNvdW50XCIsXG4gIFwiTWFuZGVsYnJvdFNldE1lbWJlclFcIixcbiAgXCJNYW5kZWxicm90U2V0UGxvdFwiLFxuICBcIk1hbmdvbGR0TGFtYmRhXCIsXG4gIFwiTWFuaGF0dGFuRGlzdGFuY2VcIixcbiAgXCJNYW5pcHVsYXRlXCIsXG4gIFwiTWFuaXB1bGF0b3JcIixcbiAgXCJNYW5uZWRTcGFjZU1pc3Npb25EYXRhXCIsXG4gIFwiTWFubldoaXRuZXlUZXN0XCIsXG4gIFwiTWFudGlzc2FFeHBvbmVudFwiLFxuICBcIk1hbnVhbFwiLFxuICBcIk1hcFwiLFxuICBcIk1hcEFsbFwiLFxuICBcIk1hcEF0XCIsXG4gIFwiTWFwSW5kZXhlZFwiLFxuICBcIk1BUHJvY2Vzc1wiLFxuICBcIk1hcFRocmVhZFwiLFxuICBcIk1hcmNoZW5rb1Bhc3R1ckRpc3RyaWJ1dGlvblwiLFxuICBcIk1hcmN1bVFcIixcbiAgXCJNYXJkaWFDb21iaW5lZFRlc3RcIixcbiAgXCJNYXJkaWFLdXJ0b3Npc1Rlc3RcIixcbiAgXCJNYXJkaWFTa2V3bmVzc1Rlc3RcIixcbiAgXCJNYXJnaW5hbERpc3RyaWJ1dGlvblwiLFxuICBcIk1hcmtvdlByb2Nlc3NQcm9wZXJ0aWVzXCIsXG4gIFwiTWFza2luZ1wiLFxuICBcIk1hdGNoaW5nRGlzc2ltaWxhcml0eVwiLFxuICBcIk1hdGNoTG9jYWxOYW1lUVwiLFxuICBcIk1hdGNoTG9jYWxOYW1lc1wiLFxuICBcIk1hdGNoUVwiLFxuICBcIk1hdGVyaWFsXCIsXG4gIFwiTWF0aGVtYXRpY2FsRnVuY3Rpb25EYXRhXCIsXG4gIFwiTWF0aGVtYXRpY2FOb3RhdGlvblwiLFxuICBcIk1hdGhpZXVDXCIsXG4gIFwiTWF0aGlldUNoYXJhY3RlcmlzdGljQVwiLFxuICBcIk1hdGhpZXVDaGFyYWN0ZXJpc3RpY0JcIixcbiAgXCJNYXRoaWV1Q2hhcmFjdGVyaXN0aWNFeHBvbmVudFwiLFxuICBcIk1hdGhpZXVDUHJpbWVcIixcbiAgXCJNYXRoaWV1R3JvdXBNMTFcIixcbiAgXCJNYXRoaWV1R3JvdXBNMTJcIixcbiAgXCJNYXRoaWV1R3JvdXBNMjJcIixcbiAgXCJNYXRoaWV1R3JvdXBNMjNcIixcbiAgXCJNYXRoaWV1R3JvdXBNMjRcIixcbiAgXCJNYXRoaWV1U1wiLFxuICBcIk1hdGhpZXVTUHJpbWVcIixcbiAgXCJNYXRoTUxGb3JtXCIsXG4gIFwiTWF0aE1MVGV4dFwiLFxuICBcIk1hdHJpY2VzXCIsXG4gIFwiTWF0cml4RXhwXCIsXG4gIFwiTWF0cml4Rm9ybVwiLFxuICBcIk1hdHJpeEZ1bmN0aW9uXCIsXG4gIFwiTWF0cml4TG9nXCIsXG4gIFwiTWF0cml4Tm9ybWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiTWF0cml4UGxvdFwiLFxuICBcIk1hdHJpeFBvd2VyXCIsXG4gIFwiTWF0cml4UHJvcGVydHlEaXN0cmlidXRpb25cIixcbiAgXCJNYXRyaXhRXCIsXG4gIFwiTWF0cml4UmFua1wiLFxuICBcIk1hdHJpeFREaXN0cmlidXRpb25cIixcbiAgXCJNYXhcIixcbiAgXCJNYXhCZW5kXCIsXG4gIFwiTWF4Q2VsbE1lYXN1cmVcIixcbiAgXCJNYXhDb2xvckRpc3RhbmNlXCIsXG4gIFwiTWF4RGF0ZVwiLFxuICBcIk1heERldGVjdFwiLFxuICBcIk1heER1cmF0aW9uXCIsXG4gIFwiTWF4RXh0cmFCYW5kd2lkdGhzXCIsXG4gIFwiTWF4RXh0cmFDb25kaXRpb25zXCIsXG4gIFwiTWF4RmVhdHVyZURpc3BsYWNlbWVudFwiLFxuICBcIk1heEZlYXR1cmVzXCIsXG4gIFwiTWF4RmlsdGVyXCIsXG4gIFwiTWF4aW1hbEJ5XCIsXG4gIFwiTWF4aW1pemVcIixcbiAgXCJNYXhJdGVtc1wiLFxuICBcIk1heEl0ZXJhdGlvbnNcIixcbiAgXCJNYXhMaW1pdFwiLFxuICBcIk1heE1lbW9yeVVzZWRcIixcbiAgXCJNYXhNaXh0dXJlS2VybmVsc1wiLFxuICBcIk1heE92ZXJsYXBGcmFjdGlvblwiLFxuICBcIk1heFBsb3RQb2ludHNcIixcbiAgXCJNYXhQb2ludHNcIixcbiAgXCJNYXhSZWN1cnNpb25cIixcbiAgXCJNYXhTdGFibGVEaXN0cmlidXRpb25cIixcbiAgXCJNYXhTdGVwRnJhY3Rpb25cIixcbiAgXCJNYXhTdGVwc1wiLFxuICBcIk1heFN0ZXBTaXplXCIsXG4gIFwiTWF4VHJhaW5pbmdSb3VuZHNcIixcbiAgXCJNYXhWYWx1ZVwiLFxuICBcIk1heHdlbGxEaXN0cmlidXRpb25cIixcbiAgXCJNYXhXb3JkR2FwXCIsXG4gIFwiTWNMYXVnaGxpbkdyb3VwTWNMXCIsXG4gIFwiTWVhblwiLFxuICBcIk1lYW5BYnNvbHV0ZUxvc3NMYXllclwiLFxuICBcIk1lYW5Bcm91bmRcIixcbiAgXCJNZWFuQ2x1c3RlcmluZ0NvZWZmaWNpZW50XCIsXG4gIFwiTWVhbkRlZ3JlZUNvbm5lY3Rpdml0eVwiLFxuICBcIk1lYW5EZXZpYXRpb25cIixcbiAgXCJNZWFuRmlsdGVyXCIsXG4gIFwiTWVhbkdyYXBoRGlzdGFuY2VcIixcbiAgXCJNZWFuTmVpZ2hib3JEZWdyZWVcIixcbiAgXCJNZWFuU2hpZnRcIixcbiAgXCJNZWFuU2hpZnRGaWx0ZXJcIixcbiAgXCJNZWFuU3F1YXJlZExvc3NMYXllclwiLFxuICBcIk1lZGlhblwiLFxuICBcIk1lZGlhbkRldmlhdGlvblwiLFxuICBcIk1lZGlhbkZpbHRlclwiLFxuICBcIk1lZGljYWxUZXN0RGF0YVwiLFxuICBcIk1lZGl1bVwiLFxuICBcIk1laWplckdcIixcbiAgXCJNZWlqZXJHUmVkdWNlXCIsXG4gIFwiTWVpeG5lckRpc3RyaWJ1dGlvblwiLFxuICBcIk1lbGxpbkNvbnZvbHZlXCIsXG4gIFwiTWVsbGluVHJhbnNmb3JtXCIsXG4gIFwiTWVtYmVyUVwiLFxuICBcIk1lbW9yeUF2YWlsYWJsZVwiLFxuICBcIk1lbW9yeUNvbnN0cmFpbmVkXCIsXG4gIFwiTWVtb3J5Q29uc3RyYWludFwiLFxuICBcIk1lbW9yeUluVXNlXCIsXG4gIFwiTWVuZ2VyTWVzaFwiLFxuICBcIk1lbnVcIixcbiAgXCJNZW51QXBwZWFyYW5jZVwiLFxuICBcIk1lbnVDb21tYW5kS2V5XCIsXG4gIFwiTWVudUV2YWx1YXRvclwiLFxuICBcIk1lbnVJdGVtXCIsXG4gIFwiTWVudUxpc3RcIixcbiAgXCJNZW51UGFja2V0XCIsXG4gIFwiTWVudVNvcnRpbmdWYWx1ZVwiLFxuICBcIk1lbnVTdHlsZVwiLFxuICBcIk1lbnVWaWV3XCIsXG4gIFwiTWVyZ2VcIixcbiAgXCJNZXJnZURpZmZlcmVuY2VzXCIsXG4gIFwiTWVyZ2luZ0Z1bmN0aW9uXCIsXG4gIFwiTWVyc2VubmVQcmltZUV4cG9uZW50XCIsXG4gIFwiTWVyc2VubmVQcmltZUV4cG9uZW50UVwiLFxuICBcIk1lc2hcIixcbiAgXCJNZXNoQ2VsbENlbnRyb2lkXCIsXG4gIFwiTWVzaENlbGxDb3VudFwiLFxuICBcIk1lc2hDZWxsSGlnaGxpZ2h0XCIsXG4gIFwiTWVzaENlbGxJbmRleFwiLFxuICBcIk1lc2hDZWxsTGFiZWxcIixcbiAgXCJNZXNoQ2VsbE1hcmtlclwiLFxuICBcIk1lc2hDZWxsTWVhc3VyZVwiLFxuICBcIk1lc2hDZWxsUXVhbGl0eVwiLFxuICBcIk1lc2hDZWxsc1wiLFxuICBcIk1lc2hDZWxsU2hhcGVGdW5jdGlvblwiLFxuICBcIk1lc2hDZWxsU3R5bGVcIixcbiAgXCJNZXNoQ29ubmVjdGl2aXR5R3JhcGhcIixcbiAgXCJNZXNoQ29vcmRpbmF0ZXNcIixcbiAgXCJNZXNoRnVuY3Rpb25zXCIsXG4gIFwiTWVzaFByaW1pdGl2ZXNcIixcbiAgXCJNZXNoUXVhbGl0eUdvYWxcIixcbiAgXCJNZXNoUmFuZ2VcIixcbiAgXCJNZXNoUmVmaW5lbWVudEZ1bmN0aW9uXCIsXG4gIFwiTWVzaFJlZ2lvblwiLFxuICBcIk1lc2hSZWdpb25RXCIsXG4gIFwiTWVzaFNoYWRpbmdcIixcbiAgXCJNZXNoU3R5bGVcIixcbiAgXCJNZXNzYWdlXCIsXG4gIFwiTWVzc2FnZURpYWxvZ1wiLFxuICBcIk1lc3NhZ2VMaXN0XCIsXG4gIFwiTWVzc2FnZU5hbWVcIixcbiAgXCJNZXNzYWdlT2JqZWN0XCIsXG4gIFwiTWVzc2FnZU9wdGlvbnNcIixcbiAgXCJNZXNzYWdlUGFja2V0XCIsXG4gIFwiTWVzc2FnZXNcIixcbiAgXCJNZXNzYWdlc05vdGVib29rXCIsXG4gIFwiTWV0YUNoYXJhY3RlcnNcIixcbiAgXCJNZXRhSW5mb3JtYXRpb25cIixcbiAgXCJNZXRlb3JTaG93ZXJEYXRhXCIsXG4gIFwiTWV0aG9kXCIsXG4gIFwiTWV0aG9kT3B0aW9uc1wiLFxuICBcIk1leGljYW5IYXRXYXZlbGV0XCIsXG4gIFwiTWV5ZXJXYXZlbGV0XCIsXG4gIFwiTWlkcG9pbnRcIixcbiAgXCJNaW5cIixcbiAgXCJNaW5Db2xvckRpc3RhbmNlXCIsXG4gIFwiTWluRGF0ZVwiLFxuICBcIk1pbkRldGVjdFwiLFxuICBcIk1pbmVyYWxEYXRhXCIsXG4gIFwiTWluRmlsdGVyXCIsXG4gIFwiTWluaW1hbEJ5XCIsXG4gIFwiTWluaW1hbFBvbHlub21pYWxcIixcbiAgXCJNaW5pbWFsU3RhdGVTcGFjZU1vZGVsXCIsXG4gIFwiTWluaW1pemVcIixcbiAgXCJNaW5pbXVtVGltZUluY3JlbWVudFwiLFxuICBcIk1pbkludGVydmFsU2l6ZVwiLFxuICBcIk1pbmtvd3NraVF1ZXN0aW9uTWFya1wiLFxuICBcIk1pbkxpbWl0XCIsXG4gIFwiTWluTWF4XCIsXG4gIFwiTWlub3JQbGFuZXREYXRhXCIsXG4gIFwiTWlub3JzXCIsXG4gIFwiTWluUmVjdXJzaW9uXCIsXG4gIFwiTWluU2l6ZVwiLFxuICBcIk1pblN0YWJsZURpc3RyaWJ1dGlvblwiLFxuICBcIk1pbnVzXCIsXG4gIFwiTWludXNQbHVzXCIsXG4gIFwiTWluVmFsdWVcIixcbiAgXCJNaXNzaW5nXCIsXG4gIFwiTWlzc2luZ0JlaGF2aW9yXCIsXG4gIFwiTWlzc2luZ0RhdGFNZXRob2RcIixcbiAgXCJNaXNzaW5nRGF0YVJ1bGVzXCIsXG4gIFwiTWlzc2luZ1FcIixcbiAgXCJNaXNzaW5nU3RyaW5nXCIsXG4gIFwiTWlzc2luZ1N0eWxlXCIsXG4gIFwiTWlzc2luZ1ZhbHVlUGF0dGVyblwiLFxuICBcIk1pdHRhZ0xlZmZsZXJFXCIsXG4gIFwiTWl4ZWRGcmFjdGlvblBhcnRzXCIsXG4gIFwiTWl4ZWRHcmFwaFFcIixcbiAgXCJNaXhlZE1hZ25pdHVkZVwiLFxuICBcIk1peGVkUmFkaXhcIixcbiAgXCJNaXhlZFJhZGl4UXVhbnRpdHlcIixcbiAgXCJNaXhlZFVuaXRcIixcbiAgXCJNaXh0dXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiTW9kXCIsXG4gIFwiTW9kYWxcIixcbiAgXCJNb2RlXCIsXG4gIFwiTW9kdWxhclwiLFxuICBcIk1vZHVsYXJJbnZlcnNlXCIsXG4gIFwiTW9kdWxhckxhbWJkYVwiLFxuICBcIk1vZHVsZVwiLFxuICBcIk1vZHVsdXNcIixcbiAgXCJNb2ViaXVzTXVcIixcbiAgXCJNb2xlY3VsZVwiLFxuICBcIk1vbGVjdWxlQ29udGFpbnNRXCIsXG4gIFwiTW9sZWN1bGVFcXVpdmFsZW50UVwiLFxuICBcIk1vbGVjdWxlR3JhcGhcIixcbiAgXCJNb2xlY3VsZU1vZGlmeVwiLFxuICBcIk1vbGVjdWxlUGF0dGVyblwiLFxuICBcIk1vbGVjdWxlUGxvdFwiLFxuICBcIk1vbGVjdWxlUGxvdDNEXCIsXG4gIFwiTW9sZWN1bGVQcm9wZXJ0eVwiLFxuICBcIk1vbGVjdWxlUVwiLFxuICBcIk1vbGVjdWxlUmVjb2duaXplXCIsXG4gIFwiTW9sZWN1bGVWYWx1ZVwiLFxuICBcIk1vbWVudFwiLFxuICBcIk1vbWVudGFyeVwiLFxuICBcIk1vbWVudENvbnZlcnRcIixcbiAgXCJNb21lbnRFdmFsdWF0ZVwiLFxuICBcIk1vbWVudEdlbmVyYXRpbmdGdW5jdGlvblwiLFxuICBcIk1vbWVudE9mSW5lcnRpYVwiLFxuICBcIk1vbmRheVwiLFxuICBcIk1vbml0b3JcIixcbiAgXCJNb25vbWlhbExpc3RcIixcbiAgXCJNb25vbWlhbE9yZGVyXCIsXG4gIFwiTW9uc3Rlckdyb3VwTVwiLFxuICBcIk1vb25QaGFzZVwiLFxuICBcIk1vb25Qb3NpdGlvblwiLFxuICBcIk1vcmxldFdhdmVsZXRcIixcbiAgXCJNb3JwaG9sb2dpY2FsQmluYXJpemVcIixcbiAgXCJNb3JwaG9sb2dpY2FsQnJhbmNoUG9pbnRzXCIsXG4gIFwiTW9ycGhvbG9naWNhbENvbXBvbmVudHNcIixcbiAgXCJNb3JwaG9sb2dpY2FsRXVsZXJOdW1iZXJcIixcbiAgXCJNb3JwaG9sb2dpY2FsR3JhcGhcIixcbiAgXCJNb3JwaG9sb2dpY2FsUGVyaW1ldGVyXCIsXG4gIFwiTW9ycGhvbG9naWNhbFRyYW5zZm9ybVwiLFxuICBcIk1vcnRhbGl0eURhdGFcIixcbiAgXCJNb3N0XCIsXG4gIFwiTW91bnRhaW5EYXRhXCIsXG4gIFwiTW91c2VBbm5vdGF0aW9uXCIsXG4gIFwiTW91c2VBcHBlYXJhbmNlXCIsXG4gIFwiTW91c2VBcHBlYXJhbmNlVGFnXCIsXG4gIFwiTW91c2VCdXR0b25zXCIsXG4gIFwiTW91c2VvdmVyXCIsXG4gIFwiTW91c2VQb2ludGVyTm90ZVwiLFxuICBcIk1vdXNlUG9zaXRpb25cIixcbiAgXCJNb3ZpZURhdGFcIixcbiAgXCJNb3ZpbmdBdmVyYWdlXCIsXG4gIFwiTW92aW5nTWFwXCIsXG4gIFwiTW92aW5nTWVkaWFuXCIsXG4gIFwiTW95YWxEaXN0cmlidXRpb25cIixcbiAgXCJNdWx0aWNvbHVtblwiLFxuICBcIk11bHRpZWRnZVN0eWxlXCIsXG4gIFwiTXVsdGlncmFwaFFcIixcbiAgXCJNdWx0aWxhdW5jaFdhcm5pbmdcIixcbiAgXCJNdWx0aUxldHRlckl0YWxpY3NcIixcbiAgXCJNdWx0aUxldHRlclN0eWxlXCIsXG4gIFwiTXVsdGlsaW5lRnVuY3Rpb25cIixcbiAgXCJNdWx0aW5vbWlhbFwiLFxuICBcIk11bHRpbm9taWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiTXVsdGlub3JtYWxEaXN0cmlidXRpb25cIixcbiAgXCJNdWx0aXBsaWNhdGl2ZU9yZGVyXCIsXG4gIFwiTXVsdGlwbGljaXR5XCIsXG4gIFwiTXVsdGlwbHlTaWRlc1wiLFxuICBcIk11bHRpc2VsZWN0aW9uXCIsXG4gIFwiTXVsdGl2YXJpYXRlSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb25cIixcbiAgXCJNdWx0aXZhcmlhdGVQb2lzc29uRGlzdHJpYnV0aW9uXCIsXG4gIFwiTXVsdGl2YXJpYXRlVERpc3RyaWJ1dGlvblwiLFxuICBcIk5cIixcbiAgXCJOYWthZ2FtaURpc3RyaWJ1dGlvblwiLFxuICBcIk5hbWVRXCIsXG4gIFwiTmFtZXNcIixcbiAgXCJOYW1lc3BhY2VCb3hcIixcbiAgXCJOYW1lc3BhY2VCb3hPcHRpb25zXCIsXG4gIFwiTmFuZFwiLFxuICBcIk5BcmdNYXhcIixcbiAgXCJOQXJnTWluXCIsXG4gIFwiTkJlcm5vdWxsaUJcIixcbiAgXCJOQm9keVNpbXVsYXRpb25cIixcbiAgXCJOQm9keVNpbXVsYXRpb25EYXRhXCIsXG4gIFwiTkNhY2hlXCIsXG4gIFwiTkRFaWdlbnN5c3RlbVwiLFxuICBcIk5ERWlnZW52YWx1ZXNcIixcbiAgXCJORFNvbHZlXCIsXG4gIFwiTkRTb2x2ZVZhbHVlXCIsXG4gIFwiTmVhcmVzdFwiLFxuICBcIk5lYXJlc3RGdW5jdGlvblwiLFxuICBcIk5lYXJlc3RNZXNoQ2VsbHNcIixcbiAgXCJOZWFyZXN0TmVpZ2hib3JHcmFwaFwiLFxuICBcIk5lYXJlc3RUb1wiLFxuICBcIk5lYnVsYURhdGFcIixcbiAgXCJOZWVkQ3VycmVudEZyb250RW5kUGFja2FnZVBhY2tldFwiLFxuICBcIk5lZWRDdXJyZW50RnJvbnRFbmRTeW1ib2xzUGFja2V0XCIsXG4gIFwiTmVlZGxlbWFuV3Vuc2NoU2ltaWxhcml0eVwiLFxuICBcIk5lZWRzXCIsXG4gIFwiTmVnYXRpdmVcIixcbiAgXCJOZWdhdGl2ZUJpbm9taWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiTmVnYXRpdmVEZWZpbml0ZU1hdHJpeFFcIixcbiAgXCJOZWdhdGl2ZUludGVnZXJzXCIsXG4gIFwiTmVnYXRpdmVNdWx0aW5vbWlhbERpc3RyaWJ1dGlvblwiLFxuICBcIk5lZ2F0aXZlUmF0aW9uYWxzXCIsXG4gIFwiTmVnYXRpdmVSZWFsc1wiLFxuICBcIk5lZ2F0aXZlU2VtaWRlZmluaXRlTWF0cml4UVwiLFxuICBcIk5laWdoYm9yaG9vZERhdGFcIixcbiAgXCJOZWlnaGJvcmhvb2RHcmFwaFwiLFxuICBcIk5lc3RcIixcbiAgXCJOZXN0ZWRHcmVhdGVyR3JlYXRlclwiLFxuICBcIk5lc3RlZExlc3NMZXNzXCIsXG4gIFwiTmVzdGVkU2NyaXB0UnVsZXNcIixcbiAgXCJOZXN0R3JhcGhcIixcbiAgXCJOZXN0TGlzdFwiLFxuICBcIk5lc3RXaGlsZVwiLFxuICBcIk5lc3RXaGlsZUxpc3RcIixcbiAgXCJOZXRBcHBlbmRcIixcbiAgXCJOZXRCaWRpcmVjdGlvbmFsT3BlcmF0b3JcIixcbiAgXCJOZXRDaGFpblwiLFxuICBcIk5ldERlY29kZXJcIixcbiAgXCJOZXREZWxldGVcIixcbiAgXCJOZXREcm9wXCIsXG4gIFwiTmV0RW5jb2RlclwiLFxuICBcIk5ldEV2YWx1YXRpb25Nb2RlXCIsXG4gIFwiTmV0RXh0cmFjdFwiLFxuICBcIk5ldEZsYXR0ZW5cIixcbiAgXCJOZXRGb2xkT3BlcmF0b3JcIixcbiAgXCJOZXRHQU5PcGVyYXRvclwiLFxuICBcIk5ldEdyYXBoXCIsXG4gIFwiTmV0SW5mb3JtYXRpb25cIixcbiAgXCJOZXRJbml0aWFsaXplXCIsXG4gIFwiTmV0SW5zZXJ0XCIsXG4gIFwiTmV0SW5zZXJ0U2hhcmVkQXJyYXlzXCIsXG4gIFwiTmV0Sm9pblwiLFxuICBcIk5ldE1hcE9wZXJhdG9yXCIsXG4gIFwiTmV0TWFwVGhyZWFkT3BlcmF0b3JcIixcbiAgXCJOZXRNZWFzdXJlbWVudHNcIixcbiAgXCJOZXRNb2RlbFwiLFxuICBcIk5ldE5lc3RPcGVyYXRvclwiLFxuICBcIk5ldFBhaXJFbWJlZGRpbmdPcGVyYXRvclwiLFxuICBcIk5ldFBvcnRcIixcbiAgXCJOZXRQb3J0R3JhZGllbnRcIixcbiAgXCJOZXRQcmVwZW5kXCIsXG4gIFwiTmV0UmVuYW1lXCIsXG4gIFwiTmV0UmVwbGFjZVwiLFxuICBcIk5ldFJlcGxhY2VQYXJ0XCIsXG4gIFwiTmV0U2hhcmVkQXJyYXlcIixcbiAgXCJOZXRTdGF0ZU9iamVjdFwiLFxuICBcIk5ldFRha2VcIixcbiAgXCJOZXRUcmFpblwiLFxuICBcIk5ldFRyYWluUmVzdWx0c09iamVjdFwiLFxuICBcIk5ldHdvcmtQYWNrZXRDYXB0dXJlXCIsXG4gIFwiTmV0d29ya1BhY2tldFJlY29yZGluZ1wiLFxuICBcIk5ldHdvcmtQYWNrZXRSZWNvcmRpbmdEdXJpbmdcIixcbiAgXCJOZXR3b3JrUGFja2V0VHJhY2VcIixcbiAgXCJOZXVtYW5uVmFsdWVcIixcbiAgXCJOZXZpbGxlVGhldGFDXCIsXG4gIFwiTmV2aWxsZVRoZXRhRFwiLFxuICBcIk5ldmlsbGVUaGV0YU5cIixcbiAgXCJOZXZpbGxlVGhldGFTXCIsXG4gIFwiTmV3UHJpbWl0aXZlU3R5bGVcIixcbiAgXCJORXhwZWN0YXRpb25cIixcbiAgXCJOZXh0XCIsXG4gIFwiTmV4dENlbGxcIixcbiAgXCJOZXh0RGF0ZVwiLFxuICBcIk5leHRQcmltZVwiLFxuICBcIk5leHRTY2hlZHVsZWRUYXNrVGltZVwiLFxuICBcIk5Ib2xkQWxsXCIsXG4gIFwiTkhvbGRGaXJzdFwiLFxuICBcIk5Ib2xkUmVzdFwiLFxuICBcIk5pY2hvbHNHcmlkTGluZXNcIixcbiAgXCJOaWNob2xzUGxvdFwiLFxuICBcIk5pZ2h0SGVtaXNwaGVyZVwiLFxuICBcIk5JbnRlZ3JhdGVcIixcbiAgXCJOTWF4aW1pemVcIixcbiAgXCJOTWF4VmFsdWVcIixcbiAgXCJOTWluaW1pemVcIixcbiAgXCJOTWluVmFsdWVcIixcbiAgXCJOb21pbmFsVmFyaWFibGVzXCIsXG4gIFwiTm9uQXNzb2NpYXRpdmVcIixcbiAgXCJOb25jZW50cmFsQmV0YURpc3RyaWJ1dGlvblwiLFxuICBcIk5vbmNlbnRyYWxDaGlTcXVhcmVEaXN0cmlidXRpb25cIixcbiAgXCJOb25jZW50cmFsRlJhdGlvRGlzdHJpYnV0aW9uXCIsXG4gIFwiTm9uY2VudHJhbFN0dWRlbnRURGlzdHJpYnV0aW9uXCIsXG4gIFwiTm9uQ29tbXV0YXRpdmVNdWx0aXBseVwiLFxuICBcIk5vbkNvbnN0YW50c1wiLFxuICBcIk5vbmRpbWVuc2lvbmFsaXphdGlvblRyYW5zZm9ybVwiLFxuICBcIk5vbmVcIixcbiAgXCJOb25lVHJ1ZVwiLFxuICBcIk5vbmxpbmVhck1vZGVsRml0XCIsXG4gIFwiTm9ubGluZWFyU3RhdGVTcGFjZU1vZGVsXCIsXG4gIFwiTm9ubG9jYWxNZWFuc0ZpbHRlclwiLFxuICBcIk5vbk5lZ2F0aXZlXCIsXG4gIFwiTm9uTmVnYXRpdmVJbnRlZ2Vyc1wiLFxuICBcIk5vbk5lZ2F0aXZlUmF0aW9uYWxzXCIsXG4gIFwiTm9uTmVnYXRpdmVSZWFsc1wiLFxuICBcIk5vblBvc2l0aXZlXCIsXG4gIFwiTm9uUG9zaXRpdmVJbnRlZ2Vyc1wiLFxuICBcIk5vblBvc2l0aXZlUmF0aW9uYWxzXCIsXG4gIFwiTm9uUG9zaXRpdmVSZWFsc1wiLFxuICBcIk5vclwiLFxuICBcIk5vcmx1bmRCXCIsXG4gIFwiTm9ybVwiLFxuICBcIk5vcm1hbFwiLFxuICBcIk5vcm1hbERpc3RyaWJ1dGlvblwiLFxuICBcIk5vcm1hbEdyb3VwaW5nXCIsXG4gIFwiTm9ybWFsaXphdGlvbkxheWVyXCIsXG4gIFwiTm9ybWFsaXplXCIsXG4gIFwiTm9ybWFsaXplZFwiLFxuICBcIk5vcm1hbGl6ZWRTcXVhcmVkRXVjbGlkZWFuRGlzdGFuY2VcIixcbiAgXCJOb3JtYWxNYXRyaXhRXCIsXG4gIFwiTm9ybWFsc0Z1bmN0aW9uXCIsXG4gIFwiTm9ybUZ1bmN0aW9uXCIsXG4gIFwiTm90XCIsXG4gIFwiTm90Q29uZ3J1ZW50XCIsXG4gIFwiTm90Q3VwQ2FwXCIsXG4gIFwiTm90RG91YmxlVmVydGljYWxCYXJcIixcbiAgXCJOb3RlYm9va1wiLFxuICBcIk5vdGVib29rQXBwbHlcIixcbiAgXCJOb3RlYm9va0F1dG9TYXZlXCIsXG4gIFwiTm90ZWJvb2tDbG9zZVwiLFxuICBcIk5vdGVib29rQ29udmVydFNldHRpbmdzXCIsXG4gIFwiTm90ZWJvb2tDcmVhdGVcIixcbiAgXCJOb3RlYm9va0NyZWF0ZVJldHVybk9iamVjdFwiLFxuICBcIk5vdGVib29rRGVmYXVsdFwiLFxuICBcIk5vdGVib29rRGVsZXRlXCIsXG4gIFwiTm90ZWJvb2tEaXJlY3RvcnlcIixcbiAgXCJOb3RlYm9va0R5bmFtaWNFeHByZXNzaW9uXCIsXG4gIFwiTm90ZWJvb2tFdmFsdWF0ZVwiLFxuICBcIk5vdGVib29rRXZlbnRBY3Rpb25zXCIsXG4gIFwiTm90ZWJvb2tGaWxlTmFtZVwiLFxuICBcIk5vdGVib29rRmluZFwiLFxuICBcIk5vdGVib29rRmluZFJldHVybk9iamVjdFwiLFxuICBcIk5vdGVib29rR2V0XCIsXG4gIFwiTm90ZWJvb2tHZXRMYXlvdXRJbmZvcm1hdGlvblBhY2tldFwiLFxuICBcIk5vdGVib29rR2V0TWlzc3BlbGxpbmdzUGFja2V0XCIsXG4gIFwiTm90ZWJvb2tJbXBvcnRcIixcbiAgXCJOb3RlYm9va0luZm9ybWF0aW9uXCIsXG4gIFwiTm90ZWJvb2tJbnRlcmZhY2VPYmplY3RcIixcbiAgXCJOb3RlYm9va0xvY2F0ZVwiLFxuICBcIk5vdGVib29rT2JqZWN0XCIsXG4gIFwiTm90ZWJvb2tPcGVuXCIsXG4gIFwiTm90ZWJvb2tPcGVuUmV0dXJuT2JqZWN0XCIsXG4gIFwiTm90ZWJvb2tQYXRoXCIsXG4gIFwiTm90ZWJvb2tQcmludFwiLFxuICBcIk5vdGVib29rUHV0XCIsXG4gIFwiTm90ZWJvb2tQdXRSZXR1cm5PYmplY3RcIixcbiAgXCJOb3RlYm9va1JlYWRcIixcbiAgXCJOb3RlYm9va1Jlc2V0R2VuZXJhdGVkQ2VsbHNcIixcbiAgXCJOb3RlYm9va3NcIixcbiAgXCJOb3RlYm9va1NhdmVcIixcbiAgXCJOb3RlYm9va1NhdmVBc1wiLFxuICBcIk5vdGVib29rU2VsZWN0aW9uXCIsXG4gIFwiTm90ZWJvb2tTZXR1cExheW91dEluZm9ybWF0aW9uUGFja2V0XCIsXG4gIFwiTm90ZWJvb2tzTWVudVwiLFxuICBcIk5vdGVib29rVGVtcGxhdGVcIixcbiAgXCJOb3RlYm9va1dyaXRlXCIsXG4gIFwiTm90RWxlbWVudFwiLFxuICBcIk5vdEVxdWFsVGlsZGVcIixcbiAgXCJOb3RFeGlzdHNcIixcbiAgXCJOb3RHcmVhdGVyXCIsXG4gIFwiTm90R3JlYXRlckVxdWFsXCIsXG4gIFwiTm90R3JlYXRlckZ1bGxFcXVhbFwiLFxuICBcIk5vdEdyZWF0ZXJHcmVhdGVyXCIsXG4gIFwiTm90R3JlYXRlckxlc3NcIixcbiAgXCJOb3RHcmVhdGVyU2xhbnRFcXVhbFwiLFxuICBcIk5vdEdyZWF0ZXJUaWxkZVwiLFxuICBcIk5vdGhpbmdcIixcbiAgXCJOb3RIdW1wRG93bkh1bXBcIixcbiAgXCJOb3RIdW1wRXF1YWxcIixcbiAgXCJOb3RpZmljYXRpb25GdW5jdGlvblwiLFxuICBcIk5vdExlZnRUcmlhbmdsZVwiLFxuICBcIk5vdExlZnRUcmlhbmdsZUJhclwiLFxuICBcIk5vdExlZnRUcmlhbmdsZUVxdWFsXCIsXG4gIFwiTm90TGVzc1wiLFxuICBcIk5vdExlc3NFcXVhbFwiLFxuICBcIk5vdExlc3NGdWxsRXF1YWxcIixcbiAgXCJOb3RMZXNzR3JlYXRlclwiLFxuICBcIk5vdExlc3NMZXNzXCIsXG4gIFwiTm90TGVzc1NsYW50RXF1YWxcIixcbiAgXCJOb3RMZXNzVGlsZGVcIixcbiAgXCJOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlclwiLFxuICBcIk5vdE5lc3RlZExlc3NMZXNzXCIsXG4gIFwiTm90UHJlY2VkZXNcIixcbiAgXCJOb3RQcmVjZWRlc0VxdWFsXCIsXG4gIFwiTm90UHJlY2VkZXNTbGFudEVxdWFsXCIsXG4gIFwiTm90UHJlY2VkZXNUaWxkZVwiLFxuICBcIk5vdFJldmVyc2VFbGVtZW50XCIsXG4gIFwiTm90UmlnaHRUcmlhbmdsZVwiLFxuICBcIk5vdFJpZ2h0VHJpYW5nbGVCYXJcIixcbiAgXCJOb3RSaWdodFRyaWFuZ2xlRXF1YWxcIixcbiAgXCJOb3RTcXVhcmVTdWJzZXRcIixcbiAgXCJOb3RTcXVhcmVTdWJzZXRFcXVhbFwiLFxuICBcIk5vdFNxdWFyZVN1cGVyc2V0XCIsXG4gIFwiTm90U3F1YXJlU3VwZXJzZXRFcXVhbFwiLFxuICBcIk5vdFN1YnNldFwiLFxuICBcIk5vdFN1YnNldEVxdWFsXCIsXG4gIFwiTm90U3VjY2VlZHNcIixcbiAgXCJOb3RTdWNjZWVkc0VxdWFsXCIsXG4gIFwiTm90U3VjY2VlZHNTbGFudEVxdWFsXCIsXG4gIFwiTm90U3VjY2VlZHNUaWxkZVwiLFxuICBcIk5vdFN1cGVyc2V0XCIsXG4gIFwiTm90U3VwZXJzZXRFcXVhbFwiLFxuICBcIk5vdFRpbGRlXCIsXG4gIFwiTm90VGlsZGVFcXVhbFwiLFxuICBcIk5vdFRpbGRlRnVsbEVxdWFsXCIsXG4gIFwiTm90VGlsZGVUaWxkZVwiLFxuICBcIk5vdFZlcnRpY2FsQmFyXCIsXG4gIFwiTm93XCIsXG4gIFwiTm9XaGl0ZXNwYWNlXCIsXG4gIFwiTlByb2JhYmlsaXR5XCIsXG4gIFwiTlByb2R1Y3RcIixcbiAgXCJOUHJvZHVjdEZhY3RvcnNcIixcbiAgXCJOUm9vdHNcIixcbiAgXCJOU29sdmVcIixcbiAgXCJOU3VtXCIsXG4gIFwiTlN1bVRlcm1zXCIsXG4gIFwiTnVjbGVhckV4cGxvc2lvbkRhdGFcIixcbiAgXCJOdWNsZWFyUmVhY3RvckRhdGFcIixcbiAgXCJOdWxsXCIsXG4gIFwiTnVsbFJlY29yZHNcIixcbiAgXCJOdWxsU3BhY2VcIixcbiAgXCJOdWxsV29yZHNcIixcbiAgXCJOdW1iZXJcIixcbiAgXCJOdW1iZXJDb21wb3NlXCIsXG4gIFwiTnVtYmVyRGVjb21wb3NlXCIsXG4gIFwiTnVtYmVyRXhwYW5kXCIsXG4gIFwiTnVtYmVyRmllbGRDbGFzc051bWJlclwiLFxuICBcIk51bWJlckZpZWxkRGlzY3JpbWluYW50XCIsXG4gIFwiTnVtYmVyRmllbGRGdW5kYW1lbnRhbFVuaXRzXCIsXG4gIFwiTnVtYmVyRmllbGRJbnRlZ3JhbEJhc2lzXCIsXG4gIFwiTnVtYmVyRmllbGROb3JtUmVwcmVzZW50YXRpdmVzXCIsXG4gIFwiTnVtYmVyRmllbGRSZWd1bGF0b3JcIixcbiAgXCJOdW1iZXJGaWVsZFJvb3RzT2ZVbml0eVwiLFxuICBcIk51bWJlckZpZWxkU2lnbmF0dXJlXCIsXG4gIFwiTnVtYmVyRm9ybVwiLFxuICBcIk51bWJlckZvcm1hdFwiLFxuICBcIk51bWJlckxpbmVQbG90XCIsXG4gIFwiTnVtYmVyTWFya3NcIixcbiAgXCJOdW1iZXJNdWx0aXBsaWVyXCIsXG4gIFwiTnVtYmVyUGFkZGluZ1wiLFxuICBcIk51bWJlclBvaW50XCIsXG4gIFwiTnVtYmVyUVwiLFxuICBcIk51bWJlclNlcGFyYXRvclwiLFxuICBcIk51bWJlclNpZ25zXCIsXG4gIFwiTnVtYmVyU3RyaW5nXCIsXG4gIFwiTnVtZXJhdG9yXCIsXG4gIFwiTnVtZXJhdG9yRGVub21pbmF0b3JcIixcbiAgXCJOdW1lcmljYWxPcmRlclwiLFxuICBcIk51bWVyaWNhbFNvcnRcIixcbiAgXCJOdW1lcmljQXJyYXlcIixcbiAgXCJOdW1lcmljQXJyYXlRXCIsXG4gIFwiTnVtZXJpY0FycmF5VHlwZVwiLFxuICBcIk51bWVyaWNGdW5jdGlvblwiLFxuICBcIk51bWVyaWNRXCIsXG4gIFwiTnV0dGFsbFdpbmRvd1wiLFxuICBcIk5WYWx1ZXNcIixcbiAgXCJOeXF1aXN0R3JpZExpbmVzXCIsXG4gIFwiTnlxdWlzdFBsb3RcIixcbiAgXCJPXCIsXG4gIFwiT2JzZXJ2YWJpbGl0eUdyYW1pYW5cIixcbiAgXCJPYnNlcnZhYmlsaXR5TWF0cml4XCIsXG4gIFwiT2JzZXJ2YWJsZURlY29tcG9zaXRpb25cIixcbiAgXCJPYnNlcnZhYmxlTW9kZWxRXCIsXG4gIFwiT2NlYW5EYXRhXCIsXG4gIFwiT2N0YWhlZHJvblwiLFxuICBcIk9kZFFcIixcbiAgXCJPZmZcIixcbiAgXCJPZmZzZXRcIixcbiAgXCJPTEVEYXRhXCIsXG4gIFwiT25cIixcbiAgXCJPTmFuR3JvdXBPTlwiLFxuICBcIk9uY2VcIixcbiAgXCJPbmVJZGVudGl0eVwiLFxuICBcIk9wYWNpdHlcIixcbiAgXCJPcGFjaXR5RnVuY3Rpb25cIixcbiAgXCJPcGFjaXR5RnVuY3Rpb25TY2FsaW5nXCIsXG4gIFwiT3BlblwiLFxuICBcIk9wZW5BcHBlbmRcIixcbiAgXCJPcGVuZXJcIixcbiAgXCJPcGVuZXJCb3hcIixcbiAgXCJPcGVuZXJCb3hPcHRpb25zXCIsXG4gIFwiT3BlbmVyVmlld1wiLFxuICBcIk9wZW5GdW5jdGlvbkluc3BlY3RvclBhY2tldFwiLFxuICBcIk9wZW5pbmdcIixcbiAgXCJPcGVuUmVhZFwiLFxuICBcIk9wZW5TcGVjaWFsT3B0aW9uc1wiLFxuICBcIk9wZW5UZW1wb3JhcnlcIixcbiAgXCJPcGVuV3JpdGVcIixcbiAgXCJPcGVyYXRlXCIsXG4gIFwiT3BlcmF0aW5nU3lzdGVtXCIsXG4gIFwiT3BlcmF0b3JBcHBsaWVkXCIsXG4gIFwiT3B0aW11bUZsb3dEYXRhXCIsXG4gIFwiT3B0aW9uYWxcIixcbiAgXCJPcHRpb25hbEVsZW1lbnRcIixcbiAgXCJPcHRpb25JbnNwZWN0b3JTZXR0aW5nc1wiLFxuICBcIk9wdGlvblFcIixcbiAgXCJPcHRpb25zXCIsXG4gIFwiT3B0aW9uc1BhY2tldFwiLFxuICBcIk9wdGlvbnNQYXR0ZXJuXCIsXG4gIFwiT3B0aW9uVmFsdWVcIixcbiAgXCJPcHRpb25WYWx1ZUJveFwiLFxuICBcIk9wdGlvblZhbHVlQm94T3B0aW9uc1wiLFxuICBcIk9yXCIsXG4gIFwiT3JhbmdlXCIsXG4gIFwiT3JkZXJcIixcbiAgXCJPcmRlckRpc3RyaWJ1dGlvblwiLFxuICBcIk9yZGVyZWRRXCIsXG4gIFwiT3JkZXJpbmdcIixcbiAgXCJPcmRlcmluZ0J5XCIsXG4gIFwiT3JkZXJpbmdMYXllclwiLFxuICBcIk9yZGVybGVzc1wiLFxuICBcIk9yZGVybGVzc1BhdHRlcm5TZXF1ZW5jZVwiLFxuICBcIk9ybnN0ZWluVWhsZW5iZWNrUHJvY2Vzc1wiLFxuICBcIk9ydGhvZ29uYWxpemVcIixcbiAgXCJPcnRob2dvbmFsTWF0cml4UVwiLFxuICBcIk91dFwiLFxuICBcIk91dGVyXCIsXG4gIFwiT3V0ZXJQb2x5Z29uXCIsXG4gIFwiT3V0ZXJQb2x5aGVkcm9uXCIsXG4gIFwiT3V0cHV0QXV0b092ZXJ3cml0ZVwiLFxuICBcIk91dHB1dENvbnRyb2xsYWJpbGl0eU1hdHJpeFwiLFxuICBcIk91dHB1dENvbnRyb2xsYWJsZU1vZGVsUVwiLFxuICBcIk91dHB1dEZvcm1cIixcbiAgXCJPdXRwdXRGb3JtRGF0YVwiLFxuICBcIk91dHB1dEdyb3VwaW5nXCIsXG4gIFwiT3V0cHV0TWF0aEVkaXRFeHByZXNzaW9uXCIsXG4gIFwiT3V0cHV0TmFtZVBhY2tldFwiLFxuICBcIk91dHB1dFJlc3BvbnNlXCIsXG4gIFwiT3V0cHV0U2l6ZUxpbWl0XCIsXG4gIFwiT3V0cHV0U3RyZWFtXCIsXG4gIFwiT3ZlclwiLFxuICBcIk92ZXJCYXJcIixcbiAgXCJPdmVyRG90XCIsXG4gIFwiT3ZlcmZsb3dcIixcbiAgXCJPdmVySGF0XCIsXG4gIFwiT3ZlcmxhcHNcIixcbiAgXCJPdmVybGF5XCIsXG4gIFwiT3ZlcmxheUJveFwiLFxuICBcIk92ZXJsYXlCb3hPcHRpb25zXCIsXG4gIFwiT3ZlcnNjcmlwdFwiLFxuICBcIk92ZXJzY3JpcHRCb3hcIixcbiAgXCJPdmVyc2NyaXB0Qm94T3B0aW9uc1wiLFxuICBcIk92ZXJUaWxkZVwiLFxuICBcIk92ZXJWZWN0b3JcIixcbiAgXCJPdmVyd3JpdGVUYXJnZXRcIixcbiAgXCJPd2VuVFwiLFxuICBcIk93blZhbHVlc1wiLFxuICBcIlBhY2thZ2VcIixcbiAgXCJQYWNraW5nTWV0aG9kXCIsXG4gIFwiUGFja1BhY2xldFwiLFxuICBcIlBhY2xldERhdGFSZWJ1aWxkXCIsXG4gIFwiUGFjbGV0RGlyZWN0b3J5QWRkXCIsXG4gIFwiUGFjbGV0RGlyZWN0b3J5TG9hZFwiLFxuICBcIlBhY2xldERpcmVjdG9yeVJlbW92ZVwiLFxuICBcIlBhY2xldERpcmVjdG9yeVVubG9hZFwiLFxuICBcIlBhY2xldERpc2FibGVcIixcbiAgXCJQYWNsZXRFbmFibGVcIixcbiAgXCJQYWNsZXRGaW5kXCIsXG4gIFwiUGFjbGV0RmluZFJlbW90ZVwiLFxuICBcIlBhY2xldEluZm9ybWF0aW9uXCIsXG4gIFwiUGFjbGV0SW5zdGFsbFwiLFxuICBcIlBhY2xldEluc3RhbGxTdWJtaXRcIixcbiAgXCJQYWNsZXROZXdlclFcIixcbiAgXCJQYWNsZXRPYmplY3RcIixcbiAgXCJQYWNsZXRPYmplY3RRXCIsXG4gIFwiUGFjbGV0U2l0ZVwiLFxuICBcIlBhY2xldFNpdGVPYmplY3RcIixcbiAgXCJQYWNsZXRTaXRlUmVnaXN0ZXJcIixcbiAgXCJQYWNsZXRTaXRlc1wiLFxuICBcIlBhY2xldFNpdGVVbnJlZ2lzdGVyXCIsXG4gIFwiUGFjbGV0U2l0ZVVwZGF0ZVwiLFxuICBcIlBhY2xldFVuaW5zdGFsbFwiLFxuICBcIlBhY2xldFVwZGF0ZVwiLFxuICBcIlBhZGRlZEZvcm1cIixcbiAgXCJQYWRkaW5nXCIsXG4gIFwiUGFkZGluZ0xheWVyXCIsXG4gIFwiUGFkZGluZ1NpemVcIixcbiAgXCJQYWRlQXBwcm94aW1hbnRcIixcbiAgXCJQYWRMZWZ0XCIsXG4gIFwiUGFkUmlnaHRcIixcbiAgXCJQYWdlQnJlYWtBYm92ZVwiLFxuICBcIlBhZ2VCcmVha0JlbG93XCIsXG4gIFwiUGFnZUJyZWFrV2l0aGluXCIsXG4gIFwiUGFnZUZvb3RlckxpbmVzXCIsXG4gIFwiUGFnZUZvb3RlcnNcIixcbiAgXCJQYWdlSGVhZGVyTGluZXNcIixcbiAgXCJQYWdlSGVhZGVyc1wiLFxuICBcIlBhZ2VIZWlnaHRcIixcbiAgXCJQYWdlUmFua0NlbnRyYWxpdHlcIixcbiAgXCJQYWdlVGhlbWVcIixcbiAgXCJQYWdlV2lkdGhcIixcbiAgXCJQYWdpbmF0aW9uXCIsXG4gIFwiUGFpcmVkQmFyQ2hhcnRcIixcbiAgXCJQYWlyZWRIaXN0b2dyYW1cIixcbiAgXCJQYWlyZWRTbW9vdGhIaXN0b2dyYW1cIixcbiAgXCJQYWlyZWRUVGVzdFwiLFxuICBcIlBhaXJlZFpUZXN0XCIsXG4gIFwiUGFsZXR0ZU5vdGVib29rXCIsXG4gIFwiUGFsZXR0ZVBhdGhcIixcbiAgXCJQYWxpbmRyb21lUVwiLFxuICBcIlBhbmVcIixcbiAgXCJQYW5lQm94XCIsXG4gIFwiUGFuZUJveE9wdGlvbnNcIixcbiAgXCJQYW5lbFwiLFxuICBcIlBhbmVsQm94XCIsXG4gIFwiUGFuZWxCb3hPcHRpb25zXCIsXG4gIFwiUGFuZWxlZFwiLFxuICBcIlBhbmVTZWxlY3RvclwiLFxuICBcIlBhbmVTZWxlY3RvckJveFwiLFxuICBcIlBhbmVTZWxlY3RvckJveE9wdGlvbnNcIixcbiAgXCJQYXBlcldpZHRoXCIsXG4gIFwiUGFyYWJvbGljQ3lsaW5kZXJEXCIsXG4gIFwiUGFyYWdyYXBoSW5kZW50XCIsXG4gIFwiUGFyYWdyYXBoU3BhY2luZ1wiLFxuICBcIlBhcmFsbGVsQXJyYXlcIixcbiAgXCJQYXJhbGxlbENvbWJpbmVcIixcbiAgXCJQYXJhbGxlbERvXCIsXG4gIFwiUGFyYWxsZWxlcGlwZWRcIixcbiAgXCJQYXJhbGxlbEV2YWx1YXRlXCIsXG4gIFwiUGFyYWxsZWxpemF0aW9uXCIsXG4gIFwiUGFyYWxsZWxpemVcIixcbiAgXCJQYXJhbGxlbE1hcFwiLFxuICBcIlBhcmFsbGVsTmVlZHNcIixcbiAgXCJQYXJhbGxlbG9ncmFtXCIsXG4gIFwiUGFyYWxsZWxQcm9kdWN0XCIsXG4gIFwiUGFyYWxsZWxTdWJtaXRcIixcbiAgXCJQYXJhbGxlbFN1bVwiLFxuICBcIlBhcmFsbGVsVGFibGVcIixcbiAgXCJQYXJhbGxlbFRyeVwiLFxuICBcIlBhcmFtZXRlclwiLFxuICBcIlBhcmFtZXRlckVzdGltYXRvclwiLFxuICBcIlBhcmFtZXRlck1peHR1cmVEaXN0cmlidXRpb25cIixcbiAgXCJQYXJhbWV0ZXJWYXJpYWJsZXNcIixcbiAgXCJQYXJhbWV0cmljRnVuY3Rpb25cIixcbiAgXCJQYXJhbWV0cmljTkRTb2x2ZVwiLFxuICBcIlBhcmFtZXRyaWNORFNvbHZlVmFsdWVcIixcbiAgXCJQYXJhbWV0cmljUGxvdFwiLFxuICBcIlBhcmFtZXRyaWNQbG90M0RcIixcbiAgXCJQYXJhbWV0cmljUmFtcExheWVyXCIsXG4gIFwiUGFyYW1ldHJpY1JlZ2lvblwiLFxuICBcIlBhcmVudEJveFwiLFxuICBcIlBhcmVudENlbGxcIixcbiAgXCJQYXJlbnRDb25uZWN0XCIsXG4gIFwiUGFyZW50RGlyZWN0b3J5XCIsXG4gIFwiUGFyZW50Rm9ybVwiLFxuICBcIlBhcmVudGhlc2l6ZVwiLFxuICBcIlBhcmVudExpc3RcIixcbiAgXCJQYXJlbnROb3RlYm9va1wiLFxuICBcIlBhcmV0b0Rpc3RyaWJ1dGlvblwiLFxuICBcIlBhcmV0b1BpY2thbmRzRGlzdHJpYnV0aW9uXCIsXG4gIFwiUGFya0RhdGFcIixcbiAgXCJQYXJ0XCIsXG4gIFwiUGFydEJlaGF2aW9yXCIsXG4gIFwiUGFydGlhbENvcnJlbGF0aW9uRnVuY3Rpb25cIixcbiAgXCJQYXJ0aWFsRFwiLFxuICBcIlBhcnRpY2xlQWNjZWxlcmF0b3JEYXRhXCIsXG4gIFwiUGFydGljbGVEYXRhXCIsXG4gIFwiUGFydGl0aW9uXCIsXG4gIFwiUGFydGl0aW9uR3JhbnVsYXJpdHlcIixcbiAgXCJQYXJ0aXRpb25zUFwiLFxuICBcIlBhcnRpdGlvbnNRXCIsXG4gIFwiUGFydExheWVyXCIsXG4gIFwiUGFydE9mU3BlZWNoXCIsXG4gIFwiUGFydFByb3RlY3Rpb25cIixcbiAgXCJQYXJ6ZW5XaW5kb3dcIixcbiAgXCJQYXNjYWxEaXN0cmlidXRpb25cIixcbiAgXCJQYXNzRXZlbnRzRG93blwiLFxuICBcIlBhc3NFdmVudHNVcFwiLFxuICBcIlBhc3RlXCIsXG4gIFwiUGFzdGVBdXRvUXVvdGVDaGFyYWN0ZXJzXCIsXG4gIFwiUGFzdGVCb3hGb3JtSW5saW5lQ2VsbHNcIixcbiAgXCJQYXN0ZUJ1dHRvblwiLFxuICBcIlBhdGhcIixcbiAgXCJQYXRoR3JhcGhcIixcbiAgXCJQYXRoR3JhcGhRXCIsXG4gIFwiUGF0dGVyblwiLFxuICBcIlBhdHRlcm5GaWxsaW5nXCIsXG4gIFwiUGF0dGVyblNlcXVlbmNlXCIsXG4gIFwiUGF0dGVyblRlc3RcIixcbiAgXCJQYXVsaU1hdHJpeFwiLFxuICBcIlBhdWxXYXZlbGV0XCIsXG4gIFwiUGF1c2VcIixcbiAgXCJQYXVzZWRUaW1lXCIsXG4gIFwiUERGXCIsXG4gIFwiUGVha0RldGVjdFwiLFxuICBcIlBlYW5vQ3VydmVcIixcbiAgXCJQZWFyc29uQ2hpU3F1YXJlVGVzdFwiLFxuICBcIlBlYXJzb25Db3JyZWxhdGlvblRlc3RcIixcbiAgXCJQZWFyc29uRGlzdHJpYnV0aW9uXCIsXG4gIFwiUGVyY2VudEZvcm1cIixcbiAgXCJQZXJmZWN0TnVtYmVyXCIsXG4gIFwiUGVyZmVjdE51bWJlclFcIixcbiAgXCJQZXJmb3JtYW5jZUdvYWxcIixcbiAgXCJQZXJpbWV0ZXJcIixcbiAgXCJQZXJpb2RpY0JvdW5kYXJ5Q29uZGl0aW9uXCIsXG4gIFwiUGVyaW9kaWNJbnRlcnBvbGF0aW9uXCIsXG4gIFwiUGVyaW9kb2dyYW1cIixcbiAgXCJQZXJpb2RvZ3JhbUFycmF5XCIsXG4gIFwiUGVybWFuZW50XCIsXG4gIFwiUGVybWlzc2lvbnNcIixcbiAgXCJQZXJtaXNzaW9uc0dyb3VwXCIsXG4gIFwiUGVybWlzc2lvbnNHcm91cE1lbWJlclFcIixcbiAgXCJQZXJtaXNzaW9uc0dyb3Vwc1wiLFxuICBcIlBlcm1pc3Npb25zS2V5XCIsXG4gIFwiUGVybWlzc2lvbnNLZXlzXCIsXG4gIFwiUGVybXV0YXRpb25DeWNsZXNcIixcbiAgXCJQZXJtdXRhdGlvbkN5Y2xlc1FcIixcbiAgXCJQZXJtdXRhdGlvbkdyb3VwXCIsXG4gIFwiUGVybXV0YXRpb25MZW5ndGhcIixcbiAgXCJQZXJtdXRhdGlvbkxpc3RcIixcbiAgXCJQZXJtdXRhdGlvbkxpc3RRXCIsXG4gIFwiUGVybXV0YXRpb25NYXhcIixcbiAgXCJQZXJtdXRhdGlvbk1pblwiLFxuICBcIlBlcm11dGF0aW9uT3JkZXJcIixcbiAgXCJQZXJtdXRhdGlvblBvd2VyXCIsXG4gIFwiUGVybXV0YXRpb25Qcm9kdWN0XCIsXG4gIFwiUGVybXV0YXRpb25SZXBsYWNlXCIsXG4gIFwiUGVybXV0YXRpb25zXCIsXG4gIFwiUGVybXV0YXRpb25TdXBwb3J0XCIsXG4gIFwiUGVybXV0ZVwiLFxuICBcIlBlcm9uYU1hbGlrRmlsdGVyXCIsXG4gIFwiUGVycGVuZGljdWxhclwiLFxuICBcIlBlcnBlbmRpY3VsYXJCaXNlY3RvclwiLFxuICBcIlBlcnNpc3RlbmNlTG9jYXRpb25cIixcbiAgXCJQZXJzaXN0ZW5jZVRpbWVcIixcbiAgXCJQZXJzaXN0ZW50T2JqZWN0XCIsXG4gIFwiUGVyc2lzdGVudE9iamVjdHNcIixcbiAgXCJQZXJzaXN0ZW50VmFsdWVcIixcbiAgXCJQZXJzb25EYXRhXCIsXG4gIFwiUEVSVERpc3RyaWJ1dGlvblwiLFxuICBcIlBldGVyc2VuR3JhcGhcIixcbiAgXCJQaGFzZU1hcmdpbnNcIixcbiAgXCJQaGFzZVJhbmdlXCIsXG4gIFwiUGh5c2ljYWxTeXN0ZW1EYXRhXCIsXG4gIFwiUGlcIixcbiAgXCJQaWNrXCIsXG4gIFwiUElERGF0YVwiLFxuICBcIlBJRERlcml2YXRpdmVGaWx0ZXJcIixcbiAgXCJQSURGZWVkZm9yd2FyZFwiLFxuICBcIlBJRFR1bmVcIixcbiAgXCJQaWVjZXdpc2VcIixcbiAgXCJQaWVjZXdpc2VFeHBhbmRcIixcbiAgXCJQaWVDaGFydFwiLFxuICBcIlBpZUNoYXJ0M0RcIixcbiAgXCJQaWxsYWlUcmFjZVwiLFxuICBcIlBpbGxhaVRyYWNlVGVzdFwiLFxuICBcIlBpbmdUaW1lXCIsXG4gIFwiUGlua1wiLFxuICBcIlBpdGNoUmVjb2duaXplXCIsXG4gIFwiUGl2b3RpbmdcIixcbiAgXCJQaXhlbENvbnN0cmFpbmVkXCIsXG4gIFwiUGl4ZWxWYWx1ZVwiLFxuICBcIlBpeGVsVmFsdWVQb3NpdGlvbnNcIixcbiAgXCJQbGFjZWRcIixcbiAgXCJQbGFjZWhvbGRlclwiLFxuICBcIlBsYWNlaG9sZGVyUmVwbGFjZVwiLFxuICBcIlBsYWluXCIsXG4gIFwiUGxhbmFyQW5nbGVcIixcbiAgXCJQbGFuYXJHcmFwaFwiLFxuICBcIlBsYW5hckdyYXBoUVwiLFxuICBcIlBsYW5ja1JhZGlhdGlvbkxhd1wiLFxuICBcIlBsYW5lQ3VydmVEYXRhXCIsXG4gIFwiUGxhbmV0YXJ5TW9vbkRhdGFcIixcbiAgXCJQbGFuZXREYXRhXCIsXG4gIFwiUGxhbnREYXRhXCIsXG4gIFwiUGxheVwiLFxuICBcIlBsYXlSYW5nZVwiLFxuICBcIlBsb3RcIixcbiAgXCJQbG90M0RcIixcbiAgXCJQbG90M01hdHJpeFwiLFxuICBcIlBsb3REaXZpc2lvblwiLFxuICBcIlBsb3RKb2luZWRcIixcbiAgXCJQbG90TGFiZWxcIixcbiAgXCJQbG90TGFiZWxzXCIsXG4gIFwiUGxvdExheW91dFwiLFxuICBcIlBsb3RMZWdlbmRzXCIsXG4gIFwiUGxvdE1hcmtlcnNcIixcbiAgXCJQbG90UG9pbnRzXCIsXG4gIFwiUGxvdFJhbmdlXCIsXG4gIFwiUGxvdFJhbmdlQ2xpcHBpbmdcIixcbiAgXCJQbG90UmFuZ2VDbGlwUGxhbmVzU3R5bGVcIixcbiAgXCJQbG90UmFuZ2VQYWRkaW5nXCIsXG4gIFwiUGxvdFJlZ2lvblwiLFxuICBcIlBsb3RTdHlsZVwiLFxuICBcIlBsb3RUaGVtZVwiLFxuICBcIlBsdXJhbGl6ZVwiLFxuICBcIlBsdXNcIixcbiAgXCJQbHVzTWludXNcIixcbiAgXCJQb2NoaGFtbWVyXCIsXG4gIFwiUG9kU3RhdGVzXCIsXG4gIFwiUG9kV2lkdGhcIixcbiAgXCJQb2ludFwiLFxuICBcIlBvaW50M0RCb3hcIixcbiAgXCJQb2ludDNEQm94T3B0aW9uc1wiLFxuICBcIlBvaW50Qm94XCIsXG4gIFwiUG9pbnRCb3hPcHRpb25zXCIsXG4gIFwiUG9pbnRGaWd1cmVDaGFydFwiLFxuICBcIlBvaW50TGVnZW5kXCIsXG4gIFwiUG9pbnRTaXplXCIsXG4gIFwiUG9pc3NvbkNvbnN1bERpc3RyaWJ1dGlvblwiLFxuICBcIlBvaXNzb25EaXN0cmlidXRpb25cIixcbiAgXCJQb2lzc29uUHJvY2Vzc1wiLFxuICBcIlBvaXNzb25XaW5kb3dcIixcbiAgXCJQb2xhckF4ZXNcIixcbiAgXCJQb2xhckF4ZXNPcmlnaW5cIixcbiAgXCJQb2xhckdyaWRMaW5lc1wiLFxuICBcIlBvbGFyUGxvdFwiLFxuICBcIlBvbGFyVGlja3NcIixcbiAgXCJQb2xlWmVyb01hcmtlcnNcIixcbiAgXCJQb2x5YUFlcHBsaURpc3RyaWJ1dGlvblwiLFxuICBcIlBvbHlHYW1tYVwiLFxuICBcIlBvbHlnb25cIixcbiAgXCJQb2x5Z29uM0RCb3hcIixcbiAgXCJQb2x5Z29uM0RCb3hPcHRpb25zXCIsXG4gIFwiUG9seWdvbmFsTnVtYmVyXCIsXG4gIFwiUG9seWdvbkFuZ2xlXCIsXG4gIFwiUG9seWdvbkJveFwiLFxuICBcIlBvbHlnb25Cb3hPcHRpb25zXCIsXG4gIFwiUG9seWdvbkNvb3JkaW5hdGVzXCIsXG4gIFwiUG9seWdvbkRlY29tcG9zaXRpb25cIixcbiAgXCJQb2x5Z29uSG9sZVNjYWxlXCIsXG4gIFwiUG9seWdvbkludGVyc2VjdGlvbnNcIixcbiAgXCJQb2x5Z29uU2NhbGVcIixcbiAgXCJQb2x5aGVkcm9uXCIsXG4gIFwiUG9seWhlZHJvbkFuZ2xlXCIsXG4gIFwiUG9seWhlZHJvbkNvb3JkaW5hdGVzXCIsXG4gIFwiUG9seWhlZHJvbkRhdGFcIixcbiAgXCJQb2x5aGVkcm9uRGVjb21wb3NpdGlvblwiLFxuICBcIlBvbHloZWRyb25HZW51c1wiLFxuICBcIlBvbHlMb2dcIixcbiAgXCJQb2x5bm9taWFsRXh0ZW5kZWRHQ0RcIixcbiAgXCJQb2x5bm9taWFsRm9ybVwiLFxuICBcIlBvbHlub21pYWxHQ0RcIixcbiAgXCJQb2x5bm9taWFsTENNXCIsXG4gIFwiUG9seW5vbWlhbE1vZFwiLFxuICBcIlBvbHlub21pYWxRXCIsXG4gIFwiUG9seW5vbWlhbFF1b3RpZW50XCIsXG4gIFwiUG9seW5vbWlhbFF1b3RpZW50UmVtYWluZGVyXCIsXG4gIFwiUG9seW5vbWlhbFJlZHVjZVwiLFxuICBcIlBvbHlub21pYWxSZW1haW5kZXJcIixcbiAgXCJQb2x5bm9taWFsc1wiLFxuICBcIlBvb2xpbmdMYXllclwiLFxuICBcIlBvcHVwTWVudVwiLFxuICBcIlBvcHVwTWVudUJveFwiLFxuICBcIlBvcHVwTWVudUJveE9wdGlvbnNcIixcbiAgXCJQb3B1cFZpZXdcIixcbiAgXCJQb3B1cFdpbmRvd1wiLFxuICBcIlBvc2l0aW9uXCIsXG4gIFwiUG9zaXRpb25JbmRleFwiLFxuICBcIlBvc2l0aXZlXCIsXG4gIFwiUG9zaXRpdmVEZWZpbml0ZU1hdHJpeFFcIixcbiAgXCJQb3NpdGl2ZUludGVnZXJzXCIsXG4gIFwiUG9zaXRpdmVSYXRpb25hbHNcIixcbiAgXCJQb3NpdGl2ZVJlYWxzXCIsXG4gIFwiUG9zaXRpdmVTZW1pZGVmaW5pdGVNYXRyaXhRXCIsXG4gIFwiUG9zc2libGVaZXJvUVwiLFxuICBcIlBvc3RmaXhcIixcbiAgXCJQb3N0U2NyaXB0XCIsXG4gIFwiUG93ZXJcIixcbiAgXCJQb3dlckRpc3RyaWJ1dGlvblwiLFxuICBcIlBvd2VyRXhwYW5kXCIsXG4gIFwiUG93ZXJNb2RcIixcbiAgXCJQb3dlck1vZExpc3RcIixcbiAgXCJQb3dlclJhbmdlXCIsXG4gIFwiUG93ZXJTcGVjdHJhbERlbnNpdHlcIixcbiAgXCJQb3dlcnNSZXByZXNlbnRhdGlvbnNcIixcbiAgXCJQb3dlclN5bW1ldHJpY1BvbHlub21pYWxcIixcbiAgXCJQcmVjZWRlbmNlXCIsXG4gIFwiUHJlY2VkZW5jZUZvcm1cIixcbiAgXCJQcmVjZWRlc1wiLFxuICBcIlByZWNlZGVzRXF1YWxcIixcbiAgXCJQcmVjZWRlc1NsYW50RXF1YWxcIixcbiAgXCJQcmVjZWRlc1RpbGRlXCIsXG4gIFwiUHJlY2lzaW9uXCIsXG4gIFwiUHJlY2lzaW9uR29hbFwiLFxuICBcIlByZURlY3JlbWVudFwiLFxuICBcIlByZWRpY3RcIixcbiAgXCJQcmVkaWN0aW9uUm9vdFwiLFxuICBcIlByZWRpY3RvckZ1bmN0aW9uXCIsXG4gIFwiUHJlZGljdG9ySW5mb3JtYXRpb25cIixcbiAgXCJQcmVkaWN0b3JNZWFzdXJlbWVudHNcIixcbiAgXCJQcmVkaWN0b3JNZWFzdXJlbWVudHNPYmplY3RcIixcbiAgXCJQcmVlbXB0UHJvdGVjdFwiLFxuICBcIlByZWZlcmVuY2VzUGF0aFwiLFxuICBcIlByZWZpeFwiLFxuICBcIlByZUluY3JlbWVudFwiLFxuICBcIlByZXBlbmRcIixcbiAgXCJQcmVwZW5kTGF5ZXJcIixcbiAgXCJQcmVwZW5kVG9cIixcbiAgXCJQcmVwcm9jZXNzaW5nUnVsZXNcIixcbiAgXCJQcmVzZXJ2ZUNvbG9yXCIsXG4gIFwiUHJlc2VydmVJbWFnZU9wdGlvbnNcIixcbiAgXCJQcmV2aW91c1wiLFxuICBcIlByZXZpb3VzQ2VsbFwiLFxuICBcIlByZXZpb3VzRGF0ZVwiLFxuICBcIlByaWNlR3JhcGhEaXN0cmlidXRpb25cIixcbiAgXCJQcmltYXJ5UGxhY2Vob2xkZXJcIixcbiAgXCJQcmltZVwiLFxuICBcIlByaW1lTnVcIixcbiAgXCJQcmltZU9tZWdhXCIsXG4gIFwiUHJpbWVQaVwiLFxuICBcIlByaW1lUG93ZXJRXCIsXG4gIFwiUHJpbWVRXCIsXG4gIFwiUHJpbWVzXCIsXG4gIFwiUHJpbWVaZXRhUFwiLFxuICBcIlByaW1pdGl2ZVBvbHlub21pYWxRXCIsXG4gIFwiUHJpbWl0aXZlUm9vdFwiLFxuICBcIlByaW1pdGl2ZVJvb3RMaXN0XCIsXG4gIFwiUHJpbmNpcGFsQ29tcG9uZW50c1wiLFxuICBcIlByaW5jaXBhbFZhbHVlXCIsXG4gIFwiUHJpbnRcIixcbiAgXCJQcmludGFibGVBU0NJSVFcIixcbiAgXCJQcmludEFjdGlvblwiLFxuICBcIlByaW50Rm9ybVwiLFxuICBcIlByaW50aW5nQ29waWVzXCIsXG4gIFwiUHJpbnRpbmdPcHRpb25zXCIsXG4gIFwiUHJpbnRpbmdQYWdlUmFuZ2VcIixcbiAgXCJQcmludGluZ1N0YXJ0aW5nUGFnZU51bWJlclwiLFxuICBcIlByaW50aW5nU3R5bGVFbnZpcm9ubWVudFwiLFxuICBcIlByaW50b3V0M0RcIixcbiAgXCJQcmludG91dDNEUHJldmlld2VyXCIsXG4gIFwiUHJpbnRQcmVjaXNpb25cIixcbiAgXCJQcmludFRlbXBvcmFyeVwiLFxuICBcIlByaXNtXCIsXG4gIFwiUHJpc21Cb3hcIixcbiAgXCJQcmlzbUJveE9wdGlvbnNcIixcbiAgXCJQcml2YXRlQ2VsbE9wdGlvbnNcIixcbiAgXCJQcml2YXRlRXZhbHVhdGlvbk9wdGlvbnNcIixcbiAgXCJQcml2YXRlRm9udE9wdGlvbnNcIixcbiAgXCJQcml2YXRlRnJvbnRFbmRPcHRpb25zXCIsXG4gIFwiUHJpdmF0ZUtleVwiLFxuICBcIlByaXZhdGVOb3RlYm9va09wdGlvbnNcIixcbiAgXCJQcml2YXRlUGF0aHNcIixcbiAgXCJQcm9iYWJpbGl0eVwiLFxuICBcIlByb2JhYmlsaXR5RGlzdHJpYnV0aW9uXCIsXG4gIFwiUHJvYmFiaWxpdHlQbG90XCIsXG4gIFwiUHJvYmFiaWxpdHlQclwiLFxuICBcIlByb2JhYmlsaXR5U2NhbGVQbG90XCIsXG4gIFwiUHJvYml0TW9kZWxGaXRcIixcbiAgXCJQcm9jZXNzQ29ubmVjdGlvblwiLFxuICBcIlByb2Nlc3NEaXJlY3RvcnlcIixcbiAgXCJQcm9jZXNzRW52aXJvbm1lbnRcIixcbiAgXCJQcm9jZXNzZXNcIixcbiAgXCJQcm9jZXNzRXN0aW1hdG9yXCIsXG4gIFwiUHJvY2Vzc0luZm9ybWF0aW9uXCIsXG4gIFwiUHJvY2Vzc09iamVjdFwiLFxuICBcIlByb2Nlc3NQYXJhbWV0ZXJBc3N1bXB0aW9uc1wiLFxuICBcIlByb2Nlc3NQYXJhbWV0ZXJRXCIsXG4gIFwiUHJvY2Vzc1N0YXRlRG9tYWluXCIsXG4gIFwiUHJvY2Vzc1N0YXR1c1wiLFxuICBcIlByb2Nlc3NUaW1lRG9tYWluXCIsXG4gIFwiUHJvZHVjdFwiLFxuICBcIlByb2R1Y3REaXN0cmlidXRpb25cIixcbiAgXCJQcm9kdWN0TG9nXCIsXG4gIFwiUHJvZ3Jlc3NJbmRpY2F0b3JcIixcbiAgXCJQcm9ncmVzc0luZGljYXRvckJveFwiLFxuICBcIlByb2dyZXNzSW5kaWNhdG9yQm94T3B0aW9uc1wiLFxuICBcIlByb2plY3Rpb25cIixcbiAgXCJQcm9sb2dcIixcbiAgXCJQcm9tcHRGb3JtXCIsXG4gIFwiUHJvb2ZPYmplY3RcIixcbiAgXCJQcm9wZXJ0aWVzXCIsXG4gIFwiUHJvcGVydHlcIixcbiAgXCJQcm9wZXJ0eUxpc3RcIixcbiAgXCJQcm9wZXJ0eVZhbHVlXCIsXG4gIFwiUHJvcG9ydGlvblwiLFxuICBcIlByb3BvcnRpb25hbFwiLFxuICBcIlByb3RlY3RcIixcbiAgXCJQcm90ZWN0ZWRcIixcbiAgXCJQcm90ZWluRGF0YVwiLFxuICBcIlBydW5pbmdcIixcbiAgXCJQc2V1ZG9JbnZlcnNlXCIsXG4gIFwiUHN5Y2hyb21ldHJpY1Byb3BlcnR5RGF0YVwiLFxuICBcIlB1YmxpY0tleVwiLFxuICBcIlB1Ymxpc2hlcklEXCIsXG4gIFwiUHVsc2FyRGF0YVwiLFxuICBcIlB1bmN0dWF0aW9uQ2hhcmFjdGVyXCIsXG4gIFwiUHVycGxlXCIsXG4gIFwiUHV0XCIsXG4gIFwiUHV0QXBwZW5kXCIsXG4gIFwiUHlyYW1pZFwiLFxuICBcIlB5cmFtaWRCb3hcIixcbiAgXCJQeXJhbWlkQm94T3B0aW9uc1wiLFxuICBcIlFCaW5vbWlhbFwiLFxuICBcIlFGYWN0b3JpYWxcIixcbiAgXCJRR2FtbWFcIixcbiAgXCJRSHlwZXJnZW9tZXRyaWNQRlFcIixcbiAgXCJRbkRpc3BlcnNpb25cIixcbiAgXCJRUG9jaGhhbW1lclwiLFxuICBcIlFQb2x5R2FtbWFcIixcbiAgXCJRUkRlY29tcG9zaXRpb25cIixcbiAgXCJRdWFkcmF0aWNJcnJhdGlvbmFsUVwiLFxuICBcIlF1YWRyYXRpY09wdGltaXphdGlvblwiLFxuICBcIlF1YW50aWxlXCIsXG4gIFwiUXVhbnRpbGVQbG90XCIsXG4gIFwiUXVhbnRpdHlcIixcbiAgXCJRdWFudGl0eUFycmF5XCIsXG4gIFwiUXVhbnRpdHlEaXN0cmlidXRpb25cIixcbiAgXCJRdWFudGl0eUZvcm1cIixcbiAgXCJRdWFudGl0eU1hZ25pdHVkZVwiLFxuICBcIlF1YW50aXR5UVwiLFxuICBcIlF1YW50aXR5VW5pdFwiLFxuICBcIlF1YW50aXR5VmFyaWFibGVcIixcbiAgXCJRdWFudGl0eVZhcmlhYmxlQ2Fub25pY2FsVW5pdFwiLFxuICBcIlF1YW50aXR5VmFyaWFibGVEaW1lbnNpb25zXCIsXG4gIFwiUXVhbnRpdHlWYXJpYWJsZUlkZW50aWZpZXJcIixcbiAgXCJRdWFudGl0eVZhcmlhYmxlUGh5c2ljYWxRdWFudGl0eVwiLFxuICBcIlF1YXJ0aWNzXCIsXG4gIFwiUXVhcnRpbGVEZXZpYXRpb25cIixcbiAgXCJRdWFydGlsZXNcIixcbiAgXCJRdWFydGlsZVNrZXduZXNzXCIsXG4gIFwiUXVlcnlcIixcbiAgXCJRdWV1ZWluZ05ldHdvcmtQcm9jZXNzXCIsXG4gIFwiUXVldWVpbmdQcm9jZXNzXCIsXG4gIFwiUXVldWVQcm9wZXJ0aWVzXCIsXG4gIFwiUXVpZXRcIixcbiAgXCJRdWl0XCIsXG4gIFwiUXVvdGllbnRcIixcbiAgXCJRdW90aWVudFJlbWFpbmRlclwiLFxuICBcIlJhZGlhbEdyYWRpZW50SW1hZ2VcIixcbiAgXCJSYWRpYWxpdHlDZW50cmFsaXR5XCIsXG4gIFwiUmFkaWNhbEJveFwiLFxuICBcIlJhZGljYWxCb3hPcHRpb25zXCIsXG4gIFwiUmFkaW9CdXR0b25cIixcbiAgXCJSYWRpb0J1dHRvbkJhclwiLFxuICBcIlJhZGlvQnV0dG9uQm94XCIsXG4gIFwiUmFkaW9CdXR0b25Cb3hPcHRpb25zXCIsXG4gIFwiUmFkb25cIixcbiAgXCJSYWRvblRyYW5zZm9ybVwiLFxuICBcIlJhbWFudWphblRhdVwiLFxuICBcIlJhbWFudWphblRhdUxcIixcbiAgXCJSYW1hbnVqYW5UYXVUaGV0YVwiLFxuICBcIlJhbWFudWphblRhdVpcIixcbiAgXCJSYW1wXCIsXG4gIFwiUmFuZG9tXCIsXG4gIFwiUmFuZG9tQ2hvaWNlXCIsXG4gIFwiUmFuZG9tQ29sb3JcIixcbiAgXCJSYW5kb21Db21wbGV4XCIsXG4gIFwiUmFuZG9tRW50aXR5XCIsXG4gIFwiUmFuZG9tRnVuY3Rpb25cIixcbiAgXCJSYW5kb21HZW9Qb3NpdGlvblwiLFxuICBcIlJhbmRvbUdyYXBoXCIsXG4gIFwiUmFuZG9tSW1hZ2VcIixcbiAgXCJSYW5kb21JbnN0YW5jZVwiLFxuICBcIlJhbmRvbUludGVnZXJcIixcbiAgXCJSYW5kb21QZXJtdXRhdGlvblwiLFxuICBcIlJhbmRvbVBvaW50XCIsXG4gIFwiUmFuZG9tUG9seWdvblwiLFxuICBcIlJhbmRvbVBvbHloZWRyb25cIixcbiAgXCJSYW5kb21QcmltZVwiLFxuICBcIlJhbmRvbVJlYWxcIixcbiAgXCJSYW5kb21TYW1wbGVcIixcbiAgXCJSYW5kb21TZWVkXCIsXG4gIFwiUmFuZG9tU2VlZGluZ1wiLFxuICBcIlJhbmRvbVZhcmlhdGVcIixcbiAgXCJSYW5kb21XYWxrUHJvY2Vzc1wiLFxuICBcIlJhbmRvbVdvcmRcIixcbiAgXCJSYW5nZVwiLFxuICBcIlJhbmdlRmlsdGVyXCIsXG4gIFwiUmFuZ2VTcGVjaWZpY2F0aW9uXCIsXG4gIFwiUmFua2VkTWF4XCIsXG4gIFwiUmFua2VkTWluXCIsXG4gIFwiUmFyZXJQcm9iYWJpbGl0eVwiLFxuICBcIlJhc3RlclwiLFxuICBcIlJhc3RlcjNEXCIsXG4gIFwiUmFzdGVyM0RCb3hcIixcbiAgXCJSYXN0ZXIzREJveE9wdGlvbnNcIixcbiAgXCJSYXN0ZXJBcnJheVwiLFxuICBcIlJhc3RlckJveFwiLFxuICBcIlJhc3RlckJveE9wdGlvbnNcIixcbiAgXCJSYXN0ZXJpemVcIixcbiAgXCJSYXN0ZXJTaXplXCIsXG4gIFwiUmF0aW9uYWxcIixcbiAgXCJSYXRpb25hbEZ1bmN0aW9uc1wiLFxuICBcIlJhdGlvbmFsaXplXCIsXG4gIFwiUmF0aW9uYWxzXCIsXG4gIFwiUmF0aW9zXCIsXG4gIFwiUmF3QXJyYXlcIixcbiAgXCJSYXdCb3hlc1wiLFxuICBcIlJhd0RhdGFcIixcbiAgXCJSYXdNZWRpdW1cIixcbiAgXCJSYXlsZWlnaERpc3RyaWJ1dGlvblwiLFxuICBcIlJlXCIsXG4gIFwiUmVhZFwiLFxuICBcIlJlYWRCeXRlQXJyYXlcIixcbiAgXCJSZWFkTGluZVwiLFxuICBcIlJlYWRMaXN0XCIsXG4gIFwiUmVhZFByb3RlY3RlZFwiLFxuICBcIlJlYWRTdHJpbmdcIixcbiAgXCJSZWFsXCIsXG4gIFwiUmVhbEFic1wiLFxuICBcIlJlYWxCbG9ja0RpYWdvbmFsRm9ybVwiLFxuICBcIlJlYWxEaWdpdHNcIixcbiAgXCJSZWFsRXhwb25lbnRcIixcbiAgXCJSZWFsc1wiLFxuICBcIlJlYWxTaWduXCIsXG4gIFwiUmVhcFwiLFxuICBcIlJlYnVpbGRQYWNsZXREYXRhXCIsXG4gIFwiUmVjb2duaXRpb25QcmlvclwiLFxuICBcIlJlY29nbml0aW9uVGhyZXNob2xkXCIsXG4gIFwiUmVjb3JkXCIsXG4gIFwiUmVjb3JkTGlzdHNcIixcbiAgXCJSZWNvcmRTZXBhcmF0b3JzXCIsXG4gIFwiUmVjdGFuZ2xlXCIsXG4gIFwiUmVjdGFuZ2xlQm94XCIsXG4gIFwiUmVjdGFuZ2xlQm94T3B0aW9uc1wiLFxuICBcIlJlY3RhbmdsZUNoYXJ0XCIsXG4gIFwiUmVjdGFuZ2xlQ2hhcnQzRFwiLFxuICBcIlJlY3Rhbmd1bGFyUmVwZWF0aW5nRWxlbWVudFwiLFxuICBcIlJlY3VycmVuY2VGaWx0ZXJcIixcbiAgXCJSZWN1cnJlbmNlVGFibGVcIixcbiAgXCJSZWN1cnJpbmdEaWdpdHNGb3JtXCIsXG4gIFwiUmVkXCIsXG4gIFwiUmVkdWNlXCIsXG4gIFwiUmVmQm94XCIsXG4gIFwiUmVmZXJlbmNlTGluZVN0eWxlXCIsXG4gIFwiUmVmZXJlbmNlTWFya2Vyc1wiLFxuICBcIlJlZmVyZW5jZU1hcmtlclN0eWxlXCIsXG4gIFwiUmVmaW5lXCIsXG4gIFwiUmVmbGVjdGlvbk1hdHJpeFwiLFxuICBcIlJlZmxlY3Rpb25UcmFuc2Zvcm1cIixcbiAgXCJSZWZyZXNoXCIsXG4gIFwiUmVmcmVzaFJhdGVcIixcbiAgXCJSZWdpb25cIixcbiAgXCJSZWdpb25CaW5hcml6ZVwiLFxuICBcIlJlZ2lvbkJvdW5kYXJ5XCIsXG4gIFwiUmVnaW9uQm91bmRhcnlTdHlsZVwiLFxuICBcIlJlZ2lvbkJvdW5kc1wiLFxuICBcIlJlZ2lvbkNlbnRyb2lkXCIsXG4gIFwiUmVnaW9uRGlmZmVyZW5jZVwiLFxuICBcIlJlZ2lvbkRpbWVuc2lvblwiLFxuICBcIlJlZ2lvbkRpc2pvaW50XCIsXG4gIFwiUmVnaW9uRGlzdGFuY2VcIixcbiAgXCJSZWdpb25EaXN0YW5jZUZ1bmN0aW9uXCIsXG4gIFwiUmVnaW9uRW1iZWRkaW5nRGltZW5zaW9uXCIsXG4gIFwiUmVnaW9uRXF1YWxcIixcbiAgXCJSZWdpb25GaWxsaW5nU3R5bGVcIixcbiAgXCJSZWdpb25GdW5jdGlvblwiLFxuICBcIlJlZ2lvbkltYWdlXCIsXG4gIFwiUmVnaW9uSW50ZXJzZWN0aW9uXCIsXG4gIFwiUmVnaW9uTWVhc3VyZVwiLFxuICBcIlJlZ2lvbk1lbWJlclwiLFxuICBcIlJlZ2lvbk1lbWJlckZ1bmN0aW9uXCIsXG4gIFwiUmVnaW9uTW9tZW50XCIsXG4gIFwiUmVnaW9uTmVhcmVzdFwiLFxuICBcIlJlZ2lvbk5lYXJlc3RGdW5jdGlvblwiLFxuICBcIlJlZ2lvblBsb3RcIixcbiAgXCJSZWdpb25QbG90M0RcIixcbiAgXCJSZWdpb25Qcm9kdWN0XCIsXG4gIFwiUmVnaW9uUVwiLFxuICBcIlJlZ2lvblJlc2l6ZVwiLFxuICBcIlJlZ2lvblNpemVcIixcbiAgXCJSZWdpb25TeW1tZXRyaWNEaWZmZXJlbmNlXCIsXG4gIFwiUmVnaW9uVW5pb25cIixcbiAgXCJSZWdpb25XaXRoaW5cIixcbiAgXCJSZWdpc3RlckV4dGVybmFsRXZhbHVhdG9yXCIsXG4gIFwiUmVndWxhckV4cHJlc3Npb25cIixcbiAgXCJSZWd1bGFyaXphdGlvblwiLFxuICBcIlJlZ3VsYXJseVNhbXBsZWRRXCIsXG4gIFwiUmVndWxhclBvbHlnb25cIixcbiAgXCJSZUltXCIsXG4gIFwiUmVJbUxhYmVsc1wiLFxuICBcIlJlSW1QbG90XCIsXG4gIFwiUmVJbVN0eWxlXCIsXG4gIFwiUmVpbnN0YWxsXCIsXG4gIFwiUmVsYXRpb25hbERhdGFiYXNlXCIsXG4gIFwiUmVsYXRpb25HcmFwaFwiLFxuICBcIlJlbGVhc2VcIixcbiAgXCJSZWxlYXNlSG9sZFwiLFxuICBcIlJlbGlhYmlsaXR5RGlzdHJpYnV0aW9uXCIsXG4gIFwiUmVsaWVmSW1hZ2VcIixcbiAgXCJSZWxpZWZQbG90XCIsXG4gIFwiUmVtb3RlQXV0aG9yaXphdGlvbkNhY2hpbmdcIixcbiAgXCJSZW1vdGVDb25uZWN0XCIsXG4gIFwiUmVtb3RlQ29ubmVjdGlvbk9iamVjdFwiLFxuICBcIlJlbW90ZUZpbGVcIixcbiAgXCJSZW1vdGVSdW5cIixcbiAgXCJSZW1vdGVSdW5Qcm9jZXNzXCIsXG4gIFwiUmVtb3ZlXCIsXG4gIFwiUmVtb3ZlQWxwaGFDaGFubmVsXCIsXG4gIFwiUmVtb3ZlQXN5bmNocm9ub3VzVGFza1wiLFxuICBcIlJlbW92ZUF1ZGlvU3RyZWFtXCIsXG4gIFwiUmVtb3ZlQmFja2dyb3VuZFwiLFxuICBcIlJlbW92ZUNoYW5uZWxMaXN0ZW5lclwiLFxuICBcIlJlbW92ZUNoYW5uZWxTdWJzY3JpYmVyc1wiLFxuICBcIlJlbW92ZWRcIixcbiAgXCJSZW1vdmVEaWFjcml0aWNzXCIsXG4gIFwiUmVtb3ZlSW5wdXRTdHJlYW1NZXRob2RcIixcbiAgXCJSZW1vdmVPdXRwdXRTdHJlYW1NZXRob2RcIixcbiAgXCJSZW1vdmVQcm9wZXJ0eVwiLFxuICBcIlJlbW92ZVNjaGVkdWxlZFRhc2tcIixcbiAgXCJSZW1vdmVVc2Vyc1wiLFxuICBcIlJlbW92ZVZpZGVvU3RyZWFtXCIsXG4gIFwiUmVuYW1lRGlyZWN0b3J5XCIsXG4gIFwiUmVuYW1lRmlsZVwiLFxuICBcIlJlbmRlckFsbFwiLFxuICBcIlJlbmRlcmluZ09wdGlvbnNcIixcbiAgXCJSZW5ld2FsUHJvY2Vzc1wiLFxuICBcIlJlbmtvQ2hhcnRcIixcbiAgXCJSZXBhaXJNZXNoXCIsXG4gIFwiUmVwZWF0ZWRcIixcbiAgXCJSZXBlYXRlZE51bGxcIixcbiAgXCJSZXBlYXRlZFN0cmluZ1wiLFxuICBcIlJlcGVhdGVkVGltaW5nXCIsXG4gIFwiUmVwZWF0aW5nRWxlbWVudFwiLFxuICBcIlJlcGxhY2VcIixcbiAgXCJSZXBsYWNlQWxsXCIsXG4gIFwiUmVwbGFjZUhlbGRQYXJ0XCIsXG4gIFwiUmVwbGFjZUltYWdlVmFsdWVcIixcbiAgXCJSZXBsYWNlTGlzdFwiLFxuICBcIlJlcGxhY2VQYXJ0XCIsXG4gIFwiUmVwbGFjZVBpeGVsVmFsdWVcIixcbiAgXCJSZXBsYWNlUmVwZWF0ZWRcIixcbiAgXCJSZXBsaWNhdGVMYXllclwiLFxuICBcIlJlcXVpcmVkUGh5c2ljYWxRdWFudGl0aWVzXCIsXG4gIFwiUmVzYW1wbGluZ1wiLFxuICBcIlJlc2FtcGxpbmdBbGdvcml0aG1EYXRhXCIsXG4gIFwiUmVzYW1wbGluZ01ldGhvZFwiLFxuICBcIlJlc2NhbGVcIixcbiAgXCJSZXNjYWxpbmdUcmFuc2Zvcm1cIixcbiAgXCJSZXNldERpcmVjdG9yeVwiLFxuICBcIlJlc2V0TWVudXNQYWNrZXRcIixcbiAgXCJSZXNldFNjaGVkdWxlZFRhc2tcIixcbiAgXCJSZXNoYXBlTGF5ZXJcIixcbiAgXCJSZXNpZHVlXCIsXG4gIFwiUmVzaXplTGF5ZXJcIixcbiAgXCJSZXNvbHZlXCIsXG4gIFwiUmVzb3VyY2VBY3F1aXJlXCIsXG4gIFwiUmVzb3VyY2VEYXRhXCIsXG4gIFwiUmVzb3VyY2VGdW5jdGlvblwiLFxuICBcIlJlc291cmNlT2JqZWN0XCIsXG4gIFwiUmVzb3VyY2VSZWdpc3RlclwiLFxuICBcIlJlc291cmNlUmVtb3ZlXCIsXG4gIFwiUmVzb3VyY2VTZWFyY2hcIixcbiAgXCJSZXNvdXJjZVN1Ym1pc3Npb25PYmplY3RcIixcbiAgXCJSZXNvdXJjZVN1Ym1pdFwiLFxuICBcIlJlc291cmNlU3lzdGVtQmFzZVwiLFxuICBcIlJlc291cmNlU3lzdGVtUGF0aFwiLFxuICBcIlJlc291cmNlVXBkYXRlXCIsXG4gIFwiUmVzb3VyY2VWZXJzaW9uXCIsXG4gIFwiUmVzcG9uc2VGb3JtXCIsXG4gIFwiUmVzdFwiLFxuICBcIlJlc3RhcnRJbnRlcnZhbFwiLFxuICBcIlJlc3RyaWN0ZWRcIixcbiAgXCJSZXN1bHRhbnRcIixcbiAgXCJSZXN1bWVQYWNrZXRcIixcbiAgXCJSZXR1cm5cIixcbiAgXCJSZXR1cm5FbnRlcnNJbnB1dFwiLFxuICBcIlJldHVybkV4cHJlc3Npb25QYWNrZXRcIixcbiAgXCJSZXR1cm5JbnB1dEZvcm1QYWNrZXRcIixcbiAgXCJSZXR1cm5QYWNrZXRcIixcbiAgXCJSZXR1cm5SZWNlaXB0RnVuY3Rpb25cIixcbiAgXCJSZXR1cm5UZXh0UGFja2V0XCIsXG4gIFwiUmV2ZXJzZVwiLFxuICBcIlJldmVyc2VBcHBsaWVkXCIsXG4gIFwiUmV2ZXJzZUJpb3J0aG9nb25hbFNwbGluZVdhdmVsZXRcIixcbiAgXCJSZXZlcnNlRWxlbWVudFwiLFxuICBcIlJldmVyc2VFcXVpbGlicml1bVwiLFxuICBcIlJldmVyc2VHcmFwaFwiLFxuICBcIlJldmVyc2VTb3J0XCIsXG4gIFwiUmV2ZXJzZVNvcnRCeVwiLFxuICBcIlJldmVyc2VVcEVxdWlsaWJyaXVtXCIsXG4gIFwiUmV2b2x1dGlvbkF4aXNcIixcbiAgXCJSZXZvbHV0aW9uUGxvdDNEXCIsXG4gIFwiUkdCQ29sb3JcIixcbiAgXCJSaWNjYXRpU29sdmVcIixcbiAgXCJSaWNlRGlzdHJpYnV0aW9uXCIsXG4gIFwiUmlkZ2VGaWx0ZXJcIixcbiAgXCJSaWVtYW5uUlwiLFxuICBcIlJpZW1hbm5TaWVnZWxUaGV0YVwiLFxuICBcIlJpZW1hbm5TaWVnZWxaXCIsXG4gIFwiUmllbWFublhpXCIsXG4gIFwiUmlmZmxlXCIsXG4gIFwiUmlnaHRcIixcbiAgXCJSaWdodEFycm93XCIsXG4gIFwiUmlnaHRBcnJvd0JhclwiLFxuICBcIlJpZ2h0QXJyb3dMZWZ0QXJyb3dcIixcbiAgXCJSaWdodENvbXBvc2l0aW9uXCIsXG4gIFwiUmlnaHRDb3NldFJlcHJlc2VudGF0aXZlXCIsXG4gIFwiUmlnaHREb3duVGVlVmVjdG9yXCIsXG4gIFwiUmlnaHREb3duVmVjdG9yXCIsXG4gIFwiUmlnaHREb3duVmVjdG9yQmFyXCIsXG4gIFwiUmlnaHRUZWVcIixcbiAgXCJSaWdodFRlZUFycm93XCIsXG4gIFwiUmlnaHRUZWVWZWN0b3JcIixcbiAgXCJSaWdodFRyaWFuZ2xlXCIsXG4gIFwiUmlnaHRUcmlhbmdsZUJhclwiLFxuICBcIlJpZ2h0VHJpYW5nbGVFcXVhbFwiLFxuICBcIlJpZ2h0VXBEb3duVmVjdG9yXCIsXG4gIFwiUmlnaHRVcFRlZVZlY3RvclwiLFxuICBcIlJpZ2h0VXBWZWN0b3JcIixcbiAgXCJSaWdodFVwVmVjdG9yQmFyXCIsXG4gIFwiUmlnaHRWZWN0b3JcIixcbiAgXCJSaWdodFZlY3RvckJhclwiLFxuICBcIlJpc2tBY2hpZXZlbWVudEltcG9ydGFuY2VcIixcbiAgXCJSaXNrUmVkdWN0aW9uSW1wb3J0YW5jZVwiLFxuICBcIlJvZ2Vyc1Rhbmltb3RvRGlzc2ltaWxhcml0eVwiLFxuICBcIlJvbGxQaXRjaFlhd0FuZ2xlc1wiLFxuICBcIlJvbGxQaXRjaFlhd01hdHJpeFwiLFxuICBcIlJvbWFuTnVtZXJhbFwiLFxuICBcIlJvb3RcIixcbiAgXCJSb290QXBwcm94aW1hbnRcIixcbiAgXCJSb290SW50ZXJ2YWxzXCIsXG4gIFwiUm9vdExvY3VzUGxvdFwiLFxuICBcIlJvb3RNZWFuU3F1YXJlXCIsXG4gIFwiUm9vdE9mVW5pdHlRXCIsXG4gIFwiUm9vdFJlZHVjZVwiLFxuICBcIlJvb3RzXCIsXG4gIFwiUm9vdFN1bVwiLFxuICBcIlJvdGF0ZVwiLFxuICBcIlJvdGF0ZUxhYmVsXCIsXG4gIFwiUm90YXRlTGVmdFwiLFxuICBcIlJvdGF0ZVJpZ2h0XCIsXG4gIFwiUm90YXRpb25BY3Rpb25cIixcbiAgXCJSb3RhdGlvbkJveFwiLFxuICBcIlJvdGF0aW9uQm94T3B0aW9uc1wiLFxuICBcIlJvdGF0aW9uTWF0cml4XCIsXG4gIFwiUm90YXRpb25UcmFuc2Zvcm1cIixcbiAgXCJSb3VuZFwiLFxuICBcIlJvdW5kSW1wbGllc1wiLFxuICBcIlJvdW5kaW5nUmFkaXVzXCIsXG4gIFwiUm93XCIsXG4gIFwiUm93QWxpZ25tZW50c1wiLFxuICBcIlJvd0JhY2tncm91bmRzXCIsXG4gIFwiUm93Qm94XCIsXG4gIFwiUm93SGVpZ2h0c1wiLFxuICBcIlJvd0xpbmVzXCIsXG4gIFwiUm93TWluSGVpZ2h0XCIsXG4gIFwiUm93UmVkdWNlXCIsXG4gIFwiUm93c0VxdWFsXCIsXG4gIFwiUm93U3BhY2luZ3NcIixcbiAgXCJSU29sdmVcIixcbiAgXCJSU29sdmVWYWx1ZVwiLFxuICBcIlJ1ZGluU2hhcGlyb1wiLFxuICBcIlJ1ZHZhbGlzR3JvdXBSdVwiLFxuICBcIlJ1bGVcIixcbiAgXCJSdWxlQ29uZGl0aW9uXCIsXG4gIFwiUnVsZURlbGF5ZWRcIixcbiAgXCJSdWxlRm9ybVwiLFxuICBcIlJ1bGVQbG90XCIsXG4gIFwiUnVsZXJVbml0c1wiLFxuICBcIlJ1blwiLFxuICBcIlJ1blByb2Nlc3NcIixcbiAgXCJSdW5TY2hlZHVsZWRUYXNrXCIsXG4gIFwiUnVuVGhyb3VnaFwiLFxuICBcIlJ1bnRpbWVBdHRyaWJ1dGVzXCIsXG4gIFwiUnVudGltZU9wdGlvbnNcIixcbiAgXCJSdXNzZWxsUmFvRGlzc2ltaWxhcml0eVwiLFxuICBcIlNhbWVRXCIsXG4gIFwiU2FtZVRlc3RcIixcbiAgXCJTYW1lVGVzdFByb3BlcnRpZXNcIixcbiAgXCJTYW1wbGVkRW50aXR5Q2xhc3NcIixcbiAgXCJTYW1wbGVEZXB0aFwiLFxuICBcIlNhbXBsZWRTb3VuZEZ1bmN0aW9uXCIsXG4gIFwiU2FtcGxlZFNvdW5kTGlzdFwiLFxuICBcIlNhbXBsZVJhdGVcIixcbiAgXCJTYW1wbGluZ1BlcmlvZFwiLFxuICBcIlNBUklNQVByb2Nlc3NcIixcbiAgXCJTQVJNQVByb2Nlc3NcIixcbiAgXCJTQVNUcmlhbmdsZVwiLFxuICBcIlNhdGVsbGl0ZURhdGFcIixcbiAgXCJTYXRpc2ZpYWJpbGl0eUNvdW50XCIsXG4gIFwiU2F0aXNmaWFiaWxpdHlJbnN0YW5jZXNcIixcbiAgXCJTYXRpc2ZpYWJsZVFcIixcbiAgXCJTYXR1cmRheVwiLFxuICBcIlNhdmVcIixcbiAgXCJTYXZlYWJsZVwiLFxuICBcIlNhdmVBdXRvRGVsZXRlXCIsXG4gIFwiU2F2ZUNvbm5lY3Rpb25cIixcbiAgXCJTYXZlRGVmaW5pdGlvbnNcIixcbiAgXCJTYXZpdHpreUdvbGF5TWF0cml4XCIsXG4gIFwiU2F3dG9vdGhXYXZlXCIsXG4gIFwiU2NhbGVcIixcbiAgXCJTY2FsZWRcIixcbiAgXCJTY2FsZURpdmlzaW9uc1wiLFxuICBcIlNjYWxlZE1vdXNlUG9zaXRpb25cIixcbiAgXCJTY2FsZU9yaWdpblwiLFxuICBcIlNjYWxlUGFkZGluZ1wiLFxuICBcIlNjYWxlUmFuZ2VzXCIsXG4gIFwiU2NhbGVSYW5nZVN0eWxlXCIsXG4gIFwiU2NhbGluZ0Z1bmN0aW9uc1wiLFxuICBcIlNjYWxpbmdNYXRyaXhcIixcbiAgXCJTY2FsaW5nVHJhbnNmb3JtXCIsXG4gIFwiU2NhblwiLFxuICBcIlNjaGVkdWxlZFRhc2tcIixcbiAgXCJTY2hlZHVsZWRUYXNrQWN0aXZlUVwiLFxuICBcIlNjaGVkdWxlZFRhc2tJbmZvcm1hdGlvblwiLFxuICBcIlNjaGVkdWxlZFRhc2tJbmZvcm1hdGlvbkRhdGFcIixcbiAgXCJTY2hlZHVsZWRUYXNrT2JqZWN0XCIsXG4gIFwiU2NoZWR1bGVkVGFza3NcIixcbiAgXCJTY2h1ckRlY29tcG9zaXRpb25cIixcbiAgXCJTY2llbnRpZmljRm9ybVwiLFxuICBcIlNjaWVudGlmaWNOb3RhdGlvblRocmVzaG9sZFwiLFxuICBcIlNjb3JlckdpXCIsXG4gIFwiU2NvcmVyR2lQcmltZVwiLFxuICBcIlNjb3JlckhpXCIsXG4gIFwiU2NvcmVySGlQcmltZVwiLFxuICBcIlNjcmVlblJlY3RhbmdsZVwiLFxuICBcIlNjcmVlblN0eWxlRW52aXJvbm1lbnRcIixcbiAgXCJTY3JpcHRCYXNlbGluZVNoaWZ0c1wiLFxuICBcIlNjcmlwdEZvcm1cIixcbiAgXCJTY3JpcHRMZXZlbFwiLFxuICBcIlNjcmlwdE1pblNpemVcIixcbiAgXCJTY3JpcHRSdWxlc1wiLFxuICBcIlNjcmlwdFNpemVNdWx0aXBsaWVyc1wiLFxuICBcIlNjcm9sbGJhcnNcIixcbiAgXCJTY3JvbGxpbmdPcHRpb25zXCIsXG4gIFwiU2Nyb2xsUG9zaXRpb25cIixcbiAgXCJTZWFyY2hBZGp1c3RtZW50XCIsXG4gIFwiU2VhcmNoSW5kZXhPYmplY3RcIixcbiAgXCJTZWFyY2hJbmRpY2VzXCIsXG4gIFwiU2VhcmNoUXVlcnlTdHJpbmdcIixcbiAgXCJTZWFyY2hSZXN1bHRPYmplY3RcIixcbiAgXCJTZWNcIixcbiAgXCJTZWNoXCIsXG4gIFwiU2VjaERpc3RyaWJ1dGlvblwiLFxuICBcIlNlY29uZE9yZGVyQ29uZU9wdGltaXphdGlvblwiLFxuICBcIlNlY3Rpb25Hcm91cGluZ1wiLFxuICBcIlNlY3RvckNoYXJ0XCIsXG4gIFwiU2VjdG9yQ2hhcnQzRFwiLFxuICBcIlNlY3Rvck9yaWdpblwiLFxuICBcIlNlY3RvclNwYWNpbmdcIixcbiAgXCJTZWN1cmVkQXV0aGVudGljYXRpb25LZXlcIixcbiAgXCJTZWN1cmVkQXV0aGVudGljYXRpb25LZXlzXCIsXG4gIFwiU2VlZFJhbmRvbVwiLFxuICBcIlNlbGVjdFwiLFxuICBcIlNlbGVjdGFibGVcIixcbiAgXCJTZWxlY3RDb21wb25lbnRzXCIsXG4gIFwiU2VsZWN0ZWRDZWxsc1wiLFxuICBcIlNlbGVjdGVkTm90ZWJvb2tcIixcbiAgXCJTZWxlY3RGaXJzdFwiLFxuICBcIlNlbGVjdGlvblwiLFxuICBcIlNlbGVjdGlvbkFuaW1hdGVcIixcbiAgXCJTZWxlY3Rpb25DZWxsXCIsXG4gIFwiU2VsZWN0aW9uQ2VsbENyZWF0ZUNlbGxcIixcbiAgXCJTZWxlY3Rpb25DZWxsRGVmYXVsdFN0eWxlXCIsXG4gIFwiU2VsZWN0aW9uQ2VsbFBhcmVudFN0eWxlXCIsXG4gIFwiU2VsZWN0aW9uQ3JlYXRlQ2VsbFwiLFxuICBcIlNlbGVjdGlvbkRlYnVnZ2VyVGFnXCIsXG4gIFwiU2VsZWN0aW9uRHVwbGljYXRlQ2VsbFwiLFxuICBcIlNlbGVjdGlvbkV2YWx1YXRlXCIsXG4gIFwiU2VsZWN0aW9uRXZhbHVhdGVDcmVhdGVDZWxsXCIsXG4gIFwiU2VsZWN0aW9uTW92ZVwiLFxuICBcIlNlbGVjdGlvblBsYWNlaG9sZGVyXCIsXG4gIFwiU2VsZWN0aW9uU2V0U3R5bGVcIixcbiAgXCJTZWxlY3RXaXRoQ29udGVudHNcIixcbiAgXCJTZWxmTG9vcHNcIixcbiAgXCJTZWxmTG9vcFN0eWxlXCIsXG4gIFwiU2VtYW50aWNJbXBvcnRcIixcbiAgXCJTZW1hbnRpY0ltcG9ydFN0cmluZ1wiLFxuICBcIlNlbWFudGljSW50ZXJwcmV0YXRpb25cIixcbiAgXCJTZW1pYWxnZWJyYWljQ29tcG9uZW50SW5zdGFuY2VzXCIsXG4gIFwiU2VtaWRlZmluaXRlT3B0aW1pemF0aW9uXCIsXG4gIFwiU2VuZE1haWxcIixcbiAgXCJTZW5kTWVzc2FnZVwiLFxuICBcIlNlcXVlbmNlXCIsXG4gIFwiU2VxdWVuY2VBbGlnbm1lbnRcIixcbiAgXCJTZXF1ZW5jZUF0dGVudGlvbkxheWVyXCIsXG4gIFwiU2VxdWVuY2VDYXNlc1wiLFxuICBcIlNlcXVlbmNlQ291bnRcIixcbiAgXCJTZXF1ZW5jZUZvbGRcIixcbiAgXCJTZXF1ZW5jZUZvbGRMaXN0XCIsXG4gIFwiU2VxdWVuY2VGb3JtXCIsXG4gIFwiU2VxdWVuY2VIb2xkXCIsXG4gIFwiU2VxdWVuY2VMYXN0TGF5ZXJcIixcbiAgXCJTZXF1ZW5jZU1vc3RMYXllclwiLFxuICBcIlNlcXVlbmNlUG9zaXRpb25cIixcbiAgXCJTZXF1ZW5jZVByZWRpY3RcIixcbiAgXCJTZXF1ZW5jZVByZWRpY3RvckZ1bmN0aW9uXCIsXG4gIFwiU2VxdWVuY2VSZXBsYWNlXCIsXG4gIFwiU2VxdWVuY2VSZXN0TGF5ZXJcIixcbiAgXCJTZXF1ZW5jZVJldmVyc2VMYXllclwiLFxuICBcIlNlcXVlbmNlU3BsaXRcIixcbiAgXCJTZXJpZXNcIixcbiAgXCJTZXJpZXNDb2VmZmljaWVudFwiLFxuICBcIlNlcmllc0RhdGFcIixcbiAgXCJTZXJpZXNUZXJtR29hbFwiLFxuICBcIlNlcnZpY2VDb25uZWN0XCIsXG4gIFwiU2VydmljZURpc2Nvbm5lY3RcIixcbiAgXCJTZXJ2aWNlRXhlY3V0ZVwiLFxuICBcIlNlcnZpY2VPYmplY3RcIixcbiAgXCJTZXJ2aWNlUmVxdWVzdFwiLFxuICBcIlNlcnZpY2VSZXNwb25zZVwiLFxuICBcIlNlcnZpY2VTdWJtaXRcIixcbiAgXCJTZXNzaW9uU3VibWl0XCIsXG4gIFwiU2Vzc2lvblRpbWVcIixcbiAgXCJTZXRcIixcbiAgXCJTZXRBY2N1cmFjeVwiLFxuICBcIlNldEFscGhhQ2hhbm5lbFwiLFxuICBcIlNldEF0dHJpYnV0ZXNcIixcbiAgXCJTZXRiYWNrc1wiLFxuICBcIlNldEJveEZvcm1OYW1lc1BhY2tldFwiLFxuICBcIlNldENsb3VkRGlyZWN0b3J5XCIsXG4gIFwiU2V0Q29va2llc1wiLFxuICBcIlNldERlbGF5ZWRcIixcbiAgXCJTZXREaXJlY3RvcnlcIixcbiAgXCJTZXRFbnZpcm9ubWVudFwiLFxuICBcIlNldEV2YWx1YXRpb25Ob3RlYm9va1wiLFxuICBcIlNldEZpbGVEYXRlXCIsXG4gIFwiU2V0RmlsZUxvYWRpbmdDb250ZXh0XCIsXG4gIFwiU2V0Tm90ZWJvb2tTdGF0dXNMaW5lXCIsXG4gIFwiU2V0T3B0aW9uc1wiLFxuICBcIlNldE9wdGlvbnNQYWNrZXRcIixcbiAgXCJTZXRQZXJtaXNzaW9uc1wiLFxuICBcIlNldFByZWNpc2lvblwiLFxuICBcIlNldFByb3BlcnR5XCIsXG4gIFwiU2V0U2VjdXJlZEF1dGhlbnRpY2F0aW9uS2V5XCIsXG4gIFwiU2V0U2VsZWN0ZWROb3RlYm9va1wiLFxuICBcIlNldFNoYXJlZEZ1bmN0aW9uXCIsXG4gIFwiU2V0U2hhcmVkVmFyaWFibGVcIixcbiAgXCJTZXRTcGVlY2hQYXJhbWV0ZXJzUGFja2V0XCIsXG4gIFwiU2V0U3RyZWFtUG9zaXRpb25cIixcbiAgXCJTZXRTeXN0ZW1Nb2RlbFwiLFxuICBcIlNldFN5c3RlbU9wdGlvbnNcIixcbiAgXCJTZXR0ZXJcIixcbiAgXCJTZXR0ZXJCYXJcIixcbiAgXCJTZXR0ZXJCb3hcIixcbiAgXCJTZXR0ZXJCb3hPcHRpb25zXCIsXG4gIFwiU2V0dGluZ1wiLFxuICBcIlNldFVzZXJzXCIsXG4gIFwiU2V0VmFsdWVcIixcbiAgXCJTaGFkaW5nXCIsXG4gIFwiU2hhbGxvd1wiLFxuICBcIlNoYW5ub25XYXZlbGV0XCIsXG4gIFwiU2hhcGlyb1dpbGtUZXN0XCIsXG4gIFwiU2hhcmVcIixcbiAgXCJTaGFyaW5nTGlzdFwiLFxuICBcIlNoYXJwZW5cIixcbiAgXCJTaGVhcmluZ01hdHJpeFwiLFxuICBcIlNoZWFyaW5nVHJhbnNmb3JtXCIsXG4gIFwiU2hlbGxSZWdpb25cIixcbiAgXCJTaGVuQ2FzdGFuTWF0cml4XCIsXG4gIFwiU2hpZnRlZEdvbXBlcnR6RGlzdHJpYnV0aW9uXCIsXG4gIFwiU2hpZnRSZWdpc3RlclNlcXVlbmNlXCIsXG4gIFwiU2hvcnRcIixcbiAgXCJTaG9ydERvd25BcnJvd1wiLFxuICBcIlNob3J0ZXN0XCIsXG4gIFwiU2hvcnRlc3RNYXRjaFwiLFxuICBcIlNob3J0ZXN0UGF0aEZ1bmN0aW9uXCIsXG4gIFwiU2hvcnRMZWZ0QXJyb3dcIixcbiAgXCJTaG9ydFJpZ2h0QXJyb3dcIixcbiAgXCJTaG9ydFRpbWVGb3VyaWVyXCIsXG4gIFwiU2hvcnRUaW1lRm91cmllckRhdGFcIixcbiAgXCJTaG9ydFVwQXJyb3dcIixcbiAgXCJTaG93XCIsXG4gIFwiU2hvd0F1dG9Db252ZXJ0XCIsXG4gIFwiU2hvd0F1dG9TcGVsbENoZWNrXCIsXG4gIFwiU2hvd0F1dG9TdHlsZXNcIixcbiAgXCJTaG93Q2VsbEJyYWNrZXRcIixcbiAgXCJTaG93Q2VsbExhYmVsXCIsXG4gIFwiU2hvd0NlbGxUYWdzXCIsXG4gIFwiU2hvd0Nsb3NlZENlbGxBcmVhXCIsXG4gIFwiU2hvd0NvZGVBc3Npc3RcIixcbiAgXCJTaG93Q29udGVudHNcIixcbiAgXCJTaG93Q29udHJvbHNcIixcbiAgXCJTaG93Q3Vyc29yVHJhY2tlclwiLFxuICBcIlNob3dHcm91cE9wZW5DbG9zZUljb25cIixcbiAgXCJTaG93R3JvdXBPcGVuZXJcIixcbiAgXCJTaG93SW52aXNpYmxlQ2hhcmFjdGVyc1wiLFxuICBcIlNob3dQYWdlQnJlYWtzXCIsXG4gIFwiU2hvd1ByZWRpY3RpdmVJbnRlcmZhY2VcIixcbiAgXCJTaG93U2VsZWN0aW9uXCIsXG4gIFwiU2hvd1Nob3J0Qm94Rm9ybVwiLFxuICBcIlNob3dTcGVjaWFsQ2hhcmFjdGVyc1wiLFxuICBcIlNob3dTdHJpbmdDaGFyYWN0ZXJzXCIsXG4gIFwiU2hvd1N5bnRheFN0eWxlc1wiLFxuICBcIlNocmlua2luZ0RlbGF5XCIsXG4gIFwiU2hyaW5rV3JhcEJvdW5kaW5nQm94XCIsXG4gIFwiU2lkZXJlYWxUaW1lXCIsXG4gIFwiU2llZ2VsVGhldGFcIixcbiAgXCJTaWVnZWxUdWtleVRlc3RcIixcbiAgXCJTaWVycGluc2tpQ3VydmVcIixcbiAgXCJTaWVycGluc2tpTWVzaFwiLFxuICBcIlNpZ25cIixcbiAgXCJTaWduYXR1cmVcIixcbiAgXCJTaWduZWRSYW5rVGVzdFwiLFxuICBcIlNpZ25lZFJlZ2lvbkRpc3RhbmNlXCIsXG4gIFwiU2lnbmlmaWNhbmNlTGV2ZWxcIixcbiAgXCJTaWduUGFkZGluZ1wiLFxuICBcIlNpZ25UZXN0XCIsXG4gIFwiU2ltaWxhcml0eVJ1bGVzXCIsXG4gIFwiU2ltcGxlR3JhcGhcIixcbiAgXCJTaW1wbGVHcmFwaFFcIixcbiAgXCJTaW1wbGVQb2x5Z29uUVwiLFxuICBcIlNpbXBsZVBvbHloZWRyb25RXCIsXG4gIFwiU2ltcGxleFwiLFxuICBcIlNpbXBsaWZ5XCIsXG4gIFwiU2luXCIsXG4gIFwiU2luY1wiLFxuICBcIlNpbmdoTWFkZGFsYURpc3RyaWJ1dGlvblwiLFxuICBcIlNpbmdsZUV2YWx1YXRpb25cIixcbiAgXCJTaW5nbGVMZXR0ZXJJdGFsaWNzXCIsXG4gIFwiU2luZ2xlTGV0dGVyU3R5bGVcIixcbiAgXCJTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvblwiLFxuICBcIlNpbmd1bGFyVmFsdWVMaXN0XCIsXG4gIFwiU2luZ3VsYXJWYWx1ZVBsb3RcIixcbiAgXCJTaW5ndWxhclZhbHVlc1wiLFxuICBcIlNpbmhcIixcbiAgXCJTaW5oSW50ZWdyYWxcIixcbiAgXCJTaW5JbnRlZ3JhbFwiLFxuICBcIlNpeEpTeW1ib2xcIixcbiAgXCJTa2VsZXRvblwiLFxuICBcIlNrZWxldG9uVHJhbnNmb3JtXCIsXG4gIFwiU2tlbGxhbURpc3RyaWJ1dGlvblwiLFxuICBcIlNrZXduZXNzXCIsXG4gIFwiU2tld05vcm1hbERpc3RyaWJ1dGlvblwiLFxuICBcIlNraW5TdHlsZVwiLFxuICBcIlNraXBcIixcbiAgXCJTbGljZUNvbnRvdXJQbG90M0RcIixcbiAgXCJTbGljZURlbnNpdHlQbG90M0RcIixcbiAgXCJTbGljZURpc3RyaWJ1dGlvblwiLFxuICBcIlNsaWNlVmVjdG9yUGxvdDNEXCIsXG4gIFwiU2xpZGVyXCIsXG4gIFwiU2xpZGVyMkRcIixcbiAgXCJTbGlkZXIyREJveFwiLFxuICBcIlNsaWRlcjJEQm94T3B0aW9uc1wiLFxuICBcIlNsaWRlckJveFwiLFxuICBcIlNsaWRlckJveE9wdGlvbnNcIixcbiAgXCJTbGlkZVZpZXdcIixcbiAgXCJTbG90XCIsXG4gIFwiU2xvdFNlcXVlbmNlXCIsXG4gIFwiU21hbGxcIixcbiAgXCJTbWFsbENpcmNsZVwiLFxuICBcIlNtYWxsZXJcIixcbiAgXCJTbWl0aERlY29tcG9zaXRpb25cIixcbiAgXCJTbWl0aERlbGF5Q29tcGVuc2F0b3JcIixcbiAgXCJTbWl0aFdhdGVybWFuU2ltaWxhcml0eVwiLFxuICBcIlNtb290aERlbnNpdHlIaXN0b2dyYW1cIixcbiAgXCJTbW9vdGhIaXN0b2dyYW1cIixcbiAgXCJTbW9vdGhIaXN0b2dyYW0zRFwiLFxuICBcIlNtb290aEtlcm5lbERpc3RyaWJ1dGlvblwiLFxuICBcIlNuRGlzcGVyc2lvblwiLFxuICBcIlNuaXBwZXRcIixcbiAgXCJTbnViUG9seWhlZHJvblwiLFxuICBcIlNvY2lhbE1lZGlhRGF0YVwiLFxuICBcIlNvY2tldFwiLFxuICBcIlNvY2tldENvbm5lY3RcIixcbiAgXCJTb2NrZXRMaXN0ZW5cIixcbiAgXCJTb2NrZXRMaXN0ZW5lclwiLFxuICBcIlNvY2tldE9iamVjdFwiLFxuICBcIlNvY2tldE9wZW5cIixcbiAgXCJTb2NrZXRSZWFkTWVzc2FnZVwiLFxuICBcIlNvY2tldFJlYWR5UVwiLFxuICBcIlNvY2tldHNcIixcbiAgXCJTb2NrZXRXYWl0QWxsXCIsXG4gIFwiU29ja2V0V2FpdE5leHRcIixcbiAgXCJTb2Z0bWF4TGF5ZXJcIixcbiAgXCJTb2thbFNuZWF0aERpc3NpbWlsYXJpdHlcIixcbiAgXCJTb2xhckVjbGlwc2VcIixcbiAgXCJTb2xhclN5c3RlbUZlYXR1cmVEYXRhXCIsXG4gIFwiU29saWRBbmdsZVwiLFxuICBcIlNvbGlkRGF0YVwiLFxuICBcIlNvbGlkUmVnaW9uUVwiLFxuICBcIlNvbHZlXCIsXG4gIFwiU29sdmVBbHdheXNcIixcbiAgXCJTb2x2ZURlbGF5ZWRcIixcbiAgXCJTb3J0XCIsXG4gIFwiU29ydEJ5XCIsXG4gIFwiU29ydGVkQnlcIixcbiAgXCJTb3J0ZWRFbnRpdHlDbGFzc1wiLFxuICBcIlNvdW5kXCIsXG4gIFwiU291bmRBbmRHcmFwaGljc1wiLFxuICBcIlNvdW5kTm90ZVwiLFxuICBcIlNvdW5kVm9sdW1lXCIsXG4gIFwiU291cmNlTGlua1wiLFxuICBcIlNvd1wiLFxuICBcIlNwYWNlXCIsXG4gIFwiU3BhY2VDdXJ2ZURhdGFcIixcbiAgXCJTcGFjZUZvcm1cIixcbiAgXCJTcGFjZXJcIixcbiAgXCJTcGFjaW5nc1wiLFxuICBcIlNwYW5cIixcbiAgXCJTcGFuQWRqdXN0bWVudHNcIixcbiAgXCJTcGFuQ2hhcmFjdGVyUm91bmRpbmdcIixcbiAgXCJTcGFuRnJvbUFib3ZlXCIsXG4gIFwiU3BhbkZyb21Cb3RoXCIsXG4gIFwiU3BhbkZyb21MZWZ0XCIsXG4gIFwiU3BhbkxpbmVUaGlja25lc3NcIixcbiAgXCJTcGFuTWF4U2l6ZVwiLFxuICBcIlNwYW5NaW5TaXplXCIsXG4gIFwiU3Bhbm5pbmdDaGFyYWN0ZXJzXCIsXG4gIFwiU3BhblN5bW1ldHJpY1wiLFxuICBcIlNwYXJzZUFycmF5XCIsXG4gIFwiU3BhdGlhbEdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiU3BhdGlhbE1lZGlhblwiLFxuICBcIlNwYXRpYWxUcmFuc2Zvcm1hdGlvbkxheWVyXCIsXG4gIFwiU3BlYWtcIixcbiAgXCJTcGVha2VyTWF0Y2hRXCIsXG4gIFwiU3BlYWtUZXh0UGFja2V0XCIsXG4gIFwiU3BlYXJtYW5SYW5rVGVzdFwiLFxuICBcIlNwZWFybWFuUmhvXCIsXG4gIFwiU3BlY2llc0RhdGFcIixcbiAgXCJTcGVjaWZpY2l0eUdvYWxcIixcbiAgXCJTcGVjdHJhbExpbmVEYXRhXCIsXG4gIFwiU3BlY3Ryb2dyYW1cIixcbiAgXCJTcGVjdHJvZ3JhbUFycmF5XCIsXG4gIFwiU3BlY3VsYXJpdHlcIixcbiAgXCJTcGVlY2hDYXNlc1wiLFxuICBcIlNwZWVjaEludGVycHJldGVyXCIsXG4gIFwiU3BlZWNoUmVjb2duaXplXCIsXG4gIFwiU3BlZWNoU3ludGhlc2l6ZVwiLFxuICBcIlNwZWxsaW5nQ29ycmVjdGlvblwiLFxuICBcIlNwZWxsaW5nQ29ycmVjdGlvbkxpc3RcIixcbiAgXCJTcGVsbGluZ0RpY3Rpb25hcmllc1wiLFxuICBcIlNwZWxsaW5nRGljdGlvbmFyaWVzUGF0aFwiLFxuICBcIlNwZWxsaW5nT3B0aW9uc1wiLFxuICBcIlNwZWxsaW5nU3VnZ2VzdGlvbnNQYWNrZXRcIixcbiAgXCJTcGhlcmVcIixcbiAgXCJTcGhlcmVCb3hcIixcbiAgXCJTcGhlcmVQb2ludHNcIixcbiAgXCJTcGhlcmljYWxCZXNzZWxKXCIsXG4gIFwiU3BoZXJpY2FsQmVzc2VsWVwiLFxuICBcIlNwaGVyaWNhbEhhbmtlbEgxXCIsXG4gIFwiU3BoZXJpY2FsSGFua2VsSDJcIixcbiAgXCJTcGhlcmljYWxIYXJtb25pY1lcIixcbiAgXCJTcGhlcmljYWxQbG90M0RcIixcbiAgXCJTcGhlcmljYWxSZWdpb25cIixcbiAgXCJTcGhlcmljYWxTaGVsbFwiLFxuICBcIlNwaGVyb2lkYWxFaWdlbnZhbHVlXCIsXG4gIFwiU3BoZXJvaWRhbEpvaW5pbmdGYWN0b3JcIixcbiAgXCJTcGhlcm9pZGFsUFNcIixcbiAgXCJTcGhlcm9pZGFsUFNQcmltZVwiLFxuICBcIlNwaGVyb2lkYWxRU1wiLFxuICBcIlNwaGVyb2lkYWxRU1ByaW1lXCIsXG4gIFwiU3BoZXJvaWRhbFJhZGlhbEZhY3RvclwiLFxuICBcIlNwaGVyb2lkYWxTMVwiLFxuICBcIlNwaGVyb2lkYWxTMVByaW1lXCIsXG4gIFwiU3BoZXJvaWRhbFMyXCIsXG4gIFwiU3BoZXJvaWRhbFMyUHJpbWVcIixcbiAgXCJTcGxpY2VcIixcbiAgXCJTcGxpY2VkRGlzdHJpYnV0aW9uXCIsXG4gIFwiU3BsaW5lQ2xvc2VkXCIsXG4gIFwiU3BsaW5lRGVncmVlXCIsXG4gIFwiU3BsaW5lS25vdHNcIixcbiAgXCJTcGxpbmVXZWlnaHRzXCIsXG4gIFwiU3BsaXRcIixcbiAgXCJTcGxpdEJ5XCIsXG4gIFwiU3Bva2VuU3RyaW5nXCIsXG4gIFwiU3FydFwiLFxuICBcIlNxcnRCb3hcIixcbiAgXCJTcXJ0Qm94T3B0aW9uc1wiLFxuICBcIlNxdWFyZVwiLFxuICBcIlNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZVwiLFxuICBcIlNxdWFyZUZyZWVRXCIsXG4gIFwiU3F1YXJlSW50ZXJzZWN0aW9uXCIsXG4gIFwiU3F1YXJlTWF0cml4UVwiLFxuICBcIlNxdWFyZVJlcGVhdGluZ0VsZW1lbnRcIixcbiAgXCJTcXVhcmVzUlwiLFxuICBcIlNxdWFyZVN1YnNldFwiLFxuICBcIlNxdWFyZVN1YnNldEVxdWFsXCIsXG4gIFwiU3F1YXJlU3VwZXJzZXRcIixcbiAgXCJTcXVhcmVTdXBlcnNldEVxdWFsXCIsXG4gIFwiU3F1YXJlVW5pb25cIixcbiAgXCJTcXVhcmVXYXZlXCIsXG4gIFwiU1NTVHJpYW5nbGVcIixcbiAgXCJTdGFiaWxpdHlNYXJnaW5zXCIsXG4gIFwiU3RhYmlsaXR5TWFyZ2luc1N0eWxlXCIsXG4gIFwiU3RhYmxlRGlzdHJpYnV0aW9uXCIsXG4gIFwiU3RhY2tcIixcbiAgXCJTdGFja0JlZ2luXCIsXG4gIFwiU3RhY2tDb21wbGV0ZVwiLFxuICBcIlN0YWNrZWREYXRlTGlzdFBsb3RcIixcbiAgXCJTdGFja2VkTGlzdFBsb3RcIixcbiAgXCJTdGFja0luaGliaXRcIixcbiAgXCJTdGFkaXVtU2hhcGVcIixcbiAgXCJTdGFuZGFyZEF0bW9zcGhlcmVEYXRhXCIsXG4gIFwiU3RhbmRhcmREZXZpYXRpb25cIixcbiAgXCJTdGFuZGFyZERldmlhdGlvbkZpbHRlclwiLFxuICBcIlN0YW5kYXJkRm9ybVwiLFxuICBcIlN0YW5kYXJkaXplXCIsXG4gIFwiU3RhbmRhcmRpemVkXCIsXG4gIFwiU3RhbmRhcmRPY2VhbkRhdGFcIixcbiAgXCJTdGFuZGJ5RGlzdHJpYnV0aW9uXCIsXG4gIFwiU3RhclwiLFxuICBcIlN0YXJDbHVzdGVyRGF0YVwiLFxuICBcIlN0YXJEYXRhXCIsXG4gIFwiU3RhckdyYXBoXCIsXG4gIFwiU3RhcnRBc3luY2hyb25vdXNUYXNrXCIsXG4gIFwiU3RhcnRFeHRlcm5hbFNlc3Npb25cIixcbiAgXCJTdGFydGluZ1N0ZXBTaXplXCIsXG4gIFwiU3RhcnRPZkxpbmVcIixcbiAgXCJTdGFydE9mU3RyaW5nXCIsXG4gIFwiU3RhcnRQcm9jZXNzXCIsXG4gIFwiU3RhcnRTY2hlZHVsZWRUYXNrXCIsXG4gIFwiU3RhcnR1cFNvdW5kXCIsXG4gIFwiU3RhcnRXZWJTZXNzaW9uXCIsXG4gIFwiU3RhdGVEaW1lbnNpb25zXCIsXG4gIFwiU3RhdGVGZWVkYmFja0dhaW5zXCIsXG4gIFwiU3RhdGVPdXRwdXRFc3RpbWF0b3JcIixcbiAgXCJTdGF0ZVJlc3BvbnNlXCIsXG4gIFwiU3RhdGVTcGFjZU1vZGVsXCIsXG4gIFwiU3RhdGVTcGFjZVJlYWxpemF0aW9uXCIsXG4gIFwiU3RhdGVTcGFjZVRyYW5zZm9ybVwiLFxuICBcIlN0YXRlVHJhbnNmb3JtYXRpb25MaW5lYXJpemVcIixcbiAgXCJTdGF0aW9uYXJ5RGlzdHJpYnV0aW9uXCIsXG4gIFwiU3RhdGlvbmFyeVdhdmVsZXRQYWNrZXRUcmFuc2Zvcm1cIixcbiAgXCJTdGF0aW9uYXJ5V2F2ZWxldFRyYW5zZm9ybVwiLFxuICBcIlN0YXR1c0FyZWFcIixcbiAgXCJTdGF0dXNDZW50cmFsaXR5XCIsXG4gIFwiU3RlcE1vbml0b3JcIixcbiAgXCJTdGVyZW9jaGVtaXN0cnlFbGVtZW50c1wiLFxuICBcIlN0aWVsdGplc0dhbW1hXCIsXG4gIFwiU3RpcHBsZVNoYWRpbmdcIixcbiAgXCJTdGlybGluZ1MxXCIsXG4gIFwiU3RpcmxpbmdTMlwiLFxuICBcIlN0b3BBc3luY2hyb25vdXNUYXNrXCIsXG4gIFwiU3RvcHBpbmdQb3dlckRhdGFcIixcbiAgXCJTdG9wU2NoZWR1bGVkVGFza1wiLFxuICBcIlN0cmF0YVZhcmlhYmxlc1wiLFxuICBcIlN0cmF0b25vdmljaFByb2Nlc3NcIixcbiAgXCJTdHJlYW1Db2xvckZ1bmN0aW9uXCIsXG4gIFwiU3RyZWFtQ29sb3JGdW5jdGlvblNjYWxpbmdcIixcbiAgXCJTdHJlYW1EZW5zaXR5UGxvdFwiLFxuICBcIlN0cmVhbU1hcmtlcnNcIixcbiAgXCJTdHJlYW1QbG90XCIsXG4gIFwiU3RyZWFtUG9pbnRzXCIsXG4gIFwiU3RyZWFtUG9zaXRpb25cIixcbiAgXCJTdHJlYW1zXCIsXG4gIFwiU3RyZWFtU2NhbGVcIixcbiAgXCJTdHJlYW1TdHlsZVwiLFxuICBcIlN0cmluZ1wiLFxuICBcIlN0cmluZ0JyZWFrXCIsXG4gIFwiU3RyaW5nQnl0ZUNvdW50XCIsXG4gIFwiU3RyaW5nQ2FzZXNcIixcbiAgXCJTdHJpbmdDb250YWluc1FcIixcbiAgXCJTdHJpbmdDb3VudFwiLFxuICBcIlN0cmluZ0RlbGV0ZVwiLFxuICBcIlN0cmluZ0Ryb3BcIixcbiAgXCJTdHJpbmdFbmRzUVwiLFxuICBcIlN0cmluZ0V4cHJlc3Npb25cIixcbiAgXCJTdHJpbmdFeHRyYWN0XCIsXG4gIFwiU3RyaW5nRm9ybVwiLFxuICBcIlN0cmluZ0Zvcm1hdFwiLFxuICBcIlN0cmluZ0ZyZWVRXCIsXG4gIFwiU3RyaW5nSW5zZXJ0XCIsXG4gIFwiU3RyaW5nSm9pblwiLFxuICBcIlN0cmluZ0xlbmd0aFwiLFxuICBcIlN0cmluZ01hdGNoUVwiLFxuICBcIlN0cmluZ1BhZExlZnRcIixcbiAgXCJTdHJpbmdQYWRSaWdodFwiLFxuICBcIlN0cmluZ1BhcnRcIixcbiAgXCJTdHJpbmdQYXJ0aXRpb25cIixcbiAgXCJTdHJpbmdQb3NpdGlvblwiLFxuICBcIlN0cmluZ1FcIixcbiAgXCJTdHJpbmdSZXBlYXRcIixcbiAgXCJTdHJpbmdSZXBsYWNlXCIsXG4gIFwiU3RyaW5nUmVwbGFjZUxpc3RcIixcbiAgXCJTdHJpbmdSZXBsYWNlUGFydFwiLFxuICBcIlN0cmluZ1JldmVyc2VcIixcbiAgXCJTdHJpbmdSaWZmbGVcIixcbiAgXCJTdHJpbmdSb3RhdGVMZWZ0XCIsXG4gIFwiU3RyaW5nUm90YXRlUmlnaHRcIixcbiAgXCJTdHJpbmdTa2VsZXRvblwiLFxuICBcIlN0cmluZ1NwbGl0XCIsXG4gIFwiU3RyaW5nU3RhcnRzUVwiLFxuICBcIlN0cmluZ1Rha2VcIixcbiAgXCJTdHJpbmdUZW1wbGF0ZVwiLFxuICBcIlN0cmluZ1RvQnl0ZUFycmF5XCIsXG4gIFwiU3RyaW5nVG9TdHJlYW1cIixcbiAgXCJTdHJpbmdUcmltXCIsXG4gIFwiU3RyaXBCb3hlc1wiLFxuICBcIlN0cmlwT25JbnB1dFwiLFxuICBcIlN0cmlwV3JhcHBlckJveGVzXCIsXG4gIFwiU3Ryb2tlRm9ybVwiLFxuICBcIlN0cnVjdHVyYWxJbXBvcnRhbmNlXCIsXG4gIFwiU3RydWN0dXJlZEFycmF5XCIsXG4gIFwiU3RydWN0dXJlZEFycmF5SGVhZFFcIixcbiAgXCJTdHJ1Y3R1cmVkU2VsZWN0aW9uXCIsXG4gIFwiU3RydXZlSFwiLFxuICBcIlN0cnV2ZUxcIixcbiAgXCJTdHViXCIsXG4gIFwiU3R1ZGVudFREaXN0cmlidXRpb25cIixcbiAgXCJTdHlsZVwiLFxuICBcIlN0eWxlQm94XCIsXG4gIFwiU3R5bGVCb3hBdXRvRGVsZXRlXCIsXG4gIFwiU3R5bGVEYXRhXCIsXG4gIFwiU3R5bGVEZWZpbml0aW9uc1wiLFxuICBcIlN0eWxlRm9ybVwiLFxuICBcIlN0eWxlSGludHNcIixcbiAgXCJTdHlsZUtleU1hcHBpbmdcIixcbiAgXCJTdHlsZU1lbnVMaXN0aW5nXCIsXG4gIFwiU3R5bGVOYW1lRGlhbG9nU2V0dGluZ3NcIixcbiAgXCJTdHlsZU5hbWVzXCIsXG4gIFwiU3R5bGVQcmludFwiLFxuICBcIlN0eWxlU2hlZXRQYXRoXCIsXG4gIFwiU3ViZGl2aWRlXCIsXG4gIFwiU3ViZmFjdG9yaWFsXCIsXG4gIFwiU3ViZ3JhcGhcIixcbiAgXCJTdWJNaW51c1wiLFxuICBcIlN1YlBsdXNcIixcbiAgXCJTdWJyZXN1bHRhbnRQb2x5bm9taWFsUmVtYWluZGVyc1wiLFxuICBcIlN1YnJlc3VsdGFudFBvbHlub21pYWxzXCIsXG4gIFwiU3VicmVzdWx0YW50c1wiLFxuICBcIlN1YnNjcmlwdFwiLFxuICBcIlN1YnNjcmlwdEJveFwiLFxuICBcIlN1YnNjcmlwdEJveE9wdGlvbnNcIixcbiAgXCJTdWJzY3JpcHRlZFwiLFxuICBcIlN1YnNlcXVlbmNlc1wiLFxuICBcIlN1YnNldFwiLFxuICBcIlN1YnNldENhc2VzXCIsXG4gIFwiU3Vic2V0Q291bnRcIixcbiAgXCJTdWJzZXRFcXVhbFwiLFxuICBcIlN1YnNldE1hcFwiLFxuICBcIlN1YnNldFBvc2l0aW9uXCIsXG4gIFwiU3Vic2V0UVwiLFxuICBcIlN1YnNldFJlcGxhY2VcIixcbiAgXCJTdWJzZXRzXCIsXG4gIFwiU3ViU3RhclwiLFxuICBcIlN1YnN0aXR1dGlvblN5c3RlbVwiLFxuICBcIlN1YnN1cGVyc2NyaXB0XCIsXG4gIFwiU3Vic3VwZXJzY3JpcHRCb3hcIixcbiAgXCJTdWJzdXBlcnNjcmlwdEJveE9wdGlvbnNcIixcbiAgXCJTdWJ0aXRsZUVuY29kaW5nXCIsXG4gIFwiU3VidGl0bGVUcmFja3NcIixcbiAgXCJTdWJ0cmFjdFwiLFxuICBcIlN1YnRyYWN0RnJvbVwiLFxuICBcIlN1YnRyYWN0U2lkZXNcIixcbiAgXCJTdWJWYWx1ZXNcIixcbiAgXCJTdWNjZWVkc1wiLFxuICBcIlN1Y2NlZWRzRXF1YWxcIixcbiAgXCJTdWNjZWVkc1NsYW50RXF1YWxcIixcbiAgXCJTdWNjZWVkc1RpbGRlXCIsXG4gIFwiU3VjY2Vzc1wiLFxuICBcIlN1Y2hUaGF0XCIsXG4gIFwiU3VtXCIsXG4gIFwiU3VtQ29udmVyZ2VuY2VcIixcbiAgXCJTdW1tYXRpb25MYXllclwiLFxuICBcIlN1bmRheVwiLFxuICBcIlN1blBvc2l0aW9uXCIsXG4gIFwiU3VucmlzZVwiLFxuICBcIlN1bnNldFwiLFxuICBcIlN1cGVyRGFnZ2VyXCIsXG4gIFwiU3VwZXJNaW51c1wiLFxuICBcIlN1cGVybm92YURhdGFcIixcbiAgXCJTdXBlclBsdXNcIixcbiAgXCJTdXBlcnNjcmlwdFwiLFxuICBcIlN1cGVyc2NyaXB0Qm94XCIsXG4gIFwiU3VwZXJzY3JpcHRCb3hPcHRpb25zXCIsXG4gIFwiU3VwZXJzZXRcIixcbiAgXCJTdXBlcnNldEVxdWFsXCIsXG4gIFwiU3VwZXJTdGFyXCIsXG4gIFwiU3VyZFwiLFxuICBcIlN1cmRGb3JtXCIsXG4gIFwiU3VyZmFjZUFwcGVhcmFuY2VcIixcbiAgXCJTdXJmYWNlQXJlYVwiLFxuICBcIlN1cmZhY2VDb2xvclwiLFxuICBcIlN1cmZhY2VEYXRhXCIsXG4gIFwiU3VyZmFjZUdyYXBoaWNzXCIsXG4gIFwiU3Vydml2YWxEaXN0cmlidXRpb25cIixcbiAgXCJTdXJ2aXZhbEZ1bmN0aW9uXCIsXG4gIFwiU3Vydml2YWxNb2RlbFwiLFxuICBcIlN1cnZpdmFsTW9kZWxGaXRcIixcbiAgXCJTdXNwZW5kUGFja2V0XCIsXG4gIFwiU3V6dWtpRGlzdHJpYnV0aW9uXCIsXG4gIFwiU3V6dWtpR3JvdXBTdXpcIixcbiAgXCJTd2F0Y2hMZWdlbmRcIixcbiAgXCJTd2l0Y2hcIixcbiAgXCJTeW1ib2xcIixcbiAgXCJTeW1ib2xOYW1lXCIsXG4gIFwiU3ltbGV0V2F2ZWxldFwiLFxuICBcIlN5bW1ldHJpY1wiLFxuICBcIlN5bW1ldHJpY0dyb3VwXCIsXG4gIFwiU3ltbWV0cmljS2V5XCIsXG4gIFwiU3ltbWV0cmljTWF0cml4UVwiLFxuICBcIlN5bW1ldHJpY1BvbHlub21pYWxcIixcbiAgXCJTeW1tZXRyaWNSZWR1Y3Rpb25cIixcbiAgXCJTeW1tZXRyaXplXCIsXG4gIFwiU3ltbWV0cml6ZWRBcnJheVwiLFxuICBcIlN5bW1ldHJpemVkQXJyYXlSdWxlc1wiLFxuICBcIlN5bW1ldHJpemVkRGVwZW5kZW50Q29tcG9uZW50c1wiLFxuICBcIlN5bW1ldHJpemVkSW5kZXBlbmRlbnRDb21wb25lbnRzXCIsXG4gIFwiU3ltbWV0cml6ZWRSZXBsYWNlUGFydFwiLFxuICBcIlN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb25cIixcbiAgXCJTeW5jaHJvbm91c1VwZGF0aW5nXCIsXG4gIFwiU3lub255bXNcIixcbiAgXCJTeW50YXhcIixcbiAgXCJTeW50YXhGb3JtXCIsXG4gIFwiU3ludGF4SW5mb3JtYXRpb25cIixcbiAgXCJTeW50YXhMZW5ndGhcIixcbiAgXCJTeW50YXhQYWNrZXRcIixcbiAgXCJTeW50YXhRXCIsXG4gIFwiU3ludGhlc2l6ZU1pc3NpbmdWYWx1ZXNcIixcbiAgXCJTeXN0ZW1DcmVkZW50aWFsXCIsXG4gIFwiU3lzdGVtQ3JlZGVudGlhbERhdGFcIixcbiAgXCJTeXN0ZW1DcmVkZW50aWFsS2V5XCIsXG4gIFwiU3lzdGVtQ3JlZGVudGlhbEtleXNcIixcbiAgXCJTeXN0ZW1DcmVkZW50aWFsU3RvcmVPYmplY3RcIixcbiAgXCJTeXN0ZW1EaWFsb2dJbnB1dFwiLFxuICBcIlN5c3RlbUV4Y2VwdGlvblwiLFxuICBcIlN5c3RlbUdldFwiLFxuICBcIlN5c3RlbUhlbHBQYXRoXCIsXG4gIFwiU3lzdGVtSW5mb3JtYXRpb25cIixcbiAgXCJTeXN0ZW1JbmZvcm1hdGlvbkRhdGFcIixcbiAgXCJTeXN0ZW1JbnN0YWxsXCIsXG4gIFwiU3lzdGVtTW9kZWxcIixcbiAgXCJTeXN0ZW1Nb2RlbGVyXCIsXG4gIFwiU3lzdGVtTW9kZWxFeGFtcGxlc1wiLFxuICBcIlN5c3RlbU1vZGVsTGluZWFyaXplXCIsXG4gIFwiU3lzdGVtTW9kZWxQYXJhbWV0cmljU2ltdWxhdGVcIixcbiAgXCJTeXN0ZW1Nb2RlbFBsb3RcIixcbiAgXCJTeXN0ZW1Nb2RlbFByb2dyZXNzUmVwb3J0aW5nXCIsXG4gIFwiU3lzdGVtTW9kZWxSZWxpYWJpbGl0eVwiLFxuICBcIlN5c3RlbU1vZGVsc1wiLFxuICBcIlN5c3RlbU1vZGVsU2ltdWxhdGVcIixcbiAgXCJTeXN0ZW1Nb2RlbFNpbXVsYXRlU2Vuc2l0aXZpdHlcIixcbiAgXCJTeXN0ZW1Nb2RlbFNpbXVsYXRpb25EYXRhXCIsXG4gIFwiU3lzdGVtT3BlblwiLFxuICBcIlN5c3RlbU9wdGlvbnNcIixcbiAgXCJTeXN0ZW1Qcm9jZXNzRGF0YVwiLFxuICBcIlN5c3RlbVByb2Nlc3Nlc1wiLFxuICBcIlN5c3RlbXNDb25uZWN0aW9uc01vZGVsXCIsXG4gIFwiU3lzdGVtc01vZGVsRGVsYXlcIixcbiAgXCJTeXN0ZW1zTW9kZWxEZWxheUFwcHJveGltYXRlXCIsXG4gIFwiU3lzdGVtc01vZGVsRGVsZXRlXCIsXG4gIFwiU3lzdGVtc01vZGVsRGltZW5zaW9uc1wiLFxuICBcIlN5c3RlbXNNb2RlbEV4dHJhY3RcIixcbiAgXCJTeXN0ZW1zTW9kZWxGZWVkYmFja0Nvbm5lY3RcIixcbiAgXCJTeXN0ZW1zTW9kZWxMYWJlbHNcIixcbiAgXCJTeXN0ZW1zTW9kZWxMaW5lYXJpdHlcIixcbiAgXCJTeXN0ZW1zTW9kZWxNZXJnZVwiLFxuICBcIlN5c3RlbXNNb2RlbE9yZGVyXCIsXG4gIFwiU3lzdGVtc01vZGVsUGFyYWxsZWxDb25uZWN0XCIsXG4gIFwiU3lzdGVtc01vZGVsU2VyaWVzQ29ubmVjdFwiLFxuICBcIlN5c3RlbXNNb2RlbFN0YXRlRmVlZGJhY2tDb25uZWN0XCIsXG4gIFwiU3lzdGVtc01vZGVsVmVjdG9yUmVsYXRpdmVPcmRlcnNcIixcbiAgXCJTeXN0ZW1TdHViXCIsXG4gIFwiU3lzdGVtVGVzdFwiLFxuICBcIlRhYlwiLFxuICBcIlRhYkZpbGxpbmdcIixcbiAgXCJUYWJsZVwiLFxuICBcIlRhYmxlQWxpZ25tZW50c1wiLFxuICBcIlRhYmxlRGVwdGhcIixcbiAgXCJUYWJsZURpcmVjdGlvbnNcIixcbiAgXCJUYWJsZUZvcm1cIixcbiAgXCJUYWJsZUhlYWRpbmdzXCIsXG4gIFwiVGFibGVTcGFjaW5nXCIsXG4gIFwiVGFibGVWaWV3XCIsXG4gIFwiVGFibGVWaWV3Qm94XCIsXG4gIFwiVGFibGVWaWV3Qm94QmFja2dyb3VuZFwiLFxuICBcIlRhYmxlVmlld0JveEl0ZW1TaXplXCIsXG4gIFwiVGFibGVWaWV3Qm94T3B0aW9uc1wiLFxuICBcIlRhYlNwYWNpbmdzXCIsXG4gIFwiVGFiVmlld1wiLFxuICBcIlRhYlZpZXdCb3hcIixcbiAgXCJUYWJWaWV3Qm94T3B0aW9uc1wiLFxuICBcIlRhZ0JveFwiLFxuICBcIlRhZ0JveE5vdGVcIixcbiAgXCJUYWdCb3hPcHRpb25zXCIsXG4gIFwiVGFnZ2luZ1J1bGVzXCIsXG4gIFwiVGFnU2V0XCIsXG4gIFwiVGFnU2V0RGVsYXllZFwiLFxuICBcIlRhZ1N0eWxlXCIsXG4gIFwiVGFnVW5zZXRcIixcbiAgXCJUYWtlXCIsXG4gIFwiVGFrZURyb3BcIixcbiAgXCJUYWtlTGFyZ2VzdFwiLFxuICBcIlRha2VMYXJnZXN0QnlcIixcbiAgXCJUYWtlTGlzdFwiLFxuICBcIlRha2VTbWFsbGVzdFwiLFxuICBcIlRha2VTbWFsbGVzdEJ5XCIsXG4gIFwiVGFrZVdoaWxlXCIsXG4gIFwiVGFsbHlcIixcbiAgXCJUYW5cIixcbiAgXCJUYW5oXCIsXG4gIFwiVGFyZ2V0RGV2aWNlXCIsXG4gIFwiVGFyZ2V0RnVuY3Rpb25zXCIsXG4gIFwiVGFyZ2V0U3lzdGVtXCIsXG4gIFwiVGFyZ2V0VW5pdHNcIixcbiAgXCJUYXNrQWJvcnRcIixcbiAgXCJUYXNrRXhlY3V0ZVwiLFxuICBcIlRhc2tPYmplY3RcIixcbiAgXCJUYXNrUmVtb3ZlXCIsXG4gIFwiVGFza1Jlc3VtZVwiLFxuICBcIlRhc2tzXCIsXG4gIFwiVGFza1N1c3BlbmRcIixcbiAgXCJUYXNrV2FpdFwiLFxuICBcIlRhdXRvbG9neVFcIixcbiAgXCJUZWxlZ3JhcGhQcm9jZXNzXCIsXG4gIFwiVGVtcGxhdGVBcHBseVwiLFxuICBcIlRlbXBsYXRlQXJnQm94XCIsXG4gIFwiVGVtcGxhdGVCb3hcIixcbiAgXCJUZW1wbGF0ZUJveE9wdGlvbnNcIixcbiAgXCJUZW1wbGF0ZUV2YWx1YXRlXCIsXG4gIFwiVGVtcGxhdGVFeHByZXNzaW9uXCIsXG4gIFwiVGVtcGxhdGVJZlwiLFxuICBcIlRlbXBsYXRlT2JqZWN0XCIsXG4gIFwiVGVtcGxhdGVTZXF1ZW5jZVwiLFxuICBcIlRlbXBsYXRlU2xvdFwiLFxuICBcIlRlbXBsYXRlU2xvdFNlcXVlbmNlXCIsXG4gIFwiVGVtcGxhdGVVbmV2YWx1YXRlZFwiLFxuICBcIlRlbXBsYXRlVmVyYmF0aW1cIixcbiAgXCJUZW1wbGF0ZVdpdGhcIixcbiAgXCJUZW1wb3JhbERhdGFcIixcbiAgXCJUZW1wb3JhbFJlZ3VsYXJpdHlcIixcbiAgXCJUZW1wb3JhcnlcIixcbiAgXCJUZW1wb3JhcnlWYXJpYWJsZVwiLFxuICBcIlRlbnNvckNvbnRyYWN0XCIsXG4gIFwiVGVuc29yRGltZW5zaW9uc1wiLFxuICBcIlRlbnNvckV4cGFuZFwiLFxuICBcIlRlbnNvclByb2R1Y3RcIixcbiAgXCJUZW5zb3JRXCIsXG4gIFwiVGVuc29yUmFua1wiLFxuICBcIlRlbnNvclJlZHVjZVwiLFxuICBcIlRlbnNvclN5bW1ldHJ5XCIsXG4gIFwiVGVuc29yVHJhbnNwb3NlXCIsXG4gIFwiVGVuc29yV2VkZ2VcIixcbiAgXCJUZXN0SURcIixcbiAgXCJUZXN0UmVwb3J0XCIsXG4gIFwiVGVzdFJlcG9ydE9iamVjdFwiLFxuICBcIlRlc3RSZXN1bHRPYmplY3RcIixcbiAgXCJUZXRyYWhlZHJvblwiLFxuICBcIlRldHJhaGVkcm9uQm94XCIsXG4gIFwiVGV0cmFoZWRyb25Cb3hPcHRpb25zXCIsXG4gIFwiVGVYRm9ybVwiLFxuICBcIlRlWFNhdmVcIixcbiAgXCJUZXh0XCIsXG4gIFwiVGV4dDNEQm94XCIsXG4gIFwiVGV4dDNEQm94T3B0aW9uc1wiLFxuICBcIlRleHRBbGlnbm1lbnRcIixcbiAgXCJUZXh0QmFuZFwiLFxuICBcIlRleHRCb3VuZGluZ0JveFwiLFxuICBcIlRleHRCb3hcIixcbiAgXCJUZXh0Q2FzZXNcIixcbiAgXCJUZXh0Q2VsbFwiLFxuICBcIlRleHRDbGlwYm9hcmRUeXBlXCIsXG4gIFwiVGV4dENvbnRlbnRzXCIsXG4gIFwiVGV4dERhdGFcIixcbiAgXCJUZXh0RWxlbWVudFwiLFxuICBcIlRleHRGb3JtXCIsXG4gIFwiVGV4dEdyaWRcIixcbiAgXCJUZXh0SnVzdGlmaWNhdGlvblwiLFxuICBcIlRleHRMaW5lXCIsXG4gIFwiVGV4dFBhY2tldFwiLFxuICBcIlRleHRQYXJhZ3JhcGhcIixcbiAgXCJUZXh0UG9zaXRpb25cIixcbiAgXCJUZXh0UmVjb2duaXplXCIsXG4gIFwiVGV4dFNlYXJjaFwiLFxuICBcIlRleHRTZWFyY2hSZXBvcnRcIixcbiAgXCJUZXh0U2VudGVuY2VzXCIsXG4gIFwiVGV4dFN0cmluZ1wiLFxuICBcIlRleHRTdHJ1Y3R1cmVcIixcbiAgXCJUZXh0U3R5bGVcIixcbiAgXCJUZXh0VHJhbnNsYXRpb25cIixcbiAgXCJUZXh0dXJlXCIsXG4gIFwiVGV4dHVyZUNvb3JkaW5hdGVGdW5jdGlvblwiLFxuICBcIlRleHR1cmVDb29yZGluYXRlU2NhbGluZ1wiLFxuICBcIlRleHRXb3Jkc1wiLFxuICBcIlRoZXJlZm9yZVwiLFxuICBcIlRoZXJtb2R5bmFtaWNEYXRhXCIsXG4gIFwiVGhlcm1vbWV0ZXJHYXVnZVwiLFxuICBcIlRoaWNrXCIsXG4gIFwiVGhpY2tuZXNzXCIsXG4gIFwiVGhpblwiLFxuICBcIlRoaW5uaW5nXCIsXG4gIFwiVGhpc0xpbmtcIixcbiAgXCJUaG9tcHNvbkdyb3VwVGhcIixcbiAgXCJUaHJlYWRcIixcbiAgXCJUaHJlYWRpbmdMYXllclwiLFxuICBcIlRocmVlSlN5bWJvbFwiLFxuICBcIlRocmVzaG9sZFwiLFxuICBcIlRocm91Z2hcIixcbiAgXCJUaHJvd1wiLFxuICBcIlRodWVNb3JzZVwiLFxuICBcIlRodW1ibmFpbFwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiVGlja3NcIixcbiAgXCJUaWNrc1N0eWxlXCIsXG4gIFwiVGlkZURhdGFcIixcbiAgXCJUaWxkZVwiLFxuICBcIlRpbGRlRXF1YWxcIixcbiAgXCJUaWxkZUZ1bGxFcXVhbFwiLFxuICBcIlRpbGRlVGlsZGVcIixcbiAgXCJUaW1lQ29uc3RyYWluZWRcIixcbiAgXCJUaW1lQ29uc3RyYWludFwiLFxuICBcIlRpbWVEaXJlY3Rpb25cIixcbiAgXCJUaW1lRm9ybWF0XCIsXG4gIFwiVGltZUdvYWxcIixcbiAgXCJUaW1lbGluZVBsb3RcIixcbiAgXCJUaW1lT2JqZWN0XCIsXG4gIFwiVGltZU9iamVjdFFcIixcbiAgXCJUaW1lUmVtYWluaW5nXCIsXG4gIFwiVGltZXNcIixcbiAgXCJUaW1lc0J5XCIsXG4gIFwiVGltZVNlcmllc1wiLFxuICBcIlRpbWVTZXJpZXNBZ2dyZWdhdGVcIixcbiAgXCJUaW1lU2VyaWVzRm9yZWNhc3RcIixcbiAgXCJUaW1lU2VyaWVzSW5zZXJ0XCIsXG4gIFwiVGltZVNlcmllc0ludmVydGliaWxpdHlcIixcbiAgXCJUaW1lU2VyaWVzTWFwXCIsXG4gIFwiVGltZVNlcmllc01hcFRocmVhZFwiLFxuICBcIlRpbWVTZXJpZXNNb2RlbFwiLFxuICBcIlRpbWVTZXJpZXNNb2RlbEZpdFwiLFxuICBcIlRpbWVTZXJpZXNSZXNhbXBsZVwiLFxuICBcIlRpbWVTZXJpZXNSZXNjYWxlXCIsXG4gIFwiVGltZVNlcmllc1NoaWZ0XCIsXG4gIFwiVGltZVNlcmllc1RocmVhZFwiLFxuICBcIlRpbWVTZXJpZXNXaW5kb3dcIixcbiAgXCJUaW1lVXNlZFwiLFxuICBcIlRpbWVWYWx1ZVwiLFxuICBcIlRpbWVXYXJwaW5nQ29ycmVzcG9uZGVuY2VcIixcbiAgXCJUaW1lV2FycGluZ0Rpc3RhbmNlXCIsXG4gIFwiVGltZVpvbmVcIixcbiAgXCJUaW1lWm9uZUNvbnZlcnRcIixcbiAgXCJUaW1lWm9uZU9mZnNldFwiLFxuICBcIlRpbWluZ1wiLFxuICBcIlRpbnlcIixcbiAgXCJUaXRsZUdyb3VwaW5nXCIsXG4gIFwiVGl0c0dyb3VwVFwiLFxuICBcIlRvQm94ZXNcIixcbiAgXCJUb0NoYXJhY3RlckNvZGVcIixcbiAgXCJUb0NvbG9yXCIsXG4gIFwiVG9Db250aW51b3VzVGltZU1vZGVsXCIsXG4gIFwiVG9EYXRlXCIsXG4gIFwiVG9kYXlcIixcbiAgXCJUb0Rpc2NyZXRlVGltZU1vZGVsXCIsXG4gIFwiVG9FbnRpdHlcIixcbiAgXCJUb2VwbGl0ek1hdHJpeFwiLFxuICBcIlRvRXhwcmVzc2lvblwiLFxuICBcIlRvRmlsZU5hbWVcIixcbiAgXCJUb2dldGhlclwiLFxuICBcIlRvZ2dsZVwiLFxuICBcIlRvZ2dsZUZhbHNlXCIsXG4gIFwiVG9nZ2xlclwiLFxuICBcIlRvZ2dsZXJCYXJcIixcbiAgXCJUb2dnbGVyQm94XCIsXG4gIFwiVG9nZ2xlckJveE9wdGlvbnNcIixcbiAgXCJUb0hlbGRFeHByZXNzaW9uXCIsXG4gIFwiVG9JbnZlcnRpYmxlVGltZVNlcmllc1wiLFxuICBcIlRva2VuV29yZHNcIixcbiAgXCJUb2xlcmFuY2VcIixcbiAgXCJUb0xvd2VyQ2FzZVwiLFxuICBcIlRvbW9ycm93XCIsXG4gIFwiVG9OdW1iZXJGaWVsZFwiLFxuICBcIlRvb0JpZ1wiLFxuICBcIlRvb2x0aXBcIixcbiAgXCJUb29sdGlwQm94XCIsXG4gIFwiVG9vbHRpcEJveE9wdGlvbnNcIixcbiAgXCJUb29sdGlwRGVsYXlcIixcbiAgXCJUb29sdGlwU3R5bGVcIixcbiAgXCJUb29uU2hhZGluZ1wiLFxuICBcIlRvcFwiLFxuICBcIlRvcEhhdFRyYW5zZm9ybVwiLFxuICBcIlRvUG9sYXJDb29yZGluYXRlc1wiLFxuICBcIlRvcG9sb2dpY2FsU29ydFwiLFxuICBcIlRvUmFkaWNhbHNcIixcbiAgXCJUb1J1bGVzXCIsXG4gIFwiVG9TcGhlcmljYWxDb29yZGluYXRlc1wiLFxuICBcIlRvU3RyaW5nXCIsXG4gIFwiVG90YWxcIixcbiAgXCJUb3RhbEhlaWdodFwiLFxuICBcIlRvdGFsTGF5ZXJcIixcbiAgXCJUb3RhbFZhcmlhdGlvbkZpbHRlclwiLFxuICBcIlRvdGFsV2lkdGhcIixcbiAgXCJUb3VjaFBvc2l0aW9uXCIsXG4gIFwiVG91Y2hzY3JlZW5BdXRvWm9vbVwiLFxuICBcIlRvdWNoc2NyZWVuQ29udHJvbFBsYWNlbWVudFwiLFxuICBcIlRvVXBwZXJDYXNlXCIsXG4gIFwiVHJcIixcbiAgXCJUcmFjZVwiLFxuICBcIlRyYWNlQWJvdmVcIixcbiAgXCJUcmFjZUFjdGlvblwiLFxuICBcIlRyYWNlQmFja3dhcmRcIixcbiAgXCJUcmFjZURlcHRoXCIsXG4gIFwiVHJhY2VEaWFsb2dcIixcbiAgXCJUcmFjZUZvcndhcmRcIixcbiAgXCJUcmFjZUludGVybmFsXCIsXG4gIFwiVHJhY2VMZXZlbFwiLFxuICBcIlRyYWNlT2ZmXCIsXG4gIFwiVHJhY2VPblwiLFxuICBcIlRyYWNlT3JpZ2luYWxcIixcbiAgXCJUcmFjZVByaW50XCIsXG4gIFwiVHJhY2VTY2FuXCIsXG4gIFwiVHJhY2tlZFN5bWJvbHNcIixcbiAgXCJUcmFja2luZ0Z1bmN0aW9uXCIsXG4gIFwiVHJhY3lXaWRvbURpc3RyaWJ1dGlvblwiLFxuICBcIlRyYWRpbmdDaGFydFwiLFxuICBcIlRyYWRpdGlvbmFsRm9ybVwiLFxuICBcIlRyYWRpdGlvbmFsRnVuY3Rpb25Ob3RhdGlvblwiLFxuICBcIlRyYWRpdGlvbmFsTm90YXRpb25cIixcbiAgXCJUcmFkaXRpb25hbE9yZGVyXCIsXG4gIFwiVHJhaW5pbmdQcm9ncmVzc0NoZWNrcG9pbnRpbmdcIixcbiAgXCJUcmFpbmluZ1Byb2dyZXNzRnVuY3Rpb25cIixcbiAgXCJUcmFpbmluZ1Byb2dyZXNzTWVhc3VyZW1lbnRzXCIsXG4gIFwiVHJhaW5pbmdQcm9ncmVzc1JlcG9ydGluZ1wiLFxuICBcIlRyYWluaW5nU3RvcHBpbmdDcml0ZXJpb25cIixcbiAgXCJUcmFpbmluZ1VwZGF0ZVNjaGVkdWxlXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvbkNhbmNlbFwiLFxuICBcIlRyYW5zZmVyRnVuY3Rpb25FeHBhbmRcIixcbiAgXCJUcmFuc2ZlckZ1bmN0aW9uRmFjdG9yXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvbk1vZGVsXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvblBvbGVzXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvblRyYW5zZm9ybVwiLFxuICBcIlRyYW5zZmVyRnVuY3Rpb25aZXJvc1wiLFxuICBcIlRyYW5zZm9ybWF0aW9uQ2xhc3NcIixcbiAgXCJUcmFuc2Zvcm1hdGlvbkZ1bmN0aW9uXCIsXG4gIFwiVHJhbnNmb3JtYXRpb25GdW5jdGlvbnNcIixcbiAgXCJUcmFuc2Zvcm1hdGlvbk1hdHJpeFwiLFxuICBcIlRyYW5zZm9ybWVkRGlzdHJpYnV0aW9uXCIsXG4gIFwiVHJhbnNmb3JtZWRGaWVsZFwiLFxuICBcIlRyYW5zZm9ybWVkUHJvY2Vzc1wiLFxuICBcIlRyYW5zZm9ybWVkUmVnaW9uXCIsXG4gIFwiVHJhbnNpdGlvbkRpcmVjdGlvblwiLFxuICBcIlRyYW5zaXRpb25EdXJhdGlvblwiLFxuICBcIlRyYW5zaXRpb25FZmZlY3RcIixcbiAgXCJUcmFuc2l0aXZlQ2xvc3VyZUdyYXBoXCIsXG4gIFwiVHJhbnNpdGl2ZVJlZHVjdGlvbkdyYXBoXCIsXG4gIFwiVHJhbnNsYXRlXCIsXG4gIFwiVHJhbnNsYXRpb25PcHRpb25zXCIsXG4gIFwiVHJhbnNsYXRpb25UcmFuc2Zvcm1cIixcbiAgXCJUcmFuc2xpdGVyYXRlXCIsXG4gIFwiVHJhbnNwYXJlbnRcIixcbiAgXCJUcmFuc3BhcmVudENvbG9yXCIsXG4gIFwiVHJhbnNwb3NlXCIsXG4gIFwiVHJhbnNwb3NlTGF5ZXJcIixcbiAgXCJUcmFwU2VsZWN0aW9uXCIsXG4gIFwiVHJhdmVsRGlyZWN0aW9uc1wiLFxuICBcIlRyYXZlbERpcmVjdGlvbnNEYXRhXCIsXG4gIFwiVHJhdmVsRGlzdGFuY2VcIixcbiAgXCJUcmF2ZWxEaXN0YW5jZUxpc3RcIixcbiAgXCJUcmF2ZWxNZXRob2RcIixcbiAgXCJUcmF2ZWxUaW1lXCIsXG4gIFwiVHJlZUZvcm1cIixcbiAgXCJUcmVlR3JhcGhcIixcbiAgXCJUcmVlR3JhcGhRXCIsXG4gIFwiVHJlZVBsb3RcIixcbiAgXCJUcmVuZFN0eWxlXCIsXG4gIFwiVHJpYW5nbGVcIixcbiAgXCJUcmlhbmdsZUNlbnRlclwiLFxuICBcIlRyaWFuZ2xlQ29uc3RydWN0XCIsXG4gIFwiVHJpYW5nbGVNZWFzdXJlbWVudFwiLFxuICBcIlRyaWFuZ2xlV2F2ZVwiLFxuICBcIlRyaWFuZ3VsYXJEaXN0cmlidXRpb25cIixcbiAgXCJUcmlhbmd1bGF0ZU1lc2hcIixcbiAgXCJUcmlnXCIsXG4gIFwiVHJpZ0V4cGFuZFwiLFxuICBcIlRyaWdGYWN0b3JcIixcbiAgXCJUcmlnRmFjdG9yTGlzdFwiLFxuICBcIlRyaWdnZXJcIixcbiAgXCJUcmlnUmVkdWNlXCIsXG4gIFwiVHJpZ1RvRXhwXCIsXG4gIFwiVHJpbW1lZE1lYW5cIixcbiAgXCJUcmltbWVkVmFyaWFuY2VcIixcbiAgXCJUcm9waWNhbFN0b3JtRGF0YVwiLFxuICBcIlRydWVcIixcbiAgXCJUcnVlUVwiLFxuICBcIlRydW5jYXRlZERpc3RyaWJ1dGlvblwiLFxuICBcIlRydW5jYXRlZFBvbHloZWRyb25cIixcbiAgXCJUc2FsbGlzUUV4cG9uZW50aWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiVHNhbGxpc1FHYXVzc2lhbkRpc3RyaWJ1dGlvblwiLFxuICBcIlRUZXN0XCIsXG4gIFwiVHViZVwiLFxuICBcIlR1YmVCZXppZXJDdXJ2ZUJveFwiLFxuICBcIlR1YmVCZXppZXJDdXJ2ZUJveE9wdGlvbnNcIixcbiAgXCJUdWJlQm94XCIsXG4gIFwiVHViZUJveE9wdGlvbnNcIixcbiAgXCJUdWJlQlNwbGluZUN1cnZlQm94XCIsXG4gIFwiVHViZUJTcGxpbmVDdXJ2ZUJveE9wdGlvbnNcIixcbiAgXCJUdWVzZGF5XCIsXG4gIFwiVHVrZXlMYW1iZGFEaXN0cmlidXRpb25cIixcbiAgXCJUdWtleVdpbmRvd1wiLFxuICBcIlR1bm5lbERhdGFcIixcbiAgXCJUdXBsZXNcIixcbiAgXCJUdXJhbkdyYXBoXCIsXG4gIFwiVHVyaW5nTWFjaGluZVwiLFxuICBcIlR1dHRlUG9seW5vbWlhbFwiLFxuICBcIlR3b1dheVJ1bGVcIixcbiAgXCJUeXBlZFwiLFxuICBcIlR5cGVTcGVjaWZpZXJcIixcbiAgXCJVbmF0ZVFcIixcbiAgXCJVbmNvbXByZXNzXCIsXG4gIFwiVW5jb25zdHJhaW5lZFBhcmFtZXRlcnNcIixcbiAgXCJVbmRlZmluZWRcIixcbiAgXCJVbmRlckJhclwiLFxuICBcIlVuZGVyZmxvd1wiLFxuICBcIlVuZGVybGluZWRcIixcbiAgXCJVbmRlcm92ZXJzY3JpcHRcIixcbiAgXCJVbmRlcm92ZXJzY3JpcHRCb3hcIixcbiAgXCJVbmRlcm92ZXJzY3JpcHRCb3hPcHRpb25zXCIsXG4gIFwiVW5kZXJzY3JpcHRcIixcbiAgXCJVbmRlcnNjcmlwdEJveFwiLFxuICBcIlVuZGVyc2NyaXB0Qm94T3B0aW9uc1wiLFxuICBcIlVuZGVyc2VhRmVhdHVyZURhdGFcIixcbiAgXCJVbmRpcmVjdGVkRWRnZVwiLFxuICBcIlVuZGlyZWN0ZWRHcmFwaFwiLFxuICBcIlVuZGlyZWN0ZWRHcmFwaFFcIixcbiAgXCJVbmRvT3B0aW9uc1wiLFxuICBcIlVuZG9UcmFja2VkVmFyaWFibGVzXCIsXG4gIFwiVW5lcXVhbFwiLFxuICBcIlVuZXF1YWxUb1wiLFxuICBcIlVuZXZhbHVhdGVkXCIsXG4gIFwiVW5pZm9ybURpc3RyaWJ1dGlvblwiLFxuICBcIlVuaWZvcm1HcmFwaERpc3RyaWJ1dGlvblwiLFxuICBcIlVuaWZvcm1Qb2x5aGVkcm9uXCIsXG4gIFwiVW5pZm9ybVN1bURpc3RyaWJ1dGlvblwiLFxuICBcIlVuaW5zdGFsbFwiLFxuICBcIlVuaW9uXCIsXG4gIFwiVW5pb25lZEVudGl0eUNsYXNzXCIsXG4gIFwiVW5pb25QbHVzXCIsXG4gIFwiVW5pcXVlXCIsXG4gIFwiVW5pdGFyeU1hdHJpeFFcIixcbiAgXCJVbml0Qm94XCIsXG4gIFwiVW5pdENvbnZlcnRcIixcbiAgXCJVbml0RGltZW5zaW9uc1wiLFxuICBcIlVuaXRpemVcIixcbiAgXCJVbml0Um9vdFRlc3RcIixcbiAgXCJVbml0U2ltcGxpZnlcIixcbiAgXCJVbml0U3RlcFwiLFxuICBcIlVuaXRTeXN0ZW1cIixcbiAgXCJVbml0VHJpYW5nbGVcIixcbiAgXCJVbml0VmVjdG9yXCIsXG4gIFwiVW5pdFZlY3RvckxheWVyXCIsXG4gIFwiVW5pdHlEaW1lbnNpb25zXCIsXG4gIFwiVW5pdmVyc2VNb2RlbERhdGFcIixcbiAgXCJVbml2ZXJzaXR5RGF0YVwiLFxuICBcIlVuaXhUaW1lXCIsXG4gIFwiVW5wcm90ZWN0XCIsXG4gIFwiVW5yZWdpc3RlckV4dGVybmFsRXZhbHVhdG9yXCIsXG4gIFwiVW5zYW1lUVwiLFxuICBcIlVuc2F2ZWRWYXJpYWJsZXNcIixcbiAgXCJVbnNldFwiLFxuICBcIlVuc2V0U2hhcmVkXCIsXG4gIFwiVW50cmFja2VkVmFyaWFibGVzXCIsXG4gIFwiVXBcIixcbiAgXCJVcEFycm93XCIsXG4gIFwiVXBBcnJvd0JhclwiLFxuICBcIlVwQXJyb3dEb3duQXJyb3dcIixcbiAgXCJVcGRhdGVcIixcbiAgXCJVcGRhdGVEeW5hbWljT2JqZWN0c1wiLFxuICBcIlVwZGF0ZUR5bmFtaWNPYmplY3RzU3luY2hyb25vdXNcIixcbiAgXCJVcGRhdGVJbnRlcnZhbFwiLFxuICBcIlVwZGF0ZVBhY2xldFNpdGVzXCIsXG4gIFwiVXBkYXRlU2VhcmNoSW5kZXhcIixcbiAgXCJVcERvd25BcnJvd1wiLFxuICBcIlVwRXF1aWxpYnJpdW1cIixcbiAgXCJVcHBlckNhc2VRXCIsXG4gIFwiVXBwZXJMZWZ0QXJyb3dcIixcbiAgXCJVcHBlclJpZ2h0QXJyb3dcIixcbiAgXCJVcHBlclRyaWFuZ3VsYXJpemVcIixcbiAgXCJVcHBlclRyaWFuZ3VsYXJNYXRyaXhRXCIsXG4gIFwiVXBzYW1wbGVcIixcbiAgXCJVcFNldFwiLFxuICBcIlVwU2V0RGVsYXllZFwiLFxuICBcIlVwVGVlXCIsXG4gIFwiVXBUZWVBcnJvd1wiLFxuICBcIlVwVG9cIixcbiAgXCJVcFZhbHVlc1wiLFxuICBcIlVSTFwiLFxuICBcIlVSTEJ1aWxkXCIsXG4gIFwiVVJMRGVjb2RlXCIsXG4gIFwiVVJMRGlzcGF0Y2hlclwiLFxuICBcIlVSTERvd25sb2FkXCIsXG4gIFwiVVJMRG93bmxvYWRTdWJtaXRcIixcbiAgXCJVUkxFbmNvZGVcIixcbiAgXCJVUkxFeGVjdXRlXCIsXG4gIFwiVVJMRXhwYW5kXCIsXG4gIFwiVVJMRmV0Y2hcIixcbiAgXCJVUkxGZXRjaEFzeW5jaHJvbm91c1wiLFxuICBcIlVSTFBhcnNlXCIsXG4gIFwiVVJMUXVlcnlEZWNvZGVcIixcbiAgXCJVUkxRdWVyeUVuY29kZVwiLFxuICBcIlVSTFJlYWRcIixcbiAgXCJVUkxSZXNwb25zZVRpbWVcIixcbiAgXCJVUkxTYXZlXCIsXG4gIFwiVVJMU2F2ZUFzeW5jaHJvbm91c1wiLFxuICBcIlVSTFNob3J0ZW5cIixcbiAgXCJVUkxTdWJtaXRcIixcbiAgXCJVc2VHcmFwaGljc1JhbmdlXCIsXG4gIFwiVXNlckRlZmluZWRXYXZlbGV0XCIsXG4gIFwiVXNpbmdcIixcbiAgXCJVc2luZ0Zyb250RW5kXCIsXG4gIFwiVXRpbGl0eUZ1bmN0aW9uXCIsXG4gIFwiVjJHZXRcIixcbiAgXCJWYWxlbmNlRXJyb3JIYW5kbGluZ1wiLFxuICBcIlZhbGlkYXRpb25MZW5ndGhcIixcbiAgXCJWYWxpZGF0aW9uU2V0XCIsXG4gIFwiVmFsdWVcIixcbiAgXCJWYWx1ZUJveFwiLFxuICBcIlZhbHVlQm94T3B0aW9uc1wiLFxuICBcIlZhbHVlRGltZW5zaW9uc1wiLFxuICBcIlZhbHVlRm9ybVwiLFxuICBcIlZhbHVlUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uXCIsXG4gIFwiVmFsdWVRXCIsXG4gIFwiVmFsdWVzXCIsXG4gIFwiVmFsdWVzRGF0YVwiLFxuICBcIlZhcmlhYmxlc1wiLFxuICBcIlZhcmlhbmNlXCIsXG4gIFwiVmFyaWFuY2VFcXVpdmFsZW5jZVRlc3RcIixcbiAgXCJWYXJpYW5jZUVzdGltYXRvckZ1bmN0aW9uXCIsXG4gIFwiVmFyaWFuY2VHYW1tYURpc3RyaWJ1dGlvblwiLFxuICBcIlZhcmlhbmNlVGVzdFwiLFxuICBcIlZlY3RvckFuZ2xlXCIsXG4gIFwiVmVjdG9yQXJvdW5kXCIsXG4gIFwiVmVjdG9yQXNwZWN0UmF0aW9cIixcbiAgXCJWZWN0b3JDb2xvckZ1bmN0aW9uXCIsXG4gIFwiVmVjdG9yQ29sb3JGdW5jdGlvblNjYWxpbmdcIixcbiAgXCJWZWN0b3JEZW5zaXR5UGxvdFwiLFxuICBcIlZlY3RvckdseXBoRGF0YVwiLFxuICBcIlZlY3RvckdyZWF0ZXJcIixcbiAgXCJWZWN0b3JHcmVhdGVyRXF1YWxcIixcbiAgXCJWZWN0b3JMZXNzXCIsXG4gIFwiVmVjdG9yTGVzc0VxdWFsXCIsXG4gIFwiVmVjdG9yTWFya2Vyc1wiLFxuICBcIlZlY3RvclBsb3RcIixcbiAgXCJWZWN0b3JQbG90M0RcIixcbiAgXCJWZWN0b3JQb2ludHNcIixcbiAgXCJWZWN0b3JRXCIsXG4gIFwiVmVjdG9yUmFuZ2VcIixcbiAgXCJWZWN0b3JzXCIsXG4gIFwiVmVjdG9yU2NhbGVcIixcbiAgXCJWZWN0b3JTY2FsaW5nXCIsXG4gIFwiVmVjdG9yU2l6ZXNcIixcbiAgXCJWZWN0b3JTdHlsZVwiLFxuICBcIlZlZVwiLFxuICBcIlZlcmJhdGltXCIsXG4gIFwiVmVyYm9zZVwiLFxuICBcIlZlcmJvc2VDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0XCIsXG4gIFwiVmVyaWZpY2F0aW9uVGVzdFwiLFxuICBcIlZlcmlmeUNvbnZlcmdlbmNlXCIsXG4gIFwiVmVyaWZ5RGVyaXZlZEtleVwiLFxuICBcIlZlcmlmeURpZ2l0YWxTaWduYXR1cmVcIixcbiAgXCJWZXJpZnlGaWxlU2lnbmF0dXJlXCIsXG4gIFwiVmVyaWZ5SW50ZXJwcmV0YXRpb25cIixcbiAgXCJWZXJpZnlTZWN1cml0eUNlcnRpZmljYXRlc1wiLFxuICBcIlZlcmlmeVNvbHV0aW9uc1wiLFxuICBcIlZlcmlmeVRlc3RBc3N1bXB0aW9uc1wiLFxuICBcIlZlcnNpb25cIixcbiAgXCJWZXJzaW9uZWRQcmVmZXJlbmNlc1wiLFxuICBcIlZlcnNpb25OdW1iZXJcIixcbiAgXCJWZXJ0ZXhBZGRcIixcbiAgXCJWZXJ0ZXhDYXBhY2l0eVwiLFxuICBcIlZlcnRleENvbG9yc1wiLFxuICBcIlZlcnRleENvbXBvbmVudFwiLFxuICBcIlZlcnRleENvbm5lY3Rpdml0eVwiLFxuICBcIlZlcnRleENvbnRyYWN0XCIsXG4gIFwiVmVydGV4Q29vcmRpbmF0ZVJ1bGVzXCIsXG4gIFwiVmVydGV4Q29vcmRpbmF0ZXNcIixcbiAgXCJWZXJ0ZXhDb3JyZWxhdGlvblNpbWlsYXJpdHlcIixcbiAgXCJWZXJ0ZXhDb3NpbmVTaW1pbGFyaXR5XCIsXG4gIFwiVmVydGV4Q291bnRcIixcbiAgXCJWZXJ0ZXhDb3ZlclFcIixcbiAgXCJWZXJ0ZXhEYXRhQ29vcmRpbmF0ZXNcIixcbiAgXCJWZXJ0ZXhEZWdyZWVcIixcbiAgXCJWZXJ0ZXhEZWxldGVcIixcbiAgXCJWZXJ0ZXhEaWNlU2ltaWxhcml0eVwiLFxuICBcIlZlcnRleEVjY2VudHJpY2l0eVwiLFxuICBcIlZlcnRleEluQ29tcG9uZW50XCIsXG4gIFwiVmVydGV4SW5EZWdyZWVcIixcbiAgXCJWZXJ0ZXhJbmRleFwiLFxuICBcIlZlcnRleEphY2NhcmRTaW1pbGFyaXR5XCIsXG4gIFwiVmVydGV4TGFiZWxpbmdcIixcbiAgXCJWZXJ0ZXhMYWJlbHNcIixcbiAgXCJWZXJ0ZXhMYWJlbFN0eWxlXCIsXG4gIFwiVmVydGV4TGlzdFwiLFxuICBcIlZlcnRleE5vcm1hbHNcIixcbiAgXCJWZXJ0ZXhPdXRDb21wb25lbnRcIixcbiAgXCJWZXJ0ZXhPdXREZWdyZWVcIixcbiAgXCJWZXJ0ZXhRXCIsXG4gIFwiVmVydGV4UmVuZGVyaW5nRnVuY3Rpb25cIixcbiAgXCJWZXJ0ZXhSZXBsYWNlXCIsXG4gIFwiVmVydGV4U2hhcGVcIixcbiAgXCJWZXJ0ZXhTaGFwZUZ1bmN0aW9uXCIsXG4gIFwiVmVydGV4U2l6ZVwiLFxuICBcIlZlcnRleFN0eWxlXCIsXG4gIFwiVmVydGV4VGV4dHVyZUNvb3JkaW5hdGVzXCIsXG4gIFwiVmVydGV4V2VpZ2h0XCIsXG4gIFwiVmVydGV4V2VpZ2h0ZWRHcmFwaFFcIixcbiAgXCJWZXJ0aWNhbFwiLFxuICBcIlZlcnRpY2FsQmFyXCIsXG4gIFwiVmVydGljYWxGb3JtXCIsXG4gIFwiVmVydGljYWxHYXVnZVwiLFxuICBcIlZlcnRpY2FsU2VwYXJhdG9yXCIsXG4gIFwiVmVydGljYWxTbGlkZXJcIixcbiAgXCJWZXJ0aWNhbFRpbGRlXCIsXG4gIFwiVmlkZW9cIixcbiAgXCJWaWRlb0VuY29kaW5nXCIsXG4gIFwiVmlkZW9FeHRyYWN0RnJhbWVzXCIsXG4gIFwiVmlkZW9GcmFtZUxpc3RcIixcbiAgXCJWaWRlb0ZyYW1lTWFwXCIsXG4gIFwiVmlkZW9QYXVzZVwiLFxuICBcIlZpZGVvUGxheVwiLFxuICBcIlZpZGVvUVwiLFxuICBcIlZpZGVvU3RvcFwiLFxuICBcIlZpZGVvU3RyZWFtXCIsXG4gIFwiVmlkZW9TdHJlYW1zXCIsXG4gIFwiVmlkZW9UaW1lU2VyaWVzXCIsXG4gIFwiVmlkZW9UcmFja3NcIixcbiAgXCJWaWRlb1RyaW1cIixcbiAgXCJWaWV3QW5nbGVcIixcbiAgXCJWaWV3Q2VudGVyXCIsXG4gIFwiVmlld01hdHJpeFwiLFxuICBcIlZpZXdQb2ludFwiLFxuICBcIlZpZXdQb2ludFNlbGVjdG9yU2V0dGluZ3NcIixcbiAgXCJWaWV3UG9ydFwiLFxuICBcIlZpZXdQcm9qZWN0aW9uXCIsXG4gIFwiVmlld1JhbmdlXCIsXG4gIFwiVmlld1ZlY3RvclwiLFxuICBcIlZpZXdWZXJ0aWNhbFwiLFxuICBcIlZpcnR1YWxHcm91cERhdGFcIixcbiAgXCJWaXNpYmxlXCIsXG4gIFwiVmlzaWJsZUNlbGxcIixcbiAgXCJWb2ljZVN0eWxlRGF0YVwiLFxuICBcIlZvaWd0RGlzdHJpYnV0aW9uXCIsXG4gIFwiVm9sY2Fub0RhdGFcIixcbiAgXCJWb2x1bWVcIixcbiAgXCJWb25NaXNlc0Rpc3RyaWJ1dGlvblwiLFxuICBcIlZvcm9ub2lNZXNoXCIsXG4gIFwiV2FpdEFsbFwiLFxuICBcIldhaXRBc3luY2hyb25vdXNUYXNrXCIsXG4gIFwiV2FpdE5leHRcIixcbiAgXCJXYWl0VW50aWxcIixcbiAgXCJXYWtlYnlEaXN0cmlidXRpb25cIixcbiAgXCJXYWxsZW5pdXNIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIldhcmluZ1l1bGVEaXN0cmlidXRpb25cIixcbiAgXCJXYXJwaW5nQ29ycmVzcG9uZGVuY2VcIixcbiAgXCJXYXJwaW5nRGlzdGFuY2VcIixcbiAgXCJXYXRlcnNoZWRDb21wb25lbnRzXCIsXG4gIFwiV2F0c29uVVNxdWFyZVRlc3RcIixcbiAgXCJXYXR0c1N0cm9nYXR6R3JhcGhEaXN0cmlidXRpb25cIixcbiAgXCJXYXZlbGV0QmVzdEJhc2lzXCIsXG4gIFwiV2F2ZWxldEZpbHRlckNvZWZmaWNpZW50c1wiLFxuICBcIldhdmVsZXRJbWFnZVBsb3RcIixcbiAgXCJXYXZlbGV0TGlzdFBsb3RcIixcbiAgXCJXYXZlbGV0TWFwSW5kZXhlZFwiLFxuICBcIldhdmVsZXRNYXRyaXhQbG90XCIsXG4gIFwiV2F2ZWxldFBoaVwiLFxuICBcIldhdmVsZXRQc2lcIixcbiAgXCJXYXZlbGV0U2NhbGVcIixcbiAgXCJXYXZlbGV0U2NhbG9ncmFtXCIsXG4gIFwiV2F2ZWxldFRocmVzaG9sZFwiLFxuICBcIldlYWtseUNvbm5lY3RlZENvbXBvbmVudHNcIixcbiAgXCJXZWFrbHlDb25uZWN0ZWRHcmFwaENvbXBvbmVudHNcIixcbiAgXCJXZWFrbHlDb25uZWN0ZWRHcmFwaFFcIixcbiAgXCJXZWFrU3RhdGlvbmFyaXR5XCIsXG4gIFwiV2VhdGhlckRhdGFcIixcbiAgXCJXZWF0aGVyRm9yZWNhc3REYXRhXCIsXG4gIFwiV2ViQXVkaW9TZWFyY2hcIixcbiAgXCJXZWJFbGVtZW50T2JqZWN0XCIsXG4gIFwiV2ViZXJFXCIsXG4gIFwiV2ViRXhlY3V0ZVwiLFxuICBcIldlYkltYWdlXCIsXG4gIFwiV2ViSW1hZ2VTZWFyY2hcIixcbiAgXCJXZWJTZWFyY2hcIixcbiAgXCJXZWJTZXNzaW9uT2JqZWN0XCIsXG4gIFwiV2ViU2Vzc2lvbnNcIixcbiAgXCJXZWJXaW5kb3dPYmplY3RcIixcbiAgXCJXZWRnZVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIldlaWJ1bGxEaXN0cmlidXRpb25cIixcbiAgXCJXZWllcnN0cmFzc0UxXCIsXG4gIFwiV2VpZXJzdHJhc3NFMlwiLFxuICBcIldlaWVyc3RyYXNzRTNcIixcbiAgXCJXZWllcnN0cmFzc0V0YTFcIixcbiAgXCJXZWllcnN0cmFzc0V0YTJcIixcbiAgXCJXZWllcnN0cmFzc0V0YTNcIixcbiAgXCJXZWllcnN0cmFzc0hhbGZQZXJpb2RzXCIsXG4gIFwiV2VpZXJzdHJhc3NIYWxmUGVyaW9kVzFcIixcbiAgXCJXZWllcnN0cmFzc0hhbGZQZXJpb2RXMlwiLFxuICBcIldlaWVyc3RyYXNzSGFsZlBlcmlvZFczXCIsXG4gIFwiV2VpZXJzdHJhc3NJbnZhcmlhbnRHMlwiLFxuICBcIldlaWVyc3RyYXNzSW52YXJpYW50RzNcIixcbiAgXCJXZWllcnN0cmFzc0ludmFyaWFudHNcIixcbiAgXCJXZWllcnN0cmFzc1BcIixcbiAgXCJXZWllcnN0cmFzc1BQcmltZVwiLFxuICBcIldlaWVyc3RyYXNzU2lnbWFcIixcbiAgXCJXZWllcnN0cmFzc1pldGFcIixcbiAgXCJXZWlnaHRlZEFkamFjZW5jeUdyYXBoXCIsXG4gIFwiV2VpZ2h0ZWRBZGphY2VuY3lNYXRyaXhcIixcbiAgXCJXZWlnaHRlZERhdGFcIixcbiAgXCJXZWlnaHRlZEdyYXBoUVwiLFxuICBcIldlaWdodHNcIixcbiAgXCJXZWxjaFdpbmRvd1wiLFxuICBcIldoZWVsR3JhcGhcIixcbiAgXCJXaGVuRXZlbnRcIixcbiAgXCJXaGljaFwiLFxuICBcIldoaWxlXCIsXG4gIFwiV2hpdGVcIixcbiAgXCJXaGl0ZU5vaXNlUHJvY2Vzc1wiLFxuICBcIldoaXRlUG9pbnRcIixcbiAgXCJXaGl0ZXNwYWNlXCIsXG4gIFwiV2hpdGVzcGFjZUNoYXJhY3RlclwiLFxuICBcIldoaXR0YWtlck1cIixcbiAgXCJXaGl0dGFrZXJXXCIsXG4gIFwiV2llbmVyRmlsdGVyXCIsXG4gIFwiV2llbmVyUHJvY2Vzc1wiLFxuICBcIldpZ25lckRcIixcbiAgXCJXaWduZXJTZW1pY2lyY2xlRGlzdHJpYnV0aW9uXCIsXG4gIFwiV2lraWRhdGFEYXRhXCIsXG4gIFwiV2lraWRhdGFTZWFyY2hcIixcbiAgXCJXaWtpcGVkaWFEYXRhXCIsXG4gIFwiV2lraXBlZGlhU2VhcmNoXCIsXG4gIFwiV2lsa3NXXCIsXG4gIFwiV2lsa3NXVGVzdFwiLFxuICBcIldpbmREaXJlY3Rpb25EYXRhXCIsXG4gIFwiV2luZGluZ0NvdW50XCIsXG4gIFwiV2luZGluZ1BvbHlnb25cIixcbiAgXCJXaW5kb3dDbGlja1NlbGVjdFwiLFxuICBcIldpbmRvd0VsZW1lbnRzXCIsXG4gIFwiV2luZG93RmxvYXRpbmdcIixcbiAgXCJXaW5kb3dGcmFtZVwiLFxuICBcIldpbmRvd0ZyYW1lRWxlbWVudHNcIixcbiAgXCJXaW5kb3dNYXJnaW5zXCIsXG4gIFwiV2luZG93TW92YWJsZVwiLFxuICBcIldpbmRvd09wYWNpdHlcIixcbiAgXCJXaW5kb3dQZXJzaXN0ZW50U3R5bGVzXCIsXG4gIFwiV2luZG93U2VsZWN0ZWRcIixcbiAgXCJXaW5kb3dTaXplXCIsXG4gIFwiV2luZG93U3RhdHVzQXJlYVwiLFxuICBcIldpbmRvd1RpdGxlXCIsXG4gIFwiV2luZG93VG9vbGJhcnNcIixcbiAgXCJXaW5kb3dXaWR0aFwiLFxuICBcIldpbmRTcGVlZERhdGFcIixcbiAgXCJXaW5kVmVjdG9yRGF0YVwiLFxuICBcIldpbnNvcml6ZWRNZWFuXCIsXG4gIFwiV2luc29yaXplZFZhcmlhbmNlXCIsXG4gIFwiV2lzaGFydE1hdHJpeERpc3RyaWJ1dGlvblwiLFxuICBcIldpdGhcIixcbiAgXCJXb2xmcmFtQWxwaGFcIixcbiAgXCJXb2xmcmFtQWxwaGFEYXRlXCIsXG4gIFwiV29sZnJhbUFscGhhUXVhbnRpdHlcIixcbiAgXCJXb2xmcmFtQWxwaGFSZXN1bHRcIixcbiAgXCJXb2xmcmFtTGFuZ3VhZ2VEYXRhXCIsXG4gIFwiV29yZFwiLFxuICBcIldvcmRCb3VuZGFyeVwiLFxuICBcIldvcmRDaGFyYWN0ZXJcIixcbiAgXCJXb3JkQ2xvdWRcIixcbiAgXCJXb3JkQ291bnRcIixcbiAgXCJXb3JkQ291bnRzXCIsXG4gIFwiV29yZERhdGFcIixcbiAgXCJXb3JkRGVmaW5pdGlvblwiLFxuICBcIldvcmRGcmVxdWVuY3lcIixcbiAgXCJXb3JkRnJlcXVlbmN5RGF0YVwiLFxuICBcIldvcmRMaXN0XCIsXG4gIFwiV29yZE9yaWVudGF0aW9uXCIsXG4gIFwiV29yZFNlYXJjaFwiLFxuICBcIldvcmRTZWxlY3Rpb25GdW5jdGlvblwiLFxuICBcIldvcmRTZXBhcmF0b3JzXCIsXG4gIFwiV29yZFNwYWNpbmdzXCIsXG4gIFwiV29yZFN0ZW1cIixcbiAgXCJXb3JkVHJhbnNsYXRpb25cIixcbiAgXCJXb3JraW5nUHJlY2lzaW9uXCIsXG4gIFwiV3JhcEFyb3VuZFwiLFxuICBcIldyaXRlXCIsXG4gIFwiV3JpdGVMaW5lXCIsXG4gIFwiV3JpdGVTdHJpbmdcIixcbiAgXCJXcm9uc2tpYW5cIixcbiAgXCJYTUxFbGVtZW50XCIsXG4gIFwiWE1MT2JqZWN0XCIsXG4gIFwiWE1MVGVtcGxhdGVcIixcbiAgXCJYbm9yXCIsXG4gIFwiWG9yXCIsXG4gIFwiWFlaQ29sb3JcIixcbiAgXCJZZWxsb3dcIixcbiAgXCJZZXN0ZXJkYXlcIixcbiAgXCJZdWxlRGlzc2ltaWxhcml0eVwiLFxuICBcIlplcm5pa2VSXCIsXG4gIFwiWmVyb1N5bW1ldHJpY1wiLFxuICBcIlplcm9UZXN0XCIsXG4gIFwiWmVyb1dpZHRoVGltZXNcIixcbiAgXCJaZXRhXCIsXG4gIFwiWmV0YVplcm9cIixcbiAgXCJaSVBDb2RlRGF0YVwiLFxuICBcIlppcGZEaXN0cmlidXRpb25cIixcbiAgXCJab29tQ2VudGVyXCIsXG4gIFwiWm9vbUZhY3RvclwiLFxuICBcIlpUZXN0XCIsXG4gIFwiWlRyYW5zZm9ybVwiLFxuICBcIiRBYm9ydGVkXCIsXG4gIFwiJEFjdGl2YXRpb25Hcm91cElEXCIsXG4gIFwiJEFjdGl2YXRpb25LZXlcIixcbiAgXCIkQWN0aXZhdGlvblVzZXJSZWdpc3RlcmVkXCIsXG4gIFwiJEFkZE9uc0RpcmVjdG9yeVwiLFxuICBcIiRBbGxvd0RhdGFVcGRhdGVzXCIsXG4gIFwiJEFsbG93RXh0ZXJuYWxDaGFubmVsRnVuY3Rpb25zXCIsXG4gIFwiJEFsbG93SW50ZXJuZXRcIixcbiAgXCIkQXNzZXJ0RnVuY3Rpb25cIixcbiAgXCIkQXNzdW1wdGlvbnNcIixcbiAgXCIkQXN5bmNocm9ub3VzVGFza1wiLFxuICBcIiRBdWRpb0RlY29kZXJzXCIsXG4gIFwiJEF1ZGlvRW5jb2RlcnNcIixcbiAgXCIkQXVkaW9JbnB1dERldmljZXNcIixcbiAgXCIkQXVkaW9PdXRwdXREZXZpY2VzXCIsXG4gIFwiJEJhc2VEaXJlY3RvcnlcIixcbiAgXCIkQmFzZVBhY2xldHNEaXJlY3RvcnlcIixcbiAgXCIkQmF0Y2hJbnB1dFwiLFxuICBcIiRCYXRjaE91dHB1dFwiLFxuICBcIiRCbG9ja2NoYWluQmFzZVwiLFxuICBcIiRCb3hGb3Jtc1wiLFxuICBcIiRCeXRlT3JkZXJpbmdcIixcbiAgXCIkQ2FjaGVCYXNlRGlyZWN0b3J5XCIsXG4gIFwiJENhbmNlbGVkXCIsXG4gIFwiJENoYW5uZWxCYXNlXCIsXG4gIFwiJENoYXJhY3RlckVuY29kaW5nXCIsXG4gIFwiJENoYXJhY3RlckVuY29kaW5nc1wiLFxuICBcIiRDbG91ZEFjY291bnROYW1lXCIsXG4gIFwiJENsb3VkQmFzZVwiLFxuICBcIiRDbG91ZENvbm5lY3RlZFwiLFxuICBcIiRDbG91ZENvbm5lY3Rpb25cIixcbiAgXCIkQ2xvdWRDcmVkaXRzQXZhaWxhYmxlXCIsXG4gIFwiJENsb3VkRXZhbHVhdGlvblwiLFxuICBcIiRDbG91ZEV4cHJlc3Npb25CYXNlXCIsXG4gIFwiJENsb3VkT2JqZWN0TmFtZUZvcm1hdFwiLFxuICBcIiRDbG91ZE9iamVjdFVSTFR5cGVcIixcbiAgXCIkQ2xvdWRSb290RGlyZWN0b3J5XCIsXG4gIFwiJENsb3VkU3ltYm9sQmFzZVwiLFxuICBcIiRDbG91ZFVzZXJJRFwiLFxuICBcIiRDbG91ZFVzZXJVVUlEXCIsXG4gIFwiJENsb3VkVmVyc2lvblwiLFxuICBcIiRDbG91ZFZlcnNpb25OdW1iZXJcIixcbiAgXCIkQ2xvdWRXb2xmcmFtRW5naW5lVmVyc2lvbk51bWJlclwiLFxuICBcIiRDb21tYW5kTGluZVwiLFxuICBcIiRDb21waWxhdGlvblRhcmdldFwiLFxuICBcIiRDb25kaXRpb25Ib2xkXCIsXG4gIFwiJENvbmZpZ3VyZWRLZXJuZWxzXCIsXG4gIFwiJENvbnRleHRcIixcbiAgXCIkQ29udGV4dFBhdGhcIixcbiAgXCIkQ29udHJvbEFjdGl2ZVNldHRpbmdcIixcbiAgXCIkQ29va2llc1wiLFxuICBcIiRDb29raWVTdG9yZVwiLFxuICBcIiRDcmVhdGlvbkRhdGVcIixcbiAgXCIkQ3VycmVudExpbmtcIixcbiAgXCIkQ3VycmVudFRhc2tcIixcbiAgXCIkQ3VycmVudFdlYlNlc3Npb25cIixcbiAgXCIkRGF0YVN0cnVjdHVyZXNcIixcbiAgXCIkRGF0ZVN0cmluZ0Zvcm1hdFwiLFxuICBcIiREZWZhdWx0QXVkaW9JbnB1dERldmljZVwiLFxuICBcIiREZWZhdWx0QXVkaW9PdXRwdXREZXZpY2VcIixcbiAgXCIkRGVmYXVsdEZvbnRcIixcbiAgXCIkRGVmYXVsdEZyb250RW5kXCIsXG4gIFwiJERlZmF1bHRJbWFnaW5nRGV2aWNlXCIsXG4gIFwiJERlZmF1bHRMb2NhbEJhc2VcIixcbiAgXCIkRGVmYXVsdE1haWxib3hcIixcbiAgXCIkRGVmYXVsdE5ldHdvcmtJbnRlcmZhY2VcIixcbiAgXCIkRGVmYXVsdFBhdGhcIixcbiAgXCIkRGVmYXVsdFByb3h5UnVsZXNcIixcbiAgXCIkRGVmYXVsdFN5c3RlbUNyZWRlbnRpYWxTdG9yZVwiLFxuICBcIiREaXNwbGF5XCIsXG4gIFwiJERpc3BsYXlGdW5jdGlvblwiLFxuICBcIiREaXN0cmlidXRlZENvbnRleHRzXCIsXG4gIFwiJER5bmFtaWNFdmFsdWF0aW9uXCIsXG4gIFwiJEVjaG9cIixcbiAgXCIkRW1iZWRDb2RlRW52aXJvbm1lbnRzXCIsXG4gIFwiJEVtYmVkZGFibGVTZXJ2aWNlc1wiLFxuICBcIiRFbnRpdHlTdG9yZXNcIixcbiAgXCIkRXBpbG9nXCIsXG4gIFwiJEV2YWx1YXRpb25DbG91ZEJhc2VcIixcbiAgXCIkRXZhbHVhdGlvbkNsb3VkT2JqZWN0XCIsXG4gIFwiJEV2YWx1YXRpb25FbnZpcm9ubWVudFwiLFxuICBcIiRFeHBvcnRGb3JtYXRzXCIsXG4gIFwiJEV4dGVybmFsSWRlbnRpZmllclR5cGVzXCIsXG4gIFwiJEV4dGVybmFsU3RvcmFnZUJhc2VcIixcbiAgXCIkRmFpbGVkXCIsXG4gIFwiJEZpbmFuY2lhbERhdGFTb3VyY2VcIixcbiAgXCIkRm9udEZhbWlsaWVzXCIsXG4gIFwiJEZvcm1hdFR5cGVcIixcbiAgXCIkRnJvbnRFbmRcIixcbiAgXCIkRnJvbnRFbmRTZXNzaW9uXCIsXG4gIFwiJEdlb0VudGl0eVR5cGVzXCIsXG4gIFwiJEdlb0xvY2F0aW9uXCIsXG4gIFwiJEdlb0xvY2F0aW9uQ2l0eVwiLFxuICBcIiRHZW9Mb2NhdGlvbkNvdW50cnlcIixcbiAgXCIkR2VvTG9jYXRpb25QcmVjaXNpb25cIixcbiAgXCIkR2VvTG9jYXRpb25Tb3VyY2VcIixcbiAgXCIkSGlzdG9yeUxlbmd0aFwiLFxuICBcIiRIb21lRGlyZWN0b3J5XCIsXG4gIFwiJEhUTUxFeHBvcnRSdWxlc1wiLFxuICBcIiRIVFRQQ29va2llc1wiLFxuICBcIiRIVFRQUmVxdWVzdFwiLFxuICBcIiRJZ25vcmVFT0ZcIixcbiAgXCIkSW1hZ2VGb3JtYXR0aW5nV2lkdGhcIixcbiAgXCIkSW1hZ2VSZXNvbHV0aW9uXCIsXG4gIFwiJEltYWdpbmdEZXZpY2VcIixcbiAgXCIkSW1hZ2luZ0RldmljZXNcIixcbiAgXCIkSW1wb3J0Rm9ybWF0c1wiLFxuICBcIiRJbmNvbWluZ01haWxTZXR0aW5nc1wiLFxuICBcIiRJbml0aWFsRGlyZWN0b3J5XCIsXG4gIFwiJEluaXRpYWxpemF0aW9uXCIsXG4gIFwiJEluaXRpYWxpemF0aW9uQ29udGV4dHNcIixcbiAgXCIkSW5wdXRcIixcbiAgXCIkSW5wdXRGaWxlTmFtZVwiLFxuICBcIiRJbnB1dFN0cmVhbU1ldGhvZHNcIixcbiAgXCIkSW5zcGVjdG9yXCIsXG4gIFwiJEluc3RhbGxhdGlvbkRhdGVcIixcbiAgXCIkSW5zdGFsbGF0aW9uRGlyZWN0b3J5XCIsXG4gIFwiJEludGVyZmFjZUVudmlyb25tZW50XCIsXG4gIFwiJEludGVycHJldGVyVHlwZXNcIixcbiAgXCIkSXRlcmF0aW9uTGltaXRcIixcbiAgXCIkS2VybmVsQ291bnRcIixcbiAgXCIkS2VybmVsSURcIixcbiAgXCIkTGFuZ3VhZ2VcIixcbiAgXCIkTGF1bmNoRGlyZWN0b3J5XCIsXG4gIFwiJExpYnJhcnlQYXRoXCIsXG4gIFwiJExpY2Vuc2VFeHBpcmF0aW9uRGF0ZVwiLFxuICBcIiRMaWNlbnNlSURcIixcbiAgXCIkTGljZW5zZVByb2Nlc3Nlc1wiLFxuICBcIiRMaWNlbnNlU2VydmVyXCIsXG4gIFwiJExpY2Vuc2VTdWJwcm9jZXNzZXNcIixcbiAgXCIkTGljZW5zZVR5cGVcIixcbiAgXCIkTGluZVwiLFxuICBcIiRMaW5rZWRcIixcbiAgXCIkTGlua1N1cHBvcnRlZFwiLFxuICBcIiRMb2FkZWRGaWxlc1wiLFxuICBcIiRMb2NhbEJhc2VcIixcbiAgXCIkTG9jYWxTeW1ib2xCYXNlXCIsXG4gIFwiJE1hY2hpbmVBZGRyZXNzZXNcIixcbiAgXCIkTWFjaGluZURvbWFpblwiLFxuICBcIiRNYWNoaW5lRG9tYWluc1wiLFxuICBcIiRNYWNoaW5lRXBzaWxvblwiLFxuICBcIiRNYWNoaW5lSURcIixcbiAgXCIkTWFjaGluZU5hbWVcIixcbiAgXCIkTWFjaGluZVByZWNpc2lvblwiLFxuICBcIiRNYWNoaW5lVHlwZVwiLFxuICBcIiRNYXhFeHRyYVByZWNpc2lvblwiLFxuICBcIiRNYXhMaWNlbnNlUHJvY2Vzc2VzXCIsXG4gIFwiJE1heExpY2Vuc2VTdWJwcm9jZXNzZXNcIixcbiAgXCIkTWF4TWFjaGluZU51bWJlclwiLFxuICBcIiRNYXhOdW1iZXJcIixcbiAgXCIkTWF4UGllY2V3aXNlQ2FzZXNcIixcbiAgXCIkTWF4UHJlY2lzaW9uXCIsXG4gIFwiJE1heFJvb3REZWdyZWVcIixcbiAgXCIkTWVzc2FnZUdyb3Vwc1wiLFxuICBcIiRNZXNzYWdlTGlzdFwiLFxuICBcIiRNZXNzYWdlUHJlUHJpbnRcIixcbiAgXCIkTWVzc2FnZXNcIixcbiAgXCIkTWluTWFjaGluZU51bWJlclwiLFxuICBcIiRNaW5OdW1iZXJcIixcbiAgXCIkTWlub3JSZWxlYXNlTnVtYmVyXCIsXG4gIFwiJE1pblByZWNpc2lvblwiLFxuICBcIiRNb2JpbGVQaG9uZVwiLFxuICBcIiRNb2R1bGVOdW1iZXJcIixcbiAgXCIkTmV0d29ya0Nvbm5lY3RlZFwiLFxuICBcIiROZXR3b3JrSW50ZXJmYWNlc1wiLFxuICBcIiROZXR3b3JrTGljZW5zZVwiLFxuICBcIiROZXdNZXNzYWdlXCIsXG4gIFwiJE5ld1N5bWJvbFwiLFxuICBcIiROb3RlYm9va0lubGluZVN0b3JhZ2VMaW1pdFwiLFxuICBcIiROb3RlYm9va3NcIixcbiAgXCIkTm9WYWx1ZVwiLFxuICBcIiROdW1iZXJNYXJrc1wiLFxuICBcIiRPZmZcIixcbiAgXCIkT3BlcmF0aW5nU3lzdGVtXCIsXG4gIFwiJE91dHB1dFwiLFxuICBcIiRPdXRwdXRGb3Jtc1wiLFxuICBcIiRPdXRwdXRTaXplTGltaXRcIixcbiAgXCIkT3V0cHV0U3RyZWFtTWV0aG9kc1wiLFxuICBcIiRQYWNrYWdlc1wiLFxuICBcIiRQYXJlbnRMaW5rXCIsXG4gIFwiJFBhcmVudFByb2Nlc3NJRFwiLFxuICBcIiRQYXNzd29yZEZpbGVcIixcbiAgXCIkUGF0Y2hMZXZlbElEXCIsXG4gIFwiJFBhdGhcIixcbiAgXCIkUGF0aG5hbWVTZXBhcmF0b3JcIixcbiAgXCIkUGVyZm9ybWFuY2VHb2FsXCIsXG4gIFwiJFBlcm1pc3Npb25zXCIsXG4gIFwiJFBlcm1pc3Npb25zR3JvdXBCYXNlXCIsXG4gIFwiJFBlcnNpc3RlbmNlQmFzZVwiLFxuICBcIiRQZXJzaXN0ZW5jZVBhdGhcIixcbiAgXCIkUGlwZVN1cHBvcnRlZFwiLFxuICBcIiRQbG90VGhlbWVcIixcbiAgXCIkUG9zdFwiLFxuICBcIiRQcmVcIixcbiAgXCIkUHJlZmVyZW5jZXNEaXJlY3RvcnlcIixcbiAgXCIkUHJlSW5pdGlhbGl6YXRpb25cIixcbiAgXCIkUHJlUHJpbnRcIixcbiAgXCIkUHJlUmVhZFwiLFxuICBcIiRQcmludEZvcm1zXCIsXG4gIFwiJFByaW50TGl0ZXJhbFwiLFxuICBcIiRQcmludG91dDNEUHJldmlld2VyXCIsXG4gIFwiJFByb2Nlc3NJRFwiLFxuICBcIiRQcm9jZXNzb3JDb3VudFwiLFxuICBcIiRQcm9jZXNzb3JUeXBlXCIsXG4gIFwiJFByb2R1Y3RJbmZvcm1hdGlvblwiLFxuICBcIiRQcm9ncmFtTmFtZVwiLFxuICBcIiRQdWJsaXNoZXJJRFwiLFxuICBcIiRSYW5kb21TdGF0ZVwiLFxuICBcIiRSZWN1cnNpb25MaW1pdFwiLFxuICBcIiRSZWdpc3RlcmVkRGV2aWNlQ2xhc3Nlc1wiLFxuICBcIiRSZWdpc3RlcmVkVXNlck5hbWVcIixcbiAgXCIkUmVsZWFzZU51bWJlclwiLFxuICBcIiRSZXF1ZXN0ZXJBZGRyZXNzXCIsXG4gIFwiJFJlcXVlc3RlcldvbGZyYW1JRFwiLFxuICBcIiRSZXF1ZXN0ZXJXb2xmcmFtVVVJRFwiLFxuICBcIiRSb290RGlyZWN0b3J5XCIsXG4gIFwiJFNjaGVkdWxlZFRhc2tcIixcbiAgXCIkU2NyaXB0Q29tbWFuZExpbmVcIixcbiAgXCIkU2NyaXB0SW5wdXRTdHJpbmdcIixcbiAgXCIkU2VjdXJlZEF1dGhlbnRpY2F0aW9uS2V5VG9rZW5zXCIsXG4gIFwiJFNlcnZpY2VDcmVkaXRzQXZhaWxhYmxlXCIsXG4gIFwiJFNlcnZpY2VzXCIsXG4gIFwiJFNlc3Npb25JRFwiLFxuICBcIiRTZXRQYXJlbnRMaW5rXCIsXG4gIFwiJFNoYXJlZEZ1bmN0aW9uc1wiLFxuICBcIiRTaGFyZWRWYXJpYWJsZXNcIixcbiAgXCIkU291bmREaXNwbGF5XCIsXG4gIFwiJFNvdW5kRGlzcGxheUZ1bmN0aW9uXCIsXG4gIFwiJFNvdXJjZUxpbmtcIixcbiAgXCIkU1NIQXV0aGVudGljYXRpb25cIixcbiAgXCIkU3VidGl0bGVEZWNvZGVyc1wiLFxuICBcIiRTdWJ0aXRsZUVuY29kZXJzXCIsXG4gIFwiJFN1bW1hcnlCb3hEYXRhU2l6ZUxpbWl0XCIsXG4gIFwiJFN1cHByZXNzSW5wdXRGb3JtSGVhZHNcIixcbiAgXCIkU3luY2hyb25vdXNFdmFsdWF0aW9uXCIsXG4gIFwiJFN5bnRheEhhbmRsZXJcIixcbiAgXCIkU3lzdGVtXCIsXG4gIFwiJFN5c3RlbUNoYXJhY3RlckVuY29kaW5nXCIsXG4gIFwiJFN5c3RlbUNyZWRlbnRpYWxTdG9yZVwiLFxuICBcIiRTeXN0ZW1JRFwiLFxuICBcIiRTeXN0ZW1NZW1vcnlcIixcbiAgXCIkU3lzdGVtU2hlbGxcIixcbiAgXCIkU3lzdGVtVGltZVpvbmVcIixcbiAgXCIkU3lzdGVtV29yZExlbmd0aFwiLFxuICBcIiRUZW1wbGF0ZVBhdGhcIixcbiAgXCIkVGVtcG9yYXJ5RGlyZWN0b3J5XCIsXG4gIFwiJFRlbXBvcmFyeVByZWZpeFwiLFxuICBcIiRUZXN0RmlsZU5hbWVcIixcbiAgXCIkVGV4dFN0eWxlXCIsXG4gIFwiJFRpbWVkT3V0XCIsXG4gIFwiJFRpbWVVbml0XCIsXG4gIFwiJFRpbWVab25lXCIsXG4gIFwiJFRpbWVab25lRW50aXR5XCIsXG4gIFwiJFRvcERpcmVjdG9yeVwiLFxuICBcIiRUcmFjZU9mZlwiLFxuICBcIiRUcmFjZU9uXCIsXG4gIFwiJFRyYWNlUGF0dGVyblwiLFxuICBcIiRUcmFjZVBvc3RBY3Rpb25cIixcbiAgXCIkVHJhY2VQcmVBY3Rpb25cIixcbiAgXCIkVW5pdFN5c3RlbVwiLFxuICBcIiRVcmdlbnRcIixcbiAgXCIkVXNlckFkZE9uc0RpcmVjdG9yeVwiLFxuICBcIiRVc2VyQWdlbnRMYW5ndWFnZXNcIixcbiAgXCIkVXNlckFnZW50TWFjaGluZVwiLFxuICBcIiRVc2VyQWdlbnROYW1lXCIsXG4gIFwiJFVzZXJBZ2VudE9wZXJhdGluZ1N5c3RlbVwiLFxuICBcIiRVc2VyQWdlbnRTdHJpbmdcIixcbiAgXCIkVXNlckFnZW50VmVyc2lvblwiLFxuICBcIiRVc2VyQmFzZURpcmVjdG9yeVwiLFxuICBcIiRVc2VyQmFzZVBhY2xldHNEaXJlY3RvcnlcIixcbiAgXCIkVXNlckRvY3VtZW50c0RpcmVjdG9yeVwiLFxuICBcIiRVc2VybmFtZVwiLFxuICBcIiRVc2VyTmFtZVwiLFxuICBcIiRVc2VyVVJMQmFzZVwiLFxuICBcIiRWZXJzaW9uXCIsXG4gIFwiJFZlcnNpb25OdW1iZXJcIixcbiAgXCIkVmlkZW9EZWNvZGVyc1wiLFxuICBcIiRWaWRlb0VuY29kZXJzXCIsXG4gIFwiJFZvaWNlU3R5bGVzXCIsXG4gIFwiJFdvbGZyYW1Eb2N1bWVudHNEaXJlY3RvcnlcIixcbiAgXCIkV29sZnJhbUlEXCIsXG4gIFwiJFdvbGZyYW1VVUlEXCJcbl07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbmFsKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJygnLCByZSwgJyk/Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogV29sZnJhbSBMYW5ndWFnZVxuRGVzY3JpcHRpb246IFRoZSBXb2xmcmFtIExhbmd1YWdlIGlzIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB1c2VkIGluIFdvbGZyYW0gTWF0aGVtYXRpY2EsIGEgbW9kZXJuIHRlY2huaWNhbCBjb21wdXRpbmcgc3lzdGVtIHNwYW5uaW5nIG1vc3QgYXJlYXMgb2YgdGVjaG5pY2FsIGNvbXB1dGluZy5cbkF1dGhvcnM6IFBhdHJpY2sgU2NoZWliZSA8cGF0cmlja0BoYWxpcnV0YW4uZGU+LCBSb2JlcnQgSmFjb2Jzb24gPHJvYmVydGphY29ic29uQGFjbS5vcmc+XG5XZWJzaXRlOiBodHRwczovL3d3dy53b2xmcmFtLmNvbS9tYXRoZW1hdGljYS9cbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gbWF0aGVtYXRpY2EoaGxqcykge1xuICAvKlxuICBUaGlzIHJhdGhlciBzY2FyeSBsb29raW5nIG1hdGNoaW5nIG9mIE1hdGhlbWF0aWNhIG51bWJlcnMgaXMgY2FyZWZ1bGx5IGV4cGxhaW5lZCBieSBSb2JlcnQgSmFjb2Jzb24gaGVyZTpcbiAgaHR0cHM6Ly93bHRvb2xzLmdpdGh1Yi5pby9MYW5ndWFnZVNwZWMvU3BlY2lmaWNhdGlvbi9TeW50YXgvTnVtYmVyLXJlcHJlc2VudGF0aW9ucy9cbiAgICovXG4gIGNvbnN0IEJBU0VfUkUgPSAvKFsyLTldfFsxLTJdXFxkfFszXVswLTVdKVxcXlxcXi87XG4gIGNvbnN0IEJBU0VfRElHSVRTX1JFID0gLyhcXHcqXFwuXFx3K3xcXHcrXFwuXFx3KnxcXHcrKS87XG4gIGNvbnN0IE5VTUJFUl9SRSA9IC8oXFxkKlxcLlxcZCt8XFxkK1xcLlxcZCp8XFxkKykvO1xuICBjb25zdCBCQVNFX05VTUJFUl9SRSA9IGVpdGhlcihjb25jYXQoQkFTRV9SRSwgQkFTRV9ESUdJVFNfUkUpLCBOVU1CRVJfUkUpO1xuXG4gIGNvbnN0IEFDQ1VSQUNZX1JFID0gL2BgWystXT8oXFxkKlxcLlxcZCt8XFxkK1xcLlxcZCp8XFxkKykvO1xuICBjb25zdCBQUkVDSVNJT05fUkUgPSAvYChbKy1dPyhcXGQqXFwuXFxkK3xcXGQrXFwuXFxkKnxcXGQrKSk/LztcbiAgY29uc3QgQVBQUk9YSU1BVEVfTlVNQkVSX1JFID0gZWl0aGVyKEFDQ1VSQUNZX1JFLCBQUkVDSVNJT05fUkUpO1xuXG4gIGNvbnN0IFNDSUVOVElGSUNfTk9UQVRJT05fUkUgPSAvXFwqXFxeWystXT9cXGQrLztcblxuICBjb25zdCBNQVRIRU1BVElDQV9OVU1CRVJfUkUgPSBjb25jYXQoXG4gICAgQkFTRV9OVU1CRVJfUkUsXG4gICAgb3B0aW9uYWwoQVBQUk9YSU1BVEVfTlVNQkVSX1JFKSxcbiAgICBvcHRpb25hbChTQ0lFTlRJRklDX05PVEFUSU9OX1JFKVxuICApO1xuXG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IE1BVEhFTUFUSUNBX05VTUJFUl9SRVxuICB9O1xuXG4gIGNvbnN0IFNZTUJPTF9SRSA9IC9bYS16QS1aJF1bYS16QS1aMC05JF0qLztcbiAgY29uc3QgU1lTVEVNX1NZTUJPTFNfU0VUID0gbmV3IFNldChTWVNURU1fU1lNQk9MUyk7XG4gIC8qKiBAdHlwZSB7TW9kZX0gKi9cbiAgY29uc3QgU1lNQk9MUyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdGluLXN5bWJvbCcsXG4gICAgICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgICAgIC8vIGZvciBwZXJmb3JtYW5jZSBvdXQgb2YgZmVhciBvZiByZWdleC5laXRoZXIoLi4uTWF0aGVtYXRpY2EuU1lTVEVNX1NZTUJPTFMpXG4gICAgICAgIFwib246YmVnaW5cIjogKG1hdGNoLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghU1lTVEVNX1NZTUJPTFNfU0VULmhhcyhtYXRjaFswXSkpIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgYmVnaW46IFNZTUJPTF9SRVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBOQU1FRF9DSEFSQUNURVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZWQtY2hhcmFjdGVyJyxcbiAgICBiZWdpbjogL1xcXFxcXFtbJGEtekEtWl1bJGEtekEtWjAtOV0rXFxdL1xuICB9O1xuXG4gIGNvbnN0IE9QRVJBVE9SUyA9IHtcbiAgICBjbGFzc05hbWU6ICdvcGVyYXRvcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiAvWytcXC0qLyw7LjpAfj0+PCZ8X2AnXj8hJV0rL1xuICB9O1xuICBjb25zdCBQQVRURVJOUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXR0ZXJuJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IC8oW2EtekEtWiRdW2EtekEtWjAtOSRdKik/XysoW2EtekEtWiRdW2EtekEtWjAtOSRdKik/L1xuICB9O1xuXG4gIGNvbnN0IFNMT1RTID0ge1xuICAgIGNsYXNzTmFtZTogJ3Nsb3QnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogLyNbYS16QS1aJF1bYS16QS1aMC05JF0qfCMrWzAtOV0/L1xuICB9O1xuXG4gIGNvbnN0IEJSQUNFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdicmFjZScsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiAvW1tcXF0oKXt9XS9cbiAgfTtcblxuICBjb25zdCBNRVNTQUdFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXNzYWdlLW5hbWUnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogY29uY2F0KFwiOjpcIiwgU1lNQk9MX1JFKVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ01hdGhlbWF0aWNhJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnbW1hJyxcbiAgICAgICd3bCdcbiAgICBdLFxuICAgIGNsYXNzTmFtZUFsaWFzZXM6IHtcbiAgICAgIGJyYWNlOiAncHVuY3R1YXRpb24nLFxuICAgICAgcGF0dGVybjogJ3R5cGUnLFxuICAgICAgc2xvdDogJ3R5cGUnLFxuICAgICAgc3ltYm9sOiAndmFyaWFibGUnLFxuICAgICAgJ25hbWVkLWNoYXJhY3Rlcic6ICd2YXJpYWJsZScsXG4gICAgICAnYnVpbHRpbi1zeW1ib2wnOiAnYnVpbHRfaW4nLFxuICAgICAgJ21lc3NhZ2UtbmFtZSc6ICdzdHJpbmcnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKC9cXChcXCovLCAvXFwqXFwpLywge1xuICAgICAgICBjb250YWluczogWyAnc2VsZicgXVxuICAgICAgfSksXG4gICAgICBQQVRURVJOUyxcbiAgICAgIFNMT1RTLFxuICAgICAgTUVTU0FHRVMsXG4gICAgICBTWU1CT0xTLFxuICAgICAgTkFNRURfQ0hBUkFDVEVSLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIE5VTUJFUlMsXG4gICAgICBPUEVSQVRPUlMsXG4gICAgICBCUkFDRVNcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0aGVtYXRpY2E7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogTWF0bGFiXG5BdXRob3I6IERlbmlzIEJhcmRhZHltIDxiYXJkYWR5bWNoaWtAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBFdWdlbmUgTml6aGliaXRza3kgPG5pemhpYml0c2t5QHlhLnJ1PiwgRWdvciBSb2dvdiA8ZS5yb2dvdkBwb3N0Z3Jlc3Byby5ydT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3Lm1hdGh3b3Jrcy5jb20vcHJvZHVjdHMvbWF0bGFiLmh0bWxcbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG4vKlxuICBGb3JtYWwgc3ludGF4IGlzIG5vdCBwdWJsaXNoZWQsIGhlbHBmdWwgbGluazpcbiAgaHR0cHM6Ly9naXRodWIuY29tL2tvcm5pbG92YS1sL21hdGxhYi1JbnRlbGxpSi1wbHVnaW4vYmxvYi9tYXN0ZXIvc3JjL21haW4vZ3JhbW1hci9NYXRsYWIuYm5mXG4qL1xuZnVuY3Rpb24gbWF0bGFiKGhsanMpIHtcblxuICB2YXIgVFJBTlNQT1NFX1JFID0gJyhcXCd8XFxcXC5cXCcpKyc7XG4gIHZhciBUUkFOU1BPU0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiBUUkFOU1BPU0VfUkUgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNYXRsYWInLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYXJndW1lbnRzIGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3NkZWYgY29udGludWUgZWxzZSBlbHNlaWYgZW5kIGVudW1lcmF0aW9uIGV2ZW50cyBmb3IgZnVuY3Rpb24gJyArXG4gICAgICAgICdnbG9iYWwgaWYgbWV0aG9kcyBvdGhlcndpc2UgcGFyZm9yIHBlcnNpc3RlbnQgcHJvcGVydGllcyByZXR1cm4gc3BtZCBzd2l0Y2ggdHJ5IHdoaWxlJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnc2luIHNpbmQgc2luaCBhc2luIGFzaW5kIGFzaW5oIGNvcyBjb3NkIGNvc2ggYWNvcyBhY29zZCBhY29zaCB0YW4gdGFuZCB0YW5oIGF0YW4gJyArXG4gICAgICAgICdhdGFuZCBhdGFuMiBhdGFuaCBzZWMgc2VjZCBzZWNoIGFzZWMgYXNlY2QgYXNlY2ggY3NjIGNzY2QgY3NjaCBhY3NjIGFjc2NkIGFjc2NoIGNvdCAnICtcbiAgICAgICAgJ2NvdGQgY290aCBhY290IGFjb3RkIGFjb3RoIGh5cG90IGV4cCBleHBtMSBsb2cgbG9nMXAgbG9nMTAgbG9nMiBwb3cyIHJlYWxwb3cgcmVhbGxvZyAnICtcbiAgICAgICAgJ3JlYWxzcXJ0IHNxcnQgbnRocm9vdCBuZXh0cG93MiBhYnMgYW5nbGUgY29tcGxleCBjb25qIGltYWcgcmVhbCB1bndyYXAgaXNyZWFsICcgK1xuICAgICAgICAnY3BseHBhaXIgZml4IGZsb29yIGNlaWwgcm91bmQgbW9kIHJlbSBzaWduIGFpcnkgYmVzc2VsaiBiZXNzZWx5IGJlc3NlbGggYmVzc2VsaSAnICtcbiAgICAgICAgJ2Jlc3NlbGsgYmV0YSBiZXRhaW5jIGJldGFsbiBlbGxpcGogZWxsaXBrZSBlcmYgZXJmYyBlcmZjeCBlcmZpbnYgZXhwaW50IGdhbW1hICcgK1xuICAgICAgICAnZ2FtbWFpbmMgZ2FtbWFsbiBwc2kgbGVnZW5kcmUgY3Jvc3MgZG90IGZhY3RvciBpc3ByaW1lIHByaW1lcyBnY2QgbGNtIHJhdCByYXRzIHBlcm1zICcgK1xuICAgICAgICAnbmNob29zZWsgZmFjdG9yaWFsIGNhcnQyc3BoIGNhcnQycG9sIHBvbDJjYXJ0IHNwaDJjYXJ0IGhzdjJyZ2IgcmdiMmhzdiB6ZXJvcyBvbmVzICcgK1xuICAgICAgICAnZXllIHJlcG1hdCByYW5kIHJhbmRuIGxpbnNwYWNlIGxvZ3NwYWNlIGZyZXFzcGFjZSBtZXNoZ3JpZCBhY2N1bWFycmF5IHNpemUgbGVuZ3RoICcgK1xuICAgICAgICAnbmRpbXMgbnVtZWwgZGlzcCBpc2VtcHR5IGlzZXF1YWwgaXNlcXVhbHdpdGhlcXVhbG5hbnMgY2F0IHJlc2hhcGUgZGlhZyBibGtkaWFnIHRyaWwgJyArXG4gICAgICAgICd0cml1IGZsaXBsciBmbGlwdWQgZmxpcGRpbSByb3Q5MCBmaW5kIHN1YjJpbmQgaW5kMnN1YiBic3hmdW4gbmRncmlkIHBlcm11dGUgaXBlcm11dGUgJyArXG4gICAgICAgICdzaGlmdGRpbSBjaXJjc2hpZnQgc3F1ZWV6ZSBpc3NjYWxhciBpc3ZlY3RvciBhbnMgZXBzIHJlYWxtYXggcmVhbG1pbiBwaSBpfDAgaW5mIG5hbiAnICtcbiAgICAgICAgJ2lzbmFuIGlzaW5mIGlzZmluaXRlIGp8MCB3aHkgY29tcGFuIGdhbGxlcnkgaGFkYW1hcmQgaGFua2VsIGhpbGIgaW52aGlsYiBtYWdpYyBwYXNjYWwgJyArXG4gICAgICAgICdyb3NzZXIgdG9lcGxpdHogdmFuZGVyIHdpbGtpbnNvbiBtYXggbWluIG5hbm1heCBuYW5taW4gbWVhbiBuYW5tZWFuIHR5cGUgdGFibGUgJyArXG4gICAgICAgICdyZWFkdGFibGUgd3JpdGV0YWJsZSBzb3J0cm93cyBzb3J0IGZpZ3VyZSBwbG90IHBsb3QzIHNjYXR0ZXIgc2NhdHRlcjMgY2VsbGZ1biAnICtcbiAgICAgICAgJ2xlZ2VuZCBpbnRlcnNlY3QgaXNtZW1iZXIgcHJvY3J1c3RlcyBob2xkIG51bTJjZWxsICdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcoLy98XCJ8I3wvXFxcXCp8XFxcXHMrL1xcXFx3KyknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXSd9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvdHJ1ZXxmYWxzZS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgc3RhcnRzOiBUUkFOU1BPU0VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2EtekEtWl1bYS16QS1aXzAtOV0qJyArIFRSQU5TUE9TRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7YmVnaW46ICdcXCdcXCcnfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxdfFxcfXxcXCkvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHN0YXJ0czogVFJBTlNQT1NFXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7YmVnaW46ICdcIlwiJ31cbiAgICAgICAgXSxcbiAgICAgICAgc3RhcnRzOiBUUkFOU1BPU0VcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJ15cXFxccyolXFxcXHtcXFxccyokJywgJ15cXFxccyolXFxcXH1cXFxccyokJyksXG4gICAgICBobGpzLkNPTU1FTlQoJyUnLCAnJCcpXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGxhYjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBNYXhpbWFcbkF1dGhvcjogUm9iZXJ0IERvZGllciA8cm9iZXJ0LmRvZGllckBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwOi8vbWF4aW1hLnNvdXJjZWZvcmdlLm5ldFxuQ2F0ZWdvcnk6IHNjaWVudGlmaWNcbiovXG5cbmZ1bmN0aW9uIG1heGltYShobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID1cbiAgICAnaWYgdGhlbiBlbHNlIGVsc2VpZiBmb3IgdGhydSBkbyB3aGlsZSB1bmxlc3Mgc3RlcCBpbiBhbmQgb3Igbm90JztcbiAgY29uc3QgTElURVJBTFMgPVxuICAgICd0cnVlIGZhbHNlIHVua25vd24gaW5mIG1pbmYgaW5kIHVuZCAlZSAlaSAlcGkgJXBoaSAlZ2FtbWEnO1xuICBjb25zdCBCVUlMVElOX0ZVTkNUSU9OUyA9XG4gICAgJyBhYmFzZXAgYWJzIGFic2ludCBhYnNvbHV0ZV9yZWFsX3RpbWUgYWNvcyBhY29zaCBhY290IGFjb3RoIGFjc2MgYWNzY2ggYWN0aXZhdGUnICtcbiAgICAnIGFkZGNvbCBhZGRfZWRnZSBhZGRfZWRnZXMgYWRkbWF0cmljZXMgYWRkcm93IGFkZF92ZXJ0ZXggYWRkX3ZlcnRpY2VzIGFkamFjZW5jeV9tYXRyaXgnICtcbiAgICAnIGFkam9pbiBhZGpvaW50IGFmIGFnZCBhaXJ5IGFpcnlfYWkgYWlyeV9iaSBhaXJ5X2RhaSBhaXJ5X2RiaSBhbGdzeXMgYWxnX3R5cGUnICtcbiAgICAnIGFsaWFzIGFsbHJvb3RzIGFscGhhY2hhcnAgYWxwaGFudW1lcmljcCBhbW9ydGl6YXRpb24gJWFuZCBhbm51aXR5X2Z2JyArXG4gICAgJyBhbm51aXR5X3B2IGFudGlkIGFudGlkaWZmIEFudGlEaWZmZXJlbmNlIGFwcGVuZCBhcHBlbmRmaWxlIGFwcGx5IGFwcGx5MSBhcHBseTInICtcbiAgICAnIGFwcGx5YjEgYXByb3BvcyBhcmdzIGFyaXRfYW1vcnRpemF0aW9uIGFyaXRobWV0aWMgYXJpdGhzdW0gYXJyYXkgYXJyYXlhcHBseScgK1xuICAgICcgYXJyYXlpbmZvIGFycmF5bWFrZSBhcnJheXNldGFwcGx5IGFzY2lpIGFzZWMgYXNlY2ggYXNpbiBhc2luaCBhc2tpbnRlZ2VyJyArXG4gICAgJyBhc2tzaWduIGFzc29jIGFzc29jX2xlZ2VuZHJlX3AgYXNzb2NfbGVnZW5kcmVfcSBhc3N1bWUgYXNzdW1lX2V4dGVybmFsX2J5dGVfb3JkZXInICtcbiAgICAnIGFzeW1wYSBhdCBhdGFuIGF0YW4yIGF0YW5oIGF0ZW5zaW1wIGF0b20gYXR2YWx1ZSBhdWdjb2VmbWF0cml4IGF1Z21lbnRlZF9sYWdyYW5naWFuX21ldGhvZCcgK1xuICAgICcgYXYgYXZlcmFnZV9kZWdyZWUgYmFja3RyYWNlIGJhcnMgYmFyc3Bsb3QgYmFyc3Bsb3RfZGVzY3JpcHRpb24gYmFzZTY0IGJhc2U2NF9kZWNvZGUnICtcbiAgICAnIGJhc2hpbmRpY2VzIGJhdGNoIGJhdGNobG9hZCBiYzIgYmR2YWMgYmVsbG4gYmVuZWZpdF9jb3N0IGJlcm4gYmVybnBvbHkgYmVybnN0ZWluX2FwcHJveCcgK1xuICAgICcgYmVybnN0ZWluX2V4cGFuZCBiZXJuc3RlaW5fcG9seSBiZXNzZWwgYmVzc2VsX2kgYmVzc2VsX2ogYmVzc2VsX2sgYmVzc2VsX3NpbXBsaWZ5JyArXG4gICAgJyBiZXNzZWxfeSBiZXRhIGJldGFfaW5jb21wbGV0ZSBiZXRhX2luY29tcGxldGVfZ2VuZXJhbGl6ZWQgYmV0YV9pbmNvbXBsZXRlX3JlZ3VsYXJpemVkJyArXG4gICAgJyBiZXpvdXQgYmZhbGxyb290cyBiZmZhYyBiZl9maW5kX3Jvb3QgYmZfZm1pbl9jb2J5bGEgYmZoemV0YSBiZmxvYXQgYmZsb2F0cCcgK1xuICAgICcgYmZwc2kgYmZwc2kwIGJmemV0YSBiaWNvbm5lY3RlZF9jb21wb25lbnRzIGJpbWV0cmljIGJpbm9taWFsIGJpcGFydGl0aW9uJyArXG4gICAgJyBibG9jayBibG9ja21hdHJpeHAgYm9kZV9nYWluIGJvZGVfcGhhc2UgYm90aGNvZWYgYm94IGJveHBsb3QgYm94cGxvdF9kZXNjcmlwdGlvbicgK1xuICAgICcgYnJlYWsgYnVnX3JlcG9ydCBidWlsZF9pbmZvfDEwIGJ1aWxkcSBidWlsZF9zYW1wbGUgYnVybiBjYWJzIGNhbmZvcm0gY2FudGVuJyArXG4gICAgJyBjYXJkaW5hbGl0eSBjYXJnIGNhcnRhbiBjYXJ0ZXNpYW5fcHJvZHVjdCBjYXRjaCBjYXVjaHlfbWF0cml4IGNiZmZhYyBjZGZfYmVybm91bGxpJyArXG4gICAgJyBjZGZfYmV0YSBjZGZfYmlub21pYWwgY2RmX2NhdWNoeSBjZGZfY2hpMiBjZGZfY29udGludW91c191bmlmb3JtIGNkZl9kaXNjcmV0ZV91bmlmb3JtJyArXG4gICAgJyBjZGZfZXhwIGNkZl9mIGNkZl9nYW1tYSBjZGZfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgY2RmX2dlb21ldHJpYyBjZGZfZ3VtYmVsJyArXG4gICAgJyBjZGZfaHlwZXJnZW9tZXRyaWMgY2RmX2xhcGxhY2UgY2RmX2xvZ2lzdGljIGNkZl9sb2dub3JtYWwgY2RmX25lZ2F0aXZlX2Jpbm9taWFsJyArXG4gICAgJyBjZGZfbm9uY2VudHJhbF9jaGkyIGNkZl9ub25jZW50cmFsX3N0dWRlbnRfdCBjZGZfbm9ybWFsIGNkZl9wYXJldG8gY2RmX3BvaXNzb24nICtcbiAgICAnIGNkZl9yYW5rX3N1bSBjZGZfcmF5bGVpZ2ggY2RmX3NpZ25lZF9yYW5rIGNkZl9zdHVkZW50X3QgY2RmX3dlaWJ1bGwgY2Rpc3BsYXknICtcbiAgICAnIGNlaWxpbmcgY2VudHJhbF9tb21lbnQgY2VxdWFsIGNlcXVhbGlnbm9yZSBjZiBjZmRpc3JlcCBjZmV4cGFuZCBjZ2VvZGVzaWMnICtcbiAgICAnIGNncmVhdGVycCBjZ3JlYXRlcnBpZ25vcmUgY2hhbmdlbmFtZSBjaGFuZ2V2YXIgY2hhb3NnYW1lIGNoYXJhdCBjaGFyZnVuIGNoYXJmdW4yJyArXG4gICAgJyBjaGFybGlzdCBjaGFycCBjaGFycG9seSBjaGRpciBjaGVieXNoZXZfdCBjaGVieXNoZXZfdSBjaGVja2RpdiBjaGVja19vdmVybGFwcycgK1xuICAgICcgY2hpbmVzZSBjaG9sZXNreSBjaHJpc3RvZiBjaHJvbWF0aWNfaW5kZXggY2hyb21hdGljX251bWJlciBjaW50IGNpcmN1bGFudF9ncmFwaCcgK1xuICAgICcgY2xlYXJfZWRnZV93ZWlnaHQgY2xlYXJfcnVsZXMgY2xlYXJfdmVydGV4X2xhYmVsIGNsZWJzY2hfZ29yZGFuIGNsZWJzY2hfZ3JhcGgnICtcbiAgICAnIGNsZXNzcCBjbGVzc3BpZ25vcmUgY2xvc2UgY2xvc2VmaWxlIGNtZXRyaWMgY29lZmYgY29lZm1hdHJpeCBjb2dyYWQgY29sIGNvbGxhcHNlJyArXG4gICAgJyBjb2xsZWN0dGVybXMgY29sdW1ub3AgY29sdW1uc3BhY2UgY29sdW1uc3dhcCBjb2x1bW52ZWN0b3IgY29tYmluYXRpb24gY29tYmluZScgK1xuICAgICcgY29tcDJwdWkgY29tcGFyZSBjb21wZmlsZSBjb21waWxlIGNvbXBpbGVfZmlsZSBjb21wbGVtZW50X2dyYXBoIGNvbXBsZXRlX2JpcGFydGl0ZV9ncmFwaCcgK1xuICAgICcgY29tcGxldGVfZ3JhcGggY29tcGxleF9udW1iZXJfcCBjb21wb25lbnRzIGNvbXBvc2VfZnVuY3Rpb25zIGNvbmNhbiBjb25jYXQnICtcbiAgICAnIGNvbmp1Z2F0ZSBjb25tZXRkZXJpdiBjb25uZWN0ZWRfY29tcG9uZW50cyBjb25uZWN0X3ZlcnRpY2VzIGNvbnMgY29uc3RhbnQnICtcbiAgICAnIGNvbnN0YW50cCBjb25zdGl0dWVudCBjb25zdHZhbHVlIGNvbnQycGFydCBjb250ZW50IGNvbnRpbnVvdXNfZnJlcSBjb250b3J0aW9uJyArXG4gICAgJyBjb250b3VyX3Bsb3QgY29udHJhY3QgY29udHJhY3RfZWRnZSBjb250cmFncmFkIGNvbnRyaWJfb2RlIGNvbnZlcnQgY29vcmQnICtcbiAgICAnIGNvcHkgY29weV9maWxlIGNvcHlfZ3JhcGggY29weWxpc3QgY29weW1hdHJpeCBjb3IgY29zIGNvc2ggY290IGNvdGggY292IGNvdjEnICtcbiAgICAnIGNvdmRpZmYgY292ZWN0IGNvdmVycyBjcmMyNHN1bSBjcmVhdGVfZ3JhcGggY3JlYXRlX2xpc3QgY3NjIGNzY2ggY3NldHVwIGNzcGxpbmUnICtcbiAgICAnIGN0YXlsb3IgY3RfY29vcmRzeXMgY3RyYW5zZm9ybSBjdHJhbnNwb3NlIGN1YmVfZ3JhcGggY3Vib2N0YWhlZHJvbl9ncmFwaCcgK1xuICAgICcgY3VubGlzcCBjdiBjeWNsZV9kaWdyYXBoIGN5Y2xlX2dyYXBoIGN5bGluZHJpY2FsIGRheXMzNjAgZGJsaW50IGRlYWN0aXZhdGUnICtcbiAgICAnIGRlY2xhcmUgZGVjbGFyZV9jb25zdHZhbHVlIGRlY2xhcmVfZGltZW5zaW9ucyBkZWNsYXJlX2Z1bmRhbWVudGFsX2RpbWVuc2lvbnMnICtcbiAgICAnIGRlY2xhcmVfZnVuZGFtZW50YWxfdW5pdHMgZGVjbGFyZV9xdHkgZGVjbGFyZV90cmFuc2xhdGVkIGRlY2xhcmVfdW5pdF9jb252ZXJzaW9uJyArXG4gICAgJyBkZWNsYXJlX3VuaXRzIGRlY2xhcmVfd2VpZ2h0cyBkZWNzeW0gZGVmY29uIGRlZmluZSBkZWZpbmVfYWx0X2Rpc3BsYXkgZGVmaW5lX3ZhcmlhYmxlJyArXG4gICAgJyBkZWZpbnQgZGVmbWF0Y2ggZGVmcnVsZSBkZWZzdHJ1Y3QgZGVmdGF5bG9yIGRlZ3JlZV9zZXF1ZW5jZSBkZWwgZGVsZXRlIGRlbGV0ZW4nICtcbiAgICAnIGRlbHRhIGRlbW8gZGVtb2l2cmUgZGVub20gZGVwZW5kcyBkZXJpdmRlZ3JlZSBkZXJpdmxpc3QgZGVzY3JpYmUgZGVzb2x2ZScgK1xuICAgICcgZGV0ZXJtaW5hbnQgZGZsb2F0IGRnYXVzc19hIGRnYXVzc19iIGRnZWV2IGRnZW1tIGRnZXFyZiBkZ2VzdiBkZ2VzdmQgZGlhZycgK1xuICAgICcgZGlhZ21hdHJpeCBkaWFnX21hdHJpeCBkaWFnbWF0cml4cCBkaWFtZXRlciBkaWZmIGRpZ2l0Y2hhcnAgZGltYWNzX2V4cG9ydCcgK1xuICAgICcgZGltYWNzX2ltcG9ydCBkaW1lbnNpb24gZGltZW5zaW9ubGVzcyBkaW1lbnNpb25zIGRpbWVuc2lvbnNfYXNfbGlzdCBkaXJlY3QnICtcbiAgICAnIGRpcmVjdG9yeSBkaXNjcmV0ZV9mcmVxIGRpc2pvaW4gZGlzam9pbnRwIGRpc29sYXRlIGRpc3AgZGlzcGNvbiBkaXNwZm9ybScgK1xuICAgICcgZGlzcGZ1biBkaXNwSm9yZGFuIGRpc3BsYXkgZGlzcHJ1bGUgZGlzcHRlcm1zIGRpc3RyaWIgZGl2aWRlIGRpdmlzb3JzIGRpdnN1bScgK1xuICAgICcgZGt1bW1lcl9tIGRrdW1tZXJfdSBkbGFuZ2UgZG9kZWNhaGVkcm9uX2dyYXBoIGRvdHByb2R1Y3QgZG90c2ltcCBkcGFydCcgK1xuICAgICcgZHJhdyBkcmF3MmQgZHJhdzNkIGRyYXdkZiBkcmF3X2ZpbGUgZHJhd19ncmFwaCBkc2NhbGFyIGVjaGVsb24gZWRnZV9jb2xvcmluZycgK1xuICAgICcgZWRnZV9jb25uZWN0aXZpdHkgZWRnZXMgZWlnZW5zX2J5X2phY29iaSBlaWdlbnZhbHVlcyBlaWdlbnZlY3RvcnMgZWlnaHRoJyArXG4gICAgJyBlaW5zdGVpbiBlaXZhbHMgZWl2ZWN0cyBlbGFwc2VkX3JlYWxfdGltZSBlbGFwc2VkX3J1bl90aW1lIGVsZTJjb21wIGVsZTJwb2x5bm9tZScgK1xuICAgICcgZWxlMnB1aSBlbGVtIGVsZW1lbnRwIGVsZXZhdGlvbl9ncmlkIGVsaW0gZWxpbV9hbGxidXQgZWxpbWluYXRlIGVsaW1pbmF0ZV91c2luZycgK1xuICAgICcgZWxsaXBzZSBlbGxpcHRpY19lIGVsbGlwdGljX2VjIGVsbGlwdGljX2V1IGVsbGlwdGljX2YgZWxsaXB0aWNfa2MgZWxsaXB0aWNfcGknICtcbiAgICAnIGVtYXRyaXggZW1wdHlfZ3JhcGggZW1wdHlwIGVuZGNvbnMgZW50ZXJtYXRyaXggZW50ZXJ0ZW5zb3IgZW50aWVyIGVxdWFsIGVxdWFscCcgK1xuICAgICcgZXF1aXZfY2xhc3NlcyBlcmYgZXJmYyBlcmZfZ2VuZXJhbGl6ZWQgZXJmaSBlcnJjYXRjaCBlcnJvciBlcnJvcm1zZyBlcnJvcnMnICtcbiAgICAnIGV1bGVyIGV2IGV2YWxfc3RyaW5nIGV2ZW5wIGV2ZXJ5IGV2b2x1dGlvbiBldm9sdXRpb24yZCBldnVuZGlmZiBleGFtcGxlIGV4cCcgK1xuICAgICcgZXhwYW5kIGV4cGFuZHdydCBleHBhbmR3cnRfZmFjdG9yZWQgZXhwaW50IGV4cGludGVncmFsX2NoaSBleHBpbnRlZ3JhbF9jaScgK1xuICAgICcgZXhwaW50ZWdyYWxfZSBleHBpbnRlZ3JhbF9lMSBleHBpbnRlZ3JhbF9laSBleHBpbnRlZ3JhbF9lX3NpbXBsaWZ5IGV4cGludGVncmFsX2xpJyArXG4gICAgJyBleHBpbnRlZ3JhbF9zaGkgZXhwaW50ZWdyYWxfc2kgZXhwbGljaXQgZXhwbG9zZSBleHBvbmVudGlhbGl6ZSBleHByZXNzIGV4cHQnICtcbiAgICAnIGV4c2VjIGV4dGRpZmYgZXh0cmFjdF9saW5lYXJfZXF1YXRpb25zIGV4dHJlbWFsX3N1YnNldCBlemdjZCAlZiBmOTAgZmFjc3VtJyArXG4gICAgJyBmYWN0Y29tYiBmYWN0b3IgZmFjdG9yZmFjc3VtIGZhY3RvcmlhbCBmYWN0b3JvdXQgZmFjdG9yc3VtIGZhY3RzIGZhc3RfY2VudHJhbF9lbGVtZW50cycgK1xuICAgICcgZmFzdF9saW5zb2x2ZSBmYXN0dGltZXMgZmVhdHVyZXAgZmVybmZhbGUgZmZ0IGZpYiBmaWJ0b3BoaSBmaWZ0aCBmaWxlbmFtZV9tZXJnZScgK1xuICAgICcgZmlsZV9zZWFyY2ggZmlsZV90eXBlIGZpbGxhcnJheSBmaW5kZGUgZmluZF9yb290IGZpbmRfcm9vdF9hYnMgZmluZF9yb290X2Vycm9yJyArXG4gICAgJyBmaW5kX3Jvb3RfcmVsIGZpcnN0IGZpeCBmbGF0dGVuIGZsZW5ndGggZmxvYXQgZmxvYXRudW1wIGZsb29yIGZsb3dlcl9zbmFyaycgK1xuICAgICcgZmx1c2ggZmx1c2gxZGVyaXYgZmx1c2hkIGZsdXNobmQgZmx1c2hfb3V0cHV0IGZtaW5fY29ieWxhIGZvcmdldCBmb3J0cmFuJyArXG4gICAgJyBmb3VyY29zIGZvdXJleHBhbmQgZm91cmllciBmb3VyaWVyX2VsaW0gZm91cmludCBmb3VyaW50Y29zIGZvdXJpbnRzaW4gZm91cnNpbXAnICtcbiAgICAnIGZvdXJzaW4gZm91cnRoIGZwb3NpdGlvbiBmcmFtZV9icmFja2V0IGZyZWVvZiBmcmVzaGxpbmUgZnJlc25lbF9jIGZyZXNuZWxfcycgK1xuICAgICcgZnJvbV9hZGphY2VuY3lfbWF0cml4IGZydWNodF9ncmFwaCBmdWxsX2xpc3RpZnkgZnVsbG1hcCBmdWxsbWFwbCBmdWxscmF0c2ltcCcgK1xuICAgICcgZnVsbHJhdHN1YnN0IGZ1bGxzZXRpZnkgZnVuY3NvbHZlIGZ1bmRhbWVudGFsX2RpbWVuc2lvbnMgZnVuZGFtZW50YWxfdW5pdHMnICtcbiAgICAnIGZ1bmRlZiBmdW5tYWtlIGZ1bnAgZnYgZzAgZzEgZ2FtbWEgZ2FtbWFfZ3JlZWsgZ2FtbWFfaW5jb21wbGV0ZSBnYW1tYV9pbmNvbXBsZXRlX2dlbmVyYWxpemVkJyArXG4gICAgJyBnYW1tYV9pbmNvbXBsZXRlX3JlZ3VsYXJpemVkIGdhdXNzIGdhdXNzX2EgZ2F1c3NfYiBnYXVzc3Byb2IgZ2NkIGdjZGV4IGdjZGl2aWRlJyArXG4gICAgJyBnY2ZhYyBnY2ZhY3RvciBnZCBnZW5lcmFsaXplZF9sYW1iZXJ0X3cgZ2VuZmFjdCBnZW5fbGFndWVycmUgZ2VubWF0cml4IGdlbnN5bScgK1xuICAgICcgZ2VvX2Ftb3J0aXphdGlvbiBnZW9fYW5udWl0eV9mdiBnZW9fYW5udWl0eV9wdiBnZW9tYXAgZ2VvbWV0cmljIGdlb21ldHJpY19tZWFuJyArXG4gICAgJyBnZW9zdW0gZ2V0IGdldGN1cnJlbnRkaXJlY3RvcnkgZ2V0X2VkZ2Vfd2VpZ2h0IGdldGVudiBnZXRfbHVfZmFjdG9ycyBnZXRfb3V0cHV0X3N0cmVhbV9zdHJpbmcnICtcbiAgICAnIGdldF9waXhlbCBnZXRfcGxvdF9vcHRpb24gZ2V0X3RleF9lbnZpcm9ubWVudCBnZXRfdGV4X2Vudmlyb25tZW50X2RlZmF1bHQnICtcbiAgICAnIGdldF92ZXJ0ZXhfbGFiZWwgZ2ZhY3RvciBnZmFjdG9yc3VtIGdnZiBnaXJ0aCBnbG9iYWxfdmFyaWFuY2VzIGduIGdudXBsb3RfY2xvc2UnICtcbiAgICAnIGdudXBsb3RfcmVwbG90IGdudXBsb3RfcmVzZXQgZ251cGxvdF9yZXN0YXJ0IGdudXBsb3Rfc3RhcnQgZ28gR29zcGVyIEdvc3BlclN1bScgK1xuICAgICcgZ3IyZCBncjNkIGdyYWRlZiBncmFtc2NobWlkdCBncmFwaDZfZGVjb2RlIGdyYXBoNl9lbmNvZGUgZ3JhcGg2X2V4cG9ydCBncmFwaDZfaW1wb3J0JyArXG4gICAgJyBncmFwaF9jZW50ZXIgZ3JhcGhfY2hhcnBvbHkgZ3JhcGhfZWlnZW52YWx1ZXMgZ3JhcGhfZmxvdyBncmFwaF9vcmRlciBncmFwaF9wZXJpcGhlcnknICtcbiAgICAnIGdyYXBoX3Byb2R1Y3QgZ3JhcGhfc2l6ZSBncmFwaF91bmlvbiBncmVhdF9yaG9tYmljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIGdyZWF0X3Job21iaWN1Ym9jdGFoZWRyb25fZ3JhcGgnICtcbiAgICAnIGdyaWRfZ3JhcGggZ3JpbmQgZ3JvYm5lcl9iYXNpcyBncm90emNoX2dyYXBoIGhhbWlsdG9uX2N5Y2xlIGhhbWlsdG9uX3BhdGgnICtcbiAgICAnIGhhbmtlbCBoYW5rZWxfMSBoYW5rZWxfMiBoYXJtb25pYyBoYXJtb25pY19tZWFuIGhhdiBoZWF3b29kX2dyYXBoIGhlcm1pdGUnICtcbiAgICAnIGhlc3NpYW4gaGdmcmVkIGhpbGJlcnRtYXAgaGlsYmVydF9tYXRyaXggaGlwb3cgaGlzdG9ncmFtIGhpc3RvZ3JhbV9kZXNjcmlwdGlvbicgK1xuICAgICcgaG9kZ2UgaG9ybmVyIGh5cGVyZ2VvbWV0cmljIGkwIGkxICVpYmVzIGljMSBpYzIgaWNfY29udmVydCBpY2hyMSBpY2hyMiBpY29zYWhlZHJvbl9ncmFwaCcgK1xuICAgICcgaWNvc2lkb2RlY2FoZWRyb25fZ3JhcGggaWN1cnZhdHVyZSBpZGVudCBpZGVudGZvciBpZGVudGl0eSBpZGlmZiBpZGltIGlkdW1teScgK1xuICAgICcgaWVxbiAlaWYgaWZhY3RvcnMgaWZyYW1lcyBpZnMgaWdjZGV4IGlnZW9kZXNpY19jb29yZHMgaWx0IGltYWdlIGltYWdwYXJ0JyArXG4gICAgJyBpbWV0cmljIGltcGxpY2l0IGltcGxpY2l0X2Rlcml2YXRpdmUgaW1wbGljaXRfcGxvdCBpbmRleGVkX3RlbnNvciBpbmRpY2VzJyArXG4gICAgJyBpbmR1Y2VkX3N1YmdyYXBoIGluZmVyZW5jZXAgaW5mZXJlbmNlX3Jlc3VsdCBpbmZpeCBpbmZvX2Rpc3BsYXkgaW5pdF9hdGVuc29yJyArXG4gICAgJyBpbml0X2N0ZW5zb3IgaW5fbmVpZ2hib3JzIGlubmVycHJvZHVjdCBpbnBhcnQgaW5wcm9kIGlucnQgaW50ZWdlcnAgaW50ZWdlcl9wYXJ0aXRpb25zJyArXG4gICAgJyBpbnRlZ3JhdGUgaW50ZXJzZWN0IGludGVyc2VjdGlvbiBpbnRlcnZhbHAgaW50b3BvaXMgaW50b3N1bSBpbnZhcmlhbnQxIGludmFyaWFudDInICtcbiAgICAnIGludmVyc2VfZmZ0IGludmVyc2VfamFjb2JpX2NkIGludmVyc2VfamFjb2JpX2NuIGludmVyc2VfamFjb2JpX2NzIGludmVyc2VfamFjb2JpX2RjJyArXG4gICAgJyBpbnZlcnNlX2phY29iaV9kbiBpbnZlcnNlX2phY29iaV9kcyBpbnZlcnNlX2phY29iaV9uYyBpbnZlcnNlX2phY29iaV9uZCBpbnZlcnNlX2phY29iaV9ucycgK1xuICAgICcgaW52ZXJzZV9qYWNvYmlfc2MgaW52ZXJzZV9qYWNvYmlfc2QgaW52ZXJzZV9qYWNvYmlfc24gaW52ZXJ0IGludmVydF9ieV9hZGpvaW50JyArXG4gICAgJyBpbnZlcnRfYnlfbHUgaW52X21vZCBpcnIgaXMgaXNfYmljb25uZWN0ZWQgaXNfYmlwYXJ0aXRlIGlzX2Nvbm5lY3RlZCBpc19kaWdyYXBoJyArXG4gICAgJyBpc19lZGdlX2luX2dyYXBoIGlzX2dyYXBoIGlzX2dyYXBoX29yX2RpZ3JhcGggaXNob3cgaXNfaXNvbW9ycGhpYyBpc29sYXRlJyArXG4gICAgJyBpc29tb3JwaGlzbSBpc19wbGFuYXIgaXNxcnQgaXNyZWFsX3AgaXNfc2Nvbm5lY3RlZCBpc190cmVlIGlzX3ZlcnRleF9pbl9ncmFwaCcgK1xuICAgICcgaXRlbXNfaW5mZXJlbmNlICVqIGowIGoxIGphY29iaSBqYWNvYmlhbiBqYWNvYmlfY2QgamFjb2JpX2NuIGphY29iaV9jcyBqYWNvYmlfZGMnICtcbiAgICAnIGphY29iaV9kbiBqYWNvYmlfZHMgamFjb2JpX25jIGphY29iaV9uZCBqYWNvYmlfbnMgamFjb2JpX3AgamFjb2JpX3NjIGphY29iaV9zZCcgK1xuICAgICcgamFjb2JpX3NuIEpGIGpuIGpvaW4gam9yZGFuIGp1bGlhIGp1bGlhX3NldCBqdWxpYV9zaW4gJWsga2RlbHMga2RlbHRhIGtpbGwnICtcbiAgICAnIGtpbGxjb250ZXh0IGtvc3RrYSBrcm9uX2RlbHRhIGtyb25lY2tlcl9wcm9kdWN0IGt1bW1lcl9tIGt1bW1lcl91IGt1cnRvc2lzJyArXG4gICAgJyBrdXJ0b3Npc19iZXJub3VsbGkga3VydG9zaXNfYmV0YSBrdXJ0b3Npc19iaW5vbWlhbCBrdXJ0b3Npc19jaGkyIGt1cnRvc2lzX2NvbnRpbnVvdXNfdW5pZm9ybScgK1xuICAgICcga3VydG9zaXNfZGlzY3JldGVfdW5pZm9ybSBrdXJ0b3Npc19leHAga3VydG9zaXNfZiBrdXJ0b3Npc19nYW1tYSBrdXJ0b3Npc19nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZScgK1xuICAgICcga3VydG9zaXNfZ2VvbWV0cmljIGt1cnRvc2lzX2d1bWJlbCBrdXJ0b3Npc19oeXBlcmdlb21ldHJpYyBrdXJ0b3Npc19sYXBsYWNlJyArXG4gICAgJyBrdXJ0b3Npc19sb2dpc3RpYyBrdXJ0b3Npc19sb2dub3JtYWwga3VydG9zaXNfbmVnYXRpdmVfYmlub21pYWwga3VydG9zaXNfbm9uY2VudHJhbF9jaGkyJyArXG4gICAgJyBrdXJ0b3Npc19ub25jZW50cmFsX3N0dWRlbnRfdCBrdXJ0b3Npc19ub3JtYWwga3VydG9zaXNfcGFyZXRvIGt1cnRvc2lzX3BvaXNzb24nICtcbiAgICAnIGt1cnRvc2lzX3JheWxlaWdoIGt1cnRvc2lzX3N0dWRlbnRfdCBrdXJ0b3Npc193ZWlidWxsIGxhYmVsIGxhYmVscyBsYWdyYW5nZScgK1xuICAgICcgbGFndWVycmUgbGFtYmRhIGxhbWJlcnRfdyBsYXBsYWNlIGxhcGxhY2lhbl9tYXRyaXggbGFzdCBsYmZncyBsYzJrZHQgbGNoYXJwJyArXG4gICAgJyBsY19sIGxjbSBsY191IGxkZWZpbnQgbGRpc3AgbGRpc3BsYXkgbGVnZW5kcmVfcCBsZWdlbmRyZV9xIGxlaW5zdGVpbiBsZW5ndGgnICtcbiAgICAnIGxldCBsZXRydWxlcyBsZXRzaW1wIGxldmlfY2l2aXRhIGxmcmVlb2YgbGd0cmVpbGxpcyBsaHMgbGkgbGllZGlmZiBsaW1pdCcgK1xuICAgICcgTGluZHN0ZWR0IGxpbmVhciBsaW5lYXJpbnRlcnBvbCBsaW5lYXJfcHJvZ3JhbSBsaW5lYXJfcmVncmVzc2lvbiBsaW5lX2dyYXBoJyArXG4gICAgJyBsaW5zb2x2ZSBsaXN0YXJyYXkgbGlzdF9jb3JyZWxhdGlvbnMgbGlzdGlmeSBsaXN0X21hdHJpeF9lbnRyaWVzIGxpc3RfbmNfbW9ub21pYWxzJyArXG4gICAgJyBsaXN0b2Z0ZW5zIGxpc3RvZnZhcnMgbGlzdHAgbG1heCBsbWluIGxvYWQgbG9hZGZpbGUgbG9jYWwgbG9jYXRlX21hdHJpeF9lbnRyeScgK1xuICAgICcgbG9nIGxvZ2NvbnRyYWN0IGxvZ19nYW1tYSBsb3BvdyBsb3JlbnR6X2dhdWdlIGxvd2VyY2FzZXAgbHBhcnQgbHJhdHN1YnN0JyArXG4gICAgJyBscmVkdWNlIGxyaWVtYW5uIGxzcXVhcmVzX2VzdGltYXRlcyBsc3F1YXJlc19lc3RpbWF0ZXNfYXBwcm94aW1hdGUgbHNxdWFyZXNfZXN0aW1hdGVzX2V4YWN0JyArXG4gICAgJyBsc3F1YXJlc19tc2UgbHNxdWFyZXNfcmVzaWR1YWxfbXNlIGxzcXVhcmVzX3Jlc2lkdWFscyBsc3VtIGx0cmVpbGxpcyBsdV9iYWNrc3ViJyArXG4gICAgJyBsdWNhcyBsdV9mYWN0b3IgJW0gbWFjcm9leHBhbmQgbWFjcm9leHBhbmQxIG1ha2VfYXJyYXkgbWFrZWJveCBtYWtlZmFjdCBtYWtlZ2FtbWEnICtcbiAgICAnIG1ha2VfZ3JhcGggbWFrZV9sZXZlbF9waWN0dXJlIG1ha2VsaXN0IG1ha2VPcmRlcnMgbWFrZV9wb2x5X2NvbnRpbmVudCBtYWtlX3BvbHlfY291bnRyeScgK1xuICAgICcgbWFrZV9wb2x5Z29uIG1ha2VfcmFuZG9tX3N0YXRlIG1ha2VfcmdiX3BpY3R1cmUgbWFrZXNldCBtYWtlX3N0cmluZ19pbnB1dF9zdHJlYW0nICtcbiAgICAnIG1ha2Vfc3RyaW5nX291dHB1dF9zdHJlYW0gbWFrZV90cmFuc2Zvcm0gbWFuZGVsYnJvdCBtYW5kZWxicm90X3NldCBtYXAgbWFwYXRvbScgK1xuICAgICcgbWFwbGlzdCBtYXRjaGRlY2xhcmUgbWF0Y2hmaXggbWF0X2NvbmQgbWF0X2Z1bGx1bmJsb2NrZXIgbWF0X2Z1bmN0aW9uIG1hdGhtbF9kaXNwbGF5JyArXG4gICAgJyBtYXRfbm9ybSBtYXRyaXggbWF0cml4bWFwIG1hdHJpeHAgbWF0cml4X3NpemUgbWF0dHJhY2UgbWF0X3RyYWNlIG1hdF91bmJsb2NrZXInICtcbiAgICAnIG1heCBtYXhfY2xpcXVlIG1heF9kZWdyZWUgbWF4X2Zsb3cgbWF4aW1pemVfbHAgbWF4X2luZGVwZW5kZW50X3NldCBtYXhfbWF0Y2hpbmcnICtcbiAgICAnIG1heWJlIG1kNXN1bSBtZWFuIG1lYW5fYmVybm91bGxpIG1lYW5fYmV0YSBtZWFuX2Jpbm9taWFsIG1lYW5fY2hpMiBtZWFuX2NvbnRpbnVvdXNfdW5pZm9ybScgK1xuICAgICcgbWVhbl9kZXZpYXRpb24gbWVhbl9kaXNjcmV0ZV91bmlmb3JtIG1lYW5fZXhwIG1lYW5fZiBtZWFuX2dhbW1hIG1lYW5fZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUnICtcbiAgICAnIG1lYW5fZ2VvbWV0cmljIG1lYW5fZ3VtYmVsIG1lYW5faHlwZXJnZW9tZXRyaWMgbWVhbl9sYXBsYWNlIG1lYW5fbG9naXN0aWMnICtcbiAgICAnIG1lYW5fbG9nbm9ybWFsIG1lYW5fbmVnYXRpdmVfYmlub21pYWwgbWVhbl9ub25jZW50cmFsX2NoaTIgbWVhbl9ub25jZW50cmFsX3N0dWRlbnRfdCcgK1xuICAgICcgbWVhbl9ub3JtYWwgbWVhbl9wYXJldG8gbWVhbl9wb2lzc29uIG1lYW5fcmF5bGVpZ2ggbWVhbl9zdHVkZW50X3QgbWVhbl93ZWlidWxsJyArXG4gICAgJyBtZWRpYW4gbWVkaWFuX2RldmlhdGlvbiBtZW1iZXIgbWVzaCBtZXRyaWNleHBhbmRhbGwgbWdmMV9zaGExIG1pbiBtaW5fZGVncmVlJyArXG4gICAgJyBtaW5fZWRnZV9jdXQgbWluZmFjdG9yaWFsIG1pbmltYWxQb2x5IG1pbmltaXplX2xwIG1pbmltdW1fc3Bhbm5pbmdfdHJlZSBtaW5vcicgK1xuICAgICcgbWlucGFja19sc3F1YXJlcyBtaW5wYWNrX3NvbHZlIG1pbl92ZXJ0ZXhfY292ZXIgbWluX3ZlcnRleF9jdXQgbWtkaXIgbW5ld3RvbicgK1xuICAgICcgbW9kIG1vZGVfZGVjbGFyZSBtb2RlX2lkZW50aXR5IE1vZGVNYXRyaXggbW9lYml1cyBtb24yc2NodXIgbW9ubyBtb25vbWlhbF9kaW1lbnNpb25zJyArXG4gICAgJyBtdWx0aWJlcm5zdGVpbl9wb2x5IG11bHRpX2Rpc3BsYXlfZm9yX3RleGluZm8gbXVsdGlfZWxlbSBtdWx0aW5vbWlhbCBtdWx0aW5vbWlhbF9jb2VmZicgK1xuICAgICcgbXVsdGlfb3JiaXQgbXVsdGlwbG90X21vZGUgbXVsdGlfcHVpIG11bHRzeW0gbXVsdHRocnUgbXljaWVsc2tpX2dyYXBoIG5hcnknICtcbiAgICAnIG5hdHVyYWxfdW5pdCBuY19kZWdyZWUgbmNleHB0IG5jaGFycG9seSBuZWdhdGl2ZV9waWN0dXJlIG5laWdoYm9ycyBuZXcgbmV3Y29udGV4dCcgK1xuICAgICcgbmV3ZGV0IG5ld19ncmFwaCBuZXdsaW5lIG5ld3RvbiBuZXdfdmFyaWFibGUgbmV4dF9wcmltZSBuaWNlZHVtbWllcyBuaWNlaW5kaWNlcycgK1xuICAgICcgbmludGggbm9maXggbm9uYXJyYXkgbm9uY2VudHJhbF9tb21lbnQgbm9ubWV0cmljaXR5IG5vbm5lZ2ludGVnZXJwIG5vbnNjYWxhcnAnICtcbiAgICAnIG5vbnplcm9hbmRmcmVlb2Ygbm90ZXF1YWwgbm91bmlmeSBucHRldHJhZCBucHYgbnJvb3RzIG50ZXJtcyBudGVybXN0JyArXG4gICAgJyBudGhyb290IG51bGxpdHkgbnVsbHNwYWNlIG51bSBudW1iZXJlZF9ib3VuZGFyaWVzIG51bWJlcnAgbnVtYmVyX3RvX29jdGV0cycgK1xuICAgICcgbnVtX2Rpc3RpbmN0X3BhcnRpdGlvbnMgbnVtZXJ2YWwgbnVtZmFjdG9yIG51bV9wYXJ0aXRpb25zIG51c3VtIG56ZXRhIG56ZXRhaScgK1xuICAgICcgbnpldGFyIG9jdGV0c190b19udW1iZXIgb2N0ZXRzX3RvX29pZCBvZGRfZ2lydGggb2RkcCBvZGUyIG9kZV9jaGVjayBvZGVsaW4nICtcbiAgICAnIG9pZF90b19vY3RldHMgb3Agb3BlbmEgb3BlbmFfYmluYXJ5IG9wZW5yIG9wZW5yX2JpbmFyeSBvcGVudyBvcGVud19iaW5hcnknICtcbiAgICAnIG9wZXJhdG9ycCBvcHN1YnN0IG9wdGltaXplICVvciBvcmJpdCBvcmJpdHMgb3JkZXJncmVhdCBvcmRlcmdyZWF0cCBvcmRlcmxlc3MnICtcbiAgICAnIG9yZGVybGVzc3Agb3J0aG9nb25hbF9jb21wbGVtZW50IG9ydGhvcG9seV9yZWN1ciBvcnRob3BvbHlfd2VpZ2h0IG91dGVybWFwJyArXG4gICAgJyBvdXRfbmVpZ2hib3JzIG91dG9mcG9pcyBwYWRlIHBhcmFib2xpY19jeWxpbmRlcl9kIHBhcmFtZXRyaWMgcGFyYW1ldHJpY19zdXJmYWNlJyArXG4gICAgJyBwYXJnIHBhckdvc3BlciBwYXJzZV9zdHJpbmcgcGFyc2VfdGltZWRhdGUgcGFydCBwYXJ0MmNvbnQgcGFydGZyYWMgcGFydGl0aW9uJyArXG4gICAgJyBwYXJ0aXRpb25fc2V0IHBhcnRwb2wgcGF0aF9kaWdyYXBoIHBhdGhfZ3JhcGggcGF0aG5hbWVfZGlyZWN0b3J5IHBhdGhuYW1lX25hbWUnICtcbiAgICAnIHBhdGhuYW1lX3R5cGUgcGRmX2Jlcm5vdWxsaSBwZGZfYmV0YSBwZGZfYmlub21pYWwgcGRmX2NhdWNoeSBwZGZfY2hpMiBwZGZfY29udGludW91c191bmlmb3JtJyArXG4gICAgJyBwZGZfZGlzY3JldGVfdW5pZm9ybSBwZGZfZXhwIHBkZl9mIHBkZl9nYW1tYSBwZGZfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUnICtcbiAgICAnIHBkZl9nZW9tZXRyaWMgcGRmX2d1bWJlbCBwZGZfaHlwZXJnZW9tZXRyaWMgcGRmX2xhcGxhY2UgcGRmX2xvZ2lzdGljIHBkZl9sb2dub3JtYWwnICtcbiAgICAnIHBkZl9uZWdhdGl2ZV9iaW5vbWlhbCBwZGZfbm9uY2VudHJhbF9jaGkyIHBkZl9ub25jZW50cmFsX3N0dWRlbnRfdCBwZGZfbm9ybWFsJyArXG4gICAgJyBwZGZfcGFyZXRvIHBkZl9wb2lzc29uIHBkZl9yYW5rX3N1bSBwZGZfcmF5bGVpZ2ggcGRmX3NpZ25lZF9yYW5rIHBkZl9zdHVkZW50X3QnICtcbiAgICAnIHBkZl93ZWlidWxsIHBlYXJzb25fc2tld25lc3MgcGVybWFuZW50IHBlcm11dCBwZXJtdXRhdGlvbiBwZXJtdXRhdGlvbnMgcGV0ZXJzZW5fZ3JhcGgnICtcbiAgICAnIHBldHJvdiBwaWNrYXBhcnQgcGljdHVyZV9lcXVhbHAgcGljdHVyZXAgcGllY2hhcnQgcGllY2hhcnRfZGVzY3JpcHRpb24gcGxhbmFyX2VtYmVkZGluZycgK1xuICAgICcgcGxheWJhY2sgcGxvZyBwbG90MmQgcGxvdDNkIHBsb3RkZiBwbG90ZXEgcGxzcXVhcmVzIHBvY2hoYW1tZXIgcG9pbnRzIHBvaXNkaWZmJyArXG4gICAgJyBwb2lzZXhwdCBwb2lzaW50IHBvaXNtYXAgcG9pc3BsdXMgcG9pc3NpbXAgcG9pc3N1YnN0IHBvaXN0aW1lcyBwb2lzdHJpbSBwb2xhcicgK1xuICAgICcgcG9sYXJmb3JtIHBvbGFydG9yZWN0IHBvbGFyX3RvX3h5IHBvbHlfYWRkIHBvbHlfYnVjaGJlcmdlciBwb2x5X2J1Y2hiZXJnZXJfY3JpdGVyaW9uJyArXG4gICAgJyBwb2x5X2NvbG9uX2lkZWFsIHBvbHlfY29udGVudCBwb2x5ZGVjb21wIHBvbHlfZGVwZW5kc19wIHBvbHlfZWxpbWluYXRpb25faWRlYWwnICtcbiAgICAnIHBvbHlfZXhhY3RfZGl2aWRlIHBvbHlfZXhwYW5kIHBvbHlfZXhwdCBwb2x5X2djZCBwb2x5Z29uIHBvbHlfZ3JvYm5lciBwb2x5X2dyb2JuZXJfZXF1YWwnICtcbiAgICAnIHBvbHlfZ3JvYm5lcl9tZW1iZXIgcG9seV9ncm9ibmVyX3N1YnNldHAgcG9seV9pZGVhbF9pbnRlcnNlY3Rpb24gcG9seV9pZGVhbF9wb2x5c2F0dXJhdGlvbicgK1xuICAgICcgcG9seV9pZGVhbF9wb2x5c2F0dXJhdGlvbjEgcG9seV9pZGVhbF9zYXR1cmF0aW9uIHBvbHlfaWRlYWxfc2F0dXJhdGlvbjEgcG9seV9sY20nICtcbiAgICAnIHBvbHlfbWluaW1pemF0aW9uIHBvbHltb2QgcG9seV9tdWx0aXBseSBwb2x5bm9tZTJlbGUgcG9seW5vbWlhbHAgcG9seV9ub3JtYWxfZm9ybScgK1xuICAgICcgcG9seV9ub3JtYWxpemUgcG9seV9ub3JtYWxpemVfbGlzdCBwb2x5X3BvbHlzYXR1cmF0aW9uX2V4dGVuc2lvbiBwb2x5X3ByaW1pdGl2ZV9wYXJ0JyArXG4gICAgJyBwb2x5X3BzZXVkb19kaXZpZGUgcG9seV9yZWR1Y2VkX2dyb2JuZXIgcG9seV9yZWR1Y3Rpb24gcG9seV9zYXR1cmF0aW9uX2V4dGVuc2lvbicgK1xuICAgICcgcG9seV9zX3BvbHlub21pYWwgcG9seV9zdWJ0cmFjdCBwb2x5dG9jb21wYW5pb24gcG9wIHBvc3RmaXggcG90ZW50aWFsIHBvd2VyX21vZCcgK1xuICAgICcgcG93ZXJzZXJpZXMgcG93ZXJzZXQgcHJlZml4IHByZXZfcHJpbWUgcHJpbWVwIHByaW1lcyBwcmluY2lwYWxfY29tcG9uZW50cycgK1xuICAgICcgcHJpbnQgcHJpbnRmIHByaW50ZmlsZSBwcmludF9ncmFwaCBwcmludHBvaXMgcHJpbnRwcm9wcyBwcm9kcmFjIHByb2R1Y3QgcHJvcGVydGllcycgK1xuICAgICcgcHJvcHZhcnMgcHNpIHBzdWJzdCBwdHJpYW5ndWxhcml6ZSBwdWkgcHVpMmNvbXAgcHVpMmVsZSBwdWkycG9seW5vbWUgcHVpX2RpcmVjdCcgK1xuICAgICcgcHVpcmVkdWMgcHVzaCBwdXQgcHYgcXB1dCBxcmFuZ2UgcXR5IHF1YWRfY29udHJvbCBxdWFkX3FhZyBxdWFkX3FhZ2kgcXVhZF9xYWdwJyArXG4gICAgJyBxdWFkX3FhZ3MgcXVhZF9xYXdjIHF1YWRfcWF3ZiBxdWFkX3Fhd28gcXVhZF9xYXdzIHF1YWRyaWxhdGVyYWwgcXVhbnRpbGUnICtcbiAgICAnIHF1YW50aWxlX2Jlcm5vdWxsaSBxdWFudGlsZV9iZXRhIHF1YW50aWxlX2Jpbm9taWFsIHF1YW50aWxlX2NhdWNoeSBxdWFudGlsZV9jaGkyJyArXG4gICAgJyBxdWFudGlsZV9jb250aW51b3VzX3VuaWZvcm0gcXVhbnRpbGVfZGlzY3JldGVfdW5pZm9ybSBxdWFudGlsZV9leHAgcXVhbnRpbGVfZicgK1xuICAgICcgcXVhbnRpbGVfZ2FtbWEgcXVhbnRpbGVfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgcXVhbnRpbGVfZ2VvbWV0cmljIHF1YW50aWxlX2d1bWJlbCcgK1xuICAgICcgcXVhbnRpbGVfaHlwZXJnZW9tZXRyaWMgcXVhbnRpbGVfbGFwbGFjZSBxdWFudGlsZV9sb2dpc3RpYyBxdWFudGlsZV9sb2dub3JtYWwnICtcbiAgICAnIHF1YW50aWxlX25lZ2F0aXZlX2Jpbm9taWFsIHF1YW50aWxlX25vbmNlbnRyYWxfY2hpMiBxdWFudGlsZV9ub25jZW50cmFsX3N0dWRlbnRfdCcgK1xuICAgICcgcXVhbnRpbGVfbm9ybWFsIHF1YW50aWxlX3BhcmV0byBxdWFudGlsZV9wb2lzc29uIHF1YW50aWxlX3JheWxlaWdoIHF1YW50aWxlX3N0dWRlbnRfdCcgK1xuICAgICcgcXVhbnRpbGVfd2VpYnVsbCBxdWFydGlsZV9za2V3bmVzcyBxdWl0IHF1bml0IHF1b3RpZW50IHJhY2FoX3YgcmFjYWhfdyByYWRjYW4nICtcbiAgICAnIHJhZGl1cyByYW5kb20gcmFuZG9tX2Jlcm5vdWxsaSByYW5kb21fYmV0YSByYW5kb21fYmlub21pYWwgcmFuZG9tX2JpcGFydGl0ZV9ncmFwaCcgK1xuICAgICcgcmFuZG9tX2NhdWNoeSByYW5kb21fY2hpMiByYW5kb21fY29udGludW91c191bmlmb3JtIHJhbmRvbV9kaWdyYXBoIHJhbmRvbV9kaXNjcmV0ZV91bmlmb3JtJyArXG4gICAgJyByYW5kb21fZXhwIHJhbmRvbV9mIHJhbmRvbV9nYW1tYSByYW5kb21fZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgcmFuZG9tX2dlb21ldHJpYycgK1xuICAgICcgcmFuZG9tX2dyYXBoIHJhbmRvbV9ncmFwaDEgcmFuZG9tX2d1bWJlbCByYW5kb21faHlwZXJnZW9tZXRyaWMgcmFuZG9tX2xhcGxhY2UnICtcbiAgICAnIHJhbmRvbV9sb2dpc3RpYyByYW5kb21fbG9nbm9ybWFsIHJhbmRvbV9uZWdhdGl2ZV9iaW5vbWlhbCByYW5kb21fbmV0d29yaycgK1xuICAgICcgcmFuZG9tX25vbmNlbnRyYWxfY2hpMiByYW5kb21fbm9uY2VudHJhbF9zdHVkZW50X3QgcmFuZG9tX25vcm1hbCByYW5kb21fcGFyZXRvJyArXG4gICAgJyByYW5kb21fcGVybXV0YXRpb24gcmFuZG9tX3BvaXNzb24gcmFuZG9tX3JheWxlaWdoIHJhbmRvbV9yZWd1bGFyX2dyYXBoIHJhbmRvbV9zdHVkZW50X3QnICtcbiAgICAnIHJhbmRvbV90b3VybmFtZW50IHJhbmRvbV90cmVlIHJhbmRvbV93ZWlidWxsIHJhbmdlIHJhbmsgcmF0IHJhdGNvZWYgcmF0ZGVub20nICtcbiAgICAnIHJhdGRpZmYgcmF0ZGlzcmVwIHJhdGV4cGFuZCByYXRpbnRlcnBvbCByYXRpb25hbCByYXRpb25hbGl6ZSByYXRudW1lciByYXRudW1wJyArXG4gICAgJyByYXRwIHJhdHNpbXAgcmF0c3Vic3QgcmF0dmFycyByYXR3ZWlnaHQgcmVhZCByZWFkX2FycmF5IHJlYWRfYmluYXJ5X2FycmF5JyArXG4gICAgJyByZWFkX2JpbmFyeV9saXN0IHJlYWRfYmluYXJ5X21hdHJpeCByZWFkYnl0ZSByZWFkY2hhciByZWFkX2hhc2hlZF9hcnJheSByZWFkbGluZScgK1xuICAgICcgcmVhZF9saXN0IHJlYWRfbWF0cml4IHJlYWRfbmVzdGVkX2xpc3QgcmVhZG9ubHkgcmVhZF94cG0gcmVhbF9pbWFncGFydF90b19jb25qdWdhdGUnICtcbiAgICAnIHJlYWxwYXJ0IHJlYWxyb290cyByZWFycmF5IHJlY3RhbmdsZSByZWN0Zm9ybSByZWN0Zm9ybV9sb2dfaWZfY29uc3RhbnQgcmVjdHRvcG9sYXInICtcbiAgICAnIHJlZGlmZiByZWR1Y2VfY29uc3RzIHJlZHVjZV9vcmRlciByZWdpb24gcmVnaW9uX2JvdW5kYXJpZXMgcmVnaW9uX2JvdW5kYXJpZXNfcGx1cycgK1xuICAgICcgcmVtIHJlbWFpbmRlciByZW1hcnJheSByZW1ib3ggcmVtY29tcHMgcmVtY29uIHJlbWNvb3JkIHJlbWZ1biByZW1mdW5jdGlvbicgK1xuICAgICcgcmVtbGV0IHJlbW92ZSByZW1vdmVfY29uc3R2YWx1ZSByZW1vdmVfZGltZW5zaW9ucyByZW1vdmVfZWRnZSByZW1vdmVfZnVuZGFtZW50YWxfZGltZW5zaW9ucycgK1xuICAgICcgcmVtb3ZlX2Z1bmRhbWVudGFsX3VuaXRzIHJlbW92ZV9wbG90X29wdGlvbiByZW1vdmVfdmVydGV4IHJlbXBhcnQgcmVtcnVsZScgK1xuICAgICcgcmVtc3ltIHJlbXZhbHVlIHJlbmFtZSByZW5hbWVfZmlsZSByZXNldCByZXNldF9kaXNwbGF5cyByZXNpZHVlIHJlc29sdmFudGUnICtcbiAgICAnIHJlc29sdmFudGVfYWx0ZXJuZWUxIHJlc29sdmFudGVfYmlwYXJ0aXRlIHJlc29sdmFudGVfZGllZHJhbGUgcmVzb2x2YW50ZV9rbGVpbicgK1xuICAgICcgcmVzb2x2YW50ZV9rbGVpbjMgcmVzb2x2YW50ZV9wcm9kdWl0X3N5bSByZXNvbHZhbnRlX3VuaXRhaXJlIHJlc29sdmFudGVfdmllcmVyJyArXG4gICAgJyByZXN0IHJlc3VsdGFudCByZXR1cm4gcmV2ZWFsIHJldmVyc2UgcmV2ZXJ0IHJldmVydDIgcmdiMmxldmVsIHJocyByaWNjaSByaWVtYW5uJyArXG4gICAgJyByaW52YXJpYW50IHJpc2NoIHJrIHJtZGlyIHJuY29tYmluZSByb21iZXJnIHJvb20gcm9vdHNjb250cmFjdCByb3VuZCByb3cnICtcbiAgICAnIHJvd29wIHJvd3N3YXAgcnJlZHVjZSBydW5fdGVzdHN1aXRlICVzIHNhdmUgc2F2aW5nIHNjYWxhcnAgc2NhbGVkX2Jlc3NlbF9pJyArXG4gICAgJyBzY2FsZWRfYmVzc2VsX2kwIHNjYWxlZF9iZXNzZWxfaTEgc2NhbGVmYWN0b3JzIHNjYW5tYXAgc2NhdHRlcnBsb3Qgc2NhdHRlcnBsb3RfZGVzY3JpcHRpb24nICtcbiAgICAnIHNjZW5lIHNjaHVyMmNvbXAgc2NvbmNhdCBzY29weSBzY3NpbXAgc2N1cnZhdHVyZSBzZG93bmNhc2Ugc2VjIHNlY2ggc2Vjb25kJyArXG4gICAgJyBzZXF1YWwgc2VxdWFsaWdub3JlIHNldF9hbHRfZGlzcGxheSBzZXRkaWZmZXJlbmNlIHNldF9kcmF3X2RlZmF1bHRzIHNldF9lZGdlX3dlaWdodCcgK1xuICAgICcgc2V0ZWxteCBzZXRlcXVhbHAgc2V0aWZ5IHNldHAgc2V0X3BhcnRpdGlvbnMgc2V0X3Bsb3Rfb3B0aW9uIHNldF9wcm9tcHQgc2V0X3JhbmRvbV9zdGF0ZScgK1xuICAgICcgc2V0X3RleF9lbnZpcm9ubWVudCBzZXRfdGV4X2Vudmlyb25tZW50X2RlZmF1bHQgc2V0dW5pdHMgc2V0dXBfYXV0b2xvYWQgc2V0X3VwX2RvdF9zaW1wbGlmaWNhdGlvbnMnICtcbiAgICAnIHNldF92ZXJ0ZXhfbGFiZWwgc2V2ZW50aCBzZXhwbG9kZSBzZiBzaGExc3VtIHNoYTI1NnN1bSBzaG9ydGVzdF9wYXRoIHNob3J0ZXN0X3dlaWdodGVkX3BhdGgnICtcbiAgICAnIHNob3cgc2hvd2NvbXBzIHNob3dyYXR2YXJzIHNpZXJwaW5za2lhbGUgc2llcnBpbnNraW1hcCBzaWduIHNpZ251bSBzaW1pbGFyaXR5dHJhbnNmb3JtJyArXG4gICAgJyBzaW1wX2luZXF1YWxpdHkgc2ltcGxpZnlfc3VtIHNpbXBsb2RlIHNpbXBtZXRkZXJpdiBzaW10cmFuIHNpbiBzaW5oIHNpbnNlcnQnICtcbiAgICAnIHNpbnZlcnRjYXNlIHNpeHRoIHNrZXduZXNzIHNrZXduZXNzX2Jlcm5vdWxsaSBza2V3bmVzc19iZXRhIHNrZXduZXNzX2Jpbm9taWFsJyArXG4gICAgJyBza2V3bmVzc19jaGkyIHNrZXduZXNzX2NvbnRpbnVvdXNfdW5pZm9ybSBza2V3bmVzc19kaXNjcmV0ZV91bmlmb3JtIHNrZXduZXNzX2V4cCcgK1xuICAgICcgc2tld25lc3NfZiBza2V3bmVzc19nYW1tYSBza2V3bmVzc19nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBza2V3bmVzc19nZW9tZXRyaWMnICtcbiAgICAnIHNrZXduZXNzX2d1bWJlbCBza2V3bmVzc19oeXBlcmdlb21ldHJpYyBza2V3bmVzc19sYXBsYWNlIHNrZXduZXNzX2xvZ2lzdGljJyArXG4gICAgJyBza2V3bmVzc19sb2dub3JtYWwgc2tld25lc3NfbmVnYXRpdmVfYmlub21pYWwgc2tld25lc3Nfbm9uY2VudHJhbF9jaGkyIHNrZXduZXNzX25vbmNlbnRyYWxfc3R1ZGVudF90JyArXG4gICAgJyBza2V3bmVzc19ub3JtYWwgc2tld25lc3NfcGFyZXRvIHNrZXduZXNzX3BvaXNzb24gc2tld25lc3NfcmF5bGVpZ2ggc2tld25lc3Nfc3R1ZGVudF90JyArXG4gICAgJyBza2V3bmVzc193ZWlidWxsIHNsZW5ndGggc21ha2Ugc21hbGxfcmhvbWJpY29zaWRvZGVjYWhlZHJvbl9ncmFwaCBzbWFsbF9yaG9tYmljdWJvY3RhaGVkcm9uX2dyYXBoJyArXG4gICAgJyBzbWF4IHNtaW4gc21pc21hdGNoIHNub3dtYXAgc251Yl9jdWJlX2dyYXBoIHNudWJfZG9kZWNhaGVkcm9uX2dyYXBoIHNvbHZlJyArXG4gICAgJyBzb2x2ZV9yZWMgc29sdmVfcmVjX3JhdCBzb21lIHNvbXJhYyBzb3J0IHNwYXJzZTZfZGVjb2RlIHNwYXJzZTZfZW5jb2RlIHNwYXJzZTZfZXhwb3J0JyArXG4gICAgJyBzcGFyc2U2X2ltcG9ydCBzcGVjaW50IHNwaGVyaWNhbCBzcGhlcmljYWxfYmVzc2VsX2ogc3BoZXJpY2FsX2Jlc3NlbF95IHNwaGVyaWNhbF9oYW5rZWwxJyArXG4gICAgJyBzcGhlcmljYWxfaGFua2VsMiBzcGhlcmljYWxfaGFybW9uaWMgc3BoZXJpY2FsX3RvX3h5eiBzcGxpY2Ugc3BsaXQgc3Bvc2l0aW9uJyArXG4gICAgJyBzcHJpbnQgc3FmciBzcXJ0IHNxcnRkZW5lc3Qgc3JlbW92ZSBzcmVtb3ZlZmlyc3Qgc3JldmVyc2Ugc3NlYXJjaCBzc29ydCBzc3RhdHVzJyArXG4gICAgJyBzc3Vic3Qgc3N1YnN0Zmlyc3Qgc3RhaXJjYXNlIHN0YW5kYXJkaXplIHN0YW5kYXJkaXplX2ludmVyc2VfdHJpZyBzdGFycGxvdCcgK1xuICAgICcgc3RhcnBsb3RfZGVzY3JpcHRpb24gc3RhdHVzIHN0ZCBzdGQxIHN0ZF9iZXJub3VsbGkgc3RkX2JldGEgc3RkX2Jpbm9taWFsJyArXG4gICAgJyBzdGRfY2hpMiBzdGRfY29udGludW91c191bmlmb3JtIHN0ZF9kaXNjcmV0ZV91bmlmb3JtIHN0ZF9leHAgc3RkX2Ygc3RkX2dhbW1hJyArXG4gICAgJyBzdGRfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgc3RkX2dlb21ldHJpYyBzdGRfZ3VtYmVsIHN0ZF9oeXBlcmdlb21ldHJpYyBzdGRfbGFwbGFjZScgK1xuICAgICcgc3RkX2xvZ2lzdGljIHN0ZF9sb2dub3JtYWwgc3RkX25lZ2F0aXZlX2Jpbm9taWFsIHN0ZF9ub25jZW50cmFsX2NoaTIgc3RkX25vbmNlbnRyYWxfc3R1ZGVudF90JyArXG4gICAgJyBzdGRfbm9ybWFsIHN0ZF9wYXJldG8gc3RkX3BvaXNzb24gc3RkX3JheWxlaWdoIHN0ZF9zdHVkZW50X3Qgc3RkX3dlaWJ1bGwnICtcbiAgICAnIHN0ZW1wbG90IHN0aXJsaW5nIHN0aXJsaW5nMSBzdGlybGluZzIgc3RyaW0gc3RyaW1sIHN0cmltciBzdHJpbmcgc3RyaW5nb3V0JyArXG4gICAgJyBzdHJpbmdwIHN0cm9uZ19jb21wb25lbnRzIHN0cnV2ZV9oIHN0cnV2ZV9sIHN1YmxpcyBzdWJsaXN0IHN1Ymxpc3RfaW5kaWNlcycgK1xuICAgICcgc3VibWF0cml4IHN1YnNhbXBsZSBzdWJzZXQgc3Vic2V0cCBzdWJzdCBzdWJzdGlucGFydCBzdWJzdF9wYXJhbGxlbCBzdWJzdHBhcnQnICtcbiAgICAnIHN1YnN0cmluZyBzdWJ2YXIgc3VidmFycCBzdW0gc3VtY29udHJhY3Qgc3VtbWFuZF90b19yZWMgc3VwY2FzZSBzdXBjb250ZXh0JyArXG4gICAgJyBzeW1ib2xwIHN5bW1kaWZmZXJlbmNlIHN5bW1ldHJpY3Agc3lzdGVtIHRha2VfY2hhbm5lbCB0YWtlX2luZmVyZW5jZSB0YW4nICtcbiAgICAnIHRhbmggdGF5bG9yIHRheWxvcmluZm8gdGF5bG9ycCB0YXlsb3Jfc2ltcGxpZmllciB0YXl0b3JhdCB0Y2xfb3V0cHV0IHRjb250cmFjdCcgK1xuICAgICcgdGVsbHJhdCB0ZWxsc2ltcCB0ZWxsc2ltcGFmdGVyIHRlbnRleCB0ZW50aCB0ZXN0X21lYW4gdGVzdF9tZWFuc19kaWZmZXJlbmNlJyArXG4gICAgJyB0ZXN0X25vcm1hbGl0eSB0ZXN0X3Byb3BvcnRpb24gdGVzdF9wcm9wb3J0aW9uc19kaWZmZXJlbmNlIHRlc3RfcmFua19zdW0nICtcbiAgICAnIHRlc3Rfc2lnbiB0ZXN0X3NpZ25lZF9yYW5rIHRlc3RfdmFyaWFuY2UgdGVzdF92YXJpYW5jZV9yYXRpbyB0ZXggdGV4MSB0ZXhfZGlzcGxheScgK1xuICAgICcgdGV4cHV0ICV0aCB0aGlyZCB0aHJvdyB0aW1lIHRpbWVkYXRlIHRpbWVyIHRpbWVyX2luZm8gdGxkZWZpbnQgdGxpbWl0IHRvZGRfY294ZXRlcicgK1xuICAgICcgdG9lcGxpdHogdG9rZW5zIHRvX2xpc3AgdG9wb2xvZ2ljYWxfc29ydCB0b19wb2x5IHRvX3BvbHlfc29sdmUgdG90YWxkaXNyZXAnICtcbiAgICAnIHRvdGFsZm91cmllciB0b3RpZW50IHRwYXJ0cG9sIHRyYWNlIHRyYWNlbWF0cml4IHRyYWNlX29wdGlvbnMgdHJhbnNmb3JtX3NhbXBsZScgK1xuICAgICcgdHJhbnNsYXRlIHRyYW5zbGF0ZV9maWxlIHRyYW5zcG9zZSB0cmVlZmFsZSB0cmVlX3JlZHVjZSB0cmVpbGxpcyB0cmVpbmF0JyArXG4gICAgJyB0cmlhbmdsZSB0cmlhbmd1bGFyaXplIHRyaWdleHBhbmQgdHJpZ3JhdCB0cmlncmVkdWNlIHRyaWdzaW1wIHRydW5jIHRydW5jYXRlJyArXG4gICAgJyB0cnVuY2F0ZWRfY3ViZV9ncmFwaCB0cnVuY2F0ZWRfZG9kZWNhaGVkcm9uX2dyYXBoIHRydW5jYXRlZF9pY29zYWhlZHJvbl9ncmFwaCcgK1xuICAgICcgdHJ1bmNhdGVkX3RldHJhaGVkcm9uX2dyYXBoIHRyX3dhcm5pbmdzX2dldCB0dWJlIHR1dHRlX2dyYXBoIHVlaXZlY3RzIHVmb3JnZXQnICtcbiAgICAnIHVsdHJhc3BoZXJpY2FsIHVuZGVybHlpbmdfZ3JhcGggdW5kaWZmIHVuaW9uIHVuaXF1ZSB1bml0ZWlnZW52ZWN0b3JzIHVuaXRwJyArXG4gICAgJyB1bml0cyB1bml0X3N0ZXAgdW5pdHZlY3RvciB1bm9yZGVyIHVuc3VtIHVudGVsbHJhdCB1bnRpbWVyJyArXG4gICAgJyB1bnRyYWNlIHVwcGVyY2FzZXAgdXJpY2NpIHVyaWVtYW5uIHV2ZWN0IHZhbmRlcm1vbmRlX21hdHJpeCB2YXIgdmFyMSB2YXJfYmVybm91bGxpJyArXG4gICAgJyB2YXJfYmV0YSB2YXJfYmlub21pYWwgdmFyX2NoaTIgdmFyX2NvbnRpbnVvdXNfdW5pZm9ybSB2YXJfZGlzY3JldGVfdW5pZm9ybScgK1xuICAgICcgdmFyX2V4cCB2YXJfZiB2YXJfZ2FtbWEgdmFyX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHZhcl9nZW9tZXRyaWMgdmFyX2d1bWJlbCcgK1xuICAgICcgdmFyX2h5cGVyZ2VvbWV0cmljIHZhcl9sYXBsYWNlIHZhcl9sb2dpc3RpYyB2YXJfbG9nbm9ybWFsIHZhcl9uZWdhdGl2ZV9iaW5vbWlhbCcgK1xuICAgICcgdmFyX25vbmNlbnRyYWxfY2hpMiB2YXJfbm9uY2VudHJhbF9zdHVkZW50X3QgdmFyX25vcm1hbCB2YXJfcGFyZXRvIHZhcl9wb2lzc29uJyArXG4gICAgJyB2YXJfcmF5bGVpZ2ggdmFyX3N0dWRlbnRfdCB2YXJfd2VpYnVsbCB2ZWN0b3IgdmVjdG9ycG90ZW50aWFsIHZlY3RvcnNpbXAnICtcbiAgICAnIHZlcmJpZnkgdmVycyB2ZXJ0ZXhfY29sb3JpbmcgdmVydGV4X2Nvbm5lY3Rpdml0eSB2ZXJ0ZXhfZGVncmVlIHZlcnRleF9kaXN0YW5jZScgK1xuICAgICcgdmVydGV4X2VjY2VudHJpY2l0eSB2ZXJ0ZXhfaW5fZGVncmVlIHZlcnRleF9vdXRfZGVncmVlIHZlcnRpY2VzIHZlcnRpY2VzX3RvX2N5Y2xlJyArXG4gICAgJyB2ZXJ0aWNlc190b19wYXRoICV3IHdleWwgd2hlZWxfZ3JhcGggd2llbmVyX2luZGV4IHdpZ25lcl8zaiB3aWduZXJfNmonICtcbiAgICAnIHdpZ25lcl85aiB3aXRoX3N0ZG91dCB3cml0ZV9iaW5hcnlfZGF0YSB3cml0ZWJ5dGUgd3JpdGVfZGF0YSB3cml0ZWZpbGUgd3JvbnNraWFuJyArXG4gICAgJyB4cmVkdWNlIHh0aHJ1ICV5IFplaWxiZXJnZXIgemVyb2VxdWl2IHplcm9mb3IgemVyb21hdHJpeCB6ZXJvbWF0cml4cCB6ZXRhJyArXG4gICAgJyB6Z2VldiB6aGVldiB6bGFuZ2Ugem5fYWRkX3RhYmxlIHpuX2Nhcm1pY2hhZWxfbGFtYmRhIHpuX2NoYXJhY3RlcmlzdGljX2ZhY3RvcnMnICtcbiAgICAnIHpuX2RldGVybWluYW50IHpuX2ZhY3Rvcl9nZW5lcmF0b3JzIHpuX2ludmVydF9ieV9sdSB6bl9sb2cgem5fbXVsdF90YWJsZScgK1xuICAgICcgYWJzYm94Y2hhciBhY3RpdmVjb250ZXh0cyBhZGFwdF9kZXB0aCBhZGRpdGl2ZSBhZGltIGFmb3JtIGFsZ2VicmFpYycgK1xuICAgICcgYWxnZXBzaWxvbiBhbGdleGFjdCBhbGlhc2VzIGFsbGJ1dCBhbGxfZG90c2ltcF9kZW5vbXMgYWxsb2NhdGlvbiBhbGxzeW0gYWxwaGFiZXRpYycgK1xuICAgICcgYW5pbWF0aW9uIGFudGlzeW1tZXRyaWMgYXJyYXlzIGFza2V4cCBhc3N1bWVfcG9zIGFzc3VtZV9wb3NfcHJlZCBhc3N1bWVzY2FsYXInICtcbiAgICAnIGFzeW1ib2wgYXRvbWdyYWQgYXRyaWcxIGF4ZXMgYXhpc18zZCBheGlzX2JvdHRvbSBheGlzX2xlZnQgYXhpc19yaWdodCBheGlzX3RvcCcgK1xuICAgICcgYXppbXV0aCBiYWNrZ3JvdW5kIGJhY2tncm91bmRfY29sb3IgYmFja3N1YnN0IGJlcmxlZmFjdCBiZXJuc3RlaW5fZXhwbGljaXQnICtcbiAgICAnIGJlc3NlbGV4cGFuZCBiZXRhX2FyZ3Nfc3VtX3RvX2ludGVnZXIgYmV0YV9leHBhbmQgYmZ0b3JhdCBiZnRydW5jIGJpbmR0ZXN0JyArXG4gICAgJyBib3JkZXIgYm91bmRhcmllc19hcnJheSBib3ggYm94Y2hhciBicmVha3VwICVjIGNhcHBpbmcgY2F1Y2h5c3VtIGNicmFuZ2UnICtcbiAgICAnIGNidGljcyBjZW50ZXIgY2ZsZW5ndGggY2ZyYW1lX2ZsYWcgY25vbm1ldF9mbGFnIGNvbG9yIGNvbG9yX2JhciBjb2xvcl9iYXJfdGljcycgK1xuICAgICcgY29sb3Jib3ggY29sdW1ucyBjb21tdXRhdGl2ZSBjb21wbGV4IGNvbmUgY29udGV4dCBjb250ZXh0cyBjb250b3VyIGNvbnRvdXJfbGV2ZWxzJyArXG4gICAgJyBjb3NucGlmbGFnIGN0YXlwb3YgY3RheXB0IGN0YXlzd2l0Y2ggY3RheXZhciBjdF9jb29yZHMgY3RvcnNpb25fZmxhZyBjdHJnc2ltcCcgK1xuICAgICcgY3ViZSBjdXJyZW50X2xldF9ydWxlX3BhY2thZ2UgY3lsaW5kZXIgZGF0YV9maWxlX25hbWUgZGVidWdtb2RlIGRlY3JlYXNpbmcnICtcbiAgICAnIGRlZmF1bHRfbGV0X3J1bGVfcGFja2FnZSBkZWxheSBkZXBlbmRlbmNpZXMgZGVyaXZhYmJyZXYgZGVyaXZzdWJzdCBkZXRvdXQnICtcbiAgICAnIGRpYWdtZXRyaWMgZGlmZiBkaW0gZGltZW5zaW9ucyBkaXNwZmxhZyBkaXNwbGF5MmR8MTAgZGlzcGxheV9mb3JtYXRfaW50ZXJuYWwnICtcbiAgICAnIGRpc3RyaWJ1dGVfb3ZlciBkb2FsbG14b3BzIGRvbWFpbiBkb214ZXhwdCBkb214bXhvcHMgZG9teG5jdGltZXMgZG9udGZhY3RvcicgK1xuICAgICcgZG9zY214b3BzIGRvc2NteHBsdXMgZG90MG5zY3NpbXAgZG90MHNpbXAgZG90MXNpbXAgZG90YXNzb2MgZG90Y29uc3RydWxlcycgK1xuICAgICcgZG90ZGlzdHJpYiBkb3RleHB0c2ltcCBkb3RpZGVudCBkb3RzY3J1bGVzIGRyYXdfZ3JhcGhfcHJvZ3JhbSBkcmF3X3JlYWxwYXJ0JyArXG4gICAgJyBlZGdlX2NvbG9yIGVkZ2VfY29sb3JpbmcgZWRnZV9wYXJ0aXRpb24gZWRnZV90eXBlIGVkZ2Vfd2lkdGggJWVkaXNwZmxhZycgK1xuICAgICcgZWxldmF0aW9uICVlbW9kZSBlbmRwaGkgZW5kdGhldGEgZW5naW5lZXJpbmdfZm9ybWF0X2Zsb2F0cyBlbmhhbmNlZDNkICVlbnVtZXInICtcbiAgICAnIGVwc2lsb25fbHAgZXJmZmxhZyBlcmZfcmVwcmVzZW50YXRpb24gZXJyb3Jtc2cgZXJyb3Jfc2l6ZSBlcnJvcl9zeW1zIGVycm9yX3R5cGUnICtcbiAgICAnICVlX3RvX251bWxvZyBldmFsIGV2ZW4gZXZlbmZ1biBldmZsYWcgZXZmdW4gZXZfcG9pbnQgZXhwYW5kd3J0X2Rlbm9tIGV4cGludGV4cGFuZCcgK1xuICAgICcgZXhwaW50cmVwIGV4cG9uIGV4cG9wIGV4cHRkaXNwZmxhZyBleHB0aXNvbGF0ZSBleHB0c3Vic3QgZmFjZXhwYW5kIGZhY3N1bV9jb21iaW5lJyArXG4gICAgJyBmYWN0bGltIGZhY3RvcmZsYWcgZmFjdG9yaWFsX2V4cGFuZCBmYWN0b3JzX29ubHkgZmIgZmVhdHVyZSBmZWF0dXJlcycgK1xuICAgICcgZmlsZV9uYW1lIGZpbGVfb3V0cHV0X2FwcGVuZCBmaWxlX3NlYXJjaF9kZW1vIGZpbGVfc2VhcmNoX2xpc3AgZmlsZV9zZWFyY2hfbWF4aW1hfDEwJyArXG4gICAgJyBmaWxlX3NlYXJjaF90ZXN0cyBmaWxlX3NlYXJjaF91c2FnZSBmaWxlX3R5cGVfbGlzcCBmaWxlX3R5cGVfbWF4aW1hfDEwIGZpbGxfY29sb3InICtcbiAgICAnIGZpbGxfZGVuc2l0eSBmaWxsZWRfZnVuYyBmaXhlZF92ZXJ0aWNlcyBmbGlwZmxhZyBmbG9hdDJiZiBmb250IGZvbnRfc2l6ZScgK1xuICAgICcgZm9ydGluZGVudCBmb3J0c3BhY2VzIGZwcHJlYyBmcHByaW50cHJlYyBmdW5jdGlvbnMgZ2FtbWFfZXhwYW5kIGdhbW1hbGltJyArXG4gICAgJyBnZGV0IGdlbmluZGV4IGdlbnN1bW51bSBHR0ZDRk1BWCBHR0ZJTkZJTklUWSBnbG9iYWxzb2x2ZSBnbnVwbG90X2NvbW1hbmQnICtcbiAgICAnIGdudXBsb3RfY3VydmVfc3R5bGVzIGdudXBsb3RfY3VydmVfdGl0bGVzIGdudXBsb3RfZGVmYXVsdF90ZXJtX2NvbW1hbmQgZ251cGxvdF9kdW1iX3Rlcm1fY29tbWFuZCcgK1xuICAgICcgZ251cGxvdF9maWxlX2FyZ3MgZ251cGxvdF9maWxlX25hbWUgZ251cGxvdF9vdXRfZmlsZSBnbnVwbG90X3BkZl90ZXJtX2NvbW1hbmQnICtcbiAgICAnIGdudXBsb3RfcG0zZCBnbnVwbG90X3BuZ190ZXJtX2NvbW1hbmQgZ251cGxvdF9wb3N0YW1ibGUgZ251cGxvdF9wcmVhbWJsZScgK1xuICAgICcgZ251cGxvdF9wc190ZXJtX2NvbW1hbmQgZ251cGxvdF9zdmdfdGVybV9jb21tYW5kIGdudXBsb3RfdGVybSBnbnVwbG90X3ZpZXdfYXJncycgK1xuICAgICcgR29zcGVyX2luX1plaWxiZXJnZXIgZ3JhZGVmcyBncmlkIGdyaWQyZCBncmluZCBoYWxmYW5nbGVzIGhlYWRfYW5nbGUgaGVhZF9ib3RoJyArXG4gICAgJyBoZWFkX2xlbmd0aCBoZWFkX3R5cGUgaGVpZ2h0IGh5cGVyZ2VvbWV0cmljX3JlcHJlc2VudGF0aW9uICVpYXJncyBpYmFzZScgK1xuICAgICcgaWNjMSBpY2MyIGljb3VudGVyIGlkdW1teXggaWVxbnByaW50IGlmYiBpZmMxIGlmYzIgaWZnIGlmZ2kgaWZyIGlmcmFtZV9icmFja2V0X2Zvcm0nICtcbiAgICAnIGlmcmkgaWdlb3dlZGdlX2ZsYWcgaWt0MSBpa3QyIGltYWdpbmFyeSBpbmNoYXIgaW5jcmVhc2luZyBpbmZldmFsJyArXG4gICAgJyBpbmZpbml0eSBpbmZsYWcgaW5mb2xpc3RzIGlubSBpbm1jMSBpbm1jMiBpbnRhbmFseXNpcyBpbnRlZ2VyIGludGVnZXJ2YWx1ZWQnICtcbiAgICAnIGludGVncmF0ZV91c2Vfcm9vdHNvZiBpbnRlZ3JhdGlvbl9jb25zdGFudCBpbnRlZ3JhdGlvbl9jb25zdGFudF9jb3VudGVyIGludGVycG9sYXRlX2NvbG9yJyArXG4gICAgJyBpbnRmYWNsaW0gaXBfZ3JpZCBpcF9ncmlkX2luIGlycmF0aW9uYWwgaXNvbGF0ZV93cnRfdGltZXMgaXRlcmF0aW9ucyBpdHInICtcbiAgICAnIGp1bGlhX3BhcmFtZXRlciAlazEgJWsyIGtlZXBmbG9hdCBrZXkga2V5X3BvcyBraW52YXJpYW50IGt0IGxhYmVsIGxhYmVsX2FsaWdubWVudCcgK1xuICAgICcgbGFiZWxfb3JpZW50YXRpb24gbGFiZWxzIGxhc3NvY2lhdGl2ZSBsYmZnc19uY29ycmVjdGlvbnMgbGJmZ3NfbmZldmFsX21heCcgK1xuICAgICcgbGVmdGp1c3QgbGVnZW5kIGxldHJhdCBsZXRfcnVsZV9wYWNrYWdlcyBsZmcgbGcgbGhvc3BpdGFsbGltIGxpbXN1YnN0IGxpbmVhcicgK1xuICAgICcgbGluZWFyX3NvbHZlciBsaW5lY2hhciBsaW5lbHwxMCBsaW5lbnVtIGxpbmVfdHlwZSBsaW5ld2lkdGggbGluZV93aWR0aCBsaW5zb2x2ZV9wYXJhbXMnICtcbiAgICAnIGxpbnNvbHZld2FybiBsaXNwZGlzcCBsaXN0YXJpdGggbGlzdGNvbnN0dmFycyBsaXN0ZHVtbXl2YXJzIGxteGNoYXIgbG9hZF9wYXRobmFtZScgK1xuICAgICcgbG9hZHByaW50IGxvZ2FicyBsb2dhcmMgbG9nY2IgbG9nY29uY29lZmZwIGxvZ2V4cGFuZCBsb2duZWdpbnQgbG9nc2ltcCBsb2d4JyArXG4gICAgJyBsb2d4X3NlY29uZGFyeSBsb2d5IGxvZ3lfc2Vjb25kYXJ5IGxvZ3ogbHJpZW0gbTFwYnJhbmNoIG1hY3JvZXhwYW5zaW9uIG1hY3JvcycgK1xuICAgICcgbWFpbnZhciBtYW51YWxfZGVtbyBtYXBlcnJvciBtYXBwcmludCBtYXRyaXhfZWxlbWVudF9hZGQgbWF0cml4X2VsZW1lbnRfbXVsdCcgK1xuICAgICcgbWF0cml4X2VsZW1lbnRfdHJhbnNwb3NlIG1heGFwcGx5ZGVwdGggbWF4YXBwbHloZWlnaHQgbWF4aW1hX3RlbXBkaXJ8MTAgbWF4aW1hX3VzZXJkaXJ8MTAnICtcbiAgICAnIG1heG5lZ2V4IE1BWF9PUkQgbWF4cG9zZXggbWF4cHNpZnJhY2Rlbm9tIG1heHBzaWZyYWNudW0gbWF4cHNpbmVnaW50IG1heHBzaXBvc2ludCcgK1xuICAgICcgbWF4dGF5b3JkZXIgbWVzaF9saW5lc19jb2xvciBtZXRob2QgbW9kX2JpZ19wcmltZSBtb2RlX2NoZWNrX2Vycm9ycCcgK1xuICAgICcgbW9kZV9jaGVja3AgbW9kZV9jaGVja193YXJucCBtb2RfdGVzdCBtb2RfdGhyZXNob2xkIG1vZHVsYXJfbGluZWFyX3NvbHZlcicgK1xuICAgICcgbW9kdWx1cyBtdWx0aXBsaWNhdGl2ZSBtdWx0aXBsaWNpdGllcyBteW9wdGlvbnMgbmFyeSBuZWdkaXN0cmliIG5lZ3N1bWRpc3BmbGFnJyArXG4gICAgJyBuZXdsaW5lIG5ld3RvbmVwc2lsb24gbmV3dG9ubWF4aXRlciBuZXh0bGF5ZXJmYWN0b3IgbmljZWluZGljZXNwcmVmIG5tIG5tYycgK1xuICAgICcgbm9ldmFsIG5vbGFiZWxzIG5vbmVnYXRpdmVfbHAgbm9uaW50ZWdlciBub25zY2FsYXIgbm91biBub3VuZGlzcCBub3VucyBucCcgK1xuICAgICcgbnBpIG50aWNrcyBudHJpZyBudW1lciBudW1lcl9wYnJhbmNoIG9iYXNlIG9kZCBvZGRmdW4gb3BhY2l0eSBvcHByb3BlcnRpZXMnICtcbiAgICAnIG9wc3Vic3Qgb3B0aW1wcmVmaXggb3B0aW9uc2V0IG9yaWVudGF0aW9uIG9yaWdpbiBvcnRob3BvbHlfcmV0dXJuc19pbnRlcnZhbHMnICtcbiAgICAnIG91dGF0aXZlIG91dGNoYXIgcGFja2FnZWZpbGUgcGFsZXR0ZSBwYXJ0c3dpdGNoIHBkZl9maWxlIHBmZWZvcm1hdCBwaGlyZXNvbHV0aW9uJyArXG4gICAgJyAlcGlhcmdzIHBpZWNlIHBpdm90X2NvdW50X3N4IHBpdm90X21heF9zeCBwbG90X2Zvcm1hdCBwbG90X29wdGlvbnMgcGxvdF9yZWFscGFydCcgK1xuICAgICcgcG5nX2ZpbGUgcG9jaGhhbW1lcl9tYXhfaW5kZXggcG9pbnRzIHBvaW50c2l6ZSBwb2ludF9zaXplIHBvaW50c19qb2luZWQgcG9pbnRfdHlwZScgK1xuICAgICcgcG9pc2xpbSBwb2lzc29uIHBvbHlfY29lZmZpY2llbnRfcmluZyBwb2x5X2VsaW1pbmF0aW9uX29yZGVyIHBvbHlmYWN0b3IgcG9seV9ncm9ibmVyX2FsZ29yaXRobScgK1xuICAgICcgcG9seV9ncm9ibmVyX2RlYnVnIHBvbHlfbW9ub21pYWxfb3JkZXIgcG9seV9wcmltYXJ5X2VsaW1pbmF0aW9uX29yZGVyIHBvbHlfcmV0dXJuX3Rlcm1fbGlzdCcgK1xuICAgICcgcG9seV9zZWNvbmRhcnlfZWxpbWluYXRpb25fb3JkZXIgcG9seV90b3BfcmVkdWN0aW9uX29ubHkgcG9zZnVuIHBvc2l0aW9uJyArXG4gICAgJyBwb3dlcmRpc3AgcHJlZCBwcmVkZXJyb3IgcHJpbWVwX251bWJlcl9vZl90ZXN0cyBwcm9kdWN0X3VzZV9nYW1tYSBwcm9ncmFtJyArXG4gICAgJyBwcm9ncmFtbW9kZSBwcm9tb3RlX2Zsb2F0X3RvX2JpZ2Zsb2F0IHByb21wdCBwcm9wb3J0aW9uYWxfYXhlcyBwcm9wcyBwc2V4cGFuZCcgK1xuICAgICcgcHNfZmlsZSByYWRleHBhbmQgcmFkaXVzIHJhZHN1YnN0ZmxhZyByYXNzb2NpYXRpdmUgcmF0YWxnZGVub20gcmF0Y2hyaXN0b2YnICtcbiAgICAnIHJhdGRlbm9tZGl2aWRlIHJhdGVpbnN0ZWluIHJhdGVwc2lsb24gcmF0ZmFjIHJhdGlvbmFsIHJhdG14IHJhdHByaW50IHJhdHJpZW1hbm4nICtcbiAgICAnIHJhdHNpbXBleHBvbnMgcmF0dmFyc3dpdGNoIHJhdHdlaWdodHMgcmF0d2V5bCByYXR3dGx2bCByZWFsIHJlYWxvbmx5IHJlZHJhdycgK1xuICAgICcgcmVmY2hlY2sgcmVzb2x1dGlvbiByZXN0YXJ0IHJlc3VsdGFudCByaWMgcmllbSBybXhjaGFyICVybnVtX2xpc3Qgcm9tYmVyZ2FicycgK1xuICAgICcgcm9tYmVyZ2l0IHJvbWJlcmdtaW4gcm9tYmVyZ3RvbCByb290c2Nvbm1vZGUgcm9vdHNlcHNpbG9uIHJ1bl92aWV3ZXIgc2FtZV94eScgK1xuICAgICcgc2FtZV94eXogc2F2ZWRlZiBzYXZlZmFjdG9ycyBzY2FsYXIgc2NhbGFybWF0cml4cCBzY2FsZSBzY2FsZV9scCBzZXRjaGVjaycgK1xuICAgICcgc2V0Y2hlY2ticmVhayBzZXR2YWwgc2hvd19lZGdlX2NvbG9yIHNob3dfZWRnZXMgc2hvd19lZGdlX3R5cGUgc2hvd19lZGdlX3dpZHRoJyArXG4gICAgJyBzaG93X2lkIHNob3dfbGFiZWwgc2hvd3RpbWUgc2hvd192ZXJ0ZXhfY29sb3Igc2hvd192ZXJ0ZXhfc2l6ZSBzaG93X3ZlcnRleF90eXBlJyArXG4gICAgJyBzaG93X3ZlcnRpY2VzIHNob3dfd2VpZ2h0IHNpbXAgc2ltcGxpZmllZF9vdXRwdXQgc2ltcGxpZnlfcHJvZHVjdHMgc2ltcHByb2R1Y3QnICtcbiAgICAnIHNpbXBzdW0gc2lubnBpZmxhZyBzb2x2ZWRlY29tcG9zZXMgc29sdmVleHBsaWNpdCBzb2x2ZWZhY3RvcnMgc29sdmVudWxsd2FybicgK1xuICAgICcgc29sdmVyYWRjYW4gc29sdmV0cmlnd2FybiBzcGFjZSBzcGFyc2Ugc3BoZXJlIHNwcmluZ19lbWJlZGRpbmdfZGVwdGggc3FydGRpc3BmbGFnJyArXG4gICAgJyBzdGFyZGlzcCBzdGFydHBoaSBzdGFydHRoZXRhIHN0YXRzX251bWVyIHN0cmluZ2Rpc3Agc3RydWN0dXJlcyBzdHlsZSBzdWJsaXNfYXBwbHlfbGFtYmRhJyArXG4gICAgJyBzdWJudW1zaW1wIHN1bWV4cGFuZCBzdW1zcGxpdGZhY3Qgc3VyZmFjZSBzdXJmYWNlX2hpZGUgc3ZnX2ZpbGUgc3ltbWV0cmljJyArXG4gICAgJyB0YWIgdGF5bG9yZGVwdGggdGF5bG9yX2xvZ2V4cGFuZCB0YXlsb3Jfb3JkZXJfY29lZmZpY2llbnRzIHRheWxvcl90cnVuY2F0ZV9wb2x5bm9taWFscycgK1xuICAgICcgdGVuc29ya2lsbCB0ZXJtaW5hbCB0ZXN0c3VpdGVfZmlsZXMgdGhldGFyZXNvbHV0aW9uIHRpbWVyX2RldmFsdWUgdGl0bGUgdGxpbXN3aXRjaCcgK1xuICAgICcgdHIgdHJhY2sgdHJhbnNjb21waWxlIHRyYW5zZm9ybSB0cmFuc2Zvcm1feHkgdHJhbnNsYXRlX2Zhc3RfYXJyYXlzIHRyYW5zcGFyZW50JyArXG4gICAgJyB0cmFuc3J1biB0cl9hcnJheV9hc19yZWYgdHJfYm91bmRfZnVuY3Rpb25fYXBwbHlwIHRyX2ZpbGVfdHR5X21lc3NhZ2VzcCB0cl9mbG9hdF9jYW5fYnJhbmNoX2NvbXBsZXgnICtcbiAgICAnIHRyX2Z1bmN0aW9uX2NhbGxfZGVmYXVsdCB0cmlnZXhwYW5kcGx1cyB0cmlnZXhwYW5kdGltZXMgdHJpZ2ludmVyc2VzIHRyaWdzaWduJyArXG4gICAgJyB0cml2aWFsX3NvbHV0aW9ucyB0cl9udW1lciB0cl9vcHRpbWl6ZV9tYXhfbG9vcCB0cl9zZW1pY29tcGlsZSB0cl9zdGF0ZV92YXJzJyArXG4gICAgJyB0cl93YXJuX2JhZF9mdW5jdGlvbl9jYWxscyB0cl93YXJuX2ZleHByIHRyX3dhcm5fbWV2YWwgdHJfd2Fybl9tb2RlJyArXG4gICAgJyB0cl93YXJuX3VuZGVjbGFyZWQgdHJfd2Fybl91bmRlZmluZWRfdmFyaWFibGUgdHN0ZXAgdHR5b2ZmIHR1YmVfZXh0cmVtZXMnICtcbiAgICAnIHVmZyB1ZyAldW5pdGV4cGFuZCB1bml0X3ZlY3RvcnMgdXJpYyB1cmllbSB1c2VfZmFzdF9hcnJheXMgdXNlcl9wcmVhbWJsZScgK1xuICAgICcgdXNlcnNldHVuaXRzIHZhbHVlcyB2ZWN0X2Nyb3NzIHZlcmJvc2UgdmVydGV4X2NvbG9yIHZlcnRleF9jb2xvcmluZyB2ZXJ0ZXhfcGFydGl0aW9uJyArXG4gICAgJyB2ZXJ0ZXhfc2l6ZSB2ZXJ0ZXhfdHlwZSB2aWV3IHdhcm5pbmdzIHdleWwgd2lkdGggd2luZG93bmFtZSB3aW5kb3d0aXRsZSB3aXJlZF9zdXJmYWNlJyArXG4gICAgJyB3aXJlZnJhbWUgeGF4aXMgeGF4aXNfY29sb3IgeGF4aXNfc2Vjb25kYXJ5IHhheGlzX3R5cGUgeGF4aXNfd2lkdGggeGxhYmVsJyArXG4gICAgJyB4bGFiZWxfc2Vjb25kYXJ5IHhsZW5ndGggeHJhbmdlIHhyYW5nZV9zZWNvbmRhcnkgeHRpY3MgeHRpY3NfYXhpcyB4dGljc19yb3RhdGUnICtcbiAgICAnIHh0aWNzX3JvdGF0ZV9zZWNvbmRhcnkgeHRpY3Nfc2Vjb25kYXJ5IHh0aWNzX3NlY29uZGFyeV9heGlzIHh1X2dyaWQgeF92b3hlbCcgK1xuICAgICcgeHlfZmlsZSB4eXBsYW5lIHh5X3NjYWxlIHlheGlzIHlheGlzX2NvbG9yIHlheGlzX3NlY29uZGFyeSB5YXhpc190eXBlIHlheGlzX3dpZHRoJyArXG4gICAgJyB5bGFiZWwgeWxhYmVsX3NlY29uZGFyeSB5bGVuZ3RoIHlyYW5nZSB5cmFuZ2Vfc2Vjb25kYXJ5IHl0aWNzIHl0aWNzX2F4aXMnICtcbiAgICAnIHl0aWNzX3JvdGF0ZSB5dGljc19yb3RhdGVfc2Vjb25kYXJ5IHl0aWNzX3NlY29uZGFyeSB5dGljc19zZWNvbmRhcnlfYXhpcycgK1xuICAgICcgeXZfZ3JpZCB5X3ZveGVsIHl4X3JhdGlvIHpheGlzIHpheGlzX2NvbG9yIHpheGlzX3R5cGUgemF4aXNfd2lkdGggemVyb2EgemVyb2InICtcbiAgICAnIHplcm9iZXJuIHpldGElcGkgemxhYmVsIHpsYWJlbF9yb3RhdGUgemxlbmd0aCB6bWluIHpuX3ByaW1yb290X2xpbWl0IHpuX3ByaW1yb290X3ByZXRlc3QnO1xuICBjb25zdCBTWU1CT0xTID0gJ18gX18gJXwwICUlfDAnO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ01heGltYScsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnW0EtWmEtel8lXVswLTlBLVphLXpfJV0qJyxcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTl9GVU5DVElPTlMsXG4gICAgICBzeW1ib2w6IFNZTUJPTFNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICBiZWdpbjogJy9cXFxcKicsXG4gICAgICAgIGVuZDogJ1xcXFwqLycsXG4gICAgICAgIGNvbnRhaW5zOiBbICdzZWxmJyBdXG4gICAgICB9LFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGZsb2F0IG51bWJlciB3LyBleHBvbmVudFxuICAgICAgICAgICAgLy8gaG1tLCBJIHdvbmRlciBpZiB3ZSBvdWdodCB0byBpbmNsdWRlIG90aGVyIGV4cG9uZW50IG1hcmtlcnM/XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFxkK3xcXFxcZCtcXFxcLnxcXFxcLlxcXFxkK3xcXFxcZCtcXFxcLlxcXFxkKylbRWVdWy0rXT9cXFxcZCtcXFxcYidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpZ2Zsb2F0IG51bWJlclxuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcZCt8XFxcXGQrXFxcXC58XFxcXC5cXFxcZCt8XFxcXGQrXFxcXC5cXFxcZCspW0JiXVstK10/XFxcXGQrXFxcXGInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZmxvYXQgbnVtYmVyIHcvb3V0IGV4cG9uZW50XG4gICAgICAgICAgICAvLyBEb2Vzbid0IHNlZW0gdG8gcmVjb2duaXplIGZsb2F0cyB3aGljaCBzdGFydCB3aXRoICcuJ1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcLlxcXFxkK3xcXFxcZCtcXFxcLlxcXFxkKylcXFxcYidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGludGVnZXIgaW4gYmFzZSB1cCB0byAzNlxuICAgICAgICAgICAgLy8gRG9lc24ndCBzZWVtIHRvIHJlY29nbml6ZSBpbnRlZ2VycyB3aGljaCBlbmQgd2l0aCAnLidcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrfDBbMC05QS1aYS16XSspXFxcXC4/XFxcXGInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvQC9cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXhpbWE7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogTUVMXG5EZXNjcmlwdGlvbjogTWF5YSBFbWJlZGRlZCBMYW5ndWFnZVxuQXV0aG9yOiBTaHVlbi1IdWVpIEd1YW4gPGRyYWtlLmd1YW5AZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cDovL3d3dy5hdXRvZGVzay5jb20vcHJvZHVjdHMvYXV0b2Rlc2stbWF5YS9vdmVydmlld1xuQ2F0ZWdvcnk6IGdyYXBoaWNzXG4qL1xuXG5mdW5jdGlvbiBtZWwoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNRUwnLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2ludCBmbG9hdCBzdHJpbmcgdmVjdG9yIG1hdHJpeCBpZiBlbHNlIHN3aXRjaCBjYXNlIGRlZmF1bHQgd2hpbGUgZG8gZm9yIGluIGJyZWFrICcgK1xuICAgICAgJ2NvbnRpbnVlIGdsb2JhbCBwcm9jIHJldHVybiBhYm91dCBhYnMgYWRkQXR0ciBhZGRBdHRyaWJ1dGVFZGl0b3JOb2RlSGVscCBhZGREeW5hbWljICcgK1xuICAgICAgJ2FkZE5ld1NoZWxmVGFiIGFkZFBQIGFkZFBhbmVsQ2F0ZWdvcnkgYWRkUHJlZml4VG9OYW1lIGFkdmFuY2VUb05leHREcml2ZW5LZXkgJyArXG4gICAgICAnYWZmZWN0ZWROZXQgYWZmZWN0cyBhaW1Db25zdHJhaW50IGFpciBhbGlhcyBhbGlhc0F0dHIgYWxpZ24gYWxpZ25DdHggYWxpZ25DdXJ2ZSAnICtcbiAgICAgICdhbGlnblN1cmZhY2UgYWxsVmlld0ZpdCBhbWJpZW50TGlnaHQgYW5nbGUgYW5nbGVCZXR3ZWVuIGFuaW1Db25lIGFuaW1DdXJ2ZUVkaXRvciAnICtcbiAgICAgICdhbmltRGlzcGxheSBhbmltVmlldyBhbm5vdGF0ZSBhcHBlbmRTdHJpbmdBcnJheSBhcHBsaWNhdGlvbk5hbWUgYXBwbHlBdHRyUHJlc2V0ICcgK1xuICAgICAgJ2FwcGx5VGFrZSBhcmNMZW5EaW1Db250ZXh0IGFyY0xlbmd0aERpbWVuc2lvbiBhcmNsZW4gYXJyYXlNYXBwZXIgYXJ0M2RQYWludEN0eCAnICtcbiAgICAgICdhcnRBdHRyQ3R4IGFydEF0dHJQYWludFZlcnRleEN0eCBhcnRBdHRyU2tpblBhaW50Q3R4IGFydEF0dHJUb29sIGFydEJ1aWxkUGFpbnRNZW51ICcgK1xuICAgICAgJ2FydEZsdWlkQXR0ckN0eCBhcnRQdXR0eUN0eCBhcnRTZWxlY3RDdHggYXJ0U2V0UGFpbnRDdHggYXJ0VXNlclBhaW50Q3R4IGFzc2lnbkNvbW1hbmQgJyArXG4gICAgICAnYXNzaWduSW5wdXREZXZpY2UgYXNzaWduVmlld3BvcnRGYWN0b3JpZXMgYXR0YWNoQ3VydmUgYXR0YWNoRGV2aWNlQXR0ciBhdHRhY2hTdXJmYWNlICcgK1xuICAgICAgJ2F0dHJDb2xvclNsaWRlckdycCBhdHRyQ29tcGF0aWJpbGl0eSBhdHRyQ29udHJvbEdycCBhdHRyRW51bU9wdGlvbk1lbnUgJyArXG4gICAgICAnYXR0ckVudW1PcHRpb25NZW51R3JwIGF0dHJGaWVsZEdycCBhdHRyRmllbGRTbGlkZXJHcnAgYXR0ck5hdmlnYXRpb25Db250cm9sR3JwICcgK1xuICAgICAgJ2F0dHJQcmVzZXRFZGl0V2luIGF0dHJpYnV0ZUV4aXN0cyBhdHRyaWJ1dGVJbmZvIGF0dHJpYnV0ZU1lbnUgYXR0cmlidXRlUXVlcnkgJyArXG4gICAgICAnYXV0b0tleWZyYW1lIGF1dG9QbGFjZSBiYWtlQ2xpcCBiYWtlRmx1aWRTaGFkaW5nIGJha2VQYXJ0aWFsSGlzdG9yeSBiYWtlUmVzdWx0cyAnICtcbiAgICAgICdiYWtlU2ltdWxhdGlvbiBiYXNlbmFtZSBiYXNlbmFtZUV4IGJhdGNoUmVuZGVyIGJlc3NlbCBiZXZlbCBiZXZlbFBsdXMgYmluTWVtYmVyc2hpcCAnICtcbiAgICAgICdiaW5kU2tpbiBibGVuZDIgYmxlbmRTaGFwZSBibGVuZFNoYXBlRWRpdG9yIGJsZW5kU2hhcGVQYW5lbCBibGVuZFR3b0F0dHIgYmxpbmREYXRhVHlwZSAnICtcbiAgICAgICdib25lTGF0dGljZSBib3VuZGFyeSBib3hEb2xseUN0eCBib3hab29tQ3R4IGJ1ZmZlckN1cnZlIGJ1aWxkQm9va21hcmtNZW51ICcgK1xuICAgICAgJ2J1aWxkS2V5ZnJhbWVNZW51IGJ1dHRvbiBidXR0b25NYW5pcCBDQkcgY2FjaGVGaWxlIGNhY2hlRmlsZUNvbWJpbmUgY2FjaGVGaWxlTWVyZ2UgJyArXG4gICAgICAnY2FjaGVGaWxlVHJhY2sgY2FtZXJhIGNhbWVyYVZpZXcgY2FuQ3JlYXRlTWFuaXAgY2FudmFzIGNhcGl0YWxpemVTdHJpbmcgY2F0Y2ggJyArXG4gICAgICAnY2F0Y2hRdWlldCBjZWlsIGNoYW5nZVN1YmRpdkNvbXBvbmVudERpc3BsYXlMZXZlbCBjaGFuZ2VTdWJkaXZSZWdpb24gY2hhbm5lbEJveCAnICtcbiAgICAgICdjaGFyYWN0ZXIgY2hhcmFjdGVyTWFwIGNoYXJhY3Rlck91dGxpbmVFZGl0b3IgY2hhcmFjdGVyaXplIGNoZGlyIGNoZWNrQm94IGNoZWNrQm94R3JwICcgK1xuICAgICAgJ2NoZWNrRGVmYXVsdFJlbmRlckdsb2JhbHMgY2hvaWNlIGNpcmNsZSBjaXJjdWxhckZpbGxldCBjbGFtcCBjbGVhciBjbGVhckNhY2hlIGNsaXAgJyArXG4gICAgICAnY2xpcEVkaXRvciBjbGlwRWRpdG9yQ3VycmVudFRpbWVDdHggY2xpcFNjaGVkdWxlIGNsaXBTY2hlZHVsZXJPdXRsaW5lciBjbGlwVHJpbUJlZm9yZSAnICtcbiAgICAgICdjbG9zZUN1cnZlIGNsb3NlU3VyZmFjZSBjbHVzdGVyIGNtZEZpbGVPdXRwdXQgY21kU2Nyb2xsRmllbGRFeGVjdXRlciAnICtcbiAgICAgICdjbWRTY3JvbGxGaWVsZFJlcG9ydGVyIGNtZFNoZWxsIGNvYXJzZW5TdWJkaXZTZWxlY3Rpb25MaXN0IGNvbGxpc2lvbiBjb2xvciAnICtcbiAgICAgICdjb2xvckF0UG9pbnQgY29sb3JFZGl0b3IgY29sb3JJbmRleCBjb2xvckluZGV4U2xpZGVyR3JwIGNvbG9yU2xpZGVyQnV0dG9uR3JwICcgK1xuICAgICAgJ2NvbG9yU2xpZGVyR3JwIGNvbHVtbkxheW91dCBjb21tYW5kRWNobyBjb21tYW5kTGluZSBjb21tYW5kUG9ydCBjb21wYWN0SGFpclN5c3RlbSAnICtcbiAgICAgICdjb21wb25lbnRFZGl0b3IgY29tcG9zaXRpbmdJbnRlcm9wIGNvbXB1dGVQb2x5c2V0Vm9sdW1lIGNvbmRpdGlvbiBjb25lIGNvbmZpcm1EaWFsb2cgJyArXG4gICAgICAnY29ubmVjdEF0dHIgY29ubmVjdENvbnRyb2wgY29ubmVjdER5bmFtaWMgY29ubmVjdEpvaW50IGNvbm5lY3Rpb25JbmZvIGNvbnN0cmFpbiAnICtcbiAgICAgICdjb25zdHJhaW5WYWx1ZSBjb25zdHJ1Y3Rpb25IaXN0b3J5IGNvbnRhaW5lciBjb250YWluc011bHRpYnl0ZSBjb250ZXh0SW5mbyBjb250cm9sICcgK1xuICAgICAgJ2NvbnZlcnRGcm9tT2xkTGF5ZXJzIGNvbnZlcnRJZmZUb1BzZCBjb252ZXJ0TGlnaHRtYXAgY29udmVydFNvbGlkVHggY29udmVydFRlc3NlbGxhdGlvbiAnICtcbiAgICAgICdjb252ZXJ0VW5pdCBjb3B5QXJyYXkgY29weUZsZXhvciBjb3B5S2V5IGNvcHlTa2luV2VpZ2h0cyBjb3MgY3BCdXR0b24gY3BDYWNoZSAnICtcbiAgICAgICdjcENsb3RoU2V0IGNwQ29sbGlzaW9uIGNwQ29uc3RyYWludCBjcENvbnZDbG90aFRvTWVzaCBjcEZvcmNlcyBjcEdldFNvbHZlckF0dHIgY3BQYW5lbCAnICtcbiAgICAgICdjcFByb3BlcnR5IGNwUmlnaWRDb2xsaXNpb25GaWx0ZXIgY3BTZWFtIGNwU2V0RWRpdCBjcFNldFNvbHZlckF0dHIgY3BTb2x2ZXIgJyArXG4gICAgICAnY3BTb2x2ZXJUeXBlcyBjcFRvb2wgY3BVcGRhdGVDbG90aFVWcyBjcmVhdGVEaXNwbGF5TGF5ZXIgY3JlYXRlRHJhd0N0eCBjcmVhdGVFZGl0b3IgJyArXG4gICAgICAnY3JlYXRlTGF5ZXJlZFBzZEZpbGUgY3JlYXRlTW90aW9uRmllbGQgY3JlYXRlTmV3U2hlbGYgY3JlYXRlTm9kZSBjcmVhdGVSZW5kZXJMYXllciAnICtcbiAgICAgICdjcmVhdGVTdWJkaXZSZWdpb24gY3Jvc3MgY3Jvc3NQcm9kdWN0IGN0eEFib3J0IGN0eENvbXBsZXRpb24gY3R4RWRpdE1vZGUgY3R4VHJhdmVyc2UgJyArXG4gICAgICAnY3VycmVudEN0eCBjdXJyZW50VGltZSBjdXJyZW50VGltZUN0eCBjdXJyZW50VW5pdCBjdXJ2ZSBjdXJ2ZUFkZFB0Q3R4ICcgK1xuICAgICAgJ2N1cnZlQ1ZDdHggY3VydmVFUEN0eCBjdXJ2ZUVkaXRvckN0eCBjdXJ2ZUludGVyc2VjdCBjdXJ2ZU1vdmVFUEN0eCBjdXJ2ZU9uU3VyZmFjZSAnICtcbiAgICAgICdjdXJ2ZVNrZXRjaEN0eCBjdXRLZXkgY3ljbGVDaGVjayBjeWxpbmRlciBkYWdQb3NlIGRhdGUgZGVmYXVsdExpZ2h0TGlzdENoZWNrQm94ICcgK1xuICAgICAgJ2RlZmF1bHROYXZpZ2F0aW9uIGRlZmluZURhdGFTZXJ2ZXIgZGVmaW5lVmlydHVhbERldmljZSBkZWZvcm1lciBkZWdfdG9fcmFkIGRlbGV0ZSAnICtcbiAgICAgICdkZWxldGVBdHRyIGRlbGV0ZVNoYWRpbmdHcm91cHNBbmRNYXRlcmlhbHMgZGVsZXRlU2hlbGZUYWIgZGVsZXRlVUkgZGVsZXRlVW51c2VkQnJ1c2hlcyAnICtcbiAgICAgICdkZWxyYW5kc3RyIGRldGFjaEN1cnZlIGRldGFjaERldmljZUF0dHIgZGV0YWNoU3VyZmFjZSBkZXZpY2VFZGl0b3IgZGV2aWNlUGFuZWwgZGdJbmZvICcgK1xuICAgICAgJ2RnZGlydHkgZGdldmFsIGRndGltZXIgZGltV2hlbiBkaXJlY3RLZXlDdHggZGlyZWN0aW9uYWxMaWdodCBkaXJtYXAgZGlybmFtZSBkaXNhYmxlICcgK1xuICAgICAgJ2Rpc2Nvbm5lY3RBdHRyIGRpc2Nvbm5lY3RKb2ludCBkaXNrQ2FjaGUgZGlzcGxhY2VtZW50VG9Qb2x5IGRpc3BsYXlBZmZlY3RlZCAnICtcbiAgICAgICdkaXNwbGF5Q29sb3IgZGlzcGxheUN1bGwgZGlzcGxheUxldmVsT2ZEZXRhaWwgZGlzcGxheVByZWYgZGlzcGxheVJHQkNvbG9yICcgK1xuICAgICAgJ2Rpc3BsYXlTbW9vdGhuZXNzIGRpc3BsYXlTdGF0cyBkaXNwbGF5U3RyaW5nIGRpc3BsYXlTdXJmYWNlIGRpc3RhbmNlRGltQ29udGV4dCAnICtcbiAgICAgICdkaXN0YW5jZURpbWVuc2lvbiBkb0JsdXIgZG9sbHkgZG9sbHlDdHggZG9wZVNoZWV0RWRpdG9yIGRvdCBkb3RQcm9kdWN0ICcgK1xuICAgICAgJ2RvdWJsZVByb2ZpbGVCaXJhaWxTdXJmYWNlIGRyYWcgZHJhZ0F0dHJDb250ZXh0IGRyYWdnZXJDb250ZXh0IGRyb3BvZmZMb2NhdG9yICcgK1xuICAgICAgJ2R1cGxpY2F0ZSBkdXBsaWNhdGVDdXJ2ZSBkdXBsaWNhdGVTdXJmYWNlIGR5bkNhY2hlIGR5bkNvbnRyb2wgZHluRXhwb3J0IGR5bkV4cHJlc3Npb24gJyArXG4gICAgICAnZHluR2xvYmFscyBkeW5QYWludEVkaXRvciBkeW5QYXJ0aWNsZUN0eCBkeW5QcmVmIGR5blJlbEVkUGFuZWwgZHluUmVsRWRpdG9yICcgK1xuICAgICAgJ2R5bmFtaWNMb2FkIGVkaXRBdHRyTGltaXRzIGVkaXREaXNwbGF5TGF5ZXJHbG9iYWxzIGVkaXREaXNwbGF5TGF5ZXJNZW1iZXJzICcgK1xuICAgICAgJ2VkaXRSZW5kZXJMYXllckFkanVzdG1lbnQgZWRpdFJlbmRlckxheWVyR2xvYmFscyBlZGl0UmVuZGVyTGF5ZXJNZW1iZXJzIGVkaXRvciAnICtcbiAgICAgICdlZGl0b3JUZW1wbGF0ZSBlZmZlY3RvciBlbWl0IGVtaXR0ZXIgZW5hYmxlRGV2aWNlIGVuY29kZVN0cmluZyBlbmRTdHJpbmcgZW5kc1dpdGggZW52ICcgK1xuICAgICAgJ2VxdWl2YWxlbnQgZXF1aXZhbGVudFRvbCBlcmYgZXJyb3IgZXZhbCBldmFsRGVmZXJyZWQgZXZhbEVjaG8gZXZlbnQgJyArXG4gICAgICAnZXhhY3RXb3JsZEJvdW5kaW5nQm94IGV4Y2x1c2l2ZUxpZ2h0Q2hlY2tCb3ggZXhlYyBleGVjdXRlRm9yRWFjaE9iamVjdCBleGlzdHMgZXhwICcgK1xuICAgICAgJ2V4cHJlc3Npb24gZXhwcmVzc2lvbkVkaXRvckxpc3RlbiBleHRlbmRDdXJ2ZSBleHRlbmRTdXJmYWNlIGV4dHJ1ZGUgZmNoZWNrIGZjbG9zZSBmZW9mICcgK1xuICAgICAgJ2ZmbHVzaCBmZ2V0bGluZSBmZ2V0d29yZCBmaWxlIGZpbGVCcm93c2VyRGlhbG9nIGZpbGVEaWFsb2cgZmlsZUV4dGVuc2lvbiBmaWxlSW5mbyAnICtcbiAgICAgICdmaWxldGVzdCBmaWxsZXRDdXJ2ZSBmaWx0ZXIgZmlsdGVyQ3VydmUgZmlsdGVyRXhwYW5kIGZpbHRlclN0dWRpb0ltcG9ydCAnICtcbiAgICAgICdmaW5kQWxsSW50ZXJzZWN0aW9ucyBmaW5kQW5pbUN1cnZlcyBmaW5kS2V5ZnJhbWUgZmluZE1lbnVJdGVtIGZpbmRSZWxhdGVkU2tpbkNsdXN0ZXIgJyArXG4gICAgICAnZmluZGVyIGZpcnN0UGFyZW50T2YgZml0QnNwbGluZSBmbGV4b3IgZmxvYXRFcSBmbG9hdEZpZWxkIGZsb2F0RmllbGRHcnAgZmxvYXRTY3JvbGxCYXIgJyArXG4gICAgICAnZmxvYXRTbGlkZXIgZmxvYXRTbGlkZXIyIGZsb2F0U2xpZGVyQnV0dG9uR3JwIGZsb2F0U2xpZGVyR3JwIGZsb29yIGZsb3cgZmx1aWRDYWNoZUluZm8gJyArXG4gICAgICAnZmx1aWRFbWl0dGVyIGZsdWlkVm94ZWxJbmZvIGZsdXNoVW5kbyBmbW9kIGZvbnREaWFsb2cgZm9wZW4gZm9ybUxheW91dCBmb3JtYXQgZnByaW50ICcgK1xuICAgICAgJ2ZyYW1lTGF5b3V0IGZyZWFkIGZyZWVGb3JtRmlsbGV0IGZyZXdpbmQgZnJvbU5hdGl2ZVBhdGggZndyaXRlIGdhbW1hIGdhdXNzICcgK1xuICAgICAgJ2dlb21ldHJ5Q29uc3RyYWludCBnZXRBcHBsaWNhdGlvblZlcnNpb25Bc0Zsb2F0IGdldEF0dHIgZ2V0Q2xhc3NpZmljYXRpb24gJyArXG4gICAgICAnZ2V0RGVmYXVsdEJydXNoIGdldEZpbGVMaXN0IGdldEZsdWlkQXR0ciBnZXRJbnB1dERldmljZVJhbmdlIGdldE1heWFQYW5lbFR5cGVzICcgK1xuICAgICAgJ2dldE1vZGlmaWVycyBnZXRQYW5lbCBnZXRQYXJ0aWNsZUF0dHIgZ2V0UGx1Z2luUmVzb3VyY2UgZ2V0ZW52IGdldHBpZCBnbFJlbmRlciAnICtcbiAgICAgICdnbFJlbmRlckVkaXRvciBnbG9iYWxTdGl0Y2ggZ21hdGNoIGdvYWwgZ290b0JpbmRQb3NlIGdyYWJDb2xvciBncmFkaWVudENvbnRyb2wgJyArXG4gICAgICAnZ3JhZGllbnRDb250cm9sTm9BdHRyIGdyYXBoRG9sbHlDdHggZ3JhcGhTZWxlY3RDb250ZXh0IGdyYXBoVHJhY2tDdHggZ3Jhdml0eSBncmlkICcgK1xuICAgICAgJ2dyaWRMYXlvdXQgZ3JvdXAgZ3JvdXBPYmplY3RzQnlOYW1lIEhmQWRkQXR0cmFjdG9yVG9BUyBIZkFzc2lnbkFTIEhmQnVpbGRFcXVhbE1hcCAnICtcbiAgICAgICdIZkJ1aWxkRnVyRmlsZXMgSGZCdWlsZEZ1ckltYWdlcyBIZkNhbmNlbEFGUiBIZkNvbm5lY3RBU1RvSEYgSGZDcmVhdGVBdHRyYWN0b3IgJyArXG4gICAgICAnSGZEZWxldGVBUyBIZkVkaXRBUyBIZlBlcmZvcm1DcmVhdGVBUyBIZlJlbW92ZUF0dHJhY3RvckZyb21BUyBIZlNlbGVjdEF0dGFjaGVkICcgK1xuICAgICAgJ0hmU2VsZWN0QXR0cmFjdG9ycyBIZlVuQXNzaWduQVMgaGFyZGVuUG9pbnRDdXJ2ZSBoYXJkd2FyZSBoYXJkd2FyZVJlbmRlclBhbmVsICcgK1xuICAgICAgJ2hlYWRzVXBEaXNwbGF5IGhlYWRzVXBNZXNzYWdlIGhlbHAgaGVscExpbmUgaGVybWl0ZSBoaWRlIGhpbGl0ZSBoaXRUZXN0IGhvdEJveCBob3RrZXkgJyArXG4gICAgICAnaG90a2V5Q2hlY2sgaHN2X3RvX3JnYiBodWRCdXR0b24gaHVkU2xpZGVyIGh1ZFNsaWRlckJ1dHRvbiBod1JlZmxlY3Rpb25NYXAgaHdSZW5kZXIgJyArXG4gICAgICAnaHdSZW5kZXJMb2FkIGh5cGVyR3JhcGggaHlwZXJQYW5lbCBoeXBlclNoYWRlIGh5cG90IGljb25UZXh0QnV0dG9uIGljb25UZXh0Q2hlY2tCb3ggJyArXG4gICAgICAnaWNvblRleHRSYWRpb0J1dHRvbiBpY29uVGV4dFJhZGlvQ29sbGVjdGlvbiBpY29uVGV4dFNjcm9sbExpc3QgaWNvblRleHRTdGF0aWNMYWJlbCAnICtcbiAgICAgICdpa0hhbmRsZSBpa0hhbmRsZUN0eCBpa0hhbmRsZURpc3BsYXlTY2FsZSBpa1NvbHZlciBpa1NwbGluZUhhbmRsZUN0eCBpa1N5c3RlbSAnICtcbiAgICAgICdpa1N5c3RlbUluZm8gaWtma0Rpc3BsYXlNZXRob2QgaWxsdXN0cmF0b3JDdXJ2ZXMgaW1hZ2UgaW1mUGx1Z2lucyBpbmhlcml0VHJhbnNmb3JtICcgK1xuICAgICAgJ2luc2VydEpvaW50IGluc2VydEpvaW50Q3R4IGluc2VydEtleUN0eCBpbnNlcnRLbm90Q3VydmUgaW5zZXJ0S25vdFN1cmZhY2UgaW5zdGFuY2UgJyArXG4gICAgICAnaW5zdGFuY2VhYmxlIGluc3RhbmNlciBpbnRGaWVsZCBpbnRGaWVsZEdycCBpbnRTY3JvbGxCYXIgaW50U2xpZGVyIGludFNsaWRlckdycCAnICtcbiAgICAgICdpbnRlclRvVUkgaW50ZXJuYWxWYXIgaW50ZXJzZWN0IGlwckVuZ2luZSBpc0FuaW1DdXJ2ZSBpc0Nvbm5lY3RlZCBpc0RpcnR5IGlzUGFyZW50T2YgJyArXG4gICAgICAnaXNTYW1lT2JqZWN0IGlzVHJ1ZSBpc1ZhbGlkT2JqZWN0TmFtZSBpc1ZhbGlkU3RyaW5nIGlzVmFsaWRVaU5hbWUgaXNvbGF0ZVNlbGVjdCAnICtcbiAgICAgICdpdGVtRmlsdGVyIGl0ZW1GaWx0ZXJBdHRyIGl0ZW1GaWx0ZXJSZW5kZXIgaXRlbUZpbHRlclR5cGUgam9pbnQgam9pbnRDbHVzdGVyIGpvaW50Q3R4ICcgK1xuICAgICAgJ2pvaW50RGlzcGxheVNjYWxlIGpvaW50TGF0dGljZSBrZXlUYW5nZW50IGtleWZyYW1lIGtleWZyYW1lT3V0bGluZXIgJyArXG4gICAgICAna2V5ZnJhbWVSZWdpb25DdXJyZW50VGltZUN0eCBrZXlmcmFtZVJlZ2lvbkRpcmVjdEtleUN0eCBrZXlmcmFtZVJlZ2lvbkRvbGx5Q3R4ICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uSW5zZXJ0S2V5Q3R4IGtleWZyYW1lUmVnaW9uTW92ZUtleUN0eCBrZXlmcmFtZVJlZ2lvblNjYWxlS2V5Q3R4ICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uU2VsZWN0S2V5Q3R4IGtleWZyYW1lUmVnaW9uU2V0S2V5Q3R4IGtleWZyYW1lUmVnaW9uVHJhY2tDdHggJyArXG4gICAgICAna2V5ZnJhbWVTdGF0cyBsYXNzb0NvbnRleHQgbGF0dGljZSBsYXR0aWNlRGVmb3JtS2V5Q3R4IGxhdW5jaCBsYXVuY2hJbWFnZUVkaXRvciAnICtcbiAgICAgICdsYXllckJ1dHRvbiBsYXllcmVkU2hhZGVyUG9ydCBsYXllcmVkVGV4dHVyZVBvcnQgbGF5b3V0IGxheW91dERpYWxvZyBsaWdodExpc3QgJyArXG4gICAgICAnbGlnaHRMaXN0RWRpdG9yIGxpZ2h0TGlzdFBhbmVsIGxpZ2h0bGluayBsaW5lSW50ZXJzZWN0aW9uIGxpbmVhclByZWNpc2lvbiBsaW5zdGVwICcgK1xuICAgICAgJ2xpc3RBbmltYXRhYmxlIGxpc3RBdHRyIGxpc3RDYW1lcmFzIGxpc3RDb25uZWN0aW9ucyBsaXN0RGV2aWNlQXR0YWNobWVudHMgbGlzdEhpc3RvcnkgJyArXG4gICAgICAnbGlzdElucHV0RGV2aWNlQXhlcyBsaXN0SW5wdXREZXZpY2VCdXR0b25zIGxpc3RJbnB1dERldmljZXMgbGlzdE1lbnVBbm5vdGF0aW9uICcgK1xuICAgICAgJ2xpc3ROb2RlVHlwZXMgbGlzdFBhbmVsQ2F0ZWdvcmllcyBsaXN0UmVsYXRpdmVzIGxpc3RTZXRzIGxpc3RUcmFuc2Zvcm1zICcgK1xuICAgICAgJ2xpc3RVbnNlbGVjdGVkIGxpc3RlckVkaXRvciBsb2FkRmx1aWQgbG9hZE5ld1NoZWxmIGxvYWRQbHVnaW4gJyArXG4gICAgICAnbG9hZFBsdWdpbkxhbmd1YWdlUmVzb3VyY2VzIGxvYWRQcmVmT2JqZWN0cyBsb2NhbGl6ZWRQYW5lbExhYmVsIGxvY2tOb2RlIGxvZnQgbG9nICcgK1xuICAgICAgJ2xvbmdOYW1lT2YgbG9va1RocnUgbHMgbHNUaHJvdWdoRmlsdGVyIGxzVHlwZSBsc1VJIE1heWF0b21yIG1hZyBtYWtlSWRlbnRpdHkgbWFrZUxpdmUgJyArXG4gICAgICAnbWFrZVBhaW50YWJsZSBtYWtlUm9sbCBtYWtlU2luZ2xlU3VyZmFjZSBtYWtlVHViZU9uIG1ha2Vib3QgbWFuaXBNb3ZlQ29udGV4dCAnICtcbiAgICAgICdtYW5pcE1vdmVMaW1pdHNDdHggbWFuaXBPcHRpb25zIG1hbmlwUm90YXRlQ29udGV4dCBtYW5pcFJvdGF0ZUxpbWl0c0N0eCAnICtcbiAgICAgICdtYW5pcFNjYWxlQ29udGV4dCBtYW5pcFNjYWxlTGltaXRzQ3R4IG1hcmtlciBtYXRjaCBtYXggbWVtb3J5IG1lbnUgbWVudUJhckxheW91dCAnICtcbiAgICAgICdtZW51RWRpdG9yIG1lbnVJdGVtIG1lbnVJdGVtVG9TaGVsZiBtZW51U2V0IG1lbnVTZXRQcmVmIG1lc3NhZ2VMaW5lIG1pbiBtaW5pbWl6ZUFwcCAnICtcbiAgICAgICdtaXJyb3JKb2ludCBtb2RlbEN1cnJlbnRUaW1lQ3R4IG1vZGVsRWRpdG9yIG1vZGVsUGFuZWwgbW91c2UgbW92SW4gbW92T3V0IG1vdmUgJyArXG4gICAgICAnbW92ZUlLdG9GSyBtb3ZlS2V5Q3R4IG1vdmVWZXJ0ZXhBbG9uZ0RpcmVjdGlvbiBtdWx0aVByb2ZpbGVCaXJhaWxTdXJmYWNlIG11dGUgJyArXG4gICAgICAnblBhcnRpY2xlIG5hbWVDb21tYW5kIG5hbWVGaWVsZCBuYW1lc3BhY2UgbmFtZXNwYWNlSW5mbyBuZXdQYW5lbEl0ZW1zIG5ld3RvbiBub2RlQ2FzdCAnICtcbiAgICAgICdub2RlSWNvbkJ1dHRvbiBub2RlT3V0bGluZXIgbm9kZVByZXNldCBub2RlVHlwZSBub2lzZSBub25MaW5lYXIgbm9ybWFsQ29uc3RyYWludCAnICtcbiAgICAgICdub3JtYWxpemUgbnVyYnNCb29sZWFuIG51cmJzQ29weVVWU2V0IG51cmJzQ3ViZSBudXJic0VkaXRVViBudXJic1BsYW5lIG51cmJzU2VsZWN0ICcgK1xuICAgICAgJ251cmJzU3F1YXJlIG51cmJzVG9Qb2x5IG51cmJzVG9Qb2x5Z29uc1ByZWYgbnVyYnNUb1N1YmRpdiBudXJic1RvU3ViZGl2UHJlZiAnICtcbiAgICAgICdudXJic1VWU2V0IG51cmJzVmlld0RpcmVjdGlvblZlY3RvciBvYmpFeGlzdHMgb2JqZWN0Q2VudGVyIG9iamVjdExheWVyIG9iamVjdFR5cGUgJyArXG4gICAgICAnb2JqZWN0VHlwZVVJIG9ic29sZXRlUHJvYyBvY2Vhbk51cmJzUHJldmlld1BsYW5lIG9mZnNldEN1cnZlIG9mZnNldEN1cnZlT25TdXJmYWNlICcgK1xuICAgICAgJ29mZnNldFN1cmZhY2Ugb3BlbkdMRXh0ZW5zaW9uIG9wZW5NYXlhUHJlZiBvcHRpb25NZW51IG9wdGlvbk1lbnVHcnAgb3B0aW9uVmFyIG9yYml0ICcgK1xuICAgICAgJ29yYml0Q3R4IG9yaWVudENvbnN0cmFpbnQgb3V0bGluZXJFZGl0b3Igb3V0bGluZXJQYW5lbCBvdmVycmlkZU1vZGlmaWVyICcgK1xuICAgICAgJ3BhaW50RWZmZWN0c0Rpc3BsYXkgcGFpckJsZW5kIHBhbGV0dGVQb3J0IHBhbmVMYXlvdXQgcGFuZWwgcGFuZWxDb25maWd1cmF0aW9uICcgK1xuICAgICAgJ3BhbmVsSGlzdG9yeSBwYXJhbURpbUNvbnRleHQgcGFyYW1EaW1lbnNpb24gcGFyYW1Mb2NhdG9yIHBhcmVudCBwYXJlbnRDb25zdHJhaW50ICcgK1xuICAgICAgJ3BhcnRpY2xlIHBhcnRpY2xlRXhpc3RzIHBhcnRpY2xlSW5zdGFuY2VyIHBhcnRpY2xlUmVuZGVySW5mbyBwYXJ0aXRpb24gcGFzdGVLZXkgJyArXG4gICAgICAncGF0aEFuaW1hdGlvbiBwYXVzZSBwY2xvc2UgcGVyY2VudCBwZXJmb3JtYW5jZU9wdGlvbnMgcGZ4c3Ryb2tlcyBwaWNrV2FsayBwaWN0dXJlICcgK1xuICAgICAgJ3BpeGVsTW92ZSBwbGFuYXJTcmYgcGxhbmUgcGxheSBwbGF5YmFja09wdGlvbnMgcGxheWJsYXN0IHBsdWdBdHRyIHBsdWdOb2RlIHBsdWdpbkluZm8gJyArXG4gICAgICAncGx1Z2luUmVzb3VyY2VVdGlsIHBvaW50Q29uc3RyYWludCBwb2ludEN1cnZlQ29uc3RyYWludCBwb2ludExpZ2h0IHBvaW50TWF0cml4TXVsdCAnICtcbiAgICAgICdwb2ludE9uQ3VydmUgcG9pbnRPblN1cmZhY2UgcG9pbnRQb3NpdGlvbiBwb2xlVmVjdG9yQ29uc3RyYWludCBwb2x5QXBwZW5kICcgK1xuICAgICAgJ3BvbHlBcHBlbmRGYWNldEN0eCBwb2x5QXBwZW5kVmVydGV4IHBvbHlBdXRvUHJvamVjdGlvbiBwb2x5QXZlcmFnZU5vcm1hbCAnICtcbiAgICAgICdwb2x5QXZlcmFnZVZlcnRleCBwb2x5QmV2ZWwgcG9seUJsZW5kQ29sb3IgcG9seUJsaW5kRGF0YSBwb2x5Qm9vbE9wIHBvbHlCcmlkZ2VFZGdlICcgK1xuICAgICAgJ3BvbHlDYWNoZU1vbml0b3IgcG9seUNoZWNrIHBvbHlDaGlwT2ZmIHBvbHlDbGlwYm9hcmQgcG9seUNsb3NlQm9yZGVyIHBvbHlDb2xsYXBzZUVkZ2UgJyArXG4gICAgICAncG9seUNvbGxhcHNlRmFjZXQgcG9seUNvbG9yQmxpbmREYXRhIHBvbHlDb2xvckRlbCBwb2x5Q29sb3JQZXJWZXJ0ZXggcG9seUNvbG9yU2V0ICcgK1xuICAgICAgJ3BvbHlDb21wYXJlIHBvbHlDb25lIHBvbHlDb3B5VVYgcG9seUNyZWFzZSBwb2x5Q3JlYXNlQ3R4IHBvbHlDcmVhdGVGYWNldCAnICtcbiAgICAgICdwb2x5Q3JlYXRlRmFjZXRDdHggcG9seUN1YmUgcG9seUN1dCBwb2x5Q3V0Q3R4IHBvbHlDeWxpbmRlciBwb2x5Q3lsaW5kcmljYWxQcm9qZWN0aW9uICcgK1xuICAgICAgJ3BvbHlEZWxFZGdlIHBvbHlEZWxGYWNldCBwb2x5RGVsVmVydGV4IHBvbHlEdXBsaWNhdGVBbmRDb25uZWN0IHBvbHlEdXBsaWNhdGVFZGdlICcgK1xuICAgICAgJ3BvbHlFZGl0VVYgcG9seUVkaXRVVlNoZWxsIHBvbHlFdmFsdWF0ZSBwb2x5RXh0cnVkZUVkZ2UgcG9seUV4dHJ1ZGVGYWNldCAnICtcbiAgICAgICdwb2x5RXh0cnVkZVZlcnRleCBwb2x5RmxpcEVkZ2UgcG9seUZsaXBVViBwb2x5Rm9yY2VVViBwb2x5R2VvU2FtcGxlciBwb2x5SGVsaXggJyArXG4gICAgICAncG9seUluZm8gcG9seUluc3RhbGxBY3Rpb24gcG9seUxheW91dFVWIHBvbHlMaXN0Q29tcG9uZW50Q29udmVyc2lvbiBwb2x5TWFwQ3V0ICcgK1xuICAgICAgJ3BvbHlNYXBEZWwgcG9seU1hcFNldyBwb2x5TWFwU2V3TW92ZSBwb2x5TWVyZ2VFZGdlIHBvbHlNZXJnZUVkZ2VDdHggcG9seU1lcmdlRmFjZXQgJyArXG4gICAgICAncG9seU1lcmdlRmFjZXRDdHggcG9seU1lcmdlVVYgcG9seU1lcmdlVmVydGV4IHBvbHlNaXJyb3JGYWNlIHBvbHlNb3ZlRWRnZSAnICtcbiAgICAgICdwb2x5TW92ZUZhY2V0IHBvbHlNb3ZlRmFjZXRVViBwb2x5TW92ZVVWIHBvbHlNb3ZlVmVydGV4IHBvbHlOb3JtYWwgcG9seU5vcm1hbFBlclZlcnRleCAnICtcbiAgICAgICdwb2x5Tm9ybWFsaXplVVYgcG9seU9wdFV2cyBwb2x5T3B0aW9ucyBwb2x5T3V0cHV0IHBvbHlQaXBlIHBvbHlQbGFuYXJQcm9qZWN0aW9uICcgK1xuICAgICAgJ3BvbHlQbGFuZSBwb2x5UGxhdG9uaWNTb2xpZCBwb2x5UG9rZSBwb2x5UHJpbWl0aXZlIHBvbHlQcmlzbSBwb2x5UHJvamVjdGlvbiAnICtcbiAgICAgICdwb2x5UHlyYW1pZCBwb2x5UXVhZCBwb2x5UXVlcnlCbGluZERhdGEgcG9seVJlZHVjZSBwb2x5U2VsZWN0IHBvbHlTZWxlY3RDb25zdHJhaW50ICcgK1xuICAgICAgJ3BvbHlTZWxlY3RDb25zdHJhaW50TW9uaXRvciBwb2x5U2VsZWN0Q3R4IHBvbHlTZWxlY3RFZGl0Q3R4IHBvbHlTZXBhcmF0ZSAnICtcbiAgICAgICdwb2x5U2V0VG9GYWNlTm9ybWFsIHBvbHlTZXdFZGdlIHBvbHlTaG9ydGVzdFBhdGhDdHggcG9seVNtb290aCBwb2x5U29mdEVkZ2UgJyArXG4gICAgICAncG9seVNwaGVyZSBwb2x5U3BoZXJpY2FsUHJvamVjdGlvbiBwb2x5U3BsaXQgcG9seVNwbGl0Q3R4IHBvbHlTcGxpdEVkZ2UgcG9seVNwbGl0UmluZyAnICtcbiAgICAgICdwb2x5U3BsaXRWZXJ0ZXggcG9seVN0cmFpZ2h0ZW5VVkJvcmRlciBwb2x5U3ViZGl2aWRlRWRnZSBwb2x5U3ViZGl2aWRlRmFjZXQgJyArXG4gICAgICAncG9seVRvU3ViZGl2IHBvbHlUb3J1cyBwb2x5VHJhbnNmZXIgcG9seVRyaWFuZ3VsYXRlIHBvbHlVVlNldCBwb2x5VW5pdGUgcG9seVdlZGdlRmFjZSAnICtcbiAgICAgICdwb3BlbiBwb3B1cE1lbnUgcG9zZSBwb3cgcHJlbG9hZFJlZkVkIHByaW50IHByb2dyZXNzQmFyIHByb2dyZXNzV2luZG93IHByb2pGaWxlVmlld2VyICcgK1xuICAgICAgJ3Byb2plY3RDdXJ2ZSBwcm9qZWN0VGFuZ2VudCBwcm9qZWN0aW9uQ29udGV4dCBwcm9qZWN0aW9uTWFuaXAgcHJvbXB0RGlhbG9nIHByb3BNb2RDdHggJyArXG4gICAgICAncHJvcE1vdmUgcHNkQ2hhbm5lbE91dGxpbmVyIHBzZEVkaXRUZXh0dXJlRmlsZSBwc2RFeHBvcnQgcHNkVGV4dHVyZUZpbGUgcHV0ZW52IHB3ZCAnICtcbiAgICAgICdweXRob24gcXVlcnlTdWJkaXYgcXVpdCByYWRfdG9fZGVnIHJhZGlhbCByYWRpb0J1dHRvbiByYWRpb0J1dHRvbkdycCByYWRpb0NvbGxlY3Rpb24gJyArXG4gICAgICAncmFkaW9NZW51SXRlbUNvbGxlY3Rpb24gcmFtcENvbG9yUG9ydCByYW5kIHJhbmRvbWl6ZUZvbGxpY2xlcyByYW5kc3RhdGUgcmFuZ2VDb250cm9sICcgK1xuICAgICAgJ3JlYWRUYWtlIHJlYnVpbGRDdXJ2ZSByZWJ1aWxkU3VyZmFjZSByZWNvcmRBdHRyIHJlY29yZERldmljZSByZWRvIHJlZmVyZW5jZSAnICtcbiAgICAgICdyZWZlcmVuY2VFZGl0IHJlZmVyZW5jZVF1ZXJ5IHJlZmluZVN1YmRpdlNlbGVjdGlvbkxpc3QgcmVmcmVzaCByZWZyZXNoQUUgJyArXG4gICAgICAncmVnaXN0ZXJQbHVnaW5SZXNvdXJjZSByZWhhc2ggcmVsb2FkSW1hZ2UgcmVtb3ZlSm9pbnQgcmVtb3ZlTXVsdGlJbnN0YW5jZSAnICtcbiAgICAgICdyZW1vdmVQYW5lbENhdGVnb3J5IHJlbmFtZSByZW5hbWVBdHRyIHJlbmFtZVNlbGVjdGlvbkxpc3QgcmVuYW1lVUkgcmVuZGVyICcgK1xuICAgICAgJ3JlbmRlckdsb2JhbHNOb2RlIHJlbmRlckluZm8gcmVuZGVyTGF5ZXJCdXR0b24gcmVuZGVyTGF5ZXJQYXJlbnQgJyArXG4gICAgICAncmVuZGVyTGF5ZXJQb3N0UHJvY2VzcyByZW5kZXJMYXllclVucGFyZW50IHJlbmRlck1hbmlwIHJlbmRlclBhcnRpdGlvbiAnICtcbiAgICAgICdyZW5kZXJRdWFsaXR5Tm9kZSByZW5kZXJTZXR0aW5ncyByZW5kZXJUaHVtYm5haWxVcGRhdGUgcmVuZGVyV2luZG93RWRpdG9yICcgK1xuICAgICAgJ3JlbmRlcldpbmRvd1NlbGVjdENvbnRleHQgcmVuZGVyZXIgcmVvcmRlciByZW9yZGVyRGVmb3JtZXJzIHJlcXVpcmVzIHJlcm9vdCAnICtcbiAgICAgICdyZXNhbXBsZUZsdWlkIHJlc2V0QUUgcmVzZXRQZnhUb1BvbHlDYW1lcmEgcmVzZXRUb29sIHJlc29sdXRpb25Ob2RlIHJldGFyZ2V0ICcgK1xuICAgICAgJ3JldmVyc2VDdXJ2ZSByZXZlcnNlU3VyZmFjZSByZXZvbHZlIHJnYl90b19oc3YgcmlnaWRCb2R5IHJpZ2lkU29sdmVyIHJvbGwgcm9sbEN0eCAnICtcbiAgICAgICdyb290T2Ygcm90IHJvdGF0ZSByb3RhdGlvbkludGVycG9sYXRpb24gcm91bmRDb25zdGFudFJhZGl1cyByb3dDb2x1bW5MYXlvdXQgcm93TGF5b3V0ICcgK1xuICAgICAgJ3J1blRpbWVDb21tYW5kIHJ1bnVwIHNhbXBsZUltYWdlIHNhdmVBbGxTaGVsdmVzIHNhdmVBdHRyUHJlc2V0IHNhdmVGbHVpZCBzYXZlSW1hZ2UgJyArXG4gICAgICAnc2F2ZUluaXRpYWxTdGF0ZSBzYXZlTWVudSBzYXZlUHJlZk9iamVjdHMgc2F2ZVByZWZzIHNhdmVTaGVsZiBzYXZlVG9vbFNldHRpbmdzIHNjYWxlICcgK1xuICAgICAgJ3NjYWxlQnJ1c2hCcmlnaHRuZXNzIHNjYWxlQ29tcG9uZW50cyBzY2FsZUNvbnN0cmFpbnQgc2NhbGVLZXkgc2NhbGVLZXlDdHggc2NlbmVFZGl0b3IgJyArXG4gICAgICAnc2NlbmVVSVJlcGxhY2VtZW50IHNjbWggc2NyaXB0Q3R4IHNjcmlwdEVkaXRvckluZm8gc2NyaXB0Sm9iIHNjcmlwdE5vZGUgc2NyaXB0VGFibGUgJyArXG4gICAgICAnc2NyaXB0VG9TaGVsZiBzY3JpcHRlZFBhbmVsIHNjcmlwdGVkUGFuZWxUeXBlIHNjcm9sbEZpZWxkIHNjcm9sbExheW91dCBzY3VscHQgJyArXG4gICAgICAnc2VhcmNoUGF0aEFycmF5IHNlZWQgc2VsTG9hZFNldHRpbmdzIHNlbGVjdCBzZWxlY3RDb250ZXh0IHNlbGVjdEN1cnZlQ1Ygc2VsZWN0S2V5ICcgK1xuICAgICAgJ3NlbGVjdEtleUN0eCBzZWxlY3RLZXlmcmFtZVJlZ2lvbkN0eCBzZWxlY3RNb2RlIHNlbGVjdFByZWYgc2VsZWN0UHJpb3JpdHkgc2VsZWN0VHlwZSAnICtcbiAgICAgICdzZWxlY3RlZE5vZGVzIHNlbGVjdGlvbkNvbm5lY3Rpb24gc2VwYXJhdG9yIHNldEF0dHIgc2V0QXR0ckVudW1SZXNvdXJjZSAnICtcbiAgICAgICdzZXRBdHRyTWFwcGluZyBzZXRBdHRyTmljZU5hbWVSZXNvdXJjZSBzZXRDb25zdHJhaW50UmVzdFBvc2l0aW9uICcgK1xuICAgICAgJ3NldERlZmF1bHRTaGFkaW5nR3JvdXAgc2V0RHJpdmVuS2V5ZnJhbWUgc2V0RHluYW1pYyBzZXRFZGl0Q3R4IHNldEVkaXRvciBzZXRGbHVpZEF0dHIgJyArXG4gICAgICAnc2V0Rm9jdXMgc2V0SW5maW5pdHkgc2V0SW5wdXREZXZpY2VNYXBwaW5nIHNldEtleUN0eCBzZXRLZXlQYXRoIHNldEtleWZyYW1lICcgK1xuICAgICAgJ3NldEtleWZyYW1lQmxlbmRzaGFwZVRhcmdldFd0cyBzZXRNZW51TW9kZSBzZXROb2RlTmljZU5hbWVSZXNvdXJjZSBzZXROb2RlVHlwZUZsYWcgJyArXG4gICAgICAnc2V0UGFyZW50IHNldFBhcnRpY2xlQXR0ciBzZXRQZnhUb1BvbHlDYW1lcmEgc2V0UGx1Z2luUmVzb3VyY2Ugc2V0UHJvamVjdCAnICtcbiAgICAgICdzZXRTdGFtcERlbnNpdHkgc2V0U3RhcnR1cE1lc3NhZ2Ugc2V0U3RhdGUgc2V0VG9vbFRvIHNldFVJVGVtcGxhdGUgc2V0WGZvcm1NYW5pcCBzZXRzICcgK1xuICAgICAgJ3NoYWRpbmdDb25uZWN0aW9uIHNoYWRpbmdHZW9tZXRyeVJlbEN0eCBzaGFkaW5nTGlnaHRSZWxDdHggc2hhZGluZ05ldHdvcmtDb21wYXJlICcgK1xuICAgICAgJ3NoYWRpbmdOb2RlIHNoYXBlQ29tcGFyZSBzaGVsZkJ1dHRvbiBzaGVsZkxheW91dCBzaGVsZlRhYkxheW91dCBzaGVsbEZpZWxkICcgK1xuICAgICAgJ3Nob3J0TmFtZU9mIHNob3dIZWxwIHNob3dIaWRkZW4gc2hvd01hbmlwQ3R4IHNob3dTZWxlY3Rpb25JblRpdGxlICcgK1xuICAgICAgJ3Nob3dTaGFkaW5nR3JvdXBBdHRyRWRpdG9yIHNob3dXaW5kb3cgc2lnbiBzaW1wbGlmeSBzaW4gc2luZ2xlUHJvZmlsZUJpcmFpbFN1cmZhY2UgJyArXG4gICAgICAnc2l6ZSBzaXplQnl0ZXMgc2tpbkNsdXN0ZXIgc2tpblBlcmNlbnQgc21vb3RoQ3VydmUgc21vb3RoVGFuZ2VudFN1cmZhY2Ugc21vb3Roc3RlcCAnICtcbiAgICAgICdzbmFwMnRvMiBzbmFwS2V5IHNuYXBNb2RlIHNuYXBUb2dldGhlckN0eCBzbmFwc2hvdCBzb2Z0IHNvZnRNb2Qgc29mdE1vZEN0eCBzb3J0IHNvdW5kICcgK1xuICAgICAgJ3NvdW5kQ29udHJvbCBzb3VyY2Ugc3BhY2VMb2NhdG9yIHNwaGVyZSBzcGhyYW5kIHNwb3RMaWdodCBzcG90TGlnaHRQcmV2aWV3UG9ydCAnICtcbiAgICAgICdzcHJlYWRTaGVldEVkaXRvciBzcHJpbmcgc3FydCBzcXVhcmVTdXJmYWNlIHNydENvbnRleHQgc3RhY2tUcmFjZSBzdGFydFN0cmluZyAnICtcbiAgICAgICdzdGFydHNXaXRoIHN0aXRjaEFuZEV4cGxvZGVTaGVsbCBzdGl0Y2hTdXJmYWNlIHN0aXRjaFN1cmZhY2VQb2ludHMgc3RyY21wICcgK1xuICAgICAgJ3N0cmluZ0FycmF5Q2F0ZW5hdGUgc3RyaW5nQXJyYXlDb250YWlucyBzdHJpbmdBcnJheUNvdW50IHN0cmluZ0FycmF5SW5zZXJ0QXRJbmRleCAnICtcbiAgICAgICdzdHJpbmdBcnJheUludGVyc2VjdG9yIHN0cmluZ0FycmF5UmVtb3ZlIHN0cmluZ0FycmF5UmVtb3ZlQXRJbmRleCAnICtcbiAgICAgICdzdHJpbmdBcnJheVJlbW92ZUR1cGxpY2F0ZXMgc3RyaW5nQXJyYXlSZW1vdmVFeGFjdCBzdHJpbmdBcnJheVRvU3RyaW5nICcgK1xuICAgICAgJ3N0cmluZ1RvU3RyaW5nQXJyYXkgc3RyaXAgc3RyaXBQcmVmaXhGcm9tTmFtZSBzdHJva2Ugc3ViZEF1dG9Qcm9qZWN0aW9uICcgK1xuICAgICAgJ3N1YmRDbGVhblRvcG9sb2d5IHN1YmRDb2xsYXBzZSBzdWJkRHVwbGljYXRlQW5kQ29ubmVjdCBzdWJkRWRpdFVWICcgK1xuICAgICAgJ3N1YmRMaXN0Q29tcG9uZW50Q29udmVyc2lvbiBzdWJkTWFwQ3V0IHN1YmRNYXBTZXdNb3ZlIHN1YmRNYXRjaFRvcG9sb2d5IHN1YmRNaXJyb3IgJyArXG4gICAgICAnc3ViZFRvQmxpbmQgc3ViZFRvUG9seSBzdWJkVHJhbnNmZXJVVnNUb0NhY2hlIHN1YmRpdiBzdWJkaXZDcmVhc2UgJyArXG4gICAgICAnc3ViZGl2RGlzcGxheVNtb290aG5lc3Mgc3Vic3RpdHV0ZSBzdWJzdGl0dXRlQWxsU3RyaW5nIHN1YnN0aXR1dGVHZW9tZXRyeSBzdWJzdHJpbmcgJyArXG4gICAgICAnc3VyZmFjZSBzdXJmYWNlU2FtcGxlciBzdXJmYWNlU2hhZGVyTGlzdCBzd2F0Y2hEaXNwbGF5UG9ydCBzd2l0Y2hUYWJsZSBzeW1ib2xCdXR0b24gJyArXG4gICAgICAnc3ltYm9sQ2hlY2tCb3ggc3lzRmlsZSBzeXN0ZW0gdGFiTGF5b3V0IHRhbiB0YW5nZW50Q29uc3RyYWludCB0ZXhMYXR0aWNlRGVmb3JtQ29udGV4dCAnICtcbiAgICAgICd0ZXhNYW5pcENvbnRleHQgdGV4TW92ZUNvbnRleHQgdGV4TW92ZVVWU2hlbGxDb250ZXh0IHRleFJvdGF0ZUNvbnRleHQgdGV4U2NhbGVDb250ZXh0ICcgK1xuICAgICAgJ3RleFNlbGVjdENvbnRleHQgdGV4U2VsZWN0U2hvcnRlc3RQYXRoQ3R4IHRleFNtdWRnZVVWQ29udGV4dCB0ZXhXaW5Ub29sQ3R4IHRleHQgJyArXG4gICAgICAndGV4dEN1cnZlcyB0ZXh0RmllbGQgdGV4dEZpZWxkQnV0dG9uR3JwIHRleHRGaWVsZEdycCB0ZXh0TWFuaXAgdGV4dFNjcm9sbExpc3QgJyArXG4gICAgICAndGV4dFRvU2hlbGYgdGV4dHVyZURpc3BsYWNlUGxhbmUgdGV4dHVyZUhhaXJDb2xvciB0ZXh0dXJlUGxhY2VtZW50Q29udGV4dCAnICtcbiAgICAgICd0ZXh0dXJlV2luZG93IHRocmVhZENvdW50IHRocmVlUG9pbnRBcmNDdHggdGltZUNvbnRyb2wgdGltZVBvcnQgdGltZXJYIHRvTmF0aXZlUGF0aCAnICtcbiAgICAgICd0b2dnbGUgdG9nZ2xlQXhpcyB0b2dnbGVXaW5kb3dWaXNpYmlsaXR5IHRva2VuaXplIHRva2VuaXplTGlzdCB0b2xlcmFuY2UgdG9sb3dlciAnICtcbiAgICAgICd0b29sQnV0dG9uIHRvb2xDb2xsZWN0aW9uIHRvb2xEcm9wcGVkIHRvb2xIYXNPcHRpb25zIHRvb2xQcm9wZXJ0eVdpbmRvdyB0b3J1cyB0b3VwcGVyICcgK1xuICAgICAgJ3RyYWNlIHRyYWNrIHRyYWNrQ3R4IHRyYW5zZmVyQXR0cmlidXRlcyB0cmFuc2Zvcm1Db21wYXJlIHRyYW5zZm9ybUxpbWl0cyB0cmFuc2xhdG9yICcgK1xuICAgICAgJ3RyaW0gdHJ1bmMgdHJ1bmNhdGVGbHVpZENhY2hlIHRydW5jYXRlSGFpckNhY2hlIHR1bWJsZSB0dW1ibGVDdHggdHVyYnVsZW5jZSAnICtcbiAgICAgICd0d29Qb2ludEFyY0N0eCB1aVJlcyB1aVRlbXBsYXRlIHVuYXNzaWduSW5wdXREZXZpY2UgdW5kbyB1bmRvSW5mbyB1bmdyb3VwIHVuaWZvcm0gdW5pdCAnICtcbiAgICAgICd1bmxvYWRQbHVnaW4gdW50YW5nbGVVViB1bnRpdGxlZEZpbGVOYW1lIHVudHJpbSB1cEF4aXMgdXBkYXRlQUUgdXNlckN0eCB1dkxpbmsgJyArXG4gICAgICAndXZTbmFwc2hvdCB2YWxpZGF0ZVNoZWxmTmFtZSB2ZWN0b3JpemUgdmlldzJkVG9vbEN0eCB2aWV3Q2FtZXJhIHZpZXdDbGlwUGxhbmUgJyArXG4gICAgICAndmlld0ZpdCB2aWV3SGVhZE9uIHZpZXdMb29rQXQgdmlld01hbmlwIHZpZXdQbGFjZSB2aWV3U2V0IHZpc29yIHZvbHVtZUF4aXMgdm9ydGV4ICcgK1xuICAgICAgJ3dhaXRDdXJzb3Igd2FybmluZyB3ZWJCcm93c2VyIHdlYkJyb3dzZXJQcmVmcyB3aGF0SXMgd2luZG93IHdpbmRvd1ByZWYgd2lyZSAnICtcbiAgICAgICd3aXJlQ29udGV4dCB3b3Jrc3BhY2Ugd3JpbmtsZSB3cmlua2xlQ29udGV4dCB3cml0ZVRha2UgeGJtTGFuZ1BhdGhMaXN0IHhmb3JtJyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIGVhdHMgdmFyaWFibGVzXG4gICAgICAgIGJlZ2luOiAvWyQlQF0oXFxeXFx3XFxifCNcXHcrfFteXFxzXFx3e118XFx7XFx3K1xcfXxcXHcrKS9cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBNZXJjdXJ5XG5BdXRob3I6IG11Y2FobyA8bWt1Y2tvQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBNZXJjdXJ5IGlzIGEgbG9naWMvZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aGljaCBjb21iaW5lcyB0aGUgY2xhcml0eSBhbmQgZXhwcmVzc2l2ZW5lc3Mgb2YgZGVjbGFyYXRpdmUgcHJvZ3JhbW1pbmcgd2l0aCBhZHZhbmNlZCBzdGF0aWMgYW5hbHlzaXMgYW5kIGVycm9yIGRldGVjdGlvbiBmZWF0dXJlcy5cbldlYnNpdGU6IGh0dHBzOi8vd3d3Lm1lcmN1cnlsYW5nLm9yZ1xuKi9cblxuZnVuY3Rpb24gbWVyY3VyeShobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnbW9kdWxlIHVzZV9tb2R1bGUgaW1wb3J0X21vZHVsZSBpbmNsdWRlX21vZHVsZSBlbmRfbW9kdWxlIGluaXRpYWxpc2UgJyArXG4gICAgICAnbXV0YWJsZSBpbml0aWFsaXplIGZpbmFsaXplIGZpbmFsaXNlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBwcmVkICcgK1xuICAgICAgJ21vZGUgZnVuYyB0eXBlIGluc3Qgc29sdmVyIGFueV9wcmVkIGFueV9mdW5jIGlzIHNlbWlkZXQgZGV0IG5vbmRldCAnICtcbiAgICAgICdtdWx0aSBlcnJvbmVvdXMgZmFpbHVyZSBjY19ub25kZXQgY2NfbXVsdGkgdHlwZWNsYXNzIGluc3RhbmNlIHdoZXJlICcgK1xuICAgICAgJ3ByYWdtYSBwcm9taXNlIGV4dGVybmFsIHRyYWNlIGF0b21pYyBvcl9lbHNlIHJlcXVpcmVfY29tcGxldGVfc3dpdGNoICcgK1xuICAgICAgJ3JlcXVpcmVfZGV0IHJlcXVpcmVfc2VtaWRldCByZXF1aXJlX211bHRpIHJlcXVpcmVfbm9uZGV0ICcgK1xuICAgICAgJ3JlcXVpcmVfY2NfbXVsdGkgcmVxdWlyZV9jY19ub25kZXQgcmVxdWlyZV9lcnJvbmVvdXMgcmVxdWlyZV9mYWlsdXJlJyxcbiAgICBtZXRhOlxuICAgICAgLy8gcHJhZ21hXG4gICAgICAnaW5saW5lIG5vX2lubGluZSB0eXBlX3NwZWMgc291cmNlX2ZpbGUgZmFjdF90YWJsZSBvYnNvbGV0ZSBtZW1vICcgK1xuICAgICAgJ2xvb3BfY2hlY2sgbWluaW1hbF9tb2RlbCB0ZXJtaW5hdGVzIGRvZXNfbm90X3Rlcm1pbmF0ZSAnICtcbiAgICAgICdjaGVja190ZXJtaW5hdGlvbiBwcm9taXNlX2VxdWl2YWxlbnRfY2xhdXNlcyAnICtcbiAgICAgIC8vIHByZXByb2Nlc3NvclxuICAgICAgJ2ZvcmVpZ25fcHJvYyBmb3JlaWduX2RlY2wgZm9yZWlnbl9jb2RlIGZvcmVpZ25fdHlwZSAnICtcbiAgICAgICdmb3JlaWduX2ltcG9ydF9tb2R1bGUgZm9yZWlnbl9leHBvcnRfZW51bSBmb3JlaWduX2V4cG9ydCAnICtcbiAgICAgICdmb3JlaWduX2VudW0gbWF5X2NhbGxfbWVyY3VyeSB3aWxsX25vdF9jYWxsX21lcmN1cnkgdGhyZWFkX3NhZmUgJyArXG4gICAgICAnbm90X3RocmVhZF9zYWZlIG1heWJlX3RocmVhZF9zYWZlIHByb21pc2VfcHVyZSBwcm9taXNlX3NlbWlwdXJlICcgK1xuICAgICAgJ3RhYmxlZF9mb3JfaW8gbG9jYWwgdW50cmFpbGVkIHRyYWlsZWQgYXR0YWNoX3RvX2lvX3N0YXRlICcgK1xuICAgICAgJ2Nhbl9wYXNzX2FzX21lcmN1cnlfdHlwZSBzdGFibGUgd2lsbF9ub3RfdGhyb3dfZXhjZXB0aW9uICcgK1xuICAgICAgJ21heV9tb2RpZnlfdHJhaWwgd2lsbF9ub3RfbW9kaWZ5X3RyYWlsIG1heV9kdXBsaWNhdGUgJyArXG4gICAgICAnbWF5X25vdF9kdXBsaWNhdGUgYWZmZWN0c19saXZlbmVzcyBkb2VzX25vdF9hZmZlY3RfbGl2ZW5lc3MgJyArXG4gICAgICAnZG9lc250X2FmZmVjdF9saXZlbmVzcyBub19zaGFyaW5nIHVua25vd25fc2hhcmluZyBzaGFyaW5nJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdzb21lIGFsbCBub3QgaWYgdGhlbiBlbHNlIHRydWUgZmFpbCBmYWxzZSB0cnkgY2F0Y2ggY2F0Y2hfYW55ICcgK1xuICAgICAgJ3NlbWlkZXRfdHJ1ZSBzZW1pZGV0X2ZhbHNlIHNlbWlkZXRfZmFpbCBpbXB1cmVfdHJ1ZSBpbXB1cmUgc2VtaXB1cmUnXG4gIH07XG5cbiAgY29uc3QgQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgnJScsICckJyk7XG5cbiAgY29uc3QgTlVNQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBcIjAnLlxcXFx8MFtib3hdWzAtOWEtZkEtRl0qXCJcbiAgfTtcblxuICBjb25zdCBBVE9NID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge1xuICAgIHJlbGV2YW5jZTogMFxuICB9KTtcbiAgY29uc3QgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICByZWxldmFuY2U6IDBcbiAgfSk7XG4gIGNvbnN0IFNUUklOR19GTVQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAnXFxcXFxcXFxbYWJmbnJ0dl1cXFxcfFxcXFxcXFxceFswLTlhLWZBLUZdKlxcXFxcXFxcXFxcXHwlWy0rIyAqLjAtOV0qW2Rpb3hYdWNzZmVFZ0dwXScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIFNUUklORy5jb250YWlucyA9IFNUUklORy5jb250YWlucy5zbGljZSgpOyAvLyB3ZSBuZWVkIG91ciBvd24gY29weSBvZiBjb250YWluc1xuICBTVFJJTkcuY29udGFpbnMucHVzaChTVFJJTkdfRk1UKTtcblxuICBjb25zdCBJTVBMSUNBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc8PT4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJzw9JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJz0+JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJy9cXFxcXFxcXCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXFxcXFwvJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBIRUFEX0JPRFlfQ09OSlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnOi1cXFxcfC0tPidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNZXJjdXJ5JyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnbScsXG4gICAgICAnbW9vJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBJTVBMSUNBVElPTixcbiAgICAgIEhFQURfQk9EWV9DT05KVU5DVElPTixcbiAgICAgIENPTU1FTlQsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQ09ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBBVE9NLFxuICAgICAgU1RSSU5HLFxuICAgICAgeyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgICBiZWdpbjogLzotL1xuICAgICAgfSxcbiAgICAgIHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgYmVnaW46IC9cXC4kL1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJjdXJ5O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE1JUFMgQXNzZW1ibHlcbkF1dGhvcjogTmVidWxlb24gRnVtaWthIDxuZWJ1bGVvbi5mdW1pa2FAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IE1JUFMgQXNzZW1ibHkgKHVwIHRvIE1JUFMzMlIyKVxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlQU19hcmNoaXRlY3R1cmVcbkNhdGVnb3J5OiBhc3NlbWJsZXJcbiovXG5cbmZ1bmN0aW9uIG1pcHNhc20oaGxqcykge1xuICAvLyBsb2NhbCBsYWJlbHM6ICU/W0ZCXT9bQVRdP1xcZHsxLDJ9XFx3K1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNSVBTIEFzc2VtYmx5JyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsgJ21pcHMnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAgICBtZXRhOlxuICAgICAgICAvLyBHTlUgcHJlcHJvY3NcbiAgICAgICAgJy4yYnl0ZSAuNGJ5dGUgLmFsaWduIC5hc2NpaSAuYXNjaXogLmJhbGlnbiAuYnl0ZSAuY29kZSAuZGF0YSAuZWxzZSAuZW5kIC5lbmRpZiAuZW5kbSAuZW5kciAuZXF1IC5lcnIgLmV4aXRtIC5leHRlcm4gLmdsb2JhbCAuaHdvcmQgLmlmIC5pZmRlZiAuaWZuZGVmIC5pbmNsdWRlIC5pcnAgLmxvbmcgLm1hY3JvIC5yZXB0IC5yZXEgLnNlY3Rpb24gLnNldCAuc2tpcCAuc3BhY2UgLnRleHQgLndvcmQgLmx0b3JnICcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJyQwICQxICQyICQzICQ0ICQ1ICQ2ICQ3ICQ4ICQ5ICQxMCAkMTEgJDEyICQxMyAkMTQgJDE1ICcgKyAvLyBpbnRlZ2VyIHJlZ2lzdGVyc1xuICAgICAgICAnJDE2ICQxNyAkMTggJDE5ICQyMCAkMjEgJDIyICQyMyAkMjQgJDI1ICQyNiAkMjcgJDI4ICQyOSAkMzAgJDMxICcgKyAvLyBpbnRlZ2VyIHJlZ2lzdGVyc1xuICAgICAgICAnemVybyBhdCB2MCB2MSBhMCBhMSBhMiBhMyBhNCBhNSBhNiBhNyAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICd0MCB0MSB0MiB0MyB0NCB0NSB0NiB0NyB0OCB0OSBzMCBzMSBzMiBzMyBzNCBzNSBzNiBzNyBzOCAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICdrMCBrMSBncCBzcCBmcCByYSAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICckZjAgJGYxICRmMiAkZjIgJGY0ICRmNSAkZjYgJGY3ICRmOCAkZjkgJGYxMCAkZjExICRmMTIgJGYxMyAkZjE0ICRmMTUgJyArIC8vIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyc1xuICAgICAgICAnJGYxNiAkZjE3ICRmMTggJGYxOSAkZjIwICRmMjEgJGYyMiAkZjIzICRmMjQgJGYyNSAkZjI2ICRmMjcgJGYyOCAkZjI5ICRmMzAgJGYzMSAnICsgLy8gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzXG4gICAgICAgICdDb250ZXh0IFJhbmRvbSBFbnRyeUxvMCBFbnRyeUxvMSBDb250ZXh0IFBhZ2VNYXNrIFdpcmVkIEVudHJ5SGkgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdIV1JFbmEgQmFkVkFkZHIgQ291bnQgQ29tcGFyZSBTUiBJbnRDdGwgU1JTQ3RsIFNSU01hcCBDYXVzZSBFUEMgUFJJZCAnICsgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICAgICAgJ0VCYXNlIENvbmZpZyBDb25maWcxIENvbmZpZzIgQ29uZmlnMyBMTEFkZHIgRGVidWcgREVQQyBERVNBVkUgQ2FjaGVFcnIgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdFQ0MgRXJyb3JFUEMgVGFnTG8gRGF0YUxvIFRhZ0hpIERhdGFIaSBXYXRjaExvIFdhdGNoSGkgUGVyZkN0bCBQZXJmQ250ICcgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyAvLyBtbmVtb25pY3NcbiAgICAgICAgICAgIC8vIDMyLWJpdCBpbnRlZ2VyIGluc3RydWN0aW9uc1xuICAgICAgICAgICAgJ2FkZGk/dT98YW5kaT98YihhbCk/fGJlcWw/fGJnZXooYWwpP2w/fGJndHpsP3xibGV6bD98Ymx0eihhbCk/bD98JyArXG4gICAgICAgICAgICAnYm5lbD98Y2xbb3pdfGRpdnU/fGV4dHxpbnN8aihhbCk/fGphbHIoXFxcXC5oYik/fGpyKFxcXFwuaGIpP3xsYnU/fGxodT98JyArXG4gICAgICAgICAgICAnbGx8bHVpfGx3W2xyXT98bWFkZHU/fG1maGl8bWZsb3xtb3ZufG1vdnp8bW92ZXxtc3VidT98bXRoaXxtdGxvfG11bHwnICtcbiAgICAgICAgICAgICdtdWx0dT98bm9wfG5vcnxvcmk/fHJvdHJ2P3xzYnxzY3xzZVtiaF18c2h8c2xsdj98c2x0aT91P3xzcmF2P3wnICtcbiAgICAgICAgICAgICdzcmx2P3xzdWJ1P3xzd1tscl0/fHhvcmk/fHdzYmh8JyArXG4gICAgICAgICAgICAvLyBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnNcbiAgICAgICAgICAgICdhYnNcXFxcLltzZF18YWRkXFxcXC5bc2RdfGFsbnYucHN8YmMxW2Z0XWw/fCcgK1xuICAgICAgICAgICAgJ2NcXFxcLihzP2Z8dW58dT9lcXxbb3VdbHR8W291XWxlfG5nbGU/fHNlcXxsW2V0XXxuZ1tldF0pXFxcXC5bc2RdfCcgK1xuICAgICAgICAgICAgJyhjZWlsfGZsb29yfHJvdW5kfHRydW5jKVxcXFwuW2x3XVxcXFwuW3NkXXxjZmMxfGN2dFxcXFwuZFxcXFwuW2xzd118JyArXG4gICAgICAgICAgICAnY3Z0XFxcXC5sXFxcXC5bZHN3XXxjdnRcXFxcLnBzXFxcXC5zfGN2dFxcXFwuc1xcXFwuW2Rsd118Y3Z0XFxcXC5zXFxcXC5wW2x1XXxjdnRcXFxcLndcXFxcLltkbHNdfCcgK1xuICAgICAgICAgICAgJ2RpdlxcXFwuW2RzXXxsZHg/YzF8bHV4YzF8bHd4P2MxfG1hZGRcXFxcLltzZF18bWZjMXxtb3ZbZm50el0/XFxcXC5bZHNdfCcgK1xuICAgICAgICAgICAgJ21zdWJcXFxcLltzZF18bXRoP2MxfG11bFxcXFwuW2RzXXxuZWdcXFxcLltkc118bm1hZGRcXFxcLltkc118bm1zdWJcXFxcLltkc118JyArXG4gICAgICAgICAgICAncFtsdV1bbHVdXFxcXC5wc3xyZWNpcFxcXFwuZm10fHI/c3FydFxcXFwuW2RzXXxzZHg/YzF8c3ViXFxcXC5bZHNdfHN1eGMxfCcgK1xuICAgICAgICAgICAgJ3N3eD9jMXwnICtcbiAgICAgICAgICAgIC8vIHN5c3RlbSBjb250cm9sIGluc3RydWN0aW9uc1xuICAgICAgICAgICAgJ2JyZWFrfGNhY2hlfGQ/ZXJldHxbZGVdaXxlaGJ8bWZjMHxtdGMwfHBhdXNlfHByZWZ4P3xyZGh3cnwnICtcbiAgICAgICAgICAgICdyZHBncHJ8c2RiYnB8c3Nub3B8c3luY2k/fHN5c2NhbGx8dGVxaT98dGdlaT91P3x0bGIocHxyfHdbaXJdKXwnICtcbiAgICAgICAgICAgICd0bHRpP3U/fHRuZWk/fHdhaXR8d3JwZ3ByJyArXG4gICAgICAgICcpJyxcbiAgICAgICAgZW5kOiAnXFxcXHMnXG4gICAgICB9LFxuICAgICAgLy8gbGluZXMgZW5kaW5nIHdpdGggOyBvciAjIGFyZW4ndCByZWFsbHkgY29tbWVudHMsIHByb2JhYmx5IGF1dG8tZGV0ZWN0IGZhaWxcbiAgICAgIGhsanMuQ09NTUVOVCgnWzsjXSg/IVxcXFxzKiQpJywgJyQnKSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLFxuICAgICAgICBlbmQ6ICdcXFxcfCcsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IC8vIGhleFxuICAgICAgICAgICAgYmVnaW46ICcweFswLTlhLWZdKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gYmFyZSBudW1iZXJcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGItP1xcXFxkKydcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IC8vIEdOVSBNSVBTIHN5bnRheFxuICAgICAgICAgICAgYmVnaW46ICdeXFxcXHMqW2Etel9cXFxcLlxcXFwkXVthLXowLTlfXFxcXC5cXFxcJF0rOidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gbnVtYmVyZWQgbG9jYWwgbGFiZWxzXG4gICAgICAgICAgICBiZWdpbjogJ15cXFxccypbMC05XSs6J1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBudW1iZXIgbG9jYWwgbGFiZWwgcmVmZXJlbmNlIChiYWNrd2FyZHMsIGZvcndhcmRzKVxuICAgICAgICAgICAgYmVnaW46ICdbMC05XStbYmZdJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICAvLyBmb3J3YXJkIHNsYXNoZXMgYXJlIG5vdCBhbGxvd2VkXG4gICAgaWxsZWdhbDogL1xcLy9cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaXBzYXNtO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE1pemFyXG5EZXNjcmlwdGlvbjogVGhlIE1pemFyIExhbmd1YWdlIGlzIGEgZm9ybWFsIGxhbmd1YWdlIGRlcml2ZWQgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHZlcm5hY3VsYXIuXG5BdXRob3I6IEtlbGxleSB2YW4gRXZlcnQgPGtlbGxleXZhbmV2ZXJ0QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHA6Ly9taXphci5vcmcvbGFuZ3VhZ2UvXG5DYXRlZ29yeTogc2NpZW50aWZpY1xuKi9cblxuZnVuY3Rpb24gbWl6YXIoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNaXphcicsXG4gICAga2V5d29yZHM6XG4gICAgICAnZW52aXJvbiB2b2NhYnVsYXJpZXMgbm90YXRpb25zIGNvbnN0cnVjdG9ycyBkZWZpbml0aW9ucyAnICtcbiAgICAgICdyZWdpc3RyYXRpb25zIHRoZW9yZW1zIHNjaGVtZXMgcmVxdWlyZW1lbnRzIGJlZ2luIGVuZCBkZWZpbml0aW9uICcgK1xuICAgICAgJ3JlZ2lzdHJhdGlvbiBjbHVzdGVyIGV4aXN0ZW5jZSBwcmVkIGZ1bmMgZGVmcHJlZCBkZWZmdW5jIHRoZW9yZW0gJyArXG4gICAgICAncHJvb2YgbGV0IHRha2UgYXNzdW1lIHRoZW4gdGh1cyBoZW5jZSBleCBmb3Igc3QgaG9sZHMgY29uc2lkZXIgJyArXG4gICAgICAncmVjb25zaWRlciBzdWNoIHRoYXQgYW5kIGluIHByb3ZpZGVkIG9mIGFzIGZyb20gYmUgYmVpbmcgYnkgbWVhbnMgJyArXG4gICAgICAnZXF1YWxzIGltcGxpZXMgaWZmIHJlZGVmaW5lIGRlZmluZSBub3cgbm90IG9yIGF0dHIgaXMgbW9kZSAnICtcbiAgICAgICdzdXBwb3NlIHBlciBjYXNlcyBzZXQgdGhlc2lzIGNvbnRyYWRpY3Rpb24gc2NoZW1lIHJlc2VydmUgc3RydWN0ICcgK1xuICAgICAgJ2NvcnJlY3RuZXNzIGNvbXBhdGliaWxpdHkgY29oZXJlbmNlIHN5bW1ldHJ5IGFzc3ltZXRyeSAnICtcbiAgICAgICdyZWZsZXhpdml0eSBpcnJlZmxleGl2aXR5IGNvbm5lY3RlZG5lc3MgdW5pcXVlbmVzcyBjb21tdXRhdGl2aXR5ICcgK1xuICAgICAgJ2lkZW1wb3RlbmNlIGludm9sdXRpdmVuZXNzIHByb2plY3Rpdml0eScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnOjonLCAnJCcpXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pemFyO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLyoqXG4gKiBBbnkgb2YgdGhlIHBhc3NlZCBleHByZXNzc2lvbnMgbWF5IG1hdGNoXG4gKlxuICogQ3JlYXRlcyBhIGh1Z2UgdGhpcyB8IHRoaXMgfCB0aGF0IHwgdGhhdCBtYXRjaFxuICogQHBhcmFtIHsoUmVnRXhwIHwgc3RyaW5nKVtdIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZWl0aGVyKC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gJygnICsgYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcInxcIikgKyBcIilcIjtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLypcbkxhbmd1YWdlOiBQZXJsXG5BdXRob3I6IFBldGVyIExlb25vdiA8Z29qcGVnQHlhbmRleC5ydT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBlcmwub3JnXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gcGVybChobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgICdhYnMnLFxuICAgICdhY2NlcHQnLFxuICAgICdhbGFybScsXG4gICAgJ2FuZCcsXG4gICAgJ2F0YW4yJyxcbiAgICAnYmluZCcsXG4gICAgJ2Jpbm1vZGUnLFxuICAgICdibGVzcycsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FsbGVyJyxcbiAgICAnY2hkaXInLFxuICAgICdjaG1vZCcsXG4gICAgJ2Nob21wJyxcbiAgICAnY2hvcCcsXG4gICAgJ2Nob3duJyxcbiAgICAnY2hyJyxcbiAgICAnY2hyb290JyxcbiAgICAnY2xvc2UnLFxuICAgICdjbG9zZWRpcicsXG4gICAgJ2Nvbm5lY3QnLFxuICAgICdjb250aW51ZScsXG4gICAgJ2NvcycsXG4gICAgJ2NyeXB0JyxcbiAgICAnZGJtY2xvc2UnLFxuICAgICdkYm1vcGVuJyxcbiAgICAnZGVmaW5lZCcsXG4gICAgJ2RlbGV0ZScsXG4gICAgJ2RpZScsXG4gICAgJ2RvJyxcbiAgICAnZHVtcCcsXG4gICAgJ2VhY2gnLFxuICAgICdlbHNlJyxcbiAgICAnZWxzaWYnLFxuICAgICdlbmRncmVudCcsXG4gICAgJ2VuZGhvc3RlbnQnLFxuICAgICdlbmRuZXRlbnQnLFxuICAgICdlbmRwcm90b2VudCcsXG4gICAgJ2VuZHB3ZW50JyxcbiAgICAnZW5kc2VydmVudCcsXG4gICAgJ2VvZicsXG4gICAgJ2V2YWwnLFxuICAgICdleGVjJyxcbiAgICAnZXhpc3RzJyxcbiAgICAnZXhpdCcsXG4gICAgJ2V4cCcsXG4gICAgJ2ZjbnRsJyxcbiAgICAnZmlsZW5vJyxcbiAgICAnZmxvY2snLFxuICAgICdmb3InLFxuICAgICdmb3JlYWNoJyxcbiAgICAnZm9yaycsXG4gICAgJ2Zvcm1hdCcsXG4gICAgJ2Zvcm1saW5lJyxcbiAgICAnZ2V0YycsXG4gICAgJ2dldGdyZW50JyxcbiAgICAnZ2V0Z3JnaWQnLFxuICAgICdnZXRncm5hbScsXG4gICAgJ2dldGhvc3RieWFkZHInLFxuICAgICdnZXRob3N0YnluYW1lJyxcbiAgICAnZ2V0aG9zdGVudCcsXG4gICAgJ2dldGxvZ2luJyxcbiAgICAnZ2V0bmV0YnlhZGRyJyxcbiAgICAnZ2V0bmV0YnluYW1lJyxcbiAgICAnZ2V0bmV0ZW50JyxcbiAgICAnZ2V0cGVlcm5hbWUnLFxuICAgICdnZXRwZ3JwJyxcbiAgICAnZ2V0cHJpb3JpdHknLFxuICAgICdnZXRwcm90b2J5bmFtZScsXG4gICAgJ2dldHByb3RvYnludW1iZXInLFxuICAgICdnZXRwcm90b2VudCcsXG4gICAgJ2dldHB3ZW50JyxcbiAgICAnZ2V0cHduYW0nLFxuICAgICdnZXRwd3VpZCcsXG4gICAgJ2dldHNlcnZieW5hbWUnLFxuICAgICdnZXRzZXJ2Ynlwb3J0JyxcbiAgICAnZ2V0c2VydmVudCcsXG4gICAgJ2dldHNvY2tuYW1lJyxcbiAgICAnZ2V0c29ja29wdCcsXG4gICAgJ2dpdmVuJyxcbiAgICAnZ2xvYicsXG4gICAgJ2dtdGltZScsXG4gICAgJ2dvdG8nLFxuICAgICdncmVwJyxcbiAgICAnZ3QnLFxuICAgICdoZXgnLFxuICAgICdpZicsXG4gICAgJ2luZGV4JyxcbiAgICAnaW50JyxcbiAgICAnaW9jdGwnLFxuICAgICdqb2luJyxcbiAgICAna2V5cycsXG4gICAgJ2tpbGwnLFxuICAgICdsYXN0JyxcbiAgICAnbGMnLFxuICAgICdsY2ZpcnN0JyxcbiAgICAnbGVuZ3RoJyxcbiAgICAnbGluaycsXG4gICAgJ2xpc3RlbicsXG4gICAgJ2xvY2FsJyxcbiAgICAnbG9jYWx0aW1lJyxcbiAgICAnbG9nJyxcbiAgICAnbHN0YXQnLFxuICAgICdsdCcsXG4gICAgJ21hJyxcbiAgICAnbWFwJyxcbiAgICAnbWtkaXInLFxuICAgICdtc2djdGwnLFxuICAgICdtc2dnZXQnLFxuICAgICdtc2dyY3YnLFxuICAgICdtc2dzbmQnLFxuICAgICdteScsXG4gICAgJ25lJyxcbiAgICAnbmV4dCcsXG4gICAgJ25vJyxcbiAgICAnbm90JyxcbiAgICAnb2N0JyxcbiAgICAnb3BlbicsXG4gICAgJ29wZW5kaXInLFxuICAgICdvcicsXG4gICAgJ29yZCcsXG4gICAgJ291cicsXG4gICAgJ3BhY2snLFxuICAgICdwYWNrYWdlJyxcbiAgICAncGlwZScsXG4gICAgJ3BvcCcsXG4gICAgJ3BvcycsXG4gICAgJ3ByaW50JyxcbiAgICAncHJpbnRmJyxcbiAgICAncHJvdG90eXBlJyxcbiAgICAncHVzaCcsXG4gICAgJ3F8MCcsXG4gICAgJ3FxJyxcbiAgICAncXVvdGVtZXRhJyxcbiAgICAncXcnLFxuICAgICdxeCcsXG4gICAgJ3JhbmQnLFxuICAgICdyZWFkJyxcbiAgICAncmVhZGRpcicsXG4gICAgJ3JlYWRsaW5lJyxcbiAgICAncmVhZGxpbmsnLFxuICAgICdyZWFkcGlwZScsXG4gICAgJ3JlY3YnLFxuICAgICdyZWRvJyxcbiAgICAncmVmJyxcbiAgICAncmVuYW1lJyxcbiAgICAncmVxdWlyZScsXG4gICAgJ3Jlc2V0JyxcbiAgICAncmV0dXJuJyxcbiAgICAncmV2ZXJzZScsXG4gICAgJ3Jld2luZGRpcicsXG4gICAgJ3JpbmRleCcsXG4gICAgJ3JtZGlyJyxcbiAgICAnc2F5JyxcbiAgICAnc2NhbGFyJyxcbiAgICAnc2VlaycsXG4gICAgJ3NlZWtkaXInLFxuICAgICdzZWxlY3QnLFxuICAgICdzZW1jdGwnLFxuICAgICdzZW1nZXQnLFxuICAgICdzZW1vcCcsXG4gICAgJ3NlbmQnLFxuICAgICdzZXRncmVudCcsXG4gICAgJ3NldGhvc3RlbnQnLFxuICAgICdzZXRuZXRlbnQnLFxuICAgICdzZXRwZ3JwJyxcbiAgICAnc2V0cHJpb3JpdHknLFxuICAgICdzZXRwcm90b2VudCcsXG4gICAgJ3NldHB3ZW50JyxcbiAgICAnc2V0c2VydmVudCcsXG4gICAgJ3NldHNvY2tvcHQnLFxuICAgICdzaGlmdCcsXG4gICAgJ3NobWN0bCcsXG4gICAgJ3NobWdldCcsXG4gICAgJ3NobXJlYWQnLFxuICAgICdzaG13cml0ZScsXG4gICAgJ3NodXRkb3duJyxcbiAgICAnc2luJyxcbiAgICAnc2xlZXAnLFxuICAgICdzb2NrZXQnLFxuICAgICdzb2NrZXRwYWlyJyxcbiAgICAnc29ydCcsXG4gICAgJ3NwbGljZScsXG4gICAgJ3NwbGl0JyxcbiAgICAnc3ByaW50ZicsXG4gICAgJ3NxcnQnLFxuICAgICdzcmFuZCcsXG4gICAgJ3N0YXQnLFxuICAgICdzdGF0ZScsXG4gICAgJ3N0dWR5JyxcbiAgICAnc3ViJyxcbiAgICAnc3Vic3RyJyxcbiAgICAnc3ltbGluaycsXG4gICAgJ3N5c2NhbGwnLFxuICAgICdzeXNvcGVuJyxcbiAgICAnc3lzcmVhZCcsXG4gICAgJ3N5c3NlZWsnLFxuICAgICdzeXN0ZW0nLFxuICAgICdzeXN3cml0ZScsXG4gICAgJ3RlbGwnLFxuICAgICd0ZWxsZGlyJyxcbiAgICAndGllJyxcbiAgICAndGllZCcsXG4gICAgJ3RpbWUnLFxuICAgICd0aW1lcycsXG4gICAgJ3RyJyxcbiAgICAndHJ1bmNhdGUnLFxuICAgICd1YycsXG4gICAgJ3VjZmlyc3QnLFxuICAgICd1bWFzaycsXG4gICAgJ3VuZGVmJyxcbiAgICAndW5sZXNzJyxcbiAgICAndW5saW5rJyxcbiAgICAndW5wYWNrJyxcbiAgICAndW5zaGlmdCcsXG4gICAgJ3VudGllJyxcbiAgICAndW50aWwnLFxuICAgICd1c2UnLFxuICAgICd1dGltZScsXG4gICAgJ3ZhbHVlcycsXG4gICAgJ3ZlYycsXG4gICAgJ3dhaXQnLFxuICAgICd3YWl0cGlkJyxcbiAgICAnd2FudGFycmF5JyxcbiAgICAnd2FybicsXG4gICAgJ3doZW4nLFxuICAgICd3aGlsZScsXG4gICAgJ3dyaXRlJyxcbiAgICAneHwwJyxcbiAgICAneG9yJyxcbiAgICAneXwwJ1xuICBdO1xuXG4gIC8vIGh0dHBzOi8vcGVybGRvYy5wZXJsLm9yZy9wZXJscmUjTW9kaWZpZXJzXG4gIGNvbnN0IFJFR0VYX01PRElGSUVSUyA9IC9bZHVhbHhtc2lwbmdyXXswLDEyfS87IC8vIGFhIGFuZCB4eCBhcmUgdmFsaWQsIG1ha2luZyBtYXggbGVuZ3RoIDEyXG4gIGNvbnN0IFBFUkxfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9bXFx3Ll0rLyxcbiAgICBrZXl3b3JkOiBLRVlXT1JEUy5qb2luKFwiIFwiKVxuICB9O1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdbJEBdXFxcXHsnLFxuICAgIGVuZDogJ1xcXFx9JyxcbiAgICBrZXl3b3JkczogUEVSTF9LRVlXT1JEU1xuICB9O1xuICBjb25zdCBNRVRIT0QgPSB7XG4gICAgYmVnaW46IC8tPlxcey8sXG4gICAgZW5kOiAvXFx9L1xuICAgIC8vIGNvbnRhaW5zIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgY29uc3QgVkFSID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkXFxkL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGNvbmNhdChcbiAgICAgICAgICAvWyQlQF0oXFxeXFx3XFxifCNcXHcrKDo6XFx3KykqfFxce1xcdytcXH18XFx3Kyg6OlxcdyopKikvLFxuICAgICAgICAgIC8vIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJpZXMgdG8gYXZvaWQgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90XG4gICAgICAgICAgLy8gUGVybCBhdCBhbGwgbGlrZSAkaWRlbnQkLCBAaWRlbnRALCBldGMuXG4gICAgICAgICAgYCg/IVtBLVphLXpdKSg/IVtAJCVdKWBcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bJCVAXVteXFxzXFx3e10vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFNUUklOR19DT05UQUlOUyA9IFtcbiAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgU1VCU1QsXG4gICAgVkFSXG4gIF07XG4gIGNvbnN0IFJFR0VYX0RFTElNUyA9IFtcbiAgICAvIS8sXG4gICAgL1xcLy8sXG4gICAgL1xcfC8sXG4gICAgL1xcPy8sXG4gICAgLycvLFxuICAgIC9cIi8sIC8vIHZhbGlkIGJ1dCBpbmZyZXF1ZW50IGFuZCB3ZWlyZFxuICAgIC8jLyAvLyB2YWxpZCBidXQgaW5mcmVxdWVudCBhbmQgd2VpcmRcbiAgXTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IGNsb3NlXG4gICAqL1xuICBjb25zdCBQQUlSRURfRE9VQkxFX1JFID0gKHByZWZpeCwgb3BlbiwgY2xvc2UgPSAnXFxcXDEnKSA9PiB7XG4gICAgY29uc3QgbWlkZGxlID0gKGNsb3NlID09PSAnXFxcXDEnKVxuICAgICAgPyBjbG9zZVxuICAgICAgOiBjb25jYXQoY2xvc2UsIG9wZW4pO1xuICAgIHJldHVybiBjb25jYXQoXG4gICAgICBjb25jYXQoXCIoPzpcIiwgcHJlZml4LCBcIilcIiksXG4gICAgICBvcGVuLFxuICAgICAgLyg/OlxcXFwufFteXFxcXFxcL10pKj8vLFxuICAgICAgbWlkZGxlLFxuICAgICAgLyg/OlxcXFwufFteXFxcXFxcL10pKj8vLFxuICAgICAgY2xvc2UsXG4gICAgICBSRUdFWF9NT0RJRklFUlNcbiAgICApO1xuICB9O1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBvcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gY2xvc2VcbiAgICovXG4gIGNvbnN0IFBBSVJFRF9SRSA9IChwcmVmaXgsIG9wZW4sIGNsb3NlKSA9PiB7XG4gICAgcmV0dXJuIGNvbmNhdChcbiAgICAgIGNvbmNhdChcIig/OlwiLCBwcmVmaXgsIFwiKVwiKSxcbiAgICAgIG9wZW4sXG4gICAgICAvKD86XFxcXC58W15cXFxcXFwvXSkqPy8sXG4gICAgICBjbG9zZSxcbiAgICAgIFJFR0VYX01PRElGSUVSU1xuICAgICk7XG4gIH07XG4gIGNvbnN0IFBFUkxfREVGQVVMVF9DT05UQUlOUyA9IFtcbiAgICBWQVIsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAvXj1cXHcvLFxuICAgICAgLz1jdXQvLFxuICAgICAge1xuICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZVxuICAgICAgfVxuICAgICksXG4gICAgTUVUSE9ELFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBjb250YWluczogU1RSSU5HX0NPTlRBSU5TLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxcKCcsXG4gICAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFxbJyxcbiAgICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ3FbcXd4cl0/XFxcXHMqXFxcXHsnLFxuICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxcfCcsXG4gICAgICAgICAgZW5kOiAnXFxcXHwnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKjwnLFxuICAgICAgICAgIGVuZDogJz4nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxd1xcXFxzK3EnLFxuICAgICAgICAgIGVuZDogJ3EnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgIGVuZDogJ1wiJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdgJyxcbiAgICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cXHtcXHcrXFx9LyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLT9cXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgeyAvLyByZWdleHAgY29udGFpbmVyXG4gICAgICBiZWdpbjogJyhcXFxcL1xcXFwvfCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihzcGxpdHxyZXR1cm58cHJpbnR8cmV2ZXJzZXxncmVwKVxcXFxiKVxcXFxzKicsXG4gICAgICBrZXl3b3JkczogJ3NwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAnLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIC8vIGFsbG93IG1hdGNoaW5nIGNvbW1vbiBkZWxpbWl0ZXJzXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfRE9VQkxFX1JFKFwic3x0cnx5XCIsIGVpdGhlciguLi5SRUdFWF9ERUxJTVMpKSB9LFxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gcGFpcmVkIGRlbG1pc1xuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX0RPVUJMRV9SRShcInN8dHJ8eVwiLCBcIlxcXFwoXCIsIFwiXFxcXClcIikgfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9ET1VCTEVfUkUoXCJzfHRyfHlcIiwgXCJcXFxcW1wiLCBcIlxcXFxdXCIpIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfRE9VQkxFX1JFKFwic3x0cnx5XCIsIFwiXFxcXHtcIiwgXCJcXFxcfVwiKSB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gY291bGQgYmUgYSBjb21tZW50IGluIG1hbnkgbGFuZ3VhZ2VzIHNvIGRvIG5vdCBjb3VudFxuICAgICAgICAgICAgICAvLyBhcyByZWxldmFudFxuICAgICAgICAgICAgICBiZWdpbjogLyhtfHFyKVxcL1xcLy8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHByZWZpeCBpcyBvcHRpb25hbCB3aXRoIC9yZWdleC9cbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIig/Om18cXIpP1wiLCAvXFwvLywgL1xcLy8pfSxcbiAgICAgICAgICAgIC8vIGFsbG93IG1hdGNoaW5nIGNvbW1vbiBkZWxpbWl0ZXJzXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfUkUoXCJtfHFyXCIsIGVpdGhlciguLi5SRUdFWF9ERUxJTVMpLCAvXFwxLyl9LFxuICAgICAgICAgICAgLy8gYWxsb3cgY29tbW9uIHBhaXJlZCBkZWxtaW5zXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfUkUoXCJtfHFyXCIsIC9cXCgvLCAvXFwpLyl9LFxuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX1JFKFwibXxxclwiLCAvXFxbLywgL1xcXS8pfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIm18cXJcIiwgL1xcey8sIC9cXH0vKX1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdzdWInLFxuICAgICAgZW5kOiAnKFxcXFxzKlxcXFwoLio/XFxcXCkpP1s7e10nLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJlbGV2YW5jZTogNSxcbiAgICAgIGNvbnRhaW5zOiBbIGhsanMuVElUTEVfTU9ERSBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogJy1cXFxcd1xcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IFwiXl9fREFUQV9fJFwiLFxuICAgICAgZW5kOiBcIl5fX0VORF9fJFwiLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICdtb2pvbGljaW91cycsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IFwiXkBALipcIixcbiAgICAgICAgICBlbmQ6IFwiJFwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBQRVJMX0RFRkFVTFRfQ09OVEFJTlM7XG4gIE1FVEhPRC5jb250YWlucyA9IFBFUkxfREVGQVVMVF9DT05UQUlOUztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQZXJsJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncGwnLFxuICAgICAgJ3BtJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IFBFUkxfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFBFUkxfREVGQVVMVF9DT05UQUlOU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmw7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogTW9qb2xpY2lvdXNcblJlcXVpcmVzOiB4bWwuanMsIHBlcmwuanNcbkF1dGhvcjogRG90YW4gRGltZXQgPGRvdGFuQGNvcmt5Lm5ldD5cbkRlc2NyaXB0aW9uOiBNb2pvbGljaW91cyAuZXAgKEVtYmVkZGVkIFBlcmwpIHRlbXBsYXRlc1xuV2Vic2l0ZTogaHR0cHM6Ly9tb2pvbGljaW91cy5vcmdcbkNhdGVnb3J5OiB0ZW1wbGF0ZVxuKi9cbmZ1bmN0aW9uIG1vam9saWNpb3VzKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTW9qb2xpY2lvdXMnLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeX18oRU5EfERBVEEpX18kJ1xuICAgICAgfSxcbiAgICAgIC8vIG1vam9saWNpb3VzIGxpbmVcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXlxcXFxzKiV7MSwyfT17MCwyfVwiLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwZXJsJ1xuICAgICAgfSxcbiAgICAgIC8vIG1vam9saWNpb3VzIGJsb2NrXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIjwlezEsMn09ezAsMn1cIixcbiAgICAgICAgZW5kOiBcIj17MCwxfSU+XCIsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAncGVybCcsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb2pvbGljaW91cztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBNb25rZXlcbkRlc2NyaXB0aW9uOiBNb25rZXkyIGlzIGFuIGVhc3kgdG8gdXNlLCBjcm9zcyBwbGF0Zm9ybSwgZ2FtZXMgb3JpZW50ZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZnJvbSBCbGl0eiBSZXNlYXJjaC5cbkF1dGhvcjogQXJ0aHVyIEJpa211bGxpbiA8ZGV2b2xvbnRlckBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2JsaXR6cmVzZWFyY2guaXRjaC5pby9tb25rZXkyXG4qL1xuXG5mdW5jdGlvbiBtb25rZXkoaGxqcykge1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbJF1bYS1mQS1GMC05XSsnXG4gICAgICB9LFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNb25rZXknLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdwdWJsaWMgcHJpdmF0ZSBwcm9wZXJ0eSBjb250aW51ZSBleGl0IGV4dGVybiBuZXcgdHJ5IGNhdGNoICcgK1xuICAgICAgICAnZWFjaGluIG5vdCBhYnN0cmFjdCBmaW5hbCBzZWxlY3QgY2FzZSBkZWZhdWx0IGNvbnN0IGxvY2FsIGdsb2JhbCBmaWVsZCAnICtcbiAgICAgICAgJ2VuZCBpZiB0aGVuIGVsc2UgZWxzZWlmIGVuZGlmIHdoaWxlIHdlbmQgcmVwZWF0IHVudGlsIGZvcmV2ZXIgZm9yICcgK1xuICAgICAgICAndG8gc3RlcCBuZXh0IHJldHVybiBtb2R1bGUgaW5saW5lIHRocm93IGltcG9ydCcsXG5cbiAgICAgIGJ1aWx0X2luOiAnRGVidWdMb2cgRGVidWdTdG9wIEVycm9yIFByaW50IEFDb3MgQUNvc3IgQVNpbiBBU2luciBBVGFuIEFUYW4yIEFUYW4yciBBVGFuciBBYnMgQWJzIENlaWwgJyArXG4gICAgICAgICdDbGFtcCBDbGFtcCBDb3MgQ29zciBFeHAgRmxvb3IgTG9nIE1heCBNYXggTWluIE1pbiBQb3cgU2duIFNnbiBTaW4gU2luciBTcXJ0IFRhbiBUYW5yIFNlZWQgUEkgSEFMRlBJIFRXT1BJJyxcblxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbnVsbCBhbmQgb3Igc2hsIHNociBtb2QnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCcjcmVtJywgJyNlbmQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgXCInXCIsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBtZXRob2QnLFxuICAgICAgICBlbmQ6ICdbKD06XXwkJyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoc2VsZnxzdXBlcilcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ1xcXFxzKiMnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxzZWlmIGVuZGlmIGVuZCB0aGVuJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqc3RyaWN0XFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnYWxpYXMnLFxuICAgICAgICBlbmQ6ICc9JyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUgXVxuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW9ua2V5O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE1vb25TY3JpcHRcbkF1dGhvcjogQmlsbHkgUXVpdGggPGNoaW5iaWxseWJpbGJvQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBNb29uU2NyaXB0IGlzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdGhhdCB0cmFuc2NvbXBpbGVzIHRvIEx1YS5cbk9yaWdpbjogY29mZmVlc2NyaXB0LmpzXG5XZWJzaXRlOiBodHRwOi8vbW9vbnNjcmlwdC5vcmcvXG5DYXRlZ29yeTogc2NyaXB0aW5nXG4qL1xuXG5mdW5jdGlvbiBtb29uc2NyaXB0KGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgIC8vIE1vb25zY3JpcHQga2V5d29yZHNcbiAgICAgICdpZiB0aGVuIG5vdCBmb3IgaW4gd2hpbGUgZG8gcmV0dXJuIGVsc2UgZWxzZWlmIGJyZWFrIGNvbnRpbnVlIHN3aXRjaCBhbmQgb3IgJyArXG4gICAgICAndW5sZXNzIHdoZW4gY2xhc3MgZXh0ZW5kcyBzdXBlciBsb2NhbCBpbXBvcnQgZXhwb3J0IGZyb20gdXNpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ19HIF9WRVJTSU9OIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgJyArXG4gICAgICAnbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgJyArXG4gICAgICAnc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBjb3JvdXRpbmUgZGVidWcgJyArXG4gICAgICAnaW8gbWF0aCBvcyBwYWNrYWdlIHN0cmluZyB0YWJsZSdcbiAgfTtcbiAgY29uc3QgSlNfSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgRVhQUkVTU0lPTlMgPSBbXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnKFxcXFxzKi8pPycsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIH0pLCAvLyBhIG51bWJlciB0cmllcyB0byBlYXQgdGhlIGZvbGxvd2luZyBzbGFzaCB0byBwcmV2ZW50IHRyZWF0aW5nIGl0IGFzIGEgcmVnZXhwXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICAgIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICAgIFNVQlNUXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICBiZWdpbjogJ0BfXycgKyBobGpzLklERU5UX1JFXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogJ0AnICsgaGxqcy5JREVOVF9SRSAvLyByZWxldmFuY2UgYm9vc3RlciBvbiBwYXIgd2l0aCBDb2ZmZWVTY3JpcHRcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxcXFxcJyArIGhsanMuSURFTlRfUkUgLy8gaW5zdFxcbWV0aG9kXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIGNvbnN0IFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgIGJlZ2luOiBKU19JREVOVF9SRVxuICB9KTtcbiAgY29uc3QgUE9TU0lCTEVfUEFSQU1TX1JFID0gJyhcXFxcKC4qXFxcXClcXFxccyopP1xcXFxCWy09XT4nO1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoW15cXFxcKF0nLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIC8qIFdlIG5lZWQgYW5vdGhlciBjb250YWluZWQgbmFtZWxlc3MgbW9kZSB0byBub3QgaGF2ZSBldmVyeSBuZXN0ZWRcbiAgICBwYWlyIG9mIHBhcmVucyB0byBiZSBjYWxsZWQgXCJwYXJhbXNcIiAqL1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogWyAnc2VsZicgXS5jb25jYXQoRVhQUkVTU0lPTlMpXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ01vb25TY3JpcHQnLFxuICAgIGFsaWFzZXM6IFsgJ21vb24nIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OUy5jb25jYXQoW1xuICAgICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJywgLy8gZnVuY3Rpb246IC0+ID0+XG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBPU1NJQkxFX1BBUkFNU19SRSxcbiAgICAgICAgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBUSVRMRSxcbiAgICAgICAgICBQQVJBTVNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bXFwoLDo9XVxccyovLCAvLyBhbm9ueW1vdXMgZnVuY3Rpb24gc3RhcnRcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQT1NTSUJMRV9QQVJBTVNfUkUsXG4gICAgICAgICAgICBlbmQ6ICdbLT1dPicsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbIFBBUkFNUyBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFsgVElUTEUgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgVElUTEVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsIC8vIHRhYmxlXG4gICAgICAgIGJlZ2luOiBKU19JREVOVF9SRSArICc6JyxcbiAgICAgICAgZW5kOiAnOicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW9vbnNjcmlwdDtcbiIsCiAgICAiLypcbiBMYW5ndWFnZTogTjFRTFxuIEF1dGhvcjogQW5kcmVzIFTDpGh0IDxhbmRyZXMudGFodEBnbWFpbC5jb20+XG4gQ29udHJpYnV0b3JzOiBSZW5lIFNhYXJzb28gPG5lbmVAdHJpaW4ubmV0PlxuIERlc2NyaXB0aW9uOiBDb3VjaGJhc2UgcXVlcnkgbGFuZ3VhZ2VcbiBXZWJzaXRlOiBodHRwczovL3d3dy5jb3VjaGJhc2UuY29tL3Byb2R1Y3RzL24xcWxcbiAqL1xuXG5mdW5jdGlvbiBuMXFsKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTjFRTCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOlxuICAgICAgICAgICdidWlsZCBjcmVhdGUgaW5kZXggZGVsZXRlIGRyb3AgZXhwbGFpbiBpbmZlcnwxMCBpbnNlcnQgbWVyZ2UgcHJlcGFyZSBzZWxlY3QgdXBkYXRlIHVwc2VydHwxMCcsXG4gICAgICAgIGVuZDogLzsvLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L24xcWwvbjFxbC1sYW5ndWFnZS1yZWZlcmVuY2UvcmVzZXJ2ZWR3b3Jkcy5odG1sXG4gICAgICAgICAga2V5d29yZDpcbiAgICAgICAgICAgICdhbGwgYWx0ZXIgYW5hbHl6ZSBhbmQgYW55IGFycmF5IGFzIGFzYyBiZWdpbiBiZXR3ZWVuIGJpbmFyeSBib29sZWFuIGJyZWFrIGJ1Y2tldCBidWlsZCBieSBjYWxsICcgK1xuICAgICAgICAgICAgJ2Nhc2UgY2FzdCBjbHVzdGVyIGNvbGxhdGUgY29sbGVjdGlvbiBjb21taXQgY29ubmVjdCBjb250aW51ZSBjb3JyZWxhdGUgY292ZXIgY3JlYXRlIGRhdGFiYXNlICcgK1xuICAgICAgICAgICAgJ2RhdGFzZXQgZGF0YXN0b3JlIGRlY2xhcmUgZGVjcmVtZW50IGRlbGV0ZSBkZXJpdmVkIGRlc2MgZGVzY3JpYmUgZGlzdGluY3QgZG8gZHJvcCBlYWNoIGVsZW1lbnQgJyArXG4gICAgICAgICAgICAnZWxzZSBlbmQgZXZlcnkgZXhjZXB0IGV4Y2x1ZGUgZXhlY3V0ZSBleGlzdHMgZXhwbGFpbiBmZXRjaCBmaXJzdCBmbGF0dGVuIGZvciBmb3JjZSBmcm9tICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIGdyYW50IGdyb3VwIGdzaSBoYXZpbmcgaWYgaWdub3JlIGlsaWtlIGluIGluY2x1ZGUgaW5jcmVtZW50IGluZGV4IGluZmVyIGlubGluZSBpbm5lciAnICtcbiAgICAgICAgICAgICdpbnNlcnQgaW50ZXJzZWN0IGludG8gaXMgam9pbiBrZXkga2V5cyBrZXlzcGFjZSBrbm93biBsYXN0IGxlZnQgbGV0IGxldHRpbmcgbGlrZSBsaW1pdCBsc20gbWFwICcgK1xuICAgICAgICAgICAgJ21hcHBpbmcgbWF0Y2hlZCBtYXRlcmlhbGl6ZWQgbWVyZ2UgbWludXMgbmFtZXNwYWNlIG5lc3Qgbm90IG51bWJlciBvYmplY3Qgb2Zmc2V0IG9uICcgK1xuICAgICAgICAgICAgJ29wdGlvbiBvciBvcmRlciBvdXRlciBvdmVyIHBhcnNlIHBhcnRpdGlvbiBwYXNzd29yZCBwYXRoIHBvb2wgcHJlcGFyZSBwcmltYXJ5IHByaXZhdGUgcHJpdmlsZWdlICcgK1xuICAgICAgICAgICAgJ3Byb2NlZHVyZSBwdWJsaWMgcmF3IHJlYWxtIHJlZHVjZSByZW5hbWUgcmV0dXJuIHJldHVybmluZyByZXZva2UgcmlnaHQgcm9sZSByb2xsYmFjayBzYXRpc2ZpZXMgJyArXG4gICAgICAgICAgICAnc2NoZW1hIHNlbGVjdCBzZWxmIHNlbWkgc2V0IHNob3cgc29tZSBzdGFydCBzdGF0aXN0aWNzIHN0cmluZyBzeXN0ZW0gdGhlbiB0byB0cmFuc2FjdGlvbiB0cmlnZ2VyICcgK1xuICAgICAgICAgICAgJ3RydW5jYXRlIHVuZGVyIHVuaW9uIHVuaXF1ZSB1bmtub3duIHVubmVzdCB1bnNldCB1cGRhdGUgdXBzZXJ0IHVzZSB1c2VyIHVzaW5nIHZhbGlkYXRlIHZhbHVlICcgK1xuICAgICAgICAgICAgJ3ZhbHVlZCB2YWx1ZXMgdmlhIHZpZXcgd2hlbiB3aGVyZSB3aGlsZSB3aXRoIHdpdGhpbiB3b3JrIHhvcicsXG4gICAgICAgICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvNC41L24xcWwvbjFxbC1sYW5ndWFnZS1yZWZlcmVuY2UvbGl0ZXJhbHMuaHRtbFxuICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAndHJ1ZSBmYWxzZSBudWxsIG1pc3Npbmd8NScsXG4gICAgICAgICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvNC41L24xcWwvbjFxbC1sYW5ndWFnZS1yZWZlcmVuY2UvZnVuY3Rpb25zLmh0bWxcbiAgICAgICAgICBidWlsdF9pbjpcbiAgICAgICAgICAgICdhcnJheV9hZ2cgYXJyYXlfYXBwZW5kIGFycmF5X2NvbmNhdCBhcnJheV9jb250YWlucyBhcnJheV9jb3VudCBhcnJheV9kaXN0aW5jdCBhcnJheV9pZm51bGwgYXJyYXlfbGVuZ3RoICcgK1xuICAgICAgICAgICAgJ2FycmF5X21heCBhcnJheV9taW4gYXJyYXlfcG9zaXRpb24gYXJyYXlfcHJlcGVuZCBhcnJheV9wdXQgYXJyYXlfcmFuZ2UgYXJyYXlfcmVtb3ZlIGFycmF5X3JlcGVhdCBhcnJheV9yZXBsYWNlICcgK1xuICAgICAgICAgICAgJ2FycmF5X3JldmVyc2UgYXJyYXlfc29ydCBhcnJheV9zdW0gYXZnIGNvdW50IG1heCBtaW4gc3VtIGdyZWF0ZXN0IGxlYXN0IGlmbWlzc2luZyBpZm1pc3Npbmdvcm51bGwgaWZudWxsICcgK1xuICAgICAgICAgICAgJ21pc3NpbmdpZiBudWxsaWYgaWZpbmYgaWZuYW4gaWZuYW5vcmluZiBuYW5pbmYgbmVnaW5maWYgcG9zaW5maWYgY2xvY2tfbWlsbGlzIGNsb2NrX3N0ciBkYXRlX2FkZF9taWxsaXMgJyArXG4gICAgICAgICAgICAnZGF0ZV9hZGRfc3RyIGRhdGVfZGlmZl9taWxsaXMgZGF0ZV9kaWZmX3N0ciBkYXRlX3BhcnRfbWlsbGlzIGRhdGVfcGFydF9zdHIgZGF0ZV90cnVuY19taWxsaXMgZGF0ZV90cnVuY19zdHIgJyArXG4gICAgICAgICAgICAnZHVyYXRpb25fdG9fc3RyIG1pbGxpcyBzdHJfdG9fbWlsbGlzIG1pbGxpc190b19zdHIgbWlsbGlzX3RvX3V0YyBtaWxsaXNfdG9fem9uZV9uYW1lIG5vd19taWxsaXMgbm93X3N0ciAnICtcbiAgICAgICAgICAgICdzdHJfdG9fZHVyYXRpb24gc3RyX3RvX3V0YyBzdHJfdG9fem9uZV9uYW1lIGRlY29kZV9qc29uIGVuY29kZV9qc29uIGVuY29kZWRfc2l6ZSBwb2x5X2xlbmd0aCBiYXNlNjQgYmFzZTY0X2VuY29kZSAnICtcbiAgICAgICAgICAgICdiYXNlNjRfZGVjb2RlIG1ldGEgdXVpZCBhYnMgYWNvcyBhc2luIGF0YW4gYXRhbjIgY2VpbCBjb3MgZGVncmVlcyBlIGV4cCBsbiBsb2cgZmxvb3IgcGkgcG93ZXIgcmFkaWFucyByYW5kb20gJyArXG4gICAgICAgICAgICAncm91bmQgc2lnbiBzaW4gc3FydCB0YW4gdHJ1bmMgb2JqZWN0X2xlbmd0aCBvYmplY3RfbmFtZXMgb2JqZWN0X3BhaXJzIG9iamVjdF9pbm5lcl9wYWlycyBvYmplY3RfdmFsdWVzICcgK1xuICAgICAgICAgICAgJ29iamVjdF9pbm5lcl92YWx1ZXMgb2JqZWN0X2FkZCBvYmplY3RfcHV0IG9iamVjdF9yZW1vdmUgb2JqZWN0X3Vud3JhcCByZWdleHBfY29udGFpbnMgcmVnZXhwX2xpa2UgcmVnZXhwX3Bvc2l0aW9uICcgK1xuICAgICAgICAgICAgJ3JlZ2V4cF9yZXBsYWNlIGNvbnRhaW5zIGluaXRjYXAgbGVuZ3RoIGxvd2VyIGx0cmltIHBvc2l0aW9uIHJlcGVhdCByZXBsYWNlIHJ0cmltIHNwbGl0IHN1YnN0ciB0aXRsZSB0cmltIHVwcGVyICcgK1xuICAgICAgICAgICAgJ2lzYXJyYXkgaXNhdG9tIGlzYm9vbGVhbiBpc251bWJlciBpc29iamVjdCBpc3N0cmluZyB0eXBlIHRvYXJyYXkgdG9hdG9tIHRvYm9vbGVhbiB0b251bWJlciB0b29iamVjdCB0b3N0cmluZydcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuMXFsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE5naW54IGNvbmZpZ1xuQXV0aG9yOiBQZXRlciBMZW9ub3YgPGdvanBlZ0B5YW5kZXgucnU+XG5Db250cmlidXRvcnM6IEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuQ2F0ZWdvcnk6IGNvbW1vbiwgY29uZmlnXG5XZWJzaXRlOiBodHRwczovL3d3dy5uZ2lueC5jb21cbiovXG5cbmZ1bmN0aW9uIG5naW54KGhsanMpIHtcbiAgY29uc3QgVkFSID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFxcZCsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgICAgIGVuZDogL1xcfS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvWyRAXS8gKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IERFRkFVTFQgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnW2Etei9fXSsnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ29uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0ICcgK1xuICAgICAgICAnc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCdcbiAgICB9LFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBpbGxlZ2FsOiAnPT4nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBWQVJcbiAgICAgICAgXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgICAgIGVuZDogL1wiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgIGVuZDogLycvXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gdGhpcyBzd2FsbG93cyBlbnRpcmUgVVJMcyB0byBhdm9pZCBkZXRlY3RpbmcgbnVtYmVycyB3aXRoaW5cbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoW2Etel0rKTovJyxcbiAgICAgICAgZW5kOiAnXFxcXHMnLFxuICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFsgVkFSIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFZBUlxuICAgICAgICBdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcIlxcXFxzXFxcXF5cIixcbiAgICAgICAgICAgIGVuZDogXCJcXFxcc3xcXFxce3w7XCIsXG4gICAgICAgICAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIHJlZ2V4cCBsb2NhdGlvbnMgKH4sIH4qKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcIn5cXFxcKj9cXFxccytcIixcbiAgICAgICAgICAgIGVuZDogXCJcXFxcc3xcXFxce3w7XCIsXG4gICAgICAgICAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vICouZXhhbXBsZS5jb21cbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogXCJcXFxcKihcXFxcLlthLXpcXFxcLV0rKStcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gc3ViLmV4YW1wbGUuKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcIihbYS16XFxcXC1dK1xcXFwuKStcXFxcKlwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gSVBcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYlxcXFxkezEsM31cXFxcLlxcXFxkezEsM31cXFxcLlxcXFxkezEsM31cXFxcLlxcXFxkezEsM30oOlxcXFxkezEsNX0pP1xcXFxiJ1xuICAgICAgfSxcbiAgICAgIC8vIHVuaXRzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCtba0ttTWdHZHNoZHd5XSpcXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdOZ2lueCBjb25maWcnLFxuICAgIGFsaWFzZXM6IFsgJ25naW54Y29uZicgXSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccytcXFxceycsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6IC9cXHsvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzJyxcbiAgICAgICAgZW5kOiAnO3xcXFxceycsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgc3RhcnRzOiBERUZBVUxUXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6ICdbXlxcXFxzXFxcXH1dJ1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5naW54O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE5pbVxuRGVzY3JpcHRpb246IE5pbSBpcyBhIHN0YXRpY2FsbHkgdHlwZWQgY29tcGlsZWQgc3lzdGVtcyBwcm9ncmFtbWluZyBsYW5ndWFnZS5cbldlYnNpdGU6IGh0dHBzOi8vbmltLWxhbmcub3JnXG5DYXRlZ29yeTogc3lzdGVtXG4qL1xuXG5mdW5jdGlvbiBuaW0oaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdOaW0nLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWRkciBhbmQgYXMgYXNtIGJpbmQgYmxvY2sgYnJlYWsgY2FzZSBjYXN0IGNvbnN0IGNvbnRpbnVlIGNvbnZlcnRlciAnICtcbiAgICAgICAgJ2Rpc2NhcmQgZGlzdGluY3QgZGl2IGRvIGVsaWYgZWxzZSBlbmQgZW51bSBleGNlcHQgZXhwb3J0IGZpbmFsbHkgJyArXG4gICAgICAgICdmb3IgZnJvbSBmdW5jIGdlbmVyaWMgaWYgaW1wb3J0IGluIGluY2x1ZGUgaW50ZXJmYWNlIGlzIGlzbm90IGl0ZXJhdG9yICcgK1xuICAgICAgICAnbGV0IG1hY3JvIG1ldGhvZCBtaXhpbiBtb2QgbmlsIG5vdCBub3RpbiBvYmplY3Qgb2Ygb3Igb3V0IHByb2MgcHRyICcgK1xuICAgICAgICAncmFpc2UgcmVmIHJldHVybiBzaGwgc2hyIHN0YXRpYyB0ZW1wbGF0ZSB0cnkgdHVwbGUgdHlwZSB1c2luZyB2YXIgJyArXG4gICAgICAgICd3aGVuIHdoaWxlIHdpdGggd2l0aG91dCB4b3IgeWllbGQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3NoYXJlZCBndWFyZGVkIHN0ZGluIHN0ZG91dCBzdGRlcnIgcmVzdWx0IHRydWUgZmFsc2UnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdpbnQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCB1aW50IHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGZsb2F0ICcgK1xuICAgICAgICAnZmxvYXQzMiBmbG9hdDY0IGJvb2wgY2hhciBzdHJpbmcgY3N0cmluZyBwb2ludGVyIGV4cHIgc3RtdCB2b2lkICcgK1xuICAgICAgICAnYXV0byBhbnkgcmFuZ2UgYXJyYXkgb3BlbmFycmF5IHZhcmFyZ3Mgc2VxIHNldCBjbG9uZyBjdWxvbmcgY2NoYXIgJyArXG4gICAgICAgICdjc2NoYXIgY3Nob3J0IGNpbnQgY3NpemUgY2xvbmdsb25nIGNmbG9hdCBjZG91YmxlIGNsb25nZG91YmxlICcgK1xuICAgICAgICAnY3VjaGFyIGN1c2hvcnQgY3VpbnQgY3Vsb25nbG9uZyBjc3RyaW5nYXJyYXkgc2VtaXN0YXRpYydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCAvLyBBY3R1YWxseSBwcmFnbWFcbiAgICAgICAgYmVnaW46IC9cXHtcXC4vLFxuICAgICAgICBlbmQ6IC9cXC5cXH0vLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogL1thLXpBLVpdXFx3KlwiLyxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXCJcIi9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvKFthLXpBLVpdXFx3Kik/XCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiL1xuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBiZWdpbjogL1xcYltBLVpdXFx3K1xcYi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKDBbeFhdWzAtOWEtZkEtRl1bXzAtOWEtZkEtRl0qKSgnP1tpSXVVXSg4fDE2fDMyfDY0KSk/L1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoMG9bMC03XVtfMC03XSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKDAoYnxCKVswMV1bXzAxXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFxcZFtfXFxkXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5pbTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBOaXhcbkF1dGhvcjogRG9tZW4gS2/FvmFyIDxkb21lbkBkZXYuc2k+XG5EZXNjcmlwdGlvbjogTml4IGZ1bmN0aW9uYWwgbGFuZ3VhZ2VcbldlYnNpdGU6IGh0dHA6Ly9uaXhvcy5vcmcvbml4XG4qL1xuXG5mdW5jdGlvbiBuaXgoaGxqcykge1xuICBjb25zdCBOSVhfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdyZWMgd2l0aCBsZXQgaW4gaW5oZXJpdCBhc3NlcnQgaWYgZWxzZSB0aGVuJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2Ugb3IgYW5kIG51bGwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2ltcG9ydCBhYm9ydCBiYXNlTmFtZU9mIGRpck9mIGlzTnVsbCBidWlsdGlucyBtYXAgcmVtb3ZlQXR0cnMgdGhyb3cgJyArXG4gICAgICAndG9TdHJpbmcgZGVyaXZhdGlvbidcbiAgfTtcbiAgY29uc3QgQU5USVFVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogTklYX0tFWVdPUkRTXG4gIH07XG4gIGNvbnN0IEFUVFJTID0ge1xuICAgIGJlZ2luOiAvW2EtekEtWjAtOS1fXSsoXFxzKj0pLyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxTKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbIEFOVElRVU9URSBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIicnXCIsXG4gICAgICAgIGVuZDogXCInJ1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBTVFJJTkcsXG4gICAgQVRUUlNcbiAgXTtcbiAgQU5USVFVT1RFLmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ05peCcsXG4gICAgYWxpYXNlczogWyBcIm5peG9zXCIgXSxcbiAgICBrZXl3b3JkczogTklYX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5peDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBOb2RlIFJFUExcblJlcXVpcmVzOiBqYXZhc2NyaXB0LmpzXG5BdXRob3I6IE1hcmF0IE5hZ2F5ZXYgPG5hZ2Fldm10QHlhbmRleC5ydT5cbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBub2RlUmVwbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ05vZGUgUkVQTCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIC8vIGEgc3BhY2Ugc2VwYXJhdGVzIHRoZSBSRVBMIHByZWZpeCBmcm9tIHRoZSBhY3R1YWwgY29kZVxuICAgICAgICAgIC8vIHRoaXMgaXMgcHVyZWx5IGZvciBjbGVhbmVyIEhUTUwgb3V0cHV0XG4gICAgICAgICAgZW5kOiAvIHwkLyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdqYXZhc2NyaXB0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL14+KD89WyBdfCQpL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9eXFwuXFwuXFwuKD89WyBdfCQpL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub2RlUmVwbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBOU0lTXG5EZXNjcmlwdGlvbjogTnVsbHNvZnQgU2NyaXB0YWJsZSBJbnN0YWxsIFN5c3RlbVxuQXV0aG9yOiBKYW4gVC4gU290dCA8amFuLnNvdHRAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9uc2lzLnNvdXJjZWZvcmdlLmlvL01haW5fUGFnZVxuKi9cblxuZnVuY3Rpb24gbnNpcyhobGpzKSB7XG4gIGNvbnN0IENPTlNUQU5UUyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCQoQURNSU5UT09MU3xBUFBEQVRBfENEQlVSTl9BUkVBfENNRExJTkV8Q09NTU9ORklMRVMzMnxDT01NT05GSUxFUzY0fENPTU1PTkZJTEVTfENPT0tJRVN8REVTS1RPUHxET0NVTUVOVFN8RVhFRElSfEVYRUZJTEV8RVhFUEFUSHxGQVZPUklURVN8Rk9OVFN8SElTVE9SWXxIV05EUEFSRU5UfElOU1RESVJ8SU5URVJORVRfQ0FDSEV8TEFOR1VBR0V8TE9DQUxBUFBEQVRBfE1VU0lDfE5FVEhPT0R8T1VURElSfFBJQ1RVUkVTfFBMVUdJTlNESVJ8UFJJTlRIT09EfFBST0ZJTEV8UFJPR1JBTUZJTEVTMzJ8UFJPR1JBTUZJTEVTNjR8UFJPR1JBTUZJTEVTfFFVSUNLTEFVTkNIfFJFQ0VOVHxSRVNPVVJDRVNfTE9DQUxJWkVEfFJFU09VUkNFU3xTRU5EVE98U01QUk9HUkFNU3xTTVNUQVJUVVB8U1RBUlRNRU5VfFNZU0RJUnxURU1QfFRFTVBMQVRFU3xWSURFT1N8V0lORElSKS9cbiAgfTtcblxuICBjb25zdCBERUZJTkVTID0ge1xuICAgIC8vICR7ZGVmaW5lc31cbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCQrXFx7W1xcdy46LV0rXFx9L1xuICB9O1xuXG4gIGNvbnN0IFZBUklBQkxFUyA9IHtcbiAgICAvLyAkdmFyaWFibGVzXG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkK1xcdysvLFxuICAgIGlsbGVnYWw6IC9cXChcXClcXHtcXH0vXG4gIH07XG5cbiAgY29uc3QgTEFOR1VBR0VTID0ge1xuICAgIC8vICQobGFuZ3VhZ2Vfc3RyaW5ncylcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCQrXFwoW1xcd14uOi1dK1xcKS9cbiAgfTtcblxuICBjb25zdCBQQVJBTUVURVJTID0ge1xuICAgIC8vIGNvbW1hbmQgcGFyYW1ldGVyc1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICcoQVJDSElWRXxGSUxFX0FUVFJJQlVURV9BUkNISVZFfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SEtDUnxIS0NVfEhLRER8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0RZTl9EQVRBfEhLRVlfTE9DQUxfTUFDSElORXxIS0VZX1BFUkZPUk1BTkNFX0RBVEF8SEtFWV9VU0VSU3xIS0xNfEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SURJR05PUkV8SUROT3xJRE9LfElEUkVUUll8SURZRVN8TUJfQUJPUlRSRVRSWUlHTk9SRXxNQl9ERUZCVVRUT04xfE1CX0RFRkJVVFRPTjJ8TUJfREVGQlVUVE9OM3xNQl9ERUZCVVRUT040fE1CX0lDT05FWENMQU1BVElPTnxNQl9JQ09OSU5GT1JNQVRJT058TUJfSUNPTlFVRVNUSU9OfE1CX0lDT05TVE9QfE1CX09LfE1CX09LQ0FOQ0VMfE1CX1JFVFJZQ0FOQ0VMfE1CX1JJR0hUfE1CX1JUTFJFQURJTkd8TUJfU0VURk9SRUdST1VORHxNQl9UT1BNT1NUfE1CX1VTRVJJQ09OfE1CX1lFU05PfE5PUk1BTHxPRkZMSU5FfFJFQURPTkxZfFNIQ1RYfFNIRUxMX0NPTlRFWFR8U1lTVEVNfFRFTVBPUkFSWSknXG4gIH07XG5cbiAgY29uc3QgQ09NUElMRVIgPSB7XG4gICAgLy8gIWNvbXBpbGVyX2ZsYWdzXG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC8hKGFkZGluY2x1ZGVkaXJ8YWRkcGx1Z2luZGlyfGFwcGVuZGZpbGV8Y2R8ZGVmaW5lfGRlbGZpbGV8ZWNob3xlbHNlfGVuZGlmfGVycm9yfGV4ZWN1dGV8ZmluYWxpemV8Z2V0ZGxsdmVyc2lvbnxnZXR0bGJ2ZXJzaW9ufGlmfGlmZGVmfGlmbWFjcm9kZWZ8aWZtYWNyb25kZWZ8aWZuZGVmfGluY2x1ZGV8aW5zZXJ0bWFjcm98bWFjcm98bWFjcm9lbmR8bWFrZW5zaXN8cGFja2hkcnxzZWFyY2hwYXJzZXxzZWFyY2hyZXBsYWNlfHN5c3RlbXx0ZW1wZmlsZXx1bmRlZnx2ZXJib3NlfHdhcm5pbmcpL1xuICB9O1xuXG4gIGNvbnN0IE1FVEFDSEFSUyA9IHtcbiAgICAvLyAkXFxuLCAkXFxyLCAkXFx0LCAkJFxuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvXFwkKFxcXFxbbnJ0XXxcXCQpL1xuICB9O1xuXG4gIGNvbnN0IFBMVUdJTlMgPSB7XG4gICAgLy8gcGx1Zzo6aW5zXG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luOiAvXFx3Kzo6XFx3Ky9cbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgIGVuZDogJ2AnXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAgTUVUQUNIQVJTLFxuICAgICAgQ09OU1RBTlRTLFxuICAgICAgREVGSU5FUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIExBTkdVQUdFU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdOU0lTJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICdBYm9ydCBBZGRCcmFuZGluZ0ltYWdlIEFkZFNpemUgQWxsb3dSb290RGlySW5zdGFsbCBBbGxvd1NraXBGaWxlcyBBdXRvQ2xvc2VXaW5kb3cgQkdGb250IEJHR3JhZGllbnQgQnJhbmRpbmdUZXh0IEJyaW5nVG9Gcm9udCBDYWxsIENhbGxJbnN0RExMIENhcHRpb24gQ2hhbmdlVUkgQ2hlY2tCaXRtYXAgQ2xlYXJFcnJvcnMgQ29tcGxldGVkVGV4dCBDb21wb25lbnRUZXh0IENvcHlGaWxlcyBDUkNDaGVjayBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRm9udCBDcmVhdGVTaG9ydEN1dCBEZWxldGUgRGVsZXRlSU5JU2VjIERlbGV0ZUlOSVN0ciBEZWxldGVSZWdLZXkgRGVsZXRlUmVnVmFsdWUgRGV0YWlsUHJpbnQgRGV0YWlsc0J1dHRvblRleHQgRGlyVGV4dCBEaXJWYXIgRGlyVmVyaWZ5IEVuYWJsZVdpbmRvdyBFbnVtUmVnS2V5IEVudW1SZWdWYWx1ZSBFeGNoIEV4ZWMgRXhlY1NoZWxsIEV4ZWNTaGVsbFdhaXQgRXhlY1dhaXQgRXhwYW5kRW52U3RyaW5ncyBGaWxlIEZpbGVCdWZTaXplIEZpbGVDbG9zZSBGaWxlRXJyb3JUZXh0IEZpbGVPcGVuIEZpbGVSZWFkIEZpbGVSZWFkQnl0ZSBGaWxlUmVhZFVURjE2TEUgRmlsZVJlYWRXb3JkIEZpbGVXcml0ZVVURjE2TEUgRmlsZVNlZWsgRmlsZVdyaXRlIEZpbGVXcml0ZUJ5dGUgRmlsZVdyaXRlV29yZCBGaW5kQ2xvc2UgRmluZEZpcnN0IEZpbmROZXh0IEZpbmRXaW5kb3cgRmx1c2hJTkkgR2V0Q3VySW5zdFR5cGUgR2V0Q3VycmVudEFkZHJlc3MgR2V0RGxnSXRlbSBHZXRETExWZXJzaW9uIEdldERMTFZlcnNpb25Mb2NhbCBHZXRFcnJvckxldmVsIEdldEZpbGVUaW1lIEdldEZpbGVUaW1lTG9jYWwgR2V0RnVsbFBhdGhOYW1lIEdldEZ1bmN0aW9uQWRkcmVzcyBHZXRJbnN0RGlyRXJyb3IgR2V0S25vd25Gb2xkZXJQYXRoIEdldExhYmVsQWRkcmVzcyBHZXRUZW1wRmlsZU5hbWUgR290byBIaWRlV2luZG93IEljb24gSWZBYm9ydCBJZkVycm9ycyBJZkZpbGVFeGlzdHMgSWZSZWJvb3RGbGFnIElmUnRsTGFuZ3VhZ2UgSWZTaGVsbFZhckNvbnRleHRBbGwgSWZTaWxlbnQgSW5pdFBsdWdpbnNEaXIgSW5zdGFsbEJ1dHRvblRleHQgSW5zdGFsbENvbG9ycyBJbnN0YWxsRGlyIEluc3RhbGxEaXJSZWdLZXkgSW5zdFByb2dyZXNzRmxhZ3MgSW5zdFR5cGUgSW5zdFR5cGVHZXRUZXh0IEluc3RUeXBlU2V0VGV4dCBJbnQ2NENtcCBJbnQ2NENtcFUgSW50NjRGbXQgSW50Q21wIEludENtcFUgSW50Rm10IEludE9wIEludFB0ckNtcCBJbnRQdHJDbXBVIEludFB0ck9wIElzV2luZG93IExhbmdTdHJpbmcgTGljZW5zZUJrQ29sb3IgTGljZW5zZURhdGEgTGljZW5zZUZvcmNlU2VsZWN0aW9uIExpY2Vuc2VMYW5nU3RyaW5nIExpY2Vuc2VUZXh0IExvYWRBbmRTZXRJbWFnZSBMb2FkTGFuZ3VhZ2VGaWxlIExvY2tXaW5kb3cgTG9nU2V0IExvZ1RleHQgTWFuaWZlc3REUElBd2FyZSBNYW5pZmVzdExvbmdQYXRoQXdhcmUgTWFuaWZlc3RNYXhWZXJzaW9uVGVzdGVkIE1hbmlmZXN0U3VwcG9ydGVkT1MgTWVzc2FnZUJveCBNaXNjQnV0dG9uVGV4dCBOYW1lIE5vcCBPdXRGaWxlIFBhZ2UgUGFnZUNhbGxiYWNrcyBQRUFkZFJlc291cmNlIFBFRGxsQ2hhcmFjdGVyaXN0aWNzIFBFUmVtb3ZlUmVzb3VyY2UgUEVTdWJzeXNWZXIgUG9wIFB1c2ggUXVpdCBSZWFkRW52U3RyIFJlYWRJTklTdHIgUmVhZFJlZ0RXT1JEIFJlYWRSZWdTdHIgUmVib290IFJlZ0RMTCBSZW5hbWUgUmVxdWVzdEV4ZWN1dGlvbkxldmVsIFJlc2VydmVGaWxlIFJldHVybiBSTURpciBTZWFyY2hQYXRoIFNlY3Rpb25HZXRGbGFncyBTZWN0aW9uR2V0SW5zdFR5cGVzIFNlY3Rpb25HZXRTaXplIFNlY3Rpb25HZXRUZXh0IFNlY3Rpb25JbiBTZWN0aW9uU2V0RmxhZ3MgU2VjdGlvblNldEluc3RUeXBlcyBTZWN0aW9uU2V0U2l6ZSBTZWN0aW9uU2V0VGV4dCBTZW5kTWVzc2FnZSBTZXRBdXRvQ2xvc2UgU2V0QnJhbmRpbmdJbWFnZSBTZXRDb21wcmVzcyBTZXRDb21wcmVzc29yIFNldENvbXByZXNzb3JEaWN0U2l6ZSBTZXRDdGxDb2xvcnMgU2V0Q3VySW5zdFR5cGUgU2V0RGF0YWJsb2NrT3B0aW1pemUgU2V0RGF0ZVNhdmUgU2V0RGV0YWlsc1ByaW50IFNldERldGFpbHNWaWV3IFNldEVycm9yTGV2ZWwgU2V0RXJyb3JzIFNldEZpbGVBdHRyaWJ1dGVzIFNldEZvbnQgU2V0T3V0UGF0aCBTZXRPdmVyd3JpdGUgU2V0UmVib290RmxhZyBTZXRSZWdWaWV3IFNldFNoZWxsVmFyQ29udGV4dCBTZXRTaWxlbnQgU2hvd0luc3REZXRhaWxzIFNob3dVbmluc3REZXRhaWxzIFNob3dXaW5kb3cgU2lsZW50SW5zdGFsbCBTaWxlbnRVbkluc3RhbGwgU2xlZXAgU3BhY2VUZXh0cyBTdHJDbXAgU3RyQ21wUyBTdHJDcHkgU3RyTGVuIFN1YkNhcHRpb24gVW5pY29kZSBVbmluc3RhbGxCdXR0b25UZXh0IFVuaW5zdGFsbENhcHRpb24gVW5pbnN0YWxsSWNvbiBVbmluc3RhbGxTdWJDYXB0aW9uIFVuaW5zdGFsbFRleHQgVW5pbnN0UGFnZSBVblJlZ0RMTCBWYXIgVklBZGRWZXJzaW9uS2V5IFZJRmlsZVZlcnNpb24gVklQcm9kdWN0VmVyc2lvbiBXaW5kb3dJY29uIFdyaXRlSU5JU3RyIFdyaXRlUmVnQmluIFdyaXRlUmVnRFdPUkQgV3JpdGVSZWdFeHBhbmRTdHIgV3JpdGVSZWdNdWx0aVN0ciBXcml0ZVJlZ05vbmUgV3JpdGVSZWdTdHIgV3JpdGVVbmluc3RhbGxlciBYUFN0eWxlJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAnYWRtaW4gYWxsIGF1dG8gYm90aCBib3R0b20gYnppcDIgY29sb3JlZCBjb21wb25lbnRzIGN1cnJlbnQgY3VzdG9tIGRpcmVjdG9yeSBmYWxzZSBmb3JjZSBoaWRlIGhpZ2hlc3QgaWZkaWZmIGlmbmV3ZXIgaW5zdGZpbGVzIGxhc3R1c2VkIGxlYXZlIGxlZnQgbGljZW5zZSBsaXN0b25seSBsem1hIG5ldmVyc2hvdyBub25lIG5vcm1hbCBub3RzZXQgb2ZmIG9uIG9wZW4gcHJpbnQgcmlnaHQgc2hvdyBzaWxlbnQgc2lsZW50bG9nIHNtb290aCB0ZXh0b25seSB0b3AgdHJ1ZSB0cnkgdW4uY29tcG9uZW50cyB1bi5jdXN0b20gdW4uZGlyZWN0b3J5IHVuLmluc3RmaWxlcyB1bi5saWNlbnNlIHVuaW5zdENvbmZpcm0gdXNlciBXaW4xMCBXaW43IFdpbjggV2luVmlzdGEgemxpYidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJzsnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnRnVuY3Rpb24gUGFnZUV4IFNlY3Rpb24gU2VjdGlvbkdyb3VwJyxcbiAgICAgICAgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01QSUxFUixcbiAgICAgIERFRklORVMsXG4gICAgICBWQVJJQUJMRVMsXG4gICAgICBMQU5HVUFHRVMsXG4gICAgICBQQVJBTUVURVJTLFxuICAgICAgUExVR0lOUyxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbnNpcztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBPYmplY3RpdmUtQ1xuQXV0aG9yOiBWYWxlcmlpIEhpb3JhIDx2YWxlcmlpLmhpb3JhQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogQW5nZWwgRy4gT2xsb3F1aSA8YW5nZWxnYXJjaWEubWFpbEBnbWFpbC5jb20+LCBNYXR0IERpZXBob3VzZSA8bWF0dEBkaWVwaG91c2UuY29tPiwgQW5kcmV3IEZhcm1lciA8YWhmYXJtZXJAZ21haWwuY29tPiwgTWluaCBOZ3V54buFbiA8bXhuQDFlYzUub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vb2JqZWN0aXZlY1xuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gb2JqZWN0aXZlYyhobGpzKSB7XG4gIGNvbnN0IEFQSV9DTEFTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICdcXFxcYihBVnxDQXxDRnxDR3xDSXxDTHxDTXxDTnxDVHxNS3xNUHxNVEt8TVRMfE5TfFNDTnxTS3xVSXxXS3xYQylcXFxcdysnXG4gIH07XG4gIGNvbnN0IElERU5USUZJRVJfUkUgPSAvW2EtekEtWkBdW2EtekEtWjAtOV9dKi87XG4gIGNvbnN0IE9CSkNfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IElERU5USUZJRVJfUkUsXG4gICAga2V5d29yZDpcbiAgICAgICdpbnQgZmxvYXQgd2hpbGUgY2hhciBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiAnICtcbiAgICAgICd1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBib29sIG11dGFibGUgaWYgZG8gcmV0dXJuIGdvdG8gdm9pZCAnICtcbiAgICAgICdlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIGFzbSBjYXNlIHNob3J0IGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0ICcgK1xuICAgICAgJ3NpZ25lZCB0eXBlbmFtZSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gJyArXG4gICAgICAncmVhZHdyaXRlIHNlbGYgQHN5bmNocm9uaXplZCBpZCB0eXBlb2YgJyArXG4gICAgICAnbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgSUJPdXRsZXQgSUJBY3Rpb24gc3Ryb25nIHdlYWsgY29weSAnICtcbiAgICAgICdpbiBvdXQgaW5vdXQgYnljb3B5IGJ5cmVmIG9uZXdheSBfX3N0cm9uZyBfX3dlYWsgX19ibG9jayBfX2F1dG9yZWxlYXNpbmcgJyArXG4gICAgICAnQHByaXZhdGUgQHByb3RlY3RlZCBAcHVibGljIEB0cnkgQHByb3BlcnR5IEBlbmQgQHRocm93IEBjYXRjaCBAZmluYWxseSAnICtcbiAgICAgICdAYXV0b3JlbGVhc2Vwb29sIEBzeW50aGVzaXplIEBkeW5hbWljIEBzZWxlY3RvciBAb3B0aW9uYWwgQHJlcXVpcmVkICcgK1xuICAgICAgJ0BlbmNvZGUgQHBhY2thZ2UgQGltcG9ydCBAZGVmcyBAY29tcGF0aWJpbGl0eV9hbGlhcyAnICtcbiAgICAgICdfX2JyaWRnZSBfX2JyaWRnZV90cmFuc2ZlciBfX2JyaWRnZV9yZXRhaW5lZCBfX2JyaWRnZV9yZXRhaW4gJyArXG4gICAgICAnX19jb3ZhcmlhbnQgX19jb250cmF2YXJpYW50IF9fa2luZG9mICcgK1xuICAgICAgJ19Ob25udWxsIF9OdWxsYWJsZSBfTnVsbF91bnNwZWNpZmllZCAnICtcbiAgICAgICdfX0ZVTkNUSU9OX18gX19QUkVUVFlfRlVOQ1RJT05fXyBfX2F0dHJpYnV0ZV9fICcgK1xuICAgICAgJ2dldHRlciBzZXR0ZXIgcmV0YWluIHVuc2FmZV91bnJldGFpbmVkICcgK1xuICAgICAgJ25vbm51bGwgbnVsbGFibGUgbnVsbF91bnNwZWNpZmllZCBudWxsX3Jlc2V0dGFibGUgY2xhc3MgaW5zdGFuY2V0eXBlICcgK1xuICAgICAgJ05TX0RFU0lHTkFURURfSU5JVElBTElaRVIgTlNfVU5BVkFJTEFCTEUgTlNfUkVRVUlSRVNfU1VQRVIgJyArXG4gICAgICAnTlNfUkVUVVJOU19JTk5FUl9QT0lOVEVSIE5TX0lOTElORSBOU19BVkFJTEFCTEUgTlNfREVQUkVDQVRFRCAnICtcbiAgICAgICdOU19FTlVNIE5TX09QVElPTlMgTlNfU1dJRlRfVU5BVkFJTEFCTEUgJyArXG4gICAgICAnTlNfQVNTVU1FX05PTk5VTExfQkVHSU4gTlNfQVNTVU1FX05PTk5VTExfRU5EICcgK1xuICAgICAgJ05TX1JFRklORURfRk9SX1NXSUZUIE5TX1NXSUZUX05BTUUgTlNfU1dJRlRfTk9USFJPVyAnICtcbiAgICAgICdOU19EVVJJTkcgTlNfSEFORExFUiBOU19FTkRIQU5ETEVSIE5TX1ZBTFVFUkVUVVJOIE5TX1ZPSURSRVRVUk4nLFxuICAgIGxpdGVyYWw6XG4gICAgICAnZmFsc2UgdHJ1ZSBGQUxTRSBUUlVFIG5pbCBZRVMgTk8gTlVMTCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnQk9PTCBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UnXG4gIH07XG4gIGNvbnN0IENMQVNTX0tFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiBJREVOVElGSUVSX1JFLFxuICAgIGtleXdvcmQ6ICdAaW50ZXJmYWNlIEBjbGFzcyBAcHJvdG9jb2wgQGltcGxlbWVudGF0aW9uJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdPYmplY3RpdmUtQycsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ21tJyxcbiAgICAgICdvYmpjJyxcbiAgICAgICdvYmotYycsXG4gICAgICAnb2JqLWMrKycsXG4gICAgICAnb2JqZWN0aXZlLWMrKydcbiAgICBdLFxuICAgIGtleXdvcmRzOiBPQkpDX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEFQSV9DTEFTUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnQFwiJyxcbiAgICAgICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvI1xccypbYS16XStcXGIvLFxuICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAnbWV0YS1rZXl3b3JkJzpcbiAgICAgICAgICAgICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSAnICtcbiAgICAgICAgICAgICdwcmFnbWEgaWZkZWYgaWZuZGVmIGluY2x1ZGUnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAvPC4qPz4vLFxuICAgICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnKCcgKyBDTEFTU19LRVlXT1JEUy5rZXl3b3JkLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIGVuZDogLyhcXHt8JCkvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogQ0xBU1NfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0aXZlYztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBPQ2FtbFxuQXV0aG9yOiBNZWhkaSBEb2dndXkgPG1laGRpQGRvZ2d1eS5vcmc+XG5Db250cmlidXRvcnM6IE5pY29sYXMgQnJhdWQtU2FudG9uaSA8bmljb2xhcy5icmF1ZC1zYW50b25pQGVucy1jYWNoYW4uZnI+LCBNaWNrYWVsIERlbGFoYXllIDxtaWNrYWVsLmRlbGFoYXllQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBPQ2FtbCBsYW5ndWFnZSBkZWZpbml0aW9uLlxuV2Vic2l0ZTogaHR0cHM6Ly9vY2FtbC5vcmdcbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG4qL1xuXG5mdW5jdGlvbiBvY2FtbChobGpzKSB7XG4gIC8qIG1pc3Npbmcgc3VwcG9ydCBmb3IgaGVyZWRvYy1saWtlIHN0cmluZyAoT0NhbWwgNC4wLjIrKSAqL1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdPQ2FtbCcsXG4gICAgYWxpYXNlczogWydtbCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogJ1thLXpfXVxcXFx3KiE/JyxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhbmQgYXMgYXNzZXJ0IGFzciBiZWdpbiBjbGFzcyBjb25zdHJhaW50IGRvIGRvbmUgZG93bnRvIGVsc2UgZW5kICcgK1xuICAgICAgICAnZXhjZXB0aW9uIGV4dGVybmFsIGZvciBmdW4gZnVuY3Rpb24gZnVuY3RvciBpZiBpbiBpbmNsdWRlICcgK1xuICAgICAgICAnaW5oZXJpdCEgaW5oZXJpdCBpbml0aWFsaXplciBsYW5kIGxhenkgbGV0IGxvciBsc2wgbHNyIGx4b3IgbWF0Y2ggbWV0aG9kIXwxMCBtZXRob2QgJyArXG4gICAgICAgICdtb2QgbW9kdWxlIG11dGFibGUgbmV3IG9iamVjdCBvZiBvcGVuISBvcGVuIG9yIHByaXZhdGUgcmVjIHNpZyBzdHJ1Y3QgJyArXG4gICAgICAgICd0aGVuIHRvIHRyeSB0eXBlIHZhbCEgdmFsIHZpcnR1YWwgd2hlbiB3aGlsZSB3aXRoICcgK1xuICAgICAgICAvKiBjYW1scDQgKi9cbiAgICAgICAgJ3BhcnNlciB2YWx1ZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogYnVpbHQtaW4gdHlwZXMgKi9cbiAgICAgICAgJ2FycmF5IGJvb2wgYnl0ZXMgY2hhciBleG58NSBmbG9hdCBpbnQgaW50MzIgaW50NjQgbGlzdCBsYXp5X3R8NSBuYXRpdmVpbnR8NSBzdHJpbmcgdW5pdCAnICtcbiAgICAgICAgLyogKHNvbWUpIHR5cGVzIGluIFBlcnZhc2l2ZXMgKi9cbiAgICAgICAgJ2luX2NoYW5uZWwgb3V0X2NoYW5uZWwgcmVmJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgaWxsZWdhbDogL1xcL1xcL3w+Pi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXFsoXFxcXHxcXFxcfCk/XFxcXF18XFxcXChcXFxcKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcXFwoXFxcXConLFxuICAgICAgICAnXFxcXCpcXFxcKScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcqL1xuICAgICAgICBiZWdpbjogJ1thLXpfXVxcXFx3KlxcJ1tcXFxcd1xcJ10qJywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98JyArXG4gICAgICAgICAgJzBbb09dWzAtN19dK1tMbG5dP3wnICtcbiAgICAgICAgICAnMFtiQl1bMDFfXStbTGxuXT98JyArXG4gICAgICAgICAgJ1swLTldWzAtOV9dKihbTGxuXXwoXFxcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLy0+LyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfVxuICAgIF1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9jYW1sO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE9wZW5TQ0FEXG5BdXRob3I6IERhbiBQYW56YXJlbGxhIDxhbHNvZWxwQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBPcGVuU0NBRCBpcyBhIGxhbmd1YWdlIGZvciB0aGUgM0QgQ0FEIG1vZGVsaW5nIHNvZnR3YXJlIG9mIHRoZSBzYW1lIG5hbWUuXG5XZWJzaXRlOiBodHRwczovL3d3dy5vcGVuc2NhZC5vcmdcbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG5mdW5jdGlvbiBvcGVuc2NhZChobGpzKSB7XG4gIGNvbnN0IFNQRUNJQUxfVkFSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogJ1xcXFwkKGZbYXNuXXx0fHZwW3J0ZF18Y2hpbGRyZW4pJ1xuICB9O1xuICBjb25zdCBMSVRFUkFMUyA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogJ2ZhbHNlfHRydWV8UEl8dW5kZWYnXG4gIH07XG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8oZS0/XFxcXGQrKT8nLCAvLyBhZGRzIDFlNSwgMWUtMTBcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICBpbGxlZ2FsOiBudWxsXG4gIH0pO1xuICBjb25zdCBQUkVQUk8gPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSB1c2UnXG4gICAgfSxcbiAgICBiZWdpbjogJ2luY2x1ZGV8dXNlIDwnLFxuICAgIGVuZDogJz4nXG4gIH07XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogW1xuICAgICAgJ3NlbGYnLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklORyxcbiAgICAgIFNQRUNJQUxfVkFSUyxcbiAgICAgIExJVEVSQUxTXG4gICAgXVxuICB9O1xuICBjb25zdCBNT0RJRklFUlMgPSB7XG4gICAgYmVnaW46ICdbKiEjJV0nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBGVU5DVElPTlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdtb2R1bGUgZnVuY3Rpb24nLFxuICAgIGVuZDogLz18XFx7LyxcbiAgICBjb250YWluczogW1xuICAgICAgUEFSQU1TLFxuICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnT3BlblNDQUQnLFxuICAgIGFsaWFzZXM6IFsgJ3NjYWQnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdmdW5jdGlvbiBtb2R1bGUgaW5jbHVkZSB1c2UgZm9yIGludGVyc2VjdGlvbl9mb3IgaWYgZWxzZSBcXFxcJScsXG4gICAgICBsaXRlcmFsOiAnZmFsc2UgdHJ1ZSBQSSB1bmRlZicsXG4gICAgICBidWlsdF9pbjogJ2NpcmNsZSBzcXVhcmUgcG9seWdvbiB0ZXh0IHNwaGVyZSBjdWJlIGN5bGluZGVyIHBvbHloZWRyb24gdHJhbnNsYXRlIHJvdGF0ZSBzY2FsZSByZXNpemUgbWlycm9yIG11bHRtYXRyaXggY29sb3Igb2Zmc2V0IGh1bGwgbWlua293c2tpIHVuaW9uIGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIGFicyBzaWduIHNpbiBjb3MgdGFuIGFjb3MgYXNpbiBhdGFuIGF0YW4yIGZsb29yIHJvdW5kIGNlaWwgbG4gbG9nIHBvdyBzcXJ0IGV4cCByYW5kcyBtaW4gbWF4IGNvbmNhdCBsb29rdXAgc3RyIGNociBzZWFyY2ggdmVyc2lvbiB2ZXJzaW9uX251bSBub3JtIGNyb3NzIHBhcmVudF9tb2R1bGUgZWNobyBpbXBvcnQgaW1wb3J0X2R4ZiBkeGZfbGluZWFyX2V4dHJ1ZGUgbGluZWFyX2V4dHJ1ZGUgcm90YXRlX2V4dHJ1ZGUgc3VyZmFjZSBwcm9qZWN0aW9uIHJlbmRlciBjaGlsZHJlbiBkeGZfY3Jvc3MgZHhmX2RpbSBsZXQgYXNzaWduJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1CRVJTLFxuICAgICAgUFJFUFJPLFxuICAgICAgU1RSSU5HLFxuICAgICAgU1BFQ0lBTF9WQVJTLFxuICAgICAgTU9ESUZJRVJTLFxuICAgICAgRlVOQ1RJT05TXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9wZW5zY2FkO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE94eWdlbmVcbkF1dGhvcjogQ2FybG8gS29rIDxja0ByZW1vYmplY3RzLmNvbT5cbkRlc2NyaXB0aW9uOiBPeHlnZW5lIGlzIGJ1aWx0IG9uIHRoZSBmb3VuZGF0aW9uIG9mIE9iamVjdCBQYXNjYWwsIHJldmFtcGVkIGFuZCBleHRlbmRlZCB0byBiZSBhIG1vZGVybiBsYW5ndWFnZSBmb3IgdGhlIHR3ZW50eS1maXJzdCBjZW50dXJ5LlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZWxlbWVudHNjb21waWxlci5jb20vZWxlbWVudHMvZGVmYXVsdC5hc3B4XG4qL1xuXG5mdW5jdGlvbiBveHlnZW5lKGhsanMpIHtcbiAgY29uc3QgT1hZR0VORV9LRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogL1xcLj9cXHcrLyxcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFkZCBhbmQgYXJyYXkgYXMgYXNjIGFzcGVjdCBhc3NlbWJseSBhc3luYyBiZWdpbiBicmVhayBibG9jayBieSBjYXNlIGNsYXNzIGNvbmNhdCBjb25zdCBjb3B5IGNvbnN0cnVjdG9yIGNvbnRpbnVlICcgK1xuICAgICAgJ2NyZWF0ZSBkZWZhdWx0IGRlbGVnYXRlIGRlc2MgZGlzdGluY3QgZGl2IGRvIGRvd250byBkeW5hbWljIGVhY2ggZWxzZSBlbXB0eSBlbmQgZW5zdXJlIGVudW0gZXF1YWxzIGV2ZW50IGV4Y2VwdCBleGl0IGV4dGVuc2lvbiBleHRlcm5hbCBmYWxzZSAnICtcbiAgICAgICdmaW5hbCBmaW5hbGl6ZSBmaW5hbGl6ZXIgZmluYWxseSBmbGFncyBmb3IgZm9yd2FyZCBmcm9tIGZ1bmN0aW9uIGZ1dHVyZSBnbG9iYWwgZ3JvdXAgaGFzIGlmIGltcGxlbWVudGF0aW9uIGltcGxlbWVudHMgaW1wbGllcyBpbiBpbmRleCBpbmhlcml0ZWQgJyArXG4gICAgICAnaW5saW5lIGludGVyZmFjZSBpbnRvIGludmFyaWFudHMgaXMgaXRlcmF0b3Igam9pbiBsb2NrZWQgbG9ja2luZyBsb29wIG1hdGNoaW5nIG1ldGhvZCBtb2QgbW9kdWxlIG5hbWVzcGFjZSBuZXN0ZWQgbmV3IG5pbCBub3Qgbm90aWZ5IG51bGxhYmxlIG9mICcgK1xuICAgICAgJ29sZCBvbiBvcGVyYXRvciBvciBvcmRlciBvdXQgb3ZlcnJpZGUgcGFyYWxsZWwgcGFyYW1zIHBhcnRpYWwgcGlubmVkIHByaXZhdGUgcHJvY2VkdXJlIHByb3BlcnR5IHByb3RlY3RlZCBwdWJsaWMgcXVlcnlhYmxlIHJhaXNlIHJlYWQgcmVhZG9ubHkgJyArXG4gICAgICAncmVjb3JkIHJlaW50cm9kdWNlIHJlbW92ZSByZXBlYXQgcmVxdWlyZSByZXN1bHQgcmV2ZXJzZSBzZWFsZWQgc2VsZWN0IHNlbGYgc2VxdWVuY2Ugc2V0IHNobCBzaHIgc2tpcCBzdGF0aWMgc3RlcCBzb2Z0IHRha2UgdGhlbiB0byB0cnVlIHRyeSB0dXBsZSAnICtcbiAgICAgICd0eXBlIHVuaW9uIHVuaXQgdW5zYWZlIHVudGlsIHVzZXMgdXNpbmcgdmFyIHZpcnR1YWwgcmFpc2VzIHZvbGF0aWxlIHdoZXJlIHdoaWxlIHdpdGggd3JpdGUgeG9yIHlpZWxkIGF3YWl0IG1hcHBlZCBkZXByZWNhdGVkIHN0ZGNhbGwgY2RlY2wgcGFzY2FsICcgK1xuICAgICAgJ3JlZ2lzdGVyIHNhZmVjYWxsIG92ZXJsb2FkIGxpYnJhcnkgcGxhdGZvcm0gcmVmZXJlbmNlIHBhY2tlZCBzdHJpY3QgcHVibGlzaGVkIGF1dG9yZWxlYXNlcG9vbCBzZWxlY3RvciBzdHJvbmcgd2VhayB1bnJldGFpbmVkJ1xuICB9O1xuICBjb25zdCBDVVJMWV9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9cXHsvLFxuICAgIC9cXH0vLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgY29uc3QgUEFSRU5fQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAnXFxcXChcXFxcKicsXG4gICAgJ1xcXFwqXFxcXCknLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9XG4gICk7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJyxcbiAgICBlbmQ6ICdcXCcnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFwnJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJygjXFxcXGQrKSsnXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24gY29uc3RydWN0b3IgZGVzdHJ1Y3RvciBwcm9jZWR1cmUgbWV0aG9kJyxcbiAgICBlbmQ6ICdbOjtdJyxcbiAgICBrZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yfDEwIGRlc3RydWN0b3J8MTAgcHJvY2VkdXJlfDEwIG1ldGhvZHwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAga2V5d29yZHM6IE9YWUdFTkVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgIENIQVJfU1RSSU5HXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBDVVJMWV9DT01NRU5ULFxuICAgICAgUEFSRU5fQ09NTUVOVFxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnT3h5Z2VuZScsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnKFwifFxcXFwkW0ctWmctel18XFxcXC9cXFxcKnw8L3w9PnwtPiknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDVVJMWV9DT01NRU5ULFxuICAgICAgUEFSRU5fQ09NTUVOVCxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIFNUUklORyxcbiAgICAgIENIQVJfU1RSSU5HLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnPVxcXFxiY2xhc3NcXFxcYicsXG4gICAgICAgIGVuZDogJ2VuZDsnLFxuICAgICAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgQ0hBUl9TVFJJTkcsXG4gICAgICAgICAgQ1VSTFlfQ09NTUVOVCxcbiAgICAgICAgICBQQVJFTl9DT01NRU5ULFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBGVU5DVElPTlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG94eWdlbmU7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUGFyc2VyM1xuUmVxdWlyZXM6IHhtbC5qc1xuQXV0aG9yOiBPbGVnIFZvbGNoa292IDxvbGVnQHZvbGNoa292Lm5ldD5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBhcnNlci5ydS9lbi9cbkNhdGVnb3J5OiB0ZW1wbGF0ZVxuKi9cblxuZnVuY3Rpb24gcGFyc2VyMyhobGpzKSB7XG4gIGNvbnN0IENVUkxZX1NVQkNPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgL1xcey8sXG4gICAgL1xcfS8sXG4gICAge1xuICAgICAgY29udGFpbnM6IFsgJ3NlbGYnIF1cbiAgICB9XG4gICk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1BhcnNlcjMnLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnXiMnLCAnJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvXFxecmVtXFx7LyxcbiAgICAgICAgL1xcfS8sXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbIENVUkxZX1NVQkNPTU1FTlQgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeQCg/OkJBU0V8VVNFfENMQVNTfE9QVElPTlMpJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdAW1xcXFx3XFxcXC1dK1xcXFxbW1xcXFx3XjtcXFxcLV0qXFxcXF0oPzpcXFxcW1tcXFxcd147XFxcXC1dKlxcXFxdKT8oPzouKikkJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFxcez9bXFx3XFwtLjpdK1xcfT8vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46IC9cXF5bXFx3XFwtLjpdKy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXF4jWzAtOWEtZkEtRl0rJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZXIzO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFBhY2tldCBGaWx0ZXIgY29uZmlnXG5EZXNjcmlwdGlvbjogcGYuY29uZiDigJQgcGFja2V0IGZpbHRlciBjb25maWd1cmF0aW9uIGZpbGUgKE9wZW5CU0QpXG5BdXRob3I6IFBldGVyIFBpd293YXJza2kgPG9sZGxhcHRvcDY1NEBhb2wuY29tPlxuV2Vic2l0ZTogaHR0cDovL21hbi5vcGVuYnNkLm9yZy9wZi5jb25mXG5DYXRlZ29yeTogY29uZmlnXG4qL1xuXG5mdW5jdGlvbiBwZihobGpzKSB7XG4gIGNvbnN0IE1BQ1JPID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL1xuICB9O1xuICBjb25zdCBUQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC88KD8hXFwvKS8sXG4gICAgZW5kOiAvPi9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQYWNrZXQgRmlsdGVyIGNvbmZpZycsXG4gICAgYWxpYXNlczogWyAncGYuY29uZicgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9bYS16MC05Xzw+LV0rLyxcbiAgICAgIGJ1aWx0X2luOiAvKiBibG9jayBtYXRjaCBwYXNzIGFyZSBcImFjdGlvbnNcIiBpbiBwZi5jb25mKDUpLCB0aGUgcmVzdCBhcmVcbiAgICAgICAgICAgICAgICAgKiBsZXhpY2FsbHkgc2ltaWxhciB0b3AtbGV2ZWwgY29tbWFuZHMuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICdibG9jayBtYXRjaCBwYXNzIGxvYWQgYW5jaG9yfDUgYW50aXNwb29mfDEwIHNldCB0YWJsZScsXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnaW4gb3V0IGxvZyBxdWljayBvbiByZG9tYWluIGluZXQgaW5ldDYgcHJvdG8gZnJvbSBwb3J0IG9zIHRvIHJvdXRlICcgK1xuICAgICAgICAnYWxsb3ctb3B0cyBkaXZlcnQtcGFja2V0IGRpdmVydC1yZXBseSBkaXZlcnQtdG8gZmxhZ3MgZ3JvdXAgaWNtcC10eXBlICcgK1xuICAgICAgICAnaWNtcDYtdHlwZSBsYWJlbCBvbmNlIHByb2JhYmlsaXR5IHJlY2lldmVkLW9uIHJ0YWJsZSBwcmlvIHF1ZXVlICcgK1xuICAgICAgICAndG9zIHRhZyB0YWdnZWQgdXNlciBrZWVwIGZyYWdtZW50IGZvciBvcyBkcm9wICcgK1xuICAgICAgICAnYWYtdG98MTAgYmluYXQtdG98MTAgbmF0LXRvfDEwIHJkci10b3wxMCBiaXRtYXNrIGxlYXN0LXN0YXRzIHJhbmRvbSByb3VuZC1yb2JpbiAnICtcbiAgICAgICAgJ3NvdXJjZS1oYXNoIHN0YXRpYy1wb3J0ICcgK1xuICAgICAgICAnZHVwLXRvIHJlcGx5LXRvIHJvdXRlLXRvICcgK1xuICAgICAgICAncGFyZW50IGJhbmR3aWR0aCBkZWZhdWx0IG1pbiBtYXggcWxpbWl0ICcgK1xuICAgICAgICAnYmxvY2stcG9saWN5IGRlYnVnIGZpbmdlcnByaW50cyBob3N0aWQgbGltaXQgbG9naW50ZXJmYWNlIG9wdGltaXphdGlvbiAnICtcbiAgICAgICAgJ3JlYXNzZW1ibGUgcnVsZXNldC1vcHRpbWl6YXRpb24gYmFzaWMgbm9uZSBwcm9maWxlIHNraXAgc3RhdGUtZGVmYXVsdHMgJyArXG4gICAgICAgICdzdGF0ZS1wb2xpY3kgdGltZW91dCAnICtcbiAgICAgICAgJ2NvbnN0IGNvdW50ZXJzIHBlcnNpc3QgJyArXG4gICAgICAgICdubyBtb2R1bGF0ZSBzeW5wcm94eSBzdGF0ZXw1IGZsb2F0aW5nIGlmLWJvdW5kIG5vLXN5bmMgcGZsb3d8MTAgc2xvcHB5ICcgK1xuICAgICAgICAnc291cmNlLXRyYWNrIGdsb2JhbCBydWxlIG1heC1zcmMtbm9kZXMgbWF4LXNyYy1zdGF0ZXMgbWF4LXNyYy1jb25uICcgK1xuICAgICAgICAnbWF4LXNyYy1jb25uLXJhdGUgb3ZlcmxvYWQgZmx1c2ggJyArXG4gICAgICAgICdzY3J1Ynw1IG1heC1tc3MgbWluLXR0bCBuby1kZnwxMCByYW5kb20taWQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ2FsbCBhbnkgbm8tcm91dGUgc2VsZiB1cnBmLWZhaWxlZCBlZ3Jlc3N8NSB1bmtub3duJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIE1BQ1JPLFxuICAgICAgVEFCTEVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGY7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUG9zdGdyZVNRTCBhbmQgUEwvcGdTUUxcbkF1dGhvcjogRWdvciBSb2dvdiAoZS5yb2dvdkBwb3N0Z3Jlc3Byby5ydSlcbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3FsLmh0bWxcbkRlc2NyaXB0aW9uOlxuICAgIFRoaXMgbGFuZ3VhZ2UgaW5jb3Jwb3JhdGVzIGJvdGggUG9zdGdyZVNRTCBTUUwgZGlhbGVjdCBhbmQgUEwvcGdTUUwgbGFuZ3VhZ2UuXG4gICAgSXQgaXMgYmFzZWQgb24gUG9zdGdyZVNRTCB2ZXJzaW9uIDExLiBTb21lIG5vdGVzOlxuICAgIC0gVGV4dCBpbiBkb3VibGUtZG9sbGFyLXN0cmluZ3MgaXMgX2Fsd2F5c18gaW50ZXJwcmV0ZWQgYXMgc29tZSBwcm9ncmFtbWluZyBjb2RlLiBUZXh0XG4gICAgICBpbiBvcmRpbmFyeSBxdW90ZXMgaXMgX25ldmVyXyBpbnRlcnByZXRlZCB0aGF0IHdheSBhbmQgaGlnaGxpZ2h0ZWQganVzdCBhcyBhIHN0cmluZy5cbiAgICAtIFRoZXJlIGFyZSBxdWl0ZSBhIGJpdCBcInNwZWNpYWwgY2FzZXNcIi4gVGhhdCdzIGJlY2F1c2UgbWFueSBrZXl3b3JkcyBhcmUgbm90IHN0cmljdGx5XG4gICAgICB0aGV5IGFyZSBrZXl3b3JkcyBpbiBzb21lIGNvbnRleHRzIGFuZCBvcmRpbmFyeSBpZGVudGlmaWVycyBpbiBvdGhlcnMuIE9ubHkgc29tZVxuICAgICAgb2Ygc3VjaCBjYXNlcyBhcmUgaGFuZGxlZDsgeW91IHN0aWxsIGNhbiBnZXQgc29tZSBvZiB5b3VyIGlkZW50aWZpZXJzIGhpZ2hsaWdodGVkXG4gICAgICB3cm9uZyB3YXkuXG4gICAgLSBGdW5jdGlvbiBuYW1lcyBkZWxpYmVyYXRlbHkgYXJlIG5vdCBoaWdobGlnaHRlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgZnVuY3Rpb25cbiAgICAgIGNhbGwgZnJvbSBvdGhlciBjb25zdHJ1Y3RzLCBoZW5jZSB3ZSBjYW4ndCBoaWdobGlnaHQgX2FsbF8gZnVuY3Rpb24gbmFtZXMuIEFuZFxuICAgICAgc29tZSBuYW1lcyBoaWdobGlnaHRlZCB3aGlsZSBvdGhlcnMgbm90IGxvb2tzIHVnbHkuXG4qL1xuXG5mdW5jdGlvbiBwZ3NxbChobGpzKSB7XG4gIGNvbnN0IENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICBjb25zdCBVTlFVT1RFRF9JREVOVCA9ICdbYS16QS1aX11bYS16QS1aXzAtOSRdKic7XG4gIGNvbnN0IERPTExBUl9TVFJJTkcgPSAnXFxcXCQoW2EtekEtWl9dP3xbYS16QS1aX11bYS16QS1aXzAtOV0qKVxcXFwkJztcbiAgY29uc3QgTEFCRUwgPSAnPDxcXFxccyonICsgVU5RVU9URURfSURFTlQgKyAnXFxcXHMqPj4nO1xuXG4gIGNvbnN0IFNRTF9LVyA9XG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvc3FsLWtleXdvcmRzLWFwcGVuZGl4Lmh0bWxcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9zcWwtY29tbWFuZHMuaHRtbFxuICAgIC8vIFNRTCBjb21tYW5kcyAoc3RhcnRpbmcgd29yZHMpXG4gICAgJ0FCT1JUIEFMVEVSIEFOQUxZWkUgQkVHSU4gQ0FMTCBDSEVDS1BPSU5UfDEwIENMT1NFIENMVVNURVIgQ09NTUVOVCBDT01NSVQgQ09QWSBDUkVBVEUgREVBTExPQ0FURSBERUNMQVJFICcgK1xuICAgICdERUxFVEUgRElTQ0FSRCBETyBEUk9QIEVORCBFWEVDVVRFIEVYUExBSU4gRkVUQ0ggR1JBTlQgSU1QT1JUIElOU0VSVCBMSVNURU4gTE9BRCBMT0NLIE1PVkUgTk9USUZZICcgK1xuICAgICdQUkVQQVJFIFJFQVNTSUdOfDEwIFJFRlJFU0ggUkVJTkRFWCBSRUxFQVNFIFJFU0VUIFJFVk9LRSBST0xMQkFDSyBTQVZFUE9JTlQgU0VDVVJJVFkgU0VMRUNUIFNFVCBTSE9XICcgK1xuICAgICdTVEFSVCBUUlVOQ0FURSBVTkxJU1RFTnwxMCBVUERBVEUgVkFDVVVNfDEwIFZBTFVFUyAnICtcbiAgICAvLyBTUUwgY29tbWFuZHMgKG90aGVycylcbiAgICAnQUdHUkVHQVRFIENPTExBVElPTiBDT05WRVJTSU9OfDEwIERBVEFCQVNFIERFRkFVTFQgUFJJVklMRUdFUyBET01BSU4gVFJJR0dFUiBFWFRFTlNJT04gRk9SRUlHTiAnICtcbiAgICAnV1JBUFBFUnwxMCBUQUJMRSBGVU5DVElPTiBHUk9VUCBMQU5HVUFHRSBMQVJHRSBPQkpFQ1QgTUFURVJJQUxJWkVEIFZJRVcgT1BFUkFUT1IgQ0xBU1MgJyArXG4gICAgJ0ZBTUlMWSBQT0xJQ1kgUFVCTElDQVRJT058MTAgUk9MRSBSVUxFIFNDSEVNQSBTRVFVRU5DRSBTRVJWRVIgU1RBVElTVElDUyBTVUJTQ1JJUFRJT04gU1lTVEVNICcgK1xuICAgICdUQUJMRVNQQUNFIENPTkZJR1VSQVRJT04gRElDVElPTkFSWSBQQVJTRVIgVEVNUExBVEUgVFlQRSBVU0VSIE1BUFBJTkcgUFJFUEFSRUQgQUNDRVNTICcgK1xuICAgICdNRVRIT0QgQ0FTVCBBUyBUUkFOU0ZPUk0gVFJBTlNBQ1RJT04gT1dORUQgVE8gSU5UTyBTRVNTSU9OIEFVVEhPUklaQVRJT04gJyArXG4gICAgJ0lOREVYIFBST0NFRFVSRSBBU1NFUlRJT04gJyArXG4gICAgLy8gYWRkaXRpb25hbCByZXNlcnZlZCBrZXkgd29yZHNcbiAgICAnQUxMIEFOQUxZU0UgQU5EIEFOWSBBUlJBWSBBU0MgQVNZTU1FVFJJQ3wxMCBCT1RIIENBU0UgQ0hFQ0sgJyArXG4gICAgJ0NPTExBVEUgQ09MVU1OIENPTkNVUlJFTlRMWXwxMCBDT05TVFJBSU5UIENST1NTICcgK1xuICAgICdERUZFUlJBQkxFIFJBTkdFICcgK1xuICAgICdERVNDIERJU1RJTkNUIEVMU0UgRVhDRVBUIEZPUiBGUkVFWkV8MTAgRlJPTSBGVUxMIEhBVklORyAnICtcbiAgICAnSUxJS0UgSU4gSU5JVElBTExZIElOTkVSIElOVEVSU0VDVCBJUyBJU05VTEwgSk9JTiBMQVRFUkFMIExFQURJTkcgTElLRSBMSU1JVCAnICtcbiAgICAnTkFUVVJBTCBOT1QgTk9UTlVMTCBOVUxMIE9GRlNFVCBPTiBPTkxZIE9SIE9SREVSIE9VVEVSIE9WRVJMQVBTIFBMQUNJTkcgUFJJTUFSWSAnICtcbiAgICAnUkVGRVJFTkNFUyBSRVRVUk5JTkcgU0lNSUxBUiBTT01FIFNZTU1FVFJJQyBUQUJMRVNBTVBMRSBUSEVOICcgK1xuICAgICdUUkFJTElORyBVTklPTiBVTklRVUUgVVNJTkcgVkFSSUFESUN8MTAgVkVSQk9TRSBXSEVOIFdIRVJFIFdJTkRPVyBXSVRIICcgK1xuICAgIC8vIHNvbWUgb2Ygbm9uLXJlc2VydmVkICh3aGljaCBhcmUgdXNlZCBpbiBjbGF1c2VzIG9yIGFzIFBML3BnU1FMIGtleXdvcmQpXG4gICAgJ0JZIFJFVFVSTlMgSU5PVVQgT1VUIFNFVE9GfDEwIElGIFNUUklDVCBDVVJSRU5UIENPTlRJTlVFIE9XTkVSIExPQ0FUSU9OIE9WRVIgUEFSVElUSU9OIFdJVEhJTiAnICtcbiAgICAnQkVUV0VFTiBFU0NBUEUgRVhURVJOQUwgSU5WT0tFUiBERUZJTkVSIFdPUksgUkVOQU1FIFZFUlNJT04gQ09OTkVDVElPTiBDT05ORUNUICcgK1xuICAgICdUQUJMRVMgVEVNUCBURU1QT1JBUlkgRlVOQ1RJT05TIFNFUVVFTkNFUyBUWVBFUyBTQ0hFTUFTIE9QVElPTiBDQVNDQURFIFJFU1RSSUNUIEFERCBBRE1JTiAnICtcbiAgICAnRVhJU1RTIFZBTElEIFZBTElEQVRFIEVOQUJMRSBESVNBQkxFIFJFUExJQ0F8MTAgQUxXQVlTIFBBU1NJTkcgQ09MVU1OUyBQQVRIICcgK1xuICAgICdSRUYgVkFMVUUgT1ZFUlJJRElORyBJTU1VVEFCTEUgU1RBQkxFIFZPTEFUSUxFIEJFRk9SRSBBRlRFUiBFQUNIIFJPVyBQUk9DRURVUkFMICcgK1xuICAgICdST1VUSU5FIE5PIEhBTkRMRVIgVkFMSURBVE9SIE9QVElPTlMgU1RPUkFHRSBPSURTfDEwIFdJVEhPVVQgSU5IRVJJVCBERVBFTkRTIENBTExFRCAnICtcbiAgICAnSU5QVVQgTEVBS1BST09GfDEwIENPU1QgUk9XUyBOT1dBSVQgU0VBUkNIIFVOVElMIEVOQ1JZUFRFRHwxMCBQQVNTV09SRCBDT05GTElDVHwxMCAnICtcbiAgICAnSU5TVEVBRCBJTkhFUklUUyBDSEFSQUNURVJJU1RJQ1MgV1JJVEUgQ1VSU09SIEFMU08gU1RBVEVNRU5UIFNIQVJFIEVYQ0xVU0lWRSBJTkxJTkUgJyArXG4gICAgJ0lTT0xBVElPTiBSRVBFQVRBQkxFIFJFQUQgQ09NTUlUVEVEIFNFUklBTElaQUJMRSBVTkNPTU1JVFRFRCBMT0NBTCBHTE9CQUwgU1FMIFBST0NFRFVSRVMgJyArXG4gICAgJ1JFQ1VSU0lWRSBTTkFQU0hPVCBST0xMVVAgQ1VCRSBUUlVTVEVEfDEwIElOQ0xVREUgRk9MTE9XSU5HIFBSRUNFRElORyBVTkJPVU5ERUQgUkFOR0UgR1JPVVBTICcgK1xuICAgICdVTkVOQ1JZUFRFRHwxMCBTWVNJRCBGT1JNQVQgREVMSU1JVEVSIEhFQURFUiBRVU9URSBFTkNPRElORyBGSUxURVIgT0ZGICcgK1xuICAgIC8vIHNvbWUgcGFyYW1ldGVycyBvZiBWQUNVVU0vQU5BTFlaRS9FWFBMQUlOXG4gICAgJ0ZPUkNFX1FVT1RFIEZPUkNFX05PVF9OVUxMIEZPUkNFX05VTEwgQ09TVFMgQlVGRkVSUyBUSU1JTkcgU1VNTUFSWSBESVNBQkxFX1BBR0VfU0tJUFBJTkcgJyArXG4gICAgLy9cbiAgICAnUkVTVEFSVCBDWUNMRSBHRU5FUkFURUQgSURFTlRJVFkgREVGRVJSRUQgSU1NRURJQVRFIExFVkVMIExPR0dFRCBVTkxPR0dFRCAnICtcbiAgICAnT0YgTk9USElORyBOT05FIEVYQ0xVREUgQVRUUklCVVRFICcgK1xuICAgIC8vIGZyb20gR1JBTlQgKG5vdCBrZXl3b3JkcyBhY3R1YWxseSlcbiAgICAnVVNBR0UgUk9VVElORVMgJyArXG4gICAgLy8gYWN0dWFsbHkgbGl0ZXJhbHMsIGJ1dCBsb29rIGJldHRlciB0aGlzIHdheSAoZHVlIHRvIElTIFRSVUUsIElTIEZBTFNFLCBJU05VTEwgZXRjKVxuICAgICdUUlVFIEZBTFNFIE5BTiBJTkZJTklUWSAnO1xuXG4gIGNvbnN0IFJPTEVfQVRUUlMgPSAvLyBvbmx5IHRob3NlIG5vdCBpbiBrZXl3cm9kcyBhbHJlYWR5XG4gICAgJ1NVUEVSVVNFUiBOT1NVUEVSVVNFUiBDUkVBVEVEQiBOT0NSRUFURURCIENSRUFURVJPTEUgTk9DUkVBVEVST0xFIElOSEVSSVQgTk9JTkhFUklUICcgK1xuICAgICdMT0dJTiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PUkVQTElDQVRJT04gQllQQVNTUkxTIE5PQllQQVNTUkxTICc7XG5cbiAgY29uc3QgUExQR1NRTF9LVyA9XG4gICAgJ0FMSUFTIEJFR0lOIENPTlNUQU5UIERFQ0xBUkUgRU5EIEVYQ0VQVElPTiBSRVRVUk4gUEVSRk9STXwxMCBSQUlTRSBHRVQgRElBR05PU1RJQ1MgJyArXG4gICAgJ1NUQUNLRUR8MTAgRk9SRUFDSCBMT09QIEVMU0lGIEVYSVQgV0hJTEUgUkVWRVJTRSBTTElDRSBERUJVRyBMT0cgSU5GTyBOT1RJQ0UgV0FSTklORyBBU1NFUlQgJyArXG4gICAgJ09QRU4gJztcblxuICBjb25zdCBUWVBFUyA9XG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZGF0YXR5cGUuaHRtbFxuICAgICdCSUdJTlQgSU5UOCBCSUdTRVJJQUwgU0VSSUFMOCBCSVQgVkFSWUlORyBWQVJCSVQgQk9PTEVBTiBCT09MIEJPWCBCWVRFQSBDSEFSQUNURVIgQ0hBUiBWQVJDSEFSICcgK1xuICAgICdDSURSIENJUkNMRSBEQVRFIERPVUJMRSBQUkVDSVNJT04gRkxPQVQ4IEZMT0FUIElORVQgSU5URUdFUiBJTlQgSU5UNCBJTlRFUlZBTCBKU09OIEpTT05CIExJTkUgTFNFR3wxMCAnICtcbiAgICAnTUFDQUREUiBNQUNBRERSOCBNT05FWSBOVU1FUklDIERFQyBERUNJTUFMIFBBVEggUE9JTlQgUE9MWUdPTiBSRUFMIEZMT0FUNCBTTUFMTElOVCBJTlQyICcgK1xuICAgICdTTUFMTFNFUklBTHwxMCBTRVJJQUwyfDEwIFNFUklBTHwxMCBTRVJJQUw0fDEwIFRFWFQgVElNRSBaT05FIFRJTUVUWnwxMCBUSU1FU1RBTVAgVElNRVNUQU1QVFp8MTAgVFNRVUVSWXwxMCBUU1ZFQ1RPUnwxMCAnICtcbiAgICAnVFhJRF9TTkFQU0hPVHwxMCBVVUlEIFhNTCBOQVRJT05BTCBOQ0hBUiAnICtcbiAgICAnSU5UNFJBTkdFfDEwIElOVDhSQU5HRXwxMCBOVU1SQU5HRXwxMCBUU1JBTkdFfDEwIFRTVFpSQU5HRXwxMCBEQVRFUkFOR0V8MTAgJyArXG4gICAgLy8gcHNldWRvdHlwZXNcbiAgICAnQU5ZRUxFTUVOVCBBTllBUlJBWSBBTllOT05BUlJBWSBBTllFTlVNIEFOWVJBTkdFIENTVFJJTkcgSU5URVJOQUwgJyArXG4gICAgJ1JFQ09SRCBQR19ERExfQ09NTUFORCBWT0lEIFVOS05PV04gT1BBUVVFIFJFRkNVUlNPUiAnICtcbiAgICAvLyBzcGVjLiB0eXBlXG4gICAgJ05BTUUgJyArXG4gICAgLy8gT0lELXR5cGVzXG4gICAgJ09JRCBSRUdQUk9DfDEwIFJFR1BST0NFRFVSRXwxMCBSRUdPUEVSfDEwIFJFR09QRVJBVE9SfDEwIFJFR0NMQVNTfDEwIFJFR1RZUEV8MTAgUkVHUk9MRXwxMCAnICtcbiAgICAnUkVHTkFNRVNQQUNFfDEwIFJFR0NPTkZJR3wxMCBSRUdESUNUSU9OQVJZfDEwICc7Ly8gK1xuXG4gIGNvbnN0IFRZUEVTX1JFID1cbiAgICBUWVBFUy50cmltKClcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdmFsLnNwbGl0KCd8JylbMF07IH0pXG4gICAgICAuam9pbignfCcpO1xuXG4gIGNvbnN0IFNRTF9CSSA9XG4gICAgJ0NVUlJFTlRfVElNRSBDVVJSRU5UX1RJTUVTVEFNUCBDVVJSRU5UX1VTRVIgQ1VSUkVOVF9DQVRBTE9HfDEwIENVUlJFTlRfREFURSBMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgJyArXG4gICAgJ0NVUlJFTlRfUk9MRXwxMCBDVVJSRU5UX1NDSEVNQXwxMCBTRVNTSU9OX1VTRVIgUFVCTElDICc7XG5cbiAgY29uc3QgUExQR1NRTF9CSSA9XG4gICAgJ0ZPVU5EIE5FVyBPTEQgVEdfTkFNRXwxMCBUR19XSEVOfDEwIFRHX0xFVkVMfDEwIFRHX09QfDEwIFRHX1JFTElEfDEwIFRHX1JFTE5BTUV8MTAgJyArXG4gICAgJ1RHX1RBQkxFX05BTUV8MTAgVEdfVEFCTEVfU0NIRU1BfDEwIFRHX05BUkdTfDEwIFRHX0FSR1Z8MTAgVEdfRVZFTlR8MTAgVEdfVEFHfDEwICcgK1xuICAgIC8vIGdldCBkaWFnbm9zdGljc1xuICAgICdST1dfQ09VTlQgUkVTVUxUX09JRHwxMCBQR19DT05URVhUfDEwIFJFVFVSTkVEX1NRTFNUQVRFIENPTFVNTl9OQU1FIENPTlNUUkFJTlRfTkFNRSAnICtcbiAgICAnUEdfREFUQVRZUEVfTkFNRXwxMCBNRVNTQUdFX1RFWFQgVEFCTEVfTkFNRSBTQ0hFTUFfTkFNRSBQR19FWENFUFRJT05fREVUQUlMfDEwICcgK1xuICAgICdQR19FWENFUFRJT05fSElOVHwxMCBQR19FWENFUFRJT05fQ09OVEVYVHwxMCAnO1xuXG4gIGNvbnN0IFBMUEdTUUxfRVhDRVBUSU9OUyA9XG4gICAgLy8gZXhjZXB0aW9ucyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3RhdGljL2VycmNvZGVzLWFwcGVuZGl4Lmh0bWxcbiAgICAnU1FMU1RBVEUgU1FMRVJSTXwxMCAnICtcbiAgICAnU1VDQ0VTU0ZVTF9DT01QTEVUSU9OIFdBUk5JTkcgRFlOQU1JQ19SRVNVTFRfU0VUU19SRVRVUk5FRCBJTVBMSUNJVF9aRVJPX0JJVF9QQURESU5HICcgK1xuICAgICdOVUxMX1ZBTFVFX0VMSU1JTkFURURfSU5fU0VUX0ZVTkNUSU9OIFBSSVZJTEVHRV9OT1RfR1JBTlRFRCBQUklWSUxFR0VfTk9UX1JFVk9LRUQgJyArXG4gICAgJ1NUUklOR19EQVRBX1JJR0hUX1RSVU5DQVRJT04gREVQUkVDQVRFRF9GRUFUVVJFIE5PX0RBVEEgTk9fQURESVRJT05BTF9EWU5BTUlDX1JFU1VMVF9TRVRTX1JFVFVSTkVEICcgK1xuICAgICdTUUxfU1RBVEVNRU5UX05PVF9ZRVRfQ09NUExFVEUgQ09OTkVDVElPTl9FWENFUFRJT04gQ09OTkVDVElPTl9ET0VTX05PVF9FWElTVCBDT05ORUNUSU9OX0ZBSUxVUkUgJyArXG4gICAgJ1NRTENMSUVOVF9VTkFCTEVfVE9fRVNUQUJMSVNIX1NRTENPTk5FQ1RJT04gU1FMU0VSVkVSX1JFSkVDVEVEX0VTVEFCTElTSE1FTlRfT0ZfU1FMQ09OTkVDVElPTiAnICtcbiAgICAnVFJBTlNBQ1RJT05fUkVTT0xVVElPTl9VTktOT1dOIFBST1RPQ09MX1ZJT0xBVElPTiBUUklHR0VSRURfQUNUSU9OX0VYQ0VQVElPTiBGRUFUVVJFX05PVF9TVVBQT1JURUQgJyArXG4gICAgJ0lOVkFMSURfVFJBTlNBQ1RJT05fSU5JVElBVElPTiBMT0NBVE9SX0VYQ0VQVElPTiBJTlZBTElEX0xPQ0FUT1JfU1BFQ0lGSUNBVElPTiBJTlZBTElEX0dSQU5UT1IgJyArXG4gICAgJ0lOVkFMSURfR1JBTlRfT1BFUkFUSU9OIElOVkFMSURfUk9MRV9TUEVDSUZJQ0FUSU9OIERJQUdOT1NUSUNTX0VYQ0VQVElPTiAnICtcbiAgICAnU1RBQ0tFRF9ESUFHTk9TVElDU19BQ0NFU1NFRF9XSVRIT1VUX0FDVElWRV9IQU5ETEVSIENBU0VfTk9UX0ZPVU5EIENBUkRJTkFMSVRZX1ZJT0xBVElPTiAnICtcbiAgICAnREFUQV9FWENFUFRJT04gQVJSQVlfU1VCU0NSSVBUX0VSUk9SIENIQVJBQ1RFUl9OT1RfSU5fUkVQRVJUT0lSRSBEQVRFVElNRV9GSUVMRF9PVkVSRkxPVyAnICtcbiAgICAnRElWSVNJT05fQllfWkVSTyBFUlJPUl9JTl9BU1NJR05NRU5UIEVTQ0FQRV9DSEFSQUNURVJfQ09ORkxJQ1QgSU5ESUNBVE9SX09WRVJGTE9XICcgK1xuICAgICdJTlRFUlZBTF9GSUVMRF9PVkVSRkxPVyBJTlZBTElEX0FSR1VNRU5UX0ZPUl9MT0dBUklUSE0gSU5WQUxJRF9BUkdVTUVOVF9GT1JfTlRJTEVfRlVOQ1RJT04gJyArXG4gICAgJ0lOVkFMSURfQVJHVU1FTlRfRk9SX05USF9WQUxVRV9GVU5DVElPTiBJTlZBTElEX0FSR1VNRU5UX0ZPUl9QT1dFUl9GVU5DVElPTiAnICtcbiAgICAnSU5WQUxJRF9BUkdVTUVOVF9GT1JfV0lEVEhfQlVDS0VUX0ZVTkNUSU9OIElOVkFMSURfQ0hBUkFDVEVSX1ZBTFVFX0ZPUl9DQVNUICcgK1xuICAgICdJTlZBTElEX0RBVEVUSU1FX0ZPUk1BVCBJTlZBTElEX0VTQ0FQRV9DSEFSQUNURVIgSU5WQUxJRF9FU0NBUEVfT0NURVQgSU5WQUxJRF9FU0NBUEVfU0VRVUVOQ0UgJyArXG4gICAgJ05PTlNUQU5EQVJEX1VTRV9PRl9FU0NBUEVfQ0hBUkFDVEVSIElOVkFMSURfSU5ESUNBVE9SX1BBUkFNRVRFUl9WQUxVRSBJTlZBTElEX1BBUkFNRVRFUl9WQUxVRSAnICtcbiAgICAnSU5WQUxJRF9SRUdVTEFSX0VYUFJFU1NJT04gSU5WQUxJRF9ST1dfQ09VTlRfSU5fTElNSVRfQ0xBVVNFICcgK1xuICAgICdJTlZBTElEX1JPV19DT1VOVF9JTl9SRVNVTFRfT0ZGU0VUX0NMQVVTRSBJTlZBTElEX1RBQkxFU0FNUExFX0FSR1VNRU5UIElOVkFMSURfVEFCTEVTQU1QTEVfUkVQRUFUICcgK1xuICAgICdJTlZBTElEX1RJTUVfWk9ORV9ESVNQTEFDRU1FTlRfVkFMVUUgSU5WQUxJRF9VU0VfT0ZfRVNDQVBFX0NIQVJBQ1RFUiBNT1NUX1NQRUNJRklDX1RZUEVfTUlTTUFUQ0ggJyArXG4gICAgJ05VTExfVkFMVUVfTk9UX0FMTE9XRUQgTlVMTF9WQUxVRV9OT19JTkRJQ0FUT1JfUEFSQU1FVEVSIE5VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFICcgK1xuICAgICdTRVFVRU5DRV9HRU5FUkFUT1JfTElNSVRfRVhDRUVERUQgU1RSSU5HX0RBVEFfTEVOR1RIX01JU01BVENIIFNUUklOR19EQVRBX1JJR0hUX1RSVU5DQVRJT04gJyArXG4gICAgJ1NVQlNUUklOR19FUlJPUiBUUklNX0VSUk9SIFVOVEVSTUlOQVRFRF9DX1NUUklORyBaRVJPX0xFTkdUSF9DSEFSQUNURVJfU1RSSU5HICcgK1xuICAgICdGTE9BVElOR19QT0lOVF9FWENFUFRJT04gSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OIElOVkFMSURfQklOQVJZX1JFUFJFU0VOVEFUSU9OICcgK1xuICAgICdCQURfQ09QWV9GSUxFX0ZPUk1BVCBVTlRSQU5TTEFUQUJMRV9DSEFSQUNURVIgTk9UX0FOX1hNTF9ET0NVTUVOVCBJTlZBTElEX1hNTF9ET0NVTUVOVCAnICtcbiAgICAnSU5WQUxJRF9YTUxfQ09OVEVOVCBJTlZBTElEX1hNTF9DT01NRU5UIElOVkFMSURfWE1MX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04gJyArXG4gICAgJ0lOVEVHUklUWV9DT05TVFJBSU5UX1ZJT0xBVElPTiBSRVNUUklDVF9WSU9MQVRJT04gTk9UX05VTExfVklPTEFUSU9OIEZPUkVJR05fS0VZX1ZJT0xBVElPTiAnICtcbiAgICAnVU5JUVVFX1ZJT0xBVElPTiBDSEVDS19WSU9MQVRJT04gRVhDTFVTSU9OX1ZJT0xBVElPTiBJTlZBTElEX0NVUlNPUl9TVEFURSAnICtcbiAgICAnSU5WQUxJRF9UUkFOU0FDVElPTl9TVEFURSBBQ1RJVkVfU1FMX1RSQU5TQUNUSU9OIEJSQU5DSF9UUkFOU0FDVElPTl9BTFJFQURZX0FDVElWRSAnICtcbiAgICAnSEVMRF9DVVJTT1JfUkVRVUlSRVNfU0FNRV9JU09MQVRJT05fTEVWRUwgSU5BUFBST1BSSUFURV9BQ0NFU1NfTU9ERV9GT1JfQlJBTkNIX1RSQU5TQUNUSU9OICcgK1xuICAgICdJTkFQUFJPUFJJQVRFX0lTT0xBVElPTl9MRVZFTF9GT1JfQlJBTkNIX1RSQU5TQUNUSU9OICcgK1xuICAgICdOT19BQ1RJVkVfU1FMX1RSQU5TQUNUSU9OX0ZPUl9CUkFOQ0hfVFJBTlNBQ1RJT04gUkVBRF9PTkxZX1NRTF9UUkFOU0FDVElPTiAnICtcbiAgICAnU0NIRU1BX0FORF9EQVRBX1NUQVRFTUVOVF9NSVhJTkdfTk9UX1NVUFBPUlRFRCBOT19BQ1RJVkVfU1FMX1RSQU5TQUNUSU9OICcgK1xuICAgICdJTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OIElETEVfSU5fVFJBTlNBQ1RJT05fU0VTU0lPTl9USU1FT1VUIElOVkFMSURfU1FMX1NUQVRFTUVOVF9OQU1FICcgK1xuICAgICdUUklHR0VSRURfREFUQV9DSEFOR0VfVklPTEFUSU9OIElOVkFMSURfQVVUSE9SSVpBVElPTl9TUEVDSUZJQ0FUSU9OIElOVkFMSURfUEFTU1dPUkQgJyArXG4gICAgJ0RFUEVOREVOVF9QUklWSUxFR0VfREVTQ1JJUFRPUlNfU1RJTExfRVhJU1QgREVQRU5ERU5UX09CSkVDVFNfU1RJTExfRVhJU1QgJyArXG4gICAgJ0lOVkFMSURfVFJBTlNBQ1RJT05fVEVSTUlOQVRJT04gU1FMX1JPVVRJTkVfRVhDRVBUSU9OIEZVTkNUSU9OX0VYRUNVVEVEX05PX1JFVFVSTl9TVEFURU1FTlQgJyArXG4gICAgJ01PRElGWUlOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEIFBST0hJQklURURfU1FMX1NUQVRFTUVOVF9BVFRFTVBURUQgJyArXG4gICAgJ1JFQURJTkdfU1FMX0RBVEFfTk9UX1BFUk1JVFRFRCBJTlZBTElEX0NVUlNPUl9OQU1FIEVYVEVSTkFMX1JPVVRJTkVfRVhDRVBUSU9OICcgK1xuICAgICdDT05UQUlOSU5HX1NRTF9OT1RfUEVSTUlUVEVEIE1PRElGWUlOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEICcgK1xuICAgICdQUk9ISUJJVEVEX1NRTF9TVEFURU1FTlRfQVRURU1QVEVEIFJFQURJTkdfU1FMX0RBVEFfTk9UX1BFUk1JVFRFRCAnICtcbiAgICAnRVhURVJOQUxfUk9VVElORV9JTlZPQ0FUSU9OX0VYQ0VQVElPTiBJTlZBTElEX1NRTFNUQVRFX1JFVFVSTkVEIE5VTExfVkFMVUVfTk9UX0FMTE9XRUQgJyArXG4gICAgJ1RSSUdHRVJfUFJPVE9DT0xfVklPTEFURUQgU1JGX1BST1RPQ09MX1ZJT0xBVEVEIEVWRU5UX1RSSUdHRVJfUFJPVE9DT0xfVklPTEFURUQgJyArXG4gICAgJ1NBVkVQT0lOVF9FWENFUFRJT04gSU5WQUxJRF9TQVZFUE9JTlRfU1BFQ0lGSUNBVElPTiBJTlZBTElEX0NBVEFMT0dfTkFNRSAnICtcbiAgICAnSU5WQUxJRF9TQ0hFTUFfTkFNRSBUUkFOU0FDVElPTl9ST0xMQkFDSyBUUkFOU0FDVElPTl9JTlRFR1JJVFlfQ09OU1RSQUlOVF9WSU9MQVRJT04gJyArXG4gICAgJ1NFUklBTElaQVRJT05fRkFJTFVSRSBTVEFURU1FTlRfQ09NUExFVElPTl9VTktOT1dOIERFQURMT0NLX0RFVEVDVEVEICcgK1xuICAgICdTWU5UQVhfRVJST1JfT1JfQUNDRVNTX1JVTEVfVklPTEFUSU9OIFNZTlRBWF9FUlJPUiBJTlNVRkZJQ0lFTlRfUFJJVklMRUdFIENBTk5PVF9DT0VSQ0UgJyArXG4gICAgJ0dST1VQSU5HX0VSUk9SIFdJTkRPV0lOR19FUlJPUiBJTlZBTElEX1JFQ1VSU0lPTiBJTlZBTElEX0ZPUkVJR05fS0VZIElOVkFMSURfTkFNRSAnICtcbiAgICAnTkFNRV9UT09fTE9ORyBSRVNFUlZFRF9OQU1FIERBVEFUWVBFX01JU01BVENIIElOREVURVJNSU5BVEVfREFUQVRZUEUgQ09MTEFUSU9OX01JU01BVENIICcgK1xuICAgICdJTkRFVEVSTUlOQVRFX0NPTExBVElPTiBXUk9OR19PQkpFQ1RfVFlQRSBHRU5FUkFURURfQUxXQVlTIFVOREVGSU5FRF9DT0xVTU4gJyArXG4gICAgJ1VOREVGSU5FRF9GVU5DVElPTiBVTkRFRklORURfVEFCTEUgVU5ERUZJTkVEX1BBUkFNRVRFUiBVTkRFRklORURfT0JKRUNUICcgK1xuICAgICdEVVBMSUNBVEVfQ09MVU1OIERVUExJQ0FURV9DVVJTT1IgRFVQTElDQVRFX0RBVEFCQVNFIERVUExJQ0FURV9GVU5DVElPTiAnICtcbiAgICAnRFVQTElDQVRFX1BSRVBBUkVEX1NUQVRFTUVOVCBEVVBMSUNBVEVfU0NIRU1BIERVUExJQ0FURV9UQUJMRSBEVVBMSUNBVEVfQUxJQVMgJyArXG4gICAgJ0RVUExJQ0FURV9PQkpFQ1QgQU1CSUdVT1VTX0NPTFVNTiBBTUJJR1VPVVNfRlVOQ1RJT04gQU1CSUdVT1VTX1BBUkFNRVRFUiBBTUJJR1VPVVNfQUxJQVMgJyArXG4gICAgJ0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSBJTlZBTElEX0NPTFVNTl9ERUZJTklUSU9OIElOVkFMSURfQ1VSU09SX0RFRklOSVRJT04gJyArXG4gICAgJ0lOVkFMSURfREFUQUJBU0VfREVGSU5JVElPTiBJTlZBTElEX0ZVTkNUSU9OX0RFRklOSVRJT04gJyArXG4gICAgJ0lOVkFMSURfUFJFUEFSRURfU1RBVEVNRU5UX0RFRklOSVRJT04gSU5WQUxJRF9TQ0hFTUFfREVGSU5JVElPTiBJTlZBTElEX1RBQkxFX0RFRklOSVRJT04gJyArXG4gICAgJ0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04gV0lUSF9DSEVDS19PUFRJT05fVklPTEFUSU9OIElOU1VGRklDSUVOVF9SRVNPVVJDRVMgRElTS19GVUxMICcgK1xuICAgICdPVVRfT0ZfTUVNT1JZIFRPT19NQU5ZX0NPTk5FQ1RJT05TIENPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQgUFJPR1JBTV9MSU1JVF9FWENFRURFRCAnICtcbiAgICAnU1RBVEVNRU5UX1RPT19DT01QTEVYIFRPT19NQU5ZX0NPTFVNTlMgVE9PX01BTllfQVJHVU1FTlRTIE9CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFICcgK1xuICAgICdPQkpFQ1RfSU5fVVNFIENBTlRfQ0hBTkdFX1JVTlRJTUVfUEFSQU0gTE9DS19OT1RfQVZBSUxBQkxFIE9QRVJBVE9SX0lOVEVSVkVOVElPTiAnICtcbiAgICAnUVVFUllfQ0FOQ0VMRUQgQURNSU5fU0hVVERPV04gQ1JBU0hfU0hVVERPV04gQ0FOTk9UX0NPTk5FQ1RfTk9XIERBVEFCQVNFX0RST1BQRUQgJyArXG4gICAgJ1NZU1RFTV9FUlJPUiBJT19FUlJPUiBVTkRFRklORURfRklMRSBEVVBMSUNBVEVfRklMRSBTTkFQU0hPVF9UT09fT0xEIENPTkZJR19GSUxFX0VSUk9SICcgK1xuICAgICdMT0NLX0ZJTEVfRVhJU1RTIEZEV19FUlJPUiBGRFdfQ09MVU1OX05BTUVfTk9UX0ZPVU5EIEZEV19EWU5BTUlDX1BBUkFNRVRFUl9WQUxVRV9ORUVERUQgJyArXG4gICAgJ0ZEV19GVU5DVElPTl9TRVFVRU5DRV9FUlJPUiBGRFdfSU5DT05TSVNURU5UX0RFU0NSSVBUT1JfSU5GT1JNQVRJT04gJyArXG4gICAgJ0ZEV19JTlZBTElEX0FUVFJJQlVURV9WQUxVRSBGRFdfSU5WQUxJRF9DT0xVTU5fTkFNRSBGRFdfSU5WQUxJRF9DT0xVTU5fTlVNQkVSICcgK1xuICAgICdGRFdfSU5WQUxJRF9EQVRBX1RZUEUgRkRXX0lOVkFMSURfREFUQV9UWVBFX0RFU0NSSVBUT1JTICcgK1xuICAgICdGRFdfSU5WQUxJRF9ERVNDUklQVE9SX0ZJRUxEX0lERU5USUZJRVIgRkRXX0lOVkFMSURfSEFORExFIEZEV19JTlZBTElEX09QVElPTl9JTkRFWCAnICtcbiAgICAnRkRXX0lOVkFMSURfT1BUSU9OX05BTUUgRkRXX0lOVkFMSURfU1RSSU5HX0xFTkdUSF9PUl9CVUZGRVJfTEVOR1RIICcgK1xuICAgICdGRFdfSU5WQUxJRF9TVFJJTkdfRk9STUFUIEZEV19JTlZBTElEX1VTRV9PRl9OVUxMX1BPSU5URVIgRkRXX1RPT19NQU5ZX0hBTkRMRVMgJyArXG4gICAgJ0ZEV19PVVRfT0ZfTUVNT1JZIEZEV19OT19TQ0hFTUFTIEZEV19PUFRJT05fTkFNRV9OT1RfRk9VTkQgRkRXX1JFUExZX0hBTkRMRSAnICtcbiAgICAnRkRXX1NDSEVNQV9OT1RfRk9VTkQgRkRXX1RBQkxFX05PVF9GT1VORCBGRFdfVU5BQkxFX1RPX0NSRUFURV9FWEVDVVRJT04gJyArXG4gICAgJ0ZEV19VTkFCTEVfVE9fQ1JFQVRFX1JFUExZIEZEV19VTkFCTEVfVE9fRVNUQUJMSVNIX0NPTk5FQ1RJT04gUExQR1NRTF9FUlJPUiAnICtcbiAgICAnUkFJU0VfRVhDRVBUSU9OIE5PX0RBVEFfRk9VTkQgVE9PX01BTllfUk9XUyBBU1NFUlRfRkFJTFVSRSBJTlRFUk5BTF9FUlJPUiBEQVRBX0NPUlJVUFRFRCAnICtcbiAgICAnSU5ERVhfQ09SUlVQVEVEICc7XG5cbiAgY29uc3QgRlVOQ1RJT05TID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtYWdncmVnYXRlLmh0bWxcbiAgICAnQVJSQVlfQUdHIEFWRyBCSVRfQU5EIEJJVF9PUiBCT09MX0FORCBCT09MX09SIENPVU5UIEVWRVJZIEpTT05fQUdHIEpTT05CX0FHRyBKU09OX09CSkVDVF9BR0cgJyArXG4gICAgJ0pTT05CX09CSkVDVF9BR0cgTUFYIE1JTiBNT0RFIFNUUklOR19BR0cgU1VNIFhNTEFHRyAnICtcbiAgICAnQ09SUiBDT1ZBUl9QT1AgQ09WQVJfU0FNUCBSRUdSX0FWR1ggUkVHUl9BVkdZIFJFR1JfQ09VTlQgUkVHUl9JTlRFUkNFUFQgUkVHUl9SMiBSRUdSX1NMT1BFICcgK1xuICAgICdSRUdSX1NYWCBSRUdSX1NYWSBSRUdSX1NZWSBTVERERVYgU1REREVWX1BPUCBTVERERVZfU0FNUCBWQVJJQU5DRSBWQVJfUE9QIFZBUl9TQU1QICcgK1xuICAgICdQRVJDRU5USUxFX0NPTlQgUEVSQ0VOVElMRV9ESVNDICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy13aW5kb3cuaHRtbFxuICAgICdST1dfTlVNQkVSIFJBTksgREVOU0VfUkFOSyBQRVJDRU5UX1JBTksgQ1VNRV9ESVNUIE5USUxFIExBRyBMRUFEIEZJUlNUX1ZBTFVFIExBU1RfVkFMVUUgTlRIX1ZBTFVFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1jb21wYXJpc29uLmh0bWxcbiAgICAnTlVNX05PTk5VTExTIE5VTV9OVUxMUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtbWF0aC5odG1sXG4gICAgJ0FCUyBDQlJUIENFSUwgQ0VJTElORyBERUdSRUVTIERJViBFWFAgRkxPT1IgTE4gTE9HIE1PRCBQSSBQT1dFUiBSQURJQU5TIFJPVU5EIFNDQUxFIFNJR04gU1FSVCAnICtcbiAgICAnVFJVTkMgV0lEVEhfQlVDS0VUICcgK1xuICAgICdSQU5ET00gU0VUU0VFRCAnICtcbiAgICAnQUNPUyBBQ09TRCBBU0lOIEFTSU5EIEFUQU4gQVRBTkQgQVRBTjIgQVRBTjJEIENPUyBDT1NEIENPVCBDT1REIFNJTiBTSU5EIFRBTiBUQU5EICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1zdHJpbmcuaHRtbFxuICAgICdCSVRfTEVOR1RIIENIQVJfTEVOR1RIIENIQVJBQ1RFUl9MRU5HVEggTE9XRVIgT0NURVRfTEVOR1RIIE9WRVJMQVkgUE9TSVRJT04gU1VCU1RSSU5HIFRSRUFUIFRSSU0gVVBQRVIgJyArXG4gICAgJ0FTQ0lJIEJUUklNIENIUiBDT05DQVQgQ09OQ0FUX1dTIENPTlZFUlQgQ09OVkVSVF9GUk9NIENPTlZFUlRfVE8gREVDT0RFIEVOQ09ERSBJTklUQ0FQICcgK1xuICAgICdMRUZUIExFTkdUSCBMUEFEIExUUklNIE1ENSBQQVJTRV9JREVOVCBQR19DTElFTlRfRU5DT0RJTkcgUVVPVEVfSURFTlR8MTAgUVVPVEVfTElURVJBTHwxMCAnICtcbiAgICAnUVVPVEVfTlVMTEFCTEV8MTAgUkVHRVhQX01BVENIIFJFR0VYUF9NQVRDSEVTIFJFR0VYUF9SRVBMQUNFIFJFR0VYUF9TUExJVF9UT19BUlJBWSAnICtcbiAgICAnUkVHRVhQX1NQTElUX1RPX1RBQkxFIFJFUEVBVCBSRVBMQUNFIFJFVkVSU0UgUklHSFQgUlBBRCBSVFJJTSBTUExJVF9QQVJUIFNUUlBPUyBTVUJTVFIgJyArXG4gICAgJ1RPX0FTQ0lJIFRPX0hFWCBUUkFOU0xBVEUgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWJpbmFyeXN0cmluZy5odG1sXG4gICAgJ09DVEVUX0xFTkdUSCBHRVRfQklUIEdFVF9CWVRFIFNFVF9CSVQgU0VUX0JZVEUgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWZvcm1hdHRpbmcuaHRtbFxuICAgICdUT19DSEFSIFRPX0RBVEUgVE9fTlVNQkVSIFRPX1RJTUVTVEFNUCAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtZGF0ZXRpbWUuaHRtbFxuICAgICdBR0UgQ0xPQ0tfVElNRVNUQU1QfDEwIERBVEVfUEFSVCBEQVRFX1RSVU5DIElTRklOSVRFIEpVU1RJRllfREFZUyBKVVNUSUZZX0hPVVJTIEpVU1RJRllfSU5URVJWQUwgJyArXG4gICAgJ01BS0VfREFURSBNQUtFX0lOVEVSVkFMfDEwIE1BS0VfVElNRSBNQUtFX1RJTUVTVEFNUHwxMCBNQUtFX1RJTUVTVEFNUFRafDEwIE5PVyBTVEFURU1FTlRfVElNRVNUQU1QfDEwICcgK1xuICAgICdUSU1FT0ZEQVkgVFJBTlNBQ1RJT05fVElNRVNUQU1QfDEwICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1lbnVtLmh0bWxcbiAgICAnRU5VTV9GSVJTVCBFTlVNX0xBU1QgRU5VTV9SQU5HRSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtZ2VvbWV0cnkuaHRtbFxuICAgICdBUkVBIENFTlRFUiBESUFNRVRFUiBIRUlHSFQgSVNDTE9TRUQgSVNPUEVOIE5QT0lOVFMgUENMT1NFIFBPUEVOIFJBRElVUyBXSURUSCAnICtcbiAgICAnQk9YIEJPVU5EX0JPWCBDSVJDTEUgTElORSBMU0VHIFBBVEggUE9MWUdPTiAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtbmV0Lmh0bWxcbiAgICAnQUJCUkVWIEJST0FEQ0FTVCBIT1NUIEhPU1RNQVNLIE1BU0tMRU4gTkVUTUFTSyBORVRXT1JLIFNFVF9NQVNLTEVOIFRFWFQgSU5FVF9TQU1FX0ZBTUlMWSAnICtcbiAgICAnSU5FVF9NRVJHRSBNQUNBRERSOF9TRVQ3QklUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy10ZXh0c2VhcmNoLmh0bWxcbiAgICAnQVJSQVlfVE9fVFNWRUNUT1IgR0VUX0NVUlJFTlRfVFNfQ09ORklHIE5VTU5PREUgUExBSU5UT19UU1FVRVJZIFBIUkFTRVRPX1RTUVVFUlkgV0VCU0VBUkNIX1RPX1RTUVVFUlkgJyArXG4gICAgJ1FVRVJZVFJFRSBTRVRXRUlHSFQgU1RSSVAgVE9fVFNRVUVSWSBUT19UU1ZFQ1RPUiBKU09OX1RPX1RTVkVDVE9SIEpTT05CX1RPX1RTVkVDVE9SIFRTX0RFTEVURSAnICtcbiAgICAnVFNfRklMVEVSIFRTX0hFQURMSU5FIFRTX1JBTksgVFNfUkFOS19DRCBUU19SRVdSSVRFIFRTUVVFUllfUEhSQVNFIFRTVkVDVE9SX1RPX0FSUkFZICcgK1xuICAgICdUU1ZFQ1RPUl9VUERBVEVfVFJJR0dFUiBUU1ZFQ1RPUl9VUERBVEVfVFJJR0dFUl9DT0xVTU4gJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLXhtbC5odG1sXG4gICAgJ1hNTENPTU1FTlQgWE1MQ09OQ0FUIFhNTEVMRU1FTlQgWE1MRk9SRVNUIFhNTFBJIFhNTFJPT1QgJyArXG4gICAgJ1hNTEVYSVNUUyBYTUxfSVNfV0VMTF9GT1JNRUQgWE1MX0lTX1dFTExfRk9STUVEX0RPQ1VNRU5UIFhNTF9JU19XRUxMX0ZPUk1FRF9DT05URU5UICcgK1xuICAgICdYUEFUSCBYUEFUSF9FWElTVFMgWE1MVEFCTEUgWE1MTkFNRVNQQUNFUyAnICtcbiAgICAnVEFCTEVfVE9fWE1MIFRBQkxFX1RPX1hNTFNDSEVNQSBUQUJMRV9UT19YTUxfQU5EX1hNTFNDSEVNQSAnICtcbiAgICAnUVVFUllfVE9fWE1MIFFVRVJZX1RPX1hNTFNDSEVNQSBRVUVSWV9UT19YTUxfQU5EX1hNTFNDSEVNQSAnICtcbiAgICAnQ1VSU09SX1RPX1hNTCBDVVJTT1JfVE9fWE1MU0NIRU1BICcgK1xuICAgICdTQ0hFTUFfVE9fWE1MIFNDSEVNQV9UT19YTUxTQ0hFTUEgU0NIRU1BX1RPX1hNTF9BTkRfWE1MU0NIRU1BICcgK1xuICAgICdEQVRBQkFTRV9UT19YTUwgREFUQUJBU0VfVE9fWE1MU0NIRU1BIERBVEFCQVNFX1RPX1hNTF9BTkRfWE1MU0NIRU1BICcgK1xuICAgICdYTUxBVFRSSUJVVEVTICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1qc29uLmh0bWxcbiAgICAnVE9fSlNPTiBUT19KU09OQiBBUlJBWV9UT19KU09OIFJPV19UT19KU09OIEpTT05fQlVJTERfQVJSQVkgSlNPTkJfQlVJTERfQVJSQVkgSlNPTl9CVUlMRF9PQkpFQ1QgJyArXG4gICAgJ0pTT05CX0JVSUxEX09CSkVDVCBKU09OX09CSkVDVCBKU09OQl9PQkpFQ1QgSlNPTl9BUlJBWV9MRU5HVEggSlNPTkJfQVJSQVlfTEVOR1RIIEpTT05fRUFDSCAnICtcbiAgICAnSlNPTkJfRUFDSCBKU09OX0VBQ0hfVEVYVCBKU09OQl9FQUNIX1RFWFQgSlNPTl9FWFRSQUNUX1BBVEggSlNPTkJfRVhUUkFDVF9QQVRIICcgK1xuICAgICdKU09OX09CSkVDVF9LRVlTIEpTT05CX09CSkVDVF9LRVlTIEpTT05fUE9QVUxBVEVfUkVDT1JEIEpTT05CX1BPUFVMQVRFX1JFQ09SRCBKU09OX1BPUFVMQVRFX1JFQ09SRFNFVCAnICtcbiAgICAnSlNPTkJfUE9QVUxBVEVfUkVDT1JEU0VUIEpTT05fQVJSQVlfRUxFTUVOVFMgSlNPTkJfQVJSQVlfRUxFTUVOVFMgSlNPTl9BUlJBWV9FTEVNRU5UU19URVhUICcgK1xuICAgICdKU09OQl9BUlJBWV9FTEVNRU5UU19URVhUIEpTT05fVFlQRU9GIEpTT05CX1RZUEVPRiBKU09OX1RPX1JFQ09SRCBKU09OQl9UT19SRUNPUkQgSlNPTl9UT19SRUNPUkRTRVQgJyArXG4gICAgJ0pTT05CX1RPX1JFQ09SRFNFVCBKU09OX1NUUklQX05VTExTIEpTT05CX1NUUklQX05VTExTIEpTT05CX1NFVCBKU09OQl9JTlNFUlQgSlNPTkJfUFJFVFRZICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1zZXF1ZW5jZS5odG1sXG4gICAgJ0NVUlJWQUwgTEFTVFZBTCBORVhUVkFMIFNFVFZBTCAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtY29uZGl0aW9uYWwuaHRtbFxuICAgICdDT0FMRVNDRSBOVUxMSUYgR1JFQVRFU1QgTEVBU1QgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWFycmF5Lmh0bWxcbiAgICAnQVJSQVlfQVBQRU5EIEFSUkFZX0NBVCBBUlJBWV9ORElNUyBBUlJBWV9ESU1TIEFSUkFZX0ZJTEwgQVJSQVlfTEVOR1RIIEFSUkFZX0xPV0VSIEFSUkFZX1BPU0lUSU9OICcgK1xuICAgICdBUlJBWV9QT1NJVElPTlMgQVJSQVlfUFJFUEVORCBBUlJBWV9SRU1PVkUgQVJSQVlfUkVQTEFDRSBBUlJBWV9UT19TVFJJTkcgQVJSQVlfVVBQRVIgQ0FSRElOQUxJVFkgJyArXG4gICAgJ1NUUklOR19UT19BUlJBWSBVTk5FU1QgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLXJhbmdlLmh0bWxcbiAgICAnSVNFTVBUWSBMT1dFUl9JTkMgVVBQRVJfSU5DIExPV0VSX0lORiBVUFBFUl9JTkYgUkFOR0VfTUVSR0UgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLXNyZi5odG1sXG4gICAgJ0dFTkVSQVRFX1NFUklFUyBHRU5FUkFURV9TVUJTQ1JJUFRTICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1pbmZvLmh0bWxcbiAgICAnQ1VSUkVOVF9EQVRBQkFTRSBDVVJSRU5UX1FVRVJZIENVUlJFTlRfU0NIRU1BfDEwIENVUlJFTlRfU0NIRU1BU3wxMCBJTkVUX0NMSUVOVF9BRERSIElORVRfQ0xJRU5UX1BPUlQgJyArXG4gICAgJ0lORVRfU0VSVkVSX0FERFIgSU5FVF9TRVJWRVJfUE9SVCBST1dfU0VDVVJJVFlfQUNUSVZFIEZPUk1BVF9UWVBFICcgK1xuICAgICdUT19SRUdDTEFTUyBUT19SRUdQUk9DIFRPX1JFR1BST0NFRFVSRSBUT19SRUdPUEVSIFRPX1JFR09QRVJBVE9SIFRPX1JFR1RZUEUgVE9fUkVHTkFNRVNQQUNFIFRPX1JFR1JPTEUgJyArXG4gICAgJ0NPTF9ERVNDUklQVElPTiBPQkpfREVTQ1JJUFRJT04gU0hPQkpfREVTQ1JJUFRJT04gJyArXG4gICAgJ1RYSURfQ1VSUkVOVCBUWElEX0NVUlJFTlRfSUZfQVNTSUdORUQgVFhJRF9DVVJSRU5UX1NOQVBTSE9UIFRYSURfU05BUFNIT1RfWElQIFRYSURfU05BUFNIT1RfWE1BWCAnICtcbiAgICAnVFhJRF9TTkFQU0hPVF9YTUlOIFRYSURfVklTSUJMRV9JTl9TTkFQU0hPVCBUWElEX1NUQVRVUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtYWRtaW4uaHRtbFxuICAgICdDVVJSRU5UX1NFVFRJTkcgU0VUX0NPTkZJRyBCUklOX1NVTU1BUklaRV9ORVdfVkFMVUVTIEJSSU5fU1VNTUFSSVpFX1JBTkdFIEJSSU5fREVTVU1NQVJJWkVfUkFOR0UgJyArXG4gICAgJ0dJTl9DTEVBTl9QRU5ESU5HX0xJU1QgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLXRyaWdnZXIuaHRtbFxuICAgICdTVVBQUkVTU19SRURVTkRBTlRfVVBEQVRFU19UUklHR0VSICcgK1xuICAgIC8vIGlodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2RldmVsL3N0YXRpYy9sby1mdW5jcy5odG1sXG4gICAgJ0xPX0ZST01fQllURUEgTE9fUFVUIExPX0dFVCBMT19DUkVBVCBMT19DUkVBVEUgTE9fVU5MSU5LIExPX0lNUE9SVCBMT19FWFBPUlQgTE9SRUFEIExPV1JJVEUgJyArXG4gICAgLy9cbiAgICAnR1JPVVBJTkcgQ0FTVCAnO1xuXG4gIGNvbnN0IEZVTkNUSU9OU19SRSA9XG4gICAgICBGVU5DVElPTlMudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7IHJldHVybiB2YWwuc3BsaXQoJ3wnKVswXTsgfSlcbiAgICAgICAgLmpvaW4oJ3wnKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQb3N0Z3JlU1FMJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncG9zdGdyZXMnLFxuICAgICAgJ3Bvc3RncmVzcWwnXG4gICAgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgU1FMX0tXICsgUExQR1NRTF9LVyArIFJPTEVfQVRUUlMsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgICAgIFNRTF9CSSArIFBMUEdTUUxfQkkgKyBQTFBHU1FMX0VYQ0VQVElPTlNcbiAgICB9LFxuICAgIC8vIEZvcmJpZCBzb21lIGN1bnN0cnVjdHMgZnJvbSBvdGhlciBsYW5ndWFnZXMgdG8gaW1wcm92ZSBhdXRvZGV0ZWN0LiBJbiBmYWN0XG4gICAgLy8gXCJbYS16XTpcIiBpcyBsZWdhbCAoYXMgcGFydCBvZiBhcnJheSBzbGljZSksIGJ1dCBpbXByb2JhYmFsLlxuICAgIGlsbGVnYWw6IC86PT18XFxXXFxzKlxcKFxcKnwoXnxcXHMpXFwkW2Etel18XFx7XFx7fFthLXpdOlxccyokfFxcLlxcLlxcLnxUTzp8RE86LyxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBvZiBzb21lIHdvcmRzLCB3aGljaCBhcmUgcmVzZXJ2ZWQgb25seSBpbiBzb21lIGNvbnRleHRzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiVEVYVFxccypTRUFSQ0hcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYihQUklNQVJZfEZPUkVJR058Rk9SKFxccytOTyk/KVxccytLRVlcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYlBBUkFMTEVMXFxzKyhVTlNBRkV8UkVTVFJJQ1RFRHxTQUZFKVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiU1RPUkFHRVxccysoUExBSU58RVhURVJOQUx8RVhURU5ERUR8TUFJTilcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYk1BVENIXFxzKyhGVUxMfFBBUlRJQUx8U0lNUExFKVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiTlVMTFNcXHMrKEZJUlNUfExBU1QpXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJFVkVOVFxccytUUklHR0VSXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoTUFQUElOR3xPUilcXHMrUkVQTEFDRVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKEZST018VE8pXFxzKyhQUk9HUkFNfFNURElOfFNURE9VVClcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYihTSEFSRXxFWENMVVNJVkUpXFxzK01PREVcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYihMRUZUfFJJR0hUKVxccysoT1VURVJcXHMrKT9KT0lOXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoRkVUQ0h8TU9WRSlcXHMrKE5FWFR8UFJJT1J8RklSU1R8TEFTVHxBQlNPTFVURXxSRUxBVElWRXxGT1JXQVJEfEJBQ0tXQVJEKVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiUFJFU0VSVkVcXHMrUk9XU1xcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiRElTQ0FSRFxccytQTEFOU1xcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiUkVGRVJFTkNJTkdcXHMrKE9MRHxORVcpXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJTS0lQXFxzK0xPQ0tFRFxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiR1JPVVBJTkdcXHMrU0VUU1xcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKEJJTkFSWXxJTlNFTlNJVElWRXxTQ1JPTEx8Tk9cXHMrU0NST0xMKVxccysoQ1VSU09SfEZPUilcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYihXSVRIfFdJVEhPVVQpXFxzK0hPTERcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYldJVEhcXHMrKENBU0NBREVEfExPQ0FMKVxccytDSEVDS1xccytPUFRJT05cXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYkVYQ0xVREVcXHMrKFRJRVN8Tk9cXHMrT1RIRVJTKVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiRk9STUFUXFxzKyhURVhUfFhNTHxKU09OfFlBTUwpXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJTRVRcXHMrKChTRVNTSU9OfExPQ0FMKVxccyspP05BTUVTXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJJU1xccysoTk9UXFxzKyk/VU5LTk9XTlxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiU0VDVVJJVFlcXHMrTEFCRUxcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYlNUQU5EQUxPTkVcXHMrKFlFU3xOT3xOT1xccytWQUxVRSlcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYldJVEhcXHMrKE5PXFxzKyk/REFUQVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKEZPUkVJR058U0VUKVxccytEQVRBXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJTRVRcXHMrKENBVEFMT0d8Q09OU1RSQUlOVFMpXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoV0lUSHxGT1IpXFxzK09SRElOQUxJVFlcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYklTXFxzKyhOT1RcXHMrKT9ET0NVTUVOVFxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiWE1MXFxzK09QVElPTlxccysoRE9DVU1FTlR8Q09OVEVOVClcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYihTVFJJUHxQUkVTRVJWRSlcXHMrV0hJVEVTUEFDRVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiTk9cXHMrKEFDVElPTnxNQVhWQUxVRXxNSU5WQUxVRSlcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYlBBUlRJVElPTlxccytCWVxccysoUkFOR0V8TElTVHxIQVNIKVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiQVRcXHMrVElNRVxccytaT05FXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJHUkFOVEVEXFxzK0JZXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJSRVRVUk5cXHMrKFFVRVJZfE5FWFQpXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoQVRUQUNIfERFVEFDSClcXHMrUEFSVElUSU9OXFxiL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJGT1JDRVxccytST1dcXHMrTEVWRUxcXHMrU0VDVVJJVFlcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYihJTkNMVURJTkd8RVhDTFVESU5HKVxccysoQ09NTUVOVFN8Q09OU1RSQUlOVFN8REVGQVVMVFN8SURFTlRJVFl8SU5ERVhFU3xTVEFUSVNUSUNTfFNUT1JBR0V8QUxMKVxcYi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiQVNcXHMrKEFTU0lHTk1FTlR8SU1QTElDSVR8UEVSTUlTU0lWRXxSRVNUUklDVElWRXxFTlVNfFJBTkdFKVxcYi9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBmdW5jdGlvbnMgbmFtZWQgYXMga2V5d29yZHMsIGZvbGxvd2VkIGJ5ICcoJ1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYihGT1JNQVR8RkFNSUxZfFZFUlNJT04pXFxzKlxcKC9cbiAgICAgICAgLy8ga2V5d29yZHM6IHsgYnVpbHRfaW46ICdGT1JNQVQgRkFNSUxZIFZFUlNJT04nIH1cbiAgICAgIH0sXG4gICAgICAvLyBJTkNMVURFICggLi4uICkgaW4gaW5kZXhfcGFyYW1ldGVycyBpbiBDUkVBVEUgVEFCTEVcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGJJTkNMVURFXFxzKlxcKC8sXG4gICAgICAgIGtleXdvcmRzOiAnSU5DTFVERSdcbiAgICAgIH0sXG4gICAgICAvLyBub3QgaGlnaGxpZ2h0IFJBTkdFIGlmIG5vdCBpbiBmcmFtZV9jbGF1c2UgKG5vdCAxMDAlIGNvcnJlY3QsIGJ1dCBzZWVtcyBzYXRpc2ZhY3RvcnkpXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxiUkFOR0UoPyFcXHMqKEJFVFdFRU58VU5CT1VOREVEfENVUlJFTlR8Wy0wLTldKykpL1xuICAgICAgfSxcbiAgICAgIC8vIGRpc2FibGUgaGlnaGxpZ2h0aW5nIGluIGNvbW1hbmRzIENSRUFURSBBR0dSRUdBVEUvQ09MTEFUSU9OL0RBVEFCQVNFL09QRVJUT1IvVEVYVCBTRUFSQ0ggLi4uL1RZUEVcbiAgICAgIC8vIGFuZCBpbiBQTC9wZ1NRTCBSQUlTRSAuLi4gVVNJTkdcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGIoVkVSU0lPTnxPV05FUnxURU1QTEFURXxUQUJMRVNQQUNFfENPTk5FQ1RJT05cXHMrTElNSVR8UFJPQ0VEVVJFfFJFU1RSSUNUfEpPSU58UEFSU0VSfENPUFl8U1RBUlR8RU5EfENPTExBVElPTnxJTlBVVHxBTkFMWVpFfFNUT1JBR0V8TElLRXxERUZBVUxUfERFTElNSVRFUnxFTkNPRElOR3xDT0xVTU58Q09OU1RSQUlOVHxUQUJMRXxTQ0hFTUEpXFxzKj0vXG4gICAgICB9LFxuICAgICAgLy8gUEdfc210aDsgSEFTX3NvbWVfUFJJVklMRUdFXG4gICAgICB7XG4gICAgICAgIC8vIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46IC9cXGIoUEdfXFx3Kz98SEFTX1tBLVpfXStfUFJJVklMRUdFKVxcYi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBleHRyYWN0XG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxiRVhUUkFDVFxccypcXCgvLFxuICAgICAgICBlbmQ6IC9cXGJGUk9NXFxiLyxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIC8vIGJ1aWx0X2luOiAnRVhUUkFDVCcsXG4gICAgICAgICAgdHlwZTogJ0NFTlRVUlkgREFZIERFQ0FERSBET1cgRE9ZIEVQT0NIIEhPVVIgSVNPRE9XIElTT1lFQVIgTUlDUk9TRUNPTkRTICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ01JTExFTk5JVU0gTUlMTElTRUNPTkRTIE1JTlVURSBNT05USCBRVUFSVEVSIFNFQ09ORCBUSU1FWk9ORSBUSU1FWk9ORV9IT1VSICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1RJTUVaT05FX01JTlVURSBXRUVLIFlFQVInXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB4bWxlbGVtZW50LCB4bWxwaSAtIHNwZWNpYWwgTkFNRVxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYihYTUxFTEVNRU5UfFhNTFBJKVxccypcXChcXHMqTkFNRS8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgLy8gYnVpbHRfaW46ICdYTUxFTEVNRU5UIFhNTFBJJyxcbiAgICAgICAgICBrZXl3b3JkOiAnTkFNRSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHhtbHBhcnNlLCB4bWxzZXJpYWxpemVcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGIoWE1MUEFSU0V8WE1MU0VSSUFMSVpFKVxccypcXChcXHMqKERPQ1VNRU5UfENPTlRFTlQpLyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAvLyBidWlsdF9pbjogJ1hNTFBBUlNFIFhNTFNFUklBTElaRScsXG4gICAgICAgICAga2V5d29yZDogJ0RPQ1VNRU5UIENPTlRFTlQnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBTZXF1ZW5jZXMuIFdlIGFjdHVhbGx5IHNraXAgZXZlcnl0aGluZyBiZXR3ZWVuIENBQ0hFfElOQ1JFTUVOVHxNQVhWQUxVRXxNSU5WQUxVRSBhbmRcbiAgICAgIC8vIG5lYXJlc3QgZm9sbG93aW5nIG51bWVyaWMgY29uc3RhbnQuIFdpdGhvdXQgd2l0aCB0cmljayB3ZSBmaW5kIGEgbG90IG9mIFwia2V5d29yZHNcIlxuICAgICAgLy8gaW4gJ2F2cmFzbScgYXV0b2RldGVjdGlvbiB0ZXN0Li4uXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdDQUNIRSBJTkNSRU1FTlQgTUFYVkFMVUUgTUlOVkFMVUUnLFxuICAgICAgICBlbmQ6IGhsanMuQ19OVU1CRVJfUkUsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6ICdCWSBDQUNIRSBJTkNSRU1FTlQgTUFYVkFMVUUgTUlOVkFMVUUnXG4gICAgICB9LFxuICAgICAgLy8gV0lUSHxXSVRIT1VUIFRJTUUgWk9ORSBhcyBwYXJ0IG9mIGRhdGF0eXBlXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBiZWdpbjogL1xcYihXSVRIfFdJVEhPVVQpXFxzK1RJTUVcXHMrWk9ORVxcYi9cbiAgICAgIH0sXG4gICAgICAvLyBJTlRFUlZBTCBvcHRpb25hbCBmaWVsZHNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGJlZ2luOiAvXFxiSU5URVJWQUxcXHMrKFlFQVJ8TU9OVEh8REFZfEhPVVJ8TUlOVVRFfFNFQ09ORCkoXFxzK1RPXFxzKyhNT05USHxIT1VSfE1JTlVURXxTRUNPTkQpKT9cXGIvXG4gICAgICB9LFxuICAgICAgLy8gUHNldWRvLXR5cGVzIHdoaWNoIGFsbG93ZWQgb25seSBhcyByZXR1cm4gdHlwZVxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYlJFVFVSTlNcXHMrKExBTkdVQUdFX0hBTkRMRVJ8VFJJR0dFUnxFVkVOVF9UUklHR0VSfEZEV19IQU5ETEVSfElOREVYX0FNX0hBTkRMRVJ8VFNNX0hBTkRMRVIpXFxiLyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBrZXl3b3JkOiAnUkVUVVJOUycsXG4gICAgICAgICAgdHlwZTogJ0xBTkdVQUdFX0hBTkRMRVIgVFJJR0dFUiBFVkVOVF9UUklHR0VSIEZEV19IQU5ETEVSIElOREVYX0FNX0hBTkRMRVIgVFNNX0hBTkRMRVInXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBLbm93biBmdW5jdGlvbnMgLSBvbmx5IHdoZW4gZm9sbG93ZWQgYnkgJygnXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEZVTkNUSU9OU19SRSArICcpXFxcXHMqXFxcXCgnXG4gICAgICAgIC8vIGtleXdvcmRzOiB7IGJ1aWx0X2luOiBGVU5DVElPTlMgfVxuICAgICAgfSxcbiAgICAgIC8vIFR5cGVzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4oJyArIFRZUEVTX1JFICsgJylcXFxcYicgLy8gcHJldmVudCBoaWdobGlnaHQgYXMgdHlwZSwgc2F5LCAnb2lkJyBpbiAncGdjbGFzcy5vaWQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUWVBFU19SRSArICcpXFxcXHMrUEFUSFxcXFxiJywgLy8gaW4gWE1MVEFCTEVcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBrZXl3b3JkOiAnUEFUSCcsIC8vIGhvcGVmdWxseSBubyBvbmUgd291bGQgdXNlIFBBVEggdHlwZSBpbiBYTUxUQUJMRS4uLlxuICAgICAgICAgIHR5cGU6IFRZUEVTLnJlcGxhY2UoJ1BBVEggJywgJycpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUWVBFU19SRSArICcpXFxcXGInXG4gICAgICB9LFxuICAgICAgLy8gU3RyaW5ncywgc2VlIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL3NxbC1zeW50YXgtbGV4aWNhbC5odG1sI1NRTC1TWU5UQVgtQ09OU1RBTlRTXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcJ1xcJydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnKGV8RXx1JnxVJilcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXFxcXFwuJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICBiZWdpbjogRE9MTEFSX1NUUklORyxcbiAgICAgICAgZW5kOiBET0xMQVJfU1RSSU5HLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IHdlIHdhbnQgdGhlbSBhbGwgZXhjZXB0IFNRTDsgbGlzdGVkIGFyZSB0aG9zZSB3aXRoIGtub3duIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAgICAgLy8gYW5kIFhNTCArIEpTT04ganVzdCBpbiBjYXNlXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogW1xuICAgICAgICAgICAgICAncGdzcWwnLFxuICAgICAgICAgICAgICAncGVybCcsXG4gICAgICAgICAgICAgICdweXRob24nLFxuICAgICAgICAgICAgICAndGNsJyxcbiAgICAgICAgICAgICAgJ3InLFxuICAgICAgICAgICAgICAnbHVhJyxcbiAgICAgICAgICAgICAgJ2phdmEnLFxuICAgICAgICAgICAgICAncGhwJyxcbiAgICAgICAgICAgICAgJ3J1YnknLFxuICAgICAgICAgICAgICAnYmFzaCcsXG4gICAgICAgICAgICAgICdzY2hlbWUnLFxuICAgICAgICAgICAgICAneG1sJyxcbiAgICAgICAgICAgICAgJ2pzb24nXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pLFxuICAgICAgLy8gaWRlbnRpZmllcnMgaW4gcXVvdGVzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcIlwiJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIG51bWJlcnNcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIC8vIGNvbW1lbnRzXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQ09NTUVOVF9NT0RFLFxuICAgICAgLy8gUEwvcGdTUUwgc3RhZmZcbiAgICAgIC8vICVST1dUWVBFLCAlVFlQRSwgJG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyAvLyAlVFlQRSwgJVJPV1RZUEVcbiAgICAgICAgICAgIGJlZ2luOiAnJShST1cpP1RZUEUnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyAkblxuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFxcXFxkKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gI2NvbXBpbGVyIG9wdGlvblxuICAgICAgICAgICAgYmVnaW46ICdeI1xcXFx3JyxcbiAgICAgICAgICAgIGVuZDogJyQnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gPDxsYWJlbGVzPj5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IExBQkVMLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBnc3FsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFBIUFxuQXV0aG9yOiBWaWN0b3IgS2FyYW16aW4gPFZpY3Rvci5LYXJhbXppbkBlbnRlcnJhLWluYy5jb20+XG5Db250cmlidXRvcnM6IEV2Z2VueSBTdGVwYW5pc2NoZXYgPGltYm9sa0BnbWFpbC5jb20+LCBJdmFuIFNhZ2FsYWV2IDxtYW5pYWNAc29mdHdhcmVtYW5pYWNzLm9yZz5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBocC5uZXRcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKlxuICogQHBhcmFtIHtITEpTQXBpfSBobGpzXG4gKiBAcmV0dXJucyB7TGFuZ3VhZ2VEZXRhaWx9XG4gKiAqL1xuZnVuY3Rpb24gcGhwKGhsanMpIHtcbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnXFxcXCQrW2EtekEtWl9cXHg3Zi1cXHhmZl1bYS16QS1aMC05X1xceDdmLVxceGZmXSonICtcbiAgICAgIC8vIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJpZXMgdG8gYXZvaWQgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBQZXJsIGF0IGFsbCBsaWtlICRpZGVudCQsIEBpZGVudEAsIGV0Yy5cbiAgICAgIGAoPyFbQS1aYS16MC05XSkoPyFbJF0pYFxuICB9O1xuICBjb25zdCBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC88XFw/cGhwLywgcmVsZXZhbmNlOiAxMCB9LCAvLyBib29zdCBmb3Igb2J2aW91cyBQSFBcbiAgICAgIHsgYmVnaW46IC88XFw/Wz1dPy8gfSxcbiAgICAgIHsgYmVnaW46IC9cXD8+LyB9IC8vIGVuZCBwaHAgdGFnXG4gICAgXVxuICB9O1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cXCRcXHcrLyB9LFxuICAgICAgeyBiZWdpbjogL1xce1xcJC8sIGVuZDogL1xcfS8gfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgU0lOR0xFX1FVT1RFRCA9IGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtcbiAgICBpbGxlZ2FsOiBudWxsLFxuICB9KTtcbiAgY29uc3QgRE9VQkxFX1FVT1RFRCA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgaWxsZWdhbDogbnVsbCxcbiAgICBjb250YWluczogaGxqcy5RVU9URV9TVFJJTkdfTU9ERS5jb250YWlucy5jb25jYXQoU1VCU1QpLFxuICB9KTtcbiAgY29uc3QgSEVSRURPQyA9IGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgIGJlZ2luOiAvPDw8WyBcXHRdKihcXHcrKVxcbi8sXG4gICAgZW5kOiAvWyBcXHRdKihcXHcrKVxcYi8sXG4gICAgY29udGFpbnM6IGhsanMuUVVPVEVfU1RSSU5HX01PREUuY29udGFpbnMuY29uY2F0KFNVQlNUKSxcbiAgfSk7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBQUkVQUk9DRVNTT1JdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLmluaGVyaXQoU0lOR0xFX1FVT1RFRCwge1xuICAgICAgICBiZWdpbjogXCJiJ1wiLCBlbmQ6IFwiJ1wiLFxuICAgICAgfSksXG4gICAgICBobGpzLmluaGVyaXQoRE9VQkxFX1FVT1RFRCwge1xuICAgICAgICBiZWdpbjogJ2JcIicsIGVuZDogJ1wiJyxcbiAgICAgIH0pLFxuICAgICAgRE9VQkxFX1FVT1RFRCxcbiAgICAgIFNJTkdMRV9RVU9URUQsXG4gICAgICBIRVJFRE9DXG4gICAgXVxuICB9O1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogYFxcXFxiMGJbMDFdKyg/Ol9bMDFdKykqXFxcXGJgIH0sIC8vIEJpbmFyeSB3LyB1bmRlcnNjb3JlIHN1cHBvcnRcbiAgICAgIHsgYmVnaW46IGBcXFxcYjBvWzAtN10rKD86X1swLTddKykqXFxcXGJgIH0sIC8vIE9jdGFscyB3LyB1bmRlcnNjb3JlIHN1cHBvcnRcbiAgICAgIHsgYmVnaW46IGBcXFxcYjB4W1xcXFxkYS1mXSsoPzpfW1xcXFxkYS1mXSspKlxcXFxiYCB9LCAvLyBIZXggdy8gdW5kZXJzY29yZSBzdXBwb3J0XG4gICAgICAvLyBEZWNpbWFscyB3LyB1bmRlcnNjb3JlIHN1cHBvcnQsIHdpdGggb3B0aW9uYWwgZnJhZ21lbnRzIGFuZCBzY2llbnRpZmljIGV4cG9uZW50IChlKSBzdWZmaXguXG4gICAgICB7IGJlZ2luOiBgKD86XFxcXGJcXFxcZCsoPzpfXFxcXGQrKSooXFxcXC4oPzpcXFxcZCsoPzpfXFxcXGQrKSopKT98XFxcXEJcXFxcLlxcXFxkKykoPzplWystXT9cXFxcZCspP2AgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgLy8gTWFnaWMgY29uc3RhbnRzOlxuICAgIC8vIDxodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS5jb25zdGFudHMucHJlZGVmaW5lZC5waHA+XG4gICAgJ19fQ0xBU1NfXyBfX0RJUl9fIF9fRklMRV9fIF9fRlVOQ1RJT05fXyBfX0xJTkVfXyBfX01FVEhPRF9fIF9fTkFNRVNQQUNFX18gX19UUkFJVF9fICcgK1xuICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9vayBsaWtlIGxhbmd1YWdlIGNvbnN0cnVjdCBvciBsYW5ndWFnZSBjb25zdHJ1Y3QgdGhhdCBsb29rIGxpa2UgZnVuY3Rpb246XG4gICAgLy8gTGlzdCBvZiBrZXl3b3JkcyB0aGF0IG1heSBub3QgcmVxdWlyZSBwYXJlbnRoZXNpc1xuICAgICdkaWUgZWNobyBleGl0IGluY2x1ZGUgaW5jbHVkZV9vbmNlIHByaW50IHJlcXVpcmUgcmVxdWlyZV9vbmNlICcgK1xuICAgIC8vIFRoZXNlIGFyZSBub3QgbGFuZ3VhZ2UgY29uc3RydWN0IChmdW5jdGlvbikgYnV0IG9wZXJhdGUgb24gdGhlIGN1cnJlbnRseS1leGVjdXRpbmcgZnVuY3Rpb24gYW5kIGNhbiBhY2Nlc3MgdGhlIGN1cnJlbnQgc3ltYm9sIHRhYmxlXG4gICAgLy8gJ2NvbXBhY3QgZXh0cmFjdCBmdW5jX2dldF9hcmcgZnVuY19nZXRfYXJncyBmdW5jX251bV9hcmdzIGdldF9jYWxsZWRfY2xhc3MgZ2V0X3BhcmVudF9jbGFzcyAnICtcbiAgICAvLyBPdGhlciBrZXl3b3JkczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQucGhwPlxuICAgIC8vIDxodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy50eXBlLWp1Z2dsaW5nLnBocD5cbiAgICAnYXJyYXkgYWJzdHJhY3QgYW5kIGFzIGJpbmFyeSBib29sIGJvb2xlYW4gYnJlYWsgY2FsbGFibGUgY2FzZSBjYXRjaCBjbGFzcyBjbG9uZSBjb25zdCBjb250aW51ZSBkZWNsYXJlICcgK1xuICAgICdkZWZhdWx0IGRvIGRvdWJsZSBlbHNlIGVsc2VpZiBlbXB0eSBlbmRkZWNsYXJlIGVuZGZvciBlbmRmb3JlYWNoIGVuZGlmIGVuZHN3aXRjaCBlbmR3aGlsZSBlbnVtIGV2YWwgZXh0ZW5kcyAnICtcbiAgICAnZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZm9yZWFjaCBmcm9tIGdsb2JhbCBnb3RvIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBpbnN0ZWFkb2YgaW50IGludGVnZXIgaW50ZXJmYWNlICcgK1xuICAgICdpc3NldCBpdGVyYWJsZSBsaXN0IG1hdGNofDAgbWl4ZWQgbmV3IG9iamVjdCBvciBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhbCByZXR1cm4gc3RyaW5nIHN3aXRjaCB0aHJvdyB0cmFpdCAnICtcbiAgICAndHJ5IHVuc2V0IHVzZSB2YXIgdm9pZCB3aGlsZSB4b3IgeWllbGQnLFxuICAgIGxpdGVyYWw6ICdmYWxzZSBudWxsIHRydWUnLFxuICAgIGJ1aWx0X2luOlxuICAgIC8vIFN0YW5kYXJkIFBIUCBsaWJyYXJ5OlxuICAgIC8vIDxodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9ib29rLnNwbC5waHA+XG4gICAgJ0Vycm9yfDAgJyArIC8vIGVycm9yIGlzIHRvbyBjb21tb24gYSBuYW1lIGVzcCBzaW5jZSBQSFAgaXMgY2FzZSBpbi1zZW5zaXRpdmVcbiAgICAnQXBwZW5kSXRlcmF0b3IgQXJndW1lbnRDb3VudEVycm9yIEFyaXRobWV0aWNFcnJvciBBcnJheUl0ZXJhdG9yIEFycmF5T2JqZWN0IEFzc2VydGlvbkVycm9yIEJhZEZ1bmN0aW9uQ2FsbEV4Y2VwdGlvbiBCYWRNZXRob2RDYWxsRXhjZXB0aW9uIENhY2hpbmdJdGVyYXRvciBDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIENvbXBpbGVFcnJvciBDb3VudGFibGUgRGlyZWN0b3J5SXRlcmF0b3IgRGl2aXNpb25CeVplcm9FcnJvciBEb21haW5FeGNlcHRpb24gRW1wdHlJdGVyYXRvciBFcnJvckV4Y2VwdGlvbiBFeGNlcHRpb24gRmlsZXN5c3RlbUl0ZXJhdG9yIEZpbHRlckl0ZXJhdG9yIEdsb2JJdGVyYXRvciBJbmZpbml0ZUl0ZXJhdG9yIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJdGVyYXRvckl0ZXJhdG9yIExlbmd0aEV4Y2VwdGlvbiBMaW1pdEl0ZXJhdG9yIExvZ2ljRXhjZXB0aW9uIE11bHRpcGxlSXRlcmF0b3IgTm9SZXdpbmRJdGVyYXRvciBPdXRPZkJvdW5kc0V4Y2VwdGlvbiBPdXRPZlJhbmdlRXhjZXB0aW9uIE91dGVySXRlcmF0b3IgT3ZlcmZsb3dFeGNlcHRpb24gUGFyZW50SXRlcmF0b3IgUGFyc2VFcnJvciBSYW5nZUV4Y2VwdGlvbiBSZWN1cnNpdmVBcnJheUl0ZXJhdG9yIFJlY3Vyc2l2ZUNhY2hpbmdJdGVyYXRvciBSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yIFJlY3Vyc2l2ZUZpbHRlckl0ZXJhdG9yIFJlY3Vyc2l2ZUl0ZXJhdG9yIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IgUmVjdXJzaXZlUmVnZXhJdGVyYXRvciBSZWN1cnNpdmVUcmVlSXRlcmF0b3IgUmVnZXhJdGVyYXRvciBSdW50aW1lRXhjZXB0aW9uIFNlZWthYmxlSXRlcmF0b3IgU3BsRG91Ymx5TGlua2VkTGlzdCBTcGxGaWxlSW5mbyBTcGxGaWxlT2JqZWN0IFNwbEZpeGVkQXJyYXkgU3BsSGVhcCBTcGxNYXhIZWFwIFNwbE1pbkhlYXAgU3BsT2JqZWN0U3RvcmFnZSBTcGxPYnNlcnZlciBTcGxPYnNlcnZlciBTcGxQcmlvcml0eVF1ZXVlIFNwbFF1ZXVlIFNwbFN0YWNrIFNwbFN1YmplY3QgU3BsU3ViamVjdCBTcGxUZW1wRmlsZU9iamVjdCBUeXBlRXJyb3IgVW5kZXJmbG93RXhjZXB0aW9uIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiBVbmhhbmRsZWRNYXRjaEVycm9yICcgK1xuICAgIC8vIFJlc2VydmVkIGludGVyZmFjZXM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLmludGVyZmFjZXMucGhwPlxuICAgICdBcnJheUFjY2VzcyBDbG9zdXJlIEdlbmVyYXRvciBJdGVyYXRvciBJdGVyYXRvckFnZ3JlZ2F0ZSBTZXJpYWxpemFibGUgU3RyaW5nYWJsZSBUaHJvd2FibGUgVHJhdmVyc2FibGUgV2Vha1JlZmVyZW5jZSBXZWFrTWFwICcgK1xuICAgIC8vIFJlc2VydmVkIGNsYXNzZXM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLmNsYXNzZXMucGhwPlxuICAgICdEaXJlY3RvcnkgX19QSFBfSW5jb21wbGV0ZV9DbGFzcyBwYXJlbnQgcGhwX3VzZXJfZmlsdGVyIHNlbGYgc3RhdGljIHN0ZENsYXNzJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGhwMycsICdwaHA0JywgJ3BocDUnLCAncGhwNicsICdwaHA3JywgJ3BocDgnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVCgnLy8nLCAnJCcsIHtjb250YWluczogW1BSRVBST0NFU1NPUl19KSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ19faGFsdF9jb21waWxlci4rPzsnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgIGtleXdvcmRzOiAnX19oYWx0X2NvbXBpbGVyJ1xuICAgICAgICB9XG4gICAgICApLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJywgYmVnaW46IC9cXCR0aGlzXFxiL1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAge1xuICAgICAgICAvLyBzd2FsbG93IGNvbXBvc2VkIGlkZW50aWZpZXJzIHRvIGF2b2lkIHBhcnNpbmcgdGhlbSBhcyBrZXl3b3Jkc1xuICAgICAgICBiZWdpbjogLyg6OnwtPikrW2EtekEtWl9cXHg3Zi1cXHhmZl1bYS16QS1aMC05X1xceDdmLVxceGZmXSovXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZuIGZ1bmN0aW9uJywgZW5kOiAvWzt7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdbJCVcXFxcW10nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICd1c2UnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc9PicsIC8vIE5vIG1hcmt1cCwganVzdCBhIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW5LZXl3b3JkczogXCJlbnVtXCIsIGlsbGVnYWw6IC9bKCRcIl0vIH0sXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiBcImNsYXNzIGludGVyZmFjZSB0cmFpdFwiLCBpbGxlZ2FsOiAvWzooJFwiXS8gfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBlbmQ6ICc7JyxcbiAgICAgICAgaWxsZWdhbDogL1suJ10vLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3VzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBocDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBQSFAgVGVtcGxhdGVcblJlcXVpcmVzOiB4bWwuanMsIHBocC5qc1xuQXV0aG9yOiBKb3NoIEdvZWJlbCA8aGVsbG9Aam9zaGdvZWJlbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5waHAubmV0XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBwaHBUZW1wbGF0ZShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJQSFAgdGVtcGxhdGVcIixcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88XFw/KHBocHw9KT8vLFxuICAgICAgICBlbmQ6IC9cXD8+LyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwaHAnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHBocCBjbG9zaW5nIHRhZyA/PiB0byBjbG9zZSB0aGUgUEhQIGJsb2NrIHdoZW5cbiAgICAgICAgICAvLyBpbnNpZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgYmxvY2tzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnL1xcXFwqJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwqLycsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2JcIicsXG4gICAgICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2JcXCcnLFxuICAgICAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtcbiAgICAgICAgICAgIGlsbGVnYWw6IG51bGwsXG4gICAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgICBjb250YWluczogbnVsbCxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICAgICAgaWxsZWdhbDogbnVsbCxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBudWxsLFxuICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGhwVGVtcGxhdGU7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUGxhaW4gdGV4dFxuQXV0aG9yOiBFZ29yIFJvZ292IChlLnJvZ292QHBvc3RncmVzcHJvLnJ1KVxuRGVzY3JpcHRpb246IFBsYWluIHRleHQgd2l0aG91dCBhbnkgaGlnaGxpZ2h0aW5nLlxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gcGxhaW50ZXh0KGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUGxhaW4gdGV4dCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3RleHQnLFxuICAgICAgJ3R4dCdcbiAgICBdLFxuICAgIGRpc2FibGVBdXRvZGV0ZWN0OiB0cnVlXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGxhaW50ZXh0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFBvbnlcbkF1dGhvcjogSm9lIEVsaSBNY0lsdmFpbiA8am9lLmVsaS5tYWNAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IFBvbnkgaXMgYW4gb3Blbi1zb3VyY2UsIG9iamVjdC1vcmllbnRlZCwgYWN0b3ItbW9kZWwsXG4gICAgICAgICAgICAgY2FwYWJpbGl0aWVzLXNlY3VyZSwgaGlnaCBwZXJmb3JtYW5jZSBwcm9ncmFtbWluZyBsYW5ndWFnZS5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBvbnlsYW5nLmlvXG4qL1xuXG5mdW5jdGlvbiBwb255KGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhY3RvciBhZGRyZXNzb2YgYW5kIGFzIGJlIGJyZWFrIGNsYXNzIGNvbXBpbGVfZXJyb3IgY29tcGlsZV9pbnRyaW5zaWMgJyArXG4gICAgICAnY29uc3VtZSBjb250aW51ZSBkZWxlZ2F0ZSBkaWdlc3RvZiBkbyBlbHNlIGVsc2VpZiBlbWJlZCBlbmQgZXJyb3IgJyArXG4gICAgICAnZm9yIGZ1biBpZiBpZmRlZiBpbiBpbnRlcmZhY2UgaXMgaXNudCBsYW1iZGEgbGV0IG1hdGNoIG5ldyBub3Qgb2JqZWN0ICcgK1xuICAgICAgJ29yIHByaW1pdGl2ZSByZWNvdmVyIHJlcGVhdCByZXR1cm4gc3RydWN0IHRoZW4gdHJhaXQgdHJ5IHR5cGUgdW50aWwgJyArXG4gICAgICAndXNlIHZhciB3aGVyZSB3aGlsZSB3aXRoIHhvcicsXG4gICAgbWV0YTpcbiAgICAgICdpc28gdmFsIHRhZyB0cm4gYm94IHJlZicsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0aGlzIGZhbHNlIHRydWUnXG4gIH07XG5cbiAgY29uc3QgVFJJUExFX1FVT1RFX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIlwiXCInLFxuICAgIGVuZDogJ1wiXCJcIicsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuXG4gIGNvbnN0IFFVT1RFX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsXG4gICAgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gIH07XG5cbiAgY29uc3QgU0lOR0xFX1FVT1RFX0NIQVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJyxcbiAgICBlbmQ6ICdcXCcnLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFRZUEVfTkFNRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiXz9bQS1aXVtcXFxcd10qJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUklNRURfTkFNRSA9IHtcbiAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXCcnLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IE5VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8XFxcXGIwW2JCXVswMV0rfChcXFxcYlxcXFxkKyhfXFxcXGQrKT8oXFxcXC5cXFxcZCopP3xcXFxcLlxcXFxkKykoW2VFXVstK10/XFxcXGQrKT8pJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogVGhlIGBGVU5DVElPTmAgYW5kIGBDTEFTU2AgbW9kZXMgd2VyZSBpbnRlbnRpb25hbGx5IHJlbW92ZWQgdG8gc2ltcGxpZnlcbiAgICogaGlnaGxpZ2h0aW5nIGFuZCBmaXggY2FzZXMgbGlrZVxuICAgKiBgYGBcbiAgICogaW50ZXJmYWNlIEl0ZXJhdG9yW0E6IEFdXG4gICAqICAgZnVuIGhhc19uZXh0KCk6IEJvb2xcbiAgICogICBmdW4gbmV4dCgpOiBBP1xuICAgKiBgYGBcbiAgICogd2hlcmUgaXQgaXMgdmFsaWQgdG8gaGF2ZSBhIGZ1bmN0aW9uIGhlYWQgd2l0aG91dCBhIGJvZHlcbiAgICovXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUG9ueScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBUWVBFX05BTUUsXG4gICAgICBUUklQTEVfUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBRVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIFNJTkdMRV9RVU9URV9DSEFSX01PREUsXG4gICAgICBQUklNRURfTkFNRSxcbiAgICAgIE5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwb255O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFBvd2VyU2hlbGxcbkRlc2NyaXB0aW9uOiBQb3dlclNoZWxsIGlzIGEgdGFzay1iYXNlZCBjb21tYW5kLWxpbmUgc2hlbGwgYW5kIHNjcmlwdGluZyBsYW5ndWFnZSBidWlsdCBvbiAuTkVULlxuQXV0aG9yOiBEYXZpZCBNb2h1bmRybyA8ZGF2aWRAbW9odW5kcm8uY29tPlxuQ29udHJpYnV0b3JzOiBOaWNob2xhcyBCbHVtaGFyZHQgPG5ibHVtaGFyZHRAbmJsdW1oYXJkdC5jb20+LCBWaWN0b3IgWmhvdSA8T2lDTXVka2lwc0B1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+LCBOaWNvbGFzIExlIEdhbGwgPGNvbnRhY3RAbmxlZ2FsbC5mcj5cbldlYnNpdGU6IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Bvd2Vyc2hlbGwvXG4qL1xuXG5mdW5jdGlvbiBwb3dlcnNoZWxsKGhsanMpIHtcbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgXCJzdHJpbmdcIixcbiAgICBcImNoYXJcIixcbiAgICBcImJ5dGVcIixcbiAgICBcImludFwiLFxuICAgIFwibG9uZ1wiLFxuICAgIFwiYm9vbFwiLFxuICAgIFwiZGVjaW1hbFwiLFxuICAgIFwic2luZ2xlXCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcIkRhdGVUaW1lXCIsXG4gICAgXCJ4bWxcIixcbiAgICBcImFycmF5XCIsXG4gICAgXCJoYXNodGFibGVcIixcbiAgICBcInZvaWRcIlxuICBdO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Bvd2Vyc2hlbGwvc2NyaXB0aW5nL2RldmVsb3Blci9jbWRsZXQvYXBwcm92ZWQtdmVyYnMtZm9yLXdpbmRvd3MtcG93ZXJzaGVsbC1jb21tYW5kc1xuICBjb25zdCBWQUxJRF9WRVJCUyA9XG4gICAgJ0FkZHxDbGVhcnxDbG9zZXxDb3B5fEVudGVyfEV4aXR8RmluZHxGb3JtYXR8R2V0fEhpZGV8Sm9pbnxMb2NrfCcgK1xuICAgICdNb3ZlfE5ld3xPcGVufE9wdGltaXplfFBvcHxQdXNofFJlZG98UmVtb3ZlfFJlbmFtZXxSZXNldHxSZXNpemV8JyArXG4gICAgJ1NlYXJjaHxTZWxlY3R8U2V0fFNob3d8U2tpcHxTcGxpdHxTdGVwfFN3aXRjaHxVbmRvfFVubG9ja3wnICtcbiAgICAnV2F0Y2h8QmFja3VwfENoZWNrcG9pbnR8Q29tcGFyZXxDb21wcmVzc3xDb252ZXJ0fENvbnZlcnRGcm9tfCcgK1xuICAgICdDb252ZXJ0VG98RGlzbW91bnR8RWRpdHxFeHBhbmR8RXhwb3J0fEdyb3VwfEltcG9ydHxJbml0aWFsaXplfCcgK1xuICAgICdMaW1pdHxNZXJnZXxNb3VudHxPdXR8UHVibGlzaHxSZXN0b3JlfFNhdmV8U3luY3xVbnB1Ymxpc2h8VXBkYXRlfCcgK1xuICAgICdBcHByb3ZlfEFzc2VydHxCdWlsZHxDb21wbGV0ZXxDb25maXJtfERlbnl8RGVwbG95fERpc2FibGV8RW5hYmxlfEluc3RhbGx8SW52b2tlfCcgK1xuICAgICdSZWdpc3RlcnxSZXF1ZXN0fFJlc3RhcnR8UmVzdW1lfFN0YXJ0fFN0b3B8U3VibWl0fFN1c3BlbmR8VW5pbnN0YWxsfCcgK1xuICAgICdVbnJlZ2lzdGVyfFdhaXR8RGVidWd8TWVhc3VyZXxQaW5nfFJlcGFpcnxSZXNvbHZlfFRlc3R8VHJhY2V8Q29ubmVjdHwnICtcbiAgICAnRGlzY29ubmVjdHxSZWFkfFJlY2VpdmV8U2VuZHxXcml0ZXxCbG9ja3xHcmFudHxQcm90ZWN0fFJldm9rZXxVbmJsb2NrfCcgK1xuICAgICdVbnByb3RlY3R8VXNlfEZvckVhY2h8U29ydHxUZWV8V2hlcmUnO1xuXG4gIGNvbnN0IENPTVBBUklTT05fT1BFUkFUT1JTID1cbiAgICAnLWFuZHwtYXN8LWJhbmR8LWJub3R8LWJvcnwtYnhvcnwtY2FzZXNlbnNpdGl2ZXwtY2NvbnRhaW5zfC1jZXF8LWNnZXwtY2d0fCcgK1xuICAgICctY2xlfC1jbGlrZXwtY2x0fC1jbWF0Y2h8LWNuZXwtY25vdGNvbnRhaW5zfC1jbm90bGlrZXwtY25vdG1hdGNofC1jb250YWluc3wnICtcbiAgICAnLWNyZXBsYWNlfC1jc3BsaXR8LWVxfC1leGFjdHwtZnwtZmlsZXwtZ2V8LWd0fC1pY29udGFpbnN8LWllcXwtaWdlfC1pZ3R8JyArXG4gICAgJy1pbGV8LWlsaWtlfC1pbHR8LWltYXRjaHwtaW58LWluZXwtaW5vdGNvbnRhaW5zfC1pbm90bGlrZXwtaW5vdG1hdGNofCcgK1xuICAgICctaXJlcGxhY2V8LWlzfC1pc25vdHwtaXNwbGl0fC1qb2lufC1sZXwtbGlrZXwtbHR8LW1hdGNofC1uZXwtbm90fCcgK1xuICAgICctbm90Y29udGFpbnN8LW5vdGlufC1ub3RsaWtlfC1ub3RtYXRjaHwtb3J8LXJlZ2V4fC1yZXBsYWNlfC1zaGx8LXNocnwnICtcbiAgICAnLXNwbGl0fC13aWxkY2FyZHwteG9yJztcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogLy0/W0EtelxcLlxcLV0rXFxiLyxcbiAgICBrZXl3b3JkOlxuICAgICAgJ2lmIGVsc2UgZm9yZWFjaCByZXR1cm4gZG8gd2hpbGUgdW50aWwgZWxzZWlmIGJlZ2luIGZvciB0cmFwIGRhdGEgZHluYW1pY3BhcmFtICcgK1xuICAgICAgJ2VuZCBicmVhayB0aHJvdyBwYXJhbSBjb250aW51ZSBmaW5hbGx5IGluIHN3aXRjaCBleGl0IGZpbHRlciB0cnkgcHJvY2VzcyBjYXRjaCAnICtcbiAgICAgICdoaWRkZW4gc3RhdGljIHBhcmFtZXRlcicsXG4gICAgLy8gXCJlY2hvXCIgcmVsZXZhbmNlIGhhcyBiZWVuIHNldCB0byAwIHRvIGF2b2lkIGF1dG8tZGV0ZWN0IGNvbmZsaWN0cyB3aXRoIHNoZWxsIHRyYW5zY3JpcHRzXG4gICAgYnVpbHRfaW46XG4gICAgICAnYWMgYXNucCBjYXQgY2QgQ0ZTIGNoZGlyIGNsYyBjbGVhciBjbGh5IGNsaSBjbHAgY2xzIGNsdiBjbnNuIGNvbXBhcmUgY29weSBjcCAnICtcbiAgICAgICdjcGkgY3BwIGN1cmwgY3ZwYSBkYnAgZGVsIGRpZmYgZGlyIGRuc24gZWJwIGVjaG98MCBlcGFsIGVwY3N2IGVwc24gZXJhc2UgZXRzbiBleHNuIGZjIGZoeCAnICtcbiAgICAgICdmbCBmdCBmdyBnYWwgZ2JwIGdjIGdjYiBnY2kgZ2NtIGdjcyBnZHIgZ2VyciBnaHkgZ2kgZ2luIGdqYiBnbCBnbSBnbW8gZ3AgZ3BzIGdwdiBncm91cCAnICtcbiAgICAgICdnc24gZ3NucCBnc3YgZ3R6IGd1IGd2IGd3bWkgaCBoaXN0b3J5IGljbSBpZXggaWh5IGlpIGlwYWwgaXBjc3YgaXBtbyBpcHNuIGlybSBpc2UgaXdtaSAnICtcbiAgICAgICdpd3Iga2lsbCBscCBscyBtYW4gbWQgbWVhc3VyZSBtaSBtb3VudCBtb3ZlIG1wIG12IG5hbCBuZHIgbmkgbm1vIG5wc3NjIG5zbiBudiBvZ3Ygb2ggJyArXG4gICAgICAncG9wZCBwcyBwdXNoZCBwd2QgciByYnAgcmNqYiByY3NuIHJkIHJkciByZW4gcmkgcmpiIHJtIHJtZGlyIHJtbyBybmkgcm5wIHJwIHJzbiByc25wICcgK1xuICAgICAgJ3J1amIgcnYgcnZwYSByd21pIHNhamIgc2FsIHNhcHMgc2FzdiBzYnAgc2Mgc2NiIHNlbGVjdCBzZXQgc2hjbSBzaSBzbCBzbGVlcCBzbHMgc29ydCBzcCAnICtcbiAgICAgICdzcGpiIHNwcHMgc3BzdiBzdGFydCBzdHogc3VqYiBzdiBzd21pIHRlZSB0cmNtIHR5cGUgd2dldCB3aGVyZSB3amIgd3JpdGUnXG4gICAgLy8gVE9ETzogJ3ZhbGlkYXRlW0EtWl0rJyBjYW4ndCB3b3JrIGluIGtleXdvcmRzXG4gIH07XG5cbiAgY29uc3QgVElUTEVfTkFNRV9SRSA9IC9cXHdbXFx3XFxkXSooKC0pW1xcd1xcZF0rKSovO1xuXG4gIGNvbnN0IEJBQ0tUSUNLX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ2BbXFxcXHNcXFxcU10nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRcXEIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46IC9cXCR0aGlzL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbXFx3XFxkXVtcXHdcXGRfOl0qL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFwkKG51bGx8dHJ1ZXxmYWxzZSlcXGIvXG4gIH07XG5cbiAgY29uc3QgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL0BcIi8sXG4gICAgICAgIGVuZDogL15cIkAvXG4gICAgICB9XG4gICAgXSxcbiAgICBjb250YWluczogW1xuICAgICAgQkFDS1RJQ0tfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkW0Etel0vLFxuICAgICAgICBlbmQ6IC9bXkEtel0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEFQT1NfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvQCcvLFxuICAgICAgICBlbmQ6IC9eJ0AvXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBTX0hFTFBUQUdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJkb2N0YWdcIixcbiAgICB2YXJpYW50czogW1xuICAgICAgLyogbm8gcGFyYW1hdGVyIGhlbHAgdGFncyAqL1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcLihzeW5vcHNpc3xkZXNjcmlwdGlvbnxleGFtcGxlfGlucHV0c3xvdXRwdXRzfG5vdGVzfGxpbmt8Y29tcG9uZW50fHJvbGV8ZnVuY3Rpb25hbGl0eSkvXG4gICAgICB9LFxuICAgICAgLyogb25lIHBhcmFtZXRlciBoZWxwIHRhZ3MgKi9cbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXC4ocGFyYW1ldGVyfGZvcndhcmRoZWxwdGFyZ2V0bmFtZXxmb3J3YXJkaGVscGNhdGVnb3J5fHJlbW90ZWhlbHBydW5zcGFjZXxleHRlcm5hbGhlbHApXFxzK1xcUysvXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBTX0NPTU1FTlQgPSBobGpzLmluaGVyaXQoXG4gICAgaGxqcy5DT01NRU5UKG51bGwsIG51bGwpLFxuICAgIHtcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIC8qIHNpbmdsZS1saW5lIGNvbW1lbnQgKi9cbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvIy8sXG4gICAgICAgICAgZW5kOiAvJC9cbiAgICAgICAgfSxcbiAgICAgICAgLyogbXVsdGktbGluZSBjb21tZW50ICovXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLzwjLyxcbiAgICAgICAgICBlbmQ6IC8jPi9cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNvbnRhaW5zOiBbIFBTX0hFTFBUQUdTIF1cbiAgICB9XG4gICk7XG5cbiAgY29uc3QgQ01ETEVUUyA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoJy5jb25jYXQoVkFMSURfVkVSQlMsICcpKygtKVtcXFxcd1xcXFxkXSsnKVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBQU19DTEFTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGVudW0nLFxuICAgIGVuZDogL1xccypbe10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuVElUTEVfTU9ERSBdXG4gIH07XG5cbiAgY29uc3QgUFNfRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvZnVuY3Rpb25cXHMrLyxcbiAgICBlbmQ6IC9cXHMqXFx7fCQvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInRpdGxlXCIsXG4gICAgICAgIGJlZ2luOiBUSVRMRV9OQU1FX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY2xhc3NOYW1lOiBcInBhcmFtc1wiLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbIFZBUiBdXG4gICAgICB9XG4gICAgICAvLyBDTURMRVRTXG4gICAgXVxuICB9O1xuXG4gIC8vIFVzaW5nIHN0YXRtZW50LCBwbHVzIHR5cGUsIHBsdXMgYXNzZW1ibHkgbmFtZS5cbiAgY29uc3QgUFNfVVNJTkcgPSB7XG4gICAgYmVnaW46IC91c2luZ1xccy8sXG4gICAgZW5kOiAvJC8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEFQT1NfU1RSSU5HLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46IC8odXNpbmd8YXNzZW1ibHl8Y29tbWFuZHxtb2R1bGV8bmFtZXNwYWNlfHR5cGUpL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBDb21wZXJpc29uIG9wZXJhdG9ycyAmIGZ1bmN0aW9uIG5hbWVkIHBhcmFtZXRlcnMuXG4gIGNvbnN0IFBTX0FSR1VNRU5UUyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gUFMgbGl0ZXJhbHMgYXJlIHByZXR0eSB2ZXJib3NlIHNvIGl0J3MgYSBnb29kIGlkZWEgdG8gYWNjZW50IHRoZW0gYSBiaXQuXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICAgICAgYmVnaW46ICcoJy5jb25jYXQoQ09NUEFSSVNPTl9PUEVSQVRPUlMsICcpXFxcXGInKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAvKC0pW1xcd1xcZF0rLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEhBU0hfU0lHTlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICBiZWdpbjogL0BcXEIvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIC8vIEl0J3MgYSB2ZXJ5IGdlbmVyYWwgcnVsZSBzbyBJJ2xsIG5hcnJvdyBpdCBhIGJpdCB3aXRoIHNvbWUgc3RyaWN0IGJvdW5kYXJpZXNcbiAgLy8gdG8gYXZvaWQgYW55IHBvc3NpYmxlIGZhbHNlLXBvc2l0aXZlIGNvbGxpc2lvbnMhXG4gIGNvbnN0IFBTX01FVEhPRFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvXFxbLipcXF1cXHMqW1xcd10rWyBdPz9cXCgvLFxuICAgIGVuZDogLyQvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICcoJy5jb25jYXQoXG4gICAgICAgICAgS0VZV09SRFMua2V5d29yZC50b1N0cmluZygpLnJlcGxhY2UoL1xccy9nLCAnfCdcbiAgICAgICAgICApLCAnKVxcXFxiJyksXG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgfSlcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgR0VOVExFTUFOU19TRVQgPSBbXG4gICAgLy8gU1RBVElDX01FTUJFUixcbiAgICBQU19NRVRIT0RTLFxuICAgIFBTX0NPTU1FTlQsXG4gICAgQkFDS1RJQ0tfRVNDQVBFLFxuICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgUVVPVEVfU1RSSU5HLFxuICAgIEFQT1NfU1RSSU5HLFxuICAgIC8vIFBTX05FV19PQkpFQ1RfVFlQRSxcbiAgICBDTURMRVRTLFxuICAgIFZBUixcbiAgICBMSVRFUkFMLFxuICAgIEhBU0hfU0lHTlNcbiAgXTtcblxuICBjb25zdCBQU19UWVBFID0ge1xuICAgIGJlZ2luOiAvXFxbLyxcbiAgICBlbmQ6IC9cXF0vLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW10uY29uY2F0KFxuICAgICAgJ3NlbGYnLFxuICAgICAgR0VOVExFTUFOU19TRVQsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIihcIiArIFRZUEVTLmpvaW4oXCJ8XCIpICsgXCIpXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBiZWdpbjogL1tcXC5cXHdcXGRdKy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIClcbiAgfTtcblxuICBQU19NRVRIT0RTLmNvbnRhaW5zLnVuc2hpZnQoUFNfVFlQRSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUG93ZXJTaGVsbCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgXCJwc1wiLFxuICAgICAgXCJwczFcIlxuICAgIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IEdFTlRMRU1BTlNfU0VULmNvbmNhdChcbiAgICAgIFBTX0NMQVNTLFxuICAgICAgUFNfRlVOQ1RJT04sXG4gICAgICBQU19VU0lORyxcbiAgICAgIFBTX0FSR1VNRU5UUyxcbiAgICAgIFBTX1RZUEVcbiAgICApXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcG93ZXJzaGVsbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBQcm9jZXNzaW5nXG5EZXNjcmlwdGlvbjogUHJvY2Vzc2luZyBpcyBhIGZsZXhpYmxlIHNvZnR3YXJlIHNrZXRjaGJvb2sgYW5kIGEgbGFuZ3VhZ2UgZm9yIGxlYXJuaW5nIGhvdyB0byBjb2RlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgdmlzdWFsIGFydHMuXG5BdXRob3I6IEVyaWsgUGFsdWthIDxlcmlrLnBhbHVrYUBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3Byb2Nlc3Npbmcub3JnXG5DYXRlZ29yeTogZ3JhcGhpY3NcbiovXG5cbmZ1bmN0aW9uIHByb2Nlc3NpbmcoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQcm9jZXNzaW5nJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ0J1ZmZlcmVkUmVhZGVyIFBWZWN0b3IgUEZvbnQgUEltYWdlIFBHcmFwaGljcyBIYXNoTWFwIGJvb2xlYW4gYnl0ZSBjaGFyIGNvbG9yICcgK1xuICAgICAgICAnZG91YmxlIGZsb2F0IGludCBsb25nIFN0cmluZyBBcnJheSBGbG9hdERpY3QgRmxvYXRMaXN0IEludERpY3QgSW50TGlzdCBKU09OQXJyYXkgSlNPTk9iamVjdCAnICtcbiAgICAgICAgJ09iamVjdCBTdHJpbmdEaWN0IFN0cmluZ0xpc3QgVGFibGUgVGFibGVSb3cgWE1MICcgK1xuICAgICAgICAvLyBKYXZhIGtleXdvcmRzXG4gICAgICAgICdmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0ICcgK1xuICAgICAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkICcgK1xuICAgICAgICAnZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0ICcgK1xuICAgICAgICAncGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUnLFxuICAgICAgbGl0ZXJhbDogJ1AyRCBQM0QgSEFMRl9QSSBQSSBRVUFSVEVSX1BJIFRBVSBUV09fUEknLFxuICAgICAgdGl0bGU6ICdzZXR1cCBkcmF3JyxcbiAgICAgIGJ1aWx0X2luOiAnZGlzcGxheUhlaWdodCBkaXNwbGF5V2lkdGggbW91c2VZIG1vdXNlWCBtb3VzZVByZXNzZWQgcG1vdXNlWCBwbW91c2VZIGtleSAnICtcbiAgICAgICAgJ2tleUNvZGUgcGl4ZWxzIGZvY3VzZWQgZnJhbWVDb3VudCBmcmFtZVJhdGUgaGVpZ2h0IHdpZHRoICcgK1xuICAgICAgICAnc2l6ZSBjcmVhdGVHcmFwaGljcyBiZWdpbkRyYXcgY3JlYXRlU2hhcGUgbG9hZFNoYXBlIFBTaGFwZSBhcmMgZWxsaXBzZSBsaW5lIHBvaW50ICcgK1xuICAgICAgICAncXVhZCByZWN0IHRyaWFuZ2xlIGJlemllciBiZXppZXJEZXRhaWwgYmV6aWVyUG9pbnQgYmV6aWVyVGFuZ2VudCBjdXJ2ZSBjdXJ2ZURldGFpbCBjdXJ2ZVBvaW50ICcgK1xuICAgICAgICAnY3VydmVUYW5nZW50IGN1cnZlVGlnaHRuZXNzIHNoYXBlIHNoYXBlTW9kZSBiZWdpbkNvbnRvdXIgYmVnaW5TaGFwZSBiZXppZXJWZXJ0ZXggY3VydmVWZXJ0ZXggJyArXG4gICAgICAgICdlbmRDb250b3VyIGVuZFNoYXBlIHF1YWRyYXRpY1ZlcnRleCB2ZXJ0ZXggZWxsaXBzZU1vZGUgbm9TbW9vdGggcmVjdE1vZGUgc21vb3RoIHN0cm9rZUNhcCAnICtcbiAgICAgICAgJ3N0cm9rZUpvaW4gc3Ryb2tlV2VpZ2h0IG1vdXNlQ2xpY2tlZCBtb3VzZURyYWdnZWQgbW91c2VNb3ZlZCBtb3VzZVByZXNzZWQgbW91c2VSZWxlYXNlZCAnICtcbiAgICAgICAgJ21vdXNlV2hlZWwga2V5UHJlc3NlZCBrZXlQcmVzc2Vka2V5UmVsZWFzZWQga2V5VHlwZWQgcHJpbnQgcHJpbnRsbiBzYXZlIHNhdmVGcmFtZSBkYXkgaG91ciAnICtcbiAgICAgICAgJ21pbGxpcyBtaW51dGUgbW9udGggc2Vjb25kIHllYXIgYmFja2dyb3VuZCBjbGVhciBjb2xvck1vZGUgZmlsbCBub0ZpbGwgbm9TdHJva2Ugc3Ryb2tlIGFscGhhICcgK1xuICAgICAgICAnYmx1ZSBicmlnaHRuZXNzIGNvbG9yIGdyZWVuIGh1ZSBsZXJwQ29sb3IgcmVkIHNhdHVyYXRpb24gbW9kZWxYIG1vZGVsWSBtb2RlbFogc2NyZWVuWCBzY3JlZW5ZICcgK1xuICAgICAgICAnc2NyZWVuWiBhbWJpZW50IGVtaXNzaXZlIHNoaW5pbmVzcyBzcGVjdWxhciBhZGQgY3JlYXRlSW1hZ2UgYmVnaW5DYW1lcmEgY2FtZXJhIGVuZENhbWVyYSBmcnVzdHVtICcgK1xuICAgICAgICAnb3J0aG8gcGVyc3BlY3RpdmUgcHJpbnRDYW1lcmEgcHJpbnRQcm9qZWN0aW9uIGN1cnNvciBmcmFtZVJhdGUgbm9DdXJzb3IgZXhpdCBsb29wIG5vTG9vcCBwb3BTdHlsZSAnICtcbiAgICAgICAgJ3B1c2hTdHlsZSByZWRyYXcgYmluYXJ5IGJvb2xlYW4gYnl0ZSBjaGFyIGZsb2F0IGhleCBpbnQgc3RyIHVuYmluYXJ5IHVuaGV4IGpvaW4gbWF0Y2ggbWF0Y2hBbGwgbmYgJyArXG4gICAgICAgICduZmMgbmZwIG5mcyBzcGxpdCBzcGxpdFRva2VucyB0cmltIGFwcGVuZCBhcnJheUNvcHkgY29uY2F0IGV4cGFuZCByZXZlcnNlIHNob3J0ZW4gc29ydCBzcGxpY2Ugc3Vic2V0ICcgK1xuICAgICAgICAnYm94IHNwaGVyZSBzcGhlcmVEZXRhaWwgY3JlYXRlSW5wdXQgY3JlYXRlUmVhZGVyIGxvYWRCeXRlcyBsb2FkSlNPTkFycmF5IGxvYWRKU09OT2JqZWN0IGxvYWRTdHJpbmdzICcgK1xuICAgICAgICAnbG9hZFRhYmxlIGxvYWRYTUwgb3BlbiBwYXJzZVhNTCBzYXZlVGFibGUgc2VsZWN0Rm9sZGVyIHNlbGVjdElucHV0IGJlZ2luUmF3IGJlZ2luUmVjb3JkIGNyZWF0ZU91dHB1dCAnICtcbiAgICAgICAgJ2NyZWF0ZVdyaXRlciBlbmRSYXcgZW5kUmVjb3JkIFByaW50V3JpdGVyc2F2ZUJ5dGVzIHNhdmVKU09OQXJyYXkgc2F2ZUpTT05PYmplY3Qgc2F2ZVN0cmVhbSBzYXZlU3RyaW5ncyAnICtcbiAgICAgICAgJ3NhdmVYTUwgc2VsZWN0T3V0cHV0IHBvcE1hdHJpeCBwcmludE1hdHJpeCBwdXNoTWF0cml4IHJlc2V0TWF0cml4IHJvdGF0ZSByb3RhdGVYIHJvdGF0ZVkgcm90YXRlWiBzY2FsZSAnICtcbiAgICAgICAgJ3NoZWFyWCBzaGVhclkgdHJhbnNsYXRlIGFtYmllbnRMaWdodCBkaXJlY3Rpb25hbExpZ2h0IGxpZ2h0RmFsbG9mZiBsaWdodHMgbGlnaHRTcGVjdWxhciBub0xpZ2h0cyBub3JtYWwgJyArXG4gICAgICAgICdwb2ludExpZ2h0IHNwb3RMaWdodCBpbWFnZSBpbWFnZU1vZGUgbG9hZEltYWdlIG5vVGludCByZXF1ZXN0SW1hZ2UgdGludCB0ZXh0dXJlIHRleHR1cmVNb2RlIHRleHR1cmVXcmFwICcgK1xuICAgICAgICAnYmxlbmQgY29weSBmaWx0ZXIgZ2V0IGxvYWRQaXhlbHMgc2V0IHVwZGF0ZVBpeGVscyBibGVuZE1vZGUgbG9hZFNoYWRlciBQU2hhZGVycmVzZXRTaGFkZXIgc2hhZGVyIGNyZWF0ZUZvbnQgJyArXG4gICAgICAgICdsb2FkRm9udCB0ZXh0IHRleHRGb250IHRleHRBbGlnbiB0ZXh0TGVhZGluZyB0ZXh0TW9kZSB0ZXh0U2l6ZSB0ZXh0V2lkdGggdGV4dEFzY2VudCB0ZXh0RGVzY2VudCBhYnMgY2VpbCAnICtcbiAgICAgICAgJ2NvbnN0cmFpbiBkaXN0IGV4cCBmbG9vciBsZXJwIGxvZyBtYWcgbWFwIG1heCBtaW4gbm9ybSBwb3cgcm91bmQgc3Egc3FydCBhY29zIGFzaW4gYXRhbiBhdGFuMiBjb3MgZGVncmVlcyAnICtcbiAgICAgICAgJ3JhZGlhbnMgc2luIHRhbiBub2lzZSBub2lzZURldGFpbCBub2lzZVNlZWQgcmFuZG9tIHJhbmRvbUdhdXNzaWFuIHJhbmRvbVNlZWQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc2luZztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBQeXRob24gcHJvZmlsZXJcbkRlc2NyaXB0aW9uOiBQeXRob24gcHJvZmlsZXIgcmVzdWx0c1xuQXV0aG9yOiBCcmlhbiBCZWNrIDxleG9nZW5AZ21haWwuY29tPlxuKi9cblxuZnVuY3Rpb24gcHJvZmlsZShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1B5dGhvbiBwcm9maWxlcicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbYS16QS1aX11bXFxcXGRhLXpBLVpfXStcXFxcLltcXFxcZGEtekEtWl9dezEsM30nLFxuICAgICAgICBlbmQ6ICc6JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcobmNhbGxzfHRvdHRpbWV8Y3VtdGltZSknLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICduY2FsbHMgdG90dGltZXwxMCBjdW10aW1lfDEwIGZpbGVuYW1lJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdmdW5jdGlvbiBjYWxscycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogWyBobGpzLkNfTlVNQkVSX01PREUgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICBlbmQ6ICdcXFxcKSQnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9maWxlO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFByb2xvZ1xuRGVzY3JpcHRpb246IFByb2xvZyBpcyBhIGdlbmVyYWwgcHVycG9zZSBsb2dpYyBwcm9ncmFtbWluZyBsYW5ndWFnZSBhc3NvY2lhdGVkIHdpdGggYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UgYW5kIGNvbXB1dGF0aW9uYWwgbGluZ3Vpc3RpY3MuXG5BdXRob3I6IFJhaXZvIExhYW5lbWV0cyA8cmFpdm9AaW5mZG90LmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2xvZ1xuKi9cblxuZnVuY3Rpb24gcHJvbG9nKGhsanMpIHtcbiAgY29uc3QgQVRPTSA9IHtcblxuICAgIGJlZ2luOiAvW2Etel1bQS1aYS16MC05X10qLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBWQVIgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvW0EtWl1bYS16QS1aMC05X10qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9fW0EtWmEtejAtOV9dKi9cbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFBBUkVOVEVEID0ge1xuXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTElTVCA9IHtcblxuICAgIGJlZ2luOiAvXFxbLyxcbiAgICBlbmQ6IC9cXF0vXG4gIH07XG5cbiAgY29uc3QgTElORV9DT01NRU5UID0ge1xuXG4gICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgYmVnaW46IC8lLyxcbiAgICBlbmQ6IC8kLyxcbiAgICBjb250YWluczogWyBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSBdXG4gIH07XG5cbiAgY29uc3QgQkFDS1RJQ0tfU1RSSU5HID0ge1xuXG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL2AvLFxuICAgIGVuZDogL2AvLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gIH07XG5cbiAgY29uc3QgQ0hBUl9DT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIDAnYSBldGMuXG4gICAgYmVnaW46IC8wJyhcXFxcJ3wuKS9cbiAgfTtcblxuICBjb25zdCBTUEFDRV9DT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8wJ1xcXFxzLyAvLyAwJ1xcc1xuICB9O1xuXG4gIGNvbnN0IFBSRURfT1AgPSB7IC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgYmVnaW46IC86LS9cbiAgfTtcblxuICBjb25zdCBpbm5lciA9IFtcblxuICAgIEFUT00sXG4gICAgVkFSLFxuICAgIFBBUkVOVEVELFxuICAgIFBSRURfT1AsXG4gICAgTElTVCxcbiAgICBMSU5FX0NPTU1FTlQsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBCQUNLVElDS19TVFJJTkcsXG4gICAgQ0hBUl9DT0RFLFxuICAgIFNQQUNFX0NPREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gIF07XG5cbiAgUEFSRU5URUQuY29udGFpbnMgPSBpbm5lcjtcbiAgTElTVC5jb250YWlucyA9IGlubmVyO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1Byb2xvZycsXG4gICAgY29udGFpbnM6IGlubmVyLmNvbmNhdChbXG4gICAgICB7IC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICAgIGJlZ2luOiAvXFwuJC9cbiAgICAgIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb2xvZztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiAucHJvcGVydGllc1xuQ29udHJpYnV0b3JzOiBWYWxlbnRpbiBBaXRrZW4gPHZhbGVudGluQG5hbGlzYmcuY29tPiwgRWdvciBSb2dvdiA8ZS5yb2dvdkBwb3N0Z3Jlc3Byby5ydT5cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpLy5wcm9wZXJ0aWVzXG5DYXRlZ29yeTogY29tbW9uLCBjb25maWdcbiovXG5cbmZ1bmN0aW9uIHByb3BlcnRpZXMoaGxqcykge1xuXG4gIC8vIHdoaXRlc3BhY2VzOiBzcGFjZSwgdGFiLCBmb3JtZmVlZFxuICB2YXIgV1MwID0gJ1sgXFxcXHRcXFxcZl0qJztcbiAgdmFyIFdTMSA9ICdbIFxcXFx0XFxcXGZdKyc7XG4gIC8vIGRlbGltaXRlclxuICB2YXIgRVFVQUxfREVMSU0gPSBXUzArJ1s6PV0nK1dTMDtcbiAgdmFyIFdTX0RFTElNID0gV1MxO1xuICB2YXIgREVMSU0gPSAnKCcgKyBFUVVBTF9ERUxJTSArICd8JyArIFdTX0RFTElNICsgJyknO1xuICB2YXIgS0VZX0FMUEhBTlVNID0gJyhbXlxcXFxcXFxcXFxcXFc6PSBcXFxcdFxcXFxmXFxcXG5dfFxcXFxcXFxcLikrJztcbiAgdmFyIEtFWV9PVEhFUiA9ICcoW15cXFxcXFxcXDo9IFxcXFx0XFxcXGZcXFxcbl18XFxcXFxcXFwuKSsnO1xuXG4gIHZhciBERUxJTV9BTkRfVkFMVUUgPSB7XG4gICAgICAgICAgLy8gc2tpcCBERUxJTVxuICAgICAgICAgIGVuZDogREVMSU0sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgLy8gdmFsdWU6IGV2ZXJ5dGhpbmcgdW50aWwgZW5kIG9mIGxpbmUgKGFnYWluLCB0YWtpbmcgaW50byBhY2NvdW50IGJhY2tzbGFzaGVzKVxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgeyBiZWdpbjogJ1xcXFxcXFxcXFxcXFxcXFwnfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogJ1xcXFxcXFxcXFxcXG4nIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnLnByb3BlcnRpZXMnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFxzKlshI10nLCAnJCcpLFxuICAgICAgLy8ga2V5OiBldmVyeXRoaW5nIHVudGlsIHdoaXRlc3BhY2Ugb3IgPSBvciA6ICh0YWtpbmcgaW50byBhY2NvdW50IGJhY2tzbGFzaGVzKVxuICAgICAgLy8gY2FzZSBvZiBhIFwibm9ybWFsXCIga2V5XG4gICAgICB7XG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46IEtFWV9BTFBIQU5VTSArIEVRVUFMX0RFTElNLCByZWxldmFuY2U6IDEgfSxcbiAgICAgICAgICB7IGJlZ2luOiBLRVlfQUxQSEFOVU0gKyBXU19ERUxJTSwgcmVsZXZhbmNlOiAwIH1cbiAgICAgICAgXSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgIGJlZ2luOiBLRVlfQUxQSEFOVU0sXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IERFTElNX0FORF9WQUxVRVxuICAgICAgfSxcbiAgICAgIC8vIGNhc2Ugb2Yga2V5IGNvbnRhaW5pbmcgbm9uLWFscGhhbnVtZXJpYyBjaGFycyA9PiByZWxldmFuY2UgPSAwXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBLRVlfT1RIRVIgKyBERUxJTSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgICAgIGJlZ2luOiBLRVlfT1RIRVIsXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IERFTElNX0FORF9WQUxVRVxuICAgICAgfSxcbiAgICAgIC8vIGNhc2Ugb2YgYW4gZW1wdHkga2V5XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiBLRVlfT1RIRVIgKyBXUzAgKyAnJCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvcGVydGllcztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBQcm90b2NvbCBCdWZmZXJzXG5BdXRob3I6IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuRGVzY3JpcHRpb246IFByb3RvY29sIGJ1ZmZlciBtZXNzYWdlIGRlZmluaXRpb24gZm9ybWF0XG5XZWJzaXRlOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zXG5DYXRlZ29yeTogcHJvdG9jb2xzXG4qL1xuXG5mdW5jdGlvbiBwcm90b2J1ZihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1Byb3RvY29sIEJ1ZmZlcnMnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAncGFja2FnZSBpbXBvcnQgb3B0aW9uIG9wdGlvbmFsIHJlcXVpcmVkIHJlcGVhdGVkIGdyb3VwIG9uZW9mJyxcbiAgICAgIGJ1aWx0X2luOiAnZG91YmxlIGZsb2F0IGludDMyIGludDY0IHVpbnQzMiB1aW50NjQgc2ludDMyIHNpbnQ2NCAnICtcbiAgICAgICAgJ2ZpeGVkMzIgZml4ZWQ2NCBzZml4ZWQzMiBzZml4ZWQ2NCBib29sIHN0cmluZyBieXRlcycsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ21lc3NhZ2UgZW51bSBzZXJ2aWNlJywgZW5kOiAvXFx7LyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgc3RhcnRzOiB7ZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWV9IC8vIGhhY2s6IGVhdGluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCB0aXRsZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3JwYycsXG4gICAgICAgIGVuZDogL1t7O10vLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogJ3JwYyByZXR1cm5zJ1xuICAgICAgfSxcbiAgICAgIHsgLy8gbWF0Y2ggZW51bSBpdGVtcyAocmVsZXZhbmNlKVxuICAgICAgICAvLyBCTEFIID0gLi4uO1xuICAgICAgICBiZWdpbjogL15cXHMqW0EtWl9dKyg/PVxccyo9W15cXG5dKzskKS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvdG9idWY7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUHVwcGV0XG5BdXRob3I6IEpvc2UgTW9saW5hIENvbG1lbmVybyA8Z2F1ZHk0MUBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3B1cHBldC5jb20vZG9jc1xuQ2F0ZWdvcnk6IGNvbmZpZ1xuKi9cblxuZnVuY3Rpb24gcHVwcGV0KGhsanMpIHtcbiAgY29uc3QgUFVQUEVUX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgLyogbGFuZ3VhZ2Uga2V5d29yZHMgKi9cbiAgICAgICdhbmQgY2FzZSBkZWZhdWx0IGVsc2UgZWxzaWYgZmFsc2UgaWYgaW4gaW1wb3J0IGVuaGVyaXRzIG5vZGUgb3IgdHJ1ZSB1bmRlZiB1bmxlc3MgbWFpbiBzZXR0aW5ncyAkc3RyaW5nICcsXG4gICAgbGl0ZXJhbDpcbiAgICAvKiBtZXRhcGFyYW1ldGVycyAqL1xuICAgICAgJ2FsaWFzIGF1ZGl0IGJlZm9yZSBsb2dsZXZlbCBub29wIHJlcXVpcmUgc3Vic2NyaWJlIHRhZyAnICtcbiAgICAgIC8qIG5vcm1hbCBhdHRyaWJ1dGVzICovXG4gICAgICAnb3duZXIgZW5zdXJlIGdyb3VwIG1vZGUgbmFtZXwwIGNoYW5nZXMgY29udGV4dCBmb3JjZSBpbmNsIGxlbnMgbG9hZF9wYXRoIG9ubHlpZiBwcm92aWRlciByZXR1cm5zIHJvb3Qgc2hvd19kaWZmIHR5cGVfY2hlY2sgJyArXG4gICAgICAnZW5fYWRkcmVzcyBpcF9hZGRyZXNzIHJlYWxuYW1lIGNvbW1hbmQgZW52aXJvbm1lbnQgaG91ciBtb251dGUgbW9udGggbW9udGhkYXkgc3BlY2lhbCB0YXJnZXQgd2Vla2RheSAnICtcbiAgICAgICdjcmVhdGVzIGN3ZCBvZ291dHB1dCByZWZyZXNoIHJlZnJlc2hvbmx5IHRyaWVzIHRyeV9zbGVlcCB1bWFzayBiYWNrdXAgY2hlY2tzdW0gY29udGVudCBjdGltZSBmb3JjZSBpZ25vcmUgJyArXG4gICAgICAnbGlua3MgbXRpbWUgcHVyZ2UgcmVjdXJzZSByZWN1cnNlbGltaXQgcmVwbGFjZSBzZWxpbnV4X2lnbm9yZV9kZWZhdWx0cyBzZWxyYW5nZSBzZWxyb2xlIHNlbHR5cGUgc2VsdXNlciBzb3VyY2UgJyArXG4gICAgICAnc291aXJjZV9wZXJtaXNzaW9ucyBzb3VyY2VzZWxlY3QgdmFsaWRhdGVfY21kIHZhbGlkYXRlX3JlcGxhY2VtZW50IGFsbG93ZHVwZSBhdHRyaWJ1dGVfbWVtYmVyc2hpcCBhdXRoX21lbWJlcnNoaXAgZm9yY2Vsb2NhbCBnaWQgJyArXG4gICAgICAnaWFfbG9hZF9tb2R1bGUgbWVtYmVycyBzeXN0ZW0gaG9zdF9hbGlhc2VzIGlwIGFsbG93ZWRfdHJ1bmtfdmxhbnMgZGVzY3JpcHRpb24gZGV2aWNlX3VybCBkdXBsZXggZW5jYXBzdWxhdGlvbiBldGhlcmNoYW5uZWwgJyArXG4gICAgICAnbmF0aXZlX3ZsYW4gc3BlZWQgcHJpbmNpcGFscyBhbGxvd19yb290IGF1dGhfY2xhc3MgYXV0aF90eXBlIGF1dGhlbnRpY2F0ZV91c2VyIGtfb2ZfbiBtZWNoYW5pc21zIHJ1bGUgc2Vzc2lvbl9vd25lciBzaGFyZWQgb3B0aW9ucyAnICtcbiAgICAgICdkZXZpY2UgZnN0eXBlIGVuYWJsZSBoYXNyZXN0YXJ0IGRpcmVjdG9yeSBwcmVzZW50IGFic2VudCBsaW5rIGF0Ym9vdCBibG9ja2RldmljZSBkZXZpY2UgZHVtcCBwYXNzIHJlbW91bnRzIHBvbGxlcl90YWcgdXNlICcgK1xuICAgICAgJ21lc3NhZ2Ugd2l0aHBhdGggYWRtaW5maWxlIGFsbG93X3ZpcnR1YWwgYWxsb3djZHJvbSBjYXRlZ29yeSBjb25maWdmaWxlcyBmbGF2b3IgaW5zdGFsbF9vcHRpb25zIGluc3RhbmNlIHBhY2thZ2Vfc2V0dGluZ3MgcGxhdGZvcm0gJyArXG4gICAgICAncmVzcG9uc2VmaWxlIHN0YXR1cyB1bmluc3RhbGxfb3B0aW9ucyB2ZW5kb3IgdW5sZXNzX3N5c3RlbV91c2VyIHVubGVzc191aWQgYmluYXJ5IGNvbnRyb2wgZmxhZ3MgaGFzc3RhdHVzIG1hbmlmZXN0IHBhdHRlcm4gcmVzdGFydCBydW5uaW5nICcgK1xuICAgICAgJ3N0YXJ0IHN0b3AgYWxsb3dkdXBlIGF1dGhzIGV4cGlyeSBnaWQgZ3JvdXBzIGhvbWUgaXRlcmF0aW9ucyBrZXlfbWVtYmVyc2hpcCBrZXlzIG1hbmFnZWhvbWUgbWVtYmVyc2hpcCBwYXNzd29yZCBwYXNzd29yZF9tYXhfYWdlICcgK1xuICAgICAgJ3Bhc3N3b3JkX21pbl9hZ2UgcHJvZmlsZV9tZW1iZXJzaGlwIHByb2ZpbGVzIHByb2plY3QgcHVyZ2Vfc3NoX2tleXMgcm9sZV9tZW1iZXJzaGlwIHJvbGVzIHNhbHQgc2hlbGwgdWlkIGJhc2V1cmwgY29zdCBkZXNjciBlbmFibGVkICcgK1xuICAgICAgJ2VuYWJsZWdyb3VwcyBleGNsdWRlIGZhaWxvdmVybWV0aG9kIGdwZ2NoZWNrIGdwZ2tleSBodHRwX2NhY2hpbmcgaW5jbHVkZSBpbmNsdWRlcGtncyBrZWVwYWxpdmUgbWV0YWRhdGFfZXhwaXJlIG1ldGFsaW5rIG1pcnJvcmxpc3QgJyArXG4gICAgICAncHJpb3JpdHkgcHJvdGVjdCBwcm94eSBwcm94eV9wYXNzd29yZCBwcm94eV91c2VybmFtZSByZXBvX2dwZ2NoZWNrIHMzX2VuYWJsZWQgc2tpcF9pZl91bmF2YWlsYWJsZSBzc2xjYWNlcnQgc3NsY2xpZW50Y2VydCBzc2xjbGllbnRrZXkgJyArXG4gICAgICAnc3NsdmVyaWZ5IG1vdW50ZWQnLFxuICAgIGJ1aWx0X2luOlxuICAgIC8qIGNvcmUgZmFjdHMgKi9cbiAgICAgICdhcmNoaXRlY3R1cmUgYXVnZWFzdmVyc2lvbiBibG9ja2RldmljZXMgYm9hcmRtYW51ZmFjdHVyZXIgYm9hcmRwcm9kdWN0bmFtZSBib2FyZHNlcmlhbG51bWJlciBjZmtleSBkaGNwX3NlcnZlcnMgJyArXG4gICAgICAnZG9tYWluIGVjMl8gZWMyX3VzZXJkYXRhIGZhY3RlcnZlcnNpb24gZmlsZXN5c3RlbXMgbGRvbSBmcWRuIGdpZCBoYXJkd2FyZWlzYSBoYXJkd2FyZW1vZGVsIGhvc3RuYW1lIGlkfDAgaW50ZXJmYWNlcyAnICtcbiAgICAgICdpcGFkZHJlc3MgaXBhZGRyZXNzXyBpcGFkZHJlc3M2IGlwYWRkcmVzczZfIGlwaG9zdG51bWJlciBpc192aXJ0dWFsIGtlcm5lbCBrZXJuZWxtYWp2ZXJzaW9uIGtlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbiAnICtcbiAgICAgICdrZXJuZWxyZWxlYXNlIGtlcm5lbHZlcnNpb24gbHNiZGlzdGNvZGVuYW1lIGxzYmRpc3RkZXNjcmlwdGlvbiBsc2JkaXN0aWQgbHNiZGlzdHJlbGVhc2UgbHNibWFqZGlzdHJlbGVhc2UgbHNibWlub3JkaXN0cmVsZWFzZSAnICtcbiAgICAgICdsc2JyZWxlYXNlIG1hY2FkZHJlc3MgbWFjYWRkcmVzc18gbWFjb3N4X2J1aWxkdmVyc2lvbiBtYWNvc3hfcHJvZHVjdG5hbWUgbWFjb3N4X3Byb2R1Y3R2ZXJzaW9uIG1hY29zeF9wcm9kdWN0dmVyc29uX21ham9yICcgK1xuICAgICAgJ21hY29zeF9wcm9kdWN0dmVyc2lvbl9taW5vciBtYW51ZmFjdHVyZXIgbWVtb3J5ZnJlZSBtZW1vcnlzaXplIG5ldG1hc2sgbWV0bWFza18gbmV0d29ya18gb3BlcmF0aW5nc3lzdGVtIG9wZXJhdGluZ3N5c3RlbW1hanJlbGVhc2UgJyArXG4gICAgICAnb3BlcmF0aW5nc3lzdGVtcmVsZWFzZSBvc2ZhbWlseSBwYXJ0aXRpb25zIHBhdGggcGh5c2ljYWxwcm9jZXNzb3Jjb3VudCBwcm9jZXNzb3IgcHJvY2Vzc29yY291bnQgcHJvZHVjdG5hbWUgcHMgcHVwcGV0dmVyc2lvbiAnICtcbiAgICAgICdydWJ5c2l0ZWRpciBydWJ5dmVyc2lvbiBzZWxpbnV4IHNlbGludXhfY29uZmlnX21vZGUgc2VsaW51eF9jb25maWdfcG9saWN5IHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfZW5mb3JjZWQgJyArXG4gICAgICAnc2VsaW51eF9wb2xpY3l2ZXJzaW9uIHNlcmlhbG51bWJlciBzcF8gc3NoZHNha2V5IHNzaGVjZHNha2V5IHNzaHJzYWtleSBzd2FwZW5jcnlwdGVkIHN3YXBmcmVlIHN3YXBzaXplIHRpbWV6b25lIHR5cGUgdW5pcXVlaWQgdXB0aW1lICcgK1xuICAgICAgJ3VwdGltZV9kYXlzIHVwdGltZV9ob3VycyB1cHRpbWVfc2Vjb25kcyB1dWlkIHZpcnR1YWwgdmxhbnMgeGVuZG9tYWlucyB6ZnNfdmVyc2lvbiB6b25lbmFlIHpvbmVzIHpwb29sX3ZlcnNpb24nXG4gIH07XG5cbiAgY29uc3QgQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgnIycsICckJyk7XG5cbiAgY29uc3QgSURFTlRfUkUgPSAnKFtBLVphLXpfXXw6OikoXFxcXHd8OjopKic7XG5cbiAgY29uc3QgVElUTEUgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgYmVnaW46IElERU5UX1JFXG4gIH0pO1xuXG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogJ1xcXFwkJyArIElERU5UX1JFXG4gIH07XG5cbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUklBQkxFXG4gICAgXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQdXBwZXQnLFxuICAgIGFsaWFzZXM6IFsgJ3BwJyBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5ULFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJ1xcXFx7fDsnLFxuICAgICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEUsXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnXFxcXHMrXFxcXHsnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcey8sXG4gICAgICAgICAgICBlbmQ6IC9cXH0vLFxuICAgICAgICAgICAga2V5d29yZHM6IFBVUFBFVF9LRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnW2EtekEtWl9dK1xcXFxzKj0+JyxcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6ICc9PicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgVkFSSUFCTEVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwdXBwZXQ7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUHVyZUJBU0lDXG5BdXRob3I6IFRyaXN0YW5vIEFqbW9uZSA8dGFqbW9uZUBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogU3ludGF4IGhpZ2hsaWdodGluZyBmb3IgUHVyZUJBU0lDICh2LjUuMDAtNS42MCkuIE5vIGlubGluZSBBU00gaGlnaGxpZ2h0aW5nLiAodi4xLjIsIE1heSAyMDE3KVxuQ3JlZGl0czogSSd2ZSB0YWtlbiBpbnNwaXJhdGlvbiBmcm9tIHRoZSBQdXJlQmFzaWMgbGFuZ3VhZ2UgZmlsZSBmb3IgR2VTSGksIGNyZWF0ZWQgYnkgR3VzdGF2byBKdWxpbyBGaW9yZW56YSAoR3VTaEgpLlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cucHVyZWJhc2ljLmNvbVxuKi9cblxuLy8gQmFzZSBkZWFmdWx0IGNvbG9ycyBpbiBQQiBJREU6IGJhY2tncm91bmQ6ICNGRkZGREY7IGZvcmVncm91bmQ6ICMwMDAwMDA7XG5cbmZ1bmN0aW9uIHB1cmViYXNpYyhobGpzKSB7XG4gIGNvbnN0IFNUUklOR1MgPSB7IC8vIFBCIElERSBjb2xvcjogIzAwODBGRiAoQXp1cmUgUmFkaWFuY2UpXG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJyh+KT9cIicsXG4gICAgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgfTtcbiAgY29uc3QgQ09OU1RBTlRTID0geyAvLyBQQiBJREUgY29sb3I6ICM5MjRCNzIgKENhbm5vbiBQaW5rKVxuICAgIC8vICBcIiNcIiArIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgKyBsZXR0ZXJzLCBkaWdpdHMgb3IgdW5kZXJzY29yZXMgKyAob3B0aW9uYWwpIFwiJFwiXG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJyNbYS16QS1aX11cXFxcdypcXFxcJD8nXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUHVyZUJBU0lDJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncGInLFxuICAgICAgJ3BiaSdcbiAgICBdLFxuICAgIGtleXdvcmRzOiAvLyBQQiBJREUgY29sb3I6ICMwMDY2NjYgKEJsdWUgU3RvbmUpICsgQm9sZFxuICAgICAgLy8gS2V5d29yZHMgZnJvbSBhbGwgdmVyc2lvbiBvZiBQdXJlQkFTSUMgNS4wMCB1cHdhcmQgLi4uXG4gICAgICAnQWxpZ24gQW5kIEFycmF5IEFzIEJyZWFrIENhbGxEZWJ1Z2dlciBDYXNlIENvbXBpbGVyQ2FzZSBDb21waWxlckRlZmF1bHQgJyArXG4gICAgICAnQ29tcGlsZXJFbHNlIENvbXBpbGVyRWxzZUlmIENvbXBpbGVyRW5kSWYgQ29tcGlsZXJFbmRTZWxlY3QgQ29tcGlsZXJFcnJvciAnICtcbiAgICAgICdDb21waWxlcklmIENvbXBpbGVyU2VsZWN0IENvbXBpbGVyV2FybmluZyBDb250aW51ZSBEYXRhIERhdGFTZWN0aW9uIERlYnVnICcgK1xuICAgICAgJ0RlYnVnTGV2ZWwgRGVjbGFyZSBEZWNsYXJlQyBEZWNsYXJlQ0RMTCBEZWNsYXJlRExMIERlY2xhcmVNb2R1bGUgRGVmYXVsdCAnICtcbiAgICAgICdEZWZpbmUgRGltIERpc2FibGVBU00gRGlzYWJsZURlYnVnZ2VyIERpc2FibGVFeHBsaWNpdCBFbHNlIEVsc2VJZiBFbmFibGVBU00gJyArXG4gICAgICAnRW5hYmxlRGVidWdnZXIgRW5hYmxlRXhwbGljaXQgRW5kIEVuZERhdGFTZWN0aW9uIEVuZERlY2xhcmVNb2R1bGUgRW5kRW51bWVyYXRpb24gJyArXG4gICAgICAnRW5kSWYgRW5kSW1wb3J0IEVuZEludGVyZmFjZSBFbmRNYWNybyBFbmRNb2R1bGUgRW5kUHJvY2VkdXJlIEVuZFNlbGVjdCAnICtcbiAgICAgICdFbmRTdHJ1Y3R1cmUgRW5kU3RydWN0dXJlVW5pb24gRW5kV2l0aCBFbnVtZXJhdGlvbiBFbnVtZXJhdGlvbkJpbmFyeSBFeHRlbmRzICcgK1xuICAgICAgJ0Zha2VSZXR1cm4gRm9yIEZvckVhY2ggRm9yRXZlciBHbG9iYWwgR29zdWIgR290byBJZiBJbXBvcnQgSW1wb3J0QyAnICtcbiAgICAgICdJbmNsdWRlQmluYXJ5IEluY2x1ZGVGaWxlIEluY2x1ZGVQYXRoIEludGVyZmFjZSBMaXN0IE1hY3JvIE1hY3JvRXhwYW5kZWRDb3VudCAnICtcbiAgICAgICdNYXAgTW9kdWxlIE5ld0xpc3QgTmV3TWFwIE5leHQgTm90IE9yIFByb2NlZHVyZSBQcm9jZWR1cmVDICcgK1xuICAgICAgJ1Byb2NlZHVyZUNETEwgUHJvY2VkdXJlRExMIFByb2NlZHVyZVJldHVybiBQcm90ZWN0ZWQgUHJvdG90eXBlIFByb3RvdHlwZUMgUmVEaW0gJyArXG4gICAgICAnUmVhZCBSZXBlYXQgUmVzdG9yZSBSZXR1cm4gUnVudGltZSBTZWxlY3QgU2hhcmVkIFN0YXRpYyBTdGVwIFN0cnVjdHVyZSAnICtcbiAgICAgICdTdHJ1Y3R1cmVVbmlvbiBTd2FwIFRocmVhZGVkIFRvIFVuZGVmaW5lTWFjcm8gVW50aWwgVW50aWwgIFVudXNlTW9kdWxlICcgK1xuICAgICAgJ1VzZU1vZHVsZSBXZW5kIFdoaWxlIFdpdGggWEluY2x1ZGVGaWxlIFhPcicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIENPTU1FTlRTIHwgUEIgSURFIGNvbG9yOiAjMDBBQUFBIChQZXJzaWFuIEdyZWVuKVxuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG5cbiAgICAgIHsgLy8gUFJPQ0VEVVJFUyBERUZJTklUSU9OU1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoUHJvY2VkdXJlfERlY2xhcmUpKEN8Q0RMTHxETEwpP1xcXFxiJyxcbiAgICAgICAgZW5kOiAnXFxcXCgnLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IC8vIFBST0NFRFVSRSBLRVlXT1JEUyB8IFBCIElERSBjb2xvcjogIzAwNjY2NiAoQmx1ZSBTdG9uZSkgKyBCb2xkXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKFByb2NlZHVyZXxEZWNsYXJlKShDfENETEx8RExMKT8nLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBQUk9DRURVUkUgUkVUVVJOIFRZUEUgU0VUVElORyB8IFBCIElERSBjb2xvcjogIzAwMDAwMCAoQmxhY2spXG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXC5cXFxcdyonXG4gICAgICAgICAgICAvLyBlbmQ6ICcgJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFIC8vIFBST0NFRFVSRSBOQU1FIHwgUEIgSURFIGNvbG9yOiAjMDA2NjY2IChCbHVlIFN0b25lKVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HUyxcbiAgICAgIENPTlNUQU5UU1xuICAgIF1cbiAgfTtcbn1cblxuLyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOR0VMT0dcbiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAtIHYuMS4yICgyMDE3LTA1LTEyKVxuICAgICAgICAtLSBCVUctRklYOiBTb21lIGtleXdvcmRzIHdlcmUgYWNjaWRlbnRhbGx5IGpveW5lZCB0b2dldGhlci4gTm93IGZpeGVkLlxuICAgIC0gdi4xLjEgKDIwMTctMDQtMzApXG4gICAgICAgIC0tIFVwZGF0ZWQgdG8gUHVyZUJBU0lDIDUuNjAuXG4gICAgICAgIC0tIEtleXdvcmRzIGxpc3Qgbm93IGJ1aWx0IGJ5IGV4dHJhY3RpbmcgdGhlbSBmcm9tIHRoZSBQdXJlQkFTSUMgU0RLJ3NcbiAgICAgICAgICAgXCJTeW50YXhIaWxpZ2h0aW5nLmRsbFwiIChmcm9tIGVhY2ggUHVyZUJBU0lDIHZlcnNpb24pLiBUb2tlbnMgZnJvbSBlYWNoXG4gICAgICAgICAgIHZlcnNpb24gYXJlIGFkZGVkIHRvIHRoZSBsaXN0LCBhbmQgcmVuYW1lZCBvciByZW1vdmVkIHRva2VucyBhcmUga2VwdFxuICAgICAgICAgICBmb3IgdGhlIHNha2Ugb2YgY292ZXJpbmcgYWxsIHZlcnNpb25zIG9mIHRoZSBsYW5ndWFnZSBmcm9tIFB1cmVCQVNJQ1xuICAgICAgICAgICB2NS4wMCB1cHdhcmQuIChOT1RFOiBjdXJyZW50bHksIHRoZXJlIGFyZSBubyByZW5hbWVkIG9yIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgdG9rZW5zIGluIHRoZSBrZXl3b3JkcyBsaXN0KS4gRm9yIG1vcmUgaW5mbywgc2VlOlxuICAgICAgICAgICAtLSBodHRwOi8vd3d3LnB1cmViYXNpYy5mci9lbmdsaXNoL3ZpZXd0b3BpYy5waHA/JnA9NTA2MjY5XG4gICAgICAgICAgIC0tIGh0dHBzOi8vZ2l0aHViLmNvbS90YWptb25lL3B1cmViYXNpYy1hcmNoaXZlcy90cmVlL21hc3Rlci9zeW50YXgtaGlnaGxpZ2h0aW5nL2d1aWRlbGluZXNcbiAgICAtIHYuMS4wIChBcHJpbCAyMDE2KVxuICAgICAgICAtLSBGaXJzdCByZWxlYXNlXG4gICAgICAgIC0tIEtleXdvcmRzIGxpc3QgdGFrZW4gYW5kIGFkYXB0ZWQgZnJvbSBHdVNoSCdzIChHdXN0YXZvIEp1bGlvIEZpb3JlbnphKVxuICAgICAgICAgICBQdXJlQmFzaWMgbGFuZ3VhZ2UgZmlsZSBmb3IgR2VTSGk6XG4gICAgICAgICAgIC0tIGh0dHBzOi8vZ2l0aHViLmNvbS9lYXN5Ym9vay9nZXNoaS9ibG9iL21hc3Rlci9nZXNoaS9wdXJlYmFzaWMucGhwXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHB1cmViYXNpYztcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbG9va2FoZWFkKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJyg/PScsIHJlLCAnKScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IFB5dGhvblxuRGVzY3JpcHRpb246IFB5dGhvbiBpcyBhbiBpbnRlcnByZXRlZCwgb2JqZWN0LW9yaWVudGVkLCBoaWdoLWxldmVsIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGggZHluYW1pYyBzZW1hbnRpY3MuXG5XZWJzaXRlOiBodHRwczovL3d3dy5weXRob24ub3JnXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBweXRob24oaGxqcykge1xuICBjb25zdCBSRVNFUlZFRF9XT1JEUyA9IFtcbiAgICAnYW5kJyxcbiAgICAnYXMnLFxuICAgICdhc3NlcnQnLFxuICAgICdhc3luYycsXG4gICAgJ2F3YWl0JyxcbiAgICAnYnJlYWsnLFxuICAgICdjbGFzcycsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAnZGVmJyxcbiAgICAnZGVsJyxcbiAgICAnZWxpZicsXG4gICAgJ2Vsc2UnLFxuICAgICdleGNlcHQnLFxuICAgICdmaW5hbGx5JyxcbiAgICAnZm9yJyxcbiAgICAnZnJvbScsXG4gICAgJ2dsb2JhbCcsXG4gICAgJ2lmJyxcbiAgICAnaW1wb3J0JyxcbiAgICAnaW4nLFxuICAgICdpcycsXG4gICAgJ2xhbWJkYScsXG4gICAgJ25vbmxvY2FsfDEwJyxcbiAgICAnbm90JyxcbiAgICAnb3InLFxuICAgICdwYXNzJyxcbiAgICAncmFpc2UnLFxuICAgICdyZXR1cm4nLFxuICAgICd0cnknLFxuICAgICd3aGlsZScsXG4gICAgJ3dpdGgnLFxuICAgICd5aWVsZCdcbiAgXTtcblxuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgJ19faW1wb3J0X18nLFxuICAgICdhYnMnLFxuICAgICdhbGwnLFxuICAgICdhbnknLFxuICAgICdhc2NpaScsXG4gICAgJ2JpbicsXG4gICAgJ2Jvb2wnLFxuICAgICdicmVha3BvaW50JyxcbiAgICAnYnl0ZWFycmF5JyxcbiAgICAnYnl0ZXMnLFxuICAgICdjYWxsYWJsZScsXG4gICAgJ2NocicsXG4gICAgJ2NsYXNzbWV0aG9kJyxcbiAgICAnY29tcGlsZScsXG4gICAgJ2NvbXBsZXgnLFxuICAgICdkZWxhdHRyJyxcbiAgICAnZGljdCcsXG4gICAgJ2RpcicsXG4gICAgJ2Rpdm1vZCcsXG4gICAgJ2VudW1lcmF0ZScsXG4gICAgJ2V2YWwnLFxuICAgICdleGVjJyxcbiAgICAnZmlsdGVyJyxcbiAgICAnZmxvYXQnLFxuICAgICdmb3JtYXQnLFxuICAgICdmcm96ZW5zZXQnLFxuICAgICdnZXRhdHRyJyxcbiAgICAnZ2xvYmFscycsXG4gICAgJ2hhc2F0dHInLFxuICAgICdoYXNoJyxcbiAgICAnaGVscCcsXG4gICAgJ2hleCcsXG4gICAgJ2lkJyxcbiAgICAnaW5wdXQnLFxuICAgICdpbnQnLFxuICAgICdpc2luc3RhbmNlJyxcbiAgICAnaXNzdWJjbGFzcycsXG4gICAgJ2l0ZXInLFxuICAgICdsZW4nLFxuICAgICdsaXN0JyxcbiAgICAnbG9jYWxzJyxcbiAgICAnbWFwJyxcbiAgICAnbWF4JyxcbiAgICAnbWVtb3J5dmlldycsXG4gICAgJ21pbicsXG4gICAgJ25leHQnLFxuICAgICdvYmplY3QnLFxuICAgICdvY3QnLFxuICAgICdvcGVuJyxcbiAgICAnb3JkJyxcbiAgICAncG93JyxcbiAgICAncHJpbnQnLFxuICAgICdwcm9wZXJ0eScsXG4gICAgJ3JhbmdlJyxcbiAgICAncmVwcicsXG4gICAgJ3JldmVyc2VkJyxcbiAgICAncm91bmQnLFxuICAgICdzZXQnLFxuICAgICdzZXRhdHRyJyxcbiAgICAnc2xpY2UnLFxuICAgICdzb3J0ZWQnLFxuICAgICdzdGF0aWNtZXRob2QnLFxuICAgICdzdHInLFxuICAgICdzdW0nLFxuICAgICdzdXBlcicsXG4gICAgJ3R1cGxlJyxcbiAgICAndHlwZScsXG4gICAgJ3ZhcnMnLFxuICAgICd6aXAnXG4gIF07XG5cbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgJ19fZGVidWdfXycsXG4gICAgJ0VsbGlwc2lzJyxcbiAgICAnRmFsc2UnLFxuICAgICdOb25lJyxcbiAgICAnTm90SW1wbGVtZW50ZWQnLFxuICAgICdUcnVlJ1xuICBdO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbFxuICAvLyBUT0RPOiBDb3VsZCB0aGVzZSBiZSBzdXBwbGVtZW50ZWQgYnkgYSBDYW1lbENhc2UgbWF0Y2hlciBpbiBjZXJ0YWluXG4gIC8vIGNvbnRleHRzLCBsZWF2aW5nIHRoZXNlIHJlbWFpbmluZyBvbmx5IGZvciByZWxldmFuY2UgaGludGluZz9cbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgXCJBbnlcIixcbiAgICBcIkNhbGxhYmxlXCIsXG4gICAgXCJDb3JvdXRpbmVcIixcbiAgICBcIkRpY3RcIixcbiAgICBcIkxpc3RcIixcbiAgICBcIkxpdGVyYWxcIixcbiAgICBcIkdlbmVyaWNcIixcbiAgICBcIk9wdGlvbmFsXCIsXG4gICAgXCJTZXF1ZW5jZVwiLFxuICAgIFwiU2V0XCIsXG4gICAgXCJUdXBsZVwiLFxuICAgIFwiVHlwZVwiLFxuICAgIFwiVW5pb25cIlxuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiAvW0EtWmEtel1cXHcrfF9fXFx3K19fLyxcbiAgICBrZXl3b3JkOiBSRVNFUlZFRF9XT1JEUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLFxuICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgIHR5cGU6IFRZUEVTXG4gIH07XG5cbiAgY29uc3QgUFJPTVBUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvXig+Pj58XFwuXFwuXFwuKSAvXG4gIH07XG5cbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvIy9cbiAgfTtcblxuICBjb25zdCBMSVRFUkFMX0JSQUNLRVQgPSB7XG4gICAgYmVnaW46IC9cXHtcXHsvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFt1VV18W2JCXXxbclJdfFtiQl1bclJdfFtyUl1bYkJdKT8nJycvLFxuICAgICAgICBlbmQ6IC8nJycvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBQUk9NUFRcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW3VVXXxbYkJdfFtyUl18W2JCXVtyUl18W3JSXVtiQl0pP1wiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFBST01QVFxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKScnJy8sXG4gICAgICAgIGVuZDogLycnJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFBST01QVCxcbiAgICAgICAgICBMSVRFUkFMX0JSQUNLRVQsXG4gICAgICAgICAgU1VCU1RcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSlcIlwiXCIvLFxuICAgICAgICBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBQUk9NUFQsXG4gICAgICAgICAgTElURVJBTF9CUkFDS0VULFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFt1VV18W3JSXSknLyxcbiAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFt1VV18W3JSXSlcIi8sXG4gICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2JCXXxbYkJdW3JSXXxbclJdW2JCXSknLyxcbiAgICAgICAgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtiQl18W2JCXVtyUl18W3JSXVtiQl0pXCIvLFxuICAgICAgICBlbmQ6IC9cIi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pJy8sXG4gICAgICAgIGVuZDogLycvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBMSVRFUkFMX0JSQUNLRVQsXG4gICAgICAgICAgU1VCU1RcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSlcIi8sXG4gICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgTElURVJBTF9CUkFDS0VULFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI251bWVyaWMtbGl0ZXJhbHNcbiAgY29uc3QgZGlnaXRwYXJ0ID0gJ1swLTldKF8/WzAtOV0pKic7XG4gIGNvbnN0IHBvaW50ZmxvYXQgPSBgKFxcXFxiKCR7ZGlnaXRwYXJ0fSkpP1xcXFwuKCR7ZGlnaXRwYXJ0fSl8XFxcXGIoJHtkaWdpdHBhcnR9KVxcXFwuYDtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBleHBvbmVudGZsb2F0LCBwb2ludGZsb2F0XG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNmbG9hdGluZy1wb2ludC1saXRlcmFsc1xuICAgICAgLy8gb3B0aW9uYWxseSBpbWFnaW5hcnlcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeS1saXRlcmFsc1xuICAgICAgLy8gTm90ZTogbm8gbGVhZGluZyBcXGIgYmVjYXVzZSBmbG9hdHMgY2FuIHN0YXJ0IHdpdGggYSBkZWNpbWFsIHBvaW50XG4gICAgICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXNoYW5kbGUgZS5nLiBgZm4oLjUpYCxcbiAgICAgIC8vIG5vIHRyYWlsaW5nIFxcYiBmb3IgcG9pbnRmbG9hdCBiZWNhdXNlIGl0IGNhbiBlbmQgd2l0aCBhIGRlY2ltYWwgcG9pbnRcbiAgICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIG1pc2hhbmRsZSBlLmcuIGAwLi5oZXgoKWA7IHRoaXMgc2hvdWxkIGJlIHNhZmVcbiAgICAgIC8vIGJlY2F1c2UgYm90aCBNVVNUIGNvbnRhaW4gYSBkZWNpbWFsIHBvaW50IGFuZCBzbyBjYW5ub3QgYmUgY29uZnVzZWQgd2l0aFxuICAgICAgLy8gdGhlIGludGVyaW9yIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuICAgICAge1xuICAgICAgICBiZWdpbjogYChcXFxcYigke2RpZ2l0cGFydH0pfCgke3BvaW50ZmxvYXR9KSlbZUVdWystXT8oJHtkaWdpdHBhcnR9KVtqSl0/XFxcXGJgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogYCgke3BvaW50ZmxvYXR9KVtqSl0/YFxuICAgICAgfSxcblxuICAgICAgLy8gZGVjaW50ZWdlciwgYmluaW50ZWdlciwgb2N0aW50ZWdlciwgaGV4aW50ZWdlclxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW50ZWdlci1saXRlcmFsc1xuICAgICAgLy8gb3B0aW9uYWxseSBcImxvbmdcIiBpbiBQeXRob24gMlxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi43L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW50ZWdlci1hbmQtbG9uZy1pbnRlZ2VyLWxpdGVyYWxzXG4gICAgICAvLyBkZWNpbnRlZ2VyIGlzIG9wdGlvbmFsbHkgaW1hZ2luYXJ5XG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbWFnaW5hcnktbGl0ZXJhbHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYihbMS05XShfP1swLTldKSp8MCsoXz8wKSopW2xMakpdP1xcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYjBbYkJdKF8/WzAxXSkrW2xMXT9cXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIwW29PXShfP1swLTddKStbbExdP1xcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYjBbeFhdKF8/WzAtOWEtZkEtRl0pK1tsTF0/XFxcXGInXG4gICAgICB9LFxuXG4gICAgICAvLyBpbWFnbnVtYmVyIChkaWdpdHBhcnQtYmFzZWQpXG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbWFnaW5hcnktbGl0ZXJhbHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGBcXFxcYigke2RpZ2l0cGFydH0pW2pKXVxcXFxiYFxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ09NTUVOVF9UWVBFID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgYmVnaW46IGxvb2thaGVhZCgvIyB0eXBlOi8pLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyBwcmV2ZW50IGtleXdvcmRzIGZyb20gY29sb3JpbmcgYHR5cGVgXG4gICAgICAgIGJlZ2luOiAvIyB0eXBlOi9cbiAgICAgIH0sXG4gICAgICAvLyBjb21tZW50IHdpdGhpbiBhIGRhdGF0eXBlIGNvbW1lbnQgaW5jbHVkZXMgbm8ga2V5d29yZHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8jLyxcbiAgICAgICAgZW5kOiAvXFxiXFxCLyxcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBFeGNsdWRlIHBhcmFtcyBpbiBmdW5jdGlvbnMgd2l0aG91dCBwYXJhbXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIlwiLFxuICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICBza2lwOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICBQUk9NUFQsXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIFNUUklORyxcbiAgICBOVU1CRVIsXG4gICAgUFJPTVBUXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUHl0aG9uJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncHknLFxuICAgICAgJ2d5cCcsXG4gICAgICAnaXB5dGhvbidcbiAgICBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvKDxcXC98LT58XFw/KXw9Pi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFBST01QVCxcbiAgICAgIE5VTUJFUixcbiAgICAgIHtcbiAgICAgICAgLy8gdmVyeSBjb21tb24gY29udmVudGlvblxuICAgICAgICBiZWdpbjogL1xcYnNlbGZcXGIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBlYXQgXCJpZlwiIHByaW9yIHRvIHN0cmluZyBzbyB0aGF0IGl0IHdvbid0IGFjY2lkZW50YWxseSBiZVxuICAgICAgICAvLyBsYWJlbGVkIGFzIGFuIGYtc3RyaW5nXG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFwiaWZcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgQ09NTUVOVF9UWVBFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZW5kOiAvOi8sXG4gICAgICAgIGlsbGVnYWw6IC9bJHs9O1xcbixdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC8tPi8sXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEU1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXltcXHQgXSpALyxcbiAgICAgICAgZW5kOiAvKD89Iyl8JC8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBTVFJJTkdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBweXRob247XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUHl0aG9uIFJFUExcblJlcXVpcmVzOiBweXRob24uanNcbkF1dGhvcjogSm9zaCBHb2ViZWwgPGhlbGxvQGpvc2hnb2ViZWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gcHl0aG9uUmVwbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyAncHljb24nIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIC8vIGEgc3BhY2Ugc2VwYXJhdGVzIHRoZSBSRVBMIHByZWZpeCBmcm9tIHRoZSBhY3R1YWwgY29kZVxuICAgICAgICAgIC8vIHRoaXMgaXMgcHVyZWx5IGZvciBjbGVhbmVyIEhUTUwgb3V0cHV0XG4gICAgICAgICAgZW5kOiAvIHwkLyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdweXRob24nXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXj4+Pig/PVsgXXwkKS9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXlxcLlxcLlxcLig/PVsgXXwkKS9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHl0aG9uUmVwbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBRXG5EZXNjcmlwdGlvbjogUSBpcyBhIHZlY3Rvci1iYXNlZCBmdW5jdGlvbmFsIHBhcmFkaWdtIHByb2dyYW1taW5nIGxhbmd1YWdlIGJ1aWx0IGludG8gdGhlIGtkYisgZGF0YWJhc2UuXG4gICAgICAgICAgICAgKEsvUS9LZGIrIGZyb20gS3ggU3lzdGVtcylcbkF1dGhvcjogU2VyZ2V5IFZpZHl1ayA8c3ZpZHl1a0BnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2t4LmNvbS9jb25uZWN0LXdpdGgtdXMvZGV2ZWxvcGVycy9cbiovXG5cbmZ1bmN0aW9uIHEoaGxqcykge1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogLyhgPylbQS1aYS16MC05X10rXFxiLyxcbiAgICBrZXl3b3JkOlxuICAgICAgJ2RvIHdoaWxlIHNlbGVjdCBkZWxldGUgYnkgdXBkYXRlIGZyb20nLFxuICAgIGxpdGVyYWw6XG4gICAgICAnMGIgMWInLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ25lZyBub3QgbnVsbCBzdHJpbmcgcmVjaXByb2NhbCBmbG9vciBjZWlsaW5nIHNpZ251bSBtb2QgeGJhciB4bG9nIGFuZCBvciBlYWNoIHNjYW4gb3ZlciBwcmlvciBtbXUgbHNxIGludiBtZDUgbHRpbWUgZ3RpbWUgY291bnQgZmlyc3QgdmFyIGRldiBtZWQgY292IGNvciBhbGwgYW55IHJhbmQgc3VtcyBwcmRzIG1pbnMgbWF4cyBmaWxscyBkZWx0YXMgcmF0aW9zIGF2Z3MgZGlmZmVyIHByZXYgbmV4dCByYW5rIHJldmVyc2UgaWFzYyBpZGVzYyBhc2MgZGVzYyBtc3VtIG1jb3VudCBtYXZnIG1kZXYgeHJhbmsgbW1pbiBtbWF4IHhwcmV2IHJvdGF0ZSBkaXN0aW5jdCBncm91cCB3aGVyZSBmbGlwIHR5cGUga2V5IHRpbCBnZXQgdmFsdWUgYXR0ciBjdXQgc2V0IHVwc2VydCByYXplIHVuaW9uIGludGVyIGV4Y2VwdCBjcm9zcyBzdiB2cyBzdWJsaXN0IGVubGlzdCByZWFkMCByZWFkMSBob3BlbiBoY2xvc2UgaGRlbCBoc3ltIGhjb3VudCBwZWFjaCBzeXN0ZW0gbHRyaW0gcnRyaW0gdHJpbSBsb3dlciB1cHBlciBzc3IgdmlldyB0YWJsZXMgdmlld3MgY29scyB4Y29scyBrZXlzIHhrZXkgeGNvbCB4YXNjIHhkZXNjIGZrZXlzIG1ldGEgbGogYWogYWowIGlqIHBqIGFzb2YgdWogd3cgd2ogd2oxIGZieSB4Z3JvdXAgdW5ncm91cCBlaiBzYXZlIGxvYWQgcnNhdmUgcmxvYWQgc2hvdyBjc3YgcGFyc2UgZXZhbCBtaW4gbWF4IGF2ZyB3YXZnIHdzdW0gc2luIGNvcyB0YW4gc3VtJyxcbiAgICB0eXBlOlxuICAgICAgJ2BmbG9hdCBgZG91YmxlIGludCBgdGltZXN0YW1wIGB0aW1lc3BhbiBgZGF0ZXRpbWUgYHRpbWUgYGJvb2xlYW4gYHN5bWJvbCBgY2hhciBgYnl0ZSBgc2hvcnQgYGxvbmcgYHJlYWwgYG1vbnRoIGBkYXRlIGBtaW51dGUgYHNlY29uZCBgZ3VpZCdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdRJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnaycsXG4gICAgICAna2RiJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHE7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IFFNTFxuUmVxdWlyZXM6IGphdmFzY3JpcHQuanMsIHhtbC5qc1xuQXV0aG9yOiBKb2huIEZvc3RlciA8amZvc3RlckBlc3JpLmNvbT5cbkRlc2NyaXB0aW9uOiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciB0aGUgUXQgUXVpY2sgUU1MIHNjcmlwdGluZyBsYW5ndWFnZSwgYmFzZWQgbW9zdGx5IG9mZlxuICAgICAgICAgICAgIHRoZSBKYXZhU2NyaXB0IHBhcnNlci5cbldlYnNpdGU6IGh0dHBzOi8vZG9jLnF0LmlvL3F0LTUvcW1sYXBwbGljYXRpb25zLmh0bWxcbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbmZ1bmN0aW9uIHFtbChobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaW4gb2Ygb24gaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoICcgK1xuICAgICAgJ2luc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgJyArXG4gICAgICAnbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBpbXBvcnQnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHknLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2V2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50ICcgK1xuICAgICAgJ2VuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgZXNjYXBlIHVuZXNjYXBlIE9iamVjdCBGdW5jdGlvbiBCb29sZWFuIEVycm9yICcgK1xuICAgICAgJ0V2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciAnICtcbiAgICAgICdUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSAnICtcbiAgICAgICdGbG9hdDY0QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IEludDhBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSAnICtcbiAgICAgICdVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSAnICtcbiAgICAgICdtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgU3ltYm9sIFNldCBNYXAgV2Vha1NldCBXZWFrTWFwIFByb3h5IFJlZmxlY3QgJyArXG4gICAgICAnQmVoYXZpb3IgYm9vbCBjb2xvciBjb29yZGluYXRlIGRhdGUgZG91YmxlIGVudW1lcmF0aW9uIGZvbnQgZ2VvY2lyY2xlIGdlb3JlY3RhbmdsZSAnICtcbiAgICAgICdnZW9zaGFwZSBpbnQgbGlzdCBtYXRyaXg0eDQgcGFyZW50IHBvaW50IHF1YXRlcm5pb24gcmVhbCByZWN0ICcgK1xuICAgICAgJ3NpemUgc3RyaW5nIHVybCB2YXJpYW50IHZlY3RvcjJkIHZlY3RvcjNkIHZlY3RvcjRkICcgK1xuICAgICAgJ1Byb21pc2UnXG4gIH07XG5cbiAgY29uc3QgUU1MX0lERU5UX1JFID0gJ1thLXpBLVpfXVthLXpBLVowLTlcXFxcLl9dKic7XG5cbiAgLy8gSXNvbGF0ZSBwcm9wZXJ0eSBzdGF0ZW1lbnRzLiBFbmRzIGF0IGEgOiwgPSwgOywgLCwgYSBjb21tZW50IG9yIGVuZCBvZiBsaW5lLlxuICAvLyBVc2UgcHJvcGVydHkgY2xhc3MuXG4gIGNvbnN0IFBST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnXFxcXGJwcm9wZXJ0eVxcXFxiJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBlbmQ6ICcoOnw9fDt8LHwvL3wvXFxcXCp8JCknLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIC8vIElzb2xhdGUgc2lnbmFsIHN0YXRlbWVudHMuIEVuZHMgYXQgYSApIGEgY29tbWVudCBvciBlbmQgb2YgbGluZS5cbiAgLy8gVXNlIHByb3BlcnR5IGNsYXNzLlxuICBjb25zdCBTSUdOQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdcXFxcYnNpZ25hbFxcXFxiJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBlbmQ6ICcoXFxcXCh8Onw9fDt8LHwvL3wvXFxcXCp8JCknLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIC8vIGlkOiBpcyBzcGVjaWFsIGluIFFNTC4gV2hlbiB3ZSBzZWUgaWQ6IHdlIHdhbnQgdG8gbWFyayB0aGUgaWQ6IGFzIGF0dHJpYnV0ZSBhbmRcbiAgLy8gZW1waGFzaXplIHRoZSB0b2tlbiBmb2xsb3dpbmcuXG4gIGNvbnN0IElEX0lEID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgYmVnaW46ICdcXFxcYmlkXFxcXHMqOicsXG4gICAgc3RhcnRzOiB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgZW5kOiBRTUxfSURFTlRfUkUsXG4gICAgICByZXR1cm5FbmQ6IGZhbHNlXG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbmQgUU1MIG9iamVjdCBhdHRyaWJ1dGUuIEFuIGF0dHJpYnV0ZSBpcyBhIFFNTCBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IDouXG4gIC8vIFVuZm9ydHVuYXRlbHkgaXQncyBoYXJkIHRvIGtub3cgd2hlcmUgaXQgZW5kcywgYXMgaXQgbWF5IGNvbnRhaW4gc2NhbGFycyxcbiAgLy8gb2JqZWN0cywgb2JqZWN0IGRlZmluaXRpb25zLCBvciBqYXZhc2NyaXB0LiBUaGUgdHJ1ZSBlbmQgaXMgZWl0aGVyIHdoZW4gdGhlIHBhcmVudFxuICAvLyBlbmRzIG9yIHRoZSBuZXh0IGF0dHJpYnV0ZSBpcyBkZXRlY3RlZC5cbiAgY29uc3QgUU1MX0FUVFJJQlVURSA9IHtcbiAgICBiZWdpbjogUU1MX0lERU5UX1JFICsgJ1xcXFxzKjonLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiBRTUxfSURFTlRfUkUsXG4gICAgICAgIGVuZDogJ1xcXFxzKjonLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIC8vIEZpbmQgUU1MIG9iamVjdC4gQSBRTUwgb2JqZWN0IGlzIGEgUU1MIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgeyBhbmQgZW5kcyBhdCB0aGUgbWF0Y2hpbmcgfS5cbiAgLy8gQWxsIHdlIHJlYWxseSBjYXJlIGFib3V0IGlzIGZpbmRpbmcgSURFTlQgZm9sbG93ZWQgYnkgeyBhbmQganVzdCBtYXJrIHVwIHRoZSBJREVOVCBhbmQgaWdub3JlIHRoZSB7LlxuICBjb25zdCBRTUxfT0JKRUNUID0ge1xuICAgIGJlZ2luOiBjb25jYXQoUU1MX0lERU5UX1JFLCAvXFxzKlxcey8pLFxuICAgIGVuZDogL1xcey8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgIGJlZ2luOiBRTUxfSURFTlRfUkVcbiAgICAgIH0pXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1FNTCcsXG4gICAgYWxpYXNlczogWyAncXQnIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHsgLy8gdGVtcGxhdGUgc3RyaW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgIGVuZDogJ2AnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXH0nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYigwW29PXVswLTddKyknXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBcInZhbHVlXCIgY29udGFpbmVyXG4gICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihjYXNlfHJldHVybnx0aHJvdylcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybiB0aHJvdyBjYXNlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHsgLy8gRTRYIC8gSlNYXG4gICAgICAgICAgICBiZWdpbjogLzwvLFxuICAgICAgICAgICAgZW5kOiAvPlxccypbKTtcXF1dLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgU0lHTkFMLFxuICAgICAgUFJPUEVSVFksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC9cXFt8JS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGhhY2s6IHByZXZlbnRzIGRldGVjdGlvbiBvZiBrZXl3b3JkcyBhZnRlciBkb3RzXG4gICAgICAgIGJlZ2luOiAnXFxcXC4nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgSURfSUQsXG4gICAgICBRTUxfQVRUUklCVVRFLFxuICAgICAgUU1MX09CSkVDVFxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcW1sO1xuIiwKICAgICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rYWhlYWQocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD89JywgcmUsICcpJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogUlxuRGVzY3JpcHRpb246IFIgaXMgYSBmcmVlIHNvZnR3YXJlIGVudmlyb25tZW50IGZvciBzdGF0aXN0aWNhbCBjb21wdXRpbmcgYW5kIGdyYXBoaWNzLlxuQXV0aG9yOiBKb2UgQ2hlbmcgPGpvZUByc3R1ZGlvLm9yZz5cbkNvbnRyaWJ1dG9yczogS29ucmFkIFJ1ZG9scGggPGtvbnJhZC5ydWRvbHBoQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnItcHJvamVjdC5vcmdcbkNhdGVnb3J5OiBjb21tb24sc2NpZW50aWZpY1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHIoaGxqcykge1xuICAvLyBJZGVudGlmaWVycyBpbiBSIGNhbm5vdCBzdGFydCB3aXRoIGBfYCwgYnV0IHRoZXkgY2FuIHN0YXJ0IHdpdGggYC5gIGlmIGl0XG4gIC8vIGlzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGRpZ2l0LlxuICAvLyBSIGFsc28gc3VwcG9ydHMgcXVvdGVkIGlkZW50aWZpZXJzLCB3aGljaCBhcmUgbmVhci1hcmJpdHJhcnkgc2VxdWVuY2VzXG4gIC8vIGRlbGltaXRlZCBieSBiYWNrdGlja3MgKGDigKZgKSwgd2hpY2ggbWF5IGNvbnRhaW4gZXNjYXBlIHNlcXVlbmNlcy4gVGhlc2UgYXJlXG4gIC8vIGhhbmRsZWQgaW4gYSBzZXBhcmF0ZSBtb2RlLiBTZWUgYHRlc3QvbWFya3VwL3IvbmFtZXMudHh0YCBmb3IgZXhhbXBsZXMuXG4gIC8vIEZJWE1FOiBTdXBwb3J0IFVuaWNvZGUgaWRlbnRpZmllcnMuXG4gIGNvbnN0IElERU5UX1JFID0gLyg/Oig/OlthLXpBLVpdfFxcLlsuX2EtekEtWl0pWy5fYS16QS1aMC05XSopfFxcLig/IVxcZCkvO1xuICBjb25zdCBTSU1QTEVfSURFTlQgPSAvW2EtekEtWl1bYS16QS1aXzAtOV0qLztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdSJyxcblxuICAgIC8vIG9ubHkgaW4gSGFza2VsbCwgbm90IFJcbiAgICBpbGxlZ2FsOiAvLT4vLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogSURFTlRfUkUsXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnZnVuY3Rpb24gaWYgaW4gYnJlYWsgbmV4dCByZXBlYXQgZWxzZSBmb3Igd2hpbGUnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ05VTEwgTkEgVFJVRSBGQUxTRSBJbmYgTmFOIE5BX2ludGVnZXJffDEwIE5BX3JlYWxffDEwICcgK1xuICAgICAgICAnTkFfY2hhcmFjdGVyX3wxMCBOQV9jb21wbGV4X3wxMCcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gQnVpbHRpbiBjb25zdGFudHNcbiAgICAgICAgJ0xFVFRFUlMgbGV0dGVycyBtb250aC5hYmIgbW9udGgubmFtZSBwaSBUIEYgJyArXG4gICAgICAgIC8vIFByaW1pdGl2ZSBmdW5jdGlvbnNcbiAgICAgICAgLy8gVGhlc2UgYXJlIGFsbCB0aGUgZnVuY3Rpb25zIGluIGBiYXNlYCB0aGF0IGFyZSBpbXBsZW1lbnRlZCBhcyBhXG4gICAgICAgIC8vIGAuUHJpbWl0aXZlYCwgbWludXMgdGhvc2UgZnVuY3Rpb25zIHRoYXQgYXJlIGFsc28ga2V5d29yZHMuXG4gICAgICAgICdhYnMgYWNvcyBhY29zaCBhbGwgYW55IGFueU5BIEFyZyBhcy5jYWxsIGFzLmNoYXJhY3RlciAnICtcbiAgICAgICAgJ2FzLmNvbXBsZXggYXMuZG91YmxlIGFzLmVudmlyb25tZW50IGFzLmludGVnZXIgYXMubG9naWNhbCAnICtcbiAgICAgICAgJ2FzLm51bGwuZGVmYXVsdCBhcy5udW1lcmljIGFzLnJhdyBhc2luIGFzaW5oIGF0YW4gYXRhbmggYXR0ciAnICtcbiAgICAgICAgJ2F0dHJpYnV0ZXMgYmFzZWVudiBicm93c2VyIGMgY2FsbCBjZWlsaW5nIGNsYXNzIENvbmogY29zIGNvc2ggJyArXG4gICAgICAgICdjb3NwaSBjdW1tYXggY3VtbWluIGN1bXByb2QgY3Vtc3VtIGRpZ2FtbWEgZGltIGRpbW5hbWVzICcgK1xuICAgICAgICAnZW1wdHllbnYgZXhwIGV4cHJlc3Npb24gZmxvb3IgZm9yY2VBbmRDYWxsIGdhbW1hIGdjLnRpbWUgJyArXG4gICAgICAgICdnbG9iYWxlbnYgSW0gaW50ZXJhY3RpdmUgaW52aXNpYmxlIGlzLmFycmF5IGlzLmF0b21pYyBpcy5jYWxsICcgK1xuICAgICAgICAnaXMuY2hhcmFjdGVyIGlzLmNvbXBsZXggaXMuZG91YmxlIGlzLmVudmlyb25tZW50IGlzLmV4cHJlc3Npb24gJyArXG4gICAgICAgICdpcy5maW5pdGUgaXMuZnVuY3Rpb24gaXMuaW5maW5pdGUgaXMuaW50ZWdlciBpcy5sYW5ndWFnZSAnICtcbiAgICAgICAgJ2lzLmxpc3QgaXMubG9naWNhbCBpcy5tYXRyaXggaXMubmEgaXMubmFtZSBpcy5uYW4gaXMubnVsbCAnICtcbiAgICAgICAgJ2lzLm51bWVyaWMgaXMub2JqZWN0IGlzLnBhaXJsaXN0IGlzLnJhdyBpcy5yZWN1cnNpdmUgaXMuc2luZ2xlICcgK1xuICAgICAgICAnaXMuc3ltYm9sIGxhenlMb2FkREJmZXRjaCBsZW5ndGggbGdhbW1hIGxpc3QgbG9nIG1heCBtaW4gJyArXG4gICAgICAgICdtaXNzaW5nIE1vZCBuYW1lcyBuYXJncyBuemNoYXIgb2xkQ2xhc3Mgb24uZXhpdCBwb3MudG8uZW52ICcgK1xuICAgICAgICAncHJvYy50aW1lIHByb2QgcXVvdGUgcmFuZ2UgUmUgcmVwIHJldHJhY2VtZW0gcmV0dXJuIHJvdW5kICcgK1xuICAgICAgICAnc2VxX2Fsb25nIHNlcV9sZW4gc2VxLmludCBzaWduIHNpZ25pZiBzaW4gc2luaCBzaW5waSBzcXJ0ICcgK1xuICAgICAgICAnc3RhbmRhcmRHZW5lcmljIHN1YnN0aXR1dGUgc3VtIHN3aXRjaCB0YW4gdGFuaCB0YW5waSB0cmFjZW1lbSAnICtcbiAgICAgICAgJ3RyaWdhbW1hIHRydW5jIHVuY2xhc3MgdW50cmFjZW1lbSBVc2VNZXRob2QgeHRmcm0nLFxuICAgIH0sXG4gICAgY29tcGlsZXJFeHRlbnNpb25zOiBbXG4gICAgICAvLyBhbGxvdyBiZWZvcmVNYXRjaCB0byBhY3QgYXMgYSBcInF1YWxpZmllclwiIGZvciB0aGUgbWF0Y2hcbiAgICAgIC8vIHRoZSBmdWxsIG1hdGNoIGJlZ2luIG11c3QgYmUgW2JlZm9yZU1hdGNoXVtiZWdpbl1cbiAgICAgIChtb2RlLCBwYXJlbnQpID0+IHtcbiAgICAgICAgaWYgKCFtb2RlLmJlZm9yZU1hdGNoKSByZXR1cm47XG4gICAgICAgIC8vIHN0YXJ0cyBjb25mbGljdHMgd2l0aCBlbmRzUGFyZW50IHdoaWNoIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjaGlsZFxuICAgICAgICAvLyBydWxlIGlzIG5vdCBtYXRjaGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGlmIChtb2RlLnN0YXJ0cykgdGhyb3cgbmV3IEVycm9yKFwiYmVmb3JlTWF0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBzdGFydHNcIik7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNb2RlID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKG1vZGUpLmZvckVhY2goKGtleSkgPT4geyBkZWxldGUgbW9kZVtrZXldOyB9KTtcblxuICAgICAgICBtb2RlLmJlZ2luID0gY29uY2F0KG9yaWdpbmFsTW9kZS5iZWZvcmVNYXRjaCwgbG9va2FoZWFkKG9yaWdpbmFsTW9kZS5iZWdpbikpO1xuICAgICAgICBtb2RlLnN0YXJ0cyA9IHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3JpZ2luYWxNb2RlLCB7IGVuZHNQYXJlbnQ6IHRydWUgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICAgIG1vZGUucmVsZXZhbmNlID0gMDtcblxuICAgICAgICBkZWxldGUgb3JpZ2luYWxNb2RlLmJlZm9yZU1hdGNoO1xuICAgICAgfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIFJveHlnZW4gY29tbWVudHNcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgLyMnLyxcbiAgICAgICAgLyQvLFxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGBAZXhhbXBsZXNgIHNlcGFyYXRlbHkgdG8gY2F1c2UgYWxsIHN1YnNlcXVlbnQgY29kZVxuICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgbmV4dCBgQGAtdGFnIG9uIGl0cyBvd24gbGluZSB0byBiZSBrZXB0IGFzLWlzLFxuICAgICAgICAgICAgICAvLyBwcmV2ZW50aW5nIGhpZ2hsaWdodGluZy4gVGhpcyBjb2RlIGlzIGV4YW1wbGUgUiBjb2RlLCBzbyBuZXN0ZWRcbiAgICAgICAgICAgICAgLy8gZG9jdGFncyBzaG91bGRu4oCZdCBiZSB0cmVhdGVkIGFzIHN1Y2guIFNlZVxuICAgICAgICAgICAgICAvLyBgdGVzdC9tYXJrdXAvci9yb3h5Z2VuLnR4dGAgZm9yIGFuIGV4YW1wbGUuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQGV4YW1wbGVzJyxcbiAgICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHsgYmVnaW46IC9cXG4vIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvIydcXHMqKD89QFthLXpBLVpdKykvLFxuICAgICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8jJy8sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYEBwYXJhbWAgdG8gaGlnaGxpZ2h0IHRoZSBwYXJhbWV0ZXIgbmFtZSBmb2xsb3dpbmdcbiAgICAgICAgICAgICAgLy8gYWZ0ZXIuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQHBhcmFtJyxcbiAgICAgICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBiZWdpbjogSURFTlRfUkUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBiZWdpbjogL2AoPzpcXFxcLnxbXmBcXFxcXSkrYC8gfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAvQFthLXpBLVpdKy9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEta2V5d29yZCcsXG4gICAgICAgICAgICAgIGJlZ2luOiAvXFxcXFthLXpBLVpdKy8sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHsgYmVnaW46IC9bclJdXCIoLSopXFwoLywgZW5kOiAvXFwpKC0qKVwiLyB9KSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHsgYmVnaW46IC9bclJdXCIoLSopXFx7LywgZW5kOiAvXFx9KC0qKVwiLyB9KSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHsgYmVnaW46IC9bclJdXCIoLSopXFxbLywgZW5kOiAvXFxdKC0qKVwiLyB9KSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHsgYmVnaW46IC9bclJdJygtKilcXCgvLCBlbmQ6IC9cXCkoLSopJy8gfSksXG4gICAgICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7IGJlZ2luOiAvW3JSXScoLSopXFx7LywgZW5kOiAvXFx9KC0qKScvIH0pLFxuICAgICAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oeyBiZWdpbjogL1tyUl0nKC0qKVxcWy8sIGVuZDogL1xcXSgtKiknLyB9KSxcbiAgICAgICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICB7YmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wiLCByZWxldmFuY2U6IDB9XG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZm9yZU1hdGNoOiAvKFteYS16QS1aMC05Ll9dKS8sIC8vIG5vdCBwYXJ0IG9mIGFuIGlkZW50aWZpZXJcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmVnYXRpdmUgbG9vay1iZWhpbmQgd2hlbiBhdmFpbGFibGVcbiAgICAgICAgICAvLyB7IGJlZ2luOiAvKD88IVthLXpBLVowLTkuX10pMFt4WF1bMC05YS1mQS1GXStcXC5bMC05YS1mQS1GXSpbcFBdWystXT9cXGQraT8vIH0sXG4gICAgICAgICAgLy8geyBiZWdpbjogLyg/PCFbYS16QS1aMC05Ll9dKTBbeFhdWzAtOWEtZkEtRl0rKFtwUF1bKy1dP1xcZCspP1tMaV0/LyB9LFxuICAgICAgICAgIC8vIHsgYmVnaW46IC8oPzwhW2EtekEtWjAtOS5fXSkoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVsrLV0/XFxkKyk/W0xpXT8vIH1cbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IG9ubHkgaGV4YWRlY2ltYWwgYmluYXJ5IHBvd2VycyBjYW4gY29udGFpbiBmcmFjdGlvbnMuXG4gICAgICAgICAgICBtYXRjaDogLzBbeFhdWzAtOWEtZkEtRl0rXFwuWzAtOWEtZkEtRl0qW3BQXVsrLV0/XFxkK2k/LyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hdGNoOiAvMFt4WF1bMC05YS1mQS1GXSsoW3BQXVsrLV0/XFxkKyk/W0xpXT8vXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXRjaDogLyhcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWystXT9cXGQrKT9bTGldPy8sXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gaW5maXggb3BlcmF0b3JcbiAgICAgICAgYmVnaW46ICclJyxcbiAgICAgICAgZW5kOiAnJSdcbiAgICAgIH0sXG4gICAgICAvLyByZWxldmFuY2UgYm9vc3QgZm9yIGFzc2lnbm1lbnRcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGNvbmNhdChTSU1QTEVfSURFTlQsIFwiXFxcXHMrPC1cXFxccytcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGVzY2FwZWQgaWRlbnRpZmllclxuICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAvXFxcXC4vIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFJlYXNvbk1MXG5EZXNjcmlwdGlvbjogUmVhc29uIGxldHMgeW91IHdyaXRlIHNpbXBsZSwgZmFzdCBhbmQgcXVhbGl0eSB0eXBlIHNhZmUgY29kZSB3aGlsZSBsZXZlcmFnaW5nIGJvdGggdGhlIEphdmFTY3JpcHQgJiBPQ2FtbCBlY29zeXN0ZW1zLlxuV2Vic2l0ZTogaHR0cHM6Ly9yZWFzb25tbC5naXRodWIuaW9cbkF1dGhvcjogR2lkaSBNZWlyIE1vcnJpcyA8b3NzQGdpZGkuaW8+XG5DYXRlZ29yeTogZnVuY3Rpb25hbFxuKi9cbmZ1bmN0aW9uIHJlYXNvbm1sKGhsanMpIHtcbiAgZnVuY3Rpb24gb3JSZVZhbHVlcyhvcHMpIHtcbiAgICByZXR1cm4gb3BzXG4gICAgICAubWFwKGZ1bmN0aW9uKG9wKSB7XG4gICAgICAgIHJldHVybiBvcFxuICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uKGNoYXIpIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXCcgKyBjaGFyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCd8Jyk7XG4gIH1cblxuICBjb25zdCBSRV9JREVOVCA9ICd+P1thLXokX11bMC05YS16QS1aJF9dKic7XG4gIGNvbnN0IFJFX01PRFVMRV9JREVOVCA9ICdgP1tBLVokX11bMC05YS16QS1aJF9dKic7XG5cbiAgY29uc3QgUkVfUEFSQU1fVFlQRVBBUkFNID0gJ1xcJz9bYS16JF9dWzAtOWEteiRfXSonO1xuICBjb25zdCBSRV9QQVJBTV9UWVBFID0gJ1xcXFxzKjpcXFxccypbYS16JF9dWzAtOWEteiRfXSooXFxcXChcXFxccyooJyArIFJFX1BBUkFNX1RZUEVQQVJBTSArICdcXFxccyooLCcgKyBSRV9QQVJBTV9UWVBFUEFSQU0gKyAnXFxcXHMqKSopP1xcXFwpKT8nO1xuICBjb25zdCBSRV9QQVJBTSA9IFJFX0lERU5UICsgJygnICsgUkVfUEFSQU1fVFlQRSArICcpezAsMn0nO1xuICBjb25zdCBSRV9PUEVSQVRPUiA9IFwiKFwiICsgb3JSZVZhbHVlcyhbXG4gICAgJ3x8JyxcbiAgICAnKysnLFxuICAgICcqKicsXG4gICAgJysuJyxcbiAgICAnKicsXG4gICAgJy8nLFxuICAgICcqLicsXG4gICAgJy8uJyxcbiAgICAnLi4uJ1xuICBdKSArIFwifFxcXFx8PnwmJnw9PXw9PT0pXCI7XG4gIGNvbnN0IFJFX09QRVJBVE9SX1NQQUNFRCA9IFwiXFxcXHMrXCIgKyBSRV9PUEVSQVRPUiArIFwiXFxcXHMrXCI7XG5cbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhbmQgYXMgYXNyIGFzc2VydCBiZWdpbiBjbGFzcyBjb25zdHJhaW50IGRvIGRvbmUgZG93bnRvIGVsc2UgZW5kIGV4Y2VwdGlvbiBleHRlcm5hbCAnICtcbiAgICAgICdmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSBpbmhlcml0IGluaXRpYWxpemVyICcgK1xuICAgICAgJ2xhbmQgbGF6eSBsZXQgbG9yIGxzbCBsc3IgbHhvciBtYXRjaCBtZXRob2QgbW9kIG1vZHVsZSBtdXRhYmxlIG5ldyBub25yZWMgJyArXG4gICAgICAnb2JqZWN0IG9mIG9wZW4gb3IgcHJpdmF0ZSByZWMgc2lnIHN0cnVjdCB0aGVuIHRvIHRyeSB0eXBlIHZhbCB2aXJ0dWFsIHdoZW4gd2hpbGUgd2l0aCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYXJyYXkgYm9vbCBieXRlcyBjaGFyIGV4bnw1IGZsb2F0IGludCBpbnQzMiBpbnQ2NCBsaXN0IGxhenlfdHw1IG5hdGl2ZWludHw1IHJlZiBzdHJpbmcgdW5pdCAnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSdcbiAgfTtcblxuICBjb25zdCBSRV9OVU1CRVIgPSAnXFxcXGIoMFt4WF1bYS1mQS1GMC05X10rW0xsbl0/fCcgK1xuICAgICcwW29PXVswLTdfXStbTGxuXT98JyArXG4gICAgJzBbYkJdWzAxX10rW0xsbl0/fCcgK1xuICAgICdbMC05XVswLTlfXSooW0xsbl18KFxcXFwuWzAtOV9dKik/KFtlRV1bLStdP1swLTlfXSspPyk/KSc7XG5cbiAgY29uc3QgTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFJFX05VTUJFUlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKC0nICsgUkVfTlVNQkVSICsgJ1xcXFwpJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBPUEVSQVRPUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IFJFX09QRVJBVE9SXG4gIH07XG4gIGNvbnN0IExJU1RfQ09OVEVOVFNfTU9ERVMgPSBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnaWRlbnRpZmllcicsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBiZWdpbjogUkVfSURFTlRcbiAgICB9LFxuICAgIE9QRVJBVE9SX01PREUsXG4gICAgTlVNQkVSX01PREVcbiAgXTtcblxuICBjb25zdCBNT0RVTEVfQUNDRVNTX0NPTlRFTlRTID0gW1xuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgT1BFUkFUT1JfTU9ERSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtb2R1bGUnLFxuICAgICAgYmVnaW46IFwiXFxcXGJcIiArIFJFX01PRFVMRV9JREVOVCxcbiAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgZW5kOiBcIlxcLlwiLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2lkZW50aWZpZXInLFxuICAgICAgICAgIGJlZ2luOiBSRV9NT0RVTEVfSURFTlQsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgUEFSQU1TX0NPTlRFTlRTID0gW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21vZHVsZScsXG4gICAgICBiZWdpbjogXCJcXFxcYlwiICsgUkVfTU9EVUxFX0lERU5ULFxuICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICBlbmQ6IFwiXFwuXCIsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnaWRlbnRpZmllcicsXG4gICAgICAgICAgYmVnaW46IFJFX01PRFVMRV9JREVOVCxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICBjb25zdCBQQVJBTVNfTU9ERSA9IHtcbiAgICBiZWdpbjogUkVfSURFTlQsXG4gICAgZW5kOiAnKCx8XFxcXG58XFxcXCkpJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE9QRVJBVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGluZycsXG4gICAgICAgIGJlZ2luOiAnOicsXG4gICAgICAgIGVuZDogJygsfFxcXFxuKScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEVOVFNcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fQkxPQ0tfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxzKFxcXFwoXFxcXC4/Lio/XFxcXCl8JyArIFJFX0lERU5UICsgJylcXFxccyo9PicsXG4gICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBSRV9JREVOVFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFJFX1BBUkFNXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHNcXFxcKFxcXFwuP1teO1xcXFx8XSpcXFxcKVxcXFxzKj0+JyxcbiAgICAgICAgZW5kOiAnXFxcXHM9PicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbIFBBUkFNU19NT0RFIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXChcXFxcLlxcXFxzJyArIFJFX0lERU5UICsgJ1xcXFwpXFxcXHMqPT4nXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBNT0RVTEVfQUNDRVNTX0NPTlRFTlRTLnB1c2goRlVOQ1RJT05fQkxPQ0tfTU9ERSk7XG5cbiAgY29uc3QgQ09OU1RSVUNUT1JfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdjb25zdHJ1Y3RvcicsXG4gICAgYmVnaW46IFJFX01PRFVMRV9JREVOVCArICdcXFxcKCcsXG4gICAgZW5kOiAnXFxcXCknLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgT1BFUkFUT1JfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYicgKyBSRV9JREVOVFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBQQVRURVJOX01BVENIX0JMT0NLX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAncGF0dGVybi1tYXRjaCcsXG4gICAgYmVnaW46ICdcXFxcfCcsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGVuZDogJz0+JyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTlNUUlVDVE9SX01PREUsXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICAgICAgYmVnaW46IFJFX01PRFVMRV9JREVOVFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBNT0RVTEVfQUNDRVNTX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbW9kdWxlLWFjY2VzcycsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiKFwiICsgUkVfTU9EVUxFX0lERU5UICsgXCJcXFxcLikrXCIgKyBSRV9JREVOVFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIoXCIgKyBSRV9NT0RVTEVfSURFTlQgKyBcIlxcXFwuKStcXFxcKFwiLFxuICAgICAgICBlbmQ6IFwiXFxcXClcIixcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgRlVOQ1RJT05fQkxPQ0tfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0uY29uY2F0KE1PRFVMRV9BQ0NFU1NfQ09OVEVOVFMpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogXCJcXFxcYihcIiArIFJFX01PRFVMRV9JREVOVCArIFwiXFxcXC4pK1xcXFx7XCIsXG4gICAgICAgIGVuZDogL1xcfS9cbiAgICAgIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBNT0RVTEVfQUNDRVNTX0NPTlRFTlRTXG4gIH07XG5cbiAgUEFSQU1TX0NPTlRFTlRTLnB1c2goTU9EVUxFX0FDQ0VTU19NT0RFKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdSZWFzb25NTCcsXG4gICAgYWxpYXNlczogWyAncmUnIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICcoOi18Oj18XFxcXCRcXFxce3xcXFxcKz0pJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJywge1xuICAgICAgICBpbGxlZ2FsOiAnXigjLFxcXFwvXFxcXC8pJ1xuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NoYXJhY3RlcicsXG4gICAgICAgIGJlZ2luOiAnXFwnKFxcXFxcXFxcW15cXCddK3xbXlxcJ10pXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXChcXFxcKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXFtcXFxcfCcsXG4gICAgICAgIGVuZDogJ1xcXFx8XFxcXF0nLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBMSVNUX0NPTlRFTlRTX01PREVTXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogTElTVF9DT05URU5UU19NT0RFU1xuICAgICAgfSxcbiAgICAgIENPTlNUUlVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICAgICAgYmVnaW46IFJFX09QRVJBVE9SX1NQQUNFRCxcbiAgICAgICAgaWxsZWdhbDogJy0tPicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIE5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgUEFUVEVSTl9NQVRDSF9CTE9DS19NT0RFLFxuICAgICAgRlVOQ1RJT05fQkxPQ0tfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbW9kdWxlLWRlZicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFxibW9kdWxlXFxcXHMrXCIgKyBSRV9JREVOVCArIFwiXFxcXHMrXCIgKyBSRV9NT0RVTEVfSURFTlQgKyBcIlxcXFxzKz1cXFxccytcXFxce1wiLFxuICAgICAgICBlbmQ6IC9cXH0vLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbW9kdWxlJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGJlZ2luOiBSRV9NT0RVTEVfSURFTlRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFx7LyxcbiAgICAgICAgICAgIGVuZDogL1xcfS8sXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChNT0RVTEVfQUNDRVNTX0NPTlRFTlRTKVxuICAgICAgfSxcbiAgICAgIE1PRFVMRV9BQ0NFU1NfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFzb25tbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBSZW5kZXJNYW4gUklCXG5BdXRob3I6IEtvbnN0YW50aW4gRXZkb2tpbWVua28gPHFld2VydHlAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBTaHVlbi1IdWVpIEd1YW4gPGRyYWtlLmd1YW5AZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9yZW5kZXJtYW4ucGl4YXIuY29tL3Jlc291cmNlcy9SZW5kZXJNYW5fMjAvcmliQmluZGluZy5odG1sXG5DYXRlZ29yeTogZ3JhcGhpY3NcbiovXG5cbmZ1bmN0aW9uIHJpYihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1JlbmRlck1hbiBSSUInLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ0FyY2hpdmVSZWNvcmQgQXJlYUxpZ2h0U291cmNlIEF0bW9zcGhlcmUgQXR0cmlidXRlIEF0dHJpYnV0ZUJlZ2luIEF0dHJpYnV0ZUVuZCBCYXNpcyAnICtcbiAgICAgICdCZWdpbiBCbG9iYnkgQm91bmQgQ2xpcHBpbmcgQ2xpcHBpbmdQbGFuZSBDb2xvciBDb2xvclNhbXBsZXMgQ29uY2F0VHJhbnNmb3JtIENvbmUgJyArXG4gICAgICAnQ29vcmRpbmF0ZVN5c3RlbSBDb29yZFN5c1RyYW5zZm9ybSBDcm9wV2luZG93IEN1cnZlcyBDeWxpbmRlciBEZXB0aE9mRmllbGQgRGV0YWlsICcgK1xuICAgICAgJ0RldGFpbFJhbmdlIERpc2sgRGlzcGxhY2VtZW50IERpc3BsYXkgRW5kIEVycm9ySGFuZGxlciBFeHBvc3VyZSBFeHRlcmlvciBGb3JtYXQgJyArXG4gICAgICAnRnJhbWVBc3BlY3RSYXRpbyBGcmFtZUJlZ2luIEZyYW1lRW5kIEdlbmVyYWxQb2x5Z29uIEdlb21ldHJpY0FwcHJveGltYXRpb24gR2VvbWV0cnkgJyArXG4gICAgICAnSGlkZXIgSHlwZXJib2xvaWQgSWRlbnRpdHkgSWxsdW1pbmF0ZSBJbWFnZXIgSW50ZXJpb3IgTGlnaHRTb3VyY2UgJyArXG4gICAgICAnTWFrZUN1YmVGYWNlRW52aXJvbm1lbnQgTWFrZUxhdExvbmdFbnZpcm9ubWVudCBNYWtlU2hhZG93IE1ha2VUZXh0dXJlIE1hdHRlICcgK1xuICAgICAgJ01vdGlvbkJlZ2luIE1vdGlvbkVuZCBOdVBhdGNoIE9iamVjdEJlZ2luIE9iamVjdEVuZCBPYmplY3RJbnN0YW5jZSBPcGFjaXR5IE9wdGlvbiAnICtcbiAgICAgICdPcmllbnRhdGlvbiBQYXJhYm9sb2lkIFBhdGNoIFBhdGNoTWVzaCBQZXJzcGVjdGl2ZSBQaXhlbEZpbHRlciBQaXhlbFNhbXBsZXMgJyArXG4gICAgICAnUGl4ZWxWYXJpYW5jZSBQb2ludHMgUG9pbnRzR2VuZXJhbFBvbHlnb25zIFBvaW50c1BvbHlnb25zIFBvbHlnb24gUHJvY2VkdXJhbCBQcm9qZWN0aW9uICcgK1xuICAgICAgJ1F1YW50aXplIFJlYWRBcmNoaXZlIFJlbGF0aXZlRGV0YWlsIFJldmVyc2VPcmllbnRhdGlvbiBSb3RhdGUgU2NhbGUgU2NyZWVuV2luZG93ICcgK1xuICAgICAgJ1NoYWRpbmdJbnRlcnBvbGF0aW9uIFNoYWRpbmdSYXRlIFNodXR0ZXIgU2lkZXMgU2tldyBTb2xpZEJlZ2luIFNvbGlkRW5kIFNwaGVyZSAnICtcbiAgICAgICdTdWJkaXZpc2lvbk1lc2ggU3VyZmFjZSBUZXh0dXJlQ29vcmRpbmF0ZXMgVG9ydXMgVHJhbnNmb3JtIFRyYW5zZm9ybUJlZ2luIFRyYW5zZm9ybUVuZCAnICtcbiAgICAgICdUcmFuc2Zvcm1Qb2ludHMgVHJhbnNsYXRlIFRyaW1DdXJ2ZSBXb3JsZEJlZ2luIFdvcmxkRW5kJyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByaWI7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogUm9ib2NvbmZcbkF1dGhvcjogVmluY2VudCBadXJjemFrIDx2enVyY3pha0BsaW5hZ29yYS5jb20+XG5EZXNjcmlwdGlvbjogU3ludGF4IGhpZ2hsaWdodGluZyBmb3IgUm9ib2NvbmYncyBEU0xcbldlYnNpdGU6IGh0dHA6Ly9yb2JvY29uZi5uZXRcbkNhdGVnb3J5OiBjb25maWdcbiovXG5cbmZ1bmN0aW9uIHJvYm9jb25mKGhsanMpIHtcbiAgY29uc3QgSURFTlRJRklFUiA9ICdbYS16QS1aLV9dW15cXFxcbntdK1xcXFx7JztcblxuICBjb25zdCBQUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgIGJlZ2luOiAvW2EtekEtWi1fXSsvLFxuICAgIGVuZDogL1xccyo6LyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnOycsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgIGJlZ2luOiAvXFwuW2EtekEtWi1fXSsvXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICBiZWdpbjogL1xcKG9wdGlvbmFsXFwpL1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1JvYm9jb25mJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnZ3JhcGgnLFxuICAgICAgJ2luc3RhbmNlcydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6ICdpbXBvcnQnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBGYWNldCBzZWN0aW9uc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15mYWNldCAnICsgSURFTlRJRklFUixcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAga2V5d29yZHM6ICdmYWNldCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUFJPUEVSVFksXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnN0YW5jZSBzZWN0aW9uc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyppbnN0YW5jZSBvZiAnICsgSURFTlRJRklFUixcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAga2V5d29yZHM6ICduYW1lIGNvdW50IGNoYW5uZWxzIGluc3RhbmNlLWRhdGEgaW5zdGFuY2Utc3RhdGUgaW5zdGFuY2Ugb2YnLFxuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgUFJPUEVSVFksXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBDb21wb25lbnQgc2VjdGlvbnNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeJyArIElERU5USUZJRVIsXG4gICAgICAgIGVuZDogL1xcfS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUFJPUEVSVFksXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBDb21tZW50c1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByb2JvY29uZjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBNaWNyb3RpayBSb3V0ZXJPUyBzY3JpcHRcbkF1dGhvcjogSXZhbiBEZW1lbnRldiA8aXZhbl9kaXZAbWFpbC5ydT5cbkRlc2NyaXB0aW9uOiBTY3JpcHRpbmcgaG9zdCBwcm92aWRlcyBhIHdheSB0byBhdXRvbWF0ZSBzb21lIHJvdXRlciBtYWludGVuYW5jZSB0YXNrcyBieSBtZWFucyBvZiBleGVjdXRpbmcgdXNlci1kZWZpbmVkIHNjcmlwdHMgYm91bmRlZCB0byBzb21lIGV2ZW50IG9jY3VycmVuY2VcbldlYnNpdGU6IGh0dHBzOi8vd2lraS5taWtyb3Rpay5jb20vd2lraS9NYW51YWw6U2NyaXB0aW5nXG4qL1xuXG4vLyBDb2xvcnMgZnJvbSBSb3V0ZXJPUyB0ZXJtaW5hbDpcbi8vICAgZ3JlZW4gICAgICAgIC0gIzBFOUEwMFxuLy8gICB0ZWFsICAgICAgICAgLSAjMEM5QTlBXG4vLyAgIHB1cnBsZSAgICAgICAtICM5OTA2OUFcbi8vICAgbGlnaHQtYnJvd24gIC0gIzlBOTkwMFxuXG5mdW5jdGlvbiByb3V0ZXJvcyhobGpzKSB7XG4gIGNvbnN0IFNUQVRFTUVOVFMgPSAnZm9yZWFjaCBkbyB3aGlsZSBmb3IgaWYgZnJvbSB0byBzdGVwIGVsc2Ugb24tZXJyb3IgYW5kIG9yIG5vdCBpbic7XG5cbiAgLy8gR2xvYmFsIGNvbW1hbmRzOiBFdmVyeSBnbG9iYWwgY29tbWFuZCBzaG91bGQgc3RhcnQgd2l0aCBcIjpcIiB0b2tlbiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyB2YXJpYWJsZS5cbiAgY29uc3QgR0xPQkFMX0NPTU1BTkRTID0gJ2dsb2JhbCBsb2NhbCBiZWVwIGRlbGF5IHB1dCBsZW4gdHlwZW9mIHBpY2sgbG9nIHRpbWUgc2V0IGZpbmQgZW52aXJvbm1lbnQgdGVybWluYWwgZXJyb3IgZXhlY3V0ZSBwYXJzZSByZXNvbHZlIHRvYXJyYXkgdG9ib29sIHRvaWQgdG9pcCB0b2lwNiB0b251bSB0b3N0ciB0b3RpbWUnO1xuXG4gIC8vIENvbW1vbiBjb21tYW5kczogRm9sbG93aW5nIGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIG1vc3Qgc3ViLW1lbnVzOlxuICBjb25zdCBDT01NT05fQ09NTUFORFMgPSAnYWRkIHJlbW92ZSBlbmFibGUgZGlzYWJsZSBzZXQgZ2V0IHByaW50IGV4cG9ydCBlZGl0IGZpbmQgcnVuIGRlYnVnIGVycm9yIGluZm8gd2FybmluZyc7XG5cbiAgY29uc3QgTElURVJBTFMgPSAndHJ1ZSBmYWxzZSB5ZXMgbm8gbm90aGluZyBuaWwgbnVsbCc7XG5cbiAgY29uc3QgT0JKRUNUUyA9ICd0cmFmZmljLWZsb3cgdHJhZmZpYy1nZW5lcmF0b3IgZmlyZXdhbGwgc2NoZWR1bGVyIGFhYSBhY2NvdW50aW5nIGFkZHJlc3MtbGlzdCBhZGRyZXNzIGFsaWduIGFyZWEgYmFuZHdpZHRoLXNlcnZlciBiZmQgYmdwIGJyaWRnZSBjbGllbnQgY2xvY2sgY29tbXVuaXR5IGNvbmZpZyBjb25uZWN0aW9uIGNvbnNvbGUgY3VzdG9tZXIgZGVmYXVsdCBkaGNwLWNsaWVudCBkaGNwLXNlcnZlciBkaXNjb3ZlcnkgZG5zIGUtbWFpbCBldGhlcm5ldCBmaWx0ZXIgZmlybXdhcmUgZ3BzIGdyYXBoaW5nIGdyb3VwIGhhcmR3YXJlIGhlYWx0aCBob3RzcG90IGlkZW50aXR5IGlnbXAtcHJveHkgaW5jb21pbmcgaW5zdGFuY2UgaW50ZXJmYWNlIGlwIGlwc2VjIGlwdjYgaXJxIGwydHAtc2VydmVyIGxjZCBsZHAgbG9nZ2luZyBtYWMtc2VydmVyIG1hYy13aW5ib3ggbWFuZ2xlIG1hbnVhbCBtaXJyb3IgbW1lIG1wbHMgbmF0IG5kIG5laWdoYm9yIG5ldHdvcmsgbm90ZSBudHAgb3NwZiBvc3BmLXYzIG92cG4tc2VydmVyIHBhZ2UgcGVlciBwaW0gcGluZyBwb2xpY3kgcG9vbCBwb3J0IHBwcCBwcHBvZS1jbGllbnQgcHB0cC1zZXJ2ZXIgcHJlZml4IHByb2ZpbGUgcHJvcG9zYWwgcHJveHkgcXVldWUgcmFkaXVzIHJlc291cmNlIHJpcCByaXBuZyByb3V0ZSByb3V0aW5nIHNjcmVlbiBzY3JpcHQgc2VjdXJpdHktcHJvZmlsZXMgc2VydmVyIHNlcnZpY2Ugc2VydmljZS1wb3J0IHNldHRpbmdzIHNoYXJlcyBzbWIgc21zIHNuaWZmZXIgc25tcCBzbm9vcGVyIHNvY2tzIHNzdHAtc2VydmVyIHN5c3RlbSB0b29sIHRyYWNraW5nIHR5cGUgdXBncmFkZSB1cG5wIHVzZXItbWFuYWdlciB1c2VycyB1c2VyIHZsYW4gc2VjcmV0IHZycnAgd2F0Y2hkb2cgd2ViLWFjY2VzcyB3aXJlbGVzcyBwcHRwIHBwcG9lIGxhbiB3YW4gbGF5ZXI3LXByb3RvY29sIGxlYXNlIHNpbXBsZSByYXcnO1xuXG4gIGNvbnN0IFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkXFx7KC4qPylcXH0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLFxuICAgIGVuZDogL1wiLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLycvLFxuICAgIGVuZDogLycvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTWljcm90aWsgUm91dGVyT1Mgc2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnbWlrcm90aWsnXG4gICAgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogLzo/W1xcdy1dKy8sXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgIGtleXdvcmQ6IFNUQVRFTUVOVFMgKyAnIDonICsgU1RBVEVNRU5UUy5zcGxpdCgnICcpLmpvaW4oJyA6JykgKyAnIDonICsgR0xPQkFMX0NPTU1BTkRTLnNwbGl0KCcgJykuam9pbignIDonKVxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gaWxsZWdhbCBzeW50YXhcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IC8vIC0tIGNvbW1lbnRcbiAgICAgICAgICAgIGJlZ2luOiAvXFwvXFwqLyxcbiAgICAgICAgICAgIGVuZDogL1xcKlxcLy9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gU3RhbiBjb21tZW50XG4gICAgICAgICAgICBiZWdpbjogL1xcL1xcLy8sXG4gICAgICAgICAgICBlbmQ6IC8kL1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBIVE1MIHRhZ3NcbiAgICAgICAgICAgIGJlZ2luOiAvPFxcLy8sXG4gICAgICAgICAgICBlbmQ6IC8+L1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogLy4vXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeIycsICckJyksXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUixcbiAgICAgIC8vIGF0dHJpYnV0ZT12YWx1ZVxuICAgICAge1xuICAgICAgICAvLyA+IGlzIHRvIGF2b2lkIG1hdGNoZXMgd2l0aCA9PiBpbiBvdGhlciBncmFtbWFyc1xuICAgICAgICBiZWdpbjogL1tcXHctXSs9KFteXFxze31bXFxdKCk+XSspLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICAgICAgYmVnaW46IC9bXj1dKy9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvPS8sXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgICAgICAgICAgQVBPU19TVFJJTkcsXG4gICAgICAgICAgICAgIFZBUixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIExJVEVSQUxTLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxcYidcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBmb3JtYXQgdW5jbGFzc2lmaWVkIHZhbHVlcy4gTmVlZGVkIHRvIGV4Y2x1ZGUgaGlnaGxpZ2h0aW5nIG9mIHZhbHVlcyBhcyBidWlsdF9pbi5cbiAgICAgICAgICAgICAgICBiZWdpbjogLyhcIlteXCJdKlwifFteXFxze31bXFxdXSspL1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0IGFkZHJlc3NlcyBhbmQgc3VibmV0c1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogSVBBRERSX3dCSVRNQVNLKycoLCcrSVBBRERSX3dCSVRNQVNLKycpKid9LCAvLzE5Mi4xNjguMC4wLzI0LDEuMi4zLjAvMjRcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogSVBBRERSKyctJytJUEFERFJ9LCAgICAgICAvLyAxOTIuMTY4LjAuMS0xOTIuMTY4LjAuM1xuICAgICAgICAgICAgICAgICAge2JlZ2luOiBJUEFERFIrJygsJytJUEFERFIrJykqJ30sIC8vIDE5Mi4xNjguMC4xLDE5Mi4xNjguMC4zNCwxOTIuMTY4LjI0LjEsMTkyLjE2OC4wLjFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBNQUMgYWRkcmVzc2VzIGFuZCBESENQIENsaWVudCBJRHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFxiKDE6KT8oWzAtOUEtRmEtZl17MSwyfVs6LV0pezV9KFswLTlBLUZhLWZdKXsxLDJ9XFxiLyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEhFWCB2YWx1ZXNcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IC9cXCpbMC05YS1mQS1GXSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBDT01NT05fQ09NTUFORFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKShbXFxcXHNbKFxcXFxdfF0pJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRpbi1uYW1lJywgLy8gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJyhcXFxcLlxcXFwuL3wvfFxcXFxzKSgoJyArIE9CSkVDVFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKTs/XFxcXHMpKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwuXFwuLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByb3V0ZXJvcztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBSZW5kZXJNYW4gUlNMXG5BdXRob3I6IEtvbnN0YW50aW4gRXZkb2tpbWVua28gPHFld2VydHlAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBTaHVlbi1IdWVpIEd1YW4gPGRyYWtlLmd1YW5AZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9yZW5kZXJtYW4ucGl4YXIuY29tL3Jlc291cmNlcy9SZW5kZXJNYW5fMjAvc2hhZGluZ0xhbmd1YWdlLmh0bWxcbkNhdGVnb3J5OiBncmFwaGljc1xuKi9cblxuZnVuY3Rpb24gcnNsKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUmVuZGVyTWFuIFJTTCcsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdmbG9hdCBjb2xvciBwb2ludCBub3JtYWwgdmVjdG9yIG1hdHJpeCB3aGlsZSBmb3IgaWYgZG8gcmV0dXJuIGVsc2UgYnJlYWsgZXh0ZXJuIGNvbnRpbnVlJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnYWJzIGFjb3MgYW1iaWVudCBhcmVhIGFzaW4gYXRhbiBhdG1vc3BoZXJlIGF0dHJpYnV0ZSBjYWxjdWxhdGVub3JtYWwgY2VpbCBjZWxsbm9pc2UgJyArXG4gICAgICAgICdjbGFtcCBjb21wIGNvbmNhdCBjb3MgZGVncmVlcyBkZXB0aCBEZXJpdiBkaWZmdXNlIGRpc3RhbmNlIER1IER2IGVudmlyb25tZW50IGV4cCAnICtcbiAgICAgICAgJ2ZhY2Vmb3J3YXJkIGZpbHRlcnN0ZXAgZmxvb3IgZm9ybWF0IGZyZXNuZWwgaW5jaWRlbnQgbGVuZ3RoIGxpZ2h0c291cmNlIGxvZyBtYXRjaCAnICtcbiAgICAgICAgJ21heCBtaW4gbW9kIG5vaXNlIG5vcm1hbGl6ZSBudHJhbnNmb3JtIG9wcG9zaXRlIG9wdGlvbiBwaG9uZyBwbm9pc2UgcG93IHByaW50ZiAnICtcbiAgICAgICAgJ3B0bGluZWQgcmFkaWFucyByYW5kb20gcmVmbGVjdCByZWZyYWN0IHJlbmRlcmluZm8gcm91bmQgc2V0Y29tcCBzZXR4Y29tcCBzZXR5Y29tcCAnICtcbiAgICAgICAgJ3NldHpjb21wIHNoYWRvdyBzaWduIHNpbiBzbW9vdGhzdGVwIHNwZWN1bGFyIHNwZWN1bGFyYnJkZiBzcGxpbmUgc3FydCBzdGVwIHRhbiAnICtcbiAgICAgICAgJ3RleHR1cmUgdGV4dHVyZWluZm8gdHJhY2UgdHJhbnNmb3JtIHZ0cmFuc2Zvcm0geGNvbXAgeWNvbXAgemNvbXAnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnIycsXG4gICAgICAgIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdXJmYWNlIGRpc3BsYWNlbWVudCBsaWdodCB2b2x1bWUgaW1hZ2VyJyxcbiAgICAgICAgZW5kOiAnXFxcXCgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaWxsdW1pbmF0ZSBpbGx1bWluYW5jZSBnYXRoZXInLFxuICAgICAgICBlbmQ6ICdcXFxcKCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcnNsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IE9yYWNsZSBSdWxlcyBMYW5ndWFnZVxuQXV0aG9yOiBKYXNvbiBKYWNvYnNvbiA8amFzb24uYS5qYWNvYnNvbkBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogVGhlIE9yYWNsZSBVdGlsaXRpZXMgUnVsZXMgTGFuZ3VhZ2UgaXMgdXNlZCB0byBwcm9ncmFtIHRoZSBPcmFjbGUgVXRpbGl0aWVzIEFwcGxpY2F0aW9ucyBhY3F1aXJlZCBmcm9tIExPREVTVEFSIENvcnBvcmF0aW9uLiAgVGhlIHByb2R1Y3RzIGluY2x1ZGUgQmlsbGluZyBDb21wb25lbnQsIExQU1MsIFByaWNpbmcgQ29tcG9uZW50IGV0Yy4gdGhyb3VnaCB2ZXJzaW9uIDEuNi4xLlxuV2Vic2l0ZTogaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vY2QvRTE3OTA0XzAxL2Rldi4xMTExL2UxMDIyNy9ybHJlZi5odG1cbkNhdGVnb3J5OiBlbnRlcnByaXNlXG4qL1xuXG5mdW5jdGlvbiBydWxlc2xhbmd1YWdlKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnT3JhY2xlIFJ1bGVzIExhbmd1YWdlJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ0JJTExfUEVSSU9EIEJJTExfU1RBUlQgQklMTF9TVE9QIFJTX0VGRkVDVElWRV9TVEFSVCBSU19FRkZFQ1RJVkVfU1RPUCBSU19KVVJJU19DT0RFIFJTX09QQ09fQ09ERSAnICtcbiAgICAgICAgJ0lOVERBRERBVFRSSUJVVEV8NSBJTlREQUREVk1TR3w1IElOVERCTE9DS09QfDUgSU5UREJMT0NLT1BOQXw1IElOVERDTE9TRXw1IElOVERDT1VOVHw1ICcgK1xuICAgICAgICAnSU5URENPVU5UU1RBVFVTQ09ERXw1IElOVERDUkVBVEVNQVNLfDUgSU5URENSRUFURURBWU1BU0t8NSBJTlREQ1JFQVRFRkFDVE9STUFTS3w1ICcgK1xuICAgICAgICAnSU5URENSRUFURUhBTkRMRXw1IElOVERDUkVBVEVPVkVSUklERURBWU1BU0t8NSBJTlREQ1JFQVRFT1ZFUlJJREVNQVNLfDUgJyArXG4gICAgICAgICdJTlREQ1JFQVRFU1RBVFVTQ09ERU1BU0t8NSBJTlREQ1JFQVRFVE9VUEVSSU9EfDUgSU5URERFTEVURXw1IElOVERESVBURVNUfDUgSU5UREVYUE9SVHw1ICcgK1xuICAgICAgICAnSU5UREdFVEVSUk9SQ09ERXw1IElOVERHRVRFUlJPUk1FU1NBR0V8NSBJTlRESVNFUVVBTHw1IElOVERKT0lOfDUgSU5URExPQUR8NSBJTlRETE9BREFDVFVBTENVVHw1ICcgK1xuICAgICAgICAnSU5URExPQUREQVRFU3w1IElOVERMT0FESElTVHw1IElOVERMT0FETElTVHw1IElOVERMT0FETElTVERBVEVTfDUgSU5URExPQURMSVNURU5FUkdZfDUgJyArXG4gICAgICAgICdJTlRETE9BRExJU1RISVNUfDUgSU5URExPQURSRUxBVEVEQ0hBTk5FTHw1IElOVERMT0FEU1B8NSBJTlRETE9BRFNUQUdJTkd8NSBJTlRETE9BRFVPTXw1ICcgK1xuICAgICAgICAnSU5URExPQURVT01EQVRFU3w1IElOVERMT0FEVU9NSElTVHw1IElOVERMT0FEVkVSU0lPTnw1IElOVERPUEVOfDUgSU5URFJFQURGSVJTVHw1IElOVERSRUFETkVYVHw1ICcgK1xuICAgICAgICAnSU5URFJFQ0NPVU5UfDUgSU5URFJFTEVBU0V8NSBJTlREUkVQTEFDRXw1IElOVERST0xMQVZHfDUgSU5URFJPTExQRUFLfDUgSU5URFNDQUxBUk9QfDUgSU5URFNDQUxFfDUgJyArXG4gICAgICAgICdJTlREU0VUQVRUUklCVVRFfDUgSU5URFNFVERTVFBBUlRJQ0lQQU5UfDUgSU5URFNFVFNUUklOR3w1IElOVERTRVRWQUxVRXw1IElOVERTRVRWQUxVRVNUQVRVU3w1ICcgK1xuICAgICAgICAnSU5URFNISUZUU1RBUlRUSU1FfDUgSU5URFNNT09USHw1IElOVERTT1JUfDUgSU5URFNQSUtFVEVTVHw1IElOVERTVUJTRVR8NSBJTlREVE9VfDUgJyArXG4gICAgICAgICdJTlREVE9VUkVMRUFTRXw1IElOVERUT1VWQUxVRXw1IElOVERVUERBVEVTVEFUU3w1IElOVERWQUxVRXw1IFNUREVWIElOVERERUxFVEVFWHw1ICcgK1xuICAgICAgICAnSU5URExPQURFWEFDVFVBTHw1IElOVERMT0FERVhDVVR8NSBJTlRETE9BREVYREFURVN8NSBJTlRETE9BREVYfDUgSU5URExPQURFWFJFTEFURURDSEFOTkVMfDUgJyArXG4gICAgICAgICdJTlREU0FWRUVYfDUgTVZMT0FEfDUgTVZMT0FEQUNDVHw1IE1WTE9BREFDQ1REQVRFU3w1IE1WTE9BREFDQ1RISVNUfDUgTVZMT0FEREFURVN8NSBNVkxPQURISVNUfDUgJyArXG4gICAgICAgICdNVkxPQURMSVNUfDUgTVZMT0FETElTVERBVEVTfDUgTVZMT0FETElTVEhJU1R8NSBJRiBGT1IgTkVYVCBET05FIFNFTEVDVCBFTkQgQ0FMTCBBQk9SVCBDTEVBUiBDSEFOTkVMIEZBQ1RPUiBMSVNUIE5VTUJFUiAnICtcbiAgICAgICAgJ09WRVJSSURFIFNFVCBXRUVLIERJU1RSSUJVVElPTk5PREUgRUxTRSBXSEVOIFRIRU4gT1RIRVJXSVNFIElFTlVNIENTViBJTkNMVURFIExFQVZFIFJJREVSIFNBVkUgREVMRVRFICcgK1xuICAgICAgICAnTk9WQUxVRSBTRUNUSU9OIFdBUk4gU0FWRV9VUERBVEUgREVURVJNSU5BTlQgTEFCRUwgUkVQT1JUIFJFVkVOVUUgRUFDSCAnICtcbiAgICAgICAgJ0lOIEZST00gVE9UQUwgQ0hBUkdFIEJMT0NLIEFORCBPUiBDU1ZfRklMRSBSQVRFX0NPREUgQVVYSUxJQVJZX0RFTUFORCAnICtcbiAgICAgICAgJ1VJREFDQ09VTlQgUlMgQklMTF9QRVJJT0RfU0VMRUNUIEhPVVJTX1BFUl9NT05USCBJTlREX0VSUk9SX1NUT1AgU0VBU09OX1NDSEVEVUxFX05BTUUgJyArXG4gICAgICAgICdBQ0NPVU5URkFDVE9SIEFSUkFZVVBQRVJCT1VORCBDQUxMU1RPUkVEUFJPQyBHRVRBRE9DT05ORUNUSU9OIEdFVENPTk5FQ1QgR0VUREFUQVNPVVJDRSAnICtcbiAgICAgICAgJ0dFVFFVQUxJRklFUiBHRVRVU0VSSUQgSEFTVkFMVUUgTElTVENPVU5UIExJU1RPUCBMSVNUVVBEQVRFIExJU1RWQUxVRSBQUk9SQVRFRkFDVE9SIFJTUFJPUkFURSAnICtcbiAgICAgICAgJ1NFVEJJTlBBVEggU0VUREJNT05JVE9SIFdRX09QRU4gQklMTElOR0hPVVJTIERBVEUgREFURUZST01GTE9BVCBEQVRFVElNRUZST01TVFJJTkcgJyArXG4gICAgICAgICdEQVRFVElNRVRPU1RSSU5HIERBVEVUT0ZMT0FUIERBWSBEQVlESUZGIERBWU5BTUUgREJEQVRFVElNRSBIT1VSIE1JTlVURSBNT05USCBNT05USERJRkYgJyArXG4gICAgICAgICdNT05USEhPVVJTIE1PTlRITkFNRSBST1VORERBVEUgU0FNRVdFRUtEQVlMQVNUWUVBUiBTRUNPTkQgV0VFS0RBWSBXRUVLRElGRiBZRUFSIFlFQVJEQVkgJyArXG4gICAgICAgICdZRUFSU1RSIENPTVBTVU0gSElTVENPVU5UIEhJU1RNQVggSElTVE1JTiBISVNUTUlOTlogSElTVFZBTFVFIE1BWE5SQU5HRSBNQVhSQU5HRSBNSU5SQU5HRSAnICtcbiAgICAgICAgJ0NPTVBJS1ZBIENPTVBLVkEgQ09NUEtWQVJGUk9NS1FLVyBDT01QTEYgSURBVFRSIEZMQUcgTEYyS1cgTEYyS1dIIE1BWEtXIFBPV0VSRkFDVE9SICcgK1xuICAgICAgICAnUkVBRElORzJVU0FHRSBBVkdTRUFTT04gTUFYU0VBU09OIE1PTlRITFlNRVJHRSBTRUFTT05WQUxVRSBTVU1TRUFTT04gQUNDVFJFQUREQVRFUyAnICtcbiAgICAgICAgJ0FDQ1RUQUJMRUxPQUQgQ09ORklHQUREIENPTkZJR0dFVCBDUkVBVEVPQkpFQ1QgQ1JFQVRFUkVQT1JUIEVNQUlMQ0xJRU5UIEVYUEJMS01ETVVTQUdFICcgK1xuICAgICAgICAnRVhQTURNVVNBR0UgRVhQT1JUX1VTQUdFIEZBQ1RPUklORUZGRUNUIEdFVFVTRVJTUEVDSUZJRURTVE9QIElORUZGRUNUIElTSE9MSURBWSBSVU5SQVRFICcgK1xuICAgICAgICAnU0FWRV9QUk9GSUxFIFNFVFJFUE9SVFRJVExFIFVTRVJFWElUIFdBVEZPUlJVTlJBVEUgVE8gVEFCTEUgQUNPUyBBU0lOIEFUQU4gQVRBTjIgQklUQU5EIENFSUwgJyArXG4gICAgICAgICdDT1MgQ09TRUNBTlQgQ09TSCBDT1RBTkdFTlQgRElWUVVPVCBESVZSRU0gRVhQIEZBQlMgRkxPT1IgRk1PRCBGUkVQTSBGUkVYUE4gTE9HIExPRzEwIE1BWCBNQVhOICcgK1xuICAgICAgICAnTUlOIE1JTk5aIE1PREYgUE9XIFJPVU5EIFJPVU5EMlZBTFVFIFJPVU5ESU5UIFNFQ0FOVCBTSU4gU0lOSCBTUVJPT1QgVEFOIFRBTkggRkxPQVQyU1RSSU5HICcgK1xuICAgICAgICAnRkxPQVQyU1RSSU5HTkMgSU5TVFIgTEVGVCBMRU4gTFRSSU0gTUlEIFJJR0hUIFJUUklNIFNUUklORyBTVFJJTkdOQyBUT0xPV0VSIFRPVVBQRVIgVFJJTSAnICtcbiAgICAgICAgJ05VTURBWVMgUkVBRF9EQVRFIFNUQUdJTkcnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdJREVOVElGSUVSIE9QVElPTlMgWE1MX0VMRU1FTlQgWE1MX09QIFhNTF9FTEVNRU5UX09GIERPTURPQ0NSRUFURSBET01ET0NMT0FERklMRSBET01ET0NMT0FEWE1MICcgK1xuICAgICAgICAnRE9NRE9DU0FWRUZJTEUgRE9NRE9DR0VUUk9PVCBET01ET0NBRERQSSBET01OT0RFR0VUTkFNRSBET01OT0RFR0VUVFlQRSBET01OT0RFR0VUVkFMVUUgRE9NTk9ERUdFVENISUxEQ1QgJyArXG4gICAgICAgICdET01OT0RFR0VURklSU1RDSElMRCBET01OT0RFR0VUU0lCTElORyBET01OT0RFQ1JFQVRFQ0hJTERFTEVNRU5UIERPTU5PREVTRVRBVFRSSUJVVEUgJyArXG4gICAgICAgICdET01OT0RFR0VUQ0hJTERFTEVNRU5UQ1QgRE9NTk9ERUdFVEZJUlNUQ0hJTERFTEVNRU5UIERPTU5PREVHRVRTSUJMSU5HRUxFTUVOVCBET01OT0RFR0VUQVRUUklCVVRFQ1QgJyArXG4gICAgICAgICdET01OT0RFR0VUQVRUUklCVVRFSSBET01OT0RFR0VUQVRUUklCVVRFQllOQU1FIERPTU5PREVHRVRCWU5BTUUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgLy8gbG9va3MgbGlrZSAjLWNvbW1lbnRcbiAgICAgICAgICAgIGJlZ2luOiAnI1xcXFxzKycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnI1thLXpBLVogLl0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBydWxlc2xhbmd1YWdlO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFJ1c3RcbkF1dGhvcjogQW5kcmV5IFZsYXNvdnNraWtoIDxhbmRyZXkudmxhc292c2tpa2hAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBSb21hbiBTaG1hdG92IDxyb21hbnNobWF0b3ZAZ21haWwuY29tPiwgS2FzcGVyIEFuZGVyc2VuIDxrbWFfdW50cnVzdGVkQHByb3Rvbm1haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cucnVzdC1sYW5nLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG4qL1xuXG5mdW5jdGlvbiBydXN0KGhsanMpIHtcbiAgY29uc3QgTlVNX1NVRkZJWCA9ICcoW3VpXSg4fDE2fDMyfDY0fDEyOHxzaXplKXxmKDMyfDY0KSlcXD8nO1xuICBjb25zdCBLRVlXT1JEUyA9XG4gICAgJ2Fic3RyYWN0IGFzIGFzeW5jIGF3YWl0IGJlY29tZSBib3ggYnJlYWsgY29uc3QgY29udGludWUgY3JhdGUgZG8gZHluICcgK1xuICAgICdlbHNlIGVudW0gZXh0ZXJuIGZhbHNlIGZpbmFsIGZuIGZvciBpZiBpbXBsIGluIGxldCBsb29wIG1hY3JvIG1hdGNoIG1vZCAnICtcbiAgICAnbW92ZSBtdXQgb3ZlcnJpZGUgcHJpdiBwdWIgcmVmIHJldHVybiBzZWxmIFNlbGYgc3RhdGljIHN0cnVjdCBzdXBlciAnICtcbiAgICAndHJhaXQgdHJ1ZSB0cnkgdHlwZSB0eXBlb2YgdW5zYWZlIHVuc2l6ZWQgdXNlIHZpcnR1YWwgd2hlcmUgd2hpbGUgeWllbGQnO1xuICBjb25zdCBCVUlMVElOUyA9XG4gICAgLy8gZnVuY3Rpb25zXG4gICAgJ2Ryb3AgJyArXG4gICAgLy8gdHlwZXNcbiAgICAnaTggaTE2IGkzMiBpNjQgaTEyOCBpc2l6ZSAnICtcbiAgICAndTggdTE2IHUzMiB1NjQgdTEyOCB1c2l6ZSAnICtcbiAgICAnZjMyIGY2NCAnICtcbiAgICAnc3RyIGNoYXIgYm9vbCAnICtcbiAgICAnQm94IE9wdGlvbiBSZXN1bHQgU3RyaW5nIFZlYyAnICtcbiAgICAvLyB0cmFpdHNcbiAgICAnQ29weSBTZW5kIFNpemVkIFN5bmMgRHJvcCBGbiBGbk11dCBGbk9uY2UgVG9Pd25lZCBDbG9uZSBEZWJ1ZyAnICtcbiAgICAnUGFydGlhbEVxIFBhcnRpYWxPcmQgRXEgT3JkIEFzUmVmIEFzTXV0IEludG8gRnJvbSBEZWZhdWx0IEl0ZXJhdG9yICcgK1xuICAgICdFeHRlbmQgSW50b0l0ZXJhdG9yIERvdWJsZUVuZGVkSXRlcmF0b3IgRXhhY3RTaXplSXRlcmF0b3IgJyArXG4gICAgJ1NsaWNlQ29uY2F0RXh0IFRvU3RyaW5nICcgK1xuICAgIC8vIG1hY3Jvc1xuICAgICdhc3NlcnQhIGFzc2VydF9lcSEgYml0ZmxhZ3MhIGJ5dGVzISBjZmchIGNvbCEgY29uY2F0ISBjb25jYXRfaWRlbnRzISAnICtcbiAgICAnZGVidWdfYXNzZXJ0ISBkZWJ1Z19hc3NlcnRfZXEhIGVudiEgcGFuaWMhIGZpbGUhIGZvcm1hdCEgZm9ybWF0X2FyZ3MhICcgK1xuICAgICdpbmNsdWRlX2JpbiEgaW5jbHVkZV9zdHIhIGxpbmUhIGxvY2FsX2RhdGFfa2V5ISBtb2R1bGVfcGF0aCEgJyArXG4gICAgJ29wdGlvbl9lbnYhIHByaW50ISBwcmludGxuISBzZWxlY3QhIHN0cmluZ2lmeSEgdHJ5ISB1bmltcGxlbWVudGVkISAnICtcbiAgICAndW5yZWFjaGFibGUhIHZlYyEgd3JpdGUhIHdyaXRlbG4hIG1hY3JvX3J1bGVzISBhc3NlcnRfbmUhIGRlYnVnX2Fzc2VydF9uZSEnO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdSdXN0JyxcbiAgICBhbGlhc2VzOiBbICdycycgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IGhsanMuSURFTlRfUkUgKyAnIT8nLFxuICAgICAga2V5d29yZDpcbiAgICAgICAgS0VZV09SRFMsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBTb21lIE5vbmUgT2sgRXJyJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICBCVUlMVElOU1xuICAgIH0sXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJywge1xuICAgICAgICBjb250YWluczogWyAnc2VsZicgXVxuICAgICAgfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICBiZWdpbjogL2I/XCIvLFxuICAgICAgICBpbGxlZ2FsOiBudWxsXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL3IoIyopXCIoLnxcXG4pKj9cIlxcMSg/ISMpL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9iPydcXFxcPyh4XFx3ezJ9fHVcXHd7NH18VVxcd3s4fXwuKScvXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogLydbYS16QS1aX11bYS16QS1aMC05X10qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiMGIoWzAxX10rKScgKyBOVU1fU1VGRklYXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiMG8oWzAtN19dKyknICsgTlVNX1NVRkZJWFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYjB4KFtBLUZhLWYwLTlfXSspJyArIE5VTV9TVUZGSVhcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGRbXFxcXGRfXSooXFxcXC5bMC05X10rKT8oW2VFXVsrLV0/WzAtOV9dKyk/KScgK1xuICAgICAgICAgICAgICAgICAgIE5VTV9TVUZGSVhcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZm4nLFxuICAgICAgICBlbmQ6ICcoXFxcXCh8PCknLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogWyBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjIT9cXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgICAgIGVuZDogL1wiL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAndHlwZScsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3RyYWl0IGVudW0gc3RydWN0IHVuaW9uJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsIHtcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAnW1xcXFx3XFxcXGRdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGJ1aWx0X2luOiBCVUlMVElOU1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJy0+J1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBydXN0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFNBU1xuQXV0aG9yOiBNYXVyaWNpbyBDYWNlcmVzIDxtYXVyaWNpby5jYWNlcmVzLmJyYXZvQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBTeW50YXggSGlnaGxpZ2h0aW5nIGZvciBTQVNcbiovXG5cbmZ1bmN0aW9uIHNhcyhobGpzKSB7XG4gIC8vIERhdGEgc3RlcCBhbmQgUFJPQyBTUUwgc3RhdGVtZW50c1xuICBjb25zdCBTQVNfS0VZV09SRFMgPVxuICAgICdkbyBpZiB0aGVuIGVsc2UgZW5kIHVudGlsIHdoaWxlICcgK1xuICAgICcnICtcbiAgICAnYWJvcnQgYXJyYXkgYXR0cmliIGJ5IGNhbGwgY2FyZHMgY2FyZHM0IGNhdG5hbWUgY29udGludWUgJyArXG4gICAgJ2RhdGFsaW5lcyBkYXRhbGluZXM0IGRlbGV0ZSBkZWxpbSBkZWxpbWl0ZXIgZGlzcGxheSBkbSBkcm9wICcgK1xuICAgICdlbmRzYXMgZXJyb3IgZmlsZSBmaWxlbmFtZSBmb290bm90ZSBmb3JtYXQgZ290byBpbiBpbmZpbGUgJyArXG4gICAgJ2luZm9ybWF0IGlucHV0IGtlZXAgbGFiZWwgbGVhdmUgbGVuZ3RoIGxpYm5hbWUgbGluayBsaXN0ICcgK1xuICAgICdsb3N0Y2FyZCBtZXJnZSBtaXNzaW5nIG1vZGlmeSBvcHRpb25zIG91dHB1dCBvdXQgcGFnZSBwdXQgJyArXG4gICAgJ3JlZGlyZWN0IHJlbW92ZSByZW5hbWUgcmVwbGFjZSByZXRhaW4gcmV0dXJuIHNlbGVjdCBzZXQgc2tpcCAnICtcbiAgICAnc3RhcnRzYXMgc3RvcCB0aXRsZSB1cGRhdGUgd2FpdHNhcyB3aGVyZSB3aW5kb3cgeCBzeXN0YXNrICcgK1xuICAgICcnICtcbiAgICAnYWRkIGFuZCBhbHRlciBhcyBjYXNjYWRlIGNoZWNrIGNyZWF0ZSBkZWxldGUgZGVzY3JpYmUgJyArXG4gICAgJ2Rpc3RpbmN0IGRyb3AgZm9yZWlnbiBmcm9tIGdyb3VwIGhhdmluZyBpbmRleCBpbnNlcnQgaW50byBpbiAnICtcbiAgICAna2V5IGxpa2UgbWVzc2FnZSBtb2RpZnkgbXNndHlwZSBub3QgbnVsbCBvbiBvciBvcmRlciBwcmltYXJ5ICcgK1xuICAgICdyZWZlcmVuY2VzIHJlc2V0IHJlc3RyaWN0IHNlbGVjdCBzZXQgdGFibGUgdW5pcXVlIHVwZGF0ZSAnICtcbiAgICAndmFsaWRhdGUgdmlldyB3aGVyZSc7XG5cbiAgLy8gQnVpbHQtaW4gU0FTIGZ1bmN0aW9uc1xuICBjb25zdCBTQVNfRlVOID1cbiAgICAnYWJzfGFkZHJ8YWlyeXxhcmNvc3xhcnNpbnxhdGFufGF0dHJjfGF0dHJufGJhbmR8JyArXG4gICAgJ2JldGFpbnZ8YmxzaGlmdHxibm90fGJvcnxicnNoaWZ0fGJ4b3J8Ynl0ZXxjZGZ8Y2VpbHwnICtcbiAgICAnY2V4aXN0fGNpbnZ8Y2xvc2V8Y25vbmN0fGNvbGxhdGV8Y29tcGJsfGNvbXBvdW5kfCcgK1xuICAgICdjb21wcmVzc3xjb3N8Y29zaHxjc3N8Y3Vyb2JzfGN2fGRhY2NkYnxkYWNjZGJzbHwnICtcbiAgICAnZGFjY3NsfGRhY2NzeWR8ZGFjY3RhYnxkYWlyeXxkYXRlfGRhdGVqdWx8ZGF0ZXBhcnR8JyArXG4gICAgJ2RhdGV0aW1lfGRheXxkY2xvc2V8ZGVwZGJ8ZGVwZGJzbHxkZXBkYnNsfGRlcHNsfCcgK1xuICAgICdkZXBzbHxkZXBzeWR8ZGVwc3lkfGRlcHRhYnxkZXB0YWJ8ZGVxdW90ZXxkaG1zfGRpZnwnICtcbiAgICAnZGlnYW1tYXxkaW18ZGluZm98ZG51bXxkb3Blbnxkb3B0bmFtZXxkb3B0bnVtfGRyZWFkfCcgK1xuICAgICdkcm9wbm90ZXxkc25hbWV8ZXJmfGVyZmN8ZXhpc3R8ZXhwfGZhcHBlbmR8ZmNsb3NlfCcgK1xuICAgICdmY29sfGZkZWxldGV8ZmV0Y2h8ZmV0Y2hvYnN8ZmV4aXN0fGZnZXR8ZmlsZWV4aXN0fCcgK1xuICAgICdmaWxlbmFtZXxmaWxlcmVmfGZpbmZvfGZpbnZ8ZmlwbmFtZXxmaXBuYW1lbHwnICtcbiAgICAnZmlwc3RhdGV8Zmxvb3J8Zm5vbmN0fGZub3RlfGZvcGVufGZvcHRuYW1lfGZvcHRudW18JyArXG4gICAgJ2Zwb2ludHxmcG9zfGZwdXR8ZnJlYWR8ZnJld2luZHxmcmxlbnxmc2VwfGZ1enp8JyArXG4gICAgJ2Z3cml0ZXxnYW1pbnZ8Z2FtbWF8Z2V0b3B0aW9ufGdldHZhcmN8Z2V0dmFybnxoYm91bmR8JyArXG4gICAgJ2htc3xob3N0aGVscHxob3VyfGliZXNzZWx8aW5kZXh8aW5kZXhjfGluZGV4d3xpbnB1dHwnICtcbiAgICAnaW5wdXRjfGlucHV0bnxpbnR8aW50Y2t8aW50bnh8aW50cnJ8aXJyfGpiZXNzZWx8JyArXG4gICAgJ2p1bGRhdGV8a3VydG9zaXN8bGFnfGxib3VuZHxsZWZ0fGxlbmd0aHxsZ2FtbWF8JyArXG4gICAgJ2xpYm5hbWV8bGlicmVmfGxvZ3xsb2cxMHxsb2cyfGxvZ3BkZnxsb2dwbWZ8bG9nc2RmfCcgK1xuICAgICdsb3djYXNlfG1heHxtZHl8bWVhbnxtaW58bWludXRlfG1vZHxtb250aHxtb3BlbnwnICtcbiAgICAnbW9ydHxufG5ldHB2fG5taXNzfG5vcm1hbHxub3RlfG5wdnxvcGVufG9yZGluYWx8JyArXG4gICAgJ3BhdGhuYW1lfHBkZnxwZWVrfHBlZWtjfHBtZnxwb2ludHxwb2lzc29ufHBva2V8JyArXG4gICAgJ3Byb2JiZXRhfHByb2Jibm1sfHByb2JjaGl8cHJvYmZ8cHJvYmdhbXxwcm9iaHlwcnwnICtcbiAgICAncHJvYml0fHByb2JuZWdifHByb2Jub3JtfHByb2J0fHB1dHxwdXRjfHB1dG58cXRyfCcgK1xuICAgICdxdW90ZXxyYW5iaW58cmFuY2F1fHJhbmV4cHxyYW5nYW18cmFuZ2V8cmFua3xyYW5ub3J8JyArXG4gICAgJ3JhbnBvaXxyYW50Ymx8cmFudHJpfHJhbnVuaXxyZXBlYXR8cmVzb2x2ZXxyZXZlcnNlfCcgK1xuICAgICdyZXdpbmR8cmlnaHR8cm91bmR8c2F2aW5nfHNjYW58c2RmfHNlY29uZHxzaWdufCcgK1xuICAgICdzaW58c2luaHxza2V3bmVzc3xzb3VuZGV4fHNwZWRpc3xzcXJ0fHN0ZHxzdGRlcnJ8JyArXG4gICAgJ3N0Zmlwc3xzdG5hbWV8c3RuYW1lbHxzdWJzdHJ8c3VtfHN5bWdldHxzeXNnZXR8JyArXG4gICAgJ3N5c21zZ3xzeXNwcm9kfHN5c3JjfHN5c3RlbXx0YW58dGFuaHx0aW1lfHRpbWVwYXJ0fCcgK1xuICAgICd0aW52fHRub25jdHx0b2RheXx0cmFuc2xhdGV8dHJhbndyZHx0cmlnYW1tYXwnICtcbiAgICAndHJpbXx0cmltbnx0cnVuY3x1bmlmb3JtfHVwY2FzZXx1c3N8dmFyfHZhcmZtdHwnICtcbiAgICAndmFyaW5mbXR8dmFybGFiZWx8dmFybGVufHZhcm5hbWV8dmFybnVtfHZhcnJheXwnICtcbiAgICAndmFycmF5eHx2YXJ0eXBlfHZlcmlmeXx2Zm9ybWF0fHZmb3JtYXRkfHZmb3JtYXRkeHwnICtcbiAgICAndmZvcm1hdG58dmZvcm1hdG54fHZmb3JtYXR3fHZmb3JtYXR3eHx2Zm9ybWF0eHwnICtcbiAgICAndmluYXJyYXl8dmluYXJyYXl4fHZpbmZvcm1hdHx2aW5mb3JtYXRkfHZpbmZvcm1hdGR4fCcgK1xuICAgICd2aW5mb3JtYXRufHZpbmZvcm1hdG54fHZpbmZvcm1hdHd8dmluZm9ybWF0d3h8JyArXG4gICAgJ3ZpbmZvcm1hdHh8dmxhYmVsfHZsYWJlbHh8dmxlbmd0aHx2bGVuZ3RoeHx2bmFtZXwnICtcbiAgICAndm5hbWV4fHZ0eXBlfHZ0eXBleHx3ZWVrZGF5fHllYXJ8eXlxfHppcGZpcHN8emlwbmFtZXwnICtcbiAgICAnemlwbmFtZWx8emlwc3RhdGUnO1xuXG4gIC8vIEJ1aWx0LWluIG1hY3JvIGZ1bmN0aW9uc1xuICBjb25zdCBTQVNfTUFDUk9fRlVOID1cbiAgICAnYnF1b3RlfG5yYnF1b3RlfGNtcHJlc3xxY21wcmVzfGNvbXBzdG9yfCcgK1xuICAgICdkYXRhdHlwfGRpc3BsYXl8ZG98ZWxzZXxlbmR8ZXZhbHxnbG9iYWx8Z290b3wnICtcbiAgICAnaWZ8aW5kZXh8aW5wdXR8a2V5ZGVmfGxhYmVsfGxlZnR8bGVuZ3RofGxldHwnICtcbiAgICAnbG9jYWx8bG93Y2FzZXxtYWNyb3xtZW5kfG5yYnF1b3RlfG5ycXVvdGV8JyArXG4gICAgJ25yc3RyfHB1dHxxY21wcmVzfHFsZWZ0fHFsb3djYXNlfHFzY2FufCcgK1xuICAgICdxc3Vic3RyfHFzeXNmdW5jfHF0cmltfHF1b3RlfHF1cGNhc2V8c2NhbnxzdHJ8JyArXG4gICAgJ3N1YnN0cnxzdXBlcnF8c3lzY2FsbHxzeXNldmFsZnxzeXNleGVjfHN5c2Z1bmN8JyArXG4gICAgJ3N5c2dldHxzeXNscHV0fHN5c3Byb2R8c3lzcmN8c3lzcnB1dHx0aGVufHRvfCcgK1xuICAgICd0cmltfHVucXVvdGV8dW50aWx8dXBjYXNlfHZlcmlmeXx3aGlsZXx3aW5kb3cnO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NBUycsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSwgLy8gU0FTIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ251bGwgbWlzc2luZyBfYWxsXyBfYXV0b21hdGljXyBfY2hhcmFjdGVyXyBfaW5maWxlXyAnICtcbiAgICAgICAgJ19uXyBfbmFtZV8gX251bGxfIF9udW1lcmljXyBfdXNlcl8gX3dlYm91dF8nLFxuICAgICAgbWV0YTpcbiAgICAgICAgU0FTX0tFWVdPUkRTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICAvLyBEaXN0aW5jdCBoaWdobGlnaHQgZm9yIHByb2MgPHByb2M+LCBkYXRhLCBydW4sIHF1aXRcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXlxccyoocHJvYyBbXFx3XFxkX10rfGRhdGF8cnVufHF1aXQpW1xccztdL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTWFjcm8gdmFyaWFibGVzXG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC8mW2EtekEtWl8mXVthLXpBLVowLTlfXSpcXC4/L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gU3BlY2lhbCBlbXBoYXNpcyBmb3IgZGF0YWxpbmVzfGNhcmRzXG4gICAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgICAgYmVnaW46IC9eXFxzKmRhdGFsaW5lc3xjYXJkcy4qOy8sXG4gICAgICAgIGVuZDogL15cXHMqO1xccyokL1xuICAgICAgfSxcbiAgICAgIHsgLy8gQnVpbHQtaW4gbWFjcm8gdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnJSgnICsgU0FTX01BQ1JPX0ZVTiArICcpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gVXNlci1kZWZpbmVkIG1hY3JvIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhZnRlclxuICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgYmVnaW46IC8lW2EtekEtWl9dW2EtekEtWl8wLTldKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ1teJV0oJyArIFNBU19GVU4gKyAnKVtcXChdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKicsICc7JyksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNhcztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBTY2FsYVxuQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbkF1dGhvcjogSmFuIEJlcmtlbCA8amFuLmJlcmtlbEBnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IEVyaWsgT3NoZWltIDxkX21AcGxhc3RpYy1pZG9sYXRyeS5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5zY2FsYS1sYW5nLm9yZ1xuKi9cblxuZnVuY3Rpb24gc2NhbGEoaGxqcykge1xuICBjb25zdCBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgfTtcblxuICAvLyB1c2VkIGluIHN0cmluZ3MgZm9yIGVzY2FwaW5nL2ludGVycG9sYXRpb24vc3Vic3RpdHV0aW9uXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwkW0EtWmEtejAtOV9dKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkXFx7LyxcbiAgICAgICAgZW5kOiAvXFx9L1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICAgIGVuZDogJ1wiXCJcIidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1thLXpdK1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1thLXpdK1wiXCJcIicsXG4gICAgICAgIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbIFNVQlNUIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICBdXG5cbiAgfTtcblxuICBjb25zdCBTWU1CT0wgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1xcJ1xcXFx3W1xcXFx3XFxcXGRfXSooPyFcXCcpJ1xuICB9O1xuXG4gIGNvbnN0IFRZUEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYltBLVpdW0EtWmEtejAtOV9dKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTkFNRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IENMQVNTID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbktleXdvcmRzOiAnY2xhc3Mgb2JqZWN0IHRyYWl0IHR5cGUnLFxuICAgIGVuZDogL1s6PXtcXFtcXG47XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgd2l0aCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbIFRZUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFsgVFlQRSBdXG4gICAgICB9LFxuICAgICAgTkFNRVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBNRVRIT0QgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWYnLFxuICAgIGVuZDogL1s6PXtcXFsoXFxuO10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFsgTkFNRSBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU2NhbGEnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxsJyxcbiAgICAgIGtleXdvcmQ6ICd0eXBlIHlpZWxkIGxhenkgb3ZlcnJpZGUgZGVmIHdpdGggdmFsIHZhciBzZWFsZWQgYWJzdHJhY3QgcHJpdmF0ZSB0cmFpdCBvYmplY3QgaWYgZm9yU29tZSBmb3Igd2hpbGUgdGhyb3cgZmluYWxseSBwcm90ZWN0ZWQgZXh0ZW5kcyBpbXBvcnQgZmluYWwgcmV0dXJuIGVsc2UgYnJlYWsgbmV3IGNhdGNoIHN1cGVyIGNsYXNzIGNhc2UgcGFja2FnZSBkZWZhdWx0IHRyeSB0aGlzIG1hdGNoIGNvbnRpbnVlIHRocm93cyBpbXBsaWNpdCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgU1RSSU5HLFxuICAgICAgU1lNQk9MLFxuICAgICAgVFlQRSxcbiAgICAgIE1FVEhPRCxcbiAgICAgIENMQVNTLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgQU5OT1RBVElPTlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzY2FsYTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBTY2hlbWVcbkRlc2NyaXB0aW9uOiBTY2hlbWUgaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbiB0aGUgTGlzcCBmYW1pbHkuXG4gICAgICAgICAgICAgKGtleXdvcmRzIGJhc2VkIG9uIGh0dHA6Ly9jb21tdW5pdHkuc2NoZW1ld2lraS5vcmcvP3NjaGVtZS1rZXl3b3JkcylcbkF1dGhvcjogSlAgVmVya2FtcCA8bWVAanZlcmthbXAuY29tPlxuQ29udHJpYnV0b3JzOiBJdmFuIFNhZ2FsYWV2IDxtYW5pYWNAc29mdHdhcmVtYW5pYWNzLm9yZz5cbk9yaWdpbjogY2xvanVyZS5qc1xuV2Vic2l0ZTogaHR0cDovL2NvbW11bml0eS5zY2hlbWV3aWtpLm9yZy8/d2hhdC1pcy1zY2hlbWVcbkNhdGVnb3J5OiBsaXNwXG4qL1xuXG5mdW5jdGlvbiBzY2hlbWUoaGxqcykge1xuICBjb25zdCBTQ0hFTUVfSURFTlRfUkUgPSAnW15cXFxcKFxcXFwpXFxcXFtcXFxcXVxcXFx7XFxcXH1cIixcXCdgOyN8XFxcXFxcXFxcXFxcc10rJztcbiAgY29uc3QgU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUgPSAnKC18XFxcXCspP1xcXFxkKyhbLi9dXFxcXGQrKT8nO1xuICBjb25zdCBTQ0hFTUVfQ09NUExFWF9OVU1CRVJfUkUgPSBTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSArICdbK1xcXFwtXScgKyBTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSArICdpJztcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IFNDSEVNRV9JREVOVF9SRSxcbiAgICAnYnVpbHRpbi1uYW1lJzpcbiAgICAgICdjYXNlLWxhbWJkYSBjYWxsL2NjIGNsYXNzIGRlZmluZS1jbGFzcyBleGl0LWhhbmRsZXIgZmllbGQgaW1wb3J0ICcgK1xuICAgICAgJ2luaGVyaXQgaW5pdC1maWVsZCBpbnRlcmZhY2UgbGV0Ki12YWx1ZXMgbGV0LXZhbHVlcyBsZXQvZWMgbWl4aW4gJyArXG4gICAgICAnb3B0LWxhbWJkYSBvdmVycmlkZSBwcm90ZWN0IHByb3ZpZGUgcHVibGljIHJlbmFtZSByZXF1aXJlICcgK1xuICAgICAgJ3JlcXVpcmUtZm9yLXN5bnRheCBzeW50YXggc3ludGF4LWNhc2Ugc3ludGF4LWVycm9yIHVuaXQvc2lnIHVubGVzcyAnICtcbiAgICAgICd3aGVuIHdpdGgtc3ludGF4IGFuZCBiZWdpbiBjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb24gJyArXG4gICAgICAnY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGNhc2UgY29uZCBkZWZpbmUgJyArXG4gICAgICAnZGVmaW5lLXN5bnRheCBkZWxheSBkbyBkeW5hbWljLXdpbmQgZWxzZSBmb3ItZWFjaCBpZiBsYW1iZGEgbGV0IGxldCogJyArXG4gICAgICAnbGV0LXN5bnRheCBsZXRyZWMgbGV0cmVjLXN5bnRheCBtYXAgb3Igc3ludGF4LXJ1bGVzIFxcJyAqICsgLCAsQCAtIC4uLiAvICcgK1xuICAgICAgJzsgPCA8PSA9ID0+ID4gPj0gYCBhYnMgYWNvcyBhbmdsZSBhcHBlbmQgYXBwbHkgYXNpbiBhc3NvYyBhc3NxIGFzc3YgYXRhbiAnICtcbiAgICAgICdib29sZWFuPyBjYWFyIGNhZHIgY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlICcgK1xuICAgICAgJ2NhbGwtd2l0aC12YWx1ZXMgY2FyIGNkZGRhciBjZGRkZHIgY2RyIGNlaWxpbmcgY2hhci0+aW50ZWdlciAnICtcbiAgICAgICdjaGFyLWFscGhhYmV0aWM/IGNoYXItY2k8PT8gY2hhci1jaTw/IGNoYXItY2k9PyBjaGFyLWNpPj0/IGNoYXItY2k+PyAnICtcbiAgICAgICdjaGFyLWRvd25jYXNlIGNoYXItbG93ZXItY2FzZT8gY2hhci1udW1lcmljPyBjaGFyLXJlYWR5PyBjaGFyLXVwY2FzZSAnICtcbiAgICAgICdjaGFyLXVwcGVyLWNhc2U/IGNoYXItd2hpdGVzcGFjZT8gY2hhcjw9PyBjaGFyPD8gY2hhcj0/IGNoYXI+PT8gY2hhcj4/ICcgK1xuICAgICAgJ2NoYXI/IGNsb3NlLWlucHV0LXBvcnQgY2xvc2Utb3V0cHV0LXBvcnQgY29tcGxleD8gY29ucyBjb3MgJyArXG4gICAgICAnY3VycmVudC1pbnB1dC1wb3J0IGN1cnJlbnQtb3V0cHV0LXBvcnQgZGVub21pbmF0b3IgZGlzcGxheSBlb2Ytb2JqZWN0PyAnICtcbiAgICAgICdlcT8gZXF1YWw/IGVxdj8gZXZhbCBldmVuPyBleGFjdC0+aW5leGFjdCBleGFjdD8gZXhwIGV4cHQgZmxvb3IgJyArXG4gICAgICAnZm9yY2UgZ2NkIGltYWctcGFydCBpbmV4YWN0LT5leGFjdCBpbmV4YWN0PyBpbnB1dC1wb3J0PyBpbnRlZ2VyLT5jaGFyICcgK1xuICAgICAgJ2ludGVnZXI/IGludGVyYWN0aW9uLWVudmlyb25tZW50IGxjbSBsZW5ndGggbGlzdCBsaXN0LT5zdHJpbmcgJyArXG4gICAgICAnbGlzdC0+dmVjdG9yIGxpc3QtcmVmIGxpc3QtdGFpbCBsaXN0PyBsb2FkIGxvZyBtYWduaXR1ZGUgbWFrZS1wb2xhciAnICtcbiAgICAgICdtYWtlLXJlY3Rhbmd1bGFyIG1ha2Utc3RyaW5nIG1ha2UtdmVjdG9yIG1heCBtZW1iZXIgbWVtcSBtZW12IG1pbiAnICtcbiAgICAgICdtb2R1bG8gbmVnYXRpdmU/IG5ld2xpbmUgbm90IG51bGwtZW52aXJvbm1lbnQgbnVsbD8gbnVtYmVyLT5zdHJpbmcgJyArXG4gICAgICAnbnVtYmVyPyBudW1lcmF0b3Igb2RkPyBvcGVuLWlucHV0LWZpbGUgb3Blbi1vdXRwdXQtZmlsZSBvdXRwdXQtcG9ydD8gJyArXG4gICAgICAncGFpcj8gcGVlay1jaGFyIHBvcnQ/IHBvc2l0aXZlPyBwcm9jZWR1cmU/IHF1YXNpcXVvdGUgcXVvdGUgcXVvdGllbnQgJyArXG4gICAgICAncmF0aW9uYWw/IHJhdGlvbmFsaXplIHJlYWQgcmVhZC1jaGFyIHJlYWwtcGFydCByZWFsPyByZW1haW5kZXIgcmV2ZXJzZSAnICtcbiAgICAgICdyb3VuZCBzY2hlbWUtcmVwb3J0LWVudmlyb25tZW50IHNldCEgc2V0LWNhciEgc2V0LWNkciEgc2luIHNxcnQgc3RyaW5nICcgK1xuICAgICAgJ3N0cmluZy0+bGlzdCBzdHJpbmctPm51bWJlciBzdHJpbmctPnN5bWJvbCBzdHJpbmctYXBwZW5kIHN0cmluZy1jaTw9PyAnICtcbiAgICAgICdzdHJpbmctY2k8PyBzdHJpbmctY2k9PyBzdHJpbmctY2k+PT8gc3RyaW5nLWNpPj8gc3RyaW5nLWNvcHkgJyArXG4gICAgICAnc3RyaW5nLWZpbGwhIHN0cmluZy1sZW5ndGggc3RyaW5nLXJlZiBzdHJpbmctc2V0ISBzdHJpbmc8PT8gc3RyaW5nPD8gJyArXG4gICAgICAnc3RyaW5nPT8gc3RyaW5nPj0/IHN0cmluZz4/IHN0cmluZz8gc3Vic3RyaW5nIHN5bWJvbC0+c3RyaW5nIHN5bWJvbD8gJyArXG4gICAgICAndGFuIHRyYW5zY3JpcHQtb2ZmIHRyYW5zY3JpcHQtb24gdHJ1bmNhdGUgdmFsdWVzIHZlY3RvciAnICtcbiAgICAgICd2ZWN0b3ItPmxpc3QgdmVjdG9yLWZpbGwhIHZlY3Rvci1sZW5ndGggdmVjdG9yLXJlZiB2ZWN0b3Itc2V0ISAnICtcbiAgICAgICd3aXRoLWlucHV0LWZyb20tZmlsZSB3aXRoLW91dHB1dC10by1maWxlIHdyaXRlIHdyaXRlLWNoYXIgemVybz8nXG4gIH07XG5cbiAgY29uc3QgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogJygjdHwjZnwjXFxcXFxcXFwnICsgU0NIRU1FX0lERU5UX1JFICsgJ3wjXFxcXFxcXFwuKSdcbiAgfTtcblxuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFNDSEVNRV9DT01QTEVYX05VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyNiWzAtMV0rKC9bMC0xXSspPydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnI29bMC03XSsoL1swLTddKyk/J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcjeFswLTlhLWZdKygvWzAtOWEtZl0rKT8nXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IGhsanMuUVVPVEVfU1RSSU5HX01PREU7XG5cbiAgY29uc3QgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnOycsXG4gICAgICAnJCcsXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKCcjXFxcXHwnLCAnXFxcXHwjJylcbiAgXTtcblxuICBjb25zdCBJREVOVCA9IHtcbiAgICBiZWdpbjogU0NIRU1FX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFFVT1RFRF9JREVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXFwnJyArIFNDSEVNRV9JREVOVF9SRVxuICB9O1xuXG4gIGNvbnN0IEJPRFkgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgUVVPVEVEX0xJU1QgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdgJ1xuICAgICAgfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgTElURVJBTCxcbiAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgIElERU5ULFxuICAgICAgICAgIFFVT1RFRF9JREVOVFxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE5BTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiBTQ0hFTUVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG5cbiAgY29uc3QgTEFNQkRBID0ge1xuICAgIGJlZ2luOiAvbGFtYmRhLyxcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgTkFNRSxcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgICAgICBlbmQ6IC9cXF0vXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjb250YWluczogWyBJREVOVCBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IExJU1QgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIExBTUJEQSxcbiAgICAgIE5BTUUsXG4gICAgICBCT0RZXG4gICAgXVxuICB9O1xuXG4gIEJPRFkuY29udGFpbnMgPSBbXG4gICAgTElURVJBTCxcbiAgICBOVU1CRVIsXG4gICAgU1RSSU5HLFxuICAgIElERU5ULFxuICAgIFFVT1RFRF9JREVOVCxcbiAgICBRVU9URURfTElTVCxcbiAgICBMSVNUXG4gIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NjaGVtZScsXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuU0hFQkFORygpLFxuICAgICAgTlVNQkVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgUVVPVEVEX0lERU5ULFxuICAgICAgUVVPVEVEX0xJU1QsXG4gICAgICBMSVNUXG4gICAgXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzY2hlbWU7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogU2NpbGFiXG5BdXRob3I6IFN5bHZlc3RyZSBMZWRydSA8c3lsdmVzdHJlLmxlZHJ1QHNjaWxhYi1lbnRlcnByaXNlcy5jb20+XG5PcmlnaW46IG1hdGxhYi5qc1xuRGVzY3JpcHRpb246IFNjaWxhYiBpcyBhIHBvcnQgZnJvbSBNYXRsYWJcbldlYnNpdGU6IGh0dHBzOi8vd3d3LnNjaWxhYi5vcmdcbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG5mdW5jdGlvbiBzY2lsYWIoaGxqcykge1xuICBjb25zdCBDT01NT05fQ09OVEFJTlMgPSBbXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1xcJ3xcXFwiJyxcbiAgICAgIGVuZDogJ1xcJ3xcXFwiJyxcbiAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFwnXFwnJ1xuICAgICAgICB9IF1cbiAgICB9XG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU2NpbGFiJyxcbiAgICBhbGlhc2VzOiBbICdzY2knIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvJT9cXHcrLyxcbiAgICAgIGtleXdvcmQ6ICdhYm9ydCBicmVhayBjYXNlIGNsZWFyIGNhdGNoIGNvbnRpbnVlIGRvIGVsc2VpZiBlbHNlIGVuZGZ1bmN0aW9uIGVuZCBmb3IgZnVuY3Rpb24gJyArXG4gICAgICAgICdnbG9iYWwgaWYgcGF1c2UgcmV0dXJuIHJlc3VtZSBzZWxlY3QgdHJ5IHRoZW4gd2hpbGUnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJyVmICVGICV0ICVUICVwaSAlZXBzICVpbmYgJW5hbiAlZSAlaSAleiAlcycsXG4gICAgICBidWlsdF9pbjogLy8gU2NpbGFiIGhhcyBtb3JlIHRoYW4gMjAwMCBmdW5jdGlvbnMuIEp1c3QgbGlzdCB0aGUgbW9zdCBjb21tb25zXG4gICAgICAgJ2FicyBhbmQgYWNvcyBhc2luIGF0YW4gY2VpbCBjZCBjaGRpciBjbGVhcmdsb2JhbCBjb3NoIGNvcyBjdW1wcm9kIGRlZmYgZGlzcCBlcnJvciAnICtcbiAgICAgICAnZXhlYyBleGVjc3RyIGV4aXN0cyBleHAgZXllIGdldHRleHQgZmxvb3IgZnByaW50ZiBmcmVhZCBmc29sdmUgaW1hZyBpc2RlZiBpc2VtcHR5ICcgK1xuICAgICAgICdpc2luZmlzbmFuIGlzdmVjdG9yIGxhc3RlcnJvciBsZW5ndGggbG9hZCBsaW5zcGFjZSBsaXN0IGxpc3RmaWxlcyBsb2cxMCBsb2cyIGxvZyAnICtcbiAgICAgICAnbWF4IG1pbiBtc3ByaW50ZiBtY2xvc2UgbW9wZW4gb25lcyBvciBwYXRoY29udmVydCBwb2x5IHByaW50ZiBwcm9kIHB3ZCByYW5kIHJlYWwgJyArXG4gICAgICAgJ3JvdW5kIHNpbmggc2luIHNpemUgZ3NvcnQgc3ByaW50ZiBzcXJ0IHN0cmNhdCBzdHJjbXBzIHRyaW5nIHN1bSBzeXN0ZW0gdGFuaCB0YW4gJyArXG4gICAgICAgJ3R5cGUgdHlwZW5hbWUgd2FybmluZyB6ZXJvcyBtYXRyaXgnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnKFwifCN8L1xcXFwqfFxcXFxzKy9cXFxcdyspJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwpJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIHNlZW1zIHRvIGJlIGEgZ3VhcmQgYWdhaW5zdCBbaWRlbnRdJyBvciBbaWRlbnRdLlxuICAgICAgLy8gcGVyaGFwcyB0byBwcmV2ZW50IGF0dHJpYnV0ZXMgZnJvbSBmbGFnZ2luZyBhcyBrZXl3b3Jkcz9cbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbYS16QS1aX11bYS16QS1aXzAtOV0qW1xcXFwuXFwnXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXVtcXFxcLlxcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogQ09NTU9OX0NPTlRBSU5TXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCcvLycsICckJylcbiAgICBdLmNvbmNhdChDT01NT05fQ09OVEFJTlMpXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2NpbGFiO1xuIiwKICAgICJjb25zdCBNT0RFUyA9IChobGpzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgSU1QT1JUQU5UOiB7XG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnIWltcG9ydGFudCdcbiAgICB9LFxuICAgIEhFWENPTE9SOiB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcjKFthLWZBLUYwLTldezZ9fFthLWZBLUYwLTldezN9KSdcbiAgICB9LFxuICAgIEFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFOiB7XG4gICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1hdHRyJyxcbiAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgIGVuZDogL1xcXS8sXG4gICAgICBpbGxlZ2FsOiAnJCcsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgIF1cbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBUQUdTID0gW1xuICAnYScsXG4gICdhYmJyJyxcbiAgJ2FkZHJlc3MnLFxuICAnYXJ0aWNsZScsXG4gICdhc2lkZScsXG4gICdhdWRpbycsXG4gICdiJyxcbiAgJ2Jsb2NrcXVvdGUnLFxuICAnYm9keScsXG4gICdidXR0b24nLFxuICAnY2FudmFzJyxcbiAgJ2NhcHRpb24nLFxuICAnY2l0ZScsXG4gICdjb2RlJyxcbiAgJ2RkJyxcbiAgJ2RlbCcsXG4gICdkZXRhaWxzJyxcbiAgJ2RmbicsXG4gICdkaXYnLFxuICAnZGwnLFxuICAnZHQnLFxuICAnZW0nLFxuICAnZmllbGRzZXQnLFxuICAnZmlnY2FwdGlvbicsXG4gICdmaWd1cmUnLFxuICAnZm9vdGVyJyxcbiAgJ2Zvcm0nLFxuICAnaDEnLFxuICAnaDInLFxuICAnaDMnLFxuICAnaDQnLFxuICAnaDUnLFxuICAnaDYnLFxuICAnaGVhZGVyJyxcbiAgJ2hncm91cCcsXG4gICdodG1sJyxcbiAgJ2knLFxuICAnaWZyYW1lJyxcbiAgJ2ltZycsXG4gICdpbnB1dCcsXG4gICdpbnMnLFxuICAna2JkJyxcbiAgJ2xhYmVsJyxcbiAgJ2xlZ2VuZCcsXG4gICdsaScsXG4gICdtYWluJyxcbiAgJ21hcmsnLFxuICAnbWVudScsXG4gICduYXYnLFxuICAnb2JqZWN0JyxcbiAgJ29sJyxcbiAgJ3AnLFxuICAncScsXG4gICdxdW90ZScsXG4gICdzYW1wJyxcbiAgJ3NlY3Rpb24nLFxuICAnc3BhbicsXG4gICdzdHJvbmcnLFxuICAnc3VtbWFyeScsXG4gICdzdXAnLFxuICAndGFibGUnLFxuICAndGJvZHknLFxuICAndGQnLFxuICAndGV4dGFyZWEnLFxuICAndGZvb3QnLFxuICAndGgnLFxuICAndGhlYWQnLFxuICAndGltZScsXG4gICd0cicsXG4gICd1bCcsXG4gICd2YXInLFxuICAndmlkZW8nXG5dO1xuXG5jb25zdCBNRURJQV9GRUFUVVJFUyA9IFtcbiAgJ2FueS1ob3ZlcicsXG4gICdhbnktcG9pbnRlcicsXG4gICdhc3BlY3QtcmF0aW8nLFxuICAnY29sb3InLFxuICAnY29sb3ItZ2FtdXQnLFxuICAnY29sb3ItaW5kZXgnLFxuICAnZGV2aWNlLWFzcGVjdC1yYXRpbycsXG4gICdkZXZpY2UtaGVpZ2h0JyxcbiAgJ2RldmljZS13aWR0aCcsXG4gICdkaXNwbGF5LW1vZGUnLFxuICAnZm9yY2VkLWNvbG9ycycsXG4gICdncmlkJyxcbiAgJ2hlaWdodCcsXG4gICdob3ZlcicsXG4gICdpbnZlcnRlZC1jb2xvcnMnLFxuICAnbW9ub2Nocm9tZScsXG4gICdvcmllbnRhdGlvbicsXG4gICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy1pbmxpbmUnLFxuICAncG9pbnRlcicsXG4gICdwcmVmZXJzLWNvbG9yLXNjaGVtZScsXG4gICdwcmVmZXJzLWNvbnRyYXN0JyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC1tb3Rpb24nLFxuICAncHJlZmVycy1yZWR1Y2VkLXRyYW5zcGFyZW5jeScsXG4gICdyZXNvbHV0aW9uJyxcbiAgJ3NjYW4nLFxuICAnc2NyaXB0aW5nJyxcbiAgJ3VwZGF0ZScsXG4gICd3aWR0aCcsXG4gIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24/XG4gICdtaW4td2lkdGgnLFxuICAnbWF4LXdpZHRoJyxcbiAgJ21pbi1oZWlnaHQnLFxuICAnbWF4LWhlaWdodCdcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tY2xhc3Nlc1xuY29uc3QgUFNFVURPX0NMQVNTRVMgPSBbXG4gICdhY3RpdmUnLFxuICAnYW55LWxpbmsnLFxuICAnYmxhbmsnLFxuICAnY2hlY2tlZCcsXG4gICdjdXJyZW50JyxcbiAgJ2RlZmF1bHQnLFxuICAnZGVmaW5lZCcsXG4gICdkaXInLCAvLyBkaXIoKVxuICAnZGlzYWJsZWQnLFxuICAnZHJvcCcsXG4gICdlbXB0eScsXG4gICdlbmFibGVkJyxcbiAgJ2ZpcnN0JyxcbiAgJ2ZpcnN0LWNoaWxkJyxcbiAgJ2ZpcnN0LW9mLXR5cGUnLFxuICAnZnVsbHNjcmVlbicsXG4gICdmdXR1cmUnLFxuICAnZm9jdXMnLFxuICAnZm9jdXMtdmlzaWJsZScsXG4gICdmb2N1cy13aXRoaW4nLFxuICAnaGFzJywgLy8gaGFzKClcbiAgJ2hvc3QnLCAvLyBob3N0IG9yIGhvc3QoKVxuICAnaG9zdC1jb250ZXh0JywgLy8gaG9zdC1jb250ZXh0KClcbiAgJ2hvdmVyJyxcbiAgJ2luZGV0ZXJtaW5hdGUnLFxuICAnaW4tcmFuZ2UnLFxuICAnaW52YWxpZCcsXG4gICdpcycsIC8vIGlzKClcbiAgJ2xhbmcnLCAvLyBsYW5nKClcbiAgJ2xhc3QtY2hpbGQnLFxuICAnbGFzdC1vZi10eXBlJyxcbiAgJ2xlZnQnLFxuICAnbGluaycsXG4gICdsb2NhbC1saW5rJyxcbiAgJ25vdCcsIC8vIG5vdCgpXG4gICdudGgtY2hpbGQnLCAvLyBudGgtY2hpbGQoKVxuICAnbnRoLWNvbCcsIC8vIG50aC1jb2woKVxuICAnbnRoLWxhc3QtY2hpbGQnLCAvLyBudGgtbGFzdC1jaGlsZCgpXG4gICdudGgtbGFzdC1jb2wnLCAvLyBudGgtbGFzdC1jb2woKVxuICAnbnRoLWxhc3Qtb2YtdHlwZScsIC8vbnRoLWxhc3Qtb2YtdHlwZSgpXG4gICdudGgtb2YtdHlwZScsIC8vbnRoLW9mLXR5cGUoKVxuICAnb25seS1jaGlsZCcsXG4gICdvbmx5LW9mLXR5cGUnLFxuICAnb3B0aW9uYWwnLFxuICAnb3V0LW9mLXJhbmdlJyxcbiAgJ3Bhc3QnLFxuICAncGxhY2Vob2xkZXItc2hvd24nLFxuICAncmVhZC1vbmx5JyxcbiAgJ3JlYWQtd3JpdGUnLFxuICAncmVxdWlyZWQnLFxuICAncmlnaHQnLFxuICAncm9vdCcsXG4gICdzY29wZScsXG4gICd0YXJnZXQnLFxuICAndGFyZ2V0LXdpdGhpbicsXG4gICd1c2VyLWludmFsaWQnLFxuICAndmFsaWQnLFxuICAndmlzaXRlZCcsXG4gICd3aGVyZScgLy8gd2hlcmUoKVxuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1lbGVtZW50c1xuY29uc3QgUFNFVURPX0VMRU1FTlRTID0gW1xuICAnYWZ0ZXInLFxuICAnYmFja2Ryb3AnLFxuICAnYmVmb3JlJyxcbiAgJ2N1ZScsXG4gICdjdWUtcmVnaW9uJyxcbiAgJ2ZpcnN0LWxldHRlcicsXG4gICdmaXJzdC1saW5lJyxcbiAgJ2dyYW1tYXItZXJyb3InLFxuICAnbWFya2VyJyxcbiAgJ3BhcnQnLFxuICAncGxhY2Vob2xkZXInLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Nsb3R0ZWQnLFxuICAnc3BlbGxpbmctZXJyb3InXG5dO1xuXG5jb25zdCBBVFRSSUJVVEVTID0gW1xuICAnYWxpZ24tY29udGVudCcsXG4gICdhbGlnbi1pdGVtcycsXG4gICdhbGlnbi1zZWxmJyxcbiAgJ2FuaW1hdGlvbicsXG4gICdhbmltYXRpb24tZGVsYXknLFxuICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICdhbmltYXRpb24tZHVyYXRpb24nLFxuICAnYW5pbWF0aW9uLWZpbGwtbW9kZScsXG4gICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgJ2FuaW1hdGlvbi1uYW1lJyxcbiAgJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJyxcbiAgJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAnYXV0bycsXG4gICdiYWNrZmFjZS12aXNpYmlsaXR5JyxcbiAgJ2JhY2tncm91bmQnLFxuICAnYmFja2dyb3VuZC1hdHRhY2htZW50JyxcbiAgJ2JhY2tncm91bmQtY2xpcCcsXG4gICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgJ2JhY2tncm91bmQtaW1hZ2UnLFxuICAnYmFja2dyb3VuZC1vcmlnaW4nLFxuICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICdiYWNrZ3JvdW5kLXJlcGVhdCcsXG4gICdiYWNrZ3JvdW5kLXNpemUnLFxuICAnYm9yZGVyJyxcbiAgJ2JvcmRlci1ib3R0b20nLFxuICAnYm9yZGVyLWJvdHRvbS1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCcsXG4gICdib3JkZXItY29sbGFwc2UnLFxuICAnYm9yZGVyLWNvbG9yJyxcbiAgJ2JvcmRlci1pbWFnZScsXG4gICdib3JkZXItaW1hZ2Utb3V0c2V0JyxcbiAgJ2JvcmRlci1pbWFnZS1yZXBlYXQnLFxuICAnYm9yZGVyLWltYWdlLXNsaWNlJyxcbiAgJ2JvcmRlci1pbWFnZS1zb3VyY2UnLFxuICAnYm9yZGVyLWltYWdlLXdpZHRoJyxcbiAgJ2JvcmRlci1sZWZ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJyxcbiAgJ2JvcmRlci1sZWZ0LXN0eWxlJyxcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yYWRpdXMnLFxuICAnYm9yZGVyLXJpZ2h0JyxcbiAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICdib3JkZXItcmlnaHQtc3R5bGUnLFxuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJyxcbiAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgJ2JvcmRlci1zdHlsZScsXG4gICdib3JkZXItdG9wJyxcbiAgJ2JvcmRlci10b3AtY29sb3InLFxuICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnLFxuICAnYm9yZGVyLXdpZHRoJyxcbiAgJ2JvdHRvbScsXG4gICdib3gtZGVjb3JhdGlvbi1icmVhaycsXG4gICdib3gtc2hhZG93JyxcbiAgJ2JveC1zaXppbmcnLFxuICAnYnJlYWstYWZ0ZXInLFxuICAnYnJlYWstYmVmb3JlJyxcbiAgJ2JyZWFrLWluc2lkZScsXG4gICdjYXB0aW9uLXNpZGUnLFxuICAnY2xlYXInLFxuICAnY2xpcCcsXG4gICdjbGlwLXBhdGgnLFxuICAnY29sb3InLFxuICAnY29sdW1uLWNvdW50JyxcbiAgJ2NvbHVtbi1maWxsJyxcbiAgJ2NvbHVtbi1nYXAnLFxuICAnY29sdW1uLXJ1bGUnLFxuICAnY29sdW1uLXJ1bGUtY29sb3InLFxuICAnY29sdW1uLXJ1bGUtc3R5bGUnLFxuICAnY29sdW1uLXJ1bGUtd2lkdGgnLFxuICAnY29sdW1uLXNwYW4nLFxuICAnY29sdW1uLXdpZHRoJyxcbiAgJ2NvbHVtbnMnLFxuICAnY29udGVudCcsXG4gICdjb3VudGVyLWluY3JlbWVudCcsXG4gICdjb3VudGVyLXJlc2V0JyxcbiAgJ2N1cnNvcicsXG4gICdkaXJlY3Rpb24nLFxuICAnZGlzcGxheScsXG4gICdlbXB0eS1jZWxscycsXG4gICdmaWx0ZXInLFxuICAnZmxleCcsXG4gICdmbGV4LWJhc2lzJyxcbiAgJ2ZsZXgtZGlyZWN0aW9uJyxcbiAgJ2ZsZXgtZmxvdycsXG4gICdmbGV4LWdyb3cnLFxuICAnZmxleC1zaHJpbmsnLFxuICAnZmxleC13cmFwJyxcbiAgJ2Zsb2F0JyxcbiAgJ2ZvbnQnLFxuICAnZm9udC1kaXNwbGF5JyxcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2ZvbnQtZmVhdHVyZS1zZXR0aW5ncycsXG4gICdmb250LWtlcm5pbmcnLFxuICAnZm9udC1sYW5ndWFnZS1vdmVycmlkZScsXG4gICdmb250LXNpemUnLFxuICAnZm9udC1zaXplLWFkanVzdCcsXG4gICdmb250LXNtb290aGluZycsXG4gICdmb250LXN0cmV0Y2gnLFxuICAnZm9udC1zdHlsZScsXG4gICdmb250LXZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50LWxpZ2F0dXJlcycsXG4gICdmb250LXZhcmlhdGlvbi1zZXR0aW5ncycsXG4gICdmb250LXdlaWdodCcsXG4gICdoZWlnaHQnLFxuICAnaHlwaGVucycsXG4gICdpY29uJyxcbiAgJ2ltYWdlLW9yaWVudGF0aW9uJyxcbiAgJ2ltYWdlLXJlbmRlcmluZycsXG4gICdpbWFnZS1yZXNvbHV0aW9uJyxcbiAgJ2ltZS1tb2RlJyxcbiAgJ2luaGVyaXQnLFxuICAnaW5pdGlhbCcsXG4gICdqdXN0aWZ5LWNvbnRlbnQnLFxuICAnbGVmdCcsXG4gICdsZXR0ZXItc3BhY2luZycsXG4gICdsaW5lLWhlaWdodCcsXG4gICdsaXN0LXN0eWxlJyxcbiAgJ2xpc3Qtc3R5bGUtaW1hZ2UnLFxuICAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXG4gICdsaXN0LXN0eWxlLXR5cGUnLFxuICAnbWFyZ2luJyxcbiAgJ21hcmdpbi1ib3R0b20nLFxuICAnbWFyZ2luLWxlZnQnLFxuICAnbWFyZ2luLXJpZ2h0JyxcbiAgJ21hcmdpbi10b3AnLFxuICAnbWFya3MnLFxuICAnbWFzaycsXG4gICdtYXgtaGVpZ2h0JyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21pbi13aWR0aCcsXG4gICduYXYtZG93bicsXG4gICduYXYtaW5kZXgnLFxuICAnbmF2LWxlZnQnLFxuICAnbmF2LXJpZ2h0JyxcbiAgJ25hdi11cCcsXG4gICdub25lJyxcbiAgJ25vcm1hbCcsXG4gICdvYmplY3QtZml0JyxcbiAgJ29iamVjdC1wb3NpdGlvbicsXG4gICdvcGFjaXR5JyxcbiAgJ29yZGVyJyxcbiAgJ29ycGhhbnMnLFxuICAnb3V0bGluZScsXG4gICdvdXRsaW5lLWNvbG9yJyxcbiAgJ291dGxpbmUtb2Zmc2V0JyxcbiAgJ291dGxpbmUtc3R5bGUnLFxuICAnb3V0bGluZS13aWR0aCcsXG4gICdvdmVyZmxvdycsXG4gICdvdmVyZmxvdy13cmFwJyxcbiAgJ292ZXJmbG93LXgnLFxuICAnb3ZlcmZsb3cteScsXG4gICdwYWRkaW5nJyxcbiAgJ3BhZGRpbmctYm90dG9tJyxcbiAgJ3BhZGRpbmctbGVmdCcsXG4gICdwYWRkaW5nLXJpZ2h0JyxcbiAgJ3BhZGRpbmctdG9wJyxcbiAgJ3BhZ2UtYnJlYWstYWZ0ZXInLFxuICAncGFnZS1icmVhay1iZWZvcmUnLFxuICAncGFnZS1icmVhay1pbnNpZGUnLFxuICAncGVyc3BlY3RpdmUnLFxuICAncGVyc3BlY3RpdmUtb3JpZ2luJyxcbiAgJ3BvaW50ZXItZXZlbnRzJyxcbiAgJ3Bvc2l0aW9uJyxcbiAgJ3F1b3RlcycsXG4gICdyZXNpemUnLFxuICAncmlnaHQnLFxuICAnc3JjJywgLy8gQGZvbnQtZmFjZVxuICAndGFiLXNpemUnLFxuICAndGFibGUtbGF5b3V0JyxcbiAgJ3RleHQtYWxpZ24nLFxuICAndGV4dC1hbGlnbi1sYXN0JyxcbiAgJ3RleHQtZGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24tY29sb3InLFxuICAndGV4dC1kZWNvcmF0aW9uLWxpbmUnLFxuICAndGV4dC1kZWNvcmF0aW9uLXN0eWxlJyxcbiAgJ3RleHQtaW5kZW50JyxcbiAgJ3RleHQtb3ZlcmZsb3cnLFxuICAndGV4dC1yZW5kZXJpbmcnLFxuICAndGV4dC1zaGFkb3cnLFxuICAndGV4dC10cmFuc2Zvcm0nLFxuICAndGV4dC11bmRlcmxpbmUtcG9zaXRpb24nLFxuICAndG9wJyxcbiAgJ3RyYW5zZm9ybScsXG4gICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICd0cmFuc2l0aW9uJyxcbiAgJ3RyYW5zaXRpb24tZGVsYXknLFxuICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICd0cmFuc2l0aW9uLXByb3BlcnR5JyxcbiAgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ3VuaWNvZGUtYmlkaScsXG4gICd2ZXJ0aWNhbC1hbGlnbicsXG4gICd2aXNpYmlsaXR5JyxcbiAgJ3doaXRlLXNwYWNlJyxcbiAgJ3dpZG93cycsXG4gICd3aWR0aCcsXG4gICd3b3JkLWJyZWFrJyxcbiAgJ3dvcmQtc3BhY2luZycsXG4gICd3b3JkLXdyYXAnLFxuICAnei1pbmRleCdcbiAgLy8gcmV2ZXJzZSBtYWtlcyBzdXJlIGxvbmdlciBhdHRyaWJ1dGVzIGBmb250LXdlaWdodGAgYXJlIG1hdGNoZWQgZnVsbHlcbiAgLy8gaW5zdGVhZCBvZiBnZXR0aW5nIGZhbHNlIHBvc2l0aXZlcyBvbiBzYXkgYGZvbnRgXG5dLnJldmVyc2UoKTtcblxuLypcbkxhbmd1YWdlOiBTQ1NTXG5EZXNjcmlwdGlvbjogU2NzcyBpcyBhbiBleHRlbnNpb24gb2YgdGhlIHN5bnRheCBvZiBDU1MuXG5BdXRob3I6IEt1cnQgRW1jaCA8a3VydEBrdXJ0ZW1jaC5jb20+XG5XZWJzaXRlOiBodHRwczovL3Nhc3MtbGFuZy5jb21cbkNhdGVnb3J5OiBjb21tb24sIGNzc1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHNjc3MoaGxqcykge1xuICBjb25zdCBtb2RlcyA9IE1PREVTKGhsanMpO1xuICBjb25zdCBQU0VVRE9fRUxFTUVOVFMkMSA9IFBTRVVET19FTEVNRU5UUztcbiAgY29uc3QgUFNFVURPX0NMQVNTRVMkMSA9IFBTRVVET19DTEFTU0VTO1xuXG4gIGNvbnN0IEFUX0lERU5USUZJRVIgPSAnQFthLXotXSsnOyAvLyBAZm9udC1mYWNlXG4gIGNvbnN0IEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCI7XG4gIGNvbnN0IElERU5UX1JFID0gJ1thLXpBLVotXVthLXpBLVowLTlfLV0qJztcbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnKFxcXFwkJyArIElERU5UX1JFICsgJylcXFxcYidcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTQ1NTJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPS98XFwnXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWlkJyxcbiAgICAgICAgYmVnaW46ICcjW0EtWmEtejAtOV8tXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWNsYXNzJyxcbiAgICAgICAgYmVnaW46ICdcXFxcLltBLVphLXowLTlfLV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgbW9kZXMuQVRUUklCVVRFX1NFTEVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZycsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIC8vIHdhcyB0aGVyZSwgYmVmb3JlLCBidXQgd2h5P1xuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOignICsgUFNFVURPX0NMQVNTRVMkMS5qb2luKCd8JykgKyAnKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOjooJyArIFBTRVVET19FTEVNRU5UUyQxLmpvaW4oJ3wnKSArICcpJ1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAgeyAvLyBwc2V1ZG8tc2VsZWN0b3IgcGFyYW1zXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5DU1NfTlVNQkVSX01PREUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYignICsgQVRUUklCVVRFUy5qb2luKCd8JykgKyAnKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYih3aGl0ZXNwYWNlfHdhaXR8dy1yZXNpemV8dmlzaWJsZXx2ZXJ0aWNhbC10ZXh0fHZlcnRpY2FsLWlkZW9ncmFwaGljfHVwcGVyY2FzZXx1cHBlci1yb21hbnx1cHBlci1hbHBoYXx1bmRlcmxpbmV8dHJhbnNwYXJlbnR8dG9wfHRoaW58dGhpY2t8dGV4dHx0ZXh0LXRvcHx0ZXh0LWJvdHRvbXx0Yi1ybHx0YWJsZS1oZWFkZXItZ3JvdXB8dGFibGUtZm9vdGVyLWdyb3VwfHN3LXJlc2l6ZXxzdXBlcnxzdHJpY3R8c3RhdGljfHNxdWFyZXxzb2xpZHxzbWFsbC1jYXBzfHNlcGFyYXRlfHNlLXJlc2l6ZXxzY3JvbGx8cy1yZXNpemV8cnRsfHJvdy1yZXNpemV8cmlkZ2V8cmlnaHR8cmVwZWF0fHJlcGVhdC15fHJlcGVhdC14fHJlbGF0aXZlfHByb2dyZXNzfHBvaW50ZXJ8b3ZlcmxpbmV8b3V0c2lkZXxvdXRzZXR8b2JsaXF1ZXxub3dyYXB8bm90LWFsbG93ZWR8bm9ybWFsfG5vbmV8bnctcmVzaXplfG5vLXJlcGVhdHxuby1kcm9wfG5ld3NwYXBlcnxuZS1yZXNpemV8bi1yZXNpemV8bW92ZXxtaWRkbGV8bWVkaXVtfGx0cnxsci10Ynxsb3dlcmNhc2V8bG93ZXItcm9tYW58bG93ZXItYWxwaGF8bG9vc2V8bGlzdC1pdGVtfGxpbmV8bGluZS10aHJvdWdofGxpbmUtZWRnZXxsaWdodGVyfGxlZnR8a2VlcC1hbGx8anVzdGlmeXxpdGFsaWN8aW50ZXItd29yZHxpbnRlci1pZGVvZ3JhcGh8aW5zaWRlfGluc2V0fGlubGluZXxpbmxpbmUtYmxvY2t8aW5oZXJpdHxpbmFjdGl2ZXxpZGVvZ3JhcGgtc3BhY2V8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1hbHBoYXxob3Jpem9udGFsfGhpZGRlbnxoZWxwfGhhbmR8Z3Jvb3ZlfGZpeGVkfGVsbGlwc2lzfGUtcmVzaXplfGRvdWJsZXxkb3R0ZWR8ZGlzdHJpYnV0ZXxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc2N8ZGlzYWJsZWR8ZGVmYXVsdHxkZWNpbWFsfGRhc2hlZHxjcm9zc2hhaXJ8Y29sbGFwc2V8Y29sLXJlc2l6ZXxjaXJjbGV8Y2hhcnxjZW50ZXJ8Y2FwaXRhbGl6ZXxicmVhay13b3JkfGJyZWFrLWFsbHxib3R0b218Ym90aHxib2xkZXJ8Ym9sZHxibG9ja3xiaWRpLW92ZXJyaWRlfGJlbG93fGJhc2VsaW5lfGF1dG98YWx3YXlzfGFsbC1zY3JvbGx8YWJzb2x1dGV8dGFibGV8dGFibGUtY2VsbClcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnOicsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIG1vZGVzLkhFWENPTE9SLFxuICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIG1vZGVzLklNUE9SVEFOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gbWF0Y2hpbmcgdGhlc2UgaGVyZSBhbGxvd3MgdXMgdG8gdHJlYXQgdGhlbSBtb3JlIGxpa2UgcmVndWxhciBDU1NcbiAgICAgIC8vIHJ1bGVzIHNvIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUge30gZ2V0cyByZWd1bGFyIHJ1bGUgaGlnaGxpZ2h0aW5nLFxuICAgICAgLy8gd2hpY2ggaXMgd2hhdCB3ZSB3YW50IGZvciBwYWdlIGFuZCBmb250LWZhY2VcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdAKHBhZ2V8Zm9udC1mYWNlKScsXG4gICAgICAgIGxleGVtZXM6IEFUX0lERU5USUZJRVIsXG4gICAgICAgIGtleXdvcmRzOiAnQHBhZ2UgQGZvbnQtZmFjZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQCcsXG4gICAgICAgIGVuZDogJ1t7O10nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAkcGF0dGVybjogL1thLXotXSsvLFxuICAgICAgICAgIGtleXdvcmQ6IEFUX01PRElGSUVSUyxcbiAgICAgICAgICBhdHRyaWJ1dGU6IE1FRElBX0ZFQVRVUkVTLmpvaW4oXCIgXCIpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IEFUX0lERU5USUZJRVIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1thLXotXSsoPz06KS8sXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiYXR0cmlidXRlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIG1vZGVzLkhFWENPTE9SLFxuICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2NzcztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBTaGVsbCBTZXNzaW9uXG5SZXF1aXJlczogYmFzaC5qc1xuQXV0aG9yOiBUU1VZVVNBVE8gS2l0c3VuZSA8bWFrZS5qdXN0Lm9uQGdtYWlsLmNvbT5cbkNhdGVnb3J5OiBjb21tb25cbkF1ZGl0OiAyMDIwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gc2hlbGwoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTaGVsbCBTZXNzaW9uJyxcbiAgICBhbGlhc2VzOiBbICdjb25zb2xlJyBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAvLyBXZSBjYW5ub3QgYWRkIFxccyAoc3BhY2VzKSBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIG90aGVyd2lzZSBpdCB3aWxsIGJlIHRvbyBicm9hZCBhbmQgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdC5cbiAgICAgICAgLy8gRm9yIGluc3RhbmNlLCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGl0IHdvdWxkIG1hdGNoIFwiZWNobyAvcGF0aC90by9ob21lID5cIiBhcyBhIHByb21wdDpcbiAgICAgICAgLy8gZWNobyAvcGF0aC90by9ob21lID4gdC5leGVcbiAgICAgICAgYmVnaW46IC9eXFxzezAsM31bL35cXHdcXGRbXFxdKClALV0qWz4lJCNdLyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvW15cXFxcXSg/PVxccyokKS8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdiYXNoJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNoZWxsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFNtYWxpXG5BdXRob3I6IERlbm5pcyBUaXR6ZSA8ZGVubmlzLnRpdHplQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBCYXNpYyBTbWFsaSBoaWdobGlnaHRpbmdcbldlYnNpdGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9KZXN1c0ZyZWtlL3NtYWxpXG4qL1xuXG5mdW5jdGlvbiBzbWFsaShobGpzKSB7XG4gIGNvbnN0IHNtYWxpX2luc3RyX2xvd19wcmlvID0gW1xuICAgICdhZGQnLFxuICAgICdhbmQnLFxuICAgICdjbXAnLFxuICAgICdjbXBnJyxcbiAgICAnY21wbCcsXG4gICAgJ2NvbnN0JyxcbiAgICAnZGl2JyxcbiAgICAnZG91YmxlJyxcbiAgICAnZmxvYXQnLFxuICAgICdnb3RvJyxcbiAgICAnaWYnLFxuICAgICdpbnQnLFxuICAgICdsb25nJyxcbiAgICAnbW92ZScsXG4gICAgJ211bCcsXG4gICAgJ25lZycsXG4gICAgJ25ldycsXG4gICAgJ25vcCcsXG4gICAgJ25vdCcsXG4gICAgJ29yJyxcbiAgICAncmVtJyxcbiAgICAncmV0dXJuJyxcbiAgICAnc2hsJyxcbiAgICAnc2hyJyxcbiAgICAnc3B1dCcsXG4gICAgJ3N1YicsXG4gICAgJ3Rocm93JyxcbiAgICAndXNocicsXG4gICAgJ3hvcidcbiAgXTtcbiAgY29uc3Qgc21hbGlfaW5zdHJfaGlnaF9wcmlvID0gW1xuICAgICdhZ2V0JyxcbiAgICAnYXB1dCcsXG4gICAgJ2FycmF5JyxcbiAgICAnY2hlY2snLFxuICAgICdleGVjdXRlJyxcbiAgICAnZmlsbCcsXG4gICAgJ2ZpbGxlZCcsXG4gICAgJ2dvdG8vMTYnLFxuICAgICdnb3RvLzMyJyxcbiAgICAnaWdldCcsXG4gICAgJ2luc3RhbmNlJyxcbiAgICAnaW52b2tlJyxcbiAgICAnaXB1dCcsXG4gICAgJ21vbml0b3InLFxuICAgICdwYWNrZWQnLFxuICAgICdzZ2V0JyxcbiAgICAnc3BhcnNlJ1xuICBdO1xuICBjb25zdCBzbWFsaV9rZXl3b3JkcyA9IFtcbiAgICAndHJhbnNpZW50JyxcbiAgICAnY29uc3RydWN0b3InLFxuICAgICdhYnN0cmFjdCcsXG4gICAgJ2ZpbmFsJyxcbiAgICAnc3ludGhldGljJyxcbiAgICAncHVibGljJyxcbiAgICAncHJpdmF0ZScsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ3N0YXRpYycsXG4gICAgJ2JyaWRnZScsXG4gICAgJ3N5c3RlbSdcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU21hbGknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJyMnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxccypcXFxcLmVuZFxcXFxzW2EtekEtWjAtOV0qJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeWyBdKlxcXFwuW2EtekEtWl0qJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcczpbYS16QS1aXzAtOV0qJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxccygnICsgc21hbGlfa2V5d29yZHMuam9pbignfCcpICsgJyknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxccygnICsgc21hbGlfaW5zdHJfbG93X3ByaW8uam9pbignfCcpICsgJylcXFxccydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHMoJyArIHNtYWxpX2luc3RyX2xvd19wcmlvLmpvaW4oJ3wnKSArICcpKCgtfC8pW2EtekEtWjAtOV0rKStcXFxccycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxzKCcgKyBzbWFsaV9pbnN0cl9oaWdoX3ByaW8uam9pbignfCcpICsgJykoKC18LylbYS16QS1aMC05XSspKlxcXFxzJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW46ICdMW15cXCg7Olxcbl0qOycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbdnBdWzAtOV0rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzbWFsaTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBTbWFsbHRhbGtcbkRlc2NyaXB0aW9uOiBTbWFsbHRhbGsgaXMgYW4gb2JqZWN0LW9yaWVudGVkLCBkeW5hbWljYWxseSB0eXBlZCByZWZsZWN0aXZlIHByb2dyYW1taW5nIGxhbmd1YWdlLlxuQXV0aG9yOiBWbGFkaW1pciBHdWJhcmtvdiA8eG9uaXh4QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NtYWxsdGFsa1xuKi9cblxuZnVuY3Rpb24gc21hbGx0YWxrKGhsanMpIHtcbiAgY29uc3QgVkFSX0lERU5UX1JFID0gJ1thLXpdW2EtekEtWjAtOV9dKic7XG4gIGNvbnN0IENIQVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcXFwkLnsxfSdcbiAgfTtcbiAgY29uc3QgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICcjJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTbWFsbHRhbGsnLFxuICAgIGFsaWFzZXM6IFsgJ3N0JyBdLFxuICAgIGtleXdvcmRzOiAnc2VsZiBzdXBlciBuaWwgdHJ1ZSBmYWxzZSB0aGlzQ29udGV4dCcsIC8vIG9ubHkgNlxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJ1wiJywgJ1wiJyksXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiW0EtWl1bQS1aYS16MC05X10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogVkFSX0lERU5UX1JFICsgJzonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBTWU1CT0wsXG4gICAgICBDSEFSLFxuICAgICAge1xuICAgICAgICAvLyBUaGlzIGxvb2tzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBuZWVkZWQgdG8gYXZvaWQgY29tYmluYXRvcmlhbFxuICAgICAgICAvLyBleHBsb3Npb24gdW5kZXIgVjguIEl0IGVmZmVjdGl2ZWx5IG1lYW5zIGB8IHZhcjEgdmFyMiAuLi4gfGAgd2l0aFxuICAgICAgICAvLyB3aGl0ZXNwYWNlIGFkamFjZW50IHRvIGB8YCBiZWluZyBvcHRpb25hbC5cbiAgICAgICAgYmVnaW46ICdcXFxcfFsgXSonICsgVkFSX0lERU5UX1JFICsgJyhbIF0rJyArIFZBUl9JREVOVF9SRSArICcpKlsgXSpcXFxcfCcsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6IC9cXHwvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFsge1xuICAgICAgICAgIGJlZ2luOiAnKFxcXFx8WyBdKik/JyArIFZBUl9JREVOVF9SRVxuICAgICAgICB9IF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnI1xcXFwoJyxcbiAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBDSEFSLFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBTWU1CT0xcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzbWFsbHRhbGs7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogU01MIChTdGFuZGFyZCBNTClcbkF1dGhvcjogRWR3aW4gRGFsb3J6byA8ZWR3aW5AZGFsb3J6by5vcmc+XG5EZXNjcmlwdGlvbjogU01MIGxhbmd1YWdlIGRlZmluaXRpb24uXG5XZWJzaXRlOiBodHRwczovL3d3dy5zbWxuai5vcmdcbk9yaWdpbjogb2NhbWwuanNcbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG4qL1xuZnVuY3Rpb24gc21sKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU01MIChTdGFuZGFyZCBNTCknLFxuICAgIGFsaWFzZXM6IFsgJ21sJyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogJ1thLXpfXVxcXFx3KiE/JyxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIGFjY29yZGluZyB0byBEZWZpbml0aW9uIG9mIFN0YW5kYXJkIE1MIDk3ICAqL1xuICAgICAgICAnYWJzdHlwZSBhbmQgYW5kYWxzbyBhcyBjYXNlIGRhdGF0eXBlIGRvIGVsc2UgZW5kIGVxdHlwZSAnICtcbiAgICAgICAgJ2V4Y2VwdGlvbiBmbiBmdW4gZnVuY3RvciBoYW5kbGUgaWYgaW4gaW5jbHVkZSBpbmZpeCBpbmZpeHIgJyArXG4gICAgICAgICdsZXQgbG9jYWwgbm9uZml4IG9mIG9wIG9wZW4gb3JlbHNlIHJhaXNlIHJlYyBzaGFyaW5nIHNpZyAnICtcbiAgICAgICAgJ3NpZ25hdHVyZSBzdHJ1Y3Qgc3RydWN0dXJlIHRoZW4gdHlwZSB2YWwgd2l0aCB3aXRodHlwZSB3aGVyZSB3aGlsZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogYnVpbHQtaW4gdHlwZXMgYWNjb3JkaW5nIHRvIGJhc2lzIGxpYnJhcnkgKi9cbiAgICAgICAgJ2FycmF5IGJvb2wgY2hhciBleG4gaW50IGxpc3Qgb3B0aW9uIG9yZGVyIHJlYWwgcmVmIHN0cmluZyBzdWJzdHJpbmcgdmVjdG9yIHVuaXQgd29yZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBOT05FIFNPTUUgTEVTUyBFUVVBTCBHUkVBVEVSIG5pbCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXC98Pj4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICBiZWdpbjogL1xcWyhcXHxcXHwpP1xcXXxcXChcXCkvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdcXFxcKFxcXFwqJyxcbiAgICAgICAgJ1xcXFwqXFxcXCknLFxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbnM6IFsgJ3NlbGYnIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcgKi9cbiAgICAgICAgYmVnaW46ICdbYS16X11cXFxcdypcXCdbXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICBpbGxlZ2FsOiBudWxsXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgJ1xcXFxiKDBbeFhdW2EtZkEtRjAtOV9dK1tMbG5dP3wnICtcbiAgICAgICAgICAnMFtvT11bMC03X10rW0xsbl0/fCcgK1xuICAgICAgICAgICcwW2JCXVswMV9dK1tMbG5dP3wnICtcbiAgICAgICAgICAnWzAtOV1bMC05X10qKFtMbG5dfChcXFxcLlswLTlfXSopPyhbZUVdWy0rXT9bMC05X10rKT8pPyknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvWy09XT4vIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNtbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBTUUZcbkF1dGhvcjogU8O4cmVuIEVuZXZvbGRzZW4gPHNlbmV2b2xkc2VuOTBAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBNYXJ2aW4gU2FpZ25hdCA8Y29udGFjdEB6Z21ydm4uY29tPiwgRGVkbWVuIE1pbGxlciA8ZGVkbWVuQGRlZG1lbi5kZT5cbkRlc2NyaXB0aW9uOiBTY3JpcHRpbmcgbGFuZ3VhZ2UgZm9yIHRoZSBBcm1hIGdhbWUgc2VyaWVzXG5XZWJzaXRlOiBodHRwczovL2NvbW11bml0eS5iaXN0dWRpby5jb20vd2lraS9TUUZfc3ludGF4XG5DYXRlZ29yeTogc2NyaXB0aW5nXG4qL1xuXG5mdW5jdGlvbiBzcWYoaGxqcykge1xuICAvLyBJbiBTUUYsIGEgdmFyaWFibGUgc3RhcnQgd2l0aCBfXG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcYl8rW2EtekEtWl1cXHcqL1xuICB9O1xuXG4gIC8vIEluIFNRRiwgYSBmdW5jdGlvbiBzaG91bGQgZml0IG15VGFnX2ZuY19teUZ1bmN0aW9uIHBhdHRlcm5cbiAgLy8gaHR0cHM6Ly9jb21tdW5pdHkuYmlzdHVkaW8uY29tL3dpa2kvRnVuY3Rpb25zX0xpYnJhcnlfKEFybWFfMykjQWRkaW5nX2FfRnVuY3Rpb25cbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiAvW2EtekEtWl1bYS16QS1aMC05XStfZm5jX1xcdyovXG4gIH07XG5cbiAgLy8gSW4gU1FGIHN0cmluZ3MsIHF1b3RlcyBtYXRjaGluZyB0aGUgc3RhcnQgYXJlIGVzY2FwZWQgYnkgYWRkaW5nIGEgY29uc2VjdXRpdmUuXG4gIC8vIEV4YW1wbGUgb2Ygc2luZ2xlIGVzY2FwZWQgcXVvdGVzOiBcIiBcIlwiIFwiIGFuZCAgJyAnJyAnLlxuICBjb25zdCBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFsge1xuICAgICAgICAgIGJlZ2luOiAnXCJcIicsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH0gXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBjb250YWluczogWyB7XG4gICAgICAgICAgYmVnaW46ICdcXCdcXCcnLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9IF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gbGlzdCBvZiBrZXl3b3JkcyBmcm9tOlxuICAvLyBodHRwczovL2NvbW11bml0eS5iaXN0dWRpby5jb20vd2lraS9QcmVQcm9jZXNzb3JfQ29tbWFuZHNcbiAgY29uc3QgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvI1xccypbYS16XStcXGIvLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAnbWV0YS1rZXl3b3JkJzpcbiAgICAgICAgJ2RlZmluZSB1bmRlZiBpZmRlZiBpZm5kZWYgZWxzZSBlbmRpZiBpbmNsdWRlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICBiZWdpbjogLzxbXlxcbj5dKj4vLFxuICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU1FGJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnY2FzZSBjYXRjaCBkZWZhdWx0IGRvIGVsc2UgZXhpdCBleGl0V2l0aCBmb3IgZm9yRWFjaCBmcm9tIGlmICcgK1xuICAgICAgICAncHJpdmF0ZSBzd2l0Y2ggdGhlbiB0aHJvdyB0byB0cnkgd2FpdFVudGlsIHdoaWxlIHdpdGgnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhYnMgYWNjVGltZSBhY29zIGFjdGlvbiBhY3Rpb25JRHMgYWN0aW9uS2V5cyBhY3Rpb25LZXlzSW1hZ2VzIGFjdGlvbktleXNOYW1lcyAnICtcbiAgICAgICAgJ2FjdGlvbktleXNOYW1lc0FycmF5IGFjdGlvbk5hbWUgYWN0aW9uUGFyYW1zIGFjdGl2YXRlQWRkb25zIGFjdGl2YXRlZEFkZG9ucyBhY3RpdmF0ZUtleSAnICtcbiAgICAgICAgJ2FkZDNERU5Db25uZWN0aW9uIGFkZDNERU5FdmVudEhhbmRsZXIgYWRkM0RFTkxheWVyIGFkZEFjdGlvbiBhZGRCYWNrcGFjayBhZGRCYWNrcGFja0NhcmdvICcgK1xuICAgICAgICAnYWRkQmFja3BhY2tDYXJnb0dsb2JhbCBhZGRCYWNrcGFja0dsb2JhbCBhZGRDYW1TaGFrZSBhZGRDdXJhdG9yQWRkb25zIGFkZEN1cmF0b3JDYW1lcmFBcmVhICcgK1xuICAgICAgICAnYWRkQ3VyYXRvckVkaXRhYmxlT2JqZWN0cyBhZGRDdXJhdG9yRWRpdGluZ0FyZWEgYWRkQ3VyYXRvclBvaW50cyBhZGRFZGl0b3JPYmplY3QgYWRkRXZlbnRIYW5kbGVyICcgK1xuICAgICAgICAnYWRkRm9yY2UgYWRkR29nZ2xlcyBhZGRHcm91cEljb24gYWRkSGFuZGd1bkl0ZW0gYWRkSGVhZGdlYXIgYWRkSXRlbSBhZGRJdGVtQ2FyZ28gJyArXG4gICAgICAgICdhZGRJdGVtQ2FyZ29HbG9iYWwgYWRkSXRlbVBvb2wgYWRkSXRlbVRvQmFja3BhY2sgYWRkSXRlbVRvVW5pZm9ybSBhZGRJdGVtVG9WZXN0IGFkZExpdmVTdGF0cyAnICtcbiAgICAgICAgJ2FkZE1hZ2F6aW5lIGFkZE1hZ2F6aW5lQW1tb0NhcmdvIGFkZE1hZ2F6aW5lQ2FyZ28gYWRkTWFnYXppbmVDYXJnb0dsb2JhbCBhZGRNYWdhemluZUdsb2JhbCAnICtcbiAgICAgICAgJ2FkZE1hZ2F6aW5lUG9vbCBhZGRNYWdhemluZXMgYWRkTWFnYXppbmVUdXJyZXQgYWRkTWVudSBhZGRNZW51SXRlbSBhZGRNaXNzaW9uRXZlbnRIYW5kbGVyICcgK1xuICAgICAgICAnYWRkTVBFdmVudEhhbmRsZXIgYWRkTXVzaWNFdmVudEhhbmRsZXIgYWRkT3duZWRNaW5lIGFkZFBsYXllclNjb3JlcyBhZGRQcmltYXJ5V2VhcG9uSXRlbSAnICtcbiAgICAgICAgJ2FkZFB1YmxpY1ZhcmlhYmxlRXZlbnRIYW5kbGVyIGFkZFJhdGluZyBhZGRSZXNvdXJjZXMgYWRkU2NvcmUgYWRkU2NvcmVTaWRlIGFkZFNlY29uZGFyeVdlYXBvbkl0ZW0gJyArXG4gICAgICAgICdhZGRTd2l0Y2hhYmxlVW5pdCBhZGRUZWFtTWVtYmVyIGFkZFRvUmVtYWluc0NvbGxlY3RvciBhZGRUb3JxdWUgYWRkVW5pZm9ybSBhZGRWZWhpY2xlIGFkZFZlc3QgJyArXG4gICAgICAgICdhZGRXYXlwb2ludCBhZGRXZWFwb24gYWRkV2VhcG9uQ2FyZ28gYWRkV2VhcG9uQ2FyZ29HbG9iYWwgYWRkV2VhcG9uR2xvYmFsIGFkZFdlYXBvbkl0ZW0gJyArXG4gICAgICAgICdhZGRXZWFwb25Qb29sIGFkZFdlYXBvblR1cnJldCBhZG1pbiBhZ2VudCBhZ2VudHMgQUdMVG9BU0wgYWltZWRBdFRhcmdldCBhaW1Qb3MgYWlyRGVuc2l0eVJURCAnICtcbiAgICAgICAgJ2FpcnBsYW5lVGhyb3R0bGUgYWlycG9ydFNpZGUgQUlTRmluaXNoSGVhbCBhbGl2ZSBhbGwzREVORW50aXRpZXMgYWxsQWlycG9ydHMgYWxsQ29udHJvbHMgJyArXG4gICAgICAgICdhbGxDdXJhdG9ycyBhbGxDdXRMYXllcnMgYWxsRGVhZCBhbGxEZWFkTWVuIGFsbERpc3BsYXlzIGFsbEdyb3VwcyBhbGxNYXBNYXJrZXJzIGFsbE1pbmVzICcgK1xuICAgICAgICAnYWxsTWlzc2lvbk9iamVjdHMgYWxsb3czRE1vZGUgYWxsb3dDcmV3SW5JbW1vYmlsZSBhbGxvd0N1cmF0b3JMb2dpY0lnbm9yZUFyZWFzIGFsbG93RGFtYWdlICcgK1xuICAgICAgICAnYWxsb3dEYW1tYWdlIGFsbG93RmlsZU9wZXJhdGlvbnMgYWxsb3dGbGVlaW5nIGFsbG93R2V0SW4gYWxsb3dTcHJpbnQgYWxsUGxheWVycyBhbGxTaW1wbGVPYmplY3RzICcgK1xuICAgICAgICAnYWxsU2l0ZXMgYWxsVHVycmV0cyBhbGxVbml0cyBhbGxVbml0c1VBViBhbGxWYXJpYWJsZXMgYW1tbyBhbW1vT25QeWxvbiBhbmQgYW5pbWF0ZSBhbmltYXRlQmF5ICcgK1xuICAgICAgICAnYW5pbWF0ZURvb3IgYW5pbWF0ZVB5bG9uIGFuaW1hdGVTb3VyY2UgYW5pbWF0aW9uTmFtZXMgYW5pbWF0aW9uUGhhc2UgYW5pbWF0aW9uU291cmNlUGhhc2UgJyArXG4gICAgICAgICdhbmltYXRpb25TdGF0ZSBhcHBlbmQgYXBwbHkgYXJtb3J5UG9pbnRzIGFycmF5SW50ZXJzZWN0IGFzaW4gQVNMVG9BR0wgQVNMVG9BVEwgYXNzZXJ0ICcgK1xuICAgICAgICAnYXNzaWduQXNDYXJnbyBhc3NpZ25Bc0NhcmdvSW5kZXggYXNzaWduQXNDb21tYW5kZXIgYXNzaWduQXNEcml2ZXIgYXNzaWduQXNHdW5uZXIgYXNzaWduQXNUdXJyZXQgJyArXG4gICAgICAgICdhc3NpZ25DdXJhdG9yIGFzc2lnbmVkQ2FyZ28gYXNzaWduZWRDb21tYW5kZXIgYXNzaWduZWREcml2ZXIgYXNzaWduZWRHdW5uZXIgYXNzaWduZWRJdGVtcyAnICtcbiAgICAgICAgJ2Fzc2lnbmVkVGFyZ2V0IGFzc2lnbmVkVGVhbSBhc3NpZ25lZFZlaGljbGUgYXNzaWduZWRWZWhpY2xlUm9sZSBhc3NpZ25JdGVtIGFzc2lnblRlYW0gJyArXG4gICAgICAgICdhc3NpZ25Ub0FpcnBvcnQgYXRhbiBhdGFuMiBhdGcgQVRMVG9BU0wgYXR0YWNoZWRPYmplY3QgYXR0YWNoZWRPYmplY3RzIGF0dGFjaGVkVG8gYXR0YWNoT2JqZWN0ICcgK1xuICAgICAgICAnYXR0YWNoVG8gYXR0YWNrRW5hYmxlZCBiYWNrcGFjayBiYWNrcGFja0NhcmdvIGJhY2twYWNrQ29udGFpbmVyIGJhY2twYWNrSXRlbXMgYmFja3BhY2tNYWdhemluZXMgJyArXG4gICAgICAgICdiYWNrcGFja1NwYWNlRm9yIGJlaGF2aW91ciBiZW5jaG1hcmsgYmlub2N1bGFyIGJvdW5kaW5nQm94IGJvdW5kaW5nQm94UmVhbCBib3VuZGluZ0NlbnRlciAnICtcbiAgICAgICAgJ2JyZWFrT3V0IGJyZWFrVG8gYnJpZWZpbmdOYW1lIGJ1aWxkaW5nRXhpdCBidWlsZGluZ1BvcyBidXR0b25BY3Rpb24gYnV0dG9uU2V0QWN0aW9uIGNhZGV0TW9kZSAnICtcbiAgICAgICAgJ2NhbGwgY2FsbEV4dGVuc2lvbiBjYW1Db21tYW5kIGNhbUNvbW1pdCBjYW1Db21taXRQcmVwYXJlZCBjYW1Db21taXR0ZWQgY2FtQ29uc3R1Y3Rpb25TZXRQYXJhbXMgJyArXG4gICAgICAgICdjYW1DcmVhdGUgY2FtRGVzdHJveSBjYW1lcmFFZmZlY3QgY2FtZXJhRWZmZWN0RW5hYmxlSFVEIGNhbWVyYUludGVyZXN0IGNhbWVyYU9uIGNhbWVyYVZpZXcgJyArXG4gICAgICAgICdjYW1wYWlnbkNvbmZpZ0ZpbGUgY2FtUHJlbG9hZCBjYW1QcmVsb2FkZWQgY2FtUHJlcGFyZUJhbmsgY2FtUHJlcGFyZURpciBjYW1QcmVwYXJlRGl2ZSAnICtcbiAgICAgICAgJ2NhbVByZXBhcmVGb2N1cyBjYW1QcmVwYXJlRm92IGNhbVByZXBhcmVGb3ZSYW5nZSBjYW1QcmVwYXJlUG9zIGNhbVByZXBhcmVSZWxQb3MgY2FtUHJlcGFyZVRhcmdldCAnICtcbiAgICAgICAgJ2NhbVNldEJhbmsgY2FtU2V0RGlyIGNhbVNldERpdmUgY2FtU2V0Rm9jdXMgY2FtU2V0Rm92IGNhbVNldEZvdlJhbmdlIGNhbVNldFBvcyBjYW1TZXRSZWxQb3MgJyArXG4gICAgICAgICdjYW1TZXRUYXJnZXQgY2FtVGFyZ2V0IGNhbVVzZU5WRyBjYW5BZGQgY2FuQWRkSXRlbVRvQmFja3BhY2sgY2FuQWRkSXRlbVRvVW5pZm9ybSBjYW5BZGRJdGVtVG9WZXN0ICcgK1xuICAgICAgICAnY2FuY2VsU2ltcGxlVGFza0Rlc3RpbmF0aW9uIGNhbkZpcmUgY2FuTW92ZSBjYW5TbGluZ0xvYWQgY2FuU3RhbmQgY2FuU3VzcGVuZCAnICtcbiAgICAgICAgJ2NhblRyaWdnZXJEeW5hbWljU2ltdWxhdGlvbiBjYW5VbmxvYWRJbkNvbWJhdCBjYW5WZWhpY2xlQ2FyZ28gY2FwdGl2ZSBjYXB0aXZlTnVtIGNiQ2hlY2tlZCAnICtcbiAgICAgICAgJ2NiU2V0Q2hlY2tlZCBjZWlsIGNoYW5uZWxFbmFibGVkIGNoZWF0c0VuYWJsZWQgY2hlY2tBSUZlYXR1cmUgY2hlY2tWaXNpYmlsaXR5IGNsYXNzTmFtZSAnICtcbiAgICAgICAgJ2NsZWFyQWxsSXRlbXNGcm9tQmFja3BhY2sgY2xlYXJCYWNrcGFja0NhcmdvIGNsZWFyQmFja3BhY2tDYXJnb0dsb2JhbCBjbGVhckdyb3VwSWNvbnMgJyArXG4gICAgICAgICdjbGVhckl0ZW1DYXJnbyBjbGVhckl0ZW1DYXJnb0dsb2JhbCBjbGVhckl0ZW1Qb29sIGNsZWFyTWFnYXppbmVDYXJnbyBjbGVhck1hZ2F6aW5lQ2FyZ29HbG9iYWwgJyArXG4gICAgICAgICdjbGVhck1hZ2F6aW5lUG9vbCBjbGVhck92ZXJsYXkgY2xlYXJSYWRpbyBjbGVhcldlYXBvbkNhcmdvIGNsZWFyV2VhcG9uQ2FyZ29HbG9iYWwgY2xlYXJXZWFwb25Qb29sICcgK1xuICAgICAgICAnY2xpZW50T3duZXIgY2xvc2VEaWFsb2cgY2xvc2VEaXNwbGF5IGNsb3NlT3ZlcmxheSBjb2xsYXBzZU9iamVjdFRyZWUgY29sbGVjdDNERU5IaXN0b3J5ICcgK1xuICAgICAgICAnY29sbGVjdGl2ZVJURCBjb21iYXRNb2RlIGNvbW1hbmRBcnRpbGxlcnlGaXJlIGNvbW1hbmRDaGF0IGNvbW1hbmRlciBjb21tYW5kRmlyZSBjb21tYW5kRm9sbG93ICcgK1xuICAgICAgICAnY29tbWFuZEZTTSBjb21tYW5kR2V0T3V0IGNvbW1hbmRpbmdNZW51IGNvbW1hbmRNb3ZlIGNvbW1hbmRSYWRpbyBjb21tYW5kU3RvcCAnICtcbiAgICAgICAgJ2NvbW1hbmRTdXBwcmVzc2l2ZUZpcmUgY29tbWFuZFRhcmdldCBjb21tYW5kV2F0Y2ggY29tbWVudCBjb21taXRPdmVybGF5IGNvbXBpbGUgY29tcGlsZUZpbmFsICcgK1xuICAgICAgICAnY29tcGxldGVkRlNNIGNvbXBvc2VUZXh0IGNvbmZpZ0NsYXNzZXMgY29uZmlnRmlsZSBjb25maWdIaWVyYXJjaHkgY29uZmlnTmFtZSBjb25maWdQcm9wZXJ0aWVzICcgK1xuICAgICAgICAnY29uZmlnU291cmNlQWRkb25MaXN0IGNvbmZpZ1NvdXJjZU1vZCBjb25maWdTb3VyY2VNb2RMaXN0IGNvbmZpcm1TZW5zb3JUYXJnZXQgJyArXG4gICAgICAgICdjb25uZWN0VGVybWluYWxUb1VBViBjb250cm9sc0dyb3VwQ3RybCBjb3B5RnJvbUNsaXBib2FyZCBjb3B5VG9DbGlwYm9hcmQgY29weVdheXBvaW50cyBjb3MgY291bnQgJyArXG4gICAgICAgICdjb3VudEVuZW15IGNvdW50RnJpZW5kbHkgY291bnRTaWRlIGNvdW50VHlwZSBjb3VudFVua25vd24gY3JlYXRlM0RFTkNvbXBvc2l0aW9uIGNyZWF0ZTNERU5FbnRpdHkgJyArXG4gICAgICAgICdjcmVhdGVBZ2VudCBjcmVhdGVDZW50ZXIgY3JlYXRlRGlhbG9nIGNyZWF0ZURpYXJ5TGluayBjcmVhdGVEaWFyeVJlY29yZCBjcmVhdGVEaWFyeVN1YmplY3QgJyArXG4gICAgICAgICdjcmVhdGVEaXNwbGF5IGNyZWF0ZUdlYXJEaWFsb2cgY3JlYXRlR3JvdXAgY3JlYXRlR3VhcmRlZFBvaW50IGNyZWF0ZUxvY2F0aW9uIGNyZWF0ZU1hcmtlciAnICtcbiAgICAgICAgJ2NyZWF0ZU1hcmtlckxvY2FsIGNyZWF0ZU1lbnUgY3JlYXRlTWluZSBjcmVhdGVNaXNzaW9uRGlzcGxheSBjcmVhdGVNUENhbXBhaWduRGlzcGxheSAnICtcbiAgICAgICAgJ2NyZWF0ZVNpbXBsZU9iamVjdCBjcmVhdGVTaW1wbGVUYXNrIGNyZWF0ZVNpdGUgY3JlYXRlU291bmRTb3VyY2UgY3JlYXRlVGFzayBjcmVhdGVUZWFtICcgK1xuICAgICAgICAnY3JlYXRlVHJpZ2dlciBjcmVhdGVVbml0IGNyZWF0ZVZlaGljbGUgY3JlYXRlVmVoaWNsZUNyZXcgY3JlYXRlVmVoaWNsZUxvY2FsIGNyZXcgY3RBZGRIZWFkZXIgJyArXG4gICAgICAgICdjdEFkZFJvdyBjdENsZWFyIGN0Q3VyU2VsIGN0RGF0YSBjdEZpbmRIZWFkZXJSb3dzIGN0RmluZFJvd0hlYWRlciBjdEhlYWRlckNvbnRyb2xzIGN0SGVhZGVyQ291bnQgJyArXG4gICAgICAgICdjdFJlbW92ZUhlYWRlcnMgY3RSZW1vdmVSb3dzIGN0cmxBY3RpdmF0ZSBjdHJsQWRkRXZlbnRIYW5kbGVyIGN0cmxBbmdsZSBjdHJsQXV0b1Njcm9sbERlbGF5ICcgK1xuICAgICAgICAnY3RybEF1dG9TY3JvbGxSZXdpbmQgY3RybEF1dG9TY3JvbGxTcGVlZCBjdHJsQ2hlY2tlZCBjdHJsQ2xhc3NOYW1lIGN0cmxDb21taXQgY3RybENvbW1pdHRlZCAnICtcbiAgICAgICAgJ2N0cmxDcmVhdGUgY3RybERlbGV0ZSBjdHJsRW5hYmxlIGN0cmxFbmFibGVkIGN0cmxGYWRlIGN0cmxIVE1MTG9hZGVkIGN0cmxJREMgY3RybElERCAnICtcbiAgICAgICAgJ2N0cmxNYXBBbmltQWRkIGN0cmxNYXBBbmltQ2xlYXIgY3RybE1hcEFuaW1Db21taXQgY3RybE1hcEFuaW1Eb25lIGN0cmxNYXBDdXJzb3IgY3RybE1hcE1vdXNlT3ZlciAnICtcbiAgICAgICAgJ2N0cmxNYXBTY2FsZSBjdHJsTWFwU2NyZWVuVG9Xb3JsZCBjdHJsTWFwV29ybGRUb1NjcmVlbiBjdHJsTW9kZWwgY3RybE1vZGVsRGlyQW5kVXAgY3RybE1vZGVsU2NhbGUgJyArXG4gICAgICAgICdjdHJsUGFyZW50IGN0cmxQYXJlbnRDb250cm9sc0dyb3VwIGN0cmxQb3NpdGlvbiBjdHJsUmVtb3ZlQWxsRXZlbnRIYW5kbGVycyBjdHJsUmVtb3ZlRXZlbnRIYW5kbGVyICcgK1xuICAgICAgICAnY3RybFNjYWxlIGN0cmxTZXRBY3RpdmVDb2xvciBjdHJsU2V0QW5nbGUgY3RybFNldEF1dG9TY3JvbGxEZWxheSBjdHJsU2V0QXV0b1Njcm9sbFJld2luZCAnICtcbiAgICAgICAgJ2N0cmxTZXRBdXRvU2Nyb2xsU3BlZWQgY3RybFNldEJhY2tncm91bmRDb2xvciBjdHJsU2V0Q2hlY2tlZCBjdHJsU2V0RXZlbnRIYW5kbGVyIGN0cmxTZXRGYWRlICcgK1xuICAgICAgICAnY3RybFNldEZvY3VzIGN0cmxTZXRGb250IGN0cmxTZXRGb250SDEgY3RybFNldEZvbnRIMUIgY3RybFNldEZvbnRIMiBjdHJsU2V0Rm9udEgyQiBjdHJsU2V0Rm9udEgzICcgK1xuICAgICAgICAnY3RybFNldEZvbnRIM0IgY3RybFNldEZvbnRINCBjdHJsU2V0Rm9udEg0QiBjdHJsU2V0Rm9udEg1IGN0cmxTZXRGb250SDVCIGN0cmxTZXRGb250SDYgJyArXG4gICAgICAgICdjdHJsU2V0Rm9udEg2QiBjdHJsU2V0Rm9udEhlaWdodCBjdHJsU2V0Rm9udEhlaWdodEgxIGN0cmxTZXRGb250SGVpZ2h0SDIgY3RybFNldEZvbnRIZWlnaHRIMyAnICtcbiAgICAgICAgJ2N0cmxTZXRGb250SGVpZ2h0SDQgY3RybFNldEZvbnRIZWlnaHRINSBjdHJsU2V0Rm9udEhlaWdodEg2IGN0cmxTZXRGb250SGVpZ2h0U2Vjb25kYXJ5ICcgK1xuICAgICAgICAnY3RybFNldEZvbnRQIGN0cmxTZXRGb250UEIgY3RybFNldEZvbnRTZWNvbmRhcnkgY3RybFNldEZvcmVncm91bmRDb2xvciBjdHJsU2V0TW9kZWwgJyArXG4gICAgICAgICdjdHJsU2V0TW9kZWxEaXJBbmRVcCBjdHJsU2V0TW9kZWxTY2FsZSBjdHJsU2V0UGl4ZWxQcmVjaXNpb24gY3RybFNldFBvc2l0aW9uIGN0cmxTZXRTY2FsZSAnICtcbiAgICAgICAgJ2N0cmxTZXRTdHJ1Y3R1cmVkVGV4dCBjdHJsU2V0VGV4dCBjdHJsU2V0VGV4dENvbG9yIGN0cmxTZXRUb29sdGlwIGN0cmxTZXRUb29sdGlwQ29sb3JCb3ggJyArXG4gICAgICAgICdjdHJsU2V0VG9vbHRpcENvbG9yU2hhZGUgY3RybFNldFRvb2x0aXBDb2xvclRleHQgY3RybFNob3cgY3RybFNob3duIGN0cmxUZXh0IGN0cmxUZXh0SGVpZ2h0ICcgK1xuICAgICAgICAnY3RybFRleHRXaWR0aCBjdHJsVHlwZSBjdHJsVmlzaWJsZSBjdFJvd0NvbnRyb2xzIGN0Um93Q291bnQgY3RTZXRDdXJTZWwgY3RTZXREYXRhICcgK1xuICAgICAgICAnY3RTZXRIZWFkZXJUZW1wbGF0ZSBjdFNldFJvd1RlbXBsYXRlIGN0U2V0VmFsdWUgY3RWYWx1ZSBjdXJhdG9yQWRkb25zIGN1cmF0b3JDYW1lcmEgJyArXG4gICAgICAgICdjdXJhdG9yQ2FtZXJhQXJlYSBjdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmcgY3VyYXRvckNvZWYgY3VyYXRvckVkaXRhYmxlT2JqZWN0cyBjdXJhdG9yRWRpdGluZ0FyZWEgJyArXG4gICAgICAgICdjdXJhdG9yRWRpdGluZ0FyZWFUeXBlIGN1cmF0b3JNb3VzZU92ZXIgY3VyYXRvclBvaW50cyBjdXJhdG9yUmVnaXN0ZXJlZE9iamVjdHMgY3VyYXRvclNlbGVjdGVkICcgK1xuICAgICAgICAnY3VyYXRvcldheXBvaW50Q29zdCBjdXJyZW50M0RFTk9wZXJhdGlvbiBjdXJyZW50Q2hhbm5lbCBjdXJyZW50Q29tbWFuZCBjdXJyZW50TWFnYXppbmUgJyArXG4gICAgICAgICdjdXJyZW50TWFnYXppbmVEZXRhaWwgY3VycmVudE1hZ2F6aW5lRGV0YWlsVHVycmV0IGN1cnJlbnRNYWdhemluZVR1cnJldCBjdXJyZW50TXV6emxlICcgK1xuICAgICAgICAnY3VycmVudE5hbWVzcGFjZSBjdXJyZW50VGFzayBjdXJyZW50VGFza3MgY3VycmVudFRocm93YWJsZSBjdXJyZW50VmlzaW9uTW9kZSBjdXJyZW50V2F5cG9pbnQgJyArXG4gICAgICAgICdjdXJyZW50V2VhcG9uIGN1cnJlbnRXZWFwb25Nb2RlIGN1cnJlbnRXZWFwb25UdXJyZXQgY3VycmVudFplcm9pbmcgY3Vyc29yT2JqZWN0IGN1cnNvclRhcmdldCAnICtcbiAgICAgICAgJ2N1c3RvbUNoYXQgY3VzdG9tUmFkaW8gY3V0RmFkZU91dCBjdXRPYmogY3V0UnNjIGN1dFRleHQgZGFtYWdlIGRhdGUgZGF0ZVRvTnVtYmVyIGRheXRpbWUgJyArXG4gICAgICAgICdkZUFjdGl2YXRlS2V5IGRlYnJpZWZpbmdUZXh0IGRlYnVnRlNNIGRlYnVnTG9nIGRlZyBkZWxldGUzREVORW50aXRpZXMgZGVsZXRlQXQgZGVsZXRlQ2VudGVyICcgK1xuICAgICAgICAnZGVsZXRlQ29sbGVjdGlvbiBkZWxldGVFZGl0b3JPYmplY3QgZGVsZXRlR3JvdXAgZGVsZXRlR3JvdXBXaGVuRW1wdHkgZGVsZXRlSWRlbnRpdHkgJyArXG4gICAgICAgICdkZWxldGVMb2NhdGlvbiBkZWxldGVNYXJrZXIgZGVsZXRlTWFya2VyTG9jYWwgZGVsZXRlUmFuZ2UgZGVsZXRlUmVzb3VyY2VzIGRlbGV0ZVNpdGUgZGVsZXRlU3RhdHVzICcgK1xuICAgICAgICAnZGVsZXRlVGVhbSBkZWxldGVWZWhpY2xlIGRlbGV0ZVZlaGljbGVDcmV3IGRlbGV0ZVdheXBvaW50IGRldGFjaCBkZXRlY3RlZE1pbmVzICcgK1xuICAgICAgICAnZGlhZ19hY3RpdmVNaXNzaW9uRlNNcyBkaWFnX2FjdGl2ZVNjcmlwdHMgZGlhZ19hY3RpdmVTUUZTY3JpcHRzIGRpYWdfYWN0aXZlU1FTU2NyaXB0cyAnICtcbiAgICAgICAgJ2RpYWdfY2FwdHVyZUZyYW1lIGRpYWdfY2FwdHVyZUZyYW1lVG9GaWxlIGRpYWdfY2FwdHVyZVNsb3dGcmFtZSBkaWFnX2NvZGVQZXJmb3JtYW5jZSAnICtcbiAgICAgICAgJ2RpYWdfZHJhd01vZGUgZGlhZ19lbmFibGUgZGlhZ19lbmFibGVkIGRpYWdfZnBzIGRpYWdfZnBzTWluIGRpYWdfZnJhbWVObyBkaWFnX2xpZ2h0TmV3TG9hZCAnICtcbiAgICAgICAgJ2RpYWdfbGlzdCBkaWFnX2xvZyBkaWFnX2xvZ1Nsb3dGcmFtZSBkaWFnX21lcmdlQ29uZmlnRmlsZSBkaWFnX3JlY29yZFR1cnJldExpbWl0cyAnICtcbiAgICAgICAgJ2RpYWdfc2V0TGlnaHROZXcgZGlhZ190aWNrVGltZSBkaWFnX3RvZ2dsZSBkaWFsb2cgZGlhcnlTdWJqZWN0RXhpc3RzIGRpZEpJUCBkaWRKSVBPd25lciAnICtcbiAgICAgICAgJ2RpZmZpY3VsdHkgZGlmZmljdWx0eUVuYWJsZWQgZGlmZmljdWx0eUVuYWJsZWRSVEQgZGlmZmljdWx0eU9wdGlvbiBkaXJlY3Rpb24gZGlyZWN0U2F5IGRpc2FibGVBSSAnICtcbiAgICAgICAgJ2Rpc2FibGVDb2xsaXNpb25XaXRoIGRpc2FibGVDb252ZXJzYXRpb24gZGlzYWJsZURlYnJpZWZpbmdTdGF0cyBkaXNhYmxlTWFwSW5kaWNhdG9ycyAnICtcbiAgICAgICAgJ2Rpc2FibGVOVkdFcXVpcG1lbnQgZGlzYWJsZVJlbW90ZVNlbnNvcnMgZGlzYWJsZVNlcmlhbGl6YXRpb24gZGlzYWJsZVRJRXF1aXBtZW50ICcgK1xuICAgICAgICAnZGlzYWJsZVVBVkNvbm5lY3RhYmlsaXR5IGRpc2FibGVVc2VySW5wdXQgZGlzcGxheUFkZEV2ZW50SGFuZGxlciBkaXNwbGF5Q3RybCBkaXNwbGF5UGFyZW50ICcgK1xuICAgICAgICAnZGlzcGxheVJlbW92ZUFsbEV2ZW50SGFuZGxlcnMgZGlzcGxheVJlbW92ZUV2ZW50SGFuZGxlciBkaXNwbGF5U2V0RXZlbnRIYW5kbGVyIGRpc3NvbHZlVGVhbSAnICtcbiAgICAgICAgJ2Rpc3RhbmNlIGRpc3RhbmNlMkQgZGlzdGFuY2VTcXIgZGlzdHJpYnV0aW9uUmVnaW9uIGRvM0RFTkFjdGlvbiBkb0FydGlsbGVyeUZpcmUgZG9GaXJlIGRvRm9sbG93ICcgK1xuICAgICAgICAnZG9GU00gZG9HZXRPdXQgZG9Nb3ZlIGRvb3JQaGFzZSBkb1N0b3AgZG9TdXBwcmVzc2l2ZUZpcmUgZG9UYXJnZXQgZG9XYXRjaCBkcmF3QXJyb3cgZHJhd0VsbGlwc2UgJyArXG4gICAgICAgICdkcmF3SWNvbiBkcmF3SWNvbjNEIGRyYXdMaW5lIGRyYXdMaW5lM0QgZHJhd0xpbmsgZHJhd0xvY2F0aW9uIGRyYXdQb2x5Z29uIGRyYXdSZWN0YW5nbGUgJyArXG4gICAgICAgICdkcmF3VHJpYW5nbGUgZHJpdmVyIGRyb3AgZHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZSBkeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlQ29lZiAnICtcbiAgICAgICAgJ2R5bmFtaWNTaW11bGF0aW9uRW5hYmxlZCBkeW5hbWljU2ltdWxhdGlvblN5c3RlbUVuYWJsZWQgZWNobyBlZGl0M0RFTk1pc3Npb25BdHRyaWJ1dGVzIGVkaXRPYmplY3QgJyArXG4gICAgICAgICdlZGl0b3JTZXRFdmVudEhhbmRsZXIgZWZmZWN0aXZlQ29tbWFuZGVyIGVtcHR5UG9zaXRpb25zIGVuYWJsZUFJIGVuYWJsZUFJRmVhdHVyZSAnICtcbiAgICAgICAgJ2VuYWJsZUFpbVByZWNpc2lvbiBlbmFibGVBdHRhY2sgZW5hYmxlQXVkaW9GZWF0dXJlIGVuYWJsZUF1dG9TdGFydFVwUlREIGVuYWJsZUF1dG9UcmltUlREICcgK1xuICAgICAgICAnZW5hYmxlQ2FtU2hha2UgZW5hYmxlQ2F1c3RpY3MgZW5hYmxlQ2hhbm5lbCBlbmFibGVDb2xsaXNpb25XaXRoIGVuYWJsZUNvcGlsb3QgJyArXG4gICAgICAgICdlbmFibGVEZWJyaWVmaW5nU3RhdHMgZW5hYmxlRGlhZ0xlZ2VuZCBlbmFibGVEeW5hbWljU2ltdWxhdGlvbiBlbmFibGVEeW5hbWljU2ltdWxhdGlvblN5c3RlbSAnICtcbiAgICAgICAgJ2VuYWJsZUVuZERpYWxvZyBlbmFibGVFbmdpbmVBcnRpbGxlcnkgZW5hYmxlRW52aXJvbm1lbnQgZW5hYmxlRmF0aWd1ZSBlbmFibGVHdW5MaWdodHMgJyArXG4gICAgICAgICdlbmFibGVJbmZvUGFuZWxDb21wb25lbnQgZW5hYmxlSVJMYXNlcnMgZW5hYmxlTWltaWNzIGVuYWJsZVBlcnNvblR1cnJldCBlbmFibGVSYWRpbyBlbmFibGVSZWxvYWQgJyArXG4gICAgICAgICdlbmFibGVSb3BlQXR0YWNoIGVuYWJsZVNhdE5vcm1hbE9uRGV0YWlsIGVuYWJsZVNhdmluZyBlbmFibGVTZW50ZW5jZXMgZW5hYmxlU2ltdWxhdGlvbiAnICtcbiAgICAgICAgJ2VuYWJsZVNpbXVsYXRpb25HbG9iYWwgZW5hYmxlU3RhbWluYSBlbmFibGVUZWFtU3dpdGNoIGVuYWJsZVRyYWZmaWMgZW5hYmxlVUFWQ29ubmVjdGFiaWxpdHkgJyArXG4gICAgICAgICdlbmFibGVVQVZXYXlwb2ludHMgZW5hYmxlVmVoaWNsZUNhcmdvIGVuYWJsZVZlaGljbGVTZW5zb3IgZW5hYmxlV2VhcG9uRGlzYXNzZW1ibHkgJyArXG4gICAgICAgICdlbmRMb2FkaW5nU2NyZWVuIGVuZE1pc3Npb24gZW5naW5lT24gZW5naW5lc0lzT25SVEQgZW5naW5lc1JwbVJURCBlbmdpbmVzVG9ycXVlUlREIGVudGl0aWVzICcgK1xuICAgICAgICAnZW52aXJvbm1lbnRFbmFibGVkIGVzdGltYXRlZEVuZFNlcnZlclRpbWUgZXN0aW1hdGVkVGltZUxlZnQgZXZhbE9iamVjdEFyZ3VtZW50IGV2ZXJ5QmFja3BhY2sgJyArXG4gICAgICAgICdldmVyeUNvbnRhaW5lciBleGVjIGV4ZWNFZGl0b3JTY3JpcHQgZXhlY0ZTTSBleGVjVk0gZXhwIGV4cGVjdGVkRGVzdGluYXRpb24gZXhwb3J0SklQTWVzc2FnZXMgJyArXG4gICAgICAgICdleWVEaXJlY3Rpb24gZXllUG9zIGZhY2UgZmFjdGlvbiBmYWRlTXVzaWMgZmFkZVJhZGlvIGZhZGVTb3VuZCBmYWRlU3BlZWNoIGZhaWxNaXNzaW9uICcgK1xuICAgICAgICAnZmlsbFdlYXBvbnNGcm9tUG9vbCBmaW5kIGZpbmRDb3ZlciBmaW5kRGlzcGxheSBmaW5kRWRpdG9yT2JqZWN0IGZpbmRFbXB0eVBvc2l0aW9uICcgK1xuICAgICAgICAnZmluZEVtcHR5UG9zaXRpb25SZWFkeSBmaW5kSWYgZmluZE5lYXJlc3RFbmVteSBmaW5pc2hNaXNzaW9uSW5pdCBmaW5pdGUgZmlyZSBmaXJlQXRUYXJnZXQgJyArXG4gICAgICAgICdmaXJzdEJhY2twYWNrIGZsYWcgZmxhZ0FuaW1hdGlvblBoYXNlIGZsYWdPd25lciBmbGFnU2lkZSBmbGFnVGV4dHVyZSBmbGVlaW5nIGZsb29yIGZseUluSGVpZ2h0ICcgK1xuICAgICAgICAnZmx5SW5IZWlnaHRBU0wgZm9nIGZvZ0ZvcmVjYXN0IGZvZ1BhcmFtcyBmb3JjZUFkZFVuaWZvcm0gZm9yY2VkTWFwIGZvcmNlRW5kIGZvcmNlRmxhZ1RleHR1cmUgJyArXG4gICAgICAgICdmb3JjZUZvbGxvd1JvYWQgZm9yY2VNYXAgZm9yY2VSZXNwYXduIGZvcmNlU3BlZWQgZm9yY2VXYWxrIGZvcmNlV2VhcG9uRmlyZSBmb3JjZVdlYXRoZXJDaGFuZ2UgJyArXG4gICAgICAgICdmb3JFYWNoTWVtYmVyIGZvckVhY2hNZW1iZXJBZ2VudCBmb3JFYWNoTWVtYmVyVGVhbSBmb3JnZXRUYXJnZXQgZm9ybWF0IGZvcm1hdGlvbiAnICtcbiAgICAgICAgJ2Zvcm1hdGlvbkRpcmVjdGlvbiBmb3JtYXRpb25MZWFkZXIgZm9ybWF0aW9uTWVtYmVycyBmb3JtYXRpb25Qb3NpdGlvbiBmb3JtYXRpb25UYXNrIGZvcm1hdFRleHQgJyArXG4gICAgICAgICdmb3JtTGVhZGVyIGZyZWVMb29rIGZyb21FZGl0b3IgZnVlbCBmdWxsQ3JldyBnZWFySURDQW1tb0NvdW50IGdlYXJTbG90QW1tb0NvdW50IGdlYXJTbG90RGF0YSAnICtcbiAgICAgICAgJ2dldDNERU5BY3Rpb25TdGF0ZSBnZXQzREVOQXR0cmlidXRlIGdldDNERU5DYW1lcmEgZ2V0M0RFTkNvbm5lY3Rpb25zIGdldDNERU5FbnRpdHkgJyArXG4gICAgICAgICdnZXQzREVORW50aXR5SUQgZ2V0M0RFTkdyaWQgZ2V0M0RFTkljb25zVmlzaWJsZSBnZXQzREVOTGF5ZXJFbnRpdGllcyBnZXQzREVOTGluZXNWaXNpYmxlICcgK1xuICAgICAgICAnZ2V0M0RFTk1pc3Npb25BdHRyaWJ1dGUgZ2V0M0RFTk1vdXNlT3ZlciBnZXQzREVOU2VsZWN0ZWQgZ2V0QWltaW5nQ29lZiBnZXRBbGxFbnZTb3VuZENvbnRyb2xsZXJzICcgK1xuICAgICAgICAnZ2V0QWxsSGl0UG9pbnRzRGFtYWdlIGdldEFsbE93bmVkTWluZXMgZ2V0QWxsU291bmRDb250cm9sbGVycyBnZXRBbW1vQ2FyZ28gZ2V0QW5pbUFpbVByZWNpc2lvbiAnICtcbiAgICAgICAgJ2dldEFuaW1TcGVlZENvZWYgZ2V0QXJyYXkgZ2V0QXJ0aWxsZXJ5QW1tbyBnZXRBcnRpbGxlcnlDb21wdXRlclNldHRpbmdzIGdldEFydGlsbGVyeUVUQSAnICtcbiAgICAgICAgJ2dldEFzc2lnbmVkQ3VyYXRvckxvZ2ljIGdldEFzc2lnbmVkQ3VyYXRvclVuaXQgZ2V0QmFja3BhY2tDYXJnbyBnZXRCbGVlZGluZ1JlbWFpbmluZyAnICtcbiAgICAgICAgJ2dldEJ1cm5pbmdWYWx1ZSBnZXRDYW1lcmFWaWV3RGlyZWN0aW9uIGdldENhcmdvSW5kZXggZ2V0Q2VudGVyT2ZNYXNzIGdldENsaWVudFN0YXRlICcgK1xuICAgICAgICAnZ2V0Q2xpZW50U3RhdGVOdW1iZXIgZ2V0Q29tcGF0aWJsZVB5bG9uTWFnYXppbmVzIGdldENvbm5lY3RlZFVBViBnZXRDb250YWluZXJNYXhMb2FkICcgK1xuICAgICAgICAnZ2V0Q3Vyc29yT2JqZWN0UGFyYW1zIGdldEN1c3RvbUFpbUNvZWYgZ2V0RGFtbWFnZSBnZXREZXNjcmlwdGlvbiBnZXREaXIgZ2V0RGlyVmlzdWFsICcgK1xuICAgICAgICAnZ2V0RExDQXNzZXRzVXNhZ2UgZ2V0RExDQXNzZXRzVXNhZ2VCeU5hbWUgZ2V0RExDcyBnZXRFZGl0b3JDYW1lcmEgZ2V0RWRpdG9yTW9kZSAnICtcbiAgICAgICAgJ2dldEVkaXRvck9iamVjdFNjb3BlIGdldEVsZXZhdGlvbk9mZnNldCBnZXRFbnZTb3VuZENvbnRyb2xsZXIgZ2V0RmF0aWd1ZSBnZXRGb3JjZWRGbGFnVGV4dHVyZSAnICtcbiAgICAgICAgJ2dldEZyaWVuZCBnZXRGU01WYXJpYWJsZSBnZXRGdWVsQ2FyZ28gZ2V0R3JvdXBJY29uIGdldEdyb3VwSWNvblBhcmFtcyBnZXRHcm91cEljb25zIGdldEhpZGVGcm9tICcgK1xuICAgICAgICAnZ2V0SGl0IGdldEhpdEluZGV4IGdldEhpdFBvaW50RGFtYWdlIGdldEl0ZW1DYXJnbyBnZXRNYWdhemluZUNhcmdvIGdldE1hcmtlckNvbG9yIGdldE1hcmtlclBvcyAnICtcbiAgICAgICAgJ2dldE1hcmtlclNpemUgZ2V0TWFya2VyVHlwZSBnZXRNYXNzIGdldE1pc3Npb25Db25maWcgZ2V0TWlzc2lvbkNvbmZpZ1ZhbHVlIGdldE1pc3Npb25ETENzICcgK1xuICAgICAgICAnZ2V0TWlzc2lvbkxheWVyRW50aXRpZXMgZ2V0TW9kZWxJbmZvIGdldE1vdXNlUG9zaXRpb24gZ2V0TXVzaWNQbGF5ZWRUaW1lIGdldE51bWJlciAnICtcbiAgICAgICAgJ2dldE9iamVjdEFyZ3VtZW50IGdldE9iamVjdENoaWxkcmVuIGdldE9iamVjdERMQyBnZXRPYmplY3RNYXRlcmlhbHMgZ2V0T2JqZWN0UHJveHkgJyArXG4gICAgICAgICdnZXRPYmplY3RUZXh0dXJlcyBnZXRPYmplY3RUeXBlIGdldE9iamVjdFZpZXdEaXN0YW5jZSBnZXRPeHlnZW5SZW1haW5pbmcgZ2V0UGVyc29uVXNlZERMQ3MgJyArXG4gICAgICAgICdnZXRQaWxvdENhbWVyYURpcmVjdGlvbiBnZXRQaWxvdENhbWVyYVBvc2l0aW9uIGdldFBpbG90Q2FtZXJhUm90YXRpb24gZ2V0UGlsb3RDYW1lcmFUYXJnZXQgJyArXG4gICAgICAgICdnZXRQbGF0ZU51bWJlciBnZXRQbGF5ZXJDaGFubmVsIGdldFBsYXllclNjb3JlcyBnZXRQbGF5ZXJVSUQgZ2V0UG9zIGdldFBvc0FTTCBnZXRQb3NBU0xWaXN1YWwgJyArXG4gICAgICAgICdnZXRQb3NBU0xXIGdldFBvc0FUTCBnZXRQb3NBVExWaXN1YWwgZ2V0UG9zVmlzdWFsIGdldFBvc1dvcmxkIGdldFB5bG9uTWFnYXppbmVzIGdldFJlbERpciAnICtcbiAgICAgICAgJ2dldFJlbFBvcyBnZXRSZW1vdGVTZW5zb3JzRGlzYWJsZWQgZ2V0UmVwYWlyQ2FyZ28gZ2V0UmVzb2x1dGlvbiBnZXRTaGFkb3dEaXN0YW5jZSBnZXRTaG90UGFyZW50cyAnICtcbiAgICAgICAgJ2dldFNsaW5nTG9hZCBnZXRTb3VuZENvbnRyb2xsZXIgZ2V0U291bmRDb250cm9sbGVyUmVzdWx0IGdldFNwZWVkIGdldFN0YW1pbmEgZ2V0U3RhdFZhbHVlICcgK1xuICAgICAgICAnZ2V0U3VwcHJlc3Npb24gZ2V0VGVycmFpbkdyaWQgZ2V0VGVycmFpbkhlaWdodEFTTCBnZXRUZXh0IGdldFRvdGFsRExDVXNhZ2VUaW1lIGdldFVuaXRMb2Fkb3V0ICcgK1xuICAgICAgICAnZ2V0VW5pdFRyYWl0IGdldFVzZXJNRkRUZXh0IGdldFVzZXJNRkR2YWx1ZSBnZXRWYXJpYWJsZSBnZXRWZWhpY2xlQ2FyZ28gZ2V0V2VhcG9uQ2FyZ28gJyArXG4gICAgICAgICdnZXRXZWFwb25Td2F5IGdldFdpbmdzT3JpZW50YXRpb25SVEQgZ2V0V2luZ3NQb3NpdGlvblJURCBnZXRXUFBvcyBnbGFuY2VBdCBnbG9iYWxDaGF0IGdsb2JhbFJhZGlvICcgK1xuICAgICAgICAnZ29nZ2xlcyBnb3RvIGdyb3VwIGdyb3VwQ2hhdCBncm91cEZyb21OZXRJZCBncm91cEljb25TZWxlY3RhYmxlIGdyb3VwSWNvbnNWaXNpYmxlIGdyb3VwSWQgJyArXG4gICAgICAgICdncm91cE93bmVyIGdyb3VwUmFkaW8gZ3JvdXBTZWxlY3RlZFVuaXRzIGdyb3VwU2VsZWN0VW5pdCBndW5uZXIgZ3VzdHMgaGFsdCBoYW5kZ3VuSXRlbXMgJyArXG4gICAgICAgICdoYW5kZ3VuTWFnYXppbmUgaGFuZGd1bldlYXBvbiBoYW5kc0hpdCBoYXNJbnRlcmZhY2UgaGFzUGlsb3RDYW1lcmEgaGFzV2VhcG9uIGhjQWxsR3JvdXBzICcgK1xuICAgICAgICAnaGNHcm91cFBhcmFtcyBoY0xlYWRlciBoY1JlbW92ZUFsbEdyb3VwcyBoY1JlbW92ZUdyb3VwIGhjU2VsZWN0ZWQgaGNTZWxlY3RHcm91cCBoY1NldEdyb3VwICcgK1xuICAgICAgICAnaGNTaG93QmFyIGhjU2hvd25CYXIgaGVhZGdlYXIgaGlkZUJvZHkgaGlkZU9iamVjdCBoaWRlT2JqZWN0R2xvYmFsIGhpZGVTZWxlY3Rpb24gaGludCBoaW50QyAnICtcbiAgICAgICAgJ2hpbnRDYWRldCBoaW50U2lsZW50IGhtZCBob3N0TWlzc2lvbiBodG1sTG9hZCBIVURNb3ZlbWVudExldmVscyBodW1pZGl0eSBpbWFnZSBpbXBvcnRBbGxHcm91cHMgJyArXG4gICAgICAgICdpbXBvcnRhbmNlIGluIGluQXJlYSBpbkFyZWFBcnJheSBpbmNhcGFjaXRhdGVkU3RhdGUgaW5mbGFtZSBpbmZsYW1lZCBpbmZvUGFuZWwgJyArXG4gICAgICAgICdpbmZvUGFuZWxDb21wb25lbnRFbmFibGVkIGluZm9QYW5lbENvbXBvbmVudHMgaW5mb1BhbmVscyBpbkdhbWVVSVNldEV2ZW50SGFuZGxlciBpbmhlcml0c0Zyb20gJyArXG4gICAgICAgICdpbml0QW1iaWVudExpZmUgaW5Qb2x5Z29uIGlucHV0QWN0aW9uIGluUmFuZ2VPZkFydGlsbGVyeSBpbnNlcnRFZGl0b3JPYmplY3QgaW50ZXJzZWN0IGlzM0RFTiAnICtcbiAgICAgICAgJ2lzM0RFTk11bHRpcGxheWVyIGlzQWJsZVRvQnJlYXRoZSBpc0FnZW50IGlzQXJyYXkgaXNBdXRvSG92ZXJPbiBpc0F1dG9ub21vdXMgaXNBdXRvdGVzdCAnICtcbiAgICAgICAgJ2lzQmxlZWRpbmcgaXNCdXJuaW5nIGlzQ2xhc3MgaXNDb2xsaXNpb25MaWdodE9uIGlzQ29waWxvdEVuYWJsZWQgaXNEYW1hZ2VBbGxvd2VkIGlzRGVkaWNhdGVkICcgK1xuICAgICAgICAnaXNETENBdmFpbGFibGUgaXNFbmdpbmVPbiBpc0VxdWFsVG8gaXNFcXVhbFR5cGUgaXNFcXVhbFR5cGVBbGwgaXNFcXVhbFR5cGVBbnkgaXNFcXVhbFR5cGVBcnJheSAnICtcbiAgICAgICAgJ2lzRXF1YWxUeXBlUGFyYW1zIGlzRmlsZVBhdGNoaW5nRW5hYmxlZCBpc0ZsYXNobGlnaHRPbiBpc0ZsYXRFbXB0eSBpc0ZvcmNlZFdhbGsgaXNGb3JtYXRpb25MZWFkZXIgJyArXG4gICAgICAgICdpc0dyb3VwRGVsZXRlZFdoZW5FbXB0eSBpc0hpZGRlbiBpc0luUmVtYWluc0NvbGxlY3RvciBpc0luc3RydWN0b3JGaWd1cmVFbmFibGVkIGlzSVJMYXNlck9uICcgK1xuICAgICAgICAnaXNLZXlBY3RpdmUgaXNLaW5kT2YgaXNMYXNlck9uIGlzTGlnaHRPbiBpc0xvY2FsaXplZCBpc01hbnVhbEZpcmUgaXNNYXJrZWRGb3JDb2xsZWN0aW9uICcgK1xuICAgICAgICAnaXNNdWx0aXBsYXllciBpc011bHRpcGxheWVyU29sbyBpc05pbCBpc051bGwgaXNOdW1iZXIgaXNPYmplY3RIaWRkZW4gaXNPYmplY3RSVEQgaXNPblJvYWQgJyArXG4gICAgICAgICdpc1BpcEVuYWJsZWQgaXNQbGF5ZXIgaXNSZWFsVGltZSBpc1JlbW90ZUV4ZWN1dGVkIGlzUmVtb3RlRXhlY3V0ZWRKSVAgaXNTZXJ2ZXIgaXNTaG93aW5nM0RJY29ucyAnICtcbiAgICAgICAgJ2lzU2ltcGxlT2JqZWN0IGlzU3ByaW50QWxsb3dlZCBpc1N0YW1pbmFFbmFibGVkIGlzU3RlYW1NaXNzaW9uIGlzU3RyZWFtRnJpZW5kbHlVSUVuYWJsZWQgaXNUZXh0ICcgK1xuICAgICAgICAnaXNUb3VjaGluZ0dyb3VuZCBpc1R1cm5lZE91dCBpc1R1dEhpbnRzRW5hYmxlZCBpc1VBVkNvbm5lY3RhYmxlIGlzVUFWQ29ubmVjdGVkIGlzVUlDb250ZXh0ICcgK1xuICAgICAgICAnaXNVbmlmb3JtQWxsb3dlZCBpc1ZlaGljbGVDYXJnbyBpc1ZlaGljbGVSYWRhck9uIGlzVmVoaWNsZVNlbnNvckVuYWJsZWQgaXNXYWxraW5nICcgK1xuICAgICAgICAnaXNXZWFwb25EZXBsb3llZCBpc1dlYXBvblJlc3RlZCBpdGVtQ2FyZ28gaXRlbXMgaXRlbXNXaXRoTWFnYXppbmVzIGpvaW4gam9pbkFzIGpvaW5Bc1NpbGVudCAnICtcbiAgICAgICAgJ2pvaW5TaWxlbnQgam9pblN0cmluZyBrYkFkZERhdGFiYXNlIGtiQWRkRGF0YWJhc2VUYXJnZXRzIGtiQWRkVG9waWMga2JIYXNUb3BpYyBrYlJlYWN0ICcgK1xuICAgICAgICAna2JSZW1vdmVUb3BpYyBrYlRlbGwga2JXYXNTYWlkIGtleUltYWdlIGtleU5hbWUga25vd3NBYm91dCBsYW5kIGxhbmRBdCBsYW5kUmVzdWx0IGxhbmd1YWdlICcgK1xuICAgICAgICAnbGFzZXJUYXJnZXQgbGJBZGQgbGJDbGVhciBsYkNvbG9yIGxiQ29sb3JSaWdodCBsYkN1clNlbCBsYkRhdGEgbGJEZWxldGUgbGJJc1NlbGVjdGVkIGxiUGljdHVyZSAnICtcbiAgICAgICAgJ2xiUGljdHVyZVJpZ2h0IGxiU2VsZWN0aW9uIGxiU2V0Q29sb3IgbGJTZXRDb2xvclJpZ2h0IGxiU2V0Q3VyU2VsIGxiU2V0RGF0YSBsYlNldFBpY3R1cmUgJyArXG4gICAgICAgICdsYlNldFBpY3R1cmVDb2xvciBsYlNldFBpY3R1cmVDb2xvckRpc2FibGVkIGxiU2V0UGljdHVyZUNvbG9yU2VsZWN0ZWQgbGJTZXRQaWN0dXJlUmlnaHQgJyArXG4gICAgICAgICdsYlNldFBpY3R1cmVSaWdodENvbG9yIGxiU2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZCBsYlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWQgJyArXG4gICAgICAgICdsYlNldFNlbGVjdENvbG9yIGxiU2V0U2VsZWN0Q29sb3JSaWdodCBsYlNldFNlbGVjdGVkIGxiU2V0VGV4dCBsYlNldFRleHRSaWdodCBsYlNldFRvb2x0aXAgJyArXG4gICAgICAgICdsYlNldFZhbHVlIGxiU2l6ZSBsYlNvcnQgbGJTb3J0QnlWYWx1ZSBsYlRleHQgbGJUZXh0UmlnaHQgbGJWYWx1ZSBsZWFkZXIgbGVhZGVyYm9hcmREZUluaXQgJyArXG4gICAgICAgICdsZWFkZXJib2FyZEdldFJvd3MgbGVhZGVyYm9hcmRJbml0IGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NGcmllbmRzIGxlYWRlcmJvYXJkc1JlcXVlc3RVcGxvYWRTY29yZSAnICtcbiAgICAgICAgJ2xlYWRlcmJvYXJkc1JlcXVlc3RVcGxvYWRTY29yZUtlZXBCZXN0IGxlYWRlcmJvYXJkU3RhdGUgbGVhdmVWZWhpY2xlIGxpYnJhcnlDcmVkaXRzICcgK1xuICAgICAgICAnbGlicmFyeURpc2NsYWltZXJzIGxpZmVTdGF0ZSBsaWdodEF0dGFjaE9iamVjdCBsaWdodERldGFjaE9iamVjdCBsaWdodElzT24gbGlnaHRuaW5ncyBsaW1pdFNwZWVkICcgK1xuICAgICAgICAnbGluZWFyQ29udmVyc2lvbiBsaW5lSW50ZXJzZWN0cyBsaW5lSW50ZXJzZWN0c09ianMgbGluZUludGVyc2VjdHNTdXJmYWNlcyBsaW5lSW50ZXJzZWN0c1dpdGggJyArXG4gICAgICAgICdsaW5rSXRlbSBsaXN0IGxpc3RPYmplY3RzIGxpc3RSZW1vdGVUYXJnZXRzIGxpc3RWZWhpY2xlU2Vuc29ycyBsbiBsbmJBZGRBcnJheSBsbmJBZGRDb2x1bW4gJyArXG4gICAgICAgICdsbmJBZGRSb3cgbG5iQ2xlYXIgbG5iQ29sb3IgbG5iQ3VyU2VsUm93IGxuYkRhdGEgbG5iRGVsZXRlQ29sdW1uIGxuYkRlbGV0ZVJvdyAnICtcbiAgICAgICAgJ2xuYkdldENvbHVtbnNQb3NpdGlvbiBsbmJQaWN0dXJlIGxuYlNldENvbG9yIGxuYlNldENvbHVtbnNQb3MgbG5iU2V0Q3VyU2VsUm93IGxuYlNldERhdGEgJyArXG4gICAgICAgICdsbmJTZXRQaWN0dXJlIGxuYlNldFRleHQgbG5iU2V0VmFsdWUgbG5iU2l6ZSBsbmJTb3J0IGxuYlNvcnRCeVZhbHVlIGxuYlRleHQgbG5iVmFsdWUgbG9hZCBsb2FkQWJzICcgK1xuICAgICAgICAnbG9hZEJhY2twYWNrIGxvYWRGaWxlIGxvYWRHYW1lIGxvYWRJZGVudGl0eSBsb2FkTWFnYXppbmUgbG9hZE92ZXJsYXkgbG9hZFN0YXR1cyBsb2FkVW5pZm9ybSAnICtcbiAgICAgICAgJ2xvYWRWZXN0IGxvY2FsIGxvY2FsaXplIGxvY2F0aW9uUG9zaXRpb24gbG9jayBsb2NrQ2FtZXJhVG8gbG9ja0NhcmdvIGxvY2tEcml2ZXIgbG9ja2VkICcgK1xuICAgICAgICAnbG9ja2VkQ2FyZ28gbG9ja2VkRHJpdmVyIGxvY2tlZFR1cnJldCBsb2NrSWRlbnRpdHkgbG9ja1R1cnJldCBsb2NrV1AgbG9nIGxvZ0VudGl0aWVzIGxvZ05ldHdvcmsgJyArXG4gICAgICAgICdsb2dOZXR3b3JrVGVybWluYXRlIGxvb2tBdCBsb29rQXRQb3MgbWFnYXppbmVDYXJnbyBtYWdhemluZXMgbWFnYXppbmVzQWxsVHVycmV0cyBtYWdhemluZXNBbW1vICcgK1xuICAgICAgICAnbWFnYXppbmVzQW1tb0NhcmdvIG1hZ2F6aW5lc0FtbW9GdWxsIG1hZ2F6aW5lc0RldGFpbCBtYWdhemluZXNEZXRhaWxCYWNrcGFjayAnICtcbiAgICAgICAgJ21hZ2F6aW5lc0RldGFpbFVuaWZvcm0gbWFnYXppbmVzRGV0YWlsVmVzdCBtYWdhemluZXNUdXJyZXQgbWFnYXppbmVUdXJyZXRBbW1vIG1hcEFuaW1BZGQgJyArXG4gICAgICAgICdtYXBBbmltQ2xlYXIgbWFwQW5pbUNvbW1pdCBtYXBBbmltRG9uZSBtYXBDZW50ZXJPbkNhbWVyYSBtYXBHcmlkUG9zaXRpb24gbWFya0FzRmluaXNoZWRPblN0ZWFtICcgK1xuICAgICAgICAnbWFya2VyQWxwaGEgbWFya2VyQnJ1c2ggbWFya2VyQ29sb3IgbWFya2VyRGlyIG1hcmtlclBvcyBtYXJrZXJTaGFwZSBtYXJrZXJTaXplIG1hcmtlclRleHQgJyArXG4gICAgICAgICdtYXJrZXJUeXBlIG1heCBtZW1iZXJzIG1lbnVBY3Rpb24gbWVudUFkZCBtZW51Q2hlY2tlZCBtZW51Q2xlYXIgbWVudUNvbGxhcHNlIG1lbnVEYXRhIG1lbnVEZWxldGUgJyArXG4gICAgICAgICdtZW51RW5hYmxlIG1lbnVFbmFibGVkIG1lbnVFeHBhbmQgbWVudUhvdmVyIG1lbnVQaWN0dXJlIG1lbnVTZXRBY3Rpb24gbWVudVNldENoZWNrIG1lbnVTZXREYXRhICcgK1xuICAgICAgICAnbWVudVNldFBpY3R1cmUgbWVudVNldFZhbHVlIG1lbnVTaG9ydGN1dCBtZW51U2hvcnRjdXRUZXh0IG1lbnVTaXplIG1lbnVTb3J0IG1lbnVUZXh0IG1lbnVVUkwgJyArXG4gICAgICAgICdtZW51VmFsdWUgbWluIG1pbmVBY3RpdmUgbWluZURldGVjdGVkQnkgbWlzc2lvbkNvbmZpZ0ZpbGUgbWlzc2lvbkRpZmZpY3VsdHkgbWlzc2lvbk5hbWUgJyArXG4gICAgICAgICdtaXNzaW9uTmFtZXNwYWNlIG1pc3Npb25TdGFydCBtaXNzaW9uVmVyc2lvbiBtb2QgbW9kZWxUb1dvcmxkIG1vZGVsVG9Xb3JsZFZpc3VhbCAnICtcbiAgICAgICAgJ21vZGVsVG9Xb3JsZFZpc3VhbFdvcmxkIG1vZGVsVG9Xb3JsZFdvcmxkIG1vZFBhcmFtcyBtb29uSW50ZW5zaXR5IG1vb25QaGFzZSBtb3JhbGUgbW92ZSAnICtcbiAgICAgICAgJ21vdmUzREVOQ2FtZXJhIG1vdmVJbkFueSBtb3ZlSW5DYXJnbyBtb3ZlSW5Db21tYW5kZXIgbW92ZUluRHJpdmVyIG1vdmVJbkd1bm5lciBtb3ZlSW5UdXJyZXQgJyArXG4gICAgICAgICdtb3ZlT2JqZWN0VG9FbmQgbW92ZU91dCBtb3ZlVGltZSBtb3ZlVG8gbW92ZVRvQ29tcGxldGVkIG1vdmVUb0ZhaWxlZCBtdXNpY1ZvbHVtZSBuYW1lIG5hbWVTb3VuZCAnICtcbiAgICAgICAgJ25lYXJFbnRpdGllcyBuZWFyZXN0QnVpbGRpbmcgbmVhcmVzdExvY2F0aW9uIG5lYXJlc3RMb2NhdGlvbnMgbmVhcmVzdExvY2F0aW9uV2l0aER1YmJpbmcgJyArXG4gICAgICAgICduZWFyZXN0T2JqZWN0IG5lYXJlc3RPYmplY3RzIG5lYXJlc3RUZXJyYWluT2JqZWN0cyBuZWFyT2JqZWN0cyBuZWFyT2JqZWN0c1JlYWR5IG5lYXJSb2FkcyAnICtcbiAgICAgICAgJ25lYXJTdXBwbGllcyBuZWFyVGFyZ2V0cyBuZWVkUmVsb2FkIG5ldElkIG5ldE9iak51bGwgbmV3T3ZlcmxheSBuZXh0TWVudUl0ZW1JbmRleCAnICtcbiAgICAgICAgJ25leHRXZWF0aGVyQ2hhbmdlIG5NZW51SXRlbXMgbm90IG51bWJlck9mRW5naW5lc1JURCBudW1iZXJUb0RhdGUgb2JqZWN0Q3VyYXRvcnMgb2JqZWN0RnJvbU5ldElkICcgK1xuICAgICAgICAnb2JqZWN0UGFyZW50IG9ialN0YXR1cyBvbkJyaWVmaW5nR3JvdXAgb25CcmllZmluZ05vdGVzIG9uQnJpZWZpbmdQbGFuIG9uQnJpZWZpbmdUZWFtU3dpdGNoICcgK1xuICAgICAgICAnb25Db21tYW5kTW9kZUNoYW5nZWQgb25Eb3VibGVDbGljayBvbkVhY2hGcmFtZSBvbkdyb3VwSWNvbkNsaWNrIG9uR3JvdXBJY29uT3ZlckVudGVyICcgK1xuICAgICAgICAnb25Hcm91cEljb25PdmVyTGVhdmUgb25IQ0dyb3VwU2VsZWN0aW9uQ2hhbmdlZCBvbk1hcFNpbmdsZUNsaWNrIG9uUGxheWVyQ29ubmVjdGVkICcgK1xuICAgICAgICAnb25QbGF5ZXJEaXNjb25uZWN0ZWQgb25QcmVsb2FkRmluaXNoZWQgb25QcmVsb2FkU3RhcnRlZCBvblNob3dOZXdPYmplY3Qgb25UZWFtU3dpdGNoICcgK1xuICAgICAgICAnb3BlbkN1cmF0b3JJbnRlcmZhY2Ugb3BlbkRMQ1BhZ2Ugb3Blbk1hcCBvcGVuU3RlYW1BcHAgb3BlbllvdXR1YmVWaWRlbyBvciBvcmRlckdldEluIG92ZXJjYXN0ICcgK1xuICAgICAgICAnb3ZlcmNhc3RGb3JlY2FzdCBvd25lciBwYXJhbSBwYXJhbXMgcGFyc2VOdW1iZXIgcGFyc2VTaW1wbGVBcnJheSBwYXJzZVRleHQgcGFyc2luZ05hbWVzcGFjZSAnICtcbiAgICAgICAgJ3BhcnRpY2xlc1F1YWxpdHkgcGlja1dlYXBvblBvb2wgcGl0Y2ggcGl4ZWxHcmlkIHBpeGVsR3JpZEJhc2UgcGl4ZWxHcmlkTm9VSVNjYWxlIHBpeGVsSCBwaXhlbFcgJyArXG4gICAgICAgICdwbGF5YWJsZVNsb3RzTnVtYmVyIHBsYXlhYmxlVW5pdHMgcGxheUFjdGlvbiBwbGF5QWN0aW9uTm93IHBsYXllciBwbGF5ZXJSZXNwYXduVGltZSBwbGF5ZXJTaWRlICcgK1xuICAgICAgICAncGxheWVyc051bWJlciBwbGF5R2VzdHVyZSBwbGF5TWlzc2lvbiBwbGF5TW92ZSBwbGF5TW92ZU5vdyBwbGF5TXVzaWMgcGxheVNjcmlwdGVkTWlzc2lvbiAnICtcbiAgICAgICAgJ3BsYXlTb3VuZCBwbGF5U291bmQzRCBwb3NpdGlvbiBwb3NpdGlvbkNhbWVyYVRvV29ybGQgcG9zU2NyZWVuVG9Xb3JsZCBwb3NXb3JsZFRvU2NyZWVuICcgK1xuICAgICAgICAncHBFZmZlY3RBZGp1c3QgcHBFZmZlY3RDb21taXQgcHBFZmZlY3RDb21taXR0ZWQgcHBFZmZlY3RDcmVhdGUgcHBFZmZlY3REZXN0cm95IHBwRWZmZWN0RW5hYmxlICcgK1xuICAgICAgICAncHBFZmZlY3RFbmFibGVkIHBwRWZmZWN0Rm9yY2VJbk5WRyBwcmVjaXNpb24gcHJlbG9hZENhbWVyYSBwcmVsb2FkT2JqZWN0IHByZWxvYWRTb3VuZCAnICtcbiAgICAgICAgJ3ByZWxvYWRUaXRsZU9iaiBwcmVsb2FkVGl0bGVSc2MgcHJlcHJvY2Vzc0ZpbGUgcHJlcHJvY2Vzc0ZpbGVMaW5lTnVtYmVycyBwcmltYXJ5V2VhcG9uICcgK1xuICAgICAgICAncHJpbWFyeVdlYXBvbkl0ZW1zIHByaW1hcnlXZWFwb25NYWdhemluZSBwcmlvcml0eSBwcm9jZXNzRGlhcnlMaW5rIHByb2R1Y3RWZXJzaW9uIHByb2ZpbGVOYW1lICcgK1xuICAgICAgICAncHJvZmlsZU5hbWVzcGFjZSBwcm9maWxlTmFtZVN0ZWFtIHByb2dyZXNzTG9hZGluZ1NjcmVlbiBwcm9ncmVzc1Bvc2l0aW9uIHByb2dyZXNzU2V0UG9zaXRpb24gJyArXG4gICAgICAgICdwdWJsaWNWYXJpYWJsZSBwdWJsaWNWYXJpYWJsZUNsaWVudCBwdWJsaWNWYXJpYWJsZVNlcnZlciBwdXNoQmFjayBwdXNoQmFja1VuaXF1ZSBwdXRXZWFwb25Qb29sICcgK1xuICAgICAgICAncXVlcnlJdGVtc1Bvb2wgcXVlcnlNYWdhemluZVBvb2wgcXVlcnlXZWFwb25Qb29sIHJhZCByYWRpb0NoYW5uZWxBZGQgcmFkaW9DaGFubmVsQ3JlYXRlICcgK1xuICAgICAgICAncmFkaW9DaGFubmVsUmVtb3ZlIHJhZGlvQ2hhbm5lbFNldENhbGxTaWduIHJhZGlvQ2hhbm5lbFNldExhYmVsIHJhZGlvVm9sdW1lIHJhaW4gcmFpbmJvdyByYW5kb20gJyArXG4gICAgICAgICdyYW5rIHJhbmtJZCByYXRpbmcgcmVjdGFuZ3VsYXIgcmVnaXN0ZXJlZFRhc2tzIHJlZ2lzdGVyVGFzayByZWxvYWQgcmVsb2FkRW5hYmxlZCByZW1vdGVDb250cm9sICcgK1xuICAgICAgICAncmVtb3RlRXhlYyByZW1vdGVFeGVjQ2FsbCByZW1vdGVFeGVjdXRlZE93bmVyIHJlbW92ZTNERU5Db25uZWN0aW9uIHJlbW92ZTNERU5FdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdyZW1vdmUzREVOTGF5ZXIgcmVtb3ZlQWN0aW9uIHJlbW92ZUFsbDNERU5FdmVudEhhbmRsZXJzIHJlbW92ZUFsbEFjdGlvbnMgcmVtb3ZlQWxsQXNzaWduZWRJdGVtcyAnICtcbiAgICAgICAgJ3JlbW92ZUFsbENvbnRhaW5lcnMgcmVtb3ZlQWxsQ3VyYXRvckFkZG9ucyByZW1vdmVBbGxDdXJhdG9yQ2FtZXJhQXJlYXMgJyArXG4gICAgICAgICdyZW1vdmVBbGxDdXJhdG9yRWRpdGluZ0FyZWFzIHJlbW92ZUFsbEV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsSGFuZGd1bkl0ZW1zIHJlbW92ZUFsbEl0ZW1zICcgK1xuICAgICAgICAncmVtb3ZlQWxsSXRlbXNXaXRoTWFnYXppbmVzIHJlbW92ZUFsbE1pc3Npb25FdmVudEhhbmRsZXJzIHJlbW92ZUFsbE1QRXZlbnRIYW5kbGVycyAnICtcbiAgICAgICAgJ3JlbW92ZUFsbE11c2ljRXZlbnRIYW5kbGVycyByZW1vdmVBbGxPd25lZE1pbmVzIHJlbW92ZUFsbFByaW1hcnlXZWFwb25JdGVtcyByZW1vdmVBbGxXZWFwb25zICcgK1xuICAgICAgICAncmVtb3ZlQmFja3BhY2sgcmVtb3ZlQmFja3BhY2tHbG9iYWwgcmVtb3ZlQ3VyYXRvckFkZG9ucyByZW1vdmVDdXJhdG9yQ2FtZXJhQXJlYSAnICtcbiAgICAgICAgJ3JlbW92ZUN1cmF0b3JFZGl0YWJsZU9iamVjdHMgcmVtb3ZlQ3VyYXRvckVkaXRpbmdBcmVhIHJlbW92ZURyYXdJY29uIHJlbW92ZURyYXdMaW5rcyAnICtcbiAgICAgICAgJ3JlbW92ZUV2ZW50SGFuZGxlciByZW1vdmVGcm9tUmVtYWluc0NvbGxlY3RvciByZW1vdmVHb2dnbGVzIHJlbW92ZUdyb3VwSWNvbiByZW1vdmVIYW5kZ3VuSXRlbSAnICtcbiAgICAgICAgJ3JlbW92ZUhlYWRnZWFyIHJlbW92ZUl0ZW0gcmVtb3ZlSXRlbUZyb21CYWNrcGFjayByZW1vdmVJdGVtRnJvbVVuaWZvcm0gcmVtb3ZlSXRlbUZyb21WZXN0ICcgK1xuICAgICAgICAncmVtb3ZlSXRlbXMgcmVtb3ZlTWFnYXppbmUgcmVtb3ZlTWFnYXppbmVHbG9iYWwgcmVtb3ZlTWFnYXppbmVzIHJlbW92ZU1hZ2F6aW5lc1R1cnJldCAnICtcbiAgICAgICAgJ3JlbW92ZU1hZ2F6aW5lVHVycmV0IHJlbW92ZU1lbnVJdGVtIHJlbW92ZU1pc3Npb25FdmVudEhhbmRsZXIgcmVtb3ZlTVBFdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdyZW1vdmVNdXNpY0V2ZW50SGFuZGxlciByZW1vdmVPd25lZE1pbmUgcmVtb3ZlUHJpbWFyeVdlYXBvbkl0ZW0gcmVtb3ZlU2Vjb25kYXJ5V2VhcG9uSXRlbSAnICtcbiAgICAgICAgJ3JlbW92ZVNpbXBsZVRhc2sgcmVtb3ZlU3dpdGNoYWJsZVVuaXQgcmVtb3ZlVGVhbU1lbWJlciByZW1vdmVVbmlmb3JtIHJlbW92ZVZlc3QgcmVtb3ZlV2VhcG9uICcgK1xuICAgICAgICAncmVtb3ZlV2VhcG9uQXR0YWNobWVudENhcmdvIHJlbW92ZVdlYXBvbkNhcmdvIHJlbW92ZVdlYXBvbkdsb2JhbCByZW1vdmVXZWFwb25UdXJyZXQgJyArXG4gICAgICAgICdyZXBvcnRSZW1vdGVUYXJnZXQgcmVxdWlyZWRWZXJzaW9uIHJlc2V0Q2FtU2hha2UgcmVzZXRTdWJncm91cERpcmVjdGlvbiByZXNpemUgcmVzb3VyY2VzICcgK1xuICAgICAgICAncmVzcGF3blZlaGljbGUgcmVzdGFydEVkaXRvckNhbWVyYSByZXZlYWwgcmV2ZWFsTWluZSByZXZlcnNlIHJldmVyc2VkTW91c2VZIHJvYWRBdCAnICtcbiAgICAgICAgJ3JvYWRzQ29ubmVjdGVkVG8gcm9sZURlc2NyaXB0aW9uIHJvcGVBdHRhY2hlZE9iamVjdHMgcm9wZUF0dGFjaGVkVG8gcm9wZUF0dGFjaEVuYWJsZWQgJyArXG4gICAgICAgICdyb3BlQXR0YWNoVG8gcm9wZUNyZWF0ZSByb3BlQ3V0IHJvcGVEZXN0cm95IHJvcGVEZXRhY2ggcm9wZUVuZFBvc2l0aW9uIHJvcGVMZW5ndGggcm9wZXMgJyArXG4gICAgICAgICdyb3BlVW53aW5kIHJvcGVVbndvdW5kIHJvdG9yc0ZvcmNlc1JURCByb3RvcnNScG1SVEQgcm91bmQgcnVuSW5pdFNjcmlwdCBzYWZlWm9uZUggc2FmZVpvbmVXICcgK1xuICAgICAgICAnc2FmZVpvbmVXQWJzIHNhZmVab25lWCBzYWZlWm9uZVhBYnMgc2FmZVpvbmVZIHNhdmUzREVOSW52ZW50b3J5IHNhdmVHYW1lIHNhdmVJZGVudGl0eSAnICtcbiAgICAgICAgJ3NhdmVKb3lzdGlja3Mgc2F2ZU92ZXJsYXkgc2F2ZVByb2ZpbGVOYW1lc3BhY2Ugc2F2ZVN0YXR1cyBzYXZlVmFyIHNhdmluZ0VuYWJsZWQgc2F5IHNheTJEIHNheTNEICcgK1xuICAgICAgICAnc2NvcGVOYW1lIHNjb3JlIHNjb3JlU2lkZSBzY3JlZW5zaG90IHNjcmVlblRvV29ybGQgc2NyaXB0RG9uZSBzY3JpcHROYW1lIHNjdWRTdGF0ZSAnICtcbiAgICAgICAgJ3NlY29uZGFyeVdlYXBvbiBzZWNvbmRhcnlXZWFwb25JdGVtcyBzZWNvbmRhcnlXZWFwb25NYWdhemluZSBzZWxlY3Qgc2VsZWN0QmVzdFBsYWNlcyAnICtcbiAgICAgICAgJ3NlbGVjdERpYXJ5U3ViamVjdCBzZWxlY3RlZEVkaXRvck9iamVjdHMgc2VsZWN0RWRpdG9yT2JqZWN0IHNlbGVjdGlvbk5hbWVzIHNlbGVjdGlvblBvc2l0aW9uICcgK1xuICAgICAgICAnc2VsZWN0TGVhZGVyIHNlbGVjdE1heCBzZWxlY3RNaW4gc2VsZWN0Tm9QbGF5ZXIgc2VsZWN0UGxheWVyIHNlbGVjdFJhbmRvbSBzZWxlY3RSYW5kb21XZWlnaHRlZCAnICtcbiAgICAgICAgJ3NlbGVjdFdlYXBvbiBzZWxlY3RXZWFwb25UdXJyZXQgc2VuZEFVTWVzc2FnZSBzZW5kU2ltcGxlQ29tbWFuZCBzZW5kVGFzayBzZW5kVGFza1Jlc3VsdCAnICtcbiAgICAgICAgJ3NlbmRVRFBNZXNzYWdlIHNlcnZlckNvbW1hbmQgc2VydmVyQ29tbWFuZEF2YWlsYWJsZSBzZXJ2ZXJDb21tYW5kRXhlY3V0YWJsZSBzZXJ2ZXJOYW1lIHNlcnZlclRpbWUgJyArXG4gICAgICAgICdzZXQgc2V0M0RFTkF0dHJpYnV0ZSBzZXQzREVOQXR0cmlidXRlcyBzZXQzREVOR3JpZCBzZXQzREVOSWNvbnNWaXNpYmxlIHNldDNERU5MYXllciAnICtcbiAgICAgICAgJ3NldDNERU5MaW5lc1Zpc2libGUgc2V0M0RFTkxvZ2ljVHlwZSBzZXQzREVOTWlzc2lvbkF0dHJpYnV0ZSBzZXQzREVOTWlzc2lvbkF0dHJpYnV0ZXMgJyArXG4gICAgICAgICdzZXQzREVOTW9kZWxzVmlzaWJsZSBzZXQzREVOT2JqZWN0VHlwZSBzZXQzREVOU2VsZWN0ZWQgc2V0QWNjVGltZSBzZXRBY3R1YWxDb2xsZWN0aXZlUlREICcgK1xuICAgICAgICAnc2V0QWlycGxhbmVUaHJvdHRsZSBzZXRBaXJwb3J0U2lkZSBzZXRBbW1vIHNldEFtbW9DYXJnbyBzZXRBbW1vT25QeWxvbiBzZXRBbmltU3BlZWRDb2VmICcgK1xuICAgICAgICAnc2V0QXBlcnR1cmUgc2V0QXBlcnR1cmVOZXcgc2V0QXJtb3J5UG9pbnRzIHNldEF0dHJpYnV0ZXMgc2V0QXV0b25vbW91cyBzZXRCZWhhdmlvdXIgJyArXG4gICAgICAgICdzZXRCbGVlZGluZ1JlbWFpbmluZyBzZXRCcmFrZXNSVEQgc2V0Q2FtZXJhSW50ZXJlc3Qgc2V0Q2FtU2hha2VEZWZQYXJhbXMgc2V0Q2FtU2hha2VQYXJhbXMgJyArXG4gICAgICAgICdzZXRDYW1Vc2VUSSBzZXRDYXB0aXZlIHNldENlbnRlck9mTWFzcyBzZXRDb2xsaXNpb25MaWdodCBzZXRDb21iYXRNb2RlIHNldENvbXBhc3NPc2NpbGxhdGlvbiAnICtcbiAgICAgICAgJ3NldENvbnZveVNlcGFyYXRpb24gc2V0Q3VyYXRvckNhbWVyYUFyZWFDZWlsaW5nIHNldEN1cmF0b3JDb2VmIHNldEN1cmF0b3JFZGl0aW5nQXJlYVR5cGUgJyArXG4gICAgICAgICdzZXRDdXJhdG9yV2F5cG9pbnRDb3N0IHNldEN1cnJlbnRDaGFubmVsIHNldEN1cnJlbnRUYXNrIHNldEN1cnJlbnRXYXlwb2ludCBzZXRDdXN0b21BaW1Db2VmICcgK1xuICAgICAgICAnc2V0Q3VzdG9tV2VpZ2h0UlREIHNldERhbWFnZSBzZXREYW1tYWdlIHNldERhdGUgc2V0RGVicmllZmluZ1RleHQgc2V0RGVmYXVsdENhbWVyYSBzZXREZXN0aW5hdGlvbiAnICtcbiAgICAgICAgJ3NldERldGFpbE1hcEJsZW5kUGFycyBzZXREaXIgc2V0RGlyZWN0aW9uIHNldERyYXdJY29uIHNldERyaXZlT25QYXRoIHNldERyb3BJbnRlcnZhbCAnICtcbiAgICAgICAgJ3NldER5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2Ugc2V0RHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZUNvZWYgc2V0RWRpdG9yTW9kZSBzZXRFZGl0b3JPYmplY3RTY29wZSAnICtcbiAgICAgICAgJ3NldEVmZmVjdENvbmRpdGlvbiBzZXRFbmdpbmVSUE1SVEQgc2V0RmFjZSBzZXRGYWNlQW5pbWF0aW9uIHNldEZhdGlndWUgc2V0RmVhdHVyZVR5cGUgJyArXG4gICAgICAgICdzZXRGbGFnQW5pbWF0aW9uUGhhc2Ugc2V0RmxhZ093bmVyIHNldEZsYWdTaWRlIHNldEZsYWdUZXh0dXJlIHNldEZvZyBzZXRGb3JtYXRpb24gJyArXG4gICAgICAgICdzZXRGb3JtYXRpb25UYXNrIHNldEZvcm1EaXIgc2V0RnJpZW5kIHNldEZyb21FZGl0b3Igc2V0RlNNVmFyaWFibGUgc2V0RnVlbCBzZXRGdWVsQ2FyZ28gJyArXG4gICAgICAgICdzZXRHcm91cEljb24gc2V0R3JvdXBJY29uUGFyYW1zIHNldEdyb3VwSWNvbnNTZWxlY3RhYmxlIHNldEdyb3VwSWNvbnNWaXNpYmxlIHNldEdyb3VwSWQgJyArXG4gICAgICAgICdzZXRHcm91cElkR2xvYmFsIHNldEdyb3VwT3duZXIgc2V0R3VzdHMgc2V0SGlkZUJlaGluZCBzZXRIaXQgc2V0SGl0SW5kZXggc2V0SGl0UG9pbnREYW1hZ2UgJyArXG4gICAgICAgICdzZXRIb3Jpem9uUGFyYWxsYXhDb2VmIHNldEhVRE1vdmVtZW50TGV2ZWxzIHNldElkZW50aXR5IHNldEltcG9ydGFuY2Ugc2V0SW5mb1BhbmVsIHNldExlYWRlciAnICtcbiAgICAgICAgJ3NldExpZ2h0QW1iaWVudCBzZXRMaWdodEF0dGVudWF0aW9uIHNldExpZ2h0QnJpZ2h0bmVzcyBzZXRMaWdodENvbG9yIHNldExpZ2h0RGF5TGlnaHQgJyArXG4gICAgICAgICdzZXRMaWdodEZsYXJlTWF4RGlzdGFuY2Ugc2V0TGlnaHRGbGFyZVNpemUgc2V0TGlnaHRJbnRlbnNpdHkgc2V0TGlnaHRuaW5ncyBzZXRMaWdodFVzZUZsYXJlICcgK1xuICAgICAgICAnc2V0TG9jYWxXaW5kUGFyYW1zIHNldE1hZ2F6aW5lVHVycmV0QW1tbyBzZXRNYXJrZXJBbHBoYSBzZXRNYXJrZXJBbHBoYUxvY2FsIHNldE1hcmtlckJydXNoICcgK1xuICAgICAgICAnc2V0TWFya2VyQnJ1c2hMb2NhbCBzZXRNYXJrZXJDb2xvciBzZXRNYXJrZXJDb2xvckxvY2FsIHNldE1hcmtlckRpciBzZXRNYXJrZXJEaXJMb2NhbCAnICtcbiAgICAgICAgJ3NldE1hcmtlclBvcyBzZXRNYXJrZXJQb3NMb2NhbCBzZXRNYXJrZXJTaGFwZSBzZXRNYXJrZXJTaGFwZUxvY2FsIHNldE1hcmtlclNpemUgJyArXG4gICAgICAgICdzZXRNYXJrZXJTaXplTG9jYWwgc2V0TWFya2VyVGV4dCBzZXRNYXJrZXJUZXh0TG9jYWwgc2V0TWFya2VyVHlwZSBzZXRNYXJrZXJUeXBlTG9jYWwgc2V0TWFzcyAnICtcbiAgICAgICAgJ3NldE1pbWljIHNldE1vdXNlUG9zaXRpb24gc2V0TXVzaWNFZmZlY3Qgc2V0TXVzaWNFdmVudEhhbmRsZXIgc2V0TmFtZSBzZXROYW1lU291bmQgJyArXG4gICAgICAgICdzZXRPYmplY3RBcmd1bWVudHMgc2V0T2JqZWN0TWF0ZXJpYWwgc2V0T2JqZWN0TWF0ZXJpYWxHbG9iYWwgc2V0T2JqZWN0UHJveHkgc2V0T2JqZWN0VGV4dHVyZSAnICtcbiAgICAgICAgJ3NldE9iamVjdFRleHR1cmVHbG9iYWwgc2V0T2JqZWN0Vmlld0Rpc3RhbmNlIHNldE92ZXJjYXN0IHNldE93bmVyIHNldE94eWdlblJlbWFpbmluZyAnICtcbiAgICAgICAgJ3NldFBhcnRpY2xlQ2lyY2xlIHNldFBhcnRpY2xlQ2xhc3Mgc2V0UGFydGljbGVGaXJlIHNldFBhcnRpY2xlUGFyYW1zIHNldFBhcnRpY2xlUmFuZG9tICcgK1xuICAgICAgICAnc2V0UGlsb3RDYW1lcmFEaXJlY3Rpb24gc2V0UGlsb3RDYW1lcmFSb3RhdGlvbiBzZXRQaWxvdENhbWVyYVRhcmdldCBzZXRQaWxvdExpZ2h0IHNldFBpUEVmZmVjdCAnICtcbiAgICAgICAgJ3NldFBpdGNoIHNldFBsYXRlTnVtYmVyIHNldFBsYXlhYmxlIHNldFBsYXllclJlc3Bhd25UaW1lIHNldFBvcyBzZXRQb3NBU0wgc2V0UG9zQVNMMiBzZXRQb3NBU0xXICcgK1xuICAgICAgICAnc2V0UG9zQVRMIHNldFBvc2l0aW9uIHNldFBvc1dvcmxkIHNldFB5bG9uTG9hZE91dCBzZXRQeWxvbnNQcmlvcml0eSBzZXRSYWRpb01zZyBzZXRSYWluICcgK1xuICAgICAgICAnc2V0UmFpbmJvdyBzZXRSYW5kb21MaXAgc2V0UmFuayBzZXRSZWN0YW5ndWxhciBzZXRSZXBhaXJDYXJnbyBzZXRSb3RvckJyYWtlUlREIHNldFNoYWRvd0Rpc3RhbmNlICcgK1xuICAgICAgICAnc2V0U2hvdFBhcmVudHMgc2V0U2lkZSBzZXRTaW1wbGVUYXNrQWx3YXlzVmlzaWJsZSBzZXRTaW1wbGVUYXNrQ3VzdG9tRGF0YSAnICtcbiAgICAgICAgJ3NldFNpbXBsZVRhc2tEZXNjcmlwdGlvbiBzZXRTaW1wbGVUYXNrRGVzdGluYXRpb24gc2V0U2ltcGxlVGFza1RhcmdldCBzZXRTaW1wbGVUYXNrVHlwZSAnICtcbiAgICAgICAgJ3NldFNpbXVsV2VhdGhlckxheWVycyBzZXRTaXplIHNldFNraWxsIHNldFNsaW5nTG9hZCBzZXRTb3VuZEVmZmVjdCBzZXRTcGVha2VyIHNldFNwZWVjaCAnICtcbiAgICAgICAgJ3NldFNwZWVkTW9kZSBzZXRTdGFtaW5hIHNldFN0YW1pbmFTY2hlbWUgc2V0U3RhdFZhbHVlIHNldFN1cHByZXNzaW9uIHNldFN5c3RlbU9mVW5pdHMgJyArXG4gICAgICAgICdzZXRUYXJnZXRBZ2Ugc2V0VGFza01hcmtlck9mZnNldCBzZXRUYXNrUmVzdWx0IHNldFRhc2tTdGF0ZSBzZXRUZXJyYWluR3JpZCBzZXRUZXh0ICcgK1xuICAgICAgICAnc2V0VGltZU11bHRpcGxpZXIgc2V0VGl0bGVFZmZlY3Qgc2V0VHJhZmZpY0RlbnNpdHkgc2V0VHJhZmZpY0Rpc3RhbmNlIHNldFRyYWZmaWNHYXAgJyArXG4gICAgICAgICdzZXRUcmFmZmljU3BlZWQgc2V0VHJpZ2dlckFjdGl2YXRpb24gc2V0VHJpZ2dlckFyZWEgc2V0VHJpZ2dlclN0YXRlbWVudHMgc2V0VHJpZ2dlclRleHQgJyArXG4gICAgICAgICdzZXRUcmlnZ2VyVGltZW91dCBzZXRUcmlnZ2VyVHlwZSBzZXRUeXBlIHNldFVuY29uc2Npb3VzIHNldFVuaXRBYmlsaXR5IHNldFVuaXRMb2Fkb3V0IHNldFVuaXRQb3MgJyArXG4gICAgICAgICdzZXRVbml0UG9zV2VhayBzZXRVbml0UmFuayBzZXRVbml0UmVjb2lsQ29lZmZpY2llbnQgc2V0VW5pdFRyYWl0IHNldFVubG9hZEluQ29tYmF0ICcgK1xuICAgICAgICAnc2V0VXNlckFjdGlvblRleHQgc2V0VXNlck1GRFRleHQgc2V0VXNlck1GRHZhbHVlIHNldFZhcmlhYmxlIHNldFZlY3RvckRpciBzZXRWZWN0b3JEaXJBbmRVcCAnICtcbiAgICAgICAgJ3NldFZlY3RvclVwIHNldFZlaGljbGVBbW1vIHNldFZlaGljbGVBbW1vRGVmIHNldFZlaGljbGVBcm1vciBzZXRWZWhpY2xlQ2FyZ28gc2V0VmVoaWNsZUlkICcgK1xuICAgICAgICAnc2V0VmVoaWNsZUxvY2sgc2V0VmVoaWNsZVBvc2l0aW9uIHNldFZlaGljbGVSYWRhciBzZXRWZWhpY2xlUmVjZWl2ZVJlbW90ZVRhcmdldHMgJyArXG4gICAgICAgICdzZXRWZWhpY2xlUmVwb3J0T3duUG9zaXRpb24gc2V0VmVoaWNsZVJlcG9ydFJlbW90ZVRhcmdldHMgc2V0VmVoaWNsZVRJUGFycyBzZXRWZWhpY2xlVmFyTmFtZSAnICtcbiAgICAgICAgJ3NldFZlbG9jaXR5IHNldFZlbG9jaXR5TW9kZWxTcGFjZSBzZXRWZWxvY2l0eVRyYW5zZm9ybWF0aW9uIHNldFZpZXdEaXN0YW5jZSAnICtcbiAgICAgICAgJ3NldFZpc2libGVJZlRyZWVDb2xsYXBzZWQgc2V0V2FudGVkUlBNUlREIHNldFdhdmVzIHNldFdheXBvaW50QmVoYXZpb3VyIHNldFdheXBvaW50Q29tYmF0TW9kZSAnICtcbiAgICAgICAgJ3NldFdheXBvaW50Q29tcGxldGlvblJhZGl1cyBzZXRXYXlwb2ludERlc2NyaXB0aW9uIHNldFdheXBvaW50Rm9yY2VCZWhhdmlvdXIgc2V0V2F5cG9pbnRGb3JtYXRpb24gJyArXG4gICAgICAgICdzZXRXYXlwb2ludEhvdXNlUG9zaXRpb24gc2V0V2F5cG9pbnRMb2l0ZXJSYWRpdXMgc2V0V2F5cG9pbnRMb2l0ZXJUeXBlIHNldFdheXBvaW50TmFtZSAnICtcbiAgICAgICAgJ3NldFdheXBvaW50UG9zaXRpb24gc2V0V2F5cG9pbnRTY3JpcHQgc2V0V2F5cG9pbnRTcGVlZCBzZXRXYXlwb2ludFN0YXRlbWVudHMgc2V0V2F5cG9pbnRUaW1lb3V0ICcgK1xuICAgICAgICAnc2V0V2F5cG9pbnRUeXBlIHNldFdheXBvaW50VmlzaWJsZSBzZXRXZWFwb25SZWxvYWRpbmdUaW1lIHNldFdpbmQgc2V0V2luZERpciBzZXRXaW5kRm9yY2UgJyArXG4gICAgICAgICdzZXRXaW5kU3RyIHNldFdpbmdGb3JjZVNjYWxlUlREIHNldFdQUG9zIHNob3czREljb25zIHNob3dDaGF0IHNob3dDaW5lbWFCb3JkZXIgc2hvd0NvbW1hbmRpbmdNZW51ICcgK1xuICAgICAgICAnc2hvd0NvbXBhc3Mgc2hvd0N1cmF0b3JDb21wYXNzIHNob3dHUFMgc2hvd0hVRCBzaG93TGVnZW5kIHNob3dNYXAgc2hvd25BcnRpbGxlcnlDb21wdXRlciAnICtcbiAgICAgICAgJ3Nob3duQ2hhdCBzaG93bkNvbXBhc3Mgc2hvd25DdXJhdG9yQ29tcGFzcyBzaG93TmV3RWRpdG9yT2JqZWN0IHNob3duR1BTIHNob3duSFVEIHNob3duTWFwICcgK1xuICAgICAgICAnc2hvd25QYWQgc2hvd25SYWRpbyBzaG93blNjb3JldGFibGUgc2hvd25VQVZGZWVkIHNob3duV2FycmFudCBzaG93bldhdGNoIHNob3dQYWQgc2hvd1JhZGlvICcgK1xuICAgICAgICAnc2hvd1Njb3JldGFibGUgc2hvd1N1YnRpdGxlcyBzaG93VUFWRmVlZCBzaG93V2FycmFudCBzaG93V2F0Y2ggc2hvd1dheXBvaW50IHNob3dXYXlwb2ludHMgc2lkZSAnICtcbiAgICAgICAgJ3NpZGVDaGF0IHNpZGVFbmVteSBzaWRlRnJpZW5kbHkgc2lkZVJhZGlvIHNpbXBsZVRhc2tzIHNpbXVsYXRpb25FbmFibGVkIHNpbXVsQ2xvdWREZW5zaXR5ICcgK1xuICAgICAgICAnc2ltdWxDbG91ZE9jY2x1c2lvbiBzaW11bEluQ2xvdWRzIHNpbXVsV2VhdGhlclN5bmMgc2luIHNpemUgc2l6ZU9mIHNraWxsIHNraWxsRmluYWwgc2tpcFRpbWUgJyArXG4gICAgICAgICdzbGVlcCBzbGlkZXJQb3NpdGlvbiBzbGlkZXJSYW5nZSBzbGlkZXJTZXRQb3NpdGlvbiBzbGlkZXJTZXRSYW5nZSBzbGlkZXJTZXRTcGVlZCBzbGlkZXJTcGVlZCAnICtcbiAgICAgICAgJ3NsaW5nTG9hZEFzc2lzdGFudFNob3duIHNvbGRpZXJNYWdhemluZXMgc29tZUFtbW8gc29ydCBzb3VuZFZvbHVtZSBzcGF3biBzcGVha2VyIHNwZWVkIHNwZWVkTW9kZSAnICtcbiAgICAgICAgJ3NwbGl0U3RyaW5nIHNxcnQgc3F1YWRQYXJhbXMgc3RhbmNlIHN0YXJ0TG9hZGluZ1NjcmVlbiBzdGVwIHN0b3Agc3RvcEVuZ2luZVJURCBzdG9wcGVkIHN0ciAnICtcbiAgICAgICAgJ3N1bk9yTW9vbiBzdXBwb3J0SW5mbyBzdXBwcmVzc0ZvciBzdXJmYWNlSXNXYXRlciBzdXJmYWNlTm9ybWFsIHN1cmZhY2VUeXBlIHN3aW1JbkRlcHRoICcgK1xuICAgICAgICAnc3dpdGNoYWJsZVVuaXRzIHN3aXRjaEFjdGlvbiBzd2l0Y2hDYW1lcmEgc3dpdGNoR2VzdHVyZSBzd2l0Y2hMaWdodCBzd2l0Y2hNb3ZlICcgK1xuICAgICAgICAnc3luY2hyb25pemVkT2JqZWN0cyBzeW5jaHJvbml6ZWRUcmlnZ2VycyBzeW5jaHJvbml6ZWRXYXlwb2ludHMgc3luY2hyb25pemVPYmplY3RzQWRkICcgK1xuICAgICAgICAnc3luY2hyb25pemVPYmplY3RzUmVtb3ZlIHN5bmNocm9uaXplVHJpZ2dlciBzeW5jaHJvbml6ZVdheXBvaW50IHN5c3RlbUNoYXQgc3lzdGVtT2ZVbml0cyB0YW4gJyArXG4gICAgICAgICd0YXJnZXRLbm93bGVkZ2UgdGFyZ2V0cyB0YXJnZXRzQWdncmVnYXRlIHRhcmdldHNRdWVyeSB0YXNrQWx3YXlzVmlzaWJsZSB0YXNrQ2hpbGRyZW4gJyArXG4gICAgICAgICd0YXNrQ29tcGxldGVkIHRhc2tDdXN0b21EYXRhIHRhc2tEZXNjcmlwdGlvbiB0YXNrRGVzdGluYXRpb24gdGFza0hpbnQgdGFza01hcmtlck9mZnNldCB0YXNrUGFyZW50ICcgK1xuICAgICAgICAndGFza1Jlc3VsdCB0YXNrU3RhdGUgdGFza1R5cGUgdGVhbU1lbWJlciB0ZWFtTmFtZSB0ZWFtcyB0ZWFtU3dpdGNoIHRlYW1Td2l0Y2hFbmFibGVkIHRlYW1UeXBlICcgK1xuICAgICAgICAndGVybWluYXRlIHRlcnJhaW5JbnRlcnNlY3QgdGVycmFpbkludGVyc2VjdEFTTCB0ZXJyYWluSW50ZXJzZWN0QXRBU0wgdGV4dCB0ZXh0TG9nIHRleHRMb2dGb3JtYXQgJyArXG4gICAgICAgICd0ZyB0aW1lIHRpbWVNdWx0aXBsaWVyIHRpdGxlQ3V0IHRpdGxlRmFkZU91dCB0aXRsZU9iaiB0aXRsZVJzYyB0aXRsZVRleHQgdG9BcnJheSB0b0ZpeGVkIHRvTG93ZXIgJyArXG4gICAgICAgICd0b1N0cmluZyB0b1VwcGVyIHRyaWdnZXJBY3RpdmF0ZWQgdHJpZ2dlckFjdGl2YXRpb24gdHJpZ2dlckFyZWEgdHJpZ2dlckF0dGFjaGVkVmVoaWNsZSAnICtcbiAgICAgICAgJ3RyaWdnZXJBdHRhY2hPYmplY3QgdHJpZ2dlckF0dGFjaFZlaGljbGUgdHJpZ2dlckR5bmFtaWNTaW11bGF0aW9uIHRyaWdnZXJTdGF0ZW1lbnRzIHRyaWdnZXJUZXh0ICcgK1xuICAgICAgICAndHJpZ2dlclRpbWVvdXQgdHJpZ2dlclRpbWVvdXRDdXJyZW50IHRyaWdnZXJUeXBlIHR1cnJldExvY2FsIHR1cnJldE93bmVyIHR1cnJldFVuaXQgdHZBZGQgdHZDbGVhciAnICtcbiAgICAgICAgJ3R2Q29sbGFwc2UgdHZDb2xsYXBzZUFsbCB0dkNvdW50IHR2Q3VyU2VsIHR2RGF0YSB0dkRlbGV0ZSB0dkV4cGFuZCB0dkV4cGFuZEFsbCB0dlBpY3R1cmUgJyArXG4gICAgICAgICd0dlNldENvbG9yIHR2U2V0Q3VyU2VsIHR2U2V0RGF0YSB0dlNldFBpY3R1cmUgdHZTZXRQaWN0dXJlQ29sb3IgdHZTZXRQaWN0dXJlQ29sb3JEaXNhYmxlZCAnICtcbiAgICAgICAgJ3R2U2V0UGljdHVyZUNvbG9yU2VsZWN0ZWQgdHZTZXRQaWN0dXJlUmlnaHQgdHZTZXRQaWN0dXJlUmlnaHRDb2xvciB0dlNldFBpY3R1cmVSaWdodENvbG9yRGlzYWJsZWQgJyArXG4gICAgICAgICd0dlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWQgdHZTZXRUZXh0IHR2U2V0VG9vbHRpcCB0dlNldFZhbHVlIHR2U29ydCB0dlNvcnRCeVZhbHVlIHR2VGV4dCAnICtcbiAgICAgICAgJ3R2VG9vbHRpcCB0dlZhbHVlIHR5cGUgdHlwZU5hbWUgdHlwZU9mIFVBVkNvbnRyb2wgdWlOYW1lc3BhY2UgdWlTbGVlcCB1bmFzc2lnbkN1cmF0b3IgJyArXG4gICAgICAgICd1bmFzc2lnbkl0ZW0gdW5hc3NpZ25UZWFtIHVuYXNzaWduVmVoaWNsZSB1bmRlcndhdGVyIHVuaWZvcm0gdW5pZm9ybUNvbnRhaW5lciB1bmlmb3JtSXRlbXMgJyArXG4gICAgICAgICd1bmlmb3JtTWFnYXppbmVzIHVuaXRBZGRvbnMgdW5pdEFpbVBvc2l0aW9uIHVuaXRBaW1Qb3NpdGlvblZpc3VhbCB1bml0QmFja3BhY2sgdW5pdElzVUFWIHVuaXRQb3MgJyArXG4gICAgICAgICd1bml0UmVhZHkgdW5pdFJlY29pbENvZWZmaWNpZW50IHVuaXRzIHVuaXRzQmVsb3dIZWlnaHQgdW5saW5rSXRlbSB1bmxvY2tBY2hpZXZlbWVudCAnICtcbiAgICAgICAgJ3VucmVnaXN0ZXJUYXNrIHVwZGF0ZURyYXdJY29uIHVwZGF0ZU1lbnVJdGVtIHVwZGF0ZU9iamVjdFRyZWUgdXNlQUlTdGVlcmluZ0NvbXBvbmVudCAnICtcbiAgICAgICAgJ3VzZUF1ZGlvVGltZUZvck1vdmVzIHVzZXJJbnB1dERpc2FibGVkIHZlY3RvckFkZCB2ZWN0b3JDb3MgdmVjdG9yQ3Jvc3NQcm9kdWN0IHZlY3RvckRpZmYgJyArXG4gICAgICAgICd2ZWN0b3JEaXIgdmVjdG9yRGlyVmlzdWFsIHZlY3RvckRpc3RhbmNlIHZlY3RvckRpc3RhbmNlU3FyIHZlY3RvckRvdFByb2R1Y3QgdmVjdG9yRnJvbVRvICcgK1xuICAgICAgICAndmVjdG9yTWFnbml0dWRlIHZlY3Rvck1hZ25pdHVkZVNxciB2ZWN0b3JNb2RlbFRvV29ybGQgdmVjdG9yTW9kZWxUb1dvcmxkVmlzdWFsIHZlY3Rvck11bHRpcGx5ICcgK1xuICAgICAgICAndmVjdG9yTm9ybWFsaXplZCB2ZWN0b3JVcCB2ZWN0b3JVcFZpc3VhbCB2ZWN0b3JXb3JsZFRvTW9kZWwgdmVjdG9yV29ybGRUb01vZGVsVmlzdWFsIHZlaGljbGUgJyArXG4gICAgICAgICd2ZWhpY2xlQ2FyZ29FbmFibGVkIHZlaGljbGVDaGF0IHZlaGljbGVSYWRpbyB2ZWhpY2xlUmVjZWl2ZVJlbW90ZVRhcmdldHMgdmVoaWNsZVJlcG9ydE93blBvc2l0aW9uICcgK1xuICAgICAgICAndmVoaWNsZVJlcG9ydFJlbW90ZVRhcmdldHMgdmVoaWNsZXMgdmVoaWNsZVZhck5hbWUgdmVsb2NpdHkgdmVsb2NpdHlNb2RlbFNwYWNlIHZlcmlmeVNpZ25hdHVyZSAnICtcbiAgICAgICAgJ3Zlc3QgdmVzdENvbnRhaW5lciB2ZXN0SXRlbXMgdmVzdE1hZ2F6aW5lcyB2aWV3RGlzdGFuY2UgdmlzaWJsZUNvbXBhc3MgdmlzaWJsZUdQUyB2aXNpYmxlTWFwICcgK1xuICAgICAgICAndmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFTTCB2aXNpYmxlU2NvcmV0YWJsZSB2aXNpYmxlV2F0Y2ggd2F2ZXMgd2F5cG9pbnRBdHRhY2hlZE9iamVjdCAnICtcbiAgICAgICAgJ3dheXBvaW50QXR0YWNoZWRWZWhpY2xlIHdheXBvaW50QXR0YWNoT2JqZWN0IHdheXBvaW50QXR0YWNoVmVoaWNsZSB3YXlwb2ludEJlaGF2aW91ciAnICtcbiAgICAgICAgJ3dheXBvaW50Q29tYmF0TW9kZSB3YXlwb2ludENvbXBsZXRpb25SYWRpdXMgd2F5cG9pbnREZXNjcmlwdGlvbiB3YXlwb2ludEZvcmNlQmVoYXZpb3VyICcgK1xuICAgICAgICAnd2F5cG9pbnRGb3JtYXRpb24gd2F5cG9pbnRIb3VzZVBvc2l0aW9uIHdheXBvaW50TG9pdGVyUmFkaXVzIHdheXBvaW50TG9pdGVyVHlwZSB3YXlwb2ludE5hbWUgJyArXG4gICAgICAgICd3YXlwb2ludFBvc2l0aW9uIHdheXBvaW50cyB3YXlwb2ludFNjcmlwdCB3YXlwb2ludHNFbmFibGVkVUFWIHdheXBvaW50U2hvdyB3YXlwb2ludFNwZWVkICcgK1xuICAgICAgICAnd2F5cG9pbnRTdGF0ZW1lbnRzIHdheXBvaW50VGltZW91dCB3YXlwb2ludFRpbWVvdXRDdXJyZW50IHdheXBvaW50VHlwZSB3YXlwb2ludFZpc2libGUgJyArXG4gICAgICAgICd3ZWFwb25BY2Nlc3NvcmllcyB3ZWFwb25BY2Nlc3Nvcmllc0NhcmdvIHdlYXBvbkNhcmdvIHdlYXBvbkRpcmVjdGlvbiB3ZWFwb25JbmVydGlhIHdlYXBvbkxvd2VyZWQgJyArXG4gICAgICAgICd3ZWFwb25zIHdlYXBvbnNJdGVtcyB3ZWFwb25zSXRlbXNDYXJnbyB3ZWFwb25TdGF0ZSB3ZWFwb25zVHVycmV0IHdlaWdodFJURCBXRlNpZGVUZXh0IHdpbmQgJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdibHVmb3IgY2l2aWxpYW4gY29uZmlnTnVsbCBjb250cm9sTnVsbCBkaXNwbGF5TnVsbCBlYXN0IGVuZGwgZmFsc2UgZ3JwTnVsbCBpbmRlcGVuZGVudCBsaW5lQnJlYWsgJyArXG4gICAgICAgICdsb2NhdGlvbk51bGwgbmlsIG9iak51bGwgb3Bmb3IgcGkgcmVzaXN0YW5jZSBzY3JpcHROdWxsIHNpZGVBbWJpZW50TGlmZSBzaWRlRW1wdHkgc2lkZUxvZ2ljICcgK1xuICAgICAgICAnc2lkZVVua25vd24gdGFza051bGwgdGVhbU1lbWJlck51bGwgdHJ1ZSB3ZXN0J1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBGVU5DVElPTixcbiAgICAgIFNUUklOR1MsXG4gICAgICBQUkVQUk9DRVNTT1JcbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jfF5cXCQgL1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNxZjtcbiIsCiAgICAiLypcbiBMYW5ndWFnZTogU1FMIE1vcmUgKG1peCBvZiBNeVNRTCwgT3JhY2xlLCBldGMpXG4gQ29udHJpYnV0b3JzOiBOaWtvbGF5IExpc2llbmtvIDxpbmZvQG5lb3IucnU+LCBIZWlrbyBBdWd1c3QgPHBvc3RAYXVnZTg0NzIuZGU+LCBUcmF2aXMgT2RvbSA8dHJhdmlzLmEub2RvbUBnbWFpbC5jb20+LCBWYWRpbXRybyA8dmFkaW10cm9AeWFob28uY29tPiwgQmVuamFtaW4gQXVkZXIgPGJlbmphbWluLmF1ZGVyQGdtYWlsLmNvbT5cbiBXZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUUxcbiBDYXRlZ29yeTogZGF0YWJhc2VcbiAqL1xuXG4vKlxuXG5UaGlzIGlzIGEgcHJlc2VydmF0aW9uIG9mIHRoZSBvbGQgYmxvYXRlZCBTUUwgZ3JhbW1hciB3aGljaCBpbmNsdWRlcyBwcmV0dHkgbXVjaFxudGhlIGtpdGNoZW4gc2luayBiZWNhdXNlIG5vIG9uZSB3YXMga2VlcGluZyB0cmFjayBvZiB3aGljaCBrZXl3b3JkcyBiZWxvbmcgdG9cbndoaWNoIGRhdGFiYXNlcy4gIFRoaXMgaXMgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cblxuLSBPcmFjbGUgU1FMIHNob3VsZCBiZSBmYWN0b3JlZCBpbnRvIGl0J3Mgb3duIDNyZCBwYXJ0eSBncmFtbWFyLlxuLSBNeVNRTCBzaG91bGQgYmUgZmFjdG9yZWQgb3V0IGludG8gaXQncyBvd24gM3JkIHBhcnR5IGdyYW1tYXIuXG5cbiovXG5cbmZ1bmN0aW9uIHNxbF9tb3JlKGhsanMpIHtcbiAgdmFyIENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTUUwgKG1vcmUpJyxcbiAgICBhbGlhc2VzOiBbXCJteXNxbFwiLCBcIm9yYWNsZVwiXSxcbiAgICBkaXNhYmxlQXV0b2RldGVjdDogdHJ1ZSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6IC9bPD57fSpdLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOlxuICAgICAgICAgICdiZWdpbiBlbmQgc3RhcnQgY29tbWl0IHJvbGxiYWNrIHNhdmVwb2ludCBsb2NrIGFsdGVyIGNyZWF0ZSBkcm9wIHJlbmFtZSBjYWxsICcgK1xuICAgICAgICAgICdkZWxldGUgZG8gaGFuZGxlciBpbnNlcnQgbG9hZCByZXBsYWNlIHNlbGVjdCB0cnVuY2F0ZSB1cGRhdGUgc2V0IHNob3cgcHJhZ21hIGdyYW50ICcgK1xuICAgICAgICAgICdtZXJnZSBkZXNjcmliZSB1c2UgZXhwbGFpbiBoZWxwIGRlY2xhcmUgcHJlcGFyZSBleGVjdXRlIGRlYWxsb2NhdGUgcmVsZWFzZSAnICtcbiAgICAgICAgICAndW5sb2NrIHB1cmdlIHJlc2V0IGNoYW5nZSBzdG9wIGFuYWx5emUgY2FjaGUgZmx1c2ggb3B0aW1pemUgcmVwYWlyIGtpbGwgJyArXG4gICAgICAgICAgJ2luc3RhbGwgdW5pbnN0YWxsIGNoZWNrc3VtIHJlc3RvcmUgY2hlY2sgYmFja3VwIHJldm9rZSBjb21tZW50IHZhbHVlcyB3aXRoJyxcbiAgICAgICAgZW5kOiAvOy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICRwYXR0ZXJuOiAvW1xcd1xcLl0rLyxcbiAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2FzIGFib3J0IGFicyBhYnNvbHV0ZSBhY2MgYWNjZSBhY2NlcCBhY2NlcHQgYWNjZXNzIGFjY2Vzc2VkIGFjY2Vzc2libGUgYWNjb3VudCBhY29zIGFjdGlvbiBhY3RpdmF0ZSBhZGQgJyArXG4gICAgICAgICAgICAnYWRkdGltZSBhZG1pbiBhZG1pbmlzdGVyIGFkdmFuY2VkIGFkdmlzZSBhZXNfZGVjcnlwdCBhZXNfZW5jcnlwdCBhZnRlciBhZ2VudCBhZ2dyZWdhdGUgYWxpIGFsaWEgYWxpYXMgJyArXG4gICAgICAgICAgICAnYWxsIGFsbG9jYXRlIGFsbG93IGFsdGVyIGFsd2F5cyBhbmFseXplIGFuY2lsbGFyeSBhbmQgYW50aSBhbnkgYW55ZGF0YSBhbnlkYXRhc2V0IGFueXNjaGVtYSBhbnl0eXBlIGFwcGx5ICcgK1xuICAgICAgICAgICAgJ2FyY2hpdmUgYXJjaGl2ZWQgYXJjaGl2ZWxvZyBhcmUgYXMgYXNjIGFzY2lpIGFzaW4gYXNzZW1ibHkgYXNzZXJ0aW9uIGFzc29jaWF0ZSBhc3luY2hyb25vdXMgYXQgYXRhbiAnICtcbiAgICAgICAgICAgICdhdG4yIGF0dHIgYXR0cmkgYXR0cmliIGF0dHJpYnUgYXR0cmlidXQgYXR0cmlidXRlIGF0dHJpYnV0ZXMgYXVkaXQgYXV0aGVudGljYXRlZCBhdXRoZW50aWNhdGlvbiBhdXRoaWQgJyArXG4gICAgICAgICAgICAnYXV0aG9ycyBhdXRvIGF1dG9hbGxvY2F0ZSBhdXRvZGJsaW5rIGF1dG9leHRlbmQgYXV0b21hdGljIGF2YWlsYWJpbGl0eSBhdmcgYmFja3VwIGJhZGZpbGUgYmFzaWNmaWxlICcgK1xuICAgICAgICAgICAgJ2JlZm9yZSBiZWdpbiBiZWdpbm5pbmcgYmVuY2htYXJrIGJldHdlZW4gYmZpbGUgYmZpbGVfYmFzZSBiaWcgYmlnZmlsZSBiaW4gYmluYXJ5X2RvdWJsZSBiaW5hcnlfZmxvYXQgJyArXG4gICAgICAgICAgICAnYmlubG9nIGJpdF9hbmQgYml0X2NvdW50IGJpdF9sZW5ndGggYml0X29yIGJpdF94b3IgYml0bWFwIGJsb2JfYmFzZSBibG9jayBibG9ja3NpemUgYm9keSBib3RoIGJvdW5kICcgK1xuICAgICAgICAgICAgJ2J1Y2tldCBidWZmZXJfY2FjaGUgYnVmZmVyX3Bvb2wgYnVpbGQgYnVsayBieSBieXRlIGJ5dGVvcmRlcm1hcmsgYnl0ZXMgY2FjaGUgY2FjaGluZyBjYWxsIGNhbGxpbmcgY2FuY2VsICcgK1xuICAgICAgICAgICAgJ2NhcGFjaXR5IGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXN0IGNhdGFsb2cgY2F0ZWdvcnkgY2VpbCBjZWlsaW5nIGNoYWluIGNoYW5nZSBjaGFuZ2VkIGNoYXJfYmFzZSAnICtcbiAgICAgICAgICAgICdjaGFyX2xlbmd0aCBjaGFyYWN0ZXJfbGVuZ3RoIGNoYXJhY3RlcnMgY2hhcmFjdGVyc2V0IGNoYXJpbmRleCBjaGFyc2V0IGNoYXJzZXRmb3JtIGNoYXJzZXRpZCBjaGVjayAnICtcbiAgICAgICAgICAgICdjaGVja3N1bSBjaGVja3N1bV9hZ2cgY2hpbGQgY2hvb3NlIGNociBjaHVuayBjbGFzcyBjbGVhbnVwIGNsZWFyIGNsaWVudCBjbG9iIGNsb2JfYmFzZSBjbG9uZSBjbG9zZSAnICtcbiAgICAgICAgICAgICdjbHVzdGVyX2lkIGNsdXN0ZXJfcHJvYmFiaWxpdHkgY2x1c3Rlcl9zZXQgY2x1c3RlcmluZyBjb2FsZXNjZSBjb2VyY2liaWxpdHkgY29sIGNvbGxhdGUgY29sbGF0aW9uICcgK1xuICAgICAgICAgICAgJ2NvbGxlY3QgY29sdSBjb2x1bSBjb2x1bW4gY29sdW1uX3ZhbHVlIGNvbHVtbnMgY29sdW1uc191cGRhdGVkIGNvbW1lbnQgY29tbWl0IGNvbXBhY3QgY29tcGF0aWJpbGl0eSAnICtcbiAgICAgICAgICAgICdjb21waWxlZCBjb21wbGV0ZSBjb21wb3NpdGVfbGltaXQgY29tcG91bmQgY29tcHJlc3MgY29tcHV0ZSBjb25jYXQgY29uY2F0X3dzIGNvbmN1cnJlbnQgY29uZmlybSBjb25uICcgK1xuICAgICAgICAgICAgJ2Nvbm5lYyBjb25uZWN0IGNvbm5lY3RfYnlfaXNjeWNsZSBjb25uZWN0X2J5X2lzbGVhZiBjb25uZWN0X2J5X3Jvb3QgY29ubmVjdF90aW1lIGNvbm5lY3Rpb24gJyArXG4gICAgICAgICAgICAnY29uc2lkZXIgY29uc2lzdGVudCBjb25zdGFudCBjb25zdHJhaW50IGNvbnN0cmFpbnRzIGNvbnN0cnVjdG9yIGNvbnRhaW5lciBjb250ZW50IGNvbnRlbnRzIGNvbnRleHQgJyArXG4gICAgICAgICAgICAnY29udHJpYnV0b3JzIGNvbnRyb2xmaWxlIGNvbnYgY29udmVydCBjb252ZXJ0X3R6IGNvcnIgY29ycl9rIGNvcnJfcyBjb3JyZXNwb25kaW5nIGNvcnJ1cHRpb24gY29zIGNvc3QgJyArXG4gICAgICAgICAgICAnY291bnQgY291bnRfYmlnIGNvdW50ZWQgY292YXJfcG9wIGNvdmFyX3NhbXAgY3B1X3Blcl9jYWxsIGNwdV9wZXJfc2Vzc2lvbiBjcmMzMiBjcmVhdGUgY3JlYXRpb24gJyArXG4gICAgICAgICAgICAnY3JpdGljYWwgY3Jvc3MgY3ViZSBjdW1lX2Rpc3QgY3VyZGF0ZSBjdXJyZW50IGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXAgY3VycmVudF91c2VyICcgK1xuICAgICAgICAgICAgJ2N1cnNvciBjdXJ0aW1lIGN1c3RvbWRhdHVtIGN5Y2xlIGRhdGEgZGF0YWJhc2UgZGF0YWJhc2VzIGRhdGFmaWxlIGRhdGFmaWxlcyBkYXRhbGVuZ3RoIGRhdGVfYWRkICcgK1xuICAgICAgICAgICAgJ2RhdGVfY2FjaGUgZGF0ZV9mb3JtYXQgZGF0ZV9zdWIgZGF0ZWFkZCBkYXRlZGlmZiBkYXRlZnJvbXBhcnRzIGRhdGVuYW1lIGRhdGVwYXJ0IGRhdGV0aW1lMmZyb21wYXJ0cyAnICtcbiAgICAgICAgICAgICdkYXkgZGF5X3RvX3NlY29uZCBkYXluYW1lIGRheW9mbW9udGggZGF5b2Z3ZWVrIGRheW9meWVhciBkYXlzIGRiX3JvbGVfY2hhbmdlIGRidGltZXpvbmUgZGRsIGRlYWxsb2NhdGUgJyArXG4gICAgICAgICAgICAnZGVjbGFyZSBkZWNvZGUgZGVjb21wb3NlIGRlY3JlbWVudCBkZWNyeXB0IGRlZHVwbGljYXRlIGRlZiBkZWZhIGRlZmF1IGRlZmF1bCBkZWZhdWx0IGRlZmF1bHRzICcgK1xuICAgICAgICAgICAgJ2RlZmVycmVkIGRlZmkgZGVmaW4gZGVmaW5lIGRlZ3JlZXMgZGVsYXllZCBkZWxlZ2F0ZSBkZWxldGUgZGVsZXRlX2FsbCBkZWxpbWl0ZWQgZGVtYW5kIGRlbnNlX3JhbmsgJyArXG4gICAgICAgICAgICAnZGVwdGggZGVxdWV1ZSBkZXNfZGVjcnlwdCBkZXNfZW5jcnlwdCBkZXNfa2V5X2ZpbGUgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXNjcmlwdG9yICcgK1xuICAgICAgICAgICAgJ2RldGVybWluaXN0aWMgZGlhZ25vc3RpY3MgZGlmZmVyZW5jZSBkaW1lbnNpb24gZGlyZWN0X2xvYWQgZGlyZWN0b3J5IGRpc2FibGUgZGlzYWJsZV9hbGwgJyArXG4gICAgICAgICAgICAnZGlzYWxsb3cgZGlzYXNzb2NpYXRlIGRpc2NhcmRmaWxlIGRpc2Nvbm5lY3QgZGlza2dyb3VwIGRpc3RpbmN0IGRpc3RpbmN0cm93IGRpc3RyaWJ1dGUgZGlzdHJpYnV0ZWQgZGl2ICcgK1xuICAgICAgICAgICAgJ2RvIGRvY3VtZW50IGRvbWFpbiBkb3RuZXQgZG91YmxlIGRvd25ncmFkZSBkcm9wIGR1bXBmaWxlIGR1cGxpY2F0ZSBkdXJhdGlvbiBlYWNoIGVkaXRpb24gZWRpdGlvbmFibGUgJyArXG4gICAgICAgICAgICAnZWRpdGlvbnMgZWxlbWVudCBlbGxpcHNpcyBlbHNlIGVsc2lmIGVsdCBlbXB0eSBlbmFibGUgZW5hYmxlX2FsbCBlbmNsb3NlZCBlbmNvZGUgZW5jb2RpbmcgZW5jcnlwdCAnICtcbiAgICAgICAgICAgICdlbmQgZW5kLWV4ZWMgZW5kaWFuIGVuZm9yY2VkIGVuZ2luZSBlbmdpbmVzIGVucXVldWUgZW50ZXJwcmlzZSBlbnRpdHllc2NhcGluZyBlb21vbnRoIGVycm9yIGVycm9ycyAnICtcbiAgICAgICAgICAgICdlc2NhcGVkIGV2YWxuYW1lIGV2YWx1YXRlIGV2ZW50IGV2ZW50ZGF0YSBldmVudHMgZXhjZXB0IGV4Y2VwdGlvbiBleGNlcHRpb25zIGV4Y2hhbmdlIGV4Y2x1ZGUgZXhjbHVkaW5nICcgK1xuICAgICAgICAgICAgJ2V4ZWN1IGV4ZWN1dCBleGVjdXRlIGV4ZW1wdCBleGlzdHMgZXhpdCBleHAgZXhwaXJlIGV4cGxhaW4gZXhwbG9kZSBleHBvcnQgZXhwb3J0X3NldCBleHRlbmRlZCBleHRlbnQgZXh0ZXJuYWwgJyArXG4gICAgICAgICAgICAnZXh0ZXJuYWxfMSBleHRlcm5hbF8yIGV4dGVybmFsbHkgZXh0cmFjdCBmYWlsZWQgZmFpbGVkX2xvZ2luX2F0dGVtcHRzIGZhaWxvdmVyIGZhaWx1cmUgZmFyIGZhc3QgJyArXG4gICAgICAgICAgICAnZmVhdHVyZV9zZXQgZmVhdHVyZV92YWx1ZSBmZXRjaCBmaWVsZCBmaWVsZHMgZmlsZSBmaWxlX25hbWVfY29udmVydCBmaWxlc3lzdGVtX2xpa2VfbG9nZ2luZyBmaW5hbCAnICtcbiAgICAgICAgICAgICdmaW5pc2ggZmlyc3QgZmlyc3RfdmFsdWUgZml4ZWQgZmxhc2hfY2FjaGUgZmxhc2hiYWNrIGZsb29yIGZsdXNoIGZvbGxvd2luZyBmb2xsb3dzIGZvciBmb3JhbGwgZm9yY2UgZm9yZWlnbiAnICtcbiAgICAgICAgICAgICdmb3JtIGZvcm1hIGZvcm1hdCBmb3VuZCBmb3VuZF9yb3dzIGZyZWVsaXN0IGZyZWVsaXN0cyBmcmVlcG9vbHMgZnJlc2ggZnJvbSBmcm9tX2Jhc2U2NCBmcm9tX2RheXMgJyArXG4gICAgICAgICAgICAnZnRwIGZ1bGwgZnVuY3Rpb24gZ2VuZXJhbCBnZW5lcmF0ZWQgZ2V0IGdldF9mb3JtYXQgZ2V0X2xvY2sgZ2V0ZGF0ZSBnZXR1dGNkYXRlIGdsb2JhbCBnbG9iYWxfbmFtZSAnICtcbiAgICAgICAgICAgICdnbG9iYWxseSBnbyBnb3RvIGdyYW50IGdyYW50cyBncmVhdGVzdCBncm91cCBncm91cF9jb25jYXQgZ3JvdXBfaWQgZ3JvdXBpbmcgZ3JvdXBpbmdfaWQgZ3JvdXBzICcgK1xuICAgICAgICAgICAgJ2d0aWRfc3VidHJhY3QgZ3VhcmFudGVlIGd1YXJkIGhhbmRsZXIgaGFzaCBoYXNoa2V5cyBoYXZpbmcgaGVhIGhlYWQgaGVhZGkgaGVhZGluIGhlYWRpbmcgaGVhcCBoZWxwIGhleCAnICtcbiAgICAgICAgICAgICdoaWVyYXJjaHkgaGlnaCBoaWdoX3ByaW9yaXR5IGhvc3RzIGhvdXIgaG91cnMgaHR0cCBpZCBpZGVudF9jdXJyZW50IGlkZW50X2luY3IgaWRlbnRfc2VlZCBpZGVudGlmaWVkICcgK1xuICAgICAgICAgICAgJ2lkZW50aXR5IGlkbGVfdGltZSBpZiBpZm51bGwgaWdub3JlIGlpZiBpbGlrZSBpbG0gaW1tZWRpYXRlIGltcG9ydCBpbiBpbmNsdWRlIGluY2x1ZGluZyBpbmNyZW1lbnQgJyArXG4gICAgICAgICAgICAnaW5kZXggaW5kZXhlcyBpbmRleGluZyBpbmRleHR5cGUgaW5kaWNhdG9yIGluZGljZXMgaW5ldDZfYXRvbiBpbmV0Nl9udG9hIGluZXRfYXRvbiBpbmV0X250b2EgaW5maWxlICcgK1xuICAgICAgICAgICAgJ2luaXRpYWwgaW5pdGlhbGl6ZWQgaW5pdGlhbGx5IGluaXRyYW5zIGlubWVtb3J5IGlubmVyIGlubm9kYiBpbnB1dCBpbnNlcnQgaW5zdGFsbCBpbnN0YW5jZSBpbnN0YW50aWFibGUgJyArXG4gICAgICAgICAgICAnaW5zdHIgaW50ZXJmYWNlIGludGVybGVhdmVkIGludGVyc2VjdCBpbnRvIGludmFsaWRhdGUgaW52aXNpYmxlIGlzIGlzX2ZyZWVfbG9jayBpc19pcHY0IGlzX2lwdjRfY29tcGF0ICcgK1xuICAgICAgICAgICAgJ2lzX25vdCBpc19ub3RfbnVsbCBpc191c2VkX2xvY2sgaXNkYXRlIGlzbnVsbCBpc29sYXRpb24gaXRlcmF0ZSBqYXZhIGpvaW4ganNvbiBqc29uX2V4aXN0cyAnICtcbiAgICAgICAgICAgICdrZWVwIGtlZXBfZHVwbGljYXRlcyBrZXkga2V5cyBraWxsIGxhbmd1YWdlIGxhcmdlIGxhc3QgbGFzdF9kYXkgbGFzdF9pbnNlcnRfaWQgbGFzdF92YWx1ZSBsYXRlcmFsIGxheCBsY2FzZSAnICtcbiAgICAgICAgICAgICdsZWFkIGxlYWRpbmcgbGVhc3QgbGVhdmVzIGxlZnQgbGVuIGxlbmdodCBsZW5ndGggbGVzcyBsZXZlbCBsZXZlbHMgbGlicmFyeSBsaWtlIGxpa2UyIGxpa2U0IGxpa2VjIGxpbWl0ICcgK1xuICAgICAgICAgICAgJ2xpbmVzIGxpbmsgbGlzdCBsaXN0YWdnIGxpdHRsZSBsbiBsb2FkIGxvYWRfZmlsZSBsb2IgbG9icyBsb2NhbCBsb2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jYXRlICcgK1xuICAgICAgICAgICAgJ2xvY2F0b3IgbG9jayBsb2NrZWQgbG9nIGxvZzEwIGxvZzIgbG9nZmlsZSBsb2dmaWxlcyBsb2dnaW5nIGxvZ2ljYWwgbG9naWNhbF9yZWFkc19wZXJfY2FsbCAnICtcbiAgICAgICAgICAgICdsb2dvZmYgbG9nb24gbG9ncyBsb25nIGxvb3AgbG93IGxvd19wcmlvcml0eSBsb3dlciBscGFkIGxydHJpbSBsdHJpbSBtYWluIG1ha2Vfc2V0IG1ha2VkYXRlIG1ha2V0aW1lICcgK1xuICAgICAgICAgICAgJ21hbmFnZWQgbWFuYWdlbWVudCBtYW51YWwgbWFwIG1hcHBpbmcgbWFzayBtYXN0ZXIgbWFzdGVyX3Bvc193YWl0IG1hdGNoIG1hdGNoZWQgbWF0ZXJpYWxpemVkIG1heCAnICtcbiAgICAgICAgICAgICdtYXhleHRlbnRzIG1heGltaXplIG1heGluc3RhbmNlcyBtYXhsZW4gbWF4bG9nZmlsZXMgbWF4bG9naGlzdG9yeSBtYXhsb2dtZW1iZXJzIG1heHNpemUgbWF4dHJhbnMgJyArXG4gICAgICAgICAgICAnbWQ1IG1lYXN1cmVzIG1lZGlhbiBtZWRpdW0gbWVtYmVyIG1lbWNvbXByZXNzIG1lbW9yeSBtZXJnZSBtaWNyb3NlY29uZCBtaWQgbWlncmF0aW9uIG1pbiBtaW5leHRlbnRzICcgK1xuICAgICAgICAgICAgJ21pbmltdW0gbWluaW5nIG1pbnVzIG1pbnV0ZSBtaW51dGVzIG1pbnZhbHVlIG1pc3NpbmcgbW9kIG1vZGUgbW9kZWwgbW9kaWZpY2F0aW9uIG1vZGlmeSBtb2R1bGUgbW9uaXRvcmluZyBtb250aCAnICtcbiAgICAgICAgICAgICdtb250aHMgbW91bnQgbW92ZSBtb3ZlbWVudCBtdWx0aXNldCBtdXRleCBuYW1lIG5hbWVfY29uc3QgbmFtZXMgbmFuIG5hdGlvbmFsIG5hdGl2ZSBuYXR1cmFsIG5hdiBuY2hhciAnICtcbiAgICAgICAgICAgICduY2xvYiBuZXN0ZWQgbmV2ZXIgbmV3IG5ld2xpbmUgbmV4dCBuZXh0dmFsIG5vIG5vX3dyaXRlX3RvX2JpbmxvZyBub2FyY2hpdmVsb2cgbm9hdWRpdCBub2JhZGZpbGUgJyArXG4gICAgICAgICAgICAnbm9jaGVjayBub2NvbXByZXNzIG5vY29weSBub2N5Y2xlIG5vZGVsYXkgbm9kaXNjYXJkZmlsZSBub2VudGl0eWVzY2FwaW5nIG5vZ3VhcmFudGVlIG5va2VlcCBub2xvZ2ZpbGUgJyArXG4gICAgICAgICAgICAnbm9tYXBwaW5nIG5vbWF4dmFsdWUgbm9taW5pbWl6ZSBub21pbnZhbHVlIG5vbW9uaXRvcmluZyBub25lIG5vbmVkaXRpb25hYmxlIG5vbnNjaGVtYSBub29yZGVyICcgK1xuICAgICAgICAgICAgJ25vcHIgbm9wcm8gbm9wcm9tIG5vcHJvbXAgbm9wcm9tcHQgbm9yZWx5IG5vcmVzZXRsb2dzIG5vcmV2ZXJzZSBub3JtYWwgbm9yb3dkZXBlbmRlbmNpZXMgbm9zY2hlbWFjaGVjayAnICtcbiAgICAgICAgICAgICdub3N3aXRjaCBub3Qgbm90aGluZyBub3RpY2Ugbm90bnVsbCBub3RyaW0gbm92YWxpZGF0ZSBub3cgbm93YWl0IG50aF92YWx1ZSBudWxsaWYgbnVsbHMgbnVtIG51bWIgbnVtYmUgJyArXG4gICAgICAgICAgICAnbnZhcmNoYXIgbnZhcmNoYXIyIG9iamVjdCBvY2ljb2xsIG9jaWRhdGUgb2NpZGF0ZXRpbWUgb2NpZHVyYXRpb24gb2NpaW50ZXJ2YWwgb2NpbG9ibG9jYXRvciBvY2ludW1iZXIgJyArXG4gICAgICAgICAgICAnb2NpcmVmIG9jaXJlZmN1cnNvciBvY2lyb3dpZCBvY2lzdHJpbmcgb2NpdHlwZSBvY3Qgb2N0ZXRfbGVuZ3RoIG9mIG9mZiBvZmZsaW5lIG9mZnNldCBvaWQgb2lkaW5kZXggb2xkICcgK1xuICAgICAgICAgICAgJ29uIG9ubGluZSBvbmx5IG9wYXF1ZSBvcGVuIG9wZXJhdGlvbnMgb3BlcmF0b3Igb3B0aW1hbCBvcHRpbWl6ZSBvcHRpb24gb3B0aW9uYWxseSBvciBvcmFjbGUgb3JhY2xlX2RhdGUgJyArXG4gICAgICAgICAgICAnb3JhZGF0YSBvcmQgb3JkYXVkaW8gb3JkZGljb20gb3JkZG9jIG9yZGVyIG9yZGltYWdlIG9yZGluYWxpdHkgb3JkdmlkZW8gb3JnYW5pemF0aW9uIG9ybGFueSBvcmx2YXJ5ICcgK1xuICAgICAgICAgICAgJ291dCBvdXRlciBvdXRmaWxlIG91dGxpbmUgb3V0cHV0IG92ZXIgb3ZlcmZsb3cgb3ZlcnJpZGluZyBwYWNrYWdlIHBhZCBwYXJhbGxlbCBwYXJhbGxlbF9lbmFibGUgJyArXG4gICAgICAgICAgICAncGFyYW1ldGVycyBwYXJlbnQgcGFyc2UgcGFydGlhbCBwYXJ0aXRpb24gcGFydGl0aW9ucyBwYXNjYWwgcGFzc2luZyBwYXNzd29yZCBwYXNzd29yZF9ncmFjZV90aW1lICcgK1xuICAgICAgICAgICAgJ3Bhc3N3b3JkX2xvY2tfdGltZSBwYXNzd29yZF9yZXVzZV9tYXggcGFzc3dvcmRfcmV1c2VfdGltZSBwYXNzd29yZF92ZXJpZnlfZnVuY3Rpb24gcGF0Y2ggcGF0aCBwYXRpbmRleCAnICtcbiAgICAgICAgICAgICdwY3RpbmNyZWFzZSBwY3R0aHJlc2hvbGQgcGN0dXNlZCBwY3R2ZXJzaW9uIHBlcmNlbnQgcGVyY2VudF9yYW5rIHBlcmNlbnRpbGVfY29udCBwZXJjZW50aWxlX2Rpc2MgJyArXG4gICAgICAgICAgICAncGVyZm9ybWFuY2UgcGVyaW9kIHBlcmlvZF9hZGQgcGVyaW9kX2RpZmYgcGVybWFuZW50IHBoeXNpY2FsIHBpIHBpcGUgcGlwZWxpbmVkIHBpdm90IHBsdWdnYWJsZSBwbHVnaW4gJyArXG4gICAgICAgICAgICAncG9saWN5IHBvc2l0aW9uIHBvc3RfdHJhbnNhY3Rpb24gcG93IHBvd2VyIHByYWdtYSBwcmVidWlsdCBwcmVjZWRlcyBwcmVjZWRpbmcgcHJlY2lzaW9uIHByZWRpY3Rpb24gJyArXG4gICAgICAgICAgICAncHJlZGljdGlvbl9jb3N0IHByZWRpY3Rpb25fZGV0YWlscyBwcmVkaWN0aW9uX3Byb2JhYmlsaXR5IHByZWRpY3Rpb25fc2V0IHByZXBhcmUgcHJlc2VudCBwcmVzZXJ2ZSAnICtcbiAgICAgICAgICAgICdwcmlvciBwcmlvcml0eSBwcml2YXRlIHByaXZhdGVfc2dhIHByaXZpbGVnZXMgcHJvY2VkdXJhbCBwcm9jZWR1cmUgcHJvY2VkdXJlX2FuYWx5emUgcHJvY2Vzc2xpc3QgJyArXG4gICAgICAgICAgICAncHJvZmlsZXMgcHJvamVjdCBwcm9tcHQgcHJvdGVjdGlvbiBwdWJsaWMgcHVibGlzaGluZ3NlcnZlcm5hbWUgcHVyZ2UgcXVhcnRlciBxdWVyeSBxdWljayBxdWllc2NlIHF1b3RhICcgK1xuICAgICAgICAgICAgJ3F1b3RlbmFtZSByYWRpYW5zIHJhaXNlIHJhbmQgcmFuZ2UgcmFuayByYXcgcmVhZCByZWFkcyByZWFkc2l6ZSByZWJ1aWxkIHJlY29yZCByZWNvcmRzICcgK1xuICAgICAgICAgICAgJ3JlY292ZXIgcmVjb3ZlcnkgcmVjdXJzaXZlIHJlY3ljbGUgcmVkbyByZWR1Y2VkIHJlZiByZWZlcmVuY2UgcmVmZXJlbmNlZCByZWZlcmVuY2VzIHJlZmVyZW5jaW5nIHJlZnJlc2ggJyArXG4gICAgICAgICAgICAncmVnZXhwX2xpa2UgcmVnaXN0ZXIgcmVncl9hdmd4IHJlZ3JfYXZneSByZWdyX2NvdW50IHJlZ3JfaW50ZXJjZXB0IHJlZ3JfcjIgcmVncl9zbG9wZSByZWdyX3N4eCByZWdyX3N4eSAnICtcbiAgICAgICAgICAgICdyZWplY3QgcmVrZXkgcmVsYXRpb25hbCByZWxhdGl2ZSByZWxheWxvZyByZWxlYXNlIHJlbGVhc2VfbG9jayByZWxpZXNfb24gcmVsb2NhdGUgcmVseSByZW0gcmVtYWluZGVyIHJlbmFtZSAnICtcbiAgICAgICAgICAgICdyZXBhaXIgcmVwZWF0IHJlcGxhY2UgcmVwbGljYXRlIHJlcGxpY2F0aW9uIHJlcXVpcmVkIHJlc2V0IHJlc2V0bG9ncyByZXNpemUgcmVzb3VyY2UgcmVzcGVjdCByZXN0b3JlICcgK1xuICAgICAgICAgICAgJ3Jlc3RyaWN0ZWQgcmVzdWx0IHJlc3VsdF9jYWNoZSByZXN1bWFibGUgcmVzdW1lIHJldGVudGlvbiByZXR1cm4gcmV0dXJuaW5nIHJldHVybnMgcmV1c2UgcmV2ZXJzZSByZXZva2UgJyArXG4gICAgICAgICAgICAncmlnaHQgcmxpa2Ugcm9sZSByb2xlcyByb2xsYmFjayByb2xsaW5nIHJvbGx1cCByb3VuZCByb3cgcm93X2NvdW50IHJvd2RlcGVuZGVuY2llcyByb3dpZCByb3dudW0gcm93cyAnICtcbiAgICAgICAgICAgICdydHJpbSBydWxlcyBzYWZlIHNhbHQgc2FtcGxlIHNhdmUgc2F2ZXBvaW50IHNiMSBzYjIgc2I0IHNjYW4gc2NoZW1hIHNjaGVtYWNoZWNrIHNjbiBzY29wZSBzY3JvbGwgJyArXG4gICAgICAgICAgICAnc2RvX2dlb3Jhc3RlciBzZG9fdG9wb19nZW9tZXRyeSBzZWFyY2ggc2VjX3RvX3RpbWUgc2Vjb25kIHNlY29uZHMgc2VjdGlvbiBzZWN1cmVmaWxlIHNlY3VyaXR5IHNlZWQgc2VnbWVudCBzZWxlY3QgJyArXG4gICAgICAgICAgICAnc2VsZiBzZW1pIHNlcXVlbmNlIHNlcXVlbnRpYWwgc2VyaWFsaXphYmxlIHNlcnZlciBzZXJ2ZXJlcnJvciBzZXNzaW9uIHNlc3Npb25fdXNlciBzZXNzaW9uc19wZXJfdXNlciBzZXQgJyArXG4gICAgICAgICAgICAnc2V0cyBzZXR0aW5ncyBzaGEgc2hhMSBzaGEyIHNoYXJlIHNoYXJlZCBzaGFyZWRfcG9vbCBzaG9ydCBzaG93IHNocmluayBzaHV0ZG93biBzaV9hdmVyYWdlY29sb3IgJyArXG4gICAgICAgICAgICAnc2lfY29sb3JoaXN0b2dyYW0gc2lfZmVhdHVyZWxpc3Qgc2lfcG9zaXRpb25hbGNvbG9yIHNpX3N0aWxsaW1hZ2Ugc2lfdGV4dHVyZSBzaWJsaW5ncyBzaWQgc2lnbiBzaW4gJyArXG4gICAgICAgICAgICAnc2l6ZSBzaXplX3Qgc2l6ZXMgc2tpcCBzbGF2ZSBzbGVlcCBzbWFsbGRhdGV0aW1lZnJvbXBhcnRzIHNtYWxsZmlsZSBzbmFwc2hvdCBzb21lIHNvbmFtZSBzb3J0IHNvdW5kZXggJyArXG4gICAgICAgICAgICAnc291cmNlIHNwYWNlIHNwYXJzZSBzcGZpbGUgc3BsaXQgc3FsIHNxbF9iaWdfcmVzdWx0IHNxbF9idWZmZXJfcmVzdWx0IHNxbF9jYWNoZSBzcWxfY2FsY19mb3VuZF9yb3dzICcgK1xuICAgICAgICAgICAgJ3NxbF9zbWFsbF9yZXN1bHQgc3FsX3ZhcmlhbnRfcHJvcGVydHkgc3FsY29kZSBzcWxkYXRhIHNxbGVycm9yIHNxbG5hbWUgc3Fsc3RhdGUgc3FydCBzcXVhcmUgc3RhbmRhbG9uZSAnICtcbiAgICAgICAgICAgICdzdGFuZGJ5IHN0YXJ0IHN0YXJ0aW5nIHN0YXJ0dXAgc3RhdGVtZW50IHN0YXRpYyBzdGF0aXN0aWNzIHN0YXRzX2Jpbm9taWFsX3Rlc3Qgc3RhdHNfY3Jvc3N0YWIgJyArXG4gICAgICAgICAgICAnc3RhdHNfa3NfdGVzdCBzdGF0c19tb2RlIHN0YXRzX213X3Rlc3Qgc3RhdHNfb25lX3dheV9hbm92YSBzdGF0c190X3Rlc3RfIHN0YXRzX3RfdGVzdF9pbmRlcCAnICtcbiAgICAgICAgICAgICdzdGF0c190X3Rlc3Rfb25lIHN0YXRzX3RfdGVzdF9wYWlyZWQgc3RhdHNfd3NyX3Rlc3Qgc3RhdHVzIHN0ZCBzdGRkZXYgc3RkZGV2X3BvcCBzdGRkZXZfc2FtcCBzdGRldiAnICtcbiAgICAgICAgICAgICdzdG9wIHN0b3JhZ2Ugc3RvcmUgc3RvcmVkIHN0ciBzdHJfdG9fZGF0ZSBzdHJhaWdodF9qb2luIHN0cmNtcCBzdHJpY3Qgc3RyaW5nIHN0cnVjdCBzdHVmZiBzdHlsZSBzdWJkYXRlICcgK1xuICAgICAgICAgICAgJ3N1YnBhcnRpdGlvbiBzdWJwYXJ0aXRpb25zIHN1YnN0aXR1dGFibGUgc3Vic3RyIHN1YnN0cmluZyBzdWJ0aW1lIHN1YnRyaW5nX2luZGV4IHN1YnR5cGUgc3VjY2VzcyBzdW0gJyArXG4gICAgICAgICAgICAnc3VzcGVuZCBzd2l0Y2ggc3dpdGNob2Zmc2V0IHN3aXRjaG92ZXIgc3luYyBzeW5jaHJvbm91cyBzeW5vbnltIHN5cyBzeXNfeG1sYWdnIHN5c2FzbSBzeXNhdXggc3lzZGF0ZSAnICtcbiAgICAgICAgICAgICdzeXNkYXRldGltZW9mZnNldCBzeXNkYmEgc3lzb3BlciBzeXN0ZW0gc3lzdGVtX3VzZXIgc3lzdXRjZGF0ZXRpbWUgdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFibGVzYW1wbGUgdGFuIHRkbyAnICtcbiAgICAgICAgICAgICd0ZW1wbGF0ZSB0ZW1wb3JhcnkgdGVybWluYXRlZCB0ZXJ0aWFyeV93ZWlnaHRzIHRlc3QgdGhhbiB0aGVuIHRocmVhZCB0aHJvdWdoIHRpZXIgdGllcyB0aW1lIHRpbWVfZm9ybWF0ICcgK1xuICAgICAgICAgICAgJ3RpbWVfem9uZSB0aW1lZGlmZiB0aW1lZnJvbXBhcnRzIHRpbWVvdXQgdGltZXN0YW1wIHRpbWVzdGFtcGFkZCB0aW1lc3RhbXBkaWZmIHRpbWV6b25lX2FiYnIgJyArXG4gICAgICAgICAgICAndGltZXpvbmVfbWludXRlIHRpbWV6b25lX3JlZ2lvbiB0byB0b19iYXNlNjQgdG9fZGF0ZSB0b19kYXlzIHRvX3NlY29uZHMgdG9kYXRldGltZW9mZnNldCB0cmFjZSB0cmFja2luZyAnICtcbiAgICAgICAgICAgICd0cmFuc2FjdGlvbiB0cmFuc2FjdGlvbmFsIHRyYW5zbGF0ZSB0cmFuc2xhdGlvbiB0cmVhdCB0cmlnZ2VyIHRyaWdnZXJfbmVzdGxldmVsIHRyaWdnZXJzIHRyaW0gdHJ1bmNhdGUgJyArXG4gICAgICAgICAgICAndHJ5X2Nhc3QgdHJ5X2NvbnZlcnQgdHJ5X3BhcnNlIHR5cGUgdWIxIHViMiB1YjQgdWNhc2UgdW5hcmNoaXZlZCB1bmJvdW5kZWQgdW5jb21wcmVzcyAnICtcbiAgICAgICAgICAgICd1bmRlciB1bmRvIHVuaGV4IHVuaWNvZGUgdW5pZm9ybSB1bmluc3RhbGwgdW5pb24gdW5pcXVlIHVuaXhfdGltZXN0YW1wIHVua25vd24gdW5saW1pdGVkIHVubG9jayB1bm5lc3QgdW5waXZvdCAnICtcbiAgICAgICAgICAgICd1bnJlY292ZXJhYmxlIHVuc2FmZSB1bnNpZ25lZCB1bnRpbCB1bnRydXN0ZWQgdW51c2FibGUgdW51c2VkIHVwZGF0ZSB1cGRhdGVkIHVwZ3JhZGUgdXBwZWQgdXBwZXIgdXBzZXJ0ICcgK1xuICAgICAgICAgICAgJ3VybCB1cm93aWQgdXNhYmxlIHVzYWdlIHVzZSB1c2Vfc3RvcmVkX291dGxpbmVzIHVzZXIgdXNlcl9kYXRhIHVzZXJfcmVzb3VyY2VzIHVzZXJzIHVzaW5nIHV0Y19kYXRlICcgK1xuICAgICAgICAgICAgJ3V0Y190aW1lc3RhbXAgdXVpZCB1dWlkX3Nob3J0IHZhbGlkYXRlIHZhbGlkYXRlX3Bhc3N3b3JkX3N0cmVuZ3RoIHZhbGlkYXRpb24gdmFsaXN0IHZhbHVlIHZhbHVlcyB2YXIgJyArXG4gICAgICAgICAgICAndmFyX3NhbXAgdmFyY2hhcmMgdmFyaSB2YXJpYSB2YXJpYWIgdmFyaWFibCB2YXJpYWJsZSB2YXJpYWJsZXMgdmFyaWFuY2UgdmFycCB2YXJyYXcgdmFycmF3YyB2YXJyYXkgJyArXG4gICAgICAgICAgICAndmVyaWZ5IHZlcnNpb24gdmVyc2lvbnMgdmlldyB2aXJ0dWFsIHZpc2libGUgdm9pZCB3YWl0IHdhbGxldCB3YXJuaW5nIHdhcm5pbmdzIHdlZWsgd2Vla2RheSB3ZWVrb2Z5ZWFyICcgK1xuICAgICAgICAgICAgJ3dlbGxmb3JtZWQgd2hlbiB3aGVuZSB3aGVuZXYgd2hlbmV2ZSB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aGl0ZXNwYWNlIHdpbmRvdyB3aXRoIHdpdGhpbiB3aXRob3V0IHdvcmsgd3JhcHBlZCAnICtcbiAgICAgICAgICAgICd4ZGIgeG1sIHhtbGFnZyB4bWxhdHRyaWJ1dGVzIHhtbGNhc3QgeG1sY29sYXR0dmFsIHhtbGVsZW1lbnQgeG1sZXhpc3RzIHhtbGZvcmVzdCB4bWxpbmRleCB4bWxuYW1lc3BhY2VzICcgK1xuICAgICAgICAgICAgJ3htbHBpIHhtbHF1ZXJ5IHhtbHJvb3QgeG1sc2NoZW1hIHhtbHNlcmlhbGl6ZSB4bWx0YWJsZSB4bWx0eXBlIHhvciB5ZWFyIHllYXJfdG9fbW9udGggeWVhcnMgeWVhcndlZWsnLFxuICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAndHJ1ZSBmYWxzZSBudWxsIHVua25vd24nLFxuICAgICAgICAgIGJ1aWx0X2luOlxuICAgICAgICAgICAgJ2FycmF5IGJpZ2ludCBiaW5hcnkgYml0IGJsb2IgYm9vbCBib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZGVjIGRlY2ltYWwgZmxvYXQgaW50IGludDggaW50ZWdlciBpbnRlcnZhbCBudW1iZXIgJyArXG4gICAgICAgICAgICAnbnVtZXJpYyByZWFsIHJlY29yZCBzZXJpYWwgc2VyaWFsOCBzbWFsbGludCB0ZXh0IHRpbWUgdGltZXN0YW1wIHRpbnlpbnQgdmFyY2hhciB2YXJjaGFyMiB2YXJ5aW5nIHZvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXFwnXFwnJ31dXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBDT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIENPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3FsX21vcmU7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEFueSBvZiB0aGUgcGFzc2VkIGV4cHJlc3NzaW9ucyBtYXkgbWF0Y2hcbiAqXG4gKiBDcmVhdGVzIGEgaHVnZSB0aGlzIHwgdGhpcyB8IHRoYXQgfCB0aGF0IG1hdGNoXG4gKiBAcGFyYW0geyhSZWdFeHAgfCBzdHJpbmcpW10gfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlaXRoZXIoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSAnKCcgKyBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwifFwiKSArIFwiKVwiO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuIExhbmd1YWdlOiBTUUxcbiBXZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUUxcbiBDYXRlZ29yeTogY29tbW9uLCBkYXRhYmFzZVxuICovXG5cbmZ1bmN0aW9uIHNxbChobGpzKSB7XG4gIGNvbnN0IENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW46IC8nJy8gfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBRVU9URURfSURFTlRJRklFUiA9IHtcbiAgICBiZWdpbjogL1wiLyxcbiAgICBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFsgeyBiZWdpbjogL1wiXCIvIH0gXVxuICB9O1xuXG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwidHJ1ZVwiLFxuICAgIFwiZmFsc2VcIixcbiAgICAvLyBOb3Qgc3VyZSBpdCdzIGNvcnJlY3QgdG8gY2FsbCBOVUxMIGxpdGVyYWwsIGFuZCBjbGF1c2VzIGxpa2UgSVMgW05PVF0gTlVMTCBsb29rIHN0cmFuZ2UgdGhhdCB3YXkuXG4gICAgLy8gXCJudWxsXCIsXG4gICAgXCJ1bmtub3duXCJcbiAgXTtcblxuICBjb25zdCBNVUxUSV9XT1JEX1RZUEVTID0gW1xuICAgIFwiZG91YmxlIHByZWNpc2lvblwiLFxuICAgIFwibGFyZ2Ugb2JqZWN0XCIsXG4gICAgXCJ3aXRoIHRpbWV6b25lXCIsXG4gICAgXCJ3aXRob3V0IHRpbWV6b25lXCJcbiAgXTtcblxuICBjb25zdCBUWVBFUyA9IFtcbiAgICAnYmlnaW50JyxcbiAgICAnYmluYXJ5JyxcbiAgICAnYmxvYicsXG4gICAgJ2Jvb2xlYW4nLFxuICAgICdjaGFyJyxcbiAgICAnY2hhcmFjdGVyJyxcbiAgICAnY2xvYicsXG4gICAgJ2RhdGUnLFxuICAgICdkZWMnLFxuICAgICdkZWNmbG9hdCcsXG4gICAgJ2RlY2ltYWwnLFxuICAgICdmbG9hdCcsXG4gICAgJ2ludCcsXG4gICAgJ2ludGVnZXInLFxuICAgICdpbnRlcnZhbCcsXG4gICAgJ25jaGFyJyxcbiAgICAnbmNsb2InLFxuICAgICduYXRpb25hbCcsXG4gICAgJ251bWVyaWMnLFxuICAgICdyZWFsJyxcbiAgICAncm93JyxcbiAgICAnc21hbGxpbnQnLFxuICAgICd0aW1lJyxcbiAgICAndGltZXN0YW1wJyxcbiAgICAndmFyY2hhcicsXG4gICAgJ3ZhcnlpbmcnLCAvLyBtb2RpZmllciAoY2hhcmFjdGVyIHZhcnlpbmcpXG4gICAgJ3ZhcmJpbmFyeSdcbiAgXTtcblxuICBjb25zdCBOT05fUkVTRVJWRURfV09SRFMgPSBbXG4gICAgXCJhZGRcIixcbiAgICBcImFzY1wiLFxuICAgIFwiY29sbGF0aW9uXCIsXG4gICAgXCJkZXNjXCIsXG4gICAgXCJmaW5hbFwiLFxuICAgIFwiZmlyc3RcIixcbiAgICBcImxhc3RcIixcbiAgICBcInZpZXdcIlxuICBdO1xuXG4gIC8vIGh0dHBzOi8vamFrZXdoZWF0LmdpdGh1Yi5pby9zcWwtb3ZlcnZpZXcvc3FsLTIwMTYtZm91bmRhdGlvbi1ncmFtbWFyLmh0bWwjcmVzZXJ2ZWQtd29yZFxuICBjb25zdCBSRVNFUlZFRF9XT1JEUyA9IFtcbiAgICBcImFic1wiLFxuICAgIFwiYWNvc1wiLFxuICAgIFwiYWxsXCIsXG4gICAgXCJhbGxvY2F0ZVwiLFxuICAgIFwiYWx0ZXJcIixcbiAgICBcImFuZFwiLFxuICAgIFwiYW55XCIsXG4gICAgXCJhcmVcIixcbiAgICBcImFycmF5XCIsXG4gICAgXCJhcnJheV9hZ2dcIixcbiAgICBcImFycmF5X21heF9jYXJkaW5hbGl0eVwiLFxuICAgIFwiYXNcIixcbiAgICBcImFzZW5zaXRpdmVcIixcbiAgICBcImFzaW5cIixcbiAgICBcImFzeW1tZXRyaWNcIixcbiAgICBcImF0XCIsXG4gICAgXCJhdGFuXCIsXG4gICAgXCJhdG9taWNcIixcbiAgICBcImF1dGhvcml6YXRpb25cIixcbiAgICBcImF2Z1wiLFxuICAgIFwiYmVnaW5cIixcbiAgICBcImJlZ2luX2ZyYW1lXCIsXG4gICAgXCJiZWdpbl9wYXJ0aXRpb25cIixcbiAgICBcImJldHdlZW5cIixcbiAgICBcImJpZ2ludFwiLFxuICAgIFwiYmluYXJ5XCIsXG4gICAgXCJibG9iXCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJib3RoXCIsXG4gICAgXCJieVwiLFxuICAgIFwiY2FsbFwiLFxuICAgIFwiY2FsbGVkXCIsXG4gICAgXCJjYXJkaW5hbGl0eVwiLFxuICAgIFwiY2FzY2FkZWRcIixcbiAgICBcImNhc2VcIixcbiAgICBcImNhc3RcIixcbiAgICBcImNlaWxcIixcbiAgICBcImNlaWxpbmdcIixcbiAgICBcImNoYXJcIixcbiAgICBcImNoYXJfbGVuZ3RoXCIsXG4gICAgXCJjaGFyYWN0ZXJcIixcbiAgICBcImNoYXJhY3Rlcl9sZW5ndGhcIixcbiAgICBcImNoZWNrXCIsXG4gICAgXCJjbGFzc2lmaWVyXCIsXG4gICAgXCJjbG9iXCIsXG4gICAgXCJjbG9zZVwiLFxuICAgIFwiY29hbGVzY2VcIixcbiAgICBcImNvbGxhdGVcIixcbiAgICBcImNvbGxlY3RcIixcbiAgICBcImNvbHVtblwiLFxuICAgIFwiY29tbWl0XCIsXG4gICAgXCJjb25kaXRpb25cIixcbiAgICBcImNvbm5lY3RcIixcbiAgICBcImNvbnN0cmFpbnRcIixcbiAgICBcImNvbnRhaW5zXCIsXG4gICAgXCJjb252ZXJ0XCIsXG4gICAgXCJjb3B5XCIsXG4gICAgXCJjb3JyXCIsXG4gICAgXCJjb3JyZXNwb25kaW5nXCIsXG4gICAgXCJjb3NcIixcbiAgICBcImNvc2hcIixcbiAgICBcImNvdW50XCIsXG4gICAgXCJjb3Zhcl9wb3BcIixcbiAgICBcImNvdmFyX3NhbXBcIixcbiAgICBcImNyZWF0ZVwiLFxuICAgIFwiY3Jvc3NcIixcbiAgICBcImN1YmVcIixcbiAgICBcImN1bWVfZGlzdFwiLFxuICAgIFwiY3VycmVudFwiLFxuICAgIFwiY3VycmVudF9jYXRhbG9nXCIsXG4gICAgXCJjdXJyZW50X2RhdGVcIixcbiAgICBcImN1cnJlbnRfZGVmYXVsdF90cmFuc2Zvcm1fZ3JvdXBcIixcbiAgICBcImN1cnJlbnRfcGF0aFwiLFxuICAgIFwiY3VycmVudF9yb2xlXCIsXG4gICAgXCJjdXJyZW50X3Jvd1wiLFxuICAgIFwiY3VycmVudF9zY2hlbWFcIixcbiAgICBcImN1cnJlbnRfdGltZVwiLFxuICAgIFwiY3VycmVudF90aW1lc3RhbXBcIixcbiAgICBcImN1cnJlbnRfcGF0aFwiLFxuICAgIFwiY3VycmVudF9yb2xlXCIsXG4gICAgXCJjdXJyZW50X3RyYW5zZm9ybV9ncm91cF9mb3JfdHlwZVwiLFxuICAgIFwiY3VycmVudF91c2VyXCIsXG4gICAgXCJjdXJzb3JcIixcbiAgICBcImN5Y2xlXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJkYXlcIixcbiAgICBcImRlYWxsb2NhdGVcIixcbiAgICBcImRlY1wiLFxuICAgIFwiZGVjaW1hbFwiLFxuICAgIFwiZGVjZmxvYXRcIixcbiAgICBcImRlY2xhcmVcIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlZmluZVwiLFxuICAgIFwiZGVsZXRlXCIsXG4gICAgXCJkZW5zZV9yYW5rXCIsXG4gICAgXCJkZXJlZlwiLFxuICAgIFwiZGVzY3JpYmVcIixcbiAgICBcImRldGVybWluaXN0aWNcIixcbiAgICBcImRpc2Nvbm5lY3RcIixcbiAgICBcImRpc3RpbmN0XCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcImRyb3BcIixcbiAgICBcImR5bmFtaWNcIixcbiAgICBcImVhY2hcIixcbiAgICBcImVsZW1lbnRcIixcbiAgICBcImVsc2VcIixcbiAgICBcImVtcHR5XCIsXG4gICAgXCJlbmRcIixcbiAgICBcImVuZF9mcmFtZVwiLFxuICAgIFwiZW5kX3BhcnRpdGlvblwiLFxuICAgIFwiZW5kLWV4ZWNcIixcbiAgICBcImVxdWFsc1wiLFxuICAgIFwiZXNjYXBlXCIsXG4gICAgXCJldmVyeVwiLFxuICAgIFwiZXhjZXB0XCIsXG4gICAgXCJleGVjXCIsXG4gICAgXCJleGVjdXRlXCIsXG4gICAgXCJleGlzdHNcIixcbiAgICBcImV4cFwiLFxuICAgIFwiZXh0ZXJuYWxcIixcbiAgICBcImV4dHJhY3RcIixcbiAgICBcImZhbHNlXCIsXG4gICAgXCJmZXRjaFwiLFxuICAgIFwiZmlsdGVyXCIsXG4gICAgXCJmaXJzdF92YWx1ZVwiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImZsb29yXCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZvcmVpZ25cIixcbiAgICBcImZyYW1lX3Jvd1wiLFxuICAgIFwiZnJlZVwiLFxuICAgIFwiZnJvbVwiLFxuICAgIFwiZnVsbFwiLFxuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcImZ1c2lvblwiLFxuICAgIFwiZ2V0XCIsXG4gICAgXCJnbG9iYWxcIixcbiAgICBcImdyYW50XCIsXG4gICAgXCJncm91cFwiLFxuICAgIFwiZ3JvdXBpbmdcIixcbiAgICBcImdyb3Vwc1wiLFxuICAgIFwiaGF2aW5nXCIsXG4gICAgXCJob2xkXCIsXG4gICAgXCJob3VyXCIsXG4gICAgXCJpZGVudGl0eVwiLFxuICAgIFwiaW5cIixcbiAgICBcImluZGljYXRvclwiLFxuICAgIFwiaW5pdGlhbFwiLFxuICAgIFwiaW5uZXJcIixcbiAgICBcImlub3V0XCIsXG4gICAgXCJpbnNlbnNpdGl2ZVwiLFxuICAgIFwiaW5zZXJ0XCIsXG4gICAgXCJpbnRcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImludGVyc2VjdFwiLFxuICAgIFwiaW50ZXJzZWN0aW9uXCIsXG4gICAgXCJpbnRlcnZhbFwiLFxuICAgIFwiaW50b1wiLFxuICAgIFwiaXNcIixcbiAgICBcImpvaW5cIixcbiAgICBcImpzb25fYXJyYXlcIixcbiAgICBcImpzb25fYXJyYXlhZ2dcIixcbiAgICBcImpzb25fZXhpc3RzXCIsXG4gICAgXCJqc29uX29iamVjdFwiLFxuICAgIFwianNvbl9vYmplY3RhZ2dcIixcbiAgICBcImpzb25fcXVlcnlcIixcbiAgICBcImpzb25fdGFibGVcIixcbiAgICBcImpzb25fdGFibGVfcHJpbWl0aXZlXCIsXG4gICAgXCJqc29uX3ZhbHVlXCIsXG4gICAgXCJsYWdcIixcbiAgICBcImxhbmd1YWdlXCIsXG4gICAgXCJsYXJnZVwiLFxuICAgIFwibGFzdF92YWx1ZVwiLFxuICAgIFwibGF0ZXJhbFwiLFxuICAgIFwibGVhZFwiLFxuICAgIFwibGVhZGluZ1wiLFxuICAgIFwibGVmdFwiLFxuICAgIFwibGlrZVwiLFxuICAgIFwibGlrZV9yZWdleFwiLFxuICAgIFwibGlzdGFnZ1wiLFxuICAgIFwibG5cIixcbiAgICBcImxvY2FsXCIsXG4gICAgXCJsb2NhbHRpbWVcIixcbiAgICBcImxvY2FsdGltZXN0YW1wXCIsXG4gICAgXCJsb2dcIixcbiAgICBcImxvZzEwXCIsXG4gICAgXCJsb3dlclwiLFxuICAgIFwibWF0Y2hcIixcbiAgICBcIm1hdGNoX251bWJlclwiLFxuICAgIFwibWF0Y2hfcmVjb2duaXplXCIsXG4gICAgXCJtYXRjaGVzXCIsXG4gICAgXCJtYXhcIixcbiAgICBcIm1lbWJlclwiLFxuICAgIFwibWVyZ2VcIixcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwibWluXCIsXG4gICAgXCJtaW51dGVcIixcbiAgICBcIm1vZFwiLFxuICAgIFwibW9kaWZpZXNcIixcbiAgICBcIm1vZHVsZVwiLFxuICAgIFwibW9udGhcIixcbiAgICBcIm11bHRpc2V0XCIsXG4gICAgXCJuYXRpb25hbFwiLFxuICAgIFwibmF0dXJhbFwiLFxuICAgIFwibmNoYXJcIixcbiAgICBcIm5jbG9iXCIsXG4gICAgXCJuZXdcIixcbiAgICBcIm5vXCIsXG4gICAgXCJub25lXCIsXG4gICAgXCJub3JtYWxpemVcIixcbiAgICBcIm5vdFwiLFxuICAgIFwibnRoX3ZhbHVlXCIsXG4gICAgXCJudGlsZVwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwibnVsbGlmXCIsXG4gICAgXCJudW1lcmljXCIsXG4gICAgXCJvY3RldF9sZW5ndGhcIixcbiAgICBcIm9jY3VycmVuY2VzX3JlZ2V4XCIsXG4gICAgXCJvZlwiLFxuICAgIFwib2Zmc2V0XCIsXG4gICAgXCJvbGRcIixcbiAgICBcIm9taXRcIixcbiAgICBcIm9uXCIsXG4gICAgXCJvbmVcIixcbiAgICBcIm9ubHlcIixcbiAgICBcIm9wZW5cIixcbiAgICBcIm9yXCIsXG4gICAgXCJvcmRlclwiLFxuICAgIFwib3V0XCIsXG4gICAgXCJvdXRlclwiLFxuICAgIFwib3ZlclwiLFxuICAgIFwib3ZlcmxhcHNcIixcbiAgICBcIm92ZXJsYXlcIixcbiAgICBcInBhcmFtZXRlclwiLFxuICAgIFwicGFydGl0aW9uXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJwZXJcIixcbiAgICBcInBlcmNlbnRcIixcbiAgICBcInBlcmNlbnRfcmFua1wiLFxuICAgIFwicGVyY2VudGlsZV9jb250XCIsXG4gICAgXCJwZXJjZW50aWxlX2Rpc2NcIixcbiAgICBcInBlcmlvZFwiLFxuICAgIFwicG9ydGlvblwiLFxuICAgIFwicG9zaXRpb25cIixcbiAgICBcInBvc2l0aW9uX3JlZ2V4XCIsXG4gICAgXCJwb3dlclwiLFxuICAgIFwicHJlY2VkZXNcIixcbiAgICBcInByZWNpc2lvblwiLFxuICAgIFwicHJlcGFyZVwiLFxuICAgIFwicHJpbWFyeVwiLFxuICAgIFwicHJvY2VkdXJlXCIsXG4gICAgXCJwdGZcIixcbiAgICBcInJhbmdlXCIsXG4gICAgXCJyYW5rXCIsXG4gICAgXCJyZWFkc1wiLFxuICAgIFwicmVhbFwiLFxuICAgIFwicmVjdXJzaXZlXCIsXG4gICAgXCJyZWZcIixcbiAgICBcInJlZmVyZW5jZXNcIixcbiAgICBcInJlZmVyZW5jaW5nXCIsXG4gICAgXCJyZWdyX2F2Z3hcIixcbiAgICBcInJlZ3JfYXZneVwiLFxuICAgIFwicmVncl9jb3VudFwiLFxuICAgIFwicmVncl9pbnRlcmNlcHRcIixcbiAgICBcInJlZ3JfcjJcIixcbiAgICBcInJlZ3Jfc2xvcGVcIixcbiAgICBcInJlZ3Jfc3h4XCIsXG4gICAgXCJyZWdyX3N4eVwiLFxuICAgIFwicmVncl9zeXlcIixcbiAgICBcInJlbGVhc2VcIixcbiAgICBcInJlc3VsdFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJyZXR1cm5zXCIsXG4gICAgXCJyZXZva2VcIixcbiAgICBcInJpZ2h0XCIsXG4gICAgXCJyb2xsYmFja1wiLFxuICAgIFwicm9sbHVwXCIsXG4gICAgXCJyb3dcIixcbiAgICBcInJvd19udW1iZXJcIixcbiAgICBcInJvd3NcIixcbiAgICBcInJ1bm5pbmdcIixcbiAgICBcInNhdmVwb2ludFwiLFxuICAgIFwic2NvcGVcIixcbiAgICBcInNjcm9sbFwiLFxuICAgIFwic2VhcmNoXCIsXG4gICAgXCJzZWNvbmRcIixcbiAgICBcInNlZWtcIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic2Vuc2l0aXZlXCIsXG4gICAgXCJzZXNzaW9uX3VzZXJcIixcbiAgICBcInNldFwiLFxuICAgIFwic2hvd1wiLFxuICAgIFwic2ltaWxhclwiLFxuICAgIFwic2luXCIsXG4gICAgXCJzaW5oXCIsXG4gICAgXCJza2lwXCIsXG4gICAgXCJzbWFsbGludFwiLFxuICAgIFwic29tZVwiLFxuICAgIFwic3BlY2lmaWNcIixcbiAgICBcInNwZWNpZmljdHlwZVwiLFxuICAgIFwic3FsXCIsXG4gICAgXCJzcWxleGNlcHRpb25cIixcbiAgICBcInNxbHN0YXRlXCIsXG4gICAgXCJzcWx3YXJuaW5nXCIsXG4gICAgXCJzcXJ0XCIsXG4gICAgXCJzdGFydFwiLFxuICAgIFwic3RhdGljXCIsXG4gICAgXCJzdGRkZXZfcG9wXCIsXG4gICAgXCJzdGRkZXZfc2FtcFwiLFxuICAgIFwic3VibXVsdGlzZXRcIixcbiAgICBcInN1YnNldFwiLFxuICAgIFwic3Vic3RyaW5nXCIsXG4gICAgXCJzdWJzdHJpbmdfcmVnZXhcIixcbiAgICBcInN1Y2NlZWRzXCIsXG4gICAgXCJzdW1cIixcbiAgICBcInN5bW1ldHJpY1wiLFxuICAgIFwic3lzdGVtXCIsXG4gICAgXCJzeXN0ZW1fdGltZVwiLFxuICAgIFwic3lzdGVtX3VzZXJcIixcbiAgICBcInRhYmxlXCIsXG4gICAgXCJ0YWJsZXNhbXBsZVwiLFxuICAgIFwidGFuXCIsXG4gICAgXCJ0YW5oXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJ0aW1lXCIsXG4gICAgXCJ0aW1lc3RhbXBcIixcbiAgICBcInRpbWV6b25lX2hvdXJcIixcbiAgICBcInRpbWV6b25lX21pbnV0ZVwiLFxuICAgIFwidG9cIixcbiAgICBcInRyYWlsaW5nXCIsXG4gICAgXCJ0cmFuc2xhdGVcIixcbiAgICBcInRyYW5zbGF0ZV9yZWdleFwiLFxuICAgIFwidHJhbnNsYXRpb25cIixcbiAgICBcInRyZWF0XCIsXG4gICAgXCJ0cmlnZ2VyXCIsXG4gICAgXCJ0cmltXCIsXG4gICAgXCJ0cmltX2FycmF5XCIsXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJ0cnVuY2F0ZVwiLFxuICAgIFwidWVzY2FwZVwiLFxuICAgIFwidW5pb25cIixcbiAgICBcInVuaXF1ZVwiLFxuICAgIFwidW5rbm93blwiLFxuICAgIFwidW5uZXN0XCIsXG4gICAgXCJ1cGRhdGUgICBcIixcbiAgICBcInVwcGVyXCIsXG4gICAgXCJ1c2VyXCIsXG4gICAgXCJ1c2luZ1wiLFxuICAgIFwidmFsdWVcIixcbiAgICBcInZhbHVlc1wiLFxuICAgIFwidmFsdWVfb2ZcIixcbiAgICBcInZhcl9wb3BcIixcbiAgICBcInZhcl9zYW1wXCIsXG4gICAgXCJ2YXJiaW5hcnlcIixcbiAgICBcInZhcmNoYXJcIixcbiAgICBcInZhcnlpbmdcIixcbiAgICBcInZlcnNpb25pbmdcIixcbiAgICBcIndoZW5cIixcbiAgICBcIndoZW5ldmVyXCIsXG4gICAgXCJ3aGVyZVwiLFxuICAgIFwid2lkdGhfYnVja2V0XCIsXG4gICAgXCJ3aW5kb3dcIixcbiAgICBcIndpdGhcIixcbiAgICBcIndpdGhpblwiLFxuICAgIFwid2l0aG91dFwiLFxuICAgIFwieWVhclwiLFxuICBdO1xuXG4gIC8vIHRoZXNlIGFyZSByZXNlcnZlZCB3b3JkcyB3ZSBoYXZlIGlkZW50aWZpZWQgdG8gYmUgZnVuY3Rpb25zXG4gIC8vIGFuZCBzaG91bGQgb25seSBiZSBoaWdobGlnaHRlZCBpbiBhIGRpc3BhdGNoLWxpa2UgY29udGV4dFxuICAvLyBpZSwgYXJyYXlfYWdnKC4uLiksIGV0Yy5cbiAgY29uc3QgUkVTRVJWRURfRlVOQ1RJT05TID0gW1xuICAgIFwiYWJzXCIsXG4gICAgXCJhY29zXCIsXG4gICAgXCJhcnJheV9hZ2dcIixcbiAgICBcImFzaW5cIixcbiAgICBcImF0YW5cIixcbiAgICBcImF2Z1wiLFxuICAgIFwiY2FzdFwiLFxuICAgIFwiY2VpbFwiLFxuICAgIFwiY2VpbGluZ1wiLFxuICAgIFwiY29hbGVzY2VcIixcbiAgICBcImNvcnJcIixcbiAgICBcImNvc1wiLFxuICAgIFwiY29zaFwiLFxuICAgIFwiY291bnRcIixcbiAgICBcImNvdmFyX3BvcFwiLFxuICAgIFwiY292YXJfc2FtcFwiLFxuICAgIFwiY3VtZV9kaXN0XCIsXG4gICAgXCJkZW5zZV9yYW5rXCIsXG4gICAgXCJkZXJlZlwiLFxuICAgIFwiZWxlbWVudFwiLFxuICAgIFwiZXhwXCIsXG4gICAgXCJleHRyYWN0XCIsXG4gICAgXCJmaXJzdF92YWx1ZVwiLFxuICAgIFwiZmxvb3JcIixcbiAgICBcImpzb25fYXJyYXlcIixcbiAgICBcImpzb25fYXJyYXlhZ2dcIixcbiAgICBcImpzb25fZXhpc3RzXCIsXG4gICAgXCJqc29uX29iamVjdFwiLFxuICAgIFwianNvbl9vYmplY3RhZ2dcIixcbiAgICBcImpzb25fcXVlcnlcIixcbiAgICBcImpzb25fdGFibGVcIixcbiAgICBcImpzb25fdGFibGVfcHJpbWl0aXZlXCIsXG4gICAgXCJqc29uX3ZhbHVlXCIsXG4gICAgXCJsYWdcIixcbiAgICBcImxhc3RfdmFsdWVcIixcbiAgICBcImxlYWRcIixcbiAgICBcImxpc3RhZ2dcIixcbiAgICBcImxuXCIsXG4gICAgXCJsb2dcIixcbiAgICBcImxvZzEwXCIsXG4gICAgXCJsb3dlclwiLFxuICAgIFwibWF4XCIsXG4gICAgXCJtaW5cIixcbiAgICBcIm1vZFwiLFxuICAgIFwibnRoX3ZhbHVlXCIsXG4gICAgXCJudGlsZVwiLFxuICAgIFwibnVsbGlmXCIsXG4gICAgXCJwZXJjZW50X3JhbmtcIixcbiAgICBcInBlcmNlbnRpbGVfY29udFwiLFxuICAgIFwicGVyY2VudGlsZV9kaXNjXCIsXG4gICAgXCJwb3NpdGlvblwiLFxuICAgIFwicG9zaXRpb25fcmVnZXhcIixcbiAgICBcInBvd2VyXCIsXG4gICAgXCJyYW5rXCIsXG4gICAgXCJyZWdyX2F2Z3hcIixcbiAgICBcInJlZ3JfYXZneVwiLFxuICAgIFwicmVncl9jb3VudFwiLFxuICAgIFwicmVncl9pbnRlcmNlcHRcIixcbiAgICBcInJlZ3JfcjJcIixcbiAgICBcInJlZ3Jfc2xvcGVcIixcbiAgICBcInJlZ3Jfc3h4XCIsXG4gICAgXCJyZWdyX3N4eVwiLFxuICAgIFwicmVncl9zeXlcIixcbiAgICBcInJvd19udW1iZXJcIixcbiAgICBcInNpblwiLFxuICAgIFwic2luaFwiLFxuICAgIFwic3FydFwiLFxuICAgIFwic3RkZGV2X3BvcFwiLFxuICAgIFwic3RkZGV2X3NhbXBcIixcbiAgICBcInN1YnN0cmluZ1wiLFxuICAgIFwic3Vic3RyaW5nX3JlZ2V4XCIsXG4gICAgXCJzdW1cIixcbiAgICBcInRhblwiLFxuICAgIFwidGFuaFwiLFxuICAgIFwidHJhbnNsYXRlXCIsXG4gICAgXCJ0cmFuc2xhdGVfcmVnZXhcIixcbiAgICBcInRyZWF0XCIsXG4gICAgXCJ0cmltXCIsXG4gICAgXCJ0cmltX2FycmF5XCIsXG4gICAgXCJ1bm5lc3RcIixcbiAgICBcInVwcGVyXCIsXG4gICAgXCJ2YWx1ZV9vZlwiLFxuICAgIFwidmFyX3BvcFwiLFxuICAgIFwidmFyX3NhbXBcIixcbiAgICBcIndpZHRoX2J1Y2tldFwiLFxuICBdO1xuXG4gIC8vIHRoZXNlIGZ1bmN0aW9ucyBjYW5cbiAgY29uc3QgUE9TU0lCTEVfV0lUSE9VVF9QQVJFTlMgPSBbXG4gICAgXCJjdXJyZW50X2NhdGFsb2dcIixcbiAgICBcImN1cnJlbnRfZGF0ZVwiLFxuICAgIFwiY3VycmVudF9kZWZhdWx0X3RyYW5zZm9ybV9ncm91cFwiLFxuICAgIFwiY3VycmVudF9wYXRoXCIsXG4gICAgXCJjdXJyZW50X3JvbGVcIixcbiAgICBcImN1cnJlbnRfc2NoZW1hXCIsXG4gICAgXCJjdXJyZW50X3RyYW5zZm9ybV9ncm91cF9mb3JfdHlwZVwiLFxuICAgIFwiY3VycmVudF91c2VyXCIsXG4gICAgXCJzZXNzaW9uX3VzZXJcIixcbiAgICBcInN5c3RlbV90aW1lXCIsXG4gICAgXCJzeXN0ZW1fdXNlclwiLFxuICAgIFwiY3VycmVudF90aW1lXCIsXG4gICAgXCJsb2NhbHRpbWVcIixcbiAgICBcImN1cnJlbnRfdGltZXN0YW1wXCIsXG4gICAgXCJsb2NhbHRpbWVzdGFtcFwiXG4gIF07XG5cbiAgLy8gdGhvc2UgZXhpc3QgdG8gYm9vc3QgcmVsZXZhbmNlIG1ha2luZyB0aGVzZSB2ZXJ5XG4gIC8vIFwiU1FMIGxpa2VcIiBrZXl3b3JkIGNvbWJvcyB3b3J0aCArMSBleHRyYSByZWxldmFuY2VcbiAgY29uc3QgQ09NQk9TID0gW1xuICAgIFwiY3JlYXRlIHRhYmxlXCIsXG4gICAgXCJpbnNlcnQgaW50b1wiLFxuICAgIFwicHJpbWFyeSBrZXlcIixcbiAgICBcImZvcmVpZ24ga2V5XCIsXG4gICAgXCJub3QgbnVsbFwiLFxuICAgIFwiYWx0ZXIgdGFibGVcIixcbiAgICBcImFkZCBjb25zdHJhaW50XCIsXG4gICAgXCJncm91cGluZyBzZXRzXCIsXG4gICAgXCJvbiBvdmVyZmxvd1wiLFxuICAgIFwiY2hhcmFjdGVyIHNldFwiLFxuICAgIFwicmVzcGVjdCBudWxsc1wiLFxuICAgIFwiaWdub3JlIG51bGxzXCIsXG4gICAgXCJudWxscyBmaXJzdFwiLFxuICAgIFwibnVsbHMgbGFzdFwiLFxuICAgIFwiZGVwdGggZmlyc3RcIixcbiAgICBcImJyZWFkdGggZmlyc3RcIlxuICBdO1xuXG4gIGNvbnN0IEZVTkNUSU9OUyA9IFJFU0VSVkVEX0ZVTkNUSU9OUztcblxuICBjb25zdCBLRVlXT1JEUyA9IFsuLi5SRVNFUlZFRF9XT1JEUywgLi4uTk9OX1JFU0VSVkVEX1dPUkRTXS5maWx0ZXIoKGtleXdvcmQpID0+IHtcbiAgICByZXR1cm4gIVJFU0VSVkVEX0ZVTkNUSU9OUy5pbmNsdWRlcyhrZXl3b3JkKTtcbiAgfSk7XG5cbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlXCIsXG4gICAgYmVnaW46IC9AW2EtejAtOV0rLyxcbiAgfTtcblxuICBjb25zdCBPUEVSQVRPUiA9IHtcbiAgICBjbGFzc05hbWU6IFwib3BlcmF0b3JcIixcbiAgICBiZWdpbjogL1stKyovPSVefl18JiY/fFxcfFxcfD98IT0/fDwoPzo9Pj98PHw+KT98Pls+PV0/LyxcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fQ0FMTCA9IHtcbiAgICBiZWdpbjogY29uY2F0KC9cXGIvLCBlaXRoZXIoLi4uRlVOQ1RJT05TKSwgL1xccypcXCgvKSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46IEZVTkNUSU9OU1xuICAgIH1cbiAgfTtcblxuICAvLyBrZXl3b3JkcyB3aXRoIGxlc3MgdGhhbiAzIGxldHRlcnMgYXJlIHJlZHVjZWQgaW4gcmVsZXZhbmN5XG4gIGZ1bmN0aW9uIHJlZHVjZVJlbGV2YW5jeShsaXN0LCB7ZXhjZXB0aW9ucywgd2hlbn0gPSB7fSkge1xuICAgIGNvbnN0IHF1YWxpZnlGbiA9IHdoZW47XG4gICAgZXhjZXB0aW9ucyA9IGV4Y2VwdGlvbnMgfHwgW107XG4gICAgcmV0dXJuIGxpc3QubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5tYXRjaCgvXFx8XFxkKyQvKSB8fCBleGNlcHRpb25zLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSBlbHNlIGlmIChxdWFsaWZ5Rm4oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGAke2l0ZW19fDBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTUUwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgLy8gZG9lcyBub3QgaW5jbHVkZSB7fSBvciBIVE1MIHRhZ3MgYDwvYFxuICAgIGlsbGVnYWw6IC9be31dfDxcXC8vLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1xcYltcXHdcXC5dKy8sXG4gICAgICBrZXl3b3JkOlxuICAgICAgICByZWR1Y2VSZWxldmFuY3koS0VZV09SRFMsIHsgd2hlbjogKHgpID0+IHgubGVuZ3RoIDwgMyB9KSxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgdHlwZTogVFlQRVMsXG4gICAgICBidWlsdF9pbjogUE9TU0lCTEVfV0lUSE9VVF9QQVJFTlNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBlaXRoZXIoLi4uQ09NQk9TKSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAkcGF0dGVybjogL1tcXHdcXC5dKy8sXG4gICAgICAgICAga2V5d29yZDogS0VZV09SRFMuY29uY2F0KENPTUJPUyksXG4gICAgICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICAgICAgdHlwZTogVFlQRVNcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJ0eXBlXCIsXG4gICAgICAgIGJlZ2luOiBlaXRoZXIoLi4uTVVMVElfV09SRF9UWVBFUylcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9DQUxMLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICBRVU9URURfSURFTlRJRklFUixcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBDT01NRU5UX01PREUsXG4gICAgICBPUEVSQVRPUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzcWw7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogU3RhblxuRGVzY3JpcHRpb246IFRoZSBTdGFuIHByb2JhYmlsaXN0aWMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbkF1dGhvcjogSmVmZnJleSBCLiBBcm5vbGQgPGplZmZyZXkuYXJub2xkQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHA6Ly9tYy1zdGFuLm9yZy9cbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG5mdW5jdGlvbiBzdGFuKGhsanMpIHtcbiAgLy8gdmFyaWFibGUgbmFtZXMgY2Fubm90IGNvbmZsaWN0IHdpdGggYmxvY2sgaWRlbnRpZmllcnNcbiAgY29uc3QgQkxPQ0tTID0gW1xuICAgICdmdW5jdGlvbnMnLFxuICAgICdtb2RlbCcsXG4gICAgJ2RhdGEnLFxuICAgICdwYXJhbWV0ZXJzJyxcbiAgICAncXVhbnRpdGllcycsXG4gICAgJ3RyYW5zZm9ybWVkJyxcbiAgICAnZ2VuZXJhdGVkJ1xuICBdO1xuICBjb25zdCBTVEFURU1FTlRTID0gW1xuICAgICdmb3InLFxuICAgICdpbicsXG4gICAgJ2lmJyxcbiAgICAnZWxzZScsXG4gICAgJ3doaWxlJyxcbiAgICAnYnJlYWsnLFxuICAgICdjb250aW51ZScsXG4gICAgJ3JldHVybidcbiAgXTtcbiAgY29uc3QgU1BFQ0lBTF9GVU5DVElPTlMgPSBbXG4gICAgJ3ByaW50JyxcbiAgICAncmVqZWN0JyxcbiAgICAnaW5jcmVtZW50X2xvZ19wcm9ifDEwJyxcbiAgICAnaW50ZWdyYXRlX29kZXwxMCcsXG4gICAgJ2ludGVncmF0ZV9vZGVfcms0NXwxMCcsXG4gICAgJ2ludGVncmF0ZV9vZGVfYmRmfDEwJyxcbiAgICAnYWxnZWJyYV9zb2x2ZXInXG4gIF07XG4gIGNvbnN0IFZBUl9UWVBFUyA9IFtcbiAgICAnaW50JyxcbiAgICAncmVhbCcsXG4gICAgJ3ZlY3RvcicsXG4gICAgJ29yZGVyZWQnLFxuICAgICdwb3NpdGl2ZV9vcmRlcmVkJyxcbiAgICAnc2ltcGxleCcsXG4gICAgJ3VuaXRfdmVjdG9yJyxcbiAgICAncm93X3ZlY3RvcicsXG4gICAgJ21hdHJpeCcsXG4gICAgJ2Nob2xlc2t5X2ZhY3Rvcl9jb3JyfDEwJyxcbiAgICAnY2hvbGVza3lfZmFjdG9yX2NvdnwxMCcsXG4gICAgJ2NvcnJfbWF0cml4fDEwJyxcbiAgICAnY292X21hdHJpeHwxMCcsXG4gICAgJ3ZvaWQnXG4gIF07XG4gIGNvbnN0IEZVTkNUSU9OUyA9IFtcbiAgICAnUGhpJyxcbiAgICAnUGhpX2FwcHJveCcsXG4gICAgJ2FicycsXG4gICAgJ2Fjb3MnLFxuICAgICdhY29zaCcsXG4gICAgJ2FsZ2VicmFfc29sdmVyJyxcbiAgICAnYXBwZW5kX2FycmF5JyxcbiAgICAnYXBwZW5kX2NvbCcsXG4gICAgJ2FwcGVuZF9yb3cnLFxuICAgICdhc2luJyxcbiAgICAnYXNpbmgnLFxuICAgICdhdGFuJyxcbiAgICAnYXRhbjInLFxuICAgICdhdGFuaCcsXG4gICAgJ2Jlcm5vdWxsaV9jZGYnLFxuICAgICdiZXJub3VsbGlfbGNjZGYnLFxuICAgICdiZXJub3VsbGlfbGNkZicsXG4gICAgJ2Jlcm5vdWxsaV9sb2dpdF9scG1mJyxcbiAgICAnYmVybm91bGxpX2xvZ2l0X3JuZycsXG4gICAgJ2Jlcm5vdWxsaV9scG1mJyxcbiAgICAnYmVybm91bGxpX3JuZycsXG4gICAgJ2Jlc3NlbF9maXJzdF9raW5kJyxcbiAgICAnYmVzc2VsX3NlY29uZF9raW5kJyxcbiAgICAnYmV0YV9iaW5vbWlhbF9jZGYnLFxuICAgICdiZXRhX2Jpbm9taWFsX2xjY2RmJyxcbiAgICAnYmV0YV9iaW5vbWlhbF9sY2RmJyxcbiAgICAnYmV0YV9iaW5vbWlhbF9scG1mJyxcbiAgICAnYmV0YV9iaW5vbWlhbF9ybmcnLFxuICAgICdiZXRhX2NkZicsXG4gICAgJ2JldGFfbGNjZGYnLFxuICAgICdiZXRhX2xjZGYnLFxuICAgICdiZXRhX2xwZGYnLFxuICAgICdiZXRhX3JuZycsXG4gICAgJ2JpbmFyeV9sb2dfbG9zcycsXG4gICAgJ2Jpbm9taWFsX2NkZicsXG4gICAgJ2Jpbm9taWFsX2NvZWZmaWNpZW50X2xvZycsXG4gICAgJ2Jpbm9taWFsX2xjY2RmJyxcbiAgICAnYmlub21pYWxfbGNkZicsXG4gICAgJ2Jpbm9taWFsX2xvZ2l0X2xwbWYnLFxuICAgICdiaW5vbWlhbF9scG1mJyxcbiAgICAnYmlub21pYWxfcm5nJyxcbiAgICAnYmxvY2snLFxuICAgICdjYXRlZ29yaWNhbF9sb2dpdF9scG1mJyxcbiAgICAnY2F0ZWdvcmljYWxfbG9naXRfcm5nJyxcbiAgICAnY2F0ZWdvcmljYWxfbHBtZicsXG4gICAgJ2NhdGVnb3JpY2FsX3JuZycsXG4gICAgJ2NhdWNoeV9jZGYnLFxuICAgICdjYXVjaHlfbGNjZGYnLFxuICAgICdjYXVjaHlfbGNkZicsXG4gICAgJ2NhdWNoeV9scGRmJyxcbiAgICAnY2F1Y2h5X3JuZycsXG4gICAgJ2NicnQnLFxuICAgICdjZWlsJyxcbiAgICAnY2hpX3NxdWFyZV9jZGYnLFxuICAgICdjaGlfc3F1YXJlX2xjY2RmJyxcbiAgICAnY2hpX3NxdWFyZV9sY2RmJyxcbiAgICAnY2hpX3NxdWFyZV9scGRmJyxcbiAgICAnY2hpX3NxdWFyZV9ybmcnLFxuICAgICdjaG9sZXNreV9kZWNvbXBvc2UnLFxuICAgICdjaG9vc2UnLFxuICAgICdjb2wnLFxuICAgICdjb2xzJyxcbiAgICAnY29sdW1uc19kb3RfcHJvZHVjdCcsXG4gICAgJ2NvbHVtbnNfZG90X3NlbGYnLFxuICAgICdjb3MnLFxuICAgICdjb3NoJyxcbiAgICAnY292X2V4cF9xdWFkJyxcbiAgICAnY3Jvc3Nwcm9kJyxcbiAgICAnY3NyX2V4dHJhY3RfdScsXG4gICAgJ2Nzcl9leHRyYWN0X3YnLFxuICAgICdjc3JfZXh0cmFjdF93JyxcbiAgICAnY3NyX21hdHJpeF90aW1lc192ZWN0b3InLFxuICAgICdjc3JfdG9fZGVuc2VfbWF0cml4JyxcbiAgICAnY3VtdWxhdGl2ZV9zdW0nLFxuICAgICdkZXRlcm1pbmFudCcsXG4gICAgJ2RpYWdfbWF0cml4JyxcbiAgICAnZGlhZ19wb3N0X211bHRpcGx5JyxcbiAgICAnZGlhZ19wcmVfbXVsdGlwbHknLFxuICAgICdkaWFnb25hbCcsXG4gICAgJ2RpZ2FtbWEnLFxuICAgICdkaW1zJyxcbiAgICAnZGlyaWNobGV0X2xwZGYnLFxuICAgICdkaXJpY2hsZXRfcm5nJyxcbiAgICAnZGlzdGFuY2UnLFxuICAgICdkb3RfcHJvZHVjdCcsXG4gICAgJ2RvdF9zZWxmJyxcbiAgICAnZG91YmxlX2V4cG9uZW50aWFsX2NkZicsXG4gICAgJ2RvdWJsZV9leHBvbmVudGlhbF9sY2NkZicsXG4gICAgJ2RvdWJsZV9leHBvbmVudGlhbF9sY2RmJyxcbiAgICAnZG91YmxlX2V4cG9uZW50aWFsX2xwZGYnLFxuICAgICdkb3VibGVfZXhwb25lbnRpYWxfcm5nJyxcbiAgICAnZScsXG4gICAgJ2VpZ2VudmFsdWVzX3N5bScsXG4gICAgJ2VpZ2VudmVjdG9yc19zeW0nLFxuICAgICdlcmYnLFxuICAgICdlcmZjJyxcbiAgICAnZXhwJyxcbiAgICAnZXhwMicsXG4gICAgJ2V4cF9tb2Rfbm9ybWFsX2NkZicsXG4gICAgJ2V4cF9tb2Rfbm9ybWFsX2xjY2RmJyxcbiAgICAnZXhwX21vZF9ub3JtYWxfbGNkZicsXG4gICAgJ2V4cF9tb2Rfbm9ybWFsX2xwZGYnLFxuICAgICdleHBfbW9kX25vcm1hbF9ybmcnLFxuICAgICdleHBtMScsXG4gICAgJ2V4cG9uZW50aWFsX2NkZicsXG4gICAgJ2V4cG9uZW50aWFsX2xjY2RmJyxcbiAgICAnZXhwb25lbnRpYWxfbGNkZicsXG4gICAgJ2V4cG9uZW50aWFsX2xwZGYnLFxuICAgICdleHBvbmVudGlhbF9ybmcnLFxuICAgICdmYWJzJyxcbiAgICAnZmFsbGluZ19mYWN0b3JpYWwnLFxuICAgICdmZGltJyxcbiAgICAnZmxvb3InLFxuICAgICdmbWEnLFxuICAgICdmbWF4JyxcbiAgICAnZm1pbicsXG4gICAgJ2Ztb2QnLFxuICAgICdmcmVjaGV0X2NkZicsXG4gICAgJ2ZyZWNoZXRfbGNjZGYnLFxuICAgICdmcmVjaGV0X2xjZGYnLFxuICAgICdmcmVjaGV0X2xwZGYnLFxuICAgICdmcmVjaGV0X3JuZycsXG4gICAgJ2dhbW1hX2NkZicsXG4gICAgJ2dhbW1hX2xjY2RmJyxcbiAgICAnZ2FtbWFfbGNkZicsXG4gICAgJ2dhbW1hX2xwZGYnLFxuICAgICdnYW1tYV9wJyxcbiAgICAnZ2FtbWFfcScsXG4gICAgJ2dhbW1hX3JuZycsXG4gICAgJ2dhdXNzaWFuX2RsbV9vYnNfbHBkZicsXG4gICAgJ2dldF9scCcsXG4gICAgJ2d1bWJlbF9jZGYnLFxuICAgICdndW1iZWxfbGNjZGYnLFxuICAgICdndW1iZWxfbGNkZicsXG4gICAgJ2d1bWJlbF9scGRmJyxcbiAgICAnZ3VtYmVsX3JuZycsXG4gICAgJ2hlYWQnLFxuICAgICdoeXBlcmdlb21ldHJpY19scG1mJyxcbiAgICAnaHlwZXJnZW9tZXRyaWNfcm5nJyxcbiAgICAnaHlwb3QnLFxuICAgICdpbmNfYmV0YScsXG4gICAgJ2ludF9zdGVwJyxcbiAgICAnaW50ZWdyYXRlX29kZScsXG4gICAgJ2ludGVncmF0ZV9vZGVfYmRmJyxcbiAgICAnaW50ZWdyYXRlX29kZV9yazQ1JyxcbiAgICAnaW52JyxcbiAgICAnaW52X1BoaScsXG4gICAgJ2ludl9jaGlfc3F1YXJlX2NkZicsXG4gICAgJ2ludl9jaGlfc3F1YXJlX2xjY2RmJyxcbiAgICAnaW52X2NoaV9zcXVhcmVfbGNkZicsXG4gICAgJ2ludl9jaGlfc3F1YXJlX2xwZGYnLFxuICAgICdpbnZfY2hpX3NxdWFyZV9ybmcnLFxuICAgICdpbnZfY2xvZ2xvZycsXG4gICAgJ2ludl9nYW1tYV9jZGYnLFxuICAgICdpbnZfZ2FtbWFfbGNjZGYnLFxuICAgICdpbnZfZ2FtbWFfbGNkZicsXG4gICAgJ2ludl9nYW1tYV9scGRmJyxcbiAgICAnaW52X2dhbW1hX3JuZycsXG4gICAgJ2ludl9sb2dpdCcsXG4gICAgJ2ludl9zcXJ0JyxcbiAgICAnaW52X3NxdWFyZScsXG4gICAgJ2ludl93aXNoYXJ0X2xwZGYnLFxuICAgICdpbnZfd2lzaGFydF9ybmcnLFxuICAgICdpbnZlcnNlJyxcbiAgICAnaW52ZXJzZV9zcGQnLFxuICAgICdpc19pbmYnLFxuICAgICdpc19uYW4nLFxuICAgICdsYmV0YScsXG4gICAgJ2xjaG9vc2UnLFxuICAgICdsZ2FtbWEnLFxuICAgICdsa2pfY29ycl9jaG9sZXNreV9scGRmJyxcbiAgICAnbGtqX2NvcnJfY2hvbGVza3lfcm5nJyxcbiAgICAnbGtqX2NvcnJfbHBkZicsXG4gICAgJ2xral9jb3JyX3JuZycsXG4gICAgJ2xtZ2FtbWEnLFxuICAgICdsbXVsdGlwbHknLFxuICAgICdsb2cnLFxuICAgICdsb2cxMCcsXG4gICAgJ2xvZzFtJyxcbiAgICAnbG9nMW1fZXhwJyxcbiAgICAnbG9nMW1faW52X2xvZ2l0JyxcbiAgICAnbG9nMXAnLFxuICAgICdsb2cxcF9leHAnLFxuICAgICdsb2cyJyxcbiAgICAnbG9nX2RldGVybWluYW50JyxcbiAgICAnbG9nX2RpZmZfZXhwJyxcbiAgICAnbG9nX2ZhbGxpbmdfZmFjdG9yaWFsJyxcbiAgICAnbG9nX2ludl9sb2dpdCcsXG4gICAgJ2xvZ19taXgnLFxuICAgICdsb2dfcmlzaW5nX2ZhY3RvcmlhbCcsXG4gICAgJ2xvZ19zb2Z0bWF4JyxcbiAgICAnbG9nX3N1bV9leHAnLFxuICAgICdsb2dpc3RpY19jZGYnLFxuICAgICdsb2dpc3RpY19sY2NkZicsXG4gICAgJ2xvZ2lzdGljX2xjZGYnLFxuICAgICdsb2dpc3RpY19scGRmJyxcbiAgICAnbG9naXN0aWNfcm5nJyxcbiAgICAnbG9naXQnLFxuICAgICdsb2dub3JtYWxfY2RmJyxcbiAgICAnbG9nbm9ybWFsX2xjY2RmJyxcbiAgICAnbG9nbm9ybWFsX2xjZGYnLFxuICAgICdsb2dub3JtYWxfbHBkZicsXG4gICAgJ2xvZ25vcm1hbF9ybmcnLFxuICAgICdtYWNoaW5lX3ByZWNpc2lvbicsXG4gICAgJ21hdHJpeF9leHAnLFxuICAgICdtYXgnLFxuICAgICdtZGl2aWRlX2xlZnRfc3BkJyxcbiAgICAnbWRpdmlkZV9sZWZ0X3RyaV9sb3cnLFxuICAgICdtZGl2aWRlX3JpZ2h0X3NwZCcsXG4gICAgJ21kaXZpZGVfcmlnaHRfdHJpX2xvdycsXG4gICAgJ21lYW4nLFxuICAgICdtaW4nLFxuICAgICdtb2RpZmllZF9iZXNzZWxfZmlyc3Rfa2luZCcsXG4gICAgJ21vZGlmaWVkX2Jlc3NlbF9zZWNvbmRfa2luZCcsXG4gICAgJ211bHRpX2dwX2Nob2xlc2t5X2xwZGYnLFxuICAgICdtdWx0aV9ncF9scGRmJyxcbiAgICAnbXVsdGlfbm9ybWFsX2Nob2xlc2t5X2xwZGYnLFxuICAgICdtdWx0aV9ub3JtYWxfY2hvbGVza3lfcm5nJyxcbiAgICAnbXVsdGlfbm9ybWFsX2xwZGYnLFxuICAgICdtdWx0aV9ub3JtYWxfcHJlY19scGRmJyxcbiAgICAnbXVsdGlfbm9ybWFsX3JuZycsXG4gICAgJ211bHRpX3N0dWRlbnRfdF9scGRmJyxcbiAgICAnbXVsdGlfc3R1ZGVudF90X3JuZycsXG4gICAgJ211bHRpbm9taWFsX2xwbWYnLFxuICAgICdtdWx0aW5vbWlhbF9ybmcnLFxuICAgICdtdWx0aXBseV9sb2cnLFxuICAgICdtdWx0aXBseV9sb3dlcl90cmlfc2VsZl90cmFuc3Bvc2UnLFxuICAgICduZWdfYmlub21pYWxfMl9jZGYnLFxuICAgICduZWdfYmlub21pYWxfMl9sY2NkZicsXG4gICAgJ25lZ19iaW5vbWlhbF8yX2xjZGYnLFxuICAgICduZWdfYmlub21pYWxfMl9sb2dfbHBtZicsXG4gICAgJ25lZ19iaW5vbWlhbF8yX2xvZ19ybmcnLFxuICAgICduZWdfYmlub21pYWxfMl9scG1mJyxcbiAgICAnbmVnX2Jpbm9taWFsXzJfcm5nJyxcbiAgICAnbmVnX2Jpbm9taWFsX2NkZicsXG4gICAgJ25lZ19iaW5vbWlhbF9sY2NkZicsXG4gICAgJ25lZ19iaW5vbWlhbF9sY2RmJyxcbiAgICAnbmVnX2Jpbm9taWFsX2xwbWYnLFxuICAgICduZWdfYmlub21pYWxfcm5nJyxcbiAgICAnbmVnYXRpdmVfaW5maW5pdHknLFxuICAgICdub3JtYWxfY2RmJyxcbiAgICAnbm9ybWFsX2xjY2RmJyxcbiAgICAnbm9ybWFsX2xjZGYnLFxuICAgICdub3JtYWxfbHBkZicsXG4gICAgJ25vcm1hbF9ybmcnLFxuICAgICdub3RfYV9udW1iZXInLFxuICAgICdudW1fZWxlbWVudHMnLFxuICAgICdvcmRlcmVkX2xvZ2lzdGljX2xwbWYnLFxuICAgICdvcmRlcmVkX2xvZ2lzdGljX3JuZycsXG4gICAgJ293ZW5zX3QnLFxuICAgICdwYXJldG9fY2RmJyxcbiAgICAncGFyZXRvX2xjY2RmJyxcbiAgICAncGFyZXRvX2xjZGYnLFxuICAgICdwYXJldG9fbHBkZicsXG4gICAgJ3BhcmV0b19ybmcnLFxuICAgICdwYXJldG9fdHlwZV8yX2NkZicsXG4gICAgJ3BhcmV0b190eXBlXzJfbGNjZGYnLFxuICAgICdwYXJldG9fdHlwZV8yX2xjZGYnLFxuICAgICdwYXJldG9fdHlwZV8yX2xwZGYnLFxuICAgICdwYXJldG9fdHlwZV8yX3JuZycsXG4gICAgJ3BpJyxcbiAgICAncG9pc3Nvbl9jZGYnLFxuICAgICdwb2lzc29uX2xjY2RmJyxcbiAgICAncG9pc3Nvbl9sY2RmJyxcbiAgICAncG9pc3Nvbl9sb2dfbHBtZicsXG4gICAgJ3BvaXNzb25fbG9nX3JuZycsXG4gICAgJ3BvaXNzb25fbHBtZicsXG4gICAgJ3BvaXNzb25fcm5nJyxcbiAgICAncG9zaXRpdmVfaW5maW5pdHknLFxuICAgICdwb3cnLFxuICAgICdwcmludCcsXG4gICAgJ3Byb2QnLFxuICAgICdxcl9RJyxcbiAgICAncXJfUicsXG4gICAgJ3F1YWRfZm9ybScsXG4gICAgJ3F1YWRfZm9ybV9kaWFnJyxcbiAgICAncXVhZF9mb3JtX3N5bScsXG4gICAgJ3JhbmsnLFxuICAgICdyYXlsZWlnaF9jZGYnLFxuICAgICdyYXlsZWlnaF9sY2NkZicsXG4gICAgJ3JheWxlaWdoX2xjZGYnLFxuICAgICdyYXlsZWlnaF9scGRmJyxcbiAgICAncmF5bGVpZ2hfcm5nJyxcbiAgICAncmVqZWN0JyxcbiAgICAncmVwX2FycmF5JyxcbiAgICAncmVwX21hdHJpeCcsXG4gICAgJ3JlcF9yb3dfdmVjdG9yJyxcbiAgICAncmVwX3ZlY3RvcicsXG4gICAgJ3Jpc2luZ19mYWN0b3JpYWwnLFxuICAgICdyb3VuZCcsXG4gICAgJ3JvdycsXG4gICAgJ3Jvd3MnLFxuICAgICdyb3dzX2RvdF9wcm9kdWN0JyxcbiAgICAncm93c19kb3Rfc2VsZicsXG4gICAgJ3NjYWxlZF9pbnZfY2hpX3NxdWFyZV9jZGYnLFxuICAgICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbGNjZGYnLFxuICAgICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbGNkZicsXG4gICAgJ3NjYWxlZF9pbnZfY2hpX3NxdWFyZV9scGRmJyxcbiAgICAnc2NhbGVkX2ludl9jaGlfc3F1YXJlX3JuZycsXG4gICAgJ3NkJyxcbiAgICAnc2VnbWVudCcsXG4gICAgJ3NpbicsXG4gICAgJ3Npbmd1bGFyX3ZhbHVlcycsXG4gICAgJ3NpbmgnLFxuICAgICdzaXplJyxcbiAgICAnc2tld19ub3JtYWxfY2RmJyxcbiAgICAnc2tld19ub3JtYWxfbGNjZGYnLFxuICAgICdza2V3X25vcm1hbF9sY2RmJyxcbiAgICAnc2tld19ub3JtYWxfbHBkZicsXG4gICAgJ3NrZXdfbm9ybWFsX3JuZycsXG4gICAgJ3NvZnRtYXgnLFxuICAgICdzb3J0X2FzYycsXG4gICAgJ3NvcnRfZGVzYycsXG4gICAgJ3NvcnRfaW5kaWNlc19hc2MnLFxuICAgICdzb3J0X2luZGljZXNfZGVzYycsXG4gICAgJ3NxcnQnLFxuICAgICdzcXJ0MicsXG4gICAgJ3NxdWFyZScsXG4gICAgJ3NxdWFyZWRfZGlzdGFuY2UnLFxuICAgICdzdGVwJyxcbiAgICAnc3R1ZGVudF90X2NkZicsXG4gICAgJ3N0dWRlbnRfdF9sY2NkZicsXG4gICAgJ3N0dWRlbnRfdF9sY2RmJyxcbiAgICAnc3R1ZGVudF90X2xwZGYnLFxuICAgICdzdHVkZW50X3Rfcm5nJyxcbiAgICAnc3ViX2NvbCcsXG4gICAgJ3N1Yl9yb3cnLFxuICAgICdzdW0nLFxuICAgICd0YWlsJyxcbiAgICAndGFuJyxcbiAgICAndGFuaCcsXG4gICAgJ3RhcmdldCcsXG4gICAgJ3Rjcm9zc3Byb2QnLFxuICAgICd0Z2FtbWEnLFxuICAgICd0b19hcnJheV8xZCcsXG4gICAgJ3RvX2FycmF5XzJkJyxcbiAgICAndG9fbWF0cml4JyxcbiAgICAndG9fcm93X3ZlY3RvcicsXG4gICAgJ3RvX3ZlY3RvcicsXG4gICAgJ3RyYWNlJyxcbiAgICAndHJhY2VfZ2VuX3F1YWRfZm9ybScsXG4gICAgJ3RyYWNlX3F1YWRfZm9ybScsXG4gICAgJ3RyaWdhbW1hJyxcbiAgICAndHJ1bmMnLFxuICAgICd1bmlmb3JtX2NkZicsXG4gICAgJ3VuaWZvcm1fbGNjZGYnLFxuICAgICd1bmlmb3JtX2xjZGYnLFxuICAgICd1bmlmb3JtX2xwZGYnLFxuICAgICd1bmlmb3JtX3JuZycsXG4gICAgJ3ZhcmlhbmNlJyxcbiAgICAndm9uX21pc2VzX2xwZGYnLFxuICAgICd2b25fbWlzZXNfcm5nJyxcbiAgICAnd2VpYnVsbF9jZGYnLFxuICAgICd3ZWlidWxsX2xjY2RmJyxcbiAgICAnd2VpYnVsbF9sY2RmJyxcbiAgICAnd2VpYnVsbF9scGRmJyxcbiAgICAnd2VpYnVsbF9ybmcnLFxuICAgICd3aWVuZXJfbHBkZicsXG4gICAgJ3dpc2hhcnRfbHBkZicsXG4gICAgJ3dpc2hhcnRfcm5nJ1xuICBdO1xuICBjb25zdCBESVNUUklCVVRJT05TID0gW1xuICAgICdiZXJub3VsbGknLFxuICAgICdiZXJub3VsbGlfbG9naXQnLFxuICAgICdiZXRhJyxcbiAgICAnYmV0YV9iaW5vbWlhbCcsXG4gICAgJ2Jpbm9taWFsJyxcbiAgICAnYmlub21pYWxfbG9naXQnLFxuICAgICdjYXRlZ29yaWNhbCcsXG4gICAgJ2NhdGVnb3JpY2FsX2xvZ2l0JyxcbiAgICAnY2F1Y2h5JyxcbiAgICAnY2hpX3NxdWFyZScsXG4gICAgJ2RpcmljaGxldCcsXG4gICAgJ2RvdWJsZV9leHBvbmVudGlhbCcsXG4gICAgJ2V4cF9tb2Rfbm9ybWFsJyxcbiAgICAnZXhwb25lbnRpYWwnLFxuICAgICdmcmVjaGV0JyxcbiAgICAnZ2FtbWEnLFxuICAgICdnYXVzc2lhbl9kbG1fb2JzJyxcbiAgICAnZ3VtYmVsJyxcbiAgICAnaHlwZXJnZW9tZXRyaWMnLFxuICAgICdpbnZfY2hpX3NxdWFyZScsXG4gICAgJ2ludl9nYW1tYScsXG4gICAgJ2ludl93aXNoYXJ0JyxcbiAgICAnbGtqX2NvcnInLFxuICAgICdsa2pfY29ycl9jaG9sZXNreScsXG4gICAgJ2xvZ2lzdGljJyxcbiAgICAnbG9nbm9ybWFsJyxcbiAgICAnbXVsdGlfZ3AnLFxuICAgICdtdWx0aV9ncF9jaG9sZXNreScsXG4gICAgJ211bHRpX25vcm1hbCcsXG4gICAgJ211bHRpX25vcm1hbF9jaG9sZXNreScsXG4gICAgJ211bHRpX25vcm1hbF9wcmVjJyxcbiAgICAnbXVsdGlfc3R1ZGVudF90JyxcbiAgICAnbXVsdGlub21pYWwnLFxuICAgICduZWdfYmlub21pYWwnLFxuICAgICduZWdfYmlub21pYWxfMicsXG4gICAgJ25lZ19iaW5vbWlhbF8yX2xvZycsXG4gICAgJ25vcm1hbCcsXG4gICAgJ29yZGVyZWRfbG9naXN0aWMnLFxuICAgICdwYXJldG8nLFxuICAgICdwYXJldG9fdHlwZV8yJyxcbiAgICAncG9pc3NvbicsXG4gICAgJ3BvaXNzb25fbG9nJyxcbiAgICAncmF5bGVpZ2gnLFxuICAgICdzY2FsZWRfaW52X2NoaV9zcXVhcmUnLFxuICAgICdza2V3X25vcm1hbCcsXG4gICAgJ3N0dWRlbnRfdCcsXG4gICAgJ3VuaWZvcm0nLFxuICAgICd2b25fbWlzZXMnLFxuICAgICd3ZWlidWxsJyxcbiAgICAnd2llbmVyJyxcbiAgICAnd2lzaGFydCdcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTdGFuJyxcbiAgICBhbGlhc2VzOiBbICdzdGFuZnVuY3MnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiBobGpzLklERU5UX1JFLFxuICAgICAgdGl0bGU6IEJMT0NLUyxcbiAgICAgIGtleXdvcmQ6IFNUQVRFTUVOVFMuY29uY2F0KFZBUl9UWVBFUykuY29uY2F0KFNQRUNJQUxfRlVOQ1RJT05TKSxcbiAgICAgIGJ1aWx0X2luOiBGVU5DVElPTlNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC8jLyxcbiAgICAgICAgLyQvLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAnbWV0YS1rZXl3b3JkJzogJ2luY2x1ZGUnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvXFwvXFwqLyxcbiAgICAgICAgL1xcKlxcLy8sXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgLy8gaGlnaGxpZ2h0IGRvYyBzdHJpbmdzIG1lbnRpb25lZCBpbiBTdGFuIHJlZmVyZW5jZVxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAvQChyZXR1cm58cGFyYW0pL1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgLy8gaGFjazogaW4gcmFuZ2UgY29uc3RyYWludHMsIGxvd2VyIG11c3QgZm9sbG93IFwiPFwiXG4gICAgICAgIGJlZ2luOiAvPFxccypsb3dlclxccyo9LyxcbiAgICAgICAga2V5d29yZHM6ICdsb3dlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGhhY2s6IGluIHJhbmdlIGNvbnN0cmFpbnRzLCB1cHBlciBtdXN0IGZvbGxvdyBlaXRoZXIgLCBvciA8XG4gICAgICAgIC8vIDxsb3dlciA9IC4uLiwgdXBwZXIgPSAuLi4+IG9yIDx1cHBlciA9IC4uLj5cbiAgICAgICAgYmVnaW46IC9bPCxdXFxzKnVwcGVyXFxzKj0vLFxuICAgICAgICBrZXl3b3JkczogJ3VwcGVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFxidGFyZ2V0XFxzKlxcKz0vLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ35cXFxccyooJyArIGhsanMuSURFTlRfUkUgKyAnKVxcXFxzKlxcXFwoJyxcbiAgICAgICAga2V5d29yZHM6IERJU1RSSUJVVElPTlNcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJcXGQrKD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/L1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXC5cXGQrKD86W2VFXVsrLV0/XFxkKyk/XFxiL1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhbjtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBTdGF0YVxuQXV0aG9yOiBCcmlhbiBRdWlzdG9yZmYgPGJxdWlzdG9yZmZAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBEcmV3IE1jRG9uYWxkIDxkcmV3bWNkb0BnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogU3RhdGEgaXMgYSBnZW5lcmFsLXB1cnBvc2Ugc3RhdGlzdGljYWwgc29mdHdhcmUgcGFja2FnZSBjcmVhdGVkIGluIDE5ODUgYnkgU3RhdGFDb3JwLlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3RhdGFcbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG4vKlxuICBUaGlzIGlzIGEgZm9yayBhbmQgbW9kaWZpY2F0aW9uIG9mIERyZXcgTWNEb25hbGQncyBmaWxlIChodHRwczovL2dpdGh1Yi5jb20vZHJld21jZG9uYWxkL3N0YXRhLWhpZ2hsaWdodGluZykuIEkgaGF2ZSBhbHNvIGluY2x1ZGVkIGEgbGlzdCBvZiBidWlsdGluIGNvbW1hbmRzIGZyb20gaHR0cHM6Ly9idWdzLmtkZS5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTY0Ni5cbiovXG5cbmZ1bmN0aW9uIHN0YXRhKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU3RhdGEnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdkbycsXG4gICAgICAnYWRvJ1xuICAgIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2lmIGVsc2UgaW4gZm9yZWFjaCBmb3IgZm9ydiBmb3J2YSBmb3J2YWwgZm9ydmFsdSBmb3J2YWx1ZSBmb3J2YWx1ZXMgYnkgYnlzIGJ5c29ydCB4aSBxdWlldGx5IHF1aSBjYXB0dXJlIGFib3V0IGFjIGFjXzcgYWNwcnBsb3QgYWNwcnBsb3RfNyBhZGp1c3QgYWRvIGFkb3BhdGggYWRvdXBkYXRlIGFscGhhIGFtZWFucyBhbiBhbm8gYW5vdiBhbm92YSBhbm92YV9lc3RhdCBhbm92YV90ZXJtcyBhbm92YWRlZiBhb3JkZXIgYXAgYXBwIGFwcGUgYXBwZW4gYXBwZW5kIGFyY2ggYXJjaF9kciBhcmNoX2VzdGF0IGFyY2hfcCBhcmNobG0gYXJlZyBhcmVnX3AgYXJncyBhcmltYSBhcmltYV9kciBhcmltYV9lc3RhdCBhcmltYV9wIGFzIGFzbXByb2JpdCBhc21wcm9iaXRfZXN0YXQgYXNtcHJvYml0X2xmIGFzbXByb2JpdF9tZnhfX2RsZyBhc21wcm9iaXRfcCBhc3MgYXNzZSBhc3NlciBhc3NlcnQgYXZwbG90IGF2cGxvdF83IGF2cGxvdHMgYXZwbG90c183IGJjc2tldzAgYmdvZGZyZXkgYmlhcyBiaW5yZWcgYmlwMF9sZiBiaXBsb3QgYmlwcF9sZiBiaXByX2xmIGJpcHJfcCBiaXByb2JpdCBiaXRlc3QgYml0ZXN0aSBiaXRvd3QgYmxvZ2l0IGJtZW1zaXplIGJvb3QgYm9vdHNhbXAgYm9vdHN0cmFwIGJvb3RzdHJhcF84IGJveGNvX2wgYm94Y29fcCBib3hjb3ggYm94Y294XzYgYm94Y294X3AgYnByb2JpdCBiciBicmVhayBicmllciBicm8gYnJvdyBicm93cyBicm93c2UgYnJyIGJycnN0YXQgYnMgYnNfNyBic2FtcGxfdyBic2FtcGxlIGJzYW1wbGVfNyBic3FyZWcgYnN0YXQgYnN0YXRfNyBic3RhdF84IGJzdHJhcCBic3RyYXBfNyBidWJibGUgYnViYmxlcGxvdCBjYSBjYV9lc3RhdCBjYV9wIGNhYmlwbG90IGNhbWF0IGNhbm9uIGNhbm9uXzggY2Fub25fOF9wIGNhbm9uX2VzdGF0IGNhbm9uX3AgY2FwIGNhcHJvamVjdGlvbiBjYXB0IGNhcHR1IGNhcHR1ciBjYXB0dXJlIGNhdCBjYyBjY2hhcnQgY2NoYXJ0XzcgY2NpIGNkIGNlbnNvYnNfdGFibGUgY2VudGlsZSBjZiBjaGFyIGNoZGlyIGNoZWNrZGxnZmlsZXMgY2hlY2tlc3RpbWF0aW9uc2FtcGxlIGNoZWNraGxwZmlsZXMgY2hlY2tzdW0gY2hlbHAgY2kgY2lpIGNsIGNsYXNzIGNsYXNzdXRpbCBjbGVhciBjbGkgY2xpcyBjbGlzdCBjbG8gY2xvZyBjbG9nX2xmIGNsb2dfcCBjbG9naSBjbG9naV9zdyBjbG9naXQgY2xvZ2l0X2xmIGNsb2dpdF9wIGNsb2dpdHAgY2xvZ2xfc3cgY2xvZ2xvZyBjbG9uZXZhciBjbHNsaXN0YXJyYXkgY2x1c3RlciBjbHVzdGVyX21lYXN1cmVzIGNsdXN0ZXJfc3RvcCBjbHVzdGVyX3RyZWUgY2x1c3Rlcl90cmVlXzggY2x1c3Rlcm1hdCBjbWRsb2cgY25yIGNucmUgY25yZWcgY25yZWdfcCBjbnJlZ19zdyBjbnNyZWcgY29kZWJvb2sgY29sbGFwczQgY29sbGFwc2UgY29sb3JtdWx0X25iIGNvbG9ybXVsdF9udyBjb21wYXJlIGNvbXByZXNzIGNvbmYgY29uZmkgY29uZmlyIGNvbmZpcm0gY29ucmVuIGNvbnMgY29uc3QgY29uc3RyIGNvbnN0cmEgY29uc3RyYWkgY29uc3RyYWluIGNvbnN0cmFpbnQgY29udGludWUgY29udHJhY3QgY29weSBjb3B5cmlnaHQgY29weXNvdXJjZSBjb3IgY29yYyBjb3JyIGNvcnIyZGF0YSBjb3JyX2FudGkgY29ycl9rbW8gY29ycl9zbWMgY29ycmUgY29ycmVsIGNvcnJlbGEgY29ycmVsYXQgY29ycmVsYXRlIGNvcnJncmFtIGNvdSBjb3VuIGNvdW50IGNveCBjb3hfcCBjb3hfc3cgY294YmFzZSBjb3hoYXogY294dmFyIGNwcnBsb3QgY3BycGxvdF83IGNyYyBjcmV0IGNyZXR1IGNyZXR1ciBjcmV0dXJuIGNyb3NzIGNzIGNzY3JpcHQgY3NjcmlwdF9sb2cgY3NpIGN0IGN0X2lzIGN0c2V0IGN0c3RfNSBjdHN0X3N0IGN0dG9zdCBjdW1zcCBjdW1zcF83IGN1bXVsIGN1c3VtIGN1c3VtXzcgY3V0aWwgZHwwIGRhdGFzaWcgZGF0YXNpZ24gZGF0YXNpZ25hIGRhdGFzaWduYXQgZGF0YXNpZ25hdHUgZGF0YXNpZ25hdHVyIGRhdGFzaWduYXR1cmUgZGF0ZXRvZiBkYiBkYmV0YSBkZSBkZWMgZGVjbyBkZWNvZCBkZWNvZGUgZGVmZiBkZXMgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXN0cmluZyBkZmJldGEgZGZnbHMgZGZ1bGxlciBkaSBkaV9nIGRpciBkaXJzdGF0cyBkaXMgZGlzY2FyZCBkaXNwIGRpc3BfcmVzIGRpc3BfcyBkaXNwbCBkaXNwbGEgZGlzcGxheSBkaXN0aW5jdCBkbyBkb2UgZG9lZCBkb2VkaSBkb2VkaXQgZG90cGxvdCBkb3RwbG90XzcgZHByb2JpdCBkcmF3bm9ybSBkcm9wIGRzIGRzX3V0aWwgZHN0ZGl6ZSBkdXBsaWNhdGVzIGR1cmJpbmEgZHdzdGF0IGR5ZHggZXwwIGVkIGVkaSBlZGl0IGVnZW4gZWl2cmVnIGVtZGVmIGVuIGVuYyBlbmNvIGVuY29kIGVuY29kZSBlcSBlcmFzZSBlcmVnIGVyZWdfbGYgZXJlZ19wIGVyZWdfc3cgZXJlZ2hldCBlcmVnaGV0X2dsZiBlcmVnaGV0X2dsZl9zaCBlcmVnaGV0X2dwIGVyZWdoZXRfaWxmIGVyZWdoZXRfaWxmX3NoIGVyZWdoZXRfaXAgZXJldCBlcmV0dSBlcmV0dXIgZXJldHVybiBlcnIgZXJybyBlcnJvciBlc2l6ZSBlc3QgZXN0X2NmZXhpc3QgZXN0X2NmbmFtZSBlc3RfY2xpY2thYmxlIGVzdF9leHBhbmQgZXN0X2hvbGQgZXN0X3RhYmxlIGVzdF91bmhvbGQgZXN0X3VuaG9sZG9rIGVzdGF0IGVzdGF0X2RlZmF1bHQgZXN0YXRfc3VtbSBlc3RhdF92Y2Vfb25seSBlc3RpIGVzdGltYXRlcyBldG9kb3cgZXRvZiBldG9tZHkgZXggZXhpIGV4aXQgZXhwYW5kIGV4cGFuZGNsIGZhYyBmYWN0IGZhY3RvIGZhY3RvciBmYWN0b3JfZXN0YXQgZmFjdG9yX3AgZmFjdG9yX3BjYV9yb3RhdGVkIGZhY3Rvcl9yb3RhdGUgZmFjdG9ybWF0IGZjYXN0IGZjYXN0X2NvbXB1dGUgZmNhc3RfZ3JhcGggZmRhZGVzIGZkYWRlc2MgZmRhZGVzY3IgZmRhZGVzY3JpIGZkYWRlc2NyaWIgZmRhZGVzY3JpYmUgZmRhc2F2IGZkYXNhdmUgZmRhdXNlIGZoX3N0IGZpbGUgb3BlbiBmaWxlIHJlYWQgZmlsZSBjbG9zZSBmaWxlIGZpbGVmaWx0ZXIgZmlsbGluIGZpbmRfaGxwX2ZpbGUgZmluZGZpbGUgZmluZGl0IGZpbmRpdF83IGZpdCBmbCBmbGkgZmxpcyBmbGlzdCBmb3I1XzAgZm9yZXN0IGZvcmVzdHBsb3QgZm9ybSBmb3JtYSBmb3JtYXQgZnByZWRpY3QgZnJhY18xNTQgZnJhY19hZGogZnJhY19jaGsgZnJhY19jb3ggZnJhY19kZHAgZnJhY19kaXMgZnJhY19kdiBmcmFjX2luIGZyYWNfbXVuIGZyYWNfcHAgZnJhY19wcSBmcmFjX3B2IGZyYWNfd2d0IGZyYWNfeG8gZnJhY2dlbiBmcmFjcGxvdCBmcmFjcGxvdF83IGZyYWNwb2x5IGZyYWNwcmVkIGZyb25fZXggZnJvbl9obiBmcm9uX3AgZnJvbl90biBmcm9uX3RuMiBmcm9udGllciBmdG9kYXRlIGZ0b2UgZnRvbWR5IGZ0b3dkYXRlIGZ1bm5lbCBmdW5uZWxwbG90IGd8MCBnYW1oZXRfZ2xmIGdhbWhldF9ncCBnYW1oZXRfaWxmIGdhbWhldF9pcCBnYW1tYSBnYW1tYV9kMiBnYW1tYV9wIGdhbW1hX3N3IGdhbW1haGV0IGdkaV9oZXhhZ29uIGdkaV9zcG9rZXMgZ2UgZ2VuIGdlbmUgZ2VuZXIgZ2VuZXJhIGdlbmVyYXQgZ2VuZXJhdGUgZ2VucmFuayBnZW5zdGQgZ2Vudm1lYW4gZ2V0dG9rZW4gZ2wgZ2xhZGRlciBnbGFkZGVyXzcgZ2xpbV9sMDEgZ2xpbV9sMDIgZ2xpbV9sMDMgZ2xpbV9sMDQgZ2xpbV9sMDUgZ2xpbV9sMDYgZ2xpbV9sMDcgZ2xpbV9sMDggZ2xpbV9sMDkgZ2xpbV9sMTAgZ2xpbV9sMTEgZ2xpbV9sMTIgZ2xpbV9sZiBnbGltX211IGdsaW1fbncxIGdsaW1fbncyIGdsaW1fbnczIGdsaW1fcCBnbGltX3YxIGdsaW1fdjIgZ2xpbV92MyBnbGltX3Y0IGdsaW1fdjUgZ2xpbV92NiBnbGltX3Y3IGdsbSBnbG1fNiBnbG1fcCBnbG1fc3cgZ2xtcHJlZCBnbG8gZ2xvYiBnbG9iYSBnbG9iYWwgZ2xvZ2l0IGdsb2dpdF84IGdsb2dpdF9wIGdtZWFucyBnbmJyZV9sZiBnbmJyZWcgZ25icmVnXzUgZ25icmVnX3AgZ29tcF9sZiBnb21wZV9zdyBnb21wZXJfcCBnb21wZXJ0eiBnb21wZXJ0emhldCBnb21waGV0X2dsZiBnb21waGV0X2dsZl9zaCBnb21waGV0X2dwIGdvbXBoZXRfaWxmIGdvbXBoZXRfaWxmX3NoIGdvbXBoZXRfaXAgZ3BoZG90IGdwaHBlbiBncGhwcmludCBncHJlZnMgZ3Byb2JpX3AgZ3Byb2JpdCBncHJvYml0XzggZ3IgZ3I3IGdyX2NvcHkgZ3JfY3VycmVudCBncl9kYiBncl9kZXNjcmliZSBncl9kaXIgZ3JfZHJhdyBncl9kcmF3X3JlcGxheSBncl9kcm9wIGdyX2VkaXQgZ3JfZWRpdHZpZXdvcHRzIGdyX2V4YW1wbGUgZ3JfZXhhbXBsZTIgZ3JfZXhwb3J0IGdyX3ByaW50IGdyX3FzY2hlbWUgZ3JfcXVlcnkgZ3JfcmVhZCBncl9yZW5hbWUgZ3JfcmVwbGF5IGdyX3NhdmUgZ3Jfc2V0IGdyX3NldHNjaGVtZSBncl90YWJsZSBncl91bmRvIGdyX3VzZSBncmFwaCBncmFwaDcgZ3JlYmFyIGdyZWlnZW4gZ3JlaWdlbl83IGdyZWlnZW5fOCBncm1lYW5ieSBncm1lYW5ieV83IGdzX2ZpbGVpbmZvIGdzX2ZpbGV0eXBlIGdzX2dyYXBoaW5mbyBnc19zdGF0IGdzb3J0IGd3b29kIGh8MCBoYWRpbXZvIGhhcmVnIGhhdXNtYW4gaGF2ZXIgaGUgaGVja19kMiBoZWNrbWFfcCBoZWNrbWFuIGhlY2twX2xmIGhlY2twcl9wIGhlY2twcm9iIGhlbCBoZWxwIGhlcmVnIGhldHByX2xmIGhldHByX3AgaGV0cHJvYiBoZXR0ZXN0IGhleGR1bXAgaGlsaXRlIGhpc3QgaGlzdF83IGhpc3RvZ3JhbSBobG9naXQgaGx1IGhtZWFucyBob3RlbCBob3RlbGxpbmcgaHByb2JpdCBocmVnIGhzZWFyY2ggaWNkOSBpY2Q5X2ZmIGljZDlwIGlpcyBpbXB1dGUgaW10ZXN0IGluYmFzZSBpbmNsdWRlIGluZiBpbmZpIGluZmlsIGluZmlsZSBpbmZpeCBpbnAgaW5wdSBpbnB1dCBpbnMgaW5zaGVldCBpbnNwIGluc3BlIGluc3BlYyBpbnNwZWN0IGludGVnIGludGVuIGludHJlZyBpbnRyZWdfNyBpbnRyZWdfcCBpbnRyZzJfbGwgaW50cmdfbGwgaW50cmdfbGwyIGlwb2xhdGUgaXFyZWcgaXIgaXJmIGlyZl9jcmVhdGUgaXJmbSBpcmkgaXNfc3Z5IGlzX3N2eXN1bSBpc2lkIGlzdGRpemUgaXZwcm9iXzFfbGYgaXZwcm9iX2xmIGl2cHJvYml0IGl2cHJvYml0X3AgaXZyZWcgaXZyZWdfZm9vdG5vdGUgaXZ0b2JfMV9sZiBpdnRvYl9sZiBpdnRvYml0IGl2dG9iaXRfcCBqYWNra25pZmUgamFja25pZmUgamtuaWZlIGprbmlmZV82IGprbmlmZV84IGprc3RhdCBqb2luYnkga2FsYXJtYTEga2FwIGthcF8zIGthcG1laWVyIGthcHBhIGthcHdndCBrZGVuc2l0eSBrZGVuc2l0eV83IGtlZXAga3NtIGtzbWlybm92IGt0YXUga3dhbGxpcyBsfDAgbGEgbGFiIGxhYmJlIGxhYmJlcGxvdCBsYWJlIGxhYmVsIGxhYmVsYm9vayBsYWRkZXIgbGV2ZWxzIGxldmVsc29mIGxldmVyYWdlIGxmaXQgbGZpdF9wIGxpIGxpbmNvbSBsaW5lIGxpbmt0ZXN0IGxpcyBsaXN0IGxsb2doZXRfZ2xmIGxsb2doZXRfZ2xmX3NoIGxsb2doZXRfZ3AgbGxvZ2hldF9pbGYgbGxvZ2hldF9pbGZfc2ggbGxvZ2hldF9pcCBsbG9naV9zdyBsbG9naXNfcCBsbG9naXN0IGxsb2dpc3RpYyBsbG9naXN0aWNoZXQgbG5vcm1fbGYgbG5vcm1fc3cgbG5vcm1hX3AgbG5vcm1hbCBsbm9ybWFsaGV0IGxub3JtaGV0X2dsZiBsbm9ybWhldF9nbGZfc2ggbG5vcm1oZXRfZ3AgbG5vcm1oZXRfaWxmIGxub3JtaGV0X2lsZl9zaCBsbm9ybWhldF9pcCBsbnNrZXcwIGxvYWRpbmdwbG90IGxvYyBsb2NhIGxvY2FsIGxvZyBsb2dpIGxvZ2lzX2xmIGxvZ2lzdGljIGxvZ2lzdGljX3AgbG9naXQgbG9naXRfZXN0YXQgbG9naXRfcCBsb2dsb2dzIGxvZ3JhbmsgbG9uZXdheSBsb29rZm9yIGxvb2t1cCBsb3dlc3MgbG93ZXNzXzcgbHByZWRpY3QgbHJlY29tcCBscm9jIGxyb2NfNyBscnRlc3QgbHMgbHNlbnMgbHNlbnNfNyBsc2Vuc194IGxzdGF0IGx0YWJsZSBsdGFibGVfNyBsdHJpYW5nIGx2IGx2cjJwbG90IGx2cjJwbG90XzcgbXwwIG1hIG1hYyBtYWNyIG1hY3JvIG1ha2VjbnMgbWFuIG1hbm92YSBtYW5vdmFfZXN0YXQgbWFub3ZhX3AgbWFub3ZhdGVzdCBtYW50ZWwgbWFyayBtYXJraW4gbWFya291dCBtYXJrc2FtcGxlIG1hdCBtYXRfY2FwcCBtYXRfb3JkZXIgbWF0X3B1dF9yciBtYXRfcmFwcCBtYXRhIG1hdGFfY2xlYXIgbWF0YV9kZXNjcmliZSBtYXRhX2Ryb3AgbWF0YV9tYXRkZXNjcmliZSBtYXRhX21hdHNhdmUgbWF0YV9tYXR1c2UgbWF0YV9tZW1vcnkgbWF0YV9tbGliIG1hdGFfbW9zYXZlIG1hdGFfcmVuYW1lIG1hdGFfd2hpY2ggbWF0YWxhYmVsIG1hdGNwcm9jIG1hdGxpc3QgbWF0bmFtZSBtYXRyIG1hdHJpIG1hdHJpeCBtYXRyaXhfaW5wdXRfX2RsZyBtYXRzdHJpayBtY2MgbWNjaSBtZDBfIG1kMV8gbWQxZGVidWdfIG1kMl8gbWQyZGVidWdfIG1kcyBtZHNfZXN0YXQgbWRzX3AgbWRzY29uZmlnIG1kc2xvbmcgbWRzbWF0IG1kc3NoZXBhcmQgbWR5dG9lIG1keXRvZiBtZV9kZXJkIG1lYW4gbWVhbnMgbWVkaWFuIG1lbW9yeSBtZW1zaXplIG1lbmwgbWVxcGFyc2UgbWVyIG1lcmcgbWVyZ2UgbWV0YSBtZnAgbWZ4IG1oZWxwIG1ob2RkcyBtaW5ib3VuZCBtaXhlZF9sbCBtaXhlZF9sbF9yZXBhcm0gbWthc3NlcnQgbWtkaXIgbWttYXQgbWtzcGxpbmUgbWwgbWxfNSBtbF9hZGpzIG1sX2JoaGhzIG1sX2NfZCBtbF9jaGVjayBtbF9jbGVhciBtbF9jbnQgbWxfZGVidWcgbWxfZGVmZCBtbF9lMCBtbF9lMF9iZmdzIG1sX2UwX2N5Y2xlIG1sX2UwX2RmcCBtbF9lMGkgbWxfZTEgbWxfZTFfYmZncyBtbF9lMV9iaGhoIG1sX2UxX2N5Y2xlIG1sX2UxX2RmcCBtbF9lMiBtbF9lMl9jeWNsZSBtbF9lYmZnMCBtbF9lYmZyMCBtbF9lYmZyMSBtbF9lYmgwcSBtbF9lYmhoMCBtbF9lYmhyMCBtbF9lYnIwaSBtbF9lY3IwaSBtbF9lZGZwMCBtbF9lZGZyMCBtbF9lZGZyMSBtbF9lZHIwaSBtbF9lZHMgbWxfZWVyMGkgbWxfZWdyMGkgbWxfZWxmIG1sX2VsZl9iZmdzIG1sX2VsZl9iaGhoIG1sX2VsZl9jeWNsZSBtbF9lbGZfZGZwIG1sX2VsZmkgbWxfZWxmcyBtbF9lbnIwaSBtbF9lbnJyMCBtbF9lcmR1MCBtbF9lcmR1MF9iZmdzIG1sX2VyZHUwX2JoaGggbWxfZXJkdTBfYmhoaHEgbWxfZXJkdTBfY3ljbGUgbWxfZXJkdTBfZGZwIG1sX2VyZHUwX25yYmZncyBtbF9leGRlIG1sX2Zvb3Rub3RlIG1sX2dlcW5yIG1sX2dyYWQwIG1sX2dyYXBoIG1sX2hiaGhoIG1sX2hkMCBtbF9ob2xkIG1sX2luaXQgbWxfaW52IG1sX2xvZyBtbF9tYXggbWxfbWxvdXQgbWxfbWxvdXRfOCBtbF9tb2RlbCBtbF9uYjAgbWxfb3B0IG1sX3AgbWxfcGxvdCBtbF9xdWVyeSBtbF9yZGdyZCBtbF9yZXBvciBtbF9zX2UgbWxfc2NvcmUgbWxfc2VhcmMgbWxfdGVjaG5pcXVlIG1sX3VuaG9sZCBtbGV2YWwgbWxmXyBtbG1hdGJ5c3VtIG1sbWF0c3VtIG1sb2cgbWxvZ2kgbWxvZ2l0IG1sb2dpdF9mb290bm90ZSBtbG9naXRfcCBtbG9wdHMgbWxzdW0gbWx2ZWNzdW0gbW5sMF8gbW9yIG1vcmUgbW92IG1vdmUgbXByb2JpdCBtcHJvYml0X2xmIG1wcm9iaXRfcCBtcmR1MF8gbXJkdTFfIG12ZGVjb2RlIG12ZW5jb2RlIG12cmVnIG12cmVnX2VzdGF0IG58MCBuYnJlZyBuYnJlZ19hbCBuYnJlZ19sZiBuYnJlZ19wIG5icmVnX3N3IG5lc3RyZWcgbmV0IG5ld2V5IG5ld2V5XzcgbmV3ZXlfcCBuZXdzIG5sIG5sXzcgbmxfOSBubF85X3AgbmxfcCBubF9wXzcgbmxjb20gbmxjb21fcCBubGV4cDIgbmxleHAyXzcgbmxleHAyYSBubGV4cDJhXzcgbmxleHAzIG5sZXhwM183IG5sZ29tMyBubGdvbTNfNyBubGdvbTQgbmxnb200Xzcgbmxpbml0IG5sbG9nMyBubGxvZzNfNyBubGxvZzQgbmxsb2c0XzcgbmxvZ19yZCBubG9naXQgbmxvZ2l0X3AgbmxvZ2l0Z2VuIG5sb2dpdHRyZWUgbmxwcmVkIG5vIG5vYnJlYWsgbm9pIG5vaXMgbm9pc2kgbm9pc2lsIG5vaXNpbHkgbm90ZSBub3RlcyBub3Rlc19kbGcgbnB0cmVuZCBudW1sYWJlbCBudW1saXN0IG9kYmMgb2xkX3ZlciBvbG8gb2xvZyBvbG9naSBvbG9naV9zdyBvbG9naXQgb2xvZ2l0X3Agb2xvZ2l0cCBvbiBvbmUgb25ldyBvbmV3YSBvbmV3YXkgb3BfY29sbm0gb3BfY29tcCBvcF9kaWZmIG9wX2ludiBvcF9zdHIgb3ByIG9wcm8gb3Byb2Igb3Byb2Jfc3cgb3Byb2JpIG9wcm9iaV9wIG9wcm9iaXQgb3Byb2JpdHAgb3B0c19leGNsdXNpdmUgb3JkZXIgb3J0aG9nIG9ydGhwb2x5IG91IG91dCBvdXRmIG91dGZpIG91dGZpbCBvdXRmaWxlIG91dHMgb3V0c2ggb3V0c2hlIG91dHNoZWUgb3V0c2hlZXQgb3Z0ZXN0IHBhYyBwYWNfNyBwYWxldHRlIHBhcnNlIHBhcnNlX2Rpc3NpbSBwYXVzZSBwY2EgcGNhXzggcGNhX2Rpc3BsYXkgcGNhX2VzdGF0IHBjYV9wIHBjYV9yb3RhdGUgcGNhbWF0IHBjaGFydCBwY2hhcnRfNyBwY2hpIHBjaGlfNyBwY29yciBwY3RpbGUgcGVudGl1bSBwZXJncmFtIHBlcmdyYW1fNyBwZXJtdXRlIHBlcm11dGVfOCBwZXJzb25hbCBwZXRvX3N0IHBrY29sbGFwc2UgcGtjcm9zcyBwa2VxdWl2IHBrZXhhbWluZSBwa2V4YW1pbmVfNyBwa3NoYXBlIHBrc3VtbSBwa3N1bW1fNyBwbCBwbG8gcGxvdCBwbHVnaW4gcG5vcm0gcG5vcm1fNyBwb2lzZ29mIHBvaXNzX2xmIHBvaXNzX3N3IHBvaXNzb19wIHBvaXNzb24gcG9pc3Nvbl9lc3RhdCBwb3N0IHBvc3RjbG9zZSBwb3N0ZmlsZSBwb3N0dXRpbCBwcGVycm9uIHByIHByYWlzIHByYWlzX2UgcHJhaXNfZTIgcHJhaXNfcCBwcmVkaWN0IHByZWRpY3RubCBwcmVzZXJ2ZSBwcmludCBwcm8gcHJvYiBwcm9iaSBwcm9iaXQgcHJvYml0X2VzdGF0IHByb2JpdF9wIHByb2NfdGltZSBwcm9jb3ZlcmxheSBwcm9jcnVzdGVzIHByb2NydXN0ZXNfZXN0YXQgcHJvY3J1c3Rlc19wIHByb2ZpbGVyIHByb2cgcHJvZ3IgcHJvZ3JhIHByb2dyYW0gcHJvcCBwcm9wb3J0aW9uIHBydGVzdCBwcnRlc3RpIHB3Y29yciBwd2QgcVxcXFxzIHFieSBxYnlzIHFjaGkgcWNoaV83IHFsYWRkZXIgcWxhZGRlcl83IHFub3JtIHFub3JtXzcgcXFwbG90IHFxcGxvdF83IHFyZWcgcXJlZ19jIHFyZWdfcCBxcmVnX3N3IHF1IHF1YWRjaGsgcXVhbnRpbGUgcXVhbnRpbGVfNyBxdWUgcXVlciBxdWVyeSByYW5nZSByYW5rc3VtIHJhdGlvIHJjaGFydCByY2hhcnRfNyByY29mIHJlY2FzdCByZWNsaW5rIHJlY29kZSByZWcgcmVnMyByZWczX3AgcmVnZHcgcmVnciByZWdyZSByZWdyZV9wMiByZWdyZXMgcmVncmVzX3AgcmVncmVzcyByZWdyZXNzX2VzdGF0IHJlZ3Jpdl9wIHJlbWFwIHJlbiByZW5hIHJlbmFtIHJlbmFtZSByZW5wZml4IHJlcGVhdCByZXBsYWNlIHJlcG9ydCByZXNoYXBlIHJlc3RvcmUgcmV0IHJldHUgcmV0dXIgcmV0dXJuIHJtIHJtZGlyIHJvYnZhciByb2Njb21wIHJvY2NvbXBfNyByb2Njb21wXzggcm9jZl9sZiByb2NmaXQgcm9jZml0Xzggcm9jZ29sZCByb2NwbG90IHJvY3Bsb3RfNyByb2N0YWIgcm9jdGFiXzcgcm9sbGluZyByb2xvZ2l0IHJvbG9naXRfcCByb3Qgcm90YSByb3RhdCByb3RhdGUgcm90YXRlbWF0IHJyZWcgcnJlZ19wIHJ1IHJ1biBydW50ZXN0IHJ2ZnBsb3QgcnZmcGxvdF83IHJ2cHBsb3QgcnZwcGxvdF83IHNhIHNhZmVzdW0gc2FtcGxlIHNhbXBzaSBzYXYgc2F2ZSBzYXZlZHJlc3VsdHMgc2F2ZW9sZCBzYyBzY2Egc2NhbCBzY2FsYSBzY2FsYXIgc2NhdHRlciBzY21fbWluZSBzY28gc2NvYl9sZiBzY29iX3Agc2NvYmlfc3cgc2NvYml0IHNjb3Igc2NvcmUgc2NvcmVwbG90IHNjb3JlcGxvdF9oZWxwIHNjcmVlIHNjcmVlcGxvdCBzY3JlZXBsb3RfaGVscCBzZHRlc3Qgc2R0ZXN0aSBzZSBzZWFyY2ggc2VwYXJhdGUgc2VwZXJhdGUgc2VycmJhciBzZXJyYmFyXzcgc2Vyc2V0IHNldCBzZXRfZGVmYXVsdHMgc2ZyYW5jaWEgc2ggc2hlIHNoZWwgc2hlbGwgc2hld2hhcnQgc2hld2hhcnRfNyBzaWduZXN0aW1hdGlvbnNhbXBsZSBzaWducmFuayBzaWdudGVzdCBzaW11bCBzaW11bF83IHNpbXVsYXRlIHNpbXVsYXRlXzggc2t0ZXN0IHNsZWVwIHNsb2dpdCBzbG9naXRfZDIgc2xvZ2l0X3Agc21vb3RoIHNuYXBzcGFuIHNvIHNvciBzb3J0IHNwZWFybWFuIHNwaWtlcGxvdCBzcGlrZXBsb3RfNyBzcGlrZXBsdCBzcGxpbmVfeCBzcGxpdCBzcXJlZyBzcXJlZ19wIHNyZXQgc3JldHUgc3JldHVyIHNyZXR1cm4gc3NjIHN0IHN0X2N0IHN0X2hjIHN0X2hjZCBzdF9oY2Rfc2ggc3RfaXMgc3RfaXNzeXMgc3Rfbm90ZSBzdF9wcm9tbyBzdF9zZXQgc3Rfc2hvdyBzdF9zbXBsIHN0X3N1YmlkIHN0YWNrIHN0YXRzYnkgc3RhdHNieV84IHN0YmFzZSBzdGNpIHN0Y2lfNyBzdGNveCBzdGNveF9lc3RhdCBzdGNveF9mciBzdGNveF9mcl9sbCBzdGNveF9wIHN0Y294X3N3IHN0Y294a20gc3Rjb3hrbV83IHN0Y3N0YXQgc3RjdXJ2IHN0Y3VydmUgc3RjdXJ2ZV83IHN0ZGVzIHN0ZW0gc3RlcHdpc2Ugc3RlcmVnIHN0ZmlsbCBzdGdlbiBzdGlyIHN0am9pbiBzdG1jIHN0bWggc3RwaHBsb3Qgc3RwaHBsb3RfNyBzdHBodGVzdCBzdHBodGVzdF83IHN0cHRpbWUgc3RyYXRlIHN0cmF0ZV83IHN0cmVnIHN0cmVnX3N3IHN0cmVzZXQgc3RzIHN0c183IHN0c2V0IHN0c3BsaXQgc3RzdW0gc3R0b2NjIHN0dG9jdCBzdHZhcnkgc3R3ZWliIHN1IHN1ZXN0IHN1ZXN0Xzggc3VtIHN1bW0gc3VtbWEgc3VtbWFyIHN1bW1hcmkgc3VtbWFyaXogc3VtbWFyaXplIHN1bmZsb3dlciBzdXJlZyBzdXJ2Y3VydiBzdXJ2c3VtIHN2YXIgc3Zhcl9wIHN2bWF0IHN2eSBzdnlfZGlzcCBzdnlfZHJlZyBzdnlfZXN0IHN2eV9lc3RfNyBzdnlfZXN0YXQgc3Z5X2dldCBzdnlfZ25icmVnX3Agc3Z5X2hlYWQgc3Z5X2hlYWRlciBzdnlfaGVja21hbl9wIHN2eV9oZWNrcHJvYl9wIHN2eV9pbnRyZWdfcCBzdnlfaXZyZWdfcCBzdnlfbG9naXN0aWNfcCBzdnlfbG9naXRfcCBzdnlfbWxvZ2l0X3Agc3Z5X25icmVnX3Agc3Z5X29sb2dpdF9wIHN2eV9vcHJvYml0X3Agc3Z5X3BvaXNzb25fcCBzdnlfcHJvYml0X3Agc3Z5X3JlZ3Jlc3NfcCBzdnlfc3ViIHN2eV9zdWJfNyBzdnlfeCBzdnlfeF83IHN2eV94X3Agc3Z5ZGVzIHN2eWRlc184IHN2eWdlbiBzdnlnbmJyZWcgc3Z5aGVja21hbiBzdnloZWNrcHJvYiBzdnlpbnRyZWcgc3Z5aW50cmVnXzcgc3Z5aW50cmcgc3Z5aXZyZWcgc3Z5bGMgc3Z5bG9nX3Agc3Z5bG9naXQgc3Z5bWFya291dCBzdnltYXJrb3V0Xzggc3Z5bWVhbiBzdnltbG9nIHN2eW1sb2dpdCBzdnluYnJlZyBzdnlvbG9nIHN2eW9sb2dpdCBzdnlvcHJvYiBzdnlvcHJvYml0IHN2eW9wdHMgc3Z5cG9pcyBzdnlwb2lzXzcgc3Z5cG9pc3NvbiBzdnlwcm9iaXQgc3Z5cHJvYnQgc3Z5cHJvcCBzdnlwcm9wXzcgc3Z5cmF0aW8gc3Z5cmVnIHN2eXJlZ19wIHN2eXJlZ3Jlc3Mgc3Z5c2V0IHN2eXNldF83IHN2eXNldF84IHN2eXRhYiBzdnl0YWJfNyBzdnl0ZXN0IHN2eXRvdGFsIHN3IHN3Xzggc3djbnJlZyBzd2NveCBzd2VyZWcgc3dpbGsgc3dsb2dpcyBzd2xvZ2l0IHN3b2xvZ2l0IHN3b3ByYnQgc3dwb2lzIHN3cHJvYml0IHN3cXJlZyBzd3RvYml0IHN3d2VpYiBzeW1tZXRyeSBzeW1taSBzeW1wbG90IHN5bXBsb3RfNyBzeW50YXggc3lzZGVzY3JpYmUgc3lzZGlyIHN5c3VzZSBzenJvZXRlciB0YSB0YWIgdGFiMSB0YWIyIHRhYl9vciB0YWJkIHRhYmRpIHRhYmRpcyB0YWJkaXNwIHRhYmkgdGFibGUgdGFib2RkcyB0YWJvZGRzXzcgdGFic3RhdCB0YWJ1IHRhYnVsIHRhYnVsYSB0YWJ1bGF0IHRhYnVsYXRlIHRlIHRlbXBmaWxlIHRlbXBuYW1lIHRlbXB2YXIgdGVzIHRlc3QgdGVzdG5sIHRlc3RwYXJtIHRlc3RzdGQgdGV0cmFjaG9yaWMgdGltZV9pdCB0aW1lciB0aXMgdG9iIHRvYmkgdG9iaXQgdG9iaXRfcCB0b2JpdF9zdyB0b2tlbiB0b2tlbmkgdG9rZW5peiB0b2tlbml6ZSB0b3N0cmluZyB0b3RhbCB0cmFuc2xhdGUgdHJhbnNsYXRvciB0cmFuc21hcCB0cmVhdF9sbCB0cmVhdHJfcCB0cmVhdHJlZyB0cmltIHRyaW1maWxsIHRybmJfY29ucyB0cm5iX21lYW4gdHJwb2lzc19kMiB0cnVuY19sbCB0cnVuY3JfcCB0cnVuY3JlZyB0c2FwcGVuZCB0c2V0IHRzZmlsbCB0c2xpbmUgdHNsaW5lX2V4IHRzcmVwb3J0IHRzcmV2YXIgdHNybGluZSB0c3NldCB0c3Ntb290aCB0c3VuYWIgdHRlc3QgdHRlc3RpIHR1dF9jaGsgdHV0X3dhaXQgdHV0b3JpYWwgdHcgdHdhcmVfc3QgdHdvIHR3b3dheSB0d293YXlfX2ZwZml0X3NlcnNldCB0d293YXlfX2Z1bmN0aW9uX2dlbiB0d293YXlfX2hpc3RvZ3JhbV9nZW4gdHdvd2F5X19pcG9pbnRfc2Vyc2V0IHR3b3dheV9faXBvaW50c19zZXJzZXQgdHdvd2F5X19rZGVuc2l0eV9nZW4gdHdvd2F5X19sZml0X3NlcnNldCB0d293YXlfX25vcm1nZW5fZ2VuIHR3b3dheV9fcGNpX3NlcnNldCB0d293YXlfX3FmaXRfc2Vyc2V0IHR3b3dheV9fc2NhdHRlcmlfc2Vyc2V0IHR3b3dheV9fc3VuZmxvd2VyX2dlbiB0d293YXlfa3NtX3NlcnNldCB0eSB0eXAgdHlwZSB0eXBlb2YgdXwwIHVuYWIgdW5hYmJyZXYgdW5hYmNtZCB1cGRhdGUgdXMgdXNlIHVzZWxhYmVsIHZhciB2YXJfbWtjb21wYW5pb24gdmFyX3AgdmFyYmFzaWMgdmFyZmNhc3QgdmFyZ3JhbmdlciB2YXJpcmYgdmFyaXJmX2FkZCB2YXJpcmZfY2dyYXBoIHZhcmlyZl9jcmVhdGUgdmFyaXJmX2N0YWJsZSB2YXJpcmZfZGVzY3JpYmUgdmFyaXJmX2RpciB2YXJpcmZfZHJvcCB2YXJpcmZfZXJhc2UgdmFyaXJmX2dyYXBoIHZhcmlyZl9vZ3JhcGggdmFyaXJmX3JlbmFtZSB2YXJpcmZfc2V0IHZhcmlyZl90YWJsZSB2YXJsaXN0IHZhcmxtYXIgdmFybm9ybSB2YXJzb2MgdmFyc3RhYmxlIHZhcnN0YWJsZV93IHZhcnN0YWJsZV93MiB2YXJ3bGUgdmNlIHZlYyB2ZWNfZmV2ZCB2ZWNfbWtwaGkgdmVjX3AgdmVjX3BfdyB2ZWNpcmZfY3JlYXRlIHZlY2xtYXIgdmVjbG1hcl93IHZlY25vcm0gdmVjbm9ybV93IHZlY3JhbmsgdmVjc3RhYmxlIHZlcmluc3QgdmVycyB2ZXJzaSB2ZXJzaW8gdmVyc2lvbiB2aWV3IHZpZXdzb3VyY2UgdmlmIHZ3bHMgd2RhdGV0b2Ygd2ViZGVzY3JpYmUgd2Vic2VlayB3ZWJ1c2Ugd2VpYjFfbGYgd2VpYjJfbGYgd2VpYl9sZiB3ZWliX2xmMCB3ZWliaGV0X2dsZiB3ZWliaGV0X2dsZl9zaCB3ZWliaGV0X2dsZmEgd2VpYmhldF9nbGZhX3NoIHdlaWJoZXRfZ3Agd2VpYmhldF9pbGYgd2VpYmhldF9pbGZfc2ggd2VpYmhldF9pbGZhIHdlaWJoZXRfaWxmYV9zaCB3ZWliaGV0X2lwIHdlaWJ1X3N3IHdlaWJ1bF9wIHdlaWJ1bGwgd2VpYnVsbF9jIHdlaWJ1bGxfcyB3ZWlidWxsaGV0IHdoIHdoZWxwIHdoaSB3aGljaCB3aGlsIHdoaWxlIHdpbGNfc3Qgd2lsY294b24gd2luIHdpbmQgd2luZG8gd2luZG93IHdpbmV4ZWMgd250ZXN0YiB3bnRlc3RiXzcgd250ZXN0cSB4Y2hhcnQgeGNoYXJ0XzcgeGNvcnIgeGNvcnJfNyB4aSB4aV82IHhtbHNhdiB4bWxzYXZlIHhtbHVzZSB4cG9zZSB4c2ggeHNoZSB4c2hlbCB4c2hlbGwgeHRfaWlzIHh0X3RpcyB4dGFiX3AgeHRhYm9uZCB4dGJpbl9wIHh0Y2xvZyB4dGNsb2dsb2cgeHRjbG9nbG9nXzggeHRjbG9nbG9nX2QyIHh0Y2xvZ2xvZ19wYV9wIHh0Y2xvZ2xvZ19yZV9wIHh0Y250X3AgeHRjb3JyIHh0ZGF0YSB4dGRlcyB4dGZyb250X3AgeHRmcm9udGllciB4dGdlZSB4dGdlZV9lbGluayB4dGdlZV9lc3RhdCB4dGdlZV9tYWtlaXZhciB4dGdlZV9wIHh0Z2VlX3BsaW5rIHh0Z2xzIHh0Z2xzX3AgeHRoYXVzIHh0aGF1c21hbiB4dGh0X3AgeHRodGF5bG9yIHh0aWxlIHh0aW50X3AgeHRpbnRyZWcgeHRpbnRyZWdfOCB4dGludHJlZ19kMiB4dGludHJlZ19wIHh0aXZwXzEgeHRpdnBfMiB4dGl2cmVnIHh0bGluZSB4dGxpbmVfZXggeHRsb2dpdCB4dGxvZ2l0XzggeHRsb2dpdF9kMiB4dGxvZ2l0X2ZlX3AgeHRsb2dpdF9wYV9wIHh0bG9naXRfcmVfcCB4dG1peGVkIHh0bWl4ZWRfZXN0YXQgeHRtaXhlZF9wIHh0bmJfZmUgeHRuYl9sZiB4dG5icmVnIHh0bmJyZWdfcGFfcCB4dG5icmVnX3JlZmVfcCB4dHBjc2UgeHRwY3NlX3AgeHRwb2lzIHh0cG9pc3NvbiB4dHBvaXNzb25fZDIgeHRwb2lzc29uX3BhX3AgeHRwb2lzc29uX3JlZmVfcCB4dHByZWQgeHRwcm9iaXQgeHRwcm9iaXRfOCB4dHByb2JpdF9kMiB4dHByb2JpdF9yZV9wIHh0cHNfZmUgeHRwc19sZiB4dHBzX3JlbiB4dHBzX3Jlbl84IHh0cmFyX3AgeHRyYyB4dHJjX3AgeHRyY2hoIHh0cmVmZV9wIHh0cmVnIHh0cmVnX2JlIHh0cmVnX2ZlIHh0cmVnX21sIHh0cmVnX3BhX3AgeHRyZWdfcmUgeHRyZWdhciB4dHJlcmVfcCB4dHNldCB4dHNmX2xsIHh0c2ZfbGx0aSB4dHN1bSB4dHRhYiB4dHRlc3QwIHh0dG9iaXQgeHR0b2JpdF84IHh0dG9iaXRfcCB4dHRyYW5zIHl4IHl4dmlld19fYmFybGlrZV9kcmF3IHl4dmlld19hcmVhX2RyYXcgeXh2aWV3X2Jhcl9kcmF3IHl4dmlld19kb3RfZHJhdyB5eHZpZXdfZHJvcGxpbmVfZHJhdyB5eHZpZXdfZnVuY3Rpb25fZHJhdyB5eHZpZXdfaWFycm93X2RyYXcgeXh2aWV3X2lsYWJlbHNfZHJhdyB5eHZpZXdfbm9ybWFsX2RyYXcgeXh2aWV3X3BjYXJyb3dfZHJhdyB5eHZpZXdfcGNiYXJyb3dfZHJhdyB5eHZpZXdfcGNjYXBzeW1fZHJhdyB5eHZpZXdfcGNzY2F0dGVyX2RyYXcgeXh2aWV3X3Bjc3Bpa2VfZHJhdyB5eHZpZXdfcmFyZWFfZHJhdyB5eHZpZXdfcmJhcl9kcmF3IHl4dmlld19yYmFybV9kcmF3IHl4dmlld19yY2FwX2RyYXcgeXh2aWV3X3JjYXBzeW1fZHJhdyB5eHZpZXdfcmNvbm5lY3RlZF9kcmF3IHl4dmlld19ybGluZV9kcmF3IHl4dmlld19yc2NhdHRlcl9kcmF3IHl4dmlld19yc3Bpa2VfZHJhdyB5eHZpZXdfc3Bpa2VfZHJhdyB5eHZpZXdfc3VuZmxvd2VyX2RyYXcgemFwX3MgemluYiB6aW5iX2xsZiB6aW5iX3BsZiB6aXAgemlwX2xsZiB6aXBfcCB6aXBfcGxmIHp0X2N0XzUgenRfaGNfNSB6dF9oY2RfNSB6dF9pc181IHp0X2lzc181IHp0X3Nob181IHp0X3NtcF81IHp0YmFzZV81IHp0Y294XzUgenRkZXNfNSB6dGVyZWdfNSB6dGZpbGxfNSB6dGdlbl81IHp0aXJfNSB6dGpvaW5fNSB6dG5iIHp0bmJfcCB6dHAgenRwX3AgenRzXzUgenRzZXRfNSB6dHNwbGlfNSB6dHN1bV81IHp0dG9jdF81IHp0dmFyeV81IHp0d2VpYl81JyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL2BbYS16QS1aMC05X10rJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC9cXCRcXHs/W2EtekEtWjAtOV9dK1xcfT8vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYFwiW15cXHJcXG5dKj9cIlxcJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXCJbXlxcclxcblwiXSpcIidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoYWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGF0YW5ofGNlaWx8Y2xvZ2xvZ3xjb21ifGNvc3xkaWdhbW1hfGV4cHxmbG9vcnxpbnZjbG9nbG9nfGludmxvZ2l0fGxufGxuZmFjdHxsbmZhY3RvcmlhbHxsbmdhbW1hfGxvZ3xsb2cxMHxtYXh8bWlufG1vZHxyZWxkaWZ8cm91bmR8c2lnbnxzaW58c3FydHxzdW18dGFufHRhbmh8dHJpZ2FtbWF8dHJ1bmN8YmV0YWRlbnxCaW5vbWlhbHxiaW5vcm18Ymlub3JtYWx8Y2hpMnxjaGkydGFpbHxkZ2FtbWFwZGF8ZGdhbW1hcGRhZGF8ZGdhbW1hcGRhZHh8ZGdhbW1hcGR4fGRnYW1tYXBkeGR4fEZ8RmRlbnxGdGFpbHxnYW1tYWRlbnxnYW1tYXB8aWJldGF8aW52Ymlub21pYWx8aW52Y2hpMnxpbnZjaGkydGFpbHxpbnZGfGludkZ0YWlsfGludmdhbW1hcHxpbnZpYmV0YXxpbnZuY2hpMnxpbnZuRnRhaWx8aW52bmliZXRhfGludm5vcm18aW52bm9ybWFsfGludnR0YWlsfG5iZXRhZGVufG5jaGkyfG5GZGVufG5GdGFpbHxuaWJldGF8bm9ybXxub3JtYWx8bm9ybWFsZGVufG5vcm1kfG5wbmNoaTJ8dGRlbnx0dGFpbHx1bmlmb3JtfGFiYnJldnxjaGFyfGluZGV4fGluZGV4bm90fGxlbmd0aHxsb3dlcnxsdHJpbXxtYXRjaHxwbHVyYWx8cHJvcGVyfHJlYWx8cmVnZXhtfHJlZ2V4cnxyZWdleHN8cmV2ZXJzZXxydHJpbXxzdHJpbmd8c3RybGVufHN0cmxvd2VyfHN0cmx0cmltfHN0cm1hdGNofHN0cm9mcmVhbHxzdHJwb3N8c3RycHJvcGVyfHN0cnJldmVyc2V8c3RycnRyaW18c3RydHJpbXxzdHJ1cHBlcnxzdWJpbnN0cnxzdWJpbndvcmR8c3Vic3RyfHRyaW18dXBwZXJ8d29yZHx3b3JkY291bnR8X2NhbGxlcnxhdXRvY29kZXxieXRlb3JkZXJ8Y2hvcHxjbGlwfGNvbmR8ZXxlcHNkb3VibGV8ZXBzZmxvYXR8Z3JvdXB8aW5saXN0fGlucmFuZ2V8aXJlY29kZXxtYXRyaXh8bWF4Ynl0ZXxtYXhkb3VibGV8bWF4ZmxvYXR8bWF4aW50fG1heGxvbmd8bWl8bWluYnl0ZXxtaW5kb3VibGV8bWluZmxvYXR8bWluaW50fG1pbmxvbmd8bWlzc2luZ3xyfHJlY29kZXxyZXBsYXl8cmV0dXJufHN8c2NhbGFyfGR8ZGF0ZXxkYXl8ZG93fGRveXxoYWxmeWVhcnxtZHl8bW9udGh8cXVhcnRlcnx3ZWVrfHllYXJ8ZHxkYWlseXxkb2ZkfGRvZmh8ZG9mbXxkb2ZxfGRvZnd8ZG9meXxofGhhbGZ5ZWFybHl8aG9mZHxtfG1vZmR8bW9udGhseXxxfHFvZmR8cXVhcnRlcmx5fHRpbnx0d2l0aGlufHd8d2Vla2x5fHdvZmR8eXx5ZWFybHl8eWh8eW18eW9mZHx5cXx5d3xjaG9sZXNreXxjb2xudW1ifGNvbHNvZnxjb3JyfGRldHxkaWFnfGRpYWcwY250fGVsfGdldHxoYWRhbWFyZHxJfGludnxpbnZzeW18aXNzeW18aXNzeW1tZXRyaWN8SnxtYXRtaXNzaW5nfG1hdHVuaWZvcm18bXJlbGRpZnxudWxsbWF0fHJvd251bWJ8cm93c29mfHN3ZWVwfHN5bWludnx0cmFjZXx2ZWN8dmVjZGlhZykoPz1cXFxcKCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICBobGpzLkNPTU1FTlQoJ15bIFxcdF0qXFxcXCouKiQnLCBmYWxzZSksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YXRhO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFNURVAgUGFydCAyMVxuQ29udHJpYnV0b3JzOiBBZGFtIEpvc2VwaCBDb29rIDxhZGFtLmpvc2VwaC5jb29rQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBTeW50YXggaGlnaGxpZ2h0ZXIgZm9yIFNURVAgUGFydCAyMSBmaWxlcyAoSVNPIDEwMzAzLTIxKS5cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT18xMDMwMy0yMVxuKi9cblxuZnVuY3Rpb24gc3RlcDIxKGhsanMpIHtcbiAgY29uc3QgU1RFUDIxX0lERU5UX1JFID0gJ1tBLVpfXVtBLVowLTlfLl0qJztcbiAgY29uc3QgU1RFUDIxX0tFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiBTVEVQMjFfSURFTlRfUkUsXG4gICAga2V5d29yZDogJ0hFQURFUiBFTkRTRUMgREFUQSdcbiAgfTtcbiAgY29uc3QgU1RFUDIxX1NUQVJUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnSVNPLTEwMzAzLTIxOycsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuICBjb25zdCBTVEVQMjFfQ0xPU0UgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdFTkQtSVNPLTEwMzAzLTIxOycsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NURVAgUGFydCAyMScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3AyMScsXG4gICAgICAnc3RlcCcsXG4gICAgICAnc3RwJ1xuICAgIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSwgLy8gU1RFUCAyMSBpcyBjYXNlIGluc2Vuc2l0aXZlIGluIHRoZW9yeSwgaW4gcHJhY3RpY2UgYWxsIG5vbi1jb21tZW50cyBhcmUgY2FwaXRhbGl6ZWQuXG4gICAga2V5d29yZHM6IFNURVAyMV9LRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgU1RFUDIxX1NUQVJULFxuICAgICAgU1RFUDIxX0NMT1NFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVCgnL1xcXFwqXFxcXCohJywgJ1xcXFwqLycpLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge1xuICAgICAgICBpbGxlZ2FsOiBudWxsXG4gICAgICB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgICAgIGlsbGVnYWw6IG51bGxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogXCInXCIsXG4gICAgICAgIGVuZDogXCInXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXFcnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ZXAyMTtcbiIsCiAgICAiY29uc3QgTU9ERVMgPSAoaGxqcykgPT4ge1xuICByZXR1cm4ge1xuICAgIElNUE9SVEFOVDoge1xuICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgfSxcbiAgICBIRVhDT0xPUjoge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnIyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSknXG4gICAgfSxcbiAgICBBVFRSSUJVVEVfU0VMRUNUT1JfTU9ERToge1xuICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICBiZWdpbjogL1xcWy8sXG4gICAgICBlbmQ6IC9cXF0vLFxuICAgICAgaWxsZWdhbDogJyQnLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICBdXG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgVEFHUyA9IFtcbiAgJ2EnLFxuICAnYWJicicsXG4gICdhZGRyZXNzJyxcbiAgJ2FydGljbGUnLFxuICAnYXNpZGUnLFxuICAnYXVkaW8nLFxuICAnYicsXG4gICdibG9ja3F1b3RlJyxcbiAgJ2JvZHknLFxuICAnYnV0dG9uJyxcbiAgJ2NhbnZhcycsXG4gICdjYXB0aW9uJyxcbiAgJ2NpdGUnLFxuICAnY29kZScsXG4gICdkZCcsXG4gICdkZWwnLFxuICAnZGV0YWlscycsXG4gICdkZm4nLFxuICAnZGl2JyxcbiAgJ2RsJyxcbiAgJ2R0JyxcbiAgJ2VtJyxcbiAgJ2ZpZWxkc2V0JyxcbiAgJ2ZpZ2NhcHRpb24nLFxuICAnZmlndXJlJyxcbiAgJ2Zvb3RlcicsXG4gICdmb3JtJyxcbiAgJ2gxJyxcbiAgJ2gyJyxcbiAgJ2gzJyxcbiAgJ2g0JyxcbiAgJ2g1JyxcbiAgJ2g2JyxcbiAgJ2hlYWRlcicsXG4gICdoZ3JvdXAnLFxuICAnaHRtbCcsXG4gICdpJyxcbiAgJ2lmcmFtZScsXG4gICdpbWcnLFxuICAnaW5wdXQnLFxuICAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsXG4gICdsZWdlbmQnLFxuICAnbGknLFxuICAnbWFpbicsXG4gICdtYXJrJyxcbiAgJ21lbnUnLFxuICAnbmF2JyxcbiAgJ29iamVjdCcsXG4gICdvbCcsXG4gICdwJyxcbiAgJ3EnLFxuICAncXVvdGUnLFxuICAnc2FtcCcsXG4gICdzZWN0aW9uJyxcbiAgJ3NwYW4nLFxuICAnc3Ryb25nJyxcbiAgJ3N1bW1hcnknLFxuICAnc3VwJyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3RleHRhcmVhJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpbWUnLFxuICAndHInLFxuICAndWwnLFxuICAndmFyJyxcbiAgJ3ZpZGVvJ1xuXTtcblxuY29uc3QgTUVESUFfRkVBVFVSRVMgPSBbXG4gICdhbnktaG92ZXInLFxuICAnYW55LXBvaW50ZXInLFxuICAnYXNwZWN0LXJhdGlvJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbG9yLWdhbXV0JyxcbiAgJ2NvbG9yLWluZGV4JyxcbiAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxuICAnZGV2aWNlLWhlaWdodCcsXG4gICdkZXZpY2Utd2lkdGgnLFxuICAnZGlzcGxheS1tb2RlJyxcbiAgJ2ZvcmNlZC1jb2xvcnMnLFxuICAnZ3JpZCcsXG4gICdoZWlnaHQnLFxuICAnaG92ZXInLFxuICAnaW52ZXJ0ZWQtY29sb3JzJyxcbiAgJ21vbm9jaHJvbWUnLFxuICAnb3JpZW50YXRpb24nLFxuICAnb3ZlcmZsb3ctYmxvY2snLFxuICAnb3ZlcmZsb3ctaW5saW5lJyxcbiAgJ3BvaW50ZXInLFxuICAncHJlZmVycy1jb2xvci1zY2hlbWUnLFxuICAncHJlZmVycy1jb250cmFzdCcsXG4gICdwcmVmZXJzLXJlZHVjZWQtbW90aW9uJyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC10cmFuc3BhcmVuY3knLFxuICAncmVzb2x1dGlvbicsXG4gICdzY2FuJyxcbiAgJ3NjcmlwdGluZycsXG4gICd1cGRhdGUnLFxuICAnd2lkdGgnLFxuICAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uP1xuICAnbWluLXdpZHRoJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21heC1oZWlnaHQnXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWNsYXNzZXNcbmNvbnN0IFBTRVVET19DTEFTU0VTID0gW1xuICAnYWN0aXZlJyxcbiAgJ2FueS1saW5rJyxcbiAgJ2JsYW5rJyxcbiAgJ2NoZWNrZWQnLFxuICAnY3VycmVudCcsXG4gICdkZWZhdWx0JyxcbiAgJ2RlZmluZWQnLFxuICAnZGlyJywgLy8gZGlyKClcbiAgJ2Rpc2FibGVkJyxcbiAgJ2Ryb3AnLFxuICAnZW1wdHknLFxuICAnZW5hYmxlZCcsXG4gICdmaXJzdCcsXG4gICdmaXJzdC1jaGlsZCcsXG4gICdmaXJzdC1vZi10eXBlJyxcbiAgJ2Z1bGxzY3JlZW4nLFxuICAnZnV0dXJlJyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAnZm9jdXMtd2l0aGluJyxcbiAgJ2hhcycsIC8vIGhhcygpXG4gICdob3N0JywgLy8gaG9zdCBvciBob3N0KClcbiAgJ2hvc3QtY29udGV4dCcsIC8vIGhvc3QtY29udGV4dCgpXG4gICdob3ZlcicsXG4gICdpbmRldGVybWluYXRlJyxcbiAgJ2luLXJhbmdlJyxcbiAgJ2ludmFsaWQnLFxuICAnaXMnLCAvLyBpcygpXG4gICdsYW5nJywgLy8gbGFuZygpXG4gICdsYXN0LWNoaWxkJyxcbiAgJ2xhc3Qtb2YtdHlwZScsXG4gICdsZWZ0JyxcbiAgJ2xpbmsnLFxuICAnbG9jYWwtbGluaycsXG4gICdub3QnLCAvLyBub3QoKVxuICAnbnRoLWNoaWxkJywgLy8gbnRoLWNoaWxkKClcbiAgJ250aC1jb2wnLCAvLyBudGgtY29sKClcbiAgJ250aC1sYXN0LWNoaWxkJywgLy8gbnRoLWxhc3QtY2hpbGQoKVxuICAnbnRoLWxhc3QtY29sJywgLy8gbnRoLWxhc3QtY29sKClcbiAgJ250aC1sYXN0LW9mLXR5cGUnLCAvL250aC1sYXN0LW9mLXR5cGUoKVxuICAnbnRoLW9mLXR5cGUnLCAvL250aC1vZi10eXBlKClcbiAgJ29ubHktY2hpbGQnLFxuICAnb25seS1vZi10eXBlJyxcbiAgJ29wdGlvbmFsJyxcbiAgJ291dC1vZi1yYW5nZScsXG4gICdwYXN0JyxcbiAgJ3BsYWNlaG9sZGVyLXNob3duJyxcbiAgJ3JlYWQtb25seScsXG4gICdyZWFkLXdyaXRlJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvb3QnLFxuICAnc2NvcGUnLFxuICAndGFyZ2V0JyxcbiAgJ3RhcmdldC13aXRoaW4nLFxuICAndXNlci1pbnZhbGlkJyxcbiAgJ3ZhbGlkJyxcbiAgJ3Zpc2l0ZWQnLFxuICAnd2hlcmUnIC8vIHdoZXJlKClcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tZWxlbWVudHNcbmNvbnN0IFBTRVVET19FTEVNRU5UUyA9IFtcbiAgJ2FmdGVyJyxcbiAgJ2JhY2tkcm9wJyxcbiAgJ2JlZm9yZScsXG4gICdjdWUnLFxuICAnY3VlLXJlZ2lvbicsXG4gICdmaXJzdC1sZXR0ZXInLFxuICAnZmlyc3QtbGluZScsXG4gICdncmFtbWFyLWVycm9yJyxcbiAgJ21hcmtlcicsXG4gICdwYXJ0JyxcbiAgJ3BsYWNlaG9sZGVyJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdzbG90dGVkJyxcbiAgJ3NwZWxsaW5nLWVycm9yJ1xuXTtcblxuY29uc3QgQVRUUklCVVRFUyA9IFtcbiAgJ2FsaWduLWNvbnRlbnQnLFxuICAnYWxpZ24taXRlbXMnLFxuICAnYWxpZ24tc2VsZicsXG4gICdhbmltYXRpb24nLFxuICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgJ2FuaW1hdGlvbi1kaXJlY3Rpb24nLFxuICAnYW5pbWF0aW9uLWR1cmF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsXG4gICdhbmltYXRpb24tbmFtZScsXG4gICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICdhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ2F1dG8nLFxuICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxuICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAnYmFja2dyb3VuZC1zaXplJyxcbiAgJ2JvcmRlcicsXG4gICdib3JkZXItYm90dG9tJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgJ2JvcmRlci1ib3R0b20td2lkdGgnLFxuICAnYm9yZGVyLWNvbGxhcHNlJyxcbiAgJ2JvcmRlci1jb2xvcicsXG4gICdib3JkZXItaW1hZ2UnLFxuICAnYm9yZGVyLWltYWdlLW91dHNldCcsXG4gICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgJ2JvcmRlci1pbWFnZS1zbGljZScsXG4gICdib3JkZXItaW1hZ2Utc291cmNlJyxcbiAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICdib3JkZXItbGVmdCcsXG4gICdib3JkZXItbGVmdC1jb2xvcicsXG4gICdib3JkZXItbGVmdC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCcsXG4gICdib3JkZXItcmFkaXVzJyxcbiAgJ2JvcmRlci1yaWdodCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICdib3JkZXItc3BhY2luZycsXG4gICdib3JkZXItc3R5bGUnLFxuICAnYm9yZGVyLXRvcCcsXG4gICdib3JkZXItdG9wLWNvbG9yJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1zdHlsZScsXG4gICdib3JkZXItdG9wLXdpZHRoJyxcbiAgJ2JvcmRlci13aWR0aCcsXG4gICdib3R0b20nLFxuICAnYm94LWRlY29yYXRpb24tYnJlYWsnLFxuICAnYm94LXNoYWRvdycsXG4gICdib3gtc2l6aW5nJyxcbiAgJ2JyZWFrLWFmdGVyJyxcbiAgJ2JyZWFrLWJlZm9yZScsXG4gICdicmVhay1pbnNpZGUnLFxuICAnY2FwdGlvbi1zaWRlJyxcbiAgJ2NsZWFyJyxcbiAgJ2NsaXAnLFxuICAnY2xpcC1wYXRoJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbHVtbi1jb3VudCcsXG4gICdjb2x1bW4tZmlsbCcsXG4gICdjb2x1bW4tZ2FwJyxcbiAgJ2NvbHVtbi1ydWxlJyxcbiAgJ2NvbHVtbi1ydWxlLWNvbG9yJyxcbiAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgJ2NvbHVtbi1ydWxlLXdpZHRoJyxcbiAgJ2NvbHVtbi1zcGFuJyxcbiAgJ2NvbHVtbi13aWR0aCcsXG4gICdjb2x1bW5zJyxcbiAgJ2NvbnRlbnQnLFxuICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAnY291bnRlci1yZXNldCcsXG4gICdjdXJzb3InLFxuICAnZGlyZWN0aW9uJyxcbiAgJ2Rpc3BsYXknLFxuICAnZW1wdHktY2VsbHMnLFxuICAnZmlsdGVyJyxcbiAgJ2ZsZXgnLFxuICAnZmxleC1iYXNpcycsXG4gICdmbGV4LWRpcmVjdGlvbicsXG4gICdmbGV4LWZsb3cnLFxuICAnZmxleC1ncm93JyxcbiAgJ2ZsZXgtc2hyaW5rJyxcbiAgJ2ZsZXgtd3JhcCcsXG4gICdmbG9hdCcsXG4gICdmb250JyxcbiAgJ2ZvbnQtZGlzcGxheScsXG4gICdmb250LWZhbWlseScsXG4gICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAnZm9udC1rZXJuaW5nJyxcbiAgJ2ZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUnLFxuICAnZm9udC1zaXplJyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAnZm9udC1zbW9vdGhpbmcnLFxuICAnZm9udC1zdHJldGNoJyxcbiAgJ2ZvbnQtc3R5bGUnLFxuICAnZm9udC12YXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudC1saWdhdHVyZXMnLFxuICAnZm9udC12YXJpYXRpb24tc2V0dGluZ3MnLFxuICAnZm9udC13ZWlnaHQnLFxuICAnaGVpZ2h0JyxcbiAgJ2h5cGhlbnMnLFxuICAnaWNvbicsXG4gICdpbWFnZS1vcmllbnRhdGlvbicsXG4gICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICdpbWUtbW9kZScsXG4gICdpbmhlcml0JyxcbiAgJ2luaXRpYWwnLFxuICAnanVzdGlmeS1jb250ZW50JyxcbiAgJ2xlZnQnLFxuICAnbGV0dGVyLXNwYWNpbmcnLFxuICAnbGluZS1oZWlnaHQnLFxuICAnbGlzdC1zdHlsZScsXG4gICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgJ2xpc3Qtc3R5bGUtcG9zaXRpb24nLFxuICAnbGlzdC1zdHlsZS10eXBlJyxcbiAgJ21hcmdpbicsXG4gICdtYXJnaW4tYm90dG9tJyxcbiAgJ21hcmdpbi1sZWZ0JyxcbiAgJ21hcmdpbi1yaWdodCcsXG4gICdtYXJnaW4tdG9wJyxcbiAgJ21hcmtzJyxcbiAgJ21hc2snLFxuICAnbWF4LWhlaWdodCcsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWhlaWdodCcsXG4gICdtaW4td2lkdGgnLFxuICAnbmF2LWRvd24nLFxuICAnbmF2LWluZGV4JyxcbiAgJ25hdi1sZWZ0JyxcbiAgJ25hdi1yaWdodCcsXG4gICduYXYtdXAnLFxuICAnbm9uZScsXG4gICdub3JtYWwnLFxuICAnb2JqZWN0LWZpdCcsXG4gICdvYmplY3QtcG9zaXRpb24nLFxuICAnb3BhY2l0eScsXG4gICdvcmRlcicsXG4gICdvcnBoYW5zJyxcbiAgJ291dGxpbmUnLFxuICAnb3V0bGluZS1jb2xvcicsXG4gICdvdXRsaW5lLW9mZnNldCcsXG4gICdvdXRsaW5lLXN0eWxlJyxcbiAgJ291dGxpbmUtd2lkdGgnLFxuICAnb3ZlcmZsb3cnLFxuICAnb3ZlcmZsb3ctd3JhcCcsXG4gICdvdmVyZmxvdy14JyxcbiAgJ292ZXJmbG93LXknLFxuICAncGFkZGluZycsXG4gICdwYWRkaW5nLWJvdHRvbScsXG4gICdwYWRkaW5nLWxlZnQnLFxuICAncGFkZGluZy1yaWdodCcsXG4gICdwYWRkaW5nLXRvcCcsXG4gICdwYWdlLWJyZWFrLWFmdGVyJyxcbiAgJ3BhZ2UtYnJlYWstYmVmb3JlJyxcbiAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgJ3BlcnNwZWN0aXZlJyxcbiAgJ3BlcnNwZWN0aXZlLW9yaWdpbicsXG4gICdwb2ludGVyLWV2ZW50cycsXG4gICdwb3NpdGlvbicsXG4gICdxdW90ZXMnLFxuICAncmVzaXplJyxcbiAgJ3JpZ2h0JyxcbiAgJ3NyYycsIC8vIEBmb250LWZhY2VcbiAgJ3RhYi1zaXplJyxcbiAgJ3RhYmxlLWxheW91dCcsXG4gICd0ZXh0LWFsaWduJyxcbiAgJ3RleHQtYWxpZ24tbGFzdCcsXG4gICd0ZXh0LWRlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uLWNvbG9yJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1saW5lJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICd0ZXh0LWluZGVudCcsXG4gICd0ZXh0LW92ZXJmbG93JyxcbiAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgJ3RleHQtc2hhZG93JyxcbiAgJ3RleHQtdHJhbnNmb3JtJyxcbiAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgJ3RvcCcsXG4gICd0cmFuc2Zvcm0nLFxuICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICd0cmFuc2Zvcm0tc3R5bGUnLFxuICAndHJhbnNpdGlvbicsXG4gICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICd1bmljb2RlLWJpZGknLFxuICAndmVydGljYWwtYWxpZ24nLFxuICAndmlzaWJpbGl0eScsXG4gICd3aGl0ZS1zcGFjZScsXG4gICd3aWRvd3MnLFxuICAnd2lkdGgnLFxuICAnd29yZC1icmVhaycsXG4gICd3b3JkLXNwYWNpbmcnLFxuICAnd29yZC13cmFwJyxcbiAgJ3otaW5kZXgnXG4gIC8vIHJldmVyc2UgbWFrZXMgc3VyZSBsb25nZXIgYXR0cmlidXRlcyBgZm9udC13ZWlnaHRgIGFyZSBtYXRjaGVkIGZ1bGx5XG4gIC8vIGluc3RlYWQgb2YgZ2V0dGluZyBmYWxzZSBwb3NpdGl2ZXMgb24gc2F5IGBmb250YFxuXS5yZXZlcnNlKCk7XG5cbi8qXG5MYW5ndWFnZTogU3R5bHVzXG5BdXRob3I6IEJyeWFudCBXaWxsaWFtcyA8Yi5uLndpbGxpYW1zQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBTdHlsdXMgaXMgYW4gZXhwcmVzc2l2ZSwgcm9idXN0LCBmZWF0dXJlLXJpY2ggQ1NTIGxhbmd1YWdlIGJ1aWx0IGZvciBub2RlanMuXG5XZWJzaXRlOiBodHRwczovL2dpdGh1Yi5jb20vc3R5bHVzL3N0eWx1c1xuQ2F0ZWdvcnk6IGNzc1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHN0eWx1cyhobGpzKSB7XG4gIGNvbnN0IG1vZGVzID0gTU9ERVMoaGxqcyk7XG5cbiAgY29uc3QgQVRfTU9ESUZJRVJTID0gXCJhbmQgb3Igbm90IG9ubHlcIjtcbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnXFxcXCQnICsgaGxqcy5JREVOVF9SRVxuICB9O1xuXG4gIGNvbnN0IEFUX0tFWVdPUkRTID0gW1xuICAgICdjaGFyc2V0JyxcbiAgICAnY3NzJyxcbiAgICAnZGVidWcnLFxuICAgICdleHRlbmQnLFxuICAgICdmb250LWZhY2UnLFxuICAgICdmb3InLFxuICAgICdpbXBvcnQnLFxuICAgICdpbmNsdWRlJyxcbiAgICAna2V5ZnJhbWVzJyxcbiAgICAnbWVkaWEnLFxuICAgICdtaXhpbicsXG4gICAgJ3BhZ2UnLFxuICAgICd3YXJuJyxcbiAgICAnd2hpbGUnXG4gIF07XG5cbiAgY29uc3QgTE9PS0FIRUFEX1RBR19FTkQgPSAnKD89Wy5cXFxcc1xcXFxuWzosKF0pJztcblxuICAvLyBpbGxlZ2Fsc1xuICBjb25zdCBJTExFR0FMID0gW1xuICAgICdcXFxcPycsXG4gICAgJyhcXFxcYlJldHVyblxcXFxiKScsIC8vIG1vbmtleVxuICAgICcoXFxcXGJFbmRcXFxcYiknLCAvLyBtb25rZXlcbiAgICAnKFxcXFxiZW5kXFxcXGIpJywgLy8gdmJzY3JpcHRcbiAgICAnKFxcXFxiZGVmXFxcXGIpJywgLy8gZ3JhZGxlXG4gICAgJzsnLCAvLyBhIHdob2xlIGxvdCBvZiBsYW5ndWFnZXNcbiAgICAnI1xcXFxzJywgLy8gbWFya2Rvd25cbiAgICAnXFxcXCpcXFxccycsIC8vIG1hcmtkb3duXG4gICAgJz09PVxcXFxzJywgLy8gbWFya2Rvd25cbiAgICAnXFxcXHwnLFxuICAgICclJyAvLyBwcm9sb2dcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTdHlsdXMnLFxuICAgIGFsaWFzZXM6IFsgJ3N0eWwnIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6ICdpZiBlbHNlIGZvciBpbicsXG4gICAgaWxsZWdhbDogJygnICsgSUxMRUdBTC5qb2luKCd8JykgKyAnKScsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gc3RyaW5nc1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcblxuICAgICAgLy8gY29tbWVudHNcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG5cbiAgICAgIC8vIGhleCBjb2xvcnNcbiAgICAgIG1vZGVzLkhFWENPTE9SLFxuXG4gICAgICAvLyBjbGFzcyB0YWdcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcLlthLXpBLVpdW2EtekEtWjAtOV8tXSonICsgTE9PS0FIRUFEX1RBR19FTkQsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWNsYXNzJ1xuICAgICAgfSxcblxuICAgICAgLy8gaWQgdGFnXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnI1thLXpBLVpdW2EtekEtWjAtOV8tXSonICsgTE9PS0FIRUFEX1RBR19FTkQsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWlkJ1xuICAgICAgfSxcblxuICAgICAgLy8gdGFnc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpJyArIExPT0tBSEVBRF9UQUdfRU5ELFxuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnXG4gICAgICB9LFxuXG4gICAgICAvLyBwc3VlZG8gc2VsZWN0b3JzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnJj86KCcgKyBQU0VVRE9fQ0xBU1NFUy5qb2luKCd8JykgKyAnKScgKyBMT09LQUhFQURfVEFHX0VORFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgYmVnaW46ICcmPzo6KCcgKyBQU0VVRE9fRUxFTUVOVFMuam9pbignfCcpICsgJyknICsgTE9PS0FIRUFEX1RBR19FTkRcbiAgICAgIH0sXG5cbiAgICAgIG1vZGVzLkFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFLFxuXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJrZXl3b3JkXCIsXG4gICAgICAgIGJlZ2luOiAvQG1lZGlhLyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvW3s7fV0vLFxuICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAkcGF0dGVybjogL1thLXotXSsvLFxuICAgICAgICAgICAga2V5d29yZDogQVRfTU9ESUZJRVJTLFxuICAgICAgICAgICAgYXR0cmlidXRlOiBNRURJQV9GRUFUVVJFUy5qb2luKFwiIFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29udGFpbnM6IFsgaGxqcy5DU1NfTlVNQkVSX01PREUgXVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBAIGtleXdvcmRzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcQCgoLShvfG1venxtc3x3ZWJraXQpLSk/KCcgKyBBVF9LRVlXT1JEUy5qb2luKCd8JykgKyAnKSlcXFxcYidcbiAgICAgIH0sXG5cbiAgICAgIC8vIHZhcmlhYmxlc1xuICAgICAgVkFSSUFCTEUsXG5cbiAgICAgIC8vIGRpbWVuc2lvblxuICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG5cbiAgICAgIC8vIGZ1bmN0aW9uc1xuICAgICAgLy8gIC0gb25seSBmcm9tIGJlZ2lubmluZyBvZiBsaW5lICsgd2hpdGVzcGFjZVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlthLXpBLVpdW2EtekEtWjAtOV9cXC1dKlxcXFwoLipcXFxcKScsXG4gICAgICAgIGlsbGVnYWw6ICdbXFxcXG5dJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcYlthLXpBLVpdW2EtekEtWjAtOV9cXC1dKidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgbW9kZXMuSEVYQ09MT1IsXG4gICAgICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAvLyAgLSBvbmx5IGZyb20gYmVnaW5uaW5nIG9mIGxpbmUgKyB3aGl0ZXNwYWNlXG4gICAgICAvLyAgLSBtdXN0IGhhdmUgd2hpdGVzcGFjZSBhZnRlciBpdFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBBVFRSSUJVVEVTLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyB2YWx1ZSBjb250YWluZXJcbiAgICAgICAgICBlbmQ6IC87fCQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBtb2Rlcy5IRVhDT0xPUixcbiAgICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIG1vZGVzLklNUE9SVEFOVFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaWxsZWdhbDogL1xcLi8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bHVzO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFN1YlVuaXRcbkF1dGhvcjogU2VyZ2V5IEJyb25uaWtvdiA8c2VyZ2V5YkBicm9uZXZpY2hvay5ydT5cbldlYnNpdGU6IGh0dHBzOi8vcHlwaS5vcmcvcHJvamVjdC9weXRob24tc3VidW5pdC9cbiovXG5cbmZ1bmN0aW9uIHN1YnVuaXQoaGxqcykge1xuICBjb25zdCBERVRBSUxTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXFxcW1xcbihtdWx0aXBhcnQpPycsXG4gICAgZW5kOiAnXFxcXF1cXG4nXG4gIH07XG4gIGNvbnN0IFRJTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcXFxkezR9LVxcXFxkezJ9LVxcXFxkezJ9KFxcXFxzKylcXFxcZHsyfTpcXFxcZHsyfTpcXFxcZHsyfVxcLlxcXFxkK1onXG4gIH07XG4gIGNvbnN0IFBST0dSRVNTVkFMVUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJyhcXFxcK3wtKVxcXFxkKydcbiAgfTtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ14odGVzdHx0ZXN0aW5nfHN1Y2Nlc3N8c3VjY2Vzc2Z1bHxmYWlsdXJlfGVycm9yfHNraXB8eGZhaWx8dXhzdWNjZXNzKSg6PylcXFxccysodGVzdCk/J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdecHJvZ3Jlc3MoOj8pKFxcXFxzKyk/KHBvcHxwdXNoKT8nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ150YWdzOidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXnRpbWU6J1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU3ViVW5pdCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgREVUQUlMUyxcbiAgICAgIFRJTUUsXG4gICAgICBQUk9HUkVTU1ZBTFVFLFxuICAgICAgS0VZV09SRFNcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3VidW5pdDtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbG9va2FoZWFkKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJyg/PScsIHJlLCAnKScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEFueSBvZiB0aGUgcGFzc2VkIGV4cHJlc3NzaW9ucyBtYXkgbWF0Y2hcbiAqXG4gKiBDcmVhdGVzIGEgaHVnZSB0aGlzIHwgdGhpcyB8IHRoYXQgfCB0aGF0IG1hdGNoXG4gKiBAcGFyYW0geyhSZWdFeHAgfCBzdHJpbmcpW10gfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlaXRoZXIoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSAnKCcgKyBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwifFwiKSArIFwiKVwiO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG5jb25zdCBrZXl3b3JkV3JhcHBlciA9IGtleXdvcmQgPT4gY29uY2F0KFxuICAvXFxiLyxcbiAga2V5d29yZCxcbiAgL1xcdyQvLnRlc3Qoa2V5d29yZCkgPyAvXFxiLyA6IC9cXEIvXG4pO1xuXG4vLyBLZXl3b3JkcyB0aGF0IHJlcXVpcmUgYSBsZWFkaW5nIGRvdC5cbmNvbnN0IGRvdEtleXdvcmRzID0gW1xuICAnUHJvdG9jb2wnLCAvLyBjb250ZXh0dWFsXG4gICdUeXBlJyAvLyBjb250ZXh0dWFsXG5dLm1hcChrZXl3b3JkV3JhcHBlcik7XG5cbi8vIEtleXdvcmRzIHRoYXQgbWF5IGhhdmUgYSBsZWFkaW5nIGRvdC5cbmNvbnN0IG9wdGlvbmFsRG90S2V5d29yZHMgPSBbXG4gICdpbml0JyxcbiAgJ3NlbGYnXG5dLm1hcChrZXl3b3JkV3JhcHBlcik7XG5cbi8vIHNob3VsZCByZWdpc3RlciBhcyBrZXl3b3JkLCBub3QgdHlwZVxuY29uc3Qga2V5d29yZFR5cGVzID0gW1xuICAnQW55JyxcbiAgJ1NlbGYnXG5dO1xuXG4vLyBSZWd1bGFyIGtleXdvcmRzIGFuZCBsaXRlcmFscy5cbmNvbnN0IGtleXdvcmRzID0gW1xuICAvLyBzdHJpbmdzIGJlbG93IHdpbGwgYmUgZmVkIGludG8gdGhlIHJlZ3VsYXIgYGtleXdvcmRzYCBlbmdpbmUgd2hpbGUgcmVnZXhcbiAgLy8gd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBtb2RlcyBiZWluZyBjcmVhdGVkIHRvIHNjYW4gZm9yIHRob3NlIGtleXdvcmRzIHRvXG4gIC8vIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIHJ1bGVzXG4gICdhc3NvY2lhdGVkdHlwZScsXG4gICdhc3luYycsXG4gICdhd2FpdCcsXG4gIC9hc1xcPy8sIC8vIG9wZXJhdG9yXG4gIC9hcyEvLCAvLyBvcGVyYXRvclxuICAnYXMnLCAvLyBvcGVyYXRvclxuICAnYnJlYWsnLFxuICAnY2FzZScsXG4gICdjYXRjaCcsXG4gICdjbGFzcycsXG4gICdjb250aW51ZScsXG4gICdjb252ZW5pZW5jZScsIC8vIGNvbnRleHR1YWxcbiAgJ2RlZmF1bHQnLFxuICAnZGVmZXInLFxuICAnZGVpbml0JyxcbiAgJ2RpZFNldCcsIC8vIGNvbnRleHR1YWxcbiAgJ2RvJyxcbiAgJ2R5bmFtaWMnLCAvLyBjb250ZXh0dWFsXG4gICdlbHNlJyxcbiAgJ2VudW0nLFxuICAnZXh0ZW5zaW9uJyxcbiAgJ2ZhbGx0aHJvdWdoJyxcbiAgL2ZpbGVwcml2YXRlXFwoc2V0XFwpLyxcbiAgJ2ZpbGVwcml2YXRlJyxcbiAgJ2ZpbmFsJywgLy8gY29udGV4dHVhbFxuICAnZm9yJyxcbiAgJ2Z1bmMnLFxuICAnZ2V0JywgLy8gY29udGV4dHVhbFxuICAnZ3VhcmQnLFxuICAnaWYnLFxuICAnaW1wb3J0JyxcbiAgJ2luZGlyZWN0JywgLy8gY29udGV4dHVhbFxuICAnaW5maXgnLCAvLyBjb250ZXh0dWFsXG4gIC9pbml0XFw/LyxcbiAgL2luaXQhLyxcbiAgJ2lub3V0JyxcbiAgL2ludGVybmFsXFwoc2V0XFwpLyxcbiAgJ2ludGVybmFsJyxcbiAgJ2luJyxcbiAgJ2lzJywgLy8gb3BlcmF0b3JcbiAgJ2xhenknLCAvLyBjb250ZXh0dWFsXG4gICdsZXQnLFxuICAnbXV0YXRpbmcnLCAvLyBjb250ZXh0dWFsXG4gICdub25tdXRhdGluZycsIC8vIGNvbnRleHR1YWxcbiAgL29wZW5cXChzZXRcXCkvLCAvLyBjb250ZXh0dWFsXG4gICdvcGVuJywgLy8gY29udGV4dHVhbFxuICAnb3BlcmF0b3InLFxuICAnb3B0aW9uYWwnLCAvLyBjb250ZXh0dWFsXG4gICdvdmVycmlkZScsIC8vIGNvbnRleHR1YWxcbiAgJ3Bvc3RmaXgnLCAvLyBjb250ZXh0dWFsXG4gICdwcmVjZWRlbmNlZ3JvdXAnLFxuICAncHJlZml4JywgLy8gY29udGV4dHVhbFxuICAvcHJpdmF0ZVxcKHNldFxcKS8sXG4gICdwcml2YXRlJyxcbiAgJ3Byb3RvY29sJyxcbiAgL3B1YmxpY1xcKHNldFxcKS8sXG4gICdwdWJsaWMnLFxuICAncmVwZWF0JyxcbiAgJ3JlcXVpcmVkJywgLy8gY29udGV4dHVhbFxuICAncmV0aHJvd3MnLFxuICAncmV0dXJuJyxcbiAgJ3NldCcsIC8vIGNvbnRleHR1YWxcbiAgJ3NvbWUnLCAvLyBjb250ZXh0dWFsXG4gICdzdGF0aWMnLFxuICAnc3RydWN0JyxcbiAgJ3N1YnNjcmlwdCcsXG4gICdzdXBlcicsXG4gICdzd2l0Y2gnLFxuICAndGhyb3dzJyxcbiAgJ3Rocm93JyxcbiAgL3RyeVxcPy8sIC8vIG9wZXJhdG9yXG4gIC90cnkhLywgLy8gb3BlcmF0b3JcbiAgJ3RyeScsIC8vIG9wZXJhdG9yXG4gICd0eXBlYWxpYXMnLFxuICAvdW5vd25lZFxcKHNhZmVcXCkvLCAvLyBjb250ZXh0dWFsXG4gIC91bm93bmVkXFwodW5zYWZlXFwpLywgLy8gY29udGV4dHVhbFxuICAndW5vd25lZCcsIC8vIGNvbnRleHR1YWxcbiAgJ3ZhcicsXG4gICd3ZWFrJywgLy8gY29udGV4dHVhbFxuICAnd2hlcmUnLFxuICAnd2hpbGUnLFxuICAnd2lsbFNldCcgLy8gY29udGV4dHVhbFxuXTtcblxuLy8gTk9URTogQ29udGV4dHVhbCBrZXl3b3JkcyBhcmUgcmVzZXJ2ZWQgb25seSBpbiBzcGVjaWZpYyBjb250ZXh0cy5cbi8vIElkZWFsbHksIHRoZXNlIHNob3VsZCBiZSBtYXRjaGVkIHVzaW5nIG1vZGVzIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcy5cblxuLy8gTGl0ZXJhbHMuXG5jb25zdCBsaXRlcmFscyA9IFtcbiAgJ2ZhbHNlJyxcbiAgJ25pbCcsXG4gICd0cnVlJ1xuXTtcblxuLy8gS2V5d29yZHMgdXNlZCBpbiBwcmVjZWRlbmNlIGdyb3Vwcy5cbmNvbnN0IHByZWNlZGVuY2Vncm91cEtleXdvcmRzID0gW1xuICAnYXNzaWdubWVudCcsXG4gICdhc3NvY2lhdGl2aXR5JyxcbiAgJ2hpZ2hlclRoYW4nLFxuICAnbGVmdCcsXG4gICdsb3dlclRoYW4nLFxuICAnbm9uZScsXG4gICdyaWdodCdcbl07XG5cbi8vIEtleXdvcmRzIHRoYXQgc3RhcnQgd2l0aCBhIG51bWJlciBzaWduICgjKS5cbi8vICNhdmFpbGFibGUgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LlxuY29uc3QgbnVtYmVyU2lnbktleXdvcmRzID0gW1xuICAnI2NvbG9yTGl0ZXJhbCcsXG4gICcjY29sdW1uJyxcbiAgJyNkc29oYW5kbGUnLFxuICAnI2Vsc2UnLFxuICAnI2Vsc2VpZicsXG4gICcjZW5kaWYnLFxuICAnI2Vycm9yJyxcbiAgJyNmaWxlJyxcbiAgJyNmaWxlSUQnLFxuICAnI2ZpbGVMaXRlcmFsJyxcbiAgJyNmaWxlUGF0aCcsXG4gICcjZnVuY3Rpb24nLFxuICAnI2lmJyxcbiAgJyNpbWFnZUxpdGVyYWwnLFxuICAnI2tleVBhdGgnLFxuICAnI2xpbmUnLFxuICAnI3NlbGVjdG9yJyxcbiAgJyNzb3VyY2VMb2NhdGlvbicsXG4gICcjd2Fybl91bnF1YWxpZmllZF9hY2Nlc3MnLFxuICAnI3dhcm5pbmcnXG5dO1xuXG4vLyBHbG9iYWwgZnVuY3Rpb25zIGluIHRoZSBTdGFuZGFyZCBMaWJyYXJ5LlxuY29uc3QgYnVpbHRJbnMgPSBbXG4gICdhYnMnLFxuICAnYWxsJyxcbiAgJ2FueScsXG4gICdhc3NlcnQnLFxuICAnYXNzZXJ0aW9uRmFpbHVyZScsXG4gICdkZWJ1Z1ByaW50JyxcbiAgJ2R1bXAnLFxuICAnZmF0YWxFcnJvcicsXG4gICdnZXRWYUxpc3QnLFxuICAnaXNLbm93blVuaXF1ZWx5UmVmZXJlbmNlZCcsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ251bWVyaWNDYXN0JyxcbiAgJ3BvaW50d2lzZU1heCcsXG4gICdwb2ludHdpc2VNaW4nLFxuICAncHJlY29uZGl0aW9uJyxcbiAgJ3ByZWNvbmRpdGlvbkZhaWx1cmUnLFxuICAncHJpbnQnLFxuICAncmVhZExpbmUnLFxuICAncmVwZWF0RWxlbWVudCcsXG4gICdzZXF1ZW5jZScsXG4gICdzdHJpZGUnLFxuICAnc3dhcCcsXG4gICdzd2lmdF91bmJveEZyb21Td2lmdFZhbHVlV2l0aFR5cGUnLFxuICAndHJhbnNjb2RlJyxcbiAgJ3R5cGUnLFxuICAndW5zYWZlQml0Q2FzdCcsXG4gICd1bnNhZmVEb3duY2FzdCcsXG4gICd3aXRoRXh0ZW5kZWRMaWZldGltZScsXG4gICd3aXRoVW5zYWZlTXV0YWJsZVBvaW50ZXInLFxuICAnd2l0aFVuc2FmZVBvaW50ZXInLFxuICAnd2l0aFZhTGlzdCcsXG4gICd3aXRob3V0QWN0dWFsbHlFc2NhcGluZycsXG4gICd6aXAnXG5dO1xuXG4vLyBWYWxpZCBmaXJzdCBjaGFyYWN0ZXJzIGZvciBvcGVyYXRvcnMuXG5jb25zdCBvcGVyYXRvckhlYWQgPSBlaXRoZXIoXG4gIC9bLz1cXC0rISolPD4mfF5+P10vLFxuICAvW1xcdTAwQTEtXFx1MDBBN10vLFxuICAvW1xcdTAwQTlcXHUwMEFCXS8sXG4gIC9bXFx1MDBBQ1xcdTAwQUVdLyxcbiAgL1tcXHUwMEIwXFx1MDBCMV0vLFxuICAvW1xcdTAwQjZcXHUwMEJCXFx1MDBCRlxcdTAwRDdcXHUwMEY3XS8sXG4gIC9bXFx1MjAxNi1cXHUyMDE3XS8sXG4gIC9bXFx1MjAyMC1cXHUyMDI3XS8sXG4gIC9bXFx1MjAzMC1cXHUyMDNFXS8sXG4gIC9bXFx1MjA0MS1cXHUyMDUzXS8sXG4gIC9bXFx1MjA1NS1cXHUyMDVFXS8sXG4gIC9bXFx1MjE5MC1cXHUyM0ZGXS8sXG4gIC9bXFx1MjUwMC1cXHUyNzc1XS8sXG4gIC9bXFx1Mjc5NC1cXHUyQkZGXS8sXG4gIC9bXFx1MkUwMC1cXHUyRTdGXS8sXG4gIC9bXFx1MzAwMS1cXHUzMDAzXS8sXG4gIC9bXFx1MzAwOC1cXHUzMDIwXS8sXG4gIC9bXFx1MzAzMF0vXG4pO1xuXG4vLyBWYWxpZCBjaGFyYWN0ZXJzIGZvciBvcGVyYXRvcnMuXG5jb25zdCBvcGVyYXRvckNoYXJhY3RlciA9IGVpdGhlcihcbiAgb3BlcmF0b3JIZWFkLFxuICAvW1xcdTAzMDAtXFx1MDM2Rl0vLFxuICAvW1xcdTFEQzAtXFx1MURGRl0vLFxuICAvW1xcdTIwRDAtXFx1MjBGRl0vLFxuICAvW1xcdUZFMDAtXFx1RkUwRl0vLFxuICAvW1xcdUZFMjAtXFx1RkUyRl0vXG4gIC8vIFRPRE86IFRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmUgYWxzbyBhbGxvd2VkLCBidXQgdGhlIHJlZ2V4IGlzbid0IHN1cHBvcnRlZCB5ZXQuXG4gIC8vIC9bXFx1e0UwMTAwfS1cXHV7RTAxRUZ9XS91XG4pO1xuXG4vLyBWYWxpZCBvcGVyYXRvci5cbmNvbnN0IG9wZXJhdG9yID0gY29uY2F0KG9wZXJhdG9ySGVhZCwgb3BlcmF0b3JDaGFyYWN0ZXIsICcqJyk7XG5cbi8vIFZhbGlkIGZpcnN0IGNoYXJhY3RlcnMgZm9yIGlkZW50aWZpZXJzLlxuY29uc3QgaWRlbnRpZmllckhlYWQgPSBlaXRoZXIoXG4gIC9bYS16QS1aX10vLFxuICAvW1xcdTAwQThcXHUwMEFBXFx1MDBBRFxcdTAwQUZcXHUwMEIyLVxcdTAwQjVcXHUwMEI3LVxcdTAwQkFdLyxcbiAgL1tcXHUwMEJDLVxcdTAwQkVcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAwRkZdLyxcbiAgL1tcXHUwMTAwLVxcdTAyRkZcXHUwMzcwLVxcdTE2N0ZcXHUxNjgxLVxcdTE4MERcXHUxODBGLVxcdTFEQkZdLyxcbiAgL1tcXHUxRTAwLVxcdTFGRkZdLyxcbiAgL1tcXHUyMDBCLVxcdTIwMERcXHUyMDJBLVxcdTIwMkVcXHUyMDNGLVxcdTIwNDBcXHUyMDU0XFx1MjA2MC1cXHUyMDZGXS8sXG4gIC9bXFx1MjA3MC1cXHUyMENGXFx1MjEwMC1cXHUyMThGXFx1MjQ2MC1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXS8sXG4gIC9bXFx1MkMwMC1cXHUyREZGXFx1MkU4MC1cXHUyRkZGXS8sXG4gIC9bXFx1MzAwNC1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDNGXFx1MzA0MC1cXHVEN0ZGXS8sXG4gIC9bXFx1RjkwMC1cXHVGRDNEXFx1RkQ0MC1cXHVGRENGXFx1RkRGMC1cXHVGRTFGXFx1RkUzMC1cXHVGRTQ0XS8sXG4gIC9bXFx1RkU0Ny1cXHVGRUZFXFx1RkYwMC1cXHVGRkZEXS8gLy8gU2hvdWxkIGJlIC9bXFx1RkU0Ny1cXHVGRkZEXS8sIGJ1dCB3ZSBoYXZlIHRvIGV4Y2x1ZGUgRkVGRi5cbiAgLy8gVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBhbHNvIGFsbG93ZWQsIGJ1dCB0aGUgcmVnZXhlcyBhcmVuJ3Qgc3VwcG9ydGVkIHlldC5cbiAgLy8gL1tcXHV7MTAwMDB9LVxcdXsxRkZGRH1cXHV7MjAwMDAtXFx1ezJGRkZEfVxcdXszMDAwMH0tXFx1ezNGRkZEfVxcdXs0MDAwMH0tXFx1ezRGRkZEfV0vdSxcbiAgLy8gL1tcXHV7NTAwMDB9LVxcdXs1RkZGRH1cXHV7NjAwMDAtXFx1ezZGRkZEfVxcdXs3MDAwMH0tXFx1ezdGRkZEfVxcdXs4MDAwMH0tXFx1ezhGRkZEfV0vdSxcbiAgLy8gL1tcXHV7OTAwMDB9LVxcdXs5RkZGRH1cXHV7QTAwMDAtXFx1e0FGRkZEfVxcdXtCMDAwMH0tXFx1e0JGRkZEfVxcdXtDMDAwMH0tXFx1e0NGRkZEfV0vdSxcbiAgLy8gL1tcXHV7RDAwMDB9LVxcdXtERkZGRH1cXHV7RTAwMDAtXFx1e0VGRkZEfV0vdVxuKTtcblxuLy8gVmFsaWQgY2hhcmFjdGVycyBmb3IgaWRlbnRpZmllcnMuXG5jb25zdCBpZGVudGlmaWVyQ2hhcmFjdGVyID0gZWl0aGVyKFxuICBpZGVudGlmaWVySGVhZCxcbiAgL1xcZC8sXG4gIC9bXFx1MDMwMC1cXHUwMzZGXFx1MURDMC1cXHUxREZGXFx1MjBEMC1cXHUyMEZGXFx1RkUyMC1cXHVGRTJGXS9cbik7XG5cbi8vIFZhbGlkIGlkZW50aWZpZXIuXG5jb25zdCBpZGVudGlmaWVyID0gY29uY2F0KGlkZW50aWZpZXJIZWFkLCBpZGVudGlmaWVyQ2hhcmFjdGVyLCAnKicpO1xuXG4vLyBWYWxpZCB0eXBlIGlkZW50aWZpZXIuXG5jb25zdCB0eXBlSWRlbnRpZmllciA9IGNvbmNhdCgvW0EtWl0vLCBpZGVudGlmaWVyQ2hhcmFjdGVyLCAnKicpO1xuXG4vLyBCdWlsdC1pbiBhdHRyaWJ1dGVzLCB3aGljaCBhcmUgaGlnaGxpZ2h0ZWQgYXMga2V5d29yZHMuXG4vLyBAYXZhaWxhYmxlIGlzIGhhbmRsZWQgc2VwYXJhdGVseS5cbmNvbnN0IGtleXdvcmRBdHRyaWJ1dGVzID0gW1xuICAnYXV0b2Nsb3N1cmUnLFxuICBjb25jYXQoL2NvbnZlbnRpb25cXCgvLCBlaXRoZXIoJ3N3aWZ0JywgJ2Jsb2NrJywgJ2MnKSwgL1xcKS8pLFxuICAnZGlzY2FyZGFibGVSZXN1bHQnLFxuICAnZHluYW1pY0NhbGxhYmxlJyxcbiAgJ2R5bmFtaWNNZW1iZXJMb29rdXAnLFxuICAnZXNjYXBpbmcnLFxuICAnZnJvemVuJyxcbiAgJ0dLSW5zcGVjdGFibGUnLFxuICAnSUJBY3Rpb24nLFxuICAnSUJEZXNpZ25hYmxlJyxcbiAgJ0lCSW5zcGVjdGFibGUnLFxuICAnSUJPdXRsZXQnLFxuICAnSUJTZWd1ZUFjdGlvbicsXG4gICdpbmxpbmFibGUnLFxuICAnbWFpbicsXG4gICdub25vYmpjJyxcbiAgJ05TQXBwbGljYXRpb25NYWluJyxcbiAgJ05TQ29weWluZycsXG4gICdOU01hbmFnZWQnLFxuICBjb25jYXQoL29iamNcXCgvLCBpZGVudGlmaWVyLCAvXFwpLyksXG4gICdvYmpjJyxcbiAgJ29iamNNZW1iZXJzJyxcbiAgJ3Byb3BlcnR5V3JhcHBlcicsXG4gICdyZXF1aXJlc19zdG9yZWRfcHJvcGVydHlfaW5pdHMnLFxuICAndGVzdGFibGUnLFxuICAnVUlBcHBsaWNhdGlvbk1haW4nLFxuICAndW5rbm93bicsXG4gICd1c2FibGVGcm9tSW5saW5lJ1xuXTtcblxuLy8gQ29udGV4dHVhbCBrZXl3b3JkcyB1c2VkIGluIEBhdmFpbGFibGUgYW5kICNhdmFpbGFibGUuXG5jb25zdCBhdmFpbGFiaWxpdHlLZXl3b3JkcyA9IFtcbiAgJ2lPUycsXG4gICdpT1NBcHBsaWNhdGlvbkV4dGVuc2lvbicsXG4gICdtYWNPUycsXG4gICdtYWNPU0FwcGxpY2F0aW9uRXh0ZW5zaW9uJyxcbiAgJ21hY0NhdGFseXN0JyxcbiAgJ21hY0NhdGFseXN0QXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAnd2F0Y2hPUycsXG4gICd3YXRjaE9TQXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAndHZPUycsXG4gICd0dk9TQXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAnc3dpZnQnXG5dO1xuXG4vKlxuTGFuZ3VhZ2U6IFN3aWZ0XG5EZXNjcmlwdGlvbjogU3dpZnQgaXMgYSBnZW5lcmFsLXB1cnBvc2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgYnVpbHQgdXNpbmcgYSBtb2Rlcm4gYXBwcm9hY2ggdG8gc2FmZXR5LCBwZXJmb3JtYW5jZSwgYW5kIHNvZnR3YXJlIGRlc2lnbiBwYXR0ZXJucy5cbkF1dGhvcjogU3RldmVuIFZhbiBJbXBlIDxzdGV2ZW4udmFuaW1wZUBpY2xvdWQuY29tPlxuQ29udHJpYnV0b3JzOiBDaHJpcyBFaWRob2YgPGNocmlzQGVpZGhvZi5ubD4sIE5hdGUgQ29vayA8bmF0ZWNvb2tAZ21haWwuY29tPiwgQWxleGFuZGVyIExpY2h0ZXIgPG1hbm5pTEBnbXgubmV0PiwgUmljaGFyZCBHaWJzb24gPGdpYnNvbjA0MkBnaXRodWI+XG5XZWJzaXRlOiBodHRwczovL3N3aWZ0Lm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gc3dpZnQoaGxqcykge1xuICBjb25zdCBXSElURVNQQUNFID0ge1xuICAgIG1hdGNoOiAvXFxzKy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvTGV4aWNhbFN0cnVjdHVyZS5odG1sI0lENDExXG4gIGNvbnN0IEJMT0NLX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJy9cXFxcKicsXG4gICAgJ1xcXFwqLycsXG4gICAge1xuICAgICAgY29udGFpbnM6IFsgJ3NlbGYnIF1cbiAgICB9XG4gICk7XG4gIGNvbnN0IENPTU1FTlRTID0gW1xuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBCTE9DS19DT01NRU5UXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9MZXhpY2FsU3RydWN0dXJlLmh0bWwjSUQ0MTNcbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC96elN1bW1hcnlPZlRoZUdyYW1tYXIuaHRtbFxuICBjb25zdCBET1RfS0VZV09SRCA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogY29uY2F0KC9cXC4vLCBsb29rYWhlYWQoZWl0aGVyKC4uLmRvdEtleXdvcmRzLCAuLi5vcHRpb25hbERvdEtleXdvcmRzKSkpLFxuICAgIGVuZDogZWl0aGVyKC4uLmRvdEtleXdvcmRzLCAuLi5vcHRpb25hbERvdEtleXdvcmRzKSxcbiAgICBleGNsdWRlQmVnaW46IHRydWVcbiAgfTtcbiAgY29uc3QgS0VZV09SRF9HVUFSRCA9IHtcbiAgICAvLyBDb25zdW1lIC5rZXl3b3JkIHRvIHByZXZlbnQgaGlnaGxpZ2h0aW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgYXMga2V5d29yZHMuXG4gICAgbWF0Y2g6IGNvbmNhdCgvXFwuLywgZWl0aGVyKC4uLmtleXdvcmRzKSksXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFBMQUlOX0tFWVdPUkRTID0ga2V5d29yZHNcbiAgICAuZmlsdGVyKGt3ID0+IHR5cGVvZiBrdyA9PT0gJ3N0cmluZycpXG4gICAgLmNvbmNhdChbIFwiX3wwXCIgXSk7IC8vIHNlZW1zIGNvbW1vbiwgc28gMCByZWxldmFuY2VcbiAgY29uc3QgUkVHRVhfS0VZV09SRFMgPSBrZXl3b3Jkc1xuICAgIC5maWx0ZXIoa3cgPT4gdHlwZW9mIGt3ICE9PSAnc3RyaW5nJykgLy8gZmluZCByZWdleFxuICAgIC5jb25jYXQoa2V5d29yZFR5cGVzKVxuICAgIC5tYXAoa2V5d29yZFdyYXBwZXIpO1xuICBjb25zdCBLRVlXT1JEID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBtYXRjaDogZWl0aGVyKC4uLlJFR0VYX0tFWVdPUkRTLCAuLi5vcHRpb25hbERvdEtleXdvcmRzKVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgLy8gZmluZCBhbGwgdGhlIHJlZ3VsYXIga2V5d29yZHNcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IGVpdGhlcihcbiAgICAgIC9cXGJcXHcrLywgLy8gcmVndWxhciBrZXl3b3Jkc1xuICAgICAgLyNcXHcrLyAvLyBudW1iZXIga2V5d29yZHNcbiAgICApLFxuICAgIGtleXdvcmQ6IFBMQUlOX0tFWVdPUkRTXG4gICAgICAuY29uY2F0KG51bWJlclNpZ25LZXl3b3JkcyksXG4gICAgbGl0ZXJhbDogbGl0ZXJhbHNcbiAgfTtcbiAgY29uc3QgS0VZV09SRF9NT0RFUyA9IFtcbiAgICBET1RfS0VZV09SRCxcbiAgICBLRVlXT1JEX0dVQVJELFxuICAgIEtFWVdPUkRcbiAgXTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwbGUvc3dpZnQvdHJlZS9tYWluL3N0ZGxpYi9wdWJsaWMvY29yZVxuICBjb25zdCBCVUlMVF9JTl9HVUFSRCA9IHtcbiAgICAvLyBDb25zdW1lIC5idWlsdF9pbiB0byBwcmV2ZW50IGhpZ2hsaWdodGluZyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICAgIG1hdGNoOiBjb25jYXQoL1xcLi8sIGVpdGhlciguLi5idWlsdElucykpLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBCVUlMVF9JTiA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgbWF0Y2g6IGNvbmNhdCgvXFxiLywgZWl0aGVyKC4uLmJ1aWx0SW5zKSwgLyg/PVxcKCkvKVxuICB9O1xuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgQlVJTFRfSU5fR1VBUkQsXG4gICAgQlVJTFRfSU5cbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNJRDQxOFxuICBjb25zdCBPUEVSQVRPUl9HVUFSRCA9IHtcbiAgICAvLyBQcmV2ZW50IC0+IGZyb20gYmVpbmcgaGlnaGxpZ2h0aW5nIGFzIGFuIG9wZXJhdG9yLlxuICAgIG1hdGNoOiAvLT4vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBPUEVSQVRPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdvcGVyYXRvcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBvcGVyYXRvclxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gZG90LW9wZXJhdG9yOiBvbmx5IG9wZXJhdG9ycyB0aGF0IHN0YXJ0IHdpdGggYSBkb3QgYXJlIGFsbG93ZWQgdG8gdXNlIGRvdHMgYXNcbiAgICAgICAgLy8gY2hhcmFjdGVycyAoLi4uLCAuLi48LCAuKiwgZXRjKS4gU28gdGhlcmUgcnVsZSBoZXJlIGlzOiBhIGRvdCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZVxuICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgbWF5IGFsc28gaW5jbHVkZSBkb3RzLlxuICAgICAgICBtYXRjaDogYFxcXFwuKFxcXFwufCR7b3BlcmF0b3JDaGFyYWN0ZXJ9KStgXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBPUEVSQVRPUlMgPSBbXG4gICAgT1BFUkFUT1JfR1VBUkQsXG4gICAgT1BFUkFUT1JcbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNncmFtbWFyX251bWVyaWMtbGl0ZXJhbFxuICAvLyBUT0RPOiBVcGRhdGUgZm9yIGxlYWRpbmcgYC1gIGFmdGVyIGxvb2tiZWhpbmQgaXMgc3VwcG9ydGVkIGV2ZXJ5d2hlcmVcbiAgY29uc3QgZGVjaW1hbERpZ2l0cyA9ICcoWzAtOV1fKikrJztcbiAgY29uc3QgaGV4RGlnaXRzID0gJyhbMC05YS1mQS1GXV8qKSsnO1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQtbGl0ZXJhbCAoc3Vic3VtZXMgZGVjaW1hbC1saXRlcmFsKVxuICAgICAge1xuICAgICAgICBtYXRjaDogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKFxcXFwuKCR7ZGVjaW1hbERpZ2l0c30pKT9gICsgYChbZUVdWystXT8oJHtkZWNpbWFsRGlnaXRzfSkpP1xcXFxiYFxuICAgICAgfSxcbiAgICAgIC8vIGhleGFkZWNpbWFsIGZsb2F0aW5nLXBvaW50LWxpdGVyYWwgKHN1YnN1bWVzIGhleGFkZWNpbWFsLWxpdGVyYWwpXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBgXFxcXGIweCgke2hleERpZ2l0c30pKFxcXFwuKCR7aGV4RGlnaXRzfSkpP2AgKyBgKFtwUF1bKy1dPygke2RlY2ltYWxEaWdpdHN9KSk/XFxcXGJgXG4gICAgICB9LFxuICAgICAgLy8gb2N0YWwtbGl0ZXJhbFxuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcYjBvKFswLTddXyopK1xcYi9cbiAgICAgIH0sXG4gICAgICAvLyBiaW5hcnktbGl0ZXJhbFxuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcYjBiKFswMV1fKikrXFxiL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNncmFtbWFyX3N0cmluZy1saXRlcmFsXG4gIGNvbnN0IEVTQ0FQRURfQ0hBUkFDVEVSID0gKHJhd0RlbGltaXRlciA9IFwiXCIpID0+ICh7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBjb25jYXQoL1xcXFwvLCByYXdEZWxpbWl0ZXIsIC9bMFxcXFx0bnJcIiddLylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBjb25jYXQoL1xcXFwvLCByYXdEZWxpbWl0ZXIsIC91XFx7WzAtOWEtZkEtRl17MSw4fVxcfS8pXG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgY29uc3QgRVNDQVBFRF9ORVdMSU5FID0gKHJhd0RlbGltaXRlciA9IFwiXCIpID0+ICh7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIG1hdGNoOiBjb25jYXQoL1xcXFwvLCByYXdEZWxpbWl0ZXIsIC9bXFx0IF0qKD86W1xcclxcbl18XFxyXFxuKS8pXG4gIH0pO1xuICBjb25zdCBJTlRFUlBPTEFUSU9OID0gKHJhd0RlbGltaXRlciA9IFwiXCIpID0+ICh7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGxhYmVsOiBcImludGVycG9sXCIsXG4gICAgYmVnaW46IGNvbmNhdCgvXFxcXC8sIHJhd0RlbGltaXRlciwgL1xcKC8pLFxuICAgIGVuZDogL1xcKS9cbiAgfSk7XG4gIGNvbnN0IE1VTFRJTElORV9TVFJJTkcgPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBiZWdpbjogY29uY2F0KHJhd0RlbGltaXRlciwgL1wiXCJcIi8pLFxuICAgIGVuZDogY29uY2F0KC9cIlwiXCIvLCByYXdEZWxpbWl0ZXIpLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBFU0NBUEVEX0NIQVJBQ1RFUihyYXdEZWxpbWl0ZXIpLFxuICAgICAgRVNDQVBFRF9ORVdMSU5FKHJhd0RlbGltaXRlciksXG4gICAgICBJTlRFUlBPTEFUSU9OKHJhd0RlbGltaXRlcilcbiAgICBdXG4gIH0pO1xuICBjb25zdCBTSU5HTEVfTElORV9TVFJJTkcgPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBiZWdpbjogY29uY2F0KHJhd0RlbGltaXRlciwgL1wiLyksXG4gICAgZW5kOiBjb25jYXQoL1wiLywgcmF3RGVsaW1pdGVyKSxcbiAgICBjb250YWluczogW1xuICAgICAgRVNDQVBFRF9DSEFSQUNURVIocmF3RGVsaW1pdGVyKSxcbiAgICAgIElOVEVSUE9MQVRJT04ocmF3RGVsaW1pdGVyKVxuICAgIF1cbiAgfSk7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBNVUxUSUxJTkVfU1RSSU5HKCksXG4gICAgICBNVUxUSUxJTkVfU1RSSU5HKFwiI1wiKSxcbiAgICAgIE1VTFRJTElORV9TVFJJTkcoXCIjI1wiKSxcbiAgICAgIE1VTFRJTElORV9TVFJJTkcoXCIjIyNcIiksXG4gICAgICBTSU5HTEVfTElORV9TVFJJTkcoKSxcbiAgICAgIFNJTkdMRV9MSU5FX1NUUklORyhcIiNcIiksXG4gICAgICBTSU5HTEVfTElORV9TVFJJTkcoXCIjI1wiKSxcbiAgICAgIFNJTkdMRV9MSU5FX1NUUklORyhcIiMjI1wiKVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNJRDQxMlxuICBjb25zdCBRVU9URURfSURFTlRJRklFUiA9IHtcbiAgICBtYXRjaDogY29uY2F0KC9gLywgaWRlbnRpZmllciwgL2AvKVxuICB9O1xuICBjb25zdCBJTVBMSUNJVF9QQVJBTUVURVIgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIG1hdGNoOiAvXFwkXFxkKy9cbiAgfTtcbiAgY29uc3QgUFJPUEVSVFlfV1JBUFBFUl9QUk9KRUNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBtYXRjaDogYFxcXFwkJHtpZGVudGlmaWVyQ2hhcmFjdGVyfStgXG4gIH07XG4gIGNvbnN0IElERU5USUZJRVJTID0gW1xuICAgIFFVT1RFRF9JREVOVElGSUVSLFxuICAgIElNUExJQ0lUX1BBUkFNRVRFUixcbiAgICBQUk9QRVJUWV9XUkFQUEVSX1BST0pFQ1RJT05cbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0F0dHJpYnV0ZXMuaHRtbFxuICBjb25zdCBBVkFJTEFCTEVfQVRUUklCVVRFID0ge1xuICAgIG1hdGNoOiAvKEB8IylhdmFpbGFibGUvLFxuICAgIGNsYXNzTmFtZTogXCJrZXl3b3JkXCIsXG4gICAgc3RhcnRzOiB7XG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAga2V5d29yZHM6IGF2YWlsYWJpbGl0eUtleXdvcmRzLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAuLi5PUEVSQVRPUlMsXG4gICAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgICBTVFJJTkdcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG4gIGNvbnN0IEtFWVdPUkRfQVRUUklCVVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIG1hdGNoOiBjb25jYXQoL0AvLCBlaXRoZXIoLi4ua2V5d29yZEF0dHJpYnV0ZXMpKVxuICB9O1xuICBjb25zdCBVU0VSX0RFRklORURfQVRUUklCVVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIG1hdGNoOiBjb25jYXQoL0AvLCBpZGVudGlmaWVyKVxuICB9O1xuICBjb25zdCBBVFRSSUJVVEVTID0gW1xuICAgIEFWQUlMQUJMRV9BVFRSSUJVVEUsXG4gICAgS0VZV09SRF9BVFRSSUJVVEUsXG4gICAgVVNFUl9ERUZJTkVEX0FUVFJJQlVURVxuICBdO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvVHlwZXMuaHRtbFxuICBjb25zdCBUWVBFID0ge1xuICAgIG1hdGNoOiBsb29rYWhlYWQoL1xcYltBLVpdLyksXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vIENvbW1vbiBBcHBsZSBmcmFtZXdvcmtzLCBmb3IgcmVsZXZhbmNlIGJvb3N0XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBtYXRjaDogY29uY2F0KC8oQVZ8Q0F8Q0Z8Q0d8Q0l8Q0x8Q018Q058Q1R8TUt8TVB8TVRLfE1UTHxOU3xTQ058U0t8VUl8V0t8WEMpLywgaWRlbnRpZmllckNoYXJhY3RlciwgJysnKVxuICAgICAgfSxcbiAgICAgIHsgLy8gVHlwZSBpZGVudGlmaWVyXG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBtYXRjaDogdHlwZUlkZW50aWZpZXIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gT3B0aW9uYWwgdHlwZVxuICAgICAgICBtYXRjaDogL1s/IV0rLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBWYXJpYWRpYyBwYXJhbWV0ZXJcbiAgICAgICAgbWF0Y2g6IC9cXC5cXC5cXC4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIFByb3RvY29sIGNvbXBvc2l0aW9uXG4gICAgICAgIG1hdGNoOiBjb25jYXQoL1xccysmXFxzKy8sIGxvb2thaGVhZCh0eXBlSWRlbnRpZmllcikpLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IEdFTkVSSUNfQVJHVU1FTlRTID0ge1xuICAgIGJlZ2luOiAvPC8sXG4gICAgZW5kOiAvPi8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAuLi5DT01NRU5UUyxcbiAgICAgIC4uLktFWVdPUkRfTU9ERVMsXG4gICAgICAuLi5BVFRSSUJVVEVTLFxuICAgICAgT1BFUkFUT1JfR1VBUkQsXG4gICAgICBUWVBFXG4gICAgXVxuICB9O1xuICBUWVBFLmNvbnRhaW5zLnB1c2goR0VORVJJQ19BUkdVTUVOVFMpO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvRXhwcmVzc2lvbnMuaHRtbCNJRDU1MlxuICAvLyBQcmV2ZW50cyBlbGVtZW50IG5hbWVzIGZyb20gYmVpbmcgaGlnaGxpZ2h0ZWQgYXMga2V5d29yZHMuXG4gIGNvbnN0IFRVUExFX0VMRU1FTlRfTkFNRSA9IHtcbiAgICBtYXRjaDogY29uY2F0KGlkZW50aWZpZXIsIC9cXHMqOi8pLFxuICAgIGtleXdvcmRzOiBcIl98MFwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICAvLyBNYXRjaGVzIHR1cGxlcyBhcyB3ZWxsIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiBhIGZ1bmN0aW9uIHR5cGUuXG4gIGNvbnN0IFRVUExFID0ge1xuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgICdzZWxmJyxcbiAgICAgIFRVUExFX0VMRU1FTlRfTkFNRSxcbiAgICAgIC4uLkNPTU1FTlRTLFxuICAgICAgLi4uS0VZV09SRF9NT0RFUyxcbiAgICAgIC4uLkJVSUxUX0lOUyxcbiAgICAgIC4uLk9QRVJBVE9SUyxcbiAgICAgIE5VTUJFUixcbiAgICAgIFNUUklORyxcbiAgICAgIC4uLklERU5USUZJRVJTLFxuICAgICAgLi4uQVRUUklCVVRFUyxcbiAgICAgIFRZUEVcbiAgICBdXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9EZWNsYXJhdGlvbnMuaHRtbCNJRDM2MlxuICAvLyBNYXRjaGVzIGJvdGggdGhlIGtleXdvcmQgZnVuYyBhbmQgdGhlIGZ1bmN0aW9uIHRpdGxlLlxuICAvLyBHcm91cGluZyB0aGVzZSBsZXRzIHVzIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgb3BlcmF0b3IgZnVuY3Rpb24gPFxuICAvLyBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmljIHBhcmFtZXRlciBjbGF1c2UgKGFsc28gPCkuXG4gIGNvbnN0IEZVTkNfUExVU19USVRMRSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnZnVuYycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBtYXRjaDogZWl0aGVyKFFVT1RFRF9JREVOVElGSUVSLm1hdGNoLCBpZGVudGlmaWVyLCBvcGVyYXRvciksXG4gICAgICAgIC8vIFJlcXVpcmVkIHRvIG1ha2Ugc3VyZSB0aGUgb3BlbmluZyA8IG9mIHRoZSBnZW5lcmljIHBhcmFtZXRlciBjbGF1c2VcbiAgICAgICAgLy8gaXNuJ3QgcGFyc2VkIGFzIGEgc2Vjb25kIHRpdGxlLlxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBXSElURVNQQUNFXG4gICAgXVxuICB9O1xuICBjb25zdCBHRU5FUklDX1BBUkFNRVRFUlMgPSB7XG4gICAgYmVnaW46IC88LyxcbiAgICBlbmQ6IC8+LyxcbiAgICBjb250YWluczogW1xuICAgICAgLi4uQ09NTUVOVFMsXG4gICAgICBUWVBFXG4gICAgXVxuICB9O1xuICBjb25zdCBGVU5DVElPTl9QQVJBTUVURVJfTkFNRSA9IHtcbiAgICBiZWdpbjogZWl0aGVyKFxuICAgICAgbG9va2FoZWFkKGNvbmNhdChpZGVudGlmaWVyLCAvXFxzKjovKSksXG4gICAgICBsb29rYWhlYWQoY29uY2F0KGlkZW50aWZpZXIsIC9cXHMrLywgaWRlbnRpZmllciwgL1xccyo6LykpXG4gICAgKSxcbiAgICBlbmQ6IC86LyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIG1hdGNoOiAvXFxiX1xcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIG1hdGNoOiBpZGVudGlmaWVyXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBGVU5DVElPTl9QQVJBTUVURVJTID0ge1xuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgRlVOQ1RJT05fUEFSQU1FVEVSX05BTUUsXG4gICAgICAuLi5DT01NRU5UUyxcbiAgICAgIC4uLktFWVdPUkRfTU9ERVMsXG4gICAgICAuLi5PUEVSQVRPUlMsXG4gICAgICBOVU1CRVIsXG4gICAgICBTVFJJTkcsXG4gICAgICAuLi5BVFRSSUJVVEVTLFxuICAgICAgVFlQRSxcbiAgICAgIFRVUExFXG4gICAgXSxcbiAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgIGlsbGVnYWw6IC9bXCInXS9cbiAgfTtcbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIG1hdGNoOiBsb29rYWhlYWQoL1xcYmZ1bmNcXGIvKSxcbiAgICBjb250YWluczogW1xuICAgICAgRlVOQ19QTFVTX1RJVExFLFxuICAgICAgR0VORVJJQ19QQVJBTUVURVJTLFxuICAgICAgRlVOQ1RJT05fUEFSQU1FVEVSUyxcbiAgICAgIFdISVRFU1BBQ0VcbiAgICBdLFxuICAgIGlsbGVnYWw6IFtcbiAgICAgIC9cXFsvLFxuICAgICAgLyUvXG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvRGVjbGFyYXRpb25zLmh0bWwjSUQzNzVcbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9EZWNsYXJhdGlvbnMuaHRtbCNJRDM3OVxuICBjb25zdCBJTklUX1NVQlNDUklQVCA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgbWF0Y2g6IC9cXGIoc3Vic2NyaXB0fGluaXRbPyFdPylcXHMqKD89WzwoXSkvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBcInN1YnNjcmlwdCBpbml0IGluaXQ/IGluaXQhXCIsXG4gICAgICAkcGF0dGVybjogL1xcdytbPyFdPy9cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBHRU5FUklDX1BBUkFNRVRFUlMsXG4gICAgICBGVU5DVElPTl9QQVJBTUVURVJTLFxuICAgICAgV0hJVEVTUEFDRVxuICAgIF0sXG4gICAgaWxsZWdhbDogL1xcW3wlL1xuICB9O1xuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0RlY2xhcmF0aW9ucy5odG1sI0lEMzgwXG4gIGNvbnN0IE9QRVJBVE9SX0RFQ0xBUkFUSU9OID0ge1xuICAgIGJlZ2luS2V5d29yZHM6ICdvcGVyYXRvcicsXG4gICAgZW5kOiBobGpzLk1BVENIX05PVEhJTkdfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBtYXRjaDogb3BlcmF0b3IsXG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0RlY2xhcmF0aW9ucy5odG1sI0lENTUwXG4gIGNvbnN0IFBSRUNFREVOQ0VHUk9VUCA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAncHJlY2VkZW5jZWdyb3VwJyxcbiAgICBlbmQ6IGhsanMuTUFUQ0hfTk9USElOR19SRSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIG1hdGNoOiB0eXBlSWRlbnRpZmllcixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL3svLFxuICAgICAgICBlbmQ6IC99LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogW1xuICAgICAgICAgIC4uLnByZWNlZGVuY2Vncm91cEtleXdvcmRzLFxuICAgICAgICAgIC4uLmxpdGVyYWxzXG4gICAgICAgIF0sXG4gICAgICAgIGNvbnRhaW5zOiBbIFRZUEUgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBBZGQgc3VwcG9ydGVkIHN1Ym1vZGVzIHRvIHN0cmluZyBpbnRlcnBvbGF0aW9uLlxuICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgU1RSSU5HLnZhcmlhbnRzKSB7XG4gICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IHZhcmlhbnQuY29udGFpbnMuZmluZChtb2RlID0+IG1vZGUubGFiZWwgPT09IFwiaW50ZXJwb2xcIik7XG4gICAgLy8gVE9ETzogSW50ZXJwb2xhdGlvbiBjYW4gY29udGFpbiBhbnkgZXhwcmVzc2lvbiwgc28gdGhlcmUncyByb29tIGZvciBpbXByb3ZlbWVudCBoZXJlLlxuICAgIGludGVycG9sYXRpb24ua2V5d29yZHMgPSBLRVlXT1JEUztcbiAgICBjb25zdCBzdWJtb2RlcyA9IFtcbiAgICAgIC4uLktFWVdPUkRfTU9ERVMsXG4gICAgICAuLi5CVUlMVF9JTlMsXG4gICAgICAuLi5PUEVSQVRPUlMsXG4gICAgICBOVU1CRVIsXG4gICAgICBTVFJJTkcsXG4gICAgICAuLi5JREVOVElGSUVSU1xuICAgIF07XG4gICAgaW50ZXJwb2xhdGlvbi5jb250YWlucyA9IFtcbiAgICAgIC4uLnN1Ym1vZGVzLFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIC4uLnN1Ym1vZGVzXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU3dpZnQnLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgLi4uQ09NTUVOVFMsXG4gICAgICBGVU5DVElPTixcbiAgICAgIElOSVRfU1VCU0NSSVBULFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdHJ1Y3QgcHJvdG9jb2wgY2xhc3MgZXh0ZW5zaW9uIGVudW0nLFxuICAgICAgICBlbmQ6ICdcXFxceycsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBiZWdpbjogL1tBLVphLXokX11bXFx1MDBDMC1cXHUwMkI4MC05QS1aYS16JF9dKi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi5LRVlXT1JEX01PREVTXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBPUEVSQVRPUl9ERUNMQVJBVElPTixcbiAgICAgIFBSRUNFREVOQ0VHUk9VUCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogWyAuLi5DT01NRU5UUyBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAuLi5LRVlXT1JEX01PREVTLFxuICAgICAgLi4uQlVJTFRfSU5TLFxuICAgICAgLi4uT1BFUkFUT1JTLFxuICAgICAgTlVNQkVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgLi4uSURFTlRJRklFUlMsXG4gICAgICAuLi5BVFRSSUJVVEVTLFxuICAgICAgVFlQRSxcbiAgICAgIFRVUExFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN3aWZ0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFRhZ2dlciBTY3JpcHRcbkF1dGhvcjogUGhpbGlwcCBXb2xmZXIgPHBoLndvbGZlckBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogU3ludGF4IEhpZ2hsaWdodGluZyBmb3IgdGhlIFRhZ2dlciBTY3JpcHQgYXMgdXNlZCBieSBNdXNpY0JyYWlueiBQaWNhcmQuXG5XZWJzaXRlOiBodHRwczovL3BpY2FyZC5tdXNpY2JyYWluei5vcmdcbiAqL1xuZnVuY3Rpb24gdGFnZ2Vyc2NyaXB0KGhsanMpIHtcbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICBiZWdpbjogL1xcJG5vb3BcXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgY29udGFpbnM6IFsge1xuICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgZW5kOiAvXFwpLyxcbiAgICAgIGNvbnRhaW5zOiBbICdzZWxmJyxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXFxcXC4vXG4gICAgICAgIH0gXVxuICAgIH0gXSxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC9cXCQoPyFub29wKVthLXpBLVpdW19hLXpBLVowLTldKi8sXG4gICAgZW5kOiAvXFwoLyxcbiAgICBleGNsdWRlRW5kOiB0cnVlXG4gIH07XG5cbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvJVtfYS16QS1aMC05Ol0qLyxcbiAgICBlbmQ6ICclJ1xuICB9O1xuXG4gIGNvbnN0IEVTQ0FQRV9TRVFVRU5DRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAvXFxcXC4vXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVGFnZ2VyIFNjcmlwdCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1FTlQsXG4gICAgICBGVU5DVElPTixcbiAgICAgIFZBUklBQkxFLFxuICAgICAgRVNDQVBFX1NFUVVFTkNFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRhZ2dlcnNjcmlwdDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBZQU1MXG5EZXNjcmlwdGlvbjogWWV0IEFub3RoZXIgTWFya2Rvd24gTGFuZ3VhZ2VcbkF1dGhvcjogU3RlZmFuIFdpZW5lcnQgPHN0d2llbmVydEBnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IENhcmwgQmF4dGVyIDxjYXJsQGNiYXgudGVjaD5cblJlcXVpcmVzOiBydWJ5LmpzXG5XZWJzaXRlOiBodHRwczovL3lhbWwub3JnXG5DYXRlZ29yeTogY29tbW9uLCBjb25maWdcbiovXG5mdW5jdGlvbiB5YW1sKGhsanMpIHtcbiAgdmFyIExJVEVSQUxTID0gJ3RydWUgZmFsc2UgeWVzIG5vIG51bGwnO1xuXG4gIC8vIFlBTUwgc3BlYyBhbGxvd3Mgbm9uLXJlc2VydmVkIFVSSSBjaGFyYWN0ZXJzIGluIHRhZ3MuXG4gIHZhciBVUklfQ0hBUkFDVEVSUyA9ICdbXFxcXHcjOy8/OkAmPSskLC5+KlxcJygpW1xcXFxdXSsnO1xuXG4gIC8vIERlZmluZSBrZXlzIGFzIHN0YXJ0aW5nIHdpdGggYSB3b3JkIGNoYXJhY3RlclxuICAvLyAuLi5jb250YWluaW5nIHdvcmQgY2hhcnMsIHNwYWNlcywgY29sb25zLCBmb3J3YXJkLXNsYXNoZXMsIGh5cGhlbnMgYW5kIHBlcmlvZHNcbiAgLy8gLi4uYW5kIGVuZGluZyB3aXRoIGEgY29sb24gZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYSBzcGFjZSwgdGFiIG9yIG5ld2xpbmUuXG4gIC8vIFRoZSBZQU1MIHNwZWMgYWxsb3dzIGZvciBtdWNoIG1vcmUgdGhhbiB0aGlzLCBidXQgdGhpcyBjb3ZlcnMgbW9zdCB1c2UtY2FzZXMuXG4gIHZhciBLRVkgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcd1tcXFxcdyA6XFxcXC8uLV0qOig/PVsgXFx0XXwkKScgfSxcbiAgICAgIHsgYmVnaW46ICdcIlxcXFx3W1xcXFx3IDpcXFxcLy4tXSpcIjooPz1bIFxcdF18JCknIH0sIC8vIGRvdWJsZSBxdW90ZWQga2V5c1xuICAgICAgeyBiZWdpbjogJ1xcJ1xcXFx3W1xcXFx3IDpcXFxcLy4tXSpcXCc6KD89WyBcXHRdfCQpJyB9IC8vIHNpbmdsZSBxdW90ZWQga2V5c1xuICAgIF1cbiAgfTtcblxuICB2YXIgVEVNUExBVEVfVkFSSUFCTEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogL1xce1xcey8sIGVuZDogL1xcfVxcfS8gfSwgLy8gamluamEgdGVtcGxhdGVzIEFuc2libGVcbiAgICAgIHsgYmVnaW46IC8lXFx7LywgZW5kOiAvXFx9LyB9IC8vIFJ1YnkgaTE4blxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogLycvLCBlbmQ6IC8nLyB9LFxuICAgICAgeyBiZWdpbjogL1wiLywgZW5kOiAvXCIvIH0sXG4gICAgICB7IGJlZ2luOiAvXFxTKy8gfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFRFTVBMQVRFX1ZBUklBQkxFU1xuICAgIF1cbiAgfTtcblxuICAvLyBTdHJpbmdzIGluc2lkZSBvZiB2YWx1ZSBjb250YWluZXJzIChvYmplY3RzKSBjYW4ndCBjb250YWluIGJyYWNlcyxcbiAgLy8gYnJhY2tldHMsIG9yIGNvbW1hc1xuICB2YXIgQ09OVEFJTkVSX1NUUklORyA9IGhsanMuaW5oZXJpdChTVFJJTkcsIHtcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogLycvLCBlbmQ6IC8nLyB9LFxuICAgICAgeyBiZWdpbjogL1wiLywgZW5kOiAvXCIvIH0sXG4gICAgICB7IGJlZ2luOiAvW15cXHMse31bXFxdXSsvIH1cbiAgICBdXG4gIH0pO1xuXG4gIHZhciBEQVRFX1JFID0gJ1swLTldezR9KC1bMC05XVswLTldKXswLDJ9JztcbiAgdmFyIFRJTUVfUkUgPSAnKFtUdCBcXFxcdF1bMC05XVswLTldPyg6WzAtOV1bMC05XSl7Mn0pPyc7XG4gIHZhciBGUkFDVElPTl9SRSA9ICcoXFxcXC5bMC05XSopPyc7XG4gIHZhciBaT05FX1JFID0gJyhbIFxcXFx0XSkqKFp8Wy0rXVswLTldWzAtOV0/KDpbMC05XVswLTldKT8pPyc7XG4gIHZhciBUSU1FU1RBTVAgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiJyArIERBVEVfUkUgKyBUSU1FX1JFICsgRlJBQ1RJT05fUkUgKyBaT05FX1JFICsgJ1xcXFxiJ1xuICB9O1xuXG4gIHZhciBWQUxVRV9DT05UQUlORVIgPSB7XG4gICAgZW5kOiAnLCcsXG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogTElURVJBTFMsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBPQkpFQ1QgPSB7XG4gICAgYmVnaW46IC9cXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAgY29udGFpbnM6IFtWQUxVRV9DT05UQUlORVJdLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBBUlJBWSA9IHtcbiAgICBiZWdpbjogJ1xcXFxbJyxcbiAgICBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtWQUxVRV9DT05UQUlORVJdLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIE1PREVTID0gW1xuICAgIEtFWSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnXi0tLVxcXFxzKiQnLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAgeyAvLyBtdWx0aSBsaW5lIHN0cmluZ1xuICAgICAgLy8gQmxvY2tzIHN0YXJ0IHdpdGggYSB8IG9yID4gZm9sbG93ZWQgYnkgYSBuZXdsaW5lXG4gICAgICAvL1xuICAgICAgLy8gSW5kZW50YXRpb24gb2Ygc3Vic2VxdWVudCBsaW5lcyBtdXN0IGJlIHRoZSBzYW1lIHRvXG4gICAgICAvLyBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGJsb2NrXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46ICdbXFxcXHw+XShbMS05XT9bKy1dKT9bIF0qXFxcXG4oICspW14gXVteXFxcXG5dKlxcXFxuKFxcXFwyW15cXFxcbl0rXFxcXG4/KSonXG4gICAgfSxcbiAgICB7IC8vIFJ1YnkvUmFpbHMgZXJiXG4gICAgICBiZWdpbjogJzwlWyU9LV0/JyxcbiAgICAgIGVuZDogJ1slLV0/JT4nLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHsgLy8gbmFtZWQgdGFnc1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogJyFcXFxcdyshJyArIFVSSV9DSEFSQUNURVJTXG4gICAgfSxcbiAgICAvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI3ODQwNjRcbiAgICB7IC8vIHZlcmJhdGltIHRhZ3NcbiAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgYmVnaW46ICchPCcgKyBVUklfQ0hBUkFDVEVSUyArIFwiPlwiXG4gICAgfSxcbiAgICB7IC8vIHByaW1hcnkgdGFnc1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogJyEnICsgVVJJX0NIQVJBQ1RFUlNcbiAgICB9LFxuICAgIHsgLy8gc2Vjb25kYXJ5IHRhZ3NcbiAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgYmVnaW46ICchIScgKyBVUklfQ0hBUkFDVEVSU1xuICAgIH0sXG4gICAgeyAvLyBmcmFnbWVudCBpZCAmcmVmXG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnJicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnJCdcbiAgICB9LFxuICAgIHsgLy8gZnJhZ21lbnQgcmVmZXJlbmNlICpyZWZcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICdcXFxcKicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnJCdcbiAgICB9LFxuICAgIHsgLy8gYXJyYXkgbGlzdGluZ1xuICAgICAgY2xhc3NOYW1lOiAnYnVsbGV0JyxcbiAgICAgIC8vIFRPRE86IHJlbW92ZSB8JCBoYWNrIHdoZW4gd2UgaGF2ZSBwcm9wZXIgbG9vay1haGVhZCBzdXBwb3J0XG4gICAgICBiZWdpbjogJy0oPz1bIF18JCknLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGJlZ2luS2V5d29yZHM6IExJVEVSQUxTLFxuICAgICAga2V5d29yZHM6IHsgbGl0ZXJhbDogTElURVJBTFMgfVxuICAgIH0sXG4gICAgVElNRVNUQU1QLFxuICAgIC8vIG51bWJlcnMgYXJlIGFueSB2YWxpZCBDLXN0eWxlIG51bWJlciB0aGF0XG4gICAgLy8gc2l0IGlzb2xhdGVkIGZyb20gb3RoZXIgd29yZHNcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnXFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBPQkpFQ1QsXG4gICAgQVJSQVksXG4gICAgU1RSSU5HXG4gIF07XG5cbiAgdmFyIFZBTFVFX01PREVTID0gWy4uLk1PREVTXTtcbiAgVkFMVUVfTU9ERVMucG9wKCk7XG4gIFZBTFVFX01PREVTLnB1c2goQ09OVEFJTkVSX1NUUklORyk7XG4gIFZBTFVFX0NPTlRBSU5FUi5jb250YWlucyA9IFZBTFVFX01PREVTO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1lBTUwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWyAneW1sJyBdLFxuICAgIGNvbnRhaW5zOiBNT0RFU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHlhbWw7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogVGVzdCBBbnl0aGluZyBQcm90b2NvbFxuRGVzY3JpcHRpb246IFRBUCwgdGhlIFRlc3QgQW55dGhpbmcgUHJvdG9jb2wsIGlzIGEgc2ltcGxlIHRleHQtYmFzZWQgaW50ZXJmYWNlIGJldHdlZW4gdGVzdGluZyBtb2R1bGVzIGluIGEgdGVzdCBoYXJuZXNzLlxuUmVxdWlyZXM6IHlhbWwuanNcbkF1dGhvcjogU2VyZ2V5IEJyb25uaWtvdiA8c2VyZ2V5YkBicm9uZXZpY2hvay5ydT5cbldlYnNpdGU6IGh0dHBzOi8vdGVzdGFueXRoaW5nLm9yZ1xuKi9cblxuZnVuY3Rpb24gdGFwKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVGVzdCBBbnl0aGluZyBQcm90b2NvbCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIC8vIHZlcnNpb24gb2YgZm9ybWF0IGFuZCB0b3RhbCBhbW91bnQgb2YgdGVzdGNhc2VzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXlRBUCB2ZXJzaW9uIChcXFxcZCspJCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXjFcXFxcLlxcXFwuKFxcXFxkKykkJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIFlBTUwgYmxvY2tcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8tLS0kLyxcbiAgICAgICAgZW5kOiAnXFxcXC5cXFxcLlxcXFwuJCcsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAneWFtbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIHRlc3RjYXNlIG51bWJlclxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJyAoXFxcXGQrKSAnXG4gICAgICB9LFxuICAgICAgLy8gdGVzdGNhc2Ugc3RhdHVzIGFuZCBkZXNjcmlwdGlvblxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXm9rJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdebm90IG9rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0YXA7XG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbmFsKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJygnLCByZSwgJyk/Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogVGNsXG5EZXNjcmlwdGlvbjogVGNsIGlzIGEgdmVyeSBzaW1wbGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuXG5BdXRob3I6IFJhZGVrIExpc2thIDxyYWRla2xpc2thQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnRjbC50ay9hYm91dC9sYW5ndWFnZS5odG1sXG4qL1xuXG5mdW5jdGlvbiB0Y2woaGxqcykge1xuICBjb25zdCBUQ0xfSURFTlQgPSAvW2EtekEtWl9dW2EtekEtWjAtOV9dKi87XG5cbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1RjbCcsXG4gICAgYWxpYXNlczogWyd0ayddLFxuICAgIGtleXdvcmRzOiAnYWZ0ZXIgYXBwZW5kIGFwcGx5IGFycmF5IGF1dG9fZXhlY29rIGF1dG9faW1wb3J0IGF1dG9fbG9hZCBhdXRvX21raW5kZXggJyArXG4gICAgICAnYXV0b19ta2luZGV4X29sZCBhdXRvX3F1YWxpZnkgYXV0b19yZXNldCBiZ2Vycm9yIGJpbmFyeSBicmVhayBjYXRjaCBjZCBjaGFuIGNsb2NrICcgK1xuICAgICAgJ2Nsb3NlIGNvbmNhdCBjb250aW51ZSBkZGUgZGljdCBlbmNvZGluZyBlb2YgZXJyb3IgZXZhbCBleGVjIGV4aXQgZXhwciBmYmxvY2tlZCAnICtcbiAgICAgICdmY29uZmlndXJlIGZjb3B5IGZpbGUgZmlsZWV2ZW50IGZpbGVuYW1lIGZsdXNoIGZvciBmb3JlYWNoIGZvcm1hdCBnZXRzIGdsb2IgZ2xvYmFsICcgK1xuICAgICAgJ2hpc3RvcnkgaHR0cCBpZiBpbmNyIGluZm8gaW50ZXJwIGpvaW4gbGFwcGVuZHwxMCBsYXNzaWdufDEwIGxpbmRleHwxMCBsaW5zZXJ0fDEwIGxpc3QgJyArXG4gICAgICAnbGxlbmd0aHwxMCBsb2FkIGxyYW5nZXwxMCBscmVwZWF0fDEwIGxyZXBsYWNlfDEwIGxyZXZlcnNlfDEwIGxzZWFyY2h8MTAgbHNldHwxMCBsc29ydHwxMCAnK1xuICAgICAgJ21hdGhmdW5jIG1hdGhvcCBtZW1vcnkgbXNnY2F0IG5hbWVzcGFjZSBvcGVuIHBhY2thZ2UgcGFycmF5IHBpZCBwa2c6OmNyZWF0ZSBwa2dfbWtJbmRleCAnK1xuICAgICAgJ3BsYXRmb3JtIHBsYXRmb3JtOjpzaGVsbCBwcm9jIHB1dHMgcHdkIHJlYWQgcmVmY2hhbiByZWdleHAgcmVnaXN0cnkgcmVnc3VifDEwIHJlbmFtZSAnK1xuICAgICAgJ3JldHVybiBzYWZlIHNjYW4gc2VlayBzZXQgc29ja2V0IHNvdXJjZSBzcGxpdCBzdHJpbmcgc3Vic3Qgc3dpdGNoIHRjbF9lbmRPZldvcmQgJytcbiAgICAgICd0Y2xfZmluZExpYnJhcnkgdGNsX3N0YXJ0T2ZOZXh0V29yZCB0Y2xfc3RhcnRPZlByZXZpb3VzV29yZCB0Y2xfd29yZEJyZWFrQWZ0ZXIgJytcbiAgICAgICd0Y2xfd29yZEJyZWFrQmVmb3JlIHRjbHRlc3QgdGNsdmFycyB0ZWxsIHRpbWUgdG0gdHJhY2UgdW5rbm93biB1bmxvYWQgdW5zZXQgdXBkYXRlICcrXG4gICAgICAndXBsZXZlbCB1cHZhciB2YXJpYWJsZSB2d2FpdCB3aGlsZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnO1sgXFxcXHRdKiMnLCAnJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKCdeWyBcXFxcdF0qIycsICckJyksXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwcm9jJyxcbiAgICAgICAgZW5kOiAnW1xcXFx7XScsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgYmVnaW46ICdbIFxcXFx0XFxcXG5cXFxccl0rKDo6KT9bYS16QS1aX10oKDo6KT9bYS16QS1aMC05X10pKicsXG4gICAgICAgICAgICBlbmQ6ICdbIFxcXFx0XFxcXG5cXFxccl0nLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6IFwidmFyaWFibGVcIixcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogY29uY2F0KFxuICAgICAgICAgICAgICAvXFwkLyxcbiAgICAgICAgICAgICAgb3B0aW9uYWwoLzo6LyksXG4gICAgICAgICAgICAgIFRDTF9JREVOVCxcbiAgICAgICAgICAgICAgJyg6OicsXG4gICAgICAgICAgICAgIFRDTF9JREVOVCxcbiAgICAgICAgICAgICAgJykqJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7KDo6KT9bYS16QS1aX10oKDo6KT9bYS16QS1aMC05X10pKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcfScsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBOVU1CRVJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGNsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFRocmlmdFxuQXV0aG9yOiBPbGVnIEVmaW1vdiA8ZWZpbW92b3ZAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IFRocmlmdCBtZXNzYWdlIGRlZmluaXRpb24gZm9ybWF0XG5XZWJzaXRlOiBodHRwczovL3RocmlmdC5hcGFjaGUub3JnXG5DYXRlZ29yeTogcHJvdG9jb2xzXG4qL1xuXG5mdW5jdGlvbiB0aHJpZnQoaGxqcykge1xuICBjb25zdCBCVUlMVF9JTl9UWVBFUyA9ICdib29sIGJ5dGUgaTE2IGkzMiBpNjQgZG91YmxlIHN0cmluZyBiaW5hcnknO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUaHJpZnQnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnbmFtZXNwYWNlIGNvbnN0IHR5cGVkZWYgc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24gdm9pZCBvbmV3YXkgc2V0IGxpc3QgbWFwIHJlcXVpcmVkIG9wdGlvbmFsJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICBCVUlMVF9JTl9UWVBFUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24nLFxuICAgICAgICBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICAvLyBoYWNrOiBlYXRpbmcgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgdGl0bGVcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoc2V0fGxpc3R8bWFwKVxcXFxzKjwnLFxuICAgICAgICBlbmQ6ICc+JyxcbiAgICAgICAga2V5d29yZHM6IEJVSUxUX0lOX1RZUEVTLFxuICAgICAgICBjb250YWluczogWyAnc2VsZicgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0aHJpZnQ7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogVFBcbkF1dGhvcjogSmF5IFN0cnliaXMgPGpheS5zdHJ5YmlzQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBGQU5VQyBUUCBwcm9ncmFtbWluZyBsYW5ndWFnZSAoVFBQKS5cbiovXG5cbmZ1bmN0aW9uIHRwKGhsanMpIHtcbiAgY29uc3QgVFBJRCA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnWzEtOV1bMC05XSonLCAvKiBubyBsZWFkaW5nIHplcm9zICovXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFRQTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJzpbXlxcXFxdXSsnXG4gIH07XG4gIGNvbnN0IFRQREFUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICcoQVJ8UHxQQVlMT0FEfFBSfFJ8U1J8UlNSfExCTHxWUnxVQUxNfE1FU1NBR0V8VVRPT0x8VUZSQU1FfFRJTUVSfCcgK1xuICAgICdUSU1FUl9PVkVSRkxPV3xKT0lOVF9NQVhfU1BFRUR8UkVTVU1FX1BST0d8RElBR19SRUMpXFxcXFsnLFxuICAgIGVuZDogJ1xcXFxdJyxcbiAgICBjb250YWluczogW1xuICAgICAgJ3NlbGYnLFxuICAgICAgVFBJRCxcbiAgICAgIFRQTEFCRUxcbiAgICBdXG4gIH07XG4gIGNvbnN0IFRQSU8gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnKEFJfEFPfERJfERPfEZ8Ukl8Uk98VUl8VU98R0l8R098U0l8U08pXFxcXFsnLFxuICAgIGVuZDogJ1xcXFxdJyxcbiAgICBjb250YWluczogW1xuICAgICAgJ3NlbGYnLFxuICAgICAgVFBJRCxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsIC8qIGZvciBwb3Mgc2VjdGlvbiBhdCBib3R0b20gKi9cbiAgICAgIFRQTEFCRUxcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVFAnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnQUJPUlQgQUNDIEFESlVTVCBBTkQgQVBfTEQgQlJFQUsgQ0FMTCBDTlQgQ09MIENPTkRJVElPTiBDT05GSUcgREEgREIgJyArXG4gICAgICAgICdESVYgREVURUNUIEVMU0UgRU5EIEVOREZPUiBFUlJfTlVNIEVSUk9SX1BST0cgRklORSBGT1IgR1AgR1VBUkQgSU5DICcgK1xuICAgICAgICAnSUYgSk1QIExJTkVBUl9NQVhfU1BFRUQgTE9DSyBNT0QgTU9OSVRPUiBPRkZTRVQgT2Zmc2V0IE9SIE9WRVJSSURFICcgK1xuICAgICAgICAnUEFVU0UgUFJFRyBQVEggUlRfTEQgUlVOIFNFTEVDVCBTS0lQIFNraXAgVEEgVEIgVE8gVE9PTF9PRkZTRVQgJyArXG4gICAgICAgICdUb29sX09mZnNldCBVRiBVVCBVRlJBTUVfTlVNIFVUT09MX05VTSBVTkxPQ0sgV0FJVCBYIFkgWiBXIFAgUiBTVFJMRU4gJyArXG4gICAgICAgICdTVUJTVFIgRklORFNUUiBWT0ZGU0VUIFBST0cgQVRUUiBNTiBQT1MnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ09OIE9GRiBtYXhfc3BlZWQgTFBPUyBKUE9TIEVOQUJMRSBESVNBQkxFIFNUQVJUIFNUT1AgUkVTRVQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVFBEQVRBLFxuICAgICAgVFBJTyxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnLyhQUk9HfEFUVFJ8TU58UE9TfEVORClcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIHRoaXMgaXMgZm9yIGNhc2VzIGxpa2UgLENBTEwgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnKENBTEx8UlVOfFBPSU5UX0xPR0lDfExCTClcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIHRoaXMgaXMgZm9yIGNhc2VzIGxpa2UgQ05UMTAwIHdoZXJlIHRoZSBkZWZhdWx0IGxleGVtZXMgZG8gbm90XG4gICAgICAgICAqIHNlcGFyYXRlIHRoZSBrZXl3b3JkIGFuZCB0aGUgbnVtYmVyICovXG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKEFDQ3xDTlR8U2tpcHxPZmZzZXR8UFNQRHxSVF9MRHxBUF9MRHxUb29sX09mZnNldCknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvKiB0byBjYXRjaCBudW1iZXJzIHRoYXQgZG8gbm90IGhhdmUgYSB3b3JkIGJvdW5kYXJ5IG9uIHRoZSBsZWZ0ICovXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGQrKHNlY3xtc2VjfG1tL3NlY3xjbS9taW58aW5jaC9taW58ZGVnL3NlY3xtbXxpbnxjbSk/XFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJ1s7JF0nKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnIScsICdbOyRdJyksXG4gICAgICBobGpzLkNPTU1FTlQoJy0tZWc6JywgJyQnKSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFwkW0EtWmEtejAtOV9dKydcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHA7XG4iLAogICAgIi8qXG5MYW5ndWFnZTogVHdpZ1xuUmVxdWlyZXM6IHhtbC5qc1xuQXV0aG9yOiBMdWtlIEhvbGRlciA8bHVrZW1oQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBUd2lnIGlzIGEgdGVtcGxhdGluZyBsYW5ndWFnZSBmb3IgUEhQXG5XZWJzaXRlOiBodHRwczovL3R3aWcuc3ltZm9ueS5jb21cbkNhdGVnb3J5OiB0ZW1wbGF0ZVxuKi9cblxuZnVuY3Rpb24gdHdpZyhobGpzKSB7XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gIH07XG5cbiAgdmFyIEZVTkNUSU9OX05BTUVTID0gJ2F0dHJpYnV0ZSBibG9jayBjb25zdGFudCBjeWNsZSBkYXRlIGR1bXAgaW5jbHVkZSAnICtcbiAgICAgICAgICAgICAgICAgICdtYXggbWluIHBhcmVudCByYW5kb20gcmFuZ2Ugc291cmNlIHRlbXBsYXRlX2Zyb21fc3RyaW5nJztcblxuICB2YXIgRlVOQ1RJT05TID0ge1xuICAgIGJlZ2luS2V5d29yZHM6IEZVTkNUSU9OX05BTUVTLFxuICAgIGtleXdvcmRzOiB7bmFtZTogRlVOQ1RJT05fTkFNRVN9LFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgUEFSQU1TXG4gICAgXVxuICB9O1xuXG4gIHZhciBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16X10rOj8vLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2FicyBiYXRjaCBjYXBpdGFsaXplIGNvbHVtbiBjb252ZXJ0X2VuY29kaW5nIGRhdGUgZGF0ZV9tb2RpZnkgZGVmYXVsdCAnICtcbiAgICAgICdlc2NhcGUgZmlsdGVyIGZpcnN0IGZvcm1hdCBpbmt5X3RvX2h0bWwgaW5saW5lX2NzcyBqb2luIGpzb25fZW5jb2RlIGtleXMgbGFzdCAnICtcbiAgICAgICdsZW5ndGggbG93ZXIgbWFwIG1hcmtkb3duIG1lcmdlIG5sMmJyIG51bWJlcl9mb3JtYXQgcmF3IHJlZHVjZSByZXBsYWNlICcgK1xuICAgICAgJ3JldmVyc2Ugcm91bmQgc2xpY2Ugc29ydCBzcGFjZWxlc3Mgc3BsaXQgc3RyaXB0YWdzIHRpdGxlIHRyaW0gdXBwZXIgdXJsX2VuY29kZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEZVTkNUSU9OU1xuICAgIF1cbiAgfTtcblxuICB2YXIgVEFHUyA9ICdhcHBseSBhdXRvZXNjYXBlIGJsb2NrIGRlcHJlY2F0ZWQgZG8gZW1iZWQgZXh0ZW5kcyBmaWx0ZXIgZmx1c2ggZm9yIGZyb20gJyArXG4gICAgJ2lmIGltcG9ydCBpbmNsdWRlIG1hY3JvIHNhbmRib3ggc2V0IHVzZSB2ZXJiYXRpbSB3aXRoJztcblxuICBUQUdTID0gVEFHUyArICcgJyArIFRBR1Muc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICdlbmQnICsgdH0pLmpvaW4oJyAnKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUd2lnJyxcbiAgICBhbGlhc2VzOiBbJ2NyYWZ0Y21zJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7Iy8sIC8jXFx9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyVcXH0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgYmVnaW46IC9cXHcrLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBUQUdTLFxuICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICBjb250YWluczogW0ZJTFRFUiwgRlVOQ1RJT05TXSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIEZJTFRFUiwgRlVOQ1RJT05TXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0d2lnO1xuIiwKICAgICJjb25zdCBJREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuY29uc3QgS0VZV09SRFMgPSBbXG4gIFwiYXNcIiwgLy8gZm9yIGV4cG9ydHNcbiAgXCJpblwiLFxuICBcIm9mXCIsXG4gIFwiaWZcIixcbiAgXCJmb3JcIixcbiAgXCJ3aGlsZVwiLFxuICBcImZpbmFsbHlcIixcbiAgXCJ2YXJcIixcbiAgXCJuZXdcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImRvXCIsXG4gIFwicmV0dXJuXCIsXG4gIFwidm9pZFwiLFxuICBcImVsc2VcIixcbiAgXCJicmVha1wiLFxuICBcImNhdGNoXCIsXG4gIFwiaW5zdGFuY2VvZlwiLFxuICBcIndpdGhcIixcbiAgXCJ0aHJvd1wiLFxuICBcImNhc2VcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwidHJ5XCIsXG4gIFwic3dpdGNoXCIsXG4gIFwiY29udGludWVcIixcbiAgXCJ0eXBlb2ZcIixcbiAgXCJkZWxldGVcIixcbiAgXCJsZXRcIixcbiAgXCJ5aWVsZFwiLFxuICBcImNvbnN0XCIsXG4gIFwiY2xhc3NcIixcbiAgLy8gSlMgaGFuZGxlcyB0aGVzZSB3aXRoIGEgc3BlY2lhbCBydWxlXG4gIC8vIFwiZ2V0XCIsXG4gIC8vIFwic2V0XCIsXG4gIFwiZGVidWdnZXJcIixcbiAgXCJhc3luY1wiLFxuICBcImF3YWl0XCIsXG4gIFwic3RhdGljXCIsXG4gIFwiaW1wb3J0XCIsXG4gIFwiZnJvbVwiLFxuICBcImV4cG9ydFwiLFxuICBcImV4dGVuZHNcIlxuXTtcbmNvbnN0IExJVEVSQUxTID0gW1xuICBcInRydWVcIixcbiAgXCJmYWxzZVwiLFxuICBcIm51bGxcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJOYU5cIixcbiAgXCJJbmZpbml0eVwiXG5dO1xuXG5jb25zdCBUWVBFUyA9IFtcbiAgXCJJbnRsXCIsXG4gIFwiRGF0YVZpZXdcIixcbiAgXCJOdW1iZXJcIixcbiAgXCJNYXRoXCIsXG4gIFwiRGF0ZVwiLFxuICBcIlN0cmluZ1wiLFxuICBcIlJlZ0V4cFwiLFxuICBcIk9iamVjdFwiLFxuICBcIkZ1bmN0aW9uXCIsXG4gIFwiQm9vbGVhblwiLFxuICBcIkVycm9yXCIsXG4gIFwiU3ltYm9sXCIsXG4gIFwiU2V0XCIsXG4gIFwiTWFwXCIsXG4gIFwiV2Vha1NldFwiLFxuICBcIldlYWtNYXBcIixcbiAgXCJQcm94eVwiLFxuICBcIlJlZmxlY3RcIixcbiAgXCJKU09OXCIsXG4gIFwiUHJvbWlzZVwiLFxuICBcIkZsb2F0NjRBcnJheVwiLFxuICBcIkludDE2QXJyYXlcIixcbiAgXCJJbnQzMkFycmF5XCIsXG4gIFwiSW50OEFycmF5XCIsXG4gIFwiVWludDE2QXJyYXlcIixcbiAgXCJVaW50MzJBcnJheVwiLFxuICBcIkZsb2F0MzJBcnJheVwiLFxuICBcIkFycmF5XCIsXG4gIFwiVWludDhBcnJheVwiLFxuICBcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXG4gIFwiQXJyYXlCdWZmZXJcIixcbiAgXCJCaWdJbnQ2NEFycmF5XCIsXG4gIFwiQmlnVWludDY0QXJyYXlcIixcbiAgXCJCaWdJbnRcIlxuXTtcblxuY29uc3QgRVJST1JfVFlQRVMgPSBbXG4gIFwiRXZhbEVycm9yXCIsXG4gIFwiSW50ZXJuYWxFcnJvclwiLFxuICBcIlJhbmdlRXJyb3JcIixcbiAgXCJSZWZlcmVuY2VFcnJvclwiLFxuICBcIlN5bnRheEVycm9yXCIsXG4gIFwiVHlwZUVycm9yXCIsXG4gIFwiVVJJRXJyb3JcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fR0xPQkFMUyA9IFtcbiAgXCJzZXRJbnRlcnZhbFwiLFxuICBcInNldFRpbWVvdXRcIixcbiAgXCJjbGVhckludGVydmFsXCIsXG4gIFwiY2xlYXJUaW1lb3V0XCIsXG5cbiAgXCJyZXF1aXJlXCIsXG4gIFwiZXhwb3J0c1wiLFxuXG4gIFwiZXZhbFwiLFxuICBcImlzRmluaXRlXCIsXG4gIFwiaXNOYU5cIixcbiAgXCJwYXJzZUZsb2F0XCIsXG4gIFwicGFyc2VJbnRcIixcbiAgXCJkZWNvZGVVUklcIixcbiAgXCJkZWNvZGVVUklDb21wb25lbnRcIixcbiAgXCJlbmNvZGVVUklcIixcbiAgXCJlbmNvZGVVUklDb21wb25lbnRcIixcbiAgXCJlc2NhcGVcIixcbiAgXCJ1bmVzY2FwZVwiXG5dO1xuXG5jb25zdCBCVUlMVF9JTl9WQVJJQUJMRVMgPSBbXG4gIFwiYXJndW1lbnRzXCIsXG4gIFwidGhpc1wiLFxuICBcInN1cGVyXCIsXG4gIFwiY29uc29sZVwiLFxuICBcIndpbmRvd1wiLFxuICBcImRvY3VtZW50XCIsXG4gIFwibG9jYWxTdG9yYWdlXCIsXG4gIFwibW9kdWxlXCIsXG4gIFwiZ2xvYmFsXCIgLy8gTm9kZS5qc1xuXTtcblxuY29uc3QgQlVJTFRfSU5TID0gW10uY29uY2F0KFxuICBCVUlMVF9JTl9HTE9CQUxTLFxuICBCVUlMVF9JTl9WQVJJQUJMRVMsXG4gIFRZUEVTLFxuICBFUlJPUl9UWVBFU1xuKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbG9va2FoZWFkKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJyg/PScsIHJlLCAnKScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKlxuTGFuZ3VhZ2U6IEphdmFTY3JpcHRcbkRlc2NyaXB0aW9uOiBKYXZhU2NyaXB0IChKUykgaXMgYSBsaWdodHdlaWdodCwgaW50ZXJwcmV0ZWQsIG9yIGp1c3QtaW4tdGltZSBjb21waWxlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aXRoIGZpcnN0LWNsYXNzIGZ1bmN0aW9ucy5cbkNhdGVnb3J5OiBjb21tb24sIHNjcmlwdGluZ1xuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGphdmFzY3JpcHQoaGxqcykge1xuICAvKipcbiAgICogVGFrZXMgYSBzdHJpbmcgbGlrZSBcIjxCb29nZXJcIiBhbmQgY2hlY2tzIHRvIHNlZVxuICAgKiBpZiB3ZSBjYW4gZmluZCBhIG1hdGNoaW5nIFwiPC9Cb29nZXJcIiBsYXRlciBpbiB0aGVcbiAgICogY29udGVudC5cbiAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgKiBAcGFyYW0ge3thZnRlcjpudW1iZXJ9fSBwYXJhbTFcbiAgICovXG4gIGNvbnN0IGhhc0Nsb3NpbmdUYWcgPSAobWF0Y2gsIHsgYWZ0ZXIgfSkgPT4ge1xuICAgIGNvbnN0IHRhZyA9IFwiPC9cIiArIG1hdGNoWzBdLnNsaWNlKDEpO1xuICAgIGNvbnN0IHBvcyA9IG1hdGNoLmlucHV0LmluZGV4T2YodGFnLCBhZnRlcik7XG4gICAgcmV0dXJuIHBvcyAhPT0gLTE7XG4gIH07XG5cbiAgY29uc3QgSURFTlRfUkUkMSA9IElERU5UX1JFO1xuICBjb25zdCBGUkFHTUVOVCA9IHtcbiAgICBiZWdpbjogJzw+JyxcbiAgICBlbmQ6ICc8Lz4nXG4gIH07XG4gIGNvbnN0IFhNTF9UQUcgPSB7XG4gICAgYmVnaW46IC88W0EtWmEtejAtOVxcXFwuXzotXSsvLFxuICAgIGVuZDogL1xcL1tBLVphLXowLTlcXFxcLl86LV0rPnxcXC8+LyxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoXG4gICAgICogQHBhcmFtIHtDYWxsYmFja1Jlc3BvbnNlfSByZXNwb25zZVxuICAgICAqL1xuICAgIGlzVHJ1bHlPcGVuaW5nVGFnOiAobWF0Y2gsIHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBhZnRlck1hdGNoSW5kZXggPSBtYXRjaFswXS5sZW5ndGggKyBtYXRjaC5pbmRleDtcbiAgICAgIGNvbnN0IG5leHRDaGFyID0gbWF0Y2guaW5wdXRbYWZ0ZXJNYXRjaEluZGV4XTtcbiAgICAgIC8vIG5lc3RlZCB0eXBlP1xuICAgICAgLy8gSFRNTCBzaG91bGQgbm90IGluY2x1ZGUgYW5vdGhlciByYXcgYDxgIGluc2lkZSBhIHRhZ1xuICAgICAgLy8gQnV0IGEgdHlwZSBtaWdodDogYDxBcnJheTxBcnJheTxudW1iZXI+PmAsIGV0Yy5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gXCI8XCIpIHtcbiAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gPHNvbWV0aGluZz5cbiAgICAgIC8vIFRoaXMgaXMgbm93IGVpdGhlciBhIHRhZyBvciBhIHR5cGUuXG4gICAgICBpZiAobmV4dENoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIC8vIGlmIHdlIGNhbm5vdCBmaW5kIGEgbWF0Y2hpbmcgY2xvc2luZyB0YWcsIHRoZW4gd2VcbiAgICAgICAgLy8gd2lsbCBpZ25vcmUgaXRcbiAgICAgICAgaWYgKCFoYXNDbG9zaW5nVGFnKG1hdGNoLCB7IGFmdGVyOiBhZnRlck1hdGNoSW5kZXggfSkpIHtcbiAgICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBLRVlXT1JEUyQxID0ge1xuICAgICRwYXR0ZXJuOiBJREVOVF9SRSxcbiAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxzXG4gIGNvbnN0IGRlY2ltYWxEaWdpdHMgPSAnWzAtOV0oXz9bMC05XSkqJztcbiAgY29uc3QgZnJhYyA9IGBcXFxcLigke2RlY2ltYWxEaWdpdHN9KWA7XG4gIC8vIERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCwgaW5jbHVkaW5nIEFubmV4IEIgTm9uT2N0YWxEZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZGRpdGlvbmFsLXN5bnRheC1udW1lcmljLWxpdGVyYWxzXG4gIGNvbnN0IGRlY2ltYWxJbnRlZ2VyID0gYDB8WzEtOV0oXz9bMC05XSkqfDBbMC03XSpbODldWzAtOV0qYDtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIERlY2ltYWxMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBgKFxcXFxiKCR7ZGVjaW1hbEludGVnZXJ9KSgoJHtmcmFjfSl8XFxcXC4pP3woJHtmcmFjfSkpYCArXG4gICAgICAgIGBbZUVdWystXT8oJHtkZWNpbWFsRGlnaXRzfSlcXFxcYmAgfSxcbiAgICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxJbnRlZ2VyfSlcXFxcYigoJHtmcmFjfSlcXFxcYnxcXFxcLik/fCgke2ZyYWN9KVxcXFxiYCB9LFxuXG4gICAgICAvLyBEZWNpbWFsQmlnSW50ZWdlckxpdGVyYWxcbiAgICAgIHsgYmVnaW46IGBcXFxcYigwfFsxLTldKF8/WzAtOV0pKiluXFxcXGJgIH0sXG5cbiAgICAgIC8vIE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbeFhdWzAtOWEtZkEtRl0oXz9bMC05YS1mQS1GXSkqbj9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtiQl1bMC0xXShfP1swLTFdKSpuP1xcXFxiXCIgfSxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW29PXVswLTddKF8/WzAtN10pKm4/XFxcXGJcIiB9LFxuXG4gICAgICAvLyBMZWdhY3lPY3RhbEludGVnZXJMaXRlcmFsIChkb2VzIG5vdCBpbmNsdWRlIHVuZGVyc2NvcmUgc2VwYXJhdG9ycylcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWRkaXRpb25hbC1zeW50YXgtbnVtZXJpYy1saXRlcmFsc1xuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbMC03XStuP1xcXFxiXCIgfSxcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLFxuICAgIGVuZDogJ1xcXFx9JyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICBjb250YWluczogW10gLy8gZGVmaW5lZCBsYXRlclxuICB9O1xuICBjb25zdCBIVE1MX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnaHRtbGAnLFxuICAgIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJyxcbiAgICAgIHJldHVybkVuZDogZmFsc2UsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgIFNVQlNUXG4gICAgICBdLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnXG4gICAgfVxuICB9O1xuICBjb25zdCBDU1NfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdjc3NgJyxcbiAgICBlbmQ6ICcnLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnYCcsXG4gICAgICByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnY3NzJ1xuICAgIH1cbiAgfTtcbiAgY29uc3QgVEVNUExBVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIGNvbnN0IEpTRE9DX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgL1xcL1xcKlxcKig/IVxcLykvLFxuICAgICdcXFxcKi8nLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKycsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHsnLFxuICAgICAgICAgICAgICBlbmQ6ICdcXFxcfScsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICBiZWdpbjogSURFTlRfUkUkMSArICcoPz1cXFxccyooLSl8JCknLFxuICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlYXQgc3BhY2VzIChub3QgbmV3bGluZXMpIHNvIHdlIGNhbiBmaW5kXG4gICAgICAgICAgICAvLyB0eXBlcyBvciB2YXJpYWJsZXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC8oPz1bXlxcbl0pXFxzLyxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICApO1xuICBjb25zdCBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIEpTRE9DX0NPTU1FTlQsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuICBjb25zdCBTVUJTVF9JTlRFUk5BTFMgPSBbXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgSFRNTF9URU1QTEFURSxcbiAgICBDU1NfVEVNUExBVEUsXG4gICAgVEVNUExBVEVfU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICBobGpzLlJFR0VYUF9NT0RFXG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gU1VCU1RfSU5URVJOQUxTXG4gICAgLmNvbmNhdCh7XG4gICAgICAvLyB3ZSBuZWVkIHRvIHBhaXIgdXAge30gaW5zaWRlIG91ciBzdWJzdCB0byBwcmV2ZW50XG4gICAgICAvLyBpdCBmcm9tIGVuZGluZyB0b28gZWFybHkgYnkgbWF0Y2hpbmcgYW5vdGhlciB9XG4gICAgICBiZWdpbjogL1xcey8sXG4gICAgICBlbmQ6IC9cXH0vLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBcInNlbGZcIlxuICAgICAgXS5jb25jYXQoU1VCU1RfSU5URVJOQUxTKVxuICAgIH0pO1xuICBjb25zdCBTVUJTVF9BTkRfQ09NTUVOVFMgPSBbXS5jb25jYXQoQ09NTUVOVCwgU1VCU1QuY29udGFpbnMpO1xuICBjb25zdCBQQVJBTVNfQ09OVEFJTlMgPSBTVUJTVF9BTkRfQ09NTUVOVFMuY29uY2F0KFtcbiAgICAvLyBlYXQgcmVjdXJzaXZlIHBhcmVucyBpbiBzdWIgZXhwcmVzc2lvbnNcbiAgICB7XG4gICAgICBiZWdpbjogL1xcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICBjb250YWluczogW1wic2VsZlwiXS5jb25jYXQoU1VCU1RfQU5EX0NPTU1FTlRTKVxuICAgIH1cbiAgXSk7XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKYXZhc2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbJ2pzJywgJ2pzeCcsICdtanMnLCAnY2pzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgLy8gdGhpcyB3aWxsIGJlIGV4dGVuZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICBleHBvcnRzOiB7IFBBUkFNU19DT05UQUlOUyB9LFxuICAgIGlsbGVnYWw6IC8jKD8hWyRfQS16XSkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlNIRUJBTkcoe1xuICAgICAgICBsYWJlbDogXCJzaGViYW5nXCIsXG4gICAgICAgIGJpbmFyeTogXCJub2RlXCIsXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBcInVzZV9zdHJpY3RcIixcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIHJlbGV2YW5jZTogMTAsXG4gICAgICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSAoc3RyaWN0fGFzbSlbJ1wiXS9cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgSFRNTF9URU1QTEFURSxcbiAgICAgIENTU19URU1QTEFURSxcbiAgICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICAgIENPTU1FTlQsXG4gICAgICBOVU1CRVIsXG4gICAgICB7IC8vIG9iamVjdCBhdHRyIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogY29uY2F0KC9beyxcXG5dXFxzKi8sXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBsb29rIGFoZWFkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgYW5cbiAgICAgICAgICAvLyBhdHRyaWJ1dGUgY29taW5nIHVwIHNvIHdlIGRvbid0IHN0ZWFsIGEgY29tbWEgZnJvbSBhIHBvdGVudGlhbFxuICAgICAgICAgIC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIE5PVEU6IHRoaXMgbWlnaHQgbm90IHdvcmsgaG93IHlvdSB0aGluay4gIFdlIGRvbid0IGFjdHVhbGx5IGFsd2F5c1xuICAgICAgICAgIC8vIGVudGVyIHRoaXMgbW9kZSBhbmQgc3RheS4gIEluc3RlYWQgaXQgbWlnaHQgbWVyZWx5IG1hdGNoIGAsXG4gICAgICAgICAgLy8gPGNvbW1lbnRzIHVwIG5leHQ+YCBhbmQgdGhlbiBpbW1lZGlhdGVseSBlbmQgYWZ0ZXIgdGhlICwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGZhaWxzIHRvIGZpbmQgYW55IGFjdHVhbCBhdHRycy4gQnV0IHRoaXMgc3RpbGwgZG9lcyB0aGUgam9iIGJlY2F1c2VcbiAgICAgICAgICAvLyBpdCBwcmV2ZW50cyB0aGUgdmFsdWUgY29udGFpbiBydWxlIGZyb20gZ3JhYmJpbmcgdGhpcyBpbnN0ZWFkIGFuZFxuICAgICAgICAgIC8vIHByZXZlbmluZyB0aGlzIHJ1bGUgZnJvbSBmaXJpbmcgd2hlbiB3ZSBhY3R1YWxseSBETyBoYXZlIGtleXMuXG4gICAgICAgICAgbG9va2FoZWFkKGNvbmNhdChcbiAgICAgICAgICAgIC8vIHdlIGFsc28gbmVlZCB0byBhbGxvdyBmb3IgbXVsdGlwbGUgcG9zc2libGUgY29tbWVudHMgaW5iZXR3ZWVuXG4gICAgICAgICAgICAvLyB0aGUgZmlyc3Qga2V5OnZhbHVlIHBhaXJpbmdcbiAgICAgICAgICAgIC8oKChcXC9cXC8uKiQpfChcXC9cXCooXFwqW14vXXxbXipdKSpcXCpcXC8pKVxccyopKi8sXG4gICAgICAgICAgICBJREVOVF9SRSQxICsgJ1xcXFxzKjonKSkpLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUkMSArIGxvb2thaGVhZCgnXFxcXHMqOicpLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyAvLyBcInZhbHVlXCIgY29udGFpbmVyXG4gICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihjYXNlfHJldHVybnx0aHJvdylcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybiB0aHJvdyBjYXNlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDT01NRU5ULFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjb3VudCB0aGUgcGFyZW5zIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIHRoZVxuICAgICAgICAgICAgLy8gY29ycmVjdCBib3VuZGluZyAoICkgYmVmb3JlIHRoZSA9Pi4gIFRoZXJlIGNvdWxkIGJlIGFueSBudW1iZXIgb2ZcbiAgICAgICAgICAgIC8vIHN1Yi1leHByZXNzaW9ucyBpbnNpZGUgYWxzbyBzdXJyb3VuZGVkIGJ5IHBhcmVucy5cbiAgICAgICAgICAgIGJlZ2luOiAnKFxcXFwoJyArXG4gICAgICAgICAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgICAgICAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgICAgICAgICAnW14oKV0qJyArXG4gICAgICAgICAgICAnXFxcXClbXigpXSopKicgK1xuICAgICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAgICdcXFxcKXwnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJylcXFxccyo9PicsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gY291bGQgYmUgYSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBwYXJhbXMgdG8gYSBmdW5jdGlvbiBjYWxsXG4gICAgICAgICAgICBiZWdpbjogLywvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICAgICAgICBiZWdpbjogL1xccy8sXG4gICAgICAgICAgICBlbmQ6IC9cXHMqLyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gSlNYXG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICB7IGJlZ2luOiBGUkFHTUVOVC5iZWdpbiwgZW5kOiBGUkFHTUVOVC5lbmQgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBYTUxfVEFHLmJlZ2luLFxuICAgICAgICAgICAgICAgIC8vIHdlIGNhcmVmdWxseSBjaGVjayB0aGUgb3BlbmluZyB0YWcgdG8gc2VlIGlmIGl0IHRydWx5XG4gICAgICAgICAgICAgICAgLy8gaXMgYSB0YWcgYW5kIG5vdCBhIGZhbHNlIHBvc2l0aXZlXG4gICAgICAgICAgICAgICAgJ29uOmJlZ2luJzogWE1MX1RBRy5pc1RydWx5T3BlbmluZ1RhZyxcbiAgICAgICAgICAgICAgICBlbmQ6IFhNTF9UQUcuZW5kXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFhNTF9UQUcuYmVnaW4sXG4gICAgICAgICAgICAgICAgZW5kOiBYTUxfVEFHLmVuZCxcbiAgICAgICAgICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJyxcbiAgICAgICAgZW5kOiAvW3s7XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiBJREVOVF9SRSQxIH0pLFxuICAgICAgICAgIFBBUkFNU1xuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvJS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHByZXZlbnQgdGhpcyBmcm9tIGdldHRpbmcgc3dhbGxvd2VkIHVwIGJ5IGZ1bmN0aW9uXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYXBwZWFyIFwiZnVuY3Rpb24gbGlrZVwiXG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFwid2hpbGUgaWYgc3dpdGNoIGNhdGNoIGZvclwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIC8vIHdlIGhhdmUgdG8gY291bnQgdGhlIHBhcmVucyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSB0aGUgY29ycmVjdFxuICAgICAgICAvLyBib3VuZGluZyAoICkuICBUaGVyZSBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHN1Yi1leHByZXNzaW9ucyBpbnNpZGVcbiAgICAgICAgLy8gYWxzbyBzdXJyb3VuZGVkIGJ5IHBhcmVucy5cbiAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArXG4gICAgICAgICAgJ1xcXFwoJyArIC8vIGZpcnN0IHBhcmVuc1xuICAgICAgICAgICdbXigpXSooXFxcXCgnICtcbiAgICAgICAgICAgICdbXigpXSooXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1teKCldKicgK1xuICAgICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAnXFxcXClbXigpXSopKicgK1xuICAgICAgICAgICdcXFxcKVxcXFxzKlxcXFx7JywgLy8gZW5kIHBhcmVuc1xuICAgICAgICByZXR1cm5CZWdpbjp0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiBJREVOVF9SRSQxIH0pLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gaGFjazogcHJldmVudHMgZGV0ZWN0aW9uIG9mIGtleXdvcmRzIGluIHNvbWUgY2lyY3Vtc3RhbmNlc1xuICAgICAgLy8gLmtleXdvcmQoKVxuICAgICAgLy8gJGtleXdvcmQgPSB4XG4gICAgICB7XG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFwuJyArIElERU5UX1JFJDEgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXCQnICsgSURFTlRfUkUkMSB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gRVM2IGNsYXNzXG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJyxcbiAgICAgICAgZW5kOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAvWzpcIltcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGJlZ2luS2V5d29yZHM6ICdleHRlbmRzJyB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxiKD89Y29uc3RydWN0b3IpLyxcbiAgICAgICAgZW5kOiAvW3s7XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSURFTlRfUkUkMSB9KSxcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgUEFSQU1TXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKGdldHxzZXQpXFxcXHMrKD89JyArIElERU5UX1JFJDEgKyAnXFxcXCgpJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAga2V5d29yZHM6IFwiZ2V0IHNldFwiLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgYmVnaW46IElERU5UX1JFJDEgfSksXG4gICAgICAgICAgeyBiZWdpbjogL1xcKFxcKS8gfSwgLy8gZWF0IHRvIGF2b2lkIGVtcHR5IHBhcmFtc1xuICAgICAgICAgIFBBUkFNU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG4vKlxuTGFuZ3VhZ2U6IFR5cGVTY3JpcHRcbkF1dGhvcjogUGFudSBIb3JzbWFsYWh0aSA8cGFudS5ob3JzbWFsYWh0aUBpa2kuZmk+XG5Db250cmlidXRvcnM6IElrZSBLdSA8ZGVtcGZpQHlhaG9vLmNvbT5cbkRlc2NyaXB0aW9uOiBUeXBlU2NyaXB0IGlzIGEgc3RyaWN0IHN1cGVyc2V0IG9mIEphdmFTY3JpcHRcbldlYnNpdGU6IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gdHlwZXNjcmlwdChobGpzKSB7XG4gIGNvbnN0IElERU5UX1JFJDEgPSBJREVOVF9SRTtcbiAgY29uc3QgTkFNRVNQQUNFID0ge1xuICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlXG4gIH07XG4gIGNvbnN0IElOVEVSRkFDRSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnaW50ZXJmYWNlJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2ludGVyZmFjZSBleHRlbmRzJ1xuICB9O1xuICBjb25zdCBVU0VfU1RSSUNUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgYmVnaW46IC9eXFxzKlsnXCJddXNlIHN0cmljdFsnXCJdL1xuICB9O1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcImFueVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJzdHJpbmdcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcImVudW1cIlxuICBdO1xuICBjb25zdCBUU19TUEVDSUZJQ19LRVlXT1JEUyA9IFtcbiAgICBcInR5cGVcIixcbiAgICBcIm5hbWVzcGFjZVwiLFxuICAgIFwidHlwZWRlZlwiLFxuICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgXCJwdWJsaWNcIixcbiAgICBcInByaXZhdGVcIixcbiAgICBcInByb3RlY3RlZFwiLFxuICAgIFwiaW1wbGVtZW50c1wiLFxuICAgIFwiZGVjbGFyZVwiLFxuICAgIFwiYWJzdHJhY3RcIixcbiAgICBcInJlYWRvbmx5XCJcbiAgXTtcbiAgY29uc3QgS0VZV09SRFMkMSA9IHtcbiAgICAkcGF0dGVybjogSURFTlRfUkUsXG4gICAga2V5d29yZDogS0VZV09SRFMuY29uY2F0KFRTX1NQRUNJRklDX0tFWVdPUkRTKSxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLmNvbmNhdChUWVBFUylcbiAgfTtcbiAgY29uc3QgREVDT1JBVE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnQCcgKyBJREVOVF9SRSQxLFxuICB9O1xuXG4gIGNvbnN0IHN3YXBNb2RlID0gKG1vZGUsIGxhYmVsLCByZXBsYWNlbWVudCkgPT4ge1xuICAgIGNvbnN0IGluZHggPSBtb2RlLmNvbnRhaW5zLmZpbmRJbmRleChtID0+IG0ubGFiZWwgPT09IGxhYmVsKTtcbiAgICBpZiAoaW5keCA9PT0gLTEpIHsgdGhyb3cgbmV3IEVycm9yKFwiY2FuIG5vdCBmaW5kIG1vZGUgdG8gcmVwbGFjZVwiKTsgfVxuICAgIG1vZGUuY29udGFpbnMuc3BsaWNlKGluZHgsIDEsIHJlcGxhY2VtZW50KTtcbiAgfTtcblxuICBjb25zdCB0c0xhbmd1YWdlID0gamF2YXNjcmlwdChobGpzKTtcblxuICAvLyB0aGlzIHNob3VsZCB1cGRhdGUgYW55d2hlcmUga2V5d29yZHMgaXMgdXNlZCBzaW5jZVxuICAvLyBpdCB3aWxsIGJlIHRoZSBzYW1lIGFjdHVhbCBKUyBvYmplY3RcbiAgT2JqZWN0LmFzc2lnbih0c0xhbmd1YWdlLmtleXdvcmRzLCBLRVlXT1JEUyQxKTtcblxuICB0c0xhbmd1YWdlLmV4cG9ydHMuUEFSQU1TX0NPTlRBSU5TLnB1c2goREVDT1JBVE9SKTtcbiAgdHNMYW5ndWFnZS5jb250YWlucyA9IHRzTGFuZ3VhZ2UuY29udGFpbnMuY29uY2F0KFtcbiAgICBERUNPUkFUT1IsXG4gICAgTkFNRVNQQUNFLFxuICAgIElOVEVSRkFDRSxcbiAgXSk7XG5cbiAgLy8gVFMgZ2V0cyBhIHNpbXBsZXIgc2hlYmFuZyBydWxlIHRoYW4gSlNcbiAgc3dhcE1vZGUodHNMYW5ndWFnZSwgXCJzaGViYW5nXCIsIGhsanMuU0hFQkFORygpKTtcbiAgLy8gSlMgdXNlIHN0cmljdCBydWxlIHB1cnBvc2VseSBleGNsdWRlcyBgYXNtYCB3aGljaCBtYWtlcyBubyBzZW5zZVxuICBzd2FwTW9kZSh0c0xhbmd1YWdlLCBcInVzZV9zdHJpY3RcIiwgVVNFX1NUUklDVCk7XG5cbiAgY29uc3QgZnVuY3Rpb25EZWNsYXJhdGlvbiA9IHRzTGFuZ3VhZ2UuY29udGFpbnMuZmluZChtID0+IG0uY2xhc3NOYW1lID09PSBcImZ1bmN0aW9uXCIpO1xuICBmdW5jdGlvbkRlY2xhcmF0aW9uLnJlbGV2YW5jZSA9IDA7IC8vICgpID0+IHt9IGlzIG1vcmUgdHlwaWNhbCBpbiBUeXBlU2NyaXB0XG5cbiAgT2JqZWN0LmFzc2lnbih0c0xhbmd1YWdlLCB7XG4gICAgbmFtZTogJ1R5cGVTY3JpcHQnLFxuICAgIGFsaWFzZXM6IFsndHMnLCAndHN4J11cbiAgfSk7XG5cbiAgcmV0dXJuIHRzTGFuZ3VhZ2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZXNjcmlwdDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBWYWxhXG5BdXRob3I6IEFudG9ubyBWYXNpbGpldiA8YW50b25vLnZhc2lsamV2QGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBWYWxhIGlzIGEgbmV3IHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgYWltcyB0byBicmluZyBtb2Rlcm4gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZmVhdHVyZXMgdG8gR05PTUUgZGV2ZWxvcGVycyB3aXRob3V0IGltcG9zaW5nIGFueSBhZGRpdGlvbmFsIHJ1bnRpbWUgcmVxdWlyZW1lbnRzIGFuZCB3aXRob3V0IHVzaW5nIGEgZGlmZmVyZW50IEFCSSBjb21wYXJlZCB0byBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB3cml0dGVuIGluIEMuXG5XZWJzaXRlOiBodHRwczovL3dpa2kuZ25vbWUub3JnL1Byb2plY3RzL1ZhbGFcbiovXG5cbmZ1bmN0aW9uIHZhbGEoaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdWYWxhJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8gVmFsdWUgdHlwZXNcbiAgICAgICAgJ2NoYXIgdWNoYXIgdW5pY2hhciBpbnQgdWludCBsb25nIHVsb25nIHNob3J0IHVzaG9ydCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQ4ICcgK1xuICAgICAgICAndWludDE2IHVpbnQzMiB1aW50NjQgZmxvYXQgZG91YmxlIGJvb2wgc3RydWN0IGVudW0gc3RyaW5nIHZvaWQgJyArXG4gICAgICAgIC8vIFJlZmVyZW5jZSB0eXBlc1xuICAgICAgICAnd2VhayB1bm93bmVkIG93bmVkICcgK1xuICAgICAgICAvLyBNb2RpZmllcnNcbiAgICAgICAgJ2FzeW5jIHNpZ25hbCBzdGF0aWMgYWJzdHJhY3QgaW50ZXJmYWNlIG92ZXJyaWRlIHZpcnR1YWwgZGVsZWdhdGUgJyArXG4gICAgICAgIC8vIENvbnRyb2wgU3RydWN0dXJlc1xuICAgICAgICAnaWYgd2hpbGUgZG8gZm9yIGZvcmVhY2ggZWxzZSBzd2l0Y2ggY2FzZSBicmVhayBkZWZhdWx0IHJldHVybiB0cnkgY2F0Y2ggJyArXG4gICAgICAgIC8vIFZpc2liaWxpdHlcbiAgICAgICAgJ3B1YmxpYyBwcml2YXRlIHByb3RlY3RlZCBpbnRlcm5hbCAnICtcbiAgICAgICAgLy8gT3RoZXJcbiAgICAgICAgJ3VzaW5nIG5ldyB0aGlzIGdldCBzZXQgY29uc3Qgc3Rkb3V0IHN0ZGluIHN0ZGVyciB2YXInLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdEQnVzIEdMaWIgQ0NvZGUgR2VlIE9iamVjdCBHdGsgUG9zaXgnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ2ZhbHNlIHRydWUgbnVsbCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZSBuYW1lc3BhY2UnLFxuICAgICAgICBlbmQ6IC9cXHsvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnW14sOlxcXFxuXFxcXHNcXFxcLl0nLFxuICAgICAgICBjb250YWluczogWyBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLFxuICAgICAgICBlbmQ6ICdcIlwiXCInLFxuICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeIycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsYTtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogVmlzdWFsIEJhc2ljIC5ORVRcbkRlc2NyaXB0aW9uOiBWaXN1YWwgQmFzaWMgLk5FVCAoVkIuTkVUKSBpcyBhIG11bHRpLXBhcmFkaWdtLCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIGltcGxlbWVudGVkIG9uIHRoZSAuTkVUIEZyYW1ld29yay5cbkF1dGhvcnM6IFBvcmVuIENoaWFuZyA8cmVuLmNoaWFuZ0BnbWFpbC5jb20+LCBKYW4gUGlsemVyXG5XZWJzaXRlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9kb3RuZXQvdmlzdWFsLWJhc2ljL2dldHRpbmctc3RhcnRlZFxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHZibmV0KGhsanMpIHtcbiAgLyoqXG4gICAqIENoYXJhY3RlciBMaXRlcmFsXG4gICAqIEVpdGhlciBhIHNpbmdsZSBjaGFyYWN0ZXIgKFwiYVwiQykgb3IgYW4gZXNjYXBlZCBkb3VibGUgcXVvdGUgKFwiXCJcIlwiQykuXG4gICAqL1xuICBjb25zdCBDSEFSQUNURVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiKFwiXCJ8W14vbl0pXCJDXFxiL1xuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLFxuICAgIGVuZDogL1wiLyxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICAvLyBkb3VibGUgcXVvdGUgZXNjYXBlXG4gICAgICAgIGJlZ2luOiAvXCJcIi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLyoqIERhdGUgTGl0ZXJhbHMgY29uc2lzdCBvZiBhIGRhdGUsIGEgdGltZSwgb3IgYm90aCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSwgc3Vycm91bmRlZCBieSAjICovXG4gIGNvbnN0IE1NX0REX1lZWVkgPSAvXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fS87XG4gIGNvbnN0IFlZWVlfTU1fREQgPSAvXFxkezR9LVxcZHsxLDJ9LVxcZHsxLDJ9LztcbiAgY29uc3QgVElNRV8xMkggPSAvKFxcZHwxWzAxMl0pKDpcXGQrKXswLDJ9ICooQU18UE0pLztcbiAgY29uc3QgVElNRV8yNEggPSAvXFxkezEsMn0oOlxcZHsxLDJ9KXsxLDJ9LztcbiAgY29uc3QgREFURSA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICAvLyAjWVlZWS1NTS1ERCMgKElTTy1EYXRlKSBvciAjTS9EL1lZWVkjIChVUy1EYXRlKVxuICAgICAgICBiZWdpbjogY29uY2F0KC8jICovLCBlaXRoZXIoWVlZWV9NTV9ERCwgTU1fRERfWVlZWSksIC8gKiMvKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gI0g6bW1bOnNzXSMgKDI0aCBUaW1lKVxuICAgICAgICBiZWdpbjogY29uY2F0KC8jICovLCBUSU1FXzI0SCwgLyAqIy8pXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyAjaFs6bW1bOnNzXV0gQSMgKDEyaCBUaW1lKVxuICAgICAgICBiZWdpbjogY29uY2F0KC8jICovLCBUSU1FXzEySCwgLyAqIy8pXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBkYXRlIHBsdXMgdGltZVxuICAgICAgICBiZWdpbjogY29uY2F0KFxuICAgICAgICAgIC8jICovLFxuICAgICAgICAgIGVpdGhlcihZWVlZX01NX0RELCBNTV9ERF9ZWVlZKSxcbiAgICAgICAgICAvICsvLFxuICAgICAgICAgIGVpdGhlcihUSU1FXzEySCwgVElNRV8yNEgpLFxuICAgICAgICAgIC8gKiMvXG4gICAgICAgIClcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIC8vIEZsb2F0XG4gICAgICAgIGJlZ2luOiAvXFxiXFxkW1xcZF9dKigoXFwuW1xcZF9dKyhFWystXT9bXFxkX10rKT8pfChFWystXT9bXFxkX10rKSlbUkZEQCEjXT8vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBJbnRlZ2VyIChiYXNlIDEwKVxuICAgICAgICBiZWdpbjogL1xcYlxcZFtcXGRfXSooKFU/W1NJTF0pfFslJl0pPy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEludGVnZXIgKGJhc2UgMTYpXG4gICAgICAgIGJlZ2luOiAvJkhbXFxkQS1GX10rKChVP1tTSUxdKXxbJSZdKT8vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBJbnRlZ2VyIChiYXNlIDgpXG4gICAgICAgIGJlZ2luOiAvJk9bMC03X10rKChVP1tTSUxdKXxbJSZdKT8vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBJbnRlZ2VyIChiYXNlIDIpXG4gICAgICAgIGJlZ2luOiAvJkJbMDFfXSsoKFU/W1NJTF0pfFslJl0pPy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGFiZWwnLFxuICAgIGJlZ2luOiAvXlxcdys6L1xuICB9O1xuXG4gIGNvbnN0IERPQ19DT01NRU5UID0gaGxqcy5DT01NRU5UKC8nJycvLCAvJC8sIHtcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICBiZWdpbjogLzxcXC8/LyxcbiAgICAgICAgZW5kOiAvPi9cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuXG4gIGNvbnN0IENPTU1FTlQgPSBobGpzLkNPTU1FTlQobnVsbCwgLyQvLCB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogVXNlIGBiZWZvcmVNYXRjaDpgIGZvciBsZWFkaW5nIHNwYWNlc1xuICAgICAgICBiZWdpbjogLyhbXFx0IF18XilSRU0oPz1cXHMpL1xuICAgICAgfVxuICAgIF1cbiAgfSk7XG5cbiAgY29uc3QgRElSRUNUSVZFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAvLyBUT0RPOiBVc2UgYGJlZm9yZU1hdGNoOmAgZm9yIGluZGVudGF0aW9uIG9uY2UgYXZhaWxhYmxlXG4gICAgYmVnaW46IC9bXFx0IF0qIyhjb25zdHxkaXNhYmxlfGVsc2V8ZWxzZWlmfGVuYWJsZXxlbmR8ZXh0ZXJuYWxzb3VyY2V8aWZ8cmVnaW9uKVxcYi8sXG4gICAgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnY29uc3QgZGlzYWJsZSBlbHNlIGVsc2VpZiBlbmFibGUgZW5kIGV4dGVybmFsc291cmNlIGlmIHJlZ2lvbiB0aGVuJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFsgQ09NTUVOVCBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVmlzdWFsIEJhc2ljIC5ORVQnLFxuICAgIGFsaWFzZXM6IFsgJ3ZiJyBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY2xhc3NOYW1lQWxpYXNlczoge1xuICAgICAgbGFiZWw6ICdzeW1ib2wnXG4gICAgfSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FkZGhhbmRsZXIgYWxpYXMgYWdncmVnYXRlIGFuc2kgYXMgYXN5bmMgYXNzZW1ibHkgYXV0byBiaW5hcnkgYnkgYnlyZWYgYnl2YWwgJyArIC8qIGEtYiAqL1xuICAgICAgICAnY2FsbCBjYXNlIGNhdGNoIGNsYXNzIGNvbXBhcmUgY29uc3QgY29udGludWUgY3VzdG9tIGRlY2xhcmUgZGVmYXVsdCBkZWxlZ2F0ZSBkaW0gZGlzdGluY3QgZG8gJyArIC8qIGMtZCAqL1xuICAgICAgICAnZWFjaCBlcXVhbHMgZWxzZSBlbHNlaWYgZW5kIGVudW0gZXJhc2UgZXJyb3IgZXZlbnQgZXhpdCBleHBsaWNpdCBmaW5hbGx5IGZvciBmcmllbmQgZnJvbSBmdW5jdGlvbiAnICsgLyogZS1mICovXG4gICAgICAgICdnZXQgZ2xvYmFsIGdvdG8gZ3JvdXAgaGFuZGxlcyBpZiBpbXBsZW1lbnRzIGltcG9ydHMgaW4gaW5oZXJpdHMgaW50ZXJmYWNlIGludG8gaXRlcmF0b3IgJyArIC8qIGctaSAqL1xuICAgICAgICAnam9pbiBrZXkgbGV0IGxpYiBsb29wIG1lIG1pZCBtb2R1bGUgbXVzdGluaGVyaXQgbXVzdG92ZXJyaWRlIG15YmFzZSBteWNsYXNzICcgKyAvKiBqLW0gKi9cbiAgICAgICAgJ25hbWVzcGFjZSBuYXJyb3dpbmcgbmV3IG5leHQgbm90aW5oZXJpdGFibGUgbm90b3ZlcnJpZGFibGUgJyArIC8qIG4gKi9cbiAgICAgICAgJ29mIG9mZiBvbiBvcGVyYXRvciBvcHRpb24gb3B0aW9uYWwgb3JkZXIgb3ZlcmxvYWRzIG92ZXJyaWRhYmxlIG92ZXJyaWRlcyAnICsgLyogbyAqL1xuICAgICAgICAncGFyYW1hcnJheSBwYXJ0aWFsIHByZXNlcnZlIHByaXZhdGUgcHJvcGVydHkgcHJvdGVjdGVkIHB1YmxpYyAnICsgLyogcCAqL1xuICAgICAgICAncmFpc2VldmVudCByZWFkb25seSByZWRpbSByZW1vdmVoYW5kbGVyIHJlc3VtZSByZXR1cm4gJyArIC8qIHIgKi9cbiAgICAgICAgJ3NlbGVjdCBzZXQgc2hhZG93cyBzaGFyZWQgc2tpcCBzdGF0aWMgc3RlcCBzdG9wIHN0cnVjdHVyZSBzdHJpY3Qgc3ViIHN5bmNsb2NrICcgKyAvKiBzICovXG4gICAgICAgICd0YWtlIHRleHQgdGhlbiB0aHJvdyB0byB0cnkgdW5pY29kZSB1bnRpbCB1c2luZyB3aGVuIHdoZXJlIHdoaWxlIHdpZGVuaW5nIHdpdGggd2l0aGV2ZW50cyB3cml0ZW9ubHkgeWllbGQnIC8qIHQteSAqLyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBPcGVyYXRvcnMgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZG90bmV0L3Zpc3VhbC1iYXNpYy9sYW5ndWFnZS1yZWZlcmVuY2Uvb3BlcmF0b3JzXG4gICAgICAgICdhZGRyZXNzb2YgYW5kIGFuZGFsc28gYXdhaXQgZGlyZWN0Y2FzdCBnZXR0eXBlIGdldHhtbG5hbWVzcGFjZSBpcyBpc2ZhbHNlIGlzbm90IGlzdHJ1ZSBsaWtlIG1vZCBuYW1lb2YgbmV3IG5vdCBvciBvcmVsc2UgdHJ5Y2FzdCB0eXBlb2YgeG9yICcgK1xuICAgICAgICAvLyBUeXBlIENvbnZlcnNpb24gRnVuY3Rpb25zIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2RvdG5ldC92aXN1YWwtYmFzaWMvbGFuZ3VhZ2UtcmVmZXJlbmNlL2Z1bmN0aW9ucy90eXBlLWNvbnZlcnNpb24tZnVuY3Rpb25zXG4gICAgICAgICdjYm9vbCBjYnl0ZSBjY2hhciBjZGF0ZSBjZGJsIGNkZWMgY2ludCBjbG5nIGNvYmogY3NieXRlIGNzaG9ydCBjc25nIGNzdHIgY3VpbnQgY3VsbmcgY3VzaG9ydCcsXG4gICAgICB0eXBlOlxuICAgICAgICAvLyBEYXRhIHR5cGVzIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2RvdG5ldC92aXN1YWwtYmFzaWMvbGFuZ3VhZ2UtcmVmZXJlbmNlL2RhdGEtdHlwZXNcbiAgICAgICAgJ2Jvb2xlYW4gYnl0ZSBjaGFyIGRhdGUgZGVjaW1hbCBkb3VibGUgaW50ZWdlciBsb25nIG9iamVjdCBzYnl0ZSBzaG9ydCBzaW5nbGUgc3RyaW5nIHVpbnRlZ2VyIHVsb25nIHVzaG9ydCcsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBub3RoaW5nJ1xuICAgIH0sXG4gICAgaWxsZWdhbDpcbiAgICAgICcvL3xcXFxce3xcXFxcfXxlbmRpZnxnb3N1Ynx2YXJpYW50fHdlbmR8XlxcXFwkICcgLyogcmVzZXJ2ZWQgZGVwcmVjYXRlZCBrZXl3b3JkcyAqLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ0hBUkFDVEVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgREFURSxcbiAgICAgIE5VTUJFUixcbiAgICAgIExBQkVMLFxuICAgICAgRE9DX0NPTU1FTlQsXG4gICAgICBDT01NRU5ULFxuICAgICAgRElSRUNUSVZFU1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2Ym5ldDtcbiIsCiAgICAiLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJyArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qXG5MYW5ndWFnZTogVkJTY3JpcHRcbkRlc2NyaXB0aW9uOiBWQlNjcmlwdCAoXCJNaWNyb3NvZnQgVmlzdWFsIEJhc2ljIFNjcmlwdGluZyBFZGl0aW9uXCIpIGlzIGFuIEFjdGl2ZSBTY3JpcHRpbmcgbGFuZ3VhZ2UgZGV2ZWxvcGVkIGJ5IE1pY3Jvc29mdCB0aGF0IGlzIG1vZGVsZWQgb24gVmlzdWFsIEJhc2ljLlxuQXV0aG9yOiBOaWtpdGEgTGVkeWFldiA8bGVuaWtpdGFAeWFuZGV4LnJ1PlxuQ29udHJpYnV0b3JzOiBNaWNoYWwgR2FicnVraWV3aWN6IDxtZ2FicnVAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVkJTY3JpcHRcbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiB2YnNjcmlwdChobGpzKSB7XG4gIGNvbnN0IEJVSUxUX0lOX0ZVTkNUSU9OUyA9ICgnbGNhc2UgbW9udGggdmFydHlwZSBpbnN0cnJldiB1Ym91bmQgc2V0bG9jYWxlIGdldG9iamVjdCByZ2IgZ2V0cmVmIHN0cmluZyAnICtcbiAgJ3dlZWtkYXluYW1lIHJuZCBkYXRlYWRkIG1vbnRobmFtZSBub3cgZGF5IG1pbnV0ZSBpc2FycmF5IGNib29sIHJvdW5kIGZvcm1hdGN1cnJlbmN5ICcgK1xuICAnY29udmVyc2lvbnMgY3NuZyB0aW1ldmFsdWUgc2Vjb25kIHllYXIgc3BhY2UgYWJzIGNsbmcgdGltZXNlcmlhbCBmaXhzIGxlbiBhc2MgJyArXG4gICdpc2VtcHR5IG1hdGhzIGRhdGVzZXJpYWwgYXRuIHRpbWVyIGlzb2JqZWN0IGZpbHRlciB3ZWVrZGF5IGRhdGV2YWx1ZSBjY3VyIGlzZGF0ZSAnICtcbiAgJ2luc3RyIGRhdGVkaWZmIGZvcm1hdGRhdGV0aW1lIHJlcGxhY2UgaXNudWxsIHJpZ2h0IHNnbiBhcnJheSBzbnVtZXJpYyBsb2cgY2RibCBoZXggJyArXG4gICdjaHIgbGJvdW5kIG1zZ2JveCB1Y2FzZSBnZXRsb2NhbGUgY29zIGNkYXRlIGNieXRlIHJ0cmltIGpvaW4gaG91ciBvY3QgdHlwZW5hbWUgdHJpbSAnICtcbiAgJ3N0cmNvbXAgaW50IGNyZWF0ZW9iamVjdCBsb2FkcGljdHVyZSB0YW4gZm9ybWF0bnVtYmVyIG1pZCAnICtcbiAgJ3NwbGl0ICBjaW50IHNpbiBkYXRlcGFydCBsdHJpbSBzcXIgJyArXG4gICd0aW1lIGRlcml2ZWQgZXZhbCBkYXRlIGZvcm1hdHBlcmNlbnQgZXhwIGlucHV0Ym94IGxlZnQgYXNjdyAnICtcbiAgJ2NocncgcmVnZXhwIGNzdHIgZXJyJykuc3BsaXQoXCIgXCIpO1xuICBjb25zdCBCVUlMVF9JTl9PQkpFQ1RTID0gW1xuICAgIFwic2VydmVyXCIsXG4gICAgXCJyZXNwb25zZVwiLFxuICAgIFwicmVxdWVzdFwiLFxuICAgIC8vIHRha2Ugbm8gYXJndW1lbnRzIHNvIGNhbiBiZSBjYWxsZWQgd2l0aG91dCAoKVxuICAgIFwic2NyaXB0ZW5naW5lXCIsXG4gICAgXCJzY3JpcHRlbmdpbmVidWlsZHZlcnNpb25cIixcbiAgICBcInNjcmlwdGVuZ2luZW1pbm9ydmVyc2lvblwiLFxuICAgIFwic2NyaXB0ZW5naW5lbWFqb3J2ZXJzaW9uXCJcbiAgXTtcblxuICBjb25zdCBCVUlMVF9JTl9DQUxMID0ge1xuICAgIGJlZ2luOiBjb25jYXQoZWl0aGVyKC4uLkJVSUxUX0lOX0ZVTkNUSU9OUyksIFwiXFxcXHMqXFxcXChcIiksXG4gICAgLy8gcmVsZXZhbmNlIDAgYmVjYXVzZSB0aGlzIGlzIGFjdGluZyBhcyBhIGJlZ2luS2V5d29yZHMgcmVhbGx5XG4gICAgcmVsZXZhbmNlOjAsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGJ1aWx0X2luOiBCVUlMVF9JTl9GVU5DVElPTlNcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVkJTY3JpcHQnLFxuICAgIGFsaWFzZXM6IFsndmJzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2NhbGwgY2xhc3MgY29uc3QgZGltIGRvIGxvb3AgZXJhc2UgZXhlY3V0ZSBleGVjdXRlZ2xvYmFsIGV4aXQgZm9yIGVhY2ggbmV4dCBmdW5jdGlvbiAnICtcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBvbiBlcnJvciBvcHRpb24gZXhwbGljaXQgbmV3IHByaXZhdGUgcHJvcGVydHkgbGV0IGdldCBwdWJsaWMgcmFuZG9taXplICcgK1xuICAgICAgICAncmVkaW0gcmVtIHNlbGVjdCBjYXNlIHNldCBzdG9wIHN1YiB3aGlsZSB3ZW5kIHdpdGggZW5kIHRvIGVsc2VpZiBpcyBvciB4b3IgYW5kIG5vdCAnICtcbiAgICAgICAgJ2NsYXNzX2luaXRpYWxpemUgY2xhc3NfdGVybWluYXRlIGRlZmF1bHQgcHJlc2VydmUgaW4gbWUgYnl2YWwgYnlyZWYgc3RlcCByZXN1bWUgZ290bycsXG4gICAgICBidWlsdF9pbjogQlVJTFRfSU5fT0JKRUNUUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgbm90aGluZyBlbXB0eSdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcvLycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJVSUxUX0lOX0NBTEwsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2NvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XX0pLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvJy8sXG4gICAgICAgIC8kLyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZic2NyaXB0O1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFZCU2NyaXB0IGluIEhUTUxcblJlcXVpcmVzOiB4bWwuanMsIHZic2NyaXB0LmpzXG5BdXRob3I6IEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuRGVzY3JpcHRpb246IFwiQnJpZGdlXCIgbGFuZ3VhZ2UgZGVmaW5pbmcgZnJhZ21lbnRzIG9mIFZCU2NyaXB0IGluIEhUTUwgd2l0aGluIDwlIC4uICU+XG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WQlNjcmlwdFxuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuKi9cblxuZnVuY3Rpb24gdmJzY3JpcHRIdG1sKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVkJTY3JpcHQgaW4gSFRNTCcsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCUnLFxuICAgICAgICBlbmQ6ICclPicsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAndmJzY3JpcHQnXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZic2NyaXB0SHRtbDtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBWZXJpbG9nXG5BdXRob3I6IEpvbiBFdmFucyA8am9uQGNyYWZ0eWpvbi5jb20+XG5Db250cmlidXRvcnM6IEJvb25lIFNldmVyc29uIDxib29uZS5zZXZlcnNvbkBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogVmVyaWxvZyBpcyBhIGhhcmR3YXJlIGRlc2NyaXB0aW9uIGxhbmd1YWdlIHVzZWQgaW4gZWxlY3Ryb25pYyBkZXNpZ24gYXV0b21hdGlvbiB0byBkZXNjcmliZSBkaWdpdGFsIGFuZCBtaXhlZC1zaWduYWwgc3lzdGVtcy4gVGhpcyBoaWdobGlnaHRlciBzdXBwb3J0cyBWZXJpbG9nIGFuZCBTeXN0ZW1WZXJpbG9nIHRocm91Z2ggSUVFRSAxODAwLTIwMTIuXG5XZWJzaXRlOiBodHRwOi8vd3d3LnZlcmlsb2cuY29tXG4qL1xuXG5mdW5jdGlvbiB2ZXJpbG9nKGhsanMpIHtcbiAgY29uc3QgU1ZfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9bXFx3XFwkXSsvLFxuICAgIGtleXdvcmQ6XG4gICAgICAnYWNjZXB0X29uIGFsaWFzIGFsd2F5cyBhbHdheXNfY29tYiBhbHdheXNfZmYgYWx3YXlzX2xhdGNoIGFuZCBhc3NlcnQgYXNzaWduICcgK1xuICAgICAgJ2Fzc3VtZSBhdXRvbWF0aWMgYmVmb3JlIGJlZ2luIGJpbmQgYmlucyBiaW5zb2YgYml0IGJyZWFrIGJ1ZnwwIGJ1ZmlmMCBidWZpZjEgJyArXG4gICAgICAnYnl0ZSBjYXNlIGNhc2V4IGNhc2V6IGNlbGwgY2hhbmRsZSBjaGVja2VyIGNsYXNzIGNsb2NraW5nIGNtb3MgY29uZmlnIGNvbnN0ICcgK1xuICAgICAgJ2NvbnN0cmFpbnQgY29udGV4dCBjb250aW51ZSBjb3ZlciBjb3Zlcmdyb3VwIGNvdmVycG9pbnQgY3Jvc3MgZGVhc3NpZ24gZGVmYXVsdCAnICtcbiAgICAgICdkZWZwYXJhbSBkZXNpZ24gZGlzYWJsZSBkaXN0IGRvIGVkZ2UgZWxzZSBlbmQgZW5kY2FzZSBlbmRjaGVja2VyIGVuZGNsYXNzICcgK1xuICAgICAgJ2VuZGNsb2NraW5nIGVuZGNvbmZpZyBlbmRmdW5jdGlvbiBlbmRnZW5lcmF0ZSBlbmRncm91cCBlbmRpbnRlcmZhY2UgZW5kbW9kdWxlICcgK1xuICAgICAgJ2VuZHBhY2thZ2UgZW5kcHJpbWl0aXZlIGVuZHByb2dyYW0gZW5kcHJvcGVydHkgZW5kc3BlY2lmeSBlbmRzZXF1ZW5jZSBlbmR0YWJsZSAnICtcbiAgICAgICdlbmR0YXNrIGVudW0gZXZlbnQgZXZlbnR1YWxseSBleHBlY3QgZXhwb3J0IGV4dGVuZHMgZXh0ZXJuIGZpbmFsIGZpcnN0X21hdGNoIGZvciAnICtcbiAgICAgICdmb3JjZSBmb3JlYWNoIGZvcmV2ZXIgZm9yayBmb3Jram9pbiBmdW5jdGlvbiBnZW5lcmF0ZXw1IGdlbnZhciBnbG9iYWwgaGlnaHowIGhpZ2h6MSAnICtcbiAgICAgICdpZiBpZmYgaWZub25lIGlnbm9yZV9iaW5zIGlsbGVnYWxfYmlucyBpbXBsZW1lbnRzIGltcGxpZXMgaW1wb3J0IGluY2RpciBpbmNsdWRlICcgK1xuICAgICAgJ2luaXRpYWwgaW5vdXQgaW5wdXQgaW5zaWRlIGluc3RhbmNlIGludCBpbnRlZ2VyIGludGVyY29ubmVjdCBpbnRlcmZhY2UgaW50ZXJzZWN0ICcgK1xuICAgICAgJ2pvaW4gam9pbl9hbnkgam9pbl9ub25lIGxhcmdlIGxldCBsaWJsaXN0IGxpYnJhcnkgbG9jYWwgbG9jYWxwYXJhbSBsb2dpYyBsb25naW50ICcgK1xuICAgICAgJ21hY3JvbW9kdWxlIG1hdGNoZXMgbWVkaXVtIG1vZHBvcnQgbW9kdWxlIG5hbmQgbmVnZWRnZSBuZXR0eXBlIG5ldyBuZXh0dGltZSBubW9zICcgK1xuICAgICAgJ25vciBub3Nob3djYW5jZWxsZWQgbm90IG5vdGlmMCBub3RpZjEgb3Igb3V0cHV0IHBhY2thZ2UgcGFja2VkIHBhcmFtZXRlciBwbW9zICcgK1xuICAgICAgJ3Bvc2VkZ2UgcHJpbWl0aXZlIHByaW9yaXR5IHByb2dyYW0gcHJvcGVydHkgcHJvdGVjdGVkIHB1bGwwIHB1bGwxIHB1bGxkb3duIHB1bGx1cCAnICtcbiAgICAgICdwdWxzZXN0eWxlX29uZGV0ZWN0IHB1bHNlc3R5bGVfb25ldmVudCBwdXJlIHJhbmQgcmFuZGMgcmFuZGNhc2UgcmFuZHNlcXVlbmNlIHJjbW9zICcgK1xuICAgICAgJ3JlYWwgcmVhbHRpbWUgcmVmIHJlZyByZWplY3Rfb24gcmVsZWFzZSByZXBlYXQgcmVzdHJpY3QgcmV0dXJuIHJubW9zIHJwbW9zIHJ0cmFuICcgK1xuICAgICAgJ3J0cmFuaWYwIHJ0cmFuaWYxIHNfYWx3YXlzIHNfZXZlbnR1YWxseSBzX25leHR0aW1lIHNfdW50aWwgc191bnRpbF93aXRoIHNjYWxhcmVkICcgK1xuICAgICAgJ3NlcXVlbmNlIHNob3J0aW50IHNob3J0cmVhbCBzaG93Y2FuY2VsbGVkIHNpZ25lZCBzbWFsbCBzb2Z0IHNvbHZlIHNwZWNpZnkgc3BlY3BhcmFtICcgK1xuICAgICAgJ3N0YXRpYyBzdHJpbmcgc3Ryb25nIHN0cm9uZzAgc3Ryb25nMSBzdHJ1Y3Qgc3VwZXIgc3VwcGx5MCBzdXBwbHkxIHN5bmNfYWNjZXB0X29uICcgK1xuICAgICAgJ3N5bmNfcmVqZWN0X29uIHRhYmxlIHRhZ2dlZCB0YXNrIHRoaXMgdGhyb3VnaG91dCB0aW1lIHRpbWVwcmVjaXNpb24gdGltZXVuaXQgdHJhbiAnICtcbiAgICAgICd0cmFuaWYwIHRyYW5pZjEgdHJpIHRyaTAgdHJpMSB0cmlhbmQgdHJpb3IgdHJpcmVnIHR5cGUgdHlwZWRlZiB1bmlvbiB1bmlxdWUgdW5pcXVlMCAnICtcbiAgICAgICd1bnNpZ25lZCB1bnRpbCB1bnRpbF93aXRoIHVudHlwZWQgdXNlIHV3aXJlIHZhciB2ZWN0b3JlZCB2aXJ0dWFsIHZvaWQgd2FpdCB3YWl0X29yZGVyICcgK1xuICAgICAgJ3dhbmQgd2VhayB3ZWFrMCB3ZWFrMSB3aGlsZSB3aWxkY2FyZCB3aXJlIHdpdGggd2l0aGluIHdvciB4bm9yIHhvcicsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdudWxsJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICckZmluaXNoICRzdG9wICRleGl0ICRmYXRhbCAkZXJyb3IgJHdhcm5pbmcgJGluZm8gJHJlYWx0aW1lICR0aW1lICRwcmludHRpbWVzY2FsZSAnICtcbiAgICAgICckYml0c3RvcmVhbCAkYml0c3Rvc2hvcnRyZWFsICRpdG9yICRzaWduZWQgJGNhc3QgJGJpdHMgJHN0aW1lICR0aW1lZm9ybWF0ICcgK1xuICAgICAgJyRyZWFsdG9iaXRzICRzaG9ydHJlYWx0b2JpdHMgJHJ0b2kgJHVuc2lnbmVkICRhc3NlcnRvbiAkYXNzZXJ0a2lsbCAkYXNzZXJ0cGFzc29uICcgK1xuICAgICAgJyRhc3NlcnRmYWlsb24gJGFzc2VydG5vbnZhY3VvdXNvbiAkYXNzZXJ0b2ZmICRhc3NlcnRjb250cm9sICRhc3NlcnRwYXNzb2ZmICcgK1xuICAgICAgJyRhc3NlcnRmYWlsb2ZmICRhc3NlcnR2YWN1b3Vzb2ZmICRpc3VuYm91bmRlZCAkc2FtcGxlZCAkZmVsbCAkY2hhbmdlZCAkcGFzdF9nY2xrICcgK1xuICAgICAgJyRmZWxsX2djbGsgJGNoYW5nZWRfZ2NsayAkcmlzaW5nX2djbGsgJHN0ZWFkeV9nY2xrICRjb3ZlcmFnZV9jb250cm9sICcgK1xuICAgICAgJyRjb3ZlcmFnZV9nZXQgJGNvdmVyYWdlX3NhdmUgJHNldF9jb3ZlcmFnZV9kYl9uYW1lICRyb3NlICRzdGFibGUgJHBhc3QgJyArXG4gICAgICAnJHJvc2VfZ2NsayAkc3RhYmxlX2djbGsgJGZ1dHVyZV9nY2xrICRmYWxsaW5nX2djbGsgJGNoYW5naW5nX2djbGsgJGRpc3BsYXkgJyArXG4gICAgICAnJGNvdmVyYWdlX2dldF9tYXggJGNvdmVyYWdlX21lcmdlICRnZXRfY292ZXJhZ2UgJGxvYWRfY292ZXJhZ2VfZGIgJHR5cGVuYW1lICcgK1xuICAgICAgJyR1bnBhY2tlZF9kaW1lbnNpb25zICRsZWZ0ICRsb3cgJGluY3JlbWVudCAkY2xvZzIgJGxuICRsb2cxMCAkZXhwICRzcXJ0ICRwb3cgJyArXG4gICAgICAnJGZsb29yICRjZWlsICRzaW4gJGNvcyAkdGFuICRjb3VudGJpdHMgJG9uZWhvdCAkaXN1bmtub3duICRmYXRhbCAkd2FybmluZyAnICtcbiAgICAgICckZGltZW5zaW9ucyAkcmlnaHQgJGhpZ2ggJHNpemUgJGFzaW4gJGFjb3MgJGF0YW4gJGF0YW4yICRoeXBvdCAkc2luaCAkY29zaCAnICtcbiAgICAgICckdGFuaCAkYXNpbmggJGFjb3NoICRhdGFuaCAkY291bnRvbmVzICRvbmVob3QwICRlcnJvciAkaW5mbyAkcmFuZG9tICcgK1xuICAgICAgJyRkaXN0X2NoaV9zcXVhcmUgJGRpc3RfZXJsYW5nICRkaXN0X2V4cG9uZW50aWFsICRkaXN0X25vcm1hbCAkZGlzdF9wb2lzc29uICcgK1xuICAgICAgJyRkaXN0X3QgJGRpc3RfdW5pZm9ybSAkcV9pbml0aWFsaXplICRxX3JlbW92ZSAkcV9leGFtICRhc3luYyRhbmQkYXJyYXkgJyArXG4gICAgICAnJGFzeW5jJG5hbmQkYXJyYXkgJGFzeW5jJG9yJGFycmF5ICRhc3luYyRub3IkYXJyYXkgJHN5bmMkYW5kJGFycmF5ICcgK1xuICAgICAgJyRzeW5jJG5hbmQkYXJyYXkgJHN5bmMkb3IkYXJyYXkgJHN5bmMkbm9yJGFycmF5ICRxX2FkZCAkcV9mdWxsICRwc3ByaW50ZiAnICtcbiAgICAgICckYXN5bmMkYW5kJHBsYW5lICRhc3luYyRuYW5kJHBsYW5lICRhc3luYyRvciRwbGFuZSAkYXN5bmMkbm9yJHBsYW5lICcgK1xuICAgICAgJyRzeW5jJGFuZCRwbGFuZSAkc3luYyRuYW5kJHBsYW5lICRzeW5jJG9yJHBsYW5lICRzeW5jJG5vciRwbGFuZSAkc3lzdGVtICcgK1xuICAgICAgJyRkaXNwbGF5ICRkaXNwbGF5YiAkZGlzcGxheWggJGRpc3BsYXlvICRzdHJvYmUgJHN0cm9iZWIgJHN0cm9iZWggJHN0cm9iZW8gJyArXG4gICAgICAnJHdyaXRlICRyZWFkbWVtYiAkcmVhZG1lbWggJHdyaXRlbWVtaCAkdmFsdWUkcGx1c2FyZ3MgJyArXG4gICAgICAnJGR1bXB2YXJzICRkdW1wb24gJGR1bXBsaW1pdCAkZHVtcHBvcnRzICRkdW1wcG9ydHNvbiAkZHVtcHBvcnRzbGltaXQgJyArXG4gICAgICAnJHdyaXRlYiAkd3JpdGVoICR3cml0ZW8gJG1vbml0b3IgJG1vbml0b3JiICRtb25pdG9yaCAkbW9uaXRvcm8gJHdyaXRlbWVtYiAnICtcbiAgICAgICckZHVtcGZpbGUgJGR1bXBvZmYgJGR1bXBhbGwgJGR1bXBmbHVzaCAkZHVtcHBvcnRzb2ZmICRkdW1wcG9ydHNhbGwgJyArXG4gICAgICAnJGR1bXBwb3J0c2ZsdXNoICRmY2xvc2UgJGZkaXNwbGF5ICRmZGlzcGxheWIgJGZkaXNwbGF5aCAkZmRpc3BsYXlvICcgK1xuICAgICAgJyRmc3Ryb2JlICRmc3Ryb2JlYiAkZnN0cm9iZWggJGZzdHJvYmVvICRzd3JpdGUgJHN3cml0ZWIgJHN3cml0ZWggJyArXG4gICAgICAnJHN3cml0ZW8gJGZzY2FuZiAkZnJlYWQgJGZzZWVrICRmZmx1c2ggJGZlb2YgJGZvcGVuICRmd3JpdGUgJGZ3cml0ZWIgJyArXG4gICAgICAnJGZ3cml0ZWggJGZ3cml0ZW8gJGZtb25pdG9yICRmbW9uaXRvcmIgJGZtb25pdG9yaCAkZm1vbml0b3JvICRzZm9ybWF0ICcgK1xuICAgICAgJyRzZm9ybWF0ZiAkZmdldGMgJHVuZ2V0YyAkZmdldHMgJHNzY2FuZiAkcmV3aW5kICRmdGVsbCAkZmVycm9yJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1Zlcmlsb2cnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICd2JyxcbiAgICAgICdzdicsXG4gICAgICAnc3ZoJ1xuICAgIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IFNWX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF0sXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYigoXFxcXGQrXFwnKGJ8aHxvfGR8QnxIfE98RCkpWzAtOXh6WFphLWZBLUZfXSspJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcQigoXFwnKGJ8aHxvfGR8QnxIfE98RCkpWzAtOXh6WFphLWZBLUZfXSspJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihbMC05X10pKycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvKiBwYXJhbWV0ZXJzIHRvIGluc3RhbmNlcyAqL1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcjXFxcXCgoPyFwYXJhbWV0ZXIpLitcXFxcKSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXC5cXFxcdysnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdgJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgJ21ldGEta2V5d29yZCc6XG4gICAgICAgICAgICAnZGVmaW5lIF9fRklMRV9fICcgK1xuICAgICAgICAgICAgJ19fTElORV9fIGJlZ2luX2tleXdvcmRzIGNlbGxkZWZpbmUgZGVmYXVsdF9uZXR0eXBlIGRlZmluZSAnICtcbiAgICAgICAgICAgICdlbHNlIGVsc2lmIGVuZF9rZXl3b3JkcyBlbmRjZWxsZGVmaW5lIGVuZGlmIGlmZGVmIGlmbmRlZiAnICtcbiAgICAgICAgICAgICdpbmNsdWRlIGxpbmUgbm91bmNvbm5lY3RlZF9kcml2ZSBwcmFnbWEgcmVzZXRhbGwgdGltZXNjYWxlICcgK1xuICAgICAgICAgICAgJ3VuY29ubmVjdGVkX2RyaXZlIHVuZGVmIHVuZGVmaW5lYWxsJ1xuICAgICAgICB9LFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyaWxvZztcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBWSERMXG5BdXRob3I6IElnb3IgS2Fsbml0c2t5IDxpZ29yQGthbG5pdHNreS5vcmc+XG5Db250cmlidXRvcnM6IERhbmllbCBDLksuIEtobyA8ZGFuaWVsLmtob0B0YXVob3AuY29tPiwgR3VpbGxhdW1lIFNhdmF0b24gPGd1aWxsYXVtZS5zYXZhdG9uQGVzZW8uZnI+XG5EZXNjcmlwdGlvbjogVkhETCBpcyBhIGhhcmR3YXJlIGRlc2NyaXB0aW9uIGxhbmd1YWdlIHVzZWQgaW4gZWxlY3Ryb25pYyBkZXNpZ24gYXV0b21hdGlvbiB0byBkZXNjcmliZSBkaWdpdGFsIGFuZCBtaXhlZC1zaWduYWwgc3lzdGVtcy5cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZIRExcbiovXG5cbmZ1bmN0aW9uIHZoZGwoaGxqcykge1xuICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIFZIREwgbnVtZXJpYyBsaXRlcmFscy5cblxuICAvLyBEZWNpbWFsIGxpdGVyYWw6XG4gIGNvbnN0IElOVEVHRVJfUkUgPSAnXFxcXGQoX3xcXFxcZCkqJztcbiAgY29uc3QgRVhQT05FTlRfUkUgPSAnW2VFXVstK10/JyArIElOVEVHRVJfUkU7XG4gIGNvbnN0IERFQ0lNQUxfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnKFxcXFwuJyArIElOVEVHRVJfUkUgKyAnKT8nICsgJygnICsgRVhQT05FTlRfUkUgKyAnKT8nO1xuICAvLyBCYXNlZCBsaXRlcmFsOlxuICBjb25zdCBCQVNFRF9JTlRFR0VSX1JFID0gJ1xcXFx3Kyc7XG4gIGNvbnN0IEJBU0VEX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyMnICsgQkFTRURfSU5URUdFUl9SRSArICcoXFxcXC4nICsgQkFTRURfSU5URUdFUl9SRSArICcpPycgKyAnIycgKyAnKCcgKyBFWFBPTkVOVF9SRSArICcpPyc7XG5cbiAgY29uc3QgTlVNQkVSX1JFID0gJ1xcXFxiKCcgKyBCQVNFRF9MSVRFUkFMX1JFICsgJ3wnICsgREVDSU1BTF9MSVRFUkFMX1JFICsgJyknO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1ZIREwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhYnMgYWNjZXNzIGFmdGVyIGFsaWFzIGFsbCBhbmQgYXJjaGl0ZWN0dXJlIGFycmF5IGFzc2VydCBhc3N1bWUgYXNzdW1lX2d1YXJhbnRlZSBhdHRyaWJ1dGUgJyArXG4gICAgICAgICdiZWdpbiBibG9jayBib2R5IGJ1ZmZlciBidXMgY2FzZSBjb21wb25lbnQgY29uZmlndXJhdGlvbiBjb25zdGFudCBjb250ZXh0IGNvdmVyIGRpc2Nvbm5lY3QgJyArXG4gICAgICAgICdkb3dudG8gZGVmYXVsdCBlbHNlIGVsc2lmIGVuZCBlbnRpdHkgZXhpdCBmYWlybmVzcyBmaWxlIGZvciBmb3JjZSBmdW5jdGlvbiBnZW5lcmF0ZSAnICtcbiAgICAgICAgJ2dlbmVyaWMgZ3JvdXAgZ3VhcmRlZCBpZiBpbXB1cmUgaW4gaW5lcnRpYWwgaW5vdXQgaXMgbGFiZWwgbGlicmFyeSBsaW5rYWdlIGxpdGVyYWwgJyArXG4gICAgICAgICdsb29wIG1hcCBtb2QgbmFuZCBuZXcgbmV4dCBub3Igbm90IG51bGwgb2Ygb24gb3BlbiBvciBvdGhlcnMgb3V0IHBhY2thZ2UgcGFyYW1ldGVyIHBvcnQgJyArXG4gICAgICAgICdwb3N0cG9uZWQgcHJvY2VkdXJlIHByb2Nlc3MgcHJvcGVydHkgcHJvdGVjdGVkIHB1cmUgcmFuZ2UgcmVjb3JkIHJlZ2lzdGVyIHJlamVjdCAnICtcbiAgICAgICAgJ3JlbGVhc2UgcmVtIHJlcG9ydCByZXN0cmljdCByZXN0cmljdF9ndWFyYW50ZWUgcmV0dXJuIHJvbCByb3Igc2VsZWN0IHNlcXVlbmNlICcgK1xuICAgICAgICAnc2V2ZXJpdHkgc2hhcmVkIHNpZ25hbCBzbGEgc2xsIHNyYSBzcmwgc3Ryb25nIHN1YnR5cGUgdGhlbiB0byB0cmFuc3BvcnQgdHlwZSAnICtcbiAgICAgICAgJ3VuYWZmZWN0ZWQgdW5pdHMgdW50aWwgdXNlIHZhcmlhYmxlIHZpZXcgdm1vZGUgdnByb3AgdnVuaXQgd2FpdCB3aGVuIHdoaWxlIHdpdGggeG5vciB4b3InLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdib29sZWFuIGJpdCBjaGFyYWN0ZXIgJyArXG4gICAgICAgICdpbnRlZ2VyIHRpbWUgZGVsYXlfbGVuZ3RoIG5hdHVyYWwgcG9zaXRpdmUgJyArXG4gICAgICAgICdzdHJpbmcgYml0X3ZlY3RvciBmaWxlX29wZW5fa2luZCBmaWxlX29wZW5fc3RhdHVzICcgK1xuICAgICAgICAnc3RkX2xvZ2ljIHN0ZF9sb2dpY192ZWN0b3IgdW5zaWduZWQgc2lnbmVkIGJvb2xlYW5fdmVjdG9yIGludGVnZXJfdmVjdG9yICcgK1xuICAgICAgICAnc3RkX3Vsb2dpYyBzdGRfdWxvZ2ljX3ZlY3RvciB1bnJlc29sdmVkX3Vuc2lnbmVkIHVfdW5zaWduZWQgdW5yZXNvbHZlZF9zaWduZWQgdV9zaWduZWQgJyArXG4gICAgICAgICdyZWFsX3ZlY3RvciB0aW1lX3ZlY3RvcicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnZmFsc2UgdHJ1ZSBub3RlIHdhcm5pbmcgZXJyb3IgZmFpbHVyZSAnICsgLy8gc2V2ZXJpdHlfbGV2ZWxcbiAgICAgICAgJ2xpbmUgdGV4dCBzaWRlIHdpZHRoJyAvLyB0ZXh0aW9cbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXHsvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLCAvLyBWSERMLTIwMDggYmxvY2sgY29tbWVudGluZy5cbiAgICAgIGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IE5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJyhVfFh8MHwxfFp8V3xMfEh8LSlcXCcnLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdcXCdbQS1aYS16XShfP1tBLVphLXowLTldKSonLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2aGRsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFZpbSBTY3JpcHRcbkF1dGhvcjogSnVuIFlhbmcgPHlhbmdqdm5AMTI2LmNvbT5cbkRlc2NyaXB0aW9uOiBmdWxsIGtleXdvcmQgYW5kIGJ1aWx0LWluIGZyb20gaHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnZpbS5vcmdcbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbmZ1bmN0aW9uIHZpbShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1ZpbSBTY3JpcHQnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1shI0BcXHddKy8sXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBleHByZXNzIHZlcnNpb24gZXhjZXB0OiAhICYgKiA8ID0gPiAhISAjIEAgQEBcbiAgICAgICAgJ058MCBQfDAgWHwwIGF8MCBhYiBhYmMgYWJvIGFsIGFtIGFufDAgYXIgYXJnYSBhcmdkIGFyZ2UgYXJnZG8gYXJnZyBhcmdsIGFyZ3UgYXMgYXUgYXVnIGF1biBifDAgYk4gYmEgYmFkIGJkIGJlIGJlbCBiZiBibCBibSBibiBibyBicCBiciBicmVhIGJyZWFrYSBicmVha2QgYnJlYWtsIGJybyBidWZkbyBidWZmZXJzIGJ1biBidyBjfDAgY04gY05mIGNhIGNhYmMgY2FkZGIgY2FkIGNhZGRmIGNhbCBjYXQgY2IgY2MgY2NsIGNkIGNlIGNleCBjZiBjZmlyIGNnZXRiIGNnZXRlIGNnIGNoYW5nZXMgY2hkIGNoZSBjaGVja3QgY2wgY2xhIGNsbyBjbSBjbWFwYyBjbWUgY24gY25ldyBjbmYgY25vIGNub3JlYSBjbm9yZW1lIGNvIGNvbCBjb2xvIGNvbSBjb21jIGNvbXAgY29uIGNvbmYgY29wZSAnICtcbiAgICAgICAgJ2NwIGNwZiBjcSBjciBjcyBjc3QgY3UgY3VuYSBjdW5tZSBjdyBkZWxtIGRlYiBkZWJ1Z2cgZGVsYyBkZWxmIGRpZiBkaWZmZyBkaWZmbyBkaWZmcCBkaWZmcHUgZGlmZnMgZGlmZnRoaXMgZGlnIGRpIGRsIGRlbGwgZGogZGxpIGRvIGRvYXV0b2EgZHAgZHIgZHMgZHNwIGV8MCBlYSBlYyBlY2hvZSBlY2hvaCBlY2hvbSBlY2hvbiBlbCBlbHNlaSBlbSBlbiBlbmRmbyBlbmRmIGVuZHQgZW5kdyBlbmUgZXggZXhlIGV4aSBleHUgZnwwIGZpbGVzIGZpbGV0IGZpbiBmaW5hIGZpbmkgZmlyIGZpeCBmbyBmb2xkYyBmb2xkZCBmb2xkZG9jIGZvbGRvIGZvciBmdSBnbyBnciBncmVwYSBndSBndiBoYSBoZWxwZiBoZWxwZyBoZWxwdCBoaSBoaWQgaGlzIGlhIGlhYmMgaWYgaWogaWwgaW0gaW1hcGMgJyArXG4gICAgICAgICdpbWUgaW5vIGlub3JlYSBpbm9yZW1lIGludCBpcyBpc3AgaXUgaXVuYSBpdW5tZSBqfDAganUga3wwIGtlZXBhIGtlZSBrZWVwaiBsTiBsTmYgbHwwIGxhZCBsYWRkYiBsYWRkZiBsYSBsYW4gbGF0IGxiIGxjIGxjaCBsY2wgbGNzIGxlIGxlZnRhIGxldCBsZXggbGYgbGZpciBsZ2V0YiBsZ2V0ZSBsZyBsZ3IgbGdyZXBhIGxoIGxsIGxsYSBsbGkgbG1hayBsbSBsbWFwYyBsbmUgbG5ldyBsbmYgbG4gbG9hZGsgbG8gbG9jIGxvY2t2IGxvbCBsb3BlIGxwIGxwZiBsciBscyBsdCBsdSBsdWEgbHVhZCBsdWFmIGx2IGx2aW1ncmVwYSBsdyBtfDAgbWEgbWFrIG1hcCBtYXBjIG1hcmtzIG1hdCBtZSBtZW51dCBtZXMgbWsgbWtzIG1rc3AgbWt2IG1rdmllIG1vZCBteiBtemYgbmJjIG5iIG5icyBuZXcgbm0gbm1hcGMgbm1lIG5uIG5ub3JlbWUgbm9hIG5vIG5vaCBub3JlYSBub3JlbWUgbm9ybSBudSBudW4gbnVubWUgb2wgb3wwIG9tIG9tYXBjIG9tZSBvbiBvbm8gb25vcmVtZSBvcHQgb3Ugb3VubWUgb3cgcHwwICcgK1xuICAgICAgICAncHJvZmQgcHJvZiBwcm8gcHJvbXB0ciBwYyBwZWQgcGUgcGVybGQgcG8gcG9wdSBwcCBwcmUgcHJldiBwcyBwdCBwdE4gcHRmIHB0aiBwdGwgcHRuIHB0cCBwdHIgcHRzIHB1IHB3IHB5MyBweXRob24zIHB5M2QgcHkzZiBweSBweWQgcHlmIHF1aXRhIHFhIHJlYyByZWQgcmVkaSByZWRyIHJlZHJhd3MgcmVnIHJlcyByZXQgcmV0dSByZXcgcmkgcmlnaHRiIHJ1YiBydWJ5ZCBydWJ5ZiBydW5kIHJ1IHJ2IHNOIHNhbiBzYSBzYWwgc2F2IHNiIHNiTiBzYmEgc2JmIHNibCBzYm0gc2JuIHNicCBzYnIgc2NyaXAgc2NyaXB0ZSBzY3Mgc2Ugc2V0ZiBzZXRnIHNldGwgc2Ygc2ZpciBzaCBzaW0gc2lnIHNpbCBzbCBzbGEgc20gc21hcCBzbWFwYyBzbWUgc24gc25pIHNubyBzbm9yIHNub3JlbWUgc29yICcgK1xuICAgICAgICAnc28gc3BlbGxkIHNwZSBzcGVsbGkgc3BlbGxyIHNwZWxsdSBzcGVsbHcgc3Agc3ByIHNyZSBzdCBzdGEgc3RhcnRnIHN0YXJ0ciBzdGFyIHN0b3BpIHN0aiBzdHMgc3VuIHN1bm0gc3VubWUgc3VzIHN2IHN3IHN5IHN5bnRpIHN5bmMgdE4gdGFiTiB0YWJjIHRhYmRvIHRhYmUgdGFiZiB0YWJmaXIgdGFibCB0YWJtIHRhYm5ldyAnICtcbiAgICAgICAgJ3RhYm4gdGFibyB0YWJwIHRhYnIgdGFicyB0YWIgdGEgdGFncyB0YyB0Y2xkIHRjbGYgdGUgdGYgdGggdGogdGwgdG0gdG4gdG8gdHAgdHIgdHJ5IHRzIHR1IHV8MCB1bmRvaiB1bmRvbCB1bmEgdW5oIHVubCB1bmxvIHVubSB1bm1lIHVucyB1cCB2ZSB2ZXJiIHZlcnQgdmltIHZpbWdyZXBhIHZpIHZpdSB2aWUgdm0gdm1hcGMgdm1lIHZuZSB2biB2bm9yZW1lIHZzIHZ1IHZ1bm1lIHdpbmRvIHd8MCB3TiB3YSB3aCB3aSB3aW5jIHdpbnAgd24gd3Agd3Egd3FhIHdzIHd1IHd2IHh8MCB4YSB4bWFwYyB4bSB4bWUgeG4geG5vcmVtZSB4dSB4dW5tZSB5fDAgenwwIH4gJyArXG4gICAgICAgIC8vIGZ1bGwgdmVyc2lvblxuICAgICAgICAnTmV4dCBQcmludCBhcHBlbmQgYWJicmV2aWF0ZSBhYmNsZWFyIGFib3ZlbGVmdCBhbGwgYW1lbnUgYW5vcmVtZW51IGFyZ3MgYXJnYWRkIGFyZ2RlbGV0ZSBhcmdlZGl0IGFyZ2dsb2JhbCBhcmdsb2NhbCBhcmd1bWVudCBhc2NpaSBhdXRvY21kIGF1Z3JvdXAgYXVubWVudSBidWZmZXIgYk5leHQgYmFsbCBiYWRkIGJkZWxldGUgYmVoYXZlIGJlbG93cmlnaHQgYmZpcnN0IGJsYXN0IGJtb2RpZmllZCBibmV4dCBib3RyaWdodCBicHJldmlvdXMgYnJld2luZCBicmVhayBicmVha2FkZCBicmVha2RlbCBicmVha2xpc3QgYnJvd3NlIGJ1bmxvYWQgJyArXG4gICAgICAgICdid2lwZW91dCBjaGFuZ2UgY05leHQgY05maWxlIGNhYmJyZXYgY2FiY2xlYXIgY2FkZGJ1ZmZlciBjYWRkZXhwciBjYWRkZmlsZSBjYWxsIGNhdGNoIGNidWZmZXIgY2Nsb3NlIGNlbnRlciBjZXhwciBjZmlsZSBjZmlyc3QgY2dldGJ1ZmZlciBjZ2V0ZXhwciBjZ2V0ZmlsZSBjaGRpciBjaGVja3BhdGggY2hlY2t0aW1lIGNsaXN0IGNsYXN0IGNsb3NlIGNtYXAgY21hcGNsZWFyIGNtZW51IGNuZXh0IGNuZXdlciBjbmZpbGUgY25vcmVtYXAgY25vcmVhYmJyZXYgY25vcmVtZW51IGNvcHkgY29sZGVyIGNvbG9yc2NoZW1lIGNvbW1hbmQgY29tY2xlYXIgY29tcGlsZXIgY29udGludWUgY29uZmlybSBjb3BlbiBjcHJldmlvdXMgY3BmaWxlIGNxdWl0IGNyZXdpbmQgY3Njb3BlIGNzdGFnIGN1bm1hcCAnICtcbiAgICAgICAgJ2N1bmFiYnJldiBjdW5tZW51IGN3aW5kb3cgZGVsZXRlIGRlbG1hcmtzIGRlYnVnIGRlYnVnZ3JlZWR5IGRlbGNvbW1hbmQgZGVsZnVuY3Rpb24gZGlmZnVwZGF0ZSBkaWZmZ2V0IGRpZmZvZmYgZGlmZnBhdGNoIGRpZmZwdXQgZGlmZnNwbGl0IGRpZ3JhcGhzIGRpc3BsYXkgZGVsZXRlbCBkanVtcCBkbGlzdCBkb2F1dG9jbWQgZG9hdXRvYWxsIGRlbGV0ZXAgZHJvcCBkc2VhcmNoIGRzcGxpdCBlZGl0IGVhcmxpZXIgZWNobyBlY2hvZXJyIGVjaG9obCBlY2hvbXNnIGVsc2UgZWxzZWlmIGVtZW51IGVuZGlmIGVuZGZvciAnICtcbiAgICAgICAgJ2VuZGZ1bmN0aW9uIGVuZHRyeSBlbmR3aGlsZSBlbmV3IGV4ZWN1dGUgZXhpdCBleHVzYWdlIGZpbGUgZmlsZXR5cGUgZmluZCBmaW5hbGx5IGZpbmlzaCBmaXJzdCBmaXhkZWwgZm9sZCBmb2xkY2xvc2UgZm9sZGRvb3BlbiBmb2xkZG9jbG9zZWQgZm9sZG9wZW4gZnVuY3Rpb24gZ2xvYmFsIGdvdG8gZ3JlcCBncmVwYWRkIGd1aSBndmltIGhhcmRjb3B5IGhlbHAgaGVscGZpbmQgaGVscGdyZXAgaGVscHRhZ3MgaGlnaGxpZ2h0IGhpZGUgaGlzdG9yeSBpbnNlcnQgaWFiYnJldiBpYWJjbGVhciBpanVtcCBpbGlzdCBpbWFwICcgK1xuICAgICAgICAnaW1hcGNsZWFyIGltZW51IGlub3JlbWFwIGlub3JlYWJicmV2IGlub3JlbWVudSBpbnRybyBpc2VhcmNoIGlzcGxpdCBpdW5tYXAgaXVuYWJicmV2IGl1bm1lbnUgam9pbiBqdW1wcyBrZWVwYWx0IGtlZXBtYXJrcyBrZWVwanVtcHMgbE5leHQgbE5maWxlIGxpc3QgbGFkZGV4cHIgbGFkZGJ1ZmZlciBsYWRkZmlsZSBsYXN0IGxhbmd1YWdlIGxhdGVyIGxidWZmZXIgbGNkIGxjaGRpciBsY2xvc2UgbGNzY29wZSBsZWZ0IGxlZnRhYm92ZSBsZXhwciBsZmlsZSBsZmlyc3QgbGdldGJ1ZmZlciBsZ2V0ZXhwciBsZ2V0ZmlsZSBsZ3JlcCBsZ3JlcGFkZCBsaGVscGdyZXAgbGxhc3QgbGxpc3QgbG1ha2UgbG1hcCBsbWFwY2xlYXIgbG5leHQgbG5ld2VyIGxuZmlsZSBsbm9yZW1hcCBsb2Fka2V5bWFwIGxvYWR2aWV3ICcgK1xuICAgICAgICAnbG9ja21hcmtzIGxvY2t2YXIgbG9sZGVyIGxvcGVuIGxwcmV2aW91cyBscGZpbGUgbHJld2luZCBsdGFnIGx1bm1hcCBsdWFkbyBsdWFmaWxlIGx2aW1ncmVwIGx2aW1ncmVwYWRkIGx3aW5kb3cgbW92ZSBtYXJrIG1ha2UgbWFwY2xlYXIgbWF0Y2ggbWVudSBtZW51dHJhbnNsYXRlIG1lc3NhZ2VzIG1rZXhyYyBta3Nlc3Npb24gbWtzcGVsbCBta3ZpbXJjIG1rdmlldyBtb2RlIG16c2NoZW1lIG16ZmlsZSBuYmNsb3NlIG5ia2V5IG5ic2FydCBuZXh0IG5tYXAgbm1hcGNsZWFyIG5tZW51IG5ub3JlbWFwICcgK1xuICAgICAgICAnbm5vcmVtZW51IG5vYXV0b2NtZCBub3JlbWFwIG5vaGxzZWFyY2ggbm9yZWFiYnJldiBub3JlbWVudSBub3JtYWwgbnVtYmVyIG51bm1hcCBudW5tZW51IG9sZGZpbGVzIG9wZW4gb21hcCBvbWFwY2xlYXIgb21lbnUgb25seSBvbm9yZW1hcCBvbm9yZW1lbnUgb3B0aW9ucyBvdW5tYXAgb3VubWVudSBvd25zeW50YXggcHJpbnQgcHJvZmRlbCBwcm9maWxlIHByb21wdGZpbmQgcHJvbXB0cmVwbCBwY2xvc2UgcGVkaXQgcGVybCBwZXJsZG8gcG9wIHBvcHVwIHBwb3AgcHJlc2VydmUgcHJldmlvdXMgcHNlYXJjaCBwdGFnIHB0TmV4dCAnICtcbiAgICAgICAgJ3B0Zmlyc3QgcHRqdW1wIHB0bGFzdCBwdG5leHQgcHRwcmV2aW91cyBwdHJld2luZCBwdHNlbGVjdCBwdXQgcHdkIHB5M2RvIHB5M2ZpbGUgcHl0aG9uIHB5ZG8gcHlmaWxlIHF1aXQgcXVpdGFsbCBxYWxsIHJlYWQgcmVjb3ZlciByZWRvIHJlZGlyIHJlZHJhdyByZWRyYXdzdGF0dXMgcmVnaXN0ZXJzIHJlc2l6ZSByZXRhYiByZXR1cm4gcmV3aW5kIHJpZ2h0IHJpZ2h0YmVsb3cgcnVieSBydWJ5ZG8gcnVieWZpbGUgcnVuZG8gcnVudGltZSBydmltaW5mbyBzdWJzdGl0dXRlIHNOZXh0IHNhbmRib3ggc2FyZ3VtZW50IHNhbGwgc2F2ZWFzIHNidWZmZXIgc2JOZXh0IHNiYWxsIHNiZmlyc3Qgc2JsYXN0IHNibW9kaWZpZWQgc2JuZXh0IHNicHJldmlvdXMgc2JyZXdpbmQgc2NyaXB0bmFtZXMgc2NyaXB0ZW5jb2RpbmcgJyArXG4gICAgICAgICdzY3Njb3BlIHNldCBzZXRmaWxldHlwZSBzZXRnbG9iYWwgc2V0bG9jYWwgc2ZpbmQgc2ZpcnN0IHNoZWxsIHNpbWFsdCBzaWduIHNpbGVudCBzbGVlcCBzbGFzdCBzbWFnaWMgc21hcGNsZWFyIHNtZW51IHNuZXh0IHNuaWZmIHNub21hZ2ljIHNub3JlbWFwIHNub3JlbWVudSBzb3J0IHNvdXJjZSBzcGVsbGR1bXAgc3BlbGxnb29kIHNwZWxsaW5mbyBzcGVsbHJlcGFsbCBzcGVsbHVuZG8gc3BlbGx3cm9uZyBzcGxpdCBzcHJldmlvdXMgc3Jld2luZCBzdG9wIHN0YWcgc3RhcnRncmVwbGFjZSBzdGFydHJlcGxhY2UgJyArXG4gICAgICAgICdzdGFydGluc2VydCBzdG9waW5zZXJ0IHN0anVtcCBzdHNlbGVjdCBzdW5oaWRlIHN1bm1hcCBzdW5tZW51IHN1c3BlbmQgc3ZpZXcgc3dhcG5hbWUgc3ludGF4IHN5bnRpbWUgc3luY2JpbmQgdE5leHQgdGFiTmV4dCB0YWJjbG9zZSB0YWJlZGl0IHRhYmZpbmQgdGFiZmlyc3QgdGFibGFzdCB0YWJtb3ZlIHRhYm5leHQgdGFib25seSB0YWJwcmV2aW91cyB0YWJyZXdpbmQgdGFnIHRjbCB0Y2xkbyB0Y2xmaWxlIHRlYXJvZmYgdGZpcnN0IHRocm93IHRqdW1wIHRsYXN0IHRtZW51IHRuZXh0IHRvcGxlZnQgdHByZXZpb3VzICcgKyAndHJld2luZCB0c2VsZWN0IHR1bm1lbnUgdW5kbyB1bmRvam9pbiB1bmRvbGlzdCB1bmFiYnJldmlhdGUgdW5oaWRlIHVubGV0IHVubG9ja3ZhciB1bm1hcCB1bm1lbnUgdW5zaWxlbnQgdXBkYXRlIHZnbG9iYWwgdmVyc2lvbiB2ZXJib3NlIHZlcnRpY2FsIHZpbWdyZXAgdmltZ3JlcGFkZCB2aXN1YWwgdml1c2FnZSB2aWV3IHZtYXAgdm1hcGNsZWFyIHZtZW51IHZuZXcgJyArXG4gICAgICAgICd2bm9yZW1hcCB2bm9yZW1lbnUgdnNwbGl0IHZ1bm1hcCB2dW5tZW51IHdyaXRlIHdOZXh0IHdhbGwgd2hpbGUgd2luc2l6ZSB3aW5jbWQgd2lucG9zIHduZXh0IHdwcmV2aW91cyB3cWFsbCB3c3ZlcmIgd3VuZG8gd3ZpbWluZm8geGl0IHhhbGwgeG1hcGNsZWFyIHhtYXAgeG1lbnUgeG5vcmVtYXAgeG5vcmVtZW51IHh1bm1hcCB4dW5tZW51IHlhbmsnLFxuICAgICAgYnVpbHRfaW46IC8vIGJ1aWx0IGluIGZ1bmNcbiAgICAgICAgJ3N5bklEdHJhbnMgYXRhbjIgcmFuZ2UgbWF0Y2hhcmcgZGlkX2ZpbGV0eXBlIGFzaW4gZmVlZGtleXMgeG9yIGFyZ3YgJyArXG4gICAgICAgICdjb21wbGV0ZV9jaGVjayBhZGQgZ2V0d2lucG9zeCBnZXRxZmxpc3QgZ2V0d2lucG9zeSBzY3JlZW5jb2wgJyArXG4gICAgICAgICdjbGVhcm1hdGNoZXMgZW1wdHkgZXh0ZW5kIGdldGNtZHBvcyBtemV2YWwgZ2FyYmFnZWNvbGxlY3Qgc2V0cmVnICcgK1xuICAgICAgICAnY2VpbCBzcXJ0IGRpZmZfaGxJRCBpbnB1dHNlY3JldCBnZXQgZ2V0ZnBlcm0gZ2V0cGlkIGZpbGV3cml0YWJsZSAnICtcbiAgICAgICAgJ3NoaWZ0d2lkdGggbWF4IHNpbmggaXNkaXJlY3Rvcnkgc3luSUQgc3lzdGVtIGlucHV0cmVzdG9yZSB3aW5saW5lICcgK1xuICAgICAgICAnYXRhbiB2aXN1YWxtb2RlIGlucHV0bGlzdCB0YWJwYWdld2lubnIgcm91bmQgZ2V0cmVndHlwZSBtYXBjaGVjayAnICtcbiAgICAgICAgJ2hhc21hcHRvIGhpc3RkZWwgYXJnaWR4IGZpbmRmaWxlIHNoYTI1NiBleGlzdHMgdG91cHBlciBnZXRjbWRsaW5lICcgK1xuICAgICAgICAndGFnbGlzdCBzdHJpbmcgZ2V0bWF0Y2hlcyBidWZuciBzdHJmdGltZSB3aW53aWR0aCBidWZleGlzdHMgJyArXG4gICAgICAgICdzdHJ0cmFucyB0YWJwYWdlYnVmbGlzdCBzZXRjbWRwb3MgcmVtb3RlX3JlYWQgcHJpbnRmIHNldGxvY2xpc3QgJyArXG4gICAgICAgICdnZXRwb3MgZ2V0bGluZSBidWZ3aW5uciBmbG9hdDJuciBsZW4gZ2V0Y21kdHlwZSBkaWZmX2ZpbGxlciBsdWFldmFsICcgK1xuICAgICAgICAncmVzb2x2ZSBsaWJjYWxsbnIgZm9sZGNsb3NlZGVuZCByZXZlcnNlIGZpbHRlciBoYXNfa2V5IGJ1Zm5hbWUgJyArXG4gICAgICAgICdzdHIyZmxvYXQgc3RybGVuIHNldGxpbmUgZ2V0Y2hhcm1vZCBzZXRidWZ2YXIgaW5kZXggc2VhcmNocG9zICcgK1xuICAgICAgICAnc2hlbGxlc2NhcGUgdW5kb2ZpbGUgZm9sZGNsb3NlZCBzZXRxZmxpc3QgYnVmbGlzdGVkIHN0cmNoYXJzIHN0cjJuciAnICtcbiAgICAgICAgJ3ZpcnRjb2wgZmxvb3IgcmVtb3ZlIHVuZG90cmVlIHJlbW90ZV9leHByIHdpbmhlaWdodCBnZXR0YWJ3aW52YXIgJyArXG4gICAgICAgICdyZWx0aW1lIGN1cnNvciB0YWJwYWdlbnIgZmluZGRpciBsb2NhbHRpbWUgYWNvcyBnZXRsb2NsaXN0IHNlYXJjaCAnICtcbiAgICAgICAgJ3RhbmggbWF0Y2hlbmQgcmVuYW1lIGdldHRhYnZhciBzdHJkaXNwbGF5d2lkdGggdHlwZSBhYnMgcHkzZXZhbCAnICtcbiAgICAgICAgJ3NldHdpbnZhciB0b2xvd2VyIHdpbGRtZW51bW9kZSBsb2cxMCBzcGVsbHN1Z2dlc3QgYnVmbG9hZGVkICcgK1xuICAgICAgICAnc3luY29uY2VhbGVkIG5leHRub25ibGFuayBzZXJ2ZXIyY2xpZW50IGNvbXBsZXRlIHNldHRhYndpbnZhciAnICtcbiAgICAgICAgJ2V4ZWN1dGFibGUgaW5wdXQgd2luY29sIHNldG1hdGNoZXMgZ2V0ZnR5cGUgaGxJRCBpbnB1dHNhdmUgJyArXG4gICAgICAgICdzZWFyY2hwYWlyIG9yIHNjcmVlbnJvdyBsaW5lIHNldHRhYnZhciBoaXN0YWRkIGRlZXBjb3B5IHN0cnBhcnQgJyArXG4gICAgICAgICdyZW1vdGVfcGVlayBhbmQgZXZhbCBnZXRmdGltZSBzdWJtYXRjaCBzY3JlZW5jaGFyIHdpbnNhdmV2aWV3ICcgK1xuICAgICAgICAnbWF0Y2hhZGQgbWtkaXIgc2NyZWVuYXR0ciBnZXRmb250bmFtZSBsaWJjYWxsIHJlbHRpbWVzdHIgZ2V0ZnNpemUgJyArXG4gICAgICAgICd3aW5uciBpbnZlcnQgcG93IGdldGJ1ZmxpbmUgYnl0ZTJsaW5lIHNvdW5kZm9sZCByZXBlYXQgZm5hbWVlc2NhcGUgJyArXG4gICAgICAgICd0YWdmaWxlcyBzaW4gc3Ryd2lkdGggc3BlbGxiYWR3b3JkIHRydW5jIG1hcGFyZyBsb2cgbGlzcGluZGVudCAnICtcbiAgICAgICAgJ2hvc3RuYW1lIHNldHBvcyBnbG9icGF0aCByZW1vdGVfZm9yZWdyb3VuZCBnZXRjaGFyIHN5bklEYXR0ciAnICtcbiAgICAgICAgJ2ZuYW1lbW9kaWZ5IGNzY29wZV9jb25uZWN0aW9uIHN0cmlkeCB3aW5idWZuciBpbmRlbnQgbWluICcgK1xuICAgICAgICAnY29tcGxldGVfYWRkIG5yMmNoYXIgc2VhcmNocGFpcnBvcyBpbnB1dGRpYWxvZyB2YWx1ZXMgbWF0Y2hsaXN0ICcgK1xuICAgICAgICAnaXRlbXMgaGxleGlzdHMgc3RycmlkeCBicm93c2VkaXIgZXhwYW5kIGZtb2QgcGF0aHNob3J0ZW4gbGluZTJieXRlICcgK1xuICAgICAgICAnYXJnYyBjb3VudCBnZXR3aW52YXIgZ2xvYiBmb2xkdGV4dHJlc3VsdCBnZXRyZWcgZm9yZWdyb3VuZCBjb3NoICcgK1xuICAgICAgICAnbWF0Y2hkZWxldGUgaGFzIGNoYXIybnIgc2ltcGxpZnkgaGlzdGdldCBzZWFyY2hkZWNsIGljb252ICcgK1xuICAgICAgICAnd2lucmVzdGNtZCBwdW12aXNpYmxlIHdyaXRlZmlsZSBmb2xkbGV2ZWwgaGFzbG9jYWxkaXIga2V5cyBjb3MgJyArXG4gICAgICAgICdtYXRjaHN0ciBmb2xkdGV4dCBoaXN0bnIgdGFuIHRlbXBuYW1lIGdldGN3ZCBieXRlaWR4IGdldGJ1ZnZhciAnICtcbiAgICAgICAgJ2lzbG9ja2VkIGVzY2FwZSBldmVudGhhbmRsZXIgcmVtb3RlX3NlbmQgc2VydmVybGlzdCB3aW5yZXN0dmlldyAnICtcbiAgICAgICAgJ3N5bnN0YWNrIHB5ZXZhbCBwcmV2bm9uYmxhbmsgcmVhZGZpbGUgY2luZGVudCBmaWxlcmVhZGFibGUgY2hhbmdlbnIgJyArXG4gICAgICAgICdleHAnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvOy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcblxuICAgICAgLypcbiAgICAgIEEgZG91YmxlIHF1b3RlIGNhbiBzdGFydCBlaXRoZXIgYSBzdHJpbmcgb3IgYSBsaW5lIGNvbW1lbnQuIFN0cmluZ3MgYXJlXG4gICAgICBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiBhIGxpbmUgYnkgYW5vdGhlciBkb3VibGUgcXVvdGUgYW5kIGNhbiBjb250YWluXG4gICAgICBlc2NhcGVkIGRvdWJsZS1xdW90ZXMgYW5kIHBvc3QtZXNjYXBlZCBsaW5lIGJyZWFrcy5cblxuICAgICAgQWxzbywgYW55IGRvdWJsZSBxdW90ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpcyBhIGNvbW1lbnQgYnV0IHdlXG4gICAgICBkb24ndCBoYW5kbGUgdGhhdCBwcm9wZXJseSBhdCB0aGUgbW9tZW50OiBhbnkgZG91YmxlIHF1b3RlIGluc2lkZSB3aWxsXG4gICAgICB0dXJuIHRoZW0gaW50byBhIHN0cmluZy4gSGFuZGxpbmcgaXQgcHJvcGVybHkgd2lsbCByZXF1aXJlIGEgc21hcnRlclxuICAgICAgcGFyc2VyLlxuICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC9cIihcXFxcXCJ8XFxuXFxcXHxbXlwiXFxuXSkqXCIvXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcIicsICckJyksXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1tid3RnbHNhdl06W1xcd1xcZF9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIGZ1bmN0aW9uIScsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwpJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC88W1xcdy1dKz4vXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZpbTtcbiIsCiAgICAiLypcbkxhbmd1YWdlOiBJbnRlbCB4ODYgQXNzZW1ibHlcbkF1dGhvcjogaW5ub2NlbmF0IDxpbm5vY2VuYXRAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IHg4NiBhc3NlbWJseSBsYW5ndWFnZSB1c2luZyBJbnRlbCdzIG1uZW1vbmljIGFuZCBOQVNNIHN5bnRheFxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWDg2X2Fzc2VtYmx5X2xhbmd1YWdlXG5DYXRlZ29yeTogYXNzZW1ibGVyXG4qL1xuXG5mdW5jdGlvbiB4ODZhc20oaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdJbnRlbCB4ODYgQXNzZW1ibHknLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnWy4lXT8nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdsb2NrIHJlcCByZXBlIHJlcHogcmVwbmUgcmVwbnogeGFxdWlyZSB4cmVsZWFzZSBibmQgbm9ibmQgJyArXG4gICAgICAgICdhYWEgYWFkIGFhbSBhYXMgYWRjIGFkZCBhbmQgYXJwbCBiYjBfcmVzZXQgYmIxX3Jlc2V0IGJvdW5kIGJzZiBic3IgYnN3YXAgYnQgYnRjIGJ0ciBidHMgY2FsbCBjYncgY2RxIGNkcWUgY2xjIGNsZCBjbGkgY2x0cyBjbWMgY21wIGNtcHNiIGNtcHNkIGNtcHNxIGNtcHN3IGNtcHhjaGcgY21weGNoZzQ4NiBjbXB4Y2hnOGIgY21weGNoZzE2YiBjcHVpZCBjcHVfcmVhZCBjcHVfd3JpdGUgY3FvIGN3ZCBjd2RlIGRhYSBkYXMgZGVjIGRpdiBkbWludCBlbW1zIGVudGVyIGVxdSBmMnhtMSBmYWJzIGZhZGQgZmFkZHAgZmJsZCBmYnN0cCBmY2hzIGZjbGV4IGZjbW92YiBmY21vdmJlIGZjbW92ZSBmY21vdm5iIGZjbW92bmJlIGZjbW92bmUgZmNtb3ZudSBmY21vdnUgZmNvbSBmY29taSBmY29taXAgZmNvbXAgZmNvbXBwIGZjb3MgZmRlY3N0cCBmZGlzaSBmZGl2IGZkaXZwIGZkaXZyIGZkaXZycCBmZW1tcyBmZW5pIGZmcmVlIGZmcmVlcCBmaWFkZCBmaWNvbSBmaWNvbXAgZmlkaXYgZmlkaXZyIGZpbGQgZmltdWwgZmluY3N0cCBmaW5pdCBmaXN0IGZpc3RwIGZpc3R0cCBmaXN1YiBmaXN1YnIgZmxkIGZsZDEgZmxkY3cgZmxkZW52IGZsZGwyZSBmbGRsMnQgZmxkbGcyIGZsZGxuMiBmbGRwaSBmbGR6IGZtdWwgZm11bHAgZm5jbGV4IGZuZGlzaSBmbmVuaSBmbmluaXQgZm5vcCBmbnNhdmUgZm5zdGN3IGZuc3RlbnYgZm5zdHN3IGZwYXRhbiBmcHJlbSBmcHJlbTEgZnB0YW4gZnJuZGludCBmcnN0b3IgZnNhdmUgZnNjYWxlIGZzZXRwbSBmc2luIGZzaW5jb3MgZnNxcnQgZnN0IGZzdGN3IGZzdGVudiBmc3RwIGZzdHN3IGZzdWIgZnN1YnAgZnN1YnIgZnN1YnJwIGZ0c3QgZnVjb20gZnVjb21pIGZ1Y29taXAgZnVjb21wIGZ1Y29tcHAgZnhhbSBmeGNoIGZ4dHJhY3QgZnlsMnggZnlsMnhwMSBobHQgaWJ0cyBpY2VicCBpZGl2IGltdWwgaW4gaW5jIGluY2JpbiBpbnNiIGluc2QgaW5zdyBpbnQgaW50MDEgaW50MSBpbnQwMyBpbnQzIGludG8gaW52ZCBpbnZwY2lkIGludmxwZyBpbnZscGdhIGlyZXQgaXJldGQgaXJldHEgaXJldHcgamN4eiBqZWN4eiBqcmN4eiBqbXAgam1wZSBsYWhmIGxhciBsZHMgbGVhIGxlYXZlIGxlcyBsZmVuY2UgbGZzIGxnZHQgbGdzIGxpZHQgbGxkdCBsbXN3IGxvYWRhbGwgbG9hZGFsbDI4NiBsb2RzYiBsb2RzZCBsb2RzcSBsb2RzdyBsb29wIGxvb3BlIGxvb3BuZSBsb29wbnogbG9vcHogbHNsIGxzcyBsdHIgbWZlbmNlIG1vbml0b3IgbW92IG1vdmQgbW92cSBtb3ZzYiBtb3ZzZCBtb3ZzcSBtb3ZzdyBtb3ZzeCBtb3ZzeGQgbW92enggbXVsIG13YWl0IG5lZyBub3Agbm90IG9yIG91dCBvdXRzYiBvdXRzZCBvdXRzdyBwYWNrc3NkdyBwYWNrc3N3YiBwYWNrdXN3YiBwYWRkYiBwYWRkZCBwYWRkc2IgcGFkZHNpdyBwYWRkc3cgcGFkZHVzYiBwYWRkdXN3IHBhZGR3IHBhbmQgcGFuZG4gcGF1c2UgcGF2ZWIgcGF2Z3VzYiBwY21wZXFiIHBjbXBlcWQgcGNtcGVxdyBwY21wZ3RiIHBjbXBndGQgcGNtcGd0dyBwZGlzdGliIHBmMmlkIHBmYWNjIHBmYWRkIHBmY21wZXEgcGZjbXBnZSBwZmNtcGd0IHBmbWF4IHBmbWluIHBmbXVsIHBmcmNwIHBmcmNwaXQxIHBmcmNwaXQyIHBmcnNxaXQxIHBmcnNxcnQgcGZzdWIgcGZzdWJyIHBpMmZkIHBtYWNocml3IHBtYWRkd2QgcG1hZ3cgcG11bGhyaXcgcG11bGhyd2EgcG11bGhyd2MgcG11bGh3IHBtdWxsdyBwbXZnZXpiIHBtdmx6YiBwbXZuemIgcG12emIgcG9wIHBvcGEgcG9wYWQgcG9wYXcgcG9wZiBwb3BmZCBwb3BmcSBwb3BmdyBwb3IgcHJlZmV0Y2ggcHJlZmV0Y2h3IHBzbGxkIHBzbGxxIHBzbGx3IHBzcmFkIHBzcmF3IHBzcmxkIHBzcmxxIHBzcmx3IHBzdWJiIHBzdWJkIHBzdWJzYiBwc3Vic2l3IHBzdWJzdyBwc3VidXNiIHBzdWJ1c3cgcHN1YncgcHVucGNraGJ3IHB1bnBja2hkcSBwdW5wY2tod2QgcHVucGNrbGJ3IHB1bnBja2xkcSBwdW5wY2tsd2QgcHVzaCBwdXNoYSBwdXNoYWQgcHVzaGF3IHB1c2hmIHB1c2hmZCBwdXNoZnEgcHVzaGZ3IHB4b3IgcmNsIHJjciByZHNociByZG1zciByZHBtYyByZHRzYyByZHRzY3AgcmV0IHJldGYgcmV0biByb2wgcm9yIHJkbSByc2RjIHJzbGR0IHJzbSByc3RzIHNhaGYgc2FsIHNhbGMgc2FyIHNiYiBzY2FzYiBzY2FzZCBzY2FzcSBzY2FzdyBzZmVuY2Ugc2dkdCBzaGwgc2hsZCBzaHIgc2hyZCBzaWR0IHNsZHQgc2tpbml0IHNtaSBzbWludCBzbWludG9sZCBzbXN3IHN0YyBzdGQgc3RpIHN0b3NiIHN0b3NkIHN0b3NxIHN0b3N3IHN0ciBzdWIgc3ZkYyBzdmxkdCBzdnRzIHN3YXBncyBzeXNjYWxsIHN5c2VudGVyIHN5c2V4aXQgc3lzcmV0IHRlc3QgdWQwIHVkMSB1ZDJiIHVkMiB1ZDJhIHVtb3YgdmVyciB2ZXJ3IGZ3YWl0IHdiaW52ZCB3cnNociB3cm1zciB4YWRkIHhidHMgeGNoZyB4bGF0YiB4bGF0IHhvciBjbW92ZSBjbW92eiBjbW92bmUgY21vdm56IGNtb3ZhIGNtb3ZuYmUgY21vdmFlIGNtb3ZuYiBjbW92YiBjbW92bmFlIGNtb3ZiZSBjbW92bmEgY21vdmcgY21vdm5sZSBjbW92Z2UgY21vdm5sIGNtb3ZsIGNtb3ZuZ2UgY21vdmxlIGNtb3ZuZyBjbW92YyBjbW92bmMgY21vdm8gY21vdm5vIGNtb3ZzIGNtb3ZucyBjbW92cCBjbW92cGUgY21vdm5wIGNtb3ZwbyBqZSBqeiBqbmUgam56IGphIGpuYmUgamFlIGpuYiBqYiBqbmFlIGpiZSBqbmEgamcgam5sZSBqZ2Ugam5sIGpsIGpuZ2UgamxlIGpuZyBqYyBqbmMgam8gam5vIGpzIGpucyBqcG8gam5wIGpwZSBqcCBzZXRlIHNldHogc2V0bmUgc2V0bnogc2V0YSBzZXRuYmUgc2V0YWUgc2V0bmIgc2V0bmMgc2V0YiBzZXRuYWUgc2V0Y3NldCBzZXRiZSBzZXRuYSBzZXRnIHNldG5sZSBzZXRnZSBzZXRubCBzZXRsIHNldG5nZSBzZXRsZSBzZXRuZyBzZXRzIHNldG5zIHNldG8gc2V0bm8gc2V0cGUgc2V0cCBzZXRwbyBzZXRucCBhZGRwcyBhZGRzcyBhbmRucHMgYW5kcHMgY21wZXFwcyBjbXBlcXNzIGNtcGxlcHMgY21wbGVzcyBjbXBsdHBzIGNtcGx0c3MgY21wbmVxcHMgY21wbmVxc3MgY21wbmxlcHMgY21wbmxlc3MgY21wbmx0cHMgY21wbmx0c3MgY21wb3JkcHMgY21wb3Jkc3MgY21wdW5vcmRwcyBjbXB1bm9yZHNzIGNtcHBzIGNtcHNzIGNvbWlzcyBjdnRwaTJwcyBjdnRwczJwaSBjdnRzaTJzcyBjdnRzczJzaSBjdnR0cHMycGkgY3Z0dHNzMnNpIGRpdnBzIGRpdnNzIGxkbXhjc3IgbWF4cHMgbWF4c3MgbWlucHMgbWluc3MgbW92YXBzIG1vdmhwcyBtb3ZsaHBzIG1vdmxwcyBtb3ZobHBzIG1vdm1za3BzIG1vdm50cHMgbW92c3MgbW92dXBzIG11bHBzIG11bHNzIG9ycHMgcmNwcHMgcmNwc3MgcnNxcnRwcyByc3FydHNzIHNodWZwcyBzcXJ0cHMgc3FydHNzIHN0bXhjc3Igc3VicHMgc3Vic3MgdWNvbWlzcyB1bnBja2hwcyB1bnBja2xwcyB4b3JwcyBmeHJzdG9yIGZ4cnN0b3I2NCBmeHNhdmUgZnhzYXZlNjQgeGdldGJ2IHhzZXRidiB4c2F2ZSB4c2F2ZTY0IHhzYXZlb3B0IHhzYXZlb3B0NjQgeHJzdG9yIHhyc3RvcjY0IHByZWZldGNobnRhIHByZWZldGNodDAgcHJlZmV0Y2h0MSBwcmVmZXRjaHQyIG1hc2ttb3ZxIG1vdm50cSBwYXZnYiBwYXZndyBwZXh0cncgcGluc3J3IHBtYXhzdyBwbWF4dWIgcG1pbnN3IHBtaW51YiBwbW92bXNrYiBwbXVsaHV3IHBzYWRidyBwc2h1ZncgcGYyaXcgcGZuYWNjIHBmcG5hY2MgcGkyZncgcHN3YXBkIG1hc2ttb3ZkcXUgY2xmbHVzaCBtb3ZudGRxIG1vdm50aSBtb3ZudHBkIG1vdmRxYSBtb3ZkcXUgbW92ZHEycSBtb3ZxMmRxIHBhZGRxIHBtdWx1ZHEgcHNodWZkIHBzaHVmaHcgcHNodWZsdyBwc2xsZHEgcHNybGRxIHBzdWJxIHB1bnBja2hxZHEgcHVucGNrbHFkcSBhZGRwZCBhZGRzZCBhbmRucGQgYW5kcGQgY21wZXFwZCBjbXBlcXNkIGNtcGxlcGQgY21wbGVzZCBjbXBsdHBkIGNtcGx0c2QgY21wbmVxcGQgY21wbmVxc2QgY21wbmxlcGQgY21wbmxlc2QgY21wbmx0cGQgY21wbmx0c2QgY21wb3JkcGQgY21wb3Jkc2QgY21wdW5vcmRwZCBjbXB1bm9yZHNkIGNtcHBkIGNvbWlzZCBjdnRkcTJwZCBjdnRkcTJwcyBjdnRwZDJkcSBjdnRwZDJwaSBjdnRwZDJwcyBjdnRwaTJwZCBjdnRwczJkcSBjdnRwczJwZCBjdnRzZDJzaSBjdnRzZDJzcyBjdnRzaTJzZCBjdnRzczJzZCBjdnR0cGQycGkgY3Z0dHBkMmRxIGN2dHRwczJkcSBjdnR0c2Qyc2kgZGl2cGQgZGl2c2QgbWF4cGQgbWF4c2QgbWlucGQgbWluc2QgbW92YXBkIG1vdmhwZCBtb3ZscGQgbW92bXNrcGQgbW92dXBkIG11bHBkIG11bHNkIG9ycGQgc2h1ZnBkIHNxcnRwZCBzcXJ0c2Qgc3VicGQgc3Vic2QgdWNvbWlzZCB1bnBja2hwZCB1bnBja2xwZCB4b3JwZCBhZGRzdWJwZCBhZGRzdWJwcyBoYWRkcGQgaGFkZHBzIGhzdWJwZCBoc3VicHMgbGRkcXUgbW92ZGR1cCBtb3ZzaGR1cCBtb3ZzbGR1cCBjbGdpIHN0Z2kgdm1jYWxsIHZtY2xlYXIgdm1mdW5jIHZtbGF1bmNoIHZtbG9hZCB2bW1jYWxsIHZtcHRybGQgdm1wdHJzdCB2bXJlYWQgdm1yZXN1bWUgdm1ydW4gdm1zYXZlIHZtd3JpdGUgdm14b2ZmIHZteG9uIGludmVwdCBpbnZ2cGlkIHBhYnNiIHBhYnN3IHBhYnNkIHBhbGlnbnIgcGhhZGR3IHBoYWRkZCBwaGFkZHN3IHBoc3VidyBwaHN1YmQgcGhzdWJzdyBwbWFkZHVic3cgcG11bGhyc3cgcHNodWZiIHBzaWduYiBwc2lnbncgcHNpZ25kIGV4dHJxIGluc2VydHEgbW92bnRzZCBtb3ZudHNzIGx6Y250IGJsZW5kcGQgYmxlbmRwcyBibGVuZHZwZCBibGVuZHZwcyBkcHBkIGRwcHMgZXh0cmFjdHBzIGluc2VydHBzIG1vdm50ZHFhIG1wc2FkYncgcGFja3VzZHcgcGJsZW5kdmIgcGJsZW5kdyBwY21wZXFxIHBleHRyYiBwZXh0cmQgcGV4dHJxIHBobWlucG9zdXcgcGluc3JiIHBpbnNyZCBwaW5zcnEgcG1heHNiIHBtYXhzZCBwbWF4dWQgcG1heHV3IHBtaW5zYiBwbWluc2QgcG1pbnVkIHBtaW51dyBwbW92c3hidyBwbW92c3hiZCBwbW92c3hicSBwbW92c3h3ZCBwbW92c3h3cSBwbW92c3hkcSBwbW92enhidyBwbW92enhiZCBwbW92enhicSBwbW92enh3ZCBwbW92enh3cSBwbW92enhkcSBwbXVsZHEgcG11bGxkIHB0ZXN0IHJvdW5kcGQgcm91bmRwcyByb3VuZHNkIHJvdW5kc3MgY3JjMzIgcGNtcGVzdHJpIHBjbXBlc3RybSBwY21waXN0cmkgcGNtcGlzdHJtIHBjbXBndHEgcG9wY250IGdldHNlYyBwZnJjcHYgcGZyc3FydHYgbW92YmUgYWVzZW5jIGFlc2VuY2xhc3QgYWVzZGVjIGFlc2RlY2xhc3QgYWVzaW1jIGFlc2tleWdlbmFzc2lzdCB2YWVzZW5jIHZhZXNlbmNsYXN0IHZhZXNkZWMgdmFlc2RlY2xhc3QgdmFlc2ltYyB2YWVza2V5Z2VuYXNzaXN0IHZhZGRwZCB2YWRkcHMgdmFkZHNkIHZhZGRzcyB2YWRkc3VicGQgdmFkZHN1YnBzIHZhbmRwZCB2YW5kcHMgdmFuZG5wZCB2YW5kbnBzIHZibGVuZHBkIHZibGVuZHBzIHZibGVuZHZwZCB2YmxlbmR2cHMgdmJyb2FkY2FzdHNzIHZicm9hZGNhc3RzZCB2YnJvYWRjYXN0ZjEyOCB2Y21wZXFfb3NwZCB2Y21wZXFwZCB2Y21wbHRfb3NwZCB2Y21wbHRwZCB2Y21wbGVfb3NwZCB2Y21wbGVwZCB2Y21wdW5vcmRfcXBkIHZjbXB1bm9yZHBkIHZjbXBuZXFfdXFwZCB2Y21wbmVxcGQgdmNtcG5sdF91c3BkIHZjbXBubHRwZCB2Y21wbmxlX3VzcGQgdmNtcG5sZXBkIHZjbXBvcmRfcXBkIHZjbXBvcmRwZCB2Y21wZXFfdXFwZCB2Y21wbmdlX3VzcGQgdmNtcG5nZXBkIHZjbXBuZ3RfdXNwZCB2Y21wbmd0cGQgdmNtcGZhbHNlX29xcGQgdmNtcGZhbHNlcGQgdmNtcG5lcV9vcXBkIHZjbXBnZV9vc3BkIHZjbXBnZXBkIHZjbXBndF9vc3BkIHZjbXBndHBkIHZjbXB0cnVlX3VxcGQgdmNtcHRydWVwZCB2Y21wbHRfb3FwZCB2Y21wbGVfb3FwZCB2Y21wdW5vcmRfc3BkIHZjbXBuZXFfdXNwZCB2Y21wbmx0X3VxcGQgdmNtcG5sZV91cXBkIHZjbXBvcmRfc3BkIHZjbXBlcV91c3BkIHZjbXBuZ2VfdXFwZCB2Y21wbmd0X3VxcGQgdmNtcGZhbHNlX29zcGQgdmNtcG5lcV9vc3BkIHZjbXBnZV9vcXBkIHZjbXBndF9vcXBkIHZjbXB0cnVlX3VzcGQgdmNtcHBkIHZjbXBlcV9vc3BzIHZjbXBlcXBzIHZjbXBsdF9vc3BzIHZjbXBsdHBzIHZjbXBsZV9vc3BzIHZjbXBsZXBzIHZjbXB1bm9yZF9xcHMgdmNtcHVub3JkcHMgdmNtcG5lcV91cXBzIHZjbXBuZXFwcyB2Y21wbmx0X3VzcHMgdmNtcG5sdHBzIHZjbXBubGVfdXNwcyB2Y21wbmxlcHMgdmNtcG9yZF9xcHMgdmNtcG9yZHBzIHZjbXBlcV91cXBzIHZjbXBuZ2VfdXNwcyB2Y21wbmdlcHMgdmNtcG5ndF91c3BzIHZjbXBuZ3RwcyB2Y21wZmFsc2Vfb3FwcyB2Y21wZmFsc2VwcyB2Y21wbmVxX29xcHMgdmNtcGdlX29zcHMgdmNtcGdlcHMgdmNtcGd0X29zcHMgdmNtcGd0cHMgdmNtcHRydWVfdXFwcyB2Y21wdHJ1ZXBzIHZjbXBsdF9vcXBzIHZjbXBsZV9vcXBzIHZjbXB1bm9yZF9zcHMgdmNtcG5lcV91c3BzIHZjbXBubHRfdXFwcyB2Y21wbmxlX3VxcHMgdmNtcG9yZF9zcHMgdmNtcGVxX3VzcHMgdmNtcG5nZV91cXBzIHZjbXBuZ3RfdXFwcyB2Y21wZmFsc2Vfb3NwcyB2Y21wbmVxX29zcHMgdmNtcGdlX29xcHMgdmNtcGd0X29xcHMgdmNtcHRydWVfdXNwcyB2Y21wcHMgdmNtcGVxX29zc2QgdmNtcGVxc2QgdmNtcGx0X29zc2QgdmNtcGx0c2QgdmNtcGxlX29zc2QgdmNtcGxlc2QgdmNtcHVub3JkX3FzZCB2Y21wdW5vcmRzZCB2Y21wbmVxX3Vxc2QgdmNtcG5lcXNkIHZjbXBubHRfdXNzZCB2Y21wbmx0c2QgdmNtcG5sZV91c3NkIHZjbXBubGVzZCB2Y21wb3JkX3FzZCB2Y21wb3Jkc2QgdmNtcGVxX3Vxc2QgdmNtcG5nZV91c3NkIHZjbXBuZ2VzZCB2Y21wbmd0X3Vzc2QgdmNtcG5ndHNkIHZjbXBmYWxzZV9vcXNkIHZjbXBmYWxzZXNkIHZjbXBuZXFfb3FzZCB2Y21wZ2Vfb3NzZCB2Y21wZ2VzZCB2Y21wZ3Rfb3NzZCB2Y21wZ3RzZCB2Y21wdHJ1ZV91cXNkIHZjbXB0cnVlc2QgdmNtcGx0X29xc2QgdmNtcGxlX29xc2QgdmNtcHVub3JkX3NzZCB2Y21wbmVxX3Vzc2QgdmNtcG5sdF91cXNkIHZjbXBubGVfdXFzZCB2Y21wb3JkX3NzZCB2Y21wZXFfdXNzZCB2Y21wbmdlX3Vxc2QgdmNtcG5ndF91cXNkIHZjbXBmYWxzZV9vc3NkIHZjbXBuZXFfb3NzZCB2Y21wZ2Vfb3FzZCB2Y21wZ3Rfb3FzZCB2Y21wdHJ1ZV91c3NkIHZjbXBzZCB2Y21wZXFfb3NzcyB2Y21wZXFzcyB2Y21wbHRfb3NzcyB2Y21wbHRzcyB2Y21wbGVfb3NzcyB2Y21wbGVzcyB2Y21wdW5vcmRfcXNzIHZjbXB1bm9yZHNzIHZjbXBuZXFfdXFzcyB2Y21wbmVxc3MgdmNtcG5sdF91c3NzIHZjbXBubHRzcyB2Y21wbmxlX3Vzc3MgdmNtcG5sZXNzIHZjbXBvcmRfcXNzIHZjbXBvcmRzcyB2Y21wZXFfdXFzcyB2Y21wbmdlX3Vzc3MgdmNtcG5nZXNzIHZjbXBuZ3RfdXNzcyB2Y21wbmd0c3MgdmNtcGZhbHNlX29xc3MgdmNtcGZhbHNlc3MgdmNtcG5lcV9vcXNzIHZjbXBnZV9vc3NzIHZjbXBnZXNzIHZjbXBndF9vc3NzIHZjbXBndHNzIHZjbXB0cnVlX3Vxc3MgdmNtcHRydWVzcyB2Y21wbHRfb3FzcyB2Y21wbGVfb3FzcyB2Y21wdW5vcmRfc3NzIHZjbXBuZXFfdXNzcyB2Y21wbmx0X3Vxc3MgdmNtcG5sZV91cXNzIHZjbXBvcmRfc3NzIHZjbXBlcV91c3NzIHZjbXBuZ2VfdXFzcyB2Y21wbmd0X3Vxc3MgdmNtcGZhbHNlX29zc3MgdmNtcG5lcV9vc3NzIHZjbXBnZV9vcXNzIHZjbXBndF9vcXNzIHZjbXB0cnVlX3Vzc3MgdmNtcHNzIHZjb21pc2QgdmNvbWlzcyB2Y3Z0ZHEycGQgdmN2dGRxMnBzIHZjdnRwZDJkcSB2Y3Z0cGQycHMgdmN2dHBzMmRxIHZjdnRwczJwZCB2Y3Z0c2Qyc2kgdmN2dHNkMnNzIHZjdnRzaTJzZCB2Y3Z0c2kyc3MgdmN2dHNzMnNkIHZjdnRzczJzaSB2Y3Z0dHBkMmRxIHZjdnR0cHMyZHEgdmN2dHRzZDJzaSB2Y3Z0dHNzMnNpIHZkaXZwZCB2ZGl2cHMgdmRpdnNkIHZkaXZzcyB2ZHBwZCB2ZHBwcyB2ZXh0cmFjdGYxMjggdmV4dHJhY3RwcyB2aGFkZHBkIHZoYWRkcHMgdmhzdWJwZCB2aHN1YnBzIHZpbnNlcnRmMTI4IHZpbnNlcnRwcyB2bGRkcXUgdmxkcXF1IHZsZG14Y3NyIHZtYXNrbW92ZHF1IHZtYXNrbW92cHMgdm1hc2ttb3ZwZCB2bWF4cGQgdm1heHBzIHZtYXhzZCB2bWF4c3Mgdm1pbnBkIHZtaW5wcyB2bWluc2Qgdm1pbnNzIHZtb3ZhcGQgdm1vdmFwcyB2bW92ZCB2bW92cSB2bW92ZGR1cCB2bW92ZHFhIHZtb3ZxcWEgdm1vdmRxdSB2bW92cXF1IHZtb3ZobHBzIHZtb3ZocGQgdm1vdmhwcyB2bW92bGhwcyB2bW92bHBkIHZtb3ZscHMgdm1vdm1za3BkIHZtb3Ztc2twcyB2bW92bnRkcSB2bW92bnRxcSB2bW92bnRkcWEgdm1vdm50cGQgdm1vdm50cHMgdm1vdnNkIHZtb3ZzaGR1cCB2bW92c2xkdXAgdm1vdnNzIHZtb3Z1cGQgdm1vdnVwcyB2bXBzYWRidyB2bXVscGQgdm11bHBzIHZtdWxzZCB2bXVsc3Mgdm9ycGQgdm9ycHMgdnBhYnNiIHZwYWJzdyB2cGFic2QgdnBhY2tzc3diIHZwYWNrc3NkdyB2cGFja3Vzd2IgdnBhY2t1c2R3IHZwYWRkYiB2cGFkZHcgdnBhZGRkIHZwYWRkcSB2cGFkZHNiIHZwYWRkc3cgdnBhZGR1c2IgdnBhZGR1c3cgdnBhbGlnbnIgdnBhbmQgdnBhbmRuIHZwYXZnYiB2cGF2Z3cgdnBibGVuZHZiIHZwYmxlbmR3IHZwY21wZXN0cmkgdnBjbXBlc3RybSB2cGNtcGlzdHJpIHZwY21waXN0cm0gdnBjbXBlcWIgdnBjbXBlcXcgdnBjbXBlcWQgdnBjbXBlcXEgdnBjbXBndGIgdnBjbXBndHcgdnBjbXBndGQgdnBjbXBndHEgdnBlcm1pbHBkIHZwZXJtaWxwcyB2cGVybTJmMTI4IHZwZXh0cmIgdnBleHRydyB2cGV4dHJkIHZwZXh0cnEgdnBoYWRkdyB2cGhhZGRkIHZwaGFkZHN3IHZwaG1pbnBvc3V3IHZwaHN1YncgdnBoc3ViZCB2cGhzdWJzdyB2cGluc3JiIHZwaW5zcncgdnBpbnNyZCB2cGluc3JxIHZwbWFkZHdkIHZwbWFkZHVic3cgdnBtYXhzYiB2cG1heHN3IHZwbWF4c2QgdnBtYXh1YiB2cG1heHV3IHZwbWF4dWQgdnBtaW5zYiB2cG1pbnN3IHZwbWluc2QgdnBtaW51YiB2cG1pbnV3IHZwbWludWQgdnBtb3Ztc2tiIHZwbW92c3hidyB2cG1vdnN4YmQgdnBtb3ZzeGJxIHZwbW92c3h3ZCB2cG1vdnN4d3EgdnBtb3ZzeGRxIHZwbW92enhidyB2cG1vdnp4YmQgdnBtb3Z6eGJxIHZwbW92enh3ZCB2cG1vdnp4d3EgdnBtb3Z6eGRxIHZwbXVsaHV3IHZwbXVsaHJzdyB2cG11bGh3IHZwbXVsbHcgdnBtdWxsZCB2cG11bHVkcSB2cG11bGRxIHZwb3IgdnBzYWRidyB2cHNodWZiIHZwc2h1ZmQgdnBzaHVmaHcgdnBzaHVmbHcgdnBzaWduYiB2cHNpZ253IHZwc2lnbmQgdnBzbGxkcSB2cHNybGRxIHZwc2xsdyB2cHNsbGQgdnBzbGxxIHZwc3JhdyB2cHNyYWQgdnBzcmx3IHZwc3JsZCB2cHNybHEgdnB0ZXN0IHZwc3ViYiB2cHN1YncgdnBzdWJkIHZwc3VicSB2cHN1YnNiIHZwc3Vic3cgdnBzdWJ1c2IgdnBzdWJ1c3cgdnB1bnBja2hidyB2cHVucGNraHdkIHZwdW5wY2toZHEgdnB1bnBja2hxZHEgdnB1bnBja2xidyB2cHVucGNrbHdkIHZwdW5wY2tsZHEgdnB1bnBja2xxZHEgdnB4b3IgdnJjcHBzIHZyY3BzcyB2cnNxcnRwcyB2cnNxcnRzcyB2cm91bmRwZCB2cm91bmRwcyB2cm91bmRzZCB2cm91bmRzcyB2c2h1ZnBkIHZzaHVmcHMgdnNxcnRwZCB2c3FydHBzIHZzcXJ0c2QgdnNxcnRzcyB2c3RteGNzciB2c3VicGQgdnN1YnBzIHZzdWJzZCB2c3Vic3MgdnRlc3RwcyB2dGVzdHBkIHZ1Y29taXNkIHZ1Y29taXNzIHZ1bnBja2hwZCB2dW5wY2tocHMgdnVucGNrbHBkIHZ1bnBja2xwcyB2eG9ycGQgdnhvcnBzIHZ6ZXJvYWxsIHZ6ZXJvdXBwZXIgcGNsbXVsbHFscWRxIHBjbG11bGhxbHFkcSBwY2xtdWxscWhxZHEgcGNsbXVsaHFocWRxIHBjbG11bHFkcSB2cGNsbXVsbHFscWRxIHZwY2xtdWxocWxxZHEgdnBjbG11bGxxaHFkcSB2cGNsbXVsaHFocWRxIHZwY2xtdWxxZHEgdmZtYWRkMTMycHMgdmZtYWRkMTMycGQgdmZtYWRkMzEycHMgdmZtYWRkMzEycGQgdmZtYWRkMjEzcHMgdmZtYWRkMjEzcGQgdmZtYWRkMTIzcHMgdmZtYWRkMTIzcGQgdmZtYWRkMjMxcHMgdmZtYWRkMjMxcGQgdmZtYWRkMzIxcHMgdmZtYWRkMzIxcGQgdmZtYWRkc3ViMTMycHMgdmZtYWRkc3ViMTMycGQgdmZtYWRkc3ViMzEycHMgdmZtYWRkc3ViMzEycGQgdmZtYWRkc3ViMjEzcHMgdmZtYWRkc3ViMjEzcGQgdmZtYWRkc3ViMTIzcHMgdmZtYWRkc3ViMTIzcGQgdmZtYWRkc3ViMjMxcHMgdmZtYWRkc3ViMjMxcGQgdmZtYWRkc3ViMzIxcHMgdmZtYWRkc3ViMzIxcGQgdmZtc3ViMTMycHMgdmZtc3ViMTMycGQgdmZtc3ViMzEycHMgdmZtc3ViMzEycGQgdmZtc3ViMjEzcHMgdmZtc3ViMjEzcGQgdmZtc3ViMTIzcHMgdmZtc3ViMTIzcGQgdmZtc3ViMjMxcHMgdmZtc3ViMjMxcGQgdmZtc3ViMzIxcHMgdmZtc3ViMzIxcGQgdmZtc3ViYWRkMTMycHMgdmZtc3ViYWRkMTMycGQgdmZtc3ViYWRkMzEycHMgdmZtc3ViYWRkMzEycGQgdmZtc3ViYWRkMjEzcHMgdmZtc3ViYWRkMjEzcGQgdmZtc3ViYWRkMTIzcHMgdmZtc3ViYWRkMTIzcGQgdmZtc3ViYWRkMjMxcHMgdmZtc3ViYWRkMjMxcGQgdmZtc3ViYWRkMzIxcHMgdmZtc3ViYWRkMzIxcGQgdmZubWFkZDEzMnBzIHZmbm1hZGQxMzJwZCB2Zm5tYWRkMzEycHMgdmZubWFkZDMxMnBkIHZmbm1hZGQyMTNwcyB2Zm5tYWRkMjEzcGQgdmZubWFkZDEyM3BzIHZmbm1hZGQxMjNwZCB2Zm5tYWRkMjMxcHMgdmZubWFkZDIzMXBkIHZmbm1hZGQzMjFwcyB2Zm5tYWRkMzIxcGQgdmZubXN1YjEzMnBzIHZmbm1zdWIxMzJwZCB2Zm5tc3ViMzEycHMgdmZubXN1YjMxMnBkIHZmbm1zdWIyMTNwcyB2Zm5tc3ViMjEzcGQgdmZubXN1YjEyM3BzIHZmbm1zdWIxMjNwZCB2Zm5tc3ViMjMxcHMgdmZubXN1YjIzMXBkIHZmbm1zdWIzMjFwcyB2Zm5tc3ViMzIxcGQgdmZtYWRkMTMyc3MgdmZtYWRkMTMyc2QgdmZtYWRkMzEyc3MgdmZtYWRkMzEyc2QgdmZtYWRkMjEzc3MgdmZtYWRkMjEzc2QgdmZtYWRkMTIzc3MgdmZtYWRkMTIzc2QgdmZtYWRkMjMxc3MgdmZtYWRkMjMxc2QgdmZtYWRkMzIxc3MgdmZtYWRkMzIxc2QgdmZtc3ViMTMyc3MgdmZtc3ViMTMyc2QgdmZtc3ViMzEyc3MgdmZtc3ViMzEyc2QgdmZtc3ViMjEzc3MgdmZtc3ViMjEzc2QgdmZtc3ViMTIzc3MgdmZtc3ViMTIzc2QgdmZtc3ViMjMxc3MgdmZtc3ViMjMxc2QgdmZtc3ViMzIxc3MgdmZtc3ViMzIxc2QgdmZubWFkZDEzMnNzIHZmbm1hZGQxMzJzZCB2Zm5tYWRkMzEyc3MgdmZubWFkZDMxMnNkIHZmbm1hZGQyMTNzcyB2Zm5tYWRkMjEzc2QgdmZubWFkZDEyM3NzIHZmbm1hZGQxMjNzZCB2Zm5tYWRkMjMxc3MgdmZubWFkZDIzMXNkIHZmbm1hZGQzMjFzcyB2Zm5tYWRkMzIxc2QgdmZubXN1YjEzMnNzIHZmbm1zdWIxMzJzZCB2Zm5tc3ViMzEyc3MgdmZubXN1YjMxMnNkIHZmbm1zdWIyMTNzcyB2Zm5tc3ViMjEzc2QgdmZubXN1YjEyM3NzIHZmbm1zdWIxMjNzZCB2Zm5tc3ViMjMxc3MgdmZubXN1YjIzMXNkIHZmbm1zdWIzMjFzcyB2Zm5tc3ViMzIxc2QgcmRmc2Jhc2UgcmRnc2Jhc2UgcmRyYW5kIHdyZnNiYXNlIHdyZ3NiYXNlIHZjdnRwaDJwcyB2Y3Z0cHMycGggYWRjeCBhZG94IHJkc2VlZCBjbGFjIHN0YWMgeHN0b3JlIHhjcnlwdGVjYiB4Y3J5cHRjYmMgeGNyeXB0Y3RyIHhjcnlwdGNmYiB4Y3J5cHRvZmIgbW9udG11bCB4c2hhMSB4c2hhMjU2IGxsd3BjYiBzbHdwY2IgbHdwdmFsIGx3cGlucyB2Zm1hZGRwZCB2Zm1hZGRwcyB2Zm1hZGRzZCB2Zm1hZGRzcyB2Zm1hZGRzdWJwZCB2Zm1hZGRzdWJwcyB2Zm1zdWJhZGRwZCB2Zm1zdWJhZGRwcyB2Zm1zdWJwZCB2Zm1zdWJwcyB2Zm1zdWJzZCB2Zm1zdWJzcyB2Zm5tYWRkcGQgdmZubWFkZHBzIHZmbm1hZGRzZCB2Zm5tYWRkc3MgdmZubXN1YnBkIHZmbm1zdWJwcyB2Zm5tc3Vic2QgdmZubXN1YnNzIHZmcmN6cGQgdmZyY3pwcyB2ZnJjenNkIHZmcmN6c3MgdnBjbW92IHZwY29tYiB2cGNvbWQgdnBjb21xIHZwY29tdWIgdnBjb211ZCB2cGNvbXVxIHZwY29tdXcgdnBjb213IHZwaGFkZGJkIHZwaGFkZGJxIHZwaGFkZGJ3IHZwaGFkZGRxIHZwaGFkZHViZCB2cGhhZGR1YnEgdnBoYWRkdWJ3IHZwaGFkZHVkcSB2cGhhZGR1d2QgdnBoYWRkdXdxIHZwaGFkZHdkIHZwaGFkZHdxIHZwaHN1YmJ3IHZwaHN1YmRxIHZwaHN1YndkIHZwbWFjc2RkIHZwbWFjc2RxaCB2cG1hY3NkcWwgdnBtYWNzc2RkIHZwbWFjc3NkcWggdnBtYWNzc2RxbCB2cG1hY3Nzd2QgdnBtYWNzc3d3IHZwbWFjc3dkIHZwbWFjc3d3IHZwbWFkY3Nzd2QgdnBtYWRjc3dkIHZwcGVybSB2cHJvdGIgdnByb3RkIHZwcm90cSB2cHJvdHcgdnBzaGFiIHZwc2hhZCB2cHNoYXEgdnBzaGF3IHZwc2hsYiB2cHNobGQgdnBzaGxxIHZwc2hsdyB2YnJvYWRjYXN0aTEyOCB2cGJsZW5kZCB2cGJyb2FkY2FzdGIgdnBicm9hZGNhc3R3IHZwYnJvYWRjYXN0ZCB2cGJyb2FkY2FzdHEgdnBlcm1kIHZwZXJtcGQgdnBlcm1wcyB2cGVybXEgdnBlcm0yaTEyOCB2ZXh0cmFjdGkxMjggdmluc2VydGkxMjggdnBtYXNrbW92ZCB2cG1hc2ttb3ZxIHZwc2xsdmQgdnBzbGx2cSB2cHNyYXZkIHZwc3JsdmQgdnBzcmx2cSB2Z2F0aGVyZHBkIHZnYXRoZXJxcGQgdmdhdGhlcmRwcyB2Z2F0aGVycXBzIHZwZ2F0aGVyZGQgdnBnYXRoZXJxZCB2cGdhdGhlcmRxIHZwZ2F0aGVycXEgeGFib3J0IHhiZWdpbiB4ZW5kIHh0ZXN0IGFuZG4gYmV4dHIgYmxjaSBibGNpYyBibHNpIGJsc2ljIGJsY2ZpbGwgYmxzZmlsbCBibGNtc2sgYmxzbXNrIGJsc3IgYmxjcyBiemhpIG11bHggcGRlcCBwZXh0IHJvcnggc2FyeCBzaGx4IHNocnggdHpjbnQgdHptc2sgdDFtc2tjIHZhbGlnbmQgdmFsaWducSB2YmxlbmRtcGQgdmJsZW5kbXBzIHZicm9hZGNhc3RmMzJ4NCB2YnJvYWRjYXN0ZjY0eDQgdmJyb2FkY2FzdGkzMng0IHZicm9hZGNhc3RpNjR4NCB2Y29tcHJlc3NwZCB2Y29tcHJlc3NwcyB2Y3Z0cGQydWRxIHZjdnRwczJ1ZHEgdmN2dHNkMnVzaSB2Y3Z0c3MydXNpIHZjdnR0cGQydWRxIHZjdnR0cHMydWRxIHZjdnR0c2QydXNpIHZjdnR0c3MydXNpIHZjdnR1ZHEycGQgdmN2dHVkcTJwcyB2Y3Z0dXNpMnNkIHZjdnR1c2kyc3MgdmV4cGFuZHBkIHZleHBhbmRwcyB2ZXh0cmFjdGYzMng0IHZleHRyYWN0ZjY0eDQgdmV4dHJhY3RpMzJ4NCB2ZXh0cmFjdGk2NHg0IHZmaXh1cGltbXBkIHZmaXh1cGltbXBzIHZmaXh1cGltbXNkIHZmaXh1cGltbXNzIHZnZXRleHBwZCB2Z2V0ZXhwcHMgdmdldGV4cHNkIHZnZXRleHBzcyB2Z2V0bWFudHBkIHZnZXRtYW50cHMgdmdldG1hbnRzZCB2Z2V0bWFudHNzIHZpbnNlcnRmMzJ4NCB2aW5zZXJ0ZjY0eDQgdmluc2VydGkzMng0IHZpbnNlcnRpNjR4NCB2bW92ZHFhMzIgdm1vdmRxYTY0IHZtb3ZkcXUzMiB2bW92ZHF1NjQgdnBhYnNxIHZwYW5kZCB2cGFuZG5kIHZwYW5kbnEgdnBhbmRxIHZwYmxlbmRtZCB2cGJsZW5kbXEgdnBjbXBsdGQgdnBjbXBsZWQgdnBjbXBuZXFkIHZwY21wbmx0ZCB2cGNtcG5sZWQgdnBjbXBkIHZwY21wbHRxIHZwY21wbGVxIHZwY21wbmVxcSB2cGNtcG5sdHEgdnBjbXBubGVxIHZwY21wcSB2cGNtcGVxdWQgdnBjbXBsdHVkIHZwY21wbGV1ZCB2cGNtcG5lcXVkIHZwY21wbmx0dWQgdnBjbXBubGV1ZCB2cGNtcHVkIHZwY21wZXF1cSB2cGNtcGx0dXEgdnBjbXBsZXVxIHZwY21wbmVxdXEgdnBjbXBubHR1cSB2cGNtcG5sZXVxIHZwY21wdXEgdnBjb21wcmVzc2QgdnBjb21wcmVzc3EgdnBlcm1pMmQgdnBlcm1pMnBkIHZwZXJtaTJwcyB2cGVybWkycSB2cGVybXQyZCB2cGVybXQycGQgdnBlcm10MnBzIHZwZXJtdDJxIHZwZXhwYW5kZCB2cGV4cGFuZHEgdnBtYXhzcSB2cG1heHVxIHZwbWluc3EgdnBtaW51cSB2cG1vdmRiIHZwbW92ZHcgdnBtb3ZxYiB2cG1vdnFkIHZwbW92cXcgdnBtb3ZzZGIgdnBtb3ZzZHcgdnBtb3ZzcWIgdnBtb3ZzcWQgdnBtb3ZzcXcgdnBtb3Z1c2RiIHZwbW92dXNkdyB2cG1vdnVzcWIgdnBtb3Z1c3FkIHZwbW92dXNxdyB2cG9yZCB2cG9ycSB2cHJvbGQgdnByb2xxIHZwcm9sdmQgdnByb2x2cSB2cHJvcmQgdnByb3JxIHZwcm9ydmQgdnByb3J2cSB2cHNjYXR0ZXJkZCB2cHNjYXR0ZXJkcSB2cHNjYXR0ZXJxZCB2cHNjYXR0ZXJxcSB2cHNyYXEgdnBzcmF2cSB2cHRlcm5sb2dkIHZwdGVybmxvZ3EgdnB0ZXN0bWQgdnB0ZXN0bXEgdnB0ZXN0bm1kIHZwdGVzdG5tcSB2cHhvcmQgdnB4b3JxIHZyY3AxNHBkIHZyY3AxNHBzIHZyY3AxNHNkIHZyY3AxNHNzIHZybmRzY2FsZXBkIHZybmRzY2FsZXBzIHZybmRzY2FsZXNkIHZybmRzY2FsZXNzIHZyc3FydDE0cGQgdnJzcXJ0MTRwcyB2cnNxcnQxNHNkIHZyc3FydDE0c3MgdnNjYWxlZnBkIHZzY2FsZWZwcyB2c2NhbGVmc2QgdnNjYWxlZnNzIHZzY2F0dGVyZHBkIHZzY2F0dGVyZHBzIHZzY2F0dGVycXBkIHZzY2F0dGVycXBzIHZzaHVmZjMyeDQgdnNodWZmNjR4MiB2c2h1ZmkzMng0IHZzaHVmaTY0eDIga2FuZG53IGthbmR3IGttb3Z3IGtub3R3IGtvcnRlc3R3IGtvcncga3NoaWZ0bHcga3NoaWZ0cncga3VucGNrYncga3hub3J3IGt4b3J3IHZwYnJvYWRjYXN0bWIycSB2cGJyb2FkY2FzdG13MmQgdnBjb25mbGljdGQgdnBjb25mbGljdHEgdnBsemNudGQgdnBsemNudHEgdmV4cDJwZCB2ZXhwMnBzIHZyY3AyOHBkIHZyY3AyOHBzIHZyY3AyOHNkIHZyY3AyOHNzIHZyc3FydDI4cGQgdnJzcXJ0MjhwcyB2cnNxcnQyOHNkIHZyc3FydDI4c3MgdmdhdGhlcnBmMGRwZCB2Z2F0aGVycGYwZHBzIHZnYXRoZXJwZjBxcGQgdmdhdGhlcnBmMHFwcyB2Z2F0aGVycGYxZHBkIHZnYXRoZXJwZjFkcHMgdmdhdGhlcnBmMXFwZCB2Z2F0aGVycGYxcXBzIHZzY2F0dGVycGYwZHBkIHZzY2F0dGVycGYwZHBzIHZzY2F0dGVycGYwcXBkIHZzY2F0dGVycGYwcXBzIHZzY2F0dGVycGYxZHBkIHZzY2F0dGVycGYxZHBzIHZzY2F0dGVycGYxcXBkIHZzY2F0dGVycGYxcXBzIHByZWZldGNod3QxIGJuZG1rIGJuZGNsIGJuZGN1IGJuZGNuIGJuZG1vdiBibmRsZHggYm5kc3R4IHNoYTFybmRzNCBzaGExbmV4dGUgc2hhMW1zZzEgc2hhMW1zZzIgc2hhMjU2cm5kczIgc2hhMjU2bXNnMSBzaGEyNTZtc2cyIGhpbnRfbm9wMCBoaW50X25vcDEgaGludF9ub3AyIGhpbnRfbm9wMyBoaW50X25vcDQgaGludF9ub3A1IGhpbnRfbm9wNiBoaW50X25vcDcgaGludF9ub3A4IGhpbnRfbm9wOSBoaW50X25vcDEwIGhpbnRfbm9wMTEgaGludF9ub3AxMiBoaW50X25vcDEzIGhpbnRfbm9wMTQgaGludF9ub3AxNSBoaW50X25vcDE2IGhpbnRfbm9wMTcgaGludF9ub3AxOCBoaW50X25vcDE5IGhpbnRfbm9wMjAgaGludF9ub3AyMSBoaW50X25vcDIyIGhpbnRfbm9wMjMgaGludF9ub3AyNCBoaW50X25vcDI1IGhpbnRfbm9wMjYgaGludF9ub3AyNyBoaW50X25vcDI4IGhpbnRfbm9wMjkgaGludF9ub3AzMCBoaW50X25vcDMxIGhpbnRfbm9wMzIgaGludF9ub3AzMyBoaW50X25vcDM0IGhpbnRfbm9wMzUgaGludF9ub3AzNiBoaW50X25vcDM3IGhpbnRfbm9wMzggaGludF9ub3AzOSBoaW50X25vcDQwIGhpbnRfbm9wNDEgaGludF9ub3A0MiBoaW50X25vcDQzIGhpbnRfbm9wNDQgaGludF9ub3A0NSBoaW50X25vcDQ2IGhpbnRfbm9wNDcgaGludF9ub3A0OCBoaW50X25vcDQ5IGhpbnRfbm9wNTAgaGludF9ub3A1MSBoaW50X25vcDUyIGhpbnRfbm9wNTMgaGludF9ub3A1NCBoaW50X25vcDU1IGhpbnRfbm9wNTYgaGludF9ub3A1NyBoaW50X25vcDU4IGhpbnRfbm9wNTkgaGludF9ub3A2MCBoaW50X25vcDYxIGhpbnRfbm9wNjIgaGludF9ub3A2MycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcG9pbnRlclxuICAgICAgICAnaXAgZWlwIHJpcCAnICtcbiAgICAgICAgLy8gOC1iaXQgcmVnaXN0ZXJzXG4gICAgICAgICdhbCBhaCBibCBiaCBjbCBjaCBkbCBkaCBzaWwgZGlsIGJwbCBzcGwgcjhiIHI5YiByMTBiIHIxMWIgcjEyYiByMTNiIHIxNGIgcjE1YiAnICtcbiAgICAgICAgLy8gMTYtYml0IHJlZ2lzdGVyc1xuICAgICAgICAnYXggYnggY3ggZHggc2kgZGkgYnAgc3Agcjh3IHI5dyByMTB3IHIxMXcgcjEydyByMTN3IHIxNHcgcjE1dyAnICtcbiAgICAgICAgLy8gMzItYml0IHJlZ2lzdGVyc1xuICAgICAgICAnZWF4IGVieCBlY3ggZWR4IGVzaSBlZGkgZWJwIGVzcCBlaXAgcjhkIHI5ZCByMTBkIHIxMWQgcjEyZCByMTNkIHIxNGQgcjE1ZCAnICtcbiAgICAgICAgLy8gNjQtYml0IHJlZ2lzdGVyc1xuICAgICAgICAncmF4IHJieCByY3ggcmR4IHJzaSByZGkgcmJwIHJzcCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnICtcbiAgICAgICAgLy8gU2VnbWVudCByZWdpc3RlcnNcbiAgICAgICAgJ2NzIGRzIGVzIGZzIGdzIHNzICcgK1xuICAgICAgICAvLyBGbG9hdGluZyBwb2ludCBzdGFjayByZWdpc3RlcnNcbiAgICAgICAgJ3N0IHN0MCBzdDEgc3QyIHN0MyBzdDQgc3Q1IHN0NiBzdDcgJyArXG4gICAgICAgIC8vIE1NWCBSZWdpc3RlcnNcbiAgICAgICAgJ21tMCBtbTEgbW0yIG1tMyBtbTQgbW01IG1tNiBtbTcgJyArXG4gICAgICAgIC8vIFNTRSByZWdpc3RlcnNcbiAgICAgICAgJ3htbTAgIHhtbTEgIHhtbTIgIHhtbTMgIHhtbTQgIHhtbTUgIHhtbTYgIHhtbTcgIHhtbTggIHhtbTkgeG1tMTAgIHhtbTExIHhtbTEyIHhtbTEzIHhtbTE0IHhtbTE1ICcgK1xuICAgICAgICAneG1tMTYgeG1tMTcgeG1tMTggeG1tMTkgeG1tMjAgeG1tMjEgeG1tMjIgeG1tMjMgeG1tMjQgeG1tMjUgeG1tMjYgeG1tMjcgeG1tMjggeG1tMjkgeG1tMzAgeG1tMzEgJyArXG4gICAgICAgIC8vIEFWWCByZWdpc3RlcnNcbiAgICAgICAgJ3ltbTAgIHltbTEgIHltbTIgIHltbTMgIHltbTQgIHltbTUgIHltbTYgIHltbTcgIHltbTggIHltbTkgeW1tMTAgIHltbTExIHltbTEyIHltbTEzIHltbTE0IHltbTE1ICcgK1xuICAgICAgICAneW1tMTYgeW1tMTcgeW1tMTggeW1tMTkgeW1tMjAgeW1tMjEgeW1tMjIgeW1tMjMgeW1tMjQgeW1tMjUgeW1tMjYgeW1tMjcgeW1tMjggeW1tMjkgeW1tMzAgeW1tMzEgJyArXG4gICAgICAgIC8vIEFWWC01MTJGIHJlZ2lzdGVyc1xuICAgICAgICAnem1tMCAgem1tMSAgem1tMiAgem1tMyAgem1tNCAgem1tNSAgem1tNiAgem1tNyAgem1tOCAgem1tOSB6bW0xMCAgem1tMTEgem1tMTIgem1tMTMgem1tMTQgem1tMTUgJyArXG4gICAgICAgICd6bW0xNiB6bW0xNyB6bW0xOCB6bW0xOSB6bW0yMCB6bW0yMSB6bW0yMiB6bW0yMyB6bW0yNCB6bW0yNSB6bW0yNiB6bW0yNyB6bW0yOCB6bW0yOSB6bW0zMCB6bW0zMSAnICtcbiAgICAgICAgLy8gQVZYLTUxMkYgbWFzayByZWdpc3RlcnNcbiAgICAgICAgJ2swIGsxIGsyIGszIGs0IGs1IGs2IGs3ICcgK1xuICAgICAgICAvLyBCb3VuZCAoTVBYKSByZWdpc3RlclxuICAgICAgICAnYm5kMCBibmQxIGJuZDIgYm5kMyAnICtcbiAgICAgICAgLy8gU3BlY2lhbCByZWdpc3RlclxuICAgICAgICAnY3IwIGNyMSBjcjIgY3IzIGNyNCBjcjggZHIwIGRyMSBkcjIgZHIzIGRyOCB0cjMgdHI0IHRyNSB0cjYgdHI3ICcgK1xuICAgICAgICAvLyBOQVNNIGFsdHJlZyBwYWNrYWdlXG4gICAgICAgICdyMCByMSByMiByMyByNCByNSByNiByNyByMGIgcjFiIHIyYiByM2IgcjRiIHI1YiByNmIgcjdiICcgK1xuICAgICAgICAncjB3IHIxdyByMncgcjN3IHI0dyByNXcgcjZ3IHI3dyByMGQgcjFkIHIyZCByM2QgcjRkIHI1ZCByNmQgcjdkICcgK1xuICAgICAgICAncjBoIHIxaCByMmggcjNoICcgK1xuICAgICAgICAncjBsIHIxbCByMmwgcjNsIHI0bCByNWwgcjZsIHI3bCByOGwgcjlsIHIxMGwgcjExbCByMTJsIHIxM2wgcjE0bCByMTVsICcgK1xuXG4gICAgICAgICdkYiBkdyBkZCBkcSBkdCBkZHEgZG8gZHkgZHogJyArXG4gICAgICAgICdyZXNiIHJlc3cgcmVzZCByZXNxIHJlc3QgcmVzZHEgcmVzbyByZXN5IHJlc3ogJyArXG4gICAgICAgICdpbmNiaW4gZXF1IHRpbWVzICcgK1xuICAgICAgICAnYnl0ZSB3b3JkIGR3b3JkIHF3b3JkIG5vc3BsaXQgcmVsIGFicyBzZWcgd3J0IHN0cmljdCBuZWFyIGZhciBhMzIgcHRyJyxcblxuICAgICAgbWV0YTpcbiAgICAgICAgJyVkZWZpbmUgJXhkZWZpbmUgJSsgJXVuZGVmICVkZWZzdHIgJWRlZnRvayAlYXNzaWduICVzdHJjYXQgJXN0cmxlbiAlc3Vic3RyICVyb3RhdGUgJWVsaWYgJWVsc2UgJWVuZGlmICcgK1xuICAgICAgICAnJWlmICVpZm1hY3JvICVpZmN0eCAlaWZpZG4gJWlmaWRuaSAlaWZpZCAlaWZudW0gJWlmc3RyICVpZnRva2VuICVpZmVtcHR5ICVpZmVudiAlZXJyb3IgJXdhcm5pbmcgJWZhdGFsICVyZXAgJyArXG4gICAgICAgICclZW5kcmVwICVpbmNsdWRlICVwdXNoICVwb3AgJXJlcGwgJXBhdGhzZWFyY2ggJWRlcGVuZCAldXNlICVhcmcgJXN0YWNrc2l6ZSAlbG9jYWwgJWxpbmUgJWNvbW1lbnQgJWVuZGNvbW1lbnQgJyArXG4gICAgICAgICcubm9saXN0ICcgK1xuICAgICAgICAnX19GSUxFX18gX19MSU5FX18gX19TRUNUX18gIF9fQklUU19fIF9fT1VUUFVUX0ZPUk1BVF9fIF9fREFURV9fIF9fVElNRV9fIF9fREFURV9OVU1fXyBfX1RJTUVfTlVNX18gJyArXG4gICAgICAgICdfX1VUQ19EQVRFX18gX19VVENfVElNRV9fIF9fVVRDX0RBVEVfTlVNX18gX19VVENfVElNRV9OVU1fXyAgX19QQVNTX18gc3RydWMgZW5kc3RydWMgaXN0cnVjIGF0IGllbmQgJyArXG4gICAgICAgICdhbGlnbiBhbGlnbmIgc2VjdGFsaWduIGRheiBub2RheiB1cCBkb3duIHplcm8gZGVmYXVsdCBvcHRpb24gYXNzdW1lIHB1YmxpYyAnICtcblxuICAgICAgICAnYml0cyB1c2UxNiB1c2UzMiB1c2U2NCBkZWZhdWx0IHNlY3Rpb24gc2VnbWVudCBhYnNvbHV0ZSBleHRlcm4gZ2xvYmFsIGNvbW1vbiBjcHUgZmxvYXQgJyArXG4gICAgICAgICdfX3V0ZjE2X18gX191dGYxNmxlX18gX191dGYxNmJlX18gX191dGYzMl9fIF9fdXRmMzJsZV9fIF9fdXRmMzJiZV9fICcgK1xuICAgICAgICAnX19mbG9hdDhfXyBfX2Zsb2F0MTZfXyBfX2Zsb2F0MzJfXyBfX2Zsb2F0NjRfXyBfX2Zsb2F0ODBtX18gX19mbG9hdDgwZV9fIF9fZmxvYXQxMjhsX18gX19mbG9hdDEyOGhfXyAnICtcbiAgICAgICAgJ19fSW5maW5pdHlfXyBfX1FOYU5fXyBfX1NOYU5fXyBJbmYgTmFOIFFOYU4gU05hTiBmbG9hdDggZmxvYXQxNiBmbG9hdDMyIGZsb2F0NjQgZmxvYXQ4MG0gZmxvYXQ4MGUgJyArXG4gICAgICAgICdmbG9hdDEyOGwgZmxvYXQxMjhoIF9fRkxPQVRfREFaX18gX19GTE9BVF9ST1VORF9fIF9fRkxPQVRfXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gRmxvYXQgbnVtYmVyIGFuZCB4ODcgQkNEXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OihbMC05XVswLTlfXSopP1xcXFwuWzAtOV9dKig/OltlRV1bKy1dP1swLTlfXSspP3wnICtcbiAgICAgICAgICAgICAgICAgICAnKDBbWHhdKT9bMC05XVswLTlfXSooXFxcXC5bMC05X10qKT8oPzpbcFBdKD86WystXT9bMC05X10rKT8pPylcXFxcYicsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgLy8gSGV4IG51bWJlciBpbiAkXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFswLTldWzAtOUEtRmEtZl0qJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAvLyBOdW1iZXIgaW4gSCxELFQsUSxPLEIsWSBzdWZmaXhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86WzAtOUEtRmEtZl1bMC05QS1GYS1mX10qW0hoXXxbMC05XVswLTlfXSpbRGRUdF0/fFswLTddWzAtN19dKltRcU9vXXxbMC0xXVswLTFfXSpbQmJZeV0pXFxcXGInXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIC8vIE51bWJlciBpbiBYLEQsVCxRLE8sQixZIHByZWZpeFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzowW1h4XVswLTlBLUZhLWZfXSt8MFtEZFR0XVswLTlfXSt8MFtRcU9vXVswLTdfXSt8MFtCYll5XVswLTFfXSspXFxcXGInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gRG91YmxlIHF1b3RlIHN0cmluZ1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAvLyBTaW5nbGUtcXVvdGVkIHN0cmluZ1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgICAgIGVuZDogJ1teXFxcXFxcXFxdXFwnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gQmFja3F1b3RlZCBzdHJpbmdcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICAgICAgZW5kOiAnW15cXFxcXFxcXF1gJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIEdsb2JhbCBsYWJlbCBhbmQgbG9jYWwgbGFiZWxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ15cXFxccypbQS1aYS16Ll8/XVtBLVphLXowLTlfJCNAfi4/XSooOnxcXFxccytsYWJlbCknXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBNYWNyby1sb2NhbCBsYWJlbFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXlxcXFxzKiUlW0EtWmEtejAtOV8kI0B+Lj9dKjonXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBNYWNybyBwYXJhbWV0ZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJyVbMC05XSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBNYWNybyBwYXJhbWV0ZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJyUhXFxTKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxccypcXC5bXFx3Xy1dKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0geDg2YXNtO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFhMXG5BdXRob3I6IENocmlzdG9waGUgZGUgRGluZWNoaW4gPGNocmlzdG9waGVAdGFvZHluZS5jb20+XG5EZXNjcmlwdGlvbjogQW4gZXh0ZW5zaWJsZSBwcm9ncmFtbWluZyBsYW5ndWFnZSwgYmFzZWQgb24gcGFyc2UgdHJlZSByZXdyaXRpbmdcbldlYnNpdGU6IGh0dHA6Ly94bHIuc2YubmV0XG4qL1xuXG5mdW5jdGlvbiB4bChobGpzKSB7XG4gIGNvbnN0IEJVSUxUSU5fTU9EVUxFUyA9XG4gICAgJ09iamVjdExvYWRlciBBbmltYXRlIE1vdmllQ3JlZGl0cyBTbGlkZXMgRmlsdGVycyBTaGFkaW5nIE1hdGVyaWFscyBMZW5zRmxhcmUgTWFwcGluZyBWTENBdWRpb1ZpZGVvICcgK1xuICAgICdTdGVyZW9EZWNvZGVyIFBvaW50Q2xvdWQgTmV0d29ya0FjY2VzcyBSZW1vdGVDb250cm9sIFJlZ0V4cCBDaHJvbWFLZXkgU25vd2ZhbGwgTm9kZUpTIFNwZWVjaCBDaGFydHMnO1xuXG4gIGNvbnN0IFhMX0tFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiAvW2EtekEtWl1bYS16QS1aMC05Xz9dKi8sXG4gICAga2V5d29yZDpcbiAgICAgICdpZiB0aGVuIGVsc2UgZG8gd2hpbGUgdW50aWwgZm9yIGxvb3AgaW1wb3J0IHdpdGggaXMgYXMgd2hlcmUgd2hlbiBieSBkYXRhIGNvbnN0YW50ICcgK1xuICAgICAgJ2ludGVnZXIgcmVhbCB0ZXh0IG5hbWUgYm9vbGVhbiBzeW1ib2wgaW5maXggcHJlZml4IHBvc3RmaXggYmxvY2sgdHJlZScsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG5pbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnaW4gbW9kIHJlbSBhbmQgb3IgeG9yIG5vdCBhYnMgc2lnbiBmbG9vciBjZWlsIHNxcnQgc2luIGNvcyB0YW4gYXNpbiAnICtcbiAgICAgICdhY29zIGF0YW4gZXhwIGV4cG0xIGxvZyBsb2cyIGxvZzEwIGxvZzFwIHBpIGF0IHRleHRfbGVuZ3RoIHRleHRfcmFuZ2UgJyArXG4gICAgICAndGV4dF9maW5kIHRleHRfcmVwbGFjZSBjb250YWlucyBwYWdlIHNsaWRlIGJhc2ljX3NsaWRlIHRpdGxlX3NsaWRlICcgK1xuICAgICAgJ3RpdGxlIHN1YnRpdGxlIGZhZGVfaW4gZmFkZV9vdXQgZmFkZV9hdCBjbGVhcl9jb2xvciBjb2xvciBsaW5lX2NvbG9yICcgK1xuICAgICAgJ2xpbmVfd2lkdGggdGV4dHVyZV93cmFwIHRleHR1cmVfdHJhbnNmb3JtIHRleHR1cmUgc2NhbGVfP3ggc2NhbGVfP3kgJyArXG4gICAgICAnc2NhbGVfP3o/IHRyYW5zbGF0ZV8/eCB0cmFuc2xhdGVfP3kgdHJhbnNsYXRlXz96PyByb3RhdGVfP3ggcm90YXRlXz95ICcgK1xuICAgICAgJ3JvdGF0ZV8/ej8gcmVjdGFuZ2xlIGNpcmNsZSBlbGxpcHNlIHNwaGVyZSBwYXRoIGxpbmVfdG8gbW92ZV90byAnICtcbiAgICAgICdxdWFkX3RvIGN1cnZlX3RvIHRoZW1lIGJhY2tncm91bmQgY29udGVudHMgbG9jYWxseSB0aW1lIG1vdXNlXz94ICcgK1xuICAgICAgJ21vdXNlXz95IG1vdXNlX2J1dHRvbnMgJyArXG4gICAgICBCVUlMVElOX01PRFVMRVNcbiAgfTtcblxuICBjb25zdCBET1VCTEVfUVVPVEVfVEVYVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXCInLFxuICAgIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gIH07XG4gIGNvbnN0IFNJTkdMRV9RVU9URV9URVhUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXCcnLFxuICAgIGVuZDogJ1xcJycsXG4gICAgaWxsZWdhbDogJ1xcXFxuJ1xuICB9O1xuICBjb25zdCBMT05HX1RFWFQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJzw8JyxcbiAgICBlbmQ6ICc+PidcbiAgfTtcbiAgY29uc3QgQkFTRURfTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdbMC05XSsjWzAtOUEtWl9dKyhcXFxcLlswLTktQS1aX10rKT8jPyhbRWVdWystXT9bMC05XSspPydcbiAgfTtcbiAgY29uc3QgSU1QT1JUID0ge1xuICAgIGJlZ2luS2V5d29yZHM6ICdpbXBvcnQnLFxuICAgIGVuZDogJyQnLFxuICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogWyBET1VCTEVfUVVPVEVfVEVYVCBdXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OX0RFRklOSVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvW2Etel1bXlxcbl0qLT4vLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGVuZDogLy0+LyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogWExfS0VZV09SRFNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1hMJyxcbiAgICBhbGlhc2VzOiBbICd0YW8nIF0sXG4gICAga2V5d29yZHM6IFhMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgRE9VQkxFX1FVT1RFX1RFWFQsXG4gICAgICBTSU5HTEVfUVVPVEVfVEVYVCxcbiAgICAgIExPTkdfVEVYVCxcbiAgICAgIEZVTkNUSU9OX0RFRklOSVRJT04sXG4gICAgICBJTVBPUlQsXG4gICAgICBCQVNFRF9OVU1CRVIsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHhsO1xuIiwKICAgICIvKlxuTGFuZ3VhZ2U6IFhRdWVyeVxuQXV0aG9yOiBEaXJrIEtpcnN0ZW4gPGRrQGJhc2V4Lm9yZz5cbkNvbnRyaWJ1dG9yOiBEdW5jYW4gUGF0ZXJzb25cbkRlc2NyaXB0aW9uOiBTdXBwb3J0cyBYUXVlcnkgMy4xIGluY2x1ZGluZyBYUXVlcnkgVXBkYXRlIDMsIHNvIGFsc28gWFBhdGggKGFzIGl0IGlzIGEgc3VwZXJzZXQpXG5SZWZhY3RvcmVkIHRvIHByb2Nlc3MgeG1sIGNvbnN0cnVjdG9yIHN5bnRheCBhbmQgZnVuY3Rpb24tYm9kaWVzLiBBZGRlZCBtaXNzaW5nIGRhdGEtdHlwZXMsIHhwYXRoIG9wZXJhbmRzLCBpbmJ1aWx0IGZ1bmN0aW9ucywgYW5kIHF1ZXJ5IHByb2xvZ3NcbldlYnNpdGU6IGh0dHBzOi8vd3d3LnczLm9yZy9YTUwvUXVlcnkvXG5DYXRlZ29yeTogZnVuY3Rpb25hbFxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiB4cXVlcnkoX2hsanMpIHtcbiAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94cXVlcnkvI2lkLXRlcm1pbmFsLWRlbGltaXRhdGlvblxuICBjb25zdCBLRVlXT1JEUyA9XG4gICAgJ21vZHVsZSBzY2hlbWEgbmFtZXNwYWNlIGJvdW5kYXJ5LXNwYWNlIHByZXNlcnZlIG5vLXByZXNlcnZlIHN0cmlwIGRlZmF1bHQgY29sbGF0aW9uIGJhc2UtdXJpIG9yZGVyaW5nIGNvbnRleHQgZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3IgY29weS1uYW1lc3BhY2VzIGVtcHR5LXNlcXVlbmNlIGV4Y2VwdCBleHBvbmVudC1zZXBhcmF0b3IgZXh0ZXJuYWwgZ3JvdXBpbmctc2VwYXJhdG9yIGluaGVyaXQgbm8taW5oZXJpdCBsYXggbWludXMtc2lnbiBwZXItbWlsbGUgcGVyY2VudCBzY2hlbWEtYXR0cmlidXRlIHNjaGVtYS1lbGVtZW50IHN0cmljdCB1bm9yZGVyZWQgemVyby1kaWdpdCAnICtcbiAgICAnZGVjbGFyZSBpbXBvcnQgb3B0aW9uIGZ1bmN0aW9uIHZhbGlkYXRlIHZhcmlhYmxlICcgK1xuICAgICdmb3IgYXQgaW4gbGV0IHdoZXJlIG9yZGVyIGdyb3VwIGJ5IHJldHVybiBpZiB0aGVuIGVsc2UgJyArXG4gICAgJ3R1bWJsaW5nIHNsaWRpbmcgd2luZG93IHN0YXJ0IHdoZW4gb25seSBlbmQgcHJldmlvdXMgbmV4dCBzdGFibGUgJyArXG4gICAgJ2FzY2VuZGluZyBkZXNjZW5kaW5nIGFsbG93aW5nIGVtcHR5IGdyZWF0ZXN0IGxlYXN0IHNvbWUgZXZlcnkgc2F0aXNmaWVzIHN3aXRjaCBjYXNlIHR5cGVzd2l0Y2ggdHJ5IGNhdGNoICcgK1xuICAgICdhbmQgb3IgdG8gdW5pb24gaW50ZXJzZWN0IGluc3RhbmNlIG9mIHRyZWF0IGFzIGNhc3RhYmxlIGNhc3QgbWFwIGFycmF5ICcgK1xuICAgICdkZWxldGUgaW5zZXJ0IGludG8gcmVwbGFjZSB2YWx1ZSByZW5hbWUgY29weSBtb2RpZnkgdXBkYXRlJztcblxuICAvLyBOb2RlIFR5cGVzIChzb3J0ZWQgYnkgaW5oZXJpdGFuY2UpXG4gIC8vIGF0b21pYyB0eXBlcyAoc29ydGVkIGJ5IGluaGVyaXRhbmNlKVxuICBjb25zdCBUWVBFID1cbiAgICAnaXRlbSBkb2N1bWVudC1ub2RlIG5vZGUgYXR0cmlidXRlIGRvY3VtZW50IGVsZW1lbnQgY29tbWVudCBuYW1lc3BhY2UgbmFtZXNwYWNlLW5vZGUgcHJvY2Vzc2luZy1pbnN0cnVjdGlvbiB0ZXh0IGNvbnN0cnVjdGlvbiAnICtcbiAgICAneHM6YW55QXRvbWljVHlwZSB4czp1bnR5cGVkQXRvbWljIHhzOmR1cmF0aW9uIHhzOnRpbWUgeHM6ZGVjaW1hbCB4czpmbG9hdCB4czpkb3VibGUgeHM6Z1llYXJNb250aCB4czpnWWVhciB4czpnTW9udGhEYXkgeHM6Z01vbnRoIHhzOmdEYXkgeHM6Ym9vbGVhbiB4czpiYXNlNjRCaW5hcnkgeHM6aGV4QmluYXJ5IHhzOmFueVVSSSB4czpRTmFtZSB4czpOT1RBVElPTiB4czpkYXRlVGltZSB4czpkYXRlVGltZVN0YW1wIHhzOmRhdGUgeHM6c3RyaW5nIHhzOm5vcm1hbGl6ZWRTdHJpbmcgeHM6dG9rZW4geHM6bGFuZ3VhZ2UgeHM6Tk1UT0tFTiB4czpOYW1lIHhzOk5DTmFtZSB4czpJRCB4czpJRFJFRiB4czpFTlRJVFkgeHM6aW50ZWdlciB4czpub25Qb3NpdGl2ZUludGVnZXIgeHM6bmVnYXRpdmVJbnRlZ2VyIHhzOmxvbmcgeHM6aW50IHhzOnNob3J0IHhzOmJ5dGUgeHM6bm9uTmVnYXRpdmVJbnRlZ2VyIHhzOnVuaXNpZ25lZExvbmcgeHM6dW5zaWduZWRJbnQgeHM6dW5zaWduZWRTaG9ydCB4czp1bnNpZ25lZEJ5dGUgeHM6cG9zaXRpdmVJbnRlZ2VyIHhzOnllYXJNb250aER1cmF0aW9uIHhzOmRheVRpbWVEdXJhdGlvbic7XG5cbiAgY29uc3QgTElURVJBTCA9XG4gICAgJ2VxIG5lIGx0IGxlIGd0IGdlIGlzICcgK1xuICAgICdzZWxmOjogY2hpbGQ6OiBkZXNjZW5kYW50OjogZGVzY2VuZGFudC1vci1zZWxmOjogYXR0cmlidXRlOjogZm9sbG93aW5nOjogZm9sbG93aW5nLXNpYmxpbmc6OiBwYXJlbnQ6OiBhbmNlc3Rvcjo6IGFuY2VzdG9yLW9yLXNlbGY6OiBwcmVjZWRpbmc6OiBwcmVjZWRpbmctc2libGluZzo6ICcgK1xuICAgICdOYU4nO1xuXG4gIC8vIGZ1bmN0aW9ucyAoVE9ETzogZmluZCByZWdleCBmb3Igb3A6IHdpdGhvdXQgYnJlYWtpbmcgYnVpbGQpXG4gIGNvbnN0IEJVSUxUX0lOID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYmFycmF5Oi8sXG4gICAgICAgIGVuZDogLyg/OmFwcGVuZHxmaWx0ZXJ8ZmxhdHRlbnxmb2xkLSg/OmxlZnR8cmlnaHQpfGZvci1lYWNoKD86LXBhaXIpP3xnZXR8aGVhZHxpbnNlcnQtYmVmb3JlfGpvaW58cHV0fHJlbW92ZXxyZXZlcnNlfHNpemV8c29ydHxzdWJhcnJheXx0YWlsKVxcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxibWFwOi8sXG4gICAgICAgIGVuZDogLyg/OmNvbnRhaW5zfGVudHJ5fGZpbmR8Zm9yLWVhY2h8Z2V0fGtleXN8bWVyZ2V8cHV0fHJlbW92ZXxzaXplKVxcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxibWF0aDovLFxuICAgICAgICBlbmQ6IC8oPzphKD86Y29zfHNpbnx0YW5bMl0/KXxjb3N8ZXhwKD86MTApP3xsb2coPzoxMCk/fHBpfHBvd3xzaW58c3FydHx0YW4pXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGJvcDovLFxuICAgICAgICBlbmQ6IC9cXCgvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYmZuOi8sXG4gICAgICAgIGVuZDogL1xcKC8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICAvLyBkbyBub3QgaGlnaGxpZ2h0IGluYnVpbHQgc3RyaW5ncyBhcyB2YXJpYWJsZSBvciB4bWwgZWxlbWVudCBuYW1lc1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1tePC8kOidcIi1dXFxiKD86YWJzfGFjY3VtdWxhdG9yLSg/OmFmdGVyfGJlZm9yZSl8YWRqdXN0LSg/OmRhdGUoPzpUaW1lKT98dGltZSktdG8tdGltZXpvbmV8YW5hbHl6ZS1zdHJpbmd8YXBwbHl8YXZhaWxhYmxlLSg/OmVudmlyb25tZW50LXZhcmlhYmxlc3xzeXN0ZW0tcHJvcGVydGllcyl8YXZnfGJhc2UtdXJpfGJvb2xlYW58Y2VpbGluZ3xjb2RlcG9pbnRzPy0oPzplcXVhbHx0by1zdHJpbmcpfGNvbGxhdGlvbi1rZXl8Y29sbGVjdGlvbnxjb21wYXJlfGNvbmNhdHxjb250YWlucyg/Oi10b2tlbik/fGNvcHktb2Z8Y291bnR8Y3VycmVudCg/Oi0pPyg/OmRhdGUoPzpUaW1lKT98dGltZXxncm91cCg/OmluZy1rZXkpP3xvdXRwdXQtdXJpfG1lcmdlLSg/Omdyb3VwfGtleSkpP2RhdGF8ZGF0ZVRpbWV8ZGF5cz8tZnJvbS0oPzpkYXRlKD86VGltZSk/fGR1cmF0aW9uKXxkZWVwLWVxdWFsfGRlZmF1bHQtKD86Y29sbGF0aW9ufGxhbmd1YWdlKXxkaXN0aW5jdC12YWx1ZXN8ZG9jdW1lbnQoPzotdXJpKT98ZG9jKD86LWF2YWlsYWJsZSk/fGVsZW1lbnQtKD86YXZhaWxhYmxlfHdpdGgtaWQpfGVtcHR5fGVuY29kZS1mb3ItdXJpfGVuZHMtd2l0aHxlbnZpcm9ubWVudC12YXJpYWJsZXxlcnJvcnxlc2NhcGUtaHRtbC11cml8ZXhhY3RseS1vbmV8ZXhpc3RzfGZhbHNlfGZpbHRlcnxmbG9vcnxmb2xkLSg/OmxlZnR8cmlnaHQpfGZvci1lYWNoKD86LXBhaXIpP3xmb3JtYXQtKD86ZGF0ZSg/OlRpbWUpP3x0aW1lfGludGVnZXJ8bnVtYmVyKXxmdW5jdGlvbi0oPzphcml0eXxhdmFpbGFibGV8bG9va3VwfG5hbWUpfGdlbmVyYXRlLWlkfGhhcy1jaGlsZHJlbnxoZWFkfGhvdXJzLWZyb20tKD86ZGF0ZVRpbWV8ZHVyYXRpb258dGltZSl8aWQoPzpyZWYpP3xpbXBsaWNpdC10aW1lem9uZXxpbi1zY29wZS1wcmVmaXhlc3xpbmRleC1vZnxpbm5lcm1vc3R8aW5zZXJ0LWJlZm9yZXxpcmktdG8tdXJpfGpzb24tKD86ZG9jfHRvLXhtbCl8a2V5fGxhbmd8bGFzdHxsb2FkLXhxdWVyeS1tb2R1bGV8bG9jYWwtbmFtZSg/Oi1mcm9tLVFOYW1lKT98KD86bG93ZXJ8dXBwZXIpLWNhc2V8bWF0Y2hlc3xtYXh8bWludXRlcy1mcm9tLSg/OmRhdGVUaW1lfGR1cmF0aW9ufHRpbWUpfG1pbnxtb250aHM/LWZyb20tKD86ZGF0ZSg/OlRpbWUpP3xkdXJhdGlvbil8bmFtZSg/OnNwYWNlLXVyaS0/KD86Zm9yLXByZWZpeHxmcm9tLVFOYW1lKT8pP3xuaWxsZWR8bm9kZS1uYW1lfG5vcm1hbGl6ZS0oPzpzcGFjZXx1bmljb2RlKXxub3R8bnVtYmVyfG9uZS1vci1tb3JlfG91dGVybW9zdHxwYXJzZS0oPzppZXRmLWRhdGV8anNvbil8cGF0aHxwb3NpdGlvbnwoPzpwcmVmaXgtZnJvbS0pP1FOYW1lfHJhbmRvbS1udW1iZXItZ2VuZXJhdG9yfHJlZ2V4LWdyb3VwfHJlbW92ZXxyZXBsYWNlfHJlc29sdmUtKD86UU5hbWV8dXJpKXxyZXZlcnNlfHJvb3R8cm91bmQoPzotaGFsZi10by1ldmVuKT98c2Vjb25kcy1mcm9tLSg/OmRhdGVUaW1lfGR1cmF0aW9ufHRpbWUpfHNuYXBzaG90fHNvcnR8c3RhcnRzLXdpdGh8c3RhdGljLWJhc2UtdXJpfHN0cmVhbS1hdmFpbGFibGV8c3RyaW5nLT8oPzpqb2lufGxlbmd0aHx0by1jb2RlcG9pbnRzKT98c3Vic2VxdWVuY2V8c3Vic3RyaW5nLT8oPzphZnRlcnxiZWZvcmUpP3xzdW18c3lzdGVtLXByb3BlcnR5fHRhaWx8dGltZXpvbmUtZnJvbS0oPzpkYXRlKD86VGltZSk/fHRpbWUpfHRva2VuaXplfHRyYWNlfHRyYW5zKD86Zm9ybXxsYXRlKXx0cnVlfHR5cGUtYXZhaWxhYmxlfHVub3JkZXJlZHx1bnBhcnNlZC0oPzplbnRpdHl8dGV4dCk/LT8oPzpwdWJsaWMtaWR8dXJpfGF2YWlsYWJsZXxsaW5lcyk/fHVyaS1jb2xsZWN0aW9ufHhtbC10by1qc29ufHllYXJzPy1mcm9tLSg/OmRhdGUoPzpUaW1lKT98ZHVyYXRpb24pfHplcm8tb3Itb25lKVxcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxibG9jYWw6LyxcbiAgICAgICAgZW5kOiAvXFwoLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGJ6aXA6LyxcbiAgICAgICAgZW5kOiAvKD86emlwLWZpbGV8KD86eG1sfGh0bWx8dGV4dHxiaW5hcnkpLWVudHJ5fCAoPzp1cGRhdGUtKT9lbnRyaWVzKVxcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxiKD86dXRpbHxkYnxmdW5jdHh8YXBwfHhkbXB8eG1sZGIpOi8sXG4gICAgICAgIGVuZDogL1xcKC8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgVElUTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiAvXFxieHF1ZXJ5IHZlcnNpb24gXCJbMTNdXFwuWzAxXVwiXFxzPyg/OmVuY29kaW5nIFwiLitcIik/LyxcbiAgICBlbmQ6IC87L1xuICB9O1xuXG4gIGNvbnN0IFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9bJF1bXFx3XFwtOl0rL1xuICB9O1xuXG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAvKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYi8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1wiXCIvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLycnLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvJVtcXHdcXC06XSsvXG4gIH07XG5cbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICBiZWdpbjogL1xcKDovLFxuICAgIGVuZDogLzpcXCkvLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgYmVnaW46IC9AXFx3Ky9cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94cXVlcnkvI2lkLWNvbXB1dGVkQ29uc3RydWN0b3JzXG4gIC8vIG1vY2hhOiBjb21wdXRlZF9pbmJ1aWx0XG4gIC8vIHNlZSBodHRwczovL3d3dy5yZWdleHBhbC5jb20vP2ZhbT05OTc0OVxuICBjb25zdCBDT01QVVRFRCA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnZWxlbWVudCBhdHRyaWJ1dGUgY29tbWVudCBkb2N1bWVudCBwcm9jZXNzaW5nLWluc3RydWN0aW9uJyxcbiAgICBlbmQ6IC9cXHsvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTtcblxuICAvLyBtb2NoYTogZGlyZWN0X21ldGhvZFxuICBjb25zdCBESVJFQ1QgPSB7XG4gICAgYmVnaW46IC88KFtcXHcuXzotXSspKFxccytcXFMqPSgnfFwiKS4qKCd8XCIpKT8+LyxcbiAgICBlbmQ6IC8oXFwvW1xcdy5fOi1dKz4pLyxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgICBlbmQ6IC9cXH0vLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3hxdWVyeSdcbiAgICAgIH0sXG4gICAgICAnc2VsZidcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIEJVSUxUX0lOLFxuICAgIFNUUklORyxcbiAgICBOVU1CRVIsXG4gICAgQ09NTUVOVCxcbiAgICBBTk5PVEFUSU9OLFxuICAgIFRJVExFLFxuICAgIENPTVBVVEVELFxuICAgIERJUkVDVFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1hRdWVyeScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICd4cSdcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGlsbGVnYWw6IC8ocHJvYyl8KGFic3RyYWN0KXwoZXh0ZW5kcyl8KHVudGlsKXwoIykvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1thLXpBLVokXVthLXpBLVowLTlfOi1dKi8sXG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogQ09OVEFJTlNcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB4cXVlcnk7XG4iLAogICAgIi8qXG4gTGFuZ3VhZ2U6IFplcGhpclxuIERlc2NyaXB0aW9uOiBaZXBoaXIsIGFuIG9wZW4gc291cmNlLCBoaWdoLWxldmVsIGxhbmd1YWdlIGRlc2lnbmVkIHRvIGVhc2UgdGhlIGNyZWF0aW9uIGFuZCBtYWludGFpbmFiaWxpdHkgb2YgZXh0ZW5zaW9ucyBmb3IgUEhQIHdpdGggYSBmb2N1cyBvbiB0eXBlIGFuZCBtZW1vcnkgc2FmZXR5LlxuIEF1dGhvcjogT2xlZyBFZmltb3YgPGVmaW1vdm92QGdtYWlsLmNvbT5cbiBXZWJzaXRlOiBodHRwczovL3plcGhpci1sYW5nLmNvbS9lblxuIEF1ZGl0OiAyMDIwXG4gKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHplcGhpcihobGpzKSB7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7XG4gICAgICAgIGlsbGVnYWw6IG51bGxcbiAgICAgIH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICAgICAgaWxsZWdhbDogbnVsbFxuICAgICAgfSlcbiAgICBdXG4gIH07XG4gIGNvbnN0IFRJVExFX01PREUgPSBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERTtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbiAgY29uc3QgS0VZV09SRFMgPVxuICAgIC8vIGNsYXNzZXMgYW5kIG9iamVjdHNcbiAgICAnbmFtZXNwYWNlIGNsYXNzIGludGVyZmFjZSB1c2UgZXh0ZW5kcyAnICtcbiAgICAnZnVuY3Rpb24gcmV0dXJuICcgK1xuICAgICdhYnN0cmFjdCBmaW5hbCBwdWJsaWMgcHJvdGVjdGVkIHByaXZhdGUgc3RhdGljIGRlcHJlY2F0ZWQgJyArXG4gICAgLy8gZXJyb3IgaGFuZGxpbmdcbiAgICAndGhyb3cgdHJ5IGNhdGNoIEV4Y2VwdGlvbiAnICtcbiAgICAvLyBrZXl3b3JkLWlzaCB0aGluZ3MgdGhlaXIgd2Vic2l0ZSBkb2VzIE5PVCBzZWVtIHRvIGhpZ2hsaWdodCAoaW4gdGhlaXIgb3duIHNuaXBwZXRzKVxuICAgIC8vICd0eXBlb2YgZmV0Y2ggaW4gJyArXG4gICAgLy8gb3BlcmF0b3JzL2hlbHBlcnNcbiAgICAnZWNobyBlbXB0eSBpc3NldCBpbnN0YW5jZW9mIHVuc2V0ICcgK1xuICAgIC8vIGFzc2lnbm1lbnQvdmFyaWFibGVzXG4gICAgJ2xldCB2YXIgbmV3IGNvbnN0IHNlbGYgJyArXG4gICAgLy8gY29udHJvbFxuICAgICdyZXF1aXJlICcgK1xuICAgICdpZiBlbHNlIGVsc2VpZiBzd2l0Y2ggY2FzZSBkZWZhdWx0ICcgK1xuICAgICdkbyB3aGlsZSBsb29wIGZvciBjb250aW51ZSBicmVhayAnICtcbiAgICAnbGlrZWx5IHVubGlrZWx5ICcgK1xuICAgIC8vIG1hZ2ljIGNvbnN0YW50c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9waGFsY29uL3plcGhpci9ibG9iL21hc3Rlci9MaWJyYXJ5L0V4cHJlc3Npb24vQ29uc3RhbnRzLnBocFxuICAgICdfX0xJTkVfXyBfX0ZJTEVfXyBfX0RJUl9fIF9fRlVOQ1RJT05fXyBfX0NMQVNTX18gX19UUkFJVF9fIF9fTUVUSE9EX18gX19OQU1FU1BBQ0VfXyAnICtcbiAgICAvLyB0eXBlcyAtIGh0dHBzOi8vZG9jcy56ZXBoaXItbGFuZy5jb20vMC4xMi9lbi90eXBlc1xuICAgICdhcnJheSBib29sZWFuIGZsb2F0IGRvdWJsZSBpbnRlZ2VyIG9iamVjdCByZXNvdXJjZSBzdHJpbmcgJyArXG4gICAgJ2NoYXIgbG9uZyB1bnNpZ25lZCBib29sIGludCB1aW50IHVsb25nIHVjaGFyICcgK1xuICAgIC8vIGJ1aWx0LWluc1xuICAgICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkJztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdaZXBoaXInLFxuICAgIGFsaWFzZXM6IFsgJ3plcCcgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgL1xcL1xcKi8sXG4gICAgICAgIC9cXCpcXC8vLFxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46IC9AW0EtWmEtel0rL1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC88PDxbJ1wiXT9cXHcrWydcIl0/JC8sXG4gICAgICAgIGVuZDogL15cXHcrOy8sXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBzd2FsbG93IGNvbXBvc2VkIGlkZW50aWZpZXJzIHRvIGF2b2lkIHBhcnNpbmcgdGhlbSBhcyBrZXl3b3Jkc1xuICAgICAgICBiZWdpbjogLyg6OnwtPikrW2EtekEtWl9cXHg3Zi1cXHhmZl1bYS16QS1aMC05X1xceDdmLVxceGZmXSovXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBmbicsXG4gICAgICAgIGVuZDogL1s7e10vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAvXFwkfFxcW3wlLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBUSVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6KCRcIl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBUSVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLFxuICAgICAgICBlbmQ6IC87LyxcbiAgICAgICAgaWxsZWdhbDogL1suJ10vLFxuICAgICAgICBjb250YWluczogWyBUSVRMRV9NT0RFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd1c2UnLFxuICAgICAgICBlbmQ6IC87LyxcbiAgICAgICAgY29udGFpbnM6IFsgVElUTEVfTU9ERSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLz0+LyAvLyBObyBtYXJrdXAsIGp1c3QgYSByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB6ZXBoaXI7XG4iLAogICAgInZhciBobGpzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnMWMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy8xYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWJuZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FjY2Vzc2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FjY2Vzc2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWN0aW9uc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhZGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hZGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FuZ2Vsc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYW5nZWxzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FwYWNoZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FwYWNoZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXBwbGVzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcHBsZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXJjYWRlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJjYWRlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhcmR1aW5vJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJkdWlubycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXJtYXNtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJtYXNtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4bWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94bWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FzY2lpZG9jJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXNjaWlkb2MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FzcGVjdGonLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hc3BlY3RqJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhdXRvaG90a2V5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXV0b2hvdGtleScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXV0b2l0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXV0b2l0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhdnJhc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hdnJhc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2F3aycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2F3aycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXhhcHRhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXhhcHRhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdiYXNoJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYmFzaCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYmFzaWMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9iYXNpYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYm5mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYm5mJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdicmFpbmZ1Y2snLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9icmFpbmZ1Y2snKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2MtbGlrZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2MtbGlrZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NhbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NhbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2FwbnByb3RvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY2FwbnByb3RvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjZXlsb24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jZXlsb24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NsZWFuJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY2xlYW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Nsb2p1cmUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbG9qdXJlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjbG9qdXJlLXJlcGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbG9qdXJlLXJlcGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NtYWtlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY21ha2UnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NvZmZlZXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NvZmZlZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY29xJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY29xJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjb3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jb3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NwcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NwcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3Jtc2gnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jcm1zaCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3J5c3RhbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NyeXN0YWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzaGFycCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NzaGFycCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3NwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3NwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjc3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jc3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYXJrZG93bicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21hcmtkb3duJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkYXJ0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZGFydCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGVscGhpJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZGVscGhpJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkaWZmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZGlmZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGphbmdvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZGphbmdvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkbnMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kbnMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RvY2tlcmZpbGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kb2NrZXJmaWxlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkb3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kb3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RzY29uZmlnJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZHNjb25maWcnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2R0cycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2R0cycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZHVzdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2R1c3QnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VibmYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lYm5mJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlbGl4aXInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lbGl4aXInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VsbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VsbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncnVieScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3J1YnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VyYicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VyYicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZXJsYW5nLXJlcGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lcmxhbmctcmVwbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZXJsYW5nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZXJsYW5nJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdleGNlbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2V4Y2VsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdmaXgnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9maXgnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2ZsaXgnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9mbGl4JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdmb3J0cmFuJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZm9ydHJhbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZnNoYXJwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZnNoYXJwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnYW1zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2FtcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ2F1c3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nYXVzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ2NvZGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nY29kZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ2hlcmtpbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2doZXJraW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dsc2wnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nbHNsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ28nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dvbG8nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nb2xvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdncmFkbGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ncmFkbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dyb292eScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dyb292eScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaGFtbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hhbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hhbmRsZWJhcnMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oYW5kbGViYXJzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoYXNrZWxsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaGFza2VsbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaGF4ZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hheGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hzcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hzcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaHRtbGJhcnMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9odG1sYmFycycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaHR0cCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2h0dHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2h5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaHknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2luZm9ybTcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pbmZvcm03JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdpbmknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pbmknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2lycGY5MCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2lycGY5MCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaXNibCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2lzYmwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2phdmEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qYXZhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqYXZhc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvamF2YXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnamJvc3MtY2xpJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvamJvc3MtY2xpJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqc29uJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvanNvbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnanVsaWEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qdWxpYScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnanVsaWEtcmVwbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2p1bGlhLXJlcGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2tvdGxpbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2tvdGxpbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGFzc28nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sYXNzbycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGF0ZXgnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sYXRleCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGRpZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xkaWYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xlYWYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sZWFmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsZXNzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGVzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGlzcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xpc3AnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xpdmVjb2Rlc2VydmVyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGl2ZWNvZGVzZXJ2ZXInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xpdmVzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9saXZlc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsbHZtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGx2bScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbHNsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbHNsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsdWEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sdWEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21ha2VmaWxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWFrZWZpbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21hdGhlbWF0aWNhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWF0aGVtYXRpY2EnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21hdGxhYicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21hdGxhYicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWF4aW1hJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWF4aW1hJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtZWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tZWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21lcmN1cnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tZXJjdXJ5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtaXBzYXNtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWlwc2FzbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWl6YXInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9taXphcicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGVybCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BlcmwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21vam9saWNpb3VzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbW9qb2xpY2lvdXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21vbmtleScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21vbmtleScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbW9vbnNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21vb25zY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ24xcWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uMXFsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduZ2lueCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL25naW54JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduaW0nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uaW0nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ25peCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL25peCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbm9kZS1yZXBsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbm9kZS1yZXBsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduc2lzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbnNpcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb2JqZWN0aXZlYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL29iamVjdGl2ZWMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ29jYW1sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb2NhbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ29wZW5zY2FkJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb3BlbnNjYWQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ294eWdlbmUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9veHlnZW5lJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwYXJzZXIzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGFyc2VyMycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGdzcWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wZ3NxbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGhwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGhwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwaHAtdGVtcGxhdGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9waHAtdGVtcGxhdGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BsYWludGV4dCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BsYWludGV4dCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncG9ueScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BvbnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Bvd2Vyc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wb3dlcnNoZWxsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwcm9jZXNzaW5nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvY2Vzc2luZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb2ZpbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvcGVydGllcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb3BlcnRpZXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb3RvYnVmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvdG9idWYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3B1cHBldCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3B1cHBldCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHVyZWJhc2ljJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHVyZWJhc2ljJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdweXRob24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9weXRob24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3B5dGhvbi1yZXBsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHl0aG9uLXJlcGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3EnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9xJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdxbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9xbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3InLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyZWFzb25tbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JlYXNvbm1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyaWInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yaWInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JvYm9jb25mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcm9ib2NvbmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JvdXRlcm9zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcm91dGVyb3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JzbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncnVsZXNsYW5ndWFnZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3J1bGVzbGFuZ3VhZ2UnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1c3QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydXN0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzYXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zYXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NjYWxhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NhbGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NjaGVtZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NjaGVtZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2NpbGFiJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NpbGFiJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzY3NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zaGVsbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc21hbGknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWFsaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc21hbGx0YWxrJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc21hbGx0YWxrJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NxZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NxZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3FsX21vcmUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zcWxfbW9yZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3FsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdGFuJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3RhbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3RhdGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdGF0YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3RlcDIxJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3RlcDIxJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdHlsdXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdHlsdXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N1YnVuaXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdWJ1bml0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzd2lmdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N3aWZ0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0YWdnZXJzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90YWdnZXJzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3lhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy95YW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0YXAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90YXAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RjbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RjbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndGhyaWZ0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdGhyaWZ0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0cCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0d2lnJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdHdpZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndHlwZXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3R5cGVzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZhbGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92YWxhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2Ym5ldCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZibmV0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2YnNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Zic2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2YnNjcmlwdC1odG1sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmJzY3JpcHQtaHRtbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmVyaWxvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Zlcmlsb2cnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZoZGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92aGRsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2aW0nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92aW0nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3g4NmFzbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3g4NmFzbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgneGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94bCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgneHF1ZXJ5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMveHF1ZXJ5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd6ZXBoaXInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy96ZXBoaXInKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaGxqczsiLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgVU5ERUZJTkVEX0NPREVfUE9JTlRTID0gW1xuICAgIDB4ZmZmZSxcbiAgICAweGZmZmYsXG4gICAgMHgxZmZmZSxcbiAgICAweDFmZmZmLFxuICAgIDB4MmZmZmUsXG4gICAgMHgyZmZmZixcbiAgICAweDNmZmZlLFxuICAgIDB4M2ZmZmYsXG4gICAgMHg0ZmZmZSxcbiAgICAweDRmZmZmLFxuICAgIDB4NWZmZmUsXG4gICAgMHg1ZmZmZixcbiAgICAweDZmZmZlLFxuICAgIDB4NmZmZmYsXG4gICAgMHg3ZmZmZSxcbiAgICAweDdmZmZmLFxuICAgIDB4OGZmZmUsXG4gICAgMHg4ZmZmZixcbiAgICAweDlmZmZlLFxuICAgIDB4OWZmZmYsXG4gICAgMHhhZmZmZSxcbiAgICAweGFmZmZmLFxuICAgIDB4YmZmZmUsXG4gICAgMHhiZmZmZixcbiAgICAweGNmZmZlLFxuICAgIDB4Y2ZmZmYsXG4gICAgMHhkZmZmZSxcbiAgICAweGRmZmZmLFxuICAgIDB4ZWZmZmUsXG4gICAgMHhlZmZmZixcbiAgICAweGZmZmZlLFxuICAgIDB4ZmZmZmYsXG4gICAgMHgxMGZmZmUsXG4gICAgMHgxMGZmZmZcbl07XG5cbmV4cG9ydHMuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gJ1xcdUZGRkQnO1xuXG5leHBvcnRzLkNPREVfUE9JTlRTID0ge1xuICAgIEVPRjogLTEsXG4gICAgTlVMTDogMHgwMCxcbiAgICBUQUJVTEFUSU9OOiAweDA5LFxuICAgIENBUlJJQUdFX1JFVFVSTjogMHgwZCxcbiAgICBMSU5FX0ZFRUQ6IDB4MGEsXG4gICAgRk9STV9GRUVEOiAweDBjLFxuICAgIFNQQUNFOiAweDIwLFxuICAgIEVYQ0xBTUFUSU9OX01BUks6IDB4MjEsXG4gICAgUVVPVEFUSU9OX01BUks6IDB4MjIsXG4gICAgTlVNQkVSX1NJR046IDB4MjMsXG4gICAgQU1QRVJTQU5EOiAweDI2LFxuICAgIEFQT1NUUk9QSEU6IDB4MjcsXG4gICAgSFlQSEVOX01JTlVTOiAweDJkLFxuICAgIFNPTElEVVM6IDB4MmYsXG4gICAgRElHSVRfMDogMHgzMCxcbiAgICBESUdJVF85OiAweDM5LFxuICAgIFNFTUlDT0xPTjogMHgzYixcbiAgICBMRVNTX1RIQU5fU0lHTjogMHgzYyxcbiAgICBFUVVBTFNfU0lHTjogMHgzZCxcbiAgICBHUkVBVEVSX1RIQU5fU0lHTjogMHgzZSxcbiAgICBRVUVTVElPTl9NQVJLOiAweDNmLFxuICAgIExBVElOX0NBUElUQUxfQTogMHg0MSxcbiAgICBMQVRJTl9DQVBJVEFMX0Y6IDB4NDYsXG4gICAgTEFUSU5fQ0FQSVRBTF9YOiAweDU4LFxuICAgIExBVElOX0NBUElUQUxfWjogMHg1YSxcbiAgICBSSUdIVF9TUVVBUkVfQlJBQ0tFVDogMHg1ZCxcbiAgICBHUkFWRV9BQ0NFTlQ6IDB4NjAsXG4gICAgTEFUSU5fU01BTExfQTogMHg2MSxcbiAgICBMQVRJTl9TTUFMTF9GOiAweDY2LFxuICAgIExBVElOX1NNQUxMX1g6IDB4NzgsXG4gICAgTEFUSU5fU01BTExfWjogMHg3YSxcbiAgICBSRVBMQUNFTUVOVF9DSEFSQUNURVI6IDB4ZmZmZFxufTtcblxuZXhwb3J0cy5DT0RFX1BPSU5UX1NFUVVFTkNFUyA9IHtcbiAgICBEQVNIX0RBU0hfU1RSSU5HOiBbMHgyZCwgMHgyZF0sIC8vLS1cbiAgICBET0NUWVBFX1NUUklORzogWzB4NDQsIDB4NGYsIDB4NDMsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDVdLCAvL0RPQ1RZUEVcbiAgICBDREFUQV9TVEFSVF9TVFJJTkc6IFsweDViLCAweDQzLCAweDQ0LCAweDQxLCAweDU0LCAweDQxLCAweDViXSwgLy9bQ0RBVEFbXG4gICAgU0NSSVBUX1NUUklORzogWzB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzRdLCAvL3NjcmlwdFxuICAgIFBVQkxJQ19TVFJJTkc6IFsweDUwLCAweDU1LCAweDQyLCAweDRjLCAweDQ5LCAweDQzXSwgLy9QVUJMSUNcbiAgICBTWVNURU1fU1RSSU5HOiBbMHg1MywgMHg1OSwgMHg1MywgMHg1NCwgMHg0NSwgMHg0ZF0gLy9TWVNURU1cbn07XG5cbi8vU3Vycm9nYXRlc1xuZXhwb3J0cy5pc1N1cnJvZ2F0ZSA9IGZ1bmN0aW9uKGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDB4ZDgwMCAmJiBjcCA8PSAweGRmZmY7XG59O1xuXG5leHBvcnRzLmlzU3Vycm9nYXRlUGFpciA9IGZ1bmN0aW9uKGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDB4ZGMwMCAmJiBjcCA8PSAweGRmZmY7XG59O1xuXG5leHBvcnRzLmdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQgPSBmdW5jdGlvbihjcDEsIGNwMikge1xuICAgIHJldHVybiAoY3AxIC0gMHhkODAwKSAqIDB4NDAwICsgMHgyNDAwICsgY3AyO1xufTtcblxuLy9OT1RFOiBleGNsdWRpbmcgTlVMTCBhbmQgQVNDSUkgd2hpdGVzcGFjZVxuZXhwb3J0cy5pc0NvbnRyb2xDb2RlUG9pbnQgPSBmdW5jdGlvbihjcCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIChjcCAhPT0gMHgyMCAmJiBjcCAhPT0gMHgwYSAmJiBjcCAhPT0gMHgwZCAmJiBjcCAhPT0gMHgwOSAmJiBjcCAhPT0gMHgwYyAmJiBjcCA+PSAweDAxICYmIGNwIDw9IDB4MWYpIHx8XG4gICAgICAgIChjcCA+PSAweDdmICYmIGNwIDw9IDB4OWYpXG4gICAgKTtcbn07XG5cbmV4cG9ydHMuaXNVbmRlZmluZWRDb2RlUG9pbnQgPSBmdW5jdGlvbihjcCkge1xuICAgIHJldHVybiAoY3AgPj0gMHhmZGQwICYmIGNwIDw9IDB4ZmRlZikgfHwgVU5ERUZJTkVEX0NPREVfUE9JTlRTLmluZGV4T2YoY3ApID4gLTE7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGNvbnRyb2xDaGFyYWN0ZXJJbklucHV0U3RyZWFtOiAnY29udHJvbC1jaGFyYWN0ZXItaW4taW5wdXQtc3RyZWFtJyxcbiAgICBub25jaGFyYWN0ZXJJbklucHV0U3RyZWFtOiAnbm9uY2hhcmFjdGVyLWluLWlucHV0LXN0cmVhbScsXG4gICAgc3Vycm9nYXRlSW5JbnB1dFN0cmVhbTogJ3N1cnJvZ2F0ZS1pbi1pbnB1dC1zdHJlYW0nLFxuICAgIG5vblZvaWRIdG1sRWxlbWVudFN0YXJ0VGFnV2l0aFRyYWlsaW5nU29saWR1czogJ25vbi12b2lkLWh0bWwtZWxlbWVudC1zdGFydC10YWctd2l0aC10cmFpbGluZy1zb2xpZHVzJyxcbiAgICBlbmRUYWdXaXRoQXR0cmlidXRlczogJ2VuZC10YWctd2l0aC1hdHRyaWJ1dGVzJyxcbiAgICBlbmRUYWdXaXRoVHJhaWxpbmdTb2xpZHVzOiAnZW5kLXRhZy13aXRoLXRyYWlsaW5nLXNvbGlkdXMnLFxuICAgIHVuZXhwZWN0ZWRTb2xpZHVzSW5UYWc6ICd1bmV4cGVjdGVkLXNvbGlkdXMtaW4tdGFnJyxcbiAgICB1bmV4cGVjdGVkTnVsbENoYXJhY3RlcjogJ3VuZXhwZWN0ZWQtbnVsbC1jaGFyYWN0ZXInLFxuICAgIHVuZXhwZWN0ZWRRdWVzdGlvbk1hcmtJbnN0ZWFkT2ZUYWdOYW1lOiAndW5leHBlY3RlZC1xdWVzdGlvbi1tYXJrLWluc3RlYWQtb2YtdGFnLW5hbWUnLFxuICAgIGludmFsaWRGaXJzdENoYXJhY3Rlck9mVGFnTmFtZTogJ2ludmFsaWQtZmlyc3QtY2hhcmFjdGVyLW9mLXRhZy1uYW1lJyxcbiAgICB1bmV4cGVjdGVkRXF1YWxzU2lnbkJlZm9yZUF0dHJpYnV0ZU5hbWU6ICd1bmV4cGVjdGVkLWVxdWFscy1zaWduLWJlZm9yZS1hdHRyaWJ1dGUtbmFtZScsXG4gICAgbWlzc2luZ0VuZFRhZ05hbWU6ICdtaXNzaW5nLWVuZC10YWctbmFtZScsXG4gICAgdW5leHBlY3RlZENoYXJhY3RlckluQXR0cmlidXRlTmFtZTogJ3VuZXhwZWN0ZWQtY2hhcmFjdGVyLWluLWF0dHJpYnV0ZS1uYW1lJyxcbiAgICB1bmtub3duTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2U6ICd1bmtub3duLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UnLFxuICAgIG1pc3NpbmdTZW1pY29sb25BZnRlckNoYXJhY3RlclJlZmVyZW5jZTogJ21pc3Npbmctc2VtaWNvbG9uLWFmdGVyLWNoYXJhY3Rlci1yZWZlcmVuY2UnLFxuICAgIHVuZXhwZWN0ZWRDaGFyYWN0ZXJBZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyOiAndW5leHBlY3RlZC1jaGFyYWN0ZXItYWZ0ZXItZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllcicsXG4gICAgdW5leHBlY3RlZENoYXJhY3RlckluVW5xdW90ZWRBdHRyaWJ1dGVWYWx1ZTogJ3VuZXhwZWN0ZWQtY2hhcmFjdGVyLWluLXVucXVvdGVkLWF0dHJpYnV0ZS12YWx1ZScsXG4gICAgZW9mQmVmb3JlVGFnTmFtZTogJ2VvZi1iZWZvcmUtdGFnLW5hbWUnLFxuICAgIGVvZkluVGFnOiAnZW9mLWluLXRhZycsXG4gICAgbWlzc2luZ0F0dHJpYnV0ZVZhbHVlOiAnbWlzc2luZy1hdHRyaWJ1dGUtdmFsdWUnLFxuICAgIG1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkF0dHJpYnV0ZXM6ICdtaXNzaW5nLXdoaXRlc3BhY2UtYmV0d2Vlbi1hdHRyaWJ1dGVzJyxcbiAgICBtaXNzaW5nV2hpdGVzcGFjZUFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmQ6ICdtaXNzaW5nLXdoaXRlc3BhY2UtYWZ0ZXItZG9jdHlwZS1wdWJsaWMta2V5d29yZCcsXG4gICAgbWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzOlxuICAgICAgICAnbWlzc2luZy13aGl0ZXNwYWNlLWJldHdlZW4tZG9jdHlwZS1wdWJsaWMtYW5kLXN5c3RlbS1pZGVudGlmaWVycycsXG4gICAgbWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkOiAnbWlzc2luZy13aGl0ZXNwYWNlLWFmdGVyLWRvY3R5cGUtc3lzdGVtLWtleXdvcmQnLFxuICAgIG1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyOiAnbWlzc2luZy1xdW90ZS1iZWZvcmUtZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllcicsXG4gICAgbWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXI6ICdtaXNzaW5nLXF1b3RlLWJlZm9yZS1kb2N0eXBlLXN5c3RlbS1pZGVudGlmaWVyJyxcbiAgICBtaXNzaW5nRG9jdHlwZVB1YmxpY0lkZW50aWZpZXI6ICdtaXNzaW5nLWRvY3R5cGUtcHVibGljLWlkZW50aWZpZXInLFxuICAgIG1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllcjogJ21pc3NpbmctZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllcicsXG4gICAgYWJydXB0RG9jdHlwZVB1YmxpY0lkZW50aWZpZXI6ICdhYnJ1cHQtZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllcicsXG4gICAgYWJydXB0RG9jdHlwZVN5c3RlbUlkZW50aWZpZXI6ICdhYnJ1cHQtZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllcicsXG4gICAgY2RhdGFJbkh0bWxDb250ZW50OiAnY2RhdGEtaW4taHRtbC1jb250ZW50JyxcbiAgICBpbmNvcnJlY3RseU9wZW5lZENvbW1lbnQ6ICdpbmNvcnJlY3RseS1vcGVuZWQtY29tbWVudCcsXG4gICAgZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0OiAnZW9mLWluLXNjcmlwdC1odG1sLWNvbW1lbnQtbGlrZS10ZXh0JyxcbiAgICBlb2ZJbkRvY3R5cGU6ICdlb2YtaW4tZG9jdHlwZScsXG4gICAgbmVzdGVkQ29tbWVudDogJ25lc3RlZC1jb21tZW50JyxcbiAgICBhYnJ1cHRDbG9zaW5nT2ZFbXB0eUNvbW1lbnQ6ICdhYnJ1cHQtY2xvc2luZy1vZi1lbXB0eS1jb21tZW50JyxcbiAgICBlb2ZJbkNvbW1lbnQ6ICdlb2YtaW4tY29tbWVudCcsXG4gICAgaW5jb3JyZWN0bHlDbG9zZWRDb21tZW50OiAnaW5jb3JyZWN0bHktY2xvc2VkLWNvbW1lbnQnLFxuICAgIGVvZkluQ2RhdGE6ICdlb2YtaW4tY2RhdGEnLFxuICAgIGFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZTogJ2Fic2VuY2Utb2YtZGlnaXRzLWluLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZScsXG4gICAgbnVsbENoYXJhY3RlclJlZmVyZW5jZTogJ251bGwtY2hhcmFjdGVyLXJlZmVyZW5jZScsXG4gICAgc3Vycm9nYXRlQ2hhcmFjdGVyUmVmZXJlbmNlOiAnc3Vycm9nYXRlLWNoYXJhY3Rlci1yZWZlcmVuY2UnLFxuICAgIGNoYXJhY3RlclJlZmVyZW5jZU91dHNpZGVVbmljb2RlUmFuZ2U6ICdjaGFyYWN0ZXItcmVmZXJlbmNlLW91dHNpZGUtdW5pY29kZS1yYW5nZScsXG4gICAgY29udHJvbENoYXJhY3RlclJlZmVyZW5jZTogJ2NvbnRyb2wtY2hhcmFjdGVyLXJlZmVyZW5jZScsXG4gICAgbm9uY2hhcmFjdGVyQ2hhcmFjdGVyUmVmZXJlbmNlOiAnbm9uY2hhcmFjdGVyLWNoYXJhY3Rlci1yZWZlcmVuY2UnLFxuICAgIG1pc3NpbmdXaGl0ZXNwYWNlQmVmb3JlRG9jdHlwZU5hbWU6ICdtaXNzaW5nLXdoaXRlc3BhY2UtYmVmb3JlLWRvY3R5cGUtbmFtZScsXG4gICAgbWlzc2luZ0RvY3R5cGVOYW1lOiAnbWlzc2luZy1kb2N0eXBlLW5hbWUnLFxuICAgIGludmFsaWRDaGFyYWN0ZXJTZXF1ZW5jZUFmdGVyRG9jdHlwZU5hbWU6ICdpbnZhbGlkLWNoYXJhY3Rlci1zZXF1ZW5jZS1hZnRlci1kb2N0eXBlLW5hbWUnLFxuICAgIGR1cGxpY2F0ZUF0dHJpYnV0ZTogJ2R1cGxpY2F0ZS1hdHRyaWJ1dGUnLFxuICAgIG5vbkNvbmZvcm1pbmdEb2N0eXBlOiAnbm9uLWNvbmZvcm1pbmctZG9jdHlwZScsXG4gICAgbWlzc2luZ0RvY3R5cGU6ICdtaXNzaW5nLWRvY3R5cGUnLFxuICAgIG1pc3BsYWNlZERvY3R5cGU6ICdtaXNwbGFjZWQtZG9jdHlwZScsXG4gICAgZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQ6ICdlbmQtdGFnLXdpdGhvdXQtbWF0Y2hpbmctb3Blbi1lbGVtZW50JyxcbiAgICBjbG9zaW5nT2ZFbGVtZW50V2l0aE9wZW5DaGlsZEVsZW1lbnRzOiAnY2xvc2luZy1vZi1lbGVtZW50LXdpdGgtb3Blbi1jaGlsZC1lbGVtZW50cycsXG4gICAgZGlzYWxsb3dlZENvbnRlbnRJbk5vc2NyaXB0SW5IZWFkOiAnZGlzYWxsb3dlZC1jb250ZW50LWluLW5vc2NyaXB0LWluLWhlYWQnLFxuICAgIG9wZW5FbGVtZW50c0xlZnRBZnRlckVvZjogJ29wZW4tZWxlbWVudHMtbGVmdC1hZnRlci1lb2YnLFxuICAgIGFiYW5kb25lZEhlYWRFbGVtZW50Q2hpbGQ6ICdhYmFuZG9uZWQtaGVhZC1lbGVtZW50LWNoaWxkJyxcbiAgICBtaXNwbGFjZWRTdGFydFRhZ0ZvckhlYWRFbGVtZW50OiAnbWlzcGxhY2VkLXN0YXJ0LXRhZy1mb3ItaGVhZC1lbGVtZW50JyxcbiAgICBuZXN0ZWROb3NjcmlwdEluSGVhZDogJ25lc3RlZC1ub3NjcmlwdC1pbi1oZWFkJyxcbiAgICBlb2ZJbkVsZW1lbnRUaGF0Q2FuQ29udGFpbk9ubHlUZXh0OiAnZW9mLWluLWVsZW1lbnQtdGhhdC1jYW4tY29udGFpbi1vbmx5LXRleHQnXG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHVuaWNvZGUgPSByZXF1aXJlKCcuLi9jb21tb24vdW5pY29kZScpO1xuY29uc3QgRVJSID0gcmVxdWlyZSgnLi4vY29tbW9uL2Vycm9yLWNvZGVzJyk7XG5cbi8vQWxpYXNlc1xuY29uc3QgJCA9IHVuaWNvZGUuQ09ERV9QT0lOVFM7XG5cbi8vQ29uc3RcbmNvbnN0IERFRkFVTFRfQlVGRkVSX1dBVEVSTElORSA9IDEgPDwgMTY7XG5cbi8vUHJlcHJvY2Vzc29yXG4vL05PVEU6IEhUTUwgaW5wdXQgcHJlcHJvY2Vzc2luZ1xuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtKVxuY2xhc3MgUHJlcHJvY2Vzc29yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5odG1sID0gbnVsbDtcblxuICAgICAgICB0aGlzLnBvcyA9IC0xO1xuICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclBvcyA9IC0xO1xuXG4gICAgICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcblxuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGFzdENodW5rV3JpdHRlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idWZmZXJXYXRlcmxpbmUgPSBERUZBVUxUX0JVRkZFUl9XQVRFUkxJTkU7XG4gICAgfVxuXG4gICAgX2VycigpIHtcbiAgICAgICAgLy8gTk9URTogZXJyIHJlcG9ydGluZyBpcyBub29wIGJ5IGRlZmF1bHQuIEVuYWJsZWQgYnkgbWl4aW4uXG4gICAgfVxuXG4gICAgX2FkZEdhcCgpIHtcbiAgICAgICAgdGhpcy5nYXBTdGFjay5wdXNoKHRoaXMubGFzdEdhcFBvcyk7XG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xuICAgIH1cblxuICAgIF9wcm9jZXNzU3Vycm9nYXRlKGNwKSB7XG4gICAgICAgIC8vTk9URTogdHJ5IHRvIHBlZWsgYSBzdXJyb2dhdGUgcGFpclxuICAgICAgICBpZiAodGhpcy5wb3MgIT09IHRoaXMubGFzdENoYXJQb3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG5cbiAgICAgICAgICAgIGlmICh1bmljb2RlLmlzU3Vycm9nYXRlUGFpcihuZXh0Q3ApKSB7XG4gICAgICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXIuIFBlZWsgcGFpciBjaGFyYWN0ZXIgYW5kIHJlY2FsY3VsYXRlIGNvZGUgcG9pbnQuXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcblxuICAgICAgICAgICAgICAgIC8vTk9URTogYWRkIGdhcCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkIGR1cmluZyByZXRyZWF0XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkR2FwKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5nZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KGNwLCBuZXh0Q3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9OT1RFOiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiBhIGNodW5rLCB0aGVyZWZvcmUgd2UgY2FuJ3QgaW5mZXIgc3Vycm9nYXRlIHBhaXIgeWV0LlxuICAgICAgICBlbHNlIGlmICghdGhpcy5sYXN0Q2h1bmtXcml0dGVuKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICQuRU9GO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9OT1RFOiBpc29sYXRlZCBzdXJyb2dhdGVcbiAgICAgICAgdGhpcy5fZXJyKEVSUi5zdXJyb2dhdGVJbklucHV0U3RyZWFtKTtcblxuICAgICAgICByZXR1cm4gY3A7XG4gICAgfVxuXG4gICAgZHJvcFBhcnNlZENodW5rKCkge1xuICAgICAgICBpZiAodGhpcy5wb3MgPiB0aGlzLmJ1ZmZlcldhdGVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2hhclBvcyAtPSB0aGlzLnBvcztcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IHRoaXMuaHRtbC5zdWJzdHJpbmcodGhpcy5wb3MpO1xuICAgICAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0R2FwUG9zID0gLTE7XG4gICAgICAgICAgICB0aGlzLmdhcFN0YWNrID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZShjaHVuaywgaXNMYXN0Q2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXMuaHRtbCkge1xuICAgICAgICAgICAgdGhpcy5odG1sICs9IGNodW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5odG1sID0gY2h1bms7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RDaGFyUG9zID0gdGhpcy5odG1sLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RDaHVua1dyaXR0ZW4gPSBpc0xhc3RDaHVuaztcbiAgICB9XG5cbiAgICBpbnNlcnRIdG1sQXRDdXJyZW50UG9zKGNodW5rKSB7XG4gICAgICAgIHRoaXMuaHRtbCA9IHRoaXMuaHRtbC5zdWJzdHJpbmcoMCwgdGhpcy5wb3MgKyAxKSArIGNodW5rICsgdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyArIDEsIHRoaXMuaHRtbC5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMubGFzdENoYXJQb3MgPSB0aGlzLmh0bWwubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5lbmRPZkNodW5rSGl0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWR2YW5jZSgpIHtcbiAgICAgICAgdGhpcy5wb3MrKztcblxuICAgICAgICBpZiAodGhpcy5wb3MgPiB0aGlzLmxhc3RDaGFyUG9zKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSAhdGhpcy5sYXN0Q2h1bmtXcml0dGVuO1xuICAgICAgICAgICAgcmV0dXJuICQuRU9GO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgICAgIC8vTk9URTogYW55IFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93IGEgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlclxuICAgICAgICAvL211c3QgYmUgaWdub3JlZC5cbiAgICAgICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lICYmIGNwID09PSAkLkxJTkVfRkVFRCkge1xuICAgICAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9OT1RFOiBhbGwgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlcnMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnNcbiAgICAgICAgaWYgKGNwID09PSAkLkNBUlJJQUdFX1JFVFVSTikge1xuICAgICAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICQuTElORV9GRUVEO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodW5pY29kZS5pc1N1cnJvZ2F0ZShjcCkpIHtcbiAgICAgICAgICAgIGNwID0gdGhpcy5fcHJvY2Vzc1N1cnJvZ2F0ZShjcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL09QVElNSVpBVElPTjogZmlyc3QgY2hlY2sgaWYgY29kZSBwb2ludCBpcyBpbiB0aGUgY29tbW9uIGFsbG93ZWRcbiAgICAgICAgLy9yYW5nZSAoQVNDSUkgYWxwaGFudW1lcmljLCB3aGl0ZXNwYWNlcywgYmlnIGNodW5rIG9mIEJNUClcbiAgICAgICAgLy9iZWZvcmUgZ29pbmcgaW50byBkZXRhaWxlZCBwZXJmb3JtYW5jZSBjb3N0IHZhbGlkYXRpb24uXG4gICAgICAgIGNvbnN0IGlzQ29tbW9uVmFsaWRSYW5nZSA9XG4gICAgICAgICAgICAoY3AgPiAweDFmICYmIGNwIDwgMHg3ZikgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLkNBUlJJQUdFX1JFVFVSTiB8fCAoY3AgPiAweDlmICYmIGNwIDwgMHhmZGQwKTtcblxuICAgICAgICBpZiAoIWlzQ29tbW9uVmFsaWRSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tGb3JQcm9ibGVtYXRpY0NoYXJhY3RlcnMoY3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNwO1xuICAgIH1cblxuICAgIF9jaGVja0ZvclByb2JsZW1hdGljQ2hhcmFjdGVycyhjcCkge1xuICAgICAgICBpZiAodW5pY29kZS5pc0NvbnRyb2xDb2RlUG9pbnQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmNvbnRyb2xDaGFyYWN0ZXJJbklucHV0U3RyZWFtKTtcbiAgICAgICAgfSBlbHNlIGlmICh1bmljb2RlLmlzVW5kZWZpbmVkQ29kZVBvaW50KGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5ub25jaGFyYWN0ZXJJbklucHV0U3RyZWFtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHJlYXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcyA9PT0gdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLmdhcFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5wb3MtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByZXByb2Nlc3NvcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vL05PVEU6IHRoaXMgZmlsZSBjb250YWlucyBhdXRvLWdlbmVyYXRlZCBhcnJheSBtYXBwZWQgcmFkaXggdHJlZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBuYW1lZCBlbnRpdHkgcmVmZXJlbmNlcyBjb25zdW1wdGlvblxuLy8oZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL2luaWt1bGluL3BhcnNlNS90cmVlL21hc3Rlci9zY3JpcHRzL2dlbmVyYXRlLW5hbWVkLWVudGl0eS1kYXRhL1JFQURNRS5tZClcbm1vZHVsZS5leHBvcnRzID0gbmV3IFVpbnQxNkFycmF5KFs0LDUyLDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTA2LDMwMyw0MTIsODEwLDE0MzIsMTcwMSwxNzk2LDE5ODcsMjExNCwyMzYwLDI0MjAsMjQ4NCwzMTcwLDMyNTEsNDE0MCw0MzkzLDQ1NzUsNDYxMCw1MTA2LDU1MTIsNTcyOCw2MTE3LDYyNzQsNjMxNSw2MzQ1LDY0MjcsNjUxNiw3MDAyLDc5MTAsODczMyw5MzIzLDk4NzAsMTAxNzAsMTA2MzEsMTA4OTMsMTEzMTgsMTEzODYsMTE0NjcsMTI3NzMsMTMwOTIsMTQ0NzQsMTQ5MjIsMTU0NDgsMTU1NDIsMTY0MTksMTc2NjYsMTgxNjYsMTg2MTEsMTkwMDQsMTkwOTUsMTkyOTgsMTkzOTcsNCwxNiw2OSw3Nyw5Nyw5OCw5OSwxMDIsMTAzLDEwOCwxMDksMTEwLDExMSwxMTIsMTE0LDExNSwxMTYsMTE3LDE0MCwxNTAsMTU4LDE2OSwxNzYsMTk0LDE5OSwyMTAsMjE2LDIyMiwyMjYsMjQyLDI1NiwyNjYsMjgzLDI5NCwxMDgsMTA1LDEwMyw1LDE5OCwxLDU5LDE0OCwxLDE5OCw4MCw1LDM4LDEsNTksMTU2LDEsMzgsOTksMTE3LDExNiwxMDEsNSwxOTMsMSw1OSwxNjcsMSwxOTMsMTE0LDEwMSwxMTgsMTAxLDU5LDEsMjU4LDQsMiwxMDUsMTIxLDE4MiwxOTEsMTE0LDk5LDUsMTk0LDEsNTksMTg5LDEsMTk0LDU5LDEsMTA0MCwxMTQsNTksMyw1NTM0OSw1NjU4MCwxMTQsOTcsMTE4LDEwMSw1LDE5MiwxLDU5LDIwOCwxLDE5MiwxMTIsMTA0LDk3LDU5LDEsOTEzLDk3LDk5LDExNCw1OSwxLDI1NiwxMDAsNTksMSwxMDgzNSw0LDIsMTAzLDExMiwyMzIsMjM3LDExMSwxMTAsNTksMSwyNjAsMTAyLDU5LDMsNTUzNDksNTY2MzIsMTEyLDEwOCwxMjEsNzAsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsNTksMSw4Mjg5LDEwNSwxMTAsMTAzLDUsMTk3LDEsNTksMjY0LDEsMTk3LDQsMiw5OSwxMTUsMjcyLDI3NywxMTQsNTksMyw1NTM0OSw1NjQ3NiwxMDUsMTAzLDExMCw1OSwxLDg3ODgsMTA1LDEwOCwxMDAsMTAxLDUsMTk1LDEsNTksMjkyLDEsMTk1LDEwOSwxMDgsNSwxOTYsMSw1OSwzMDEsMSwxOTYsNCw4LDk3LDk5LDEwMSwxMDIsMTExLDExNCwxMTUsMTE3LDMyMSwzNTAsMzU0LDM4MywzODgsMzk0LDQwMCw0MDUsNCwyLDk5LDExNCwzMjcsMzM2LDEwNywxMTUsMTA4LDk3LDExNSwxMDQsNTksMSw4NzI2LDQsMiwxMTgsMTE5LDM0MiwzNDUsNTksMSwxMDk4MywxMDEsMTAwLDU5LDEsODk2NiwxMjEsNTksMSwxMDQxLDQsMyw5OSwxMTQsMTE2LDM2MiwzNjksMzc5LDk3LDExNywxMTUsMTAxLDU5LDEsODc1NywxMTAsMTExLDExNywxMDgsMTA4LDEwNSwxMTUsNTksMSw4NDkyLDk3LDU5LDEsOTE0LDExNCw1OSwzLDU1MzQ5LDU2NTgxLDExMiwxMDIsNTksMyw1NTM0OSw1NjYzMywxMDEsMTE4LDEwMSw1OSwxLDcyOCw5OSwxMTQsNTksMSw4NDkyLDEwOSwxMTIsMTAxLDExMyw1OSwxLDg3ODIsNCwxNCw3Miw3OSw5Nyw5OSwxMDAsMTAxLDEwMiwxMDQsMTA1LDEwOCwxMTEsMTE0LDExNSwxMTcsNDQyLDQ0Nyw0NTYsNTA0LDU0Miw1NDcsNTY5LDU3Myw1NzcsNjE2LDY3OCw3ODQsNzkwLDc5Niw5OSwxMjEsNTksMSwxMDYzLDgwLDg5LDUsMTY5LDEsNTksNDU0LDEsMTY5LDQsMyw5OSwxMTIsMTIxLDQ2NCw0NzAsNDk3LDExNywxMTYsMTAxLDU5LDEsMjYyLDQsMiw1OSwxMDUsNDc2LDQ3OCwxLDg5MTQsMTE2LDk3LDEwOCw2OCwxMDUsMTAyLDEwMiwxMDEsMTE0LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsNjgsNTksMSw4NTE3LDEwOCwxMDEsMTIxLDExNSw1OSwxLDg0OTMsNCw0LDk3LDEwMSwxMDUsMTExLDUxNCw1MjAsNTMwLDUzNSwxMTQsMTExLDExMCw1OSwxLDI2OCwxMDAsMTA1LDEwOCw1LDE5OSwxLDU5LDUyOCwxLDE5OSwxMTQsOTksNTksMSwyNjQsMTEwLDEwNSwxMTAsMTE2LDU5LDEsODc1MiwxMTEsMTE2LDU5LDEsMjY2LDQsMiwxMDAsMTEwLDU1Myw1NjAsMTA1LDEwOCwxMDgsOTcsNTksMSwxODQsMTE2LDEwMSwxMTQsNjgsMTExLDExNiw1OSwxLDE4MywxMTQsNTksMSw4NDkzLDEwNSw1OSwxLDkzNSwxMTQsOTksMTA4LDEwMSw0LDQsNjgsNzcsODAsODQsNTkxLDU5Niw2MDMsNjA5LDExMSwxMTYsNTksMSw4ODU3LDEwNSwxMTAsMTE3LDExNSw1OSwxLDg4NTQsMTA4LDExNywxMTUsNTksMSw4ODUzLDEwNSwxMDksMTAxLDExNSw1OSwxLDg4NTUsMTExLDQsMiw5OSwxMTUsNjIzLDY0NiwxMDcsMTE5LDEwNSwxMTUsMTAxLDY3LDExMSwxMTAsMTE2LDExMSwxMTcsMTE0LDczLDExMCwxMTYsMTAxLDEwMywxMTQsOTcsMTA4LDU5LDEsODc1NCwxMDEsNjcsMTE3LDExNCwxMDgsMTIxLDQsMiw2OCw4MSw2NTgsNjcxLDExMSwxMTcsOTgsMTA4LDEwMSw4MSwxMTcsMTExLDExNiwxMDEsNTksMSw4MjIxLDExNywxMTEsMTE2LDEwMSw1OSwxLDgyMTcsNCw0LDEwOCwxMTAsMTEyLDExNyw2ODgsNzAxLDczNiw3NTMsMTExLDExMCw0LDIsNTksMTAxLDY5Niw2OTgsMSw4NzU5LDU5LDEsMTA4NjgsNCwzLDEwMywxMDUsMTE2LDcwOSw3MTcsNzIyLDExNCwxMTcsMTAxLDExMCwxMTYsNTksMSw4ODAxLDExMCwxMTYsNTksMSw4NzUxLDExMSwxMTcsMTE0LDczLDExMCwxMTYsMTAxLDEwMywxMTQsOTcsMTA4LDU5LDEsODc1MCw0LDIsMTAyLDExNCw3NDIsNzQ1LDU5LDEsODQ1MCwxMTEsMTAwLDExNyw5OSwxMTYsNTksMSw4NzIwLDExMCwxMTYsMTAxLDExNCw2NywxMDgsMTExLDk5LDEwNywxMTksMTA1LDExNSwxMDEsNjcsMTExLDExMCwxMTYsMTExLDExNywxMTQsNzMsMTEwLDExNiwxMDEsMTAzLDExNCw5NywxMDgsNTksMSw4NzU1LDExMSwxMTUsMTE1LDU5LDEsMTA3OTksOTksMTE0LDU5LDMsNTUzNDksNTY0NzgsMTEyLDQsMiw1OSw2Nyw4MDMsODA1LDEsODkxNSw5NywxMTIsNTksMSw4NzgxLDQsMTEsNjgsNzQsODMsOTAsOTcsOTksMTAxLDEwMiwxMDUsMTExLDExNSw4MzQsODUwLDg1NSw4NjAsODY1LDg4OCw5MDMsOTE2LDkyMSwxMDExLDE0MTUsNCwyLDU5LDExMSw4NDAsODQyLDEsODUxNywxMTYsMTE0LDk3LDEwNCwxMDAsNTksMSwxMDUxMyw5OSwxMjEsNTksMSwxMDI2LDk5LDEyMSw1OSwxLDEwMjksOTksMTIxLDU5LDEsMTAzOSw0LDMsMTAzLDExNCwxMTUsODczLDg3OSw4ODMsMTAzLDEwMSwxMTQsNTksMSw4MjI1LDExNCw1OSwxLDg2MDksMTA0LDExOCw1OSwxLDEwOTgwLDQsMiw5NywxMjEsODk0LDkwMCwxMTQsMTExLDExMCw1OSwxLDI3MCw1OSwxLDEwNDQsMTA4LDQsMiw1OSwxMTYsOTEwLDkxMiwxLDg3MTEsOTcsNTksMSw5MTYsMTE0LDU5LDMsNTUzNDksNTY1ODMsNCwyLDk3LDEwMiw5MjcsOTk4LDQsMiw5OSwxMDksOTMzLDk5MiwxMTQsMTA1LDExNiwxMDUsOTksOTcsMTA4LDQsNCw2NSw2OCw3MSw4NCw5NTAsOTU3LDk3OCw5ODUsOTksMTE3LDExNiwxMDEsNTksMSwxODAsMTExLDQsMiwxMTYsMTE3LDk2NCw5NjcsNTksMSw3MjksOTgsMTA4LDEwMSw2NSw5OSwxMTcsMTE2LDEwMSw1OSwxLDczMywxMTQsOTcsMTE4LDEwMSw1OSwxLDk2LDEwNSwxMDgsMTAwLDEwMSw1OSwxLDczMiwxMTEsMTEwLDEwMCw1OSwxLDg5MDAsMTAyLDEwMSwxMTQsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCw2OCw1OSwxLDg1MTgsNCw0LDExMiwxMTYsMTE3LDExOSwxMDIxLDEwMjYsMTA0OCwxMjQ5LDEwMiw1OSwzLDU1MzQ5LDU2NjM1LDQsMyw1OSw2OCw2OSwxMDM0LDEwMzYsMTA0MSwxLDE2OCwxMTEsMTE2LDU5LDEsODQxMiwxMTMsMTE3LDk3LDEwOCw1OSwxLDg3ODQsOTgsMTA4LDEwMSw0LDYsNjcsNjgsNzYsODIsODUsODYsMTA2NSwxMDgyLDExMDEsMTE4OSwxMjExLDEyMzYsMTExLDExMCwxMTYsMTExLDExNywxMTQsNzMsMTEwLDExNiwxMDEsMTAzLDExNCw5NywxMDgsNTksMSw4NzUxLDExMSw0LDIsMTE2LDExOSwxMDg5LDEwOTIsNTksMSwxNjgsMTEwLDY1LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NTksNCwyLDEwMSwxMTEsMTEwNywxMTQxLDEwMiwxMTYsNCwzLDY1LDgyLDg0LDExMTcsMTEyNCwxMTM2LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NTYsMTA1LDEwMywxMDQsMTE2LDY1LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NjAsMTAxLDEwMSw1OSwxLDEwOTgwLDExMCwxMDMsNCwyLDc2LDgyLDExNDksMTE3NywxMDEsMTAyLDExNiw0LDIsNjUsODIsMTE1OCwxMTY1LDExNCwxMTQsMTExLDExOSw1OSwxLDEwMjMyLDEwNSwxMDMsMTA0LDExNiw2NSwxMTQsMTE0LDExMSwxMTksNTksMSwxMDIzNCwxMDUsMTAzLDEwNCwxMTYsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsMTAyMzMsMTA1LDEwMywxMDQsMTE2LDQsMiw2NSw4NCwxMTk5LDEyMDYsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY1OCwxMDEsMTAxLDU5LDEsODg3MiwxMTIsNCwyLDY1LDY4LDEyMTgsMTIyNSwxMTQsMTE0LDExMSwxMTksNTksMSw4NjU3LDExMSwxMTksMTEwLDY1LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NjEsMTAxLDExNCwxMTYsMTA1LDk5LDk3LDEwOCw2Niw5NywxMTQsNTksMSw4NzQxLDExMCw0LDYsNjUsNjYsNzYsODIsODQsOTcsMTI2NCwxMjkyLDEyOTksMTM1MiwxMzkxLDE0MDgsMTE0LDExNCwxMTEsMTE5LDQsMyw1OSw2Niw4NSwxMjc2LDEyNzgsMTI4MywxLDg1OTUsOTcsMTE0LDU5LDEsMTA1MTUsMTEyLDY1LDExNCwxMTQsMTExLDExOSw1OSwxLDg2OTMsMTE0LDEwMSwxMTgsMTAxLDU5LDEsNzg1LDEwMSwxMDIsMTE2LDQsMyw4Miw4NCw4NiwxMzEwLDEzMjMsMTMzNCwxMDUsMTAzLDEwNCwxMTYsODYsMTAxLDk5LDExNiwxMTEsMTE0LDU5LDEsMTA1NzYsMTAxLDEwMSw4NiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU5MCwxMDEsOTksMTE2LDExMSwxMTQsNCwyLDU5LDY2LDEzNDUsMTM0NywxLDg2MzcsOTcsMTE0LDU5LDEsMTA1ODIsMTA1LDEwMywxMDQsMTE2LDQsMiw4NCw4NiwxMzYyLDEzNzMsMTAxLDEwMSw4NiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU5MSwxMDEsOTksMTE2LDExMSwxMTQsNCwyLDU5LDY2LDEzODQsMTM4NiwxLDg2NDEsOTcsMTE0LDU5LDEsMTA1ODMsMTAxLDEwMSw0LDIsNTksNjUsMTM5OSwxNDAxLDEsODg2OCwxMTQsMTE0LDExMSwxMTksNTksMSw4NjE1LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NTksNCwyLDk5LDExNiwxNDIxLDE0MjYsMTE0LDU5LDMsNTUzNDksNTY0NzksMTE0LDExMSwxMDcsNTksMSwyNzIsNCwxNiw3OCw4NCw5Nyw5OSwxMDAsMTAyLDEwMywxMDgsMTA5LDExMSwxMTIsMTEzLDExNSwxMTYsMTE3LDEyMCwxNDY2LDE0NzAsMTQ3OCwxNDg5LDE1MTUsMTUyMCwxNTI1LDE1MzYsMTU0NCwxNTkzLDE2MDksMTYxNywxNjUwLDE2NjQsMTY2OCwxNjc3LDcxLDU5LDEsMzMwLDcyLDUsMjA4LDEsNTksMTQ3NiwxLDIwOCw5OSwxMTcsMTE2LDEwMSw1LDIwMSwxLDU5LDE0ODcsMSwyMDEsNCwzLDk3LDEwNSwxMjEsMTQ5NywxNTAzLDE1MTIsMTE0LDExMSwxMTAsNTksMSwyODIsMTE0LDk5LDUsMjAyLDEsNTksMTUxMCwxLDIwMiw1OSwxLDEwNjksMTExLDExNiw1OSwxLDI3OCwxMTQsNTksMyw1NTM0OSw1NjU4NCwxMTQsOTcsMTE4LDEwMSw1LDIwMCwxLDU5LDE1MzQsMSwyMDAsMTAxLDEwOSwxMDEsMTEwLDExNiw1OSwxLDg3MTIsNCwyLDk3LDExMiwxNTUwLDE1NTUsOTksMTE0LDU5LDEsMjc0LDExNiwxMjEsNCwyLDgzLDg2LDE1NjMsMTU3NiwxMDksOTcsMTA4LDEwOCw4MywxMTMsMTE3LDk3LDExNCwxMDEsNTksMSw5NzIzLDEwMSwxMTQsMTIxLDgzLDEwOSw5NywxMDgsMTA4LDgzLDExMywxMTcsOTcsMTE0LDEwMSw1OSwxLDk2NDMsNCwyLDEwMywxMTIsMTU5OSwxNjA0LDExMSwxMTAsNTksMSwyODAsMTAyLDU5LDMsNTUzNDksNTY2MzYsMTE1LDEwNSwxMDgsMTExLDExMCw1OSwxLDkxNywxMTcsNCwyLDk3LDEwNSwxNjI0LDE2NDAsMTA4LDQsMiw1OSw4NCwxNjMxLDE2MzMsMSwxMDg2OSwxMDUsMTA4LDEwMCwxMDEsNTksMSw4NzcwLDEwOCwxMDUsOTgsMTE0LDEwNSwxMTcsMTA5LDU5LDEsODY1Miw0LDIsOTksMTA1LDE2NTYsMTY2MCwxMTQsNTksMSw4NDk2LDEwOSw1OSwxLDEwODY3LDk3LDU5LDEsOTE5LDEwOSwxMDgsNSwyMDMsMSw1OSwxNjc1LDEsMjAzLDQsMiwxMDUsMTEyLDE2ODMsMTY4OSwxMTUsMTE2LDExNSw1OSwxLDg3MDcsMTExLDExMCwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDY5LDU5LDEsODUxOSw0LDUsOTksMTAyLDEwNSwxMTEsMTE1LDE3MTMsMTcxNywxNzIyLDE3NjIsMTc5MSwxMjEsNTksMSwxMDYwLDExNCw1OSwzLDU1MzQ5LDU2NTg1LDEwOCwxMDgsMTAxLDEwMCw0LDIsODMsODYsMTczMiwxNzQ1LDEwOSw5NywxMDgsMTA4LDgzLDExMywxMTcsOTcsMTE0LDEwMSw1OSwxLDk3MjQsMTAxLDExNCwxMjEsODMsMTA5LDk3LDEwOCwxMDgsODMsMTEzLDExNyw5NywxMTQsMTAxLDU5LDEsOTY0Miw0LDMsMTEyLDExNCwxMTcsMTc3MCwxNzc1LDE3ODEsMTAyLDU5LDMsNTUzNDksNTY2MzcsNjUsMTA4LDEwOCw1OSwxLDg3MDQsMTE0LDEwNSwxMDEsMTE0LDExNiwxMTQsMTAyLDU5LDEsODQ5Nyw5OSwxMTQsNTksMSw4NDk3LDQsMTIsNzQsODQsOTcsOTgsOTksMTAwLDEwMiwxMDMsMTExLDExNCwxMTUsMTE2LDE4MjIsMTgyNywxODM0LDE4NDgsMTg1NSwxODc3LDE4ODIsMTg4NywxODkwLDE4OTYsMTk3OCwxOTg0LDk5LDEyMSw1OSwxLDEwMjcsNSw2MiwxLDU5LDE4MzIsMSw2MiwxMDksMTA5LDk3LDQsMiw1OSwxMDAsMTg0MywxODQ1LDEsOTE1LDU5LDEsOTg4LDExNCwxMDEsMTE4LDEwMSw1OSwxLDI4Niw0LDMsMTAxLDEwNSwxMjEsMTg2MywxODY5LDE4NzQsMTAwLDEwNSwxMDgsNTksMSwyOTAsMTE0LDk5LDU5LDEsMjg0LDU5LDEsMTA0MywxMTEsMTE2LDU5LDEsMjg4LDExNCw1OSwzLDU1MzQ5LDU2NTg2LDU5LDEsODkyMSwxMTIsMTAyLDU5LDMsNTUzNDksNTY2MzgsMTAxLDk3LDExNiwxMDEsMTE0LDQsNiw2OSw3MCw3MSw3Niw4Myw4NCwxOTE1LDE5MzMsMTk0NCwxOTUzLDE5NTksMTk3MSwxMTMsMTE3LDk3LDEwOCw0LDIsNTksNzYsMTkyNSwxOTI3LDEsODgwNSwxMDEsMTE1LDExNSw1OSwxLDg5MjMsMTE3LDEwOCwxMDgsNjksMTEzLDExNyw5NywxMDgsNTksMSw4ODA3LDExNCwxMDEsOTcsMTE2LDEwMSwxMTQsNTksMSwxMDkxNCwxMDEsMTE1LDExNSw1OSwxLDg4MjMsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMSwxMDg3OCwxMDUsMTA4LDEwMCwxMDEsNTksMSw4ODE5LDk5LDExNCw1OSwzLDU1MzQ5LDU2NDgyLDU5LDEsODgxMSw0LDgsNjUsOTcsOTksMTAyLDEwNSwxMTEsMTE1LDExNywyMDA1LDIwMTIsMjAyNiwyMDMyLDIwMzYsMjA0OSwyMDczLDIwODksODIsNjgsOTksMTIxLDU5LDEsMTA2Niw0LDIsOTksMTE2LDIwMTgsMjAyMywxMDEsMTA3LDU5LDEsNzExLDU5LDEsOTQsMTA1LDExNCw5OSw1OSwxLDI5MiwxMTQsNTksMSw4NDYwLDEwOCw5OCwxMDEsMTE0LDExNiw4MywxMTIsOTcsOTksMTAxLDU5LDEsODQ1OSw0LDIsMTEyLDExNCwyMDU1LDIwNTksMTAyLDU5LDEsODQ2MSwxMDUsMTIyLDExMSwxMTAsMTE2LDk3LDEwOCw3NiwxMDUsMTEwLDEwMSw1OSwxLDk0NzIsNCwyLDk5LDExNiwyMDc5LDIwODMsMTE0LDU5LDEsODQ1OSwxMTQsMTExLDEwNyw1OSwxLDI5NCwxMDksMTEyLDQsMiw2OCw2OSwyMDk3LDIxMDcsMTExLDExOSwxMTAsNzIsMTE3LDEwOSwxMTIsNTksMSw4NzgyLDExMywxMTcsOTcsMTA4LDU5LDEsODc4Myw0LDE0LDY5LDc0LDc5LDk3LDk5LDEwMCwxMDIsMTAzLDEwOSwxMTAsMTExLDExNSwxMTYsMTE3LDIxNDQsMjE0OSwyMTU1LDIxNjAsMjE3MSwyMTg5LDIxOTQsMjE5OCwyMjA5LDIyNDUsMjMwNywyMzI5LDIzMzQsMjM0MSw5OSwxMjEsNTksMSwxMDQ1LDEwOCwxMDUsMTAzLDU5LDEsMzA2LDk5LDEyMSw1OSwxLDEwMjUsOTksMTE3LDExNiwxMDEsNSwyMDUsMSw1OSwyMTY5LDEsMjA1LDQsMiwxMDUsMTIxLDIxNzcsMjE4NiwxMTQsOTksNSwyMDYsMSw1OSwyMTg0LDEsMjA2LDU5LDEsMTA0OCwxMTEsMTE2LDU5LDEsMzA0LDExNCw1OSwxLDg0NjUsMTE0LDk3LDExOCwxMDEsNSwyMDQsMSw1OSwyMjA3LDEsMjA0LDQsMyw1OSw5NywxMTIsMjIxNywyMjE5LDIyMzgsMSw4NDY1LDQsMiw5OSwxMDMsMjIyNSwyMjI5LDExNCw1OSwxLDI5OCwxMDUsMTEwLDk3LDExNCwxMjEsNzMsNTksMSw4NTIwLDEwOCwxMDUsMTAxLDExNSw1OSwxLDg2NTgsNCwyLDExNiwxMTgsMjI1MSwyMjgxLDQsMiw1OSwxMDEsMjI1NywyMjU5LDEsODc0OCw0LDIsMTAzLDExNCwyMjY1LDIyNzEsMTE0LDk3LDEwOCw1OSwxLDg3NDcsMTE1LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsNTksMSw4ODk4LDEwNSwxMTUsMTA1LDk4LDEwOCwxMDEsNCwyLDY3LDg0LDIyOTMsMjMwMCwxMTEsMTA5LDEwOSw5Nyw1OSwxLDgyOTEsMTA1LDEwOSwxMDEsMTE1LDU5LDEsODI5MCw0LDMsMTAzLDExMiwxMTYsMjMxNSwyMzIwLDIzMjUsMTExLDExMCw1OSwxLDMwMiwxMDIsNTksMyw1NTM0OSw1NjY0MCw5Nyw1OSwxLDkyMSw5OSwxMTQsNTksMSw4NDY0LDEwNSwxMDgsMTAwLDEwMSw1OSwxLDI5Niw0LDIsMTA3LDEwOSwyMzQ3LDIzNTIsOTksMTIxLDU5LDEsMTAzMCwxMDgsNSwyMDcsMSw1OSwyMzU4LDEsMjA3LDQsNSw5OSwxMDIsMTExLDExNSwxMTcsMjM3MiwyMzg2LDIzOTEsMjM5NywyNDE0LDQsMiwxMDUsMTIxLDIzNzgsMjM4MywxMTQsOTksNTksMSwzMDgsNTksMSwxMDQ5LDExNCw1OSwzLDU1MzQ5LDU2NTg5LDExMiwxMDIsNTksMyw1NTM0OSw1NjY0MSw0LDIsOTksMTAxLDI0MDMsMjQwOCwxMTQsNTksMyw1NTM0OSw1NjQ4NSwxMTQsOTksMTIxLDU5LDEsMTAzMiwxMDcsOTksMTIxLDU5LDEsMTAyOCw0LDcsNzIsNzQsOTcsOTksMTAyLDExMSwxMTUsMjQzNiwyNDQxLDI0NDYsMjQ1MiwyNDY3LDI0NzIsMjQ3OCw5OSwxMjEsNTksMSwxMDYxLDk5LDEyMSw1OSwxLDEwMzYsMTEyLDExMiw5Nyw1OSwxLDkyMiw0LDIsMTAxLDEyMSwyNDU4LDI0NjQsMTAwLDEwNSwxMDgsNTksMSwzMTAsNTksMSwxMDUwLDExNCw1OSwzLDU1MzQ5LDU2NTkwLDExMiwxMDIsNTksMyw1NTM0OSw1NjY0Miw5OSwxMTQsNTksMyw1NTM0OSw1NjQ4Niw0LDExLDc0LDg0LDk3LDk5LDEwMSwxMDIsMTA4LDEwOSwxMTEsMTE1LDExNiwyNTA4LDI1MTMsMjUyMCwyNTYyLDI1ODUsMjk4MSwyOTg2LDMwMDQsMzAxMSwzMTQ2LDMxNjcsOTksMTIxLDU5LDEsMTAzMyw1LDYwLDEsNTksMjUxOCwxLDYwLDQsNSw5OSwxMDksMTEwLDExMiwxMTQsMjUzMiwyNTM4LDI1NDQsMjU0OCwyNTU4LDExNywxMTYsMTAxLDU5LDEsMzEzLDk4LDEwMCw5Nyw1OSwxLDkyMywxMDMsNTksMSwxMDIxOCwxMDgsOTcsOTksMTAxLDExNiwxMTQsMTAyLDU5LDEsODQ2NiwxMTQsNTksMSw4NjA2LDQsMyw5NywxMDEsMTIxLDI1NzAsMjU3NiwyNTgyLDExNCwxMTEsMTEwLDU5LDEsMzE3LDEwMCwxMDUsMTA4LDU5LDEsMzE1LDU5LDEsMTA1MSw0LDIsMTAyLDExNSwyNTkxLDI5MDcsMTE2LDQsMTAsNjUsNjcsNjgsNzAsODIsODQsODUsODYsOTcsMTE0LDI2MTQsMjY2MywyNjcyLDI3MjgsMjczNSwyNzYwLDI4MjAsMjg3MCwyODg4LDI4OTUsNCwyLDExMCwxMTQsMjYyMCwyNjMzLDEwMywxMDgsMTAxLDY2LDExNCw5Nyw5OSwxMDcsMTAxLDExNiw1OSwxLDEwMjE2LDExNCwxMTEsMTE5LDQsMyw1OSw2Niw4MiwyNjQ0LDI2NDYsMjY1MSwxLDg1OTIsOTcsMTE0LDU5LDEsODY3NiwxMDUsMTAzLDEwNCwxMTYsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY0NiwxMDEsMTA1LDEwOCwxMDUsMTEwLDEwMyw1OSwxLDg5NjgsMTExLDQsMiwxMTcsMTE5LDI2NzksMjY5Miw5OCwxMDgsMTAxLDY2LDExNCw5Nyw5OSwxMDcsMTAxLDExNiw1OSwxLDEwMjE0LDExMCw0LDIsODQsODYsMjY5OSwyNzEwLDEwMSwxMDEsODYsMTAxLDk5LDExNiwxMTEsMTE0LDU5LDEsMTA1OTMsMTAxLDk5LDExNiwxMTEsMTE0LDQsMiw1OSw2NiwyNzIxLDI3MjMsMSw4NjQzLDk3LDExNCw1OSwxLDEwNTg1LDEwOCwxMTEsMTExLDExNCw1OSwxLDg5NzAsMTA1LDEwMywxMDQsMTE2LDQsMiw2NSw4NiwyNzQ1LDI3NTIsMTE0LDExNCwxMTEsMTE5LDU5LDEsODU5NiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU3NCw0LDIsMTAxLDExNCwyNzY2LDI3OTIsMTAxLDQsMyw1OSw2NSw4NiwyNzc1LDI3NzcsMjc4NCwxLDg4NjcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYxMiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU4NiwxMDUsOTcsMTEwLDEwMywxMDgsMTAxLDQsMyw1OSw2Niw2OSwyODA2LDI4MDgsMjgxMywxLDg4ODIsOTcsMTE0LDU5LDEsMTA3MDMsMTEzLDExNyw5NywxMDgsNTksMSw4ODg0LDExMiw0LDMsNjgsODQsODYsMjgyOSwyODQxLDI4NTIsMTExLDExOSwxMTAsODYsMTAxLDk5LDExNiwxMTEsMTE0LDU5LDEsMTA1NzcsMTAxLDEwMSw4NiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU5MiwxMDEsOTksMTE2LDExMSwxMTQsNCwyLDU5LDY2LDI4NjMsMjg2NSwxLDg2MzksOTcsMTE0LDU5LDEsMTA1ODQsMTAxLDk5LDExNiwxMTEsMTE0LDQsMiw1OSw2NiwyODgxLDI4ODMsMSw4NjM2LDk3LDExNCw1OSwxLDEwNTc4LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NTYsMTA1LDEwMywxMDQsMTE2LDk3LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NjAsMTE1LDQsNiw2OSw3MCw3MSw3Niw4Myw4NCwyOTIyLDI5MzYsMjk0NywyOTU2LDI5NjIsMjk3NCwxMTMsMTE3LDk3LDEwOCw3MSwxMTQsMTAxLDk3LDExNiwxMDEsMTE0LDU5LDEsODkyMiwxMTcsMTA4LDEwOCw2OSwxMTMsMTE3LDk3LDEwOCw1OSwxLDg4MDYsMTE0LDEwMSw5NywxMTYsMTAxLDExNCw1OSwxLDg4MjIsMTAxLDExNSwxMTUsNTksMSwxMDkxMywxMDgsOTcsMTEwLDExNiw2OSwxMTMsMTE3LDk3LDEwOCw1OSwxLDEwODc3LDEwNSwxMDgsMTAwLDEwMSw1OSwxLDg4MTgsMTE0LDU5LDMsNTUzNDksNTY1OTEsNCwyLDU5LDEwMSwyOTkyLDI5OTQsMSw4OTIwLDEwMiwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY2NiwxMDUsMTAwLDExMSwxMTYsNTksMSwzMTksNCwzLDExMCwxMTIsMTE5LDMwMTksMzExMCwzMTE1LDEwMyw0LDQsNzYsODIsMTA4LDExNCwzMDMwLDMwNTgsMzA3MCwzMDk4LDEwMSwxMDIsMTE2LDQsMiw2NSw4MiwzMDM5LDMwNDYsMTE0LDExNCwxMTEsMTE5LDU5LDEsMTAyMjksMTA1LDEwMywxMDQsMTE2LDY1LDExNCwxMTQsMTExLDExOSw1OSwxLDEwMjMxLDEwNSwxMDMsMTA0LDExNiw2NSwxMTQsMTE0LDExMSwxMTksNTksMSwxMDIzMCwxMDEsMTAyLDExNiw0LDIsOTcsMTE0LDMwNzksMzA4NiwxMTQsMTE0LDExMSwxMTksNTksMSwxMDIzMiwxMDUsMTAzLDEwNCwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsMTAyMzQsMTA1LDEwMywxMDQsMTE2LDk3LDExNCwxMTQsMTExLDExOSw1OSwxLDEwMjMzLDEwMiw1OSwzLDU1MzQ5LDU2NjQzLDEwMSwxMTQsNCwyLDc2LDgyLDMxMjMsMzEzNCwxMDEsMTAyLDExNiw2NSwxMTQsMTE0LDExMSwxMTksNTksMSw4NjAxLDEwNSwxMDMsMTA0LDExNiw2NSwxMTQsMTE0LDExMSwxMTksNTksMSw4NjAwLDQsMyw5OSwxMDQsMTE2LDMxNTQsMzE1OCwzMTYxLDExNCw1OSwxLDg0NjYsNTksMSw4NjI0LDExNCwxMTEsMTA3LDU5LDEsMzIxLDU5LDEsODgxMCw0LDgsOTcsOTksMTAxLDEwMiwxMDUsMTExLDExNSwxMTcsMzE4OCwzMTkyLDMxOTYsMzIyMiwzMjI3LDMyMzcsMzI0MywzMjQ4LDExMiw1OSwxLDEwNTAxLDEyMSw1OSwxLDEwNTIsNCwyLDEwMCwxMDgsMzIwMiwzMjEzLDEwNSwxMTcsMTA5LDgzLDExMiw5Nyw5OSwxMDEsNTksMSw4Mjg3LDEwOCwxMDUsMTEwLDExNiwxMTQsMTAyLDU5LDEsODQ5OSwxMTQsNTksMyw1NTM0OSw1NjU5MiwxMTAsMTE3LDExNSw4MCwxMDgsMTE3LDExNSw1OSwxLDg3MjMsMTEyLDEwMiw1OSwzLDU1MzQ5LDU2NjQ0LDk5LDExNCw1OSwxLDg0OTksNTksMSw5MjQsNCw5LDc0LDk3LDk5LDEwMSwxMDIsMTExLDExNSwxMTYsMTE3LDMyNzEsMzI3NiwzMjgzLDMzMDYsMzQyMiwzNDI3LDQxMjAsNDEyNiw0MTM3LDk5LDEyMSw1OSwxLDEwMzQsOTksMTE3LDExNiwxMDEsNTksMSwzMjMsNCwzLDk3LDEwMSwxMjEsMzI5MSwzMjk3LDMzMDMsMTE0LDExMSwxMTAsNTksMSwzMjcsMTAwLDEwNSwxMDgsNTksMSwzMjUsNTksMSwxMDUzLDQsMywxMDMsMTE1LDExOSwzMzE0LDMzODAsMzQxNSw5NywxMTYsMTA1LDExOCwxMDEsNCwzLDc3LDg0LDg2LDMzMjcsMzM0MCwzMzY1LDEwMSwxMDAsMTA1LDExNywxMDksODMsMTEyLDk3LDk5LDEwMSw1OSwxLDgyMDMsMTA0LDEwNSw0LDIsOTksMTEwLDMzNDgsMzM1NywxMDcsODMsMTEyLDk3LDk5LDEwMSw1OSwxLDgyMDMsODMsMTEyLDk3LDk5LDEwMSw1OSwxLDgyMDMsMTAxLDExNCwxMjEsODQsMTA0LDEwNSwxMTAsODMsMTEyLDk3LDk5LDEwMSw1OSwxLDgyMDMsMTE2LDEwMSwxMDAsNCwyLDcxLDc2LDMzODksMzQwNSwxMTQsMTAxLDk3LDExNiwxMDEsMTE0LDcxLDExNCwxMDEsOTcsMTE2LDEwMSwxMTQsNTksMSw4ODExLDEwMSwxMTUsMTE1LDc2LDEwMSwxMTUsMTE1LDU5LDEsODgxMCw3NiwxMDUsMTEwLDEwMSw1OSwxLDEwLDExNCw1OSwzLDU1MzQ5LDU2NTkzLDQsNCw2NiwxMTAsMTEyLDExNiwzNDM3LDM0NDQsMzQ2MCwzNDY0LDExNCwxMDEsOTcsMTA3LDU5LDEsODI4OCw2NiwxMTQsMTAxLDk3LDEwNywxMDUsMTEwLDEwMyw4MywxMTIsOTcsOTksMTAxLDU5LDEsMTYwLDEwMiw1OSwxLDg0NjksNCwxMyw1OSw2Nyw2OCw2OSw3MSw3Miw3Niw3OCw4MCw4Miw4Myw4NCw4NiwzNDkyLDM0OTQsMzUxNywzNTM2LDM1NzgsMzY1NywzNjg1LDM3ODQsMzgyMywzODYwLDM5MTUsNDA2Niw0MTA3LDEsMTA5ODgsNCwyLDExMSwxMTcsMzUwMCwzNTEwLDExMCwxMDMsMTE0LDExNywxMDEsMTEwLDExNiw1OSwxLDg4MDIsMTEyLDY3LDk3LDExMiw1OSwxLDg4MTMsMTExLDExNyw5OCwxMDgsMTAxLDg2LDEwMSwxMTQsMTE2LDEwNSw5OSw5NywxMDgsNjYsOTcsMTE0LDU5LDEsODc0Miw0LDMsMTA4LDExMywxMjAsMzU0NCwzNTUyLDM1NzEsMTAxLDEwOSwxMDEsMTEwLDExNiw1OSwxLDg3MTMsMTE3LDk3LDEwOCw0LDIsNTksODQsMzU2MSwzNTYzLDEsODgwMCwxMDUsMTA4LDEwMCwxMDEsNTksMyw4NzcwLDgyNCwxMDUsMTE1LDExNiwxMTUsNTksMSw4NzA4LDExNCwxMDEsOTcsMTE2LDEwMSwxMTQsNCw3LDU5LDY5LDcwLDcxLDc2LDgzLDg0LDM2MDAsMzYwMiwzNjA5LDM2MjEsMzYzMSwzNjM3LDM2NTAsMSw4ODE1LDExMywxMTcsOTcsMTA4LDU5LDEsODgxNywxMTcsMTA4LDEwOCw2OSwxMTMsMTE3LDk3LDEwOCw1OSwzLDg4MDcsODI0LDExNCwxMDEsOTcsMTE2LDEwMSwxMTQsNTksMyw4ODExLDgyNCwxMDEsMTE1LDExNSw1OSwxLDg4MjUsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMywxMDg3OCw4MjQsMTA1LDEwOCwxMDAsMTAxLDU5LDEsODgyMSwxMTcsMTA5LDExMiw0LDIsNjgsNjksMzY2NiwzNjc3LDExMSwxMTksMTEwLDcyLDExNywxMDksMTEyLDU5LDMsODc4Miw4MjQsMTEzLDExNyw5NywxMDgsNTksMyw4NzgzLDgyNCwxMDEsNCwyLDEwMiwxMTUsMzY5MiwzNzI0LDExNiw4NCwxMTQsMTA1LDk3LDExMCwxMDMsMTA4LDEwMSw0LDMsNTksNjYsNjksMzcwOSwzNzExLDM3MTcsMSw4OTM4LDk3LDExNCw1OSwzLDEwNzAzLDgyNCwxMTMsMTE3LDk3LDEwOCw1OSwxLDg5NDAsMTE1LDQsNiw1OSw2OSw3MSw3Niw4Myw4NCwzNzM5LDM3NDEsMzc0OCwzNzU3LDM3NjQsMzc3NywxLDg4MTQsMTEzLDExNyw5NywxMDgsNTksMSw4ODE2LDExNCwxMDEsOTcsMTE2LDEwMSwxMTQsNTksMSw4ODI0LDEwMSwxMTUsMTE1LDU5LDMsODgxMCw4MjQsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMywxMDg3Nyw4MjQsMTA1LDEwOCwxMDAsMTAxLDU5LDEsODgyMCwxMDEsMTE1LDExNiwxMDEsMTAwLDQsMiw3MSw3NiwzNzk1LDM4MTIsMTE0LDEwMSw5NywxMTYsMTAxLDExNCw3MSwxMTQsMTAxLDk3LDExNiwxMDEsMTE0LDU5LDMsMTA5MTQsODI0LDEwMSwxMTUsMTE1LDc2LDEwMSwxMTUsMTE1LDU5LDMsMTA5MTMsODI0LDExNCwxMDEsOTksMTAxLDEwMCwxMDEsMTE1LDQsMyw1OSw2OSw4MywzODM4LDM4NDAsMzg0OCwxLDg4MzIsMTEzLDExNyw5NywxMDgsNTksMywxMDkyNyw4MjQsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMSw4OTI4LDQsMiwxMDEsMTA1LDM4NjYsMzg4MSwxMTgsMTAxLDExNCwxMTUsMTAxLDY5LDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDU5LDEsODcxNiwxMDMsMTA0LDExNiw4NCwxMTQsMTA1LDk3LDExMCwxMDMsMTA4LDEwMSw0LDMsNTksNjYsNjksMzkwMCwzOTAyLDM5MDgsMSw4OTM5LDk3LDExNCw1OSwzLDEwNzA0LDgyNCwxMTMsMTE3LDk3LDEwOCw1OSwxLDg5NDEsNCwyLDExMywxMTcsMzkyMSwzOTczLDExNyw5NywxMTQsMTAxLDgzLDExNyw0LDIsOTgsMTEyLDM5MzMsMzk1MiwxMTUsMTAxLDExNiw0LDIsNTksNjksMzk0MiwzOTQ1LDMsODg0Nyw4MjQsMTEzLDExNyw5NywxMDgsNTksMSw4OTMwLDEwMSwxMTQsMTE1LDEwMSwxMTYsNCwyLDU5LDY5LDM5NjMsMzk2NiwzLDg4NDgsODI0LDExMywxMTcsOTcsMTA4LDU5LDEsODkzMSw0LDMsOTgsOTksMTEyLDM5ODEsNDAwMCw0MDQ1LDExNSwxMDEsMTE2LDQsMiw1OSw2OSwzOTkwLDM5OTMsMyw4ODM0LDg0MDIsMTEzLDExNyw5NywxMDgsNTksMSw4ODQwLDk5LDEwMSwxMDEsMTAwLDExNSw0LDQsNTksNjksODMsODQsNDAxNSw0MDE3LDQwMjUsNDAzNywxLDg4MzMsMTEzLDExNyw5NywxMDgsNTksMywxMDkyOCw4MjQsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMSw4OTI5LDEwNSwxMDgsMTAwLDEwMSw1OSwzLDg4MzEsODI0LDEwMSwxMTQsMTE1LDEwMSwxMTYsNCwyLDU5LDY5LDQwNTYsNDA1OSwzLDg4MzUsODQwMiwxMTMsMTE3LDk3LDEwOCw1OSwxLDg4NDEsMTA1LDEwOCwxMDAsMTAxLDQsNCw1OSw2OSw3MCw4NCw0MDgwLDQwODIsNDA4OSw0MTAwLDEsODc2OSwxMTMsMTE3LDk3LDEwOCw1OSwxLDg3NzIsMTE3LDEwOCwxMDgsNjksMTEzLDExNyw5NywxMDgsNTksMSw4Nzc1LDEwNSwxMDgsMTAwLDEwMSw1OSwxLDg3NzcsMTAxLDExNCwxMTYsMTA1LDk5LDk3LDEwOCw2Niw5NywxMTQsNTksMSw4NzQwLDk5LDExNCw1OSwzLDU1MzQ5LDU2NDg5LDEwNSwxMDgsMTAwLDEwMSw1LDIwOSwxLDU5LDQxMzUsMSwyMDksNTksMSw5MjUsNCwxNCw2OSw5Nyw5OSwxMDAsMTAyLDEwMywxMDksMTExLDExMiwxMTQsMTE1LDExNiwxMTcsMTE4LDQxNzAsNDE3Niw0MTg3LDQyMDUsNDIxMiw0MjE3LDQyMjgsNDI1Myw0MjU5LDQyOTIsNDI5NSw0MzE2LDQzMzcsNDM0NiwxMDgsMTA1LDEwMyw1OSwxLDMzOCw5OSwxMTcsMTE2LDEwMSw1LDIxMSwxLDU5LDQxODUsMSwyMTEsNCwyLDEwNSwxMjEsNDE5Myw0MjAyLDExNCw5OSw1LDIxMiwxLDU5LDQyMDAsMSwyMTIsNTksMSwxMDU0LDk4LDEwOCw5Nyw5OSw1OSwxLDMzNiwxMTQsNTksMyw1NTM0OSw1NjU5NCwxMTQsOTcsMTE4LDEwMSw1LDIxMCwxLDU5LDQyMjYsMSwyMTAsNCwzLDk3LDEwMSwxMDUsNDIzNiw0MjQxLDQyNDYsOTksMTE0LDU5LDEsMzMyLDEwMyw5Nyw1OSwxLDkzNyw5OSwxMTQsMTExLDExMCw1OSwxLDkyNywxMTIsMTAyLDU5LDMsNTUzNDksNTY2NDYsMTAxLDExMCw2NywxMTcsMTE0LDEwOCwxMjEsNCwyLDY4LDgxLDQyNzIsNDI4NSwxMTEsMTE3LDk4LDEwOCwxMDEsODEsMTE3LDExMSwxMTYsMTAxLDU5LDEsODIyMCwxMTcsMTExLDExNiwxMDEsNTksMSw4MjE2LDU5LDEsMTA4MzYsNCwyLDk5LDEwOCw0MzAxLDQzMDYsMTE0LDU5LDMsNTUzNDksNTY0OTAsOTcsMTE1LDEwNCw1LDIxNiwxLDU5LDQzMTQsMSwyMTYsMTA1LDQsMiwxMDgsMTA5LDQzMjMsNDMzMiwxMDAsMTAxLDUsMjEzLDEsNTksNDMzMCwxLDIxMywxMDEsMTE1LDU5LDEsMTA4MDcsMTA5LDEwOCw1LDIxNCwxLDU5LDQzNDQsMSwyMTQsMTAxLDExNCw0LDIsNjYsODAsNDM1NCw0MzgwLDQsMiw5NywxMTQsNDM2MCw0MzY0LDExNCw1OSwxLDgyNTQsOTcsOTksNCwyLDEwMSwxMDcsNDM3Miw0Mzc1LDU5LDEsOTE4MiwxMDEsMTE2LDU5LDEsOTE0MCw5NywxMTQsMTAxLDExMCwxMTYsMTA0LDEwMSwxMTUsMTA1LDExNSw1OSwxLDkxODAsNCw5LDk3LDk5LDEwMiwxMDQsMTA1LDEwOCwxMTEsMTE0LDExNSw0NDEzLDQ0MjIsNDQyNiw0NDMxLDQ0MzUsNDQzOCw0NDQ4LDQ0NzEsNDU2MSwxMTQsMTE2LDEwNSw5NywxMDgsNjgsNTksMSw4NzA2LDEyMSw1OSwxLDEwNTUsMTE0LDU5LDMsNTUzNDksNTY1OTUsMTA1LDU5LDEsOTM0LDU5LDEsOTI4LDExNywxMTUsNzcsMTA1LDExMCwxMTcsMTE1LDU5LDEsMTc3LDQsMiwxMDUsMTEyLDQ0NTQsNDQ2NywxMTAsOTksOTcsMTE0LDEwMSwxMTIsMTA4LDk3LDExMCwxMDEsNTksMSw4NDYwLDEwMiw1OSwxLDg0NzMsNCw0LDU5LDEwMSwxMDUsMTExLDQ0ODEsNDQ4Myw0NTI2LDQ1MzEsMSwxMDkzOSw5OSwxMDEsMTAwLDEwMSwxMTUsNCw0LDU5LDY5LDgzLDg0LDQ0OTgsNDUwMCw0NTA3LDQ1MTksMSw4ODI2LDExMywxMTcsOTcsMTA4LDU5LDEsMTA5MjcsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMSw4ODI4LDEwNSwxMDgsMTAwLDEwMSw1OSwxLDg4MzAsMTA5LDEwMSw1OSwxLDgyNDMsNCwyLDEwMCwxMTIsNDUzNyw0NTQzLDExNyw5OSwxMTYsNTksMSw4NzE5LDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDQsMiw1OSw5Nyw0NTU1LDQ1NTcsMSw4NzU5LDEwOCw1OSwxLDg3MzMsNCwyLDk5LDEwNSw0NTY3LDQ1NzIsMTE0LDU5LDMsNTUzNDksNTY0OTEsNTksMSw5MzYsNCw0LDg1LDEwMiwxMTEsMTE1LDQ1ODUsNDU5NCw0NTk5LDQ2MDQsNzksODQsNSwzNCwxLDU5LDQ1OTIsMSwzNCwxMTQsNTksMyw1NTM0OSw1NjU5NiwxMTIsMTAyLDU5LDEsODQ3NCw5OSwxMTQsNTksMyw1NTM0OSw1NjQ5Miw0LDEyLDY2LDY5LDk3LDk5LDEwMSwxMDIsMTA0LDEwNSwxMTEsMTE0LDExNSwxMTcsNDYzNiw0NjQyLDQ2NTAsNDY4MSw0NzA0LDQ3NjMsNDc2Nyw0NzcxLDUwNDcsNTA2OSw1MDgxLDUwOTQsOTcsMTE0LDExNCw1OSwxLDEwNTEyLDcxLDUsMTc0LDEsNTksNDY0OCwxLDE3NCw0LDMsOTksMTEwLDExNCw0NjU4LDQ2NjQsNDY2OCwxMTcsMTE2LDEwMSw1OSwxLDM0MCwxMDMsNTksMSwxMDIxOSwxMTQsNCwyLDU5LDExNiw0Njc1LDQ2NzcsMSw4NjA4LDEwOCw1OSwxLDEwNTE4LDQsMyw5NywxMDEsMTIxLDQ2ODksNDY5NSw0NzAxLDExNCwxMTEsMTEwLDU5LDEsMzQ0LDEwMCwxMDUsMTA4LDU5LDEsMzQyLDU5LDEsMTA1Niw0LDIsNTksMTE4LDQ3MTAsNDcxMiwxLDg0NzYsMTAxLDExNCwxMTUsMTAxLDQsMiw2OSw4NSw0NzIyLDQ3NDgsNCwyLDEwOCwxMTMsNDcyOCw0NzM2LDEwMSwxMDksMTAxLDExMCwxMTYsNTksMSw4NzE1LDExNywxMDUsMTA4LDEwNSw5OCwxMTQsMTA1LDExNywxMDksNTksMSw4NjUxLDExMiw2OSwxMTMsMTE3LDEwNSwxMDgsMTA1LDk4LDExNCwxMDUsMTE3LDEwOSw1OSwxLDEwNjA3LDExNCw1OSwxLDg0NzYsMTExLDU5LDEsOTI5LDEwMywxMDQsMTE2LDQsOCw2NSw2Nyw2OCw3MCw4NCw4NSw4Niw5Nyw0NzkyLDQ4NDAsNDg0OSw0OTA1LDQ5MTIsNDk3Miw1MDIyLDUwNDAsNCwyLDExMCwxMTQsNDc5OCw0ODExLDEwMywxMDgsMTAxLDY2LDExNCw5Nyw5OSwxMDcsMTAxLDExNiw1OSwxLDEwMjE3LDExNCwxMTEsMTE5LDQsMyw1OSw2Niw3Niw0ODIyLDQ4MjQsNDgyOSwxLDg1OTQsOTcsMTE0LDU5LDEsODY3NywxMDEsMTAyLDExNiw2NSwxMTQsMTE0LDExMSwxMTksNTksMSw4NjQ0LDEwMSwxMDUsMTA4LDEwNSwxMTAsMTAzLDU5LDEsODk2OSwxMTEsNCwyLDExNywxMTksNDg1Niw0ODY5LDk4LDEwOCwxMDEsNjYsMTE0LDk3LDk5LDEwNywxMDEsMTE2LDU5LDEsMTAyMTUsMTEwLDQsMiw4NCw4Niw0ODc2LDQ4ODcsMTAxLDEwMSw4NiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU4OSwxMDEsOTksMTE2LDExMSwxMTQsNCwyLDU5LDY2LDQ4OTgsNDkwMCwxLDg2NDIsOTcsMTE0LDU5LDEsMTA1ODEsMTA4LDExMSwxMTEsMTE0LDU5LDEsODk3MSw0LDIsMTAxLDExNCw0OTE4LDQ5NDQsMTAxLDQsMyw1OSw2NSw4Niw0OTI3LDQ5MjksNDkzNiwxLDg4NjYsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYxNCwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU4NywxMDUsOTcsMTEwLDEwMywxMDgsMTAxLDQsMyw1OSw2Niw2OSw0OTU4LDQ5NjAsNDk2NSwxLDg4ODMsOTcsMTE0LDU5LDEsMTA3MDQsMTEzLDExNyw5NywxMDgsNTksMSw4ODg1LDExMiw0LDMsNjgsODQsODYsNDk4MSw0OTkzLDUwMDQsMTExLDExOSwxMTAsODYsMTAxLDk5LDExNiwxMTEsMTE0LDU5LDEsMTA1NzUsMTAxLDEwMSw4NiwxMDEsOTksMTE2LDExMSwxMTQsNTksMSwxMDU4OCwxMDEsOTksMTE2LDExMSwxMTQsNCwyLDU5LDY2LDUwMTUsNTAxNywxLDg2MzgsOTcsMTE0LDU5LDEsMTA1ODAsMTAxLDk5LDExNiwxMTEsMTE0LDQsMiw1OSw2Niw1MDMzLDUwMzUsMSw4NjQwLDk3LDExNCw1OSwxLDEwNTc5LDExNCwxMTQsMTExLDExOSw1OSwxLDg2NTgsNCwyLDExMiwxMTcsNTA1Myw1MDU3LDEwMiw1OSwxLDg0NzcsMTEwLDEwMCw3MywxMDksMTEyLDEwOCwxMDUsMTAxLDExNSw1OSwxLDEwNjA4LDEwNSwxMDMsMTA0LDExNiw5NywxMTQsMTE0LDExMSwxMTksNTksMSw4NjY3LDQsMiw5OSwxMDQsNTA4Nyw1MDkxLDExNCw1OSwxLDg0NzUsNTksMSw4NjI1LDEwOCwxMDEsNjgsMTAxLDEwOCw5NywxMjEsMTAxLDEwMCw1OSwxLDEwNzQwLDQsMTMsNzIsNzksOTcsOTksMTAyLDEwNCwxMDUsMTA5LDExMSwxMTMsMTE1LDExNiwxMTcsNTEzNCw1MTUwLDUxNTcsNTE2NCw1MTk4LDUyMDMsNTI1OSw1MjY1LDUyNzcsNTI4Myw1Mzc0LDUzODAsNTM4NSw0LDIsNjcsOTksNTE0MCw1MTQ2LDcyLDk5LDEyMSw1OSwxLDEwNjUsMTIxLDU5LDEsMTA2NCw3MCw4NCw5OSwxMjEsNTksMSwxMDY4LDk5LDExNywxMTYsMTAxLDU5LDEsMzQ2LDQsNSw1OSw5NywxMDEsMTA1LDEyMSw1MTc2LDUxNzgsNTE4NCw1MTkwLDUxOTUsMSwxMDk0MCwxMTQsMTExLDExMCw1OSwxLDM1MiwxMDAsMTA1LDEwOCw1OSwxLDM1MCwxMTQsOTksNTksMSwzNDgsNTksMSwxMDU3LDExNCw1OSwzLDU1MzQ5LDU2NTk4LDExMSwxMTQsMTE2LDQsNCw2OCw3Niw4Miw4NSw1MjE2LDUyMjcsNTIzOCw1MjUwLDExMSwxMTksMTEwLDY1LDExNCwxMTQsMTExLDExOSw1OSwxLDg1OTUsMTAxLDEwMiwxMTYsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODU5MiwxMDUsMTAzLDEwNCwxMTYsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODU5NCwxMTIsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODU5MywxMDMsMTA5LDk3LDU5LDEsOTMxLDk3LDEwOCwxMDgsNjcsMTA1LDExNCw5OSwxMDgsMTAxLDU5LDEsODcyOCwxMTIsMTAyLDU5LDMsNTUzNDksNTY2NTAsNCwyLDExNCwxMTcsNTI4OSw1MjkzLDExNiw1OSwxLDg3MzAsOTcsMTE0LDEwMSw0LDQsNTksNzMsODMsODUsNTMwNiw1MzA4LDUzMjIsNTM2NywxLDk2MzMsMTEwLDExNiwxMDEsMTE0LDExNSwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDU5LDEsODg1MSwxMTcsNCwyLDk4LDExMiw1MzI5LDUzNDcsMTE1LDEwMSwxMTYsNCwyLDU5LDY5LDUzMzgsNTM0MCwxLDg4NDcsMTEzLDExNyw5NywxMDgsNTksMSw4ODQ5LDEwMSwxMTQsMTE1LDEwMSwxMTYsNCwyLDU5LDY5LDUzNTgsNTM2MCwxLDg4NDgsMTEzLDExNyw5NywxMDgsNTksMSw4ODUwLDExMCwxMDUsMTExLDExMCw1OSwxLDg4NTIsOTksMTE0LDU5LDMsNTUzNDksNTY0OTQsOTcsMTE0LDU5LDEsODkwMiw0LDQsOTgsOTksMTA5LDExMiw1Mzk1LDU0MjAsNTQ3NSw1NDc4LDQsMiw1OSwxMTUsNTQwMSw1NDAzLDEsODkxMiwxMDEsMTE2LDQsMiw1OSw2OSw1NDExLDU0MTMsMSw4OTEyLDExMywxMTcsOTcsMTA4LDU5LDEsODgzOCw0LDIsOTksMTA0LDU0MjYsNTQ2OCwxMDEsMTAxLDEwMCwxMTUsNCw0LDU5LDY5LDgzLDg0LDU0NDAsNTQ0Miw1NDQ5LDU0NjEsMSw4ODI3LDExMywxMTcsOTcsMTA4LDU5LDEsMTA5MjgsMTA4LDk3LDExMCwxMTYsNjksMTEzLDExNyw5NywxMDgsNTksMSw4ODI5LDEwNSwxMDgsMTAwLDEwMSw1OSwxLDg4MzEsODQsMTA0LDk3LDExNiw1OSwxLDg3MTUsNTksMSw4NzIxLDQsMyw1OSwxMDEsMTE1LDU0ODYsNTQ4OCw1NTA3LDEsODkxMywxMTQsMTE1LDEwMSwxMTYsNCwyLDU5LDY5LDU0OTgsNTUwMCwxLDg4MzUsMTEzLDExNyw5NywxMDgsNTksMSw4ODM5LDEwMSwxMTYsNTksMSw4OTEzLDQsMTEsNzIsODIsODMsOTcsOTksMTAyLDEwNCwxMDUsMTExLDExNCwxMTUsNTUzNiw1NTQ2LDU1NTIsNTU2Nyw1NTc5LDU2MDIsNTYwNyw1NjU1LDU2OTUsNTcwMSw1NzExLDc5LDgyLDc4LDUsMjIyLDEsNTksNTU0NCwxLDIyMiw2NSw2OCw2OSw1OSwxLDg0ODIsNCwyLDcyLDk5LDU1NTgsNTU2Myw5OSwxMjEsNTksMSwxMDM1LDEyMSw1OSwxLDEwNjIsNCwyLDk4LDExNyw1NTczLDU1NzYsNTksMSw5LDU5LDEsOTMyLDQsMyw5NywxMDEsMTIxLDU1ODcsNTU5Myw1NTk5LDExNCwxMTEsMTEwLDU5LDEsMzU2LDEwMCwxMDUsMTA4LDU5LDEsMzU0LDU5LDEsMTA1OCwxMTQsNTksMyw1NTM0OSw1NjU5OSw0LDIsMTAxLDEwNSw1NjEzLDU2MzEsNCwyLDExNCwxMTYsNTYxOSw1NjI3LDEwMSwxMDIsMTExLDExNCwxMDEsNTksMSw4NzU2LDk3LDU5LDEsOTIwLDQsMiw5OSwxMTAsNTYzNyw1NjQ3LDEwNyw4MywxMTIsOTcsOTksMTAxLDU5LDMsODI4Nyw4MjAyLDgzLDExMiw5Nyw5OSwxMDEsNTksMSw4MjAxLDEwOCwxMDAsMTAxLDQsNCw1OSw2OSw3MCw4NCw1NjY4LDU2NzAsNTY3Nyw1Njg4LDEsODc2NCwxMTMsMTE3LDk3LDEwOCw1OSwxLDg3NzEsMTE3LDEwOCwxMDgsNjksMTEzLDExNyw5NywxMDgsNTksMSw4NzczLDEwNSwxMDgsMTAwLDEwMSw1OSwxLDg3NzYsMTEyLDEwMiw1OSwzLDU1MzQ5LDU2NjUxLDEwNSwxMTIsMTA4LDEwMSw2OCwxMTEsMTE2LDU5LDEsODQxMSw0LDIsOTksMTE2LDU3MTcsNTcyMiwxMTQsNTksMyw1NTM0OSw1NjQ5NSwxMTQsMTExLDEwNyw1OSwxLDM1OCw0LDE0LDk3LDk4LDk5LDEwMCwxMDIsMTAzLDEwOSwxMTAsMTExLDExMiwxMTQsMTE1LDExNiwxMTcsNTc1OCw1Nzg5LDU4MDUsNTgyMyw1ODMwLDU4MzUsNTg0Niw1ODUyLDU5MjEsNTkzNyw2MDg5LDYwOTUsNjEwMSw2MTA4LDQsMiw5OSwxMTQsNTc2NCw1Nzc0LDExNywxMTYsMTAxLDUsMjE4LDEsNTksNTc3MiwxLDIxOCwxMTQsNCwyLDU5LDExMSw1NzgxLDU3ODMsMSw4NjA3LDk5LDEwNSwxMTQsNTksMSwxMDU2OSwxMTQsNCwyLDk5LDEwMSw1Nzk2LDU4MDAsMTIxLDU5LDEsMTAzOCwxMTgsMTAxLDU5LDEsMzY0LDQsMiwxMDUsMTIxLDU4MTEsNTgyMCwxMTQsOTksNSwyMTksMSw1OSw1ODE4LDEsMjE5LDU5LDEsMTA1OSw5OCwxMDgsOTcsOTksNTksMSwzNjgsMTE0LDU5LDMsNTUzNDksNTY2MDAsMTE0LDk3LDExOCwxMDEsNSwyMTcsMSw1OSw1ODQ0LDEsMjE3LDk3LDk5LDExNCw1OSwxLDM2Miw0LDIsMTAwLDEwNSw1ODU4LDU5MDUsMTAxLDExNCw0LDIsNjYsODAsNTg2Niw1ODkyLDQsMiw5NywxMTQsNTg3Miw1ODc2LDExNCw1OSwxLDk1LDk3LDk5LDQsMiwxMDEsMTA3LDU4ODQsNTg4Nyw1OSwxLDkxODMsMTAxLDExNiw1OSwxLDkxNDEsOTcsMTE0LDEwMSwxMTAsMTE2LDEwNCwxMDEsMTE1LDEwNSwxMTUsNTksMSw5MTgxLDExMSwxMTAsNCwyLDU5LDgwLDU5MTMsNTkxNSwxLDg4OTksMTA4LDExNywxMTUsNTksMSw4ODQ2LDQsMiwxMDMsMTEyLDU5MjcsNTkzMiwxMTEsMTEwLDU5LDEsMzcwLDEwMiw1OSwzLDU1MzQ5LDU2NjUyLDQsOCw2NSw2OCw2OSw4NCw5NywxMDAsMTEyLDExNSw1OTU1LDU5ODUsNTk5Niw2MDA5LDYwMjYsNjAzMyw2MDQ0LDYwNzUsMTE0LDExNCwxMTEsMTE5LDQsMyw1OSw2Niw2OCw1OTY3LDU5NjksNTk3NCwxLDg1OTMsOTcsMTE0LDU5LDEsMTA1MTQsMTExLDExOSwxMTAsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY0NSwxMTEsMTE5LDExMCw2NSwxMTQsMTE0LDExMSwxMTksNTksMSw4NTk3LDExMywxMTcsMTA1LDEwOCwxMDUsOTgsMTE0LDEwNSwxMTcsMTA5LDU5LDEsMTA2MDYsMTAxLDEwMSw0LDIsNTksNjUsNjAxNyw2MDE5LDEsODg2OSwxMTQsMTE0LDExMSwxMTksNTksMSw4NjEzLDExNCwxMTQsMTExLDExOSw1OSwxLDg2NTcsMTExLDExOSwxMTAsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY2MSwxMDEsMTE0LDQsMiw3Niw4Miw2MDUyLDYwNjMsMTAxLDEwMiwxMTYsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODU5OCwxMDUsMTAzLDEwNCwxMTYsNjUsMTE0LDExNCwxMTEsMTE5LDU5LDEsODU5OSwxMDUsNCwyLDU5LDEwOCw2MDgyLDYwODQsMSw5NzgsMTExLDExMCw1OSwxLDkzMywxMDUsMTEwLDEwMyw1OSwxLDM2Niw5OSwxMTQsNTksMyw1NTM0OSw1NjQ5NiwxMDUsMTA4LDEwMCwxMDEsNTksMSwzNjAsMTA5LDEwOCw1LDIyMCwxLDU5LDYxMTUsMSwyMjAsNCw5LDY4LDk4LDk5LDEwMCwxMDEsMTAyLDExMSwxMTUsMTE4LDYxMzcsNjE0Myw2MTQ4LDYxNTIsNjE2Niw2MjUwLDYyNTUsNjI2MSw2MjY3LDk3LDExNSwxMDQsNTksMSw4ODc1LDk3LDExNCw1OSwxLDEwOTg3LDEyMSw1OSwxLDEwNDIsOTcsMTE1LDEwNCw0LDIsNTksMTA4LDYxNjEsNjE2MywxLDg4NzMsNTksMSwxMDk4Miw0LDIsMTAxLDExNCw2MTcyLDYxNzUsNTksMSw4ODk3LDQsMyw5OCwxMTYsMTIxLDYxODMsNjE4OCw2MjM4LDk3LDExNCw1OSwxLDgyMTQsNCwyLDU5LDEwNSw2MTk0LDYxOTYsMSw4MjE0LDk5LDk3LDEwOCw0LDQsNjYsNzYsODMsODQsNjIwOSw2MjE0LDYyMjAsNjIzMSw5NywxMTQsNTksMSw4NzM5LDEwNSwxMTAsMTAxLDU5LDEsMTI0LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDU5LDEsMTAwNzIsMTA1LDEwOCwxMDAsMTAxLDU5LDEsODc2OCw4NCwxMDQsMTA1LDExMCw4MywxMTIsOTcsOTksMTAxLDU5LDEsODIwMiwxMTQsNTksMyw1NTM0OSw1NjYwMSwxMTIsMTAyLDU5LDMsNTUzNDksNTY2NTMsOTksMTE0LDU5LDMsNTUzNDksNTY0OTcsMTAwLDk3LDExNSwxMDQsNTksMSw4ODc0LDQsNSw5OSwxMDEsMTAyLDExMSwxMTUsNjI4Niw2MjkyLDYyOTgsNjMwMyw2MzA5LDEwNSwxMTQsOTksNTksMSwzNzIsMTAwLDEwMywxMDEsNTksMSw4ODk2LDExNCw1OSwzLDU1MzQ5LDU2NjAyLDExMiwxMDIsNTksMyw1NTM0OSw1NjY1NCw5OSwxMTQsNTksMyw1NTM0OSw1NjQ5OCw0LDQsMTAyLDEwNSwxMTEsMTE1LDYzMjUsNjMzMCw2MzMzLDYzMzksMTE0LDU5LDMsNTUzNDksNTY2MDMsNTksMSw5MjYsMTEyLDEwMiw1OSwzLDU1MzQ5LDU2NjU1LDk5LDExNCw1OSwzLDU1MzQ5LDU2NDk5LDQsOSw2NSw3Myw4NSw5Nyw5OSwxMDIsMTExLDExNSwxMTcsNjM2NSw2MzcwLDYzNzUsNjM4MCw2MzkxLDY0MDUsNjQxMCw2NDE2LDY0MjIsOTksMTIxLDU5LDEsMTA3MSw5OSwxMjEsNTksMSwxMDMxLDk5LDEyMSw1OSwxLDEwNzAsOTksMTE3LDExNiwxMDEsNSwyMjEsMSw1OSw2Mzg5LDEsMjIxLDQsMiwxMDUsMTIxLDYzOTcsNjQwMiwxMTQsOTksNTksMSwzNzQsNTksMSwxMDY3LDExNCw1OSwzLDU1MzQ5LDU2NjA0LDExMiwxMDIsNTksMyw1NTM0OSw1NjY1Niw5OSwxMTQsNTksMyw1NTM0OSw1NjUwMCwxMDksMTA4LDU5LDEsMzc2LDQsOCw3Miw5Nyw5OSwxMDAsMTAxLDEwMiwxMTEsMTE1LDY0NDUsNjQ1MCw2NDU3LDY0NzIsNjQ3Nyw2NTAxLDY1MDUsNjUxMCw5OSwxMjEsNTksMSwxMDQ2LDk5LDExNywxMTYsMTAxLDU5LDEsMzc3LDQsMiw5NywxMjEsNjQ2Myw2NDY5LDExNCwxMTEsMTEwLDU5LDEsMzgxLDU5LDEsMTA0NywxMTEsMTE2LDU5LDEsMzc5LDQsMiwxMTQsMTE2LDY0ODMsNjQ5NywxMTEsODcsMTA1LDEwMCwxMTYsMTA0LDgzLDExMiw5Nyw5OSwxMDEsNTksMSw4MjAzLDk3LDU5LDEsOTE4LDExNCw1OSwxLDg0ODgsMTEyLDEwMiw1OSwxLDg0ODQsOTksMTE0LDU5LDMsNTUzNDksNTY1MDEsNCwxNiw5Nyw5OCw5OSwxMDEsMTAyLDEwMywxMDgsMTA5LDExMCwxMTEsMTEyLDExNCwxMTUsMTE2LDExNywxMTksNjU1MCw2NTYxLDY1NjgsNjYxMiw2NjIyLDY2MzQsNjY0NSw2NjcyLDY2OTksNjg1NCw2ODcwLDY5MjMsNjkzMyw2OTYzLDY5NzQsNjk4Myw5OSwxMTcsMTE2LDEwMSw1LDIyNSwxLDU5LDY1NTksMSwyMjUsMTE0LDEwMSwxMTgsMTAxLDU5LDEsMjU5LDQsNiw1OSw2OSwxMDAsMTA1LDExNywxMjEsNjU4Miw2NTg0LDY1ODgsNjU5MSw2NjAwLDY2MDksMSw4NzY2LDU5LDMsODc2Niw4MTksNTksMSw4NzY3LDExNCw5OSw1LDIyNiwxLDU5LDY1OTgsMSwyMjYsMTE2LDEwMSw1LDE4MCwxLDU5LDY2MDcsMSwxODAsNTksMSwxMDcyLDEwOCwxMDUsMTAzLDUsMjMwLDEsNTksNjYyMCwxLDIzMCw0LDIsNTksMTE0LDY2MjgsNjYzMCwxLDgyODksNTksMyw1NTM0OSw1NjYwNiwxMTQsOTcsMTE4LDEwMSw1LDIyNCwxLDU5LDY2NDMsMSwyMjQsNCwyLDEwMSwxMTIsNjY1MSw2NjY3LDQsMiwxMDIsMTEyLDY2NTcsNjY2MywxMTUsMTIxLDEwOSw1OSwxLDg1MDEsMTA0LDU5LDEsODUwMSwxMDQsOTcsNTksMSw5NDUsNCwyLDk3LDExMiw2Njc4LDY2OTIsNCwyLDk5LDEwOCw2Njg0LDY2ODgsMTE0LDU5LDEsMjU3LDEwMyw1OSwxLDEwODE1LDUsMzgsMSw1OSw2Njk3LDEsMzgsNCwyLDEwMCwxMDMsNjcwNSw2NzM3LDQsNSw1OSw5NywxMDAsMTE1LDExOCw2NzE3LDY3MTksNjcyNCw2NzI3LDY3MzQsMSw4NzQzLDExMCwxMDAsNTksMSwxMDgzNyw1OSwxLDEwODQ0LDEwOCwxMTEsMTEyLDEwMSw1OSwxLDEwODQwLDU5LDEsMTA4NDIsNCw3LDU5LDEwMSwxMDgsMTA5LDExNCwxMTUsMTIyLDY3NTMsNjc1NSw2NzU4LDY3NjIsNjgxNCw2ODM1LDY4NDgsMSw4NzM2LDU5LDEsMTA2NjAsMTAxLDU5LDEsODczNiwxMTUsMTAwLDQsMiw1OSw5Nyw2NzcwLDY3NzIsMSw4NzM3LDQsOCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDY3OTAsNjc5Myw2Nzk2LDY3OTksNjgwMiw2ODA1LDY4MDgsNjgxMSw1OSwxLDEwNjY0LDU5LDEsMTA2NjUsNTksMSwxMDY2Niw1OSwxLDEwNjY3LDU5LDEsMTA2NjgsNTksMSwxMDY2OSw1OSwxLDEwNjcwLDU5LDEsMTA2NzEsMTE2LDQsMiw1OSwxMTgsNjgyMSw2ODIzLDEsODczNSw5OCw0LDIsNTksMTAwLDY4MzAsNjgzMiwxLDg4OTQsNTksMSwxMDY1Myw0LDIsMTEyLDExNiw2ODQxLDY4NDUsMTA0LDU5LDEsODczOCw1OSwxLDE5Nyw5NywxMTQsMTE0LDU5LDEsOTA4NCw0LDIsMTAzLDExMiw2ODYwLDY4NjUsMTExLDExMCw1OSwxLDI2MSwxMDIsNTksMyw1NTM0OSw1NjY1OCw0LDcsNTksNjksOTcsMTAxLDEwNSwxMTEsMTEyLDY4ODYsNjg4OCw2ODkxLDY4OTcsNjkwMCw2OTA0LDY5MDgsMSw4Nzc2LDU5LDEsMTA4NjQsOTksMTA1LDExNCw1OSwxLDEwODYzLDU5LDEsODc3OCwxMDAsNTksMSw4Nzc5LDExNSw1OSwxLDM5LDExNCwxMTEsMTIwLDQsMiw1OSwxMDEsNjkxNyw2OTE5LDEsODc3NiwxMTMsNTksMSw4Nzc4LDEwNSwxMTAsMTAzLDUsMjI5LDEsNTksNjkzMSwxLDIyOSw0LDMsOTksMTE2LDEyMSw2OTQxLDY5NDYsNjk0OSwxMTQsNTksMyw1NTM0OSw1NjUwMiw1OSwxLDQyLDEwOSwxMTIsNCwyLDU5LDEwMSw2OTU3LDY5NTksMSw4Nzc2LDExMyw1OSwxLDg3ODEsMTA1LDEwOCwxMDAsMTAxLDUsMjI3LDEsNTksNjk3MiwxLDIyNywxMDksMTA4LDUsMjI4LDEsNTksNjk4MSwxLDIyOCw0LDIsOTksMTA1LDY5ODksNjk5NywxMTEsMTEwLDEwNSwxMTAsMTE2LDU5LDEsODc1NSwxMTAsMTE2LDU5LDEsMTA3NjksNCwxNiw3OCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDUsMTA3LDEwOCwxMTAsMTExLDExMiwxMTQsMTE1LDExNyw3MDM2LDcwNDEsNzExOSw3MTM1LDcxNDksNzE1NSw3MjE5LDcyMjQsNzM0Nyw3MzU0LDc0NjMsNzQ4OSw3Nzg2LDc3OTMsNzgxNCw3ODY2LDExMSwxMTYsNTksMSwxMDk4OSw0LDIsOTksMTE0LDcwNDcsNzA5NCwxMDcsNCw0LDk5LDEwMSwxMTIsMTE1LDcwNTgsNzA2NCw3MDczLDcwODAsMTExLDExMCwxMDMsNTksMSw4NzgwLDExMiwxMTUsMTA1LDEwOCwxMTEsMTEwLDU5LDEsMTAxNCwxMTQsMTA1LDEwOSwxMDEsNTksMSw4MjQ1LDEwNSwxMDksNCwyLDU5LDEwMSw3MDg4LDcwOTAsMSw4NzY1LDExMyw1OSwxLDg5MDksNCwyLDExOCwxMTksNzEwMCw3MTA1LDEwMSwxMDEsNTksMSw4ODkzLDEwMSwxMDAsNCwyLDU5LDEwMyw3MTEzLDcxMTUsMSw4OTY1LDEwMSw1OSwxLDg5NjUsMTE0LDEwNyw0LDIsNTksMTE2LDcxMjcsNzEyOSwxLDkxNDEsOTgsMTE0LDEwNyw1OSwxLDkxNDIsNCwyLDExMSwxMjEsNzE0MSw3MTQ2LDExMCwxMDMsNTksMSw4NzgwLDU5LDEsMTA3MywxMTMsMTE3LDExMSw1OSwxLDgyMjIsNCw1LDk5LDEwOSwxMTIsMTE0LDExNiw3MTY3LDcxODEsNzE4OCw3MTkzLDcxOTksOTcsMTE3LDExNSw0LDIsNTksMTAxLDcxNzYsNzE3OCwxLDg3NTcsNTksMSw4NzU3LDExMiwxMTYsMTIxLDExOCw1OSwxLDEwNjcyLDExNSwxMDUsNTksMSwxMDE0LDExMCwxMTEsMTE3LDU5LDEsODQ5Miw0LDMsOTcsMTA0LDExOSw3MjA3LDcyMTAsNzIxMyw1OSwxLDk0Niw1OSwxLDg1MDIsMTAxLDEwMSwxMTAsNTksMSw4ODEyLDExNCw1OSwzLDU1MzQ5LDU2NjA3LDEwMyw0LDcsOTksMTExLDExNSwxMTYsMTE3LDExOCwxMTksNzI0MSw3MjYyLDcyODgsNzMwNSw3MzI4LDczMzUsNzM0MCw0LDMsOTcsMTA1LDExNyw3MjQ5LDcyNTMsNzI1OCwxMTIsNTksMSw4ODk4LDExNCw5OSw1OSwxLDk3MTEsMTEyLDU5LDEsODg5OSw0LDMsMTAwLDExMiwxMTYsNzI3MCw3Mjc1LDcyODEsMTExLDExNiw1OSwxLDEwNzUyLDEwOCwxMTcsMTE1LDU5LDEsMTA3NTMsMTA1LDEwOSwxMDEsMTE1LDU5LDEsMTA3NTQsNCwyLDExMywxMTYsNzI5NCw3MzAwLDk5LDExNywxMTIsNTksMSwxMDc1OCw5NywxMTQsNTksMSw5NzMzLDExNCwxMDUsOTcsMTEwLDEwMywxMDgsMTAxLDQsMiwxMDAsMTE3LDczMTgsNzMyNCwxMTEsMTE5LDExMCw1OSwxLDk2NjEsMTEyLDU5LDEsOTY1MSwxMTIsMTA4LDExNywxMTUsNTksMSwxMDc1NiwxMDEsMTAxLDU5LDEsODg5NywxMDEsMTAwLDEwMywxMDEsNTksMSw4ODk2LDk3LDExNCwxMTEsMTE5LDU5LDEsMTA1MDksNCwzLDk3LDEwNywxMTEsNzM2Miw3NDM2LDc0NTgsNCwyLDk5LDExMCw3MzY4LDc0MzIsMTA3LDQsMywxMDgsMTE1LDExNiw3Mzc3LDczODYsNzM5NCwxMTEsMTIyLDEwMSwxMTAsMTAzLDEwMSw1OSwxLDEwNzMxLDExMywxMTcsOTcsMTE0LDEwMSw1OSwxLDk2NDIsMTE0LDEwNSw5NywxMTAsMTAzLDEwOCwxMDEsNCw0LDU5LDEwMCwxMDgsMTE0LDc0MTEsNzQxMyw3NDE5LDc0MjUsMSw5NjUyLDExMSwxMTksMTEwLDU5LDEsOTY2MiwxMDEsMTAyLDExNiw1OSwxLDk2NjYsMTA1LDEwMywxMDQsMTE2LDU5LDEsOTY1NiwxMDcsNTksMSw5MjUxLDQsMiw0OSw1MSw3NDQyLDc0NTQsNCwyLDUwLDUyLDc0NDgsNzQ1MSw1OSwxLDk2MTgsNTksMSw5NjE3LDUyLDU5LDEsOTYxOSw5OSwxMDcsNTksMSw5NjA4LDQsMiwxMDEsMTExLDc0NjksNzQ4NSw0LDIsNTksMTEzLDc0NzUsNzQ3OCwzLDYxLDg0MjEsMTE3LDEwNSwxMTgsNTksMyw4ODAxLDg0MjEsMTE2LDU5LDEsODk3Niw0LDQsMTEyLDExNiwxMTksMTIwLDc0OTksNzUwNCw3NTE3LDc1MjMsMTAyLDU5LDMsNTUzNDksNTY2NTksNCwyLDU5LDExNiw3NTEwLDc1MTIsMSw4ODY5LDExMSwxMDksNTksMSw4ODY5LDExNiwxMDUsMTAxLDU5LDEsODkwNCw0LDEyLDY4LDcyLDg1LDg2LDk4LDEwMCwxMDQsMTA5LDExMiwxMTYsMTE3LDExOCw3NTQ5LDc1NzEsNzU5Nyw3NjE5LDc2NTUsNzY2MCw3NjgyLDc3MDgsNzcxNSw3NzIxLDc3MjgsNzc1MCw0LDQsNzYsODIsMTA4LDExNCw3NTU5LDc1NjIsNzU2NSw3NTY4LDU5LDEsOTU1OSw1OSwxLDk1NTYsNTksMSw5NTU4LDU5LDEsOTU1NSw0LDUsNTksNjgsODUsMTAwLDExNyw3NTgzLDc1ODUsNzU4OCw3NTkxLDc1OTQsMSw5NTUyLDU5LDEsOTU3NCw1OSwxLDk1NzcsNTksMSw5NTcyLDU5LDEsOTU3NSw0LDQsNzYsODIsMTA4LDExNCw3NjA3LDc2MTAsNzYxMyw3NjE2LDU5LDEsOTU2NSw1OSwxLDk1NjIsNTksMSw5NTY0LDU5LDEsOTU2MSw0LDcsNTksNzIsNzYsODIsMTA0LDEwOCwxMTQsNzYzNSw3NjM3LDc2NDAsNzY0Myw3NjQ2LDc2NDksNzY1MiwxLDk1NTMsNTksMSw5NTgwLDU5LDEsOTU3MSw1OSwxLDk1NjgsNTksMSw5NTc5LDU5LDEsOTU3MCw1OSwxLDk1NjcsMTExLDEyMCw1OSwxLDEwNjk3LDQsNCw3Niw4MiwxMDgsMTE0LDc2NzAsNzY3Myw3Njc2LDc2NzksNTksMSw5NTU3LDU5LDEsOTU1NCw1OSwxLDk0ODgsNTksMSw5NDg0LDQsNSw1OSw2OCw4NSwxMDAsMTE3LDc2OTQsNzY5Niw3Njk5LDc3MDIsNzcwNSwxLDk0NzIsNTksMSw5NTczLDU5LDEsOTU3Niw1OSwxLDk1MTYsNTksMSw5NTI0LDEwNSwxMTAsMTE3LDExNSw1OSwxLDg4NjMsMTA4LDExNywxMTUsNTksMSw4ODYyLDEwNSwxMDksMTAxLDExNSw1OSwxLDg4NjQsNCw0LDc2LDgyLDEwOCwxMTQsNzczOCw3NzQxLDc3NDQsNzc0Nyw1OSwxLDk1NjMsNTksMSw5NTYwLDU5LDEsOTQ5Niw1OSwxLDk0OTIsNCw3LDU5LDcyLDc2LDgyLDEwNCwxMDgsMTE0LDc3NjYsNzc2OCw3NzcxLDc3NzQsNzc3Nyw3NzgwLDc3ODMsMSw5NDc0LDU5LDEsOTU3OCw1OSwxLDk1NjksNTksMSw5NTY2LDU5LDEsOTUzMiw1OSwxLDk1MDgsNTksMSw5NTAwLDExNCwxMDUsMTA5LDEwMSw1OSwxLDgyNDUsNCwyLDEwMSwxMTgsNzc5OSw3ODA0LDExOCwxMDEsNTksMSw3MjgsOTgsOTcsMTE0LDUsMTY2LDEsNTksNzgxMiwxLDE2Niw0LDQsOTksMTAxLDEwNSwxMTEsNzgyNCw3ODI5LDc4MzQsNzg0NiwxMTQsNTksMyw1NTM0OSw1NjUwMywxMDksMTA1LDU5LDEsODI3MSwxMDksNCwyLDU5LDEwMSw3ODQxLDc4NDMsMSw4NzY1LDU5LDEsODkwOSwxMDgsNCwzLDU5LDk4LDEwNCw3ODU1LDc4NTcsNzg2MCwxLDkyLDU5LDEsMTA2OTMsMTE1LDExNyw5OCw1OSwxLDEwMTg0LDQsMiwxMDgsMTA5LDc4NzIsNzg4NSwxMDgsNCwyLDU5LDEwMSw3ODc5LDc4ODEsMSw4MjI2LDExNiw1OSwxLDgyMjYsMTEyLDQsMyw1OSw2OSwxMDEsNzg5NCw3ODk2LDc4OTksMSw4NzgyLDU5LDEsMTA5MjYsNCwyLDU5LDExMyw3OTA1LDc5MDcsMSw4NzgzLDU5LDEsODc4Myw0LDE1LDk3LDk5LDEwMCwxMDEsMTAyLDEwNCwxMDUsMTA4LDExMSwxMTQsMTE1LDExNiwxMTcsMTE5LDEyMSw3OTQyLDgwMjEsODA3NSw4MDgwLDgxMjEsODEyNiw4MTU3LDgyNzksODI5NSw4NDMwLDg0NDYsODQ4NSw4NDkxLDg3MDcsODcyNiw0LDMsOTksMTEyLDExNCw3OTUwLDc5NTYsODAwNywxMTcsMTE2LDEwMSw1OSwxLDI2Myw0LDYsNTksOTcsOTgsOTksMTAwLDExNSw3OTcwLDc5NzIsNzk3Nyw3OTg0LDc5OTgsODAwMywxLDg3NDUsMTEwLDEwMCw1OSwxLDEwODIwLDExNCw5OSwxMTcsMTEyLDU5LDEsMTA4MjUsNCwyLDk3LDExNyw3OTkwLDc5OTQsMTEyLDU5LDEsMTA4MjcsMTEyLDU5LDEsMTA4MjMsMTExLDExNiw1OSwxLDEwODE2LDU5LDMsODc0NSw2NTAyNCw0LDIsMTAxLDExMSw4MDEzLDgwMTcsMTE2LDU5LDEsODI1NywxMTAsNTksMSw3MTEsNCw0LDk3LDEwMSwxMDUsMTE3LDgwMzEsODA0Niw4MDU2LDgwNjEsNCwyLDExMiwxMTQsODAzNyw4MDQxLDExNSw1OSwxLDEwODI5LDExMSwxMTAsNTksMSwyNjksMTAwLDEwNSwxMDgsNSwyMzEsMSw1OSw4MDU0LDEsMjMxLDExNCw5OSw1OSwxLDI2NSwxMTIsMTE1LDQsMiw1OSwxMTUsODA2OSw4MDcxLDEsMTA4MjgsMTA5LDU5LDEsMTA4MzIsMTExLDExNiw1OSwxLDI2Nyw0LDMsMTAwLDEwOSwxMTAsODA4OCw4MDk3LDgxMDQsMTA1LDEwOCw1LDE4NCwxLDU5LDgwOTUsMSwxODQsMTEyLDExNiwxMjEsMTE4LDU5LDEsMTA2NzQsMTE2LDUsMTYyLDIsNTksMTAxLDgxMTIsODExNCwxLDE2MiwxMTQsMTAwLDExMSwxMTYsNTksMSwxODMsMTE0LDU5LDMsNTUzNDksNTY2MDgsNCwzLDk5LDEwMSwxMDUsODEzNCw4MTM4LDgxNTQsMTIxLDU5LDEsMTA5NSw5OSwxMDcsNCwyLDU5LDEwOSw4MTQ2LDgxNDgsMSwxMDAwMyw5NywxMTQsMTA3LDU5LDEsMTAwMDMsNTksMSw5NjcsMTE0LDQsNyw1OSw2OSw5OSwxMDEsMTAyLDEwOSwxMTUsODE3NCw4MTc2LDgxNzksODI1OCw4MjYxLDgyNjgsODI3MywxLDk2NzUsNTksMSwxMDY5MSw0LDMsNTksMTAxLDEwOCw4MTg3LDgxODksODE5MywxLDcxMCwxMTMsNTksMSw4NzkxLDEwMSw0LDIsOTcsMTAwLDgyMDAsODIyMywxMTQsMTE0LDExMSwxMTksNCwyLDEwOCwxMTQsODIxMCw4MjE2LDEwMSwxMDIsMTE2LDU5LDEsODYzNCwxMDUsMTAzLDEwNCwxMTYsNTksMSw4NjM1LDQsNSw4Miw4Myw5Nyw5OSwxMDAsODIzNSw4MjM4LDgyNDEsODI0Niw4MjUyLDU5LDEsMTc0LDU5LDEsOTQxNiwxMTUsMTE2LDU5LDEsODg1OSwxMDUsMTE0LDk5LDU5LDEsODg1OCw5NywxMTUsMTA0LDU5LDEsODg2MSw1OSwxLDg3OTEsMTEwLDEwNSwxMTAsMTE2LDU5LDEsMTA3NjgsMTA1LDEwMCw1OSwxLDEwOTkxLDk5LDEwNSwxMTQsNTksMSwxMDY5MCwxMTcsOTgsMTE1LDQsMiw1OSwxMTcsODI4OCw4MjkwLDEsOTgyNywxMDUsMTE2LDU5LDEsOTgyNyw0LDQsMTA4LDEwOSwxMTAsMTEyLDgzMDUsODMyNiw4Mzc2LDg0MDAsMTExLDExMCw0LDIsNTksMTAxLDgzMTMsODMxNSwxLDU4LDQsMiw1OSwxMTMsODMyMSw4MzIzLDEsODc4OCw1OSwxLDg3ODgsNCwyLDEwOSwxMTIsODMzMiw4MzQ0LDk3LDQsMiw1OSwxMTYsODMzOSw4MzQxLDEsNDQsNTksMSw2NCw0LDMsNTksMTAyLDEwOCw4MzUyLDgzNTQsODM1OCwxLDg3MDUsMTEwLDU5LDEsODcyOCwxMDEsNCwyLDEwOSwxMjAsODM2NSw4MzcxLDEwMSwxMTAsMTE2LDU5LDEsODcwNSwxMDEsMTE1LDU5LDEsODQ1MCw0LDIsMTAzLDEwNSw4MzgyLDgzOTUsNCwyLDU5LDEwMCw4Mzg4LDgzOTAsMSw4NzczLDExMSwxMTYsNTksMSwxMDg2MSwxMTAsMTE2LDU5LDEsODc1MCw0LDMsMTAyLDExNCwxMjEsODQwOCw4NDEyLDg0MTcsNTksMyw1NTM0OSw1NjY2MCwxMTEsMTAwLDU5LDEsODcyMCw1LDE2OSwyLDU5LDExNSw4NDI0LDg0MjYsMSwxNjksMTE0LDU5LDEsODQ3MSw0LDIsOTcsMTExLDg0MzYsODQ0MSwxMTQsMTE0LDU5LDEsODYyOSwxMTUsMTE1LDU5LDEsMTAwMDcsNCwyLDk5LDExNyw4NDUyLDg0NTcsMTE0LDU5LDMsNTUzNDksNTY1MDQsNCwyLDk4LDExMiw4NDYzLDg0NzQsNCwyLDU5LDEwMSw4NDY5LDg0NzEsMSwxMDk1OSw1OSwxLDEwOTYxLDQsMiw1OSwxMDEsODQ4MCw4NDgyLDEsMTA5NjAsNTksMSwxMDk2MiwxMDAsMTExLDExNiw1OSwxLDg5NDMsNCw3LDEwMCwxMDEsMTA4LDExMiwxMTQsMTE4LDExOSw4NTA3LDg1MjIsODUzNiw4NTUwLDg2MDAsODY5Nyw4NzAyLDk3LDExNCwxMTQsNCwyLDEwOCwxMTQsODUxNiw4NTE5LDU5LDEsMTA1NTIsNTksMSwxMDU0OSw0LDIsMTEyLDExNSw4NTI4LDg1MzIsMTE0LDU5LDEsODkyNiw5OSw1OSwxLDg5MjcsOTcsMTE0LDExNCw0LDIsNTksMTEyLDg1NDUsODU0NywxLDg2MzAsNTksMSwxMDU1Nyw0LDYsNTksOTgsOTksMTAwLDExMSwxMTUsODU2NCw4NTY2LDg1NzMsODU4Nyw4NTkyLDg1OTYsMSw4NzQ2LDExNCw5OSw5NywxMTIsNTksMSwxMDgyNCw0LDIsOTcsMTE3LDg1NzksODU4MywxMTIsNTksMSwxMDgyMiwxMTIsNTksMSwxMDgyNiwxMTEsMTE2LDU5LDEsODg0NSwxMTQsNTksMSwxMDgyMSw1OSwzLDg3NDYsNjUwMjQsNCw0LDk3LDEwOCwxMTQsMTE4LDg2MTAsODYyMyw4NjYzLDg2NzIsMTE0LDExNCw0LDIsNTksMTA5LDg2MTgsODYyMCwxLDg2MzEsNTksMSwxMDU1NiwxMjEsNCwzLDEwMSwxMTgsMTE5LDg2MzIsODY1MSw4NjU2LDExMyw0LDIsMTEyLDExNSw4NjM5LDg2NDUsMTE0LDEwMSw5OSw1OSwxLDg5MjYsMTE3LDk5LDk5LDU5LDEsODkyNywxMDEsMTAxLDU5LDEsODkxMCwxMDEsMTAwLDEwMywxMDEsNTksMSw4OTExLDEwMSwxMTAsNSwxNjQsMSw1OSw4NjcwLDEsMTY0LDEwMSw5NywxMTQsMTE0LDExMSwxMTksNCwyLDEwOCwxMTQsODY4NCw4NjkwLDEwMSwxMDIsMTE2LDU5LDEsODYzMCwxMDUsMTAzLDEwNCwxMTYsNTksMSw4NjMxLDEwMSwxMDEsNTksMSw4OTEwLDEwMSwxMDAsNTksMSw4OTExLDQsMiw5OSwxMDUsODcxMyw4NzIxLDExMSwxMTAsMTA1LDExMCwxMTYsNTksMSw4NzU0LDExMCwxMTYsNTksMSw4NzUzLDEwOCw5OSwxMTYsMTIxLDU5LDEsOTAwNSw0LDE5LDY1LDcyLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwNCwxMDUsMTA2LDEwOCwxMTEsMTE0LDExNSwxMTYsMTE3LDExOSwxMjIsODc3Myw4Nzc4LDg3ODMsODgyMSw4ODM5LDg4NTQsODg4Nyw4OTE0LDg5MzAsODk0NCw5MDM2LDkwNDEsOTA1OCw5MTk3LDkyMjcsOTI1OCw5MjgxLDkyOTcsOTMwNSwxMTQsMTE0LDU5LDEsODY1OSw5NywxMTQsNTksMSwxMDU5Nyw0LDQsMTAzLDEwOCwxMTQsMTE1LDg3OTMsODc5OSw4ODA1LDg4MDksMTAzLDEwMSwxMTQsNTksMSw4MjI0LDEwMSwxMTYsMTA0LDU5LDEsODUwNCwxMTQsNTksMSw4NTk1LDEwNCw0LDIsNTksMTE4LDg4MTYsODgxOCwxLDgyMDgsNTksMSw4ODY3LDQsMiwxMDcsMTA4LDg4MjcsODgzNCw5NywxMTQsMTExLDExOSw1OSwxLDEwNTExLDk3LDk5LDU5LDEsNzMzLDQsMiw5NywxMjEsODg0NSw4ODUxLDExNCwxMTEsMTEwLDU5LDEsMjcxLDU5LDEsMTA3Niw0LDMsNTksOTcsMTExLDg4NjIsODg2NCw4ODgwLDEsODUxOCw0LDIsMTAzLDExNCw4ODcwLDg4NzYsMTAzLDEwMSwxMTQsNTksMSw4MjI1LDExNCw1OSwxLDg2NTAsMTE2LDExNSwxMDEsMTEzLDU5LDEsMTA4NzEsNCwzLDEwMywxMDgsMTA5LDg4OTUsODkwMiw4OTA3LDUsMTc2LDEsNTksODkwMCwxLDE3NiwxMTYsOTcsNTksMSw5NDgsMTEyLDExNiwxMjEsMTE4LDU5LDEsMTA2NzMsNCwyLDEwNSwxMTQsODkyMCw4OTI2LDExNSwxMDQsMTE2LDU5LDEsMTA2MjMsNTksMyw1NTM0OSw1NjYwOSw5NywxMTQsNCwyLDEwOCwxMTQsODkzOCw4OTQxLDU5LDEsODY0Myw1OSwxLDg2NDIsNCw1LDk3LDEwMSwxMDMsMTE1LDExOCw4OTU2LDg5ODYsODk4OSw4OTk2LDkwMDEsMTA5LDQsMyw1OSwxMTEsMTE1LDg5NjUsODk2Nyw4OTgzLDEsODkwMCwxMTAsMTAwLDQsMiw1OSwxMTUsODk3NSw4OTc3LDEsODkwMCwxMTcsMTA1LDExNiw1OSwxLDk4MzAsNTksMSw5ODMwLDU5LDEsMTY4LDk3LDEwOSwxMDksOTcsNTksMSw5ODksMTA1LDExMCw1OSwxLDg5NDYsNCwzLDU5LDEwNSwxMTEsOTAwOSw5MDExLDkwMzEsMSwyNDcsMTAwLDEwMSw1LDI0NywyLDU5LDExMSw5MDIwLDkwMjIsMSwyNDcsMTEwLDExNiwxMDUsMTA5LDEwMSwxMTUsNTksMSw4OTAzLDExMCwxMjAsNTksMSw4OTAzLDk5LDEyMSw1OSwxLDExMDYsOTksNCwyLDExMSwxMTQsOTA0OCw5MDUzLDExNCwxMTAsNTksMSw4OTkwLDExMSwxMTIsNTksMSw4OTczLDQsNSwxMDgsMTEyLDExNiwxMTcsMTE5LDkwNzAsOTA3Niw5MDgxLDkxMzAsOTE0NCwxMDgsOTcsMTE0LDU5LDEsMzYsMTAyLDU5LDMsNTUzNDksNTY2NjEsNCw1LDU5LDEwMSwxMDksMTEyLDExNSw5MDkzLDkwOTUsOTEwOSw5MTE2LDkxMjIsMSw3MjksMTEzLDQsMiw1OSwxMDAsOTEwMiw5MTA0LDEsODc4NCwxMTEsMTE2LDU5LDEsODc4NSwxMDUsMTEwLDExNywxMTUsNTksMSw4NzYwLDEwOCwxMTcsMTE1LDU5LDEsODcyNCwxMTMsMTE3LDk3LDExNCwxMDEsNTksMSw4ODY1LDk4LDEwOCwxMDEsOTgsOTcsMTE0LDExOSwxMDEsMTAwLDEwMywxMDEsNTksMSw4OTY2LDExMCw0LDMsOTcsMTAwLDEwNCw5MTUzLDkxNjAsOTE3MiwxMTQsMTE0LDExMSwxMTksNTksMSw4NTk1LDExMSwxMTksMTEwLDk3LDExNCwxMTQsMTExLDExOSwxMTUsNTksMSw4NjUwLDk3LDExNCwxMTIsMTExLDExMSwxMTAsNCwyLDEwOCwxMTQsOTE4NCw5MTkwLDEwMSwxMDIsMTE2LDU5LDEsODY0MywxMDUsMTAzLDEwNCwxMTYsNTksMSw4NjQyLDQsMiw5OCw5OSw5MjAzLDkyMTEsMTA3LDk3LDExNCwxMTEsMTE5LDU5LDEsMTA1MTIsNCwyLDExMSwxMTQsOTIxNyw5MjIyLDExNCwxMTAsNTksMSw4OTkxLDExMSwxMTIsNTksMSw4OTcyLDQsMyw5OSwxMTEsMTE2LDkyMzUsOTI0OCw5MjUyLDQsMiwxMTQsMTIxLDkyNDEsOTI0NSw1OSwzLDU1MzQ5LDU2NTA1LDU5LDEsMTEwOSwxMDgsNTksMSwxMDc0MiwxMTQsMTExLDEwNyw1OSwxLDI3Myw0LDIsMTAwLDExNCw5MjY0LDkyNjksMTExLDExNiw1OSwxLDg5NDUsMTA1LDQsMiw1OSwxMDIsOTI3Niw5Mjc4LDEsOTY2Myw1OSwxLDk2NjIsNCwyLDk3LDEwNCw5Mjg3LDkyOTIsMTE0LDExNCw1OSwxLDg2OTMsOTcsMTE0LDU5LDEsMTA2MDcsOTcsMTEwLDEwMywxMDgsMTAxLDU5LDEsMTA2NjIsNCwyLDk5LDEwNSw5MzExLDkzMTUsMTIxLDU5LDEsMTExOSwxMDMsMTE0LDk3LDExNCwxMTQsNTksMSwxMDIzOSw0LDE4LDY4LDk3LDk5LDEwMCwxMDEsMTAyLDEwMywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTIwLDkzNjEsOTM3Niw5Mzk4LDk0MzksOTQ0NCw5NDQ3LDk0NjIsOTQ5NSw5NTMxLDk1ODUsOTU5OCw5NjE0LDk2NTksOTc1NSw5NzcxLDk3OTIsOTgwOCw5ODI2LDQsMiw2OCwxMTEsOTM2Nyw5MzcyLDExMSwxMTYsNTksMSwxMDg3MSwxMTYsNTksMSw4Nzg1LDQsMiw5OSwxMTUsOTM4Miw5MzkyLDExNywxMTYsMTAxLDUsMjMzLDEsNTksOTM5MCwxLDIzMywxMTYsMTAxLDExNCw1OSwxLDEwODYyLDQsNCw5NywxMDUsMTExLDEyMSw5NDA4LDk0MTQsOTQzMCw5NDM2LDExNCwxMTEsMTEwLDU5LDEsMjgzLDExNCw0LDIsNTksOTksOTQyMSw5NDIzLDEsODc5MCw1LDIzNCwxLDU5LDk0MjgsMSwyMzQsMTA4LDExMSwxMTAsNTksMSw4Nzg5LDU5LDEsMTEwMSwxMTEsMTE2LDU5LDEsMjc5LDU5LDEsODUxOSw0LDIsNjgsMTE0LDk0NTMsOTQ1OCwxMTEsMTE2LDU5LDEsODc4Niw1OSwzLDU1MzQ5LDU2NjEwLDQsMyw1OSwxMTQsMTE1LDk0NzAsOTQ3Miw5NDgyLDEsMTA5MDYsOTcsMTE4LDEwMSw1LDIzMiwxLDU5LDk0ODAsMSwyMzIsNCwyLDU5LDEwMCw5NDg4LDk0OTAsMSwxMDkwMiwxMTEsMTE2LDU5LDEsMTA5MDQsNCw0LDU5LDEwNSwxMDgsMTE1LDk1MDUsOTUwNyw5NTE1LDk1MTgsMSwxMDkwNSwxMTAsMTE2LDEwMSwxMTQsMTE1LDU5LDEsOTE5MSw1OSwxLDg0NjcsNCwyLDU5LDEwMCw5NTI0LDk1MjYsMSwxMDkwMSwxMTEsMTE2LDU5LDEsMTA5MDMsNCwzLDk3LDExMiwxMTUsOTUzOSw5NTQ0LDk1NjQsOTksMTE0LDU5LDEsMjc1LDExNiwxMjEsNCwzLDU5LDExNSwxMTgsOTU1NCw5NTU2LDk1NjEsMSw4NzA5LDEwMSwxMTYsNTksMSw4NzA5LDU5LDEsODcwOSwxMTIsNCwyLDQ5LDU5LDk1NzEsOTU4Myw0LDIsNTEsNTIsOTU3Nyw5NTgwLDU5LDEsODE5Niw1OSwxLDgxOTcsMSw4MTk1LDQsMiwxMDMsMTE1LDk1OTEsOTU5NCw1OSwxLDMzMSwxMTIsNTksMSw4MTk0LDQsMiwxMDMsMTEyLDk2MDQsOTYwOSwxMTEsMTEwLDU5LDEsMjgxLDEwMiw1OSwzLDU1MzQ5LDU2NjYyLDQsMyw5NywxMDgsMTE1LDk2MjIsOTYzNSw5NjQwLDExNCw0LDIsNTksMTE1LDk2MjksOTYzMSwxLDg5MTcsMTA4LDU5LDEsMTA3MjMsMTE3LDExNSw1OSwxLDEwODY1LDEwNSw0LDMsNTksMTA4LDExOCw5NjQ5LDk2NTEsOTY1NiwxLDk0OSwxMTEsMTEwLDU5LDEsOTQ5LDU5LDEsMTAxMyw0LDQsOTksMTE1LDExNywxMTgsOTY2OSw5Njg2LDk3MTYsOTc0Nyw0LDIsMTA1LDExMSw5Njc1LDk2ODAsMTE0LDk5LDU5LDEsODc5MCwxMDgsMTExLDExMCw1OSwxLDg3ODksNCwyLDEwNSwxMDgsOTY5Miw5Njk2LDEwOSw1OSwxLDg3NzAsOTcsMTEwLDExNiw0LDIsMTAzLDEwOCw5NzA1LDk3MTAsMTE2LDExNCw1OSwxLDEwOTAyLDEwMSwxMTUsMTE1LDU5LDEsMTA5MDEsNCwzLDk3LDEwMSwxMDUsOTcyNCw5NzI5LDk3MzQsMTA4LDExNSw1OSwxLDYxLDExNSwxMTYsNTksMSw4Nzk5LDExOCw0LDIsNTksNjgsOTc0MSw5NzQzLDEsODgwMSw2OCw1OSwxLDEwODcyLDExMiw5NywxMTQsMTE1LDEwOCw1OSwxLDEwNzI1LDQsMiw2OCw5Nyw5NzYxLDk3NjYsMTExLDExNiw1OSwxLDg3ODcsMTE0LDExNCw1OSwxLDEwNjA5LDQsMyw5OSwxMDAsMTA1LDk3NzksOTc4Myw5Nzg4LDExNCw1OSwxLDg0OTUsMTExLDExNiw1OSwxLDg3ODQsMTA5LDU5LDEsODc3MCw0LDIsOTcsMTA0LDk3OTgsOTgwMSw1OSwxLDk1MSw1LDI0MCwxLDU5LDk4MDYsMSwyNDAsNCwyLDEwOSwxMTQsOTgxNCw5ODIyLDEwOCw1LDIzNSwxLDU5LDk4MjAsMSwyMzUsMTExLDU5LDEsODM2NCw0LDMsOTksMTA1LDExMiw5ODM0LDk4MzgsOTg0MywxMDgsNTksMSwzMywxMTUsMTE2LDU5LDEsODcwNyw0LDIsMTAxLDExMSw5ODQ5LDk4NTksOTksMTE2LDk3LDExNiwxMDUsMTExLDExMCw1OSwxLDg0OTYsMTEwLDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMTAxLDU5LDEsODUxOSw0LDEyLDk3LDk5LDEwMSwxMDIsMTA1LDEwNiwxMDgsMTEwLDExMSwxMTIsMTE0LDExNSw5ODk2LDk5MTAsOTkxNCw5OTIxLDk5NTQsOTk2MCw5OTY3LDk5ODksOTk5NCwxMDAyNywxMDAzNiwxMDE2NCwxMDgsMTA4LDEwNSwxMTAsMTAzLDEwMCwxMTEsMTE2LDExNSwxMDEsMTEzLDU5LDEsODc4NiwxMjEsNTksMSwxMDkyLDEwOSw5NywxMDgsMTAxLDU5LDEsOTc5Miw0LDMsMTA1LDEwOCwxMTQsOTkyOSw5OTM1LDk5NTAsMTA4LDEwNSwxMDMsNTksMSw2NDI1OSw0LDIsMTA1LDEwOCw5OTQxLDk5NDUsMTAzLDU5LDEsNjQyNTYsMTA1LDEwMyw1OSwxLDY0MjYwLDU5LDMsNTUzNDksNTY2MTEsMTA4LDEwNSwxMDMsNTksMSw2NDI1NywxMDgsMTA1LDEwMyw1OSwzLDEwMiwxMDYsNCwzLDk3LDEwOCwxMTYsOTk3NSw5OTc5LDk5ODQsMTE2LDU5LDEsOTgzNywxMDUsMTAzLDU5LDEsNjQyNTgsMTEwLDExNSw1OSwxLDk2NDksMTExLDEwMiw1OSwxLDQwMiw0LDIsMTEyLDExNCwxMDAwMCwxMDAwNSwxMDIsNTksMyw1NTM0OSw1NjY2Myw0LDIsOTcsMTA3LDEwMDExLDEwMDE2LDEwOCwxMDgsNTksMSw4NzA0LDQsMiw1OSwxMTgsMTAwMjIsMTAwMjQsMSw4OTE2LDU5LDEsMTA5NjksOTcsMTE0LDExNiwxMDUsMTEwLDExNiw1OSwxLDEwNzY1LDQsMiw5NywxMTEsMTAwNDIsMTAxNTksNCwyLDk5LDExNSwxMDA0OCwxMDE1NSw0LDYsNDksNTAsNTEsNTIsNTMsNTUsMTAwNjIsMTAxMDIsMTAxMTQsMTAxMzUsMTAxMzksMTAxNTEsNCw2LDUwLDUxLDUyLDUzLDU0LDU2LDEwMDc2LDEwMDgzLDEwMDg2LDEwMDkzLDEwMDk2LDEwMDk5LDUsMTg5LDEsNTksMTAwODEsMSwxODksNTksMSw4NTMxLDUsMTg4LDEsNTksMTAwOTEsMSwxODgsNTksMSw4NTMzLDU5LDEsODUzNyw1OSwxLDg1MzksNCwyLDUxLDUzLDEwMTA4LDEwMTExLDU5LDEsODUzMiw1OSwxLDg1MzQsNCwzLDUyLDUzLDU2LDEwMTIyLDEwMTI5LDEwMTMyLDUsMTkwLDEsNTksMTAxMjcsMSwxOTAsNTksMSw4NTM1LDU5LDEsODU0MCw1Myw1OSwxLDg1MzYsNCwyLDU0LDU2LDEwMTQ1LDEwMTQ4LDU5LDEsODUzOCw1OSwxLDg1NDEsNTYsNTksMSw4NTQyLDEwOCw1OSwxLDgyNjAsMTE5LDExMCw1OSwxLDg5OTQsOTksMTE0LDU5LDMsNTUzNDksNTY1MDcsNCwxNyw2OSw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA1LDEwNiwxMDgsMTEwLDExMSwxMTQsMTE1LDExNiwxMTgsMTAyMDYsMTAyMTcsMTAyNDcsMTAyNTQsMTAyNjgsMTAyNzMsMTAzNTgsMTAzNjMsMTAzNzQsMTAzODAsMTAzODUsMTA0MDYsMTA0NTgsMTA0NjQsMTA0NzAsMTA0OTcsMTA2MTAsNCwyLDU5LDEwOCwxMDIxMiwxMDIxNCwxLDg4MDcsNTksMSwxMDg5Miw0LDMsOTksMTA5LDExMiwxMDIyNSwxMDIzMSwxMDI0NCwxMTcsMTE2LDEwMSw1OSwxLDUwMSwxMDksOTcsNCwyLDU5LDEwMCwxMDIzOSwxMDI0MSwxLDk0Nyw1OSwxLDk4OSw1OSwxLDEwODg2LDExNCwxMDEsMTE4LDEwMSw1OSwxLDI4Nyw0LDIsMTA1LDEyMSwxMDI2MCwxMDI2NSwxMTQsOTksNTksMSwyODUsNTksMSwxMDc1LDExMSwxMTYsNTksMSwyODksNCw0LDU5LDEwOCwxMTMsMTE1LDEwMjgzLDEwMjg1LDEwMjg4LDEwMzA4LDEsODgwNSw1OSwxLDg5MjMsNCwzLDU5LDExMywxMTUsMTAyOTYsMTAyOTgsMTAzMDEsMSw4ODA1LDU5LDEsODgwNywxMDgsOTcsMTEwLDExNiw1OSwxLDEwODc4LDQsNCw1OSw5OSwxMDAsMTA4LDEwMzE4LDEwMzIwLDEwMzI0LDEwMzQ1LDEsMTA4NzgsOTksNTksMSwxMDkyMSwxMTEsMTE2LDQsMiw1OSwxMTEsMTAzMzIsMTAzMzQsMSwxMDg4MCw0LDIsNTksMTA4LDEwMzQwLDEwMzQyLDEsMTA4ODIsNTksMSwxMDg4NCw0LDIsNTksMTAxLDEwMzUxLDEwMzU0LDMsODkyMyw2NTAyNCwxMTUsNTksMSwxMDkwMCwxMTQsNTksMyw1NTM0OSw1NjYxMiw0LDIsNTksMTAzLDEwMzY5LDEwMzcxLDEsODgxMSw1OSwxLDg5MjEsMTA5LDEwMSwxMDgsNTksMSw4NTAzLDk5LDEyMSw1OSwxLDExMDcsNCw0LDU5LDY5LDk3LDEwNiwxMDM5NSwxMDM5NywxMDQwMCwxMDQwMywxLDg4MjMsNTksMSwxMDg5OCw1OSwxLDEwOTE3LDU5LDEsMTA5MTYsNCw0LDY5LDk3LDEwMSwxMTUsMTA0MTYsMTA0MTksMTA0MzQsMTA0NTMsNTksMSw4ODA5LDExMiw0LDIsNTksMTEyLDEwNDI2LDEwNDI4LDEsMTA4OTAsMTE0LDExMSwxMjAsNTksMSwxMDg5MCw0LDIsNTksMTEzLDEwNDQwLDEwNDQyLDEsMTA4ODgsNCwyLDU5LDExMywxMDQ0OCwxMDQ1MCwxLDEwODg4LDU5LDEsODgwOSwxMDUsMTA5LDU5LDEsODkzNSwxMTIsMTAyLDU5LDMsNTUzNDksNTY2NjQsOTcsMTE4LDEwMSw1OSwxLDk2LDQsMiw5OSwxMDUsMTA0NzYsMTA0ODAsMTE0LDU5LDEsODQ1OCwxMDksNCwzLDU5LDEwMSwxMDgsMTA0ODksMTA0OTEsMTA0OTQsMSw4ODE5LDU5LDEsMTA4OTQsNTksMSwxMDg5Niw1LDYyLDYsNTksOTksMTAwLDEwOCwxMTMsMTE0LDEwNTEyLDEwNTE0LDEwNTI3LDEwNTMyLDEwNTM4LDEwNTQ1LDEsNjIsNCwyLDk5LDEwNSwxMDUyMCwxMDUyMyw1OSwxLDEwOTE5LDExNCw1OSwxLDEwODc0LDExMSwxMTYsNTksMSw4OTE5LDgwLDk3LDExNCw1OSwxLDEwNjQ1LDExNywxMDEsMTE1LDExNiw1OSwxLDEwODc2LDQsNSw5NywxMDAsMTAxLDEwOCwxMTUsMTA1NTcsMTA1NzQsMTA1NzksMTA1OTksMTA2MDUsNCwyLDExMiwxMTQsMTA1NjMsMTA1NzAsMTEyLDExNCwxMTEsMTIwLDU5LDEsMTA4ODYsMTE0LDU5LDEsMTA2MTYsMTExLDExNiw1OSwxLDg5MTksMTEzLDQsMiwxMDgsMTEzLDEwNTg2LDEwNTkyLDEwMSwxMTUsMTE1LDU5LDEsODkyMywxMDgsMTAxLDExNSwxMTUsNTksMSwxMDg5MiwxMDEsMTE1LDExNSw1OSwxLDg4MjMsMTA1LDEwOSw1OSwxLDg4MTksNCwyLDEwMSwxMTAsMTA2MTYsMTA2MjYsMTE0LDExNiwxMTAsMTAxLDExMywxMTMsNTksMyw4ODA5LDY1MDI0LDY5LDU5LDMsODgwOSw2NTAyNCw0LDEwLDY1LDk3LDk4LDk5LDEwMSwxMDIsMTA3LDExMSwxMTUsMTIxLDEwNjUzLDEwNjU4LDEwNzEzLDEwNzE4LDEwNzI0LDEwNzYwLDEwNzY1LDEwNzg2LDEwODUwLDEwODc1LDExNCwxMTQsNTksMSw4NjYwLDQsNCwxMDUsMTA4LDEwOSwxMTQsMTA2NjgsMTA2NzQsMTA2NzgsMTA2ODQsMTE0LDExNSwxMTIsNTksMSw4MjAyLDEwMiw1OSwxLDE4OSwxMDUsMTA4LDExNiw1OSwxLDg0NTksNCwyLDEwMCwxMTQsMTA2OTAsMTA2OTUsOTksMTIxLDU5LDEsMTA5OCw0LDMsNTksOTksMTE5LDEwNzAzLDEwNzA1LDEwNzEwLDEsODU5NiwxMDUsMTE0LDU5LDEsMTA1NjgsNTksMSw4NjIxLDk3LDExNCw1OSwxLDg0NjMsMTA1LDExNCw5OSw1OSwxLDI5Myw0LDMsOTcsMTA4LDExNCwxMDczMiwxMDc0OCwxMDc1NCwxMTQsMTE2LDExNSw0LDIsNTksMTE3LDEwNzQxLDEwNzQzLDEsOTgyOSwxMDUsMTE2LDU5LDEsOTgyOSwxMDgsMTA1LDExMiw1OSwxLDgyMzAsOTksMTExLDExMCw1OSwxLDg4ODksMTE0LDU5LDMsNTUzNDksNTY2MTMsMTE1LDQsMiwxMDEsMTE5LDEwNzcyLDEwNzc5LDk3LDExNCwxMTEsMTE5LDU5LDEsMTA1MzMsOTcsMTE0LDExMSwxMTksNTksMSwxMDUzNCw0LDUsOTcsMTA5LDExMSwxMTIsMTE0LDEwNzk4LDEwODAzLDEwODA5LDEwODM5LDEwODQ0LDExNCwxMTQsNTksMSw4NzAzLDExNiwxMDQsMTE2LDU5LDEsODc2MywxMDcsNCwyLDEwOCwxMTQsMTA4MTYsMTA4MjcsMTAxLDEwMiwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYxNywxMDUsMTAzLDEwNCwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYxOCwxMDIsNTksMyw1NTM0OSw1NjY2NSw5OCw5NywxMTQsNTksMSw4MjEzLDQsMyw5OSwxMDgsMTE2LDEwODU4LDEwODYzLDEwODY5LDExNCw1OSwzLDU1MzQ5LDU2NTA5LDk3LDExNSwxMDQsNTksMSw4NDYzLDExNCwxMTEsMTA3LDU5LDEsMjk1LDQsMiw5OCwxMTIsMTA4ODEsMTA4ODcsMTE3LDEwOCwxMDgsNTksMSw4MjU5LDEwNCwxMDEsMTEwLDU5LDEsODIwOCw0LDE1LDk3LDk5LDEwMSwxMDIsMTAzLDEwNSwxMDYsMTA5LDExMCwxMTEsMTEyLDExMywxMTUsMTE2LDExNywxMDkyNSwxMDkzNiwxMDk1OCwxMDk3NywxMDk5MCwxMTAwMSwxMTAzOSwxMTA0NSwxMTEwMSwxMTE5MiwxMTIyMCwxMTIyNiwxMTIzNywxMTI4NSwxMTI5OSw5OSwxMTcsMTE2LDEwMSw1LDIzNywxLDU5LDEwOTM0LDEsMjM3LDQsMyw1OSwxMDUsMTIxLDEwOTQ0LDEwOTQ2LDEwOTU1LDEsODI5MSwxMTQsOTksNSwyMzgsMSw1OSwxMDk1MywxLDIzOCw1OSwxLDEwODAsNCwyLDk5LDEyMCwxMDk2NCwxMDk2OCwxMjEsNTksMSwxMDc3LDk5LDEwOCw1LDE2MSwxLDU5LDEwOTc1LDEsMTYxLDQsMiwxMDIsMTE0LDEwOTgzLDEwOTg2LDU5LDEsODY2MCw1OSwzLDU1MzQ5LDU2NjE0LDExNCw5NywxMTgsMTAxLDUsMjM2LDEsNTksMTA5OTksMSwyMzYsNCw0LDU5LDEwNSwxMTAsMTExLDExMDExLDExMDEzLDExMDI4LDExMDM0LDEsODUyMCw0LDIsMTA1LDExMCwxMTAxOSwxMTAyNCwxMTAsMTE2LDU5LDEsMTA3NjQsMTE2LDU5LDEsODc0OSwxMDIsMTA1LDExMCw1OSwxLDEwNzE2LDExNiw5Nyw1OSwxLDg0ODksMTA4LDEwNSwxMDMsNTksMSwzMDcsNCwzLDk3LDExMSwxMTIsMTEwNTMsMTEwOTIsMTEwOTYsNCwzLDk5LDEwMywxMTYsMTEwNjEsMTEwNjUsMTEwODgsMTE0LDU5LDEsMjk5LDQsMywxMDEsMTA4LDExMiwxMTA3MywxMTA3NiwxMTA4Miw1OSwxLDg0NjUsMTA1LDExMCwxMDEsNTksMSw4NDY0LDk3LDExNCwxMTYsNTksMSw4NDY1LDEwNCw1OSwxLDMwNSwxMDIsNTksMSw4ODg3LDEwMSwxMDAsNTksMSw0MzcsNCw1LDU5LDk5LDEwMiwxMTEsMTE2LDExMTEzLDExMTE1LDExMTIxLDExMTM2LDExMTQyLDEsODcxMiw5NywxMTQsMTAxLDU5LDEsODQ1MywxMDUsMTEwLDQsMiw1OSwxMTYsMTExMjksMTExMzEsMSw4NzM0LDEwNSwxMDEsNTksMSwxMDcxNywxMDAsMTExLDExNiw1OSwxLDMwNSw0LDUsNTksOTksMTAxLDEwOCwxMTIsMTExNTQsMTExNTYsMTExNjEsMTExNzksMTExODYsMSw4NzQ3LDk3LDEwOCw1OSwxLDg4OTAsNCwyLDEwMywxMTQsMTExNjcsMTExNzMsMTAxLDExNCwxMTUsNTksMSw4NDg0LDk5LDk3LDEwOCw1OSwxLDg4OTAsOTcsMTE0LDEwNCwxMDcsNTksMSwxMDc3NSwxMTQsMTExLDEwMCw1OSwxLDEwODEyLDQsNCw5OSwxMDMsMTEyLDExNiwxMTIwMiwxMTIwNiwxMTIxMSwxMTIxNiwxMjEsNTksMSwxMTA1LDExMSwxMTAsNTksMSwzMDMsMTAyLDU5LDMsNTUzNDksNTY2NjYsOTcsNTksMSw5NTMsMTE0LDExMSwxMDAsNTksMSwxMDgxMiwxMTcsMTAxLDExNSwxMTYsNSwxOTEsMSw1OSwxMTIzNSwxLDE5MSw0LDIsOTksMTA1LDExMjQzLDExMjQ4LDExNCw1OSwzLDU1MzQ5LDU2NTEwLDExMCw0LDUsNTksNjksMTAwLDExNSwxMTgsMTEyNjEsMTEyNjMsMTEyNjYsMTEyNzEsMTEyODIsMSw4NzEyLDU5LDEsODk1MywxMTEsMTE2LDU5LDEsODk0OSw0LDIsNTksMTE4LDExMjc3LDExMjc5LDEsODk0OCw1OSwxLDg5NDcsNTksMSw4NzEyLDQsMiw1OSwxMDUsMTEyOTEsMTEyOTMsMSw4MjkwLDEwOCwxMDAsMTAxLDU5LDEsMjk3LDQsMiwxMDcsMTA5LDExMzA1LDExMzEwLDk5LDEyMSw1OSwxLDExMTAsMTA4LDUsMjM5LDEsNTksMTEzMTYsMSwyMzksNCw2LDk5LDEwMiwxMDksMTExLDExNSwxMTcsMTEzMzIsMTEzNDYsMTEzNTEsMTEzNTcsMTEzNjMsMTEzODAsNCwyLDEwNSwxMjEsMTEzMzgsMTEzNDMsMTE0LDk5LDU5LDEsMzA5LDU5LDEsMTA4MSwxMTQsNTksMyw1NTM0OSw1NjYxNSw5NywxMTYsMTA0LDU5LDEsNTY3LDExMiwxMDIsNTksMyw1NTM0OSw1NjY2Nyw0LDIsOTksMTAxLDExMzY5LDExMzc0LDExNCw1OSwzLDU1MzQ5LDU2NTExLDExNCw5OSwxMjEsNTksMSwxMTEyLDEwNyw5OSwxMjEsNTksMSwxMTA4LDQsOCw5Nyw5OSwxMDIsMTAzLDEwNCwxMDYsMTExLDExNSwxMTQwNCwxMTQxOCwxMTQzMywxMTQzOCwxMTQ0NSwxMTQ1MCwxMTQ1NSwxMTQ2MSwxMTIsMTEyLDk3LDQsMiw1OSwxMTgsMTE0MTMsMTE0MTUsMSw5NTQsNTksMSwxMDA4LDQsMiwxMDEsMTIxLDExNDI0LDExNDMwLDEwMCwxMDUsMTA4LDU5LDEsMzExLDU5LDEsMTA4MiwxMTQsNTksMyw1NTM0OSw1NjYxNiwxMTQsMTAxLDEwMSwxMTAsNTksMSwzMTIsOTksMTIxLDU5LDEsMTA5Myw5OSwxMjEsNTksMSwxMTE2LDExMiwxMDIsNTksMyw1NTM0OSw1NjY2OCw5OSwxMTQsNTksMyw1NTM0OSw1NjUxMiw0LDIzLDY1LDY2LDY5LDcyLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA2LDEwOCwxMDksMTEwLDExMSwxMTIsMTE0LDExNSwxMTYsMTE3LDExOCwxMTUxNSwxMTUzOCwxMTU0NCwxMTU1NSwxMTU2MCwxMTcyMSwxMTc4MCwxMTgxOCwxMTg2OCwxMjEzNiwxMjE2MCwxMjE3MSwxMjIwMywxMjIwOCwxMjI0NiwxMjI3NSwxMjMyNywxMjUwOSwxMjUyMywxMjU2OSwxMjY0MSwxMjczMiwxMjc1Miw0LDMsOTcsMTE0LDExNiwxMTUyMywxMTUyOCwxMTUzMiwxMTQsMTE0LDU5LDEsODY2NiwxMTQsNTksMSw4NjU2LDk3LDEwNSwxMDgsNTksMSwxMDUyMyw5NywxMTQsMTE0LDU5LDEsMTA1MTAsNCwyLDU5LDEwMywxMTU1MCwxMTU1MiwxLDg4MDYsNTksMSwxMDg5MSw5NywxMTQsNTksMSwxMDU5NCw0LDksOTksMTAxLDEwMywxMDksMTEwLDExMiwxMTMsMTE0LDExNiwxMTU4MCwxMTU4NiwxMTU5NCwxMTYwMCwxMTYwNiwxMTYyNCwxMTYyNywxMTYzNiwxMTY5NCwxMTcsMTE2LDEwMSw1OSwxLDMxNCwxMDksMTEyLDExNiwxMjEsMTE4LDU5LDEsMTA2NzYsMTE0LDk3LDExMCw1OSwxLDg0NjYsOTgsMTAwLDk3LDU5LDEsOTU1LDEwMyw0LDMsNTksMTAwLDEwOCwxMTYxNSwxMTYxNywxMTYyMCwxLDEwMjE2LDU5LDEsMTA2NDEsMTAxLDU5LDEsMTAyMTYsNTksMSwxMDg4NSwxMTcsMTExLDUsMTcxLDEsNTksMTE2MzQsMSwxNzEsMTE0LDQsOCw1OSw5OCwxMDIsMTA0LDEwOCwxMTIsMTE1LDExNiwxMTY1NSwxMTY1NywxMTY2OSwxMTY3MywxMTY3NywxMTY4MSwxMTY4NSwxMTY5MCwxLDg1OTIsNCwyLDU5LDEwMiwxMTY2MywxMTY2NSwxLDg2NzYsMTE1LDU5LDEsMTA1MjcsMTE1LDU5LDEsMTA1MjUsMTA3LDU5LDEsODYxNywxMTIsNTksMSw4NjE5LDEwOCw1OSwxLDEwNTUzLDEwNSwxMDksNTksMSwxMDYxMSwxMDgsNTksMSw4NjEwLDQsMyw1OSw5NywxMDEsMTE3MDIsMTE3MDQsMTE3MDksMSwxMDkyMywxMDUsMTA4LDU5LDEsMTA1MjEsNCwyLDU5LDExNSwxMTcxNSwxMTcxNywxLDEwOTI1LDU5LDMsMTA5MjUsNjUwMjQsNCwzLDk3LDk4LDExNCwxMTcyOSwxMTczNCwxMTczOSwxMTQsMTE0LDU5LDEsMTA1MDgsMTE0LDEwNyw1OSwxLDEwMDk4LDQsMiw5NywxMDcsMTE3NDUsMTE3NTgsOTksNCwyLDEwMSwxMDcsMTE3NTIsMTE3NTUsNTksMSwxMjMsNTksMSw5MSw0LDIsMTAxLDExNSwxMTc2NCwxMTc2Nyw1OSwxLDEwNjM1LDEwOCw0LDIsMTAwLDExNywxMTc3NCwxMTc3Nyw1OSwxLDEwNjM5LDU5LDEsMTA2MzcsNCw0LDk3LDEwMSwxMTcsMTIxLDExNzkwLDExNzk2LDExODExLDExODE1LDExNCwxMTEsMTEwLDU5LDEsMzE4LDQsMiwxMDAsMTA1LDExODAyLDExODA3LDEwNSwxMDgsNTksMSwzMTYsMTA4LDU5LDEsODk2OCw5OCw1OSwxLDEyMyw1OSwxLDEwODMsNCw0LDk5LDExMywxMTQsMTE1LDExODI4LDExODMyLDExODQ1LDExODY0LDk3LDU5LDEsMTA1NTAsMTE3LDExMSw0LDIsNTksMTE0LDExODQwLDExODQyLDEsODIyMCw1OSwxLDgyMjIsNCwyLDEwMCwxMTcsMTE4NTEsMTE4NTcsMTA0LDk3LDExNCw1OSwxLDEwNTk5LDExNSwxMDQsOTcsMTE0LDU5LDEsMTA1NzEsMTA0LDU5LDEsODYyNiw0LDUsNTksMTAyLDEwMywxMTMsMTE1LDExODgwLDExODgyLDEyMDA4LDEyMDExLDEyMDMxLDEsODgwNCwxMTYsNCw1LDk3LDEwNCwxMDgsMTE0LDExNiwxMTg5NSwxMTkxMywxMTkzNSwxMTk0NywxMTk5NiwxMTQsMTE0LDExMSwxMTksNCwyLDU5LDExNiwxMTkwNSwxMTkwNywxLDg1OTIsOTcsMTA1LDEwOCw1OSwxLDg2MTAsOTcsMTE0LDExMiwxMTEsMTExLDExMCw0LDIsMTAwLDExNywxMTkyNSwxMTkzMSwxMTEsMTE5LDExMCw1OSwxLDg2MzcsMTEyLDU5LDEsODYzNiwxMDEsMTAyLDExNiw5NywxMTQsMTE0LDExMSwxMTksMTE1LDU5LDEsODY0NywxMDUsMTAzLDEwNCwxMTYsNCwzLDk3LDEwNCwxMTUsMTE5NTksMTE5NzQsMTE5ODQsMTE0LDExNCwxMTEsMTE5LDQsMiw1OSwxMTUsMTE5NjksMTE5NzEsMSw4NTk2LDU5LDEsODY0Niw5NywxMTQsMTEyLDExMSwxMTEsMTEwLDExNSw1OSwxLDg2NTEsMTEzLDExNywxMDUsMTAzLDk3LDExNCwxMTQsMTExLDExOSw1OSwxLDg2MjEsMTA0LDExNCwxMDEsMTAxLDExNiwxMDUsMTA5LDEwMSwxMTUsNTksMSw4OTA3LDU5LDEsODkyMiw0LDMsNTksMTEzLDExNSwxMjAxOSwxMjAyMSwxMjAyNCwxLDg4MDQsNTksMSw4ODA2LDEwOCw5NywxMTAsMTE2LDU5LDEsMTA4NzcsNCw1LDU5LDk5LDEwMCwxMDMsMTE1LDEyMDQzLDEyMDQ1LDEyMDQ5LDEyMDcwLDEyMDgzLDEsMTA4NzcsOTksNTksMSwxMDkyMCwxMTEsMTE2LDQsMiw1OSwxMTEsMTIwNTcsMTIwNTksMSwxMDg3OSw0LDIsNTksMTE0LDEyMDY1LDEyMDY3LDEsMTA4ODEsNTksMSwxMDg4Myw0LDIsNTksMTAxLDEyMDc2LDEyMDc5LDMsODkyMiw2NTAyNCwxMTUsNTksMSwxMDg5OSw0LDUsOTcsMTAwLDEwMSwxMDMsMTE1LDEyMDk1LDEyMTAzLDEyMTA4LDEyMTI2LDEyMTMxLDExMiwxMTIsMTE0LDExMSwxMjAsNTksMSwxMDg4NSwxMTEsMTE2LDU5LDEsODkxOCwxMTMsNCwyLDEwMywxMTMsMTIxMTUsMTIxMjAsMTE2LDExNCw1OSwxLDg5MjIsMTAzLDExNiwxMTQsNTksMSwxMDg5MSwxMTYsMTE0LDU5LDEsODgyMiwxMDUsMTA5LDU5LDEsODgxOCw0LDMsMTA1LDEwOCwxMTQsMTIxNDQsMTIxNTAsMTIxNTYsMTE1LDEwNCwxMTYsNTksMSwxMDYyMCwxMTEsMTExLDExNCw1OSwxLDg5NzAsNTksMyw1NTM0OSw1NjYxNyw0LDIsNTksNjksMTIxNjYsMTIxNjgsMSw4ODIyLDU5LDEsMTA4OTcsNCwyLDk3LDk4LDEyMTc3LDEyMTk4LDExNCw0LDIsMTAwLDExNywxMjE4NCwxMjE4Nyw1OSwxLDg2MzcsNCwyLDU5LDEwOCwxMjE5MywxMjE5NSwxLDg2MzYsNTksMSwxMDYwMiwxMDgsMTA3LDU5LDEsOTYwNCw5OSwxMjEsNTksMSwxMTEzLDQsNSw1OSw5Nyw5OSwxMDQsMTE2LDEyMjIwLDEyMjIyLDEyMjI3LDEyMjM1LDEyMjQxLDEsODgxMCwxMTQsMTE0LDU5LDEsODY0NywxMTEsMTE0LDExMCwxMDEsMTE0LDU5LDEsODk5MCw5NywxMTQsMTAwLDU5LDEsMTA2MDMsMTE0LDEwNSw1OSwxLDk3MjIsNCwyLDEwNSwxMTEsMTIyNTIsMTIyNTgsMTAwLDExMSwxMTYsNTksMSwzMjAsMTE3LDExNSwxMTYsNCwyLDU5LDk3LDEyMjY3LDEyMjY5LDEsOTEzNiw5OSwxMDQsMTAxLDU5LDEsOTEzNiw0LDQsNjksOTcsMTAxLDExNSwxMjI4NSwxMjI4OCwxMjMwMywxMjMyMiw1OSwxLDg4MDgsMTEyLDQsMiw1OSwxMTIsMTIyOTUsMTIyOTcsMSwxMDg4OSwxMTQsMTExLDEyMCw1OSwxLDEwODg5LDQsMiw1OSwxMTMsMTIzMDksMTIzMTEsMSwxMDg4Nyw0LDIsNTksMTEzLDEyMzE3LDEyMzE5LDEsMTA4ODcsNTksMSw4ODA4LDEwNSwxMDksNTksMSw4OTM0LDQsOCw5Nyw5OCwxMTAsMTExLDExMiwxMTYsMTE5LDEyMiwxMjM0NSwxMjM1OSwxMjM2NCwxMjQyMSwxMjQ0NiwxMjQ2NywxMjQ3NCwxMjQ5MCw0LDIsMTEwLDExNCwxMjM1MSwxMjM1NSwxMDMsNTksMSwxMDIyMCwxMTQsNTksMSw4NzAxLDExNCwxMDcsNTksMSwxMDIxNCwxMDMsNCwzLDEwOCwxMDksMTE0LDEyMzczLDEyNDAxLDEyNDA5LDEwMSwxMDIsMTE2LDQsMiw5NywxMTQsMTIzODIsMTIzODksMTE0LDExNCwxMTEsMTE5LDU5LDEsMTAyMjksMTA1LDEwMywxMDQsMTE2LDk3LDExNCwxMTQsMTExLDExOSw1OSwxLDEwMjMxLDk3LDExMiwxMTUsMTE2LDExMSw1OSwxLDEwMjM2LDEwNSwxMDMsMTA0LDExNiw5NywxMTQsMTE0LDExMSwxMTksNTksMSwxMDIzMCwxMTIsOTcsMTE0LDExNCwxMTEsMTE5LDQsMiwxMDgsMTE0LDEyNDMzLDEyNDM5LDEwMSwxMDIsMTE2LDU5LDEsODYxOSwxMDUsMTAzLDEwNCwxMTYsNTksMSw4NjIwLDQsMyw5NywxMDIsMTA4LDEyNDU0LDEyNDU4LDEyNDYyLDExNCw1OSwxLDEwNjI5LDU5LDMsNTUzNDksNTY2NjksMTE3LDExNSw1OSwxLDEwNzk3LDEwNSwxMDksMTAxLDExNSw1OSwxLDEwODA0LDQsMiw5Nyw5OCwxMjQ4MCwxMjQ4NSwxMTUsMTE2LDU5LDEsODcyNyw5NywxMTQsNTksMSw5NSw0LDMsNTksMTAxLDEwMiwxMjQ5OCwxMjUwMCwxMjUwNiwxLDk2NzQsMTEwLDEwMywxMDEsNTksMSw5Njc0LDU5LDEsMTA3MzEsOTcsMTE0LDQsMiw1OSwxMDgsMTI1MTcsMTI1MTksMSw0MCwxMTYsNTksMSwxMDY0Myw0LDUsOTcsOTksMTA0LDEwOSwxMTYsMTI1MzUsMTI1NDAsMTI1NDgsMTI1NjEsMTI1NjQsMTE0LDExNCw1OSwxLDg2NDYsMTExLDExNCwxMTAsMTAxLDExNCw1OSwxLDg5OTEsOTcsMTE0LDQsMiw1OSwxMDAsMTI1NTYsMTI1NTgsMSw4NjUxLDU5LDEsMTA2MDUsNTksMSw4MjA2LDExNCwxMDUsNTksMSw4ODk1LDQsNiw5Nyw5OSwxMDQsMTA1LDExMywxMTYsMTI1ODMsMTI1ODksMTI1OTQsMTI1OTcsMTI2MTQsMTI2MzUsMTEzLDExNywxMTEsNTksMSw4MjQ5LDExNCw1OSwzLDU1MzQ5LDU2NTEzLDU5LDEsODYyNCwxMDksNCwzLDU5LDEwMSwxMDMsMTI2MDYsMTI2MDgsMTI2MTEsMSw4ODE4LDU5LDEsMTA4OTMsNTksMSwxMDg5NSw0LDIsOTgsMTE3LDEyNjIwLDEyNjIzLDU5LDEsOTEsMTExLDQsMiw1OSwxMTQsMTI2MzAsMTI2MzIsMSw4MjE2LDU5LDEsODIxOCwxMTQsMTExLDEwNyw1OSwxLDMyMiw1LDYwLDgsNTksOTksMTAwLDEwNCwxMDUsMTA4LDExMywxMTQsMTI2NjAsMTI2NjIsMTI2NzUsMTI2ODAsMTI2ODYsMTI2OTIsMTI2OTgsMTI3MDUsMSw2MCw0LDIsOTksMTA1LDEyNjY4LDEyNjcxLDU5LDEsMTA5MTgsMTE0LDU5LDEsMTA4NzMsMTExLDExNiw1OSwxLDg5MTgsMTE0LDEwMSwxMDEsNTksMSw4OTA3LDEwOSwxMDEsMTE1LDU5LDEsODkwNSw5NywxMTQsMTE0LDU5LDEsMTA2MTQsMTE3LDEwMSwxMTUsMTE2LDU5LDEsMTA4NzUsNCwyLDgwLDEwNSwxMjcxMSwxMjcxNiw5NywxMTQsNTksMSwxMDY0Niw0LDMsNTksMTAxLDEwMiwxMjcyNCwxMjcyNiwxMjcyOSwxLDk2NjcsNTksMSw4ODg0LDU5LDEsOTY2NiwxMTQsNCwyLDEwMCwxMTcsMTI3MzksMTI3NDYsMTE1LDEwNCw5NywxMTQsNTksMSwxMDU3MCwxMDQsOTcsMTE0LDU5LDEsMTA1OTgsNCwyLDEwMSwxMTAsMTI3NTgsMTI3NjgsMTE0LDExNiwxMTAsMTAxLDExMywxMTMsNTksMyw4ODA4LDY1MDI0LDY5LDU5LDMsODgwOCw2NTAyNCw0LDE0LDY4LDk3LDk5LDEwMCwxMDEsMTAyLDEwNCwxMDUsMTA4LDExMCwxMTEsMTEyLDExNSwxMTcsMTI4MDMsMTI4MDksMTI4OTMsMTI5MDgsMTI5MTQsMTI5MjgsMTI5MzMsMTI5MzcsMTMwMTEsMTMwMjUsMTMwMzIsMTMwNDksMTMwNTIsMTMwNjksNjgsMTExLDExNiw1OSwxLDg3NjIsNCw0LDk5LDEwOCwxMTIsMTE0LDEyODE5LDEyODI3LDEyODQ5LDEyODg3LDExNCw1LDE3NSwxLDU5LDEyODI1LDEsMTc1LDQsMiwxMDEsMTE2LDEyODMzLDEyODM2LDU5LDEsOTc5NCw0LDIsNTksMTAxLDEyODQyLDEyODQ0LDEsMTAwMTYsMTE1LDEwMSw1OSwxLDEwMDE2LDQsMiw1OSwxMTUsMTI4NTUsMTI4NTcsMSw4NjE0LDExNiwxMTEsNCw0LDU5LDEwMCwxMDgsMTE3LDEyODY5LDEyODcxLDEyODc3LDEyODgzLDEsODYxNCwxMTEsMTE5LDExMCw1OSwxLDg2MTUsMTAxLDEwMiwxMTYsNTksMSw4NjEyLDExMiw1OSwxLDg2MTMsMTA3LDEwMSwxMTQsNTksMSw5NjQ2LDQsMiwxMTEsMTIxLDEyODk5LDEyOTA1LDEwOSwxMDksOTcsNTksMSwxMDc5Myw1OSwxLDEwODQsOTcsMTE1LDEwNCw1OSwxLDgyMTIsOTcsMTE1LDExNywxMTQsMTAxLDEwMCw5NywxMTAsMTAzLDEwOCwxMDEsNTksMSw4NzM3LDExNCw1OSwzLDU1MzQ5LDU2NjE4LDExMSw1OSwxLDg0ODcsNCwzLDk5LDEwMCwxMTAsMTI5NDUsMTI5NTQsMTI5ODUsMTE0LDExMSw1LDE4MSwxLDU5LDEyOTUyLDEsMTgxLDQsNCw1OSw5Nyw5OSwxMDAsMTI5NjQsMTI5NjYsMTI5NzEsMTI5NzYsMSw4NzM5LDExNSwxMTYsNTksMSw0MiwxMDUsMTE0LDU5LDEsMTA5OTIsMTExLDExNiw1LDE4MywxLDU5LDEyOTgzLDEsMTgzLDExNywxMTUsNCwzLDU5LDk4LDEwMCwxMjk5NSwxMjk5NywxMzAwMCwxLDg3MjIsNTksMSw4ODYzLDQsMiw1OSwxMTcsMTMwMDYsMTMwMDgsMSw4NzYwLDU5LDEsMTA3OTQsNCwyLDk5LDEwMCwxMzAxNywxMzAyMSwxMTIsNTksMSwxMDk3MSwxMTQsNTksMSw4MjMwLDExMiwxMDgsMTE3LDExNSw1OSwxLDg3MjMsNCwyLDEwMCwxMTIsMTMwMzgsMTMwNDQsMTAxLDEwOCwxMTUsNTksMSw4ODcxLDEwMiw1OSwzLDU1MzQ5LDU2NjcwLDU5LDEsODcyMyw0LDIsOTksMTE2LDEzMDU4LDEzMDYzLDExNCw1OSwzLDU1MzQ5LDU2NTE0LDExMiwxMTEsMTE1LDU5LDEsODc2Niw0LDMsNTksMTA4LDEwOSwxMzA3NywxMzA3OSwxMzA4NywxLDk1NiwxMTYsMTA1LDEwOSw5NywxMTIsNTksMSw4ODg4LDk3LDExMiw1OSwxLDg4ODgsNCwyNCw3MSw3Niw4Miw4Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA4LDEwOSwxMTEsMTEyLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEzMTQyLDEzMTY1LDEzMjE3LDEzMjI5LDEzMjQ3LDEzMzMwLDEzMzU5LDEzNDE0LDEzNDIwLDEzNTA4LDEzNTEzLDEzNTc5LDEzNjAyLDEzNjI2LDEzNjMxLDEzNzYyLDEzNzY3LDEzODU1LDEzOTM2LDEzOTk1LDE0MjE0LDE0Mjg1LDE0MzEyLDE0NDMyLDQsMiwxMDMsMTE2LDEzMTQ4LDEzMTUyLDU5LDMsODkyMSw4MjQsNCwyLDU5LDExOCwxMzE1OCwxMzE2MSwzLDg4MTEsODQwMiw1OSwzLDg4MTEsODI0LDQsMywxMDEsMTA4LDExNiwxMzE3MywxMzIwMCwxMzIwNCwxMDIsMTE2LDQsMiw5NywxMTQsMTMxODEsMTMxODgsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY1MywxMDUsMTAzLDEwNCwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY1NCw1OSwzLDg5MjAsODI0LDQsMiw1OSwxMTgsMTMyMTAsMTMyMTMsMyw4ODEwLDg0MDIsNTksMyw4ODEwLDgyNCwxMDUsMTAzLDEwNCwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODY1NSw0LDIsNjgsMTAwLDEzMjM1LDEzMjQxLDk3LDExNSwxMDQsNTksMSw4ODc5LDk3LDExNSwxMDQsNTksMSw4ODc4LDQsNSw5OCw5OSwxMTAsMTEyLDExNiwxMzI1OSwxMzI2NCwxMzI3MCwxMzI3NSwxMzMwOCwxMDgsOTcsNTksMSw4NzExLDExNywxMTYsMTAxLDU5LDEsMzI0LDEwMyw1OSwzLDg3MzYsODQwMiw0LDUsNTksNjksMTA1LDExMSwxMTIsMTMyODcsMTMyODksMTMyOTMsMTMyOTgsMTMzMDIsMSw4Nzc3LDU5LDMsMTA4NjQsODI0LDEwMCw1OSwzLDg3NzksODI0LDExNSw1OSwxLDMyOSwxMTQsMTExLDEyMCw1OSwxLDg3NzcsMTE3LDExNCw0LDIsNTksOTcsMTMzMTYsMTMzMTgsMSw5ODM4LDEwOCw0LDIsNTksMTE1LDEzMzI1LDEzMzI3LDEsOTgzOCw1OSwxLDg0NjksNCwyLDExNSwxMTcsMTMzMzYsMTMzNDQsMTEyLDUsMTYwLDEsNTksMTMzNDIsMSwxNjAsMTA5LDExMiw0LDIsNTksMTAxLDEzMzUyLDEzMzU1LDMsODc4Miw4MjQsNTksMyw4NzgzLDgyNCw0LDUsOTcsMTAxLDExMSwxMTcsMTIxLDEzMzcxLDEzMzg1LDEzMzkxLDEzNDA3LDEzNDExLDQsMiwxMTIsMTE0LDEzMzc3LDEzMzgwLDU5LDEsMTA4MTksMTExLDExMCw1OSwxLDMyOCwxMDAsMTA1LDEwOCw1OSwxLDMyNiwxMTAsMTAzLDQsMiw1OSwxMDAsMTMzOTksMTM0MDEsMSw4Nzc1LDExMSwxMTYsNTksMywxMDg2MSw4MjQsMTEyLDU5LDEsMTA4MTgsNTksMSwxMDg1LDk3LDExNSwxMDQsNTksMSw4MjExLDQsNyw1OSw2NSw5NywxMDAsMTEzLDExNSwxMjAsMTM0MzYsMTM0MzgsMTM0NDMsMTM0NjYsMTM0NzIsMTM0NzgsMTM0OTQsMSw4ODAwLDExNCwxMTQsNTksMSw4NjYzLDExNCw0LDIsMTA0LDExNCwxMzQ1MCwxMzQ1NCwxMDcsNTksMSwxMDUzMiw0LDIsNTksMTExLDEzNDYwLDEzNDYyLDEsODU5OSwxMTksNTksMSw4NTk5LDExMSwxMTYsNTksMyw4Nzg0LDgyNCwxMTcsMTA1LDExOCw1OSwxLDg4MDIsNCwyLDEwMSwxMDUsMTM0ODQsMTM0ODksOTcsMTE0LDU5LDEsMTA1MzYsMTA5LDU5LDMsODc3MCw4MjQsMTA1LDExNSwxMTYsNCwyLDU5LDExNSwxMzUwMywxMzUwNSwxLDg3MDgsNTksMSw4NzA4LDExNCw1OSwzLDU1MzQ5LDU2NjE5LDQsNCw2OSwxMDEsMTE1LDExNiwxMzUyMywxMzUyNywxMzU2MywxMzU2OCw1OSwzLDg4MDcsODI0LDQsMyw1OSwxMTMsMTE1LDEzNTM1LDEzNTM3LDEzNTU5LDEsODgxNyw0LDMsNTksMTEzLDExNSwxMzU0NSwxMzU0NywxMzU1MSwxLDg4MTcsNTksMyw4ODA3LDgyNCwxMDgsOTcsMTEwLDExNiw1OSwzLDEwODc4LDgyNCw1OSwzLDEwODc4LDgyNCwxMDUsMTA5LDU5LDEsODgyMSw0LDIsNTksMTE0LDEzNTc0LDEzNTc2LDEsODgxNSw1OSwxLDg4MTUsNCwzLDY1LDk3LDExMiwxMzU4NywxMzU5MiwxMzU5NywxMTQsMTE0LDU5LDEsODY1NCwxMTQsMTE0LDU5LDEsODYyMiw5NywxMTQsNTksMSwxMDk5NCw0LDMsNTksMTE1LDExOCwxMzYxMCwxMzYxMiwxMzYyMywxLDg3MTUsNCwyLDU5LDEwMCwxMzYxOCwxMzYyMCwxLDg5NTYsNTksMSw4OTU0LDU5LDEsODcxNSw5OSwxMjEsNTksMSwxMTE0LDQsNyw2NSw2OSw5NywxMDAsMTAxLDExNSwxMTYsMTM2NDcsMTM2NTIsMTM2NTYsMTM2NjEsMTM2NjUsMTM3MzcsMTM3NDIsMTE0LDExNCw1OSwxLDg2NTMsNTksMyw4ODA2LDgyNCwxMTQsMTE0LDU5LDEsODYwMiwxMTQsNTksMSw4MjI5LDQsNCw1OSwxMDIsMTEzLDExNSwxMzY3NSwxMzY3NywxMzcwMywxMzcyNSwxLDg4MTYsMTE2LDQsMiw5NywxMTQsMTM2ODQsMTM2OTEsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYwMiwxMDUsMTAzLDEwNCwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYyMiw0LDMsNTksMTEzLDExNSwxMzcxMSwxMzcxMywxMzcxNywxLDg4MTYsNTksMyw4ODA2LDgyNCwxMDgsOTcsMTEwLDExNiw1OSwzLDEwODc3LDgyNCw0LDIsNTksMTE1LDEzNzMxLDEzNzM0LDMsMTA4NzcsODI0LDU5LDEsODgxNCwxMDUsMTA5LDU5LDEsODgyMCw0LDIsNTksMTE0LDEzNzQ4LDEzNzUwLDEsODgxNCwxMDUsNCwyLDU5LDEwMSwxMzc1NywxMzc1OSwxLDg5MzgsNTksMSw4OTQwLDEwNSwxMDAsNTksMSw4NzQwLDQsMiwxMTIsMTE2LDEzNzczLDEzNzc4LDEwMiw1OSwzLDU1MzQ5LDU2NjcxLDUsMTcyLDMsNTksMTA1LDExMCwxMzc4NywxMzc4OSwxMzgyOSwxLDE3MiwxMTAsNCw0LDU5LDY5LDEwMCwxMTgsMTM4MDAsMTM4MDIsMTM4MDYsMTM4MTIsMSw4NzEzLDU5LDMsODk1Myw4MjQsMTExLDExNiw1OSwzLDg5NDksODI0LDQsMyw5Nyw5OCw5OSwxMzgyMCwxMzgyMywxMzgyNiw1OSwxLDg3MTMsNTksMSw4OTUxLDU5LDEsODk1MCwxMDUsNCwyLDU5LDExOCwxMzgzNiwxMzgzOCwxLDg3MTYsNCwzLDk3LDk4LDk5LDEzODQ2LDEzODQ5LDEzODUyLDU5LDEsODcxNiw1OSwxLDg5NTgsNTksMSw4OTU3LDQsMyw5NywxMTEsMTE0LDEzODYzLDEzODkyLDEzODk5LDExNCw0LDQsNTksOTcsMTE1LDExNiwxMzg3NCwxMzg3NiwxMzg4MywxMzg4OCwxLDg3NDIsMTA4LDEwOCwxMDEsMTA4LDU5LDEsODc0MiwxMDgsNTksMywxMTAwNSw4NDIxLDU5LDMsODcwNiw4MjQsMTA4LDEwNSwxMTAsMTE2LDU5LDEsMTA3NzIsNCwzLDU5LDk5LDEwMSwxMzkwNywxMzkwOSwxMzkxNCwxLDg4MzIsMTE3LDEwMSw1OSwxLDg5MjgsNCwyLDU5LDk5LDEzOTIwLDEzOTIzLDMsMTA5MjcsODI0LDQsMiw1OSwxMDEsMTM5MjksMTM5MzEsMSw4ODMyLDExMyw1OSwzLDEwOTI3LDgyNCw0LDQsNjUsOTcsMTA1LDExNiwxMzk0NiwxMzk1MSwxMzk3MSwxMzk4MiwxMTQsMTE0LDU5LDEsODY1NSwxMTQsMTE0LDQsMyw1OSw5OSwxMTksMTM5NjEsMTM5NjMsMTM5NjcsMSw4NjAzLDU5LDMsMTA1NDcsODI0LDU5LDMsODYwNSw4MjQsMTAzLDEwNCwxMTYsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYwMywxMTQsMTA1LDQsMiw1OSwxMDEsMTM5OTAsMTM5OTIsMSw4OTM5LDU5LDEsODk0MSw0LDcsOTksMTA0LDEwNSwxMDksMTEyLDExMywxMTcsMTQwMTEsMTQwMzYsMTQwNjAsMTQwODAsMTQwODUsMTQwOTAsMTQxMDYsNCw0LDU5LDk5LDEwMSwxMTQsMTQwMjEsMTQwMjMsMTQwMjgsMTQwMzIsMSw4ODMzLDExNywxMDEsNTksMSw4OTI5LDU5LDMsMTA5MjgsODI0LDU5LDMsNTUzNDksNTY1MTUsMTExLDExNCwxMTYsNCwyLDEwOSwxMTIsMTQwNDUsMTQwNTAsMTA1LDEwMCw1OSwxLDg3NDAsOTcsMTE0LDk3LDEwOCwxMDgsMTAxLDEwOCw1OSwxLDg3NDIsMTA5LDQsMiw1OSwxMDEsMTQwNjcsMTQwNjksMSw4NzY5LDQsMiw1OSwxMTMsMTQwNzUsMTQwNzcsMSw4NzcyLDU5LDEsODc3MiwxMDUsMTAwLDU5LDEsODc0MCw5NywxMTQsNTksMSw4NzQyLDExNSwxMTcsNCwyLDk4LDExMiwxNDA5OCwxNDEwMiwxMDEsNTksMSw4OTMwLDEwMSw1OSwxLDg5MzEsNCwzLDk4LDk5LDExMiwxNDExNCwxNDE1NywxNDE3MSw0LDQsNTksNjksMTAxLDExNSwxNDEyNCwxNDEyNiwxNDEzMCwxNDEzMywxLDg4MzYsNTksMywxMDk0OSw4MjQsNTksMSw4ODQwLDEwMSwxMTYsNCwyLDU5LDEwMSwxNDE0MSwxNDE0NCwzLDg4MzQsODQwMiwxMTMsNCwyLDU5LDExMywxNDE1MSwxNDE1MywxLDg4NDAsNTksMywxMDk0OSw4MjQsOTksNCwyLDU5LDEwMSwxNDE2NCwxNDE2NiwxLDg4MzMsMTEzLDU5LDMsMTA5MjgsODI0LDQsNCw1OSw2OSwxMDEsMTE1LDE0MTgxLDE0MTgzLDE0MTg3LDE0MTkwLDEsODgzNyw1OSwzLDEwOTUwLDgyNCw1OSwxLDg4NDEsMTAxLDExNiw0LDIsNTksMTAxLDE0MTk4LDE0MjAxLDMsODgzNSw4NDAyLDExMyw0LDIsNTksMTEzLDE0MjA4LDE0MjEwLDEsODg0MSw1OSwzLDEwOTUwLDgyNCw0LDQsMTAzLDEwNSwxMDgsMTE0LDE0MjI0LDE0MjI4LDE0MjM4LDE0MjQyLDEwOCw1OSwxLDg4MjUsMTA4LDEwMCwxMDEsNSwyNDEsMSw1OSwxNDIzNiwxLDI0MSwxMDMsNTksMSw4ODI0LDEwNSw5NywxMTAsMTAzLDEwOCwxMDEsNCwyLDEwOCwxMTQsMTQyNTQsMTQyNjksMTAxLDEwMiwxMTYsNCwyLDU5LDEwMSwxNDI2MywxNDI2NSwxLDg5MzgsMTEzLDU5LDEsODk0MCwxMDUsMTAzLDEwNCwxMTYsNCwyLDU5LDEwMSwxNDI3OSwxNDI4MSwxLDg5MzksMTEzLDU5LDEsODk0MSw0LDIsNTksMTA5LDE0MjkxLDE0MjkzLDEsOTU3LDQsMyw1OSwxMDEsMTE1LDE0MzAxLDE0MzAzLDE0MzA4LDEsMzUsMTE0LDExMSw1OSwxLDg0NzAsMTEyLDU5LDEsODE5OSw0LDksNjgsNzIsOTcsMTAwLDEwMywxMDUsMTA4LDExNCwxMTUsMTQzMzIsMTQzMzgsMTQzNDQsMTQzNDksMTQzNTUsMTQzNjksMTQzNzYsMTQ0MDgsMTQ0MjYsOTcsMTE1LDEwNCw1OSwxLDg4NzcsOTcsMTE0LDExNCw1OSwxLDEwNTAwLDExMiw1OSwzLDg3ODEsODQwMiw5NywxMTUsMTA0LDU5LDEsODg3Niw0LDIsMTAxLDExNiwxNDM2MSwxNDM2NSw1OSwzLDg4MDUsODQwMiw1OSwzLDYyLDg0MDIsMTEwLDEwMiwxMDUsMTEwLDU5LDEsMTA3MTgsNCwzLDY1LDEwMSwxMTYsMTQzODQsMTQzODksMTQzOTMsMTE0LDExNCw1OSwxLDEwNDk4LDU5LDMsODgwNCw4NDAyLDQsMiw1OSwxMTQsMTQzOTksMTQ0MDIsMyw2MCw4NDAyLDEwNSwxMDEsNTksMyw4ODg0LDg0MDIsNCwyLDY1LDExNiwxNDQxNCwxNDQxOSwxMTQsMTE0LDU5LDEsMTA0OTksMTE0LDEwNSwxMDEsNTksMyw4ODg1LDg0MDIsMTA1LDEwOSw1OSwzLDg3NjQsODQwMiw0LDMsNjUsOTcsMTEwLDE0NDQwLDE0NDQ1LDE0NDY4LDExNCwxMTQsNTksMSw4NjYyLDExNCw0LDIsMTA0LDExNCwxNDQ1MiwxNDQ1NiwxMDcsNTksMSwxMDUzMSw0LDIsNTksMTExLDE0NDYyLDE0NDY0LDEsODU5OCwxMTksNTksMSw4NTk4LDEwMSw5NywxMTQsNTksMSwxMDUzNSw0LDE4LDgzLDk3LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwOCwxMDksMTExLDExMiwxMTQsMTE1LDExNiwxMTcsMTE4LDE0NTEyLDE0NTE1LDE0NTM1LDE0NTYwLDE0NTk3LDE0NjAzLDE0NjE4LDE0NjQzLDE0NjU3LDE0NjYyLDE0NzAxLDE0NzQxLDE0NzQ3LDE0NzY5LDE0ODUxLDE0ODc3LDE0OTA3LDE0OTE2LDU5LDEsOTQxNiw0LDIsOTksMTE1LDE0NTIxLDE0NTMxLDExNywxMTYsMTAxLDUsMjQzLDEsNTksMTQ1MjksMSwyNDMsMTE2LDU5LDEsODg1OSw0LDIsMTA1LDEyMSwxNDU0MSwxNDU1NywxMTQsNCwyLDU5LDk5LDE0NTQ4LDE0NTUwLDEsODg1OCw1LDI0NCwxLDU5LDE0NTU1LDEsMjQ0LDU5LDEsMTA4Niw0LDUsOTcsOTgsMTA1LDExMSwxMTUsMTQ1NzIsMTQ1NzcsMTQ1ODMsMTQ1ODcsMTQ1OTEsMTE1LDEwNCw1OSwxLDg4NjEsMTA4LDk3LDk5LDU5LDEsMzM3LDExOCw1OSwxLDEwODA4LDExNiw1OSwxLDg4NTcsMTExLDEwOCwxMDAsNTksMSwxMDY4NCwxMDgsMTA1LDEwMyw1OSwxLDMzOSw0LDIsOTksMTE0LDE0NjA5LDE0NjE0LDEwNSwxMTQsNTksMSwxMDY4Nyw1OSwzLDU1MzQ5LDU2NjIwLDQsMywxMTEsMTE0LDExNiwxNDYyNiwxNDYzMCwxNDY0MCwxMTAsNTksMSw3MzEsOTcsMTE4LDEwMSw1LDI0MiwxLDU5LDE0NjM4LDEsMjQyLDU5LDEsMTA2ODksNCwyLDk4LDEwOSwxNDY0OSwxNDY1NCw5NywxMTQsNTksMSwxMDY3Nyw1OSwxLDkzNywxMTAsMTE2LDU5LDEsODc1MCw0LDQsOTcsOTksMTA1LDExNiwxNDY3MiwxNDY3NywxNDY5MywxNDY5OCwxMTQsMTE0LDU5LDEsODYzNCw0LDIsMTA1LDExNCwxNDY4MywxNDY4NywxMTQsNTksMSwxMDY4NiwxMTEsMTE1LDExNSw1OSwxLDEwNjgzLDExMCwxMDEsNTksMSw4MjU0LDU5LDEsMTA2ODgsNCwzLDk3LDEwMSwxMDUsMTQ3MDksMTQ3MTQsMTQ3MTksOTksMTE0LDU5LDEsMzMzLDEwMyw5Nyw1OSwxLDk2OSw0LDMsOTksMTAwLDExMCwxNDcyNywxNDczMywxNDczNiwxMTQsMTExLDExMCw1OSwxLDk1OSw1OSwxLDEwNjc4LDExNywxMTUsNTksMSw4ODU0LDExMiwxMDIsNTksMyw1NTM0OSw1NjY3Miw0LDMsOTcsMTAxLDEwOCwxNDc1NSwxNDc1OSwxNDc2NCwxMTQsNTksMSwxMDY3OSwxMTQsMTEyLDU5LDEsMTA2ODEsMTE3LDExNSw1OSwxLDg4NTMsNCw3LDU5LDk3LDEwMCwxMDUsMTExLDExNSwxMTgsMTQ3ODUsMTQ3ODcsMTQ3OTIsMTQ4MzEsMTQ4MzcsMTQ4NDEsMTQ4NDgsMSw4NzQ0LDExNCwxMTQsNTksMSw4NjM1LDQsNCw1OSwxMDEsMTAyLDEwOSwxNDgwMiwxNDgwNCwxNDgxNywxNDgyNCwxLDEwODQ1LDExNCw0LDIsNTksMTExLDE0ODExLDE0ODEzLDEsODUwMCwxMDIsNTksMSw4NTAwLDUsMTcwLDEsNTksMTQ4MjIsMSwxNzAsNSwxODYsMSw1OSwxNDgyOSwxLDE4NiwxMDMsMTExLDEwMiw1OSwxLDg4ODYsMTE0LDU5LDEsMTA4MzgsMTA4LDExMSwxMTIsMTAxLDU5LDEsMTA4MzksNTksMSwxMDg0Myw0LDMsOTksMTA4LDExMSwxNDg1OSwxNDg2MywxNDg3MywxMTQsNTksMSw4NTAwLDk3LDExNSwxMDQsNSwyNDgsMSw1OSwxNDg3MSwxLDI0OCwxMDgsNTksMSw4ODU2LDEwNSw0LDIsMTA4LDEwOSwxNDg4NCwxNDg5MywxMDAsMTAxLDUsMjQ1LDEsNTksMTQ4OTEsMSwyNDUsMTAxLDExNSw0LDIsNTksOTcsMTQ5MDEsMTQ5MDMsMSw4ODU1LDExNSw1OSwxLDEwODA2LDEwOSwxMDgsNSwyNDYsMSw1OSwxNDkxNCwxLDI0Niw5OCw5NywxMTQsNTksMSw5MDIxLDQsMTIsOTcsOTksMTAxLDEwMiwxMDQsMTA1LDEwOCwxMDksMTExLDExNCwxMTUsMTE3LDE0OTQ4LDE0OTkyLDE0OTk2LDE1MDMzLDE1MDM4LDE1MDY4LDE1MDkwLDE1MTg5LDE1MTkyLDE1MjIyLDE1NDI3LDE1NDQxLDExNCw0LDQsNTksOTcsMTE1LDExNiwxNDk1OSwxNDk2MSwxNDk3NiwxNDk4OSwxLDg3NDEsNSwxODIsMiw1OSwxMDgsMTQ5NjgsMTQ5NzAsMSwxODIsMTA4LDEwMSwxMDgsNTksMSw4NzQxLDQsMiwxMDUsMTA4LDE0OTgyLDE0OTg2LDEwOSw1OSwxLDEwOTk1LDU5LDEsMTEwMDUsNTksMSw4NzA2LDEyMSw1OSwxLDEwODcsMTE0LDQsNSw5OSwxMDUsMTA5LDExMiwxMTYsMTUwMDksMTUwMTQsMTUwMTksMTUwMjQsMTUwMjcsMTEwLDExNiw1OSwxLDM3LDExMSwxMDAsNTksMSw0NiwxMDUsMTA4LDU5LDEsODI0MCw1OSwxLDg4NjksMTAxLDExMCwxMDcsNTksMSw4MjQxLDExNCw1OSwzLDU1MzQ5LDU2NjIxLDQsMywxMDUsMTA5LDExMSwxNTA0NiwxNTA1NywxNTA2Myw0LDIsNTksMTE4LDE1MDUyLDE1MDU0LDEsOTY2LDU5LDEsOTgxLDEwOSw5NywxMTYsNTksMSw4NDk5LDExMCwxMDEsNTksMSw5NzQyLDQsMyw1OSwxMTYsMTE4LDE1MDc2LDE1MDc4LDE1MDg3LDEsOTYwLDk5LDEwNCwxMDIsMTExLDExNCwxMDcsNTksMSw4OTE2LDU5LDEsOTgyLDQsMiw5NywxMTcsMTUwOTYsMTUxMTksMTEwLDQsMiw5OSwxMDcsMTUxMDMsMTUxMTUsMTA3LDQsMiw1OSwxMDQsMTUxMTAsMTUxMTIsMSw4NDYzLDU5LDEsODQ2MiwxMTgsNTksMSw4NDYzLDExNSw0LDksNTksOTcsOTgsOTksMTAwLDEwMSwxMDksMTE1LDExNiwxNTE0MCwxNTE0MiwxNTE0OCwxNTE1MSwxNTE1NiwxNTE2OCwxNTE3MSwxNTE3OSwxNTE4NCwxLDQzLDk5LDEwNSwxMTQsNTksMSwxMDc4Nyw1OSwxLDg4NjIsMTA1LDExNCw1OSwxLDEwNzg2LDQsMiwxMTEsMTE3LDE1MTYyLDE1MTY1LDU5LDEsODcyNCw1OSwxLDEwNzg5LDU5LDEsMTA4NjYsMTEwLDUsMTc3LDEsNTksMTUxNzcsMSwxNzcsMTA1LDEwOSw1OSwxLDEwNzkwLDExOSwxMTEsNTksMSwxMDc5MSw1OSwxLDE3Nyw0LDMsMTA1LDExMiwxMTcsMTUyMDAsMTUyMDgsMTUyMTMsMTEwLDExNiwxMDUsMTEwLDExNiw1OSwxLDEwNzczLDEwMiw1OSwzLDU1MzQ5LDU2NjczLDExMCwxMDAsNSwxNjMsMSw1OSwxNTIyMCwxLDE2Myw0LDEwLDU5LDY5LDk3LDk5LDEwMSwxMDUsMTEwLDExMSwxMTUsMTE3LDE1MjQ0LDE1MjQ2LDE1MjQ5LDE1MjUzLDE1MjU4LDE1MzM0LDE1MzQ3LDE1MzY3LDE1NDE2LDE1NDIxLDEsODgyNiw1OSwxLDEwOTMxLDExMiw1OSwxLDEwOTM1LDExNywxMDEsNTksMSw4ODI4LDQsMiw1OSw5OSwxNTI2NCwxNTI2NiwxLDEwOTI3LDQsNiw1OSw5Nyw5OSwxMDEsMTEwLDExNSwxNTI4MCwxNTI4MiwxNTI5MCwxNTI5OSwxNTMwMywxNTMyOSwxLDg4MjYsMTEyLDExMiwxMTQsMTExLDEyMCw1OSwxLDEwOTM1LDExNywxMTQsMTA4LDEyMSwxMDEsMTEzLDU5LDEsODgyOCwxMTMsNTksMSwxMDkyNyw0LDMsOTcsMTAxLDExNSwxNTMxMSwxNTMxOSwxNTMyNCwxMTIsMTEyLDExNCwxMTEsMTIwLDU5LDEsMTA5MzcsMTEzLDExMyw1OSwxLDEwOTMzLDEwNSwxMDksNTksMSw4OTM2LDEwNSwxMDksNTksMSw4ODMwLDEwOSwxMDEsNCwyLDU5LDExNSwxNTM0MiwxNTM0NCwxLDgyNDIsNTksMSw4NDczLDQsMyw2OSw5NywxMTUsMTUzNTUsMTUzNTgsMTUzNjIsNTksMSwxMDkzMywxMTIsNTksMSwxMDkzNywxMDUsMTA5LDU5LDEsODkzNiw0LDMsMTAwLDEwMiwxMTIsMTUzNzUsMTUzNzgsMTU0MDQsNTksMSw4NzE5LDQsMyw5NywxMDgsMTE1LDE1Mzg2LDE1MzkyLDE1Mzk4LDEwOCw5NywxMTQsNTksMSw5MDA2LDEwNSwxMTAsMTAxLDU5LDEsODk3OCwxMTcsMTE0LDEwMiw1OSwxLDg5NzksNCwyLDU5LDExNiwxNTQxMCwxNTQxMiwxLDg3MzMsMTExLDU5LDEsODczMywxMDUsMTA5LDU5LDEsODgzMCwxMTQsMTAxLDEwOCw1OSwxLDg4ODAsNCwyLDk5LDEwNSwxNTQzMywxNTQzOCwxMTQsNTksMyw1NTM0OSw1NjUxNyw1OSwxLDk2OCwxMTAsOTksMTE1LDExMiw1OSwxLDgyMDAsNCw2LDEwMiwxMDUsMTExLDExMiwxMTUsMTE3LDE1NDYyLDE1NDY3LDE1NDcyLDE1NDc4LDE1NDg1LDE1NDkxLDExNCw1OSwzLDU1MzQ5LDU2NjIyLDExMCwxMTYsNTksMSwxMDc2NCwxMTIsMTAyLDU5LDMsNTUzNDksNTY2NzQsMTE0LDEwNSwxMDksMTAxLDU5LDEsODI3OSw5OSwxMTQsNTksMyw1NTM0OSw1NjUxOCw0LDMsOTcsMTAxLDExMSwxNTQ5OSwxNTUyMCwxNTUzNCwxMTYsNCwyLDEwMSwxMDUsMTU1MDYsMTU1MTUsMTE0LDExMCwxMDUsMTExLDExMCwxMTUsNTksMSw4NDYxLDExMCwxMTYsNTksMSwxMDc3NCwxMTUsMTE2LDQsMiw1OSwxMDEsMTU1MjgsMTU1MzAsMSw2MywxMTMsNTksMSw4Nzk5LDExNiw1LDM0LDEsNTksMTU1NDAsMSwzNCw0LDIxLDY1LDY2LDcyLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwNCwxMDUsMTA4LDEwOSwxMTAsMTExLDExMiwxMTQsMTE1LDExNiwxMTcsMTIwLDE1NTg2LDE1NjA5LDE1NjE1LDE1NjIwLDE1Nzk2LDE1ODU1LDE1ODkzLDE1OTMxLDE1OTc3LDE2MDAxLDE2MDM5LDE2MTgzLDE2MjA0LDE2MjIyLDE2MjI4LDE2Mjg1LDE2MzEyLDE2MzE4LDE2MzYzLDE2NDA4LDE2NDE2LDQsMyw5NywxMTQsMTE2LDE1NTk0LDE1NTk5LDE1NjAzLDExNCwxMTQsNTksMSw4NjY3LDExNCw1OSwxLDg2NTgsOTcsMTA1LDEwOCw1OSwxLDEwNTI0LDk3LDExNCwxMTQsNTksMSwxMDUxMSw5NywxMTQsNTksMSwxMDU5Niw0LDcsOTksMTAwLDEwMSwxMTAsMTEzLDExNCwxMTYsMTU2MzYsMTU2NTEsMTU2NTYsMTU2NjQsMTU2ODcsMTU2OTYsMTU3NzAsNCwyLDEwMSwxMTcsMTU2NDIsMTU2NDYsNTksMyw4NzY1LDgxNywxMTYsMTAxLDU5LDEsMzQxLDEwNSw5OSw1OSwxLDg3MzAsMTA5LDExMiwxMTYsMTIxLDExOCw1OSwxLDEwNjc1LDEwMyw0LDQsNTksMTAwLDEwMSwxMDgsMTU2NzUsMTU2NzcsMTU2ODAsMTU2ODMsMSwxMDIxNyw1OSwxLDEwNjQyLDU5LDEsMTA2NjEsMTAxLDU5LDEsMTAyMTcsMTE3LDExMSw1LDE4NywxLDU5LDE1Njk0LDEsMTg3LDExNCw0LDExLDU5LDk3LDk4LDk5LDEwMiwxMDQsMTA4LDExMiwxMTUsMTE2LDExOSwxNTcyMSwxNTcyMywxNTcyNywxNTczOSwxNTc0MiwxNTc0NiwxNTc1MCwxNTc1NCwxNTc1OCwxNTc2MywxNTc2NywxLDg1OTQsMTEyLDU5LDEsMTA2MTMsNCwyLDU5LDEwMiwxNTczMywxNTczNSwxLDg2NzcsMTE1LDU5LDEsMTA1MjgsNTksMSwxMDU0NywxMTUsNTksMSwxMDUyNiwxMDcsNTksMSw4NjE4LDExMiw1OSwxLDg2MjAsMTA4LDU5LDEsMTA1NjUsMTA1LDEwOSw1OSwxLDEwNjEyLDEwOCw1OSwxLDg2MTEsNTksMSw4NjA1LDQsMiw5NywxMDUsMTU3NzYsMTU3ODEsMTA1LDEwOCw1OSwxLDEwNTIyLDExMSw0LDIsNTksMTEwLDE1Nzg4LDE1NzkwLDEsODc1OCw5NywxMDgsMTE1LDU5LDEsODQ3NCw0LDMsOTcsOTgsMTE0LDE1ODA0LDE1ODA5LDE1ODE0LDExNCwxMTQsNTksMSwxMDUwOSwxMTQsMTA3LDU5LDEsMTAwOTksNCwyLDk3LDEwNywxNTgyMCwxNTgzMyw5OSw0LDIsMTAxLDEwNywxNTgyNywxNTgzMCw1OSwxLDEyNSw1OSwxLDkzLDQsMiwxMDEsMTE1LDE1ODM5LDE1ODQyLDU5LDEsMTA2MzYsMTA4LDQsMiwxMDAsMTE3LDE1ODQ5LDE1ODUyLDU5LDEsMTA2MzgsNTksMSwxMDY0MCw0LDQsOTcsMTAxLDExNywxMjEsMTU4NjUsMTU4NzEsMTU4ODYsMTU4OTAsMTE0LDExMSwxMTAsNTksMSwzNDUsNCwyLDEwMCwxMDUsMTU4NzcsMTU4ODIsMTA1LDEwOCw1OSwxLDM0MywxMDgsNTksMSw4OTY5LDk4LDU5LDEsMTI1LDU5LDEsMTA4OCw0LDQsOTksMTA4LDExMywxMTUsMTU5MDMsMTU5MDcsMTU5MTQsMTU5MjcsOTcsNTksMSwxMDU1MSwxMDAsMTA0LDk3LDExNCw1OSwxLDEwNjAxLDExNywxMTEsNCwyLDU5LDExNCwxNTkyMiwxNTkyNCwxLDgyMjEsNTksMSw4MjIxLDEwNCw1OSwxLDg2MjcsNCwzLDk3LDk5LDEwMywxNTkzOSwxNTk2NiwxNTk3MCwxMDgsNCw0LDU5LDEwNSwxMTIsMTE1LDE1OTUwLDE1OTUyLDE1OTU3LDE1OTYzLDEsODQ3NiwxMTAsMTAxLDU5LDEsODQ3NSw5NywxMTQsMTE2LDU5LDEsODQ3Niw1OSwxLDg0NzcsMTE2LDU5LDEsOTY0NSw1LDE3NCwxLDU5LDE1OTc1LDEsMTc0LDQsMywxMDUsMTA4LDExNCwxNTk4NSwxNTk5MSwxNTk5NywxMTUsMTA0LDExNiw1OSwxLDEwNjIxLDExMSwxMTEsMTE0LDU5LDEsODk3MSw1OSwzLDU1MzQ5LDU2NjIzLDQsMiw5NywxMTEsMTYwMDcsMTYwMjgsMTE0LDQsMiwxMDAsMTE3LDE2MDE0LDE2MDE3LDU5LDEsODY0MSw0LDIsNTksMTA4LDE2MDIzLDE2MDI1LDEsODY0MCw1OSwxLDEwNjA0LDQsMiw1OSwxMTgsMTYwMzQsMTYwMzYsMSw5NjEsNTksMSwxMDA5LDQsMywxMDMsMTEwLDExNSwxNjA0NywxNjE2NywxNjE3MSwxMDQsMTE2LDQsNiw5NywxMDQsMTA4LDExNCwxMTUsMTE2LDE2MDYzLDE2MDgxLDE2MTAzLDE2MTMwLDE2MTQzLDE2MTU1LDExNCwxMTQsMTExLDExOSw0LDIsNTksMTE2LDE2MDczLDE2MDc1LDEsODU5NCw5NywxMDUsMTA4LDU5LDEsODYxMSw5NywxMTQsMTEyLDExMSwxMTEsMTEwLDQsMiwxMDAsMTE3LDE2MDkzLDE2MDk5LDExMSwxMTksMTEwLDU5LDEsODY0MSwxMTIsNTksMSw4NjQwLDEwMSwxMDIsMTE2LDQsMiw5NywxMDQsMTYxMTIsMTYxMjAsMTE0LDExNCwxMTEsMTE5LDExNSw1OSwxLDg2NDQsOTcsMTE0LDExMiwxMTEsMTExLDExMCwxMTUsNTksMSw4NjUyLDEwNSwxMDMsMTA0LDExNiw5NywxMTQsMTE0LDExMSwxMTksMTE1LDU5LDEsODY0OSwxMTMsMTE3LDEwNSwxMDMsOTcsMTE0LDExNCwxMTEsMTE5LDU5LDEsODYwNSwxMDQsMTE0LDEwMSwxMDEsMTE2LDEwNSwxMDksMTAxLDExNSw1OSwxLDg5MDgsMTAzLDU5LDEsNzMwLDEwNSwxMTAsMTAzLDEwMCwxMTEsMTE2LDExNSwxMDEsMTEzLDU5LDEsODc4Nyw0LDMsOTcsMTA0LDEwOSwxNjE5MSwxNjE5NiwxNjIwMSwxMTQsMTE0LDU5LDEsODY0NCw5NywxMTQsNTksMSw4NjUyLDU5LDEsODIwNywxMTEsMTE3LDExNSwxMTYsNCwyLDU5LDk3LDE2MjE0LDE2MjE2LDEsOTEzNyw5OSwxMDQsMTAxLDU5LDEsOTEzNywxMDksMTA1LDEwMCw1OSwxLDEwOTkwLDQsNCw5Nyw5OCwxMTIsMTE2LDE2MjM4LDE2MjUyLDE2MjU3LDE2Mjc4LDQsMiwxMTAsMTE0LDE2MjQ0LDE2MjQ4LDEwMyw1OSwxLDEwMjIxLDExNCw1OSwxLDg3MDIsMTE0LDEwNyw1OSwxLDEwMjE1LDQsMyw5NywxMDIsMTA4LDE2MjY1LDE2MjY5LDE2MjczLDExNCw1OSwxLDEwNjMwLDU5LDMsNTUzNDksNTY2NzUsMTE3LDExNSw1OSwxLDEwNzk4LDEwNSwxMDksMTAxLDExNSw1OSwxLDEwODA1LDQsMiw5NywxMTIsMTYyOTEsMTYzMDQsMTE0LDQsMiw1OSwxMDMsMTYyOTgsMTYzMDAsMSw0MSwxMTYsNTksMSwxMDY0NCwxMTEsMTA4LDEwNSwxMTAsMTE2LDU5LDEsMTA3NzAsOTcsMTE0LDExNCw1OSwxLDg2NDksNCw0LDk3LDk5LDEwNCwxMTMsMTYzMjgsMTYzMzQsMTYzMzksMTYzNDIsMTEzLDExNywxMTEsNTksMSw4MjUwLDExNCw1OSwzLDU1MzQ5LDU2NTE5LDU5LDEsODYyNSw0LDIsOTgsMTE3LDE2MzQ4LDE2MzUxLDU5LDEsOTMsMTExLDQsMiw1OSwxMTQsMTYzNTgsMTYzNjAsMSw4MjE3LDU5LDEsODIxNyw0LDMsMTA0LDEwNSwxMTQsMTYzNzEsMTYzNzcsMTYzODMsMTE0LDEwMSwxMDEsNTksMSw4OTA4LDEwOSwxMDEsMTE1LDU5LDEsODkwNiwxMDUsNCw0LDU5LDEwMSwxMDIsMTA4LDE2Mzk0LDE2Mzk2LDE2Mzk5LDE2NDAyLDEsOTY1Nyw1OSwxLDg4ODUsNTksMSw5NjU2LDExNiwxMTQsMTA1LDU5LDEsMTA3MDIsMTA4LDExNywxMDQsOTcsMTE0LDU5LDEsMTA2MDAsNTksMSw4NDc4LDQsMTksOTcsOTgsOTksMTAwLDEwMSwxMDIsMTA0LDEwNSwxMDgsMTA5LDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTksMTIyLDE2NDU5LDE2NDY2LDE2NDcyLDE2NTcyLDE2NTkwLDE2NjcyLDE2Njg3LDE2NzQ2LDE2ODQ0LDE2ODUwLDE2OTI0LDE2OTYzLDE2OTg4LDE3MTE1LDE3MTIxLDE3MTU0LDE3MjA2LDE3NjE0LDE3NjU2LDk5LDExNywxMTYsMTAxLDU5LDEsMzQ3LDExMywxMTcsMTExLDU5LDEsODIxOCw0LDEwLDU5LDY5LDk3LDk5LDEwMSwxMDUsMTEwLDExMiwxMTUsMTIxLDE2NDk0LDE2NDk2LDE2NDk5LDE2NTEzLDE2NTE4LDE2NTMxLDE2NTM2LDE2NTU2LDE2NTY0LDE2NTY5LDEsODgyNyw1OSwxLDEwOTMyLDQsMiwxMTIsMTE0LDE2NTA1LDE2NTA4LDU5LDEsMTA5MzYsMTExLDExMCw1OSwxLDM1MywxMTcsMTAxLDU5LDEsODgyOSw0LDIsNTksMTAwLDE2NTI0LDE2NTI2LDEsMTA5MjgsMTA1LDEwOCw1OSwxLDM1MSwxMTQsOTksNTksMSwzNDksNCwzLDY5LDk3LDExNSwxNjU0NCwxNjU0NywxNjU1MSw1OSwxLDEwOTM0LDExMiw1OSwxLDEwOTM4LDEwNSwxMDksNTksMSw4OTM3LDExMSwxMDgsMTA1LDExMCwxMTYsNTksMSwxMDc3MSwxMDUsMTA5LDU5LDEsODgzMSw1OSwxLDEwODksMTExLDExNiw0LDMsNTksOTgsMTAxLDE2NTgyLDE2NTg0LDE2NTg3LDEsODkwMSw1OSwxLDg4NjUsNTksMSwxMDg1NCw0LDcsNjUsOTcsOTksMTA5LDExNSwxMTYsMTIwLDE2NjA2LDE2NjExLDE2NjM0LDE2NjQyLDE2NjQ2LDE2NjUyLDE2NjY4LDExNCwxMTQsNTksMSw4NjY0LDExNCw0LDIsMTA0LDExNCwxNjYxOCwxNjYyMiwxMDcsNTksMSwxMDUzMyw0LDIsNTksMTExLDE2NjI4LDE2NjMwLDEsODYwMCwxMTksNTksMSw4NjAwLDExNiw1LDE2NywxLDU5LDE2NjQwLDEsMTY3LDEwNSw1OSwxLDU5LDExOSw5NywxMTQsNTksMSwxMDUzNywxMDksNCwyLDEwNSwxMTAsMTY2NTksMTY2NjUsMTEwLDExNywxMTUsNTksMSw4NzI2LDU5LDEsODcyNiwxMTYsNTksMSwxMDAzOCwxMTQsNCwyLDU5LDExMSwxNjY3OSwxNjY4MiwzLDU1MzQ5LDU2NjI0LDExOSwxMTAsNTksMSw4OTk0LDQsNCw5Nyw5OSwxMTEsMTIxLDE2Njk3LDE2NzAyLDE2NzE2LDE2NzM5LDExNCwxMTIsNTksMSw5ODM5LDQsMiwxMDQsMTIxLDE2NzA4LDE2NzEzLDk5LDEyMSw1OSwxLDEwOTcsNTksMSwxMDk2LDExNCwxMTYsNCwyLDEwOSwxMTIsMTY3MjQsMTY3MjksMTA1LDEwMCw1OSwxLDg3MzksOTcsMTE0LDk3LDEwOCwxMDgsMTAxLDEwOCw1OSwxLDg3NDEsNSwxNzMsMSw1OSwxNjc0NCwxLDE3Myw0LDIsMTAzLDEwOSwxNjc1MiwxNjc3MCwxMDksOTcsNCwzLDU5LDEwMiwxMTgsMTY3NjIsMTY3NjQsMTY3NjcsMSw5NjMsNTksMSw5NjIsNTksMSw5NjIsNCw4LDU5LDEwMCwxMDEsMTAzLDEwOCwxMTAsMTEyLDExNCwxNjc4OCwxNjc5MCwxNjc5NSwxNjgwNiwxNjgxNywxNjgyOCwxNjgzMiwxNjgzOCwxLDg3NjQsMTExLDExNiw1OSwxLDEwODU4LDQsMiw1OSwxMTMsMTY4MDEsMTY4MDMsMSw4NzcxLDU5LDEsODc3MSw0LDIsNTksNjksMTY4MTIsMTY4MTQsMSwxMDkxMCw1OSwxLDEwOTEyLDQsMiw1OSw2OSwxNjgyMywxNjgyNSwxLDEwOTA5LDU5LDEsMTA5MTEsMTAxLDU5LDEsODc3NCwxMDgsMTE3LDExNSw1OSwxLDEwNzg4LDk3LDExNCwxMTQsNTksMSwxMDYxMCw5NywxMTQsMTE0LDU5LDEsODU5Miw0LDQsOTcsMTAxLDEwNSwxMTYsMTY4NjAsMTY4ODMsMTY4OTEsMTY5MDQsNCwyLDEwOCwxMTUsMTY4NjYsMTY4NzgsMTA4LDExNSwxMDEsMTE2LDEwOSwxMDUsMTEwLDExNywxMTUsNTksMSw4NzI2LDEwNCwxMTIsNTksMSwxMDgwMywxMTIsOTcsMTE0LDExNSwxMDgsNTksMSwxMDcyNCw0LDIsMTAwLDEwOCwxNjg5NywxNjkwMCw1OSwxLDg3MzksMTAxLDU5LDEsODk5NSw0LDIsNTksMTAxLDE2OTEwLDE2OTEyLDEsMTA5MjIsNCwyLDU5LDExNSwxNjkxOCwxNjkyMCwxLDEwOTI0LDU5LDMsMTA5MjQsNjUwMjQsNCwzLDEwMiwxMDgsMTEyLDE2OTMyLDE2OTM4LDE2OTU4LDExNiw5OSwxMjEsNTksMSwxMTAwLDQsMiw1OSw5OCwxNjk0NCwxNjk0NiwxLDQ3LDQsMiw1OSw5NywxNjk1MiwxNjk1NCwxLDEwNjkyLDExNCw1OSwxLDkwMjMsMTAyLDU5LDMsNTUzNDksNTY2NzYsOTcsNCwyLDEwMCwxMTQsMTY5NzAsMTY5ODUsMTAxLDExNSw0LDIsNTksMTE3LDE2OTc4LDE2OTgwLDEsOTgyNCwxMDUsMTE2LDU5LDEsOTgyNCw1OSwxLDg3NDEsNCwzLDk5LDExNSwxMTcsMTY5OTYsMTcwMjgsMTcwODksNCwyLDk3LDExNywxNzAwMiwxNzAxNSwxMTIsNCwyLDU5LDExNSwxNzAwOSwxNzAxMSwxLDg4NTEsNTksMyw4ODUxLDY1MDI0LDExMiw0LDIsNTksMTE1LDE3MDIyLDE3MDI0LDEsODg1Miw1OSwzLDg4NTIsNjUwMjQsMTE3LDQsMiw5OCwxMTIsMTcwMzUsMTcwNjIsNCwzLDU5LDEwMSwxMTUsMTcwNDMsMTcwNDUsMTcwNDgsMSw4ODQ3LDU5LDEsODg0OSwxMDEsMTE2LDQsMiw1OSwxMDEsMTcwNTYsMTcwNTgsMSw4ODQ3LDExMyw1OSwxLDg4NDksNCwzLDU5LDEwMSwxMTUsMTcwNzAsMTcwNzIsMTcwNzUsMSw4ODQ4LDU5LDEsODg1MCwxMDEsMTE2LDQsMiw1OSwxMDEsMTcwODMsMTcwODUsMSw4ODQ4LDExMyw1OSwxLDg4NTAsNCwzLDU5LDk3LDEwMiwxNzA5NywxNzA5OSwxNzExMiwxLDk2MzMsMTE0LDQsMiwxMDEsMTAyLDE3MTA2LDE3MTA5LDU5LDEsOTYzMyw1OSwxLDk2NDIsNTksMSw5NjQyLDk3LDExNCwxMTQsNTksMSw4NTk0LDQsNCw5OSwxMDEsMTA5LDExNiwxNzEzMSwxNzEzNiwxNzE0MiwxNzE0OCwxMTQsNTksMyw1NTM0OSw1NjUyMCwxMTYsMTA5LDExMCw1OSwxLDg3MjYsMTA1LDEwOCwxMDEsNTksMSw4OTk1LDk3LDExNCwxMDIsNTksMSw4OTAyLDQsMiw5NywxMTQsMTcxNjAsMTcxNzIsMTE0LDQsMiw1OSwxMDIsMTcxNjcsMTcxNjksMSw5NzM0LDU5LDEsOTczMyw0LDIsOTcsMTEwLDE3MTc4LDE3MjAyLDEwNSwxMDMsMTA0LDExNiw0LDIsMTAxLDExMiwxNzE4OCwxNzE5NywxMTIsMTE1LDEwNSwxMDgsMTExLDExMCw1OSwxLDEwMTMsMTA0LDEwNSw1OSwxLDk4MSwxMTUsNTksMSwxNzUsNCw1LDk4LDk5LDEwOSwxMTAsMTEyLDE3MjE4LDE3MzUxLDE3NDIwLDE3NDIzLDE3NDI3LDQsOSw1OSw2OSwxMDAsMTAxLDEwOSwxMTAsMTEyLDExNCwxMTUsMTcyMzgsMTcyNDAsMTcyNDMsMTcyNDgsMTcyNjEsMTcyNjcsMTcyNzksMTcyODUsMTcyOTEsMSw4ODM0LDU5LDEsMTA5NDksMTExLDExNiw1OSwxLDEwOTQxLDQsMiw1OSwxMDAsMTcyNTQsMTcyNTYsMSw4ODM4LDExMSwxMTYsNTksMSwxMDk0NywxMTcsMTA4LDExNiw1OSwxLDEwOTQ1LDQsMiw2OSwxMDEsMTcyNzMsMTcyNzYsNTksMSwxMDk1NSw1OSwxLDg4NDIsMTA4LDExNywxMTUsNTksMSwxMDk0Myw5NywxMTQsMTE0LDU5LDEsMTA2MTcsNCwzLDEwMSwxMDUsMTE3LDE3Mjk5LDE3MzM1LDE3MzM5LDExNiw0LDMsNTksMTAxLDExMCwxNzMwOCwxNzMxMCwxNzMyMiwxLDg4MzQsMTEzLDQsMiw1OSwxMTMsMTczMTcsMTczMTksMSw4ODM4LDU5LDEsMTA5NDksMTAxLDExMyw0LDIsNTksMTEzLDE3MzMwLDE3MzMyLDEsODg0Miw1OSwxLDEwOTU1LDEwOSw1OSwxLDEwOTUxLDQsMiw5OCwxMTIsMTczNDUsMTczNDgsNTksMSwxMDk2NSw1OSwxLDEwOTYzLDk5LDQsNiw1OSw5Nyw5OSwxMDEsMTEwLDExNSwxNzM2NiwxNzM2OCwxNzM3NiwxNzM4NSwxNzM4OSwxNzQxNSwxLDg4MjcsMTEyLDExMiwxMTQsMTExLDEyMCw1OSwxLDEwOTM2LDExNywxMTQsMTA4LDEyMSwxMDEsMTEzLDU5LDEsODgyOSwxMTMsNTksMSwxMDkyOCw0LDMsOTcsMTAxLDExNSwxNzM5NywxNzQwNSwxNzQxMCwxMTIsMTEyLDExNCwxMTEsMTIwLDU5LDEsMTA5MzgsMTEzLDExMyw1OSwxLDEwOTM0LDEwNSwxMDksNTksMSw4OTM3LDEwNSwxMDksNTksMSw4ODMxLDU5LDEsODcyMSwxMDMsNTksMSw5ODM0LDQsMTMsNDksNTAsNTEsNTksNjksMTAwLDEwMSwxMDQsMTA4LDEwOSwxMTAsMTEyLDExNSwxNzQ1NSwxNzQ2MiwxNzQ2OSwxNzQ3NiwxNzQ3OCwxNzQ4MSwxNzQ5NiwxNzUwOSwxNzUyNCwxNzUzMCwxNzUzNiwxNzU0OCwxNzU1NCw1LDE4NSwxLDU5LDE3NDYwLDEsMTg1LDUsMTc4LDEsNTksMTc0NjcsMSwxNzgsNSwxNzksMSw1OSwxNzQ3NCwxLDE3OSwxLDg4MzUsNTksMSwxMDk1MCw0LDIsMTExLDExNSwxNzQ4NywxNzQ5MSwxMTYsNTksMSwxMDk0MiwxMTcsOTgsNTksMSwxMDk2OCw0LDIsNTksMTAwLDE3NTAyLDE3NTA0LDEsODgzOSwxMTEsMTE2LDU5LDEsMTA5NDgsMTE1LDQsMiwxMTEsMTE3LDE3NTE2LDE3NTIwLDEwOCw1OSwxLDEwMTg1LDk4LDU5LDEsMTA5NjcsOTcsMTE0LDExNCw1OSwxLDEwNjE5LDExNywxMDgsMTE2LDU5LDEsMTA5NDYsNCwyLDY5LDEwMSwxNzU0MiwxNzU0NSw1OSwxLDEwOTU2LDU5LDEsODg0MywxMDgsMTE3LDExNSw1OSwxLDEwOTQ0LDQsMywxMDEsMTA1LDExNywxNzU2MiwxNzU5OCwxNzYwMiwxMTYsNCwzLDU5LDEwMSwxMTAsMTc1NzEsMTc1NzMsMTc1ODUsMSw4ODM1LDExMyw0LDIsNTksMTEzLDE3NTgwLDE3NTgyLDEsODgzOSw1OSwxLDEwOTUwLDEwMSwxMTMsNCwyLDU5LDExMywxNzU5MywxNzU5NSwxLDg4NDMsNTksMSwxMDk1NiwxMDksNTksMSwxMDk1Miw0LDIsOTgsMTEyLDE3NjA4LDE3NjExLDU5LDEsMTA5NjQsNTksMSwxMDk2Niw0LDMsNjUsOTcsMTEwLDE3NjIyLDE3NjI3LDE3NjUwLDExNCwxMTQsNTksMSw4NjY1LDExNCw0LDIsMTA0LDExNCwxNzYzNCwxNzYzOCwxMDcsNTksMSwxMDUzNCw0LDIsNTksMTExLDE3NjQ0LDE3NjQ2LDEsODYwMSwxMTksNTksMSw4NjAxLDExOSw5NywxMTQsNTksMSwxMDUzOCwxMDgsMTA1LDEwMyw1LDIyMywxLDU5LDE3NjY0LDEsMjIzLDQsMTMsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTA0LDEwNSwxMTEsMTEyLDExNCwxMTUsMTE5LDE3Njk0LDE3NzA5LDE3NzE0LDE3NzM3LDE3NzQyLDE3NzQ5LDE3NzU0LDE3ODYwLDE3OTA1LDE3OTU3LDE3OTY0LDE4MDkwLDE4MTIyLDQsMiwxMTQsMTE3LDE3NzAwLDE3NzA2LDEwMywxMDEsMTE2LDU5LDEsODk4Miw1OSwxLDk2NCwxMTQsMTA3LDU5LDEsOTE0MCw0LDMsOTcsMTAxLDEyMSwxNzcyMiwxNzcyOCwxNzczNCwxMTQsMTExLDExMCw1OSwxLDM1NywxMDAsMTA1LDEwOCw1OSwxLDM1NSw1OSwxLDEwOTAsMTExLDExNiw1OSwxLDg0MTEsMTA4LDExNCwxMDEsOTksNTksMSw4OTgxLDExNCw1OSwzLDU1MzQ5LDU2NjI1LDQsNCwxMDEsMTA1LDEwNywxMTEsMTc3NjQsMTc4MDUsMTc4MzYsMTc4NTEsNCwyLDExNCwxMTYsMTc3NzAsMTc3ODYsMTAxLDQsMiw1MiwxMDIsMTc3NzcsMTc3ODAsNTksMSw4NzU2LDExMSwxMTQsMTAxLDU5LDEsODc1Niw5Nyw0LDMsNTksMTE1LDExOCwxNzc5NSwxNzc5NywxNzgwMiwxLDk1MiwxMjEsMTA5LDU5LDEsOTc3LDU5LDEsOTc3LDQsMiw5OSwxMTAsMTc4MTEsMTc4MzEsMTA3LDQsMiw5NywxMTUsMTc4MTgsMTc4MjYsMTEyLDExMiwxMTQsMTExLDEyMCw1OSwxLDg3NzYsMTA1LDEwOSw1OSwxLDg3NjQsMTE1LDExMiw1OSwxLDgyMDEsNCwyLDk3LDExNSwxNzg0MiwxNzg0NiwxMTIsNTksMSw4Nzc2LDEwNSwxMDksNTksMSw4NzY0LDExNCwxMTAsNSwyNTQsMSw1OSwxNzg1OCwxLDI1NCw0LDMsMTA4LDEwOSwxMTAsMTc4NjgsMTc4NzMsMTc5MDEsMTAwLDEwMSw1OSwxLDczMiwxMDEsMTE1LDUsMjE1LDMsNTksOTgsMTAwLDE3ODg0LDE3ODg2LDE3ODk4LDEsMjE1LDQsMiw1OSw5NywxNzg5MiwxNzg5NCwxLDg4NjQsMTE0LDU5LDEsMTA4MDEsNTksMSwxMDgwMCwxMTYsNTksMSw4NzQ5LDQsMywxMDEsMTEyLDExNSwxNzkxMywxNzkxNywxNzk1Myw5Nyw1OSwxLDEwNTM2LDQsNCw1OSw5OCw5OSwxMDIsMTc5MjcsMTc5MjksMTc5MzQsMTc5MzksMSw4ODY4LDExMSwxMTYsNTksMSw5MDE0LDEwNSwxMTQsNTksMSwxMDk5Myw0LDIsNTksMTExLDE3OTQ1LDE3OTQ4LDMsNTUzNDksNTY2NzcsMTE0LDEwNyw1OSwxLDEwOTcwLDk3LDU5LDEsMTA1MzcsMTE0LDEwNSwxMDksMTAxLDU5LDEsODI0NCw0LDMsOTcsMTA1LDExMiwxNzk3MiwxNzk3NywxODA4MiwxMDAsMTAxLDU5LDEsODQ4Miw0LDcsOTcsMTAwLDEwMSwxMDksMTEyLDExNSwxMTYsMTc5OTMsMTgwNTEsMTgwNTYsMTgwNTksMTgwNjYsMTgwNzIsMTgwNzYsMTEwLDEwMywxMDgsMTAxLDQsNSw1OSwxMDAsMTA4LDExMywxMTQsMTgwMDksMTgwMTEsMTgwMTcsMTgwMzIsMTgwMzUsMSw5NjUzLDExMSwxMTksMTEwLDU5LDEsOTY2MywxMDEsMTAyLDExNiw0LDIsNTksMTAxLDE4MDI2LDE4MDI4LDEsOTY2NywxMTMsNTksMSw4ODg0LDU5LDEsODc5NiwxMDUsMTAzLDEwNCwxMTYsNCwyLDU5LDEwMSwxODA0NSwxODA0NywxLDk2NTcsMTEzLDU5LDEsODg4NSwxMTEsMTE2LDU5LDEsOTcwOCw1OSwxLDg3OTYsMTA1LDExMCwxMTcsMTE1LDU5LDEsMTA4MTAsMTA4LDExNywxMTUsNTksMSwxMDgwOSw5OCw1OSwxLDEwNzAxLDEwNSwxMDksMTAxLDU5LDEsMTA4MTEsMTAxLDEyMiwxMDUsMTE3LDEwOSw1OSwxLDkxODYsNCwzLDk5LDEwNCwxMTYsMTgwOTgsMTgxMTEsMTgxMTYsNCwyLDExNCwxMjEsMTgxMDQsMTgxMDgsNTksMyw1NTM0OSw1NjUyMSw1OSwxLDEwOTQsOTksMTIxLDU5LDEsMTExNSwxMTQsMTExLDEwNyw1OSwxLDM1OSw0LDIsMTA1LDExMSwxODEyOCwxODEzMywxMjAsMTE2LDU5LDEsODgxMiwxMDQsMTAxLDk3LDEwMCw0LDIsMTA4LDExNCwxODE0MywxODE1NCwxMDEsMTAyLDExNiw5NywxMTQsMTE0LDExMSwxMTksNTksMSw4NjA2LDEwNSwxMDMsMTA0LDExNiw5NywxMTQsMTE0LDExMSwxMTksNTksMSw4NjA4LDQsMTgsNjUsNzIsOTcsOTgsOTksMTAwLDEwMiwxMDMsMTA0LDEwOCwxMDksMTExLDExMiwxMTQsMTE1LDExNiwxMTcsMTE5LDE4MjA0LDE4MjA5LDE4MjE0LDE4MjM0LDE4MjUwLDE4MjY4LDE4MjkyLDE4MzA4LDE4MzE5LDE4MzQzLDE4Mzc5LDE4Mzk3LDE4NDEzLDE4NTA0LDE4NTQ3LDE4NTUzLDE4NTg0LDE4NjAzLDExNCwxMTQsNTksMSw4NjU3LDk3LDExNCw1OSwxLDEwNTk1LDQsMiw5OSwxMTQsMTgyMjAsMTgyMzAsMTE3LDExNiwxMDEsNSwyNTAsMSw1OSwxODIyOCwxLDI1MCwxMTQsNTksMSw4NTkzLDExNCw0LDIsOTksMTAxLDE4MjQxLDE4MjQ1LDEyMSw1OSwxLDExMTgsMTE4LDEwMSw1OSwxLDM2NSw0LDIsMTA1LDEyMSwxODI1NiwxODI2NSwxMTQsOTksNSwyNTEsMSw1OSwxODI2MywxLDI1MSw1OSwxLDEwOTEsNCwzLDk3LDk4LDEwNCwxODI3NiwxODI4MSwxODI4NywxMTQsMTE0LDU5LDEsODY0NSwxMDgsOTcsOTksNTksMSwzNjksOTcsMTE0LDU5LDEsMTA2MDYsNCwyLDEwNSwxMTQsMTgyOTgsMTgzMDQsMTE1LDEwNCwxMTYsNTksMSwxMDYyMiw1OSwzLDU1MzQ5LDU2NjI2LDExNCw5NywxMTgsMTAxLDUsMjQ5LDEsNTksMTgzMTcsMSwyNDksNCwyLDk3LDk4LDE4MzI1LDE4MzM4LDExNCw0LDIsMTA4LDExNCwxODMzMiwxODMzNSw1OSwxLDg2MzksNTksMSw4NjM4LDEwOCwxMDcsNTksMSw5NjAwLDQsMiw5OSwxMTYsMTgzNDksMTgzNzQsNCwyLDExMSwxMTQsMTgzNTUsMTgzNjksMTE0LDExMCw0LDIsNTksMTAxLDE4MzYzLDE4MzY1LDEsODk4OCwxMTQsNTksMSw4OTg4LDExMSwxMTIsNTksMSw4OTc1LDExNCwxMDUsNTksMSw5NzIwLDQsMiw5NywxMDgsMTgzODUsMTgzOTAsOTksMTE0LDU5LDEsMzYzLDUsMTY4LDEsNTksMTgzOTUsMSwxNjgsNCwyLDEwMywxMTIsMTg0MDMsMTg0MDgsMTExLDExMCw1OSwxLDM3MSwxMDIsNTksMyw1NTM0OSw1NjY3OCw0LDYsOTcsMTAwLDEwNCwxMDgsMTE1LDExNywxODQyNywxODQzNCwxODQ0NSwxODQ3MCwxODQ3NSwxODQ5NCwxMTQsMTE0LDExMSwxMTksNTksMSw4NTkzLDExMSwxMTksMTEwLDk3LDExNCwxMTQsMTExLDExOSw1OSwxLDg1OTcsOTcsMTE0LDExMiwxMTEsMTExLDExMCw0LDIsMTA4LDExNCwxODQ1NywxODQ2MywxMDEsMTAyLDExNiw1OSwxLDg2MzksMTA1LDEwMywxMDQsMTE2LDU5LDEsODYzOCwxMTcsMTE1LDU5LDEsODg0NiwxMDUsNCwzLDU5LDEwNCwxMDgsMTg0ODQsMTg0ODYsMTg0ODksMSw5NjUsNTksMSw5NzgsMTExLDExMCw1OSwxLDk2NSwxMTIsOTcsMTE0LDExNCwxMTEsMTE5LDExNSw1OSwxLDg2NDgsNCwzLDk5LDEwNSwxMTYsMTg1MTIsMTg1MzcsMTg1NDIsNCwyLDExMSwxMTQsMTg1MTgsMTg1MzIsMTE0LDExMCw0LDIsNTksMTAxLDE4NTI2LDE4NTI4LDEsODk4OSwxMTQsNTksMSw4OTg5LDExMSwxMTIsNTksMSw4OTc0LDExMCwxMDMsNTksMSwzNjcsMTE0LDEwNSw1OSwxLDk3MjEsOTksMTE0LDU5LDMsNTUzNDksNTY1MjIsNCwzLDEwMCwxMDUsMTE0LDE4NTYxLDE4NTY2LDE4NTcyLDExMSwxMTYsNTksMSw4OTQ0LDEwOCwxMDAsMTAxLDU5LDEsMzYxLDEwNSw0LDIsNTksMTAyLDE4NTc5LDE4NTgxLDEsOTY1Myw1OSwxLDk2NTIsNCwyLDk3LDEwOSwxODU5MCwxODU5NSwxMTQsMTE0LDU5LDEsODY0OCwxMDgsNSwyNTIsMSw1OSwxODYwMSwxLDI1Miw5NywxMTAsMTAzLDEwOCwxMDEsNTksMSwxMDY2Myw0LDE1LDY1LDY2LDY4LDk3LDk5LDEwMCwxMDEsMTAyLDEwOCwxMTAsMTExLDExMiwxMTQsMTE1LDEyMiwxODY0MywxODY0OCwxODY2MSwxODY2NywxODg0NywxODg1MSwxODg1NywxODkwNCwxODkwOSwxODkxNSwxODkzMSwxODkzNywxODk0MywxODk0OSwxODk5NiwxMTQsMTE0LDU5LDEsODY2MSw5NywxMTQsNCwyLDU5LDExOCwxODY1NiwxODY1OCwxLDEwOTg0LDU5LDEsMTA5ODUsOTcsMTE1LDEwNCw1OSwxLDg4NzIsNCwyLDExMCwxMTQsMTg2NzMsMTg2NzksMTAzLDExNCwxMTYsNTksMSwxMDY1Miw0LDcsMTAxLDEwNywxMTAsMTEyLDExNCwxMTUsMTE2LDE4Njk1LDE4NzA0LDE4NzExLDE4NzIwLDE4NzQyLDE4NzU0LDE4ODEwLDExMiwxMTUsMTA1LDEwOCwxMTEsMTEwLDU5LDEsMTAxMyw5NywxMTIsMTEyLDk3LDU5LDEsMTAwOCwxMTEsMTE2LDEwNCwxMDUsMTEwLDEwMyw1OSwxLDg3MDksNCwzLDEwNCwxMDUsMTE0LDE4NzI4LDE4NzMyLDE4NzM1LDEwNSw1OSwxLDk4MSw1OSwxLDk4MiwxMTEsMTEyLDExNiwxMTEsNTksMSw4NzMzLDQsMiw1OSwxMDQsMTg3NDgsMTg3NTAsMSw4NTk3LDExMSw1OSwxLDEwMDksNCwyLDEwNSwxMTcsMTg3NjAsMTg3NjYsMTAzLDEwOSw5Nyw1OSwxLDk2Miw0LDIsOTgsMTEyLDE4NzcyLDE4NzkxLDExNSwxMDEsMTE2LDExMCwxMDEsMTEzLDQsMiw1OSwxMTMsMTg3ODQsMTg3ODcsMyw4ODQyLDY1MDI0LDU5LDMsMTA5NTUsNjUwMjQsMTE1LDEwMSwxMTYsMTEwLDEwMSwxMTMsNCwyLDU5LDExMywxODgwMywxODgwNiwzLDg4NDMsNjUwMjQsNTksMywxMDk1Niw2NTAyNCw0LDIsMTA0LDExNCwxODgxNiwxODgyMiwxMDEsMTE2LDk3LDU5LDEsOTc3LDEwNSw5NywxMTAsMTAzLDEwOCwxMDEsNCwyLDEwOCwxMTQsMTg4MzQsMTg4NDAsMTAxLDEwMiwxMTYsNTksMSw4ODgyLDEwNSwxMDMsMTA0LDExNiw1OSwxLDg4ODMsMTIxLDU5LDEsMTA3NCw5NywxMTUsMTA0LDU5LDEsODg2Niw0LDMsMTAxLDEwOCwxMTQsMTg4NjUsMTg4ODQsMTg4OTAsNCwzLDU5LDk4LDEwMSwxODg3MywxODg3NSwxODg4MCwxLDg3NDQsOTcsMTE0LDU5LDEsODg5MSwxMTMsNTksMSw4Nzk0LDEwOCwxMDUsMTEyLDU5LDEsODk0Miw0LDIsOTgsMTE2LDE4ODk2LDE4OTAxLDk3LDExNCw1OSwxLDEyNCw1OSwxLDEyNCwxMTQsNTksMyw1NTM0OSw1NjYyNywxMTYsMTE0LDEwNSw1OSwxLDg4ODIsMTE1LDExNyw0LDIsOTgsMTEyLDE4OTIzLDE4OTI3LDU5LDMsODgzNCw4NDAyLDU5LDMsODgzNSw4NDAyLDExMiwxMDIsNTksMyw1NTM0OSw1NjY3OSwxMTQsMTExLDExMiw1OSwxLDg3MzMsMTE2LDExNCwxMDUsNTksMSw4ODgzLDQsMiw5OSwxMTcsMTg5NTUsMTg5NjAsMTE0LDU5LDMsNTUzNDksNTY1MjMsNCwyLDk4LDExMiwxODk2NiwxODk4MSwxMTAsNCwyLDY5LDEwMSwxODk3MywxODk3Nyw1OSwzLDEwOTU1LDY1MDI0LDU5LDMsODg0Miw2NTAyNCwxMTAsNCwyLDY5LDEwMSwxODk4OCwxODk5Miw1OSwzLDEwOTU2LDY1MDI0LDU5LDMsODg0Myw2NTAyNCwxMDUsMTAzLDEyMiw5NywxMDMsNTksMSwxMDY1MCw0LDcsOTksMTAxLDEwMiwxMTEsMTEyLDExNCwxMTUsMTkwMjAsMTkwMjYsMTkwNjEsMTkwNjYsMTkwNzIsMTkwNzUsMTkwODksMTA1LDExNCw5OSw1OSwxLDM3Myw0LDIsMTAwLDEwNSwxOTAzMiwxOTA1NSw0LDIsOTgsMTAzLDE5MDM4LDE5MDQzLDk3LDExNCw1OSwxLDEwODQ3LDEwMSw0LDIsNTksMTEzLDE5MDUwLDE5MDUyLDEsODc0Myw1OSwxLDg3OTMsMTAxLDExNCwxMTIsNTksMSw4NDcyLDExNCw1OSwzLDU1MzQ5LDU2NjI4LDExMiwxMDIsNTksMyw1NTM0OSw1NjY4MCw1OSwxLDg0NzIsNCwyLDU5LDEwMSwxOTA4MSwxOTA4MywxLDg3NjgsOTcsMTE2LDEwNCw1OSwxLDg3NjgsOTksMTE0LDU5LDMsNTUzNDksNTY1MjQsNCwxNCw5OSwxMDAsMTAyLDEwNCwxMDUsMTA4LDEwOSwxMTAsMTExLDExNCwxMTUsMTE3LDExOCwxMTksMTkxMjUsMTkxNDYsMTkxNTIsMTkxNTcsMTkxNzMsMTkxNzYsMTkxOTIsMTkxOTcsMTkyMDIsMTkyMzYsMTkyNTIsMTkyNjksMTkyODYsMTkyOTEsNCwzLDk3LDEwNSwxMTcsMTkxMzMsMTkxMzcsMTkxNDIsMTEyLDU5LDEsODg5OCwxMTQsOTksNTksMSw5NzExLDExMiw1OSwxLDg4OTksMTE2LDExNCwxMDUsNTksMSw5NjYxLDExNCw1OSwzLDU1MzQ5LDU2NjI5LDQsMiw2NSw5NywxOTE2MywxOTE2OCwxMTQsMTE0LDU5LDEsMTAyMzQsMTE0LDExNCw1OSwxLDEwMjMxLDU5LDEsOTU4LDQsMiw2NSw5NywxOTE4MiwxOTE4NywxMTQsMTE0LDU5LDEsMTAyMzIsMTE0LDExNCw1OSwxLDEwMjI5LDk3LDExMiw1OSwxLDEwMjM2LDEwNSwxMTUsNTksMSw4OTU1LDQsMywxMDAsMTEyLDExNiwxOTIxMCwxOTIxNSwxOTIzMCwxMTEsMTE2LDU5LDEsMTA3NTIsNCwyLDEwMiwxMDgsMTkyMjEsMTkyMjUsNTksMyw1NTM0OSw1NjY4MSwxMTcsMTE1LDU5LDEsMTA3NTMsMTA1LDEwOSwxMDEsNTksMSwxMDc1NCw0LDIsNjUsOTcsMTkyNDIsMTkyNDcsMTE0LDExNCw1OSwxLDEwMjMzLDExNCwxMTQsNTksMSwxMDIzMCw0LDIsOTksMTEzLDE5MjU4LDE5MjYzLDExNCw1OSwzLDU1MzQ5LDU2NTI1LDk5LDExNywxMTIsNTksMSwxMDc1OCw0LDIsMTEyLDExNiwxOTI3NSwxOTI4MSwxMDgsMTE3LDExNSw1OSwxLDEwNzU2LDExNCwxMDUsNTksMSw5NjUxLDEwMSwxMDEsNTksMSw4ODk3LDEwMSwxMDAsMTAzLDEwMSw1OSwxLDg4OTYsNCw4LDk3LDk5LDEwMSwxMDIsMTA1LDExMSwxMTUsMTE3LDE5MzE2LDE5MzM1LDE5MzQ5LDE5MzU3LDE5MzYyLDE5MzY3LDE5MzczLDE5Mzc5LDk5LDQsMiwxMTcsMTIxLDE5MzIzLDE5MzMyLDExNiwxMDEsNSwyNTMsMSw1OSwxOTMzMCwxLDI1Myw1OSwxLDExMDMsNCwyLDEwNSwxMjEsMTkzNDEsMTkzNDYsMTE0LDk5LDU5LDEsMzc1LDU5LDEsMTA5OSwxMTAsNSwxNjUsMSw1OSwxOTM1NSwxLDE2NSwxMTQsNTksMyw1NTM0OSw1NjYzMCw5OSwxMjEsNTksMSwxMTExLDExMiwxMDIsNTksMyw1NTM0OSw1NjY4Miw5OSwxMTQsNTksMyw1NTM0OSw1NjUyNiw0LDIsOTksMTA5LDE5Mzg1LDE5Mzg5LDEyMSw1OSwxLDExMDIsMTA4LDUsMjU1LDEsNTksMTkzOTUsMSwyNTUsNCwxMCw5Nyw5OSwxMDAsMTAxLDEwMiwxMDQsMTA1LDExMSwxMTUsMTE5LDE5NDE5LDE5NDI2LDE5NDQxLDE5NDQ2LDE5NDYyLDE5NDY3LDE5NDcyLDE5NDgwLDE5NDg2LDE5NDkyLDk5LDExNywxMTYsMTAxLDU5LDEsMzc4LDQsMiw5NywxMjEsMTk0MzIsMTk0MzgsMTE0LDExMSwxMTAsNTksMSwzODIsNTksMSwxMDc5LDExMSwxMTYsNTksMSwzODAsNCwyLDEwMSwxMTYsMTk0NTIsMTk0NTgsMTE2LDExNCwxMDIsNTksMSw4NDg4LDk3LDU5LDEsOTUwLDExNCw1OSwzLDU1MzQ5LDU2NjMxLDk5LDEyMSw1OSwxLDEwNzgsMTAzLDExNCw5NywxMTQsMTE0LDU5LDEsODY2OSwxMTIsMTAyLDU5LDMsNTUzNDksNTY2ODMsOTksMTE0LDU5LDMsNTUzNDksNTY1MjcsNCwyLDEwNiwxMTAsMTk0OTgsMTk1MDEsNTksMSw4MjA1LDEwNiw1OSwxLDgyMDRdKTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUHJlcHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3InKTtcbmNvbnN0IHVuaWNvZGUgPSByZXF1aXJlKCcuLi9jb21tb24vdW5pY29kZScpO1xuY29uc3QgbmVUcmVlID0gcmVxdWlyZSgnLi9uYW1lZC1lbnRpdHktZGF0YScpO1xuY29uc3QgRVJSID0gcmVxdWlyZSgnLi4vY29tbW9uL2Vycm9yLWNvZGVzJyk7XG5cbi8vQWxpYXNlc1xuY29uc3QgJCA9IHVuaWNvZGUuQ09ERV9QT0lOVFM7XG5jb25zdCAkJCA9IHVuaWNvZGUuQ09ERV9QT0lOVF9TRVFVRU5DRVM7XG5cbi8vQzEgVW5pY29kZSBjb250cm9sIGNoYXJhY3RlciByZWZlcmVuY2UgcmVwbGFjZW1lbnRzXG5jb25zdCBDMV9DT05UUk9MU19SRUZFUkVOQ0VfUkVQTEFDRU1FTlRTID0ge1xuICAgIDB4ODA6IDB4MjBhYyxcbiAgICAweDgyOiAweDIwMWEsXG4gICAgMHg4MzogMHgwMTkyLFxuICAgIDB4ODQ6IDB4MjAxZSxcbiAgICAweDg1OiAweDIwMjYsXG4gICAgMHg4NjogMHgyMDIwLFxuICAgIDB4ODc6IDB4MjAyMSxcbiAgICAweDg4OiAweDAyYzYsXG4gICAgMHg4OTogMHgyMDMwLFxuICAgIDB4OGE6IDB4MDE2MCxcbiAgICAweDhiOiAweDIwMzksXG4gICAgMHg4YzogMHgwMTUyLFxuICAgIDB4OGU6IDB4MDE3ZCxcbiAgICAweDkxOiAweDIwMTgsXG4gICAgMHg5MjogMHgyMDE5LFxuICAgIDB4OTM6IDB4MjAxYyxcbiAgICAweDk0OiAweDIwMWQsXG4gICAgMHg5NTogMHgyMDIyLFxuICAgIDB4OTY6IDB4MjAxMyxcbiAgICAweDk3OiAweDIwMTQsXG4gICAgMHg5ODogMHgwMmRjLFxuICAgIDB4OTk6IDB4MjEyMixcbiAgICAweDlhOiAweDAxNjEsXG4gICAgMHg5YjogMHgyMDNhLFxuICAgIDB4OWM6IDB4MDE1MyxcbiAgICAweDllOiAweDAxN2UsXG4gICAgMHg5ZjogMHgwMTc4XG59O1xuXG4vLyBOYW1lZCBlbnRpdHkgdHJlZSBmbGFnc1xuY29uc3QgSEFTX0RBVEFfRkxBRyA9IDEgPDwgMDtcbmNvbnN0IERBVEFfRFVQTEVUX0ZMQUcgPSAxIDw8IDE7XG5jb25zdCBIQVNfQlJBTkNIRVNfRkxBRyA9IDEgPDwgMjtcbmNvbnN0IE1BWF9CUkFOQ0hfTUFSS0VSX1ZBTFVFID0gSEFTX0RBVEFfRkxBRyB8IERBVEFfRFVQTEVUX0ZMQUcgfCBIQVNfQlJBTkNIRVNfRkxBRztcblxuLy9TdGF0ZXNcbmNvbnN0IERBVEFfU1RBVEUgPSAnREFUQV9TVEFURSc7XG5jb25zdCBSQ0RBVEFfU1RBVEUgPSAnUkNEQVRBX1NUQVRFJztcbmNvbnN0IFJBV1RFWFRfU1RBVEUgPSAnUkFXVEVYVF9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9TVEFURSA9ICdTQ1JJUFRfREFUQV9TVEFURSc7XG5jb25zdCBQTEFJTlRFWFRfU1RBVEUgPSAnUExBSU5URVhUX1NUQVRFJztcbmNvbnN0IFRBR19PUEVOX1NUQVRFID0gJ1RBR19PUEVOX1NUQVRFJztcbmNvbnN0IEVORF9UQUdfT1BFTl9TVEFURSA9ICdFTkRfVEFHX09QRU5fU1RBVEUnO1xuY29uc3QgVEFHX05BTUVfU1RBVEUgPSAnVEFHX05BTUVfU1RBVEUnO1xuY29uc3QgUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSc7XG5jb25zdCBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEUnO1xuY29uc3QgUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJztcbmNvbnN0IFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURSc7XG5jb25zdCBSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSc7XG5jb25zdCBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJztcbmNvbnN0IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUnO1xuY29uc3QgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUnO1xuY29uc3QgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEUnO1xuY29uc3QgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUnO1xuY29uc3QgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUnO1xuY29uc3QgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFJztcbmNvbnN0IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFJztcbmNvbnN0IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURSc7XG5jb25zdCBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFJztcbmNvbnN0IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJztcbmNvbnN0IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFJztcbmNvbnN0IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUnO1xuY29uc3QgQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQVRUUklCVVRFX05BTUVfU1RBVEUnO1xuY29uc3QgQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUnO1xuY29uc3QgQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFJztcbmNvbnN0IEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFJztcbmNvbnN0IEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFJztcbmNvbnN0IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUnO1xuY29uc3QgQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURSA9ICdBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFJztcbmNvbnN0IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUgPSAnU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURSc7XG5jb25zdCBCT0dVU19DT01NRU5UX1NUQVRFID0gJ0JPR1VTX0NPTU1FTlRfU1RBVEUnO1xuY29uc3QgTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUgPSAnTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUnO1xuY29uc3QgQ09NTUVOVF9TVEFSVF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX1NUQVRFJztcbmNvbnN0IENPTU1FTlRfU1RBUlRfREFTSF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUnO1xuY29uc3QgQ09NTUVOVF9TVEFURSA9ICdDT01NRU5UX1NUQVRFJztcbmNvbnN0IENPTU1FTlRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9TVEFURSc7XG5jb25zdCBDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfU1RBVEUgPSAnQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX1NUQVRFJztcbmNvbnN0IENPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX1NUQVRFID0gJ0NPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX1NUQVRFJztcbmNvbnN0IENPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hfREFTSF9TVEFURSc7XG5jb25zdCBDT01NRU5UX0VORF9EQVNIX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0RBU0hfU1RBVEUnO1xuY29uc3QgQ09NTUVOVF9FTkRfU1RBVEUgPSAnQ09NTUVOVF9FTkRfU1RBVEUnO1xuY29uc3QgQ09NTUVOVF9FTkRfQkFOR19TVEFURSA9ICdDT01NRU5UX0VORF9CQU5HX1NUQVRFJztcbmNvbnN0IERPQ1RZUEVfU1RBVEUgPSAnRE9DVFlQRV9TVEFURSc7XG5jb25zdCBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUnO1xuY29uc3QgRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0RPQ1RZUEVfTkFNRV9TVEFURSc7XG5jb25zdCBBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFJztcbmNvbnN0IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURSc7XG5jb25zdCBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSc7XG5jb25zdCBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFJztcbmNvbnN0IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUnO1xuY29uc3QgQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJztcbmNvbnN0IEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURSA9ICdCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEUnO1xuY29uc3QgQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFJztcbmNvbnN0IEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFJztcbmNvbnN0IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnO1xuY29uc3QgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURSc7XG5jb25zdCBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnO1xuY29uc3QgQk9HVVNfRE9DVFlQRV9TVEFURSA9ICdCT0dVU19ET0NUWVBFX1NUQVRFJztcbmNvbnN0IENEQVRBX1NFQ1RJT05fU1RBVEUgPSAnQ0RBVEFfU0VDVElPTl9TVEFURSc7XG5jb25zdCBDREFUQV9TRUNUSU9OX0JSQUNLRVRfU1RBVEUgPSAnQ0RBVEFfU0VDVElPTl9CUkFDS0VUX1NUQVRFJztcbmNvbnN0IENEQVRBX1NFQ1RJT05fRU5EX1NUQVRFID0gJ0NEQVRBX1NFQ1RJT05fRU5EX1NUQVRFJztcbmNvbnN0IENIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBVEUgPSAnQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFURSc7XG5jb25zdCBOQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFID0gJ05BTUVEX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBVEUnO1xuY29uc3QgQU1CSUdVT1VTX0FNUEVSU0FORF9TVEFURSA9ICdBTUJJR1VPU19BTVBFUlNBTkRfU1RBVEUnO1xuY29uc3QgTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFID0gJ05VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFURSc7XG5jb25zdCBIRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUX1NUQVRFID0gJ0hFWEFERU1JQ0FMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBUlRfU1RBVEUnO1xuY29uc3QgREVDSU1BTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUX1NUQVRFID0gJ0RFQ0lNQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVF9TVEFURSc7XG5jb25zdCBIRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFID0gJ0hFWEFERU1JQ0FMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBVEUnO1xuY29uc3QgREVDSU1BTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFID0gJ0RFQ0lNQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFURSc7XG5jb25zdCBOVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfRU5EX1NUQVRFID0gJ05VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRfU1RBVEUnO1xuXG4vL1V0aWxzXG5cbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cbi8vQWx3YXlzIHBlcmZvcm0gaW5saW5pbmcgY2hlY2sgYmVmb3JlIG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9ucyAoJ25vZGUgLS10cmFjZS1pbmxpbmluZycpLlxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNwKSB7XG4gICAgcmV0dXJuIGNwID09PSAkLlNQQUNFIHx8IGNwID09PSAkLkxJTkVfRkVFRCB8fCBjcCA9PT0gJC5UQUJVTEFUSU9OIHx8IGNwID09PSAkLkZPUk1fRkVFRDtcbn1cblxuZnVuY3Rpb24gaXNBc2NpaURpZ2l0KGNwKSB7XG4gICAgcmV0dXJuIGNwID49ICQuRElHSVRfMCAmJiBjcCA8PSAkLkRJR0lUXzk7XG59XG5cbmZ1bmN0aW9uIGlzQXNjaWlVcHBlcihjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcbn1cblxuZnVuY3Rpb24gaXNBc2NpaUxvd2VyKGNwKSB7XG4gICAgcmV0dXJuIGNwID49ICQuTEFUSU5fU01BTExfQSAmJiBjcCA8PSAkLkxBVElOX1NNQUxMX1o7XG59XG5cbmZ1bmN0aW9uIGlzQXNjaWlMZXR0ZXIoY3ApIHtcbiAgICByZXR1cm4gaXNBc2NpaUxvd2VyKGNwKSB8fCBpc0FzY2lpVXBwZXIoY3ApO1xufVxuXG5mdW5jdGlvbiBpc0FzY2lpQWxwaGFOdW1lcmljKGNwKSB7XG4gICAgcmV0dXJuIGlzQXNjaWlMZXR0ZXIoY3ApIHx8IGlzQXNjaWlEaWdpdChjcCk7XG59XG5cbmZ1bmN0aW9uIGlzQXNjaWlVcHBlckhleERpZ2l0KGNwKSB7XG4gICAgcmV0dXJuIGNwID49ICQuTEFUSU5fQ0FQSVRBTF9BICYmIGNwIDw9ICQuTEFUSU5fQ0FQSVRBTF9GO1xufVxuXG5mdW5jdGlvbiBpc0FzY2lpTG93ZXJIZXhEaWdpdChjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9GO1xufVxuXG5mdW5jdGlvbiBpc0FzY2lpSGV4RGlnaXQoY3ApIHtcbiAgICByZXR1cm4gaXNBc2NpaURpZ2l0KGNwKSB8fCBpc0FzY2lpVXBwZXJIZXhEaWdpdChjcCkgfHwgaXNBc2NpaUxvd2VySGV4RGlnaXQoY3ApO1xufVxuXG5mdW5jdGlvbiB0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApIHtcbiAgICByZXR1cm4gY3AgKyAweDAwMjA7XG59XG5cbi8vTk9URTogU3RyaW5nLmZyb21DaGFyQ29kZSgpIGZ1bmN0aW9uIGNhbiBoYW5kbGUgb25seSBjaGFyYWN0ZXJzIGZyb20gQk1QIHN1YnNldC5cbi8vU28sIHdlIG5lZWQgdG8gd29ya2Fyb3VuZCB0aGlzIG1hbnVhbGx5LlxuLy8oc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9mcm9tQ2hhckNvZGUjR2V0dGluZ19pdF90b193b3JrX3dpdGhfaGlnaGVyX3ZhbHVlcylcbmZ1bmN0aW9uIHRvQ2hhcihjcCkge1xuICAgIGlmIChjcCA8PSAweGZmZmYpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApO1xuICAgIH1cblxuICAgIGNwIC09IDB4MTAwMDA7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKChjcCA+Pj4gMTApICYgMHgzZmYpIHwgMHhkODAwKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkYzAwIHwgKGNwICYgMHgzZmYpKTtcbn1cblxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ2hhcihjcCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xufVxuXG5mdW5jdGlvbiBmaW5kTmFtZWRFbnRpdHlUcmVlQnJhbmNoKG5vZGVJeCwgY3ApIHtcbiAgICBjb25zdCBicmFuY2hDb3VudCA9IG5lVHJlZVsrK25vZGVJeF07XG4gICAgbGV0IGxvID0gKytub2RlSXg7XG4gICAgbGV0IGhpID0gbG8gKyBicmFuY2hDb3VudCAtIDE7XG5cbiAgICB3aGlsZSAobG8gPD0gaGkpIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBjb25zdCBtaWRDcCA9IG5lVHJlZVttaWRdO1xuXG4gICAgICAgIGlmIChtaWRDcCA8IGNwKSB7XG4gICAgICAgICAgICBsbyA9IG1pZCArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAobWlkQ3AgPiBjcCkge1xuICAgICAgICAgICAgaGkgPSBtaWQgLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5lVHJlZVttaWQgKyBicmFuY2hDb3VudF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG59XG5cbi8vVG9rZW5pemVyXG5jbGFzcyBUb2tlbml6ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NvciA9IG5ldyBQcmVwcm9jZXNzb3IoKTtcblxuICAgICAgICB0aGlzLnRva2VuUXVldWUgPSBbXTtcblxuICAgICAgICB0aGlzLmFsbG93Q0RBVEEgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9ICcnO1xuXG4gICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAtMTtcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSAnJztcblxuICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCA9IC0xO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyID0gbnVsbDtcbiAgICB9XG5cbiAgICAvL0Vycm9yc1xuICAgIF9lcnIoKSB7XG4gICAgICAgIC8vIE5PVEU6IGVyciByZXBvcnRpbmcgaXMgbm9vcCBieSBkZWZhdWx0LiBFbmFibGVkIGJ5IG1peGluLlxuICAgIH1cblxuICAgIF9lcnJPbk5leHRDb2RlUG9pbnQoZXJyKSB7XG4gICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5fZXJyKGVycik7XG4gICAgICAgIHRoaXMuX3VuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIC8vQVBJXG4gICAgZ2V0TmV4dFRva2VuKCkge1xuICAgICAgICB3aGlsZSAoIXRoaXMudG9rZW5RdWV1ZS5sZW5ndGggJiYgdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZWRBZnRlclNuYXBzaG90ID0gMDtcblxuICAgICAgICAgICAgY29uc3QgY3AgPSB0aGlzLl9jb25zdW1lKCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXNbdGhpcy5zdGF0ZV0oY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5RdWV1ZS5zaGlmdCgpO1xuICAgIH1cblxuICAgIHdyaXRlKGNodW5rLCBpc0xhc3RDaHVuaykge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLndyaXRlKGNodW5rLCBpc0xhc3RDaHVuayk7XG4gICAgfVxuXG4gICAgaW5zZXJ0SHRtbEF0Q3VycmVudFBvcyhjaHVuaykge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmluc2VydEh0bWxBdEN1cnJlbnRQb3MoY2h1bmspO1xuICAgIH1cblxuICAgIC8vSGliZXJuYXRpb25cbiAgICBfZW5zdXJlSGliZXJuYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5lbmRPZkNodW5rSGl0KSB7XG4gICAgICAgICAgICBmb3IgKDsgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QgPiAwOyB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdC0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2goeyB0eXBlOiBUb2tlbml6ZXIuSElCRVJOQVRJT05fVE9LRU4gfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vQ29uc3VtcHRpb25cbiAgICBfY29uc3VtZSgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QrKztcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2UoKTtcbiAgICB9XG5cbiAgICBfdW5jb25zdW1lKCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdC0tO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KCk7XG4gICAgfVxuXG4gICAgX3JlY29uc3VtZUluU3RhdGUoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLl91bmNvbnN1bWUoKTtcbiAgICB9XG5cbiAgICBfY29uc3VtZVNlcXVlbmNlSWZNYXRjaChwYXR0ZXJuLCBzdGFydENwLCBjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIGxldCBjb25zdW1lZENvdW50ID0gMDtcbiAgICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICBjb25zdCBwYXR0ZXJuTGVuZ3RoID0gcGF0dGVybi5sZW5ndGg7XG4gICAgICAgIGxldCBwYXR0ZXJuUG9zID0gMDtcbiAgICAgICAgbGV0IGNwID0gc3RhcnRDcDtcbiAgICAgICAgbGV0IHBhdHRlcm5DcCA9IHZvaWQgMDtcblxuICAgICAgICBmb3IgKDsgcGF0dGVyblBvcyA8IHBhdHRlcm5MZW5ndGg7IHBhdHRlcm5Qb3MrKykge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm5Qb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXR0ZXJuQ3AgPSBwYXR0ZXJuW3BhdHRlcm5Qb3NdO1xuXG4gICAgICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm5DcCAmJiAoY2FzZVNlbnNpdGl2ZSB8fCBjcCAhPT0gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KHBhdHRlcm5DcCkpKSB7XG4gICAgICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICB3aGlsZSAoY29uc3VtZWRDb3VudC0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNNYXRjaDtcbiAgICB9XG5cbiAgICAvL1RlbXAgYnVmZmVyXG4gICAgX2lzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBCdWZmLmxlbmd0aCAhPT0gJCQuU0NSSVBUX1NUUklORy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wQnVmZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVtcEJ1ZmZbaV0gIT09ICQkLlNDUklQVF9TVFJJTkdbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvL1Rva2VuIGNyZWF0aW9uXG4gICAgX2NyZWF0ZVN0YXJ0VGFnVG9rZW4oKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTixcbiAgICAgICAgICAgIHRhZ05hbWU6ICcnLFxuICAgICAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgICAgICAgYWNrU2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cnM6IFtdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2NyZWF0ZUVuZFRhZ1Rva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuaXplci5FTkRfVEFHX1RPS0VOLFxuICAgICAgICAgICAgdGFnTmFtZTogJycsXG4gICAgICAgICAgICBzZWxmQ2xvc2luZzogZmFsc2UsXG4gICAgICAgICAgICBhdHRyczogW11cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29tbWVudFRva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuaXplci5DT01NRU5UX1RPS0VOLFxuICAgICAgICAgICAgZGF0YTogJydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlRG9jdHlwZVRva2VuKGluaXRpYWxOYW1lKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4sXG4gICAgICAgICAgICBuYW1lOiBpbml0aWFsTmFtZSxcbiAgICAgICAgICAgIGZvcmNlUXVpcmtzOiBmYWxzZSxcbiAgICAgICAgICAgIHB1YmxpY0lkOiBudWxsLFxuICAgICAgICAgICAgc3lzdGVtSWQ6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2hhcmFjdGVyVG9rZW4odHlwZSwgY2gpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgY2hhcnM6IGNoXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2NyZWF0ZUVPRlRva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHsgdHlwZTogVG9rZW5pemVyLkVPRl9UT0tFTiB9O1xuICAgIH1cblxuICAgIC8vVGFnIGF0dHJpYnV0ZXNcbiAgICBfY3JlYXRlQXR0cihhdHRyTmFtZUZpcnN0Q2gpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lRmlyc3RDaCxcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9sZWF2ZUF0dHJOYW1lKHRvU3RhdGUpIHtcbiAgICAgICAgaWYgKFRva2VuaXplci5nZXRUb2tlbkF0dHIodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmF0dHJzLnB1c2godGhpcy5jdXJyZW50QXR0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmR1cGxpY2F0ZUF0dHJpYnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gdG9TdGF0ZTtcbiAgICB9XG5cbiAgICBfbGVhdmVBdHRyVmFsdWUodG9TdGF0ZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gdG9TdGF0ZTtcbiAgICB9XG5cbiAgICAvL1Rva2VuIGVtaXNzaW9uXG4gICAgX2VtaXRDdXJyZW50VG9rZW4oKSB7XG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcblxuICAgICAgICBjb25zdCBjdCA9IHRoaXMuY3VycmVudFRva2VuO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcblxuICAgICAgICAvL05PVEU6IHN0b3JlIGVtaXRlZCBzdGFydCB0YWcncyB0YWdOYW1lIHRvIGRldGVybWluZSBpcyB0aGUgZm9sbG93aW5nIGVuZCB0YWcgdG9rZW4gaXMgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChjdC50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSBjdC50YWdOYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKGN0LnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKSB7XG4gICAgICAgICAgICBpZiAoY3QuYXR0cnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW5kVGFnV2l0aEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3Quc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVuZFRhZ1dpdGhUcmFpbGluZ1NvbGlkdXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2goY3QpO1xuICAgIH1cblxuICAgIF9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9lbWl0RU9GVG9rZW4oKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVPRlRva2VuKCk7XG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICB9XG5cbiAgICAvL0NoYXJhY3RlcnMgZW1pc3Npb25cblxuICAgIC8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXG4gICAgLy9UaGlzIGNhdXNlcyBhIGh1Z2UgbWVtb3J5IG92ZXJoZWFkIGFuZCBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBwYXJzZXIgbG9vcHMuIHBhcnNlNSB1c2VzIDMgZ3JvdXBzIG9mIGNoYXJhY3RlcnMuXG4gICAgLy9JZiB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBncm91cCwgcGFyc2VyIGNhbiBwcm9jZXNzIGl0XG4gICAgLy9hcyBhIHNpbmdsZSBzb2xpZCBjaGFyYWN0ZXIgdG9rZW4uXG4gICAgLy9TbywgdGhlcmUgYXJlIDMgdHlwZXMgb2YgY2hhcmFjdGVyIHRva2VucyBpbiBwYXJzZTU6XG4gICAgLy8xKU5VTExfQ0hBUkFDVEVSX1RPS0VOIC0gXFx1MDAwMC1jaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKVxuICAgIC8vMilXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcbiAgICAvLzMpQ0hBUkFDVEVSX1RPS0VOIC0gYW55IGNoYXJhY3RlciBzZXF1ZW5jZSB3aGljaCBkb24ndCBiZWxvbmcgdG8gZ3JvdXBzIDEgYW5kIDIgKGUuZy4gJ2FiY2RlZjEyMzRAQCMkJV4nKVxuICAgIF9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4odHlwZSwgY2gpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLnR5cGUgIT09IHR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2hhcnMgKz0gY2g7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZW1pdENvZGVQb2ludChjcCkge1xuICAgICAgICBsZXQgdHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XG5cbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU47XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdHlwZSA9IFRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCB0b0NoYXIoY3ApKTtcbiAgICB9XG5cbiAgICBfZW1pdFNldmVyYWxDb2RlUG9pbnRzKGNvZGVQb2ludHMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNvZGVQb2ludHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9OT1RFOiB1c2VkIHRoZW4gd2UgZW1pdCBjaGFyYWN0ZXIgZXhwbGljaXRseS4gVGhpcyBpcyBhbHdheXMgYSBub24td2hpdGVzcGFjZSBhbmQgYSBub24tbnVsbCBjaGFyYWN0ZXIuXG4gICAgLy9TbyB3ZSBjYW4gYXZvaWQgYWRkaXRpb25hbCBjaGVja3MgaGVyZS5cbiAgICBfZW1pdENoYXJzKGNoKSB7XG4gICAgICAgIHRoaXMuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbihUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOLCBjaCk7XG4gICAgfVxuXG4gICAgLy8gQ2hhcmFjdGVyIHJlZmVyZW5jZSBoZWxwZXJzXG4gICAgX21hdGNoTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2Uoc3RhcnRDcCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgbGV0IGV4Y2VzcyA9IDE7XG4gICAgICAgIGxldCBpID0gZmluZE5hbWVkRW50aXR5VHJlZUJyYW5jaCgwLCBzdGFydENwKTtcblxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goc3RhcnRDcCk7XG5cbiAgICAgICAgd2hpbGUgKGkgPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IG5lVHJlZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGluTm9kZSA9IGN1cnJlbnQgPCBNQVhfQlJBTkNIX01BUktFUl9WQUxVRTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVXaXRoRGF0YSA9IGluTm9kZSAmJiBjdXJyZW50ICYgSEFTX0RBVEFfRkxBRztcblxuICAgICAgICAgICAgaWYgKG5vZGVXaXRoRGF0YSkge1xuICAgICAgICAgICAgICAgIC8vTk9URTogd2UgdXNlIGdyZWVkeSBzZWFyY2gsIHNvIHdlIGNvbnRpbnVlIGxvb2t1cCBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudCAmIERBVEFfRFVQTEVUX0ZMQUcgPyBbbmVUcmVlWysraV0sIG5lVHJlZVsrK2ldXSA6IFtuZVRyZWVbKytpXV07XG4gICAgICAgICAgICAgICAgZXhjZXNzID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3AgPSB0aGlzLl9jb25zdW1lKCk7XG5cbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgICAgICBleGNlc3MrKztcblxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5Ob2RlKSB7XG4gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgJiBIQVNfQlJBTkNIRVNfRkxBRyA/IGZpbmROYW1lZEVudGl0eVRyZWVCcmFuY2goaSwgY3ApIDogLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjcCA9PT0gY3VycmVudCA/ICsraSA6IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGV4Y2Vzcy0tKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBCdWZmLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIF9pc0NoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9PT0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEUgfHxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPT09IEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFIHx8XG4gICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID09PSBBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfaXNDaGFyYWN0ZXJSZWZlcmVuY2VBdHRyaWJ1dGVRdWlyayh3aXRoU2VtaWNvbG9uKSB7XG4gICAgICAgIGlmICghd2l0aFNlbWljb2xvbiAmJiB0aGlzLl9pc0NoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDcCA9IHRoaXMuX2NvbnN1bWUoKTtcblxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXh0Q3AgPT09ICQuRVFVQUxTX1NJR04gfHwgaXNBc2NpaUFscGhhTnVtZXJpYyhuZXh0Q3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9mbHVzaENvZGVQb2ludHNDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKCkge1xuICAgICAgICBpZiAodGhpcy5faXNDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZSgpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGVtcEJ1ZmYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcih0aGlzLnRlbXBCdWZmW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBTdGF0ZSBtYWNoaW5lXG5cbiAgICAvLyBEYXRhIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbREFUQV9TVEFURV0oY3ApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG5cbiAgICAgICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVEFHX09QRU5fU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XG4gICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gIFJDREFUQSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1JDREFUQV9TVEFURV0oY3ApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG5cbiAgICAgICAgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFJDREFUQV9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSQVdURVhUIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbUkFXVEVYVF9TVEFURV0oY3ApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG5cbiAgICAgICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NyaXB0IGRhdGEgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtTQ1JJUFRfREFUQV9TVEFURV0oY3ApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG5cbiAgICAgICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnModW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBMQUlOVEVYVCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1BMQUlOVEVYVF9TVEFURV0oY3ApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG5cbiAgICAgICAgaWYgKGNwID09PSAkLk5VTEwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUYWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1RBR19PUEVOX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE1BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBFTkRfVEFHX09QRU5fU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaUxldHRlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoVEFHX05BTUVfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlFVRVNUSU9OX01BUkspIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZFF1ZXN0aW9uTWFya0luc3RlYWRPZlRhZ05hbWUpO1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEJPR1VTX0NPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZCZWZvcmVUYWdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmludmFsaWRGaXJzdENoYXJhY3Rlck9mVGFnTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtFTkRfVEFHX09QRU5fU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoVEFHX05BTUVfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdFbmRUYWdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZCZWZvcmVUYWdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbnZhbGlkRmlyc3RDaGFyYWN0ZXJPZlRhZ05hbWUpO1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEJPR1VTX0NPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtUQUdfTkFNRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJDREFUQSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSQ0RBVEEgZW5kIHRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJDREFUQSBlbmQgdGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQ0RBVEFfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSQVdURVhUIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1JBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUxldHRlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSQVdURVhUIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1JBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjcmlwdCBkYXRhIGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwhJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NyaXB0IGRhdGEgZW5kIHRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUxldHRlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjcmlwdCBkYXRhIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XG4gICAgICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0U3RhcnRUYWdOYW1lID09PSB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnModW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnModW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJz4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgbGVzcy10aGFuIHNpZ24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUxldHRlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5faXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpXG4gICAgICAgICAgICAgICAgPyBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURVxuICAgICAgICAgICAgICAgIDogU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaCh0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnModW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJz4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgbGVzcy10aGFuIHNpZ24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIGVuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5faXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpXG4gICAgICAgICAgICAgICAgPyBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFXG4gICAgICAgICAgICAgICAgOiBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcblxuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCZWZvcmUgYXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVRVUFMU19TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRFcXVhbHNTaWduQmVmb3JlQXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKCc9Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKCcnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQVRUUklCVVRFX05BTUVfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtBVFRSSUJVVEVfTkFNRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRVFVQUxTX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLIHx8IGNwID09PSAkLkFQT1NUUk9QSEUgfHwgY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZENoYXJhY3RlckluQXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSB1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtBRlRFUl9BVFRSSUJVVEVfTkFNRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoJycpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShBVFRSSUJVVEVfTkFNRV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCZWZvcmUgYXR0cmlidXRlIHZhbHVlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBdHRyaWJ1dGUgdmFsdWUgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XG4gICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXR0cmlidXRlIHZhbHVlIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XG4gICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URURfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZShEQVRBX1NUQVRFKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdW5pY29kZS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fFxuICAgICAgICAgICAgY3AgPT09ICQuQVBPU1RST1BIRSB8fFxuICAgICAgICAgICAgY3AgPT09ICQuTEVTU19USEFOX1NJR04gfHxcbiAgICAgICAgICAgIGNwID09PSAkLkVRVUFMU19TSUdOIHx8XG4gICAgICAgICAgICBjcCA9PT0gJC5HUkFWRV9BQ0NFTlRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJblVucXVvdGVkQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFmdGVyIGF0dHJpYnV0ZSB2YWx1ZSAocXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0FGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZShEQVRBX1NUQVRFKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VsZi1jbG9zaW5nIHN0YXJ0IHRhZyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW1NFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkU29saWR1c0luVGFnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvZ3VzIGNvbW1lbnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtCT0dVU19DT01NRU5UX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFya3VwIGRlY2xhcmF0aW9uIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtNQVJLVVBfREVDTEFSQVRJT05fT1BFTl9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuREFTSF9EQVNIX1NUUklORywgY3AsIHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuRE9DVFlQRV9TVFJJTkcsIGNwLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuQ0RBVEFfU1RBUlRfU1RSSU5HLCBjcCwgdHJ1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93Q0RBVEEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQ0RBVEFfU0VDVElPTl9TVEFURTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5jZGF0YUluSHRtbENvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgPSAnW0NEQVRBWyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0NPTU1FTlRfU1RBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL05PVEU6IHNlcXVlbmNlIGxvb2t1cCBjYW4gYmUgYWJydXB0ZWQgYnkgaGliZXJuYXRpb24uIEluIHRoYXQgY2FzZSBsb29rdXBcbiAgICAgICAgLy9yZXN1bHRzIGFyZSBubyBsb25nZXIgdmFsaWQgYW5kIHdlIHdpbGwgbmVlZCB0byBzdGFydCBvdmVyLlxuICAgICAgICBlbHNlIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbmNvcnJlY3RseU9wZW5lZENvbW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEJPR1VTX0NPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tbWVudCBzdGFydCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfU1RBUlRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuYWJydXB0Q2xvc2luZ09mRW1wdHlDb21tZW50KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDT01NRU5UX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfU1RBUlRfREFTSF9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdENsb3NpbmdPZkVtcHR5Q29tbWVudCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKENPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tbWVudCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICc8JztcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tbWVudCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfTEVTU19USEFOX1NJR05fU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICchJztcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJyEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDT01NRU5UX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbW1lbnQgbGVzcy10aGFuIHNpZ24gYmFuZyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX1NUQVRFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDT01NRU5UX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbW1lbnQgbGVzcy10aGFuIHNpZ24gYmFuZyBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSF9EQVNIX1NUQVRFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDT01NRU5UX0VORF9EQVNIX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbW1lbnQgbGVzcy10aGFuIHNpZ24gYmFuZyBkYXNoIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSF9EQVNIX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgIT09ICQuR1JFQVRFUl9USEFOX1NJR04gJiYgY3AgIT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm5lc3RlZENvbW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDT01NRU5UX0VORF9TVEFURSk7XG4gICAgfVxuXG4gICAgLy8gQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfRU5EX0RBU0hfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKENPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tbWVudCBlbmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtDT01NRU5UX0VORF9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfQkFOR19TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkNvbW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKENPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NPTU1FTlRfRU5EX0JBTkdfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfREFTSF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbmNvcnJlY3RseUNsb3NlZENvbW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKENPTU1FTlRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRE9DVFlQRSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0RPQ1RZUEVfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nV2hpdGVzcGFjZUJlZm9yZURvY3R5cGVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4obnVsbCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKHRvQ2hhcihjcCkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIERPQ1RZUEUgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0RPQ1RZUEVfTkFNRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHRvQ2hhcihjcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZnRlciBET0NUWVBFIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uc3VtZVNlcXVlbmNlSWZNYXRjaCgkJC5QVUJMSUNfU1RSSU5HLCBjcCwgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKCQkLlNZU1RFTV9TVFJJTkcsIGNwLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFO1xuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogc2VxdWVuY2UgbG9va3VwIGNhbiBiZSBhYnJ1cHRlZCBieSBoaWJlcm5hdGlvbi4gSW4gdGhhdCBjYXNlIGxvb2t1cFxuICAgICAgICAvL3Jlc3VsdHMgYXJlIG5vIGxvbmdlciB2YWxpZCBhbmQgd2Ugd2lsbCBuZWVkIHRvIHN0YXJ0IG92ZXIuXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmludmFsaWRDaGFyYWN0ZXJTZXF1ZW5jZUFmdGVyRG9jdHlwZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCT0dVU19ET0NUWVBFX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCT0dVU19ET0NUWVBFX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJlZm9yZSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEJPR1VTX0RPQ1RZUEVfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSB1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnJ1cHREb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSB1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnJ1cHREb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFmdGVyIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQk9HVVNfRE9DVFlQRV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEJPR1VTX0RPQ1RZUEVfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEJPR1VTX0RPQ1RZUEVfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQmVmb3JlIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtCRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ0RvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQk9HVVNfRE9DVFlQRV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdERvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdERvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRDaGFyYWN0ZXJBZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQk9HVVNfRE9DVFlQRV9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCb2d1cyBET0NUWVBFIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQk9HVVNfRE9DVFlQRV9TVEFURV0oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ0RBVEEgc2VjdGlvbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0NEQVRBX1NFQ1RJT05fU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENEQVRBX1NFQ1RJT05fQlJBQ0tFVF9TVEFURTtcbiAgICAgICAgfSBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5DZGF0YSk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ0RBVEEgc2VjdGlvbiBicmFja2V0IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQ0RBVEFfU0VDVElPTl9CUkFDS0VUX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuUklHSFRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDREFUQV9TRUNUSU9OX0VORF9TVEFURTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnXScpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDREFUQV9TRUNUSU9OX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENEQVRBIHNlY3Rpb24gZW5kIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbQ0RBVEFfU0VDVElPTl9FTkRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuUklHSFRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnXScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCddXScpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShDREFUQV9TRUNUSU9OX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtDSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFXShjcCkge1xuICAgICAgICB0aGlzLnRlbXBCdWZmID0gWyQuQU1QRVJTQU5EXTtcblxuICAgICAgICBpZiAoY3AgPT09ICQuTlVNQkVSX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlBbHBoYU51bWVyaWMoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKE5BTUVEX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBVEUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRzQ29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZSh0aGlzLnJldHVyblN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtOQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFXShjcCkge1xuICAgICAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHRoaXMuX21hdGNoTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuXG4gICAgICAgIC8vTk9URTogbWF0Y2hpbmcgY2FuIGJlIGFicnVwdGVkIGJ5IGhpYmVybmF0aW9uLiBJbiB0aGF0IGNhc2UgbWF0Y2hcbiAgICAgICAgLy9yZXN1bHRzIGFyZSBubyBsb25nZXIgdmFsaWQgYW5kIHdlIHdpbGwgbmVlZCB0byBzdGFydCBvdmVyLlxuICAgICAgICBpZiAodGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFskLkFNUEVSU0FORF07XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hSZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpdGhTZW1pY29sb24gPSB0aGlzLnRlbXBCdWZmW3RoaXMudGVtcEJ1ZmYubGVuZ3RoIC0gMV0gPT09ICQuU0VNSUNPTE9OO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzQ2hhcmFjdGVyUmVmZXJlbmNlQXR0cmlidXRlUXVpcmsod2l0aFNlbWljb2xvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXdpdGhTZW1pY29sb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyT25OZXh0Q29kZVBvaW50KEVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBtYXRjaFJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRzQ29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludHNDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQU1CSUdVT1VTX0FNUEVSU0FORF9TVEFURTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFtYmlndW9zIGFtcGVyc2FuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0FNQklHVU9VU19BTVBFUlNBTkRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpQWxwaGFOdW1lcmljKGNwKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU0VNSUNPTE9OKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmtub3duTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKHRoaXMucmV0dXJuU3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBbTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFXShjcCkge1xuICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gMDtcblxuICAgICAgICBpZiAoY3AgPT09ICQuTEFUSU5fU01BTExfWCB8fCBjcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVF9TVEFURTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREVDSU1BTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUX1NUQVRFKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhleGFkZW1pY2FsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtIRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUX1NUQVRFXShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUhleERpZ2l0KGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShIRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVRFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuYWJzZW5jZU9mRGlnaXRzSW5OdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50c0NvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUodGhpcy5yZXR1cm5TdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWNpbWFsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBUlRfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpRGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERFQ0lNQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFURSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludHNDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKHRoaXMucmV0dXJuU3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGV4YWRlbWljYWwgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW0hFWEFERU1JQ0FMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpVXBwZXJIZXhEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSB0aGlzLmNoYXJSZWZDb2RlICogMTYgKyBjcCAtIDB4Mzc7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBc2NpaUxvd2VySGV4RGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gdGhpcy5jaGFyUmVmQ29kZSAqIDE2ICsgY3AgLSAweDU3O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXNjaWlEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSB0aGlzLmNoYXJSZWZDb2RlICogMTYgKyBjcCAtIDB4MzA7XG4gICAgICAgIH0gZWxzZSBpZiAoY3AgPT09ICQuU0VNSUNPTE9OKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX0VORF9TVEFURTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1NlbWljb2xvbkFmdGVyQ2hhcmFjdGVyUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX0VORF9TVEFURSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWNpbWFsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFtERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfU1RBVEVdKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpRGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gdGhpcy5jaGFyUmVmQ29kZSAqIDEwICsgY3AgLSAweDMwO1xuICAgICAgICB9IGVsc2UgaWYgKGNwID09PSAkLlNFTUlDT0xPTikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRfU1RBVEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdTZW1pY29sb25BZnRlckNoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKE5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRfU1RBVEUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIGVuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgW05VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRfU1RBVEVdKCkge1xuICAgICAgICBpZiAodGhpcy5jaGFyUmVmQ29kZSA9PT0gJC5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm51bGxDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhclJlZkNvZGUgPiAweDEwZmZmZikge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5jaGFyYWN0ZXJSZWZlcmVuY2VPdXRzaWRlVW5pY29kZVJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfSBlbHNlIGlmICh1bmljb2RlLmlzU3Vycm9nYXRlKHRoaXMuY2hhclJlZkNvZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnN1cnJvZ2F0ZUNoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gJC5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgIH0gZWxzZSBpZiAodW5pY29kZS5pc1VuZGVmaW5lZENvZGVQb2ludCh0aGlzLmNoYXJSZWZDb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5ub25jaGFyYWN0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHVuaWNvZGUuaXNDb250cm9sQ29kZVBvaW50KHRoaXMuY2hhclJlZkNvZGUpIHx8IHRoaXMuY2hhclJlZkNvZGUgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmNvbnRyb2xDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IEMxX0NPTlRST0xTX1JFRkVSRU5DRV9SRVBMQUNFTUVOVFNbdGhpcy5jaGFyUmVmQ29kZV07XG5cbiAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSByZXBsYWNlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbdGhpcy5jaGFyUmVmQ29kZV07XG5cbiAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRzQ29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSgpO1xuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKHRoaXMucmV0dXJuU3RhdGUpO1xuICAgIH1cbn1cblxuLy9Ub2tlbiB0eXBlc1xuVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiA9ICdDSEFSQUNURVJfVE9LRU4nO1xuVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOID0gJ05VTExfQ0hBUkFDVEVSX1RPS0VOJztcblRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiA9ICdXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTic7XG5Ub2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOID0gJ1NUQVJUX1RBR19UT0tFTic7XG5Ub2tlbml6ZXIuRU5EX1RBR19UT0tFTiA9ICdFTkRfVEFHX1RPS0VOJztcblRva2VuaXplci5DT01NRU5UX1RPS0VOID0gJ0NPTU1FTlRfVE9LRU4nO1xuVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4gPSAnRE9DVFlQRV9UT0tFTic7XG5Ub2tlbml6ZXIuRU9GX1RPS0VOID0gJ0VPRl9UT0tFTic7XG5Ub2tlbml6ZXIuSElCRVJOQVRJT05fVE9LRU4gPSAnSElCRVJOQVRJT05fVE9LRU4nO1xuXG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXG5Ub2tlbml6ZXIuTU9ERSA9IHtcbiAgICBEQVRBOiBEQVRBX1NUQVRFLFxuICAgIFJDREFUQTogUkNEQVRBX1NUQVRFLFxuICAgIFJBV1RFWFQ6IFJBV1RFWFRfU1RBVEUsXG4gICAgU0NSSVBUX0RBVEE6IFNDUklQVF9EQVRBX1NUQVRFLFxuICAgIFBMQUlOVEVYVDogUExBSU5URVhUX1NUQVRFXG59O1xuXG4vL1N0YXRpY1xuVG9rZW5pemVyLmdldFRva2VuQXR0ciA9IGZ1bmN0aW9uKHRva2VuLCBhdHRyTmFtZSkge1xuICAgIGZvciAobGV0IGkgPSB0b2tlbi5hdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodG9rZW4uYXR0cnNbaV0ubmFtZSA9PT0gYXR0ck5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5hdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUb2tlbml6ZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgTlMgPSAoZXhwb3J0cy5OQU1FU1BBQ0VTID0ge1xuICAgIEhUTUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcbiAgICBNQVRITUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJyxcbiAgICBTVkc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gICAgWExJTks6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgICBYTUw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxuICAgIFhNTE5TOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nXG59KTtcblxuZXhwb3J0cy5BVFRSUyA9IHtcbiAgICBUWVBFOiAndHlwZScsXG4gICAgQUNUSU9OOiAnYWN0aW9uJyxcbiAgICBFTkNPRElORzogJ2VuY29kaW5nJyxcbiAgICBQUk9NUFQ6ICdwcm9tcHQnLFxuICAgIE5BTUU6ICduYW1lJyxcbiAgICBDT0xPUjogJ2NvbG9yJyxcbiAgICBGQUNFOiAnZmFjZScsXG4gICAgU0laRTogJ3NpemUnXG59O1xuXG5leHBvcnRzLkRPQ1VNRU5UX01PREUgPSB7XG4gICAgTk9fUVVJUktTOiAnbm8tcXVpcmtzJyxcbiAgICBRVUlSS1M6ICdxdWlya3MnLFxuICAgIExJTUlURURfUVVJUktTOiAnbGltaXRlZC1xdWlya3MnXG59O1xuXG5jb25zdCAkID0gKGV4cG9ydHMuVEFHX05BTUVTID0ge1xuICAgIEE6ICdhJyxcbiAgICBBRERSRVNTOiAnYWRkcmVzcycsXG4gICAgQU5OT1RBVElPTl9YTUw6ICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgQVBQTEVUOiAnYXBwbGV0JyxcbiAgICBBUkVBOiAnYXJlYScsXG4gICAgQVJUSUNMRTogJ2FydGljbGUnLFxuICAgIEFTSURFOiAnYXNpZGUnLFxuXG4gICAgQjogJ2InLFxuICAgIEJBU0U6ICdiYXNlJyxcbiAgICBCQVNFRk9OVDogJ2Jhc2Vmb250JyxcbiAgICBCR1NPVU5EOiAnYmdzb3VuZCcsXG4gICAgQklHOiAnYmlnJyxcbiAgICBCTE9DS1FVT1RFOiAnYmxvY2txdW90ZScsXG4gICAgQk9EWTogJ2JvZHknLFxuICAgIEJSOiAnYnInLFxuICAgIEJVVFRPTjogJ2J1dHRvbicsXG5cbiAgICBDQVBUSU9OOiAnY2FwdGlvbicsXG4gICAgQ0VOVEVSOiAnY2VudGVyJyxcbiAgICBDT0RFOiAnY29kZScsXG4gICAgQ09MOiAnY29sJyxcbiAgICBDT0xHUk9VUDogJ2NvbGdyb3VwJyxcblxuICAgIEREOiAnZGQnLFxuICAgIERFU0M6ICdkZXNjJyxcbiAgICBERVRBSUxTOiAnZGV0YWlscycsXG4gICAgRElBTE9HOiAnZGlhbG9nJyxcbiAgICBESVI6ICdkaXInLFxuICAgIERJVjogJ2RpdicsXG4gICAgREw6ICdkbCcsXG4gICAgRFQ6ICdkdCcsXG5cbiAgICBFTTogJ2VtJyxcbiAgICBFTUJFRDogJ2VtYmVkJyxcblxuICAgIEZJRUxEU0VUOiAnZmllbGRzZXQnLFxuICAgIEZJR0NBUFRJT046ICdmaWdjYXB0aW9uJyxcbiAgICBGSUdVUkU6ICdmaWd1cmUnLFxuICAgIEZPTlQ6ICdmb250JyxcbiAgICBGT09URVI6ICdmb290ZXInLFxuICAgIEZPUkVJR05fT0JKRUNUOiAnZm9yZWlnbk9iamVjdCcsXG4gICAgRk9STTogJ2Zvcm0nLFxuICAgIEZSQU1FOiAnZnJhbWUnLFxuICAgIEZSQU1FU0VUOiAnZnJhbWVzZXQnLFxuXG4gICAgSDE6ICdoMScsXG4gICAgSDI6ICdoMicsXG4gICAgSDM6ICdoMycsXG4gICAgSDQ6ICdoNCcsXG4gICAgSDU6ICdoNScsXG4gICAgSDY6ICdoNicsXG4gICAgSEVBRDogJ2hlYWQnLFxuICAgIEhFQURFUjogJ2hlYWRlcicsXG4gICAgSEdST1VQOiAnaGdyb3VwJyxcbiAgICBIUjogJ2hyJyxcbiAgICBIVE1MOiAnaHRtbCcsXG5cbiAgICBJOiAnaScsXG4gICAgSU1HOiAnaW1nJyxcbiAgICBJTUFHRTogJ2ltYWdlJyxcbiAgICBJTlBVVDogJ2lucHV0JyxcbiAgICBJRlJBTUU6ICdpZnJhbWUnLFxuXG4gICAgS0VZR0VOOiAna2V5Z2VuJyxcblxuICAgIExBQkVMOiAnbGFiZWwnLFxuICAgIExJOiAnbGknLFxuICAgIExJTks6ICdsaW5rJyxcbiAgICBMSVNUSU5HOiAnbGlzdGluZycsXG5cbiAgICBNQUlOOiAnbWFpbicsXG4gICAgTUFMSUdOTUFSSzogJ21hbGlnbm1hcmsnLFxuICAgIE1BUlFVRUU6ICdtYXJxdWVlJyxcbiAgICBNQVRIOiAnbWF0aCcsXG4gICAgTUVOVTogJ21lbnUnLFxuICAgIE1FVEE6ICdtZXRhJyxcbiAgICBNR0xZUEg6ICdtZ2x5cGgnLFxuICAgIE1JOiAnbWknLFxuICAgIE1POiAnbW8nLFxuICAgIE1OOiAnbW4nLFxuICAgIE1TOiAnbXMnLFxuICAgIE1URVhUOiAnbXRleHQnLFxuXG4gICAgTkFWOiAnbmF2JyxcbiAgICBOT0JSOiAnbm9icicsXG4gICAgTk9GUkFNRVM6ICdub2ZyYW1lcycsXG4gICAgTk9FTUJFRDogJ25vZW1iZWQnLFxuICAgIE5PU0NSSVBUOiAnbm9zY3JpcHQnLFxuXG4gICAgT0JKRUNUOiAnb2JqZWN0JyxcbiAgICBPTDogJ29sJyxcbiAgICBPUFRHUk9VUDogJ29wdGdyb3VwJyxcbiAgICBPUFRJT046ICdvcHRpb24nLFxuXG4gICAgUDogJ3AnLFxuICAgIFBBUkFNOiAncGFyYW0nLFxuICAgIFBMQUlOVEVYVDogJ3BsYWludGV4dCcsXG4gICAgUFJFOiAncHJlJyxcblxuICAgIFJCOiAncmInLFxuICAgIFJQOiAncnAnLFxuICAgIFJUOiAncnQnLFxuICAgIFJUQzogJ3J0YycsXG4gICAgUlVCWTogJ3J1YnknLFxuXG4gICAgUzogJ3MnLFxuICAgIFNDUklQVDogJ3NjcmlwdCcsXG4gICAgU0VDVElPTjogJ3NlY3Rpb24nLFxuICAgIFNFTEVDVDogJ3NlbGVjdCcsXG4gICAgU09VUkNFOiAnc291cmNlJyxcbiAgICBTTUFMTDogJ3NtYWxsJyxcbiAgICBTUEFOOiAnc3BhbicsXG4gICAgU1RSSUtFOiAnc3RyaWtlJyxcbiAgICBTVFJPTkc6ICdzdHJvbmcnLFxuICAgIFNUWUxFOiAnc3R5bGUnLFxuICAgIFNVQjogJ3N1YicsXG4gICAgU1VNTUFSWTogJ3N1bW1hcnknLFxuICAgIFNVUDogJ3N1cCcsXG5cbiAgICBUQUJMRTogJ3RhYmxlJyxcbiAgICBUQk9EWTogJ3Rib2R5JyxcbiAgICBURU1QTEFURTogJ3RlbXBsYXRlJyxcbiAgICBURVhUQVJFQTogJ3RleHRhcmVhJyxcbiAgICBURk9PVDogJ3Rmb290JyxcbiAgICBURDogJ3RkJyxcbiAgICBUSDogJ3RoJyxcbiAgICBUSEVBRDogJ3RoZWFkJyxcbiAgICBUSVRMRTogJ3RpdGxlJyxcbiAgICBUUjogJ3RyJyxcbiAgICBUUkFDSzogJ3RyYWNrJyxcbiAgICBUVDogJ3R0JyxcblxuICAgIFU6ICd1JyxcbiAgICBVTDogJ3VsJyxcblxuICAgIFNWRzogJ3N2ZycsXG5cbiAgICBWQVI6ICd2YXInLFxuXG4gICAgV0JSOiAnd2JyJyxcblxuICAgIFhNUDogJ3htcCdcbn0pO1xuXG5leHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSB7XG4gICAgW05TLkhUTUxdOiB7XG4gICAgICAgIFskLkFERFJFU1NdOiB0cnVlLFxuICAgICAgICBbJC5BUFBMRVRdOiB0cnVlLFxuICAgICAgICBbJC5BUkVBXTogdHJ1ZSxcbiAgICAgICAgWyQuQVJUSUNMRV06IHRydWUsXG4gICAgICAgIFskLkFTSURFXTogdHJ1ZSxcbiAgICAgICAgWyQuQkFTRV06IHRydWUsXG4gICAgICAgIFskLkJBU0VGT05UXTogdHJ1ZSxcbiAgICAgICAgWyQuQkdTT1VORF06IHRydWUsXG4gICAgICAgIFskLkJMT0NLUVVPVEVdOiB0cnVlLFxuICAgICAgICBbJC5CT0RZXTogdHJ1ZSxcbiAgICAgICAgWyQuQlJdOiB0cnVlLFxuICAgICAgICBbJC5CVVRUT05dOiB0cnVlLFxuICAgICAgICBbJC5DQVBUSU9OXTogdHJ1ZSxcbiAgICAgICAgWyQuQ0VOVEVSXTogdHJ1ZSxcbiAgICAgICAgWyQuQ09MXTogdHJ1ZSxcbiAgICAgICAgWyQuQ09MR1JPVVBdOiB0cnVlLFxuICAgICAgICBbJC5ERF06IHRydWUsXG4gICAgICAgIFskLkRFVEFJTFNdOiB0cnVlLFxuICAgICAgICBbJC5ESVJdOiB0cnVlLFxuICAgICAgICBbJC5ESVZdOiB0cnVlLFxuICAgICAgICBbJC5ETF06IHRydWUsXG4gICAgICAgIFskLkRUXTogdHJ1ZSxcbiAgICAgICAgWyQuRU1CRURdOiB0cnVlLFxuICAgICAgICBbJC5GSUVMRFNFVF06IHRydWUsXG4gICAgICAgIFskLkZJR0NBUFRJT05dOiB0cnVlLFxuICAgICAgICBbJC5GSUdVUkVdOiB0cnVlLFxuICAgICAgICBbJC5GT09URVJdOiB0cnVlLFxuICAgICAgICBbJC5GT1JNXTogdHJ1ZSxcbiAgICAgICAgWyQuRlJBTUVdOiB0cnVlLFxuICAgICAgICBbJC5GUkFNRVNFVF06IHRydWUsXG4gICAgICAgIFskLkgxXTogdHJ1ZSxcbiAgICAgICAgWyQuSDJdOiB0cnVlLFxuICAgICAgICBbJC5IM106IHRydWUsXG4gICAgICAgIFskLkg0XTogdHJ1ZSxcbiAgICAgICAgWyQuSDVdOiB0cnVlLFxuICAgICAgICBbJC5INl06IHRydWUsXG4gICAgICAgIFskLkhFQURdOiB0cnVlLFxuICAgICAgICBbJC5IRUFERVJdOiB0cnVlLFxuICAgICAgICBbJC5IR1JPVVBdOiB0cnVlLFxuICAgICAgICBbJC5IUl06IHRydWUsXG4gICAgICAgIFskLkhUTUxdOiB0cnVlLFxuICAgICAgICBbJC5JRlJBTUVdOiB0cnVlLFxuICAgICAgICBbJC5JTUddOiB0cnVlLFxuICAgICAgICBbJC5JTlBVVF06IHRydWUsXG4gICAgICAgIFskLkxJXTogdHJ1ZSxcbiAgICAgICAgWyQuTElOS106IHRydWUsXG4gICAgICAgIFskLkxJU1RJTkddOiB0cnVlLFxuICAgICAgICBbJC5NQUlOXTogdHJ1ZSxcbiAgICAgICAgWyQuTUFSUVVFRV06IHRydWUsXG4gICAgICAgIFskLk1FTlVdOiB0cnVlLFxuICAgICAgICBbJC5NRVRBXTogdHJ1ZSxcbiAgICAgICAgWyQuTkFWXTogdHJ1ZSxcbiAgICAgICAgWyQuTk9FTUJFRF06IHRydWUsXG4gICAgICAgIFskLk5PRlJBTUVTXTogdHJ1ZSxcbiAgICAgICAgWyQuTk9TQ1JJUFRdOiB0cnVlLFxuICAgICAgICBbJC5PQkpFQ1RdOiB0cnVlLFxuICAgICAgICBbJC5PTF06IHRydWUsXG4gICAgICAgIFskLlBdOiB0cnVlLFxuICAgICAgICBbJC5QQVJBTV06IHRydWUsXG4gICAgICAgIFskLlBMQUlOVEVYVF06IHRydWUsXG4gICAgICAgIFskLlBSRV06IHRydWUsXG4gICAgICAgIFskLlNDUklQVF06IHRydWUsXG4gICAgICAgIFskLlNFQ1RJT05dOiB0cnVlLFxuICAgICAgICBbJC5TRUxFQ1RdOiB0cnVlLFxuICAgICAgICBbJC5TT1VSQ0VdOiB0cnVlLFxuICAgICAgICBbJC5TVFlMRV06IHRydWUsXG4gICAgICAgIFskLlNVTU1BUlldOiB0cnVlLFxuICAgICAgICBbJC5UQUJMRV06IHRydWUsXG4gICAgICAgIFskLlRCT0RZXTogdHJ1ZSxcbiAgICAgICAgWyQuVERdOiB0cnVlLFxuICAgICAgICBbJC5URU1QTEFURV06IHRydWUsXG4gICAgICAgIFskLlRFWFRBUkVBXTogdHJ1ZSxcbiAgICAgICAgWyQuVEZPT1RdOiB0cnVlLFxuICAgICAgICBbJC5USF06IHRydWUsXG4gICAgICAgIFskLlRIRUFEXTogdHJ1ZSxcbiAgICAgICAgWyQuVElUTEVdOiB0cnVlLFxuICAgICAgICBbJC5UUl06IHRydWUsXG4gICAgICAgIFskLlRSQUNLXTogdHJ1ZSxcbiAgICAgICAgWyQuVUxdOiB0cnVlLFxuICAgICAgICBbJC5XQlJdOiB0cnVlLFxuICAgICAgICBbJC5YTVBdOiB0cnVlXG4gICAgfSxcbiAgICBbTlMuTUFUSE1MXToge1xuICAgICAgICBbJC5NSV06IHRydWUsXG4gICAgICAgIFskLk1PXTogdHJ1ZSxcbiAgICAgICAgWyQuTU5dOiB0cnVlLFxuICAgICAgICBbJC5NU106IHRydWUsXG4gICAgICAgIFskLk1URVhUXTogdHJ1ZSxcbiAgICAgICAgWyQuQU5OT1RBVElPTl9YTUxdOiB0cnVlXG4gICAgfSxcbiAgICBbTlMuU1ZHXToge1xuICAgICAgICBbJC5USVRMRV06IHRydWUsXG4gICAgICAgIFskLkZPUkVJR05fT0JKRUNUXTogdHJ1ZSxcbiAgICAgICAgWyQuREVTQ106IHRydWVcbiAgICB9XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xuXG4vL0FsaWFzZXNcbmNvbnN0ICQgPSBIVE1MLlRBR19OQU1FUztcbmNvbnN0IE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG4vL0VsZW1lbnQgdXRpbHNcblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0bikge1xuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5QO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5SQiB8fCB0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVCB8fCB0biA9PT0gJC5ERCB8fCB0biA9PT0gJC5EVCB8fCB0biA9PT0gJC5MSTtcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuUlRDO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWRUaG9yb3VnaGx5KHRuKSB7XG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5SQiB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLlJQIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuUlQgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5ERCB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLkRUIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuTEkgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5URCB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLlRIIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuVFJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJUQztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQ7XG5cbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVElPTjtcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuQ0FQVElPTjtcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuT1BUR1JPVVAgfHwgdG4gPT09ICQuQ09MR1JPVVA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykge1xuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkRFU0MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5IVE1MO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5NVEVYVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuTUFUSE1MO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5USVRMRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkFQUExFVCB8fCB0biA9PT0gJC5PQkpFQ1QpICYmIG5zID09PSBOUy5IVE1MO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5NQVJRVUVFKSAmJiBucyA9PT0gTlMuSFRNTDtcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUw7XG5cbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5GT1JFSUdOX09CSkVDVCAmJiBucyA9PT0gTlMuU1ZHO1xuXG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuQU5OT1RBVElPTl9YTUwgJiYgbnMgPT09IE5TLk1BVEhNTDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vU3RhY2sgb2Ygb3BlbiBlbGVtZW50c1xuY2xhc3MgT3BlbkVsZW1lbnRTdGFjayB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIHRyZWVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy50bXBsQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XG4gICAgfVxuXG4gICAgLy9JbmRleCBvZiBlbGVtZW50XG4gICAgX2luZGV4T2YoZWxlbWVudCkge1xuICAgICAgICBsZXQgaWR4ID0gLTE7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc1tpXSA9PT0gZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlkeCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkeDtcbiAgICB9XG5cbiAgICAvL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcbiAgICBfaXNJblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGFnTmFtZSA9PT0gJC5URU1QTEFURSAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpID09PSBOUy5IVE1MO1xuICAgIH1cblxuICAgIF91cGRhdGVDdXJyZW50RWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IHRoaXMuY3VycmVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5jdXJyZW50KTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IHRoaXMuX2lzSW5UZW1wbGF0ZSgpID8gdGhpcy50cmVlQWRhcHRlci5nZXRUZW1wbGF0ZUNvbnRlbnQodGhpcy5jdXJyZW50KSA6IG51bGw7XG4gICAgfVxuXG4gICAgLy9NdXRhdGlvbnNcbiAgICBwdXNoKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5pdGVtc1srK3RoaXMuc3RhY2tUb3BdID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5faXNJblRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudG1wbENvdW50Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3AoKSB7XG4gICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcblxuICAgICAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRtcGxDb3VudC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICByZXBsYWNlKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZihvbGRFbGVtZW50KTtcblxuICAgICAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xuXG4gICAgICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VFbGVtZW50LCBuZXdFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbklkeCA9IHRoaXMuX2luZGV4T2YocmVmZXJlbmNlRWxlbWVudCkgKyAxO1xuXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3RWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGluc2VydGlvbklkeCA9PT0gKyt0aGlzLnN0YWNrVG9wKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9wVW50aWxUYWdOYW1lUG9wcGVkKHRhZ05hbWUpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLmN1cnJlbnRUYWdOYW1lO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUgJiYgbnMgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvcFVudGlsRWxlbWVudFBvcHBlZChlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnN0YWNrVG9wID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuY3VycmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5IMSB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLkgyIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuSDMgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5INCB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLkg1IHx8XG4gICAgICAgICAgICAgICAgKHRuID09PSAkLkg2ICYmIG5zID09PSBOUy5IVE1MKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3BVbnRpbFRhYmxlQ2VsbFBvcHBlZCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLmN1cnJlbnRUYWdOYW1lO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgKHRuID09PSAkLlRIICYmIG5zID09PSBOUy5IVE1MKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9wQWxsVXBUb0h0bWxFbGVtZW50KCkge1xuICAgICAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgcm9vdCA8aHRtbD4gZWxlbWVudCBpcyBhbHdheXMgZmlyc3QgaW4gdGhlIG9wZW4gZWxlbWVudCBzdGFjaywgc29cbiAgICAgICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cbiAgICAgICAgdGhpcy5zdGFja1RvcCA9IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKSB7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRBQkxFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5IVE1MKSB8fFxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSAhPT0gTlMuSFRNTFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKSB7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URk9PVCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEhFQUQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5IVE1MKSB8fFxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSAhPT0gTlMuSFRNTFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpIHtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVFIgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHx8XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpICE9PSBOUy5IVE1MXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZShlbGVtZW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vU2VhcmNoXG4gICAgdHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKSB7XG4gICAgICAgIC8vUHJvcGVybHkgbmVzdGVkIDxib2R5PiBlbGVtZW50IChzaG91bGQgYmUgc2Vjb25kIGVsZW1lbnQgaW4gc3RhY2spLlxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5pdGVtc1sxXTtcblxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnRhaW5zKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcbiAgICB9XG5cbiAgICBnZXRDb21tb25BbmNlc3RvcihlbGVtZW50KSB7XG4gICAgICAgIGxldCBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcblxuICAgICAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcbiAgICB9XG5cbiAgICBpc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcbiAgICB9XG5cbiAgICAvL0VsZW1lbnQgaW4gc2NvcGVcbiAgICBoYXNJblNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XG5cbiAgICAgICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNTY29waW5nRWxlbWVudCh0biwgbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INikgJiZcbiAgICAgICAgICAgICAgICBucyA9PT0gTlMuSFRNTFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYXNJbkxpc3RJdGVtU2NvcGUodGFnTmFtZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcblxuICAgICAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lICYmIG5zID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaGFzSW5CdXR0b25TY29wZSh0YWdOYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUgJiYgbnMgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCh0biA9PT0gJC5CVVRUT04gJiYgbnMgPT09IE5TLkhUTUwpIHx8IGlzU2NvcGluZ0VsZW1lbnQodG4sIG5zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGhhc0luVGFibGVTY29wZSh0YWdOYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuXG4gICAgICAgICAgICBpZiAobnMgIT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5URU1QTEFURSB8fCB0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XG5cbiAgICAgICAgICAgIGlmIChucyAhPT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYXNJblNlbGVjdFNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XG5cbiAgICAgICAgICAgIGlmIChucyAhPT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRuICE9PSAkLk9QVElPTiAmJiB0biAhPT0gJC5PUFRHUk9VUCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vSW1wbGllZCBlbmQgdGFnc1xuICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKSB7XG4gICAgICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NUaG9yb3VnaGx5KCkge1xuICAgICAgICB3aGlsZSAoaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWRUaG9yb3VnaGx5KHRoaXMuY3VycmVudFRhZ05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oZXhjbHVzaW9uVGFnTmFtZSkge1xuICAgICAgICB3aGlsZSAoaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWQodGhpcy5jdXJyZW50VGFnTmFtZSkgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gZXhjbHVzaW9uVGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPcGVuRWxlbWVudFN0YWNrO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8vQ29uc3RcbmNvbnN0IE5PQUhfQVJLX0NBUEFDSVRZID0gMztcblxuLy9MaXN0IG9mIGZvcm1hdHRpbmcgZWxlbWVudHNcbmNsYXNzIEZvcm1hdHRpbmdFbGVtZW50TGlzdCB7XG4gICAgY29uc3RydWN0b3IodHJlZUFkYXB0ZXIpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyO1xuICAgICAgICB0aGlzLmJvb2ttYXJrID0gbnVsbDtcbiAgICB9XG5cbiAgICAvL05vYWggQXJrJ3MgY29uZGl0aW9uXG4gICAgLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xuICAgIC8vbGlnaHR3ZWlnaHQgaGV1cmlzdGljcyB3aXRob3V0IHRob3JvdWdoIGF0dHJpYnV0ZXMgY2hlY2suXG4gICAgX2dldE5vYWhBcmtDb25kaXRpb25DYW5kaWRhdGVzKG5ld0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+PSBOT0FIX0FSS19DQVBBQ0lUWSkge1xuICAgICAgICAgICAgY29uc3QgbmVBdHRyc0xlbmd0aCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbmVUYWdOYW1lID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbnRyeS5lbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc0NhbmRpZGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gbmVUYWdOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBuZU5hbWVzcGFjZVVSSSAmJlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50QXR0cnMubGVuZ3RoID09PSBuZUF0dHJzTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IGlkeDogaSwgYXR0cnM6IGVsZW1lbnRBdHRycyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSA/IFtdIDogY2FuZGlkYXRlcztcbiAgICB9XG5cbiAgICBfZW5zdXJlTm9haEFya0NvbmRpdGlvbihuZXdFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgbGV0IGNMZW5ndGggPSBjYW5kaWRhdGVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoY0xlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBuZUF0dHJzTGVuZ3RoID0gbmVBdHRycy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBuZUF0dHJzTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgLy9OT1RFOiBidWlsZCBhdHRycyBtYXAgZm9yIHRoZSBuZXcgZWxlbWVudCBzbyB3ZSBjYW4gcGVyZm9ybSBmYXN0IGxvb2t1cHNcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmVBdHRyc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVBdHRyID0gbmVBdHRyc1tpXTtcblxuICAgICAgICAgICAgICAgIG5lQXR0cnNNYXBbbmVBdHRyLm5hbWVdID0gbmVBdHRyLnZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY0xlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNBdHRyID0gY2FuZGlkYXRlc1tqXS5hdHRyc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmVBdHRyc01hcFtjQXR0ci5uYW1lXSAhPT0gY0F0dHIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuc3BsaWNlKGosIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY0xlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9OT1RFOiByZW1vdmUgYm90dG9tbW9zdCBjYW5kaWRhdGVzIHVudGlsIE5vYWgncyBBcmsgY29uZGl0aW9uIHdpbGwgbm90IGJlIG1ldFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNMZW5ndGggLSAxOyBpID49IE5PQUhfQVJLX0NBUEFDSVRZIC0gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShjYW5kaWRhdGVzW2ldLmlkeCwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vTXV0YXRpb25zXG4gICAgaW5zZXJ0TWFya2VyKCkge1xuICAgICAgICB0aGlzLmVudHJpZXMucHVzaCh7IHR5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgfSk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuXG4gICAgcHVzaEVsZW1lbnQoZWxlbWVudCwgdG9rZW4pIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlTm9haEFya0NvbmRpdGlvbihlbGVtZW50KTtcblxuICAgICAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICB0b2tlbjogdG9rZW5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG5cbiAgICBpbnNlcnRFbGVtZW50QWZ0ZXJCb29rbWFyayhlbGVtZW50LCB0b2tlbikge1xuICAgICAgICBsZXQgYm9va21hcmtJZHggPSB0aGlzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgZm9yICg7IGJvb2ttYXJrSWR4ID49IDA7IGJvb2ttYXJrSWR4LS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVudHJpZXNbYm9va21hcmtJZHhdID09PSB0aGlzLmJvb2ttYXJrKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGJvb2ttYXJrSWR4ICsgMSwgMCwge1xuICAgICAgICAgICAgdHlwZTogRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlksXG4gICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgdG9rZW46IHRva2VuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuXG4gICAgcmVtb3ZlRW50cnkoZW50cnkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVudHJpZXNbaV0gPT09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJUb0xhc3RNYXJrZXIoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMucG9wKCk7XG5cbiAgICAgICAgICAgIHRoaXMubGVuZ3RoLS07XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL1NlYXJjaFxuICAgIGdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0YWdOYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcblxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbnRyeS5lbGVtZW50KSA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldEVsZW1lbnRFbnRyeShlbGVtZW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcblxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZICYmIGVudHJ5LmVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbi8vRW50cnkgdHlwZXNcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgPSAnTUFSS0VSX0VOVFJZJztcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZID0gJ0VMRU1FTlRfRU5UUlknO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1hdHRpbmdFbGVtZW50TGlzdDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBNaXhpbiB7XG4gICAgY29uc3RydWN0b3IoaG9zdCkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbE1ldGhvZHMgPSB7fTtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGRlbk1ldGhvZHMgPSB0aGlzLl9nZXRPdmVycmlkZGVuTWV0aG9kcyh0aGlzLCBvcmlnaW5hbE1ldGhvZHMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG92ZXJyaWRkZW5NZXRob2RzKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZGVuTWV0aG9kc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2RzW2tleV0gPSBob3N0W2tleV07XG4gICAgICAgICAgICAgICAgaG9zdFtrZXldID0gb3ZlcnJpZGRlbk1ldGhvZHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRPdmVycmlkZGVuTWV0aG9kcygpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG59XG5cbk1peGluLmluc3RhbGwgPSBmdW5jdGlvbihob3N0LCBDdG9yLCBvcHRzKSB7XG4gICAgaWYgKCFob3N0Ll9fbWl4aW5zKSB7XG4gICAgICAgIGhvc3QuX19taXhpbnMgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhvc3QuX19taXhpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGhvc3QuX19taXhpbnNbaV0uY29uc3RydWN0b3IgPT09IEN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBob3N0Ll9fbWl4aW5zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWl4aW4gPSBuZXcgQ3Rvcihob3N0LCBvcHRzKTtcblxuICAgIGhvc3QuX19taXhpbnMucHVzaChtaXhpbik7XG5cbiAgICByZXR1cm4gbWl4aW47XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1peGluO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IE1peGluID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvbWl4aW4nKTtcblxuY2xhc3MgUG9zaXRpb25UcmFja2luZ1ByZXByb2Nlc3Nvck1peGluIGV4dGVuZHMgTWl4aW4ge1xuICAgIGNvbnN0cnVjdG9yKHByZXByb2Nlc3Nvcikge1xuICAgICAgICBzdXBlcihwcmVwcm9jZXNzb3IpO1xuXG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yID0gcHJlcHJvY2Vzc29yO1xuICAgICAgICB0aGlzLmlzRW9sID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGluZVN0YXJ0UG9zID0gMDtcbiAgICAgICAgdGhpcy5kcm9wcGVkQnVmZmVyU2l6ZSA9IDA7XG5cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICB0aGlzLmNvbCA9IDA7XG4gICAgICAgIHRoaXMubGluZSA9IDE7XG4gICAgfVxuXG4gICAgX2dldE92ZXJyaWRkZW5NZXRob2RzKG14biwgb3JpZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWR2YW5jZSgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBvcyArIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgY2ggPSB0aGlzLmh0bWxbcG9zXTtcblxuICAgICAgICAgICAgICAgIC8vTk9URTogTEYgc2hvdWxkIGJlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgbGluZVxuICAgICAgICAgICAgICAgIGlmIChteG4uaXNFb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgbXhuLmlzRW9sID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIG14bi5saW5lKys7XG4gICAgICAgICAgICAgICAgICAgIG14bi5saW5lU3RhcnRQb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXFxuJyB8fCAoY2ggPT09ICdcXHInICYmIHRoaXMuaHRtbFtwb3MgKyAxXSAhPT0gJ1xcbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIG14bi5pc0VvbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbXhuLmNvbCA9IHBvcyAtIG14bi5saW5lU3RhcnRQb3MgKyAxO1xuICAgICAgICAgICAgICAgIG14bi5vZmZzZXQgPSBteG4uZHJvcHBlZEJ1ZmZlclNpemUgKyBwb3M7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5hZHZhbmNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZXRyZWF0KCkge1xuICAgICAgICAgICAgICAgIG9yaWcucmV0cmVhdC5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgbXhuLmlzRW9sID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbXhuLmNvbCA9IHRoaXMucG9zIC0gbXhuLmxpbmVTdGFydFBvcyArIDE7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkcm9wUGFyc2VkQ2h1bmsoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlBvcyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICAgICAgb3JpZy5kcm9wUGFyc2VkQ2h1bmsuY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZHVjdGlvbiA9IHByZXZQb3MgLSB0aGlzLnBvcztcblxuICAgICAgICAgICAgICAgIG14bi5saW5lU3RhcnRQb3MgLT0gcmVkdWN0aW9uO1xuICAgICAgICAgICAgICAgIG14bi5kcm9wcGVkQnVmZmVyU2l6ZSArPSByZWR1Y3Rpb247XG4gICAgICAgICAgICAgICAgbXhuLm9mZnNldCA9IG14bi5kcm9wcGVkQnVmZmVyU2l6ZSArIHRoaXMucG9zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb3NpdGlvblRyYWNraW5nUHJlcHJvY2Vzc29yTWl4aW47XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgTWl4aW4gPSByZXF1aXJlKCcuLi8uLi91dGlscy9taXhpbicpO1xuY29uc3QgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vLi4vdG9rZW5pemVyJyk7XG5jb25zdCBQb3NpdGlvblRyYWNraW5nUHJlcHJvY2Vzc29yTWl4aW4gPSByZXF1aXJlKCcuLi9wb3NpdGlvbi10cmFja2luZy9wcmVwcm9jZXNzb3ItbWl4aW4nKTtcblxuY2xhc3MgTG9jYXRpb25JbmZvVG9rZW5pemVyTWl4aW4gZXh0ZW5kcyBNaXhpbiB7XG4gICAgY29uc3RydWN0b3IodG9rZW5pemVyKSB7XG4gICAgICAgIHN1cGVyKHRva2VuaXplcik7XG5cbiAgICAgICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7XG4gICAgICAgIHRoaXMucG9zVHJhY2tlciA9IE1peGluLmluc3RhbGwodG9rZW5pemVyLnByZXByb2Nlc3NvciwgUG9zaXRpb25UcmFja2luZ1ByZXByb2Nlc3Nvck1peGluKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ckxvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdExvYyA9IG51bGw7XG4gICAgfVxuXG4gICAgX2dldEN1cnJlbnRMb2NhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0TGluZTogdGhpcy5wb3NUcmFja2VyLmxpbmUsXG4gICAgICAgICAgICBzdGFydENvbDogdGhpcy5wb3NUcmFja2VyLmNvbCxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiB0aGlzLnBvc1RyYWNrZXIub2Zmc2V0LFxuICAgICAgICAgICAgZW5kTGluZTogLTEsXG4gICAgICAgICAgICBlbmRDb2w6IC0xLFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiAtMVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9hdHRhY2hDdXJyZW50QXR0ckxvY2F0aW9uSW5mbygpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ckxvY2F0aW9uLmVuZExpbmUgPSB0aGlzLnBvc1RyYWNrZXIubGluZTtcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ckxvY2F0aW9uLmVuZENvbCA9IHRoaXMucG9zVHJhY2tlci5jb2w7XG4gICAgICAgIHRoaXMuY3VycmVudEF0dHJMb2NhdGlvbi5lbmRPZmZzZXQgPSB0aGlzLnBvc1RyYWNrZXIub2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUb2tlbiA9IHRoaXMudG9rZW5pemVyLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgY29uc3QgY3VycmVudEF0dHIgPSB0aGlzLnRva2VuaXplci5jdXJyZW50QXR0cjtcblxuICAgICAgICBpZiAoIWN1cnJlbnRUb2tlbi5sb2NhdGlvbi5hdHRycykge1xuICAgICAgICAgICAgY3VycmVudFRva2VuLmxvY2F0aW9uLmF0dHJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUb2tlbi5sb2NhdGlvbi5hdHRyc1tjdXJyZW50QXR0ci5uYW1lXSA9IHRoaXMuY3VycmVudEF0dHJMb2NhdGlvbjtcbiAgICB9XG5cbiAgICBfZ2V0T3ZlcnJpZGRlbk1ldGhvZHMobXhuLCBvcmlnKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgICAgICAgICBfY3JlYXRlU3RhcnRUYWdUb2tlbigpIHtcbiAgICAgICAgICAgICAgICBvcmlnLl9jcmVhdGVTdGFydFRhZ1Rva2VuLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24gPSBteG4uY3RMb2M7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfY3JlYXRlRW5kVGFnVG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fY3JlYXRlRW5kVGFnVG9rZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbiA9IG14bi5jdExvYztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF9jcmVhdGVDb21tZW50VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fY3JlYXRlQ29tbWVudFRva2VuLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24gPSBteG4uY3RMb2M7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfY3JlYXRlRG9jdHlwZVRva2VuKGluaXRpYWxOYW1lKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fY3JlYXRlRG9jdHlwZVRva2VuLmNhbGwodGhpcywgaW5pdGlhbE5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmxvY2F0aW9uID0gbXhuLmN0TG9jO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX2NyZWF0ZUNoYXJhY3RlclRva2VuKHR5cGUsIGNoKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4uY2FsbCh0aGlzLCB0eXBlLCBjaCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24gPSBteG4uY3RMb2M7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfY3JlYXRlRU9GVG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fY3JlYXRlRU9GVG9rZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbiA9IG14bi5fZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfY3JlYXRlQXR0cihhdHRyTmFtZUZpcnN0Q2gpIHtcbiAgICAgICAgICAgICAgICBvcmlnLl9jcmVhdGVBdHRyLmNhbGwodGhpcywgYXR0ck5hbWVGaXJzdENoKTtcbiAgICAgICAgICAgICAgICBteG4uY3VycmVudEF0dHJMb2NhdGlvbiA9IG14bi5fZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfbGVhdmVBdHRyTmFtZSh0b1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fbGVhdmVBdHRyTmFtZS5jYWxsKHRoaXMsIHRvU3RhdGUpO1xuICAgICAgICAgICAgICAgIG14bi5fYXR0YWNoQ3VycmVudEF0dHJMb2NhdGlvbkluZm8oKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF9sZWF2ZUF0dHJWYWx1ZSh0b1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fbGVhdmVBdHRyVmFsdWUuY2FsbCh0aGlzLCB0b1N0YXRlKTtcbiAgICAgICAgICAgICAgICBteG4uX2F0dGFjaEN1cnJlbnRBdHRyTG9jYXRpb25JbmZvKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfZW1pdEN1cnJlbnRUb2tlbigpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdExvYyA9IHRoaXMuY3VycmVudFRva2VuLmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIHBlbmRpbmcgY2hhcmFjdGVyIHRva2VuIG1ha2UgaXQncyBlbmQgbG9jYXRpb24gZXF1YWwgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy9jdXJyZW50IHRva2VuJ3Mgc3RhcnQgbG9jYXRpb24uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZExpbmUgPSBjdExvYy5zdGFydExpbmU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZENvbCA9IGN0TG9jLnN0YXJ0Q29sO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmRPZmZzZXQgPSBjdExvYy5zdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVPRl9UT0tFTikge1xuICAgICAgICAgICAgICAgICAgICBjdExvYy5lbmRMaW5lID0gY3RMb2Muc3RhcnRMaW5lO1xuICAgICAgICAgICAgICAgICAgICBjdExvYy5lbmRDb2wgPSBjdExvYy5zdGFydENvbDtcbiAgICAgICAgICAgICAgICAgICAgY3RMb2MuZW5kT2Zmc2V0ID0gY3RMb2Muc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3RMb2MuZW5kTGluZSA9IG14bi5wb3NUcmFja2VyLmxpbmU7XG4gICAgICAgICAgICAgICAgICAgIGN0TG9jLmVuZENvbCA9IG14bi5wb3NUcmFja2VyLmNvbCArIDE7XG4gICAgICAgICAgICAgICAgICAgIGN0TG9jLmVuZE9mZnNldCA9IG14bi5wb3NUcmFja2VyLm9mZnNldCArIDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb3JpZy5fZW1pdEN1cnJlbnRUb2tlbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3RMb2MgPSB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiAmJiB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGl0J3MgbG9jYXRpb24gd2Fzbid0IHNldCBpbiB0aGUgX2VtaXRDdXJyZW50VG9rZW4oKSxcbiAgICAgICAgICAgICAgICAvL3RoZW4gc2V0IGl0J3MgbG9jYXRpb24gYXQgdGhlIGN1cnJlbnQgcHJlcHJvY2Vzc29yIHBvc2l0aW9uLlxuICAgICAgICAgICAgICAgIC8vV2UgZG9uJ3QgbmVlZCB0byBpbmNyZW1lbnQgcHJlcHJvY2Vzc29yIHBvc2l0aW9uLCBzaW5jZSBjaGFyYWN0ZXIgdG9rZW5cbiAgICAgICAgICAgICAgICAvL2VtaXNzaW9uIGlzIGFsd2F5cyBmb3JjZWQgYnkgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0b2tlbiBoZXJlLlxuICAgICAgICAgICAgICAgIC8vU28sIHdlIGFscmVhZHkgaGF2ZSBhZHZhbmNlZCBwb3NpdGlvbi5cbiAgICAgICAgICAgICAgICBpZiAoY3RMb2MgJiYgY3RMb2MuZW5kT2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjdExvYy5lbmRMaW5lID0gbXhuLnBvc1RyYWNrZXIubGluZTtcbiAgICAgICAgICAgICAgICAgICAgY3RMb2MuZW5kQ29sID0gbXhuLnBvc1RyYWNrZXIuY29sO1xuICAgICAgICAgICAgICAgICAgICBjdExvYy5lbmRPZmZzZXQgPSBteG4ucG9zVHJhY2tlci5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb3JpZy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vTk9URTogcGF0Y2ggaW5pdGlhbCBzdGF0ZXMgZm9yIGVhY2ggbW9kZSB0byBvYnRhaW4gdG9rZW4gc3RhcnQgcG9zaXRpb25cbiAgICAgICAgT2JqZWN0LmtleXMoVG9rZW5pemVyLk1PREUpLmZvckVhY2gobW9kZU5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBUb2tlbml6ZXIuTU9ERVttb2RlTmFtZV07XG5cbiAgICAgICAgICAgIG1ldGhvZHNbc3RhdGVdID0gZnVuY3Rpb24oY3ApIHtcbiAgICAgICAgICAgICAgICBteG4uY3RMb2MgPSBteG4uX2dldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgICAgIG9yaWdbc3RhdGVdLmNhbGwodGhpcywgY3ApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExvY2F0aW9uSW5mb1Rva2VuaXplck1peGluO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IE1peGluID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvbWl4aW4nKTtcblxuY2xhc3MgTG9jYXRpb25JbmZvT3BlbkVsZW1lbnRTdGFja01peGluIGV4dGVuZHMgTWl4aW4ge1xuICAgIGNvbnN0cnVjdG9yKHN0YWNrLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHN0YWNrKTtcblxuICAgICAgICB0aGlzLm9uSXRlbVBvcCA9IG9wdHMub25JdGVtUG9wO1xuICAgIH1cblxuICAgIF9nZXRPdmVycmlkZGVuTWV0aG9kcyhteG4sIG9yaWcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvcCgpIHtcbiAgICAgICAgICAgICAgICBteG4ub25JdGVtUG9wKHRoaXMuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgb3JpZy5wb3AuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBvcEFsbFVwVG9IdG1sRWxlbWVudCgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBteG4ub25JdGVtUG9wKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9yaWcucG9wQWxsVXBUb0h0bWxFbGVtZW50LmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZW1vdmUoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG14bi5vbkl0ZW1Qb3AodGhpcy5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICBvcmlnLnJlbW92ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMb2NhdGlvbkluZm9PcGVuRWxlbWVudFN0YWNrTWl4aW47XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgTWl4aW4gPSByZXF1aXJlKCcuLi8uLi91dGlscy9taXhpbicpO1xuY29uc3QgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vLi4vdG9rZW5pemVyJyk7XG5jb25zdCBMb2NhdGlvbkluZm9Ub2tlbml6ZXJNaXhpbiA9IHJlcXVpcmUoJy4vdG9rZW5pemVyLW1peGluJyk7XG5jb25zdCBMb2NhdGlvbkluZm9PcGVuRWxlbWVudFN0YWNrTWl4aW4gPSByZXF1aXJlKCcuL29wZW4tZWxlbWVudC1zdGFjay1taXhpbicpO1xuY29uc3QgSFRNTCA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xuY29uc3QgJCA9IEhUTUwuVEFHX05BTUVTO1xuXG5jbGFzcyBMb2NhdGlvbkluZm9QYXJzZXJNaXhpbiBleHRlbmRzIE1peGluIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJzZXIpIHtcbiAgICAgICAgc3VwZXIocGFyc2VyKTtcblxuICAgICAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlciA9IHRoaXMucGFyc2VyLnRyZWVBZGFwdGVyO1xuICAgICAgICB0aGlzLnBvc1RyYWNrZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RTdGFydFRhZ1Rva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG4gICAgfVxuXG4gICAgX3NldFN0YXJ0TG9jYXRpb24oZWxlbWVudCkge1xuICAgICAgICBsZXQgbG9jID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5sYXN0U3RhcnRUYWdUb2tlbikge1xuICAgICAgICAgICAgbG9jID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5sYXN0U3RhcnRUYWdUb2tlbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBsb2Muc3RhcnRUYWcgPSB0aGlzLmxhc3RTdGFydFRhZ1Rva2VuLmxvY2F0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGVsZW1lbnQsIGxvYyk7XG4gICAgfVxuXG4gICAgX3NldEVuZExvY2F0aW9uKGVsZW1lbnQsIGNsb3NpbmdUb2tlbikge1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGxvYykge1xuICAgICAgICAgICAgaWYgKGNsb3NpbmdUb2tlbi5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN0TG9jID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gTk9URTogRm9yIGNhc2VzIGxpa2UgPHA+IDxwPiA8L3A+IC0gRmlyc3QgJ3AnIGNsb3NlcyB3aXRob3V0IGEgY2xvc2luZ1xuICAgICAgICAgICAgICAgIC8vIHRhZyBhbmQgZm9yIGNhc2VzIGxpa2UgPHRkPiA8cD4gPC90ZD4gLSAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZy5cbiAgICAgICAgICAgICAgICBjb25zdCBpc0Nsb3NpbmdFbmRUYWcgPSBjbG9zaW5nVG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVORF9UQUdfVE9LRU4gJiYgdG4gPT09IGNsb3NpbmdUb2tlbi50YWdOYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xvc2luZ0VuZFRhZykge1xuICAgICAgICAgICAgICAgICAgICBsb2MuZW5kVGFnID0gT2JqZWN0LmFzc2lnbih7fSwgY3RMb2MpO1xuICAgICAgICAgICAgICAgICAgICBsb2MuZW5kTGluZSA9IGN0TG9jLmVuZExpbmU7XG4gICAgICAgICAgICAgICAgICAgIGxvYy5lbmRDb2wgPSBjdExvYy5lbmRDb2w7XG4gICAgICAgICAgICAgICAgICAgIGxvYy5lbmRPZmZzZXQgPSBjdExvYy5lbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jLmVuZExpbmUgPSBjdExvYy5zdGFydExpbmU7XG4gICAgICAgICAgICAgICAgICAgIGxvYy5lbmRDb2wgPSBjdExvYy5zdGFydENvbDtcbiAgICAgICAgICAgICAgICAgICAgbG9jLmVuZE9mZnNldCA9IGN0TG9jLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRPdmVycmlkZGVuTWV0aG9kcyhteG4sIG9yaWcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9ib290c3RyYXAoZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIG9yaWcuX2Jvb3RzdHJhcC5jYWxsKHRoaXMsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgbXhuLmxhc3RTdGFydFRhZ1Rva2VuID0gbnVsbDtcbiAgICAgICAgICAgICAgICBteG4ubGFzdEZvc3RlclBhcmVudGluZ0xvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBteG4uY3VycmVudFRva2VuID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuaXplck1peGluID0gTWl4aW4uaW5zdGFsbCh0aGlzLnRva2VuaXplciwgTG9jYXRpb25JbmZvVG9rZW5pemVyTWl4aW4pO1xuXG4gICAgICAgICAgICAgICAgbXhuLnBvc1RyYWNrZXIgPSB0b2tlbml6ZXJNaXhpbi5wb3NUcmFja2VyO1xuXG4gICAgICAgICAgICAgICAgTWl4aW4uaW5zdGFsbCh0aGlzLm9wZW5FbGVtZW50cywgTG9jYXRpb25JbmZvT3BlbkVsZW1lbnRTdGFja01peGluLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbVBvcDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXhuLl9zZXRFbmRMb2NhdGlvbihlbGVtZW50LCBteG4uY3VycmVudFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX3J1blBhcnNpbmdMb29wKHNjcmlwdEhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnLl9ydW5QYXJzaW5nTG9vcC5jYWxsKHRoaXMsIHNjcmlwdEhhbmRsZXIpO1xuXG4gICAgICAgICAgICAgICAgLy8gTk9URTogZ2VuZXJhdGUgbG9jYXRpb24gaW5mbyBmb3IgZWxlbWVudHNcbiAgICAgICAgICAgICAgICAvLyB0aGF0IHJlbWFpbnMgb24gb3BlbiBlbGVtZW50IHN0YWNrXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBteG4uX3NldEVuZExvY2F0aW9uKHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldLCBteG4uY3VycmVudFRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvL1Rva2VuIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIF9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSB7XG4gICAgICAgICAgICAgICAgbXhuLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgIG9yaWcuX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfcHJvY2Vzc1Rva2VuKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgbXhuLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgIG9yaWcuX3Byb2Nlc3NUb2tlbi5jYWxsKHRoaXMsIHRva2VuKTtcblxuICAgICAgICAgICAgICAgIC8vTk9URTogPGJvZHk+IGFuZCA8aHRtbD4gYXJlIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgICAgICAgICAgLy90aGVpciBlbmQgbG9jYXRpb24gZXhwbGljaXRseS5cbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlRXhwbGljaXRVcGRhdGUgPVxuICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MIHx8ICh0b2tlbi50YWdOYW1lID09PSAkLkJPRFkgJiYgdGhpcy5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZUV4cGxpY2l0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gdG9rZW4udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG14bi5fc2V0RW5kTG9jYXRpb24oZWxlbWVudCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9Eb2N0eXBlXG4gICAgICAgICAgICBfc2V0RG9jdW1lbnRUeXBlKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5fc2V0RG9jdW1lbnRUeXBlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRDaGlsZHJlbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLmRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbkxlbmd0aCA9IGRvY3VtZW50Q2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudENoaWxkcmVuW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzRG9jdW1lbnRUeXBlTm9kZShub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKG5vZGUsIHRva2VuLmxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9FbGVtZW50c1xuICAgICAgICAgICAgX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICAvL1NvIHdlIHdpbGwgdXNlIHRva2VuIGxvY2F0aW9uIHN0b3JlZCBpbiB0aGlzIG1ldGhvZHMgZm9yIHRoZSBlbGVtZW50LlxuICAgICAgICAgICAgICAgIG14bi5fc2V0U3RhcnRMb2NhdGlvbihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBteG4ubGFzdFN0YXJ0VGFnVG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIG9yaWcuX2F0dGFjaEVsZW1lbnRUb1RyZWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF9hcHBlbmRFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgICAgICBteG4ubGFzdFN0YXJ0VGFnVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBvcmlnLl9hcHBlbmRFbGVtZW50LmNhbGwodGhpcywgdG9rZW4sIG5hbWVzcGFjZVVSSSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfaW5zZXJ0RWxlbWVudCh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICAgICAgbXhuLmxhc3RTdGFydFRhZ1Rva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgb3JpZy5faW5zZXJ0RWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX2luc2VydFRlbXBsYXRlKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgbXhuLmxhc3RTdGFydFRhZ1Rva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgb3JpZy5faW5zZXJ0VGVtcGxhdGUuY2FsbCh0aGlzLCB0b2tlbik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRtcGxDb250ZW50LCBudWxsKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKSB7XG4gICAgICAgICAgICAgICAgb3JpZy5faW5zZXJ0RmFrZVJvb3RFbGVtZW50LmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIG51bGwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9Db21tZW50c1xuICAgICAgICAgICAgX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBvcmlnLl9hcHBlbmRDb21tZW50Tm9kZS5jYWxsKHRoaXMsIHRva2VuLCBwYXJlbnQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50Tm9kZSA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGNvbW1lbnROb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvL1RleHRcbiAgICAgICAgICAgIF9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKSB7XG4gICAgICAgICAgICAgICAgLy9OT1RFOiBzdG9yZSBsYXN0IGZvc3RlciBwYXJlbnRpbmcgbG9jYXRpb24sIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIGluc2VydGVkIHRleHRcbiAgICAgICAgICAgICAgICAvL2luIGNhc2Ugb2YgZm9zdGVyIHBhcmVudGluZ1xuICAgICAgICAgICAgICAgIG14bi5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBvcmlnLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24uY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBteG4ubGFzdEZvc3RlclBhcmVudGluZ0xvY2F0aW9uO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX2luc2VydENoYXJhY3RlcnModG9rZW4pIHtcbiAgICAgICAgICAgICAgICBvcmlnLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRm9zdGVyUGFyZW50ID0gdGhpcy5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9XG4gICAgICAgICAgICAgICAgICAgIChoYXNGb3N0ZXJQYXJlbnQgJiYgbXhuLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbi5wYXJlbnQpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlSWR4ID1cbiAgICAgICAgICAgICAgICAgICAgaGFzRm9zdGVyUGFyZW50ICYmIG14bi5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24uYmVmb3JlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzaWJsaW5ncy5pbmRleE9mKG14bi5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24uYmVmb3JlRWxlbWVudCkgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNpYmxpbmdzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHNpYmxpbmdzW3RleHROb2RlSWR4XTtcblxuICAgICAgICAgICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBsb2NhdGlvbiBhc3NpZ25lZCBieSBhbm90aGVyIHRva2VuLCB0aGVuIGp1c3QgdXBkYXRlIGVuZCBwb3NpdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IHRuTG9jID0gdGhpcy50cmVlQWRhcHRlci5nZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlKTtcblxuICAgICAgICAgICAgICAgIGlmICh0bkxvYykge1xuICAgICAgICAgICAgICAgICAgICB0bkxvYy5lbmRMaW5lID0gdG9rZW4ubG9jYXRpb24uZW5kTGluZTtcbiAgICAgICAgICAgICAgICAgICAgdG5Mb2MuZW5kQ29sID0gdG9rZW4ubG9jYXRpb24uZW5kQ29sO1xuICAgICAgICAgICAgICAgICAgICB0bkxvYy5lbmRPZmZzZXQgPSB0b2tlbi5sb2NhdGlvbi5lbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMb2NhdGlvbkluZm9QYXJzZXJNaXhpbjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBNaXhpbiA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL21peGluJyk7XG5cbmNsYXNzIEVycm9yUmVwb3J0aW5nTWl4aW5CYXNlIGV4dGVuZHMgTWl4aW4ge1xuICAgIGNvbnN0cnVjdG9yKGhvc3QsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIoaG9zdCk7XG5cbiAgICAgICAgdGhpcy5wb3NUcmFja2VyID0gbnVsbDtcbiAgICAgICAgdGhpcy5vblBhcnNlRXJyb3IgPSBvcHRzLm9uUGFyc2VFcnJvcjtcbiAgICB9XG5cbiAgICBfc2V0RXJyb3JMb2NhdGlvbihlcnIpIHtcbiAgICAgICAgZXJyLnN0YXJ0TGluZSA9IGVyci5lbmRMaW5lID0gdGhpcy5wb3NUcmFja2VyLmxpbmU7XG4gICAgICAgIGVyci5zdGFydENvbCA9IGVyci5lbmRDb2wgPSB0aGlzLnBvc1RyYWNrZXIuY29sO1xuICAgICAgICBlcnIuc3RhcnRPZmZzZXQgPSBlcnIuZW5kT2Zmc2V0ID0gdGhpcy5wb3NUcmFja2VyLm9mZnNldDtcbiAgICB9XG5cbiAgICBfcmVwb3J0RXJyb3IoY29kZSkge1xuICAgICAgICBjb25zdCBlcnIgPSB7XG4gICAgICAgICAgICBjb2RlOiBjb2RlLFxuICAgICAgICAgICAgc3RhcnRMaW5lOiAtMSxcbiAgICAgICAgICAgIHN0YXJ0Q29sOiAtMSxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiAtMSxcbiAgICAgICAgICAgIGVuZExpbmU6IC0xLFxuICAgICAgICAgICAgZW5kQ29sOiAtMSxcbiAgICAgICAgICAgIGVuZE9mZnNldDogLTFcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9zZXRFcnJvckxvY2F0aW9uKGVycik7XG4gICAgICAgIHRoaXMub25QYXJzZUVycm9yKGVycik7XG4gICAgfVxuXG4gICAgX2dldE92ZXJyaWRkZW5NZXRob2RzKG14bikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2Vycihjb2RlKSB7XG4gICAgICAgICAgICAgICAgbXhuLl9yZXBvcnRFcnJvcihjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXJyb3JSZXBvcnRpbmdNaXhpbkJhc2U7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRXJyb3JSZXBvcnRpbmdNaXhpbkJhc2UgPSByZXF1aXJlKCcuL21peGluLWJhc2UnKTtcbmNvbnN0IFBvc2l0aW9uVHJhY2tpbmdQcmVwcm9jZXNzb3JNaXhpbiA9IHJlcXVpcmUoJy4uL3Bvc2l0aW9uLXRyYWNraW5nL3ByZXByb2Nlc3Nvci1taXhpbicpO1xuY29uc3QgTWl4aW4gPSByZXF1aXJlKCcuLi8uLi91dGlscy9taXhpbicpO1xuXG5jbGFzcyBFcnJvclJlcG9ydGluZ1ByZXByb2Nlc3Nvck1peGluIGV4dGVuZHMgRXJyb3JSZXBvcnRpbmdNaXhpbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByZXByb2Nlc3Nvciwgb3B0cykge1xuICAgICAgICBzdXBlcihwcmVwcm9jZXNzb3IsIG9wdHMpO1xuXG4gICAgICAgIHRoaXMucG9zVHJhY2tlciA9IE1peGluLmluc3RhbGwocHJlcHJvY2Vzc29yLCBQb3NpdGlvblRyYWNraW5nUHJlcHJvY2Vzc29yTWl4aW4pO1xuICAgICAgICB0aGlzLmxhc3RFcnJPZmZzZXQgPSAtMTtcbiAgICB9XG5cbiAgICBfcmVwb3J0RXJyb3IoY29kZSkge1xuICAgICAgICAvL05PVEU6IGF2b2lkIHJlcG9ydGluZyBlcnJvciB0d2ljZSBvbiBhZHZhbmNlL3JldHJlYXRcbiAgICAgICAgaWYgKHRoaXMubGFzdEVyck9mZnNldCAhPT0gdGhpcy5wb3NUcmFja2VyLm9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyT2Zmc2V0ID0gdGhpcy5wb3NUcmFja2VyLm9mZnNldDtcbiAgICAgICAgICAgIHN1cGVyLl9yZXBvcnRFcnJvcihjb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFcnJvclJlcG9ydGluZ1ByZXByb2Nlc3Nvck1peGluO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEVycm9yUmVwb3J0aW5nTWl4aW5CYXNlID0gcmVxdWlyZSgnLi9taXhpbi1iYXNlJyk7XG5jb25zdCBFcnJvclJlcG9ydGluZ1ByZXByb2Nlc3Nvck1peGluID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3ItbWl4aW4nKTtcbmNvbnN0IE1peGluID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvbWl4aW4nKTtcblxuY2xhc3MgRXJyb3JSZXBvcnRpbmdUb2tlbml6ZXJNaXhpbiBleHRlbmRzIEVycm9yUmVwb3J0aW5nTWl4aW5CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbml6ZXIsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIodG9rZW5pemVyLCBvcHRzKTtcblxuICAgICAgICBjb25zdCBwcmVwcm9jZXNzb3JNaXhpbiA9IE1peGluLmluc3RhbGwodG9rZW5pemVyLnByZXByb2Nlc3NvciwgRXJyb3JSZXBvcnRpbmdQcmVwcm9jZXNzb3JNaXhpbiwgb3B0cyk7XG5cbiAgICAgICAgdGhpcy5wb3NUcmFja2VyID0gcHJlcHJvY2Vzc29yTWl4aW4ucG9zVHJhY2tlcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXJyb3JSZXBvcnRpbmdUb2tlbml6ZXJNaXhpbjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBFcnJvclJlcG9ydGluZ01peGluQmFzZSA9IHJlcXVpcmUoJy4vbWl4aW4tYmFzZScpO1xuY29uc3QgRXJyb3JSZXBvcnRpbmdUb2tlbml6ZXJNaXhpbiA9IHJlcXVpcmUoJy4vdG9rZW5pemVyLW1peGluJyk7XG5jb25zdCBMb2NhdGlvbkluZm9Ub2tlbml6ZXJNaXhpbiA9IHJlcXVpcmUoJy4uL2xvY2F0aW9uLWluZm8vdG9rZW5pemVyLW1peGluJyk7XG5jb25zdCBNaXhpbiA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL21peGluJyk7XG5cbmNsYXNzIEVycm9yUmVwb3J0aW5nUGFyc2VyTWl4aW4gZXh0ZW5kcyBFcnJvclJlcG9ydGluZ01peGluQmFzZSB7XG4gICAgY29uc3RydWN0b3IocGFyc2VyLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhcnNlciwgb3B0cyk7XG5cbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy5jdExvYyA9IG51bGw7XG4gICAgICAgIHRoaXMubG9jQmVmb3JlVG9rZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfc2V0RXJyb3JMb2NhdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuY3RMb2MpIHtcbiAgICAgICAgICAgIGVyci5zdGFydExpbmUgPSB0aGlzLmN0TG9jLnN0YXJ0TGluZTtcbiAgICAgICAgICAgIGVyci5zdGFydENvbCA9IHRoaXMuY3RMb2Muc3RhcnRDb2w7XG4gICAgICAgICAgICBlcnIuc3RhcnRPZmZzZXQgPSB0aGlzLmN0TG9jLnN0YXJ0T2Zmc2V0O1xuXG4gICAgICAgICAgICBlcnIuZW5kTGluZSA9IHRoaXMubG9jQmVmb3JlVG9rZW4gPyB0aGlzLmN0TG9jLnN0YXJ0TGluZSA6IHRoaXMuY3RMb2MuZW5kTGluZTtcbiAgICAgICAgICAgIGVyci5lbmRDb2wgPSB0aGlzLmxvY0JlZm9yZVRva2VuID8gdGhpcy5jdExvYy5zdGFydENvbCA6IHRoaXMuY3RMb2MuZW5kQ29sO1xuICAgICAgICAgICAgZXJyLmVuZE9mZnNldCA9IHRoaXMubG9jQmVmb3JlVG9rZW4gPyB0aGlzLmN0TG9jLnN0YXJ0T2Zmc2V0IDogdGhpcy5jdExvYy5lbmRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0T3ZlcnJpZGRlbk1ldGhvZHMobXhuLCBvcmlnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfYm9vdHN0cmFwKGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBvcmlnLl9ib290c3RyYXAuY2FsbCh0aGlzLCBkb2N1bWVudCwgZnJhZ21lbnRDb250ZXh0KTtcblxuICAgICAgICAgICAgICAgIE1peGluLmluc3RhbGwodGhpcy50b2tlbml6ZXIsIEVycm9yUmVwb3J0aW5nVG9rZW5pemVyTWl4aW4sIG14bi5vcHRzKTtcbiAgICAgICAgICAgICAgICBNaXhpbi5pbnN0YWxsKHRoaXMudG9rZW5pemVyLCBMb2NhdGlvbkluZm9Ub2tlbml6ZXJNaXhpbik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfcHJvY2Vzc0lucHV0VG9rZW4odG9rZW4pIHtcbiAgICAgICAgICAgICAgICBteG4uY3RMb2MgPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIG9yaWcuX3Byb2Nlc3NJbnB1dFRva2VuLmNhbGwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX2Vycihjb2RlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgbXhuLmxvY0JlZm9yZVRva2VuID0gb3B0aW9ucyAmJiBvcHRpb25zLmJlZm9yZVRva2VuO1xuICAgICAgICAgICAgICAgIG14bi5fcmVwb3J0RXJyb3IoY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVycm9yUmVwb3J0aW5nUGFyc2VyTWl4aW47XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBET0NVTUVOVF9NT0RFIH0gPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xuXG4vL05vZGUgY29uc3RydWN0aW9uXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQnLFxuICAgICAgICBtb2RlOiBET0NVTUVOVF9NT0RFLk5PX1FVSVJLUyxcbiAgICAgICAgY2hpbGROb2RlczogW11cbiAgICB9O1xufTtcblxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxuICAgIH07XG59O1xuXG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbih0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgICAgIGF0dHJzOiBhdHRycyxcbiAgICAgICAgbmFtZXNwYWNlVVJJOiBuYW1lc3BhY2VVUkksXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXG4gICAgfTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcbiAgICB9O1xufTtcblxuY29uc3QgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVOYW1lOiAnI3RleHQnLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcbiAgICB9O1xufTtcblxuLy9UcmVlIG11dGF0aW9uXG5jb25zdCBhcHBlbmRDaGlsZCA9IChleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgIHBhcmVudE5vZGUuY2hpbGROb2Rlcy5wdXNoKG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG59KTtcblxuY29uc3QgaW5zZXJ0QmVmb3JlID0gKGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG59KTtcblxuZXhwb3J0cy5zZXRUZW1wbGF0ZUNvbnRlbnQgPSBmdW5jdGlvbih0ZW1wbGF0ZUVsZW1lbnQsIGNvbnRlbnRFbGVtZW50KSB7XG4gICAgdGVtcGxhdGVFbGVtZW50LmNvbnRlbnQgPSBjb250ZW50RWxlbWVudDtcbn07XG5cbmV4cG9ydHMuZ2V0VGVtcGxhdGVDb250ZW50ID0gZnVuY3Rpb24odGVtcGxhdGVFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5jb250ZW50O1xufTtcblxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbihkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgbGV0IGRvY3R5cGVOb2RlID0gbnVsbDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGROb2Rlc1tpXS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKSB7XG4gICAgICAgICAgICBkb2N0eXBlTm9kZSA9IGRvY3VtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xuICAgICAgICBkb2N0eXBlTm9kZS5uYW1lID0gbmFtZTtcbiAgICAgICAgZG9jdHlwZU5vZGUucHVibGljSWQgPSBwdWJsaWNJZDtcbiAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCwge1xuICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnRUeXBlJyxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBwdWJsaWNJZDogcHVibGljSWQsXG4gICAgICAgICAgICBzeXN0ZW1JZDogc3lzdGVtSWRcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5zZXREb2N1bWVudE1vZGUgPSBmdW5jdGlvbihkb2N1bWVudCwgbW9kZSkge1xuICAgIGRvY3VtZW50Lm1vZGUgPSBtb2RlO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudE1vZGUgPSBmdW5jdGlvbihkb2N1bWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5tb2RlO1xufTtcblxuZXhwb3J0cy5kZXRhY2hOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcblxuICAgICAgICBub2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnRzLmluc2VydFRleHQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCB0ZXh0KSB7XG4gICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwcmV2Tm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xuICAgICAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcbn07XG5cbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIHRleHQsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xuXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLm5vZGVOYW1lID09PSAnI3RleHQnKSB7XG4gICAgICAgIHByZXZOb2RlLnZhbHVlICs9IHRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmFkb3B0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHJlY2lwaWVudCwgYXR0cnMpIHtcbiAgICBjb25zdCByZWNpcGllbnRBdHRyc01hcCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNpcGllbnQuYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVjaXBpZW50QXR0cnNNYXAucHVzaChyZWNpcGllbnQuYXR0cnNbaV0ubmFtZSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVjaXBpZW50QXR0cnNNYXAuaW5kZXhPZihhdHRyc1tqXS5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJlY2lwaWVudC5hdHRycy5wdXNoKGF0dHJzW2pdKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vVHJlZSB0cmF2ZXJzaW5nXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcbn07XG5cbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG59O1xuXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmF0dHJzO1xufTtcblxuLy9Ob2RlIGRhdGFcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lO1xufTtcblxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlVVJJO1xufTtcblxuZXhwb3J0cy5nZXRUZXh0Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbih0ZXh0Tm9kZSkge1xuICAgIHJldHVybiB0ZXh0Tm9kZS52YWx1ZTtcbn07XG5cbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24oY29tbWVudE5vZGUpIHtcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbihkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZS5uYW1lO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbihkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZS5wdWJsaWNJZDtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24oZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGUuc3lzdGVtSWQ7XG59O1xuXG4vL05vZGUgdHlwZXNcbmV4cG9ydHMuaXNUZXh0Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jztcbn07XG5cbmV4cG9ydHMuaXNDb21tZW50Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNjb21tZW50Jztcbn07XG5cbmV4cG9ydHMuaXNEb2N1bWVudFR5cGVOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2RvY3VtZW50VHlwZSc7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuICEhbm9kZS50YWdOYW1lO1xufTtcblxuLy8gU291cmNlIGNvZGUgbG9jYXRpb25cbmV4cG9ydHMuc2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIGxvY2F0aW9uKSB7XG4gICAgbm9kZS5zb3VyY2VDb2RlTG9jYXRpb24gPSBsb2NhdGlvbjtcbn07XG5cbmV4cG9ydHMuZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbiA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5zb3VyY2VDb2RlTG9jYXRpb247XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHJldHVybiBbZGVmYXVsdHMsIG9wdGlvbnNdLnJlZHVjZSgobWVyZ2VkLCBvcHRPYmopID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0T2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IG9wdE9ialtrZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IERPQ1VNRU5UX01PREUgfSA9IHJlcXVpcmUoJy4vaHRtbCcpO1xuXG4vL0NvbnN0XG5jb25zdCBWQUxJRF9ET0NUWVBFX05BTUUgPSAnaHRtbCc7XG5jb25zdCBWQUxJRF9TWVNURU1fSUQgPSAnYWJvdXQ6bGVnYWN5LWNvbXBhdCc7XG5jb25zdCBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCc7XG5cbmNvbnN0IFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAnKy8vc2lsbWFyaWwvL2R0ZCBodG1sIHBybyB2MHIxMSAxOTk3MDEwMS8vJyxcbiAgICAnLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vJyxcbiAgICAnLS8vYWR2YXNvZnQgbHRkLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAxLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMi8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAxLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4xZS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLjIgZmluYWwvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMuMi8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMy8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMi8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMy8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMi8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDMvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwvLycsXG4gICAgJy0vL21ldHJpdXMvL2R0ZCBtZXRyaXVzIHByZXNlbnRhdGlvbmFsLy8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbCBzdHJpY3QvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sLy8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgdGFibGVzLy8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbCBzdHJpY3QvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sLy8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgdGFibGVzLy8nLFxuICAgICctLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIGh0bWwvLycsXG4gICAgJy0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgc3RyaWN0IGh0bWwvLycsXG4gICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgMi4wLy9cIixcbiAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCBleHRlbmRlZCAxLjAvL1wiLFxuICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIHJlbGF4ZWQgMS4wLy9cIixcbiAgICAnLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvLycsXG4gICAgJy0vL3NvZnRxdWFkIHNvZnR3YXJlLy9kdGQgaG90bWV0YWwgcHJvIDYuMDo6MTk5OTA2MDE6OmV4dGVuc2lvbnMgdG8gaHRtbCA0LjAvLycsXG4gICAgJy0vL3NvZnRxdWFkLy9kdGQgaG90bWV0YWwgcHJvIDQuMDo6MTk5NzEwMTA6OmV4dGVuc2lvbnMgdG8gaHRtbCA0LjAvLycsXG4gICAgJy0vL3NweWdsYXNzLy9kdGQgaHRtbCAyLjAgZXh0ZW5kZWQvLycsXG4gICAgJy0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIGh0bWwvLycsXG4gICAgJy0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIHN0cmljdCBodG1sLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzLjIgZHJhZnQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4yIGZpbmFsLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMi8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzLjJzIGRyYWZ0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMCBmcmFtZXNldC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCAxOTk2MDcxMi8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCBleHBlcmltZW50YWwgOTcwNDIxLy8nLFxuICAgICctLy93M2MvL2R0ZCB3MyBodG1sLy8nLFxuICAgICctLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vJyxcbiAgICAnLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy8nLFxuICAgICctLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbC8vJ1xuXTtcblxuY29uc3QgUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUy5jb25jYXQoW1xuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLydcbl0pO1xuXG5jb25zdCBRVUlSS1NfTU9ERV9QVUJMSUNfSURTID0gWyctLy93M28vL2R0ZCB3MyBodG1sIHN0cmljdCAzLjAvL2VuLy8nLCAnLS93M2MvZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC9lbicsICdodG1sJ107XG5jb25zdCBMSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMgPSBbJy0vL3czYy8vZHRkIHhodG1sIDEuMCBmcmFtZXNldC8vJywgJy0vL3czYy8vZHRkIHhodG1sIDEuMCB0cmFuc2l0aW9uYWwvLyddO1xuXG5jb25zdCBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMgPSBMSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMuY29uY2F0KFtcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgdHJhbnNpdGlvbmFsLy8nXG5dKTtcblxuLy9VdGlsc1xuZnVuY3Rpb24gZW5xdW90ZURvY3R5cGVJZChpZCkge1xuICAgIGNvbnN0IHF1b3RlID0gaWQuaW5kZXhPZignXCInKSAhPT0gLTEgPyBcIidcIiA6ICdcIic7XG5cbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xufVxuXG5mdW5jdGlvbiBoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocHVibGljSWQuaW5kZXhPZihwcmVmaXhlc1tpXSkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vL0FQSVxuZXhwb3J0cy5pc0NvbmZvcm1pbmcgPSBmdW5jdGlvbih0b2tlbikge1xuICAgIHJldHVybiAoXG4gICAgICAgIHRva2VuLm5hbWUgPT09IFZBTElEX0RPQ1RZUEVfTkFNRSAmJlxuICAgICAgICB0b2tlbi5wdWJsaWNJZCA9PT0gbnVsbCAmJlxuICAgICAgICAodG9rZW4uc3lzdGVtSWQgPT09IG51bGwgfHwgdG9rZW4uc3lzdGVtSWQgPT09IFZBTElEX1NZU1RFTV9JRClcbiAgICApO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudE1vZGUgPSBmdW5jdGlvbih0b2tlbikge1xuICAgIGlmICh0b2tlbi5uYW1lICE9PSBWQUxJRF9ET0NUWVBFX05BTUUpIHtcbiAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgIH1cblxuICAgIGNvbnN0IHN5c3RlbUlkID0gdG9rZW4uc3lzdGVtSWQ7XG5cbiAgICBpZiAoc3lzdGVtSWQgJiYgc3lzdGVtSWQudG9Mb3dlckNhc2UoKSA9PT0gUVVJUktTX01PREVfU1lTVEVNX0lEKSB7XG4gICAgICAgIHJldHVybiBET0NVTUVOVF9NT0RFLlFVSVJLUztcbiAgICB9XG5cbiAgICBsZXQgcHVibGljSWQgPSB0b2tlbi5wdWJsaWNJZDtcblxuICAgIGlmIChwdWJsaWNJZCAhPT0gbnVsbCkge1xuICAgICAgICBwdWJsaWNJZCA9IHB1YmxpY0lkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKFFVSVJLU19NT0RFX1BVQkxJQ19JRFMuaW5kZXhPZihwdWJsaWNJZCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZWZpeGVzID0gc3lzdGVtSWQgPT09IG51bGwgPyBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTIDogUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTO1xuXG4gICAgICAgIGlmIChoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJlZml4ZXMgPVxuICAgICAgICAgICAgc3lzdGVtSWQgPT09IG51bGwgPyBMSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMgOiBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVM7XG5cbiAgICAgICAgaWYgKGhhc1ByZWZpeChwdWJsaWNJZCwgcHJlZml4ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5MSU1JVEVEX1FVSVJLUztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBET0NVTUVOVF9NT0RFLk5PX1FVSVJLUztcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplQ29udGVudCA9IGZ1bmN0aW9uKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGxldCBzdHIgPSAnIURPQ1RZUEUgJztcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHN0ciArPSBuYW1lO1xuICAgIH1cblxuICAgIGlmIChwdWJsaWNJZCkge1xuICAgICAgICBzdHIgKz0gJyBQVUJMSUMgJyArIGVucXVvdGVEb2N0eXBlSWQocHVibGljSWQpO1xuICAgIH0gZWxzZSBpZiAoc3lzdGVtSWQpIHtcbiAgICAgICAgc3RyICs9ICcgU1lTVEVNJztcbiAgICB9XG5cbiAgICBpZiAoc3lzdGVtSWQgIT09IG51bGwpIHtcbiAgICAgICAgc3RyICs9ICcgJyArIGVucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXplcicpO1xuY29uc3QgSFRNTCA9IHJlcXVpcmUoJy4vaHRtbCcpO1xuXG4vL0FsaWFzZXNcbmNvbnN0ICQgPSBIVE1MLlRBR19OQU1FUztcbmNvbnN0IE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuY29uc3QgQVRUUlMgPSBIVE1MLkFUVFJTO1xuXG4vL01JTUUgdHlwZXNcbmNvbnN0IE1JTUVfVFlQRVMgPSB7XG4gICAgVEVYVF9IVE1MOiAndGV4dC9odG1sJyxcbiAgICBBUFBMSUNBVElPTl9YTUw6ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnXG59O1xuXG4vL0F0dHJpYnV0ZXNcbmNvbnN0IERFRklOSVRJT05fVVJMX0FUVFIgPSAnZGVmaW5pdGlvbnVybCc7XG5jb25zdCBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb25VUkwnO1xuY29uc3QgU1ZHX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xuICAgIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgICBhdHRyaWJ1dGV0eXBlOiAnYXR0cmlidXRlVHlwZScsXG4gICAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICAgIGJhc2Vwcm9maWxlOiAnYmFzZVByb2ZpbGUnLFxuICAgIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICAgIGNsaXBwYXRodW5pdHM6ICdjbGlwUGF0aFVuaXRzJyxcbiAgICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICAgIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICAgIGZpbHRlcnVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICAgIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICAgIGdyYWRpZW50dHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICAgIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICAgIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAgICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICAgIGtleXNwbGluZXM6ICdrZXlTcGxpbmVzJyxcbiAgICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICAgIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICAgIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gICAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gICAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gICAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICAgIG1hc2t1bml0czogJ21hc2tVbml0cycsXG4gICAgbnVtb2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICAgIHBhdGhsZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gICAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICAgIHBhdHRlcm51bml0czogJ3BhdHRlcm5Vbml0cycsXG4gICAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgICBwb2ludHNhdHk6ICdwb2ludHNBdFknLFxuICAgIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gICAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICAgIHByZXNlcnZlYXNwZWN0cmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgICByZWZ4OiAncmVmWCcsXG4gICAgcmVmeTogJ3JlZlknLFxuICAgIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICAgIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gICAgcmVxdWlyZWRleHRlbnNpb25zOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gICAgc3BlY3VsYXJjb25zdGFudDogJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICAgIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgICBzcHJlYWRtZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICAgIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICAgIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gICAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gICAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgICBzeXN0ZW1sYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gICAgdGFyZ2V0eTogJ3RhcmdldFknLFxuICAgIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgICB2aWV3Ym94OiAndmlld0JveCcsXG4gICAgdmlld3RhcmdldDogJ3ZpZXdUYXJnZXQnLFxuICAgIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gICAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG5jb25zdCBYTUxfQVRUUlNfQURKVVNUTUVOVF9NQVAgPSB7XG4gICAgJ3hsaW5rOmFjdHVhdGUnOiB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH0sXG4gICAgJ3hsaW5rOmFyY3JvbGUnOiB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FyY3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH0sXG4gICAgJ3hsaW5rOmhyZWYnOiB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2hyZWYnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH0sXG4gICAgJ3hsaW5rOnJvbGUnOiB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH0sXG4gICAgJ3hsaW5rOnNob3cnOiB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3Nob3cnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH0sXG4gICAgJ3hsaW5rOnRpdGxlJzogeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0aXRsZScsIG5hbWVzcGFjZTogTlMuWExJTksgfSxcbiAgICAneGxpbms6dHlwZSc6IHsgcHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogTlMuWExJTksgfSxcbiAgICAneG1sOmJhc2UnOiB7IHByZWZpeDogJ3htbCcsIG5hbWU6ICdiYXNlJywgbmFtZXNwYWNlOiBOUy5YTUwgfSxcbiAgICAneG1sOmxhbmcnOiB7IHByZWZpeDogJ3htbCcsIG5hbWU6ICdsYW5nJywgbmFtZXNwYWNlOiBOUy5YTUwgfSxcbiAgICAneG1sOnNwYWNlJzogeyBwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTCB9LFxuICAgIHhtbG5zOiB7IHByZWZpeDogJycsIG5hbWU6ICd4bWxucycsIG5hbWVzcGFjZTogTlMuWE1MTlMgfSxcbiAgICAneG1sbnM6eGxpbmsnOiB7IHByZWZpeDogJ3htbG5zJywgbmFtZTogJ3hsaW5rJywgbmFtZXNwYWNlOiBOUy5YTUxOUyB9XG59O1xuXG4vL1NWRyB0YWcgbmFtZXMgYWRqdXN0bWVudCBtYXBcbmNvbnN0IFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVAgPSAoZXhwb3J0cy5TVkdfVEFHX05BTUVTX0FESlVTVE1FTlRfTUFQID0ge1xuICAgIGFsdGdseXBoOiAnYWx0R2x5cGgnLFxuICAgIGFsdGdseXBoZGVmOiAnYWx0R2x5cGhEZWYnLFxuICAgIGFsdGdseXBoaXRlbTogJ2FsdEdseXBoSXRlbScsXG4gICAgYW5pbWF0ZWNvbG9yOiAnYW5pbWF0ZUNvbG9yJyxcbiAgICBhbmltYXRlbW90aW9uOiAnYW5pbWF0ZU1vdGlvbicsXG4gICAgYW5pbWF0ZXRyYW5zZm9ybTogJ2FuaW1hdGVUcmFuc2Zvcm0nLFxuICAgIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAgIGZlYmxlbmQ6ICdmZUJsZW5kJyxcbiAgICBmZWNvbG9ybWF0cml4OiAnZmVDb2xvck1hdHJpeCcsXG4gICAgZmVjb21wb25lbnR0cmFuc2ZlcjogJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxuICAgIGZlY29tcG9zaXRlOiAnZmVDb21wb3NpdGUnLFxuICAgIGZlY29udm9sdmVtYXRyaXg6ICdmZUNvbnZvbHZlTWF0cml4JyxcbiAgICBmZWRpZmZ1c2VsaWdodGluZzogJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcbiAgICBmZWRpc3BsYWNlbWVudG1hcDogJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgICBmZWRpc3RhbnRsaWdodDogJ2ZlRGlzdGFudExpZ2h0JyxcbiAgICBmZWZsb29kOiAnZmVGbG9vZCcsXG4gICAgZmVmdW5jYTogJ2ZlRnVuY0EnLFxuICAgIGZlZnVuY2I6ICdmZUZ1bmNCJyxcbiAgICBmZWZ1bmNnOiAnZmVGdW5jRycsXG4gICAgZmVmdW5jcjogJ2ZlRnVuY1InLFxuICAgIGZlZ2F1c3NpYW5ibHVyOiAnZmVHYXVzc2lhbkJsdXInLFxuICAgIGZlaW1hZ2U6ICdmZUltYWdlJyxcbiAgICBmZW1lcmdlOiAnZmVNZXJnZScsXG4gICAgZmVtZXJnZW5vZGU6ICdmZU1lcmdlTm9kZScsXG4gICAgZmVtb3JwaG9sb2d5OiAnZmVNb3JwaG9sb2d5JyxcbiAgICBmZW9mZnNldDogJ2ZlT2Zmc2V0JyxcbiAgICBmZXBvaW50bGlnaHQ6ICdmZVBvaW50TGlnaHQnLFxuICAgIGZlc3BlY3VsYXJsaWdodGluZzogJ2ZlU3BlY3VsYXJMaWdodGluZycsXG4gICAgZmVzcG90bGlnaHQ6ICdmZVNwb3RMaWdodCcsXG4gICAgZmV0aWxlOiAnZmVUaWxlJyxcbiAgICBmZXR1cmJ1bGVuY2U6ICdmZVR1cmJ1bGVuY2UnLFxuICAgIGZvcmVpZ25vYmplY3Q6ICdmb3JlaWduT2JqZWN0JyxcbiAgICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgICBsaW5lYXJncmFkaWVudDogJ2xpbmVhckdyYWRpZW50JyxcbiAgICByYWRpYWxncmFkaWVudDogJ3JhZGlhbEdyYWRpZW50JyxcbiAgICB0ZXh0cGF0aDogJ3RleHRQYXRoJ1xufSk7XG5cbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XG5jb25zdCBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSB7XG4gICAgWyQuQl06IHRydWUsXG4gICAgWyQuQklHXTogdHJ1ZSxcbiAgICBbJC5CTE9DS1FVT1RFXTogdHJ1ZSxcbiAgICBbJC5CT0RZXTogdHJ1ZSxcbiAgICBbJC5CUl06IHRydWUsXG4gICAgWyQuQ0VOVEVSXTogdHJ1ZSxcbiAgICBbJC5DT0RFXTogdHJ1ZSxcbiAgICBbJC5ERF06IHRydWUsXG4gICAgWyQuRElWXTogdHJ1ZSxcbiAgICBbJC5ETF06IHRydWUsXG4gICAgWyQuRFRdOiB0cnVlLFxuICAgIFskLkVNXTogdHJ1ZSxcbiAgICBbJC5FTUJFRF06IHRydWUsXG4gICAgWyQuSDFdOiB0cnVlLFxuICAgIFskLkgyXTogdHJ1ZSxcbiAgICBbJC5IM106IHRydWUsXG4gICAgWyQuSDRdOiB0cnVlLFxuICAgIFskLkg1XTogdHJ1ZSxcbiAgICBbJC5INl06IHRydWUsXG4gICAgWyQuSEVBRF06IHRydWUsXG4gICAgWyQuSFJdOiB0cnVlLFxuICAgIFskLkldOiB0cnVlLFxuICAgIFskLklNR106IHRydWUsXG4gICAgWyQuTEldOiB0cnVlLFxuICAgIFskLkxJU1RJTkddOiB0cnVlLFxuICAgIFskLk1FTlVdOiB0cnVlLFxuICAgIFskLk1FVEFdOiB0cnVlLFxuICAgIFskLk5PQlJdOiB0cnVlLFxuICAgIFskLk9MXTogdHJ1ZSxcbiAgICBbJC5QXTogdHJ1ZSxcbiAgICBbJC5QUkVdOiB0cnVlLFxuICAgIFskLlJVQlldOiB0cnVlLFxuICAgIFskLlNdOiB0cnVlLFxuICAgIFskLlNNQUxMXTogdHJ1ZSxcbiAgICBbJC5TUEFOXTogdHJ1ZSxcbiAgICBbJC5TVFJPTkddOiB0cnVlLFxuICAgIFskLlNUUklLRV06IHRydWUsXG4gICAgWyQuU1VCXTogdHJ1ZSxcbiAgICBbJC5TVVBdOiB0cnVlLFxuICAgIFskLlRBQkxFXTogdHJ1ZSxcbiAgICBbJC5UVF06IHRydWUsXG4gICAgWyQuVV06IHRydWUsXG4gICAgWyQuVUxdOiB0cnVlLFxuICAgIFskLlZBUl06IHRydWVcbn07XG5cbi8vQ2hlY2sgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxuZXhwb3J0cy5jYXVzZXNFeGl0ID0gZnVuY3Rpb24oc3RhcnRUYWdUb2tlbikge1xuICAgIGNvbnN0IHRuID0gc3RhcnRUYWdUb2tlbi50YWdOYW1lO1xuICAgIGNvbnN0IGlzRm9udFdpdGhBdHRycyA9XG4gICAgICAgIHRuID09PSAkLkZPTlQgJiZcbiAgICAgICAgKFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuQ09MT1IpICE9PSBudWxsIHx8XG4gICAgICAgICAgICBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLlNJWkUpICE9PSBudWxsIHx8XG4gICAgICAgICAgICBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLkZBQ0UpICE9PSBudWxsKTtcblxuICAgIHJldHVybiBpc0ZvbnRXaXRoQXR0cnMgPyB0cnVlIDogRVhJVFNfRk9SRUlHTl9DT05URU5UW3RuXTtcbn07XG5cbi8vVG9rZW4gYWRqdXN0bWVudHNcbmV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodG9rZW4uYXR0cnNbaV0ubmFtZSA9PT0gREVGSU5JVElPTl9VUkxfQVRUUikge1xuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZSA9IEFESlVTVEVEX0RFRklOSVRJT05fVVJMX0FUVFI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdBdHRycyA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhZGp1c3RlZEF0dHJOYW1lID0gU1ZHX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xuXG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJOYW1lKSB7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyTmFtZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydHMuYWRqdXN0VG9rZW5YTUxBdHRycyA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhZGp1c3RlZEF0dHJFbnRyeSA9IFhNTF9BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcblxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyRW50cnkpIHtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLnByZWZpeCA9IGFkanVzdGVkQXR0ckVudHJ5LnByZWZpeDtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJFbnRyeS5uYW1lO1xuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZXNwYWNlID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZXNwYWNlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy5hZGp1c3RUb2tlblNWR1RhZ05hbWUgPSBmdW5jdGlvbih0b2tlbikge1xuICAgIGNvbnN0IGFkanVzdGVkVGFnTmFtZSA9IFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVBbdG9rZW4udGFnTmFtZV07XG5cbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lKSB7XG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XG4gICAgfVxufTtcblxuLy9JbnRlZ3JhdGlvbiBwb2ludHNcbmZ1bmN0aW9uIGlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKSB7XG4gICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUwgJiYgKHRuID09PSAkLk1JIHx8IHRuID09PSAkLk1PIHx8IHRuID09PSAkLk1OIHx8IHRuID09PSAkLk1TIHx8IHRuID09PSAkLk1URVhUKTtcbn1cblxuZnVuY3Rpb24gaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzKSB7XG4gICAgaWYgKG5zID09PSBOUy5NQVRITUwgJiYgdG4gPT09ICQuQU5OT1RBVElPTl9YTUwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IEFUVFJTLkVOQ09ESU5HKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyc1tpXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBNSU1FX1RZUEVTLlRFWFRfSFRNTCB8fCB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9YTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnMgPT09IE5TLlNWRyAmJiAodG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgfHwgdG4gPT09ICQuREVTQyB8fCB0biA9PT0gJC5USVRMRSk7XG59XG5cbmV4cG9ydHMuaXNJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24odG4sIG5zLCBhdHRycywgZm9yZWlnbk5TKSB7XG4gICAgaWYgKCghZm9yZWlnbk5TIHx8IGZvcmVpZ25OUyA9PT0gTlMuSFRNTCkgJiYgaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoKCFmb3JlaWduTlMgfHwgZm9yZWlnbk5TID09PSBOUy5NQVRITUwpICYmIGlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXplcicpO1xuY29uc3QgT3BlbkVsZW1lbnRTdGFjayA9IHJlcXVpcmUoJy4vb3Blbi1lbGVtZW50LXN0YWNrJyk7XG5jb25zdCBGb3JtYXR0aW5nRWxlbWVudExpc3QgPSByZXF1aXJlKCcuL2Zvcm1hdHRpbmctZWxlbWVudC1saXN0Jyk7XG5jb25zdCBMb2NhdGlvbkluZm9QYXJzZXJNaXhpbiA9IHJlcXVpcmUoJy4uL2V4dGVuc2lvbnMvbG9jYXRpb24taW5mby9wYXJzZXItbWl4aW4nKTtcbmNvbnN0IEVycm9yUmVwb3J0aW5nUGFyc2VyTWl4aW4gPSByZXF1aXJlKCcuLi9leHRlbnNpb25zL2Vycm9yLXJlcG9ydGluZy9wYXJzZXItbWl4aW4nKTtcbmNvbnN0IE1peGluID0gcmVxdWlyZSgnLi4vdXRpbHMvbWl4aW4nKTtcbmNvbnN0IGRlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWUtYWRhcHRlcnMvZGVmYXVsdCcpO1xuY29uc3QgbWVyZ2VPcHRpb25zID0gcmVxdWlyZSgnLi4vdXRpbHMvbWVyZ2Utb3B0aW9ucycpO1xuY29uc3QgZG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyk7XG5jb25zdCBmb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduLWNvbnRlbnQnKTtcbmNvbnN0IEVSUiA9IHJlcXVpcmUoJy4uL2NvbW1vbi9lcnJvci1jb2RlcycpO1xuY29uc3QgdW5pY29kZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyk7XG5jb25zdCBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG5jb25zdCAkID0gSFRNTC5UQUdfTkFNRVM7XG5jb25zdCBOUyA9IEhUTUwuTkFNRVNQQUNFUztcbmNvbnN0IEFUVFJTID0gSFRNTC5BVFRSUztcblxuY29uc3QgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIHNjcmlwdGluZ0VuYWJsZWQ6IHRydWUsXG4gICAgc291cmNlQ29kZUxvY2F0aW9uSW5mbzogZmFsc2UsXG4gICAgb25QYXJzZUVycm9yOiBudWxsLFxuICAgIHRyZWVBZGFwdGVyOiBkZWZhdWx0VHJlZUFkYXB0ZXJcbn07XG5cbi8vTWlzYyBjb25zdGFudHNcbmNvbnN0IEhJRERFTl9JTlBVVF9UWVBFID0gJ2hpZGRlbic7XG5cbi8vQWRvcHRpb24gYWdlbmN5IGxvb3BzIGl0ZXJhdGlvbiBjb3VudFxuY29uc3QgQUFfT1VURVJfTE9PUF9JVEVSID0gODtcbmNvbnN0IEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG5cbi8vSW5zZXJ0aW9uIG1vZGVzXG5jb25zdCBJTklUSUFMX01PREUgPSAnSU5JVElBTF9NT0RFJztcbmNvbnN0IEJFRk9SRV9IVE1MX01PREUgPSAnQkVGT1JFX0hUTUxfTU9ERSc7XG5jb25zdCBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnO1xuY29uc3QgSU5fSEVBRF9NT0RFID0gJ0lOX0hFQURfTU9ERSc7XG5jb25zdCBJTl9IRUFEX05PX1NDUklQVF9NT0RFID0gJ0lOX0hFQURfTk9fU0NSSVBUX01PREUnO1xuY29uc3QgQUZURVJfSEVBRF9NT0RFID0gJ0FGVEVSX0hFQURfTU9ERSc7XG5jb25zdCBJTl9CT0RZX01PREUgPSAnSU5fQk9EWV9NT0RFJztcbmNvbnN0IFRFWFRfTU9ERSA9ICdURVhUX01PREUnO1xuY29uc3QgSU5fVEFCTEVfTU9ERSA9ICdJTl9UQUJMRV9NT0RFJztcbmNvbnN0IElOX1RBQkxFX1RFWFRfTU9ERSA9ICdJTl9UQUJMRV9URVhUX01PREUnO1xuY29uc3QgSU5fQ0FQVElPTl9NT0RFID0gJ0lOX0NBUFRJT05fTU9ERSc7XG5jb25zdCBJTl9DT0xVTU5fR1JPVVBfTU9ERSA9ICdJTl9DT0xVTU5fR1JPVVBfTU9ERSc7XG5jb25zdCBJTl9UQUJMRV9CT0RZX01PREUgPSAnSU5fVEFCTEVfQk9EWV9NT0RFJztcbmNvbnN0IElOX1JPV19NT0RFID0gJ0lOX1JPV19NT0RFJztcbmNvbnN0IElOX0NFTExfTU9ERSA9ICdJTl9DRUxMX01PREUnO1xuY29uc3QgSU5fU0VMRUNUX01PREUgPSAnSU5fU0VMRUNUX01PREUnO1xuY29uc3QgSU5fU0VMRUNUX0lOX1RBQkxFX01PREUgPSAnSU5fU0VMRUNUX0lOX1RBQkxFX01PREUnO1xuY29uc3QgSU5fVEVNUExBVEVfTU9ERSA9ICdJTl9URU1QTEFURV9NT0RFJztcbmNvbnN0IEFGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9CT0RZX01PREUnO1xuY29uc3QgSU5fRlJBTUVTRVRfTU9ERSA9ICdJTl9GUkFNRVNFVF9NT0RFJztcbmNvbnN0IEFGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5jb25zdCBBRlRFUl9BRlRFUl9CT0RZX01PREUgPSAnQUZURVJfQUZURVJfQk9EWV9NT0RFJztcbmNvbnN0IEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5cbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXG5jb25zdCBJTlNFUlRJT05fTU9ERV9SRVNFVF9NQVAgPSB7XG4gICAgWyQuVFJdOiBJTl9ST1dfTU9ERSxcbiAgICBbJC5UQk9EWV06IElOX1RBQkxFX0JPRFlfTU9ERSxcbiAgICBbJC5USEVBRF06IElOX1RBQkxFX0JPRFlfTU9ERSxcbiAgICBbJC5URk9PVF06IElOX1RBQkxFX0JPRFlfTU9ERSxcbiAgICBbJC5DQVBUSU9OXTogSU5fQ0FQVElPTl9NT0RFLFxuICAgIFskLkNPTEdST1VQXTogSU5fQ09MVU1OX0dST1VQX01PREUsXG4gICAgWyQuVEFCTEVdOiBJTl9UQUJMRV9NT0RFLFxuICAgIFskLkJPRFldOiBJTl9CT0RZX01PREUsXG4gICAgWyQuRlJBTUVTRVRdOiBJTl9GUkFNRVNFVF9NT0RFXG59O1xuXG4vL1RlbXBsYXRlIGluc2VydGlvbiBtb2RlIHN3aXRjaCBtYXBcbmNvbnN0IFRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVAgPSB7XG4gICAgWyQuQ0FQVElPTl06IElOX1RBQkxFX01PREUsXG4gICAgWyQuQ09MR1JPVVBdOiBJTl9UQUJMRV9NT0RFLFxuICAgIFskLlRCT0RZXTogSU5fVEFCTEVfTU9ERSxcbiAgICBbJC5URk9PVF06IElOX1RBQkxFX01PREUsXG4gICAgWyQuVEhFQURdOiBJTl9UQUJMRV9NT0RFLFxuICAgIFskLkNPTF06IElOX0NPTFVNTl9HUk9VUF9NT0RFLFxuICAgIFskLlRSXTogSU5fVEFCTEVfQk9EWV9NT0RFLFxuICAgIFskLlREXTogSU5fUk9XX01PREUsXG4gICAgWyQuVEhdOiBJTl9ST1dfTU9ERVxufTtcblxuLy9Ub2tlbiBoYW5kbGVycyBtYXAgZm9yIGluc2VydGlvbiBtb2Rlc1xuY29uc3QgVE9LRU5fSEFORExFUlMgPSB7XG4gICAgW0lOSVRJQUxfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkluSW5pdGlhbE1vZGUsXG4gICAgICAgIFtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkluSW5pdGlhbE1vZGUsXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogZG9jdHlwZUluSW5pdGlhbE1vZGUsXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogdG9rZW5JbkluaXRpYWxNb2RlLFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiB0b2tlbkluSW5pdGlhbE1vZGUsXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogdG9rZW5JbkluaXRpYWxNb2RlXG4gICAgfSxcbiAgICBbQkVGT1JFX0hUTUxfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkJlZm9yZUh0bWwsXG4gICAgICAgIFtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkJlZm9yZUh0bWwsXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdCZWZvcmVIdG1sLFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdCZWZvcmVIdG1sLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHRva2VuQmVmb3JlSHRtbFxuICAgIH0sXG4gICAgW0JFRk9SRV9IRUFEX01PREVdOiB7XG4gICAgICAgIFtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXTogdG9rZW5CZWZvcmVIZWFkLFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogdG9rZW5CZWZvcmVIZWFkLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl06IGFwcGVuZENvbW1lbnQsXG4gICAgICAgIFtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl06IG1pc3BsYWNlZERvY3R5cGUsXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdCZWZvcmVIZWFkLFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdCZWZvcmVIZWFkLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHRva2VuQmVmb3JlSGVhZFxuICAgIH0sXG4gICAgW0lOX0hFQURfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkluSGVhZCxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IHRva2VuSW5IZWFkLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogaW5zZXJ0Q2hhcmFjdGVycyxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogbWlzcGxhY2VkRG9jdHlwZSxcbiAgICAgICAgW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dOiBzdGFydFRhZ0luSGVhZCxcbiAgICAgICAgW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXTogZW5kVGFnSW5IZWFkLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHRva2VuSW5IZWFkXG4gICAgfSxcbiAgICBbSU5fSEVBRF9OT19TQ1JJUFRfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkluSGVhZE5vU2NyaXB0LFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogdG9rZW5JbkhlYWROb1NjcmlwdCxcbiAgICAgICAgW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl06IGluc2VydENoYXJhY3RlcnMsXG4gICAgICAgIFtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl06IGFwcGVuZENvbW1lbnQsXG4gICAgICAgIFtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl06IG1pc3BsYWNlZERvY3R5cGUsXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJbkhlYWROb1NjcmlwdCxcbiAgICAgICAgW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXTogZW5kVGFnSW5IZWFkTm9TY3JpcHQsXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogdG9rZW5JbkhlYWROb1NjcmlwdFxuICAgIH0sXG4gICAgW0FGVEVSX0hFQURfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkFmdGVySGVhZCxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IHRva2VuQWZ0ZXJIZWFkLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogaW5zZXJ0Q2hhcmFjdGVycyxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogbWlzcGxhY2VkRG9jdHlwZSxcbiAgICAgICAgW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dOiBzdGFydFRhZ0FmdGVySGVhZCxcbiAgICAgICAgW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXTogZW5kVGFnQWZ0ZXJIZWFkLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHRva2VuQWZ0ZXJIZWFkXG4gICAgfSxcbiAgICBbSU5fQk9EWV9NT0RFXToge1xuICAgICAgICBbVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl06IGNoYXJhY3RlckluQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJbkJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IGVuZFRhZ0luQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5FT0ZfVE9LRU5dOiBlb2ZJbkJvZHlcbiAgICB9LFxuICAgIFtURVhUX01PREVdOiB7XG4gICAgICAgIFtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXTogaW5zZXJ0Q2hhcmFjdGVycyxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IGluc2VydENoYXJhY3RlcnMsXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiBpbnNlcnRDaGFyYWN0ZXJzLFxuICAgICAgICBbVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IGVuZFRhZ0luVGV4dCxcbiAgICAgICAgW1Rva2VuaXplci5FT0ZfVE9LRU5dOiBlb2ZJblRleHRcbiAgICB9LFxuICAgIFtJTl9UQUJMRV9NT0RFXToge1xuICAgICAgICBbVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl06IGNoYXJhY3RlckluVGFibGUsXG4gICAgICAgIFtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dOiBjaGFyYWN0ZXJJblRhYmxlLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogY2hhcmFjdGVySW5UYWJsZSxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJblRhYmxlLFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdJblRhYmxlLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IGVvZkluQm9keVxuICAgIH0sXG4gICAgW0lOX1RBQkxFX1RFWFRfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBjaGFyYWN0ZXJJblRhYmxlVGV4dCxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0LFxuICAgICAgICBbVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dOiB0b2tlbkluVGFibGVUZXh0LFxuICAgICAgICBbVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dOiB0b2tlbkluVGFibGVUZXh0LFxuICAgICAgICBbVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl06IHRva2VuSW5UYWJsZVRleHQsXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IHRva2VuSW5UYWJsZVRleHQsXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogdG9rZW5JblRhYmxlVGV4dFxuICAgIH0sXG4gICAgW0lOX0NBUFRJT05fTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBjaGFyYWN0ZXJJbkJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl06IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl06IGFwcGVuZENvbW1lbnQsXG4gICAgICAgIFtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl06IHN0YXJ0VGFnSW5DYXB0aW9uLFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdJbkNhcHRpb24sXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogZW9mSW5Cb2R5XG4gICAgfSxcbiAgICBbSU5fQ09MVU1OX0dST1VQX01PREVdOiB7XG4gICAgICAgIFtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXTogdG9rZW5JbkNvbHVtbkdyb3VwLFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogdG9rZW5JbkNvbHVtbkdyb3VwLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogaW5zZXJ0Q2hhcmFjdGVycyxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJbkNvbHVtbkdyb3VwLFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdJbkNvbHVtbkdyb3VwLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IGVvZkluQm9keVxuICAgIH0sXG4gICAgW0lOX1RBQkxFX0JPRFlfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBjaGFyYWN0ZXJJblRhYmxlLFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogY2hhcmFjdGVySW5UYWJsZSxcbiAgICAgICAgW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl06IGNoYXJhY3RlckluVGFibGUsXG4gICAgICAgIFtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl06IGFwcGVuZENvbW1lbnQsXG4gICAgICAgIFtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl06IHN0YXJ0VGFnSW5UYWJsZUJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IGVuZFRhZ0luVGFibGVCb2R5LFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IGVvZkluQm9keVxuICAgIH0sXG4gICAgW0lOX1JPV19NT0RFXToge1xuICAgICAgICBbVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl06IGNoYXJhY3RlckluVGFibGUsXG4gICAgICAgIFtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dOiBjaGFyYWN0ZXJJblRhYmxlLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogY2hhcmFjdGVySW5UYWJsZSxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJblJvdyxcbiAgICAgICAgW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXTogZW5kVGFnSW5Sb3csXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogZW9mSW5Cb2R5XG4gICAgfSxcbiAgICBbSU5fQ0VMTF9NT0RFXToge1xuICAgICAgICBbVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl06IGNoYXJhY3RlckluQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJbkNlbGwsXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IGVuZFRhZ0luQ2VsbCxcbiAgICAgICAgW1Rva2VuaXplci5FT0ZfVE9LRU5dOiBlb2ZJbkJvZHlcbiAgICB9LFxuICAgIFtJTl9TRUxFQ1RfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBpbnNlcnRDaGFyYWN0ZXJzLFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiBpbnNlcnRDaGFyYWN0ZXJzLFxuICAgICAgICBbVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dOiBhcHBlbmRDb21tZW50LFxuICAgICAgICBbVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dOiBzdGFydFRhZ0luU2VsZWN0LFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdJblNlbGVjdCxcbiAgICAgICAgW1Rva2VuaXplci5FT0ZfVE9LRU5dOiBlb2ZJbkJvZHlcbiAgICB9LFxuICAgIFtJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBpbnNlcnRDaGFyYWN0ZXJzLFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiBpbnNlcnRDaGFyYWN0ZXJzLFxuICAgICAgICBbVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dOiBhcHBlbmRDb21tZW50LFxuICAgICAgICBbVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dOiBzdGFydFRhZ0luU2VsZWN0SW5UYWJsZSxcbiAgICAgICAgW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXTogZW5kVGFnSW5TZWxlY3RJblRhYmxlLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IGVvZkluQm9keVxuICAgIH0sXG4gICAgW0lOX1RFTVBMQVRFX01PREVdOiB7XG4gICAgICAgIFtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXTogY2hhcmFjdGVySW5Cb2R5LFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5LFxuICAgICAgICBbVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dOiBhcHBlbmRDb21tZW50LFxuICAgICAgICBbVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dOiBzdGFydFRhZ0luVGVtcGxhdGUsXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IGVuZFRhZ0luVGVtcGxhdGUsXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogZW9mSW5UZW1wbGF0ZVxuICAgIH0sXG4gICAgW0FGVEVSX0JPRFlfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkFmdGVyQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IHRva2VuQWZ0ZXJCb2R5LFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50LFxuICAgICAgICBbVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dOiBzdGFydFRhZ0FmdGVyQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXTogZW5kVGFnQWZ0ZXJCb2R5LFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHN0b3BQYXJzaW5nXG4gICAgfSxcbiAgICBbSU5fRlJBTUVTRVRfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogaW5zZXJ0Q2hhcmFjdGVycyxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdJbkZyYW1lc2V0LFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdJbkZyYW1lc2V0LFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHN0b3BQYXJzaW5nXG4gICAgfSxcbiAgICBbQUZURVJfRlJBTUVTRVRfTU9ERV06IHtcbiAgICAgICAgW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dOiBpZ25vcmVUb2tlbixcbiAgICAgICAgW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogaW5zZXJ0Q2hhcmFjdGVycyxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdBZnRlckZyYW1lc2V0LFxuICAgICAgICBbVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dOiBlbmRUYWdBZnRlckZyYW1lc2V0LFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHN0b3BQYXJzaW5nXG4gICAgfSxcbiAgICBbQUZURVJfQUZURVJfQk9EWV9NT0RFXToge1xuICAgICAgICBbVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl06IHRva2VuQWZ0ZXJBZnRlckJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dOiB0b2tlbkFmdGVyQWZ0ZXJCb2R5LFxuICAgICAgICBbVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXTogd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keSxcbiAgICAgICAgW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXTogYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQsXG4gICAgICAgIFtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl06IHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IHRva2VuQWZ0ZXJBZnRlckJvZHksXG4gICAgICAgIFtUb2tlbml6ZXIuRU9GX1RPS0VOXTogc3RvcFBhcnNpbmdcbiAgICB9LFxuICAgIFtBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXToge1xuICAgICAgICBbVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dOiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5LFxuICAgICAgICBbVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dOiBhcHBlbmRDb21tZW50VG9Eb2N1bWVudCxcbiAgICAgICAgW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXTogaWdub3JlVG9rZW4sXG4gICAgICAgIFtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXTogc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQsXG4gICAgICAgIFtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl06IGlnbm9yZVRva2VuLFxuICAgICAgICBbVG9rZW5pemVyLkVPRl9UT0tFTl06IHN0b3BQYXJzaW5nXG4gICAgfVxufTtcblxuLy9QYXJzZXJcbmNsYXNzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdGhpcy5vcHRpb25zLnRyZWVBZGFwdGVyO1xuICAgICAgICB0aGlzLnBlbmRpbmdTY3JpcHQgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc291cmNlQ29kZUxvY2F0aW9uSW5mbykge1xuICAgICAgICAgICAgTWl4aW4uaW5zdGFsbCh0aGlzLCBMb2NhdGlvbkluZm9QYXJzZXJNaXhpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9uUGFyc2VFcnJvcikge1xuICAgICAgICAgICAgTWl4aW4uaW5zdGFsbCh0aGlzLCBFcnJvclJlcG9ydGluZ1BhcnNlck1peGluLCB7IG9uUGFyc2VFcnJvcjogdGhpcy5vcHRpb25zLm9uUGFyc2VFcnJvciB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFQSVxuICAgIHBhcnNlKGh0bWwpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fYm9vdHN0cmFwKGRvY3VtZW50LCBudWxsKTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIud3JpdGUoaHRtbCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3J1blBhcnNpbmdMb29wKG51bGwpO1xuXG4gICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICB9XG5cbiAgICBwYXJzZUZyYWdtZW50KGh0bWwsIGZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICAvL05PVEU6IHVzZSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgYSBmcmFnbWVudCBjb250ZXh0IGlmIGNvbnRleHQgZWxlbWVudCB3YXMgbm90IHByb3ZpZGVkLFxuICAgICAgICAvL3NvIHdlIHdpbGwgcGFyc2UgaW4gXCJmb3JnaXZpbmdcIiBtYW5uZXJcbiAgICAgICAgaWYgKCFmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgIGZyYWdtZW50Q29udGV4dCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgkLlRFTVBMQVRFLCBOUy5IVE1MLCBbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL05PVEU6IGNyZWF0ZSBmYWtlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzICdkb2N1bWVudCcgZm9yIGZyYWdtZW50IHBhcnNpbmcuXG4gICAgICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tIHRoZXJlICdkb2N1bWVudCcgY2FuJ3QgYmUgcmVjcmVhdGVkLCB0aGVyZWZvcmVcbiAgICAgICAgLy9mcmFnbWVudCBwYXJzaW5nIGNhdXNlcyBtZXNzaW5nIG9mIHRoZSBtYWluIGBkb2N1bWVudGAuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50TW9jayA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgnZG9jdW1lbnRtb2NrJywgTlMuSFRNTCwgW10pO1xuXG4gICAgICAgIHRoaXMuX2Jvb3RzdHJhcChkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShmcmFnbWVudENvbnRleHQpID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbml0VG9rZW5pemVyRm9yRnJhZ21lbnRQYXJzaW5nKCk7XG4gICAgICAgIHRoaXMuX2luc2VydEZha2VSb290RWxlbWVudCgpO1xuICAgICAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgdGhpcy5fZmluZEZvcm1JbkZyYWdtZW50Q29udGV4dCgpO1xuICAgICAgICB0aGlzLnRva2VuaXplci53cml0ZShodG1sLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQoZG9jdW1lbnRNb2NrKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgICAgICB0aGlzLl9hZG9wdE5vZGVzKHJvb3RFbGVtZW50LCBmcmFnbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgIH1cblxuICAgIC8vQm9vdHN0cmFwIHBhcnNlclxuICAgIF9ib290c3RyYXAoZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIodGhpcy5vcHRpb25zKTtcblxuICAgICAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XG4gICAgICAgIHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gJyc7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcblxuICAgICAgICB0aGlzLmhlYWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtRWxlbWVudCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBuZXcgRm9ybWF0dGluZ0VsZW1lbnRMaXN0KHRoaXMudHJlZUFkYXB0ZXIpO1xuXG4gICAgICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPSAtMTtcbiAgICAgICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSBudWxsO1xuXG4gICAgICAgIHRoaXMucGVuZGluZ0NoYXJhY3RlclRva2VucyA9IFtdO1xuICAgICAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmZyYW1lc2V0T2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvL0Vycm9yc1xuICAgIF9lcnIoKSB7XG4gICAgICAgIC8vIE5PVEU6IGVyciByZXBvcnRpbmcgaXMgbm9vcCBieSBkZWZhdWx0LiBFbmFibGVkIGJ5IG1peGluLlxuICAgIH1cblxuICAgIC8vUGFyc2luZyBsb29wXG4gICAgX3J1blBhcnNpbmdMb29wKHNjcmlwdEhhbmRsZXIpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwVG9rZW5pemVyQ0RBVEFNb2RlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7XG5cbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuSElCRVJOQVRJT05fVE9LRU4pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4gJiYgdG9rZW4uY2hhcnNbMF0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uY2hhcnMgPSB0b2tlbi5jaGFycy5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzSW5wdXRUb2tlbih0b2tlbik7XG5cbiAgICAgICAgICAgIGlmIChzY3JpcHRIYW5kbGVyICYmIHRoaXMucGVuZGluZ1NjcmlwdCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVuUGFyc2luZ0xvb3BGb3JDdXJyZW50Q2h1bmsod3JpdGVDYWxsYmFjaywgc2NyaXB0SGFuZGxlcikge1xuICAgICAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcChzY3JpcHRIYW5kbGVyKTtcblxuICAgICAgICBpZiAoc2NyaXB0SGFuZGxlciAmJiB0aGlzLnBlbmRpbmdTY3JpcHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMucGVuZGluZ1NjcmlwdDtcblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nU2NyaXB0ID0gbnVsbDtcblxuICAgICAgICAgICAgc2NyaXB0SGFuZGxlcihzY3JpcHQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod3JpdGVDYWxsYmFjaykge1xuICAgICAgICAgICAgd3JpdGVDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UZXh0IHBhcnNpbmdcbiAgICBfc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy50b2tlbml6ZXIuYWxsb3dDREFUQSA9XG4gICAgICAgICAgICBjdXJyZW50ICYmXG4gICAgICAgICAgICBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxuICAgICAgICAgICAgIXRoaXMuX2lzSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KTtcbiAgICB9XG5cbiAgICBfc3dpdGNoVG9UZXh0UGFyc2luZyhjdXJyZW50VG9rZW4sIG5leHRUb2tlbml6ZXJTdGF0ZSkge1xuICAgICAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gbmV4dFRva2VuaXplclN0YXRlO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHRoaXMuaW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xuICAgIH1cblxuICAgIHN3aXRjaFRvUGxhaW50ZXh0UGFyc2luZygpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5QTEFJTlRFWFQ7XG4gICAgfVxuXG4gICAgLy9GcmFnbWVudCBwYXJzaW5nXG4gICAgX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dFxuICAgICAgICAgICAgPyB0aGlzLmZyYWdtZW50Q29udGV4dFxuICAgICAgICAgICAgOiB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cblxuICAgIF9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCkge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuZnJhZ21lbnRDb250ZXh0O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSkgPT09ICQuRk9STSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBub2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG5vZGUpO1xuICAgICAgICB9IHdoaWxlIChub2RlKTtcbiAgICB9XG5cbiAgICBfaW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZygpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuZnJhZ21lbnRDb250ZXh0KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5mcmFnbWVudENvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVElUTEUgfHwgdG4gPT09ICQuVEVYVEFSRUEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdG4gPT09ICQuU1RZTEUgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5YTVAgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5JRlJBTUUgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5OT1NDUklQVFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQVdURVhUO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5QTEFJTlRFWFQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVHJlZSBtdXRhdGlvblxuICAgIF9zZXREb2N1bWVudFR5cGUodG9rZW4pIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRva2VuLm5hbWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IHB1YmxpY0lkID0gdG9rZW4ucHVibGljSWQgfHwgJyc7XG4gICAgICAgIGNvbnN0IHN5c3RlbUlkID0gdG9rZW4uc3lzdGVtSWQgfHwgJyc7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKTtcbiAgICB9XG5cbiAgICBfYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hcHBlbmRFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBuYW1lc3BhY2VVUkksIHRva2VuLmF0dHJzKTtcblxuICAgICAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBuYW1lc3BhY2VVUkksIHRva2VuLmF0dHJzKTtcblxuICAgICAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRGYWtlRWxlbWVudCh0YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgTlMuSFRNTCwgW10pO1xuXG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCk7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgX2luc2VydFRlbXBsYXRlKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IHRtcGwgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgTlMuSFRNTCwgdG9rZW4uYXR0cnMpO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXRUZW1wbGF0ZUNvbnRlbnQodG1wbCwgY29udGVudCk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUodG1wbCk7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XG4gICAgfVxuXG4gICAgX2luc2VydEZha2VSb290RWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgkLkhUTUwsIE5TLkhUTUwsIFtdKTtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIF9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgY29tbWVudE5vZGUpO1xuICAgIH1cblxuICAgIF9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRUZXh0KHRva2VuLmNoYXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fCB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRvcHROb2Rlcyhkb25vciwgcmVjaXBpZW50KSB7XG4gICAgICAgIGZvciAobGV0IGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKTsgY2hpbGQ7IGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKSkge1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocmVjaXBpZW50LCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL1Rva2VuIHByb2Nlc3NpbmdcbiAgICBfc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbikge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpO1xuXG4gICAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGN1cnJlbnQpID09PSAkLkFOTk9UQVRJT05fWE1MICYmXG4gICAgICAgICAgICBucyA9PT0gTlMuTUFUSE1MICYmXG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOICYmXG4gICAgICAgICAgICB0b2tlbi50YWdOYW1lID09PSAkLlNWR1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQ2hhcmFjdGVyVG9rZW4gPVxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU47XG5cbiAgICAgICAgY29uc3QgaXNNYXRoTUxUZXh0U3RhcnRUYWcgPVxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJiB0b2tlbi50YWdOYW1lICE9PSAkLk1HTFlQSCAmJiB0b2tlbi50YWdOYW1lICE9PSAkLk1BTElHTk1BUks7XG5cbiAgICAgICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc0ludGVncmF0aW9uUG9pbnQoY3VycmVudCwgTlMuTUFUSE1MKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzSW50ZWdyYXRpb25Qb2ludChjdXJyZW50LCBOUy5IVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbi50eXBlICE9PSBUb2tlbml6ZXIuRU9GX1RPS0VOO1xuICAgIH1cblxuICAgIF9wcm9jZXNzVG9rZW4odG9rZW4pIHtcbiAgICAgICAgVE9LRU5fSEFORExFUlNbdGhpcy5pbnNlcnRpb25Nb2RlXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pIHtcbiAgICAgICAgVE9LRU5fSEFORExFUlNbSU5fQk9EWV9NT0RFXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pIHtcbiAgICAgICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTikge1xuICAgICAgICAgICAgbnVsbENoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTikge1xuICAgICAgICAgICAgaW5zZXJ0Q2hhcmFjdGVycyh0aGlzLCB0b2tlbik7XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pIHtcbiAgICAgICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pIHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVORF9UQUdfVE9LRU4pIHtcbiAgICAgICAgICAgIGVuZFRhZ0luRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NJbnB1dFRva2VuKHRva2VuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4uc2VsZkNsb3NpbmcgJiYgIXRva2VuLmFja1NlbGZDbG9zaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm5vblZvaWRIdG1sRWxlbWVudFN0YXJ0VGFnV2l0aFRyYWlsaW5nU29saWR1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL0ludGVncmF0aW9uIHBvaW50c1xuICAgIF9pc0ludGVncmF0aW9uUG9pbnQoZWxlbWVudCwgZm9yZWlnbk5TKSB7XG4gICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcmVpZ25Db250ZW50LmlzSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzLCBmb3JlaWduTlMpO1xuICAgIH1cblxuICAgIC8vQWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMgcmVjb25zdHJ1Y3Rpb25cbiAgICBfcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RMZW5ndGggPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGxpc3RMZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gbnVsbDtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHVub3BlbklkeC0tO1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1t1bm9wZW5JZHhdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgfHwgdGhpcy5vcGVuRWxlbWVudHMuY29udGFpbnMoZW50cnkuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdW5vcGVuSWR4OyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vQ2xvc2UgZWxlbWVudHNcbiAgICBfY2xvc2VUYWJsZUNlbGwoKSB7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUNlbGxQb3BwZWQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgfVxuXG4gICAgX2Nsb3NlUEVsZW1lbnQoKSB7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuUCk7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xuICAgIH1cblxuICAgIC8vSW5zZXJ0aW9uIG1vZGVzXG4gICAgX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wLCBsYXN0ID0gZmFsc2U7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxhc3QgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbmV3SW5zZXJ0aW9uTW9kZSA9IElOU0VSVElPTl9NT0RFX1JFU0VUX01BUFt0bl07XG5cbiAgICAgICAgICAgIGlmIChuZXdJbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxhc3QgJiYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0NFTExfTU9ERTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxhc3QgJiYgdG4gPT09ICQuSEVBRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0hFQURfTU9ERTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5oZWFkRWxlbWVudCA/IEFGVEVSX0hFQURfTU9ERSA6IEJFRk9SRV9IRUFEX01PREU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KHNlbGVjdElkeCkge1xuICAgICAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdElkeCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGFuY2VzdG9yKTtcblxuICAgICAgICAgICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9JTl9UQUJMRV9NT0RFO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG4gICAgfVxuXG4gICAgX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShtb2RlKSB7XG4gICAgICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xuICAgICAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3ArKztcbiAgICAgICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSBtb2RlO1xuICAgIH1cblxuICAgIF9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpIHtcbiAgICAgICAgdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcbiAgICAgICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tbdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wXTtcbiAgICB9XG5cbiAgICAvL0Zvc3RlciBwYXJlbnRpbmdcbiAgICBfaXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xuICAgIH1cblxuICAgIF9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XG4gICAgfVxuXG4gICAgX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICBiZWZvcmVFbGVtZW50OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRlbXBsYXRlQ29udGVudChvcGVuRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG9wZW5FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbG9jYXRpb24ucGFyZW50KSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICB9XG5cbiAgICBfZm9zdGVyUGFyZW50RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0QmVmb3JlKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCwgbG9jYXRpb24uYmVmb3JlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZm9zdGVyUGFyZW50VGV4dChjaGFycykge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHRCZWZvcmUobG9jYXRpb24ucGFyZW50LCBjaGFycywgbG9jYXRpb24uYmVmb3JlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQobG9jYXRpb24ucGFyZW50LCBjaGFycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL1NwZWNpYWwgZWxlbWVudHNcbiAgICBfaXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBIVE1MLlNQRUNJQUxfRUxFTUVOVFNbbnNdW3RuXTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyO1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG1cbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCNhZG9wdGlvbkFnZW5jeSlcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vU3RlcHMgNS04IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRm9ybWF0dGluZ0VsZW1lbnRFbnRyeShwLCB0b2tlbikge1xuICAgIGxldCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKHRva2VuLnRhZ05hbWUpO1xuXG4gICAgaWYgKGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICAgICAgaWYgKCFwLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICAgICAgICAgIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgbGV0IGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgZnVydGhlc3RCbG9jayA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHJldHVybiBmdXJ0aGVzdEJsb2NrO1xufVxuXG4vL1N0ZXAgMTMgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnQpIHtcbiAgICBsZXQgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrO1xuICAgIGxldCBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGVsZW1lbnQgPSBuZXh0RWxlbWVudDsgZWxlbWVudCAhPT0gZm9ybWF0dGluZ0VsZW1lbnQ7IGkrKywgZWxlbWVudCA9IG5leHRFbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogc3RvcmUgbmV4dCBlbGVtZW50IGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbiAoaXQgbWF5IGJlIGRlbGV0ZWQgZnJvbSB0aGUgc3RhY2sgYnkgc3RlcCA5LjUpXG4gICAgICAgIG5leHRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb3VudGVyT3ZlcmZsb3cgPSBlbGVtZW50RW50cnkgJiYgaSA+PSBBQV9JTk5FUl9MT09QX0lURVI7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUZyb21PcGVuRWxlbWVudHMgPSAhZWxlbWVudEVudHJ5IHx8IGNvdW50ZXJPdmVyZmxvdztcblxuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlRnJvbU9wZW5FbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXJPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGVsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuXG4gICAgICAgICAgICBpZiAobGFzdEVsZW1lbnQgPT09IGZ1cnRoZXN0QmxvY2spIHtcbiAgICAgICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGVsZW1lbnRFbnRyeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGxhc3RFbGVtZW50KTtcbiAgICAgICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICBjb25zdCBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gcC50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KGVsZW1lbnRFbnRyeS50b2tlbi50YWdOYW1lLCBucywgZWxlbWVudEVudHJ5LnRva2VuLmF0dHJzKTtcblxuICAgIHAub3BlbkVsZW1lbnRzLnJlcGxhY2UoZWxlbWVudEVudHJ5LmVsZW1lbnQsIG5ld0VsZW1lbnQpO1xuICAgIGVsZW1lbnRFbnRyeS5lbGVtZW50ID0gbmV3RWxlbWVudDtcblxuICAgIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTQgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFJbnNlcnRMYXN0Tm9kZUluQ29tbW9uQW5jZXN0b3IocCwgY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KSB7XG4gICAgaWYgKHAuX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyhjb21tb25BbmNlc3RvcikpIHtcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoY29tbW9uQW5jZXN0b3IpO1xuICAgICAgICBjb25zdCBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGNvbW1vbkFuY2VzdG9yKTtcblxuICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRUZW1wbGF0ZUNvbnRlbnQoY29tbW9uQW5jZXN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgIH1cbn1cblxuLy9TdGVwcyAxNS0xOSBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgY29uc3QgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgIGNvbnN0IHRva2VuID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS50b2tlbjtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gcC50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5zLCB0b2tlbi5hdHRycyk7XG5cbiAgICBwLl9hZG9wdE5vZGVzKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xuICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG5cbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRFbGVtZW50QWZ0ZXJCb29rbWFyayhuZXdFbGVtZW50LCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LnRva2VuKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgIHAub3BlbkVsZW1lbnRzLmluc2VydEFmdGVyKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xufVxuXG4vL0FsZ29yaXRobSBlbnRyeSBwb2ludFxuZnVuY3Rpb24gY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKSB7XG4gICAgbGV0IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4sIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdXJ0aGVzdEJsb2NrID0gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb21tb25BbmNlc3RvciA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG5cbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGxhc3RFbGVtZW50KTtcbiAgICAgICAgYWFJbnNlcnRMYXN0Tm9kZUluQ29tbW9uQW5jZXN0b3IocCwgY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KTtcbiAgICAgICAgYWFSZXBsYWNlRm9ybWF0dGluZ0VsZW1lbnQocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxufVxuXG4vL0dlbmVyaWMgdG9rZW4gaGFuZGxlcnNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBpZ25vcmVUb2tlbigpIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuZnVuY3Rpb24gbWlzcGxhY2VkRG9jdHlwZShwKSB7XG4gICAgcC5fZXJyKEVSUi5taXNwbGFjZWREb2N0eXBlKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnRUb1Jvb3RIdG1sRWxlbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5pdGVtc1swXSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnRUb0RvY3VtZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAuZG9jdW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRDaGFyYWN0ZXJzKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHN0b3BQYXJzaW5nKHApIHtcbiAgICBwLnN0b3BwZWQgPSB0cnVlO1xufVxuXG4vLyBUaGUgXCJpbml0aWFsXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBkb2N0eXBlSW5Jbml0aWFsTW9kZShwLCB0b2tlbikge1xuICAgIHAuX3NldERvY3VtZW50VHlwZSh0b2tlbik7XG5cbiAgICBjb25zdCBtb2RlID0gdG9rZW4uZm9yY2VRdWlya3MgPyBIVE1MLkRPQ1VNRU5UX01PREUuUVVJUktTIDogZG9jdHlwZS5nZXREb2N1bWVudE1vZGUodG9rZW4pO1xuXG4gICAgaWYgKCFkb2N0eXBlLmlzQ29uZm9ybWluZyh0b2tlbikpIHtcbiAgICAgICAgcC5fZXJyKEVSUi5ub25Db25mb3JtaW5nRG9jdHlwZSk7XG4gICAgfVxuXG4gICAgcC50cmVlQWRhcHRlci5zZXREb2N1bWVudE1vZGUocC5kb2N1bWVudCwgbW9kZSk7XG5cbiAgICBwLmluc2VydGlvbk1vZGUgPSBCRUZPUkVfSFRNTF9NT0RFO1xufVxuXG5mdW5jdGlvbiB0b2tlbkluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlLCB7IGJlZm9yZVRva2VuOiB0cnVlIH0pO1xuICAgIHAudHJlZUFkYXB0ZXIuc2V0RG9jdW1lbnRNb2RlKHAuZG9jdW1lbnQsIEhUTUwuRE9DVU1FTlRfTU9ERS5RVUlSS1MpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8gVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0JlZm9yZUh0bWwocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5IRUFEIHx8IHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuQlIpIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEZha2VSb290RWxlbWVudCgpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8gVGhlIFwiYmVmb3JlIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaGVhZEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0JlZm9yZUhlYWQocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwLl9lcnIoRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KCQuSEVBRCk7XG4gICAgcC5oZWFkRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vIFRoZSBcImluIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSkge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkNEQVRBKTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIGlmIChwLm9wdGlvbnMuc2NyaXB0aW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0hFQURfTk9fU0NSSVBUX01PREU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLlNUWUxFKSB7XG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKSB7XG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgIHAuX2VycihFUlIubWlzcGxhY2VkU3RhcnRUYWdGb3JIZWFkRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuQlIgfHwgdG4gPT09ICQuSFRNTCkge1xuICAgICAgICB0b2tlbkluSGVhZChwLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1Rob3JvdWdobHkoKTtcblxuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgcC5fZXJyKEVSUi5jbG9zaW5nT2ZFbGVtZW50V2l0aE9wZW5DaGlsZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuVEVNUExBVEUpO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAuX2VycihFUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcC5fZXJyKEVSUi5lbmRUYWdXaXRob3V0TWF0Y2hpbmdPcGVuRWxlbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluSGVhZChwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG4vLyBUaGUgXCJpbiBoZWFkIG5vIHNjcmlwdFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkhlYWROb1NjcmlwdChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0biA9PT0gJC5CQVNFRk9OVCB8fFxuICAgICAgICB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgIHRuID09PSAkLkhFQUQgfHxcbiAgICAgICAgdG4gPT09ICQuTElOSyB8fFxuICAgICAgICB0biA9PT0gJC5NRVRBIHx8XG4gICAgICAgIHRuID09PSAkLk5PRlJBTUVTIHx8XG4gICAgICAgIHRuID09PSAkLlNUWUxFXG4gICAgKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHAuX2VycihFUlIubmVzdGVkTm9zY3JpcHRJbkhlYWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2VuSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuTk9TQ1JJUFQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0hFQURfTU9ERTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLkJSKSB7XG4gICAgICAgIHRva2VuSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHAuX2VycihFUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkhlYWROb1NjcmlwdChwLCB0b2tlbikge1xuICAgIGNvbnN0IGVyckNvZGUgPVxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU9GX1RPS0VOID8gRVJSLm9wZW5FbGVtZW50c0xlZnRBZnRlckVvZiA6IEVSUi5kaXNhbGxvd2VkQ29udGVudEluTm9zY3JpcHRJbkhlYWQ7XG5cbiAgICBwLl9lcnIoZXJyQ29kZSk7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vIFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuQk9EWSkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRuID09PSAkLkJBU0UgfHxcbiAgICAgICAgdG4gPT09ICQuQkFTRUZPTlQgfHxcbiAgICAgICAgdG4gPT09ICQuQkdTT1VORCB8fFxuICAgICAgICB0biA9PT0gJC5MSU5LIHx8XG4gICAgICAgIHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHxcbiAgICAgICAgdG4gPT09ICQuU0NSSVBUIHx8XG4gICAgICAgIHRuID09PSAkLlNUWUxFIHx8XG4gICAgICAgIHRuID09PSAkLlRFTVBMQVRFIHx8XG4gICAgICAgIHRuID09PSAkLlRJVExFXG4gICAgKSB7XG4gICAgICAgIHAuX2VycihFUlIuYWJhbmRvbmVkSGVhZEVsZW1lbnRDaGlsZCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnB1c2gocC5oZWFkRWxlbWVudCk7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKHAuaGVhZEVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuSEVBRCkge1xuICAgICAgICBwLl9lcnIoRVJSLm1pc3BsYWNlZFN0YXJ0VGFnRm9ySGVhZEVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0FmdGVySGVhZChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpIHtcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwLl9lcnIoRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoJC5CT0RZKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8gVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApIHtcbiAgICAgICAgcC50cmVlQWRhcHRlci5hZG9wdEF0dHJpYnV0ZXMocC5vcGVuRWxlbWVudHMuaXRlbXNbMF0sIHRva2VuLmF0dHJzKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcblxuICAgIGlmIChib2R5RWxlbWVudCAmJiBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApIHtcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKGJvZHlFbGVtZW50LCB0b2tlbi5hdHRycyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmcmFtZXNldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy50cnlQZWVrUHJvcGVybHlOZXN0ZWRCb2R5RWxlbWVudCgpO1xuXG4gICAgaWYgKHAuZnJhbWVzZXRPayAmJiBib2R5RWxlbWVudCkge1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUoYm9keUVsZW1lbnQpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BBbGxVcFRvSHRtbEVsZW1lbnQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0ZSQU1FU0VUX01PREU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMDtcblxuICAgIGlmICghcC5mb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxpc3RJdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGZvciAobGV0IGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuICAgICAgICBjb25zdCBlbGVtZW50VG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgIGxldCBjbG9zZVRuID0gbnVsbDtcblxuICAgICAgICBpZiAodG4gPT09ICQuTEkgJiYgZWxlbWVudFRuID09PSAkLkxJKSB7XG4gICAgICAgICAgICBjbG9zZVRuID0gJC5MSTtcbiAgICAgICAgfSBlbHNlIGlmICgodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpICYmIChlbGVtZW50VG4gPT09ICQuREQgfHwgZWxlbWVudFRuID09PSAkLkRUKSkge1xuICAgICAgICAgICAgY2xvc2VUbiA9IGVsZW1lbnRUbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9zZVRuKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihjbG9zZVRuKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChjbG9zZVRuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnRUbiAhPT0gJC5BRERSRVNTICYmIGVsZW1lbnRUbiAhPT0gJC5ESVYgJiYgZWxlbWVudFRuICE9PSAkLlAgJiYgcC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcGxhaW50ZXh0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbn1cblxuZnVuY3Rpb24gYnV0dG9uU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJVVFRPTikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5CVVRUT04pO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuTk9CUikpIHtcbiAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChcbiAgICAgICAgcC50cmVlQWRhcHRlci5nZXREb2N1bWVudE1vZGUocC5kb2N1bWVudCkgIT09IEhUTUwuRE9DVU1FTlRfTU9ERS5RVUlSS1MgJiZcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApXG4gICAgKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xufVxuXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaW5wdXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcblxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSkge1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhcmFtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHRva2VuLnRhZ05hbWUgPSAkLklNRztcbiAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiB0ZXh0YXJlYSBlbGVtZW50cyBhcmUgaWdub3JlZCBhcyBhbiBhdXRob3JpbmcgY29udmVuaWVuY2UuKVxuICAgIHAuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcbiAgICBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHAuaW5zZXJ0aW9uTW9kZTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBURVhUX01PREU7XG59XG5cbmZ1bmN0aW9uIHhtcFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXIuTU9ERS5SQVdURVhUKTtcbn1cblxuZnVuY3Rpb24gaWZyYW1lU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXIuTU9ERS5SQVdURVhUKTtcbn1cblxuLy9OT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHdlIGFsd2F5cyBhY3QgYXMgYW4gdXNlciBhZ2VudCB3aXRoIGVuYWJsZWQgcGx1Z2lucywgc28gd2UgcGFyc2Vcbi8vPG5vZW1iZWQ+IGFzIGEgcmF3dGV4dC5cbmZ1bmN0aW9uIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fVEFCTEVfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NBUFRJT05fTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX0JPRFlfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX1JPV19NT0RFIHx8XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fQ0VMTF9NT0RFXG4gICAgKSB7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9JTl9UQUJMRV9NT0RFO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gb3B0Z3JvdXBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcmJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgIH1cblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBydFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5SVUJZKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlJUQyk7XG4gICAgfVxuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1lbnVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBtYXRoU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuXG4gICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbik7XG4gICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XG5cbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5NQVRITUwpO1xuICAgIH1cblxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc3ZnU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuXG4gICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XG5cbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIH1cblxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5VKSB7XG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuUCkge1xuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkEpIHtcbiAgICAgICAgICAgICAgICBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuREwgfHwgdG4gPT09ICQuT0wgfHwgdG4gPT09ICQuVUwpIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INikge1xuICAgICAgICAgICAgICAgIG51bWJlcmVkSGVhZGVyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5MSSB8fCB0biA9PT0gJC5ERCB8fCB0biA9PT0gJC5EVCkge1xuICAgICAgICAgICAgICAgIGxpc3RJdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5FTSB8fCB0biA9PT0gJC5UVCkge1xuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkJSKSB7XG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuSFIpIHtcbiAgICAgICAgICAgICAgICBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuUkIpIHtcbiAgICAgICAgICAgICAgICByYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuUlQgfHwgdG4gPT09ICQuUlApIHtcbiAgICAgICAgICAgICAgICBydFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRElWIHx8IHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5OQVYpIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5QUkUpIHtcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkJJRykge1xuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLklNRyB8fCB0biA9PT0gJC5XQlIpIHtcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5YTVApIHtcbiAgICAgICAgICAgICAgICB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlNWRykge1xuICAgICAgICAgICAgICAgIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuUlRDKSB7XG4gICAgICAgICAgICAgICAgcmJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuICE9PSAkLkNPTCkge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgaHRtbFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEpIHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkJPRFkpIHtcbiAgICAgICAgICAgICAgICBib2R5U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5GT1JNKSB7XG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKSB7XG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuTk9CUikge1xuICAgICAgICAgICAgICAgIG5vYnJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkFSRUEpIHtcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5NQVRIKSB7XG4gICAgICAgICAgICAgICAgbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuTUVOVSkge1xuICAgICAgICAgICAgICAgIG1lbnVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkFTSURFKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuU01BTEwpIHtcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICAgICAgICAgIHRhYmxlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5FTUJFRCkge1xuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLklOUFVUKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlBBUkFNIHx8IHRuID09PSAkLlRSQUNLKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLklNQUdFKSB7XG4gICAgICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNDUklQVCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdG4gPT09ICQuQ0VOVEVSIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuRklHVVJFIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuRk9PVEVSIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuSEVBREVSIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuSEdST1VQIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuRElBTE9HXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5CVVRUT04pIHtcbiAgICAgICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpIHtcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSB7XG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5LRVlHRU4pIHtcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpIHtcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuSUZSQU1FKSB7XG4gICAgICAgICAgICAgICAgaWZyYW1lU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkdTT1VORCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdG4gPT09ICQuREVUQUlMUyB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLkFERFJFU1MgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5BUlRJQ0xFIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuU0VDVElPTiB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLlNVTU1BUllcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkxJU1RJTkcpIHtcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpIHtcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpIHtcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biAhPT0gJC5DQVBUSU9OKSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJBU0VGT05UKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5GUkFNRVNFVCkge1xuICAgICAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVCkge1xuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRFWFRBUkVBKSB7XG4gICAgICAgICAgICAgICAgdGV4dGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICAgICAgICAgIGlmIChwLm9wdGlvbnMuc2NyaXB0aW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biAhPT0gJC5DT0xHUk9VUCkge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5QTEFJTlRFWFQpIHtcbiAgICAgICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkxPQ0tRVU9URSB8fCB0biA9PT0gJC5GSUdDQVBUSU9OKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKSB7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0JPRFlfTU9ERTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKSB7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0JPRFlfTU9ERTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwKSB7XG4gICAgY29uc3QgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG4gICAgY29uc3QgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xuXG4gICAgaWYgKCFpblRlbXBsYXRlKSB7XG4gICAgICAgIHAuZm9ybUVsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuRk9STSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAoIXAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9pbnNlcnRGYWtlRWxlbWVudCgkLlApO1xuICAgIH1cblxuICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbn1cblxuZnVuY3Rpb24gbGlFbmRUYWdJbkJvZHkocCkge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkxpc3RJdGVtU2NvcGUoJC5MSSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oJC5MSSk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkxJKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRkRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRuKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYnJFbmRUYWdJbkJvZHkocCkge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoJC5CUik7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBmb3IgKGxldCBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09IHRuKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0bik7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQSB8fCB0biA9PT0gJC5CIHx8IHRuID09PSAkLkkgfHwgdG4gPT09ICQuUyB8fCB0biA9PT0gJC5VKSB7XG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuUCkge1xuICAgICAgICAgICAgICAgIHBFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRMIHx8IHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkxJKSB7XG4gICAgICAgICAgICAgICAgbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5ERCB8fCB0biA9PT0gJC5EVCkge1xuICAgICAgICAgICAgICAgIGRkRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkJSKSB7XG4gICAgICAgICAgICAgICAgYnJFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5FTSB8fCB0biA9PT0gJC5UVCkge1xuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKSB7XG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuRElSIHx8IHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5OQVYgfHwgdG4gPT09ICQuUFJFKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQk9EWSkge1xuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLkZPUk0pIHtcbiAgICAgICAgICAgICAgICBmb3JtRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UIHx8IHRuID09PSAkLk5PQlIpIHtcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BU0lERSkge1xuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5TTUFMTCkge1xuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdG4gPT09ICQuQ0VOVEVSIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuRklHVVJFIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuRk9PVEVSIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuSEVBREVSIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuSEdST1VQIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuRElBTE9HXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVCkge1xuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpIHtcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRuID09PSAkLkFERFJFU1MgfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5BUlRJQ0xFIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuREVUQUlMUyB8fFxuICAgICAgICAgICAgICAgIHRuID09PSAkLlNFQ1RJT04gfHxcbiAgICAgICAgICAgICAgICB0biA9PT0gJC5TVU1NQVJZIHx8XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuTElTVElOR1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpIHtcbiAgICAgICAgICAgICAgICBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkZJRUxEU0VUKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkxPQ0tRVU9URSB8fCB0biA9PT0gJC5GSUdDQVBUSU9OKSB7XG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlb2ZJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wID4gLTEpIHtcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcC5zdG9wcGVkID0gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIFRoZSBcInRleHRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGVuZFRhZ0luVGV4dChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVCkge1xuICAgICAgICBwLnBlbmRpbmdTY3JpcHQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cblxuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xufVxuXG5mdW5jdGlvbiBlb2ZJblRleHQocCwgdG9rZW4pIHtcbiAgICBwLl9lcnIoRVJSLmVvZkluRWxlbWVudFRoYXRDYW5Db250YWluT25seVRleHQpO1xuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vIFRoZSBcImluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjaGFyYWN0ZXJJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3QgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmIChjdXJUbiA9PT0gJC5UQUJMRSB8fCBjdXJUbiA9PT0gJC5UQk9EWSB8fCBjdXJUbiA9PT0gJC5URk9PVCB8fCBjdXJUbiA9PT0gJC5USEVBRCB8fCBjdXJUbiA9PT0gJC5UUikge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0NBUFRJT05fTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sZ3JvdXBTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xufVxuXG5mdW5jdGlvbiBjb2xTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KCQuQ09MR1JPVVApO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRib2R5U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9CT0RZX01PREU7XG59XG5cbmZ1bmN0aW9uIHRkU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRGYWtlRWxlbWVudCgkLlRCT0RZKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEFCTEUpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGNvbnN0IGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DT0wpIHtcbiAgICAgICAgICAgICAgICBjb2xTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRk9STSkge1xuICAgICAgICAgICAgICAgIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRuID09PSAkLlNUWUxFKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICAgICAgICAgIHRib2R5U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuSU5QVVQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpIHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKSB7XG4gICAgICAgICAgICAgICAgY2FwdGlvblN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DT0xHUk9VUCkge1xuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEFCTEUpKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5UQUJMRSk7XG4gICAgICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0biAhPT0gJC5CT0RZICYmXG4gICAgICAgIHRuICE9PSAkLkNBUFRJT04gJiZcbiAgICAgICAgdG4gIT09ICQuQ09MICYmXG4gICAgICAgIHRuICE9PSAkLkNPTEdST1VQICYmXG4gICAgICAgIHRuICE9PSAkLkhUTUwgJiZcbiAgICAgICAgdG4gIT09ICQuVEJPRFkgJiZcbiAgICAgICAgdG4gIT09ICQuVEQgJiZcbiAgICAgICAgdG4gIT09ICQuVEZPT1QgJiZcbiAgICAgICAgdG4gIT09ICQuVEggJiZcbiAgICAgICAgdG4gIT09ICQuVEhFQUQgJiZcbiAgICAgICAgdG4gIT09ICQuVFJcbiAgICApIHtcbiAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGNvbnN0IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XG5cbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG5cbi8vIFRoZSBcImluIHRhYmxlIHRleHRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbikge1xuICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5wdXNoKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlVGV4dChwLCB0b2tlbikge1xuICAgIGxldCBpID0gMDtcblxuICAgIGlmIChwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4pIHtcbiAgICAgICAgZm9yICg7IGkgPCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHAuX2luc2VydENoYXJhY3RlcnMocC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zW2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vIFRoZSBcImluIGNhcHRpb25cIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKFxuICAgICAgICB0biA9PT0gJC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSAkLkNPTCB8fFxuICAgICAgICB0biA9PT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICB0biA9PT0gJC5UQk9EWSB8fFxuICAgICAgICB0biA9PT0gJC5URCB8fFxuICAgICAgICB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fFxuICAgICAgICB0biA9PT0gJC5UUlxuICAgICkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLkNBUFRJT04pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5DQVBUSU9OKTtcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICAgdG4gIT09ICQuQk9EWSAmJlxuICAgICAgICB0biAhPT0gJC5DT0wgJiZcbiAgICAgICAgdG4gIT09ICQuQ09MR1JPVVAgJiZcbiAgICAgICAgdG4gIT09ICQuSFRNTCAmJlxuICAgICAgICB0biAhPT0gJC5UQk9EWSAmJlxuICAgICAgICB0biAhPT0gJC5URCAmJlxuICAgICAgICB0biAhPT0gJC5URk9PVCAmJlxuICAgICAgICB0biAhPT0gJC5USCAmJlxuICAgICAgICB0biAhPT0gJC5USEVBRCAmJlxuICAgICAgICB0biAhPT0gJC5UUlxuICAgICkge1xuICAgICAgICBlbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiaW4gY29sdW1uIGdyb3VwXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ29sdW1uR3JvdXAocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTCkge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5DT0wpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5DT0xHUk9VUCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuQ09MR1JPVVApIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHRuICE9PSAkLkNPTCkge1xuICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiaW4gdGFibGUgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UUikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1JPV19NT0RFO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEZha2VFbGVtZW50KCQuVFIpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9ST1dfTU9ERTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0biA9PT0gJC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSAkLkNPTCB8fFxuICAgICAgICB0biA9PT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICB0biA9PT0gJC5UQk9EWSB8fFxuICAgICAgICB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRFxuICAgICkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCkgfHxcbiAgICAgICAgKHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVFIpXG4gICAgKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiaW4gcm93XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luUm93KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRuID09PSAkLkNBUFRJT04gfHxcbiAgICAgICAgdG4gPT09ICQuQ09MIHx8XG4gICAgICAgIHRuID09PSAkLkNPTEdST1VQIHx8XG4gICAgICAgIHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8XG4gICAgICAgIHRuID09PSAkLlRSXG4gICAgKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVFIpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVFIpKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9CT0RZX01PREU7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCkgfHxcbiAgICAgICAgKHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEgpXG4gICAgKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiaW4gY2VsbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAoXG4gICAgICAgIHRuID09PSAkLkNBUFRJT04gfHxcbiAgICAgICAgdG4gPT09ICQuQ09MIHx8XG4gICAgICAgIHRuID09PSAkLkNPTEdST1VQIHx8XG4gICAgICAgIHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8XG4gICAgICAgIHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8XG4gICAgICAgIHRuID09PSAkLlRSXG4gICAgKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5URCkgfHwgcC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEgpKSB7XG4gICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9ST1dfTU9ERTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpIHtcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbi8vIFRoZSBcImluIHNlbGVjdFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTikge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5JTlBVVCB8fCB0biA9PT0gJC5LRVlHRU4gfHwgdG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuU0VMRUNUKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuU0VMRUNUKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuXG4gICAgICAgICAgICBpZiAodG4gIT09ICQuU0VMRUNUKSB7XG4gICAgICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgIGNvbnN0IHByZXZPcGVuRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV07XG4gICAgICAgIGNvbnN0IHByZXZPcGVuRWxlbWVudFRuID0gcHJldk9wZW5FbGVtZW50ICYmIHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwcmV2T3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04gJiYgcHJldk9wZW5FbGVtZW50VG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG4gPT09ICQuT1BUSU9OKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5TRUxFQ1QgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZSgkLlNFTEVDVCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuU0VMRUNUKTtcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4xNyBUaGUgXCJpbiBzZWxlY3QgaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5TZWxlY3RJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKFxuICAgICAgICB0biA9PT0gJC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSAkLlRBQkxFIHx8XG4gICAgICAgIHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8XG4gICAgICAgIHRuID09PSAkLlRSIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8XG4gICAgICAgIHRuID09PSAkLlRIXG4gICAgKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VGFnSW5TZWxlY3QocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5TZWxlY3RJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKFxuICAgICAgICB0biA9PT0gJC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSAkLlRBQkxFIHx8XG4gICAgICAgIHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8XG4gICAgICAgIHRuID09PSAkLlRSIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8XG4gICAgICAgIHRuID09PSAkLlRIXG4gICAgKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiaW4gdGVtcGxhdGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmIChcbiAgICAgICAgdG4gPT09ICQuQkFTRSB8fFxuICAgICAgICB0biA9PT0gJC5CQVNFRk9OVCB8fFxuICAgICAgICB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgIHRuID09PSAkLkxJTksgfHxcbiAgICAgICAgdG4gPT09ICQuTUVUQSB8fFxuICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fFxuICAgICAgICB0biA9PT0gJC5TQ1JJUFQgfHxcbiAgICAgICAgdG4gPT09ICQuU1RZTEUgfHxcbiAgICAgICAgdG4gPT09ICQuVEVNUExBVEUgfHxcbiAgICAgICAgdG4gPT09ICQuVElUTEVcbiAgICApIHtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XG5cbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuVEVNUExBVEUpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwLnN0b3BwZWQgPSB0cnVlO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0JPRFlfTU9ERTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vIFRoZSBcImluIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTCkge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5GUkFNRVNFVCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9IGVsc2UgaWYgKHRuID09PSAkLkZSQU1FKSB7XG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUykge1xuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuRlJBTUVTRVQgJiYgIXAub3BlbkVsZW1lbnRzLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCgpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQgJiYgcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgIT09ICQuRlJBTUVTRVQpIHtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0ZSQU1FU0VUX01PREU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFRoZSBcImFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTCkge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUykge1xuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cbn1cblxuLy8gVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG4vLyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTCkge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUykge1xuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgfVxufVxuXG4vLyBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSB1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoZm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAhcC5faXNJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTCkge1xuICAgICAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5zID09PSBOUy5TVkcpIHtcbiAgICAgICAgICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHVGFnTmFtZSh0b2tlbik7XG4gICAgICAgICAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR0F0dHJzKHRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZykge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgY3VycmVudE5zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCkgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkudG9Mb3dlckNhc2UoKSA9PT0gdG9rZW4udGFnTmFtZSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZS1hZGFwdGVycy9kZWZhdWx0Jyk7XG5jb25zdCBtZXJnZU9wdGlvbnMgPSByZXF1aXJlKCcuLi91dGlscy9tZXJnZS1vcHRpb25zJyk7XG5jb25zdCBkb2N0eXBlID0gcmVxdWlyZSgnLi4vY29tbW9uL2RvY3R5cGUnKTtcbmNvbnN0IEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xuXG4vL0FsaWFzZXNcbmNvbnN0ICQgPSBIVE1MLlRBR19OQU1FUztcbmNvbnN0IE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG4vL0RlZmF1bHQgc2VyaWFsaXplciBvcHRpb25zXG5jb25zdCBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgdHJlZUFkYXB0ZXI6IGRlZmF1bHRUcmVlQWRhcHRlclxufTtcblxuLy9Fc2NhcGluZyByZWdleGVzXG5jb25zdCBBTVBfUkVHRVggPSAvJi9nO1xuY29uc3QgTkJTUF9SRUdFWCA9IC9cXHUwMGEwL2c7XG5jb25zdCBET1VCTEVfUVVPVEVfUkVHRVggPSAvXCIvZztcbmNvbnN0IExUX1JFR0VYID0gLzwvZztcbmNvbnN0IEdUX1JFR0VYID0gLz4vZztcblxuLy9TZXJpYWxpemVyXG5jbGFzcyBTZXJpYWxpemVyIHtcbiAgICBjb25zdHJ1Y3Rvcihub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdGhpcy5vcHRpb25zLnRyZWVBZGFwdGVyO1xuXG4gICAgICAgIHRoaXMuaHRtbCA9ICcnO1xuICAgICAgICB0aGlzLnN0YXJ0Tm9kZSA9IG5vZGU7XG4gICAgfVxuXG4gICAgLy9BUElcbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNoaWxkTm9kZXModGhpcy5zdGFydE5vZGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0bWw7XG4gICAgfVxuXG4gICAgLy9JbnRlcm5hbHNcbiAgICBfc2VyaWFsaXplQ2hpbGROb2RlcyhwYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50Tm9kZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjbkxlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgY25MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gY2hpbGROb2Rlc1tpXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUVsZW1lbnQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc1RleHROb2RlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVUZXh0Tm9kZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzQ29tbWVudE5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNvbW1lbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2VyaWFsaXplRWxlbWVudChub2RlKSB7XG4gICAgICAgIGNvbnN0IHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5vZGUpO1xuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKG5vZGUpO1xuXG4gICAgICAgIHRoaXMuaHRtbCArPSAnPCcgKyB0bjtcbiAgICAgICAgdGhpcy5fc2VyaWFsaXplQXR0cmlidXRlcyhub2RlKTtcbiAgICAgICAgdGhpcy5odG1sICs9ICc+JztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0biAhPT0gJC5BUkVBICYmXG4gICAgICAgICAgICB0biAhPT0gJC5CQVNFICYmXG4gICAgICAgICAgICB0biAhPT0gJC5CQVNFRk9OVCAmJlxuICAgICAgICAgICAgdG4gIT09ICQuQkdTT1VORCAmJlxuICAgICAgICAgICAgdG4gIT09ICQuQlIgJiZcbiAgICAgICAgICAgIHRuICE9PSAkLkNPTCAmJlxuICAgICAgICAgICAgdG4gIT09ICQuRU1CRUQgJiZcbiAgICAgICAgICAgIHRuICE9PSAkLkZSQU1FICYmXG4gICAgICAgICAgICB0biAhPT0gJC5IUiAmJlxuICAgICAgICAgICAgdG4gIT09ICQuSU1HICYmXG4gICAgICAgICAgICB0biAhPT0gJC5JTlBVVCAmJlxuICAgICAgICAgICAgdG4gIT09ICQuS0VZR0VOICYmXG4gICAgICAgICAgICB0biAhPT0gJC5MSU5LICYmXG4gICAgICAgICAgICB0biAhPT0gJC5NRVRBICYmXG4gICAgICAgICAgICB0biAhPT0gJC5QQVJBTSAmJlxuICAgICAgICAgICAgdG4gIT09ICQuU09VUkNFICYmXG4gICAgICAgICAgICB0biAhPT0gJC5UUkFDSyAmJlxuICAgICAgICAgICAgdG4gIT09ICQuV0JSXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2Rlc0hvbGRlciA9XG4gICAgICAgICAgICAgICAgdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwgPyB0aGlzLnRyZWVBZGFwdGVyLmdldFRlbXBsYXRlQ29udGVudChub2RlKSA6IG5vZGU7XG5cbiAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNoaWxkTm9kZXMoY2hpbGROb2Rlc0hvbGRlcik7XG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJzwvJyArIHRuICsgJz4nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSkge1xuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3Qobm9kZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGF0dHJzTGVuZ3RoID0gYXR0cnMubGVuZ3RoOyBpIDwgYXR0cnNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0ciA9IGF0dHJzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBTZXJpYWxpemVyLmVzY2FwZVN0cmluZyhhdHRyLnZhbHVlLCB0cnVlKTtcblxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICcgJztcblxuICAgICAgICAgICAgaWYgKCFhdHRyLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbDonICsgYXR0ci5uYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWE1MTlMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAneG1sbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSAneG1sbnM6JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWExJTkspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3hsaW5rOicgKyBhdHRyLm5hbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLnByZWZpeCArICc6JyArIGF0dHIubmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICc9XCInICsgdmFsdWUgKyAnXCInO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NlcmlhbGl6ZVRleHROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KG5vZGUpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgIGxldCBwYXJlbnRUbiA9IHZvaWQgMDtcblxuICAgICAgICBpZiAocGFyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnQpKSB7XG4gICAgICAgICAgICBwYXJlbnRUbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50VG4gPT09ICQuU1RZTEUgfHxcbiAgICAgICAgICAgIHBhcmVudFRuID09PSAkLlNDUklQVCB8fFxuICAgICAgICAgICAgcGFyZW50VG4gPT09ICQuWE1QIHx8XG4gICAgICAgICAgICBwYXJlbnRUbiA9PT0gJC5JRlJBTUUgfHxcbiAgICAgICAgICAgIHBhcmVudFRuID09PSAkLk5PRU1CRUQgfHxcbiAgICAgICAgICAgIHBhcmVudFRuID09PSAkLk5PRlJBTUVTIHx8XG4gICAgICAgICAgICBwYXJlbnRUbiA9PT0gJC5QTEFJTlRFWFQgfHxcbiAgICAgICAgICAgIHBhcmVudFRuID09PSAkLk5PU0NSSVBUXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5odG1sICs9IGNvbnRlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gU2VyaWFsaXplci5lc2NhcGVTdHJpbmcoY29udGVudCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NlcmlhbGl6ZUNvbW1lbnROb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5odG1sICs9ICc8IS0tJyArIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q29tbWVudE5vZGVDb250ZW50KG5vZGUpICsgJy0tPic7XG4gICAgfVxuXG4gICAgX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy50cmVlQWRhcHRlci5nZXREb2N1bWVudFR5cGVOb2RlTmFtZShub2RlKTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJzwnICsgZG9jdHlwZS5zZXJpYWxpemVDb250ZW50KG5hbWUsIG51bGwsIG51bGwpICsgJz4nO1xuICAgIH1cbn1cblxuLy8gTk9URTogdXNlZCBpbiB0ZXN0cyBhbmQgYnkgcmV3cml0aW5nIHN0cmVhbVxuU2VyaWFsaXplci5lc2NhcGVTdHJpbmcgPSBmdW5jdGlvbihzdHIsIGF0dHJNb2RlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoQU1QX1JFR0VYLCAnJmFtcDsnKS5yZXBsYWNlKE5CU1BfUkVHRVgsICcmbmJzcDsnKTtcblxuICAgIGlmIChhdHRyTW9kZSkge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShET1VCTEVfUVVPVEVfUkVHRVgsICcmcXVvdDsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShMVF9SRUdFWCwgJyZsdDsnKS5yZXBsYWNlKEdUX1JFR0VYLCAnJmd0OycpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcmlhbGl6ZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUGFyc2VyID0gcmVxdWlyZSgnLi9wYXJzZXInKTtcbmNvbnN0IFNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL3NlcmlhbGl6ZXInKTtcblxuLy8gU2hvcnRoYW5kc1xuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGh0bWwsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZShodG1sKTtcbn07XG5cbmV4cG9ydHMucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoZnJhZ21lbnRDb250ZXh0LCBodG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBmcmFnbWVudENvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdGlvbnMgPSBodG1sO1xuICAgICAgICBodG1sID0gZnJhZ21lbnRDb250ZXh0O1xuICAgICAgICBmcmFnbWVudENvbnRleHQgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlRnJhZ21lbnQoaHRtbCwgZnJhZ21lbnRDb250ZXh0KTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplcihub2RlLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZSgpO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBOUyA9IChleHBvcnRzLk5BTUVTUEFDRVMgPSB7XG4gICAgSFRNTDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLFxuICAgIE1BVEhNTDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnLFxuICAgIFNWRzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcbiAgICBYTElOSzogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLFxuICAgIFhNTDogJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsXG4gICAgWE1MTlM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcbn0pO1xuXG5leHBvcnRzLkFUVFJTID0ge1xuICAgIFRZUEU6ICd0eXBlJyxcbiAgICBBQ1RJT046ICdhY3Rpb24nLFxuICAgIEVOQ09ESU5HOiAnZW5jb2RpbmcnLFxuICAgIFBST01QVDogJ3Byb21wdCcsXG4gICAgTkFNRTogJ25hbWUnLFxuICAgIENPTE9SOiAnY29sb3InLFxuICAgIEZBQ0U6ICdmYWNlJyxcbiAgICBTSVpFOiAnc2l6ZSdcbn07XG5cbmV4cG9ydHMuRE9DVU1FTlRfTU9ERSA9IHtcbiAgICBOT19RVUlSS1M6ICduby1xdWlya3MnLFxuICAgIFFVSVJLUzogJ3F1aXJrcycsXG4gICAgTElNSVRFRF9RVUlSS1M6ICdsaW1pdGVkLXF1aXJrcydcbn07XG5cbmNvbnN0ICQgPSAoZXhwb3J0cy5UQUdfTkFNRVMgPSB7XG4gICAgQTogJ2EnLFxuICAgIEFERFJFU1M6ICdhZGRyZXNzJyxcbiAgICBBTk5PVEFUSU9OX1hNTDogJ2Fubm90YXRpb24teG1sJyxcbiAgICBBUFBMRVQ6ICdhcHBsZXQnLFxuICAgIEFSRUE6ICdhcmVhJyxcbiAgICBBUlRJQ0xFOiAnYXJ0aWNsZScsXG4gICAgQVNJREU6ICdhc2lkZScsXG5cbiAgICBCOiAnYicsXG4gICAgQkFTRTogJ2Jhc2UnLFxuICAgIEJBU0VGT05UOiAnYmFzZWZvbnQnLFxuICAgIEJHU09VTkQ6ICdiZ3NvdW5kJyxcbiAgICBCSUc6ICdiaWcnLFxuICAgIEJMT0NLUVVPVEU6ICdibG9ja3F1b3RlJyxcbiAgICBCT0RZOiAnYm9keScsXG4gICAgQlI6ICdicicsXG4gICAgQlVUVE9OOiAnYnV0dG9uJyxcblxuICAgIENBUFRJT046ICdjYXB0aW9uJyxcbiAgICBDRU5URVI6ICdjZW50ZXInLFxuICAgIENPREU6ICdjb2RlJyxcbiAgICBDT0w6ICdjb2wnLFxuICAgIENPTEdST1VQOiAnY29sZ3JvdXAnLFxuXG4gICAgREQ6ICdkZCcsXG4gICAgREVTQzogJ2Rlc2MnLFxuICAgIERFVEFJTFM6ICdkZXRhaWxzJyxcbiAgICBESUFMT0c6ICdkaWFsb2cnLFxuICAgIERJUjogJ2RpcicsXG4gICAgRElWOiAnZGl2JyxcbiAgICBETDogJ2RsJyxcbiAgICBEVDogJ2R0JyxcblxuICAgIEVNOiAnZW0nLFxuICAgIEVNQkVEOiAnZW1iZWQnLFxuXG4gICAgRklFTERTRVQ6ICdmaWVsZHNldCcsXG4gICAgRklHQ0FQVElPTjogJ2ZpZ2NhcHRpb24nLFxuICAgIEZJR1VSRTogJ2ZpZ3VyZScsXG4gICAgRk9OVDogJ2ZvbnQnLFxuICAgIEZPT1RFUjogJ2Zvb3RlcicsXG4gICAgRk9SRUlHTl9PQkpFQ1Q6ICdmb3JlaWduT2JqZWN0JyxcbiAgICBGT1JNOiAnZm9ybScsXG4gICAgRlJBTUU6ICdmcmFtZScsXG4gICAgRlJBTUVTRVQ6ICdmcmFtZXNldCcsXG5cbiAgICBIMTogJ2gxJyxcbiAgICBIMjogJ2gyJyxcbiAgICBIMzogJ2gzJyxcbiAgICBINDogJ2g0JyxcbiAgICBINTogJ2g1JyxcbiAgICBINjogJ2g2JyxcbiAgICBIRUFEOiAnaGVhZCcsXG4gICAgSEVBREVSOiAnaGVhZGVyJyxcbiAgICBIR1JPVVA6ICdoZ3JvdXAnLFxuICAgIEhSOiAnaHInLFxuICAgIEhUTUw6ICdodG1sJyxcblxuICAgIEk6ICdpJyxcbiAgICBJTUc6ICdpbWcnLFxuICAgIElNQUdFOiAnaW1hZ2UnLFxuICAgIElOUFVUOiAnaW5wdXQnLFxuICAgIElGUkFNRTogJ2lmcmFtZScsXG5cbiAgICBLRVlHRU46ICdrZXlnZW4nLFxuXG4gICAgTEFCRUw6ICdsYWJlbCcsXG4gICAgTEk6ICdsaScsXG4gICAgTElOSzogJ2xpbmsnLFxuICAgIExJU1RJTkc6ICdsaXN0aW5nJyxcblxuICAgIE1BSU46ICdtYWluJyxcbiAgICBNQUxJR05NQVJLOiAnbWFsaWdubWFyaycsXG4gICAgTUFSUVVFRTogJ21hcnF1ZWUnLFxuICAgIE1BVEg6ICdtYXRoJyxcbiAgICBNRU5VOiAnbWVudScsXG4gICAgTUVUQTogJ21ldGEnLFxuICAgIE1HTFlQSDogJ21nbHlwaCcsXG4gICAgTUk6ICdtaScsXG4gICAgTU86ICdtbycsXG4gICAgTU46ICdtbicsXG4gICAgTVM6ICdtcycsXG4gICAgTVRFWFQ6ICdtdGV4dCcsXG5cbiAgICBOQVY6ICduYXYnLFxuICAgIE5PQlI6ICdub2JyJyxcbiAgICBOT0ZSQU1FUzogJ25vZnJhbWVzJyxcbiAgICBOT0VNQkVEOiAnbm9lbWJlZCcsXG4gICAgTk9TQ1JJUFQ6ICdub3NjcmlwdCcsXG5cbiAgICBPQkpFQ1Q6ICdvYmplY3QnLFxuICAgIE9MOiAnb2wnLFxuICAgIE9QVEdST1VQOiAnb3B0Z3JvdXAnLFxuICAgIE9QVElPTjogJ29wdGlvbicsXG5cbiAgICBQOiAncCcsXG4gICAgUEFSQU06ICdwYXJhbScsXG4gICAgUExBSU5URVhUOiAncGxhaW50ZXh0JyxcbiAgICBQUkU6ICdwcmUnLFxuXG4gICAgUkI6ICdyYicsXG4gICAgUlA6ICdycCcsXG4gICAgUlQ6ICdydCcsXG4gICAgUlRDOiAncnRjJyxcbiAgICBSVUJZOiAncnVieScsXG5cbiAgICBTOiAncycsXG4gICAgU0NSSVBUOiAnc2NyaXB0JyxcbiAgICBTRUNUSU9OOiAnc2VjdGlvbicsXG4gICAgU0VMRUNUOiAnc2VsZWN0JyxcbiAgICBTT1VSQ0U6ICdzb3VyY2UnLFxuICAgIFNNQUxMOiAnc21hbGwnLFxuICAgIFNQQU46ICdzcGFuJyxcbiAgICBTVFJJS0U6ICdzdHJpa2UnLFxuICAgIFNUUk9ORzogJ3N0cm9uZycsXG4gICAgU1RZTEU6ICdzdHlsZScsXG4gICAgU1VCOiAnc3ViJyxcbiAgICBTVU1NQVJZOiAnc3VtbWFyeScsXG4gICAgU1VQOiAnc3VwJyxcblxuICAgIFRBQkxFOiAndGFibGUnLFxuICAgIFRCT0RZOiAndGJvZHknLFxuICAgIFRFTVBMQVRFOiAndGVtcGxhdGUnLFxuICAgIFRFWFRBUkVBOiAndGV4dGFyZWEnLFxuICAgIFRGT09UOiAndGZvb3QnLFxuICAgIFREOiAndGQnLFxuICAgIFRIOiAndGgnLFxuICAgIFRIRUFEOiAndGhlYWQnLFxuICAgIFRJVExFOiAndGl0bGUnLFxuICAgIFRSOiAndHInLFxuICAgIFRSQUNLOiAndHJhY2snLFxuICAgIFRUOiAndHQnLFxuXG4gICAgVTogJ3UnLFxuICAgIFVMOiAndWwnLFxuXG4gICAgU1ZHOiAnc3ZnJyxcblxuICAgIFZBUjogJ3ZhcicsXG5cbiAgICBXQlI6ICd3YnInLFxuXG4gICAgWE1QOiAneG1wJ1xufSk7XG5cbmV4cG9ydHMuU1BFQ0lBTF9FTEVNRU5UUyA9IHtcbiAgICBbTlMuSFRNTF06IHtcbiAgICAgICAgWyQuQUREUkVTU106IHRydWUsXG4gICAgICAgIFskLkFQUExFVF06IHRydWUsXG4gICAgICAgIFskLkFSRUFdOiB0cnVlLFxuICAgICAgICBbJC5BUlRJQ0xFXTogdHJ1ZSxcbiAgICAgICAgWyQuQVNJREVdOiB0cnVlLFxuICAgICAgICBbJC5CQVNFXTogdHJ1ZSxcbiAgICAgICAgWyQuQkFTRUZPTlRdOiB0cnVlLFxuICAgICAgICBbJC5CR1NPVU5EXTogdHJ1ZSxcbiAgICAgICAgWyQuQkxPQ0tRVU9URV06IHRydWUsXG4gICAgICAgIFskLkJPRFldOiB0cnVlLFxuICAgICAgICBbJC5CUl06IHRydWUsXG4gICAgICAgIFskLkJVVFRPTl06IHRydWUsXG4gICAgICAgIFskLkNBUFRJT05dOiB0cnVlLFxuICAgICAgICBbJC5DRU5URVJdOiB0cnVlLFxuICAgICAgICBbJC5DT0xdOiB0cnVlLFxuICAgICAgICBbJC5DT0xHUk9VUF06IHRydWUsXG4gICAgICAgIFskLkREXTogdHJ1ZSxcbiAgICAgICAgWyQuREVUQUlMU106IHRydWUsXG4gICAgICAgIFskLkRJUl06IHRydWUsXG4gICAgICAgIFskLkRJVl06IHRydWUsXG4gICAgICAgIFskLkRMXTogdHJ1ZSxcbiAgICAgICAgWyQuRFRdOiB0cnVlLFxuICAgICAgICBbJC5FTUJFRF06IHRydWUsXG4gICAgICAgIFskLkZJRUxEU0VUXTogdHJ1ZSxcbiAgICAgICAgWyQuRklHQ0FQVElPTl06IHRydWUsXG4gICAgICAgIFskLkZJR1VSRV06IHRydWUsXG4gICAgICAgIFskLkZPT1RFUl06IHRydWUsXG4gICAgICAgIFskLkZPUk1dOiB0cnVlLFxuICAgICAgICBbJC5GUkFNRV06IHRydWUsXG4gICAgICAgIFskLkZSQU1FU0VUXTogdHJ1ZSxcbiAgICAgICAgWyQuSDFdOiB0cnVlLFxuICAgICAgICBbJC5IMl06IHRydWUsXG4gICAgICAgIFskLkgzXTogdHJ1ZSxcbiAgICAgICAgWyQuSDRdOiB0cnVlLFxuICAgICAgICBbJC5INV06IHRydWUsXG4gICAgICAgIFskLkg2XTogdHJ1ZSxcbiAgICAgICAgWyQuSEVBRF06IHRydWUsXG4gICAgICAgIFskLkhFQURFUl06IHRydWUsXG4gICAgICAgIFskLkhHUk9VUF06IHRydWUsXG4gICAgICAgIFskLkhSXTogdHJ1ZSxcbiAgICAgICAgWyQuSFRNTF06IHRydWUsXG4gICAgICAgIFskLklGUkFNRV06IHRydWUsXG4gICAgICAgIFskLklNR106IHRydWUsXG4gICAgICAgIFskLklOUFVUXTogdHJ1ZSxcbiAgICAgICAgWyQuTEldOiB0cnVlLFxuICAgICAgICBbJC5MSU5LXTogdHJ1ZSxcbiAgICAgICAgWyQuTElTVElOR106IHRydWUsXG4gICAgICAgIFskLk1BSU5dOiB0cnVlLFxuICAgICAgICBbJC5NQVJRVUVFXTogdHJ1ZSxcbiAgICAgICAgWyQuTUVOVV06IHRydWUsXG4gICAgICAgIFskLk1FVEFdOiB0cnVlLFxuICAgICAgICBbJC5OQVZdOiB0cnVlLFxuICAgICAgICBbJC5OT0VNQkVEXTogdHJ1ZSxcbiAgICAgICAgWyQuTk9GUkFNRVNdOiB0cnVlLFxuICAgICAgICBbJC5OT1NDUklQVF06IHRydWUsXG4gICAgICAgIFskLk9CSkVDVF06IHRydWUsXG4gICAgICAgIFskLk9MXTogdHJ1ZSxcbiAgICAgICAgWyQuUF06IHRydWUsXG4gICAgICAgIFskLlBBUkFNXTogdHJ1ZSxcbiAgICAgICAgWyQuUExBSU5URVhUXTogdHJ1ZSxcbiAgICAgICAgWyQuUFJFXTogdHJ1ZSxcbiAgICAgICAgWyQuU0NSSVBUXTogdHJ1ZSxcbiAgICAgICAgWyQuU0VDVElPTl06IHRydWUsXG4gICAgICAgIFskLlNFTEVDVF06IHRydWUsXG4gICAgICAgIFskLlNPVVJDRV06IHRydWUsXG4gICAgICAgIFskLlNUWUxFXTogdHJ1ZSxcbiAgICAgICAgWyQuU1VNTUFSWV06IHRydWUsXG4gICAgICAgIFskLlRBQkxFXTogdHJ1ZSxcbiAgICAgICAgWyQuVEJPRFldOiB0cnVlLFxuICAgICAgICBbJC5URF06IHRydWUsXG4gICAgICAgIFskLlRFTVBMQVRFXTogdHJ1ZSxcbiAgICAgICAgWyQuVEVYVEFSRUFdOiB0cnVlLFxuICAgICAgICBbJC5URk9PVF06IHRydWUsXG4gICAgICAgIFskLlRIXTogdHJ1ZSxcbiAgICAgICAgWyQuVEhFQURdOiB0cnVlLFxuICAgICAgICBbJC5USVRMRV06IHRydWUsXG4gICAgICAgIFskLlRSXTogdHJ1ZSxcbiAgICAgICAgWyQuVFJBQ0tdOiB0cnVlLFxuICAgICAgICBbJC5VTF06IHRydWUsXG4gICAgICAgIFskLldCUl06IHRydWUsXG4gICAgICAgIFskLlhNUF06IHRydWVcbiAgICB9LFxuICAgIFtOUy5NQVRITUxdOiB7XG4gICAgICAgIFskLk1JXTogdHJ1ZSxcbiAgICAgICAgWyQuTU9dOiB0cnVlLFxuICAgICAgICBbJC5NTl06IHRydWUsXG4gICAgICAgIFskLk1TXTogdHJ1ZSxcbiAgICAgICAgWyQuTVRFWFRdOiB0cnVlLFxuICAgICAgICBbJC5BTk5PVEFUSU9OX1hNTF06IHRydWVcbiAgICB9LFxuICAgIFtOUy5TVkddOiB7XG4gICAgICAgIFskLlRJVExFXTogdHJ1ZSxcbiAgICAgICAgWyQuRk9SRUlHTl9PQkpFQ1RdOiB0cnVlLFxuICAgICAgICBbJC5ERVNDXTogdHJ1ZVxuICAgIH1cbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBET0NVTUVOVF9NT0RFIH0gPSByZXF1aXJlKCcuL2h0bWwnKTtcblxuLy9Db25zdFxuY29uc3QgVkFMSURfRE9DVFlQRV9OQU1FID0gJ2h0bWwnO1xuY29uc3QgVkFMSURfU1lTVEVNX0lEID0gJ2Fib3V0OmxlZ2FjeS1jb21wYXQnO1xuY29uc3QgUVVJUktTX01PREVfU1lTVEVNX0lEID0gJ2h0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnO1xuXG5jb25zdCBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVMgPSBbXG4gICAgJysvL3NpbG1hcmlsLy9kdGQgaHRtbCBwcm8gdjByMTEgMTk5NzAxMDEvLycsXG4gICAgJy0vL2FzLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvLycsXG4gICAgJy0vL2FkdmFzb2Z0IGx0ZC8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0Ly8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMWUvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMuMC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMy4yIGZpbmFsLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLjIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAwLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAzLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sLy8nLFxuICAgICctLy9tZXRyaXVzLy9kdGQgbWV0cml1cyBwcmVzZW50YXRpb25hbC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIHRhYmxlcy8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIHRhYmxlcy8vJyxcbiAgICAnLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy8nLFxuICAgICctLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIHN0cmljdCBodG1sLy8nLFxuICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vXCIsXG4gICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9cIixcbiAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCBleHRlbmRlZCByZWxheGVkIDEuMC8vXCIsXG4gICAgJy0vL3NxLy9kdGQgaHRtbCAyLjAgaG90bWV0YWwgKyBleHRlbnNpb25zLy8nLFxuICAgICctLy9zb2Z0cXVhZCBzb2Z0d2FyZS8vZHRkIGhvdG1ldGFsIHBybyA2LjA6OjE5OTkwNjAxOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8nLFxuICAgICctLy9zb2Z0cXVhZC8vZHRkIGhvdG1ldGFsIHBybyA0LjA6OjE5OTcxMDEwOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8nLFxuICAgICctLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy8nLFxuICAgICctLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBodG1sLy8nLFxuICAgICctLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBzdHJpY3QgaHRtbC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzIDE5OTUtMDMtMjQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4yIGRyYWZ0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMiBmaW5hbC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzLjIvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4ycyBkcmFmdC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCBleHBlcmltZW50YWwgMTk5NjA3MTIvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDk3MDQyMS8vJyxcbiAgICAnLS8vdzNjLy9kdGQgdzMgaHRtbC8vJyxcbiAgICAnLS8vdzNvLy9kdGQgdzMgaHRtbCAzLjAvLycsXG4gICAgJy0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sIDIuMC8vJyxcbiAgICAnLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwvLydcbl07XG5cbmNvbnN0IFFVSVJLU19NT0RFX05PX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMgPSBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVMuY29uY2F0KFtcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgdHJhbnNpdGlvbmFsLy8nXG5dKTtcblxuY29uc3QgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IFsnLS8vdzNvLy9kdGQgdzMgaHRtbCBzdHJpY3QgMy4wLy9lbi8vJywgJy0vdzNjL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvZW4nLCAnaHRtbCddO1xuY29uc3QgTElNSVRFRF9RVUlSS1NfUFVCTElDX0lEX1BSRUZJWEVTID0gWyctLy93M2MvL2R0ZCB4aHRtbCAxLjAgZnJhbWVzZXQvLycsICctLy93M2MvL2R0ZCB4aHRtbCAxLjAgdHJhbnNpdGlvbmFsLy8nXTtcblxuY29uc3QgTElNSVRFRF9RVUlSS1NfV0lUSF9TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTID0gTElNSVRFRF9RVUlSS1NfUFVCTElDX0lEX1BSRUZJWEVTLmNvbmNhdChbXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSBmcmFtZXNldC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJ1xuXSk7XG5cbi8vVXRpbHNcbmZ1bmN0aW9uIGVucXVvdGVEb2N0eXBlSWQoaWQpIHtcbiAgICBjb25zdCBxdW90ZSA9IGlkLmluZGV4T2YoJ1wiJykgIT09IC0xID8gXCInXCIgOiAnXCInO1xuXG4gICAgcmV0dXJuIHF1b3RlICsgaWQgKyBxdW90ZTtcbn1cblxuZnVuY3Rpb24gaGFzUHJlZml4KHB1YmxpY0lkLCBwcmVmaXhlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHB1YmxpY0lkLmluZGV4T2YocHJlZml4ZXNbaV0pID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy9BUElcbmV4cG9ydHMuaXNDb25mb3JtaW5nID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB0b2tlbi5uYW1lID09PSBWQUxJRF9ET0NUWVBFX05BTUUgJiZcbiAgICAgICAgdG9rZW4ucHVibGljSWQgPT09IG51bGwgJiZcbiAgICAgICAgKHRva2VuLnN5c3RlbUlkID09PSBudWxsIHx8IHRva2VuLnN5c3RlbUlkID09PSBWQUxJRF9TWVNURU1fSUQpXG4gICAgKTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRNb2RlID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubmFtZSAhPT0gVkFMSURfRE9DVFlQRV9OQU1FKSB7XG4gICAgICAgIHJldHVybiBET0NVTUVOVF9NT0RFLlFVSVJLUztcbiAgICB9XG5cbiAgICBjb25zdCBzeXN0ZW1JZCA9IHRva2VuLnN5c3RlbUlkO1xuXG4gICAgaWYgKHN5c3RlbUlkICYmIHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT09IFFVSVJLU19NT0RFX1NZU1RFTV9JRCkge1xuICAgICAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgfVxuXG4gICAgbGV0IHB1YmxpY0lkID0gdG9rZW4ucHVibGljSWQ7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpIHtcbiAgICAgICAgcHVibGljSWQgPSBwdWJsaWNJZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmluZGV4T2YocHVibGljSWQpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBET0NVTUVOVF9NT0RFLlFVSVJLUztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcmVmaXhlcyA9IHN5c3RlbUlkID09PSBudWxsID8gUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA6IFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUztcblxuICAgICAgICBpZiAoaGFzUHJlZml4KHB1YmxpY0lkLCBwcmVmaXhlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBET0NVTUVOVF9NT0RFLlFVSVJLUztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZWZpeGVzID1cbiAgICAgICAgICAgIHN5c3RlbUlkID09PSBudWxsID8gTElNSVRFRF9RVUlSS1NfUFVCTElDX0lEX1BSRUZJWEVTIDogTElNSVRFRF9RVUlSS1NfV0lUSF9TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTO1xuXG4gICAgICAgIGlmIChoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuTElNSVRFRF9RVUlSS1M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5OT19RVUlSS1M7XG59O1xuXG5leHBvcnRzLnNlcmlhbGl6ZUNvbnRlbnQgPSBmdW5jdGlvbihuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICBsZXQgc3RyID0gJyFET0NUWVBFICc7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgICBzdHIgKz0gbmFtZTtcbiAgICB9XG5cbiAgICBpZiAocHVibGljSWQpIHtcbiAgICAgICAgc3RyICs9ICcgUFVCTElDICcgKyBlbnF1b3RlRG9jdHlwZUlkKHB1YmxpY0lkKTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbUlkKSB7XG4gICAgICAgIHN0ciArPSAnIFNZU1RFTSc7XG4gICAgfVxuXG4gICAgaWYgKHN5c3RlbUlkICE9PSBudWxsKSB7XG4gICAgICAgIHN0ciArPSAnICcgKyBlbnF1b3RlRG9jdHlwZUlkKHN5c3RlbUlkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBkb2N0eXBlID0gcmVxdWlyZSgncGFyc2U1L2xpYi9jb21tb24vZG9jdHlwZScpO1xuY29uc3QgeyBET0NVTUVOVF9NT0RFIH0gPSByZXF1aXJlKCdwYXJzZTUvbGliL2NvbW1vbi9odG1sJyk7XG5cbi8vQ29udmVyc2lvbiB0YWJsZXMgZm9yIERPTSBMZXZlbDEgc3RydWN0dXJlIGVtdWxhdGlvblxuY29uc3Qgbm9kZVR5cGVzID0ge1xuICAgIGVsZW1lbnQ6IDEsXG4gICAgdGV4dDogMyxcbiAgICBjZGF0YTogNCxcbiAgICBjb21tZW50OiA4XG59O1xuXG5jb25zdCBub2RlUHJvcGVydHlTaG9ydGhhbmRzID0ge1xuICAgIHRhZ05hbWU6ICduYW1lJyxcbiAgICBjaGlsZE5vZGVzOiAnY2hpbGRyZW4nLFxuICAgIHBhcmVudE5vZGU6ICdwYXJlbnQnLFxuICAgIHByZXZpb3VzU2libGluZzogJ3ByZXYnLFxuICAgIG5leHRTaWJsaW5nOiAnbmV4dCcsXG4gICAgbm9kZVZhbHVlOiAnZGF0YSdcbn07XG5cbi8vTm9kZVxuY2xhc3MgTm9kZSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgICAgICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuICAgICAgICByZXR1cm4gKGNoaWxkcmVuICYmIGNoaWxkcmVuWzBdKSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldCBsYXN0Q2hpbGQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuICAgICAgICByZXR1cm4gKGNoaWxkcmVuICYmIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdKSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVUeXBlc1t0aGlzLnR5cGVdIHx8IG5vZGVUeXBlcy5lbGVtZW50O1xuICAgIH1cbn1cblxuT2JqZWN0LmtleXMobm9kZVByb3BlcnR5U2hvcnRoYW5kcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IHNob3J0aGFuZCA9IG5vZGVQcm9wZXJ0eVNob3J0aGFuZHNba2V5XTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tzaG9ydGhhbmRdIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzW3Nob3J0aGFuZF0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuLy9Ob2RlIGNvbnN0cnVjdGlvblxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgJ3gtbW9kZSc6IERPQ1VNRU5UX01PREUuTk9fUVVJUktTXG4gICAgfSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAncm9vdCcsXG4gICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICBjb25zdCBhdHRyaWJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCBhdHRyaWJzTmFtZXNwYWNlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCBhdHRyaWJzUHJlZml4ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xuXG4gICAgICAgIGF0dHJpYnNbYXR0ck5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gICAgICAgIGF0dHJpYnNOYW1lc3BhY2VbYXR0ck5hbWVdID0gYXR0cnNbaV0ubmFtZXNwYWNlO1xuICAgICAgICBhdHRyaWJzUHJlZml4W2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiB0YWdOYW1lID09PSAnc2NyaXB0JyB8fCB0YWdOYW1lID09PSAnc3R5bGUnID8gdGFnTmFtZSA6ICd0YWcnLFxuICAgICAgICBuYW1lOiB0YWdOYW1lLFxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZVVSSSxcbiAgICAgICAgYXR0cmliczogYXR0cmlicyxcbiAgICAgICAgJ3gtYXR0cmlic05hbWVzcGFjZSc6IGF0dHJpYnNOYW1lc3BhY2UsXG4gICAgICAgICd4LWF0dHJpYnNQcmVmaXgnOiBhdHRyaWJzUHJlZml4LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgcHJldjogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgIH0pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVDb21tZW50Tm9kZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgcHJldjogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgIH0pO1xufTtcblxuY29uc3QgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgZGF0YTogdmFsdWUsXG4gICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgcHJldjogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgIH0pO1xufTtcblxuLy9UcmVlIG11dGF0aW9uXG5jb25zdCBhcHBlbmRDaGlsZCA9IChleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgIGNvbnN0IHByZXYgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJldikge1xuICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgICAgICBuZXdOb2RlLnByZXYgPSBwcmV2O1xuICAgIH1cblxuICAgIHBhcmVudE5vZGUuY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcbiAgICBuZXdOb2RlLnBhcmVudCA9IHBhcmVudE5vZGU7XG59KTtcblxuY29uc3QgaW5zZXJ0QmVmb3JlID0gKGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcbiAgICBjb25zdCBwcmV2ID0gcmVmZXJlbmNlTm9kZS5wcmV2O1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VOb2RlLnByZXYgPSBuZXdOb2RlO1xuICAgIG5ld05vZGUubmV4dCA9IHJlZmVyZW5jZU5vZGU7XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn0pO1xuXG5leHBvcnRzLnNldFRlbXBsYXRlQ29udGVudCA9IGZ1bmN0aW9uKHRlbXBsYXRlRWxlbWVudCwgY29udGVudEVsZW1lbnQpIHtcbiAgICBhcHBlbmRDaGlsZCh0ZW1wbGF0ZUVsZW1lbnQsIGNvbnRlbnRFbGVtZW50KTtcbn07XG5cbmV4cG9ydHMuZ2V0VGVtcGxhdGVDb250ZW50ID0gZnVuY3Rpb24odGVtcGxhdGVFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5jaGlsZHJlblswXTtcbn07XG5cbmV4cG9ydHMuc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24oZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGNvbnN0IGRhdGEgPSBkb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKTtcbiAgICBsZXQgZG9jdHlwZU5vZGUgPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGRyZW5baV0udHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgZG9jdW1lbnQuY2hpbGRyZW5baV0ubmFtZSA9PT0gJyFkb2N0eXBlJykge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIGRvY3R5cGVOb2RlLmRhdGEgPSBkYXRhO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1uYW1lJ10gPSBuYW1lO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddID0gcHVibGljSWQ7XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ10gPSBzeXN0ZW1JZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlbmRDaGlsZChcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgbmV3IE5vZGUoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkaXJlY3RpdmUnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICchZG9jdHlwZScsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAneC1uYW1lJzogbmFtZSxcbiAgICAgICAgICAgICAgICAneC1wdWJsaWNJZCc6IHB1YmxpY0lkLFxuICAgICAgICAgICAgICAgICd4LXN5c3RlbUlkJzogc3lzdGVtSWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5zZXREb2N1bWVudE1vZGUgPSBmdW5jdGlvbihkb2N1bWVudCwgbW9kZSkge1xuICAgIGRvY3VtZW50Wyd4LW1vZGUnXSA9IG1vZGU7XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50TW9kZSA9IGZ1bmN0aW9uKGRvY3VtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50Wyd4LW1vZGUnXTtcbn07XG5cbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKTtcbiAgICAgICAgY29uc3QgcHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgY29uc3QgbmV4dCA9IG5vZGUubmV4dDtcblxuICAgICAgICBub2RlLnByZXYgPSBudWxsO1xuICAgICAgICBub2RlLm5leHQgPSBudWxsO1xuXG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIG5leHQucHJldiA9IHByZXY7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgbm9kZS5wYXJlbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICBjb25zdCBsYXN0Q2hpbGQgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobGFzdENoaWxkICYmIGxhc3RDaGlsZC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgbGFzdENoaWxkLmRhdGEgKz0gdGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0QmVmb3JlID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgdGV4dCwgcmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcblxuICAgIGlmIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcHJldk5vZGUuZGF0YSArPSB0ZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgcmVmZXJlbmNlTm9kZSk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihyZWNpcGllbnQsIGF0dHJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZWNpcGllbnQuYXR0cmlic1thdHRyTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWNpcGllbnQuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIHJlY2lwaWVudFsneC1hdHRyaWJzTmFtZXNwYWNlJ11bYXR0ck5hbWVdID0gYXR0cnNbaV0ubmFtZXNwYWNlO1xuICAgICAgICAgICAgcmVjaXBpZW50Wyd4LWF0dHJpYnNQcmVmaXgnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vL1RyZWUgdHJhdmVyc2luZ1xuZXhwb3J0cy5nZXRGaXJzdENoaWxkID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuWzBdO1xufTtcblxuZXhwb3J0cy5nZXRDaGlsZE5vZGVzID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudDtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0ckxpc3QgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgY29uc3QgYXR0ckxpc3QgPSBbXTtcblxuICAgIGZvciAoY29uc3QgbmFtZSBpbiBlbGVtZW50LmF0dHJpYnMpIHtcbiAgICAgICAgYXR0ckxpc3QucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgIG5hbWVzcGFjZTogZWxlbWVudFsneC1hdHRyaWJzTmFtZXNwYWNlJ11bbmFtZV0sXG4gICAgICAgICAgICBwcmVmaXg6IGVsZW1lbnRbJ3gtYXR0cmlic1ByZWZpeCddW25hbWVdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyTGlzdDtcbn07XG5cbi8vTm9kZSBkYXRhXG5leHBvcnRzLmdldFRhZ05hbWUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcbn07XG5cbmV4cG9ydHMuZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcbn07XG5cbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24odGV4dE5vZGUpIHtcbiAgICByZXR1cm4gdGV4dE5vZGUuZGF0YTtcbn07XG5cbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24oY29tbWVudE5vZGUpIHtcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbihkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1uYW1lJ107XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uKGRvY3R5cGVOb2RlKSB7XG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LXB1YmxpY0lkJ107XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZCA9IGZ1bmN0aW9uKGRvY3R5cGVOb2RlKSB7XG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ107XG59O1xuXG4vL05vZGUgdHlwZXNcbmV4cG9ydHMuaXNUZXh0Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAndGV4dCc7XG59O1xuXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnO1xufTtcblxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgbm9kZS5uYW1lID09PSAnIWRvY3R5cGUnO1xufTtcblxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiAhIW5vZGUuYXR0cmlicztcbn07XG5cbi8vIFNvdXJjZSBjb2RlIGxvY2F0aW9uXG5leHBvcnRzLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24gPSBmdW5jdGlvbihub2RlLCBsb2NhdGlvbikge1xuICAgIG5vZGUuc291cmNlQ29kZUxvY2F0aW9uID0gbG9jYXRpb247XG59O1xuXG5leHBvcnRzLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24gPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuc291cmNlQ29kZUxvY2F0aW9uO1xufTtcblxuZXhwb3J0cy51cGRhdGVOb2RlU291cmNlQ29kZUxvY2F0aW9uID0gZnVuY3Rpb24obm9kZSwgZW5kTG9jYXRpb24pIHtcbiAgICBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiA9IE9iamVjdC5hc3NpZ24obm9kZS5zb3VyY2VDb2RlTG9jYXRpb24sIGVuZExvY2F0aW9uKTtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0XCJhbGljZWJsdWVcIjogWzI0MCwgMjQ4LCAyNTVdLFxyXG5cdFwiYW50aXF1ZXdoaXRlXCI6IFsyNTAsIDIzNSwgMjE1XSxcclxuXHRcImFxdWFcIjogWzAsIDI1NSwgMjU1XSxcclxuXHRcImFxdWFtYXJpbmVcIjogWzEyNywgMjU1LCAyMTJdLFxyXG5cdFwiYXp1cmVcIjogWzI0MCwgMjU1LCAyNTVdLFxyXG5cdFwiYmVpZ2VcIjogWzI0NSwgMjQ1LCAyMjBdLFxyXG5cdFwiYmlzcXVlXCI6IFsyNTUsIDIyOCwgMTk2XSxcclxuXHRcImJsYWNrXCI6IFswLCAwLCAwXSxcclxuXHRcImJsYW5jaGVkYWxtb25kXCI6IFsyNTUsIDIzNSwgMjA1XSxcclxuXHRcImJsdWVcIjogWzAsIDAsIDI1NV0sXHJcblx0XCJibHVldmlvbGV0XCI6IFsxMzgsIDQzLCAyMjZdLFxyXG5cdFwiYnJvd25cIjogWzE2NSwgNDIsIDQyXSxcclxuXHRcImJ1cmx5d29vZFwiOiBbMjIyLCAxODQsIDEzNV0sXHJcblx0XCJjYWRldGJsdWVcIjogWzk1LCAxNTgsIDE2MF0sXHJcblx0XCJjaGFydHJldXNlXCI6IFsxMjcsIDI1NSwgMF0sXHJcblx0XCJjaG9jb2xhdGVcIjogWzIxMCwgMTA1LCAzMF0sXHJcblx0XCJjb3JhbFwiOiBbMjU1LCAxMjcsIDgwXSxcclxuXHRcImNvcm5mbG93ZXJibHVlXCI6IFsxMDAsIDE0OSwgMjM3XSxcclxuXHRcImNvcm5zaWxrXCI6IFsyNTUsIDI0OCwgMjIwXSxcclxuXHRcImNyaW1zb25cIjogWzIyMCwgMjAsIDYwXSxcclxuXHRcImN5YW5cIjogWzAsIDI1NSwgMjU1XSxcclxuXHRcImRhcmtibHVlXCI6IFswLCAwLCAxMzldLFxyXG5cdFwiZGFya2N5YW5cIjogWzAsIDEzOSwgMTM5XSxcclxuXHRcImRhcmtnb2xkZW5yb2RcIjogWzE4NCwgMTM0LCAxMV0sXHJcblx0XCJkYXJrZ3JheVwiOiBbMTY5LCAxNjksIDE2OV0sXHJcblx0XCJkYXJrZ3JlZW5cIjogWzAsIDEwMCwgMF0sXHJcblx0XCJkYXJrZ3JleVwiOiBbMTY5LCAxNjksIDE2OV0sXHJcblx0XCJkYXJra2hha2lcIjogWzE4OSwgMTgzLCAxMDddLFxyXG5cdFwiZGFya21hZ2VudGFcIjogWzEzOSwgMCwgMTM5XSxcclxuXHRcImRhcmtvbGl2ZWdyZWVuXCI6IFs4NSwgMTA3LCA0N10sXHJcblx0XCJkYXJrb3JhbmdlXCI6IFsyNTUsIDE0MCwgMF0sXHJcblx0XCJkYXJrb3JjaGlkXCI6IFsxNTMsIDUwLCAyMDRdLFxyXG5cdFwiZGFya3JlZFwiOiBbMTM5LCAwLCAwXSxcclxuXHRcImRhcmtzYWxtb25cIjogWzIzMywgMTUwLCAxMjJdLFxyXG5cdFwiZGFya3NlYWdyZWVuXCI6IFsxNDMsIDE4OCwgMTQzXSxcclxuXHRcImRhcmtzbGF0ZWJsdWVcIjogWzcyLCA2MSwgMTM5XSxcclxuXHRcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3NsYXRlZ3JleVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrdHVycXVvaXNlXCI6IFswLCAyMDYsIDIwOV0sXHJcblx0XCJkYXJrdmlvbGV0XCI6IFsxNDgsIDAsIDIxMV0sXHJcblx0XCJkZWVwcGlua1wiOiBbMjU1LCAyMCwgMTQ3XSxcclxuXHRcImRlZXBza3libHVlXCI6IFswLCAxOTEsIDI1NV0sXHJcblx0XCJkaW1ncmF5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRpbWdyZXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZG9kZ2VyYmx1ZVwiOiBbMzAsIDE0NCwgMjU1XSxcclxuXHRcImZpcmVicmlja1wiOiBbMTc4LCAzNCwgMzRdLFxyXG5cdFwiZmxvcmFsd2hpdGVcIjogWzI1NSwgMjUwLCAyNDBdLFxyXG5cdFwiZm9yZXN0Z3JlZW5cIjogWzM0LCAxMzksIDM0XSxcclxuXHRcImZ1Y2hzaWFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcImdhaW5zYm9yb1wiOiBbMjIwLCAyMjAsIDIyMF0sXHJcblx0XCJnaG9zdHdoaXRlXCI6IFsyNDgsIDI0OCwgMjU1XSxcclxuXHRcImdvbGRcIjogWzI1NSwgMjE1LCAwXSxcclxuXHRcImdvbGRlbnJvZFwiOiBbMjE4LCAxNjUsIDMyXSxcclxuXHRcImdyYXlcIjogWzEyOCwgMTI4LCAxMjhdLFxyXG5cdFwiZ3JlZW5cIjogWzAsIDEyOCwgMF0sXHJcblx0XCJncmVlbnllbGxvd1wiOiBbMTczLCAyNTUsIDQ3XSxcclxuXHRcImdyZXlcIjogWzEyOCwgMTI4LCAxMjhdLFxyXG5cdFwiaG9uZXlkZXdcIjogWzI0MCwgMjU1LCAyNDBdLFxyXG5cdFwiaG90cGlua1wiOiBbMjU1LCAxMDUsIDE4MF0sXHJcblx0XCJpbmRpYW5yZWRcIjogWzIwNSwgOTIsIDkyXSxcclxuXHRcImluZGlnb1wiOiBbNzUsIDAsIDEzMF0sXHJcblx0XCJpdm9yeVwiOiBbMjU1LCAyNTUsIDI0MF0sXHJcblx0XCJraGFraVwiOiBbMjQwLCAyMzAsIDE0MF0sXHJcblx0XCJsYXZlbmRlclwiOiBbMjMwLCAyMzAsIDI1MF0sXHJcblx0XCJsYXZlbmRlcmJsdXNoXCI6IFsyNTUsIDI0MCwgMjQ1XSxcclxuXHRcImxhd25ncmVlblwiOiBbMTI0LCAyNTIsIDBdLFxyXG5cdFwibGVtb25jaGlmZm9uXCI6IFsyNTUsIDI1MCwgMjA1XSxcclxuXHRcImxpZ2h0Ymx1ZVwiOiBbMTczLCAyMTYsIDIzMF0sXHJcblx0XCJsaWdodGNvcmFsXCI6IFsyNDAsIDEyOCwgMTI4XSxcclxuXHRcImxpZ2h0Y3lhblwiOiBbMjI0LCAyNTUsIDI1NV0sXHJcblx0XCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBbMjUwLCAyNTAsIDIxMF0sXHJcblx0XCJsaWdodGdyYXlcIjogWzIxMSwgMjExLCAyMTFdLFxyXG5cdFwibGlnaHRncmVlblwiOiBbMTQ0LCAyMzgsIDE0NF0sXHJcblx0XCJsaWdodGdyZXlcIjogWzIxMSwgMjExLCAyMTFdLFxyXG5cdFwibGlnaHRwaW5rXCI6IFsyNTUsIDE4MiwgMTkzXSxcclxuXHRcImxpZ2h0c2FsbW9uXCI6IFsyNTUsIDE2MCwgMTIyXSxcclxuXHRcImxpZ2h0c2VhZ3JlZW5cIjogWzMyLCAxNzgsIDE3MF0sXHJcblx0XCJsaWdodHNreWJsdWVcIjogWzEzNSwgMjA2LCAyNTBdLFxyXG5cdFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwgMTM2LCAxNTNdLFxyXG5cdFwibGlnaHRzbGF0ZWdyZXlcIjogWzExOSwgMTM2LCAxNTNdLFxyXG5cdFwibGlnaHRzdGVlbGJsdWVcIjogWzE3NiwgMTk2LCAyMjJdLFxyXG5cdFwibGlnaHR5ZWxsb3dcIjogWzI1NSwgMjU1LCAyMjRdLFxyXG5cdFwibGltZVwiOiBbMCwgMjU1LCAwXSxcclxuXHRcImxpbWVncmVlblwiOiBbNTAsIDIwNSwgNTBdLFxyXG5cdFwibGluZW5cIjogWzI1MCwgMjQwLCAyMzBdLFxyXG5cdFwibWFnZW50YVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwibWFyb29uXCI6IFsxMjgsIDAsIDBdLFxyXG5cdFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLCAyMDUsIDE3MF0sXHJcblx0XCJtZWRpdW1ibHVlXCI6IFswLCAwLCAyMDVdLFxyXG5cdFwibWVkaXVtb3JjaGlkXCI6IFsxODYsIDg1LCAyMTFdLFxyXG5cdFwibWVkaXVtcHVycGxlXCI6IFsxNDcsIDExMiwgMjE5XSxcclxuXHRcIm1lZGl1bXNlYWdyZWVuXCI6IFs2MCwgMTc5LCAxMTNdLFxyXG5cdFwibWVkaXVtc2xhdGVibHVlXCI6IFsxMjMsIDEwNCwgMjM4XSxcclxuXHRcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLCAyNTAsIDE1NF0sXHJcblx0XCJtZWRpdW10dXJxdW9pc2VcIjogWzcyLCAyMDksIDIwNF0sXHJcblx0XCJtZWRpdW12aW9sZXRyZWRcIjogWzE5OSwgMjEsIDEzM10sXHJcblx0XCJtaWRuaWdodGJsdWVcIjogWzI1LCAyNSwgMTEyXSxcclxuXHRcIm1pbnRjcmVhbVwiOiBbMjQ1LCAyNTUsIDI1MF0sXHJcblx0XCJtaXN0eXJvc2VcIjogWzI1NSwgMjI4LCAyMjVdLFxyXG5cdFwibW9jY2FzaW5cIjogWzI1NSwgMjI4LCAxODFdLFxyXG5cdFwibmF2YWpvd2hpdGVcIjogWzI1NSwgMjIyLCAxNzNdLFxyXG5cdFwibmF2eVwiOiBbMCwgMCwgMTI4XSxcclxuXHRcIm9sZGxhY2VcIjogWzI1MywgMjQ1LCAyMzBdLFxyXG5cdFwib2xpdmVcIjogWzEyOCwgMTI4LCAwXSxcclxuXHRcIm9saXZlZHJhYlwiOiBbMTA3LCAxNDIsIDM1XSxcclxuXHRcIm9yYW5nZVwiOiBbMjU1LCAxNjUsIDBdLFxyXG5cdFwib3JhbmdlcmVkXCI6IFsyNTUsIDY5LCAwXSxcclxuXHRcIm9yY2hpZFwiOiBbMjE4LCAxMTIsIDIxNF0sXHJcblx0XCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsIDIzMiwgMTcwXSxcclxuXHRcInBhbGVncmVlblwiOiBbMTUyLCAyNTEsIDE1Ml0sXHJcblx0XCJwYWxldHVycXVvaXNlXCI6IFsxNzUsIDIzOCwgMjM4XSxcclxuXHRcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwgMTEyLCAxNDddLFxyXG5cdFwicGFwYXlhd2hpcFwiOiBbMjU1LCAyMzksIDIxM10sXHJcblx0XCJwZWFjaHB1ZmZcIjogWzI1NSwgMjE4LCAxODVdLFxyXG5cdFwicGVydVwiOiBbMjA1LCAxMzMsIDYzXSxcclxuXHRcInBpbmtcIjogWzI1NSwgMTkyLCAyMDNdLFxyXG5cdFwicGx1bVwiOiBbMjIxLCAxNjAsIDIyMV0sXHJcblx0XCJwb3dkZXJibHVlXCI6IFsxNzYsIDIyNCwgMjMwXSxcclxuXHRcInB1cnBsZVwiOiBbMTI4LCAwLCAxMjhdLFxyXG5cdFwicmViZWNjYXB1cnBsZVwiOiBbMTAyLCA1MSwgMTUzXSxcclxuXHRcInJlZFwiOiBbMjU1LCAwLCAwXSxcclxuXHRcInJvc3licm93blwiOiBbMTg4LCAxNDMsIDE0M10sXHJcblx0XCJyb3lhbGJsdWVcIjogWzY1LCAxMDUsIDIyNV0sXHJcblx0XCJzYWRkbGVicm93blwiOiBbMTM5LCA2OSwgMTldLFxyXG5cdFwic2FsbW9uXCI6IFsyNTAsIDEyOCwgMTE0XSxcclxuXHRcInNhbmR5YnJvd25cIjogWzI0NCwgMTY0LCA5Nl0sXHJcblx0XCJzZWFncmVlblwiOiBbNDYsIDEzOSwgODddLFxyXG5cdFwic2Vhc2hlbGxcIjogWzI1NSwgMjQ1LCAyMzhdLFxyXG5cdFwic2llbm5hXCI6IFsxNjAsIDgyLCA0NV0sXHJcblx0XCJzaWx2ZXJcIjogWzE5MiwgMTkyLCAxOTJdLFxyXG5cdFwic2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDIzNV0sXHJcblx0XCJzbGF0ZWJsdWVcIjogWzEwNiwgOTAsIDIwNV0sXHJcblx0XCJzbGF0ZWdyYXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic2xhdGVncmV5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNub3dcIjogWzI1NSwgMjUwLCAyNTBdLFxyXG5cdFwic3ByaW5nZ3JlZW5cIjogWzAsIDI1NSwgMTI3XSxcclxuXHRcInN0ZWVsYmx1ZVwiOiBbNzAsIDEzMCwgMTgwXSxcclxuXHRcInRhblwiOiBbMjEwLCAxODAsIDE0MF0sXHJcblx0XCJ0ZWFsXCI6IFswLCAxMjgsIDEyOF0sXHJcblx0XCJ0aGlzdGxlXCI6IFsyMTYsIDE5MSwgMjE2XSxcclxuXHRcInRvbWF0b1wiOiBbMjU1LCA5OSwgNzFdLFxyXG5cdFwidHVycXVvaXNlXCI6IFs2NCwgMjI0LCAyMDhdLFxyXG5cdFwidmlvbGV0XCI6IFsyMzgsIDEzMCwgMjM4XSxcclxuXHRcIndoZWF0XCI6IFsyNDUsIDIyMiwgMTc5XSxcclxuXHRcIndoaXRlXCI6IFsyNTUsIDI1NSwgMjU1XSxcclxuXHRcIndoaXRlc21va2VcIjogWzI0NSwgMjQ1LCAyNDVdLFxyXG5cdFwieWVsbG93XCI6IFsyNTUsIDI1NSwgMF0sXHJcblx0XCJ5ZWxsb3dncmVlblwiOiBbMTU0LCAyMDUsIDUwXVxyXG59O1xyXG4iLAogICAgIi8qIE1JVCBsaWNlbnNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmNvbnN0IGNzc0tleXdvcmRzID0gcmVxdWlyZSgnY29sb3ItbmFtZScpO1xuXG4vLyBOT1RFOiBjb252ZXJzaW9ucyBzaG91bGQgb25seSByZXR1cm4gcHJpbWl0aXZlIHZhbHVlcyAoaS5lLiBhcnJheXMsIG9yXG4vLyAgICAgICB2YWx1ZXMgdGhhdCBnaXZlIGNvcnJlY3QgYHR5cGVvZmAgcmVzdWx0cykuXG4vLyAgICAgICBkbyBub3QgdXNlIGJveCB2YWx1ZXMgdHlwZXMgKGkuZS4gTnVtYmVyKCksIFN0cmluZygpLCBldGMuKVxuXG5jb25zdCByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRyZXZlcnNlS2V5d29yZHNbY3NzS2V5d29yZHNba2V5XV0gPSBrZXk7XG59XG5cbmNvbnN0IGNvbnZlcnQgPSB7XG5cdHJnYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdyZ2InfSxcblx0aHNsOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzbCd9LFxuXHRoc3Y6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHN2J30sXG5cdGh3Yjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdod2InfSxcblx0Y215azoge2NoYW5uZWxzOiA0LCBsYWJlbHM6ICdjbXlrJ30sXG5cdHh5ejoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICd4eXonfSxcblx0bGFiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xhYid9LFxuXHRsY2g6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGNoJ30sXG5cdGhleDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnaGV4J119LFxuXHRrZXl3b3JkOiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydrZXl3b3JkJ119LFxuXHRhbnNpMTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kxNiddfSxcblx0YW5zaTI1Njoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTI1NiddfSxcblx0aGNnOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydoJywgJ2MnLCAnZyddfSxcblx0YXBwbGU6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ3IxNicsICdnMTYnLCAnYjE2J119LFxuXHRncmF5OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydncmF5J119XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cbi8vIEhpZGUgLmNoYW5uZWxzIGFuZCAubGFiZWxzIHByb3BlcnRpZXNcbmZvciAoY29uc3QgbW9kZWwgb2YgT2JqZWN0LmtleXMoY29udmVydCkpIHtcblx0aWYgKCEoJ2NoYW5uZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoISgnbGFiZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoY29udmVydFttb2RlbF0ubGFiZWxzLmxlbmd0aCAhPT0gY29udmVydFttb2RlbF0uY2hhbm5lbHMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogJyArIG1vZGVsKTtcblx0fVxuXG5cdGNvbnN0IHtjaGFubmVscywgbGFiZWxzfSA9IGNvbnZlcnRbbW9kZWxdO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0uY2hhbm5lbHM7XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5sYWJlbHM7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGxhYmVsc30pO1xufVxuXG5jb252ZXJ0LnJnYi5oc2wgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGVsdGEgPSBtYXggLSBtaW47XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmIChyID09PSBtYXgpIHtcblx0XHRoID0gKGcgLSBiKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGcgPT09IG1heCkge1xuXHRcdGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuXHRcdGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXHR9XG5cblx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGwgPSAobWluICsgbWF4KSAvIDI7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAobCA8PSAwLjUpIHtcblx0XHRzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcblx0fSBlbHNlIHtcblx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cdH1cblxuXHRyZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuaHN2ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgcmRpZjtcblx0bGV0IGdkaWY7XG5cdGxldCBiZGlmO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgdiA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmID0gdiAtIE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmYyA9IGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICh2IC0gYykgLyA2IC8gZGlmZiArIDEgLyAyO1xuXHR9O1xuXG5cdGlmIChkaWZmID09PSAwKSB7XG5cdFx0aCA9IDA7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRpZmYgLyB2O1xuXHRcdHJkaWYgPSBkaWZmYyhyKTtcblx0XHRnZGlmID0gZGlmZmMoZyk7XG5cdFx0YmRpZiA9IGRpZmZjKGIpO1xuXG5cdFx0aWYgKHIgPT09IHYpIHtcblx0XHRcdGggPSBiZGlmIC0gZ2RpZjtcblx0XHR9IGVsc2UgaWYgKGcgPT09IHYpIHtcblx0XHRcdGggPSAoMSAvIDMpICsgcmRpZiAtIGJkaWY7XG5cdFx0fSBlbHNlIGlmIChiID09PSB2KSB7XG5cdFx0XHRoID0gKDIgLyAzKSArIGdkaWYgLSByZGlmO1xuXHRcdH1cblxuXHRcdGlmIChoIDwgMCkge1xuXHRcdFx0aCArPSAxO1xuXHRcdH0gZWxzZSBpZiAoaCA+IDEpIHtcblx0XHRcdGggLT0gMTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gW1xuXHRcdGggKiAzNjAsXG5cdFx0cyAqIDEwMCxcblx0XHR2ICogMTAwXG5cdF07XG59O1xuXG5jb252ZXJ0LnJnYi5od2IgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF07XG5cdGNvbnN0IGcgPSByZ2JbMV07XG5cdGxldCBiID0gcmdiWzJdO1xuXHRjb25zdCBoID0gY29udmVydC5yZ2IuaHNsKHJnYilbMF07XG5cdGNvbnN0IHcgPSAxIC8gMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpO1xuXG5cdGIgPSAxIC0gMSAvIDI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuXHRyZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuY215ayA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHRjb25zdCBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG5cdGNvbnN0IGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cblx0cmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn07XG5cbmZ1bmN0aW9uIGNvbXBhcmF0aXZlRGlzdGFuY2UoeCwgeSkge1xuXHQvKlxuXHRcdFNlZSBodHRwczovL2VuLm0ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9kaXN0YW5jZSNTcXVhcmVkX0V1Y2xpZGVhbl9kaXN0YW5jZVxuXHQqL1xuXHRyZXR1cm4gKFxuXHRcdCgoeFswXSAtIHlbMF0pICoqIDIpICtcblx0XHQoKHhbMV0gLSB5WzFdKSAqKiAyKSArXG5cdFx0KCh4WzJdIC0geVsyXSkgKiogMilcblx0KTtcbn1cblxuY29udmVydC5yZ2Iua2V5d29yZCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgcmV2ZXJzZWQgPSByZXZlcnNlS2V5d29yZHNbcmdiXTtcblx0aWYgKHJldmVyc2VkKSB7XG5cdFx0cmV0dXJuIHJldmVyc2VkO1xuXHR9XG5cblx0bGV0IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblx0bGV0IGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcblxuXHRmb3IgKGNvbnN0IGtleXdvcmQgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcblxuXHRcdC8vIENvbXB1dGUgY29tcGFyYXRpdmUgZGlzdGFuY2Vcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvbXBhcmF0aXZlRGlzdGFuY2UocmdiLCB2YWx1ZSk7XG5cblx0XHQvLyBDaGVjayBpZiBpdHMgbGVzcywgaWYgc28gc2V0IGFzIGNsb3Nlc3Rcblx0XHRpZiAoZGlzdGFuY2UgPCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlKSB7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdEtleXdvcmQgPSBrZXl3b3JkO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG59O1xuXG5jb252ZXJ0LmtleXdvcmQucmdiID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0cmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufTtcblxuY29udmVydC5yZ2IueHl6ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgciA9IHJnYlswXSAvIDI1NTtcblx0bGV0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGxldCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wNDA0NSA/ICgoKHIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChyIC8gMTIuOTIpO1xuXHRnID0gZyA+IDAuMDQwNDUgPyAoKChnICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoZyAvIDEyLjkyKTtcblx0YiA9IGIgPiAwLjA0MDQ1ID8gKCgoYiArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGIgLyAxMi45Mik7XG5cblx0Y29uc3QgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcblx0Y29uc3QgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcblx0Y29uc3QgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuXHRyZXR1cm4gW3ggKiAxMDAsIHkgKiAxMDAsIHogKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IubGFiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB4eXogPSBjb252ZXJ0LnJnYi54eXoocmdiKTtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmhzbC5yZ2IgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF0gLyAzNjA7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCB0Mjtcblx0bGV0IHQzO1xuXHRsZXQgdmFsO1xuXG5cdGlmIChzID09PSAwKSB7XG5cdFx0dmFsID0gbCAqIDI1NTtcblx0XHRyZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuXHR9XG5cblx0aWYgKGwgPCAwLjUpIHtcblx0XHR0MiA9IGwgKiAoMSArIHMpO1xuXHR9IGVsc2Uge1xuXHRcdHQyID0gbCArIHMgLSBsICogcztcblx0fVxuXG5cdGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcblxuXHRjb25zdCByZ2IgPSBbMCwgMCwgMF07XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRpZiAodDMgPCAwKSB7XG5cdFx0XHR0MysrO1xuXHRcdH1cblxuXHRcdGlmICh0MyA+IDEpIHtcblx0XHRcdHQzLS07XG5cdFx0fVxuXG5cdFx0aWYgKDYgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuXHRcdH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDI7XG5cdFx0fSBlbHNlIGlmICgzICogdDMgPCAyKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbCA9IHQxO1xuXHRcdH1cblxuXHRcdHJnYltpXSA9IHZhbCAqIDI1NTtcblx0fVxuXG5cdHJldHVybiByZ2I7XG59O1xuXG5jb252ZXJ0LmhzbC5oc3YgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF07XG5cdGxldCBzID0gaHNsWzFdIC8gMTAwO1xuXHRsZXQgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHNtaW4gPSBzO1xuXHRjb25zdCBsbWluID0gTWF0aC5tYXgobCwgMC4wMSk7XG5cblx0bCAqPSAyO1xuXHRzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRzbWluICo9IGxtaW4gPD0gMSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0Y29uc3QgdiA9IChsICsgcykgLyAyO1xuXHRjb25zdCBzdiA9IGwgPT09IDAgPyAoMiAqIHNtaW4pIC8gKGxtaW4gKyBzbWluKSA6ICgyICogcykgLyAobCArIHMpO1xuXG5cdHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YucmdiID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdIC8gNjA7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGxldCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCBoaSA9IE1hdGguZmxvb3IoaCkgJSA2O1xuXG5cdGNvbnN0IGYgPSBoIC0gTWF0aC5mbG9vcihoKTtcblx0Y29uc3QgcCA9IDI1NSAqIHYgKiAoMSAtIHMpO1xuXHRjb25zdCBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSk7XG5cdGNvbnN0IHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKTtcblx0diAqPSAyNTU7XG5cblx0c3dpdGNoIChoaSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHJldHVybiBbdiwgdCwgcF07XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cmV0dXJuIFtxLCB2LCBwXTtcblx0XHRjYXNlIDI6XG5cdFx0XHRyZXR1cm4gW3AsIHYsIHRdO1xuXHRcdGNhc2UgMzpcblx0XHRcdHJldHVybiBbcCwgcSwgdl07XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cmV0dXJuIFt0LCBwLCB2XTtcblx0XHRjYXNlIDU6XG5cdFx0XHRyZXR1cm4gW3YsIHAsIHFdO1xuXHR9XG59O1xuXG5jb252ZXJ0Lmhzdi5oc2wgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF07XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IHZtaW4gPSBNYXRoLm1heCh2LCAwLjAxKTtcblx0bGV0IHNsO1xuXHRsZXQgbDtcblxuXHRsID0gKDIgLSBzKSAqIHY7XG5cdGNvbnN0IGxtaW4gPSAoMiAtIHMpICogdm1pbjtcblx0c2wgPSBzICogdm1pbjtcblx0c2wgLz0gKGxtaW4gPD0gMSkgPyBsbWluIDogMiAtIGxtaW47XG5cdHNsID0gc2wgfHwgMDtcblx0bCAvPSAyO1xuXG5cdHJldHVybiBbaCwgc2wgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5jb252ZXJ0Lmh3Yi5yZ2IgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IGggPSBod2JbMF0gLyAzNjA7XG5cdGxldCB3aCA9IGh3YlsxXSAvIDEwMDtcblx0bGV0IGJsID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCByYXRpbyA9IHdoICsgYmw7XG5cdGxldCBmO1xuXG5cdC8vIFdoICsgYmwgY2FudCBiZSA+IDFcblx0aWYgKHJhdGlvID4gMSkge1xuXHRcdHdoIC89IHJhdGlvO1xuXHRcdGJsIC89IHJhdGlvO1xuXHR9XG5cblx0Y29uc3QgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuXHRjb25zdCB2ID0gMSAtIGJsO1xuXHRmID0gNiAqIGggLSBpO1xuXG5cdGlmICgoaSAmIDB4MDEpICE9PSAwKSB7XG5cdFx0ZiA9IDEgLSBmO1xuXHR9XG5cblx0Y29uc3QgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvblxuXG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXHRzd2l0Y2ggKGkpIHtcblx0XHRkZWZhdWx0OlxuXHRcdGNhc2UgNjpcblx0XHRjYXNlIDA6IHIgPSB2OyAgZyA9IG47ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMTogciA9IG47ICBnID0gdjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAyOiByID0gd2g7IGcgPSB2OyAgYiA9IG47IGJyZWFrO1xuXHRcdGNhc2UgMzogciA9IHdoOyBnID0gbjsgIGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDQ6IHIgPSBuOyAgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA1OiByID0gdjsgIGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQuY215ay5yZ2IgPSBmdW5jdGlvbiAoY215aykge1xuXHRjb25zdCBjID0gY215a1swXSAvIDEwMDtcblx0Y29uc3QgbSA9IGNteWtbMV0gLyAxMDA7XG5cdGNvbnN0IHkgPSBjbXlrWzJdIC8gMTAwO1xuXHRjb25zdCBrID0gY215a1szXSAvIDEwMDtcblxuXHRjb25zdCByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGcgPSAxIC0gTWF0aC5taW4oMSwgbSAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgYiA9IDEgLSBNYXRoLm1pbigxLCB5ICogKDEgLSBrKSArIGspO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5yZ2IgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGNvbnN0IHggPSB4eXpbMF0gLyAxMDA7XG5cdGNvbnN0IHkgPSB4eXpbMV0gLyAxMDA7XG5cdGNvbnN0IHogPSB4eXpbMl0gLyAxMDA7XG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cblx0ciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuXHRnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcblx0YiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAociAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiByICogMTIuOTI7XG5cblx0ZyA9IGcgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoZyAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBnICogMTIuOTI7XG5cblx0YiA9IGIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoYiAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBiICogMTIuOTI7XG5cblx0ciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcblx0ZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcblx0YiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoubGFiID0gZnVuY3Rpb24gKHh5eikge1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQubGFiLnh5eiA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IHg7XG5cdGxldCB5O1xuXHRsZXQgejtcblxuXHR5ID0gKGwgKyAxNikgLyAxMTY7XG5cdHggPSBhIC8gNTAwICsgeTtcblx0eiA9IHkgLSBiIC8gMjAwO1xuXG5cdGNvbnN0IHkyID0geSAqKiAzO1xuXHRjb25zdCB4MiA9IHggKiogMztcblx0Y29uc3QgejIgPSB6ICoqIDM7XG5cdHkgPSB5MiA+IDAuMDA4ODU2ID8geTIgOiAoeSAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR4ID0geDIgPiAwLjAwODg1NiA/IHgyIDogKHggLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eiA9IHoyID4gMC4wMDg4NTYgPyB6MiA6ICh6IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cblx0eCAqPSA5NS4wNDc7XG5cdHkgKj0gMTAwO1xuXHR6ICo9IDEwOC44ODM7XG5cblx0cmV0dXJuIFt4LCB5LCB6XTtcbn07XG5cbmNvbnZlcnQubGFiLmxjaCA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IGg7XG5cblx0Y29uc3QgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuXHRoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG5cblx0cmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmNvbnZlcnQubGNoLmxhYiA9IGZ1bmN0aW9uIChsY2gpIHtcblx0Y29uc3QgbCA9IGxjaFswXTtcblx0Y29uc3QgYyA9IGxjaFsxXTtcblx0Y29uc3QgaCA9IGxjaFsyXTtcblxuXHRjb25zdCBociA9IGggLyAzNjAgKiAyICogTWF0aC5QSTtcblx0Y29uc3QgYSA9IGMgKiBNYXRoLmNvcyhocik7XG5cdGNvbnN0IGIgPSBjICogTWF0aC5zaW4oaHIpO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncywgc2F0dXJhdGlvbiA9IG51bGwpIHtcblx0Y29uc3QgW3IsIGcsIGJdID0gYXJncztcblx0bGV0IHZhbHVlID0gc2F0dXJhdGlvbiA9PT0gbnVsbCA/IGNvbnZlcnQucmdiLmhzdihhcmdzKVsyXSA6IHNhdHVyYXRpb247IC8vIEhzdiAtPiBhbnNpMTYgb3B0aW1pemF0aW9uXG5cblx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gNTApO1xuXG5cdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdHJldHVybiAzMDtcblx0fVxuXG5cdGxldCBhbnNpID0gMzBcblx0XHQrICgoTWF0aC5yb3VuZChiIC8gMjU1KSA8PCAyKVxuXHRcdHwgKE1hdGgucm91bmQoZyAvIDI1NSkgPDwgMSlcblx0XHR8IE1hdGgucm91bmQociAvIDI1NSkpO1xuXG5cdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdGFuc2kgKz0gNjA7XG5cdH1cblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuaHN2LmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIE9wdGltaXphdGlvbiBoZXJlOyB3ZSBhbHJlYWR5IGtub3cgdGhlIHZhbHVlIGFuZCBkb24ndCBuZWVkIHRvIGdldFxuXHQvLyBpdCBjb252ZXJ0ZWQgZm9yIHVzLlxuXHRyZXR1cm4gY29udmVydC5yZ2IuYW5zaTE2KGNvbnZlcnQuaHN2LnJnYihhcmdzKSwgYXJnc1syXSk7XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMjU2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgciA9IGFyZ3NbMF07XG5cdGNvbnN0IGcgPSBhcmdzWzFdO1xuXHRjb25zdCBiID0gYXJnc1syXTtcblxuXHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0aWYgKHIgPT09IGcgJiYgZyA9PT0gYikge1xuXHRcdGlmIChyIDwgOCkge1xuXHRcdFx0cmV0dXJuIDE2O1xuXHRcdH1cblxuXHRcdGlmIChyID4gMjQ4KSB7XG5cdFx0XHRyZXR1cm4gMjMxO1xuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLnJvdW5kKCgociAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0fVxuXG5cdGNvbnN0IGFuc2kgPSAxNlxuXHRcdCsgKDM2ICogTWF0aC5yb3VuZChyIC8gMjU1ICogNSkpXG5cdFx0KyAoNiAqIE1hdGgucm91bmQoZyAvIDI1NSAqIDUpKVxuXHRcdCsgTWF0aC5yb3VuZChiIC8gMjU1ICogNSk7XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0LmFuc2kxNi5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRsZXQgY29sb3IgPSBhcmdzICUgMTA7XG5cblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoY29sb3IgPT09IDAgfHwgY29sb3IgPT09IDcpIHtcblx0XHRpZiAoYXJncyA+IDUwKSB7XG5cdFx0XHRjb2xvciArPSAzLjU7XG5cdFx0fVxuXG5cdFx0Y29sb3IgPSBjb2xvciAvIDEwLjUgKiAyNTU7XG5cblx0XHRyZXR1cm4gW2NvbG9yLCBjb2xvciwgY29sb3JdO1xuXHR9XG5cblx0Y29uc3QgbXVsdCA9ICh+fihhcmdzID4gNTApICsgMSkgKiAwLjU7XG5cdGNvbnN0IHIgPSAoKGNvbG9yICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgZyA9ICgoKGNvbG9yID4+IDEpICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgYiA9ICgoKGNvbG9yID4+IDIpICYgMSkgKiBtdWx0KSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5hbnNpMjU2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGFyZ3MgPj0gMjMyKSB7XG5cdFx0Y29uc3QgYyA9IChhcmdzIC0gMjMyKSAqIDEwICsgODtcblx0XHRyZXR1cm4gW2MsIGMsIGNdO1xuXHR9XG5cblx0YXJncyAtPSAxNjtcblxuXHRsZXQgcmVtO1xuXHRjb25zdCByID0gTWF0aC5mbG9vcihhcmdzIC8gMzYpIC8gNSAqIDI1NTtcblx0Y29uc3QgZyA9IE1hdGguZmxvb3IoKHJlbSA9IGFyZ3MgJSAzNikgLyA2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGIgPSAocmVtICUgNikgLyA1ICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oZXggPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBpbnRlZ2VyID0gKChNYXRoLnJvdW5kKGFyZ3NbMF0pICYgMHhGRikgPDwgMTYpXG5cdFx0KyAoKE1hdGgucm91bmQoYXJnc1sxXSkgJiAweEZGKSA8PCA4KVxuXHRcdCsgKE1hdGgucm91bmQoYXJnc1syXSkgJiAweEZGKTtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5oZXgucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgbWF0Y2ggPSBhcmdzLnRvU3RyaW5nKDE2KS5tYXRjaCgvW2EtZjAtOV17Nn18W2EtZjAtOV17M30vaSk7XG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHR9XG5cblx0bGV0IGNvbG9yU3RyaW5nID0gbWF0Y2hbMF07XG5cblx0aWYgKG1hdGNoWzBdLmxlbmd0aCA9PT0gMykge1xuXHRcdGNvbG9yU3RyaW5nID0gY29sb3JTdHJpbmcuc3BsaXQoJycpLm1hcChjaGFyID0+IHtcblx0XHRcdHJldHVybiBjaGFyICsgY2hhcjtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdGNvbnN0IGludGVnZXIgPSBwYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXHRjb25zdCByID0gKGludGVnZXIgPj4gMTYpICYgMHhGRjtcblx0Y29uc3QgZyA9IChpbnRlZ2VyID4+IDgpICYgMHhGRjtcblx0Y29uc3QgYiA9IGludGVnZXIgJiAweEZGO1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oY2cgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KE1hdGgubWF4KHIsIGcpLCBiKTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4oTWF0aC5taW4ociwgZyksIGIpO1xuXHRjb25zdCBjaHJvbWEgPSAobWF4IC0gbWluKTtcblx0bGV0IGdyYXlzY2FsZTtcblx0bGV0IGh1ZTtcblxuXHRpZiAoY2hyb21hIDwgMSkge1xuXHRcdGdyYXlzY2FsZSA9IG1pbiAvICgxIC0gY2hyb21hKTtcblx0fSBlbHNlIHtcblx0XHRncmF5c2NhbGUgPSAwO1xuXHR9XG5cblx0aWYgKGNocm9tYSA8PSAwKSB7XG5cdFx0aHVlID0gMDtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IHIpIHtcblx0XHRodWUgPSAoKGcgLSBiKSAvIGNocm9tYSkgJSA2O1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gZykge1xuXHRcdGh1ZSA9IDIgKyAoYiAtIHIpIC8gY2hyb21hO1xuXHR9IGVsc2Uge1xuXHRcdGh1ZSA9IDQgKyAociAtIGcpIC8gY2hyb21hO1xuXHR9XG5cblx0aHVlIC89IDY7XG5cdGh1ZSAlPSAxO1xuXG5cdHJldHVybiBbaHVlICogMzYwLCBjaHJvbWEgKiAxMDAsIGdyYXlzY2FsZSAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhzbC5oY2cgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IGwgPCAwLjUgPyAoMi4wICogcyAqIGwpIDogKDIuMCAqIHMgKiAoMS4wIC0gbCkpO1xuXG5cdGxldCBmID0gMDtcblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKGwgLSAwLjUgKiBjKSAvICgxLjAgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHNsWzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LmhjZyA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gcyAqIHY7XG5cdGxldCBmID0gMDtcblxuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHN2WzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLnJnYiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgaCA9IGhjZ1swXSAvIDM2MDtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRpZiAoYyA9PT0gMC4wKSB7XG5cdFx0cmV0dXJuIFtnICogMjU1LCBnICogMjU1LCBnICogMjU1XTtcblx0fVxuXG5cdGNvbnN0IHB1cmUgPSBbMCwgMCwgMF07XG5cdGNvbnN0IGhpID0gKGggJSAxKSAqIDY7XG5cdGNvbnN0IHYgPSBoaSAlIDE7XG5cdGNvbnN0IHcgPSAxIC0gdjtcblx0bGV0IG1nID0gMDtcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXHRzd2l0Y2ggKE1hdGguZmxvb3IoaGkpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSB2OyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cHVyZVswXSA9IHc7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSB3OyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cHVyZVswXSA9IHY7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IHc7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXG5cdG1nID0gKDEuMCAtIGMpICogZztcblxuXHRyZXR1cm4gW1xuXHRcdChjICogcHVyZVswXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMV0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzJdICsgbWcpICogMjU1XG5cdF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc3YgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKHYgPiAwLjApIHtcblx0XHRmID0gYyAvIHY7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgZiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc2wgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgbCA9IGcgKiAoMS4wIC0gYykgKyAwLjUgKiBjO1xuXHRsZXQgcyA9IDA7XG5cblx0aWYgKGwgPiAwLjAgJiYgbCA8IDAuNSkge1xuXHRcdHMgPSBjIC8gKDIgKiBsKTtcblx0fSBlbHNlXG5cdGlmIChsID49IDAuNSAmJiBsIDwgMS4wKSB7XG5cdFx0cyA9IGMgLyAoMiAqICgxIC0gbCkpO1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdHJldHVybiBbaGNnWzBdLCAodiAtIGMpICogMTAwLCAoMSAtIHYpICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHdiLmhjZyA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgdyA9IGh3YlsxXSAvIDEwMDtcblx0Y29uc3QgYiA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgdiA9IDEgLSBiO1xuXHRjb25zdCBjID0gdiAtIHc7XG5cdGxldCBnID0gMDtcblxuXHRpZiAoYyA8IDEpIHtcblx0XHRnID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2h3YlswXSwgYyAqIDEwMCwgZyAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmFwcGxlLnJnYiA9IGZ1bmN0aW9uIChhcHBsZSkge1xuXHRyZXR1cm4gWyhhcHBsZVswXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzFdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMl0gLyA2NTUzNSkgKiAyNTVdO1xufTtcblxuY29udmVydC5yZ2IuYXBwbGUgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHJldHVybiBbKHJnYlswXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsxXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsyXSAvIDI1NSkgKiA2NTUzNV07XG59O1xuXG5jb252ZXJ0LmdyYXkucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFthcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc2wgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gWzAsIDAsIGFyZ3NbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmhzdiA9IGNvbnZlcnQuZ3JheS5oc2w7XG5cbmNvbnZlcnQuZ3JheS5od2IgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDEwMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuY215ayA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMCwgMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkubGFiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFtncmF5WzBdLCAwLCAwXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oZXggPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRjb25zdCB2YWwgPSBNYXRoLnJvdW5kKGdyYXlbMF0gLyAxMDAgKiAyNTUpICYgMHhGRjtcblx0Y29uc3QgaW50ZWdlciA9ICh2YWwgPDwgMTYpICsgKHZhbCA8PCA4KSArIHZhbDtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5yZ2IuZ3JheSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgdmFsID0gKHJnYlswXSArIHJnYlsxXSArIHJnYlsyXSkgLyAzO1xuXHRyZXR1cm4gW3ZhbCAvIDI1NSAqIDEwMF07XG59O1xuIiwKICAgICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsCiAgICAiY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKCcuL2NvbnZlcnNpb25zJyk7XG5jb25zdCByb3V0ZSA9IHJlcXVpcmUoJy4vcm91dGUnKTtcblxuY29uc3QgY29udmVydCA9IHt9O1xuXG5jb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9ucyk7XG5cbmZ1bmN0aW9uIHdyYXBSYXcoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblx0XHRpZiAoYXJnMCA9PT0gdW5kZWZpbmVkIHx8IGFyZzAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBhcmcwO1xuXHRcdH1cblxuXHRcdGlmIChhcmcwLmxlbmd0aCA+IDEpIHtcblx0XHRcdGFyZ3MgPSBhcmcwO1xuXHRcdH1cblxuXHRcdHJldHVybiBmbihhcmdzKTtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbmZ1bmN0aW9uIHdyYXBSb3VuZGVkKGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cblx0XHRpZiAoYXJnMCA9PT0gdW5kZWZpbmVkIHx8IGFyZzAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBhcmcwO1xuXHRcdH1cblxuXHRcdGlmIChhcmcwLmxlbmd0aCA+IDEpIHtcblx0XHRcdGFyZ3MgPSBhcmcwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGZuKGFyZ3MpO1xuXG5cdFx0Ly8gV2UncmUgYXNzdW1pbmcgdGhlIHJlc3VsdCBpcyBhbiBhcnJheSBoZXJlLlxuXHRcdC8vIHNlZSBub3RpY2UgaW4gY29udmVyc2lvbnMuanM7IGRvbid0IHVzZSBib3ggdHlwZXNcblx0XHQvLyBpbiBjb252ZXJzaW9uIGZ1bmN0aW9ucy5cblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAobGV0IGxlbiA9IHJlc3VsdC5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0W2ldID0gTWF0aC5yb3VuZChyZXN1bHRbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5tb2RlbHMuZm9yRWFjaChmcm9tTW9kZWwgPT4ge1xuXHRjb252ZXJ0W2Zyb21Nb2RlbF0gPSB7fTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnY2hhbm5lbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0uY2hhbm5lbHN9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5sYWJlbHN9KTtcblxuXHRjb25zdCByb3V0ZXMgPSByb3V0ZShmcm9tTW9kZWwpO1xuXHRjb25zdCByb3V0ZU1vZGVscyA9IE9iamVjdC5rZXlzKHJvdXRlcyk7XG5cblx0cm91dGVNb2RlbHMuZm9yRWFjaCh0b01vZGVsID0+IHtcblx0XHRjb25zdCBmbiA9IHJvdXRlc1t0b01vZGVsXTtcblxuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXSA9IHdyYXBSb3VuZGVkKGZuKTtcblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0ucmF3ID0gd3JhcFJhdyhmbik7XG5cdH0pO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgcmdiID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmdiWzBdfTske3JnYlsxXX07JHtyZ2JbMl19bWA7XG59O1xuXG5jb25zdCBhbnNpMmFuc2kgPSBuID0+IG47XG5jb25zdCByZ2IycmdiID0gKHIsIGcsIGIpID0+IFtyLCBnLCBiXTtcblxuY29uc3Qgc2V0TGF6eVByb3BlcnR5ID0gKG9iamVjdCwgcHJvcGVydHksIGdldCkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoKTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xufTtcblxuLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCdjb2xvci1jb252ZXJ0Jyl9ICovXG5sZXQgY29sb3JDb252ZXJ0O1xuY29uc3QgbWFrZUR5bmFtaWNTdHlsZXMgPSAod3JhcCwgdGFyZ2V0U3BhY2UsIGlkZW50aXR5LCBpc0JhY2tncm91bmQpID0+IHtcblx0aWYgKGNvbG9yQ29udmVydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29sb3JDb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXHR9XG5cblx0Y29uc3Qgb2Zmc2V0ID0gaXNCYWNrZ3JvdW5kID8gMTAgOiAwO1xuXHRjb25zdCBzdHlsZXMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IFtzb3VyY2VTcGFjZSwgc3VpdGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9yQ29udmVydCkpIHtcblx0XHRjb25zdCBuYW1lID0gc291cmNlU3BhY2UgPT09ICdhbnNpMTYnID8gJ2Fuc2knIDogc291cmNlU3BhY2U7XG5cdFx0aWYgKHNvdXJjZVNwYWNlID09PSB0YXJnZXRTcGFjZSkge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChpZGVudGl0eSwgb2Zmc2V0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzdWl0ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoc3VpdGVbdGFyZ2V0U3BhY2VdLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIHRydWUpKTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG4vLyBNYWtlIHRoZSBleHBvcnQgaW1tdXRhYmxlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBhc3NlbWJsZVN0eWxlc1xufSk7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgVEVNUExBVEVfUkVHRVggPSAvKD86XFxcXCh1KD86W2EtZlxcZF17NH18XFx7W2EtZlxcZF17MSw2fVxcfSl8eFthLWZcXGRdezJ9fC4pKXwoPzpcXHsofik/KFxcdysoPzpcXChbXildKlxcKSk/KD86XFwuXFx3Kyg/OlxcKFteKV0qXFwpKT8pKikoPzpbIFxcdF18KD89XFxyP1xcbikpKXwoXFx9KXwoKD86LnxbXFxyXFxuXFxmXSkrPykvZ2k7XG5jb25zdCBTVFlMRV9SRUdFWCA9IC8oPzpefFxcLikoXFx3KykoPzpcXCgoW14pXSopXFwpKT8vZztcbmNvbnN0IFNUUklOR19SRUdFWCA9IC9eKFsnXCJdKSgoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqKVxcMSQvO1xuY29uc3QgRVNDQVBFX1JFR0VYID0gL1xcXFwodSg/OlthLWZcXGRdezR9fHtbYS1mXFxkXXsxLDZ9fSl8eFthLWZcXGRdezJ9fC4pfChbXlxcXFxdKS9naTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBNYXAoW1xuXHRbJ24nLCAnXFxuJ10sXG5cdFsncicsICdcXHInXSxcblx0Wyd0JywgJ1xcdCddLFxuXHRbJ2InLCAnXFxiJ10sXG5cdFsnZicsICdcXGYnXSxcblx0Wyd2JywgJ1xcdiddLFxuXHRbJzAnLCAnXFwwJ10sXG5cdFsnXFxcXCcsICdcXFxcJ10sXG5cdFsnZScsICdcXHUwMDFCJ10sXG5cdFsnYScsICdcXHUwMDA3J11cbl0pO1xuXG5mdW5jdGlvbiB1bmVzY2FwZShjKSB7XG5cdGNvbnN0IHUgPSBjWzBdID09PSAndSc7XG5cdGNvbnN0IGJyYWNrZXQgPSBjWzFdID09PSAneyc7XG5cblx0aWYgKCh1ICYmICFicmFja2V0ICYmIGMubGVuZ3RoID09PSA1KSB8fCAoY1swXSA9PT0gJ3gnICYmIGMubGVuZ3RoID09PSAzKSkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc2xpY2UoMSksIDE2KSk7XG5cdH1cblxuXHRpZiAodSAmJiBicmFja2V0KSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGMuc2xpY2UoMiwgLTEpLCAxNikpO1xuXHR9XG5cblx0cmV0dXJuIEVTQ0FQRVMuZ2V0KGMpIHx8IGM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKG5hbWUsIGFyZ3VtZW50c18pIHtcblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBhcmd1bWVudHNfLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqL2cpO1xuXHRsZXQgbWF0Y2hlcztcblxuXHRmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuXHRcdGNvbnN0IG51bWJlciA9IE51bWJlcihjaHVuayk7XG5cdFx0aWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG51bWJlcik7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hlcyA9IGNodW5rLm1hdGNoKFNUUklOR19SRUdFWCkpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobWF0Y2hlc1syXS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgKG0sIGVzY2FwZSwgY2hhcmFjdGVyKSA9PiBlc2NhcGUgPyB1bmVzY2FwZShlc2NhcGUpIDogY2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDaGFsayB0ZW1wbGF0ZSBzdHlsZSBhcmd1bWVudDogJHtjaHVua30gKGluIHN0eWxlICcke25hbWV9JylgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHlsZShzdHlsZSkge1xuXHRTVFlMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0bGV0IG1hdGNoZXM7XG5cblx0d2hpbGUgKChtYXRjaGVzID0gU1RZTEVfUkVHRVguZXhlYyhzdHlsZSkpICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgbmFtZSA9IG1hdGNoZXNbMV07XG5cblx0XHRpZiAobWF0Y2hlc1syXSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRzKG5hbWUsIG1hdGNoZXNbMl0pO1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXS5jb25jYXQoYXJncykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKSB7XG5cdGNvbnN0IGVuYWJsZWQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGxheWVyIG9mIHN0eWxlcykge1xuXHRcdGZvciAoY29uc3Qgc3R5bGUgb2YgbGF5ZXIuc3R5bGVzKSB7XG5cdFx0XHRlbmFibGVkW3N0eWxlWzBdXSA9IGxheWVyLmludmVyc2UgPyBudWxsIDogc3R5bGUuc2xpY2UoMSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBjaGFsaztcblx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGVuYWJsZWQpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHN0eWxlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHN0eWxlTmFtZSBpbiBjdXJyZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIENoYWxrIHN0eWxlOiAke3N0eWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHRjdXJyZW50ID0gc3R5bGVzLmxlbmd0aCA+IDAgPyBjdXJyZW50W3N0eWxlTmFtZV0oLi4uc3R5bGVzKSA6IGN1cnJlbnRbc3R5bGVOYW1lXTtcblx0fVxuXG5cdHJldHVybiBjdXJyZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChjaGFsaywgdGVtcG9yYXJ5KSA9PiB7XG5cdGNvbnN0IHN0eWxlcyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblx0bGV0IGNodW5rID0gW107XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblx0dGVtcG9yYXJ5LnJlcGxhY2UoVEVNUExBVEVfUkVHRVgsIChtLCBlc2NhcGVDaGFyYWN0ZXIsIGludmVyc2UsIHN0eWxlLCBjbG9zZSwgY2hhcmFjdGVyKSA9PiB7XG5cdFx0aWYgKGVzY2FwZUNoYXJhY3Rlcikge1xuXHRcdFx0Y2h1bmsucHVzaCh1bmVzY2FwZShlc2NhcGVDaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2UgaWYgKHN0eWxlKSB7XG5cdFx0XHRjb25zdCBzdHJpbmcgPSBjaHVuay5qb2luKCcnKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRjaHVua3MucHVzaChzdHlsZXMubGVuZ3RoID09PSAwID8gc3RyaW5nIDogYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShzdHJpbmcpKTtcblx0XHRcdHN0eWxlcy5wdXNoKHtpbnZlcnNlLCBzdHlsZXM6IHBhcnNlU3R5bGUoc3R5bGUpfSk7XG5cdFx0fSBlbHNlIGlmIChjbG9zZSkge1xuXHRcdFx0aWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdGb3VuZCBleHRyYW5lb3VzIH0gaW4gQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaHVua3MucHVzaChidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKGNodW5rLmpvaW4oJycpKSk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0c3R5bGVzLnBvcCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaHVuay5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0fVxuXHR9KTtcblxuXHRjaHVua3MucHVzaChjaHVuay5qb2luKCcnKSk7XG5cblx0aWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyTWVzc2FnZSA9IGBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsIGlzIG1pc3NpbmcgJHtzdHlsZXMubGVuZ3RofSBjbG9zaW5nIGJyYWNrZXQke3N0eWxlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gKFxcYH1cXGApYDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyTWVzc2FnZSk7XG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYW5zaVN0eWxlcyA9IHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJyk7XG5jb25zdCB7c3Rkb3V0OiBzdGRvdXRDb2xvciwgc3RkZXJyOiBzdGRlcnJDb2xvcn0gPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuY29uc3Qge1xuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXhcbn0gPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8vIGBzdXBwb3J0c0NvbG9yLmxldmVsYCDihpIgYGFuc2lTdHlsZXMuY29sb3JbbmFtZV1gIG1hcHBpbmdcbmNvbnN0IGxldmVsTWFwcGluZyA9IFtcblx0J2Fuc2knLFxuXHQnYW5zaScsXG5cdCdhbnNpMjU2Jyxcblx0J2Fuc2kxNm0nXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5jb25zdCBhcHBseU9wdGlvbnMgPSAob2JqZWN0LCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMubGV2ZWwgJiYgIShOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubGV2ZWwpICYmIG9wdGlvbnMubGV2ZWwgPj0gMCAmJiBvcHRpb25zLmxldmVsIDw9IDMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGxldmVsYCBvcHRpb24gc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSAwIHRvIDMnKTtcblx0fVxuXG5cdC8vIERldGVjdCBsZXZlbCBpZiBub3Qgc2V0IG1hbnVhbGx5XG5cdGNvbnN0IGNvbG9yTGV2ZWwgPSBzdGRvdXRDb2xvciA/IHN0ZG91dENvbG9yLmxldmVsIDogMDtcblx0b2JqZWN0LmxldmVsID0gb3B0aW9ucy5sZXZlbCA9PT0gdW5kZWZpbmVkID8gY29sb3JMZXZlbCA6IG9wdGlvbnMubGV2ZWw7XG59O1xuXG5jbGFzcyBDaGFsa0NsYXNzIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblx0XHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xuXHR9XG59XG5cbmNvbnN0IGNoYWxrRmFjdG9yeSA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBjaGFsayA9IHt9O1xuXHRhcHBseU9wdGlvbnMoY2hhbGssIG9wdGlvbnMpO1xuXG5cdGNoYWxrLnRlbXBsYXRlID0gKC4uLmFyZ3VtZW50c18pID0+IGNoYWxrVGFnKGNoYWxrLnRlbXBsYXRlLCAuLi5hcmd1bWVudHNfKTtcblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGssIENoYWxrLnByb3RvdHlwZSk7XG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsay50ZW1wbGF0ZSwgY2hhbGspO1xuXG5cdGNoYWxrLnRlbXBsYXRlLmNvbnN0cnVjdG9yID0gKCkgPT4ge1xuXHRcdHRocm93IG5ldyBFcnJvcignYGNoYWxrLmNvbnN0cnVjdG9yKClgIGlzIGRlcHJlY2F0ZWQuIFVzZSBgbmV3IGNoYWxrLkluc3RhbmNlKClgIGluc3RlYWQuJyk7XG5cdH07XG5cblx0Y2hhbGsudGVtcGxhdGUuSW5zdGFuY2UgPSBDaGFsa0NsYXNzO1xuXG5cdHJldHVybiBjaGFsay50ZW1wbGF0ZTtcbn07XG5cbmZ1bmN0aW9uIENoYWxrKG9wdGlvbnMpIHtcblx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcbn1cblxuZm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoYW5zaVN0eWxlcykpIHtcblx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgY3JlYXRlU3R5bGVyKHN0eWxlLm9wZW4sIHN0eWxlLmNsb3NlLCB0aGlzLl9zdHlsZXIpLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzdHlsZU5hbWUsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdFx0fVxuXHR9O1xufVxuXG5zdHlsZXMudmlzaWJsZSA9IHtcblx0Z2V0KCkge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIHRoaXMuX3N0eWxlciwgdHJ1ZSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd2aXNpYmxlJywge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdH1cbn07XG5cbmNvbnN0IHVzZWRNb2RlbHMgPSBbJ3JnYicsICdoZXgnLCAna2V5d29yZCcsICdoc2wnLCAnaHN2JywgJ2h3YicsICdhbnNpJywgJ2Fuc2kyNTYnXTtcblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdHN0eWxlc1ttb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuY29sb3JbbGV2ZWxNYXBwaW5nW2xldmVsXV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmNvbG9yLmNsb3NlLCB0aGlzLl9zdHlsZXIpO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRjb25zdCBiZ01vZGVsID0gJ2JnJyArIG1vZGVsWzBdLnRvVXBwZXJDYXNlKCkgKyBtb2RlbC5zbGljZSgxKTtcblx0c3R5bGVzW2JnTW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihhbnNpU3R5bGVzLmJnQ29sb3JbbGV2ZWxNYXBwaW5nW2xldmVsXV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuY29uc3QgcHJvdG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcygoKSA9PiB7fSwge1xuXHQuLi5zdHlsZXMsXG5cdGxldmVsOiB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2VuZXJhdG9yLmxldmVsO1xuXHRcdH0sXG5cdFx0c2V0KGxldmVsKSB7XG5cdFx0XHR0aGlzLl9nZW5lcmF0b3IubGV2ZWwgPSBsZXZlbDtcblx0XHR9XG5cdH1cbn0pO1xuXG5jb25zdCBjcmVhdGVTdHlsZXIgPSAob3BlbiwgY2xvc2UsIHBhcmVudCkgPT4ge1xuXHRsZXQgb3BlbkFsbDtcblx0bGV0IGNsb3NlQWxsO1xuXHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRvcGVuQWxsID0gb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlO1xuXHR9IGVsc2Uge1xuXHRcdG9wZW5BbGwgPSBwYXJlbnQub3BlbkFsbCArIG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZSArIHBhcmVudC5jbG9zZUFsbDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0b3Blbixcblx0XHRjbG9zZSxcblx0XHRvcGVuQWxsLFxuXHRcdGNsb3NlQWxsLFxuXHRcdHBhcmVudFxuXHR9O1xufTtcblxuY29uc3QgY3JlYXRlQnVpbGRlciA9IChzZWxmLCBfc3R5bGVyLCBfaXNFbXB0eSkgPT4ge1xuXHRjb25zdCBidWlsZGVyID0gKC4uLmFyZ3VtZW50c18pID0+IHtcblx0XHRpZiAoaXNBcnJheShhcmd1bWVudHNfWzBdKSAmJiBpc0FycmF5KGFyZ3VtZW50c19bMF0ucmF3KSkge1xuXHRcdFx0Ly8gQ2FsbGVkIGFzIGEgdGVtcGxhdGUgbGl0ZXJhbCwgZm9yIGV4YW1wbGU6IGNoYWxrLnJlZGAyICsgMyA9IHtib2xkICR7MiszfX1gXG5cdFx0XHRyZXR1cm4gYXBwbHlTdHlsZShidWlsZGVyLCBjaGFsa1RhZyhidWlsZGVyLCAuLi5hcmd1bWVudHNfKSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2luZ2xlIGFyZ3VtZW50IGlzIGhvdCBwYXRoLCBpbXBsaWNpdCBjb2VyY2lvbiBpcyBmYXN0ZXIgdGhhbiBhbnl0aGluZ1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIChhcmd1bWVudHNfLmxlbmd0aCA9PT0gMSkgPyAoJycgKyBhcmd1bWVudHNfWzBdKSA6IGFyZ3VtZW50c18uam9pbignICcpKTtcblx0fTtcblxuXHQvLyBXZSBhbHRlciB0aGUgcHJvdG90eXBlIGJlY2F1c2Ugd2UgbXVzdCByZXR1cm4gYSBmdW5jdGlvbiwgYnV0IHRoZXJlIGlzXG5cdC8vIG5vIHdheSB0byBjcmVhdGUgYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IHByb3RvdHlwZVxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVpbGRlciwgcHJvdG8pO1xuXG5cdGJ1aWxkZXIuX2dlbmVyYXRvciA9IHNlbGY7XG5cdGJ1aWxkZXIuX3N0eWxlciA9IF9zdHlsZXI7XG5cdGJ1aWxkZXIuX2lzRW1wdHkgPSBfaXNFbXB0eTtcblxuXHRyZXR1cm4gYnVpbGRlcjtcbn07XG5cbmNvbnN0IGFwcGx5U3R5bGUgPSAoc2VsZiwgc3RyaW5nKSA9PiB7XG5cdGlmIChzZWxmLmxldmVsIDw9IDAgfHwgIXN0cmluZykge1xuXHRcdHJldHVybiBzZWxmLl9pc0VtcHR5ID8gJycgOiBzdHJpbmc7XG5cdH1cblxuXHRsZXQgc3R5bGVyID0gc2VsZi5fc3R5bGVyO1xuXG5cdGlmIChzdHlsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCB7b3BlbkFsbCwgY2xvc2VBbGx9ID0gc3R5bGVyO1xuXHRpZiAoc3RyaW5nLmluZGV4T2YoJ1xcdTAwMUInKSAhPT0gLTEpIHtcblx0XHR3aGlsZSAoc3R5bGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFJlcGxhY2UgYW55IGluc3RhbmNlcyBhbHJlYWR5IHByZXNlbnQgd2l0aCBhIHJlLW9wZW5pbmcgY29kZVxuXHRcdFx0Ly8gb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1bnRpbCBzYWlkIGNsb3NpbmcgY29kZVxuXHRcdFx0Ly8gd2lsbCBiZSBjb2xvcmVkLCBhbmQgdGhlIHJlc3Qgd2lsbCBzaW1wbHkgYmUgJ3BsYWluJy5cblx0XHRcdHN0cmluZyA9IHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdHlsZXIuY2xvc2UsIHN0eWxlci5vcGVuKTtcblxuXHRcdFx0c3R5bGVyID0gc3R5bGVyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHQvLyBXZSBjYW4gbW92ZSBib3RoIG5leHQgYWN0aW9ucyBvdXQgb2YgbG9vcCwgYmVjYXVzZSByZW1haW5pbmcgYWN0aW9ucyBpbiBsb29wIHdvbid0IGhhdmVcblx0Ly8gYW55L3Zpc2libGUgZWZmZWN0IG9uIHBhcnRzIHdlIGFkZCBoZXJlLiBDbG9zZSB0aGUgc3R5bGluZyBiZWZvcmUgYSBsaW5lYnJlYWsgYW5kIHJlb3BlblxuXHQvLyBhZnRlciBuZXh0IGxpbmUgdG8gZml4IGEgYmxlZWQgaXNzdWUgb24gbWFjT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsay9wdWxsLzkyXG5cdGNvbnN0IGxmSW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG5cdGlmIChsZkluZGV4ICE9PSAtMSkge1xuXHRcdHN0cmluZyA9IHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIGNsb3NlQWxsLCBvcGVuQWxsLCBsZkluZGV4KTtcblx0fVxuXG5cdHJldHVybiBvcGVuQWxsICsgc3RyaW5nICsgY2xvc2VBbGw7XG59O1xuXG5sZXQgdGVtcGxhdGU7XG5jb25zdCBjaGFsa1RhZyA9IChjaGFsaywgLi4uc3RyaW5ncykgPT4ge1xuXHRjb25zdCBbZmlyc3RTdHJpbmddID0gc3RyaW5ncztcblxuXHRpZiAoIWlzQXJyYXkoZmlyc3RTdHJpbmcpIHx8ICFpc0FycmF5KGZpcnN0U3RyaW5nLnJhdykpIHtcblx0XHQvLyBJZiBjaGFsaygpIHdhcyBjYWxsZWQgYnkgaXRzZWxmIG9yIHdpdGggYSBzdHJpbmcsXG5cdFx0Ly8gcmV0dXJuIHRoZSBzdHJpbmcgaXRzZWxmIGFzIGEgc3RyaW5nLlxuXHRcdHJldHVybiBzdHJpbmdzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGNvbnN0IGFyZ3VtZW50c18gPSBzdHJpbmdzLnNsaWNlKDEpO1xuXHRjb25zdCBwYXJ0cyA9IFtmaXJzdFN0cmluZy5yYXdbMF1dO1xuXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3RTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRwYXJ0cy5wdXNoKFxuXHRcdFx0U3RyaW5nKGFyZ3VtZW50c19baSAtIDFdKS5yZXBsYWNlKC9be31cXFxcXS9nLCAnXFxcXCQmJyksXG5cdFx0XHRTdHJpbmcoZmlyc3RTdHJpbmcucmF3W2ldKVxuXHRcdCk7XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZXMnKTtcblx0fVxuXG5cdHJldHVybiB0ZW1wbGF0ZShjaGFsaywgcGFydHMuam9pbignJykpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2hhbGsucHJvdG90eXBlLCBzdHlsZXMpO1xuXG5jb25zdCBjaGFsayA9IENoYWxrKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3VwcG9ydHNDb2xvciA9IHN0ZG91dENvbG9yO1xuY2hhbGsuc3RkZXJyID0gQ2hhbGsoe2xldmVsOiBzdGRlcnJDb2xvciA/IHN0ZGVyckNvbG9yLmxldmVsIDogMH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbmNoYWxrLnN0ZGVyci5zdXBwb3J0c0NvbG9yID0gc3RkZXJyQ29sb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gY2hhbGs7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy50b0pzb24gPSBleHBvcnRzLmZyb21Kc29uID0gZXhwb3J0cy5ERUZBVUxUX1RIRU1FID0gZXhwb3J0cy5wbGFpbiA9IHZvaWQgMDtcbnZhciBjaGFsa18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjaGFsa1wiKSk7XG4vKipcbiAqIElkZW50aXR5IGZ1bmN0aW9uIGZvciB0b2tlbnMgdGhhdCBzaG91bGQgbm90IGJlIHN0eWxlZCAocmV0dXJucyB0aGUgaW5wdXQgc3RyaW5nIGFzLWlzKS5cbiAqIFNlZSBbW1RoZW1lXV0gZm9yIGFuIGV4YW1wbGUuXG4gKi9cbnZhciBwbGFpbiA9IGZ1bmN0aW9uIChjb2RlUGFydCkgeyByZXR1cm4gY29kZVBhcnQ7IH07XG5leHBvcnRzLnBsYWluID0gcGxhaW47XG4vKipcbiAqIFRoZSBkZWZhdWx0IHRoZW1lLiBJdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZSBqdXN0IGluZGl2aWR1YWwga2V5cy5cbiAqL1xuZXhwb3J0cy5ERUZBVUxUX1RIRU1FID0ge1xuICAgIC8qKlxuICAgICAqIGtleXdvcmQgaW4gYSByZWd1bGFyIEFsZ29sLXN0eWxlIGxhbmd1YWdlXG4gICAgICovXG4gICAga2V5d29yZDogY2hhbGtfMS5kZWZhdWx0LmJsdWUsXG4gICAgLyoqXG4gICAgICogYnVpbHQtaW4gb3IgbGlicmFyeSBvYmplY3QgKGNvbnN0YW50LCBjbGFzcywgZnVuY3Rpb24pXG4gICAgICovXG4gICAgYnVpbHRfaW46IGNoYWxrXzEuZGVmYXVsdC5jeWFuLFxuICAgIC8qKlxuICAgICAqIHVzZXItZGVmaW5lZCB0eXBlIGluIGEgbGFuZ3VhZ2Ugd2l0aCBmaXJzdC1jbGFzcyBzeW50YWN0aWNhbGx5IHNpZ25pZmljYW50IHR5cGVzLCBsaWtlXG4gICAgICogSGFza2VsbFxuICAgICAqL1xuICAgIHR5cGU6IGNoYWxrXzEuZGVmYXVsdC5jeWFuLmRpbSxcbiAgICAvKipcbiAgICAgKiBzcGVjaWFsIGlkZW50aWZpZXIgZm9yIGEgYnVpbHQtaW4gdmFsdWUgKFwidHJ1ZVwiLCBcImZhbHNlXCIsIFwibnVsbFwiKVxuICAgICAqL1xuICAgIGxpdGVyYWw6IGNoYWxrXzEuZGVmYXVsdC5ibHVlLFxuICAgIC8qKlxuICAgICAqIG51bWJlciwgaW5jbHVkaW5nIHVuaXRzIGFuZCBtb2RpZmllcnMsIGlmIGFueS5cbiAgICAgKi9cbiAgICBudW1iZXI6IGNoYWxrXzEuZGVmYXVsdC5ncmVlbixcbiAgICAvKipcbiAgICAgKiBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIHJlZ2V4cDogY2hhbGtfMS5kZWZhdWx0LnJlZCxcbiAgICAvKipcbiAgICAgKiBsaXRlcmFsIHN0cmluZywgY2hhcmFjdGVyXG4gICAgICovXG4gICAgc3RyaW5nOiBjaGFsa18xLmRlZmF1bHQucmVkLFxuICAgIC8qKlxuICAgICAqIHBhcnNlZCBzZWN0aW9uIGluc2lkZSBhIGxpdGVyYWwgc3RyaW5nXG4gICAgICovXG4gICAgc3Vic3Q6IGV4cG9ydHMucGxhaW4sXG4gICAgLyoqXG4gICAgICogc3ltYm9saWMgY29uc3RhbnQsIGludGVybmVkIHN0cmluZywgZ290byBsYWJlbFxuICAgICAqL1xuICAgIHN5bWJvbDogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiBjbGFzcyBvciBjbGFzcy1sZXZlbCBkZWNsYXJhdGlvbiAoaW50ZXJmYWNlcywgdHJhaXRzLCBtb2R1bGVzLCBldGMpXG4gICAgICovXG4gICAgY2xhc3M6IGNoYWxrXzEuZGVmYXVsdC5ibHVlLFxuICAgIC8qKlxuICAgICAqIGZ1bmN0aW9uIG9yIG1ldGhvZCBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uOiBjaGFsa18xLmRlZmF1bHQueWVsbG93LFxuICAgIC8qKlxuICAgICAqIG5hbWUgb2YgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIGF0IHRoZSBwbGFjZSBvZiBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIHRpdGxlOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIGJsb2NrIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cyAocGFyYW1ldGVycykgYXQgdGhlIHBsYWNlIG9mIGRlY2xhcmF0aW9uXG4gICAgICovXG4gICAgcGFyYW1zOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIGNvbW1lbnRcbiAgICAgKi9cbiAgICBjb21tZW50OiBjaGFsa18xLmRlZmF1bHQuZ3JlZW4sXG4gICAgLyoqXG4gICAgICogZG9jdW1lbnRhdGlvbiBtYXJrdXAgd2l0aGluIGNvbW1lbnRzXG4gICAgICovXG4gICAgZG9jdGFnOiBjaGFsa18xLmRlZmF1bHQuZ3JlZW4sXG4gICAgLyoqXG4gICAgICogZmxhZ3MsIG1vZGlmaWVycywgYW5ub3RhdGlvbnMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBldGNcbiAgICAgKi9cbiAgICBtZXRhOiBjaGFsa18xLmRlZmF1bHQuZ3JleSxcbiAgICAvKipcbiAgICAgKiBrZXl3b3JkIG9yIGJ1aWx0LWluIHdpdGhpbiBtZXRhIGNvbnN0cnVjdFxuICAgICAqL1xuICAgICdtZXRhLWtleXdvcmQnOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIHN0cmluZyB3aXRoaW4gbWV0YSBjb25zdHJ1Y3RcbiAgICAgKi9cbiAgICAnbWV0YS1zdHJpbmcnOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIGhlYWRpbmcgb2YgYSBzZWN0aW9uIGluIGEgY29uZmlnIGZpbGUsIGhlYWRpbmcgaW4gdGV4dCBtYXJrdXBcbiAgICAgKi9cbiAgICBzZWN0aW9uOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIFhNTC9IVE1MIHRhZ1xuICAgICAqL1xuICAgIHRhZzogY2hhbGtfMS5kZWZhdWx0LmdyZXksXG4gICAgLyoqXG4gICAgICogbmFtZSBvZiBhbiBYTUwgdGFnLCB0aGUgZmlyc3Qgd29yZCBpbiBhbiBzLWV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBuYW1lOiBjaGFsa18xLmRlZmF1bHQuYmx1ZSxcbiAgICAvKipcbiAgICAgKiBzLWV4cHJlc3Npb24gbmFtZSBmcm9tIHRoZSBsYW5ndWFnZSBzdGFuZGFyZCBsaWJyYXJ5XG4gICAgICovXG4gICAgJ2J1aWx0aW4tbmFtZSc6IGV4cG9ydHMucGxhaW4sXG4gICAgLyoqXG4gICAgICogbmFtZSBvZiBhbiBhdHRyaWJ1dGUgd2l0aCBubyBsYW5ndWFnZSBkZWZpbmVkIHNlbWFudGljcyAoa2V5cyBpbiBKU09OLCBzZXR0aW5nIG5hbWVzIGluXG4gICAgICogLmluaSksIGFsc28gc3ViLWF0dHJpYnV0ZSB3aXRoaW4gYW5vdGhlciBoaWdobGlnaHRlZCBvYmplY3QsIGxpa2UgWE1MIHRhZ1xuICAgICAqL1xuICAgIGF0dHI6IGNoYWxrXzEuZGVmYXVsdC5jeWFuLFxuICAgIC8qKlxuICAgICAqIG5hbWUgb2YgYW4gYXR0cmlidXRlIGZvbGxvd2VkIGJ5IGEgc3RydWN0dXJlZCB2YWx1ZSBwYXJ0LCBsaWtlIENTUyBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgYXR0cmlidXRlOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIHZhcmlhYmxlIGluIGEgY29uZmlnIG9yIGEgdGVtcGxhdGUgZmlsZSwgZW52aXJvbm1lbnQgdmFyIGV4cGFuc2lvbiBpbiBhIHNjcmlwdFxuICAgICAqL1xuICAgIHZhcmlhYmxlOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIGxpc3QgaXRlbSBidWxsZXQgaW4gdGV4dCBtYXJrdXBcbiAgICAgKi9cbiAgICBidWxsZXQ6IGV4cG9ydHMucGxhaW4sXG4gICAgLyoqXG4gICAgICogY29kZSBibG9jayBpbiB0ZXh0IG1hcmt1cFxuICAgICAqL1xuICAgIGNvZGU6IGV4cG9ydHMucGxhaW4sXG4gICAgLyoqXG4gICAgICogZW1waGFzaXMgaW4gdGV4dCBtYXJrdXBcbiAgICAgKi9cbiAgICBlbXBoYXNpczogY2hhbGtfMS5kZWZhdWx0Lml0YWxpYyxcbiAgICAvKipcbiAgICAgKiBzdHJvbmcgZW1waGFzaXMgaW4gdGV4dCBtYXJrdXBcbiAgICAgKi9cbiAgICBzdHJvbmc6IGNoYWxrXzEuZGVmYXVsdC5ib2xkLFxuICAgIC8qKlxuICAgICAqIG1hdGhlbWF0aWNhbCBmb3JtdWxhIGluIHRleHQgbWFya3VwXG4gICAgICovXG4gICAgZm9ybXVsYTogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiBoeXBlcmxpbmsgaW4gdGV4dCBtYXJrdXBcbiAgICAgKi9cbiAgICBsaW5rOiBjaGFsa18xLmRlZmF1bHQudW5kZXJsaW5lLFxuICAgIC8qKlxuICAgICAqIHF1b3RhdGlvbiBpbiB0ZXh0IG1hcmt1cFxuICAgICAqL1xuICAgIHF1b3RlOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIHRhZyBzZWxlY3RvciBpbiBDU1NcbiAgICAgKi9cbiAgICAnc2VsZWN0b3ItdGFnJzogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiAjaWQgc2VsZWN0b3IgaW4gQ1NTXG4gICAgICovXG4gICAgJ3NlbGVjdG9yLWlkJzogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiAuY2xhc3Mgc2VsZWN0b3IgaW4gQ1NTXG4gICAgICovXG4gICAgJ3NlbGVjdG9yLWNsYXNzJzogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiBbYXR0cl0gc2VsZWN0b3IgaW4gQ1NTXG4gICAgICovXG4gICAgJ3NlbGVjdG9yLWF0dHInOiBleHBvcnRzLnBsYWluLFxuICAgIC8qKlxuICAgICAqIDpwc2V1ZG8gc2VsZWN0b3IgaW4gQ1NTXG4gICAgICovXG4gICAgJ3NlbGVjdG9yLXBzZXVkbyc6IGV4cG9ydHMucGxhaW4sXG4gICAgLyoqXG4gICAgICogdGFnIG9mIGEgdGVtcGxhdGUgbGFuZ3VhZ2VcbiAgICAgKi9cbiAgICAndGVtcGxhdGUtdGFnJzogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiB2YXJpYWJsZSBpbiBhIHRlbXBsYXRlIGxhbmd1YWdlXG4gICAgICovXG4gICAgJ3RlbXBsYXRlLXZhcmlhYmxlJzogZXhwb3J0cy5wbGFpbixcbiAgICAvKipcbiAgICAgKiBhZGRlZCBvciBjaGFuZ2VkIGxpbmUgaW4gYSBkaWZmXG4gICAgICovXG4gICAgYWRkaXRpb246IGNoYWxrXzEuZGVmYXVsdC5ncmVlbixcbiAgICAvKipcbiAgICAgKiBkZWxldGVkIGxpbmUgaW4gYSBkaWZmXG4gICAgICovXG4gICAgZGVsZXRpb246IGNoYWxrXzEuZGVmYXVsdC5yZWQsXG4gICAgLyoqXG4gICAgICogdGhpbmdzIG5vdCBtYXRjaGVkIGJ5IGFueSB0b2tlblxuICAgICAqL1xuICAgIGRlZmF1bHQ6IGV4cG9ydHMucGxhaW4sXG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIFtbSnNvblRoZW1lXV0gd2l0aCBzdHJpbmcgdmFsdWVzIHRvIGEgW1tUaGVtZV1dIHdpdGggZm9ybWF0dGVyIGZ1bmN0aW9ucy4gVXNlZCBieSBbW3BhcnNlXV0uXG4gKi9cbmZ1bmN0aW9uIGZyb21Kc29uKGpzb24pIHtcbiAgICB2YXIgdGhlbWUgPSB7fTtcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gT2JqZWN0LmtleXMoanNvbik7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBfYVtfaV07XG4gICAgICAgIHZhciBzdHlsZSA9IGpzb25ba2V5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGUpKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICB0aGVtZVtrZXldID0gc3R5bGUucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91cywgY3VycmVudCkgeyByZXR1cm4gKGN1cnJlbnQgPT09ICdwbGFpbicgPyBleHBvcnRzLnBsYWluIDogcHJldmlvdXNbY3VycmVudF0pOyB9LCBjaGFsa18xLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgO1xuICAgICAgICAgICAgdGhlbWVba2V5XSA9IGNoYWxrXzEuZGVmYXVsdFtzdHlsZV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoZW1lO1xufVxuZXhwb3J0cy5mcm9tSnNvbiA9IGZyb21Kc29uO1xuLyoqXG4gKiBDb252ZXJ0cyBhIFtbVGhlbWVdXSB3aXRoIGZvcm1hdHRlciBmdW5jdGlvbnMgdG8gYSBbW0pzb25UaGVtZV1dIHdpdGggc3RyaW5nIHZhbHVlcy4gVXNlZCBieSBbW3N0cmluZ2lmeV1dLlxuICovXG5mdW5jdGlvbiB0b0pzb24odGhlbWUpIHtcbiAgICB2YXIganNvblRoZW1lID0ge307XG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKGpzb25UaGVtZSk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBfYVtfaV07XG4gICAgICAgIHZhciBzdHlsZSA9IGpzb25UaGVtZVtrZXldO1xuICAgICAgICBqc29uVGhlbWVba2V5XSA9IHN0eWxlLl9zdHlsZXM7XG4gICAgfVxuICAgIHJldHVybiBqc29uVGhlbWU7XG59XG5leHBvcnRzLnRvSnNvbiA9IHRvSnNvbjtcbi8qKlxuICogU3RyaW5naWZpZXMgYSBbW1RoZW1lXV0gd2l0aCBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIGEgSlNPTiBzdHJpbmcuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG4gKiBpbXBvcnQge3N0cmluZ2lmeX0gZnJvbSAnY2xpLWhpZ2hsaWdodCc7XG4gKiBpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG4gKlxuICogY29uc3QgbXlUaGVtZTogVGhlbWUgPSB7XG4gKiAgICAga2V5d29yZDogY2hhbGsucmVkLmJvbGQsXG4gKiAgICAgYWRkaXRpb246IGNoYWxrLmdyZWVuLFxuICogICAgIGRlbGV0aW9uOiBjaGFsay5yZWQuc3RyaWtldGhyb3VnaCxcbiAqICAgICBudW1iZXI6IHBsYWluXG4gKiB9XG4gKiBjb25zdCBqc29uID0gc3RyaW5naWZ5KG15VGhlbWUpO1xuICogZnMud3JpdGVGaWxlKCdteXRoZW1lLmpzb24nLCBqc29uLCAoZXJyOiBhbnkpID0+IHtcbiAqICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG4gKiAgICAgY29uc29sZS5sb2coJ1RoZW1lIHNhdmVkJyk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkodGhlbWUpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodG9Kc29uKHRoZW1lKSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbi8qKlxuICogUGFyc2VzIGEgSlNPTiBzdHJpbmcgaW50byBhIFtbVGhlbWVdXSB3aXRoIGZvcm1hdHRlciBmdW5jdGlvbnMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbiAqIGltcG9ydCB7cGFyc2UsIGhpZ2hsaWdodH0gZnJvbSAnY2xpLWhpZ2hsaWdodCc7XG4gKlxuICogZnMucmVhZEZpbGUoJ215dGhlbWUuanNvbicsICd1dGY4JywgKGVycjogYW55LCBqc29uOiBzdHJpbmcpICA9PiB7XG4gKiAgICAgaWYgKGVycikgdGhyb3cgZXJyO1xuICogICAgIGNvbnN0IGNvZGUgPSBoaWdobGlnaHQoJ1NFTEVDVCAqIEZST00gdGFibGUnLCB7dGhlbWU6IHBhcnNlKGpzb24pfSk7XG4gKiAgICAgY29uc29sZS5sb2coY29kZSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBwYXJzZShqc29uKSB7XG4gICAgcmV0dXJuIGZyb21Kc29uKEpTT04ucGFyc2UoanNvbikpO1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VwcG9ydHNMYW5ndWFnZSA9IGV4cG9ydHMubGlzdExhbmd1YWdlcyA9IGV4cG9ydHMuaGlnaGxpZ2h0ID0gdm9pZCAwO1xudmFyIGhsanMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImhpZ2hsaWdodC5qc1wiKSk7XG52YXIgcGFyc2U1ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXJzZTVcIikpO1xudmFyIHBhcnNlNV9odG1scGFyc2VyMl90cmVlX2FkYXB0ZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicGFyc2U1LWh0bWxwYXJzZXIyLXRyZWUtYWRhcHRlclwiKSk7XG52YXIgdGhlbWVfMSA9IHJlcXVpcmUoXCIuL3RoZW1lXCIpO1xuZnVuY3Rpb24gY29sb3JpemVOb2RlKG5vZGUsIHRoZW1lLCBjb250ZXh0KSB7XG4gICAgaWYgKHRoZW1lID09PSB2b2lkIDApIHsgdGhlbWUgPSB7fTsgfVxuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoZW1lLmRlZmF1bHQgfHwgdGhlbWVfMS5ERUZBVUxUX1RIRU1FLmRlZmF1bHQgfHwgdGhlbWVfMS5wbGFpbikodGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd0YWcnOiB7XG4gICAgICAgICAgICB2YXIgaGxqc0NsYXNzID0gL2hsanMtKFxcdyspLy5leGVjKG5vZGUuYXR0cmlicy5jbGFzcyk7XG4gICAgICAgICAgICBpZiAoaGxqc0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VuXzEgPSBobGpzQ2xhc3NbMV07XG4gICAgICAgICAgICAgICAgdmFyIG5vZGVEYXRhID0gbm9kZS5jaGlsZE5vZGVzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbG9yaXplTm9kZShub2RlLCB0aGVtZSwgdG9rZW5fMSk7IH0pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoZW1lW3Rva2VuXzFdIHx8IHRoZW1lXzEuREVGQVVMVF9USEVNRVt0b2tlbl8xXSB8fCB0aGVtZV8xLnBsYWluKShub2RlRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIGRhdGEgaXRzZWxmIHdoZW4gdGhlIGNsYXNzIG5hbWUgaXNuJ3QgcHJlZml4ZWQgd2l0aCBhIGhpZ2hsaWdodC5qcyB0b2tlbiBwcmVmaXguXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGNvbW1vbiBpbiBpbnN0YW5jZXMgb2Ygc3VibGFuZ3VhZ2VzIChKU1gsIE1hcmtkb3duIENvZGUgQmxvY2tzLCBldGMuKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbG9yaXplTm9kZShub2RlLCB0aGVtZSk7IH0pLmpvaW4oJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBub2RlIHR5cGUgJyArIG5vZGUudHlwZSk7XG59XG5mdW5jdGlvbiBjb2xvcml6ZShjb2RlLCB0aGVtZSkge1xuICAgIGlmICh0aGVtZSA9PT0gdm9pZCAwKSB7IHRoZW1lID0ge307IH1cbiAgICB2YXIgZnJhZ21lbnQgPSBwYXJzZTUucGFyc2VGcmFnbWVudChjb2RlLCB7XG4gICAgICAgIHRyZWVBZGFwdGVyOiBwYXJzZTVfaHRtbHBhcnNlcjJfdHJlZV9hZGFwdGVyXzEuZGVmYXVsdCxcbiAgICB9KTtcbiAgICByZXR1cm4gZnJhZ21lbnQuY2hpbGROb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbG9yaXplTm9kZShub2RlLCB0aGVtZSk7IH0pLmpvaW4oJycpO1xufVxuLyoqXG4gKiBBcHBseSBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIGBjb2RlYCB3aXRoIEFTQ0lJIGNvbG9yIGNvZGVzLiBUaGUgbGFuZ3VhZ2UgaXMgYXV0b21hdGljYWxseVxuICogZGV0ZWN0ZWQgaWYgbm90IHNldC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHtoaWdobGlnaHR9IGZyb20gJ2NsaS1oaWdobGlnaHQnO1xuICogaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuICpcbiAqIGZzLnJlYWRGaWxlKCdwYWNrYWdlLmpzb24nLCAndXRmOCcsIChlcnI6IGFueSwganNvbjogc3RyaW5nKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ3BhY2thZ2UuanNvbjonKTtcbiAqICAgICBjb25zb2xlLmxvZyhoaWdobGlnaHQoanNvbikpO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY29kZSBUaGUgY29kZSB0byBoaWdobGlnaHRcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0KGNvZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBodG1sO1xuICAgIGlmIChvcHRpb25zLmxhbmd1YWdlKSB7XG4gICAgICAgIGh0bWwgPSBobGpzLmhpZ2hsaWdodChjb2RlLCB7IGxhbmd1YWdlOiBvcHRpb25zLmxhbmd1YWdlLCBpZ25vcmVJbGxlZ2Fsczogb3B0aW9ucy5pZ25vcmVJbGxlZ2FscyB9KS52YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGh0bWwgPSBobGpzLmhpZ2hsaWdodEF1dG8oY29kZSwgb3B0aW9ucy5sYW5ndWFnZVN1YnNldCkudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcml6ZShodG1sLCBvcHRpb25zLnRoZW1lKTtcbn1cbmV4cG9ydHMuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuLyoqXG4gKiBSZXR1cm5zIGFsbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzXG4gKi9cbmZ1bmN0aW9uIGxpc3RMYW5ndWFnZXMoKSB7XG4gICAgcmV0dXJuIGhsanMubGlzdExhbmd1YWdlcygpO1xufVxuZXhwb3J0cy5saXN0TGFuZ3VhZ2VzID0gbGlzdExhbmd1YWdlcztcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBsYW5ndWFnZSBpcyBzdXBwb3J0ZWRcbiAqIEBwYXJhbSBuYW1lIEEgbGFuZ3VhZ2UgbmFtZSwgYWxpYXMgb3IgZmlsZSBleHRlbnNpb25cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydHNMYW5ndWFnZShuYW1lKSB7XG4gICAgcmV0dXJuICEhaGxqcy5nZXRMYW5ndWFnZShuYW1lKTtcbn1cbmV4cG9ydHMuc3VwcG9ydHNMYW5ndWFnZSA9IHN1cHBvcnRzTGFuZ3VhZ2U7XG5leHBvcnRzLmRlZmF1bHQgPSBoaWdobGlnaHQ7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdGhlbWVcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxMyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogSXMgdGhpcyB2YWx1ZSBkZWZpbmVkIGFuZCBub3QgbnVsbD9cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGRlZmluZWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgIT09IG51bGw7XG59O1xuXG4vKipcbiAqIElzIHRoaXMgdmFsdWUgYW4gb2JqZWN0P1xuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgb2JqZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59O1xuXG4vKipcbiAqIElzIHRoaXMgdmFsdWUgYSBwbGFpbiBvYmplY3Q/XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBwbGFpbk9iamVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJztcbn07XG5cbi8qKlxuICogSXMgdGhpcyB2YWx1ZSBhIGZ1bmN0aW9uP1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgZm4gPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xufTtcblxuLyoqXG4gKiBJcyB0aGlzIHZhbHVlIGEgYm9vbGVhbj9cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGJvb2wgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnYm9vbGVhbic7XG59O1xuXG4vKipcbiAqIElzIHRoaXMgdmFsdWUgYSBCdWZmZXIgb2JqZWN0P1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgYnVmZmVyID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgQnVmZmVyO1xufTtcblxuLyoqXG4gKiBJcyB0aGlzIHZhbHVlIGEgdHlwZWQgYXJyYXkgb2JqZWN0Py4gRS5nLiBVaW50OEFycmF5IG9yIFVpbnQ4Q2xhbXBlZEFycmF5P1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgdHlwZWRBcnJheSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgaWYgKGRlZmluZWQodmFsKSkge1xuICAgIHN3aXRjaCAodmFsLmNvbnN0cnVjdG9yKSB7XG4gICAgICBjYXNlIFVpbnQ4QXJyYXk6XG4gICAgICBjYXNlIFVpbnQ4Q2xhbXBlZEFycmF5OlxuICAgICAgY2FzZSBJbnQ4QXJyYXk6XG4gICAgICBjYXNlIFVpbnQxNkFycmF5OlxuICAgICAgY2FzZSBJbnQxNkFycmF5OlxuICAgICAgY2FzZSBVaW50MzJBcnJheTpcbiAgICAgIGNhc2UgSW50MzJBcnJheTpcbiAgICAgIGNhc2UgRmxvYXQzMkFycmF5OlxuICAgICAgY2FzZSBGbG9hdDY0QXJyYXk6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogSXMgdGhpcyB2YWx1ZSBhbiBBcnJheUJ1ZmZlciBvYmplY3Q/XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBhcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyO1xufTtcblxuLyoqXG4gKiBJcyB0aGlzIHZhbHVlIGEgbm9uLWVtcHR5IHN0cmluZz9cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHN0cmluZyA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBJcyB0aGlzIHZhbHVlIGEgcmVhbCBudW1iZXI/XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBudW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHZhbCk7XG59O1xuXG4vKipcbiAqIElzIHRoaXMgdmFsdWUgYW4gaW50ZWdlcj9cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGludGVnZXIgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbCk7XG59O1xuXG4vKipcbiAqIElzIHRoaXMgdmFsdWUgd2l0aGluIGFuIGluY2x1c2l2ZSBnaXZlbiByYW5nZT9cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGluUmFuZ2UgPSBmdW5jdGlvbiAodmFsLCBtaW4sIG1heCkge1xuICByZXR1cm4gdmFsID49IG1pbiAmJiB2YWwgPD0gbWF4O1xufTtcblxuLyoqXG4gKiBJcyB0aGlzIHZhbHVlIHdpdGhpbiB0aGUgZWxlbWVudHMgb2YgYW4gYXJyYXk/XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBpbkFycmF5ID0gZnVuY3Rpb24gKHZhbCwgbGlzdCkge1xuICByZXR1cm4gbGlzdC5pbmNsdWRlcyh2YWwpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCBhIG1lc3NhZ2UgcmVsYXRpbmcgdG8gYW4gaW52YWxpZCBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBwYXJhbWV0ZXIgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZCAtIGRlc2NyaXB0aW9uIG9mIHRoZSB0eXBlL3ZhbHVlL3JhbmdlIGV4cGVjdGVkLlxuICogQHBhcmFtIHsqfSBhY3R1YWwgLSB0aGUgdmFsdWUgcmVjZWl2ZWQuXG4gKiBAcmV0dXJucyB7RXJyb3J9IENvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgaW52YWxpZFBhcmFtZXRlckVycm9yID0gZnVuY3Rpb24gKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBgRXhwZWN0ZWQgJHtleHBlY3RlZH0gZm9yICR7bmFtZX0gYnV0IHJlY2VpdmVkICR7YWN0dWFsfSBvZiB0eXBlICR7dHlwZW9mIGFjdHVhbH1gXG4gICk7XG59O1xuXG4vKipcbiAqIEVuc3VyZXMgYW4gRXJyb3IgZnJvbSBDKysgY29udGFpbnMgYSBKUyBzdGFjay5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBuYXRpdmUgLSBFcnJvciB3aXRoIG1lc3NhZ2UgZnJvbSBDKysuXG4gKiBAcGFyYW0ge0Vycm9yfSBjb250ZXh0IC0gRXJyb3Igd2l0aCBzdGFjayBmcm9tIEpTLlxuICogQHJldHVybnMge0Vycm9yfSBFcnJvciB3aXRoIG1lc3NhZ2UgYW5kIHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbmF0aXZlRXJyb3IgPSBmdW5jdGlvbiAobmF0aXZlLCBjb250ZXh0KSB7XG4gIGNvbnRleHQubWVzc2FnZSA9IG5hdGl2ZS5tZXNzYWdlO1xuICByZXR1cm4gY29udGV4dDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkZWZpbmVkLFxuICBvYmplY3QsXG4gIHBsYWluT2JqZWN0LFxuICBmbixcbiAgYm9vbCxcbiAgYnVmZmVyLFxuICB0eXBlZEFycmF5LFxuICBhcnJheUJ1ZmZlcixcbiAgc3RyaW5nLFxuICBudW1iZXIsXG4gIGludGVnZXIsXG4gIGluUmFuZ2UsXG4gIGluQXJyYXksXG4gIGludmFsaWRQYXJhbWV0ZXJFcnJvcixcbiAgbmF0aXZlRXJyb3Jcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDE3IExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNMaW51eCA9ICgpID0+IHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCc7XG5cbmxldCByZXBvcnQgPSBudWxsO1xuY29uc3QgZ2V0UmVwb3J0ID0gKCkgPT4ge1xuICBpZiAoIXJlcG9ydCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKGlzTGludXgoKSAmJiBwcm9jZXNzLnJlcG9ydCkge1xuICAgICAgY29uc3Qgb3JpZyA9IHByb2Nlc3MucmVwb3J0LmV4Y2x1ZGVOZXR3b3JrO1xuICAgICAgcHJvY2Vzcy5yZXBvcnQuZXhjbHVkZU5ldHdvcmsgPSB0cnVlO1xuICAgICAgcmVwb3J0ID0gcHJvY2Vzcy5yZXBvcnQuZ2V0UmVwb3J0KCk7XG4gICAgICBwcm9jZXNzLnJlcG9ydC5leGNsdWRlTmV0d29yayA9IG9yaWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydCA9IHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVwb3J0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7IGlzTGludXgsIGdldFJlcG9ydCB9O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuLyoqXG4gKiBUaGUgcGF0aCB3aGVyZSB3ZSBjYW4gZmluZCB0aGUgbGRkXG4gKi9cbmNvbnN0IExERF9QQVRIID0gJy91c3IvYmluL2xkZCc7XG5cbi8qKlxuICogUmVhZCB0aGUgY29udGVudCBvZiBhIGZpbGUgc3luY2hyb25vdXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgcmVhZEZpbGVTeW5jID0gKHBhdGgpID0+IGZzLnJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKTtcblxuLyoqXG4gKiBSZWFkIHRoZSBjb250ZW50IG9mIGEgZmlsZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICovXG5jb25zdCByZWFkRmlsZSA9IChwYXRoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcsIChlcnIsIGRhdGEpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBMRERfUEFUSCxcbiAgcmVhZEZpbGVTeW5jLFxuICByZWFkRmlsZVxufTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTcgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCB7IGlzTGludXgsIGdldFJlcG9ydCB9ID0gcmVxdWlyZSgnLi9wcm9jZXNzJyk7XG5jb25zdCB7IExERF9QQVRILCByZWFkRmlsZSwgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCcuL2ZpbGVzeXN0ZW0nKTtcblxubGV0IGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG5sZXQgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG5cbmNvbnN0IGNvbW1hbmQgPSAnZ2V0Y29uZiBHTlVfTElCQ19WRVJTSU9OIDI+JjEgfHwgdHJ1ZTsgbGRkIC0tdmVyc2lvbiAyPiYxIHx8IHRydWUnO1xubGV0IGNvbW1hbmRPdXQgPSAnJztcblxuY29uc3Qgc2FmZUNvbW1hbmQgPSAoKSA9PiB7XG4gIGlmICghY29tbWFuZE91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2hpbGRQcm9jZXNzLmV4ZWMoY29tbWFuZCwgKGVyciwgb3V0KSA9PiB7XG4gICAgICAgIGNvbW1hbmRPdXQgPSBlcnIgPyAnICcgOiBvdXQ7XG4gICAgICAgIHJlc29sdmUoY29tbWFuZE91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbWFuZE91dDtcbn07XG5cbmNvbnN0IHNhZmVDb21tYW5kU3luYyA9ICgpID0+IHtcbiAgaWYgKCFjb21tYW5kT3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1hbmRPdXQgPSBjaGlsZFByb2Nlc3MuZXhlY1N5bmMoY29tbWFuZCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIGNvbW1hbmRPdXQgPSAnICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21tYW5kT3V0O1xufTtcblxuLyoqXG4gKiBBIFN0cmluZyBjb25zdGFudCBjb250YWluaW5nIHRoZSB2YWx1ZSBgZ2xpYmNgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgR0xJQkMgPSAnZ2xpYmMnO1xuXG4vKipcbiAqIEEgUmVnZXhwIGNvbnN0YW50IHRvIGdldCB0aGUgR0xJQkMgVmVyc2lvbi5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJFX0dMSUJDX1ZFUlNJT04gPSAvTElCQ1thLXowLTkgXFwtKS5dKj8oXFxkK1xcLlxcZCspL2k7XG5cbi8qKlxuICogQSBTdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgdmFsdWUgYG11c2xgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgTVVTTCA9ICdtdXNsJztcblxuY29uc3QgaXNGaWxlTXVzbCA9IChmKSA9PiBmLmluY2x1ZGVzKCdsaWJjLm11c2wtJykgfHwgZi5pbmNsdWRlcygnbGQtbXVzbC0nKTtcblxuY29uc3QgZmFtaWx5RnJvbVJlcG9ydCA9ICgpID0+IHtcbiAgY29uc3QgcmVwb3J0ID0gZ2V0UmVwb3J0KCk7XG4gIGlmIChyZXBvcnQuaGVhZGVyICYmIHJlcG9ydC5oZWFkZXIuZ2xpYmNWZXJzaW9uUnVudGltZSkge1xuICAgIHJldHVybiBHTElCQztcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShyZXBvcnQuc2hhcmVkT2JqZWN0cykpIHtcbiAgICBpZiAocmVwb3J0LnNoYXJlZE9iamVjdHMuc29tZShpc0ZpbGVNdXNsKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIGlmIChsZGQxICYmIGxkZDEuaW5jbHVkZXMoTVVTTCkpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGdldEZhbWlseUZyb21MZGRDb250ZW50ID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ211c2wnKSkge1xuICAgIHJldHVybiBNVVNMO1xuICB9XG4gIGlmIChjb250ZW50LmluY2x1ZGVzKCdHTlUgQyBMaWJyYXJ5JykpIHtcbiAgICByZXR1cm4gR0xJQkM7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBmYW1pbHlGcm9tRmlsZXN5c3RlbSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGxkZENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShMRERfUEFUSCk7XG4gICAgY2FjaGVkRmFtaWx5RmlsZXN5c3RlbSA9IGdldEZhbWlseUZyb21MZGRDb250ZW50KGxkZENvbnRlbnQpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21GaWxlc3lzdGVtU3luYyA9ICgpID0+IHtcbiAgaWYgKGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGxkZENvbnRlbnQgPSByZWFkRmlsZVN5bmMoTEREX1BBVEgpO1xuICAgIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gPSBnZXRGYW1pbHlGcm9tTGRkQ29udGVudChsZGRDb250ZW50KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgZmFtaWx5IHdoZW4gaXQgY2FuIGJlIGRldGVybWluZWQsIGBudWxsYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTw/c3RyaW5nPn1cbiAqL1xuY29uc3QgZmFtaWx5ID0gYXN5bmMgKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGF3YWl0IGZhbWlseUZyb21GaWxlc3lzdGVtKCk7XG4gICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgIGZhbWlseSA9IGZhbWlseUZyb21SZXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHNhZmVDb21tYW5kKCk7XG4gICAgICBmYW1pbHkgPSBmYW1pbHlGcm9tQ29tbWFuZChvdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFtaWx5O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWJjIGZhbWlseSB3aGVuIGl0IGNhbiBiZSBkZXRlcm1pbmVkLCBgbnVsbGAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMgez9zdHJpbmd9XG4gKi9cbmNvbnN0IGZhbWlseVN5bmMgPSAoKSA9PiB7XG4gIGxldCBmYW1pbHkgPSBudWxsO1xuICBpZiAoaXNMaW51eCgpKSB7XG4gICAgZmFtaWx5ID0gZmFtaWx5RnJvbUZpbGVzeXN0ZW1TeW5jKCk7XG4gICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgIGZhbWlseSA9IGZhbWlseUZyb21SZXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgIGNvbnN0IG91dCA9IHNhZmVDb21tYW5kU3luYygpO1xuICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXggPSBhc3luYyAoKSA9PiBpc0xpbnV4KCkgJiYgYXdhaXQgZmFtaWx5KCkgIT09IEdMSUJDO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXhTeW5jID0gKCkgPT4gaXNMaW51eCgpICYmIGZhbWlseVN5bmMoKSAhPT0gR0xJQkM7XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG4gIH1cbiAgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW0gPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGxkZENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShMRERfUEFUSCk7XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gbGRkQ29udGVudC5tYXRjaChSRV9HTElCQ19WRVJTSU9OKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBsZGRDb250ZW50Lm1hdGNoKFJFX0dMSUJDX1ZFUlNJT04pO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xufTtcblxuY29uc3QgdmVyc2lvbkZyb21SZXBvcnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcG9ydCA9IGdldFJlcG9ydCgpO1xuICBpZiAocmVwb3J0LmhlYWRlciAmJiByZXBvcnQuaGVhZGVyLmdsaWJjVmVyc2lvblJ1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVwb3J0LmhlYWRlci5nbGliY1ZlcnNpb25SdW50aW1lO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgdmVyc2lvblN1ZmZpeCA9IChzKSA9PiBzLnRyaW0oKS5zcGxpdCgvXFxzKy8pWzFdO1xuXG5jb25zdCB2ZXJzaW9uRnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxLCBsZGQyXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgoZ2V0Y29uZik7XG4gIH1cbiAgaWYgKGxkZDEgJiYgbGRkMiAmJiBsZGQxLmluY2x1ZGVzKE1VU0wpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgobGRkMik7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgdmVyc2lvbiB3aGVuIGl0IGNhbiBiZSBkZXRlcm1pbmVkLCBgbnVsbGAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge1Byb21pc2U8P3N0cmluZz59XG4gKi9cbmNvbnN0IHZlcnNpb24gPSBhc3luYyAoKSA9PiB7XG4gIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIHZlcnNpb24gPSBhd2FpdCB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW0oKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHNhZmVDb21tYW5kKCk7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbkZyb21Db21tYW5kKG91dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2ZXJzaW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWJjIHZlcnNpb24gd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCB2ZXJzaW9uU3luYyA9ICgpID0+IHtcbiAgbGV0IHZlcnNpb24gPSBudWxsO1xuICBpZiAoaXNMaW51eCgpKSB7XG4gICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMoKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IHNhZmVDb21tYW5kU3luYygpO1xuICAgICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tQ29tbWFuZChvdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBHTElCQyxcbiAgTVVTTCxcbiAgZmFtaWx5LFxuICBmYW1pbHlTeW5jLFxuICBpc05vbkdsaWJjTGludXgsXG4gIGlzTm9uR2xpYmNMaW51eFN5bmMsXG4gIHZlcnNpb24sXG4gIHZlcnNpb25TeW5jXG59O1xuIiwKICAgICJjb25zdCBkZWJ1ZyA9IChcbiAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gIHByb2Nlc3MuZW52ICYmXG4gIHByb2Nlc3MuZW52Lk5PREVfREVCVUcgJiZcbiAgL1xcYnNlbXZlclxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRylcbikgPyAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvcignU0VNVkVSJywgLi4uYXJncylcbiAgOiAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVnXG4iLAogICAgIi8vIE5vdGU6IHRoaXMgaXMgdGhlIHNlbXZlci5vcmcgdmVyc2lvbiBvZiB0aGUgc3BlYyB0aGF0IGl0IGltcGxlbWVudHNcbi8vIE5vdCBuZWNlc3NhcmlseSB0aGUgcGFja2FnZSB2ZXJzaW9uIG9mIHRoaXMgY29kZS5cbmNvbnN0IFNFTVZFUl9TUEVDX1ZFUlNJT04gPSAnMi4wLjAnXG5cbmNvbnN0IE1BWF9MRU5HVEggPSAyNTZcbmNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fFxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gOTAwNzE5OTI1NDc0MDk5MVxuXG4vLyBNYXggc2FmZSBzZWdtZW50IGxlbmd0aCBmb3IgY29lcmNpb24uXG5jb25zdCBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIID0gMTZcblxuLy8gTWF4IHNhZmUgbGVuZ3RoIGZvciBhIGJ1aWxkIGlkZW50aWZpZXIuIFRoZSBtYXggbGVuZ3RoIG1pbnVzIDYgY2hhcmFjdGVycyBmb3Jcbi8vIHRoZSBzaG9ydGVzdCB2ZXJzaW9uIHdpdGggYSBidWlsZCAwLjAuMCtCVUlMRC5cbmNvbnN0IE1BWF9TQUZFX0JVSUxEX0xFTkdUSCA9IE1BWF9MRU5HVEggLSA2XG5cbmNvbnN0IFJFTEVBU0VfVFlQRVMgPSBbXG4gICdtYWpvcicsXG4gICdwcmVtYWpvcicsXG4gICdtaW5vcicsXG4gICdwcmVtaW5vcicsXG4gICdwYXRjaCcsXG4gICdwcmVwYXRjaCcsXG4gICdwcmVyZWxlYXNlJyxcbl1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEgsXG4gIE1BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEgsXG4gIE1BWF9TQUZFX0JVSUxEX0xFTkdUSCxcbiAgTUFYX1NBRkVfSU5URUdFUixcbiAgUkVMRUFTRV9UWVBFUyxcbiAgU0VNVkVSX1NQRUNfVkVSU0lPTixcbiAgRkxBR19JTkNMVURFX1BSRVJFTEVBU0U6IDBiMDAxLFxuICBGTEFHX0xPT1NFOiAwYjAxMCxcbn1cbiIsCiAgICAiY29uc3Qge1xuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9MRU5HVEgsXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJylcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHt9XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG5jb25zdCByZSA9IGV4cG9ydHMucmUgPSBbXVxuY29uc3Qgc2FmZVJlID0gZXhwb3J0cy5zYWZlUmUgPSBbXVxuY29uc3Qgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxuY29uc3QgdCA9IGV4cG9ydHMudCA9IHt9XG5sZXQgUiA9IDBcblxuY29uc3QgTEVUVEVSREFTSE5VTUJFUiA9ICdbYS16QS1aMC05LV0nXG5cbi8vIFJlcGxhY2Ugc29tZSBncmVlZHkgcmVnZXggdG9rZW5zIHRvIHByZXZlbnQgcmVnZXggZG9zIGlzc3Vlcy4gVGhlc2UgcmVnZXggYXJlXG4vLyB1c2VkIGludGVybmFsbHkgdmlhIHRoZSBzYWZlUmUgb2JqZWN0IHNpbmNlIGFsbCBpbnB1dHMgaW4gdGhpcyBsaWJyYXJ5IGdldFxuLy8gbm9ybWFsaXplZCBmaXJzdCB0byB0cmltIGFuZCBjb2xsYXBzZSBhbGwgZXh0cmEgd2hpdGVzcGFjZS4gVGhlIG9yaWdpbmFsXG4vLyByZWdleGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlcmxhbmQgY29uc3VtcHRpb24gYW5kIGxvd2VyIGxldmVsIHVzYWdlLiBBXG4vLyBmdXR1cmUgYnJlYWtpbmcgY2hhbmdlIGNvdWxkIGV4cG9ydCB0aGUgc2FmZXIgcmVnZXggb25seSB3aXRoIGEgbm90ZSB0aGF0XG4vLyBhbGwgaW5wdXQgc2hvdWxkIGhhdmUgZXh0cmEgd2hpdGVzcGFjZSByZW1vdmVkLlxuY29uc3Qgc2FmZVJlZ2V4UmVwbGFjZW1lbnRzID0gW1xuICBbJ1xcXFxzJywgMV0sXG4gIFsnXFxcXGQnLCBNQVhfTEVOR1RIXSxcbiAgW0xFVFRFUkRBU0hOVU1CRVIsIE1BWF9TQUZFX0JVSUxEX0xFTkdUSF0sXG5dXG5cbmNvbnN0IG1ha2VTYWZlUmVnZXggPSAodmFsdWUpID0+IHtcbiAgZm9yIChjb25zdCBbdG9rZW4sIG1heF0gb2Ygc2FmZVJlZ2V4UmVwbGFjZW1lbnRzKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgLnNwbGl0KGAke3Rva2VufSpgKS5qb2luKGAke3Rva2VufXswLCR7bWF4fX1gKVxuICAgICAgLnNwbGl0KGAke3Rva2VufStgKS5qb2luKGAke3Rva2VufXsxLCR7bWF4fX1gKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG5jb25zdCBjcmVhdGVUb2tlbiA9IChuYW1lLCB2YWx1ZSwgaXNHbG9iYWwpID0+IHtcbiAgY29uc3Qgc2FmZSA9IG1ha2VTYWZlUmVnZXgodmFsdWUpXG4gIGNvbnN0IGluZGV4ID0gUisrXG4gIGRlYnVnKG5hbWUsIGluZGV4LCB2YWx1ZSlcbiAgdFtuYW1lXSA9IGluZGV4XG4gIHNyY1tpbmRleF0gPSB2YWx1ZVxuICByZVtpbmRleF0gPSBuZXcgUmVnRXhwKHZhbHVlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbiAgc2FmZVJlW2luZGV4XSA9IG5ldyBSZWdFeHAoc2FmZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBjYW4gYmUgdXNlZCBmb3IgdG9rZW5pemluZyxcbi8vIHZhbGlkYXRpbmcsIGFuZCBwYXJzaW5nIFNlbVZlciB2ZXJzaW9uIHN0cmluZ3MuXG5cbi8vICMjIE51bWVyaWMgSWRlbnRpZmllclxuLy8gQSBzaW5nbGUgYDBgLCBvciBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuXG5cbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUicsICcwfFsxLTldXFxcXGQqJylcbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUkxPT1NFJywgJ1xcXFxkKycpXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdOT05OVU1FUklDSURFTlRJRklFUicsIGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmApXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT04nLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OTE9PU0UnLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb24gSWRlbnRpZmllclxuLy8gQSBudW1lcmljIGlkZW50aWZpZXIsIG9yIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllci5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VJREVOVElGSUVSJywgYCg/OiR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdfSlgKVxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRScsIGAoPzoke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdXG59fCR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdfSlgKVxuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uXG4vLyBIeXBoZW4sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGRvdC1zZXBhcmF0ZWQgcHJlLXJlbGVhc2UgdmVyc2lvblxuLy8gaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFJywgYCg/Oi0oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl1cbn0oPzpcXFxcLiR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdfSkqKSlgKVxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUxPT1NFJywgYCg/Oi0/KCR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV1cbn0oPzpcXFxcLiR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV19KSopKWApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhIElkZW50aWZpZXJcbi8vIEFueSBjb21iaW5hdGlvbiBvZiBkaWdpdHMsIGxldHRlcnMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdCVUlMRElERU5USUZJRVInLCBgJHtMRVRURVJEQVNITlVNQkVSfStgKVxuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YVxuLy8gUGx1cyBzaWduLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwZXJpb2Qtc2VwYXJhdGVkIGJ1aWxkIG1ldGFkYXRhXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxEJywgYCg/OlxcXFwrKCR7c3JjW3QuQlVJTERJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5CVUlMRElERU5USUZJRVJdfSkqKSlgKVxuXG4vLyAjIyBGdWxsIFZlcnNpb24gU3RyaW5nXG4vLyBBIG1haW4gdmVyc2lvbiwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhIHByZS1yZWxlYXNlIHZlcnNpb24gYW5kXG4vLyBidWlsZCBtZXRhZGF0YS5cblxuLy8gTm90ZSB0aGF0IHRoZSBvbmx5IG1ham9yLCBtaW5vciwgcGF0Y2gsIGFuZCBwcmUtcmVsZWFzZSBzZWN0aW9ucyBvZlxuLy8gdGhlIHZlcnNpb24gc3RyaW5nIGFyZSBjYXB0dXJpbmcgZ3JvdXBzLiAgVGhlIGJ1aWxkIG1ldGFkYXRhIGlzIG5vdCBhXG4vLyBjYXB0dXJpbmcgZ3JvdXAsIGJlY2F1c2UgaXQgc2hvdWxkIG5vdCBldmVyIGJlIHVzZWQgaW4gdmVyc2lvblxuLy8gY29tcGFyaXNvbi5cblxuY3JlYXRlVG9rZW4oJ0ZVTExQTEFJTicsIGB2PyR7c3JjW3QuTUFJTlZFUlNJT05dXG59JHtzcmNbdC5QUkVSRUxFQVNFXX0/JHtcbiAgc3JjW3QuQlVJTERdfT9gKVxuXG5jcmVhdGVUb2tlbignRlVMTCcsIGBeJHtzcmNbdC5GVUxMUExBSU5dfSRgKVxuXG4vLyBsaWtlIGZ1bGwsIGJ1dCBhbGxvd3MgdjEuMi4zIGFuZCA9MS4yLjMsIHdoaWNoIHBlb3BsZSBkbyBzb21ldGltZXMuXG4vLyBhbHNvLCAxLjAuMGFscGhhMSAocHJlcmVsZWFzZSB3aXRob3V0IHRoZSBoeXBoZW4pIHdoaWNoIGlzIHByZXR0eVxuLy8gY29tbW9uIGluIHRoZSBucG0gcmVnaXN0cnkuXG5jcmVhdGVUb2tlbignTE9PU0VQTEFJTicsIGBbdj1cXFxcc10qJHtzcmNbdC5NQUlOVkVSU0lPTkxPT1NFXVxufSR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0/JHtcbiAgc3JjW3QuQlVJTERdfT9gKVxuXG5jcmVhdGVUb2tlbignTE9PU0UnLCBgXiR7c3JjW3QuTE9PU0VQTEFJTl19JGApXG5cbmNyZWF0ZVRva2VuKCdHVExUJywgJygoPzo8fD4pPz0/KScpXG5cbi8vIFNvbWV0aGluZyBsaWtlIFwiMi4qXCIgb3IgXCIxLjIueFwiLlxuLy8gTm90ZSB0aGF0IFwieC54XCIgaXMgYSB2YWxpZCB4UmFuZ2UgaWRlbnRpZmVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwKICAgICIvLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLAogICAgImNvbnN0IG51bWVyaWMgPSAvXlswLTldKyQvXG5jb25zdCBjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4ge1xuICBjb25zdCBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIGNvbnN0IGJudW0gPSBudW1lcmljLnRlc3QoYilcblxuICBpZiAoYW51bSAmJiBibnVtKSB7XG4gICAgYSA9ICthXG4gICAgYiA9ICtiXG4gIH1cblxuICByZXR1cm4gYSA9PT0gYiA/IDBcbiAgICA6IChhbnVtICYmICFibnVtKSA/IC0xXG4gICAgOiAoYm51bSAmJiAhYW51bSkgPyAxXG4gICAgOiBhIDwgYiA/IC0xXG4gICAgOiAxXG59XG5cbmNvbnN0IHJjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4gY29tcGFyZUlkZW50aWZpZXJzKGIsIGEpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLAogICAgImNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNsYXNzIFNlbVZlciB7XG4gIGNvbnN0cnVjdG9yICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKVxuXG4gICAgaWYgKHZlcnNpb24gaW5zdGFuY2VvZiBTZW1WZXIpIHtcbiAgICAgIGlmICh2ZXJzaW9uLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgICB2ZXJzaW9uLmluY2x1ZGVQcmVyZWxlYXNlID09PSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgICAgcmV0dXJuIHZlcnNpb25cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnZlcnNpb25cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCB2ZXJzaW9uLiBNdXN0IGJlIGEgc3RyaW5nLiBHb3QgdHlwZSBcIiR7dHlwZW9mIHZlcnNpb259XCIuYClcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbi5sZW5ndGggPiBNQVhfTEVOR1RIKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgdmVyc2lvbiBpcyBsb25nZXIgdGhhbiAke01BWF9MRU5HVEh9IGNoYXJhY3RlcnNgXG4gICAgICApXG4gICAgfVxuXG4gICAgZGVidWcoJ1NlbVZlcicsIHZlcnNpb24sIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICAvLyB0aGlzIGlzbid0IGFjdHVhbGx5IHJlbGV2YW50IGZvciB2ZXJzaW9ucywgYnV0IGtlZXAgaXQgc28gdGhhdCB3ZVxuICAgIC8vIGRvbid0IHJ1biBpbnRvIHRyb3VibGUgcGFzc2luZyB0aGlzLm9wdGlvbnMgYXJvdW5kLlxuICAgIHRoaXMuaW5jbHVkZVByZXJlbGVhc2UgPSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2VcblxuICAgIGNvbnN0IG0gPSB2ZXJzaW9uLnRyaW0oKS5tYXRjaChvcHRpb25zLmxvb3NlID8gcmVbdC5MT09TRV0gOiByZVt0LkZVTExdKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFZlcnNpb246ICR7dmVyc2lvbn1gKVxuICAgIH1cblxuICAgIHRoaXMucmF3ID0gdmVyc2lvblxuXG4gICAgLy8gdGhlc2UgYXJlIGFjdHVhbGx5IG51bWJlcnNcbiAgICB0aGlzLm1ham9yID0gK21bMV1cbiAgICB0aGlzLm1pbm9yID0gK21bMl1cbiAgICB0aGlzLnBhdGNoID0gK21bM11cblxuICAgIGlmICh0aGlzLm1ham9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1ham9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtYWpvciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5taW5vciA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5taW5vciA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWlub3IgdmVyc2lvbicpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGF0Y2ggPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMucGF0Y2ggPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBhdGNoIHZlcnNpb24nKVxuICAgIH1cblxuICAgIC8vIG51bWJlcmlmeSBhbnkgcHJlcmVsZWFzZSBudW1lcmljIGlkc1xuICAgIGlmICghbVs0XSkge1xuICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVyZWxlYXNlID0gbVs0XS5zcGxpdCgnLicpLm1hcCgoaWQpID0+IHtcbiAgICAgICAgaWYgKC9eWzAtOV0rJC8udGVzdChpZCkpIHtcbiAgICAgICAgICBjb25zdCBudW0gPSAraWRcbiAgICAgICAgICBpZiAobnVtID49IDAgJiYgbnVtIDwgTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICAgICAgcmV0dXJuIG51bVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5idWlsZCA9IG1bNV0gPyBtWzVdLnNwbGl0KCcuJykgOiBbXVxuICAgIHRoaXMuZm9ybWF0KClcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gYCR7dGhpcy5tYWpvcn0uJHt0aGlzLm1pbm9yfS4ke3RoaXMucGF0Y2h9YFxuICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZlcnNpb24gKz0gYC0ke3RoaXMucHJlcmVsZWFzZS5qb2luKCcuJyl9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvblxuICB9XG5cbiAgY29tcGFyZSAob3RoZXIpIHtcbiAgICBkZWJ1ZygnU2VtVmVyLmNvbXBhcmUnLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucywgb3RoZXIpXG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBpZiAodHlwZW9mIG90aGVyID09PSAnc3RyaW5nJyAmJiBvdGhlciA9PT0gdGhpcy52ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICBpZiAob3RoZXIudmVyc2lvbiA9PT0gdGhpcy52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBhcmVNYWluKG90aGVyKSB8fCB0aGlzLmNvbXBhcmVQcmUob3RoZXIpXG4gIH1cblxuICBjb21wYXJlTWFpbiAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5tYWpvciwgb3RoZXIubWFqb3IpIHx8XG4gICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5taW5vciwgb3RoZXIubWlub3IpIHx8XG4gICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5wYXRjaCwgb3RoZXIucGF0Y2gpXG4gICAgKVxuICB9XG5cbiAgY29tcGFyZVByZSAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIC8vIE5PVCBoYXZpbmcgYSBwcmVyZWxlYXNlIGlzID4gaGF2aW5nIG9uZVxuICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoICYmICFvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiBvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnByZXJlbGVhc2UubGVuZ3RoICYmICFvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICBsZXQgaSA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBhID0gdGhpcy5wcmVyZWxlYXNlW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIucHJlcmVsZWFzZVtpXVxuICAgICAgZGVidWcoJ3ByZXJlbGVhc2UgY29tcGFyZScsIGksIGEsIGIpXG4gICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkICYmIGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBlbHNlIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfSBlbHNlIGlmIChhID09PSBiKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tcGFyZUlkZW50aWZpZXJzKGEsIGIpXG4gICAgICB9XG4gICAgfSB3aGlsZSAoKytpKVxuICB9XG5cbiAgY29tcGFyZUJ1aWxkIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMuYnVpbGRbaV1cbiAgICAgIGNvbnN0IGIgPSBvdGhlci5idWlsZFtpXVxuICAgICAgZGVidWcoJ2J1aWxkIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIC8vIHByZW1pbm9yIHdpbGwgYnVtcCB0aGUgdmVyc2lvbiB1cCB0byB0aGUgbmV4dCBtaW5vciByZWxlYXNlLCBhbmQgaW1tZWRpYXRlbHlcbiAgLy8gZG93biB0byBwcmUtcmVsZWFzZS4gcHJlbWFqb3IgYW5kIHByZXBhdGNoIHdvcmsgdGhlIHNhbWUgd2F5LlxuICBpbmMgKHJlbGVhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKSB7XG4gICAgc3dpdGNoIChyZWxlYXNlKSB7XG4gICAgICBjYXNlICdwcmVtYWpvcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVtaW5vcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYWxyZWFkeSBhIHByZXJlbGVhc2UsIGl0IHdpbGwgYnVtcCB0byB0aGUgbmV4dCB2ZXJzaW9uXG4gICAgICAgIC8vIGRyb3AgYW55IHByZXJlbGVhc2VzIHRoYXQgbWlnaHQgYWxyZWFkeSBleGlzdCwgc2luY2UgdGhleSBhcmUgbm90XG4gICAgICAgIC8vIHJlbGV2YW50IGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMuaW5jKCdwYXRjaCcsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYSBub24tcHJlcmVsZWFzZSB2ZXJzaW9uLCB0aGlzIGFjdHMgdGhlIHNhbWUgYXNcbiAgICAgIC8vIHByZXBhdGNoLlxuICAgICAgY2FzZSAncHJlcmVsZWFzZSc6XG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmMoJ3ByZScsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtYWpvcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWFqb3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1ham9yLlxuICAgICAgICAvLyAxLjAuMC01IGJ1bXBzIHRvIDEuMC4wXG4gICAgICAgIC8vIDEuMS4wIGJ1bXBzIHRvIDIuMC4wXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLm1pbm9yICE9PSAwIHx8XG4gICAgICAgICAgdGhpcy5wYXRjaCAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW11cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHByZS1taW5vciB2ZXJzaW9uLCBidW1wIHVwIHRvIHRoZSBzYW1lIG1pbm9yIHZlcnNpb24uXG4gICAgICAgIC8vIE90aGVyd2lzZSBpbmNyZW1lbnQgbWlub3IuXG4gICAgICAgIC8vIDEuMi4wLTUgYnVtcHMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjEgYnVtcHMgdG8gMS4zLjBcbiAgICAgICAgaWYgKHRoaXMucGF0Y2ggIT09IDAgfHwgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiwgaXQgd2lsbCBpbmNyZW1lbnQgdGhlIHBhdGNoLlxuICAgICAgICAvLyBJZiBpdCBpcyBhIHByZS1yZWxlYXNlIGl0IHdpbGwgYnVtcCB1cCB0byB0aGUgc2FtZSBwYXRjaCB2ZXJzaW9uLlxuICAgICAgICAvLyAxLjIuMC01IHBhdGNoZXMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjAgcGF0Y2hlcyB0byAxLjIuMVxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucGF0Y2grK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIHB1YmxpY2x5LlxuICAgICAgLy8gMS4wLjAgJ3ByZScgd291bGQgYmVjb21lIDEuMC4wLTAgd2hpY2ggaXMgdGhlIHdyb25nIGRpcmVjdGlvbi5cbiAgICAgIGNhc2UgJ3ByZSc6IHtcbiAgICAgICAgY29uc3QgYmFzZSA9IE51bWJlcihpZGVudGlmaWVyQmFzZSkgPyAxIDogMFxuXG4gICAgICAgIGlmICghaWRlbnRpZmllciAmJiBpZGVudGlmaWVyQmFzZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGlzIGVtcHR5JylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW2Jhc2VdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGkgPSB0aGlzLnByZXJlbGVhc2UubGVuZ3RoXG4gICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlcmVsZWFzZVtpXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlW2ldKytcbiAgICAgICAgICAgICAgaSA9IC0yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gZGlkbid0IGluY3JlbWVudCBhbnl0aGluZ1xuICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IHRoaXMucHJlcmVsZWFzZS5qb2luKCcuJykgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlLnB1c2goYmFzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLjEgYnVtcHMgdG8gMS4yLjAtYmV0YS4yLFxuICAgICAgICAgIC8vIDEuMi4wLWJldGEuZm9vYmx6IG9yIDEuMi4wLWJldGEgYnVtcHMgdG8gMS4yLjAtYmV0YS4wXG4gICAgICAgICAgbGV0IHByZXJlbGVhc2UgPSBbaWRlbnRpZmllciwgYmFzZV1cbiAgICAgICAgICBpZiAoaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXJdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnModGhpcy5wcmVyZWxlYXNlWzBdLCBpZGVudGlmaWVyKSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMucHJlcmVsZWFzZVsxXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiAke3JlbGVhc2V9YClcbiAgICB9XG4gICAgdGhpcy5yYXcgPSB0aGlzLmZvcm1hdCgpXG4gICAgaWYgKHRoaXMuYnVpbGQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJhdyArPSBgKyR7dGhpcy5idWlsZC5qb2luKCcuJyl9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VtVmVyXG4iLAogICAgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IHBhcnNlID0gKHZlcnNpb24sIG9wdGlvbnMsIHRocm93RXJyb3JzID0gZmFsc2UpID0+IHtcbiAgaWYgKHZlcnNpb24gaW5zdGFuY2VvZiBTZW1WZXIpIHtcbiAgICByZXR1cm4gdmVyc2lvblxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIodmVyc2lvbiwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoIXRocm93RXJyb3JzKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICB0aHJvdyBlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VcbiIsCiAgICAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBjb2VyY2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgdmVyc2lvbiA9IFN0cmluZyh2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGxldCBtYXRjaCA9IG51bGxcbiAgaWYgKCFvcHRpb25zLnJ0bCkge1xuICAgIG1hdGNoID0gdmVyc2lvbi5tYXRjaChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VGVUxMXSA6IHJlW3QuQ09FUkNFXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGaW5kIHRoZSByaWdodC1tb3N0IGNvZXJjaWJsZSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBzaGFyZVxuICAgIC8vIGEgdGVybWludXMgd2l0aCBhIG1vcmUgbGVmdC13YXJkIGNvZXJjaWJsZSBzdHJpbmcuXG4gICAgLy8gRWcsICcxLjIuMy40JyB3YW50cyB0byBjb2VyY2UgJzIuMy40Jywgbm90ICczLjQnIG9yICc0J1xuICAgIC8vIFdpdGggaW5jbHVkZVByZXJlbGVhc2Ugb3B0aW9uIHNldCwgJzEuMi4zLjQtcmMnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQtcmMnLCBub3QgJzIuMy40J1xuICAgIC8vXG4gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2hlY2tpbmcgd2l0aCBhIC9nIHJlZ2V4cFxuICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgaW5kZXggc28gYXMgdG8gcGljayB1cCBvdmVybGFwcGluZyBtYXRjaGVzLlxuICAgIC8vIFN0b3Agd2hlbiB3ZSBnZXQgYSBtYXRjaCB0aGF0IGVuZHMgYXQgdGhlIHN0cmluZyBlbmQsIHNpbmNlIG5vXG4gICAgLy8gY29lcmNpYmxlIHN0cmluZyBjYW4gYmUgbW9yZSByaWdodC13YXJkIHdpdGhvdXQgdGhlIHNhbWUgdGVybWludXMuXG4gICAgY29uc3QgY29lcmNlUnRsUmVnZXggPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VSVExGVUxMXSA6IHJlW3QuQ09FUkNFUlRMXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gY29lcmNlUnRsUmVnZXguZXhlYyh2ZXJzaW9uKSkgJiZcbiAgICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgICBuZXh0LmluZGV4ICsgbmV4dFswXS5sZW5ndGggIT09IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0gbmV4dFxuICAgICAgfVxuICAgICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIGNvZXJjZVJ0bFJlZ2V4Lmxhc3RJbmRleCA9IC0xXG4gIH1cblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBtYXRjaFsyXVxuICBjb25zdCBtaW5vciA9IG1hdGNoWzNdIHx8ICcwJ1xuICBjb25zdCBwYXRjaCA9IG1hdGNoWzRdIHx8ICcwJ1xuICBjb25zdCBwcmVyZWxlYXNlID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJiBtYXRjaFs1XSA/IGAtJHttYXRjaFs1XX1gIDogJydcbiAgY29uc3QgYnVpbGQgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzZdID8gYCske21hdGNoWzZdfWAgOiAnJ1xuXG4gIHJldHVybiBwYXJzZShgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke3ByZXJlbGVhc2V9JHtidWlsZH1gLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb2VyY2VcbiIsCiAgICAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLAogICAgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3RlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGd0ZVxuIiwKICAgICJjbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLm1heCA9IDEwMDBcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgZ2V0IChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZFxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmRlbGV0ZShrZXkpXG5cbiAgICBpZiAoIWRlbGV0ZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgY2FjaGUgaXMgZnVsbCwgZGVsZXRlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW1cbiAgICAgIGlmICh0aGlzLm1hcC5zaXplID49IHRoaXMubWF4KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5tYXAua2V5cygpLm5leHQoKS52YWx1ZVxuICAgICAgICB0aGlzLmRlbGV0ZShmaXJzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExSVUNhY2hlXG4iLAogICAgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID09PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGVxXG4iLAogICAgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbmVxID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSAhPT0gMFxubW9kdWxlLmV4cG9ydHMgPSBuZXFcbiIsCiAgICAiY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBndCA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPiAwXG5tb2R1bGUuZXhwb3J0cyA9IGd0XG4iLAogICAgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHQgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDwgMFxubW9kdWxlLmV4cG9ydHMgPSBsdFxuIiwKICAgICJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGx0ZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPD0gMFxubW9kdWxlLmV4cG9ydHMgPSBsdGVcbiIsCiAgICAiY29uc3QgZXEgPSByZXF1aXJlKCcuL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vbmVxJylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9ndCcpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2d0ZScpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4vbHQnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9sdGUnKVxuXG5jb25zdCBjbXAgPSAoYSwgb3AsIGIsIGxvb3NlKSA9PiB7XG4gIHN3aXRjaCAob3ApIHtcbiAgICBjYXNlICc9PT0nOlxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhID0gYS52ZXJzaW9uXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGIgPSBiLnZlcnNpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiBhID09PSBiXG5cbiAgICBjYXNlICchPT0nOlxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhID0gYS52ZXJzaW9uXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGIgPSBiLnZlcnNpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiBhICE9PSBiXG5cbiAgICBjYXNlICcnOlxuICAgIGNhc2UgJz0nOlxuICAgIGNhc2UgJz09JzpcbiAgICAgIHJldHVybiBlcShhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJyE9JzpcbiAgICAgIHJldHVybiBuZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+JzpcbiAgICAgIHJldHVybiBndChhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJz49JzpcbiAgICAgIHJldHVybiBndGUoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8JzpcbiAgICAgIHJldHVybiBsdChhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJzw9JzpcbiAgICAgIHJldHVybiBsdGUoYSwgYiwgbG9vc2UpXG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBvcGVyYXRvcjogJHtvcH1gKVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGNtcFxuIiwKICAgICJjb25zdCBBTlkgPSBTeW1ib2woJ1NlbVZlciBBTlknKVxuLy8gaG9pc3RlZCBjbGFzcyBmb3IgY3ljbGljIGRlcGVuZGVuY3lcbmNsYXNzIENvbXBhcmF0b3Ige1xuICBzdGF0aWMgZ2V0IEFOWSAoKSB7XG4gICAgcmV0dXJuIEFOWVxuICB9XG5cbiAgY29uc3RydWN0b3IgKGNvbXAsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBpZiAoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpIHtcbiAgICAgIGlmIChjb21wLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXAgPSBjb21wLnZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcCA9IGNvbXAudHJpbSgpLnNwbGl0KC9cXHMrLykuam9pbignICcpXG4gICAgZGVidWcoJ2NvbXBhcmF0b3InLCBjb21wLCBvcHRpb25zKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLmxvb3NlID0gISFvcHRpb25zLmxvb3NlXG4gICAgdGhpcy5wYXJzZShjb21wKVxuXG4gICAgaWYgKHRoaXMuc2VtdmVyID09PSBBTlkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcGVyYXRvciArIHRoaXMuc2VtdmVyLnZlcnNpb25cbiAgICB9XG5cbiAgICBkZWJ1ZygnY29tcCcsIHRoaXMpXG4gIH1cblxuICBwYXJzZSAoY29tcCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLm9wdGlvbnMubG9vc2UgPyByZVt0LkNPTVBBUkFUT1JMT09TRV0gOiByZVt0LkNPTVBBUkFUT1JdXG4gICAgY29uc3QgbSA9IGNvbXAubWF0Y2gocilcblxuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBjb21wYXJhdG9yOiAke2NvbXB9YClcbiAgICB9XG5cbiAgICB0aGlzLm9wZXJhdG9yID0gbVsxXSAhPT0gdW5kZWZpbmVkID8gbVsxXSA6ICcnXG4gICAgaWYgKHRoaXMub3BlcmF0b3IgPT09ICc9Jykge1xuICAgICAgdGhpcy5vcGVyYXRvciA9ICcnXG4gICAgfVxuXG4gICAgLy8gaWYgaXQgbGl0ZXJhbGx5IGlzIGp1c3QgJz4nIG9yICcnIHRoZW4gYWxsb3cgYW55dGhpbmcuXG4gICAgaWYgKCFtWzJdKSB7XG4gICAgICB0aGlzLnNlbXZlciA9IEFOWVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbXZlciA9IG5ldyBTZW1WZXIobVsyXSwgdGhpcy5vcHRpb25zLmxvb3NlKVxuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG5cbiAgdGVzdCAodmVyc2lvbikge1xuICAgIGRlYnVnKCdDb21wYXJhdG9yLnRlc3QnLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMubG9vc2UpXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSB8fCB2ZXJzaW9uID09PSBBTlkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmVyc2lvbiA9IG5ldyBTZW1WZXIodmVyc2lvbiwgdGhpcy5vcHRpb25zKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNtcCh2ZXJzaW9uLCB0aGlzLm9wZXJhdG9yLCB0aGlzLnNlbXZlciwgdGhpcy5vcHRpb25zKVxuICB9XG5cbiAgaW50ZXJzZWN0cyAoY29tcCwgb3B0aW9ucykge1xuICAgIGlmICghKGNvbXAgaW5zdGFuY2VvZiBDb21wYXJhdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBDb21wYXJhdG9yIGlzIHJlcXVpcmVkJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJycpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSYW5nZShjb21wLnZhbHVlLCBvcHRpb25zKS50ZXN0KHRoaXMudmFsdWUpXG4gICAgfSBlbHNlIGlmIChjb21wLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKGNvbXAudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMudmFsdWUsIG9wdGlvbnMpLnRlc3QoY29tcC5zZW12ZXIpXG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlcyB3aGVyZSBub3RoaW5nIGNhbiBwb3NzaWJseSBiZSBsb3dlclxuICAgIGlmIChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZSA9PT0gJzwwLjAuMC0wJyB8fCBjb21wLnZhbHVlID09PSAnPDAuMC4wLTAnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgICAgKHRoaXMudmFsdWUuc3RhcnRzV2l0aCgnPDAuMC4wJykgfHwgY29tcC52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGluY3JlYXNpbmcgKD4gb3IgPj0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBTYW1lIGRpcmVjdGlvbiBkZWNyZWFzaW5nICg8IG9yIDw9KVxuICAgIGlmICh0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gc2FtZSBTZW1WZXIgYW5kIGJvdGggc2lkZXMgYXJlIGluY2x1c2l2ZSAoPD0gb3IgPj0pXG4gICAgaWYgKFxuICAgICAgKHRoaXMuc2VtdmVyLnZlcnNpb24gPT09IGNvbXAuc2VtdmVyLnZlcnNpb24pICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykgJiYgY29tcC5vcGVyYXRvci5pbmNsdWRlcygnPScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGxlc3MgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc8JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gb3Bwb3NpdGUgZGlyZWN0aW9ucyBncmVhdGVyIHRoYW5cbiAgICBpZiAoY21wKHRoaXMuc2VtdmVyLCAnPicsIGNvbXAuc2VtdmVyLCBvcHRpb25zKSAmJlxuICAgICAgdGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc8JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tcGFyYXRvclxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuY29uc3QgY21wID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2RlYnVnJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZScpXG4iLAogICAgImNvbnN0IFNQQUNFX0NIQVJBQ1RFUlMgPSAvXFxzKy9nXG5cbi8vIGhvaXN0ZWQgY2xhc3MgZm9yIGN5Y2xpYyBkZXBlbmRlbmN5XG5jbGFzcyBSYW5nZSB7XG4gIGNvbnN0cnVjdG9yIChyYW5nZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgcmFuZ2UuaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHNldCBhbmQgcmV0dXJuXG4gICAgICB0aGlzLnJhdyA9IHJhbmdlLnZhbHVlXG4gICAgICB0aGlzLnNldCA9IFtbcmFuZ2VdXVxuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlLnRyaW0oKS5yZXBsYWNlKFNQQUNFX0NIQVJBQ1RFUlMsICcgJylcblxuICAgIC8vIEZpcnN0LCBzcGxpdCBvbiB8fFxuICAgIHRoaXMuc2V0ID0gdGhpcy5yYXdcbiAgICAgIC5zcGxpdCgnfHwnKVxuICAgICAgLy8gbWFwIHRoZSByYW5nZSB0byBhIDJkIGFycmF5IG9mIGNvbXBhcmF0b3JzXG4gICAgICAubWFwKHIgPT4gdGhpcy5wYXJzZVJhbmdlKHIudHJpbSgpKSlcbiAgICAgIC8vIHRocm93IG91dCBhbnkgY29tcGFyYXRvciBsaXN0cyB0aGF0IGFyZSBlbXB0eVxuICAgICAgLy8gdGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCBpdCB3YXMgbm90IGEgdmFsaWQgcmFuZ2UsIHdoaWNoIGlzIGFsbG93ZWRcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIGJ1dCB3aWxsIHN0aWxsIHRocm93IGlmIHRoZSBXSE9MRSByYW5nZSBpcyBpbnZhbGlkLlxuICAgICAgLmZpbHRlcihjID0+IGMubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLnNldC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgU2VtVmVyIFJhbmdlOiAke3RoaXMucmF3fWApXG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBhbnkgdGhhdCBhcmUgbm90IHRoZSBudWxsIHNldCwgdGhyb3cgb3V0IG51bGwgc2V0cy5cbiAgICBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgLy8ga2VlcCB0aGUgZmlyc3Qgb25lLCBpbiBjYXNlIHRoZXkncmUgYWxsIG51bGwgc2V0c1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnNldFswXVxuICAgICAgdGhpcy5zZXQgPSB0aGlzLnNldC5maWx0ZXIoYyA9PiAhaXNOdWxsU2V0KGNbMF0pKVxuICAgICAgaWYgKHRoaXMuc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldCA9IFtmaXJzdF1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSAqLCB0aGVuIHRoZSByYW5nZSBpcyBqdXN0ICpcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgaWYgKGMubGVuZ3RoID09PSAxICYmIGlzQW55KGNbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IFtjXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IHJhbmdlICgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSAnJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnfHwnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLnNldFtpXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbXBzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaWYgKGsgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWQgKz0gY29tcHNba10udG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvbHJ1Y2FjaGUnKVxuY29uc3QgY2FjaGUgPSBuZXcgTFJVKClcblxuY29uc3QgcGFyc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcGFyc2Utb3B0aW9ucycpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jb21wYXJhdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3Qge1xuICBzYWZlUmU6IHJlLFxuICB0LFxuICBjb21wYXJhdG9yVHJpbVJlcGxhY2UsXG4gIHRpbGRlVHJpbVJlcGxhY2UsXG4gIGNhcmV0VHJpbVJlcGxhY2UsXG59ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuY29uc3QgeyBGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSwgRkxBR19MT09TRSB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvY29uc3RhbnRzJylcblxuY29uc3QgaXNOdWxsU2V0ID0gYyA9PiBjLnZhbHVlID09PSAnPDAuMC4wLTAnXG5jb25zdCBpc0FueSA9IGMgPT4gYy52YWx1ZSA9PT0gJydcblxuLy8gdGFrZSBhIHNldCBvZiBjb21wYXJhdG9ycyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmVcbi8vIGV4aXN0cyBhIHZlcnNpb24gd2hpY2ggY2FuIHNhdGlzZnkgaXRcbmNvbnN0IGlzU2F0aXNmaWFibGUgPSAoY29tcGFyYXRvcnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWVcbiAgY29uc3QgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIGxldCB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeSgob3RoZXJDb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuY29uc3QgcGFyc2VDb21wYXJhdG9yID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ2NvbXAnLCBjb21wLCBvcHRpb25zKVxuICBjb21wID0gcmVwbGFjZUNhcmV0cyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygnY2FyZXQnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVRpbGRlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygndGlsZGVzJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VYUmFuZ2VzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCd4cmFuZ2UnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVN0YXJzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCdzdGFycycsIGNvbXApXG4gIHJldHVybiBjb21wXG59XG5cbmNvbnN0IGlzWCA9IGlkID0+ICFpZCB8fCBpZC50b0xvd2VyQ2FzZSgpID09PSAneCcgfHwgaWQgPT09ICcqJ1xuXG4vLyB+LCB+PiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIH4yLCB+Mi54LCB+Mi54LngsIH4+Miwgfj4yLnggfj4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gfjIuMCwgfjIuMC54LCB+PjIuMCwgfj4yLjAueCAtLT4gPj0yLjAuMCA8Mi4xLjAtMFxuLy8gfjEuMiwgfjEuMi54LCB+PjEuMiwgfj4xLjIueCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjEuMi4zLCB+PjEuMi4zIC0tPiA+PTEuMi4zIDwxLjMuMC0wXG4vLyB+MS4yLjAsIH4+MS4yLjAgLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4wLjAuMSAtLT4gPj0wLjAuMSA8MC4xLjAtMFxuY29uc3QgcmVwbGFjZVRpbGRlcyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVRpbGRlKGMsIG9wdGlvbnMpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3QgcmVwbGFjZVRpbGRlID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlRJTERFTE9PU0VdIDogcmVbdC5USUxERV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAoXywgTSwgbSwgcCwgcHIpID0+IHtcbiAgICBkZWJ1ZygndGlsZGUnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICBsZXQgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wIDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfSBlbHNlIGlmIChwcikge1xuICAgICAgZGVidWcoJ3JlcGxhY2VUaWxkZSBwcicsIHByKVxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB+MS4yLjMgPT0gPj0xLjIuMyA8MS4zLjAtMFxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd0aWxkZSByZXR1cm4nLCByZXQpXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBeIC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gXjIsIF4yLngsIF4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjIuMCwgXjIuMC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMS4yLCBeMS4yLnggLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4xLjIuMyAtLT4gPj0xLjIuMyA8Mi4wLjAtMFxuLy8gXjEuMi4wIC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMC4wLjEgLS0+ID49MC4wLjEgPDAuMC4yLTBcbi8vIF4wLjEuMCAtLT4gPj0wLjEuMCA8MC4yLjAtMFxuY29uc3QgcmVwbGFjZUNhcmV0cyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZUNhcmV0KGMsIG9wdGlvbnMpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3QgcmVwbGFjZUNhcmV0ID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ2NhcmV0JywgY29tcCwgb3B0aW9ucylcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LkNBUkVUTE9PU0VdIDogcmVbdC5DQVJFVF1cbiAgY29uc3QgeiA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyAnLTAnIDogJydcbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAoXywgTSwgbSwgcCwgcHIpID0+IHtcbiAgICBkZWJ1ZygnY2FyZXQnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICBsZXQgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICB9IGVsc2UgaWYgKGlzWChwKSkge1xuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlQ2FyZXQgcHInLCBwcilcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7bX0uJHsrcCArIDF9LTBgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICB9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdubyBwcicpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSR7en0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICB9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVidWcoJ2NhcmV0IHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2VzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VYUmFuZ2VzJywgY29tcCwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXBcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VYUmFuZ2UoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlWFJhbmdlID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAudHJpbSgpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5YUkFOR0VMT09TRV0gOiByZVt0LlhSQU5HRV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAocmV0LCBndGx0LCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd4UmFuZ2UnLCBjb21wLCByZXQsIGd0bHQsIE0sIG0sIHAsIHByKVxuICAgIGNvbnN0IHhNID0gaXNYKE0pXG4gICAgY29uc3QgeG0gPSB4TSB8fCBpc1gobSlcbiAgICBjb25zdCB4cCA9IHhtIHx8IGlzWChwKVxuICAgIGNvbnN0IGFueVggPSB4cFxuXG4gICAgaWYgKGd0bHQgPT09ICc9JyAmJiBhbnlYKSB7XG4gICAgICBndGx0ID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSdyZSBpbmNsdWRpbmcgcHJlcmVsZWFzZXMgaW4gdGhlIG1hdGNoLCB0aGVuIHdlIG5lZWRcbiAgICAvLyB0byBmaXggdGhpcyB0byAtMCwgdGhlIGxvd2VzdCBwb3NzaWJsZSBwcmVyZWxlYXNlIHZhbHVlXG4gICAgcHIgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG5cbiAgICBpZiAoeE0pIHtcbiAgICAgIGlmIChndGx0ID09PSAnPicgfHwgZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgaXMgYWxsb3dlZFxuICAgICAgICByZXQgPSAnPDAuMC4wLTAnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGZvcmJpZGRlblxuICAgICAgICByZXQgPSAnKidcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGd0bHQgJiYgYW55WCkge1xuICAgICAgLy8gd2Uga25vdyBwYXRjaCBpcyBhbiB4LCBiZWNhdXNlIHdlIGhhdmUgYW55IHggYXQgYWxsLlxuICAgICAgLy8gcmVwbGFjZSBYIHdpdGggMFxuICAgICAgaWYgKHhtKSB7XG4gICAgICAgIG0gPSAwXG4gICAgICB9XG4gICAgICBwID0gMFxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nKSB7XG4gICAgICAgIC8vID4xID0+ID49Mi4wLjBcbiAgICAgICAgLy8gPjEuMiA9PiA+PTEuMy4wXG4gICAgICAgIGd0bHQgPSAnPj0nXG4gICAgICAgIGlmICh4bSkge1xuICAgICAgICAgIE0gPSArTSArIDFcbiAgICAgICAgICBtID0gMFxuICAgICAgICAgIHAgPSAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbSA9ICttICsgMVxuICAgICAgICAgIHAgPSAwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3RsdCA9PT0gJzw9Jykge1xuICAgICAgICAvLyA8PTAuNy54IGlzIGFjdHVhbGx5IDwwLjguMCwgc2luY2UgYW55IDAuNy54IHNob3VsZFxuICAgICAgICAvLyBwYXNzLiAgU2ltaWxhcmx5LCA8PTcueCBpcyBhY3R1YWxseSA8OC4wLjAsIGV0Yy5cbiAgICAgICAgZ3RsdCA9ICc8J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbSA9ICttICsgMVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChndGx0ID09PSAnPCcpIHtcbiAgICAgICAgcHIgPSAnLTAnXG4gICAgICB9XG5cbiAgICAgIHJldCA9IGAke2d0bHQgKyBNfS4ke219LiR7cH0ke3ByfWBcbiAgICB9IGVsc2UgaWYgKHhtKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCR7cHJ9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmICh4cCkge1xuICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3ByXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfVxuXG4gICAgZGVidWcoJ3hSYW5nZSByZXR1cm4nLCByZXQpXG5cbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbi8vIEJlY2F1c2UgKiBpcyBBTkQtZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgaW4gdGhlIGNvbXBhcmF0b3IsXG4vLyBhbmQgJycgbWVhbnMgXCJhbnkgdmVyc2lvblwiLCBqdXN0IHJlbW92ZSB0aGUgKnMgZW50aXJlbHkuXG5jb25zdCByZXBsYWNlU3RhcnMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVN0YXJzJywgY29tcCwgb3B0aW9ucylcbiAgLy8gTG9vc2VuZXNzIGlzIGlnbm9yZWQgaGVyZS4gIHN0YXIgaXMgYWx3YXlzIGFzIGxvb3NlIGFzIGl0IGdldHMhXG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKHJlW3QuU1RBUl0sICcnKVxufVxuXG5jb25zdCByZXBsYWNlR1RFMCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdyZXBsYWNlR1RFMCcsIGNvbXAsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKHJlW29wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyB0LkdURTBQUkUgOiB0LkdURTBdLCAnJylcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gc3RyaW5nLnJlcGxhY2UocmVbdC5IWVBIRU5SQU5HRV0pXG4vLyBNLCBtLCBwYXRjaCwgcHJlcmVsZWFzZSwgYnVpbGRcbi8vIDEuMiAtIDMuNC41ID0+ID49MS4yLjAgPD0zLjQuNVxuLy8gMS4yLjMgLSAzLjQgPT4gPj0xLjIuMCA8My41LjAtMCBBbnkgMy40Lnggd2lsbCBkb1xuLy8gMS4yIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTBcbi8vIFRPRE8gYnVpbGQ/XG5jb25zdCBoeXBoZW5SZXBsYWNlID0gaW5jUHIgPT4gKCQwLFxuICBmcm9tLCBmTSwgZm0sIGZwLCBmcHIsIGZiLFxuICB0bywgdE0sIHRtLCB0cCwgdHByKSA9PiB7XG4gIGlmIChpc1goZk0pKSB7XG4gICAgZnJvbSA9ICcnXG4gIH0gZWxzZSBpZiAoaXNYKGZtKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4wLjAke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfSBlbHNlIGlmIChpc1goZnApKSB7XG4gICAgZnJvbSA9IGA+PSR7Zk19LiR7Zm19LjAke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfSBlbHNlIGlmIChmcHIpIHtcbiAgICBmcm9tID0gYD49JHtmcm9tfWBcbiAgfSBlbHNlIHtcbiAgICBmcm9tID0gYD49JHtmcm9tfSR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9XG5cbiAgaWYgKGlzWCh0TSkpIHtcbiAgICB0byA9ICcnXG4gIH0gZWxzZSBpZiAoaXNYKHRtKSkge1xuICAgIHRvID0gYDwkeyt0TSArIDF9LjAuMC0wYFxuICB9IGVsc2UgaWYgKGlzWCh0cCkpIHtcbiAgICB0byA9IGA8JHt0TX0uJHsrdG0gKyAxfS4wLTBgXG4gIH0gZWxzZSBpZiAodHByKSB7XG4gICAgdG8gPSBgPD0ke3RNfS4ke3RtfS4ke3RwfS0ke3Rwcn1gXG4gIH0gZWxzZSBpZiAoaW5jUHIpIHtcbiAgICB0byA9IGA8JHt0TX0uJHt0bX0uJHsrdHAgKyAxfS0wYFxuICB9IGVsc2Uge1xuICAgIHRvID0gYDw9JHt0b31gXG4gIH1cblxuICByZXR1cm4gYCR7ZnJvbX0gJHt0b31gLnRyaW0oKVxufVxuXG5jb25zdCB0ZXN0U2V0ID0gKHNldCwgdmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2V0W2ldLnRlc3QodmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGlmICh2ZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoICYmICFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgLy8gRmluZCB0aGUgc2V0IG9mIHZlcnNpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gaGF2ZSBwcmVyZWxlYXNlc1xuICAgIC8vIEZvciBleGFtcGxlLCBeMS4yLjMtcHIuMSBkZXN1Z2FycyB0byA+PTEuMi4zLXByLjEgPDIuMC4wXG4gICAgLy8gVGhhdCBzaG91bGQgYWxsb3cgYDEuMi4zLXByLjJgIHRvIHBhc3MuXG4gICAgLy8gSG93ZXZlciwgYDEuMi40LWFscGhhLm5vdHJlYWR5YCBzaG91bGQgTk9UIGJlIGFsbG93ZWQsXG4gICAgLy8gZXZlbiB0aG91Z2ggaXQncyB3aXRoaW4gdGhlIHJhbmdlIHNldCBieSB0aGUgY29tcGFyYXRvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYnVnKHNldFtpXS5zZW12ZXIpXG4gICAgICBpZiAoc2V0W2ldLnNlbXZlciA9PT0gQ29tcGFyYXRvci5BTlkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWQgPSBzZXRbaV0uc2VtdmVyXG4gICAgICAgIGlmIChhbGxvd2VkLm1ham9yID09PSB2ZXJzaW9uLm1ham9yICYmXG4gICAgICAgICAgICBhbGxvd2VkLm1pbm9yID09PSB2ZXJzaW9uLm1pbm9yICYmXG4gICAgICAgICAgICBhbGxvd2VkLnBhdGNoID09PSB2ZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZlcnNpb24gaGFzIGEgLXByZSwgYnV0IGl0J3Mgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBsaWtlLlxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cbiIsCiAgICAiY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiByYW5nZS50ZXN0KHZlcnNpb24pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHNhdGlzZmllc1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxMyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgc3Bhd25TeW5jIH0gPSByZXF1aXJlKCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHsgY3JlYXRlSGFzaCB9ID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKTtcbmNvbnN0IHNlbXZlckNvZXJjZSA9IHJlcXVpcmUoJ3NlbXZlci9mdW5jdGlvbnMvY29lcmNlJyk7XG5jb25zdCBzZW12ZXJHcmVhdGVyVGhhbk9yRXF1YWxUbyA9IHJlcXVpcmUoJ3NlbXZlci9mdW5jdGlvbnMvZ3RlJyk7XG5jb25zdCBzZW12ZXJTYXRpc2ZpZXMgPSByZXF1aXJlKCdzZW12ZXIvZnVuY3Rpb25zL3NhdGlzZmllcycpO1xuY29uc3QgZGV0ZWN0TGliYyA9IHJlcXVpcmUoJ2RldGVjdC1saWJjJyk7XG5cbmNvbnN0IHsgY29uZmlnLCBlbmdpbmVzLCBvcHRpb25hbERlcGVuZGVuY2llcyB9ID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IG1pbmltdW1MaWJ2aXBzVmVyc2lvbkxhYmVsbGVkID0gcHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfY29uZmlnX2xpYnZpcHMgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uZmlnLmxpYnZpcHM7XG5jb25zdCBtaW5pbXVtTGlidmlwc1ZlcnNpb24gPSBzZW12ZXJDb2VyY2UobWluaW11bUxpYnZpcHNWZXJzaW9uTGFiZWxsZWQpLnZlcnNpb247XG5cbmNvbnN0IHByZWJ1aWx0UGxhdGZvcm1zID0gW1xuICAnZGFyd2luLWFybTY0JywgJ2Rhcndpbi14NjQnLFxuICAnbGludXgtYXJtJywgJ2xpbnV4LWFybTY0JywgJ2xpbnV4LXMzOTB4JywgJ2xpbnV4LXg2NCcsXG4gICdsaW51eG11c2wtYXJtNjQnLCAnbGludXhtdXNsLXg2NCcsXG4gICd3aW4zMi1pYTMyJywgJ3dpbjMyLXg2NCdcbl07XG5cbmNvbnN0IHNwYXduU3luY09wdGlvbnMgPSB7XG4gIGVuY29kaW5nOiAndXRmOCcsXG4gIHNoZWxsOiB0cnVlXG59O1xuXG5jb25zdCBsb2cgPSAoaXRlbSkgPT4ge1xuICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgc2hhcnA6IEluc3RhbGxhdGlvbiBlcnJvcjogJHtpdGVtLm1lc3NhZ2V9YCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYHNoYXJwOiAke2l0ZW19YCk7XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb25zdCBydW50aW1lTGliYyA9ICgpID0+IGRldGVjdExpYmMuaXNOb25HbGliY0xpbnV4U3luYygpID8gZGV0ZWN0TGliYy5mYW1pbHlTeW5jKCkgOiAnJztcblxuY29uc3QgcnVudGltZVBsYXRmb3JtQXJjaCA9ICgpID0+IGAke3Byb2Nlc3MucGxhdGZvcm19JHtydW50aW1lTGliYygpfS0ke3Byb2Nlc3MuYXJjaH1gO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgYnVpbGRQbGF0Zm9ybUFyY2ggPSAoKSA9PiB7XG4gIGlmIChpc0Vtc2NyaXB0ZW4oKSkge1xuICAgIHJldHVybiAnd2FzbTMyJztcbiAgfVxuICAvKiBlc2xpbnQgY2FtZWxjYXNlOiBbXCJlcnJvclwiLCB7IGFsbG93OiBbXCJebnBtX2NvbmZpZ19cIl0gfV0gKi9cbiAgY29uc3QgeyBucG1fY29uZmlnX2FyY2gsIG5wbV9jb25maWdfcGxhdGZvcm0sIG5wbV9jb25maWdfbGliYyB9ID0gcHJvY2Vzcy5lbnY7XG4gIGNvbnN0IGxpYmMgPSB0eXBlb2YgbnBtX2NvbmZpZ19saWJjID09PSAnc3RyaW5nJyA/IG5wbV9jb25maWdfbGliYyA6IHJ1bnRpbWVMaWJjKCk7XG4gIHJldHVybiBgJHtucG1fY29uZmlnX3BsYXRmb3JtIHx8IHByb2Nlc3MucGxhdGZvcm19JHtsaWJjfS0ke25wbV9jb25maWdfYXJjaCB8fCBwcm9jZXNzLmFyY2h9YDtcbn07XG5cbmNvbnN0IGJ1aWxkU2hhcnBMaWJ2aXBzSW5jbHVkZURpciA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZShgQGltZy9zaGFycC1saWJ2aXBzLWRldi0ke2J1aWxkUGxhdGZvcm1BcmNoKCl9L2luY2x1ZGVgKTtcbiAgfSBjYXRjaCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXF1aXJlKCdAaW1nL3NoYXJwLWxpYnZpcHMtZGV2L2luY2x1ZGUnKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnO1xufTtcblxuY29uc3QgYnVpbGRTaGFycExpYnZpcHNDUGx1c1BsdXNEaXIgPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ0BpbWcvc2hhcnAtbGlidmlwcy1kZXYvY3BsdXNwbHVzJyk7XG4gIH0gY2F0Y2gge31cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnO1xufTtcblxuY29uc3QgYnVpbGRTaGFycExpYnZpcHNMaWJEaXIgPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoYEBpbWcvc2hhcnAtbGlidmlwcy1kZXYtJHtidWlsZFBsYXRmb3JtQXJjaCgpfS9saWJgKTtcbiAgfSBjYXRjaCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXF1aXJlKGBAaW1nL3NoYXJwLWxpYnZpcHMtJHtidWlsZFBsYXRmb3JtQXJjaCgpfS9saWJgKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnO1xufTtcblxuY29uc3QgaXNVbnN1cHBvcnRlZE5vZGVSdW50aW1lID0gKCkgPT4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAocHJvY2Vzcy5yZWxlYXNlPy5uYW1lID09PSAnbm9kZScgJiYgcHJvY2Vzcy52ZXJzaW9ucykge1xuICAgIGlmICghc2VtdmVyU2F0aXNmaWVzKHByb2Nlc3MudmVyc2lvbnMubm9kZSwgZW5naW5lcy5ub2RlKSkge1xuICAgICAgcmV0dXJuIHsgZm91bmQ6IHByb2Nlc3MudmVyc2lvbnMubm9kZSwgZXhwZWN0ZWQ6IGVuZ2luZXMubm9kZSB9O1xuICAgIH1cbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IGlzRW1zY3JpcHRlbiA9ICgpID0+IHtcbiAgY29uc3QgeyBDQyB9ID0gcHJvY2Vzcy5lbnY7XG4gIHJldHVybiBCb29sZWFuKENDICYmIENDLmVuZHNXaXRoKCcvZW1jYycpKTtcbn07XG5cbmNvbnN0IGlzUm9zZXR0YSA9ICgpID0+IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nICYmIHByb2Nlc3MuYXJjaCA9PT0gJ3g2NCcpIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gc3Bhd25TeW5jKCdzeXNjdGwgc3lzY3RsLnByb2NfdHJhbnNsYXRlZCcsIHNwYXduU3luY09wdGlvbnMpLnN0ZG91dDtcbiAgICByZXR1cm4gKHRyYW5zbGF0ZWQgfHwgJycpLnRyaW0oKSA9PT0gJ3N5c2N0bC5wcm9jX3RyYW5zbGF0ZWQ6IDEnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IHNoYTUxMiA9IChzKSA9PiBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUocykuZGlnZXN0KCdoZXgnKTtcblxuY29uc3QgeWFybkxvY2F0b3IgPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaWRlbnRIYXNoID0gc2hhNTEyKGBpbWdzaGFycC1saWJ2aXBzLSR7YnVpbGRQbGF0Zm9ybUFyY2goKX1gKTtcbiAgICBjb25zdCBucG1WZXJzaW9uID0gc2VtdmVyQ29lcmNlKG9wdGlvbmFsRGVwZW5kZW5jaWVzW2BAaW1nL3NoYXJwLWxpYnZpcHMtJHtidWlsZFBsYXRmb3JtQXJjaCgpfWBdKS52ZXJzaW9uO1xuICAgIHJldHVybiBzaGE1MTIoYCR7aWRlbnRIYXNofW5wbToke25wbVZlcnNpb259YCkuc2xpY2UoMCwgMTApO1xuICB9IGNhdGNoIHt9XG4gIHJldHVybiAnJztcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb25zdCBzcGF3blJlYnVpbGQgPSAoKSA9PlxuICBzcGF3blN5bmMoYG5vZGUtZ3lwIHJlYnVpbGQgLS1kaXJlY3Rvcnk9c3JjICR7aXNFbXNjcmlwdGVuKCkgPyAnLS1ub2RlZGlyPWVtc2NyaXB0ZW4nIDogJyd9YCwge1xuICAgIC4uLnNwYXduU3luY09wdGlvbnMsXG4gICAgc3RkaW86ICdpbmhlcml0J1xuICB9KS5zdGF0dXM7XG5cbmNvbnN0IGdsb2JhbExpYnZpcHNWZXJzaW9uID0gKCkgPT4ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGdsb2JhbExpYnZpcHNWZXJzaW9uID0gc3Bhd25TeW5jKCdwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiB2aXBzLWNwcCcsIHtcbiAgICAgIC4uLnNwYXduU3luY09wdGlvbnMsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIFBLR19DT05GSUdfUEFUSDogcGtnQ29uZmlnUGF0aCgpXG4gICAgICB9XG4gICAgfSkuc3Rkb3V0O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIChnbG9iYWxMaWJ2aXBzVmVyc2lvbiB8fCAnJykudHJpbSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IHBrZ0NvbmZpZ1BhdGggPSAoKSA9PiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgY29uc3QgYnJld1BrZ0NvbmZpZ1BhdGggPSBzcGF3blN5bmMoXG4gICAgICAnd2hpY2ggYnJldyA+L2Rldi9udWxsIDI+JjEgJiYgYnJldyBlbnZpcm9ubWVudCAtLXBsYWluIHwgZ3JlcCBQS0dfQ09ORklHX0xJQkRJUiB8IGN1dCAtZFwiIFwiIC1mMicsXG4gICAgICBzcGF3blN5bmNPcHRpb25zXG4gICAgKS5zdGRvdXQgfHwgJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgIGJyZXdQa2dDb25maWdQYXRoLnRyaW0oKSxcbiAgICAgIHByb2Nlc3MuZW52LlBLR19DT05GSUdfUEFUSCxcbiAgICAgICcvdXNyL2xvY2FsL2xpYi9wa2djb25maWcnLFxuICAgICAgJy91c3IvbGliL3BrZ2NvbmZpZycsXG4gICAgICAnL3Vzci9sb2NhbC9saWJkYXRhL3BrZ2NvbmZpZycsXG4gICAgICAnL3Vzci9saWJkYXRhL3BrZ2NvbmZpZydcbiAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCc6Jyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5jb25zdCBza2lwU2VhcmNoID0gKHN0YXR1cywgcmVhc29uLCBsb2dnZXIpID0+IHtcbiAgaWYgKGxvZ2dlcikge1xuICAgIGxvZ2dlcihgRGV0ZWN0ZWQgJHtyZWFzb259LCBza2lwcGluZyBzZWFyY2ggZm9yIGdsb2JhbGx5LWluc3RhbGxlZCBsaWJ2aXBzYCk7XG4gIH1cbiAgcmV0dXJuIHN0YXR1cztcbn07XG5cbmNvbnN0IHVzZUdsb2JhbExpYnZpcHMgPSAobG9nZ2VyKSA9PiB7XG4gIGlmIChCb29sZWFuKHByb2Nlc3MuZW52LlNIQVJQX0lHTk9SRV9HTE9CQUxfTElCVklQUykgPT09IHRydWUpIHtcbiAgICByZXR1cm4gc2tpcFNlYXJjaChmYWxzZSwgJ1NIQVJQX0lHTk9SRV9HTE9CQUxfTElCVklQUycsIGxvZ2dlcik7XG4gIH1cbiAgaWYgKEJvb2xlYW4ocHJvY2Vzcy5lbnYuU0hBUlBfRk9SQ0VfR0xPQkFMX0xJQlZJUFMpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHNraXBTZWFyY2godHJ1ZSwgJ1NIQVJQX0ZPUkNFX0dMT0JBTF9MSUJWSVBTJywgbG9nZ2VyKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoaXNSb3NldHRhKCkpIHtcbiAgICByZXR1cm4gc2tpcFNlYXJjaChmYWxzZSwgJ1Jvc2V0dGEnLCBsb2dnZXIpO1xuICB9XG4gIGNvbnN0IGdsb2JhbFZpcHNWZXJzaW9uID0gZ2xvYmFsTGlidmlwc1ZlcnNpb24oKTtcbiAgcmV0dXJuICEhZ2xvYmFsVmlwc1ZlcnNpb24gJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBzZW12ZXJHcmVhdGVyVGhhbk9yRXF1YWxUbyhnbG9iYWxWaXBzVmVyc2lvbiwgbWluaW11bUxpYnZpcHNWZXJzaW9uKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtaW5pbXVtTGlidmlwc1ZlcnNpb24sXG4gIHByZWJ1aWx0UGxhdGZvcm1zLFxuICBidWlsZFBsYXRmb3JtQXJjaCxcbiAgYnVpbGRTaGFycExpYnZpcHNJbmNsdWRlRGlyLFxuICBidWlsZFNoYXJwTGlidmlwc0NQbHVzUGx1c0RpcixcbiAgYnVpbGRTaGFycExpYnZpcHNMaWJEaXIsXG4gIGlzVW5zdXBwb3J0ZWROb2RlUnVudGltZSxcbiAgcnVudGltZVBsYXRmb3JtQXJjaCxcbiAgbG9nLFxuICB5YXJuTG9jYXRvcixcbiAgc3Bhd25SZWJ1aWxkLFxuICBnbG9iYWxMaWJ2aXBzVmVyc2lvbixcbiAgcGtnQ29uZmlnUGF0aCxcbiAgdXNlR2xvYmFsTGlidmlwc1xufTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTMgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJbnNwZWN0cyB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBhbmQgZXhwb3J0cyB0aGUgcmVsZXZhbnQgc2hhcnAubm9kZSBiaW5hcnlcblxuY29uc3QgeyBmYW1pbHlTeW5jLCB2ZXJzaW9uU3luYyB9ID0gcmVxdWlyZSgnZGV0ZWN0LWxpYmMnKTtcblxuY29uc3QgeyBydW50aW1lUGxhdGZvcm1BcmNoLCBpc1Vuc3VwcG9ydGVkTm9kZVJ1bnRpbWUsIHByZWJ1aWx0UGxhdGZvcm1zLCBtaW5pbXVtTGlidmlwc1ZlcnNpb24gfSA9IHJlcXVpcmUoJy4vbGlidmlwcycpO1xuY29uc3QgcnVudGltZVBsYXRmb3JtID0gcnVudGltZVBsYXRmb3JtQXJjaCgpO1xuXG5jb25zdCBwYXRocyA9IFtcbiAgYC4uL3NyYy9idWlsZC9SZWxlYXNlL3NoYXJwLSR7cnVudGltZVBsYXRmb3JtfS5ub2RlYCxcbiAgJy4uL3NyYy9idWlsZC9SZWxlYXNlL3NoYXJwLXdhc20zMi5ub2RlJyxcbiAgYEBpbWcvc2hhcnAtJHtydW50aW1lUGxhdGZvcm19L3NoYXJwLm5vZGVgLFxuICAnQGltZy9zaGFycC13YXNtMzIvc2hhcnAubm9kZSdcbl07XG5cbmxldCBzaGFycDtcbmNvbnN0IGVycm9ycyA9IFtdO1xuZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gIHRyeSB7XG4gICAgc2hhcnAgPSByZXF1aXJlKHBhdGgpO1xuICAgIGJyZWFrO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGVycm9ycy5wdXNoKGVycik7XG4gIH1cbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChzaGFycCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHNoYXJwO1xufSBlbHNlIHtcbiAgY29uc3QgW2lzTGludXgsIGlzTWFjT3MsIGlzV2luZG93c10gPSBbJ2xpbnV4JywgJ2RhcndpbicsICd3aW4zMiddLm1hcChvcyA9PiBydW50aW1lUGxhdGZvcm0uc3RhcnRzV2l0aChvcykpO1xuXG4gIGNvbnN0IGhlbHAgPSBbYENvdWxkIG5vdCBsb2FkIHRoZSBcInNoYXJwXCIgbW9kdWxlIHVzaW5nIHRoZSAke3J1bnRpbWVQbGF0Zm9ybX0gcnVudGltZWBdO1xuICBlcnJvcnMuZm9yRWFjaChlcnIgPT4ge1xuICAgIGlmIChlcnIuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICBoZWxwLnB1c2goYCR7ZXJyLmNvZGV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZXJyb3JzLm1hcChlcnIgPT4gZXJyLm1lc3NhZ2UpLmpvaW4oJyAnKTtcbiAgaGVscC5wdXNoKCdQb3NzaWJsZSBzb2x1dGlvbnM6Jyk7XG4gIC8vIENvbW1vbiBlcnJvciBtZXNzYWdlc1xuICBpZiAoaXNVbnN1cHBvcnRlZE5vZGVSdW50aW1lKCkpIHtcbiAgICBjb25zdCB7IGZvdW5kLCBleHBlY3RlZCB9ID0gaXNVbnN1cHBvcnRlZE5vZGVSdW50aW1lKCk7XG4gICAgaGVscC5wdXNoKFxuICAgICAgJy0gUGxlYXNlIHVwZ3JhZGUgTm9kZS5qczonLFxuICAgICAgYCAgICBGb3VuZCAke2ZvdW5kfWAsXG4gICAgICBgICAgIFJlcXVpcmVzICR7ZXhwZWN0ZWR9YFxuICAgICk7XG4gIH0gZWxzZSBpZiAocHJlYnVpbHRQbGF0Zm9ybXMuaW5jbHVkZXMocnVudGltZVBsYXRmb3JtKSkge1xuICAgIGNvbnN0IFtvcywgY3B1XSA9IHJ1bnRpbWVQbGF0Zm9ybS5zcGxpdCgnLScpO1xuICAgIGNvbnN0IGxpYmMgPSBvcy5lbmRzV2l0aCgnbXVzbCcpID8gJyAtLWxpYmM9bXVzbCcgOiAnJztcbiAgICBoZWxwLnB1c2goXG4gICAgICAnLSBFbnN1cmUgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIGNhbiBiZSBpbnN0YWxsZWQ6JyxcbiAgICAgICcgICAgbnBtIGluc3RhbGwgLS1pbmNsdWRlPW9wdGlvbmFsIHNoYXJwJyxcbiAgICAgICctIEVuc3VyZSB5b3VyIHBhY2thZ2UgbWFuYWdlciBzdXBwb3J0cyBtdWx0aS1wbGF0Zm9ybSBpbnN0YWxsYXRpb246JyxcbiAgICAgICcgICAgU2VlIGh0dHBzOi8vc2hhcnAucGl4ZWxwbHVtYmluZy5jb20vaW5zdGFsbCNjcm9zcy1wbGF0Zm9ybScsXG4gICAgICAnLSBBZGQgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzOicsXG4gICAgICBgICAgIG5wbSBpbnN0YWxsIC0tb3M9JHtvcy5yZXBsYWNlKCdtdXNsJywgJycpfSR7bGliY30gLS1jcHU9JHtjcHV9IHNoYXJwYFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGVscC5wdXNoKFxuICAgICAgYC0gTWFudWFsbHkgaW5zdGFsbCBsaWJ2aXBzID49ICR7bWluaW11bUxpYnZpcHNWZXJzaW9ufWAsXG4gICAgICAnLSBBZGQgZXhwZXJpbWVudGFsIFdlYkFzc2VtYmx5LWJhc2VkIGRlcGVuZGVuY2llczonLFxuICAgICAgJyAgICBucG0gaW5zdGFsbCAtLWNwdT13YXNtMzIgc2hhcnAnLFxuICAgICAgJyAgICBucG0gaW5zdGFsbCBAaW1nL3NoYXJwLXdhc20zMidcbiAgICApO1xuICB9XG4gIGlmIChpc0xpbnV4ICYmIC8oc3ltYm9sIG5vdCBmb3VuZHxDWFhBQklfKS9pLnRlc3QobWVzc2FnZXMpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSByZXF1aXJlKGBAaW1nL3NoYXJwLWxpYnZpcHMtJHtydW50aW1lUGxhdGZvcm19L3BhY2thZ2VgKTtcbiAgICAgIGNvbnN0IGxpYmNGb3VuZCA9IGAke2ZhbWlseVN5bmMoKX0gJHt2ZXJzaW9uU3luYygpfWA7XG4gICAgICBjb25zdCBsaWJjUmVxdWlyZXMgPSBgJHtjb25maWcubXVzbCA/ICdtdXNsJyA6ICdnbGliYyd9ICR7Y29uZmlnLm11c2wgfHwgY29uZmlnLmdsaWJjfWA7XG4gICAgICBoZWxwLnB1c2goXG4gICAgICAgICctIFVwZGF0ZSB5b3VyIE9TOicsXG4gICAgICAgIGAgICAgRm91bmQgJHtsaWJjRm91bmR9YCxcbiAgICAgICAgYCAgICBSZXF1aXJlcyAke2xpYmNSZXF1aXJlc31gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVyckVuZ2luZXMpIHt9XG4gIH1cbiAgaWYgKGlzTGludXggJiYgL1xcL3NuYXBcXC9jb3JlWzAtOV17Mn0vLnRlc3QobWVzc2FnZXMpKSB7XG4gICAgaGVscC5wdXNoKFxuICAgICAgJy0gUmVtb3ZlIHRoZSBOb2RlLmpzIFNuYXAsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgbmF0aXZlIG1vZHVsZXMnLFxuICAgICAgJyAgICBzbmFwIHJlbW92ZSBub2RlJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzTWFjT3MgJiYgL0luY29tcGF0aWJsZSBsaWJyYXJ5IHZlcnNpb24vLnRlc3QobWVzc2FnZXMpKSB7XG4gICAgaGVscC5wdXNoKFxuICAgICAgJy0gVXBkYXRlIEhvbWVicmV3OicsXG4gICAgICAnICAgIGJyZXcgdXBkYXRlICYmIGJyZXcgdXBncmFkZSB2aXBzJ1xuICAgICk7XG4gIH1cbiAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIuY29kZSA9PT0gJ0VSUl9ETE9QRU5fRElTQUJMRUQnKSkge1xuICAgIGhlbHAucHVzaCgnLSBSdW4gTm9kZS5qcyB3aXRob3V0IHVzaW5nIHRoZSAtLW5vLWFkZG9ucyBmbGFnJyk7XG4gIH1cbiAgLy8gTGluayB0byBpbnN0YWxsYXRpb24gZG9jc1xuICBpZiAoaXNXaW5kb3dzICYmIC9UaGUgc3BlY2lmaWVkIHByb2NlZHVyZSBjb3VsZCBub3QgYmUgZm91bmQvLnRlc3QobWVzc2FnZXMpKSB7XG4gICAgaGVscC5wdXNoKFxuICAgICAgJy0gVXNpbmcgdGhlIGNhbnZhcyBwYWNrYWdlIG9uIFdpbmRvd3M/JyxcbiAgICAgICcgICAgU2VlIGh0dHBzOi8vc2hhcnAucGl4ZWxwbHVtYmluZy5jb20vaW5zdGFsbCNjYW52YXMtYW5kLXdpbmRvd3MnLFxuICAgICAgJy0gQ2hlY2sgZm9yIG91dGRhdGVkIHZlcnNpb25zIG9mIHNoYXJwIGluIHRoZSBkZXBlbmRlbmN5IHRyZWU6JyxcbiAgICAgICcgICAgbnBtIGxzIHNoYXJwJ1xuICAgICk7XG4gIH1cbiAgaGVscC5wdXNoKFxuICAgICctIENvbnN1bHQgdGhlIGluc3RhbGxhdGlvbiBkb2N1bWVudGF0aW9uOicsXG4gICAgJyAgICBTZWUgaHR0cHM6Ly9zaGFycC5waXhlbHBsdW1iaW5nLmNvbS9pbnN0YWxsJ1xuICApO1xuICB0aHJvdyBuZXcgRXJyb3IoaGVscC5qb2luKCdcXG4nKSk7XG59XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDEzIExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKTtcbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcycpO1xuXG5yZXF1aXJlKCcuL3NoYXJwJyk7XG5cbi8vIFVzZSBOT0RFX0RFQlVHPXNoYXJwIHRvIGVuYWJsZSBsaWJ2aXBzIHdhcm5pbmdzXG5jb25zdCBkZWJ1Z2xvZyA9IHV0aWwuZGVidWdsb2coJ3NoYXJwJyk7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgZmFjdG9yeSB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYHNoYXJwYCwgdG8gd2hpY2ggZnVydGhlciBtZXRob2RzIGFyZSBjaGFpbmVkLlxuICpcbiAqIEpQRUcsIFBORywgV2ViUCwgR0lGLCBBVklGIG9yIFRJRkYgZm9ybWF0IGltYWdlIGRhdGEgY2FuIGJlIHN0cmVhbWVkIG91dCBmcm9tIHRoaXMgb2JqZWN0LlxuICogV2hlbiB1c2luZyBTdHJlYW0gYmFzZWQgb3V0cHV0LCBkZXJpdmVkIGF0dHJpYnV0ZXMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBgaW5mb2AgZXZlbnQuXG4gKlxuICogTm9uLWNyaXRpY2FsIHByb2JsZW1zIGVuY291bnRlcmVkIGR1cmluZyBwcm9jZXNzaW5nIGFyZSBlbWl0dGVkIGFzIGB3YXJuaW5nYCBldmVudHMuXG4gKlxuICogSW1wbGVtZW50cyB0aGUgW3N0cmVhbS5EdXBsZXhdKGh0dHA6Ly9ub2RlanMub3JnL2FwaS9zdHJlYW0uaHRtbCNzdHJlYW1fY2xhc3Nfc3RyZWFtX2R1cGxleCkgY2xhc3MuXG4gKlxuICogV2hlbiBsb2FkaW5nIG1vcmUgdGhhbiBvbmUgcGFnZS9mcmFtZSBvZiBhbiBhbmltYXRlZCBpbWFnZSxcbiAqIHRoZXNlIGFyZSBjb21iaW5lZCBhcyBhIHZlcnRpY2FsbHktc3RhY2tlZCBcInRvaWxldCByb2xsXCIgaW1hZ2VcbiAqIHdoZXJlIHRoZSBvdmVyYWxsIGhlaWdodCBpcyB0aGUgYHBhZ2VIZWlnaHRgIG11bHRpcGxpZWQgYnkgdGhlIG51bWJlciBvZiBgcGFnZXNgLlxuICpcbiAqIEBjb25zdHJ1Y3RzIFNoYXJwXG4gKlxuICogQGVtaXRzIFNoYXJwI2luZm9cbiAqIEBlbWl0cyBTaGFycCN3YXJuaW5nXG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKCdpbnB1dC5qcGcnKVxuICogICAucmVzaXplKDMwMCwgMjAwKVxuICogICAudG9GaWxlKCdvdXRwdXQuanBnJywgZnVuY3Rpb24oZXJyKSB7XG4gKiAgICAgLy8gb3V0cHV0LmpwZyBpcyBhIDMwMCBwaXhlbHMgd2lkZSBhbmQgMjAwIHBpeGVscyBoaWdoIGltYWdlXG4gKiAgICAgLy8gY29udGFpbmluZyBhIHNjYWxlZCBhbmQgY3JvcHBlZCB2ZXJzaW9uIG9mIGlucHV0LmpwZ1xuICogICB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVhZCBpbWFnZSBkYXRhIGZyb20gcmVtb3RlIFVSTCxcbiAqIC8vIHJlc2l6ZSB0byAzMDAgcGl4ZWxzIHdpZGUsXG4gKiAvLyBlbWl0IGFuICdpbmZvJyBldmVudCB3aXRoIGNhbGN1bGF0ZWQgZGltZW5zaW9uc1xuICogLy8gYW5kIGZpbmFsbHkgd3JpdGUgaW1hZ2UgZGF0YSB0byB3cml0YWJsZVN0cmVhbVxuICogY29uc3QgeyBib2R5IH0gPSBmZXRjaCgnaHR0cHM6Ly8uLi4nKTtcbiAqIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gUmVhZGFibGUuZnJvbVdlYihib2R5KTtcbiAqIGNvbnN0IHRyYW5zZm9ybWVyID0gc2hhcnAoKVxuICogICAucmVzaXplKDMwMClcbiAqICAgLm9uKCdpbmZvJywgKHsgaGVpZ2h0IH0pID0+IHtcbiAqICAgICBjb25zb2xlLmxvZyhgSW1hZ2UgaGVpZ2h0IGlzICR7aGVpZ2h0fWApO1xuICogICB9KTtcbiAqIHJlYWRhYmxlU3RyZWFtLnBpcGUodHJhbnNmb3JtZXIpLnBpcGUod3JpdGFibGVTdHJlYW0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBibGFuayAzMDB4MjAwIFBORyBpbWFnZSBvZiBzZW1pLXRyYW5zbHVjZW50IHJlZCBwaXhlbHNcbiAqIHNoYXJwKHtcbiAqICAgY3JlYXRlOiB7XG4gKiAgICAgd2lkdGg6IDMwMCxcbiAqICAgICBoZWlnaHQ6IDIwMCxcbiAqICAgICBjaGFubmVsczogNCxcbiAqICAgICBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMCwgYjogMCwgYWxwaGE6IDAuNSB9XG4gKiAgIH1cbiAqIH0pXG4gKiAucG5nKClcbiAqIC50b0J1ZmZlcigpXG4gKiAudGhlbiggLi4uICk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgYW4gYW5pbWF0ZWQgR0lGIHRvIGFuIGFuaW1hdGVkIFdlYlBcbiAqIGF3YWl0IHNoYXJwKCdpbi5naWYnLCB7IGFuaW1hdGVkOiB0cnVlIH0pLnRvRmlsZSgnb3V0LndlYnAnKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVhZCBhIHJhdyBhcnJheSBvZiBwaXhlbHMgYW5kIHNhdmUgaXQgdG8gYSBwbmdcbiAqIGNvbnN0IGlucHV0ID0gVWludDhBcnJheS5mcm9tKFsyNTUsIDI1NSwgMjU1LCAwLCAwLCAwXSk7IC8vIG9yIFVpbnQ4Q2xhbXBlZEFycmF5XG4gKiBjb25zdCBpbWFnZSA9IHNoYXJwKGlucHV0LCB7XG4gKiAgIC8vIGJlY2F1c2UgdGhlIGlucHV0IGRvZXMgbm90IGNvbnRhaW4gaXRzIGRpbWVuc2lvbnMgb3IgaG93IG1hbnkgY2hhbm5lbHMgaXQgaGFzXG4gKiAgIC8vIHdlIG5lZWQgdG8gc3BlY2lmeSBpdCBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9uc1xuICogICByYXc6IHtcbiAqICAgICB3aWR0aDogMixcbiAqICAgICBoZWlnaHQ6IDEsXG4gKiAgICAgY2hhbm5lbHM6IDNcbiAqICAgfVxuICogfSk7XG4gKiBhd2FpdCBpbWFnZS50b0ZpbGUoJ215LXR3by1waXhlbHMucG5nJyk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdlbmVyYXRlIFJHQiBHYXVzc2lhbiBub2lzZVxuICogYXdhaXQgc2hhcnAoe1xuICogICBjcmVhdGU6IHtcbiAqICAgICB3aWR0aDogMzAwLFxuICogICAgIGhlaWdodDogMjAwLFxuICogICAgIGNoYW5uZWxzOiAzLFxuICogICAgIG5vaXNlOiB7XG4gKiAgICAgICB0eXBlOiAnZ2F1c3NpYW4nLFxuICogICAgICAgbWVhbjogMTI4LFxuICogICAgICAgc2lnbWE6IDMwXG4gKiAgICAgfVxuICogIH1cbiAqIH0pLnRvRmlsZSgnbm9pc2UucG5nJyk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdlbmVyYXRlIGFuIGltYWdlIGZyb20gdGV4dFxuICogYXdhaXQgc2hhcnAoe1xuICogICB0ZXh0OiB7XG4gKiAgICAgdGV4dDogJ0hlbGxvLCB3b3JsZCEnLFxuICogICAgIHdpZHRoOiA0MDAsIC8vIG1heCB3aWR0aFxuICogICAgIGhlaWdodDogMzAwIC8vIG1heCBoZWlnaHRcbiAqICAgfVxuICogfSkudG9GaWxlKCd0ZXh0X2J3LnBuZycpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZW5lcmF0ZSBhbiByZ2JhIGltYWdlIGZyb20gdGV4dCB1c2luZyBwYW5nbyBtYXJrdXAgYW5kIGZvbnRcbiAqIGF3YWl0IHNoYXJwKHtcbiAqICAgdGV4dDoge1xuICogICAgIHRleHQ6ICc8c3BhbiBmb3JlZ3JvdW5kPVwicmVkXCI+UmVkITwvc3Bhbj48c3BhbiBiYWNrZ3JvdW5kPVwiY3lhblwiPmJsdWU8L3NwYW4+JyxcbiAqICAgICBmb250OiAnc2FucycsXG4gKiAgICAgcmdiYTogdHJ1ZSxcbiAqICAgICBkcGk6IDMwMFxuICogICB9XG4gKiB9KS50b0ZpbGUoJ3RleHRfcmdiYS5wbmcnKTtcbiAqXG4gKiBAcGFyYW0geyhCdWZmZXJ8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8SW50MTZBcnJheXxVaW50MzJBcnJheXxJbnQzMkFycmF5fEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8c3RyaW5nKX0gW2lucHV0XSAtIGlmIHByZXNlbnQsIGNhbiBiZVxuICogIGEgQnVmZmVyIC8gQXJyYXlCdWZmZXIgLyBVaW50OEFycmF5IC8gVWludDhDbGFtcGVkQXJyYXkgY29udGFpbmluZyBKUEVHLCBQTkcsIFdlYlAsIEFWSUYsIEdJRiwgU1ZHIG9yIFRJRkYgaW1hZ2UgZGF0YSwgb3JcbiAqICBhIFR5cGVkQXJyYXkgY29udGFpbmluZyByYXcgcGl4ZWwgaW1hZ2UgZGF0YSwgb3JcbiAqICBhIFN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gYW4gSlBFRywgUE5HLCBXZWJQLCBBVklGLCBHSUYsIFNWRyBvciBUSUZGIGltYWdlIGZpbGUuXG4gKiAgSlBFRywgUE5HLCBXZWJQLCBBVklGLCBHSUYsIFNWRywgVElGRiBvciByYXcgcGl4ZWwgaW1hZ2UgZGF0YSBjYW4gYmUgc3RyZWFtZWQgaW50byB0aGUgb2JqZWN0IHdoZW4gbm90IHByZXNlbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gaWYgcHJlc2VudCwgaXMgYW4gT2JqZWN0IHdpdGggb3B0aW9uYWwgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5mYWlsT249J3dhcm5pbmcnXSAtIFdoZW4gdG8gYWJvcnQgcHJvY2Vzc2luZyBvZiBpbnZhbGlkIHBpeGVsIGRhdGEsIG9uZSBvZiAoaW4gb3JkZXIgb2Ygc2Vuc2l0aXZpdHksIGxlYXN0IHRvIG1vc3QpOiAnbm9uZScsICd0cnVuY2F0ZWQnLCAnZXJyb3InLCAnd2FybmluZycuIEhpZ2hlciBsZXZlbHMgaW1wbHkgbG93ZXIgbGV2ZWxzLiBJbnZhbGlkIG1ldGFkYXRhIHdpbGwgYWx3YXlzIGFib3J0LlxuICogQHBhcmFtIHtudW1iZXJ8Ym9vbGVhbn0gW29wdGlvbnMubGltaXRJbnB1dFBpeGVscz0yNjg0MDI2ODldIC0gRG8gbm90IHByb2Nlc3MgaW5wdXQgaW1hZ2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcGl4ZWxzXG4gKiAgKHdpZHRoIHggaGVpZ2h0KSBleGNlZWRzIHRoaXMgbGltaXQuIEFzc3VtZXMgaW1hZ2UgZGltZW5zaW9ucyBjb250YWluZWQgaW4gdGhlIGlucHV0IG1ldGFkYXRhIGNhbiBiZSB0cnVzdGVkLlxuICogIEFuIGludGVncmFsIE51bWJlciBvZiBwaXhlbHMsIHplcm8gb3IgZmFsc2UgdG8gcmVtb3ZlIGxpbWl0LCB0cnVlIHRvIHVzZSBkZWZhdWx0IGxpbWl0IG9mIDI2ODQwMjY4OSAoMHgzRkZGIHggMHgzRkZGKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudW5saW1pdGVkPWZhbHNlXSAtIFNldCB0aGlzIHRvIGB0cnVlYCB0byByZW1vdmUgc2FmZXR5IGZlYXR1cmVzIHRoYXQgaGVscCBwcmV2ZW50IG1lbW9yeSBleGhhdXN0aW9uIChKUEVHLCBQTkcsIFNWRywgSEVJRikuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNlcXVlbnRpYWxSZWFkPXRydWVdIC0gU2V0IHRoaXMgdG8gYGZhbHNlYCB0byB1c2UgcmFuZG9tIGFjY2VzcyByYXRoZXIgdGhhbiBzZXF1ZW50aWFsIHJlYWQuIFNvbWUgb3BlcmF0aW9ucyB3aWxsIGRvIHRoaXMgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kZW5zaXR5PTcyXSAtIG51bWJlciByZXByZXNlbnRpbmcgdGhlIERQSSBmb3IgdmVjdG9yIGltYWdlcyBpbiB0aGUgcmFuZ2UgMSB0byAxMDAwMDAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuaWdub3JlSWNjPWZhbHNlXSAtIHNob3VsZCB0aGUgZW1iZWRkZWQgSUNDIHByb2ZpbGUsIGlmIGFueSwgYmUgaWdub3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWdlcz0xXSAtIE51bWJlciBvZiBwYWdlcyB0byBleHRyYWN0IGZvciBtdWx0aS1wYWdlIGlucHV0IChHSUYsIFdlYlAsIFRJRkYpLCB1c2UgLTEgZm9yIGFsbCBwYWdlcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWdlPTBdIC0gUGFnZSBudW1iZXIgdG8gc3RhcnQgZXh0cmFjdGluZyBmcm9tIGZvciBtdWx0aS1wYWdlIGlucHV0IChHSUYsIFdlYlAsIFRJRkYpLCB6ZXJvIGJhc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnN1YmlmZD0tMV0gLSBzdWJJRkQgKFN1YiBJbWFnZSBGaWxlIERpcmVjdG9yeSkgdG8gZXh0cmFjdCBmb3IgT01FLVRJRkYsIGRlZmF1bHRzIHRvIG1haW4gaW1hZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGV2ZWw9MF0gLSBsZXZlbCB0byBleHRyYWN0IGZyb20gYSBtdWx0aS1sZXZlbCBpbnB1dCAoT3BlblNsaWRlKSwgemVybyBiYXNlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYW5pbWF0ZWQ9ZmFsc2VdIC0gU2V0IHRvIGB0cnVlYCB0byByZWFkIGFsbCBmcmFtZXMvcGFnZXMgb2YgYW4gYW5pbWF0ZWQgaW1hZ2UgKEdJRiwgV2ViUCwgVElGRiksIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBgcGFnZXNgIHRvIGAtMWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucmF3XSAtIGRlc2NyaWJlcyByYXcgcGl4ZWwgaW5wdXQgaW1hZ2UgZGF0YS4gU2VlIGByYXcoKWAgZm9yIHBpeGVsIG9yZGVyaW5nLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnJhdy53aWR0aF0gLSBpbnRlZ3JhbCBudW1iZXIgb2YgcGl4ZWxzIHdpZGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucmF3LmhlaWdodF0gLSBpbnRlZ3JhbCBudW1iZXIgb2YgcGl4ZWxzIGhpZ2guXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucmF3LmNoYW5uZWxzXSAtIGludGVncmFsIG51bWJlciBvZiBjaGFubmVscywgYmV0d2VlbiAxIGFuZCA0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yYXcucHJlbXVsdGlwbGllZF0gLSBzcGVjaWZpZXMgdGhhdCB0aGUgcmF3IGlucHV0IGhhcyBhbHJlYWR5IGJlZW4gcHJlbXVsdGlwbGllZCwgc2V0IHRvIGB0cnVlYFxuICogIHRvIGF2b2lkIHNoYXJwIHByZW11bHRpcGx5aW5nIHRoZSBpbWFnZS4gKG9wdGlvbmFsLCBkZWZhdWx0IGBmYWxzZWApXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuY3JlYXRlXSAtIGRlc2NyaWJlcyBhIG5ldyBpbWFnZSB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNyZWF0ZS53aWR0aF0gLSBpbnRlZ3JhbCBudW1iZXIgb2YgcGl4ZWxzIHdpZGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY3JlYXRlLmhlaWdodF0gLSBpbnRlZ3JhbCBudW1iZXIgb2YgcGl4ZWxzIGhpZ2guXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY3JlYXRlLmNoYW5uZWxzXSAtIGludGVncmFsIG51bWJlciBvZiBjaGFubmVscywgZWl0aGVyIDMgKFJHQikgb3IgNCAoUkdCQSkuXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IFtvcHRpb25zLmNyZWF0ZS5iYWNrZ3JvdW5kXSAtIHBhcnNlZCBieSB0aGUgW2NvbG9yXShodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9jb2xvcikgbW9kdWxlIHRvIGV4dHJhY3QgdmFsdWVzIGZvciByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5jcmVhdGUubm9pc2VdIC0gZGVzY3JpYmVzIGEgbm9pc2UgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jcmVhdGUubm9pc2UudHlwZV0gLSB0eXBlIG9mIGdlbmVyYXRlZCBub2lzZSwgY3VycmVudGx5IG9ubHkgYGdhdXNzaWFuYCBpcyBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY3JlYXRlLm5vaXNlLm1lYW5dIC0gbWVhbiBvZiBwaXhlbHMgaW4gZ2VuZXJhdGVkIG5vaXNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNyZWF0ZS5ub2lzZS5zaWdtYV0gLSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgcGl4ZWxzIGluIGdlbmVyYXRlZCBub2lzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy50ZXh0XSAtIGRlc2NyaWJlcyBhIG5ldyB0ZXh0IGltYWdlIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudGV4dC50ZXh0XSAtIHRleHQgdG8gcmVuZGVyIGFzIGEgVVRGLTggc3RyaW5nLiBJdCBjYW4gY29udGFpbiBQYW5nbyBtYXJrdXAsIGZvciBleGFtcGxlIGA8aT5MZTwvaT5Nb25kZWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudGV4dC5mb250XSAtIGZvbnQgbmFtZSB0byByZW5kZXIgd2l0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50ZXh0LmZvbnRmaWxlXSAtIGFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aCB0byBhIGZvbnQgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGBmb250YC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50ZXh0LndpZHRoPTBdIC0gSW50ZWdyYWwgbnVtYmVyIG9mIHBpeGVscyB0byB3b3JkLXdyYXAgYXQuIExpbmVzIG9mIHRleHQgd2lkZXIgdGhhbiB0aGlzIHdpbGwgYmUgYnJva2VuIGF0IHdvcmQgYm91bmRhcmllcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50ZXh0LmhlaWdodD0wXSAtIE1heGltdW0gaW50ZWdyYWwgbnVtYmVyIG9mIHBpeGVscyBoaWdoLiBXaGVuIGRlZmluZWQsIGBkcGlgIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIHRleHQgd2lsbCBhdXRvbWF0aWNhbGx5IGZpdCB0aGUgcGl4ZWwgcmVzb2x1dGlvbiBkZWZpbmVkIGJ5IGB3aWR0aGAgYW5kIGBoZWlnaHRgLiBXaWxsIGJlIGlnbm9yZWQgaWYgYHdpZHRoYCBpcyBub3Qgc3BlY2lmaWVkIG9yIHNldCB0byAwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnRleHQuYWxpZ249J2xlZnQnXSAtIEFsaWdubWVudCBzdHlsZSBmb3IgbXVsdGktbGluZSB0ZXh0IChgJ2xlZnQnYCwgYCdjZW50cmUnYCwgYCdjZW50ZXInYCwgYCdyaWdodCdgKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudGV4dC5qdXN0aWZ5PWZhbHNlXSAtIHNldCB0aGlzIHRvIHRydWUgdG8gYXBwbHkganVzdGlmaWNhdGlvbiB0byB0aGUgdGV4dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50ZXh0LmRwaT03Ml0gLSB0aGUgcmVzb2x1dGlvbiAoc2l6ZSkgYXQgd2hpY2ggdG8gcmVuZGVyIHRoZSB0ZXh0LiBEb2VzIG5vdCB0YWtlIGVmZmVjdCBpZiBgaGVpZ2h0YCBpcyBzcGVjaWZpZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRleHQucmdiYT1mYWxzZV0gLSBzZXQgdGhpcyB0byB0cnVlIHRvIGVuYWJsZSBSR0JBIG91dHB1dC4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbG91ciBlbW9qaSByZW5kZXJpbmcsIG9yIHN1cHBvcnQgZm9yIHBhbmdvIG1hcmt1cCBmZWF0dXJlcyBsaWtlIGA8c3BhbiBmb3JlZ3JvdW5kPVwicmVkXCI+UmVkITwvc3Bhbj5gLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRleHQuc3BhY2luZz0wXSAtIHRleHQgbGluZSBoZWlnaHQgaW4gcG9pbnRzLiBXaWxsIHVzZSB0aGUgZm9udCBsaW5lIGhlaWdodCBpZiBub25lIGlzIHNwZWNpZmllZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50ZXh0LndyYXA9J3dvcmQnXSAtIHdvcmQgd3JhcHBpbmcgc3R5bGUgd2hlbiB3aWR0aCBpcyBwcm92aWRlZCwgb25lIG9mOiAnd29yZCcsICdjaGFyJywgJ3dvcmQtY2hhcicgKHByZWZlciB3b3JkLCBmYWxsYmFjayB0byBjaGFyKSBvciAnbm9uZScuXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmNvbnN0IFNoYXJwID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICFpcy5kZWZpbmVkKGlucHV0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCcpO1xuICB9XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTaGFycCkpIHtcbiAgICByZXR1cm4gbmV3IFNoYXJwKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuICBzdHJlYW0uRHVwbGV4LmNhbGwodGhpcyk7XG4gIHRoaXMub3B0aW9ucyA9IHtcbiAgICAvLyByZXNpemUgb3B0aW9uc1xuICAgIHRvcE9mZnNldFByZTogLTEsXG4gICAgbGVmdE9mZnNldFByZTogLTEsXG4gICAgd2lkdGhQcmU6IC0xLFxuICAgIGhlaWdodFByZTogLTEsXG4gICAgdG9wT2Zmc2V0UG9zdDogLTEsXG4gICAgbGVmdE9mZnNldFBvc3Q6IC0xLFxuICAgIHdpZHRoUG9zdDogLTEsXG4gICAgaGVpZ2h0UG9zdDogLTEsXG4gICAgd2lkdGg6IC0xLFxuICAgIGhlaWdodDogLTEsXG4gICAgY2FudmFzOiAnY3JvcCcsXG4gICAgcG9zaXRpb246IDAsXG4gICAgcmVzaXplQmFja2dyb3VuZDogWzAsIDAsIDAsIDI1NV0sXG4gICAgdXNlRXhpZk9yaWVudGF0aW9uOiBmYWxzZSxcbiAgICBhbmdsZTogMCxcbiAgICByb3RhdGlvbkFuZ2xlOiAwLFxuICAgIHJvdGF0aW9uQmFja2dyb3VuZDogWzAsIDAsIDAsIDI1NV0sXG4gICAgcm90YXRlQmVmb3JlUHJlRXh0cmFjdDogZmFsc2UsXG4gICAgZmxpcDogZmFsc2UsXG4gICAgZmxvcDogZmFsc2UsXG4gICAgZXh0ZW5kVG9wOiAwLFxuICAgIGV4dGVuZEJvdHRvbTogMCxcbiAgICBleHRlbmRMZWZ0OiAwLFxuICAgIGV4dGVuZFJpZ2h0OiAwLFxuICAgIGV4dGVuZEJhY2tncm91bmQ6IFswLCAwLCAwLCAyNTVdLFxuICAgIGV4dGVuZFdpdGg6ICdiYWNrZ3JvdW5kJyxcbiAgICB3aXRob3V0RW5sYXJnZW1lbnQ6IGZhbHNlLFxuICAgIHdpdGhvdXRSZWR1Y3Rpb246IGZhbHNlLFxuICAgIGFmZmluZU1hdHJpeDogW10sXG4gICAgYWZmaW5lQmFja2dyb3VuZDogWzAsIDAsIDAsIDI1NV0sXG4gICAgYWZmaW5lSWR4OiAwLFxuICAgIGFmZmluZUlkeTogMCxcbiAgICBhZmZpbmVPZHg6IDAsXG4gICAgYWZmaW5lT2R5OiAwLFxuICAgIGFmZmluZUludGVycG9sYXRvcjogdGhpcy5jb25zdHJ1Y3Rvci5pbnRlcnBvbGF0b3JzLmJpbGluZWFyLFxuICAgIGtlcm5lbDogJ2xhbmN6b3MzJyxcbiAgICBmYXN0U2hyaW5rT25Mb2FkOiB0cnVlLFxuICAgIC8vIG9wZXJhdGlvbnNcbiAgICB0aW50OiBbLTEsIDAsIDAsIDBdLFxuICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgIGZsYXR0ZW5CYWNrZ3JvdW5kOiBbMCwgMCwgMF0sXG4gICAgdW5mbGF0dGVuOiBmYWxzZSxcbiAgICBuZWdhdGU6IGZhbHNlLFxuICAgIG5lZ2F0ZUFscGhhOiB0cnVlLFxuICAgIG1lZGlhblNpemU6IDAsXG4gICAgYmx1clNpZ21hOiAwLFxuICAgIHByZWNpc2lvbjogJ2ludGVnZXInLFxuICAgIG1pbkFtcGw6IDAuMixcbiAgICBzaGFycGVuU2lnbWE6IDAsXG4gICAgc2hhcnBlbk0xOiAxLFxuICAgIHNoYXJwZW5NMjogMixcbiAgICBzaGFycGVuWDE6IDIsXG4gICAgc2hhcnBlblkyOiAxMCxcbiAgICBzaGFycGVuWTM6IDIwLFxuICAgIHRocmVzaG9sZDogMCxcbiAgICB0aHJlc2hvbGRHcmF5c2NhbGU6IHRydWUsXG4gICAgdHJpbUJhY2tncm91bmQ6IFtdLFxuICAgIHRyaW1UaHJlc2hvbGQ6IC0xLFxuICAgIHRyaW1MaW5lQXJ0OiBmYWxzZSxcbiAgICBnYW1tYTogMCxcbiAgICBnYW1tYU91dDogMCxcbiAgICBncmV5c2NhbGU6IGZhbHNlLFxuICAgIG5vcm1hbGlzZTogZmFsc2UsXG4gICAgbm9ybWFsaXNlTG93ZXI6IDEsXG4gICAgbm9ybWFsaXNlVXBwZXI6IDk5LFxuICAgIGNsYWhlV2lkdGg6IDAsXG4gICAgY2xhaGVIZWlnaHQ6IDAsXG4gICAgY2xhaGVNYXhTbG9wZTogMyxcbiAgICBicmlnaHRuZXNzOiAxLFxuICAgIHNhdHVyYXRpb246IDEsXG4gICAgaHVlOiAwLFxuICAgIGxpZ2h0bmVzczogMCxcbiAgICBib29sZWFuQnVmZmVySW46IG51bGwsXG4gICAgYm9vbGVhbkZpbGVJbjogJycsXG4gICAgam9pbkNoYW5uZWxJbjogW10sXG4gICAgZXh0cmFjdENoYW5uZWw6IC0xLFxuICAgIHJlbW92ZUFscGhhOiBmYWxzZSxcbiAgICBlbnN1cmVBbHBoYTogLTEsXG4gICAgY29sb3Vyc3BhY2U6ICdzcmdiJyxcbiAgICBjb2xvdXJzcGFjZVBpcGVsaW5lOiAnbGFzdCcsXG4gICAgY29tcG9zaXRlOiBbXSxcbiAgICAvLyBvdXRwdXRcbiAgICBmaWxlT3V0OiAnJyxcbiAgICBmb3JtYXRPdXQ6ICdpbnB1dCcsXG4gICAgc3RyZWFtT3V0OiBmYWxzZSxcbiAgICBrZWVwTWV0YWRhdGE6IDAsXG4gICAgd2l0aE1ldGFkYXRhT3JpZW50YXRpb246IC0xLFxuICAgIHdpdGhNZXRhZGF0YURlbnNpdHk6IDAsXG4gICAgd2l0aEljY1Byb2ZpbGU6ICcnLFxuICAgIHdpdGhFeGlmOiB7fSxcbiAgICB3aXRoRXhpZk1lcmdlOiB0cnVlLFxuICAgIHJlc29sdmVXaXRoT2JqZWN0OiBmYWxzZSxcbiAgICAvLyBvdXRwdXQgZm9ybWF0XG4gICAganBlZ1F1YWxpdHk6IDgwLFxuICAgIGpwZWdQcm9ncmVzc2l2ZTogZmFsc2UsXG4gICAganBlZ0Nocm9tYVN1YnNhbXBsaW5nOiAnNDoyOjAnLFxuICAgIGpwZWdUcmVsbGlzUXVhbnRpc2F0aW9uOiBmYWxzZSxcbiAgICBqcGVnT3ZlcnNob290RGVyaW5naW5nOiBmYWxzZSxcbiAgICBqcGVnT3B0aW1pc2VTY2FuczogZmFsc2UsXG4gICAganBlZ09wdGltaXNlQ29kaW5nOiB0cnVlLFxuICAgIGpwZWdRdWFudGlzYXRpb25UYWJsZTogMCxcbiAgICBwbmdQcm9ncmVzc2l2ZTogZmFsc2UsXG4gICAgcG5nQ29tcHJlc3Npb25MZXZlbDogNixcbiAgICBwbmdBZGFwdGl2ZUZpbHRlcmluZzogZmFsc2UsXG4gICAgcG5nUGFsZXR0ZTogZmFsc2UsXG4gICAgcG5nUXVhbGl0eTogMTAwLFxuICAgIHBuZ0VmZm9ydDogNyxcbiAgICBwbmdCaXRkZXB0aDogOCxcbiAgICBwbmdEaXRoZXI6IDEsXG4gICAganAyUXVhbGl0eTogODAsXG4gICAganAyVGlsZUhlaWdodDogNTEyLFxuICAgIGpwMlRpbGVXaWR0aDogNTEyLFxuICAgIGpwMkxvc3NsZXNzOiBmYWxzZSxcbiAgICBqcDJDaHJvbWFTdWJzYW1wbGluZzogJzQ6NDo0JyxcbiAgICB3ZWJwUXVhbGl0eTogODAsXG4gICAgd2VicEFscGhhUXVhbGl0eTogMTAwLFxuICAgIHdlYnBMb3NzbGVzczogZmFsc2UsXG4gICAgd2VicE5lYXJMb3NzbGVzczogZmFsc2UsXG4gICAgd2VicFNtYXJ0U3Vic2FtcGxlOiBmYWxzZSxcbiAgICB3ZWJwUHJlc2V0OiAnZGVmYXVsdCcsXG4gICAgd2VicEVmZm9ydDogNCxcbiAgICB3ZWJwTWluU2l6ZTogZmFsc2UsXG4gICAgd2VicE1peGVkOiBmYWxzZSxcbiAgICBnaWZCaXRkZXB0aDogOCxcbiAgICBnaWZFZmZvcnQ6IDcsXG4gICAgZ2lmRGl0aGVyOiAxLFxuICAgIGdpZkludGVyRnJhbWVNYXhFcnJvcjogMCxcbiAgICBnaWZJbnRlclBhbGV0dGVNYXhFcnJvcjogMyxcbiAgICBnaWZSZXVzZTogdHJ1ZSxcbiAgICBnaWZQcm9ncmVzc2l2ZTogZmFsc2UsXG4gICAgdGlmZlF1YWxpdHk6IDgwLFxuICAgIHRpZmZDb21wcmVzc2lvbjogJ2pwZWcnLFxuICAgIHRpZmZQcmVkaWN0b3I6ICdob3Jpem9udGFsJyxcbiAgICB0aWZmUHlyYW1pZDogZmFsc2UsXG4gICAgdGlmZk1pbmlzd2hpdGU6IGZhbHNlLFxuICAgIHRpZmZCaXRkZXB0aDogOCxcbiAgICB0aWZmVGlsZTogZmFsc2UsXG4gICAgdGlmZlRpbGVIZWlnaHQ6IDI1NixcbiAgICB0aWZmVGlsZVdpZHRoOiAyNTYsXG4gICAgdGlmZlhyZXM6IDEuMCxcbiAgICB0aWZmWXJlczogMS4wLFxuICAgIHRpZmZSZXNvbHV0aW9uVW5pdDogJ2luY2gnLFxuICAgIGhlaWZRdWFsaXR5OiA1MCxcbiAgICBoZWlmTG9zc2xlc3M6IGZhbHNlLFxuICAgIGhlaWZDb21wcmVzc2lvbjogJ2F2MScsXG4gICAgaGVpZkVmZm9ydDogNCxcbiAgICBoZWlmQ2hyb21hU3Vic2FtcGxpbmc6ICc0OjQ6NCcsXG4gICAgaGVpZkJpdGRlcHRoOiA4LFxuICAgIGp4bERpc3RhbmNlOiAxLFxuICAgIGp4bERlY29kaW5nVGllcjogMCxcbiAgICBqeGxFZmZvcnQ6IDcsXG4gICAganhsTG9zc2xlc3M6IGZhbHNlLFxuICAgIHJhd0RlcHRoOiAndWNoYXInLFxuICAgIHRpbGVTaXplOiAyNTYsXG4gICAgdGlsZU92ZXJsYXA6IDAsXG4gICAgdGlsZUNvbnRhaW5lcjogJ2ZzJyxcbiAgICB0aWxlTGF5b3V0OiAnZHonLFxuICAgIHRpbGVGb3JtYXQ6ICdsYXN0JyxcbiAgICB0aWxlRGVwdGg6ICdsYXN0JyxcbiAgICB0aWxlQW5nbGU6IDAsXG4gICAgdGlsZVNraXBCbGFua3M6IC0xLFxuICAgIHRpbGVCYWNrZ3JvdW5kOiBbMjU1LCAyNTUsIDI1NSwgMjU1XSxcbiAgICB0aWxlQ2VudHJlOiBmYWxzZSxcbiAgICB0aWxlSWQ6ICdodHRwczovL2V4YW1wbGUuY29tL2lpaWYnLFxuICAgIHRpbGVCYXNlbmFtZTogJycsXG4gICAgdGltZW91dFNlY29uZHM6IDAsXG4gICAgbGluZWFyQTogW10sXG4gICAgbGluZWFyQjogW10sXG4gICAgLy8gRnVuY3Rpb24gdG8gbm90aWZ5IG9mIGxpYnZpcHMgd2FybmluZ3NcbiAgICBkZWJ1Z2xvZzogd2FybmluZyA9PiB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCB3YXJuaW5nKTtcbiAgICAgIGRlYnVnbG9nKHdhcm5pbmcpO1xuICAgIH0sXG4gICAgLy8gRnVuY3Rpb24gdG8gbm90aWZ5IG9mIHF1ZXVlIGxlbmd0aCBjaGFuZ2VzXG4gICAgcXVldWVMaXN0ZW5lcjogZnVuY3Rpb24gKHF1ZXVlTGVuZ3RoKSB7XG4gICAgICBTaGFycC5xdWV1ZS5lbWl0KCdjaGFuZ2UnLCBxdWV1ZUxlbmd0aCk7XG4gICAgfVxuICB9O1xuICB0aGlzLm9wdGlvbnMuaW5wdXQgPSB0aGlzLl9jcmVhdGVJbnB1dERlc2NyaXB0b3IoaW5wdXQsIG9wdGlvbnMsIHsgYWxsb3dTdHJlYW06IHRydWUgfSk7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihTaGFycC5wcm90b3R5cGUsIHN0cmVhbS5EdXBsZXgucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihTaGFycCwgc3RyZWFtLkR1cGxleCk7XG5cbi8qKlxuICogVGFrZSBhIFwic25hcHNob3RcIiBvZiB0aGUgU2hhcnAgaW5zdGFuY2UsIHJldHVybmluZyBhIG5ldyBpbnN0YW5jZS5cbiAqIENsb25lZCBpbnN0YW5jZXMgaW5oZXJpdCB0aGUgaW5wdXQgb2YgdGhlaXIgcGFyZW50IGluc3RhbmNlLlxuICogVGhpcyBhbGxvd3MgbXVsdGlwbGUgb3V0cHV0IFN0cmVhbXMgYW5kIHRoZXJlZm9yZSBtdWx0aXBsZSBwcm9jZXNzaW5nIHBpcGVsaW5lcyB0byBzaGFyZSBhIHNpbmdsZSBpbnB1dCBTdHJlYW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHBpcGVsaW5lID0gc2hhcnAoKS5yb3RhdGUoKTtcbiAqIHBpcGVsaW5lLmNsb25lKCkucmVzaXplKDgwMCwgNjAwKS5waXBlKGZpcnN0V3JpdGFibGVTdHJlYW0pO1xuICogcGlwZWxpbmUuY2xvbmUoKS5leHRyYWN0KHsgbGVmdDogMjAsIHRvcDogMjAsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH0pLnBpcGUoc2Vjb25kV3JpdGFibGVTdHJlYW0pO1xuICogcmVhZGFibGVTdHJlYW0ucGlwZShwaXBlbGluZSk7XG4gKiAvLyBmaXJzdFdyaXRhYmxlU3RyZWFtIHJlY2VpdmVzIGF1dG8tcm90YXRlZCwgcmVzaXplZCByZWFkYWJsZVN0cmVhbVxuICogLy8gc2Vjb25kV3JpdGFibGVTdHJlYW0gcmVjZWl2ZXMgYXV0by1yb3RhdGVkLCBleHRyYWN0ZWQgcmVnaW9uIG9mIHJlYWRhYmxlU3RyZWFtXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIHBpcGVsaW5lIHRoYXQgd2lsbCBkb3dubG9hZCBhbiBpbWFnZSwgcmVzaXplIGl0IGFuZCBmb3JtYXQgaXQgdG8gZGlmZmVyZW50IGZpbGVzXG4gKiAvLyBVc2luZyBQcm9taXNlcyB0byBrbm93IHdoZW4gdGhlIHBpcGVsaW5lIGlzIGNvbXBsZXRlXG4gKiBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAqIGNvbnN0IGdvdCA9IHJlcXVpcmUoXCJnb3RcIik7XG4gKiBjb25zdCBzaGFycFN0cmVhbSA9IHNoYXJwKHsgZmFpbE9uOiAnbm9uZScgfSk7XG4gKlxuICogY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAqXG4gKiBwcm9taXNlcy5wdXNoKFxuICogICBzaGFycFN0cmVhbVxuICogICAgIC5jbG9uZSgpXG4gKiAgICAgLmpwZWcoeyBxdWFsaXR5OiAxMDAgfSlcbiAqICAgICAudG9GaWxlKFwib3JpZ2luYWxGaWxlLmpwZ1wiKVxuICogKTtcbiAqXG4gKiBwcm9taXNlcy5wdXNoKFxuICogICBzaGFycFN0cmVhbVxuICogICAgIC5jbG9uZSgpXG4gKiAgICAgLnJlc2l6ZSh7IHdpZHRoOiA1MDAgfSlcbiAqICAgICAuanBlZyh7IHF1YWxpdHk6IDgwIH0pXG4gKiAgICAgLnRvRmlsZShcIm9wdGltaXplZC01MDAuanBnXCIpXG4gKiApO1xuICpcbiAqIHByb21pc2VzLnB1c2goXG4gKiAgIHNoYXJwU3RyZWFtXG4gKiAgICAgLmNsb25lKClcbiAqICAgICAucmVzaXplKHsgd2lkdGg6IDUwMCB9KVxuICogICAgIC53ZWJwKHsgcXVhbGl0eTogODAgfSlcbiAqICAgICAudG9GaWxlKFwib3B0aW1pemVkLTUwMC53ZWJwXCIpXG4gKiApO1xuICpcbiAqIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290L2Jsb2IvbWFpbi9kb2N1bWVudGF0aW9uLzMtc3RyZWFtcy5tZFxuICogZ290LnN0cmVhbShcImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3NvbWUtZmlsZS5qcGdcIikucGlwZShzaGFycFN0cmVhbSk7XG4gKlxuICogUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gKiAgIC50aGVuKHJlcyA9PiB7IGNvbnNvbGUubG9nKFwiRG9uZSFcIiwgcmVzKTsgfSlcbiAqICAgLmNhdGNoKGVyciA9PiB7XG4gKiAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHByb2Nlc3NpbmcgZmlsZXMsIGxldCdzIGNsZWFuIGl0IHVwXCIsIGVycik7XG4gKiAgICAgdHJ5IHtcbiAqICAgICAgIGZzLnVubGlua1N5bmMoXCJvcmlnaW5hbEZpbGUuanBnXCIpO1xuICogICAgICAgZnMudW5saW5rU3luYyhcIm9wdGltaXplZC01MDAuanBnXCIpO1xuICogICAgICAgZnMudW5saW5rU3luYyhcIm9wdGltaXplZC01MDAud2VicFwiKTtcbiAqICAgICB9IGNhdGNoIChlKSB7fVxuICogICB9KTtcbiAqXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKi9cbmZ1bmN0aW9uIGNsb25lICgpIHtcbiAgLy8gQ2xvbmUgZXhpc3Rpbmcgb3B0aW9uc1xuICBjb25zdCBjbG9uZSA9IHRoaXMuY29uc3RydWN0b3IuY2FsbCgpO1xuICBjb25zdCB7IGRlYnVnbG9nLCBxdWV1ZUxpc3RlbmVyLCAuLi5vcHRpb25zIH0gPSB0aGlzLm9wdGlvbnM7XG4gIGNsb25lLm9wdGlvbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUob3B0aW9ucyk7XG4gIGNsb25lLm9wdGlvbnMuZGVidWdsb2cgPSBkZWJ1Z2xvZztcbiAgY2xvbmUub3B0aW9ucy5xdWV1ZUxpc3RlbmVyID0gcXVldWVMaXN0ZW5lcjtcbiAgLy8gUGFzcyAnZmluaXNoJyBldmVudCB0byBjbG9uZSBmb3IgU3RyZWFtLWJhc2VkIGlucHV0XG4gIGlmICh0aGlzLl9pc1N0cmVhbUlucHV0KCkpIHtcbiAgICB0aGlzLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAvLyBDbG9uZSBpbmhlcml0cyBpbnB1dCBkYXRhXG4gICAgICB0aGlzLl9mbGF0dGVuQnVmZmVySW4oKTtcbiAgICAgIGNsb25lLm9wdGlvbnMuaW5wdXQuYnVmZmVyID0gdGhpcy5vcHRpb25zLmlucHV0LmJ1ZmZlcjtcbiAgICAgIGNsb25lLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjbG9uZTtcbn1cbk9iamVjdC5hc3NpZ24oU2hhcnAucHJvdG90eXBlLCB7IGNsb25lIH0pO1xuXG4vKipcbiAqIEV4cG9ydCBjb25zdHJ1Y3Rvci5cbiAqIEBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gU2hhcnA7XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcnJheWlzaChvYmopIHtcblx0aWYgKCFvYmogfHwgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXkgfHwgQXJyYXkuaXNBcnJheShvYmopIHx8XG5cdFx0KG9iai5sZW5ndGggPj0gMCAmJiAob2JqLnNwbGljZSBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8XG5cdFx0XHQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIChvYmoubGVuZ3RoIC0gMSkpICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9PSAnU3RyaW5nJykpKTtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQXJyYXlpc2ggPSByZXF1aXJlKCdpcy1hcnJheWlzaCcpO1xuXG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxudmFyIHN3aXp6bGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN3aXp6bGUoYXJncykge1xuXHR2YXIgcmVzdWx0cyA9IFtdO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0dmFyIGFyZyA9IGFyZ3NbaV07XG5cblx0XHRpZiAoaXNBcnJheWlzaChhcmcpKSB7XG5cdFx0XHQvLyBodHRwOi8vanNwZXJmLmNvbS9qYXZhc2NyaXB0LWFycmF5LWNvbmNhdC12cy1wdXNoLzk4XG5cdFx0XHRyZXN1bHRzID0gY29uY2F0LmNhbGwocmVzdWx0cywgc2xpY2UuY2FsbChhcmcpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0cy5wdXNoKGFyZyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG5zd2l6emxlLndyYXAgPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gZm4oc3dpenpsZShhcmd1bWVudHMpKTtcblx0fTtcbn07XG4iLAogICAgIi8qIE1JVCBsaWNlbnNlICovXG52YXIgY29sb3JOYW1lcyA9IHJlcXVpcmUoJ2NvbG9yLW5hbWUnKTtcbnZhciBzd2l6emxlID0gcmVxdWlyZSgnc2ltcGxlLXN3aXp6bGUnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIHJldmVyc2VOYW1lcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbi8vIGNyZWF0ZSBhIGxpc3Qgb2YgcmV2ZXJzZSBjb2xvciBuYW1lc1xuZm9yICh2YXIgbmFtZSBpbiBjb2xvck5hbWVzKSB7XG5cdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbG9yTmFtZXMsIG5hbWUpKSB7XG5cdFx0cmV2ZXJzZU5hbWVzW2NvbG9yTmFtZXNbbmFtZV1dID0gbmFtZTtcblx0fVxufVxuXG52YXIgY3MgPSBtb2R1bGUuZXhwb3J0cyA9IHtcblx0dG86IHt9LFxuXHRnZXQ6IHt9XG59O1xuXG5jcy5nZXQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdHZhciBwcmVmaXggPSBzdHJpbmcuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCk7XG5cdHZhciB2YWw7XG5cdHZhciBtb2RlbDtcblx0c3dpdGNoIChwcmVmaXgpIHtcblx0XHRjYXNlICdoc2wnOlxuXHRcdFx0dmFsID0gY3MuZ2V0LmhzbChzdHJpbmcpO1xuXHRcdFx0bW9kZWwgPSAnaHNsJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2h3Yic6XG5cdFx0XHR2YWwgPSBjcy5nZXQuaHdiKHN0cmluZyk7XG5cdFx0XHRtb2RlbCA9ICdod2InO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHZhbCA9IGNzLmdldC5yZ2Ioc3RyaW5nKTtcblx0XHRcdG1vZGVsID0gJ3JnYic7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGlmICghdmFsKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4ge21vZGVsOiBtb2RlbCwgdmFsdWU6IHZhbH07XG59O1xuXG5jcy5nZXQucmdiID0gZnVuY3Rpb24gKHN0cmluZykge1xuXHRpZiAoIXN0cmluZykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGFiYnIgPSAvXiMoW2EtZjAtOV17Myw0fSkkL2k7XG5cdHZhciBoZXggPSAvXiMoW2EtZjAtOV17Nn0pKFthLWYwLTldezJ9KT8kL2k7XG5cdHZhciByZ2JhID0gL15yZ2JhP1xcKFxccyooWystXT9cXGQrKSg/PVtcXHMsXSlcXHMqKD86LFxccyopPyhbKy1dP1xcZCspKD89W1xccyxdKVxccyooPzosXFxzKik/KFsrLV0/XFxkKylcXHMqKD86Wyx8XFwvXVxccyooWystXT9bXFxkXFwuXSspKCU/KVxccyopP1xcKSQvO1xuXHR2YXIgcGVyID0gL15yZ2JhP1xcKFxccyooWystXT9bXFxkXFwuXSspXFwlXFxzKiw/XFxzKihbKy1dP1tcXGRcXC5dKylcXCVcXHMqLD9cXHMqKFsrLV0/W1xcZFxcLl0rKVxcJVxccyooPzpbLHxcXC9dXFxzKihbKy1dP1tcXGRcXC5dKykoJT8pXFxzKik/XFwpJC87XG5cdHZhciBrZXl3b3JkID0gL14oXFx3KykkLztcblxuXHR2YXIgcmdiID0gWzAsIDAsIDAsIDFdO1xuXHR2YXIgbWF0Y2g7XG5cdHZhciBpO1xuXHR2YXIgaGV4QWxwaGE7XG5cblx0aWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGhleCkpIHtcblx0XHRoZXhBbHBoYSA9IG1hdGNoWzJdO1xuXHRcdG1hdGNoID0gbWF0Y2hbMV07XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0XHQvLyBodHRwczovL2pzcGVyZi5jb20vc2xpY2UtdnMtc3Vic3RyLXZzLXN1YnN0cmluZy1tZXRob2RzLWxvbmctc3RyaW5nLzE5XG5cdFx0XHR2YXIgaTIgPSBpICogMjtcblx0XHRcdHJnYltpXSA9IHBhcnNlSW50KG1hdGNoLnNsaWNlKGkyLCBpMiArIDIpLCAxNik7XG5cdFx0fVxuXG5cdFx0aWYgKGhleEFscGhhKSB7XG5cdFx0XHRyZ2JbM10gPSBwYXJzZUludChoZXhBbHBoYSwgMTYpIC8gMjU1O1xuXHRcdH1cblx0fSBlbHNlIGlmIChtYXRjaCA9IHN0cmluZy5tYXRjaChhYmJyKSkge1xuXHRcdG1hdGNoID0gbWF0Y2hbMV07XG5cdFx0aGV4QWxwaGEgPSBtYXRjaFszXTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHRcdHJnYltpXSA9IHBhcnNlSW50KG1hdGNoW2ldICsgbWF0Y2hbaV0sIDE2KTtcblx0XHR9XG5cblx0XHRpZiAoaGV4QWxwaGEpIHtcblx0XHRcdHJnYlszXSA9IHBhcnNlSW50KGhleEFscGhhICsgaGV4QWxwaGEsIDE2KSAvIDI1NTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2gocmdiYSkpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0XHRyZ2JbaV0gPSBwYXJzZUludChtYXRjaFtpICsgMV0sIDApO1xuXHRcdH1cblxuXHRcdGlmIChtYXRjaFs0XSkge1xuXHRcdFx0aWYgKG1hdGNoWzVdKSB7XG5cdFx0XHRcdHJnYlszXSA9IHBhcnNlRmxvYXQobWF0Y2hbNF0pICogMC4wMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJnYlszXSA9IHBhcnNlRmxvYXQobWF0Y2hbNF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChtYXRjaCA9IHN0cmluZy5tYXRjaChwZXIpKSB7XG5cdFx0Zm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdFx0cmdiW2ldID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KG1hdGNoW2kgKyAxXSkgKiAyLjU1KTtcblx0XHR9XG5cblx0XHRpZiAobWF0Y2hbNF0pIHtcblx0XHRcdGlmIChtYXRjaFs1XSkge1xuXHRcdFx0XHRyZ2JbM10gPSBwYXJzZUZsb2F0KG1hdGNoWzRdKSAqIDAuMDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZ2JbM10gPSBwYXJzZUZsb2F0KG1hdGNoWzRdKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goa2V5d29yZCkpIHtcblx0XHRpZiAobWF0Y2hbMV0gPT09ICd0cmFuc3BhcmVudCcpIHtcblx0XHRcdHJldHVybiBbMCwgMCwgMCwgMF07XG5cdFx0fVxuXG5cdFx0aWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbG9yTmFtZXMsIG1hdGNoWzFdKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmdiID0gY29sb3JOYW1lc1ttYXRjaFsxXV07XG5cdFx0cmdiWzNdID0gMTtcblxuXHRcdHJldHVybiByZ2I7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0cmdiW2ldID0gY2xhbXAocmdiW2ldLCAwLCAyNTUpO1xuXHR9XG5cdHJnYlszXSA9IGNsYW1wKHJnYlszXSwgMCwgMSk7XG5cblx0cmV0dXJuIHJnYjtcbn07XG5cbmNzLmdldC5oc2wgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdGlmICghc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgaHNsID0gL15oc2xhP1xcKFxccyooWystXT8oPzpcXGR7MCwzfVxcLik/XFxkKykoPzpkZWcpP1xccyosP1xccyooWystXT9bXFxkXFwuXSspJVxccyosP1xccyooWystXT9bXFxkXFwuXSspJVxccyooPzpbLHxcXC9dXFxzKihbKy1dPyg/PVxcLlxcZHxcXGQpKD86MHxbMS05XVxcZCopPyg/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPylcXHMqKT9cXCkkLztcblx0dmFyIG1hdGNoID0gc3RyaW5nLm1hdGNoKGhzbCk7XG5cblx0aWYgKG1hdGNoKSB7XG5cdFx0dmFyIGFscGhhID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7XG5cdFx0dmFyIGggPSAoKHBhcnNlRmxvYXQobWF0Y2hbMV0pICUgMzYwKSArIDM2MCkgJSAzNjA7XG5cdFx0dmFyIHMgPSBjbGFtcChwYXJzZUZsb2F0KG1hdGNoWzJdKSwgMCwgMTAwKTtcblx0XHR2YXIgbCA9IGNsYW1wKHBhcnNlRmxvYXQobWF0Y2hbM10pLCAwLCAxMDApO1xuXHRcdHZhciBhID0gY2xhbXAoaXNOYU4oYWxwaGEpID8gMSA6IGFscGhhLCAwLCAxKTtcblxuXHRcdHJldHVybiBbaCwgcywgbCwgYV07XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbmNzLmdldC5od2IgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdGlmICghc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgaHdiID0gL15od2JcXChcXHMqKFsrLV0/XFxkezAsM30oPzpcXC5cXGQrKT8pKD86ZGVnKT9cXHMqLFxccyooWystXT9bXFxkXFwuXSspJVxccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKig/OixcXHMqKFsrLV0/KD89XFwuXFxkfFxcZCkoPzowfFsxLTldXFxkKik/KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KVxccyopP1xcKSQvO1xuXHR2YXIgbWF0Y2ggPSBzdHJpbmcubWF0Y2goaHdiKTtcblxuXHRpZiAobWF0Y2gpIHtcblx0XHR2YXIgYWxwaGEgPSBwYXJzZUZsb2F0KG1hdGNoWzRdKTtcblx0XHR2YXIgaCA9ICgocGFyc2VGbG9hdChtYXRjaFsxXSkgJSAzNjApICsgMzYwKSAlIDM2MDtcblx0XHR2YXIgdyA9IGNsYW1wKHBhcnNlRmxvYXQobWF0Y2hbMl0pLCAwLCAxMDApO1xuXHRcdHZhciBiID0gY2xhbXAocGFyc2VGbG9hdChtYXRjaFszXSksIDAsIDEwMCk7XG5cdFx0dmFyIGEgPSBjbGFtcChpc05hTihhbHBoYSkgPyAxIDogYWxwaGEsIDAsIDEpO1xuXHRcdHJldHVybiBbaCwgdywgYiwgYV07XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbmNzLnRvLmhleCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHJnYmEgPSBzd2l6emxlKGFyZ3VtZW50cyk7XG5cblx0cmV0dXJuIChcblx0XHQnIycgK1xuXHRcdGhleERvdWJsZShyZ2JhWzBdKSArXG5cdFx0aGV4RG91YmxlKHJnYmFbMV0pICtcblx0XHRoZXhEb3VibGUocmdiYVsyXSkgK1xuXHRcdChyZ2JhWzNdIDwgMVxuXHRcdFx0PyAoaGV4RG91YmxlKE1hdGgucm91bmQocmdiYVszXSAqIDI1NSkpKVxuXHRcdFx0OiAnJylcblx0KTtcbn07XG5cbmNzLnRvLnJnYiA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHJnYmEgPSBzd2l6emxlKGFyZ3VtZW50cyk7XG5cblx0cmV0dXJuIHJnYmEubGVuZ3RoIDwgNCB8fCByZ2JhWzNdID09PSAxXG5cdFx0PyAncmdiKCcgKyBNYXRoLnJvdW5kKHJnYmFbMF0pICsgJywgJyArIE1hdGgucm91bmQocmdiYVsxXSkgKyAnLCAnICsgTWF0aC5yb3VuZChyZ2JhWzJdKSArICcpJ1xuXHRcdDogJ3JnYmEoJyArIE1hdGgucm91bmQocmdiYVswXSkgKyAnLCAnICsgTWF0aC5yb3VuZChyZ2JhWzFdKSArICcsICcgKyBNYXRoLnJvdW5kKHJnYmFbMl0pICsgJywgJyArIHJnYmFbM10gKyAnKSc7XG59O1xuXG5jcy50by5yZ2IucGVyY2VudCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHJnYmEgPSBzd2l6emxlKGFyZ3VtZW50cyk7XG5cblx0dmFyIHIgPSBNYXRoLnJvdW5kKHJnYmFbMF0gLyAyNTUgKiAxMDApO1xuXHR2YXIgZyA9IE1hdGgucm91bmQocmdiYVsxXSAvIDI1NSAqIDEwMCk7XG5cdHZhciBiID0gTWF0aC5yb3VuZChyZ2JhWzJdIC8gMjU1ICogMTAwKTtcblxuXHRyZXR1cm4gcmdiYS5sZW5ndGggPCA0IHx8IHJnYmFbM10gPT09IDFcblx0XHQ/ICdyZ2IoJyArIHIgKyAnJSwgJyArIGcgKyAnJSwgJyArIGIgKyAnJSknXG5cdFx0OiAncmdiYSgnICsgciArICclLCAnICsgZyArICclLCAnICsgYiArICclLCAnICsgcmdiYVszXSArICcpJztcbn07XG5cbmNzLnRvLmhzbCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIGhzbGEgPSBzd2l6emxlKGFyZ3VtZW50cyk7XG5cdHJldHVybiBoc2xhLmxlbmd0aCA8IDQgfHwgaHNsYVszXSA9PT0gMVxuXHRcdD8gJ2hzbCgnICsgaHNsYVswXSArICcsICcgKyBoc2xhWzFdICsgJyUsICcgKyBoc2xhWzJdICsgJyUpJ1xuXHRcdDogJ2hzbGEoJyArIGhzbGFbMF0gKyAnLCAnICsgaHNsYVsxXSArICclLCAnICsgaHNsYVsyXSArICclLCAnICsgaHNsYVszXSArICcpJztcbn07XG5cbi8vIGh3YiBpcyBhIGJpdCBkaWZmZXJlbnQgdGhhbiByZ2IoYSkgJiBoc2woYSkgc2luY2UgdGhlcmUgaXMgbm8gYWxwaGEgc3BlY2lmaWMgc3ludGF4XG4vLyAoaHdiIGhhdmUgYWxwaGEgb3B0aW9uYWwgJiAxIGlzIGRlZmF1bHQgdmFsdWUpXG5jcy50by5od2IgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBod2JhID0gc3dpenpsZShhcmd1bWVudHMpO1xuXG5cdHZhciBhID0gJyc7XG5cdGlmIChod2JhLmxlbmd0aCA+PSA0ICYmIGh3YmFbM10gIT09IDEpIHtcblx0XHRhID0gJywgJyArIGh3YmFbM107XG5cdH1cblxuXHRyZXR1cm4gJ2h3YignICsgaHdiYVswXSArICcsICcgKyBod2JhWzFdICsgJyUsICcgKyBod2JhWzJdICsgJyUnICsgYSArICcpJztcbn07XG5cbmNzLnRvLmtleXdvcmQgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHJldHVybiByZXZlcnNlTmFtZXNbcmdiLnNsaWNlKDAsIDMpXTtcbn07XG5cbi8vIGhlbHBlcnNcbmZ1bmN0aW9uIGNsYW1wKG51bSwgbWluLCBtYXgpIHtcblx0cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG1pbiwgbnVtKSwgbWF4KTtcbn1cblxuZnVuY3Rpb24gaGV4RG91YmxlKG51bSkge1xuXHR2YXIgc3RyID0gTWF0aC5yb3VuZChudW0pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gKHN0ci5sZW5ndGggPCAyKSA/ICcwJyArIHN0ciA6IHN0cjtcbn1cbiIsCiAgICAiY29uc3QgY29sb3JTdHJpbmcgPSByZXF1aXJlKCdjb2xvci1zdHJpbmcnKTtcbmNvbnN0IGNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cbmNvbnN0IHNraXBwZWRNb2RlbHMgPSBbXG5cdC8vIFRvIGJlIGhvbmVzdCwgSSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGtleXdvcmQgYmVsb25ncyBpbiBjb2xvciBjb252ZXJ0LCBidXQgZWguXG5cdCdrZXl3b3JkJyxcblxuXHQvLyBHcmF5IGNvbmZsaWN0cyB3aXRoIHNvbWUgbWV0aG9kIG5hbWVzLCBhbmQgaGFzIGl0cyBvd24gbWV0aG9kIGRlZmluZWQuXG5cdCdncmF5JyxcblxuXHQvLyBTaG91bGRuJ3QgcmVhbGx5IGJlIGluIGNvbG9yLWNvbnZlcnQgZWl0aGVyLi4uXG5cdCdoZXgnLFxuXTtcblxuY29uc3QgaGFzaGVkTW9kZWxLZXlzID0ge307XG5mb3IgKGNvbnN0IG1vZGVsIG9mIE9iamVjdC5rZXlzKGNvbnZlcnQpKSB7XG5cdGhhc2hlZE1vZGVsS2V5c1tbLi4uY29udmVydFttb2RlbF0ubGFiZWxzXS5zb3J0KCkuam9pbignJyldID0gbW9kZWw7XG59XG5cbmNvbnN0IGxpbWl0ZXJzID0ge307XG5cbmZ1bmN0aW9uIENvbG9yKG9iamVjdCwgbW9kZWwpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbG9yKSkge1xuXHRcdHJldHVybiBuZXcgQ29sb3Iob2JqZWN0LCBtb2RlbCk7XG5cdH1cblxuXHRpZiAobW9kZWwgJiYgbW9kZWwgaW4gc2tpcHBlZE1vZGVscykge1xuXHRcdG1vZGVsID0gbnVsbDtcblx0fVxuXG5cdGlmIChtb2RlbCAmJiAhKG1vZGVsIGluIGNvbnZlcnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1vZGVsOiAnICsgbW9kZWwpO1xuXHR9XG5cblx0bGV0IGk7XG5cdGxldCBjaGFubmVscztcblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuXHRcdHRoaXMubW9kZWwgPSAncmdiJztcblx0XHR0aGlzLmNvbG9yID0gWzAsIDAsIDBdO1xuXHRcdHRoaXMudmFscGhhID0gMTtcblx0fSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBDb2xvcikge1xuXHRcdHRoaXMubW9kZWwgPSBvYmplY3QubW9kZWw7XG5cdFx0dGhpcy5jb2xvciA9IFsuLi5vYmplY3QuY29sb3JdO1xuXHRcdHRoaXMudmFscGhhID0gb2JqZWN0LnZhbHBoYTtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbG9yU3RyaW5nLmdldChvYmplY3QpO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIGNvbG9yIGZyb20gc3RyaW5nOiAnICsgb2JqZWN0KTtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGVsID0gcmVzdWx0Lm1vZGVsO1xuXHRcdGNoYW5uZWxzID0gY29udmVydFt0aGlzLm1vZGVsXS5jaGFubmVscztcblx0XHR0aGlzLmNvbG9yID0gcmVzdWx0LnZhbHVlLnNsaWNlKDAsIGNoYW5uZWxzKTtcblx0XHR0aGlzLnZhbHBoYSA9IHR5cGVvZiByZXN1bHQudmFsdWVbY2hhbm5lbHNdID09PSAnbnVtYmVyJyA/IHJlc3VsdC52YWx1ZVtjaGFubmVsc10gOiAxO1xuXHR9IGVsc2UgaWYgKG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0dGhpcy5tb2RlbCA9IG1vZGVsIHx8ICdyZ2InO1xuXHRcdGNoYW5uZWxzID0gY29udmVydFt0aGlzLm1vZGVsXS5jaGFubmVscztcblx0XHRjb25zdCBuZXdBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iamVjdCwgMCwgY2hhbm5lbHMpO1xuXHRcdHRoaXMuY29sb3IgPSB6ZXJvQXJyYXkobmV3QXJyYXksIGNoYW5uZWxzKTtcblx0XHR0aGlzLnZhbHBoYSA9IHR5cGVvZiBvYmplY3RbY2hhbm5lbHNdID09PSAnbnVtYmVyJyA/IG9iamVjdFtjaGFubmVsc10gOiAxO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInKSB7XG5cdFx0Ly8gVGhpcyBpcyBhbHdheXMgUkdCIC0gY2FuIGJlIGNvbnZlcnRlZCBsYXRlciBvbi5cblx0XHR0aGlzLm1vZGVsID0gJ3JnYic7XG5cdFx0dGhpcy5jb2xvciA9IFtcblx0XHRcdChvYmplY3QgPj4gMTYpICYgMHhGRixcblx0XHRcdChvYmplY3QgPj4gOCkgJiAweEZGLFxuXHRcdFx0b2JqZWN0ICYgMHhGRixcblx0XHRdO1xuXHRcdHRoaXMudmFscGhhID0gMTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnZhbHBoYSA9IDE7XG5cblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRpZiAoJ2FscGhhJyBpbiBvYmplY3QpIHtcblx0XHRcdGtleXMuc3BsaWNlKGtleXMuaW5kZXhPZignYWxwaGEnKSwgMSk7XG5cdFx0XHR0aGlzLnZhbHBoYSA9IHR5cGVvZiBvYmplY3QuYWxwaGEgPT09ICdudW1iZXInID8gb2JqZWN0LmFscGhhIDogMDtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNoZWRLZXlzID0ga2V5cy5zb3J0KCkuam9pbignJyk7XG5cdFx0aWYgKCEoaGFzaGVkS2V5cyBpbiBoYXNoZWRNb2RlbEtleXMpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBjb2xvciBmcm9tIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KG9iamVjdCkpO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kZWwgPSBoYXNoZWRNb2RlbEtleXNbaGFzaGVkS2V5c107XG5cblx0XHRjb25zdCB7bGFiZWxzfSA9IGNvbnZlcnRbdGhpcy5tb2RlbF07XG5cdFx0Y29uc3QgY29sb3IgPSBbXTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb2xvci5wdXNoKG9iamVjdFtsYWJlbHNbaV1dKTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbG9yID0gemVyb0FycmF5KGNvbG9yKTtcblx0fVxuXG5cdC8vIFBlcmZvcm0gbGltaXRhdGlvbnMgKGNsYW1waW5nLCBldGMuKVxuXHRpZiAobGltaXRlcnNbdGhpcy5tb2RlbF0pIHtcblx0XHRjaGFubmVscyA9IGNvbnZlcnRbdGhpcy5tb2RlbF0uY2hhbm5lbHM7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpbWl0ID0gbGltaXRlcnNbdGhpcy5tb2RlbF1baV07XG5cdFx0XHRpZiAobGltaXQpIHtcblx0XHRcdFx0dGhpcy5jb2xvcltpXSA9IGxpbWl0KHRoaXMuY29sb3JbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMudmFscGhhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdGhpcy52YWxwaGEpKTtcblxuXHRpZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRcdE9iamVjdC5mcmVlemUodGhpcyk7XG5cdH1cbn1cblxuQ29sb3IucHJvdG90eXBlID0ge1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5zdHJpbmcoKTtcblx0fSxcblxuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXNbdGhpcy5tb2RlbF0oKTtcblx0fSxcblxuXHRzdHJpbmcocGxhY2VzKSB7XG5cdFx0bGV0IHNlbGYgPSB0aGlzLm1vZGVsIGluIGNvbG9yU3RyaW5nLnRvID8gdGhpcyA6IHRoaXMucmdiKCk7XG5cdFx0c2VsZiA9IHNlbGYucm91bmQodHlwZW9mIHBsYWNlcyA9PT0gJ251bWJlcicgPyBwbGFjZXMgOiAxKTtcblx0XHRjb25zdCBhcmdzID0gc2VsZi52YWxwaGEgPT09IDEgPyBzZWxmLmNvbG9yIDogWy4uLnNlbGYuY29sb3IsIHRoaXMudmFscGhhXTtcblx0XHRyZXR1cm4gY29sb3JTdHJpbmcudG9bc2VsZi5tb2RlbF0oYXJncyk7XG5cdH0sXG5cblx0cGVyY2VudFN0cmluZyhwbGFjZXMpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcy5yZ2IoKS5yb3VuZCh0eXBlb2YgcGxhY2VzID09PSAnbnVtYmVyJyA/IHBsYWNlcyA6IDEpO1xuXHRcdGNvbnN0IGFyZ3MgPSBzZWxmLnZhbHBoYSA9PT0gMSA/IHNlbGYuY29sb3IgOiBbLi4uc2VsZi5jb2xvciwgdGhpcy52YWxwaGFdO1xuXHRcdHJldHVybiBjb2xvclN0cmluZy50by5yZ2IucGVyY2VudChhcmdzKTtcblx0fSxcblxuXHRhcnJheSgpIHtcblx0XHRyZXR1cm4gdGhpcy52YWxwaGEgPT09IDEgPyBbLi4udGhpcy5jb2xvcl0gOiBbLi4udGhpcy5jb2xvciwgdGhpcy52YWxwaGFdO1xuXHR9LFxuXG5cdG9iamVjdCgpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblx0XHRjb25zdCB7Y2hhbm5lbHN9ID0gY29udmVydFt0aGlzLm1vZGVsXTtcblx0XHRjb25zdCB7bGFiZWxzfSA9IGNvbnZlcnRbdGhpcy5tb2RlbF07XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHtcblx0XHRcdHJlc3VsdFtsYWJlbHNbaV1dID0gdGhpcy5jb2xvcltpXTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy52YWxwaGEgIT09IDEpIHtcblx0XHRcdHJlc3VsdC5hbHBoYSA9IHRoaXMudmFscGhhO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0dW5pdEFycmF5KCkge1xuXHRcdGNvbnN0IHJnYiA9IHRoaXMucmdiKCkuY29sb3I7XG5cdFx0cmdiWzBdIC89IDI1NTtcblx0XHRyZ2JbMV0gLz0gMjU1O1xuXHRcdHJnYlsyXSAvPSAyNTU7XG5cblx0XHRpZiAodGhpcy52YWxwaGEgIT09IDEpIHtcblx0XHRcdHJnYi5wdXNoKHRoaXMudmFscGhhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmdiO1xuXHR9LFxuXG5cdHVuaXRPYmplY3QoKSB7XG5cdFx0Y29uc3QgcmdiID0gdGhpcy5yZ2IoKS5vYmplY3QoKTtcblx0XHRyZ2IuciAvPSAyNTU7XG5cdFx0cmdiLmcgLz0gMjU1O1xuXHRcdHJnYi5iIC89IDI1NTtcblxuXHRcdGlmICh0aGlzLnZhbHBoYSAhPT0gMSkge1xuXHRcdFx0cmdiLmFscGhhID0gdGhpcy52YWxwaGE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJnYjtcblx0fSxcblxuXHRyb3VuZChwbGFjZXMpIHtcblx0XHRwbGFjZXMgPSBNYXRoLm1heChwbGFjZXMgfHwgMCwgMCk7XG5cdFx0cmV0dXJuIG5ldyBDb2xvcihbLi4udGhpcy5jb2xvci5tYXAocm91bmRUb1BsYWNlKHBsYWNlcykpLCB0aGlzLnZhbHBoYV0sIHRoaXMubW9kZWwpO1xuXHR9LFxuXG5cdGFscGhhKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgQ29sb3IoWy4uLnRoaXMuY29sb3IsIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlKSldLCB0aGlzLm1vZGVsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy52YWxwaGE7XG5cdH0sXG5cblx0Ly8gUmdiXG5cdHJlZDogZ2V0c2V0KCdyZ2InLCAwLCBtYXhmbigyNTUpKSxcblx0Z3JlZW46IGdldHNldCgncmdiJywgMSwgbWF4Zm4oMjU1KSksXG5cdGJsdWU6IGdldHNldCgncmdiJywgMiwgbWF4Zm4oMjU1KSksXG5cblx0aHVlOiBnZXRzZXQoWydoc2wnLCAnaHN2JywgJ2hzbCcsICdod2InLCAnaGNnJ10sIDAsIHZhbHVlID0+ICgodmFsdWUgJSAzNjApICsgMzYwKSAlIDM2MCksXG5cblx0c2F0dXJhdGlvbmw6IGdldHNldCgnaHNsJywgMSwgbWF4Zm4oMTAwKSksXG5cdGxpZ2h0bmVzczogZ2V0c2V0KCdoc2wnLCAyLCBtYXhmbigxMDApKSxcblxuXHRzYXR1cmF0aW9udjogZ2V0c2V0KCdoc3YnLCAxLCBtYXhmbigxMDApKSxcblx0dmFsdWU6IGdldHNldCgnaHN2JywgMiwgbWF4Zm4oMTAwKSksXG5cblx0Y2hyb21hOiBnZXRzZXQoJ2hjZycsIDEsIG1heGZuKDEwMCkpLFxuXHRncmF5OiBnZXRzZXQoJ2hjZycsIDIsIG1heGZuKDEwMCkpLFxuXG5cdHdoaXRlOiBnZXRzZXQoJ2h3YicsIDEsIG1heGZuKDEwMCkpLFxuXHR3YmxhY2s6IGdldHNldCgnaHdiJywgMiwgbWF4Zm4oMTAwKSksXG5cblx0Y3lhbjogZ2V0c2V0KCdjbXlrJywgMCwgbWF4Zm4oMTAwKSksXG5cdG1hZ2VudGE6IGdldHNldCgnY215aycsIDEsIG1heGZuKDEwMCkpLFxuXHR5ZWxsb3c6IGdldHNldCgnY215aycsIDIsIG1heGZuKDEwMCkpLFxuXHRibGFjazogZ2V0c2V0KCdjbXlrJywgMywgbWF4Zm4oMTAwKSksXG5cblx0eDogZ2V0c2V0KCd4eXonLCAwLCBtYXhmbig5NS4wNDcpKSxcblx0eTogZ2V0c2V0KCd4eXonLCAxLCBtYXhmbigxMDApKSxcblx0ejogZ2V0c2V0KCd4eXonLCAyLCBtYXhmbigxMDguODMzKSksXG5cblx0bDogZ2V0c2V0KCdsYWInLCAwLCBtYXhmbigxMDApKSxcblx0YTogZ2V0c2V0KCdsYWInLCAxKSxcblx0YjogZ2V0c2V0KCdsYWInLCAyKSxcblxuXHRrZXl3b3JkKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgQ29sb3IodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb252ZXJ0W3RoaXMubW9kZWxdLmtleXdvcmQodGhpcy5jb2xvcik7XG5cdH0sXG5cblx0aGV4KHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgQ29sb3IodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2xvclN0cmluZy50by5oZXgodGhpcy5yZ2IoKS5yb3VuZCgpLmNvbG9yKTtcblx0fSxcblxuXHRoZXhhKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgQ29sb3IodmFsdWUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJnYkFycmF5ID0gdGhpcy5yZ2IoKS5yb3VuZCgpLmNvbG9yO1xuXG5cdFx0bGV0IGFscGhhSGV4ID0gTWF0aC5yb3VuZCh0aGlzLnZhbHBoYSAqIDI1NSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdFx0aWYgKGFscGhhSGV4Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0YWxwaGFIZXggPSAnMCcgKyBhbHBoYUhleDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sb3JTdHJpbmcudG8uaGV4KHJnYkFycmF5KSArIGFscGhhSGV4O1xuXHR9LFxuXG5cdHJnYk51bWJlcigpIHtcblx0XHRjb25zdCByZ2IgPSB0aGlzLnJnYigpLmNvbG9yO1xuXHRcdHJldHVybiAoKHJnYlswXSAmIDB4RkYpIDw8IDE2KSB8ICgocmdiWzFdICYgMHhGRikgPDwgOCkgfCAocmdiWzJdICYgMHhGRik7XG5cdH0sXG5cblx0bHVtaW5vc2l0eSgpIHtcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG5cdFx0Y29uc3QgcmdiID0gdGhpcy5yZ2IoKS5jb2xvcjtcblxuXHRcdGNvbnN0IGx1bSA9IFtdO1xuXHRcdGZvciAoY29uc3QgW2ksIGVsZW1lbnRdIG9mIHJnYi5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IGNoYW4gPSBlbGVtZW50IC8gMjU1O1xuXHRcdFx0bHVtW2ldID0gKGNoYW4gPD0gMC4wNDA0NSkgPyBjaGFuIC8gMTIuOTIgOiAoKGNoYW4gKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40O1xuXHRcdH1cblxuXHRcdHJldHVybiAwLjIxMjYgKiBsdW1bMF0gKyAwLjcxNTIgKiBsdW1bMV0gKyAwLjA3MjIgKiBsdW1bMl07XG5cdH0sXG5cblx0Y29udHJhc3QoY29sb3IyKSB7XG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNjb250cmFzdC1yYXRpb2RlZlxuXHRcdGNvbnN0IGx1bTEgPSB0aGlzLmx1bWlub3NpdHkoKTtcblx0XHRjb25zdCBsdW0yID0gY29sb3IyLmx1bWlub3NpdHkoKTtcblxuXHRcdGlmIChsdW0xID4gbHVtMikge1xuXHRcdFx0cmV0dXJuIChsdW0xICsgMC4wNSkgLyAobHVtMiArIDAuMDUpO1xuXHRcdH1cblxuXHRcdHJldHVybiAobHVtMiArIDAuMDUpIC8gKGx1bTEgKyAwLjA1KTtcblx0fSxcblxuXHRsZXZlbChjb2xvcjIpIHtcblx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRy8jY29udHJhc3QtZW5oYW5jZWRcblx0XHRjb25zdCBjb250cmFzdFJhdGlvID0gdGhpcy5jb250cmFzdChjb2xvcjIpO1xuXHRcdGlmIChjb250cmFzdFJhdGlvID49IDcpIHtcblx0XHRcdHJldHVybiAnQUFBJztcblx0XHR9XG5cblx0XHRyZXR1cm4gKGNvbnRyYXN0UmF0aW8gPj0gNC41KSA/ICdBQScgOiAnJztcblx0fSxcblxuXHRpc0RhcmsoKSB7XG5cdFx0Ly8gWUlRIGVxdWF0aW9uIGZyb20gaHR0cDovLzI0d2F5cy5vcmcvMjAxMC9jYWxjdWxhdGluZy1jb2xvci1jb250cmFzdFxuXHRcdGNvbnN0IHJnYiA9IHRoaXMucmdiKCkuY29sb3I7XG5cdFx0Y29uc3QgeWlxID0gKHJnYlswXSAqIDIxMjYgKyByZ2JbMV0gKiA3MTUyICsgcmdiWzJdICogNzIyKSAvIDEwMDAwO1xuXHRcdHJldHVybiB5aXEgPCAxMjg7XG5cdH0sXG5cblx0aXNMaWdodCgpIHtcblx0XHRyZXR1cm4gIXRoaXMuaXNEYXJrKCk7XG5cdH0sXG5cblx0bmVnYXRlKCkge1xuXHRcdGNvbnN0IHJnYiA9IHRoaXMucmdiKCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHRcdHJnYi5jb2xvcltpXSA9IDI1NSAtIHJnYi5jb2xvcltpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmdiO1xuXHR9LFxuXG5cdGxpZ2h0ZW4ocmF0aW8pIHtcblx0XHRjb25zdCBoc2wgPSB0aGlzLmhzbCgpO1xuXHRcdGhzbC5jb2xvclsyXSArPSBoc2wuY29sb3JbMl0gKiByYXRpbztcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdGRhcmtlbihyYXRpbykge1xuXHRcdGNvbnN0IGhzbCA9IHRoaXMuaHNsKCk7XG5cdFx0aHNsLmNvbG9yWzJdIC09IGhzbC5jb2xvclsyXSAqIHJhdGlvO1xuXHRcdHJldHVybiBoc2w7XG5cdH0sXG5cblx0c2F0dXJhdGUocmF0aW8pIHtcblx0XHRjb25zdCBoc2wgPSB0aGlzLmhzbCgpO1xuXHRcdGhzbC5jb2xvclsxXSArPSBoc2wuY29sb3JbMV0gKiByYXRpbztcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdGRlc2F0dXJhdGUocmF0aW8pIHtcblx0XHRjb25zdCBoc2wgPSB0aGlzLmhzbCgpO1xuXHRcdGhzbC5jb2xvclsxXSAtPSBoc2wuY29sb3JbMV0gKiByYXRpbztcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdHdoaXRlbihyYXRpbykge1xuXHRcdGNvbnN0IGh3YiA9IHRoaXMuaHdiKCk7XG5cdFx0aHdiLmNvbG9yWzFdICs9IGh3Yi5jb2xvclsxXSAqIHJhdGlvO1xuXHRcdHJldHVybiBod2I7XG5cdH0sXG5cblx0YmxhY2tlbihyYXRpbykge1xuXHRcdGNvbnN0IGh3YiA9IHRoaXMuaHdiKCk7XG5cdFx0aHdiLmNvbG9yWzJdICs9IGh3Yi5jb2xvclsyXSAqIHJhdGlvO1xuXHRcdHJldHVybiBod2I7XG5cdH0sXG5cblx0Z3JheXNjYWxlKCkge1xuXHRcdC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JheXNjYWxlI0NvbnZlcnRpbmdfY29sb3JfdG9fZ3JheXNjYWxlXG5cdFx0Y29uc3QgcmdiID0gdGhpcy5yZ2IoKS5jb2xvcjtcblx0XHRjb25zdCB2YWx1ZSA9IHJnYlswXSAqIDAuMyArIHJnYlsxXSAqIDAuNTkgKyByZ2JbMl0gKiAwLjExO1xuXHRcdHJldHVybiBDb2xvci5yZ2IodmFsdWUsIHZhbHVlLCB2YWx1ZSk7XG5cdH0sXG5cblx0ZmFkZShyYXRpbykge1xuXHRcdHJldHVybiB0aGlzLmFscGhhKHRoaXMudmFscGhhIC0gKHRoaXMudmFscGhhICogcmF0aW8pKTtcblx0fSxcblxuXHRvcGFxdWVyKHJhdGlvKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWxwaGEodGhpcy52YWxwaGEgKyAodGhpcy52YWxwaGEgKiByYXRpbykpO1xuXHR9LFxuXG5cdHJvdGF0ZShkZWdyZWVzKSB7XG5cdFx0Y29uc3QgaHNsID0gdGhpcy5oc2woKTtcblx0XHRsZXQgaHVlID0gaHNsLmNvbG9yWzBdO1xuXHRcdGh1ZSA9IChodWUgKyBkZWdyZWVzKSAlIDM2MDtcblx0XHRodWUgPSBodWUgPCAwID8gMzYwICsgaHVlIDogaHVlO1xuXHRcdGhzbC5jb2xvclswXSA9IGh1ZTtcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdG1peChtaXhpbkNvbG9yLCB3ZWlnaHQpIHtcblx0XHQvLyBQb3J0ZWQgZnJvbSBzYXNzIGltcGxlbWVudGF0aW9uIGluIENcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9saWJzYXNzL2Jsb2IvMGU2YjRhMjg1MDA5MjM1NmFhM2VjZTA3YzZiMjQ5ZjAyMjFjYWNlZC9mdW5jdGlvbnMuY3BwI0wyMDlcblx0XHRpZiAoIW1peGluQ29sb3IgfHwgIW1peGluQ29sb3IucmdiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IHRvIFwibWl4XCIgd2FzIG5vdCBhIENvbG9yIGluc3RhbmNlLCBidXQgcmF0aGVyIGFuIGluc3RhbmNlIG9mICcgKyB0eXBlb2YgbWl4aW5Db2xvcik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sb3IxID0gbWl4aW5Db2xvci5yZ2IoKTtcblx0XHRjb25zdCBjb2xvcjIgPSB0aGlzLnJnYigpO1xuXHRcdGNvbnN0IHAgPSB3ZWlnaHQgPT09IHVuZGVmaW5lZCA/IDAuNSA6IHdlaWdodDtcblxuXHRcdGNvbnN0IHcgPSAyICogcCAtIDE7XG5cdFx0Y29uc3QgYSA9IGNvbG9yMS5hbHBoYSgpIC0gY29sb3IyLmFscGhhKCk7XG5cblx0XHRjb25zdCB3MSA9ICgoKHcgKiBhID09PSAtMSkgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMjtcblx0XHRjb25zdCB3MiA9IDEgLSB3MTtcblxuXHRcdHJldHVybiBDb2xvci5yZ2IoXG5cdFx0XHR3MSAqIGNvbG9yMS5yZWQoKSArIHcyICogY29sb3IyLnJlZCgpLFxuXHRcdFx0dzEgKiBjb2xvcjEuZ3JlZW4oKSArIHcyICogY29sb3IyLmdyZWVuKCksXG5cdFx0XHR3MSAqIGNvbG9yMS5ibHVlKCkgKyB3MiAqIGNvbG9yMi5ibHVlKCksXG5cdFx0XHRjb2xvcjEuYWxwaGEoKSAqIHAgKyBjb2xvcjIuYWxwaGEoKSAqICgxIC0gcCkpO1xuXHR9LFxufTtcblxuLy8gTW9kZWwgY29udmVyc2lvbiBtZXRob2RzIGFuZCBzdGF0aWMgY29uc3RydWN0b3JzXG5mb3IgKGNvbnN0IG1vZGVsIG9mIE9iamVjdC5rZXlzKGNvbnZlcnQpKSB7XG5cdGlmIChza2lwcGVkTW9kZWxzLmluY2x1ZGVzKG1vZGVsKSkge1xuXHRcdGNvbnRpbnVlO1xuXHR9XG5cblx0Y29uc3Qge2NoYW5uZWxzfSA9IGNvbnZlcnRbbW9kZWxdO1xuXG5cdC8vIENvbnZlcnNpb24gbWV0aG9kc1xuXHRDb2xvci5wcm90b3R5cGVbbW9kZWxdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRpZiAodGhpcy5tb2RlbCA9PT0gbW9kZWwpIHtcblx0XHRcdHJldHVybiBuZXcgQ29sb3IodGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihhcmdzLCBtb2RlbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDb2xvcihbLi4uYXNzZXJ0QXJyYXkoY29udmVydFt0aGlzLm1vZGVsXVttb2RlbF0ucmF3KHRoaXMuY29sb3IpKSwgdGhpcy52YWxwaGFdLCBtb2RlbCk7XG5cdH07XG5cblx0Ly8gJ3N0YXRpYycgY29uc3RydWN0aW9uIG1ldGhvZHNcblx0Q29sb3JbbW9kZWxdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRsZXQgY29sb3IgPSBhcmdzWzBdO1xuXHRcdGlmICh0eXBlb2YgY29sb3IgPT09ICdudW1iZXInKSB7XG5cdFx0XHRjb2xvciA9IHplcm9BcnJheShhcmdzLCBjaGFubmVscyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDb2xvcihjb2xvciwgbW9kZWwpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiByb3VuZFRvKG51bWJlciwgcGxhY2VzKSB7XG5cdHJldHVybiBOdW1iZXIobnVtYmVyLnRvRml4ZWQocGxhY2VzKSk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kVG9QbGFjZShwbGFjZXMpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChudW1iZXIpIHtcblx0XHRyZXR1cm4gcm91bmRUbyhudW1iZXIsIHBsYWNlcyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldHNldChtb2RlbCwgY2hhbm5lbCwgbW9kaWZpZXIpIHtcblx0bW9kZWwgPSBBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsIDogW21vZGVsXTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgbW9kZWwpIHtcblx0XHQobGltaXRlcnNbbV0gfHwgKGxpbWl0ZXJzW21dID0gW10pKVtjaGFubmVsXSA9IG1vZGlmaWVyO1xuXHR9XG5cblx0bW9kZWwgPSBtb2RlbFswXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZXIpIHtcblx0XHRcdFx0dmFsdWUgPSBtb2RpZmllcih2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdCA9IHRoaXNbbW9kZWxdKCk7XG5cdFx0XHRyZXN1bHQuY29sb3JbY2hhbm5lbF0gPSB2YWx1ZTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0cmVzdWx0ID0gdGhpc1ttb2RlbF0oKS5jb2xvcltjaGFubmVsXTtcblx0XHRpZiAobW9kaWZpZXIpIHtcblx0XHRcdHJlc3VsdCA9IG1vZGlmaWVyKHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn1cblxuZnVuY3Rpb24gbWF4Zm4obWF4KSB7XG5cdHJldHVybiBmdW5jdGlvbiAodikge1xuXHRcdHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXgsIHYpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0QXJyYXkodmFsdWUpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiB6ZXJvQXJyYXkoYXJyYXksIGxlbmd0aCkge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHR5cGVvZiBhcnJheVtpXSAhPT0gJ251bWJlcicpIHtcblx0XHRcdGFycmF5W2ldID0gMDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sb3I7XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDEzIExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdjb2xvcicpO1xuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG5jb25zdCBzaGFycCA9IHJlcXVpcmUoJy4vc2hhcnAnKTtcblxuLyoqXG4gKiBKdXN0aWNhdGlvbiBhbGlnbm1lbnRcbiAqIEBtZW1iZXJcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGFsaWduID0ge1xuICBsZWZ0OiAnbG93JyxcbiAgY2VudGVyOiAnY2VudHJlJyxcbiAgY2VudHJlOiAnY2VudHJlJyxcbiAgcmlnaHQ6ICdoaWdoJ1xufTtcblxuLyoqXG4gKiBFeHRyYWN0IGlucHV0IG9wdGlvbnMsIGlmIGFueSwgZnJvbSBhbiBvYmplY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5wdXRPcHRpb25zRnJvbU9iamVjdCAob2JqKSB7XG4gIGNvbnN0IHsgcmF3LCBkZW5zaXR5LCBsaW1pdElucHV0UGl4ZWxzLCBpZ25vcmVJY2MsIHVubGltaXRlZCwgc2VxdWVudGlhbFJlYWQsIGZhaWxPbiwgZmFpbE9uRXJyb3IsIGFuaW1hdGVkLCBwYWdlLCBwYWdlcywgc3ViaWZkIH0gPSBvYmo7XG4gIHJldHVybiBbcmF3LCBkZW5zaXR5LCBsaW1pdElucHV0UGl4ZWxzLCBpZ25vcmVJY2MsIHVubGltaXRlZCwgc2VxdWVudGlhbFJlYWQsIGZhaWxPbiwgZmFpbE9uRXJyb3IsIGFuaW1hdGVkLCBwYWdlLCBwYWdlcywgc3ViaWZkXS5zb21lKGlzLmRlZmluZWQpXG4gICAgPyB7IHJhdywgZGVuc2l0eSwgbGltaXRJbnB1dFBpeGVscywgaWdub3JlSWNjLCB1bmxpbWl0ZWQsIHNlcXVlbnRpYWxSZWFkLCBmYWlsT24sIGZhaWxPbkVycm9yLCBhbmltYXRlZCwgcGFnZSwgcGFnZXMsIHN1YmlmZCB9XG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIE9iamVjdCBjb250YWluaW5nIGlucHV0IGFuZCBpbnB1dC1yZWxhdGVkIG9wdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfY3JlYXRlSW5wdXREZXNjcmlwdG9yIChpbnB1dCwgaW5wdXRPcHRpb25zLCBjb250YWluZXJPcHRpb25zKSB7XG4gIGNvbnN0IGlucHV0RGVzY3JpcHRvciA9IHtcbiAgICBmYWlsT246ICd3YXJuaW5nJyxcbiAgICBsaW1pdElucHV0UGl4ZWxzOiBNYXRoLnBvdygweDNGRkYsIDIpLFxuICAgIGlnbm9yZUljYzogZmFsc2UsXG4gICAgdW5saW1pdGVkOiBmYWxzZSxcbiAgICBzZXF1ZW50aWFsUmVhZDogdHJ1ZVxuICB9O1xuICBpZiAoaXMuc3RyaW5nKGlucHV0KSkge1xuICAgIC8vIGZpbGVzeXN0ZW1cbiAgICBpbnB1dERlc2NyaXB0b3IuZmlsZSA9IGlucHV0O1xuICB9IGVsc2UgaWYgKGlzLmJ1ZmZlcihpbnB1dCkpIHtcbiAgICAvLyBCdWZmZXJcbiAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW5wdXQgQnVmZmVyIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlucHV0RGVzY3JpcHRvci5idWZmZXIgPSBpbnB1dDtcbiAgfSBlbHNlIGlmIChpcy5hcnJheUJ1ZmZlcihpbnB1dCkpIHtcbiAgICBpZiAoaW5wdXQuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0lucHV0IGJpdCBBcnJheSBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBpbnB1dERlc2NyaXB0b3IuYnVmZmVyID0gQnVmZmVyLmZyb20oaW5wdXQsIDAsIGlucHV0LmJ5dGVMZW5ndGgpO1xuICB9IGVsc2UgaWYgKGlzLnR5cGVkQXJyYXkoaW5wdXQpKSB7XG4gICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0lucHV0IEJpdCBBcnJheSBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBpbnB1dERlc2NyaXB0b3IuYnVmZmVyID0gQnVmZmVyLmZyb20oaW5wdXQuYnVmZmVyLCBpbnB1dC5ieXRlT2Zmc2V0LCBpbnB1dC5ieXRlTGVuZ3RoKTtcbiAgfSBlbHNlIGlmIChpcy5wbGFpbk9iamVjdChpbnB1dCkgJiYgIWlzLmRlZmluZWQoaW5wdXRPcHRpb25zKSkge1xuICAgIC8vIFBsYWluIE9iamVjdCBkZXNjcmlwdG9yLCBlLmcuIGNyZWF0ZVxuICAgIGlucHV0T3B0aW9ucyA9IGlucHV0O1xuICAgIGlmIChfaW5wdXRPcHRpb25zRnJvbU9iamVjdChpbnB1dE9wdGlvbnMpKSB7XG4gICAgICAvLyBTdHJlYW0gd2l0aCBvcHRpb25zXG4gICAgICBpbnB1dERlc2NyaXB0b3IuYnVmZmVyID0gW107XG4gICAgfVxuICB9IGVsc2UgaWYgKCFpcy5kZWZpbmVkKGlucHV0KSAmJiAhaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMpICYmIGlzLm9iamVjdChjb250YWluZXJPcHRpb25zKSAmJiBjb250YWluZXJPcHRpb25zLmFsbG93U3RyZWFtKSB7XG4gICAgLy8gU3RyZWFtIHdpdGhvdXQgb3B0aW9uc1xuICAgIGlucHV0RGVzY3JpcHRvci5idWZmZXIgPSBbXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGlucHV0ICcke2lucHV0fScgb2YgdHlwZSAke3R5cGVvZiBpbnB1dH0ke1xuICAgICAgaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMpID8gYCB3aGVuIGFsc28gcHJvdmlkaW5nIG9wdGlvbnMgb2YgdHlwZSAke3R5cGVvZiBpbnB1dE9wdGlvbnN9YCA6ICcnXG4gICAgfWApO1xuICB9XG4gIGlmIChpcy5vYmplY3QoaW5wdXRPcHRpb25zKSkge1xuICAgIC8vIERlcHJlY2F0ZWQ6IGZhaWxPbkVycm9yXG4gICAgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLmZhaWxPbkVycm9yKSkge1xuICAgICAgaWYgKGlzLmJvb2woaW5wdXRPcHRpb25zLmZhaWxPbkVycm9yKSkge1xuICAgICAgICBpbnB1dERlc2NyaXB0b3IuZmFpbE9uID0gaW5wdXRPcHRpb25zLmZhaWxPbkVycm9yID8gJ3dhcm5pbmcnIDogJ25vbmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdmYWlsT25FcnJvcicsICdib29sZWFuJywgaW5wdXRPcHRpb25zLmZhaWxPbkVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZmFpbE9uXG4gICAgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLmZhaWxPbikpIHtcbiAgICAgIGlmIChpcy5zdHJpbmcoaW5wdXRPcHRpb25zLmZhaWxPbikgJiYgaXMuaW5BcnJheShpbnB1dE9wdGlvbnMuZmFpbE9uLCBbJ25vbmUnLCAndHJ1bmNhdGVkJywgJ2Vycm9yJywgJ3dhcm5pbmcnXSkpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmZhaWxPbiA9IGlucHV0T3B0aW9ucy5mYWlsT247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2ZhaWxPbicsICdvbmUgb2Y6IG5vbmUsIHRydW5jYXRlZCwgZXJyb3IsIHdhcm5pbmcnLCBpbnB1dE9wdGlvbnMuZmFpbE9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRGVuc2l0eVxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy5kZW5zaXR5KSkge1xuICAgICAgaWYgKGlzLmluUmFuZ2UoaW5wdXRPcHRpb25zLmRlbnNpdHksIDEsIDEwMDAwMCkpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmRlbnNpdHkgPSBpbnB1dE9wdGlvbnMuZGVuc2l0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZGVuc2l0eScsICdudW1iZXIgYmV0d2VlbiAxIGFuZCAxMDAwMDAnLCBpbnB1dE9wdGlvbnMuZGVuc2l0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElnbm9yZSBlbWJlZGRkZWQgSUNDIHByb2ZpbGVcbiAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMuaWdub3JlSWNjKSkge1xuICAgICAgaWYgKGlzLmJvb2woaW5wdXRPcHRpb25zLmlnbm9yZUljYykpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmlnbm9yZUljYyA9IGlucHV0T3B0aW9ucy5pZ25vcmVJY2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2lnbm9yZUljYycsICdib29sZWFuJywgaW5wdXRPcHRpb25zLmlnbm9yZUljYyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGxpbWl0SW5wdXRQaXhlbHNcbiAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMubGltaXRJbnB1dFBpeGVscykpIHtcbiAgICAgIGlmIChpcy5ib29sKGlucHV0T3B0aW9ucy5saW1pdElucHV0UGl4ZWxzKSkge1xuICAgICAgICBpbnB1dERlc2NyaXB0b3IubGltaXRJbnB1dFBpeGVscyA9IGlucHV0T3B0aW9ucy5saW1pdElucHV0UGl4ZWxzXG4gICAgICAgICAgPyBNYXRoLnBvdygweDNGRkYsIDIpXG4gICAgICAgICAgOiAwO1xuICAgICAgfSBlbHNlIGlmIChpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy5saW1pdElucHV0UGl4ZWxzKSAmJiBpcy5pblJhbmdlKGlucHV0T3B0aW9ucy5saW1pdElucHV0UGl4ZWxzLCAwLCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmxpbWl0SW5wdXRQaXhlbHMgPSBpbnB1dE9wdGlvbnMubGltaXRJbnB1dFBpeGVscztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignbGltaXRJbnB1dFBpeGVscycsICdwb3NpdGl2ZSBpbnRlZ2VyJywgaW5wdXRPcHRpb25zLmxpbWl0SW5wdXRQaXhlbHMpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpbWl0ZWRcbiAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMudW5saW1pdGVkKSkge1xuICAgICAgaWYgKGlzLmJvb2woaW5wdXRPcHRpb25zLnVubGltaXRlZCkpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLnVubGltaXRlZCA9IGlucHV0T3B0aW9ucy51bmxpbWl0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3VubGltaXRlZCcsICdib29sZWFuJywgaW5wdXRPcHRpb25zLnVubGltaXRlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNlcXVlbnRpYWxSZWFkXG4gICAgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLnNlcXVlbnRpYWxSZWFkKSkge1xuICAgICAgaWYgKGlzLmJvb2woaW5wdXRPcHRpb25zLnNlcXVlbnRpYWxSZWFkKSkge1xuICAgICAgICBpbnB1dERlc2NyaXB0b3Iuc2VxdWVudGlhbFJlYWQgPSBpbnB1dE9wdGlvbnMuc2VxdWVudGlhbFJlYWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3NlcXVlbnRpYWxSZWFkJywgJ2Jvb2xlYW4nLCBpbnB1dE9wdGlvbnMuc2VxdWVudGlhbFJlYWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSYXcgcGl4ZWwgaW5wdXRcbiAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMucmF3KSkge1xuICAgICAgaWYgKFxuICAgICAgICBpcy5vYmplY3QoaW5wdXRPcHRpb25zLnJhdykgJiZcbiAgICAgICAgaXMuaW50ZWdlcihpbnB1dE9wdGlvbnMucmF3LndpZHRoKSAmJiBpbnB1dE9wdGlvbnMucmF3LndpZHRoID4gMCAmJlxuICAgICAgICBpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy5yYXcuaGVpZ2h0KSAmJiBpbnB1dE9wdGlvbnMucmF3LmhlaWdodCA+IDAgJiZcbiAgICAgICAgaXMuaW50ZWdlcihpbnB1dE9wdGlvbnMucmF3LmNoYW5uZWxzKSAmJiBpcy5pblJhbmdlKGlucHV0T3B0aW9ucy5yYXcuY2hhbm5lbHMsIDEsIDQpXG4gICAgICApIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLnJhd1dpZHRoID0gaW5wdXRPcHRpb25zLnJhdy53aWR0aDtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLnJhd0hlaWdodCA9IGlucHV0T3B0aW9ucy5yYXcuaGVpZ2h0O1xuICAgICAgICBpbnB1dERlc2NyaXB0b3IucmF3Q2hhbm5lbHMgPSBpbnB1dE9wdGlvbnMucmF3LmNoYW5uZWxzO1xuICAgICAgICBpbnB1dERlc2NyaXB0b3IucmF3UHJlbXVsdGlwbGllZCA9ICEhaW5wdXRPcHRpb25zLnJhdy5wcmVtdWx0aXBsaWVkO1xuXG4gICAgICAgIHN3aXRjaCAoaW5wdXQuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICBjYXNlIFVpbnQ4QXJyYXk6XG4gICAgICAgICAgY2FzZSBVaW50OENsYW1wZWRBcnJheTpcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5yYXdEZXB0aCA9ICd1Y2hhcic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEludDhBcnJheTpcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5yYXdEZXB0aCA9ICdjaGFyJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgVWludDE2QXJyYXk6XG4gICAgICAgICAgICBpbnB1dERlc2NyaXB0b3IucmF3RGVwdGggPSAndXNob3J0JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgSW50MTZBcnJheTpcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5yYXdEZXB0aCA9ICdzaG9ydCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFVpbnQzMkFycmF5OlxuICAgICAgICAgICAgaW5wdXREZXNjcmlwdG9yLnJhd0RlcHRoID0gJ3VpbnQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBJbnQzMkFycmF5OlxuICAgICAgICAgICAgaW5wdXREZXNjcmlwdG9yLnJhd0RlcHRoID0gJ2ludCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEZsb2F0MzJBcnJheTpcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5yYXdEZXB0aCA9ICdmbG9hdCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEZsb2F0NjRBcnJheTpcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5yYXdEZXB0aCA9ICdkb3VibGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5yYXdEZXB0aCA9ICd1Y2hhcic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB3aWR0aCwgaGVpZ2h0IGFuZCBjaGFubmVscyBmb3IgcmF3IHBpeGVsIGlucHV0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE11bHRpLXBhZ2UgaW5wdXQgKEdJRiwgVElGRiwgUERGKVxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy5hbmltYXRlZCkpIHtcbiAgICAgIGlmIChpcy5ib29sKGlucHV0T3B0aW9ucy5hbmltYXRlZCkpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLnBhZ2VzID0gaW5wdXRPcHRpb25zLmFuaW1hdGVkID8gLTEgOiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdhbmltYXRlZCcsICdib29sZWFuJywgaW5wdXRPcHRpb25zLmFuaW1hdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLnBhZ2VzKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIoaW5wdXRPcHRpb25zLnBhZ2VzKSAmJiBpcy5pblJhbmdlKGlucHV0T3B0aW9ucy5wYWdlcywgLTEsIDEwMDAwMCkpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLnBhZ2VzID0gaW5wdXRPcHRpb25zLnBhZ2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdwYWdlcycsICdpbnRlZ2VyIGJldHdlZW4gLTEgYW5kIDEwMDAwMCcsIGlucHV0T3B0aW9ucy5wYWdlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy5wYWdlKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIoaW5wdXRPcHRpb25zLnBhZ2UpICYmIGlzLmluUmFuZ2UoaW5wdXRPcHRpb25zLnBhZ2UsIDAsIDEwMDAwMCkpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLnBhZ2UgPSBpbnB1dE9wdGlvbnMucGFnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigncGFnZScsICdpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwMDAwJywgaW5wdXRPcHRpb25zLnBhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBNdWx0aS1sZXZlbCBpbnB1dCAoT3BlblNsaWRlKVxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy5sZXZlbCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy5sZXZlbCkgJiYgaXMuaW5SYW5nZShpbnB1dE9wdGlvbnMubGV2ZWwsIDAsIDI1NikpIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmxldmVsID0gaW5wdXRPcHRpb25zLmxldmVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdsZXZlbCcsICdpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU2JywgaW5wdXRPcHRpb25zLmxldmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gU3ViIEltYWdlIEZpbGUgRGlyZWN0b3J5IChUSUZGKVxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy5zdWJpZmQpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihpbnB1dE9wdGlvbnMuc3ViaWZkKSAmJiBpcy5pblJhbmdlKGlucHV0T3B0aW9ucy5zdWJpZmQsIC0xLCAxMDAwMDApKSB7XG4gICAgICAgIGlucHV0RGVzY3JpcHRvci5zdWJpZmQgPSBpbnB1dE9wdGlvbnMuc3ViaWZkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdzdWJpZmQnLCAnaW50ZWdlciBiZXR3ZWVuIC0xIGFuZCAxMDAwMDAnLCBpbnB1dE9wdGlvbnMuc3ViaWZkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ3JlYXRlIG5ldyBpbWFnZVxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy5jcmVhdGUpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzLm9iamVjdChpbnB1dE9wdGlvbnMuY3JlYXRlKSAmJlxuICAgICAgICBpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy5jcmVhdGUud2lkdGgpICYmIGlucHV0T3B0aW9ucy5jcmVhdGUud2lkdGggPiAwICYmXG4gICAgICAgIGlzLmludGVnZXIoaW5wdXRPcHRpb25zLmNyZWF0ZS5oZWlnaHQpICYmIGlucHV0T3B0aW9ucy5jcmVhdGUuaGVpZ2h0ID4gMCAmJlxuICAgICAgICBpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy5jcmVhdGUuY2hhbm5lbHMpXG4gICAgICApIHtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmNyZWF0ZVdpZHRoID0gaW5wdXRPcHRpb25zLmNyZWF0ZS53aWR0aDtcbiAgICAgICAgaW5wdXREZXNjcmlwdG9yLmNyZWF0ZUhlaWdodCA9IGlucHV0T3B0aW9ucy5jcmVhdGUuaGVpZ2h0O1xuICAgICAgICBpbnB1dERlc2NyaXB0b3IuY3JlYXRlQ2hhbm5lbHMgPSBpbnB1dE9wdGlvbnMuY3JlYXRlLmNoYW5uZWxzO1xuICAgICAgICAvLyBOb2lzZVxuICAgICAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMuY3JlYXRlLm5vaXNlKSkge1xuICAgICAgICAgIGlmICghaXMub2JqZWN0KGlucHV0T3B0aW9ucy5jcmVhdGUubm9pc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vaXNlIHRvIGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWlzLmluQXJyYXkoaW5wdXRPcHRpb25zLmNyZWF0ZS5ub2lzZS50eXBlLCBbJ2dhdXNzaWFuJ10pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgZ2F1c3NpYW4gbm9pc2UgaXMgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpcy5pblJhbmdlKGlucHV0T3B0aW9ucy5jcmVhdGUuY2hhbm5lbHMsIDEsIDQpKSB7XG4gICAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2NyZWF0ZS5jaGFubmVscycsICdudW1iZXIgYmV0d2VlbiAxIGFuZCA0JywgaW5wdXRPcHRpb25zLmNyZWF0ZS5jaGFubmVscyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5jcmVhdGVOb2lzZVR5cGUgPSBpbnB1dE9wdGlvbnMuY3JlYXRlLm5vaXNlLnR5cGU7XG4gICAgICAgICAgaWYgKGlzLm51bWJlcihpbnB1dE9wdGlvbnMuY3JlYXRlLm5vaXNlLm1lYW4pICYmIGlzLmluUmFuZ2UoaW5wdXRPcHRpb25zLmNyZWF0ZS5ub2lzZS5tZWFuLCAwLCAxMDAwMCkpIHtcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci5jcmVhdGVOb2lzZU1lYW4gPSBpbnB1dE9wdGlvbnMuY3JlYXRlLm5vaXNlLm1lYW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignY3JlYXRlLm5vaXNlLm1lYW4nLCAnbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwMDAnLCBpbnB1dE9wdGlvbnMuY3JlYXRlLm5vaXNlLm1lYW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXMubnVtYmVyKGlucHV0T3B0aW9ucy5jcmVhdGUubm9pc2Uuc2lnbWEpICYmIGlzLmluUmFuZ2UoaW5wdXRPcHRpb25zLmNyZWF0ZS5ub2lzZS5zaWdtYSwgMCwgMTAwMDApKSB7XG4gICAgICAgICAgICBpbnB1dERlc2NyaXB0b3IuY3JlYXRlTm9pc2VTaWdtYSA9IGlucHV0T3B0aW9ucy5jcmVhdGUubm9pc2Uuc2lnbWE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignY3JlYXRlLm5vaXNlLnNpZ21hJywgJ251bWJlciBiZXR3ZWVuIDAgYW5kIDEwMDAwJywgaW5wdXRPcHRpb25zLmNyZWF0ZS5ub2lzZS5zaWdtYSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLmNyZWF0ZS5iYWNrZ3JvdW5kKSkge1xuICAgICAgICAgIGlmICghaXMuaW5SYW5nZShpbnB1dE9wdGlvbnMuY3JlYXRlLmNoYW5uZWxzLCAzLCA0KSkge1xuICAgICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdjcmVhdGUuY2hhbm5lbHMnLCAnbnVtYmVyIGJldHdlZW4gMyBhbmQgNCcsIGlucHV0T3B0aW9ucy5jcmVhdGUuY2hhbm5lbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gY29sb3IoaW5wdXRPcHRpb25zLmNyZWF0ZS5iYWNrZ3JvdW5kKTtcbiAgICAgICAgICBpbnB1dERlc2NyaXB0b3IuY3JlYXRlQmFja2dyb3VuZCA9IFtcbiAgICAgICAgICAgIGJhY2tncm91bmQucmVkKCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLmdyZWVuKCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLmJsdWUoKSxcbiAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZC5hbHBoYSgpICogMjU1KVxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YWxpZCBub2lzZSBvciBiYWNrZ3JvdW5kIHRvIGNyZWF0ZSBhIG5ldyBpbnB1dCBpbWFnZScpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBpbnB1dERlc2NyaXB0b3IuYnVmZmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YWxpZCB3aWR0aCwgaGVpZ2h0IGFuZCBjaGFubmVscyB0byBjcmVhdGUgYSBuZXcgaW5wdXQgaW1hZ2UnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgbmV3IGltYWdlIHdpdGggdGV4dFxuICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0KSkge1xuICAgICAgaWYgKGlzLm9iamVjdChpbnB1dE9wdGlvbnMudGV4dCkgJiYgaXMuc3RyaW5nKGlucHV0T3B0aW9ucy50ZXh0LnRleHQpKSB7XG4gICAgICAgIGlucHV0RGVzY3JpcHRvci50ZXh0VmFsdWUgPSBpbnB1dE9wdGlvbnMudGV4dC50ZXh0O1xuICAgICAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMudGV4dC5oZWlnaHQpICYmIGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLnRleHQuZHBpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgb25seSBvbmUgb2YgZHBpIG9yIGhlaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0LmZvbnQpKSB7XG4gICAgICAgICAgaWYgKGlzLnN0cmluZyhpbnB1dE9wdGlvbnMudGV4dC5mb250KSkge1xuICAgICAgICAgICAgaW5wdXREZXNjcmlwdG9yLnRleHRGb250ID0gaW5wdXRPcHRpb25zLnRleHQuZm9udDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd0ZXh0LmZvbnQnLCAnc3RyaW5nJywgaW5wdXRPcHRpb25zLnRleHQuZm9udCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0LmZvbnRmaWxlKSkge1xuICAgICAgICAgIGlmIChpcy5zdHJpbmcoaW5wdXRPcHRpb25zLnRleHQuZm9udGZpbGUpKSB7XG4gICAgICAgICAgICBpbnB1dERlc2NyaXB0b3IudGV4dEZvbnRmaWxlID0gaW5wdXRPcHRpb25zLnRleHQuZm9udGZpbGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGV4dC5mb250ZmlsZScsICdzdHJpbmcnLCBpbnB1dE9wdGlvbnMudGV4dC5mb250ZmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0LndpZHRoKSkge1xuICAgICAgICAgIGlmIChpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy50ZXh0LndpZHRoKSAmJiBpbnB1dE9wdGlvbnMudGV4dC53aWR0aCA+IDApIHtcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci50ZXh0V2lkdGggPSBpbnB1dE9wdGlvbnMudGV4dC53aWR0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd0ZXh0LndpZHRoJywgJ3Bvc2l0aXZlIGludGVnZXInLCBpbnB1dE9wdGlvbnMudGV4dC53aWR0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0LmhlaWdodCkpIHtcbiAgICAgICAgICBpZiAoaXMuaW50ZWdlcihpbnB1dE9wdGlvbnMudGV4dC5oZWlnaHQpICYmIGlucHV0T3B0aW9ucy50ZXh0LmhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci50ZXh0SGVpZ2h0ID0gaW5wdXRPcHRpb25zLnRleHQuaGVpZ2h0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3RleHQuaGVpZ2h0JywgJ3Bvc2l0aXZlIGludGVnZXInLCBpbnB1dE9wdGlvbnMudGV4dC5oZWlnaHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMudGV4dC5hbGlnbikpIHtcbiAgICAgICAgICBpZiAoaXMuc3RyaW5nKGlucHV0T3B0aW9ucy50ZXh0LmFsaWduKSAmJiBpcy5zdHJpbmcodGhpcy5jb25zdHJ1Y3Rvci5hbGlnbltpbnB1dE9wdGlvbnMudGV4dC5hbGlnbl0pKSB7XG4gICAgICAgICAgICBpbnB1dERlc2NyaXB0b3IudGV4dEFsaWduID0gdGhpcy5jb25zdHJ1Y3Rvci5hbGlnbltpbnB1dE9wdGlvbnMudGV4dC5hbGlnbl07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGV4dC5hbGlnbicsICd2YWxpZCBhbGlnbm1lbnQnLCBpbnB1dE9wdGlvbnMudGV4dC5hbGlnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0Lmp1c3RpZnkpKSB7XG4gICAgICAgICAgaWYgKGlzLmJvb2woaW5wdXRPcHRpb25zLnRleHQuanVzdGlmeSkpIHtcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci50ZXh0SnVzdGlmeSA9IGlucHV0T3B0aW9ucy50ZXh0Lmp1c3RpZnk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGV4dC5qdXN0aWZ5JywgJ2Jvb2xlYW4nLCBpbnB1dE9wdGlvbnMudGV4dC5qdXN0aWZ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLnRleHQuZHBpKSkge1xuICAgICAgICAgIGlmIChpcy5pbnRlZ2VyKGlucHV0T3B0aW9ucy50ZXh0LmRwaSkgJiYgaXMuaW5SYW5nZShpbnB1dE9wdGlvbnMudGV4dC5kcGksIDEsIDEwMDAwMDApKSB7XG4gICAgICAgICAgICBpbnB1dERlc2NyaXB0b3IudGV4dERwaSA9IGlucHV0T3B0aW9ucy50ZXh0LmRwaTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd0ZXh0LmRwaScsICdpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwMDAwMCcsIGlucHV0T3B0aW9ucy50ZXh0LmRwaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0LnJnYmEpKSB7XG4gICAgICAgICAgaWYgKGlzLmJvb2woaW5wdXRPcHRpb25zLnRleHQucmdiYSkpIHtcbiAgICAgICAgICAgIGlucHV0RGVzY3JpcHRvci50ZXh0UmdiYSA9IGlucHV0T3B0aW9ucy50ZXh0LnJnYmE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGV4dC5yZ2JhJywgJ2Jvb2wnLCBpbnB1dE9wdGlvbnMudGV4dC5yZ2JhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzLmRlZmluZWQoaW5wdXRPcHRpb25zLnRleHQuc3BhY2luZykpIHtcbiAgICAgICAgICBpZiAoaXMuaW50ZWdlcihpbnB1dE9wdGlvbnMudGV4dC5zcGFjaW5nKSAmJiBpcy5pblJhbmdlKGlucHV0T3B0aW9ucy50ZXh0LnNwYWNpbmcsIC0xMDAwMDAwLCAxMDAwMDAwKSkge1xuICAgICAgICAgICAgaW5wdXREZXNjcmlwdG9yLnRleHRTcGFjaW5nID0gaW5wdXRPcHRpb25zLnRleHQuc3BhY2luZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd0ZXh0LnNwYWNpbmcnLCAnaW50ZWdlciBiZXR3ZWVuIC0xMDAwMDAwIGFuZCAxMDAwMDAwJywgaW5wdXRPcHRpb25zLnRleHQuc3BhY2luZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpcy5kZWZpbmVkKGlucHV0T3B0aW9ucy50ZXh0LndyYXApKSB7XG4gICAgICAgICAgaWYgKGlzLnN0cmluZyhpbnB1dE9wdGlvbnMudGV4dC53cmFwKSAmJiBpcy5pbkFycmF5KGlucHV0T3B0aW9ucy50ZXh0LndyYXAsIFsnd29yZCcsICdjaGFyJywgJ3dvcmQtY2hhcicsICdub25lJ10pKSB7XG4gICAgICAgICAgICBpbnB1dERlc2NyaXB0b3IudGV4dFdyYXAgPSBpbnB1dE9wdGlvbnMudGV4dC53cmFwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3RleHQud3JhcCcsICdvbmUgb2Y6IHdvcmQsIGNoYXIsIHdvcmQtY2hhciwgbm9uZScsIGlucHV0T3B0aW9ucy50ZXh0LndyYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgaW5wdXREZXNjcmlwdG9yLmJ1ZmZlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSB2YWxpZCBzdHJpbmcgdG8gY3JlYXRlIGFuIGltYWdlIHdpdGggdGV4dC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXMuZGVmaW5lZChpbnB1dE9wdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IG9wdGlvbnMgJyArIGlucHV0T3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGlucHV0RGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBIYW5kbGUgaW5jb21pbmcgQnVmZmVyIGNodW5rIG9uIFdyaXRhYmxlIFN0cmVhbS5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZyAtIHVudXNlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gX3dyaXRlIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5pbnB1dC5idWZmZXIpKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXMuYnVmZmVyKGNodW5rKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnB1dC5idWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUluRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5pbnB1dC5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ05vbi1CdWZmZXIgZGF0YSBvbiBXcml0YWJsZSBTdHJlYW0nKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignVW5leHBlY3RlZCBkYXRhIG9uIFdyaXRhYmxlIFN0cmVhbScpKTtcbiAgfVxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIHRoZSBhcnJheSBvZiBjaHVua3MgYWNjdW11bGF0ZWQgaW4gaW5wdXQuYnVmZmVyLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2ZsYXR0ZW5CdWZmZXJJbiAoKSB7XG4gIGlmICh0aGlzLl9pc1N0cmVhbUlucHV0KCkpIHtcbiAgICB0aGlzLm9wdGlvbnMuaW5wdXQuYnVmZmVyID0gQnVmZmVyLmNvbmNhdCh0aGlzLm9wdGlvbnMuaW5wdXQuYnVmZmVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFyZSB3ZSBleHBlY3RpbmcgU3RyZWFtLWJhc2VkIGlucHV0P1xuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBfaXNTdHJlYW1JbnB1dCAoKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5pbnB1dC5idWZmZXIpO1xufVxuXG4vKipcbiAqIEZhc3QgYWNjZXNzIHRvICh1bmNhY2hlZCkgaW1hZ2UgbWV0YWRhdGEgd2l0aG91dCBkZWNvZGluZyBhbnkgY29tcHJlc3NlZCBwaXhlbCBkYXRhLlxuICpcbiAqIFRoaXMgaXMgcmVhZCBmcm9tIHRoZSBoZWFkZXIgb2YgdGhlIGlucHV0IGltYWdlLlxuICogSXQgZG9lcyBub3QgdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gYW55IG9wZXJhdGlvbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgb3V0cHV0IGltYWdlLFxuICogc3VjaCBhcyByZXNpemUgb3Igcm90YXRlLlxuICpcbiAqIERpbWVuc2lvbnMgaW4gdGhlIHJlc3BvbnNlIHdpbGwgcmVzcGVjdCB0aGUgYHBhZ2VgIGFuZCBgcGFnZXNgIHByb3BlcnRpZXMgb2YgdGhlXG4gKiB7QGxpbmsgL2FwaS1jb25zdHJ1Y3RvciNwYXJhbWV0ZXJzfGNvbnN0cnVjdG9yIHBhcmFtZXRlcnN9LlxuICpcbiAqIEEgYFByb21pc2VgIGlzIHJldHVybmVkIHdoZW4gYGNhbGxiYWNrYCBpcyBub3QgcHJvdmlkZWQuXG4gKlxuICogLSBgZm9ybWF0YDogTmFtZSBvZiBkZWNvZGVyIHVzZWQgdG8gZGVjb21wcmVzcyBpbWFnZSBkYXRhIGUuZy4gYGpwZWdgLCBgcG5nYCwgYHdlYnBgLCBgZ2lmYCwgYHN2Z2BcbiAqIC0gYHNpemVgOiBUb3RhbCBzaXplIG9mIGltYWdlIGluIGJ5dGVzLCBmb3IgU3RyZWFtIGFuZCBCdWZmZXIgaW5wdXQgb25seVxuICogLSBgd2lkdGhgOiBOdW1iZXIgb2YgcGl4ZWxzIHdpZGUgKEVYSUYgb3JpZW50YXRpb24gaXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbiwgc2VlIGV4YW1wbGUgYmVsb3cpXG4gKiAtIGBoZWlnaHRgOiBOdW1iZXIgb2YgcGl4ZWxzIGhpZ2ggKEVYSUYgb3JpZW50YXRpb24gaXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbiwgc2VlIGV4YW1wbGUgYmVsb3cpXG4gKiAtIGBzcGFjZWA6IE5hbWUgb2YgY29sb3VyIHNwYWNlIGludGVycHJldGF0aW9uIGUuZy4gYHNyZ2JgLCBgcmdiYCwgYGNteWtgLCBgbGFiYCwgYGItd2AgWy4uLl0oaHR0cHM6Ly93d3cubGlidmlwcy5vcmcvQVBJL2N1cnJlbnQvVmlwc0ltYWdlLmh0bWwjVmlwc0ludGVycHJldGF0aW9uKVxuICogLSBgY2hhbm5lbHNgOiBOdW1iZXIgb2YgYmFuZHMgZS5nLiBgM2AgZm9yIHNSR0IsIGA0YCBmb3IgQ01ZS1xuICogLSBgZGVwdGhgOiBOYW1lIG9mIHBpeGVsIGRlcHRoIGZvcm1hdCBlLmcuIGB1Y2hhcmAsIGBjaGFyYCwgYHVzaG9ydGAsIGBmbG9hdGAgWy4uLl0oaHR0cHM6Ly93d3cubGlidmlwcy5vcmcvQVBJL2N1cnJlbnQvVmlwc0ltYWdlLmh0bWwjVmlwc0JhbmRGb3JtYXQpXG4gKiAtIGBkZW5zaXR5YDogTnVtYmVyIG9mIHBpeGVscyBwZXIgaW5jaCAoRFBJKSwgaWYgcHJlc2VudFxuICogLSBgY2hyb21hU3Vic2FtcGxpbmdgOiBTdHJpbmcgY29udGFpbmluZyBKUEVHIGNocm9tYSBzdWJzYW1wbGluZywgYDQ6MjowYCBvciBgNDo0OjRgIGZvciBSR0IsIGA0OjI6MDo0YCBvciBgNDo0OjQ6NGAgZm9yIENNWUtcbiAqIC0gYGlzUHJvZ3Jlc3NpdmVgOiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgaW1hZ2UgaXMgaW50ZXJsYWNlZCB1c2luZyBhIHByb2dyZXNzaXZlIHNjYW5cbiAqIC0gYHBhZ2VzYDogTnVtYmVyIG9mIHBhZ2VzL2ZyYW1lcyBjb250YWluZWQgd2l0aGluIHRoZSBpbWFnZSwgd2l0aCBzdXBwb3J0IGZvciBUSUZGLCBIRUlGLCBQREYsIGFuaW1hdGVkIEdJRiBhbmQgYW5pbWF0ZWQgV2ViUFxuICogLSBgcGFnZUhlaWdodGA6IE51bWJlciBvZiBwaXhlbHMgaGlnaCBlYWNoIHBhZ2UgaW4gYSBtdWx0aS1wYWdlIGltYWdlIHdpbGwgYmUuXG4gKiAtIGBwYWxldHRlQml0RGVwdGhgOiBCaXQgZGVwdGggb2YgcGFsZXR0ZS1iYXNlZCBpbWFnZSAoR0lGLCBQTkcpLlxuICogLSBgbG9vcGA6IE51bWJlciBvZiB0aW1lcyB0byBsb29wIGFuIGFuaW1hdGVkIGltYWdlLCB6ZXJvIHJlZmVycyB0byBhIGNvbnRpbnVvdXMgbG9vcC5cbiAqIC0gYGRlbGF5YDogRGVsYXkgaW4gbXMgYmV0d2VlbiBlYWNoIHBhZ2UgaW4gYW4gYW5pbWF0ZWQgaW1hZ2UsIHByb3ZpZGVkIGFzIGFuIGFycmF5IG9mIGludGVnZXJzLlxuICogLSBgcGFnZVByaW1hcnlgOiBOdW1iZXIgb2YgdGhlIHByaW1hcnkgcGFnZSBpbiBhIEhFSUYgaW1hZ2VcbiAqIC0gYGxldmVsc2A6IERldGFpbHMgb2YgZWFjaCBsZXZlbCBpbiBhIG11bHRpLWxldmVsIGltYWdlIHByb3ZpZGVkIGFzIGFuIGFycmF5IG9mIG9iamVjdHMsIHJlcXVpcmVzIGxpYnZpcHMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBPcGVuU2xpZGVcbiAqIC0gYHN1YmlmZHNgOiBOdW1iZXIgb2YgU3ViIEltYWdlIEZpbGUgRGlyZWN0b3JpZXMgaW4gYW4gT01FLVRJRkYgaW1hZ2VcbiAqIC0gYGJhY2tncm91bmRgOiBEZWZhdWx0IGJhY2tncm91bmQgY29sb3VyLCBpZiBwcmVzZW50LCBmb3IgUE5HIChiS0dEKSBhbmQgR0lGIGltYWdlcywgZWl0aGVyIGFuIFJHQiBPYmplY3Qgb3IgYSBzaW5nbGUgZ3JleXNjYWxlIHZhbHVlXG4gKiAtIGBjb21wcmVzc2lvbmA6IFRoZSBlbmNvZGVyIHVzZWQgdG8gY29tcHJlc3MgYW4gSEVJRiBmaWxlLCBgYXYxYCAoQVZJRikgb3IgYGhldmNgIChIRUlDKVxuICogLSBgcmVzb2x1dGlvblVuaXRgOiBUaGUgdW5pdCBvZiByZXNvbHV0aW9uIChkZW5zaXR5KSwgZWl0aGVyIGBpbmNoYCBvciBgY21gLCBpZiBwcmVzZW50XG4gKiAtIGBoYXNQcm9maWxlYDogQm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBhbiBlbWJlZGRlZCBJQ0MgcHJvZmlsZVxuICogLSBgaGFzQWxwaGFgOiBCb29sZWFuIGluZGljYXRpbmcgdGhlIHByZXNlbmNlIG9mIGFuIGFscGhhIHRyYW5zcGFyZW5jeSBjaGFubmVsXG4gKiAtIGBvcmllbnRhdGlvbmA6IE51bWJlciB2YWx1ZSBvZiB0aGUgRVhJRiBPcmllbnRhdGlvbiBoZWFkZXIsIGlmIHByZXNlbnRcbiAqIC0gYGV4aWZgOiBCdWZmZXIgY29udGFpbmluZyByYXcgRVhJRiBkYXRhLCBpZiBwcmVzZW50XG4gKiAtIGBpY2NgOiBCdWZmZXIgY29udGFpbmluZyByYXcgW0lDQ10oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvaWNjKSBwcm9maWxlIGRhdGEsIGlmIHByZXNlbnRcbiAqIC0gYGlwdGNgOiBCdWZmZXIgY29udGFpbmluZyByYXcgSVBUQyBkYXRhLCBpZiBwcmVzZW50XG4gKiAtIGB4bXBgOiBCdWZmZXIgY29udGFpbmluZyByYXcgWE1QIGRhdGEsIGlmIHByZXNlbnRcbiAqIC0gYHRpZmZ0YWdQaG90b3Nob3BgOiBCdWZmZXIgY29udGFpbmluZyByYXcgVElGRlRBR19QSE9UT1NIT1AgZGF0YSwgaWYgcHJlc2VudFxuICogLSBgZm9ybWF0TWFnaWNrYDogU3RyaW5nIGNvbnRhaW5pbmcgZm9ybWF0IGZvciBpbWFnZXMgbG9hZGVkIHZpYSAqbWFnaWNrXG4gKiAtIGBjb21tZW50c2A6IEFycmF5IG9mIGtleXdvcmQvdGV4dCBwYWlycyByZXByZXNlbnRpbmcgUE5HIHRleHQgYmxvY2tzLCBpZiBwcmVzZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KS5tZXRhZGF0YSgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpbWFnZSA9IHNoYXJwKGlucHV0SnBnKTtcbiAqIGltYWdlXG4gKiAgIC5tZXRhZGF0YSgpXG4gKiAgIC50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhKSB7XG4gKiAgICAgcmV0dXJuIGltYWdlXG4gKiAgICAgICAucmVzaXplKE1hdGgucm91bmQobWV0YWRhdGEud2lkdGggLyAyKSlcbiAqICAgICAgIC53ZWJwKClcbiAqICAgICAgIC50b0J1ZmZlcigpO1xuICogICB9KVxuICogICAudGhlbihmdW5jdGlvbihkYXRhKSB7XG4gKiAgICAgLy8gZGF0YSBjb250YWlucyBhIFdlYlAgaW1hZ2UgaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgb3JpZ2luYWwgSlBFR1xuICogICB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzZWQgb24gRVhJRiByb3RhdGlvbiBtZXRhZGF0YSwgZ2V0IHRoZSByaWdodC1zaWRlLXVwIHdpZHRoIGFuZCBoZWlnaHQ6XG4gKlxuICogY29uc3Qgc2l6ZSA9IGdldE5vcm1hbFNpemUoYXdhaXQgc2hhcnAoaW5wdXQpLm1ldGFkYXRhKCkpO1xuICpcbiAqIGZ1bmN0aW9uIGdldE5vcm1hbFNpemUoeyB3aWR0aCwgaGVpZ2h0LCBvcmllbnRhdGlvbiB9KSB7XG4gKiAgIHJldHVybiAob3JpZW50YXRpb24gfHwgMCkgPj0gNVxuICogICAgID8geyB3aWR0aDogaGVpZ2h0LCBoZWlnaHQ6IHdpZHRoIH1cbiAqICAgICA6IHsgd2lkdGgsIGhlaWdodCB9O1xuICogfVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnRzIGAoZXJyLCBtZXRhZGF0YSlgXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fFNoYXJwfVxuICovXG5mdW5jdGlvbiBtZXRhZGF0YSAoY2FsbGJhY2spIHtcbiAgY29uc3Qgc3RhY2sgPSBFcnJvcigpO1xuICBpZiAoaXMuZm4oY2FsbGJhY2spKSB7XG4gICAgaWYgKHRoaXMuX2lzU3RyZWFtSW5wdXQoKSkge1xuICAgICAgdGhpcy5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgICB0aGlzLl9mbGF0dGVuQnVmZmVySW4oKTtcbiAgICAgICAgc2hhcnAubWV0YWRhdGEodGhpcy5vcHRpb25zLCAoZXJyLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgbWV0YWRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hhcnAubWV0YWRhdGEodGhpcy5vcHRpb25zLCAoZXJyLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soaXMubmF0aXZlRXJyb3IoZXJyLCBzdGFjaykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLl9pc1N0cmVhbUlucHV0KCkpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2ZsYXR0ZW5CdWZmZXJJbigpO1xuICAgICAgICAgIHNoYXJwLm1ldGFkYXRhKHRoaXMub3B0aW9ucywgKGVyciwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUobWV0YWRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy53cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICAgICAgZmluaXNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uY2UoJ2ZpbmlzaCcsIGZpbmlzaGVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNoYXJwLm1ldGFkYXRhKHRoaXMub3B0aW9ucywgKGVyciwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoaXMubmF0aXZlRXJyb3IoZXJyLCBzdGFjaykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG1ldGFkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXNzIHRvIHBpeGVsLWRlcml2ZWQgaW1hZ2Ugc3RhdGlzdGljcyBmb3IgZXZlcnkgY2hhbm5lbCBpbiB0aGUgaW1hZ2UuXG4gKiBBIGBQcm9taXNlYCBpcyByZXR1cm5lZCB3aGVuIGBjYWxsYmFja2AgaXMgbm90IHByb3ZpZGVkLlxuICpcbiAqIC0gYGNoYW5uZWxzYDogQXJyYXkgb2YgY2hhbm5lbCBzdGF0aXN0aWNzIGZvciBlYWNoIGNoYW5uZWwgaW4gdGhlIGltYWdlLiBFYWNoIGNoYW5uZWwgc3RhdGlzdGljIGNvbnRhaW5zXG4gKiAgICAgLSBgbWluYCAobWluaW11bSB2YWx1ZSBpbiB0aGUgY2hhbm5lbClcbiAqICAgICAtIGBtYXhgIChtYXhpbXVtIHZhbHVlIGluIHRoZSBjaGFubmVsKVxuICogICAgIC0gYHN1bWAgKHN1bSBvZiBhbGwgdmFsdWVzIGluIGEgY2hhbm5lbClcbiAqICAgICAtIGBzcXVhcmVzU3VtYCAoc3VtIG9mIHNxdWFyZWQgdmFsdWVzIGluIGEgY2hhbm5lbClcbiAqICAgICAtIGBtZWFuYCAobWVhbiBvZiB0aGUgdmFsdWVzIGluIGEgY2hhbm5lbClcbiAqICAgICAtIGBzdGRldmAgKHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgdGhlIHZhbHVlcyBpbiBhIGNoYW5uZWwpXG4gKiAgICAgLSBgbWluWGAgKHgtY29vcmRpbmF0ZSBvZiBvbmUgb2YgdGhlIHBpeGVsIHdoZXJlIHRoZSBtaW5pbXVtIGxpZXMpXG4gKiAgICAgLSBgbWluWWAgKHktY29vcmRpbmF0ZSBvZiBvbmUgb2YgdGhlIHBpeGVsIHdoZXJlIHRoZSBtaW5pbXVtIGxpZXMpXG4gKiAgICAgLSBgbWF4WGAgKHgtY29vcmRpbmF0ZSBvZiBvbmUgb2YgdGhlIHBpeGVsIHdoZXJlIHRoZSBtYXhpbXVtIGxpZXMpXG4gKiAgICAgLSBgbWF4WWAgKHktY29vcmRpbmF0ZSBvZiBvbmUgb2YgdGhlIHBpeGVsIHdoZXJlIHRoZSBtYXhpbXVtIGxpZXMpXG4gKiAtIGBpc09wYXF1ZWA6IElzIHRoZSBpbWFnZSBmdWxseSBvcGFxdWU/IFdpbGwgYmUgYHRydWVgIGlmIHRoZSBpbWFnZSBoYXMgbm8gYWxwaGEgY2hhbm5lbCBvciBpZiBldmVyeSBwaXhlbCBpcyBmdWxseSBvcGFxdWUuXG4gKiAtIGBlbnRyb3B5YDogSGlzdG9ncmFtLWJhc2VkIGVzdGltYXRpb24gb2YgZ3JleXNjYWxlIGVudHJvcHksIGRpc2NhcmRpbmcgYWxwaGEgY2hhbm5lbCBpZiBhbnkuXG4gKiAtIGBzaGFycG5lc3NgOiBFc3RpbWF0aW9uIG9mIGdyZXlzY2FsZSBzaGFycG5lc3MgYmFzZWQgb24gdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhIExhcGxhY2lhbiBjb252b2x1dGlvbiwgZGlzY2FyZGluZyBhbHBoYSBjaGFubmVsIGlmIGFueS5cbiAqIC0gYGRvbWluYW50YDogT2JqZWN0IGNvbnRhaW5pbmcgbW9zdCBkb21pbmFudCBzUkdCIGNvbG91ciBiYXNlZCBvbiBhIDQwOTYtYmluIDNEIGhpc3RvZ3JhbS5cbiAqXG4gKiAqKk5vdGUqKjogU3RhdGlzdGljcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBpbnB1dCBpbWFnZS4gQW55IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSBpbWFnZSBtdXN0IGZpcnN0IGJlXG4gKiB3cml0dGVuIHRvIGEgYnVmZmVyIGluIG9yZGVyIHRvIHJ1biBgc3RhdHNgIG9uIHRoZSByZXN1bHQgKHNlZSB0aGlyZCBleGFtcGxlKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgaW1hZ2UgPSBzaGFycChpbnB1dEpwZyk7XG4gKiBpbWFnZVxuICogICAuc3RhdHMoKVxuICogICAudGhlbihmdW5jdGlvbihzdGF0cykge1xuICogICAgICAvLyBzdGF0cyBjb250YWlucyB0aGUgY2hhbm5lbC13aXNlIHN0YXRpc3RpY3MgYXJyYXkgYW5kIHRoZSBpc09wYXF1ZSB2YWx1ZVxuICogICB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgeyBlbnRyb3B5LCBzaGFycG5lc3MsIGRvbWluYW50IH0gPSBhd2FpdCBzaGFycChpbnB1dCkuc3RhdHMoKTtcbiAqIGNvbnN0IHsgciwgZywgYiB9ID0gZG9taW5hbnQ7XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGltYWdlID0gc2hhcnAoaW5wdXQpO1xuICogLy8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdFxuICogY29uc3QgcGFydCA9IGF3YWl0IGltYWdlLmV4dHJhY3QocmVnaW9uKS50b0J1ZmZlcigpO1xuICogLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSB0byBvYnRhaW4gc3RhdGlzdGljcyBvZiBleHRyYWN0ZWQgcmVnaW9uXG4gKiBjb25zdCBzdGF0cyA9IGF3YWl0IHNoYXJwKHBhcnQpLnN0YXRzKCk7XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudHMgYChlcnIsIHN0YXRzKWBcbiAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59XG4gKi9cbmZ1bmN0aW9uIHN0YXRzIChjYWxsYmFjaykge1xuICBjb25zdCBzdGFjayA9IEVycm9yKCk7XG4gIGlmIChpcy5mbihjYWxsYmFjaykpIHtcbiAgICBpZiAodGhpcy5faXNTdHJlYW1JbnB1dCgpKSB7XG4gICAgICB0aGlzLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2ZsYXR0ZW5CdWZmZXJJbigpO1xuICAgICAgICBzaGFycC5zdGF0cyh0aGlzLm9wdGlvbnMsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soaXMubmF0aXZlRXJyb3IoZXJyLCBzdGFjaykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGFycC5zdGF0cyh0aGlzLm9wdGlvbnMsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhpcy5uYXRpdmVFcnJvcihlcnIsIHN0YWNrKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaXMuX2lzU3RyZWFtSW5wdXQoKSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuX2ZsYXR0ZW5CdWZmZXJJbigpO1xuICAgICAgICAgIHNoYXJwLnN0YXRzKHRoaXMub3B0aW9ucywgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoc3RhdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzaGFycC5zdGF0cyh0aGlzLm9wdGlvbnMsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlY29yYXRlIHRoZSBTaGFycCBwcm90b3R5cGUgd2l0aCBpbnB1dC1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFNoYXJwKSB7XG4gIE9iamVjdC5hc3NpZ24oU2hhcnAucHJvdG90eXBlLCB7XG4gICAgLy8gUHJpdmF0ZVxuICAgIF9pbnB1dE9wdGlvbnNGcm9tT2JqZWN0LFxuICAgIF9jcmVhdGVJbnB1dERlc2NyaXB0b3IsXG4gICAgX3dyaXRlLFxuICAgIF9mbGF0dGVuQnVmZmVySW4sXG4gICAgX2lzU3RyZWFtSW5wdXQsXG4gICAgLy8gUHVibGljXG4gICAgbWV0YWRhdGEsXG4gICAgc3RhdHNcbiAgfSk7XG4gIC8vIENsYXNzIGF0dHJpYnV0ZXNcbiAgU2hhcnAuYWxpZ24gPSBhbGlnbjtcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDEzIExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG5cbi8qKlxuICogV2VpZ2h0aW5nIHRvIGFwcGx5IHdoZW4gdXNpbmcgY29udGFpbi9jb3ZlciBmaXQuXG4gKiBAbWVtYmVyXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBncmF2aXR5ID0ge1xuICBjZW50ZXI6IDAsXG4gIGNlbnRyZTogMCxcbiAgbm9ydGg6IDEsXG4gIGVhc3Q6IDIsXG4gIHNvdXRoOiAzLFxuICB3ZXN0OiA0LFxuICBub3J0aGVhc3Q6IDUsXG4gIHNvdXRoZWFzdDogNixcbiAgc291dGh3ZXN0OiA3LFxuICBub3J0aHdlc3Q6IDhcbn07XG5cbi8qKlxuICogUG9zaXRpb24gdG8gYXBwbHkgd2hlbiB1c2luZyBjb250YWluL2NvdmVyIGZpdC5cbiAqIEBtZW1iZXJcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHBvc2l0aW9uID0ge1xuICB0b3A6IDEsXG4gIHJpZ2h0OiAyLFxuICBib3R0b206IDMsXG4gIGxlZnQ6IDQsXG4gICdyaWdodCB0b3AnOiA1LFxuICAncmlnaHQgYm90dG9tJzogNixcbiAgJ2xlZnQgYm90dG9tJzogNyxcbiAgJ2xlZnQgdG9wJzogOFxufTtcblxuLyoqXG4gKiBIb3cgdG8gZXh0ZW5kIHRoZSBpbWFnZS5cbiAqIEBtZW1iZXJcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4dGVuZFdpdGggPSB7XG4gIGJhY2tncm91bmQ6ICdiYWNrZ3JvdW5kJyxcbiAgY29weTogJ2NvcHknLFxuICByZXBlYXQ6ICdyZXBlYXQnLFxuICBtaXJyb3I6ICdtaXJyb3InXG59O1xuXG4vKipcbiAqIFN0cmF0ZWdpZXMgZm9yIGF1dG9tYWdpYyBjb3ZlciBiZWhhdmlvdXIuXG4gKiBAbWVtYmVyXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzdHJhdGVneSA9IHtcbiAgZW50cm9weTogMTYsXG4gIGF0dGVudGlvbjogMTdcbn07XG5cbi8qKlxuICogUmVkdWN0aW9uIGtlcm5lbHMuXG4gKiBAbWVtYmVyXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBrZXJuZWwgPSB7XG4gIG5lYXJlc3Q6ICduZWFyZXN0JyxcbiAgbGluZWFyOiAnbGluZWFyJyxcbiAgY3ViaWM6ICdjdWJpYycsXG4gIG1pdGNoZWxsOiAnbWl0Y2hlbGwnLFxuICBsYW5jem9zMjogJ2xhbmN6b3MyJyxcbiAgbGFuY3pvczM6ICdsYW5jem9zMydcbn07XG5cbi8qKlxuICogTWV0aG9kcyBieSB3aGljaCBhbiBpbWFnZSBjYW4gYmUgcmVzaXplZCB0byBmaXQgdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMuXG4gKiBAbWVtYmVyXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBmaXQgPSB7XG4gIGNvbnRhaW46ICdjb250YWluJyxcbiAgY292ZXI6ICdjb3ZlcicsXG4gIGZpbGw6ICdmaWxsJyxcbiAgaW5zaWRlOiAnaW5zaWRlJyxcbiAgb3V0c2lkZTogJ291dHNpZGUnXG59O1xuXG4vKipcbiAqIE1hcCBleHRlcm5hbCBmaXQgcHJvcGVydHkgdG8gaW50ZXJuYWwgY2FudmFzIHByb3BlcnR5LlxuICogQG1lbWJlclxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbWFwRml0VG9DYW52YXMgPSB7XG4gIGNvbnRhaW46ICdlbWJlZCcsXG4gIGNvdmVyOiAnY3JvcCcsXG4gIGZpbGw6ICdpZ25vcmVfYXNwZWN0JyxcbiAgaW5zaWRlOiAnbWF4JyxcbiAgb3V0c2lkZTogJ21pbidcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNSb3RhdGlvbkV4cGVjdGVkIChvcHRpb25zKSB7XG4gIHJldHVybiAob3B0aW9ucy5hbmdsZSAlIDM2MCkgIT09IDAgfHwgb3B0aW9ucy51c2VFeGlmT3JpZW50YXRpb24gPT09IHRydWUgfHwgb3B0aW9ucy5yb3RhdGlvbkFuZ2xlICE9PSAwO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzUmVzaXplRXhwZWN0ZWQgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMud2lkdGggIT09IC0xIHx8IG9wdGlvbnMuaGVpZ2h0ICE9PSAtMTtcbn1cblxuLyoqXG4gKiBSZXNpemUgaW1hZ2UgdG8gYHdpZHRoYCwgYGhlaWdodGAgb3IgYHdpZHRoIHggaGVpZ2h0YC5cbiAqXG4gKiBXaGVuIGJvdGggYSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgcHJvdmlkZWQsIHRoZSBwb3NzaWJsZSBtZXRob2RzIGJ5IHdoaWNoIHRoZSBpbWFnZSBzaG91bGQgKipmaXQqKiB0aGVzZSBhcmU6XG4gKiAtIGBjb3ZlcmA6IChkZWZhdWx0KSBQcmVzZXJ2aW5nIGFzcGVjdCByYXRpbywgYXR0ZW1wdCB0byBlbnN1cmUgdGhlIGltYWdlIGNvdmVycyBib3RoIHByb3ZpZGVkIGRpbWVuc2lvbnMgYnkgY3JvcHBpbmcvY2xpcHBpbmcgdG8gZml0LlxuICogLSBgY29udGFpbmA6IFByZXNlcnZpbmcgYXNwZWN0IHJhdGlvLCBjb250YWluIHdpdGhpbiBib3RoIHByb3ZpZGVkIGRpbWVuc2lvbnMgdXNpbmcgXCJsZXR0ZXJib3hpbmdcIiB3aGVyZSBuZWNlc3NhcnkuXG4gKiAtIGBmaWxsYDogSWdub3JlIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIGlucHV0IGFuZCBzdHJldGNoIHRvIGJvdGggcHJvdmlkZWQgZGltZW5zaW9ucy5cbiAqIC0gYGluc2lkZWA6IFByZXNlcnZpbmcgYXNwZWN0IHJhdGlvLCByZXNpemUgdGhlIGltYWdlIHRvIGJlIGFzIGxhcmdlIGFzIHBvc3NpYmxlIHdoaWxlIGVuc3VyaW5nIGl0cyBkaW1lbnNpb25zIGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYm90aCB0aG9zZSBzcGVjaWZpZWQuXG4gKiAtIGBvdXRzaWRlYDogUHJlc2VydmluZyBhc3BlY3QgcmF0aW8sIHJlc2l6ZSB0aGUgaW1hZ2UgdG8gYmUgYXMgc21hbGwgYXMgcG9zc2libGUgd2hpbGUgZW5zdXJpbmcgaXRzIGRpbWVuc2lvbnMgYXJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBib3RoIHRob3NlIHNwZWNpZmllZC5cbiAqXG4gKiBTb21lIG9mIHRoZXNlIHZhbHVlcyBhcmUgYmFzZWQgb24gdGhlIFtvYmplY3QtZml0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvb2JqZWN0LWZpdCkgQ1NTIHByb3BlcnR5LlxuICpcbiAqIDxpbWcgYWx0PVwiRXhhbXBsZXMgb2YgdmFyaW91cyB2YWx1ZXMgZm9yIHRoZSBmaXQgcHJvcGVydHkgd2hlbiByZXNpemluZ1wiIHdpZHRoPVwiMTAwJVwiIHN0eWxlPVwiYXNwZWN0LXJhdGlvOiA5OTgvMjQzXCIgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2xvdmVsbC9zaGFycEBtYWluL2RvY3MvaW1hZ2UvYXBpLXJlc2l6ZS1maXQuc3ZnXCI+XG4gKlxuICogV2hlbiB1c2luZyBhICoqZml0Kiogb2YgYGNvdmVyYCBvciBgY29udGFpbmAsIHRoZSBkZWZhdWx0ICoqcG9zaXRpb24qKiBpcyBgY2VudHJlYC4gT3RoZXIgb3B0aW9ucyBhcmU6XG4gKiAtIGBzaGFycC5wb3NpdGlvbmA6IGB0b3BgLCBgcmlnaHQgdG9wYCwgYHJpZ2h0YCwgYHJpZ2h0IGJvdHRvbWAsIGBib3R0b21gLCBgbGVmdCBib3R0b21gLCBgbGVmdGAsIGBsZWZ0IHRvcGAuXG4gKiAtIGBzaGFycC5ncmF2aXR5YDogYG5vcnRoYCwgYG5vcnRoZWFzdGAsIGBlYXN0YCwgYHNvdXRoZWFzdGAsIGBzb3V0aGAsIGBzb3V0aHdlc3RgLCBgd2VzdGAsIGBub3J0aHdlc3RgLCBgY2VudGVyYCBvciBgY2VudHJlYC5cbiAqIC0gYHNoYXJwLnN0cmF0ZWd5YDogYGNvdmVyYCBvbmx5LCBkeW5hbWljYWxseSBjcm9wIHVzaW5nIGVpdGhlciB0aGUgYGVudHJvcHlgIG9yIGBhdHRlbnRpb25gIHN0cmF0ZWd5LlxuICpcbiAqIFNvbWUgb2YgdGhlc2UgdmFsdWVzIGFyZSBiYXNlZCBvbiB0aGUgW29iamVjdC1wb3NpdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL29iamVjdC1wb3NpdGlvbikgQ1NTIHByb3BlcnR5LlxuICpcbiAqIFRoZSBzdHJhdGVneS1iYXNlZCBhcHByb2FjaCBpbml0aWFsbHkgcmVzaXplcyBzbyBvbmUgZGltZW5zaW9uIGlzIGF0IGl0cyB0YXJnZXQgbGVuZ3RoXG4gKiB0aGVuIHJlcGVhdGVkbHkgcmFua3MgZWRnZSByZWdpb25zLCBkaXNjYXJkaW5nIHRoZSBlZGdlIHdpdGggdGhlIGxvd2VzdCBzY29yZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgc3RyYXRlZ3kuXG4gKiAtIGBlbnRyb3B5YDogZm9jdXMgb24gdGhlIHJlZ2lvbiB3aXRoIHRoZSBoaWdoZXN0IFtTaGFubm9uIGVudHJvcHldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VudHJvcHlfJTI4aW5mb3JtYXRpb25fdGhlb3J5JTI5KS5cbiAqIC0gYGF0dGVudGlvbmA6IGZvY3VzIG9uIHRoZSByZWdpb24gd2l0aCB0aGUgaGlnaGVzdCBsdW1pbmFuY2UgZnJlcXVlbmN5LCBjb2xvdXIgc2F0dXJhdGlvbiBhbmQgcHJlc2VuY2Ugb2Ygc2tpbiB0b25lcy5cbiAqXG4gKiBQb3NzaWJsZSBkb3duc2l6aW5nIGtlcm5lbHMgYXJlOlxuICogLSBgbmVhcmVzdGA6IFVzZSBbbmVhcmVzdCBuZWlnaGJvdXIgaW50ZXJwb2xhdGlvbl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OZWFyZXN0LW5laWdoYm9yX2ludGVycG9sYXRpb24pLlxuICogLSBgbGluZWFyYDogVXNlIGEgW3RyaWFuZ2xlIGZpbHRlcl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVHJpYW5ndWxhcl9mdW5jdGlvbikuXG4gKiAtIGBjdWJpY2A6IFVzZSBhIFtDYXRtdWxsLVJvbSBzcGxpbmVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRyaXBldGFsX0NhdG11bGwlRTIlODAlOTNSb21fc3BsaW5lKS5cbiAqIC0gYG1pdGNoZWxsYDogVXNlIGEgW01pdGNoZWxsLU5ldHJhdmFsaSBzcGxpbmVdKGh0dHBzOi8vd3d3LmNzLnV0ZXhhcy5lZHUvfmZ1c3NlbGwvY291cnNlcy9jczM4NGctZmFsbDIwMTMvbGVjdHVyZXMvbWl0Y2hlbGwvTWl0Y2hlbGwucGRmKS5cbiAqIC0gYGxhbmN6b3MyYDogVXNlIGEgW0xhbmN6b3Mga2VybmVsXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYW5jem9zX3Jlc2FtcGxpbmcjTGFuY3pvc19rZXJuZWwpIHdpdGggYGE9MmAuXG4gKiAtIGBsYW5jem9zM2A6IFVzZSBhIExhbmN6b3Mga2VybmVsIHdpdGggYGE9M2AgKHRoZSBkZWZhdWx0KS5cbiAqXG4gKiBXaGVuIHVwc2FtcGxpbmcsIHRoZXNlIGtlcm5lbHMgbWFwIHRvIGBuZWFyZXN0YCwgYGxpbmVhcmAgYW5kIGBjdWJpY2AgaW50ZXJwb2xhdG9ycy5cbiAqIERvd25zYW1wbGluZyBrZXJuZWxzIHdpdGhvdXQgYSBtYXRjaGluZyB1cHNhbXBsaW5nIGludGVycG9sYXRvciBtYXAgdG8gYGN1YmljYC5cbiAqXG4gKiBPbmx5IG9uZSByZXNpemUgY2FuIG9jY3VyIHBlciBwaXBlbGluZS5cbiAqIFByZXZpb3VzIGNhbGxzIHRvIGByZXNpemVgIGluIHRoZSBzYW1lIHBpcGVsaW5lIHdpbGwgYmUgaWdub3JlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogc2hhcnAoaW5wdXQpXG4gKiAgIC5yZXNpemUoeyB3aWR0aDogMTAwIH0pXG4gKiAgIC50b0J1ZmZlcigpXG4gKiAgIC50aGVuKGRhdGEgPT4ge1xuICogICAgIC8vIDEwMCBwaXhlbHMgd2lkZSwgYXV0by1zY2FsZWQgaGVpZ2h0XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBzaGFycChpbnB1dClcbiAqICAgLnJlc2l6ZSh7IGhlaWdodDogMTAwIH0pXG4gKiAgIC50b0J1ZmZlcigpXG4gKiAgIC50aGVuKGRhdGEgPT4ge1xuICogICAgIC8vIDEwMCBwaXhlbHMgaGlnaCwgYXV0by1zY2FsZWQgd2lkdGhcbiAqICAgfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAucmVzaXplKDIwMCwgMzAwLCB7XG4gKiAgICAga2VybmVsOiBzaGFycC5rZXJuZWwubmVhcmVzdCxcbiAqICAgICBmaXQ6ICdjb250YWluJyxcbiAqICAgICBwb3NpdGlvbjogJ3JpZ2h0IHRvcCcsXG4gKiAgICAgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMC41IH1cbiAqICAgfSlcbiAqICAgLnRvRmlsZSgnb3V0cHV0LnBuZycpXG4gKiAgIC50aGVuKCgpID0+IHtcbiAqICAgICAvLyBvdXRwdXQucG5nIGlzIGEgMjAwIHBpeGVscyB3aWRlIGFuZCAzMDAgcGl4ZWxzIGhpZ2ggaW1hZ2VcbiAqICAgICAvLyBjb250YWluaW5nIGEgbmVhcmVzdC1uZWlnaGJvdXIgc2NhbGVkIHZlcnNpb25cbiAqICAgICAvLyBjb250YWluZWQgd2l0aGluIHRoZSBub3J0aC1lYXN0IGNvcm5lciBvZiBhIHNlbWktdHJhbnNwYXJlbnQgd2hpdGUgY2FudmFzXG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB0cmFuc2Zvcm1lciA9IHNoYXJwKClcbiAqICAgLnJlc2l6ZSh7XG4gKiAgICAgd2lkdGg6IDIwMCxcbiAqICAgICBoZWlnaHQ6IDIwMCxcbiAqICAgICBmaXQ6IHNoYXJwLmZpdC5jb3ZlcixcbiAqICAgICBwb3NpdGlvbjogc2hhcnAuc3RyYXRlZ3kuZW50cm9weVxuICogICB9KTtcbiAqIC8vIFJlYWQgaW1hZ2UgZGF0YSBmcm9tIHJlYWRhYmxlU3RyZWFtXG4gKiAvLyBXcml0ZSAyMDBweCBzcXVhcmUgYXV0by1jcm9wcGVkIGltYWdlIGRhdGEgdG8gd3JpdGFibGVTdHJlYW1cbiAqIHJlYWRhYmxlU3RyZWFtXG4gKiAgIC5waXBlKHRyYW5zZm9ybWVyKVxuICogICAucGlwZSh3cml0YWJsZVN0cmVhbSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAucmVzaXplKDIwMCwgMjAwLCB7XG4gKiAgICAgZml0OiBzaGFycC5maXQuaW5zaWRlLFxuICogICAgIHdpdGhvdXRFbmxhcmdlbWVudDogdHJ1ZVxuICogICB9KVxuICogICAudG9Gb3JtYXQoJ2pwZWcnKVxuICogICAudG9CdWZmZXIoKVxuICogICAudGhlbihmdW5jdGlvbihvdXRwdXRCdWZmZXIpIHtcbiAqICAgICAvLyBvdXRwdXRCdWZmZXIgY29udGFpbnMgSlBFRyBpbWFnZSBkYXRhXG4gKiAgICAgLy8gbm8gd2lkZXIgYW5kIG5vIGhpZ2hlciB0aGFuIDIwMCBwaXhlbHNcbiAqICAgICAvLyBhbmQgbm8gbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGltYWdlXG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBzaGFycChpbnB1dClcbiAqICAgLnJlc2l6ZSgyMDAsIDIwMCwge1xuICogICAgIGZpdDogc2hhcnAuZml0Lm91dHNpZGUsXG4gKiAgICAgd2l0aG91dFJlZHVjdGlvbjogdHJ1ZVxuICogICB9KVxuICogICAudG9Gb3JtYXQoJ2pwZWcnKVxuICogICAudG9CdWZmZXIoKVxuICogICAudGhlbihmdW5jdGlvbihvdXRwdXRCdWZmZXIpIHtcbiAqICAgICAvLyBvdXRwdXRCdWZmZXIgY29udGFpbnMgSlBFRyBpbWFnZSBkYXRhXG4gKiAgICAgLy8gb2YgYXQgbGVhc3QgMjAwIHBpeGVscyB3aWRlIGFuZCAyMDAgcGl4ZWxzIGhpZ2ggd2hpbGUgbWFpbnRhaW5pbmcgYXNwZWN0IHJhdGlvXG4gKiAgICAgLy8gYW5kIG5vIHNtYWxsZXIgdGhhbiB0aGUgaW5wdXQgaW1hZ2VcbiAqICAgfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjYWxlQnlIYWxmID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5tZXRhZGF0YSgpXG4gKiAgIC50aGVuKCh7IHdpZHRoIH0pID0+IHNoYXJwKGlucHV0KVxuICogICAgIC5yZXNpemUoTWF0aC5yb3VuZCh3aWR0aCAqIDAuNSkpXG4gKiAgICAgLnRvQnVmZmVyKClcbiAqICAgKTtcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXSAtIEhvdyBtYW55IHBpeGVscyB3aWRlIHRoZSByZXN1bHRhbnQgaW1hZ2Ugc2hvdWxkIGJlLiBVc2UgYG51bGxgIG9yIGB1bmRlZmluZWRgIHRvIGF1dG8tc2NhbGUgdGhlIHdpZHRoIHRvIG1hdGNoIHRoZSBoZWlnaHQuXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBIb3cgbWFueSBwaXhlbHMgaGlnaCB0aGUgcmVzdWx0YW50IGltYWdlIHNob3VsZCBiZS4gVXNlIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byBhdXRvLXNjYWxlIHRoZSBoZWlnaHQgdG8gbWF0Y2ggdGhlIHdpZHRoLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLndpZHRoXSAtIEFuIGFsdGVybmF0aXZlIG1lYW5zIG9mIHNwZWNpZnlpbmcgYHdpZHRoYC4gSWYgYm90aCBhcmUgcHJlc2VudCB0aGlzIHRha2VzIHByaW9yaXR5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gLSBBbiBhbHRlcm5hdGl2ZSBtZWFucyBvZiBzcGVjaWZ5aW5nIGBoZWlnaHRgLiBJZiBib3RoIGFyZSBwcmVzZW50IHRoaXMgdGFrZXMgcHJpb3JpdHkuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZml0PSdjb3ZlciddIC0gSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcmVzaXplZC9jcm9wcGVkIHRvIGZpdCB0aGUgdGFyZ2V0IGRpbWVuc2lvbihzKSwgb25lIG9mIGBjb3ZlcmAsIGBjb250YWluYCwgYGZpbGxgLCBgaW5zaWRlYCBvciBgb3V0c2lkZWAuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucG9zaXRpb249J2NlbnRyZSddIC0gQSBwb3NpdGlvbiwgZ3Jhdml0eSBvciBzdHJhdGVneSB0byB1c2Ugd2hlbiBgZml0YCBpcyBgY292ZXJgIG9yIGBjb250YWluYC5cbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gW29wdGlvbnMuYmFja2dyb3VuZD17cjogMCwgZzogMCwgYjogMCwgYWxwaGE6IDF9XSAtIGJhY2tncm91bmQgY29sb3VyIHdoZW4gYGZpdGAgaXMgYGNvbnRhaW5gLCBwYXJzZWQgYnkgdGhlIFtjb2xvcl0oaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2UvY29sb3IpIG1vZHVsZSwgZGVmYXVsdHMgdG8gYmxhY2sgd2l0aG91dCB0cmFuc3BhcmVuY3kuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMua2VybmVsPSdsYW5jem9zMyddIC0gVGhlIGtlcm5lbCB0byB1c2UgZm9yIGltYWdlIHJlZHVjdGlvbiBhbmQgdGhlIGluZmVycmVkIGludGVycG9sYXRvciB0byB1c2UgZm9yIHVwc2FtcGxpbmcuIFVzZSB0aGUgYGZhc3RTaHJpbmtPbkxvYWRgIG9wdGlvbiB0byBjb250cm9sIGtlcm5lbCB2cyBzaHJpbmstb24tbG9hZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMud2l0aG91dEVubGFyZ2VtZW50PWZhbHNlXSAtIERvIG5vdCBzY2FsZSB1cCBpZiB0aGUgd2lkdGggKm9yKiBoZWlnaHQgYXJlIGFscmVhZHkgbGVzcyB0aGFuIHRoZSB0YXJnZXQgZGltZW5zaW9ucywgZXF1aXZhbGVudCB0byBHcmFwaGljc01hZ2ljaydzIGA+YCBnZW9tZXRyeSBvcHRpb24uIFRoaXMgbWF5IHJlc3VsdCBpbiBvdXRwdXQgZGltZW5zaW9ucyBzbWFsbGVyIHRoYW4gdGhlIHRhcmdldCBkaW1lbnNpb25zLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy53aXRob3V0UmVkdWN0aW9uPWZhbHNlXSAtIERvIG5vdCBzY2FsZSBkb3duIGlmIHRoZSB3aWR0aCAqb3IqIGhlaWdodCBhcmUgYWxyZWFkeSBncmVhdGVyIHRoYW4gdGhlIHRhcmdldCBkaW1lbnNpb25zLCBlcXVpdmFsZW50IHRvIEdyYXBoaWNzTWFnaWNrJ3MgYDxgIGdlb21ldHJ5IG9wdGlvbi4gVGhpcyBtYXkgc3RpbGwgcmVzdWx0IGluIGEgY3JvcCB0byByZWFjaCB0aGUgdGFyZ2V0IGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZhc3RTaHJpbmtPbkxvYWQ9dHJ1ZV0gLSBUYWtlIGdyZWF0ZXIgYWR2YW50YWdlIG9mIHRoZSBKUEVHIGFuZCBXZWJQIHNocmluay1vbi1sb2FkIGZlYXR1cmUsIHdoaWNoIGNhbiBsZWFkIHRvIGEgc2xpZ2h0IG1vaXLDqSBwYXR0ZXJuIG9yIHJvdW5kLWRvd24gb2YgYW4gYXV0by1zY2FsZWQgZGltZW5zaW9uLlxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiByZXNpemUgKHdpZHRoT3JPcHRpb25zLCBoZWlnaHQsIG9wdGlvbnMpIHtcbiAgaWYgKGlzUmVzaXplRXhwZWN0ZWQodGhpcy5vcHRpb25zKSkge1xuICAgIHRoaXMub3B0aW9ucy5kZWJ1Z2xvZygnaWdub3JpbmcgcHJldmlvdXMgcmVzaXplIG9wdGlvbnMnKTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLndpZHRoUG9zdCAhPT0gLTEpIHtcbiAgICB0aGlzLm9wdGlvbnMuZGVidWdsb2coJ29wZXJhdGlvbiBvcmRlciB3aWxsIGJlOiBleHRyYWN0LCByZXNpemUsIGV4dHJhY3QnKTtcbiAgfVxuICBpZiAoaXMuZGVmaW5lZCh3aWR0aE9yT3B0aW9ucykpIHtcbiAgICBpZiAoaXMub2JqZWN0KHdpZHRoT3JPcHRpb25zKSAmJiAhaXMuZGVmaW5lZChvcHRpb25zKSkge1xuICAgICAgb3B0aW9ucyA9IHdpZHRoT3JPcHRpb25zO1xuICAgIH0gZWxzZSBpZiAoaXMuaW50ZWdlcih3aWR0aE9yT3B0aW9ucykgJiYgd2lkdGhPck9wdGlvbnMgPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSB3aWR0aE9yT3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd3aWR0aCcsICdwb3NpdGl2ZSBpbnRlZ2VyJywgd2lkdGhPck9wdGlvbnMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wdGlvbnMud2lkdGggPSAtMTtcbiAgfVxuICBpZiAoaXMuZGVmaW5lZChoZWlnaHQpKSB7XG4gICAgaWYgKGlzLmludGVnZXIoaGVpZ2h0KSAmJiBoZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2hlaWdodCcsICdwb3NpdGl2ZSBpbnRlZ2VyJywgaGVpZ2h0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IC0xO1xuICB9XG4gIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICAvLyBXaWR0aFxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMud2lkdGgpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihvcHRpb25zLndpZHRoKSAmJiBvcHRpb25zLndpZHRoID4gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd3aWR0aCcsICdwb3NpdGl2ZSBpbnRlZ2VyJywgb3B0aW9ucy53aWR0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhlaWdodFxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuaGVpZ2h0KSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5oZWlnaHQpICYmIG9wdGlvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2hlaWdodCcsICdwb3NpdGl2ZSBpbnRlZ2VyJywgb3B0aW9ucy5oZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGaXRcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmZpdCkpIHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IG1hcEZpdFRvQ2FudmFzW29wdGlvbnMuZml0XTtcbiAgICAgIGlmIChpcy5zdHJpbmcoY2FudmFzKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzID0gY2FudmFzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdmaXQnLCAndmFsaWQgZml0Jywgb3B0aW9ucy5maXQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQb3NpdGlvblxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucG9zaXRpb24pKSB7XG4gICAgICBjb25zdCBwb3MgPSBpcy5pbnRlZ2VyKG9wdGlvbnMucG9zaXRpb24pXG4gICAgICAgID8gb3B0aW9ucy5wb3NpdGlvblxuICAgICAgICA6IHN0cmF0ZWd5W29wdGlvbnMucG9zaXRpb25dIHx8IHBvc2l0aW9uW29wdGlvbnMucG9zaXRpb25dIHx8IGdyYXZpdHlbb3B0aW9ucy5wb3NpdGlvbl07XG4gICAgICBpZiAoaXMuaW50ZWdlcihwb3MpICYmIChpcy5pblJhbmdlKHBvcywgMCwgOCkgfHwgaXMuaW5SYW5nZShwb3MsIDE2LCAxNykpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9IHBvcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigncG9zaXRpb24nLCAndmFsaWQgcG9zaXRpb24vZ3Jhdml0eS9zdHJhdGVneScsIG9wdGlvbnMucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBCYWNrZ3JvdW5kXG4gICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG91ck9wdGlvbigncmVzaXplQmFja2dyb3VuZCcsIG9wdGlvbnMuYmFja2dyb3VuZCk7XG4gICAgLy8gS2VybmVsXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5rZXJuZWwpKSB7XG4gICAgICBpZiAoaXMuc3RyaW5nKGtlcm5lbFtvcHRpb25zLmtlcm5lbF0pKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5rZXJuZWwgPSBrZXJuZWxbb3B0aW9ucy5rZXJuZWxdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdrZXJuZWwnLCAndmFsaWQga2VybmVsIG5hbWUnLCBvcHRpb25zLmtlcm5lbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdpdGhvdXQgZW5sYXJnZW1lbnRcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLndpdGhvdXRFbmxhcmdlbWVudCkpIHtcbiAgICAgIHRoaXMuX3NldEJvb2xlYW5PcHRpb24oJ3dpdGhvdXRFbmxhcmdlbWVudCcsIG9wdGlvbnMud2l0aG91dEVubGFyZ2VtZW50KTtcbiAgICB9XG4gICAgLy8gV2l0aG91dCByZWR1Y3Rpb25cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLndpdGhvdXRSZWR1Y3Rpb24pKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd3aXRob3V0UmVkdWN0aW9uJywgb3B0aW9ucy53aXRob3V0UmVkdWN0aW9uKTtcbiAgICB9XG4gICAgLy8gU2hyaW5rIG9uIGxvYWRcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmZhc3RTaHJpbmtPbkxvYWQpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdmYXN0U2hyaW5rT25Mb2FkJywgb3B0aW9ucy5mYXN0U2hyaW5rT25Mb2FkKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzUm90YXRpb25FeHBlY3RlZCh0aGlzLm9wdGlvbnMpICYmIGlzUmVzaXplRXhwZWN0ZWQodGhpcy5vcHRpb25zKSkge1xuICAgIHRoaXMub3B0aW9ucy5yb3RhdGVCZWZvcmVQcmVFeHRyYWN0ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBFeHRlbmQgLyBwYWQgLyBleHRydWRlIG9uZSBvciBtb3JlIGVkZ2VzIG9mIHRoZSBpbWFnZSB3aXRoIGVpdGhlclxuICogdGhlIHByb3ZpZGVkIGJhY2tncm91bmQgY29sb3VyIG9yIHBpeGVscyBkZXJpdmVkIGZyb20gdGhlIGltYWdlLlxuICogVGhpcyBvcGVyYXRpb24gd2lsbCBhbHdheXMgb2NjdXIgYWZ0ZXIgcmVzaXppbmcgYW5kIGV4dHJhY3Rpb24sIGlmIGFueS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVzaXplIHRvIDE0MCBwaXhlbHMgd2lkZSwgdGhlbiBhZGQgMTAgdHJhbnNwYXJlbnQgcGl4ZWxzXG4gKiAvLyB0byB0aGUgdG9wLCBsZWZ0IGFuZCByaWdodCBlZGdlcyBhbmQgMjAgdG8gdGhlIGJvdHRvbSBlZGdlXG4gKiBzaGFycChpbnB1dClcbiAqICAgLnJlc2l6ZSgxNDApXG4gKiAgIC5leHRlbmQoe1xuICogICAgIHRvcDogMTAsXG4gKiAgICAgYm90dG9tOiAyMCxcbiAqICAgICBsZWZ0OiAxMCxcbiAqICAgICByaWdodDogMTAsXG4gKiAgICAgYmFja2dyb3VuZDogeyByOiAwLCBnOiAwLCBiOiAwLCBhbHBoYTogMCB9XG4gKiAgIH0pXG4gKiAgIC4uLlxuICpcbiogQGV4YW1wbGVcbiAqIC8vIEFkZCBhIHJvdyBvZiAxMCByZWQgcGl4ZWxzIHRvIHRoZSBib3R0b21cbiAqIHNoYXJwKGlucHV0KVxuICogICAuZXh0ZW5kKHtcbiAqICAgICBib3R0b206IDEwLFxuICogICAgIGJhY2tncm91bmQ6ICdyZWQnXG4gKiAgIH0pXG4gKiAgIC4uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeHRydWRlIGltYWdlIGJ5IDggcGl4ZWxzIHRvIHRoZSByaWdodCwgbWlycm9yaW5nIGV4aXN0aW5nIHJpZ2h0IGhhbmQgZWRnZVxuICogc2hhcnAoaW5wdXQpXG4gKiAgIC5leHRlbmQoe1xuICogICAgIHJpZ2h0OiA4LFxuICogICAgIGJhY2tncm91bmQ6ICdtaXJyb3InXG4gKiAgIH0pXG4gKiAgIC4uLlxuICpcbiAqIEBwYXJhbSB7KG51bWJlcnxPYmplY3QpfSBleHRlbmQgLSBzaW5nbGUgcGl4ZWwgY291bnQgdG8gYWRkIHRvIGFsbCBlZGdlcyBvciBhbiBPYmplY3Qgd2l0aCBwZXItZWRnZSBjb3VudHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXh0ZW5kLnRvcD0wXVxuICogQHBhcmFtIHtudW1iZXJ9IFtleHRlbmQubGVmdD0wXVxuICogQHBhcmFtIHtudW1iZXJ9IFtleHRlbmQuYm90dG9tPTBdXG4gKiBAcGFyYW0ge251bWJlcn0gW2V4dGVuZC5yaWdodD0wXVxuICogQHBhcmFtIHtTdHJpbmd9IFtleHRlbmQuZXh0ZW5kV2l0aD0nYmFja2dyb3VuZCddIC0gcG9wdWxhdGUgbmV3IHBpeGVscyB1c2luZyB0aGlzIG1ldGhvZCwgb25lIG9mOiBiYWNrZ3JvdW5kLCBjb3B5LCByZXBlYXQsIG1pcnJvci5cbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gW2V4dGVuZC5iYWNrZ3JvdW5kPXtyOiAwLCBnOiAwLCBiOiAwLCBhbHBoYTogMX1dIC0gYmFja2dyb3VuZCBjb2xvdXIsIHBhcnNlZCBieSB0aGUgW2NvbG9yXShodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9jb2xvcikgbW9kdWxlLCBkZWZhdWx0cyB0byBibGFjayB3aXRob3V0IHRyYW5zcGFyZW5jeS5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiovXG5mdW5jdGlvbiBleHRlbmQgKGV4dGVuZCkge1xuICBpZiAoaXMuaW50ZWdlcihleHRlbmQpICYmIGV4dGVuZCA+IDApIHtcbiAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kVG9wID0gZXh0ZW5kO1xuICAgIHRoaXMub3B0aW9ucy5leHRlbmRCb3R0b20gPSBleHRlbmQ7XG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZExlZnQgPSBleHRlbmQ7XG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZFJpZ2h0ID0gZXh0ZW5kO1xuICB9IGVsc2UgaWYgKGlzLm9iamVjdChleHRlbmQpKSB7XG4gICAgaWYgKGlzLmRlZmluZWQoZXh0ZW5kLnRvcCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGV4dGVuZC50b3ApICYmIGV4dGVuZC50b3AgPj0gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kVG9wID0gZXh0ZW5kLnRvcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndG9wJywgJ3Bvc2l0aXZlIGludGVnZXInLCBleHRlbmQudG9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQoZXh0ZW5kLmJvdHRvbSkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGV4dGVuZC5ib3R0b20pICYmIGV4dGVuZC5ib3R0b20gPj0gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kQm90dG9tID0gZXh0ZW5kLmJvdHRvbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignYm90dG9tJywgJ3Bvc2l0aXZlIGludGVnZXInLCBleHRlbmQuYm90dG9tKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQoZXh0ZW5kLmxlZnQpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihleHRlbmQubGVmdCkgJiYgZXh0ZW5kLmxlZnQgPj0gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kTGVmdCA9IGV4dGVuZC5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdsZWZ0JywgJ3Bvc2l0aXZlIGludGVnZXInLCBleHRlbmQubGVmdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKGV4dGVuZC5yaWdodCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGV4dGVuZC5yaWdodCkgJiYgZXh0ZW5kLnJpZ2h0ID49IDApIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4dGVuZFJpZ2h0ID0gZXh0ZW5kLnJpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdyaWdodCcsICdwb3NpdGl2ZSBpbnRlZ2VyJywgZXh0ZW5kLnJpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG91ck9wdGlvbignZXh0ZW5kQmFja2dyb3VuZCcsIGV4dGVuZC5iYWNrZ3JvdW5kKTtcbiAgICBpZiAoaXMuZGVmaW5lZChleHRlbmQuZXh0ZW5kV2l0aCkpIHtcbiAgICAgIGlmIChpcy5zdHJpbmcoZXh0ZW5kV2l0aFtleHRlbmQuZXh0ZW5kV2l0aF0pKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5leHRlbmRXaXRoID0gZXh0ZW5kV2l0aFtleHRlbmQuZXh0ZW5kV2l0aF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2V4dGVuZFdpdGgnLCAnb25lIG9mOiBiYWNrZ3JvdW5kLCBjb3B5LCByZXBlYXQsIG1pcnJvcicsIGV4dGVuZC5leHRlbmRXaXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdleHRlbmQnLCAnaW50ZWdlciBvciBvYmplY3QnLCBleHRlbmQpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEV4dHJhY3QvY3JvcCBhIHJlZ2lvbiBvZiB0aGUgaW1hZ2UuXG4gKlxuICogLSBVc2UgYGV4dHJhY3RgIGJlZm9yZSBgcmVzaXplYCBmb3IgcHJlLXJlc2l6ZSBleHRyYWN0aW9uLlxuICogLSBVc2UgYGV4dHJhY3RgIGFmdGVyIGByZXNpemVgIGZvciBwb3N0LXJlc2l6ZSBleHRyYWN0aW9uLlxuICogLSBVc2UgYGV4dHJhY3RgIHR3aWNlIGFuZCBgcmVzaXplYCBvbmNlIGZvciBleHRyYWN0LXRoZW4tcmVzaXplLXRoZW4tZXh0cmFjdCBpbiBhIGZpeGVkIG9wZXJhdGlvbiBvcmRlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogc2hhcnAoaW5wdXQpXG4gKiAgIC5leHRyYWN0KHsgbGVmdDogbGVmdCwgdG9wOiB0b3AsIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSlcbiAqICAgLnRvRmlsZShvdXRwdXQsIGZ1bmN0aW9uKGVycikge1xuICogICAgIC8vIEV4dHJhY3QgYSByZWdpb24gb2YgdGhlIGlucHV0IGltYWdlLCBzYXZpbmcgaW4gdGhlIHNhbWUgZm9ybWF0LlxuICogICB9KTtcbiAqIEBleGFtcGxlXG4gKiBzaGFycChpbnB1dClcbiAqICAgLmV4dHJhY3QoeyBsZWZ0OiBsZWZ0T2Zmc2V0UHJlLCB0b3A6IHRvcE9mZnNldFByZSwgd2lkdGg6IHdpZHRoUHJlLCBoZWlnaHQ6IGhlaWdodFByZSB9KVxuICogICAucmVzaXplKHdpZHRoLCBoZWlnaHQpXG4gKiAgIC5leHRyYWN0KHsgbGVmdDogbGVmdE9mZnNldFBvc3QsIHRvcDogdG9wT2Zmc2V0UG9zdCwgd2lkdGg6IHdpZHRoUG9zdCwgaGVpZ2h0OiBoZWlnaHRQb3N0IH0pXG4gKiAgIC50b0ZpbGUob3V0cHV0LCBmdW5jdGlvbihlcnIpIHtcbiAqICAgICAvLyBFeHRyYWN0IGEgcmVnaW9uLCByZXNpemUsIHRoZW4gZXh0cmFjdCBmcm9tIHRoZSByZXNpemVkIGltYWdlXG4gKiAgIH0pO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gZGVzY3JpYmVzIHRoZSByZWdpb24gdG8gZXh0cmFjdCB1c2luZyBpbnRlZ3JhbCBwaXhlbCB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmxlZnQgLSB6ZXJvLWluZGV4ZWQgb2Zmc2V0IGZyb20gbGVmdCBlZGdlXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50b3AgLSB6ZXJvLWluZGV4ZWQgb2Zmc2V0IGZyb20gdG9wIGVkZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLndpZHRoIC0gd2lkdGggb2YgcmVnaW9uIHRvIGV4dHJhY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmhlaWdodCAtIGhlaWdodCBvZiByZWdpb24gdG8gZXh0cmFjdFxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBleHRyYWN0IChvcHRpb25zKSB7XG4gIGNvbnN0IHN1ZmZpeCA9IGlzUmVzaXplRXhwZWN0ZWQodGhpcy5vcHRpb25zKSB8fCB0aGlzLm9wdGlvbnMud2lkdGhQcmUgIT09IC0xID8gJ1Bvc3QnIDogJ1ByZSc7XG4gIGlmICh0aGlzLm9wdGlvbnNbYHdpZHRoJHtzdWZmaXh9YF0gIT09IC0xKSB7XG4gICAgdGhpcy5vcHRpb25zLmRlYnVnbG9nKCdpZ25vcmluZyBwcmV2aW91cyBleHRyYWN0IG9wdGlvbnMnKTtcbiAgfVxuICBbJ2xlZnQnLCAndG9wJywgJ3dpZHRoJywgJ2hlaWdodCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbbmFtZV07XG4gICAgaWYgKGlzLmludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDApIHtcbiAgICAgIHRoaXMub3B0aW9uc1tuYW1lICsgKG5hbWUgPT09ICdsZWZ0JyB8fCBuYW1lID09PSAndG9wJyA/ICdPZmZzZXQnIDogJycpICsgc3VmZml4XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IobmFtZSwgJ2ludGVnZXInLCB2YWx1ZSk7XG4gICAgfVxuICB9LCB0aGlzKTtcbiAgLy8gRW5zdXJlIGV4aXN0aW5nIHJvdGF0aW9uIG9jY3VycyBiZWZvcmUgcHJlLXJlc2l6ZSBleHRyYWN0aW9uXG4gIGlmIChpc1JvdGF0aW9uRXhwZWN0ZWQodGhpcy5vcHRpb25zKSAmJiAhaXNSZXNpemVFeHBlY3RlZCh0aGlzLm9wdGlvbnMpKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy53aWR0aFByZSA9PT0gLTEgfHwgdGhpcy5vcHRpb25zLndpZHRoUG9zdCA9PT0gLTEpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5yb3RhdGVCZWZvcmVQcmVFeHRyYWN0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVHJpbSBwaXhlbHMgZnJvbSBhbGwgZWRnZXMgdGhhdCBjb250YWluIHZhbHVlcyBzaW1pbGFyIHRvIHRoZSBnaXZlbiBiYWNrZ3JvdW5kIGNvbG91ciwgd2hpY2ggZGVmYXVsdHMgdG8gdGhhdCBvZiB0aGUgdG9wLWxlZnQgcGl4ZWwuXG4gKlxuICogSW1hZ2VzIHdpdGggYW4gYWxwaGEgY2hhbm5lbCB3aWxsIHVzZSB0aGUgY29tYmluZWQgYm91bmRpbmcgYm94IG9mIGFscGhhIGFuZCBub24tYWxwaGEgY2hhbm5lbHMuXG4gKlxuICogSWYgdGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbiB3b3VsZCB0cmltIGFuIGltYWdlIHRvIG5vdGhpbmcgdGhlbiBubyBjaGFuZ2UgaXMgbWFkZS5cbiAqXG4gKiBUaGUgYGluZm9gIHJlc3BvbnNlIE9iamVjdCB3aWxsIGNvbnRhaW4gYHRyaW1PZmZzZXRMZWZ0YCBhbmQgYHRyaW1PZmZzZXRUb3BgIHByb3BlcnRpZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRyaW0gcGl4ZWxzIHdpdGggYSBjb2xvdXIgc2ltaWxhciB0byB0aGF0IG9mIHRoZSB0b3AtbGVmdCBwaXhlbC5cbiAqIGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAudHJpbSgpXG4gKiAgIC50b0ZpbGUob3V0cHV0KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJpbSBwaXhlbHMgd2l0aCB0aGUgZXhhY3Qgc2FtZSBjb2xvdXIgYXMgdGhhdCBvZiB0aGUgdG9wLWxlZnQgcGl4ZWwuXG4gKiBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLnRyaW0oe1xuICogICAgIHRocmVzaG9sZDogMFxuICogICB9KVxuICogICAudG9GaWxlKG91dHB1dCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFzc3VtZSBpbnB1dCBpcyBsaW5lIGFydCBhbmQgdHJpbSBvbmx5IHBpeGVscyB3aXRoIGEgc2ltaWxhciBjb2xvdXIgdG8gcmVkLlxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC50cmltKHtcbiAqICAgICBiYWNrZ3JvdW5kOiBcIiNGRjAwMDBcIixcbiAqICAgICBsaW5lQXJ0OiB0cnVlXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcmltIGFsbCBcInllbGxvdy1pc2hcIiBwaXhlbHMsIGJlaW5nIG1vcmUgbGVuaWVudCB3aXRoIHRoZSBoaWdoZXIgdGhyZXNob2xkLlxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC50cmltKHtcbiAqICAgICBiYWNrZ3JvdW5kOiBcInllbGxvd1wiLFxuICogICAgIHRocmVzaG9sZDogNDIsXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gW29wdGlvbnMuYmFja2dyb3VuZD0ndG9wLWxlZnQgcGl4ZWwnXSAtIEJhY2tncm91bmQgY29sb3VyLCBwYXJzZWQgYnkgdGhlIFtjb2xvcl0oaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2UvY29sb3IpIG1vZHVsZSwgZGVmYXVsdHMgdG8gdGhhdCBvZiB0aGUgdG9wLWxlZnQgcGl4ZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGhyZXNob2xkPTEwXSAtIEFsbG93ZWQgZGlmZmVyZW5jZSBmcm9tIHRoZSBhYm92ZSBjb2xvdXIsIGEgcG9zaXRpdmUgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5saW5lQXJ0PWZhbHNlXSAtIERvZXMgdGhlIGlucHV0IG1vcmUgY2xvc2VseSByZXNlbWJsZSBsaW5lIGFydCAoZS5nLiB2ZWN0b3IpIHJhdGhlciB0aGFuIGJlaW5nIHBob3RvZ3JhcGhpYz9cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gdHJpbSAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMudHJpbVRocmVzaG9sZCA9IDEwO1xuICBpZiAoaXMuZGVmaW5lZChvcHRpb25zKSkge1xuICAgIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuYmFja2dyb3VuZCkpIHtcbiAgICAgICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG91ck9wdGlvbigndHJpbUJhY2tncm91bmQnLCBvcHRpb25zLmJhY2tncm91bmQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy50aHJlc2hvbGQpKSB7XG4gICAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy50aHJlc2hvbGQpICYmIG9wdGlvbnMudGhyZXNob2xkID49IDApIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudHJpbVRocmVzaG9sZCA9IG9wdGlvbnMudGhyZXNob2xkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGhyZXNob2xkJywgJ3Bvc2l0aXZlIG51bWJlcicsIG9wdGlvbnMudGhyZXNob2xkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5saW5lQXJ0KSkge1xuICAgICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd0cmltTGluZUFydCcsIG9wdGlvbnMubGluZUFydCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndHJpbScsICdvYmplY3QnLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzUm90YXRpb25FeHBlY3RlZCh0aGlzLm9wdGlvbnMpKSB7XG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZUJlZm9yZVByZUV4dHJhY3QgPSB0cnVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIERlY29yYXRlIHRoZSBTaGFycCBwcm90b3R5cGUgd2l0aCByZXNpemUtcmVsYXRlZCBmdW5jdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTaGFycCkge1xuICBPYmplY3QuYXNzaWduKFNoYXJwLnByb3RvdHlwZSwge1xuICAgIHJlc2l6ZSxcbiAgICBleHRlbmQsXG4gICAgZXh0cmFjdCxcbiAgICB0cmltXG4gIH0pO1xuICAvLyBDbGFzcyBhdHRyaWJ1dGVzXG4gIFNoYXJwLmdyYXZpdHkgPSBncmF2aXR5O1xuICBTaGFycC5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICBTaGFycC5rZXJuZWwgPSBrZXJuZWw7XG4gIFNoYXJwLmZpdCA9IGZpdDtcbiAgU2hhcnAucG9zaXRpb24gPSBwb3NpdGlvbjtcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDEzIExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG5cbi8qKlxuICogQmxlbmQgbW9kZXMuXG4gKiBAbWVtYmVyXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBibGVuZCA9IHtcbiAgY2xlYXI6ICdjbGVhcicsXG4gIHNvdXJjZTogJ3NvdXJjZScsXG4gIG92ZXI6ICdvdmVyJyxcbiAgaW46ICdpbicsXG4gIG91dDogJ291dCcsXG4gIGF0b3A6ICdhdG9wJyxcbiAgZGVzdDogJ2Rlc3QnLFxuICAnZGVzdC1vdmVyJzogJ2Rlc3Qtb3ZlcicsXG4gICdkZXN0LWluJzogJ2Rlc3QtaW4nLFxuICAnZGVzdC1vdXQnOiAnZGVzdC1vdXQnLFxuICAnZGVzdC1hdG9wJzogJ2Rlc3QtYXRvcCcsXG4gIHhvcjogJ3hvcicsXG4gIGFkZDogJ2FkZCcsXG4gIHNhdHVyYXRlOiAnc2F0dXJhdGUnLFxuICBtdWx0aXBseTogJ211bHRpcGx5JyxcbiAgc2NyZWVuOiAnc2NyZWVuJyxcbiAgb3ZlcmxheTogJ292ZXJsYXknLFxuICBkYXJrZW46ICdkYXJrZW4nLFxuICBsaWdodGVuOiAnbGlnaHRlbicsXG4gICdjb2xvdXItZG9kZ2UnOiAnY29sb3VyLWRvZGdlJyxcbiAgJ2NvbG9yLWRvZGdlJzogJ2NvbG91ci1kb2RnZScsXG4gICdjb2xvdXItYnVybic6ICdjb2xvdXItYnVybicsXG4gICdjb2xvci1idXJuJzogJ2NvbG91ci1idXJuJyxcbiAgJ2hhcmQtbGlnaHQnOiAnaGFyZC1saWdodCcsXG4gICdzb2Z0LWxpZ2h0JzogJ3NvZnQtbGlnaHQnLFxuICBkaWZmZXJlbmNlOiAnZGlmZmVyZW5jZScsXG4gIGV4Y2x1c2lvbjogJ2V4Y2x1c2lvbidcbn07XG5cbi8qKlxuICogQ29tcG9zaXRlIGltYWdlKHMpIG92ZXIgdGhlIHByb2Nlc3NlZCAocmVzaXplZCwgZXh0cmFjdGVkIGV0Yy4pIGltYWdlLlxuICpcbiAqIFRoZSBpbWFnZXMgdG8gY29tcG9zaXRlIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBvciBzbWFsbGVyIHRoYW4gdGhlIHByb2Nlc3NlZCBpbWFnZS5cbiAqIElmIGJvdGggYHRvcGAgYW5kIGBsZWZ0YCBvcHRpb25zIGFyZSBwcm92aWRlZCwgdGhleSB0YWtlIHByZWNlZGVuY2Ugb3ZlciBgZ3Jhdml0eWAuXG4gKlxuICogQW55IHJlc2l6ZSwgcm90YXRlIG9yIGV4dHJhY3Qgb3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gKiB3aWxsIGFsd2F5cyBiZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBpbWFnZSBiZWZvcmUgY29tcG9zaXRpb24uXG4gKlxuICogVGhlIGBibGVuZGAgb3B0aW9uIGNhbiBiZSBvbmUgb2YgYGNsZWFyYCwgYHNvdXJjZWAsIGBvdmVyYCwgYGluYCwgYG91dGAsIGBhdG9wYCxcbiAqIGBkZXN0YCwgYGRlc3Qtb3ZlcmAsIGBkZXN0LWluYCwgYGRlc3Qtb3V0YCwgYGRlc3QtYXRvcGAsXG4gKiBgeG9yYCwgYGFkZGAsIGBzYXR1cmF0ZWAsIGBtdWx0aXBseWAsIGBzY3JlZW5gLCBgb3ZlcmxheWAsIGBkYXJrZW5gLCBgbGlnaHRlbmAsXG4gKiBgY29sb3VyLWRvZGdlYCwgYGNvbG9yLWRvZGdlYCwgYGNvbG91ci1idXJuYCxgY29sb3ItYnVybmAsXG4gKiBgaGFyZC1saWdodGAsIGBzb2Z0LWxpZ2h0YCwgYGRpZmZlcmVuY2VgLCBgZXhjbHVzaW9uYC5cbiAqXG4gKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IGJsZW5kIG1vZGVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly93d3cubGlidmlwcy5vcmcvQVBJL2N1cnJlbnQvbGlidmlwcy1jb252ZXJzaW9uLmh0bWwjVmlwc0JsZW5kTW9kZVxuICogYW5kIGh0dHBzOi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL29wZXJhdG9ycy9cbiAqXG4gKiBAc2luY2UgMC4yMi4wXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHNoYXJwKGJhY2tncm91bmQpXG4gKiAgIC5jb21wb3NpdGUoW1xuICogICAgIHsgaW5wdXQ6IGxheWVyMSwgZ3Jhdml0eTogJ25vcnRod2VzdCcgfSxcbiAqICAgICB7IGlucHV0OiBsYXllcjIsIGdyYXZpdHk6ICdzb3V0aGVhc3QnIH0sXG4gKiAgIF0pXG4gKiAgIC50b0ZpbGUoJ2NvbWJpbmVkLnBuZycpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycCgnaW5wdXQuZ2lmJywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICogICAuY29tcG9zaXRlKFtcbiAqICAgICB7IGlucHV0OiAnb3ZlcmxheS5wbmcnLCB0aWxlOiB0cnVlLCBibGVuZDogJ3NhdHVyYXRlJyB9XG4gKiAgIF0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBzaGFycCgnaW5wdXQucG5nJylcbiAqICAgLnJvdGF0ZSgxODApXG4gKiAgIC5yZXNpemUoMzAwKVxuICogICAuZmxhdHRlbiggeyBiYWNrZ3JvdW5kOiAnI2ZmNjYwMCcgfSApXG4gKiAgIC5jb21wb3NpdGUoW3sgaW5wdXQ6ICdvdmVybGF5LnBuZycsIGdyYXZpdHk6ICdzb3V0aGVhc3QnIH1dKVxuICogICAuc2hhcnBlbigpXG4gKiAgIC53aXRoTWV0YWRhdGEoKVxuICogICAud2VicCggeyBxdWFsaXR5OiA5MCB9IClcbiAqICAgLnRvQnVmZmVyKClcbiAqICAgLnRoZW4oZnVuY3Rpb24ob3V0cHV0QnVmZmVyKSB7XG4gKiAgICAgLy8gb3V0cHV0QnVmZmVyIGNvbnRhaW5zIHVwc2lkZSBkb3duLCAzMDBweCB3aWRlLCBhbHBoYSBjaGFubmVsIGZsYXR0ZW5lZFxuICogICAgIC8vIG9udG8gb3JhbmdlIGJhY2tncm91bmQsIGNvbXBvc2l0ZWQgd2l0aCBvdmVybGF5LnBuZyB3aXRoIFNFIGdyYXZpdHksXG4gKiAgICAgLy8gc2hhcnBlbmVkLCB3aXRoIG1ldGFkYXRhLCA5MCUgcXVhbGl0eSBXZWJQIGltYWdlIGRhdGEuIFBoZXchXG4gKiAgIH0pO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0W119IGltYWdlcyAtIE9yZGVyZWQgbGlzdCBvZiBpbWFnZXMgdG8gY29tcG9zaXRlXG4gKiBAcGFyYW0ge0J1ZmZlcnxTdHJpbmd9IFtpbWFnZXNbXS5pbnB1dF0gLSBCdWZmZXIgY29udGFpbmluZyBpbWFnZSBkYXRhLCBTdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byBhbiBpbWFnZSBmaWxlLCBvciBDcmVhdGUgb2JqZWN0IChzZWUgYmVsb3cpXG4gKiBAcGFyYW0ge09iamVjdH0gW2ltYWdlc1tdLmlucHV0LmNyZWF0ZV0gLSBkZXNjcmliZXMgYSBibGFuayBvdmVybGF5IHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gW2ltYWdlc1tdLmlucHV0LmNyZWF0ZS53aWR0aF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbaW1hZ2VzW10uaW5wdXQuY3JlYXRlLmhlaWdodF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbaW1hZ2VzW10uaW5wdXQuY3JlYXRlLmNoYW5uZWxzXSAtIDMtNFxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBbaW1hZ2VzW10uaW5wdXQuY3JlYXRlLmJhY2tncm91bmRdIC0gcGFyc2VkIGJ5IHRoZSBbY29sb3JdKGh0dHBzOi8vd3d3Lm5wbWpzLm9yZy9wYWNrYWdlL2NvbG9yKSBtb2R1bGUgdG8gZXh0cmFjdCB2YWx1ZXMgZm9yIHJlZCwgZ3JlZW4sIGJsdWUgYW5kIGFscGhhLlxuICogQHBhcmFtIHtPYmplY3R9IFtpbWFnZXNbXS5pbnB1dC50ZXh0XSAtIGRlc2NyaWJlcyBhIG5ldyB0ZXh0IGltYWdlIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ltYWdlc1tdLmlucHV0LnRleHQudGV4dF0gLSB0ZXh0IHRvIHJlbmRlciBhcyBhIFVURi04IHN0cmluZy4gSXQgY2FuIGNvbnRhaW4gUGFuZ28gbWFya3VwLCBmb3IgZXhhbXBsZSBgPGk+TGU8L2k+TW9uZGVgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbWFnZXNbXS5pbnB1dC50ZXh0LmZvbnRdIC0gZm9udCBuYW1lIHRvIHJlbmRlciB3aXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbWFnZXNbXS5pbnB1dC50ZXh0LmZvbnRmaWxlXSAtIGFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aCB0byBhIGZvbnQgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGBmb250YC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW1hZ2VzW10uaW5wdXQudGV4dC53aWR0aD0wXSAtIGludGVncmFsIG51bWJlciBvZiBwaXhlbHMgdG8gd29yZC13cmFwIGF0LiBMaW5lcyBvZiB0ZXh0IHdpZGVyIHRoYW4gdGhpcyB3aWxsIGJlIGJyb2tlbiBhdCB3b3JkIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ltYWdlc1tdLmlucHV0LnRleHQuaGVpZ2h0PTBdIC0gaW50ZWdyYWwgbnVtYmVyIG9mIHBpeGVscyBoaWdoLiBXaGVuIGRlZmluZWQsIGBkcGlgIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIHRleHQgd2lsbCBhdXRvbWF0aWNhbGx5IGZpdCB0aGUgcGl4ZWwgcmVzb2x1dGlvbiBkZWZpbmVkIGJ5IGB3aWR0aGAgYW5kIGBoZWlnaHRgLiBXaWxsIGJlIGlnbm9yZWQgaWYgYHdpZHRoYCBpcyBub3Qgc3BlY2lmaWVkIG9yIHNldCB0byAwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbWFnZXNbXS5pbnB1dC50ZXh0LmFsaWduPSdsZWZ0J10gLSB0ZXh0IGFsaWdubWVudCAoYCdsZWZ0J2AsIGAnY2VudHJlJ2AsIGAnY2VudGVyJ2AsIGAncmlnaHQnYCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbWFnZXNbXS5pbnB1dC50ZXh0Lmp1c3RpZnk9ZmFsc2VdIC0gc2V0IHRoaXMgdG8gdHJ1ZSB0byBhcHBseSBqdXN0aWZpY2F0aW9uIHRvIHRoZSB0ZXh0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtpbWFnZXNbXS5pbnB1dC50ZXh0LmRwaT03Ml0gLSB0aGUgcmVzb2x1dGlvbiAoc2l6ZSkgYXQgd2hpY2ggdG8gcmVuZGVyIHRoZSB0ZXh0LiBEb2VzIG5vdCB0YWtlIGVmZmVjdCBpZiBgaGVpZ2h0YCBpcyBzcGVjaWZpZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbWFnZXNbXS5pbnB1dC50ZXh0LnJnYmE9ZmFsc2VdIC0gc2V0IHRoaXMgdG8gdHJ1ZSB0byBlbmFibGUgUkdCQSBvdXRwdXQuIFRoaXMgaXMgdXNlZnVsIGZvciBjb2xvdXIgZW1vamkgcmVuZGVyaW5nLCBvciBzdXBwb3J0IGZvciBQYW5nbyBtYXJrdXAgZmVhdHVyZXMgbGlrZSBgPHNwYW4gZm9yZWdyb3VuZD1cInJlZFwiPlJlZCE8L3NwYW4+YC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW1hZ2VzW10uaW5wdXQudGV4dC5zcGFjaW5nPTBdIC0gdGV4dCBsaW5lIGhlaWdodCBpbiBwb2ludHMuIFdpbGwgdXNlIHRoZSBmb250IGxpbmUgaGVpZ2h0IGlmIG5vbmUgaXMgc3BlY2lmaWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IFtpbWFnZXNbXS5ibGVuZD0nb3ZlciddIC0gaG93IHRvIGJsZW5kIHRoaXMgaW1hZ2Ugd2l0aCB0aGUgaW1hZ2UgYmVsb3cuXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ltYWdlc1tdLmdyYXZpdHk9J2NlbnRyZSddIC0gZ3Jhdml0eSBhdCB3aGljaCB0byBwbGFjZSB0aGUgb3ZlcmxheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbaW1hZ2VzW10udG9wXSAtIHRoZSBwaXhlbCBvZmZzZXQgZnJvbSB0aGUgdG9wIGVkZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gW2ltYWdlc1tdLmxlZnRdIC0gdGhlIHBpeGVsIG9mZnNldCBmcm9tIHRoZSBsZWZ0IGVkZ2UuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtpbWFnZXNbXS50aWxlPWZhbHNlXSAtIHNldCB0byB0cnVlIHRvIHJlcGVhdCB0aGUgb3ZlcmxheSBpbWFnZSBhY3Jvc3MgdGhlIGVudGlyZSBpbWFnZSB3aXRoIHRoZSBnaXZlbiBgZ3Jhdml0eWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtpbWFnZXNbXS5wcmVtdWx0aXBsaWVkPWZhbHNlXSAtIHNldCB0byB0cnVlIHRvIGF2b2lkIHByZW11bHRpcGx5aW5nIHRoZSBpbWFnZSBiZWxvdy4gRXF1aXZhbGVudCB0byB0aGUgYC0tcHJlbXVsdGlwbGllZGAgdmlwcyBvcHRpb24uXG4gKiBAcGFyYW0ge051bWJlcn0gW2ltYWdlc1tdLmRlbnNpdHk9NzJdIC0gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgRFBJIGZvciB2ZWN0b3Igb3ZlcmxheSBpbWFnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaW1hZ2VzW10ucmF3XSAtIGRlc2NyaWJlcyBvdmVybGF5IHdoZW4gdXNpbmcgcmF3IHBpeGVsIGRhdGEuXG4gKiBAcGFyYW0ge051bWJlcn0gW2ltYWdlc1tdLnJhdy53aWR0aF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbaW1hZ2VzW10ucmF3LmhlaWdodF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbaW1hZ2VzW10ucmF3LmNoYW5uZWxzXVxuICogQHBhcmFtIHtib29sZWFufSBbaW1hZ2VzW10uYW5pbWF0ZWQ9ZmFsc2VdIC0gU2V0IHRvIGB0cnVlYCB0byByZWFkIGFsbCBmcmFtZXMvcGFnZXMgb2YgYW4gYW5pbWF0ZWQgaW1hZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ltYWdlc1tdLmZhaWxPbj0nd2FybmluZyddIC0gQHNlZSB7QGxpbmsgL2FwaS1jb25zdHJ1Y3RvciNwYXJhbWV0ZXJzfGNvbnN0cnVjdG9yIHBhcmFtZXRlcnN9XG4gKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBbaW1hZ2VzW10ubGltaXRJbnB1dFBpeGVscz0yNjg0MDI2ODldIC0gQHNlZSB7QGxpbmsgL2FwaS1jb25zdHJ1Y3RvciNwYXJhbWV0ZXJzfGNvbnN0cnVjdG9yIHBhcmFtZXRlcnN9XG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2l0ZSAoaW1hZ2VzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShpbWFnZXMpKSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdpbWFnZXMgdG8gY29tcG9zaXRlJywgJ2FycmF5JywgaW1hZ2VzKTtcbiAgfVxuICB0aGlzLm9wdGlvbnMuY29tcG9zaXRlID0gaW1hZ2VzLm1hcChpbWFnZSA9PiB7XG4gICAgaWYgKCFpcy5vYmplY3QoaW1hZ2UpKSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2ltYWdlIHRvIGNvbXBvc2l0ZScsICdvYmplY3QnLCBpbWFnZSk7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0T3B0aW9ucyA9IHRoaXMuX2lucHV0T3B0aW9uc0Zyb21PYmplY3QoaW1hZ2UpO1xuICAgIGNvbnN0IGNvbXBvc2l0ZSA9IHtcbiAgICAgIGlucHV0OiB0aGlzLl9jcmVhdGVJbnB1dERlc2NyaXB0b3IoaW1hZ2UuaW5wdXQsIGlucHV0T3B0aW9ucywgeyBhbGxvd1N0cmVhbTogZmFsc2UgfSksXG4gICAgICBibGVuZDogJ292ZXInLFxuICAgICAgdGlsZTogZmFsc2UsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgaGFzT2Zmc2V0OiBmYWxzZSxcbiAgICAgIGdyYXZpdHk6IDAsXG4gICAgICBwcmVtdWx0aXBsaWVkOiBmYWxzZVxuICAgIH07XG4gICAgaWYgKGlzLmRlZmluZWQoaW1hZ2UuYmxlbmQpKSB7XG4gICAgICBpZiAoaXMuc3RyaW5nKGJsZW5kW2ltYWdlLmJsZW5kXSkpIHtcbiAgICAgICAgY29tcG9zaXRlLmJsZW5kID0gYmxlbmRbaW1hZ2UuYmxlbmRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdibGVuZCcsICd2YWxpZCBibGVuZCBuYW1lJywgaW1hZ2UuYmxlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChpbWFnZS50aWxlKSkge1xuICAgICAgaWYgKGlzLmJvb2woaW1hZ2UudGlsZSkpIHtcbiAgICAgICAgY29tcG9zaXRlLnRpbGUgPSBpbWFnZS50aWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd0aWxlJywgJ2Jvb2xlYW4nLCBpbWFnZS50aWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQoaW1hZ2UubGVmdCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGltYWdlLmxlZnQpKSB7XG4gICAgICAgIGNvbXBvc2l0ZS5sZWZ0ID0gaW1hZ2UubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignbGVmdCcsICdpbnRlZ2VyJywgaW1hZ2UubGVmdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKGltYWdlLnRvcCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGltYWdlLnRvcCkpIHtcbiAgICAgICAgY29tcG9zaXRlLnRvcCA9IGltYWdlLnRvcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndG9wJywgJ2ludGVnZXInLCBpbWFnZS50b3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChpbWFnZS50b3ApICE9PSBpcy5kZWZpbmVkKGltYWdlLmxlZnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJvdGggbGVmdCBhbmQgdG9wIHRvIGJlIHNldCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb3NpdGUuaGFzT2Zmc2V0ID0gaXMuaW50ZWdlcihpbWFnZS50b3ApICYmIGlzLmludGVnZXIoaW1hZ2UubGVmdCk7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKGltYWdlLmdyYXZpdHkpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihpbWFnZS5ncmF2aXR5KSAmJiBpcy5pblJhbmdlKGltYWdlLmdyYXZpdHksIDAsIDgpKSB7XG4gICAgICAgIGNvbXBvc2l0ZS5ncmF2aXR5ID0gaW1hZ2UuZ3Jhdml0eTtcbiAgICAgIH0gZWxzZSBpZiAoaXMuc3RyaW5nKGltYWdlLmdyYXZpdHkpICYmIGlzLmludGVnZXIodGhpcy5jb25zdHJ1Y3Rvci5ncmF2aXR5W2ltYWdlLmdyYXZpdHldKSkge1xuICAgICAgICBjb21wb3NpdGUuZ3Jhdml0eSA9IHRoaXMuY29uc3RydWN0b3IuZ3Jhdml0eVtpbWFnZS5ncmF2aXR5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZ3Jhdml0eScsICd2YWxpZCBncmF2aXR5JywgaW1hZ2UuZ3Jhdml0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKGltYWdlLnByZW11bHRpcGxpZWQpKSB7XG4gICAgICBpZiAoaXMuYm9vbChpbWFnZS5wcmVtdWx0aXBsaWVkKSkge1xuICAgICAgICBjb21wb3NpdGUucHJlbXVsdGlwbGllZCA9IGltYWdlLnByZW11bHRpcGxpZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3ByZW11bHRpcGxpZWQnLCAnYm9vbGVhbicsIGltYWdlLnByZW11bHRpcGxpZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9zaXRlO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogRGVjb3JhdGUgdGhlIFNoYXJwIHByb3RvdHlwZSB3aXRoIGNvbXBvc2l0ZS1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFNoYXJwKSB7XG4gIFNoYXJwLnByb3RvdHlwZS5jb21wb3NpdGUgPSBjb21wb3NpdGU7XG4gIFNoYXJwLmJsZW5kID0gYmxlbmQ7XG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxMyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgnY29sb3InKTtcbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcycpO1xuXG4vKipcbiAqIEhvdyBhY2N1cmF0ZSBhbiBvcGVyYXRpb24gc2hvdWxkIGJlLlxuICogQG1lbWJlclxuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgdmlwc1ByZWNpc2lvbiA9IHtcbiAgaW50ZWdlcjogJ2ludGVnZXInLFxuICBmbG9hdDogJ2Zsb2F0JyxcbiAgYXBwcm94aW1hdGU6ICdhcHByb3hpbWF0ZSdcbn07XG5cbi8qKlxuICogUm90YXRlIHRoZSBvdXRwdXQgaW1hZ2UgYnkgZWl0aGVyIGFuIGV4cGxpY2l0IGFuZ2xlXG4gKiBvciBhdXRvLW9yaWVudCBiYXNlZCBvbiB0aGUgRVhJRiBgT3JpZW50YXRpb25gIHRhZy5cbiAqXG4gKiBJZiBhbiBhbmdsZSBpcyBwcm92aWRlZCwgaXQgaXMgY29udmVydGVkIHRvIGEgdmFsaWQgcG9zaXRpdmUgZGVncmVlIHJvdGF0aW9uLlxuICogRm9yIGV4YW1wbGUsIGAtNDUwYCB3aWxsIHByb2R1Y2UgYSAyNzAgZGVncmVlIHJvdGF0aW9uLlxuICpcbiAqIFdoZW4gcm90YXRpbmcgYnkgYW4gYW5nbGUgb3RoZXIgdGhhbiBhIG11bHRpcGxlIG9mIDkwLFxuICogdGhlIGJhY2tncm91bmQgY29sb3VyIGNhbiBiZSBwcm92aWRlZCB3aXRoIHRoZSBgYmFja2dyb3VuZGAgb3B0aW9uLlxuICpcbiAqIElmIG5vIGFuZ2xlIGlzIHByb3ZpZGVkLCBpdCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIEVYSUYgZGF0YS5cbiAqIE1pcnJvcmluZyBpcyBzdXBwb3J0ZWQgYW5kIG1heSBpbmZlciB0aGUgdXNlIG9mIGEgZmxpcCBvcGVyYXRpb24uXG4gKlxuICogVGhlIHVzZSBvZiBgcm90YXRlYCB3aXRob3V0IGFuIGFuZ2xlIHdpbGwgcmVtb3ZlIHRoZSBFWElGIGBPcmllbnRhdGlvbmAgdGFnLCBpZiBhbnkuXG4gKlxuICogT25seSBvbmUgcm90YXRpb24gY2FuIG9jY3VyIHBlciBwaXBlbGluZS5cbiAqIFByZXZpb3VzIGNhbGxzIHRvIGByb3RhdGVgIGluIHRoZSBzYW1lIHBpcGVsaW5lIHdpbGwgYmUgaWdub3JlZC5cbiAqXG4gKiBNdWx0aS1wYWdlIGltYWdlcyBjYW4gb25seSBiZSByb3RhdGVkIGJ5IDE4MCBkZWdyZWVzLlxuICpcbiAqIE1ldGhvZCBvcmRlciBpcyBpbXBvcnRhbnQgd2hlbiByb3RhdGluZywgcmVzaXppbmcgYW5kL29yIGV4dHJhY3RpbmcgcmVnaW9ucyxcbiAqIGZvciBleGFtcGxlIGAucm90YXRlKHgpLmV4dHJhY3QoeSlgIHdpbGwgcHJvZHVjZSBhIGRpZmZlcmVudCByZXN1bHQgdG8gYC5leHRyYWN0KHkpLnJvdGF0ZSh4KWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHBpcGVsaW5lID0gc2hhcnAoKVxuICogICAucm90YXRlKClcbiAqICAgLnJlc2l6ZShudWxsLCAyMDApXG4gKiAgIC50b0J1ZmZlcihmdW5jdGlvbiAoZXJyLCBvdXRwdXRCdWZmZXIsIGluZm8pIHtcbiAqICAgICAvLyBvdXRwdXRCdWZmZXIgY29udGFpbnMgMjAwcHggaGlnaCBKUEVHIGltYWdlIGRhdGEsXG4gKiAgICAgLy8gYXV0by1yb3RhdGVkIHVzaW5nIEVYSUYgT3JpZW50YXRpb24gdGFnXG4gKiAgICAgLy8gaW5mby53aWR0aCBhbmQgaW5mby5oZWlnaHQgY29udGFpbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVzaXplZCBpbWFnZVxuICogICB9KTtcbiAqIHJlYWRhYmxlU3RyZWFtLnBpcGUocGlwZWxpbmUpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb3RhdGVUaGVuUmVzaXplID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5yb3RhdGUoOTApXG4gKiAgIC5yZXNpemUoeyB3aWR0aDogMTYsIGhlaWdodDogOCwgZml0OiAnZmlsbCcgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKiBjb25zdCByZXNpemVUaGVuUm90YXRlID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5yZXNpemUoeyB3aWR0aDogMTYsIGhlaWdodDogOCwgZml0OiAnZmlsbCcgfSlcbiAqICAgLnJvdGF0ZSg5MClcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFthbmdsZT1hdXRvXSBhbmdsZSBvZiByb3RhdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBpZiBwcmVzZW50LCBpcyBhbiBPYmplY3Qgd2l0aCBvcHRpb25hbCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBbb3B0aW9ucy5iYWNrZ3JvdW5kPVwiIzAwMDAwMFwiXSBwYXJzZWQgYnkgdGhlIFtjb2xvcl0oaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2UvY29sb3IpIG1vZHVsZSB0byBleHRyYWN0IHZhbHVlcyBmb3IgcmVkLCBncmVlbiwgYmx1ZSBhbmQgYWxwaGEuXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJvdGF0ZSAoYW5nbGUsIG9wdGlvbnMpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy51c2VFeGlmT3JpZW50YXRpb24gfHwgdGhpcy5vcHRpb25zLmFuZ2xlIHx8IHRoaXMub3B0aW9ucy5yb3RhdGlvbkFuZ2xlKSB7XG4gICAgdGhpcy5vcHRpb25zLmRlYnVnbG9nKCdpZ25vcmluZyBwcmV2aW91cyByb3RhdGUgb3B0aW9ucycpO1xuICB9XG4gIGlmICghaXMuZGVmaW5lZChhbmdsZSkpIHtcbiAgICB0aGlzLm9wdGlvbnMudXNlRXhpZk9yaWVudGF0aW9uID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpcy5pbnRlZ2VyKGFuZ2xlKSAmJiAhKGFuZ2xlICUgOTApKSB7XG4gICAgdGhpcy5vcHRpb25zLmFuZ2xlID0gYW5nbGU7XG4gIH0gZWxzZSBpZiAoaXMubnVtYmVyKGFuZ2xlKSkge1xuICAgIHRoaXMub3B0aW9ucy5yb3RhdGlvbkFuZ2xlID0gYW5nbGU7XG4gICAgaWYgKGlzLm9iamVjdChvcHRpb25zKSAmJiBvcHRpb25zLmJhY2tncm91bmQpIHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSBjb2xvcihvcHRpb25zLmJhY2tncm91bmQpO1xuICAgICAgdGhpcy5vcHRpb25zLnJvdGF0aW9uQmFja2dyb3VuZCA9IFtcbiAgICAgICAgYmFja2dyb3VuZENvbG91ci5yZWQoKSxcbiAgICAgICAgYmFja2dyb3VuZENvbG91ci5ncmVlbigpLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3VyLmJsdWUoKSxcbiAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kQ29sb3VyLmFscGhhKCkgKiAyNTUpXG4gICAgICBdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2FuZ2xlJywgJ251bWVyaWMnLCBhbmdsZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogTWlycm9yIHRoZSBpbWFnZSB2ZXJ0aWNhbGx5ICh1cC1kb3duKSBhYm91dCB0aGUgeC1heGlzLlxuICogVGhpcyBhbHdheXMgb2NjdXJzIGJlZm9yZSByb3RhdGlvbiwgaWYgYW55LlxuICpcbiAqIFRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggbXVsdGktcGFnZSBpbWFnZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNoYXJwKGlucHV0KS5mbGlwKCkudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtmbGlwPXRydWVdXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKi9cbmZ1bmN0aW9uIGZsaXAgKGZsaXApIHtcbiAgdGhpcy5vcHRpb25zLmZsaXAgPSBpcy5ib29sKGZsaXApID8gZmxpcCA6IHRydWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIE1pcnJvciB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5IChsZWZ0LXJpZ2h0KSBhYm91dCB0aGUgeS1heGlzLlxuICogVGhpcyBhbHdheXMgb2NjdXJzIGJlZm9yZSByb3RhdGlvbiwgaWYgYW55LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dCkuZmxvcCgpLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbZmxvcD10cnVlXVxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiBmbG9wIChmbG9wKSB7XG4gIHRoaXMub3B0aW9ucy5mbG9wID0gaXMuYm9vbChmbG9wKSA/IGZsb3AgOiB0cnVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGFuIGFmZmluZSB0cmFuc2Zvcm0gb24gYW4gaW1hZ2UuIFRoaXMgb3BlcmF0aW9uIHdpbGwgYWx3YXlzIG9jY3VyIGFmdGVyIHJlc2l6aW5nLCBleHRyYWN0aW9uIGFuZCByb3RhdGlvbiwgaWYgYW55LlxuICpcbiAqIFlvdSBtdXN0IHByb3ZpZGUgYW4gYXJyYXkgb2YgbGVuZ3RoIDQgb3IgYSAyeDIgYWZmaW5lIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC5cbiAqIEJ5IGRlZmF1bHQsIG5ldyBwaXhlbHMgYXJlIGZpbGxlZCB3aXRoIGEgYmxhY2sgYmFja2dyb3VuZC4gWW91IGNhbiBwcm92aWRlIGEgYmFja2dyb3VuZCBjb2xvciB3aXRoIHRoZSBgYmFja2dyb3VuZGAgb3B0aW9uLlxuICogQSBwYXJ0aWN1bGFyIGludGVycG9sYXRvciBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIFNldCB0aGUgYGludGVycG9sYXRvcmAgb3B0aW9uIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUgYHNoYXJwLmludGVycG9sYXRvcnNgIE9iamVjdCBlLmcuIGBzaGFycC5pbnRlcnBvbGF0b3JzLm5vaGFsb2AuXG4gKlxuICogSW4gdGhlIGNhc2Ugb2YgYSAyeDIgbWF0cml4LCB0aGUgdHJhbnNmb3JtIGlzOlxuICogLSBYID0gYG1hdHJpeFswLCAwXWAgXFwqICh4ICsgYGlkeGApICsgYG1hdHJpeFswLCAxXWAgXFwqICh5ICsgYGlkeWApICsgYG9keGBcbiAqIC0gWSA9IGBtYXRyaXhbMSwgMF1gIFxcKiAoeCArIGBpZHhgKSArIGBtYXRyaXhbMSwgMV1gIFxcKiAoeSArIGBpZHlgKSArIGBvZHlgXG4gKlxuICogd2hlcmU6XG4gKiAtIHggYW5kIHkgYXJlIHRoZSBjb29yZGluYXRlcyBpbiBpbnB1dCBpbWFnZS5cbiAqIC0gWCBhbmQgWSBhcmUgdGhlIGNvb3JkaW5hdGVzIGluIG91dHB1dCBpbWFnZS5cbiAqIC0gKDAsMCkgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyLlxuICpcbiAqIEBzaW5jZSAwLjI3LjBcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGlwZWxpbmUgPSBzaGFycCgpXG4gKiAgIC5hZmZpbmUoW1sxLCAwLjNdLCBbMC4xLCAwLjddXSwge1xuICogICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxuICogICAgICBpbnRlcnBvbGF0b3I6IHNoYXJwLmludGVycG9sYXRvcnMubm9oYWxvXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigoZXJyLCBvdXRwdXRCdWZmZXIsIGluZm8pID0+IHtcbiAqICAgICAgLy8gb3V0cHV0QnVmZmVyIGNvbnRhaW5zIHRoZSB0cmFuc2Zvcm1lZCBpbWFnZVxuICogICAgICAvLyBpbmZvLndpZHRoIGFuZCBpbmZvLmhlaWdodCBjb250YWluIHRoZSBuZXcgZGltZW5zaW9uc1xuICogICB9KTtcbiAqXG4gKiBpbnB1dFN0cmVhbVxuICogICAucGlwZShwaXBlbGluZSk7XG4gKlxuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+PnxBcnJheTxudW1iZXI+fSBtYXRyaXggLSBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gaWYgcHJlc2VudCwgaXMgYW4gT2JqZWN0IHdpdGggb3B0aW9uYWwgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gW29wdGlvbnMuYmFja2dyb3VuZD1cIiMwMDAwMDBcIl0gLSBwYXJzZWQgYnkgdGhlIFtjb2xvcl0oaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2UvY29sb3IpIG1vZHVsZSB0byBleHRyYWN0IHZhbHVlcyBmb3IgcmVkLCBncmVlbiwgYmx1ZSBhbmQgYWxwaGEuXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuaWR4PTBdIC0gaW5wdXQgaG9yaXpvbnRhbCBvZmZzZXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5pZHk9MF0gLSBpbnB1dCB2ZXJ0aWNhbCBvZmZzZXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5vZHg9MF0gLSBvdXRwdXQgaG9yaXpvbnRhbCBvZmZzZXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5vZHk9MF0gLSBvdXRwdXQgdmVydGljYWwgb2Zmc2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaW50ZXJwb2xhdG9yPXNoYXJwLmludGVycG9sYXRvcnMuYmljdWJpY10gLSBpbnRlcnBvbGF0b3JcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gYWZmaW5lIChtYXRyaXgsIG9wdGlvbnMpIHtcbiAgY29uc3QgZmxhdE1hdHJpeCA9IFtdLmNvbmNhdCguLi5tYXRyaXgpO1xuICBpZiAoZmxhdE1hdHJpeC5sZW5ndGggPT09IDQgJiYgZmxhdE1hdHJpeC5ldmVyeShpcy5udW1iZXIpKSB7XG4gICAgdGhpcy5vcHRpb25zLmFmZmluZU1hdHJpeCA9IGZsYXRNYXRyaXg7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdtYXRyaXgnLCAnMXg0IG9yIDJ4MiBhcnJheScsIG1hdHJpeCk7XG4gIH1cblxuICBpZiAoaXMuZGVmaW5lZChvcHRpb25zKSkge1xuICAgIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvdXJPcHRpb24oJ2FmZmluZUJhY2tncm91bmQnLCBvcHRpb25zLmJhY2tncm91bmQpO1xuICAgICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5pZHgpKSB7XG4gICAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5pZHgpKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFmZmluZUlkeCA9IG9wdGlvbnMuaWR4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3B0aW9ucy5pZHgnLCAnbnVtYmVyJywgb3B0aW9ucy5pZHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmlkeSkpIHtcbiAgICAgICAgaWYgKGlzLm51bWJlcihvcHRpb25zLmlkeSkpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYWZmaW5lSWR5ID0gb3B0aW9ucy5pZHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdvcHRpb25zLmlkeScsICdudW1iZXInLCBvcHRpb25zLmlkeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMub2R4KSkge1xuICAgICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMub2R4KSkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5hZmZpbmVPZHggPSBvcHRpb25zLm9keDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMub2R4JywgJ251bWJlcicsIG9wdGlvbnMub2R4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5vZHkpKSB7XG4gICAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5vZHkpKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFmZmluZU9keSA9IG9wdGlvbnMub2R5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3B0aW9ucy5vZHknLCAnbnVtYmVyJywgb3B0aW9ucy5vZHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmludGVycG9sYXRvcikpIHtcbiAgICAgICAgaWYgKGlzLmluQXJyYXkob3B0aW9ucy5pbnRlcnBvbGF0b3IsIE9iamVjdC52YWx1ZXModGhpcy5jb25zdHJ1Y3Rvci5pbnRlcnBvbGF0b3JzKSkpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYWZmaW5lSW50ZXJwb2xhdG9yID0gb3B0aW9ucy5pbnRlcnBvbGF0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdvcHRpb25zLmludGVycG9sYXRvcicsICd2YWxpZCBpbnRlcnBvbGF0b3IgbmFtZScsIG9wdGlvbnMuaW50ZXJwb2xhdG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMnLCAnb2JqZWN0Jywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogU2hhcnBlbiB0aGUgaW1hZ2UuXG4gKlxuICogV2hlbiB1c2VkIHdpdGhvdXQgcGFyYW1ldGVycywgcGVyZm9ybXMgYSBmYXN0LCBtaWxkIHNoYXJwZW4gb2YgdGhlIG91dHB1dCBpbWFnZS5cbiAqXG4gKiBXaGVuIGEgYHNpZ21hYCBpcyBwcm92aWRlZCwgcGVyZm9ybXMgYSBzbG93ZXIsIG1vcmUgYWNjdXJhdGUgc2hhcnBlbiBvZiB0aGUgTCBjaGFubmVsIGluIHRoZSBMQUIgY29sb3VyIHNwYWNlLlxuICogRmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgbGV2ZWwgb2Ygc2hhcnBlbmluZyBpbiBcImZsYXRcIiAobTEpIGFuZCBcImphZ2dlZFwiIChtMikgYXJlYXMgaXMgYXZhaWxhYmxlLlxuICpcbiAqIFNlZSB7QGxpbmsgaHR0cHM6Ly93d3cubGlidmlwcy5vcmcvQVBJL2N1cnJlbnQvbGlidmlwcy1jb252b2x1dGlvbi5odG1sI3ZpcHMtc2hhcnBlbnxsaWJ2aXBzIHNoYXJwZW59IG9wZXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KS5zaGFycGVuKCkudG9CdWZmZXIoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KS5zaGFycGVuKHsgc2lnbWE6IDIgfSkudG9CdWZmZXIoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAuc2hhcnBlbih7XG4gKiAgICAgc2lnbWE6IDIsXG4gKiAgICAgbTE6IDAsXG4gKiAgICAgbTI6IDMsXG4gKiAgICAgeDE6IDMsXG4gKiAgICAgeTI6IDE1LFxuICogICAgIHkzOiAxNSxcbiAqICAgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0aW9uc10gLSBpZiBwcmVzZW50LCBpcyBhbiBPYmplY3Qgd2l0aCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2lnbWFdIC0gdGhlIHNpZ21hIG9mIHRoZSBHYXVzc2lhbiBtYXNrLCB3aGVyZSBgc2lnbWEgPSAxICsgcmFkaXVzIC8gMmAsIGJldHdlZW4gMC4wMDAwMDEgYW5kIDEwXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubTE9MS4wXSAtIHRoZSBsZXZlbCBvZiBzaGFycGVuaW5nIHRvIGFwcGx5IHRvIFwiZmxhdFwiIGFyZWFzLCBiZXR3ZWVuIDAgYW5kIDEwMDAwMDBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tMj0yLjBdIC0gdGhlIGxldmVsIG9mIHNoYXJwZW5pbmcgdG8gYXBwbHkgdG8gXCJqYWdnZWRcIiBhcmVhcywgYmV0d2VlbiAwIGFuZCAxMDAwMDAwXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMueDE9Mi4wXSAtIHRocmVzaG9sZCBiZXR3ZWVuIFwiZmxhdFwiIGFuZCBcImphZ2dlZFwiLCBiZXR3ZWVuIDAgYW5kIDEwMDAwMDBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy55Mj0xMC4wXSAtIG1heGltdW0gYW1vdW50IG9mIGJyaWdodGVuaW5nLCBiZXR3ZWVuIDAgYW5kIDEwMDAwMDBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy55Mz0yMC4wXSAtIG1heGltdW0gYW1vdW50IG9mIGRhcmtlbmluZywgYmV0d2VlbiAwIGFuZCAxMDAwMDAwXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZsYXRdIC0gKGRlcHJlY2F0ZWQpIHNlZSBgb3B0aW9ucy5tMWAuXG4gKiBAcGFyYW0ge251bWJlcn0gW2phZ2dlZF0gLSAoZGVwcmVjYXRlZCkgc2VlIGBvcHRpb25zLm0yYC5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gc2hhcnBlbiAob3B0aW9ucywgZmxhdCwgamFnZ2VkKSB7XG4gIGlmICghaXMuZGVmaW5lZChvcHRpb25zKSkge1xuICAgIC8vIE5vIGFyZ3VtZW50czogZGVmYXVsdCB0byBtaWxkIHNoYXJwZW5cbiAgICB0aGlzLm9wdGlvbnMuc2hhcnBlblNpZ21hID0gLTE7XG4gIH0gZWxzZSBpZiAoaXMuYm9vbChvcHRpb25zKSkge1xuICAgIC8vIERlcHJlY2F0ZWQgYm9vbGVhbiBhcmd1bWVudDogYXBwbHkgbWlsZCBzaGFycGVuP1xuICAgIHRoaXMub3B0aW9ucy5zaGFycGVuU2lnbWEgPSBvcHRpb25zID8gLTEgOiAwO1xuICB9IGVsc2UgaWYgKGlzLm51bWJlcihvcHRpb25zKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMsIDAuMDEsIDEwMDAwKSkge1xuICAgIC8vIERlcHJlY2F0ZWQgbnVtZXJpYyBhcmd1bWVudDogc3BlY2lmaWMgc2lnbWFcbiAgICB0aGlzLm9wdGlvbnMuc2hhcnBlblNpZ21hID0gb3B0aW9ucztcbiAgICAvLyBEZXByZWNhdGVkIGNvbnRyb2wgb3ZlciBmbGF0IGFyZWFzXG4gICAgaWYgKGlzLmRlZmluZWQoZmxhdCkpIHtcbiAgICAgIGlmIChpcy5udW1iZXIoZmxhdCkgJiYgaXMuaW5SYW5nZShmbGF0LCAwLCAxMDAwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnNoYXJwZW5NMSA9IGZsYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2ZsYXQnLCAnbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwMDAnLCBmbGF0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRGVwcmVjYXRlZCBjb250cm9sIG92ZXIgamFnZ2VkIGFyZWFzXG4gICAgaWYgKGlzLmRlZmluZWQoamFnZ2VkKSkge1xuICAgICAgaWYgKGlzLm51bWJlcihqYWdnZWQpICYmIGlzLmluUmFuZ2UoamFnZ2VkLCAwLCAxMDAwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnNoYXJwZW5NMiA9IGphZ2dlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignamFnZ2VkJywgJ251bWJlciBiZXR3ZWVuIDAgYW5kIDEwMDAwJywgamFnZ2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXMucGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMuc2lnbWEpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5zaWdtYSwgMC4wMDAwMDEsIDEwKSkge1xuICAgICAgdGhpcy5vcHRpb25zLnNoYXJwZW5TaWdtYSA9IG9wdGlvbnMuc2lnbWE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3B0aW9ucy5zaWdtYScsICdudW1iZXIgYmV0d2VlbiAwLjAwMDAwMSBhbmQgMTAnLCBvcHRpb25zLnNpZ21hKTtcbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5tMSkpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5tMSkgJiYgaXMuaW5SYW5nZShvcHRpb25zLm0xLCAwLCAxMDAwMDAwKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2hhcnBlbk0xID0gb3B0aW9ucy5tMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3B0aW9ucy5tMScsICdudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAwMDAwJywgb3B0aW9ucy5tMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMubTIpKSB7XG4gICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMubTIpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5tMiwgMCwgMTAwMDAwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnNoYXJwZW5NMiA9IG9wdGlvbnMubTI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMubTInLCAnbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwMDAwMCcsIG9wdGlvbnMubTIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLngxKSkge1xuICAgICAgaWYgKGlzLm51bWJlcihvcHRpb25zLngxKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMueDEsIDAsIDEwMDAwMDApKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFycGVuWDEgPSBvcHRpb25zLngxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdvcHRpb25zLngxJywgJ251bWJlciBiZXR3ZWVuIDAgYW5kIDEwMDAwMDAnLCBvcHRpb25zLngxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy55MikpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy55MikgJiYgaXMuaW5SYW5nZShvcHRpb25zLnkyLCAwLCAxMDAwMDAwKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2hhcnBlblkyID0gb3B0aW9ucy55MjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3B0aW9ucy55MicsICdudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAwMDAwJywgb3B0aW9ucy55Mik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMueTMpKSB7XG4gICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMueTMpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy55MywgMCwgMTAwMDAwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnNoYXJwZW5ZMyA9IG9wdGlvbnMueTM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMueTMnLCAnbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwMDAwMCcsIG9wdGlvbnMueTMpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3NpZ21hJywgJ251bWJlciBiZXR3ZWVuIDAuMDEgYW5kIDEwMDAwJywgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQXBwbHkgbWVkaWFuIGZpbHRlci5cbiAqIFdoZW4gdXNlZCB3aXRob3V0IHBhcmFtZXRlcnMgdGhlIGRlZmF1bHQgd2luZG93IGlzIDN4My5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpLm1lZGlhbigpLnRvQnVmZmVyKCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNoYXJwKGlucHV0KS5tZWRpYW4oNSkudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9M10gc3F1YXJlIG1hc2sgc2l6ZTogc2l6ZSB4IHNpemVcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gbWVkaWFuIChzaXplKSB7XG4gIGlmICghaXMuZGVmaW5lZChzaXplKSkge1xuICAgIC8vIE5vIGFyZ3VtZW50czogZGVmYXVsdCB0byAzeDNcbiAgICB0aGlzLm9wdGlvbnMubWVkaWFuU2l6ZSA9IDM7XG4gIH0gZWxzZSBpZiAoaXMuaW50ZWdlcihzaXplKSAmJiBpcy5pblJhbmdlKHNpemUsIDEsIDEwMDApKSB7XG4gICAgLy8gTnVtZXJpYyBhcmd1bWVudDogc3BlY2lmaWMgc2lnbWFcbiAgICB0aGlzLm9wdGlvbnMubWVkaWFuU2l6ZSA9IHNpemU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdzaXplJywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDAwJywgc2l6ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQmx1ciB0aGUgaW1hZ2UuXG4gKlxuICogV2hlbiB1c2VkIHdpdGhvdXQgcGFyYW1ldGVycywgcGVyZm9ybXMgYSBmYXN0IDN4MyBib3ggYmx1ciAoZXF1aXZhbGVudCB0byBhIGJveCBsaW5lYXIgZmlsdGVyKS5cbiAqXG4gKiBXaGVuIGEgYHNpZ21hYCBpcyBwcm92aWRlZCwgcGVyZm9ybXMgYSBzbG93ZXIsIG1vcmUgYWNjdXJhdGUgR2F1c3NpYW4gYmx1ci5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYm94Qmx1cnJlZCA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAuYmx1cigpXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBnYXVzc2lhbkJsdXJyZWQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLmJsdXIoNSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfEJvb2xlYW59IFtvcHRpb25zXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNpZ21hXSBhIHZhbHVlIGJldHdlZW4gMC4zIGFuZCAxMDAwIHJlcHJlc2VudGluZyB0aGUgc2lnbWEgb2YgdGhlIEdhdXNzaWFuIG1hc2ssIHdoZXJlIGBzaWdtYSA9IDEgKyByYWRpdXMgLyAyYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5wcmVjaXNpb249J2ludGVnZXInXSBIb3cgYWNjdXJhdGUgdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUsIG9uZSBvZjogaW50ZWdlciwgZmxvYXQsIGFwcHJveGltYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbkFtcGxpdHVkZT0wLjJdIEEgdmFsdWUgYmV0d2VlbiAwLjAwMSBhbmQgMS4gQSBzbWFsbGVyIHZhbHVlIHdpbGwgZ2VuZXJhdGUgYSBsYXJnZXIsIG1vcmUgYWNjdXJhdGUgbWFzay5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gYmx1ciAob3B0aW9ucykge1xuICBsZXQgc2lnbWE7XG4gIGlmIChpcy5udW1iZXIob3B0aW9ucykpIHtcbiAgICBzaWdtYSA9IG9wdGlvbnM7XG4gIH0gZWxzZSBpZiAoaXMucGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICBpZiAoIWlzLm51bWJlcihvcHRpb25zLnNpZ21hKSkge1xuICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdvcHRpb25zLnNpZ21hJywgJ251bWJlciBiZXR3ZWVuIDAuMyBhbmQgMTAwMCcsIHNpZ21hKTtcbiAgICB9XG4gICAgc2lnbWEgPSBvcHRpb25zLnNpZ21hO1xuICAgIGlmICgncHJlY2lzaW9uJyBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoaXMuc3RyaW5nKHZpcHNQcmVjaXNpb25bb3B0aW9ucy5wcmVjaXNpb25dKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMucHJlY2lzaW9uID0gdmlwc1ByZWNpc2lvbltvcHRpb25zLnByZWNpc2lvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3ByZWNpc2lvbicsICdvbmUgb2Y6IGludGVnZXIsIGZsb2F0LCBhcHByb3hpbWF0ZScsIG9wdGlvbnMucHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdtaW5BbXBsaXR1ZGUnIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5taW5BbXBsaXR1ZGUpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5taW5BbXBsaXR1ZGUsIDAuMDAxLCAxKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubWluQW1wbCA9IG9wdGlvbnMubWluQW1wbGl0dWRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdtaW5BbXBsaXR1ZGUnLCAnbnVtYmVyIGJldHdlZW4gMC4wMDEgYW5kIDEnLCBvcHRpb25zLm1pbkFtcGxpdHVkZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpcy5kZWZpbmVkKG9wdGlvbnMpKSB7XG4gICAgLy8gTm8gYXJndW1lbnRzOiBkZWZhdWx0IHRvIG1pbGQgYmx1clxuICAgIHRoaXMub3B0aW9ucy5ibHVyU2lnbWEgPSAtMTtcbiAgfSBlbHNlIGlmIChpcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgLy8gQm9vbGVhbiBhcmd1bWVudDogYXBwbHkgbWlsZCBibHVyP1xuICAgIHRoaXMub3B0aW9ucy5ibHVyU2lnbWEgPSBvcHRpb25zID8gLTEgOiAwO1xuICB9IGVsc2UgaWYgKGlzLm51bWJlcihzaWdtYSkgJiYgaXMuaW5SYW5nZShzaWdtYSwgMC4zLCAxMDAwKSkge1xuICAgIC8vIE51bWVyaWMgYXJndW1lbnQ6IHNwZWNpZmljIHNpZ21hXG4gICAgdGhpcy5vcHRpb25zLmJsdXJTaWdtYSA9IHNpZ21hO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignc2lnbWEnLCAnbnVtYmVyIGJldHdlZW4gMC4zIGFuZCAxMDAwJywgc2lnbWEpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogTWVyZ2UgYWxwaGEgdHJhbnNwYXJlbmN5IGNoYW5uZWwsIGlmIGFueSwgd2l0aCBhIGJhY2tncm91bmQsIHRoZW4gcmVtb3ZlIHRoZSBhbHBoYSBjaGFubmVsLlxuICpcbiAqIFNlZSBhbHNvIHtAbGluayAvYXBpLWNoYW5uZWwjcmVtb3ZlYWxwaGF8cmVtb3ZlQWxwaGF9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBhd2FpdCBzaGFycChyZ2JhSW5wdXQpXG4gKiAgIC5mbGF0dGVuKHsgYmFja2dyb3VuZDogJyNGMEE3MDMnIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gW29wdGlvbnMuYmFja2dyb3VuZD17cjogMCwgZzogMCwgYjogMH1dIC0gYmFja2dyb3VuZCBjb2xvdXIsIHBhcnNlZCBieSB0aGUgW2NvbG9yXShodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9jb2xvcikgbW9kdWxlLCBkZWZhdWx0cyB0byBibGFjay5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbiAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMuZmxhdHRlbiA9IGlzLmJvb2wob3B0aW9ucykgPyBvcHRpb25zIDogdHJ1ZTtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvdXJPcHRpb24oJ2ZsYXR0ZW5CYWNrZ3JvdW5kJywgb3B0aW9ucy5iYWNrZ3JvdW5kKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhlIGltYWdlIGhhcyBhbiBhbHBoYSBjaGFubmVsXG4gKiB3aXRoIGFsbCB3aGl0ZSBwaXhlbCB2YWx1ZXMgbWFkZSBmdWxseSB0cmFuc3BhcmVudC5cbiAqXG4gKiBFeGlzdGluZyBhbHBoYSBjaGFubmVsIHZhbHVlcyBmb3Igbm9uLXdoaXRlIHBpeGVscyByZW1haW4gdW5jaGFuZ2VkLlxuICpcbiAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgbWF5IGNoYW5nZS5cbiAqXG4gKiBAc2luY2UgMC4zMi4xXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHNoYXJwKHJnYklucHV0KVxuICogICAudW5mbGF0dGVuKClcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHNoYXJwKHJnYklucHV0KVxuICogICAudGhyZXNob2xkKDEyOCwgeyBncmF5c2NhbGU6IGZhbHNlIH0pIC8vIGNvbnZlcnRlciBicmlnaHQgcGl4ZWxzIHRvIHdoaXRlXG4gKiAgIC51bmZsYXR0ZW4oKVxuICogICAudG9CdWZmZXIoKTtcbiAqL1xuZnVuY3Rpb24gdW5mbGF0dGVuICgpIHtcbiAgdGhpcy5vcHRpb25zLnVuZmxhdHRlbiA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZ2FtbWEgY29ycmVjdGlvbiBieSByZWR1Y2luZyB0aGUgZW5jb2RpbmcgKGRhcmtlbikgcHJlLXJlc2l6ZSBhdCBhIGZhY3RvciBvZiBgMS9nYW1tYWBcbiAqIHRoZW4gaW5jcmVhc2luZyB0aGUgZW5jb2RpbmcgKGJyaWdodGVuKSBwb3N0LXJlc2l6ZSBhdCBhIGZhY3RvciBvZiBgZ2FtbWFgLlxuICogVGhpcyBjYW4gaW1wcm92ZSB0aGUgcGVyY2VpdmVkIGJyaWdodG5lc3Mgb2YgYSByZXNpemVkIGltYWdlIGluIG5vbi1saW5lYXIgY29sb3VyIHNwYWNlcy5cbiAqIEpQRUcgYW5kIFdlYlAgaW5wdXQgaW1hZ2VzIHdpbGwgbm90IHRha2UgYWR2YW50YWdlIG9mIHRoZSBzaHJpbmstb24tbG9hZCBwZXJmb3JtYW5jZSBvcHRpbWlzYXRpb25cbiAqIHdoZW4gYXBwbHlpbmcgYSBnYW1tYSBjb3JyZWN0aW9uLlxuICpcbiAqIFN1cHBseSBhIHNlY29uZCBhcmd1bWVudCB0byB1c2UgYSBkaWZmZXJlbnQgb3V0cHV0IGdhbW1hIHZhbHVlLCBvdGhlcndpc2UgdGhlIGZpcnN0IHZhbHVlIGlzIHVzZWQgaW4gYm90aCBjYXNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2dhbW1hPTIuMl0gdmFsdWUgYmV0d2VlbiAxLjAgYW5kIDMuMC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWFPdXRdIHZhbHVlIGJldHdlZW4gMS4wIGFuZCAzLjAuIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gc2FtZSBhcyBgZ2FtbWFgKVxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBnYW1tYSAoZ2FtbWEsIGdhbW1hT3V0KSB7XG4gIGlmICghaXMuZGVmaW5lZChnYW1tYSkpIHtcbiAgICAvLyBEZWZhdWx0IGdhbW1hIGNvcnJlY3Rpb24gb2YgMi4yIChzUkdCKVxuICAgIHRoaXMub3B0aW9ucy5nYW1tYSA9IDIuMjtcbiAgfSBlbHNlIGlmIChpcy5udW1iZXIoZ2FtbWEpICYmIGlzLmluUmFuZ2UoZ2FtbWEsIDEsIDMpKSB7XG4gICAgdGhpcy5vcHRpb25zLmdhbW1hID0gZ2FtbWE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdnYW1tYScsICdudW1iZXIgYmV0d2VlbiAxLjAgYW5kIDMuMCcsIGdhbW1hKTtcbiAgfVxuICBpZiAoIWlzLmRlZmluZWQoZ2FtbWFPdXQpKSB7XG4gICAgLy8gRGVmYXVsdCBnYW1tYSBjb3JyZWN0aW9uIGZvciBvdXRwdXQgaXMgc2FtZSBhcyBpbnB1dFxuICAgIHRoaXMub3B0aW9ucy5nYW1tYU91dCA9IHRoaXMub3B0aW9ucy5nYW1tYTtcbiAgfSBlbHNlIGlmIChpcy5udW1iZXIoZ2FtbWFPdXQpICYmIGlzLmluUmFuZ2UoZ2FtbWFPdXQsIDEsIDMpKSB7XG4gICAgdGhpcy5vcHRpb25zLmdhbW1hT3V0ID0gZ2FtbWFPdXQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdnYW1tYU91dCcsICdudW1iZXIgYmV0d2VlbiAxLjAgYW5kIDMuMCcsIGdhbW1hT3V0KTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBQcm9kdWNlIHRoZSBcIm5lZ2F0aXZlXCIgb2YgdGhlIGltYWdlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLm5lZ2F0ZSgpXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLm5lZ2F0ZSh7IGFscGhhOiBmYWxzZSB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFscGhhPXRydWVdIFdoZXRoZXIgb3Igbm90IHRvIG5lZ2F0ZSBhbnkgYWxwaGEgY2hhbm5lbFxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiBuZWdhdGUgKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zLm5lZ2F0ZSA9IGlzLmJvb2wob3B0aW9ucykgPyBvcHRpb25zIDogdHJ1ZTtcbiAgaWYgKGlzLnBsYWluT2JqZWN0KG9wdGlvbnMpICYmICdhbHBoYScgaW4gb3B0aW9ucykge1xuICAgIGlmICghaXMuYm9vbChvcHRpb25zLmFscGhhKSkge1xuICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdhbHBoYScsICdzaG91bGQgYmUgYm9vbGVhbiB2YWx1ZScsIG9wdGlvbnMuYWxwaGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMubmVnYXRlQWxwaGEgPSBvcHRpb25zLmFscGhhO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBFbmhhbmNlIG91dHB1dCBpbWFnZSBjb250cmFzdCBieSBzdHJldGNoaW5nIGl0cyBsdW1pbmFuY2UgdG8gY292ZXIgYSBmdWxsIGR5bmFtaWMgcmFuZ2UuXG4gKlxuICogVXNlcyBhIGhpc3RvZ3JhbS1iYXNlZCBhcHByb2FjaCwgdGFraW5nIGEgZGVmYXVsdCByYW5nZSBvZiAxJSB0byA5OSUgdG8gcmVkdWNlIHNlbnNpdGl2aXR5IHRvIG5vaXNlIGF0IHRoZSBleHRyZW1lcy5cbiAqXG4gKiBMdW1pbmFuY2UgdmFsdWVzIGJlbG93IHRoZSBgbG93ZXJgIHBlcmNlbnRpbGUgd2lsbCBiZSB1bmRlcmV4cG9zZWQgYnkgY2xpcHBpbmcgdG8gemVyby5cbiAqIEx1bWluYW5jZSB2YWx1ZXMgYWJvdmUgdGhlIGB1cHBlcmAgcGVyY2VudGlsZSB3aWxsIGJlIG92ZXJleHBvc2VkIGJ5IGNsaXBwaW5nIHRvIHRoZSBtYXggcGl4ZWwgdmFsdWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAubm9ybWFsaXNlKClcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAubm9ybWFsaXNlKHsgbG93ZXI6IDAsIHVwcGVyOiAxMDAgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvd2VyPTFdIC0gUGVyY2VudGlsZSBiZWxvdyB3aGljaCBsdW1pbmFuY2UgdmFsdWVzIHdpbGwgYmUgdW5kZXJleHBvc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnVwcGVyPTk5XSAtIFBlcmNlbnRpbGUgYWJvdmUgd2hpY2ggbHVtaW5hbmNlIHZhbHVlcyB3aWxsIGJlIG92ZXJleHBvc2VkLlxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiBub3JtYWxpc2UgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLnBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5sb3dlcikpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5sb3dlcikgJiYgaXMuaW5SYW5nZShvcHRpb25zLmxvd2VyLCAwLCA5OSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vcm1hbGlzZUxvd2VyID0gb3B0aW9ucy5sb3dlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignbG93ZXInLCAnbnVtYmVyIGJldHdlZW4gMCBhbmQgOTknLCBvcHRpb25zLmxvd2VyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy51cHBlcikpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy51cHBlcikgJiYgaXMuaW5SYW5nZShvcHRpb25zLnVwcGVyLCAxLCAxMDApKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ub3JtYWxpc2VVcHBlciA9IG9wdGlvbnMudXBwZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3VwcGVyJywgJ251bWJlciBiZXR3ZWVuIDEgYW5kIDEwMCcsIG9wdGlvbnMudXBwZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLm5vcm1hbGlzZUxvd2VyID49IHRoaXMub3B0aW9ucy5ub3JtYWxpc2VVcHBlcikge1xuICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigncmFuZ2UnLCAnbG93ZXIgdG8gYmUgbGVzcyB0aGFuIHVwcGVyJyxcbiAgICAgIGAke3RoaXMub3B0aW9ucy5ub3JtYWxpc2VMb3dlcn0gPj0gJHt0aGlzLm9wdGlvbnMubm9ybWFsaXNlVXBwZXJ9YCk7XG4gIH1cbiAgdGhpcy5vcHRpb25zLm5vcm1hbGlzZSA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEFsdGVybmF0aXZlIHNwZWxsaW5nIG9mIG5vcm1hbGlzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5ub3JtYWxpemUoKVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG93ZXI9MV0gLSBQZXJjZW50aWxlIGJlbG93IHdoaWNoIGx1bWluYW5jZSB2YWx1ZXMgd2lsbCBiZSB1bmRlcmV4cG9zZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudXBwZXI9OTldIC0gUGVyY2VudGlsZSBhYm92ZSB3aGljaCBsdW1pbmFuY2UgdmFsdWVzIHdpbGwgYmUgb3ZlcmV4cG9zZWQuXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZSAob3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5ub3JtYWxpc2Uob3B0aW9ucyk7XG59XG5cbi8qKlxuICogUGVyZm9ybSBjb250cmFzdCBsaW1pdGluZyBhZGFwdGl2ZSBoaXN0b2dyYW0gZXF1YWxpemF0aW9uXG4gKiB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWRhcHRpdmVfaGlzdG9ncmFtX2VxdWFsaXphdGlvbiNDb250cmFzdF9MaW1pdGVkX0FIRXxDTEFIRX0uXG4gKlxuICogVGhpcyB3aWxsLCBpbiBnZW5lcmFsLCBlbmhhbmNlIHRoZSBjbGFyaXR5IG9mIHRoZSBpbWFnZSBieSBicmluZ2luZyBvdXQgZGFya2VyIGRldGFpbHMuXG4gKlxuICogQHNpbmNlIDAuMjguM1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLmNsYWhlKHtcbiAqICAgICB3aWR0aDogMyxcbiAqICAgICBoZWlnaHQ6IDMsXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy53aWR0aCAtIEludGVncmFsIHdpZHRoIG9mIHRoZSBzZWFyY2ggd2luZG93LCBpbiBwaXhlbHMuXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5oZWlnaHQgLSBJbnRlZ3JhbCBoZWlnaHQgb2YgdGhlIHNlYXJjaCB3aW5kb3csIGluIHBpeGVscy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTbG9wZT0zXSAtIEludGVncmFsIGxldmVsIG9mIGJyaWdodGVuaW5nLCBiZXR3ZWVuIDAgYW5kIDEwMCwgd2hlcmUgMCBkaXNhYmxlcyBjb250cmFzdCBsaW1pdGluZy5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gY2xhaGUgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLnBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy53aWR0aCkgJiYgb3B0aW9ucy53aWR0aCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucy5jbGFoZVdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd3aWR0aCcsICdpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvJywgb3B0aW9ucy53aWR0aCk7XG4gICAgfVxuICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMuaGVpZ2h0KSAmJiBvcHRpb25zLmhlaWdodCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucy5jbGFoZUhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2hlaWdodCcsICdpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvJywgb3B0aW9ucy5oZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLm1heFNsb3BlKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5tYXhTbG9wZSkgJiYgaXMuaW5SYW5nZShvcHRpb25zLm1heFNsb3BlLCAwLCAxMDApKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5jbGFoZU1heFNsb3BlID0gb3B0aW9ucy5tYXhTbG9wZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignbWF4U2xvcGUnLCAnaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMCcsIG9wdGlvbnMubWF4U2xvcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMnLCAncGxhaW4gb2JqZWN0Jywgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQ29udm9sdmUgdGhlIGltYWdlIHdpdGggdGhlIHNwZWNpZmllZCBrZXJuZWwuXG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAuY29udm9sdmUoe1xuICogICAgIHdpZHRoOiAzLFxuICogICAgIGhlaWdodDogMyxcbiAqICAgICBrZXJuZWw6IFstMSwgMCwgMSwgLTIsIDAsIDIsIC0xLCAwLCAxXVxuICogICB9KVxuICogICAucmF3KClcbiAqICAgLnRvQnVmZmVyKGZ1bmN0aW9uKGVyciwgZGF0YSwgaW5mbykge1xuICogICAgIC8vIGRhdGEgY29udGFpbnMgdGhlIHJhdyBwaXhlbCBkYXRhIHJlcHJlc2VudGluZyB0aGUgY29udm9sdXRpb25cbiAqICAgICAvLyBvZiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCB0aGUgaG9yaXpvbnRhbCBTb2JlbCBvcGVyYXRvclxuICogICB9KTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0ga2VybmVsXG4gKiBAcGFyYW0ge251bWJlcn0ga2VybmVsLndpZHRoIC0gd2lkdGggb2YgdGhlIGtlcm5lbCBpbiBwaXhlbHMuXG4gKiBAcGFyYW0ge251bWJlcn0ga2VybmVsLmhlaWdodCAtIGhlaWdodCBvZiB0aGUga2VybmVsIGluIHBpeGVscy5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0ga2VybmVsLmtlcm5lbCAtIEFycmF5IG9mIGxlbmd0aCBgd2lkdGgqaGVpZ2h0YCBjb250YWluaW5nIHRoZSBrZXJuZWwgdmFsdWVzLlxuICogQHBhcmFtIHtudW1iZXJ9IFtrZXJuZWwuc2NhbGU9c3VtXSAtIHRoZSBzY2FsZSBvZiB0aGUga2VybmVsIGluIHBpeGVscy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBba2VybmVsLm9mZnNldD0wXSAtIHRoZSBvZmZzZXQgb2YgdGhlIGtlcm5lbCBpbiBwaXhlbHMuXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIGNvbnZvbHZlIChrZXJuZWwpIHtcbiAgaWYgKCFpcy5vYmplY3Qoa2VybmVsKSB8fCAhQXJyYXkuaXNBcnJheShrZXJuZWwua2VybmVsKSB8fFxuICAgICAgIWlzLmludGVnZXIoa2VybmVsLndpZHRoKSB8fCAhaXMuaW50ZWdlcihrZXJuZWwuaGVpZ2h0KSB8fFxuICAgICAgIWlzLmluUmFuZ2Uoa2VybmVsLndpZHRoLCAzLCAxMDAxKSB8fCAhaXMuaW5SYW5nZShrZXJuZWwuaGVpZ2h0LCAzLCAxMDAxKSB8fFxuICAgICAga2VybmVsLmhlaWdodCAqIGtlcm5lbC53aWR0aCAhPT0ga2VybmVsLmtlcm5lbC5sZW5ndGhcbiAgKSB7XG4gICAgLy8gbXVzdCBwYXNzIGluIGEga2VybmVsXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnZvbHV0aW9uIGtlcm5lbCcpO1xuICB9XG4gIC8vIERlZmF1bHQgc2NhbGUgaXMgc3VtIG9mIGtlcm5lbCB2YWx1ZXNcbiAgaWYgKCFpcy5pbnRlZ2VyKGtlcm5lbC5zY2FsZSkpIHtcbiAgICBrZXJuZWwuc2NhbGUgPSBrZXJuZWwua2VybmVsLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH0sIDApO1xuICB9XG4gIC8vIENsaXAgc2NhbGUgdG8gYSBtaW5pbXVtIHZhbHVlIG9mIDFcbiAgaWYgKGtlcm5lbC5zY2FsZSA8IDEpIHtcbiAgICBrZXJuZWwuc2NhbGUgPSAxO1xuICB9XG4gIGlmICghaXMuaW50ZWdlcihrZXJuZWwub2Zmc2V0KSkge1xuICAgIGtlcm5lbC5vZmZzZXQgPSAwO1xuICB9XG4gIHRoaXMub3B0aW9ucy5jb252S2VybmVsID0ga2VybmVsO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBBbnkgcGl4ZWwgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWUgd2lsbCBiZSBzZXQgdG8gMjU1LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzZXQgdG8gMC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhyZXNob2xkPTEyOF0gLSBhIHZhbHVlIGluIHRoZSByYW5nZSAwLTI1NSByZXByZXNlbnRpbmcgdGhlIGxldmVsIGF0IHdoaWNoIHRoZSB0aHJlc2hvbGQgd2lsbCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5ncmV5c2NhbGU9dHJ1ZV0gLSBjb252ZXJ0IHRvIHNpbmdsZSBjaGFubmVsIGdyZXlzY2FsZS5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZ3JheXNjYWxlPXRydWVdIC0gYWx0ZXJuYXRpdmUgc3BlbGxpbmcgZm9yIGdyZXlzY2FsZS5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gdGhyZXNob2xkICh0aHJlc2hvbGQsIG9wdGlvbnMpIHtcbiAgaWYgKCFpcy5kZWZpbmVkKHRocmVzaG9sZCkpIHtcbiAgICB0aGlzLm9wdGlvbnMudGhyZXNob2xkID0gMTI4O1xuICB9IGVsc2UgaWYgKGlzLmJvb2wodGhyZXNob2xkKSkge1xuICAgIHRoaXMub3B0aW9ucy50aHJlc2hvbGQgPSB0aHJlc2hvbGQgPyAxMjggOiAwO1xuICB9IGVsc2UgaWYgKGlzLmludGVnZXIodGhyZXNob2xkKSAmJiBpcy5pblJhbmdlKHRocmVzaG9sZCwgMCwgMjU1KSkge1xuICAgIHRoaXMub3B0aW9ucy50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd0aHJlc2hvbGQnLCAnaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NScsIHRocmVzaG9sZCk7XG4gIH1cbiAgaWYgKCFpcy5vYmplY3Qob3B0aW9ucykgfHwgb3B0aW9ucy5ncmV5c2NhbGUgPT09IHRydWUgfHwgb3B0aW9ucy5ncmF5c2NhbGUgPT09IHRydWUpIHtcbiAgICB0aGlzLm9wdGlvbnMudGhyZXNob2xkR3JheXNjYWxlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wdGlvbnMudGhyZXNob2xkR3JheXNjYWxlID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIGJpdHdpc2UgYm9vbGVhbiBvcGVyYXRpb24gd2l0aCBvcGVyYW5kIGltYWdlLlxuICpcbiAqIFRoaXMgb3BlcmF0aW9uIGNyZWF0ZXMgYW4gb3V0cHV0IGltYWdlIHdoZXJlIGVhY2ggcGl4ZWwgaXMgdGhlIHJlc3VsdCBvZlxuICogdGhlIHNlbGVjdGVkIGJpdHdpc2UgYm9vbGVhbiBgb3BlcmF0aW9uYCBiZXR3ZWVuIHRoZSBjb3JyZXNwb25kaW5nIHBpeGVscyBvZiB0aGUgaW5wdXQgaW1hZ2VzLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gb3BlcmFuZCAtIEJ1ZmZlciBjb250YWluaW5nIGltYWdlIGRhdGEgb3Igc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYW4gaW1hZ2UgZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIG9uZSBvZiBgYW5kYCwgYG9yYCBvciBgZW9yYCB0byBwZXJmb3JtIHRoYXQgYml0d2lzZSBvcGVyYXRpb24sIGxpa2UgdGhlIEMgbG9naWMgb3BlcmF0b3JzIGAmYCwgYHxgIGFuZCBgXmAgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJhd10gLSBkZXNjcmliZXMgb3BlcmFuZCB3aGVuIHVzaW5nIHJhdyBwaXhlbCBkYXRhLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnJhdy53aWR0aF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5yYXcuaGVpZ2h0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnJhdy5jaGFubmVsc11cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gYm9vbGVhbiAob3BlcmFuZCwgb3BlcmF0b3IsIG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zLmJvb2xlYW4gPSB0aGlzLl9jcmVhdGVJbnB1dERlc2NyaXB0b3Iob3BlcmFuZCwgb3B0aW9ucyk7XG4gIGlmIChpcy5zdHJpbmcob3BlcmF0b3IpICYmIGlzLmluQXJyYXkob3BlcmF0b3IsIFsnYW5kJywgJ29yJywgJ2VvciddKSkge1xuICAgIHRoaXMub3B0aW9ucy5ib29sZWFuT3AgPSBvcGVyYXRvcjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wZXJhdG9yJywgJ29uZSBvZjogYW5kLCBvciwgZW9yJywgb3BlcmF0b3IpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEFwcGx5IHRoZSBsaW5lYXIgZm9ybXVsYSBgYWAgKiBpbnB1dCArIGBiYCB0byB0aGUgaW1hZ2UgdG8gYWRqdXN0IGltYWdlIGxldmVscy5cbiAqXG4gKiBXaGVuIGEgc2luZ2xlIG51bWJlciBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIGZvciBhbGwgaW1hZ2UgY2hhbm5lbHMuXG4gKiBXaGVuIGFuIGFycmF5IG9mIG51bWJlcnMgaXMgcHJvdmlkZWQsIHRoZSBhcnJheSBsZW5ndGggbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLmxpbmVhcigwLjUsIDIpXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBhd2FpdCBzaGFycChyZ2JJbnB1dClcbiAqICAgLmxpbmVhcihcbiAqICAgICBbMC4yNSwgMC41LCAwLjc1XSxcbiAqICAgICBbMTUwLCAxMDAsIDUwXVxuICogICApXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7KG51bWJlcnxudW1iZXJbXSl9IFthPVtdXSBtdWx0aXBsaWVyXG4gKiBAcGFyYW0geyhudW1iZXJ8bnVtYmVyW10pfSBbYj1bXV0gb2Zmc2V0XG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIGxpbmVhciAoYSwgYikge1xuICBpZiAoIWlzLmRlZmluZWQoYSkgJiYgaXMubnVtYmVyKGIpKSB7XG4gICAgYSA9IDEuMDtcbiAgfSBlbHNlIGlmIChpcy5udW1iZXIoYSkgJiYgIWlzLmRlZmluZWQoYikpIHtcbiAgICBiID0gMC4wO1xuICB9XG4gIGlmICghaXMuZGVmaW5lZChhKSkge1xuICAgIHRoaXMub3B0aW9ucy5saW5lYXJBID0gW107XG4gIH0gZWxzZSBpZiAoaXMubnVtYmVyKGEpKSB7XG4gICAgdGhpcy5vcHRpb25zLmxpbmVhckEgPSBbYV07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBhLmxlbmd0aCAmJiBhLmV2ZXJ5KGlzLm51bWJlcikpIHtcbiAgICB0aGlzLm9wdGlvbnMubGluZWFyQSA9IGE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdhJywgJ251bWJlciBvciBhcnJheSBvZiBudW1iZXJzJywgYSk7XG4gIH1cbiAgaWYgKCFpcy5kZWZpbmVkKGIpKSB7XG4gICAgdGhpcy5vcHRpb25zLmxpbmVhckIgPSBbXTtcbiAgfSBlbHNlIGlmIChpcy5udW1iZXIoYikpIHtcbiAgICB0aGlzLm9wdGlvbnMubGluZWFyQiA9IFtiXTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGIpICYmIGIubGVuZ3RoICYmIGIuZXZlcnkoaXMubnVtYmVyKSkge1xuICAgIHRoaXMub3B0aW9ucy5saW5lYXJCID0gYjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2InLCAnbnVtYmVyIG9yIGFycmF5IG9mIG51bWJlcnMnLCBiKTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmxpbmVhckEubGVuZ3RoICE9PSB0aGlzLm9wdGlvbnMubGluZWFyQi5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgYW5kIGIgdG8gYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCcpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFJlY29tYmluZSB0aGUgaW1hZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIG1hdHJpeC5cbiAqXG4gKiBAc2luY2UgMC4yMS4xXG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAucmVjb21iKFtcbiAqICAgIFswLjM1ODgsIDAuNzA0NCwgMC4xMzY4XSxcbiAqICAgIFswLjI5OTAsIDAuNTg3MCwgMC4xMTQwXSxcbiAqICAgIFswLjIzOTIsIDAuNDY5NiwgMC4wOTEyXSxcbiAqICAgXSlcbiAqICAgLnJhdygpXG4gKiAgIC50b0J1ZmZlcihmdW5jdGlvbihlcnIsIGRhdGEsIGluZm8pIHtcbiAqICAgICAvLyBkYXRhIGNvbnRhaW5zIHRoZSByYXcgcGl4ZWwgZGF0YSBhZnRlciBhcHBseWluZyB0aGUgbWF0cml4XG4gKiAgICAgLy8gV2l0aCB0aGlzIGV4YW1wbGUgaW5wdXQsIGEgc2VwaWEgZmlsdGVyIGhhcyBiZWVuIGFwcGxpZWRcbiAqICAgfSk7XG4gKlxuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gaW5wdXRNYXRyaXggLSAzeDMgb3IgNHg0IFJlY29tYmluYXRpb24gbWF0cml4XG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlY29tYiAoaW5wdXRNYXRyaXgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0TWF0cml4KSkge1xuICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignaW5wdXRNYXRyaXgnLCAnYXJyYXknLCBpbnB1dE1hdHJpeCk7XG4gIH1cbiAgaWYgKGlucHV0TWF0cml4Lmxlbmd0aCAhPT0gMyAmJiBpbnB1dE1hdHJpeC5sZW5ndGggIT09IDQpIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2lucHV0TWF0cml4JywgJzN4MyBvciA0eDQgYXJyYXknLCBpbnB1dE1hdHJpeC5sZW5ndGgpO1xuICB9XG4gIGNvbnN0IHJlY29tYk1hdHJpeCA9IGlucHV0TWF0cml4LmZsYXQoKS5tYXAoTnVtYmVyKTtcbiAgaWYgKHJlY29tYk1hdHJpeC5sZW5ndGggIT09IDkgJiYgcmVjb21iTWF0cml4Lmxlbmd0aCAhPT0gMTYpIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2lucHV0TWF0cml4JywgJ2NhcmRpbmFsaXR5IG9mIDkgb3IgMTYnLCByZWNvbWJNYXRyaXgubGVuZ3RoKTtcbiAgfVxuICB0aGlzLm9wdGlvbnMucmVjb21iTWF0cml4ID0gcmVjb21iTWF0cml4O1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBpbWFnZSB1c2luZyBicmlnaHRuZXNzLCBzYXR1cmF0aW9uLCBodWUgcm90YXRpb24sIGFuZCBsaWdodG5lc3MuXG4gKiBCcmlnaHRuZXNzIGFuZCBsaWdodG5lc3MgYm90aCBvcGVyYXRlIG9uIGx1bWluYW5jZSwgd2l0aCB0aGUgZGlmZmVyZW5jZSBiZWluZyB0aGF0XG4gKiBicmlnaHRuZXNzIGlzIG11bHRpcGxpY2F0aXZlIHdoZXJlYXMgbGlnaHRuZXNzIGlzIGFkZGl0aXZlLlxuICpcbiAqIEBzaW5jZSAwLjIyLjFcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gaW5jcmVhc2UgYnJpZ2h0bmVzcyBieSBhIGZhY3RvciBvZiAyXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLm1vZHVsYXRlKHtcbiAqICAgICBicmlnaHRuZXNzOiAyXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBodWUtcm90YXRlIGJ5IDE4MCBkZWdyZWVzXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLm1vZHVsYXRlKHtcbiAqICAgICBodWU6IDE4MFxuICogICB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gaW5jcmVhc2UgbGlnaHRuZXNzIGJ5ICs1MFxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5tb2R1bGF0ZSh7XG4gKiAgICAgbGlnaHRuZXNzOiA1MFxuICogICB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gZGVjcmVhc2UgYnJpZ2h0bmVzcyBhbmQgc2F0dXJhdGlvbiB3aGlsZSBhbHNvIGh1ZS1yb3RhdGluZyBieSA5MCBkZWdyZWVzXG4gKiBjb25zdCBvdXRwdXQgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLm1vZHVsYXRlKHtcbiAqICAgICBicmlnaHRuZXNzOiAwLjUsXG4gKiAgICAgc2F0dXJhdGlvbjogMC41LFxuICogICAgIGh1ZTogOTAsXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5icmlnaHRuZXNzXSBCcmlnaHRuZXNzIG11bHRpcGxpZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zYXR1cmF0aW9uXSBTYXR1cmF0aW9uIG11bHRpcGxpZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5odWVdIERlZ3JlZXMgZm9yIGh1ZSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxpZ2h0bmVzc10gTGlnaHRuZXNzIGFkZGVuZFxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiBtb2R1bGF0ZSAob3B0aW9ucykge1xuICBpZiAoIWlzLnBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdvcHRpb25zJywgJ3BsYWluIG9iamVjdCcsIG9wdGlvbnMpO1xuICB9XG4gIGlmICgnYnJpZ2h0bmVzcycgaW4gb3B0aW9ucykge1xuICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5icmlnaHRuZXNzKSAmJiBvcHRpb25zLmJyaWdodG5lc3MgPj0gMCkge1xuICAgICAgdGhpcy5vcHRpb25zLmJyaWdodG5lc3MgPSBvcHRpb25zLmJyaWdodG5lc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignYnJpZ2h0bmVzcycsICdudW1iZXIgYWJvdmUgemVybycsIG9wdGlvbnMuYnJpZ2h0bmVzcyk7XG4gICAgfVxuICB9XG4gIGlmICgnc2F0dXJhdGlvbicgaW4gb3B0aW9ucykge1xuICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5zYXR1cmF0aW9uKSAmJiBvcHRpb25zLnNhdHVyYXRpb24gPj0gMCkge1xuICAgICAgdGhpcy5vcHRpb25zLnNhdHVyYXRpb24gPSBvcHRpb25zLnNhdHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignc2F0dXJhdGlvbicsICdudW1iZXIgYWJvdmUgemVybycsIG9wdGlvbnMuc2F0dXJhdGlvbik7XG4gICAgfVxuICB9XG4gIGlmICgnaHVlJyBpbiBvcHRpb25zKSB7XG4gICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5odWUpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuaHVlID0gb3B0aW9ucy5odWUgJSAzNjA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignaHVlJywgJ251bWJlcicsIG9wdGlvbnMuaHVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKCdsaWdodG5lc3MnIGluIG9wdGlvbnMpIHtcbiAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMubGlnaHRuZXNzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmxpZ2h0bmVzcyA9IG9wdGlvbnMubGlnaHRuZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2xpZ2h0bmVzcycsICdudW1iZXInLCBvcHRpb25zLmxpZ2h0bmVzcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIERlY29yYXRlIHRoZSBTaGFycCBwcm90b3R5cGUgd2l0aCBvcGVyYXRpb24tcmVsYXRlZCBmdW5jdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTaGFycCkge1xuICBPYmplY3QuYXNzaWduKFNoYXJwLnByb3RvdHlwZSwge1xuICAgIHJvdGF0ZSxcbiAgICBmbGlwLFxuICAgIGZsb3AsXG4gICAgYWZmaW5lLFxuICAgIHNoYXJwZW4sXG4gICAgbWVkaWFuLFxuICAgIGJsdXIsXG4gICAgZmxhdHRlbixcbiAgICB1bmZsYXR0ZW4sXG4gICAgZ2FtbWEsXG4gICAgbmVnYXRlLFxuICAgIG5vcm1hbGlzZSxcbiAgICBub3JtYWxpemUsXG4gICAgY2xhaGUsXG4gICAgY29udm9sdmUsXG4gICAgdGhyZXNob2xkLFxuICAgIGJvb2xlYW4sXG4gICAgbGluZWFyLFxuICAgIHJlY29tYixcbiAgICBtb2R1bGF0ZVxuICB9KTtcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDEzIExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdjb2xvcicpO1xuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG5cbi8qKlxuICogQ29sb3Vyc3BhY2VzLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgY29sb3Vyc3BhY2UgPSB7XG4gIG11bHRpYmFuZDogJ211bHRpYmFuZCcsXG4gICdiLXcnOiAnYi13JyxcbiAgYnc6ICdiLXcnLFxuICBjbXlrOiAnY215aycsXG4gIHNyZ2I6ICdzcmdiJ1xufTtcblxuLyoqXG4gKiBUaW50IHRoZSBpbWFnZSB1c2luZyB0aGUgcHJvdmlkZWQgY29sb3VyLlxuICogQW4gYWxwaGEgY2hhbm5lbCBtYXkgYmUgcHJlc2VudCBhbmQgd2lsbCBiZSB1bmNoYW5nZWQgYnkgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC50aW50KHsgcjogMjU1LCBnOiAyNDAsIGI6IDE2IH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gdGludCAtIFBhcnNlZCBieSB0aGUgW2NvbG9yXShodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9jb2xvcikgbW9kdWxlLlxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIHRpbnQgKHRpbnQpIHtcbiAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG91ck9wdGlvbigndGludCcsIHRpbnQpO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRvIDgtYml0IGdyZXlzY2FsZTsgMjU2IHNoYWRlcyBvZiBncmV5LlxuICogVGhpcyBpcyBhIGxpbmVhciBvcGVyYXRpb24uIElmIHRoZSBpbnB1dCBpbWFnZSBpcyBpbiBhIG5vbi1saW5lYXIgY29sb3VyIHNwYWNlIHN1Y2ggYXMgc1JHQiwgdXNlIGBnYW1tYSgpYCB3aXRoIGBncmV5c2NhbGUoKWAgZm9yIHRoZSBiZXN0IHJlc3VsdHMuXG4gKiBCeSBkZWZhdWx0IHRoZSBvdXRwdXQgaW1hZ2Ugd2lsbCBiZSB3ZWItZnJpZW5kbHkgc1JHQiBhbmQgY29udGFpbiB0aHJlZSAoaWRlbnRpY2FsKSBjb2xvciBjaGFubmVscy5cbiAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgb3RoZXIgc2hhcnAgb3BlcmF0aW9ucyBzdWNoIGFzIGB0b0NvbG91cnNwYWNlKCdiLXcnKWAsXG4gKiB3aGljaCB3aWxsIHByb2R1Y2UgYW4gb3V0cHV0IGltYWdlIGNvbnRhaW5pbmcgb25lIGNvbG9yIGNoYW5uZWwuXG4gKiBBbiBhbHBoYSBjaGFubmVsIG1heSBiZSBwcmVzZW50LCBhbmQgd2lsbCBiZSB1bmNoYW5nZWQgYnkgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2hhcnAoaW5wdXQpLmdyZXlzY2FsZSgpLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbZ3JleXNjYWxlPXRydWVdXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKi9cbmZ1bmN0aW9uIGdyZXlzY2FsZSAoZ3JleXNjYWxlKSB7XG4gIHRoaXMub3B0aW9ucy5ncmV5c2NhbGUgPSBpcy5ib29sKGdyZXlzY2FsZSkgPyBncmV5c2NhbGUgOiB0cnVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBBbHRlcm5hdGl2ZSBzcGVsbGluZyBvZiBgZ3JleXNjYWxlYC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2dyYXlzY2FsZT10cnVlXVxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiBncmF5c2NhbGUgKGdyYXlzY2FsZSkge1xuICByZXR1cm4gdGhpcy5ncmV5c2NhbGUoZ3JheXNjYWxlKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHBpcGVsaW5lIGNvbG91cnNwYWNlLlxuICpcbiAqIFRoZSBpbnB1dCBpbWFnZSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgcHJvdmlkZWQgY29sb3Vyc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwaXBlbGluZS5cbiAqIEFsbCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoaXMgY29sb3Vyc3BhY2UgYmVmb3JlIGNvbnZlcnRpbmcgdG8gdGhlIG91dHB1dCBjb2xvdXJzcGFjZSxcbiAqIGFzIGRlZmluZWQgYnkge0BsaW5rICN0b2NvbG91cnNwYWNlfHRvQ29sb3Vyc3BhY2V9LlxuICpcbiAqIEBzaW5jZSAwLjI5LjBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUnVuIHBpcGVsaW5lIGluIDE2IGJpdHMgcGVyIGNoYW5uZWwgUkdCIHdoaWxlIGNvbnZlcnRpbmcgZmluYWwgcmVzdWx0IHRvIDggYml0cyBwZXIgY2hhbm5lbCBzUkdCLlxuICogYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgLnBpcGVsaW5lQ29sb3Vyc3BhY2UoJ3JnYjE2JylcbiAqICAudG9Db2xvdXJzcGFjZSgnc3JnYicpXG4gKiAgLnRvRmlsZSgnMTZicGMtcGlwZWxpbmUtdG8tOGJwYy1vdXRwdXQucG5nJylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbG91cnNwYWNlXSAtIHBpcGVsaW5lIGNvbG91cnNwYWNlIGUuZy4gYHJnYjE2YCwgYHNjcmdiYCwgYGxhYmAsIGBncmV5MTZgIFsuLi5dKGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ2aXBzL2xpYnZpcHMvYmxvYi80MWNmZjRlOWQwODM4NDk4NDg3YTAwNjIzNDYyMjA0ZWIxMGVlNWI4L2xpYnZpcHMvaW9mdW5jcy9lbnVtdHlwZXMuYyNMNzc0KVxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBwaXBlbGluZUNvbG91cnNwYWNlIChjb2xvdXJzcGFjZSkge1xuICBpZiAoIWlzLnN0cmluZyhjb2xvdXJzcGFjZSkpIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2NvbG91cnNwYWNlJywgJ3N0cmluZycsIGNvbG91cnNwYWNlKTtcbiAgfVxuICB0aGlzLm9wdGlvbnMuY29sb3Vyc3BhY2VQaXBlbGluZSA9IGNvbG91cnNwYWNlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBBbHRlcm5hdGl2ZSBzcGVsbGluZyBvZiBgcGlwZWxpbmVDb2xvdXJzcGFjZWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yc3BhY2VdIC0gcGlwZWxpbmUgY29sb3JzcGFjZS5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gcGlwZWxpbmVDb2xvcnNwYWNlIChjb2xvcnNwYWNlKSB7XG4gIHJldHVybiB0aGlzLnBpcGVsaW5lQ29sb3Vyc3BhY2UoY29sb3JzcGFjZSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBvdXRwdXQgY29sb3Vyc3BhY2UuXG4gKiBCeSBkZWZhdWx0IG91dHB1dCBpbWFnZSB3aWxsIGJlIHdlYi1mcmllbmRseSBzUkdCLCB3aXRoIGFkZGl0aW9uYWwgY2hhbm5lbHMgaW50ZXJwcmV0ZWQgYXMgYWxwaGEgY2hhbm5lbHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE91dHB1dCAxNiBiaXRzIHBlciBwaXhlbCBSR0JcbiAqIGF3YWl0IHNoYXJwKGlucHV0KVxuICogIC50b0NvbG91cnNwYWNlKCdyZ2IxNicpXG4gKiAgLnRvRmlsZSgnMTYtYnBwLnBuZycpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvdXJzcGFjZV0gLSBvdXRwdXQgY29sb3Vyc3BhY2UgZS5nLiBgc3JnYmAsIGByZ2JgLCBgY215a2AsIGBsYWJgLCBgYi13YCBbLi4uXShodHRwczovL2dpdGh1Yi5jb20vbGlidmlwcy9saWJ2aXBzL2Jsb2IvM2MwYmZkZjc0Y2UxZGMzN2E2NDI5YmVkNDdmYTc2ZjE2ZTJjZDcwYS9saWJ2aXBzL2lvZnVuY3MvZW51bXR5cGVzLmMjTDc3Ny1MNzk0KVxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiB0b0NvbG91cnNwYWNlIChjb2xvdXJzcGFjZSkge1xuICBpZiAoIWlzLnN0cmluZyhjb2xvdXJzcGFjZSkpIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2NvbG91cnNwYWNlJywgJ3N0cmluZycsIGNvbG91cnNwYWNlKTtcbiAgfVxuICB0aGlzLm9wdGlvbnMuY29sb3Vyc3BhY2UgPSBjb2xvdXJzcGFjZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQWx0ZXJuYXRpdmUgc3BlbGxpbmcgb2YgYHRvQ29sb3Vyc3BhY2VgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcnNwYWNlXSAtIG91dHB1dCBjb2xvcnNwYWNlLlxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiB0b0NvbG9yc3BhY2UgKGNvbG9yc3BhY2UpIHtcbiAgcmV0dXJuIHRoaXMudG9Db2xvdXJzcGFjZShjb2xvcnNwYWNlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBjb2xvdXIgYXR0cmlidXRlIG9mIHRoZSB0aGlzLm9wdGlvbnMgT2JqZWN0LlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gdmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIF9zZXRCYWNrZ3JvdW5kQ29sb3VyT3B0aW9uIChrZXksIHZhbHVlKSB7XG4gIGlmIChpcy5kZWZpbmVkKHZhbHVlKSkge1xuICAgIGlmIChpcy5vYmplY3QodmFsdWUpIHx8IGlzLnN0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGNvbG91ciA9IGNvbG9yKHZhbHVlKTtcbiAgICAgIHRoaXMub3B0aW9uc1trZXldID0gW1xuICAgICAgICBjb2xvdXIucmVkKCksXG4gICAgICAgIGNvbG91ci5ncmVlbigpLFxuICAgICAgICBjb2xvdXIuYmx1ZSgpLFxuICAgICAgICBNYXRoLnJvdW5kKGNvbG91ci5hbHBoYSgpICogMjU1KVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdiYWNrZ3JvdW5kJywgJ29iamVjdCBvciBzdHJpbmcnLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGVjb3JhdGUgdGhlIFNoYXJwIHByb3RvdHlwZSB3aXRoIGNvbG91ci1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFNoYXJwKSB7XG4gIE9iamVjdC5hc3NpZ24oU2hhcnAucHJvdG90eXBlLCB7XG4gICAgLy8gUHVibGljXG4gICAgdGludCxcbiAgICBncmV5c2NhbGUsXG4gICAgZ3JheXNjYWxlLFxuICAgIHBpcGVsaW5lQ29sb3Vyc3BhY2UsXG4gICAgcGlwZWxpbmVDb2xvcnNwYWNlLFxuICAgIHRvQ29sb3Vyc3BhY2UsXG4gICAgdG9Db2xvcnNwYWNlLFxuICAgIC8vIFByaXZhdGVcbiAgICBfc2V0QmFja2dyb3VuZENvbG91ck9wdGlvblxuICB9KTtcbiAgLy8gQ2xhc3MgYXR0cmlidXRlc1xuICBTaGFycC5jb2xvdXJzcGFjZSA9IGNvbG91cnNwYWNlO1xuICBTaGFycC5jb2xvcnNwYWNlID0gY29sb3Vyc3BhY2U7XG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxMyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcycpO1xuXG4vKipcbiAqIEJvb2xlYW4gb3BlcmF0aW9ucyBmb3IgYmFuZGJvb2wuXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBib29sID0ge1xuICBhbmQ6ICdhbmQnLFxuICBvcjogJ29yJyxcbiAgZW9yOiAnZW9yJ1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxwaGEgY2hhbm5lbCwgaWYgYW55LiBUaGlzIGlzIGEgbm8tb3AgaWYgdGhlIGltYWdlIGRvZXMgbm90IGhhdmUgYW4gYWxwaGEgY2hhbm5lbC5cbiAqXG4gKiBTZWUgYWxzbyB7QGxpbmsgL2FwaS1vcGVyYXRpb24jZmxhdHRlbnxmbGF0dGVufS5cbiAqXG4gKiBAZXhhbXBsZVxuICogc2hhcnAoJ3JnYmEucG5nJylcbiAqICAgLnJlbW92ZUFscGhhKClcbiAqICAgLnRvRmlsZSgncmdiLnBuZycsIGZ1bmN0aW9uKGVyciwgaW5mbykge1xuICogICAgIC8vIHJnYi5wbmcgaXMgYSAzIGNoYW5uZWwgaW1hZ2Ugd2l0aG91dCBhbiBhbHBoYSBjaGFubmVsXG4gKiAgIH0pO1xuICpcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQWxwaGEgKCkge1xuICB0aGlzLm9wdGlvbnMucmVtb3ZlQWxwaGEgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhlIG91dHB1dCBpbWFnZSBoYXMgYW4gYWxwaGEgdHJhbnNwYXJlbmN5IGNoYW5uZWwuXG4gKiBJZiBtaXNzaW5nLCB0aGUgYWRkZWQgYWxwaGEgY2hhbm5lbCB3aWxsIGhhdmUgdGhlIHNwZWNpZmllZFxuICogdHJhbnNwYXJlbmN5IGxldmVsLCBkZWZhdWx0aW5nIHRvIGZ1bGx5LW9wYXF1ZSAoMSkuXG4gKiBUaGlzIGlzIGEgbm8tb3AgaWYgdGhlIGltYWdlIGFscmVhZHkgaGFzIGFuIGFscGhhIGNoYW5uZWwuXG4gKlxuICogQHNpbmNlIDAuMjEuMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyByZ2JhLnBuZyB3aWxsIGJlIGEgNCBjaGFubmVsIGltYWdlIHdpdGggYSBmdWxseS1vcGFxdWUgYWxwaGEgY2hhbm5lbFxuICogYXdhaXQgc2hhcnAoJ3JnYi5qcGcnKVxuICogICAuZW5zdXJlQWxwaGEoKVxuICogICAudG9GaWxlKCdyZ2JhLnBuZycpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIHJnYmEgaXMgYSA0IGNoYW5uZWwgaW1hZ2Ugd2l0aCBhIGZ1bGx5LXRyYW5zcGFyZW50IGFscGhhIGNoYW5uZWxcbiAqIGNvbnN0IHJnYmEgPSBhd2FpdCBzaGFycChyZ2IpXG4gKiAgIC5lbnN1cmVBbHBoYSgwKVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gYWxwaGEgdHJhbnNwYXJlbmN5IGxldmVsICgwPWZ1bGx5LXRyYW5zcGFyZW50LCAxPWZ1bGx5LW9wYXF1ZSlcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIGFscGhhIHRyYW5zcGFyZW5jeSBsZXZlbFxuICovXG5mdW5jdGlvbiBlbnN1cmVBbHBoYSAoYWxwaGEpIHtcbiAgaWYgKGlzLmRlZmluZWQoYWxwaGEpKSB7XG4gICAgaWYgKGlzLm51bWJlcihhbHBoYSkgJiYgaXMuaW5SYW5nZShhbHBoYSwgMCwgMSkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5lbnN1cmVBbHBoYSA9IGFscGhhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2FscGhhJywgJ251bWJlciBiZXR3ZWVuIDAgYW5kIDEnLCBhbHBoYSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMub3B0aW9ucy5lbnN1cmVBbHBoYSA9IDE7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIHNpbmdsZSBjaGFubmVsIGZyb20gYSBtdWx0aS1jaGFubmVsIGltYWdlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBncmVlbi5qcGcgaXMgYSBncmV5c2NhbGUgaW1hZ2UgY29udGFpbmluZyB0aGUgZ3JlZW4gY2hhbm5lbCBvZiB0aGUgaW5wdXRcbiAqIGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAuZXh0cmFjdENoYW5uZWwoJ2dyZWVuJylcbiAqICAgLnRvRmlsZSgnZ3JlZW4uanBnJyk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIHJlZDEgaXMgdGhlIHJlZCB2YWx1ZSBvZiB0aGUgZmlyc3QgcGl4ZWwsIHJlZDIgdGhlIHNlY29uZCBwaXhlbCBldGMuXG4gKiBjb25zdCBbcmVkMSwgcmVkMiwgLi4uXSA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAuZXh0cmFjdENoYW5uZWwoMClcbiAqICAgLnJhdygpXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gY2hhbm5lbCAtIHplcm8taW5kZXhlZCBjaGFubmVsL2JhbmQgbnVtYmVyIHRvIGV4dHJhY3QsIG9yIGByZWRgLCBgZ3JlZW5gLCBgYmx1ZWAgb3IgYGFscGhhYC5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIGNoYW5uZWxcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENoYW5uZWwgKGNoYW5uZWwpIHtcbiAgY29uc3QgY2hhbm5lbE1hcCA9IHsgcmVkOiAwLCBncmVlbjogMSwgYmx1ZTogMiwgYWxwaGE6IDMgfTtcbiAgaWYgKE9iamVjdC5rZXlzKGNoYW5uZWxNYXApLmluY2x1ZGVzKGNoYW5uZWwpKSB7XG4gICAgY2hhbm5lbCA9IGNoYW5uZWxNYXBbY2hhbm5lbF07XG4gIH1cbiAgaWYgKGlzLmludGVnZXIoY2hhbm5lbCkgJiYgaXMuaW5SYW5nZShjaGFubmVsLCAwLCA0KSkge1xuICAgIHRoaXMub3B0aW9ucy5leHRyYWN0Q2hhbm5lbCA9IGNoYW5uZWw7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdjaGFubmVsJywgJ2ludGVnZXIgb3Igb25lIG9mOiByZWQsIGdyZWVuLCBibHVlLCBhbHBoYScsIGNoYW5uZWwpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEpvaW4gb25lIG9yIG1vcmUgY2hhbm5lbHMgdG8gdGhlIGltYWdlLlxuICogVGhlIG1lYW5pbmcgb2YgdGhlIGFkZGVkIGNoYW5uZWxzIGRlcGVuZHMgb24gdGhlIG91dHB1dCBjb2xvdXJzcGFjZSwgc2V0IHdpdGggYHRvQ29sb3Vyc3BhY2UoKWAuXG4gKiBCeSBkZWZhdWx0IHRoZSBvdXRwdXQgaW1hZ2Ugd2lsbCBiZSB3ZWItZnJpZW5kbHkgc1JHQiwgd2l0aCBhZGRpdGlvbmFsIGNoYW5uZWxzIGludGVycHJldGVkIGFzIGFscGhhIGNoYW5uZWxzLlxuICogQ2hhbm5lbCBvcmRlcmluZyBmb2xsb3dzIHZpcHMgY29udmVudGlvbjpcbiAqIC0gc1JHQjogMDogUmVkLCAxOiBHcmVlbiwgMjogQmx1ZSwgMzogQWxwaGEuXG4gKiAtIENNWUs6IDA6IE1hZ2VudGEsIDE6IEN5YW4sIDI6IFllbGxvdywgMzogQmxhY2ssIDQ6IEFscGhhLlxuICpcbiAqIEJ1ZmZlcnMgbWF5IGJlIGFueSBvZiB0aGUgaW1hZ2UgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgc2hhcnAuXG4gKiBGb3IgcmF3IHBpeGVsIGlucHV0LCB0aGUgYG9wdGlvbnNgIG9iamVjdCBzaG91bGQgY29udGFpbiBhIGByYXdgIGF0dHJpYnV0ZSwgd2hpY2ggZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGUgYHNoYXJwKClgIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfEJ1ZmZlcj58c3RyaW5nfEJ1ZmZlcn0gaW1hZ2VzIC0gb25lIG9yIG1vcmUgaW1hZ2VzIChmaWxlIHBhdGhzLCBCdWZmZXJzKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gaW1hZ2Ugb3B0aW9ucywgc2VlIGBzaGFycCgpYCBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gam9pbkNoYW5uZWwgKGltYWdlcywgb3B0aW9ucykge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZXMpKSB7XG4gICAgaW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGltYWdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuam9pbkNoYW5uZWxJbi5wdXNoKHRoaXMuX2NyZWF0ZUlucHV0RGVzY3JpcHRvcihpbWFnZSwgb3B0aW9ucykpO1xuICAgIH0sIHRoaXMpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3B0aW9ucy5qb2luQ2hhbm5lbEluLnB1c2godGhpcy5fY3JlYXRlSW5wdXREZXNjcmlwdG9yKGltYWdlcywgb3B0aW9ucykpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFBlcmZvcm0gYSBiaXR3aXNlIGJvb2xlYW4gb3BlcmF0aW9uIG9uIGFsbCBpbnB1dCBpbWFnZSBjaGFubmVscyAoYmFuZHMpIHRvIHByb2R1Y2UgYSBzaW5nbGUgY2hhbm5lbCBvdXRwdXQgaW1hZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKCczLWNoYW5uZWwtcmdiLWlucHV0LnBuZycpXG4gKiAgIC5iYW5kYm9vbChzaGFycC5ib29sLmFuZClcbiAqICAgLnRvRmlsZSgnMS1jaGFubmVsLW91dHB1dC5wbmcnLCBmdW5jdGlvbiAoZXJyLCBpbmZvKSB7XG4gKiAgICAgLy8gVGhlIG91dHB1dCB3aWxsIGJlIGEgc2luZ2xlIGNoYW5uZWwgaW1hZ2Ugd2hlcmUgZWFjaCBwaXhlbCBgUCA9IFIgJiBHICYgQmAuXG4gKiAgICAgLy8gSWYgYEkoMSwxKSA9IFsyNDcsIDE3MCwgMTRdID0gWzBiMTExMTAxMTEsIDBiMTAxMDEwMTAsIDBiMDAwMDExMTFdYFxuICogICAgIC8vIHRoZW4gYE8oMSwxKSA9IDBiMTExMTAxMTEgJiAwYjEwMTAxMDEwICYgMGIwMDAwMTExMSA9IDBiMDAwMDAwMTAgPSAyYC5cbiAqICAgfSk7XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb2xPcCAtIG9uZSBvZiBgYW5kYCwgYG9yYCBvciBgZW9yYCB0byBwZXJmb3JtIHRoYXQgYml0d2lzZSBvcGVyYXRpb24sIGxpa2UgdGhlIEMgbG9naWMgb3BlcmF0b3JzIGAmYCwgYHxgIGFuZCBgXmAgcmVzcGVjdGl2ZWx5LlxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBiYW5kYm9vbCAoYm9vbE9wKSB7XG4gIGlmIChpcy5zdHJpbmcoYm9vbE9wKSAmJiBpcy5pbkFycmF5KGJvb2xPcCwgWydhbmQnLCAnb3InLCAnZW9yJ10pKSB7XG4gICAgdGhpcy5vcHRpb25zLmJhbmRCb29sT3AgPSBib29sT3A7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdib29sT3AnLCAnb25lIG9mOiBhbmQsIG9yLCBlb3InLCBib29sT3ApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIERlY29yYXRlIHRoZSBTaGFycCBwcm90b3R5cGUgd2l0aCBjaGFubmVsLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICogQHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoU2hhcnApIHtcbiAgT2JqZWN0LmFzc2lnbihTaGFycC5wcm90b3R5cGUsIHtcbiAgICAvLyBQdWJsaWMgaW5zdGFuY2UgZnVuY3Rpb25zXG4gICAgcmVtb3ZlQWxwaGEsXG4gICAgZW5zdXJlQWxwaGEsXG4gICAgZXh0cmFjdENoYW5uZWwsXG4gICAgam9pbkNoYW5uZWwsXG4gICAgYmFuZGJvb2xcbiAgfSk7XG4gIC8vIENsYXNzIGF0dHJpYnV0ZXNcbiAgU2hhcnAuYm9vbCA9IGJvb2w7XG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxMyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdub2RlOnBhdGgnKTtcbmNvbnN0IGlzID0gcmVxdWlyZSgnLi9pcycpO1xuY29uc3Qgc2hhcnAgPSByZXF1aXJlKCcuL3NoYXJwJyk7XG5cbmNvbnN0IGZvcm1hdHMgPSBuZXcgTWFwKFtcbiAgWydoZWljJywgJ2hlaWYnXSxcbiAgWydoZWlmJywgJ2hlaWYnXSxcbiAgWydhdmlmJywgJ2F2aWYnXSxcbiAgWydqcGVnJywgJ2pwZWcnXSxcbiAgWydqcGcnLCAnanBlZyddLFxuICBbJ2pwZScsICdqcGVnJ10sXG4gIFsndGlsZScsICd0aWxlJ10sXG4gIFsnZHonLCAndGlsZSddLFxuICBbJ3BuZycsICdwbmcnXSxcbiAgWydyYXcnLCAncmF3J10sXG4gIFsndGlmZicsICd0aWZmJ10sXG4gIFsndGlmJywgJ3RpZmYnXSxcbiAgWyd3ZWJwJywgJ3dlYnAnXSxcbiAgWydnaWYnLCAnZ2lmJ10sXG4gIFsnanAyJywgJ2pwMiddLFxuICBbJ2pweCcsICdqcDInXSxcbiAgWydqMmsnLCAnanAyJ10sXG4gIFsnajJjJywgJ2pwMiddLFxuICBbJ2p4bCcsICdqeGwnXVxuXSk7XG5cbmNvbnN0IGpwMlJlZ2V4ID0gL1xcLihqcFsyeF18ajJba2NdKSQvaTtcblxuY29uc3QgZXJySnAyU2F2ZSA9ICgpID0+IG5ldyBFcnJvcignSlAyIG91dHB1dCByZXF1aXJlcyBsaWJ2aXBzIHdpdGggc3VwcG9ydCBmb3IgT3BlbkpQRUcnKTtcblxuY29uc3QgYml0ZGVwdGhGcm9tQ29sb3VyQ291bnQgPSAoY29sb3VycykgPT4gMSA8PCAzMSAtIE1hdGguY2x6MzIoTWF0aC5jZWlsKE1hdGgubG9nMihjb2xvdXJzKSkpO1xuXG4vKipcbiAqIFdyaXRlIG91dHB1dCBpbWFnZSBkYXRhIHRvIGEgZmlsZS5cbiAqXG4gKiBJZiBhbiBleHBsaWNpdCBvdXRwdXQgZm9ybWF0IGlzIG5vdCBzZWxlY3RlZCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBleHRlbnNpb24sXG4gKiB3aXRoIEpQRUcsIFBORywgV2ViUCwgQVZJRiwgVElGRiwgR0lGLCBEWkksIGFuZCBsaWJ2aXBzJyBWIGZvcm1hdCBzdXBwb3J0ZWQuXG4gKiBOb3RlIHRoYXQgcmF3IHBpeGVsIGRhdGEgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGJ1ZmZlciBvdXRwdXQuXG4gKlxuICogQnkgZGVmYXVsdCBhbGwgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLCB3aGljaCBpbmNsdWRlcyBFWElGLWJhc2VkIG9yaWVudGF0aW9uLlxuICogU2VlIHtAbGluayAjd2l0aG1ldGFkYXRhfHdpdGhNZXRhZGF0YX0gZm9yIGNvbnRyb2wgb3ZlciB0aGlzLlxuICpcbiAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIGFuZCBwZXJtaXNzaW9ucyBleGlzdC5cbiAqXG4gKiBBIGBQcm9taXNlYCBpcyByZXR1cm5lZCB3aGVuIGBjYWxsYmFja2AgaXMgbm90IHByb3ZpZGVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBzaGFycChpbnB1dClcbiAqICAgLnRvRmlsZSgnb3V0cHV0LnBuZycsIChlcnIsIGluZm8pID0+IHsgLi4uIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBzaGFycChpbnB1dClcbiAqICAgLnRvRmlsZSgnb3V0cHV0LnBuZycpXG4gKiAgIC50aGVuKGluZm8gPT4geyAuLi4gfSlcbiAqICAgLmNhdGNoKGVyciA9PiB7IC4uLiB9KTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU91dCAtIHRoZSBwYXRoIHRvIHdyaXRlIHRoZSBpbWFnZSBkYXRhIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIGNhbGxlZCBvbiBjb21wbGV0aW9uIHdpdGggdHdvIGFyZ3VtZW50cyBgKGVyciwgaW5mbylgLlxuICogYGluZm9gIGNvbnRhaW5zIHRoZSBvdXRwdXQgaW1hZ2UgYGZvcm1hdGAsIGBzaXplYCAoYnl0ZXMpLCBgd2lkdGhgLCBgaGVpZ2h0YCxcbiAqIGBjaGFubmVsc2AgYW5kIGBwcmVtdWx0aXBsaWVkYCAoaW5kaWNhdGluZyBpZiBwcmVtdWx0aXBsaWNhdGlvbiB3YXMgdXNlZCkuXG4gKiBXaGVuIHVzaW5nIGEgY3JvcCBzdHJhdGVneSBhbHNvIGNvbnRhaW5zIGBjcm9wT2Zmc2V0TGVmdGAgYW5kIGBjcm9wT2Zmc2V0VG9wYC5cbiAqIFdoZW4gdXNpbmcgdGhlIGF0dGVudGlvbiBjcm9wIHN0cmF0ZWd5IGFsc28gY29udGFpbnMgYGF0dGVudGlvblhgIGFuZCBgYXR0ZW50aW9uWWAsIHRoZSBmb2NhbCBwb2ludCBvZiB0aGUgY3JvcHBlZCByZWdpb24uXG4gKiBBbmltYXRlZCBvdXRwdXQgd2lsbCBhbHNvIGNvbnRhaW4gYHBhZ2VIZWlnaHRgIGFuZCBgcGFnZXNgLlxuICogTWF5IGFsc28gY29udGFpbiBgdGV4dEF1dG9maXREcGlgIChkcGkgdGhlIGZvbnQgd2FzIHJlbmRlcmVkIGF0KSBpZiBpbWFnZSB3YXMgY3JlYXRlZCBmcm9tIHRleHQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSAtIHdoZW4gbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gdG9GaWxlIChmaWxlT3V0LCBjYWxsYmFjaykge1xuICBsZXQgZXJyO1xuICBpZiAoIWlzLnN0cmluZyhmaWxlT3V0KSkge1xuICAgIGVyciA9IG5ldyBFcnJvcignTWlzc2luZyBvdXRwdXQgZmlsZSBwYXRoJyk7XG4gIH0gZWxzZSBpZiAoaXMuc3RyaW5nKHRoaXMub3B0aW9ucy5pbnB1dC5maWxlKSAmJiBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmlucHV0LmZpbGUpID09PSBwYXRoLnJlc29sdmUoZmlsZU91dCkpIHtcbiAgICBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2Ugc2FtZSBmaWxlIGZvciBpbnB1dCBhbmQgb3V0cHV0Jyk7XG4gIH0gZWxzZSBpZiAoanAyUmVnZXgudGVzdChwYXRoLmV4dG5hbWUoZmlsZU91dCkpICYmICF0aGlzLmNvbnN0cnVjdG9yLmZvcm1hdC5qcDJrLm91dHB1dC5maWxlKSB7XG4gICAgZXJyID0gZXJySnAyU2F2ZSgpO1xuICB9XG4gIGlmIChlcnIpIHtcbiAgICBpZiAoaXMuZm4oY2FsbGJhY2spKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLmZpbGVPdXQgPSBmaWxlT3V0O1xuICAgIGNvbnN0IHN0YWNrID0gRXJyb3IoKTtcbiAgICByZXR1cm4gdGhpcy5fcGlwZWxpbmUoY2FsbGJhY2ssIHN0YWNrKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBXcml0ZSBvdXRwdXQgdG8gYSBCdWZmZXIuXG4gKiBKUEVHLCBQTkcsIFdlYlAsIEFWSUYsIFRJRkYsIEdJRiBhbmQgcmF3IHBpeGVsIGRhdGEgb3V0cHV0IGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogVXNlIHtAbGluayAjdG9mb3JtYXR8dG9Gb3JtYXR9IG9yIG9uZSBvZiB0aGUgZm9ybWF0LXNwZWNpZmljIGZ1bmN0aW9ucyBzdWNoIGFzIHtAbGluayBqcGVnfSwge0BsaW5rIHBuZ30gZXRjLiB0byBzZXQgdGhlIG91dHB1dCBmb3JtYXQuXG4gKlxuICogSWYgbm8gZXhwbGljaXQgZm9ybWF0IGlzIHNldCwgdGhlIG91dHB1dCBmb3JtYXQgd2lsbCBtYXRjaCB0aGUgaW5wdXQgaW1hZ2UsIGV4Y2VwdCBTVkcgaW5wdXQgd2hpY2ggYmVjb21lcyBQTkcgb3V0cHV0LlxuICpcbiAqIEJ5IGRlZmF1bHQgYWxsIG1ldGFkYXRhIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggaW5jbHVkZXMgRVhJRi1iYXNlZCBvcmllbnRhdGlvbi5cbiAqIFNlZSB7QGxpbmsgI3dpdGhtZXRhZGF0YXx3aXRoTWV0YWRhdGF9IGZvciBjb250cm9sIG92ZXIgdGhpcy5cbiAqXG4gKiBgY2FsbGJhY2tgLCBpZiBwcmVzZW50LCBnZXRzIHRocmVlIGFyZ3VtZW50cyBgKGVyciwgZGF0YSwgaW5mbylgIHdoZXJlOlxuICogLSBgZXJyYCBpcyBhbiBlcnJvciwgaWYgYW55LlxuICogLSBgZGF0YWAgaXMgdGhlIG91dHB1dCBpbWFnZSBkYXRhLlxuICogLSBgaW5mb2AgY29udGFpbnMgdGhlIG91dHB1dCBpbWFnZSBgZm9ybWF0YCwgYHNpemVgIChieXRlcyksIGB3aWR0aGAsIGBoZWlnaHRgLFxuICogYGNoYW5uZWxzYCBhbmQgYHByZW11bHRpcGxpZWRgIChpbmRpY2F0aW5nIGlmIHByZW11bHRpcGxpY2F0aW9uIHdhcyB1c2VkKS5cbiAqIFdoZW4gdXNpbmcgYSBjcm9wIHN0cmF0ZWd5IGFsc28gY29udGFpbnMgYGNyb3BPZmZzZXRMZWZ0YCBhbmQgYGNyb3BPZmZzZXRUb3BgLlxuICogQW5pbWF0ZWQgb3V0cHV0IHdpbGwgYWxzbyBjb250YWluIGBwYWdlSGVpZ2h0YCBhbmQgYHBhZ2VzYC5cbiAqIE1heSBhbHNvIGNvbnRhaW4gYHRleHRBdXRvZml0RHBpYCAoZHBpIHRoZSBmb250IHdhcyByZW5kZXJlZCBhdCkgaWYgaW1hZ2Ugd2FzIGNyZWF0ZWQgZnJvbSB0ZXh0LlxuICpcbiAqIEEgYFByb21pc2VgIGlzIHJldHVybmVkIHdoZW4gYGNhbGxiYWNrYCBpcyBub3QgcHJvdmlkZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAudG9CdWZmZXIoKGVyciwgZGF0YSwgaW5mbykgPT4geyAuLi4gfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAudG9CdWZmZXIoKVxuICogICAudGhlbihkYXRhID0+IHsgLi4uIH0pXG4gKiAgIC5jYXRjaChlcnIgPT4geyAuLi4gfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIHNoYXJwKGlucHV0KVxuICogICAucG5nKClcbiAqICAgLnRvQnVmZmVyKHsgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUgfSlcbiAqICAgLnRoZW4oKHsgZGF0YSwgaW5mbyB9KSA9PiB7IC4uLiB9KVxuICogICAuY2F0Y2goZXJyID0+IHsgLi4uIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGRhdGEsIGluZm8gfSA9IGF3YWl0IHNoYXJwKCdteS1pbWFnZS5qcGcnKVxuICogICAvLyBvdXRwdXQgdGhlIHJhdyBwaXhlbHNcbiAqICAgLnJhdygpXG4gKiAgIC50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pO1xuICpcbiAqIC8vIGNyZWF0ZSBhIG1vcmUgdHlwZSBzYWZlIHdheSB0byB3b3JrIHdpdGggdGhlIHJhdyBwaXhlbCBkYXRhXG4gKiAvLyB0aGlzIHdpbGwgbm90IGNvcHkgdGhlIGRhdGEsIGluc3RlYWQgaXQgd2lsbCBjaGFuZ2UgYGRhdGFgcyB1bmRlcmx5aW5nIEFycmF5QnVmZmVyXG4gKiAvLyBzbyBgZGF0YWAgYW5kIGBwaXhlbEFycmF5YCBwb2ludCB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb25cbiAqIGNvbnN0IHBpeGVsQXJyYXkgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoZGF0YS5idWZmZXIpO1xuICpcbiAqIC8vIFdoZW4geW91IGFyZSBkb25lIGNoYW5naW5nIHRoZSBwaXhlbEFycmF5LCBzaGFycCB0YWtlcyB0aGUgYHBpeGVsQXJyYXlgIGFzIGFuIGlucHV0XG4gKiBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGNoYW5uZWxzIH0gPSBpbmZvO1xuICogYXdhaXQgc2hhcnAocGl4ZWxBcnJheSwgeyByYXc6IHsgd2lkdGgsIGhlaWdodCwgY2hhbm5lbHMgfSB9KVxuICogICAudG9GaWxlKCdteS1jaGFuZ2VkLWltYWdlLmpwZycpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVzb2x2ZVdpdGhPYmplY3RdIFJlc29sdmUgdGhlIFByb21pc2Ugd2l0aCBhbiBPYmplY3QgY29udGFpbmluZyBgZGF0YWAgYW5kIGBpbmZvYCBwcm9wZXJ0aWVzIGluc3RlYWQgb2YgcmVzb2x2aW5nIG9ubHkgd2l0aCBgZGF0YWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXI+fSAtIHdoZW4gbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gdG9CdWZmZXIgKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdyZXNvbHZlV2l0aE9iamVjdCcsIG9wdGlvbnMucmVzb2x2ZVdpdGhPYmplY3QpO1xuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5yZXNvbHZlV2l0aE9iamVjdCkge1xuICAgIHRoaXMub3B0aW9ucy5yZXNvbHZlV2l0aE9iamVjdCA9IGZhbHNlO1xuICB9XG4gIHRoaXMub3B0aW9ucy5maWxlT3V0ID0gJyc7XG4gIGNvbnN0IHN0YWNrID0gRXJyb3IoKTtcbiAgcmV0dXJuIHRoaXMuX3BpcGVsaW5lKGlzLmZuKG9wdGlvbnMpID8gb3B0aW9ucyA6IGNhbGxiYWNrLCBzdGFjayk7XG59XG5cbi8qKlxuICogS2VlcCBhbGwgRVhJRiBtZXRhZGF0YSBmcm9tIHRoZSBpbnB1dCBpbWFnZSBpbiB0aGUgb3V0cHV0IGltYWdlLlxuICpcbiAqIEVYSUYgbWV0YWRhdGEgaXMgdW5zdXBwb3J0ZWQgZm9yIFRJRkYgb3V0cHV0LlxuICpcbiAqIEBzaW5jZSAwLjMzLjBcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb3V0cHV0V2l0aEV4aWYgPSBhd2FpdCBzaGFycChpbnB1dFdpdGhFeGlmKVxuICogICAua2VlcEV4aWYoKVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKi9cbmZ1bmN0aW9uIGtlZXBFeGlmICgpIHtcbiAgdGhpcy5vcHRpb25zLmtlZXBNZXRhZGF0YSB8PSAwYjAwMDAxO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBTZXQgRVhJRiBtZXRhZGF0YSBpbiB0aGUgb3V0cHV0IGltYWdlLCBpZ25vcmluZyBhbnkgRVhJRiBpbiB0aGUgaW5wdXQgaW1hZ2UuXG4gKlxuICogQHNpbmNlIDAuMzMuMFxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhV2l0aEV4aWYgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLndpdGhFeGlmKHtcbiAqICAgICBJRkQwOiB7XG4gKiAgICAgICBDb3B5cmlnaHQ6ICdUaGUgTmF0aW9uYWwgR2FsbGVyeSdcbiAqICAgICB9LFxuICogICAgIElGRDM6IHtcbiAqICAgICAgIEdQU0xhdGl0dWRlUmVmOiAnTicsXG4gKiAgICAgICBHUFNMYXRpdHVkZTogJzUxLzEgMzAvMSAzMjMwLzEwMCcsXG4gKiAgICAgICBHUFNMb25naXR1ZGVSZWY6ICdXJyxcbiAqICAgICAgIEdQU0xvbmdpdHVkZTogJzAvMSA3LzEgNDM2Ni8xMDAnXG4gKiAgICAgfVxuICogICB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIE9iamVjdDxzdHJpbmcsIHN0cmluZz4+fSBleGlmIE9iamVjdCBrZXllZCBieSBJRkQwLCBJRkQxIGV0Yy4gb2Yga2V5L3ZhbHVlIHN0cmluZyBwYWlycyB0byB3cml0ZSBhcyBFWElGIGRhdGEuXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHdpdGhFeGlmIChleGlmKSB7XG4gIGlmIChpcy5vYmplY3QoZXhpZikpIHtcbiAgICBmb3IgKGNvbnN0IFtpZmQsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGV4aWYpKSB7XG4gICAgICBpZiAoaXMub2JqZWN0KGVudHJpZXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICAgICAgaWYgKGlzLnN0cmluZyh2KSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndpdGhFeGlmW2BleGlmLSR7aWZkLnRvTG93ZXJDYXNlKCl9LSR7a31gXSA9IHY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcihgJHtpZmR9LiR7a31gLCAnc3RyaW5nJywgdik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoaWZkLCAnb2JqZWN0JywgZW50cmllcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZXhpZicsICdvYmplY3QnLCBleGlmKTtcbiAgfVxuICB0aGlzLm9wdGlvbnMud2l0aEV4aWZNZXJnZSA9IGZhbHNlO1xuICByZXR1cm4gdGhpcy5rZWVwRXhpZigpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBFWElGIG1ldGFkYXRhIGZyb20gdGhlIGlucHV0IGltYWdlIGluIHRoZSBvdXRwdXQgaW1hZ2UuXG4gKlxuICogQHNpbmNlIDAuMzMuMFxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhV2l0aE1lcmdlZEV4aWYgPSBhd2FpdCBzaGFycChpbnB1dFdpdGhFeGlmKVxuICogICAud2l0aEV4aWZNZXJnZSh7XG4gKiAgICAgSUZEMDoge1xuICogICAgICAgQ29weXJpZ2h0OiAnVGhlIE5hdGlvbmFsIEdhbGxlcnknXG4gKiAgICAgfVxuICogICB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIE9iamVjdDxzdHJpbmcsIHN0cmluZz4+fSBleGlmIE9iamVjdCBrZXllZCBieSBJRkQwLCBJRkQxIGV0Yy4gb2Yga2V5L3ZhbHVlIHN0cmluZyBwYWlycyB0byB3cml0ZSBhcyBFWElGIGRhdGEuXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHdpdGhFeGlmTWVyZ2UgKGV4aWYpIHtcbiAgdGhpcy53aXRoRXhpZihleGlmKTtcbiAgdGhpcy5vcHRpb25zLndpdGhFeGlmTWVyZ2UgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBLZWVwIElDQyBwcm9maWxlIGZyb20gdGhlIGlucHV0IGltYWdlIGluIHRoZSBvdXRwdXQgaW1hZ2UuXG4gKlxuICogV2hlcmUgbmVjZXNzYXJ5LCB3aWxsIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb3V0cHV0IGNvbG91ciBzcGFjZSB0byBtYXRjaCB0aGUgcHJvZmlsZS5cbiAqXG4gKiBAc2luY2UgMC4zMy4wXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dFdpdGhJY2NQcm9maWxlID0gYXdhaXQgc2hhcnAoaW5wdXRXaXRoSWNjUHJvZmlsZSlcbiAqICAgLmtlZXBJY2NQcm9maWxlKClcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiBrZWVwSWNjUHJvZmlsZSAoKSB7XG4gIHRoaXMub3B0aW9ucy5rZWVwTWV0YWRhdGEgfD0gMGIwMTAwMDtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHVzaW5nIGFuIElDQyBwcm9maWxlIGFuZCBhdHRhY2ggdG8gdGhlIG91dHB1dCBpbWFnZS5cbiAqXG4gKiBUaGlzIGNhbiBlaXRoZXIgYmUgYW4gYWJzb2x1dGUgZmlsZXN5c3RlbSBwYXRoIG9yXG4gKiBidWlsdC1pbiBwcm9maWxlIG5hbWUgKGBzcmdiYCwgYHAzYCwgYGNteWtgKS5cbiAqXG4gKiBAc2luY2UgMC4zMy4wXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dFdpdGhQMyA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAud2l0aEljY1Byb2ZpbGUoJ3AzJylcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGljYyAtIEFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aCB0byBvdXRwdXQgSUNDIHByb2ZpbGUgb3IgYnVpbHQtaW4gcHJvZmlsZSBuYW1lIChzcmdiLCBwMywgY215aykuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYXR0YWNoPXRydWVdIFNob3VsZCB0aGUgSUNDIHByb2ZpbGUgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBpbWFnZSBtZXRhZGF0YT9cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gd2l0aEljY1Byb2ZpbGUgKGljYywgb3B0aW9ucykge1xuICBpZiAoaXMuc3RyaW5nKGljYykpIHtcbiAgICB0aGlzLm9wdGlvbnMud2l0aEljY1Byb2ZpbGUgPSBpY2M7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdpY2MnLCAnc3RyaW5nJywgaWNjKTtcbiAgfVxuICB0aGlzLmtlZXBJY2NQcm9maWxlKCk7XG4gIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmF0dGFjaCkpIHtcbiAgICAgIGlmIChpcy5ib29sKG9wdGlvbnMuYXR0YWNoKSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuYXR0YWNoKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmtlZXBNZXRhZGF0YSAmPSB+MGIwMTAwMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdhdHRhY2gnLCAnYm9vbGVhbicsIG9wdGlvbnMuYXR0YWNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogS2VlcCBhbGwgbWV0YWRhdGEgKEVYSUYsIElDQywgWE1QLCBJUFRDKSBmcm9tIHRoZSBpbnB1dCBpbWFnZSBpbiB0aGUgb3V0cHV0IGltYWdlLlxuICpcbiAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciwgd2hlbiBga2VlcE1ldGFkYXRhYCBpcyBub3QgdXNlZCwgaXMgdG8gY29udmVydCB0byB0aGUgZGV2aWNlLWluZGVwZW5kZW50XG4gKiBzUkdCIGNvbG91ciBzcGFjZSBhbmQgc3RyaXAgYWxsIG1ldGFkYXRhLCBpbmNsdWRpbmcgdGhlIHJlbW92YWwgb2YgYW55IElDQyBwcm9maWxlLlxuICpcbiAqIEBzaW5jZSAwLjMzLjBcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb3V0cHV0V2l0aE1ldGFkYXRhID0gYXdhaXQgc2hhcnAoaW5wdXRXaXRoTWV0YWRhdGEpXG4gKiAgIC5rZWVwTWV0YWRhdGEoKVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKi9cbmZ1bmN0aW9uIGtlZXBNZXRhZGF0YSAoKSB7XG4gIHRoaXMub3B0aW9ucy5rZWVwTWV0YWRhdGEgPSAwYjExMTExO1xuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBLZWVwIG1vc3QgbWV0YWRhdGEgKEVYSUYsIFhNUCwgSVBUQykgZnJvbSB0aGUgaW5wdXQgaW1hZ2UgaW4gdGhlIG91dHB1dCBpbWFnZS5cbiAqXG4gKiBUaGlzIHdpbGwgYWxzbyBjb252ZXJ0IHRvIGFuZCBhZGQgYSB3ZWItZnJpZW5kbHkgc1JHQiBJQ0MgcHJvZmlsZSBpZiBhcHByb3ByaWF0ZS5cbiAqXG4gKiBBbGxvd3Mgb3JpZW50YXRpb24gYW5kIGRlbnNpdHkgdG8gYmUgc2V0IG9yIHVwZGF0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG91dHB1dFNyZ2JXaXRoTWV0YWRhdGEgPSBhd2FpdCBzaGFycChpbnB1dFJnYldpdGhNZXRhZGF0YSlcbiAqICAgLndpdGhNZXRhZGF0YSgpXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgb3V0cHV0IG1ldGFkYXRhIHRvIDk2IERQSVxuICogY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAud2l0aE1ldGFkYXRhKHsgZGVuc2l0eTogOTYgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9yaWVudGF0aW9uXSBVc2VkIHRvIHVwZGF0ZSB0aGUgRVhJRiBgT3JpZW50YXRpb25gIHRhZywgaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDguXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGVuc2l0eV0gTnVtYmVyIG9mIHBpeGVscyBwZXIgaW5jaCAoRFBJKS5cbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gd2l0aE1ldGFkYXRhIChvcHRpb25zKSB7XG4gIHRoaXMua2VlcE1ldGFkYXRhKCk7XG4gIHRoaXMud2l0aEljY1Byb2ZpbGUoJ3NyZ2InKTtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMub3JpZW50YXRpb24pKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihvcHRpb25zLm9yaWVudGF0aW9uKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMub3JpZW50YXRpb24sIDEsIDgpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy53aXRoTWV0YWRhdGFPcmllbnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29yaWVudGF0aW9uJywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCA4Jywgb3B0aW9ucy5vcmllbnRhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuZGVuc2l0eSkpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5kZW5zaXR5KSAmJiBvcHRpb25zLmRlbnNpdHkgPiAwKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy53aXRoTWV0YWRhdGFEZW5zaXR5ID0gb3B0aW9ucy5kZW5zaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdkZW5zaXR5JywgJ3Bvc2l0aXZlIG51bWJlcicsIG9wdGlvbnMuZGVuc2l0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuaWNjKSkge1xuICAgICAgdGhpcy53aXRoSWNjUHJvZmlsZShvcHRpb25zLmljYyk7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuZXhpZikpIHtcbiAgICAgIHRoaXMud2l0aEV4aWZNZXJnZShvcHRpb25zLmV4aWYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBGb3JjZSBvdXRwdXQgdG8gYSBnaXZlbiBmb3JtYXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgYW55IGlucHV0IHRvIFBORyBvdXRwdXRcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLnRvRm9ybWF0KCdwbmcnKVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0geyhzdHJpbmd8T2JqZWN0KX0gZm9ybWF0IC0gYXMgYSBzdHJpbmcgb3IgYW4gT2JqZWN0IHdpdGggYW4gJ2lkJyBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBmb3JtYXQgb3Igb3B0aW9uc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1hdCAoZm9ybWF0LCBvcHRpb25zKSB7XG4gIGNvbnN0IGFjdHVhbEZvcm1hdCA9IGZvcm1hdHMuZ2V0KChpcy5vYmplY3QoZm9ybWF0KSAmJiBpcy5zdHJpbmcoZm9ybWF0LmlkKSA/IGZvcm1hdC5pZCA6IGZvcm1hdCkudG9Mb3dlckNhc2UoKSk7XG4gIGlmICghYWN0dWFsRm9ybWF0KSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdmb3JtYXQnLCBgb25lIG9mOiAke1suLi5mb3JtYXRzLmtleXMoKV0uam9pbignLCAnKX1gLCBmb3JtYXQpO1xuICB9XG4gIHJldHVybiB0aGlzW2FjdHVhbEZvcm1hdF0ob3B0aW9ucyk7XG59XG5cbi8qKlxuICogVXNlIHRoZXNlIEpQRUcgb3B0aW9ucyBmb3Igb3V0cHV0IGltYWdlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IGFueSBpbnB1dCB0byB2ZXJ5IGhpZ2ggcXVhbGl0eSBKUEVHIG91dHB1dFxuICogY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAuanBlZyh7XG4gKiAgICAgcXVhbGl0eTogMTAwLFxuICogICAgIGNocm9tYVN1YnNhbXBsaW5nOiAnNDo0OjQnXG4gKiAgIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2UgbW96anBlZyB0byByZWR1Y2Ugb3V0cHV0IEpQRUcgZmlsZSBzaXplIChzbG93ZXIpXG4gKiBjb25zdCBkYXRhID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5qcGVnKHsgbW96anBlZzogdHJ1ZSB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5xdWFsaXR5PTgwXSAtIHF1YWxpdHksIGludGVnZXIgMS0xMDBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJvZ3Jlc3NpdmU9ZmFsc2VdIC0gdXNlIHByb2dyZXNzaXZlIChpbnRlcmxhY2UpIHNjYW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaHJvbWFTdWJzYW1wbGluZz0nNDoyOjAnXSAtIHNldCB0byAnNDo0OjQnIHRvIHByZXZlbnQgY2hyb21hIHN1YnNhbXBsaW5nIG90aGVyd2lzZSBkZWZhdWx0cyB0byAnNDoyOjAnIGNocm9tYSBzdWJzYW1wbGluZ1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5vcHRpbWlzZUNvZGluZz10cnVlXSAtIG9wdGltaXNlIEh1ZmZtYW4gY29kaW5nIHRhYmxlc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5vcHRpbWl6ZUNvZGluZz10cnVlXSAtIGFsdGVybmF0aXZlIHNwZWxsaW5nIG9mIG9wdGltaXNlQ29kaW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1vempwZWc9ZmFsc2VdIC0gdXNlIG1vempwZWcgZGVmYXVsdHMsIGVxdWl2YWxlbnQgdG8gYHsgdHJlbGxpc1F1YW50aXNhdGlvbjogdHJ1ZSwgb3ZlcnNob290RGVyaW5naW5nOiB0cnVlLCBvcHRpbWlzZVNjYW5zOiB0cnVlLCBxdWFudGlzYXRpb25UYWJsZTogMyB9YFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmVsbGlzUXVhbnRpc2F0aW9uPWZhbHNlXSAtIGFwcGx5IHRyZWxsaXMgcXVhbnRpc2F0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm92ZXJzaG9vdERlcmluZ2luZz1mYWxzZV0gLSBhcHBseSBvdmVyc2hvb3QgZGVyaW5naW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm9wdGltaXNlU2NhbnM9ZmFsc2VdIC0gb3B0aW1pc2UgcHJvZ3Jlc3NpdmUgc2NhbnMsIGZvcmNlcyBwcm9ncmVzc2l2ZVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5vcHRpbWl6ZVNjYW5zPWZhbHNlXSAtIGFsdGVybmF0aXZlIHNwZWxsaW5nIG9mIG9wdGltaXNlU2NhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5xdWFudGlzYXRpb25UYWJsZT0wXSAtIHF1YW50aXphdGlvbiB0YWJsZSB0byB1c2UsIGludGVnZXIgMC04XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucXVhbnRpemF0aW9uVGFibGU9MF0gLSBhbHRlcm5hdGl2ZSBzcGVsbGluZyBvZiBxdWFudGlzYXRpb25UYWJsZVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZT10cnVlXSAtIGZvcmNlIEpQRUcgb3V0cHV0LCBvdGhlcndpc2UgYXR0ZW1wdCB0byB1c2UgaW5wdXQgZm9ybWF0XG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGpwZWcgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucXVhbGl0eSkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMucXVhbGl0eSkgJiYgaXMuaW5SYW5nZShvcHRpb25zLnF1YWxpdHksIDEsIDEwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmpwZWdRdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdxdWFsaXR5JywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDAnLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLnByb2dyZXNzaXZlKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbignanBlZ1Byb2dyZXNzaXZlJywgb3B0aW9ucy5wcm9ncmVzc2l2ZSk7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuY2hyb21hU3Vic2FtcGxpbmcpKSB7XG4gICAgICBpZiAoaXMuc3RyaW5nKG9wdGlvbnMuY2hyb21hU3Vic2FtcGxpbmcpICYmIGlzLmluQXJyYXkob3B0aW9ucy5jaHJvbWFTdWJzYW1wbGluZywgWyc0OjI6MCcsICc0OjQ6NCddKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuanBlZ0Nocm9tYVN1YnNhbXBsaW5nID0gb3B0aW9ucy5jaHJvbWFTdWJzYW1wbGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignY2hyb21hU3Vic2FtcGxpbmcnLCAnb25lIG9mOiA0OjI6MCwgNDo0OjQnLCBvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3B0aW1pc2VDb2RpbmcgPSBpcy5ib29sKG9wdGlvbnMub3B0aW1pemVDb2RpbmcpID8gb3B0aW9ucy5vcHRpbWl6ZUNvZGluZyA6IG9wdGlvbnMub3B0aW1pc2VDb2Rpbmc7XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW1pc2VDb2RpbmcpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdqcGVnT3B0aW1pc2VDb2RpbmcnLCBvcHRpbWlzZUNvZGluZyk7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMubW96anBlZykpIHtcbiAgICAgIGlmIChpcy5ib29sKG9wdGlvbnMubW96anBlZykpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMubW96anBlZykge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5qcGVnVHJlbGxpc1F1YW50aXNhdGlvbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmpwZWdPdmVyc2hvb3REZXJpbmdpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5qcGVnT3B0aW1pc2VTY2FucyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmpwZWdQcm9ncmVzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmpwZWdRdWFudGlzYXRpb25UYWJsZSA9IDM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignbW96anBlZycsICdib29sZWFuJywgb3B0aW9ucy5tb3pqcGVnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdHJlbGxpc1F1YW50aXNhdGlvbiA9IGlzLmJvb2wob3B0aW9ucy50cmVsbGlzUXVhbnRpemF0aW9uKSA/IG9wdGlvbnMudHJlbGxpc1F1YW50aXphdGlvbiA6IG9wdGlvbnMudHJlbGxpc1F1YW50aXNhdGlvbjtcbiAgICBpZiAoaXMuZGVmaW5lZCh0cmVsbGlzUXVhbnRpc2F0aW9uKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbignanBlZ1RyZWxsaXNRdWFudGlzYXRpb24nLCB0cmVsbGlzUXVhbnRpc2F0aW9uKTtcbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5vdmVyc2hvb3REZXJpbmdpbmcpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdqcGVnT3ZlcnNob290RGVyaW5naW5nJywgb3B0aW9ucy5vdmVyc2hvb3REZXJpbmdpbmcpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpbWlzZVNjYW5zID0gaXMuYm9vbChvcHRpb25zLm9wdGltaXplU2NhbnMpID8gb3B0aW9ucy5vcHRpbWl6ZVNjYW5zIDogb3B0aW9ucy5vcHRpbWlzZVNjYW5zO1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGltaXNlU2NhbnMpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdqcGVnT3B0aW1pc2VTY2FucycsIG9wdGltaXNlU2NhbnMpO1xuICAgICAgaWYgKG9wdGltaXNlU2NhbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmpwZWdQcm9ncmVzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHF1YW50aXNhdGlvblRhYmxlID0gaXMubnVtYmVyKG9wdGlvbnMucXVhbnRpemF0aW9uVGFibGUpID8gb3B0aW9ucy5xdWFudGl6YXRpb25UYWJsZSA6IG9wdGlvbnMucXVhbnRpc2F0aW9uVGFibGU7XG4gICAgaWYgKGlzLmRlZmluZWQocXVhbnRpc2F0aW9uVGFibGUpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihxdWFudGlzYXRpb25UYWJsZSkgJiYgaXMuaW5SYW5nZShxdWFudGlzYXRpb25UYWJsZSwgMCwgOCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmpwZWdRdWFudGlzYXRpb25UYWJsZSA9IHF1YW50aXNhdGlvblRhYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdxdWFudGlzYXRpb25UYWJsZScsICdpbnRlZ2VyIGJldHdlZW4gMCBhbmQgOCcsIHF1YW50aXNhdGlvblRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3VwZGF0ZUZvcm1hdE91dCgnanBlZycsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFVzZSB0aGVzZSBQTkcgb3B0aW9ucyBmb3Igb3V0cHV0IGltYWdlLlxuICpcbiAqIEJ5IGRlZmF1bHQsIFBORyBvdXRwdXQgaXMgZnVsbCBjb2xvdXIgYXQgOCBiaXRzIHBlciBwaXhlbC5cbiAqXG4gKiBJbmRleGVkIFBORyBpbnB1dCBhdCAxLCAyIG9yIDQgYml0cyBwZXIgcGl4ZWwgaXMgY29udmVydGVkIHRvIDggYml0cyBwZXIgcGl4ZWwuXG4gKiBTZXQgYHBhbGV0dGVgIHRvIGB0cnVlYCBmb3Igc2xvd2VyLCBpbmRleGVkIFBORyBvdXRwdXQuXG4gKlxuICogRm9yIDE2IGJpdHMgcGVyIHBpeGVsIG91dHB1dCwgY29udmVydCB0byBgcmdiMTZgIHZpYVxuICoge0BsaW5rIC9hcGktY29sb3VyI3RvY29sb3Vyc3BhY2V8dG9Db2xvdXJzcGFjZX0uXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgYW55IGlucHV0IHRvIGZ1bGwgY29sb3VyIFBORyBvdXRwdXRcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLnBuZygpXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IGFueSBpbnB1dCB0byBpbmRleGVkIFBORyBvdXRwdXQgKHNsb3dlcilcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLnBuZyh7IHBhbGV0dGU6IHRydWUgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE91dHB1dCAxNiBiaXRzIHBlciBwaXhlbCBSR0IoQSlcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAudG9Db2xvdXJzcGFjZSgncmdiMTYnKVxuICogIC5wbmcoKVxuICogIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJvZ3Jlc3NpdmU9ZmFsc2VdIC0gdXNlIHByb2dyZXNzaXZlIChpbnRlcmxhY2UpIHNjYW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jb21wcmVzc2lvbkxldmVsPTZdIC0gemxpYiBjb21wcmVzc2lvbiBsZXZlbCwgMCAoZmFzdGVzdCwgbGFyZ2VzdCkgdG8gOSAoc2xvd2VzdCwgc21hbGxlc3QpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFkYXB0aXZlRmlsdGVyaW5nPWZhbHNlXSAtIHVzZSBhZGFwdGl2ZSByb3cgZmlsdGVyaW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnBhbGV0dGU9ZmFsc2VdIC0gcXVhbnRpc2UgdG8gYSBwYWxldHRlLWJhc2VkIGltYWdlIHdpdGggYWxwaGEgdHJhbnNwYXJlbmN5IHN1cHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5xdWFsaXR5PTEwMF0gLSB1c2UgdGhlIGxvd2VzdCBudW1iZXIgb2YgY29sb3VycyBuZWVkZWQgdG8gYWNoaWV2ZSBnaXZlbiBxdWFsaXR5LCBzZXRzIGBwYWxldHRlYCB0byBgdHJ1ZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5lZmZvcnQ9N10gLSBDUFUgZWZmb3J0LCBiZXR3ZWVuIDEgKGZhc3Rlc3QpIGFuZCAxMCAoc2xvd2VzdCksIHNldHMgYHBhbGV0dGVgIHRvIGB0cnVlYFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNvbG91cnM9MjU2XSAtIG1heGltdW0gbnVtYmVyIG9mIHBhbGV0dGUgZW50cmllcywgc2V0cyBgcGFsZXR0ZWAgdG8gYHRydWVgXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY29sb3JzPTI1Nl0gLSBhbHRlcm5hdGl2ZSBzcGVsbGluZyBvZiBgb3B0aW9ucy5jb2xvdXJzYCwgc2V0cyBgcGFsZXR0ZWAgdG8gYHRydWVgXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGl0aGVyPTEuMF0gLSBsZXZlbCBvZiBGbG95ZC1TdGVpbmJlcmcgZXJyb3IgZGlmZnVzaW9uLCBzZXRzIGBwYWxldHRlYCB0byBgdHJ1ZWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9yY2U9dHJ1ZV0gLSBmb3JjZSBQTkcgb3V0cHV0LCBvdGhlcndpc2UgYXR0ZW1wdCB0byB1c2UgaW5wdXQgZm9ybWF0XG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHBuZyAob3B0aW9ucykge1xuICBpZiAoaXMub2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5wcm9ncmVzc2l2ZSkpIHtcbiAgICAgIHRoaXMuX3NldEJvb2xlYW5PcHRpb24oJ3BuZ1Byb2dyZXNzaXZlJywgb3B0aW9ucy5wcm9ncmVzc2l2ZSk7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuY29tcHJlc3Npb25MZXZlbCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMuY29tcHJlc3Npb25MZXZlbCkgJiYgaXMuaW5SYW5nZShvcHRpb25zLmNvbXByZXNzaW9uTGV2ZWwsIDAsIDkpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wbmdDb21wcmVzc2lvbkxldmVsID0gb3B0aW9ucy5jb21wcmVzc2lvbkxldmVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdjb21wcmVzc2lvbkxldmVsJywgJ2ludGVnZXIgYmV0d2VlbiAwIGFuZCA5Jywgb3B0aW9ucy5jb21wcmVzc2lvbkxldmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5hZGFwdGl2ZUZpbHRlcmluZykpIHtcbiAgICAgIHRoaXMuX3NldEJvb2xlYW5PcHRpb24oJ3BuZ0FkYXB0aXZlRmlsdGVyaW5nJywgb3B0aW9ucy5hZGFwdGl2ZUZpbHRlcmluZyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbG91cnMgPSBvcHRpb25zLmNvbG91cnMgfHwgb3B0aW9ucy5jb2xvcnM7XG4gICAgaWYgKGlzLmRlZmluZWQoY29sb3VycykpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKGNvbG91cnMpICYmIGlzLmluUmFuZ2UoY29sb3VycywgMiwgMjU2KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMucG5nQml0ZGVwdGggPSBiaXRkZXB0aEZyb21Db2xvdXJDb3VudChjb2xvdXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignY29sb3VycycsICdpbnRlZ2VyIGJldHdlZW4gMiBhbmQgMjU2JywgY29sb3Vycyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucGFsZXR0ZSkpIHtcbiAgICAgIHRoaXMuX3NldEJvb2xlYW5PcHRpb24oJ3BuZ1BhbGV0dGUnLCBvcHRpb25zLnBhbGV0dGUpO1xuICAgIH0gZWxzZSBpZiAoW29wdGlvbnMucXVhbGl0eSwgb3B0aW9ucy5lZmZvcnQsIG9wdGlvbnMuY29sb3Vycywgb3B0aW9ucy5jb2xvcnMsIG9wdGlvbnMuZGl0aGVyXS5zb21lKGlzLmRlZmluZWQpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdwbmdQYWxldHRlJywgdHJ1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMucG5nUGFsZXR0ZSkge1xuICAgICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5xdWFsaXR5KSkge1xuICAgICAgICBpZiAoaXMuaW50ZWdlcihvcHRpb25zLnF1YWxpdHkpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5xdWFsaXR5LCAwLCAxMDApKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBuZ1F1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdxdWFsaXR5JywgJ2ludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDAnLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmVmZm9ydCkpIHtcbiAgICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5lZmZvcnQpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5lZmZvcnQsIDEsIDEwKSkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5wbmdFZmZvcnQgPSBvcHRpb25zLmVmZm9ydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2VmZm9ydCcsICdpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAnLCBvcHRpb25zLmVmZm9ydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuZGl0aGVyKSkge1xuICAgICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMuZGl0aGVyKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMuZGl0aGVyLCAwLCAxKSkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5wbmdEaXRoZXIgPSBvcHRpb25zLmRpdGhlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2RpdGhlcicsICdudW1iZXIgYmV0d2VlbiAwLjAgYW5kIDEuMCcsIG9wdGlvbnMuZGl0aGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcy5fdXBkYXRlRm9ybWF0T3V0KCdwbmcnLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBVc2UgdGhlc2UgV2ViUCBvcHRpb25zIGZvciBvdXRwdXQgaW1hZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgYW55IGlucHV0IHRvIGxvc3NsZXNzIFdlYlAgb3V0cHV0XG4gKiBjb25zdCBkYXRhID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC53ZWJwKHsgbG9zc2xlc3M6IHRydWUgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9wdGltaXNlIHRoZSBmaWxlIHNpemUgb2YgYW4gYW5pbWF0ZWQgV2ViUFxuICogY29uc3Qgb3V0cHV0V2VicCA9IGF3YWl0IHNoYXJwKGlucHV0V2VicCwgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICogICAud2VicCh7IGVmZm9ydDogNiB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5xdWFsaXR5PTgwXSAtIHF1YWxpdHksIGludGVnZXIgMS0xMDBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5hbHBoYVF1YWxpdHk9MTAwXSAtIHF1YWxpdHkgb2YgYWxwaGEgbGF5ZXIsIGludGVnZXIgMC0xMDBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubG9zc2xlc3M9ZmFsc2VdIC0gdXNlIGxvc3NsZXNzIGNvbXByZXNzaW9uIG1vZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubmVhckxvc3NsZXNzPWZhbHNlXSAtIHVzZSBuZWFyX2xvc3NsZXNzIGNvbXByZXNzaW9uIG1vZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuc21hcnRTdWJzYW1wbGU9ZmFsc2VdIC0gdXNlIGhpZ2ggcXVhbGl0eSBjaHJvbWEgc3Vic2FtcGxpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5wcmVzZXQ9J2RlZmF1bHQnXSAtIG5hbWVkIHByZXNldCBmb3IgcHJlcHJvY2Vzc2luZy9maWx0ZXJpbmcsIG9uZSBvZjogZGVmYXVsdCwgcGhvdG8sIHBpY3R1cmUsIGRyYXdpbmcsIGljb24sIHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5lZmZvcnQ9NF0gLSBDUFUgZWZmb3J0LCBiZXR3ZWVuIDAgKGZhc3Rlc3QpIGFuZCA2IChzbG93ZXN0KVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3A9MF0gLSBudW1iZXIgb2YgYW5pbWF0aW9uIGl0ZXJhdGlvbnMsIHVzZSAwIGZvciBpbmZpbml0ZSBhbmltYXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbb3B0aW9ucy5kZWxheV0gLSBkZWxheShzKSBiZXR3ZWVuIGFuaW1hdGlvbiBmcmFtZXMgKGluIG1pbGxpc2Vjb25kcylcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubWluU2l6ZT1mYWxzZV0gLSBwcmV2ZW50IHVzZSBvZiBhbmltYXRpb24ga2V5IGZyYW1lcyB0byBtaW5pbWlzZSBmaWxlIHNpemUgKHNsb3cpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1peGVkPWZhbHNlXSAtIGFsbG93IG1peHR1cmUgb2YgbG9zc3kgYW5kIGxvc3NsZXNzIGFuaW1hdGlvbiBmcmFtZXMgKHNsb3cpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZvcmNlPXRydWVdIC0gZm9yY2UgV2ViUCBvdXRwdXQsIG90aGVyd2lzZSBhdHRlbXB0IHRvIHVzZSBpbnB1dCBmb3JtYXRcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gd2VicCAob3B0aW9ucykge1xuICBpZiAoaXMub2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5xdWFsaXR5KSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5xdWFsaXR5KSAmJiBpcy5pblJhbmdlKG9wdGlvbnMucXVhbGl0eSwgMSwgMTAwKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMud2VicFF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3F1YWxpdHknLCAnaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMCcsIG9wdGlvbnMucXVhbGl0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuYWxwaGFRdWFsaXR5KSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5hbHBoYVF1YWxpdHkpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5hbHBoYVF1YWxpdHksIDAsIDEwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLndlYnBBbHBoYVF1YWxpdHkgPSBvcHRpb25zLmFscGhhUXVhbGl0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignYWxwaGFRdWFsaXR5JywgJ2ludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDAnLCBvcHRpb25zLmFscGhhUXVhbGl0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMubG9zc2xlc3MpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd3ZWJwTG9zc2xlc3MnLCBvcHRpb25zLmxvc3NsZXNzKTtcbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5uZWFyTG9zc2xlc3MpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd3ZWJwTmVhckxvc3NsZXNzJywgb3B0aW9ucy5uZWFyTG9zc2xlc3MpO1xuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLnNtYXJ0U3Vic2FtcGxlKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbignd2VicFNtYXJ0U3Vic2FtcGxlJywgb3B0aW9ucy5zbWFydFN1YnNhbXBsZSk7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucHJlc2V0KSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLnByZXNldCkgJiYgaXMuaW5BcnJheShvcHRpb25zLnByZXNldCwgWydkZWZhdWx0JywgJ3Bob3RvJywgJ3BpY3R1cmUnLCAnZHJhd2luZycsICdpY29uJywgJ3RleHQnXSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLndlYnBQcmVzZXQgPSBvcHRpb25zLnByZXNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigncHJlc2V0JywgJ29uZSBvZjogZGVmYXVsdCwgcGhvdG8sIHBpY3R1cmUsIGRyYXdpbmcsIGljb24sIHRleHQnLCBvcHRpb25zLnByZXNldCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuZWZmb3J0KSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5lZmZvcnQpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5lZmZvcnQsIDAsIDYpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy53ZWJwRWZmb3J0ID0gb3B0aW9ucy5lZmZvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2VmZm9ydCcsICdpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNicsIG9wdGlvbnMuZWZmb3J0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5taW5TaXplKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbignd2VicE1pblNpemUnLCBvcHRpb25zLm1pblNpemUpO1xuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLm1peGVkKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbignd2VicE1peGVkJywgb3B0aW9ucy5taXhlZCk7XG4gICAgfVxuICB9XG4gIHRyeVNldEFuaW1hdGlvbk9wdGlvbnMob3B0aW9ucywgdGhpcy5vcHRpb25zKTtcbiAgcmV0dXJuIHRoaXMuX3VwZGF0ZUZvcm1hdE91dCgnd2VicCcsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFVzZSB0aGVzZSBHSUYgb3B0aW9ucyBmb3IgdGhlIG91dHB1dCBpbWFnZS5cbiAqXG4gKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhbGV0dGUgaXMgcmVzZXJ2ZWQgZm9yIHRyYW5zcGFyZW5jeS5cbiAqXG4gKiBUaGUgcGFsZXR0ZSBvZiB0aGUgaW5wdXQgaW1hZ2Ugd2lsbCBiZSByZS11c2VkIGlmIHBvc3NpYmxlLlxuICpcbiAqIEBzaW5jZSAwLjMwLjBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBQTkcgdG8gR0lGXG4gKiBhd2FpdCBzaGFycChwbmdCdWZmZXIpXG4gKiAgIC5naWYoKVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBhbmltYXRlZCBXZWJQIHRvIGFuaW1hdGVkIEdJRlxuICogYXdhaXQgc2hhcnAoJ2FuaW1hdGVkLndlYnAnLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gKiAgIC50b0ZpbGUoJ2FuaW1hdGVkLmdpZicpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSAxMjh4MTI4LCBjcm9wcGVkLCBub24tZGl0aGVyZWQsIGFuaW1hdGVkIHRodW1ibmFpbCBvZiBhbiBhbmltYXRlZCBHSUZcbiAqIGNvbnN0IG91dCA9IGF3YWl0IHNoYXJwKCdpbi5naWYnLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gKiAgIC5yZXNpemUoeyB3aWR0aDogMTI4LCBoZWlnaHQ6IDEyOCB9KVxuICogICAuZ2lmKHsgZGl0aGVyOiAwIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBMb3NzeSBmaWxlIHNpemUgcmVkdWN0aW9uIG9mIGFuaW1hdGVkIEdJRlxuICogYXdhaXQgc2hhcnAoJ2luLmdpZicsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcbiAqICAgLmdpZih7IGludGVyRnJhbWVNYXhFcnJvcjogOCB9KVxuICogICAudG9GaWxlKCdvcHRpbS5naWYnKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmV1c2U9dHJ1ZV0gLSByZS11c2UgZXhpc3RpbmcgcGFsZXR0ZSwgb3RoZXJ3aXNlIGdlbmVyYXRlIG5ldyAoc2xvdylcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJvZ3Jlc3NpdmU9ZmFsc2VdIC0gdXNlIHByb2dyZXNzaXZlIChpbnRlcmxhY2UpIHNjYW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jb2xvdXJzPTI1Nl0gLSBtYXhpbXVtIG51bWJlciBvZiBwYWxldHRlIGVudHJpZXMsIGluY2x1ZGluZyB0cmFuc3BhcmVuY3ksIGJldHdlZW4gMiBhbmQgMjU2XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY29sb3JzPTI1Nl0gLSBhbHRlcm5hdGl2ZSBzcGVsbGluZyBvZiBgb3B0aW9ucy5jb2xvdXJzYFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVmZm9ydD03XSAtIENQVSBlZmZvcnQsIGJldHdlZW4gMSAoZmFzdGVzdCkgYW5kIDEwIChzbG93ZXN0KVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRpdGhlcj0xLjBdIC0gbGV2ZWwgb2YgRmxveWQtU3RlaW5iZXJnIGVycm9yIGRpZmZ1c2lvbiwgYmV0d2VlbiAwIChsZWFzdCkgYW5kIDEgKG1vc3QpXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuaW50ZXJGcmFtZU1heEVycm9yPTBdIC0gbWF4aW11bSBpbnRlci1mcmFtZSBlcnJvciBmb3IgdHJhbnNwYXJlbmN5LCBiZXR3ZWVuIDAgKGxvc3NsZXNzKSBhbmQgMzJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5pbnRlclBhbGV0dGVNYXhFcnJvcj0zXSAtIG1heGltdW0gaW50ZXItcGFsZXR0ZSBlcnJvciBmb3IgcGFsZXR0ZSByZXVzZSwgYmV0d2VlbiAwIGFuZCAyNTZcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wPTBdIC0gbnVtYmVyIG9mIGFuaW1hdGlvbiBpdGVyYXRpb25zLCB1c2UgMCBmb3IgaW5maW5pdGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxudW1iZXJbXX0gW29wdGlvbnMuZGVsYXldIC0gZGVsYXkocykgYmV0d2VlbiBhbmltYXRpb24gZnJhbWVzIChpbiBtaWxsaXNlY29uZHMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZvcmNlPXRydWVdIC0gZm9yY2UgR0lGIG91dHB1dCwgb3RoZXJ3aXNlIGF0dGVtcHQgdG8gdXNlIGlucHV0IGZvcm1hdFxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBnaWYgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucmV1c2UpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCdnaWZSZXVzZScsIG9wdGlvbnMucmV1c2UpO1xuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLnByb2dyZXNzaXZlKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbignZ2lmUHJvZ3Jlc3NpdmUnLCBvcHRpb25zLnByb2dyZXNzaXZlKTtcbiAgICB9XG4gICAgY29uc3QgY29sb3VycyA9IG9wdGlvbnMuY29sb3VycyB8fCBvcHRpb25zLmNvbG9ycztcbiAgICBpZiAoaXMuZGVmaW5lZChjb2xvdXJzKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIoY29sb3VycykgJiYgaXMuaW5SYW5nZShjb2xvdXJzLCAyLCAyNTYpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5naWZCaXRkZXB0aCA9IGJpdGRlcHRoRnJvbUNvbG91ckNvdW50KGNvbG91cnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdjb2xvdXJzJywgJ2ludGVnZXIgYmV0d2VlbiAyIGFuZCAyNTYnLCBjb2xvdXJzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5lZmZvcnQpKSB7XG4gICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMuZWZmb3J0KSAmJiBpcy5pblJhbmdlKG9wdGlvbnMuZWZmb3J0LCAxLCAxMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmdpZkVmZm9ydCA9IG9wdGlvbnMuZWZmb3J0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdlZmZvcnQnLCAnaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwJywgb3B0aW9ucy5lZmZvcnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmRpdGhlcikpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5kaXRoZXIpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5kaXRoZXIsIDAsIDEpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5naWZEaXRoZXIgPSBvcHRpb25zLmRpdGhlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZGl0aGVyJywgJ251bWJlciBiZXR3ZWVuIDAuMCBhbmQgMS4wJywgb3B0aW9ucy5kaXRoZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmludGVyRnJhbWVNYXhFcnJvcikpIHtcbiAgICAgIGlmIChpcy5udW1iZXIob3B0aW9ucy5pbnRlckZyYW1lTWF4RXJyb3IpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5pbnRlckZyYW1lTWF4RXJyb3IsIDAsIDMyKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZ2lmSW50ZXJGcmFtZU1heEVycm9yID0gb3B0aW9ucy5pbnRlckZyYW1lTWF4RXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2ludGVyRnJhbWVNYXhFcnJvcicsICdudW1iZXIgYmV0d2VlbiAwLjAgYW5kIDMyLjAnLCBvcHRpb25zLmludGVyRnJhbWVNYXhFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuaW50ZXJQYWxldHRlTWF4RXJyb3IpKSB7XG4gICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMuaW50ZXJQYWxldHRlTWF4RXJyb3IpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5pbnRlclBhbGV0dGVNYXhFcnJvciwgMCwgMjU2KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZ2lmSW50ZXJQYWxldHRlTWF4RXJyb3IgPSBvcHRpb25zLmludGVyUGFsZXR0ZU1heEVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdpbnRlclBhbGV0dGVNYXhFcnJvcicsICdudW1iZXIgYmV0d2VlbiAwLjAgYW5kIDI1Ni4wJywgb3B0aW9ucy5pbnRlclBhbGV0dGVNYXhFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHRyeVNldEFuaW1hdGlvbk9wdGlvbnMob3B0aW9ucywgdGhpcy5vcHRpb25zKTtcbiAgcmV0dXJuIHRoaXMuX3VwZGF0ZUZvcm1hdE91dCgnZ2lmJywgb3B0aW9ucyk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKipcbiAqIFVzZSB0aGVzZSBKUDIgb3B0aW9ucyBmb3Igb3V0cHV0IGltYWdlLlxuICpcbiAqIFJlcXVpcmVzIGxpYnZpcHMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBPcGVuSlBFRy5cbiAqIFRoZSBwcmVidWlsdCBiaW5hcmllcyBkbyBub3QgaW5jbHVkZSB0aGlzIC0gc2VlXG4gKiB7QGxpbmsgaHR0cHM6Ly9zaGFycC5waXhlbHBsdW1iaW5nLmNvbS9pbnN0YWxsI2N1c3RvbS1saWJ2aXBzIGluc3RhbGxpbmcgYSBjdXN0b20gbGlidmlwc30uXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgYW55IGlucHV0IHRvIGxvc3NsZXNzIEpQMiBvdXRwdXRcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLmpwMih7IGxvc3NsZXNzOiB0cnVlIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IGFueSBpbnB1dCB0byB2ZXJ5IGhpZ2ggcXVhbGl0eSBKUDIgb3V0cHV0XG4gKiBjb25zdCBkYXRhID0gYXdhaXQgc2hhcnAoaW5wdXQpXG4gKiAgIC5qcDIoe1xuICogICAgIHF1YWxpdHk6IDEwMCxcbiAqICAgICBjaHJvbWFTdWJzYW1wbGluZzogJzQ6NDo0J1xuICogICB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAc2luY2UgMC4yOS4xXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIG91dHB1dCBvcHRpb25zXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucXVhbGl0eT04MF0gLSBxdWFsaXR5LCBpbnRlZ2VyIDEtMTAwXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvc3NsZXNzPWZhbHNlXSAtIHVzZSBsb3NzbGVzcyBjb21wcmVzc2lvbiBtb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGlsZVdpZHRoPTUxMl0gLSBob3Jpem9udGFsIHRpbGUgc2l6ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbGVIZWlnaHQ9NTEyXSAtIHZlcnRpY2FsIHRpbGUgc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nPSc0OjQ6NCddIC0gc2V0IHRvICc0OjI6MCcgdG8gdXNlIGNocm9tYSBzdWJzYW1wbGluZ1xuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBqcDIgKG9wdGlvbnMpIHtcbiAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLmZvcm1hdC5qcDJrLm91dHB1dC5idWZmZXIpIHtcbiAgICB0aHJvdyBlcnJKcDJTYXZlKCk7XG4gIH1cbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucXVhbGl0eSkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMucXVhbGl0eSkgJiYgaXMuaW5SYW5nZShvcHRpb25zLnF1YWxpdHksIDEsIDEwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmpwMlF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3F1YWxpdHknLCAnaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMCcsIG9wdGlvbnMucXVhbGl0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMubG9zc2xlc3MpKSB7XG4gICAgICBpZiAoaXMuYm9vbChvcHRpb25zLmxvc3NsZXNzKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuanAyTG9zc2xlc3MgPSBvcHRpb25zLmxvc3NsZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdsb3NzbGVzcycsICdib29sZWFuJywgb3B0aW9ucy5sb3NzbGVzcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMudGlsZVdpZHRoKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy50aWxlV2lkdGgpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy50aWxlV2lkdGgsIDEsIDMyNzY4KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuanAyVGlsZVdpZHRoID0gb3B0aW9ucy50aWxlV2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3RpbGVXaWR0aCcsICdpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzI3NjgnLCBvcHRpb25zLnRpbGVXaWR0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMudGlsZUhlaWdodCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMudGlsZUhlaWdodCkgJiYgaXMuaW5SYW5nZShvcHRpb25zLnRpbGVIZWlnaHQsIDEsIDMyNzY4KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuanAyVGlsZUhlaWdodCA9IG9wdGlvbnMudGlsZUhlaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGlsZUhlaWdodCcsICdpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzI3NjgnLCBvcHRpb25zLnRpbGVIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nKSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nKSAmJiBpcy5pbkFycmF5KG9wdGlvbnMuY2hyb21hU3Vic2FtcGxpbmcsIFsnNDoyOjAnLCAnNDo0OjQnXSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmpwMkNocm9tYVN1YnNhbXBsaW5nID0gb3B0aW9ucy5jaHJvbWFTdWJzYW1wbGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignY2hyb21hU3Vic2FtcGxpbmcnLCAnb25lIG9mOiA0OjI6MCwgNDo0OjQnLCBvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3VwZGF0ZUZvcm1hdE91dCgnanAyJywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogU2V0IGFuaW1hdGlvbiBvcHRpb25zIGlmIGF2YWlsYWJsZS5cbiAqIEBwcml2YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtzb3VyY2VdIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc291cmNlLmxvb3A9MF0gLSBudW1iZXIgb2YgYW5pbWF0aW9uIGl0ZXJhdGlvbnMsIHVzZSAwIGZvciBpbmZpbml0ZSBhbmltYXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyW119IFtzb3VyY2UuZGVsYXldIC0gbGlzdCBvZiBkZWxheXMgYmV0d2VlbiBhbmltYXRpb24gZnJhbWVzIChpbiBtaWxsaXNlY29uZHMpXG4gKiBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gLSB0YXJnZXQgb2JqZWN0IGZvciB2YWxpZCBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHRyeVNldEFuaW1hdGlvbk9wdGlvbnMgKHNvdXJjZSwgdGFyZ2V0KSB7XG4gIGlmIChpcy5vYmplY3Qoc291cmNlKSAmJiBpcy5kZWZpbmVkKHNvdXJjZS5sb29wKSkge1xuICAgIGlmIChpcy5pbnRlZ2VyKHNvdXJjZS5sb29wKSAmJiBpcy5pblJhbmdlKHNvdXJjZS5sb29wLCAwLCA2NTUzNSkpIHtcbiAgICAgIHRhcmdldC5sb29wID0gc291cmNlLmxvb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignbG9vcCcsICdpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNjU1MzUnLCBzb3VyY2UubG9vcCk7XG4gICAgfVxuICB9XG4gIGlmIChpcy5vYmplY3Qoc291cmNlKSAmJiBpcy5kZWZpbmVkKHNvdXJjZS5kZWxheSkpIHtcbiAgICAvLyBXZSBhbGxvdyBzaW5ndWxhciB2YWx1ZXMgYXMgd2VsbFxuICAgIGlmIChpcy5pbnRlZ2VyKHNvdXJjZS5kZWxheSkgJiYgaXMuaW5SYW5nZShzb3VyY2UuZGVsYXksIDAsIDY1NTM1KSkge1xuICAgICAgdGFyZ2V0LmRlbGF5ID0gW3NvdXJjZS5kZWxheV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIEFycmF5LmlzQXJyYXkoc291cmNlLmRlbGF5KSAmJlxuICAgICAgc291cmNlLmRlbGF5LmV2ZXJ5KGlzLmludGVnZXIpICYmXG4gICAgICBzb3VyY2UuZGVsYXkuZXZlcnkodiA9PiBpcy5pblJhbmdlKHYsIDAsIDY1NTM1KSkpIHtcbiAgICAgIHRhcmdldC5kZWxheSA9IHNvdXJjZS5kZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdkZWxheScsICdpbnRlZ2VyIG9yIGFuIGFycmF5IG9mIGludGVnZXJzIGJldHdlZW4gMCBhbmQgNjU1MzUnLCBzb3VyY2UuZGVsYXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFVzZSB0aGVzZSBUSUZGIG9wdGlvbnMgZm9yIG91dHB1dCBpbWFnZS5cbiAqXG4gKiBUaGUgYGRlbnNpdHlgIGNhbiBiZSBzZXQgaW4gcGl4ZWxzL2luY2ggdmlhIHtAbGluayAjd2l0aG1ldGFkYXRhfHdpdGhNZXRhZGF0YX1cbiAqIGluc3RlYWQgb2YgcHJvdmlkaW5nIGB4cmVzYCBhbmQgYHlyZXNgIGluIHBpeGVscy9tbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBTVkcgaW5wdXQgdG8gTFpXLWNvbXByZXNzZWQsIDEgYml0IHBlciBwaXhlbCBUSUZGIG91dHB1dFxuICogc2hhcnAoJ2lucHV0LnN2ZycpXG4gKiAgIC50aWZmKHtcbiAqICAgICBjb21wcmVzc2lvbjogJ2x6dycsXG4gKiAgICAgYml0ZGVwdGg6IDFcbiAqICAgfSlcbiAqICAgLnRvRmlsZSgnMS1icHAtb3V0cHV0LnRpZmYnKVxuICogICAudGhlbihpbmZvID0+IHsgLi4uIH0pO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBvdXRwdXQgb3B0aW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnF1YWxpdHk9ODBdIC0gcXVhbGl0eSwgaW50ZWdlciAxLTEwMFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZT10cnVlXSAtIGZvcmNlIFRJRkYgb3V0cHV0LCBvdGhlcndpc2UgYXR0ZW1wdCB0byB1c2UgaW5wdXQgZm9ybWF0XG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29tcHJlc3Npb249J2pwZWcnXSAtIGNvbXByZXNzaW9uIG9wdGlvbnM6IG5vbmUsIGpwZWcsIGRlZmxhdGUsIHBhY2tiaXRzLCBjY2l0dGZheDQsIGx6dywgd2VicCwgenN0ZCwganAya1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnByZWRpY3Rvcj0naG9yaXpvbnRhbCddIC0gY29tcHJlc3Npb24gcHJlZGljdG9yIG9wdGlvbnM6IG5vbmUsIGhvcml6b250YWwsIGZsb2F0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnB5cmFtaWQ9ZmFsc2VdIC0gd3JpdGUgYW4gaW1hZ2UgcHlyYW1pZFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50aWxlPWZhbHNlXSAtIHdyaXRlIGEgdGlsZWQgdGlmZlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbGVXaWR0aD0yNTZdIC0gaG9yaXpvbnRhbCB0aWxlIHNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aWxlSGVpZ2h0PTI1Nl0gLSB2ZXJ0aWNhbCB0aWxlIHNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy54cmVzPTEuMF0gLSBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gcGl4ZWxzL21tXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMueXJlcz0xLjBdIC0gdmVydGljYWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMvbW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5yZXNvbHV0aW9uVW5pdD0naW5jaCddIC0gcmVzb2x1dGlvbiB1bml0IG9wdGlvbnM6IGluY2gsIGNtXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYml0ZGVwdGg9OF0gLSByZWR1Y2UgYml0ZGVwdGggdG8gMSwgMiBvciA0IGJpdFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5taW5pc3doaXRlPWZhbHNlXSAtIHdyaXRlIDEtYml0IGltYWdlcyBhcyBtaW5pc3doaXRlXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHRpZmYgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucXVhbGl0eSkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMucXVhbGl0eSkgJiYgaXMuaW5SYW5nZShvcHRpb25zLnF1YWxpdHksIDEsIDEwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpZmZRdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdxdWFsaXR5JywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDAnLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmJpdGRlcHRoKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5iaXRkZXB0aCkgJiYgaXMuaW5BcnJheShvcHRpb25zLmJpdGRlcHRoLCBbMSwgMiwgNCwgOF0pKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy50aWZmQml0ZGVwdGggPSBvcHRpb25zLmJpdGRlcHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdiaXRkZXB0aCcsICcxLCAyLCA0IG9yIDgnLCBvcHRpb25zLmJpdGRlcHRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGlsaW5nXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy50aWxlKSkge1xuICAgICAgdGhpcy5fc2V0Qm9vbGVhbk9wdGlvbigndGlmZlRpbGUnLCBvcHRpb25zLnRpbGUpO1xuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLnRpbGVXaWR0aCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMudGlsZVdpZHRoKSAmJiBvcHRpb25zLnRpbGVXaWR0aCA+IDApIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpZmZUaWxlV2lkdGggPSBvcHRpb25zLnRpbGVXaWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigndGlsZVdpZHRoJywgJ2ludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8nLCBvcHRpb25zLnRpbGVXaWR0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMudGlsZUhlaWdodCkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMudGlsZUhlaWdodCkgJiYgb3B0aW9ucy50aWxlSGVpZ2h0ID4gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudGlmZlRpbGVIZWlnaHQgPSBvcHRpb25zLnRpbGVIZWlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3RpbGVIZWlnaHQnLCAnaW50ZWdlciBncmVhdGVyIHRoYW4gemVybycsIG9wdGlvbnMudGlsZUhlaWdodCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1pbmlzd2hpdGVcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLm1pbmlzd2hpdGUpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd0aWZmTWluaXN3aGl0ZScsIG9wdGlvbnMubWluaXN3aGl0ZSk7XG4gICAgfVxuICAgIC8vIHB5cmFtaWRcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLnB5cmFtaWQpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd0aWZmUHlyYW1pZCcsIG9wdGlvbnMucHlyYW1pZCk7XG4gICAgfVxuICAgIC8vIHJlc29sdXRpb25cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLnhyZXMpKSB7XG4gICAgICBpZiAoaXMubnVtYmVyKG9wdGlvbnMueHJlcykgJiYgb3B0aW9ucy54cmVzID4gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudGlmZlhyZXMgPSBvcHRpb25zLnhyZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3hyZXMnLCAnbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvJywgb3B0aW9ucy54cmVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy55cmVzKSkge1xuICAgICAgaWYgKGlzLm51bWJlcihvcHRpb25zLnlyZXMpICYmIG9wdGlvbnMueXJlcyA+IDApIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpZmZZcmVzID0gb3B0aW9ucy55cmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCd5cmVzJywgJ251bWJlciBncmVhdGVyIHRoYW4gemVybycsIG9wdGlvbnMueXJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbXByZXNzaW9uXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5jb21wcmVzc2lvbikpIHtcbiAgICAgIGlmIChpcy5zdHJpbmcob3B0aW9ucy5jb21wcmVzc2lvbikgJiYgaXMuaW5BcnJheShvcHRpb25zLmNvbXByZXNzaW9uLCBbJ25vbmUnLCAnanBlZycsICdkZWZsYXRlJywgJ3BhY2tiaXRzJywgJ2NjaXR0ZmF4NCcsICdsencnLCAnd2VicCcsICd6c3RkJywgJ2pwMmsnXSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpZmZDb21wcmVzc2lvbiA9IG9wdGlvbnMuY29tcHJlc3Npb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2NvbXByZXNzaW9uJywgJ29uZSBvZjogbm9uZSwganBlZywgZGVmbGF0ZSwgcGFja2JpdHMsIGNjaXR0ZmF4NCwgbHp3LCB3ZWJwLCB6c3RkLCBqcDJrJywgb3B0aW9ucy5jb21wcmVzc2lvbik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHByZWRpY3RvclxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucHJlZGljdG9yKSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLnByZWRpY3RvcikgJiYgaXMuaW5BcnJheShvcHRpb25zLnByZWRpY3RvciwgWydub25lJywgJ2hvcml6b250YWwnLCAnZmxvYXQnXSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpZmZQcmVkaWN0b3IgPSBvcHRpb25zLnByZWRpY3RvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcigncHJlZGljdG9yJywgJ29uZSBvZjogbm9uZSwgaG9yaXpvbnRhbCwgZmxvYXQnLCBvcHRpb25zLnByZWRpY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJlc29sdXRpb25Vbml0XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5yZXNvbHV0aW9uVW5pdCkpIHtcbiAgICAgIGlmIChpcy5zdHJpbmcob3B0aW9ucy5yZXNvbHV0aW9uVW5pdCkgJiYgaXMuaW5BcnJheShvcHRpb25zLnJlc29sdXRpb25Vbml0LCBbJ2luY2gnLCAnY20nXSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpZmZSZXNvbHV0aW9uVW5pdCA9IG9wdGlvbnMucmVzb2x1dGlvblVuaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3Jlc29sdXRpb25Vbml0JywgJ29uZSBvZjogaW5jaCwgY20nLCBvcHRpb25zLnJlc29sdXRpb25Vbml0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3VwZGF0ZUZvcm1hdE91dCgndGlmZicsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFVzZSB0aGVzZSBBVklGIG9wdGlvbnMgZm9yIG91dHB1dCBpbWFnZS5cbiAqXG4gKiBBVklGIGltYWdlIHNlcXVlbmNlcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAqIFByZWJ1aWx0IGJpbmFyaWVzIHN1cHBvcnQgYSBiaXRkZXB0aCBvZiA4IG9ubHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLmF2aWYoeyBlZmZvcnQ6IDIgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLmF2aWYoeyBsb3NzbGVzczogdHJ1ZSB9KVxuICogICAudG9CdWZmZXIoKTtcbiAqXG4gKiBAc2luY2UgMC4yNy4wXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIG91dHB1dCBvcHRpb25zXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucXVhbGl0eT01MF0gLSBxdWFsaXR5LCBpbnRlZ2VyIDEtMTAwXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvc3NsZXNzPWZhbHNlXSAtIHVzZSBsb3NzbGVzcyBjb21wcmVzc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVmZm9ydD00XSAtIENQVSBlZmZvcnQsIGJldHdlZW4gMCAoZmFzdGVzdCkgYW5kIDkgKHNsb3dlc3QpXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2hyb21hU3Vic2FtcGxpbmc9JzQ6NDo0J10gLSBzZXQgdG8gJzQ6MjowJyB0byB1c2UgY2hyb21hIHN1YnNhbXBsaW5nXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYml0ZGVwdGg9OF0gLSBzZXQgYml0ZGVwdGggdG8gOCwgMTAgb3IgMTIgYml0XG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGF2aWYgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZih7IC4uLm9wdGlvbnMsIGNvbXByZXNzaW9uOiAnYXYxJyB9KTtcbn1cblxuLyoqXG4gKiBVc2UgdGhlc2UgSEVJRiBvcHRpb25zIGZvciBvdXRwdXQgaW1hZ2UuXG4gKlxuICogU3VwcG9ydCBmb3IgcGF0ZW50LWVuY3VtYmVyZWQgSEVJQyBpbWFnZXMgdXNpbmcgYGhldmNgIGNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSB1c2Ugb2YgYVxuICogZ2xvYmFsbHktaW5zdGFsbGVkIGxpYnZpcHMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBsaWJoZWlmLCBsaWJkZTI2NSBhbmQgeDI2NS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAuaGVpZih7IGNvbXByZXNzaW9uOiAnaGV2YycgfSlcbiAqICAgLnRvQnVmZmVyKCk7XG4gKlxuICogQHNpbmNlIDAuMjMuMFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNvbXByZXNzaW9uIC0gY29tcHJlc3Npb24gZm9ybWF0OiBhdjEsIGhldmNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5xdWFsaXR5PTUwXSAtIHF1YWxpdHksIGludGVnZXIgMS0xMDBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubG9zc2xlc3M9ZmFsc2VdIC0gdXNlIGxvc3NsZXNzIGNvbXByZXNzaW9uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZWZmb3J0PTRdIC0gQ1BVIGVmZm9ydCwgYmV0d2VlbiAwIChmYXN0ZXN0KSBhbmQgOSAoc2xvd2VzdClcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaHJvbWFTdWJzYW1wbGluZz0nNDo0OjQnXSAtIHNldCB0byAnNDoyOjAnIHRvIHVzZSBjaHJvbWEgc3Vic2FtcGxpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5iaXRkZXB0aD04XSAtIHNldCBiaXRkZXB0aCB0byA4LCAxMCBvciAxMiBiaXRcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gaGVpZiAob3B0aW9ucykge1xuICBpZiAoaXMub2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLmNvbXByZXNzaW9uKSAmJiBpcy5pbkFycmF5KG9wdGlvbnMuY29tcHJlc3Npb24sIFsnYXYxJywgJ2hldmMnXSkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5oZWlmQ29tcHJlc3Npb24gPSBvcHRpb25zLmNvbXByZXNzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2NvbXByZXNzaW9uJywgJ29uZSBvZjogYXYxLCBoZXZjJywgb3B0aW9ucy5jb21wcmVzc2lvbik7XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMucXVhbGl0eSkpIHtcbiAgICAgIGlmIChpcy5pbnRlZ2VyKG9wdGlvbnMucXVhbGl0eSkgJiYgaXMuaW5SYW5nZShvcHRpb25zLnF1YWxpdHksIDEsIDEwMCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlaWZRdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdxdWFsaXR5JywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDAnLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmxvc3NsZXNzKSkge1xuICAgICAgaWYgKGlzLmJvb2wob3B0aW9ucy5sb3NzbGVzcykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlaWZMb3NzbGVzcyA9IG9wdGlvbnMubG9zc2xlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2xvc3NsZXNzJywgJ2Jvb2xlYW4nLCBvcHRpb25zLmxvc3NsZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5lZmZvcnQpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihvcHRpb25zLmVmZm9ydCkgJiYgaXMuaW5SYW5nZShvcHRpb25zLmVmZm9ydCwgMCwgOSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlaWZFZmZvcnQgPSBvcHRpb25zLmVmZm9ydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZWZmb3J0JywgJ2ludGVnZXIgYmV0d2VlbiAwIGFuZCA5Jywgb3B0aW9ucy5lZmZvcnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nKSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLmNocm9tYVN1YnNhbXBsaW5nKSAmJiBpcy5pbkFycmF5KG9wdGlvbnMuY2hyb21hU3Vic2FtcGxpbmcsIFsnNDoyOjAnLCAnNDo0OjQnXSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlaWZDaHJvbWFTdWJzYW1wbGluZyA9IG9wdGlvbnMuY2hyb21hU3Vic2FtcGxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2Nocm9tYVN1YnNhbXBsaW5nJywgJ29uZSBvZjogNDoyOjAsIDQ6NDo0Jywgb3B0aW9ucy5jaHJvbWFTdWJzYW1wbGluZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuYml0ZGVwdGgpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihvcHRpb25zLmJpdGRlcHRoKSAmJiBpcy5pbkFycmF5KG9wdGlvbnMuYml0ZGVwdGgsIFs4LCAxMCwgMTJdKSkge1xuICAgICAgICBpZiAob3B0aW9ucy5iaXRkZXB0aCAhPT0gOCAmJiB0aGlzLmNvbnN0cnVjdG9yLnZlcnNpb25zLmhlaWYpIHtcbiAgICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2JpdGRlcHRoIHdoZW4gdXNpbmcgcHJlYnVpbHQgYmluYXJpZXMnLCA4LCBvcHRpb25zLmJpdGRlcHRoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMuaGVpZkJpdGRlcHRoID0gb3B0aW9ucy5iaXRkZXB0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignYml0ZGVwdGgnLCAnOCwgMTAgb3IgMTInLCBvcHRpb25zLmJpdGRlcHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdvcHRpb25zJywgJ09iamVjdCcsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiB0aGlzLl91cGRhdGVGb3JtYXRPdXQoJ2hlaWYnLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBVc2UgdGhlc2UgSlBFRy1YTCAoSlhMKSBvcHRpb25zIGZvciBvdXRwdXQgaW1hZ2UuXG4gKlxuICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCwgcGxlYXNlIGRvIG5vdCB1c2UgaW4gcHJvZHVjdGlvbiBzeXN0ZW1zLlxuICpcbiAqIFJlcXVpcmVzIGxpYnZpcHMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBsaWJqeGwuXG4gKiBUaGUgcHJlYnVpbHQgYmluYXJpZXMgZG8gbm90IGluY2x1ZGUgdGhpcyAtIHNlZVxuICoge0BsaW5rIGh0dHBzOi8vc2hhcnAucGl4ZWxwbHVtYmluZy5jb20vaW5zdGFsbCNjdXN0b20tbGlidmlwcyBpbnN0YWxsaW5nIGEgY3VzdG9tIGxpYnZpcHN9LlxuICpcbiAqIEltYWdlIG1ldGFkYXRhIChFWElGLCBYTVApIGlzIHVuc3VwcG9ydGVkLlxuICpcbiAqIEBzaW5jZSAwLjMxLjNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gb3V0cHV0IG9wdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kaXN0YW5jZT0xLjBdIC0gbWF4aW11bSBlbmNvZGluZyBlcnJvciwgYmV0d2VlbiAwIChoaWdoZXN0IHF1YWxpdHkpIGFuZCAxNSAobG93ZXN0IHF1YWxpdHkpXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucXVhbGl0eV0gLSBjYWxjdWxhdGUgYGRpc3RhbmNlYCBiYXNlZCBvbiBKUEVHLWxpa2UgcXVhbGl0eSwgYmV0d2VlbiAxIGFuZCAxMDAsIG92ZXJyaWRlcyBkaXN0YW5jZSBpZiBzcGVjaWZpZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kZWNvZGluZ1RpZXI9MF0gLSB0YXJnZXQgZGVjb2RlIHNwZWVkIHRpZXIsIGJldHdlZW4gMCAoaGlnaGVzdCBxdWFsaXR5KSBhbmQgNCAobG93ZXN0IHF1YWxpdHkpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvc3NsZXNzPWZhbHNlXSAtIHVzZSBsb3NzbGVzcyBjb21wcmVzc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVmZm9ydD03XSAtIENQVSBlZmZvcnQsIGJldHdlZW4gMyAoZmFzdGVzdCkgYW5kIDkgKHNsb3dlc3QpXG4gKiBAcmV0dXJucyB7U2hhcnB9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGp4bCAob3B0aW9ucykge1xuICBpZiAoaXMub2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5xdWFsaXR5KSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5xdWFsaXR5KSAmJiBpcy5pblJhbmdlKG9wdGlvbnMucXVhbGl0eSwgMSwgMTAwKSkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGlianhsL2xpYmp4bC9ibG9iLzBhZWVhN2YxODBiYWZkNjg5M2MxZGI4MDcyZGNiNjdkMmFhNWIwM2QvdG9vbHMvY2p4bF9tYWluLmNjI0w2NDAtTDY0NFxuICAgICAgICB0aGlzLm9wdGlvbnMuanhsRGlzdGFuY2UgPSBvcHRpb25zLnF1YWxpdHkgPj0gMzBcbiAgICAgICAgICA/IDAuMSArICgxMDAgLSBvcHRpb25zLnF1YWxpdHkpICogMC4wOVxuICAgICAgICAgIDogNTMgLyAzMDAwICogb3B0aW9ucy5xdWFsaXR5ICogb3B0aW9ucy5xdWFsaXR5IC0gMjMgLyAyMCAqIG9wdGlvbnMucXVhbGl0eSArIDI1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdxdWFsaXR5JywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDAnLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmRpc3RhbmNlKSkge1xuICAgICAgaWYgKGlzLm51bWJlcihvcHRpb25zLmRpc3RhbmNlKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMuZGlzdGFuY2UsIDAsIDE1KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuanhsRGlzdGFuY2UgPSBvcHRpb25zLmRpc3RhbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdkaXN0YW5jZScsICdudW1iZXIgYmV0d2VlbiAwLjAgYW5kIDE1LjAnLCBvcHRpb25zLmRpc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5kZWNvZGluZ1RpZXIpKSB7XG4gICAgICBpZiAoaXMuaW50ZWdlcihvcHRpb25zLmRlY29kaW5nVGllcikgJiYgaXMuaW5SYW5nZShvcHRpb25zLmRlY29kaW5nVGllciwgMCwgNCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmp4bERlY29kaW5nVGllciA9IG9wdGlvbnMuZGVjb2RpbmdUaWVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdkZWNvZGluZ1RpZXInLCAnaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDQnLCBvcHRpb25zLmRlY29kaW5nVGllcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMubG9zc2xlc3MpKSB7XG4gICAgICBpZiAoaXMuYm9vbChvcHRpb25zLmxvc3NsZXNzKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuanhsTG9zc2xlc3MgPSBvcHRpb25zLmxvc3NsZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdsb3NzbGVzcycsICdib29sZWFuJywgb3B0aW9ucy5sb3NzbGVzcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuZWZmb3J0KSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5lZmZvcnQpICYmIGlzLmluUmFuZ2Uob3B0aW9ucy5lZmZvcnQsIDMsIDkpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5qeGxFZmZvcnQgPSBvcHRpb25zLmVmZm9ydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZWZmb3J0JywgJ2ludGVnZXIgYmV0d2VlbiAzIGFuZCA5Jywgb3B0aW9ucy5lZmZvcnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcy5fdXBkYXRlRm9ybWF0T3V0KCdqeGwnLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBGb3JjZSBvdXRwdXQgdG8gYmUgcmF3LCB1bmNvbXByZXNzZWQgcGl4ZWwgZGF0YS5cbiAqIFBpeGVsIG9yZGVyaW5nIGlzIGxlZnQtdG8tcmlnaHQsIHRvcC10by1ib3R0b20sIHdpdGhvdXQgcGFkZGluZy5cbiAqIENoYW5uZWwgb3JkZXJpbmcgd2lsbCBiZSBSR0Igb3IgUkdCQSBmb3Igbm9uLWdyZXlzY2FsZSBjb2xvdXJzcGFjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEV4dHJhY3QgcmF3LCB1bnNpZ25lZCA4LWJpdCBSR0IgcGl4ZWwgZGF0YSBmcm9tIEpQRUcgaW5wdXRcbiAqIGNvbnN0IHsgZGF0YSwgaW5mbyB9ID0gYXdhaXQgc2hhcnAoJ2lucHV0LmpwZycpXG4gKiAgIC5yYXcoKVxuICogICAudG9CdWZmZXIoeyByZXNvbHZlV2l0aE9iamVjdDogdHJ1ZSB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXh0cmFjdCBhbHBoYSBjaGFubmVsIGFzIHJhdywgdW5zaWduZWQgMTYtYml0IHBpeGVsIGRhdGEgZnJvbSBQTkcgaW5wdXRcbiAqIGNvbnN0IGRhdGEgPSBhd2FpdCBzaGFycCgnaW5wdXQucG5nJylcbiAqICAgLmVuc3VyZUFscGhhKClcbiAqICAgLmV4dHJhY3RDaGFubmVsKDMpXG4gKiAgIC50b0NvbG91cnNwYWNlKCdiLXcnKVxuICogICAucmF3KHsgZGVwdGg6ICd1c2hvcnQnIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBvdXRwdXQgb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRlcHRoPSd1Y2hhciddIC0gYml0IGRlcHRoLCBvbmUgb2Y6IGNoYXIsIHVjaGFyIChkZWZhdWx0KSwgc2hvcnQsIHVzaG9ydCwgaW50LCB1aW50LCBmbG9hdCwgY29tcGxleCwgZG91YmxlLCBkcGNvbXBsZXhcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcmF3IChvcHRpb25zKSB7XG4gIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmRlcHRoKSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLmRlcHRoKSAmJiBpcy5pbkFycmF5KG9wdGlvbnMuZGVwdGgsXG4gICAgICAgIFsnY2hhcicsICd1Y2hhcicsICdzaG9ydCcsICd1c2hvcnQnLCAnaW50JywgJ3VpbnQnLCAnZmxvYXQnLCAnY29tcGxleCcsICdkb3VibGUnLCAnZHBjb21wbGV4J11cbiAgICAgICkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnJhd0RlcHRoID0gb3B0aW9ucy5kZXB0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZGVwdGgnLCAnb25lIG9mOiBjaGFyLCB1Y2hhciwgc2hvcnQsIHVzaG9ydCwgaW50LCB1aW50LCBmbG9hdCwgY29tcGxleCwgZG91YmxlLCBkcGNvbXBsZXgnLCBvcHRpb25zLmRlcHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3VwZGF0ZUZvcm1hdE91dCgncmF3Jyk7XG59XG5cbi8qKlxuICogVXNlIHRpbGUtYmFzZWQgZGVlcCB6b29tIChpbWFnZSBweXJhbWlkKSBvdXRwdXQuXG4gKlxuICogU2V0IHRoZSBmb3JtYXQgYW5kIG9wdGlvbnMgZm9yIHRpbGUgaW1hZ2VzIHZpYSB0aGUgYHRvRm9ybWF0YCwgYGpwZWdgLCBgcG5nYCBvciBgd2VicGAgZnVuY3Rpb25zLlxuICogVXNlIGEgYC56aXBgIG9yIGAuc3ppYCBmaWxlIGV4dGVuc2lvbiB3aXRoIGB0b0ZpbGVgIHRvIHdyaXRlIHRvIGEgY29tcHJlc3NlZCBhcmNoaXZlIGZpbGUgZm9ybWF0LlxuICpcbiAqIFRoZSBjb250YWluZXIgd2lsbCBiZSBzZXQgdG8gYHppcGAgd2hlbiB0aGUgb3V0cHV0IGlzIGEgQnVmZmVyIG9yIFN0cmVhbSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBgZnNgLlxuICpcbiAqIFJlcXVpcmVzIGxpYnZpcHMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBsaWJnc2YuXG4gKiBUaGUgcHJlYnVpbHQgYmluYXJpZXMgZG8gbm90IGluY2x1ZGUgdGhpcyAtIHNlZVxuICoge0BsaW5rIGh0dHBzOi8vc2hhcnAucGl4ZWxwbHVtYmluZy5jb20vaW5zdGFsbCNjdXN0b20tbGlidmlwcyBpbnN0YWxsaW5nIGEgY3VzdG9tIGxpYnZpcHN9LlxuICpcbiAqIEBleGFtcGxlXG4gKiAgc2hhcnAoJ2lucHV0LnRpZmYnKVxuICogICAucG5nKClcbiAqICAgLnRpbGUoe1xuICogICAgIHNpemU6IDUxMlxuICogICB9KVxuICogICAudG9GaWxlKCdvdXRwdXQuZHonLCBmdW5jdGlvbihlcnIsIGluZm8pIHtcbiAqICAgICAvLyBvdXRwdXQuZHppIGlzIHRoZSBEZWVwIFpvb20gWE1MIGRlZmluaXRpb25cbiAqICAgICAvLyBvdXRwdXRfZmlsZXMgY29udGFpbnMgNTEyeDUxMiB0aWxlcyBncm91cGVkIGJ5IHpvb20gbGV2ZWxcbiAqICAgfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHppcEZpbGVXaXRoVGlsZXMgPSBhd2FpdCBzaGFycChpbnB1dClcbiAqICAgLnRpbGUoeyBiYXNlbmFtZTogXCJ0aWxlc1wiIH0pXG4gKiAgIC50b0J1ZmZlcigpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpaWlmaWZpZXIgPSBzaGFycCgpLnRpbGUoeyBsYXlvdXQ6IFwiaWlpZlwiIH0pO1xuICogcmVhZGFibGVTdHJlYW1cbiAqICAgLnBpcGUoaWlpZmlmaWVyKVxuICogICAucGlwZSh3cml0ZWFibGVTdHJlYW0pO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zaXplPTI1Nl0gdGlsZSBzaXplIGluIHBpeGVscywgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDgxOTIuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMub3ZlcmxhcD0wXSB0aWxlIG92ZXJsYXAgaW4gcGl4ZWxzLCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgODE5Mi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5hbmdsZT0wXSB0aWxlIGFuZ2xlIG9mIHJvdGF0aW9uLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAuXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IFtvcHRpb25zLmJhY2tncm91bmQ9e3I6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAxfV0gLSBiYWNrZ3JvdW5kIGNvbG91ciwgcGFyc2VkIGJ5IHRoZSBbY29sb3JdKGh0dHBzOi8vd3d3Lm5wbWpzLm9yZy9wYWNrYWdlL2NvbG9yKSBtb2R1bGUsIGRlZmF1bHRzIHRvIHdoaXRlIHdpdGhvdXQgdHJhbnNwYXJlbmN5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRlcHRoXSBob3cgZGVlcCB0byBtYWtlIHRoZSBweXJhbWlkLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBvbmVwaXhlbGAsIGBvbmV0aWxlYCBvciBgb25lYCwgZGVmYXVsdCBiYXNlZCBvbiBsYXlvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2tpcEJsYW5rcz0tMV0gVGhyZXNob2xkIHRvIHNraXAgdGlsZSBnZW5lcmF0aW9uLiBSYW5nZSBpcyAwLTI1NSBmb3IgOC1iaXQgaW1hZ2VzLCAwLTY1NTM1IGZvciAxNi1iaXQgaW1hZ2VzLiBEZWZhdWx0IGlzIDUgZm9yIGBnb29nbGVgIGxheW91dCwgLTEgKG5vIHNraXApIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb250YWluZXI9J2ZzJ10gdGlsZSBjb250YWluZXIsIHdpdGggdmFsdWUgYGZzYCAoZmlsZXN5c3RlbSkgb3IgYHppcGAgKGNvbXByZXNzZWQgZmlsZSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGF5b3V0PSdkeiddIGZpbGVzeXN0ZW0gbGF5b3V0LCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBkemAsIGBpaWlmYCwgYGlpaWYzYCwgYHpvb21pZnlgIG9yIGBnb29nbGVgLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jZW50cmU9ZmFsc2VdIGNlbnRyZSBpbWFnZSBpbiB0aWxlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jZW50ZXI9ZmFsc2VdIGFsdGVybmF0aXZlIHNwZWxsaW5nIG9mIGNlbnRyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5pZD0naHR0cHM6Ly9leGFtcGxlLmNvbS9paWlmJ10gd2hlbiBgbGF5b3V0YCBpcyBgaWlpZmAvYGlpaWYzYCwgc2V0cyB0aGUgYEBpZGAvYGlkYCBhdHRyaWJ1dGUgb2YgYGluZm8uanNvbmBcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5iYXNlbmFtZV0gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlIHppcCBmaWxlIHdoZW4gY29udGFpbmVyIGlzIGB6aXBgLlxuICogQHJldHVybnMge1NoYXJwfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiB0aWxlIChvcHRpb25zKSB7XG4gIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICAvLyBTaXplIG9mIHNxdWFyZSB0aWxlcywgaW4gcGl4ZWxzXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5zaXplKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5zaXplKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMuc2l6ZSwgMSwgODE5MikpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpbGVTaXplID0gb3B0aW9ucy5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdzaXplJywgJ2ludGVnZXIgYmV0d2VlbiAxIGFuZCA4MTkyJywgb3B0aW9ucy5zaXplKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gT3ZlcmxhcCBvZiB0aWxlcywgaW4gcGl4ZWxzXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5vdmVybGFwKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5vdmVybGFwKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMub3ZlcmxhcCwgMCwgODE5MikpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub3ZlcmxhcCA+IHRoaXMub3B0aW9ucy50aWxlU2l6ZSkge1xuICAgICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3ZlcmxhcCcsIGA8PSBzaXplICgke3RoaXMub3B0aW9ucy50aWxlU2l6ZX0pYCwgb3B0aW9ucy5vdmVybGFwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMudGlsZU92ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ292ZXJsYXAnLCAnaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDgxOTInLCBvcHRpb25zLm92ZXJsYXApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBDb250YWluZXJcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmNvbnRhaW5lcikpIHtcbiAgICAgIGlmIChpcy5zdHJpbmcob3B0aW9ucy5jb250YWluZXIpICYmIGlzLmluQXJyYXkob3B0aW9ucy5jb250YWluZXIsIFsnZnMnLCAnemlwJ10pKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy50aWxlQ29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2NvbnRhaW5lcicsICdvbmUgb2Y6IGZzLCB6aXAnLCBvcHRpb25zLmNvbnRhaW5lcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIExheW91dFxuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMubGF5b3V0KSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLmxheW91dCkgJiYgaXMuaW5BcnJheShvcHRpb25zLmxheW91dCwgWydkeicsICdnb29nbGUnLCAnaWlpZicsICdpaWlmMycsICd6b29taWZ5J10pKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy50aWxlTGF5b3V0ID0gb3B0aW9ucy5sYXlvdXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2xheW91dCcsICdvbmUgb2Y6IGR6LCBnb29nbGUsIGlpaWYsIGlpaWYzLCB6b29taWZ5Jywgb3B0aW9ucy5sYXlvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBbmdsZSBvZiByb3RhdGlvbixcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmFuZ2xlKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5hbmdsZSkgJiYgIShvcHRpb25zLmFuZ2xlICUgOTApKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy50aWxlQW5nbGUgPSBvcHRpb25zLmFuZ2xlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdhbmdsZScsICdwb3NpdGl2ZS9uZWdhdGl2ZSBtdWx0aXBsZSBvZiA5MCcsIG9wdGlvbnMuYW5nbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBCYWNrZ3JvdW5kIGNvbG91clxuICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvdXJPcHRpb24oJ3RpbGVCYWNrZ3JvdW5kJywgb3B0aW9ucy5iYWNrZ3JvdW5kKTtcbiAgICAvLyBEZXB0aCBvZiB0aWxlc1xuICAgIGlmIChpcy5kZWZpbmVkKG9wdGlvbnMuZGVwdGgpKSB7XG4gICAgICBpZiAoaXMuc3RyaW5nKG9wdGlvbnMuZGVwdGgpICYmIGlzLmluQXJyYXkob3B0aW9ucy5kZXB0aCwgWydvbmVwaXhlbCcsICdvbmV0aWxlJywgJ29uZSddKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudGlsZURlcHRoID0gb3B0aW9ucy5kZXB0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignZGVwdGgnLCAnb25lIG9mOiBvbmVwaXhlbCwgb25ldGlsZSwgb25lJywgb3B0aW9ucy5kZXB0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRocmVzaG9sZCB0byBza2lwIGJsYW5rIHRpbGVzXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5za2lwQmxhbmtzKSkge1xuICAgICAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5za2lwQmxhbmtzKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMuc2tpcEJsYW5rcywgLTEsIDY1NTM1KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudGlsZVNraXBCbGFua3MgPSBvcHRpb25zLnNraXBCbGFua3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ3NraXBCbGFua3MnLCAnaW50ZWdlciBiZXR3ZWVuIC0xIGFuZCAyNTUvNjU1MzUnLCBvcHRpb25zLnNraXBCbGFua3MpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmxheW91dCkgJiYgb3B0aW9ucy5sYXlvdXQgPT09ICdnb29nbGUnKSB7XG4gICAgICB0aGlzLm9wdGlvbnMudGlsZVNraXBCbGFua3MgPSA1O1xuICAgIH1cbiAgICAvLyBDZW50ZXIgaW1hZ2UgaW4gdGlsZVxuICAgIGNvbnN0IGNlbnRyZSA9IGlzLmJvb2wob3B0aW9ucy5jZW50ZXIpID8gb3B0aW9ucy5jZW50ZXIgOiBvcHRpb25zLmNlbnRyZTtcbiAgICBpZiAoaXMuZGVmaW5lZChjZW50cmUpKSB7XG4gICAgICB0aGlzLl9zZXRCb29sZWFuT3B0aW9uKCd0aWxlQ2VudHJlJywgY2VudHJlKTtcbiAgICB9XG4gICAgLy8gQGlkIGF0dHJpYnV0ZSBmb3IgSUlJRiBsYXlvdXRcbiAgICBpZiAoaXMuZGVmaW5lZChvcHRpb25zLmlkKSkge1xuICAgICAgaWYgKGlzLnN0cmluZyhvcHRpb25zLmlkKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudGlsZUlkID0gb3B0aW9ucy5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignaWQnLCAnc3RyaW5nJywgb3B0aW9ucy5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEJhc2VuYW1lIGZvciB6aXAgY29udGFpbmVyXG4gICAgaWYgKGlzLmRlZmluZWQob3B0aW9ucy5iYXNlbmFtZSkpIHtcbiAgICAgIGlmIChpcy5zdHJpbmcob3B0aW9ucy5iYXNlbmFtZSkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpbGVCYXNlbmFtZSA9IG9wdGlvbnMuYmFzZW5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2Jhc2VuYW1lJywgJ3N0cmluZycsIG9wdGlvbnMuYmFzZW5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBGb3JtYXRcbiAgaWYgKGlzLmluQXJyYXkodGhpcy5vcHRpb25zLmZvcm1hdE91dCwgWydqcGVnJywgJ3BuZycsICd3ZWJwJ10pKSB7XG4gICAgdGhpcy5vcHRpb25zLnRpbGVGb3JtYXQgPSB0aGlzLm9wdGlvbnMuZm9ybWF0T3V0O1xuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXRPdXQgIT09ICdpbnB1dCcpIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ2Zvcm1hdCcsICdvbmUgb2Y6IGpwZWcsIHBuZywgd2VicCcsIHRoaXMub3B0aW9ucy5mb3JtYXRPdXQpO1xuICB9XG4gIHJldHVybiB0aGlzLl91cGRhdGVGb3JtYXRPdXQoJ2R6Jyk7XG59XG5cbi8qKlxuICogU2V0IGEgdGltZW91dCBmb3IgcHJvY2Vzc2luZywgaW4gc2Vjb25kcy5cbiAqIFVzZSBhIHZhbHVlIG9mIHplcm8gdG8gY29udGludWUgcHJvY2Vzc2luZyBpbmRlZmluaXRlbHksIHRoZSBkZWZhdWx0IGJlaGF2aW91ci5cbiAqXG4gKiBUaGUgY2xvY2sgc3RhcnRzIHdoZW4gbGlidmlwcyBvcGVucyBhbiBpbnB1dCBpbWFnZSBmb3IgcHJvY2Vzc2luZy5cbiAqIFRpbWUgc3BlbnQgd2FpdGluZyBmb3IgYSBsaWJ1diB0aHJlYWQgdG8gYmVjb21lIGF2YWlsYWJsZSBpcyBub3QgaW5jbHVkZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVuc3VyZSBwcm9jZXNzaW5nIHRha2VzIG5vIGxvbmdlciB0aGFuIDMgc2Vjb25kc1xuICogdHJ5IHtcbiAqICAgY29uc3QgZGF0YSA9IGF3YWl0IHNoYXJwKGlucHV0KVxuICogICAgIC5ibHVyKDEwMDApXG4gKiAgICAgLnRpbWVvdXQoeyBzZWNvbmRzOiAzIH0pXG4gKiAgICAgLnRvQnVmZmVyKCk7XG4gKiB9IGNhdGNoIChlcnIpIHtcbiAqICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCd0aW1lb3V0JykpIHsgLi4uIH1cbiAqIH1cbiAqXG4gKiBAc2luY2UgMC4yOS4yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB3aGljaCBwcm9jZXNzaW5nIHdpbGwgYmUgc3RvcHBlZFxuICogQHJldHVybnMge1NoYXJwfVxuICovXG5mdW5jdGlvbiB0aW1lb3V0IChvcHRpb25zKSB7XG4gIGlmICghaXMucGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMnLCAnb2JqZWN0Jywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGlzLmludGVnZXIob3B0aW9ucy5zZWNvbmRzKSAmJiBpcy5pblJhbmdlKG9wdGlvbnMuc2Vjb25kcywgMCwgMzYwMCkpIHtcbiAgICB0aGlzLm9wdGlvbnMudGltZW91dFNlY29uZHMgPSBvcHRpb25zLnNlY29uZHM7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgaXMuaW52YWxpZFBhcmFtZXRlckVycm9yKCdzZWNvbmRzJywgJ2ludGVnZXIgYmV0d2VlbiAwIGFuZCAzNjAwJywgb3B0aW9ucy5zZWNvbmRzKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIG91dHB1dCBmb3JtYXQgdW5sZXNzIG9wdGlvbnMuZm9yY2UgaXMgZmFsc2UsXG4gKiBpbiB3aGljaCBjYXNlIHJldmVydCB0byBpbnB1dCBmb3JtYXQuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdE91dFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZT10cnVlXSAtIGZvcmNlIG91dHB1dCBmb3JtYXQsIG90aGVyd2lzZSBhdHRlbXB0IHRvIHVzZSBpbnB1dCBmb3JtYXRcbiAqIEByZXR1cm5zIHtTaGFycH1cbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZvcm1hdE91dCAoZm9ybWF0T3V0LCBvcHRpb25zKSB7XG4gIGlmICghKGlzLm9iamVjdChvcHRpb25zKSAmJiBvcHRpb25zLmZvcmNlID09PSBmYWxzZSkpIHtcbiAgICB0aGlzLm9wdGlvbnMuZm9ybWF0T3V0ID0gZm9ybWF0T3V0O1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIGJvb2xlYW4gYXR0cmlidXRlIG9mIHRoZSB0aGlzLm9wdGlvbnMgT2JqZWN0LlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsXG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBrZXlcbiAqL1xuZnVuY3Rpb24gX3NldEJvb2xlYW5PcHRpb24gKGtleSwgdmFsKSB7XG4gIGlmIChpcy5ib29sKHZhbCkpIHtcbiAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3Ioa2V5LCAnYm9vbGVhbicsIHZhbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDYWxsZWQgYnkgYSBXcml0ZWFibGVTdHJlYW0gdG8gbm90aWZ5IHVzIGl0IGlzIHJlYWR5IGZvciBkYXRhLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3JlYWQgKCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoIXRoaXMub3B0aW9ucy5zdHJlYW1PdXQpIHtcbiAgICB0aGlzLm9wdGlvbnMuc3RyZWFtT3V0ID0gdHJ1ZTtcbiAgICBjb25zdCBzdGFjayA9IEVycm9yKCk7XG4gICAgdGhpcy5fcGlwZWxpbmUodW5kZWZpbmVkLCBzdGFjayk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2UgdGhlIEMrKyBpbWFnZSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gKiBTdXBwb3J0cyBjYWxsYmFjaywgc3RyZWFtIGFuZCBwcm9taXNlIHZhcmlhbnRzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfcGlwZWxpbmUgKGNhbGxiYWNrLCBzdGFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gb3V0cHV0PWZpbGUvYnVmZmVyXG4gICAgaWYgKHRoaXMuX2lzU3RyZWFtSW5wdXQoKSkge1xuICAgICAgLy8gb3V0cHV0PWZpbGUvYnVmZmVyLCBpbnB1dD1zdHJlYW1cbiAgICAgIHRoaXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5fZmxhdHRlbkJ1ZmZlckluKCk7XG4gICAgICAgIHNoYXJwLnBpcGVsaW5lKHRoaXMub3B0aW9ucywgKGVyciwgZGF0YSwgaW5mbykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSwgaW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvdXRwdXQ9ZmlsZS9idWZmZXIsIGlucHV0PWZpbGUvYnVmZmVyXG4gICAgICBzaGFycC5waXBlbGluZSh0aGlzLm9wdGlvbnMsIChlcnIsIGRhdGEsIGluZm8pID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCBkYXRhLCBpbmZvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJlYW1PdXQpIHtcbiAgICAvLyBvdXRwdXQ9c3RyZWFtXG4gICAgaWYgKHRoaXMuX2lzU3RyZWFtSW5wdXQoKSkge1xuICAgICAgLy8gb3V0cHV0PXN0cmVhbSwgaW5wdXQ9c3RyZWFtXG4gICAgICB0aGlzLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5fZmxhdHRlbkJ1ZmZlckluKCk7XG4gICAgICAgIHNoYXJwLnBpcGVsaW5lKHRoaXMub3B0aW9ucywgKGVyciwgZGF0YSwgaW5mbykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBpcy5uYXRpdmVFcnJvcihlcnIsIHN0YWNrKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGluZm8pO1xuICAgICAgICAgICAgdGhpcy5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gdGhpcy5lbWl0KCdjbG9zZScpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnN0cmVhbUluRmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0PXN0cmVhbSwgaW5wdXQ9ZmlsZS9idWZmZXJcbiAgICAgIHNoYXJwLnBpcGVsaW5lKHRoaXMub3B0aW9ucywgKGVyciwgZGF0YSwgaW5mbykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGlzLm5hdGl2ZUVycm9yKGVyciwgc3RhY2spKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCBpbmZvKTtcbiAgICAgICAgICB0aGlzLnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiB0aGlzLmVtaXQoJ2Nsb3NlJykpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2Uge1xuICAgIC8vIG91dHB1dD1wcm9taXNlXG4gICAgaWYgKHRoaXMuX2lzU3RyZWFtSW5wdXQoKSkge1xuICAgICAgLy8gb3V0cHV0PXByb21pc2UsIGlucHV0PXN0cmVhbVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5vbmNlKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZmxhdHRlbkJ1ZmZlckluKCk7XG4gICAgICAgICAgc2hhcnAucGlwZWxpbmUodGhpcy5vcHRpb25zLCAoZXJyLCBkYXRhLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJlamVjdChpcy5uYXRpdmVFcnJvcihlcnIsIHN0YWNrKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlc29sdmVXaXRoT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRhdGEsIGluZm8gfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvdXRwdXQ9cHJvbWlzZSwgaW5wdXQ9ZmlsZS9idWZmZXJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNoYXJwLnBpcGVsaW5lKHRoaXMub3B0aW9ucywgKGVyciwgZGF0YSwgaW5mbykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChpcy5uYXRpdmVFcnJvcihlcnIsIHN0YWNrKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb2x2ZVdpdGhPYmplY3QpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRhdGEsIGluZm8gfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNvcmF0ZSB0aGUgU2hhcnAgcHJvdG90eXBlIHdpdGggb3V0cHV0LXJlbGF0ZWQgZnVuY3Rpb25zLlxuICogQHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoU2hhcnApIHtcbiAgT2JqZWN0LmFzc2lnbihTaGFycC5wcm90b3R5cGUsIHtcbiAgICAvLyBQdWJsaWNcbiAgICB0b0ZpbGUsXG4gICAgdG9CdWZmZXIsXG4gICAga2VlcEV4aWYsXG4gICAgd2l0aEV4aWYsXG4gICAgd2l0aEV4aWZNZXJnZSxcbiAgICBrZWVwSWNjUHJvZmlsZSxcbiAgICB3aXRoSWNjUHJvZmlsZSxcbiAgICBrZWVwTWV0YWRhdGEsXG4gICAgd2l0aE1ldGFkYXRhLFxuICAgIHRvRm9ybWF0LFxuICAgIGpwZWcsXG4gICAganAyLFxuICAgIHBuZyxcbiAgICB3ZWJwLFxuICAgIHRpZmYsXG4gICAgYXZpZixcbiAgICBoZWlmLFxuICAgIGp4bCxcbiAgICBnaWYsXG4gICAgcmF3LFxuICAgIHRpbGUsXG4gICAgdGltZW91dCxcbiAgICAvLyBQcml2YXRlXG4gICAgX3VwZGF0ZUZvcm1hdE91dCxcbiAgICBfc2V0Qm9vbGVhbk9wdGlvbixcbiAgICBfcmVhZCxcbiAgICBfcGlwZWxpbmVcbiAgfSk7XG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxMyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGV2ZW50cyA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJyk7XG5jb25zdCBkZXRlY3RMaWJjID0gcmVxdWlyZSgnZGV0ZWN0LWxpYmMnKTtcblxuY29uc3QgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG5jb25zdCB7IHJ1bnRpbWVQbGF0Zm9ybUFyY2ggfSA9IHJlcXVpcmUoJy4vbGlidmlwcycpO1xuY29uc3Qgc2hhcnAgPSByZXF1aXJlKCcuL3NoYXJwJyk7XG5cbmNvbnN0IHJ1bnRpbWVQbGF0Zm9ybSA9IHJ1bnRpbWVQbGF0Zm9ybUFyY2goKTtcbmNvbnN0IGxpYnZpcHNWZXJzaW9uID0gc2hhcnAubGlidmlwc1ZlcnNpb24oKTtcblxuLyoqXG4gKiBBbiBPYmplY3QgY29udGFpbmluZyBuZXN0ZWQgYm9vbGVhbiB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXRzL21ldGhvZHMuXG4gKiBAbWVtYmVyXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coc2hhcnAuZm9ybWF0KTtcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IGZvcm1hdCA9IHNoYXJwLmZvcm1hdCgpO1xuZm9ybWF0LmhlaWYub3V0cHV0LmFsaWFzID0gWydhdmlmJywgJ2hlaWMnXTtcbmZvcm1hdC5qcGVnLm91dHB1dC5hbGlhcyA9IFsnanBlJywgJ2pwZyddO1xuZm9ybWF0LnRpZmYub3V0cHV0LmFsaWFzID0gWyd0aWYnXTtcbmZvcm1hdC5qcDJrLm91dHB1dC5hbGlhcyA9IFsnajJjJywgJ2oyaycsICdqcDInLCAnanB4J107XG5cbi8qKlxuICogQW4gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZSBpbnRlcnBvbGF0b3JzIGFuZCB0aGVpciBwcm9wZXIgdmFsdWVzXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IGludGVycG9sYXRvcnMgPSB7XG4gIC8qKiBbTmVhcmVzdCBuZWlnaGJvdXIgaW50ZXJwb2xhdGlvbl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OZWFyZXN0LW5laWdoYm9yX2ludGVycG9sYXRpb24pLiBTdWl0YWJsZSBmb3IgaW1hZ2UgZW5sYXJnZW1lbnQgb25seS4gKi9cbiAgbmVhcmVzdDogJ25lYXJlc3QnLFxuICAvKiogW0JpbGluZWFyIGludGVycG9sYXRpb25dKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmlsaW5lYXJfaW50ZXJwb2xhdGlvbikuIEZhc3RlciB0aGFuIGJpY3ViaWMgYnV0IHdpdGggbGVzcyBzbW9vdGggcmVzdWx0cy4gKi9cbiAgYmlsaW5lYXI6ICdiaWxpbmVhcicsXG4gIC8qKiBbQmljdWJpYyBpbnRlcnBvbGF0aW9uXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpY3ViaWNfaW50ZXJwb2xhdGlvbikgKHRoZSBkZWZhdWx0KS4gKi9cbiAgYmljdWJpYzogJ2JpY3ViaWMnLFxuICAvKiogW0xCQiBpbnRlcnBvbGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbGlidmlwcy9saWJ2aXBzL2Jsb2IvbWFzdGVyL2xpYnZpcHMvcmVzYW1wbGUvbGJiLmNwcCNMMTAwKS4gUHJldmVudHMgc29tZSBcIlthY3V0YW5jZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BY3V0YW5jZSlcIiBidXQgdHlwaWNhbGx5IHJlZHVjZXMgcGVyZm9ybWFuY2UgYnkgYSBmYWN0b3Igb2YgMi4gKi9cbiAgbG9jYWxseUJvdW5kZWRCaWN1YmljOiAnbGJiJyxcbiAgLyoqIFtOb2hhbG8gaW50ZXJwb2xhdGlvbl0oaHR0cDovL2VwcmludHMuc290b24uYWMudWsvMjY4MDg2LykuIFByZXZlbnRzIGFjdXRhbmNlIGJ1dCB0eXBpY2FsbHkgcmVkdWNlcyBwZXJmb3JtYW5jZSBieSBhIGZhY3RvciBvZiAzLiAqL1xuICBub2hhbG86ICdub2hhbG8nLFxuICAvKiogW1ZTUUJTIGludGVycG9sYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ2aXBzL2xpYnZpcHMvYmxvYi9tYXN0ZXIvbGlidmlwcy9yZXNhbXBsZS92c3Ficy5jcHAjTDQ4KS4gUHJldmVudHMgXCJzdGFpcmNhc2luZ1wiIHdoZW4gZW5sYXJnaW5nLiAqL1xuICB2ZXJ0ZXhTcGxpdFF1YWRyYXRpY0Jhc2lzU3BsaW5lOiAndnNxYnMnXG59O1xuXG4vKipcbiAqIEFuIE9iamVjdCBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG51bWJlcnMgb2Ygc2hhcnAsIGxpYnZpcHNcbiAqIGFuZCAod2hlbiB1c2luZyBwcmVidWlsdCBiaW5hcmllcykgaXRzIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAbWVtYmVyXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coc2hhcnAudmVyc2lvbnMpO1xuICovXG5sZXQgdmVyc2lvbnMgPSB7XG4gIHZpcHM6IGxpYnZpcHNWZXJzaW9uLnNlbXZlclxufTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoIWxpYnZpcHNWZXJzaW9uLmlzR2xvYmFsKSB7XG4gIGlmICghbGlidmlwc1ZlcnNpb24uaXNXYXNtKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZlcnNpb25zID0gcmVxdWlyZShgQGltZy9zaGFycC0ke3J1bnRpbWVQbGF0Zm9ybX0vdmVyc2lvbnNgKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9ucyA9IHJlcXVpcmUoYEBpbWcvc2hhcnAtbGlidmlwcy0ke3J1bnRpbWVQbGF0Zm9ybX0vdmVyc2lvbnNgKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB2ZXJzaW9ucyA9IHJlcXVpcmUoJ0BpbWcvc2hhcnAtd2FzbTMyL3ZlcnNpb25zJyk7XG4gICAgfSBjYXRjaCAoXykge31cbiAgfVxufVxudmVyc2lvbnMuc2hhcnAgPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHZlcnNpb25zLmhlaWYgJiYgZm9ybWF0LmhlaWYpIHtcbiAgLy8gUHJlYnVpbHQgYmluYXJpZXMgcHJvdmlkZSBBVjFcbiAgZm9ybWF0LmhlaWYuaW5wdXQuZmlsZVN1ZmZpeCA9IFsnLmF2aWYnXTtcbiAgZm9ybWF0LmhlaWYub3V0cHV0LmFsaWFzID0gWydhdmlmJ107XG59XG5cbi8qKlxuICogR2V0cyBvciwgd2hlbiBvcHRpb25zIGFyZSBwcm92aWRlZCwgc2V0cyB0aGUgbGltaXRzIG9mIF9saWJ2aXBzJ18gb3BlcmF0aW9uIGNhY2hlLlxuICogRXhpc3RpbmcgZW50cmllcyBpbiB0aGUgY2FjaGUgd2lsbCBiZSB0cmltbWVkIGFmdGVyIGFueSBjaGFuZ2UgaW4gbGltaXRzLlxuICogVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgY2FjaGUgc3RhdGlzdGljcyxcbiAqIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgaG93IG11Y2ggd29ya2luZyBtZW1vcnkgaXMgcmVxdWlyZWQgZm9yIGEgcGFydGljdWxhciB0YXNrLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzdGF0cyA9IHNoYXJwLmNhY2hlKCk7XG4gKiBAZXhhbXBsZVxuICogc2hhcnAuY2FjaGUoIHsgaXRlbXM6IDIwMCB9ICk7XG4gKiBzaGFycC5jYWNoZSggeyBmaWxlczogMCB9ICk7XG4gKiBzaGFycC5jYWNoZShmYWxzZSk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gW29wdGlvbnM9dHJ1ZV0gLSBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMsIG9yIGJvb2xlYW4gd2hlcmUgdHJ1ZSB1c2VzIGRlZmF1bHQgY2FjaGUgc2V0dGluZ3MgYW5kIGZhbHNlIHJlbW92ZXMgYWxsIGNhY2hpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tZW1vcnk9NTBdIC0gaXMgdGhlIG1heGltdW0gbWVtb3J5IGluIE1CIHRvIHVzZSBmb3IgdGhpcyBjYWNoZVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZpbGVzPTIwXSAtIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBob2xkIG9wZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5pdGVtcz0xMDBdIC0gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8gY2FjaGVcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNhY2hlIChvcHRpb25zKSB7XG4gIGlmIChpcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIC8vIERlZmF1bHQgY2FjaGUgc2V0dGluZ3Mgb2YgNTBNQiwgMjAgZmlsZXMsIDEwMCBpdGVtc1xuICAgICAgcmV0dXJuIHNoYXJwLmNhY2hlKDUwLCAyMCwgMTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNoYXJwLmNhY2hlKDAsIDAsIDApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICByZXR1cm4gc2hhcnAuY2FjaGUob3B0aW9ucy5tZW1vcnksIG9wdGlvbnMuZmlsZXMsIG9wdGlvbnMuaXRlbXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzaGFycC5jYWNoZSgpO1xuICB9XG59XG5jYWNoZSh0cnVlKTtcblxuLyoqXG4gKiBHZXRzIG9yLCB3aGVuIGEgY29uY3VycmVuY3kgaXMgcHJvdmlkZWQsIHNldHNcbiAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIF9saWJ2aXBzXyBzaG91bGQgdXNlIHRvIHByb2Nlc3MgX2VhY2ggaW1hZ2VfLlxuICogVGhlc2UgYXJlIGZyb20gYSB0aHJlYWQgcG9vbCBtYW5hZ2VkIGJ5IGdsaWIsXG4gKiB3aGljaCBoZWxwcyBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgY3JlYXRpbmcgbmV3IHRocmVhZHMuXG4gKlxuICogVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgdGhlIGN1cnJlbnQgY29uY3VycmVuY3kuXG4gKlxuICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBDUFUgY29yZXMsXG4gKiBleGNlcHQgd2hlbiB1c2luZyBnbGliYy1iYXNlZCBMaW51eCB3aXRob3V0IGplbWFsbG9jLFxuICogd2hlcmUgdGhlIGRlZmF1bHQgaXMgYDFgIHRvIGhlbHAgcmVkdWNlIG1lbW9yeSBmcmFnbWVudGF0aW9uLlxuICpcbiAqIEEgdmFsdWUgb2YgYDBgIHdpbGwgcmVzZXQgdGhpcyB0byB0aGUgbnVtYmVyIG9mIENQVSBjb3Jlcy5cbiAqXG4gKiBTb21lIGltYWdlIGZvcm1hdCBsaWJyYXJpZXMgc3Bhd24gYWRkaXRpb25hbCB0aHJlYWRzLFxuICogZS5nLiBsaWJhb20gbWFuYWdlcyBpdHMgb3duIDQgdGhyZWFkcyB3aGVuIGVuY29kaW5nIEFWSUYgaW1hZ2VzLFxuICogYW5kIHRoZXNlIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgdmFsdWUgc2V0IGhlcmUuXG4gKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyB0aGF0IHNoYXJwIGNhbiBwcm9jZXNzIGluIHBhcmFsbGVsXG4gKiBpcyBjb250cm9sbGVkIGJ5IGxpYnV2J3MgYFVWX1RIUkVBRFBPT0xfU0laRWAgZW52aXJvbm1lbnQgdmFyaWFibGUsXG4gKiB3aGljaCBkZWZhdWx0cyB0byA0LlxuICpcbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY2xpLmh0bWwjdXZfdGhyZWFkcG9vbF9zaXplc2l6ZVxuICpcbiAqIEZvciBleGFtcGxlLCBieSBkZWZhdWx0LCBhIG1hY2hpbmUgd2l0aCA4IENQVSBjb3JlcyB3aWxsIHByb2Nlc3NcbiAqIDQgaW1hZ2VzIGluIHBhcmFsbGVsIGFuZCB1c2UgdXAgdG8gOCB0aHJlYWRzIHBlciBpbWFnZSxcbiAqIHNvIHRoZXJlIHdpbGwgYmUgdXAgdG8gMzIgY29uY3VycmVudCB0aHJlYWRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB0aHJlYWRzID0gc2hhcnAuY29uY3VycmVuY3koKTsgLy8gNFxuICogc2hhcnAuY29uY3VycmVuY3koMik7IC8vIDJcbiAqIHNoYXJwLmNvbmN1cnJlbmN5KDApOyAvLyA0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25jdXJyZW5jeV1cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGNvbmN1cnJlbmN5XG4gKi9cbmZ1bmN0aW9uIGNvbmN1cnJlbmN5IChjb25jdXJyZW5jeSkge1xuICByZXR1cm4gc2hhcnAuY29uY3VycmVuY3koaXMuaW50ZWdlcihjb25jdXJyZW5jeSkgPyBjb25jdXJyZW5jeSA6IG51bGwpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChkZXRlY3RMaWJjLmZhbWlseVN5bmMoKSA9PT0gZGV0ZWN0TGliYy5HTElCQyAmJiAhc2hhcnAuX2lzVXNpbmdKZW1hbGxvYygpKSB7XG4gIC8vIFJlZHVjZSBkZWZhdWx0IGNvbmN1cnJlbmN5IHRvIDEgd2hlbiB1c2luZyBnbGliYyBtZW1vcnkgYWxsb2NhdG9yXG4gIHNoYXJwLmNvbmN1cnJlbmN5KDEpO1xufSBlbHNlIGlmIChkZXRlY3RMaWJjLmZhbWlseVN5bmMoKSA9PT0gZGV0ZWN0TGliYy5NVVNMICYmIHNoYXJwLmNvbmN1cnJlbmN5KCkgPT09IDEwMjQpIHtcbiAgLy8gUmVkdWNlIGRlZmF1bHQgY29uY3VycmVuY3kgd2hlbiBtdXNsIHRocmVhZCBvdmVyLXN1YnNjcmlwdGlvbiBkZXRlY3RlZFxuICBzaGFycC5jb25jdXJyZW5jeShyZXF1aXJlKCdub2RlOm9zJykuYXZhaWxhYmxlUGFyYWxsZWxpc20oKSk7XG59XG5cbi8qKlxuICogQW4gRXZlbnRFbWl0dGVyIHRoYXQgZW1pdHMgYSBgY2hhbmdlYCBldmVudCB3aGVuIGEgdGFzayBpcyBlaXRoZXI6XG4gKiAtIHF1ZXVlZCwgd2FpdGluZyBmb3IgX2xpYnV2XyB0byBwcm92aWRlIGEgd29ya2VyIHRocmVhZFxuICogLSBjb21wbGV0ZVxuICogQG1lbWJlclxuICogQGV4YW1wbGVcbiAqIHNoYXJwLnF1ZXVlLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihxdWV1ZUxlbmd0aCkge1xuICogICBjb25zb2xlLmxvZygnUXVldWUgY29udGFpbnMgJyArIHF1ZXVlTGVuZ3RoICsgJyB0YXNrKHMpJyk7XG4gKiB9KTtcbiAqL1xuY29uc3QgcXVldWUgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byBpbnRlcm5hbCB0YXNrIGNvdW50ZXJzLlxuICogLSBxdWV1ZSBpcyB0aGUgbnVtYmVyIG9mIHRhc2tzIHRoaXMgbW9kdWxlIGhhcyBxdWV1ZWQgd2FpdGluZyBmb3IgX2xpYnV2XyB0byBwcm92aWRlIGEgd29ya2VyIHRocmVhZCBmcm9tIGl0cyBwb29sLlxuICogLSBwcm9jZXNzIGlzIHRoZSBudW1iZXIgb2YgcmVzaXplIHRhc2tzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvdW50ZXJzID0gc2hhcnAuY291bnRlcnMoKTsgLy8geyBxdWV1ZTogMiwgcHJvY2VzczogNCB9XG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gY291bnRlcnMgKCkge1xuICByZXR1cm4gc2hhcnAuY291bnRlcnMoKTtcbn1cblxuLyoqXG4gKiBHZXQgYW5kIHNldCB1c2Ugb2YgU0lNRCB2ZWN0b3IgdW5pdCBpbnN0cnVjdGlvbnMuXG4gKiBSZXF1aXJlcyBsaWJ2aXBzIHRvIGhhdmUgYmVlbiBjb21waWxlZCB3aXRoIGhpZ2h3YXkgc3VwcG9ydC5cbiAqXG4gKiBJbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYHJlc2l6ZWAsIGBibHVyYCBhbmQgYHNoYXJwZW5gIG9wZXJhdGlvbnNcbiAqIGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIFNJTUQgdmVjdG9yIHVuaXQgb2YgdGhlIENQVSwgZS5nLiBJbnRlbCBTU0UgYW5kIEFSTSBORU9OLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzaW1kID0gc2hhcnAuc2ltZCgpO1xuICogLy8gc2ltZCBpcyBgdHJ1ZWAgaWYgdGhlIHJ1bnRpbWUgdXNlIG9mIGhpZ2h3YXkgaXMgY3VycmVudGx5IGVuYWJsZWRcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzaW1kID0gc2hhcnAuc2ltZChmYWxzZSk7XG4gKiAvLyBwcmV2ZW50IGxpYnZpcHMgZnJvbSB1c2luZyBoaWdod2F5IGF0IHJ1bnRpbWVcbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzaW1kPXRydWVdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gc2ltZCAoc2ltZCkge1xuICByZXR1cm4gc2hhcnAuc2ltZChpcy5ib29sKHNpbWQpID8gc2ltZCA6IG51bGwpO1xufVxuXG4vKipcbiAqIEJsb2NrIGxpYnZpcHMgb3BlcmF0aW9ucyBhdCBydW50aW1lLlxuICpcbiAqIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlIGBWSVBTX0JMT0NLX1VOVFJVU1RFRGAgZW52aXJvbm1lbnQgdmFyaWFibGUsXG4gKiB3aGljaCB3aGVuIHNldCB3aWxsIGJsb2NrIGFsbCBcInVudHJ1c3RlZFwiIG9wZXJhdGlvbnMuXG4gKlxuICogQHNpbmNlIDAuMzIuNFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkJsb2NrIGFsbCBUSUZGIGlucHV0LjwvY2FwdGlvbj5cbiAqIHNoYXJwLmJsb2NrKHtcbiAqICAgb3BlcmF0aW9uOiBbJ1ZpcHNGb3JlaWduTG9hZFRpZmYnXVxuICogfSk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gb3B0aW9ucy5vcGVyYXRpb24gLSBMaXN0IG9mIGxpYnZpcHMgbG93LWxldmVsIG9wZXJhdGlvbiBuYW1lcyB0byBibG9jay5cbiAqL1xuZnVuY3Rpb24gYmxvY2sgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMub3BlcmF0aW9uKSAmJiBvcHRpb25zLm9wZXJhdGlvbi5ldmVyeShpcy5zdHJpbmcpKSB7XG4gICAgICBzaGFycC5ibG9jayhvcHRpb25zLm9wZXJhdGlvbiwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3BlcmF0aW9uJywgJ0FycmF5PHN0cmluZz4nLCBvcHRpb25zLm9wZXJhdGlvbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IGlzLmludmFsaWRQYXJhbWV0ZXJFcnJvcignb3B0aW9ucycsICdvYmplY3QnLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKipcbiAqIFVuYmxvY2sgbGlidmlwcyBvcGVyYXRpb25zIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGEgbGlzdCBvZiBhbGxvd2VkIG9wZXJhdGlvbnMuXG4gKlxuICogQHNpbmNlIDAuMzIuNFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkJsb2NrIGFsbCBpbnB1dCBleGNlcHQgV2ViUCBmcm9tIHRoZSBmaWxlc3lzdGVtLjwvY2FwdGlvbj5cbiAqIHNoYXJwLmJsb2NrKHtcbiAqICAgb3BlcmF0aW9uOiBbJ1ZpcHNGb3JlaWduTG9hZCddXG4gKiB9KTtcbiAqIHNoYXJwLnVuYmxvY2soe1xuICogICBvcGVyYXRpb246IFsnVmlwc0ZvcmVpZ25Mb2FkV2VicEZpbGUnXVxuICogfSk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QmxvY2sgYWxsIGlucHV0IGV4Y2VwdCBKUEVHIGFuZCBQTkcgZnJvbSBhIEJ1ZmZlciBvciBTdHJlYW0uPC9jYXB0aW9uPlxuICogc2hhcnAuYmxvY2soe1xuICogICBvcGVyYXRpb246IFsnVmlwc0ZvcmVpZ25Mb2FkJ11cbiAqIH0pO1xuICogc2hhcnAudW5ibG9jayh7XG4gKiAgIG9wZXJhdGlvbjogWydWaXBzRm9yZWlnbkxvYWRKcGVnQnVmZmVyJywgJ1ZpcHNGb3JlaWduTG9hZFBuZ0J1ZmZlciddXG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLm9wZXJhdGlvbiAtIExpc3Qgb2YgbGlidmlwcyBsb3ctbGV2ZWwgb3BlcmF0aW9uIG5hbWVzIHRvIHVuYmxvY2suXG4gKi9cbmZ1bmN0aW9uIHVuYmxvY2sgKG9wdGlvbnMpIHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMub3BlcmF0aW9uKSAmJiBvcHRpb25zLm9wZXJhdGlvbi5ldmVyeShpcy5zdHJpbmcpKSB7XG4gICAgICBzaGFycC5ibG9jayhvcHRpb25zLm9wZXJhdGlvbiwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wZXJhdGlvbicsICdBcnJheTxzdHJpbmc+Jywgb3B0aW9ucy5vcGVyYXRpb24pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBpcy5pbnZhbGlkUGFyYW1ldGVyRXJyb3IoJ29wdGlvbnMnLCAnb2JqZWN0Jywgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNvcmF0ZSB0aGUgU2hhcnAgY2xhc3Mgd2l0aCB1dGlsaXR5LXJlbGF0ZWQgZnVuY3Rpb25zLlxuICogQHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoU2hhcnApIHtcbiAgU2hhcnAuY2FjaGUgPSBjYWNoZTtcbiAgU2hhcnAuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgU2hhcnAuY291bnRlcnMgPSBjb3VudGVycztcbiAgU2hhcnAuc2ltZCA9IHNpbWQ7XG4gIFNoYXJwLmZvcm1hdCA9IGZvcm1hdDtcbiAgU2hhcnAuaW50ZXJwb2xhdG9ycyA9IGludGVycG9sYXRvcnM7XG4gIFNoYXJwLnZlcnNpb25zID0gdmVyc2lvbnM7XG4gIFNoYXJwLnF1ZXVlID0gcXVldWU7XG4gIFNoYXJwLmJsb2NrID0gYmxvY2s7XG4gIFNoYXJwLnVuYmxvY2sgPSB1bmJsb2NrO1xufTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTMgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBTaGFycCA9IHJlcXVpcmUoJy4vY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vaW5wdXQnKShTaGFycCk7XG5yZXF1aXJlKCcuL3Jlc2l6ZScpKFNoYXJwKTtcbnJlcXVpcmUoJy4vY29tcG9zaXRlJykoU2hhcnApO1xucmVxdWlyZSgnLi9vcGVyYXRpb24nKShTaGFycCk7XG5yZXF1aXJlKCcuL2NvbG91cicpKFNoYXJwKTtcbnJlcXVpcmUoJy4vY2hhbm5lbCcpKFNoYXJwKTtcbnJlcXVpcmUoJy4vb3V0cHV0JykoU2hhcnApO1xucmVxdWlyZSgnLi91dGlsaXR5JykoU2hhcnApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYXJwO1xuIiwKICAgICJsZXQgbWVzc2FnZXMgPSBbXTtcbmxldCBsZXZlbCA9IDA7XG5cbmNvbnN0IGRlYnVnID0gKG1zZywgbWluKSA9PiB7XG4gIGlmIChsZXZlbCA+PSBtaW4pIHtcbiAgICBtZXNzYWdlcy5wdXNoKG1zZyk7XG4gIH1cbn07XG5cbmRlYnVnLldBUk4gPSAxO1xuZGVidWcuSU5GTyA9IDI7XG5kZWJ1Zy5ERUJVRyA9IDM7XG5cbmRlYnVnLnJlc2V0ID0gKCkgPT4ge1xuICBtZXNzYWdlcyA9IFtdO1xufTtcblxuZGVidWcuc2V0RGVidWdMZXZlbCA9ICh2KSA9PiB7XG4gIGxldmVsID0gdjtcbn07XG5cbmRlYnVnLndhcm4gPSAobXNnKSA9PiBkZWJ1Zyhtc2csIGRlYnVnLldBUk4pO1xuZGVidWcuaW5mbyA9IChtc2cpID0+IGRlYnVnKG1zZywgZGVidWcuSU5GTyk7XG5kZWJ1Zy5kZWJ1ZyA9IChtc2cpID0+IGRlYnVnKG1zZywgZGVidWcuREVCVUcpO1xuXG5kZWJ1Zy5kZWJ1Z01lc3NhZ2VzID0gKCkgPT4gbWVzc2FnZXM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidWc7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSA9PiB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdFx0J1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSdcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmcgPT4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycgPyBzdHJpbmcucmVwbGFjZShhbnNpUmVnZXgoKSwgJycpIDogc3RyaW5nO1xuIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSB5b2RhICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gY29kZVBvaW50ID0+IHtcblx0aWYgKE51bWJlci5pc05hTihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ29kZSBwb2ludHMgYXJlIGRlcml2ZWQgZnJvbTpcblx0Ly8gaHR0cDovL3d3dy51bml4Lm9yZy9QdWJsaWMvVU5JREFUQS9FYXN0QXNpYW5XaWR0aC50eHRcblx0aWYgKFxuXHRcdGNvZGVQb2ludCA+PSAweDExMDAgJiYgKFxuXHRcdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMjkgfHwgLy8gTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyQSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0XHQoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3ICYmIGNvZGVQb2ludCAhPT0gMHgzMDNGKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG5cdFx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAuLiBZaSBSYWRpY2Fsc1xuXHRcdFx0KDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0XHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHRcdCgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG5cdFx0XHQvLyBIYW5ndWwgU3lsbGFibGVzXG5cdFx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1xuXHRcdFx0KDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0XHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0XHQoMHhGRTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTE5KSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuXHRcdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHRcdC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXG5cdFx0XHQoMHhGRjAxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRjYwKSB8fFxuXHRcdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHRcdC8vIEthbmEgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUYyMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjUxKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAuLiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZVxuXHRcdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vbXRocy5iZS9lbW9qaVxuICByZXR1cm4gL1xcdUQ4M0NcXHVERkY0XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2Mig/OlxcdURCNDBcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQjQwXFx1REM3M1xcdURCNDBcXHVEQzYzXFx1REI0MFxcdURDNzR8XFx1REI0MFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGfFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDXFx1REZGQnxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRV0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRVxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZEXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGQ10pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNEXFx1REM2OHwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXxcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEZ8XFx1RDgzRFtcXHVEQzY2XFx1REM2N118XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfCg/OlxcdUQ4M0NcXHVERkZCXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZGXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZFXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZEXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZDXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKVxcdUZFMEZ8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KVxcdUQ4M0NcXHVERkZCfFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGRVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZGXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRV0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRFxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSkoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDXFx1REZGRVxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZEXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSkpfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGRFxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfCg/OlxcdUQ4M0RcXHVEQzQxXFx1RkUwRlxcdTIwMERcXHVEODNEXFx1RERFOHxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZFXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZDXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZCXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZEXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSl8KD86KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSlcXHVGRTBGfFxcdUQ4M0RcXHVEQzZGfFxcdUQ4M0VbXFx1REQzQ1xcdUREREVcXHVERERGXSlcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXXwoPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSlcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXXwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ2LVxcdURERERdKSg/Oig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSlcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXXxcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXSl8XFx1RDgzQ1xcdURGRjRcXHUyMDBEXFx1MjYyMClcXHVGRTBGfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNDXFx1REZGM1xcdUZFMEZcXHUyMDBEXFx1RDgzQ1xcdURGMDh8XFx1RDgzRFxcdURDMTVcXHUyMDBEXFx1RDgzRVxcdUREQkF8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjd8XFx1RDgzQ1xcdURERkRcXHVEODNDXFx1RERGMHxcXHVEODNDXFx1RERGNFxcdUQ4M0NcXHVEREYyfFxcdUQ4M0NcXHVEREY2XFx1RDgzQ1xcdURERTZ8WyNcXCowLTldXFx1RkUwRlxcdTIwRTN8XFx1RDgzQ1xcdURERTcoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREY5KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERURcXHVEREVGLVxcdURERjRcXHVEREY3XFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV0pfFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGNyg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzQ1xcdURERjIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4LVxcdURERURcXHVEREYwLVxcdURERkZdKXxcXHVEODNDXFx1RERFNig/OlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYwKD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVEKD86XFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdKXxcXHVEODNDXFx1RERFOSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl0pfFxcdUQ4M0NcXHVEREZFKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVDKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERjgoPzpcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdKXxcXHVEODNDXFx1RERFQig/OlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XSl8XFx1RDgzQ1xcdURERjUoPzpcXHVEODNDW1xcdURERTZcXHVEREVBLVxcdURERURcXHVEREYwLVxcdURERjNcXHVEREY3LVxcdURERjlcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREZCKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXSl8XFx1RDgzQ1xcdURERjMoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU4KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXSl8XFx1RDgzQ1xcdURERjEoPzpcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV0pfFxcdUQ4M0NcXHVEREZGKD86XFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdKXxcXHVEODNDXFx1RERGQyg/OlxcdUQ4M0NbXFx1RERFQlxcdURERjhdKXxcXHVEODNDXFx1RERGQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUNcXHVEREYyXFx1RERGM1xcdURERjhcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVFKD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUFcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjldKXxcXHVEODNDXFx1RERFRig/OlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV0pfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTI2MURcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzJcXHVERkM3XXxcXHVEODNEW1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcwXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQ0FBXFx1REQ3NFxcdUREN0FcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUNcXHVERDFFXFx1REQxRlxcdUREMzAtXFx1REQzNlxcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDItXFx1RERENV0pKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjMxQVxcdTIzMUJcXHUyM0U5LVxcdTIzRUNcXHUyM0YwXFx1MjNGM1xcdTI1RkRcXHUyNUZFXFx1MjYxNFxcdTI2MTVcXHUyNjQ4LVxcdTI2NTNcXHUyNjdGXFx1MjY5M1xcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkYyXFx1MjZGM1xcdTI2RjVcXHUyNkZBXFx1MjZGRFxcdTI3MDVcXHUyNzBBXFx1MjcwQlxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVdfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1RERFNi1cXHVEREZGXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGN0NcXHVERjdFLVxcdURGOTNcXHVERkEwLVxcdURGQ0FcXHVERkNGLVxcdURGRDNcXHVERkUwLVxcdURGRjBcXHVERkY0XFx1REZGOC1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1REMzRVxcdURDNDBcXHVEQzQyLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERGQi1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQ1xcdURFRDAtXFx1REVEMlxcdURFRDVcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQVxcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBELVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURENzFcXHVERDczLVxcdURENzZcXHVERDdBLVxcdUREQTJcXHVEREE1LVxcdUREQUFcXHVEREFFLVxcdUREQ0FcXHVERENELVxcdURERkZcXHVERTcwLVxcdURFNzNcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODJcXHVERTkwLVxcdURFOTVdKXwoPzpbI1xcKjAtOVxceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFOS1cXHUyM0YzXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCLVxcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MURcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyLVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDOFxcdTI2Q0VcXHUyNkNGXFx1MjZEMVxcdTI2RDNcXHUyNkQ0XFx1MjZFOVxcdTI2RUFcXHUyNkYwLVxcdTI2RjVcXHUyNkY3LVxcdTI2RkFcXHUyNkZEXFx1MjcwMlxcdTI3MDVcXHUyNzA4LVxcdTI3MERcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzI4XFx1MjczM1xcdTI3MzRcXHUyNzQ0XFx1Mjc0N1xcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3NjNcXHUyNzY0XFx1Mjc5NS1cXHUyNzk3XFx1MjdBMVxcdTI3QjBcXHUyN0JGXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1RERFNi1cXHVEREZGXFx1REUwMVxcdURFMDJcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIxXFx1REYyNC1cXHVERjkzXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFLVxcdURGRjBcXHVERkYzLVxcdURGRjVcXHVERkY3LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQ0ZEXFx1RENGRi1cXHVERDNEXFx1REQ0OS1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ2RlxcdURENzBcXHVERDczLVxcdUREN0FcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1RERBNFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNCLVxcdURFRDJcXHVERUQ1XFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRUJcXHVERUVDXFx1REVGMFxcdURFRjMtXFx1REVGQVxcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBELVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURENzFcXHVERDczLVxcdURENzZcXHVERDdBLVxcdUREQTJcXHVEREE1LVxcdUREQUFcXHVEREFFLVxcdUREQ0FcXHVERENELVxcdURERkZcXHVERTcwLVxcdURFNzNcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODJcXHVERTkwLVxcdURFOTVdKVxcdUZFMEZ8KD86W1xcdTI2MURcXHUyNkY5XFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyLVxcdURGQzRcXHVERkM3XFx1REZDQS1cXHVERkNDXXxcXHVEODNEW1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2Ni1cXHVEQzc4XFx1REM3Q1xcdURDODEtXFx1REM4M1xcdURDODUtXFx1REM4N1xcdURDOEZcXHVEQzkxXFx1RENBQVxcdURENzRcXHVERDc1XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNDUtXFx1REU0N1xcdURFNEItXFx1REU0RlxcdURFQTNcXHVERUI0LVxcdURFQjZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBGXFx1REQxOC1cXHVERDFGXFx1REQyNlxcdUREMzAtXFx1REQzOVxcdUREM0MtXFx1REQzRVxcdUREQjVcXHVEREI2XFx1RERCOFxcdUREQjlcXHVEREJCXFx1RERDRC1cXHVERENGXFx1REREMS1cXHVEREREXSkvZztcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gcmVxdWlyZSgnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnKTtcbmNvbnN0IGVtb2ppUmVnZXggPSByZXF1aXJlKCdlbW9qaS1yZWdleCcpO1xuXG5jb25zdCBzdHJpbmdXaWR0aCA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoZW1vamlSZWdleCgpLCAnICAnKTtcblxuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY29kZSA9IHN0cmluZy5jb2RlUG9pbnRBdChpKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZSA8PSAweDFGIHx8IChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gU3Vycm9nYXRlc1xuXHRcdGlmIChjb2RlID4gMHhGRkZGKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0d2lkdGggKz0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZSkgPyAyIDogMTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nV2lkdGg7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5nV2lkdGg7XG4iLAogICAgImNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5cbmZ1bmN0aW9uIGNvZGVSZWdleChjYXB0dXJlKSB7XG4gIHJldHVybiBjYXB0dXJlID8gL1xcdTAwMWJcXFsoKD86XFxkKjspezAsNX1cXGQqKW0vZyA6IC9cXHUwMDFiXFxbKD86XFxkKjspezAsNX1cXGQqbS9nO1xufVxuXG5mdW5jdGlvbiBzdHJsZW4oc3RyKSB7XG4gIGxldCBjb2RlID0gY29kZVJlZ2V4KCk7XG4gIGxldCBzdHJpcHBlZCA9ICgnJyArIHN0cikucmVwbGFjZShjb2RlLCAnJyk7XG4gIGxldCBzcGxpdCA9IHN0cmlwcGVkLnNwbGl0KCdcXG4nKTtcbiAgcmV0dXJuIHNwbGl0LnJlZHVjZShmdW5jdGlvbiAobWVtbywgcykge1xuICAgIHJldHVybiBzdHJpbmdXaWR0aChzKSA+IG1lbW8gPyBzdHJpbmdXaWR0aChzKSA6IG1lbW87XG4gIH0sIDApO1xufVxuXG5mdW5jdGlvbiByZXBlYXQoc3RyLCB0aW1lcykge1xuICByZXR1cm4gQXJyYXkodGltZXMgKyAxKS5qb2luKHN0cik7XG59XG5cbmZ1bmN0aW9uIHBhZChzdHIsIGxlbiwgcGFkLCBkaXIpIHtcbiAgbGV0IGxlbmd0aCA9IHN0cmxlbihzdHIpO1xuICBpZiAobGVuICsgMSA+PSBsZW5ndGgpIHtcbiAgICBsZXQgcGFkbGVuID0gbGVuIC0gbGVuZ3RoO1xuICAgIHN3aXRjaCAoZGlyKSB7XG4gICAgICBjYXNlICdyaWdodCc6IHtcbiAgICAgICAgc3RyID0gcmVwZWF0KHBhZCwgcGFkbGVuKSArIHN0cjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjZW50ZXInOiB7XG4gICAgICAgIGxldCByaWdodCA9IE1hdGguY2VpbChwYWRsZW4gLyAyKTtcbiAgICAgICAgbGV0IGxlZnQgPSBwYWRsZW4gLSByaWdodDtcbiAgICAgICAgc3RyID0gcmVwZWF0KHBhZCwgbGVmdCkgKyBzdHIgKyByZXBlYXQocGFkLCByaWdodCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBzdHIgPSBzdHIgKyByZXBlYXQocGFkLCBwYWRsZW4pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxubGV0IGNvZGVDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBhZGRUb0NvZGVDYWNoZShuYW1lLCBvbiwgb2ZmKSB7XG4gIG9uID0gJ1xcdTAwMWJbJyArIG9uICsgJ20nO1xuICBvZmYgPSAnXFx1MDAxYlsnICsgb2ZmICsgJ20nO1xuICBjb2RlQ2FjaGVbb25dID0geyBzZXQ6IG5hbWUsIHRvOiB0cnVlIH07XG4gIGNvZGVDYWNoZVtvZmZdID0geyBzZXQ6IG5hbWUsIHRvOiBmYWxzZSB9O1xuICBjb2RlQ2FjaGVbbmFtZV0gPSB7IG9uOiBvbiwgb2ZmOiBvZmYgfTtcbn1cblxuLy9odHRwczovL2dpdGh1Yi5jb20vTWFyYWsvY29sb3JzLmpzL2Jsb2IvbWFzdGVyL2xpYi9zdHlsZXMuanNcbmFkZFRvQ29kZUNhY2hlKCdib2xkJywgMSwgMjIpO1xuYWRkVG9Db2RlQ2FjaGUoJ2l0YWxpY3MnLCAzLCAyMyk7XG5hZGRUb0NvZGVDYWNoZSgndW5kZXJsaW5lJywgNCwgMjQpO1xuYWRkVG9Db2RlQ2FjaGUoJ2ludmVyc2UnLCA3LCAyNyk7XG5hZGRUb0NvZGVDYWNoZSgnc3RyaWtldGhyb3VnaCcsIDksIDI5KTtcblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoc3RhdGUsIGNvbnRyb2xDaGFycykge1xuICBsZXQgY29udHJvbENvZGUgPSBjb250cm9sQ2hhcnNbMV0gPyBwYXJzZUludChjb250cm9sQ2hhcnNbMV0uc3BsaXQoJzsnKVswXSkgOiAwO1xuICBpZiAoKGNvbnRyb2xDb2RlID49IDMwICYmIGNvbnRyb2xDb2RlIDw9IDM5KSB8fCAoY29udHJvbENvZGUgPj0gOTAgJiYgY29udHJvbENvZGUgPD0gOTcpKSB7XG4gICAgc3RhdGUubGFzdEZvcmVncm91bmRBZGRlZCA9IGNvbnRyb2xDaGFyc1swXTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKChjb250cm9sQ29kZSA+PSA0MCAmJiBjb250cm9sQ29kZSA8PSA0OSkgfHwgKGNvbnRyb2xDb2RlID49IDEwMCAmJiBjb250cm9sQ29kZSA8PSAxMDcpKSB7XG4gICAgc3RhdGUubGFzdEJhY2tncm91bmRBZGRlZCA9IGNvbnRyb2xDaGFyc1swXTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGNvbnRyb2xDb2RlID09PSAwKSB7XG4gICAgZm9yIChsZXQgaSBpbiBzdGF0ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUsIGkpKSB7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZVtpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBpbmZvID0gY29kZUNhY2hlW2NvbnRyb2xDaGFyc1swXV07XG4gIGlmIChpbmZvKSB7XG4gICAgc3RhdGVbaW5mby5zZXRdID0gaW5mby50bztcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkU3RhdGUobGluZSkge1xuICBsZXQgY29kZSA9IGNvZGVSZWdleCh0cnVlKTtcbiAgbGV0IGNvbnRyb2xDaGFycyA9IGNvZGUuZXhlYyhsaW5lKTtcbiAgbGV0IHN0YXRlID0ge307XG4gIHdoaWxlIChjb250cm9sQ2hhcnMgIT09IG51bGwpIHtcbiAgICB1cGRhdGVTdGF0ZShzdGF0ZSwgY29udHJvbENoYXJzKTtcbiAgICBjb250cm9sQ2hhcnMgPSBjb2RlLmV4ZWMobGluZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1bndpbmRTdGF0ZShzdGF0ZSwgcmV0KSB7XG4gIGxldCBsYXN0QmFja2dyb3VuZEFkZGVkID0gc3RhdGUubGFzdEJhY2tncm91bmRBZGRlZDtcbiAgbGV0IGxhc3RGb3JlZ3JvdW5kQWRkZWQgPSBzdGF0ZS5sYXN0Rm9yZWdyb3VuZEFkZGVkO1xuXG4gIGRlbGV0ZSBzdGF0ZS5sYXN0QmFja2dyb3VuZEFkZGVkO1xuICBkZWxldGUgc3RhdGUubGFzdEZvcmVncm91bmRBZGRlZDtcblxuICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHN0YXRlW2tleV0pIHtcbiAgICAgIHJldCArPSBjb2RlQ2FjaGVba2V5XS5vZmY7XG4gICAgfVxuICB9KTtcblxuICBpZiAobGFzdEJhY2tncm91bmRBZGRlZCAmJiBsYXN0QmFja2dyb3VuZEFkZGVkICE9ICdcXHUwMDFiWzQ5bScpIHtcbiAgICByZXQgKz0gJ1xcdTAwMWJbNDltJztcbiAgfVxuICBpZiAobGFzdEZvcmVncm91bmRBZGRlZCAmJiBsYXN0Rm9yZWdyb3VuZEFkZGVkICE9ICdcXHUwMDFiWzM5bScpIHtcbiAgICByZXQgKz0gJ1xcdTAwMWJbMzltJztcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHJld2luZFN0YXRlKHN0YXRlLCByZXQpIHtcbiAgbGV0IGxhc3RCYWNrZ3JvdW5kQWRkZWQgPSBzdGF0ZS5sYXN0QmFja2dyb3VuZEFkZGVkO1xuICBsZXQgbGFzdEZvcmVncm91bmRBZGRlZCA9IHN0YXRlLmxhc3RGb3JlZ3JvdW5kQWRkZWQ7XG5cbiAgZGVsZXRlIHN0YXRlLmxhc3RCYWNrZ3JvdW5kQWRkZWQ7XG4gIGRlbGV0ZSBzdGF0ZS5sYXN0Rm9yZWdyb3VuZEFkZGVkO1xuXG4gIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoc3RhdGVba2V5XSkge1xuICAgICAgcmV0ID0gY29kZUNhY2hlW2tleV0ub24gKyByZXQ7XG4gICAgfVxuICB9KTtcblxuICBpZiAobGFzdEJhY2tncm91bmRBZGRlZCAmJiBsYXN0QmFja2dyb3VuZEFkZGVkICE9ICdcXHUwMDFiWzQ5bScpIHtcbiAgICByZXQgPSBsYXN0QmFja2dyb3VuZEFkZGVkICsgcmV0O1xuICB9XG4gIGlmIChsYXN0Rm9yZWdyb3VuZEFkZGVkICYmIGxhc3RGb3JlZ3JvdW5kQWRkZWQgIT0gJ1xcdTAwMWJbMzltJykge1xuICAgIHJldCA9IGxhc3RGb3JlZ3JvdW5kQWRkZWQgKyByZXQ7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZVdpZHRoKHN0ciwgZGVzaXJlZExlbmd0aCkge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gc3RybGVuKHN0cikpIHtcbiAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBkZXNpcmVkTGVuZ3RoKTtcbiAgfVxuXG4gIHdoaWxlIChzdHJsZW4oc3RyKSA+IGRlc2lyZWRMZW5ndGgpIHtcbiAgICBzdHIgPSBzdHIuc2xpY2UoMCwgLTEpO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gdHJ1bmNhdGVXaWR0aFdpdGhBbnNpKHN0ciwgZGVzaXJlZExlbmd0aCkge1xuICBsZXQgY29kZSA9IGNvZGVSZWdleCh0cnVlKTtcbiAgbGV0IHNwbGl0ID0gc3RyLnNwbGl0KGNvZGVSZWdleCgpKTtcbiAgbGV0IHNwbGl0SW5kZXggPSAwO1xuICBsZXQgcmV0TGVuID0gMDtcbiAgbGV0IHJldCA9ICcnO1xuICBsZXQgbXlBcnJheTtcbiAgbGV0IHN0YXRlID0ge307XG5cbiAgd2hpbGUgKHJldExlbiA8IGRlc2lyZWRMZW5ndGgpIHtcbiAgICBteUFycmF5ID0gY29kZS5leGVjKHN0cik7XG4gICAgbGV0IHRvQWRkID0gc3BsaXRbc3BsaXRJbmRleF07XG4gICAgc3BsaXRJbmRleCsrO1xuICAgIGlmIChyZXRMZW4gKyBzdHJsZW4odG9BZGQpID4gZGVzaXJlZExlbmd0aCkge1xuICAgICAgdG9BZGQgPSB0cnVuY2F0ZVdpZHRoKHRvQWRkLCBkZXNpcmVkTGVuZ3RoIC0gcmV0TGVuKTtcbiAgICB9XG4gICAgcmV0ICs9IHRvQWRkO1xuICAgIHJldExlbiArPSBzdHJsZW4odG9BZGQpO1xuXG4gICAgaWYgKHJldExlbiA8IGRlc2lyZWRMZW5ndGgpIHtcbiAgICAgIGlmICghbXlBcnJheSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gZnVsbC13aWR0aCBjaGFycyBtYXkgY2F1c2UgYSB3aGl0ZXNwYWNlIHdoaWNoIGNhbm5vdCBiZSBmaWxsZWRcbiAgICAgIHJldCArPSBteUFycmF5WzBdO1xuICAgICAgdXBkYXRlU3RhdGUoc3RhdGUsIG15QXJyYXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bndpbmRTdGF0ZShzdGF0ZSwgcmV0KTtcbn1cblxuZnVuY3Rpb24gdHJ1bmNhdGUoc3RyLCBkZXNpcmVkTGVuZ3RoLCB0cnVuY2F0ZUNoYXIpIHtcbiAgdHJ1bmNhdGVDaGFyID0gdHJ1bmNhdGVDaGFyIHx8ICfigKYnO1xuICBsZXQgbGVuZ3RoT2ZTdHIgPSBzdHJsZW4oc3RyKTtcbiAgaWYgKGxlbmd0aE9mU3RyIDw9IGRlc2lyZWRMZW5ndGgpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGRlc2lyZWRMZW5ndGggLT0gc3RybGVuKHRydW5jYXRlQ2hhcik7XG5cbiAgbGV0IHJldCA9IHRydW5jYXRlV2lkdGhXaXRoQW5zaShzdHIsIGRlc2lyZWRMZW5ndGgpO1xuXG4gIHJldCArPSB0cnVuY2F0ZUNoYXI7XG5cbiAgY29uc3QgaHJlZlRhZyA9ICdcXHgxQl04OztcXHgwNyc7XG5cbiAgaWYgKHN0ci5pbmNsdWRlcyhocmVmVGFnKSAmJiAhcmV0LmluY2x1ZGVzKGhyZWZUYWcpKSB7XG4gICAgcmV0ICs9IGhyZWZUYWc7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIHtcbiAgICBjaGFyczoge1xuICAgICAgdG9wOiAn4pSAJyxcbiAgICAgICd0b3AtbWlkJzogJ+KUrCcsXG4gICAgICAndG9wLWxlZnQnOiAn4pSMJyxcbiAgICAgICd0b3AtcmlnaHQnOiAn4pSQJyxcbiAgICAgIGJvdHRvbTogJ+KUgCcsXG4gICAgICAnYm90dG9tLW1pZCc6ICfilLQnLFxuICAgICAgJ2JvdHRvbS1sZWZ0JzogJ+KUlCcsXG4gICAgICAnYm90dG9tLXJpZ2h0JzogJ+KUmCcsXG4gICAgICBsZWZ0OiAn4pSCJyxcbiAgICAgICdsZWZ0LW1pZCc6ICfilJwnLFxuICAgICAgbWlkOiAn4pSAJyxcbiAgICAgICdtaWQtbWlkJzogJ+KUvCcsXG4gICAgICByaWdodDogJ+KUgicsXG4gICAgICAncmlnaHQtbWlkJzogJ+KUpCcsXG4gICAgICBtaWRkbGU6ICfilIInLFxuICAgIH0sXG4gICAgdHJ1bmNhdGU6ICfigKYnLFxuICAgIGNvbFdpZHRoczogW10sXG4gICAgcm93SGVpZ2h0czogW10sXG4gICAgY29sQWxpZ25zOiBbXSxcbiAgICByb3dBbGlnbnM6IFtdLFxuICAgIHN0eWxlOiB7XG4gICAgICAncGFkZGluZy1sZWZ0JzogMSxcbiAgICAgICdwYWRkaW5nLXJpZ2h0JzogMSxcbiAgICAgIGhlYWQ6IFsncmVkJ10sXG4gICAgICBib3JkZXI6IFsnZ3JleSddLFxuICAgICAgY29tcGFjdDogZmFsc2UsXG4gICAgfSxcbiAgICBoZWFkOiBbXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBkZWZhdWx0cyA9IGRlZmF1bHRzIHx8IGRlZmF1bHRPcHRpb25zKCk7XG4gIGxldCByZXQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0aW9ucyk7XG4gIHJldC5jaGFycyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLmNoYXJzLCBvcHRpb25zLmNoYXJzKTtcbiAgcmV0LnN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMuc3R5bGUsIG9wdGlvbnMuc3R5bGUpO1xuICByZXR1cm4gcmV0O1xufVxuXG4vLyBXcmFwIG9uIHdvcmQgYm91bmRhcnlcbmZ1bmN0aW9uIHdvcmRXcmFwKG1heExlbmd0aCwgaW5wdXQpIHtcbiAgbGV0IGxpbmVzID0gW107XG4gIGxldCBzcGxpdCA9IGlucHV0LnNwbGl0KC8oXFxzKykvZyk7XG4gIGxldCBsaW5lID0gW107XG4gIGxldCBsaW5lTGVuZ3RoID0gMDtcbiAgbGV0IHdoaXRlc3BhY2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBsZXQgd29yZCA9IHNwbGl0W2ldO1xuICAgIGxldCBuZXdMZW5ndGggPSBsaW5lTGVuZ3RoICsgc3RybGVuKHdvcmQpO1xuICAgIGlmIChsaW5lTGVuZ3RoID4gMCAmJiB3aGl0ZXNwYWNlKSB7XG4gICAgICBuZXdMZW5ndGggKz0gd2hpdGVzcGFjZS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChuZXdMZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgIGlmIChsaW5lTGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxpbmVzLnB1c2gobGluZS5qb2luKCcnKSk7XG4gICAgICB9XG4gICAgICBsaW5lID0gW3dvcmRdO1xuICAgICAgbGluZUxlbmd0aCA9IHN0cmxlbih3b3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZS5wdXNoKHdoaXRlc3BhY2UgfHwgJycsIHdvcmQpO1xuICAgICAgbGluZUxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICB9XG4gICAgd2hpdGVzcGFjZSA9IHNwbGl0W2kgKyAxXTtcbiAgfVxuICBpZiAobGluZUxlbmd0aCkge1xuICAgIGxpbmVzLnB1c2gobGluZS5qb2luKCcnKSk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG4vLyBXcmFwIHRleHQgKGlnbm9yaW5nIHdvcmQgYm91bmRhcmllcylcbmZ1bmN0aW9uIHRleHRXcmFwKG1heExlbmd0aCwgaW5wdXQpIHtcbiAgbGV0IGxpbmVzID0gW107XG4gIGxldCBsaW5lID0gJyc7XG4gIGZ1bmN0aW9uIHB1c2hMaW5lKHN0ciwgd3MpIHtcbiAgICBpZiAobGluZS5sZW5ndGggJiYgd3MpIGxpbmUgKz0gd3M7XG4gICAgbGluZSArPSBzdHI7XG4gICAgd2hpbGUgKGxpbmUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICBsaW5lcy5wdXNoKGxpbmUuc2xpY2UoMCwgbWF4TGVuZ3RoKSk7XG4gICAgICBsaW5lID0gbGluZS5zbGljZShtYXhMZW5ndGgpO1xuICAgIH1cbiAgfVxuICBsZXQgc3BsaXQgPSBpbnB1dC5zcGxpdCgvKFxccyspL2cpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcHVzaExpbmUoc3BsaXRbaV0sIGkgJiYgc3BsaXRbaSAtIDFdKTtcbiAgfVxuICBpZiAobGluZS5sZW5ndGgpIGxpbmVzLnB1c2gobGluZSk7XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gbXVsdGlMaW5lV29yZFdyYXAobWF4TGVuZ3RoLCBpbnB1dCwgd3JhcE9uV29yZEJvdW5kYXJ5ID0gdHJ1ZSkge1xuICBsZXQgb3V0cHV0ID0gW107XG4gIGlucHV0ID0gaW5wdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBoYW5kbGVyID0gd3JhcE9uV29yZEJvdW5kYXJ5ID8gd29yZFdyYXAgOiB0ZXh0V3JhcDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dC5wdXNoLmFwcGx5KG91dHB1dCwgaGFuZGxlcihtYXhMZW5ndGgsIGlucHV0W2ldKSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gY29sb3JpemVMaW5lcyhpbnB1dCkge1xuICBsZXQgc3RhdGUgPSB7fTtcbiAgbGV0IG91dHB1dCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSByZXdpbmRTdGF0ZShzdGF0ZSwgaW5wdXRbaV0pO1xuICAgIHN0YXRlID0gcmVhZFN0YXRlKGxpbmUpO1xuICAgIGxldCB0ZW1wID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpO1xuICAgIG91dHB1dC5wdXNoKHVud2luZFN0YXRlKHRlbXAsIGxpbmUpKTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENyZWRpdDogTWF0aGV1cyBTYW1wYWlvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoZXVzc2FtcGFpb1xuICovXG5mdW5jdGlvbiBoeXBlcmxpbmsodXJsLCB0ZXh0KSB7XG4gIGNvbnN0IE9TQyA9ICdcXHUwMDFCXSc7XG4gIGNvbnN0IEJFTCA9ICdcXHUwMDA3JztcbiAgY29uc3QgU0VQID0gJzsnO1xuXG4gIHJldHVybiBbT1NDLCAnOCcsIFNFUCwgU0VQLCB1cmwgfHwgdGV4dCwgQkVMLCB0ZXh0LCBPU0MsICc4JywgU0VQLCBTRVAsIEJFTF0uam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHJsZW46IHN0cmxlbixcbiAgcmVwZWF0OiByZXBlYXQsXG4gIHBhZDogcGFkLFxuICB0cnVuY2F0ZTogdHJ1bmNhdGUsXG4gIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxuICB3b3JkV3JhcDogbXVsdGlMaW5lV29yZFdyYXAsXG4gIGNvbG9yaXplTGluZXM6IGNvbG9yaXplTGluZXMsXG4gIGh5cGVybGluayxcbn07XG4iLAogICAgIi8qXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLlxuXG4qL1xuXG52YXIgc3R5bGVzID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IHN0eWxlcztcblxudmFyIGNvZGVzID0ge1xuICByZXNldDogWzAsIDBdLFxuXG4gIGJvbGQ6IFsxLCAyMl0sXG4gIGRpbTogWzIsIDIyXSxcbiAgaXRhbGljOiBbMywgMjNdLFxuICB1bmRlcmxpbmU6IFs0LCAyNF0sXG4gIGludmVyc2U6IFs3LCAyN10sXG4gIGhpZGRlbjogWzgsIDI4XSxcbiAgc3RyaWtldGhyb3VnaDogWzksIDI5XSxcblxuICBibGFjazogWzMwLCAzOV0sXG4gIHJlZDogWzMxLCAzOV0sXG4gIGdyZWVuOiBbMzIsIDM5XSxcbiAgeWVsbG93OiBbMzMsIDM5XSxcbiAgYmx1ZTogWzM0LCAzOV0sXG4gIG1hZ2VudGE6IFszNSwgMzldLFxuICBjeWFuOiBbMzYsIDM5XSxcbiAgd2hpdGU6IFszNywgMzldLFxuICBncmF5OiBbOTAsIDM5XSxcbiAgZ3JleTogWzkwLCAzOV0sXG5cbiAgYnJpZ2h0UmVkOiBbOTEsIDM5XSxcbiAgYnJpZ2h0R3JlZW46IFs5MiwgMzldLFxuICBicmlnaHRZZWxsb3c6IFs5MywgMzldLFxuICBicmlnaHRCbHVlOiBbOTQsIDM5XSxcbiAgYnJpZ2h0TWFnZW50YTogWzk1LCAzOV0sXG4gIGJyaWdodEN5YW46IFs5NiwgMzldLFxuICBicmlnaHRXaGl0ZTogWzk3LCAzOV0sXG5cbiAgYmdCbGFjazogWzQwLCA0OV0sXG4gIGJnUmVkOiBbNDEsIDQ5XSxcbiAgYmdHcmVlbjogWzQyLCA0OV0sXG4gIGJnWWVsbG93OiBbNDMsIDQ5XSxcbiAgYmdCbHVlOiBbNDQsIDQ5XSxcbiAgYmdNYWdlbnRhOiBbNDUsIDQ5XSxcbiAgYmdDeWFuOiBbNDYsIDQ5XSxcbiAgYmdXaGl0ZTogWzQ3LCA0OV0sXG4gIGJnR3JheTogWzEwMCwgNDldLFxuICBiZ0dyZXk6IFsxMDAsIDQ5XSxcblxuICBiZ0JyaWdodFJlZDogWzEwMSwgNDldLFxuICBiZ0JyaWdodEdyZWVuOiBbMTAyLCA0OV0sXG4gIGJnQnJpZ2h0WWVsbG93OiBbMTAzLCA0OV0sXG4gIGJnQnJpZ2h0Qmx1ZTogWzEwNCwgNDldLFxuICBiZ0JyaWdodE1hZ2VudGE6IFsxMDUsIDQ5XSxcbiAgYmdCcmlnaHRDeWFuOiBbMTA2LCA0OV0sXG4gIGJnQnJpZ2h0V2hpdGU6IFsxMDcsIDQ5XSxcblxuICAvLyBsZWdhY3kgc3R5bGVzIGZvciBjb2xvcnMgcHJlIHYxLjAuMFxuICBibGFja0JHOiBbNDAsIDQ5XSxcbiAgcmVkQkc6IFs0MSwgNDldLFxuICBncmVlbkJHOiBbNDIsIDQ5XSxcbiAgeWVsbG93Qkc6IFs0MywgNDldLFxuICBibHVlQkc6IFs0NCwgNDldLFxuICBtYWdlbnRhQkc6IFs0NSwgNDldLFxuICBjeWFuQkc6IFs0NiwgNDldLFxuICB3aGl0ZUJHOiBbNDcsIDQ5XSxcblxufTtcblxuT2JqZWN0LmtleXMoY29kZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gIHZhciB2YWwgPSBjb2Rlc1trZXldO1xuICB2YXIgc3R5bGUgPSBzdHlsZXNba2V5XSA9IFtdO1xuICBzdHlsZS5vcGVuID0gJ1xcdTAwMWJbJyArIHZhbFswXSArICdtJztcbiAgc3R5bGUuY2xvc2UgPSAnXFx1MDAxYlsnICsgdmFsWzFdICsgJ20nO1xufSk7XG4iLAogICAgIi8qXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG50aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluXG50aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG51c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllc1xub2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvXG5zbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZmxhZywgYXJndikge1xuICBhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cbiAgdmFyIHRlcm1pbmF0b3JQb3MgPSBhcmd2LmluZGV4T2YoJy0tJyk7XG4gIHZhciBwcmVmaXggPSAvXi17MSwyfS8udGVzdChmbGFnKSA/ICcnIDogJy0tJztcbiAgdmFyIHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblxuICByZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwKICAgICIvKlxuVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3MgPSByZXF1aXJlKCdvcycpO1xudmFyIGhhc0ZsYWcgPSByZXF1aXJlKCcuL2hhcy1mbGFnLmpzJyk7XG5cbnZhciBlbnYgPSBwcm9jZXNzLmVudjtcblxudmFyIGZvcmNlQ29sb3IgPSB2b2lkIDA7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fCBoYXNGbGFnKCduby1jb2xvcnMnKSB8fCBoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG4gIGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fCBoYXNGbGFnKCdjb2xvcnMnKSB8fCBoYXNGbGFnKCdjb2xvcj10cnVlJylcbiAgICAgICAgICAgfHwgaGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcbiAgZm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcbiAgZm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDBcbiAgICB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcbiAgaWYgKGxldmVsID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsZXZlbDogbGV2ZWwsXG4gICAgaGFzQmFzaWM6IHRydWUsXG4gICAgaGFzMjU2OiBsZXZlbCA+PSAyLFxuICAgIGhhczE2bTogbGV2ZWwgPj0gMyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihzdHJlYW0pIHtcbiAgaWYgKGZvcmNlQ29sb3IgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHwgaGFzRmxhZygnY29sb3I9ZnVsbCcpXG4gICAgICB8fCBoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuICAgIHJldHVybiAzO1xuICB9XG5cbiAgaWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cblxuICBpZiAoc3RyZWFtICYmICFzdHJlYW0uaXNUVFkgJiYgZm9yY2VDb2xvciAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cbiAgICAvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuICAgIC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuICAgIC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdFxuICAgIC8vIFdpbmRvd3MgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlXG4gICAgLy8gZmlyc3QgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG4gICAgdmFyIG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuICAgIGlmIChOdW1iZXIocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJylbMF0pID49IDhcbiAgICAgICAgJiYgTnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiYgTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODYpIHtcbiAgICAgIHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuICAgIH1cblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKCdDSScgaW4gZW52KSB7XG4gICAgaWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoZnVuY3Rpb24oc2lnbikge1xuICAgICAgcmV0dXJuIHNpZ24gaW4gZW52O1xuICAgIH0pIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluO1xuICB9XG5cbiAgaWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcbiAgICByZXR1cm4gKC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwXG4gICAgKTtcbiAgfVxuXG4gIGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuICAgIHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuICAgICAgY2FzZSAnaVRlcm0uYXBwJzpcbiAgICAgICAgcmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuICAgICAgY2FzZSAnSHlwZXInOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICAvLyBObyBkZWZhdWx0XG4gICAgfVxuICB9XG5cbiAgaWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuXG4gIGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG4gICAgcmV0dXJuIG1pbjtcbiAgfVxuXG4gIHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0pIHtcbiAgdmFyIGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuICByZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuICBzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG4gIHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKSxcbn07XG4iLAogICAgIm1vZHVsZVsnZXhwb3J0cyddID0gZnVuY3Rpb24gcnVuVGhlVHJhcCh0ZXh0LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdGV4dCA9IHRleHQgfHwgJ1J1biB0aGUgdHJhcCwgZHJvcCB0aGUgYmFzcyc7XG4gIHRleHQgPSB0ZXh0LnNwbGl0KCcnKTtcbiAgdmFyIHRyYXAgPSB7XG4gICAgYTogWydcXHUwMDQwJywgJ1xcdTAxMDQnLCAnXFx1MDIzYScsICdcXHUwMjQ1JywgJ1xcdTAzOTQnLCAnXFx1MDM5YicsICdcXHUwNDE0J10sXG4gICAgYjogWydcXHUwMGRmJywgJ1xcdTAxODEnLCAnXFx1MDI0MycsICdcXHUwMjZlJywgJ1xcdTAzYjInLCAnXFx1MGUzZiddLFxuICAgIGM6IFsnXFx1MDBhOScsICdcXHUwMjNiJywgJ1xcdTAzZmUnXSxcbiAgICBkOiBbJ1xcdTAwZDAnLCAnXFx1MDE4YScsICdcXHUwNTAwJywgJ1xcdTA1MDEnLCAnXFx1MDUwMicsICdcXHUwNTAzJ10sXG4gICAgZTogWydcXHUwMGNiJywgJ1xcdTAxMTUnLCAnXFx1MDE4ZScsICdcXHUwMjU4JywgJ1xcdTAzYTMnLCAnXFx1MDNiZScsICdcXHUwNGJjJyxcbiAgICAgICdcXHUwYTZjJ10sXG4gICAgZjogWydcXHUwNGZhJ10sXG4gICAgZzogWydcXHUwMjYyJ10sXG4gICAgaDogWydcXHUwMTI2JywgJ1xcdTAxOTUnLCAnXFx1MDRhMicsICdcXHUwNGJhJywgJ1xcdTA0YzcnLCAnXFx1MDUwYSddLFxuICAgIGk6IFsnXFx1MGYwZiddLFxuICAgIGo6IFsnXFx1MDEzNCddLFxuICAgIGs6IFsnXFx1MDEzOCcsICdcXHUwNGEwJywgJ1xcdTA0YzMnLCAnXFx1MDUxZSddLFxuICAgIGw6IFsnXFx1MDEzOSddLFxuICAgIG06IFsnXFx1MDI4ZCcsICdcXHUwNGNkJywgJ1xcdTA0Y2UnLCAnXFx1MDUyMCcsICdcXHUwNTIxJywgJ1xcdTBkNjknXSxcbiAgICBuOiBbJ1xcdTAwZDEnLCAnXFx1MDE0YicsICdcXHUwMTlkJywgJ1xcdTAzNzYnLCAnXFx1MDNhMCcsICdcXHUwNDhhJ10sXG4gICAgbzogWydcXHUwMGQ4JywgJ1xcdTAwZjUnLCAnXFx1MDBmOCcsICdcXHUwMWZlJywgJ1xcdTAyOTgnLCAnXFx1MDQ3YScsICdcXHUwNWRkJyxcbiAgICAgICdcXHUwNmRkJywgJ1xcdTBlNGYnXSxcbiAgICBwOiBbJ1xcdTAxZjcnLCAnXFx1MDQ4ZSddLFxuICAgIHE6IFsnXFx1MDljZCddLFxuICAgIHI6IFsnXFx1MDBhZScsICdcXHUwMWE2JywgJ1xcdTAyMTAnLCAnXFx1MDI0YycsICdcXHUwMjgwJywgJ1xcdTA0MmYnXSxcbiAgICBzOiBbJ1xcdTAwYTcnLCAnXFx1MDNkZScsICdcXHUwM2RmJywgJ1xcdTAzZTgnXSxcbiAgICB0OiBbJ1xcdTAxNDEnLCAnXFx1MDE2NicsICdcXHUwMzczJ10sXG4gICAgdTogWydcXHUwMWIxJywgJ1xcdTA1NGQnXSxcbiAgICB2OiBbJ1xcdTA1ZDgnXSxcbiAgICB3OiBbJ1xcdTA0MjgnLCAnXFx1MDQ2MCcsICdcXHUwNDdjJywgJ1xcdTBkNzAnXSxcbiAgICB4OiBbJ1xcdTA0YjInLCAnXFx1MDRmZScsICdcXHUwNGZjJywgJ1xcdTA0ZmQnXSxcbiAgICB5OiBbJ1xcdTAwYTUnLCAnXFx1MDRiMCcsICdcXHUwNGNiJ10sXG4gICAgejogWydcXHUwMWI1JywgJ1xcdTAyNDAnXSxcbiAgfTtcbiAgdGV4dC5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcbiAgICBjID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBjaGFycyA9IHRyYXBbY10gfHwgWycgJ107XG4gICAgdmFyIHJhbmQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpO1xuICAgIGlmICh0eXBlb2YgdHJhcFtjXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc3VsdCArPSB0cmFwW2NdW3JhbmRdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgKz0gYztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsCiAgICAiLy8gcGxlYXNlIG5vXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uIHphbGdvKHRleHQsIG9wdGlvbnMpIHtcbiAgdGV4dCA9IHRleHQgfHwgJyAgIGhlIGlzIGhlcmUgICAnO1xuICB2YXIgc291bCA9IHtcbiAgICAndXAnOiBbXG4gICAgICAnzI0nLCAnzI4nLCAnzIQnLCAnzIUnLFxuICAgICAgJ8y/JywgJ8yRJywgJ8yGJywgJ8yQJyxcbiAgICAgICfNkicsICfNlycsICfNkScsICfMhycsXG4gICAgICAnzIgnLCAnzIonLCAnzYInLCAnzJMnLFxuICAgICAgJ8yIJywgJ82KJywgJ82LJywgJ82MJyxcbiAgICAgICfMgycsICfMgicsICfMjCcsICfNkCcsXG4gICAgICAnzIAnLCAnzIEnLCAnzIsnLCAnzI8nLFxuICAgICAgJ8ySJywgJ8yTJywgJ8yUJywgJ8y9JyxcbiAgICAgICfMiScsICfNoycsICfNpCcsICfNpScsXG4gICAgICAnzaYnLCAnzacnLCAnzagnLCAnzaknLFxuICAgICAgJ82qJywgJ82rJywgJ82sJywgJ82tJyxcbiAgICAgICfNricsICfNrycsICfMvicsICfNmycsXG4gICAgICAnzYYnLCAnzJonLFxuICAgIF0sXG4gICAgJ2Rvd24nOiBbXG4gICAgICAnzJYnLCAnzJcnLCAnzJgnLCAnzJknLFxuICAgICAgJ8ycJywgJ8ydJywgJ8yeJywgJ8yfJyxcbiAgICAgICfMoCcsICfMpCcsICfMpScsICfMpicsXG4gICAgICAnzKknLCAnzKonLCAnzKsnLCAnzKwnLFxuICAgICAgJ8ytJywgJ8yuJywgJ8yvJywgJ8ywJyxcbiAgICAgICfMsScsICfMsicsICfMsycsICfMuScsXG4gICAgICAnzLonLCAnzLsnLCAnzLwnLCAnzYUnLFxuICAgICAgJ82HJywgJ82IJywgJ82JJywgJ82NJyxcbiAgICAgICfNjicsICfNkycsICfNlCcsICfNlScsXG4gICAgICAnzZYnLCAnzZknLCAnzZonLCAnzKMnLFxuICAgIF0sXG4gICAgJ21pZCc6IFtcbiAgICAgICfMlScsICfMmycsICfMgCcsICfMgScsXG4gICAgICAnzZgnLCAnzKEnLCAnzKInLCAnzKcnLFxuICAgICAgJ8yoJywgJ8y0JywgJ8y1JywgJ8y2JyxcbiAgICAgICfNnCcsICfNnScsICfNnicsXG4gICAgICAnzZ8nLCAnzaAnLCAnzaInLCAnzLgnLFxuICAgICAgJ8y3JywgJ82hJywgJyDSiScsXG4gICAgXSxcbiAgfTtcbiAgdmFyIGFsbCA9IFtdLmNvbmNhdChzb3VsLnVwLCBzb3VsLmRvd24sIHNvdWwubWlkKTtcblxuICBmdW5jdGlvbiByYW5kb21OdW1iZXIocmFuZ2UpIHtcbiAgICB2YXIgciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmdlKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ2hhcihjaGFyYWN0ZXIpIHtcbiAgICB2YXIgYm9vbCA9IGZhbHNlO1xuICAgIGFsbC5maWx0ZXIoZnVuY3Rpb24oaSkge1xuICAgICAgYm9vbCA9IChpID09PSBjaGFyYWN0ZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBib29sO1xuICB9XG5cblxuICBmdW5jdGlvbiBoZUNvbWVzKHRleHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGNvdW50cztcbiAgICB2YXIgbDtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zWyd1cCddID1cbiAgICAgIHR5cGVvZiBvcHRpb25zWyd1cCddICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnNbJ3VwJ10gOiB0cnVlO1xuICAgIG9wdGlvbnNbJ21pZCddID1cbiAgICAgIHR5cGVvZiBvcHRpb25zWydtaWQnXSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zWydtaWQnXSA6IHRydWU7XG4gICAgb3B0aW9uc1snZG93biddID1cbiAgICAgIHR5cGVvZiBvcHRpb25zWydkb3duJ10gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uc1snZG93biddIDogdHJ1ZTtcbiAgICBvcHRpb25zWydzaXplJ10gPVxuICAgICAgdHlwZW9mIG9wdGlvbnNbJ3NpemUnXSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zWydzaXplJ10gOiAnbWF4aSc7XG4gICAgdGV4dCA9IHRleHQuc3BsaXQoJycpO1xuICAgIGZvciAobCBpbiB0ZXh0KSB7XG4gICAgICBpZiAoaXNDaGFyKGwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGV4dFtsXTtcbiAgICAgIGNvdW50cyA9IHsndXAnOiAwLCAnZG93bic6IDAsICdtaWQnOiAwfTtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy5zaXplKSB7XG4gICAgICAgIGNhc2UgJ21pbmknOlxuICAgICAgICAgIGNvdW50cy51cCA9IHJhbmRvbU51bWJlcig4KTtcbiAgICAgICAgICBjb3VudHMubWlkID0gcmFuZG9tTnVtYmVyKDIpO1xuICAgICAgICAgIGNvdW50cy5kb3duID0gcmFuZG9tTnVtYmVyKDgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtYXhpJzpcbiAgICAgICAgICBjb3VudHMudXAgPSByYW5kb21OdW1iZXIoMTYpICsgMztcbiAgICAgICAgICBjb3VudHMubWlkID0gcmFuZG9tTnVtYmVyKDQpICsgMTtcbiAgICAgICAgICBjb3VudHMuZG93biA9IHJhbmRvbU51bWJlcig2NCkgKyAzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvdW50cy51cCA9IHJhbmRvbU51bWJlcig4KSArIDE7XG4gICAgICAgICAgY291bnRzLm1pZCA9IHJhbmRvbU51bWJlcig2KSAvIDI7XG4gICAgICAgICAgY291bnRzLmRvd24gPSByYW5kb21OdW1iZXIoOCkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJyID0gWyd1cCcsICdtaWQnLCAnZG93biddO1xuICAgICAgZm9yICh2YXIgZCBpbiBhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyW2RdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBjb3VudHNbaW5kZXhdOyBpKyspIHtcbiAgICAgICAgICBpZiAob3B0aW9uc1tpbmRleF0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHNvdWxbaW5kZXhdW3JhbmRvbU51bWJlcihzb3VsW2luZGV4XS5sZW5ndGgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvLyBkb24ndCBzdW1tb24gaGltXG4gIHJldHVybiBoZUNvbWVzKHRleHQsIG9wdGlvbnMpO1xufTtcblxuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICByZXR1cm4gZnVuY3Rpb24obGV0dGVyLCBpLCBleHBsb2RlZCkge1xuICAgIGlmIChsZXR0ZXIgPT09ICcgJykgcmV0dXJuIGxldHRlcjtcbiAgICBzd2l0Y2ggKGklMykge1xuICAgICAgY2FzZSAwOiByZXR1cm4gY29sb3JzLnJlZChsZXR0ZXIpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gY29sb3JzLndoaXRlKGxldHRlcik7XG4gICAgICBjYXNlIDI6IHJldHVybiBjb2xvcnMuYmx1ZShsZXR0ZXIpO1xuICAgIH1cbiAgfTtcbn07XG4iLAogICAgIm1vZHVsZVsnZXhwb3J0cyddID0gZnVuY3Rpb24oY29sb3JzKSB7XG4gIHJldHVybiBmdW5jdGlvbihsZXR0ZXIsIGksIGV4cGxvZGVkKSB7XG4gICAgcmV0dXJuIGkgJSAyID09PSAwID8gbGV0dGVyIDogY29sb3JzLmludmVyc2UobGV0dGVyKTtcbiAgfTtcbn07XG4iLAogICAgIm1vZHVsZVsnZXhwb3J0cyddID0gZnVuY3Rpb24oY29sb3JzKSB7XG4gIC8vIFJvWSBHIEJpVlxuICB2YXIgcmFpbmJvd0NvbG9ycyA9IFsncmVkJywgJ3llbGxvdycsICdncmVlbicsICdibHVlJywgJ21hZ2VudGEnXTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxldHRlciwgaSwgZXhwbG9kZWQpIHtcbiAgICBpZiAobGV0dGVyID09PSAnICcpIHtcbiAgICAgIHJldHVybiBsZXR0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb2xvcnNbcmFpbmJvd0NvbG9yc1tpKysgJSByYWluYm93Q29sb3JzLmxlbmd0aF1dKGxldHRlcik7XG4gICAgfVxuICB9O1xufTtcblxuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICB2YXIgYXZhaWxhYmxlID0gWyd1bmRlcmxpbmUnLCAnaW52ZXJzZScsICdncmV5JywgJ3llbGxvdycsICdyZWQnLCAnZ3JlZW4nLFxuICAgICdibHVlJywgJ3doaXRlJywgJ2N5YW4nLCAnbWFnZW50YScsICdicmlnaHRZZWxsb3cnLCAnYnJpZ2h0UmVkJyxcbiAgICAnYnJpZ2h0R3JlZW4nLCAnYnJpZ2h0Qmx1ZScsICdicmlnaHRXaGl0ZScsICdicmlnaHRDeWFuJywgJ2JyaWdodE1hZ2VudGEnXTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxldHRlciwgaSwgZXhwbG9kZWQpIHtcbiAgICByZXR1cm4gbGV0dGVyID09PSAnICcgPyBsZXR0ZXIgOlxuICAgICAgY29sb3JzW1xuICAgICAgICAgIGF2YWlsYWJsZVtNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAoYXZhaWxhYmxlLmxlbmd0aCAtIDIpKV1cbiAgICAgIF0obGV0dGVyKTtcbiAgfTtcbn07XG4iLAogICAgIi8qXG5cblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5PcmlnaW5hbCBMaWJyYXJ5XG4gIC0gQ29weXJpZ2h0IChjKSBNYXJhayBTcXVpcmVzXG5cbkFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eVxuIC0gQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLlxuXG4qL1xuXG52YXIgY29sb3JzID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNvbG9ycztcblxuY29sb3JzLnRoZW1lcyA9IHt9O1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBhbnNpU3R5bGVzID0gY29sb3JzLnN0eWxlcyA9IHJlcXVpcmUoJy4vc3R5bGVzJyk7XG52YXIgZGVmaW5lUHJvcHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBuZXdMaW5lUmVnZXggPSBuZXcgUmVnRXhwKC9bXFxyXFxuXSsvZyk7XG5cbmNvbG9ycy5zdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnLi9zeXN0ZW0vc3VwcG9ydHMtY29sb3JzJykuc3VwcG9ydHNDb2xvcjtcblxuaWYgKHR5cGVvZiBjb2xvcnMuZW5hYmxlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29sb3JzLmVuYWJsZWQgPSBjb2xvcnMuc3VwcG9ydHNDb2xvcigpICE9PSBmYWxzZTtcbn1cblxuY29sb3JzLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICBjb2xvcnMuZW5hYmxlZCA9IHRydWU7XG59O1xuXG5jb2xvcnMuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICBjb2xvcnMuZW5hYmxlZCA9IGZhbHNlO1xufTtcblxuY29sb3JzLnN0cmlwQ29sb3JzID0gY29sb3JzLnN0cmlwID0gZnVuY3Rpb24oc3RyKSB7XG4gIHJldHVybiAoJycgKyBzdHIpLnJlcGxhY2UoL1xceDFCXFxbXFxkK20vZywgJycpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG52YXIgc3R5bGl6ZSA9IGNvbG9ycy5zdHlsaXplID0gZnVuY3Rpb24gc3R5bGl6ZShzdHIsIHN0eWxlKSB7XG4gIGlmICghY29sb3JzLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gc3RyKycnO1xuICB9XG5cbiAgdmFyIHN0eWxlTWFwID0gYW5zaVN0eWxlc1tzdHlsZV07XG5cbiAgLy8gU3R5bGl6ZSBzaG91bGQgd29yayBmb3Igbm9uLUFOU0kgc3R5bGVzLCB0b29cbiAgaWYgKCFzdHlsZU1hcCAmJiBzdHlsZSBpbiBjb2xvcnMpIHtcbiAgICAvLyBTdHlsZSBtYXBzIGxpa2UgdHJhcCBvcGVyYXRlIGFzIGZ1bmN0aW9ucyBvbiBzdHJpbmdzO1xuICAgIC8vIHRoZXkgZG9uJ3QgaGF2ZSBwcm9wZXJ0aWVzIGxpa2Ugb3BlbiBvciBjbG9zZS5cbiAgICByZXR1cm4gY29sb3JzW3N0eWxlXShzdHIpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlTWFwLm9wZW4gKyBzdHIgKyBzdHlsZU1hcC5jbG9zZTtcbn07XG5cbnZhciBtYXRjaE9wZXJhdG9yc1JlID0gL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nO1xudmFyIGVzY2FwZVN0cmluZ1JlZ2V4cCA9IGZ1bmN0aW9uKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG4gIHJldHVybiBzdHIucmVwbGFjZShtYXRjaE9wZXJhdG9yc1JlLCAnXFxcXCQmJyk7XG59O1xuXG5mdW5jdGlvbiBidWlsZChfc3R5bGVzKSB7XG4gIHZhciBidWlsZGVyID0gZnVuY3Rpb24gYnVpbGRlcigpIHtcbiAgICByZXR1cm4gYXBwbHlTdHlsZS5hcHBseShidWlsZGVyLCBhcmd1bWVudHMpO1xuICB9O1xuICBidWlsZGVyLl9zdHlsZXMgPSBfc3R5bGVzO1xuICAvLyBfX3Byb3RvX18gaXMgdXNlZCBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuICAvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGUuXG4gIGJ1aWxkZXIuX19wcm90b19fID0gcHJvdG87XG4gIHJldHVybiBidWlsZGVyO1xufVxuXG52YXIgc3R5bGVzID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgcmV0ID0ge307XG4gIGFuc2lTdHlsZXMuZ3JleSA9IGFuc2lTdHlsZXMuZ3JheTtcbiAgT2JqZWN0LmtleXMoYW5zaVN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBhbnNpU3R5bGVzW2tleV0uY2xvc2VSZSA9XG4gICAgICBuZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChhbnNpU3R5bGVzW2tleV0uY2xvc2UpLCAnZycpO1xuICAgIHJldFtrZXldID0ge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkKHRoaXMuX3N0eWxlcy5jb25jYXQoa2V5KSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmV0O1xufSkoKTtcblxudmFyIHByb3RvID0gZGVmaW5lUHJvcHMoZnVuY3Rpb24gY29sb3JzKCkge30sIHN0eWxlcyk7XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGUoKSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICB2YXIgc3RyID0gYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7XG4gICAgLy8gVXNlIHdlYWsgZXF1YWxpdHkgY2hlY2sgc28gd2UgY2FuIGNvbG9yaXplIG51bGwvdW5kZWZpbmVkIGluIHNhZmUgbW9kZVxuICAgIGlmIChhcmcgIT0gbnVsbCAmJiBhcmcuY29uc3RydWN0b3IgPT09IFN0cmluZykge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHV0aWwuaW5zcGVjdChhcmcpO1xuICAgIH1cbiAgfSkuam9pbignICcpO1xuXG4gIGlmICghY29sb3JzLmVuYWJsZWQgfHwgIXN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICB2YXIgbmV3TGluZXNQcmVzZW50ID0gc3RyLmluZGV4T2YoJ1xcbicpICE9IC0xO1xuXG4gIHZhciBuZXN0ZWRTdHlsZXMgPSB0aGlzLl9zdHlsZXM7XG5cbiAgdmFyIGkgPSBuZXN0ZWRTdHlsZXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGNvZGUgPSBhbnNpU3R5bGVzW25lc3RlZFN0eWxlc1tpXV07XG4gICAgc3RyID0gY29kZS5vcGVuICsgc3RyLnJlcGxhY2UoY29kZS5jbG9zZVJlLCBjb2RlLm9wZW4pICsgY29kZS5jbG9zZTtcbiAgICBpZiAobmV3TGluZXNQcmVzZW50KSB7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXdMaW5lUmVnZXgsIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICAgIHJldHVybiBjb2RlLmNsb3NlICsgbWF0Y2ggKyBjb2RlLm9wZW47XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG5jb2xvcnMuc2V0VGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnNvbGUubG9nKCdjb2xvcnMuc2V0VGhlbWUgbm93IG9ubHkgYWNjZXB0cyBhbiBvYmplY3QsIG5vdCBhIHN0cmluZy4gICcgK1xuICAgICAgJ0lmIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhIHRoZW1lIGZyb20gYSBmaWxlLCBpdCBpcyBub3cgeW91ciAodGhlICcgK1xuICAgICAgJ2NhbGxlclxcJ3MpIHJlc3BvbnNpYmlsaXR5IHRvIHJlcXVpcmUgdGhlIGZpbGUuICBUaGUgb2xkIHN5bnRheCAnICtcbiAgICAgICdsb29rZWQgbGlrZSBjb2xvcnMuc2V0VGhlbWUoX19kaXJuYW1lICsgJyArXG4gICAgICAnXFwnLy4uL3RoZW1lcy9nZW5lcmljLWxvZ2dpbmcuanNcXCcpOyBUaGUgbmV3IHN5bnRheCBsb29rcyBsaWtlICcrXG4gICAgICAnY29sb3JzLnNldFRoZW1lKHJlcXVpcmUoX19kaXJuYW1lICsgJyArXG4gICAgICAnXFwnLy4uL3RoZW1lcy9nZW5lcmljLWxvZ2dpbmcuanNcXCcpKTsnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhlbWUpIHtcbiAgICAoZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgIGNvbG9yc1tzdHlsZV0gPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGVtZVtzdHlsZV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdmFyIG91dCA9IHN0cjtcbiAgICAgICAgICBmb3IgKHZhciBpIGluIHRoZW1lW3N0eWxlXSkge1xuICAgICAgICAgICAgb3V0ID0gY29sb3JzW3RoZW1lW3N0eWxlXVtpXV0ob3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sb3JzW3RoZW1lW3N0eWxlXV0oc3RyKTtcbiAgICAgIH07XG4gICAgfSkoc3R5bGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBpbml0KCkge1xuICB2YXIgcmV0ID0ge307XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0W25hbWVdID0ge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkKFtuYW1lXSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmV0O1xufVxuXG52YXIgc2VxdWVuY2VyID0gZnVuY3Rpb24gc2VxdWVuY2VyKG1hcCwgc3RyKSB7XG4gIHZhciBleHBsb2RlZCA9IHN0ci5zcGxpdCgnJyk7XG4gIGV4cGxvZGVkID0gZXhwbG9kZWQubWFwKG1hcCk7XG4gIHJldHVybiBleHBsb2RlZC5qb2luKCcnKTtcbn07XG5cbi8vIGN1c3RvbSBmb3JtYXR0ZXIgbWV0aG9kc1xuY29sb3JzLnRyYXAgPSByZXF1aXJlKCcuL2N1c3RvbS90cmFwJyk7XG5jb2xvcnMuemFsZ28gPSByZXF1aXJlKCcuL2N1c3RvbS96YWxnbycpO1xuXG4vLyBtYXBzXG5jb2xvcnMubWFwcyA9IHt9O1xuY29sb3JzLm1hcHMuYW1lcmljYSA9IHJlcXVpcmUoJy4vbWFwcy9hbWVyaWNhJykoY29sb3JzKTtcbmNvbG9ycy5tYXBzLnplYnJhID0gcmVxdWlyZSgnLi9tYXBzL3plYnJhJykoY29sb3JzKTtcbmNvbG9ycy5tYXBzLnJhaW5ib3cgPSByZXF1aXJlKCcuL21hcHMvcmFpbmJvdycpKGNvbG9ycyk7XG5jb2xvcnMubWFwcy5yYW5kb20gPSByZXF1aXJlKCcuL21hcHMvcmFuZG9tJykoY29sb3JzKTtcblxuZm9yICh2YXIgbWFwIGluIGNvbG9ycy5tYXBzKSB7XG4gIChmdW5jdGlvbihtYXApIHtcbiAgICBjb2xvcnNbbWFwXSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIHNlcXVlbmNlcihjb2xvcnMubWFwc1ttYXBdLCBzdHIpO1xuICAgIH07XG4gIH0pKG1hcCk7XG59XG5cbmRlZmluZVByb3BzKGNvbG9ycywgaW5pdCgpKTtcbiIsCiAgICAiLy9cbi8vIFJlbWFyazogUmVxdWlyaW5nIHRoaXMgZmlsZSB3aWxsIHVzZSB0aGUgXCJzYWZlXCIgY29sb3JzIEFQSSxcbi8vIHdoaWNoIHdpbGwgbm90IHRvdWNoIFN0cmluZy5wcm90b3R5cGUuXG4vL1xuLy8gICB2YXIgY29sb3JzID0gcmVxdWlyZSgnY29sb3JzL3NhZmUnKTtcbi8vICAgY29sb3JzLnJlZChcImZvb1wiKVxuLy9cbi8vXG52YXIgY29sb3JzID0gcmVxdWlyZSgnLi9saWIvY29sb3JzJyk7XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNvbG9ycztcbiIsCiAgICAiY29uc3QgeyBpbmZvLCBkZWJ1ZyB9ID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNsYXNzIENlbGwge1xuICAvKipcbiAgICogQSByZXByZXNlbnRhdGlvbiBvZiBhIGNlbGwgd2l0aGluIHRoZSB0YWJsZS5cbiAgICogSW1wbGVtZW50YXRpb25zIG11c3QgaGF2ZSBgaW5pdGAgYW5kIGBkcmF3YCBtZXRob2RzLFxuICAgKiBhcyB3ZWxsIGFzIGBjb2xTcGFuYCwgYHJvd1NwYW5gLCBgZGVzaXJlZEhlaWdodGAgYW5kIGBkZXNpcmVkV2lkdGhgIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIEVhY2ggY2VsbCB3aWxsIGhhdmUgaXQncyBgeGAgYW5kIGB5YCB2YWx1ZXMgc2V0IGJ5IHRoZSBgbGF5b3V0LW1hbmFnZXJgIHByaW9yIHRvXG4gICAgICogYGluaXRgIGJlaW5nIGNhbGxlZDtcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMueCA9IG51bGw7XG4gICAgdGhpcy55ID0gbnVsbDtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChbJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2JpZ2ludCcsICdzdHJpbmcnXS5pbmRleE9mKHR5cGVvZiBvcHRpb25zKSAhPT0gLTEpIHtcbiAgICAgIG9wdGlvbnMgPSB7IGNvbnRlbnQ6ICcnICsgb3B0aW9ucyB9O1xuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGxldCBjb250ZW50ID0gb3B0aW9ucy5jb250ZW50O1xuICAgIGlmIChbJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2JpZ2ludCcsICdzdHJpbmcnXS5pbmRleE9mKHR5cGVvZiBjb250ZW50KSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29udGVudCA9IFN0cmluZyhjb250ZW50KTtcbiAgICB9IGVsc2UgaWYgKCFjb250ZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuaHJlZiB8fCAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250ZW50IG5lZWRzIHRvIGJlIGEgcHJpbWl0aXZlLCBnb3Q6ICcgKyB0eXBlb2YgY29udGVudCk7XG4gICAgfVxuICAgIHRoaXMuY29sU3BhbiA9IG9wdGlvbnMuY29sU3BhbiB8fCAxO1xuICAgIHRoaXMucm93U3BhbiA9IG9wdGlvbnMucm93U3BhbiB8fCAxO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaHJlZikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdocmVmJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ocmVmO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbWVyZ2VUYWJsZU9wdGlvbnModGFibGVPcHRpb25zLCBjZWxscykge1xuICAgIHRoaXMuY2VsbHMgPSBjZWxscztcblxuICAgIGxldCBvcHRpb25zQ2hhcnMgPSB0aGlzLm9wdGlvbnMuY2hhcnMgfHwge307XG4gICAgbGV0IHRhYmxlQ2hhcnMgPSB0YWJsZU9wdGlvbnMuY2hhcnM7XG4gICAgbGV0IGNoYXJzID0gKHRoaXMuY2hhcnMgPSB7fSk7XG4gICAgQ0hBUl9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBzZXRPcHRpb24ob3B0aW9uc0NoYXJzLCB0YWJsZUNoYXJzLCBuYW1lLCBjaGFycyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRydW5jYXRlID0gdGhpcy5vcHRpb25zLnRydW5jYXRlIHx8IHRhYmxlT3B0aW9ucy50cnVuY2F0ZTtcblxuICAgIGxldCBzdHlsZSA9ICh0aGlzLm9wdGlvbnMuc3R5bGUgPSB0aGlzLm9wdGlvbnMuc3R5bGUgfHwge30pO1xuICAgIGxldCB0YWJsZVN0eWxlID0gdGFibGVPcHRpb25zLnN0eWxlO1xuICAgIHNldE9wdGlvbihzdHlsZSwgdGFibGVTdHlsZSwgJ3BhZGRpbmctbGVmdCcsIHRoaXMpO1xuICAgIHNldE9wdGlvbihzdHlsZSwgdGFibGVTdHlsZSwgJ3BhZGRpbmctcmlnaHQnLCB0aGlzKTtcbiAgICB0aGlzLmhlYWQgPSBzdHlsZS5oZWFkIHx8IHRhYmxlU3R5bGUuaGVhZDtcbiAgICB0aGlzLmJvcmRlciA9IHN0eWxlLmJvcmRlciB8fCB0YWJsZVN0eWxlLmJvcmRlcjtcblxuICAgIHRoaXMuZml4ZWRXaWR0aCA9IHRhYmxlT3B0aW9ucy5jb2xXaWR0aHNbdGhpcy54XTtcbiAgICB0aGlzLmxpbmVzID0gdGhpcy5jb21wdXRlTGluZXModGFibGVPcHRpb25zKTtcblxuICAgIHRoaXMuZGVzaXJlZFdpZHRoID0gdXRpbHMuc3RybGVuKHRoaXMuY29udGVudCkgKyB0aGlzLnBhZGRpbmdMZWZ0ICsgdGhpcy5wYWRkaW5nUmlnaHQ7XG4gICAgdGhpcy5kZXNpcmVkSGVpZ2h0ID0gdGhpcy5saW5lcy5sZW5ndGg7XG4gIH1cblxuICBjb21wdXRlTGluZXModGFibGVPcHRpb25zKSB7XG4gICAgY29uc3QgdGFibGVXb3JkV3JhcCA9IHRhYmxlT3B0aW9ucy53b3JkV3JhcCB8fCB0YWJsZU9wdGlvbnMudGV4dFdyYXA7XG4gICAgY29uc3QgeyB3b3JkV3JhcCA9IHRhYmxlV29yZFdyYXAgfSA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAodGhpcy5maXhlZFdpZHRoICYmIHdvcmRXcmFwKSB7XG4gICAgICB0aGlzLmZpeGVkV2lkdGggLT0gdGhpcy5wYWRkaW5nTGVmdCArIHRoaXMucGFkZGluZ1JpZ2h0O1xuICAgICAgaWYgKHRoaXMuY29sU3Bhbikge1xuICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5jb2xTcGFuKSB7XG4gICAgICAgICAgdGhpcy5maXhlZFdpZHRoICs9IHRhYmxlT3B0aW9ucy5jb2xXaWR0aHNbdGhpcy54ICsgaV07XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7IHdyYXBPbldvcmRCb3VuZGFyeTogdGFibGVXcmFwT25Xb3JkQm91bmRhcnkgPSB0cnVlIH0gPSB0YWJsZU9wdGlvbnM7XG4gICAgICBjb25zdCB7IHdyYXBPbldvcmRCb3VuZGFyeSA9IHRhYmxlV3JhcE9uV29yZEJvdW5kYXJ5IH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICByZXR1cm4gdGhpcy53cmFwTGluZXModXRpbHMud29yZFdyYXAodGhpcy5maXhlZFdpZHRoLCB0aGlzLmNvbnRlbnQsIHdyYXBPbldvcmRCb3VuZGFyeSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53cmFwTGluZXModGhpcy5jb250ZW50LnNwbGl0KCdcXG4nKSk7XG4gIH1cblxuICB3cmFwTGluZXMoY29tcHV0ZWRMaW5lcykge1xuICAgIGNvbnN0IGxpbmVzID0gdXRpbHMuY29sb3JpemVMaW5lcyhjb21wdXRlZExpbmVzKTtcbiAgICBpZiAodGhpcy5ocmVmKSB7XG4gICAgICByZXR1cm4gbGluZXMubWFwKChsaW5lKSA9PiB1dGlscy5oeXBlcmxpbmsodGhpcy5ocmVmLCBsaW5lKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQ2VsbHMgZGF0YSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZU9wdGlvbnMgLSBBIGZ1bGx5IHBvcHVsYXRlZCBzZXQgb2YgdGFibGVPcHRpb25zLlxuICAgKiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgZGVmYXVsdCB2YWx1ZXMsIHRhYmxlT3B0aW9ucyBtdXN0IGhhdmUgZnVsbHkgcG9wdWxhdGVkIHRoZVxuICAgKiBgY29sV2lkdGhzYCBhbmQgYHJvd1dpZHRoc2AgYXJyYXlzLiBUaG9zZSBhcnJheXMgbXVzdCBoYXZlIGxlbmd0aHMgZXF1YWwgdG8gdGhlIG51bWJlclxuICAgKiBvZiBjb2x1bW5zIG9yIHJvd3MgKHJlc3BlY3RpdmVseSkgaW4gdGhpcyB0YWJsZSwgYW5kIGVhY2ggYXJyYXkgaXRlbSBtdXN0IGJlIGEgTnVtYmVyLlxuICAgKlxuICAgKi9cbiAgaW5pdCh0YWJsZU9wdGlvbnMpIHtcbiAgICBsZXQgeCA9IHRoaXMueDtcbiAgICBsZXQgeSA9IHRoaXMueTtcbiAgICB0aGlzLndpZHRocyA9IHRhYmxlT3B0aW9ucy5jb2xXaWR0aHMuc2xpY2UoeCwgeCArIHRoaXMuY29sU3Bhbik7XG4gICAgdGhpcy5oZWlnaHRzID0gdGFibGVPcHRpb25zLnJvd0hlaWdodHMuc2xpY2UoeSwgeSArIHRoaXMucm93U3Bhbik7XG4gICAgdGhpcy53aWR0aCA9IHRoaXMud2lkdGhzLnJlZHVjZShzdW1QbHVzT25lLCAtMSk7XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodHMucmVkdWNlKHN1bVBsdXNPbmUsIC0xKTtcblxuICAgIHRoaXMuaEFsaWduID0gdGhpcy5vcHRpb25zLmhBbGlnbiB8fCB0YWJsZU9wdGlvbnMuY29sQWxpZ25zW3hdO1xuICAgIHRoaXMudkFsaWduID0gdGhpcy5vcHRpb25zLnZBbGlnbiB8fCB0YWJsZU9wdGlvbnMucm93QWxpZ25zW3ldO1xuXG4gICAgdGhpcy5kcmF3UmlnaHQgPSB4ICsgdGhpcy5jb2xTcGFuID09IHRhYmxlT3B0aW9ucy5jb2xXaWR0aHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXdzIHRoZSBnaXZlbiBsaW5lIG9mIHRoZSBjZWxsLlxuICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmZXJzIHRvIG1ldGhvZHMgYGRyYXdUb3BgLCBgZHJhd0JvdHRvbWAsIGBkcmF3TGluZWAgYW5kIGBkcmF3RW1wdHlgLlxuICAgKiBAcGFyYW0gbGluZU51bSAtIGNhbiBiZSBgdG9wYCwgYGJvdHRvbWAgb3IgYSBudW1lcmljYWwgbGluZSBudW1iZXIuXG4gICAqIEBwYXJhbSBzcGFubmluZ0NlbGwgLSB3aWxsIGJlIGEgbnVtYmVyIGlmIGJlaW5nIGNhbGxlZCBmcm9tIGEgUm93U3BhbkNlbGwsIGFuZCB3aWxsIHJlcHJlc2VudCBob3dcbiAgICogbWFueSByb3dzIGJlbG93IGl0J3MgYmVpbmcgY2FsbGVkIGZyb20uIE90aGVyd2lzZSBpdCdzIHVuZGVmaW5lZC5cbiAgICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgbGluZS5cbiAgICovXG4gIGRyYXcobGluZU51bSwgc3Bhbm5pbmdDZWxsKSB7XG4gICAgaWYgKGxpbmVOdW0gPT0gJ3RvcCcpIHJldHVybiB0aGlzLmRyYXdUb3AodGhpcy5kcmF3UmlnaHQpO1xuICAgIGlmIChsaW5lTnVtID09ICdib3R0b20nKSByZXR1cm4gdGhpcy5kcmF3Qm90dG9tKHRoaXMuZHJhd1JpZ2h0KTtcbiAgICBsZXQgY29udGVudCA9IHV0aWxzLnRydW5jYXRlKHRoaXMuY29udGVudCwgMTAsIHRoaXMudHJ1bmNhdGUpO1xuICAgIGlmICghbGluZU51bSkge1xuICAgICAgaW5mbyhgJHt0aGlzLnl9LSR7dGhpcy54fTogJHt0aGlzLnJvd1NwYW4gLSBsaW5lTnVtfXgke3RoaXMuY29sU3Bhbn0gQ2VsbCAke2NvbnRlbnR9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlYnVnKGAke2xpbmVOdW19LSR7dGhpcy54fTogMXgke3RoaXMuY29sU3Bhbn0gUm93U3BhbkNlbGwgJHtjb250ZW50fWApO1xuICAgIH1cbiAgICBsZXQgcGFkTGVuID0gTWF0aC5tYXgodGhpcy5oZWlnaHQgLSB0aGlzLmxpbmVzLmxlbmd0aCwgMCk7XG4gICAgbGV0IHBhZFRvcDtcbiAgICBzd2l0Y2ggKHRoaXMudkFsaWduKSB7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICBwYWRUb3AgPSBNYXRoLmNlaWwocGFkTGVuIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgcGFkVG9wID0gcGFkTGVuO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhZFRvcCA9IDA7XG4gICAgfVxuICAgIGlmIChsaW5lTnVtIDwgcGFkVG9wIHx8IGxpbmVOdW0gPj0gcGFkVG9wICsgdGhpcy5saW5lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYXdFbXB0eSh0aGlzLmRyYXdSaWdodCwgc3Bhbm5pbmdDZWxsKTtcbiAgICB9XG4gICAgbGV0IGZvcmNlVHJ1bmNhdGlvbiA9IHRoaXMubGluZXMubGVuZ3RoID4gdGhpcy5oZWlnaHQgJiYgbGluZU51bSArIDEgPj0gdGhpcy5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuZHJhd0xpbmUobGluZU51bSAtIHBhZFRvcCwgdGhpcy5kcmF3UmlnaHQsIGZvcmNlVHJ1bmNhdGlvbiwgc3Bhbm5pbmdDZWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSB0b3AgbGluZSBvZiB0aGUgY2VsbC5cbiAgICogQHBhcmFtIGRyYXdSaWdodCAtIHRydWUgaWYgdGhpcyBtZXRob2Qgc2hvdWxkIHJlbmRlciB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY2VsbC5cbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIGRyYXdUb3AoZHJhd1JpZ2h0KSB7XG4gICAgbGV0IGNvbnRlbnQgPSBbXTtcbiAgICBpZiAodGhpcy5jZWxscykge1xuICAgICAgLy9UT0RPOiBjZWxscyBzaG91bGQgYWx3YXlzIGV4aXN0IC0gc29tZSB0ZXN0cyBkb24ndCBmaWxsIGl0IGluIHRob3VnaFxuICAgICAgdGhpcy53aWR0aHMuZm9yRWFjaChmdW5jdGlvbiAod2lkdGgsIGluZGV4KSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCh0aGlzLl90b3BMZWZ0Q2hhcihpbmRleCkpO1xuICAgICAgICBjb250ZW50LnB1c2godXRpbHMucmVwZWF0KHRoaXMuY2hhcnNbdGhpcy55ID09IDAgPyAndG9wJyA6ICdtaWQnXSwgd2lkdGgpKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50LnB1c2godGhpcy5fdG9wTGVmdENoYXIoMCkpO1xuICAgICAgY29udGVudC5wdXNoKHV0aWxzLnJlcGVhdCh0aGlzLmNoYXJzW3RoaXMueSA9PSAwID8gJ3RvcCcgOiAnbWlkJ10sIHRoaXMud2lkdGgpKTtcbiAgICB9XG4gICAgaWYgKGRyYXdSaWdodCkge1xuICAgICAgY29udGVudC5wdXNoKHRoaXMuY2hhcnNbdGhpcy55ID09IDAgPyAndG9wUmlnaHQnIDogJ3JpZ2h0TWlkJ10pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53cmFwV2l0aFN0eWxlQ29sb3JzKCdib3JkZXInLCBjb250ZW50LmpvaW4oJycpKTtcbiAgfVxuXG4gIF90b3BMZWZ0Q2hhcihvZmZzZXQpIHtcbiAgICBsZXQgeCA9IHRoaXMueCArIG9mZnNldDtcbiAgICBsZXQgbGVmdENoYXI7XG4gICAgaWYgKHRoaXMueSA9PSAwKSB7XG4gICAgICBsZWZ0Q2hhciA9IHggPT0gMCA/ICd0b3BMZWZ0JyA6IG9mZnNldCA9PSAwID8gJ3RvcE1pZCcgOiAndG9wJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHggPT0gMCkge1xuICAgICAgICBsZWZ0Q2hhciA9ICdsZWZ0TWlkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnRDaGFyID0gb2Zmc2V0ID09IDAgPyAnbWlkTWlkJyA6ICdib3R0b21NaWQnO1xuICAgICAgICBpZiAodGhpcy5jZWxscykge1xuICAgICAgICAgIC8vVE9ETzogY2VsbHMgc2hvdWxkIGFsd2F5cyBleGlzdCAtIHNvbWUgdGVzdHMgZG9uJ3QgZmlsbCBpdCBpbiB0aG91Z2hcbiAgICAgICAgICBsZXQgc3BhbkFib3ZlID0gdGhpcy5jZWxsc1t0aGlzLnkgLSAxXVt4XSBpbnN0YW5jZW9mIENlbGwuQ29sU3BhbkNlbGw7XG4gICAgICAgICAgaWYgKHNwYW5BYm92ZSkge1xuICAgICAgICAgICAgbGVmdENoYXIgPSBvZmZzZXQgPT0gMCA/ICd0b3BNaWQnIDogJ21pZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvZmZzZXQgPT0gMCkge1xuICAgICAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuY2VsbHNbdGhpcy55XVt4IC0gaV0gaW5zdGFuY2VvZiBDZWxsLkNvbFNwYW5DZWxsKSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxzW3RoaXMueV1beCAtIGldIGluc3RhbmNlb2YgQ2VsbC5Sb3dTcGFuQ2VsbCkge1xuICAgICAgICAgICAgICBsZWZ0Q2hhciA9ICdsZWZ0TWlkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hhcnNbbGVmdENoYXJdO1xuICB9XG5cbiAgd3JhcFdpdGhTdHlsZUNvbG9ycyhzdHlsZVByb3BlcnR5LCBjb250ZW50KSB7XG4gICAgaWYgKHRoaXNbc3R5bGVQcm9wZXJ0eV0gJiYgdGhpc1tzdHlsZVByb3BlcnR5XS5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBjb2xvcnMgPSByZXF1aXJlKCdAY29sb3JzL2NvbG9ycy9zYWZlJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzW3N0eWxlUHJvcGVydHldLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29sb3JzID0gY29sb3JzW3RoaXNbc3R5bGVQcm9wZXJ0eV1baV1dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xvcnMoY29udGVudCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIGxpbmUgb2YgdGV4dC5cbiAgICogQHBhcmFtIGxpbmVOdW0gLSBXaGljaCBsaW5lIG9mIHRleHQgdG8gcmVuZGVyLiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGluZSB3aXRoaW4gdGhlIGNlbGwuXG4gICAqIFRoZXJlIG1heSBiZSB0b3AtcGFkZGluZyBhYm92ZSB0aGUgZmlyc3QgbGluZSBvZiB0ZXh0LlxuICAgKiBAcGFyYW0gZHJhd1JpZ2h0IC0gdHJ1ZSBpZiB0aGlzIG1ldGhvZCBzaG91bGQgcmVuZGVyIHRoZSByaWdodCBlZGdlIG9mIHRoZSBjZWxsLlxuICAgKiBAcGFyYW0gZm9yY2VUcnVuY2F0aW9uU3ltYm9sIC0gYHRydWVgIGlmIHRoZSByZW5kZXJlZCB0ZXh0IHNob3VsZCBlbmQgd2l0aCB0aGUgdHJ1bmNhdGlvbiBzeW1ib2wgZXZlblxuICAgKiBpZiB0aGUgdGV4dCBmaXRzLiBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgY2VsbCBpcyB2ZXJ0aWNhbGx5IHRydW5jYXRlZC4gSWYgYGZhbHNlYCB0aGUgdGV4dCBzaG91bGRcbiAgICogb25seSBpbmNsdWRlIHRoZSB0cnVuY2F0aW9uIHN5bWJvbCBpZiB0aGUgdGV4dCB3aWxsIG5vdCBmaXQgaG9yaXpvbnRhbGx5IHdpdGhpbiB0aGUgY2VsbCB3aWR0aC5cbiAgICogQHBhcmFtIHNwYW5uaW5nQ2VsbCAtIGEgbnVtYmVyIG9mIGlmIGJlaW5nIGNhbGxlZCBmcm9tIGEgUm93U3BhbkNlbGwuIChob3cgbWFueSByb3dzIGJlbG93KS4gb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIGRyYXdMaW5lKGxpbmVOdW0sIGRyYXdSaWdodCwgZm9yY2VUcnVuY2F0aW9uU3ltYm9sLCBzcGFubmluZ0NlbGwpIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMuY2hhcnNbdGhpcy54ID09IDAgPyAnbGVmdCcgOiAnbWlkZGxlJ107XG4gICAgaWYgKHRoaXMueCAmJiBzcGFubmluZ0NlbGwgJiYgdGhpcy5jZWxscykge1xuICAgICAgbGV0IGNlbGxMZWZ0ID0gdGhpcy5jZWxsc1t0aGlzLnkgKyBzcGFubmluZ0NlbGxdW3RoaXMueCAtIDFdO1xuICAgICAgd2hpbGUgKGNlbGxMZWZ0IGluc3RhbmNlb2YgQ29sU3BhbkNlbGwpIHtcbiAgICAgICAgY2VsbExlZnQgPSB0aGlzLmNlbGxzW2NlbGxMZWZ0LnldW2NlbGxMZWZ0LnggLSAxXTtcbiAgICAgIH1cbiAgICAgIGlmICghKGNlbGxMZWZ0IGluc3RhbmNlb2YgUm93U3BhbkNlbGwpKSB7XG4gICAgICAgIGxlZnQgPSB0aGlzLmNoYXJzWydyaWdodE1pZCddO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgbGVmdFBhZGRpbmcgPSB1dGlscy5yZXBlYXQoJyAnLCB0aGlzLnBhZGRpbmdMZWZ0KTtcbiAgICBsZXQgcmlnaHQgPSBkcmF3UmlnaHQgPyB0aGlzLmNoYXJzWydyaWdodCddIDogJyc7XG4gICAgbGV0IHJpZ2h0UGFkZGluZyA9IHV0aWxzLnJlcGVhdCgnICcsIHRoaXMucGFkZGluZ1JpZ2h0KTtcbiAgICBsZXQgbGluZSA9IHRoaXMubGluZXNbbGluZU51bV07XG4gICAgbGV0IGxlbiA9IHRoaXMud2lkdGggLSAodGhpcy5wYWRkaW5nTGVmdCArIHRoaXMucGFkZGluZ1JpZ2h0KTtcbiAgICBpZiAoZm9yY2VUcnVuY2F0aW9uU3ltYm9sKSBsaW5lICs9IHRoaXMudHJ1bmNhdGUgfHwgJ+KApic7XG4gICAgbGV0IGNvbnRlbnQgPSB1dGlscy50cnVuY2F0ZShsaW5lLCBsZW4sIHRoaXMudHJ1bmNhdGUpO1xuICAgIGNvbnRlbnQgPSB1dGlscy5wYWQoY29udGVudCwgbGVuLCAnICcsIHRoaXMuaEFsaWduKTtcbiAgICBjb250ZW50ID0gbGVmdFBhZGRpbmcgKyBjb250ZW50ICsgcmlnaHRQYWRkaW5nO1xuICAgIHJldHVybiB0aGlzLnN0eWxpemVMaW5lKGxlZnQsIGNvbnRlbnQsIHJpZ2h0KTtcbiAgfVxuXG4gIHN0eWxpemVMaW5lKGxlZnQsIGNvbnRlbnQsIHJpZ2h0KSB7XG4gICAgbGVmdCA9IHRoaXMud3JhcFdpdGhTdHlsZUNvbG9ycygnYm9yZGVyJywgbGVmdCk7XG4gICAgcmlnaHQgPSB0aGlzLndyYXBXaXRoU3R5bGVDb2xvcnMoJ2JvcmRlcicsIHJpZ2h0KTtcbiAgICBpZiAodGhpcy55ID09PSAwKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy53cmFwV2l0aFN0eWxlQ29sb3JzKCdoZWFkJywgY29udGVudCk7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0ICsgY29udGVudCArIHJpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGJvdHRvbSBsaW5lIG9mIHRoZSBjZWxsLlxuICAgKiBAcGFyYW0gZHJhd1JpZ2h0IC0gdHJ1ZSBpZiB0aGlzIG1ldGhvZCBzaG91bGQgcmVuZGVyIHRoZSByaWdodCBlZGdlIG9mIHRoZSBjZWxsLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZHJhd0JvdHRvbShkcmF3UmlnaHQpIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMuY2hhcnNbdGhpcy54ID09IDAgPyAnYm90dG9tTGVmdCcgOiAnYm90dG9tTWlkJ107XG4gICAgbGV0IGNvbnRlbnQgPSB1dGlscy5yZXBlYXQodGhpcy5jaGFycy5ib3R0b20sIHRoaXMud2lkdGgpO1xuICAgIGxldCByaWdodCA9IGRyYXdSaWdodCA/IHRoaXMuY2hhcnNbJ2JvdHRvbVJpZ2h0J10gOiAnJztcbiAgICByZXR1cm4gdGhpcy53cmFwV2l0aFN0eWxlQ29sb3JzKCdib3JkZXInLCBsZWZ0ICsgY29udGVudCArIHJpZ2h0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgYmxhbmsgbGluZSBvZiB0ZXh0IHdpdGhpbiB0aGUgY2VsbC4gVXNlZCBmb3IgdG9wIGFuZC9vciBib3R0b20gcGFkZGluZy5cbiAgICogQHBhcmFtIGRyYXdSaWdodCAtIHRydWUgaWYgdGhpcyBtZXRob2Qgc2hvdWxkIHJlbmRlciB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY2VsbC5cbiAgICogQHBhcmFtIHNwYW5uaW5nQ2VsbCAtIGEgbnVtYmVyIG9mIGlmIGJlaW5nIGNhbGxlZCBmcm9tIGEgUm93U3BhbkNlbGwuIChob3cgbWFueSByb3dzIGJlbG93KS4gb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIGRyYXdFbXB0eShkcmF3UmlnaHQsIHNwYW5uaW5nQ2VsbCkge1xuICAgIGxldCBsZWZ0ID0gdGhpcy5jaGFyc1t0aGlzLnggPT0gMCA/ICdsZWZ0JyA6ICdtaWRkbGUnXTtcbiAgICBpZiAodGhpcy54ICYmIHNwYW5uaW5nQ2VsbCAmJiB0aGlzLmNlbGxzKSB7XG4gICAgICBsZXQgY2VsbExlZnQgPSB0aGlzLmNlbGxzW3RoaXMueSArIHNwYW5uaW5nQ2VsbF1bdGhpcy54IC0gMV07XG4gICAgICB3aGlsZSAoY2VsbExlZnQgaW5zdGFuY2VvZiBDb2xTcGFuQ2VsbCkge1xuICAgICAgICBjZWxsTGVmdCA9IHRoaXMuY2VsbHNbY2VsbExlZnQueV1bY2VsbExlZnQueCAtIDFdO1xuICAgICAgfVxuICAgICAgaWYgKCEoY2VsbExlZnQgaW5zdGFuY2VvZiBSb3dTcGFuQ2VsbCkpIHtcbiAgICAgICAgbGVmdCA9IHRoaXMuY2hhcnNbJ3JpZ2h0TWlkJ107XG4gICAgICB9XG4gICAgfVxuICAgIGxldCByaWdodCA9IGRyYXdSaWdodCA/IHRoaXMuY2hhcnNbJ3JpZ2h0J10gOiAnJztcbiAgICBsZXQgY29udGVudCA9IHV0aWxzLnJlcGVhdCgnICcsIHRoaXMud2lkdGgpO1xuICAgIHJldHVybiB0aGlzLnN0eWxpemVMaW5lKGxlZnQsIGNvbnRlbnQsIHJpZ2h0KTtcbiAgfVxufVxuXG5jbGFzcyBDb2xTcGFuQ2VsbCB7XG4gIC8qKlxuICAgKiBBIENlbGwgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nLiBJdCBqdXN0IGRyYXdzIGVtcHR5IGxpbmVzLlxuICAgKiBVc2VkIGFzIGEgcGxhY2Vob2xkZXIgaW4gY29sdW1uIHNwYW5uaW5nLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBkcmF3KGxpbmVOdW0pIHtcbiAgICBpZiAodHlwZW9mIGxpbmVOdW0gPT09ICdudW1iZXInKSB7XG4gICAgICBkZWJ1ZyhgJHt0aGlzLnl9LSR7dGhpcy54fTogMXgxIENvbFNwYW5DZWxsYCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGluaXQoKSB7fVxuXG4gIG1lcmdlVGFibGVPcHRpb25zKCkge31cbn1cblxuY2xhc3MgUm93U3BhbkNlbGwge1xuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciBDZWxsIGZvciBhIENlbGwgdGhhdCBzcGFucyBtdWx0aXBsZSByb3dzLlxuICAgKiBJdCBkZWxlZ2F0ZXMgcmVuZGVyaW5nIHRvIHRoZSBvcmlnaW5hbCBjZWxsLCBidXQgYWRkcyB0aGUgYXBwcm9wcmlhdGUgb2Zmc2V0LlxuICAgKiBAcGFyYW0gb3JpZ2luYWxDZWxsXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3JpZ2luYWxDZWxsKSB7XG4gICAgdGhpcy5vcmlnaW5hbENlbGwgPSBvcmlnaW5hbENlbGw7XG4gIH1cblxuICBpbml0KHRhYmxlT3B0aW9ucykge1xuICAgIGxldCB5ID0gdGhpcy55O1xuICAgIGxldCBvcmlnaW5hbFkgPSB0aGlzLm9yaWdpbmFsQ2VsbC55O1xuICAgIHRoaXMuY2VsbE9mZnNldCA9IHkgLSBvcmlnaW5hbFk7XG4gICAgdGhpcy5vZmZzZXQgPSBmaW5kRGltZW5zaW9uKHRhYmxlT3B0aW9ucy5yb3dIZWlnaHRzLCBvcmlnaW5hbFksIHRoaXMuY2VsbE9mZnNldCk7XG4gIH1cblxuICBkcmF3KGxpbmVOdW0pIHtcbiAgICBpZiAobGluZU51bSA9PSAndG9wJykge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxDZWxsLmRyYXcodGhpcy5vZmZzZXQsIHRoaXMuY2VsbE9mZnNldCk7XG4gICAgfVxuICAgIGlmIChsaW5lTnVtID09ICdib3R0b20nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbENlbGwuZHJhdygnYm90dG9tJyk7XG4gICAgfVxuICAgIGRlYnVnKGAke3RoaXMueX0tJHt0aGlzLnh9OiAxeCR7dGhpcy5jb2xTcGFufSBSb3dTcGFuQ2VsbCBmb3IgJHt0aGlzLm9yaWdpbmFsQ2VsbC5jb250ZW50fWApO1xuICAgIHJldHVybiB0aGlzLm9yaWdpbmFsQ2VsbC5kcmF3KHRoaXMub2Zmc2V0ICsgMSArIGxpbmVOdW0pO1xuICB9XG5cbiAgbWVyZ2VUYWJsZU9wdGlvbnMoKSB7fVxufVxuXG5mdW5jdGlvbiBmaXJzdERlZmluZWQoLi4uYXJncykge1xuICByZXR1cm4gYXJncy5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsKS5zaGlmdCgpO1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG5mdW5jdGlvbiBzZXRPcHRpb24ob2JqQSwgb2JqQiwgbmFtZUIsIHRhcmdldE9iaikge1xuICBsZXQgbmFtZUEgPSBuYW1lQi5zcGxpdCgnLScpO1xuICBpZiAobmFtZUEubGVuZ3RoID4gMSkge1xuICAgIG5hbWVBWzFdID0gbmFtZUFbMV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lQVsxXS5zdWJzdHIoMSk7XG4gICAgbmFtZUEgPSBuYW1lQS5qb2luKCcnKTtcbiAgICB0YXJnZXRPYmpbbmFtZUFdID0gZmlyc3REZWZpbmVkKG9iakFbbmFtZUFdLCBvYmpBW25hbWVCXSwgb2JqQltuYW1lQV0sIG9iakJbbmFtZUJdKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRPYmpbbmFtZUJdID0gZmlyc3REZWZpbmVkKG9iakFbbmFtZUJdLCBvYmpCW25hbWVCXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZERpbWVuc2lvbihkaW1lbnNpb25UYWJsZSwgc3RhcnRpbmdJbmRleCwgc3Bhbikge1xuICBsZXQgcmV0ID0gZGltZW5zaW9uVGFibGVbc3RhcnRpbmdJbmRleF07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgc3BhbjsgaSsrKSB7XG4gICAgcmV0ICs9IDEgKyBkaW1lbnNpb25UYWJsZVtzdGFydGluZ0luZGV4ICsgaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc3VtUGx1c09uZShhLCBiKSB7XG4gIHJldHVybiBhICsgYiArIDE7XG59XG5cbmxldCBDSEFSX05BTUVTID0gW1xuICAndG9wJyxcbiAgJ3RvcC1taWQnLFxuICAndG9wLWxlZnQnLFxuICAndG9wLXJpZ2h0JyxcbiAgJ2JvdHRvbScsXG4gICdib3R0b20tbWlkJyxcbiAgJ2JvdHRvbS1sZWZ0JyxcbiAgJ2JvdHRvbS1yaWdodCcsXG4gICdsZWZ0JyxcbiAgJ2xlZnQtbWlkJyxcbiAgJ21pZCcsXG4gICdtaWQtbWlkJyxcbiAgJ3JpZ2h0JyxcbiAgJ3JpZ2h0LW1pZCcsXG4gICdtaWRkbGUnLFxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBDZWxsO1xubW9kdWxlLmV4cG9ydHMuQ29sU3BhbkNlbGwgPSBDb2xTcGFuQ2VsbDtcbm1vZHVsZS5leHBvcnRzLlJvd1NwYW5DZWxsID0gUm93U3BhbkNlbGw7XG4iLAogICAgImNvbnN0IHsgd2FybiwgZGVidWcgfSA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmNvbnN0IENlbGwgPSByZXF1aXJlKCcuL2NlbGwnKTtcbmNvbnN0IHsgQ29sU3BhbkNlbGwsIFJvd1NwYW5DZWxsIH0gPSBDZWxsO1xuXG4oZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBuZXh0KGFsbG9jLCBjb2wpIHtcbiAgICBpZiAoYWxsb2NbY29sXSA+IDApIHtcbiAgICAgIHJldHVybiBuZXh0KGFsbG9jLCBjb2wgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxheW91dFRhYmxlKHRhYmxlKSB7XG4gICAgbGV0IGFsbG9jID0ge307XG4gICAgdGFibGUuZm9yRWFjaChmdW5jdGlvbiAocm93LCByb3dJbmRleCkge1xuICAgICAgbGV0IGNvbCA9IDA7XG4gICAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBjZWxsLnkgPSByb3dJbmRleDtcbiAgICAgICAgLy8gQXZvaWQgZXJyb25lb3VzIGNhbGwgdG8gbmV4dCgpIG9uIGZpcnN0IHJvd1xuICAgICAgICBjZWxsLnggPSByb3dJbmRleCA/IG5leHQoYWxsb2MsIGNvbCkgOiBjb2w7XG4gICAgICAgIGNvbnN0IHJvd1NwYW4gPSBjZWxsLnJvd1NwYW4gfHwgMTtcbiAgICAgICAgY29uc3QgY29sU3BhbiA9IGNlbGwuY29sU3BhbiB8fCAxO1xuICAgICAgICBpZiAocm93U3BhbiA+IDEpIHtcbiAgICAgICAgICBmb3IgKGxldCBjcyA9IDA7IGNzIDwgY29sU3BhbjsgY3MrKykge1xuICAgICAgICAgICAgYWxsb2NbY2VsbC54ICsgY3NdID0gcm93U3BhbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sID0gY2VsbC54ICsgY29sU3BhbjtcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmtleXMoYWxsb2MpLmZvckVhY2goKGlkeCkgPT4ge1xuICAgICAgICBhbGxvY1tpZHhdLS07XG4gICAgICAgIGlmIChhbGxvY1tpZHhdIDwgMSkgZGVsZXRlIGFsbG9jW2lkeF07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlKSB7XG4gICAgbGV0IG13ID0gMDtcbiAgICB0YWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHJvdy5mb3JFYWNoKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIG13ID0gTWF0aC5tYXgobXcsIGNlbGwueCArIChjZWxsLmNvbFNwYW4gfHwgMSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG13O1xuICB9XG5cbiAgZnVuY3Rpb24gbWF4SGVpZ2h0KHRhYmxlKSB7XG4gICAgcmV0dXJuIHRhYmxlLmxlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbGxzQ29uZmxpY3QoY2VsbDEsIGNlbGwyKSB7XG4gICAgbGV0IHlNaW4xID0gY2VsbDEueTtcbiAgICBsZXQgeU1heDEgPSBjZWxsMS55IC0gMSArIChjZWxsMS5yb3dTcGFuIHx8IDEpO1xuICAgIGxldCB5TWluMiA9IGNlbGwyLnk7XG4gICAgbGV0IHlNYXgyID0gY2VsbDIueSAtIDEgKyAoY2VsbDIucm93U3BhbiB8fCAxKTtcbiAgICBsZXQgeUNvbmZsaWN0ID0gISh5TWluMSA+IHlNYXgyIHx8IHlNaW4yID4geU1heDEpO1xuXG4gICAgbGV0IHhNaW4xID0gY2VsbDEueDtcbiAgICBsZXQgeE1heDEgPSBjZWxsMS54IC0gMSArIChjZWxsMS5jb2xTcGFuIHx8IDEpO1xuICAgIGxldCB4TWluMiA9IGNlbGwyLng7XG4gICAgbGV0IHhNYXgyID0gY2VsbDIueCAtIDEgKyAoY2VsbDIuY29sU3BhbiB8fCAxKTtcbiAgICBsZXQgeENvbmZsaWN0ID0gISh4TWluMSA+IHhNYXgyIHx8IHhNaW4yID4geE1heDEpO1xuXG4gICAgcmV0dXJuIHlDb25mbGljdCAmJiB4Q29uZmxpY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBjb25mbGljdEV4aXN0cyhyb3dzLCB4LCB5KSB7XG4gICAgbGV0IGlfbWF4ID0gTWF0aC5taW4ocm93cy5sZW5ndGggLSAxLCB5KTtcbiAgICBsZXQgY2VsbCA9IHsgeDogeCwgeTogeSB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGlfbWF4OyBpKyspIHtcbiAgICAgIGxldCByb3cgPSByb3dzW2ldO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGNlbGxzQ29uZmxpY3QoY2VsbCwgcm93W2pdKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsbEJsYW5rKHJvd3MsIHksIHhNaW4sIHhNYXgpIHtcbiAgICBmb3IgKGxldCB4ID0geE1pbjsgeCA8IHhNYXg7IHgrKykge1xuICAgICAgaWYgKGNvbmZsaWN0RXhpc3RzKHJvd3MsIHgsIHkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRSb3dTcGFuQ2VsbHModGFibGUpIHtcbiAgICB0YWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIHJvd0luZGV4KSB7XG4gICAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNlbGwucm93U3BhbjsgaSsrKSB7XG4gICAgICAgICAgbGV0IHJvd1NwYW5DZWxsID0gbmV3IFJvd1NwYW5DZWxsKGNlbGwpO1xuICAgICAgICAgIHJvd1NwYW5DZWxsLnggPSBjZWxsLng7XG4gICAgICAgICAgcm93U3BhbkNlbGwueSA9IGNlbGwueSArIGk7XG4gICAgICAgICAgcm93U3BhbkNlbGwuY29sU3BhbiA9IGNlbGwuY29sU3BhbjtcbiAgICAgICAgICBpbnNlcnRDZWxsKHJvd1NwYW5DZWxsLCB0YWJsZVtyb3dJbmRleCArIGldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRDb2xTcGFuQ2VsbHMoY2VsbFJvd3MpIHtcbiAgICBmb3IgKGxldCByb3dJbmRleCA9IGNlbGxSb3dzLmxlbmd0aCAtIDE7IHJvd0luZGV4ID49IDA7IHJvd0luZGV4LS0pIHtcbiAgICAgIGxldCBjZWxsQ29sdW1ucyA9IGNlbGxSb3dzW3Jvd0luZGV4XTtcbiAgICAgIGZvciAobGV0IGNvbHVtbkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCBjZWxsQ29sdW1ucy5sZW5ndGg7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgbGV0IGNlbGwgPSBjZWxsQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgY2VsbC5jb2xTcGFuOyBrKyspIHtcbiAgICAgICAgICBsZXQgY29sU3BhbkNlbGwgPSBuZXcgQ29sU3BhbkNlbGwoKTtcbiAgICAgICAgICBjb2xTcGFuQ2VsbC54ID0gY2VsbC54ICsgaztcbiAgICAgICAgICBjb2xTcGFuQ2VsbC55ID0gY2VsbC55O1xuICAgICAgICAgIGNlbGxDb2x1bW5zLnNwbGljZShjb2x1bW5JbmRleCArIDEsIDAsIGNvbFNwYW5DZWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydENlbGwoY2VsbCwgcm93KSB7XG4gICAgbGV0IHggPSAwO1xuICAgIHdoaWxlICh4IDwgcm93Lmxlbmd0aCAmJiByb3dbeF0ueCA8IGNlbGwueCkge1xuICAgICAgeCsrO1xuICAgIH1cbiAgICByb3cuc3BsaWNlKHgsIDAsIGNlbGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsbEluVGFibGUodGFibGUpIHtcbiAgICBsZXQgaF9tYXggPSBtYXhIZWlnaHQodGFibGUpO1xuICAgIGxldCB3X21heCA9IG1heFdpZHRoKHRhYmxlKTtcbiAgICBkZWJ1ZyhgTWF4IHJvd3M6ICR7aF9tYXh9OyBNYXggY29sczogJHt3X21heH1gKTtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhfbWF4OyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd19tYXg7IHgrKykge1xuICAgICAgICBpZiAoIWNvbmZsaWN0RXhpc3RzKHRhYmxlLCB4LCB5KSkge1xuICAgICAgICAgIGxldCBvcHRzID0geyB4OiB4LCB5OiB5LCBjb2xTcGFuOiAxLCByb3dTcGFuOiAxIH07XG4gICAgICAgICAgeCsrO1xuICAgICAgICAgIHdoaWxlICh4IDwgd19tYXggJiYgIWNvbmZsaWN0RXhpc3RzKHRhYmxlLCB4LCB5KSkge1xuICAgICAgICAgICAgb3B0cy5jb2xTcGFuKys7XG4gICAgICAgICAgICB4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB5MiA9IHkgKyAxO1xuICAgICAgICAgIHdoaWxlICh5MiA8IGhfbWF4ICYmIGFsbEJsYW5rKHRhYmxlLCB5Miwgb3B0cy54LCBvcHRzLnggKyBvcHRzLmNvbFNwYW4pKSB7XG4gICAgICAgICAgICBvcHRzLnJvd1NwYW4rKztcbiAgICAgICAgICAgIHkyKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBjZWxsID0gbmV3IENlbGwob3B0cyk7XG4gICAgICAgICAgY2VsbC54ID0gb3B0cy54O1xuICAgICAgICAgIGNlbGwueSA9IG9wdHMueTtcbiAgICAgICAgICB3YXJuKGBNaXNzaW5nIGNlbGwgYXQgJHtjZWxsLnl9LSR7Y2VsbC54fS5gKTtcbiAgICAgICAgICBpbnNlcnRDZWxsKGNlbGwsIHRhYmxlW3ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ2VsbHMocm93cykge1xuICAgIHJldHVybiByb3dzLm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93KSkge1xuICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocm93KVswXTtcbiAgICAgICAgcm93ID0gcm93W2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICAgICAgICByb3cgPSByb3cuc2xpY2UoKTtcbiAgICAgICAgICByb3cudW5zaGlmdChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdyA9IFtrZXksIHJvd107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByb3cubWFwKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2VsbChjZWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZVRhYmxlTGF5b3V0KHJvd3MpIHtcbiAgICBsZXQgY2VsbFJvd3MgPSBnZW5lcmF0ZUNlbGxzKHJvd3MpO1xuICAgIGxheW91dFRhYmxlKGNlbGxSb3dzKTtcbiAgICBmaWxsSW5UYWJsZShjZWxsUm93cyk7XG4gICAgYWRkUm93U3BhbkNlbGxzKGNlbGxSb3dzKTtcbiAgICBhZGRDb2xTcGFuQ2VsbHMoY2VsbFJvd3MpO1xuICAgIHJldHVybiBjZWxsUm93cztcbiAgfVxuXG4gIG1vZHVsZS5leHBvcnRzID0ge1xuICAgIG1ha2VUYWJsZUxheW91dDogbWFrZVRhYmxlTGF5b3V0LFxuICAgIGxheW91dFRhYmxlOiBsYXlvdXRUYWJsZSxcbiAgICBhZGRSb3dTcGFuQ2VsbHM6IGFkZFJvd1NwYW5DZWxscyxcbiAgICBtYXhXaWR0aDogbWF4V2lkdGgsXG4gICAgZmlsbEluVGFibGU6IGZpbGxJblRhYmxlLFxuICAgIGNvbXB1dGVXaWR0aHM6IG1ha2VDb21wdXRlV2lkdGhzKCdjb2xTcGFuJywgJ2Rlc2lyZWRXaWR0aCcsICd4JywgMSksXG4gICAgY29tcHV0ZUhlaWdodHM6IG1ha2VDb21wdXRlV2lkdGhzKCdyb3dTcGFuJywgJ2Rlc2lyZWRIZWlnaHQnLCAneScsIDEpLFxuICB9O1xufSkoKTtcblxuZnVuY3Rpb24gbWFrZUNvbXB1dGVXaWR0aHMoY29sU3BhbiwgZGVzaXJlZFdpZHRoLCB4LCBmb3JjZWRNaW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWxzLCB0YWJsZSkge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBsZXQgc3Bhbm5lcnMgPSBbXTtcbiAgICBsZXQgYXV0byA9IHt9O1xuICAgIHRhYmxlLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgaWYgKChjZWxsW2NvbFNwYW5dIHx8IDEpID4gMSkge1xuICAgICAgICAgIHNwYW5uZXJzLnB1c2goY2VsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2NlbGxbeF1dID0gTWF0aC5tYXgocmVzdWx0W2NlbGxbeF1dIHx8IDAsIGNlbGxbZGVzaXJlZFdpZHRoXSB8fCAwLCBmb3JjZWRNaW4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHZhbHMuZm9yRWFjaChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvL3NwYW5uZXJzLmZvckVhY2goZnVuY3Rpb24oY2VsbCl7XG4gICAgZm9yIChsZXQgayA9IHNwYW5uZXJzLmxlbmd0aCAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBsZXQgY2VsbCA9IHNwYW5uZXJzW2tdO1xuICAgICAgbGV0IHNwYW4gPSBjZWxsW2NvbFNwYW5dO1xuICAgICAgbGV0IGNvbCA9IGNlbGxbeF07XG4gICAgICBsZXQgZXhpc3RpbmdXaWR0aCA9IHJlc3VsdFtjb2xdO1xuICAgICAgbGV0IGVkaXRhYmxlQ29scyA9IHR5cGVvZiB2YWxzW2NvbF0gPT09ICdudW1iZXInID8gMCA6IDE7XG4gICAgICBpZiAodHlwZW9mIGV4aXN0aW5nV2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BhbjsgaSsrKSB7XG4gICAgICAgICAgZXhpc3RpbmdXaWR0aCArPSAxICsgcmVzdWx0W2NvbCArIGldO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsc1tjb2wgKyBpXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVkaXRhYmxlQ29scysrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpc3RpbmdXaWR0aCA9IGRlc2lyZWRXaWR0aCA9PT0gJ2Rlc2lyZWRXaWR0aCcgPyBjZWxsLmRlc2lyZWRXaWR0aCAtIDEgOiAxO1xuICAgICAgICBpZiAoIWF1dG9bY29sXSB8fCBhdXRvW2NvbF0gPCBleGlzdGluZ1dpZHRoKSB7XG4gICAgICAgICAgYXV0b1tjb2xdID0gZXhpc3RpbmdXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbFtkZXNpcmVkV2lkdGhdID4gZXhpc3RpbmdXaWR0aCkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChlZGl0YWJsZUNvbHMgPiAwICYmIGNlbGxbZGVzaXJlZFdpZHRoXSA+IGV4aXN0aW5nV2lkdGgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHNbY29sICsgaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBsZXQgZGlmID0gTWF0aC5yb3VuZCgoY2VsbFtkZXNpcmVkV2lkdGhdIC0gZXhpc3RpbmdXaWR0aCkgLyBlZGl0YWJsZUNvbHMpO1xuICAgICAgICAgICAgZXhpc3RpbmdXaWR0aCArPSBkaWY7XG4gICAgICAgICAgICByZXN1bHRbY29sICsgaV0gKz0gZGlmO1xuICAgICAgICAgICAgZWRpdGFibGVDb2xzLS07XG4gICAgICAgICAgfVxuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24odmFscywgcmVzdWx0LCBhdXRvKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhbHNbal0gPSBNYXRoLm1heChmb3JjZWRNaW4sIHZhbHNbal0gfHwgMCk7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICJjb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuY29uc3QgdGFibGVMYXlvdXQgPSByZXF1aXJlKCcuL2xheW91dC1tYW5hZ2VyJyk7XG5cbmNsYXNzIFRhYmxlIGV4dGVuZHMgQXJyYXkge1xuICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB1dGlscy5tZXJnZU9wdGlvbnMob3B0cyk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvcHRpb25zJywge1xuICAgICAgdmFsdWU6IG9wdGlvbnMsXG4gICAgICBlbnVtZXJhYmxlOiBvcHRpb25zLmRlYnVnLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgZGVidWcuc2V0RGVidWdMZXZlbChkZWJ1Zy5XQVJOKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICBkZWJ1Zy5zZXREZWJ1Z0xldmVsKG9wdGlvbnMuZGVidWcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGRlYnVnLnNldERlYnVnTGV2ZWwocGFyc2VJbnQob3B0aW9ucy5kZWJ1ZywgMTApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBkZWJ1Zy5zZXREZWJ1Z0xldmVsKGRlYnVnLldBUk4pO1xuICAgICAgICAgIGRlYnVnLndhcm4oYERlYnVnIG9wdGlvbiBpcyBleHBlY3RlZCB0byBiZSBib29sZWFuLCBudW1iZXIsIG9yIHN0cmluZy4gUmVjZWl2ZWQgYSAke3R5cGVvZiBvcHRpb25zLmRlYnVnfWApO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdtZXNzYWdlcycsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBkZWJ1Zy5kZWJ1Z01lc3NhZ2VzKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgYXJyYXkgPSB0aGlzO1xuICAgIGxldCBoZWFkZXJzUHJlc2VudCA9IHRoaXMub3B0aW9ucy5oZWFkICYmIHRoaXMub3B0aW9ucy5oZWFkLmxlbmd0aDtcbiAgICBpZiAoaGVhZGVyc1ByZXNlbnQpIHtcbiAgICAgIGFycmF5ID0gW3RoaXMub3B0aW9ucy5oZWFkXTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCkge1xuICAgICAgICBhcnJheS5wdXNoLmFwcGx5KGFycmF5LCB0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLnN0eWxlLmhlYWQgPSBbXTtcbiAgICB9XG5cbiAgICBsZXQgY2VsbHMgPSB0YWJsZUxheW91dC5tYWtlVGFibGVMYXlvdXQoYXJyYXkpO1xuXG4gICAgY2VsbHMuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBjZWxsLm1lcmdlVGFibGVPcHRpb25zKHRoaXMub3B0aW9ucywgY2VsbHMpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSwgdGhpcyk7XG5cbiAgICB0YWJsZUxheW91dC5jb21wdXRlV2lkdGhzKHRoaXMub3B0aW9ucy5jb2xXaWR0aHMsIGNlbGxzKTtcbiAgICB0YWJsZUxheW91dC5jb21wdXRlSGVpZ2h0cyh0aGlzLm9wdGlvbnMucm93SGVpZ2h0cywgY2VsbHMpO1xuXG4gICAgY2VsbHMuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBjZWxsLmluaXQodGhpcy5vcHRpb25zKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IGNlbGxzLmxlbmd0aDsgcm93SW5kZXgrKykge1xuICAgICAgbGV0IHJvdyA9IGNlbGxzW3Jvd0luZGV4XTtcbiAgICAgIGxldCBoZWlnaHRPZlJvdyA9IHRoaXMub3B0aW9ucy5yb3dIZWlnaHRzW3Jvd0luZGV4XTtcblxuICAgICAgaWYgKHJvd0luZGV4ID09PSAwIHx8ICF0aGlzLm9wdGlvbnMuc3R5bGUuY29tcGFjdCB8fCAocm93SW5kZXggPT0gMSAmJiBoZWFkZXJzUHJlc2VudCkpIHtcbiAgICAgICAgZG9EcmF3KHJvdywgJ3RvcCcsIHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgaGVpZ2h0T2ZSb3c7IGxpbmVOdW0rKykge1xuICAgICAgICBkb0RyYXcocm93LCBsaW5lTnVtLCByZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm93SW5kZXggKyAxID09IGNlbGxzLmxlbmd0aCkge1xuICAgICAgICBkb0RyYXcocm93LCAnYm90dG9tJywgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIGxldCBzdHIgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiBzdHJbMF0ubGVuZ3RoO1xuICB9XG59XG5cblRhYmxlLnJlc2V0ID0gKCkgPT4gZGVidWcucmVzZXQoKTtcblxuZnVuY3Rpb24gZG9EcmF3KHJvdywgbGluZU51bSwgcmVzdWx0KSB7XG4gIGxldCBsaW5lID0gW107XG4gIHJvdy5mb3JFYWNoKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgbGluZS5wdXNoKGNlbGwuZHJhdyhsaW5lTnVtKSk7XG4gIH0pO1xuICBsZXQgc3RyID0gbGluZS5qb2luKCcnKTtcbiAgaWYgKHN0ci5sZW5ndGgpIHJlc3VsdC5wdXNoKHN0cik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGFibGU7XG4iLAogICAgIi8qKlxuICogQ29tbWFuZGVyRXJyb3IgY2xhc3NcbiAqL1xuY2xhc3MgQ29tbWFuZGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBDb21tYW5kZXJFcnJvciBjbGFzc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZXhpdENvZGUgc3VnZ2VzdGVkIGV4aXQgY29kZSB3aGljaCBjb3VsZCBiZSB1c2VkIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvclxuICAgKi9cbiAgY29uc3RydWN0b3IoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAvLyBwcm9wZXJseSBjYXB0dXJlIHN0YWNrIHRyYWNlIGluIE5vZGUuanNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLmV4aXRDb2RlID0gZXhpdENvZGU7XG4gICAgdGhpcy5uZXN0ZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGNsYXNzXG4gKi9cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQ29tbWFuZGVyRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgSW52YWxpZEFyZ3VtZW50RXJyb3IgY2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSBleHBsYW5hdGlvbiBvZiB3aHkgYXJndW1lbnQgaXMgaW52YWxpZFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKDEsICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50JywgbWVzc2FnZSk7XG4gICAgLy8gcHJvcGVybHkgY2FwdHVyZSBzdGFjayB0cmFjZSBpbiBOb2RlLmpzXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydHMuQ29tbWFuZGVyRXJyb3IgPSBDb21tYW5kZXJFcnJvcjtcbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbiIsCiAgICAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBBcmd1bWVudCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGNvbW1hbmQgYXJndW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgZGVzY3JpcHRpb24uXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcbiAgICB0aGlzLnZhcmlhZGljID0gZmFsc2U7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAobmFtZVswXSkge1xuICAgICAgY2FzZSAnPCc6IC8vIGUuZy4gPHJlcXVpcmVkPlxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1snOiAvLyBlLmcuIFtvcHRpb25hbF1cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmFtZS5sZW5ndGggPiAzICYmIHRoaXMuX25hbWUuc2xpY2UoLTMpID09PSAnLi4uJykge1xuICAgICAgdGhpcy52YXJpYWRpYyA9IHRydWU7XG4gICAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZS5zbGljZSgwLCAtMyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhcmd1bWVudCBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbmNhdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJldmlvdXMuY29uY2F0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBkZWZhdWx0KHZhbHVlLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIGNvbW1hbmQgYXJndW1lbnRzIGludG8gYXJndW1lbnQgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBhcmdQYXJzZXIoZm4pIHtcbiAgICB0aGlzLnBhcnNlQXJnID0gZm47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT25seSBhbGxvdyBhcmd1bWVudCB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25jYXRWYWx1ZShhcmcsIHByZXZpb3VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFyZ3VtZW50IHJlcXVpcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJndW1lbnR9XG4gICAqL1xuICBhcmdSZXF1aXJlZCgpIHtcbiAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFyZ3VtZW50IG9wdGlvbmFsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJndW1lbnR9XG4gICAqL1xuICBhcmdPcHRpb25hbCgpIHtcbiAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpdHMgaHVtYW4gcmVhZGFibGUgZXF1aXZhbGVudCBmb3IgaGVscCB1c2FnZS5cbiAqXG4gKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKSB7XG4gIGNvbnN0IG5hbWVPdXRwdXQgPSBhcmcubmFtZSgpICsgKGFyZy52YXJpYWRpYyA9PT0gdHJ1ZSA/ICcuLi4nIDogJycpO1xuXG4gIHJldHVybiBhcmcucmVxdWlyZWQgPyAnPCcgKyBuYW1lT3V0cHV0ICsgJz4nIDogJ1snICsgbmFtZU91dHB1dCArICddJztcbn1cblxuZXhwb3J0cy5Bcmd1bWVudCA9IEFyZ3VtZW50O1xuZXhwb3J0cy5odW1hblJlYWRhYmxlQXJnTmFtZSA9IGh1bWFuUmVhZGFibGVBcmdOYW1lO1xuIiwKICAgICJjb25zdCB7IGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBpbXBvcnQgdHlwZXMgZm9yIEpTRG9jLCB1c2VkIGJ5IFZpc3VhbCBTdHVkaW8gQ29kZSBJbnRlbGxpU2Vuc2UgYW5kIGBucG0gcnVuIHR5cGVzY3JpcHQtY2hlY2tKU2BcbiAqIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2pzZG9jLXN1cHBvcnRlZC10eXBlcy5odG1sI2ltcG9ydC10eXBlc1xuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL2FyZ3VtZW50LmpzXCIpLkFyZ3VtZW50IH0gQXJndW1lbnRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9jb21tYW5kLmpzXCIpLkNvbW1hbmQgfSBDb21tYW5kXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vb3B0aW9uLmpzXCIpLk9wdGlvbiB9IE9wdGlvblxuICovXG5cbi8vIEFsdGhvdWdoIHRoaXMgaXMgYSBjbGFzcywgbWV0aG9kcyBhcmUgc3RhdGljIGluIHN0eWxlIHRvIGFsbG93IG92ZXJyaWRlIHVzaW5nIHN1YmNsYXNzIG9yIGp1c3QgZnVuY3Rpb25zLlxuY2xhc3MgSGVscCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVscFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc29ydFN1YmNvbW1hbmRzID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0T3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0dsb2JhbE9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgc3ViY29tbWFuZHMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIGNvbW1hbmQsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUNvbW1hbmRzKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVDb21tYW5kcyA9IGNtZC5jb21tYW5kcy5maWx0ZXIoKGNtZCkgPT4gIWNtZC5faGlkZGVuKTtcbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IGNtZC5fZ2V0SGVscENvbW1hbmQoKTtcbiAgICBpZiAoaGVscENvbW1hbmQgJiYgIWhlbHBDb21tYW5kLl9oaWRkZW4pIHtcbiAgICAgIHZpc2libGVDb21tYW5kcy5wdXNoKGhlbHBDb21tYW5kKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydFN1YmNvbW1hbmRzKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlQ29tbWFuZHM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBvcHRpb25zIGZvciBzb3J0LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gYVxuICAgKiBAcGFyYW0ge09wdGlvbn0gYlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY29tcGFyZU9wdGlvbnMoYSwgYikge1xuICAgIGNvbnN0IGdldFNvcnRLZXkgPSAob3B0aW9uKSA9PiB7XG4gICAgICAvLyBXWVNJV1lHIGZvciBvcmRlciBkaXNwbGF5ZWQgaW4gaGVscC4gU2hvcnQgdXNlZCBmb3IgY29tcGFyaXNvbiBpZiBwcmVzZW50LiBObyBzcGVjaWFsIGhhbmRsaW5nIGZvciBuZWdhdGVkLlxuICAgICAgcmV0dXJuIG9wdGlvbi5zaG9ydFxuICAgICAgICA/IG9wdGlvbi5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKVxuICAgICAgICA6IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLS8sICcnKTtcbiAgICB9O1xuICAgIHJldHVybiBnZXRTb3J0S2V5KGEpLmxvY2FsZUNvbXBhcmUoZ2V0U29ydEtleShiKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIG9wdGlvbnMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIG9wdGlvbiwgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7T3B0aW9uW119XG4gICAqL1xuXG4gIHZpc2libGVPcHRpb25zKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gY21kLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuKTtcbiAgICAvLyBCdWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBjb25zdCBoZWxwT3B0aW9uID0gY21kLl9nZXRIZWxwT3B0aW9uKCk7XG4gICAgaWYgKGhlbHBPcHRpb24gJiYgIWhlbHBPcHRpb24uaGlkZGVuKSB7XG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGhpZGUgY29uZmxpY3RpbmcgZmxhZ3MuIEJpdCBkdWJpb3VzIGJ1dCBhIGhpc3RvcmljYWwgYmVoYXZpb3VyIHRoYXQgaXMgY29udmVuaWVudCBmb3Igc2luZ2xlLWNvbW1hbmQgcHJvZ3JhbXMuXG4gICAgICBjb25zdCByZW1vdmVTaG9ydCA9IGhlbHBPcHRpb24uc2hvcnQgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQpO1xuICAgICAgY29uc3QgcmVtb3ZlTG9uZyA9IGhlbHBPcHRpb24ubG9uZyAmJiBjbWQuX2ZpbmRPcHRpb24oaGVscE9wdGlvbi5sb25nKTtcbiAgICAgIGlmICghcmVtb3ZlU2hvcnQgJiYgIXJlbW92ZUxvbmcpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChoZWxwT3B0aW9uKTsgLy8gbm8gY2hhbmdlcyBuZWVkZWRcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5sb25nICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goXG4gICAgICAgICAgY21kLmNyZWF0ZU9wdGlvbihoZWxwT3B0aW9uLmxvbmcsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChoZWxwT3B0aW9uLnNob3J0ICYmICFyZW1vdmVTaG9ydCkge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5zaG9ydCwgaGVscE9wdGlvbi5kZXNjcmlwdGlvbiksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICB2aXNpYmxlT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZU9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIGdsb2JhbCBvcHRpb25zLiAoTm90IGluY2x1ZGluZyBoZWxwLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0dsb2JhbE9wdGlvbnMpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGdsb2JhbE9wdGlvbnMgPSBbXTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gYW5jZXN0b3JDbWQub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuLFxuICAgICAgKTtcbiAgICAgIGdsb2JhbE9wdGlvbnMucHVzaCguLi52aXNpYmxlT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICBnbG9iYWxPcHRpb25zLnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgYXJndW1lbnRzIGlmIGFueSBoYXZlIGEgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudFtdfVxuICAgKi9cblxuICB2aXNpYmxlQXJndW1lbnRzKGNtZCkge1xuICAgIC8vIFNpZGUgZWZmZWN0ISBBcHBseSB0aGUgbGVnYWN5IGRlc2NyaXB0aW9ucyBiZWZvcmUgdGhlIGFyZ3VtZW50cyBhcmUgZGlzcGxheWVkLlxuICAgIGlmIChjbWQuX2FyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgY21kLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQpID0+IHtcbiAgICAgICAgYXJndW1lbnQuZGVzY3JpcHRpb24gPVxuICAgICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uIHx8IGNtZC5fYXJnc0Rlc2NyaXB0aW9uW2FyZ3VtZW50Lm5hbWUoKV0gfHwgJyc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGFyZ3VtZW50cyB3aXRoIGEgZGVzY3JpcHRpb24gdGhlbiByZXR1cm4gYWxsIHRoZSBhcmd1bWVudHMuXG4gICAgaWYgKGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZpbmQoKGFyZ3VtZW50KSA9PiBhcmd1bWVudC5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWFuZCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIHN1YmNvbW1hbmRUZXJtKGNtZCkge1xuICAgIC8vIExlZ2FjeS4gSWdub3JlcyBjdXN0b20gdXNhZ2Ugc3RyaW5nLCBhbmQgbmVzdGVkIGNvbW1hbmRzLlxuICAgIGNvbnN0IGFyZ3MgPSBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50c1xuICAgICAgLm1hcCgoYXJnKSA9PiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgICByZXR1cm4gKFxuICAgICAgY21kLl9uYW1lICtcbiAgICAgIChjbWQuX2FsaWFzZXNbMF0gPyAnfCcgKyBjbWQuX2FsaWFzZXNbMF0gOiAnJykgK1xuICAgICAgKGNtZC5vcHRpb25zLmxlbmd0aCA/ICcgW29wdGlvbnNdJyA6ICcnKSArIC8vIHNpbXBsaXN0aWMgY2hlY2sgZm9yIG5vbi1oZWxwIG9wdGlvblxuICAgICAgKGFyZ3MgPyAnICcgKyBhcmdzIDogJycpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBvcHRpb25UZXJtKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24uZmxhZ3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudFRlcm0oYXJndW1lbnQpIHtcbiAgICByZXR1cm4gYXJndW1lbnQubmFtZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBjb21tYW5kIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLnJlZHVjZSgobWF4LCBjb21tYW5kKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBoZWxwZXIuc3ViY29tbWFuZFRlcm0oY29tbWFuZCkubGVuZ3RoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3Qgb3B0aW9uIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0T3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKS5yZWR1Y2UoKG1heCwgb3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBoZWxwZXIub3B0aW9uVGVybShvcHRpb24pLmxlbmd0aCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGdsb2JhbCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChtYXgsIGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikubGVuZ3RoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgYXJndW1lbnQgdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5yZWR1Y2UoKG1heCwgYXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChtYXgsIGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpLmxlbmd0aCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21tYW5kIHVzYWdlIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kVXNhZ2UoY21kKSB7XG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgY21kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBpZiAoY21kLl9hbGlhc2VzWzBdKSB7XG4gICAgICBjbWROYW1lID0gY21kTmFtZSArICd8JyArIGNtZC5fYWxpYXNlc1swXTtcbiAgICB9XG4gICAgbGV0IGFuY2VzdG9yQ21kTmFtZXMgPSAnJztcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGFuY2VzdG9yQ21kTmFtZXMgPSBhbmNlc3RvckNtZC5uYW1lKCkgKyAnICcgKyBhbmNlc3RvckNtZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JDbWROYW1lcyArIGNtZE5hbWUgKyAnICcgKyBjbWQudXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuZGVzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN1YmNvbW1hbmQgc3VtbWFyeSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKiAoRmFsbGJhY2sgdG8gZGVzY3JpcHRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgc3ViY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuc3VtbWFyeSgpIHx8IGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHtvcHRpb24uYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZGVmYXVsdCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBtb3JlIGZvciBwcm9ncmFtbWVyIHRoYW4gZW5kIHVzZXIsXG4gICAgICAvLyBidXQgc2hvdyB0cnVlL2ZhbHNlIGZvciBib29sZWFuIG9wdGlvbiBhcyBtYXkgYmUgZm9yIGhhbmQtcm9sbGVkIGVudiBvciBjb25maWcgcHJvY2Vzc2luZy5cbiAgICAgIGNvbnN0IHNob3dEZWZhdWx0ID1cbiAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgIG9wdGlvbi5vcHRpb25hbCB8fFxuICAgICAgICAob3B0aW9uLmlzQm9vbGVhbigpICYmIHR5cGVvZiBvcHRpb24uZGVmYXVsdFZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgaWYgKHNob3dEZWZhdWx0KSB7XG4gICAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAgIGBkZWZhdWx0OiAke29wdGlvbi5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShvcHRpb24uZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwcmVzZXQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgYXJlIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlclxuICAgIGlmIChvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgcHJlc2V0OiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbi5wcmVzZXRBcmcpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmVudlZhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgZW52OiAke29wdGlvbi5lbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGAke29wdGlvbi5kZXNjcmlwdGlvbn0gKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbi5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFyZ3VtZW50IGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGFyZ3VtZW50RGVzY3JpcHRpb24oYXJndW1lbnQpIHtcbiAgICBjb25zdCBleHRyYUluZm8gPSBbXTtcbiAgICBpZiAoYXJndW1lbnQuYXJnQ2hvaWNlcykge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIC8vIHVzZSBzdHJpbmdpZnkgdG8gbWF0Y2ggdGhlIGRpc3BsYXkgb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgYGNob2ljZXM6ICR7YXJndW1lbnQuYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgYGRlZmF1bHQ6ICR7YXJndW1lbnQuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gfHwgSlNPTi5zdHJpbmdpZnkoYXJndW1lbnQuZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYURlc2NyaXB0b24gPSBgKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgICBpZiAoYXJndW1lbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke2FyZ3VtZW50LmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRvbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhRGVzY3JpcHRvbjtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3VtZW50LmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBidWlsdC1pbiBoZWxwIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGZvcm1hdEhlbHAoY21kLCBoZWxwZXIpIHtcbiAgICBjb25zdCB0ZXJtV2lkdGggPSBoZWxwZXIucGFkV2lkdGgoY21kLCBoZWxwZXIpO1xuICAgIGNvbnN0IGhlbHBXaWR0aCA9IGhlbHBlci5oZWxwV2lkdGggfHwgODA7XG4gICAgY29uc3QgaXRlbUluZGVudFdpZHRoID0gMjtcbiAgICBjb25zdCBpdGVtU2VwYXJhdG9yV2lkdGggPSAyOyAvLyBiZXR3ZWVuIHRlcm0gYW5kIGRlc2NyaXB0aW9uXG4gICAgZnVuY3Rpb24gZm9ybWF0SXRlbSh0ZXJtLCBkZXNjcmlwdGlvbikge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gYCR7dGVybS5wYWRFbmQodGVybVdpZHRoICsgaXRlbVNlcGFyYXRvcldpZHRoKX0ke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgIHJldHVybiBoZWxwZXIud3JhcChcbiAgICAgICAgICBmdWxsVGV4dCxcbiAgICAgICAgICBoZWxwV2lkdGggLSBpdGVtSW5kZW50V2lkdGgsXG4gICAgICAgICAgdGVybVdpZHRoICsgaXRlbVNlcGFyYXRvcldpZHRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRlcm07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdExpc3QodGV4dEFycmF5KSB7XG4gICAgICByZXR1cm4gdGV4dEFycmF5LmpvaW4oJ1xcbicpLnJlcGxhY2UoL14vZ20sICcgJy5yZXBlYXQoaXRlbUluZGVudFdpZHRoKSk7XG4gICAgfVxuXG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgb3V0cHV0ID0gW2BVc2FnZTogJHtoZWxwZXIuY29tbWFuZFVzYWdlKGNtZCl9YCwgJyddO1xuXG4gICAgLy8gRGVzY3JpcHRpb25cbiAgICBjb25zdCBjb21tYW5kRGVzY3JpcHRpb24gPSBoZWxwZXIuY29tbWFuZERlc2NyaXB0aW9uKGNtZCk7XG4gICAgaWYgKGNvbW1hbmREZXNjcmlwdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFtcbiAgICAgICAgaGVscGVyLndyYXAoY29tbWFuZERlc2NyaXB0aW9uLCBoZWxwV2lkdGgsIDApLFxuICAgICAgICAnJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIEFyZ3VtZW50c1xuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkubWFwKChhcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGZvcm1hdEl0ZW0oXG4gICAgICAgIGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpLFxuICAgICAgICBoZWxwZXIuYXJndW1lbnREZXNjcmlwdGlvbihhcmd1bWVudCksXG4gICAgICApO1xuICAgIH0pO1xuICAgIGlmIChhcmd1bWVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChbJ0FyZ3VtZW50czonLCBmb3JtYXRMaXN0KGFyZ3VtZW50TGlzdCksICcnXSk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKS5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGZvcm1hdEl0ZW0oXG4gICAgICAgIGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbiksXG4gICAgICAgIGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAob3B0aW9uTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFsnT3B0aW9uczonLCBmb3JtYXRMaXN0KG9wdGlvbkxpc3QpLCAnJ10pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dHbG9iYWxPcHRpb25zKSB7XG4gICAgICBjb25zdCBnbG9iYWxPcHRpb25MaXN0ID0gaGVscGVyXG4gICAgICAgIC52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3JtYXRJdGVtKFxuICAgICAgICAgICAgaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSxcbiAgICAgICAgICAgIGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKGdsb2JhbE9wdGlvbkxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFtcbiAgICAgICAgICAnR2xvYmFsIE9wdGlvbnM6JyxcbiAgICAgICAgICBmb3JtYXRMaXN0KGdsb2JhbE9wdGlvbkxpc3QpLFxuICAgICAgICAgICcnLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGNvbnN0IGNvbW1hbmRMaXN0ID0gaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLm1hcCgoY21kKSA9PiB7XG4gICAgICByZXR1cm4gZm9ybWF0SXRlbShcbiAgICAgICAgaGVscGVyLnN1YmNvbW1hbmRUZXJtKGNtZCksXG4gICAgICAgIGhlbHBlci5zdWJjb21tYW5kRGVzY3JpcHRpb24oY21kKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaWYgKGNvbW1hbmRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoWydDb21tYW5kczonLCBmb3JtYXRMaXN0KGNvbW1hbmRMaXN0KSwgJyddKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcGFkIHdpZHRoIGZyb20gdGhlIG1heGltdW0gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIHBhZFdpZHRoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgaGVscGVyLmxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0R2xvYmFsT3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgdGhlIGdpdmVuIHN0cmluZyB0byB3aWR0aCBjaGFyYWN0ZXJzIHBlciBsaW5lLCB3aXRoIGxpbmVzIGFmdGVyIHRoZSBmaXJzdCBpbmRlbnRlZC5cbiAgICogRG8gbm90IHdyYXAgaWYgaW5zdWZmaWNpZW50IHJvb20gZm9yIHdyYXBwaW5nIChtaW5Db2x1bW5XaWR0aCksIG9yIHN0cmluZyBpcyBtYW51YWxseSBmb3JtYXR0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRlbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5Db2x1bW5XaWR0aD00MF1cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKlxuICAgKi9cblxuICB3cmFwKHN0ciwgd2lkdGgsIGluZGVudCwgbWluQ29sdW1uV2lkdGggPSA0MCkge1xuICAgIC8vIEZ1bGwgXFxzIGNoYXJhY3RlcnMsIG1pbnVzIHRoZSBsaW5lZmVlZHMuXG4gICAgY29uc3QgaW5kZW50cyA9XG4gICAgICAnIFxcXFxmXFxcXHRcXFxcdlxcdTAwYTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZic7XG4gICAgLy8gRGV0ZWN0IG1hbnVhbGx5IHdyYXBwZWQgYW5kIGluZGVudGVkIHN0cmluZ3MgYnkgc2VhcmNoaW5nIGZvciBsaW5lIGJyZWFrIGZvbGxvd2VkIGJ5IHNwYWNlcy5cbiAgICBjb25zdCBtYW51YWxJbmRlbnQgPSBuZXcgUmVnRXhwKGBbXFxcXG5dWyR7aW5kZW50c31dK2ApO1xuICAgIGlmIChzdHIubWF0Y2gobWFudWFsSW5kZW50KSkgcmV0dXJuIHN0cjtcbiAgICAvLyBEbyBub3Qgd3JhcCBpZiBub3QgZW5vdWdoIHJvb20gZm9yIGEgd3JhcHBlZCBjb2x1bW4gb2YgdGV4dCAoYXMgY291bGQgZW5kIHVwIHdpdGggYSB3b3JkIHBlciBsaW5lKS5cbiAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHdpZHRoIC0gaW5kZW50O1xuICAgIGlmIChjb2x1bW5XaWR0aCA8IG1pbkNvbHVtbldpZHRoKSByZXR1cm4gc3RyO1xuXG4gICAgY29uc3QgbGVhZGluZ1N0ciA9IHN0ci5zbGljZSgwLCBpbmRlbnQpO1xuICAgIGNvbnN0IGNvbHVtblRleHQgPSBzdHIuc2xpY2UoaW5kZW50KS5yZXBsYWNlKCdcXHJcXG4nLCAnXFxuJyk7XG4gICAgY29uc3QgaW5kZW50U3RyaW5nID0gJyAnLnJlcGVhdChpbmRlbnQpO1xuICAgIGNvbnN0IHplcm9XaWR0aFNwYWNlID0gJ1xcdTIwMEInO1xuICAgIGNvbnN0IGJyZWFrcyA9IGBcXFxccyR7emVyb1dpZHRoU3BhY2V9YDtcbiAgICAvLyBNYXRjaCBsaW5lIGVuZCAoc28gZW1wdHkgbGluZXMgZG9uJ3QgY29sbGFwc2UpLFxuICAgIC8vIG9yIGFzIG11Y2ggdGV4dCBhcyB3aWxsIGZpdCBpbiBjb2x1bW4sIG9yIGV4Y2VzcyB0ZXh0IHVwIHRvIGZpcnN0IGJyZWFrLlxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBcXG58LnsxLCR7Y29sdW1uV2lkdGggLSAxfX0oWyR7YnJlYWtzfV18JCl8W14ke2JyZWFrc31dKz8oWyR7YnJlYWtzfV18JClgLFxuICAgICAgJ2cnLFxuICAgICk7XG4gICAgY29uc3QgbGluZXMgPSBjb2x1bW5UZXh0Lm1hdGNoKHJlZ2V4KSB8fCBbXTtcbiAgICByZXR1cm4gKFxuICAgICAgbGVhZGluZ1N0ciArXG4gICAgICBsaW5lc1xuICAgICAgICAubWFwKChsaW5lLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGxpbmUgPT09ICdcXG4nKSByZXR1cm4gJyc7IC8vIHByZXNlcnZlIGVtcHR5IGxpbmVzXG4gICAgICAgICAgcmV0dXJuIChpID4gMCA/IGluZGVudFN0cmluZyA6ICcnKSArIGxpbmUudHJpbUVuZCgpO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydHMuSGVscCA9IEhlbHA7XG4iLAogICAgImNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcblxuY2xhc3MgT3B0aW9uIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYE9wdGlvbmAgd2l0aCB0aGUgZ2l2ZW4gYGZsYWdzYCBhbmQgYGRlc2NyaXB0aW9uYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG5cbiAgICB0aGlzLnJlcXVpcmVkID0gZmxhZ3MuaW5jbHVkZXMoJzwnKTsgLy8gQSB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkIHdoZW4gdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQuXG4gICAgdGhpcy5vcHRpb25hbCA9IGZsYWdzLmluY2x1ZGVzKCdbJyk7IC8vIEEgdmFsdWUgaXMgb3B0aW9uYWwgd2hlbiB0aGUgb3B0aW9uIGlzIHNwZWNpZmllZC5cbiAgICAvLyB2YXJpYWRpYyB0ZXN0IGlnbm9yZXMgPHZhbHVlLC4uLj4gZXQgYWwgd2hpY2ggbWlnaHQgYmUgdXNlZCB0byBkZXNjcmliZSBjdXN0b20gc3BsaXR0aW5nIG9mIHNpbmdsZSBhcmd1bWVudFxuICAgIHRoaXMudmFyaWFkaWMgPSAvXFx3XFwuXFwuXFwuWz5cXF1dJC8udGVzdChmbGFncyk7IC8vIFRoZSBvcHRpb24gY2FuIHRha2UgbXVsdGlwbGUgdmFsdWVzLlxuICAgIHRoaXMubWFuZGF0b3J5ID0gZmFsc2U7IC8vIFRoZSBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZywgd2hpY2ggdXN1YWxseSBtZWFucyBpdCBtdXN0IGJlIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuXG4gICAgY29uc3Qgb3B0aW9uRmxhZ3MgPSBzcGxpdE9wdGlvbkZsYWdzKGZsYWdzKTtcbiAgICB0aGlzLnNob3J0ID0gb3B0aW9uRmxhZ3Muc2hvcnRGbGFnO1xuICAgIHRoaXMubG9uZyA9IG9wdGlvbkZsYWdzLmxvbmdGbGFnO1xuICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgdGhpcy5uZWdhdGUgPSB0aGlzLmxvbmcuc3RhcnRzV2l0aCgnLS1uby0nKTtcbiAgICB9XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnByZXNldEFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVudlZhciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhcnNlQXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IFtdO1xuICAgIHRoaXMuaW1wbGllZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVzZXQgdG8gdXNlIHdoZW4gb3B0aW9uIHVzZWQgd2l0aG91dCBvcHRpb24tYXJndW1lbnQsIGVzcGVjaWFsbHkgb3B0aW9uYWwgYnV0IGFsc28gYm9vbGVhbiBhbmQgbmVnYXRlZC5cbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgT3B0aW9uKCctLWNvbG9yJykuZGVmYXVsdCgnR1JFWVNDQUxFJykucHJlc2V0KCdSR0InKTtcbiAgICogbmV3IE9wdGlvbignLS1kb25hdGUgW2Ftb3VudF0nKS5wcmVzZXQoJzIwJykuYXJnUGFyc2VyKHBhcnNlRmxvYXQpO1xuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIHByZXNldChhcmcpIHtcbiAgICB0aGlzLnByZXNldEFyZyA9IGFyZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgb3B0aW9uIG5hbWUocykgdGhhdCBjb25mbGljdCB3aXRoIHRoaXMgb3B0aW9uLlxuICAgKiBBbiBlcnJvciB3aWxsIGJlIGRpc3BsYXllZCBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSBmb3VuZCBkdXJpbmcgcGFyc2luZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1yZ2InKS5jb25mbGljdHMoJ2NteWsnKTtcbiAgICogbmV3IE9wdGlvbignLS1qcycpLmNvbmZsaWN0cyhbJ3RzJywgJ2pzeCddKTtcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGNvbmZsaWN0cyhuYW1lcykge1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IHRoaXMuY29uZmxpY3RzV2l0aC5jb25jYXQobmFtZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaW1wbGllZCBvcHRpb24gdmFsdWVzIGZvciB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgdGhlIGltcGxpZWQgb3B0aW9ucyBhcmUgbm90LlxuICAgKlxuICAgKiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgKHBhcnNlQXJnKSBpcyBub3QgY2FsbGVkIG9uIHRoZSBpbXBsaWVkIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2cnLCAnd3JpdGUgbG9nZ2luZyBpbmZvcm1hdGlvbiB0byBmaWxlJykpXG4gICAqICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRyYWNlJywgJ2xvZyBleHRyYSBkZXRhaWxzJykuaW1wbGllcyh7IGxvZzogJ3RyYWNlLnR4dCcgfSkpO1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW1wbGllZE9wdGlvblZhbHVlc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBpbXBsaWVzKGltcGxpZWRPcHRpb25WYWx1ZXMpIHtcbiAgICBsZXQgbmV3SW1wbGllZCA9IGltcGxpZWRPcHRpb25WYWx1ZXM7XG4gICAgaWYgKHR5cGVvZiBpbXBsaWVkT3B0aW9uVmFsdWVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gc3RyaW5nIGlzIG5vdCBkb2N1bWVudGVkLCBidXQgZWFzeSBtaXN0YWtlIGFuZCB3ZSBjYW4gZG8gd2hhdCB1c2VyIHByb2JhYmx5IGludGVuZGVkLlxuICAgICAgbmV3SW1wbGllZCA9IHsgW2ltcGxpZWRPcHRpb25WYWx1ZXNdOiB0cnVlIH07XG4gICAgfVxuICAgIHRoaXMuaW1wbGllZCA9IE9iamVjdC5hc3NpZ24odGhpcy5pbXBsaWVkIHx8IHt9LCBuZXdJbXBsaWVkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY2hlY2sgZm9yIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgb25seSB1c2VkIGlmIHdoZW4gcHJvY2Vzc2VkIHRoZSBjdXJyZW50IG9wdGlvbiB2YWx1ZSBpc1xuICAgKiB1bmRlZmluZWQsIG9yIHRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdmFsdWUgaXMgJ2RlZmF1bHQnIG9yICdjb25maWcnIG9yICdlbnYnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGVudihuYW1lKSB7XG4gICAgdGhpcy5lbnZWYXIgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIG9wdGlvbiBhcmd1bWVudHMgaW50byBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBtYW5kYXRvcnkgYW5kIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21hbmRhdG9yeT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIG1ha2VPcHRpb25NYW5kYXRvcnkobWFuZGF0b3J5ID0gdHJ1ZSkge1xuICAgIHRoaXMubWFuZGF0b3J5ID0gISFtYW5kYXRvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBvcHRpb24gaW4gaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGhpZGVIZWxwKGhpZGUgPSB0cnVlKSB7XG4gICAgdGhpcy5oaWRkZW4gPSAhIWhpZGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbmNhdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJldmlvdXMuY29uY2F0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGFsbG93IG9wdGlvbiB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uY2F0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG9wdGlvbiBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgcmV0dXJuIHRoaXMubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3J0LnJlcGxhY2UoL14tLywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZSwgaW4gYSBjYW1lbGNhc2UgZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWRcbiAgICogYXMgYSBvYmplY3QgYXR0cmlidXRlIGtleS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBhdHRyaWJ1dGVOYW1lKCkge1xuICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkucmVwbGFjZSgvXm5vLS8sICcnKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYGFyZ2AgbWF0Y2hlcyB0aGUgc2hvcnQgb3IgbG9uZyBmbGFnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzKGFyZykge1xuICAgIHJldHVybiB0aGlzLnNob3J0ID09PSBhcmcgfHwgdGhpcy5sb25nID09PSBhcmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYSBib29sZWFuIG9wdGlvbi5cbiAgICpcbiAgICogT3B0aW9ucyBhcmUgb25lIG9mIGJvb2xlYW4sIG5lZ2F0ZWQsIHJlcXVpcmVkIGFyZ3VtZW50LCBvciBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgaXNCb29sZWFuKCkge1xuICAgIHJldHVybiAhdGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5vcHRpb25hbCAmJiAhdGhpcy5uZWdhdGU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBkdWFsIG9wdGlvbnMsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXN0aW5nXG4gKiBpbXBsZW1lbnRhdGlvbi4gV2Ugc3VwcG9ydCBzZXBhcmF0ZSBkdWFsIG9wdGlvbnMgZm9yIHNlcGFyYXRlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBvcHRpb25zLFxuICogbGlrZSBgLS1idWlsZGAgYW5kIGAtLW5vLWJ1aWxkYCwgd2hpY2ggc2hhcmUgYSBzaW5nbGUgb3B0aW9uIHZhbHVlLiBUaGlzIHdvcmtzIG5pY2VseSBmb3Igc29tZVxuICogdXNlIGNhc2VzLCBidXQgaXMgdHJpY2t5IGZvciBvdGhlcnMgd2hlcmUgd2Ugd2FudCBzZXBhcmF0ZSBiZWhhdmlvdXJzIGRlc3BpdGVcbiAqIHRoZSBzaW5nbGUgc2hhcmVkIG9wdGlvbiB2YWx1ZS5cbiAqL1xuY2xhc3MgRHVhbE9wdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb25bXX0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMucG9zaXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZHVhbE9wdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3NpdGl2ZU9wdGlvbnMuc2V0KG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCksIG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXMucG9zaXRpdmVPcHRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuZHVhbE9wdGlvbnMuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlkIHRoZSB2YWx1ZSBjb21lIGZyb20gdGhlIG9wdGlvbiwgYW5kIG5vdCBmcm9tIHBvc3NpYmxlIG1hdGNoaW5nIGR1YWwgb3B0aW9uP1xuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB2YWx1ZUZyb21PcHRpb24odmFsdWUsIG9wdGlvbikge1xuICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgaWYgKCF0aGlzLmR1YWxPcHRpb25zLmhhcyhvcHRpb25LZXkpKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFVzZSB0aGUgdmFsdWUgdG8gZGVkdWNlIGlmIChwcm9iYWJseSkgY2FtZSBmcm9tIHRoZSBvcHRpb24uXG4gICAgY29uc3QgcHJlc2V0ID0gdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZ2V0KG9wdGlvbktleSkucHJlc2V0QXJnO1xuICAgIGNvbnN0IG5lZ2F0aXZlVmFsdWUgPSBwcmVzZXQgIT09IHVuZGVmaW5lZCA/IHByZXNldCA6IGZhbHNlO1xuICAgIHJldHVybiBvcHRpb24ubmVnYXRlID09PSAobmVnYXRpdmVWYWx1ZSA9PT0gdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgZnJvbSBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNhbWVsY2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgnLScpLnJlZHVjZSgoc3RyLCB3b3JkKSA9PiB7XG4gICAgcmV0dXJuIHN0ciArIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSBzaG9ydCBhbmQgbG9uZyBmbGFnIG91dCBvZiBzb21ldGhpbmcgbGlrZSAnLW0sLS1taXhlZCA8dmFsdWU+J1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BsaXRPcHRpb25GbGFncyhmbGFncykge1xuICBsZXQgc2hvcnRGbGFnO1xuICBsZXQgbG9uZ0ZsYWc7XG4gIC8vIFVzZSBvcmlnaW5hbCB2ZXJ5IGxvb3NlIHBhcnNpbmcgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG5vdyxcbiAgLy8gd2hpY2ggYWxsb3dlZCBmb3IgZXhhbXBsZSB1bmludGVuZGVkIGAtc3csIC0tc2hvcnQtd29yZGAgW3NpY10uXG4gIGNvbnN0IGZsYWdQYXJ0cyA9IGZsYWdzLnNwbGl0KC9bIHwsXSsvKTtcbiAgaWYgKGZsYWdQYXJ0cy5sZW5ndGggPiAxICYmICEvXltbPF0vLnRlc3QoZmxhZ1BhcnRzWzFdKSlcbiAgICBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gQWRkIHN1cHBvcnQgZm9yIGxvbmUgc2hvcnQgZmxhZyB3aXRob3V0IHNpZ25pZmljYW50bHkgY2hhbmdpbmcgcGFyc2luZyFcbiAgaWYgKCFzaG9ydEZsYWcgJiYgL14tW14tXSQvLnRlc3QobG9uZ0ZsYWcpKSB7XG4gICAgc2hvcnRGbGFnID0gbG9uZ0ZsYWc7XG4gICAgbG9uZ0ZsYWcgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHsgc2hvcnRGbGFnLCBsb25nRmxhZyB9O1xufVxuXG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcbmV4cG9ydHMuRHVhbE9wdGlvbnMgPSBEdWFsT3B0aW9ucztcbiIsCiAgICAiY29uc3QgbWF4RGlzdGFuY2UgPSAzO1xuXG5mdW5jdGlvbiBlZGl0RGlzdGFuY2UoYSwgYikge1xuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYW1lcmF14oCTTGV2ZW5zaHRlaW5fZGlzdGFuY2VcbiAgLy8gQ2FsY3VsYXRpbmcgb3B0aW1hbCBzdHJpbmcgYWxpZ25tZW50IGRpc3RhbmNlLCBubyBzdWJzdHJpbmcgaXMgZWRpdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAvLyAoU2ltcGxlIGltcGxlbWVudGF0aW9uLilcblxuICAvLyBRdWljayBlYXJseSBleGl0LCByZXR1cm4gd29yc3QgY2FzZS5cbiAgaWYgKE1hdGguYWJzKGEubGVuZ3RoIC0gYi5sZW5ndGgpID4gbWF4RGlzdGFuY2UpXG4gICAgcmV0dXJuIE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7XG5cbiAgLy8gZGlzdGFuY2UgYmV0d2VlbiBwcmVmaXggc3Vic3RyaW5ncyBvZiBhIGFuZCBiXG4gIGNvbnN0IGQgPSBbXTtcblxuICAvLyBwdXJlIGRlbGV0aW9ucyB0dXJuIGEgaW50byBlbXB0eSBzdHJpbmdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGRbaV0gPSBbaV07XG4gIH1cbiAgLy8gcHVyZSBpbnNlcnRpb25zIHR1cm4gZW1wdHkgc3RyaW5nIGludG8gYlxuICBmb3IgKGxldCBqID0gMDsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZFswXVtqXSA9IGo7XG4gIH1cblxuICAvLyBmaWxsIG1hdHJpeFxuICBmb3IgKGxldCBqID0gMTsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNvc3QgPSAxO1xuICAgICAgaWYgKGFbaSAtIDFdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBjb3N0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvc3QgPSAxO1xuICAgICAgfVxuICAgICAgZFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBkW2kgLSAxXVtqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGRbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgKTtcbiAgICAgIC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIGlmIChpID4gMSAmJiBqID4gMSAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMl0gJiYgYVtpIC0gMl0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihkW2ldW2pdLCBkW2kgLSAyXVtqIC0gMl0gKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZFthLmxlbmd0aF1bYi5sZW5ndGhdO1xufVxuXG4vKipcbiAqIEZpbmQgY2xvc2UgbWF0Y2hlcywgcmVzdHJpY3RlZCB0byBzYW1lIG51bWJlciBvZiBlZGl0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2FuZGlkYXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBzdWdnZXN0U2ltaWxhcih3b3JkLCBjYW5kaWRhdGVzKSB7XG4gIGlmICghY2FuZGlkYXRlcyB8fCBjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAvLyByZW1vdmUgcG9zc2libGUgZHVwbGljYXRlc1xuICBjYW5kaWRhdGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGNhbmRpZGF0ZXMpKTtcblxuICBjb25zdCBzZWFyY2hpbmdPcHRpb25zID0gd29yZC5zdGFydHNXaXRoKCctLScpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHdvcmQgPSB3b3JkLnNsaWNlKDIpO1xuICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLm1hcCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuc2xpY2UoMikpO1xuICB9XG5cbiAgbGV0IHNpbWlsYXIgPSBbXTtcbiAgbGV0IGJlc3REaXN0YW5jZSA9IG1heERpc3RhbmNlO1xuICBjb25zdCBtaW5TaW1pbGFyaXR5ID0gMC40O1xuICBjYW5kaWRhdGVzLmZvckVhY2goKGNhbmRpZGF0ZSkgPT4ge1xuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoIDw9IDEpIHJldHVybjsgLy8gbm8gb25lIGNoYXJhY3RlciBndWVzc2VzXG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IGVkaXREaXN0YW5jZSh3b3JkLCBjYW5kaWRhdGUpO1xuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHdvcmQubGVuZ3RoLCBjYW5kaWRhdGUubGVuZ3RoKTtcbiAgICBjb25zdCBzaW1pbGFyaXR5ID0gKGxlbmd0aCAtIGRpc3RhbmNlKSAvIGxlbmd0aDtcbiAgICBpZiAoc2ltaWxhcml0eSA+IG1pblNpbWlsYXJpdHkpIHtcbiAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAvLyBiZXR0ZXIgZWRpdCBkaXN0YW5jZSwgdGhyb3cgYXdheSBwcmV2aW91cyB3b3JzZSBtYXRjaGVzXG4gICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBzaW1pbGFyID0gW2NhbmRpZGF0ZV07XG4gICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgc2ltaWxhci5wdXNoKGNhbmRpZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBzaW1pbGFyLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGlmIChzZWFyY2hpbmdPcHRpb25zKSB7XG4gICAgc2ltaWxhciA9IHNpbWlsYXIubWFwKChjYW5kaWRhdGUpID0+IGAtLSR7Y2FuZGlkYXRlfWApO1xuICB9XG5cbiAgaWYgKHNpbWlsYXIubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiBvbmUgb2YgJHtzaW1pbGFyLmpvaW4oJywgJyl9PylgO1xuICB9XG4gIGlmIChzaW1pbGFyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiAke3NpbWlsYXJbMF19PylgO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0cy5zdWdnZXN0U2ltaWxhciA9IHN1Z2dlc3RTaW1pbGFyO1xuIiwKICAgICJjb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlcjtcbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ25vZGU6cGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdub2RlOmZzJyk7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpwcm9jZXNzJyk7XG5cbmNvbnN0IHsgQXJndW1lbnQsIGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAgfSA9IHJlcXVpcmUoJy4vaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24sIER1YWxPcHRpb25zIH0gPSByZXF1aXJlKCcuL29wdGlvbi5qcycpO1xuY29uc3QgeyBzdWdnZXN0U2ltaWxhciB9ID0gcmVxdWlyZSgnLi9zdWdnZXN0U2ltaWxhcicpO1xuXG5jbGFzcyBDb21tYW5kIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYENvbW1hbmRgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAdHlwZSB7Q29tbWFuZFtdfSAqL1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICAvKiogQHR5cGUge09wdGlvbltdfSAqL1xuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9IHRydWU7XG4gICAgLyoqIEB0eXBlIHtBcmd1bWVudFtdfSAqL1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyA9IFtdO1xuICAgIHRoaXMuX2FyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHM7IC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuYXJncyA9IFtdOyAvLyBjbGkgYXJncyB3aXRoIG9wdGlvbnMgcmVtb3ZlZFxuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IFtdOyAvLyBsaWtlIC5hcmdzIGJ1dCBhZnRlciBjdXN0b20gcHJvY2Vzc2luZyBhbmQgY29sbGVjdGluZyB2YXJpYWRpY1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMuX25hbWUgPSBuYW1lIHx8ICcnO1xuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlcyA9IHt9OyAvLyBkZWZhdWx0LCBlbnYsIGNsaSBldGNcbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLl9leGVjdXRhYmxlSGFuZGxlciA9IGZhbHNlO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVGaWxlID0gbnVsbDsgLy8gY3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGVcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gbnVsbDsgLy8gY3VzdG9tIHNlYXJjaCBkaXJlY3RvcnkgZm9yIHN1YmNvbW1hbmRzXG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gbnVsbDtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX2FsaWFzZXMgPSBbXTtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gJyc7XG4gICAgdGhpcy5fc3VtbWFyeSA9ICcnO1xuICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgLy8gbGVnYWN5XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9saWZlQ3ljbGVIb29rcyA9IHt9OyAvLyBhIGhhc2ggb2YgYXJyYXlzXG4gICAgLyoqIEB0eXBlIHsoYm9vbGVhbiB8IHN0cmluZyl9ICovXG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gdHJ1ZTtcblxuICAgIC8vIHNlZSAuY29uZmlndXJlT3V0cHV0KCkgZm9yIGRvY3NcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0ge1xuICAgICAgd3JpdGVPdXQ6IChzdHIpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0ciksXG4gICAgICB3cml0ZUVycjogKHN0cikgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUoc3RyKSxcbiAgICAgIGdldE91dEhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQuaXNUVFkgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0RXJySGVscFdpZHRoOiAoKSA9PlxuICAgICAgICBwcm9jZXNzLnN0ZGVyci5pc1RUWSA/IHByb2Nlc3Muc3RkZXJyLmNvbHVtbnMgOiB1bmRlZmluZWQsXG4gICAgICBvdXRwdXRFcnJvcjogKHN0ciwgd3JpdGUpID0+IHdyaXRlKHN0ciksXG4gICAgfTtcblxuICAgIHRoaXMuX2hpZGRlbiA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7KE9wdGlvbiB8IG51bGwgfCB1bmRlZmluZWQpfSAqL1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIExhenkgY3JlYXRlZCBvbiBkZW1hbmQuIE1heSBiZSBudWxsIGlmIGhlbHAgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIHVuZGVjaWRlZCB3aGV0aGVyIHRydWUgb3IgZmFsc2UgeWV0LCBub3QgaW5oZXJpdGVkXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gdW5kZWZpbmVkOyAvLyBsYXp5IGluaXRpYWxpc2VkLCBpbmhlcml0ZWRcbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgc2V0dGluZ3MgdGhhdCBhcmUgdXNlZnVsIHRvIGhhdmUgaW4gY29tbW9uIGFjcm9zcyByb290IGNvbW1hbmQgYW5kIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IHdoZW4gYWRkaW5nIGEgY29tbWFuZCB1c2luZyBgLmNvbW1hbmQoKWAgc28gc3ViY29tbWFuZHMgaW5oZXJpdCBwYXJlbnQgc2V0dGluZ3MuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHNvdXJjZUNvbW1hbmRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb3B5SW5oZXJpdGVkU2V0dGluZ3Moc291cmNlQ29tbWFuZCkge1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwT3B0aW9uO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gc291cmNlQ29tbWFuZC5faGVscENvbW1hbmQ7XG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBzb3VyY2VDb21tYW5kLl9leGl0Q2FsbGJhY2s7XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gc291cmNlQ29tbWFuZC5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzO1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9XG4gICAgICBzb3VyY2VDb21tYW5kLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWU7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSBzb3VyY2VDb21tYW5kLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cztcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9IHNvdXJjZUNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IHNvdXJjZUNvbW1hbmQuX3Nob3dIZWxwQWZ0ZXJFcnJvcjtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3I7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Q29tbWFuZFtdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBmb3IgKGxldCBjb21tYW5kID0gdGhpczsgY29tbWFuZDsgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50KSB7XG4gICAgICByZXN1bHQucHVzaChjb21tYW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBjb21tYW5kLlxuICAgKlxuICAgKiBUaGVyZSBhcmUgdHdvIHN0eWxlcyBvZiBjb21tYW5kOiBwYXkgYXR0ZW50aW9uIHRvIHdoZXJlIHRvIHB1dCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbW1hbmQgaW1wbGVtZW50ZWQgdXNpbmcgYWN0aW9uIGhhbmRsZXIgKGRlc2NyaXB0aW9uIGlzIHN1cHBsaWVkIHNlcGFyYXRlbHkgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdjbG9uZSA8c291cmNlPiBbZGVzdGluYXRpb25dJylcbiAgICogICAuZGVzY3JpcHRpb24oJ2Nsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnknKVxuICAgKiAgIC5hY3Rpb24oKHNvdXJjZSwgZGVzdGluYXRpb24pID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdjbG9uZSBjb21tYW5kIGNhbGxlZCcpO1xuICAgKiAgIH0pO1xuICAgKlxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIHNlcGFyYXRlIGV4ZWN1dGFibGUgZmlsZSAoZGVzY3JpcHRpb24gaXMgc2Vjb25kIHBhcmFtZXRlciB0byBgLmNvbW1hbmRgKVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3N0YXJ0IDxzZXJ2aWNlPicsICdzdGFydCBuYW1lZCBzZXJ2aWNlJylcbiAgICogICAuY29tbWFuZCgnc3RvcCBbc2VydmljZV0nLCAnc3RvcCBuYW1lZCBzZXJ2aWNlLCBvciBhbGwgaWYgbm8gbmFtZSBzdXBwbGllZCcpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZUFuZEFyZ3MgLSBjb21tYW5kIG5hbWUgYW5kIGFyZ3VtZW50cywgYXJncyBhcmUgYDxyZXF1aXJlZD5gIG9yIGBbb3B0aW9uYWxdYCBhbmQgbGFzdCBtYXkgYWxzbyBiZSBgdmFyaWFkaWMuLi5gXG4gICAqIEBwYXJhbSB7KG9iamVjdCB8IHN0cmluZyl9IFthY3Rpb25PcHRzT3JFeGVjRGVzY10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGZvciBhY3Rpb24pLCBvciBkZXNjcmlwdGlvbiAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXhlY09wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgZXhlY3V0YWJsZSlcbiAgICogQHJldHVybiB7Q29tbWFuZH0gcmV0dXJucyBuZXcgY29tbWFuZCBmb3IgYWN0aW9uIGhhbmRsZXIsIG9yIGB0aGlzYCBmb3IgZXhlY3V0YWJsZSBjb21tYW5kXG4gICAqL1xuXG4gIGNvbW1hbmQobmFtZUFuZEFyZ3MsIGFjdGlvbk9wdHNPckV4ZWNEZXNjLCBleGVjT3B0cykge1xuICAgIGxldCBkZXNjID0gYWN0aW9uT3B0c09yRXhlY0Rlc2M7XG4gICAgbGV0IG9wdHMgPSBleGVjT3B0cztcbiAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdvYmplY3QnICYmIGRlc2MgIT09IG51bGwpIHtcbiAgICAgIG9wdHMgPSBkZXNjO1xuICAgICAgZGVzYyA9IG51bGw7XG4gICAgfVxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGNvbnN0IFssIG5hbWUsIGFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcblxuICAgIGNvbnN0IGNtZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChuYW1lKTtcbiAgICBpZiAoZGVzYykge1xuICAgICAgY21kLmRlc2NyaXB0aW9uKGRlc2MpO1xuICAgICAgY21kLl9leGVjdXRhYmxlSGFuZGxlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGNtZC5faGlkZGVuID0gISEob3B0cy5ub0hlbHAgfHwgb3B0cy5oaWRkZW4pOyAvLyBub0hlbHAgaXMgZGVwcmVjYXRlZCBvbGQgbmFtZSBmb3IgaGlkZGVuXG4gICAgY21kLl9leGVjdXRhYmxlRmlsZSA9IG9wdHMuZXhlY3V0YWJsZUZpbGUgfHwgbnVsbDsgLy8gQ3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGUgZmlsZSwgc2V0IG1pc3NpbmcgdG8gbnVsbCB0byBtYXRjaCBjb25zdHJ1Y3RvclxuICAgIGlmIChhcmdzKSBjbWQuYXJndW1lbnRzKGFyZ3MpO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5jb3B5SW5oZXJpdGVkU2V0dGluZ3ModGhpcyk7XG5cbiAgICBpZiAoZGVzYykgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIGNtZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQsIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgY29tbWFuZC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVDb21tYW5kIHRvIGN1c3RvbWlzZSBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBuZXcgY29tbWFuZFxuICAgKi9cblxuICBjcmVhdGVDb21tYW5kKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IENvbW1hbmQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjdXN0b21pc2UgdGhlIGhlbHAgd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwLFxuICAgKiBvciBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCkuXG4gICAqXG4gICAqIEByZXR1cm4ge0hlbHB9XG4gICAqL1xuXG4gIGNyZWF0ZUhlbHAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEhlbHAoKSwgdGhpcy5jb25maWd1cmVIZWxwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIGJ5IG92ZXJyaWRpbmcgSGVscCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZ3VyZUhlbHAoKSxcbiAgICogb3Igd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZUhlbHAoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvdXRwdXQgZ29lcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4gWW91IGNhbiBjdXN0b21pc2UgdGhpcyBmb3Igc3BlY2lhbFxuICAgKiBhcHBsaWNhdGlvbnMuIFlvdSBjYW4gYWxzbyBjdXN0b21pc2UgdGhlIGRpc3BsYXkgb2YgZXJyb3JzIGJ5IG92ZXJyaWRpbmcgb3V0cHV0RXJyb3IuXG4gICAqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXJlIGFsbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqICAgICAvLyBmdW5jdGlvbnMgdG8gY2hhbmdlIHdoZXJlIGJlaW5nIHdyaXR0ZW4sIHN0ZG91dCBhbmQgc3RkZXJyXG4gICAqICAgICB3cml0ZU91dChzdHIpXG4gICAqICAgICB3cml0ZUVycihzdHIpXG4gICAqICAgICAvLyBtYXRjaGluZyBmdW5jdGlvbnMgdG8gc3BlY2lmeSB3aWR0aCBmb3Igd3JhcHBpbmcgaGVscFxuICAgKiAgICAgZ2V0T3V0SGVscFdpZHRoKClcbiAgICogICAgIGdldEVyckhlbHBXaWR0aCgpXG4gICAqICAgICAvLyBmdW5jdGlvbnMgYmFzZWQgb24gd2hhdCBpcyBiZWluZyB3cml0dGVuIG91dFxuICAgKiAgICAgb3V0cHV0RXJyb3Ioc3RyLCB3cml0ZSkgLy8gdXNlZCBmb3IgZGlzcGxheWluZyBlcnJvcnMsIGFuZCBub3QgdXNlZCBmb3IgZGlzcGxheWluZyBoZWxwXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZU91dHB1dChjb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb247XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIGhlbHAgb3IgYSBjdXN0b20gbWVzc2FnZSBhZnRlciBhbiBlcnJvciBvY2N1cnMuXG4gICAqXG4gICAqIEBwYXJhbSB7KGJvb2xlYW58c3RyaW5nKX0gW2Rpc3BsYXlIZWxwXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dIZWxwQWZ0ZXJFcnJvcihkaXNwbGF5SGVscCA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlIZWxwICE9PSAnc3RyaW5nJykgZGlzcGxheUhlbHAgPSAhIWRpc3BsYXlIZWxwO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGRpc3BsYXlIZWxwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgc3VnZ2VzdGlvbiBvZiBzaW1pbGFyIGNvbW1hbmRzIGZvciB1bmtub3duIGNvbW1hbmRzLCBvciBvcHRpb25zIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rpc3BsYXlTdWdnZXN0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcihkaXNwbGF5U3VnZ2VzdGlvbiA9IHRydWUpIHtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSAhIWRpc3BsYXlTdWdnZXN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHByZXBhcmVkIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kIHdoaWNoIGluaGVyaXRzIHNldHRpbmdzIGZyb20gaXRzIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWQgLSBuZXcgc3ViY29tbWFuZFxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhZGRDb21tYW5kKGNtZCwgb3B0cykge1xuICAgIGlmICghY21kLl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgcGFzc2VkIHRvIC5hZGRDb21tYW5kKCkgbXVzdCBoYXZlIGEgbmFtZVxuLSBzcGVjaWZ5IHRoZSBuYW1lIGluIENvbW1hbmQgY29uc3RydWN0b3Igb3IgdXNpbmcgLm5hbWUoKWApO1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChvcHRzLm5vSGVscCB8fCBvcHRzLmhpZGRlbikgY21kLl9oaWRkZW4gPSB0cnVlOyAvLyBtb2RpZnlpbmcgcGFzc2VkIGNvbW1hbmQgZHVlIHRvIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uXG5cbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBhcmd1bWVudC5cbiAgICpcbiAgICogU2VlIC5hcmd1bWVudCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBhcmd1bWVudCwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBhcmd1bWVudC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVBcmd1bWVudCB0byByZXR1cm4gYSBjdXN0b20gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fSBuZXcgYXJndW1lbnRcbiAgICovXG5cbiAgY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnPGlucHV0LWZpbGU+Jyk7XG4gICAqIHByb2dyYW0uYXJndW1lbnQoJ1tvdXRwdXQtZmlsZV0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtmbl0gLSBjdXN0b20gYXJndW1lbnQgcHJvY2Vzc2luZyBmdW5jdGlvblxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24sIGZuLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCBhcmd1bWVudCA9IHRoaXMuY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmd1bWVudC5kZWZhdWx0KGZuKTtcbiAgICB9XG4gICAgdGhpcy5hZGRBcmd1bWVudChhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZCwgYWRkaW5nIG11bHRpcGxlIGF0IG9uY2UgKHdpdGhvdXQgZGVzY3JpcHRpb25zKS5cbiAgICpcbiAgICogU2VlIGFsc28gLmFyZ3VtZW50KCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uYXJndW1lbnRzKCc8Y21kPiBbZW52XScpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFyZ3VtZW50cyhuYW1lcykge1xuICAgIG5hbWVzXG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoLyArLylcbiAgICAgIC5mb3JFYWNoKChkZXRhaWwpID0+IHtcbiAgICAgICAgdGhpcy5hcmd1bWVudChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZCwgYWRkaW5nIGEgcHJlcGFyZWQgYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkQXJndW1lbnQoYXJndW1lbnQpIHtcbiAgICBjb25zdCBwcmV2aW91c0FyZ3VtZW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLnNsaWNlKC0xKVswXTtcbiAgICBpZiAocHJldmlvdXNBcmd1bWVudCAmJiBwcmV2aW91c0FyZ3VtZW50LnZhcmlhZGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBvbmx5IHRoZSBsYXN0IGFyZ3VtZW50IGNhbiBiZSB2YXJpYWRpYyAnJHtwcmV2aW91c0FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFyZ3VtZW50LnJlcXVpcmVkICYmXG4gICAgICBhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYXJndW1lbnQucGFyc2VBcmcgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgYSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5ldmVyIHVzZWQ6ICcke2FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5wdXNoKGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pc2Ugb3Igb3ZlcnJpZGUgZGVmYXVsdCBoZWxwIGNvbW1hbmQuIEJ5IGRlZmF1bHQgYSBoZWxwIGNvbW1hbmQgaXMgYXV0b21hdGljYWxseSBhZGRlZCBpZiB5b3VyIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoJ2hlbHAgW2NtZF0nLCAnc2hvdyBoZWxwJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoZmFsc2UpOyAvLyBzdXBwcmVzcyBkZWZhdWx0IGhlbHAgY29tbWFuZFxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKHRydWUpOyAvLyBhZGQgaGVscCBjb21tYW5kIGV2ZW4gaWYgbm8gc3ViY29tbWFuZHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gZW5hYmxlT3JOYW1lQW5kQXJncyAtIGVuYWJsZSB3aXRoIGN1c3RvbSBuYW1lIGFuZC9vciBhcmd1bWVudHMsIG9yIGJvb2xlYW4gdG8gb3ZlcnJpZGUgd2hldGhlciBhZGRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXSAtIGN1c3RvbSBkZXNjcmlwdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscENvbW1hbmQoZW5hYmxlT3JOYW1lQW5kQXJncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAodHlwZW9mIGVuYWJsZU9yTmFtZUFuZEFyZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IGVuYWJsZU9yTmFtZUFuZEFyZ3M7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBlbmFibGVPck5hbWVBbmRBcmdzID0gZW5hYmxlT3JOYW1lQW5kQXJncyA/PyAnaGVscCBbY29tbWFuZF0nO1xuICAgIGNvbnN0IFssIGhlbHBOYW1lLCBoZWxwQXJnc10gPSBlbmFibGVPck5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG4gICAgY29uc3QgaGVscERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPz8gJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCc7XG5cbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChoZWxwTmFtZSk7XG4gICAgaGVscENvbW1hbmQuaGVscE9wdGlvbihmYWxzZSk7XG4gICAgaWYgKGhlbHBBcmdzKSBoZWxwQ29tbWFuZC5hcmd1bWVudHMoaGVscEFyZ3MpO1xuICAgIGlmIChoZWxwRGVzY3JpcHRpb24pIGhlbHBDb21tYW5kLmRlc2NyaXB0aW9uKGhlbHBEZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByZXBhcmVkIGN1c3RvbSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7KENvbW1hbmR8c3RyaW5nfGJvb2xlYW4pfSBoZWxwQ29tbWFuZCAtIGN1c3RvbSBoZWxwIGNvbW1hbmQsIG9yIGRlcHJlY2F0ZWQgZW5hYmxlT3JOYW1lQW5kQXJncyBhcyBmb3IgYC5oZWxwQ29tbWFuZCgpYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlcHJlY2F0ZWREZXNjcmlwdGlvbl0gLSBkZXByZWNhdGVkIGN1c3RvbSBkZXNjcmlwdGlvbiB1c2VkIHdpdGggY3VzdG9tIG5hbWUgb25seVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pIHtcbiAgICAvLyBJZiBub3QgcGFzc2VkIGFuIG9iamVjdCwgY2FsbCB0aHJvdWdoIHRvIGhlbHBDb21tYW5kIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSxcbiAgICAvLyBhcyBhZGRIZWxwQ29tbWFuZCB3YXMgb3JpZ2luYWxseSB1c2VkIGxpa2UgaGVscENvbW1hbmQgaXMgbm93LlxuICAgIGlmICh0eXBlb2YgaGVscENvbW1hbmQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHRydWU7XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBoZWxwQ29tbWFuZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEByZXR1cm4geyhDb21tYW5kfG51bGwpfVxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBDb21tYW5kKCkge1xuICAgIGNvbnN0IGhhc0ltcGxpY2l0SGVscENvbW1hbmQgPVxuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA/P1xuICAgICAgKHRoaXMuY29tbWFuZHMubGVuZ3RoICYmXG4gICAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAgICF0aGlzLl9maW5kQ29tbWFuZCgnaGVscCcpKTtcblxuICAgIGlmIChoYXNJbXBsaWNpdEhlbHBDb21tYW5kKSB7XG4gICAgICBpZiAodGhpcy5faGVscENvbW1hbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhlbHBDb21tYW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gdXNlIGRlZmF1bHQgbmFtZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9oZWxwQ29tbWFuZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGhvb2sgZm9yIGxpZmUgY3ljbGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaG9vayhldmVudCwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydwcmVTdWJjb21tYW5kJywgJ3ByZUFjdGlvbicsICdwb3N0QWN0aW9uJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBldmVudCBwYXNzZWQgdG8gaG9vayA6ICcke2V2ZW50fScuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0ucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIHRvIHVzZSBhcyByZXBsYWNlbWVudCBmb3IgY2FsbGluZyBwcm9jZXNzLmV4aXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl0gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYSBDb21tYW5kZXJFcnJvciwgZGVmYXVsdHMgdG8gdGhyb3dpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGV4aXRPdmVycmlkZShmbikge1xuICAgIGlmIChmbikge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gZm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzeW5jIGNhbGxiYWNrIGZyb20gc3Bhd24gZXZlbnRzLCBub3QgdXNlZnVsIHRvIHRocm93LlxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHByb2Nlc3MuZXhpdCwgYW5kIF9leGl0Q2FsbGJhY2sgaWYgZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIGV4aXQgY29kZSBmb3IgdXNpbmcgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqIEByZXR1cm4gbmV2ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5fZXhpdENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sobmV3IENvbW1hbmRlckVycm9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSk7XG4gICAgICAvLyBFeHBlY3RpbmcgdGhpcyBsaW5lIGlzIG5vdCByZWFjaGVkLlxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIGBmbmAgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3NlcnZlJylcbiAgICogICAuZGVzY3JpcHRpb24oJ3N0YXJ0IHNlcnZpY2UnKVxuICAgKiAgIC5hY3Rpb24oZnVuY3Rpb24oKSB7XG4gICAqICAgICAgLy8gZG8gd29yayBoZXJlXG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhY3Rpb24oZm4pIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChhcmdzKSA9PiB7XG4gICAgICAvLyBUaGUgLmFjdGlvbiBjYWxsYmFjayB0YWtlcyBhbiBleHRyYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGNvbW1hbmQgb3Igb3B0aW9ucy5cbiAgICAgIGNvbnN0IGV4cGVjdGVkQXJnc0NvdW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSBhcmdzLnNsaWNlKDAsIGV4cGVjdGVkQXJnc0NvdW50KTtcbiAgICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJsZSBcIm9wdGlvbnNcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzLm9wdHMoKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbkFyZ3MucHVzaCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFjdGlvbkFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IGxpc3RlbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBvcHRpb24uXG4gICAqXG4gICAqIFNlZSAub3B0aW9uKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIG9wdGlvbiwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBvcHRpb24uIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlT3B0aW9uIHRvIHJldHVybiBhIGN1c3RvbSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259IG5ldyBvcHRpb25cbiAgICovXG5cbiAgY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCBwYXJzZUFyZ3MgdG8gY2F0Y2ggJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLlxuICAgKlxuICAgKiBAcGFyYW0geyhPcHRpb24gfCBBcmd1bWVudCl9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBwcmV2aW91c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaW52YWxpZEFyZ3VtZW50TWVzc2FnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2FsbFBhcnNlQXJnKHRhcmdldCwgdmFsdWUsIHByZXZpb3VzLCBpbnZhbGlkQXJndW1lbnRNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0YXJnZXQucGFyc2VBcmcodmFsdWUsIHByZXZpb3VzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtpbnZhbGlkQXJndW1lbnRNZXNzYWdlfSAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBleGl0Q29kZTogZXJyLmV4aXRDb2RlLCBjb2RlOiBlcnIuY29kZSB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIG9wdGlvbiBmbGFnIGNvbmZsaWN0cy5cbiAgICogUmVnaXN0ZXIgb3B0aW9uIGlmIG5vIGNvbmZsaWN0cyBmb3VuZCwgb3IgdGhyb3cgb24gY29uZmxpY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID1cbiAgICAgIChvcHRpb24uc2hvcnQgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24uc2hvcnQpKSB8fFxuICAgICAgKG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpKTtcbiAgICBpZiAobWF0Y2hpbmdPcHRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRmxhZyA9XG4gICAgICAgIG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpXG4gICAgICAgICAgPyBvcHRpb24ubG9uZ1xuICAgICAgICAgIDogb3B0aW9uLnNob3J0O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyR7dGhpcy5fbmFtZSAmJiBgIHRvIGNvbW1hbmQgJyR7dGhpcy5fbmFtZX0nYH0gZHVlIHRvIGNvbmZsaWN0aW5nIGZsYWcgJyR7bWF0Y2hpbmdGbGFnfSdcbi0gIGFscmVhZHkgdXNlZCBieSBvcHRpb24gJyR7bWF0Y2hpbmdPcHRpb24uZmxhZ3N9J2ApO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIGNvbW1hbmQgbmFtZSBhbmQgYWxpYXMgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgY29tbWFuZHMuXG4gICAqIFJlZ2lzdGVyIGNvbW1hbmQgaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9yZWdpc3RlckNvbW1hbmQoY29tbWFuZCkge1xuICAgIGNvbnN0IGtub3duQnkgPSAoY21kKSA9PiB7XG4gICAgICByZXR1cm4gW2NtZC5uYW1lKCldLmNvbmNhdChjbWQuYWxpYXNlcygpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxyZWFkeVVzZWQgPSBrbm93bkJ5KGNvbW1hbmQpLmZpbmQoKG5hbWUpID0+XG4gICAgICB0aGlzLl9maW5kQ29tbWFuZChuYW1lKSxcbiAgICApO1xuICAgIGlmIChhbHJlYWR5VXNlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBrbm93bkJ5KHRoaXMuX2ZpbmRDb21tYW5kKGFscmVhZHlVc2VkKSkuam9pbignfCcpO1xuICAgICAgY29uc3QgbmV3Q21kID0ga25vd25CeShjb21tYW5kKS5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGNvbW1hbmQgJyR7bmV3Q21kfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbik7XG5cbiAgICBjb25zdCBvbmFtZSA9IG9wdGlvbi5uYW1lKCk7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG5cbiAgICAvLyBzdG9yZSBkZWZhdWx0IHZhbHVlXG4gICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgIC8vIC0tbm8tZm9vIGlzIHNwZWNpYWwgYW5kIGRlZmF1bHRzIGZvbyB0byB0cnVlLCB1bmxlc3MgYSAtLWZvbyBvcHRpb24gaXMgYWxyZWFkeSBkZWZpbmVkXG4gICAgICBjb25zdCBwb3NpdGl2ZUxvbmdGbGFnID0gb3B0aW9uLmxvbmcucmVwbGFjZSgvXi0tbm8tLywgJy0tJyk7XG4gICAgICBpZiAoIXRoaXMuX2ZpbmRPcHRpb24ocG9zaXRpdmVMb25nRmxhZykpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UoXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBvcHRpb24uZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9uLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKG5hbWUsIG9wdGlvbi5kZWZhdWx0VmFsdWUsICdkZWZhdWx0Jyk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlciBmb3IgY2xpIGFuZCBlbnYgc3VwcGxpZWQgdmFsdWVzXG4gICAgY29uc3QgaGFuZGxlT3B0aW9uVmFsdWUgPSAodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCB2YWx1ZVNvdXJjZSkgPT4ge1xuICAgICAgLy8gdmFsIGlzIG51bGwgZm9yIG9wdGlvbmFsIG9wdGlvbiB1c2VkIHdpdGhvdXQgYW4gb3B0aW9uYWwtYXJndW1lbnQuXG4gICAgICAvLyB2YWwgaXMgdW5kZWZpbmVkIGZvciBib29sZWFuIGFuZCBuZWdhdGVkIG9wdGlvbi5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCAmJiBvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uLnByZXNldEFyZztcbiAgICAgIH1cblxuICAgICAgLy8gY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShuYW1lKTtcbiAgICAgIGlmICh2YWwgIT09IG51bGwgJiYgb3B0aW9uLnBhcnNlQXJnKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuX2NhbGxQYXJzZUFyZyhvcHRpb24sIHZhbCwgb2xkVmFsdWUsIGludmFsaWRWYWx1ZU1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwgJiYgb3B0aW9uLnZhcmlhZGljKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbi5fY29uY2F0VmFsdWUodmFsLCBvbGRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbGwtaW4gYXBwcm9wcmlhdGUgbWlzc2luZyB2YWx1ZXMuIExvbmcgd2luZGVkIGJ1dCBlYXN5IHRvIGZvbGxvdy5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICAgIHZhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5pc0Jvb2xlYW4oKSB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICB2YWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9ICcnOyAvLyBub3Qgbm9ybWFsLCBwYXJzZUFyZyBtaWdodCBoYXZlIGZhaWxlZCBvciBiZSBhIG1vY2sgZnVuY3Rpb24gZm9yIHRlc3RpbmdcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgdmFsLCB2YWx1ZVNvdXJjZSk7XG4gICAgfTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCAnJHt2YWx9JyBpcyBpbnZhbGlkLmA7XG4gICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdjbGknKTtcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb24uZW52VmFyKSB7XG4gICAgICB0aGlzLm9uKCdvcHRpb25FbnY6JyArIG9uYW1lLCAodmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyB2YWx1ZSAnJHt2YWx9JyBmcm9tIGVudiAnJHtvcHRpb24uZW52VmFyfScgaXMgaW52YWxpZC5gO1xuICAgICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdlbnYnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIHNoYXJlZCBieSAub3B0aW9uKCkgYW5kIC5yZXF1aXJlZE9wdGlvbigpXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29wdGlvbkV4KGNvbmZpZywgZmxhZ3MsIGRlc2NyaXB0aW9uLCBmbiwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ29iamVjdCcgJiYgZmxhZ3MgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RvIGFkZCBhbiBPcHRpb24gb2JqZWN0IHVzZSBhZGRPcHRpb24oKSBpbnN0ZWFkIG9mIG9wdGlvbigpIG9yIHJlcXVpcmVkT3B0aW9uKCknLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICBvcHRpb24ubWFrZU9wdGlvbk1hbmRhdG9yeSghIWNvbmZpZy5tYW5kYXRvcnkpO1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2UgaWYgKGZuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBkZXByZWNhdGVkXG4gICAgICBjb25zdCByZWdleCA9IGZuO1xuICAgICAgZm4gPSAodmFsLCBkZWYpID0+IHtcbiAgICAgICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIG0gPyBtWzBdIDogZGVmO1xuICAgICAgfTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvcHRpb24gd2l0aCBgZmxhZ3NgLCBgZGVzY3JpcHRpb25gLCBhbmQgb3B0aW9uYWwgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiBvciBgZGVmYXVsdFZhbHVlYCBvciBib3RoLlxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS4gQSByZXF1aXJlZFxuICAgKiBvcHRpb24tYXJndW1lbnQgaXMgaW5kaWNhdGVkIGJ5IGA8PmAgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCBieSBgW11gLlxuICAgKlxuICAgKiBTZWUgdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLCBhbmQgc2VlIGFsc28gYWRkT3B0aW9uKCkgYW5kIHJlcXVpcmVkT3B0aW9uKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAgIC5vcHRpb24oJy1wLCAtLXBlcHBlcicsICdhZGQgcGVwcGVyJylcbiAgICogICAgIC5vcHRpb24oJy1wLCAtLXBpenphLXR5cGUgPFRZUEU+JywgJ3R5cGUgb2YgcGl6emEnKSAvLyByZXF1aXJlZCBvcHRpb24tYXJndW1lbnRcbiAgICogICAgIC5vcHRpb24oJy1jLCAtLWNoZWVzZSBbQ0hFRVNFXScsICdhZGQgZXh0cmEgY2hlZXNlJywgJ21venphcmVsbGEnKSAvLyBvcHRpb25hbCBvcHRpb24tYXJndW1lbnQgd2l0aCBkZWZhdWx0XG4gICAqICAgICAub3B0aW9uKCctdCwgLS10aXAgPFZBTFVFPicsICdhZGQgdGlwIHRvIHB1cmNoYXNlIGNvc3QnLCBwYXJzZUZsb2F0KSAvLyBjdXN0b20gcGFyc2UgZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgb3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25FeCh7fSwgZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByZXF1aXJlZCBvcHRpb24gd2hpY2ggbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZy4gVGhpcyB1c3VhbGx5IG1lYW5zXG4gICAqIHRoZSBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gKE90aGVyd2lzZSB0aGUgc2FtZSBhcyAub3B0aW9uKCkuKVxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgcmVxdWlyZWRPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkV4KFxuICAgICAgeyBtYW5kYXRvcnk6IHRydWUgfSxcbiAgICAgIGZsYWdzLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBwYXJzZUFyZyxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVyIHBhcnNpbmcgb2Ygc2hvcnQgZmxhZ3Mgd2l0aCBvcHRpb25hbCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGZvciBgLm9wdGlvbignLWYsLS1mbGFnIFt2YWx1ZV0nKTpcbiAgICogcHJvZ3JhbS5jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUodHJ1ZSk7ICAvLyBgLWY4MGAgaXMgdHJlYXRlZCBsaWtlIGAtLWZsYWc9ODBgLCB0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91clxuICAgKiBwcm9ncmFtLmNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZShmYWxzZSkgLy8gYC1mYmAgaXMgdHJlYXRlZCBsaWtlIGAtZiAtYmBcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbY29tYmluZV0gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgYW4gb3B0aW9uYWwgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBkaXJlY3RseSBhZnRlciB0aGUgZmxhZy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUoY29tYmluZSA9IHRydWUpIHtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSAhIWNvbWJpbmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdW5rbm93biBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93VW5rbm93bl0gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24gZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhbGxvd1Vua25vd25PcHRpb24oYWxsb3dVbmtub3duID0gdHJ1ZSkge1xuICAgIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9ICEhYWxsb3dVbmtub3duO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGV4Y2VzcyBjb21tYW5kLWFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLiBQYXNzIGZhbHNlIHRvIG1ha2UgZXhjZXNzIGFyZ3VtZW50cyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dFeGNlc3NdIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duIGZvciBleGNlc3MgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFsbG93RXhjZXNzQXJndW1lbnRzKGFsbG93RXhjZXNzID0gdHJ1ZSkge1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gISFhbGxvd0V4Y2VzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgcG9zaXRpb25hbCBvcHRpb25zLiBQb3NpdGlvbmFsIG1lYW5zIGdsb2JhbCBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYmVmb3JlIHN1YmNvbW1hbmRzIHdoaWNoIGxldHNcbiAgICogc3ViY29tbWFuZHMgcmV1c2UgdGhlIHNhbWUgb3B0aW9uIG5hbWVzLCBhbmQgYWxzbyBlbmFibGVzIHN1YmNvbW1hbmRzIHRvIHR1cm4gb24gcGFzc1Rocm91Z2hPcHRpb25zLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm9uLXBvc2l0aW9uYWwgYW5kIGdsb2JhbCBvcHRpb25zIG1heSBhcHBlYXIgYW55d2hlcmUgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbcG9zaXRpb25hbF1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBlbmFibGVQb3NpdGlvbmFsT3B0aW9ucyhwb3NpdGlvbmFsID0gdHJ1ZSkge1xuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gISFwb3NpdGlvbmFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgdGhyb3VnaCBvcHRpb25zIHRoYXQgY29tZSBhZnRlciBjb21tYW5kLWFyZ3VtZW50cyByYXRoZXIgdGhhbiB0cmVhdCB0aGVtIGFzIGNvbW1hbmQtb3B0aW9ucyxcbiAgICogc28gYWN0dWFsIGNvbW1hbmQtb3B0aW9ucyBjb21lIGJlZm9yZSBjb21tYW5kLWFyZ3VtZW50cy4gVHVybmluZyB0aGlzIG9uIGZvciBhIHN1YmNvbW1hbmQgcmVxdWlyZXNcbiAgICogcG9zaXRpb25hbCBvcHRpb25zIHRvIGhhdmUgYmVlbiBlbmFibGVkIG9uIHRoZSBwcm9ncmFtIChwYXJlbnQgY29tbWFuZHMpLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm9uLXBvc2l0aW9uYWwgYW5kIG9wdGlvbnMgbWF5IGFwcGVhciBiZWZvcmUgb3IgYWZ0ZXIgY29tbWFuZC1hcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Bhc3NUaHJvdWdoXSBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHBhc3NUaHJvdWdoT3B0aW9ucyhwYXNzVGhyb3VnaCA9IHRydWUpIHtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSAhIXBhc3NUaHJvdWdoO1xuICAgIHRoaXMuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudCAmJlxuICAgICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zICYmXG4gICAgICAhdGhpcy5wYXJlbnQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwYXNzVGhyb3VnaE9wdGlvbnMgY2Fubm90IGJlIHVzZWQgZm9yICcke3RoaXMuX25hbWV9JyB3aXRob3V0IHR1cm5pbmcgb24gZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgZm9yIHBhcmVudCBjb21tYW5kKHMpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3RvcmUgb3B0aW9uIHZhbHVlcyBhcyBwcm9wZXJ0aWVzIG9uIGNvbW1hbmQgb2JqZWN0LFxuICAgKiBvciBzdG9yZSBzZXBhcmF0ZWx5IChzcGVjaWZ5IGZhbHNlKS4gSW4gYm90aCBjYXNlcyB0aGUgb3B0aW9uIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgLm9wdHMoKS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVBc1Byb3BlcnRpZXM9dHJ1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHN0b3JlT3B0aW9uc0FzUHJvcGVydGllcyhzdG9yZUFzUHJvcGVydGllcyA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsIC5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKSBiZWZvcmUgYWRkaW5nIG9wdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX29wdGlvblZhbHVlcykubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdjYWxsIC5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKSBiZWZvcmUgc2V0dGluZyBvcHRpb24gdmFsdWVzJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9ICEhc3RvcmVBc1Byb3BlcnRpZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge29iamVjdH0gdmFsdWVcbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWUoa2V5KSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHNldE9wdGlvblZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2Uoa2V5LCB2YWx1ZSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvcHRpb24gdmFsdWUgYW5kIHdoZXJlIHRoZSB2YWx1ZSBjYW1lIGZyb20uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBleHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQvY29uZmlnL2Vudi9jbGkvaW1wbGllZFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKGtleSwgdmFsdWUsIHNvdXJjZSkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcHRpb25WYWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXNba2V5XSA9IHNvdXJjZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIG9mIG9wdGlvbiB2YWx1ZS5cbiAgICogRXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0IHwgY29uZmlnIHwgZW52IHwgY2xpIHwgaW1wbGllZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlU291cmNlc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2Ugb2Ygb3B0aW9uIHZhbHVlLiBTZWUgYWxzbyAub3B0c1dpdGhHbG9iYWxzKCkuXG4gICAqIEV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdCB8IGNvbmZpZyB8IGVudiB8IGNsaSB8IGltcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlU291cmNlV2l0aEdsb2JhbHMoa2V5KSB7XG4gICAgLy8gZ2xvYmFsIG92ZXJ3cml0ZXMgbG9jYWwsIGxpa2Ugb3B0c1dpdGhHbG9iYWxzXG4gICAgbGV0IHNvdXJjZTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBpZiAoY21kLmdldE9wdGlvblZhbHVlU291cmNlKGtleSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzb3VyY2UgPSBjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFyZ3VtZW50cyBmcm9tIGltcGxpZWQgb3IgZXhwbGljaXQgYXJndW1lbnRzLlxuICAgKiBTaWRlLWVmZmVjdHM6IHNldCBfc2NyaXB0UGF0aCBpZiBhcmdzIGluY2x1ZGVkIHNjcmlwdC4gVXNlZCBmb3IgZGVmYXVsdCBwcm9ncmFtIG5hbWUsIGFuZCBzdWJjb21tYW5kIHNlYXJjaGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIGlmIChhcmd2ICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkoYXJndikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3QgcGFyYW1ldGVyIHRvIHBhcnNlIG11c3QgYmUgYXJyYXkgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHBhcnNlT3B0aW9ucyA9IHBhcnNlT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIGF1dG8tZGV0ZWN0IGFyZ3VtZW50IGNvbnZlbnRpb25zIGlmIG5vdGhpbmcgc3VwcGxpZWRcbiAgICBpZiAoYXJndiA9PT0gdW5kZWZpbmVkICYmIHBhcnNlT3B0aW9ucy5mcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnZlcnNpb25zPy5lbGVjdHJvbikge1xuICAgICAgICBwYXJzZU9wdGlvbnMuZnJvbSA9ICdlbGVjdHJvbic7XG4gICAgICB9XG4gICAgICAvLyBjaGVjayBub2RlIHNwZWNpZmljIG9wdGlvbnMgZm9yIHNjZW5hcmlvcyB3aGVyZSB1c2VyIENMSSBhcmdzIGZvbGxvdyBleGVjdXRhYmxlIHdpdGhvdXQgc2NyaXB0bmFtZVxuICAgICAgY29uc3QgZXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2ID8/IFtdO1xuICAgICAgaWYgKFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLWUnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLS1ldmFsJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy1wJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy0tcHJpbnQnKVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlT3B0aW9ucy5mcm9tID0gJ2V2YWwnOyAvLyBpbnRlcm5hbCB1c2FnZSwgbm90IGRvY3VtZW50ZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHRvIHVzaW5nIHByb2Nlc3MuYXJndlxuICAgIGlmIChhcmd2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgfVxuICAgIHRoaXMucmF3QXJncyA9IGFyZ3Yuc2xpY2UoKTtcblxuICAgIC8vIGV4dHJhY3QgdGhlIHVzZXIgYXJncyBhbmQgc2NyaXB0UGF0aFxuICAgIGxldCB1c2VyQXJncztcbiAgICBzd2l0Y2ggKHBhcnNlT3B0aW9ucy5mcm9tKSB7XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICB0aGlzLl9zY3JpcHRQYXRoID0gYXJndlsxXTtcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VsZWN0cm9uJzpcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBkZWZhdWx0QXBwIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgaWYgKHByb2Nlc3MuZGVmYXVsdEFwcCkge1xuICAgICAgICAgIHRoaXMuX3NjcmlwdFBhdGggPSBhcmd2WzFdO1xuICAgICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2YWwnOlxuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB1bmV4cGVjdGVkIHBhcnNlIG9wdGlvbiB7IGZyb206ICcke3BhcnNlT3B0aW9ucy5mcm9tfScgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBkZWZhdWx0IG5hbWUgZm9yIHByb2dyYW0gZnJvbSBhcmd1bWVudHMuXG4gICAgaWYgKCF0aGlzLl9uYW1lICYmIHRoaXMuX3NjcmlwdFBhdGgpXG4gICAgICB0aGlzLm5hbWVGcm9tRmlsZW5hbWUodGhpcy5fc2NyaXB0UGF0aCk7XG4gICAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUgfHwgJ3Byb2dyYW0nO1xuXG4gICAgcmV0dXJuIHVzZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gICAqXG4gICAqIFVzZSBwYXJzZUFzeW5jIGluc3RlYWQgb2YgcGFyc2UgaWYgYW55IG9mIHlvdXIgYWN0aW9uIGhhbmRsZXJzIGFyZSBhc3luYy5cbiAgICpcbiAgICogQ2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcGFyc2UgYHByb2Nlc3MuYXJndmAuIERldGVjdHMgRWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBvcHRpb25zIGxpa2UgYG5vZGUgLS1ldmFsYC4gRWFzeSBtb2RlIVxuICAgKlxuICAgKiBPciBjYWxsIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSwgYW5kIG9wdGlvbmFsbHkgd2hlcmUgdGhlIHVzZXIgYXJndW1lbnRzIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgYGZyb21gOlxuICAgKiAtIGAnbm9kZSdgOiBkZWZhdWx0LCBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgaXMgdGhlIHNjcmlwdCBiZWluZyBydW4sIHdpdGggdXNlciBhcmd1bWVudHMgYWZ0ZXIgdGhhdFxuICAgKiAtIGAnZWxlY3Ryb24nYDogYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZWxlY3Ryb24gYXBwbGljYXRpb24gaXMgcGFja2FnZWRcbiAgICogLSBgJ3VzZXInYDoganVzdCB1c2VyIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLnBhcnNlKCk7IC8vIHBhcnNlIHByb2Nlc3MuYXJndiBhbmQgYXV0by1kZXRlY3QgZWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBmbGFnc1xuICAgKiBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7IC8vIGFzc3VtZSBhcmd2WzBdIGlzIGFwcCBhbmQgYXJndlsxXSBpcyBzY3JpcHRcbiAgICogcHJvZ3JhbS5wYXJzZShteS1hcmdzLCB7IGZyb206ICd1c2VyJyB9KTsgLy8ganVzdCB1c2VyIHN1cHBsaWVkIGFyZ3VtZW50cywgbm90aGluZyBzcGVjaWFsIGFib3V0IGFyZ3ZbMF1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3ZdIC0gb3B0aW9uYWwsIGRlZmF1bHRzIHRvIHByb2Nlc3MuYXJndlxuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcnNlT3B0aW9uc10gLSBvcHRpb25hbGx5IHNwZWNpZnkgc3R5bGUgb2Ygb3B0aW9ucyB3aXRoIGZyb206IG5vZGUvdXNlci9lbGVjdHJvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcnNlT3B0aW9ucy5mcm9tXSAtIHdoZXJlIHRoZSBhcmdzIGFyZSBmcm9tOiAnbm9kZScsICd1c2VyJywgJ2VsZWN0cm9uJ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgcGFyc2UoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgY29uc3QgdXNlckFyZ3MgPSB0aGlzLl9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKTtcbiAgICB0aGlzLl9wYXJzZUNvbW1hbmQoW10sIHVzZXJBcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gICAqXG4gICAqIENhbGwgd2l0aCBubyBwYXJhbWV0ZXJzIHRvIHBhcnNlIGBwcm9jZXNzLmFyZ3ZgLiBEZXRlY3RzIEVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgb3B0aW9ucyBsaWtlIGBub2RlIC0tZXZhbGAuIEVhc3kgbW9kZSFcbiAgICpcbiAgICogT3IgY2FsbCB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UsIGFuZCBvcHRpb25hbGx5IHdoZXJlIHRoZSB1c2VyIGFyZ3VtZW50cyBzdGFydCBieSBzcGVjaWZ5aW5nIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIGBmcm9tYDpcbiAgICogLSBgJ25vZGUnYDogZGVmYXVsdCwgYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIGlzIHRoZSBzY3JpcHQgYmVpbmcgcnVuLCB3aXRoIHVzZXIgYXJndW1lbnRzIGFmdGVyIHRoYXRcbiAgICogLSBgJ2VsZWN0cm9uJ2A6IGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGVsZWN0cm9uIGFwcGxpY2F0aW9uIGlzIHBhY2thZ2VkXG4gICAqIC0gYCd1c2VyJ2A6IGp1c3QgdXNlciBhcmd1bWVudHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKCk7IC8vIHBhcnNlIHByb2Nlc3MuYXJndiBhbmQgYXV0by1kZXRlY3QgZWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBmbGFnc1xuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTsgLy8gYXNzdW1lIGFyZ3ZbMF0gaXMgYXBwIGFuZCBhcmd2WzFdIGlzIHNjcmlwdFxuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMobXktYXJncywgeyBmcm9tOiAndXNlcicgfSk7IC8vIGp1c3QgdXNlciBzdXBwbGllZCBhcmd1bWVudHMsIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBhcmd2WzBdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmd2XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcnNlT3B0aW9uc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcnNlT3B0aW9ucy5mcm9tIC0gd2hlcmUgdGhlIGFyZ3MgYXJlIGZyb206ICdub2RlJywgJ3VzZXInLCAnZWxlY3Ryb24nXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuXG4gIGFzeW5jIHBhcnNlQXN5bmMoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgY29uc3QgdXNlckFyZ3MgPSB0aGlzLl9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLl9wYXJzZUNvbW1hbmQoW10sIHVzZXJBcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBzdWItY29tbWFuZCBleGVjdXRhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhlY3V0ZVN1YkNvbW1hbmQoc3ViY29tbWFuZCwgYXJncykge1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKCk7XG4gICAgbGV0IGxhdW5jaFdpdGhOb2RlID0gZmFsc2U7IC8vIFVzZSBub2RlIGZvciBzb3VyY2UgdGFyZ2V0cyBzbyBkbyBub3QgbmVlZCB0byBnZXQgcGVybWlzc2lvbnMgY29ycmVjdCwgYW5kIG9uIFdpbmRvd3MuXG4gICAgY29uc3Qgc291cmNlRXh0ID0gWycuanMnLCAnLnRzJywgJy50c3gnLCAnLm1qcycsICcuY2pzJ107XG5cbiAgICBmdW5jdGlvbiBmaW5kRmlsZShiYXNlRGlyLCBiYXNlTmFtZSkge1xuICAgICAgLy8gTG9vayBmb3Igc3BlY2lmaWVkIGZpbGVcbiAgICAgIGNvbnN0IGxvY2FsQmluID0gcGF0aC5yZXNvbHZlKGJhc2VEaXIsIGJhc2VOYW1lKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGxvY2FsQmluKSkgcmV0dXJuIGxvY2FsQmluO1xuXG4gICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgY2FuZGlkYXRlIGFscmVhZHkgaGFzIGFuIGV4cGVjdGVkIGV4dGVuc2lvbi5cbiAgICAgIGlmIChzb3VyY2VFeHQuaW5jbHVkZXMocGF0aC5leHRuYW1lKGJhc2VOYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIFRyeSBhbGwgdGhlIGV4dGVuc2lvbnMuXG4gICAgICBjb25zdCBmb3VuZEV4dCA9IHNvdXJjZUV4dC5maW5kKChleHQpID0+XG4gICAgICAgIGZzLmV4aXN0c1N5bmMoYCR7bG9jYWxCaW59JHtleHR9YCksXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kRXh0KSByZXR1cm4gYCR7bG9jYWxCaW59JHtmb3VuZEV4dH1gO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIE5vdCBjaGVja2luZyBmb3IgaGVscCBmaXJzdC4gVW5saWtlbHkgdG8gaGF2ZSBtYW5kYXRvcnkgYW5kIGV4ZWN1dGFibGUsIGFuZCBjYW4ndCByb2J1c3RseSB0ZXN0IGZvciBoZWxwIGZsYWdzIGluIGV4dGVybmFsIGNvbW1hbmQuXG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBleGVjdXRhYmxlRmlsZSBhbmQgZXhlY3V0YWJsZURpciBtaWdodCBiZSBmdWxsIHBhdGgsIG9yIGp1c3QgYSBuYW1lXG4gICAgbGV0IGV4ZWN1dGFibGVGaWxlID1cbiAgICAgIHN1YmNvbW1hbmQuX2V4ZWN1dGFibGVGaWxlIHx8IGAke3RoaXMuX25hbWV9LSR7c3ViY29tbWFuZC5fbmFtZX1gO1xuICAgIGxldCBleGVjdXRhYmxlRGlyID0gdGhpcy5fZXhlY3V0YWJsZURpciB8fCAnJztcbiAgICBpZiAodGhpcy5fc2NyaXB0UGF0aCkge1xuICAgICAgbGV0IHJlc29sdmVkU2NyaXB0UGF0aDsgLy8gcmVzb2x2ZSBwb3NzaWJsZSBzeW1saW5rIGZvciBpbnN0YWxsZWQgbnBtIGJpbmFyeVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWRTY3JpcHRQYXRoID0gZnMucmVhbHBhdGhTeW5jKHRoaXMuX3NjcmlwdFBhdGgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlc29sdmVkU2NyaXB0UGF0aCA9IHRoaXMuX3NjcmlwdFBhdGg7XG4gICAgICB9XG4gICAgICBleGVjdXRhYmxlRGlyID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwYXRoLmRpcm5hbWUocmVzb2x2ZWRTY3JpcHRQYXRoKSxcbiAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9vayBmb3IgYSBsb2NhbCBmaWxlIGluIHByZWZlcmVuY2UgdG8gYSBjb21tYW5kIGluIFBBVEguXG4gICAgaWYgKGV4ZWN1dGFibGVEaXIpIHtcbiAgICAgIGxldCBsb2NhbEZpbGUgPSBmaW5kRmlsZShleGVjdXRhYmxlRGlyLCBleGVjdXRhYmxlRmlsZSk7XG5cbiAgICAgIC8vIExlZ2FjeSBzZWFyY2ggdXNpbmcgcHJlZml4IG9mIHNjcmlwdCBuYW1lIGluc3RlYWQgb2YgY29tbWFuZCBuYW1lXG4gICAgICBpZiAoIWxvY2FsRmlsZSAmJiAhc3ViY29tbWFuZC5fZXhlY3V0YWJsZUZpbGUgJiYgdGhpcy5fc2NyaXB0UGF0aCkge1xuICAgICAgICBjb25zdCBsZWdhY3lOYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgICB0aGlzLl9zY3JpcHRQYXRoLFxuICAgICAgICAgIHBhdGguZXh0bmFtZSh0aGlzLl9zY3JpcHRQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxlZ2FjeU5hbWUgIT09IHRoaXMuX25hbWUpIHtcbiAgICAgICAgICBsb2NhbEZpbGUgPSBmaW5kRmlsZShcbiAgICAgICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgICAgICBgJHtsZWdhY3lOYW1lfS0ke3N1YmNvbW1hbmQuX25hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGVjdXRhYmxlRmlsZSA9IGxvY2FsRmlsZSB8fCBleGVjdXRhYmxlRmlsZTtcbiAgICB9XG5cbiAgICBsYXVuY2hXaXRoTm9kZSA9IHNvdXJjZUV4dC5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoZXhlY3V0YWJsZUZpbGUpKTtcblxuICAgIGxldCBwcm9jO1xuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgICBpZiAobGF1bmNoV2l0aE5vZGUpIHtcbiAgICAgICAgYXJncy51bnNoaWZ0KGV4ZWN1dGFibGVGaWxlKTtcbiAgICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICAgIGFyZ3MgPSBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChwcm9jZXNzLmV4ZWNBcmd2KS5jb25jYXQoYXJncyk7XG5cbiAgICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwcm9jZXNzLmFyZ3ZbMF0sIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24oZXhlY3V0YWJsZUZpbGUsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KGV4ZWN1dGFibGVGaWxlKTtcbiAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgYXJncyA9IGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KHByb2Nlc3MuZXhlY0FyZ3YpLmNvbmNhdChhcmdzKTtcbiAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgIH1cblxuICAgIGlmICghcHJvYy5raWxsZWQpIHtcbiAgICAgIC8vIHRlc3RpbmcgbWFpbmx5IHRvIGF2b2lkIGxlYWsgd2FybmluZ3MgZHVyaW5nIHVuaXQgdGVzdHMgd2l0aCBtb2NrZWQgc3Bhd25cbiAgICAgIGNvbnN0IHNpZ25hbHMgPSBbJ1NJR1VTUjEnLCAnU0lHVVNSMicsICdTSUdURVJNJywgJ1NJR0lOVCcsICdTSUdIVVAnXTtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Mua2lsbGVkID09PSBmYWxzZSAmJiBwcm9jLmV4aXRDb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIGJlY2F1c2Ugc2lnbmFscyBub3QgdHlwZWQgdG8ga25vd24gc3RyaW5nc1xuICAgICAgICAgICAgcHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQgdGVybWluYXRlIHByb2Nlc3Mgd2hlbiBzcGF3bmVkIHByb2Nlc3MgdGVybWluYXRlcy5cbiAgICBjb25zdCBleGl0Q2FsbGJhY2sgPSB0aGlzLl9leGl0Q2FsbGJhY2s7XG4gICAgcHJvYy5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgY29kZSA9IGNvZGUgPz8gMTsgLy8gY29kZSBpcyBudWxsIGlmIHNwYXduZWQgcHJvY2VzcyB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbFxuICAgICAgaWYgKCFleGl0Q2FsbGJhY2spIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpdENhbGxiYWNrKFxuICAgICAgICAgIG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnLFxuICAgICAgICAgICAgJyhjbG9zZSknLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvYy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGVyci5jb2RlIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0YWJsZURpck1lc3NhZ2UgPSBleGVjdXRhYmxlRGlyXG4gICAgICAgICAgPyBgc2VhcmNoZWQgZm9yIGxvY2FsIHN1YmNvbW1hbmQgcmVsYXRpdmUgdG8gZGlyZWN0b3J5ICcke2V4ZWN1dGFibGVEaXJ9J2BcbiAgICAgICAgICA6ICdubyBkaXJlY3RvcnkgZm9yIHNlYXJjaCBmb3IgbG9jYWwgc3ViY29tbWFuZCwgdXNlIC5leGVjdXRhYmxlRGlyKCkgdG8gc3VwcGx5IGEgY3VzdG9tIGRpcmVjdG9yeSc7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGFibGVNaXNzaW5nID0gYCcke2V4ZWN1dGFibGVGaWxlfScgZG9lcyBub3QgZXhpc3RcbiAtIGlmICcke3N1YmNvbW1hbmQuX25hbWV9JyBpcyBub3QgbWVhbnQgdG8gYmUgYW4gZXhlY3V0YWJsZSBjb21tYW5kLCByZW1vdmUgZGVzY3JpcHRpb24gcGFyYW1ldGVyIGZyb20gJy5jb21tYW5kKCknIGFuZCB1c2UgJy5kZXNjcmlwdGlvbigpJyBpbnN0ZWFkXG4gLSBpZiB0aGUgZGVmYXVsdCBleGVjdXRhYmxlIG5hbWUgaXMgbm90IHN1aXRhYmxlLCB1c2UgdGhlIGV4ZWN1dGFibGVGaWxlIG9wdGlvbiB0byBzdXBwbHkgYSBjdXN0b20gbmFtZSBvciBwYXRoXG4gLSAke2V4ZWN1dGFibGVEaXJNZXNzYWdlfWA7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihleGVjdXRhYmxlTWlzc2luZyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZXJyLmNvZGUgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtleGVjdXRhYmxlRmlsZX0nIG5vdCBleGVjdXRhYmxlYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXRDYWxsYmFjaykge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3cmFwcGVkRXJyb3IgPSBuZXcgQ29tbWFuZGVyRXJyb3IoXG4gICAgICAgICAgMSxcbiAgICAgICAgICAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnLFxuICAgICAgICAgICcoZXJyb3IpJyxcbiAgICAgICAgKTtcbiAgICAgICAgd3JhcHBlZEVycm9yLm5lc3RlZEVycm9yID0gZXJyO1xuICAgICAgICBleGl0Q2FsbGJhY2sod3JhcHBlZEVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICB0aGlzLnJ1bm5pbmdDb21tYW5kID0gcHJvYztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZGlzcGF0Y2hTdWJjb21tYW5kKGNvbW1hbmROYW1lLCBvcGVyYW5kcywgdW5rbm93bikge1xuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSB0aGlzLl9maW5kQ29tbWFuZChjb21tYW5kTmFtZSk7XG4gICAgaWYgKCFzdWJDb21tYW5kKSB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcblxuICAgIGxldCBwcm9taXNlQ2hhaW47XG4gICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxTdWJDb21tYW5kSG9vayhcbiAgICAgIHByb21pc2VDaGFpbixcbiAgICAgIHN1YkNvbW1hbmQsXG4gICAgICAncHJlU3ViY29tbWFuZCcsXG4gICAgKTtcbiAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgIGlmIChzdWJDb21tYW5kLl9leGVjdXRhYmxlSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9leGVjdXRlU3ViQ29tbWFuZChzdWJDb21tYW5kLCBvcGVyYW5kcy5jb25jYXQodW5rbm93bikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN1YkNvbW1hbmQuX3BhcnNlQ29tbWFuZChvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgaGVscCBkaXJlY3RseSBpZiBwb3NzaWJsZSwgb3IgZGlzcGF0Y2ggaWYgbmVjZXNzYXJ5LlxuICAgKiBlLmcuIGhlbHAgZm9vXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9kaXNwYXRjaEhlbHBDb21tYW5kKHN1YmNvbW1hbmROYW1lKSB7XG4gICAgaWYgKCFzdWJjb21tYW5kTmFtZSkge1xuICAgICAgdGhpcy5oZWxwKCk7XG4gICAgfVxuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSB0aGlzLl9maW5kQ29tbWFuZChzdWJjb21tYW5kTmFtZSk7XG4gICAgaWYgKHN1YkNvbW1hbmQgJiYgIXN1YkNvbW1hbmQuX2V4ZWN1dGFibGVIYW5kbGVyKSB7XG4gICAgICBzdWJDb21tYW5kLmhlbHAoKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBwYXJzaW5nIHRoZSBoZWxwIGZsYWcgdG8gaW52b2tlIHRoZSBoZWxwLlxuICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICBzdWJjb21tYW5kTmFtZSxcbiAgICAgIFtdLFxuICAgICAgW3RoaXMuX2dldEhlbHBPcHRpb24oKT8ubG9uZyA/PyB0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LnNob3J0ID8/ICctLWhlbHAnXSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoaXMuYXJncyBhZ2FpbnN0IGV4cGVjdGVkIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrTnVtYmVyT2ZBcmd1bWVudHMoKSB7XG4gICAgLy8gdG9vIGZld1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChhcmcsIGkpID0+IHtcbiAgICAgIGlmIChhcmcucmVxdWlyZWQgJiYgdGhpcy5hcmdzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5taXNzaW5nQXJndW1lbnQoYXJnLm5hbWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdG9vIG1hbnlcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzW3RoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggLSAxXS52YXJpYWRpY1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcmdzLmxlbmd0aCA+IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2V4Y2Vzc0FyZ3VtZW50cyh0aGlzLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoaXMuYXJncyB1c2luZyB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMgYW5kIHNhdmUgYXMgdGhpcy5wcm9jZXNzZWRBcmdzIVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcHJvY2Vzc0FyZ3VtZW50cygpIHtcbiAgICBjb25zdCBteVBhcnNlQXJnID0gKGFyZ3VtZW50LCB2YWx1ZSwgcHJldmlvdXMpID0+IHtcbiAgICAgIC8vIEV4dHJhIHByb2Nlc3NpbmcgZm9yIG5pY2UgZXJyb3IgbWVzc2FnZSBvbiBwYXJzaW5nIGZhaWx1cmUuXG4gICAgICBsZXQgcGFyc2VkVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBhcmd1bWVudC5wYXJzZUFyZykge1xuICAgICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBjb21tYW5kLWFyZ3VtZW50IHZhbHVlICcke3ZhbHVlfScgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgJyR7YXJndW1lbnQubmFtZSgpfScuYDtcbiAgICAgICAgcGFyc2VkVmFsdWUgPSB0aGlzLl9jYWxsUGFyc2VBcmcoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgaW52YWxpZFZhbHVlTWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZWRWYWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5fY2hlY2tOdW1iZXJPZkFyZ3VtZW50cygpO1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkQXJncyA9IFtdO1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChkZWNsYXJlZEFyZywgaW5kZXgpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChkZWNsYXJlZEFyZy52YXJpYWRpYykge1xuICAgICAgICAvLyBDb2xsZWN0IHRvZ2V0aGVyIHJlbWFpbmluZyBhcmd1bWVudHMgZm9yIHBhc3NpbmcgdG9nZXRoZXIgYXMgYW4gYXJyYXkuXG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuYXJncy5zbGljZShpbmRleCk7XG4gICAgICAgICAgaWYgKGRlY2xhcmVkQXJnLnBhcnNlQXJnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlZHVjZSgocHJvY2Vzc2VkLCB2KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBteVBhcnNlQXJnKGRlY2xhcmVkQXJnLCB2LCBwcm9jZXNzZWQpO1xuICAgICAgICAgICAgfSwgZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5hcmdzW2luZGV4XTtcbiAgICAgICAgaWYgKGRlY2xhcmVkQXJnLnBhcnNlQXJnKSB7XG4gICAgICAgICAgdmFsdWUgPSBteVBhcnNlQXJnKGRlY2xhcmVkQXJnLCB2YWx1ZSwgZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkQXJnc1tpbmRleF0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBwcm9jZXNzZWRBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uY2Ugd2UgaGF2ZSBhIHByb21pc2Ugd2UgY2hhaW4sIGJ1dCBjYWxsIHN5bmNocm9ub3VzbHkgdW50aWwgdGhlbi5cbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbChwcm9taXNlLCBmbikge1xuICAgIC8vIHRoZW5hYmxlXG4gICAgaWYgKHByb21pc2UgJiYgcHJvbWlzZS50aGVuICYmIHR5cGVvZiBwcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGFscmVhZHkgaGF2ZSBhIHByb21pc2UsIGNoYWluIGNhbGxiYWNrXG4gICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IGZuKCkpO1xuICAgIH1cbiAgICAvLyBjYWxsYmFjayBtaWdodCByZXR1cm4gYSBwcm9taXNlXG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGxIb29rcyhwcm9taXNlLCBldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBwcm9taXNlO1xuICAgIGNvbnN0IGhvb2tzID0gW107XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmlsdGVyKChjbWQpID0+IGNtZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaCgoaG9va2VkQ29tbWFuZCkgPT4ge1xuICAgICAgICBob29rZWRDb21tYW5kLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBob29rcy5wdXNoKHsgaG9va2VkQ29tbWFuZCwgY2FsbGJhY2sgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKGV2ZW50ID09PSAncG9zdEFjdGlvbicpIHtcbiAgICAgIGhvb2tzLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBob29rcy5mb3JFYWNoKChob29rRGV0YWlsKSA9PiB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGhvb2tEZXRhaWwuY2FsbGJhY2soaG9va0RldGFpbC5ob29rZWRDb21tYW5kLCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gc3ViQ29tbWFuZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2socHJvbWlzZSwgc3ViQ29tbWFuZCwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2NoYWluT3JDYWxsKHJlc3VsdCwgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBob29rKHRoaXMsIHN1YkNvbW1hbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYXJndW1lbnRzIGluIGNvbnRleHQgb2YgdGhpcyBjb21tYW5kLlxuICAgKiBSZXR1cm5zIGFjdGlvbiByZXN1bHQsIGluIGNhc2UgaXQgaXMgYSBwcm9taXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZU9wdGlvbnModW5rbm93bik7XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zRW52KCk7IC8vIGFmdGVyIGNsaSwgc28gcGFyc2VBcmcgbm90IGNhbGxlZCBvbiBib3RoIGNsaSBhbmQgZW52XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zSW1wbGllZCgpO1xuICAgIG9wZXJhbmRzID0gb3BlcmFuZHMuY29uY2F0KHBhcnNlZC5vcGVyYW5kcyk7XG4gICAgdW5rbm93biA9IHBhcnNlZC51bmtub3duO1xuICAgIHRoaXMuYXJncyA9IG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKTtcblxuICAgIGlmIChvcGVyYW5kcyAmJiB0aGlzLl9maW5kQ29tbWFuZChvcGVyYW5kc1swXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQob3BlcmFuZHNbMF0sIG9wZXJhbmRzLnNsaWNlKDEpLCB1bmtub3duKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZ2V0SGVscENvbW1hbmQoKSAmJlxuICAgICAgb3BlcmFuZHNbMF0gPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hIZWxwQ29tbWFuZChvcGVyYW5kc1sxXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZCh1bmtub3duKTsgLy8gUnVuIHRoZSBoZWxwIGZvciBkZWZhdWx0IGNvbW1hbmQgZnJvbSBwYXJlbnQgcmF0aGVyIHRoYW4gcGFzc2luZyB0byBkZWZhdWx0IGNvbW1hbmRcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgb3BlcmFuZHMsXG4gICAgICAgIHVua25vd24sXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5hcmdzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICF0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWVcbiAgICApIHtcbiAgICAgIC8vIHByb2JhYmx5IG1pc3Npbmcgc3ViY29tbWFuZCBhbmQgbm8gaGFuZGxlciwgdXNlciBuZWVkcyBoZWxwIChhbmQgZXhpdClcbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZChwYXJzZWQudW5rbm93bik7XG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBXZSBkbyBub3QgYWx3YXlzIGNhbGwgdGhpcyBjaGVjayB0byBhdm9pZCBtYXNraW5nIGEgXCJiZXR0ZXJcIiBlcnJvciwgbGlrZSB1bmtub3duIGNvbW1hbmQuXG4gICAgY29uc3QgY2hlY2tGb3JVbmtub3duT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmIChwYXJzZWQudW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5rbm93bk9wdGlvbihwYXJzZWQudW5rbm93blswXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbW1hbmRFdmVudCA9IGBjb21tYW5kOiR7dGhpcy5uYW1lKCl9YDtcbiAgICBpZiAodGhpcy5fYWN0aW9uSGFuZGxlcikge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuXG4gICAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwcmVBY3Rpb24nKTtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT5cbiAgICAgICAgdGhpcy5fYWN0aW9uSGFuZGxlcih0aGlzLnByb2Nlc3NlZEFyZ3MpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2VDaGFpbiwgJ3Bvc3RBY3Rpb24nKTtcbiAgICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5saXN0ZW5lckNvdW50KGNvbW1hbmRFdmVudCkpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIHRoaXMucGFyZW50LmVtaXQoY29tbWFuZEV2ZW50LCBvcGVyYW5kcywgdW5rbm93bik7IC8vIGxlZ2FjeVxuICAgIH0gZWxzZSBpZiAob3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5fZmluZENvbW1hbmQoJyonKSkge1xuICAgICAgICAvLyBsZWdhY3kgZGVmYXVsdCBjb21tYW5kXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoJyonLCBvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdjb21tYW5kOionKSkge1xuICAgICAgICAvLyBza2lwIG9wdGlvbiBjaGVjaywgZW1pdCBldmVudCBmb3IgcG9zc2libGUgbWlzc3BlbGxpbmcgc3VnZ2VzdGlvblxuICAgICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6KicsIG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bmtub3duQ29tbWFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgLy8gVGhpcyBjb21tYW5kIGhhcyBzdWJjb21tYW5kcyBhbmQgbm90aGluZyBob29rZWQgdXAgYXQgdGhpcyBsZXZlbCwgc28gZGlzcGxheSBoZWxwIChhbmQgZXhpdCkuXG4gICAgICB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgLy8gZmFsbCB0aHJvdWdoIGZvciBjYWxsZXIgdG8gaGFuZGxlIGFmdGVyIGNhbGxpbmcgLnBhcnNlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBtYXRjaGluZyBjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgX2ZpbmRDb21tYW5kKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZmluZChcbiAgICAgIChjbWQpID0+IGNtZC5fbmFtZSA9PT0gbmFtZSB8fCBjbWQuX2FsaWFzZXMuaW5jbHVkZXMobmFtZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9uIG1hdGNoaW5nIGBhcmdgIGlmIGFueS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9maW5kT3B0aW9uKGFyZykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24uaXMoYXJnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGEgbWFuZGF0b3J5IG9wdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsdWUuXG4gICAqIENhbGxlZCBhZnRlciBjaGVja2luZyBmb3IgaGVscCBmbGFncyBpbiBsZWFmIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCkge1xuICAgIC8vIFdhbGsgdXAgaGllcmFyY2h5IHNvIGNhbiBjYWxsIGluIHN1YmNvbW1hbmQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGRpc3BsYXlpbmcgaGVscC5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBjbWQub3B0aW9ucy5mb3JFYWNoKChhbk9wdGlvbikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYW5PcHRpb24ubWFuZGF0b3J5ICYmXG4gICAgICAgICAgY21kLmdldE9wdGlvblZhbHVlKGFuT3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjbWQubWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlKGFuT3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG9nZXRoZXIgaW4gdGhpcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0ZvckNvbmZsaWN0aW5nTG9jYWxPcHRpb25zKCkge1xuICAgIGNvbnN0IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGlmICh0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpICE9PSAnZGVmYXVsdCc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb25zV2l0aENvbmZsaWN0aW5nID0gZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zLmZpbHRlcihcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5jb25mbGljdHNXaXRoLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIG9wdGlvbnNXaXRoQ29uZmxpY3RpbmcuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb25mbGljdGluZ0FuZERlZmluZWQgPSBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMuZmluZCgoZGVmaW5lZCkgPT5cbiAgICAgICAgb3B0aW9uLmNvbmZsaWN0c1dpdGguaW5jbHVkZXMoZGVmaW5lZC5hdHRyaWJ1dGVOYW1lKCkpLFxuICAgICAgKTtcbiAgICAgIGlmIChjb25mbGljdGluZ0FuZERlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY29uZmxpY3RpbmdPcHRpb24ob3B0aW9uLCBjb25mbGljdGluZ0FuZERlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSB1c2VkIHRvZ2V0aGVyLlxuICAgKiBDYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGhlbHAgZmxhZ3MgaW4gbGVhZiBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCkge1xuICAgIC8vIFdhbGsgdXAgaGllcmFyY2h5IHNvIGNhbiBjYWxsIGluIHN1YmNvbW1hbmQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGRpc3BsYXlpbmcgaGVscC5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBjbWQuX2NoZWNrRm9yQ29uZmxpY3RpbmdMb2NhbE9wdGlvbnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBvcHRpb25zIGZyb20gYGFyZ3ZgIHJlbW92aW5nIGtub3duIG9wdGlvbnMsXG4gICAqIGFuZCByZXR1cm4gYXJndiBzcGxpdCBpbnRvIG9wZXJhbmRzIGFuZCB1bmtub3duIGFyZ3VtZW50cy5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBhcmd2ID0+IG9wZXJhbmRzLCB1bmtub3duXG4gICAqICAgICAtLWtub3duIGtrayBvcCA9PiBbb3BdLCBbXVxuICAgKiAgICAgb3AgLS1rbm93biBra2sgPT4gW29wXSwgW11cbiAgICogICAgIHN1YiAtLXVua25vd24gdXV1IG9wID0+IFtzdWJdLCBbLS11bmtub3duIHV1dSBvcF1cbiAgICogICAgIHN1YiAtLSAtLXVua25vd24gdXV1IG9wID0+IFtzdWIgLS11bmtub3duIHV1dSBvcF0sIFtdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3ZcbiAgICogQHJldHVybiB7e29wZXJhbmRzOiBzdHJpbmdbXSwgdW5rbm93bjogc3RyaW5nW119fVxuICAgKi9cblxuICBwYXJzZU9wdGlvbnMoYXJndikge1xuICAgIGNvbnN0IG9wZXJhbmRzID0gW107IC8vIG9wZXJhbmRzLCBub3Qgb3B0aW9ucyBvciB2YWx1ZXNcbiAgICBjb25zdCB1bmtub3duID0gW107IC8vIGZpcnN0IHVua25vd24gb3B0aW9uIGFuZCByZW1haW5pbmcgdW5rbm93biBhcmdzXG4gICAgbGV0IGRlc3QgPSBvcGVyYW5kcztcbiAgICBjb25zdCBhcmdzID0gYXJndi5zbGljZSgpO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVPcHRpb24oYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLmxlbmd0aCA+IDEgJiYgYXJnWzBdID09PSAnLSc7XG4gICAgfVxuXG4gICAgLy8gcGFyc2Ugb3B0aW9uc1xuICAgIGxldCBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG4gICAgd2hpbGUgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG5cbiAgICAgIC8vIGxpdGVyYWxcbiAgICAgIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgICAgaWYgKGRlc3QgPT09IHVua25vd24pIGRlc3QucHVzaChhcmcpO1xuICAgICAgICBkZXN0LnB1c2goLi4uYXJncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlVmFyaWFkaWNPcHRpb24gJiYgIW1heWJlT3B0aW9uKGFyZykpIHtcbiAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHthY3RpdmVWYXJpYWRpY09wdGlvbi5uYW1lKCl9YCwgYXJnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmIChtYXliZU9wdGlvbihhcmcpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnKTtcbiAgICAgICAgLy8gcmVjb2duaXNlZCBvcHRpb24sIGNhbGwgbGlzdGVuZXIgdG8gYXNzaWduIHZhbHVlIHdpdGggcG9zc2libGUgY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHRoaXMub3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gaGlzdG9yaWNhbCBiZWhhdmlvdXIgaXMgb3B0aW9uYWwgdmFsdWUgaXMgZm9sbG93aW5nIGFyZyB1bmxlc3MgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmICFtYXliZU9wdGlvbihhcmdzWzBdKSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gZmxhZ1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG9wdGlvbi52YXJpYWRpYyA/IG9wdGlvbiA6IG51bGw7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3IgY29tYm8gb3B0aW9ucyBmb2xsb3dpbmcgc2luZ2xlIGRhc2gsIGVhdCBmaXJzdCBvbmUgaWYga25vd24uXG4gICAgICBpZiAoYXJnLmxlbmd0aCA+IDIgJiYgYXJnWzBdID09PSAnLScgJiYgYXJnWzFdICE9PSAnLScpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihgLSR7YXJnWzFdfWApO1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAob3B0aW9uLm9wdGlvbmFsICYmIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiB3aXRoIHZhbHVlIGZvbGxvd2luZyBpbiBzYW1lIGFyZ3VtZW50XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKDIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBvcHRpb24sIGVtaXQgYW5kIHB1dCBiYWNrIHJlbWFpbmRlciBvZiBhcmcgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgICAgYXJncy51bnNoaWZ0KGAtJHthcmcuc2xpY2UoMil9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvb2sgZm9yIGtub3duIGxvbmcgZmxhZyB3aXRoIHZhbHVlLCBsaWtlIC0tZm9vPWJhclxuICAgICAgaWYgKC9eLS1bXj1dKz0vLnRlc3QoYXJnKSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGFyZy5pbmRleE9mKCc9Jyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgICAgIGlmIChvcHRpb24gJiYgKG9wdGlvbi5yZXF1aXJlZCB8fCBvcHRpb24ub3B0aW9uYWwpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIGFyZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBOb3QgYSByZWNvZ25pc2VkIG9wdGlvbiBieSB0aGlzIGNvbW1hbmQuXG4gICAgICAvLyBNaWdodCBiZSBhIGNvbW1hbmQtYXJndW1lbnQsIG9yIHN1YmNvbW1hbmQgb3B0aW9uLCBvciB1bmtub3duIG9wdGlvbiwgb3IgaGVscCBjb21tYW5kIG9yIG9wdGlvbi5cblxuICAgICAgLy8gQW4gdW5rbm93biBvcHRpb24gbWVhbnMgZnVydGhlciBhcmd1bWVudHMgYWxzbyBjbGFzc2lmaWVkIGFzIHVua25vd24gc28gY2FuIGJlIHJlcHJvY2Vzc2VkIGJ5IHN1YmNvbW1hbmRzLlxuICAgICAgaWYgKG1heWJlT3B0aW9uKGFyZykpIHtcbiAgICAgICAgZGVzdCA9IHVua25vd247XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzaW5nIHBvc2l0aW9uYWxPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3VyIG9wdGlvbnMgYXQgc3ViY29tbWFuZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zIHx8IHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykgJiZcbiAgICAgICAgb3BlcmFuZHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHVua25vd24ubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKGFyZykpIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZyk7XG4gICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkgdW5rbm93bi5wdXNoKC4uLmFyZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgICAgICBhcmcgPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2goYXJnKTtcbiAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSBvcGVyYW5kcy5wdXNoKC4uLmFyZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgICAgIHVua25vd24ucHVzaChhcmcpO1xuICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHVua25vd24ucHVzaCguLi5hcmdzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwYXNzVGhyb3VnaE9wdGlvbnMsIHN0b3AgcHJvY2Vzc2luZyBvcHRpb25zIGF0IGZpcnN0IGNvbW1hbmQtYXJndW1lbnQuXG4gICAgICBpZiAodGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zKSB7XG4gICAgICAgIGRlc3QucHVzaChhcmcpO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSBkZXN0LnB1c2goLi4uYXJncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgYXJnXG4gICAgICBkZXN0LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVyYW5kcywgdW5rbm93biB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBsb2NhbCBvcHRpb24gdmFsdWVzIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3B0cygpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvdXIgc28gYmFja3dhcmRzIGNvbXBhdGlibGUgd2hlbiBzdGlsbCB1c2luZyBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgIGNvbnN0IGxlbiA9IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5vcHRpb25zW2ldLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgIGtleSA9PT0gdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPyB0aGlzLl92ZXJzaW9uIDogdGhpc1trZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBtZXJnZWQgbG9jYWwgYW5kIGdsb2JhbCBvcHRpb24gdmFsdWVzIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3B0c1dpdGhHbG9iYWxzKCkge1xuICAgIC8vIGdsb2JhbHMgb3ZlcndyaXRlIGxvY2Fsc1xuICAgIHJldHVybiB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkucmVkdWNlKFxuICAgICAgKGNvbWJpbmVkT3B0aW9ucywgY21kKSA9PiBPYmplY3QuYXNzaWduKGNvbWJpbmVkT3B0aW9ucywgY21kLm9wdHMoKSksXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCAob3IgY2FsbCBleGl0T3ZlcnJpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2Vycm9yT3B0aW9uc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtlcnJvck9wdGlvbnMuY29kZV0gLSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Vycm9yT3B0aW9ucy5leGl0Q29kZV0gLSB1c2VkIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqL1xuICBlcnJvcihtZXNzYWdlLCBlcnJvck9wdGlvbnMpIHtcbiAgICAvLyBvdXRwdXQgaGFuZGxpbmdcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLm91dHB1dEVycm9yKFxuICAgICAgYCR7bWVzc2FnZX1cXG5gLFxuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycixcbiAgICApO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycihgJHt0aGlzLl9zaG93SGVscEFmdGVyRXJyb3J9XFxuYCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IpIHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gZXhpdCBoYW5kbGluZ1xuICAgIGNvbnN0IGNvbmZpZyA9IGVycm9yT3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBleGl0Q29kZSA9IGNvbmZpZy5leGl0Q29kZSB8fCAxO1xuICAgIGNvbnN0IGNvZGUgPSBjb25maWcuY29kZSB8fCAnY29tbWFuZGVyLmVycm9yJztcbiAgICB0aGlzLl9leGl0KGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbnkgb3B0aW9uIHJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBpZiBvcHRpb24gZG9lc1xuICAgKiBub3QgaGF2ZSBhIHZhbHVlIGZyb20gY2xpIG9yIGNsaWVudCBjb2RlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlT3B0aW9uc0VudigpIHtcbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmVudlZhciAmJiBvcHRpb24uZW52VmFyIGluIHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICAgIC8vIFByaW9yaXR5IGNoZWNrLiBEbyBub3Qgb3ZlcndyaXRlIGNsaSBvciBvcHRpb25zIGZyb20gdW5rbm93biBzb3VyY2UgKGNsaWVudC1jb2RlKS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgWydkZWZhdWx0JywgJ2NvbmZpZycsICdlbnYnXS5pbmNsdWRlcyhcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQgfHwgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAvLyBvcHRpb24gY2FuIHRha2UgYSB2YWx1ZVxuICAgICAgICAgICAgLy8ga2VlcCB2ZXJ5IHNpbXBsZSwgb3B0aW9uYWwgYWx3YXlzIHRha2VzIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbkVudjoke29wdGlvbi5uYW1lKCl9YCwgcHJvY2Vzcy5lbnZbb3B0aW9uLmVudlZhcl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuXG4gICAgICAgICAgICAvLyBrZWVwIHZlcnkgc2ltcGxlLCBvbmx5IGNhcmUgdGhhdCBlbnZWYXIgZGVmaW5lZCBhbmQgbm90IHRoZSB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb25FbnY6JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFueSBpbXBsaWVkIG9wdGlvbiB2YWx1ZXMsIGlmIG9wdGlvbiBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdCB2YWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnNJbXBsaWVkKCkge1xuICAgIGNvbnN0IGR1YWxIZWxwZXIgPSBuZXcgRHVhbE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCBoYXNDdXN0b21PcHRpb25WYWx1ZSA9IChvcHRpb25LZXkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICFbJ2RlZmF1bHQnLCAnaW1wbGllZCddLmluY2x1ZGVzKHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSlcbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgb3B0aW9uLmltcGxpZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGhhc0N1c3RvbU9wdGlvblZhbHVlKG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpICYmXG4gICAgICAgICAgZHVhbEhlbHBlci52YWx1ZUZyb21PcHRpb24oXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpLFxuICAgICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbi5pbXBsaWVkKVxuICAgICAgICAgIC5maWx0ZXIoKGltcGxpZWRLZXkpID0+ICFoYXNDdXN0b21PcHRpb25WYWx1ZShpbXBsaWVkS2V5KSlcbiAgICAgICAgICAuZm9yRWFjaCgoaW1wbGllZEtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UoXG4gICAgICAgICAgICAgIGltcGxpZWRLZXksXG4gICAgICAgICAgICAgIG9wdGlvbi5pbXBsaWVkW2ltcGxpZWRLZXldLFxuICAgICAgICAgICAgICAnaW1wbGllZCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJndW1lbnQgYG5hbWVgIGlzIG1pc3NpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG1pc3NpbmdBcmd1bWVudChuYW1lKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCAnJHtuYW1lfSdgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm1pc3NpbmdBcmd1bWVudCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgaXMgbWlzc2luZyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBvcHRpb25NaXNzaW5nQXJndW1lbnQob3B0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIGFyZ3VtZW50IG1pc3NpbmdgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm9wdGlvbk1pc3NpbmdBcmd1bWVudCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLCBhbmQgaXMgYSBtYW5kYXRvcnkgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZShvcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiByZXF1aXJlZCBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgbm90IHNwZWNpZmllZGA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIubWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBjb25mbGljdHMgd2l0aCBhbm90aGVyIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcGFyYW0ge09wdGlvbn0gY29uZmxpY3RpbmdPcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25mbGljdGluZ09wdGlvbihvcHRpb24sIGNvbmZsaWN0aW5nT3B0aW9uKSB7XG4gICAgLy8gVGhlIGNhbGxpbmcgY29kZSBkb2VzIG5vdCBrbm93IHdoZXRoZXIgYSBuZWdhdGVkIG9wdGlvbiBpcyB0aGUgc291cmNlIG9mIHRoZVxuICAgIC8vIHZhbHVlLCBzbyBkbyBzb21lIHdvcmsgdG8gdGFrZSBhbiBlZHVjYXRlZCBndWVzcy5cbiAgICBjb25zdCBmaW5kQmVzdE9wdGlvbkZyb21WYWx1ZSA9IChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KTtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+IHRhcmdldC5uZWdhdGUgJiYgb3B0aW9uS2V5ID09PSB0YXJnZXQuYXR0cmlidXRlTmFtZSgpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBvc2l0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+ICF0YXJnZXQubmVnYXRlICYmIG9wdGlvbktleSA9PT0gdGFyZ2V0LmF0dHJpYnV0ZU5hbWUoKSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIG5lZ2F0aXZlT3B0aW9uICYmXG4gICAgICAgICgobmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnID09PSB1bmRlZmluZWQgJiYgb3B0aW9uVmFsdWUgPT09IGZhbHNlKSB8fFxuICAgICAgICAgIChuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPT09IG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT3B0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvc2l0aXZlT3B0aW9uIHx8IG9wdGlvbjtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYmVzdE9wdGlvbiA9IGZpbmRCZXN0T3B0aW9uRnJvbVZhbHVlKG9wdGlvbik7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBiZXN0T3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KTtcbiAgICAgIGlmIChzb3VyY2UgPT09ICdlbnYnKSB7XG4gICAgICAgIHJldHVybiBgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7YmVzdE9wdGlvbi5lbnZWYXJ9J2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYG9wdGlvbiAnJHtiZXN0T3B0aW9uLmZsYWdzfSdgO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiAke2dldEVycm9yTWVzc2FnZShvcHRpb24pfSBjYW5ub3QgYmUgdXNlZCB3aXRoICR7Z2V0RXJyb3JNZXNzYWdlKGNvbmZsaWN0aW5nT3B0aW9uKX1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLmNvbmZsaWN0aW5nT3B0aW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmtub3duIG9wdGlvbiBgZmxhZ2AuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIHVua25vd25PcHRpb24oZmxhZykge1xuICAgIGlmICh0aGlzLl9hbGxvd1Vua25vd25PcHRpb24pIHJldHVybjtcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICcnO1xuXG4gICAgaWYgKGZsYWcuc3RhcnRzV2l0aCgnLS0nKSAmJiB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IpIHtcbiAgICAgIC8vIExvb3BpbmcgdG8gcGljayB1cCB0aGUgZ2xvYmFsIG9wdGlvbnMgdG9vXG4gICAgICBsZXQgY2FuZGlkYXRlRmxhZ3MgPSBbXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgbGV0IGNvbW1hbmQgPSB0aGlzO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtb3JlRmxhZ3MgPSBjb21tYW5kXG4gICAgICAgICAgLmNyZWF0ZUhlbHAoKVxuICAgICAgICAgIC52aXNpYmxlT3B0aW9ucyhjb21tYW5kKVxuICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxvbmcpXG4gICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubG9uZyk7XG4gICAgICAgIGNhbmRpZGF0ZUZsYWdzID0gY2FuZGlkYXRlRmxhZ3MuY29uY2F0KG1vcmVGbGFncyk7XG4gICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKGNvbW1hbmQgJiYgIWNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zKTtcbiAgICAgIHN1Z2dlc3Rpb24gPSBzdWdnZXN0U2ltaWxhcihmbGFnLCBjYW5kaWRhdGVGbGFncyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdW5rbm93biBvcHRpb24gJyR7ZmxhZ30nJHtzdWdnZXN0aW9ufWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIudW5rbm93bk9wdGlvbicgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhjZXNzIGFyZ3VtZW50cywgbW9yZSB0aGFuIGV4cGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZWNlaXZlZEFyZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4Y2Vzc0FyZ3VtZW50cyhyZWNlaXZlZEFyZ3MpIHtcbiAgICBpZiAodGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMpIHJldHVybjtcblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICBjb25zdCBzID0gZXhwZWN0ZWQgPT09IDEgPyAnJyA6ICdzJztcbiAgICBjb25zdCBmb3JTdWJjb21tYW5kID0gdGhpcy5wYXJlbnQgPyBgIGZvciAnJHt0aGlzLm5hbWUoKX0nYCA6ICcnO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHRvbyBtYW55IGFyZ3VtZW50cyR7Zm9yU3ViY29tbWFuZH0uIEV4cGVjdGVkICR7ZXhwZWN0ZWR9IGFyZ3VtZW50JHtzfSBidXQgZ290ICR7cmVjZWl2ZWRBcmdzLmxlbmd0aH0uYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5leGNlc3NBcmd1bWVudHMnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVua25vd24gY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdW5rbm93bkNvbW1hbmQoKSB7XG4gICAgY29uc3QgdW5rbm93bk5hbWUgPSB0aGlzLmFyZ3NbMF07XG4gICAgbGV0IHN1Z2dlc3Rpb24gPSAnJztcblxuICAgIGlmICh0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IpIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZU5hbWVzID0gW107XG4gICAgICB0aGlzLmNyZWF0ZUhlbHAoKVxuICAgICAgICAudmlzaWJsZUNvbW1hbmRzKHRoaXMpXG4gICAgICAgIC5mb3JFYWNoKChjb21tYW5kKSA9PiB7XG4gICAgICAgICAgY2FuZGlkYXRlTmFtZXMucHVzaChjb21tYW5kLm5hbWUoKSk7XG4gICAgICAgICAgLy8ganVzdCB2aXNpYmxlIGFsaWFzXG4gICAgICAgICAgaWYgKGNvbW1hbmQuYWxpYXMoKSkgY2FuZGlkYXRlTmFtZXMucHVzaChjb21tYW5kLmFsaWFzKCkpO1xuICAgICAgICB9KTtcbiAgICAgIHN1Z2dlc3Rpb24gPSBzdWdnZXN0U2ltaWxhcih1bmtub3duTmFtZSwgY2FuZGlkYXRlTmFtZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHVua25vd24gY29tbWFuZCAnJHt1bmtub3duTmFtZX0nJHtzdWdnZXN0aW9ufWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIudW5rbm93bkNvbW1hbmQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIHByb2dyYW0gdmVyc2lvbi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYXV0by1yZWdpc3RlcnMgdGhlIFwiLVYsIC0tdmVyc2lvblwiIG9wdGlvbiB3aGljaCB3aWxsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlci5cbiAgICpcbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHN1cHBseSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4geyh0aGlzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciB2ZXJzaW9uIHN0cmluZyBpZiBubyBhcmd1bWVudHNcbiAgICovXG5cbiAgdmVyc2lvbihzdHIsIGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgdGhpcy5fdmVyc2lvbiA9IHN0cjtcbiAgICBmbGFncyA9IGZsYWdzIHx8ICctViwgLS12ZXJzaW9uJztcbiAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICdvdXRwdXQgdGhlIHZlcnNpb24gbnVtYmVyJztcbiAgICBjb25zdCB2ZXJzaW9uT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA9IHZlcnNpb25PcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyT3B0aW9uKHZlcnNpb25PcHRpb24pO1xuXG4gICAgdGhpcy5vbignb3B0aW9uOicgKyB2ZXJzaW9uT3B0aW9uLm5hbWUoKSwgKCkgPT4ge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZU91dChgJHtzdHJ9XFxuYCk7XG4gICAgICB0aGlzLl9leGl0KDAsICdjb21tYW5kZXIudmVyc2lvbicsIHN0cik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc0Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cbiAgZGVzY3JpcHRpb24oc3RyLCBhcmdzRGVzY3JpcHRpb24pIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQgJiYgYXJnc0Rlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSBzdHI7XG4gICAgaWYgKGFyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fYXJnc0Rlc2NyaXB0aW9uID0gYXJnc0Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN1bW1hcnkuIFVzZWQgd2hlbiBsaXN0ZWQgYXMgc3ViY29tbWFuZCBvZiBwYXJlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cbiAgc3VtbWFyeShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9zdW1tYXJ5O1xuICAgIHRoaXMuX3N1bW1hcnkgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGFsaWFzIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIG1vcmUgdGhhbiBvbmNlIHRvIGFkZCBtdWx0aXBsZSBhbGlhc2VzLiBPbmx5IHRoZSBmaXJzdCBhbGlhcyBpcyBzaG93biBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc11cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgYWxpYXMoYWxpYXMpIHtcbiAgICBpZiAoYWxpYXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2FsaWFzZXNbMF07IC8vIGp1c3QgcmV0dXJuIGZpcnN0LCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgIC8qKiBAdHlwZSB7Q29tbWFuZH0gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBsZXQgY29tbWFuZCA9IHRoaXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggIT09IDAgJiZcbiAgICAgIHRoaXMuY29tbWFuZHNbdGhpcy5jb21tYW5kcy5sZW5ndGggLSAxXS5fZXhlY3V0YWJsZUhhbmRsZXJcbiAgICApIHtcbiAgICAgIC8vIGFzc3VtZSBhZGRpbmcgYWxpYXMgZm9yIGxhc3QgYWRkZWQgZXhlY3V0YWJsZSBzdWJjb21tYW5kLCByYXRoZXIgdGhhbiB0aGlzXG4gICAgICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGlmIChhbGlhcyA9PT0gY29tbWFuZC5fbmFtZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW1hbmQgYWxpYXMgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgaXRzIG5hbWVcIik7XG4gICAgY29uc3QgbWF0Y2hpbmdDb21tYW5kID0gdGhpcy5wYXJlbnQ/Ll9maW5kQ29tbWFuZChhbGlhcyk7XG4gICAgaWYgKG1hdGNoaW5nQ29tbWFuZCkge1xuICAgICAgLy8gYy5mLiBfcmVnaXN0ZXJDb21tYW5kXG4gICAgICBjb25zdCBleGlzdGluZ0NtZCA9IFttYXRjaGluZ0NvbW1hbmQubmFtZSgpXVxuICAgICAgICAuY29uY2F0KG1hdGNoaW5nQ29tbWFuZC5hbGlhc2VzKCkpXG4gICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGFsaWFzICcke2FsaWFzfScgdG8gY29tbWFuZCAnJHt0aGlzLm5hbWUoKX0nIGFzIGFscmVhZHkgaGF2ZSBjb21tYW5kICcke2V4aXN0aW5nQ21kfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb21tYW5kLl9hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGlhc2VzIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogT25seSB0aGUgZmlyc3QgYWxpYXMgaXMgc2hvd24gaW4gdGhlIGF1dG8tZ2VuZXJhdGVkIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthbGlhc2VzXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nW118Q29tbWFuZCl9XG4gICAqL1xuXG4gIGFsaWFzZXMoYWxpYXNlcykge1xuICAgIC8vIEdldHRlciBmb3IgdGhlIGFycmF5IG9mIGFsaWFzZXMgaXMgdGhlIG1haW4gcmVhc29uIGZvciBoYXZpbmcgYWxpYXNlcygpIGluIGFkZGl0aW9uIHRvIGFsaWFzKCkuXG4gICAgaWYgKGFsaWFzZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2FsaWFzZXM7XG5cbiAgICBhbGlhc2VzLmZvckVhY2goKGFsaWFzKSA9PiB0aGlzLmFsaWFzKGFsaWFzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IC8gZ2V0IHRoZSBjb21tYW5kIHVzYWdlIGBzdHJgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgdXNhZ2Uoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fdXNhZ2UpIHJldHVybiB0aGlzLl91c2FnZTtcblxuICAgICAgY29uc3QgYXJncyA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5tYXAoKGFyZykgPT4ge1xuICAgICAgICByZXR1cm4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFtdXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxlbmd0aCB8fCB0aGlzLl9oZWxwT3B0aW9uICE9PSBudWxsID8gJ1tvcHRpb25zXScgOiBbXSxcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCA/ICdbY29tbWFuZF0nIDogW10sXG4gICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCA/IGFyZ3MgOiBbXSxcbiAgICAgICAgKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cblxuICAgIHRoaXMuX3VzYWdlID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICBuYW1lKHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgdGhpcy5fbmFtZSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZnJvbSBzY3JpcHQgZmlsZW5hbWUsIHN1Y2ggYXMgcHJvY2Vzcy5hcmd2WzFdLFxuICAgKiBvciByZXF1aXJlLm1haW4uZmlsZW5hbWUsIG9yIF9fZmlsZW5hbWUuXG4gICAqXG4gICAqIChVc2VkIGludGVybmFsbHkgYW5kIHB1YmxpYyBhbHRob3VnaCBub3QgZG9jdW1lbnRlZCBpbiBSRUFETUUuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLm5hbWVGcm9tRmlsZW5hbWUocmVxdWlyZS5tYWluLmZpbGVuYW1lKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9XG4gICAqL1xuXG4gIG5hbWVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICB0aGlzLl9uYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgcGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBkaXJlY3RvcnkgZm9yIHNlYXJjaGluZyBmb3IgZXhlY3V0YWJsZSBzdWJjb21tYW5kcyBvZiB0aGlzIGNvbW1hbmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uZXhlY3V0YWJsZURpcihfX2Rpcm5hbWUpO1xuICAgKiAvLyBvclxuICAgKiBwcm9ncmFtLmV4ZWN1dGFibGVEaXIoJ3N1YmNvbW1hbmRzJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF1cbiAgICogQHJldHVybiB7KHN0cmluZ3xudWxsfENvbW1hbmQpfVxuICAgKi9cblxuICBleGVjdXRhYmxlRGlyKHBhdGgpIHtcbiAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZXhlY3V0YWJsZURpcjtcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gcGF0aDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gcHJvZ3JhbSBoZWxwIGRvY3VtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9fSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JhcCBmb3Igc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgaGVscEluZm9ybWF0aW9uKGNvbnRleHRPcHRpb25zKSB7XG4gICAgY29uc3QgaGVscGVyID0gdGhpcy5jcmVhdGVIZWxwKCk7XG4gICAgaWYgKGhlbHBlci5oZWxwV2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaGVscGVyLmhlbHBXaWR0aCA9XG4gICAgICAgIGNvbnRleHRPcHRpb25zICYmIGNvbnRleHRPcHRpb25zLmVycm9yXG4gICAgICAgICAgPyB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldEVyckhlbHBXaWR0aCgpXG4gICAgICAgICAgOiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhlbHBXaWR0aCgpO1xuICAgIH1cbiAgICByZXR1cm4gaGVscGVyLmZvcm1hdEhlbHAodGhpcywgaGVscGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0SGVscENvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb250ZXh0T3B0aW9ucyA9IGNvbnRleHRPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGNvbnRleHQgPSB7IGVycm9yOiAhIWNvbnRleHRPcHRpb25zLmVycm9yIH07XG4gICAgbGV0IHdyaXRlO1xuICAgIGlmIChjb250ZXh0LmVycm9yKSB7XG4gICAgICB3cml0ZSA9IChhcmcpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoYXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGUgPSAoYXJnKSA9PiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KGFyZyk7XG4gICAgfVxuICAgIGNvbnRleHQud3JpdGUgPSBjb250ZXh0T3B0aW9ucy53cml0ZSB8fCB3cml0ZTtcbiAgICBjb250ZXh0LmNvbW1hbmQgPSB0aGlzO1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbW1hbmQuXG4gICAqXG4gICAqIE91dHB1dHMgYnVpbHQtaW4gaGVscCwgYW5kIGN1c3RvbSB0ZXh0IGFkZGVkIHVzaW5nIGAuYWRkSGVscFRleHQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9IHwgRnVuY3Rpb259IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgb3V0cHV0SGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIGxldCBkZXByZWNhdGVkQ2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGVwcmVjYXRlZENhbGxiYWNrID0gY29udGV4dE9wdGlvbnM7XG4gICAgICBjb250ZXh0T3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2dldEhlbHBDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IGNvbW1hbmQuZW1pdCgnYmVmb3JlQWxsSGVscCcsIGNvbnRleHQpKTtcbiAgICB0aGlzLmVtaXQoJ2JlZm9yZUhlbHAnLCBjb250ZXh0KTtcblxuICAgIGxldCBoZWxwSW5mb3JtYXRpb24gPSB0aGlzLmhlbHBJbmZvcm1hdGlvbihjb250ZXh0KTtcbiAgICBpZiAoZGVwcmVjYXRlZENhbGxiYWNrKSB7XG4gICAgICBoZWxwSW5mb3JtYXRpb24gPSBkZXByZWNhdGVkQ2FsbGJhY2soaGVscEluZm9ybWF0aW9uKTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGhlbHBJbmZvcm1hdGlvbiAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgIUJ1ZmZlci5pc0J1ZmZlcihoZWxwSW5mb3JtYXRpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRwdXRIZWxwIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIGEgQnVmZmVyJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnRleHQud3JpdGUoaGVscEluZm9ybWF0aW9uKTtcblxuICAgIGlmICh0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcpIHtcbiAgICAgIHRoaXMuZW1pdCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkubG9uZyk7IC8vIGRlcHJlY2F0ZWRcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdhZnRlckhlbHAnLCBjb250ZXh0KTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY29tbWFuZCkgPT5cbiAgICAgIGNvbW1hbmQuZW1pdCgnYWZ0ZXJBbGxIZWxwJywgY29udGV4dCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHBhc3MgaW4gZmxhZ3MgYW5kIGEgZGVzY3JpcHRpb24gdG8gY3VzdG9taXNlIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICogUGFzcyBpbiBmYWxzZSB0byBkaXNhYmxlIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5oZWxwT3B0aW9uKCctPywgLS1oZWxwJyAnc2hvdyBoZWxwJyk7IC8vIGN1c3RvbWlzZVxuICAgKiBwcm9ncmFtLmhlbHBPcHRpb24oZmFsc2UpOyAvLyBkaXNhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IGJvb2xlYW4pfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICAvLyBTdXBwb3J0IGRpc2FibGluZyBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChmbGFncykge1xuICAgICAgICB0aGlzLl9oZWxwT3B0aW9uID0gdGhpcy5faGVscE9wdGlvbiA/PyB1bmRlZmluZWQ7IC8vIHByZXNlcnZlIGV4aXN0aW5nIG9wdGlvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faGVscE9wdGlvbiA9IG51bGw7IC8vIGRpc2FibGVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbWlzZSBmbGFncyBhbmQgZGVzY3JpcHRpb24uXG4gICAgZmxhZ3MgPSBmbGFncyA/PyAnLWgsIC0taGVscCc7XG4gICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJztcbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgaGFzIGJlZW4gZGlzYWJsZWQgd2l0aCAuaGVscE9wdGlvbihmYWxzZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHsoT3B0aW9uIHwgbnVsbCl9IHRoZSBoZWxwIG9wdGlvblxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBPcHRpb24oKSB7XG4gICAgLy8gTGF6eSBjcmVhdGUgaGVscCBvcHRpb24gb24gZGVtYW5kLlxuICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGVscE9wdGlvbih1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oZWxwT3B0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1cHBseSB5b3VyIG93biBvcHRpb24gdG8gdXNlIGZvciB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGVscE9wdGlvbigpIHRvIGN1c3RvbWlzZSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5faGVscE9wdGlvbiA9IG9wdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgaGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMub3V0cHV0SGVscChjb250ZXh0T3B0aW9ucyk7XG4gICAgbGV0IGV4aXRDb2RlID0gcHJvY2Vzcy5leGl0Q29kZSB8fCAwO1xuICAgIGlmIChcbiAgICAgIGV4aXRDb2RlID09PSAwICYmXG4gICAgICBjb250ZXh0T3B0aW9ucyAmJlxuICAgICAgdHlwZW9mIGNvbnRleHRPcHRpb25zICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICBjb250ZXh0T3B0aW9ucy5lcnJvclxuICAgICkge1xuICAgICAgZXhpdENvZGUgPSAxO1xuICAgIH1cbiAgICAvLyBtZXNzYWdlOiBkbyBub3QgaGF2ZSBhbGwgZGlzcGxheWVkIHRleHQgYXZhaWxhYmxlIHNvIG9ubHkgcGFzc2luZyBwbGFjZWhvbGRlci5cbiAgICB0aGlzLl9leGl0KGV4aXRDb2RlLCAnY29tbWFuZGVyLmhlbHAnLCAnKG91dHB1dEhlbHApJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFkZGl0aW9uYWwgdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgYnVpbHQtaW4gaGVscC5cbiAgICpcbiAgICogUG9zaXRpb24gaXMgJ2JlZm9yZScgb3IgJ2FmdGVyJyB0byBhZmZlY3QganVzdCB0aGlzIGNvbW1hbmQsXG4gICAqIGFuZCAnYmVmb3JlQWxsJyBvciAnYWZ0ZXJBbGwnIHRvIGFmZmVjdCB0aGlzIGNvbW1hbmQgYW5kIGFsbCBpdHMgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvbiAtIGJlZm9yZSBvciBhZnRlciBidWlsdC1pbiBoZWxwXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IEZ1bmN0aW9uKX0gdGV4dCAtIHN0cmluZyB0byBhZGQsIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkSGVscFRleHQocG9zaXRpb24sIHRleHQpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydiZWZvcmVBbGwnLCAnYmVmb3JlJywgJ2FmdGVyJywgJ2FmdGVyQWxsJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBwb3NpdGlvbiB0byBhZGRIZWxwVGV4dC5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuICAgIGNvbnN0IGhlbHBFdmVudCA9IGAke3Bvc2l0aW9ufUhlbHBgO1xuICAgIHRoaXMub24oaGVscEV2ZW50LCAoY29udGV4dCkgPT4ge1xuICAgICAgbGV0IGhlbHBTdHI7XG4gICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQoeyBlcnJvcjogY29udGV4dC5lcnJvciwgY29tbWFuZDogY29udGV4dC5jb21tYW5kIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQ7XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmUgZmFsc3kgdmFsdWUgd2hlbiBub3RoaW5nIHRvIG91dHB1dC5cbiAgICAgIGlmIChoZWxwU3RyKSB7XG4gICAgICAgIGNvbnRleHQud3JpdGUoYCR7aGVscFN0cn1cXG5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBpZiBoZWxwIGZsYWdzIHNwZWNpZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIC0gYXJyYXkgb2Ygb3B0aW9ucyB0byBzZWFyY2ggZm9yIGhlbHAgZmxhZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX291dHB1dEhlbHBJZlJlcXVlc3RlZChhcmdzKSB7XG4gICAgY29uc3QgaGVscE9wdGlvbiA9IHRoaXMuX2dldEhlbHBPcHRpb24oKTtcbiAgICBjb25zdCBoZWxwUmVxdWVzdGVkID0gaGVscE9wdGlvbiAmJiBhcmdzLmZpbmQoKGFyZykgPT4gaGVscE9wdGlvbi5pcyhhcmcpKTtcbiAgICBpZiAoaGVscFJlcXVlc3RlZCkge1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKCk7XG4gICAgICAvLyAoRG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuKVxuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLmhlbHBEaXNwbGF5ZWQnLCAnKG91dHB1dEhlbHApJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2NhbiBhcmd1bWVudHMgYW5kIGluY3JlbWVudCBwb3J0IG51bWJlciBmb3IgaW5zcGVjdCBjYWxscyAodG8gYXZvaWQgY29uZmxpY3RzIHdoZW4gc3Bhd25pbmcgbmV3IGNvbW1hbmQpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBhcnJheSBvZiBhcmd1bWVudHMgZnJvbSBub2RlLmV4ZWNBcmd2XG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KGFyZ3MpIHtcbiAgLy8gVGVzdGluZyBmb3IgdGhlc2Ugb3B0aW9uczpcbiAgLy8gIC0taW5zcGVjdFs9W2hvc3Q6XXBvcnRdXG4gIC8vICAtLWluc3BlY3QtYnJrWz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1wb3J0PVtob3N0Ol1wb3J0XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aCgnLS1pbnNwZWN0JykpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGxldCBkZWJ1Z09wdGlvbjtcbiAgICBsZXQgZGVidWdIb3N0ID0gJzEyNy4wLjAuMSc7XG4gICAgbGV0IGRlYnVnUG9ydCA9ICc5MjI5JztcbiAgICBsZXQgbWF0Y2g7XG4gICAgaWYgKChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJyayk/KSQvKSkgIT09IG51bGwpIHtcbiAgICAgIC8vIGUuZy4gLS1pbnNwZWN0XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKSQvKSkgIT09IG51bGxcbiAgICApIHtcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBpZiAoL15cXGQrJC8udGVzdChtYXRjaFszXSkpIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9MTIzNFxuICAgICAgICBkZWJ1Z1BvcnQgPSBtYXRjaFszXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PWxvY2FsaG9zdFxuICAgICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrfC1wb3J0KT8pPShbXjpdKyk6KFxcZCspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0OjEyMzRcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzRdO1xuICAgIH1cblxuICAgIGlmIChkZWJ1Z09wdGlvbiAmJiBkZWJ1Z1BvcnQgIT09ICcwJykge1xuICAgICAgcmV0dXJuIGAke2RlYnVnT3B0aW9ufT0ke2RlYnVnSG9zdH06JHtwYXJzZUludChkZWJ1Z1BvcnQpICsgMX1gO1xuICAgIH1cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcbn1cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbiIsCiAgICAiY29uc3QgeyBBcmd1bWVudCB9ID0gcmVxdWlyZSgnLi9saWIvYXJndW1lbnQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZCB9ID0gcmVxdWlyZSgnLi9saWIvY29tbWFuZC5qcycpO1xuY29uc3QgeyBDb21tYW5kZXJFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vbGliL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAgfSA9IHJlcXVpcmUoJy4vbGliL2hlbHAuanMnKTtcbmNvbnN0IHsgT3B0aW9uIH0gPSByZXF1aXJlKCcuL2xpYi9vcHRpb24uanMnKTtcblxuZXhwb3J0cy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuZXhwb3J0cy5jcmVhdGVDb21tYW5kID0gKG5hbWUpID0+IG5ldyBDb21tYW5kKG5hbWUpO1xuZXhwb3J0cy5jcmVhdGVPcHRpb24gPSAoZmxhZ3MsIGRlc2NyaXB0aW9uKSA9PiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG5leHBvcnRzLmNyZWF0ZUFyZ3VtZW50ID0gKG5hbWUsIGRlc2NyaXB0aW9uKSA9PiBuZXcgQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuXG4vKipcbiAqIEV4cG9zZSBjbGFzc2VzXG4gKi9cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0cy5Bcmd1bWVudCA9IEFyZ3VtZW50O1xuZXhwb3J0cy5IZWxwID0gSGVscDtcblxuZXhwb3J0cy5Db21tYW5kZXJFcnJvciA9IENvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuZXhwb3J0cy5JbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yOyAvLyBEZXByZWNhdGVkXG4iLAogICAgImNvbnN0IGNvbW1hbmRlciA9IHJlcXVpcmUoJ2NvbW1hbmRlcicpO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgZGlmZmVyZW50IGdsb2JhbCBwcm9ncmFtIHRoYW4gY29tbWFuZGVyLFxuLy8gYW5kIGRvbid0IGFsc28gcmV0dXJuIGl0IGFzIGRlZmF1bHQgZXhwb3J0LlxuZXhwb3J0cy5wcm9ncmFtID0gbmV3IGNvbW1hbmRlci5Db21tYW5kKCk7XG5cbi8qKlxuICogRXhwb3NlIGNsYXNzZXMuIFRoZSBGb29UIHZlcnNpb25zIGFyZSBqdXN0IHR5cGVzLCBzbyByZXR1cm4gQ29tbWFuZGVyIG9yaWdpbmFsIGltcGxlbWVudGF0aW9ucyFcbiAqL1xuXG5leHBvcnRzLkFyZ3VtZW50ID0gY29tbWFuZGVyLkFyZ3VtZW50O1xuZXhwb3J0cy5Db21tYW5kID0gY29tbWFuZGVyLkNvbW1hbmQ7XG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gY29tbWFuZGVyLkNvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5IZWxwID0gY29tbWFuZGVyLkhlbHA7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gY29tbWFuZGVyLkludmFsaWRBcmd1bWVudEVycm9yO1xuZXhwb3J0cy5JbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciA9IGNvbW1hbmRlci5JbnZhbGlkQXJndW1lbnRFcnJvcjsgLy8gRGVwcmVjYXRlZFxuZXhwb3J0cy5PcHRpb24gPSBjb21tYW5kZXIuT3B0aW9uO1xuXG4vLyBJbiBDb21tYW5kZXIsIHRoZSBjcmVhdGUgcm91dGluZXMgZW5kIHVwIGJlaW5nIGFsaWFzZXMgZm9yIHRoZSBtYXRjaGluZ1xuLy8gbWV0aG9kcyBvbiB0aGUgZ2xvYmFsIHByb2dyYW0gZHVlIHRvIHRoZSAoZGVwcmVjYXRlZCkgbGVnYWN5IGRlZmF1bHQgZXhwb3J0LlxuLy8gSGVyZSB3ZSByb2xsIG91ciBvd24sIHRoZSB3YXkgQ29tbWFuZGVyIG1pZ2h0IGluIGZ1dHVyZS5cbmV4cG9ydHMuY3JlYXRlQ29tbWFuZCA9IChuYW1lKSA9PiBuZXcgY29tbWFuZGVyLkNvbW1hbmQobmFtZSk7XG5leHBvcnRzLmNyZWF0ZU9wdGlvbiA9IChmbGFncywgZGVzY3JpcHRpb24pID0+XG4gIG5ldyBjb21tYW5kZXIuT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG5leHBvcnRzLmNyZWF0ZUFyZ3VtZW50ID0gKG5hbWUsIGRlc2NyaXB0aW9uKSA9PlxuICBuZXcgY29tbWFuZGVyLkFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiIsCiAgICAiaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvbm9kZSdcbmltcG9ydCB7IGdldFVzZXIgfSBmcm9tICcuLi91dGlscy91c2VyLmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBTRU5UUllfRFNOIH0gZnJvbSAnLi4vY29uc3RhbnRzL2tleXMuanMnXG5pbXBvcnQgeyBnZXRHYXRlVmFsdWVzIH0gZnJvbSAnLi9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgU0VTU0lPTl9JRCB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGdldElzR2l0IH0gZnJvbSAnLi4vdXRpbHMvZ2l0LmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFNlbnRyeSgpOiB2b2lkIHtcbiAgU2VudHJ5LmluaXQoe1xuICAgIGRzbjogU0VOVFJZX0RTTixcbiAgICByZWxlYXNlOiBNQUNSTy5WRVJTSU9OLFxuICAgIGludGVncmF0aW9uczogW1xuICAgICAgbmV3IFNlbnRyeS5JbnRlZ3JhdGlvbnMuSHR0cCh7IHRyYWNpbmc6IHRydWUgfSksXG4gICAgICBuZXcgU2VudHJ5LkludGVncmF0aW9ucy5Nb2R1bGVzKCksXG4gICAgICBuZXcgU2VudHJ5LkludGVncmF0aW9ucy5Db25zb2xlKCksXG4gICAgICBuZXcgU2VudHJ5LkludGVncmF0aW9ucy5GdW5jdGlvblRvU3RyaW5nKCksXG4gICAgICBuZXcgU2VudHJ5LkludGVncmF0aW9ucy5MaW5rZWRFcnJvcnMoKSxcbiAgICBdLFxuICAgIC8vIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcbiAgICB0cmFjZXNTYW1wbGVSYXRlOiAxLjAsIC8vIENhcHR1cmUgMTAwJSBvZiB0cmFuc2FjdGlvbnNcbiAgICAvLyBTZXQgJ3RyYWNlUHJvcGFnYXRpb25UYXJnZXRzJyB0byBjb250cm9sIGZvciB3aGljaCBVUkxzIGRpc3RyaWJ1dGVkIHRyYWNpbmcgc2hvdWxkIGJlIGVuYWJsZWRcbiAgICB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0czogWydsb2NhbGhvc3QnXSxcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFeGNlcHRpb24oZXJyb3I6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBbaXNHaXQsIHVzZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2dldElzR2l0KCksIGdldFVzZXIoKV0pXG4gICAgU2VudHJ5LnNldEV4dHJhcyh7XG4gICAgICBub2RlVmVyc2lvbjogZW52Lm5vZGVWZXJzaW9uLFxuICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgIGN3ZDogZ2V0Q3dkKCksXG4gICAgICBpc0NJOiBlbnYuaXNDSSxcbiAgICAgIGlzR2l0LFxuICAgICAgaXNUZXN0OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnLFxuICAgICAgcGFja2FnZVZlcnNpb246IE1BQ1JPLlZFUlNJT04sXG4gICAgICBzZXNzaW9uSWQ6IFNFU1NJT05fSUQsXG4gICAgICBzdGF0c2lnR2F0ZXM6IGdldEdhdGVWYWx1ZXMoKSxcbiAgICAgIHRlcm1pbmFsOiBlbnYudGVybWluYWwsXG4gICAgICB1c2VyVHlwZTogcHJvY2Vzcy5lbnYuVVNFUl9UWVBFLFxuICAgIH0pXG4gICAgU2VudHJ5LnNldFVzZXIoe1xuICAgICAgaWQ6IHVzZXIudXNlcklELFxuICAgICAgZW1haWw6IHVzZXIuZW1haWwsXG4gICAgfSlcbiAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvcilcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlIGVycm9ycyBnZW5lcmF0ZWQgaW4gZXJyb3IgY2FwdHVyZVxuICB9XG59XG4iLAogICAgImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgcmVzb2x2ZSwgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBjbG9uZURlZXAsIG1lbW9pemUsIHBpY2sgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgeyBHTE9CQUxfQ0xBVURFX0ZJTEUgfSBmcm9tICcuL2Vudi5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4vc3RhdGUuanMnXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHNhZmVQYXJzZUpTT04gfSBmcm9tICcuL2pzb24uanMnXG5pbXBvcnQgeyBjaGVja0dhdGUsIGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IEdBVEVfVVNFX0VYVEVSTkFMX1VQREFURVIgfSBmcm9tICcuLi9jb25zdGFudHMvYmV0YXMuanMnXG5pbXBvcnQgeyBDb25maWdQYXJzZUVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnXG5pbXBvcnQgdHlwZSB7IFRoZW1lTmFtZXMgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgdHlwZSBNY3BTdGRpb1NlcnZlckNvbmZpZyA9IHtcbiAgdHlwZT86ICdzdGRpbycgLy8gT3B0aW9uYWwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIGNvbW1hbmQ6IHN0cmluZ1xuICBhcmdzOiBzdHJpbmdbXVxuICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCB0eXBlIE1jcFNTRVNlcnZlckNvbmZpZyA9IHtcbiAgdHlwZTogJ3NzZSdcbiAgdXJsOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWNwU2VydmVyQ29uZmlnID0gTWNwU3RkaW9TZXJ2ZXJDb25maWcgfCBNY3BTU0VTZXJ2ZXJDb25maWdcblxuZXhwb3J0IHR5cGUgUHJvamVjdENvbmZpZyA9IHtcbiAgYWxsb3dlZFRvb2xzOiBzdHJpbmdbXVxuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGNvbnRleHRGaWxlcz86IHN0cmluZ1tdXG4gIGhpc3Rvcnk6IHN0cmluZ1tdXG4gIGRvbnRDcmF3bERpcmVjdG9yeT86IGJvb2xlYW5cbiAgZW5hYmxlQXJjaGl0ZWN0VG9vbD86IGJvb2xlYW5cbiAgbWNwQ29udGV4dFVyaXM6IHN0cmluZ1tdXG4gIG1jcFNlcnZlcnM/OiBSZWNvcmQ8c3RyaW5nLCBNY3BTZXJ2ZXJDb25maWc+XG4gIGFwcHJvdmVkTWNwcmNTZXJ2ZXJzPzogc3RyaW5nW11cbiAgcmVqZWN0ZWRNY3ByY1NlcnZlcnM/OiBzdHJpbmdbXVxuICBsYXN0QVBJRHVyYXRpb24/OiBudW1iZXJcbiAgbGFzdENvc3Q/OiBudW1iZXJcbiAgbGFzdER1cmF0aW9uPzogbnVtYmVyXG4gIGxhc3RTZXNzaW9uSWQ/OiBzdHJpbmdcbiAgZXhhbXBsZUZpbGVzPzogc3RyaW5nW11cbiAgZXhhbXBsZUZpbGVzR2VuZXJhdGVkQXQ/OiBudW1iZXJcbiAgaGFzVHJ1c3REaWFsb2dBY2NlcHRlZD86IGJvb2xlYW5cbiAgaGFzQ29tcGxldGVkUHJvamVjdE9uYm9hcmRpbmc/OiBib29sZWFuXG59XG5cbmNvbnN0IERFRkFVTFRfUFJPSkVDVF9DT05GSUc6IFByb2plY3RDb25maWcgPSB7XG4gIGFsbG93ZWRUb29sczogW10sXG4gIGNvbnRleHQ6IHt9LFxuICBoaXN0b3J5OiBbXSxcbiAgZG9udENyYXdsRGlyZWN0b3J5OiBmYWxzZSxcbiAgZW5hYmxlQXJjaGl0ZWN0VG9vbDogZmFsc2UsXG4gIG1jcENvbnRleHRVcmlzOiBbXSxcbiAgbWNwU2VydmVyczoge30sXG4gIGFwcHJvdmVkTWNwcmNTZXJ2ZXJzOiBbXSxcbiAgcmVqZWN0ZWRNY3ByY1NlcnZlcnM6IFtdLFxuICBoYXNUcnVzdERpYWxvZ0FjY2VwdGVkOiBmYWxzZSxcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbmZpZ0ZvclByb2plY3QocHJvamVjdFBhdGg6IHN0cmluZyk6IFByb2plY3RDb25maWcge1xuICBjb25zdCBjb25maWcgPSB7IC4uLkRFRkFVTFRfUFJPSkVDVF9DT05GSUcgfVxuICBpZiAocHJvamVjdFBhdGggPT09IGhvbWVkaXIoKSkge1xuICAgIGNvbmZpZy5kb250Q3Jhd2xEaXJlY3RvcnkgPSB0cnVlXG4gIH1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgdHlwZSBBdXRvVXBkYXRlclN0YXR1cyA9XG4gIHwgJ2Rpc2FibGVkJ1xuICB8ICdlbmFibGVkJ1xuICB8ICdub19wZXJtaXNzaW9ucydcbiAgfCAnbm90X2NvbmZpZ3VyZWQnXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dG9VcGRhdGVyU3RhdHVzKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBBdXRvVXBkYXRlclN0YXR1cyB7XG4gIHJldHVybiBbJ2Rpc2FibGVkJywgJ2VuYWJsZWQnLCAnbm9fcGVybWlzc2lvbnMnLCAnbm90X2NvbmZpZ3VyZWQnXS5pbmNsdWRlcyhcbiAgICB2YWx1ZSBhcyBBdXRvVXBkYXRlclN0YXR1cyxcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25DaGFubmVsID1cbiAgfCAnaXRlcm0yJ1xuICB8ICd0ZXJtaW5hbF9iZWxsJ1xuICB8ICdpdGVybTJfd2l0aF9iZWxsJ1xuICB8ICdub3RpZmljYXRpb25zX2Rpc2FibGVkJ1xuXG5leHBvcnQgdHlwZSBBY2NvdW50SW5mbyA9IHtcbiAgYWNjb3VudFV1aWQ6IHN0cmluZ1xuICBlbWFpbEFkZHJlc3M6IHN0cmluZ1xuICBvcmdhbml6YXRpb25VdWlkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEdsb2JhbENvbmZpZyA9IHtcbiAgcHJvamVjdHM/OiBSZWNvcmQ8c3RyaW5nLCBQcm9qZWN0Q29uZmlnPlxuICBudW1TdGFydHVwczogbnVtYmVyXG4gIGF1dG9VcGRhdGVyU3RhdHVzPzogQXV0b1VwZGF0ZXJTdGF0dXNcbiAgdXNlcklEPzogc3RyaW5nXG4gIHRoZW1lOiBUaGVtZU5hbWVzXG4gIGhhc0NvbXBsZXRlZE9uYm9hcmRpbmc/OiBib29sZWFuXG4gIC8vIFRyYWNrcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgcmVzZXQgb25ib2FyZGluZywgdXNlZCB3aXRoIE1JTl9WRVJTSU9OX1JFUVVJUklOR19PTkJPQVJESU5HX1JFU0VUXG4gIGxhc3RPbmJvYXJkaW5nVmVyc2lvbj86IHN0cmluZ1xuICAvLyBUcmFja3MgdGhlIGxhc3QgdmVyc2lvbiBmb3Igd2hpY2ggcmVsZWFzZSBub3RlcyB3ZXJlIHNlZW4sIHVzZWQgZm9yIG1hbmFnaW5nIHJlbGVhc2Ugbm90ZXNcbiAgbGFzdFJlbGVhc2VOb3Rlc1NlZW4/OiBzdHJpbmdcbiAgbWNwU2VydmVycz86IFJlY29yZDxzdHJpbmcsIE1jcFNlcnZlckNvbmZpZz5cbiAgcHJlZmVycmVkTm90aWZDaGFubmVsOiBOb3RpZmljYXRpb25DaGFubmVsXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgY3VzdG9tQXBpS2V5UmVzcG9uc2VzPzoge1xuICAgIGFwcHJvdmVkPzogc3RyaW5nW11cbiAgICByZWplY3RlZD86IHN0cmluZ1tdXG4gIH1cbiAgcHJpbWFyeUFwaUtleT86IHN0cmluZyAvLyBQcmltYXJ5IEFQSSBrZXkgZm9yIHRoZSB1c2VyIHdoZW4gbm8gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBzZXQgdmlhIG9hdXRoIChUT0RPOiByZW5hbWUpXG4gIGhhc0Fja25vd2xlZGdlZENvc3RUaHJlc2hvbGQ/OiBib29sZWFuXG4gIG9hdXRoQWNjb3VudD86IEFjY291bnRJbmZvXG4gIGl0ZXJtMktleUJpbmRpbmdJbnN0YWxsZWQ/OiBib29sZWFuIC8vIExlZ2FjeSAtIGtlZXBpbmcgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgc2hpZnRFbnRlcktleUJpbmRpbmdJbnN0YWxsZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0dMT0JBTF9DT05GSUc6IEdsb2JhbENvbmZpZyA9IHtcbiAgbnVtU3RhcnR1cHM6IDAsXG4gIGF1dG9VcGRhdGVyU3RhdHVzOiAnbm90X2NvbmZpZ3VyZWQnLFxuICB0aGVtZTogJ2RhcmsnIGFzIFRoZW1lTmFtZXMsXG4gIHByZWZlcnJlZE5vdGlmQ2hhbm5lbDogJ2l0ZXJtMicsXG4gIHZlcmJvc2U6IGZhbHNlLFxuICBjdXN0b21BcGlLZXlSZXNwb25zZXM6IHtcbiAgICBhcHByb3ZlZDogW10sXG4gICAgcmVqZWN0ZWQ6IFtdLFxuICB9LFxufVxuXG5leHBvcnQgY29uc3QgR0xPQkFMX0NPTkZJR19LRVlTID0gW1xuICAnYXV0b1VwZGF0ZXJTdGF0dXMnLFxuICAndGhlbWUnLFxuICAnaGFzQ29tcGxldGVkT25ib2FyZGluZycsXG4gICdsYXN0T25ib2FyZGluZ1ZlcnNpb24nLFxuICAnbGFzdFJlbGVhc2VOb3Rlc1NlZW4nLFxuICAndmVyYm9zZScsXG4gICdjdXN0b21BcGlLZXlSZXNwb25zZXMnLFxuICAncHJpbWFyeUFwaUtleScsXG4gICdwcmVmZXJyZWROb3RpZkNoYW5uZWwnLFxuICAnc2hpZnRFbnRlcktleUJpbmRpbmdJbnN0YWxsZWQnLFxuXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBHbG9iYWxDb25maWdLZXkgPSAodHlwZW9mIEdMT0JBTF9DT05GSUdfS0VZUylbbnVtYmVyXVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iYWxDb25maWdLZXkoa2V5OiBzdHJpbmcpOiBrZXkgaXMgR2xvYmFsQ29uZmlnS2V5IHtcbiAgcmV0dXJuIEdMT0JBTF9DT05GSUdfS0VZUy5pbmNsdWRlcyhrZXkgYXMgR2xvYmFsQ29uZmlnS2V5KVxufVxuXG5leHBvcnQgY29uc3QgUFJPSkVDVF9DT05GSUdfS0VZUyA9IFtcbiAgJ2RvbnRDcmF3bERpcmVjdG9yeScsXG4gICdlbmFibGVBcmNoaXRlY3RUb29sJyxcbiAgJ2hhc1RydXN0RGlhbG9nQWNjZXB0ZWQnLFxuICAnaGFzQ29tcGxldGVkUHJvamVjdE9uYm9hcmRpbmcnLFxuXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBQcm9qZWN0Q29uZmlnS2V5ID0gKHR5cGVvZiBQUk9KRUNUX0NPTkZJR19LRVlTKVtudW1iZXJdXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc1RydXN0RGlhbG9nQWNjZXB0ZWQoKTogYm9vbGVhbiB7XG4gIGxldCBjdXJyZW50UGF0aCA9IGdldEN3ZCgpXG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZyhHTE9CQUxfQ0xBVURFX0ZJTEUsIERFRkFVTFRfR0xPQkFMX0NPTkZJRylcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHByb2plY3RDb25maWcgPSBjb25maWcucHJvamVjdHM/LltjdXJyZW50UGF0aF1cbiAgICBpZiAocHJvamVjdENvbmZpZz8uaGFzVHJ1c3REaWFsb2dBY2NlcHRlZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHJlc29sdmUoY3VycmVudFBhdGgsICcuLicpXG4gICAgLy8gU3RvcCBpZiB3ZSd2ZSByZWFjaGVkIHRoZSByb290ICh3aGVuIHBhcmVudCBpcyBzYW1lIGFzIGN1cnJlbnQpXG4gICAgaWYgKHBhcmVudFBhdGggPT09IGN1cnJlbnRQYXRoKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBjdXJyZW50UGF0aCA9IHBhcmVudFBhdGhcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBXZSBoYXZlIHRvIHB1dCB0aGlzIHRlc3QgY29kZSBoZXJlIGJlY2F1c2UgSmVzdCBkb2Vzbid0IHN1cHBvcnQgbW9ja2luZyBFUyBtb2R1bGVzIDpPXG5jb25zdCBURVNUX0dMT0JBTF9DT05GSUdfRk9SX1RFU1RJTkc6IEdsb2JhbENvbmZpZyA9IHtcbiAgLi4uREVGQVVMVF9HTE9CQUxfQ09ORklHLFxuICBhdXRvVXBkYXRlclN0YXR1czogJ2Rpc2FibGVkJyxcbn1cbmNvbnN0IFRFU1RfUFJPSkVDVF9DT05GSUdfRk9SX1RFU1RJTkc6IFByb2plY3RDb25maWcgPSB7XG4gIC4uLkRFRkFVTFRfUFJPSkVDVF9DT05GSUcsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2plY3RDb25maWdLZXkoa2V5OiBzdHJpbmcpOiBrZXkgaXMgUHJvamVjdENvbmZpZ0tleSB7XG4gIHJldHVybiBQUk9KRUNUX0NPTkZJR19LRVlTLmluY2x1ZGVzKGtleSBhcyBQcm9qZWN0Q29uZmlnS2V5KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUdsb2JhbENvbmZpZyhjb25maWc6IEdsb2JhbENvbmZpZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZykge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVE9ET1xuICAgICAgVEVTVF9HTE9CQUxfQ09ORklHX0ZPUl9URVNUSU5HW2tleV0gPSBjb25maWdba2V5XVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBzYXZlQ29uZmlnKFxuICAgIEdMT0JBTF9DTEFVREVfRklMRSxcbiAgICB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBwcm9qZWN0czogZ2V0Q29uZmlnKEdMT0JBTF9DTEFVREVfRklMRSwgREVGQVVMVF9HTE9CQUxfQ09ORklHKS5wcm9qZWN0cyxcbiAgICB9LFxuICAgIERFRkFVTFRfR0xPQkFMX0NPTkZJRyxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsQ29uZmlnKCk6IEdsb2JhbENvbmZpZyB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgcmV0dXJuIFRFU1RfR0xPQkFMX0NPTkZJR19GT1JfVEVTVElOR1xuICB9XG4gIHJldHVybiBnZXRDb25maWcoR0xPQkFMX0NMQVVERV9GSUxFLCBERUZBVUxUX0dMT0JBTF9DT05GSUcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbnRocm9waWNBcGlLZXkoKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG5cbiAgaWYgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ1NXRV9CRU5DSCcpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVlfT1ZFUlJJREUgPz8gbnVsbFxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2V4dGVybmFsJykge1xuICAgIHJldHVybiBjb25maWcucHJpbWFyeUFwaUtleSA/PyBudWxsXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuVVNFUl9UWVBFID09PSAnYW50Jykge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZICYmXG4gICAgICBjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzPy5hcHByb3ZlZD8uaW5jbHVkZXMoXG4gICAgICAgIG5vcm1hbGl6ZUFwaUtleUZvckNvbmZpZyhwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSksXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVlcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZy5wcmltYXJ5QXBpS2V5ID8/IG51bGxcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBcGlLZXlGb3JDb25maWcoYXBpS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYXBpS2V5LnNsaWNlKC0yMClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdEFwaUtleSgpOiBib29sZWFuIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgY29uc3QgYXBpS2V5ID0gZ2V0QW50aHJvcGljQXBpS2V5KClcbiAgcmV0dXJuIGFwaUtleSA9PT0gY29uZmlnLnByaW1hcnlBcGlLZXlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1c3RvbUFwaUtleVN0YXR1cyhcbiAgdHJ1bmNhdGVkQXBpS2V5OiBzdHJpbmcsXG4pOiAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJyB8ICduZXcnIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgaWYgKGNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXM/LmFwcHJvdmVkPy5pbmNsdWRlcyh0cnVuY2F0ZWRBcGlLZXkpKSB7XG4gICAgcmV0dXJuICdhcHByb3ZlZCdcbiAgfVxuICBpZiAoY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcz8ucmVqZWN0ZWQ/LmluY2x1ZGVzKHRydW5jYXRlZEFwaUtleSkpIHtcbiAgICByZXR1cm4gJ3JlamVjdGVkJ1xuICB9XG4gIHJldHVybiAnbmV3J1xufVxuXG5mdW5jdGlvbiBzYXZlQ29uZmlnPEEgZXh0ZW5kcyBvYmplY3Q+KFxuICBmaWxlOiBzdHJpbmcsXG4gIGNvbmZpZzogQSxcbiAgZGVmYXVsdENvbmZpZzogQSxcbik6IHZvaWQge1xuICAvLyBGaWx0ZXIgb3V0IGFueSB2YWx1ZXMgdGhhdCBtYXRjaCB0aGUgZGVmYXVsdHNcbiAgY29uc3QgZmlsdGVyZWRDb25maWcgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoY29uZmlnKS5maWx0ZXIoXG4gICAgICAoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGRlZmF1bHRDb25maWdba2V5IGFzIGtleW9mIEFdKSxcbiAgICApLFxuICApXG4gIHdyaXRlRmlsZVN5bmMoZmlsZSwgSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWRDb25maWcsIG51bGwsIDIpLCAndXRmLTgnKVxufVxuXG4vLyBGbGFnIHRvIHRyYWNrIGlmIGNvbmZpZyByZWFkaW5nIGlzIGFsbG93ZWRcbmxldCBjb25maWdSZWFkaW5nQWxsb3dlZCA9IGZhbHNlXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVDb25maWdzKCk6IHZvaWQge1xuICAvLyBBbnkgcmVhZHMgdG8gY29uZmlndXJhdGlvbiBiZWZvcmUgdGhpcyBmbGFnIGlzIHNldCBzaG93IGFuIGNvbnNvbGUgd2FybmluZ1xuICAvLyB0byBwcmV2ZW50IHVzIGZyb20gYWRkaW5nIGNvbmZpZyByZWFkaW5nIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb25cbiAgY29uZmlnUmVhZGluZ0FsbG93ZWQgPSB0cnVlXG4gIC8vIFdlIG9ubHkgY2hlY2sgdGhlIGdsb2JhbCBjb25maWcgYmVjYXVzZSBjdXJyZW50bHkgYWxsIHRoZSBjb25maWdzIHNoYXJlIGEgZmlsZVxuICBnZXRDb25maWcoXG4gICAgR0xPQkFMX0NMQVVERV9GSUxFLFxuICAgIERFRkFVTFRfR0xPQkFMX0NPTkZJRyxcbiAgICB0cnVlIC8qIHRocm93IG9uIGludmFsaWQgKi8sXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlnPEE+KFxuICBmaWxlOiBzdHJpbmcsXG4gIGRlZmF1bHRDb25maWc6IEEsXG4gIHRocm93T25JbnZhbGlkPzogYm9vbGVhbixcbik6IEEge1xuICAvLyBMb2cgYSB3YXJuaW5nIGlmIGNvbmZpZyBpcyBhY2Nlc3NlZCBiZWZvcmUgaXQncyBhbGxvd2VkXG4gIGlmICghY29uZmlnUmVhZGluZ0FsbG93ZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlnIGFjY2Vzc2VkIGJlZm9yZSBhbGxvd2VkLicpXG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZmlsZSkpIHtcbiAgICByZXR1cm4gY2xvbmVEZWVwKGRlZmF1bHRDb25maWcpXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWRDb25maWcgPSBKU09OLnBhcnNlKGZpbGVDb250ZW50KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY2xvbmVEZWVwKGRlZmF1bHRDb25maWcpLFxuICAgICAgICAuLi5wYXJzZWRDb25maWcsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFRocm93IGEgQ29uZmlnUGFyc2VFcnJvciB3aXRoIHRoZSBmaWxlIHBhdGggYW5kIGRlZmF1bHQgY29uZmlnXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIHRocm93IG5ldyBDb25maWdQYXJzZUVycm9yKGVycm9yTWVzc2FnZSwgZmlsZSwgZGVmYXVsdENvbmZpZylcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLy8gUmUtdGhyb3cgQ29uZmlnUGFyc2VFcnJvciBpZiB0aHJvd09uSW52YWxpZCBpcyB0cnVlXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ29uZmlnUGFyc2VFcnJvciAmJiB0aHJvd09uSW52YWxpZCkge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lRGVlcChkZWZhdWx0Q29uZmlnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpOiBQcm9qZWN0Q29uZmlnIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICByZXR1cm4gVEVTVF9QUk9KRUNUX0NPTkZJR19GT1JfVEVTVElOR1xuICB9XG5cbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gcmVzb2x2ZShnZXRDd2QoKSlcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKEdMT0JBTF9DTEFVREVfRklMRSwgREVGQVVMVF9HTE9CQUxfQ09ORklHKVxuXG4gIGlmICghY29uZmlnLnByb2plY3RzKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb25maWdGb3JQcm9qZWN0KGFic29sdXRlUGF0aClcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWcgPVxuICAgIGNvbmZpZy5wcm9qZWN0c1thYnNvbHV0ZVBhdGhdID8/IGRlZmF1bHRDb25maWdGb3JQcm9qZWN0KGFic29sdXRlUGF0aClcbiAgLy8gTm90IHN1cmUgaG93IHRoaXMgYmVjYW1lIGEgc3RyaW5nXG4gIC8vIFRPRE86IEZpeCB1cHN0cmVhbVxuICBpZiAodHlwZW9mIHByb2plY3RDb25maWcuYWxsb3dlZFRvb2xzID09PSAnc3RyaW5nJykge1xuICAgIHByb2plY3RDb25maWcuYWxsb3dlZFRvb2xzID1cbiAgICAgIChzYWZlUGFyc2VKU09OKHByb2plY3RDb25maWcuYWxsb3dlZFRvb2xzKSBhcyBzdHJpbmdbXSkgPz8gW11cbiAgfVxuICByZXR1cm4gcHJvamVjdENvbmZpZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKHByb2plY3RDb25maWc6IFByb2plY3RDb25maWcpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9qZWN0Q29uZmlnKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUT0RPXG4gICAgICBURVNUX1BST0pFQ1RfQ09ORklHX0ZPUl9URVNUSU5HW2tleV0gPSBwcm9qZWN0Q29uZmlnW2tleV1cbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKEdMT0JBTF9DTEFVREVfRklMRSwgREVGQVVMVF9HTE9CQUxfQ09ORklHKVxuICBzYXZlQ29uZmlnKFxuICAgIEdMT0JBTF9DTEFVREVfRklMRSxcbiAgICB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBwcm9qZWN0czoge1xuICAgICAgICAuLi5jb25maWcucHJvamVjdHMsXG4gICAgICAgIFtyZXNvbHZlKGdldEN3ZCgpKV06IHByb2plY3RDb25maWcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgREVGQVVMVF9HTE9CQUxfQ09ORklHLFxuICApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0F1dG9VcGRhdGVyRGlzYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHVzZUV4dGVybmFsVXBkYXRlciA9IGF3YWl0IGNoZWNrR2F0ZShHQVRFX1VTRV9FWFRFUk5BTF9VUERBVEVSKVxuICByZXR1cm4gKFxuICAgIHVzZUV4dGVybmFsVXBkYXRlciB8fCBnZXRHbG9iYWxDb25maWcoKS5hdXRvVXBkYXRlclN0YXR1cyA9PT0gJ2Rpc2FibGVkJ1xuICApXG59XG5cbmV4cG9ydCBjb25zdCBURVNUX01DUFJDX0NPTkZJR19GT1JfVEVTVElORzogUmVjb3JkPHN0cmluZywgTWNwU2VydmVyQ29uZmlnPiA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck1jcHJjQ29uZmlnRm9yVGVzdGluZygpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICBPYmplY3Qua2V5cyhURVNUX01DUFJDX0NPTkZJR19GT1JfVEVTVElORykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgZGVsZXRlIFRFU1RfTUNQUkNfQ09ORklHX0ZPUl9URVNUSU5HW2tleV1cbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRNY3ByY1NlcnZlckZvclRlc3RpbmcoXG4gIG5hbWU6IHN0cmluZyxcbiAgc2VydmVyOiBNY3BTZXJ2ZXJDb25maWcsXG4pOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICBURVNUX01DUFJDX0NPTkZJR19GT1JfVEVTVElOR1tuYW1lXSA9IHNlcnZlclxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVNY3ByY1NlcnZlckZvclRlc3RpbmcobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgaWYgKCFURVNUX01DUFJDX0NPTkZJR19GT1JfVEVTVElOR1tuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBNQ1Agc2VydmVyIGZvdW5kIHdpdGggbmFtZTogJHtuYW1lfSBpbiAubWNwcmNgKVxuICAgIH1cbiAgICBkZWxldGUgVEVTVF9NQ1BSQ19DT05GSUdfRk9SX1RFU1RJTkdbbmFtZV1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0TWNwcmNDb25maWcgPSBtZW1vaXplKFxuICAoKTogUmVjb3JkPHN0cmluZywgTWNwU2VydmVyQ29uZmlnPiA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAgIHJldHVybiBURVNUX01DUFJDX0NPTkZJR19GT1JfVEVTVElOR1xuICAgIH1cblxuICAgIGNvbnN0IG1jcHJjUGF0aCA9IGpvaW4oZ2V0Q3dkKCksICcubWNwcmMnKVxuICAgIGlmICghZXhpc3RzU3luYyhtY3ByY1BhdGgpKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbWNwcmNDb250ZW50ID0gcmVhZEZpbGVTeW5jKG1jcHJjUGF0aCwgJ3V0Zi04JylcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHNhZmVQYXJzZUpTT04obWNwcmNDb250ZW50KVxuICAgICAgaWYgKGNvbmZpZyAmJiB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgICBsb2dFdmVudCgndGVuZ3VfbWNwcmNfZm91bmQnLCB7XG4gICAgICAgICAgbnVtU2VydmVyczogT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGgudG9TdHJpbmcoKSxcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBNY3BTZXJ2ZXJDb25maWc+XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgZXJyb3JzIHJlYWRpbmcvcGFyc2luZyAubWNwcmMgKHRoZXkncmUgbG9nZ2VkIGluIHNhZmVQYXJzZUpTT04pXG4gICAgfVxuICAgIHJldHVybiB7fVxuICB9LFxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgYXMgbG9uZyBhcyB0aGUgY3dkIGFuZCBtY3ByYyBmaWxlIGNvbnRlbnQgcmVtYWluIHRoZSBzYW1lXG4gICgpID0+IHtcbiAgICBjb25zdCBjd2QgPSBnZXRDd2QoKVxuICAgIGNvbnN0IG1jcHJjUGF0aCA9IGpvaW4oY3dkLCAnLm1jcHJjJylcbiAgICBpZiAoZXhpc3RzU3luYyhtY3ByY1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0ID0gcmVhZEZpbGVTeW5jKG1jcHJjUGF0aCwgJ3V0Zi04JylcbiAgICAgICAgcmV0dXJuIGAke2N3ZH06JHtzdGF0fWBcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY3dkXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjd2RcbiAgfSxcbilcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yQ3JlYXRlVXNlcklEKCk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gIGlmIChjb25maWcudXNlcklEKSB7XG4gICAgcmV0dXJuIGNvbmZpZy51c2VySURcbiAgfVxuXG4gIGNvbnN0IHVzZXJJRCA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4JylcbiAgc2F2ZUdsb2JhbENvbmZpZyh7IC4uLmNvbmZpZywgdXNlcklEIH0pXG4gIHJldHVybiB1c2VySURcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ0ZvckNMSShrZXk6IHN0cmluZywgZ2xvYmFsOiBib29sZWFuKTogdW5rbm93biB7XG4gIGxvZ0V2ZW50KCd0ZW5ndV9jb25maWdfZ2V0Jywge1xuICAgIGtleSxcbiAgICBnbG9iYWw6IGdsb2JhbD8udG9TdHJpbmcoKSA/PyAnZmFsc2UnLFxuICB9KVxuICBpZiAoZ2xvYmFsKSB7XG4gICAgaWYgKCFpc0dsb2JhbENvbmZpZ0tleShrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3I6ICcke2tleX0nIGlzIG5vdCBhIHZhbGlkIGNvbmZpZyBrZXkuIFZhbGlkIGtleXMgYXJlOiAke0dMT0JBTF9DT05GSUdfS0VZUy5qb2luKCcsICcpfWAsXG4gICAgICApXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG4gICAgcmV0dXJuIGdldEdsb2JhbENvbmZpZygpW2tleV1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlzUHJvamVjdENvbmZpZ0tleShrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3I6ICcke2tleX0nIGlzIG5vdCBhIHZhbGlkIGNvbmZpZyBrZXkuIFZhbGlkIGtleXMgYXJlOiAke1BST0pFQ1RfQ09ORklHX0tFWVMuam9pbignLCAnKX1gLFxuICAgICAgKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICAgIHJldHVybiBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpW2tleV1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29uZmlnRm9yQ0xJKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIGdsb2JhbDogYm9vbGVhbixcbik6IHZvaWQge1xuICBsb2dFdmVudCgndGVuZ3VfY29uZmlnX3NldCcsIHtcbiAgICBrZXksXG4gICAgZ2xvYmFsOiBnbG9iYWw/LnRvU3RyaW5nKCkgPz8gJ2ZhbHNlJyxcbiAgfSlcbiAgaWYgKGdsb2JhbCkge1xuICAgIGlmICghaXNHbG9iYWxDb25maWdLZXkoa2V5KSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEVycm9yOiBDYW5ub3Qgc2V0ICcke2tleX0nLiBPbmx5IHRoZXNlIGtleXMgY2FuIGJlIG1vZGlmaWVkOiAke0dMT0JBTF9DT05GSUdfS0VZUy5qb2luKCcsICcpfWAsXG4gICAgICApXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYXV0b1VwZGF0ZXJTdGF0dXMnICYmICFpc0F1dG9VcGRhdGVyU3RhdHVzKHZhbHVlIGFzIHN0cmluZykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFcnJvcjogSW52YWxpZCB2YWx1ZSBmb3IgYXV0b1VwZGF0ZXJTdGF0dXMuIE11c3QgYmUgb25lIG9mOiBkaXNhYmxlZCwgZW5hYmxlZCwgbm9fcGVybWlzc2lvbnMsIG5vdF9jb25maWd1cmVkYCxcbiAgICAgIClcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICAgIHNhdmVHbG9iYWxDb25maWcoe1xuICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGlmICghaXNQcm9qZWN0Q29uZmlnS2V5KGtleSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFcnJvcjogQ2Fubm90IHNldCAnJHtrZXl9Jy4gT25seSB0aGVzZSBrZXlzIGNhbiBiZSBtb2RpZmllZDogJHtQUk9KRUNUX0NPTkZJR19LRVlTLmpvaW4oJywgJyl9LiBEaWQgeW91IG1lYW4gLS1nbG9iYWw/YCxcbiAgICAgIClcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICAgIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyh7XG4gICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgW2tleV06IHZhbHVlLFxuICAgIH0pXG4gIH1cbiAgLy8gV2FpdCBmb3IgdGhlIG91dHB1dCB0byBiZSBmbHVzaGVkLCB0byBhdm9pZCBjbGVhcmluZyB0aGUgc2NyZWVuLlxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBXaXRob3V0IHRoaXMgd2UgaGFuZyBpbmRlZmluaXRlbHkuXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH0sIDEwMClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUNvbmZpZ0ZvckNMSShrZXk6IHN0cmluZywgZ2xvYmFsOiBib29sZWFuKTogdm9pZCB7XG4gIGxvZ0V2ZW50KCd0ZW5ndV9jb25maWdfZGVsZXRlJywge1xuICAgIGtleSxcbiAgICBnbG9iYWw6IGdsb2JhbD8udG9TdHJpbmcoKSA/PyAnZmFsc2UnLFxuICB9KVxuICBpZiAoZ2xvYmFsKSB7XG4gICAgaWYgKCFpc0dsb2JhbENvbmZpZ0tleShrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3I6IENhbm5vdCBkZWxldGUgJyR7a2V5fScuIE9ubHkgdGhlc2Uga2V5cyBjYW4gYmUgbW9kaWZpZWQ6ICR7R0xPQkFMX0NPTkZJR19LRVlTLmpvaW4oJywgJyl9YCxcbiAgICAgIClcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgICBkZWxldGUgY3VycmVudENvbmZpZ1trZXldXG4gICAgc2F2ZUdsb2JhbENvbmZpZyhjdXJyZW50Q29uZmlnKVxuICB9IGVsc2Uge1xuICAgIGlmICghaXNQcm9qZWN0Q29uZmlnS2V5KGtleSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFcnJvcjogQ2Fubm90IGRlbGV0ZSAnJHtrZXl9Jy4gT25seSB0aGVzZSBrZXlzIGNhbiBiZSBtb2RpZmllZDogJHtQUk9KRUNUX0NPTkZJR19LRVlTLmpvaW4oJywgJyl9LiBEaWQgeW91IG1lYW4gLS1nbG9iYWw/YCxcbiAgICAgIClcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICAgIGRlbGV0ZSBjdXJyZW50Q29uZmlnW2tleV1cbiAgICBzYXZlQ3VycmVudFByb2plY3RDb25maWcoY3VycmVudENvbmZpZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdENvbmZpZ0ZvckNMSShnbG9iYWw6IHRydWUpOiBHbG9iYWxDb25maWdcbmV4cG9ydCBmdW5jdGlvbiBsaXN0Q29uZmlnRm9yQ0xJKGdsb2JhbDogZmFsc2UpOiBQcm9qZWN0Q29uZmlnXG5leHBvcnQgZnVuY3Rpb24gbGlzdENvbmZpZ0ZvckNMSShnbG9iYWw6IGJvb2xlYW4pOiBvYmplY3Qge1xuICBsb2dFdmVudCgndGVuZ3VfY29uZmlnX2xpc3QnLCB7XG4gICAgZ2xvYmFsOiBnbG9iYWw/LnRvU3RyaW5nKCkgPz8gJ2ZhbHNlJyxcbiAgfSlcbiAgaWYgKGdsb2JhbCkge1xuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBwaWNrKGdldEdsb2JhbENvbmZpZygpLCBHTE9CQUxfQ09ORklHX0tFWVMpXG4gICAgcmV0dXJuIGN1cnJlbnRDb25maWdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGljayhnZXRDdXJyZW50UHJvamVjdENvbmZpZygpLCBQUk9KRUNUX0NPTkZJR19LRVlTKVxuICB9XG59XG4iLAogICAgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG4iLAogICAgImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG4iLAogICAgImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuIiwKICAgICJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG4iLAogICAgImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3ltYm9sO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG4iLAogICAgImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVG9TdHJpbmc7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsCiAgICAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG4iLAogICAgImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsCiAgICAiaW1wb3J0IGNvcmVKc0RhdGEgZnJvbSAnLi9fY29yZUpzRGF0YS5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFza2VkO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU291cmNlO1xuIiwKICAgICJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsCiAgICAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xuIiwKICAgICJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDcmVhdGU7XG4iLAogICAgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBwbHk7XG4iLAogICAgIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5QXJyYXk7XG4iLAogICAgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hvcnRPdXQ7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsCiAgICAiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLAogICAgImltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0VG9TdHJpbmc7XG4iLAogICAgImltcG9ydCBiYXNlU2V0VG9TdHJpbmcgZnJvbSAnLi9fYmFzZVNldFRvU3RyaW5nLmpzJztcbmltcG9ydCBzaG9ydE91dCBmcm9tICcuL19zaG9ydE91dC5qcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvU3RyaW5nO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RWFjaDtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwKICAgICJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG4iLAogICAgIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcTtcbiIsCiAgICAiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG4iLAogICAgImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJSZXN0O1xuIiwKICAgICJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgb3ZlclJlc3QgZnJvbSAnLi9fb3ZlclJlc3QuanMnO1xuaW1wb3J0IHNldFRvU3RyaW5nIGZyb20gJy4vX3NldFRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZXN0O1xuIiwKICAgICIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwKICAgICJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzQXJndW1lbnRzO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzQXJndW1lbnRzIGZyb20gJy4vX2Jhc2VJc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJndW1lbnRzO1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsCiAgICAiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5pbXBvcnQgc3R1YkZhbHNlIGZyb20gJy4vc3R1YkZhbHNlLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCBpc0J1ZmZlcjtcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNUeXBlZEFycmF5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcbiIsCiAgICAiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG4iLAogICAgImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwKICAgICJpbXBvcnQgb3ZlckFyZyBmcm9tICcuL19vdmVyQXJnLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzO1xuIiwKICAgICJpbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXMgZnJvbSAnLi9fbmF0aXZlS2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXM7XG4iLAogICAgImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLAogICAgImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5c0luIGZyb20gJy4vX25hdGl2ZUtleXNJbi5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzSW47XG4iLAogICAgImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzSW4gZnJvbSAnLi9fYmFzZUtleXNJbi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzSW47XG4iLAogICAgImltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNLZXk7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIiwKICAgICJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoQ2xlYXI7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hEZWxldGU7XG4iLAogICAgImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoR2V0O1xuIiwKICAgICJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaEhhcztcbiIsCiAgICAiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaFNldDtcbiIsCiAgICAiaW1wb3J0IGhhc2hDbGVhciBmcm9tICcuL19oYXNoQ2xlYXIuanMnO1xuaW1wb3J0IGhhc2hEZWxldGUgZnJvbSAnLi9faGFzaERlbGV0ZS5qcyc7XG5pbXBvcnQgaGFzaEdldCBmcm9tICcuL19oYXNoR2V0LmpzJztcbmltcG9ydCBoYXNoSGFzIGZyb20gJy4vX2hhc2hIYXMuanMnO1xuaW1wb3J0IGhhc2hTZXQgZnJvbSAnLi9faGFzaFNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZUNsZWFyO1xuIiwKICAgICJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc29jSW5kZXhPZjtcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVHZXQ7XG4iLAogICAgImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsCiAgICAiaW1wb3J0IGxpc3RDYWNoZUNsZWFyIGZyb20gJy4vX2xpc3RDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVEZWxldGUgZnJvbSAnLi9fbGlzdENhY2hlRGVsZXRlLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVHZXQgZnJvbSAnLi9fbGlzdENhY2hlR2V0LmpzJztcbmltcG9ydCBsaXN0Q2FjaGVIYXMgZnJvbSAnLi9fbGlzdENhY2hlSGFzLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVTZXQgZnJvbSAnLi9fbGlzdENhY2hlU2V0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBMaXN0Q2FjaGU7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuIiwKICAgICJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzS2V5YWJsZTtcbiIsCiAgICAiaW1wb3J0IGlzS2V5YWJsZSBmcm9tICcuL19pc0tleWFibGUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE1hcERhdGE7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlR2V0O1xuIiwKICAgICJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVIYXM7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwKICAgICJpbXBvcnQgbWFwQ2FjaGVDbGVhciBmcm9tICcuL19tYXBDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBtYXBDYWNoZURlbGV0ZSBmcm9tICcuL19tYXBDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVHZXQgZnJvbSAnLi9fbWFwQ2FjaGVHZXQuanMnO1xuaW1wb3J0IG1hcENhY2hlSGFzIGZyb20gJy4vX21hcENhY2hlSGFzLmpzJztcbmltcG9ydCBtYXBDYWNoZVNldCBmcm9tICcuL19tYXBDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBDYWNoZTtcbiIsCiAgICAiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplO1xuIiwKICAgICJpbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVDYXBwZWQ7XG4iLAogICAgImltcG9ydCBtZW1vaXplQ2FwcGVkIGZyb20gJy4vX21lbW9pemVDYXBwZWQuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ1RvUGF0aDtcbiIsCiAgICAiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU3RyaW5nO1xuIiwKICAgICJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBzdHJpbmdUb1BhdGggZnJvbSAnLi9fc3RyaW5nVG9QYXRoLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFBhdGg7XG4iLAogICAgImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvS2V5O1xuIiwKICAgICJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldDtcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0O1xuIiwKICAgICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5UHVzaDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmxhdHRlbmFibGU7XG4iLAogICAgImltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBpc0ZsYXR0ZW5hYmxlIGZyb20gJy4vX2lzRmxhdHRlbmFibGUuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZsYXR0ZW47XG4iLAogICAgImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0dGVuO1xuIiwKICAgICJpbXBvcnQgZmxhdHRlbiBmcm9tICcuL2ZsYXR0ZW4uanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdFJlc3Q7XG4iLAogICAgImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuIiwKICAgICJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrQ2xlYXI7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tEZWxldGU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tHZXQ7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrSGFzO1xuIiwKICAgICJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iLAogICAgImltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBzdGFja0NsZWFyIGZyb20gJy4vX3N0YWNrQ2xlYXIuanMnO1xuaW1wb3J0IHN0YWNrRGVsZXRlIGZyb20gJy4vX3N0YWNrRGVsZXRlLmpzJztcbmltcG9ydCBzdGFja0dldCBmcm9tICcuL19zdGFja0dldC5qcyc7XG5pbXBvcnQgc3RhY2tIYXMgZnJvbSAnLi9fc3RhY2tIYXMuanMnO1xuaW1wb3J0IHN0YWNrU2V0IGZyb20gJy4vX3N0YWNrU2V0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBTdGFjaztcbiIsCiAgICAiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ247XG4iLAogICAgImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnbkluO1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVCdWZmZXI7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlGaWx0ZXI7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJBcnJheTtcbiIsCiAgICAiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBzdHViQXJyYXkgZnJvbSAnLi9zdHViQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFN5bWJvbHM7XG4iLAogICAgImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGdldFN5bWJvbHMgZnJvbSAnLi9fZ2V0U3ltYm9scy5qcyc7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weVN5bWJvbHM7XG4iLAogICAgImltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFN5bWJvbHNJbjtcbiIsCiAgICAiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9sc0luIGZyb20gJy4vX2dldFN5bWJvbHNJbi5qcyc7XG5cbi8qKlxuICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weVN5bWJvbHNJbjtcbiIsCiAgICAiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0QWxsS2V5cztcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRBbGxLZXlzIGZyb20gJy4vX2Jhc2VHZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5cztcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRBbGxLZXlzIGZyb20gJy4vX2Jhc2VHZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzSW4gZnJvbSAnLi9fZ2V0U3ltYm9sc0luLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRBbGxLZXlzSW47XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFWaWV3O1xuIiwKICAgICJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTtcbiIsCiAgICAiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5leHBvcnQgZGVmYXVsdCBTZXQ7XG4iLAogICAgImltcG9ydCBEYXRhVmlldyBmcm9tICcuL19EYXRhVmlldy5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL19Qcm9taXNlLmpzJztcbmltcG9ydCBTZXQgZnJvbSAnLi9fU2V0LmpzJztcbmltcG9ydCBXZWFrTWFwIGZyb20gJy4vX1dlYWtNYXAuanMnO1xuaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRUYWc7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRDbG9uZUFycmF5O1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgVWludDhBcnJheTtcbiIsCiAgICAiaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVBcnJheUJ1ZmZlcjtcbiIsCiAgICAiaW1wb3J0IGNsb25lQXJyYXlCdWZmZXIgZnJvbSAnLi9fY2xvbmVBcnJheUJ1ZmZlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lRGF0YVZpZXc7XG4iLAogICAgIi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lUmVnRXhwO1xuIiwKICAgICJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVTeW1ib2w7XG4iLAogICAgImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVR5cGVkQXJyYXk7XG4iLAogICAgImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuaW1wb3J0IGNsb25lRGF0YVZpZXcgZnJvbSAnLi9fY2xvbmVEYXRhVmlldy5qcyc7XG5pbXBvcnQgY2xvbmVSZWdFeHAgZnJvbSAnLi9fY2xvbmVSZWdFeHAuanMnO1xuaW1wb3J0IGNsb25lU3ltYm9sIGZyb20gJy4vX2Nsb25lU3ltYm9sLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRDbG9uZUJ5VGFnO1xuIiwKICAgICJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdENsb25lT2JqZWN0O1xuIiwKICAgICJpbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hcDtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc01hcCBmcm9tICcuL19iYXNlSXNNYXAuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxuZXhwb3J0IGRlZmF1bHQgaXNNYXA7XG4iLAogICAgImltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzU2V0O1xuIiwKICAgICJpbXBvcnQgYmFzZUlzU2V0IGZyb20gJy4vX2Jhc2VJc1NldC5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBpc1NldDtcbiIsCiAgICAiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnbiBmcm9tICcuL19iYXNlQXNzaWduLmpzJztcbmltcG9ydCBiYXNlQXNzaWduSW4gZnJvbSAnLi9fYmFzZUFzc2lnbkluLmpzJztcbmltcG9ydCBjbG9uZUJ1ZmZlciBmcm9tICcuL19jbG9uZUJ1ZmZlci5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5pbXBvcnQgY29weVN5bWJvbHMgZnJvbSAnLi9fY29weVN5bWJvbHMuanMnO1xuaW1wb3J0IGNvcHlTeW1ib2xzSW4gZnJvbSAnLi9fY29weVN5bWJvbHNJbi5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5cyBmcm9tICcuL19nZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRBbGxLZXlzSW4gZnJvbSAnLi9fZ2V0QWxsS2V5c0luLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpbml0Q2xvbmVBcnJheSBmcm9tICcuL19pbml0Q2xvbmVBcnJheS5qcyc7XG5pbXBvcnQgaW5pdENsb25lQnlUYWcgZnJvbSAnLi9faW5pdENsb25lQnlUYWcuanMnO1xuaW1wb3J0IGluaXRDbG9uZU9iamVjdCBmcm9tICcuL19pbml0Q2xvbmVPYmplY3QuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc01hcCBmcm9tICcuL2lzTWFwLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1NldCBmcm9tICcuL2lzU2V0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDbG9uZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VDbG9uZSBmcm9tICcuL19iYXNlQ2xvbmUuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gKiBAc2VlIF8uY2xvbmVcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gKlxuICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lRGVlcDtcbiIsCiAgICAiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlQWRkO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlSGFzO1xuIiwKICAgICJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuaW1wb3J0IHNldENhY2hlQWRkIGZyb20gJy4vX3NldENhY2hlQWRkLmpzJztcbmltcG9ydCBzZXRDYWNoZUhhcyBmcm9tICcuL19zZXRDYWNoZUhhcy5qcyc7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuZXhwb3J0IGRlZmF1bHQgU2V0Q2FjaGU7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U29tZTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhY2hlSGFzO1xuIiwKICAgICJpbXBvcnQgU2V0Q2FjaGUgZnJvbSAnLi9fU2V0Q2FjaGUuanMnO1xuaW1wb3J0IGFycmF5U29tZSBmcm9tICcuL19hcnJheVNvbWUuanMnO1xuaW1wb3J0IGNhY2hlSGFzIGZyb20gJy4vX2NhY2hlSGFzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcXVhbEFycmF5cztcbiIsCiAgICAiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwVG9BcnJheTtcbiIsCiAgICAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9BcnJheTtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxCeVRhZztcbiIsCiAgICAiaW1wb3J0IGdldEFsbEtleXMgZnJvbSAnLi9fZ2V0QWxsS2V5cy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcXVhbE9iamVjdHM7XG4iLAogICAgImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IGVxdWFsQnlUYWcgZnJvbSAnLi9fZXF1YWxCeVRhZy5qcyc7XG5pbXBvcnQgZXF1YWxPYmplY3RzIGZyb20gJy4vX2VxdWFsT2JqZWN0cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNFcXVhbERlZXA7XG4iLAogICAgImltcG9ydCBiYXNlSXNFcXVhbERlZXAgZnJvbSAnLi9fYmFzZUlzRXF1YWxEZWVwLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzRXF1YWw7XG4iLAogICAgImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XG4gIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xuXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiAhbGVuZ3RoO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgOiAhKGRhdGFbMF0gaW4gb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgc3JjVmFsdWUgPSBkYXRhWzFdO1xuXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICA6IHJlc3VsdFxuICAgICAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTWF0Y2g7XG4iLAogICAgImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmljdENvbXBhcmFibGU7XG4iLAogICAgImltcG9ydCBpc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9faXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRNYXRjaERhdGE7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLAogICAgImltcG9ydCBiYXNlSXNNYXRjaCBmcm9tICcuL19iYXNlSXNNYXRjaC5qcyc7XG5pbXBvcnQgZ2V0TWF0Y2hEYXRhIGZyb20gJy4vX2dldE1hdGNoRGF0YS5qcyc7XG5pbXBvcnQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXM7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSGFzSW47XG4iLAogICAgImltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICB9XG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzUGF0aDtcbiIsCiAgICAiaW1wb3J0IGJhc2VIYXNJbiBmcm9tICcuL19iYXNlSGFzSW4uanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzSW47XG4iLAogICAgImltcG9ydCBiYXNlSXNFcXVhbCBmcm9tICcuL19iYXNlSXNFcXVhbC5qcyc7XG5pbXBvcnQgZ2V0IGZyb20gJy4vZ2V0LmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcbmltcG9ydCBpc0tleSBmcm9tICcuL19pc0tleS5qcyc7XG5pbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHk7XG4iLAogICAgImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5RGVlcDtcbiIsCiAgICAiaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuaW1wb3J0IGJhc2VQcm9wZXJ0eURlZXAgZnJvbSAnLi9fYmFzZVByb3BlcnR5RGVlcC5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwcm9wZXJ0eTtcbiIsCiAgICAiaW1wb3J0IGJhc2VNYXRjaGVzIGZyb20gJy4vX2Jhc2VNYXRjaGVzLmpzJztcbmltcG9ydCBiYXNlTWF0Y2hlc1Byb3BlcnR5IGZyb20gJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICcuL3Byb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUl0ZXJhdGVlO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQmFzZUZvcjtcbiIsCiAgICAiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsCiAgICAiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGb3JPd247XG4iLAogICAgImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwKICAgICIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGFzdDtcbiIsCiAgICAiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG4iLAogICAgImltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlcztcbiIsCiAgICAiaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRXF1YWw7XG4iLAogICAgImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICogQHNlZSBfLm1hcEtleXNcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0ge1xuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAqIH07XG4gKlxuICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwVmFsdWVzO1xuIiwKICAgICJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXQ7XG4iLAogICAgImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2tCeTtcbiIsCiAgICAiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUGlja0J5IGZyb20gJy4vX2Jhc2VQaWNrQnkuanMnO1xuaW1wb3J0IGdldEFsbEtleXNJbiBmcm9tICcuL19nZXRBbGxLZXlzSW4uanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAqIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2tCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHBpY2tCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICByZXR1cm4gW3Byb3BdO1xuICB9KTtcbiAgcHJlZGljYXRlID0gYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSk7XG4gIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHByZWRpY2F0ZSh2YWx1ZSwgcGF0aFswXSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwaWNrQnk7XG4iLAogICAgImltcG9ydCBiYXNlUGlja0J5IGZyb20gJy4vX2Jhc2VQaWNrQnkuanMnO1xuaW1wb3J0IGhhc0luIGZyb20gJy4vaGFzSW4uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQaWNrO1xuIiwKICAgICJpbXBvcnQgYmFzZVBpY2sgZnJvbSAnLi9fYmFzZVBpY2suanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG52YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrO1xuIiwKICAgICIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlRmxvb3IgPSBNYXRoLmZsb29yLFxuICAgIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmRvbWAgd2l0aG91dCBzdXBwb3J0IGZvciByZXR1cm5pbmdcbiAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dlciBUaGUgbG93ZXIgYm91bmQuXG4gKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpIHtcbiAgcmV0dXJuIGxvd2VyICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAodXBwZXIgLSBsb3dlciArIDEpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJhbmRvbTtcbiIsCiAgICAiaW1wb3J0IGJhc2VSYW5kb20gZnJvbSAnLi9fYmFzZVJhbmRvbS5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZWAgZm9yIGFycmF5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTYW1wbGUoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3RoIC0gMSldIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVNhbXBsZTtcbiIsCiAgICAiaW1wb3J0IGFycmF5U2FtcGxlIGZyb20gJy4vX2FycmF5U2FtcGxlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2FtcGxlO1xuIiwKICAgICJpbXBvcnQgYXJyYXlTYW1wbGUgZnJvbSAnLi9fYXJyYXlTYW1wbGUuanMnO1xuaW1wb3J0IGJhc2VTYW1wbGUgZnJvbSAnLi9fYmFzZVNhbXBsZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIEdldHMgYSByYW5kb20gZWxlbWVudCBmcm9tIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNhbXBsZShbMSwgMiwgMywgNF0pO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBzYW1wbGUoY29sbGVjdGlvbikge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZSA6IGJhc2VTYW1wbGU7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzYW1wbGU7XG4iLAogICAgImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgZ3JvdXBlZFxuICogZWxlbWVudHMgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgcmVncm91cGluZyB0aGUgZWxlbWVudHMgdG8gdGhlaXIgcHJlLXppcFxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB6aXBwZWQgPSBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gKlxuICogXy51bnppcCh6aXBwZWQpO1xuICogLy8gPT4gW1snYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXV1cbiAqL1xuZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gMDtcbiAgYXJyYXkgPSBhcnJheUZpbHRlcihhcnJheSwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoZ3JvdXApKSB7XG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJhc2VUaW1lcyhsZW5ndGgsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuemlwO1xuIiwKICAgICJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHVuemlwIGZyb20gJy4vdW56aXAuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cywgdGhlIGZpcnN0IG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICogZmlyc3QgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAqIHNlY29uZCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCBhbmQgc28gb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gKi9cbnZhciB6aXAgPSBiYXNlUmVzdCh1bnppcCk7XG5cbmV4cG9ydCBkZWZhdWx0IHppcDtcbiIsCiAgICAiLyoqXG4gKiBUaGlzIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uemlwT2JqZWN0YCB3aGljaCBhc3NpZ25zIHZhbHVlcyB1c2luZyBgYXNzaWduRnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduRnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VaaXBPYmplY3QocHJvcHMsIHZhbHVlcywgYXNzaWduRnVuYykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgIHZhbHNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBpbmRleCA8IHZhbHNMZW5ndGggPyB2YWx1ZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgIGFzc2lnbkZ1bmMocmVzdWx0LCBwcm9wc1tpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlWmlwT2JqZWN0O1xuIiwKICAgICJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VaaXBPYmplY3QgZnJvbSAnLi9fYmFzZVppcE9iamVjdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAqIG9uZSBvZiBwcm9wZXJ0eSBpZGVudGlmaWVycyBhbmQgb25lIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG5mdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBhc3NpZ25WYWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHppcE9iamVjdDtcbiIsCiAgICAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi9zdGF0ZS5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi9sb2cuanMnXG5cbmNvbnN0IE1TX0lOX1NFQ09ORCA9IDEwMDBcbmNvbnN0IFNFQ09ORFNfSU5fTUlOVVRFID0gNjBcblxuLyoqXG4gKiBleGVjRmlsZSwgYnV0IGFsd2F5cyByZXNvbHZlcyAobmV2ZXIgdGhyb3dzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY0ZpbGVOb1Rocm93KFxuICBmaWxlOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICB0aW1lb3V0ID0gMTAgKiBTRUNPTkRTX0lOX01JTlVURSAqIE1TX0lOX1NFQ09ORCxcbiAgcHJlc2VydmVPdXRwdXRPbkVycm9yID0gdHJ1ZSxcbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGNvZGU6IG51bWJlciB9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICB0cnkge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBtYXhCdWZmZXI6IDFfMDAwXzAwMCxcbiAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgY3dkOiBnZXRDd2QoKSxcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHByZXNlcnZlT3V0cHV0T25FcnJvcikge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSB0eXBlb2YgZXJyb3IuY29kZSA9PT0gJ251bWJlcicgPyBlcnJvci5jb2RlIDogMVxuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBzdGRvdXQ6IHN0ZG91dCB8fCAnJyxcbiAgICAgICAgICAgICAgICBzdGRlcnI6IHN0ZGVyciB8fCAnJyxcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvckNvZGUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKHsgc3Rkb3V0OiAnJywgc3RkZXJyOiAnJywgY29kZTogMSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGNvZGU6IDAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgICAgcmVzb2x2ZSh7IHN0ZG91dDogJycsIHN0ZGVycjogJycsIGNvZGU6IDEgfSlcbiAgICB9XG4gIH0pXG59XG4iLAogICAgImltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnXG5pbXBvcnQgeyBQZXJzaXN0ZW50U2hlbGwgfSBmcm9tICcuL1BlcnNpc3RlbnRTaGVsbC5qcydcblxuLy8gRE8gTk9UIEFERCBNT1JFIFNUQVRFIEhFUkUgT1IgQk9SSVMgV0lMTCBDVVJTRSBZT1VcbmNvbnN0IFNUQVRFOiB7XG4gIG9yaWdpbmFsQ3dkOiBzdHJpbmdcbn0gPSB7XG4gIG9yaWdpbmFsQ3dkOiBjd2QoKSxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEN3ZChjd2Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBQZXJzaXN0ZW50U2hlbGwuZ2V0SW5zdGFuY2UoKS5zZXRDd2QoY3dkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0T3JpZ2luYWxDd2QoY3dkOiBzdHJpbmcpOiB2b2lkIHtcbiAgU1RBVEUub3JpZ2luYWxDd2QgPSBjd2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdpbmFsQ3dkKCk6IHN0cmluZyB7XG4gIHJldHVybiBTVEFURS5vcmlnaW5hbEN3ZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3dkKCk6IHN0cmluZyB7XG4gIHJldHVybiBQZXJzaXN0ZW50U2hlbGwuZ2V0SW5zdGFuY2UoKS5wd2QoKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdmcydcbmltcG9ydCBzaGVsbHF1b3RlIGZyb20gJ3NoZWxsLXF1b3RlJ1xuaW1wb3J0IHsgc3Bhd24sIGV4ZWNTeW5jLCB0eXBlIENoaWxkUHJvY2VzcyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBpc0Fic29sdXRlLCByZXNvbHZlLCBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi9sb2cuanMnXG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcblxudHlwZSBFeGVjUmVzdWx0ID0ge1xuICBzdGRvdXQ6IHN0cmluZ1xuICBzdGRlcnI6IHN0cmluZ1xuICBjb2RlOiBudW1iZXJcbiAgaW50ZXJydXB0ZWQ6IGJvb2xlYW5cbn1cbnR5cGUgUXVldWVkQ29tbWFuZCA9IHtcbiAgY29tbWFuZDogc3RyaW5nXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgdGltZW91dD86IG51bWJlclxuICByZXNvbHZlOiAocmVzdWx0OiBFeGVjUmVzdWx0KSA9PiB2b2lkXG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZFxufVxuXG5jb25zdCBURU1QRklMRV9QUkVGSVggPSBvcy50bXBkaXIoKSArICcvY2xhdWRlLSdcbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDMwICogNjAgKiAxMDAwXG5jb25zdCBTSUdURVJNX0NPREUgPSAxNDMgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdURVJNXG5jb25zdCBGSUxFX1NVRkZJWEVTID0ge1xuICBTVEFUVVM6ICctc3RhdHVzJyxcbiAgU1RET1VUOiAnLXN0ZG91dCcsXG4gIFNUREVSUjogJy1zdGRlcnInLFxuICBDV0Q6ICctY3dkJyxcbn1cbmNvbnN0IFNIRUxMX0NPTkZJR1M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICcvYmluL2Jhc2gnOiAnLmJhc2hyYycsXG4gICcvYmluL3pzaCc6ICcuenNocmMnLFxufVxuXG5leHBvcnQgY2xhc3MgUGVyc2lzdGVudFNoZWxsIHtcbiAgcHJpdmF0ZSBjb21tYW5kUXVldWU6IFF1ZXVlZENvbW1hbmRbXSA9IFtdXG4gIHByaXZhdGUgaXNFeGVjdXRpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICBwcml2YXRlIHNoZWxsOiBDaGlsZFByb2Nlc3NcbiAgcHJpdmF0ZSBpc0FsaXZlOiBib29sZWFuID0gdHJ1ZVxuICBwcml2YXRlIGNvbW1hbmRJbnRlcnJ1cHRlZDogYm9vbGVhbiA9IGZhbHNlXG4gIHByaXZhdGUgc3RhdHVzRmlsZTogc3RyaW5nXG4gIHByaXZhdGUgc3Rkb3V0RmlsZTogc3RyaW5nXG4gIHByaXZhdGUgc3RkZXJyRmlsZTogc3RyaW5nXG4gIHByaXZhdGUgY3dkRmlsZTogc3RyaW5nXG4gIHByaXZhdGUgY3dkOiBzdHJpbmdcbiAgcHJpdmF0ZSBiaW5TaGVsbDogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoY3dkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJpblNoZWxsID0gcHJvY2Vzcy5lbnYuU0hFTEwgfHwgJy9iaW4vYmFzaCdcbiAgICB0aGlzLnNoZWxsID0gc3Bhd24odGhpcy5iaW5TaGVsbCwgWyctbCddLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgY3dkLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBHSVRfRURJVE9SOiAndHJ1ZScsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICB0aGlzLmN3ZCA9IGN3ZFxuXG4gICAgdGhpcy5zaGVsbC5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIC8vIFRPRE86IEl0IHdvdWxkIGJlIG5pY2UgdG8gYWxlcnQgdGhlIHVzZXIgdGhhdCBzaGVsbCBjcmFzaGVkXG4gICAgICAgIGxvZ0Vycm9yKGBTaGVsbCBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0gYW5kIHNpZ25hbCAke3NpZ25hbH1gKVxuICAgICAgICBsb2dFdmVudCgncGVyc2lzdGVudF9zaGVsbF9leGl0Jywge1xuICAgICAgICAgIGNvZGU6IGNvZGU/LnRvU3RyaW5nKCkgfHwgJ251bGwnLFxuICAgICAgICAgIHNpZ25hbDogc2lnbmFsIHx8ICdudWxsJyxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBbXG4gICAgICAgIHRoaXMuc3RhdHVzRmlsZSxcbiAgICAgICAgdGhpcy5zdGRvdXRGaWxlLFxuICAgICAgICB0aGlzLnN0ZGVyckZpbGUsXG4gICAgICAgIHRoaXMuY3dkRmlsZSxcbiAgICAgIF0pIHtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZSkpIHtcbiAgICAgICAgICBmcy51bmxpbmtTeW5jKGZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNBbGl2ZSA9IGZhbHNlXG4gICAgfSlcblxuICAgIGNvbnN0IGlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMHgxMDAwMClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5wYWRTdGFydCg0LCAnMCcpXG5cbiAgICB0aGlzLnN0YXR1c0ZpbGUgPSBURU1QRklMRV9QUkVGSVggKyBpZCArIEZJTEVfU1VGRklYRVMuU1RBVFVTXG4gICAgdGhpcy5zdGRvdXRGaWxlID0gVEVNUEZJTEVfUFJFRklYICsgaWQgKyBGSUxFX1NVRkZJWEVTLlNURE9VVFxuICAgIHRoaXMuc3RkZXJyRmlsZSA9IFRFTVBGSUxFX1BSRUZJWCArIGlkICsgRklMRV9TVUZGSVhFUy5TVERFUlJcbiAgICB0aGlzLmN3ZEZpbGUgPSBURU1QRklMRV9QUkVGSVggKyBpZCArIEZJTEVfU1VGRklYRVMuQ1dEXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIFt0aGlzLnN0YXR1c0ZpbGUsIHRoaXMuc3Rkb3V0RmlsZSwgdGhpcy5zdGRlcnJGaWxlXSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAnJylcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZSBDV0QgZmlsZSB3aXRoIGluaXRpYWwgZGlyZWN0b3J5XG4gICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmN3ZEZpbGUsIGN3ZClcbiAgICBjb25zdCBjb25maWdGaWxlID0gU0hFTExfQ09ORklHU1t0aGlzLmJpblNoZWxsXVxuICAgIGlmIChjb25maWdGaWxlKSB7XG4gICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IGpvaW4oaG9tZWRpcigpLCBjb25maWdGaWxlKVxuICAgICAgaWYgKGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XG4gICAgICAgIHRoaXMuc2VuZFRvU2hlbGwoYHNvdXJjZSAke2NvbmZpZ0ZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFBlcnNpc3RlbnRTaGVsbCB8IG51bGwgPSBudWxsXG5cbiAgc3RhdGljIHJlc3RhcnQoKSB7XG4gICAgaWYgKFBlcnNpc3RlbnRTaGVsbC5pbnN0YW5jZSkge1xuICAgICAgUGVyc2lzdGVudFNoZWxsLmluc3RhbmNlLmNsb3NlKClcbiAgICAgIFBlcnNpc3RlbnRTaGVsbC5pbnN0YW5jZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogUGVyc2lzdGVudFNoZWxsIHtcbiAgICBpZiAoIVBlcnNpc3RlbnRTaGVsbC5pbnN0YW5jZSB8fCAhUGVyc2lzdGVudFNoZWxsLmluc3RhbmNlLmlzQWxpdmUpIHtcbiAgICAgIFBlcnNpc3RlbnRTaGVsbC5pbnN0YW5jZSA9IG5ldyBQZXJzaXN0ZW50U2hlbGwocHJvY2Vzcy5jd2QoKSlcbiAgICB9XG4gICAgcmV0dXJuIFBlcnNpc3RlbnRTaGVsbC5pbnN0YW5jZVxuICB9XG5cbiAga2lsbENoaWxkcmVuKCkge1xuICAgIGNvbnN0IHBhcmVudFBpZCA9IHRoaXMuc2hlbGwucGlkXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNoaWxkUGlkcyA9IGV4ZWNTeW5jKGBwZ3JlcCAtUCAke3BhcmVudFBpZH1gKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKSAvLyBGaWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3NcblxuICAgICAgaWYgKGNoaWxkUGlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZ0V2ZW50KCdwZXJzaXN0ZW50X3NoZWxsX2NvbW1hbmRfaW50ZXJydXB0ZWQnLCB7XG4gICAgICAgICAgbnVtQ2hpbGRQcm9jZXNzZXM6IGNoaWxkUGlkcy5sZW5ndGgudG9TdHJpbmcoKSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2hpbGRQaWRzLmZvckVhY2gocGlkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwcm9jZXNzLmtpbGwoTnVtYmVyKHBpZCksICdTSUdURVJNJylcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dFcnJvcihgRmFpbGVkIHRvIGtpbGwgcHJvY2VzcyAke3BpZH06ICR7ZXJyb3J9YClcbiAgICAgICAgICBsb2dFdmVudCgncGVyc2lzdGVudF9zaGVsbF9raWxsX3Byb2Nlc3NfZXJyb3InLCB7XG4gICAgICAgICAgICBlcnJvcjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlLnN1YnN0cmluZygwLCAxMCksXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHBncmVwIHJldHVybnMgbm9uLXplcm8gd2hlbiBubyBwcm9jZXNzZXMgYXJlIGZvdW5kIC0gdGhpcyBpcyBleHBlY3RlZFxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmNvbW1hbmRJbnRlcnJ1cHRlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgY29tbWFuZHMgZnJvbSB0aGUgcXVldWUgb25lIGF0IGEgdGltZS5cbiAgICAgKiBDb25jdXJyZW5jeSBpbnZhcmlhbnRzOlxuICAgICAqIC0gT25seSBvbmUgaW5zdGFuY2UgcnVucyBhdCBhIHRpbWUgKGNvbnRyb2xsZWQgYnkgaXNFeGVjdXRpbmcpXG4gICAgICogLSBJcyB0aGUgb25seSBjYWxsZXIgb2YgdXBkYXRlQ3dkKCkgaW4gdGhlIHN5c3RlbVxuICAgICAqIC0gQ2FsbHMgdXBkYXRlQ3dkKCkgYWZ0ZXIgZWFjaCBjb21tYW5kIGNvbXBsZXRlc1xuICAgICAqIC0gRW5zdXJlcyBjb21tYW5kcyBleGVjdXRlIHNlcmlhbGx5IHZpYSB0aGUgcXVldWVcbiAgICAgKiAtIEhhbmRsZXMgaW50ZXJydXB0aW9uIHZpYSBhYm9ydFNpZ25hbCBieSBjYWxsaW5nIGtpbGxDaGlsZHJlbigpXG4gICAgICogLSBDbGVhbnMgdXAgYWJvcnRTaWduYWwgbGlzdGVuZXJzIGFmdGVyIGNvbW1hbmQgY29tcGxldGlvbiBvciBpbnRlcnJ1cHRpb25cbiAgICAgKi9cbiAgICBpZiAodGhpcy5pc0V4ZWN1dGluZyB8fCB0aGlzLmNvbW1hbmRRdWV1ZS5sZW5ndGggPT09IDApIHJldHVyblxuXG4gICAgdGhpcy5pc0V4ZWN1dGluZyA9IHRydWVcbiAgICBjb25zdCB7IGNvbW1hbmQsIGFib3J0U2lnbmFsLCB0aW1lb3V0LCByZXNvbHZlLCByZWplY3QgfSA9XG4gICAgICB0aGlzLmNvbW1hbmRRdWV1ZS5zaGlmdCgpIVxuXG4gICAgY29uc3Qga2lsbENoaWxkcmVuID0gKCkgPT4gdGhpcy5raWxsQ2hpbGRyZW4oKVxuICAgIGlmIChhYm9ydFNpZ25hbCkge1xuICAgICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBraWxsQ2hpbGRyZW4pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY18oY29tbWFuZCwgdGltZW91dClcblxuICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgY3dkIC0gaXQncyBoYW5kbGVkIGluIGV4ZWNfIHZpYSB0aGUgQ1dEIGZpbGVcblxuICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0V2ZW50KCdwZXJzaXN0ZW50X3NoZWxsX2NvbW1hbmRfZXJyb3InLCB7XG4gICAgICAgIGVycm9yOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDEwKSxcbiAgICAgIH0pXG4gICAgICByZWplY3QoZXJyb3IgYXMgRXJyb3IpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNFeGVjdXRpbmcgPSBmYWxzZVxuICAgICAgaWYgKGFib3J0U2lnbmFsKSB7XG4gICAgICAgIGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywga2lsbENoaWxkcmVuKVxuICAgICAgfVxuICAgICAgLy8gUHJvY2VzcyBuZXh0IGNvbW1hbmQgaW4gcXVldWVcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBleGVjKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICAgIHRpbWVvdXQ/OiBudW1iZXIsXG4gICk6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbW1hbmRRdWV1ZS5wdXNoKHsgY29tbWFuZCwgYWJvcnRTaWduYWwsIHRpbWVvdXQsIHJlc29sdmUsIHJlamVjdCB9KVxuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWNfKGNvbW1hbmQ6IHN0cmluZywgdGltZW91dD86IG51bWJlcik6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICAgIC8qKlxuICAgICAqIERpcmVjdCBjb21tYW5kIGV4ZWN1dGlvbiB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqIENvbmN1cnJlbmN5IGludmFyaWFudHM6XG4gICAgICogLSBOb3Qgc2FmZSBmb3IgY29uY3VycmVudCBjYWxscyAodXNlcyBzaGFyZWQgZmlsZXMpXG4gICAgICogLSBDYWxsZWQgb25seSB3aGVuIHF1ZXVlIGlzIGlkbGVcbiAgICAgKiAtIFJlbGllcyBvbiBmaWxlLWJhc2VkIElQQyB0byBoYW5kbGUgc2hlbGwgaW50ZXJhY3Rpb25cbiAgICAgKiAtIERvZXMgbm90IG1vZGlmeSB0aGUgY29tbWFuZCBxdWV1ZSBzdGF0ZVxuICAgICAqIC0gVHJhY2tzIGludGVycnVwdGlvbiBzdGF0ZSB2aWEgY29tbWFuZEludGVycnVwdGVkIGZsYWdcbiAgICAgKiAtIFJlc2V0cyBpbnRlcnJ1cHRpb24gc3RhdGUgYXQgc3RhcnQgb2YgbmV3IGNvbW1hbmRcbiAgICAgKiAtIFJlcG9ydHMgaW50ZXJydXB0aW9uIHN0YXR1cyBpbiByZXN1bHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeGl0IENvZGUgJiBDV0QgSGFuZGxpbmc6XG4gICAgICogLSBFeGVjdXRlcyBjb21tYW5kIGFuZCBpbW1lZGlhdGVseSBjYXB0dXJlcyBpdHMgZXhpdCBjb2RlIGludG8gYSBzaGVsbCB2YXJpYWJsZVxuICAgICAqIC0gVXBkYXRlcyB0aGUgQ1dEIGZpbGUgd2l0aCB0aGUgd29ya2luZyBkaXJlY3RvcnkgYWZ0ZXIgY2FwdHVyaW5nIGV4aXQgY29kZVxuICAgICAqIC0gV3JpdGVzIHRoZSBwcmVzZXJ2ZWQgZXhpdCBjb2RlIHRvIHRoZSBzdGF0dXMgZmlsZSBhcyB0aGUgZmluYWwgc3RlcFxuICAgICAqIC0gVGhpcyBzZXF1ZW5jZSBlbGltaW5hdGVzIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGV4aXQgY29kZSBjYXB0dXJlIGFuZCBDV0QgdXBkYXRlc1xuICAgICAqIC0gVGhlIHB3ZCgpIG1ldGhvZCByZWFkcyB0aGUgQ1dEIGZpbGUgZGlyZWN0bHkgZm9yIGN1cnJlbnQgZGlyZWN0b3J5IGluZm9cbiAgICAgKi9cbiAgICBjb25zdCBxdW90ZWRDb21tYW5kID0gc2hlbGxxdW90ZS5xdW90ZShbY29tbWFuZF0pXG5cbiAgICAvLyBDaGVjayB0aGUgc3ludGF4IG9mIHRoZSBjb21tYW5kXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKGAke3RoaXMuYmluU2hlbGx9IC1uIC1jICR7cXVvdGVkQ29tbWFuZH1gLCB7XG4gICAgICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICAgICAgdGltZW91dDogMTAwMCxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoc3RkZXJyKSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIGEgc3ludGF4IGVycm9yLCByZXR1cm4gYW4gZXJyb3IgYW5kIGxvZyBpdFxuICAgICAgY29uc3QgZXJyb3JTdHIgPVxuICAgICAgICB0eXBlb2Ygc3RkZXJyID09PSAnc3RyaW5nJyA/IHN0ZGVyciA6IFN0cmluZyhzdGRlcnIgfHwgJycpXG4gICAgICBsb2dFdmVudCgncGVyc2lzdGVudF9zaGVsbF9zeW50YXhfZXJyb3InLCB7XG4gICAgICAgIGVycm9yOiBlcnJvclN0ci5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBzdGRvdXQ6ICcnLFxuICAgICAgICBzdGRlcnI6IGVycm9yU3RyLFxuICAgICAgICBjb2RlOiAxMjgsXG4gICAgICAgIGludGVycnVwdGVkOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZFRpbWVvdXQgPSB0aW1lb3V0IHx8IERFRkFVTFRfVElNRU9VVFxuICAgIC8vIFJlc2V0IGludGVycnVwdGVkIHN0YXRlIGZvciBuZXcgY29tbWFuZFxuICAgIHRoaXMuY29tbWFuZEludGVycnVwdGVkID0gZmFsc2VcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RXhlY1Jlc3VsdD4ocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBUcnVuY2F0ZSBvdXRwdXQgZmlsZXNcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5zdGRvdXRGaWxlLCAnJylcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5zdGRlcnJGaWxlLCAnJylcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5zdGF0dXNGaWxlLCAnJylcbiAgICAgIC8vIEJyZWFrIHVwIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBjbGFyaXR5IHVzaW5nIGFuIGFycmF5IG9mIGNvbW1hbmRzXG4gICAgICBjb25zdCBjb21tYW5kUGFydHMgPSBbXVxuXG4gICAgICAvLyAxLiBFeGVjdXRlIHRoZSBtYWluIGNvbW1hbmQgd2l0aCByZWRpcmVjdGlvbnNcbiAgICAgIGNvbW1hbmRQYXJ0cy5wdXNoKFxuICAgICAgICBgZXZhbCAke3F1b3RlZENvbW1hbmR9IDwgL2Rldi9udWxsID4gJHt0aGlzLnN0ZG91dEZpbGV9IDI+ICR7dGhpcy5zdGRlcnJGaWxlfWAsXG4gICAgICApXG5cbiAgICAgIC8vIDIuIENhcHR1cmUgZXhpdCBjb2RlIGltbWVkaWF0ZWx5IGFmdGVyIGNvbW1hbmQgZXhlY3V0aW9uIHRvIGF2b2lkIGxvc2luZyBpdFxuICAgICAgY29tbWFuZFBhcnRzLnB1c2goYEVYRUNfRVhJVF9DT0RFPSQ/YClcblxuICAgICAgLy8gMy4gVXBkYXRlIENXRCBmaWxlXG4gICAgICBjb21tYW5kUGFydHMucHVzaChgcHdkID4gJHt0aGlzLmN3ZEZpbGV9YClcblxuICAgICAgLy8gNC4gV3JpdGUgdGhlIHByZXNlcnZlZCBleGl0IGNvZGUgdG8gc3RhdHVzIGZpbGUgdG8gYXZvaWQgcmFjZSB3aXRoIHB3ZFxuICAgICAgY29tbWFuZFBhcnRzLnB1c2goYGVjaG8gJEVYRUNfRVhJVF9DT0RFID4gJHt0aGlzLnN0YXR1c0ZpbGV9YClcblxuICAgICAgLy8gU2VuZCB0aGUgY29tYmluZWQgY29tbWFuZHMgYXMgYSBzaW5nbGUgb3BlcmF0aW9uIHRvIG1haW50YWluIGF0b21pY2l0eVxuICAgICAgdGhpcy5zZW5kVG9TaGVsbChjb21tYW5kUGFydHMuam9pbignXFxuJykpXG5cbiAgICAgIC8vIENoZWNrIGZvciBjb21tYW5kIGNvbXBsZXRpb24gb3IgdGltZW91dFxuICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICBjb25zdCBjaGVja0NvbXBsZXRpb24gPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHN0YXR1c0ZpbGVTaXplID0gMFxuICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHRoaXMuc3RhdHVzRmlsZSkpIHtcbiAgICAgICAgICAgIHN0YXR1c0ZpbGVTaXplID0gZnMuc3RhdFN5bmModGhpcy5zdGF0dXNGaWxlKS5zaXplXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhdHVzRmlsZVNpemUgPiAwIHx8XG4gICAgICAgICAgICBEYXRlLm5vdygpIC0gc3RhcnQgPiBjb21tYW5kVGltZW91dCB8fFxuICAgICAgICAgICAgdGhpcy5jb21tYW5kSW50ZXJydXB0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tDb21wbGV0aW9uKVxuICAgICAgICAgICAgY29uc3Qgc3Rkb3V0ID0gZnMuZXhpc3RzU3luYyh0aGlzLnN0ZG91dEZpbGUpXG4gICAgICAgICAgICAgID8gZnMucmVhZEZpbGVTeW5jKHRoaXMuc3Rkb3V0RmlsZSwgJ3V0ZjgnKVxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICBsZXQgc3RkZXJyID0gZnMuZXhpc3RzU3luYyh0aGlzLnN0ZGVyckZpbGUpXG4gICAgICAgICAgICAgID8gZnMucmVhZEZpbGVTeW5jKHRoaXMuc3RkZXJyRmlsZSwgJ3V0ZjgnKVxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICBsZXQgY29kZTogbnVtYmVyXG4gICAgICAgICAgICBpZiAoc3RhdHVzRmlsZVNpemUpIHtcbiAgICAgICAgICAgICAgY29kZSA9IE51bWJlcihmcy5yZWFkRmlsZVN5bmModGhpcy5zdGF0dXNGaWxlLCAndXRmOCcpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGltZW91dCBvY2N1cnJlZCAtIGtpbGwgYW55IHJ1bm5pbmcgcHJvY2Vzc2VzXG4gICAgICAgICAgICAgIHRoaXMua2lsbENoaWxkcmVuKClcbiAgICAgICAgICAgICAgY29kZSA9IFNJR1RFUk1fQ09ERVxuICAgICAgICAgICAgICBzdGRlcnIgKz0gKHN0ZGVyciA/ICdcXG4nIDogJycpICsgJ0NvbW1hbmQgZXhlY3V0aW9uIHRpbWVkIG91dCdcbiAgICAgICAgICAgICAgbG9nRXZlbnQoJ3BlcnNpc3RlbnRfc2hlbGxfY29tbWFuZF90aW1lb3V0Jywge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQuc3Vic3RyaW5nKDAsIDEwKSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiBjb21tYW5kVGltZW91dC50b1N0cmluZygpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgICAgc3RkZXJyLFxuICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICBpbnRlcnJ1cHRlZDogdGhpcy5jb21tYW5kSW50ZXJydXB0ZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIGZpbGUgc3lzdGVtIGVycm9ycyBkdXJpbmcgcG9sbGluZyAtIHRoZXkgYXJlIGV4cGVjdGVkXG4gICAgICAgICAgLy8gYXMgd2UgY2hlY2sgZm9yIGNvbXBsZXRpb24gYmVmb3JlIGZpbGVzIGV4aXN0XG4gICAgICAgIH1cbiAgICAgIH0sIDEwKSAvLyBpbmNyZWFzaW5nIHRoaXMgd2lsbCBpbnRyb2R1Y2UgbGF0ZW5jeVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHNlbmRUb1NoZWxsKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNoZWxsIS5zdGRpbiEud3JpdGUoY29tbWFuZCArICdcXG4nKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvclN0cmluZyA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFN0cmluZyhlcnJvciB8fCAnVW5rbm93biBlcnJvcicpXG4gICAgICBsb2dFcnJvcihgRXJyb3IgaW4gc2VuZFRvU2hlbGw6ICR7ZXJyb3JTdHJpbmd9YClcbiAgICAgIGxvZ0V2ZW50KCdwZXJzaXN0ZW50X3NoZWxsX3dyaXRlX2Vycm9yJywge1xuICAgICAgICBlcnJvcjogZXJyb3JTdHJpbmcuc3Vic3RyaW5nKDAsIDEwMCksXG4gICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQuc3Vic3RyaW5nKDAsIDMwKSxcbiAgICAgIH0pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHB3ZCgpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuZXdDd2QgPSBmcy5yZWFkRmlsZVN5bmModGhpcy5jd2RGaWxlLCAndXRmOCcpLnRyaW0oKVxuICAgICAgaWYgKG5ld0N3ZCkge1xuICAgICAgICB0aGlzLmN3ZCA9IG5ld0N3ZFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihgU2hlbGwgcHdkIGVycm9yICR7ZXJyb3J9YClcbiAgICB9XG4gICAgLy8gQWx3YXlzIHJldHVybiB0aGUgY2FjaGVkIHZhbHVlXG4gICAgcmV0dXJuIHRoaXMuY3dkXG4gIH1cblxuICBhc3luYyBzZXRDd2QoY3dkOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGlzQWJzb2x1dGUoY3dkKSA/IGN3ZCA6IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY3dkKVxuICAgIGlmICghZXhpc3RzU3luYyhyZXNvbHZlZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBcIiR7cmVzb2x2ZWR9XCIgZG9lcyBub3QgZXhpc3RgKVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLmV4ZWMoYGNkICR7cmVzb2x2ZWR9YClcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc2hlbGwhLnN0ZGluIS5lbmQoKVxuICAgIHRoaXMuc2hlbGwua2lsbCgpXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgY2FwdHVyZUV4Y2VwdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL3NlbnRyeS5qcydcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgZW52UGF0aHMgZnJvbSAnZW52LXBhdGhzJ1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnNQcm9taXNlcyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgeyBMb2dPcHRpb24sIFNlcmlhbGl6ZWRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMvbG9ncy5qcydcblxuY29uc3QgSU5fTUVNT1JZX0VSUk9SX0xPRzogQXJyYXk8e1xuICBlcnJvcjogc3RyaW5nXG4gIHRpbWVzdGFtcDogc3RyaW5nXG59PiA9IFtdXG5jb25zdCBNQVhfSU5fTUVNT1JZX0VSUk9SUyA9IDEwMCAvLyBMaW1pdCB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXNcblxuZXhwb3J0IGNvbnN0IFNFU1NJT05fSUQgPSByYW5kb21VVUlEKClcblxuY29uc3QgcGF0aHMgPSBlbnZQYXRocygnY2xhdWRlLWNsaScpXG5cbmZ1bmN0aW9uIGdldFByb2plY3REaXIoY3dkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3dkLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnLScpXG59XG5cbmV4cG9ydCBjb25zdCBDQUNIRV9QQVRIUyA9IHtcbiAgZXJyb3JzOiAoKSA9PiBqb2luKHBhdGhzLmNhY2hlLCBnZXRQcm9qZWN0RGlyKHByb2Nlc3MuY3dkKCkpLCAnZXJyb3JzJyksXG4gIG1lc3NhZ2VzOiAoKSA9PiBqb2luKHBhdGhzLmNhY2hlLCBnZXRQcm9qZWN0RGlyKHByb2Nlc3MuY3dkKCkpLCAnbWVzc2FnZXMnKSxcbiAgbWNwTG9nczogKHNlcnZlck5hbWU6IHN0cmluZykgPT5cbiAgICBqb2luKHBhdGhzLmNhY2hlLCBnZXRQcm9qZWN0RGlyKHByb2Nlc3MuY3dkKCkpLCBgbWNwLWxvZ3MtJHtzZXJ2ZXJOYW1lfWApLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvRmlsZW5hbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCAnLScpXG59XG5cbmNvbnN0IERBVEUgPSBkYXRlVG9GaWxlbmFtZShuZXcgRGF0ZSgpKVxuXG5mdW5jdGlvbiBnZXRFcnJvcnNQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKENBQ0hFX1BBVEhTLmVycm9ycygpLCBEQVRFICsgJy50eHQnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZXNQYXRoKFxuICBtZXNzYWdlTG9nTmFtZTogc3RyaW5nLFxuICBmb3JrTnVtYmVyOiBudW1iZXIsXG4gIHNpZGVjaGFpbk51bWJlcjogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oXG4gICAgQ0FDSEVfUEFUSFMubWVzc2FnZXMoKSxcbiAgICBgJHttZXNzYWdlTG9nTmFtZX0ke2ZvcmtOdW1iZXIgPiAwID8gYC0ke2ZvcmtOdW1iZXJ9YCA6ICcnfSR7XG4gICAgICBzaWRlY2hhaW5OdW1iZXIgPiAwID8gYC1zaWRlY2hhaW4tJHtzaWRlY2hhaW5OdW1iZXJ9YCA6ICcnXG4gICAgfS5qc29uYCxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvclN0ciA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgfHwgZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcblxuICAgIGNvbnN0IGVycm9ySW5mbyA9IHtcbiAgICAgIGVycm9yOiBlcnJvclN0cixcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH1cblxuICAgIGlmIChJTl9NRU1PUllfRVJST1JfTE9HLmxlbmd0aCA+PSBNQVhfSU5fTUVNT1JZX0VSUk9SUykge1xuICAgICAgSU5fTUVNT1JZX0VSUk9SX0xPRy5zaGlmdCgpIC8vIFJlbW92ZSBvbGRlc3QgZXJyb3JcbiAgICB9XG4gICAgSU5fTUVNT1JZX0VSUk9SX0xPRy5wdXNoKGVycm9ySW5mbylcblxuICAgIGFwcGVuZFRvTG9nKGdldEVycm9yc1BhdGgoKSwge1xuICAgICAgZXJyb3I6IGVycm9yU3RyLFxuICAgIH0pXG4gIH0gY2F0Y2gge1xuICAgIC8vIHBhc3NcbiAgfVxuICAvLyBBbHNvIHNlbmQgdG8gU2VudHJ5IHdpdGggc2Vzc2lvbiBJRCwgYnV0IGRvbid0IGF3YWl0XG4gIGNhcHR1cmVFeGNlcHRpb24oZXJyb3IpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvcnNMb2coKTogb2JqZWN0W10ge1xuICByZXR1cm4gcmVhZExvZyhnZXRFcnJvcnNQYXRoKCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbk1lbW9yeUVycm9ycygpOiBvYmplY3RbXSB7XG4gIHJldHVybiBbLi4uSU5fTUVNT1JZX0VSUk9SX0xPR11cbn1cblxuZnVuY3Rpb24gcmVhZExvZyhwYXRoOiBzdHJpbmcpOiBvYmplY3RbXSB7XG4gIGlmICghZXhpc3RzU3luYyhwYXRoKSkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGY4JykpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFRvTG9nKHBhdGg6IHN0cmluZywgbWVzc2FnZTogb2JqZWN0KTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdleHRlcm5hbCcpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGRpciA9IGRpcm5hbWUocGF0aClcbiAgaWYgKCFleGlzdHNTeW5jKGRpcikpIHtcbiAgICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICB9XG5cbiAgLy8gQ3JlYXRlIG1lc3NhZ2VzIGZpbGUgd2l0aCBlbXB0eSBhcnJheSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gIGlmICghZXhpc3RzU3luYyhwYXRoKSkge1xuICAgIHdyaXRlRmlsZVN5bmMocGF0aCwgJ1tdJywgJ3V0ZjgnKVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSByZWFkTG9nKHBhdGgpXG4gIGNvbnN0IG1lc3NhZ2VXaXRoVGltZXN0YW1wID0ge1xuICAgIC4uLm1lc3NhZ2UsXG4gICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIHVzZXJUeXBlOiBwcm9jZXNzLmVudi5VU0VSX1RZUEUsXG4gICAgc2Vzc2lvbklkOiBTRVNTSU9OX0lELFxuICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHZlcnNpb246IE1BQ1JPLlZFUlNJT04sXG4gIH1cbiAgbWVzc2FnZXMucHVzaChtZXNzYWdlV2l0aFRpbWVzdGFtcClcblxuICB3cml0ZUZpbGVTeW5jKHBhdGgsIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLCBudWxsLCAyKSwgJ3V0ZjgnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlTG9nKHBhdGg6IHN0cmluZywgbWVzc2FnZXM6IG9iamVjdFtdKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdleHRlcm5hbCcpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghbWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkaXIgPSBkaXJuYW1lKHBhdGgpXG4gIGlmICghZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzV2l0aE1ldGFkYXRhID0gbWVzc2FnZXMubWFwKG1lc3NhZ2UgPT4gKHtcbiAgICAuLi5tZXNzYWdlLFxuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB1c2VyVHlwZTogcHJvY2Vzcy5lbnYuVVNFUl9UWVBFLFxuICAgIHNlc3Npb25JZDogU0VTU0lPTl9JRCxcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB2ZXJzaW9uOiBNQUNSTy5WRVJTSU9OLFxuICB9KSlcblxuICB3cml0ZUZpbGVTeW5jKHBhdGgsIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzV2l0aE1ldGFkYXRhLCBudWxsLCAyKSwgJ3V0ZjgnKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZExvZ0xpc3QoXG4gIHBhdGggPSBDQUNIRV9QQVRIUy5tZXNzYWdlcygpLFxuKTogUHJvbWlzZTxMb2dPcHRpb25bXT4ge1xuICBpZiAoIWV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICBsb2dFcnJvcihgTm8gbG9ncyBmb3VuZCBhdCAke3BhdGh9YClcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZnNQcm9taXNlcy5yZWFkZGlyKHBhdGgpXG4gIGNvbnN0IGxvZ0RhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoYXN5bmMgKGZpbGUsIGkpID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihwYXRoLCBmaWxlKVxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzUHJvbWlzZXMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGY4JylcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBTZXJpYWxpemVkTWVzc2FnZVtdXG4gICAgICBjb25zdCBmaXJzdE1lc3NhZ2UgPSBtZXNzYWdlc1swXVxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgICAgY29uc3QgZmlyc3RQcm9tcHQgPVxuICAgICAgICBmaXJzdE1lc3NhZ2U/LnR5cGUgPT09ICd1c2VyJyAmJlxuICAgICAgICB0eXBlb2YgZmlyc3RNZXNzYWdlPy5tZXNzYWdlPy5jb250ZW50ID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gZmlyc3RNZXNzYWdlPy5tZXNzYWdlPy5jb250ZW50XG4gICAgICAgICAgOiAnTm8gcHJvbXB0J1xuXG4gICAgICBjb25zdCB7IGRhdGUsIGZvcmtOdW1iZXIsIHNpZGVjaGFpbk51bWJlciB9ID0gcGFyc2VMb2dGaWxlbmFtZShmaWxlKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgZm9ya051bWJlcixcbiAgICAgICAgZnVsbFBhdGgsXG4gICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICB2YWx1ZTogaSwgLy8gaGFjazogb3ZlcndyaXR0ZW4gYWZ0ZXIgc29ydGluZywgcmlnaHQgYmVsb3cgdGhpc1xuICAgICAgICBjcmVhdGVkOiBwYXJzZUlTT1N0cmluZyhmaXJzdE1lc3NhZ2U/LnRpbWVzdGFtcCB8fCBkYXRlKSxcbiAgICAgICAgbW9kaWZpZWQ6IGxhc3RNZXNzYWdlPy50aW1lc3RhbXBcbiAgICAgICAgICA/IHBhcnNlSVNPU3RyaW5nKGxhc3RNZXNzYWdlLnRpbWVzdGFtcClcbiAgICAgICAgICA6IHBhcnNlSVNPU3RyaW5nKGRhdGUpLFxuICAgICAgICBmaXJzdFByb21wdDpcbiAgICAgICAgICBmaXJzdFByb21wdC5zcGxpdCgnXFxuJylbMF0/LnNsaWNlKDAsIDUwKSArXG4gICAgICAgICAgICAoZmlyc3RQcm9tcHQubGVuZ3RoID4gNTAgPyAn4oCmJyA6ICcnKSB8fCAnTm8gcHJvbXB0JyxcbiAgICAgICAgbWVzc2FnZUNvdW50OiBtZXNzYWdlcy5sZW5ndGgsXG4gICAgICAgIHNpZGVjaGFpbk51bWJlcixcbiAgICAgIH1cbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiBzb3J0TG9ncyhsb2dEYXRhLmZpbHRlcihfID0+IF8ubWVzc2FnZXMubGVuZ3RoKSkubWFwKChfLCBpKSA9PiAoe1xuICAgIC4uLl8sXG4gICAgdmFsdWU6IGksXG4gIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMb2dGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKToge1xuICBkYXRlOiBzdHJpbmdcbiAgZm9ya051bWJlcjogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHNpZGVjaGFpbk51bWJlcjogbnVtYmVyIHwgdW5kZWZpbmVkXG59IHtcbiAgY29uc3QgYmFzZSA9IGZpbGVuYW1lLnNwbGl0KCcuJylbMF0hXG4gIC8vIERlZmF1bHQgdGltZXN0YW1wIGZvcm1hdCBoYXMgNiBzZWdtZW50czogMjAyNS0wMS0yN1QwMS0zMS0zNS0xMDRaXG4gIGNvbnN0IHNlZ21lbnRzID0gYmFzZS5zcGxpdCgnLScpXG4gIGNvbnN0IGhhc1NpZGVjaGFpbiA9IGJhc2UuaW5jbHVkZXMoJy1zaWRlY2hhaW4tJylcblxuICBsZXQgZGF0ZSA9IGJhc2VcbiAgbGV0IGZvcmtOdW1iZXI6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBsZXQgc2lkZWNoYWluTnVtYmVyOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICBpZiAoaGFzU2lkZWNoYWluKSB7XG4gICAgY29uc3Qgc2lkZWNoYWluSW5kZXggPSBzZWdtZW50cy5pbmRleE9mKCdzaWRlY2hhaW4nKVxuICAgIHNpZGVjaGFpbk51bWJlciA9IE51bWJlcihzZWdtZW50c1tzaWRlY2hhaW5JbmRleCArIDFdKVxuICAgIC8vIEZvcmsgbnVtYmVyIGlzIGJlZm9yZSBzaWRlY2hhaW4gaWYgZXhpc3RzXG4gICAgaWYgKHNpZGVjaGFpbkluZGV4ID4gNikge1xuICAgICAgZm9ya051bWJlciA9IE51bWJlcihzZWdtZW50c1tzaWRlY2hhaW5JbmRleCAtIDFdKVxuICAgICAgZGF0ZSA9IHNlZ21lbnRzLnNsaWNlKDAsIDYpLmpvaW4oJy0nKVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gc2VnbWVudHMuc2xpY2UoMCwgNikuam9pbignLScpXG4gICAgfVxuICB9IGVsc2UgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDYpIHtcbiAgICAvLyBIYXMgZm9yayBudW1iZXJcbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IE51bWJlcihzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSlcbiAgICBmb3JrTnVtYmVyID0gbGFzdFNlZ21lbnQgPj0gMCA/IGxhc3RTZWdtZW50IDogdW5kZWZpbmVkXG4gICAgZGF0ZSA9IHNlZ21lbnRzLnNsaWNlKDAsIDYpLmpvaW4oJy0nKVxuICB9IGVsc2Uge1xuICAgIC8vIEJhc2ljIHRpbWVzdGFtcCBvbmx5XG4gICAgZGF0ZSA9IGJhc2VcbiAgfVxuXG4gIHJldHVybiB7IGRhdGUsIGZvcmtOdW1iZXIsIHNpZGVjaGFpbk51bWJlciB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlTG9nRm9ya051bWJlcihcbiAgZGF0ZTogc3RyaW5nLFxuICBmb3JrTnVtYmVyOiBudW1iZXIsXG4gIC8vIE1haW4gY2hhaW4gaGFzIHNpZGVjaGFpbk51bWJlciAwXG4gIHNpZGVjaGFpbk51bWJlcjogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgd2hpbGUgKGV4aXN0c1N5bmMoZ2V0TWVzc2FnZXNQYXRoKGRhdGUsIGZvcmtOdW1iZXIsIHNpZGVjaGFpbk51bWJlcikpKSB7XG4gICAgZm9ya051bWJlcisrXG4gIH1cbiAgcmV0dXJuIGZvcmtOdW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRBdmFpbGFibGVMb2dTaWRlY2hhaW5OdW1iZXIoXG4gIGRhdGU6IHN0cmluZyxcbiAgZm9ya051bWJlcjogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgbGV0IHNpZGVjaGFpbk51bWJlciA9IDFcbiAgd2hpbGUgKGV4aXN0c1N5bmMoZ2V0TWVzc2FnZXNQYXRoKGRhdGUsIGZvcmtOdW1iZXIsIHNpZGVjaGFpbk51bWJlcikpKSB7XG4gICAgc2lkZWNoYWluTnVtYmVyKytcbiAgfVxuICByZXR1cm4gc2lkZWNoYWluTnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JrTnVtYmVyRnJvbUZpbGVuYW1lKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYmFzZSA9IGZpbGVuYW1lLnNwbGl0KCcuJylbMF0hXG4gIGNvbnN0IHNlZ21lbnRzID0gYmFzZS5zcGxpdCgnLScpXG4gIGNvbnN0IGhhc1NpZGVjaGFpbiA9IGJhc2UuaW5jbHVkZXMoJy1zaWRlY2hhaW4tJylcblxuICBpZiAoaGFzU2lkZWNoYWluKSB7XG4gICAgY29uc3Qgc2lkZWNoYWluSW5kZXggPSBzZWdtZW50cy5pbmRleE9mKCdzaWRlY2hhaW4nKVxuICAgIGlmIChzaWRlY2hhaW5JbmRleCA+IDYpIHtcbiAgICAgIHJldHVybiBOdW1iZXIoc2VnbWVudHNbc2lkZWNoYWluSW5kZXggLSAxXSlcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDYpIHtcbiAgICBjb25zdCBsYXN0TnVtYmVyID0gTnVtYmVyKHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdKVxuICAgIHJldHVybiBsYXN0TnVtYmVyID49IDAgPyBsYXN0TnVtYmVyIDogdW5kZWZpbmVkXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydExvZ3MobG9nczogTG9nT3B0aW9uW10pOiBMb2dPcHRpb25bXSB7XG4gIHJldHVybiBsb2dzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAvLyBTb3J0IGJ5IG1vZGlmaWVkIGRhdGUgKG5ld2VzdCBmaXJzdClcbiAgICBjb25zdCBtb2RpZmllZERpZmYgPSBiLm1vZGlmaWVkLmdldFRpbWUoKSAtIGEubW9kaWZpZWQuZ2V0VGltZSgpXG4gICAgaWYgKG1vZGlmaWVkRGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIG1vZGlmaWVkRGlmZlxuICAgIH1cblxuICAgIC8vIElmIG1vZGlmaWVkIGRhdGVzIGFyZSBlcXVhbCwgc29ydCBieSBjcmVhdGVkIGRhdGVcbiAgICBjb25zdCBjcmVhdGVkRGlmZiA9IGIuY3JlYXRlZC5nZXRUaW1lKCkgLSBhLmNyZWF0ZWQuZ2V0VGltZSgpXG4gICAgaWYgKGNyZWF0ZWREaWZmICE9PSAwKSB7XG4gICAgICByZXR1cm4gY3JlYXRlZERpZmZcbiAgICB9XG5cbiAgICAvLyBJZiBib3RoIGRhdGVzIGFyZSBlcXVhbCwgc29ydCBieSBmb3JrIG51bWJlclxuICAgIHJldHVybiAoYi5mb3JrTnVtYmVyID8/IDApIC0gKGEuZm9ya051bWJlciA/PyAwKVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZShub3cpXG4gIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKVxuXG4gIGNvbnN0IGlzVG9kYXkgPSBkYXRlLnRvRGF0ZVN0cmluZygpID09PSBub3cudG9EYXRlU3RyaW5nKClcbiAgY29uc3QgaXNZZXN0ZXJkYXkgPSBkYXRlLnRvRGF0ZVN0cmluZygpID09PSB5ZXN0ZXJkYXkudG9EYXRlU3RyaW5nKClcblxuICBjb25zdCB0aW1lU3RyID0gZGF0ZVxuICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBob3VyMTI6IHRydWUsXG4gICAgfSlcbiAgICAudG9Mb3dlckNhc2UoKVxuXG4gIGlmIChpc1RvZGF5KSB7XG4gICAgcmV0dXJuIGBUb2RheSBhdCAke3RpbWVTdHJ9YFxuICB9IGVsc2UgaWYgKGlzWWVzdGVyZGF5KSB7XG4gICAgcmV0dXJuIGBZZXN0ZXJkYXkgYXQgJHt0aW1lU3RyfWBcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICB9KSArIGAgYXQgJHt0aW1lU3RyfWBcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPU3RyaW5nKHM6IHN0cmluZyk6IERhdGUge1xuICBjb25zdCBiID0gcy5zcGxpdCgvXFxEKy8pXG4gIHJldHVybiBuZXcgRGF0ZShcbiAgICBEYXRlLlVUQyhcbiAgICAgIHBhcnNlSW50KGJbMF0hLCAxMCksXG4gICAgICBwYXJzZUludChiWzFdISwgMTApIC0gMSxcbiAgICAgIHBhcnNlSW50KGJbMl0hLCAxMCksXG4gICAgICBwYXJzZUludChiWzNdISwgMTApLFxuICAgICAgcGFyc2VJbnQoYls0XSEsIDEwKSxcbiAgICAgIHBhcnNlSW50KGJbNV0hLCAxMCksXG4gICAgICBwYXJzZUludChiWzZdISwgMTApLFxuICAgICksXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ01DUEVycm9yKHNlcnZlck5hbWU6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsb2dEaXIgPSBDQUNIRV9QQVRIUy5tY3BMb2dzKHNlcnZlck5hbWUpXG4gICAgY29uc3QgZXJyb3JTdHIgPVxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIHx8IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG5cbiAgICBjb25zdCBsb2dGaWxlID0gam9pbihsb2dEaXIsIERBVEUgKyAnLnR4dCcpXG5cbiAgICBpZiAoIWV4aXN0c1N5bmMobG9nRGlyKSkge1xuICAgICAgbWtkaXJTeW5jKGxvZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAoIWV4aXN0c1N5bmMobG9nRmlsZSkpIHtcbiAgICAgIHdyaXRlRmlsZVN5bmMobG9nRmlsZSwgJ1tdJywgJ3V0ZjgnKVxuICAgIH1cblxuICAgIGNvbnN0IGVycm9ySW5mbyA9IHtcbiAgICAgIGVycm9yOiBlcnJvclN0cixcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHNlc3Npb25JZDogU0VTU0lPTl9JRCxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlcyA9IHJlYWRMb2cobG9nRmlsZSlcbiAgICBtZXNzYWdlcy5wdXNoKGVycm9ySW5mbylcbiAgICB3cml0ZUZpbGVTeW5jKGxvZ0ZpbGUsIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLCBudWxsLCAyKSwgJ3V0ZjgnKVxuICB9IGNhdGNoIHtcbiAgICAvLyBTaWxlbnRseSBmYWlsXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmNvbnN0IGhvbWVkaXIgPSBvcy5ob21lZGlyKCk7XG5jb25zdCB0bXBkaXIgPSBvcy50bXBkaXIoKTtcbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxuY29uc3QgbWFjb3MgPSBuYW1lID0+IHtcblx0Y29uc3QgbGlicmFyeSA9IHBhdGguam9pbihob21lZGlyLCAnTGlicmFyeScpO1xuXG5cdHJldHVybiB7XG5cdFx0ZGF0YTogcGF0aC5qb2luKGxpYnJhcnksICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgbmFtZSksXG5cdFx0Y29uZmlnOiBwYXRoLmpvaW4obGlicmFyeSwgJ1ByZWZlcmVuY2VzJywgbmFtZSksXG5cdFx0Y2FjaGU6IHBhdGguam9pbihsaWJyYXJ5LCAnQ2FjaGVzJywgbmFtZSksXG5cdFx0bG9nOiBwYXRoLmpvaW4obGlicmFyeSwgJ0xvZ3MnLCBuYW1lKSxcblx0XHR0ZW1wOiBwYXRoLmpvaW4odG1wZGlyLCBuYW1lKSxcblx0fTtcbn07XG5cbmNvbnN0IHdpbmRvd3MgPSBuYW1lID0+IHtcblx0Y29uc3QgYXBwRGF0YSA9IGVudi5BUFBEQVRBIHx8IHBhdGguam9pbihob21lZGlyLCAnQXBwRGF0YScsICdSb2FtaW5nJyk7XG5cdGNvbnN0IGxvY2FsQXBwRGF0YSA9IGVudi5MT0NBTEFQUERBVEEgfHwgcGF0aC5qb2luKGhvbWVkaXIsICdBcHBEYXRhJywgJ0xvY2FsJyk7XG5cblx0cmV0dXJuIHtcblx0XHQvLyBEYXRhL2NvbmZpZy9jYWNoZS9sb2cgYXJlIGludmVudGVkIGJ5IG1lIGFzIFdpbmRvd3MgaXNuJ3Qgb3BpbmlvbmF0ZWQgYWJvdXQgdGhpc1xuXHRcdGRhdGE6IHBhdGguam9pbihsb2NhbEFwcERhdGEsIG5hbWUsICdEYXRhJyksXG5cdFx0Y29uZmlnOiBwYXRoLmpvaW4oYXBwRGF0YSwgbmFtZSwgJ0NvbmZpZycpLFxuXHRcdGNhY2hlOiBwYXRoLmpvaW4obG9jYWxBcHBEYXRhLCBuYW1lLCAnQ2FjaGUnKSxcblx0XHRsb2c6IHBhdGguam9pbihsb2NhbEFwcERhdGEsIG5hbWUsICdMb2cnKSxcblx0XHR0ZW1wOiBwYXRoLmpvaW4odG1wZGlyLCBuYW1lKSxcblx0fTtcbn07XG5cbi8vIGh0dHBzOi8vc3BlY2lmaWNhdGlvbnMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWxcbmNvbnN0IGxpbnV4ID0gbmFtZSA9PiB7XG5cdGNvbnN0IHVzZXJuYW1lID0gcGF0aC5iYXNlbmFtZShob21lZGlyKTtcblxuXHRyZXR1cm4ge1xuXHRcdGRhdGE6IHBhdGguam9pbihlbnYuWERHX0RBVEFfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5sb2NhbCcsICdzaGFyZScpLCBuYW1lKSxcblx0XHRjb25maWc6IHBhdGguam9pbihlbnYuWERHX0NPTkZJR19IT01FIHx8IHBhdGguam9pbihob21lZGlyLCAnLmNvbmZpZycpLCBuYW1lKSxcblx0XHRjYWNoZTogcGF0aC5qb2luKGVudi5YREdfQ0FDSEVfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5jYWNoZScpLCBuYW1lKSxcblx0XHQvLyBodHRwczovL3dpa2kuZGViaWFuLm9yZy9YREdCYXNlRGlyZWN0b3J5U3BlY2lmaWNhdGlvbiNzdGF0ZVxuXHRcdGxvZzogcGF0aC5qb2luKGVudi5YREdfU1RBVEVfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5sb2NhbCcsICdzdGF0ZScpLCBuYW1lKSxcblx0XHR0ZW1wOiBwYXRoLmpvaW4odG1wZGlyLCB1c2VybmFtZSwgbmFtZSksXG5cdH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnZQYXRocyhuYW1lLCB7c3VmZml4ID0gJ25vZGVqcyd9ID0ge30pIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgc3RyaW5nLCBnb3QgJHt0eXBlb2YgbmFtZX1gKTtcblx0fVxuXG5cdGlmIChzdWZmaXgpIHtcblx0XHQvLyBBZGQgc3VmZml4IHRvIHByZXZlbnQgcG9zc2libGUgY29uZmxpY3Qgd2l0aCBuYXRpdmUgYXBwc1xuXHRcdG5hbWUgKz0gYC0ke3N1ZmZpeH1gO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG5cdFx0cmV0dXJuIG1hY29zKG5hbWUpO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gd2luZG93cyhuYW1lKTtcblx0fVxuXG5cdHJldHVybiBsaW51eChuYW1lKTtcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7XG4gIFN0YXRzaWdDbGllbnQsXG4gIFN0YXRzaWdPcHRpb25zLFxuICBTdGF0c2lnRXZlbnQsXG4gIExvZ0xldmVsLFxufSBmcm9tICdAc3RhdHNpZy9qcy1jbGllbnQnXG5pbXBvcnQgJy4vYnJvd3Nlck1vY2tzLmpzJyAvLyBJbml0aWFsaXplIGJyb3dzZXIgbW9ja3NcbmltcG9ydCB7IEZpbGVTeXN0ZW1TdG9yYWdlUHJvdmlkZXIgfSBmcm9tICcuL3N0YXRzaWdTdG9yYWdlLmpzJ1xuaW1wb3J0IHsgU1RBVFNJR19DTElFTlRfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzL2tleXMuanMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi91dGlscy9lbnYuanMnXG5pbXBvcnQgeyBnZXRVc2VyIH0gZnJvbSAnLi4vdXRpbHMvdXNlci5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgU0VTU0lPTl9JRCB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGdldEJldGFzIH0gZnJvbSAnLi4vdXRpbHMvYmV0YXMuanMnXG5pbXBvcnQgeyBnZXRJc0dpdCB9IGZyb20gJy4uL3V0aWxzL2dpdC5qcydcbmltcG9ydCB7IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC5qcydcblxuY29uc3QgZ2F0ZVZhbHVlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fVxubGV0IGNsaWVudDogU3RhdHNpZ0NsaWVudCB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplU3RhdHNpZyA9IG1lbW9pemUoXG4gIGFzeW5jICgpOiBQcm9taXNlPFN0YXRzaWdDbGllbnQgfCBudWxsPiA9PiB7XG4gICAgaWYgKGVudi5pc0NJIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXIoKVxuICAgIGNvbnN0IG9wdGlvbnM6IFN0YXRzaWdPcHRpb25zID0ge1xuICAgICAgbmV0d29ya0NvbmZpZzoge1xuICAgICAgICBhcGk6ICdodHRwczovL3N0YXRzaWcuYW50aHJvcGljLmNvbS92MS8nLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIHRpZXI6XG4gICAgICAgICAgZW52LmlzQ0kgfHxcbiAgICAgICAgICBbJ3Rlc3QnLCAnZGV2ZWxvcG1lbnQnXS5pbmNsdWRlcyhwcm9jZXNzLmVudi5OT0RFX0VOViA/PyAnJylcbiAgICAgICAgICAgID8gJ2RldidcbiAgICAgICAgICAgIDogJ3Byb2R1Y3Rpb24nLFxuICAgICAgfSxcbiAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5Ob25lLFxuICAgICAgc3RvcmFnZVByb3ZpZGVyOiBuZXcgRmlsZVN5c3RlbVN0b3JhZ2VQcm92aWRlcigpLFxuICAgIH1cblxuICAgIGNsaWVudCA9IG5ldyBTdGF0c2lnQ2xpZW50KFNUQVRTSUdfQ0xJRU5UX0tFWSwgdXNlciwgb3B0aW9ucylcbiAgICBjbGllbnQub24oJ2Vycm9yJywgZXJyb3JFdmVudCA9PiB7XG4gICAgICBsb2dFcnJvcihgU3RhdHNpZyBlcnJvcjogJHtlcnJvckV2ZW50fWApXG4gICAgfSlcbiAgICBhd2FpdCBjbGllbnQuaW5pdGlhbGl6ZUFzeW5jKClcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICAgICAgY2xpZW50Py5mbHVzaCgpXG4gICAgfSlcbiAgICByZXR1cm4gY2xpZW50XG4gIH0sXG4pXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFdmVudChcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIG1ldGFkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuKTogdm9pZCB7XG4gIGlmIChlbnYuaXNDSSB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgUHJvbWlzZS5hbGwoW1xuICAgIGluaXRpYWxpemVTdGF0c2lnKCksXG4gICAgZ2V0SXNHaXQoKSxcbiAgICBnZXRCZXRhcygpLFxuICAgIG1ldGFkYXRhLm1vZGVsID8gUHJvbWlzZS5yZXNvbHZlKG1ldGFkYXRhLm1vZGVsKSA6IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKSxcbiAgXSkudGhlbigoW3N0YXRzaWdDbGllbnQsIGlzR2l0LCBiZXRhcywgbW9kZWxdKSA9PiB7XG4gICAgaWYgKCFzdGF0c2lnQ2xpZW50KSByZXR1cm5cblxuICAgIGNvbnN0IGV2ZW50TWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICAgIG1vZGVsLFxuICAgICAgc2Vzc2lvbklkOiBTRVNTSU9OX0lELFxuICAgICAgdXNlclR5cGU6IHByb2Nlc3MuZW52LlVTRVJfVFlQRSB8fCAnJyxcbiAgICAgIC4uLihwcm9jZXNzLmVudi5TV0VfQkVOQ0hfUlVOX0lEXG4gICAgICAgID8geyBzd2VCZW5jaElkOiBwcm9jZXNzLmVudi5TV0VfQkVOQ0hfUlVOX0lEIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oYmV0YXMubGVuZ3RoID4gMCA/IHsgYmV0YXM6IGJldGFzLmpvaW4oJywnKSB9IDoge30pLFxuICAgICAgZW52OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlzR2l0LFxuICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICBub2RlVmVyc2lvbjogZW52Lm5vZGVWZXJzaW9uLFxuICAgICAgICB0ZXJtaW5hbDogZW52LnRlcm1pbmFsLFxuICAgICAgICB2ZXJzaW9uOiBNQUNSTy5WRVJTSU9OLFxuICAgICAgfSksXG4gICAgfVxuXG4gICAgLy8gRGVidWcgbG9nZ2luZyB3aGVuIGRlYnVnIG1vZGUgaXMgZW5hYmxlZFxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgJiZcbiAgICAgIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSB8fCBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy1kJykpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsuZGltKFxuICAgICAgICAgIGBbREVCVUctT05MWV0gU3RhdHNpZyBldmVudDogJHtldmVudE5hbWV9ICR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEsIG51bGwsIDApfWAsXG4gICAgICAgICksXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnQ6IFN0YXRzaWdFdmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIG1ldGFkYXRhOiBldmVudE1ldGFkYXRhLFxuICAgIH1cbiAgICBzdGF0c2lnQ2xpZW50LmxvZ0V2ZW50KGV2ZW50KVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgY2hlY2tHYXRlID0gbWVtb2l6ZShhc3luYyAoZ2F0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBpZiAoZW52LmlzQ0kgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IHN0YXRzaWdDbGllbnQgPSBhd2FpdCBpbml0aWFsaXplU3RhdHNpZygpXG4gIGlmICghc3RhdHNpZ0NsaWVudCkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgdmFsdWUgPSBzdGF0c2lnQ2xpZW50LmNoZWNrR2F0ZShnYXRlTmFtZSlcbiAgZ2F0ZVZhbHVlc1tnYXRlTmFtZV0gPSB2YWx1ZVxuICByZXR1cm4gdmFsdWVcbn0pXG5cbmV4cG9ydCBjb25zdCB1c2VTdGF0c2lnR2F0ZSA9IChnYXRlTmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWUgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBbZ2F0ZVZhbHVlLCBzZXRHYXRlVmFsdWVdID0gUmVhY3QudXNlU3RhdGUoZGVmYXVsdFZhbHVlKVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNoZWNrR2F0ZShnYXRlTmFtZSkudGhlbihzZXRHYXRlVmFsdWUpXG4gIH0sIFtnYXRlTmFtZV0pXG4gIHJldHVybiBnYXRlVmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdhdGVWYWx1ZXMoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICByZXR1cm4geyAuLi5nYXRlVmFsdWVzIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEV4cGVyaW1lbnRWYWx1ZSA9IG1lbW9pemUoXG4gIGFzeW5jIDxUPihleHBlcmltZW50TmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBpZiAoZW52LmlzQ0kgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIH1cbiAgICBjb25zdCBzdGF0c2lnQ2xpZW50ID0gYXdhaXQgaW5pdGlhbGl6ZVN0YXRzaWcoKVxuICAgIGlmICghc3RhdHNpZ0NsaWVudCkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuXG4gICAgY29uc3QgZXhwZXJpbWVudCA9IHN0YXRzaWdDbGllbnQuZ2V0RXhwZXJpbWVudChleHBlcmltZW50TmFtZSlcbiAgICBpZiAoT2JqZWN0LmtleXMoZXhwZXJpbWVudC52YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dFcnJvcihgZ2V0RXhwZXJpbWVudFZhbHVlIGdvdCBlbXB0eSB2YWx1ZSBmb3IgJHtleHBlcmltZW50TmFtZX1gKVxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIH1cbiAgICByZXR1cm4gZXhwZXJpbWVudC52YWx1ZSBhcyBUXG4gIH0sXG4pXG5cbi8vIE5CIE5vdCBtZW1vaXplZCBsaWtlIG90aGVyIG1ldGhvZHMsIHRvIGFsbG93IGZvciBkeW5hbWljIGNvbmZpZyBjaGFuZ2VzXG5leHBvcnQgY29uc3QgZ2V0RHluYW1pY0NvbmZpZyA9IGFzeW5jIDxUPihcbiAgY29uZmlnTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0VmFsdWU6IFQsXG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgaWYgKGVudi5pc0NJIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlXG4gIH1cbiAgY29uc3Qgc3RhdHNpZ0NsaWVudCA9IGF3YWl0IGluaXRpYWxpemVTdGF0c2lnKClcbiAgaWYgKCFzdGF0c2lnQ2xpZW50KSByZXR1cm4gZGVmYXVsdFZhbHVlXG5cbiAgY29uc3QgY29uZmlnID0gc3RhdHNpZ0NsaWVudC5nZXREeW5hbWljQ29uZmlnKGNvbmZpZ05hbWUpXG4gIGlmIChPYmplY3Qua2V5cyhjb25maWcudmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ0Vycm9yKGBnZXREeW5hbWljQ29uZmlnIGdvdCBlbXB0eSB2YWx1ZSBmb3IgJHtjb25maWdOYW1lfWApXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICB9XG4gIHJldHVybiBjb25maWcudmFsdWUgYXMgVFxufVxuIiwKICAgICJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWUocmVkLCBncmVlbiwgYmx1ZSkge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlKGhleCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWUoY29kZSkge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwKICAgICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHR0eSBmcm9tICdub2RlOnR0eSc7XG5cbi8vIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaGFzLWZsYWcvYmxvYi9tYWluL2luZGV4LmpzXG4vLy8gZnVuY3Rpb24gaGFzRmxhZyhmbGFnLCBhcmd2ID0gZ2xvYmFsVGhpcy5EZW5vPy5hcmdzID8/IHByb2Nlc3MuYXJndikge1xuZnVuY3Rpb24gaGFzRmxhZyhmbGFnLCBhcmd2ID0gZ2xvYmFsVGhpcy5EZW5vID8gZ2xvYmFsVGhpcy5EZW5vLmFyZ3MgOiBwcm9jZXNzLmFyZ3YpIHtcblx0Y29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKCctJykgPyAnJyA6IChmbGFnLmxlbmd0aCA9PT0gMSA/ICctJyA6ICctLScpO1xuXHRjb25zdCBwb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zaXRpb24gIT09IC0xICYmICh0ZXJtaW5hdG9yUG9zaXRpb24gPT09IC0xIHx8IHBvc2l0aW9uIDwgdGVybWluYXRvclBvc2l0aW9uKTtcbn1cblxuY29uc3Qge2Vudn0gPSBwcm9jZXNzO1xuXG5sZXQgZmxhZ0ZvcmNlQ29sb3I7XG5pZiAoXG5cdGhhc0ZsYWcoJ25vLWNvbG9yJylcblx0fHwgaGFzRmxhZygnbm8tY29sb3JzJylcblx0fHwgaGFzRmxhZygnY29sb3I9ZmFsc2UnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1uZXZlcicpXG4pIHtcblx0ZmxhZ0ZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChcblx0aGFzRmxhZygnY29sb3InKVxuXHR8fCBoYXNGbGFnKCdjb2xvcnMnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj10cnVlJylcblx0fHwgaGFzRmxhZygnY29sb3I9YWx3YXlzJylcbikge1xuXHRmbGFnRm9yY2VDb2xvciA9IDE7XG59XG5cbmZ1bmN0aW9uIGVudkZvcmNlQ29sb3IoKSB7XG5cdGlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRcdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4oTnVtYmVyLnBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDMsXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9zdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHtzdHJlYW1Jc1RUWSwgc25pZmZGbGFncyA9IHRydWV9ID0ge30pIHtcblx0Y29uc3Qgbm9GbGFnRm9yY2VDb2xvciA9IGVudkZvcmNlQ29sb3IoKTtcblx0aWYgKG5vRmxhZ0ZvcmNlQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZsYWdGb3JjZUNvbG9yID0gbm9GbGFnRm9yY2VDb2xvcjtcblx0fVxuXG5cdGNvbnN0IGZvcmNlQ29sb3IgPSBzbmlmZkZsYWdzID8gZmxhZ0ZvcmNlQ29sb3IgOiBub0ZsYWdGb3JjZUNvbG9yO1xuXG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoc25pZmZGbGFncykge1xuXHRcdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKVxuXHRcdFx0fHwgaGFzRmxhZygnY29sb3I9ZnVsbCcpXG5cdFx0XHR8fCBoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0XHRyZXR1cm4gMjtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgQXp1cmUgRGV2T3BzIHBpcGVsaW5lcy5cblx0Ly8gSGFzIHRvIGJlIGFib3ZlIHRoZSBgIXN0cmVhbUlzVFRZYCBjaGVjay5cblx0aWYgKCdURl9CVUlMRCcgaW4gZW52ICYmICdBR0VOVF9OQU1FJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmIChoYXZlU3RyZWFtICYmICFzdHJlYW1Jc1RUWSAmJiBmb3JjZUNvbG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgfHwgMDtcblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3MgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuXG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTBcblx0XHRcdCYmIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwXzU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0XzkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKCdHSVRIVUJfQUNUSU9OUycgaW4gZW52IHx8ICdHSVRFQV9BQ1RJT05TJyBpbiBlbnYpIHtcblx0XHRcdHJldHVybiAzO1xuXHRcdH1cblxuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knLCAnQlVJTERLSVRFJywgJ0RST05FJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICd4dGVybS1raXR0eScpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gTnVtYmVyLnBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzoge1xuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHR9XG5cblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzoge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdXBwb3J0c0NvbG9yKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGxldmVsID0gX3N1cHBvcnRzQ29sb3Ioc3RyZWFtLCB7XG5cdFx0c3RyZWFtSXNUVFk6IHN0cmVhbSAmJiBzdHJlYW0uaXNUVFksXG5cdFx0Li4ub3B0aW9ucyxcblx0fSk7XG5cblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxuY29uc3Qgc3VwcG9ydHNDb2xvciA9IHtcblx0c3Rkb3V0OiBjcmVhdGVTdXBwb3J0c0NvbG9yKHtpc1RUWTogdHR5LmlzYXR0eSgxKX0pLFxuXHRzdGRlcnI6IGNyZWF0ZVN1cHBvcnRzQ29sb3Ioe2lzVFRZOiB0dHkuaXNhdHR5KDIpfSksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdXBwb3J0c0NvbG9yO1xuIiwKICAgICIvLyBUT0RPOiBXaGVuIHRhcmdldGluZyBOb2RlLmpzIDE2LCB1c2UgYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpIHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCwgaW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIHByZWZpeCwgcG9zdGZpeCwgaW5kZXgpIHtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRjb25zdCBnb3RDUiA9IHN0cmluZ1tpbmRleCAtIDFdID09PSAnXFxyJztcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgsIChnb3RDUiA/IGluZGV4IC0gMSA6IGluZGV4KSkgKyBwcmVmaXggKyAoZ290Q1IgPyAnXFxyXFxuJyA6ICdcXG4nKSArIHBvc3RmaXg7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIDE7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbiIsCiAgICAiaW1wb3J0IGFuc2lTdHlsZXMgZnJvbSAnI2Fuc2ktc3R5bGVzJztcbmltcG9ydCBzdXBwb3J0c0NvbG9yIGZyb20gJyNzdXBwb3J0cy1jb2xvcic7XG5pbXBvcnQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9vcmRlclxuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgsXG59IGZyb20gJy4vdXRpbGl0aWVzLmpzJztcblxuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gc3VwcG9ydHNDb2xvcjtcblxuY29uc3QgR0VORVJBVE9SID0gU3ltYm9sKCdHRU5FUkFUT1InKTtcbmNvbnN0IFNUWUxFUiA9IFN5bWJvbCgnU1RZTEVSJyk7XG5jb25zdCBJU19FTVBUWSA9IFN5bWJvbCgnSVNfRU1QVFknKTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIOKGkiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bScsXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5jb25zdCBhcHBseU9wdGlvbnMgPSAob2JqZWN0LCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMubGV2ZWwgJiYgIShOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubGV2ZWwpICYmIG9wdGlvbnMubGV2ZWwgPj0gMCAmJiBvcHRpb25zLmxldmVsIDw9IDMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGxldmVsYCBvcHRpb24gc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSAwIHRvIDMnKTtcblx0fVxuXG5cdC8vIERldGVjdCBsZXZlbCBpZiBub3Qgc2V0IG1hbnVhbGx5XG5cdGNvbnN0IGNvbG9yTGV2ZWwgPSBzdGRvdXRDb2xvciA/IHN0ZG91dENvbG9yLmxldmVsIDogMDtcblx0b2JqZWN0LmxldmVsID0gb3B0aW9ucy5sZXZlbCA9PT0gdW5kZWZpbmVkID8gY29sb3JMZXZlbCA6IG9wdGlvbnMubGV2ZWw7XG59O1xuXG5leHBvcnQgY2xhc3MgQ2hhbGsge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0gKC4uLnN0cmluZ3MpID0+IHN0cmluZ3Muam9pbignICcpO1xuXHRhcHBseU9wdGlvbnMoY2hhbGssIG9wdGlvbnMpO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgY3JlYXRlQ2hhbGsucHJvdG90eXBlKTtcblxuXHRyZXR1cm4gY2hhbGs7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihjcmVhdGVDaGFsay5wcm90b3R5cGUsIEZ1bmN0aW9uLnByb3RvdHlwZSk7XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpc1tTVFlMRVJdKSwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9LFxuXHR9O1xufVxuXG5zdHlsZXMudmlzaWJsZSA9IHtcblx0Z2V0KCkge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIHRoaXNbU1RZTEVSXSwgdHJ1ZSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd2aXNpYmxlJywge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdH0sXG59O1xuXG5jb25zdCBnZXRNb2RlbEFuc2kgPSAobW9kZWwsIGxldmVsLCB0eXBlLCAuLi5hcmd1bWVudHNfKSA9PiB7XG5cdGlmIChtb2RlbCA9PT0gJ3JnYicpIHtcblx0XHRpZiAobGV2ZWwgPT09ICdhbnNpMTZtJykge1xuXHRcdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaTE2bSguLi5hcmd1bWVudHNfKTtcblx0XHR9XG5cblx0XHRpZiAobGV2ZWwgPT09ICdhbnNpMjU2Jykge1xuXHRcdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaTI1NihhbnNpU3R5bGVzLnJnYlRvQW5zaTI1NiguLi5hcmd1bWVudHNfKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaShhbnNpU3R5bGVzLnJnYlRvQW5zaSguLi5hcmd1bWVudHNfKSk7XG5cdH1cblxuXHRpZiAobW9kZWwgPT09ICdoZXgnKSB7XG5cdFx0cmV0dXJuIGdldE1vZGVsQW5zaSgncmdiJywgbGV2ZWwsIHR5cGUsIC4uLmFuc2lTdHlsZXMuaGV4VG9SZ2IoLi4uYXJndW1lbnRzXykpO1xuXHR9XG5cblx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pO1xufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihnZXRNb2RlbEFuc2kobW9kZWwsIGxldmVsTWFwcGluZ1tsZXZlbF0sICdjb2xvcicsIC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmNvbG9yLmNsb3NlLCB0aGlzW1NUWUxFUl0pO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdH07XG5cdFx0fSxcblx0fTtcblxuXHRjb25zdCBiZ01vZGVsID0gJ2JnJyArIG1vZGVsWzBdLnRvVXBwZXJDYXNlKCkgKyBtb2RlbC5zbGljZSgxKTtcblx0c3R5bGVzW2JnTW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihnZXRNb2RlbEFuc2kobW9kZWwsIGxldmVsTWFwcGluZ1tsZXZlbF0sICdiZ0NvbG9yJywgLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpc1tTVFlMRVJdKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbR0VORVJBVE9SXS5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpc1tHRU5FUkFUT1JdLmxldmVsID0gbGV2ZWw7XG5cdFx0fSxcblx0fSxcbn0pO1xuXG5jb25zdCBjcmVhdGVTdHlsZXIgPSAob3BlbiwgY2xvc2UsIHBhcmVudCkgPT4ge1xuXHRsZXQgb3BlbkFsbDtcblx0bGV0IGNsb3NlQWxsO1xuXHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRvcGVuQWxsID0gb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlO1xuXHR9IGVsc2Uge1xuXHRcdG9wZW5BbGwgPSBwYXJlbnQub3BlbkFsbCArIG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZSArIHBhcmVudC5jbG9zZUFsbDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0b3Blbixcblx0XHRjbG9zZSxcblx0XHRvcGVuQWxsLFxuXHRcdGNsb3NlQWxsLFxuXHRcdHBhcmVudCxcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Ly8gU2luZ2xlIGFyZ3VtZW50IGlzIGhvdCBwYXRoLCBpbXBsaWNpdCBjb2VyY2lvbiBpcyBmYXN0ZXIgdGhhbiBhbnl0aGluZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiBhcHBseVN0eWxlKGJ1aWxkZXIsIChhcmd1bWVudHNfLmxlbmd0aCA9PT0gMSkgPyAoJycgKyBhcmd1bWVudHNfWzBdKSA6IGFyZ3VtZW50c18uam9pbignICcpKTtcblxuXHQvLyBXZSBhbHRlciB0aGUgcHJvdG90eXBlIGJlY2F1c2Ugd2UgbXVzdCByZXR1cm4gYSBmdW5jdGlvbiwgYnV0IHRoZXJlIGlzXG5cdC8vIG5vIHdheSB0byBjcmVhdGUgYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IHByb3RvdHlwZVxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVpbGRlciwgcHJvdG8pO1xuXG5cdGJ1aWxkZXJbR0VORVJBVE9SXSA9IHNlbGY7XG5cdGJ1aWxkZXJbU1RZTEVSXSA9IF9zdHlsZXI7XG5cdGJ1aWxkZXJbSVNfRU1QVFldID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZltJU19FTVBUWV0gPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmW1NUWUxFUl07XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5jbHVkZXMoJ1xcdTAwMUInKSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNyZWF0ZUNoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBjcmVhdGVDaGFsaygpO1xuZXhwb3J0IGNvbnN0IGNoYWxrU3RkZXJyID0gY3JlYXRlQ2hhbGsoe2xldmVsOiBzdGRlcnJDb2xvciA/IHN0ZGVyckNvbG9yLmxldmVsIDogMH0pO1xuXG5leHBvcnQge1xuXHRtb2RpZmllck5hbWVzLFxuXHRmb3JlZ3JvdW5kQ29sb3JOYW1lcyxcblx0YmFja2dyb3VuZENvbG9yTmFtZXMsXG5cdGNvbG9yTmFtZXMsXG5cblx0Ly8gVE9ETzogUmVtb3ZlIHRoZXNlIGFsaWFzZXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxuXHRtb2RpZmllck5hbWVzIGFzIG1vZGlmaWVycyxcblx0Zm9yZWdyb3VuZENvbG9yTmFtZXMgYXMgZm9yZWdyb3VuZENvbG9ycyxcblx0YmFja2dyb3VuZENvbG9yTmFtZXMgYXMgYmFja2dyb3VuZENvbG9ycyxcblx0Y29sb3JOYW1lcyBhcyBjb2xvcnMsXG59IGZyb20gJy4vdmVuZG9yL2Fuc2ktc3R5bGVzL2luZGV4LmpzJztcblxuZXhwb3J0IHtcblx0c3Rkb3V0Q29sb3IgYXMgc3VwcG9ydHNDb2xvcixcblx0c3RkZXJyQ29sb3IgYXMgc3VwcG9ydHNDb2xvclN0ZGVycixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNoYWxrO1xuIiwKICAgICIvLyBNb2NrIGJyb3dzZXIgQVBJcyBuZWVkZWQgYnkgQHN0YXRzaWcvanMtY2xpZW50IGluIE5vZGUuanMgZW52aXJvbm1lbnRcblxuLy8gRG9jdW1lbnQgbW9jayB3aXRoIHZpc2liaWxpdHkgc3RhdGUgdHJhY2tpbmdcbmNvbnN0IG1vY2tEb2N1bWVudCA9IHtcbiAgdmlzaWJpbGl0eVN0YXRlOiAndmlzaWJsZScgYXMgY29uc3QsXG4gIGRvY3VtZW50RWxlbWVudDoge1xuICAgIGxhbmc6ICdlbicsXG4gIH0sXG4gIGFkZEV2ZW50TGlzdGVuZXI6IChcbiAgICBfZXZlbnQ6IHN0cmluZyxcbiAgICBfaGFuZGxlcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgKSA9PiB7XG4gICAgLy8gVmlzaWJpbGl0eSBjaGFuZ2UgZXZlbnRzIGFyZSBoYW5kbGVkIHRocm91Z2ggd2luZG93LmRvY3VtZW50IHJlZmVyZW5jZVxuICB9LFxufSBhcyBjb25zdFxuXG4vLyBXaW5kb3cgbW9jayB3aXRoIGZvY3VzL2JsdXIgYW5kIGJlZm9yZXVubG9hZCBoYW5kbGluZ1xuZXhwb3J0IGNvbnN0IG1vY2tXaW5kb3cgPSB7XG4gIGRvY3VtZW50OiBtb2NrRG9jdW1lbnQsXG4gIGxvY2F0aW9uOiB7XG4gICAgaHJlZjogJ25vZGU6Ly9sb2NhbGhvc3QnLFxuICAgIHBhdGhuYW1lOiAnLycsXG4gIH0sXG4gIGFkZEV2ZW50TGlzdGVuZXI6IChcbiAgICBldmVudDogc3RyaW5nLFxuICAgIGhhbmRsZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICkgPT4ge1xuICAgIGlmIChldmVudCA9PT0gJ2JlZm9yZXVubG9hZCcpIHtcbiAgICAgIC8vIENhcHR1cmUgYmVmb3JldW5sb2FkIGhhbmRsZXJzIGFuZCBydW4gdGhlbSBvbiBwcm9jZXNzIGV4aXRcbiAgICAgIHByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGhhbmRsZXIoe30gYXMgRXZlbnQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlci5oYW5kbGVFdmVudCh7fSBhcyBFdmVudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgLy8gT3RoZXIgZXZlbnRzIChmb2N1cy9ibHVyKSBhcmUgbm90IGNyaXRpY2FsbHkgbmVlZGVkIGluIE5vZGUuanNcbiAgfSxcbiAgZm9jdXM6ICgpID0+IHtcbiAgICAvLyBGb2N1cyBpcyBhIG5vLW9wIGluIE5vZGUuanNcbiAgfSxcbiAgaW5uZXJIZWlnaHQ6IDc2OCxcbiAgaW5uZXJXaWR0aDogMTAyNCxcbn0gYXMgY29uc3RcblxuLy8gTmF2aWdhdG9yIG1vY2sgd2l0aCBtaW5pbWFsIGJlYWNvbiBzdXBwb3J0XG5leHBvcnQgY29uc3QgbW9ja05hdmlnYXRvciA9IHtcbiAgc2VuZEJlYWNvbjogKF91cmw6IHN0cmluZywgX2RhdGE6IHN0cmluZyB8IEJsb2IpOiBib29sZWFuID0+IHtcbiAgICAvLyBCZWFjb25zIGFyZSB1c2VkIGZvciBhbmFseXRpY3MgLSByZXR1cm4gc3VjY2VzcyBidXQgZG9uJ3QgYWN0dWFsbHkgc2VuZFxuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIHVzZXJBZ2VudDpcbiAgICAnTW96aWxsYS81LjAgKE5vZGUuanMpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjAuMC4wLjAnLFxuICBsYW5ndWFnZTogJ2VuLVVTJyxcbn0gYXMgY29uc3RcblxuLy8gT25seSBhc3NpZ24gbW9ja3MgaWYgcnVubmluZyBpbiBOb2RlLmpzIGVudmlyb25tZW50XG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaW50ZW50aW9uYWxseSBhcHBseWluZyBwYXJ0aWFsIG1vY2tzIGZvciBOb2RlLmpzIGVudmlyb25tZW50XG4gIGdsb2JhbC53aW5kb3cgPSBtb2NrV2luZG93XG59XG5pZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaW50ZW50aW9uYWxseSBhcHBseWluZyBwYXJ0aWFsIG1vY2tzIGZvciBOb2RlLmpzIGVudmlyb25tZW50XG4gIGdsb2JhbC5uYXZpZ2F0b3IgPSBtb2NrTmF2aWdhdG9yXG59XG4iLAogICAgImltcG9ydCB7IFN0b3JhZ2VQcm92aWRlciB9IGZyb20gJ0BzdGF0c2lnL2NsaWVudC1jb3JlJ1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHVubGlua1N5bmMgfSBmcm9tICdmcydcblxuY29uc3QgU1RBVFNJR19ESVIgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmNsYXVkZScsICdzdGF0c2lnJylcblxuLy8gRW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzXG50cnkge1xuICBmcy5ta2RpclN5bmMoU1RBVFNJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG59IGNhdGNoIChlcnJvcikge1xuICBsb2dFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBzdGF0c2lnIHN0b3JhZ2UgZGlyZWN0b3J5OiAke2Vycm9yfWApXG59XG5cbmV4cG9ydCBjbGFzcyBGaWxlU3lzdGVtU3RvcmFnZVByb3ZpZGVyIGltcGxlbWVudHMgU3RvcmFnZVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBjYWNoZTogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKVxuICBwcml2YXRlIHJlYWR5ID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBMb2FkIGFsbCBleGlzdGluZyBmaWxlcyBpbnRvIGNhY2hlIG9uIHN0YXJ0dXBcbiAgICB0cnkge1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKFNUQVRTSUdfRElSKSkge1xuICAgICAgICBmcy5ta2RpclN5bmMoU1RBVFNJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKFNUQVRTSUdfRElSKVxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlKVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oU1RBVFNJR19ESVIsIGZpbGUpLCAndXRmOCcpXG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgICB0aGlzLnJlYWR5ID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgc3RhdHNpZyBzdG9yYWdlOiAke2Vycm9yfWApXG4gICAgICB0aGlzLnJlYWR5ID0gdHJ1ZSAvLyBTdGlsbCBtYXJrIGFzIHJlYWR5IHRvIGF2b2lkIGJsb2NraW5nXG4gICAgfVxuICB9XG5cbiAgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeVxuICB9XG5cbiAgaXNSZWFkeVJlc29sdmVyKCk6IFByb21pc2U8dm9pZD4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSA/IFByb21pc2UucmVzb2x2ZSgpIDogbnVsbFxuICB9XG5cbiAgZ2V0UHJvdmlkZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdGaWxlU3lzdGVtU3RvcmFnZVByb3ZpZGVyJ1xuICB9XG5cbiAgZ2V0SXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpID8/IG51bGxcbiAgfVxuXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSlcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKFNUQVRTSUdfRElSLCBlbmNvZGVkS2V5KSwgdmFsdWUsICd1dGY4JylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoYEZhaWxlZCB0byB3cml0ZSBzdGF0c2lnIHN0b3JhZ2UgaXRlbTogJHtlcnJvcn1gKVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpXG4gICAgY29uc3QgZW5jb2RlZEtleSA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpXG4gICAgY29uc3QgZmlsZSA9IHBhdGguam9pbihTVEFUU0lHX0RJUiwgZW5jb2RlZEtleSlcbiAgICBpZiAoIWV4aXN0c1N5bmMoZmlsZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdW5saW5rU3luYyhmaWxlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihgRmFpbGVkIHRvIHJlbW92ZSBzdGF0c2lnIHN0b3JhZ2UgaXRlbTogJHtlcnJvcn1gKVxuICAgIH1cbiAgfVxuXG4gIGdldEFsbEtleXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2FjaGUua2V5cygpKVxuICB9XG59XG4iLAogICAgImV4cG9ydCBjb25zdCBTRU5UUllfRFNOID1cbiAgJ2h0dHBzOi8vZTUzMWExZDllYzFkZTkwNjRmYWU5ZDRhZmZiMGIwZjRAbzExNTgzOTQuaW5nZXN0LnVzLnNlbnRyeS5pby80NTA4MjU5NTQxOTA5NTA0J1xuXG5leHBvcnQgY29uc3QgU1RBVFNJR19DTElFTlRfS0VZID1cbiAgJ2NsaWVudC1SUk5TN1I2NUVBdFJlTzVYQTR4REMzZVU2WmRKUWk2bExFUDZiNWozMk1lJ1xuIiwKICAgICJleHBvcnQgY29uc3QgR0FURV9UT0tFTl9FRkZJQ0lFTlRfVE9PTFMgPSAndGVuZ3UtdG9rZW4tZWZmaWNpZW50LXRvb2xzJ1xuZXhwb3J0IGNvbnN0IEJFVEFfSEVBREVSX1RPS0VOX0VGRklDSUVOVF9UT09MUyA9XG4gICd0b2tlbi1lZmZpY2llbnQtdG9vbHMtMjAyNC0xMi0xMSdcbmV4cG9ydCBjb25zdCBHQVRFX1VTRV9FWFRFUk5BTF9VUERBVEVSID0gJ3Rlbmd1LXVzZS1leHRlcm5hbC11cGRhdGVyJ1xuZXhwb3J0IGNvbnN0IENMQVVERV9DT0RFXzIwMjUwMjE5X0JFVEFfSEVBREVSID0gJ2NsYXVkZS1jb2RlLTIwMjUwMjE5J1xuIiwKICAgICJpbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgY2hlY2tHYXRlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7XG4gIEdBVEVfVE9LRU5fRUZGSUNJRU5UX1RPT0xTLFxuICBCRVRBX0hFQURFUl9UT0tFTl9FRkZJQ0lFTlRfVE9PTFMsXG4gIENMQVVERV9DT0RFXzIwMjUwMjE5X0JFVEFfSEVBREVSLFxufSBmcm9tICcuLi9jb25zdGFudHMvYmV0YXMuanMnXG5cbmV4cG9ydCBjb25zdCBnZXRCZXRhcyA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgY29uc3QgYmV0YUhlYWRlcnMgPSBbQ0xBVURFX0NPREVfMjAyNTAyMTlfQkVUQV9IRUFERVJdXG5cbiAgaWYgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgfHwgcHJvY2Vzcy5lbnYuU1dFX0JFTkNIKSB7XG4gICAgY29uc3QgdXNlVG9rZW5FZmZpY2llbnRUb29scyA9IGF3YWl0IGNoZWNrR2F0ZShHQVRFX1RPS0VOX0VGRklDSUVOVF9UT09MUylcbiAgICBpZiAodXNlVG9rZW5FZmZpY2llbnRUb29scykge1xuICAgICAgYmV0YUhlYWRlcnMucHVzaChCRVRBX0hFQURFUl9UT0tFTl9FRkZJQ0lFTlRfVE9PTFMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJldGFIZWFkZXJzXG59KVxuIiwKICAgICJpbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgZXhlY0ZpbGVOb1Rocm93IH0gZnJvbSAnLi9leGVjRmlsZU5vVGhyb3cuanMnXG5cbmV4cG9ydCBjb25zdCBnZXRJc0dpdCA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IGV4ZWNGaWxlTm9UaHJvdygnZ2l0JywgW1xuICAgICdyZXYtcGFyc2UnLFxuICAgICctLWlzLWluc2lkZS13b3JrLXRyZWUnLFxuICBdKVxuICByZXR1cm4gY29kZSA9PT0gMFxufSlcblxuZXhwb3J0IGNvbnN0IGdldEhlYWQgPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlTm9UaHJvdygnZ2l0JywgWydyZXYtcGFyc2UnLCAnSEVBRCddKVxuICByZXR1cm4gc3Rkb3V0LnRyaW0oKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0QnJhbmNoID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coXG4gICAgJ2dpdCcsXG4gICAgWydyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIGZhbHNlLFxuICApXG4gIHJldHVybiBzdGRvdXQudHJpbSgpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRSZW1vdGVVcmwgPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG4gIC8vIFRoaXMgbWlnaHQgZmFpbCBpZiB0aGVyZSBpcyBubyByZW1vdGUgY2FsbGVkIG9yaWdpblxuICBjb25zdCB7IHN0ZG91dCwgY29kZSB9ID0gYXdhaXQgZXhlY0ZpbGVOb1Rocm93KFxuICAgICdnaXQnLFxuICAgIFsncmVtb3RlJywgJ2dldC11cmwnLCAnb3JpZ2luJ10sXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICBmYWxzZSxcbiAgKVxuICByZXR1cm4gY29kZSA9PT0gMCA/IHN0ZG91dC50cmltKCkgOiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRJc0hlYWRPblJlbW90ZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coXG4gICAgJ2dpdCcsXG4gICAgWydyZXYtcGFyc2UnLCAnQHt1fSddLFxuICAgIHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQsXG4gICAgZmFsc2UsXG4gIClcbiAgcmV0dXJuIGNvZGUgPT09IDBcbn1cblxuZXhwb3J0IGNvbnN0IGdldElzQ2xlYW4gPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coXG4gICAgJ2dpdCcsXG4gICAgWydzdGF0dXMnLCAnLS1wb3JjZWxhaW4nXSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIGZhbHNlLFxuICApXG4gIHJldHVybiBzdGRvdXQudHJpbSgpLmxlbmd0aCA9PT0gMFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdpdFJlcG9TdGF0ZSB7XG4gIGNvbW1pdEhhc2g6IHN0cmluZ1xuICBicmFuY2hOYW1lOiBzdHJpbmdcbiAgcmVtb3RlVXJsOiBzdHJpbmcgfCBudWxsXG4gIGlzSGVhZE9uUmVtb3RlOiBib29sZWFuXG4gIGlzQ2xlYW46IGJvb2xlYW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEdpdFN0YXRlKCk6IFByb21pc2U8R2l0UmVwb1N0YXRlIHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IFtjb21taXRIYXNoLCBicmFuY2hOYW1lLCByZW1vdGVVcmwsIGlzSGVhZE9uUmVtb3RlLCBpc0NsZWFuXSA9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldEhlYWQoKSxcbiAgICAgICAgZ2V0QnJhbmNoKCksXG4gICAgICAgIGdldFJlbW90ZVVybCgpLFxuICAgICAgICBnZXRJc0hlYWRPblJlbW90ZSgpLFxuICAgICAgICBnZXRJc0NsZWFuKCksXG4gICAgICBdKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1pdEhhc2gsXG4gICAgICBicmFuY2hOYW1lLFxuICAgICAgcmVtb3RlVXJsLFxuICAgICAgaXNIZWFkT25SZW1vdGUsXG4gICAgICBpc0NsZWFuLFxuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIEZhaWwgc2lsZW50bHkgLSBnaXQgc3RhdGUgaXMgYmVzdCBlZmZvcnRcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLAogICAgImltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBnZXREeW5hbWljQ29uZmlnLCBnZXRFeHBlcmltZW50VmFsdWUgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcblxuZXhwb3J0IGNvbnN0IFVTRV9CRURST0NLID0gISFwcm9jZXNzLmVudi5DTEFVREVfQ09ERV9VU0VfQkVEUk9DS1xuZXhwb3J0IGNvbnN0IFVTRV9WRVJURVggPSAhIXByb2Nlc3MuZW52LkNMQVVERV9DT0RFX1VTRV9WRVJURVhcblxuZXhwb3J0IGludGVyZmFjZSBNb2RlbENvbmZpZyB7XG4gIGJlZHJvY2s6IHN0cmluZ1xuICB2ZXJ0ZXg6IHN0cmluZ1xuICBmaXJzdFBhcnR5OiBzdHJpbmdcbn1cblxuY29uc3QgREVGQVVMVF9NT0RFTF9DT05GSUc6IE1vZGVsQ29uZmlnID0ge1xuICBiZWRyb2NrOiAndXMuYW50aHJvcGljLmNsYXVkZS0zLTctc29ubmV0LTIwMjUwMjE5LXYxOjAnLFxuICB2ZXJ0ZXg6ICdjbGF1ZGUtMy03LXNvbm5ldEAyMDI1MDIxOScsXG4gIGZpcnN0UGFydHk6ICdjbGF1ZGUtMy03LXNvbm5ldC0yMDI1MDIxOScsXG59XG5cbmV4cG9ydCBjb25zdCBTTUFMTF9GQVNUX01PREVMID0gVVNFX0JFRFJPQ0tcbiAgPyAndXMuYW50aHJvcGljLmNsYXVkZS0zLTUtaGFpa3UtMjAyNDEwMjItdjE6MCdcbiAgOiBVU0VfVkVSVEVYXG4gICAgPyAnY2xhdWRlLTMtNS1oYWlrdUAyMDI0MTAyMidcbiAgICA6ICdjbGF1ZGUtMy01LWhhaWt1LTIwMjQxMDIyJ1xuXG4vKipcbiAqIEhlbHBlciB0byBnZXQgdGhlIG1vZGVsIGNvbmZpZyBmcm9tIHN0YXRzaWcgb3IgZGVmYXVsdHNcbiAqIFJlbGllcyBvbiB0aGUgYnVpbHQtaW4gY2FjaGluZyBmcm9tIFN0YXRzaWdDbGllbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TW9kZWxDb25maWcoKTogUHJvbWlzZTxNb2RlbENvbmZpZz4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZXREeW5hbWljQ29uZmlnPE1vZGVsQ29uZmlnPihcbiAgICAgICd0ZW5ndS1jYXBhYmxlLW1vZGVsLWNvbmZpZycsXG4gICAgICBERUZBVUxUX01PREVMX0NPTkZJRyxcbiAgICApXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIERFRkFVTFRfTU9ERUxfQ09ORklHXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwgPSBtZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuVVNFUl9UWVBFID09PSAnYW50Jykge1xuICAgIGlmIChwcm9jZXNzLmVudi5BTlRIUk9QSUNfTU9ERUwpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5BTlRIUk9QSUNfTU9ERUxcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IGdldEV4cGVyaW1lbnRWYWx1ZSgnY2hpaHVhaHVhJywge1xuICAgICAgICBjb2xvcjogJ3Jlc2VhcmNoLWNsYXVkZS1kZW5pbScsXG4gICAgICB9KVxuICAgICkuY29sb3JcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdTV0VfQkVOQ0gnKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkFOVEhST1BJQ19NT0RFTCkge1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFOVEhST1BJQ19NT0RFTFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldE1vZGVsQ29uZmlnKClcbiAgaWYgKFVTRV9CRURST0NLKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5iZWRyb2NrXG4gIH1cbiAgaWYgKFVTRV9WRVJURVgpIHtcbiAgICByZXR1cm4gY29uZmlnLnZlcnRleFxuICB9XG4gIHJldHVybiBjb25maWcuZmlyc3RQYXJ0eVxufSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRGVmYXVsdFNsb3dBbmRDYXBhYmxlTW9kZWwoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiAoXG4gICAgIXByb2Nlc3MuZW52LkFOVEhST1BJQ19NT0RFTCB8fFxuICAgIHByb2Nlc3MuZW52LkFOVEhST1BJQ19NT0RFTCA9PT0gKGF3YWl0IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKSlcbiAgKVxufVxuXG4vKipcbiAqIEdldCB0aGUgcmVnaW9uIGZvciBhIHNwZWNpZmljIFZlcnRleCBtb2RlbFxuICogQ2hlY2tzIGZvciBoYXJkY29kZWQgbW9kZWwtc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0LFxuICogdGhlbiBmYWxscyBiYWNrIHRvIENMT1VEX01MX1JFR0lPTiBlbnYgdmFyIG9yIGRlZmF1bHQgcmVnaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJ0ZXhSZWdpb25Gb3JNb2RlbChcbiAgbW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChtb2RlbD8uc3RhcnRzV2l0aCgnY2xhdWRlLTMtNS1oYWlrdScpKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZFUlRFWF9SRUdJT05fQ0xBVURFXzNfNV9IQUlLVVxuICB9IGVsc2UgaWYgKG1vZGVsPy5zdGFydHNXaXRoKCdjbGF1ZGUtMy01LXNvbm5ldCcpKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZFUlRFWF9SRUdJT05fQ0xBVURFXzNfNV9TT05ORVRcbiAgfSBlbHNlIGlmIChtb2RlbD8uc3RhcnRzV2l0aCgnY2xhdWRlLTMtNy1zb25uZXQnKSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5WRVJURVhfUkVHSU9OX0NMQVVERV8zXzdfU09OTkVUXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZXhlY0ZpbGVOb1Rocm93IH0gZnJvbSAnLi9leGVjRmlsZU5vVGhyb3cuanMnXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5cbi8vIEJhc2UgZGlyZWN0b3J5IGZvciBhbGwgQ2xhdWRlIENvZGUgZGF0YSBmaWxlcyAoZXhjZXB0IGNvbmZpZy5qc29uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSlcbmV4cG9ydCBjb25zdCBDTEFVREVfQkFTRV9ESVIgPVxuICBwcm9jZXNzLmVudi5DTEFVREVfQ09ORklHX0RJUiA/PyBqb2luKGhvbWVkaXIoKSwgJy5jbGF1ZGUnKVxuXG4vLyBDb25maWcgYW5kIGRhdGEgcGF0aHNcbmV4cG9ydCBjb25zdCBHTE9CQUxfQ0xBVURFX0ZJTEUgPSBwcm9jZXNzLmVudi5DTEFVREVfQ09ORklHX0RJUlxuICA/IGpvaW4oQ0xBVURFX0JBU0VfRElSLCAnY29uZmlnLmpzb24nKVxuICA6IGpvaW4oaG9tZWRpcigpLCAnLmNsYXVkZS5qc29uJylcbmV4cG9ydCBjb25zdCBNRU1PUllfRElSID0gam9pbihDTEFVREVfQkFTRV9ESVIsICdtZW1vcnknKVxuXG5jb25zdCBnZXRJc0RvY2tlciA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAvLyBDaGVjayBmb3IgLmRvY2tlcmVudiBmaWxlXG4gIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgZXhlY0ZpbGVOb1Rocm93KCd0ZXN0JywgWyctZicsICcvLmRvY2tlcmVudiddKVxuICBpZiAoY29kZSAhPT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnXG59KVxuXG5jb25zdCBoYXNJbnRlcm5ldEFjY2VzcyA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDEwMDApXG5cbiAgICBhd2FpdCBmZXRjaCgnaHR0cDovLzEuMS4xLjEnLCB7XG4gICAgICBtZXRob2Q6ICdIRUFEJyxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcblxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59KVxuXG4vLyBhbGwgb2YgdGhlc2Ugc2hvdWxkIGJlIGltbXV0YWJsZVxuZXhwb3J0IGNvbnN0IGVudiA9IHtcbiAgZ2V0SXNEb2NrZXIsXG4gIGhhc0ludGVybmV0QWNjZXNzLFxuICBpc0NJOiBCb29sZWFuKHByb2Nlc3MuZW52LkNJKSxcbiAgcGxhdGZvcm06XG4gICAgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgICAgPyAnd2luZG93cydcbiAgICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbidcbiAgICAgICAgPyAnbWFjb3MnXG4gICAgICAgIDogJ2xpbnV4JyxcbiAgbm9kZVZlcnNpb246IHByb2Nlc3MudmVyc2lvbixcbiAgdGVybWluYWw6IHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTSxcbn1cbiIsCiAgICAiaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZUpTT04oanNvbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICBpZiAoIWpzb24pIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwKICAgICJleHBvcnQgY2xhc3MgTWFsZm9ybWVkQ29tbWFuZEVycm9yIGV4dGVuZHMgVHlwZUVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBEZXByZWNhdGVkQ29tbWFuZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG4vKipcbiAqIEN1c3RvbSBlcnJvciBjbGFzcyBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHBhcnNpbmcgZXJyb3JzXG4gKiBJbmNsdWRlcyB0aGUgZmlsZSBwYXRoIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZ1BhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGZpbGVQYXRoOiBzdHJpbmdcbiAgZGVmYXVsdENvbmZpZzogdW5rbm93blxuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZywgZGVmYXVsdENvbmZpZzogdW5rbm93bikge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ1BhcnNlRXJyb3InXG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoXG4gICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gZGVmYXVsdENvbmZpZ1xuICB9XG59XG4iLAogICAgImltcG9ydCB7IGdldEdsb2JhbENvbmZpZywgZ2V0T3JDcmVhdGVVc2VySUQgfSBmcm9tICcuL2NvbmZpZy5qcydcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuL2Vudi5qcydcbmltcG9ydCB7IHR5cGUgU3RhdHNpZ1VzZXIgfSBmcm9tICdAc3RhdHNpZy9qcy1jbGllbnQnXG5pbXBvcnQgeyBleGVjRmlsZU5vVGhyb3cgfSBmcm9tICcuL2V4ZWNGaWxlTm9UaHJvdy5qcydcbmltcG9ydCB7IGxvZ0Vycm9yLCBTRVNTSU9OX0lEIH0gZnJvbSAnLi9sb2cuanMnXG5cbmV4cG9ydCBjb25zdCBnZXRHaXRFbWFpbCA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlTm9UaHJvdygnZ2l0JywgWydjb25maWcnLCAndXNlci5lbWFpbCddKVxuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICBsb2dFcnJvcihgRmFpbGVkIHRvIGdldCBnaXQgZW1haWw6ICR7cmVzdWx0LnN0ZG91dH0gJHtyZXN1bHQuc3RkZXJyfWApXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHJldHVybiByZXN1bHQuc3Rkb3V0LnRyaW0oKSB8fCB1bmRlZmluZWRcbn0pXG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxTdGF0c2lnVXNlcj4gPT4ge1xuICBjb25zdCB1c2VySUQgPSBnZXRPckNyZWF0ZVVzZXJJRCgpXG4gIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gIGNvbnN0IGVtYWlsID1cbiAgICBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnXG4gICAgICA/IChjb25maWcub2F1dGhBY2NvdW50Py5lbWFpbEFkZHJlc3MgPz9cbiAgICAgICAgKGF3YWl0IGdldEdpdEVtYWlsKCkpID8/XG4gICAgICAgIChwcm9jZXNzLmVudi5DT09fQ1JFQVRPUlxuICAgICAgICAgID8gYCR7cHJvY2Vzcy5lbnYuQ09PX0NSRUFUT1J9QGFudGhyb3BpYy5jb21gXG4gICAgICAgICAgOiB1bmRlZmluZWQpKVxuICAgICAgOiB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIGN1c3RvbUlEczoge1xuICAgICAgLy8gZm9yIHNlc3Npb24gbGV2ZWwgdGVzdHNcbiAgICAgIHNlc3Npb25JZDogU0VTU0lPTl9JRCxcbiAgICB9LFxuICAgIHVzZXJJRCxcbiAgICBhcHBWZXJzaW9uOiBNQUNSTy5WRVJTSU9OLFxuICAgIHVzZXJBZ2VudDogZW52LnBsYXRmb3JtLFxuICAgIGVtYWlsLFxuICAgIGN1c3RvbToge1xuICAgICAgbm9kZVZlcnNpb246IGVudi5ub2RlVmVyc2lvbixcbiAgICAgIHVzZXJUeXBlOiBwcm9jZXNzLmVudi5VU0VSX1RZUEUsXG4gICAgICBvcmdhbml6YXRpb25VdWlkOiBjb25maWcub2F1dGhBY2NvdW50Py5vcmdhbml6YXRpb25VdWlkLFxuICAgICAgYWNjb3VudFV1aWQ6IGNvbmZpZy5vYXV0aEFjY291bnQ/LmFjY291bnRVdWlkLFxuICAgIH0sXG4gIH1cbn0pXG4iLAogICAgImV4cG9ydCBjb25zdCBQUk9EVUNUX05BTUUgPSAnQ2xhdWRlIENvZGUnXG5leHBvcnQgY29uc3QgUFJPRFVDVF9VUkwgPSAnaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vcy9jbGF1ZGUtY29kZSdcbiIsCiAgICAiZXhwb3J0IGxldCBhdXRvID0gZmFsc2U7XG5leHBvcnQgbGV0IGtpbmQgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IGZldGNoID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBSZXNwb25zZSA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgSGVhZGVycyA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgRm9ybURhdGEgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IEJsb2IgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IEZpbGUgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IFJlYWRhYmxlU3RyZWFtID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBnZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9ucyA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgZ2V0RGVmYXVsdEFnZW50ID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBmaWxlRnJvbVBhdGggPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IGlzRnNSZWFkU3RyZWFtID0gdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNoaW1zKHNoaW1zLCBvcHRpb25zID0geyBhdXRvOiBmYWxzZSB9KSB7XG4gICAgaWYgKGF1dG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgbXVzdCBcXGBpbXBvcnQgJ0BhbnRocm9waWMtYWkvc2RrL3NoaW1zLyR7c2hpbXMua2luZH0nXFxgIGJlZm9yZSBpbXBvcnRpbmcgYW55dGhpbmcgZWxzZSBmcm9tIEBhbnRocm9waWMtYWkvc2RrYCk7XG4gICAgfVxuICAgIGlmIChraW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgXFxgaW1wb3J0ICdAYW50aHJvcGljLWFpL3Nkay9zaGltcy8ke3NoaW1zLmtpbmR9J1xcYCBhZnRlciBcXGBpbXBvcnQgJ0BhbnRocm9waWMtYWkvc2RrL3NoaW1zLyR7a2luZH0nXFxgYCk7XG4gICAgfVxuICAgIGF1dG8gPSBvcHRpb25zLmF1dG87XG4gICAga2luZCA9IHNoaW1zLmtpbmQ7XG4gICAgZmV0Y2ggPSBzaGltcy5mZXRjaDtcbiAgICBSZXF1ZXN0ID0gc2hpbXMuUmVxdWVzdDtcbiAgICBSZXNwb25zZSA9IHNoaW1zLlJlc3BvbnNlO1xuICAgIEhlYWRlcnMgPSBzaGltcy5IZWFkZXJzO1xuICAgIEZvcm1EYXRhID0gc2hpbXMuRm9ybURhdGE7XG4gICAgQmxvYiA9IHNoaW1zLkJsb2I7XG4gICAgRmlsZSA9IHNoaW1zLkZpbGU7XG4gICAgUmVhZGFibGVTdHJlYW0gPSBzaGltcy5SZWFkYWJsZVN0cmVhbTtcbiAgICBnZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9ucyA9IHNoaW1zLmdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zO1xuICAgIGdldERlZmF1bHRBZ2VudCA9IHNoaW1zLmdldERlZmF1bHRBZ2VudDtcbiAgICBmaWxlRnJvbVBhdGggPSBzaGltcy5maWxlRnJvbVBhdGg7XG4gICAgaXNGc1JlYWRTdHJlYW0gPSBzaGltcy5pc0ZzUmVhZFN0cmVhbTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ2lzdHJ5Lm1qcy5tYXAiLAogICAgImltcG9ydCAqIGFzIG5mIGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0ICogYXMgZmQgZnJvbSAnZm9ybWRhdGEtbm9kZSc7XG5pbXBvcnQgS2VlcEFsaXZlQWdlbnQgZnJvbSAnYWdlbnRrZWVwYWxpdmUnO1xuaW1wb3J0IHsgQWJvcnRDb250cm9sbGVyIGFzIEFib3J0Q29udHJvbGxlclBvbHlmaWxsIH0gZnJvbSAnYWJvcnQtY29udHJvbGxlcic7XG5pbXBvcnQgeyBSZWFkU3RyZWFtIGFzIEZzUmVhZFN0cmVhbSB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgRm9ybURhdGFFbmNvZGVyIH0gZnJvbSAnZm9ybS1kYXRhLWVuY29kZXInO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBNdWx0aXBhcnRCb2R5IH0gZnJvbSBcIi4vTXVsdGlwYXJ0Qm9keS5tanNcIjtcbmltcG9ydCB7IFJlYWRhYmxlU3RyZWFtIH0gZnJvbSAnbm9kZTpzdHJlYW0vd2ViJztcbmxldCBmaWxlRnJvbVBhdGhXYXJuZWQgPSBmYWxzZTtcbmFzeW5jIGZ1bmN0aW9uIGZpbGVGcm9tUGF0aChwYXRoLCAuLi5hcmdzKSB7XG4gICAgLy8gdGhpcyBpbXBvcnQgZmFpbHMgaW4gZW52aXJvbm1lbnRzIHRoYXQgZG9uJ3QgaGFuZGxlIGV4cG9ydCBtYXBzIGNvcnJlY3RseSwgbGlrZSBvbGQgdmVyc2lvbnMgb2YgSmVzdFxuICAgIGNvbnN0IHsgZmlsZUZyb21QYXRoOiBfZmlsZUZyb21QYXRoIH0gPSBhd2FpdCBpbXBvcnQoJ2Zvcm1kYXRhLW5vZGUvZmlsZS1mcm9tLXBhdGgnKTtcbiAgICBpZiAoIWZpbGVGcm9tUGF0aFdhcm5lZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYGZpbGVGcm9tUGF0aCBpcyBkZXByZWNhdGVkOyB1c2UgZnMuY3JlYXRlUmVhZFN0cmVhbSgke0pTT04uc3RyaW5naWZ5KHBhdGgpfSkgaW5zdGVhZGApO1xuICAgICAgICBmaWxlRnJvbVBhdGhXYXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIGF3YWl0IF9maWxlRnJvbVBhdGgocGF0aCwgLi4uYXJncyk7XG59XG5jb25zdCBkZWZhdWx0SHR0cEFnZW50ID0gbmV3IEtlZXBBbGl2ZUFnZW50KHsga2VlcEFsaXZlOiB0cnVlLCB0aW1lb3V0OiA1ICogNjAgKiAxMDAwIH0pO1xuY29uc3QgZGVmYXVsdEh0dHBzQWdlbnQgPSBuZXcgS2VlcEFsaXZlQWdlbnQuSHR0cHNBZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZSwgdGltZW91dDogNSAqIDYwICogMTAwMCB9KTtcbmFzeW5jIGZ1bmN0aW9uIGdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zKGZvcm0sIG9wdHMpIHtcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IEZvcm1EYXRhRW5jb2Rlcihmb3JtKTtcbiAgICBjb25zdCByZWFkYWJsZSA9IFJlYWRhYmxlLmZyb20oZW5jb2Rlcik7XG4gICAgY29uc3QgYm9keSA9IG5ldyBNdWx0aXBhcnRCb2R5KHJlYWRhYmxlKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAuLi5vcHRzLmhlYWRlcnMsXG4gICAgICAgIC4uLmVuY29kZXIuaGVhZGVycyxcbiAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogZW5jb2Rlci5jb250ZW50TGVuZ3RoLFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4ub3B0cywgYm9keTogYm9keSwgaGVhZGVycyB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bnRpbWUoKSB7XG4gICAgLy8gUG9seWZpbGwgZ2xvYmFsIG9iamVjdCBpZiBuZWVkZWQuXG4gICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgKHRoZSB0eXBlcyBhcmUgc3VidGx5IGRpZmZlcmVudCwgYnV0IGNvbXBhdGlibGUgaW4gcHJhY3RpY2UpXG4gICAgICAgIGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyUG9seWZpbGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdub2RlJyxcbiAgICAgICAgZmV0Y2g6IG5mLmRlZmF1bHQsXG4gICAgICAgIFJlcXVlc3Q6IG5mLlJlcXVlc3QsXG4gICAgICAgIFJlc3BvbnNlOiBuZi5SZXNwb25zZSxcbiAgICAgICAgSGVhZGVyczogbmYuSGVhZGVycyxcbiAgICAgICAgRm9ybURhdGE6IGZkLkZvcm1EYXRhLFxuICAgICAgICBCbG9iOiBmZC5CbG9iLFxuICAgICAgICBGaWxlOiBmZC5GaWxlLFxuICAgICAgICBSZWFkYWJsZVN0cmVhbSxcbiAgICAgICAgZ2V0TXVsdGlwYXJ0UmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGdldERlZmF1bHRBZ2VudDogKHVybCkgPT4gKHVybC5zdGFydHNXaXRoKCdodHRwcycpID8gZGVmYXVsdEh0dHBzQWdlbnQgOiBkZWZhdWx0SHR0cEFnZW50KSxcbiAgICAgICAgZmlsZUZyb21QYXRoLFxuICAgICAgICBpc0ZzUmVhZFN0cmVhbTogKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIEZzUmVhZFN0cmVhbSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9kZS1ydW50aW1lLm1qcy5tYXAiLAogICAgInZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9Gb3JtRGF0YV9pbnN0YW5jZXMsIF9Gb3JtRGF0YV9lbnRyaWVzLCBfRm9ybURhdGFfc2V0RW50cnk7XG5pbXBvcnQgeyBpbnNwZWN0IH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IEZpbGUgfSBmcm9tIFwiLi9GaWxlLmpzXCI7XG5pbXBvcnQgeyBpc0ZpbGUgfSBmcm9tIFwiLi9pc0ZpbGUuanNcIjtcbmltcG9ydCB7IGlzQmxvYiB9IGZyb20gXCIuL2lzQmxvYi5qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuL2lzRnVuY3Rpb24uanNcIjtcbmltcG9ydCB7IGRlcHJlY2F0ZUNvbnN0cnVjdG9yRW50cmllcyB9IGZyb20gXCIuL2RlcHJlY2F0ZUNvbnN0cnVjdG9yRW50cmllcy5qc1wiO1xuZXhwb3J0IGNsYXNzIEZvcm1EYXRhIHtcbiAgICBjb25zdHJ1Y3RvcihlbnRyaWVzKSB7XG4gICAgICAgIF9Gb3JtRGF0YV9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBfRm9ybURhdGFfZW50cmllcy5zZXQodGhpcywgbmV3IE1hcCgpKTtcbiAgICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgICAgIGRlcHJlY2F0ZUNvbnN0cnVjdG9yRW50cmllcygpO1xuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKCh7IG5hbWUsIHZhbHVlLCBmaWxlTmFtZSB9KSA9PiB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSwgZmlsZU5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgWyhfRm9ybURhdGFfZW50cmllcyA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YV9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBTeW1ib2wuaGFzSW5zdGFuY2UpXSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiRm9ybURhdGFcIlxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5hcHBlbmQpXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLnNldClcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXRBbGwpXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmhhcylcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUuZGVsZXRlKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5lbnRyaWVzKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS52YWx1ZXMpXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmtleXMpXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0pXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmZvckVhY2gpKTtcbiAgICB9XG4gICAgYXBwZW5kKG5hbWUsIHZhbHVlLCBmaWxlTmFtZSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YV9pbnN0YW5jZXMsIFwibVwiLCBfRm9ybURhdGFfc2V0RW50cnkpLmNhbGwodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgYXBwZW5kOiB0cnVlLFxuICAgICAgICAgICAgcmF3VmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgYXJnc0xlbmd0aDogYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0KG5hbWUsIHZhbHVlLCBmaWxlTmFtZSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YV9pbnN0YW5jZXMsIFwibVwiLCBfRm9ybURhdGFfc2V0RW50cnkpLmNhbGwodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgYXBwZW5kOiBmYWxzZSxcbiAgICAgICAgICAgIHJhd1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGg6IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfZW50cmllcywgXCJmXCIpLmdldChTdHJpbmcobmFtZSkpO1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRbMF07XG4gICAgfVxuICAgIGdldEFsbChuYW1lKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfZW50cmllcywgXCJmXCIpLmdldChTdHJpbmcobmFtZSkpO1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkLnNsaWNlKCk7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YV9lbnRyaWVzLCBcImZcIikuaGFzKFN0cmluZyhuYW1lKSk7XG4gICAgfVxuICAgIGRlbGV0ZShuYW1lKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhX2VudHJpZXMsIFwiZlwiKS5kZWxldGUoU3RyaW5nKG5hbWUpKTtcbiAgICB9XG4gICAgKmtleXMoKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhX2VudHJpZXMsIFwiZlwiKS5rZXlzKCkpIHtcbiAgICAgICAgICAgIHlpZWxkIGtleTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAqZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMua2V5cygpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEFsbChuYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW25hbWUsIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAqdmFsdWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBbKF9Gb3JtRGF0YV9zZXRFbnRyeSA9IGZ1bmN0aW9uIF9Gb3JtRGF0YV9zZXRFbnRyeSh7IG5hbWUsIHJhd1ZhbHVlLCBhcHBlbmQsIGZpbGVOYW1lLCBhcmdzTGVuZ3RoIH0pIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGFwcGVuZCA/IFwiYXBwZW5kXCIgOiBcInNldFwiO1xuICAgICAgICBpZiAoYXJnc0xlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICcke21ldGhvZE5hbWV9JyBvbiAnRm9ybURhdGEnOiBgXG4gICAgICAgICAgICAgICAgKyBgMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICR7YXJnc0xlbmd0aH0gcHJlc2VudC5gKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmIChpc0ZpbGUocmF3VmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZpbGVOYW1lID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHJhd1ZhbHVlXG4gICAgICAgICAgICAgICAgOiBuZXcgRmlsZShbcmF3VmFsdWVdLCBmaWxlTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiByYXdWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHJhd1ZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQmxvYihyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IEZpbGUoW3Jhd1ZhbHVlXSwgZmlsZU5hbWUgPT09IHVuZGVmaW5lZCA/IFwiYmxvYlwiIDogZmlsZU5hbWUsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiByYXdWYWx1ZS50eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdGb3JtRGF0YSc6IGBcbiAgICAgICAgICAgICAgICArIFwicGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YV9lbnRyaWVzLCBcImZcIikuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfZW50cmllcywgXCJmXCIpLnNldChuYW1lLCBbdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFwcGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfZW50cmllcywgXCJmXCIpLnNldChuYW1lLCBbdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfSwgU3ltYm9sLml0ZXJhdG9yKV0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICB9XG4gICAgZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZSwgbmFtZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJGb3JtRGF0YVwiO1xuICAgIH1cbiAgICBbaW5zcGVjdC5jdXN0b21dKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgQmxvYiB9IGZyb20gXCIuL0Jsb2IuanNcIjtcbmV4cG9ydCBjb25zdCBpc0Jsb2IgPSAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgQmxvYjtcbiIsCiAgICAiaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSBcInV0aWxcIjtcbmV4cG9ydCBjb25zdCBkZXByZWNhdGVDb25zdHJ1Y3RvckVudHJpZXMgPSBkZXByZWNhdGUoKCkgPT4geyB9LCBcIkNvbnN0cnVjdG9yIFxcXCJlbnRyaWVzXFxcIiBhcmd1bWVudCBpcyBub3Qgc3BlYy1jb21wbGlhbnQgXCJcbiAgICArIFwiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXCIpO1xuIiwKICAgICJjb25zdCBhbHBoYWJldCA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7XG5mdW5jdGlvbiBjcmVhdGVCb3VuZGFyeSgpIHtcbiAgICBsZXQgc2l6ZSA9IDE2O1xuICAgIGxldCByZXMgPSBcIlwiO1xuICAgIHdoaWxlIChzaXplLS0pIHtcbiAgICAgICAgcmVzICs9IGFscGhhYmV0WyhNYXRoLnJhbmRvbSgpICogYWxwaGFiZXQubGVuZ3RoKSA8PCAwXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJvdW5kYXJ5O1xuIiwKICAgICJjb25zdCBnZXRUeXBlID0gKHZhbHVlKSA9PiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIGlmIChwcCA9PT0gbnVsbCB8fCBwcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBDdG9yID0gcHAuY29uc3RydWN0b3IgJiYgcHAuY29uc3RydWN0b3IudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gQ3RvciA9PT0gT2JqZWN0LnRvU3RyaW5nKCk7XG59XG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwKICAgICJjb25zdCBub3JtYWxpemVWYWx1ZSA9ICh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlKVxuICAgIC5yZXBsYWNlKC9cXHJ8XFxuL2csIChtYXRjaCwgaSwgc3RyKSA9PiB7XG4gICAgaWYgKChtYXRjaCA9PT0gXCJcXHJcIiAmJiBzdHJbaSArIDFdICE9PSBcIlxcblwiKVxuICAgICAgICB8fCAobWF0Y2ggPT09IFwiXFxuXCIgJiYgc3RyW2kgLSAxXSAhPT0gXCJcXHJcIikpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxyXFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgbm9ybWFsaXplVmFsdWU7XG4iLAogICAgImNvbnN0IGVzY2FwZU5hbWUgPSAobmFtZSkgPT4gU3RyaW5nKG5hbWUpXG4gICAgLnJlcGxhY2UoL1xcci9nLCBcIiUwRFwiKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIlMEFcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCIlMjJcIik7XG5leHBvcnQgZGVmYXVsdCBlc2NhcGVOYW1lO1xuIiwKICAgICJjb25zdCBpc0Z1bmN0aW9uID0gKHZhbHVlKSA9PiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpO1xuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsCiAgICAiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSBcIi4vaXNGdW5jdGlvbi5qc1wiO1xuZXhwb3J0IGNvbnN0IGlzRmlsZUxpa2UgPSAodmFsdWUpID0+IEJvb2xlYW4odmFsdWVcbiAgICAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCJcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbnN0cnVjdG9yKVxuICAgICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiRmlsZVwiXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5zdHJlYW0pXG4gICAgJiYgdmFsdWUubmFtZSAhPSBudWxsXG4gICAgJiYgdmFsdWUuc2l6ZSAhPSBudWxsXG4gICAgJiYgdmFsdWUubGFzdE1vZGlmaWVkICE9IG51bGwpO1xuIiwKICAgICJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5leHBvcnQgY29uc3QgaXNGb3JtRGF0YSA9ICh2YWx1ZSkgPT4gQm9vbGVhbih2YWx1ZVxuICAgICYmIGlzRnVuY3Rpb24odmFsdWUuY29uc3RydWN0b3IpXG4gICAgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gXCJGb3JtRGF0YVwiXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5hcHBlbmQpXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXRBbGwpXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5lbnRyaWVzKVxuICAgICYmIGlzRnVuY3Rpb24odmFsdWVbU3ltYm9sLml0ZXJhdG9yXSkpO1xuZXhwb3J0IGNvbnN0IGlzRm9ybURhdGFMaWtlID0gaXNGb3JtRGF0YTtcbiIsCiAgICAidmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9Gb3JtRGF0YUVuY29kZXJfaW5zdGFuY2VzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEYsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRl9CWVRFUywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTX0xFTkdUSCwgX0Zvcm1EYXRhRW5jb2Rlcl9EQVNIRVMsIF9Gb3JtRGF0YUVuY29kZXJfZW5jb2RlciwgX0Zvcm1EYXRhRW5jb2Rlcl9mb290ZXIsIF9Gb3JtRGF0YUVuY29kZXJfZm9ybSwgX0Zvcm1EYXRhRW5jb2Rlcl9vcHRpb25zLCBfRm9ybURhdGFFbmNvZGVyX2dldEZpZWxkSGVhZGVyO1xuaW1wb3J0IGNyZWF0ZUJvdW5kYXJ5IGZyb20gXCIuL3V0aWwvY3JlYXRlQm91bmRhcnkuanNcIjtcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gXCIuL3V0aWwvaXNQbGFpbk9iamVjdC5qc1wiO1xuaW1wb3J0IG5vcm1hbGl6ZSBmcm9tIFwiLi91dGlsL25vcm1hbGl6ZVZhbHVlLmpzXCI7XG5pbXBvcnQgZXNjYXBlIGZyb20gXCIuL3V0aWwvZXNjYXBlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNGaWxlTGlrZSB9IGZyb20gXCIuL3V0aWwvaXNGaWxlTGlrZS5qc1wiO1xuaW1wb3J0IHsgaXNGb3JtRGF0YSB9IGZyb20gXCIuL3V0aWwvaXNGb3JtRGF0YS5qc1wiO1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZW5hYmxlQWRkaXRpb25hbEhlYWRlcnM6IGZhbHNlXG59O1xuZXhwb3J0IGNsYXNzIEZvcm1EYXRhRW5jb2RlciB7XG4gICAgY29uc3RydWN0b3IoZm9ybSwgYm91bmRhcnlPck9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgX0Zvcm1EYXRhRW5jb2Rlcl9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBfRm9ybURhdGFFbmNvZGVyX0NSTEYuc2V0KHRoaXMsIFwiXFxyXFxuXCIpO1xuICAgICAgICBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRl9CWVRFU19MRU5HVEguc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9Gb3JtRGF0YUVuY29kZXJfREFTSEVTLnNldCh0aGlzLCBcIi1cIi5yZXBlYXQoMikpO1xuICAgICAgICBfRm9ybURhdGFFbmNvZGVyX2VuY29kZXIuc2V0KHRoaXMsIG5ldyBUZXh0RW5jb2RlcigpKTtcbiAgICAgICAgX0Zvcm1EYXRhRW5jb2Rlcl9mb290ZXIuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9Gb3JtRGF0YUVuY29kZXJfZm9ybS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0Zvcm1EYXRhRW5jb2Rlcl9vcHRpb25zLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBpZiAoIWlzRm9ybURhdGEoZm9ybSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBhIEZvcm1EYXRhIGluc3RhbmNlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmRhcnk7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGJvdW5kYXJ5T3JPcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGJvdW5kYXJ5T3JPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeU9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJvdW5kYXJ5KSB7XG4gICAgICAgICAgICBib3VuZGFyeSA9IGNyZWF0ZUJvdW5kYXJ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGJvdW5kYXJ5IGFyZ3VtZW50IHRvIGJlIGEgc3RyaW5nLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucyAmJiAhaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIG9wdGlvbnMgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZm9ybSwgZm9ybSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfb3B0aW9ucywgeyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9LCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZW5jb2RlciwgXCJmXCIpLmVuY29kZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgXCJmXCIpKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRl9CWVRFU19MRU5HVEgsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTLCBcImZcIikuYnl0ZUxlbmd0aCwgXCJmXCIpO1xuICAgICAgICB0aGlzLmJvdW5kYXJ5ID0gYGZvcm0tZGF0YS1ib3VuZGFyeS0ke2JvdW5kYXJ5fWA7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHt0aGlzLmJvdW5kYXJ5fWA7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9mb290ZXIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9lbmNvZGVyLCBcImZcIikuZW5jb2RlKGAke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9EQVNIRVMsIFwiZlwiKX0ke3RoaXMuYm91bmRhcnl9JHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfREFTSEVTLCBcImZcIil9JHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgXCJmXCIpLnJlcGVhdCgyKX1gKSwgXCJmXCIpO1xuICAgICAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBTdHJpbmcodGhpcy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgICAgICBcIkNvbnRlbnQtTGVuZ3RoXCI6IHRoaXMuY29udGVudExlbmd0aFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgICAgICAgICAgYm91bmRhcnk6IHsgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZTogeyB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2UgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHsgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlIH0sXG4gICAgICAgICAgICBoZWFkZXJzOiB7IHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZSB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDb250ZW50TGVuZ3RoKCkge1xuICAgICAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgcmF3XSBvZiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZm9ybSwgXCJmXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRmlsZUxpa2UocmF3KSA/IHJhdyA6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9lbmNvZGVyLCBcImZcIikuZW5jb2RlKG5vcm1hbGl6ZShyYXcpKTtcbiAgICAgICAgICAgIGxlbmd0aCArPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfaW5zdGFuY2VzLCBcIm1cIiwgX0Zvcm1EYXRhRW5jb2Rlcl9nZXRGaWVsZEhlYWRlcikuY2FsbCh0aGlzLCBuYW1lLCB2YWx1ZSkuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIGxlbmd0aCArPSBpc0ZpbGVMaWtlKHZhbHVlKSA/IHZhbHVlLnNpemUgOiB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgbGVuZ3RoICs9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTX0xFTkdUSCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZW5ndGggKyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZm9vdGVyLCBcImZcIikuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgKnZhbHVlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgcmF3XSBvZiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZm9ybSwgXCJmXCIpLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpc0ZpbGVMaWtlKHJhdykgPyByYXcgOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZW5jb2RlciwgXCJmXCIpLmVuY29kZShub3JtYWxpemUocmF3KSk7XG4gICAgICAgICAgICB5aWVsZCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfaW5zdGFuY2VzLCBcIm1cIiwgX0Zvcm1EYXRhRW5jb2Rlcl9nZXRGaWVsZEhlYWRlcikuY2FsbCh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgICAgICAgIHlpZWxkIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX2Zvb3RlciwgXCJmXCIpO1xuICAgIH1cbiAgICBhc3luYyAqZW5jb2RlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGlzRmlsZUxpa2UocGFydCkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCogcGFydC5zdHJlYW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIHBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgWyhfRm9ybURhdGFFbmNvZGVyX0NSTEYgPSBuZXcgV2Vha01hcCgpLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVMgPSBuZXcgV2Vha01hcCgpLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVNfTEVOR1RIID0gbmV3IFdlYWtNYXAoKSwgX0Zvcm1EYXRhRW5jb2Rlcl9EQVNIRVMgPSBuZXcgV2Vha01hcCgpLCBfRm9ybURhdGFFbmNvZGVyX2VuY29kZXIgPSBuZXcgV2Vha01hcCgpLCBfRm9ybURhdGFFbmNvZGVyX2Zvb3RlciA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfZm9ybSA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfb3B0aW9ucyA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX0Zvcm1EYXRhRW5jb2Rlcl9nZXRGaWVsZEhlYWRlciA9IGZ1bmN0aW9uIF9Gb3JtRGF0YUVuY29kZXJfZ2V0RmllbGRIZWFkZXIobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhlYWRlciA9IFwiXCI7XG4gICAgICAgIGhlYWRlciArPSBgJHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfREFTSEVTLCBcImZcIil9JHt0aGlzLmJvdW5kYXJ5fSR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEYsIFwiZlwiKX1gO1xuICAgICAgICBoZWFkZXIgKz0gYENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiR7ZXNjYXBlKG5hbWUpfVwiYDtcbiAgICAgICAgaWYgKGlzRmlsZUxpa2UodmFsdWUpKSB7XG4gICAgICAgICAgICBoZWFkZXIgKz0gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cIiR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEYsIFwiZlwiKX1gO1xuICAgICAgICAgICAgaGVhZGVyICs9IGBDb250ZW50LVR5cGU6ICR7dmFsdWUudHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwifWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9vcHRpb25zLCBcImZcIikuZW5hYmxlQWRkaXRpb25hbEhlYWRlcnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGhlYWRlciArPSBgJHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgXCJmXCIpfUNvbnRlbnQtTGVuZ3RoOiAke2lzRmlsZUxpa2UodmFsdWUpID8gdmFsdWUuc2l6ZSA6IHZhbHVlLmJ5dGVMZW5ndGh9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX2VuY29kZXIsIFwiZlwiKS5lbmNvZGUoYCR7aGVhZGVyfSR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEYsIFwiZlwiKS5yZXBlYXQoMil9YCk7XG4gICAgfSwgU3ltYm9sLml0ZXJhdG9yKV0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpO1xuICAgIH1cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoKTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgRW5jb2RlciA9IEZvcm1EYXRhRW5jb2RlcjtcbiIsCiAgICAiLyoqXG4gKiBEaXNjbGFpbWVyOiBtb2R1bGVzIGluIF9zaGltcyBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgaW1wb3J0ZWQgYnkgU0RLIHVzZXJzLlxuICovXG5leHBvcnQgY2xhc3MgTXVsdGlwYXJ0Qm9keSB7XG4gICAgY29uc3RydWN0b3IoYm9keSkge1xuICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiAnTXVsdGlwYXJ0Qm9keSc7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TXVsdGlwYXJ0Qm9keS5tanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyB0eXBlcyBmcm9tIFwiLi4vX3NoaW1zL25vZGUtdHlwZXMubWpzXCI7XG5pbXBvcnQgeyBzZXRTaGltcyB9IGZyb20gXCIuLi9fc2hpbXMvcmVnaXN0cnkubWpzXCI7XG5pbXBvcnQgeyBnZXRSdW50aW1lIH0gZnJvbSBcIi4uL19zaGltcy9ub2RlLXJ1bnRpbWUubWpzXCI7XG5zZXRTaGltcyhnZXRSdW50aW1lKCkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9kZS5tanMubWFwIiwKICAgICIjIS91c3IvYmluL2VudiAtUyBub2RlIC0tbm8td2FybmluZ3M9RXhwZXJpbWVudGFsV2FybmluZyAtLWVuYWJsZS1zb3VyY2UtbWFwc1xuaW1wb3J0IHsgaW5pdFNlbnRyeSB9IGZyb20gJy4uL3NlcnZpY2VzL3NlbnRyeS5qcydcbmltcG9ydCB7IFBST0RVQ1RfTkFNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuaW5pdFNlbnRyeSgpIC8vIEluaXRpYWxpemUgU2VudHJ5IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG5cbi8vIFhYWDogV2l0aG91dCB0aGlzIGxpbmUgKGFuZCB0aGUgT2JqZWN0LmtleXMsIGV2ZW4gdGhvdWdoIGl0IHNlZW1zIGxpa2UgaXQgZG9lcyBub3RoaW5nISksXG4vLyB0aGVyZSBpcyBhIGJ1ZyBpbiBCdW4gb25seSBvbiBXaW4zMiB0aGF0IGNhdXNlcyB0aGlzIGltcG9ydCB0byBiZSByZW1vdmVkLCBldmVuIHRob3VnaFxuLy8gaXRzIHVzZSBpcyBzb2xlbHkgYmVjYXVzZSBvZiBpdHMgc2lkZS1lZmZlY3RzLlxuaW1wb3J0ICogYXMgZG9udGNhcmUgZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvc2hpbXMvbm9kZSdcbk9iamVjdC5rZXlzKGRvbnRjYXJlKVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZWFkU3RyZWFtIH0gZnJvbSAndHR5J1xuaW1wb3J0IHsgb3BlblN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tICdmcydcbmltcG9ydCB7IHJlbmRlciwgUmVuZGVyT3B0aW9ucyB9IGZyb20gJ2luaydcbmltcG9ydCB7IFJFUEwgfSBmcm9tICcuLi9zY3JlZW5zL1JFUEwuanMnXG5pbXBvcnQgeyBhZGRUb0hpc3RvcnkgfSBmcm9tICcuLi9oaXN0b3J5LmpzJ1xuaW1wb3J0IHsgZ2V0Q29udGV4dCwgc2V0Q29udGV4dCwgcmVtb3ZlQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnQGNvbW1hbmRlci1qcy9leHRyYS10eXBpbmdzJ1xuaW1wb3J0IHsgYXNrIH0gZnJvbSAnLi4vdXRpbHMvYXNrLmpzJ1xuaW1wb3J0IHsgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2wgfSBmcm9tICcuLi9wZXJtaXNzaW9ucy5qcydcbmltcG9ydCB7IGdldFRvb2xzIH0gZnJvbSAnLi4vdG9vbHMuanMnXG5pbXBvcnQge1xuICBnZXRHbG9iYWxDb25maWcsXG4gIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnLFxuICBzYXZlR2xvYmFsQ29uZmlnLFxuICBzYXZlQ3VycmVudFByb2plY3RDb25maWcsXG4gIGdldEN1c3RvbUFwaUtleVN0YXR1cyxcbiAgbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnLFxuICBzZXRDb25maWdGb3JDTEksXG4gIGRlbGV0ZUNvbmZpZ0ZvckNMSSxcbiAgZ2V0Q29uZmlnRm9yQ0xJLFxuICBsaXN0Q29uZmlnRm9yQ0xJLFxuICBlbmFibGVDb25maWdzLFxufSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJ1xuaW1wb3J0IHsgZGF0ZVRvRmlsZW5hbWUsIGxvZ0Vycm9yLCBwYXJzZUxvZ0ZpbGVuYW1lIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgT25ib2FyZGluZyB9IGZyb20gJy4uL2NvbXBvbmVudHMvT25ib2FyZGluZy5qcydcbmltcG9ydCB7IERvY3RvciB9IGZyb20gJy4uL3NjcmVlbnMvRG9jdG9yLmpzJ1xuaW1wb3J0IHsgQXBwcm92ZUFwaUtleSB9IGZyb20gJy4uL2NvbXBvbmVudHMvQXBwcm92ZUFwaUtleS5qcydcbmltcG9ydCB7IFRydXN0RGlhbG9nIH0gZnJvbSAnLi4vY29tcG9uZW50cy9UcnVzdERpYWxvZy5qcydcbmltcG9ydCB7IGNoZWNrSGFzVHJ1c3REaWFsb2dBY2NlcHRlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7IGlzRGVmYXVsdFNsb3dBbmRDYXBhYmxlTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC5qcydcbmltcG9ydCB7IExvZ0xpc3QgfSBmcm9tICcuLi9zY3JlZW5zL0xvZ0xpc3QuanMnXG5pbXBvcnQgeyBSZXN1bWVDb252ZXJzYXRpb24gfSBmcm9tICcuLi9zY3JlZW5zL1Jlc3VtZUNvbnZlcnNhdGlvbi5qcydcbmltcG9ydCB7IHN0YXJ0TUNQU2VydmVyIH0gZnJvbSAnLi9tY3AuanMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi91dGlscy9lbnYuanMnXG5pbXBvcnQgeyBnZXRDd2QsIHNldEN3ZCB9IGZyb20gJy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB7IGdldENvbW1hbmRzIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBnZXROZXh0QXZhaWxhYmxlTG9nRm9ya051bWJlciwgbG9hZExvZ0xpc3QgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBsb2FkTWVzc2FnZXNGcm9tTG9nIH0gZnJvbSAnLi4vdXRpbHMvY29udmVyc2F0aW9uUmVjb3ZlcnkuanMnXG5pbXBvcnQgeyBjbGVhbnVwT2xkTWVzc2FnZUZpbGVzSW5CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vdXRpbHMvY2xlYW51cC5qcydcbmltcG9ydCB7XG4gIGhhbmRsZUxpc3RBcHByb3ZlZFRvb2xzLFxuICBoYW5kbGVSZW1vdmVBcHByb3ZlZFRvb2wsXG59IGZyb20gJy4uL2NvbW1hbmRzL2FwcHJvdmVkVG9vbHMuanMnXG5pbXBvcnQge1xuICBhZGRNY3BTZXJ2ZXIsXG4gIGdldE1jcFNlcnZlcixcbiAgbGlzdE1DUFNlcnZlcnMsXG4gIHBhcnNlRW52VmFycyxcbiAgcmVtb3ZlTWNwU2VydmVyLFxuICBnZXRDbGllbnRzLFxuICBlbnN1cmVDb25maWdTY29wZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvbWNwQ2xpZW50LmpzJ1xuaW1wb3J0IHsgaGFuZGxlTWNwcmNTZXJ2ZXJBcHByb3ZhbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tY3BTZXJ2ZXJBcHByb3ZhbC5qcydcbmltcG9ydCB7IGNoZWNrR2F0ZSwgaW5pdGlhbGl6ZVN0YXRzaWcsIGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IGdldEV4YW1wbGVDb21tYW5kcyB9IGZyb20gJy4uL3V0aWxzL2V4YW1wbGVDb21tYW5kcy5qcydcbmltcG9ydCB7IGN1cnNvclNob3cgfSBmcm9tICdhbnNpLWVzY2FwZXMnXG5pbXBvcnQge1xuICBnZXRMYXRlc3RWZXJzaW9uLFxuICBpbnN0YWxsR2xvYmFsUGFja2FnZSxcbiAgYXNzZXJ0TWluVmVyc2lvbixcbn0gZnJvbSAnLi4vdXRpbHMvYXV0b1VwZGF0ZXIuanMnXG5pbXBvcnQgeyBDQUNIRV9QQVRIUyB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IFBlcnNpc3RlbnRTaGVsbCB9IGZyb20gJy4uL3V0aWxzL1BlcnNpc3RlbnRTaGVsbC5qcydcbmltcG9ydCB7IEdBVEVfVVNFX0VYVEVSTkFMX1VQREFURVIgfSBmcm9tICcuLi9jb25zdGFudHMvYmV0YXMuanMnXG5pbXBvcnQgeyBjbGVhclRlcm1pbmFsIH0gZnJvbSAnLi4vdXRpbHMvdGVybWluYWwuanMnXG5pbXBvcnQgeyBzaG93SW52YWxpZENvbmZpZ0RpYWxvZyB9IGZyb20gJy4uL2NvbXBvbmVudHMvSW52YWxpZENvbmZpZ0RpYWxvZy5qcydcbmltcG9ydCB7IENvbmZpZ1BhcnNlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvcnMuanMnXG5pbXBvcnQgeyBncmFudFJlYWRQZXJtaXNzaW9uRm9yT3JpZ2luYWxEaXIgfSBmcm9tICcuLi91dGlscy9wZXJtaXNzaW9ucy9maWxlc3lzdGVtLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxldGVPbmJvYXJkaW5nKCk6IHZvaWQge1xuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBzYXZlR2xvYmFsQ29uZmlnKHtcbiAgICAuLi5jb25maWcsXG4gICAgaGFzQ29tcGxldGVkT25ib2FyZGluZzogdHJ1ZSxcbiAgICBsYXN0T25ib2FyZGluZ1ZlcnNpb246IE1BQ1JPLlZFUlNJT04sXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dTZXR1cFNjcmVlbnMoXG4gIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zPzogYm9vbGVhbixcbiAgcHJpbnQ/OiBib29sZWFuLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBpZiAoXG4gICAgIWNvbmZpZy50aGVtZSB8fFxuICAgICFjb25maWcuaGFzQ29tcGxldGVkT25ib2FyZGluZyAvLyBhbHdheXMgc2hvdyBvbmJvYXJkaW5nIGF0IGxlYXN0IG9uY2VcbiAgKSB7XG4gICAgYXdhaXQgY2xlYXJUZXJtaW5hbCgpXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxPbmJvYXJkaW5nXG4gICAgICAgICAgb25Eb25lPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb21wbGV0ZU9uYm9hcmRpbmcoKVxuICAgICAgICAgICAgYXdhaXQgY2xlYXJUZXJtaW5hbCgpXG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPixcbiAgICAgICAge1xuICAgICAgICAgIGV4aXRPbkN0cmxDOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGN1c3RvbSBBUEkga2V5IChvbmx5IGFsbG93ZWQgZm9yIGFudHMpXG4gIGlmIChwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSAmJiBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnKSB7XG4gICAgY29uc3QgY3VzdG9tQXBpS2V5VHJ1bmNhdGVkID0gbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnKFxuICAgICAgcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVkhLFxuICAgIClcbiAgICBjb25zdCBrZXlTdGF0dXMgPSBnZXRDdXN0b21BcGlLZXlTdGF0dXMoY3VzdG9tQXBpS2V5VHJ1bmNhdGVkKVxuICAgIGlmIChrZXlTdGF0dXMgPT09ICduZXcnKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgcmVuZGVyKFxuICAgICAgICAgIDxBcHByb3ZlQXBpS2V5XG4gICAgICAgICAgICBjdXN0b21BcGlLZXlUcnVuY2F0ZWQ9e2N1c3RvbUFwaUtleVRydW5jYXRlZH1cbiAgICAgICAgICAgIG9uRG9uZT17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBjbGVhclRlcm1pbmFsKClcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4aXRPbkN0cmxDOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIEluIG5vbi1pbnRlcmFjdGl2ZSBvciBkYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zIG1vZGUsIHNraXAgdGhlIHRydXN0IGRpYWxvZ1xuICBpZiAoIXByaW50ICYmICFkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucykge1xuICAgIGlmICghY2hlY2tIYXNUcnVzdERpYWxvZ0FjY2VwdGVkKCkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCBvbkRvbmUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gR3JhbnQgcmVhZCBwZXJtaXNzaW9uIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgZ3JhbnRSZWFkUGVybWlzc2lvbkZvck9yaWdpbmFsRGlyKClcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoPFRydXN0RGlhbG9nIG9uRG9uZT17b25Eb25lfSAvPiwge1xuICAgICAgICAgIGV4aXRPbkN0cmxDOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQWZ0ZXIgdHJ1c3QgZGlhbG9nLCBjaGVjayBmb3IgYW55IG1jcHJjIHNlcnZlcnMgdGhhdCBuZWVkIGFwcHJvdmFsXG4gICAgaWYgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcpIHtcbiAgICAgIGF3YWl0IGhhbmRsZU1jcHJjU2VydmVyQXBwcm92YWxzKClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9nU3RhcnR1cCgpOiB2b2lkIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgc2F2ZUdsb2JhbENvbmZpZyh7XG4gICAgLi4uY29uZmlnLFxuICAgIG51bVN0YXJ0dXBzOiAoY29uZmlnLm51bVN0YXJ0dXBzID8/IDApICsgMSxcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXAoXG4gIGN3ZDogc3RyaW5nLFxuICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucz86IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRG9uJ3QgYXdhaXQgc28gd2UgZG9uJ3QgYmxvY2sgc3RhcnR1cFxuICBzZXRDd2QoY3dkKVxuXG4gIC8vIEFsd2F5cyBncmFudCByZWFkIHBlcm1pc3Npb25zIGZvciBvcmlnaW5hbCB3b3JraW5nIGRpclxuICBncmFudFJlYWRQZXJtaXNzaW9uRm9yT3JpZ2luYWxEaXIoKVxuXG4gIC8vIElmIC0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucyBpcyBzZXQsIHZlcmlmeSB3ZSdyZSBpbiBhIHNhZmUgZW52aXJvbm1lbnRcbiAgaWYgKGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zKSB7XG4gICAgLy8gQ2hlY2sgaWYgcnVubmluZyBhcyByb290L3N1ZG8gb24gVW5peC1saWtlIHN5c3RlbXNcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInICYmXG4gICAgICB0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHByb2Nlc3MuZ2V0dWlkKCkgPT09IDBcbiAgICApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAtLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCByb290L3N1ZG8gcHJpdmlsZWdlcyBmb3Igc2VjdXJpdHkgcmVhc29uc2AsXG4gICAgICApXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG5cbiAgICAvLyBPbmx5IGF3YWl0IGlmIC0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucyBpcyBzZXRcbiAgICBjb25zdCBbaXNEb2NrZXIsIGhhc0ludGVybmV0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGVudi5nZXRJc0RvY2tlcigpLFxuICAgICAgZW52Lmhhc0ludGVybmV0QWNjZXNzKCksXG4gICAgXSlcblxuICAgIGlmICghaXNEb2NrZXIgfHwgaGFzSW50ZXJuZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAtLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBEb2NrZXIgY29udGFpbmVycyB3aXRoIG5vIGludGVybmV0IGFjY2VzcyBidXQgZ290IERvY2tlcjogJHtpc0RvY2tlcn0gYW5kIGhhc0ludGVybmV0OiAke2hhc0ludGVybmV0fWAsXG4gICAgICApXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xlYW51cE9sZE1lc3NhZ2VGaWxlc0luQmFja2dyb3VuZCgpXG4gIGdldEV4YW1wbGVDb21tYW5kcygpIC8vIFByZS1mZXRjaCBleGFtcGxlIGNvbW1hbmRzXG4gIGdldENvbnRleHQoKSAvLyBQcmUtZmV0Y2ggYWxsIGNvbnRleHQgZGF0YSBhdCBvbmNlXG4gIGluaXRpYWxpemVTdGF0c2lnKCkgLy8gS2ljayBvZmYgc3RhdHNpZyBpbml0aWFsaXphdGlvblxuXG4gIC8vIE1pZ3JhdGUgb2xkIGl0ZXJtMktleUJpbmRpbmdJbnN0YWxsZWQgY29uZmlnIHRvIG5ldyBzaGlmdEVudGVyS2V5QmluZGluZ0luc3RhbGxlZFxuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBpZiAoXG4gICAgZ2xvYmFsQ29uZmlnLml0ZXJtMktleUJpbmRpbmdJbnN0YWxsZWQgPT09IHRydWUgJiZcbiAgICBnbG9iYWxDb25maWcuc2hpZnRFbnRlcktleUJpbmRpbmdJbnN0YWxsZWQgIT09IHRydWVcbiAgKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgIC4uLmdsb2JhbENvbmZpZyxcbiAgICAgIHNoaWZ0RW50ZXJLZXlCaW5kaW5nSW5zdGFsbGVkOiB0cnVlLFxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIG9sZCBjb25maWcgcHJvcGVydHlcbiAgICBkZWxldGUgdXBkYXRlZENvbmZpZy5pdGVybTJLZXlCaW5kaW5nSW5zdGFsbGVkXG4gICAgc2F2ZUdsb2JhbENvbmZpZyh1cGRhdGVkQ29uZmlnKVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGxhc3Qgc2Vzc2lvbidzIGNvc3QgYW5kIGR1cmF0aW9uXG4gIGNvbnN0IHByb2plY3RDb25maWcgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gIGlmIChcbiAgICBwcm9qZWN0Q29uZmlnLmxhc3RDb3N0ICE9PSB1bmRlZmluZWQgJiZcbiAgICBwcm9qZWN0Q29uZmlnLmxhc3REdXJhdGlvbiAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV9leGl0Jywge1xuICAgICAgbGFzdF9zZXNzaW9uX2Nvc3Q6IFN0cmluZyhwcm9qZWN0Q29uZmlnLmxhc3RDb3N0KSxcbiAgICAgIGxhc3Rfc2Vzc2lvbl9hcGlfZHVyYXRpb246IFN0cmluZyhwcm9qZWN0Q29uZmlnLmxhc3RBUElEdXJhdGlvbiksXG4gICAgICBsYXN0X3Nlc3Npb25fZHVyYXRpb246IFN0cmluZyhwcm9qZWN0Q29uZmlnLmxhc3REdXJhdGlvbiksXG4gICAgICBsYXN0X3Nlc3Npb25faWQ6IHByb2plY3RDb25maWcubGFzdFNlc3Npb25JZCxcbiAgICB9KVxuICAgIC8vIENsZWFyIHRoZSB2YWx1ZXMgYWZ0ZXIgbG9nZ2luZ1xuICAgIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyh7XG4gICAgICAuLi5wcm9qZWN0Q29uZmlnLFxuICAgICAgbGFzdENvc3Q6IHVuZGVmaW5lZCxcbiAgICAgIGxhc3RBUElEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgbGFzdER1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICBsYXN0U2Vzc2lvbklkOiB1bmRlZmluZWQsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGF1dG8tdXBkYXRlciBwZXJtaXNzaW9uc1xuICBjb25zdCBhdXRvVXBkYXRlclN0YXR1cyA9IGdsb2JhbENvbmZpZy5hdXRvVXBkYXRlclN0YXR1cyA/PyAnbm90X2NvbmZpZ3VyZWQnXG4gIGlmIChhdXRvVXBkYXRlclN0YXR1cyA9PT0gJ25vdF9jb25maWd1cmVkJykge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV9zZXR1cF9hdXRvX3VwZGF0ZXJfbm90X2NvbmZpZ3VyZWQnLCB7fSlcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgIHJlbmRlcig8RG9jdG9yIG9uRG9uZT17KCkgPT4gcmVzb2x2ZSgpfSAvPilcbiAgICB9KVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIC8vIFZhbGlkYXRlIGNvbmZpZ3MgYXJlIHZhbGlkIGFuZCBlbmFibGUgY29uZmlndXJhdGlvbiBzeXN0ZW1cbiAgdHJ5IHtcbiAgICBlbmFibGVDb25maWdzKClcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDb25maWdQYXJzZUVycm9yKSB7XG4gICAgICAvLyBTaG93IHRoZSBpbnZhbGlkIGNvbmZpZyBkaWFsb2cgd2l0aCB0aGUgZXJyb3Igb2JqZWN0XG4gICAgICBhd2FpdCBzaG93SW52YWxpZENvbmZpZ0RpYWxvZyh7IGVycm9yIH0pXG4gICAgICByZXR1cm4gLy8gRXhpdCBhZnRlciBoYW5kbGluZyB0aGUgY29uZmlnIGVycm9yXG4gICAgfVxuICB9XG5cbiAgbGV0IGlucHV0UHJvbXB0ID0gJydcbiAgbGV0IHJlbmRlckNvbnRleHQ6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQgPSB7XG4gICAgZXhpdE9uQ3RybEM6IGZhbHNlLFxuICAgIG9uRmxpY2tlcigpIHtcbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9mbGlja2VyJywge30pXG4gICAgfSxcbiAgfVxuXG4gIGlmIChcbiAgICAhcHJvY2Vzcy5zdGRpbi5pc1RUWSAmJlxuICAgICFwcm9jZXNzLmVudi5DSSAmJlxuICAgIC8vIElucHV0IGhpamFja2luZyBicmVha3MgTUNQLlxuICAgICFwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJ21jcCcpXG4gICkge1xuICAgIGlucHV0UHJvbXB0ID0gYXdhaXQgc3RkaW4oKVxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0dHlGZCA9IG9wZW5TeW5jKCcvZGV2L3R0eScsICdyJylcbiAgICAgICAgcmVuZGVyQ29udGV4dCA9IHsgLi4ucmVuZGVyQ29udGV4dCwgc3RkaW46IG5ldyBSZWFkU3RyZWFtKHR0eUZkKSB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoYENvdWxkIG5vdCBvcGVuIC9kZXYvdHR5OiAke2Vycn1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBhd2FpdCBwYXJzZUFyZ3MoaW5wdXRQcm9tcHQsIHJlbmRlckNvbnRleHQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlQXJncyhcbiAgc3RkaW5Db250ZW50OiBzdHJpbmcsXG4gIHJlbmRlckNvbnRleHQ6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPENvbW1hbmQ+IHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcblxuICBjb25zdCByZW5kZXJDb250ZXh0V2l0aEV4aXRPbkN0cmxDID0ge1xuICAgIC4uLnJlbmRlckNvbnRleHQsXG4gICAgZXhpdE9uQ3RybEM6IHRydWUsXG4gIH1cblxuICAvLyBHZXQgdGhlIGluaXRpYWwgbGlzdCBvZiBjb21tYW5kcyBmaWx0ZXJpbmcgYmFzZWQgb24gdXNlciB0eXBlXG4gIGNvbnN0IGNvbW1hbmRzID0gYXdhaXQgZ2V0Q29tbWFuZHMoKVxuXG4gIC8vIEZvcm1hdCBjb21tYW5kIGxpc3QgZm9yIGhlbHAgdGV4dCAodXNpbmcgc2FtZSBmaWx0ZXIgYXMgaW4gaGVscC50cylcbiAgY29uc3QgY29tbWFuZExpc3QgPSBjb21tYW5kc1xuICAgIC5maWx0ZXIoY21kID0+ICFjbWQuaXNIaWRkZW4pXG4gICAgLm1hcChjbWQgPT4gYC8ke2NtZC5uYW1lfSAtICR7Y21kLmRlc2NyaXB0aW9ufWApXG4gICAgLmpvaW4oJ1xcbicpXG5cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKCdjbGF1ZGUnKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIGAke1BST0RVQ1RfTkFNRX0gLSBzdGFydHMgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbiBieSBkZWZhdWx0LCB1c2UgLXAvLS1wcmludCBmb3Igbm9uLWludGVyYWN0aXZlIG91dHB1dFxuXG5TbGFzaCBjb21tYW5kcyBhdmFpbGFibGUgZHVyaW5nIGFuIGludGVyYWN0aXZlIHNlc3Npb246XG4ke2NvbW1hbmRMaXN0fWAsXG4gICAgKVxuICAgIC5hcmd1bWVudCgnW3Byb21wdF0nLCAnWW91ciBwcm9tcHQnLCBTdHJpbmcpXG4gICAgLm9wdGlvbignLWMsIC0tY3dkIDxjd2Q+JywgJ1RoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5JywgU3RyaW5nLCBjd2QoKSlcbiAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdFbmFibGUgZGVidWcgbW9kZScsICgpID0+IHRydWUpXG4gICAgLm9wdGlvbihcbiAgICAgICctLXZlcmJvc2UnLFxuICAgICAgJ092ZXJyaWRlIHZlcmJvc2UgbW9kZSBzZXR0aW5nIGZyb20gY29uZmlnJyxcbiAgICAgICgpID0+IHRydWUsXG4gICAgKVxuICAgIC5vcHRpb24oJy1lYSwgLS1lbmFibGUtYXJjaGl0ZWN0JywgJ0VuYWJsZSB0aGUgQXJjaGl0ZWN0IHRvb2wnLCAoKSA9PiB0cnVlKVxuICAgIC5vcHRpb24oXG4gICAgICAnLXAsIC0tcHJpbnQnLFxuICAgICAgJ1ByaW50IHJlc3BvbnNlIGFuZCBleGl0ICh1c2VmdWwgZm9yIHBpcGVzKScsXG4gICAgICAoKSA9PiB0cnVlLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgJy0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucycsXG4gICAgICAnU2tpcCBhbGwgcGVybWlzc2lvbiBjaGVja3MuIE9ubHkgd29ya3MgaW4gRG9ja2VyIGNvbnRhaW5lcnMgd2l0aCBubyBpbnRlcm5ldCBhY2Nlc3MuIFdpbGwgY3Jhc2ggb3RoZXJ3aXNlLicsXG4gICAgICAoKSA9PiB0cnVlLFxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIHtcbiAgICAgICAgICBjd2QsXG4gICAgICAgICAgZGVidWcsXG4gICAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgICBlbmFibGVBcmNoaXRlY3QsXG4gICAgICAgICAgcHJpbnQsXG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnMsXG4gICAgICAgIH0sXG4gICAgICApID0+IHtcbiAgICAgICAgYXdhaXQgc2hvd1NldHVwU2NyZWVucyhkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucywgcHJpbnQpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9pbml0Jywge1xuICAgICAgICAgIGVudHJ5cG9pbnQ6ICdjbGF1ZGUnLFxuICAgICAgICAgIGhhc0luaXRpYWxQcm9tcHQ6IEJvb2xlYW4ocHJvbXB0KS50b1N0cmluZygpLFxuICAgICAgICAgIGhhc1N0ZGluOiBCb29sZWFuKHN0ZGluQ29udGVudCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBlbmFibGVBcmNoaXRlY3Q6IGVuYWJsZUFyY2hpdGVjdD8udG9TdHJpbmcoKSA/PyAnZmFsc2UnLFxuICAgICAgICAgIHZlcmJvc2U6IHZlcmJvc2U/LnRvU3RyaW5nKCkgPz8gJ2ZhbHNlJyxcbiAgICAgICAgICBkZWJ1ZzogZGVidWc/LnRvU3RyaW5nKCkgPz8gJ2ZhbHNlJyxcbiAgICAgICAgICBwcmludDogcHJpbnQ/LnRvU3RyaW5nKCkgPz8gJ2ZhbHNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgYXdhaXQgc2V0dXAoY3dkLCBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucylcblxuICAgICAgICBhc3NlcnRNaW5WZXJzaW9uKClcblxuICAgICAgICBjb25zdCBbdG9vbHMsIG1jcENsaWVudHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGdldFRvb2xzKFxuICAgICAgICAgICAgZW5hYmxlQXJjaGl0ZWN0ID8/IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKCkuZW5hYmxlQXJjaGl0ZWN0VG9vbCxcbiAgICAgICAgICApLFxuICAgICAgICAgIGdldENsaWVudHMoKSxcbiAgICAgICAgXSlcbiAgICAgICAgbG9nU3RhcnR1cCgpXG4gICAgICAgIGNvbnN0IGlucHV0UHJvbXB0ID0gW3Byb21wdCwgc3RkaW5Db250ZW50XS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgICAgICAgaWYgKHByaW50KSB7XG4gICAgICAgICAgaWYgKCFpbnB1dFByb21wdCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ0Vycm9yOiBJbnB1dCBtdXN0IGJlIHByb3ZpZGVkIGVpdGhlciB0aHJvdWdoIHN0ZGluIG9yIGFzIGEgcHJvbXB0IGFyZ3VtZW50IHdoZW4gdXNpbmcgLS1wcmludCcsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZGRUb0hpc3RvcnkoaW5wdXRQcm9tcHQpXG4gICAgICAgICAgY29uc3QgeyByZXN1bHRUZXh0OiByZXNwb25zZSB9ID0gYXdhaXQgYXNrKHtcbiAgICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgICAgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2wsXG4gICAgICAgICAgICBtZXNzYWdlTG9nTmFtZTogZGF0ZVRvRmlsZW5hbWUobmV3IERhdGUoKSksXG4gICAgICAgICAgICBwcm9tcHQ6IGlucHV0UHJvbXB0LFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKVxuICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdE1vZGVsID0gYXdhaXQgaXNEZWZhdWx0U2xvd0FuZENhcGFibGVNb2RlbCgpXG5cbiAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICA8UkVQTFxuICAgICAgICAgICAgICBjb21tYW5kcz17Y29tbWFuZHN9XG4gICAgICAgICAgICAgIGRlYnVnPXtkZWJ1Z31cbiAgICAgICAgICAgICAgaW5pdGlhbFByb21wdD17aW5wdXRQcm9tcHR9XG4gICAgICAgICAgICAgIG1lc3NhZ2VMb2dOYW1lPXtkYXRlVG9GaWxlbmFtZShuZXcgRGF0ZSgpKX1cbiAgICAgICAgICAgICAgc2hvdWxkU2hvd1Byb21wdElucHV0PXt0cnVlfVxuICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgICAgICAgIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zPXtkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgbWNwQ2xpZW50cz17bWNwQ2xpZW50c31cbiAgICAgICAgICAgICAgaXNEZWZhdWx0TW9kZWw9e2lzRGVmYXVsdE1vZGVsfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICByZW5kZXJDb250ZXh0LFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApXG4gICAgLnZlcnNpb24oTUFDUk8uVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nKVxuXG4gIC8vIEVuYWJsZSBtZWxvbiBtb2RlIGZvciBhbnRzIGlmIC0tbWVsb24gaXMgcGFzc2VkXG4gIC8vIEZvciBidW4gdHJlZSBzaGFraW5nIHRvIHdvcmssIHRoaXMgaGFzIHRvIGJlIGEgdG9wIGxldmVsIC0tZGVmaW5lLCBub3QgaW5zaWRlIE1BQ1JPXG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnKSB7XG4gICAgcHJvZ3JhbVxuICAgICAgLm9wdGlvbignLS1tZWxvbicsICdFbmFibGUgbWVsb24gbW9kZScpXG4gICAgICAuaG9vaygncHJlQWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoKHByb2dyYW0ub3B0cygpIGFzIHsgbWVsb24/OiBib29sZWFuIH0pLm1lbG9uKSB7XG4gICAgICAgICAgY29uc3QgeyBydW5NZWxvbldyYXBwZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vdXRpbHMvbWVsb25XcmFwcGVyLmpzJylcbiAgICAgICAgICBjb25zdCBtZWxvbkFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoXG4gICAgICAgICAgICBwcm9jZXNzLmFyZ3YuaW5kZXhPZignLS1tZWxvbicpICsgMSxcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgZXhpdENvZGUgPSBydW5NZWxvbldyYXBwZXIobWVsb25BcmdzKVxuICAgICAgICAgIHByb2Nlc3MuZXhpdChleGl0Q29kZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIC8vIGNsYXVkZSBjb25maWdcbiAgY29uc3QgY29uZmlnID0gcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdjb25maWcnKVxuICAgIC5kZXNjcmlwdGlvbignTWFuYWdlIGNvbmZpZ3VyYXRpb24gKGVnLiBjbGF1ZGUgY29uZmlnIHNldCAtZyB0aGVtZSBkYXJrKScpXG5cbiAgY29uZmlnXG4gICAgLmNvbW1hbmQoJ2dldCA8a2V5PicpXG4gICAgLmRlc2NyaXB0aW9uKCdHZXQgYSBjb25maWcgdmFsdWUnKVxuICAgIC5vcHRpb24oJy1jLCAtLWN3ZCA8Y3dkPicsICdUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeScsIFN0cmluZywgY3dkKCkpXG4gICAgLm9wdGlvbignLWcsIC0tZ2xvYmFsJywgJ1VzZSBnbG9iYWwgY29uZmlnJylcbiAgICAuYWN0aW9uKGFzeW5jIChrZXksIHsgY3dkLCBnbG9iYWwgfSkgPT4ge1xuICAgICAgYXdhaXQgc2V0dXAoY3dkLCBmYWxzZSlcbiAgICAgIGNvbnNvbGUubG9nKGdldENvbmZpZ0ZvckNMSShrZXksIGdsb2JhbCA/PyBmYWxzZSkpXG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9KVxuXG4gIGNvbmZpZ1xuICAgIC5jb21tYW5kKCdzZXQgPGtleT4gPHZhbHVlPicpXG4gICAgLmRlc2NyaXB0aW9uKCdTZXQgYSBjb25maWcgdmFsdWUnKVxuICAgIC5vcHRpb24oJy1jLCAtLWN3ZCA8Y3dkPicsICdUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeScsIFN0cmluZywgY3dkKCkpXG4gICAgLm9wdGlvbignLWcsIC0tZ2xvYmFsJywgJ1VzZSBnbG9iYWwgY29uZmlnJylcbiAgICAuYWN0aW9uKGFzeW5jIChrZXksIHZhbHVlLCB7IGN3ZCwgZ2xvYmFsIH0pID0+IHtcbiAgICAgIGF3YWl0IHNldHVwKGN3ZCwgZmFsc2UpXG4gICAgICBzZXRDb25maWdGb3JDTEkoa2V5LCB2YWx1ZSwgZ2xvYmFsID8/IGZhbHNlKVxuICAgICAgY29uc29sZS5sb2coYFNldCAke2tleX0gdG8gJHt2YWx1ZX1gKVxuICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgfSlcblxuICBjb25maWdcbiAgICAuY29tbWFuZCgncmVtb3ZlIDxrZXk+JylcbiAgICAuZGVzY3JpcHRpb24oJ1JlbW92ZSBhIGNvbmZpZyB2YWx1ZScpXG4gICAgLm9wdGlvbignLWMsIC0tY3dkIDxjd2Q+JywgJ1RoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5JywgU3RyaW5nLCBjd2QoKSlcbiAgICAub3B0aW9uKCctZywgLS1nbG9iYWwnLCAnVXNlIGdsb2JhbCBjb25maWcnKVxuICAgIC5hY3Rpb24oYXN5bmMgKGtleSwgeyBjd2QsIGdsb2JhbCB9KSA9PiB7XG4gICAgICBhd2FpdCBzZXR1cChjd2QsIGZhbHNlKVxuICAgICAgZGVsZXRlQ29uZmlnRm9yQ0xJKGtleSwgZ2xvYmFsID8/IGZhbHNlKVxuICAgICAgY29uc29sZS5sb2coYFJlbW92ZWQgJHtrZXl9YClcbiAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgIH0pXG5cbiAgY29uZmlnXG4gICAgLmNvbW1hbmQoJ2xpc3QnKVxuICAgIC5kZXNjcmlwdGlvbignTGlzdCBhbGwgY29uZmlnIHZhbHVlcycpXG4gICAgLm9wdGlvbignLWMsIC0tY3dkIDxjd2Q+JywgJ1RoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5JywgU3RyaW5nLCBjd2QoKSlcbiAgICAub3B0aW9uKCctZywgLS1nbG9iYWwnLCAnVXNlIGdsb2JhbCBjb25maWcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jICh7IGN3ZCwgZ2xvYmFsIH0pID0+IHtcbiAgICAgIGF3YWl0IHNldHVwKGN3ZCwgZmFsc2UpXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkobGlzdENvbmZpZ0ZvckNMSSgoZ2xvYmFsIGFzIHRydWUpID8/IGZhbHNlKSwgbnVsbCwgMiksXG4gICAgICApXG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9KVxuXG4gIC8vIGNsYXVkZSBhcHByb3ZlZC10b29sc1xuXG4gIGNvbnN0IGFsbG93ZWRUb29scyA9IHByb2dyYW1cbiAgICAuY29tbWFuZCgnYXBwcm92ZWQtdG9vbHMnKVxuICAgIC5kZXNjcmlwdGlvbignTWFuYWdlIGFwcHJvdmVkIHRvb2xzJylcblxuICBhbGxvd2VkVG9vbHNcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IGFsbCBhcHByb3ZlZCB0b29scycpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVMaXN0QXBwcm92ZWRUb29scyhnZXRDd2QoKSlcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcbiAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgIH0pXG5cbiAgYWxsb3dlZFRvb2xzXG4gICAgLmNvbW1hbmQoJ3JlbW92ZSA8dG9vbD4nKVxuICAgIC5kZXNjcmlwdGlvbignUmVtb3ZlIGEgdG9vbCBmcm9tIHRoZSBsaXN0IG9mIGFwcHJvdmVkIHRvb2xzJylcbiAgICAuYWN0aW9uKGFzeW5jICh0b29sOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZVJlbW92ZUFwcHJvdmVkVG9vbCh0b29sKVxuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2FwcHJvdmVkX3Rvb2xfcmVtb3ZlJywge1xuICAgICAgICB0b29sLFxuICAgICAgICBzdWNjZXNzOiBTdHJpbmcocmVzdWx0LnN1Y2Nlc3MpLFxuICAgICAgfSlcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdC5tZXNzYWdlKVxuICAgICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5zdWNjZXNzID8gMCA6IDEpXG4gICAgfSlcblxuICAvLyBjbGF1ZGUgbWNwXG5cbiAgY29uc3QgbWNwID0gcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdtY3AnKVxuICAgIC5kZXNjcmlwdGlvbignQ29uZmlndXJlIGFuZCBtYW5hZ2UgTUNQIHNlcnZlcnMnKVxuXG4gIG1jcFxuICAgIC5jb21tYW5kKCdzZXJ2ZScpXG4gICAgLmRlc2NyaXB0aW9uKGBTdGFydCB0aGUgJHtQUk9EVUNUX05BTUV9IE1DUCBzZXJ2ZXJgKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZWRDd2QgPSAocHJvZ3JhbS5vcHRzKCkgYXMgeyBjd2Q/OiBzdHJpbmcgfSkuY3dkID8/IGN3ZCgpXG4gICAgICBsb2dFdmVudCgndGVuZ3VfbWNwX3N0YXJ0JywgeyBwcm92aWRlZEN3ZCB9KVxuXG4gICAgICAvLyBWZXJpZnkgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmICghZXhpc3RzU3luYyhwcm92aWRlZEN3ZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3I6IERpcmVjdG9yeSAke3Byb3ZpZGVkQ3dkfSBkb2VzIG5vdCBleGlzdGApXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZXR1cChwcm92aWRlZEN3ZCwgZmFsc2UpXG4gICAgICAgIGF3YWl0IHN0YXJ0TUNQU2VydmVyKHByb3ZpZGVkQ3dkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6IEZhaWxlZCB0byBzdGFydCBNQ1Agc2VydmVyOicsIGVycm9yKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnKSB7XG4gICAgbWNwXG4gICAgICAuY29tbWFuZCgnYWRkLXNzZSA8bmFtZT4gPHVybD4nKVxuICAgICAgLmRlc2NyaXB0aW9uKCdBZGQgYW4gU1NFIHNlcnZlcicpXG4gICAgICAub3B0aW9uKFxuICAgICAgICAnLXMsIC0tc2NvcGUgPHNjb3BlPicsXG4gICAgICAgICdDb25maWd1cmF0aW9uIHNjb3BlIChwcm9qZWN0IG9yIGdsb2JhbCknLFxuICAgICAgICAncHJvamVjdCcsXG4gICAgICApXG4gICAgICAuYWN0aW9uKGFzeW5jIChuYW1lLCB1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzY29wZSA9IGVuc3VyZUNvbmZpZ1Njb3BlKG9wdGlvbnMuc2NvcGUpXG4gICAgICAgICAgbG9nRXZlbnQoJ3Rlbmd1X21jcF9hZGQnLCB7IG5hbWUsIHR5cGU6ICdzc2UnLCBzY29wZSB9KVxuXG4gICAgICAgICAgYWRkTWNwU2VydmVyKG5hbWUsIHsgdHlwZTogJ3NzZScsIHVybCB9LCBzY29wZSlcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBBZGRlZCBTU0UgTUNQIHNlcnZlciAke25hbWV9IHdpdGggVVJMICR7dXJsfSB0byAke3Njb3BlfSBjb25maWdgLFxuICAgICAgICAgIClcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSlcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIG1jcFxuICAgIC5jb21tYW5kKCdhZGQgPG5hbWU+IDxjb21tYW5kPiBbYXJncy4uLl0nKVxuICAgIC5kZXNjcmlwdGlvbignQWRkIGEgc3RkaW8gc2VydmVyJylcbiAgICAub3B0aW9uKFxuICAgICAgJy1zLCAtLXNjb3BlIDxzY29wZT4nLFxuICAgICAgJ0NvbmZpZ3VyYXRpb24gc2NvcGUgKHByb2plY3Qgb3IgZ2xvYmFsKScsXG4gICAgICAncHJvamVjdCcsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAnLWUsIC0tZW52IDxlbnYuLi4+JyxcbiAgICAgICdTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuIC1lIEtFWT12YWx1ZSknLFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIChuYW1lLCBjb21tYW5kLCBhcmdzLCBvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzY29wZSA9IGVuc3VyZUNvbmZpZ1Njb3BlKG9wdGlvbnMuc2NvcGUpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9tY3BfYWRkJywgeyBuYW1lLCB0eXBlOiAnc3RkaW8nLCBzY29wZSB9KVxuXG4gICAgICAgIGNvbnN0IGVudiA9IHBhcnNlRW52VmFycyhvcHRpb25zLmVudilcbiAgICAgICAgYWRkTWNwU2VydmVyKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgeyB0eXBlOiAnc3RkaW8nLCBjb21tYW5kLCBhcmdzOiBhcmdzIHx8IFtdLCBlbnYgfSxcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBBZGRlZCBzdGRpbyBNQ1Agc2VydmVyICR7bmFtZX0gd2l0aCBjb21tYW5kOiAke2NvbW1hbmR9ICR7KGFyZ3MgfHwgW10pLmpvaW4oJyAnKX0gdG8gJHtzY29wZX0gY29uZmlnYCxcbiAgICAgICAgKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH1cbiAgICB9KVxuICBtY3BcbiAgICAuY29tbWFuZCgncmVtb3ZlIDxuYW1lPicpXG4gICAgLmRlc2NyaXB0aW9uKCdSZW1vdmUgYW4gTUNQIHNlcnZlcicpXG4gICAgLm9wdGlvbihcbiAgICAgICctcywgLS1zY29wZSA8c2NvcGU+JyxcbiAgICAgICdDb25maWd1cmF0aW9uIHNjb3BlIChwcm9qZWN0LCBnbG9iYWwsIG9yIG1jcHJjKScsXG4gICAgICAncHJvamVjdCcsXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgKG5hbWU6IHN0cmluZywgb3B0aW9uczogeyBzY29wZT86IHN0cmluZyB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzY29wZSA9IGVuc3VyZUNvbmZpZ1Njb3BlKG9wdGlvbnMuc2NvcGUpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9tY3BfZGVsZXRlJywgeyBuYW1lLCBzY29wZSB9KVxuXG4gICAgICAgIHJlbW92ZU1jcFNlcnZlcihuYW1lLCBzY29wZSlcbiAgICAgICAgY29uc29sZS5sb2coYFJlbW92ZWQgTUNQIHNlcnZlciAke25hbWV9IGZyb20gJHtzY29wZX0gY29uZmlnYClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSlcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICB9XG4gICAgfSlcblxuICBtY3BcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IGNvbmZpZ3VyZWQgTUNQIHNlcnZlcnMnKVxuICAgIC5hY3Rpb24oKCkgPT4ge1xuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X21jcF9saXN0Jywge30pXG4gICAgICBjb25zdCBzZXJ2ZXJzID0gbGlzdE1DUFNlcnZlcnMoKVxuICAgICAgaWYgKE9iamVjdC5rZXlzKHNlcnZlcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnTm8gTUNQIHNlcnZlcnMgY29uZmlndXJlZC4gVXNlIGBjbGF1ZGUgbWNwIGFkZGAgdG8gYWRkIGEgc2VydmVyLicsXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHNlcnZlcl0gb2YgT2JqZWN0LmVudHJpZXMoc2VydmVycykpIHtcbiAgICAgICAgICBpZiAoc2VydmVyLnR5cGUgPT09ICdzc2UnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfTogJHtzZXJ2ZXIudXJsfSAoU1NFKWApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke25hbWV9OiAke3NlcnZlci5jb21tYW5kfSAke3NlcnZlci5hcmdzLmpvaW4oJyAnKX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgfSlcblxuICBtY3BcbiAgICAuY29tbWFuZCgnZ2V0IDxuYW1lPicpXG4gICAgLmRlc2NyaXB0aW9uKCdHZXQgZGV0YWlscyBhYm91dCBhbiBNQ1Agc2VydmVyJylcbiAgICAuYWN0aW9uKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9tY3BfZ2V0JywgeyBuYW1lIH0pXG4gICAgICBjb25zdCBzZXJ2ZXIgPSBnZXRNY3BTZXJ2ZXIobmFtZSlcbiAgICAgIGlmICghc2VydmVyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vIE1DUCBzZXJ2ZXIgZm91bmQgd2l0aCBuYW1lOiAke25hbWV9YClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfTpgKVxuICAgICAgY29uc29sZS5sb2coYCAgU2NvcGU6ICR7c2VydmVyLnNjb3BlfWApXG4gICAgICBpZiAoc2VydmVyLnR5cGUgPT09ICdzc2UnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIFR5cGU6IHNzZWApXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIFVSTDogJHtzZXJ2ZXIudXJsfWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgICBUeXBlOiBzdGRpb2ApXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIENvbW1hbmQ6ICR7c2VydmVyLmNvbW1hbmR9YClcbiAgICAgICAgY29uc29sZS5sb2coYCAgQXJnczogJHtzZXJ2ZXIuYXJncy5qb2luKCcgJyl9YClcbiAgICAgICAgaWYgKHNlcnZlci5lbnYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnICBFbnZpcm9ubWVudDonKVxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZlci5lbnYpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9KVxuXG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnKSB7XG4gICAgbWNwXG4gICAgICAuY29tbWFuZCgncmVzZXQtbWNwcmMtY2hvaWNlcycpXG4gICAgICAuZGVzY3JpcHRpb24oXG4gICAgICAgICdSZXNldCBhbGwgYXBwcm92ZWQgYW5kIHJlamVjdGVkIC5tY3ByYyBzZXJ2ZXJzIGZvciB0aGlzIHByb2plY3QnLFxuICAgICAgKVxuICAgICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9tY3BfcmVzZXRfbWNwcmNfY2hvaWNlcycsIHt9KVxuICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gICAgICAgIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyh7XG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIGFwcHJvdmVkTWNwcmNTZXJ2ZXJzOiBbXSxcbiAgICAgICAgICByZWplY3RlZE1jcHJjU2VydmVyczogW10sXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdBbGwgLm1jcHJjIHNlcnZlciBhcHByb3ZhbHMgYW5kIHJlamVjdGlvbnMgaGF2ZSBiZWVuIHJlc2V0LicsXG4gICAgICAgIClcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ1lvdSB3aWxsIGJlIHByb21wdGVkIGZvciBhcHByb3ZhbCBuZXh0IHRpbWUgeW91IHN0YXJ0IENsYXVkZSBDb2RlLicsXG4gICAgICAgIClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9KVxuICB9XG5cbiAgLy8gRG9jdG9yIGNvbW1hbmQgLSBjaGVjayBpbnN0YWxsYXRpb24gaGVhbHRoXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnZG9jdG9yJylcbiAgICAuZGVzY3JpcHRpb24oJ0NoZWNrIHRoZSBoZWFsdGggb2YgeW91ciBDbGF1ZGUgQ29kZSBhdXRvLXVwZGF0ZXInKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2RvY3Rvcl9jb21tYW5kJywge30pXG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICByZW5kZXIoPERvY3RvciBvbkRvbmU9eygpID0+IHJlc29sdmUoKX0gZG9jdG9yTW9kZT17dHJ1ZX0gLz4pXG4gICAgICB9KVxuICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgfSlcblxuICAvLyBhbnQtb25seSBjb21tYW5kc1xuICBpZiAocHJvY2Vzcy5lbnYuVVNFUl9UWVBFID09PSAnYW50Jykge1xuICAgIC8vIGNsYXVkZSB1cGRhdGVcbiAgICBwcm9ncmFtXG4gICAgICAuY29tbWFuZCgndXBkYXRlJylcbiAgICAgIC5kZXNjcmlwdGlvbignQ2hlY2sgZm9yIHVwZGF0ZXMgYW5kIGluc3RhbGwgaWYgYXZhaWxhYmxlJylcbiAgICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VFeHRlcm5hbFVwZGF0ZXIgPSBhd2FpdCBjaGVja0dhdGUoR0FURV9VU0VfRVhURVJOQUxfVVBEQVRFUilcbiAgICAgICAgaWYgKHVzZUV4dGVybmFsVXBkYXRlcikge1xuICAgICAgICAgIC8vIFRoZSBleHRlcm5hbCB1cGRhdGVyIGludGVyY2VwdHMgY2FsbHMgdG8gXCJjbGF1ZGUgdXBkYXRlXCIsIHdoaWNoIG1lYW5zIGlmIHdlIGhhdmUgcmVjZWl2ZWRcbiAgICAgICAgICAvLyB0aGlzIGNvbW1hbmQgYXQgYWxsLCB0aGUgZXh0ZW5yYWwgdXBkYXRlciBpc24ndCBpbnN0YWxsZWQgb24gdGhpcyBtYWNoaW5lLlxuICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGlzIHZlcnNpb24gb2YgQ2xhdWRlIENvZGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKVxuICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgICB9XG5cbiAgICAgICAgbG9nRXZlbnQoJ3Rlbmd1X3VwZGF0ZV9jaGVjaycsIHt9KVxuICAgICAgICBjb25zb2xlLmxvZyhgQ3VycmVudCB2ZXJzaW9uOiAke01BQ1JPLlZFUlNJT059YClcbiAgICAgICAgY29uc29sZS5sb2coJ0NoZWNraW5nIGZvciB1cGRhdGVzLi4uJylcblxuICAgICAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0VmVyc2lvbigpXG5cbiAgICAgICAgaWYgKCFsYXRlc3RWZXJzaW9uKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNoZWNrIGZvciB1cGRhdGVzJylcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXRlc3RWZXJzaW9uID09PSBNQUNSTy5WRVJTSU9OKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCR7UFJPRFVDVF9OQU1FfSBpcyB1cCB0byBkYXRlYClcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBOZXcgdmVyc2lvbiBhdmFpbGFibGU6ICR7bGF0ZXN0VmVyc2lvbn1gKVxuICAgICAgICBjb25zb2xlLmxvZygnSW5zdGFsbGluZyB1cGRhdGUuLi4nKVxuXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGluc3RhbGxHbG9iYWxQYWNrYWdlKClcblxuICAgICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN1Y2Nlc3NmdWxseSB1cGRhdGVkIHRvIHZlcnNpb24gJHtsYXRlc3RWZXJzaW9ufWApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ25vX3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gaW5zdGFsbCB1cGRhdGUnKVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVHJ5IHJ1bm5pbmcgd2l0aCBzdWRvIG9yIGZpeCBucG0gcGVybWlzc2lvbnMnKVxuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ2luc3RhbGxfZmFpbGVkJzpcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBGYWlsZWQgdG8gaW5zdGFsbCB1cGRhdGUnKVxuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ2luX3Byb2dyZXNzJzpcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdFcnJvcjogQW5vdGhlciBpbnN0YW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhbiB1cGRhdGUnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIHdhaXQgYW5kIHRyeSBhZ2FpbiBsYXRlcicpXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9KVxuXG4gICAgLy8gY2xhdWRlIGxvZ1xuICAgIHByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdsb2cnKVxuICAgICAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgY29udmVyc2F0aW9uIGxvZ3MuJylcbiAgICAgIC5hcmd1bWVudChcbiAgICAgICAgJ1tudW1iZXJdJyxcbiAgICAgICAgJ0EgbnVtYmVyICgwLCAxLCAyLCBldGMuKSB0byBkaXNwbGF5IGEgc3BlY2lmaWMgbG9nJyxcbiAgICAgICAgcGFyc2VJbnQsXG4gICAgICApXG4gICAgICAub3B0aW9uKCctYywgLS1jd2QgPGN3ZD4nLCAnVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknLCBTdHJpbmcsIGN3ZCgpKVxuICAgICAgLmFjdGlvbihhc3luYyAobnVtYmVyLCB7IGN3ZCB9KSA9PiB7XG4gICAgICAgIGF3YWl0IHNldHVwKGN3ZCwgZmFsc2UpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV92aWV3X2xvZ3MnLCB7IG51bWJlcjogbnVtYmVyPy50b1N0cmluZygpID8/ICcnIH0pXG4gICAgICAgIGNvbnN0IGNvbnRleHQ6IHsgdW5tb3VudD86ICgpID0+IHZvaWQgfSA9IHt9XG4gICAgICAgIGNvbnN0IHsgdW5tb3VudCB9ID0gcmVuZGVyKFxuICAgICAgICAgIDxMb2dMaXN0IGNvbnRleHQ9e2NvbnRleHR9IHR5cGU9XCJtZXNzYWdlc1wiIGxvZ051bWJlcj17bnVtYmVyfSAvPixcbiAgICAgICAgICByZW5kZXJDb250ZXh0V2l0aEV4aXRPbkN0cmxDLFxuICAgICAgICApXG4gICAgICAgIGNvbnRleHQudW5tb3VudCA9IHVubW91bnRcbiAgICAgIH0pXG5cbiAgICAvLyBjbGF1ZGUgcmVzdW1lXG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3Jlc3VtZScpXG4gICAgICAuZGVzY3JpcHRpb24oXG4gICAgICAgICdSZXN1bWUgYSBwcmV2aW91cyBjb252ZXJzYXRpb24uIE9wdGlvbmFsbHkgcHJvdmlkZSBhIG51bWJlciAoMCwgMSwgMiwgZXRjLikgb3IgZmlsZSBwYXRoIHRvIHJlc3VtZSBhIHNwZWNpZmljIGNvbnZlcnNhdGlvbi4nLFxuICAgICAgKVxuICAgICAgLmFyZ3VtZW50KFxuICAgICAgICAnW2lkZW50aWZpZXJdJyxcbiAgICAgICAgJ0EgbnVtYmVyICgwLCAxLCAyLCBldGMuKSBvciBmaWxlIHBhdGggdG8gcmVzdW1lIGEgc3BlY2lmaWMgY29udmVyc2F0aW9uJyxcbiAgICAgIClcbiAgICAgIC5vcHRpb24oJy1jLCAtLWN3ZCA8Y3dkPicsICdUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeScsIFN0cmluZywgY3dkKCkpXG4gICAgICAub3B0aW9uKFxuICAgICAgICAnLWVhLCAtLWVuYWJsZS1hcmNoaXRlY3QnLFxuICAgICAgICAnRW5hYmxlIHRoZSBBcmNoaXRlY3QgdG9vbCcsXG4gICAgICAgICgpID0+IHRydWUsXG4gICAgICApXG4gICAgICAub3B0aW9uKCctdiwgLS12ZXJib3NlJywgJ0RvIG5vdCB0cnVuY2F0ZSBtZXNzYWdlIG91dHB1dCcsICgpID0+IHRydWUpXG4gICAgICAub3B0aW9uKFxuICAgICAgICAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJyxcbiAgICAgICAgJ1NraXAgYWxsIHBlcm1pc3Npb24gY2hlY2tzLiBPbmx5IHdvcmtzIGluIERvY2tlciBjb250YWluZXJzIHdpdGggbm8gaW50ZXJuZXQgYWNjZXNzLiBXaWxsIGNyYXNoIG90aGVyd2lzZS4nLFxuICAgICAgICAoKSA9PiB0cnVlLFxuICAgICAgKVxuICAgICAgLmFjdGlvbihcbiAgICAgICAgYXN5bmMgKFxuICAgICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgICAgeyBjd2QsIGVuYWJsZUFyY2hpdGVjdCwgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnMsIHZlcmJvc2UgfSxcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgYXdhaXQgc2V0dXAoY3dkLCBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucylcbiAgICAgICAgICBhc3NlcnRNaW5WZXJzaW9uKClcblxuICAgICAgICAgIGNvbnN0IFt0b29scywgY29tbWFuZHMsIGxvZ3MsIG1jcENsaWVudHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgZ2V0VG9vbHMoXG4gICAgICAgICAgICAgIGVuYWJsZUFyY2hpdGVjdCA/PyBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpLmVuYWJsZUFyY2hpdGVjdFRvb2wsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZ2V0Q29tbWFuZHMoKSxcbiAgICAgICAgICAgIGxvYWRMb2dMaXN0KENBQ0hFX1BBVEhTLm1lc3NhZ2VzKCkpLFxuICAgICAgICAgICAgZ2V0Q2xpZW50cygpLFxuICAgICAgICAgIF0pXG4gICAgICAgICAgbG9nU3RhcnR1cCgpXG5cbiAgICAgICAgICAvLyBJZiBhIHNwZWNpZmljIGNvbnZlcnNhdGlvbiBpcyByZXF1ZXN0ZWQsIGxvYWQgYW5kIHJlc3VtZSBpdCBkaXJlY3RseVxuICAgICAgICAgIGlmIChpZGVudGlmaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGlkZW50aWZpZXIgaXMgYSBudW1iZXIgb3IgYSBmaWxlIHBhdGhcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE1hdGguYWJzKHBhcnNlSW50KGlkZW50aWZpZXIpKVxuICAgICAgICAgICAgY29uc3QgaXNOdW1iZXIgPSAhaXNOYU4obnVtYmVyKVxuICAgICAgICAgICAgbGV0IG1lc3NhZ2VzLCBkYXRlLCBmb3JrTnVtYmVyXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoaXNOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBsb2dFdmVudCgndGVuZ3VfcmVzdW1lJywgeyBudW1iZXI6IG51bWJlci50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAgICAgY29uc3QgbG9nID0gbG9nc1tudW1iZXJdXG4gICAgICAgICAgICAgICAgaWYgKCFsb2cpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGNvbnZlcnNhdGlvbiBmb3VuZCBhdCBpbmRleCcsIG51bWJlcilcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXNzYWdlcyA9IGF3YWl0IGxvYWRNZXNzYWdlc0Zyb21Mb2cobG9nLmZ1bGxQYXRoLCB0b29scylcbiAgICAgICAgICAgICAgICA7KHsgZGF0ZSwgZm9ya051bWJlciB9ID0gbG9nKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBmaWxlIHBhdGggY2FzZVxuICAgICAgICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9yZXN1bWUnLCB7IGZpbGVQYXRoOiBpZGVudGlmaWVyIH0pXG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHNTeW5jKGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGaWxlIGRvZXMgbm90IGV4aXN0OicsIGlkZW50aWZpZXIpXG4gICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMgPSBhd2FpdCBsb2FkTWVzc2FnZXNGcm9tTG9nKGlkZW50aWZpZXIsIHRvb2xzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGlkZW50aWZpZXIuc3BsaXQoJy8nKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0gPz8gJ3Vua25vd24nXG4gICAgICAgICAgICAgICAgOyh7IGRhdGUsIGZvcmtOdW1iZXIgfSA9IHBhcnNlTG9nRmlsZW5hbWUoZmlsZW5hbWUpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGZvcmsgPSBnZXROZXh0QXZhaWxhYmxlTG9nRm9ya051bWJlcihcbiAgICAgICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgICAgIGZvcmtOdW1iZXIgPz8gMSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdE1vZGVsID0gYXdhaXQgaXNEZWZhdWx0U2xvd0FuZENhcGFibGVNb2RlbCgpXG4gICAgICAgICAgICAgIHJlbmRlcihcbiAgICAgICAgICAgICAgICA8UkVQTFxuICAgICAgICAgICAgICAgICAgaW5pdGlhbFByb21wdD1cIlwiXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlTG9nTmFtZT17ZGF0ZX1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWxGb3JrTnVtYmVyPXtmb3JrfVxuICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd1Byb21wdElucHV0PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICAgICAgICAgIGNvbW1hbmRzPXtjb21tYW5kc31cbiAgICAgICAgICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICAgICAgICAgIGluaXRpYWxNZXNzYWdlcz17bWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICBtY3BDbGllbnRzPXttY3BDbGllbnRzfVxuICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0TW9kZWw9e2lzRGVmYXVsdE1vZGVsfVxuICAgICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICAgIHsgZXhpdE9uQ3RybEM6IGZhbHNlIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGxvZ0Vycm9yKGBGYWlsZWQgdG8gbG9hZCBjb252ZXJzYXRpb246ICR7ZXJyb3J9YClcbiAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNob3cgdGhlIGNvbnZlcnNhdGlvbiBzZWxlY3RvciBVSVxuICAgICAgICAgICAgY29uc3QgY29udGV4dDogeyB1bm1vdW50PzogKCkgPT4gdm9pZCB9ID0ge31cbiAgICAgICAgICAgIGNvbnN0IHsgdW5tb3VudCB9ID0gcmVuZGVyKFxuICAgICAgICAgICAgICA8UmVzdW1lQ29udmVyc2F0aW9uXG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBjb21tYW5kcz17Y29tbWFuZHN9XG4gICAgICAgICAgICAgICAgbG9ncz17bG9nc31cbiAgICAgICAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgIHJlbmRlckNvbnRleHRXaXRoRXhpdE9uQ3RybEMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb250ZXh0LnVubW91bnQgPSB1bm1vdW50XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgLy8gY2xhdWRlIGVycm9yXG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2Vycm9yJylcbiAgICAgIC5kZXNjcmlwdGlvbihcbiAgICAgICAgJ1ZpZXcgZXJyb3IgbG9ncy4gT3B0aW9uYWxseSBwcm92aWRlIGEgbnVtYmVyICgwLCAtMSwgLTIsIGV0Yy4pIHRvIGRpc3BsYXkgYSBzcGVjaWZpYyBsb2cuJyxcbiAgICAgIClcbiAgICAgIC5hcmd1bWVudChcbiAgICAgICAgJ1tudW1iZXJdJyxcbiAgICAgICAgJ0EgbnVtYmVyICgwLCAxLCAyLCBldGMuKSB0byBkaXNwbGF5IGEgc3BlY2lmaWMgbG9nJyxcbiAgICAgICAgcGFyc2VJbnQsXG4gICAgICApXG4gICAgICAub3B0aW9uKCctYywgLS1jd2QgPGN3ZD4nLCAnVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknLCBTdHJpbmcsIGN3ZCgpKVxuICAgICAgLmFjdGlvbihhc3luYyAobnVtYmVyLCB7IGN3ZCB9KSA9PiB7XG4gICAgICAgIGF3YWl0IHNldHVwKGN3ZCwgZmFsc2UpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV92aWV3X2Vycm9ycycsIHsgbnVtYmVyOiBudW1iZXI/LnRvU3RyaW5nKCkgPz8gJycgfSlcbiAgICAgICAgY29uc3QgY29udGV4dDogeyB1bm1vdW50PzogKCkgPT4gdm9pZCB9ID0ge31cbiAgICAgICAgY29uc3QgeyB1bm1vdW50IH0gPSByZW5kZXIoXG4gICAgICAgICAgPExvZ0xpc3QgY29udGV4dD17Y29udGV4dH0gdHlwZT1cImVycm9yc1wiIGxvZ051bWJlcj17bnVtYmVyfSAvPixcbiAgICAgICAgICByZW5kZXJDb250ZXh0V2l0aEV4aXRPbkN0cmxDLFxuICAgICAgICApXG4gICAgICAgIGNvbnRleHQudW5tb3VudCA9IHVubW91bnRcbiAgICAgIH0pXG5cbiAgICAvLyBjbGF1ZGUgY29udGV4dCAoVE9ETzogZGVwcmVjYXRlKVxuICAgIGNvbnN0IGNvbnRleHQgPSBwcm9ncmFtXG4gICAgICAuY29tbWFuZCgnY29udGV4dCcpXG4gICAgICAuZGVzY3JpcHRpb24oXG4gICAgICAgICdTZXQgc3RhdGljIGNvbnRleHQgKGVnLiBjbGF1ZGUgY29udGV4dCBhZGQtZmlsZSAuL3NyYy8qLnB5KScsXG4gICAgICApXG5cbiAgICBjb250ZXh0XG4gICAgICAuY29tbWFuZCgnZ2V0IDxrZXk+JylcbiAgICAgIC5vcHRpb24oJy1jLCAtLWN3ZCA8Y3dkPicsICdUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeScsIFN0cmluZywgY3dkKCkpXG4gICAgICAuZGVzY3JpcHRpb24oJ0dldCBhIHZhbHVlIGZyb20gY29udGV4dCcpXG4gICAgICAuYWN0aW9uKGFzeW5jIChrZXksIHsgY3dkIH0pID0+IHtcbiAgICAgICAgYXdhaXQgc2V0dXAoY3dkLCBmYWxzZSlcbiAgICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2NvbnRleHRfZ2V0JywgeyBrZXkgfSlcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG9taXQoXG4gICAgICAgICAgYXdhaXQgZ2V0Q29udGV4dCgpLFxuICAgICAgICAgICdjb2RlU3R5bGUnLFxuICAgICAgICAgICdkaXJlY3RvcnlTdHJ1Y3R1cmUnLFxuICAgICAgICApXG4gICAgICAgIGNvbnNvbGUubG9nKGNvbnRleHRba2V5XSlcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9KVxuXG4gICAgY29udGV4dFxuICAgICAgLmNvbW1hbmQoJ3NldCA8a2V5PiA8dmFsdWU+JylcbiAgICAgIC5kZXNjcmlwdGlvbignU2V0IGEgdmFsdWUgaW4gY29udGV4dCcpXG4gICAgICAub3B0aW9uKCctYywgLS1jd2QgPGN3ZD4nLCAnVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknLCBTdHJpbmcsIGN3ZCgpKVxuICAgICAgLmFjdGlvbihhc3luYyAoa2V5LCB2YWx1ZSwgeyBjd2QgfSkgPT4ge1xuICAgICAgICBhd2FpdCBzZXR1cChjd2QsIGZhbHNlKVxuICAgICAgICBsb2dFdmVudCgndGVuZ3VfY29udGV4dF9zZXQnLCB7IGtleSB9KVxuICAgICAgICBzZXRDb250ZXh0KGtleSwgdmFsdWUpXG4gICAgICAgIGNvbnNvbGUubG9nKGBTZXQgY29udGV4dC4ke2tleX0gdG8gXCIke3ZhbHVlfVwiYClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9KVxuXG4gICAgY29udGV4dFxuICAgICAgLmNvbW1hbmQoJ2xpc3QnKVxuICAgICAgLmRlc2NyaXB0aW9uKCdMaXN0IGFsbCBjb250ZXh0IHZhbHVlcycpXG4gICAgICAub3B0aW9uKCctYywgLS1jd2QgPGN3ZD4nLCAnVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknLCBTdHJpbmcsIGN3ZCgpKVxuICAgICAgLmFjdGlvbihhc3luYyAoeyBjd2QgfSkgPT4ge1xuICAgICAgICBhd2FpdCBzZXR1cChjd2QsIGZhbHNlKVxuICAgICAgICBsb2dFdmVudCgndGVuZ3VfY29udGV4dF9saXN0Jywge30pXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBvbWl0KFxuICAgICAgICAgIGF3YWl0IGdldENvbnRleHQoKSxcbiAgICAgICAgICAnY29kZVN0eWxlJyxcbiAgICAgICAgICAnZGlyZWN0b3J5U3RydWN0dXJlJyxcbiAgICAgICAgICAnZ2l0U3RhdHVzJyxcbiAgICAgICAgKVxuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjb250ZXh0LCBudWxsLCAyKSlcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9KVxuXG4gICAgY29udGV4dFxuICAgICAgLmNvbW1hbmQoJ3JlbW92ZSA8a2V5PicpXG4gICAgICAuZGVzY3JpcHRpb24oJ1JlbW92ZSBhIHZhbHVlIGZyb20gY29udGV4dCcpXG4gICAgICAub3B0aW9uKCctYywgLS1jd2QgPGN3ZD4nLCAnVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknLCBTdHJpbmcsIGN3ZCgpKVxuICAgICAgLmFjdGlvbihhc3luYyAoa2V5LCB7IGN3ZCB9KSA9PiB7XG4gICAgICAgIGF3YWl0IHNldHVwKGN3ZCwgZmFsc2UpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9jb250ZXh0X2RlbGV0ZScsIHsga2V5IH0pXG4gICAgICAgIHJlbW92ZUNvbnRleHQoa2V5KVxuICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZlZCBjb250ZXh0LiR7a2V5fWApXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfSlcbiAgfVxuXG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpXG4gIHJldHVybiBwcm9ncmFtXG59XG5cbi8vIFRPRE86IHN0cmVhbT9cbmFzeW5jIGZ1bmN0aW9uIHN0ZGluKCkge1xuICBpZiAocHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgbGV0IGRhdGEgPSAnJ1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHByb2Nlc3Muc3RkaW4pIGRhdGEgKz0gY2h1bmtcbiAgcmV0dXJuIGRhdGFcbn1cblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgcmVzZXRDdXJzb3IoKVxuICBQZXJzaXN0ZW50U2hlbGwuZ2V0SW5zdGFuY2UoKS5jbG9zZSgpXG59KVxuXG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gIHByb2Nlc3MuZXhpdCgwKVxufSlcblxuZnVuY3Rpb24gcmVzZXRDdXJzb3IoKSB7XG4gIGNvbnN0IHRlcm1pbmFsID0gcHJvY2Vzcy5zdGRlcnIuaXNUVFlcbiAgICA/IHByb2Nlc3Muc3RkZXJyXG4gICAgOiBwcm9jZXNzLnN0ZG91dC5pc1RUWVxuICAgICAgPyBwcm9jZXNzLnN0ZG91dFxuICAgICAgOiB1bmRlZmluZWRcbiAgdGVybWluYWw/LndyaXRlKGBcXHUwMDFCWz8yNWgke2N1cnNvclNob3d9YClcbn1cblxubWFpbigpXG4iLAogICAgImltcG9ydCB7IFN0cmVhbSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgSW5rIGZyb20gJy4vaW5rLmpzJztcbmltcG9ydCBpbnN0YW5jZXMgZnJvbSAnLi9pbnN0YW5jZXMuanMnO1xuLyoqXG4gKiBNb3VudCBhIGNvbXBvbmVudCBhbmQgcmVuZGVyIHRoZSBvdXRwdXQuXG4gKi9cbmNvbnN0IHJlbmRlciA9IChub2RlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaW5rT3B0aW9ucyA9IHtcbiAgICAgICAgc3Rkb3V0OiBwcm9jZXNzLnN0ZG91dCxcbiAgICAgICAgc3RkaW46IHByb2Nlc3Muc3RkaW4sXG4gICAgICAgIHN0ZGVycjogcHJvY2Vzcy5zdGRlcnIsXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgZXhpdE9uQ3RybEM6IHRydWUsXG4gICAgICAgIHBhdGNoQ29uc29sZTogdHJ1ZSxcbiAgICAgICAgLi4uZ2V0T3B0aW9ucyhvcHRpb25zKSxcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0SW5zdGFuY2UoaW5rT3B0aW9ucy5zdGRvdXQsICgpID0+IG5ldyBJbmsoaW5rT3B0aW9ucykpO1xuICAgIGluc3RhbmNlLnJlbmRlcihub2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXJlbmRlcjogaW5zdGFuY2UucmVuZGVyLFxuICAgICAgICB1bm1vdW50KCkge1xuICAgICAgICAgICAgaW5zdGFuY2UudW5tb3VudCgpO1xuICAgICAgICB9LFxuICAgICAgICB3YWl0VW50aWxFeGl0OiBpbnN0YW5jZS53YWl0VW50aWxFeGl0LFxuICAgICAgICBjbGVhbnVwOiAoKSA9PiBpbnN0YW5jZXMuZGVsZXRlKGlua09wdGlvbnMuc3Rkb3V0KSxcbiAgICAgICAgY2xlYXI6IGluc3RhbmNlLmNsZWFyLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgcmVuZGVyO1xuY29uc3QgZ2V0T3B0aW9ucyA9IChzdGRvdXQgPSB7fSkgPT4ge1xuICAgIGlmIChzdGRvdXQgaW5zdGFuY2VvZiBTdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgIHN0ZGluOiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3Rkb3V0O1xufTtcbmNvbnN0IGdldEluc3RhbmNlID0gKHN0ZG91dCwgY3JlYXRlSW5zdGFuY2UpID0+IHtcbiAgICBsZXQgaW5zdGFuY2UgPSBpbnN0YW5jZXMuZ2V0KHN0ZG91dCk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICAgIGluc3RhbmNlcy5zZXQoc3Rkb3V0LCBpbnN0YW5jZSk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZW5kZXIuanMubWFwIiwKICAgICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHRocm90dGxlIH0gZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQnO1xuaW1wb3J0IGFuc2lFc2NhcGVzIGZyb20gJ2Fuc2ktZXNjYXBlcyc7XG5pbXBvcnQgaXNJbkNpIGZyb20gJ2lzLWluLWNpJztcbmltcG9ydCBhdXRvQmluZCBmcm9tICdhdXRvLWJpbmQnO1xuaW1wb3J0IHNpZ25hbEV4aXQgZnJvbSAnc2lnbmFsLWV4aXQnO1xuaW1wb3J0IHBhdGNoQ29uc29sZSBmcm9tICdwYXRjaC1jb25zb2xlJztcbmltcG9ydCByZWNvbmNpbGVyIGZyb20gJy4vcmVjb25jaWxlci5qcyc7XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vcmVuZGVyZXIuanMnO1xuaW1wb3J0ICogYXMgZG9tIGZyb20gJy4vZG9tLmpzJztcbmltcG9ydCBsb2dVcGRhdGUgZnJvbSAnLi9sb2ctdXBkYXRlLmpzJztcbmltcG9ydCBpbnN0YW5jZXMgZnJvbSAnLi9pbnN0YW5jZXMuanMnO1xuaW1wb3J0IEFwcCBmcm9tICcuL2NvbXBvbmVudHMvQXBwLmpzJztcbmltcG9ydCBZb2dhIGZyb20gJ3lvZ2Etd2FzbS13ZWIvYXV0byc7XG5jb25zdCBub29wID0gKCkgPT4geyB9O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5rIHtcbiAgICBvcHRpb25zO1xuICAgIGxvZztcbiAgICB0aHJvdHRsZWRMb2c7XG4gICAgLy8gSWdub3JlIGxhc3QgcmVuZGVyIGFmdGVyIHVubW91bnRpbmcgYSB0cmVlIHRvIHByZXZlbnQgZW1wdHkgb3V0cHV0IGJlZm9yZSBleGl0XG4gICAgaXNVbm1vdW50ZWQ7XG4gICAgbGFzdE91dHB1dDtcbiAgICBsYXN0T3V0cHV0SGVpZ2h0O1xuICAgIGNvbnRhaW5lcjtcbiAgICByb290Tm9kZSA9IG51bGw7XG4gICAgLy8gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIG9ubHkgaW4gZGVidWcgbW9kZSB0byBzdG9yZSBmdWxsIHN0YXRpYyBvdXRwdXRcbiAgICAvLyBzbyB0aGF0IGl0J3MgcmVyZW5kZXJlZCBldmVyeSB0aW1lLCBub3QganVzdCBuZXcgc3RhdGljIHBhcnRzLCBsaWtlIGluIG5vbi1kZWJ1ZyBtb2RlXG4gICAgZnVsbFN0YXRpY091dHB1dDtcbiAgICBleGl0UHJvbWlzZTtcbiAgICByZXN0b3JlQ29uc29sZTtcbiAgICB1bnN1YnNjcmliZVJlc2l6ZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGF1dG9CaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmxvZyA9IGxvZ1VwZGF0ZS5jcmVhdGUob3B0aW9ucy5zdGRvdXQpO1xuICAgICAgICB0aGlzLnRocm90dGxlZExvZyA9IG9wdGlvbnMuZGVidWdcbiAgICAgICAgICAgID8gdGhpcy5sb2dcbiAgICAgICAgICAgIDogdGhyb3R0bGUodGhpcy5sb2csIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhaWxpbmc6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSWdub3JlIGxhc3QgcmVuZGVyIGFmdGVyIHVubW91bnRpbmcgYSB0cmVlIHRvIHByZXZlbnQgZW1wdHkgb3V0cHV0IGJlZm9yZSBleGl0XG4gICAgICAgIHRoaXMuaXNVbm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gU3RvcmUgbGFzdCBvdXRwdXQgdG8gb25seSByZXJlbmRlciB3aGVuIG5lZWRlZFxuICAgICAgICB0aGlzLmxhc3RPdXRwdXQgPSAnJztcbiAgICAgICAgLy8gU3RvcmUgbGFzdCBvdXRwdXQgaGVpZ2h0IHNvIHdlIGtub3cgdG8gY2xlYXIgdGhlIHRlcm1pbmFsIHdoZW4gdGhlIHByZXZpb3VzIG91dHB1dFxuICAgICAgICAvLyBoZWlnaHQgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHRlcm1pbmFsIGhlaWdodFxuICAgICAgICB0aGlzLmxhc3RPdXRwdXRIZWlnaHQgPSAwO1xuICAgICAgICAvLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgb25seSBpbiBkZWJ1ZyBtb2RlIHRvIHN0b3JlIGZ1bGwgc3RhdGljIG91dHB1dFxuICAgICAgICAvLyBzbyB0aGF0IGl0J3MgcmVyZW5kZXJlZCBldmVyeSB0aW1lLCBub3QganVzdCBuZXcgc3RhdGljIHBhcnRzLCBsaWtlIGluIG5vbi1kZWJ1ZyBtb2RlXG4gICAgICAgIHRoaXMuZnVsbFN0YXRpY091dHB1dCA9ICcnO1xuICAgICAgICAvLyBVbm1vdW50IHdoZW4gcHJvY2VzcyBleGl0c1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRXhpdCA9IHNpZ25hbEV4aXQodGhpcy51bm1vdW50LCB7IGFsd2F5c0xhc3Q6IGZhbHNlIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy5wYXRjaENvbnNvbGUpIHtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDb25zb2xlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0luQ2kpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc3Rkb3V0Lm9uKCdyZXNpemUnLCB0aGlzLnJlc2l6ZWQpO1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0ZG91dC5vZmYoJ3Jlc2l6ZScsIHRoaXMucmVzaXplZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSBkb20uY3JlYXRlTm9kZSgnaW5rLXJvb3QnKTtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5vbkNvbXB1dGVMYXlvdXQgPSB0aGlzLmNhbGN1bGF0ZUxheW91dDtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5vblJlbmRlciA9IG9wdGlvbnMuZGVidWdcbiAgICAgICAgICAgID8gdGhpcy5vblJlbmRlclxuICAgICAgICAgICAgOiB0aHJvdHRsZSh0aGlzLm9uUmVuZGVyLCAzMiwge1xuICAgICAgICAgICAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhaWxpbmc6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5vbkltbWVkaWF0ZVJlbmRlciA9IHRoaXMub25SZW5kZXI7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSByZWNvbmNpbGVyLmNyZWF0ZUNvbnRhaW5lcih0aGlzLnJvb3ROb2RlLCBcbiAgICAgICAgLy8gTGVnYWN5IG1vZGVcbiAgICAgICAgMCwgbnVsbCwgZmFsc2UsIG51bGwsICdpZCcsICgpID0+IHsgfSwgbnVsbCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudlsnREVWJ10gPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmVjb25jaWxlci5pbmplY3RJbnRvRGV2VG9vbHMoe1xuICAgICAgICAgICAgICAgIGJ1bmRsZVR5cGU6IDAsXG4gICAgICAgICAgICAgICAgLy8gUmVwb3J0aW5nIFJlYWN0IERPTSdzIHZlcnNpb24sIG5vdCBJbmsnc1xuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NjY2I2lzc3VlY29tbWVudC01MzI2Mzk5MDVcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMTYuMTMuMScsXG4gICAgICAgICAgICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ2luaycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNpemVkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUxheW91dCgpO1xuICAgICAgICB0aGlzLm9uUmVuZGVyKHRydWUpO1xuICAgIH07XG4gICAgcmVzb2x2ZUV4aXRQcm9taXNlID0gKCkgPT4geyB9O1xuICAgIHJlamVjdEV4aXRQcm9taXNlID0gKCkgPT4geyB9O1xuICAgIHVuc3Vic2NyaWJlRXhpdCA9ICgpID0+IHsgfTtcbiAgICBjYWxjdWxhdGVMYXlvdXQgPSAoKSA9PiB7XG4gICAgICAgIC8vIFRoZSAnY29sdW1ucycgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZCBvciAwIHdoZW4gbm90IHVzaW5nIGEgVFRZLlxuICAgICAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgZmFsbCBiYWNrIHRvIDgwLlxuICAgICAgICBjb25zdCB0ZXJtaW5hbFdpZHRoID0gdGhpcy5vcHRpb25zLnN0ZG91dC5jb2x1bW5zIHx8IDgwO1xuICAgICAgICBpZiAoIXRoaXMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIC8vIFlvZ2EgaXMgbm90IGluaXRpYWxpemVkIHlldFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9vdE5vZGUueW9nYU5vZGUuc2V0V2lkdGgodGVybWluYWxXaWR0aCk7XG4gICAgICAgIHRoaXMucm9vdE5vZGUueW9nYU5vZGUuY2FsY3VsYXRlTGF5b3V0KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBZb2dhLkRJUkVDVElPTl9MVFIpO1xuICAgIH07XG4gICAgb25SZW5kZXIoZGlkUmVzaXplID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIC8vIFlvZ2EgaXMgbm90IGluaXRpYWxpemVkIHlldFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3V0cHV0LCBvdXRwdXRIZWlnaHQsIHN0YXRpY091dHB1dCB9ID0gcmVuZGVyKHRoaXMucm9vdE5vZGUpO1xuICAgICAgICAvLyBJZiA8U3RhdGljPiBvdXRwdXQgaXNuJ3QgZW1wdHksIGl0IG1lYW5zIG5ldyBjaGlsZHJlbiBoYXZlIGJlZW4gYWRkZWQgdG8gaXRcbiAgICAgICAgY29uc3QgaGFzU3RhdGljT3V0cHV0ID0gc3RhdGljT3V0cHV0ICYmIHN0YXRpY091dHB1dCAhPT0gJ1xcbic7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNTdGF0aWNPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTdGF0aWNPdXRwdXQgKz0gc3RhdGljT3V0cHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZG91dC53cml0ZSh0aGlzLmZ1bGxTdGF0aWNPdXRwdXQgKyBvdXRwdXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luQ2kpIHtcbiAgICAgICAgICAgIGlmIChoYXNTdGF0aWNPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3Rkb3V0LndyaXRlKHN0YXRpY091dHB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhc3RPdXRwdXQgPSBvdXRwdXQ7XG4gICAgICAgICAgICB0aGlzLmxhc3RPdXRwdXRIZWlnaHQgPSBvdXRwdXRIZWlnaHQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc1N0YXRpY091dHB1dCkge1xuICAgICAgICAgICAgdGhpcy5mdWxsU3RhdGljT3V0cHV0ICs9IHN0YXRpY091dHB1dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0cHV0SGVpZ2h0ID49IHRoaXMub3B0aW9ucy5zdGRvdXQucm93cyB8fFxuICAgICAgICAgICAgdGhpcy5sYXN0T3V0cHV0SGVpZ2h0ID49IHRoaXMub3B0aW9ucy5zdGRvdXQucm93cykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbkZsaWNrZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMub25GbGlja2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBhZGQgYW4gZXh0cmEgbmV3bGluZSB0byBtYXRjaCB3aGF0IGxvZ091dHB1dCBkb2VzXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3Rkb3V0LndyaXRlKGFuc2lFc2NhcGVzLmNsZWFyVGVybWluYWwgKyB0aGlzLmZ1bGxTdGF0aWNPdXRwdXQgKyBvdXRwdXQgKyAnXFxuJyk7XG4gICAgICAgICAgICB0aGlzLmxhc3RPdXRwdXQgPSBvdXRwdXQ7XG4gICAgICAgICAgICB0aGlzLmxhc3RPdXRwdXRIZWlnaHQgPSBvdXRwdXRIZWlnaHQ7XG4gICAgICAgICAgICAvLyBBY2NvdW50IGZvciB0aGUgZXh0cmEgbmV3bGluZVxuICAgICAgICAgICAgdGhpcy5sb2cudXBkYXRlTGluZUNvdW50KG91dHB1dCArICdcXG4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlkUmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3Rkb3V0LndyaXRlKGFuc2lFc2NhcGVzLmNsZWFyVGVybWluYWwgKyB0aGlzLmZ1bGxTdGF0aWNPdXRwdXQgKyBvdXRwdXQgKyAnXFxuJyk7XG4gICAgICAgICAgICB0aGlzLmxhc3RPdXRwdXQgPSBvdXRwdXQ7XG4gICAgICAgICAgICB0aGlzLmxhc3RPdXRwdXRIZWlnaHQgPSBvdXRwdXRIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmxvZy51cGRhdGVMaW5lQ291bnQob3V0cHV0ICsgJ1xcbicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRvIGVuc3VyZSBzdGF0aWMgb3V0cHV0IGlzIGNsZWFubHkgcmVuZGVyZWQgYmVmb3JlIG1haW4gb3V0cHV0LCBjbGVhciBtYWluIG91dHB1dCBmaXJzdFxuICAgICAgICBpZiAoaGFzU3RhdGljT3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZG91dC53cml0ZShzdGF0aWNPdXRwdXQpO1xuICAgICAgICAgICAgdGhpcy50aHJvdHRsZWRMb2cob3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc1N0YXRpY091dHB1dCAmJiBvdXRwdXQgIT09IHRoaXMubGFzdE91dHB1dCkge1xuICAgICAgICAgICAgdGhpcy50aHJvdHRsZWRMb2cob3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhc3RPdXRwdXQgPSBvdXRwdXQ7XG4gICAgICAgIHRoaXMubGFzdE91dHB1dEhlaWdodCA9IG91dHB1dEhlaWdodDtcbiAgICB9XG4gICAgcmVuZGVyKG5vZGUpIHtcbiAgICAgICAgY29uc3QgdHJlZSA9IChSZWFjdC5jcmVhdGVFbGVtZW50KEFwcCwgeyBzdGRpbjogdGhpcy5vcHRpb25zLnN0ZGluLCBzdGRvdXQ6IHRoaXMub3B0aW9ucy5zdGRvdXQsIHN0ZGVycjogdGhpcy5vcHRpb25zLnN0ZGVyciwgd3JpdGVUb1N0ZG91dDogdGhpcy53cml0ZVRvU3Rkb3V0LCB3cml0ZVRvU3RkZXJyOiB0aGlzLndyaXRlVG9TdGRlcnIsIGV4aXRPbkN0cmxDOiB0aGlzLm9wdGlvbnMuZXhpdE9uQ3RybEMsIG9uRXhpdDogdGhpcy51bm1vdW50IH0sIG5vZGUpKTtcbiAgICAgICAgcmVjb25jaWxlci51cGRhdGVDb250YWluZXIodHJlZSwgdGhpcy5jb250YWluZXIsIG51bGwsIG5vb3ApO1xuICAgIH1cbiAgICB3cml0ZVRvU3Rkb3V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3Rkb3V0LndyaXRlKGRhdGEgKyB0aGlzLmZ1bGxTdGF0aWNPdXRwdXQgKyB0aGlzLmxhc3RPdXRwdXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luQ2kpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGRvdXQud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zLnN0ZG91dC53cml0ZShkYXRhKTtcbiAgICAgICAgdGhpcy5sb2codGhpcy5sYXN0T3V0cHV0KTtcbiAgICB9XG4gICAgd3JpdGVUb1N0ZGVycihkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVW5tb3VudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZGVyci53cml0ZShkYXRhKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGRvdXQud3JpdGUodGhpcy5mdWxsU3RhdGljT3V0cHV0ICsgdGhpcy5sYXN0T3V0cHV0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbkNpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RkZXJyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zdGRlcnIud3JpdGUoZGF0YSk7XG4gICAgICAgIHRoaXMubG9nKHRoaXMubGFzdE91dHB1dCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICAgdW5tb3VudChlcnJvcikge1xuICAgICAgICBpZiAodGhpcy5pc1VubW91bnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTGF5b3V0KCk7XG4gICAgICAgIHRoaXMub25SZW5kZXIoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUV4aXQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc3RvcmVDb25zb2xlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVDb25zb2xlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVuc3Vic2NyaWJlUmVzaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlUmVzaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ0lzIGRvbid0IGhhbmRsZSBlcmFzaW5nIGFuc2kgZXNjYXBlcyB3ZWxsLCBzbyBpdCdzIGJldHRlciB0b1xuICAgICAgICAvLyBvbmx5IHJlbmRlciBsYXN0IGZyYW1lIG9mIG5vbi1zdGF0aWMgb3V0cHV0XG4gICAgICAgIGlmIChpc0luQ2kpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGRvdXQud3JpdGUodGhpcy5sYXN0T3V0cHV0ICsgJ1xcbicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzVW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgcmVjb25jaWxlci51cGRhdGVDb250YWluZXIobnVsbCwgdGhpcy5jb250YWluZXIsIG51bGwsIG5vb3ApO1xuICAgICAgICBpbnN0YW5jZXMuZGVsZXRlKHRoaXMub3B0aW9ucy5zdGRvdXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5yZWplY3RFeGl0UHJvbWlzZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVFeGl0UHJvbWlzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHdhaXRVbnRpbEV4aXQoKSB7XG4gICAgICAgIHRoaXMuZXhpdFByb21pc2UgfHw9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUV4aXRQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0RXhpdFByb21pc2UgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5leGl0UHJvbWlzZTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIGlmICghaXNJbkNpICYmICF0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGF0Y2hDb25zb2xlKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN0b3JlQ29uc29sZSA9IHBhdGNoQ29uc29sZSgoc3RyZWFtLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtID09PSAnc3Rkb3V0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVUb1N0ZG91dChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0gPT09ICdzdGRlcnInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFjdE1lc3NhZ2UgPSBkYXRhLnN0YXJ0c1dpdGgoJ1RoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCcpO1xuICAgICAgICAgICAgICAgIGlmICghaXNSZWFjdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVRvU3RkZXJyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5rLmpzLm1hcCIsCiAgICAiZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgZGVib3VuY2VNcywgeyBzaWduYWwsIGVkZ2VzIH0gPSB7fSkge1xuICAgIGxldCBwZW5kaW5nVGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVuZGluZ0FyZ3MgPSBudWxsO1xuICAgIGNvbnN0IGxlYWRpbmcgPSBlZGdlcyAhPSBudWxsICYmIGVkZ2VzLmluY2x1ZGVzKCdsZWFkaW5nJyk7XG4gICAgY29uc3QgdHJhaWxpbmcgPSBlZGdlcyA9PSBudWxsIHx8IGVkZ2VzLmluY2x1ZGVzKCd0cmFpbGluZycpO1xuICAgIGNvbnN0IGludm9rZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHBlbmRpbmdBcmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmdW5jLmFwcGx5KHBlbmRpbmdUaGlzLCBwZW5kaW5nQXJncyk7XG4gICAgICAgICAgICBwZW5kaW5nVGhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHBlbmRpbmdBcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25UaW1lckVuZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRyYWlsaW5nKSB7XG4gICAgICAgICAgICBpbnZva2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwoKTtcbiAgICB9O1xuICAgIGxldCB0aW1lb3V0SWQgPSBudWxsO1xuICAgIGNvbnN0IHNjaGVkdWxlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGltZW91dElkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG4gICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGltZW91dElkID0gbnVsbDtcbiAgICAgICAgICAgIG9uVGltZXJFbmQoKTtcbiAgICAgICAgfSwgZGVib3VuY2VNcyk7XG4gICAgfTtcbiAgICBjb25zdCBjYW5jZWxUaW1lciA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGNhbmNlbFRpbWVyKCk7XG4gICAgICAgIHBlbmRpbmdUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgICBwZW5kaW5nQXJncyA9IG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICAgICAgY2FuY2VsVGltZXIoKTtcbiAgICAgICAgaW52b2tlKCk7XG4gICAgfTtcbiAgICBjb25zdCBkZWJvdW5jZWQgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ1RoaXMgPSB0aGlzO1xuICAgICAgICBwZW5kaW5nQXJncyA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IGlzRmlyc3RDYWxsID0gdGltZW91dElkID09IG51bGw7XG4gICAgICAgIHNjaGVkdWxlKCk7XG4gICAgICAgIGlmIChsZWFkaW5nICYmIGlzRmlyc3RDYWxsKSB7XG4gICAgICAgICAgICBpbnZva2UoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZGVib3VuY2VkLnNjaGVkdWxlID0gc2NoZWR1bGU7XG4gICAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FuY2VsLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxuZXhwb3J0IHsgZGVib3VuY2UgfTtcbiIsCiAgICAiaW1wb3J0IHsgZGVib3VuY2UgYXMgZGVib3VuY2UkMSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uL2RlYm91bmNlLm1qcyc7XG5cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIGRlYm91bmNlTXMgPSAwLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgeyBzaWduYWwsIGxlYWRpbmcgPSBmYWxzZSwgdHJhaWxpbmcgPSB0cnVlLCBtYXhXYWl0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVkZ2VzID0gQXJyYXkoMik7XG4gICAgaWYgKGxlYWRpbmcpIHtcbiAgICAgICAgZWRnZXNbMF0gPSAnbGVhZGluZyc7XG4gICAgfVxuICAgIGlmICh0cmFpbGluZykge1xuICAgICAgICBlZGdlc1sxXSA9ICd0cmFpbGluZyc7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHBlbmRpbmdBdCA9IG51bGw7XG4gICAgY29uc3QgX2RlYm91bmNlZCA9IGRlYm91bmNlJDEoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcGVuZGluZ0F0ID0gbnVsbDtcbiAgICB9LCBkZWJvdW5jZU1zLCB7IHNpZ25hbCwgZWRnZXMgfSk7XG4gICAgY29uc3QgZGVib3VuY2VkID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKG1heFdhaXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdBdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBlbmRpbmdBdCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHBlbmRpbmdBdCA+PSBtYXhXYWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdBdCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIF9kZWJvdW5jZWQuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgICAgIF9kZWJvdW5jZWQuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2RlYm91bmNlZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgICAgICBfZGVib3VuY2VkLmZsdXNoKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gX2RlYm91bmNlZC5jYW5jZWw7XG4gICAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxuZXhwb3J0IHsgZGVib3VuY2UgfTtcbiIsCiAgICAiaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuL2RlYm91bmNlLm1qcyc7XG5cbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHRocm90dGxlTXMgPSAwLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgeyBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlLCBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHRocm90dGxlTXMsIHsgbGVhZGluZywgdHJhaWxpbmcsIHNpZ25hbCwgbWF4V2FpdDogdGhyb3R0bGVNcyB9KTtcbn1cblxuZXhwb3J0IHsgdGhyb3R0bGUgfTtcbiIsCiAgICAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7aXNCcm93c2VyfSBmcm9tICdlbnZpcm9ubWVudCc7XG5cbmNvbnN0IEVTQyA9ICdcXHUwMDFCWyc7XG5jb25zdCBPU0MgPSAnXFx1MDAxQl0nO1xuY29uc3QgQkVMID0gJ1xcdTAwMDcnO1xuY29uc3QgU0VQID0gJzsnO1xuXG5jb25zdCBpc1Rlcm1pbmFsQXBwID0gIWlzQnJvd3NlciAmJiBwcm9jZXNzLmVudi5URVJNX1BST0dSQU0gPT09ICdBcHBsZV9UZXJtaW5hbCc7XG5jb25zdCBpc1dpbmRvd3MgPSAhaXNCcm93c2VyICYmIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG5cbmNvbnN0IGN3ZEZ1bmN0aW9uID0gaXNCcm93c2VyID8gKCkgPT4ge1xuXHR0aHJvdyBuZXcgRXJyb3IoJ2Bwcm9jZXNzLmN3ZCgpYCBvbmx5IHdvcmtzIGluIE5vZGUuanMsIG5vdCB0aGUgYnJvd3Nlci4nKTtcbn0gOiBwcm9jZXNzLmN3ZDtcblxuZXhwb3J0IGNvbnN0IGN1cnNvclRvID0gKHgsIHkpID0+IHtcblx0aWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgeGAgYXJndW1lbnQgaXMgcmVxdWlyZWQnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgeSAhPT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gRVNDICsgKHggKyAxKSArICdHJztcblx0fVxuXG5cdHJldHVybiBFU0MgKyAoeSArIDEpICsgU0VQICsgKHggKyAxKSArICdIJztcbn07XG5cbmV4cG9ydCBjb25zdCBjdXJzb3JNb3ZlID0gKHgsIHkpID0+IHtcblx0aWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgeGAgYXJndW1lbnQgaXMgcmVxdWlyZWQnKTtcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXG5cdGlmICh4IDwgMCkge1xuXHRcdHJldHVyblZhbHVlICs9IEVTQyArICgteCkgKyAnRCc7XG5cdH0gZWxzZSBpZiAoeCA+IDApIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBFU0MgKyB4ICsgJ0MnO1xuXHR9XG5cblx0aWYgKHkgPCAwKSB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gRVNDICsgKC15KSArICdBJztcblx0fSBlbHNlIGlmICh5ID4gMCkge1xuXHRcdHJldHVyblZhbHVlICs9IEVTQyArIHkgKyAnQic7XG5cdH1cblxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY3Vyc29yVXAgPSAoY291bnQgPSAxKSA9PiBFU0MgKyBjb3VudCArICdBJztcbmV4cG9ydCBjb25zdCBjdXJzb3JEb3duID0gKGNvdW50ID0gMSkgPT4gRVNDICsgY291bnQgKyAnQic7XG5leHBvcnQgY29uc3QgY3Vyc29yRm9yd2FyZCA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0MnO1xuZXhwb3J0IGNvbnN0IGN1cnNvckJhY2t3YXJkID0gKGNvdW50ID0gMSkgPT4gRVNDICsgY291bnQgKyAnRCc7XG5cbmV4cG9ydCBjb25zdCBjdXJzb3JMZWZ0ID0gRVNDICsgJ0cnO1xuZXhwb3J0IGNvbnN0IGN1cnNvclNhdmVQb3NpdGlvbiA9IGlzVGVybWluYWxBcHAgPyAnXFx1MDAxQjcnIDogRVNDICsgJ3MnO1xuZXhwb3J0IGNvbnN0IGN1cnNvclJlc3RvcmVQb3NpdGlvbiA9IGlzVGVybWluYWxBcHAgPyAnXFx1MDAxQjgnIDogRVNDICsgJ3UnO1xuZXhwb3J0IGNvbnN0IGN1cnNvckdldFBvc2l0aW9uID0gRVNDICsgJzZuJztcbmV4cG9ydCBjb25zdCBjdXJzb3JOZXh0TGluZSA9IEVTQyArICdFJztcbmV4cG9ydCBjb25zdCBjdXJzb3JQcmV2TGluZSA9IEVTQyArICdGJztcbmV4cG9ydCBjb25zdCBjdXJzb3JIaWRlID0gRVNDICsgJz8yNWwnO1xuZXhwb3J0IGNvbnN0IGN1cnNvclNob3cgPSBFU0MgKyAnPzI1aCc7XG5cbmV4cG9ydCBjb25zdCBlcmFzZUxpbmVzID0gY291bnQgPT4ge1xuXHRsZXQgY2xlYXIgPSAnJztcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRjbGVhciArPSBlcmFzZUxpbmUgKyAoaSA8IGNvdW50IC0gMSA/IGN1cnNvclVwKCkgOiAnJyk7XG5cdH1cblxuXHRpZiAoY291bnQpIHtcblx0XHRjbGVhciArPSBjdXJzb3JMZWZ0O1xuXHR9XG5cblx0cmV0dXJuIGNsZWFyO1xufTtcblxuZXhwb3J0IGNvbnN0IGVyYXNlRW5kTGluZSA9IEVTQyArICdLJztcbmV4cG9ydCBjb25zdCBlcmFzZVN0YXJ0TGluZSA9IEVTQyArICcxSyc7XG5leHBvcnQgY29uc3QgZXJhc2VMaW5lID0gRVNDICsgJzJLJztcbmV4cG9ydCBjb25zdCBlcmFzZURvd24gPSBFU0MgKyAnSic7XG5leHBvcnQgY29uc3QgZXJhc2VVcCA9IEVTQyArICcxSic7XG5leHBvcnQgY29uc3QgZXJhc2VTY3JlZW4gPSBFU0MgKyAnMkonO1xuZXhwb3J0IGNvbnN0IHNjcm9sbFVwID0gRVNDICsgJ1MnO1xuZXhwb3J0IGNvbnN0IHNjcm9sbERvd24gPSBFU0MgKyAnVCc7XG5cbmV4cG9ydCBjb25zdCBjbGVhclNjcmVlbiA9ICdcXHUwMDFCYyc7XG5cbmV4cG9ydCBjb25zdCBjbGVhclRlcm1pbmFsID0gaXNXaW5kb3dzXG5cdD8gYCR7ZXJhc2VTY3JlZW59JHtFU0N9MGZgXG5cdC8vIDEuIEVyYXNlcyB0aGUgc2NyZWVuIChPbmx5IGRvbmUgaW4gY2FzZSBgMmAgaXMgbm90IHN1cHBvcnRlZClcblx0Ly8gMi4gRXJhc2VzIHRoZSB3aG9sZSBzY3JlZW4gaW5jbHVkaW5nIHNjcm9sbGJhY2sgYnVmZmVyXG5cdC8vIDMuIE1vdmVzIGN1cnNvciB0byB0aGUgdG9wLWxlZnQgcG9zaXRpb25cblx0Ly8gTW9yZSBpbmZvOiBodHRwczovL3d3dy5yZWFsLXdvcmxkLXN5c3RlbXMuY29tL2RvY3MvQU5TSWNvZGUuaHRtbFxuXHQ6XHRgJHtlcmFzZVNjcmVlbn0ke0VTQ30zSiR7RVNDfUhgO1xuXG5leHBvcnQgY29uc3QgZW50ZXJBbHRlcm5hdGl2ZVNjcmVlbiA9IEVTQyArICc/MTA0OWgnO1xuZXhwb3J0IGNvbnN0IGV4aXRBbHRlcm5hdGl2ZVNjcmVlbiA9IEVTQyArICc/MTA0OWwnO1xuXG5leHBvcnQgY29uc3QgYmVlcCA9IEJFTDtcblxuZXhwb3J0IGNvbnN0IGxpbmsgPSAodGV4dCwgdXJsKSA9PiBbXG5cdE9TQyxcblx0JzgnLFxuXHRTRVAsXG5cdFNFUCxcblx0dXJsLFxuXHRCRUwsXG5cdHRleHQsXG5cdE9TQyxcblx0JzgnLFxuXHRTRVAsXG5cdFNFUCxcblx0QkVMLFxuXS5qb2luKCcnKTtcblxuZXhwb3J0IGNvbnN0IGltYWdlID0gKGRhdGEsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRsZXQgcmV0dXJuVmFsdWUgPSBgJHtPU0N9MTMzNztGaWxlPWlubGluZT0xYDtcblxuXHRpZiAob3B0aW9ucy53aWR0aCkge1xuXHRcdHJldHVyblZhbHVlICs9IGA7d2lkdGg9JHtvcHRpb25zLndpZHRofWA7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5oZWlnaHQpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBgO2hlaWdodD0ke29wdGlvbnMuaGVpZ2h0fWA7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvID09PSBmYWxzZSkge1xuXHRcdHJldHVyblZhbHVlICs9ICc7cHJlc2VydmVBc3BlY3RSYXRpbz0wJztcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZSArICc6JyArIEJ1ZmZlci5mcm9tKGRhdGEpLnRvU3RyaW5nKCdiYXNlNjQnKSArIEJFTDtcbn07XG5cbmV4cG9ydCBjb25zdCBpVGVybSA9IHtcblx0c2V0Q3dkOiAoY3dkID0gY3dkRnVuY3Rpb24oKSkgPT4gYCR7T1NDfTUwO0N1cnJlbnREaXI9JHtjd2R9JHtCRUx9YCxcblxuXHRhbm5vdGF0aW9uKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGxldCByZXR1cm5WYWx1ZSA9IGAke09TQ30xMzM3O2A7XG5cblx0XHRjb25zdCBoYXNYID0gb3B0aW9ucy54ICE9PSB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaGFzWSA9IG9wdGlvbnMueSAhPT0gdW5kZWZpbmVkO1xuXHRcdGlmICgoaGFzWCB8fCBoYXNZKSAmJiAhKGhhc1ggJiYgaGFzWSAmJiBvcHRpb25zLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdgeGAsIGB5YCBhbmQgYGxlbmd0aGAgbXVzdCBiZSBkZWZpbmVkIHdoZW4gYHhgIG9yIGB5YCBpcyBkZWZpbmVkJyk7XG5cdFx0fVxuXG5cdFx0bWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgnfCcsICcnKTtcblxuXHRcdHJldHVyblZhbHVlICs9IG9wdGlvbnMuaXNIaWRkZW4gPyAnQWRkSGlkZGVuQW5ub3RhdGlvbj0nIDogJ0FkZEFubm90YXRpb249JztcblxuXHRcdGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVyblZhbHVlICs9IChcblx0XHRcdFx0aGFzWFxuXHRcdFx0XHRcdD8gW21lc3NhZ2UsIG9wdGlvbnMubGVuZ3RoLCBvcHRpb25zLngsIG9wdGlvbnMueV1cblx0XHRcdFx0XHQ6IFtvcHRpb25zLmxlbmd0aCwgbWVzc2FnZV1cblx0XHRcdCkuam9pbignfCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm5WYWx1ZSArPSBtZXNzYWdlO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZSArIEJFTDtcblx0fSxcbn07XG4iLAogICAgIi8qIGdsb2JhbHMgV29ya2VyR2xvYmFsU2NvcGUsIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSwgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlICovXG5cbmV4cG9ydCBjb25zdCBpc0Jyb3dzZXIgPSBnbG9iYWxUaGlzLndpbmRvdz8uZG9jdW1lbnQgIT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGlzQnVuID0gZ2xvYmFsVGhpcy5wcm9jZXNzPy52ZXJzaW9ucz8uYnVuICE9PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm8gPSBnbG9iYWxUaGlzLkRlbm8/LnZlcnNpb24/LmRlbm8gIT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGlzRWxlY3Ryb24gPSBnbG9iYWxUaGlzLnByb2Nlc3M/LnZlcnNpb25zPy5lbGVjdHJvbiAhPT0gdW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgaXNKc0RvbSA9IGdsb2JhbFRoaXMubmF2aWdhdG9yPy51c2VyQWdlbnQ/LmluY2x1ZGVzKCdqc2RvbScpID09PSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaXNXZWJXb3JrZXIgPSB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcblxuZXhwb3J0IGNvbnN0IGlzRGVkaWNhdGVkV29ya2VyID0gdHlwZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzIGluc3RhbmNlb2YgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7XG5cbmV4cG9ydCBjb25zdCBpc1NoYXJlZFdvcmtlciA9IHR5cGVvZiBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcyBpbnN0YW5jZW9mIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlO1xuXG5leHBvcnQgY29uc3QgaXNTZXJ2aWNlV29ya2VyID0gdHlwZW9mIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcyBpbnN0YW5jZW9mIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTtcblxuLy8gTm90ZTogSSdtIGludGVudGlvbmFsbHkgbm90IERSWWluZyB1cCB0aGUgb3RoZXIgdmFyaWFibGVzIHRvIGtlZXAgdGhlbSBcImxhenlcIi5cbmNvbnN0IHBsYXRmb3JtID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LnVzZXJBZ2VudERhdGE/LnBsYXRmb3JtO1xuXG5leHBvcnQgY29uc3QgaXNNYWNPcyA9IHBsYXRmb3JtID09PSAnbWFjT1MnXG5cdHx8IGdsb2JhbFRoaXMubmF2aWdhdG9yPy5wbGF0Zm9ybSA9PT0gJ01hY0ludGVsJyAvLyBFdmVuIG9uIEFwcGxlIHNpbGljb24gTWFjcy5cblx0fHwgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoJyBNYWMgJykgPT09IHRydWVcblx0fHwgZ2xvYmFsVGhpcy5wcm9jZXNzPy5wbGF0Zm9ybSA9PT0gJ2Rhcndpbic7XG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gJ1dpbmRvd3MnXG5cdHx8IGdsb2JhbFRoaXMubmF2aWdhdG9yPy5wbGF0Zm9ybSA9PT0gJ1dpbjMyJ1xuXHR8fCBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSAnd2luMzInO1xuXG5leHBvcnQgY29uc3QgaXNMaW51eCA9IHBsYXRmb3JtID09PSAnTGludXgnXG5cdHx8IGdsb2JhbFRoaXMubmF2aWdhdG9yPy5wbGF0Zm9ybT8uc3RhcnRzV2l0aCgnTGludXgnKSA9PT0gdHJ1ZVxuXHR8fCBnbG9iYWxUaGlzLm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygnIExpbnV4ICcpID09PSB0cnVlXG5cdHx8IGdsb2JhbFRoaXMucHJvY2Vzcz8ucGxhdGZvcm0gPT09ICdsaW51eCc7XG5cbmV4cG9ydCBjb25zdCBpc0lvcyA9IHBsYXRmb3JtID09PSAnaU9TJ1xuXHR8fCAoZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LnBsYXRmb3JtID09PSAnTWFjSW50ZWwnICYmIGdsb2JhbFRoaXMubmF2aWdhdG9yPy5tYXhUb3VjaFBvaW50cyA+IDEpXG5cdHx8IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KGdsb2JhbFRoaXMubmF2aWdhdG9yPy5wbGF0Zm9ybSk7XG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSBwbGF0Zm9ybSA9PT0gJ0FuZHJvaWQnXG5cdHx8IGdsb2JhbFRoaXMubmF2aWdhdG9yPy5wbGF0Zm9ybSA9PT0gJ0FuZHJvaWQnXG5cdHx8IGdsb2JhbFRoaXMubmF2aWdhdG9yPy51c2VyQWdlbnQ/LmluY2x1ZGVzKCcgQW5kcm9pZCAnKSA9PT0gdHJ1ZVxuXHR8fCBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSAnYW5kcm9pZCc7XG4iLAogICAgImltcG9ydCB7ZW52fSBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5jb25zdCBpc0luQ2kgPSBlbnYuQ0kgIT09ICcwJ1xuXHQmJiBlbnYuQ0kgIT09ICdmYWxzZSdcblx0JiYgKFxuXHRcdCdDSScgaW4gZW52XG5cdFx0XHR8fCAnQ09OVElOVU9VU19JTlRFR1JBVElPTicgaW4gZW52XG5cdFx0XHR8fCBPYmplY3Qua2V5cyhlbnYpLnNvbWUoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdDSV8nKSlcblx0KTtcblxuZXhwb3J0IGRlZmF1bHQgaXNJbkNpO1xuIiwKICAgICIvLyBHZXRzIGFsbCBub24tYnVpbHRpbiBwcm9wZXJ0aWVzIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4uXG5jb25zdCBnZXRBbGxQcm9wZXJ0aWVzID0gb2JqZWN0ID0+IHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblxuXHRkbyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG9iamVjdCkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKFtvYmplY3QsIGtleV0pO1xuXHRcdH1cblx0fSB3aGlsZSAoKG9iamVjdCA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkgJiYgb2JqZWN0ICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuXHRyZXR1cm4gcHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dG9CaW5kKHNlbGYsIHtpbmNsdWRlLCBleGNsdWRlfSA9IHt9KSB7XG5cdGNvbnN0IGZpbHRlciA9IGtleSA9PiB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBwYXR0ZXJuID0+IHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJyA/IGtleSA9PT0gcGF0dGVybiA6IHBhdHRlcm4udGVzdChrZXkpO1xuXG5cdFx0aWYgKGluY2x1ZGUpIHtcblx0XHRcdHJldHVybiBpbmNsdWRlLnNvbWUobWF0Y2gpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHVuaWNvcm4vbm8tYXJyYXktY2FsbGJhY2stcmVmZXJlbmNlXG5cdFx0fVxuXG5cdFx0aWYgKGV4Y2x1ZGUpIHtcblx0XHRcdHJldHVybiAhZXhjbHVkZS5zb21lKG1hdGNoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSB1bmljb3JuL25vLWFycmF5LWNhbGxiYWNrLXJlZmVyZW5jZVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdGZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiBnZXRBbGxQcm9wZXJ0aWVzKHNlbGYuY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuXHRcdGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWZpbHRlcihrZXkpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpO1xuXHRcdGlmIChkZXNjcmlwdG9yICYmIHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRzZWxmW2tleV0gPSBzZWxmW2tleV0uYmluZChzZWxmKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc2VsZjtcbn1cbiIsCiAgICAiaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tICdub2RlOnN0cmVhbSc7XG5jb25zdCBjb25zb2xlTWV0aG9kcyA9IFtcbiAgICAnYXNzZXJ0JyxcbiAgICAnY291bnQnLFxuICAgICdjb3VudFJlc2V0JyxcbiAgICAnZGVidWcnLFxuICAgICdkaXInLFxuICAgICdkaXJ4bWwnLFxuICAgICdlcnJvcicsXG4gICAgJ2dyb3VwJyxcbiAgICAnZ3JvdXBDb2xsYXBzZWQnLFxuICAgICdncm91cEVuZCcsXG4gICAgJ2luZm8nLFxuICAgICdsb2cnLFxuICAgICd0YWJsZScsXG4gICAgJ3RpbWUnLFxuICAgICd0aW1lRW5kJyxcbiAgICAndGltZUxvZycsXG4gICAgJ3RyYWNlJyxcbiAgICAnd2FybicsXG5dO1xubGV0IG9yaWdpbmFsTWV0aG9kcyA9IHt9O1xuY29uc3QgcGF0Y2hDb25zb2xlID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gbmV3IFBhc3NUaHJvdWdoKCk7XG4gICAgY29uc3Qgc3RkZXJyID0gbmV3IFBhc3NUaHJvdWdoKCk7XG4gICAgc3Rkb3V0LndyaXRlID0gKGRhdGEpID0+IHtcbiAgICAgICAgY2FsbGJhY2soJ3N0ZG91dCcsIGRhdGEpO1xuICAgIH07XG4gICAgc3RkZXJyLndyaXRlID0gKGRhdGEpID0+IHtcbiAgICAgICAgY2FsbGJhY2soJ3N0ZGVycicsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgaW50ZXJuYWxDb25zb2xlID0gbmV3IGNvbnNvbGUuQ29uc29sZShzdGRvdXQsIHN0ZGVycik7XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgY29uc29sZU1ldGhvZHMpIHtcbiAgICAgICAgb3JpZ2luYWxNZXRob2RzW21ldGhvZF0gPSBjb25zb2xlW21ldGhvZF07XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgY29uc29sZVttZXRob2RdID0gaW50ZXJuYWxDb25zb2xlW21ldGhvZF07XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGNvbnNvbGVNZXRob2RzKSB7XG4gICAgICAgICAgICBjb25zb2xlW21ldGhvZF0gPSBvcmlnaW5hbE1ldGhvZHNbbWV0aG9kXTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbE1ldGhvZHMgPSB7fTtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHBhdGNoQ29uc29sZTtcbiIsCiAgICAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBjcmVhdGVSZWNvbmNpbGVyIGZyb20gJ3JlYWN0LXJlY29uY2lsZXInO1xuaW1wb3J0IHsgRGVmYXVsdEV2ZW50UHJpb3JpdHkgfSBmcm9tICdyZWFjdC1yZWNvbmNpbGVyL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgKiBhcyBZb2dhIGZyb20gJ3lvZ2Etd2FzbS13ZWInO1xuaW1wb3J0IHsgY3JlYXRlVGV4dE5vZGUsIGFwcGVuZENoaWxkTm9kZSwgaW5zZXJ0QmVmb3JlTm9kZSwgcmVtb3ZlQ2hpbGROb2RlLCBzZXRTdHlsZSwgc2V0VGV4dE5vZGVWYWx1ZSwgY3JlYXRlTm9kZSwgc2V0QXR0cmlidXRlLCB9IGZyb20gJy4vZG9tLmpzJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL3N0eWxlcy5qcyc7XG4vLyBXZSBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgcGVyZm9ybSBkZXZ0b29scyBjb25uZWN0aW9uIHRvIGF2b2lkXG4vLyBhY2NpZGVudGFsbHkgYnJlYWtpbmcgb3RoZXIgdGhpcmQtcGFydHkgY29kZS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdmFkaW1kZW1lZGVzL2luay9pc3N1ZXMvMzg0XG5pZiAocHJvY2Vzcy5lbnZbJ0RFViddID09PSAndHJ1ZScpIHtcbiAgICB0cnkge1xuICAgICAgICBpbXBvcnQoJy4vZGV2dG9vbHMuanMnKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVJSX01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFxuVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIERFViBpcyBzZXQgdG8gdHJ1ZSwgc28gSW5rIHRyaWVkIHRvIGltcG9ydCBcXGByZWFjdC1kZXZ0b29scy1jb3JlXFxgLFxuYnV0IHRoaXMgZmFpbGVkIGFzIGl0IHdhcyBub3QgaW5zdGFsbGVkLiBEZWJ1Z2dpbmcgd2l0aCBSZWFjdCBEZXZ0b29scyByZXF1aXJlcyBpdC5cblxuVG8gaW5zdGFsbCB1c2UgdGhpcyBjb21tYW5kOlxuXG4kIG5wbSBpbnN0YWxsIC0tc2F2ZS1kZXYgcmVhY3QtZGV2dG9vbHMtY29yZVxuXHRcdFx0XHRgLnRyaW0oKSArICdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvb25seS10aHJvdy1lcnJvclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG5jb25zdCBkaWZmID0gKGJlZm9yZSwgYWZ0ZXIpID0+IHtcbiAgICBpZiAoYmVmb3JlID09PSBhZnRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYmVmb3JlKSB7XG4gICAgICAgIHJldHVybiBhZnRlcjtcbiAgICB9XG4gICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgIGxldCBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhiZWZvcmUpKSB7XG4gICAgICAgIGNvbnN0IGlzRGVsZXRlZCA9IGFmdGVyID8gIU9iamVjdC5oYXNPd24oYWZ0ZXIsIGtleSkgOiB0cnVlO1xuICAgICAgICBpZiAoaXNEZWxldGVkKSB7XG4gICAgICAgICAgICBjaGFuZ2VkW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhZnRlcikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhZnRlcikpIHtcbiAgICAgICAgICAgIGlmIChhZnRlcltrZXldICE9PSBiZWZvcmVba2V5XSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWRba2V5XSA9IGFmdGVyW2tleV07XG4gICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNDaGFuZ2VkID8gY2hhbmdlZCA6IHVuZGVmaW5lZDtcbn07XG5jb25zdCBjbGVhbnVwWW9nYU5vZGUgPSAobm9kZSkgPT4ge1xuICAgIG5vZGU/LnVuc2V0TWVhc3VyZUZ1bmMoKTtcbiAgICBub2RlPy5mcmVlUmVjdXJzaXZlKCk7XG59O1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVjb25jaWxlcih7XG4gICAgZ2V0Um9vdEhvc3RDb250ZXh0OiAoKSA9PiAoe1xuICAgICAgICBpc0luc2lkZVRleHQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIHByZXBhcmVGb3JDb21taXQ6ICgpID0+IG51bGwsXG4gICAgcHJlcGFyZVBvcnRhbE1vdW50OiAoKSA9PiBudWxsLFxuICAgIGNsZWFyQ29udGFpbmVyOiAoKSA9PiBmYWxzZSxcbiAgICByZXNldEFmdGVyQ29tbWl0KHJvb3ROb2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdE5vZGUub25Db21wdXRlTGF5b3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb290Tm9kZS5vbkNvbXB1dGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaW5jZSByZW5kZXJzIGFyZSB0aHJvdHRsZWQgYXQgdGhlIGluc3RhbmNlIGxldmVsIGFuZCA8U3RhdGljPiBjb21wb25lbnQgY2hpbGRyZW5cbiAgICAgICAgLy8gYXJlIHJlbmRlcmVkIG9ubHkgb25jZSBhbmQgdGhlbiBnZXQgZGVsZXRlZCwgd2UgbmVlZCBhbiBlc2NhcGUgaGF0Y2ggdG9cbiAgICAgICAgLy8gdHJpZ2dlciBhbiBpbW1lZGlhdGUgcmVuZGVyIHRvIGVuc3VyZSA8U3RhdGljPiBjaGlsZHJlbiBhcmUgd3JpdHRlbiB0byBvdXRwdXQgYmVmb3JlIHRoZXkgZ2V0IGVyYXNlZFxuICAgICAgICBpZiAocm9vdE5vZGUuaXNTdGF0aWNEaXJ0eSkge1xuICAgICAgICAgICAgcm9vdE5vZGUuaXNTdGF0aWNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByb290Tm9kZS5vbkltbWVkaWF0ZVJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJvb3ROb2RlLm9uSW1tZWRpYXRlUmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb290Tm9kZS5vblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcm9vdE5vZGUub25SZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSkge1xuICAgICAgICBjb25zdCBwcmV2aW91c0lzSW5zaWRlVGV4dCA9IHBhcmVudEhvc3RDb250ZXh0LmlzSW5zaWRlVGV4dDtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVUZXh0ID0gdHlwZSA9PT0gJ2luay10ZXh0JyB8fCB0eXBlID09PSAnaW5rLXZpcnR1YWwtdGV4dCc7XG4gICAgICAgIGlmIChwcmV2aW91c0lzSW5zaWRlVGV4dCA9PT0gaXNJbnNpZGVUZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgaXNJbnNpZGVUZXh0IH07XG4gICAgfSxcbiAgICBzaG91bGRTZXRUZXh0Q29udGVudDogKCkgPT4gZmFsc2UsXG4gICAgY3JlYXRlSW5zdGFuY2Uob3JpZ2luYWxUeXBlLCBuZXdQcm9wcywgX3Jvb3QsIGhvc3RDb250ZXh0KSB7XG4gICAgICAgIGlmIChob3N0Q29udGV4dC5pc0luc2lkZVRleHQgJiYgb3JpZ2luYWxUeXBlID09PSAnaW5rLWJveCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgPEJveD4gY2Fu4oCZdCBiZSBuZXN0ZWQgaW5zaWRlIDxUZXh0PiBjb21wb25lbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlID0gb3JpZ2luYWxUeXBlID09PSAnaW5rLXRleHQnICYmIGhvc3RDb250ZXh0LmlzSW5zaWRlVGV4dFxuICAgICAgICAgICAgPyAnaW5rLXZpcnR1YWwtdGV4dCdcbiAgICAgICAgICAgIDogb3JpZ2luYWxUeXBlO1xuICAgICAgICBjb25zdCBub2RlID0gY3JlYXRlTm9kZSh0eXBlKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3UHJvcHMpKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XG4gICAgICAgICAgICAgICAgc2V0U3R5bGUobm9kZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnlvZ2FOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3R5bGVzKG5vZGUueW9nYU5vZGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnaW50ZXJuYWxfdHJhbnNmb3JtJykge1xuICAgICAgICAgICAgICAgIG5vZGUuaW50ZXJuYWxfdHJhbnNmb3JtID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnaW50ZXJuYWxfc3RhdGljJykge1xuICAgICAgICAgICAgICAgIG5vZGUuaW50ZXJuYWxfc3RhdGljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZShub2RlLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuICAgIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCBfcm9vdCwgaG9zdENvbnRleHQpIHtcbiAgICAgICAgaWYgKCFob3N0Q29udGV4dC5pc0luc2lkZVRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGV4dCBzdHJpbmcgXCIke3RleHR9XCIgbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFRleHQ+IGNvbXBvbmVudGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICB9LFxuICAgIHJlc2V0VGV4dENvbnRlbnQoKSB7IH0sXG4gICAgaGlkZVRleHRJbnN0YW5jZShub2RlKSB7XG4gICAgICAgIHNldFRleHROb2RlVmFsdWUobm9kZSwgJycpO1xuICAgIH0sXG4gICAgdW5oaWRlVGV4dEluc3RhbmNlKG5vZGUsIHRleHQpIHtcbiAgICAgICAgc2V0VGV4dE5vZGVWYWx1ZShub2RlLCB0ZXh0KTtcbiAgICB9LFxuICAgIGdldFB1YmxpY0luc3RhbmNlOiBpbnN0YW5jZSA9PiBpbnN0YW5jZSxcbiAgICBoaWRlSW5zdGFuY2Uobm9kZSkge1xuICAgICAgICBub2RlLnlvZ2FOb2RlPy5zZXREaXNwbGF5KFlvZ2EuRElTUExBWV9OT05FKTtcbiAgICB9LFxuICAgIHVuaGlkZUluc3RhbmNlKG5vZGUpIHtcbiAgICAgICAgbm9kZS55b2dhTm9kZT8uc2V0RGlzcGxheShZb2dhLkRJU1BMQVlfRkxFWCk7XG4gICAgfSxcbiAgICBhcHBlbmRJbml0aWFsQ2hpbGQ6IGFwcGVuZENoaWxkTm9kZSxcbiAgICBhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGROb2RlLFxuICAgIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlTm9kZSxcbiAgICBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihub2RlLCBfdHlwZSwgX3Byb3BzLCByb290Tm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pbnRlcm5hbF9zdGF0aWMpIHtcbiAgICAgICAgICAgIHJvb3ROb2RlLmlzU3RhdGljRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gPFN0YXRpYz4gbm9kZSB0byBza2lwIHRyYXZlcnNhbCBvZiBlbnRpcmVcbiAgICAgICAgICAgIC8vIG5vZGUgdHJlZSB0byBmaW5kIGl0XG4gICAgICAgICAgICByb290Tm9kZS5zdGF0aWNOb2RlID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBpc1ByaW1hcnlSZW5kZXJlcjogdHJ1ZSxcbiAgICBzdXBwb3J0c011dGF0aW9uOiB0cnVlLFxuICAgIHN1cHBvcnRzUGVyc2lzdGVuY2U6IGZhbHNlLFxuICAgIHN1cHBvcnRzSHlkcmF0aW9uOiBmYWxzZSxcbiAgICBzY2hlZHVsZVRpbWVvdXQ6IHNldFRpbWVvdXQsXG4gICAgY2FuY2VsVGltZW91dDogY2xlYXJUaW1lb3V0LFxuICAgIG5vVGltZW91dDogLTEsXG4gICAgZ2V0Q3VycmVudEV2ZW50UHJpb3JpdHk6ICgpID0+IERlZmF1bHRFdmVudFByaW9yaXR5LFxuICAgIGJlZm9yZUFjdGl2ZUluc3RhbmNlQmx1cigpIHsgfSxcbiAgICBhZnRlckFjdGl2ZUluc3RhbmNlQmx1cigpIHsgfSxcbiAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2UoKSB7IH0sXG4gICAgZ2V0SW5zdGFuY2VGcm9tTm9kZTogKCkgPT4gbnVsbCxcbiAgICBwcmVwYXJlU2NvcGVVcGRhdGUoKSB7IH0sXG4gICAgZ2V0SW5zdGFuY2VGcm9tU2NvcGU6ICgpID0+IG51bGwsXG4gICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcjogYXBwZW5kQ2hpbGROb2RlLFxuICAgIGluc2VydEluQ29udGFpbmVyQmVmb3JlOiBpbnNlcnRCZWZvcmVOb2RlLFxuICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihub2RlLCByZW1vdmVOb2RlKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkTm9kZShub2RlLCByZW1vdmVOb2RlKTtcbiAgICAgICAgY2xlYW51cFlvZ2FOb2RlKHJlbW92ZU5vZGUueW9nYU5vZGUpO1xuICAgIH0sXG4gICAgcHJlcGFyZVVwZGF0ZShub2RlLCBfdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Tm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pbnRlcm5hbF9zdGF0aWMpIHtcbiAgICAgICAgICAgIHJvb3ROb2RlLmlzU3RhdGljRGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGlmZihvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICBjb25zdCBzdHlsZSA9IGRpZmYob2xkUHJvcHNbJ3N0eWxlJ10sIG5ld1Byb3BzWydzdHlsZSddKTtcbiAgICAgICAgaWYgKCFwcm9wcyAmJiAhc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHByb3BzLCBzdHlsZSB9O1xuICAgIH0sXG4gICAgY29tbWl0VXBkYXRlKG5vZGUsIHsgcHJvcHMsIHN0eWxlIH0pIHtcbiAgICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFN0eWxlKG5vZGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdpbnRlcm5hbF90cmFuc2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaW50ZXJuYWxfdHJhbnNmb3JtID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnaW50ZXJuYWxfc3RhdGljJykge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmludGVybmFsX3N0YXRpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGUobm9kZSwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlICYmIG5vZGUueW9nYU5vZGUpIHtcbiAgICAgICAgICAgIGFwcGx5U3R5bGVzKG5vZGUueW9nYU5vZGUsIHN0eWxlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY29tbWl0VGV4dFVwZGF0ZShub2RlLCBfb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgICAgICBzZXRUZXh0Tm9kZVZhbHVlKG5vZGUsIG5ld1RleHQpO1xuICAgIH0sXG4gICAgcmVtb3ZlQ2hpbGQobm9kZSwgcmVtb3ZlTm9kZSkge1xuICAgICAgICByZW1vdmVDaGlsZE5vZGUobm9kZSwgcmVtb3ZlTm9kZSk7XG4gICAgICAgIGNsZWFudXBZb2dhTm9kZShyZW1vdmVOb2RlLnlvZ2FOb2RlKTtcbiAgICB9LFxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWNvbmNpbGVyLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtcmVjb25jaWxlci1jb25zdGFudHMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO2V4cG9ydHMuQ29uY3VycmVudFJvb3Q9MTtleHBvcnRzLkNvbnRpbnVvdXNFdmVudFByaW9yaXR5PTQ7ZXhwb3J0cy5EZWZhdWx0RXZlbnRQcmlvcml0eT0xNjtleHBvcnRzLkRpc2NyZXRlRXZlbnRQcmlvcml0eT0xO2V4cG9ydHMuSWRsZUV2ZW50UHJpb3JpdHk9NTM2ODcwOTEyO2V4cG9ydHMuTGVnYWN5Um9vdD0wO1xuIiwKICAgICJ2YXIgWUdFbnVtcz17fSxBTElHTl9BVVRPPVlHRW51bXMuQUxJR05fQVVUTz0wLEFMSUdOX0ZMRVhfU1RBUlQ9WUdFbnVtcy5BTElHTl9GTEVYX1NUQVJUPTEsQUxJR05fQ0VOVEVSPVlHRW51bXMuQUxJR05fQ0VOVEVSPTIsQUxJR05fRkxFWF9FTkQ9WUdFbnVtcy5BTElHTl9GTEVYX0VORD0zLEFMSUdOX1NUUkVUQ0g9WUdFbnVtcy5BTElHTl9TVFJFVENIPTQsQUxJR05fQkFTRUxJTkU9WUdFbnVtcy5BTElHTl9CQVNFTElORT01LEFMSUdOX1NQQUNFX0JFVFdFRU49WUdFbnVtcy5BTElHTl9TUEFDRV9CRVRXRUVOPTYsQUxJR05fU1BBQ0VfQVJPVU5EPVlHRW51bXMuQUxJR05fU1BBQ0VfQVJPVU5EPTcsRElNRU5TSU9OX1dJRFRIPVlHRW51bXMuRElNRU5TSU9OX1dJRFRIPTAsRElNRU5TSU9OX0hFSUdIVD1ZR0VudW1zLkRJTUVOU0lPTl9IRUlHSFQ9MSxESVJFQ1RJT05fSU5IRVJJVD1ZR0VudW1zLkRJUkVDVElPTl9JTkhFUklUPTAsRElSRUNUSU9OX0xUUj1ZR0VudW1zLkRJUkVDVElPTl9MVFI9MSxESVJFQ1RJT05fUlRMPVlHRW51bXMuRElSRUNUSU9OX1JUTD0yLERJU1BMQVlfRkxFWD1ZR0VudW1zLkRJU1BMQVlfRkxFWD0wLERJU1BMQVlfTk9ORT1ZR0VudW1zLkRJU1BMQVlfTk9ORT0xLEVER0VfTEVGVD1ZR0VudW1zLkVER0VfTEVGVD0wLEVER0VfVE9QPVlHRW51bXMuRURHRV9UT1A9MSxFREdFX1JJR0hUPVlHRW51bXMuRURHRV9SSUdIVD0yLEVER0VfQk9UVE9NPVlHRW51bXMuRURHRV9CT1RUT009MyxFREdFX1NUQVJUPVlHRW51bXMuRURHRV9TVEFSVD00LEVER0VfRU5EPVlHRW51bXMuRURHRV9FTkQ9NSxFREdFX0hPUklaT05UQUw9WUdFbnVtcy5FREdFX0hPUklaT05UQUw9NixFREdFX1ZFUlRJQ0FMPVlHRW51bXMuRURHRV9WRVJUSUNBTD03LEVER0VfQUxMPVlHRW51bXMuRURHRV9BTEw9OCxFWFBFUklNRU5UQUxfRkVBVFVSRV9XRUJfRkxFWF9CQVNJUz1ZR0VudW1zLkVYUEVSSU1FTlRBTF9GRUFUVVJFX1dFQl9GTEVYX0JBU0lTPTAsRVhQRVJJTUVOVEFMX0ZFQVRVUkVfQUJTT0xVVEVfUEVSQ0VOVEFHRV9BR0FJTlNUX1BBRERJTkdfRURHRT1ZR0VudW1zLkVYUEVSSU1FTlRBTF9GRUFUVVJFX0FCU09MVVRFX1BFUkNFTlRBR0VfQUdBSU5TVF9QQURESU5HX0VER0U9MSxFWFBFUklNRU5UQUxfRkVBVFVSRV9GSVhfQUJTT0xVVEVfVFJBSUxJTkdfQ09MVU1OX01BUkdJTj1ZR0VudW1zLkVYUEVSSU1FTlRBTF9GRUFUVVJFX0ZJWF9BQlNPTFVURV9UUkFJTElOR19DT0xVTU5fTUFSR0lOPTIsRkxFWF9ESVJFQ1RJT05fQ09MVU1OPVlHRW51bXMuRkxFWF9ESVJFQ1RJT05fQ09MVU1OPTAsRkxFWF9ESVJFQ1RJT05fQ09MVU1OX1JFVkVSU0U9WUdFbnVtcy5GTEVYX0RJUkVDVElPTl9DT0xVTU5fUkVWRVJTRT0xLEZMRVhfRElSRUNUSU9OX1JPVz1ZR0VudW1zLkZMRVhfRElSRUNUSU9OX1JPVz0yLEZMRVhfRElSRUNUSU9OX1JPV19SRVZFUlNFPVlHRW51bXMuRkxFWF9ESVJFQ1RJT05fUk9XX1JFVkVSU0U9MyxHVVRURVJfQ09MVU1OPVlHRW51bXMuR1VUVEVSX0NPTFVNTj0wLEdVVFRFUl9ST1c9WUdFbnVtcy5HVVRURVJfUk9XPTEsR1VUVEVSX0FMTD1ZR0VudW1zLkdVVFRFUl9BTEw9MixKVVNUSUZZX0ZMRVhfU1RBUlQ9WUdFbnVtcy5KVVNUSUZZX0ZMRVhfU1RBUlQ9MCxKVVNUSUZZX0NFTlRFUj1ZR0VudW1zLkpVU1RJRllfQ0VOVEVSPTEsSlVTVElGWV9GTEVYX0VORD1ZR0VudW1zLkpVU1RJRllfRkxFWF9FTkQ9MixKVVNUSUZZX1NQQUNFX0JFVFdFRU49WUdFbnVtcy5KVVNUSUZZX1NQQUNFX0JFVFdFRU49MyxKVVNUSUZZX1NQQUNFX0FST1VORD1ZR0VudW1zLkpVU1RJRllfU1BBQ0VfQVJPVU5EPTQsSlVTVElGWV9TUEFDRV9FVkVOTFk9WUdFbnVtcy5KVVNUSUZZX1NQQUNFX0VWRU5MWT01LExPR19MRVZFTF9FUlJPUj1ZR0VudW1zLkxPR19MRVZFTF9FUlJPUj0wLExPR19MRVZFTF9XQVJOPVlHRW51bXMuTE9HX0xFVkVMX1dBUk49MSxMT0dfTEVWRUxfSU5GTz1ZR0VudW1zLkxPR19MRVZFTF9JTkZPPTIsTE9HX0xFVkVMX0RFQlVHPVlHRW51bXMuTE9HX0xFVkVMX0RFQlVHPTMsTE9HX0xFVkVMX1ZFUkJPU0U9WUdFbnVtcy5MT0dfTEVWRUxfVkVSQk9TRT00LExPR19MRVZFTF9GQVRBTD1ZR0VudW1zLkxPR19MRVZFTF9GQVRBTD01LE1FQVNVUkVfTU9ERV9VTkRFRklORUQ9WUdFbnVtcy5NRUFTVVJFX01PREVfVU5ERUZJTkVEPTAsTUVBU1VSRV9NT0RFX0VYQUNUTFk9WUdFbnVtcy5NRUFTVVJFX01PREVfRVhBQ1RMWT0xLE1FQVNVUkVfTU9ERV9BVF9NT1NUPVlHRW51bXMuTUVBU1VSRV9NT0RFX0FUX01PU1Q9MixOT0RFX1RZUEVfREVGQVVMVD1ZR0VudW1zLk5PREVfVFlQRV9ERUZBVUxUPTAsTk9ERV9UWVBFX1RFWFQ9WUdFbnVtcy5OT0RFX1RZUEVfVEVYVD0xLE9WRVJGTE9XX1ZJU0lCTEU9WUdFbnVtcy5PVkVSRkxPV19WSVNJQkxFPTAsT1ZFUkZMT1dfSElEREVOPVlHRW51bXMuT1ZFUkZMT1dfSElEREVOPTEsT1ZFUkZMT1dfU0NST0xMPVlHRW51bXMuT1ZFUkZMT1dfU0NST0xMPTIsUE9TSVRJT05fVFlQRV9TVEFUSUM9WUdFbnVtcy5QT1NJVElPTl9UWVBFX1NUQVRJQz0wLFBPU0lUSU9OX1RZUEVfUkVMQVRJVkU9WUdFbnVtcy5QT1NJVElPTl9UWVBFX1JFTEFUSVZFPTEsUE9TSVRJT05fVFlQRV9BQlNPTFVURT1ZR0VudW1zLlBPU0lUSU9OX1RZUEVfQUJTT0xVVEU9MixQUklOVF9PUFRJT05TX0xBWU9VVD1ZR0VudW1zLlBSSU5UX09QVElPTlNfTEFZT1VUPTEsUFJJTlRfT1BUSU9OU19TVFlMRT1ZR0VudW1zLlBSSU5UX09QVElPTlNfU1RZTEU9MixQUklOVF9PUFRJT05TX0NISUxEUkVOPVlHRW51bXMuUFJJTlRfT1BUSU9OU19DSElMRFJFTj00LFVOSVRfVU5ERUZJTkVEPVlHRW51bXMuVU5JVF9VTkRFRklORUQ9MCxVTklUX1BPSU5UPVlHRW51bXMuVU5JVF9QT0lOVD0xLFVOSVRfUEVSQ0VOVD1ZR0VudW1zLlVOSVRfUEVSQ0VOVD0yLFVOSVRfQVVUTz1ZR0VudW1zLlVOSVRfQVVUTz0zLFdSQVBfTk9fV1JBUD1ZR0VudW1zLldSQVBfTk9fV1JBUD0wLFdSQVBfV1JBUD1ZR0VudW1zLldSQVBfV1JBUD0xLFdSQVBfV1JBUF9SRVZFUlNFPVlHRW51bXMuV1JBUF9XUkFQX1JFVkVSU0U9MjtsZXQgQ09OU1RBTlRTPVlHRW51bXM7dmFyIHdyYXBBc209RT0+e2Z1bmN0aW9uIF8oRSxfLFQpe2xldCBOPUVbX107RVtfXT1mdW5jdGlvbiguLi5FKXtyZXR1cm4gVC5jYWxsKHRoaXMsTiwuLi5FKX19Zm9yKGxldCBUIG9mW1wic2V0UG9zaXRpb25cIixcInNldE1hcmdpblwiLFwic2V0RmxleEJhc2lzXCIsXCJzZXRXaWR0aFwiLFwic2V0SGVpZ2h0XCIsXCJzZXRNaW5XaWR0aFwiLFwic2V0TWluSGVpZ2h0XCIsXCJzZXRNYXhXaWR0aFwiLFwic2V0TWF4SGVpZ2h0XCIsXCJzZXRQYWRkaW5nXCJdKXtsZXQgTj17W1lHRW51bXMuVU5JVF9QT0lOVF06RS5Ob2RlLnByb3RvdHlwZVtUXSxbWUdFbnVtcy5VTklUX1BFUkNFTlRdOkUuTm9kZS5wcm90b3R5cGVbYCR7VH1QZXJjZW50YF0sW1lHRW51bXMuVU5JVF9BVVRPXTpFLk5vZGUucHJvdG90eXBlW2Ake1R9QXV0b2BdfTtfKEUuTm9kZS5wcm90b3R5cGUsVCxmdW5jdGlvbihFLC4uLl8pe2xldCBJLEw7bGV0IE89Xy5wb3AoKTtpZihcImF1dG9cIj09PU8pST1ZR0VudW1zLlVOSVRfQVVUTyxMPXZvaWQgMDtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBPKUk9Ty51bml0LEw9Ty52YWx1ZU9mKCk7ZWxzZSBpZihJPVwic3RyaW5nXCI9PXR5cGVvZiBPJiZPLmVuZHNXaXRoKFwiJVwiKT9ZR0VudW1zLlVOSVRfUEVSQ0VOVDpZR0VudW1zLlVOSVRfUE9JTlQsTD1wYXJzZUZsb2F0KE8pLCFOdW1iZXIuaXNOYU4oTykmJk51bWJlci5pc05hTihMKSl0aHJvdyBFcnJvcihgSW52YWxpZCB2YWx1ZSAke099IGZvciAke1R9YCk7aWYoIU5bSV0pdGhyb3cgRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlIFwiJHtUfVwiOiBVbnN1cHBvcnRlZCB1bml0ICcke099J2ApO3JldHVybiB2b2lkIDAhPT1MP05bSV0uY2FsbCh0aGlzLC4uLl8sTCk6TltJXS5jYWxsKHRoaXMsLi4uXyl9KX1mdW5jdGlvbiBUKF8pe3JldHVybiBFLk1lYXN1cmVDYWxsYmFjay5pbXBsZW1lbnQoe21lYXN1cmU6KC4uLkUpPT57bGV0e3dpZHRoOlQsaGVpZ2h0Ok59PV8oLi4uRSk7cmV0dXJue3dpZHRoOlQ/P05hTixoZWlnaHQ6Tj8/TmFOfX19KX1mdW5jdGlvbiBOKF8pe3JldHVybiBFLkRpcnRpZWRDYWxsYmFjay5pbXBsZW1lbnQoe2RpcnRpZWQ6X30pfXJldHVybiBfKEUuTm9kZS5wcm90b3R5cGUsXCJzZXRNZWFzdXJlRnVuY1wiLGZ1bmN0aW9uKEUsXyl7cmV0dXJuIF8/RS5jYWxsKHRoaXMsVChfKSk6dGhpcy51bnNldE1lYXN1cmVGdW5jKCl9KSxfKEUuTm9kZS5wcm90b3R5cGUsXCJzZXREaXJ0aWVkRnVuY1wiLGZ1bmN0aW9uKEUsXyl7RS5jYWxsKHRoaXMsTihfKSl9KSxfKEUuQ29uZmlnLnByb3RvdHlwZSxcImZyZWVcIixmdW5jdGlvbigpe0UuQ29uZmlnLmRlc3Ryb3kodGhpcyl9KSxfKEUuTm9kZSxcImNyZWF0ZVwiLChfLFQpPT5UP0UuTm9kZS5jcmVhdGVXaXRoQ29uZmlnKFQpOkUuTm9kZS5jcmVhdGVEZWZhdWx0KCkpLF8oRS5Ob2RlLnByb3RvdHlwZSxcImZyZWVcIixmdW5jdGlvbigpe0UuTm9kZS5kZXN0cm95KHRoaXMpfSksXyhFLk5vZGUucHJvdG90eXBlLFwiZnJlZVJlY3Vyc2l2ZVwiLGZ1bmN0aW9uKCl7Zm9yKGxldCBFPTAsXz10aGlzLmdldENoaWxkQ291bnQoKTtFPF87KytFKXRoaXMuZ2V0Q2hpbGQoMCkuZnJlZVJlY3Vyc2l2ZSgpO3RoaXMuZnJlZSgpfSksXyhFLk5vZGUucHJvdG90eXBlLFwiY2FsY3VsYXRlTGF5b3V0XCIsZnVuY3Rpb24oRSxfPU5hTixUPU5hTixOPVlHRW51bXMuRElSRUNUSU9OX0xUUil7cmV0dXJuIEUuY2FsbCh0aGlzLF8sVCxOKX0pLHtDb25maWc6RS5Db25maWcsTm9kZTpFLk5vZGUsLi4uWUdFbnVtc319O2V4cG9ydHtPVkVSRkxPV19ISURERU4gYXMgJCxBTElHTl9BVVRPIGFzIEEsRkxFWF9ESVJFQ1RJT05fUk9XIGFzIEIsRkxFWF9ESVJFQ1RJT05fUk9XX1JFVkVSU0UgYXMgQyxESU1FTlNJT05fV0lEVEggYXMgRCxFREdFX0xFRlQgYXMgRSxGTEVYX0RJUkVDVElPTl9DT0xVTU4gYXMgRixHVVRURVJfQ09MVU1OIGFzIEcsR1VUVEVSX1JPVyBhcyBILEdVVFRFUl9BTEwgYXMgSSxKVVNUSUZZX0ZMRVhfU1RBUlQgYXMgSixKVVNUSUZZX0NFTlRFUiBhcyBLLEpVU1RJRllfRkxFWF9FTkQgYXMgTCxKVVNUSUZZX1NQQUNFX0JFVFdFRU4gYXMgTSxKVVNUSUZZX1NQQUNFX0FST1VORCBhcyBOLEpVU1RJRllfU1BBQ0VfRVZFTkxZIGFzIE8sTE9HX0xFVkVMX0VSUk9SIGFzIFAsTE9HX0xFVkVMX1dBUk4gYXMgUSxMT0dfTEVWRUxfSU5GTyBhcyBSLExPR19MRVZFTF9ERUJVRyBhcyBTLExPR19MRVZFTF9WRVJCT1NFIGFzIFQsTE9HX0xFVkVMX0ZBVEFMIGFzIFUsTUVBU1VSRV9NT0RFX1VOREVGSU5FRCBhcyBWLE1FQVNVUkVfTU9ERV9FWEFDVExZIGFzIFcsTUVBU1VSRV9NT0RFX0FUX01PU1QgYXMgWCxOT0RFX1RZUEVfREVGQVVMVCBhcyBZLE5PREVfVFlQRV9URVhUIGFzIFosT1ZFUkZMT1dfVklTSUJMRSBhcyBfLEFMSUdOX0ZMRVhfU1RBUlQgYXMgYSxPVkVSRkxPV19TQ1JPTEwgYXMgYTAsUE9TSVRJT05fVFlQRV9TVEFUSUMgYXMgYTEsUE9TSVRJT05fVFlQRV9SRUxBVElWRSBhcyBhMixQT1NJVElPTl9UWVBFX0FCU09MVVRFIGFzIGEzLFBSSU5UX09QVElPTlNfTEFZT1VUIGFzIGE0LFBSSU5UX09QVElPTlNfU1RZTEUgYXMgYTUsUFJJTlRfT1BUSU9OU19DSElMRFJFTiBhcyBhNixVTklUX1VOREVGSU5FRCBhcyBhNyxVTklUX1BPSU5UIGFzIGE4LFVOSVRfUEVSQ0VOVCBhcyBhOSxVTklUX0FVVE8gYXMgYWEsV1JBUF9OT19XUkFQIGFzIGFiLFdSQVBfV1JBUCBhcyBhYyxXUkFQX1dSQVBfUkVWRVJTRSBhcyBhZCxBTElHTl9DRU5URVIgYXMgYixBTElHTl9GTEVYX0VORCBhcyBjLEFMSUdOX1NUUkVUQ0ggYXMgZCxBTElHTl9CQVNFTElORSBhcyBlLEFMSUdOX1NQQUNFX0JFVFdFRU4gYXMgZixBTElHTl9TUEFDRV9BUk9VTkQgYXMgZyxESU1FTlNJT05fSEVJR0hUIGFzIGgsRElSRUNUSU9OX0lOSEVSSVQgYXMgaSxESVJFQ1RJT05fTFRSIGFzIGosRElSRUNUSU9OX1JUTCBhcyBrLERJU1BMQVlfRkxFWCBhcyBsLERJU1BMQVlfTk9ORSBhcyBtLEVER0VfVE9QIGFzIG4sRURHRV9SSUdIVCBhcyBvLEVER0VfQk9UVE9NIGFzIHAsRURHRV9TVEFSVCBhcyBxLEVER0VfRU5EIGFzIHIsRURHRV9IT1JJWk9OVEFMIGFzIHMsRURHRV9WRVJUSUNBTCBhcyB0LEVER0VfQUxMIGFzIHUsRVhQRVJJTUVOVEFMX0ZFQVRVUkVfV0VCX0ZMRVhfQkFTSVMgYXMgdix3cmFwQXNtIGFzIHcsRVhQRVJJTUVOVEFMX0ZFQVRVUkVfQUJTT0xVVEVfUEVSQ0VOVEFHRV9BR0FJTlNUX1BBRERJTkdfRURHRSBhcyB4LEVYUEVSSU1FTlRBTF9GRUFUVVJFX0ZJWF9BQlNPTFVURV9UUkFJTElOR19DT0xVTU5fTUFSR0lOIGFzIHksRkxFWF9ESVJFQ1RJT05fQ09MVU1OX1JFVkVSU0UgYXMgen07XG4iLAogICAgImltcG9ydHt3IGFzIG59ZnJvbVwiLi93cmFwQXNtLWY3NjZmOTdmLmpzXCI7ZXhwb3J0e0EgYXMgQUxJR05fQVVUTyxlIGFzIEFMSUdOX0JBU0VMSU5FLGIgYXMgQUxJR05fQ0VOVEVSLGMgYXMgQUxJR05fRkxFWF9FTkQsYSBhcyBBTElHTl9GTEVYX1NUQVJULGcgYXMgQUxJR05fU1BBQ0VfQVJPVU5ELGYgYXMgQUxJR05fU1BBQ0VfQkVUV0VFTixkIGFzIEFMSUdOX1NUUkVUQ0gsaCBhcyBESU1FTlNJT05fSEVJR0hULEQgYXMgRElNRU5TSU9OX1dJRFRILGkgYXMgRElSRUNUSU9OX0lOSEVSSVQsaiBhcyBESVJFQ1RJT05fTFRSLGsgYXMgRElSRUNUSU9OX1JUTCxsIGFzIERJU1BMQVlfRkxFWCxtIGFzIERJU1BMQVlfTk9ORSx1IGFzIEVER0VfQUxMLHAgYXMgRURHRV9CT1RUT00sciBhcyBFREdFX0VORCxzIGFzIEVER0VfSE9SSVpPTlRBTCxFIGFzIEVER0VfTEVGVCxvIGFzIEVER0VfUklHSFQscSBhcyBFREdFX1NUQVJULG4gYXMgRURHRV9UT1AsdCBhcyBFREdFX1ZFUlRJQ0FMLHggYXMgRVhQRVJJTUVOVEFMX0ZFQVRVUkVfQUJTT0xVVEVfUEVSQ0VOVEFHRV9BR0FJTlNUX1BBRERJTkdfRURHRSx5IGFzIEVYUEVSSU1FTlRBTF9GRUFUVVJFX0ZJWF9BQlNPTFVURV9UUkFJTElOR19DT0xVTU5fTUFSR0lOLHYgYXMgRVhQRVJJTUVOVEFMX0ZFQVRVUkVfV0VCX0ZMRVhfQkFTSVMsRiBhcyBGTEVYX0RJUkVDVElPTl9DT0xVTU4seiBhcyBGTEVYX0RJUkVDVElPTl9DT0xVTU5fUkVWRVJTRSxCIGFzIEZMRVhfRElSRUNUSU9OX1JPVyxDIGFzIEZMRVhfRElSRUNUSU9OX1JPV19SRVZFUlNFLEkgYXMgR1VUVEVSX0FMTCxHIGFzIEdVVFRFUl9DT0xVTU4sSCBhcyBHVVRURVJfUk9XLEsgYXMgSlVTVElGWV9DRU5URVIsTCBhcyBKVVNUSUZZX0ZMRVhfRU5ELEogYXMgSlVTVElGWV9GTEVYX1NUQVJULE4gYXMgSlVTVElGWV9TUEFDRV9BUk9VTkQsTSBhcyBKVVNUSUZZX1NQQUNFX0JFVFdFRU4sTyBhcyBKVVNUSUZZX1NQQUNFX0VWRU5MWSxTIGFzIExPR19MRVZFTF9ERUJVRyxQIGFzIExPR19MRVZFTF9FUlJPUixVIGFzIExPR19MRVZFTF9GQVRBTCxSIGFzIExPR19MRVZFTF9JTkZPLFQgYXMgTE9HX0xFVkVMX1ZFUkJPU0UsUSBhcyBMT0dfTEVWRUxfV0FSTixYIGFzIE1FQVNVUkVfTU9ERV9BVF9NT1NULFcgYXMgTUVBU1VSRV9NT0RFX0VYQUNUTFksViBhcyBNRUFTVVJFX01PREVfVU5ERUZJTkVELFkgYXMgTk9ERV9UWVBFX0RFRkFVTFQsWiBhcyBOT0RFX1RZUEVfVEVYVCwkIGFzIE9WRVJGTE9XX0hJRERFTixhMCBhcyBPVkVSRkxPV19TQ1JPTEwsXyBhcyBPVkVSRkxPV19WSVNJQkxFLGEzIGFzIFBPU0lUSU9OX1RZUEVfQUJTT0xVVEUsYTIgYXMgUE9TSVRJT05fVFlQRV9SRUxBVElWRSxhMSBhcyBQT1NJVElPTl9UWVBFX1NUQVRJQyxhNiBhcyBQUklOVF9PUFRJT05TX0NISUxEUkVOLGE0IGFzIFBSSU5UX09QVElPTlNfTEFZT1VULGE1IGFzIFBSSU5UX09QVElPTlNfU1RZTEUsYWEgYXMgVU5JVF9BVVRPLGE5IGFzIFVOSVRfUEVSQ0VOVCxhOCBhcyBVTklUX1BPSU5ULGE3IGFzIFVOSVRfVU5ERUZJTkVELGFiIGFzIFdSQVBfTk9fV1JBUCxhYyBhcyBXUkFQX1dSQVAsYWQgYXMgV1JBUF9XUkFQX1JFVkVSU0V9ZnJvbVwiLi93cmFwQXNtLWY3NjZmOTdmLmpzXCI7dmFyIHlvZ2E9KCgpPT57dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24odD17fSl7dXx8KHU9dm9pZCAwIT09dD90Ont9KSx1LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sdCl7Yz1uLGY9dH0pO3ZhciByLGUsYT1PYmplY3QuYXNzaWduKHt9LHUpLGk9XCJcIjtcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihpPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxuJiYoaT1uKSxpPTAhPT1pLmluZGV4T2YoXCJibG9iOlwiKT9pLnN1YnN0cigwLGkucmVwbGFjZSgvWz8jXS4qLyxcIlwiKS5sYXN0SW5kZXhPZihcIi9cIikrMSk6XCJcIjt2YXIgbz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHM9Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbih1LGEpLGE9bnVsbCxcIm9iamVjdFwiIT10eXBlb2YgV2ViQXNzZW1ibHkmJncoXCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkXCIpO3ZhciB1LGMsZixsLGg9ITE7ZnVuY3Rpb24gcChuLHQscil7cj10K3I7Zm9yKHZhciBlPVwiXCI7ISh0Pj1yKTspe3ZhciBhPW5bdCsrXTtpZighYSlicmVhaztpZigxMjgmYSl7dmFyIGk9NjMmblt0KytdO2lmKDE5Mj09KDIyNCZhKSllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZhKTw8NnxpKTtlbHNle3ZhciBvPTYzJm5bdCsrXTs2NTUzNj4oYT0yMjQ9PSgyNDAmYSk/KDE1JmEpPDwxMnxpPDw2fG86KDcmYSk8PDE4fGk8PDEyfG88PDZ8NjMmblt0KytdKT9lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpOihhLT02NTUzNixlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGE+PjEwLDU2MzIwfDEwMjMmYSkpfX1lbHNlIGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSl9cmV0dXJuIGV9ZnVuY3Rpb24gdigpe3ZhciBuPWwuYnVmZmVyO3UuSEVBUDg9ZD1uZXcgSW50OEFycmF5KG4pLHUuSEVBUDE2PW09bmV3IEludDE2QXJyYXkobiksdS5IRUFQMzI9Zz1uZXcgSW50MzJBcnJheShuKSx1LkhFQVBVOD15PW5ldyBVaW50OEFycmF5KG4pLHUuSEVBUFUxNj1FPW5ldyBVaW50MTZBcnJheShuKSx1LkhFQVBVMzI9Xz1uZXcgVWludDMyQXJyYXkobiksdS5IRUFQRjMyPVQ9bmV3IEZsb2F0MzJBcnJheShuKSx1LkhFQVBGNjQ9TD1uZXcgRmxvYXQ2NEFycmF5KG4pfXZhciBkLHksbSxFLGcsXyxULEwsQSxPPVtdLFA9W10sYj1bXSxOPTAsST1udWxsO2Z1bmN0aW9uIHcobil7dGhyb3cgcyhuPVwiQWJvcnRlZChcIituK1wiKVwiKSxoPSEwLGYobj1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKG4rXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCIpKSxufWZ1bmN0aW9uIFMoKXtyZXR1cm4gci5zdGFydHNXaXRoKFwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LFwiKX1mdW5jdGlvbiBSKCl7dHJ5e3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwifWNhdGNoKG4pe3cobil9fWZ1bmN0aW9uIEMobil7Zm9yKDswPG4ubGVuZ3RoOyluLnNoaWZ0KCkodSl9ZnVuY3Rpb24gVyhuKXtpZih2b2lkIDA9PT1uKXJldHVyblwiX3Vua25vd25cIjt2YXIgdD0obj1uLnJlcGxhY2UoL1teYS16QS1aMC05X10vZyxcIiRcIikpLmNoYXJDb2RlQXQoMCk7cmV0dXJuIDQ4PD10JiY1Nz49dD9cIl9cIituOm59ZnVuY3Rpb24gVShuLHQpe3JldHVybiBuPVcobiksZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXI9XCJ5b2dhLndhc21cIixTKCl8fChyPWkrcik7dmFyIE09W3t9LHt2YWx1ZTp2b2lkIDB9LHt2YWx1ZTpudWxsfSx7dmFsdWU6ITB9LHt2YWx1ZTohMX1dLEY9W107ZnVuY3Rpb24gRChuKXt2YXIgdD1FcnJvcixyPVUobixmdW5jdGlvbih0KXt0aGlzLm5hbWU9bix0aGlzLm1lc3NhZ2U9dCx2b2lkIDAhPT0odD1FcnJvcih0KS5zdGFjaykmJih0aGlzLnN0YWNrPXRoaXMudG9TdHJpbmcoKStcIlxcblwiK3QucmVwbGFjZSgvXkVycm9yKDpbXlxcbl0qKT9cXG4vLFwiXCIpKX0pO3JldHVybiByLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMubWVzc2FnZT90aGlzLm5hbWU6dGhpcy5uYW1lK1wiOiBcIit0aGlzLm1lc3NhZ2V9LHJ9dmFyIGs9dm9pZCAwO2Z1bmN0aW9uIFYobil7dGhyb3cgbmV3IGsobil9dmFyIGo9bj0+KG58fFYoXCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSBcIituKSxNW25dLnZhbHVlKSxHPW49Pntzd2l0Y2gobil7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSBudWxsOnJldHVybiAyO2Nhc2UhMDpyZXR1cm4gMztjYXNlITE6cmV0dXJuIDQ7ZGVmYXVsdDp2YXIgdD1GLmxlbmd0aD9GLnBvcCgpOk0ubGVuZ3RoO3JldHVybiBNW3RdPXtmYToxLHZhbHVlOm59LHR9fSxZPXZvaWQgMCxYPXZvaWQgMDtmdW5jdGlvbiBCKG4pe2Zvcih2YXIgdD1cIlwiO3lbbl07KXQrPVhbeVtuKytdXTtyZXR1cm4gdH12YXIgSD1bXTtmdW5jdGlvbiB4KCl7Zm9yKDtILmxlbmd0aDspe3ZhciBuPUgucG9wKCk7bi5MLlo9ITEsbi5kZWxldGUoKX19dmFyIHo9dm9pZCAwLCQ9e307ZnVuY3Rpb24gWihuLHQpe2Zvcih2b2lkIDA9PT10JiZWKFwicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkXCIpO24uUDspdD1uLmFhKHQpLG49bi5QO3JldHVybiB0fXZhciBKPXt9O2Z1bmN0aW9uIHEobil7dmFyIHQ9QihuPW56KG4pKTtyZXR1cm4gbloobiksdH1mdW5jdGlvbiBLKG4sdCl7dmFyIHI9SltuXTtyZXR1cm4gdm9pZCAwPT09ciYmVih0K1wiIGhhcyB1bmtub3duIHR5cGUgXCIrcShuKSkscn1mdW5jdGlvbiBRKCl7fXZhciBubj0hMTtmdW5jdGlvbiBudChuKXstLW4uY291bnQudmFsdWUsMD09PW4uY291bnQudmFsdWUmJihuLlM/bi5ULlYobi5TKTpuLk8uTS5WKG4uTikpfXZhciBucj17fSxuZT12b2lkIDA7ZnVuY3Rpb24gbmEobil7dGhyb3cgbmV3IG5lKG4pfWZ1bmN0aW9uIG5pKG4sdCl7cmV0dXJuIHQuTyYmdC5OfHxuYShcIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGVcIiksISF0LlQhPSEhdC5TJiZuYShcIkJvdGggc21hcnRQdHJUeXBlIGFuZCBzbWFydFB0ciBtdXN0IGJlIHNwZWNpZmllZFwiKSx0LmNvdW50PXt2YWx1ZToxfSxubyhPYmplY3QuY3JlYXRlKG4se0w6e3ZhbHVlOnR9fSkpfWZ1bmN0aW9uIG5vKG4pe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT8obm89bj0+bixuKToobm49bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KG49PntudChuLkwpfSksbm89bj0+e3ZhciB0PW4uTDtyZXR1cm4gdC5TJiZubi5yZWdpc3RlcihuLHtMOnR9LG4pLG59LFE9bj0+e25uLnVucmVnaXN0ZXIobil9LG5vKG4pKX12YXIgbnM9e307ZnVuY3Rpb24gbnUobil7Zm9yKDtuLmxlbmd0aDspe3ZhciB0PW4ucG9wKCk7bi5wb3AoKSh0KX19ZnVuY3Rpb24gbmMobil7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGdbbj4+Ml0pfXZhciBuZj17fSxubD17fTtmdW5jdGlvbiBuaChuLHQscil7ZnVuY3Rpb24gZSh0KXsodD1yKHQpKS5sZW5ndGghPT1uLmxlbmd0aCYmbmEoXCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50XCIpO2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7KytlKW52KG5bZV0sdFtlXSl9bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe25sW25dPXR9KTt2YXIgYT1BcnJheSh0Lmxlbmd0aCksaT1bXSxvPTA7dC5mb3JFYWNoKChuLHQpPT57Si5oYXNPd25Qcm9wZXJ0eShuKT9hW3RdPUpbbl06KGkucHVzaChuKSxuZi5oYXNPd25Qcm9wZXJ0eShuKXx8KG5mW25dPVtdKSxuZltuXS5wdXNoKCgpPT57YVt0XT1KW25dLCsrbz09PWkubGVuZ3RoJiZlKGEpfSkpfSksMD09PWkubGVuZ3RoJiZlKGEpfWZ1bmN0aW9uIG5wKG4pe3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiAxO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDg6cmV0dXJuIDM7ZGVmYXVsdDp0aHJvdyBUeXBlRXJyb3IoXCJVbmtub3duIHR5cGUgc2l6ZTogXCIrbil9fWZ1bmN0aW9uIG52KG4sdCxyPXt9KXtpZighKFwiYXJnUGFja0FkdmFuY2VcImluIHQpKXRocm93IFR5cGVFcnJvcihcInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2VcIik7dmFyIGU9dC5uYW1lO2lmKG58fFYoJ3R5cGUgXCInK2UrJ1wiIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGludGVnZXIgdHlwZWlkIHBvaW50ZXInKSxKLmhhc093blByb3BlcnR5KG4pKXtpZihyLnRhKXJldHVybjtWKFwiQ2Fubm90IHJlZ2lzdGVyIHR5cGUgJ1wiK2UrXCInIHR3aWNlXCIpfUpbbl09dCxkZWxldGUgbmxbbl0sbmYuaGFzT3duUHJvcGVydHkobikmJih0PW5mW25dLGRlbGV0ZSBuZltuXSx0LmZvckVhY2gobj0+bigpKSl9ZnVuY3Rpb24gbmQobil7VihuLkwuTy5NLm5hbWUrXCIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkXCIpfWZ1bmN0aW9uIG55KCl7fWZ1bmN0aW9uIG5tKG4sdCxyKXtpZih2b2lkIDA9PT1uW3RdLlIpe3ZhciBlPW5bdF07blt0XT1mdW5jdGlvbigpe3JldHVybiBuW3RdLlIuaGFzT3duUHJvcGVydHkoYXJndW1lbnRzLmxlbmd0aCl8fFYoXCJGdW5jdGlvbiAnXCIrcitcIicgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIChcIithcmd1bWVudHMubGVuZ3RoK1wiKSAtIGV4cGVjdHMgb25lIG9mIChcIituW3RdLlIrXCIpIVwiKSxuW3RdLlJbYXJndW1lbnRzLmxlbmd0aF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuW3RdLlI9W10sblt0XS5SW2UuWV09ZX19ZnVuY3Rpb24gbkUobix0LHIsZSxhLGksbyxzKXt0aGlzLm5hbWU9bix0aGlzLmNvbnN0cnVjdG9yPXQsdGhpcy5XPXIsdGhpcy5WPWUsdGhpcy5QPWEsdGhpcy5vYT1pLHRoaXMuYWE9byx0aGlzLm1hPXMsdGhpcy5pYT1bXX1mdW5jdGlvbiBuZyhuLHQscil7Zm9yKDt0IT09cjspdC5hYXx8VihcIkV4cGVjdGVkIG51bGwgb3IgaW5zdGFuY2Ugb2YgXCIrci5uYW1lK1wiLCBnb3QgYW4gaW5zdGFuY2Ugb2YgXCIrdC5uYW1lKSxuPXQuYWEobiksdD10LlA7cmV0dXJuIG59ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gbnVsbD09PXQ/KHRoaXMuZGEmJlYoXCJudWxsIGlzIG5vdCBhIHZhbGlkIFwiK3RoaXMubmFtZSksMCk6KHQuTHx8VignQ2Fubm90IHBhc3MgXCInK25DKHQpKydcIiBhcyBhICcrdGhpcy5uYW1lKSx0LkwuTnx8VihcIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlIFwiK3RoaXMubmFtZSksbmcodC5MLk4sdC5MLk8uTSx0aGlzLk0pKX1mdW5jdGlvbiBuVChuLHQpe2lmKG51bGw9PT10KXtpZih0aGlzLmRhJiZWKFwibnVsbCBpcyBub3QgYSB2YWxpZCBcIit0aGlzLm5hbWUpLHRoaXMuY2Epe3ZhciByPXRoaXMuZWEoKTtyZXR1cm4gbnVsbCE9PW4mJm4ucHVzaCh0aGlzLlYscikscn1yZXR1cm4gMH1pZih0Lkx8fFYoJ0Nhbm5vdCBwYXNzIFwiJytuQyh0KSsnXCIgYXMgYSAnK3RoaXMubmFtZSksdC5MLk58fFYoXCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSBcIit0aGlzLm5hbWUpLCF0aGlzLmJhJiZ0LkwuTy5iYSYmVihcIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgXCIrKHQuTC5UP3QuTC5ULm5hbWU6dC5MLk8ubmFtZSkrXCIgdG8gcGFyYW1ldGVyIHR5cGUgXCIrdGhpcy5uYW1lKSxyPW5nKHQuTC5OLHQuTC5PLk0sdGhpcy5NKSx0aGlzLmNhKXN3aXRjaCh2b2lkIDA9PT10LkwuUyYmVihcIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsXCIpLHRoaXMuQWEpe2Nhc2UgMDp0LkwuVD09PXRoaXM/cj10LkwuUzpWKFwiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSBcIisodC5MLlQ/dC5MLlQubmFtZTp0LkwuTy5uYW1lKStcIiB0byBwYXJhbWV0ZXIgdHlwZSBcIit0aGlzLm5hbWUpO2JyZWFrO2Nhc2UgMTpyPXQuTC5TO2JyZWFrO2Nhc2UgMjppZih0LkwuVD09PXRoaXMpcj10LkwuUztlbHNle3ZhciBlPXQuY2xvbmUoKTtyPXRoaXMud2EocixHKGZ1bmN0aW9uKCl7ZS5kZWxldGUoKX0pKSxudWxsIT09biYmbi5wdXNoKHRoaXMuVixyKX1icmVhaztkZWZhdWx0OlYoXCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3lcIil9cmV0dXJuIHJ9ZnVuY3Rpb24gbkwobix0KXtyZXR1cm4gbnVsbD09PXQ/KHRoaXMuZGEmJlYoXCJudWxsIGlzIG5vdCBhIHZhbGlkIFwiK3RoaXMubmFtZSksMCk6KHQuTHx8VignQ2Fubm90IHBhc3MgXCInK25DKHQpKydcIiBhcyBhICcrdGhpcy5uYW1lKSx0LkwuTnx8VihcIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlIFwiK3RoaXMubmFtZSksdC5MLk8uYmEmJlYoXCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlIFwiK3QuTC5PLm5hbWUrXCIgdG8gcGFyYW1ldGVyIHR5cGUgXCIrdGhpcy5uYW1lKSxuZyh0LkwuTix0LkwuTy5NLHRoaXMuTSkpfWZ1bmN0aW9uIG5BKG4sdCxyLGUpe3RoaXMubmFtZT1uLHRoaXMuTT10LHRoaXMuZGE9cix0aGlzLmJhPWUsdGhpcy5jYT0hMSx0aGlzLlY9dGhpcy53YT10aGlzLmVhPXRoaXMuamE9dGhpcy5BYT10aGlzLnZhPXZvaWQgMCx2b2lkIDAhPT10LlA/dGhpcy50b1dpcmVUeXBlPW5UOih0aGlzLnRvV2lyZVR5cGU9ZT9uXzpuTCx0aGlzLlU9bnVsbCl9dmFyIG5PPVtdO2Z1bmN0aW9uIG5QKG4pe3ZhciB0PW5PW25dO3JldHVybiB0fHwobj49bk8ubGVuZ3RoJiYobk8ubGVuZ3RoPW4rMSksbk9bbl09dD1BLmdldChuKSksdH1mdW5jdGlvbiBuYihuLHQpe3ZhciByLGUsYT0obj1CKG4pKS5pbmNsdWRlcyhcImpcIik/KHI9bixlPVtdLGZ1bmN0aW9uKCl7aWYoZS5sZW5ndGg9MCxPYmplY3QuYXNzaWduKGUsYXJndW1lbnRzKSxyLmluY2x1ZGVzKFwialwiKSl7dmFyIG49dVtcImR5bkNhbGxfXCIrcl07bj1lJiZlLmxlbmd0aD9uLmFwcGx5KG51bGwsW3RdLmNvbmNhdChlKSk6bi5jYWxsKG51bGwsdCl9ZWxzZSBuPW5QKHQpLmFwcGx5KG51bGwsZSk7cmV0dXJuIG59KTpuUCh0KTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZWKFwidW5rbm93biBmdW5jdGlvbiBwb2ludGVyIHdpdGggc2lnbmF0dXJlIFwiK24rXCI6IFwiK3QpLGF9dmFyIG5OPXZvaWQgMDtmdW5jdGlvbiBuSShuLHQpe3ZhciByPVtdLGU9e307dGhyb3cgdC5mb3JFYWNoKGZ1bmN0aW9uIG4odCl7ZVt0XXx8Slt0XXx8KG5sW3RdP25sW3RdLmZvckVhY2gobik6KHIucHVzaCh0KSxlW3RdPSEwKSl9KSxuZXcgbk4obitcIjogXCIrci5tYXAocSkuam9pbihbXCIsIFwiXSkpfWZ1bmN0aW9uIG53KG4sdCxyLGUsYSl7dmFyIGk9dC5sZW5ndGg7Mj5pJiZWKFwiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhXCIpO3ZhciBvPW51bGwhPT10WzFdJiZudWxsIT09cixzPSExO2ZvcihyPTE7cjx0Lmxlbmd0aDsrK3IpaWYobnVsbCE9PXRbcl0mJnZvaWQgMD09PXRbcl0uVSl7cz0hMDticmVha312YXIgdT1cInZvaWRcIiE9PXRbMF0ubmFtZSxjPWktMixmPUFycmF5KGMpLGw9W10saD1bXTtyZXR1cm4gZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoIT09YyYmVihcImZ1bmN0aW9uIFwiK24rXCIgY2FsbGVkIHdpdGggXCIrYXJndW1lbnRzLmxlbmd0aCtcIiBhcmd1bWVudHMsIGV4cGVjdGVkIFwiK2MrXCIgYXJncyFcIiksaC5sZW5ndGg9MCxsLmxlbmd0aD1vPzI6MSxsWzBdPWEsbyl7dmFyIHI9dFsxXS50b1dpcmVUeXBlKGgsdGhpcyk7bFsxXT1yfWZvcih2YXIgaT0wO2k8YzsrK2kpZltpXT10W2krMl0udG9XaXJlVHlwZShoLGFyZ3VtZW50c1tpXSksbC5wdXNoKGZbaV0pO2lmKGk9ZS5hcHBseShudWxsLGwpLHMpbnUoaCk7ZWxzZSBmb3IodmFyIHA9bz8xOjI7cDx0Lmxlbmd0aDtwKyspe3ZhciB2PTE9PT1wP3I6ZltwLTJdO251bGwhPT10W3BdLlUmJnRbcF0uVSh2KX1yZXR1cm4gdT90WzBdLmZyb21XaXJlVHlwZShpKTp2b2lkIDB9fWZ1bmN0aW9uIG5TKG4sdCl7Zm9yKHZhciByPVtdLGU9MDtlPG47ZSsrKXIucHVzaChfW3QrNCplPj4yXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gblIobil7NDxuJiYwPT0tLU1bbl0uZmEmJihNW25dPXZvaWQgMCxGLnB1c2gobikpfWZ1bmN0aW9uIG5DKG4pe2lmKG51bGw9PT1uKXJldHVyblwibnVsbFwiO3ZhciB0PXR5cGVvZiBuO3JldHVyblwib2JqZWN0XCI9PT10fHxcImFycmF5XCI9PT10fHxcImZ1bmN0aW9uXCI9PT10P24udG9TdHJpbmcoKTpcIlwiK259ZnVuY3Rpb24gblcobix0KXtmb3IodmFyIHI9XCJcIixlPTA7IShlPj10LzIpOysrZSl7dmFyIGE9bVtuKzIqZT4+MV07aWYoMD09YSlicmVhaztyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiByfWZ1bmN0aW9uIG5VKG4sdCxyKXtpZih2b2lkIDA9PT1yJiYocj0yMTQ3NDgzNjQ3KSwyPnIpcmV0dXJuIDA7ci09Mjt2YXIgZT10O3I9cjwyKm4ubGVuZ3RoP3IvMjpuLmxlbmd0aDtmb3IodmFyIGE9MDthPHI7KythKW1bdD4+MV09bi5jaGFyQ29kZUF0KGEpLHQrPTI7cmV0dXJuIG1bdD4+MV09MCx0LWV9ZnVuY3Rpb24gbk0obil7cmV0dXJuIDIqbi5sZW5ndGh9ZnVuY3Rpb24gbkYobix0KXtmb3IodmFyIHI9MCxlPVwiXCI7IShyPj10LzQpOyl7dmFyIGE9Z1tuKzQqcj4+Ml07aWYoMD09YSlicmVhazsrK3IsNjU1MzY8PWE/KGEtPTY1NTM2LGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8YT4+MTAsNTYzMjB8MTAyMyZhKSk6ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKX1yZXR1cm4gZX1mdW5jdGlvbiBuRChuLHQscil7aWYodm9pZCAwPT09ciYmKHI9MjE0NzQ4MzY0NyksND5yKXJldHVybiAwO3ZhciBlPXQ7cj1lK3ItNDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSl7dmFyIGk9bi5jaGFyQ29kZUF0KGEpO2lmKDU1Mjk2PD1pJiY1NzM0Mz49aSYmKGk9NjU1MzYrKCgxMDIzJmkpPDwxMCl8MTAyMyZuLmNoYXJDb2RlQXQoKythKSksZ1t0Pj4yXT1pLCh0Kz00KSs0PnIpYnJlYWt9cmV0dXJuIGdbdD4+Ml09MCx0LWV9ZnVuY3Rpb24gbmsobil7Zm9yKHZhciB0PTAscj0wO3I8bi5sZW5ndGg7KytyKXt2YXIgZT1uLmNoYXJDb2RlQXQocik7NTUyOTY8PWUmJjU3MzQzPj1lJiYrK3IsdCs9NH1yZXR1cm4gdH12YXIgblY9e307ZnVuY3Rpb24gbmoobil7dmFyIHQ9blZbbl07cmV0dXJuIHZvaWQgMD09PXQ/QihuKTp0fXZhciBuRz1bXSxuWT1bXSxuWD1bbnVsbCxbXSxbXV07az11LkJpbmRpbmdFcnJvcj1EKFwiQmluZGluZ0Vycm9yXCIpLHUuY291bnRfZW12YWxfaGFuZGxlcz1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLHQ9NTt0PE0ubGVuZ3RoOysrdCl2b2lkIDAhPT1NW3RdJiYrK247cmV0dXJuIG59LHUuZ2V0X2ZpcnN0X2VtdmFsPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTU7bjxNLmxlbmd0aDsrK24paWYodm9pZCAwIT09TVtuXSlyZXR1cm4gTVtuXTtyZXR1cm4gbnVsbH0sWT11LlB1cmVWaXJ0dWFsRXJyb3I9RChcIlB1cmVWaXJ0dWFsRXJyb3JcIik7Zm9yKHZhciBuQj1BcnJheSgyNTYpLG5IPTA7MjU2Pm5IOysrbkgpbkJbbkhdPVN0cmluZy5mcm9tQ2hhckNvZGUobkgpO1g9bkIsdS5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKCQpLmxlbmd0aH0sdS5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzPWZ1bmN0aW9uKCl7dmFyIG4sdD1bXTtmb3IobiBpbiAkKSQuaGFzT3duUHJvcGVydHkobikmJnQucHVzaCgkW25dKTtyZXR1cm4gdH0sdS5mbHVzaFBlbmRpbmdEZWxldGVzPXgsdS5zZXREZWxheUZ1bmN0aW9uPWZ1bmN0aW9uKG4pe3o9bixILmxlbmd0aCYmeiYmeih4KX0sbmU9dS5JbnRlcm5hbEVycm9yPUQoXCJJbnRlcm5hbEVycm9yXCIpLG55LnByb3RvdHlwZS5pc0FsaWFzT2Y9ZnVuY3Rpb24obil7aWYoISh0aGlzIGluc3RhbmNlb2YgbnkmJm4gaW5zdGFuY2VvZiBueSkpcmV0dXJuITE7dmFyIHQ9dGhpcy5MLk8uTSxyPXRoaXMuTC5OLGU9bi5MLk8uTTtmb3Iobj1uLkwuTjt0LlA7KXI9dC5hYShyKSx0PXQuUDtmb3IoO2UuUDspbj1lLmFhKG4pLGU9ZS5QO3JldHVybiB0PT09ZSYmcj09PW59LG55LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2lmKHRoaXMuTC5OfHxuZCh0aGlzKSx0aGlzLkwuJClyZXR1cm4gdGhpcy5MLmNvdW50LnZhbHVlKz0xLHRoaXM7dmFyIG49bm8sdD1PYmplY3Qscj10LmNyZWF0ZSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSxhPXRoaXMuTDtyZXR1cm4gbj1uKHIuY2FsbCh0LGUse0w6e3ZhbHVlOntjb3VudDphLmNvdW50LFo6YS5aLCQ6YS4kLE46YS5OLE86YS5PLFM6YS5TLFQ6YS5UfX19KSksbi5MLmNvdW50LnZhbHVlKz0xLG4uTC5aPSExLG59LG55LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oKXt0aGlzLkwuTnx8bmQodGhpcyksdGhpcy5MLlomJiF0aGlzLkwuJCYmVihcIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb25cIiksUSh0aGlzKSxudCh0aGlzLkwpLHRoaXMuTC4kfHwodGhpcy5MLlM9dm9pZCAwLHRoaXMuTC5OPXZvaWQgMCl9LG55LnByb3RvdHlwZS5pc0RlbGV0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5MLk59LG55LnByb3RvdHlwZS5kZWxldGVMYXRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkwuTnx8bmQodGhpcyksdGhpcy5MLlomJiF0aGlzLkwuJCYmVihcIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb25cIiksSC5wdXNoKHRoaXMpLDE9PT1ILmxlbmd0aCYmeiYmeih4KSx0aGlzLkwuWj0hMCx0aGlzfSxuQS5wcm90b3R5cGUucGE9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuamEmJihuPXRoaXMuamEobikpLG59LG5BLnByb3RvdHlwZS5nYT1mdW5jdGlvbihuKXt0aGlzLlYmJnRoaXMuVihuKX0sbkEucHJvdG90eXBlLmFyZ1BhY2tBZHZhbmNlPTgsbkEucHJvdG90eXBlLnJlYWRWYWx1ZUZyb21Qb2ludGVyPW5jLG5BLnByb3RvdHlwZS5kZWxldGVPYmplY3Q9ZnVuY3Rpb24obil7bnVsbCE9PW4mJm4uZGVsZXRlKCl9LG5BLnByb3RvdHlwZS5mcm9tV2lyZVR5cGU9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCgpe3JldHVybiB0aGlzLmNhP25pKHRoaXMuTS5XLHtPOnRoaXMudmEsTjplLFQ6dGhpcyxTOm59KTpuaSh0aGlzLk0uVyx7Tzp0aGlzLE46bn0pfXZhciByLGU9dGhpcy5wYShuKTtpZighZSlyZXR1cm4gdGhpcy5nYShuKSxudWxsO3ZhciBhPSRbWih0aGlzLk0sZSldO2lmKHZvaWQgMCE9PWEpcmV0dXJuIDA9PT1hLkwuY291bnQudmFsdWU/KGEuTC5OPWUsYS5MLlM9bixhLmNsb25lKCkpOihhPWEuY2xvbmUoKSx0aGlzLmdhKG4pLGEpO2lmKCEoYT1uclthPXRoaXMuTS5vYShlKV0pKXJldHVybiB0LmNhbGwodGhpcyk7YT10aGlzLmJhP2Eua2E6YS5wb2ludGVyVHlwZTt2YXIgaT1mdW5jdGlvbiBuKHQscixlKXtyZXR1cm4gcj09PWU/dDp2b2lkIDA9PT1lLlA/bnVsbDpudWxsPT09KHQ9bih0LHIsZS5QKSk/bnVsbDplLm1hKHQpfShlLHRoaXMuTSxhLk0pO3JldHVybiBudWxsPT09aT90LmNhbGwodGhpcyk6dGhpcy5jYT9uaShhLk0uVyx7TzphLE46aSxUOnRoaXMsUzpufSk6bmkoYS5NLlcse086YSxOOml9KX0sbk49dS5VbmJvdW5kVHlwZUVycm9yPUQoXCJVbmJvdW5kVHlwZUVycm9yXCIpO3ZhciBueD17cTpmdW5jdGlvbihuLHQscil7bj1CKG4pLHQ9Syh0LFwid3JhcHBlclwiKSxyPWoocik7dmFyIGU9W10uc2xpY2UsYT10Lk0saT1hLlcsbz1hLlAuVyxzPWEuUC5jb25zdHJ1Y3Rvcjtmb3IodmFyIHUgaW4gbj1VKG4sZnVuY3Rpb24oKXthLlAuaWEuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYodGhpc1tuXT09PW9bbl0pdGhyb3cgbmV3IFkoXCJQdXJlIHZpcnR1YWwgZnVuY3Rpb24gXCIrbitcIiBtdXN0IGJlIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHRcIil9KS5iaW5kKHRoaXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIl9fcGFyZW50XCIse3ZhbHVlOml9KSx0aGlzLl9fY29uc3RydWN0LmFwcGx5KHRoaXMsZS5jYWxsKGFyZ3VtZW50cykpfSksaS5fX2NvbnN0cnVjdD1mdW5jdGlvbigpe3RoaXM9PT1pJiZWKFwiUGFzcyBjb3JyZWN0ICd0aGlzJyB0byBfX2NvbnN0cnVjdFwiKTt2YXIgbj1zLmltcGxlbWVudC5hcHBseSh2b2lkIDAsW3RoaXNdLmNvbmNhdChlLmNhbGwoYXJndW1lbnRzKSkpO1Eobik7dmFyIHQ9bi5MO24ubm90aWZ5T25EZXN0cnVjdGlvbigpLHQuJD0hMCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtMOnt2YWx1ZTp0fX0pLG5vKHRoaXMpLG49WihhLG49dC5OKSwkLmhhc093blByb3BlcnR5KG4pP1YoXCJUcmllZCB0byByZWdpc3RlciByZWdpc3RlcmVkIGluc3RhbmNlOiBcIituKTokW25dPXRoaXN9LGkuX19kZXN0cnVjdD1mdW5jdGlvbigpe3RoaXM9PT1pJiZWKFwiUGFzcyBjb3JyZWN0ICd0aGlzJyB0byBfX2Rlc3RydWN0XCIpLFEodGhpcyk7dmFyIG49dGhpcy5MLk47bj1aKGEsbiksJC5oYXNPd25Qcm9wZXJ0eShuKT9kZWxldGUgJFtuXTpWKFwiVHJpZWQgdG8gdW5yZWdpc3RlciB1bnJlZ2lzdGVyZWQgaW5zdGFuY2U6IFwiK24pfSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkpLHIpbi5wcm90b3R5cGVbdV09clt1XTtyZXR1cm4gRyhuKX0sbDpmdW5jdGlvbihuKXt2YXIgdD1uc1tuXTtkZWxldGUgbnNbbl07dmFyIHI9dC5lYSxlPXQuVixhPXQuaGE7bmgoW25dLGEubWFwKG49Pm4uc2EpLmNvbmNhdChhLm1hcChuPT5uLnlhKSksbj0+e3ZhciBpPXt9O3JldHVybiBhLmZvckVhY2goKHQscik9Pnt2YXIgZT1uW3JdLG89dC5xYSxzPXQucmEsdT1uW3IrYS5sZW5ndGhdLGM9dC54YSxmPXQuemE7aVt0Lm5hXT17cmVhZDpuPT5lLmZyb21XaXJlVHlwZShvKHMsbikpLHdyaXRlOihuLHQpPT57dmFyIHI9W107YyhmLG4sdS50b1dpcmVUeXBlKHIsdCkpLG51KHIpfX19KSxbe25hbWU6dC5uYW1lLGZyb21XaXJlVHlwZTpmdW5jdGlvbihuKXt2YXIgdCxyPXt9O2Zvcih0IGluIGkpclt0XT1pW3RdLnJlYWQobik7cmV0dXJuIGUobikscn0sdG9XaXJlVHlwZTpmdW5jdGlvbihuLHQpe2Zvcih2YXIgYSBpbiBpKWlmKCEoYSBpbiB0KSl0aHJvdyBUeXBlRXJyb3IoJ01pc3NpbmcgZmllbGQ6ICBcIicrYSsnXCInKTt2YXIgbz1yKCk7Zm9yKGEgaW4gaSlpW2FdLndyaXRlKG8sdFthXSk7cmV0dXJuIG51bGwhPT1uJiZuLnB1c2goZSxvKSxvfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOm5jLFU6ZX1dfSl9LHY6ZnVuY3Rpb24oKXt9LEI6ZnVuY3Rpb24obix0LHIsZSxhKXt2YXIgaT1ucChyKTtudihuLHtuYW1lOnQ9Qih0KSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24obil7cmV0dXJuISFufSx0b1dpcmVUeXBlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ/ZTphfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKG4pe2lmKDE9PT1yKXZhciBlPWQ7ZWxzZSBpZigyPT09cillPW07ZWxzZSBpZig0PT09cillPWc7ZWxzZSB0aHJvdyBUeXBlRXJyb3IoXCJVbmtub3duIGJvb2xlYW4gdHlwZSBzaXplOiBcIit0KTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoZVtuPj5pXSl9LFU6bnVsbH0pfSxoOmZ1bmN0aW9uKG4sdCxyLGUsYSxpLG8scyxjLGYsbCxoLHApe2w9QihsKSxpPW5iKGEsaSkscyYmKHM9bmIobyxzKSksZiYmKGY9bmIoYyxmKSkscD1uYihoLHApO3ZhciB2LGQ9VyhsKTt2PWZ1bmN0aW9uKCl7bkkoXCJDYW5ub3QgY29uc3RydWN0IFwiK2wrXCIgZHVlIHRvIHVuYm91bmQgdHlwZXNcIixbZV0pfSx1Lmhhc093blByb3BlcnR5KGQpPyhWKFwiQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICdcIitkK1wiJyB0d2ljZVwiKSxubSh1LGQsZCksdS5oYXNPd25Qcm9wZXJ0eSh2b2lkIDApJiZWKFwiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAodW5kZWZpbmVkKSFcIiksdVtkXS5SW3ZvaWQgMF09dik6dVtkXT12LG5oKFtuLHQscl0sZT9bZV06W10sZnVuY3Rpb24odCl7aWYodD10WzBdLGUpdmFyIHIsYT10Lk0sbz1hLlc7ZWxzZSBvPW55LnByb3RvdHlwZTt0PVUoZCxmdW5jdGlvbigpe2lmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSE9PWMpdGhyb3cgbmV3IGsoXCJVc2UgJ25ldycgdG8gY29uc3RydWN0IFwiK2wpO2lmKHZvaWQgMD09PWguWCl0aHJvdyBuZXcgayhsK1wiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yXCIpO3ZhciBuPWguWFthcmd1bWVudHMubGVuZ3RoXTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBrKFwiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgXCIrbCtcIiB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKFwiK2FyZ3VtZW50cy5sZW5ndGgrXCIpIC0gZXhwZWN0ZWQgKFwiK09iamVjdC5rZXlzKGguWCkudG9TdHJpbmcoKStcIikgcGFyYW1ldGVycyBpbnN0ZWFkIVwiKTtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTt2YXIgYz1PYmplY3QuY3JlYXRlKG8se2NvbnN0cnVjdG9yOnt2YWx1ZTp0fX0pO3QucHJvdG90eXBlPWM7dmFyIGg9bmV3IG5FKGwsdCxjLHAsYSxpLHMsZik7YT1uZXcgbkEobCxoLCEwLCExKSxvPW5ldyBuQShsK1wiKlwiLGgsITEsITEpO3ZhciB2PW5ldyBuQShsK1wiIGNvbnN0KlwiLGgsITEsITApO3JldHVybiBucltuXT17cG9pbnRlclR5cGU6byxrYTp2fSxyPXQsdS5oYXNPd25Qcm9wZXJ0eShkKXx8bmEoXCJSZXBsYWNpbmcgbm9uZXhpc3RhbnQgcHVibGljIHN5bWJvbFwiKSx1W2RdPXIsdVtkXS5ZPXZvaWQgMCxbYSxvLHZdfSl9LGQ6ZnVuY3Rpb24obix0LHIsZSxhLGksbyl7dmFyIHM9blMocixlKTt0PUIodCksaT1uYihhLGkpLG5oKFtdLFtuXSxmdW5jdGlvbihuKXtmdW5jdGlvbiBlKCl7bkkoXCJDYW5ub3QgY2FsbCBcIithK1wiIGR1ZSB0byB1bmJvdW5kIHR5cGVzXCIscyl9dmFyIGE9KG49blswXSkubmFtZStcIi5cIit0O3Quc3RhcnRzV2l0aChcIkBAXCIpJiYodD1TeW1ib2xbdC5zdWJzdHJpbmcoMildKTt2YXIgdT1uLk0uY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXVbdF0/KGUuWT1yLTEsdVt0XT1lKToobm0odSx0LGEpLHVbdF0uUltyLTFdPWUpLG5oKFtdLHMsZnVuY3Rpb24obil7cmV0dXJuIG49bncoYSxbblswXSxudWxsXS5jb25jYXQobi5zbGljZSgxKSksbnVsbCxpLG8pLHZvaWQgMD09PXVbdF0uUj8obi5ZPXItMSx1W3RdPW4pOnVbdF0uUltyLTFdPW4sW119KSxbXX0pfSxwOmZ1bmN0aW9uKG4sdCxyLGUsYSxpKXswPHR8fHcoKTt2YXIgbz1uUyh0LHIpO2E9bmIoZSxhKSxuaChbXSxbbl0sZnVuY3Rpb24obil7dmFyIHI9XCJjb25zdHJ1Y3RvciBcIisobj1uWzBdKS5uYW1lO2lmKHZvaWQgMD09PW4uTS5YJiYobi5NLlg9W10pLHZvaWQgMCE9PW4uTS5YW3QtMV0pdGhyb3cgbmV3IGsoXCJDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzIChcIisodC0xKStcIikgZm9yIGNsYXNzICdcIituLm5hbWUrXCInISBPdmVybG9hZCByZXNvbHV0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHBlcmZvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVyIGNvdW50LCBub3QgYWN0dWFsIHR5cGUgaW5mbyFcIik7cmV0dXJuIG4uTS5YW3QtMV09KCk9PntuSShcIkNhbm5vdCBjb25zdHJ1Y3QgXCIrbi5uYW1lK1wiIGR1ZSB0byB1bmJvdW5kIHR5cGVzXCIsbyl9LG5oKFtdLG8sZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaWNlKDEsMCxudWxsKSxuLk0uWFt0LTFdPW53KHIsZSxudWxsLGEsaSksW119KSxbXX0pfSxhOmZ1bmN0aW9uKG4sdCxyLGUsYSxpLG8scyl7dmFyIHU9blMocixlKTt0PUIodCksaT1uYihhLGkpLG5oKFtdLFtuXSxmdW5jdGlvbihuKXtmdW5jdGlvbiBlKCl7bkkoXCJDYW5ub3QgY2FsbCBcIithK1wiIGR1ZSB0byB1bmJvdW5kIHR5cGVzXCIsdSl9dmFyIGE9KG49blswXSkubmFtZStcIi5cIit0O3Quc3RhcnRzV2l0aChcIkBAXCIpJiYodD1TeW1ib2xbdC5zdWJzdHJpbmcoMildKSxzJiZuLk0uaWEucHVzaCh0KTt2YXIgYz1uLk0uVyxmPWNbdF07cmV0dXJuIHZvaWQgMD09PWZ8fHZvaWQgMD09PWYuUiYmZi5jbGFzc05hbWUhPT1uLm5hbWUmJmYuWT09PXItMj8oZS5ZPXItMixlLmNsYXNzTmFtZT1uLm5hbWUsY1t0XT1lKToobm0oYyx0LGEpLGNbdF0uUltyLTJdPWUpLG5oKFtdLHUsZnVuY3Rpb24oZSl7cmV0dXJuIGU9bncoYSxlLG4saSxvKSx2b2lkIDA9PT1jW3RdLlI/KGUuWT1yLTIsY1t0XT1lKTpjW3RdLlJbci0yXT1lLFtdfSksW119KX0sQTpmdW5jdGlvbihuLHQpe252KG4se25hbWU6dD1CKHQpLGZyb21XaXJlVHlwZTpmdW5jdGlvbihuKXt2YXIgdD1qKG4pO3JldHVybiBuUihuKSx0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEcodCl9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6bmMsVTpudWxsfSl9LG46ZnVuY3Rpb24obix0LHIpe3I9bnAociksbnYobix7bmFtZTp0PUIodCksZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKG4pe3JldHVybiBufSx0b1dpcmVUeXBlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHR9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24obix0KXtzd2l0Y2godCl7Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoVFtuPj4yXSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKExbbj4+M10pfTtkZWZhdWx0OnRocm93IFR5cGVFcnJvcihcIlVua25vd24gZmxvYXQgdHlwZTogXCIrbil9fSh0LHIpLFU6bnVsbH0pfSxlOmZ1bmN0aW9uKG4sdCxyLGUsYSl7dD1CKHQpLC0xPT09YSYmKGE9NDI5NDk2NzI5NSksYT1ucChyKTt2YXIgaT1uPT5uO2lmKDA9PT1lKXt2YXIgbz0zMi04KnI7aT1uPT5uPDxvPj4+b31yPXQuaW5jbHVkZXMoXCJ1bnNpZ25lZFwiKT9mdW5jdGlvbihuLHQpe3JldHVybiB0Pj4+MH06ZnVuY3Rpb24obix0KXtyZXR1cm4gdH0sbnYobix7bmFtZTp0LGZyb21XaXJlVHlwZTppLHRvV2lyZVR5cGU6cixhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKG4sdCxyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByP2Z1bmN0aW9uKG4pe3JldHVybiBkW25dfTpmdW5jdGlvbihuKXtyZXR1cm4geVtuXX07Y2FzZSAxOnJldHVybiByP2Z1bmN0aW9uKG4pe3JldHVybiBtW24+PjFdfTpmdW5jdGlvbihuKXtyZXR1cm4gRVtuPj4xXX07Y2FzZSAyOnJldHVybiByP2Z1bmN0aW9uKG4pe3JldHVybiBnW24+PjJdfTpmdW5jdGlvbihuKXtyZXR1cm4gX1tuPj4yXX07ZGVmYXVsdDp0aHJvdyBUeXBlRXJyb3IoXCJVbmtub3duIGludGVnZXIgdHlwZTogXCIrbil9fSh0LGEsMCE9PWUpLFU6bnVsbH0pfSxiOmZ1bmN0aW9uKG4sdCxyKXtmdW5jdGlvbiBlKG4pe24+Pj0yO3ZhciB0PV87cmV0dXJuIG5ldyBhKHQuYnVmZmVyLHRbbisxXSx0W25dKX12YXIgYT1bSW50OEFycmF5LFVpbnQ4QXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXldW3RdO252KG4se25hbWU6cj1CKHIpLGZyb21XaXJlVHlwZTplLGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZX0se3RhOiEwfSl9LG86ZnVuY3Rpb24obix0KXt2YXIgcj1cInN0ZDo6c3RyaW5nXCI9PT0odD1CKHQpKTtudihuLHtuYW1lOnQsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKG4pe3ZhciB0PV9bbj4+Ml0sZT1uKzQ7aWYocilmb3IodmFyIGE9ZSxpPTA7aTw9dDsrK2kpe3ZhciBvPWUraTtpZihpPT10fHwwPT15W29dKXtpZihhPWE/cCh5LGEsby1hKTpcIlwiLHZvaWQgMD09PXMpdmFyIHM9YTtlbHNlIHMrPVwiXFx4MDBcIithO2E9bysxfX1lbHNle2ZvcihpPTAscz1BcnJheSh0KTtpPHQ7KytpKXNbaV09U3RyaW5nLmZyb21DaGFyQ29kZSh5W2UraV0pO3M9cy5qb2luKFwiXCIpfXJldHVybiBuWihuKSxzfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKG4sdCl7dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYodD1uZXcgVWludDhBcnJheSh0KSk7dmFyIGUsYT1cInN0cmluZ1wiPT10eXBlb2YgdDtpZihhfHx0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHx0IGluc3RhbmNlb2YgSW50OEFycmF5fHxWKFwiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZ1wiKSxyJiZhKXt2YXIgaT0wO2ZvcihlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciBvPXQuY2hhckNvZGVBdChlKTsxMjc+PW8/aSsrOjIwNDc+PW8/aSs9Mjo1NTI5Njw9byYmNTczNDM+PW8/KGkrPTQsKytlKTppKz0zfWU9aX1lbHNlIGU9dC5sZW5ndGg7aWYobz0oaT1uJCg0K2UrMSkpKzQsX1tpPj4yXT1lLHImJmEpe2lmKGE9byxvPWUrMSxlPXksMDxvKXtvPWErby0xO2Zvcih2YXIgcz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgdT10LmNoYXJDb2RlQXQocyk7aWYoNTUyOTY8PXUmJjU3MzQzPj11JiYodT02NTUzNisoKDEwMjMmdSk8PDEwKXwxMDIzJnQuY2hhckNvZGVBdCgrK3MpKSwxMjc+PXUpe2lmKGE+PW8pYnJlYWs7ZVthKytdPXV9ZWxzZXtpZigyMDQ3Pj11KXtpZihhKzE+PW8pYnJlYWs7ZVthKytdPTE5Mnx1Pj42fWVsc2V7aWYoNjU1MzU+PXUpe2lmKGErMj49bylicmVhaztlW2ErK109MjI0fHU+PjEyfWVsc2V7aWYoYSszPj1vKWJyZWFrO2VbYSsrXT0yNDB8dT4+MTgsZVthKytdPTEyOHx1Pj4xMiY2M31lW2ErK109MTI4fHU+PjYmNjN9ZVthKytdPTEyOHw2MyZ1fX1lW2FdPTB9fWVsc2UgaWYoYSlmb3IoYT0wO2E8ZTsrK2EpMjU1PChzPXQuY2hhckNvZGVBdChhKSkmJihuWihvKSxWKFwiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzXCIpKSx5W28rYV09cztlbHNlIGZvcihhPTA7YTxlOysrYSl5W28rYV09dFthXTtyZXR1cm4gbnVsbCE9PW4mJm4ucHVzaChuWixpKSxpfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOm5jLFU6ZnVuY3Rpb24obil7bloobil9fSl9LGs6ZnVuY3Rpb24obix0LHIpe2lmKHI9QihyKSwyPT09dCl2YXIgZT1uVyxhPW5VLGk9bk0sbz0oKT0+RSxzPTE7ZWxzZSA0PT09dCYmKGU9bkYsYT1uRCxpPW5rLG89KCk9Pl8scz0yKTtudihuLHtuYW1lOnIsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcixhPV9bbj4+Ml0saT1vKCksdT1uKzQsYz0wO2M8PWE7KytjKXt2YXIgZj1uKzQrYyp0OyhjPT1hfHwwPT1pW2Y+PnNdKSYmKHU9ZSh1LGYtdSksdm9pZCAwPT09cj9yPXU6cis9XCJcXHgwMFwiK3UsdT1mK3QpfXJldHVybiBuWihuKSxyfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKG4sZSl7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJlYoXCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSBcIityKTt2YXIgbz1pKGUpLHU9biQoNCtvK3QpO3JldHVybiBfW3U+PjJdPW8+PnMsYShlLHUrNCxvK3QpLG51bGwhPT1uJiZuLnB1c2goblosdSksdX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpuYyxVOmZ1bmN0aW9uKG4pe25aKG4pfX0pfSxtOmZ1bmN0aW9uKG4sdCxyLGUsYSxpKXtuc1tuXT17bmFtZTpCKHQpLGVhOm5iKHIsZSksVjpuYihhLGkpLGhhOltdfX0sYzpmdW5jdGlvbihuLHQscixlLGEsaSxvLHMsdSxjKXtuc1tuXS5oYS5wdXNoKHtuYTpCKHQpLHNhOnIscWE6bmIoZSxhKSxyYTppLHlhOm8seGE6bmIocyx1KSx6YTpjfSl9LEM6ZnVuY3Rpb24obix0KXtudihuLHt1YTohMCxuYW1lOnQ9Qih0KSxhcmdQYWNrQWR2YW5jZTowLGZyb21XaXJlVHlwZTpmdW5jdGlvbigpe30sdG9XaXJlVHlwZTpmdW5jdGlvbigpe319KX0sdDpmdW5jdGlvbihuLHQscixlLGEpe249bkdbbl0sdD1qKHQpLHI9bmoocik7dmFyIGk9W107cmV0dXJuIF9bZT4+Ml09RyhpKSxuKHQscixpLGEpfSxqOmZ1bmN0aW9uKG4sdCxyLGUpe249bkdbbl0sbih0PWoodCkscj1uaihyKSxudWxsLGUpfSxmOm5SLGc6ZnVuY3Rpb24obix0KXt2YXIgcixlLGE9ZnVuY3Rpb24obix0KXtmb3IodmFyIHI9QXJyYXkobiksZT0wO2U8bjsrK2UpcltlXT1LKF9bdCs0KmU+PjJdLFwicGFyYW1ldGVyIFwiK2UpO3JldHVybiByfShuLHQpLGk9YVswXSxvPW5ZW3Q9aS5uYW1lK1wiXyRcIithLnNsaWNlKDEpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5uYW1lfSkuam9pbihcIl9cIikrXCIkXCJdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG87dmFyIHM9QXJyYXkobi0xKTtyZXR1cm4gcj0odCxyLGUsbyk9Pntmb3IodmFyIHU9MCxjPTA7YzxuLTE7KytjKXNbY109YVtjKzFdLnJlYWRWYWx1ZUZyb21Qb2ludGVyKG8rdSksdSs9YVtjKzFdLmFyZ1BhY2tBZHZhbmNlO2ZvcihjPTAsdD10W3JdLmFwcGx5KHQscyk7YzxuLTE7KytjKWFbYysxXS5sYSYmYVtjKzFdLmxhKHNbY10pO2lmKCFpLnVhKXJldHVybiBpLnRvV2lyZVR5cGUoZSx0KX0sZT1uRy5sZW5ndGgsbkcucHVzaChyKSxvPWUsbllbdF09b30scjpmdW5jdGlvbihuKXs0PG4mJihNW25dLmZhKz0xKX0sczpmdW5jdGlvbihuKXtudShqKG4pKSxuUihuKX0saTpmdW5jdGlvbigpe3coXCJcIil9LHg6ZnVuY3Rpb24obix0LHIpe3kuY29weVdpdGhpbihuLHQsdCtyKX0sdzpmdW5jdGlvbihuKXt2YXIgdD15Lmxlbmd0aDtpZigyMTQ3NDgzNjQ4PChuPj4+PTApKXJldHVybiExO2Zvcih2YXIgcj0xOzQ+PXI7cio9Mil7dmFyIGU9dCooMSsuMi9yKTtlPU1hdGgubWluKGUsbisxMDA2NjMyOTYpO3ZhciBhPU1hdGgsaT1hLm1pbjtlPU1hdGgubWF4KG4sZSksZSs9KDY1NTM2LWUlNjU1MzYpJTY1NTM2O246e3ZhciBvPWwuYnVmZmVyO3RyeXtsLmdyb3coaS5jYWxsKGEsMjE0NzQ4MzY0OCxlKS1vLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksdigpO3ZhciBzPTE7YnJlYWsgbn1jYXRjaChuKXt9cz12b2lkIDB9aWYocylyZXR1cm4hMH1yZXR1cm4hMX0sejpmdW5jdGlvbigpe3JldHVybiA1Mn0sdTpmdW5jdGlvbigpe3JldHVybiA3MH0seTpmdW5jdGlvbihuLHQscixlKXtmb3IodmFyIGE9MCxpPTA7aTxyO2krKyl7dmFyIHU9X1t0Pj4yXSxjPV9bdCs0Pj4yXTt0Kz04O2Zvcih2YXIgZj0wO2Y8YztmKyspe3ZhciBsPXlbdStmXSxoPW5YW25dOzA9PT1sfHwxMD09PWw/KCgxPT09bj9vOnMpKHAoaCwwKSksaC5sZW5ndGg9MCk6aC5wdXNoKGwpfWErPWN9cmV0dXJuIF9bZT4+Ml09YSwwfX07IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXt1LmFzbT1uLmV4cG9ydHMsbD11LmFzbS5ELHYoKSxBPXUuYXNtLkksUC51bnNoaWZ0KHUuYXNtLkUpLDA9PS0tTiYmSSYmKG49SSxJPW51bGwsbigpKX1mdW5jdGlvbiB0KHQpe24odC5pbnN0YW5jZSl9ZnVuY3Rpb24gZShuKXtyZXR1cm4oXCJmdW5jdGlvblwiPT10eXBlb2YgZmV0Y2g/ZmV0Y2gocix7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihmdW5jdGlvbihuKXtpZighbi5vayl0aHJvd1wiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIrcitcIidcIjtyZXR1cm4gbi5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gUigpfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBSKCl9KSkudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobixhKX0pLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG59KS50aGVuKG4sZnVuY3Rpb24obil7cyhcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK24pLHcobil9KX12YXIgYT17YTpueH07aWYoTisrLHUuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gdS5pbnN0YW50aWF0ZVdhc20oYSxuKX1jYXRjaChuKXtzKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIrbiksZihuKX0oXCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fFMoKXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/ZSh0KTpmZXRjaChyLHtjcmVkZW50aWFsczpcInNhbWUtb3JpZ2luXCJ9KS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhuLGEpLnRoZW4odCxmdW5jdGlvbihuKXtyZXR1cm4gcyhcIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiBcIituKSxzKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIiksZSh0KX0pfSkpLmNhdGNoKGYpfSgpO3ZhciBuej11Ll9fX2dldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuKG56PXUuX19fZ2V0VHlwZU5hbWU9dS5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtmdW5jdGlvbiBuJCgpe3JldHVybihuJD11LmFzbS5IKS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gblooKXtyZXR1cm4oblo9dS5hc20uSikuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIG5KKCl7MDxOfHwoQyhPKSwwPE58fGV8fChlPSEwLHUuY2FsbGVkUnVuPSEwLGh8fChDKFApLGModSksQyhiKSkpKX1yZXR1cm4gdS5fX2VtYmluZF9pbml0aWFsaXplX2JpbmRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuKHUuX19lbWJpbmRfaW5pdGlhbGl6ZV9iaW5kaW5ncz11LmFzbS5HKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHUuZHluQ2FsbF9qaWppPWZ1bmN0aW9uKCl7cmV0dXJuKHUuZHluQ2FsbF9qaWppPXUuYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sST1mdW5jdGlvbiBuKCl7ZXx8bkooKSxlfHwoST1uKX0sbkooKSx0LnJlYWR5fX0pKCk7YXN5bmMgZnVuY3Rpb24gaW5pdFlvZ2EodCl7bGV0IHI9YXdhaXQgeW9nYSh7aW5zdGFudGlhdGVXYXNtKG4scil7V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxuKS50aGVuKG49PntuIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2U/cihuKTpyKG4uaW5zdGFuY2UpfSl9fSk7cmV0dXJuIG4ocil9YXN5bmMgZnVuY3Rpb24gaW5pdFN0cmVhbWluZyh0KXtsZXQgcj1hd2FpdCB5b2dhKHtpbnN0YW50aWF0ZVdhc20obixyKXtXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh0LG4pLnRoZW4oKHtpbnN0YW5jZTpufSk9PntyKG4pfSl9fSk7cmV0dXJuIG4ocil9ZXhwb3J0e2luaXRZb2dhIGFzIGRlZmF1bHQsaW5pdFN0cmVhbWluZ307XG4iLAogICAgImltcG9ydHtyZWFkRmlsZSBhcyBFfWZyb21cIm5vZGU6ZnMvcHJvbWlzZXNcIjtpbXBvcnR7Y3JlYXRlUmVxdWlyZSBhcyBffWZyb21cIm5vZGU6bW9kdWxlXCI7aW1wb3J0IGEgZnJvbVwiLi9pbmRleC5qc1wiO2V4cG9ydHtBIGFzIEFMSUdOX0FVVE8sZSBhcyBBTElHTl9CQVNFTElORSxiIGFzIEFMSUdOX0NFTlRFUixjIGFzIEFMSUdOX0ZMRVhfRU5ELGEgYXMgQUxJR05fRkxFWF9TVEFSVCxnIGFzIEFMSUdOX1NQQUNFX0FST1VORCxmIGFzIEFMSUdOX1NQQUNFX0JFVFdFRU4sZCBhcyBBTElHTl9TVFJFVENILGggYXMgRElNRU5TSU9OX0hFSUdIVCxEIGFzIERJTUVOU0lPTl9XSURUSCxpIGFzIERJUkVDVElPTl9JTkhFUklULGogYXMgRElSRUNUSU9OX0xUUixrIGFzIERJUkVDVElPTl9SVEwsbCBhcyBESVNQTEFZX0ZMRVgsbSBhcyBESVNQTEFZX05PTkUsdSBhcyBFREdFX0FMTCxwIGFzIEVER0VfQk9UVE9NLHIgYXMgRURHRV9FTkQscyBhcyBFREdFX0hPUklaT05UQUwsRSBhcyBFREdFX0xFRlQsbyBhcyBFREdFX1JJR0hULHEgYXMgRURHRV9TVEFSVCxuIGFzIEVER0VfVE9QLHQgYXMgRURHRV9WRVJUSUNBTCx4IGFzIEVYUEVSSU1FTlRBTF9GRUFUVVJFX0FCU09MVVRFX1BFUkNFTlRBR0VfQUdBSU5TVF9QQURESU5HX0VER0UseSBhcyBFWFBFUklNRU5UQUxfRkVBVFVSRV9GSVhfQUJTT0xVVEVfVFJBSUxJTkdfQ09MVU1OX01BUkdJTix2IGFzIEVYUEVSSU1FTlRBTF9GRUFUVVJFX1dFQl9GTEVYX0JBU0lTLEYgYXMgRkxFWF9ESVJFQ1RJT05fQ09MVU1OLHogYXMgRkxFWF9ESVJFQ1RJT05fQ09MVU1OX1JFVkVSU0UsQiBhcyBGTEVYX0RJUkVDVElPTl9ST1csQyBhcyBGTEVYX0RJUkVDVElPTl9ST1dfUkVWRVJTRSxJIGFzIEdVVFRFUl9BTEwsRyBhcyBHVVRURVJfQ09MVU1OLEggYXMgR1VUVEVSX1JPVyxLIGFzIEpVU1RJRllfQ0VOVEVSLEwgYXMgSlVTVElGWV9GTEVYX0VORCxKIGFzIEpVU1RJRllfRkxFWF9TVEFSVCxOIGFzIEpVU1RJRllfU1BBQ0VfQVJPVU5ELE0gYXMgSlVTVElGWV9TUEFDRV9CRVRXRUVOLE8gYXMgSlVTVElGWV9TUEFDRV9FVkVOTFksUyBhcyBMT0dfTEVWRUxfREVCVUcsUCBhcyBMT0dfTEVWRUxfRVJST1IsVSBhcyBMT0dfTEVWRUxfRkFUQUwsUiBhcyBMT0dfTEVWRUxfSU5GTyxUIGFzIExPR19MRVZFTF9WRVJCT1NFLFEgYXMgTE9HX0xFVkVMX1dBUk4sWCBhcyBNRUFTVVJFX01PREVfQVRfTU9TVCxXIGFzIE1FQVNVUkVfTU9ERV9FWEFDVExZLFYgYXMgTUVBU1VSRV9NT0RFX1VOREVGSU5FRCxZIGFzIE5PREVfVFlQRV9ERUZBVUxULFogYXMgTk9ERV9UWVBFX1RFWFQsJCBhcyBPVkVSRkxPV19ISURERU4sYTAgYXMgT1ZFUkZMT1dfU0NST0xMLF8gYXMgT1ZFUkZMT1dfVklTSUJMRSxhMyBhcyBQT1NJVElPTl9UWVBFX0FCU09MVVRFLGEyIGFzIFBPU0lUSU9OX1RZUEVfUkVMQVRJVkUsYTEgYXMgUE9TSVRJT05fVFlQRV9TVEFUSUMsYTYgYXMgUFJJTlRfT1BUSU9OU19DSElMRFJFTixhNCBhcyBQUklOVF9PUFRJT05TX0xBWU9VVCxhNSBhcyBQUklOVF9PUFRJT05TX1NUWUxFLGFhIGFzIFVOSVRfQVVUTyxhOSBhcyBVTklUX1BFUkNFTlQsYTggYXMgVU5JVF9QT0lOVCxhNyBhcyBVTklUX1VOREVGSU5FRCxhYiBhcyBXUkFQX05PX1dSQVAsYWMgYXMgV1JBUF9XUkFQLGFkIGFzIFdSQVBfV1JBUF9SRVZFUlNFfWZyb21cIi4vd3JhcEFzbS1mNzY2Zjk3Zi5qc1wiO2xldCBZb2dhPWF3YWl0IGEoYXdhaXQgRShfKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcIi4veW9nYS53YXNtXCIpKSk7ZXhwb3J0e1lvZ2EgYXMgZGVmYXVsdH07XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFuc2lSZWdleCh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pIHtcblx0Ly8gVmFsaWQgc3RyaW5nIHRlcm1pbmF0b3Igc2VxdWVuY2VzIGFyZSBCRUwsIEVTQ1xcLCBhbmQgMHg5Y1xuXHRjb25zdCBTVCA9ICcoPzpcXFxcdTAwMDd8XFxcXHUwMDFCXFxcXHUwMDVDfFxcXFx1MDA5QyknO1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHRcdGBbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT8ke1NUfSlgLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW5xLXV5PT48fl0pKScsXG5cdF0uam9pbignfCcpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59XG4iLAogICAgImltcG9ydCBhbnNpUmVnZXggZnJvbSAnYW5zaS1yZWdleCc7XG5cbmNvbnN0IHJlZ2V4ID0gYW5zaVJlZ2V4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwQW5zaShzdHJpbmcpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYCk7XG5cdH1cblxuXHQvLyBFdmVuIHRob3VnaCB0aGUgcmVnZXggaXMgZ2xvYmFsLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBgLmxhc3RJbmRleGBcblx0Ly8gYmVjYXVzZSB1bmxpa2UgYC5leGVjKClgIGFuZCBgLnRlc3QoKWAsIGAucmVwbGFjZSgpYCBkb2VzIGl0IGF1dG9tYXRpY2FsbHlcblx0Ly8gYW5kIGRvaW5nIGl0IG1hbnVhbGx5IGhhcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xufVxuIiwKICAgICIvLyBHZW5lcmF0ZWQgY29kZS5cblxuZnVuY3Rpb24gaXNBbWJpZ3VvdXMoeCkge1xuXHRyZXR1cm4geCA9PT0gMHhBMVxuXHRcdHx8IHggPT09IDB4QTRcblx0XHR8fCB4ID09PSAweEE3XG5cdFx0fHwgeCA9PT0gMHhBOFxuXHRcdHx8IHggPT09IDB4QUFcblx0XHR8fCB4ID09PSAweEFEXG5cdFx0fHwgeCA9PT0gMHhBRVxuXHRcdHx8IHggPj0gMHhCMCAmJiB4IDw9IDB4QjRcblx0XHR8fCB4ID49IDB4QjYgJiYgeCA8PSAweEJBXG5cdFx0fHwgeCA+PSAweEJDICYmIHggPD0gMHhCRlxuXHRcdHx8IHggPT09IDB4QzZcblx0XHR8fCB4ID09PSAweEQwXG5cdFx0fHwgeCA9PT0gMHhEN1xuXHRcdHx8IHggPT09IDB4RDhcblx0XHR8fCB4ID49IDB4REUgJiYgeCA8PSAweEUxXG5cdFx0fHwgeCA9PT0gMHhFNlxuXHRcdHx8IHggPj0gMHhFOCAmJiB4IDw9IDB4RUFcblx0XHR8fCB4ID09PSAweEVDXG5cdFx0fHwgeCA9PT0gMHhFRFxuXHRcdHx8IHggPT09IDB4RjBcblx0XHR8fCB4ID09PSAweEYyXG5cdFx0fHwgeCA9PT0gMHhGM1xuXHRcdHx8IHggPj0gMHhGNyAmJiB4IDw9IDB4RkFcblx0XHR8fCB4ID09PSAweEZDXG5cdFx0fHwgeCA9PT0gMHhGRVxuXHRcdHx8IHggPT09IDB4MTAxXG5cdFx0fHwgeCA9PT0gMHgxMTFcblx0XHR8fCB4ID09PSAweDExM1xuXHRcdHx8IHggPT09IDB4MTFCXG5cdFx0fHwgeCA9PT0gMHgxMjZcblx0XHR8fCB4ID09PSAweDEyN1xuXHRcdHx8IHggPT09IDB4MTJCXG5cdFx0fHwgeCA+PSAweDEzMSAmJiB4IDw9IDB4MTMzXG5cdFx0fHwgeCA9PT0gMHgxMzhcblx0XHR8fCB4ID49IDB4MTNGICYmIHggPD0gMHgxNDJcblx0XHR8fCB4ID09PSAweDE0NFxuXHRcdHx8IHggPj0gMHgxNDggJiYgeCA8PSAweDE0QlxuXHRcdHx8IHggPT09IDB4MTREXG5cdFx0fHwgeCA9PT0gMHgxNTJcblx0XHR8fCB4ID09PSAweDE1M1xuXHRcdHx8IHggPT09IDB4MTY2XG5cdFx0fHwgeCA9PT0gMHgxNjdcblx0XHR8fCB4ID09PSAweDE2QlxuXHRcdHx8IHggPT09IDB4MUNFXG5cdFx0fHwgeCA9PT0gMHgxRDBcblx0XHR8fCB4ID09PSAweDFEMlxuXHRcdHx8IHggPT09IDB4MUQ0XG5cdFx0fHwgeCA9PT0gMHgxRDZcblx0XHR8fCB4ID09PSAweDFEOFxuXHRcdHx8IHggPT09IDB4MURBXG5cdFx0fHwgeCA9PT0gMHgxRENcblx0XHR8fCB4ID09PSAweDI1MVxuXHRcdHx8IHggPT09IDB4MjYxXG5cdFx0fHwgeCA9PT0gMHgyQzRcblx0XHR8fCB4ID09PSAweDJDN1xuXHRcdHx8IHggPj0gMHgyQzkgJiYgeCA8PSAweDJDQlxuXHRcdHx8IHggPT09IDB4MkNEXG5cdFx0fHwgeCA9PT0gMHgyRDBcblx0XHR8fCB4ID49IDB4MkQ4ICYmIHggPD0gMHgyREJcblx0XHR8fCB4ID09PSAweDJERFxuXHRcdHx8IHggPT09IDB4MkRGXG5cdFx0fHwgeCA+PSAweDMwMCAmJiB4IDw9IDB4MzZGXG5cdFx0fHwgeCA+PSAweDM5MSAmJiB4IDw9IDB4M0ExXG5cdFx0fHwgeCA+PSAweDNBMyAmJiB4IDw9IDB4M0E5XG5cdFx0fHwgeCA+PSAweDNCMSAmJiB4IDw9IDB4M0MxXG5cdFx0fHwgeCA+PSAweDNDMyAmJiB4IDw9IDB4M0M5XG5cdFx0fHwgeCA9PT0gMHg0MDFcblx0XHR8fCB4ID49IDB4NDEwICYmIHggPD0gMHg0NEZcblx0XHR8fCB4ID09PSAweDQ1MVxuXHRcdHx8IHggPT09IDB4MjAxMFxuXHRcdHx8IHggPj0gMHgyMDEzICYmIHggPD0gMHgyMDE2XG5cdFx0fHwgeCA9PT0gMHgyMDE4XG5cdFx0fHwgeCA9PT0gMHgyMDE5XG5cdFx0fHwgeCA9PT0gMHgyMDFDXG5cdFx0fHwgeCA9PT0gMHgyMDFEXG5cdFx0fHwgeCA+PSAweDIwMjAgJiYgeCA8PSAweDIwMjJcblx0XHR8fCB4ID49IDB4MjAyNCAmJiB4IDw9IDB4MjAyN1xuXHRcdHx8IHggPT09IDB4MjAzMFxuXHRcdHx8IHggPT09IDB4MjAzMlxuXHRcdHx8IHggPT09IDB4MjAzM1xuXHRcdHx8IHggPT09IDB4MjAzNVxuXHRcdHx8IHggPT09IDB4MjAzQlxuXHRcdHx8IHggPT09IDB4MjAzRVxuXHRcdHx8IHggPT09IDB4MjA3NFxuXHRcdHx8IHggPT09IDB4MjA3RlxuXHRcdHx8IHggPj0gMHgyMDgxICYmIHggPD0gMHgyMDg0XG5cdFx0fHwgeCA9PT0gMHgyMEFDXG5cdFx0fHwgeCA9PT0gMHgyMTAzXG5cdFx0fHwgeCA9PT0gMHgyMTA1XG5cdFx0fHwgeCA9PT0gMHgyMTA5XG5cdFx0fHwgeCA9PT0gMHgyMTEzXG5cdFx0fHwgeCA9PT0gMHgyMTE2XG5cdFx0fHwgeCA9PT0gMHgyMTIxXG5cdFx0fHwgeCA9PT0gMHgyMTIyXG5cdFx0fHwgeCA9PT0gMHgyMTI2XG5cdFx0fHwgeCA9PT0gMHgyMTJCXG5cdFx0fHwgeCA9PT0gMHgyMTUzXG5cdFx0fHwgeCA9PT0gMHgyMTU0XG5cdFx0fHwgeCA+PSAweDIxNUIgJiYgeCA8PSAweDIxNUVcblx0XHR8fCB4ID49IDB4MjE2MCAmJiB4IDw9IDB4MjE2QlxuXHRcdHx8IHggPj0gMHgyMTcwICYmIHggPD0gMHgyMTc5XG5cdFx0fHwgeCA9PT0gMHgyMTg5XG5cdFx0fHwgeCA+PSAweDIxOTAgJiYgeCA8PSAweDIxOTlcblx0XHR8fCB4ID09PSAweDIxQjhcblx0XHR8fCB4ID09PSAweDIxQjlcblx0XHR8fCB4ID09PSAweDIxRDJcblx0XHR8fCB4ID09PSAweDIxRDRcblx0XHR8fCB4ID09PSAweDIxRTdcblx0XHR8fCB4ID09PSAweDIyMDBcblx0XHR8fCB4ID09PSAweDIyMDJcblx0XHR8fCB4ID09PSAweDIyMDNcblx0XHR8fCB4ID09PSAweDIyMDdcblx0XHR8fCB4ID09PSAweDIyMDhcblx0XHR8fCB4ID09PSAweDIyMEJcblx0XHR8fCB4ID09PSAweDIyMEZcblx0XHR8fCB4ID09PSAweDIyMTFcblx0XHR8fCB4ID09PSAweDIyMTVcblx0XHR8fCB4ID09PSAweDIyMUFcblx0XHR8fCB4ID49IDB4MjIxRCAmJiB4IDw9IDB4MjIyMFxuXHRcdHx8IHggPT09IDB4MjIyM1xuXHRcdHx8IHggPT09IDB4MjIyNVxuXHRcdHx8IHggPj0gMHgyMjI3ICYmIHggPD0gMHgyMjJDXG5cdFx0fHwgeCA9PT0gMHgyMjJFXG5cdFx0fHwgeCA+PSAweDIyMzQgJiYgeCA8PSAweDIyMzdcblx0XHR8fCB4ID09PSAweDIyM0Ncblx0XHR8fCB4ID09PSAweDIyM0Rcblx0XHR8fCB4ID09PSAweDIyNDhcblx0XHR8fCB4ID09PSAweDIyNENcblx0XHR8fCB4ID09PSAweDIyNTJcblx0XHR8fCB4ID09PSAweDIyNjBcblx0XHR8fCB4ID09PSAweDIyNjFcblx0XHR8fCB4ID49IDB4MjI2NCAmJiB4IDw9IDB4MjI2N1xuXHRcdHx8IHggPT09IDB4MjI2QVxuXHRcdHx8IHggPT09IDB4MjI2QlxuXHRcdHx8IHggPT09IDB4MjI2RVxuXHRcdHx8IHggPT09IDB4MjI2RlxuXHRcdHx8IHggPT09IDB4MjI4MlxuXHRcdHx8IHggPT09IDB4MjI4M1xuXHRcdHx8IHggPT09IDB4MjI4NlxuXHRcdHx8IHggPT09IDB4MjI4N1xuXHRcdHx8IHggPT09IDB4MjI5NVxuXHRcdHx8IHggPT09IDB4MjI5OVxuXHRcdHx8IHggPT09IDB4MjJBNVxuXHRcdHx8IHggPT09IDB4MjJCRlxuXHRcdHx8IHggPT09IDB4MjMxMlxuXHRcdHx8IHggPj0gMHgyNDYwICYmIHggPD0gMHgyNEU5XG5cdFx0fHwgeCA+PSAweDI0RUIgJiYgeCA8PSAweDI1NEJcblx0XHR8fCB4ID49IDB4MjU1MCAmJiB4IDw9IDB4MjU3M1xuXHRcdHx8IHggPj0gMHgyNTgwICYmIHggPD0gMHgyNThGXG5cdFx0fHwgeCA+PSAweDI1OTIgJiYgeCA8PSAweDI1OTVcblx0XHR8fCB4ID09PSAweDI1QTBcblx0XHR8fCB4ID09PSAweDI1QTFcblx0XHR8fCB4ID49IDB4MjVBMyAmJiB4IDw9IDB4MjVBOVxuXHRcdHx8IHggPT09IDB4MjVCMlxuXHRcdHx8IHggPT09IDB4MjVCM1xuXHRcdHx8IHggPT09IDB4MjVCNlxuXHRcdHx8IHggPT09IDB4MjVCN1xuXHRcdHx8IHggPT09IDB4MjVCQ1xuXHRcdHx8IHggPT09IDB4MjVCRFxuXHRcdHx8IHggPT09IDB4MjVDMFxuXHRcdHx8IHggPT09IDB4MjVDMVxuXHRcdHx8IHggPj0gMHgyNUM2ICYmIHggPD0gMHgyNUM4XG5cdFx0fHwgeCA9PT0gMHgyNUNCXG5cdFx0fHwgeCA+PSAweDI1Q0UgJiYgeCA8PSAweDI1RDFcblx0XHR8fCB4ID49IDB4MjVFMiAmJiB4IDw9IDB4MjVFNVxuXHRcdHx8IHggPT09IDB4MjVFRlxuXHRcdHx8IHggPT09IDB4MjYwNVxuXHRcdHx8IHggPT09IDB4MjYwNlxuXHRcdHx8IHggPT09IDB4MjYwOVxuXHRcdHx8IHggPT09IDB4MjYwRVxuXHRcdHx8IHggPT09IDB4MjYwRlxuXHRcdHx8IHggPT09IDB4MjYxQ1xuXHRcdHx8IHggPT09IDB4MjYxRVxuXHRcdHx8IHggPT09IDB4MjY0MFxuXHRcdHx8IHggPT09IDB4MjY0MlxuXHRcdHx8IHggPT09IDB4MjY2MFxuXHRcdHx8IHggPT09IDB4MjY2MVxuXHRcdHx8IHggPj0gMHgyNjYzICYmIHggPD0gMHgyNjY1XG5cdFx0fHwgeCA+PSAweDI2NjcgJiYgeCA8PSAweDI2NkFcblx0XHR8fCB4ID09PSAweDI2NkNcblx0XHR8fCB4ID09PSAweDI2NkRcblx0XHR8fCB4ID09PSAweDI2NkZcblx0XHR8fCB4ID09PSAweDI2OUVcblx0XHR8fCB4ID09PSAweDI2OUZcblx0XHR8fCB4ID09PSAweDI2QkZcblx0XHR8fCB4ID49IDB4MjZDNiAmJiB4IDw9IDB4MjZDRFxuXHRcdHx8IHggPj0gMHgyNkNGICYmIHggPD0gMHgyNkQzXG5cdFx0fHwgeCA+PSAweDI2RDUgJiYgeCA8PSAweDI2RTFcblx0XHR8fCB4ID09PSAweDI2RTNcblx0XHR8fCB4ID09PSAweDI2RThcblx0XHR8fCB4ID09PSAweDI2RTlcblx0XHR8fCB4ID49IDB4MjZFQiAmJiB4IDw9IDB4MjZGMVxuXHRcdHx8IHggPT09IDB4MjZGNFxuXHRcdHx8IHggPj0gMHgyNkY2ICYmIHggPD0gMHgyNkY5XG5cdFx0fHwgeCA9PT0gMHgyNkZCXG5cdFx0fHwgeCA9PT0gMHgyNkZDXG5cdFx0fHwgeCA9PT0gMHgyNkZFXG5cdFx0fHwgeCA9PT0gMHgyNkZGXG5cdFx0fHwgeCA9PT0gMHgyNzNEXG5cdFx0fHwgeCA+PSAweDI3NzYgJiYgeCA8PSAweDI3N0Zcblx0XHR8fCB4ID49IDB4MkI1NiAmJiB4IDw9IDB4MkI1OVxuXHRcdHx8IHggPj0gMHgzMjQ4ICYmIHggPD0gMHgzMjRGXG5cdFx0fHwgeCA+PSAweEUwMDAgJiYgeCA8PSAweEY4RkZcblx0XHR8fCB4ID49IDB4RkUwMCAmJiB4IDw9IDB4RkUwRlxuXHRcdHx8IHggPT09IDB4RkZGRFxuXHRcdHx8IHggPj0gMHgxRjEwMCAmJiB4IDw9IDB4MUYxMEFcblx0XHR8fCB4ID49IDB4MUYxMTAgJiYgeCA8PSAweDFGMTJEXG5cdFx0fHwgeCA+PSAweDFGMTMwICYmIHggPD0gMHgxRjE2OVxuXHRcdHx8IHggPj0gMHgxRjE3MCAmJiB4IDw9IDB4MUYxOERcblx0XHR8fCB4ID09PSAweDFGMThGXG5cdFx0fHwgeCA9PT0gMHgxRjE5MFxuXHRcdHx8IHggPj0gMHgxRjE5QiAmJiB4IDw9IDB4MUYxQUNcblx0XHR8fCB4ID49IDB4RTAxMDAgJiYgeCA8PSAweEUwMUVGXG5cdFx0fHwgeCA+PSAweEYwMDAwICYmIHggPD0gMHhGRkZGRFxuXHRcdHx8IHggPj0gMHgxMDAwMDAgJiYgeCA8PSAweDEwRkZGRDtcbn1cblxuZnVuY3Rpb24gaXNGdWxsV2lkdGgoeCkge1xuXHRyZXR1cm4geCA9PT0gMHgzMDAwXG5cdFx0fHwgeCA+PSAweEZGMDEgJiYgeCA8PSAweEZGNjBcblx0XHR8fCB4ID49IDB4RkZFMCAmJiB4IDw9IDB4RkZFNjtcbn1cblxuZnVuY3Rpb24gaXNXaWRlKHgpIHtcblx0cmV0dXJuIHggPj0gMHgxMTAwICYmIHggPD0gMHgxMTVGXG5cdFx0fHwgeCA9PT0gMHgyMzFBXG5cdFx0fHwgeCA9PT0gMHgyMzFCXG5cdFx0fHwgeCA9PT0gMHgyMzI5XG5cdFx0fHwgeCA9PT0gMHgyMzJBXG5cdFx0fHwgeCA+PSAweDIzRTkgJiYgeCA8PSAweDIzRUNcblx0XHR8fCB4ID09PSAweDIzRjBcblx0XHR8fCB4ID09PSAweDIzRjNcblx0XHR8fCB4ID09PSAweDI1RkRcblx0XHR8fCB4ID09PSAweDI1RkVcblx0XHR8fCB4ID09PSAweDI2MTRcblx0XHR8fCB4ID09PSAweDI2MTVcblx0XHR8fCB4ID49IDB4MjYzMCAmJiB4IDw9IDB4MjYzN1xuXHRcdHx8IHggPj0gMHgyNjQ4ICYmIHggPD0gMHgyNjUzXG5cdFx0fHwgeCA9PT0gMHgyNjdGXG5cdFx0fHwgeCA+PSAweDI2OEEgJiYgeCA8PSAweDI2OEZcblx0XHR8fCB4ID09PSAweDI2OTNcblx0XHR8fCB4ID09PSAweDI2QTFcblx0XHR8fCB4ID09PSAweDI2QUFcblx0XHR8fCB4ID09PSAweDI2QUJcblx0XHR8fCB4ID09PSAweDI2QkRcblx0XHR8fCB4ID09PSAweDI2QkVcblx0XHR8fCB4ID09PSAweDI2QzRcblx0XHR8fCB4ID09PSAweDI2QzVcblx0XHR8fCB4ID09PSAweDI2Q0Vcblx0XHR8fCB4ID09PSAweDI2RDRcblx0XHR8fCB4ID09PSAweDI2RUFcblx0XHR8fCB4ID09PSAweDI2RjJcblx0XHR8fCB4ID09PSAweDI2RjNcblx0XHR8fCB4ID09PSAweDI2RjVcblx0XHR8fCB4ID09PSAweDI2RkFcblx0XHR8fCB4ID09PSAweDI2RkRcblx0XHR8fCB4ID09PSAweDI3MDVcblx0XHR8fCB4ID09PSAweDI3MEFcblx0XHR8fCB4ID09PSAweDI3MEJcblx0XHR8fCB4ID09PSAweDI3Mjhcblx0XHR8fCB4ID09PSAweDI3NENcblx0XHR8fCB4ID09PSAweDI3NEVcblx0XHR8fCB4ID49IDB4Mjc1MyAmJiB4IDw9IDB4Mjc1NVxuXHRcdHx8IHggPT09IDB4Mjc1N1xuXHRcdHx8IHggPj0gMHgyNzk1ICYmIHggPD0gMHgyNzk3XG5cdFx0fHwgeCA9PT0gMHgyN0IwXG5cdFx0fHwgeCA9PT0gMHgyN0JGXG5cdFx0fHwgeCA9PT0gMHgyQjFCXG5cdFx0fHwgeCA9PT0gMHgyQjFDXG5cdFx0fHwgeCA9PT0gMHgyQjUwXG5cdFx0fHwgeCA9PT0gMHgyQjU1XG5cdFx0fHwgeCA+PSAweDJFODAgJiYgeCA8PSAweDJFOTlcblx0XHR8fCB4ID49IDB4MkU5QiAmJiB4IDw9IDB4MkVGM1xuXHRcdHx8IHggPj0gMHgyRjAwICYmIHggPD0gMHgyRkQ1XG5cdFx0fHwgeCA+PSAweDJGRjAgJiYgeCA8PSAweDJGRkZcblx0XHR8fCB4ID49IDB4MzAwMSAmJiB4IDw9IDB4MzAzRVxuXHRcdHx8IHggPj0gMHgzMDQxICYmIHggPD0gMHgzMDk2XG5cdFx0fHwgeCA+PSAweDMwOTkgJiYgeCA8PSAweDMwRkZcblx0XHR8fCB4ID49IDB4MzEwNSAmJiB4IDw9IDB4MzEyRlxuXHRcdHx8IHggPj0gMHgzMTMxICYmIHggPD0gMHgzMThFXG5cdFx0fHwgeCA+PSAweDMxOTAgJiYgeCA8PSAweDMxRTVcblx0XHR8fCB4ID49IDB4MzFFRiAmJiB4IDw9IDB4MzIxRVxuXHRcdHx8IHggPj0gMHgzMjIwICYmIHggPD0gMHgzMjQ3XG5cdFx0fHwgeCA+PSAweDMyNTAgJiYgeCA8PSAweEE0OENcblx0XHR8fCB4ID49IDB4QTQ5MCAmJiB4IDw9IDB4QTRDNlxuXHRcdHx8IHggPj0gMHhBOTYwICYmIHggPD0gMHhBOTdDXG5cdFx0fHwgeCA+PSAweEFDMDAgJiYgeCA8PSAweEQ3QTNcblx0XHR8fCB4ID49IDB4RjkwMCAmJiB4IDw9IDB4RkFGRlxuXHRcdHx8IHggPj0gMHhGRTEwICYmIHggPD0gMHhGRTE5XG5cdFx0fHwgeCA+PSAweEZFMzAgJiYgeCA8PSAweEZFNTJcblx0XHR8fCB4ID49IDB4RkU1NCAmJiB4IDw9IDB4RkU2NlxuXHRcdHx8IHggPj0gMHhGRTY4ICYmIHggPD0gMHhGRTZCXG5cdFx0fHwgeCA+PSAweDE2RkUwICYmIHggPD0gMHgxNkZFNFxuXHRcdHx8IHggPT09IDB4MTZGRjBcblx0XHR8fCB4ID09PSAweDE2RkYxXG5cdFx0fHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxODdGN1xuXHRcdHx8IHggPj0gMHgxODgwMCAmJiB4IDw9IDB4MThDRDVcblx0XHR8fCB4ID49IDB4MThDRkYgJiYgeCA8PSAweDE4RDA4XG5cdFx0fHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGM1xuXHRcdHx8IHggPj0gMHgxQUZGNSAmJiB4IDw9IDB4MUFGRkJcblx0XHR8fCB4ID09PSAweDFBRkZEXG5cdFx0fHwgeCA9PT0gMHgxQUZGRVxuXHRcdHx8IHggPj0gMHgxQjAwMCAmJiB4IDw9IDB4MUIxMjJcblx0XHR8fCB4ID09PSAweDFCMTMyXG5cdFx0fHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MlxuXHRcdHx8IHggPT09IDB4MUIxNTVcblx0XHR8fCB4ID49IDB4MUIxNjQgJiYgeCA8PSAweDFCMTY3XG5cdFx0fHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQlxuXHRcdHx8IHggPj0gMHgxRDMwMCAmJiB4IDw9IDB4MUQzNTZcblx0XHR8fCB4ID49IDB4MUQzNjAgJiYgeCA8PSAweDFEMzc2XG5cdFx0fHwgeCA9PT0gMHgxRjAwNFxuXHRcdHx8IHggPT09IDB4MUYwQ0Zcblx0XHR8fCB4ID09PSAweDFGMThFXG5cdFx0fHwgeCA+PSAweDFGMTkxICYmIHggPD0gMHgxRjE5QVxuXHRcdHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDJcblx0XHR8fCB4ID49IDB4MUYyMTAgJiYgeCA8PSAweDFGMjNCXG5cdFx0fHwgeCA+PSAweDFGMjQwICYmIHggPD0gMHgxRjI0OFxuXHRcdHx8IHggPT09IDB4MUYyNTBcblx0XHR8fCB4ID09PSAweDFGMjUxXG5cdFx0fHwgeCA+PSAweDFGMjYwICYmIHggPD0gMHgxRjI2NVxuXHRcdHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjBcblx0XHR8fCB4ID49IDB4MUYzMkQgJiYgeCA8PSAweDFGMzM1XG5cdFx0fHwgeCA+PSAweDFGMzM3ICYmIHggPD0gMHgxRjM3Q1xuXHRcdHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTNcblx0XHR8fCB4ID49IDB4MUYzQTAgJiYgeCA8PSAweDFGM0NBXG5cdFx0fHwgeCA+PSAweDFGM0NGICYmIHggPD0gMHgxRjNEM1xuXHRcdHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjBcblx0XHR8fCB4ID09PSAweDFGM0Y0XG5cdFx0fHwgeCA+PSAweDFGM0Y4ICYmIHggPD0gMHgxRjQzRVxuXHRcdHx8IHggPT09IDB4MUY0NDBcblx0XHR8fCB4ID49IDB4MUY0NDIgJiYgeCA8PSAweDFGNEZDXG5cdFx0fHwgeCA+PSAweDFGNEZGICYmIHggPD0gMHgxRjUzRFxuXHRcdHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEVcblx0XHR8fCB4ID49IDB4MUY1NTAgJiYgeCA8PSAweDFGNTY3XG5cdFx0fHwgeCA9PT0gMHgxRjU3QVxuXHRcdHx8IHggPT09IDB4MUY1OTVcblx0XHR8fCB4ID09PSAweDFGNTk2XG5cdFx0fHwgeCA9PT0gMHgxRjVBNFxuXHRcdHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEZcblx0XHR8fCB4ID49IDB4MUY2ODAgJiYgeCA8PSAweDFGNkM1XG5cdFx0fHwgeCA9PT0gMHgxRjZDQ1xuXHRcdHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDJcblx0XHR8fCB4ID49IDB4MUY2RDUgJiYgeCA8PSAweDFGNkQ3XG5cdFx0fHwgeCA+PSAweDFGNkRDICYmIHggPD0gMHgxRjZERlxuXHRcdHx8IHggPT09IDB4MUY2RUJcblx0XHR8fCB4ID09PSAweDFGNkVDXG5cdFx0fHwgeCA+PSAweDFGNkY0ICYmIHggPD0gMHgxRjZGQ1xuXHRcdHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUJcblx0XHR8fCB4ID09PSAweDFGN0YwXG5cdFx0fHwgeCA+PSAweDFGOTBDICYmIHggPD0gMHgxRjkzQVxuXHRcdHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDVcblx0XHR8fCB4ID49IDB4MUY5NDcgJiYgeCA8PSAweDFGOUZGXG5cdFx0fHwgeCA+PSAweDFGQTcwICYmIHggPD0gMHgxRkE3Q1xuXHRcdHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBODlcblx0XHR8fCB4ID49IDB4MUZBOEYgJiYgeCA8PSAweDFGQUM2XG5cdFx0fHwgeCA+PSAweDFGQUNFICYmIHggPD0gMHgxRkFEQ1xuXHRcdHx8IHggPj0gMHgxRkFERiAmJiB4IDw9IDB4MUZBRTlcblx0XHR8fCB4ID49IDB4MUZBRjAgJiYgeCA8PSAweDFGQUY4XG5cdFx0fHwgeCA+PSAweDIwMDAwICYmIHggPD0gMHgyRkZGRFxuXHRcdHx8IHggPj0gMHgzMDAwMCAmJiB4IDw9IDB4M0ZGRkQ7XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3J5KHgpIHtcblx0aWYgKGlzQW1iaWd1b3VzKHgpKSByZXR1cm4gJ2FtYmlndW91cyc7XG5cblx0aWYgKGlzRnVsbFdpZHRoKHgpKSByZXR1cm4gJ2Z1bGx3aWR0aCc7XG5cblx0aWYgKFxuXHRcdHggPT09IDB4MjBBOVxuXHRcdHx8IHggPj0gMHhGRjYxICYmIHggPD0gMHhGRkJFXG5cdFx0fHwgeCA+PSAweEZGQzIgJiYgeCA8PSAweEZGQzdcblx0XHR8fCB4ID49IDB4RkZDQSAmJiB4IDw9IDB4RkZDRlxuXHRcdHx8IHggPj0gMHhGRkQyICYmIHggPD0gMHhGRkQ3XG5cdFx0fHwgeCA+PSAweEZGREEgJiYgeCA8PSAweEZGRENcblx0XHR8fCB4ID49IDB4RkZFOCAmJiB4IDw9IDB4RkZFRVxuXHQpIHtcblx0XHRyZXR1cm4gJ2hhbGZ3aWR0aCc7XG5cdH1cblxuXHRpZiAoXG5cdFx0eCA+PSAweDIwICYmIHggPD0gMHg3RVxuXHRcdHx8IHggPT09IDB4QTJcblx0XHR8fCB4ID09PSAweEEzXG5cdFx0fHwgeCA9PT0gMHhBNVxuXHRcdHx8IHggPT09IDB4QTZcblx0XHR8fCB4ID09PSAweEFDXG5cdFx0fHwgeCA9PT0gMHhBRlxuXHRcdHx8IHggPj0gMHgyN0U2ICYmIHggPD0gMHgyN0VEXG5cdFx0fHwgeCA9PT0gMHgyOTg1XG5cdFx0fHwgeCA9PT0gMHgyOTg2XG5cdCkge1xuXHRcdHJldHVybiAnbmFycm93Jztcblx0fVxuXG5cdGlmIChpc1dpZGUoeCkpIHJldHVybiAnd2lkZSc7XG5cblx0cmV0dXJuICduZXV0cmFsJztcbn1cblxuZXhwb3J0IHtpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZSwgZ2V0Q2F0ZWdvcnl9O1xuIiwKICAgICJpbXBvcnQge2dldENhdGVnb3J5LCBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZX0gZnJvbSAnLi9sb29rdXAuanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShjb2RlUG9pbnQpIHtcblx0aWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2RlUG9pbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBjb2RlIHBvaW50LCBnb3QgXFxgJHt0eXBlb2YgY29kZVBvaW50fVxcYC5gKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGhUeXBlKGNvZGVQb2ludCkge1xuXHR2YWxpZGF0ZShjb2RlUG9pbnQpO1xuXG5cdHJldHVybiBnZXRDYXRlZ29yeShjb2RlUG9pbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGgoY29kZVBvaW50LCB7YW1iaWd1b3VzQXNXaWRlID0gZmFsc2V9ID0ge30pIHtcblx0dmFsaWRhdGUoY29kZVBvaW50KTtcblxuXHRpZiAoXG5cdFx0aXNGdWxsV2lkdGgoY29kZVBvaW50KVxuXHRcdHx8IGlzV2lkZShjb2RlUG9pbnQpXG5cdFx0fHwgKGFtYmlndW91c0FzV2lkZSAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKVxuXHQpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdHJldHVybiAxO1xufVxuXG4vLyBGb3IgUHJldHRpZXIuIFRoaXMgZG9lc24ndCBjb3VudCBcImFtYmlndW91c1wiIGNoYXJhY3RlcnMgb3IgY2hlY2sgZm9yIHZhbGlkIGlucHV0LlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nZXQtZWFzdC1hc2lhbi13aWR0aC9wdWxsLzZcbmV4cG9ydCBjb25zdCBfaXNOYXJyb3dXaWR0aCA9IGNvZGVQb2ludCA9PiAhKGlzRnVsbFdpZHRoKGNvZGVQb2ludCkgfHwgaXNXaWRlKGNvZGVQb2ludCkpO1xuIiwKICAgICJpbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IHtlYXN0QXNpYW5XaWR0aH0gZnJvbSAnZ2V0LWVhc3QtYXNpYW4td2lkdGgnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuXG5jb25zdCBzZWdtZW50ZXIgPSBuZXcgSW50bC5TZWdtZW50ZXIoKTtcblxuY29uc3QgZGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludFJlZ2V4ID0gL15cXHB7RGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludH0kL3U7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cmluZywgb3B0aW9ucyA9IHt9KSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCB7XG5cdFx0YW1iaWd1b3VzSXNOYXJyb3cgPSB0cnVlLFxuXHRcdGNvdW50QW5zaUVzY2FwZUNvZGVzID0gZmFsc2UsXG5cdH0gPSBvcHRpb25zO1xuXG5cdGlmICghY291bnRBbnNpRXNjYXBlQ29kZXMpIHtcblx0XHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblx0fVxuXG5cdGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRsZXQgd2lkdGggPSAwO1xuXHRjb25zdCBlYXN0QXNpYW5XaWR0aE9wdGlvbnMgPSB7YW1iaWd1b3VzQXNXaWRlOiAhYW1iaWd1b3VzSXNOYXJyb3d9O1xuXG5cdGZvciAoY29uc3Qge3NlZ21lbnQ6IGNoYXJhY3Rlcn0gb2Ygc2VnbWVudGVyLnNlZ21lbnQoc3RyaW5nKSkge1xuXHRcdGNvbnN0IGNvZGVQb2ludCA9IGNoYXJhY3Rlci5jb2RlUG9pbnRBdCgwKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZVBvaW50IDw9IDB4MUYgfHwgKGNvZGVQb2ludCA+PSAweDdGICYmIGNvZGVQb2ludCA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIHplcm8td2lkdGggY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgyMF8wQiAmJiBjb2RlUG9pbnQgPD0gMHgyMF8wRikgLy8gWmVyby13aWR0aCBzcGFjZSwgbm9uLWpvaW5lciwgam9pbmVyLCBsZWZ0LXRvLXJpZ2h0IG1hcmssIHJpZ2h0LXRvLWxlZnQgbWFya1xuXHRcdFx0fHwgY29kZVBvaW50ID09PSAweEZFX0ZGIC8vIFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2Vcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgzXzAwICYmIGNvZGVQb2ludCA8PSAweDNfNkYpIC8vIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc1xuXHRcdFx0fHwgKGNvZGVQb2ludCA+PSAweDFBX0IwICYmIGNvZGVQb2ludCA8PSAweDFBX0ZGKSAvLyBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZXh0ZW5kZWRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgxRF9DMCAmJiBjb2RlUG9pbnQgPD0gMHgxRF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIHN1cHBsZW1lbnRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgyMF9EMCAmJiBjb2RlUG9pbnQgPD0gMHgyMF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXG5cdFx0XHR8fCAoY29kZVBvaW50ID49IDB4RkVfMjAgJiYgY29kZVBvaW50IDw9IDB4RkVfMkYpIC8vIENvbWJpbmluZyBoYWxmIG1hcmtzXG5cdFx0KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgc3Vycm9nYXRlIHBhaXJzXG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweEQ4XzAwICYmIGNvZGVQb2ludCA8PSAweERGX0ZGKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgdmFyaWF0aW9uIHNlbGVjdG9yc1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHhGRV8wMCAmJiBjb2RlUG9pbnQgPD0gMHhGRV8wRikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gVGhpcyBjb3ZlcnMgc29tZSBvZiB0aGUgYWJvdmUgY2FzZXMsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZW0gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG5cdFx0aWYgKGRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleC50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFRPRE86IFVzZSBgL1xccHtSR0lfRW1vaml9L3ZgIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMjAuXG5cdFx0aWYgKGVtb2ppUmVnZXgoKS50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR3aWR0aCArPSBlYXN0QXNpYW5XaWR0aChjb2RlUG9pbnQsIGVhc3RBc2lhbldpZHRoT3B0aW9ucyk7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59XG4iLAogICAgImltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnO1xuZXhwb3J0IGZ1bmN0aW9uIHdpZGVzdExpbmUoc3RyaW5nKSB7XG4gICAgbGV0IGxpbmVXaWR0aCA9IDA7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHN0cmluZy5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgbGluZVdpZHRoID0gTWF0aC5tYXgobGluZVdpZHRoLCBzdHJpbmdXaWR0aChsaW5lKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lV2lkdGg7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aWRlc3QtbGluZS5qcy5tYXAiLAogICAgImltcG9ydCB7IHdpZGVzdExpbmUgfSBmcm9tICcuL3dpZGVzdC1saW5lLmpzJztcbmNvbnN0IGNhY2hlID0ge307XG5jb25zdCBtZWFzdXJlVGV4dCA9ICh0ZXh0KSA9PiB7XG4gICAgaWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkRGltZW5zaW9ucyA9IGNhY2hlW3RleHRdO1xuICAgIGlmIChjYWNoZWREaW1lbnNpb25zKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWREaW1lbnNpb25zO1xuICAgIH1cbiAgICBjb25zdCB3aWR0aCA9IHdpZGVzdExpbmUodGV4dCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGV4dC5zcGxpdCgnXFxuJykubGVuZ3RoO1xuICAgIGNhY2hlW3RleHRdID0geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IG1lYXN1cmVUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVhc3VyZS10ZXh0LmpzLm1hcCIsCiAgICAiY29uc3QgQU5TSV9CQUNLR1JPVU5EX09GRlNFVCA9IDEwO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHtjb2RlICsgb2Zmc2V0fW1gO1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChvZmZzZXQgPSAwKSA9PiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JlZH07JHtncmVlbn07JHtibHVlfW1gO1xuXG5jb25zdCBzdHlsZXMgPSB7XG5cdG1vZGlmaWVyOiB7XG5cdFx0cmVzZXQ6IFswLCAwXSxcblx0XHQvLyAyMSBpc24ndCB3aWRlbHkgc3VwcG9ydGVkIGFuZCAyMiBkb2VzIHRoZSBzYW1lIHRoaW5nXG5cdFx0Ym9sZDogWzEsIDIyXSxcblx0XHRkaW06IFsyLCAyMl0sXG5cdFx0aXRhbGljOiBbMywgMjNdLFxuXHRcdHVuZGVybGluZTogWzQsIDI0XSxcblx0XHRvdmVybGluZTogWzUzLCA1NV0sXG5cdFx0aW52ZXJzZTogWzcsIDI3XSxcblx0XHRoaWRkZW46IFs4LCAyOF0sXG5cdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XSxcblx0fSxcblx0Y29sb3I6IHtcblx0XHRibGFjazogWzMwLCAzOV0sXG5cdFx0cmVkOiBbMzEsIDM5XSxcblx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0eWVsbG93OiBbMzMsIDM5XSxcblx0XHRibHVlOiBbMzQsIDM5XSxcblx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRjeWFuOiBbMzYsIDM5XSxcblx0XHR3aGl0ZTogWzM3LCAzOV0sXG5cblx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRibGFja0JyaWdodDogWzkwLCAzOV0sXG5cdFx0Z3JheTogWzkwLCAzOV0sIC8vIEFsaWFzIG9mIGBibGFja0JyaWdodGBcblx0XHRncmV5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0Z3JlZW5CcmlnaHQ6IFs5MiwgMzldLFxuXHRcdHllbGxvd0JyaWdodDogWzkzLCAzOV0sXG5cdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0bWFnZW50YUJyaWdodDogWzk1LCAzOV0sXG5cdFx0Y3lhbkJyaWdodDogWzk2LCAzOV0sXG5cdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldLFxuXHR9LFxuXHRiZ0NvbG9yOiB7XG5cdFx0YmdCbGFjazogWzQwLCA0OV0sXG5cdFx0YmdSZWQ6IFs0MSwgNDldLFxuXHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdGJnWWVsbG93OiBbNDMsIDQ5XSxcblx0XHRiZ0JsdWU6IFs0NCwgNDldLFxuXHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0YmdDeWFuOiBbNDYsIDQ5XSxcblx0XHRiZ1doaXRlOiBbNDcsIDQ5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJnQmxhY2tCcmlnaHQ6IFsxMDAsIDQ5XSxcblx0XHRiZ0dyYXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdHcmV5OiBbMTAwLCA0OV0sIC8vIEFsaWFzIG9mIGBiZ0JsYWNrQnJpZ2h0YFxuXHRcdGJnUmVkQnJpZ2h0OiBbMTAxLCA0OV0sXG5cdFx0YmdHcmVlbkJyaWdodDogWzEwMiwgNDldLFxuXHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0YmdCbHVlQnJpZ2h0OiBbMTA0LCA0OV0sXG5cdFx0YmdNYWdlbnRhQnJpZ2h0OiBbMTA1LCA0OV0sXG5cdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0YmdXaGl0ZUJyaWdodDogWzEwNywgNDldLFxuXHR9LFxufTtcblxuZXhwb3J0IGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMubW9kaWZpZXIpO1xuZXhwb3J0IGNvbnN0IGZvcmVncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmNvbG9yKTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3JOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5iZ0NvbG9yKTtcbmV4cG9ydCBjb25zdCBjb2xvck5hbWVzID0gWy4uLmZvcmVncm91bmRDb2xvck5hbWVzLCAuLi5iYWNrZ3JvdW5kQ29sb3JOYW1lc107XG5cbmZ1bmN0aW9uIGFzc2VtYmxlU3R5bGVzKCkge1xuXHRjb25zdCBjb2RlcyA9IG5ldyBNYXAoKTtcblxuXHRmb3IgKGNvbnN0IFtncm91cE5hbWUsIGdyb3VwXSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMpKSB7XG5cdFx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXApKSB7XG5cdFx0XHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRcdFx0b3BlbjogYFxcdTAwMUJbJHtzdHlsZVswXX1tYCxcblx0XHRcdFx0Y2xvc2U6IGBcXHUwMDFCWyR7c3R5bGVbMV19bWAsXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCAnY29kZXMnLCB7XG5cdFx0dmFsdWU6IGNvZGVzLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHR9KTtcblxuXHRzdHlsZXMuY29sb3IuY2xvc2UgPSAnXFx1MDAxQlszOW0nO1xuXHRzdHlsZXMuYmdDb2xvci5jbG9zZSA9ICdcXHUwMDFCWzQ5bSc7XG5cblx0c3R5bGVzLmNvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KCk7XG5cdHN0eWxlcy5jb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bSgpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpID0gd3JhcEFuc2kxNihBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblx0c3R5bGVzLmJnQ29sb3IuYW5zaTI1NiA9IHdyYXBBbnNpMjU2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMTZtID0gd3JhcEFuc2kxNm0oQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cblx0Ly8gRnJvbSBodHRwczovL2dpdGh1Yi5jb20vUWl4LS9jb2xvci1jb252ZXJ0L2Jsb2IvM2YwZTBkNGU5MmUyMzU3OTZjY2IxN2Y2ZTg1YzcyMDk0YTY1MWY0OS9jb252ZXJzaW9ucy5qc1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHlsZXMsIHtcblx0XHRyZ2JUb0Fuc2kyNTY6IHtcblx0XHRcdHZhbHVlOiAocmVkLCBncmVlbiwgYmx1ZSkgPT4ge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4ge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWU6IGNvZGUgPT4ge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwKICAgICJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQgYW5zaVN0eWxlcyBmcm9tICdhbnNpLXN0eWxlcyc7XG5cbmNvbnN0IEVTQ0FQRVMgPSBuZXcgU2V0KFtcblx0J1xcdTAwMUInLFxuXHQnXFx1MDA5QicsXG5dKTtcblxuY29uc3QgRU5EX0NPREUgPSAzOTtcbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaUNvZGUgPSBjb2RlID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSB1cmwgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuXG4vLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB3b3JkcyBzcGxpdCBvbiAnICcsIGlnbm9yaW5nXG4vLyB0aGUgZXh0cmEgY2hhcmFjdGVycyBhZGRlZCBieSBhbnNpIGVzY2FwZSBjb2Rlc1xuY29uc3Qgd29yZExlbmd0aHMgPSBzdHJpbmcgPT4gc3RyaW5nLnNwbGl0KCcgJykubWFwKGNoYXJhY3RlciA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcblxuLy8gV3JhcCBhIGxvbmcgd29yZCBhY3Jvc3MgbXVsdGlwbGUgcm93c1xuLy8gQW5zaSBlc2NhcGUgY29kZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgbGVuZ3RoXG5jb25zdCB3cmFwV29yZCA9IChyb3dzLCB3b3JkLCBjb2x1bW5zKSA9PiB7XG5cdGNvbnN0IGNoYXJhY3RlcnMgPSBbLi4ud29yZF07XG5cblx0bGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdGxldCBpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0bGV0IHZpc2libGUgPSBzdHJpbmdXaWR0aChzdHJpcEFuc2kocm93cy5hdCgtMSkpKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cblx0XHRcdGNvbnN0IGFuc2lFc2NhcGVMaW5rQ2FuZGlkYXRlID0gY2hhcmFjdGVycy5zbGljZShpbmRleCArIDEsIGluZGV4ICsgMSArIEFOU0lfRVNDQVBFX0xJTksubGVuZ3RoKS5qb2luKCcnKTtcblx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGFuc2lFc2NhcGVMaW5rQ2FuZGlkYXRlID09PSBBTlNJX0VTQ0FQRV9MSU5LO1xuXHRcdH1cblxuXHRcdGlmIChpc0luc2lkZUVzY2FwZSkge1xuXHRcdFx0aWYgKGlzSW5zaWRlTGlua0VzY2FwZSkge1xuXHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG5cdFx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfU0dSX1RFUk1JTkFUT1IpIHtcblx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmlzaWJsZSArPSBjaGFyYWN0ZXJMZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZSA9PT0gY29sdW1ucyAmJiBpbmRleCA8IGNoYXJhY3RlcnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGFzdCByb3cgd2UgY29weSBvdmVyIGlzIG9ubHlcblx0Ly8gYW5zaSBlc2NhcGUgY2hhcmFjdGVycywgaGFuZGxlIHRoaXMgZWRnZS1jYXNlXG5cdGlmICghdmlzaWJsZSAmJiByb3dzLmF0KC0xKS5sZW5ndGggPiAwICYmIHJvd3MubGVuZ3RoID4gMSkge1xuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAyXSArPSByb3dzLnBvcCgpO1xuXHR9XG59O1xuXG4vLyBUcmltcyBzcGFjZXMgZnJvbSBhIHN0cmluZyBpZ25vcmluZyBpbnZpc2libGUgc2VxdWVuY2VzXG5jb25zdCBzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0ID0gc3RyaW5nID0+IHtcblx0Y29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcblx0bGV0IGxhc3QgPSB3b3Jkcy5sZW5ndGg7XG5cblx0d2hpbGUgKGxhc3QgPiAwKSB7XG5cdFx0aWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsYXN0LS07XG5cdH1cblxuXHRpZiAobGFzdCA9PT0gd29yZHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdHJldHVybiB3b3Jkcy5zbGljZSgwLCBsYXN0KS5qb2luKCcgJykgKyB3b3Jkcy5zbGljZShsYXN0KS5qb2luKCcnKTtcbn07XG5cbi8vIFRoZSB3cmFwLWFuc2kgbW9kdWxlIGNhbiBiZSBpbnZva2VkIGluIGVpdGhlciAnaGFyZCcgb3IgJ3NvZnQnIHdyYXAgbW9kZS5cbi8vXG4vLyAnaGFyZCcgd2lsbCBuZXZlciBhbGxvdyBhIHN0cmluZyB0byB0YWtlIHVwIG1vcmUgdGhhbiBjb2x1bW5zIGNoYXJhY3RlcnMuXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoLlxuY29uc3QgZXhlYyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRsZXQgZXNjYXBlQ29kZTtcblx0bGV0IGVzY2FwZVVybDtcblxuXHRjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMoc3RyaW5nKTtcblx0bGV0IHJvd3MgPSBbJyddO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCB3b3JkXSBvZiBzdHJpbmcuc3BsaXQoJyAnKS5lbnRyaWVzKCkpIHtcblx0XHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSkge1xuXHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdID0gcm93cy5hdCgtMSkudHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3MuYXQoLTEpKTtcblxuXHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0aWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBzdGFydCB3aXRoIGEgbmV3IHdvcmQgYnV0IHRoZSBjdXJyZW50IHJvdyBsZW5ndGggZXF1YWxzIHRoZSBsZW5ndGggb2YgdGhlIGNvbHVtbnMsIGFkZCBhIG5ldyByb3dcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdFx0cm93TGVuZ3RoID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuXHRcdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gJyAnO1xuXHRcdFx0XHRyb3dMZW5ndGgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJbiAnaGFyZCcgd3JhcCBtb2RlLCB0aGUgbGVuZ3RoIG9mIGEgbGluZSBpcyBuZXZlciBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0ICdjb2x1bW5zJ1xuXHRcdGlmIChvcHRpb25zLmhhcmQgJiYgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb2x1bW5zID0gKGNvbHVtbnMgLSByb3dMZW5ndGgpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgcm93TGVuZ3RoID4gMCAmJiBsZW5ndGhzW2luZGV4XSA+IDApIHtcblx0XHRcdGlmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSAmJiByb3dMZW5ndGggPCBjb2x1bW5zKSB7XG5cdFx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlKSB7XG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSB3b3JkO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRyb3dzID0gcm93cy5tYXAocm93ID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG5cdH1cblxuXHRjb25zdCBwcmVTdHJpbmcgPSByb3dzLmpvaW4oJ1xcbicpO1xuXHRjb25zdCBwcmUgPSBbLi4ucHJlU3RyaW5nXTtcblxuXHQvLyBXZSBuZWVkIHRvIGtlZXAgYSBzZXBhcmF0ZSBpbmRleCBhcyBgU3RyaW5nI3NsaWNlKClgIHdvcmtzIG9uIFVuaWNvZGUgY29kZSB1bml0cywgd2hpbGUgYHByZWAgaXMgYW4gYXJyYXkgb2YgY29kZXBvaW50cy5cblx0bGV0IHByZVN0cmluZ0luZGV4ID0gMDtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBwcmUuZW50cmllcygpKSB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gY2hhcmFjdGVyO1xuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnN0IHtncm91cHN9ID0gbmV3IFJlZ0V4cChgKD86XFxcXCR7QU5TSV9DU0l9KD88Y29kZT5cXFxcZCspbXxcXFxcJHtBTlNJX0VTQ0FQRV9MSU5LfSg/PHVyaT4uKikke0FOU0lfRVNDQVBFX0JFTEx9KWApLmV4ZWMocHJlU3RyaW5nLnNsaWNlKHByZVN0cmluZ0luZGV4KSkgfHwge2dyb3Vwczoge319O1xuXHRcdFx0aWYgKGdyb3Vwcy5jb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgY29kZSA9IE51bWJlci5wYXJzZUZsb2F0KGdyb3Vwcy5jb2RlKTtcblx0XHRcdFx0ZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcblx0XHRcdH0gZWxzZSBpZiAoZ3JvdXBzLnVyaSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVzY2FwZVVybCA9IGdyb3Vwcy51cmkubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogZ3JvdXBzLnVyaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjb2RlID0gYW5zaVN0eWxlcy5jb2Rlcy5nZXQoTnVtYmVyKGVzY2FwZUNvZGUpKTtcblxuXHRcdGlmIChwcmVbaW5kZXggKyAxXSA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoJycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShjb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cHJlU3RyaW5nSW5kZXggKz0gY2hhcmFjdGVyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbi8vIEZvciBlYWNoIG5ld2xpbmUsIGludm9rZSB0aGUgbWV0aG9kIHNlcGFyYXRlbHlcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXBBbnNpKHN0cmluZywgY29sdW1ucywgb3B0aW9ucykge1xuXHRyZXR1cm4gU3RyaW5nKHN0cmluZylcblx0XHQubm9ybWFsaXplKClcblx0XHQucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn1cbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgeW9kYSAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Z1bGx3aWR0aENvZGVQb2ludChjb2RlUG9pbnQpIHtcblx0aWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvZGVQb2ludCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBDb2RlIHBvaW50cyBhcmUgZGVyaXZlZCBmcm9tOlxuXHQvLyBodHRwczovL3VuaWNvZGUub3JnL1B1YmxpYy9VTklEQVRBL0Vhc3RBc2lhbldpZHRoLnR4dFxuXHRyZXR1cm4gY29kZVBvaW50ID49IDB4MTEwMCAmJiAoXG5cdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdGNvZGVQb2ludCA9PT0gMHgyMzI5IHx8IC8vIExFRlQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdGNvZGVQb2ludCA9PT0gMHgyMzJBIHx8IC8vIFJJR0hULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0KDB4MkU4MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0NyAmJiBjb2RlUG9pbnQgIT09IDB4MzAzRikgfHxcblx0XHQvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIC4uIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcblx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgLi4gWWkgUmFkaWNhbHNcblx0XHQoMHg0RTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBNEM2KSB8fFxuXHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHQoMHhBOTYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBOTdDKSB8fFxuXHRcdC8vIEhhbmd1bCBTeWxsYWJsZXNcblx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcblx0XHQoMHhGOTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGQUZGKSB8fFxuXHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0KDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcblx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAuLiBTbWFsbCBGb3JtIFZhcmlhbnRzXG5cdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHQvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1xuXHRcdCgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG5cdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHQvLyBLYW5hIFN1cHBsZW1lbnRcblx0XHQoMHgxQjAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUIwMDEpIHx8XG5cdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdCgweDFGMjAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI1MSkgfHxcblx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCIC4uIFRlcnRpYXJ5IElkZW9ncmFwaGljIFBsYW5lXG5cdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHQpO1xufVxuIiwKICAgICJpbXBvcnQgaXNGdWxsd2lkdGhDb2RlUG9pbnQgZnJvbSAnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnO1xuaW1wb3J0IGFuc2lTdHlsZXMgZnJvbSAnYW5zaS1zdHlsZXMnO1xuXG5jb25zdCBhc3RyYWxSZWdleCA9IC9eW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXSQvO1xuXG5jb25zdCBFU0NBUEVTID0gW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXTtcblxuY29uc3Qgd3JhcEFuc2kgPSBjb2RlID0+IGAke0VTQ0FQRVNbMF19WyR7Y29kZX1tYDtcblxuY29uc3QgY2hlY2tBbnNpID0gKGFuc2lDb2RlcywgaXNFc2NhcGVzLCBlbmRBbnNpQ29kZSkgPT4ge1xuXHRsZXQgb3V0cHV0ID0gW107XG5cdGFuc2lDb2RlcyA9IFsuLi5hbnNpQ29kZXNdO1xuXG5cdGZvciAobGV0IGFuc2lDb2RlIG9mIGFuc2lDb2Rlcykge1xuXHRcdGNvbnN0IGFuc2lDb2RlT3JpZ2luID0gYW5zaUNvZGU7XG5cdFx0aWYgKGFuc2lDb2RlLmluY2x1ZGVzKCc7JykpIHtcblx0XHRcdGFuc2lDb2RlID0gYW5zaUNvZGUuc3BsaXQoJzsnKVswXVswXSArICcwJztcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtID0gYW5zaVN0eWxlcy5jb2Rlcy5nZXQoTnVtYmVyLnBhcnNlSW50KGFuc2lDb2RlLCAxMCkpO1xuXHRcdGlmIChpdGVtKSB7XG5cdFx0XHRjb25zdCBpbmRleEVzY2FwZSA9IGFuc2lDb2Rlcy5pbmRleE9mKGl0ZW0udG9TdHJpbmcoKSk7XG5cdFx0XHRpZiAoaW5kZXhFc2NhcGUgPT09IC0xKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHdyYXBBbnNpKGlzRXNjYXBlcyA/IGl0ZW0gOiBhbnNpQ29kZU9yaWdpbikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YW5zaUNvZGVzLnNwbGljZShpbmRleEVzY2FwZSwgMSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0VzY2FwZXMpIHtcblx0XHRcdG91dHB1dC5wdXNoKHdyYXBBbnNpKDApKTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh3cmFwQW5zaShhbnNpQ29kZU9yaWdpbikpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpc0VzY2FwZXMpIHtcblx0XHRvdXRwdXQgPSBvdXRwdXQuZmlsdGVyKChlbGVtZW50LCBpbmRleCkgPT4gb3V0cHV0LmluZGV4T2YoZWxlbWVudCkgPT09IGluZGV4KTtcblxuXHRcdGlmIChlbmRBbnNpQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBmaXN0RXNjYXBlQ29kZSA9IHdyYXBBbnNpKGFuc2lTdHlsZXMuY29kZXMuZ2V0KE51bWJlci5wYXJzZUludChlbmRBbnNpQ29kZSwgMTApKSk7XG5cdFx0XHQvLyBUT0RPOiBSZW1vdmUgdGhlIHVzZSBvZiBgLnJlZHVjZWAgaGVyZS5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LXJlZHVjZVxuXHRcdFx0b3V0cHV0ID0gb3V0cHV0LnJlZHVjZSgoY3VycmVudCwgbmV4dCkgPT4gbmV4dCA9PT0gZmlzdEVzY2FwZUNvZGUgPyBbbmV4dCwgLi4uY3VycmVudF0gOiBbLi4uY3VycmVudCwgbmV4dF0sIFtdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpY2VBbnNpKHN0cmluZywgYmVnaW4sIGVuZCkge1xuXHRjb25zdCBjaGFyYWN0ZXJzID0gWy4uLnN0cmluZ107XG5cdGNvbnN0IGFuc2lDb2RlcyA9IFtdO1xuXG5cdGxldCBzdHJpbmdFbmQgPSB0eXBlb2YgZW5kID09PSAnbnVtYmVyJyA/IGVuZCA6IGNoYXJhY3RlcnMubGVuZ3RoO1xuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGFuc2lDb2RlO1xuXHRsZXQgdmlzaWJsZSA9IDA7XG5cdGxldCBvdXRwdXQgPSAnJztcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGxldCBsZWZ0RXNjYXBlID0gZmFsc2U7XG5cblx0XHRpZiAoRVNDQVBFUy5pbmNsdWRlcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjb25zdCBjb2RlID0gL1xcZFtebV0qLy5leGVjKHN0cmluZy5zbGljZShpbmRleCwgaW5kZXggKyAxOCkpO1xuXHRcdFx0YW5zaUNvZGUgPSBjb2RlICYmIGNvZGUubGVuZ3RoID4gMCA/IGNvZGVbMF0gOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICh2aXNpYmxlIDwgc3RyaW5nRW5kKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoYW5zaUNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFuc2lDb2Rlcy5wdXNoKGFuc2lDb2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNJbnNpZGVFc2NhcGUgJiYgY2hhcmFjdGVyID09PSAnbScpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRsZWZ0RXNjYXBlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIWlzSW5zaWRlRXNjYXBlICYmICFsZWZ0RXNjYXBlKSB7XG5cdFx0XHR2aXNpYmxlKys7XG5cdFx0fVxuXG5cdFx0aWYgKCFhc3RyYWxSZWdleC50ZXN0KGNoYXJhY3RlcikgJiYgaXNGdWxsd2lkdGhDb2RlUG9pbnQoY2hhcmFjdGVyLmNvZGVQb2ludEF0KCkpKSB7XG5cdFx0XHR2aXNpYmxlKys7XG5cblx0XHRcdGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJykge1xuXHRcdFx0XHRzdHJpbmdFbmQrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodmlzaWJsZSA+IGJlZ2luICYmIHZpc2libGUgPD0gc3RyaW5nRW5kKSB7XG5cdFx0XHRvdXRwdXQgKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSBpZiAodmlzaWJsZSA9PT0gYmVnaW4gJiYgIWlzSW5zaWRlRXNjYXBlICYmIGFuc2lDb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdG91dHB1dCA9IGNoZWNrQW5zaShhbnNpQ29kZXMpO1xuXHRcdH0gZWxzZSBpZiAodmlzaWJsZSA+PSBzdHJpbmdFbmQpIHtcblx0XHRcdG91dHB1dCArPSBjaGVja0Fuc2koYW5zaUNvZGVzLCB0cnVlLCBhbnNpQ29kZSk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIiwKICAgICJpbXBvcnQgc2xpY2VBbnNpIGZyb20gJ3NsaWNlLWFuc2knO1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ3N0cmluZy13aWR0aCc7XG5cbmZ1bmN0aW9uIGdldEluZGV4T2ZOZWFyZXN0U3BhY2Uoc3RyaW5nLCB3YW50ZWRJbmRleCwgc2hvdWxkU2VhcmNoUmlnaHQpIHtcblx0aWYgKHN0cmluZy5jaGFyQXQod2FudGVkSW5kZXgpID09PSAnICcpIHtcblx0XHRyZXR1cm4gd2FudGVkSW5kZXg7XG5cdH1cblxuXHRjb25zdCBkaXJlY3Rpb24gPSBzaG91bGRTZWFyY2hSaWdodCA/IDEgOiAtMTtcblxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDw9IDM7IGluZGV4KyspIHtcblx0XHRjb25zdCBmaW5hbEluZGV4ID0gd2FudGVkSW5kZXggKyAoaW5kZXggKiBkaXJlY3Rpb24pO1xuXHRcdGlmIChzdHJpbmcuY2hhckF0KGZpbmFsSW5kZXgpID09PSAnICcpIHtcblx0XHRcdHJldHVybiBmaW5hbEluZGV4O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB3YW50ZWRJbmRleDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpVHJ1bmNhdGUodGV4dCwgY29sdW1ucywgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHtcblx0XHRwb3NpdGlvbiA9ICdlbmQnLFxuXHRcdHNwYWNlID0gZmFsc2UsXG5cdFx0cHJlZmVyVHJ1bmNhdGlvbk9uU3BhY2UgPSBmYWxzZSxcblx0fSA9IG9wdGlvbnM7XG5cblx0bGV0IHt0cnVuY2F0aW9uQ2hhcmFjdGVyID0gJ+KApid9ID0gb3B0aW9ucztcblxuXHRpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW5wdXRcXGAgdG8gYmUgYSBzdHJpbmcsIGdvdCAke3R5cGVvZiB0ZXh0fWApO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBjb2x1bW5zICE9PSAnbnVtYmVyJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGNvbHVtbnNcXGAgdG8gYmUgYSBudW1iZXIsIGdvdCAke3R5cGVvZiBjb2x1bW5zfWApO1xuXHR9XG5cblx0aWYgKGNvbHVtbnMgPCAxKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbHVtbnMgPT09IDEpIHtcblx0XHRyZXR1cm4gdHJ1bmNhdGlvbkNoYXJhY3Rlcjtcblx0fVxuXG5cdGNvbnN0IGxlbmd0aCA9IHN0cmluZ1dpZHRoKHRleHQpO1xuXG5cdGlmIChsZW5ndGggPD0gY29sdW1ucykge1xuXHRcdHJldHVybiB0ZXh0O1xuXHR9XG5cblx0aWYgKHBvc2l0aW9uID09PSAnc3RhcnQnKSB7XG5cdFx0aWYgKHByZWZlclRydW5jYXRpb25PblNwYWNlKSB7XG5cdFx0XHRjb25zdCBuZWFyZXN0U3BhY2UgPSBnZXRJbmRleE9mTmVhcmVzdFNwYWNlKHRleHQsIGxlbmd0aCAtIGNvbHVtbnMgKyAxLCB0cnVlKTtcblx0XHRcdHJldHVybiB0cnVuY2F0aW9uQ2hhcmFjdGVyICsgc2xpY2VBbnNpKHRleHQsIG5lYXJlc3RTcGFjZSwgbGVuZ3RoKS50cmltKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHNwYWNlID09PSB0cnVlKSB7XG5cdFx0XHR0cnVuY2F0aW9uQ2hhcmFjdGVyICs9ICcgJztcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1bmNhdGlvbkNoYXJhY3RlciArIHNsaWNlQW5zaSh0ZXh0LCBsZW5ndGggLSBjb2x1bW5zICsgc3RyaW5nV2lkdGgodHJ1bmNhdGlvbkNoYXJhY3RlciksIGxlbmd0aCk7XG5cdH1cblxuXHRpZiAocG9zaXRpb24gPT09ICdtaWRkbGUnKSB7XG5cdFx0aWYgKHNwYWNlID09PSB0cnVlKSB7XG5cdFx0XHR0cnVuY2F0aW9uQ2hhcmFjdGVyID0gYCAke3RydW5jYXRpb25DaGFyYWN0ZXJ9IGA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFsZiA9IE1hdGguZmxvb3IoY29sdW1ucyAvIDIpO1xuXG5cdFx0aWYgKHByZWZlclRydW5jYXRpb25PblNwYWNlKSB7XG5cdFx0XHRjb25zdCBzcGFjZU5lYXJGaXJzdEJyZWFrUG9pbnQgPSBnZXRJbmRleE9mTmVhcmVzdFNwYWNlKHRleHQsIGhhbGYpO1xuXHRcdFx0Y29uc3Qgc3BhY2VOZWFyU2Vjb25kQnJlYWtQb2ludCA9IGdldEluZGV4T2ZOZWFyZXN0U3BhY2UodGV4dCwgbGVuZ3RoIC0gKGNvbHVtbnMgLSBoYWxmKSArIDEsIHRydWUpO1xuXHRcdFx0cmV0dXJuIHNsaWNlQW5zaSh0ZXh0LCAwLCBzcGFjZU5lYXJGaXJzdEJyZWFrUG9pbnQpICsgdHJ1bmNhdGlvbkNoYXJhY3RlciArIHNsaWNlQW5zaSh0ZXh0LCBzcGFjZU5lYXJTZWNvbmRCcmVha1BvaW50LCBsZW5ndGgpLnRyaW0oKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0c2xpY2VBbnNpKHRleHQsIDAsIGhhbGYpXG5cdFx0XHRcdCsgdHJ1bmNhdGlvbkNoYXJhY3RlclxuXHRcdFx0XHQrIHNsaWNlQW5zaSh0ZXh0LCBsZW5ndGggLSAoY29sdW1ucyAtIGhhbGYpICsgc3RyaW5nV2lkdGgodHJ1bmNhdGlvbkNoYXJhY3RlciksIGxlbmd0aClcblx0XHQpO1xuXHR9XG5cblx0aWYgKHBvc2l0aW9uID09PSAnZW5kJykge1xuXHRcdGlmIChwcmVmZXJUcnVuY2F0aW9uT25TcGFjZSkge1xuXHRcdFx0Y29uc3QgbmVhcmVzdFNwYWNlID0gZ2V0SW5kZXhPZk5lYXJlc3RTcGFjZSh0ZXh0LCBjb2x1bW5zIC0gMSk7XG5cdFx0XHRyZXR1cm4gc2xpY2VBbnNpKHRleHQsIDAsIG5lYXJlc3RTcGFjZSkgKyB0cnVuY2F0aW9uQ2hhcmFjdGVyO1xuXHRcdH1cblxuXHRcdGlmIChzcGFjZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dHJ1bmNhdGlvbkNoYXJhY3RlciA9IGAgJHt0cnVuY2F0aW9uQ2hhcmFjdGVyfWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNsaWNlQW5zaSh0ZXh0LCAwLCBjb2x1bW5zIC0gc3RyaW5nV2lkdGgodHJ1bmNhdGlvbkNoYXJhY3RlcikpICsgdHJ1bmNhdGlvbkNoYXJhY3Rlcjtcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgXFxgb3B0aW9ucy5wb3NpdGlvblxcYCB0byBiZSBlaXRoZXIgXFxgc3RhcnRcXGAsIFxcYG1pZGRsZVxcYCBvciBcXGBlbmRcXGAsIGdvdCAke3Bvc2l0aW9ufWApO1xufVxuIiwKICAgICJpbXBvcnQgd3JhcEFuc2kgZnJvbSAnd3JhcC1hbnNpJztcbmltcG9ydCBjbGlUcnVuY2F0ZSBmcm9tICdjbGktdHJ1bmNhdGUnO1xuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IHdyYXBUZXh0ID0gKHRleHQsIG1heFdpZHRoLCB3cmFwVHlwZSkgPT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gdGV4dCArIFN0cmluZyhtYXhXaWR0aCkgKyBTdHJpbmcod3JhcFR5cGUpO1xuICAgIGNvbnN0IGNhY2hlZFRleHQgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgaWYgKGNhY2hlZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFRleHQ7XG4gICAgfVxuICAgIGxldCB3cmFwcGVkVGV4dCA9IHRleHQ7XG4gICAgaWYgKHdyYXBUeXBlID09PSAnd3JhcCcpIHtcbiAgICAgICAgd3JhcHBlZFRleHQgPSB3cmFwQW5zaSh0ZXh0LCBtYXhXaWR0aCwge1xuICAgICAgICAgICAgdHJpbTogZmFsc2UsXG4gICAgICAgICAgICBoYXJkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHdyYXBUeXBlLnN0YXJ0c1dpdGgoJ3RydW5jYXRlJykpIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gJ2VuZCc7XG4gICAgICAgIGlmICh3cmFwVHlwZSA9PT0gJ3RydW5jYXRlLW1pZGRsZScpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gJ21pZGRsZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBUeXBlID09PSAndHJ1bmNhdGUtc3RhcnQnKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9ICdzdGFydCc7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcHBlZFRleHQgPSBjbGlUcnVuY2F0ZSh0ZXh0LCBtYXhXaWR0aCwgeyBwb3NpdGlvbiB9KTtcbiAgICB9XG4gICAgY2FjaGVbY2FjaGVLZXldID0gd3JhcHBlZFRleHQ7XG4gICAgcmV0dXJuIHdyYXBwZWRUZXh0O1xufTtcbmV4cG9ydCBkZWZhdWx0IHdyYXBUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcC10ZXh0LmpzLm1hcCIsCiAgICAiLy8gU3F1YXNoaW5nIHRleHQgbm9kZXMgYWxsb3dzIHRvIGNvbWJpbmUgbXVsdGlwbGUgdGV4dCBub2RlcyBpbnRvIG9uZSBhbmQgd3JpdGVcbi8vIHRvIGBPdXRwdXRgIGluc3RhbmNlIG9ubHkgb25jZS4gRm9yIGV4YW1wbGUsIDxUZXh0PmhlbGxveycgJ313b3JsZDwvVGV4dD5cbi8vIGlzIGFjdHVhbGx5IDMgdGV4dCBub2Rlcywgd2hpY2ggd291bGQgcmVzdWx0IDMgd3JpdGVzIHRvIGBPdXRwdXRgLlxuLy9cbi8vIEFsc28sIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBsaWJyYXJpZXMgbGlrZSBpbmstbGluayAoaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9pbmstbGluayksXG4vLyB3aGljaCBuZWVkIHRvIHdyYXAgYWxsIGNoaWxkcmVuIGF0IG9uY2UsIGluc3RlYWQgb2Ygd3JhcHBpbmcgMyB0ZXh0IG5vZGVzIHNlcGFyYXRlbHkuXG5jb25zdCBzcXVhc2hUZXh0Tm9kZXMgPSAobm9kZSkgPT4ge1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbm9kZS5jaGlsZE5vZGVzW2luZGV4XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbm9kZVRleHQgPSAnJztcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xuICAgICAgICAgICAgbm9kZVRleHQgPSBjaGlsZE5vZGUubm9kZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlTmFtZSA9PT0gJ2luay10ZXh0JyB8fFxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5ub2RlTmFtZSA9PT0gJ2luay12aXJ0dWFsLXRleHQnKSB7XG4gICAgICAgICAgICAgICAgbm9kZVRleHQgPSBzcXVhc2hUZXh0Tm9kZXMoY2hpbGROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNpbmNlIHRoZXNlIHRleHQgbm9kZXMgYXJlIGJlaW5nIGNvbmNhdGVuYXRlZCwgYE91dHB1dGAgaW5zdGFuY2Ugd29uJ3QgYmUgYWJsZSB0b1xuICAgICAgICAgICAgLy8gYXBwbHkgY2hpbGRyZW4gdHJhbnNmb3JtLCBzbyB3ZSBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5IGhlcmUgZm9yIGVhY2ggdGV4dCBub2RlXG4gICAgICAgICAgICBpZiAobm9kZVRleHQubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBjaGlsZE5vZGUuaW50ZXJuYWxfdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgbm9kZVRleHQgPSBjaGlsZE5vZGUuaW50ZXJuYWxfdHJhbnNmb3JtKG5vZGVUZXh0LCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGV4dCArPSBub2RlVGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgc3F1YXNoVGV4dE5vZGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3F1YXNoLXRleHQtbm9kZXMuanMubWFwIiwKICAgICJpbXBvcnQgWW9nYSBmcm9tICd5b2dhLXdhc20td2ViL2F1dG8nO1xuaW1wb3J0IG1lYXN1cmVUZXh0IGZyb20gJy4vbWVhc3VyZS10ZXh0LmpzJztcbmltcG9ydCB3cmFwVGV4dCBmcm9tICcuL3dyYXAtdGV4dC5qcyc7XG5pbXBvcnQgc3F1YXNoVGV4dE5vZGVzIGZyb20gJy4vc3F1YXNoLXRleHQtbm9kZXMuanMnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU5vZGUgPSAobm9kZU5hbWUpID0+IHtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgICBub2RlTmFtZSxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgIHBhcmVudE5vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgeW9nYU5vZGU6IG5vZGVOYW1lID09PSAnaW5rLXZpcnR1YWwtdGV4dCcgPyB1bmRlZmluZWQgOiBZb2dhLk5vZGUuY3JlYXRlKCksXG4gICAgfTtcbiAgICBpZiAobm9kZU5hbWUgPT09ICdpbmstdGV4dCcpIHtcbiAgICAgICAgbm9kZS55b2dhTm9kZT8uc2V0TWVhc3VyZUZ1bmMobWVhc3VyZVRleHROb2RlLmJpbmQobnVsbCwgbm9kZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG5leHBvcnQgY29uc3QgYXBwZW5kQ2hpbGROb2RlID0gKG5vZGUsIGNoaWxkTm9kZSkgPT4ge1xuICAgIGlmIChjaGlsZE5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGROb2RlLnBhcmVudE5vZGUsIGNoaWxkTm9kZSk7XG4gICAgfVxuICAgIGNoaWxkTm9kZS5wYXJlbnROb2RlID0gbm9kZTtcbiAgICBub2RlLmNoaWxkTm9kZXMucHVzaChjaGlsZE5vZGUpO1xuICAgIGlmIChjaGlsZE5vZGUueW9nYU5vZGUpIHtcbiAgICAgICAgbm9kZS55b2dhTm9kZT8uaW5zZXJ0Q2hpbGQoY2hpbGROb2RlLnlvZ2FOb2RlLCBub2RlLnlvZ2FOb2RlLmdldENoaWxkQ291bnQoKSk7XG4gICAgfVxuICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnaW5rLXRleHQnIHx8IG5vZGUubm9kZU5hbWUgPT09ICdpbmstdmlydHVhbC10ZXh0Jykge1xuICAgICAgICBtYXJrTm9kZUFzRGlydHkobm9kZSk7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBpbnNlcnRCZWZvcmVOb2RlID0gKG5vZGUsIG5ld0NoaWxkTm9kZSwgYmVmb3JlQ2hpbGROb2RlKSA9PiB7XG4gICAgaWYgKG5ld0NoaWxkTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkTm9kZShuZXdDaGlsZE5vZGUucGFyZW50Tm9kZSwgbmV3Q2hpbGROb2RlKTtcbiAgICB9XG4gICAgbmV3Q2hpbGROb2RlLnBhcmVudE5vZGUgPSBub2RlO1xuICAgIGNvbnN0IGluZGV4ID0gbm9kZS5jaGlsZE5vZGVzLmluZGV4T2YoYmVmb3JlQ2hpbGROb2RlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBub2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluZGV4LCAwLCBuZXdDaGlsZE5vZGUpO1xuICAgICAgICBpZiAobmV3Q2hpbGROb2RlLnlvZ2FOb2RlKSB7XG4gICAgICAgICAgICBub2RlLnlvZ2FOb2RlPy5pbnNlcnRDaGlsZChuZXdDaGlsZE5vZGUueW9nYU5vZGUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIG5vZGUuY2hpbGROb2Rlcy5wdXNoKG5ld0NoaWxkTm9kZSk7XG4gICAgaWYgKG5ld0NoaWxkTm9kZS55b2dhTm9kZSkge1xuICAgICAgICBub2RlLnlvZ2FOb2RlPy5pbnNlcnRDaGlsZChuZXdDaGlsZE5vZGUueW9nYU5vZGUsIG5vZGUueW9nYU5vZGUuZ2V0Q2hpbGRDb3VudCgpKTtcbiAgICB9XG4gICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdpbmstdGV4dCcgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ2luay12aXJ0dWFsLXRleHQnKSB7XG4gICAgICAgIG1hcmtOb2RlQXNEaXJ0eShub2RlKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJlbW92ZUNoaWxkTm9kZSA9IChub2RlLCByZW1vdmVOb2RlKSA9PiB7XG4gICAgaWYgKHJlbW92ZU5vZGUueW9nYU5vZGUpIHtcbiAgICAgICAgcmVtb3ZlTm9kZS5wYXJlbnROb2RlPy55b2dhTm9kZT8ucmVtb3ZlQ2hpbGQocmVtb3ZlTm9kZS55b2dhTm9kZSk7XG4gICAgfVxuICAgIHJlbW92ZU5vZGUucGFyZW50Tm9kZSA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbmRleCA9IG5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlbW92ZU5vZGUpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIG5vZGUuY2hpbGROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ2luay10ZXh0JyB8fCBub2RlLm5vZGVOYW1lID09PSAnaW5rLXZpcnR1YWwtdGV4dCcpIHtcbiAgICAgICAgbWFya05vZGVBc0RpcnR5KG5vZGUpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlID0gKG5vZGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICBub2RlLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCBzZXRTdHlsZSA9IChub2RlLCBzdHlsZSkgPT4ge1xuICAgIG5vZGUuc3R5bGUgPSBzdHlsZTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlVGV4dE5vZGUgPSAodGV4dCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgIG5vZGVOYW1lOiAnI3RleHQnLFxuICAgICAgICBub2RlVmFsdWU6IHRleHQsXG4gICAgICAgIHlvZ2FOb2RlOiB1bmRlZmluZWQsXG4gICAgICAgIHBhcmVudE5vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgIH07XG4gICAgc2V0VGV4dE5vZGVWYWx1ZShub2RlLCB0ZXh0KTtcbiAgICByZXR1cm4gbm9kZTtcbn07XG5jb25zdCBtZWFzdXJlVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSwgd2lkdGgpIHtcbiAgICBjb25zdCB0ZXh0ID0gbm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0JyA/IG5vZGUubm9kZVZhbHVlIDogc3F1YXNoVGV4dE5vZGVzKG5vZGUpO1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBtZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAvLyBUZXh0IGZpdHMgaW50byBjb250YWluZXIsIG5vIG5lZWQgdG8gd3JhcFxuICAgIGlmIChkaW1lbnNpb25zLndpZHRoIDw9IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBkaW1lbnNpb25zO1xuICAgIH1cbiAgICAvLyBUaGlzIGlzIGhhcHBlbmluZyB3aGVuIDxCb3g+IGlzIHNocmlua2luZyBjaGlsZCBub2RlcyBhbmQgWW9nYSBhc2tzXG4gICAgLy8gaWYgd2UgY2FuIGZpdCB0aGlzIHRleHQgbm9kZSBpbiBhIDwxcHggc3BhY2UsIHNvIHdlIGp1c3QgdGVsbCBZb2dhIFwibm9cIlxuICAgIGlmIChkaW1lbnNpb25zLndpZHRoID49IDEgJiYgd2lkdGggPiAwICYmIHdpZHRoIDwgMSkge1xuICAgICAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgICB9XG4gICAgY29uc3QgdGV4dFdyYXAgPSBub2RlLnN0eWxlPy50ZXh0V3JhcCA/PyAnd3JhcCc7XG4gICAgY29uc3Qgd3JhcHBlZFRleHQgPSB3cmFwVGV4dCh0ZXh0LCB3aWR0aCwgdGV4dFdyYXApO1xuICAgIHJldHVybiBtZWFzdXJlVGV4dCh3cmFwcGVkVGV4dCk7XG59O1xuY29uc3QgZmluZENsb3Nlc3RZb2dhTm9kZSA9IChub2RlKSA9PiB7XG4gICAgaWYgKCFub2RlPy5wYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBub2RlLnlvZ2FOb2RlID8/IGZpbmRDbG9zZXN0WW9nYU5vZGUobm9kZS5wYXJlbnROb2RlKTtcbn07XG5jb25zdCBtYXJrTm9kZUFzRGlydHkgPSAobm9kZSkgPT4ge1xuICAgIC8vIE1hcmsgY2xvc2VzdCBZb2dhIG5vZGUgYXMgZGlydHkgdG8gbWVhc3VyZSB0ZXh0IGRpbWVuc2lvbnMgYWdhaW5cbiAgICBjb25zdCB5b2dhTm9kZSA9IGZpbmRDbG9zZXN0WW9nYU5vZGUobm9kZSk7XG4gICAgeW9nYU5vZGU/Lm1hcmtEaXJ0eSgpO1xufTtcbmV4cG9ydCBjb25zdCBzZXRUZXh0Tm9kZVZhbHVlID0gKG5vZGUsIHRleHQpID0+IHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRleHQgPSBTdHJpbmcodGV4dCk7XG4gICAgfVxuICAgIG5vZGUubm9kZVZhbHVlID0gdGV4dDtcbiAgICBtYXJrTm9kZUFzRGlydHkobm9kZSk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG9tLmpzLm1hcCIsCiAgICAiaW1wb3J0ICogYXMgWW9nYSBmcm9tICd5b2dhLXdhc20td2ViJztcbmNvbnN0IGFwcGx5UG9zaXRpb25TdHlsZXMgPSAobm9kZSwgc3R5bGUpID0+IHtcbiAgICBpZiAoJ3Bvc2l0aW9uJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldFBvc2l0aW9uVHlwZShzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuICAgICAgICAgICAgPyBZb2dhLlBPU0lUSU9OX1RZUEVfQUJTT0xVVEVcbiAgICAgICAgICAgIDogWW9nYS5QT1NJVElPTl9UWVBFX1JFTEFUSVZFKTtcbiAgICB9XG59O1xuY29uc3QgYXBwbHlNYXJnaW5TdHlsZXMgPSAobm9kZSwgc3R5bGUpID0+IHtcbiAgICBpZiAoJ21hcmdpbicgaW4gc3R5bGUpIHtcbiAgICAgICAgbm9kZS5zZXRNYXJnaW4oWW9nYS5FREdFX0FMTCwgc3R5bGUubWFyZ2luID8/IDApO1xuICAgIH1cbiAgICBpZiAoJ21hcmdpblgnIGluIHN0eWxlKSB7XG4gICAgICAgIG5vZGUuc2V0TWFyZ2luKFlvZ2EuRURHRV9IT1JJWk9OVEFMLCBzdHlsZS5tYXJnaW5YID8/IDApO1xuICAgIH1cbiAgICBpZiAoJ21hcmdpblknIGluIHN0eWxlKSB7XG4gICAgICAgIG5vZGUuc2V0TWFyZ2luKFlvZ2EuRURHRV9WRVJUSUNBTCwgc3R5bGUubWFyZ2luWSA/PyAwKTtcbiAgICB9XG4gICAgaWYgKCdtYXJnaW5MZWZ0JyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldE1hcmdpbihZb2dhLkVER0VfU1RBUlQsIHN0eWxlLm1hcmdpbkxlZnQgfHwgMCk7XG4gICAgfVxuICAgIGlmICgnbWFyZ2luUmlnaHQnIGluIHN0eWxlKSB7XG4gICAgICAgIG5vZGUuc2V0TWFyZ2luKFlvZ2EuRURHRV9FTkQsIHN0eWxlLm1hcmdpblJpZ2h0IHx8IDApO1xuICAgIH1cbiAgICBpZiAoJ21hcmdpblRvcCcgaW4gc3R5bGUpIHtcbiAgICAgICAgbm9kZS5zZXRNYXJnaW4oWW9nYS5FREdFX1RPUCwgc3R5bGUubWFyZ2luVG9wIHx8IDApO1xuICAgIH1cbiAgICBpZiAoJ21hcmdpbkJvdHRvbScgaW4gc3R5bGUpIHtcbiAgICAgICAgbm9kZS5zZXRNYXJnaW4oWW9nYS5FREdFX0JPVFRPTSwgc3R5bGUubWFyZ2luQm90dG9tIHx8IDApO1xuICAgIH1cbn07XG5jb25zdCBhcHBseVBhZGRpbmdTdHlsZXMgPSAobm9kZSwgc3R5bGUpID0+IHtcbiAgICBpZiAoJ3BhZGRpbmcnIGluIHN0eWxlKSB7XG4gICAgICAgIG5vZGUuc2V0UGFkZGluZyhZb2dhLkVER0VfQUxMLCBzdHlsZS5wYWRkaW5nID8/IDApO1xuICAgIH1cbiAgICBpZiAoJ3BhZGRpbmdYJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldFBhZGRpbmcoWW9nYS5FREdFX0hPUklaT05UQUwsIHN0eWxlLnBhZGRpbmdYID8/IDApO1xuICAgIH1cbiAgICBpZiAoJ3BhZGRpbmdZJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldFBhZGRpbmcoWW9nYS5FREdFX1ZFUlRJQ0FMLCBzdHlsZS5wYWRkaW5nWSA/PyAwKTtcbiAgICB9XG4gICAgaWYgKCdwYWRkaW5nTGVmdCcgaW4gc3R5bGUpIHtcbiAgICAgICAgbm9kZS5zZXRQYWRkaW5nKFlvZ2EuRURHRV9MRUZULCBzdHlsZS5wYWRkaW5nTGVmdCB8fCAwKTtcbiAgICB9XG4gICAgaWYgKCdwYWRkaW5nUmlnaHQnIGluIHN0eWxlKSB7XG4gICAgICAgIG5vZGUuc2V0UGFkZGluZyhZb2dhLkVER0VfUklHSFQsIHN0eWxlLnBhZGRpbmdSaWdodCB8fCAwKTtcbiAgICB9XG4gICAgaWYgKCdwYWRkaW5nVG9wJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldFBhZGRpbmcoWW9nYS5FREdFX1RPUCwgc3R5bGUucGFkZGluZ1RvcCB8fCAwKTtcbiAgICB9XG4gICAgaWYgKCdwYWRkaW5nQm90dG9tJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldFBhZGRpbmcoWW9nYS5FREdFX0JPVFRPTSwgc3R5bGUucGFkZGluZ0JvdHRvbSB8fCAwKTtcbiAgICB9XG59O1xuY29uc3QgYXBwbHlGbGV4U3R5bGVzID0gKG5vZGUsIHN0eWxlKSA9PiB7XG4gICAgaWYgKCdmbGV4R3JvdycgaW4gc3R5bGUpIHtcbiAgICAgICAgbm9kZS5zZXRGbGV4R3JvdyhzdHlsZS5mbGV4R3JvdyA/PyAwKTtcbiAgICB9XG4gICAgaWYgKCdmbGV4U2hyaW5rJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldEZsZXhTaHJpbmsodHlwZW9mIHN0eWxlLmZsZXhTaHJpbmsgPT09ICdudW1iZXInID8gc3R5bGUuZmxleFNocmluayA6IDEpO1xuICAgIH1cbiAgICBpZiAoJ2ZsZXhXcmFwJyBpbiBzdHlsZSkge1xuICAgICAgICBpZiAoc3R5bGUuZmxleFdyYXAgPT09ICdub3dyYXAnKSB7XG4gICAgICAgICAgICBub2RlLnNldEZsZXhXcmFwKFlvZ2EuV1JBUF9OT19XUkFQKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGUuZmxleFdyYXAgPT09ICd3cmFwJykge1xuICAgICAgICAgICAgbm9kZS5zZXRGbGV4V3JhcChZb2dhLldSQVBfV1JBUCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlLmZsZXhXcmFwID09PSAnd3JhcC1yZXZlcnNlJykge1xuICAgICAgICAgICAgbm9kZS5zZXRGbGV4V3JhcChZb2dhLldSQVBfV1JBUF9SRVZFUlNFKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ2ZsZXhEaXJlY3Rpb24nIGluIHN0eWxlKSB7XG4gICAgICAgIGlmIChzdHlsZS5mbGV4RGlyZWN0aW9uID09PSAncm93Jykge1xuICAgICAgICAgICAgbm9kZS5zZXRGbGV4RGlyZWN0aW9uKFlvZ2EuRkxFWF9ESVJFQ1RJT05fUk9XKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGUuZmxleERpcmVjdGlvbiA9PT0gJ3Jvdy1yZXZlcnNlJykge1xuICAgICAgICAgICAgbm9kZS5zZXRGbGV4RGlyZWN0aW9uKFlvZ2EuRkxFWF9ESVJFQ1RJT05fUk9XX1JFVkVSU0UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5mbGV4RGlyZWN0aW9uID09PSAnY29sdW1uJykge1xuICAgICAgICAgICAgbm9kZS5zZXRGbGV4RGlyZWN0aW9uKFlvZ2EuRkxFWF9ESVJFQ1RJT05fQ09MVU1OKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGUuZmxleERpcmVjdGlvbiA9PT0gJ2NvbHVtbi1yZXZlcnNlJykge1xuICAgICAgICAgICAgbm9kZS5zZXRGbGV4RGlyZWN0aW9uKFlvZ2EuRkxFWF9ESVJFQ1RJT05fQ09MVU1OX1JFVkVSU0UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgnZmxleEJhc2lzJyBpbiBzdHlsZSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZsZXhCYXNpcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0RmxleEJhc2lzKHN0eWxlLmZsZXhCYXNpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN0eWxlLmZsZXhCYXNpcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0RmxleEJhc2lzUGVyY2VudChOdW1iZXIucGFyc2VJbnQoc3R5bGUuZmxleEJhc2lzLCAxMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBub2RlLnNldEZsZXhCYXNpc0F1dG8oKSB3aGVuIG5ldyBZb2dhIHJlbGVhc2UgaXMgb3V0XG4gICAgICAgICAgICBub2RlLnNldEZsZXhCYXNpcyhOdW1iZXIuTmFOKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ2FsaWduSXRlbXMnIGluIHN0eWxlKSB7XG4gICAgICAgIGlmIChzdHlsZS5hbGlnbkl0ZW1zID09PSAnc3RyZXRjaCcgfHwgIXN0eWxlLmFsaWduSXRlbXMpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0QWxpZ25JdGVtcyhZb2dhLkFMSUdOX1NUUkVUQ0gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0QWxpZ25JdGVtcyhZb2dhLkFMSUdOX0ZMRVhfU1RBUlQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5hbGlnbkl0ZW1zID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgbm9kZS5zZXRBbGlnbkl0ZW1zKFlvZ2EuQUxJR05fQ0VOVEVSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGUuYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtZW5kJykge1xuICAgICAgICAgICAgbm9kZS5zZXRBbGlnbkl0ZW1zKFlvZ2EuQUxJR05fRkxFWF9FTkQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgnYWxpZ25TZWxmJyBpbiBzdHlsZSkge1xuICAgICAgICBpZiAoc3R5bGUuYWxpZ25TZWxmID09PSAnYXV0bycgfHwgIXN0eWxlLmFsaWduU2VsZikge1xuICAgICAgICAgICAgbm9kZS5zZXRBbGlnblNlbGYoWW9nYS5BTElHTl9BVVRPKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGUuYWxpZ25TZWxmID09PSAnZmxleC1zdGFydCcpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0QWxpZ25TZWxmKFlvZ2EuQUxJR05fRkxFWF9TVEFSVCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduU2VsZiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0QWxpZ25TZWxmKFlvZ2EuQUxJR05fQ0VOVEVSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGUuYWxpZ25TZWxmID09PSAnZmxleC1lbmQnKSB7XG4gICAgICAgICAgICBub2RlLnNldEFsaWduU2VsZihZb2dhLkFMSUdOX0ZMRVhfRU5EKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ2p1c3RpZnlDb250ZW50JyBpbiBzdHlsZSkge1xuICAgICAgICBpZiAoc3R5bGUuanVzdGlmeUNvbnRlbnQgPT09ICdmbGV4LXN0YXJ0JyB8fCAhc3R5bGUuanVzdGlmeUNvbnRlbnQpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0SnVzdGlmeUNvbnRlbnQoWW9nYS5KVVNUSUZZX0ZMRVhfU1RBUlQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5qdXN0aWZ5Q29udGVudCA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0SnVzdGlmeUNvbnRlbnQoWW9nYS5KVVNUSUZZX0NFTlRFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlLmp1c3RpZnlDb250ZW50ID09PSAnZmxleC1lbmQnKSB7XG4gICAgICAgICAgICBub2RlLnNldEp1c3RpZnlDb250ZW50KFlvZ2EuSlVTVElGWV9GTEVYX0VORCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlLmp1c3RpZnlDb250ZW50ID09PSAnc3BhY2UtYmV0d2VlbicpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0SnVzdGlmeUNvbnRlbnQoWW9nYS5KVVNUSUZZX1NQQUNFX0JFVFdFRU4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5qdXN0aWZ5Q29udGVudCA9PT0gJ3NwYWNlLWFyb3VuZCcpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0SnVzdGlmeUNvbnRlbnQoWW9nYS5KVVNUSUZZX1NQQUNFX0FST1VORCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlLmp1c3RpZnlDb250ZW50ID09PSAnc3BhY2UtZXZlbmx5Jykge1xuICAgICAgICAgICAgbm9kZS5zZXRKdXN0aWZ5Q29udGVudChZb2dhLkpVU1RJRllfU1BBQ0VfRVZFTkxZKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBhcHBseURpbWVuc2lvblN0eWxlcyA9IChub2RlLCBzdHlsZSkgPT4ge1xuICAgIGlmICgnd2lkdGgnIGluIHN0eWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUud2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBub2RlLnNldFdpZHRoKHN0eWxlLndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3R5bGUud2lkdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBub2RlLnNldFdpZHRoUGVyY2VudChOdW1iZXIucGFyc2VJbnQoc3R5bGUud2lkdGgsIDEwKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlLnNldFdpZHRoQXV0bygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgnaGVpZ2h0JyBpbiBzdHlsZSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0SGVpZ2h0KHN0eWxlLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN0eWxlLmhlaWdodCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0SGVpZ2h0UGVyY2VudChOdW1iZXIucGFyc2VJbnQoc3R5bGUuaGVpZ2h0LCAxMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5zZXRIZWlnaHRBdXRvKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdtaW5XaWR0aCcgaW4gc3R5bGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5taW5XaWR0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0TWluV2lkdGhQZXJjZW50KE51bWJlci5wYXJzZUludChzdHlsZS5taW5XaWR0aCwgMTApKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuc2V0TWluV2lkdGgoc3R5bGUubWluV2lkdGggPz8gMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdtaW5IZWlnaHQnIGluIHN0eWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUubWluSGVpZ2h0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbm9kZS5zZXRNaW5IZWlnaHRQZXJjZW50KE51bWJlci5wYXJzZUludChzdHlsZS5taW5IZWlnaHQsIDEwKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlLnNldE1pbkhlaWdodChzdHlsZS5taW5IZWlnaHQgPz8gMCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgYXBwbHlEaXNwbGF5U3R5bGVzID0gKG5vZGUsIHN0eWxlKSA9PiB7XG4gICAgaWYgKCdkaXNwbGF5JyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldERpc3BsYXkoc3R5bGUuZGlzcGxheSA9PT0gJ2ZsZXgnID8gWW9nYS5ESVNQTEFZX0ZMRVggOiBZb2dhLkRJU1BMQVlfTk9ORSk7XG4gICAgfVxufTtcbmNvbnN0IGFwcGx5Qm9yZGVyU3R5bGVzID0gKG5vZGUsIHN0eWxlKSA9PiB7XG4gICAgaWYgKCdib3JkZXJTdHlsZScgaW4gc3R5bGUpIHtcbiAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSBzdHlsZS5ib3JkZXJTdHlsZSA/IDEgOiAwO1xuICAgICAgICBpZiAoc3R5bGUuYm9yZGVyVG9wICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgbm9kZS5zZXRCb3JkZXIoWW9nYS5FREdFX1RPUCwgYm9yZGVyV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5ib3JkZXJCb3R0b20gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBub2RlLnNldEJvcmRlcihZb2dhLkVER0VfQk9UVE9NLCBib3JkZXJXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlLmJvcmRlckxlZnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBub2RlLnNldEJvcmRlcihZb2dhLkVER0VfTEVGVCwgYm9yZGVyV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZS5ib3JkZXJSaWdodCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5vZGUuc2V0Qm9yZGVyKFlvZ2EuRURHRV9SSUdIVCwgYm9yZGVyV2lkdGgpO1xuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IGFwcGx5R2FwU3R5bGVzID0gKG5vZGUsIHN0eWxlKSA9PiB7XG4gICAgaWYgKCdnYXAnIGluIHN0eWxlKSB7XG4gICAgICAgIG5vZGUuc2V0R2FwKFlvZ2EuR1VUVEVSX0FMTCwgc3R5bGUuZ2FwID8/IDApO1xuICAgIH1cbiAgICBpZiAoJ2NvbHVtbkdhcCcgaW4gc3R5bGUpIHtcbiAgICAgICAgbm9kZS5zZXRHYXAoWW9nYS5HVVRURVJfQ09MVU1OLCBzdHlsZS5jb2x1bW5HYXAgPz8gMCk7XG4gICAgfVxuICAgIGlmICgncm93R2FwJyBpbiBzdHlsZSkge1xuICAgICAgICBub2RlLnNldEdhcChZb2dhLkdVVFRFUl9ST1csIHN0eWxlLnJvd0dhcCA/PyAwKTtcbiAgICB9XG59O1xuY29uc3Qgc3R5bGVzID0gKG5vZGUsIHN0eWxlID0ge30pID0+IHtcbiAgICBhcHBseVBvc2l0aW9uU3R5bGVzKG5vZGUsIHN0eWxlKTtcbiAgICBhcHBseU1hcmdpblN0eWxlcyhub2RlLCBzdHlsZSk7XG4gICAgYXBwbHlQYWRkaW5nU3R5bGVzKG5vZGUsIHN0eWxlKTtcbiAgICBhcHBseUZsZXhTdHlsZXMobm9kZSwgc3R5bGUpO1xuICAgIGFwcGx5RGltZW5zaW9uU3R5bGVzKG5vZGUsIHN0eWxlKTtcbiAgICBhcHBseURpc3BsYXlTdHlsZXMobm9kZSwgc3R5bGUpO1xuICAgIGFwcGx5Qm9yZGVyU3R5bGVzKG5vZGUsIHN0eWxlKTtcbiAgICBhcHBseUdhcFN0eWxlcyhub2RlLCBzdHlsZSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmpzLm1hcCIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5kZW50U3RyaW5nKHN0cmluZywgY291bnQgPSAxLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3Qge1xuXHRcdGluZGVudCA9ICcgJyxcblx0XHRpbmNsdWRlRW1wdHlMaW5lcyA9IGZhbHNlXG5cdH0gPSBvcHRpb25zO1xuXG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRgRXhwZWN0ZWQgXFxgaW5wdXRcXGAgdG8gYmUgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYFxuXHRcdCk7XG5cdH1cblxuXHRpZiAodHlwZW9mIGNvdW50ICE9PSAnbnVtYmVyJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRgRXhwZWN0ZWQgXFxgY291bnRcXGAgdG8gYmUgYSBcXGBudW1iZXJcXGAsIGdvdCBcXGAke3R5cGVvZiBjb3VudH1cXGBgXG5cdFx0KTtcblx0fVxuXG5cdGlmIChjb3VudCA8IDApIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihcblx0XHRcdGBFeHBlY3RlZCBcXGBjb3VudFxcYCB0byBiZSBhdCBsZWFzdCAwLCBnb3QgXFxgJHtjb3VudH1cXGBgXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0eXBlb2YgaW5kZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRgRXhwZWN0ZWQgXFxgb3B0aW9ucy5pbmRlbnRcXGAgdG8gYmUgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBpbmRlbnR9XFxgYFxuXHRcdCk7XG5cdH1cblxuXHRpZiAoY291bnQgPT09IDApIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3QgcmVnZXggPSBpbmNsdWRlRW1wdHlMaW5lcyA/IC9eL2dtIDogL14oPyFcXHMqJCkvZ207XG5cblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlZ2V4LCBpbmRlbnQucmVwZWF0KGNvdW50KSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIFlvZ2EgZnJvbSAneW9nYS13YXNtLXdlYic7XG5jb25zdCBnZXRNYXhXaWR0aCA9ICh5b2dhTm9kZSkgPT4ge1xuICAgIHJldHVybiAoeW9nYU5vZGUuZ2V0Q29tcHV0ZWRXaWR0aCgpIC1cbiAgICAgICAgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRQYWRkaW5nKFlvZ2EuRURHRV9MRUZUKSAtXG4gICAgICAgIHlvZ2FOb2RlLmdldENvbXB1dGVkUGFkZGluZyhZb2dhLkVER0VfUklHSFQpIC1cbiAgICAgICAgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRCb3JkZXIoWW9nYS5FREdFX0xFRlQpIC1cbiAgICAgICAgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRCb3JkZXIoWW9nYS5FREdFX1JJR0hUKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0TWF4V2lkdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtbWF4LXdpZHRoLmpzLm1hcCIsCiAgICAiaW1wb3J0IGNsaUJveGVzIGZyb20gJ2NsaS1ib3hlcyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGNvbG9yaXplIGZyb20gJy4vY29sb3JpemUuanMnO1xuY29uc3QgcmVuZGVyQm9yZGVyID0gKHgsIHksIG5vZGUsIG91dHB1dCkgPT4ge1xuICAgIGlmIChub2RlLnN0eWxlLmJvcmRlclN0eWxlKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gbm9kZS55b2dhTm9kZS5nZXRDb21wdXRlZFdpZHRoKCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG5vZGUueW9nYU5vZGUuZ2V0Q29tcHV0ZWRIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgYm94ID0gdHlwZW9mIG5vZGUuc3R5bGUuYm9yZGVyU3R5bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGNsaUJveGVzW25vZGUuc3R5bGUuYm9yZGVyU3R5bGVdXG4gICAgICAgICAgICA6IG5vZGUuc3R5bGUuYm9yZGVyU3R5bGU7XG4gICAgICAgIGNvbnN0IHRvcEJvcmRlckNvbG9yID0gbm9kZS5zdHlsZS5ib3JkZXJUb3BDb2xvciA/PyBub2RlLnN0eWxlLmJvcmRlckNvbG9yO1xuICAgICAgICBjb25zdCBib3R0b21Cb3JkZXJDb2xvciA9IG5vZGUuc3R5bGUuYm9yZGVyQm90dG9tQ29sb3IgPz8gbm9kZS5zdHlsZS5ib3JkZXJDb2xvcjtcbiAgICAgICAgY29uc3QgbGVmdEJvcmRlckNvbG9yID0gbm9kZS5zdHlsZS5ib3JkZXJMZWZ0Q29sb3IgPz8gbm9kZS5zdHlsZS5ib3JkZXJDb2xvcjtcbiAgICAgICAgY29uc3QgcmlnaHRCb3JkZXJDb2xvciA9IG5vZGUuc3R5bGUuYm9yZGVyUmlnaHRDb2xvciA/PyBub2RlLnN0eWxlLmJvcmRlckNvbG9yO1xuICAgICAgICBjb25zdCBkaW1Ub3BCb3JkZXJDb2xvciA9IG5vZGUuc3R5bGUuYm9yZGVyVG9wRGltQ29sb3IgPz8gbm9kZS5zdHlsZS5ib3JkZXJEaW1Db2xvcjtcbiAgICAgICAgY29uc3QgZGltQm90dG9tQm9yZGVyQ29sb3IgPSBub2RlLnN0eWxlLmJvcmRlckJvdHRvbURpbUNvbG9yID8/IG5vZGUuc3R5bGUuYm9yZGVyRGltQ29sb3I7XG4gICAgICAgIGNvbnN0IGRpbUxlZnRCb3JkZXJDb2xvciA9IG5vZGUuc3R5bGUuYm9yZGVyTGVmdERpbUNvbG9yID8/IG5vZGUuc3R5bGUuYm9yZGVyRGltQ29sb3I7XG4gICAgICAgIGNvbnN0IGRpbVJpZ2h0Qm9yZGVyQ29sb3IgPSBub2RlLnN0eWxlLmJvcmRlclJpZ2h0RGltQ29sb3IgPz8gbm9kZS5zdHlsZS5ib3JkZXJEaW1Db2xvcjtcbiAgICAgICAgY29uc3Qgc2hvd1RvcEJvcmRlciA9IG5vZGUuc3R5bGUuYm9yZGVyVG9wICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2hvd0JvdHRvbUJvcmRlciA9IG5vZGUuc3R5bGUuYm9yZGVyQm90dG9tICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2hvd0xlZnRCb3JkZXIgPSBub2RlLnN0eWxlLmJvcmRlckxlZnQgIT09IGZhbHNlO1xuICAgICAgICBjb25zdCBzaG93UmlnaHRCb3JkZXIgPSBub2RlLnN0eWxlLmJvcmRlclJpZ2h0ICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gd2lkdGggLSAoc2hvd0xlZnRCb3JkZXIgPyAxIDogMCkgLSAoc2hvd1JpZ2h0Qm9yZGVyID8gMSA6IDApO1xuICAgICAgICBsZXQgdG9wQm9yZGVyID0gc2hvd1RvcEJvcmRlclxuICAgICAgICAgICAgPyBjb2xvcml6ZSgoc2hvd0xlZnRCb3JkZXIgPyBib3gudG9wTGVmdCA6ICcnKSArXG4gICAgICAgICAgICAgICAgYm94LnRvcC5yZXBlYXQoY29udGVudFdpZHRoKSArXG4gICAgICAgICAgICAgICAgKHNob3dSaWdodEJvcmRlciA/IGJveC50b3BSaWdodCA6ICcnKSwgdG9wQm9yZGVyQ29sb3IsICdmb3JlZ3JvdW5kJylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc2hvd1RvcEJvcmRlciAmJiBkaW1Ub3BCb3JkZXJDb2xvcikge1xuICAgICAgICAgICAgdG9wQm9yZGVyID0gY2hhbGsuZGltKHRvcEJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZlcnRpY2FsQm9yZGVySGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBpZiAoc2hvd1RvcEJvcmRlcikge1xuICAgICAgICAgICAgdmVydGljYWxCb3JkZXJIZWlnaHQgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvd0JvdHRvbUJvcmRlcikge1xuICAgICAgICAgICAgdmVydGljYWxCb3JkZXJIZWlnaHQgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGVmdEJvcmRlciA9IChjb2xvcml6ZShib3gubGVmdCwgbGVmdEJvcmRlckNvbG9yLCAnZm9yZWdyb3VuZCcpICsgJ1xcbicpLnJlcGVhdCh2ZXJ0aWNhbEJvcmRlckhlaWdodCk7XG4gICAgICAgIGlmIChkaW1MZWZ0Qm9yZGVyQ29sb3IpIHtcbiAgICAgICAgICAgIGxlZnRCb3JkZXIgPSBjaGFsay5kaW0obGVmdEJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJpZ2h0Qm9yZGVyID0gKGNvbG9yaXplKGJveC5yaWdodCwgcmlnaHRCb3JkZXJDb2xvciwgJ2ZvcmVncm91bmQnKSArICdcXG4nKS5yZXBlYXQodmVydGljYWxCb3JkZXJIZWlnaHQpO1xuICAgICAgICBpZiAoZGltUmlnaHRCb3JkZXJDb2xvcikge1xuICAgICAgICAgICAgcmlnaHRCb3JkZXIgPSBjaGFsay5kaW0ocmlnaHRCb3JkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBib3R0b21Cb3JkZXIgPSBzaG93Qm90dG9tQm9yZGVyXG4gICAgICAgICAgICA/IGNvbG9yaXplKChzaG93TGVmdEJvcmRlciA/IGJveC5ib3R0b21MZWZ0IDogJycpICtcbiAgICAgICAgICAgICAgICBib3guYm90dG9tLnJlcGVhdChjb250ZW50V2lkdGgpICtcbiAgICAgICAgICAgICAgICAoc2hvd1JpZ2h0Qm9yZGVyID8gYm94LmJvdHRvbVJpZ2h0IDogJycpLCBib3R0b21Cb3JkZXJDb2xvciwgJ2ZvcmVncm91bmQnKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzaG93Qm90dG9tQm9yZGVyICYmIGRpbUJvdHRvbUJvcmRlckNvbG9yKSB7XG4gICAgICAgICAgICBib3R0b21Cb3JkZXIgPSBjaGFsay5kaW0oYm90dG9tQm9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXRZID0gc2hvd1RvcEJvcmRlciA/IDEgOiAwO1xuICAgICAgICBpZiAodG9wQm9yZGVyKSB7XG4gICAgICAgICAgICBvdXRwdXQud3JpdGUoeCwgeSwgdG9wQm9yZGVyLCB7IHRyYW5zZm9ybWVyczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3dMZWZ0Qm9yZGVyKSB7XG4gICAgICAgICAgICBvdXRwdXQud3JpdGUoeCwgeSArIG9mZnNldFksIGxlZnRCb3JkZXIsIHsgdHJhbnNmb3JtZXJzOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvd1JpZ2h0Qm9yZGVyKSB7XG4gICAgICAgICAgICBvdXRwdXQud3JpdGUoeCArIHdpZHRoIC0gMSwgeSArIG9mZnNldFksIHJpZ2h0Qm9yZGVyLCB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZXJzOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib3R0b21Cb3JkZXIpIHtcbiAgICAgICAgICAgIG91dHB1dC53cml0ZSh4LCB5ICsgaGVpZ2h0IC0gMSwgYm90dG9tQm9yZGVyLCB7IHRyYW5zZm9ybWVyczogW10gfSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgcmVuZGVyQm9yZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVuZGVyLWJvcmRlci5qcy5tYXAiLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5jb25zdCByZ2JSZWdleCA9IC9ecmdiXFwoXFxzPyhcXGQrKSxcXHM/KFxcZCspLFxccz8oXFxkKylcXHM/XFwpJC87XG5jb25zdCBhbnNpUmVnZXggPSAvXmFuc2kyNTZcXChcXHM/KFxcZCspXFxzP1xcKSQvO1xuY29uc3QgaXNOYW1lZENvbG9yID0gKGNvbG9yKSA9PiB7XG4gICAgcmV0dXJuIGNvbG9yIGluIGNoYWxrO1xufTtcbmNvbnN0IGNvbG9yaXplID0gKHN0ciwgY29sb3IsIHR5cGUpID0+IHtcbiAgICBpZiAoIWNvbG9yKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGlmIChpc05hbWVkQ29sb3IoY29sb3IpKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnZm9yZWdyb3VuZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFsa1tjb2xvcl0oc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYGJnJHtjb2xvclswXS50b1VwcGVyQ2FzZSgpICsgY29sb3Iuc2xpY2UoMSl9YDtcbiAgICAgICAgcmV0dXJuIGNoYWxrW21ldGhvZE5hbWVdKHN0cik7XG4gICAgfVxuICAgIGlmIChjb2xvci5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmb3JlZ3JvdW5kJ1xuICAgICAgICAgICAgPyBjaGFsay5oZXgoY29sb3IpKHN0cilcbiAgICAgICAgICAgIDogY2hhbGsuYmdIZXgoY29sb3IpKHN0cik7XG4gICAgfVxuICAgIGlmIChjb2xvci5zdGFydHNXaXRoKCdhbnNpMjU2JykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGFuc2lSZWdleC5leGVjKGNvbG9yKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKG1hdGNoZXNbMV0pO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2ZvcmVncm91bmQnXG4gICAgICAgICAgICA/IGNoYWxrLmFuc2kyNTYodmFsdWUpKHN0cilcbiAgICAgICAgICAgIDogY2hhbGsuYmdBbnNpMjU2KHZhbHVlKShzdHIpO1xuICAgIH1cbiAgICBpZiAoY29sb3Iuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHJnYlJlZ2V4LmV4ZWMoY29sb3IpO1xuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IE51bWJlcihtYXRjaGVzWzFdKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kVmFsdWUgPSBOdW1iZXIobWF0Y2hlc1syXSk7XG4gICAgICAgIGNvbnN0IHRoaXJkVmFsdWUgPSBOdW1iZXIobWF0Y2hlc1szXSk7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZm9yZWdyb3VuZCdcbiAgICAgICAgICAgID8gY2hhbGsucmdiKGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlLCB0aGlyZFZhbHVlKShzdHIpXG4gICAgICAgICAgICA6IGNoYWxrLmJnUmdiKGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlLCB0aGlyZFZhbHVlKShzdHIpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbG9yaXplO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29sb3JpemUuanMubWFwIiwKICAgICJpbXBvcnQgeyB3aWRlc3RMaW5lIH0gZnJvbSAnLi93aWRlc3QtbGluZS5qcyc7XG5pbXBvcnQgaW5kZW50U3RyaW5nIGZyb20gJ2luZGVudC1zdHJpbmcnO1xuaW1wb3J0ICogYXMgWW9nYSBmcm9tICd5b2dhLXdhc20td2ViJztcbmltcG9ydCB3cmFwVGV4dCBmcm9tICcuL3dyYXAtdGV4dC5qcyc7XG5pbXBvcnQgZ2V0TWF4V2lkdGggZnJvbSAnLi9nZXQtbWF4LXdpZHRoLmpzJztcbmltcG9ydCBzcXVhc2hUZXh0Tm9kZXMgZnJvbSAnLi9zcXVhc2gtdGV4dC1ub2Rlcy5qcyc7XG5pbXBvcnQgcmVuZGVyQm9yZGVyIGZyb20gJy4vcmVuZGVyLWJvcmRlci5qcyc7XG4vLyBJZiBwYXJlbnQgY29udGFpbmVyIGlzIGA8Qm94PmAsIHRleHQgbm9kZXMgd2lsbCBiZSB0cmVhdGVkIGFzIHNlcGFyYXRlIG5vZGVzIGluXG4vLyB0aGUgdHJlZSBhbmQgd2lsbCBoYXZlIHRoZWlyIG93biBjb29yZGluYXRlcyBpbiB0aGUgbGF5b3V0LlxuLy8gVG8gZW5zdXJlIHRleHQgbm9kZXMgYXJlIGFsaWduZWQgY29ycmVjdGx5LCB0YWtlIFggYW5kIFkgb2YgdGhlIGZpcnN0IHRleHQgbm9kZVxuLy8gYW5kIHVzZSBpdCBhcyBvZmZzZXQgZm9yIHRoZSByZXN0IG9mIHRoZSBub2Rlc1xuLy8gT25seSBmaXJzdCBub2RlIGlzIHRha2VuIGludG8gYWNjb3VudCwgYmVjYXVzZSBvdGhlciB0ZXh0IG5vZGVzIGNhbid0IGhhdmUgbWFyZ2luIG9yIHBhZGRpbmcsXG4vLyBzbyB0aGVpciBjb29yZGluYXRlcyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBub2RlIGFueXdheVxuY29uc3QgYXBwbHlQYWRkaW5nVG9UZXh0ID0gKG5vZGUsIHRleHQpID0+IHtcbiAgICBjb25zdCB5b2dhTm9kZSA9IG5vZGUuY2hpbGROb2Rlc1swXT8ueW9nYU5vZGU7XG4gICAgaWYgKHlvZ2FOb2RlKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSB5b2dhTm9kZS5nZXRDb21wdXRlZExlZnQoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IHlvZ2FOb2RlLmdldENvbXB1dGVkVG9wKCk7XG4gICAgICAgIHRleHQgPSAnXFxuJy5yZXBlYXQob2Zmc2V0WSkgKyBpbmRlbnRTdHJpbmcodGV4dCwgb2Zmc2V0WCk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xufTtcbi8vIEFmdGVyIG5vZGVzIGFyZSBsYWlkIG91dCwgcmVuZGVyIGVhY2ggdG8gb3V0cHV0IG9iamVjdCwgd2hpY2ggbGF0ZXIgZ2V0cyByZW5kZXJlZCB0byB0ZXJtaW5hbFxuY29uc3QgcmVuZGVyTm9kZVRvT3V0cHV0ID0gKG5vZGUsIG91dHB1dCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgb2Zmc2V0WCA9IDAsIG9mZnNldFkgPSAwLCB0cmFuc2Zvcm1lcnMgPSBbXSwgc2tpcFN0YXRpY0VsZW1lbnRzLCB9ID0gb3B0aW9ucztcbiAgICBpZiAoc2tpcFN0YXRpY0VsZW1lbnRzICYmIG5vZGUuaW50ZXJuYWxfc3RhdGljKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB5b2dhTm9kZSB9ID0gbm9kZTtcbiAgICBpZiAoeW9nYU5vZGUpIHtcbiAgICAgICAgaWYgKHlvZ2FOb2RlLmdldERpc3BsYXkoKSA9PT0gWW9nYS5ESVNQTEFZX05PTkUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBMZWZ0IGFuZCB0b3AgcG9zaXRpb25zIGluIFlvZ2EgYXJlIHJlbGF0aXZlIHRvIHRoZWlyIHBhcmVudCBub2RlXG4gICAgICAgIGNvbnN0IHggPSBvZmZzZXRYICsgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRMZWZ0KCk7XG4gICAgICAgIGNvbnN0IHkgPSBvZmZzZXRZICsgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRUb3AoKTtcbiAgICAgICAgLy8gVHJhbnNmb3JtZXJzIGFyZSBmdW5jdGlvbnMgdGhhdCB0cmFuc2Zvcm0gZmluYWwgdGV4dCBvdXRwdXQgb2YgZWFjaCBjb21wb25lbnRcbiAgICAgICAgLy8gU2VlIE91dHB1dCBjbGFzcyBmb3IgbG9naWMgdGhhdCBhcHBsaWVzIHRyYW5zZm9ybWVyc1xuICAgICAgICBsZXQgbmV3VHJhbnNmb3JtZXJzID0gdHJhbnNmb3JtZXJzO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUuaW50ZXJuYWxfdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZXdUcmFuc2Zvcm1lcnMgPSBbbm9kZS5pbnRlcm5hbF90cmFuc2Zvcm0sIC4uLnRyYW5zZm9ybWVyc107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdpbmstdGV4dCcpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gc3F1YXNoVGV4dE5vZGVzKG5vZGUpO1xuICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IHdpZGVzdExpbmUodGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBnZXRNYXhXaWR0aCh5b2dhTm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRXcmFwID0gbm9kZS5zdHlsZS50ZXh0V3JhcCA/PyAnd3JhcCc7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB3cmFwVGV4dCh0ZXh0LCBtYXhXaWR0aCwgdGV4dFdyYXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZXh0ID0gYXBwbHlQYWRkaW5nVG9UZXh0KG5vZGUsIHRleHQpO1xuICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZSh4LCB5LCB0ZXh0LCB7IHRyYW5zZm9ybWVyczogbmV3VHJhbnNmb3JtZXJzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjbGlwcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnaW5rLWJveCcpIHtcbiAgICAgICAgICAgIHJlbmRlckJvcmRlcih4LCB5LCBub2RlLCBvdXRwdXQpO1xuICAgICAgICAgICAgY29uc3QgY2xpcEhvcml6b250YWxseSA9IG5vZGUuc3R5bGUub3ZlcmZsb3dYID09PSAnaGlkZGVuJyB8fCBub2RlLnN0eWxlLm92ZXJmbG93ID09PSAnaGlkZGVuJztcbiAgICAgICAgICAgIGNvbnN0IGNsaXBWZXJ0aWNhbGx5ID0gbm9kZS5zdHlsZS5vdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IG5vZGUuc3R5bGUub3ZlcmZsb3cgPT09ICdoaWRkZW4nO1xuICAgICAgICAgICAgaWYgKGNsaXBIb3Jpem9udGFsbHkgfHwgY2xpcFZlcnRpY2FsbHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4MSA9IGNsaXBIb3Jpem9udGFsbHlcbiAgICAgICAgICAgICAgICAgICAgPyB4ICsgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRCb3JkZXIoWW9nYS5FREdFX0xFRlQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHgyID0gY2xpcEhvcml6b250YWxseVxuICAgICAgICAgICAgICAgICAgICA/IHggK1xuICAgICAgICAgICAgICAgICAgICAgICAgeW9nYU5vZGUuZ2V0Q29tcHV0ZWRXaWR0aCgpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHlvZ2FOb2RlLmdldENvbXB1dGVkQm9yZGVyKFlvZ2EuRURHRV9SSUdIVClcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgeTEgPSBjbGlwVmVydGljYWxseVxuICAgICAgICAgICAgICAgICAgICA/IHkgKyB5b2dhTm9kZS5nZXRDb21wdXRlZEJvcmRlcihZb2dhLkVER0VfVE9QKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCB5MiA9IGNsaXBWZXJ0aWNhbGx5XG4gICAgICAgICAgICAgICAgICAgID8geSArXG4gICAgICAgICAgICAgICAgICAgICAgICB5b2dhTm9kZS5nZXRDb21wdXRlZEhlaWdodCgpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHlvZ2FOb2RlLmdldENvbXB1dGVkQm9yZGVyKFlvZ2EuRURHRV9CT1RUT00pXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG91dHB1dC5jbGlwKHsgeDEsIHgyLCB5MSwgeTIgfSk7XG4gICAgICAgICAgICAgICAgY2xpcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdpbmstcm9vdCcgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ2luay1ib3gnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICByZW5kZXJOb2RlVG9PdXRwdXQoY2hpbGROb2RlLCBvdXRwdXQsIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogeCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogeSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXJzOiBuZXdUcmFuc2Zvcm1lcnMsXG4gICAgICAgICAgICAgICAgICAgIHNraXBTdGF0aWNFbGVtZW50cyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjbGlwcGVkKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnVuY2xpcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHJlbmRlck5vZGVUb091dHB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbmRlci1ub2RlLXRvLW91dHB1dC5qcy5tYXAiLAogICAgImltcG9ydCB7ZWFzdEFzaWFuV2lkdGh9IGZyb20gJ2dldC1lYXN0LWFzaWFuLXdpZHRoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZVBvaW50KSB7XG5cdGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIGVhc3RBc2lhbldpZHRoKGNvZGVQb2ludCkgPT09IDI7XG59XG4iLAogICAgImltcG9ydCBhbnNpU3R5bGVzIGZyb20gJ2Fuc2ktc3R5bGVzJztcbmltcG9ydCBpc0Z1bGx3aWR0aENvZGVQb2ludCBmcm9tICdpcy1mdWxsd2lkdGgtY29kZS1wb2ludCc7XG5cbi8vIFxceDFiIGFuZCBcXHg5YlxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoWzI3LCAxNTVdKTtcblxuY29uc3QgQ09ERV9QT0lOVF8wID0gJzAnLmNvZGVQb2ludEF0KDApO1xuY29uc3QgQ09ERV9QT0lOVF85ID0gJzknLmNvZGVQb2ludEF0KDApO1xuXG5jb25zdCBlbmRDb2Rlc1NldCA9IG5ldyBTZXQoKTtcbmNvbnN0IGVuZENvZGVzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc3RhcnQsIGVuZF0gb2YgYW5zaVN0eWxlcy5jb2Rlcykge1xuXHRlbmRDb2Rlc1NldC5hZGQoYW5zaVN0eWxlcy5jb2xvci5hbnNpKGVuZCkpO1xuXHRlbmRDb2Rlc01hcC5zZXQoYW5zaVN0eWxlcy5jb2xvci5hbnNpKHN0YXJ0KSwgYW5zaVN0eWxlcy5jb2xvci5hbnNpKGVuZCkpO1xufVxuXG5mdW5jdGlvbiBnZXRFbmRDb2RlKGNvZGUpIHtcblx0aWYgKGVuZENvZGVzU2V0Lmhhcyhjb2RlKSkge1xuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0aWYgKGVuZENvZGVzTWFwLmhhcyhjb2RlKSkge1xuXHRcdHJldHVybiBlbmRDb2Rlc01hcC5nZXQoY29kZSk7XG5cdH1cblxuXHRjb2RlID0gY29kZS5zbGljZSgyKTtcblx0aWYgKGNvZGUuaW5jbHVkZXMoJzsnKSkge1xuXHRcdGNvZGUgPSBjb2RlWzBdICsgJzAnO1xuXHR9XG5cblx0Y29uc3QgcmV0dXJuVmFsdWUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIucGFyc2VJbnQoY29kZSwgMTApKTtcblx0aWYgKHJldHVyblZhbHVlKSB7XG5cdFx0cmV0dXJuIGFuc2lTdHlsZXMuY29sb3IuYW5zaShyZXR1cm5WYWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gYW5zaVN0eWxlcy5yZXNldC5vcGVuO1xufVxuXG5mdW5jdGlvbiBmaW5kTnVtYmVySW5kZXgoc3RyaW5nKSB7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdHJpbmcubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgY29kZVBvaW50ID0gc3RyaW5nLmNvZGVQb2ludEF0KGluZGV4KTtcblx0XHRpZiAoY29kZVBvaW50ID49IENPREVfUE9JTlRfMCAmJiBjb2RlUG9pbnQgPD0gQ09ERV9QT0lOVF85KSB7XG5cdFx0XHRyZXR1cm4gaW5kZXg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFuc2lDb2RlKHN0cmluZywgb2Zmc2V0KSB7XG5cdHN0cmluZyA9IHN0cmluZy5zbGljZShvZmZzZXQsIG9mZnNldCArIDE5KTtcblx0Y29uc3Qgc3RhcnRJbmRleCA9IGZpbmROdW1iZXJJbmRleChzdHJpbmcpO1xuXHRpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcblx0XHRsZXQgZW5kSW5kZXggPSBzdHJpbmcuaW5kZXhPZignbScsIHN0YXJ0SW5kZXgpO1xuXHRcdGlmIChlbmRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGVuZEluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nLnNsaWNlKDAsIGVuZEluZGV4ICsgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdG9rZW5pemUoc3RyaW5nLCBlbmRDaGFyYWN0ZXIgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcblx0Y29uc3QgcmV0dXJuVmFsdWUgPSBbXTtcblxuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgdmlzaWJsZUNvdW50ID0gMDtcblx0d2hpbGUgKGluZGV4IDwgc3RyaW5nLmxlbmd0aCkge1xuXHRcdGNvbnN0IGNvZGVQb2ludCA9IHN0cmluZy5jb2RlUG9pbnRBdChpbmRleCk7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY29kZVBvaW50KSkge1xuXHRcdFx0Y29uc3QgY29kZSA9IHBhcnNlQW5zaUNvZGUoc3RyaW5nLCBpbmRleCk7XG5cdFx0XHRpZiAoY29kZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZS5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiAnYW5zaScsXG5cdFx0XHRcdFx0Y29kZSxcblx0XHRcdFx0XHRlbmRDb2RlOiBnZXRFbmRDb2RlKGNvZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aW5kZXggKz0gY29kZS5sZW5ndGg7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGlzRnVsbFdpZHRoID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZVBvaW50KTtcblx0XHRjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuXG5cdFx0cmV0dXJuVmFsdWUucHVzaCh7XG5cdFx0XHR0eXBlOiAnY2hhcmFjdGVyJyxcblx0XHRcdHZhbHVlOiBjaGFyYWN0ZXIsXG5cdFx0XHRpc0Z1bGxXaWR0aCxcblx0XHR9KTtcblxuXHRcdGluZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG5cdFx0dmlzaWJsZUNvdW50ICs9IGlzRnVsbFdpZHRoID8gMiA6IGNoYXJhY3Rlci5sZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZUNvdW50ID49IGVuZENoYXJhY3Rlcikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VBbnNpQ29kZXMoY29kZXMpIHtcblx0bGV0IHJldHVyblZhbHVlID0gW107XG5cblx0Zm9yIChjb25zdCBjb2RlIG9mIGNvZGVzKSB7XG5cdFx0aWYgKGNvZGUuY29kZSA9PT0gYW5zaVN0eWxlcy5yZXNldC5vcGVuKSB7XG5cdFx0XHQvLyBSZXNldCBjb2RlLCBkaXNhYmxlIGFsbCBjb2Rlc1xuXHRcdFx0cmV0dXJuVmFsdWUgPSBbXTtcblx0XHR9IGVsc2UgaWYgKGVuZENvZGVzU2V0Lmhhcyhjb2RlLmNvZGUpKSB7XG5cdFx0XHQvLyBUaGlzIGlzIGFuIGVuZCBjb2RlLCBkaXNhYmxlIGFsbCBtYXRjaGluZyBzdGFydCBjb2Rlc1xuXHRcdFx0cmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5maWx0ZXIocmV0dXJuVmFsdWVDb2RlID0+IHJldHVyblZhbHVlQ29kZS5lbmRDb2RlICE9PSBjb2RlLmNvZGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUaGlzIGlzIGEgc3RhcnQgY29kZS4gRGlzYWJsZSBhbGwgc3R5bGVzIHRoaXMgXCJvdmVycmlkZXNcIiwgdGhlbiBlbmFibGUgaXRcblx0XHRcdHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUuZmlsdGVyKHJldHVyblZhbHVlQ29kZSA9PiByZXR1cm5WYWx1ZUNvZGUuZW5kQ29kZSAhPT0gY29kZS5lbmRDb2RlKTtcblx0XHRcdHJldHVyblZhbHVlLnB1c2goY29kZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5mdW5jdGlvbiB1bmRvQW5zaUNvZGVzKGNvZGVzKSB7XG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2VBbnNpQ29kZXMoY29kZXMpO1xuXHRjb25zdCBlbmRDb2RlcyA9IHJlZHVjZWQubWFwKCh7ZW5kQ29kZX0pID0+IGVuZENvZGUpO1xuXHRyZXR1cm4gZW5kQ29kZXMucmV2ZXJzZSgpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGljZUFuc2koc3RyaW5nLCBzdGFydCwgZW5kKSB7XG5cdGNvbnN0IHRva2VucyA9IHRva2VuaXplKHN0cmluZywgZW5kKTtcblx0bGV0IGFjdGl2ZUNvZGVzID0gW107XG5cdGxldCBwb3NpdGlvbiA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRsZXQgaW5jbHVkZSA9IGZhbHNlO1xuXG5cdGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG5cdFx0aWYgKGVuZCAhPT0gdW5kZWZpbmVkICYmIHBvc2l0aW9uID49IGVuZCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKHRva2VuLnR5cGUgPT09ICdhbnNpJykge1xuXHRcdFx0YWN0aXZlQ29kZXMucHVzaCh0b2tlbik7XG5cdFx0XHRpZiAoaW5jbHVkZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB0b2tlbi5jb2RlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDaGFyYWN0ZXJcblx0XHRcdGlmICghaW5jbHVkZSAmJiBwb3NpdGlvbiA+PSBzdGFydCkge1xuXHRcdFx0XHRpbmNsdWRlID0gdHJ1ZTtcblx0XHRcdFx0Ly8gU2ltcGxpZnkgYWN0aXZlIGNvZGVzXG5cdFx0XHRcdGFjdGl2ZUNvZGVzID0gcmVkdWNlQW5zaUNvZGVzKGFjdGl2ZUNvZGVzKTtcblx0XHRcdFx0cmV0dXJuVmFsdWUgPSBhY3RpdmVDb2Rlcy5tYXAoKHtjb2RlfSkgPT4gY29kZSkuam9pbignJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbmNsdWRlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHRva2VuLnZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRwb3NpdGlvbiArPSB0b2tlbi5pc0Z1bGxXaWR0aCA/IDIgOiB0b2tlbi52YWx1ZS5sZW5ndGg7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRGlzYWJsZSBhY3RpdmUgY29kZXMgYXQgdGhlIGVuZFxuXHRyZXR1cm5WYWx1ZSArPSB1bmRvQW5zaUNvZGVzKGFjdGl2ZUNvZGVzKTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufVxuIiwKICAgICJpbXBvcnQgYW5zaVN0eWxlcyBmcm9tIFwiYW5zaS1zdHlsZXNcIjtcbmV4cG9ydCBjb25zdCBFU0NBUEVTID0gbmV3IFNldChbMjcsIDE1NV0pOyAvLyBcXHgxYiBhbmQgXFx4OWJcbmV4cG9ydCBjb25zdCBlbmRDb2Rlc1NldCA9IG5ldyBTZXQoKTtcbmNvbnN0IGVuZENvZGVzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc3RhcnQsIGVuZF0gb2YgYW5zaVN0eWxlcy5jb2Rlcykge1xuICAgIGVuZENvZGVzU2V0LmFkZChhbnNpU3R5bGVzLmNvbG9yLmFuc2koZW5kKSk7XG4gICAgZW5kQ29kZXNNYXAuc2V0KGFuc2lTdHlsZXMuY29sb3IuYW5zaShzdGFydCksIGFuc2lTdHlsZXMuY29sb3IuYW5zaShlbmQpKTtcbn1cbmV4cG9ydCBjb25zdCBsaW5rU3RhcnRDb2RlUHJlZml4ID0gXCJcXHgxQl04OztcIjtcbmV4cG9ydCBjb25zdCBsaW5rU3RhcnRDb2RlUHJlZml4Q2hhckNvZGVzID0gbGlua1N0YXJ0Q29kZVByZWZpeFxuICAgIC5zcGxpdChcIlwiKVxuICAgIC5tYXAoKGNoYXIpID0+IGNoYXIuY2hhckNvZGVBdCgwKSk7XG5leHBvcnQgY29uc3QgbGlua0NvZGVTdWZmaXggPSBcIlxceDA3XCI7XG5leHBvcnQgY29uc3QgbGlua0NvZGVTdWZmaXhDaGFyQ29kZSA9IGxpbmtDb2RlU3VmZml4LmNoYXJDb2RlQXQoMCk7XG5leHBvcnQgY29uc3QgbGlua0VuZENvZGUgPSBgXFx4MUJdODs7JHtsaW5rQ29kZVN1ZmZpeH1gO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmtTdGFydENvZGUodXJsKSB7XG4gICAgcmV0dXJuIGAke2xpbmtTdGFydENvZGVQcmVmaXh9JHt1cmx9JHtsaW5rQ29kZVN1ZmZpeH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVuZENvZGUoY29kZSkge1xuICAgIGlmIChlbmRDb2Rlc1NldC5oYXMoY29kZSkpXG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIGlmIChlbmRDb2Rlc01hcC5oYXMoY29kZSkpXG4gICAgICAgIHJldHVybiBlbmRDb2Rlc01hcC5nZXQoY29kZSk7XG4gICAgaWYgKGNvZGUuc3RhcnRzV2l0aChsaW5rU3RhcnRDb2RlUHJlZml4KSlcbiAgICAgICAgcmV0dXJuIGxpbmtFbmRDb2RlO1xuICAgIGNvZGUgPSBjb2RlLnNsaWNlKDIpO1xuICAgIGlmIChjb2RlLmluY2x1ZGVzKFwiO1wiKSkge1xuICAgICAgICBjb2RlID0gY29kZVswXSArIFwiMFwiO1xuICAgIH1cbiAgICBjb25zdCByZXQgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChwYXJzZUludChjb2RlLCAxMCkpO1xuICAgIGlmIChyZXQpIHtcbiAgICAgICAgcmV0dXJuIGFuc2lTdHlsZXMuY29sb3IuYW5zaShyZXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFuc2lTdHlsZXMucmVzZXQub3BlbjtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYW5zaUNvZGVzVG9TdHJpbmcoY29kZXMpIHtcbiAgICByZXR1cm4gY29kZXMubWFwKChjb2RlKSA9PiBjb2RlLmNvZGUpLmpvaW4oXCJcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbnNpQ29kZXMuanMubWFwIiwKICAgICJpbXBvcnQgYW5zaVN0eWxlcyBmcm9tIFwiYW5zaS1zdHlsZXNcIjtcbmltcG9ydCB7IGVuZENvZGVzU2V0IH0gZnJvbSBcIi4vYW5zaUNvZGVzLmpzXCI7XG4vKiogUmVkdWNlcyB0aGUgZ2l2ZW4gYXJyYXkgb2YgQU5TSSBjb2RlcyB0byB0aGUgbWluaW11bSBuZWNlc3NhcnkgdG8gcmVuZGVyIHdpdGggdGhlIHNhbWUgc3R5bGUgKi9cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VBbnNpQ29kZXMoY29kZXMpIHtcbiAgICByZXR1cm4gcmVkdWNlQW5zaUNvZGVzSW5jcmVtZW50YWwoW10sIGNvZGVzKTtcbn1cbi8qKiBMaWtlIHtAbGluayByZWR1Y2VBbnNpQ29kZXN9LCBidXQgYXNzdW1lcyB0aGF0IGBjb2Rlc2AgaXMgYWxyZWFkeSByZWR1Y2VkLiBGdXJ0aGVyIHJlZHVjdGlvbnMgYXJlIG9ubHkgZG9uZSBmb3IgdGhlIGl0ZW1zIGluIGBuZXdDb2Rlc2AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlQW5zaUNvZGVzSW5jcmVtZW50YWwoY29kZXMsIG5ld0NvZGVzKSB7XG4gICAgbGV0IHJldCA9IFsuLi5jb2Rlc107XG4gICAgZm9yIChjb25zdCBjb2RlIG9mIG5ld0NvZGVzKSB7XG4gICAgICAgIGlmIChjb2RlLmNvZGUgPT09IGFuc2lTdHlsZXMucmVzZXQub3Blbikge1xuICAgICAgICAgICAgLy8gUmVzZXQgY29kZSwgZGlzYWJsZSBhbGwgY29kZXNcbiAgICAgICAgICAgIHJldCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVuZENvZGVzU2V0Lmhhcyhjb2RlLmNvZGUpKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGVuZCBjb2RlLCBkaXNhYmxlIGFsbCBtYXRjaGluZyBzdGFydCBjb2Rlc1xuICAgICAgICAgICAgcmV0ID0gcmV0LmZpbHRlcigocmV0Q29kZSkgPT4gcmV0Q29kZS5lbmRDb2RlICE9PSBjb2RlLmNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHN0YXJ0IGNvZGUuIERpc2FibGUgYWxsIHN0eWxlcyB0aGlzIFwib3ZlcnJpZGVzXCIsIHRoZW4gZW5hYmxlIGl0XG4gICAgICAgICAgICByZXQgPSByZXQuZmlsdGVyKChyZXRDb2RlKSA9PiByZXRDb2RlLmVuZENvZGUgIT09IGNvZGUuZW5kQ29kZSk7XG4gICAgICAgICAgICByZXQucHVzaChjb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdWNlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgcmVkdWNlQW5zaUNvZGVzIH0gZnJvbSBcIi4vcmVkdWNlLmpzXCI7XG4vKiogUmV0dXJucyB0aGUgY29tYmluYXRpb24gb2YgQU5TSSBjb2RlcyBuZWVkZWQgdG8gdW5kbyB0aGUgZ2l2ZW4gQU5TSSBjb2RlcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZG9BbnNpQ29kZXMoY29kZXMpIHtcbiAgICByZXR1cm4gcmVkdWNlQW5zaUNvZGVzKGNvZGVzKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5tYXAoKGNvZGUpID0+ICh7XG4gICAgICAgIC4uLmNvZGUsXG4gICAgICAgIGNvZGU6IGNvZGUuZW5kQ29kZSxcbiAgICB9KSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmRvLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdW5kb0Fuc2lDb2RlcyB9IGZyb20gXCIuL3VuZG8uanNcIjtcbi8qKlxuICogUmV0dXJucyB0aGUgbWluaW11bSBhbW91bnQgb2YgQU5TSSBjb2RlcyBuZWNlc3NhcnkgdG8gZ2V0IGZyb20gdGhlIGNvbXBvdW5kIHN0eWxlIGBmcm9tYCB0byBgdG9gLlxuICogQm90aCBgZnJvbWAgYW5kIGB0b2AgYXJlIGV4cGVjdGVkIHRvIGJlIHJlZHVjZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQW5zaUNvZGVzKGZyb20sIHRvKSB7XG4gICAgY29uc3QgZW5kQ29kZXNJblRvID0gbmV3IFNldCh0by5tYXAoKGNvZGUpID0+IGNvZGUuZW5kQ29kZSkpO1xuICAgIGNvbnN0IHN0YXJ0Q29kZXNJbkZyb20gPSBuZXcgU2V0KGZyb20ubWFwKChjb2RlKSA9PiBjb2RlLmNvZGUpKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBJZ25vcmUgYWxsIHN0eWxlcyBpbiBgZnJvbWAgdGhhdCBhcmUgbm90IG92ZXJ3cml0dGVuIG9yIHJlbW92ZWQgYnkgYHRvYFxuICAgICAgICAvLyBEaXNhYmxlIGFsbCBzdHlsZXMgaW4gYGZyb21gIHRoYXQgYXJlIHJlbW92ZWQgaW4gYHRvYFxuICAgICAgICAuLi51bmRvQW5zaUNvZGVzKGZyb20uZmlsdGVyKChjb2RlKSA9PiAhZW5kQ29kZXNJblRvLmhhcyhjb2RlLmVuZENvZGUpKSksXG4gICAgICAgIC8vIEFkZCBhbGwgc3R5bGVzIGluIGB0b2AgdGhhdCBkb24ndCBleGlzdCBpbiBgZnJvbWBcbiAgICAgICAgLi4udG8uZmlsdGVyKChjb2RlKSA9PiAhc3RhcnRDb2Rlc0luRnJvbS5oYXMoY29kZS5jb2RlKSksXG4gICAgXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpZmYuanMubWFwIiwKICAgICJpbXBvcnQgeyBhbnNpQ29kZXNUb1N0cmluZyB9IGZyb20gXCIuL2Fuc2lDb2Rlcy5qc1wiO1xuaW1wb3J0IHsgZGlmZkFuc2lDb2RlcyB9IGZyb20gXCIuL2RpZmYuanNcIjtcbmltcG9ydCB7IHJlZHVjZUFuc2lDb2Rlc0luY3JlbWVudGFsIH0gZnJvbSBcIi4vcmVkdWNlLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gc3R5bGVkQ2hhcnNGcm9tVG9rZW5zKHRva2Vucykge1xuICAgIGxldCBjb2RlcyA9IFtdO1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBcImFuc2lcIikge1xuICAgICAgICAgICAgY29kZXMgPSByZWR1Y2VBbnNpQ29kZXNJbmNyZW1lbnRhbChjb2RlcywgW3Rva2VuXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gXCJjaGFyXCIpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICAgICAgICBzdHlsZXM6IFsuLi5jb2Rlc10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlZENoYXJzVG9TdHJpbmcoY2hhcnMpIHtcbiAgICBsZXQgcmV0ID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXIgPSBjaGFyc1tpXTtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHJldCArPSBhbnNpQ29kZXNUb1N0cmluZyhjaGFyLnN0eWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXQgKz0gYW5zaUNvZGVzVG9TdHJpbmcoZGlmZkFuc2lDb2RlcyhjaGFyc1tpIC0gMV0uc3R5bGVzLCBjaGFyLnN0eWxlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldCArPSBjaGFyLnZhbHVlO1xuICAgICAgICAvLyByZXNldCBhY3RpdmUgc3R5bGVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xuICAgICAgICBpZiAoaSA9PT0gY2hhcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0ICs9IGFuc2lDb2Rlc1RvU3RyaW5nKGRpZmZBbnNpQ29kZXMoY2hhci5zdHlsZXMsIFtdKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlZENoYXJzLmpzLm1hcCIsCiAgICAiaW1wb3J0IGlzRnVsbHdpZHRoQ29kZVBvaW50IGZyb20gXCJpcy1mdWxsd2lkdGgtY29kZS1wb2ludFwiO1xuaW1wb3J0IHsgRVNDQVBFUywgZ2V0RW5kQ29kZSwgbGlua1N0YXJ0Q29kZVByZWZpeCwgbGlua1N0YXJ0Q29kZVByZWZpeENoYXJDb2RlcywgfSBmcm9tIFwiLi9hbnNpQ29kZXMuanNcIjtcbmZ1bmN0aW9uIGZpbmROdW1iZXJJbmRleChzdHIpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gcGFyc2VMaW5rQ29kZShzdHJpbmcsIG9mZnNldCkge1xuICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShvZmZzZXQpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBsaW5rU3RhcnRDb2RlUHJlZml4Q2hhckNvZGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpICE9PSBsaW5rU3RhcnRDb2RlUHJlZml4Q2hhckNvZGVzW2luZGV4XSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGlzIGlzIGEgbGluayBjb2RlICh3aXRoIG9yIHdpdGhvdXQgdGhlIFVSTCBwYXJ0KS4gRmluZCB0aGUgZW5kIG9mIGl0LlxuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoXCJcXHgwN1wiLCBsaW5rU3RhcnRDb2RlUHJlZml4Lmxlbmd0aCk7XG4gICAgaWYgKGVuZEluZGV4ID09PSAtMSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIGVuZEluZGV4ICsgMSk7XG59XG5mdW5jdGlvbiBwYXJzZUFuc2lDb2RlKHN0cmluZywgb2Zmc2V0KSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgMTkpO1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBmaW5kTnVtYmVySW5kZXgoc3RyaW5nKTtcbiAgICBpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoXCJtXCIsIHN0YXJ0SW5kZXgpO1xuICAgICAgICBpZiAoZW5kSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBlbmRJbmRleCArIDEpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZShzdHIsIGVuZENoYXIgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCB2aXNpYmxlID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHN0ci5jb2RlUG9pbnRBdChpbmRleCk7XG4gICAgICAgIGlmIChFU0NBUEVTLmhhcyhjb2RlUG9pbnQpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgZGVjaWRlIG9uIHRoZSBuZXh0IGNoYXJhY3RlciAoXCJbXCIgb3IgXCJdXCIpIHdoaWNoIGNvZGUgcGF0aCB0byB0YWtlLlxuICAgICAgICAgICAgY29uc3QgY29kZSA9IHBhcnNlTGlua0NvZGUoc3RyLCBpbmRleCkgfHwgcGFyc2VBbnNpQ29kZShzdHIsIGluZGV4KTtcbiAgICAgICAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFuc2lcIixcbiAgICAgICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29kZTogZ2V0RW5kQ29kZShjb2RlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpbmRleCArPSBjb2RlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdWxsV2lkdGggPSBpc0Z1bGx3aWR0aENvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcImNoYXJcIixcbiAgICAgICAgICAgIHZhbHVlOiBjaGFyYWN0ZXIsXG4gICAgICAgICAgICBmdWxsV2lkdGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpbmRleCArPSBjaGFyYWN0ZXIubGVuZ3RoO1xuICAgICAgICB2aXNpYmxlICs9IGZ1bGxXaWR0aCA/IDIgOiBjaGFyYWN0ZXIubGVuZ3RoO1xuICAgICAgICBpZiAodmlzaWJsZSA+PSBlbmRDaGFyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9rZW5pemUuanMubWFwIiwKICAgICJpbXBvcnQgc2xpY2VBbnNpIGZyb20gJ3NsaWNlLWFuc2knO1xuaW1wb3J0IHsgd2lkZXN0TGluZSB9IGZyb20gJy4vd2lkZXN0LWxpbmUuanMnO1xuaW1wb3J0IHsgc3R5bGVkQ2hhcnNGcm9tVG9rZW5zLCBzdHlsZWRDaGFyc1RvU3RyaW5nLCB0b2tlbml6ZSwgfSBmcm9tICdAYWxjYWx6b25lL2Fuc2ktdG9rZW5pemUnO1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ3N0cmluZy13aWR0aCc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPdXRwdXQge1xuICAgIHdpZHRoO1xuICAgIGhlaWdodDtcbiAgICBvcGVyYXRpb25zID0gW107XG4gICAgY2hhckNhY2hlID0ge307XG4gICAgc3R5bGVkQ2hhcnNUb1N0cmluZ0NhY2hlID0ge307XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICAgIHdyaXRlKHgsIHksIHRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB0cmFuc2Zvcm1lcnMgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd3cml0ZScsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB0cmFuc2Zvcm1lcnMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGlwKGNsaXApIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2NsaXAnLFxuICAgICAgICAgICAgY2xpcCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVuY2xpcCgpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3VuY2xpcCcsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IGFycmF5IHdpdGggYSBzcGVjaWZpYyBzZXQgb2Ygcm93cywgc28gdGhhdCBtYXJnaW4vcGFkZGluZyBhdCB0aGUgYm90dG9tIGlzIHByZXNlcnZlZFxuICAgICAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLmhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgcm93LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2hhcicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnICcsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlczogW10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXQucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaXBzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIHRoaXMub3BlcmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnY2xpcCcpIHtcbiAgICAgICAgICAgICAgICBjbGlwcy5wdXNoKG9wZXJhdGlvbi5jbGlwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3VuY2xpcCcpIHtcbiAgICAgICAgICAgICAgICBjbGlwcy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3dyaXRlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCwgdHJhbnNmb3JtZXJzIH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgICAgIGxldCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaXAgPSBjbGlwcy5hdCgtMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNsaXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcEhvcml6b250YWxseSA9IHR5cGVvZiBjbGlwPy54MSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNsaXA/LngyID09PSAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcFZlcnRpY2FsbHkgPSB0eXBlb2YgY2xpcD8ueTEgPT09ICdudW1iZXInICYmIHR5cGVvZiBjbGlwPy55MiA9PT0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRleHQgaXMgcG9zaXRpb25lZCBvdXRzaWRlIG9mIGNsaXBwaW5nIGFyZWEgYWx0b2dldGhlcixcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2FsY3VsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwSG9yaXpvbnRhbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHdpZGVzdExpbmUodGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCArIHdpZHRoIDwgY2xpcC54MSB8fCB4ID4gY2xpcC54Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwVmVydGljYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgKyBoZWlnaHQgPCBjbGlwLnkxIHx8IHkgPiBjbGlwLnkyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBIb3Jpem9udGFsbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMubWFwKGxpbmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb20gPSB4IDwgY2xpcC54MSA/IGNsaXAueDEgLSB4IDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHN0cmluZ1dpZHRoKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvID0geCArIHdpZHRoID4gY2xpcC54MiA/IGNsaXAueDIgLSB4IDogd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNsaWNlQW5zaShsaW5lLCBmcm9tLCB0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4IDwgY2xpcC54MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBjbGlwLngxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwVmVydGljYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9IHkgPCBjbGlwLnkxID8gY2xpcC55MSAtIHkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG8gPSB5ICsgaGVpZ2h0ID4gY2xpcC55MiA/IGNsaXAueTIgLSB5IDogaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZShmcm9tLCB0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IGNsaXAueTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gY2xpcC55MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0WSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZGV4LCBsaW5lXSBvZiBsaW5lcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExpbmUgPSBvdXRwdXRbeSArIG9mZnNldFldO1xuICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIGNhbiBiZSBtaXNzaW5nIGlmIGB0ZXh0YCBpcyB0YWxsZXIgdGhhbiBoZWlnaHQgb2YgcHJlLWluaXRpYWxpemVkIGB0aGlzLm91dHB1dGBcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50TGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0cmFuc2Zvcm1lciBvZiB0cmFuc2Zvcm1lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0cmFuc2Zvcm1lcihsaW5lLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoYXJDYWNoZS5oYXNPd25Qcm9wZXJ0eShsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFyQ2FjaGVbbGluZV0gPSBzdHlsZWRDaGFyc0Zyb21Ub2tlbnModG9rZW5pemUobGluZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJhY3RlcnMgPSB0aGlzLmNoYXJDYWNoZVtsaW5lXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldFggPSB4O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXJhY3RlciBvZiBjaGFyYWN0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGluZVtvZmZzZXRYXSA9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWUgY2hhcmFjdGVycyB0YWtlIHVwIG1vcmUgdGhhbiBvbmUgY29sdW1uLiBJbiB0aGF0IGNhc2UsIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBpeGVscyBuZWVkIHRvIGJlIGNsZWFyZWQgdG8gYXZvaWQgcHJpbnRpbmcgZXh0cmEgY2hhcmFjdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNXaWRlQ2hhcmFjdGVyID0gY2hhcmFjdGVyLmZ1bGxXaWR0aCB8fCBjaGFyYWN0ZXIudmFsdWUubGVuZ3RoID4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dpZGVDaGFyYWN0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGluZVtvZmZzZXRYICsgMV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjaGFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsV2lkdGg6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM6IGNoYXJhY3Rlci5zdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFggKz0gaXNXaWRlQ2hhcmFjdGVyID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRPdXRwdXQgPSBvdXRwdXRcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiB7XG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZhZGltZGVtZWRlcy9pbmsvcHVsbC81NjQjaXNzdWVjb21tZW50LTE2MzcwMjI3NDJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaXRob3V0RW1wdHlJdGVtcyA9IGxpbmUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGxpbmVXaXRob3V0RW1wdHlJdGVtcyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3R5bGVkQ2hhcnNUb1N0cmluZ0NhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdHlsZWRDaGFyc1RvU3RyaW5nKGxpbmVXaXRob3V0RW1wdHlJdGVtcykudHJpbUVuZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVkQ2hhcnNUb1N0cmluZ0NhY2hlW2tleV0gPSByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZWRDaGFyc1RvU3RyaW5nQ2FjaGVba2V5XTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dHB1dDogZ2VuZXJhdGVkT3V0cHV0LFxuICAgICAgICAgICAgaGVpZ2h0OiBvdXRwdXQubGVuZ3RoLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW91dHB1dC5qcy5tYXAiLAogICAgImltcG9ydCByZW5kZXJOb2RlVG9PdXRwdXQgZnJvbSAnLi9yZW5kZXItbm9kZS10by1vdXRwdXQuanMnO1xuaW1wb3J0IE91dHB1dCBmcm9tICcuL291dHB1dC5qcyc7XG5jb25zdCByZW5kZXJlciA9IChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUueW9nYU5vZGUpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IE91dHB1dCh7XG4gICAgICAgICAgICB3aWR0aDogbm9kZS55b2dhTm9kZS5nZXRDb21wdXRlZFdpZHRoKCksXG4gICAgICAgICAgICBoZWlnaHQ6IG5vZGUueW9nYU5vZGUuZ2V0Q29tcHV0ZWRIZWlnaHQoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbmRlck5vZGVUb091dHB1dChub2RlLCBvdXRwdXQsIHsgc2tpcFN0YXRpY0VsZW1lbnRzOiB0cnVlIH0pO1xuICAgICAgICBsZXQgc3RhdGljT3V0cHV0O1xuICAgICAgICBpZiAobm9kZS5zdGF0aWNOb2RlPy55b2dhTm9kZSkge1xuICAgICAgICAgICAgc3RhdGljT3V0cHV0ID0gbmV3IE91dHB1dCh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IG5vZGUuc3RhdGljTm9kZS55b2dhTm9kZS5nZXRDb21wdXRlZFdpZHRoKCksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBub2RlLnN0YXRpY05vZGUueW9nYU5vZGUuZ2V0Q29tcHV0ZWRIZWlnaHQoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVuZGVyTm9kZVRvT3V0cHV0KG5vZGUuc3RhdGljTm9kZSwgc3RhdGljT3V0cHV0LCB7XG4gICAgICAgICAgICAgICAgc2tpcFN0YXRpY0VsZW1lbnRzOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3V0cHV0OiBnZW5lcmF0ZWRPdXRwdXQsIGhlaWdodDogb3V0cHV0SGVpZ2h0IH0gPSBvdXRwdXQuZ2V0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRwdXQ6IGdlbmVyYXRlZE91dHB1dCxcbiAgICAgICAgICAgIG91dHB1dEhlaWdodCxcbiAgICAgICAgICAgIC8vIE5ld2xpbmUgYXQgdGhlIGVuZCBpcyBuZWVkZWQsIGJlY2F1c2Ugc3RhdGljIG91dHB1dCBkb2Vzbid0IGhhdmUgb25lLCBzb1xuICAgICAgICAgICAgLy8gaW50ZXJhY3RpdmUgb3V0cHV0IHdpbGwgb3ZlcnJpZGUgbGFzdCBsaW5lIG9mIHN0YXRpYyBvdXRwdXRcbiAgICAgICAgICAgIHN0YXRpY091dHB1dDogc3RhdGljT3V0cHV0ID8gYCR7c3RhdGljT3V0cHV0LmdldCgpLm91dHB1dH1cXG5gIDogJycsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogJycsXG4gICAgICAgIG91dHB1dEhlaWdodDogMCxcbiAgICAgICAgc3RhdGljT3V0cHV0OiAnJyxcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHJlbmRlcmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVuZGVyZXIuanMubWFwIiwKICAgICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHJlc3RvcmVDdXJzb3IgZnJvbSAncmVzdG9yZS1jdXJzb3InO1xuXG5sZXQgaXNIaWRkZW4gPSBmYWxzZTtcblxuY29uc3QgY2xpQ3Vyc29yID0ge307XG5cbmNsaUN1cnNvci5zaG93ID0gKHdyaXRhYmxlU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnIpID0+IHtcblx0aWYgKCF3cml0YWJsZVN0cmVhbS5pc1RUWSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlzSGlkZGVuID0gZmFsc2U7XG5cdHdyaXRhYmxlU3RyZWFtLndyaXRlKCdcXHUwMDFCWz8yNWgnKTtcbn07XG5cbmNsaUN1cnNvci5oaWRlID0gKHdyaXRhYmxlU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnIpID0+IHtcblx0aWYgKCF3cml0YWJsZVN0cmVhbS5pc1RUWSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHJlc3RvcmVDdXJzb3IoKTtcblx0aXNIaWRkZW4gPSB0cnVlO1xuXHR3cml0YWJsZVN0cmVhbS53cml0ZSgnXFx1MDAxQls/MjVsJyk7XG59O1xuXG5jbGlDdXJzb3IudG9nZ2xlID0gKGZvcmNlLCB3cml0YWJsZVN0cmVhbSkgPT4ge1xuXHRpZiAoZm9yY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlzSGlkZGVuID0gZm9yY2U7XG5cdH1cblxuXHRpZiAoaXNIaWRkZW4pIHtcblx0XHRjbGlDdXJzb3Iuc2hvdyh3cml0YWJsZVN0cmVhbSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2xpQ3Vyc29yLmhpZGUod3JpdGFibGVTdHJlYW0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlDdXJzb3I7XG4iLAogICAgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgb25ldGltZSBmcm9tICdvbmV0aW1lJztcbmltcG9ydCBzaWduYWxFeGl0IGZyb20gJ3NpZ25hbC1leGl0JztcblxuY29uc3QgcmVzdG9yZUN1cnNvciA9IG9uZXRpbWUoKCkgPT4ge1xuXHRzaWduYWxFeGl0KCgpID0+IHtcblx0XHRwcm9jZXNzLnN0ZGVyci53cml0ZSgnXFx1MDAxQls/MjVoJyk7XG5cdH0sIHthbHdheXNMYXN0OiB0cnVlfSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzdG9yZUN1cnNvcjtcbiIsCiAgICAiaW1wb3J0IGFuc2lFc2NhcGVzIGZyb20gJ2Fuc2ktZXNjYXBlcyc7XG5pbXBvcnQgY2xpQ3Vyc29yIGZyb20gJ2NsaS1jdXJzb3InO1xuY29uc3QgY3JlYXRlID0gKHN0cmVhbSwgeyBzaG93Q3Vyc29yID0gZmFsc2UgfSA9IHt9KSA9PiB7XG4gICAgbGV0IHByZXZpb3VzTGluZUNvdW50ID0gMDtcbiAgICBsZXQgcHJldmlvdXNPdXRwdXQgPSAnJztcbiAgICBsZXQgaGFzSGlkZGVuQ3Vyc29yID0gZmFsc2U7XG4gICAgY29uc3QgcmVuZGVyID0gKHN0cikgPT4ge1xuICAgICAgICBpZiAoIXNob3dDdXJzb3IgJiYgIWhhc0hpZGRlbkN1cnNvcikge1xuICAgICAgICAgICAgY2xpQ3Vyc29yLmhpZGUoKTtcbiAgICAgICAgICAgIGhhc0hpZGRlbkN1cnNvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gc3RyICsgJ1xcbic7XG4gICAgICAgIGlmIChvdXRwdXQgPT09IHByZXZpb3VzT3V0cHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNPdXRwdXQgPSBvdXRwdXQ7XG4gICAgICAgIHN0cmVhbS53cml0ZShhbnNpRXNjYXBlcy5lcmFzZUxpbmVzKHByZXZpb3VzTGluZUNvdW50KSArIG91dHB1dCk7XG4gICAgICAgIHByZXZpb3VzTGluZUNvdW50ID0gb3V0cHV0LnNwbGl0KCdcXG4nKS5sZW5ndGg7XG4gICAgfTtcbiAgICByZW5kZXIuY2xlYXIgPSAoKSA9PiB7XG4gICAgICAgIHN0cmVhbS53cml0ZShhbnNpRXNjYXBlcy5lcmFzZUxpbmVzKHByZXZpb3VzTGluZUNvdW50KSk7XG4gICAgICAgIHByZXZpb3VzT3V0cHV0ID0gJyc7XG4gICAgICAgIHByZXZpb3VzTGluZUNvdW50ID0gMDtcbiAgICB9O1xuICAgIC8vIENhbGxlZCB3aGVuIHRoZSB0ZXJtaW5hbCBpcyByZXNpemVkXG4gICAgcmVuZGVyLnVwZGF0ZUxpbmVDb3VudCA9IChzdHIpID0+IHtcbiAgICAgICAgcHJldmlvdXNMaW5lQ291bnQgPSBzdHIuc3BsaXQoJ1xcbicpLmxlbmd0aDtcbiAgICB9O1xuICAgIHJlbmRlci5kb25lID0gKCkgPT4ge1xuICAgICAgICBwcmV2aW91c091dHB1dCA9ICcnO1xuICAgICAgICBwcmV2aW91c0xpbmVDb3VudCA9IDA7XG4gICAgICAgIGlmICghc2hvd0N1cnNvcikge1xuICAgICAgICAgICAgY2xpQ3Vyc29yLnNob3coKTtcbiAgICAgICAgICAgIGhhc0hpZGRlbkN1cnNvciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gcmVuZGVyO1xufTtcbmNvbnN0IGxvZ1VwZGF0ZSA9IHsgY3JlYXRlIH07XG5leHBvcnQgZGVmYXVsdCBsb2dVcGRhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2ctdXBkYXRlLmpzLm1hcCIsCiAgICAiLy8gU3RvcmUgYWxsIGluc3RhbmNlcyBvZiBJbmsgKGluc3RhbmNlLmpzKSB0byBlbnN1cmUgdGhhdCBjb25zZWN1dGl2ZSByZW5kZXIoKSBjYWxsc1xuLy8gdXNlIHRoZSBzYW1lIGluc3RhbmNlIG9mIEluayBhbmQgZG9uJ3QgY3JlYXRlIGEgbmV3IG9uZVxuLy9cbi8vIFRoaXMgbWFwIGhhcyB0byBiZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBmaWxlLCBiZWNhdXNlIHJlbmRlci5qcyBjcmVhdGVzIGluc3RhbmNlcyxcbi8vIGJ1dCBpbnN0YW5jZS5qcyBzaG91bGQgZGVsZXRlIGl0c2VsZiBmcm9tIHRoZSBtYXAgb24gdW5tb3VudFxuY29uc3QgaW5zdGFuY2VzID0gbmV3IFdlYWtNYXAoKTtcbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RhbmNlcy5qcy5tYXAiLAogICAgImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ25vZGU6ZXZlbnRzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGlDdXJzb3IgZnJvbSAnY2xpLWN1cnNvcic7XG5pbXBvcnQgQXBwQ29udGV4dCBmcm9tICcuL0FwcENvbnRleHQuanMnO1xuaW1wb3J0IFN0ZGluQ29udGV4dCBmcm9tICcuL1N0ZGluQ29udGV4dC5qcyc7XG5pbXBvcnQgU3Rkb3V0Q29udGV4dCBmcm9tICcuL1N0ZG91dENvbnRleHQuanMnO1xuaW1wb3J0IFN0ZGVyckNvbnRleHQgZnJvbSAnLi9TdGRlcnJDb250ZXh0LmpzJztcbmltcG9ydCBGb2N1c0NvbnRleHQgZnJvbSAnLi9Gb2N1c0NvbnRleHQuanMnO1xuaW1wb3J0IEVycm9yT3ZlcnZpZXcgZnJvbSAnLi9FcnJvck92ZXJ2aWV3LmpzJztcbmNvbnN0IHRhYiA9ICdcXHQnO1xuY29uc3Qgc2hpZnRUYWIgPSAnXFx1MDAxQltaJztcbmNvbnN0IGVzY2FwZSA9ICdcXHUwMDFCJztcbi8vIFJvb3QgY29tcG9uZW50IGZvciBhbGwgSW5rIGFwcHNcbi8vIEl0IHJlbmRlcnMgc3RkaW4gYW5kIHN0ZG91dCBjb250ZXh0cywgc28gdGhhdCBjaGlsZHJlbiBjYW4gYWNjZXNzIHRoZW0gaWYgbmVlZGVkXG4vLyBJdCBhbHNvIGhhbmRsZXMgQ3RybCtDIGV4aXRpbmcgYW5kIGN1cnNvciB2aXNpYmlsaXR5XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHAgZXh0ZW5kcyBQdXJlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnSW50ZXJuYWxBcHAnO1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3IgfTtcbiAgICB9XG4gICAgc3RhdGUgPSB7XG4gICAgICAgIGlzRm9jdXNFbmFibGVkOiB0cnVlLFxuICAgICAgICBhY3RpdmVGb2N1c0lkOiB1bmRlZmluZWQsXG4gICAgICAgIGZvY3VzYWJsZXM6IFtdLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgLy8gQ291bnQgaG93IG1hbnkgY29tcG9uZW50cyBlbmFibGVkIHJhdyBtb2RlIHRvIGF2b2lkIGRpc2FibGluZ1xuICAgIC8vIHJhdyBtb2RlIHVudGlsIGFsbCBjb21wb25lbnRzIGRvbid0IG5lZWQgaXQgYW55bW9yZVxuICAgIHJhd01vZGVFbmFibGVkQ291bnQgPSAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBpbnRlcm5hbF9ldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLy8gRGV0ZXJtaW5lcyBpZiBUVFkgaXMgc3VwcG9ydGVkIG9uIHRoZSBwcm92aWRlZCBzdGRpblxuICAgIGlzUmF3TW9kZVN1cHBvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc3RkaW4uaXNUVFk7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEFwcENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1uby1jb25zdHJ1Y3RlZC1jb250ZXh0LXZhbHVlc1xuICAgICAgICAsIHsgXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LW5vLWNvbnN0cnVjdGVkLWNvbnRleHQtdmFsdWVzXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGV4aXQ6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3RkaW5Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LW5vLWNvbnN0cnVjdGVkLWNvbnRleHQtdmFsdWVzXG4gICAgICAgICAgICAsIHsgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1uby1jb25zdHJ1Y3RlZC1jb250ZXh0LXZhbHVlc1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZGluOiB0aGlzLnByb3BzLnN0ZGluLFxuICAgICAgICAgICAgICAgICAgICBzZXRSYXdNb2RlOiB0aGlzLmhhbmRsZVNldFJhd01vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzUmF3TW9kZVN1cHBvcnRlZDogdGhpcy5pc1Jhd01vZGVTdXBwb3J0ZWQoKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9leGl0T25DdHJsQzogdGhpcy5wcm9wcy5leGl0T25DdHJsQyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9ldmVudEVtaXR0ZXI6IHRoaXMuaW50ZXJuYWxfZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0ZG91dENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LW5vLWNvbnN0cnVjdGVkLWNvbnRleHQtdmFsdWVzXG4gICAgICAgICAgICAgICAgLCB7IFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LW5vLWNvbnN0cnVjdGVkLWNvbnRleHQtdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ6IHRoaXMucHJvcHMuc3Rkb3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGU6IHRoaXMucHJvcHMud3JpdGVUb1N0ZG91dCxcbiAgICAgICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0ZGVyckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1uby1jb25zdHJ1Y3RlZC1jb250ZXh0LXZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAsIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LW5vLWNvbnN0cnVjdGVkLWNvbnRleHQtdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycjogdGhpcy5wcm9wcy5zdGRlcnIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGU6IHRoaXMucHJvcHMud3JpdGVUb1N0ZGVycixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9jdXNDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LW5vLWNvbnN0cnVjdGVkLWNvbnRleHQtdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAsIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1uby1jb25zdHJ1Y3RlZC1jb250ZXh0LXZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUlkOiB0aGlzLnN0YXRlLmFjdGl2ZUZvY3VzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogdGhpcy5hZGRGb2N1c2FibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogdGhpcy5yZW1vdmVGb2N1c2FibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlOiB0aGlzLmFjdGl2YXRlRm9jdXNhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFjdGl2YXRlOiB0aGlzLmRlYWN0aXZhdGVGb2N1c2FibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUZvY3VzOiB0aGlzLmVuYWJsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRm9jdXM6IHRoaXMuZGlzYWJsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c05leHQ6IHRoaXMuZm9jdXNOZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1ByZXZpb3VzOiB0aGlzLmZvY3VzUHJldmlvdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiB0aGlzLmZvY3VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgdGhpcy5zdGF0ZS5lcnJvciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEVycm9yT3ZlcnZpZXcsIHsgZXJyb3I6IHRoaXMuc3RhdGUuZXJyb3IgfSkpIDogKHRoaXMucHJvcHMuY2hpbGRyZW4pKSkpKSkpO1xuICAgIH1cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY2xpQ3Vyc29yLmhpZGUodGhpcy5wcm9wcy5zdGRvdXQpO1xuICAgIH1cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgY2xpQ3Vyc29yLnNob3codGhpcy5wcm9wcy5zdGRvdXQpO1xuICAgICAgICAvLyBpZ25vcmUgY2FsbGluZyBzZXRSYXdNb2RlIG9uIGFuIGhhbmRsZSBzdGRpbiBpdCBjYW5ub3QgYmUgY2FsbGVkXG4gICAgICAgIGlmICh0aGlzLmlzUmF3TW9kZVN1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNldFJhd01vZGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbXBvbmVudERpZENhdGNoKGVycm9yKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXhpdChlcnJvcik7XG4gICAgfVxuICAgIGhhbmRsZVNldFJhd01vZGUgPSAoaXNFbmFibGVkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RkaW4gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmICghdGhpcy5pc1Jhd01vZGVTdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgaWYgKHN0ZGluID09PSBwcm9jZXNzLnN0ZGluKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYXcgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBjdXJyZW50IHByb2Nlc3Muc3RkaW4sIHdoaWNoIEluayB1c2VzIGFzIGlucHV0IHN0cmVhbSBieSBkZWZhdWx0LlxcblJlYWQgYWJvdXQgaG93IHRvIHByZXZlbnQgdGhpcyBlcnJvciBvbiBodHRwczovL2dpdGh1Yi5jb20vdmFkaW1kZW1lZGVzL2luay8jaXNyYXdtb2Rlc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhdyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHN0ZGluIHByb3ZpZGVkIHRvIEluay5cXG5SZWFkIGFib3V0IGhvdyB0byBwcmV2ZW50IHRoaXMgZXJyb3Igb24gaHR0cHM6Ly9naXRodWIuY29tL3ZhZGltZGVtZWRlcy9pbmsvI2lzcmF3bW9kZXN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ZGluLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICAgIGlmIChpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSByYXcgbW9kZSBpcyBlbmFibGVkIG9ubHkgb25jZVxuICAgICAgICAgICAgaWYgKHRoaXMucmF3TW9kZUVuYWJsZWRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN0ZGluLnJlZigpO1xuICAgICAgICAgICAgICAgIHN0ZGluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3RkaW4uYWRkTGlzdGVuZXIoJ3JlYWRhYmxlJywgdGhpcy5oYW5kbGVSZWFkYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhd01vZGVFbmFibGVkQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEaXNhYmxlIHJhdyBtb2RlIG9ubHkgd2hlbiBubyBjb21wb25lbnRzIGxlZnQgdGhhdCBhcmUgdXNpbmcgaXRcbiAgICAgICAgaWYgKC0tdGhpcy5yYXdNb2RlRW5hYmxlZENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdGRpbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgICAgICAgIHN0ZGluLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIHRoaXMuaGFuZGxlUmVhZGFibGUpO1xuICAgICAgICAgICAgc3RkaW4udW5yZWYoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaGFuZGxlUmVhZGFibGUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBjaHVuaztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICAgICAgd2hpbGUgKChjaHVuayA9IHRoaXMucHJvcHMuc3RkaW4ucmVhZCgpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnB1dChjaHVuayk7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsX2V2ZW50RW1pdHRlci5lbWl0KCdpbnB1dCcsIGNodW5rKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaGFuZGxlSW5wdXQgPSAoaW5wdXQpID0+IHtcbiAgICAgICAgLy8gRXhpdCBvbiBDdHJsK0NcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8taGV4LWVzY2FwZVxuICAgICAgICBpZiAoaW5wdXQgPT09ICdcXHgwMycgJiYgdGhpcy5wcm9wcy5leGl0T25DdHJsQykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFeGl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgZm9jdXMgd2hlbiB0aGVyZSdzIGFuIGFjdGl2ZSBmb2N1c2VkIGNvbXBvbmVudCBvbiBFc2NcbiAgICAgICAgaWYgKGlucHV0ID09PSBlc2NhcGUgJiYgdGhpcy5zdGF0ZS5hY3RpdmVGb2N1c0lkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBhY3RpdmVGb2N1c0lkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0ZvY3VzRW5hYmxlZCAmJiB0aGlzLnN0YXRlLmZvY3VzYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSB0YWIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBzaGlmdFRhYikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNQcmV2aW91cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBoYW5kbGVFeGl0ID0gKGVycm9yKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmF3TW9kZVN1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNldFJhd01vZGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMub25FeGl0KGVycm9yKTtcbiAgICB9O1xuICAgIGVuYWJsZUZvY3VzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzRm9jdXNFbmFibGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGRpc2FibGVGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc0ZvY3VzRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZm9jdXMgPSAoaWQpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2aW91c1N0YXRlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZvY3VzYWJsZUlkID0gcHJldmlvdXNTdGF0ZS5mb2N1c2FibGVzLnNvbWUoZm9jdXNhYmxlID0+IGZvY3VzYWJsZT8uaWQgPT09IGlkKTtcbiAgICAgICAgICAgIGlmICghaGFzRm9jdXNhYmxlSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGFjdGl2ZUZvY3VzSWQ6IGlkIH07XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZm9jdXNOZXh0ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZpb3VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGVJZCA9IHByZXZpb3VzU3RhdGUuZm9jdXNhYmxlcy5maW5kKGZvY3VzYWJsZSA9PiBmb2N1c2FibGUuaXNBY3RpdmUpPy5pZDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRGb2N1c2FibGVJZCA9IHRoaXMuZmluZE5leHRGb2N1c2FibGUocHJldmlvdXNTdGF0ZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUZvY3VzSWQ6IG5leHRGb2N1c2FibGVJZCA/PyBmaXJzdEZvY3VzYWJsZUlkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBmb2N1c1ByZXZpb3VzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZpb3VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdEZvY3VzYWJsZUlkID0gcHJldmlvdXNTdGF0ZS5mb2N1c2FibGVzLmZpbmRMYXN0KGZvY3VzYWJsZSA9PiBmb2N1c2FibGUuaXNBY3RpdmUpPy5pZDtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRm9jdXNhYmxlSWQgPSB0aGlzLmZpbmRQcmV2aW91c0ZvY3VzYWJsZShwcmV2aW91c1N0YXRlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRm9jdXNJZDogcHJldmlvdXNGb2N1c2FibGVJZCA/PyBsYXN0Rm9jdXNhYmxlSWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFkZEZvY3VzYWJsZSA9IChpZCwgeyBhdXRvRm9jdXMgfSkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZpb3VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgbGV0IG5leHRGb2N1c0lkID0gcHJldmlvdXNTdGF0ZS5hY3RpdmVGb2N1c0lkO1xuICAgICAgICAgICAgaWYgKCFuZXh0Rm9jdXNJZCAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICAgICAgICBuZXh0Rm9jdXNJZCA9IGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVGb2N1c0lkOiBuZXh0Rm9jdXNJZCxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnByZXZpb3VzU3RhdGUuZm9jdXNhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZW1vdmVGb2N1c2FibGUgPSAoaWQpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2aW91c1N0YXRlID0+ICh7XG4gICAgICAgICAgICBhY3RpdmVGb2N1c0lkOiBwcmV2aW91c1N0YXRlLmFjdGl2ZUZvY3VzSWQgPT09IGlkXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHByZXZpb3VzU3RhdGUuYWN0aXZlRm9jdXNJZCxcbiAgICAgICAgICAgIGZvY3VzYWJsZXM6IHByZXZpb3VzU3RhdGUuZm9jdXNhYmxlcy5maWx0ZXIoZm9jdXNhYmxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLmlkICE9PSBpZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KSk7XG4gICAgfTtcbiAgICBhY3RpdmF0ZUZvY3VzYWJsZSA9IChpZCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZpb3VzU3RhdGUgPT4gKHtcbiAgICAgICAgICAgIGZvY3VzYWJsZXM6IHByZXZpb3VzU3RhdGUuZm9jdXNhYmxlcy5tYXAoZm9jdXNhYmxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNhYmxlLmlkICE9PSBpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KSk7XG4gICAgfTtcbiAgICBkZWFjdGl2YXRlRm9jdXNhYmxlID0gKGlkKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUocHJldmlvdXNTdGF0ZSA9PiAoe1xuICAgICAgICAgICAgYWN0aXZlRm9jdXNJZDogcHJldmlvdXNTdGF0ZS5hY3RpdmVGb2N1c0lkID09PSBpZFxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBwcmV2aW91c1N0YXRlLmFjdGl2ZUZvY3VzSWQsXG4gICAgICAgICAgICBmb2N1c2FibGVzOiBwcmV2aW91c1N0YXRlLmZvY3VzYWJsZXMubWFwKGZvY3VzYWJsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvY3VzYWJsZS5pZCAhPT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzYWJsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIGZpbmROZXh0Rm9jdXNhYmxlID0gKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gc3RhdGUuZm9jdXNhYmxlcy5maW5kSW5kZXgoZm9jdXNhYmxlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUuaWQgPT09IHN0YXRlLmFjdGl2ZUZvY3VzSWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IGFjdGl2ZUluZGV4ICsgMTsgaW5kZXggPCBzdGF0ZS5mb2N1c2FibGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gc3RhdGUuZm9jdXNhYmxlc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoZm9jdXNhYmxlPy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZpbmRQcmV2aW91c0ZvY3VzYWJsZSA9IChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN0YXRlLmZvY3VzYWJsZXMuZmluZEluZGV4KGZvY3VzYWJsZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLmlkID09PSBzdGF0ZS5hY3RpdmVGb2N1c0lkO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSBhY3RpdmVJbmRleCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IHN0YXRlLmZvY3VzYWJsZXNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGZvY3VzYWJsZT8uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFwcC5qcy5tYXAiLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGBBcHBDb250ZXh0YCBpcyBhIFJlYWN0IGNvbnRleHQsIHdoaWNoIGV4cG9zZXMgYSBtZXRob2QgdG8gbWFudWFsbHkgZXhpdCB0aGUgYXBwICh1bm1vdW50KS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuY29uc3QgQXBwQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIGV4aXQoKSB7IH0sXG59KTtcbkFwcENvbnRleHQuZGlzcGxheU5hbWUgPSAnSW50ZXJuYWxBcHBDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IEFwcENvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BcHBDb250ZXh0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGBTdGRpbkNvbnRleHRgIGlzIGEgUmVhY3QgY29udGV4dCwgd2hpY2ggZXhwb3NlcyBpbnB1dCBzdHJlYW0uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmNvbnN0IFN0ZGluQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIHN0ZGluOiBwcm9jZXNzLnN0ZGluLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBpbnRlcm5hbF9ldmVudEVtaXR0ZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICBzZXRSYXdNb2RlKCkgeyB9LFxuICAgIGlzUmF3TW9kZVN1cHBvcnRlZDogZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGludGVybmFsX2V4aXRPbkN0cmxDOiB0cnVlLFxufSk7XG5TdGRpbkNvbnRleHQuZGlzcGxheU5hbWUgPSAnSW50ZXJuYWxTdGRpbkNvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgU3RkaW5Db250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3RkaW5Db250ZXh0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGBTdGRvdXRDb250ZXh0YCBpcyBhIFJlYWN0IGNvbnRleHQsIHdoaWNoIGV4cG9zZXMgc3Rkb3V0IHN0cmVhbSwgd2hlcmUgSW5rIHJlbmRlcnMgeW91ciBhcHAuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmNvbnN0IFN0ZG91dENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICBzdGRvdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgIHdyaXRlKCkgeyB9LFxufSk7XG5TdGRvdXRDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0ludGVybmFsU3Rkb3V0Q29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBTdGRvdXRDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Rkb3V0Q29udGV4dC5qcy5tYXAiLAogICAgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBgU3RkZXJyQ29udGV4dGAgaXMgYSBSZWFjdCBjb250ZXh0LCB3aGljaCBleHBvc2VzIHN0ZGVyciBzdHJlYW0uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmNvbnN0IFN0ZGVyckNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICBzdGRlcnI6IHByb2Nlc3Muc3RkZXJyLFxuICAgIHdyaXRlKCkgeyB9LFxufSk7XG5TdGRlcnJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0ludGVybmFsU3RkZXJyQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBTdGRlcnJDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3RkZXJyQ29udGV4dC5qcy5tYXAiLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5jb25zdCBGb2N1c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICBhY3RpdmVJZDogdW5kZWZpbmVkLFxuICAgIGFkZCgpIHsgfSxcbiAgICByZW1vdmUoKSB7IH0sXG4gICAgYWN0aXZhdGUoKSB7IH0sXG4gICAgZGVhY3RpdmF0ZSgpIHsgfSxcbiAgICBlbmFibGVGb2N1cygpIHsgfSxcbiAgICBkaXNhYmxlRm9jdXMoKSB7IH0sXG4gICAgZm9jdXNOZXh0KCkgeyB9LFxuICAgIGZvY3VzUHJldmlvdXMoKSB7IH0sXG4gICAgZm9jdXMoKSB7IH0sXG59KTtcbkZvY3VzQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdJbnRlcm5hbEZvY3VzQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBGb2N1c0NvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Gb2N1c0NvbnRleHQuanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN0YWNrVXRpbHMgZnJvbSAnc3RhY2stdXRpbHMnO1xuaW1wb3J0IGNvZGVFeGNlcnB0IGZyb20gJ2NvZGUtZXhjZXJwdCc7XG5pbXBvcnQgQm94IGZyb20gJy4vQm94LmpzJztcbmltcG9ydCBUZXh0IGZyb20gJy4vVGV4dC5qcyc7XG4vLyBFcnJvcidzIHNvdXJjZSBmaWxlIGlzIHJlcG9ydGVkIGFzIGZpbGU6Ly8vaG9tZS91c2VyL2ZpbGUuanNcbi8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZmlsZTovL1tjd2RdIHBhcnRcbmNvbnN0IGNsZWFudXBQYXRoID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gcGF0aD8ucmVwbGFjZShgZmlsZTovLyR7Y3dkKCl9L2AsICcnKTtcbn07XG5jb25zdCBzdGFja1V0aWxzID0gbmV3IFN0YWNrVXRpbHMoe1xuICAgIGN3ZDogY3dkKCksXG4gICAgaW50ZXJuYWxzOiBTdGFja1V0aWxzLm5vZGVJbnRlcm5hbHMoKSxcbn0pO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXJyb3JPdmVydmlldyh7IGVycm9yIH0pIHtcbiAgICBjb25zdCBzdGFjayA9IGVycm9yLnN0YWNrID8gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDEpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG9yaWdpbiA9IHN0YWNrID8gc3RhY2tVdGlscy5wYXJzZUxpbmUoc3RhY2tbMF0pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gY2xlYW51cFBhdGgob3JpZ2luPy5maWxlKTtcbiAgICBsZXQgZXhjZXJwdDtcbiAgICBsZXQgbGluZVdpZHRoID0gMDtcbiAgICBpZiAoZmlsZVBhdGggJiYgb3JpZ2luPy5saW5lICYmIGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICAgIGV4Y2VycHQgPSBjb2RlRXhjZXJwdChzb3VyY2VDb2RlLCBvcmlnaW4ubGluZSk7XG4gICAgICAgIGlmIChleGNlcnB0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgbGluZSB9IG9mIGV4Y2VycHQpIHtcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSBNYXRoLm1heChsaW5lV2lkdGgsIFN0cmluZyhsaW5lKS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgcGFkZGluZzogMSB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyBiYWNrZ3JvdW5kQ29sb3I6IFwicmVkXCIsIGNvbG9yOiBcIndoaXRlXCIgfSxcbiAgICAgICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAgICAgXCJFUlJPUlwiLFxuICAgICAgICAgICAgICAgICcgJyksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsXG4gICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSkpLFxuICAgICAgICBvcmlnaW4gJiYgZmlsZVBhdGggJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7IG1hcmdpblRvcDogMSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IGRpbUNvbG9yOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgXCI6XCIsXG4gICAgICAgICAgICAgICAgb3JpZ2luLmxpbmUsXG4gICAgICAgICAgICAgICAgXCI6XCIsXG4gICAgICAgICAgICAgICAgb3JpZ2luLmNvbHVtbikpKSxcbiAgICAgICAgb3JpZ2luICYmIGV4Y2VycHQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7IG1hcmdpblRvcDogMSwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiB9LCBleGNlcnB0Lm1hcCgoeyBsaW5lLCB2YWx1ZSB9KSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsga2V5OiBsaW5lIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyB3aWR0aDogbGluZVdpZHRoICsgMSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyBkaW1Db2xvcjogbGluZSAhPT0gb3JpZ2luLmxpbmUsIGJhY2tncm91bmRDb2xvcjogbGluZSA9PT0gb3JpZ2luLmxpbmUgPyAncmVkJyA6IHVuZGVmaW5lZCwgY29sb3I6IGxpbmUgPT09IG9yaWdpbi5saW5lID8gJ3doaXRlJyA6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcobGluZSkucGFkU3RhcnQobGluZVdpZHRoLCAnICcpLFxuICAgICAgICAgICAgICAgICAgICBcIjpcIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IGtleTogbGluZSwgYmFja2dyb3VuZENvbG9yOiBsaW5lID09PSBvcmlnaW4ubGluZSA/ICdyZWQnIDogdW5kZWZpbmVkLCBjb2xvcjogbGluZSA9PT0gb3JpZ2luLmxpbmUgPyAnd2hpdGUnIDogdW5kZWZpbmVkIH0sICcgJyArIHZhbHVlKSkpKSkpLFxuICAgICAgICBlcnJvci5zdGFjayAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgbWFyZ2luVG9wOiAxLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiIH0sIGVycm9yLnN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRMaW5lID0gc3RhY2tVdGlscy5wYXJzZUxpbmUobGluZSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbGluZSBmcm9tIHRoZSBzdGFjayBjYW5ub3QgYmUgcGFyc2VkLCB3ZSBwcmludCBvdXQgdGhlIHVucGFyc2VkIGxpbmUuXG4gICAgICAgICAgICBpZiAoIXBhcnNlZExpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7IGtleTogbGluZSB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgZGltQ29sb3I6IHRydWUgfSwgXCItIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IGRpbUNvbG9yOiB0cnVlLCBib2xkOiB0cnVlIH0sIGxpbmUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7IGtleTogbGluZSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyBkaW1Db2xvcjogdHJ1ZSB9LCBcIi0gXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyBkaW1Db2xvcjogdHJ1ZSwgYm9sZDogdHJ1ZSB9LCBwYXJzZWRMaW5lLmZ1bmN0aW9uKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgZGltQ29sb3I6IHRydWUsIGNvbG9yOiBcImdyYXlcIiB9LFxuICAgICAgICAgICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAgICAgICAgIFwiKFwiLFxuICAgICAgICAgICAgICAgICAgICBjbGVhbnVwUGF0aChwYXJzZWRMaW5lLmZpbGUpID8/ICcnLFxuICAgICAgICAgICAgICAgICAgICBcIjpcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkTGluZS5saW5lLFxuICAgICAgICAgICAgICAgICAgICBcIjpcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkTGluZS5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIFwiKVwiKSkpO1xuICAgICAgICB9KSkpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FcnJvck92ZXJ2aWV3LmpzLm1hcCIsCiAgICAiY29uc3QgY29udmVydFRvU3BhY2VzID0gKGlucHV0LCBzcGFjZXMgPSAyKSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXHQrL2dtLCAkMSA9PiAnICcucmVwZWF0KCQxLmxlbmd0aCAqIHNwYWNlcykpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbnZlcnRUb1NwYWNlcztcbiIsCiAgICAiaW1wb3J0IHRhYnNUb1NwYWNlcyBmcm9tICdjb252ZXJ0LXRvLXNwYWNlcyc7XG5jb25zdCBnZW5lcmF0ZUxpbmVOdW1iZXJzID0gKGxpbmUsIGFyb3VuZCkgPT4ge1xuICAgIGNvbnN0IGxpbmVOdW1iZXJzID0gW107XG4gICAgY29uc3QgbWluID0gbGluZSAtIGFyb3VuZDtcbiAgICBjb25zdCBtYXggPSBsaW5lICsgYXJvdW5kO1xuICAgIGZvciAobGV0IGxpbmVOdW1iZXIgPSBtaW47IGxpbmVOdW1iZXIgPD0gbWF4OyBsaW5lTnVtYmVyKyspIHtcbiAgICAgICAgbGluZU51bWJlcnMucHVzaChsaW5lTnVtYmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVOdW1iZXJzO1xufTtcbmNvbnN0IGNvZGVFeGNlcnB0ID0gKHNvdXJjZSwgbGluZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTb3VyY2UgY29kZSBpcyBtaXNzaW5nLicpO1xuICAgIH1cbiAgICBpZiAoIWxpbmUgfHwgbGluZSA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBudW1iZXIgbXVzdCBzdGFydCBmcm9tIGAxYC4nKTtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSB0YWJzVG9TcGFjZXMoc291cmNlKS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGlmIChsaW5lID4gbGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGdlbmVyYXRlTGluZU51bWJlcnMobGluZSwgKF9hID0gb3B0aW9ucy5hcm91bmQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDMpXG4gICAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lc1tsaW5lIC0gMV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcChsaW5lID0+ICh7IGxpbmUsIHZhbHVlOiBsaW5lc1tsaW5lIC0gMV0gfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvZGVFeGNlcnB0O1xuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogYDxCb3g+YCBpcyBhbiBlc3NlbnRpYWwgSW5rIGNvbXBvbmVudCB0byBidWlsZCB5b3VyIGxheW91dC4gSXQncyBsaWtlIGA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleFwiPmAgaW4gdGhlIGJyb3dzZXIuXG4gKi9cbmNvbnN0IEJveCA9IGZvcndhcmRSZWYoKHsgY2hpbGRyZW4sIC4uLnN0eWxlIH0sIHJlZikgPT4ge1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImluay1ib3hcIiwgeyByZWY6IHJlZiwgc3R5bGU6IHtcbiAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgICAgb3ZlcmZsb3dYOiBzdHlsZS5vdmVyZmxvd1ggPz8gc3R5bGUub3ZlcmZsb3cgPz8gJ3Zpc2libGUnLFxuICAgICAgICAgICAgb3ZlcmZsb3dZOiBzdHlsZS5vdmVyZmxvd1kgPz8gc3R5bGUub3ZlcmZsb3cgPz8gJ3Zpc2libGUnLFxuICAgICAgICB9IH0sIGNoaWxkcmVuKSk7XG59KTtcbkJveC5kaXNwbGF5TmFtZSA9ICdCb3gnO1xuQm94LmRlZmF1bHRQcm9wcyA9IHtcbiAgICBmbGV4V3JhcDogJ25vd3JhcCcsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgZmxleEdyb3c6IDAsXG4gICAgZmxleFNocmluazogMSxcbn07XG5leHBvcnQgZGVmYXVsdCBCb3g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Cb3guanMubWFwIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBjb2xvcml6ZSBmcm9tICcuLi9jb2xvcml6ZS5qcyc7XG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGNhbiBkaXNwbGF5IHRleHQsIGFuZCBjaGFuZ2UgaXRzIHN0eWxlIHRvIG1ha2UgaXQgY29sb3JmdWwsIGJvbGQsIHVuZGVybGluZSwgaXRhbGljIG9yIHN0cmlrZXRocm91Z2guXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRleHQoeyBjb2xvciwgYmFja2dyb3VuZENvbG9yLCBkaW1Db2xvciA9IGZhbHNlLCBib2xkID0gZmFsc2UsIGl0YWxpYyA9IGZhbHNlLCB1bmRlcmxpbmUgPSBmYWxzZSwgc3RyaWtldGhyb3VnaCA9IGZhbHNlLCBpbnZlcnNlID0gZmFsc2UsIHdyYXAgPSAnd3JhcCcsIGNoaWxkcmVuLCB9KSB7XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQgfHwgY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IChjaGlsZHJlbikgPT4ge1xuICAgICAgICBpZiAoZGltQ29sb3IpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hhbGsuZGltKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY29sb3JpemUoY2hpbGRyZW4sIGNvbG9yLCAnZm9yZWdyb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY29sb3JpemUoY2hpbGRyZW4sIGJhY2tncm91bmRDb2xvciwgJ2JhY2tncm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9sZCkge1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGFsay5ib2xkKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRhbGljKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoYWxrLml0YWxpYyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuZGVybGluZSkge1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGFsay51bmRlcmxpbmUoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpa2V0aHJvdWdoKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoYWxrLnN0cmlrZXRocm91Z2goY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoYWxrLmludmVyc2UoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImluay10ZXh0XCIsIHsgc3R5bGU6IHsgZmxleEdyb3c6IDAsIGZsZXhTaHJpbms6IDEsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCB0ZXh0V3JhcDogd3JhcCB9LCBpbnRlcm5hbF90cmFuc2Zvcm06IHRyYW5zZm9ybSB9LCBjaGlsZHJlbikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGV4dC5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBgPFN0YXRpYz5gIGNvbXBvbmVudCBwZXJtYW5lbnRseSByZW5kZXJzIGl0cyBvdXRwdXQgYWJvdmUgZXZlcnl0aGluZyBlbHNlLlxuICogSXQncyB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgYWN0aXZpdHkgbGlrZSBjb21wbGV0ZWQgdGFza3Mgb3IgbG9ncyAtIHRoaW5ncyB0aGF0XG4gKiBhcmUgbm90IGNoYW5naW5nIGFmdGVyIHRoZXkncmUgcmVuZGVyZWQgKGhlbmNlIHRoZSBuYW1lIFwiU3RhdGljXCIpLlxuICpcbiAqIEl0J3MgcHJlZmVycmVkIHRvIHVzZSBgPFN0YXRpYz5gIGZvciB1c2UgY2FzZXMgbGlrZSB0aGVzZSwgd2hlbiB5b3UgY2FuJ3Qga25vd1xuICogb3IgY29udHJvbCB0aGUgYW1vdW50IG9mIGl0ZW1zIHRoYXQgbmVlZCB0byBiZSByZW5kZXJlZC5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgW1RhcF0oaHR0cHM6Ly9naXRodWIuY29tL3RhcGpzL25vZGUtdGFwKSB1c2VzIGA8U3RhdGljPmAgdG8gZGlzcGxheVxuICogYSBsaXN0IG9mIGNvbXBsZXRlZCB0ZXN0cy4gW0dhdHNieV0oaHR0cHM6Ly9naXRodWIuY29tL2dhdHNieWpzL2dhdHNieSkgdXNlcyBpdFxuICogdG8gZGlzcGxheSBhIGxpc3Qgb2YgZ2VuZXJhdGVkIHBhZ2VzLCB3aGlsZSBzdGlsbCBkaXNwbGF5aW5nIGEgbGl2ZSBwcm9ncmVzcyBiYXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN0YXRpYyhwcm9wcykge1xuICAgIGNvbnN0IHsgaXRlbXMsIGNoaWxkcmVuOiByZW5kZXIsIHN0eWxlOiBjdXN0b21TdHlsZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBpdGVtc1RvUmVuZGVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5zbGljZShpbmRleCk7XG4gICAgfSwgW2l0ZW1zLCBpbmRleF0pO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldEluZGV4KGl0ZW1zLmxlbmd0aCk7XG4gICAgfSwgW2l0ZW1zLmxlbmd0aF0pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gaXRlbXNUb1JlbmRlci5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVuZGVyKGl0ZW0sIGluZGV4ICsgaXRlbUluZGV4KTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHlsZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAuLi5jdXN0b21TdHlsZSxcbiAgICB9KSwgW2N1c3RvbVN0eWxlXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5rLWJveFwiLCB7IGludGVybmFsX3N0YXRpYzogdHJ1ZSwgc3R5bGU6IHN0eWxlIH0sIGNoaWxkcmVuKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdGF0aWMuanMubWFwIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgUmVhY3QgY29tcG9uZW50cyBiZWZvcmUgdGhleSBhcmUgd3JpdHRlbiB0byBvdXRwdXQuXG4gKiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHdhbnQgdG8gYXBwbHkgYSBncmFkaWVudCB0byB0ZXh0LCBhZGQgYSBjbGlja2FibGUgbGluayBvciBjcmVhdGUgc29tZSB0ZXh0IGVmZmVjdHMuXG4gKiBUaGVzZSB1c2UgY2FzZXMgY2FuJ3QgYWNjZXB0IFJlYWN0IG5vZGVzIGFzIGlucHV0LCB0aGV5IGFyZSBleHBlY3RpbmcgYSBzdHJpbmcuXG4gKiBUaGF0J3Mgd2hhdCA8VHJhbnNmb3JtPiBjb21wb25lbnQgZG9lcywgaXQgZ2l2ZXMgeW91IGFuIG91dHB1dCBzdHJpbmcgb2YgaXRzIGNoaWxkIGNvbXBvbmVudHMgYW5kIGxldHMgeW91IHRyYW5zZm9ybSBpdCBpbiBhbnkgd2F5LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUcmFuc2Zvcm0oeyBjaGlsZHJlbiwgdHJhbnNmb3JtIH0pIHtcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCBjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5rLXRleHRcIiwgeyBzdHlsZTogeyBmbGV4R3JvdzogMCwgZmxleFNocmluazogMSwgZmxleERpcmVjdGlvbjogJ3JvdycgfSwgaW50ZXJuYWxfdHJhbnNmb3JtOiB0cmFuc2Zvcm0gfSwgY2hpbGRyZW4pKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYW5zZm9ybS5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEFkZHMgb25lIG9yIG1vcmUgbmV3bGluZSAoXFxuKSBjaGFyYWN0ZXJzLiBNdXN0IGJlIHVzZWQgd2l0aGluIDxUZXh0PiBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOZXdsaW5lKHsgY291bnQgPSAxIH0pIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImluay10ZXh0XCIsIG51bGwsICdcXG4nLnJlcGVhdChjb3VudCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmV3bGluZS5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQm94IGZyb20gJy4vQm94LmpzJztcbi8qKlxuICogQSBmbGV4aWJsZSBzcGFjZSB0aGF0IGV4cGFuZHMgYWxvbmcgdGhlIG1ham9yIGF4aXMgb2YgaXRzIGNvbnRhaW5pbmcgbGF5b3V0LlxuICogSXQncyB1c2VmdWwgYXMgYSBzaG9ydGN1dCBmb3IgZmlsbGluZyBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZXMgYmV0d2VlbiBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyBmbGV4R3JvdzogMSB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNwYWNlci5qcy5tYXAiLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBwYXJzZUtleXByZXNzLCB7IG5vbkFscGhhbnVtZXJpY0tleXMgfSBmcm9tICcuLi9wYXJzZS1rZXlwcmVzcy5qcyc7XG5pbXBvcnQgcmVjb25jaWxlciBmcm9tICcuLi9yZWNvbmNpbGVyLmpzJztcbmltcG9ydCB1c2VTdGRpbiBmcm9tICcuL3VzZS1zdGRpbi5qcyc7XG4vKipcbiAqIFRoaXMgaG9vayBpcyB1c2VkIGZvciBoYW5kbGluZyB1c2VyIGlucHV0LlxuICogSXQncyBhIG1vcmUgY29udmVuaWVudCBhbHRlcm5hdGl2ZSB0byB1c2luZyBgU3RkaW5Db250ZXh0YCBhbmQgbGlzdGVuaW5nIHRvIGBkYXRhYCBldmVudHMuXG4gKiBUaGUgY2FsbGJhY2sgeW91IHBhc3MgdG8gYHVzZUlucHV0YCBpcyBjYWxsZWQgZm9yIGVhY2ggY2hhcmFjdGVyIHdoZW4gdXNlciBlbnRlcnMgYW55IGlucHV0LlxuICogSG93ZXZlciwgaWYgdXNlciBwYXN0ZXMgdGV4dCBhbmQgaXQncyBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSBhbmQgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIHBhc3NlZCBhcyBgaW5wdXRgLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHt1c2VJbnB1dH0gZnJvbSAnaW5rJztcbiAqXG4gKiBjb25zdCBVc2VySW5wdXQgPSAoKSA9PiB7XG4gKiAgIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gKiAgICAgaWYgKGlucHV0ID09PSAncScpIHtcbiAqICAgICAgIC8vIEV4aXQgcHJvZ3JhbVxuICogICAgIH1cbiAqXG4gKiAgICAgaWYgKGtleS5sZWZ0QXJyb3cpIHtcbiAqICAgICAgIC8vIExlZnQgYXJyb3cga2V5IHByZXNzZWRcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIOKAplxuICogfTtcbiAqIGBgYFxuICovXG5jb25zdCB1c2VJbnB1dCA9IChpbnB1dEhhbmRsZXIsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBjb25zdCB7IHN0ZGluLCBzZXRSYXdNb2RlLCBpbnRlcm5hbF9leGl0T25DdHJsQywgaW50ZXJuYWxfZXZlbnRFbWl0dGVyIH0gPSB1c2VTdGRpbigpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd01vZGUodHJ1ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBzZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbb3B0aW9ucy5pc0FjdGl2ZSwgc2V0UmF3TW9kZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZURhdGEgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cHJlc3MgPSBwYXJzZUtleXByZXNzKGRhdGEpO1xuICAgICAgICAgICAga2V5cHJlc3MubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHtcbiAgICAgICAgICAgICAgICB1cEFycm93OiBrZXlwcmVzcy5uYW1lID09PSAndXAnLFxuICAgICAgICAgICAgICAgIGRvd25BcnJvdzoga2V5cHJlc3MubmFtZSA9PT0gJ2Rvd24nLFxuICAgICAgICAgICAgICAgIGxlZnRBcnJvdzoga2V5cHJlc3MubmFtZSA9PT0gJ2xlZnQnLFxuICAgICAgICAgICAgICAgIHJpZ2h0QXJyb3c6IGtleXByZXNzLm5hbWUgPT09ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgcGFnZURvd246IGtleXByZXNzLm5hbWUgPT09ICdwYWdlZG93bicsXG4gICAgICAgICAgICAgICAgcGFnZVVwOiBrZXlwcmVzcy5uYW1lID09PSAncGFnZXVwJyxcbiAgICAgICAgICAgICAgICBob21lOiBrZXlwcmVzcy5uYW1lID09PSAnaG9tZScsXG4gICAgICAgICAgICAgICAgZW5kOiBrZXlwcmVzcy5uYW1lID09PSAnZW5kJyxcbiAgICAgICAgICAgICAgICByZXR1cm46IGtleXByZXNzLm5hbWUgPT09ICdyZXR1cm4nLFxuICAgICAgICAgICAgICAgIGVzY2FwZToga2V5cHJlc3MubmFtZSA9PT0gJ2VzY2FwZScsXG4gICAgICAgICAgICAgICAgZm46IGtleXByZXNzLmZuLFxuICAgICAgICAgICAgICAgIGN0cmw6IGtleXByZXNzLmN0cmwsXG4gICAgICAgICAgICAgICAgc2hpZnQ6IGtleXByZXNzLnNoaWZ0LFxuICAgICAgICAgICAgICAgIHRhYjoga2V5cHJlc3MubmFtZSA9PT0gJ3RhYicsXG4gICAgICAgICAgICAgICAgYmFja3NwYWNlOiBrZXlwcmVzcy5uYW1lID09PSAnYmFja3NwYWNlJyxcbiAgICAgICAgICAgICAgICBkZWxldGU6IGtleXByZXNzLm5hbWUgPT09ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgIC8vIGBwYXJzZUtleXByZXNzYCBwYXJzZXMgXFx1MDAxQlxcdTAwMUJbQSAobWV0YSArIHVwIGFycm93KSBhcyBtZXRhID0gZmFsc2VcbiAgICAgICAgICAgICAgICAvLyBidXQgd2l0aCBvcHRpb24gPSB0cnVlLCBzbyB3ZSBuZWVkIHRvIHRha2UgdGhpcyBpbnRvIGFjY291bnQgaGVyZVxuICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMgaW4gSW5rLlxuICAgICAgICAgICAgICAgIC8vIFRPRE8odmFkaW1kZW1lZGVzKTogY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgICAgICAgICAgICAgIG1ldGE6IGtleXByZXNzLm1ldGEgfHwga2V5cHJlc3MubmFtZSA9PT0gJ2VzY2FwZScgfHwga2V5cHJlc3Mub3B0aW9uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGtleXByZXNzLmN0cmwgPyBrZXlwcmVzcy5uYW1lIDoga2V5cHJlc3Muc2VxdWVuY2U7XG4gICAgICAgICAgICBpZiAobm9uQWxwaGFudW1lcmljS2V5cy5pbmNsdWRlcyhrZXlwcmVzcy5uYW1lKSkge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdHJpcCBtZXRhIGlmIGl0J3Mgc3RpbGwgcmVtYWluaW5nIGFmdGVyIGBwYXJzZUtleXByZXNzYFxuICAgICAgICAgICAgLy8gVE9ETyh2YWRpbWRlbWVkZXMpOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgICAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJ1xcdTAwMUInKSkge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGlucHV0WzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIGlucHV0WzBdLnRvVXBwZXJDYXNlKCkgPT09IGlucHV0WzBdKSB7XG4gICAgICAgICAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGFwcCBpcyBub3Qgc3VwcG9zZWQgdG8gZXhpdCBvbiBDdHJsK0MsIHRoZW4gbGV0IGlucHV0IGxpc3RlbmVyIGhhbmRsZSBpdFxuICAgICAgICAgICAgaWYgKCEoaW5wdXQgPT09ICdjJyAmJiBrZXkuY3RybCkgfHwgIWludGVybmFsX2V4aXRPbkN0cmxDKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlU2NyaXB0IHR5cGVzIGZvciBgYmF0Y2hlZFVwZGF0ZXNgIHJlcXVpcmUgYW4gYXJndW1lbnQsIGJ1dCBSZWFjdCdzIGNvZGViYXNlIGRvZXNuJ3QgcHJvdmlkZSBpdCBhbmQgaXQgd29ya3Mgd2l0aG91dCBpdCBhcyBleGVwZWN0ZWQuXG4gICAgICAgICAgICAgICAgcmVjb25jaWxlci5iYXRjaGVkVXBkYXRlcygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0SGFuZGxlcihpbnB1dCwga2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW50ZXJuYWxfZXZlbnRFbWl0dGVyPy5vbignaW5wdXQnLCBoYW5kbGVEYXRhKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGludGVybmFsX2V2ZW50RW1pdHRlcj8ucmVtb3ZlTGlzdGVuZXIoJ2lucHV0JywgaGFuZGxlRGF0YSk7XG4gICAgICAgIH07XG4gICAgfSwgW29wdGlvbnMuaXNBY3RpdmUsIHN0ZGluLCBpbnRlcm5hbF9leGl0T25DdHJsQywgaW5wdXRIYW5kbGVyXSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlSW5wdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtaW5wdXQuanMubWFwIiwKICAgICIvLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZW5xdWlyZXIvZW5xdWlyZXIvYmxvYi8zNjc4NWYzMzk5YTQxY2Q2MWU5ZDI4ZDFlYjljMmZjZDczZDY5YjRjL2xpYi9rZXlwcmVzcy5qc1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnbm9kZTpidWZmZXInO1xuY29uc3QgbWV0YUtleUNvZGVSZSA9IC9eKD86XFx4MWIpKFthLXpBLVowLTldKSQvO1xuY29uc3QgZm5LZXlSZSA9IC9eKD86XFx4MWIrKShPfE58XFxbfFxcW1xcWykoPzooXFxkKykoPzo7KFxcZCspKT8oW35eJF0pfCg/OjE7KT8oXFxkKyk/KFthLXpBLVpdKSkvO1xuY29uc3Qga2V5TmFtZSA9IHtcbiAgICAvKiB4dGVybS9nbm9tZSBFU0MgTyBsZXR0ZXIgKi9cbiAgICBPUDogJ2YxJyxcbiAgICBPUTogJ2YyJyxcbiAgICBPUjogJ2YzJyxcbiAgICBPUzogJ2Y0JyxcbiAgICAvKiB4dGVybS9yeHZ0IEVTQyBbIG51bWJlciB+ICovXG4gICAgJ1sxMX4nOiAnZjEnLFxuICAgICdbMTJ+JzogJ2YyJyxcbiAgICAnWzEzfic6ICdmMycsXG4gICAgJ1sxNH4nOiAnZjQnLFxuICAgIC8qIGZyb20gQ3lnd2luIGFuZCB1c2VkIGluIGxpYnV2ICovXG4gICAgJ1tbQSc6ICdmMScsXG4gICAgJ1tbQic6ICdmMicsXG4gICAgJ1tbQyc6ICdmMycsXG4gICAgJ1tbRCc6ICdmNCcsXG4gICAgJ1tbRSc6ICdmNScsXG4gICAgLyogY29tbW9uICovXG4gICAgJ1sxNX4nOiAnZjUnLFxuICAgICdbMTd+JzogJ2Y2JyxcbiAgICAnWzE4fic6ICdmNycsXG4gICAgJ1sxOX4nOiAnZjgnLFxuICAgICdbMjB+JzogJ2Y5JyxcbiAgICAnWzIxfic6ICdmMTAnLFxuICAgICdbMjN+JzogJ2YxMScsXG4gICAgJ1syNH4nOiAnZjEyJyxcbiAgICAvKiB4dGVybSBFU0MgWyBsZXR0ZXIgKi9cbiAgICAnW0EnOiAndXAnLFxuICAgICdbQic6ICdkb3duJyxcbiAgICAnW0MnOiAncmlnaHQnLFxuICAgICdbRCc6ICdsZWZ0JyxcbiAgICAnW0UnOiAnY2xlYXInLFxuICAgICdbRic6ICdlbmQnLFxuICAgICdbSCc6ICdob21lJyxcbiAgICAvKiB4dGVybS9nbm9tZSBFU0MgTyBsZXR0ZXIgKi9cbiAgICBPQTogJ3VwJyxcbiAgICBPQjogJ2Rvd24nLFxuICAgIE9DOiAncmlnaHQnLFxuICAgIE9EOiAnbGVmdCcsXG4gICAgT0U6ICdjbGVhcicsXG4gICAgT0Y6ICdlbmQnLFxuICAgIE9IOiAnaG9tZScsXG4gICAgLyogeHRlcm0vcnh2dCBFU0MgWyBudW1iZXIgfiAqL1xuICAgICdbMX4nOiAnaG9tZScsXG4gICAgJ1syfic6ICdpbnNlcnQnLFxuICAgICdbM34nOiAnZGVsZXRlJyxcbiAgICAnWzR+JzogJ2VuZCcsXG4gICAgJ1s1fic6ICdwYWdldXAnLFxuICAgICdbNn4nOiAncGFnZWRvd24nLFxuICAgIC8qIHB1dHR5ICovXG4gICAgJ1tbNX4nOiAncGFnZXVwJyxcbiAgICAnW1s2fic6ICdwYWdlZG93bicsXG4gICAgLyogcnh2dCAqL1xuICAgICdbN34nOiAnaG9tZScsXG4gICAgJ1s4fic6ICdlbmQnLFxuICAgIC8qIHJ4dnQga2V5cyB3aXRoIG1vZGlmaWVycyAqL1xuICAgICdbYSc6ICd1cCcsXG4gICAgJ1tiJzogJ2Rvd24nLFxuICAgICdbYyc6ICdyaWdodCcsXG4gICAgJ1tkJzogJ2xlZnQnLFxuICAgICdbZSc6ICdjbGVhcicsXG4gICAgJ1syJCc6ICdpbnNlcnQnLFxuICAgICdbMyQnOiAnZGVsZXRlJyxcbiAgICAnWzUkJzogJ3BhZ2V1cCcsXG4gICAgJ1s2JCc6ICdwYWdlZG93bicsXG4gICAgJ1s3JCc6ICdob21lJyxcbiAgICAnWzgkJzogJ2VuZCcsXG4gICAgT2E6ICd1cCcsXG4gICAgT2I6ICdkb3duJyxcbiAgICBPYzogJ3JpZ2h0JyxcbiAgICBPZDogJ2xlZnQnLFxuICAgIE9lOiAnY2xlYXInLFxuICAgICdbMl4nOiAnaW5zZXJ0JyxcbiAgICAnWzNeJzogJ2RlbGV0ZScsXG4gICAgJ1s1Xic6ICdwYWdldXAnLFxuICAgICdbNl4nOiAncGFnZWRvd24nLFxuICAgICdbN14nOiAnaG9tZScsXG4gICAgJ1s4Xic6ICdlbmQnLFxuICAgIC8qIG1pc2MuICovXG4gICAgJ1taJzogJ3RhYicsXG59O1xuZXhwb3J0IGNvbnN0IG5vbkFscGhhbnVtZXJpY0tleXMgPSBbLi4uT2JqZWN0LnZhbHVlcyhrZXlOYW1lKSwgJ2JhY2tzcGFjZSddO1xuY29uc3QgaXNTaGlmdEtleSA9IChjb2RlKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ1thJyxcbiAgICAgICAgJ1tiJyxcbiAgICAgICAgJ1tjJyxcbiAgICAgICAgJ1tkJyxcbiAgICAgICAgJ1tlJyxcbiAgICAgICAgJ1syJCcsXG4gICAgICAgICdbMyQnLFxuICAgICAgICAnWzUkJyxcbiAgICAgICAgJ1s2JCcsXG4gICAgICAgICdbNyQnLFxuICAgICAgICAnWzgkJyxcbiAgICAgICAgJ1taJyxcbiAgICBdLmluY2x1ZGVzKGNvZGUpO1xufTtcbmNvbnN0IGlzQ3RybEtleSA9IChjb2RlKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ09hJyxcbiAgICAgICAgJ09iJyxcbiAgICAgICAgJ09jJyxcbiAgICAgICAgJ09kJyxcbiAgICAgICAgJ09lJyxcbiAgICAgICAgJ1syXicsXG4gICAgICAgICdbM14nLFxuICAgICAgICAnWzVeJyxcbiAgICAgICAgJ1s2XicsXG4gICAgICAgICdbN14nLFxuICAgICAgICAnWzheJyxcbiAgICBdLmluY2x1ZGVzKGNvZGUpO1xufTtcbmNvbnN0IHBhcnNlS2V5cHJlc3MgPSAocyA9ICcnKSA9PiB7XG4gICAgbGV0IHBhcnRzO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIocykpIHtcbiAgICAgICAgaWYgKHNbMF0gPiAxMjcgJiYgc1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzWzBdIC09IDEyODtcbiAgICAgICAgICAgIHMgPSAnXFx4MWInICsgU3RyaW5nKHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcyA9IFN0cmluZyhzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHMgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHMgPSBTdHJpbmcocyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzKSB7XG4gICAgICAgIHMgPSAnJztcbiAgICB9XG4gICAgY29uc3Qga2V5ID0ge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgZm46IGZhbHNlLFxuICAgICAgICBjdHJsOiBmYWxzZSxcbiAgICAgICAgbWV0YTogZmFsc2UsXG4gICAgICAgIHNoaWZ0OiBmYWxzZSxcbiAgICAgICAgb3B0aW9uOiBmYWxzZSxcbiAgICAgICAgc2VxdWVuY2U6IHMsXG4gICAgICAgIHJhdzogcyxcbiAgICB9O1xuICAgIGtleS5zZXF1ZW5jZSA9IGtleS5zZXF1ZW5jZSB8fCBzIHx8IGtleS5uYW1lO1xuICAgIGlmIChzID09PSAnXFxyJykge1xuICAgICAgICAvLyBjYXJyaWFnZSByZXR1cm5cbiAgICAgICAga2V5LnJhdyA9IHVuZGVmaW5lZDtcbiAgICAgICAga2V5Lm5hbWUgPSAncmV0dXJuJztcbiAgICB9XG4gICAgZWxzZSBpZiAocyA9PT0gJ1xcbicpIHtcbiAgICAgICAgLy8gZW50ZXIsIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGxpbmVmZWVkXG4gICAgICAgIGtleS5uYW1lID0gJ2VudGVyJztcbiAgICB9XG4gICAgZWxzZSBpZiAocyA9PT0gJ1xcdCcpIHtcbiAgICAgICAgLy8gdGFiXG4gICAgICAgIGtleS5uYW1lID0gJ3RhYic7XG4gICAgfVxuICAgIGVsc2UgaWYgKHMgPT09ICdcXGInIHx8IHMgPT09ICdcXHgxYlxcYicpIHtcbiAgICAgICAgLy8gYmFja3NwYWNlIG9yIGN0cmwraFxuICAgICAgICBrZXkubmFtZSA9ICdiYWNrc3BhY2UnO1xuICAgICAgICBrZXkubWV0YSA9IHMuY2hhckF0KDApID09PSAnXFx4MWInO1xuICAgIH1cbiAgICBlbHNlIGlmIChzID09PSAnXFx4N2YnIHx8IHMgPT09ICdcXHgxYlxceDdmJykge1xuICAgICAgICAvLyBpbmsgaW5jb3JyZWN0bHkgc2VuZHMgXCJkZWxldGVcIiBoZXJlLiB3ZSBjaGFuZ2VkIHRoaXMgaW4gb3VyIGZvcmtcbiAgICAgICAga2V5Lm5hbWUgPSAnYmFja3NwYWNlJztcbiAgICAgICAga2V5Lm1ldGEgPSBzLmNoYXJBdCgwKSA9PT0gJ1xceDFiJztcbiAgICB9XG4gICAgZWxzZSBpZiAocyA9PT0gJ1xceDFiJyB8fCBzID09PSAnXFx4MWJcXHgxYicpIHtcbiAgICAgICAgLy8gZXNjYXBlIGtleVxuICAgICAgICBrZXkubmFtZSA9ICdlc2NhcGUnO1xuICAgICAgICBrZXkubWV0YSA9IHMubGVuZ3RoID09PSAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChzID09PSAnICcgfHwgcyA9PT0gJ1xceDFiICcpIHtcbiAgICAgICAga2V5Lm5hbWUgPSAnc3BhY2UnO1xuICAgICAgICBrZXkubWV0YSA9IHMubGVuZ3RoID09PSAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChzIDw9ICdcXHgxYScgJiYgcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAvLyBjdHJsK2xldHRlclxuICAgICAgICBrZXkubmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocy5jaGFyQ29kZUF0KDApICsgJ2EnLmNoYXJDb2RlQXQoMCkgLSAxKTtcbiAgICAgICAga2V5LmN0cmwgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChzLmxlbmd0aCA9PT0gMSAmJiBzID49ICcwJyAmJiBzIDw9ICc5Jykge1xuICAgICAgICAvLyBudW1iZXJcbiAgICAgICAga2V5Lm5hbWUgPSAnbnVtYmVyJztcbiAgICB9XG4gICAgZWxzZSBpZiAocy5sZW5ndGggPT09IDEgJiYgcyA+PSAnYScgJiYgcyA8PSAneicpIHtcbiAgICAgICAgLy8gbG93ZXJjYXNlIGxldHRlclxuICAgICAgICBrZXkubmFtZSA9IHM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHMubGVuZ3RoID09PSAxICYmIHMgPj0gJ0EnICYmIHMgPD0gJ1onKSB7XG4gICAgICAgIC8vIHNoaWZ0K2xldHRlclxuICAgICAgICBrZXkubmFtZSA9IHMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKHBhcnRzID0gbWV0YUtleUNvZGVSZS5leGVjKHMpKSkge1xuICAgICAgICAvLyBtZXRhK2NoYXJhY3RlciBrZXlcbiAgICAgICAga2V5Lm1ldGEgPSB0cnVlO1xuICAgICAgICBrZXkuc2hpZnQgPSAvXltBLVpdJC8udGVzdChwYXJ0c1sxXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChwYXJ0cyA9IGZuS2V5UmUuZXhlYyhzKSkpIHtcbiAgICAgICAgY29uc3Qgc2VncyA9IFsuLi5zXTtcbiAgICAgICAgaWYgKHNlZ3NbMF0gPT09ICdcXHUwMDFiJyAmJiBzZWdzWzFdID09PSAnXFx1MDAxYicpIHtcbiAgICAgICAgICAgIGtleS5vcHRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuc2kgZXNjYXBlIHNlcXVlbmNlXG4gICAgICAgIC8vIHJlYXNzZW1ibGUgdGhlIGtleSBjb2RlIGxlYXZpbmcgb3V0IGxlYWRpbmcgXFx4MWIncyxcbiAgICAgICAgLy8gdGhlIG1vZGlmaWVyIGtleSBiaXRmbGFnIGFuZCBhbnkgbWVhbmluZ2xlc3MgXCIxO1wiIHNlcXVlbmNlXG4gICAgICAgIGNvbnN0IGNvZGUgPSBbcGFydHNbMV0sIHBhcnRzWzJdLCBwYXJ0c1s0XSwgcGFydHNbNl1dXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gKHBhcnRzWzNdIHx8IHBhcnRzWzVdIHx8IDEpIC0gMTtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGtleSBtb2RpZmllclxuICAgICAgICBrZXkuY3RybCA9ICEhKG1vZGlmaWVyICYgNCk7XG4gICAgICAgIGtleS5tZXRhID0gISEobW9kaWZpZXIgJiAxMCk7XG4gICAgICAgIGtleS5zaGlmdCA9ICEhKG1vZGlmaWVyICYgMSk7XG4gICAgICAgIGtleS5jb2RlID0gY29kZTtcbiAgICAgICAga2V5Lm5hbWUgPSBrZXlOYW1lW2NvZGVdO1xuICAgICAgICBrZXkuc2hpZnQgPSBpc1NoaWZ0S2V5KGNvZGUpIHx8IGtleS5zaGlmdDtcbiAgICAgICAga2V5LmN0cmwgPSBpc0N0cmxLZXkoY29kZSkgfHwga2V5LmN0cmw7XG4gICAgfVxuICAgIC8vIGlUZXJtIGluIG5hdHVyYWwgdGV4dCBlZGl0aW5nIG1vZGVcbiAgICBpZiAoa2V5LnJhdyA9PT0gJ1xceDFCYicpIHtcbiAgICAgICAga2V5Lm1ldGEgPSB0cnVlO1xuICAgICAgICBrZXkubmFtZSA9ICdsZWZ0JztcbiAgICB9XG4gICAgZWxzZSBpZiAoa2V5LnJhdyA9PT0gJ1xceDFCZicpIHtcbiAgICAgICAga2V5Lm1ldGEgPSB0cnVlO1xuICAgICAgICBrZXkubmFtZSA9ICdyaWdodCc7XG4gICAgfVxuICAgIHN3aXRjaCAocykge1xuICAgICAgICBjYXNlICdcXHUwMDFiWzF+JzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hvbWUnLFxuICAgICAgICAgICAgICAgIGN0cmw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1ldGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNoaWZ0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZTogcyxcbiAgICAgICAgICAgICAgICByYXc6IHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdcXHUwMDFiWzR+JzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VuZCcsXG4gICAgICAgICAgICAgICAgY3RybDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWV0YTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hpZnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm46IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBzLFxuICAgICAgICAgICAgICAgIHJhdzogcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ1xcdTAwMWJbNX4nOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFnZXVwJyxcbiAgICAgICAgICAgICAgICBjdHJsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXRhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaGlmdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IHMsXG4gICAgICAgICAgICAgICAgcmF3OiBzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnXFx1MDAxYls2fic6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwYWdlZG93bicsXG4gICAgICAgICAgICAgICAgY3RybDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWV0YTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hpZnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm46IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBzLFxuICAgICAgICAgICAgICAgIHJhdzogcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ1xcdTAwMWJbMTs1RCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1ldGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNoaWZ0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZTogcyxcbiAgICAgICAgICAgICAgICByYXc6IHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdcXHUwMDFiWzE7NUMnOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgIGN0cmw6IHRydWUsXG4gICAgICAgICAgICAgICAgbWV0YTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hpZnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm46IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBzLFxuICAgICAgICAgICAgICAgIHJhdzogcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ1xcdTAwMWJbMX4nOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgY3RybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZXRhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaGlmdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZTogcyxcbiAgICAgICAgICAgICAgICByYXc6IHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdcXHUwMDFiWzR+JzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZuOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1ldGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNoaWZ0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBzLFxuICAgICAgICAgICAgICAgIHJhdzogcyxcbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG59O1xuZXhwb3J0IGRlZmF1bHQgcGFyc2VLZXlwcmVzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLWtleXByZXNzLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdGRpbkNvbnRleHQgZnJvbSAnLi4vY29tcG9uZW50cy9TdGRpbkNvbnRleHQuanMnO1xuLyoqXG4gKiBgdXNlU3RkaW5gIGlzIGEgUmVhY3QgaG9vaywgd2hpY2ggZXhwb3NlcyBzdGRpbiBzdHJlYW0uXG4gKi9cbmNvbnN0IHVzZVN0ZGluID0gKCkgPT4gdXNlQ29udGV4dChTdGRpbkNvbnRleHQpO1xuZXhwb3J0IGRlZmF1bHQgdXNlU3RkaW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2Utc3RkaW4uanMubWFwIiwKICAgICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFwcENvbnRleHQgZnJvbSAnLi4vY29tcG9uZW50cy9BcHBDb250ZXh0LmpzJztcbi8qKlxuICogYHVzZUFwcGAgaXMgYSBSZWFjdCBob29rLCB3aGljaCBleHBvc2VzIGEgbWV0aG9kIHRvIG1hbnVhbGx5IGV4aXQgdGhlIGFwcCAodW5tb3VudCkuXG4gKi9cbmNvbnN0IHVzZUFwcCA9ICgpID0+IHVzZUNvbnRleHQoQXBwQ29udGV4dCk7XG5leHBvcnQgZGVmYXVsdCB1c2VBcHA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtYXBwLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdGRvdXRDb250ZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvU3Rkb3V0Q29udGV4dC5qcyc7XG4vKipcbiAqIGB1c2VTdGRvdXRgIGlzIGEgUmVhY3QgaG9vaywgd2hpY2ggZXhwb3NlcyBzdGRvdXQgc3RyZWFtLlxuICovXG5jb25zdCB1c2VTdGRvdXQgPSAoKSA9PiB1c2VDb250ZXh0KFN0ZG91dENvbnRleHQpO1xuZXhwb3J0IGRlZmF1bHQgdXNlU3Rkb3V0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLXN0ZG91dC5qcy5tYXAiLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3RkZXJyQ29udGV4dCBmcm9tICcuLi9jb21wb25lbnRzL1N0ZGVyckNvbnRleHQuanMnO1xuLyoqXG4gKiBgdXNlU3RkZXJyYCBpcyBhIFJlYWN0IGhvb2ssIHdoaWNoIGV4cG9zZXMgc3RkZXJyIHN0cmVhbS5cbiAqL1xuY29uc3QgdXNlU3RkZXJyID0gKCkgPT4gdXNlQ29udGV4dChTdGRlcnJDb250ZXh0KTtcbmV4cG9ydCBkZWZhdWx0IHVzZVN0ZGVycjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1zdGRlcnIuanMubWFwIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9jdXNDb250ZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvRm9jdXNDb250ZXh0LmpzJztcbmltcG9ydCB1c2VTdGRpbiBmcm9tICcuL3VzZS1zdGRpbi5qcyc7XG4vKipcbiAqIENvbXBvbmVudCB0aGF0IHVzZXMgYHVzZUZvY3VzYCBob29rIGJlY29tZXMgXCJmb2N1c2FibGVcIiB0byBJbmssXG4gKiBzbyB3aGVuIHVzZXIgcHJlc3NlcyA8a2JkPlRhYjwva2JkPiwgSW5rIHdpbGwgc3dpdGNoIGZvY3VzIHRvIHRoaXMgY29tcG9uZW50LlxuICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBleGVjdXRlIGB1c2VGb2N1c2AgaG9vaywgZm9jdXMgd2lsbCBiZVxuICogZ2l2ZW4gdG8gdGhlbSBpbiB0aGUgb3JkZXIgdGhhdCB0aGVzZSBjb21wb25lbnRzIGFyZSByZW5kZXJlZCBpbi5cbiAqIFRoaXMgaG9vayByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGBpc0ZvY3VzZWRgIGJvb2xlYW4gcHJvcGVydHksIHdoaWNoXG4gKiBkZXRlcm1pbmVzIGlmIHRoaXMgY29tcG9uZW50IGlzIGZvY3VzZWQgb3Igbm90LlxuICovXG5jb25zdCB1c2VGb2N1cyA9ICh7IGlzQWN0aXZlID0gdHJ1ZSwgYXV0b0ZvY3VzID0gZmFsc2UsIGlkOiBjdXN0b21JZCwgfSA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBpc1Jhd01vZGVTdXBwb3J0ZWQsIHNldFJhd01vZGUgfSA9IHVzZVN0ZGluKCk7XG4gICAgY29uc3QgeyBhY3RpdmVJZCwgYWRkLCByZW1vdmUsIGFjdGl2YXRlLCBkZWFjdGl2YXRlLCBmb2N1cyB9ID0gdXNlQ29udGV4dChGb2N1c0NvbnRleHQpO1xuICAgIGNvbnN0IGlkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXN0b21JZCA/PyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkuc2xpY2UoMiwgNyk7XG4gICAgfSwgW2N1c3RvbUlkXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgYWRkKGlkLCB7IGF1dG9Gb2N1cyB9KTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHJlbW92ZShpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2lkLCBhdXRvRm9jdXNdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGl2YXRlKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlYWN0aXZhdGUoaWQpO1xuICAgICAgICB9XG4gICAgfSwgW2lzQWN0aXZlLCBpZF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNSYXdNb2RlU3VwcG9ydGVkIHx8ICFpc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd01vZGUodHJ1ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBzZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbaXNBY3RpdmVdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpc0ZvY3VzZWQ6IEJvb2xlYW4oaWQpICYmIGFjdGl2ZUlkID09PSBpZCxcbiAgICAgICAgZm9jdXMsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb2N1cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1mb2N1cy5qcy5tYXAiLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9jdXNDb250ZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvRm9jdXNDb250ZXh0LmpzJztcbi8qKlxuICogVGhpcyBob29rIGV4cG9zZXMgbWV0aG9kcyB0byBlbmFibGUgb3IgZGlzYWJsZSBmb2N1cyBtYW5hZ2VtZW50IGZvciBhbGxcbiAqIGNvbXBvbmVudHMgb3IgbWFudWFsbHkgc3dpdGNoIGZvY3VzIHRvIG5leHQgb3IgcHJldmlvdXMgY29tcG9uZW50cy5cbiAqL1xuY29uc3QgdXNlRm9jdXNNYW5hZ2VyID0gKCkgPT4ge1xuICAgIGNvbnN0IGZvY3VzQ29udGV4dCA9IHVzZUNvbnRleHQoRm9jdXNDb250ZXh0KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmFibGVGb2N1czogZm9jdXNDb250ZXh0LmVuYWJsZUZvY3VzLFxuICAgICAgICBkaXNhYmxlRm9jdXM6IGZvY3VzQ29udGV4dC5kaXNhYmxlRm9jdXMsXG4gICAgICAgIGZvY3VzTmV4dDogZm9jdXNDb250ZXh0LmZvY3VzTmV4dCxcbiAgICAgICAgZm9jdXNQcmV2aW91czogZm9jdXNDb250ZXh0LmZvY3VzUHJldmlvdXMsXG4gICAgICAgIGZvY3VzOiBmb2N1c0NvbnRleHQuZm9jdXMsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb2N1c01hbmFnZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtZm9jdXMtbWFuYWdlci5qcy5tYXAiLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAaW5ranMvdWknXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQge1xuICBnZXRDdXJyZW50UHJvamVjdENvbmZpZyxcbiAgZ2V0R2xvYmFsQ29uZmlnLFxuICBzYXZlQ3VycmVudFByb2plY3RDb25maWcsXG4gIHNhdmVHbG9iYWxDb25maWcsXG59IGZyb20gJy4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgdGVybWluYWxTZXR1cCBmcm9tICcuL2NvbW1hbmRzL3Rlcm1pbmFsU2V0dXAuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBSRUxFQVNFX05PVEVTIH0gZnJvbSAnLi9jb25zdGFudHMvcmVsZWFzZU5vdGVzLmpzJ1xuaW1wb3J0IHsgZ3QgfSBmcm9tICdzZW12ZXInXG5pbXBvcnQgeyBpc0RpckVtcHR5IH0gZnJvbSAnLi91dGlscy9maWxlLmpzJ1xuXG4vLyBGdW5jdGlvbiB0byBtYXJrIG9uYm9hcmRpbmcgYXMgY29tcGxldGVcbmV4cG9ydCBmdW5jdGlvbiBtYXJrUHJvamVjdE9uYm9hcmRpbmdDb21wbGV0ZSgpOiB2b2lkIHtcbiAgY29uc3QgcHJvamVjdENvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgaWYgKCFwcm9qZWN0Q29uZmlnLmhhc0NvbXBsZXRlZFByb2plY3RPbmJvYXJkaW5nKSB7XG4gICAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKHtcbiAgICAgIC4uLnByb2plY3RDb25maWcsXG4gICAgICBoYXNDb21wbGV0ZWRQcm9qZWN0T25ib2FyZGluZzogdHJ1ZSxcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWxlYXNlTm90ZXNTZWVuKCk6IHZvaWQge1xuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBzYXZlR2xvYmFsQ29uZmlnKHtcbiAgICAuLi5jb25maWcsXG4gICAgbGFzdFJlbGVhc2VOb3Rlc1NlZW46IE1BQ1JPLlZFUlNJT04sXG4gIH0pXG59XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHdvcmtzcGFjZURpcjogc3RyaW5nXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByb2plY3RPbmJvYXJkaW5nKHtcbiAgd29ya3NwYWNlRGlyLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAvLyBDaGVjayBpZiBwcm9qZWN0IG9uYm9hcmRpbmcgaGFzIGFscmVhZHkgYmVlbiBjb21wbGV0ZWRcbiAgY29uc3QgcHJvamVjdENvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgY29uc3Qgc2hvd09uYm9hcmRpbmcgPSAhcHJvamVjdENvbmZpZy5oYXNDb21wbGV0ZWRQcm9qZWN0T25ib2FyZGluZ1xuXG4gIC8vIEdldCBwcmV2aW91cyB2ZXJzaW9uIGZyb20gY29uZmlnXG4gIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IGNvbmZpZy5sYXN0UmVsZWFzZU5vdGVzU2VlblxuXG4gIC8vIEdldCByZWxlYXNlIG5vdGVzIHRvIHNob3dcbiAgbGV0IHJlbGVhc2VOb3Rlc1RvU2hvdzogc3RyaW5nW10gPSBbXVxuICBpZiAoIXByZXZpb3VzVmVyc2lvbiB8fCBndChNQUNSTy5WRVJTSU9OLCBwcmV2aW91c1ZlcnNpb24pKSB7XG4gICAgcmVsZWFzZU5vdGVzVG9TaG93ID0gUkVMRUFTRV9OT1RFU1tNQUNSTy5WRVJTSU9OXSB8fCBbXVxuICB9XG4gIGNvbnN0IGhhc1JlbGVhc2VOb3RlcyA9IHJlbGVhc2VOb3Rlc1RvU2hvdy5sZW5ndGggPiAwXG5cbiAgLy8gTWFyayByZWxlYXNlIG5vdGVzIGFzIHNlZW4gd2hlbiB0aGV5J3JlIGRpc3BsYXllZCB3aXRob3V0IG9uYm9hcmRpbmdcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzUmVsZWFzZU5vdGVzICYmICFzaG93T25ib2FyZGluZykge1xuICAgICAgbWFya1JlbGVhc2VOb3Rlc1NlZW4oKVxuICAgIH1cbiAgfSwgW2hhc1JlbGVhc2VOb3Rlcywgc2hvd09uYm9hcmRpbmddKVxuXG4gIC8vIFdlIG9ubHkgd2FudCB0byBzaG93IGVpdGhlciBvbmJvYXJkaW5nIE9SIHJlbGVhc2Ugbm90ZXMgKHdpdGggcHJlZmVyZW5jZSBmb3Igb25ib2FyZGluZylcbiAgLy8gSWYgdGhlcmUncyBubyBvbmJvYXJkaW5nIHRvIHNob3cgYW5kIG5vIHJlbGVhc2Ugbm90ZXMsIHJldHVybiBudWxsXG4gIGlmICghc2hvd09uYm9hcmRpbmcgJiYgIWhhc1JlbGVhc2VOb3Rlcykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBMb2FkIHdoYXQgd2UgbmVlZCBmb3Igb25ib2FyZGluZ1xuICAvLyBOT1RFOiBUaGlzIHdob2xlIGNvbXBvbmVudCBpcyBzdGF0aWNseSByZW5kZXJlZCBPbmNlXG4gIGNvbnN0IGhhc0NsYXVkZU1kID0gZXhpc3RzU3luYyhqb2luKHdvcmtzcGFjZURpciwgJ0NMQVVERS5tZCcpKVxuICBjb25zdCBpc1dvcmtzcGFjZURpckVtcHR5ID0gaXNEaXJFbXB0eSh3b3Jrc3BhY2VEaXIpXG4gIGNvbnN0IG5lZWRzQ2xhdWRlTWQgPSAhaGFzQ2xhdWRlTWQgJiYgIWlzV29ya3NwYWNlRGlyRW1wdHlcbiAgY29uc3Qgc2hvd1Rlcm1pbmFsVGlwID1cbiAgICB0ZXJtaW5hbFNldHVwLmlzRW5hYmxlZCAmJiAhZ2V0R2xvYmFsQ29uZmlnKCkuc2hpZnRFbnRlcktleUJpbmRpbmdJbnN0YWxsZWRcblxuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0gcGFkZGluZz17MX0gcGFkZGluZ0JvdHRvbT17MH0+XG4gICAgICB7c2hvd09uYm9hcmRpbmcgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5UaXBzIGZvciBnZXR0aW5nIHN0YXJ0ZWQ6PC9UZXh0PlxuICAgICAgICAgIDxPcmRlcmVkTGlzdD5cbiAgICAgICAgICAgIHsvKiBDb2xsZWN0IGFsbCB0aGUgaXRlbXMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkICovfVxuICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW11cblxuICAgICAgICAgICAgICBpZiAoaXNXb3Jrc3BhY2VEaXJFbXB0eSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgICA8T3JkZXJlZExpc3QuSXRlbSBrZXk9XCJ3b3Jrc3BhY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAgICAgICAgIEFzayBDbGF1ZGUgdG8gY3JlYXRlIGEgbmV3IGFwcCBvciBjbG9uZSBhIHJlcG9zaXRvcnkuXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvT3JkZXJlZExpc3QuSXRlbT4sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChuZWVkc0NsYXVkZU1kKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgIDxPcmRlcmVkTGlzdC5JdGVtIGtleT1cImNsYXVkZW1kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgICAgICAgICAgICAgICBSdW4gPFRleHQgY29sb3I9e3RoZW1lLnRleHR9Pi9pbml0PC9UZXh0PiB0byBjcmVhdGUgYVxuICAgICAgICAgICAgICAgICAgICAgIENMQVVERS5tZCBmaWxlIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciBDbGF1ZGUuXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvT3JkZXJlZExpc3QuSXRlbT4sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNob3dUZXJtaW5hbFRpcCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgICA8T3JkZXJlZExpc3QuSXRlbSBrZXk9XCJ0ZXJtaW5hbFwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICAgICAgUnVuIDxUZXh0IGNvbG9yPXt0aGVtZS50ZXh0fT4vdGVybWluYWwtc2V0dXA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD17ZmFsc2V9PiB0byBzZXQgdXAgdGVybWluYWwgaW50ZWdyYXRpb248L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvT3JkZXJlZExpc3QuSXRlbT4sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICA8T3JkZXJlZExpc3QuSXRlbSBrZXk9XCJxdWVzdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgICAgICAgICAgICAgQXNrIENsYXVkZSBxdWVzdGlvbnMgYWJvdXQgeW91ciBjb2RlYmFzZS5cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L09yZGVyZWRMaXN0Lkl0ZW0+LFxuICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICA8T3JkZXJlZExpc3QuSXRlbSBrZXk9XCJjaGFuZ2VzXCI+XG4gICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICAgIEFzayBDbGF1ZGUgdG8gaW1wbGVtZW50IGNoYW5nZXMgdG8geW91ciBjb2RlYmFzZS5cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L09yZGVyZWRMaXN0Lkl0ZW0+LFxuICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgICAgICAgICB9KSgpfVxuICAgICAgICAgIDwvT3JkZXJlZExpc3Q+XG4gICAgICAgIDwvPlxuICAgICAgKX1cblxuICAgICAgeyFzaG93T25ib2FyZGluZyAmJiBoYXNSZWxlYXNlTm90ZXMgJiYgKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgYm9yZGVyQ29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5Qm9yZGVyfVxuICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgIG1hcmdpblJpZ2h0PXsxfVxuICAgICAgICA+XG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXswfT5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgPFRleHQ+8J+GlSBXaGF0JmFwb3M7cyBuZXcgaW4gdntNQUNSTy5WRVJTSU9OfTo8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpbkxlZnQ9ezF9PlxuICAgICAgICAgICAgICB7cmVsZWFzZU5vdGVzVG9TaG93Lm1hcCgobm90ZSwgbm90ZUluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPFRleHQga2V5PXtub3RlSW5kZXh9IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAgICAg4oCiIHtub3RlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuXG4gICAgICB7d29ya3NwYWNlRGlyID09PSBob21lZGlyKCkgJiYgKFxuICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS53YXJuaW5nfT5cbiAgICAgICAgICBOb3RlOiBZb3UgaGF2ZSBsYXVuY2hlZCA8VGV4dCBib2xkPmNsYXVkZTwvVGV4dD4gaW4geW91ciBob21lXG4gICAgICAgICAgZGlyZWN0b3J5LiBGb3IgdGhlIGJlc3QgZXhwZXJpZW5jZSwgbGF1bmNoIGl0IGluIGEgcHJvamVjdCBkaXJlY3RvcnlcbiAgICAgICAgICBpbnN0ZWFkLlxuICAgICAgICA8L1RleHQ+XG4gICAgICApfVxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIEJhZGdlKHsgY2hpbGRyZW4sIGNvbG9yID0gJ21hZ2VudGEnIH0pIHtcbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdXNlQ29tcG9uZW50VGhlbWUoJ0JhZGdlJyk7XG4gICAgbGV0IGZvcm1hdHRlZENoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9ybWF0dGVkQ2hpbGRyZW4gPSBjaGlsZHJlbi50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyAuLi5zdHlsZXMuY29udGFpbmVyKHsgY29sb3IgfSkgfSxcbiAgICAgICAgJyAnLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgLi4uc3R5bGVzLmxhYmVsKCkgfSwgZm9ybWF0dGVkQ2hpbGRyZW4pLFxuICAgICAgICAnICcpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhZGdlLmpzLm1hcCIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQgYWxlcnRUaGVtZSBmcm9tICcuL2NvbXBvbmVudHMvYWxlcnQvdGhlbWUuanMnO1xuaW1wb3J0IGJhZGdlVGhlbWUgZnJvbSAnLi9jb21wb25lbnRzL2JhZGdlL3RoZW1lLmpzJztcbmltcG9ydCBjb25maXJtSW5wdXRUaGVtZSBmcm9tICcuL2NvbXBvbmVudHMvY29uZmlybS1pbnB1dC90aGVtZS5qcyc7XG5pbXBvcnQgbXVsdGlTZWxlY3RUaGVtZSBmcm9tICcuL2NvbXBvbmVudHMvbXVsdGktc2VsZWN0L3RoZW1lLmpzJztcbmltcG9ydCBvcmRlcmVkTGlzdFRoZW1lIGZyb20gJy4vY29tcG9uZW50cy9vcmRlcmVkLWxpc3QvdGhlbWUuanMnO1xuaW1wb3J0IHByb2dyZXNzQmFyVGhlbWUgZnJvbSAnLi9jb21wb25lbnRzL3Byb2dyZXNzLWJhci90aGVtZS5qcyc7XG5pbXBvcnQgc2VsZWN0VGhlbWUgZnJvbSAnLi9jb21wb25lbnRzL3NlbGVjdC90aGVtZS5qcyc7XG5pbXBvcnQgc3Bpbm5lclRoZW1lIGZyb20gJy4vY29tcG9uZW50cy9zcGlubmVyL3RoZW1lLmpzJztcbmltcG9ydCBzdGF0dXNNZXNzYWdlVGhlbWUgZnJvbSAnLi9jb21wb25lbnRzL3N0YXR1cy1tZXNzYWdlL3RoZW1lLmpzJztcbmltcG9ydCB1bm9yZGVyZWRMaXN0VGhlbWUgZnJvbSAnLi9jb21wb25lbnRzL3Vub3JkZXJlZC1saXN0L3RoZW1lLmpzJztcbmltcG9ydCB0ZXh0SW5wdXRUaGVtZSBmcm9tICcuL2NvbXBvbmVudHMvdGV4dC1pbnB1dC90aGVtZS5qcyc7XG5pbXBvcnQgZW1haWxJbnB1dFRoZW1lIGZyb20gJy4vY29tcG9uZW50cy9lbWFpbC1pbnB1dC90aGVtZS5qcyc7XG5pbXBvcnQgcGFzc3dvcmRJbnB1dFRoZW1lIGZyb20gJy4vY29tcG9uZW50cy9wYXNzd29yZC1pbnB1dC90aGVtZS5qcyc7XG5leHBvcnQgY29uc3QgZGVmYXVsdFRoZW1lID0ge1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQWxlcnQ6IGFsZXJ0VGhlbWUsXG4gICAgICAgIEJhZGdlOiBiYWRnZVRoZW1lLFxuICAgICAgICBDb25maXJtSW5wdXQ6IGNvbmZpcm1JbnB1dFRoZW1lLFxuICAgICAgICBNdWx0aVNlbGVjdDogbXVsdGlTZWxlY3RUaGVtZSxcbiAgICAgICAgT3JkZXJlZExpc3Q6IG9yZGVyZWRMaXN0VGhlbWUsXG4gICAgICAgIFByb2dyZXNzQmFyOiBwcm9ncmVzc0JhclRoZW1lLFxuICAgICAgICBTZWxlY3Q6IHNlbGVjdFRoZW1lLFxuICAgICAgICBTcGlubmVyOiBzcGlubmVyVGhlbWUsXG4gICAgICAgIFN0YXR1c01lc3NhZ2U6IHN0YXR1c01lc3NhZ2VUaGVtZSxcbiAgICAgICAgVW5vcmRlcmVkTGlzdDogdW5vcmRlcmVkTGlzdFRoZW1lLFxuICAgICAgICBUZXh0SW5wdXQ6IHRleHRJbnB1dFRoZW1lLFxuICAgICAgICBFbWFpbElucHV0OiBlbWFpbElucHV0VGhlbWUsXG4gICAgICAgIFBhc3N3b3JkSW5wdXQ6IHBhc3N3b3JkSW5wdXRUaGVtZSxcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBUaGVtZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KGRlZmF1bHRUaGVtZSk7XG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQcm92aWRlcih7IGNoaWxkcmVuLCB0aGVtZSB9KSB7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogdGhlbWUgfSwgY2hpbGRyZW4pKTtcbn1cbmV4cG9ydCBjb25zdCBleHRlbmRUaGVtZSA9IChvcmlnaW5hbFRoZW1lLCBuZXdUaGVtZSkgPT4ge1xuICAgIHJldHVybiBkZWVwbWVyZ2Uob3JpZ2luYWxUaGVtZSwgbmV3VGhlbWUpO1xufTtcbmV4cG9ydCBjb25zdCB1c2VDb21wb25lbnRUaGVtZSA9IChjb21wb25lbnQpID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW1lLmpzLm1hcCIsCiAgICAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNVbmljb2RlU3VwcG9ydGVkKCkge1xuXHRjb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cdGNvbnN0IHtURVJNLCBURVJNX1BST0dSQU19ID0gZW52O1xuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG5cdFx0cmV0dXJuIFRFUk0gIT09ICdsaW51eCc7IC8vIExpbnV4IGNvbnNvbGUgKGtlcm5lbClcblx0fVxuXG5cdHJldHVybiBCb29sZWFuKGVudi5XVF9TRVNTSU9OKSAvLyBXaW5kb3dzIFRlcm1pbmFsXG5cdFx0fHwgQm9vbGVhbihlbnYuVEVSTUlOVVNfU1VCTElNRSkgLy8gVGVybWludXMgKDwwLjIuMjcpXG5cdFx0fHwgZW52LkNvbkVtdVRhc2sgPT09ICd7Y21kOjpDbWRlcn0nIC8vIENvbkVtdSBhbmQgY21kZXJcblx0XHR8fCBURVJNX1BST0dSQU0gPT09ICdUZXJtaW51cy1TdWJsaW1lJ1xuXHRcdHx8IFRFUk1fUFJPR1JBTSA9PT0gJ3ZzY29kZSdcblx0XHR8fCBURVJNID09PSAneHRlcm0tMjU2Y29sb3InXG5cdFx0fHwgVEVSTSA9PT0gJ2FsYWNyaXR0eSdcblx0XHR8fCBURVJNID09PSAncnh2dC11bmljb2RlJ1xuXHRcdHx8IFRFUk0gPT09ICdyeHZ0LXVuaWNvZGUtMjU2Y29sb3InXG5cdFx0fHwgZW52LlRFUk1JTkFMX0VNVUxBVE9SID09PSAnSmV0QnJhaW5zLUplZGlUZXJtJztcbn1cbiIsCiAgICAiaW1wb3J0IGlzVW5pY29kZVN1cHBvcnRlZCBmcm9tICdpcy11bmljb2RlLXN1cHBvcnRlZCc7XG5cbmNvbnN0IGNvbW1vbiA9IHtcblx0Y2lyY2xlUXVlc3Rpb25NYXJrOiAnKD8pJyxcblx0cXVlc3Rpb25NYXJrUHJlZml4OiAnKD8pJyxcblx0c3F1YXJlOiAn4paIJyxcblx0c3F1YXJlRGFya1NoYWRlOiAn4paTJyxcblx0c3F1YXJlTWVkaXVtU2hhZGU6ICfilpInLFxuXHRzcXVhcmVMaWdodFNoYWRlOiAn4paRJyxcblx0c3F1YXJlVG9wOiAn4paAJyxcblx0c3F1YXJlQm90dG9tOiAn4paEJyxcblx0c3F1YXJlTGVmdDogJ+KWjCcsXG5cdHNxdWFyZVJpZ2h0OiAn4paQJyxcblx0c3F1YXJlQ2VudGVyOiAn4pagJyxcblx0YnVsbGV0OiAn4pePJyxcblx0ZG90OiAn4oCkJyxcblx0ZWxsaXBzaXM6ICfigKYnLFxuXHRwb2ludGVyU21hbGw6ICfigLonLFxuXHR0cmlhbmdsZVVwOiAn4payJyxcblx0dHJpYW5nbGVVcFNtYWxsOiAn4pa0Jyxcblx0dHJpYW5nbGVEb3duOiAn4pa8Jyxcblx0dHJpYW5nbGVEb3duU21hbGw6ICfilr4nLFxuXHR0cmlhbmdsZUxlZnRTbWFsbDogJ+KXgicsXG5cdHRyaWFuZ2xlUmlnaHRTbWFsbDogJ+KWuCcsXG5cdGhvbWU6ICfijIInLFxuXHRoZWFydDogJ+KZpScsXG5cdG11c2ljTm90ZTogJ+KZqicsXG5cdG11c2ljTm90ZUJlYW1lZDogJ+KZqycsXG5cdGFycm93VXA6ICfihpEnLFxuXHRhcnJvd0Rvd246ICfihpMnLFxuXHRhcnJvd0xlZnQ6ICfihpAnLFxuXHRhcnJvd1JpZ2h0OiAn4oaSJyxcblx0YXJyb3dMZWZ0UmlnaHQ6ICfihpQnLFxuXHRhcnJvd1VwRG93bjogJ+KGlScsXG5cdGFsbW9zdEVxdWFsOiAn4omIJyxcblx0bm90RXF1YWw6ICfiiaAnLFxuXHRsZXNzT3JFcXVhbDogJ+KJpCcsXG5cdGdyZWF0ZXJPckVxdWFsOiAn4omlJyxcblx0aWRlbnRpY2FsOiAn4omhJyxcblx0aW5maW5pdHk6ICfiiJ4nLFxuXHRzdWJzY3JpcHRaZXJvOiAn4oKAJyxcblx0c3Vic2NyaXB0T25lOiAn4oKBJyxcblx0c3Vic2NyaXB0VHdvOiAn4oKCJyxcblx0c3Vic2NyaXB0VGhyZWU6ICfigoMnLFxuXHRzdWJzY3JpcHRGb3VyOiAn4oKEJyxcblx0c3Vic2NyaXB0Rml2ZTogJ+KChScsXG5cdHN1YnNjcmlwdFNpeDogJ+KChicsXG5cdHN1YnNjcmlwdFNldmVuOiAn4oKHJyxcblx0c3Vic2NyaXB0RWlnaHQ6ICfigognLFxuXHRzdWJzY3JpcHROaW5lOiAn4oKJJyxcblx0b25lSGFsZjogJ8K9Jyxcblx0b25lVGhpcmQ6ICfihZMnLFxuXHRvbmVRdWFydGVyOiAnwrwnLFxuXHRvbmVGaWZ0aDogJ+KFlScsXG5cdG9uZVNpeHRoOiAn4oWZJyxcblx0b25lRWlnaHRoOiAn4oWbJyxcblx0dHdvVGhpcmRzOiAn4oWUJyxcblx0dHdvRmlmdGhzOiAn4oWWJyxcblx0dGhyZWVRdWFydGVyczogJ8K+Jyxcblx0dGhyZWVGaWZ0aHM6ICfihZcnLFxuXHR0aHJlZUVpZ2h0aHM6ICfihZwnLFxuXHRmb3VyRmlmdGhzOiAn4oWYJyxcblx0Zml2ZVNpeHRoczogJ+KFmicsXG5cdGZpdmVFaWdodGhzOiAn4oWdJyxcblx0c2V2ZW5FaWdodGhzOiAn4oWeJyxcblx0bGluZTogJ+KUgCcsXG5cdGxpbmVCb2xkOiAn4pSBJyxcblx0bGluZURvdWJsZTogJ+KVkCcsXG5cdGxpbmVEYXNoZWQwOiAn4pSEJyxcblx0bGluZURhc2hlZDE6ICfilIUnLFxuXHRsaW5lRGFzaGVkMjogJ+KUiCcsXG5cdGxpbmVEYXNoZWQzOiAn4pSJJyxcblx0bGluZURhc2hlZDQ6ICfilYwnLFxuXHRsaW5lRGFzaGVkNTogJ+KVjScsXG5cdGxpbmVEYXNoZWQ2OiAn4pW0Jyxcblx0bGluZURhc2hlZDc6ICfilbYnLFxuXHRsaW5lRGFzaGVkODogJ+KVuCcsXG5cdGxpbmVEYXNoZWQ5OiAn4pW6Jyxcblx0bGluZURhc2hlZDEwOiAn4pW8Jyxcblx0bGluZURhc2hlZDExOiAn4pW+Jyxcblx0bGluZURhc2hlZDEyOiAn4oiSJyxcblx0bGluZURhc2hlZDEzOiAn4oCTJyxcblx0bGluZURhc2hlZDE0OiAn4oCQJyxcblx0bGluZURhc2hlZDE1OiAn4oGDJyxcblx0bGluZVZlcnRpY2FsOiAn4pSCJyxcblx0bGluZVZlcnRpY2FsQm9sZDogJ+KUgycsXG5cdGxpbmVWZXJ0aWNhbERvdWJsZTogJ+KVkScsXG5cdGxpbmVWZXJ0aWNhbERhc2hlZDA6ICfilIYnLFxuXHRsaW5lVmVydGljYWxEYXNoZWQxOiAn4pSHJyxcblx0bGluZVZlcnRpY2FsRGFzaGVkMjogJ+KUiicsXG5cdGxpbmVWZXJ0aWNhbERhc2hlZDM6ICfilIsnLFxuXHRsaW5lVmVydGljYWxEYXNoZWQ0OiAn4pWOJyxcblx0bGluZVZlcnRpY2FsRGFzaGVkNTogJ+KVjycsXG5cdGxpbmVWZXJ0aWNhbERhc2hlZDY6ICfilbUnLFxuXHRsaW5lVmVydGljYWxEYXNoZWQ3OiAn4pW3Jyxcblx0bGluZVZlcnRpY2FsRGFzaGVkODogJ+KVuScsXG5cdGxpbmVWZXJ0aWNhbERhc2hlZDk6ICfilbsnLFxuXHRsaW5lVmVydGljYWxEYXNoZWQxMDogJ+KVvScsXG5cdGxpbmVWZXJ0aWNhbERhc2hlZDExOiAn4pW/Jyxcblx0bGluZURvd25MZWZ0OiAn4pSQJyxcblx0bGluZURvd25MZWZ0QXJjOiAn4pWuJyxcblx0bGluZURvd25Cb2xkTGVmdEJvbGQ6ICfilJMnLFxuXHRsaW5lRG93bkJvbGRMZWZ0OiAn4pSSJyxcblx0bGluZURvd25MZWZ0Qm9sZDogJ+KUkScsXG5cdGxpbmVEb3duRG91YmxlTGVmdERvdWJsZTogJ+KVlycsXG5cdGxpbmVEb3duRG91YmxlTGVmdDogJ+KVlicsXG5cdGxpbmVEb3duTGVmdERvdWJsZTogJ+KVlScsXG5cdGxpbmVEb3duUmlnaHQ6ICfilIwnLFxuXHRsaW5lRG93blJpZ2h0QXJjOiAn4pWtJyxcblx0bGluZURvd25Cb2xkUmlnaHRCb2xkOiAn4pSPJyxcblx0bGluZURvd25Cb2xkUmlnaHQ6ICfilI4nLFxuXHRsaW5lRG93blJpZ2h0Qm9sZDogJ+KUjScsXG5cdGxpbmVEb3duRG91YmxlUmlnaHREb3VibGU6ICfilZQnLFxuXHRsaW5lRG93bkRvdWJsZVJpZ2h0OiAn4pWTJyxcblx0bGluZURvd25SaWdodERvdWJsZTogJ+KVkicsXG5cdGxpbmVVcExlZnQ6ICfilJgnLFxuXHRsaW5lVXBMZWZ0QXJjOiAn4pWvJyxcblx0bGluZVVwQm9sZExlZnRCb2xkOiAn4pSbJyxcblx0bGluZVVwQm9sZExlZnQ6ICfilJonLFxuXHRsaW5lVXBMZWZ0Qm9sZDogJ+KUmScsXG5cdGxpbmVVcERvdWJsZUxlZnREb3VibGU6ICfilZ0nLFxuXHRsaW5lVXBEb3VibGVMZWZ0OiAn4pWcJyxcblx0bGluZVVwTGVmdERvdWJsZTogJ+KVmycsXG5cdGxpbmVVcFJpZ2h0OiAn4pSUJyxcblx0bGluZVVwUmlnaHRBcmM6ICfilbAnLFxuXHRsaW5lVXBCb2xkUmlnaHRCb2xkOiAn4pSXJyxcblx0bGluZVVwQm9sZFJpZ2h0OiAn4pSWJyxcblx0bGluZVVwUmlnaHRCb2xkOiAn4pSVJyxcblx0bGluZVVwRG91YmxlUmlnaHREb3VibGU6ICfilZonLFxuXHRsaW5lVXBEb3VibGVSaWdodDogJ+KVmScsXG5cdGxpbmVVcFJpZ2h0RG91YmxlOiAn4pWYJyxcblx0bGluZVVwRG93bkxlZnQ6ICfilKQnLFxuXHRsaW5lVXBCb2xkRG93bkJvbGRMZWZ0Qm9sZDogJ+KUqycsXG5cdGxpbmVVcEJvbGREb3duQm9sZExlZnQ6ICfilKgnLFxuXHRsaW5lVXBEb3duTGVmdEJvbGQ6ICfilKUnLFxuXHRsaW5lVXBCb2xkRG93bkxlZnRCb2xkOiAn4pSpJyxcblx0bGluZVVwRG93bkJvbGRMZWZ0Qm9sZDogJ+KUqicsXG5cdGxpbmVVcERvd25Cb2xkTGVmdDogJ+KUpycsXG5cdGxpbmVVcEJvbGREb3duTGVmdDogJ+KUpicsXG5cdGxpbmVVcERvdWJsZURvd25Eb3VibGVMZWZ0RG91YmxlOiAn4pWjJyxcblx0bGluZVVwRG91YmxlRG93bkRvdWJsZUxlZnQ6ICfilaInLFxuXHRsaW5lVXBEb3duTGVmdERvdWJsZTogJ+KVoScsXG5cdGxpbmVVcERvd25SaWdodDogJ+KUnCcsXG5cdGxpbmVVcEJvbGREb3duQm9sZFJpZ2h0Qm9sZDogJ+KUoycsXG5cdGxpbmVVcEJvbGREb3duQm9sZFJpZ2h0OiAn4pSgJyxcblx0bGluZVVwRG93blJpZ2h0Qm9sZDogJ+KUnScsXG5cdGxpbmVVcEJvbGREb3duUmlnaHRCb2xkOiAn4pShJyxcblx0bGluZVVwRG93bkJvbGRSaWdodEJvbGQ6ICfilKInLFxuXHRsaW5lVXBEb3duQm9sZFJpZ2h0OiAn4pSfJyxcblx0bGluZVVwQm9sZERvd25SaWdodDogJ+KUnicsXG5cdGxpbmVVcERvdWJsZURvd25Eb3VibGVSaWdodERvdWJsZTogJ+KVoCcsXG5cdGxpbmVVcERvdWJsZURvd25Eb3VibGVSaWdodDogJ+KVnycsXG5cdGxpbmVVcERvd25SaWdodERvdWJsZTogJ+KVnicsXG5cdGxpbmVEb3duTGVmdFJpZ2h0OiAn4pSsJyxcblx0bGluZURvd25Cb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilLMnLFxuXHRsaW5lRG93bkxlZnRCb2xkUmlnaHRCb2xkOiAn4pSvJyxcblx0bGluZURvd25Cb2xkTGVmdFJpZ2h0OiAn4pSwJyxcblx0bGluZURvd25Cb2xkTGVmdEJvbGRSaWdodDogJ+KUsScsXG5cdGxpbmVEb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilLInLFxuXHRsaW5lRG93bkxlZnRSaWdodEJvbGQ6ICfilK4nLFxuXHRsaW5lRG93bkxlZnRCb2xkUmlnaHQ6ICfilK0nLFxuXHRsaW5lRG93bkRvdWJsZUxlZnREb3VibGVSaWdodERvdWJsZTogJ+KVpicsXG5cdGxpbmVEb3duRG91YmxlTGVmdFJpZ2h0OiAn4pWlJyxcblx0bGluZURvd25MZWZ0RG91YmxlUmlnaHREb3VibGU6ICfilaQnLFxuXHRsaW5lVXBMZWZ0UmlnaHQ6ICfilLQnLFxuXHRsaW5lVXBCb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilLsnLFxuXHRsaW5lVXBMZWZ0Qm9sZFJpZ2h0Qm9sZDogJ+KUtycsXG5cdGxpbmVVcEJvbGRMZWZ0UmlnaHQ6ICfilLgnLFxuXHRsaW5lVXBCb2xkTGVmdEJvbGRSaWdodDogJ+KUuScsXG5cdGxpbmVVcEJvbGRMZWZ0UmlnaHRCb2xkOiAn4pS6Jyxcblx0bGluZVVwTGVmdFJpZ2h0Qm9sZDogJ+KUticsXG5cdGxpbmVVcExlZnRCb2xkUmlnaHQ6ICfilLUnLFxuXHRsaW5lVXBEb3VibGVMZWZ0RG91YmxlUmlnaHREb3VibGU6ICfilaknLFxuXHRsaW5lVXBEb3VibGVMZWZ0UmlnaHQ6ICfilagnLFxuXHRsaW5lVXBMZWZ0RG91YmxlUmlnaHREb3VibGU6ICfilacnLFxuXHRsaW5lVXBEb3duTGVmdFJpZ2h0OiAn4pS8Jyxcblx0bGluZVVwQm9sZERvd25Cb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilYsnLFxuXHRsaW5lVXBEb3duQm9sZExlZnRCb2xkUmlnaHRCb2xkOiAn4pWIJyxcblx0bGluZVVwQm9sZERvd25MZWZ0Qm9sZFJpZ2h0Qm9sZDogJ+KVhycsXG5cdGxpbmVVcEJvbGREb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilYonLFxuXHRsaW5lVXBCb2xkRG93bkJvbGRMZWZ0Qm9sZFJpZ2h0OiAn4pWJJyxcblx0bGluZVVwQm9sZERvd25MZWZ0UmlnaHQ6ICfilYAnLFxuXHRsaW5lVXBEb3duQm9sZExlZnRSaWdodDogJ+KVgScsXG5cdGxpbmVVcERvd25MZWZ0Qm9sZFJpZ2h0OiAn4pS9Jyxcblx0bGluZVVwRG93bkxlZnRSaWdodEJvbGQ6ICfilL4nLFxuXHRsaW5lVXBCb2xkRG93bkJvbGRMZWZ0UmlnaHQ6ICfilYInLFxuXHRsaW5lVXBEb3duTGVmdEJvbGRSaWdodEJvbGQ6ICfilL8nLFxuXHRsaW5lVXBCb2xkRG93bkxlZnRCb2xkUmlnaHQ6ICfilYMnLFxuXHRsaW5lVXBCb2xkRG93bkxlZnRSaWdodEJvbGQ6ICfilYQnLFxuXHRsaW5lVXBEb3duQm9sZExlZnRCb2xkUmlnaHQ6ICfilYUnLFxuXHRsaW5lVXBEb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilYYnLFxuXHRsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWsJyxcblx0bGluZVVwRG91YmxlRG93bkRvdWJsZUxlZnRSaWdodDogJ+KVqycsXG5cdGxpbmVVcERvd25MZWZ0RG91YmxlUmlnaHREb3VibGU6ICfilaonLFxuXHRsaW5lQ3Jvc3M6ICfilbMnLFxuXHRsaW5lQmFja3NsYXNoOiAn4pWyJyxcblx0bGluZVNsYXNoOiAn4pWxJyxcbn07XG5cbmNvbnN0IHNwZWNpYWxNYWluU3ltYm9scyA9IHtcblx0dGljazogJ+KclCcsXG5cdGluZm86ICfihLknLFxuXHR3YXJuaW5nOiAn4pqgJyxcblx0Y3Jvc3M6ICfinJgnLFxuXHRzcXVhcmVTbWFsbDogJ+KXuycsXG5cdHNxdWFyZVNtYWxsRmlsbGVkOiAn4pe8Jyxcblx0Y2lyY2xlOiAn4pevJyxcblx0Y2lyY2xlRmlsbGVkOiAn4peJJyxcblx0Y2lyY2xlRG90dGVkOiAn4peMJyxcblx0Y2lyY2xlRG91YmxlOiAn4peOJyxcblx0Y2lyY2xlQ2lyY2xlOiAn4pOeJyxcblx0Y2lyY2xlQ3Jvc3M6ICfik6cnLFxuXHRjaXJjbGVQaXBlOiAn4pK+Jyxcblx0cmFkaW9PbjogJ+KXiScsXG5cdHJhZGlvT2ZmOiAn4pevJyxcblx0Y2hlY2tib3hPbjogJ+KYkicsXG5cdGNoZWNrYm94T2ZmOiAn4piQJyxcblx0Y2hlY2tib3hDaXJjbGVPbjogJ+KTpycsXG5cdGNoZWNrYm94Q2lyY2xlT2ZmOiAn4pK+Jyxcblx0cG9pbnRlcjogJ+KdrycsXG5cdHRyaWFuZ2xlVXBPdXRsaW5lOiAn4pazJyxcblx0dHJpYW5nbGVMZWZ0OiAn4peAJyxcblx0dHJpYW5nbGVSaWdodDogJ+KWticsXG5cdGxvemVuZ2U6ICfil4YnLFxuXHRsb3plbmdlT3V0bGluZTogJ+KXhycsXG5cdGhhbWJ1cmdlcjogJ+KYsCcsXG5cdHNtaWxleTogJ+OLoScsXG5cdG11c3RhY2hlOiAn4Le0Jyxcblx0c3RhcjogJ+KYhScsXG5cdHBsYXk6ICfilrYnLFxuXHRub2RlanM6ICfirKInLFxuXHRvbmVTZXZlbnRoOiAn4oWQJyxcblx0b25lTmludGg6ICfihZEnLFxuXHRvbmVUZW50aDogJ+KFkicsXG59O1xuXG5jb25zdCBzcGVjaWFsRmFsbGJhY2tTeW1ib2xzID0ge1xuXHR0aWNrOiAn4oiaJyxcblx0aW5mbzogJ2knLFxuXHR3YXJuaW5nOiAn4oC8Jyxcblx0Y3Jvc3M6ICfDlycsXG5cdHNxdWFyZVNtYWxsOiAn4pahJyxcblx0c3F1YXJlU21hbGxGaWxsZWQ6ICfilqAnLFxuXHRjaXJjbGU6ICcoICknLFxuXHRjaXJjbGVGaWxsZWQ6ICcoKiknLFxuXHRjaXJjbGVEb3R0ZWQ6ICcoICknLFxuXHRjaXJjbGVEb3VibGU6ICcoICknLFxuXHRjaXJjbGVDaXJjbGU6ICco4peLKScsXG5cdGNpcmNsZUNyb3NzOiAnKMOXKScsXG5cdGNpcmNsZVBpcGU6ICco4pSCKScsXG5cdHJhZGlvT246ICcoKiknLFxuXHRyYWRpb09mZjogJyggKScsXG5cdGNoZWNrYm94T246ICdbw5ddJyxcblx0Y2hlY2tib3hPZmY6ICdbIF0nLFxuXHRjaGVja2JveENpcmNsZU9uOiAnKMOXKScsXG5cdGNoZWNrYm94Q2lyY2xlT2ZmOiAnKCApJyxcblx0cG9pbnRlcjogJz4nLFxuXHR0cmlhbmdsZVVwT3V0bGluZTogJ+KIhicsXG5cdHRyaWFuZ2xlTGVmdDogJ+KXhCcsXG5cdHRyaWFuZ2xlUmlnaHQ6ICfilronLFxuXHRsb3plbmdlOiAn4pmmJyxcblx0bG96ZW5nZU91dGxpbmU6ICfil4onLFxuXHRoYW1idXJnZXI6ICfiiaEnLFxuXHRzbWlsZXk6ICfimLonLFxuXHRtdXN0YWNoZTogJ+KUjOKUgOKUkCcsXG5cdHN0YXI6ICfinLYnLFxuXHRwbGF5OiAn4pa6Jyxcblx0bm9kZWpzOiAn4pmmJyxcblx0b25lU2V2ZW50aDogJzEvNycsXG5cdG9uZU5pbnRoOiAnMS85Jyxcblx0b25lVGVudGg6ICcxLzEwJyxcbn07XG5cbmV4cG9ydCBjb25zdCBtYWluU3ltYm9scyA9IHsuLi5jb21tb24sIC4uLnNwZWNpYWxNYWluU3ltYm9sc307XG5leHBvcnQgY29uc3QgZmFsbGJhY2tTeW1ib2xzID0gey4uLmNvbW1vbiwgLi4uc3BlY2lhbEZhbGxiYWNrU3ltYm9sc307XG5cbmNvbnN0IHNob3VsZFVzZU1haW4gPSBpc1VuaWNvZGVTdXBwb3J0ZWQoKTtcbmNvbnN0IGZpZ3VyZXMgPSBzaG91bGRVc2VNYWluID8gbWFpblN5bWJvbHMgOiBmYWxsYmFja1N5bWJvbHM7XG5leHBvcnQgZGVmYXVsdCBmaWd1cmVzO1xuXG5jb25zdCByZXBsYWNlbWVudHMgPSBPYmplY3QuZW50cmllcyhzcGVjaWFsTWFpblN5bWJvbHMpO1xuXG4vLyBPbiB0ZXJtaW5hbHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgVW5pY29kZSBzeW1ib2xzLCBzdWJzdGl0dXRlIHRoZW0gdG8gb3RoZXIgc3ltYm9sc1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VTeW1ib2xzID0gKHN0cmluZywge3VzZUZhbGxiYWNrID0gIXNob3VsZFVzZU1haW59ID0ge30pID0+IHtcblx0aWYgKHVzZUZhbGxiYWNrKSB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCBtYWluU3ltYm9sXSBvZiByZXBsYWNlbWVudHMpIHtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlQWxsKG1haW5TeW1ib2wsIGZhbGxiYWNrU3ltYm9sc1trZXldKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3RyaW5nO1xufTtcbiIsCiAgICAiaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG5jb25zdCBjb2xvckJ5VmFyaWFudCA9IHtcbiAgICBpbmZvOiAnYmx1ZScsXG4gICAgc3VjY2VzczogJ2dyZWVuJyxcbiAgICBlcnJvcjogJ3JlZCcsXG4gICAgd2FybmluZzogJ3llbGxvdycsXG59O1xuY29uc3QgdGhlbWUgPSB7XG4gICAgc3R5bGVzOiB7XG4gICAgICAgIGNvbnRhaW5lcjogKHsgdmFyaWFudCB9KSA9PiAoe1xuICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvckJ5VmFyaWFudFt2YXJpYW50XSxcbiAgICAgICAgICAgIGdhcDogMSxcbiAgICAgICAgICAgIHBhZGRpbmdYOiAxLFxuICAgICAgICB9KSxcbiAgICAgICAgaWNvbkNvbnRhaW5lcjogKCkgPT4gKHtcbiAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIH0pLFxuICAgICAgICBpY29uOiAoeyB2YXJpYW50IH0pID0+ICh7XG4gICAgICAgICAgICBjb2xvcjogY29sb3JCeVZhcmlhbnRbdmFyaWFudF0sXG4gICAgICAgIH0pLFxuICAgICAgICBjb250ZW50OiAoKSA9PiAoe1xuICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgIGdhcDogMSxcbiAgICAgICAgfSksXG4gICAgICAgIHRpdGxlOiAoKSA9PiAoe1xuICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIG1lc3NhZ2U6ICgpID0+ICh7fSksXG4gICAgfSxcbiAgICBjb25maWcoeyB2YXJpYW50IH0pIHtcbiAgICAgICAgbGV0IGljb247XG4gICAgICAgIGlmICh2YXJpYW50ID09PSAnaW5mbycpIHtcbiAgICAgICAgICAgIGljb24gPSBmaWd1cmVzLmluZm87XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhcmlhbnQgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgaWNvbiA9IGZpZ3VyZXMudGljaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFyaWFudCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgaWNvbiA9IGZpZ3VyZXMuY3Jvc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhcmlhbnQgPT09ICd3YXJuaW5nJykge1xuICAgICAgICAgICAgaWNvbiA9IGZpZ3VyZXMud2FybmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBpY29uIH07XG4gICAgfSxcbn07XG5leHBvcnQgZGVmYXVsdCB0aGVtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW1lLmpzLm1hcCIsCiAgICAiY29uc3QgdGhlbWUgPSB7XG4gICAgc3R5bGVzOiB7XG4gICAgICAgIGNvbnRhaW5lcjogKHsgY29sb3IgfSkgPT4gKHtcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICAgIH0pLFxuICAgICAgICBsYWJlbDogKCkgPT4gKHtcbiAgICAgICAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgICB9KSxcbiAgICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IHRoZW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbWUuanMubWFwIiwKICAgICJjb25zdCB0aGVtZSA9IHtcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgaW5wdXQ6ICh7IGlzRm9jdXNlZCB9KSA9PiAoe1xuICAgICAgICAgICAgZGltQ29sb3I6ICFpc0ZvY3VzZWQsXG4gICAgICAgIH0pLFxuICAgIH0sXG59O1xuZXhwb3J0IGRlZmF1bHQgdGhlbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVtZS5qcy5tYXAiLAogICAgImNvbnN0IHRoZW1lID0ge1xuICAgIHN0eWxlczoge1xuICAgICAgICBjb250YWluZXI6ICgpID0+ICh7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbjogKHsgaXNGb2N1c2VkIH0pID0+ICh7XG4gICAgICAgICAgICBnYXA6IDEsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogaXNGb2N1c2VkID8gMCA6IDIsXG4gICAgICAgIH0pLFxuICAgICAgICBzZWxlY3RlZEluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgICAgICAgIGNvbG9yOiAnZ3JlZW4nLFxuICAgICAgICB9KSxcbiAgICAgICAgZm9jdXNJbmRpY2F0b3I6ICgpID0+ICh7XG4gICAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICB9KSxcbiAgICAgICAgbGFiZWwoeyBpc0ZvY3VzZWQsIGlzU2VsZWN0ZWQgfSkge1xuICAgICAgICAgICAgbGV0IGNvbG9yO1xuICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9ICdncmVlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSAnYmx1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBjb2xvciB9O1xuICAgICAgICB9LFxuICAgICAgICBoaWdobGlnaHRlZFRleHQ6ICgpID0+ICh7XG4gICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IHRoZW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbWUuanMubWFwIiwKICAgICJjb25zdCB0aGVtZSA9IHtcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgbGlzdDogKCkgPT4gKHtcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICB9KSxcbiAgICAgICAgbGlzdEl0ZW06ICgpID0+ICh7XG4gICAgICAgICAgICBnYXA6IDEsXG4gICAgICAgIH0pLFxuICAgICAgICBtYXJrZXI6ICgpID0+ICh7XG4gICAgICAgICAgICBkaW1Db2xvcjogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbnRlbnQ6ICgpID0+ICh7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgfSksXG4gICAgfSxcbn07XG5leHBvcnQgZGVmYXVsdCB0aGVtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW1lLmpzLm1hcCIsCiAgICAiaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG5jb25zdCB0aGVtZSA9IHtcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgY29udGFpbmVyOiAoKSA9PiAoe1xuICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbXBsZXRlZDogKCkgPT4gKHtcbiAgICAgICAgICAgIGNvbG9yOiAnbWFnZW50YScsXG4gICAgICAgIH0pLFxuICAgICAgICByZW1haW5pbmc6ICgpID0+ICh7XG4gICAgICAgICAgICBkaW1Db2xvcjogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgfSxcbiAgICBjb25maWc6ICgpID0+ICh7XG4gICAgICAgIC8vIENoYXJhY3RlciBmb3IgcmVuZGVyaW5nIGEgY29tcGxldGVkIGJhclxuICAgICAgICBjb21wbGV0ZWRDaGFyYWN0ZXI6IGZpZ3VyZXMuc3F1YXJlLFxuICAgICAgICAvLyBDaGFyYWN0ZXIgZm9yIHJlbmRlcmluZyBhIHJlbWFpbmluZyBiYXJcbiAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVyOiBmaWd1cmVzLnNxdWFyZUxpZ2h0U2hhZGUsXG4gICAgfSksXG59O1xuZXhwb3J0IGRlZmF1bHQgdGhlbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVtZS5qcy5tYXAiLAogICAgImNvbnN0IHRoZW1lID0ge1xuICAgIHN0eWxlczoge1xuICAgICAgICBjb250YWluZXI6ICgpID0+ICh7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbjogKHsgaXNGb2N1c2VkIH0pID0+ICh7XG4gICAgICAgICAgICBnYXA6IDEsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogaXNGb2N1c2VkID8gMCA6IDIsXG4gICAgICAgIH0pLFxuICAgICAgICBzZWxlY3RlZEluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgICAgICAgIGNvbG9yOiAnZ3JlZW4nLFxuICAgICAgICB9KSxcbiAgICAgICAgZm9jdXNJbmRpY2F0b3I6ICgpID0+ICh7XG4gICAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICB9KSxcbiAgICAgICAgbGFiZWwoeyBpc0ZvY3VzZWQsIGlzU2VsZWN0ZWQgfSkge1xuICAgICAgICAgICAgbGV0IGNvbG9yO1xuICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9ICdncmVlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSAnYmx1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBjb2xvciB9O1xuICAgICAgICB9LFxuICAgICAgICBoaWdobGlnaHRlZFRleHQ6ICgpID0+ICh7XG4gICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IHRoZW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbWUuanMubWFwIiwKICAgICJjb25zdCB0aGVtZSA9IHtcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgY29udGFpbmVyOiAoKSA9PiAoe1xuICAgICAgICAgICAgZ2FwOiAxLFxuICAgICAgICB9KSxcbiAgICAgICAgZnJhbWU6ICgpID0+ICh7XG4gICAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICB9KSxcbiAgICAgICAgbGFiZWw6ICgpID0+ICh7fSksXG4gICAgfSxcbn07XG5leHBvcnQgZGVmYXVsdCB0aGVtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW1lLmpzLm1hcCIsCiAgICAiaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG5jb25zdCBjb2xvckJ5VmFyaWFudCA9IHtcbiAgICBzdWNjZXNzOiAnZ3JlZW4nLFxuICAgIGVycm9yOiAncmVkJyxcbiAgICB3YXJuaW5nOiAneWVsbG93JyxcbiAgICBpbmZvOiAnYmx1ZScsXG59O1xuY29uc3QgaWNvbkJ5VmFyaWFudCA9IHtcbiAgICBzdWNjZXNzOiBmaWd1cmVzLnRpY2ssXG4gICAgZXJyb3I6IGZpZ3VyZXMuY3Jvc3MsXG4gICAgd2FybmluZzogZmlndXJlcy53YXJuaW5nLFxuICAgIGluZm86IGZpZ3VyZXMuaW5mbyxcbn07XG5jb25zdCB0aGVtZSA9IHtcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgY29udGFpbmVyOiAoKSA9PiAoe1xuICAgICAgICAgICAgZ2FwOiAxLFxuICAgICAgICB9KSxcbiAgICAgICAgaWNvbkNvbnRhaW5lcjogKCkgPT4gKHtcbiAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIH0pLFxuICAgICAgICBpY29uOiAoeyB2YXJpYW50IH0pID0+ICh7XG4gICAgICAgICAgICBjb2xvcjogY29sb3JCeVZhcmlhbnRbdmFyaWFudF0sXG4gICAgICAgIH0pLFxuICAgICAgICBtZXNzYWdlOiAoKSA9PiAoe30pLFxuICAgIH0sXG4gICAgY29uZmlnOiAoeyB2YXJpYW50IH0pID0+ICh7XG4gICAgICAgIGljb246IGljb25CeVZhcmlhbnRbdmFyaWFudF0sXG4gICAgfSksXG59O1xuZXhwb3J0IGRlZmF1bHQgdGhlbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVtZS5qcy5tYXAiLAogICAgImltcG9ydCBmaWd1cmVzIGZyb20gJ2ZpZ3VyZXMnO1xuY29uc3QgdGhlbWUgPSB7XG4gICAgc3R5bGVzOiB7XG4gICAgICAgIGxpc3Q6ICgpID0+ICh7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgfSksXG4gICAgICAgIGxpc3RJdGVtOiAoKSA9PiAoe1xuICAgICAgICAgICAgZ2FwOiAxLFxuICAgICAgICB9KSxcbiAgICAgICAgbWFya2VyOiAoKSA9PiAoe1xuICAgICAgICAgICAgZGltQ29sb3I6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICBjb250ZW50OiAoKSA9PiAoe1xuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgIH0pLFxuICAgIH0sXG4gICAgY29uZmlnOiAoKSA9PiAoe1xuICAgICAgICBtYXJrZXI6IGZpZ3VyZXMubGluZSxcbiAgICB9KSxcbn07XG5leHBvcnQgZGVmYXVsdCB0aGVtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW1lLmpzLm1hcCIsCiAgICAiY29uc3QgdGhlbWUgPSB7XG4gICAgc3R5bGVzOiB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiAoe30pLFxuICAgIH0sXG59O1xuZXhwb3J0IGRlZmF1bHQgdGhlbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVtZS5qcy5tYXAiLAogICAgImNvbnN0IHRoZW1lID0ge1xuICAgIHN0eWxlczoge1xuICAgICAgICB2YWx1ZTogKCkgPT4gKHt9KSxcbiAgICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IHRoZW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbWUuanMubWFwIiwKICAgICJjb25zdCB0aGVtZSA9IHtcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgdmFsdWU6ICgpID0+ICh7fSksXG4gICAgfSxcbn07XG5leHBvcnQgZGVmYXVsdCB0aGVtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW1lLmpzLm1hcCIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1JbnB1dCh7IGlzRGlzYWJsZWQgPSBmYWxzZSwgZGVmYXVsdENob2ljZSA9ICdjb25maXJtJywgc3VibWl0T25FbnRlciA9IHRydWUsIG9uQ29uZmlybSwgb25DYW5jZWwsIH0pIHtcbiAgICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBvbkNvbmZpcm0oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICAgICAgICBvbkNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkucmV0dXJuICYmIHN1Ym1pdE9uRW50ZXIpIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Q2hvaWNlID09PSAnY29uZmlybScpIHtcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9uQ2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7IGlzQWN0aXZlOiAhaXNEaXNhYmxlZCB9KTtcbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdXNlQ29tcG9uZW50VGhlbWUoJ0NvbmZpcm1JbnB1dCcpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5pbnB1dCh7IGlzRm9jdXNlZDogIWlzRGlzYWJsZWQgfSkgfSwgZGVmYXVsdENob2ljZSA9PT0gJ2NvbmZpcm0nID8gJ1kvbicgOiAneS9OJykpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlybS1pbnB1dC5qcy5tYXAiLAogICAgImltcG9ydCB7IEJveCB9IGZyb20gJ2luayc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgVW5vcmRlcmVkTGlzdEl0ZW0gfSBmcm9tICcuL3Vub3JkZXJlZC1saXN0LWl0ZW0uanMnO1xuaW1wb3J0IHsgVW5vcmRlcmVkTGlzdENvbnRleHQgfSBmcm9tICcuL3Vub3JkZXJlZC1saXN0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgVW5vcmRlcmVkTGlzdEl0ZW1Db250ZXh0IH0gZnJvbSAnLi91bm9yZGVyZWQtbGlzdC1pdGVtLWNvbnRleHQuanMnO1xuaW1wb3J0IHsgZGVmYXVsdE1hcmtlciB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBVbm9yZGVyZWRMaXN0KHsgY2hpbGRyZW4gfSkge1xuICAgIGNvbnN0IHsgZGVwdGggfSA9IHVzZUNvbnRleHQoVW5vcmRlcmVkTGlzdENvbnRleHQpO1xuICAgIGNvbnN0IHsgc3R5bGVzLCBjb25maWcgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdVbm9yZGVyZWRMaXN0Jyk7XG4gICAgY29uc3QgbGlzdENvbnRleHQgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIGRlcHRoOiBkZXB0aCArIDEsXG4gICAgfSksIFtkZXB0aF0pO1xuICAgIGNvbnN0IGxpc3RJdGVtQ29udGV4dCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IG1hcmtlciB9ID0gY29uZmlnKCk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFya2VyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWFya2VyIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWFya2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcltkZXB0aF0gPz8gbWFya2VyLmF0KC0xKSA/PyBkZWZhdWx0TWFya2VyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFya2VyOiBkZWZhdWx0TWFya2VyLFxuICAgICAgICB9O1xuICAgIH0sIFtjb25maWcsIGRlcHRoXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFVub3JkZXJlZExpc3RDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBsaXN0Q29udGV4dCB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFVub3JkZXJlZExpc3RJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogbGlzdEl0ZW1Db250ZXh0IH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyAuLi5zdHlsZXMubGlzdCgpIH0sIGNoaWxkcmVuKSkpKTtcbn1cblVub3JkZXJlZExpc3QuSXRlbSA9IFVub3JkZXJlZExpc3RJdGVtO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5vcmRlcmVkLWxpc3QuanMubWFwIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb21wb25lbnRUaGVtZSB9IGZyb20gJy4uLy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFVub3JkZXJlZExpc3RJdGVtQ29udGV4dCB9IGZyb20gJy4vdW5vcmRlcmVkLWxpc3QtaXRlbS1jb250ZXh0LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBVbm9yZGVyZWRMaXN0SXRlbSh7IGNoaWxkcmVuIH0pIHtcbiAgICBjb25zdCB7IG1hcmtlciB9ID0gdXNlQ29udGV4dChVbm9yZGVyZWRMaXN0SXRlbUNvbnRleHQpO1xuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB1c2VDb21wb25lbnRUaGVtZSgnVW5vcmRlcmVkTGlzdCcpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmxpc3RJdGVtKCkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5tYXJrZXIoKSB9LCBtYXJrZXIpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyAuLi5zdHlsZXMuY29udGVudCgpIH0sIGNoaWxkcmVuKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5vcmRlcmVkLWxpc3QtaXRlbS5qcy5tYXAiLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkZWZhdWx0TWFya2VyIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFVub3JkZXJlZExpc3RJdGVtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIG1hcmtlcjogZGVmYXVsdE1hcmtlcixcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5vcmRlcmVkLWxpc3QtaXRlbS1jb250ZXh0LmpzLm1hcCIsCiAgICAiaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcmtlciA9IGZpZ3VyZXMubGluZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgVW5vcmRlcmVkTGlzdENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICBkZXB0aDogMCxcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5vcmRlcmVkLWxpc3QtY29udGV4dC5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdE9wdGlvbiB9IGZyb20gJy4vbXVsdGktc2VsZWN0LW9wdGlvbi5qcyc7XG5pbXBvcnQgeyB1c2VNdWx0aVNlbGVjdFN0YXRlIH0gZnJvbSAnLi91c2UtbXVsdGktc2VsZWN0LXN0YXRlLmpzJztcbmltcG9ydCB7IHVzZU11bHRpU2VsZWN0IH0gZnJvbSAnLi91c2UtbXVsdGktc2VsZWN0LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBNdWx0aVNlbGVjdCh7IGlzRGlzYWJsZWQgPSBmYWxzZSwgdmlzaWJsZU9wdGlvbkNvdW50ID0gNSwgaGlnaGxpZ2h0VGV4dCwgb3B0aW9ucywgZGVmYXVsdFZhbHVlLCBvbkNoYW5nZSwgb25TdWJtaXQsIH0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZU11bHRpU2VsZWN0U3RhdGUoe1xuICAgICAgICB2aXNpYmxlT3B0aW9uQ291bnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgIG9uU3VibWl0LFxuICAgIH0pO1xuICAgIHVzZU11bHRpU2VsZWN0KHsgaXNEaXNhYmxlZCwgc3RhdGUgfSk7XG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdNdWx0aVNlbGVjdCcpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmNvbnRhaW5lcigpIH0sIHN0YXRlLnZpc2libGVPcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgbGV0IGxhYmVsID0gb3B0aW9uLmxhYmVsO1xuICAgICAgICBpZiAoaGlnaGxpZ2h0VGV4dCAmJiBvcHRpb24ubGFiZWwuaW5jbHVkZXMoaGlnaGxpZ2h0VGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0aW9uLmxhYmVsLmluZGV4T2YoaGlnaGxpZ2h0VGV4dCk7XG4gICAgICAgICAgICBsYWJlbCA9IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgIG9wdGlvbi5sYWJlbC5zbGljZSgwLCBpbmRleCksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5oaWdobGlnaHRlZFRleHQoKSB9LCBoaWdobGlnaHRUZXh0KSxcbiAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWwuc2xpY2UoaW5kZXggKyBoaWdobGlnaHRUZXh0Lmxlbmd0aCkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTXVsdGlTZWxlY3RPcHRpb24sIHsga2V5OiBvcHRpb24udmFsdWUsIGlzRm9jdXNlZDogIWlzRGlzYWJsZWQgJiYgc3RhdGUuZm9jdXNlZFZhbHVlID09PSBvcHRpb24udmFsdWUsIGlzU2VsZWN0ZWQ6IHN0YXRlLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkgfSwgbGFiZWwpKTtcbiAgICB9KSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGktc2VsZWN0LmpzLm1hcCIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIE11bHRpU2VsZWN0T3B0aW9uKHsgaXNGb2N1c2VkLCBpc1NlbGVjdGVkLCBjaGlsZHJlbiwgfSkge1xuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB1c2VDb21wb25lbnRUaGVtZSgnTXVsdGlTZWxlY3QnKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7IC4uLnN0eWxlcy5vcHRpb24oeyBpc0ZvY3VzZWQgfSkgfSxcbiAgICAgICAgaXNGb2N1c2VkICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyAuLi5zdHlsZXMuZm9jdXNJbmRpY2F0b3IoKSB9LCBmaWd1cmVzLnBvaW50ZXIpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgLi4uc3R5bGVzLmxhYmVsKHsgaXNGb2N1c2VkLCBpc1NlbGVjdGVkIH0pIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgaXNTZWxlY3RlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5zZWxlY3RlZEluZGljYXRvcigpIH0sIGZpZ3VyZXMudGljaykpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aS1zZWxlY3Qtb3B0aW9uLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlciwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QsIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IE9wdGlvbk1hcCBmcm9tICcuLi8uLi9saWIvb3B0aW9uLW1hcC5qcyc7XG5jb25zdCByZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2ZvY3VzLW5leHQtb3B0aW9uJzoge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5mb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc3RhdGUub3B0aW9uTWFwLmdldChzdGF0ZS5mb2N1c2VkVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gaXRlbS5uZXh0O1xuICAgICAgICAgICAgaWYgKCFuZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZHNUb1Njcm9sbCA9IG5leHQuaW5kZXggPj0gc3RhdGUudmlzaWJsZVRvSW5kZXg7XG4gICAgICAgICAgICBpZiAoIW5lZWRzVG9TY3JvbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZFZhbHVlOiBuZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXh0VmlzaWJsZVRvSW5kZXggPSBNYXRoLm1pbihzdGF0ZS5vcHRpb25NYXAuc2l6ZSwgc3RhdGUudmlzaWJsZVRvSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWaXNpYmxlRnJvbUluZGV4ID0gbmV4dFZpc2libGVUb0luZGV4IC0gc3RhdGUudmlzaWJsZU9wdGlvbkNvdW50O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBmb2N1c2VkVmFsdWU6IG5leHQudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlzaWJsZUZyb21JbmRleDogbmV4dFZpc2libGVGcm9tSW5kZXgsXG4gICAgICAgICAgICAgICAgdmlzaWJsZVRvSW5kZXg6IG5leHRWaXNpYmxlVG9JbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZm9jdXMtcHJldmlvdXMtb3B0aW9uJzoge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5mb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc3RhdGUub3B0aW9uTWFwLmdldChzdGF0ZS5mb2N1c2VkVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGl0ZW0ucHJldmlvdXM7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZHNUb1Njcm9sbCA9IHByZXZpb3VzLmluZGV4IDw9IHN0YXRlLnZpc2libGVGcm9tSW5kZXg7XG4gICAgICAgICAgICBpZiAoIW5lZWRzVG9TY3JvbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZFZhbHVlOiBwcmV2aW91cy52YWx1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFZpc2libGVGcm9tSW5kZXggPSBNYXRoLm1heCgwLCBzdGF0ZS52aXNpYmxlRnJvbUluZGV4IC0gMSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0VmlzaWJsZVRvSW5kZXggPSBuZXh0VmlzaWJsZUZyb21JbmRleCArIHN0YXRlLnZpc2libGVPcHRpb25Db3VudDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgZm9jdXNlZFZhbHVlOiBwcmV2aW91cy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlRnJvbUluZGV4OiBuZXh0VmlzaWJsZUZyb21JbmRleCxcbiAgICAgICAgICAgICAgICB2aXNpYmxlVG9JbmRleDogbmV4dFZpc2libGVUb0luZGV4LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd0b2dnbGUtZm9jdXNlZC1vcHRpb24nOiB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLmZvY3VzZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS52YWx1ZS5pbmNsdWRlcyhzdGF0ZS5mb2N1c2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgU2V0KHN0YXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5kZWxldGUoc3RhdGUuZm9jdXNlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbLi4ubmV3VmFsdWVdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBbLi4uc3RhdGUudmFsdWUsIHN0YXRlLmZvY3VzZWRWYWx1ZV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3Jlc2V0Jzoge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5zdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBjcmVhdGVEZWZhdWx0U3RhdGUgPSAoeyB2aXNpYmxlT3B0aW9uQ291bnQ6IGN1c3RvbVZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zLCB9KSA9PiB7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbkNvdW50ID0gdHlwZW9mIGN1c3RvbVZpc2libGVPcHRpb25Db3VudCA9PT0gJ251bWJlcidcbiAgICAgICAgPyBNYXRoLm1pbihjdXN0b21WaXNpYmxlT3B0aW9uQ291bnQsIG9wdGlvbnMubGVuZ3RoKVxuICAgICAgICA6IG9wdGlvbnMubGVuZ3RoO1xuICAgIGNvbnN0IG9wdGlvbk1hcCA9IG5ldyBPcHRpb25NYXAob3B0aW9ucyk7XG4gICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgPz8gW107XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uTWFwLFxuICAgICAgICB2aXNpYmxlT3B0aW9uQ291bnQsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogb3B0aW9uTWFwLmZpcnN0Py52YWx1ZSxcbiAgICAgICAgdmlzaWJsZUZyb21JbmRleDogMCxcbiAgICAgICAgdmlzaWJsZVRvSW5kZXg6IHZpc2libGVPcHRpb25Db3VudCxcbiAgICAgICAgcHJldmlvdXNWYWx1ZTogdmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IHVzZU11bHRpU2VsZWN0U3RhdGUgPSAoeyB2aXNpYmxlT3B0aW9uQ291bnQgPSA1LCBvcHRpb25zLCBkZWZhdWx0VmFsdWUsIG9uQ2hhbmdlLCBvblN1Ym1pdCwgfSkgPT4ge1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihyZWR1Y2VyLCB7IHZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zIH0sIGNyZWF0ZURlZmF1bHRTdGF0ZSk7XG4gICAgY29uc3QgW2xhc3RPcHRpb25zLCBzZXRMYXN0T3B0aW9uc10gPSB1c2VTdGF0ZShvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucyAhPT0gbGFzdE9wdGlvbnMgJiYgIWlzRGVlcFN0cmljdEVxdWFsKG9wdGlvbnMsIGxhc3RPcHRpb25zKSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncmVzZXQnLFxuICAgICAgICAgICAgc3RhdGU6IGNyZWF0ZURlZmF1bHRTdGF0ZSh7IHZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0TGFzdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IGZvY3VzTmV4dE9wdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2ZvY3VzLW5leHQtb3B0aW9uJyxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGZvY3VzUHJldmlvdXNPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdmb2N1cy1wcmV2aW91cy1vcHRpb24nLFxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgdG9nZ2xlRm9jdXNlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZS1mb2N1c2VkLW9wdGlvbicsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBzdWJtaXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIG9uU3VibWl0Py4oc3RhdGUudmFsdWUpO1xuICAgIH0sIFtzdGF0ZS52YWx1ZSwgb25TdWJtaXRdKTtcbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gb3B0aW9uc1xuICAgICAgICAgICAgLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICB9KSlcbiAgICAgICAgICAgIC5zbGljZShzdGF0ZS52aXNpYmxlRnJvbUluZGV4LCBzdGF0ZS52aXNpYmxlVG9JbmRleCk7XG4gICAgfSwgW29wdGlvbnMsIHN0YXRlLnZpc2libGVGcm9tSW5kZXgsIHN0YXRlLnZpc2libGVUb0luZGV4XSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc0RlZXBTdHJpY3RFcXVhbChzdGF0ZS5wcmV2aW91c1ZhbHVlLCBzdGF0ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlPy4oc3RhdGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgfSwgW3N0YXRlLnByZXZpb3VzVmFsdWUsIHN0YXRlLnZhbHVlLCBvcHRpb25zLCBvbkNoYW5nZV0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzZWRWYWx1ZTogc3RhdGUuZm9jdXNlZFZhbHVlLFxuICAgICAgICB2aXNpYmxlRnJvbUluZGV4OiBzdGF0ZS52aXNpYmxlRnJvbUluZGV4LFxuICAgICAgICB2aXNpYmxlVG9JbmRleDogc3RhdGUudmlzaWJsZVRvSW5kZXgsXG4gICAgICAgIHZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGZvY3VzTmV4dE9wdGlvbixcbiAgICAgICAgZm9jdXNQcmV2aW91c09wdGlvbixcbiAgICAgICAgdG9nZ2xlRm9jdXNlZE9wdGlvbixcbiAgICAgICAgc3VibWl0LFxuICAgIH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLW11bHRpLXNlbGVjdC1zdGF0ZS5qcy5tYXAiLAogICAgImV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbk1hcCBleHRlbmRzIE1hcCB7XG4gICAgZmlyc3Q7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBsZXQgZmlyc3RJdGVtO1xuICAgICAgICBsZXQgcHJldmlvdXM7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzLFxuICAgICAgICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91cy5uZXh0ID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0SXRlbSB8fD0gaXRlbTtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goW29wdGlvbi52YWx1ZSwgaXRlbV0pO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIHByZXZpb3VzID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIHRoaXMuZmlyc3QgPSBmaXJzdEl0ZW07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3B0aW9uLW1hcC5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCwgbWVhc3VyZUVsZW1lbnQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi90aGVtZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gUHJvZ3Jlc3NCYXIoeyB2YWx1ZSB9KSB7XG4gICAgY29uc3QgW3dpZHRoLCBzZXRXaWR0aF0gPSB1c2VTdGF0ZSgwKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICAgIGNvbnN0IFtyZWYsIHNldFJlZl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBpZiAocmVmKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBtZWFzdXJlRWxlbWVudChyZWYpO1xuICAgICAgICBpZiAoZGltZW5zaW9ucy53aWR0aCAhPT0gd2lkdGgpIHtcbiAgICAgICAgICAgIHNldFdpZHRoKGRpbWVuc2lvbnMud2lkdGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB2YWx1ZSkpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gTWF0aC5yb3VuZCgocHJvZ3Jlc3MgLyAxMDApICogd2lkdGgpO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHdpZHRoIC0gY29tcGxldGU7XG4gICAgY29uc3QgeyBzdHlsZXMsIGNvbmZpZyB9ID0gdXNlQ29tcG9uZW50VGhlbWUoJ1Byb2dyZXNzQmFyJyk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyByZWY6IHNldFJlZiwgLi4uc3R5bGVzLmNvbnRhaW5lcigpIH0sXG4gICAgICAgIGNvbXBsZXRlID4gMCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5jb21wbGV0ZWQoKSB9LCBjb25maWcoKS5jb21wbGV0ZWRDaGFyYWN0ZXIucmVwZWF0KGNvbXBsZXRlKSkpLFxuICAgICAgICByZW1haW5pbmcgPiAwICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgLi4uc3R5bGVzLnJlbWFpbmluZygpIH0sIGNvbmZpZygpLnJlbWFpbmluZ0NoYXJhY3Rlci5yZXBlYXQocmVtYWluaW5nKSkpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9ncmVzcy1iYXIuanMubWFwIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uLmpzJztcbmltcG9ydCB7IHVzZVNlbGVjdFN0YXRlIH0gZnJvbSAnLi91c2Utc2VsZWN0LXN0YXRlLmpzJztcbmltcG9ydCB7IHVzZVNlbGVjdCB9IGZyb20gJy4vdXNlLXNlbGVjdC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0KHsgaXNEaXNhYmxlZCA9IGZhbHNlLCB2aXNpYmxlT3B0aW9uQ291bnQgPSA1LCBoaWdobGlnaHRUZXh0LCBvcHRpb25zLCBkZWZhdWx0VmFsdWUsIG9uQ2hhbmdlLCB9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VTZWxlY3RTdGF0ZSh7XG4gICAgICAgIHZpc2libGVPcHRpb25Db3VudCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBvbkNoYW5nZSxcbiAgICB9KTtcbiAgICB1c2VTZWxlY3QoeyBpc0Rpc2FibGVkLCBzdGF0ZSB9KTtcbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdXNlQ29tcG9uZW50VGhlbWUoJ1NlbGVjdCcpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmNvbnRhaW5lcigpIH0sIHN0YXRlLnZpc2libGVPcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgbGV0IGxhYmVsID0gb3B0aW9uLmxhYmVsO1xuICAgICAgICBpZiAoaGlnaGxpZ2h0VGV4dCAmJiBvcHRpb24ubGFiZWwuaW5jbHVkZXMoaGlnaGxpZ2h0VGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0aW9uLmxhYmVsLmluZGV4T2YoaGlnaGxpZ2h0VGV4dCk7XG4gICAgICAgICAgICBsYWJlbCA9IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgIG9wdGlvbi5sYWJlbC5zbGljZSgwLCBpbmRleCksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5oaWdobGlnaHRlZFRleHQoKSB9LCBoaWdobGlnaHRUZXh0KSxcbiAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWwuc2xpY2UoaW5kZXggKyBoaWdobGlnaHRUZXh0Lmxlbmd0aCkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0T3B0aW9uLCB7IGtleTogb3B0aW9uLnZhbHVlLCBpc0ZvY3VzZWQ6ICFpc0Rpc2FibGVkICYmIHN0YXRlLmZvY3VzZWRWYWx1ZSA9PT0gb3B0aW9uLnZhbHVlLCBpc1NlbGVjdGVkOiBzdGF0ZS52YWx1ZSA9PT0gb3B0aW9uLnZhbHVlIH0sIGxhYmVsKSk7XG4gICAgfSkpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbGVjdC5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG5pbXBvcnQgeyB1c2VDb21wb25lbnRUaGVtZSB9IGZyb20gJy4uLy4uL3RoZW1lLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3RPcHRpb24oeyBpc0ZvY3VzZWQsIGlzU2VsZWN0ZWQsIGNoaWxkcmVuLCB9KSB7XG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdTZWxlY3QnKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7IC4uLnN0eWxlcy5vcHRpb24oeyBpc0ZvY3VzZWQgfSkgfSxcbiAgICAgICAgaXNGb2N1c2VkICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyAuLi5zdHlsZXMuZm9jdXNJbmRpY2F0b3IoKSB9LCBmaWd1cmVzLnBvaW50ZXIpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgLi4uc3R5bGVzLmxhYmVsKHsgaXNGb2N1c2VkLCBpc1NlbGVjdGVkIH0pIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgaXNTZWxlY3RlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5zZWxlY3RlZEluZGljYXRvcigpIH0sIGZpZ3VyZXMudGljaykpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZWxlY3Qtb3B0aW9uLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlciwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QsIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IE9wdGlvbk1hcCBmcm9tICcuLi8uLi9saWIvb3B0aW9uLW1hcC5qcyc7XG5jb25zdCByZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2ZvY3VzLW5leHQtb3B0aW9uJzoge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5mb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc3RhdGUub3B0aW9uTWFwLmdldChzdGF0ZS5mb2N1c2VkVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gaXRlbS5uZXh0O1xuICAgICAgICAgICAgaWYgKCFuZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZHNUb1Njcm9sbCA9IG5leHQuaW5kZXggPj0gc3RhdGUudmlzaWJsZVRvSW5kZXg7XG4gICAgICAgICAgICBpZiAoIW5lZWRzVG9TY3JvbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZFZhbHVlOiBuZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXh0VmlzaWJsZVRvSW5kZXggPSBNYXRoLm1pbihzdGF0ZS5vcHRpb25NYXAuc2l6ZSwgc3RhdGUudmlzaWJsZVRvSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWaXNpYmxlRnJvbUluZGV4ID0gbmV4dFZpc2libGVUb0luZGV4IC0gc3RhdGUudmlzaWJsZU9wdGlvbkNvdW50O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBmb2N1c2VkVmFsdWU6IG5leHQudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlzaWJsZUZyb21JbmRleDogbmV4dFZpc2libGVGcm9tSW5kZXgsXG4gICAgICAgICAgICAgICAgdmlzaWJsZVRvSW5kZXg6IG5leHRWaXNpYmxlVG9JbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZm9jdXMtcHJldmlvdXMtb3B0aW9uJzoge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5mb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc3RhdGUub3B0aW9uTWFwLmdldChzdGF0ZS5mb2N1c2VkVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGl0ZW0ucHJldmlvdXM7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZHNUb1Njcm9sbCA9IHByZXZpb3VzLmluZGV4IDw9IHN0YXRlLnZpc2libGVGcm9tSW5kZXg7XG4gICAgICAgICAgICBpZiAoIW5lZWRzVG9TY3JvbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZFZhbHVlOiBwcmV2aW91cy52YWx1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFZpc2libGVGcm9tSW5kZXggPSBNYXRoLm1heCgwLCBzdGF0ZS52aXNpYmxlRnJvbUluZGV4IC0gMSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0VmlzaWJsZVRvSW5kZXggPSBuZXh0VmlzaWJsZUZyb21JbmRleCArIHN0YXRlLnZpc2libGVPcHRpb25Db3VudDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgZm9jdXNlZFZhbHVlOiBwcmV2aW91cy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlRnJvbUluZGV4OiBuZXh0VmlzaWJsZUZyb21JbmRleCxcbiAgICAgICAgICAgICAgICB2aXNpYmxlVG9JbmRleDogbmV4dFZpc2libGVUb0luZGV4LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdzZWxlY3QtZm9jdXNlZC1vcHRpb24nOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3Jlc2V0Jzoge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5zdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBjcmVhdGVEZWZhdWx0U3RhdGUgPSAoeyB2aXNpYmxlT3B0aW9uQ291bnQ6IGN1c3RvbVZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zLCB9KSA9PiB7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbkNvdW50ID0gdHlwZW9mIGN1c3RvbVZpc2libGVPcHRpb25Db3VudCA9PT0gJ251bWJlcidcbiAgICAgICAgPyBNYXRoLm1pbihjdXN0b21WaXNpYmxlT3B0aW9uQ291bnQsIG9wdGlvbnMubGVuZ3RoKVxuICAgICAgICA6IG9wdGlvbnMubGVuZ3RoO1xuICAgIGNvbnN0IG9wdGlvbk1hcCA9IG5ldyBPcHRpb25NYXAob3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uTWFwLFxuICAgICAgICB2aXNpYmxlT3B0aW9uQ291bnQsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogb3B0aW9uTWFwLmZpcnN0Py52YWx1ZSxcbiAgICAgICAgdmlzaWJsZUZyb21JbmRleDogMCxcbiAgICAgICAgdmlzaWJsZVRvSW5kZXg6IHZpc2libGVPcHRpb25Db3VudCxcbiAgICAgICAgcHJldmlvdXNWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICB2YWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IHVzZVNlbGVjdFN0YXRlID0gKHsgdmlzaWJsZU9wdGlvbkNvdW50ID0gNSwgb3B0aW9ucywgZGVmYXVsdFZhbHVlLCBvbkNoYW5nZSwgfSkgPT4ge1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihyZWR1Y2VyLCB7IHZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zIH0sIGNyZWF0ZURlZmF1bHRTdGF0ZSk7XG4gICAgY29uc3QgW2xhc3RPcHRpb25zLCBzZXRMYXN0T3B0aW9uc10gPSB1c2VTdGF0ZShvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucyAhPT0gbGFzdE9wdGlvbnMgJiYgIWlzRGVlcFN0cmljdEVxdWFsKG9wdGlvbnMsIGxhc3RPcHRpb25zKSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncmVzZXQnLFxuICAgICAgICAgICAgc3RhdGU6IGNyZWF0ZURlZmF1bHRTdGF0ZSh7IHZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0TGFzdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IGZvY3VzTmV4dE9wdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2ZvY3VzLW5leHQtb3B0aW9uJyxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGZvY3VzUHJldmlvdXNPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdmb2N1cy1wcmV2aW91cy1vcHRpb24nLFxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3Qgc2VsZWN0Rm9jdXNlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdC1mb2N1c2VkLW9wdGlvbicsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gb3B0aW9uc1xuICAgICAgICAgICAgLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICB9KSlcbiAgICAgICAgICAgIC5zbGljZShzdGF0ZS52aXNpYmxlRnJvbUluZGV4LCBzdGF0ZS52aXNpYmxlVG9JbmRleCk7XG4gICAgfSwgW29wdGlvbnMsIHN0YXRlLnZpc2libGVGcm9tSW5kZXgsIHN0YXRlLnZpc2libGVUb0luZGV4XSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLnZhbHVlICYmIHN0YXRlLnByZXZpb3VzVmFsdWUgIT09IHN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgICBvbkNoYW5nZT8uKHN0YXRlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGF0ZS5wcmV2aW91c1ZhbHVlLCBzdGF0ZS52YWx1ZSwgb3B0aW9ucywgb25DaGFuZ2VdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmb2N1c2VkVmFsdWU6IHN0YXRlLmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgdmlzaWJsZUZyb21JbmRleDogc3RhdGUudmlzaWJsZUZyb21JbmRleCxcbiAgICAgICAgdmlzaWJsZVRvSW5kZXg6IHN0YXRlLnZpc2libGVUb0luZGV4LFxuICAgICAgICB2YWx1ZTogc3RhdGUudmFsdWUsXG4gICAgICAgIHZpc2libGVPcHRpb25zLFxuICAgICAgICBmb2N1c05leHRPcHRpb24sXG4gICAgICAgIGZvY3VzUHJldmlvdXNPcHRpb24sXG4gICAgICAgIHNlbGVjdEZvY3VzZWRPcHRpb24sXG4gICAgfTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2Utc2VsZWN0LXN0YXRlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlSW5wdXQgfSBmcm9tICdpbmsnO1xuZXhwb3J0IGNvbnN0IHVzZVNlbGVjdCA9ICh7IGlzRGlzYWJsZWQgPSBmYWxzZSwgc3RhdGUgfSkgPT4ge1xuICAgIHVzZUlucHV0KChfaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICAgICAgc3RhdGUuZm9jdXNOZXh0T3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICBzdGF0ZS5mb2N1c1ByZXZpb3VzT3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIHN0YXRlLnNlbGVjdEZvY3VzZWRPcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH0sIHsgaXNBY3RpdmU6ICFpc0Rpc2FibGVkIH0pO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1zZWxlY3QuanMubWFwIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgdXNlU3Bpbm5lciB9IGZyb20gJy4vdXNlLXNwaW5uZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIFNwaW5uZXIoeyBsYWJlbCwgdHlwZSB9KSB7XG4gICAgY29uc3QgeyBmcmFtZSB9ID0gdXNlU3Bpbm5lcih7IHR5cGUgfSk7XG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdTcGlubmVyJyk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyAuLi5zdHlsZXMuY29udGFpbmVyKCkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5mcmFtZSgpIH0sIGZyYW1lKSxcbiAgICAgICAgbGFiZWwgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5sYWJlbCgpIH0sIGxhYmVsKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXAiLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3Bpbm5lcnMgZnJvbSAnY2xpLXNwaW5uZXJzJztcbmV4cG9ydCBmdW5jdGlvbiB1c2VTcGlubmVyKHsgdHlwZSA9ICdkb3RzJyB9KSB7XG4gICAgY29uc3QgW2ZyYW1lLCBzZXRGcmFtZV0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBzcGlubmVyID0gc3Bpbm5lcnNbdHlwZV07XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRGcmFtZShwcmV2aW91c0ZyYW1lID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RGcmFtZSA9IHByZXZpb3VzRnJhbWUgPT09IHNwaW5uZXIuZnJhbWVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTGFzdEZyYW1lID8gMCA6IHByZXZpb3VzRnJhbWUgKyAxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHNwaW5uZXIuaW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgIH07XG4gICAgfSwgW3NwaW5uZXJdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcmFtZTogc3Bpbm5lci5mcmFtZXNbZnJhbWVdID8/ICcnLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2Utc3Bpbm5lci5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgdXNlVGV4dElucHV0U3RhdGUgfSBmcm9tICcuL3VzZS10ZXh0LWlucHV0LXN0YXRlLmpzJztcbmltcG9ydCB7IHVzZVRleHRJbnB1dCB9IGZyb20gJy4vdXNlLXRleHQtaW5wdXQuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIFRleHRJbnB1dCh7IGlzRGlzYWJsZWQgPSBmYWxzZSwgZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9ICcnLCBzdWdnZXN0aW9ucywgb25DaGFuZ2UsIG9uU3VibWl0LCB9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VUZXh0SW5wdXRTdGF0ZSh7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBvblN1Ym1pdCxcbiAgICB9KTtcbiAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHVzZVRleHRJbnB1dCh7XG4gICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBzdGF0ZSxcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdXNlQ29tcG9uZW50VGhlbWUoJ1RleHRJbnB1dCcpO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHsgLi4uc3R5bGVzLnZhbHVlKCkgfSwgaW5wdXRWYWx1ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10ZXh0LWlucHV0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlUmVkdWNlciwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbW92ZS1jdXJzb3ItbGVmdCc6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0OiBNYXRoLm1heCgwLCBzdGF0ZS5jdXJzb3JPZmZzZXQgLSAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbW92ZS1jdXJzb3ItcmlnaHQnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGN1cnNvck9mZnNldDogTWF0aC5taW4oc3RhdGUudmFsdWUubGVuZ3RoLCBzdGF0ZS5jdXJzb3JPZmZzZXQgKyAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaW5zZXJ0Jzoge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhdGUudmFsdWUuc2xpY2UoMCwgc3RhdGUuY3Vyc29yT2Zmc2V0KSArXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi50ZXh0ICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFsdWUuc2xpY2Uoc3RhdGUuY3Vyc29yT2Zmc2V0KSxcbiAgICAgICAgICAgICAgICBjdXJzb3JPZmZzZXQ6IHN0YXRlLmN1cnNvck9mZnNldCArIGFjdGlvbi50ZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZGVsZXRlJzoge1xuICAgICAgICAgICAgY29uc3QgbmV3Q3Vyc29yT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc3RhdGUuY3Vyc29yT2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS52YWx1ZS5zbGljZSgwLCBuZXdDdXJzb3JPZmZzZXQpICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFsdWUuc2xpY2UobmV3Q3Vyc29yT2Zmc2V0ICsgMSksXG4gICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0OiBuZXdDdXJzb3JPZmZzZXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB1c2VUZXh0SW5wdXRTdGF0ZSA9ICh7IGRlZmF1bHRWYWx1ZSA9ICcnLCBzdWdnZXN0aW9ucywgb25DaGFuZ2UsIG9uU3VibWl0LCB9KSA9PiB7XG4gICAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICB2YWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICBjdXJzb3JPZmZzZXQ6IGRlZmF1bHRWYWx1ZS5sZW5ndGgsXG4gICAgfSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zXG4gICAgICAgICAgICA/LmZpbmQoc3VnZ2VzdGlvbiA9PiBzdWdnZXN0aW9uLnN0YXJ0c1dpdGgoc3RhdGUudmFsdWUpKVxuICAgICAgICAgICAgPy5yZXBsYWNlKHN0YXRlLnZhbHVlLCAnJyk7XG4gICAgfSwgW3N0YXRlLnZhbHVlLCBzdWdnZXN0aW9uc10pO1xuICAgIGNvbnN0IG1vdmVDdXJzb3JMZWZ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnbW92ZS1jdXJzb3ItbGVmdCcsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBtb3ZlQ3Vyc29yUmlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdtb3ZlLWN1cnNvci1yaWdodCcsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBpbnNlcnQgPSB1c2VDYWxsYmFjaygodGV4dCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnaW5zZXJ0JyxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBkZWxldGVDaGFyYWN0ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3Qgc3VibWl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgaW5zZXJ0KHN1Z2dlc3Rpb24pO1xuICAgICAgICAgICAgb25TdWJtaXQ/LihzdGF0ZS52YWx1ZSArIHN1Z2dlc3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG9uU3VibWl0Py4oc3RhdGUudmFsdWUpO1xuICAgIH0sIFtzdGF0ZS52YWx1ZSwgc3VnZ2VzdGlvbiwgaW5zZXJ0LCBvblN1Ym1pdF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPT0gc3RhdGUucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgb25DaGFuZ2U/LihzdGF0ZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RhdGUucHJldmlvdXNWYWx1ZSwgc3RhdGUudmFsdWUsIG9uQ2hhbmdlXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN1Z2dlc3Rpb24sXG4gICAgICAgIG1vdmVDdXJzb3JMZWZ0LFxuICAgICAgICBtb3ZlQ3Vyc29yUmlnaHQsXG4gICAgICAgIGluc2VydCxcbiAgICAgICAgZGVsZXRlOiBkZWxldGVDaGFyYWN0ZXIsXG4gICAgICAgIHN1Ym1pdCxcbiAgICB9O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS10ZXh0LWlucHV0LXN0YXRlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlucHV0IH0gZnJvbSAnaW5rJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5jb25zdCBjdXJzb3IgPSBjaGFsay5pbnZlcnNlKCcgJyk7XG5leHBvcnQgY29uc3QgdXNlVGV4dElucHV0ID0gKHsgaXNEaXNhYmxlZCA9IGZhbHNlLCBzdGF0ZSwgcGxhY2Vob2xkZXIgPSAnJywgfSkgPT4ge1xuICAgIGNvbnN0IHJlbmRlcmVkUGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlciA/IGNoYWxrLmRpbShwbGFjZWhvbGRlcikgOiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIgJiYgcGxhY2Vob2xkZXIubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBjaGFsay5pbnZlcnNlKHBsYWNlaG9sZGVyWzBdKSArIGNoYWxrLmRpbShwbGFjZWhvbGRlci5zbGljZSgxKSlcbiAgICAgICAgICAgIDogY3Vyc29yO1xuICAgIH0sIFtpc0Rpc2FibGVkLCBwbGFjZWhvbGRlcl0pO1xuICAgIGNvbnN0IHJlbmRlcmVkVmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0gc3RhdGUudmFsdWUubGVuZ3RoID4gMCA/ICcnIDogY3Vyc29yO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2Ygc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCA9PT0gc3RhdGUuY3Vyc29yT2Zmc2V0ID8gY2hhbGsuaW52ZXJzZShjaGFyKSA6IGNoYXI7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5zdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuY3Vyc29yT2Zmc2V0ID09PSBzdGF0ZS52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgICAgICAgICAgY2hhbGsuaW52ZXJzZShzdGF0ZS5zdWdnZXN0aW9uWzBdKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFsay5kaW0oc3RhdGUuc3VnZ2VzdGlvbi5zbGljZSgxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2hhbGsuZGltKHN0YXRlLnN1Z2dlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUudmFsdWUubGVuZ3RoID4gMCAmJiBzdGF0ZS5jdXJzb3JPZmZzZXQgPT09IHN0YXRlLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGN1cnNvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtpc0Rpc2FibGVkLCBzdGF0ZS52YWx1ZSwgc3RhdGUuY3Vyc29yT2Zmc2V0LCBzdGF0ZS5zdWdnZXN0aW9uXSk7XG4gICAgdXNlSW5wdXQoKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS51cEFycm93IHx8XG4gICAgICAgICAgICBrZXkuZG93bkFycm93IHx8XG4gICAgICAgICAgICAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdjJykgfHxcbiAgICAgICAgICAgIGtleS50YWIgfHxcbiAgICAgICAgICAgIChrZXkuc2hpZnQgJiYga2V5LnRhYikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgc3RhdGUuc3VibWl0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5sZWZ0QXJyb3cpIHtcbiAgICAgICAgICAgIHN0YXRlLm1vdmVDdXJzb3JMZWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5LnJpZ2h0QXJyb3cpIHtcbiAgICAgICAgICAgIHN0YXRlLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkge1xuICAgICAgICAgICAgc3RhdGUuZGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnNlcnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfSwgeyBpc0FjdGl2ZTogIWlzRGlzYWJsZWQgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RhdGUudmFsdWUubGVuZ3RoID4gMCA/IHJlbmRlcmVkVmFsdWUgOiByZW5kZXJlZFBsYWNlaG9sZGVyLFxuICAgIH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLXRleHQtaW5wdXQuanMubWFwIiwKICAgICJpbXBvcnQgeyBCb3ggfSBmcm9tICdpbmsnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBPcmRlcmVkTGlzdEl0ZW0gfSBmcm9tICcuL29yZGVyZWQtbGlzdC1pdGVtLmpzJztcbmltcG9ydCB7IE9yZGVyZWRMaXN0Q29udGV4dCB9IGZyb20gJy4vb3JkZXJlZC1saXN0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgT3JkZXJlZExpc3RJdGVtQ29udGV4dCB9IGZyb20gJy4vb3JkZXJlZC1saXN0LWl0ZW0tY29udGV4dC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gT3JkZXJlZExpc3QoeyBjaGlsZHJlbiB9KSB7XG4gICAgY29uc3QgeyBtYXJrZXI6IHBhcmVudE1hcmtlciB9ID0gdXNlQ29udGV4dChPcmRlcmVkTGlzdENvbnRleHQpO1xuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB1c2VDb21wb25lbnRUaGVtZSgnT3JkZXJlZExpc3QnKTtcbiAgICBsZXQgbnVtYmVyT2ZJdGVtcyA9IDA7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSB8fCBjaGlsZC50eXBlICE9PSBPcmRlcmVkTGlzdEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlck9mSXRlbXMrKztcbiAgICB9XG4gICAgY29uc3QgbWF4TWFya2VyV2lkdGggPSBTdHJpbmcobnVtYmVyT2ZJdGVtcykubGVuZ3RoO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmxpc3QoKSB9LCBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkgfHwgY2hpbGQudHlwZSAhPT0gT3JkZXJlZExpc3RJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFkZGVkTWFya2VyID0gYCR7U3RyaW5nKGluZGV4ICsgMSkucGFkU3RhcnQobWF4TWFya2VyV2lkdGgpfS5gO1xuICAgICAgICBjb25zdCBtYXJrZXIgPSBgJHtwYXJlbnRNYXJrZXJ9JHtwYWRkZWRNYXJrZXJ9YDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1uby1jb25zdHJ1Y3RlZC1jb250ZXh0LXZhbHVlc1xuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE9yZGVyZWRMaXN0Q29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogeyBtYXJrZXIgfSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChPcmRlcmVkTGlzdEl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IG1hcmtlciB9IH0sIGNoaWxkKSkpO1xuICAgIH0pKSk7XG59XG5PcmRlcmVkTGlzdC5JdGVtID0gT3JkZXJlZExpc3RJdGVtO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3JkZXJlZC1saXN0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBPcmRlcmVkTGlzdEl0ZW1Db250ZXh0IH0gZnJvbSAnLi9vcmRlcmVkLWxpc3QtaXRlbS1jb250ZXh0LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBPcmRlcmVkTGlzdEl0ZW0oeyBjaGlsZHJlbiB9KSB7XG4gICAgY29uc3QgeyBtYXJrZXIgfSA9IHVzZUNvbnRleHQoT3JkZXJlZExpc3RJdGVtQ29udGV4dCk7XG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdPcmRlcmVkTGlzdCcpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmxpc3RJdGVtKCkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5tYXJrZXIoKSB9LCBtYXJrZXIpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyAuLi5zdHlsZXMuY29udGVudCgpIH0sIGNoaWxkcmVuKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3JkZXJlZC1saXN0LWl0ZW0uanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgT3JkZXJlZExpc3RJdGVtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIG1hcmtlcjogZmlndXJlcy5saW5lLFxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcmRlcmVkLWxpc3QtaXRlbS1jb250ZXh0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBPcmRlcmVkTGlzdENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICBtYXJrZXI6ICcnLFxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcmRlcmVkLWxpc3QtY29udGV4dC5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgdXNlUGFzc3dvcmRJbnB1dFN0YXRlIH0gZnJvbSAnLi91c2UtcGFzc3dvcmQtaW5wdXQtc3RhdGUuanMnO1xuaW1wb3J0IHsgdXNlUGFzc3dvcmRJbnB1dCB9IGZyb20gJy4vdXNlLXBhc3N3b3JkLWlucHV0LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBQYXNzd29yZElucHV0KHsgaXNEaXNhYmxlZCA9IGZhbHNlLCBwbGFjZWhvbGRlciA9ICcnLCBvbkNoYW5nZSwgb25TdWJtaXQsIH0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZVBhc3N3b3JkSW5wdXRTdGF0ZSh7XG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBvblN1Ym1pdCxcbiAgICB9KTtcbiAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHVzZVBhc3N3b3JkSW5wdXQoe1xuICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgc3RhdGUsXG4gICAgfSk7XG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdQYXNzd29yZElucHV0Jyk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyAuLi5zdHlsZXMudmFsdWUoKSB9LCBpbnB1dFZhbHVlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhc3N3b3JkLWlucHV0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlUmVkdWNlciwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbW92ZS1jdXJzb3ItbGVmdCc6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0OiBNYXRoLm1heCgwLCBzdGF0ZS5jdXJzb3JPZmZzZXQgLSAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbW92ZS1jdXJzb3ItcmlnaHQnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGN1cnNvck9mZnNldDogTWF0aC5taW4oc3RhdGUudmFsdWUubGVuZ3RoLCBzdGF0ZS5jdXJzb3JPZmZzZXQgKyAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaW5zZXJ0Jzoge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhdGUudmFsdWUuc2xpY2UoMCwgc3RhdGUuY3Vyc29yT2Zmc2V0KSArXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi50ZXh0ICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFsdWUuc2xpY2Uoc3RhdGUuY3Vyc29yT2Zmc2V0KSxcbiAgICAgICAgICAgICAgICBjdXJzb3JPZmZzZXQ6IHN0YXRlLmN1cnNvck9mZnNldCArIGFjdGlvbi50ZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZGVsZXRlJzoge1xuICAgICAgICAgICAgY29uc3QgbmV3Q3Vyc29yT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc3RhdGUuY3Vyc29yT2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS52YWx1ZS5zbGljZSgwLCBuZXdDdXJzb3JPZmZzZXQpICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFsdWUuc2xpY2UobmV3Q3Vyc29yT2Zmc2V0ICsgMSksXG4gICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0OiBuZXdDdXJzb3JPZmZzZXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB1c2VQYXNzd29yZElucHV0U3RhdGUgPSAoeyBvbkNoYW5nZSwgb25TdWJtaXQsIH0pID0+IHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwge1xuICAgICAgICBwcmV2aW91c1ZhbHVlOiAnJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBjdXJzb3JPZmZzZXQ6IDAsXG4gICAgfSk7XG4gICAgY29uc3QgbW92ZUN1cnNvckxlZnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdtb3ZlLWN1cnNvci1sZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IG1vdmVDdXJzb3JSaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ21vdmUtY3Vyc29yLXJpZ2h0JyxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGluc2VydCA9IHVzZUNhbGxiYWNrKCh0ZXh0KSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnNlcnQnLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGRlbGV0ZUNoYXJhY3RlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBzdWJtaXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIG9uU3VibWl0Py4oc3RhdGUudmFsdWUpO1xuICAgIH0sIFtzdGF0ZS52YWx1ZSwgb25TdWJtaXRdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUudmFsdWUgIT09IHN0YXRlLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlPy4oc3RhdGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgfSwgW3N0YXRlLnByZXZpb3VzVmFsdWUsIHN0YXRlLnZhbHVlLCBvbkNoYW5nZV0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBtb3ZlQ3Vyc29yTGVmdCxcbiAgICAgICAgbW92ZUN1cnNvclJpZ2h0LFxuICAgICAgICBpbnNlcnQsXG4gICAgICAgIGRlbGV0ZTogZGVsZXRlQ2hhcmFjdGVyLFxuICAgICAgICBzdWJtaXQsXG4gICAgfTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtcGFzc3dvcmQtaW5wdXQtc3RhdGUuanMubWFwIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSW5wdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmNvbnN0IGN1cnNvciA9IGNoYWxrLmludmVyc2UoJyAnKTtcbmV4cG9ydCBjb25zdCB1c2VQYXNzd29yZElucHV0ID0gKHsgaXNEaXNhYmxlZCA9IGZhbHNlLCBzdGF0ZSwgcGxhY2Vob2xkZXIgPSAnJywgfSkgPT4ge1xuICAgIGNvbnN0IHJlbmRlcmVkUGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlciA/IGNoYWxrLmRpbShwbGFjZWhvbGRlcikgOiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIgJiYgcGxhY2Vob2xkZXIubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBjaGFsay5pbnZlcnNlKHBsYWNlaG9sZGVyWzBdKSArIGNoYWxrLmRpbShwbGFjZWhvbGRlci5zbGljZSgxKSlcbiAgICAgICAgICAgIDogY3Vyc29yO1xuICAgIH0sIFtpc0Rpc2FibGVkLCBwbGFjZWhvbGRlcl0pO1xuICAgIGNvbnN0IHJlbmRlcmVkVmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAnKicucmVwZWF0KHN0YXRlLnZhbHVlLmxlbmd0aCk7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlLmxlbmd0aCA+IDAgPyAnJyA6IGN1cnNvcjtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggPT09IHN0YXRlLmN1cnNvck9mZnNldCA/IGNoYWxrLmludmVyc2UoY2hhcikgOiBjaGFyO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiBzdGF0ZS5jdXJzb3JPZmZzZXQgPT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGN1cnNvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtpc0Rpc2FibGVkLCBzdGF0ZS52YWx1ZSwgc3RhdGUuY3Vyc29yT2Zmc2V0XSk7XG4gICAgdXNlSW5wdXQoKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS51cEFycm93IHx8XG4gICAgICAgICAgICBrZXkuZG93bkFycm93IHx8XG4gICAgICAgICAgICAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdjJykgfHxcbiAgICAgICAgICAgIGtleS50YWIgfHxcbiAgICAgICAgICAgIChrZXkuc2hpZnQgJiYga2V5LnRhYikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgc3RhdGUuc3VibWl0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5sZWZ0QXJyb3cpIHtcbiAgICAgICAgICAgIHN0YXRlLm1vdmVDdXJzb3JMZWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5LnJpZ2h0QXJyb3cpIHtcbiAgICAgICAgICAgIHN0YXRlLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkge1xuICAgICAgICAgICAgc3RhdGUuZGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnNlcnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfSwgeyBpc0FjdGl2ZTogIWlzRGlzYWJsZWQgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RhdGUudmFsdWUubGVuZ3RoID4gMCA/IHJlbmRlcmVkVmFsdWUgOiByZW5kZXJlZFBsYWNlaG9sZGVyLFxuICAgIH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLXBhc3N3b3JkLWlucHV0LmpzLm1hcCIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB1c2VDb21wb25lbnRUaGVtZSB9IGZyb20gJy4uLy4uL3RoZW1lLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBTdGF0dXNNZXNzYWdlKHsgY2hpbGRyZW4sIHZhcmlhbnQgfSkge1xuICAgIGNvbnN0IHsgc3R5bGVzLCBjb25maWcgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdTdGF0dXNNZXNzYWdlJyk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgeyAuLi5zdHlsZXMuY29udGFpbmVyKCkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmljb25Db250YWluZXIoKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5pY29uKHsgdmFyaWFudCB9KSB9LCBjb25maWcoeyB2YXJpYW50IH0pLmljb24pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5tZXNzYWdlKCkgfSwgY2hpbGRyZW4pKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0dXMtbWVzc2FnZS5qcy5tYXAiLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi90aGVtZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gQWxlcnQoeyBjaGlsZHJlbiwgdmFyaWFudCwgdGl0bGUgfSkge1xuICAgIGNvbnN0IHsgc3R5bGVzLCBjb25maWcgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdBbGVydCcpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmNvbnRhaW5lcih7IHZhcmlhbnQgfSkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmljb25Db250YWluZXIoKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy5pY29uKHsgdmFyaWFudCB9KSB9LCBjb25maWcoeyB2YXJpYW50IH0pLmljb24pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHsgLi4uc3R5bGVzLmNvbnRlbnQoKSB9LFxuICAgICAgICAgICAgdGl0bGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7IC4uLnN0eWxlcy50aXRsZSgpIH0sIHRpdGxlKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyAuLi5zdHlsZXMubWVzc2FnZSgpIH0sIGNoaWxkcmVuKSkpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsZXJ0LmpzLm1hcCIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi90aGVtZS5qcyc7XG5pbXBvcnQgeyB1c2VFbWFpbElucHV0U3RhdGUgfSBmcm9tICcuL3VzZS1lbWFpbC1pbnB1dC1zdGF0ZS5qcyc7XG5pbXBvcnQgeyB1c2VFbWFpbElucHV0IH0gZnJvbSAnLi91c2UtZW1haWwtaW5wdXQuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIEVtYWlsSW5wdXQoeyBpc0Rpc2FibGVkID0gZmFsc2UsIGRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXIgPSAnJywgZG9tYWlucywgb25DaGFuZ2UsIG9uU3VibWl0LCB9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VFbWFpbElucHV0U3RhdGUoe1xuICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGRvbWFpbnMsXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBvblN1Ym1pdCxcbiAgICB9KTtcbiAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHVzZUVtYWlsSW5wdXQoe1xuICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgc3RhdGUsXG4gICAgfSk7XG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lKCdFbWFpbElucHV0Jyk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgeyAuLi5zdHlsZXMudmFsdWUoKSB9LCBpbnB1dFZhbHVlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtYWlsLWlucHV0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlUmVkdWNlciwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbW92ZS1jdXJzb3ItbGVmdCc6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0OiBNYXRoLm1heCgwLCBzdGF0ZS5jdXJzb3JPZmZzZXQgLSAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbW92ZS1jdXJzb3ItcmlnaHQnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGN1cnNvck9mZnNldDogTWF0aC5taW4oc3RhdGUudmFsdWUubGVuZ3RoLCBzdGF0ZS5jdXJzb3JPZmZzZXQgKyAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaW5zZXJ0Jzoge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZhbHVlLmluY2x1ZGVzKCdAJykgJiYgYWN0aW9uLnRleHQuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YXRlLnZhbHVlLnNsaWNlKDAsIHN0YXRlLmN1cnNvck9mZnNldCkgK1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24udGV4dCArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZhbHVlLnNsaWNlKHN0YXRlLmN1cnNvck9mZnNldCksXG4gICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0OiBzdGF0ZS5jdXJzb3JPZmZzZXQgKyBhY3Rpb24udGV4dC5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2RlbGV0ZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0N1cnNvck9mZnNldCA9IE1hdGgubWF4KDAsIHN0YXRlLmN1cnNvck9mZnNldCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhdGUudmFsdWUuc2xpY2UoMCwgbmV3Q3Vyc29yT2Zmc2V0KSArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZhbHVlLnNsaWNlKG5ld0N1cnNvck9mZnNldCArIDEpLFxuICAgICAgICAgICAgICAgIGN1cnNvck9mZnNldDogbmV3Q3Vyc29yT2Zmc2V0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdXNlRW1haWxJbnB1dFN0YXRlID0gKHsgZGVmYXVsdFZhbHVlID0gJycsIGRvbWFpbnMgPSBbXG4gICAgJ2FvbC5jb20nLFxuICAgICdnbWFpbC5jb20nLFxuICAgICd5YWhvby5jb20nLFxuICAgICdob3RtYWlsLmNvbScsXG4gICAgJ2xpdmUuY29tJyxcbiAgICAnb3V0bG9vay5jb20nLFxuICAgICdpY2xvdWQuY29tJyxcbiAgICAnaGV5LmNvbScsXG5dLCBvbkNoYW5nZSwgb25TdWJtaXQsIH0pID0+IHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwge1xuICAgICAgICBwcmV2aW91c1ZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIHZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGN1cnNvck9mZnNldDogZGVmYXVsdFZhbHVlLmxlbmd0aCxcbiAgICB9KTtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS52YWx1ZS5sZW5ndGggPT09IDAgfHwgIXN0YXRlLnZhbHVlLmluY2x1ZGVzKCdAJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdEluZGV4ID0gc3RhdGUudmFsdWUuaW5kZXhPZignQCcpO1xuICAgICAgICBjb25zdCBlbnRlcmVkRG9tYWluID0gc3RhdGUudmFsdWUuc2xpY2UoYXRJbmRleCArIDEpO1xuICAgICAgICByZXR1cm4gZG9tYWluc1xuICAgICAgICAgICAgPy5maW5kKGRvbWFpbiA9PiBkb21haW4uc3RhcnRzV2l0aChlbnRlcmVkRG9tYWluKSlcbiAgICAgICAgICAgID8ucmVwbGFjZShlbnRlcmVkRG9tYWluLCAnJyk7XG4gICAgfSwgW3N0YXRlLnZhbHVlLCBkb21haW5zXSk7XG4gICAgY29uc3QgbW92ZUN1cnNvckxlZnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdtb3ZlLWN1cnNvci1sZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IG1vdmVDdXJzb3JSaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ21vdmUtY3Vyc29yLXJpZ2h0JyxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGluc2VydCA9IHVzZUNhbGxiYWNrKCh0ZXh0KSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnNlcnQnLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGRlbGV0ZUNoYXJhY3RlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBzdWJtaXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBpbnNlcnQoc3VnZ2VzdGlvbik7XG4gICAgICAgICAgICBvblN1Ym1pdD8uKHN0YXRlLnZhbHVlICsgc3VnZ2VzdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb25TdWJtaXQ/LihzdGF0ZS52YWx1ZSk7XG4gICAgfSwgW3N0YXRlLnZhbHVlLCBzdWdnZXN0aW9uLCBpbnNlcnQsIG9uU3VibWl0XSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLnByZXZpb3VzVmFsdWUgIT09IHN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgICBvbkNoYW5nZT8uKHN0YXRlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGF0ZS5wcmV2aW91c1ZhbHVlLCBzdGF0ZS52YWx1ZSwgb25DaGFuZ2VdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3VnZ2VzdGlvbixcbiAgICAgICAgbW92ZUN1cnNvckxlZnQsXG4gICAgICAgIG1vdmVDdXJzb3JSaWdodCxcbiAgICAgICAgaW5zZXJ0LFxuICAgICAgICBkZWxldGU6IGRlbGV0ZUNoYXJhY3RlcixcbiAgICAgICAgc3VibWl0LFxuICAgIH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLWVtYWlsLWlucHV0LXN0YXRlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlucHV0IH0gZnJvbSAnaW5rJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5jb25zdCBjdXJzb3IgPSBjaGFsay5pbnZlcnNlKCcgJyk7XG5leHBvcnQgY29uc3QgdXNlRW1haWxJbnB1dCA9ICh7IGlzRGlzYWJsZWQgPSBmYWxzZSwgc3RhdGUsIHBsYWNlaG9sZGVyID0gJycsIH0pID0+IHtcbiAgICBjb25zdCByZW5kZXJlZFBsYWNlaG9sZGVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIgPyBjaGFsay5kaW0ocGxhY2Vob2xkZXIpIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gY2hhbGsuaW52ZXJzZShwbGFjZWhvbGRlclswXSkgKyBjaGFsay5kaW0ocGxhY2Vob2xkZXIuc2xpY2UoMSkpXG4gICAgICAgICAgICA6IGN1cnNvcjtcbiAgICB9LCBbaXNEaXNhYmxlZCwgcGxhY2Vob2xkZXJdKTtcbiAgICBjb25zdCByZW5kZXJlZFZhbHVlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHN0YXRlLnZhbHVlLmxlbmd0aCA+IDAgPyAnJyA6IGN1cnNvcjtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggPT09IHN0YXRlLmN1cnNvck9mZnNldCA/IGNoYWxrLmludmVyc2UoY2hhcikgOiBjaGFyO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuc3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmN1cnNvck9mZnNldCA9PT0gc3RhdGUudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9XG4gICAgICAgICAgICAgICAgICAgIGNoYWxrLmludmVyc2Uoc3RhdGUuc3VnZ2VzdGlvblswXSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGsuZGltKHN0YXRlLnN1Z2dlc3Rpb24uc2xpY2UoMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoYWxrLmRpbShzdGF0ZS5zdWdnZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLnZhbHVlLmxlbmd0aCA+IDAgJiYgc3RhdGUuY3Vyc29yT2Zmc2V0ID09PSBzdGF0ZS52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBjdXJzb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBbaXNEaXNhYmxlZCwgc3RhdGUudmFsdWUsIHN0YXRlLmN1cnNvck9mZnNldCwgc3RhdGUuc3VnZ2VzdGlvbl0pO1xuICAgIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkudXBBcnJvdyB8fFxuICAgICAgICAgICAga2V5LmRvd25BcnJvdyB8fFxuICAgICAgICAgICAgKGtleS5jdHJsICYmIGlucHV0ID09PSAnYycpIHx8XG4gICAgICAgICAgICBrZXkudGFiIHx8XG4gICAgICAgICAgICAoa2V5LnNoaWZ0ICYmIGtleS50YWIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIHN0YXRlLnN1Ym1pdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkubGVmdEFycm93KSB7XG4gICAgICAgICAgICBzdGF0ZS5tb3ZlQ3Vyc29yTGVmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleS5yaWdodEFycm93KSB7XG4gICAgICAgICAgICBzdGF0ZS5tb3ZlQ3Vyc29yUmlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkuYmFja3NwYWNlIHx8IGtleS5kZWxldGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmRlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUuaW5zZXJ0KGlucHV0KTtcbiAgICAgICAgfVxuICAgIH0sIHsgaXNBY3RpdmU6ICFpc0Rpc2FibGVkIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlucHV0VmFsdWU6IHN0YXRlLnZhbHVlLmxlbmd0aCA+IDAgPyByZW5kZXJlZFZhbHVlIDogcmVuZGVyZWRQbGFjZWhvbGRlcixcbiAgICB9O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1lbWFpbC1pbnB1dC5qcy5tYXAiLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IEVPTCwgcGxhdGZvcm0sIGhvbWVkaXIgfSBmcm9tICdvcydcbmltcG9ydCB7IGV4ZWNGaWxlTm9UaHJvdyB9IGZyb20gJy4uL3V0aWxzL2V4ZWNGaWxlTm9UaHJvdy5qcydcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi91dGlscy9lbnYuanMnXG5pbXBvcnQgeyBnZXRHbG9iYWxDb25maWcsIHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBtYXJrUHJvamVjdE9uYm9hcmRpbmdDb21wbGV0ZSB9IGZyb20gJy4uL1Byb2plY3RPbmJvYXJkaW5nLmpzJ1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IHNhZmVQYXJzZUpTT04gfSBmcm9tICcuLi91dGlscy9qc29uLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5cbmNvbnN0IHRlcm1pbmFsU2V0dXA6IENvbW1hbmQgPSB7XG4gIHR5cGU6ICdsb2NhbCcsXG4gIG5hbWU6ICd0ZXJtaW5hbC1zZXR1cCcsXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAndGVybWluYWwtc2V0dXAnXG4gIH0sXG4gIGRlc2NyaXB0aW9uOlxuICAgICdJbnN0YWxsIFNoaWZ0K0VudGVyIGtleSBiaW5kaW5nIGZvciBuZXdsaW5lcyAoaVRlcm0yIGFuZCBWU0NvZGUgb25seSknLFxuICBpc0VuYWJsZWQ6XG4gICAgKHBsYXRmb3JtKCkgPT09ICdkYXJ3aW4nICYmIGVudi50ZXJtaW5hbCA9PT0gJ2lUZXJtLmFwcCcpIHx8XG4gICAgZW52LnRlcm1pbmFsID09PSAndnNjb2RlJyxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBhc3luYyBjYWxsKCkge1xuICAgIGxldCByZXN1bHQgPSAnJ1xuXG4gICAgc3dpdGNoIChlbnYudGVybWluYWwpIHtcbiAgICAgIGNhc2UgJ2lUZXJtLmFwcCc6XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGluc3RhbGxCaW5kaW5nc0ZvcklUZXJtMigpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd2c2NvZGUnOlxuICAgICAgICByZXN1bHQgPSBpbnN0YWxsQmluZGluZ3NGb3JWU0NvZGVUZXJtaW5hbCgpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWcgdG8gaW5kaWNhdGUgU2hpZnQrRW50ZXIga2V5IGJpbmRpbmcgaXMgaW5zdGFsbGVkXG4gICAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgICBjb25maWcuc2hpZnRFbnRlcktleUJpbmRpbmdJbnN0YWxsZWQgPSB0cnVlXG4gICAgc2F2ZUdsb2JhbENvbmZpZyhjb25maWcpXG5cbiAgICAvLyBNYXJrIG9uYm9hcmRpbmcgYXMgY29tcGxldGVcbiAgICBtYXJrUHJvamVjdE9uYm9hcmRpbmdDb21wbGV0ZSgpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0sXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NoaWZ0RW50ZXJLZXlCaW5kaW5nSW5zdGFsbGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0R2xvYmFsQ29uZmlnKCkuc2hpZnRFbnRlcktleUJpbmRpbmdJbnN0YWxsZWQgPT09IHRydWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGVybWluYWxTZXR1cFxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQmluZGluZ3NGb3JJVGVybTIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coJ2RlZmF1bHRzJywgW1xuICAgICd3cml0ZScsXG4gICAgJ2NvbS5nb29nbGVjb2RlLml0ZXJtMicsXG4gICAgJ0dsb2JhbEtleU1hcCcsXG4gICAgJy1kaWN0LWFkZCcsXG4gICAgJzB4ZC0weDIwMDAwLTB4MjQnLFxuICAgIGA8ZGljdD5cbiAgICAgIDxrZXk+VGV4dDwva2V5PlxuICAgICAgPHN0cmluZz5cXFxcbjwvc3RyaW5nPlxuICAgICAgPGtleT5BY3Rpb248L2tleT5cbiAgICAgIDxpbnRlZ2VyPjEyPC9pbnRlZ2VyPlxuICAgICAgPGtleT5WZXJzaW9uPC9rZXk+XG4gICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPlxuICAgICAgPGtleT5LZXljb2RlPC9rZXk+XG4gICAgICA8aW50ZWdlcj4xMzwvaW50ZWdlcj5cbiAgICAgIDxrZXk+TW9kaWZpZXJzPC9rZXk+XG4gICAgICA8aW50ZWdlcj4xMzEwNzI8L2ludGVnZXI+XG4gICAgPC9kaWN0PmAsXG4gIF0pXG5cbiAgaWYgKGNvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGlUZXJtMiBTaGlmdCtFbnRlciBrZXkgYmluZGluZycpXG4gIH1cblxuICByZXR1cm4gYCR7Y2hhbGsuaGV4KGdldFRoZW1lKCkuc3VjY2VzcykoXG4gICAgJ0luc3RhbGxlZCBpVGVybTIgU2hpZnQrRW50ZXIga2V5IGJpbmRpbmcnLFxuICApfSR7RU9MfSR7Y2hhbGsuZGltKCdTZWUgaVRlcm0yIOKGkiBQcmVmZXJlbmNlcyDihpIgS2V5cycpfSR7RU9MfWBcbn1cblxudHlwZSBWU0NvZGVLZXliaW5kaW5nID0ge1xuICBrZXk6IHN0cmluZ1xuICBjb21tYW5kOiBzdHJpbmdcbiAgYXJnczogeyB0ZXh0OiBzdHJpbmcgfVxuICB3aGVuOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gaW5zdGFsbEJpbmRpbmdzRm9yVlNDb2RlVGVybWluYWwoKTogc3RyaW5nIHtcbiAgY29uc3QgdnNjb2RlS2V5YmluZGluZ3NQYXRoID0gam9pbihcbiAgICBob21lZGlyKCksXG4gICAgcGxhdGZvcm0oKSA9PT0gJ3dpbjMyJ1xuICAgICAgPyBqb2luKCdBcHBEYXRhJywgJ1JvYW1pbmcnLCAnQ29kZScsICdVc2VyJylcbiAgICAgIDogcGxhdGZvcm0oKSA9PT0gJ2RhcndpbidcbiAgICAgICAgPyBqb2luKCdMaWJyYXJ5JywgJ0FwcGxpY2F0aW9uIFN1cHBvcnQnLCAnQ29kZScsICdVc2VyJylcbiAgICAgICAgOiBqb2luKCcuY29uZmlnJywgJ0NvZGUnLCAnVXNlcicpLFxuICAgICdrZXliaW5kaW5ncy5qc29uJyxcbiAgKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyh2c2NvZGVLZXliaW5kaW5nc1BhdGgsICd1dGYtOCcpXG4gICAgY29uc3Qga2V5YmluZGluZ3M6IFZTQ29kZUtleWJpbmRpbmdbXSA9XG4gICAgICAoc2FmZVBhcnNlSlNPTihjb250ZW50KSBhcyBWU0NvZGVLZXliaW5kaW5nW10pID8/IFtdXG5cbiAgICAvLyBDaGVjayBpZiBrZXliaW5kaW5nIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdCaW5kaW5nID0ga2V5YmluZGluZ3MuZmluZChcbiAgICAgIGJpbmRpbmcgPT5cbiAgICAgICAgYmluZGluZy5rZXkgPT09ICdzaGlmdCtlbnRlcicgJiZcbiAgICAgICAgYmluZGluZy5jb21tYW5kID09PSAnd29ya2JlbmNoLmFjdGlvbi50ZXJtaW5hbC5zZW5kU2VxdWVuY2UnICYmXG4gICAgICAgIGJpbmRpbmcud2hlbiA9PT0gJ3Rlcm1pbmFsRm9jdXMnLFxuICAgIClcbiAgICBpZiAoZXhpc3RpbmdCaW5kaW5nKSB7XG4gICAgICByZXR1cm4gYCR7Y2hhbGsuaGV4KGdldFRoZW1lKCkud2FybmluZykoXG4gICAgICAgICdGb3VuZCBleGlzdGluZyBWU0NvZGUgdGVybWluYWwgU2hpZnQrRW50ZXIga2V5IGJpbmRpbmcuIFJlbW92ZSBpdCB0byBjb250aW51ZS4nLFxuICAgICAgKX0ke0VPTH0ke2NoYWxrLmRpbShgU2VlICR7dnNjb2RlS2V5YmluZGluZ3NQYXRofWApfSR7RU9MfWBcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGtleWJpbmRpbmdcbiAgICBrZXliaW5kaW5ncy5wdXNoKHtcbiAgICAgIGtleTogJ3NoaWZ0K2VudGVyJyxcbiAgICAgIGNvbW1hbmQ6ICd3b3JrYmVuY2guYWN0aW9uLnRlcm1pbmFsLnNlbmRTZXF1ZW5jZScsXG4gICAgICBhcmdzOiB7IHRleHQ6ICdcXFxcXFxyXFxuJyB9LFxuICAgICAgd2hlbjogJ3Rlcm1pbmFsRm9jdXMnLFxuICAgIH0pXG5cbiAgICB3cml0ZUZpbGVTeW5jKFxuICAgICAgdnNjb2RlS2V5YmluZGluZ3NQYXRoLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoa2V5YmluZGluZ3MsIG51bGwsIDQpLFxuICAgICAgJ3V0Zi04JyxcbiAgICApXG5cbiAgICByZXR1cm4gYCR7Y2hhbGsuaGV4KGdldFRoZW1lKCkuc3VjY2VzcykoXG4gICAgICAnSW5zdGFsbGVkIFZTQ29kZSB0ZXJtaW5hbCBTaGlmdCtFbnRlciBrZXkgYmluZGluZycsXG4gICAgKX0ke0VPTH0ke2NoYWxrLmRpbShgU2VlICR7dnNjb2RlS2V5YmluZGluZ3NQYXRofWApfSR7RU9MfWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBWU0NvZGUgdGVybWluYWwgU2hpZnQrRW50ZXIga2V5IGJpbmRpbmcnKVxuICB9XG59XG4iLAogICAgImltcG9ydCB7IGdldEdsb2JhbENvbmZpZyB9IGZyb20gJy4vY29uZmlnLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcbiAgYmFzaEJvcmRlcjogc3RyaW5nXG4gIGNsYXVkZTogc3RyaW5nXG4gIHBlcm1pc3Npb246IHN0cmluZ1xuICBzZWNvbmRhcnlCb3JkZXI6IHN0cmluZ1xuICB0ZXh0OiBzdHJpbmdcbiAgc2Vjb25kYXJ5VGV4dDogc3RyaW5nXG4gIHN1Z2dlc3Rpb246IHN0cmluZ1xuICAvLyBTZW1hbnRpYyBjb2xvcnNcbiAgc3VjY2Vzczogc3RyaW5nXG4gIGVycm9yOiBzdHJpbmdcbiAgd2FybmluZzogc3RyaW5nXG4gIGRpZmY6IHtcbiAgICBhZGRlZDogc3RyaW5nXG4gICAgcmVtb3ZlZDogc3RyaW5nXG4gICAgYWRkZWREaW1tZWQ6IHN0cmluZ1xuICAgIHJlbW92ZWREaW1tZWQ6IHN0cmluZ1xuICB9XG59XG5cbmNvbnN0IGxpZ2h0VGhlbWU6IFRoZW1lID0ge1xuICBiYXNoQm9yZGVyOiAnI2ZmMDA4NycsXG4gIGNsYXVkZTogJyNEOTc3NTcnLFxuICBwZXJtaXNzaW9uOiAnIzU3NjlmNycsXG4gIHNlY29uZGFyeUJvcmRlcjogJyM5OTknLFxuICB0ZXh0OiAnIzAwMCcsXG4gIHNlY29uZGFyeVRleHQ6ICcjNjY2JyxcbiAgc3VnZ2VzdGlvbjogJyM1NzY5ZjcnLFxuICBzdWNjZXNzOiAnIzJjN2EzOScsXG4gIGVycm9yOiAnI2FiMmIzZicsXG4gIHdhcm5pbmc6ICcjOTY2YzFlJyxcbiAgZGlmZjoge1xuICAgIGFkZGVkOiAnIzY5ZGI3YycsXG4gICAgcmVtb3ZlZDogJyNmZmE4YjQnLFxuICAgIGFkZGVkRGltbWVkOiAnI2M3ZTFjYicsXG4gICAgcmVtb3ZlZERpbW1lZDogJyNmZGQyZDgnLFxuICB9LFxufVxuXG5jb25zdCBsaWdodERhbHRvbml6ZWRUaGVtZTogVGhlbWUgPSB7XG4gIGJhc2hCb3JkZXI6ICcjMDA2NmNjJywgLy8gQmx1ZSBpbnN0ZWFkIG9mIHBpbmsgZm9yIGJldHRlciBjb250cmFzdFxuICBjbGF1ZGU6ICcjZmY5OTMzJywgLy8gT3JhbmdlIGFkanVzdGVkIGZvciBkZXV0ZXJhbm9waWFcbiAgcGVybWlzc2lvbjogJyMzMzY2ZmYnLCAvLyBCcmlnaHRlciBibHVlIGZvciBiZXR0ZXIgdmlzaWJpbGl0eVxuICBzZWNvbmRhcnlCb3JkZXI6ICcjOTk5JyxcbiAgdGV4dDogJyMwMDAnLFxuICBzZWNvbmRhcnlUZXh0OiAnIzY2NicsXG4gIHN1Z2dlc3Rpb246ICcjMzM2NmZmJyxcbiAgc3VjY2VzczogJyMwMDY2OTknLCAvLyBCbHVlIGluc3RlYWQgb2YgZ3JlZW5cbiAgZXJyb3I6ICcjY2MwMDAwJywgLy8gUHVyZSByZWQgZm9yIGJldHRlciBkaXN0aW5jdGlvblxuICB3YXJuaW5nOiAnI2ZmOTkwMCcsIC8vIE9yYW5nZSBhZGp1c3RlZCBmb3IgZGV1dGVyYW5vcGlhXG4gIGRpZmY6IHtcbiAgICBhZGRlZDogJyM5OWNjZmYnLCAvLyBMaWdodCBibHVlIGluc3RlYWQgb2YgZ3JlZW5cbiAgICByZW1vdmVkOiAnI2ZmY2NjYycsIC8vIExpZ2h0IHJlZCBmb3IgYmV0dGVyIGNvbnRyYXN0XG4gICAgYWRkZWREaW1tZWQ6ICcjZDFlN2ZkJyxcbiAgICByZW1vdmVkRGltbWVkOiAnI2ZmZTllOScsXG4gIH0sXG59XG5cbmNvbnN0IGRhcmtUaGVtZTogVGhlbWUgPSB7XG4gIGJhc2hCb3JkZXI6ICcjZmQ1ZGIxJyxcbiAgY2xhdWRlOiAnI0Q5Nzc1NycsXG4gIHBlcm1pc3Npb246ICcjYjFiOWY5JyxcbiAgc2Vjb25kYXJ5Qm9yZGVyOiAnIzg4OCcsXG4gIHRleHQ6ICcjZmZmJyxcbiAgc2Vjb25kYXJ5VGV4dDogJyM5OTknLFxuICBzdWdnZXN0aW9uOiAnI2IxYjlmOScsXG4gIHN1Y2Nlc3M6ICcjNGViYTY1JyxcbiAgZXJyb3I6ICcjZmY2YjgwJyxcbiAgd2FybmluZzogJyNmZmMxMDcnLFxuICBkaWZmOiB7XG4gICAgYWRkZWQ6ICcjMjI1YzJiJyxcbiAgICByZW1vdmVkOiAnIzdhMjkzNicsXG4gICAgYWRkZWREaW1tZWQ6ICcjNDc1ODRhJyxcbiAgICByZW1vdmVkRGltbWVkOiAnIzY5NDg0ZCcsXG4gIH0sXG59XG5cbmNvbnN0IGRhcmtEYWx0b25pemVkVGhlbWU6IFRoZW1lID0ge1xuICBiYXNoQm9yZGVyOiAnIzMzOTlmZicsIC8vIEJyaWdodCBibHVlIGluc3RlYWQgb2YgcGlua1xuICBjbGF1ZGU6ICcjZmY5OTMzJywgLy8gT3JhbmdlIGFkanVzdGVkIGZvciBkZXV0ZXJhbm9waWFcbiAgcGVybWlzc2lvbjogJyM5OWNjZmYnLCAvLyBMaWdodCBibHVlIGZvciBiZXR0ZXIgY29udHJhc3RcbiAgc2Vjb25kYXJ5Qm9yZGVyOiAnIzg4OCcsXG4gIHRleHQ6ICcjZmZmJyxcbiAgc2Vjb25kYXJ5VGV4dDogJyM5OTknLFxuICBzdWdnZXN0aW9uOiAnIzk5Y2NmZicsXG4gIHN1Y2Nlc3M6ICcjMzM5OWZmJywgLy8gQnJpZ2h0IGJsdWUgaW5zdGVhZCBvZiBncmVlblxuICBlcnJvcjogJyNmZjY2NjYnLCAvLyBCcmlnaHQgcmVkIGZvciBiZXR0ZXIgdmlzaWJpbGl0eVxuICB3YXJuaW5nOiAnI2ZmY2MwMCcsIC8vIFllbGxvdy1vcmFuZ2UgZm9yIGRldXRlcmFub3BpYVxuICBkaWZmOiB7XG4gICAgYWRkZWQ6ICcjMDA0NDY2JywgLy8gRGFyayBibHVlIGluc3RlYWQgb2YgZ3JlZW5cbiAgICByZW1vdmVkOiAnIzY2MDAwMCcsIC8vIERhcmsgcmVkIGZvciBiZXR0ZXIgY29udHJhc3RcbiAgICBhZGRlZERpbW1lZDogJyMzZTUxNWInLFxuICAgIHJlbW92ZWREaW1tZWQ6ICcjM2UyYzJjJyxcbiAgfSxcbn1cblxuZXhwb3J0IHR5cGUgVGhlbWVOYW1lcyA9XG4gIHwgJ2RhcmsnXG4gIHwgJ2xpZ2h0J1xuICB8ICdsaWdodC1kYWx0b25pemVkJ1xuICB8ICdkYXJrLWRhbHRvbml6ZWQnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaGVtZShvdmVycmlkZVRoZW1lPzogVGhlbWVOYW1lcyk6IFRoZW1lIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgc3dpdGNoIChvdmVycmlkZVRoZW1lID8/IGNvbmZpZy50aGVtZSkge1xuICAgIGNhc2UgJ2xpZ2h0JzpcbiAgICAgIHJldHVybiBsaWdodFRoZW1lXG4gICAgY2FzZSAnbGlnaHQtZGFsdG9uaXplZCc6XG4gICAgICByZXR1cm4gbGlnaHREYWx0b25pemVkVGhlbWVcbiAgICBjYXNlICdkYXJrLWRhbHRvbml6ZWQnOlxuICAgICAgcmV0dXJuIGRhcmtEYWx0b25pemVkVGhlbWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhcmtUaGVtZVxuICB9XG59XG4iLAogICAgIi8vIFJlbGVhc2Ugbm90ZXMgZm9yIGVhY2ggdmVyc2lvblxuLy8gRG9uJ3QgYWRkIG1vcmUgdGhhbiAzIGZvciBhbnkgdmVyc2lvbiwgc2luY2UgdGhlc2Ugc2hvdyB1cCBpbiB0aGUgVUkgdXBvbiBsYXVuY2guXG5leHBvcnQgY29uc3QgUkVMRUFTRV9OT1RFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAnMC4xLjE3OCc6IFtcbiAgICBcIk5ldyByZWxlYXNlIG5vdGVzIG5vdyBzaG93IHlvdSB3aGF0J3MgY2hhbmdlZCBzaW5jZSB5b3UgbGFzdCBsYXVuY2hlZFwiLFxuICBdLFxufVxuIiwKICAgICJpbXBvcnQge1xuICByZWFkRmlsZVN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG4gIG9wZW5TeW5jLFxuICByZWFkU3luYyxcbiAgY2xvc2VTeW5jLFxuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgb3BlbmRpclN5bmMsXG59IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIG5vcm1hbGl6ZSxcbiAgcmVzb2x2ZSxcbiAgcmVzb2x2ZSBhcyByZXNvbHZlUGF0aCxcbiAgcmVsYXRpdmUsXG4gIHNlcCxcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG59IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnbG9iIGFzIGdsb2JMaWIgfSBmcm9tICdnbG9iJ1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2VzcydcbmltcG9ydCB7IGxpc3RBbGxDb250ZW50RmlsZXMgfSBmcm9tICcuL3JpcGdyZXAuanMnXG5pbXBvcnQgeyBMUlVDYWNoZSB9IGZyb20gJ2xydS1jYWNoZSdcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4vc3RhdGUuanMnXG5cbmV4cG9ydCB0eXBlIEZpbGUgPSB7XG4gIGZpbGVuYW1lOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIExpbmVFbmRpbmdUeXBlID0gJ0NSTEYnIHwgJ0xGJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2xvYihcbiAgZmlsZVBhdHRlcm46IHN0cmluZyxcbiAgY3dkOiBzdHJpbmcsXG4gIHsgbGltaXQsIG9mZnNldCB9OiB7IGxpbWl0OiBudW1iZXI7IG9mZnNldDogbnVtYmVyIH0sXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8eyBmaWxlczogc3RyaW5nW107IHRydW5jYXRlZDogYm9vbGVhbiB9PiB7XG4gIC8vIFRPRE86IFVzZSB3b3JrZXIgdGhyZWFkc1xuICBjb25zdCBwYXRocyA9IGF3YWl0IGdsb2JMaWIoW2ZpbGVQYXR0ZXJuXSwge1xuICAgIGN3ZCxcbiAgICBub2Nhc2U6IHRydWUsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICBzdGF0OiB0cnVlLFxuICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gIH0pXG4gIGNvbnN0IHNvcnRlZFBhdGhzID0gcGF0aHMuc29ydCgoYSwgYikgPT4gKGEubXRpbWVNcyA/PyAwKSAtIChiLm10aW1lTXMgPz8gMCkpXG4gIGNvbnN0IHRydW5jYXRlZCA9IHNvcnRlZFBhdGhzLmxlbmd0aCA+IG9mZnNldCArIGxpbWl0XG4gIHJldHVybiB7XG4gICAgZmlsZXM6IHNvcnRlZFBhdGhzXG4gICAgICAuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsaW1pdClcbiAgICAgIC5tYXAocGF0aCA9PiBwYXRoLmZ1bGxwYXRoKCkpLFxuICAgIHRydW5jYXRlZCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGVTYWZlKGZpbGVwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVhZEZpbGVTeW5jKGZpbGVwYXRoLCAndXRmLTgnKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5EaXJlY3RvcnkoXG4gIHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuICByZWxhdGl2ZUN3ZDogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIGlmIChyZWxhdGl2ZVBhdGggPT09ICcuJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBSZWplY3QgcGF0aHMgc3RhcnRpbmcgd2l0aCB+IChob21lIGRpcmVjdG9yeSlcbiAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCd+JykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFJlamVjdCBwYXRocyBjb250YWluaW5nIG51bGwgYnl0ZXMgb3Igb3RoZXIgc25lYWt5IGNoYXJhY3RlcnNcbiAgaWYgKHJlbGF0aXZlUGF0aC5pbmNsdWRlcygnXFwwJykgfHwgcmVsYXRpdmVDd2QuaW5jbHVkZXMoJ1xcMCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBOb3JtYWxpemUgcGF0aHMgdG8gcmVzb2x2ZSBhbnkgJy4uJyBvciAnLicgc2VnbWVudHNcbiAgLy8gYW5kIGFkZCB0cmFpbGluZyBzbGFzaGVzXG4gIGxldCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZShyZWxhdGl2ZVBhdGgpXG4gIGxldCBub3JtYWxpemVkQ3dkID0gbm9ybWFsaXplKHJlbGF0aXZlQ3dkKVxuXG4gIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguZW5kc1dpdGgoc2VwKVxuICAgID8gbm9ybWFsaXplZFBhdGhcbiAgICA6IG5vcm1hbGl6ZWRQYXRoICsgc2VwXG4gIG5vcm1hbGl6ZWRDd2QgPSBub3JtYWxpemVkQ3dkLmVuZHNXaXRoKHNlcClcbiAgICA/IG5vcm1hbGl6ZWRDd2RcbiAgICA6IG5vcm1hbGl6ZWRDd2QgKyBzZXBcblxuICAvLyBKb2luIHdpdGggYSBiYXNlIGRpcmVjdG9yeSB0byBtYWtlIHRoZW0gYWJzb2x1dGUtbGlrZSBmb3IgY29tcGFyaXNvblxuICAvLyBVc2luZyAnZHVtbXknIGFzIGJhc2UgdG8gYXZvaWQgYW55IGFjdHVhbCBmaWxlIHN5c3RlbSBkZXBlbmRlbmNpZXNcbiAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlUGF0aChjd2QoKSwgbm9ybWFsaXplZEN3ZCwgbm9ybWFsaXplZFBhdGgpXG4gIGNvbnN0IGZ1bGxDd2QgPSByZXNvbHZlUGF0aChjd2QoKSwgbm9ybWFsaXplZEN3ZClcblxuICAvLyBDaGVjayBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCB0aGUgY3dkXG4gIHJldHVybiBmdWxsUGF0aC5zdGFydHNXaXRoKGZ1bGxDd2QpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGV4dENvbnRlbnQoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIG9mZnNldCA9IDAsXG4gIG1heExpbmVzPzogbnVtYmVyLFxuKTogeyBjb250ZW50OiBzdHJpbmc7IGxpbmVDb3VudDogbnVtYmVyOyB0b3RhbExpbmVzOiBudW1iZXIgfSB7XG4gIGNvbnN0IGVuYyA9IGRldGVjdEZpbGVFbmNvZGluZyhmaWxlUGF0aClcbiAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgZW5jKVxuICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKVxuXG4gIC8vIFRydW5jYXRlIG51bWJlciBvZiBsaW5lcyBpZiBuZWVkZWRcbiAgY29uc3QgdG9SZXR1cm4gPVxuICAgIG1heExpbmVzICE9PSB1bmRlZmluZWQgJiYgbGluZXMubGVuZ3RoIC0gb2Zmc2V0ID4gbWF4TGluZXNcbiAgICAgID8gbGluZXMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBtYXhMaW5lcylcbiAgICAgIDogbGluZXMuc2xpY2Uob2Zmc2V0KVxuXG4gIHJldHVybiB7XG4gICAgY29udGVudDogdG9SZXR1cm4uam9pbignXFxuJyksIC8vIFRPRE86IFRoaXMgcHJvYmFibHkgd29uJ3Qgd29yayBmb3IgV2luZG93c1xuICAgIGxpbmVDb3VudDogdG9SZXR1cm4ubGVuZ3RoLFxuICAgIHRvdGFsTGluZXM6IGxpbmVzLmxlbmd0aCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZXh0Q29udGVudChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICBlbmNvZGluZzogQnVmZmVyRW5jb2RpbmcsXG4gIGVuZGluZ3M6IExpbmVFbmRpbmdUeXBlLFxuKTogdm9pZCB7XG4gIGxldCB0b1dyaXRlID0gY29udGVudFxuICBpZiAoZW5kaW5ncyA9PT0gJ0NSTEYnKSB7XG4gICAgdG9Xcml0ZSA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpLmpvaW4oJ1xcclxcbicpXG4gIH1cblxuICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCB0b1dyaXRlLCB7IGVuY29kaW5nLCBmbHVzaDogdHJ1ZSB9KVxufVxuXG5jb25zdCByZXBvRW5kaW5nQ2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBMaW5lRW5kaW5nVHlwZT4oe1xuICBmZXRjaE1ldGhvZDogcGF0aCA9PiBkZXRlY3RSZXBvTGluZUVuZGluZ3NEaXJlY3QocGF0aCksXG4gIHR0bDogNSAqIDYwICogMTAwMCxcbiAgdHRsQXV0b3B1cmdlOiBmYWxzZSxcbiAgbWF4OiAxMDAwLFxufSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVjdFJlcG9MaW5lRW5kaW5ncyhcbiAgZmlsZVBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8TGluZUVuZGluZ1R5cGUgfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIHJlcG9FbmRpbmdDYWNoZS5mZXRjaChyZXNvbHZlKGZpbGVQYXRoKSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVjdFJlcG9MaW5lRW5kaW5nc0RpcmVjdChcbiAgY3dkOiBzdHJpbmcsXG4pOiBQcm9taXNlPExpbmVFbmRpbmdUeXBlPiB7XG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxuICB9LCAxXzAwMClcbiAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCBsaXN0QWxsQ29udGVudEZpbGVzKGN3ZCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCwgMTUpXG5cbiAgbGV0IGNybGZDb3VudCA9IDBcbiAgZm9yIChjb25zdCBmaWxlIG9mIGFsbEZpbGVzKSB7XG4gICAgY29uc3QgbGluZUVuZGluZyA9IGRldGVjdExpbmVFbmRpbmdzKGZpbGUpXG4gICAgaWYgKGxpbmVFbmRpbmcgPT09ICdDUkxGJykge1xuICAgICAgY3JsZkNvdW50KytcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JsZkNvdW50ID4gMyA/ICdDUkxGJyA6ICdMRidcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZnVuY3Rpb24gZmV0Y2g8SyBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+KFxuICBjYWNoZTogTFJVQ2FjaGU8SywgVj4sXG4gIGtleTogSyxcbiAgdmFsdWU6ICgpID0+IFYsXG4pOiBWIHtcbiAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChrZXkpIVxuICB9XG5cbiAgY29uc3QgdiA9IHZhbHVlKClcbiAgY2FjaGUuc2V0KGtleSwgdilcbiAgcmV0dXJuIHZcbn1cblxuY29uc3QgZmlsZUVuY29kaW5nQ2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBCdWZmZXJFbmNvZGluZz4oe1xuICBmZXRjaE1ldGhvZDogcGF0aCA9PiBkZXRlY3RGaWxlRW5jb2RpbmdEaXJlY3QocGF0aCksXG4gIHR0bDogNSAqIDYwICogMTAwMCxcbiAgdHRsQXV0b3B1cmdlOiBmYWxzZSxcbiAgbWF4OiAxMDAwLFxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEZpbGVFbmNvZGluZyhmaWxlUGF0aDogc3RyaW5nKTogQnVmZmVyRW5jb2Rpbmcge1xuICBjb25zdCBrID0gcmVzb2x2ZShmaWxlUGF0aClcbiAgcmV0dXJuIGZldGNoKGZpbGVFbmNvZGluZ0NhY2hlLCBrLCAoKSA9PiBkZXRlY3RGaWxlRW5jb2RpbmdEaXJlY3QoaykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RGaWxlRW5jb2RpbmdEaXJlY3QoZmlsZVBhdGg6IHN0cmluZyk6IEJ1ZmZlckVuY29kaW5nIHtcbiAgY29uc3QgQlVGRkVSX1NJWkUgPSA0MDk2XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhCVUZGRVJfU0laRSlcblxuICBsZXQgZmQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICB0cnkge1xuICAgIGZkID0gb3BlblN5bmMoZmlsZVBhdGgsICdyJylcbiAgICBjb25zdCBieXRlc1JlYWQgPSByZWFkU3luYyhmZCwgYnVmZmVyLCAwLCBCVUZGRVJfU0laRSwgMClcblxuICAgIGlmIChieXRlc1JlYWQgPj0gMikge1xuICAgICAgaWYgKGJ1ZmZlclswXSA9PT0gMHhmZiAmJiBidWZmZXJbMV0gPT09IDB4ZmUpIHJldHVybiAndXRmMTZsZSdcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBieXRlc1JlYWQgPj0gMyAmJlxuICAgICAgYnVmZmVyWzBdID09PSAweGVmICYmXG4gICAgICBidWZmZXJbMV0gPT09IDB4YmIgJiZcbiAgICAgIGJ1ZmZlclsyXSA9PT0gMHhiZlxuICAgICkge1xuICAgICAgcmV0dXJuICd1dGY4J1xuICAgIH1cblxuICAgIGNvbnN0IGlzVXRmOCA9IGJ1ZmZlci5zbGljZSgwLCBieXRlc1JlYWQpLnRvU3RyaW5nKCd1dGY4JykubGVuZ3RoID4gMFxuICAgIHJldHVybiBpc1V0ZjggPyAndXRmOCcgOiAnYXNjaWknXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nRXJyb3IoYEVycm9yIGRldGVjdGluZyBlbmNvZGluZyBmb3IgZmlsZSAke2ZpbGVQYXRofTogJHtlcnJvcn1gKVxuICAgIHJldHVybiAndXRmOCdcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoZmQpIGNsb3NlU3luYyhmZClcbiAgfVxufVxuXG5jb25zdCBsaW5lRW5kaW5nQ2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBMaW5lRW5kaW5nVHlwZT4oe1xuICBmZXRjaE1ldGhvZDogcGF0aCA9PiBkZXRlY3RMaW5lRW5kaW5nc0RpcmVjdChwYXRoKSxcbiAgdHRsOiA1ICogNjAgKiAxMDAwLFxuICB0dGxBdXRvcHVyZ2U6IGZhbHNlLFxuICBtYXg6IDEwMDAsXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TGluZUVuZGluZ3MoZmlsZVBhdGg6IHN0cmluZyk6IExpbmVFbmRpbmdUeXBlIHtcbiAgY29uc3QgayA9IHJlc29sdmUoZmlsZVBhdGgpXG4gIHJldHVybiBmZXRjaChsaW5lRW5kaW5nQ2FjaGUsIGssICgpID0+IGRldGVjdExpbmVFbmRpbmdzRGlyZWN0KGspKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TGluZUVuZGluZ3NEaXJlY3QoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIGVuY29kaW5nOiBCdWZmZXJFbmNvZGluZyA9ICd1dGY4Jyxcbik6IExpbmVFbmRpbmdUeXBlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoNDA5NilcbiAgICBjb25zdCBmZCA9IG9wZW5TeW5jKGZpbGVQYXRoLCAncicpXG4gICAgY29uc3QgYnl0ZXNSZWFkID0gcmVhZFN5bmMoZmQsIGJ1ZmZlciwgMCwgNDA5NiwgMClcbiAgICBjbG9zZVN5bmMoZmQpXG5cbiAgICBjb25zdCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKGVuY29kaW5nLCAwLCBieXRlc1JlYWQpXG4gICAgbGV0IGNybGZDb3VudCA9IDBcbiAgICBsZXQgbGZDb3VudCA9IDBcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNvbnRlbnRbaV0gPT09ICdcXG4nKSB7XG4gICAgICAgIGlmIChpID4gMCAmJiBjb250ZW50W2kgLSAxXSA9PT0gJ1xccicpIHtcbiAgICAgICAgICBjcmxmQ291bnQrK1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxmQ291bnQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNybGZDb3VudCA+IGxmQ291bnQgPyAnQ1JMRicgOiAnTEYnXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nRXJyb3IoYEVycm9yIGRldGVjdGluZyBsaW5lIGVuZGluZ3MgZm9yIGZpbGUgJHtmaWxlUGF0aH06ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gJ0xGJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGaWxlUGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYWJzb2x1dGVGaWxlUGF0aCA9IGlzQWJzb2x1dGUoZmlsZVBhdGgpXG4gICAgPyBmaWxlUGF0aFxuICAgIDogcmVzb2x2ZShnZXRDd2QoKSwgZmlsZVBhdGgpXG5cbiAgLy8gT25lIHdlaXJkIHRyaWNrIGZvciBoYWxmLXdpZHRoIHNwYWNlIGNoYXJhY3RlcnMgaW4gTWFjT1Mgc2NyZWVuc2hvdCBmaWxlbmFtZXNcbiAgaWYgKGFic29sdXRlRmlsZVBhdGguZW5kc1dpdGgoJyBBTS5wbmcnKSkge1xuICAgIHJldHVybiBhYnNvbHV0ZUZpbGVQYXRoLnJlcGxhY2UoXG4gICAgICAnIEFNLnBuZycsXG4gICAgICBgJHtTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMzkpfUFNLnBuZ2AsXG4gICAgKVxuICB9XG5cbiAgLy8gT25lIHdlaXJkIHRyaWNrIGZvciBoYWxmLXdpZHRoIHNwYWNlIGNoYXJhY3RlcnMgaW4gTWFjT1Mgc2NyZWVuc2hvdCBmaWxlbmFtZXNcbiAgaWYgKGFic29sdXRlRmlsZVBhdGguZW5kc1dpdGgoJyBQTS5wbmcnKSkge1xuICAgIHJldHVybiBhYnNvbHV0ZUZpbGVQYXRoLnJlcGxhY2UoXG4gICAgICAnIFBNLnBuZycsXG4gICAgICBgJHtTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMzkpfVBNLnBuZ2AsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGFic29sdXRlRmlsZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFic29sdXRlUGF0aChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGF0aCA/IChpc0Fic29sdXRlKHBhdGgpID8gcGF0aCA6IHJlc29sdmUoZ2V0Q3dkKCksIHBhdGgpKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzb2x1dGVBbmRSZWxhdGl2ZVBhdGhzKHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHtcbiAgYWJzb2x1dGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWRcbn0ge1xuICBjb25zdCBhYnNvbHV0ZVBhdGggPSBnZXRBYnNvbHV0ZVBhdGgocGF0aClcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gYWJzb2x1dGVQYXRoXG4gICAgPyByZWxhdGl2ZShnZXRDd2QoKSwgYWJzb2x1dGVQYXRoKVxuICAgIDogdW5kZWZpbmVkXG4gIHJldHVybiB7IGFic29sdXRlUGF0aCwgcmVsYXRpdmVQYXRoIH1cbn1cblxuLyoqXG4gKiBGaW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50IGV4dGVuc2lvbnMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5XG4gKiBAcGFyYW0gZmlsZVBhdGggVGhlIHBhdGggdG8gdGhlIGZpbGUgdGhhdCBkb2Vzbid0IGV4aXN0XG4gKiBAcmV0dXJucyBUaGUgZm91bmQgZmlsZSB3aXRoIGEgZGlmZmVyZW50IGV4dGVuc2lvbiwgb3IgdW5kZWZpbmVkIGlmIG5vbmUgZm91bmRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNpbWlsYXJGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpXG4gICAgY29uc3QgZmlsZUJhc2VOYW1lID0gYmFzZW5hbWUoZmlsZVBhdGgsIGV4dG5hbWUoZmlsZVBhdGgpKVxuXG4gICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGlmICghZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgY29uc3QgZmlsZXMgPSByZWFkZGlyU3luYyhkaXIpXG5cbiAgICAvLyBGaW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGJ1dCBkaWZmZXJlbnQgZXh0ZW5zaW9uXG4gICAgY29uc3Qgc2ltaWxhckZpbGVzID0gZmlsZXMuZmlsdGVyKFxuICAgICAgZmlsZSA9PlxuICAgICAgICBiYXNlbmFtZShmaWxlLCBleHRuYW1lKGZpbGUpKSA9PT0gZmlsZUJhc2VOYW1lICYmXG4gICAgICAgIGpvaW4oZGlyLCBmaWxlKSAhPT0gZmlsZVBhdGgsXG4gICAgKVxuXG4gICAgLy8gUmV0dXJuIGp1c3QgdGhlIGZpbGVuYW1lIG9mIHRoZSBmaXJzdCBtYXRjaCBpZiBmb3VuZFxuICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBzaW1pbGFyRmlsZXNbMF1cbiAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgcmV0dXJuIGZpcnN0TWF0Y2hcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEluIGNhc2Ugb2YgYW55IGVycm9ycywgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGxvZ0Vycm9yKGBFcnJvciBmaW5kaW5nIHNpbWlsYXIgZmlsZSBmb3IgJHtmaWxlUGF0aH06ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBBZGRzIGNhdCAtbiBzdHlsZSBsaW5lIG51bWJlcnMgdG8gdGhlIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExpbmVOdW1iZXJzKHtcbiAgY29udGVudCxcbiAgLy8gMS1pbmRleGVkXG4gIHN0YXJ0TGluZSxcbn06IHtcbiAgY29udGVudDogc3RyaW5nXG4gIHN0YXJ0TGluZTogbnVtYmVyXG59KTogc3RyaW5nIHtcbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gY29udGVudFxuICAgIC5zcGxpdCgvXFxyP1xcbi8pXG4gICAgLm1hcCgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGxpbmVOdW0gPSBpbmRleCArIHN0YXJ0TGluZVxuICAgICAgY29uc3QgbnVtU3RyID0gU3RyaW5nKGxpbmVOdW0pXG4gICAgICAvLyBIYW5kbGUgbGFyZ2UgbnVtYmVycyBkaWZmZXJlbnRseVxuICAgICAgaWYgKG51bVN0ci5sZW5ndGggPj0gNikge1xuICAgICAgICByZXR1cm4gYCR7bnVtU3RyfVxcdCR7bGluZX1gXG4gICAgICB9XG4gICAgICAvLyBSZWd1bGFyIG51bWJlcnMgZ2V0IHBhZGRpbmcgdG8gNiBjaGFyYWN0ZXJzXG4gICAgICBjb25zdCBuID0gbnVtU3RyLnBhZFN0YXJ0KDYsICcgJylcbiAgICAgIHJldHVybiBgJHtufVxcdCR7bGluZX1gXG4gICAgfSlcbiAgICAuam9pbignXFxuJykgLy8gVE9ETzogVGhpcyBwcm9iYWJseSB3b24ndCB3b3JrIGZvciBXaW5kb3dzXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZGlyZWN0b3J5IGlzIGVtcHR5IGJ5IGVmZmljaWVudGx5IHJlYWRpbmcganVzdCB0aGUgZmlyc3QgZW50cnlcbiAqIEBwYXJhbSBkaXJQYXRoIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RpckVtcHR5KGRpclBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRpciA9IG9wZW5kaXJTeW5jKGRpclBhdGgpXG4gICAgY29uc3QgZmlyc3RFbnRyeSA9IGRpci5yZWFkU3luYygpXG4gICAgZGlyLmNsb3NlU3luYygpXG4gICAgcmV0dXJuIGZpcnN0RW50cnkgPT09IG51bGxcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dFcnJvcihgRXJyb3IgY2hlY2tpbmcgZGlyZWN0b3J5OiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IGV4cGFuZCBmcm9tICdicmFjZS1leHBhbnNpb24nO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRQYXR0ZXJuIH0gZnJvbSAnLi9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyc7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICcuL2FzdC5qcyc7XG5pbXBvcnQgeyBlc2NhcGUgfSBmcm9tICcuL2VzY2FwZS5qcyc7XG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuZXhwb3J0IGNvbnN0IG1pbmltYXRjaCA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocCk7XG59O1xuLy8gT3B0aW1pemVkIGNoZWNraW5nIGZvciB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbmNvbnN0IHN0YXJEb3RFeHRSRSA9IC9eXFwqKyhbXitAIT9cXCpcXFtcXChdKikkLztcbmNvbnN0IHN0YXJEb3RFeHRUZXN0ID0gKGV4dCkgPT4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdERvdCA9IChleHQpID0+IChmKSA9PiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZSA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZURvdCA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RTdGFyUkUgPSAvXlxcKitcXC5cXCorJC87XG5jb25zdCBzdGFyRG90U3RhclRlc3QgPSAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdERvdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBkb3RTdGFyUkUgPSAvXlxcLlxcKiskLztcbmNvbnN0IGRvdFN0YXJUZXN0ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclJFID0gL15cXCorJC87XG5jb25zdCBzdGFyVGVzdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyVGVzdERvdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbmNvbnN0IHFtYXJrc1JFID0gL15cXD8rKFteK0AhP1xcKlxcW1xcKF0qKT8kLztcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2UgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZURvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0RG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0RG90ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xufTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzXG4gICAgPyAodHlwZW9mIHByb2Nlc3MuZW52ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBwcm9jZXNzLmVudiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX01JTklNQVRDSF9URVNUSU5HX1BMQVRGT1JNX18pIHx8XG4gICAgICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdwb3NpeCcpO1xuY29uc3QgcGF0aCA9IHtcbiAgICB3aW4zMjogeyBzZXA6ICdcXFxcJyB9LFxuICAgIHBvc2l4OiB7IHNlcDogJy8nIH0sXG59O1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydCBjb25zdCBzZXAgPSBkZWZhdWx0UGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoLndpbjMyLnNlcCA6IHBhdGgucG9zaXguc2VwO1xubWluaW1hdGNoLnNlcCA9IHNlcDtcbmV4cG9ydCBjb25zdCBHTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKTtcbm1pbmltYXRjaC5HTE9CU1RBUiA9IEdMT0JTVEFSO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyRG90ID0gJyg/Oig/ISg/OlxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcLykpLikqPyc7XG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcL3xeKVxcXFwuKS4pKj8nO1xuZXhwb3J0IGNvbnN0IGZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IChwKSA9PiBtaW5pbWF0Y2gocCwgcGF0dGVybiwgb3B0aW9ucyk7XG5taW5pbWF0Y2guZmlsdGVyID0gZmlsdGVyO1xuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYik7XG5leHBvcnQgY29uc3QgZGVmYXVsdHMgPSAoZGVmKSA9PiB7XG4gICAgaWYgKCFkZWYgfHwgdHlwZW9mIGRlZiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKGRlZikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBtaW5pbWF0Y2g7XG4gICAgfVxuICAgIGNvbnN0IG9yaWcgPSBtaW5pbWF0Y2g7XG4gICAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG0sIHtcbiAgICAgICAgTWluaW1hdGNoOiBjbGFzcyBNaW5pbWF0Y2ggZXh0ZW5kcyBvcmlnLk1pbmltYXRjaCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgZGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFTVDogY2xhc3MgQVNUIGV4dGVuZHMgb3JpZy5BU1Qge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHR5cGUsIHBhcmVudCwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5BU1QuZnJvbUdsb2IocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1bmVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy51bmVzY2FwZShzLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBmaWx0ZXI6IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcuZmlsdGVyKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZGVmYXVsdHM6IChvcHRpb25zKSA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWFrZVJlOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1ha2VSZShwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGJyYWNlRXhwYW5kOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmJyYWNlRXhwYW5kKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWF0Y2g6IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcubWF0Y2gobGlzdCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBzZXA6IG9yaWcuc2VwLFxuICAgICAgICBHTE9CU1RBUjogR0xPQlNUQVIsXG4gICAgfSk7XG59O1xubWluaW1hdGNoLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4vLyBCcmFjZSBleHBhbnNpb246XG4vLyBhe2IsY31kIC0+IGFiZCBhY2Rcbi8vIGF7Yix9YyAtPiBhYmMgYWNcbi8vIGF7MC4uM31kIC0+IGEwZCBhMWQgYTJkIGEzZFxuLy8gYXtiLGN7ZCxlfWZ9ZyAtPiBhYmcgYWNkZmcgYWNlZmdcbi8vIGF7YixjfWR7ZSxmfWcgLT4gYWJkZWcgYWNkZWcgYWJkZWcgYWJkZmdcbi8vXG4vLyBJbnZhbGlkIHNldHMgYXJlIG5vdCBleHBhbmRlZC5cbi8vIGF7Mi4ufWIgLT4gYXsyLi59YlxuLy8gYXtifWMgLT4gYXtifWNcbmV4cG9ydCBjb25zdCBicmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICAgIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICAgICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuZChwYXR0ZXJuKTtcbn07XG5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSBicmFjZUV4cGFuZDtcbi8vIHBhcnNlIGEgY29tcG9uZW50IG9mIHRoZSBleHBhbmRlZCBzZXQuXG4vLyBBdCB0aGlzIHBvaW50LCBubyBwYXR0ZXJuIG1heSBjb250YWluIFwiL1wiIGluIGl0XG4vLyBzbyB3ZSdyZSBnb2luZyB0byByZXR1cm4gYSAyZCBhcnJheSwgd2hlcmUgZWFjaCBlbnRyeSBpcyB0aGUgZnVsbFxuLy8gcGF0dGVybiwgc3BsaXQgb24gJy8nLCBhbmQgdGhlbiB0dXJuZWQgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbi8vIEEgcmVnZXhwIGlzIG1hZGUgYXQgdGhlIGVuZCB3aGljaCBqb2lucyBlYWNoIGFycmF5IHdpdGggYW5cbi8vIGVzY2FwZWQgLywgYW5kIGFub3RoZXIgZnVsbCBvbmUgd2hpY2ggam9pbnMgZWFjaCByZWdleHAgd2l0aCB8LlxuLy9cbi8vIEZvbGxvd2luZyB0aGUgbGVhZCBvZiBCYXNoIDQuMSwgbm90ZSB0aGF0IFwiKipcIiBvbmx5IGhhcyBzcGVjaWFsIG1lYW5pbmdcbi8vIHdoZW4gaXQgaXMgdGhlICpvbmx5KiB0aGluZyBpbiBhIHBhdGggcG9ydGlvbi4gIE90aGVyd2lzZSwgYW55IHNlcmllc1xuLy8gb2YgKiBpcyBlcXVpdmFsZW50IHRvIGEgc2luZ2xlICouICBHbG9ic3RhciBiZWhhdmlvciBpcyBlbmFibGVkIGJ5XG4vLyBkZWZhdWx0LCBhbmQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgb3B0aW9ucy5ub2dsb2JzdGFyLlxuZXhwb3J0IGNvbnN0IG1ha2VSZSA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWFrZVJlKCk7XG5taW5pbWF0Y2gubWFrZVJlID0gbWFrZVJlO1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSk7XG4gICAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgICAgICBsaXN0LnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufTtcbm1pbmltYXRjaC5tYXRjaCA9IG1hdGNoO1xuLy8gcmVwbGFjZSBzdHVmZiBsaWtlIFxcKiB3aXRoICpcbmNvbnN0IGdsb2JNYWdpYyA9IC9bPypdfFsrQCFdXFwoLio/XFwpfFxcW3xcXF0vO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbmV4cG9ydCBjbGFzcyBNaW5pbWF0Y2gge1xuICAgIG9wdGlvbnM7XG4gICAgc2V0O1xuICAgIHBhdHRlcm47XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgbm9uZWdhdGU7XG4gICAgbmVnYXRlO1xuICAgIGNvbW1lbnQ7XG4gICAgZW1wdHk7XG4gICAgcHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgcGFydGlhbDtcbiAgICBnbG9iU2V0O1xuICAgIGdsb2JQYXJ0cztcbiAgICBub2Nhc2U7XG4gICAgaXNXaW5kb3dzO1xuICAgIHBsYXRmb3JtO1xuICAgIHdpbmRvd3NOb01hZ2ljUm9vdDtcbiAgICByZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKTtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5pc1dpbmRvd3MgPSB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID1cbiAgICAgICAgICAgICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fCBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgPSAhIW9wdGlvbnMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgICAgIHRoaXMucmVnZXhwID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub25lZ2F0ZSA9ICEhb3B0aW9ucy5ub25lZ2F0ZTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWw7XG4gICAgICAgIHRoaXMubm9jYXNlID0gISF0aGlzLm9wdGlvbnMubm9jYXNlO1xuICAgICAgICB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdFxuICAgICAgICAgICAgICAgIDogISEodGhpcy5pc1dpbmRvd3MgJiYgdGhpcy5ub2Nhc2UpO1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXQgPSBbXTtcbiAgICAgICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgICAgICB0aGlzLm1ha2UoKTtcbiAgICB9XG4gICAgaGFzTWFnaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFnaWNhbEJyYWNlcyAmJiB0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWJ1ZyguLi5fKSB7IH1cbiAgICBtYWtlKCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgICAgIHRoaXMucGFyc2VOZWdhdGUoKTtcbiAgICAgICAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gICAgICAgIHRoaXMuZ2xvYlNldCA9IFsuLi5uZXcgU2V0KHRoaXMuYnJhY2VFeHBhbmQoKSldO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JTZXQpO1xuICAgICAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2ZcbiAgICAgICAgLy8gcGF0aC1wb3J0aW9uIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgICAgICAvLyBUaGVzZSB3aWxsIGJlIHJlZ2V4cHMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBcIioqXCIsIHdoaWNoIGlzXG4gICAgICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAgICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgICAgICAvL1xuICAgICAgICAvLyBGaXJzdCwgd2UgcHJlcHJvY2VzcyB0byBtYWtlIHRoZSBnbG9iIHBhdHRlcm4gc2V0cyBhIGJpdCBzaW1wbGVyXG4gICAgICAgIC8vIGFuZCBkZWR1cGVkLiAgVGhlcmUgYXJlIHNvbWUgcGVyZi1raWxsaW5nIHBhdHRlcm5zIHRoYXQgY2FuIGNhdXNlXG4gICAgICAgIC8vIHByb2JsZW1zIHdpdGggYSBnbG9iIHdhbGssIGJ1dCB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBkb3duIGEgYml0LlxuICAgICAgICBjb25zdCByYXdHbG9iUGFydHMgPSB0aGlzLmdsb2JTZXQubWFwKHMgPT4gdGhpcy5zbGFzaFNwbGl0KHMpKTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSB0aGlzLnByZXByb2Nlc3MocmF3R2xvYlBhcnRzKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuZ2xvYlBhcnRzKTtcbiAgICAgICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5nbG9iUGFydHMubWFwKChzLCBfLCBfXykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMud2luZG93c05vTWFnaWNSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIGRyaXZlIG9yIHVuYyBwYXRoLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVU5DID0gc1swXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgc1sxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNbMl0gPT09ICc/JyB8fCAhZ2xvYk1hZ2ljLnRlc3Qoc1syXSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFnbG9iTWFnaWMudGVzdChzWzNdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RyaXZlID0gL15bYS16XTovaS50ZXN0KHNbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1VOQykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnMuc2xpY2UoMCwgNCksIC4uLnMuc2xpY2UoNCkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRHJpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzWzBdLCAuLi5zLnNsaWNlKDEpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KTtcbiAgICAgICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgICAgIHRoaXMuc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKTtcbiAgICAgICAgLy8gZG8gbm90IHRyZWF0IHRoZSA/IGluIFVOQyBwYXRocyBhcyBtYWdpY1xuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5zZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYlBhcnRzW2ldWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFsyXSA9ICc/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuc2V0KTtcbiAgICB9XG4gICAgLy8gdmFyaW91cyB0cmFuc2Zvcm1zIHRvIGVxdWl2YWxlbnQgcGF0dGVybiBzZXRzIHRoYXQgYXJlXG4gICAgLy8gZmFzdGVyIHRvIHByb2Nlc3MgaW4gYSBmaWxlc3lzdGVtIHdhbGsuICBUaGUgZ29hbCBpcyB0b1xuICAgIC8vIGVsaW1pbmF0ZSB3aGF0IHdlIGNhbiwgYW5kIHB1c2ggYWxsICoqIHBhdHRlcm5zIGFzIGZhclxuICAgIC8vIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZSwgZXZlbiBpZiBpdCBpbmNyZWFzZXMgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhdHRlcm5zIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzLlxuICAgIHByZXByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBnbG9ic3RhciBtb2RlLCB0aGVuIHR1cm4gYWxsICoqIGludG8gKlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYlBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iUGFydHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JQYXJ0c1tpXVtqXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldW2pdID0gJyonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZnMgd2Fsa2luZ1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5maXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpO1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5zZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBqdXN0IGJhc2ljIG9wdGltaXphdGlvbnMgdG8gcmVtb3ZlIHNvbWUgLi4gcGFydHNcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMubGV2ZWxPbmVPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8ganVzdCBjb2xsYXBzZSBtdWx0aXBsZSAqKiBwb3J0aW9ucyBpbnRvIG9uZVxuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5hZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8ganVzdCBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBwb3J0aW9uc1xuICAgIGFkamFzY2VudEdsb2JzdGFyT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBncztcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbaSArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgaSAtIGdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBhbmQgcmVzb2x2ZSAuLiBwb3J0aW9uc1xuICAgIGxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMucmVkdWNlKChzZXQsIHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2V0W3NldC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJyoqJyAmJiBwcmV2ID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICcuLicgJiYgcHJldiAhPT0gJy4nICYmIHByZXYgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXZlbFR3b0ZpbGVPcHRpbWl6ZShwYXJ0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFydHMpKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHRoaXMuc2xhc2hTcGxpdChwYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICYmIHAgIT09ICcuJyAmJiBwICE9PSAnLi4nICYmIHAgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgIH1cbiAgICAvLyBGaXJzdCBwaGFzZTogc2luZ2xlLXBhdHRlcm4gcHJvY2Vzc2luZ1xuICAgIC8vIDxwcmU+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxyZXN0PiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cD4gaXMgYW55IHBvcnRpb24gb3RoZXIgdGhhbiAuLCAuLiwgJycsIG9yICoqXG4gICAgLy8gPGU+IGlzIC4gb3IgJydcbiAgICAvL1xuICAgIC8vICoqLy4uIGlzICpicnV0YWwqIGZvciBmaWxlc3lzdGVtIHdhbGtpbmcgcGVyZm9ybWFuY2UsIGJlY2F1c2VcbiAgICAvLyBpdCBlZmZlY3RpdmVseSByZXNldHMgdGhlIHJlY3Vyc2l2ZSB3YWxrIGVhY2ggdGltZSBpdCBvY2N1cnMsXG4gICAgLy8gYW5kICoqIGNhbm5vdCBiZSByZWR1Y2VkIG91dCBieSBhIC4uIHBhdHRlcm4gcGFydCBsaWtlIGEgcmVnZXhwXG4gICAgLy8gb3IgbW9zdCBzdHJpbmdzIChvdGhlciB0aGFuIC4uLCAuLCBhbmQgJycpIGNhbiBiZS5cbiAgICAvL1xuICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gKiovKiovPHJlc3Q+IC0+ICoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gKiovKi88cmVzdD4gLT4gKi8qKi88cmVzdD4gPD09IG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZXNuJ3QgZm9sbG93XG4gICAgLy8gdGhpcyBXT1VMRCBiZSBhbGxvd2VkIGlmICoqIGRpZCBmb2xsb3cgc3ltbGlua3MsIG9yICogZGlkbid0XG4gICAgZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJ0cyBvZiBnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChncyA9IHBhcnRzLmluZGV4T2YoJyoqJywgZ3MgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdzcyA9IGdzO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbZ3NzICsgMV0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwcmU+LyoqLyoqLzxyZXN0PiAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdzcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVnLCBpZiBncyBpcyAyIGFuZCBnc3MgaXMgNCwgdGhhdCBtZWFucyB3ZSBoYXZlIDMgKipcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydHMsIGFuZCBjYW4gcmVtb3ZlIDIgb2YgdGhlbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdzcyA+IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MgKyAxLCBnc3MgLSBncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBwYXJ0c1tncyArIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZ3MgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSBwYXJ0c1tncyArIDNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZWRpdCBwYXJ0cyBpbiBwbGFjZSwgYW5kIHB1c2ggdGhlIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSBwYXJ0cy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZ3NdID0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnB1c2gob3RoZXIpO1xuICAgICAgICAgICAgICAgICAgICBncy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3F1ZWV6ZSBvdXQgVU5DIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gJy4nIHx8IHAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZGQgPSBwYXJ0cy5pbmRleE9mKCcuLicsIGRkICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZERvdCA9IGRkID09PSAxICYmIHBhcnRzW2RkICsgMV0gPT09ICcqKic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpbiA9IG5lZWREb3QgPyBbJy4nXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMiwgLi4uc3BsaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIHNlY29uZCBwaGFzZTogbXVsdGktcGF0dGVybiBkZWR1cGVzXG4gICAgLy8gezxwcmU+LyovPHJlc3Q+LDxwcmU+LzxwPi88cmVzdD59IC0+IDxwcmU+LyovPHJlc3Q+XG4gICAgLy8gezxwcmU+LzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvL1xuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vKiovPHA+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy8gXi0tIG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZW5zJ3QgZm9sbG93IHN5bWxpbmtzXG4gICAgc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGdsb2JQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLnBhcnRzTWF0Y2goZ2xvYlBhcnRzW2ldLCBnbG9iUGFydHNbal0sICF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2pdID0gbWF0Y2hlZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMuZmlsdGVyKGdzID0+IGdzLmxlbmd0aCk7XG4gICAgfVxuICAgIHBhcnRzTWF0Y2goYSwgYiwgZW1wdHlHU01hdGNoID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGFpID0gMDtcbiAgICAgICAgbGV0IGJpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgd2hpY2ggPSAnJztcbiAgICAgICAgd2hpbGUgKGFpIDwgYS5sZW5ndGggJiYgYmkgPCBiLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFbYWldID09PSBiW2JpXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdoaWNoID09PSAnYicgPyBiW2JpXSA6IGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYVthaV0gPT09ICcqKicgJiYgYltiaV0gPT09IGFbYWkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGJbYmldID09PSAnKionICYmIGFbYWldID09PSBiW2JpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFbYWldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFiW2JpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYltiaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdiJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2EnO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiW2JpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYVthaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYVthaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGFbYWldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdiJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLCBpdCBtZWFucyB0aGV5IHR3byBhcmUgaWRlbnRpY2FsXG4gICAgICAgIC8vIGFzIGxvbmcgYXMgdGhlaXIgbGVuZ3RocyBtYXRjaFxuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHJlc3VsdDtcbiAgICB9XG4gICAgcGFyc2VOZWdhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vbmVnYXRlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgICAgICAgbmVnYXRlID0gIW5lZ2F0ZTtcbiAgICAgICAgICAgIG5lZ2F0ZU9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWdhdGVPZmZzZXQpXG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldCk7XG4gICAgICAgIHRoaXMubmVnYXRlID0gbmVnYXRlO1xuICAgIH1cbiAgICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAgIC8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuICAgIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgICAvLyB0aGUgcGFydHMgbWF0Y2guXG4gICAgbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIFVOQyBwYXRocyBsaWtlIC8vPy9YOi8uLi4gY2FuIG1hdGNoIFg6Ly4uLiBhbmQgdmljZSB2ZXJzYVxuICAgICAgICAvLyBEcml2ZSBsZXR0ZXJzIGluIGFic29sdXRlIGRyaXZlIG9yIHVuYyBwYXRocyBhcmUgYWx3YXlzIGNvbXBhcmVkXG4gICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRHJpdmUgPSB0eXBlb2YgZmlsZVswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChmaWxlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVTkMgPSAhZmlsZURyaXZlICYmXG4gICAgICAgICAgICAgICAgZmlsZVswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QoZmlsZVszXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRHJpdmUgPSB0eXBlb2YgcGF0dGVyblswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5VTkMgPSAhcGF0dGVybkRyaXZlICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXR0ZXJuWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblszXSk7XG4gICAgICAgICAgICBjb25zdCBmZGkgPSBmaWxlVU5DID8gMyA6IGZpbGVEcml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwZGkgPSBwYXR0ZXJuVU5DID8gMyA6IHBhdHRlcm5Ecml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZkaSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHBkaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZmQsIHBkXSA9IFtmaWxlW2ZkaV0sIHBhdHRlcm5bcGRpXV07XG4gICAgICAgICAgICAgICAgaWYgKGZkLnRvTG93ZXJDYXNlKCkgPT09IHBkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldID0gZmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZGkgPiBmZGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKHBkaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmRpID4gcGRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5zbGljZShmZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHJlZHVjZSAuIGFuZCAuLiBwb3J0aW9ucyBpbiB0aGUgZmlsZSBhcyB3ZWxsLlxuICAgICAgICAvLyBkb250JyBuZWVkIHRvIGRvIHRoZSBzZWNvbmQgcGhhc2UsIGJlY2F1c2UgaXQncyBvbmx5IG9uZSBzdHJpbmdbXVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgZmlsZSA9IHRoaXMubGV2ZWxUd29GaWxlT3B0aW1pemUoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCB0aGlzLCB7IGZpbGUsIHBhdHRlcm4gfSk7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgZmkgPSAwLCBwaSA9IDAsIGZsID0gZmlsZS5sZW5ndGgsIHBsID0gcGF0dGVybi5sZW5ndGg7IGZpIDwgZmwgJiYgcGkgPCBwbDsgZmkrKywgcGkrKykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpO1xuICAgICAgICAgICAgdmFyIHAgPSBwYXR0ZXJuW3BpXTtcbiAgICAgICAgICAgIHZhciBmID0gZmlsZVtmaV07XG4gICAgICAgICAgICB0aGlzLmRlYnVnKHBhdHRlcm4sIHAsIGYpO1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAgICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmIChwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAocCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSk7XG4gICAgICAgICAgICAgICAgLy8gXCIqKlwiXG4gICAgICAgICAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIGEveC95L3ovYi9jXG4gICAgICAgICAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgICAgICAgICAvLyBhL2IvY1xuICAgICAgICAgICAgICAgIC8vIFRvIGRvIHRoaXMsIHRha2UgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYWZ0ZXJcbiAgICAgICAgICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAgICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAvLyBJZiBub3QsIHRoZSAqKiBcInN3YWxsb3dzXCIgYSBzZWdtZW50LCBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyBtYXRjaGluZyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgIC0gbWF0Y2hPbmUoYi94L3kvei9jLCBiLyoqL2MpXG4gICAgICAgICAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh4L3kvei9jLCBjKSAtPiBub1xuICAgICAgICAgICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZShjLCBjKSB5ZXMsIGhpdFxuICAgICAgICAgICAgICAgIHZhciBmciA9IGZpO1xuICAgICAgICAgICAgICAgIHZhciBwciA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJyoqIGF0IHRoZSBlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgICAgICAgICAgICAvLyAuIGFuZCAuLiBhcmUgKm5ldmVyKiBtYXRjaGVkIGJ5ICoqLCBmb3IgZXhwbG9zaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIGZpbGVbZmldLmNoYXJBdCgwKSA9PT0gJy4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICAgICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoT25lKGZpbGUuc2xpY2UoZnIpLCBwYXR0ZXJuLnNsaWNlKHByKSwgcGFydGlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIGZvdW5kIG1hdGNoIScsIGZyLCBmbCwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHN3YWxsb3cgXCIuXCIgb3IgXCIuLlwiIGV2ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gb25seSBzd2FsbG93IFwiLmZvb1wiIHdoZW4gZXhwbGljaXRseSBhc2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2FsbG93ZWUgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2RvdCBkZXRlY3RlZCEnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcisrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCBpbiBwYXJ0aWFsIG1vZGUsIHdlIGNhbid0IHNheSB0aGlzIGlzIG5lY2Vzc2FyaWx5IG92ZXIuXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnIgPT09IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBvdGhlciB0aGFuICoqXG4gICAgICAgICAgICAvLyBub24tbWFnaWMgcGF0dGVybnMganVzdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgICAgICAgICBsZXQgaGl0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGhpdCA9IGYgPT09IHA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Zygnc3RyaW5nIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpdCA9IHAudGVzdChmKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdwYXR0ZXJuIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAgICAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgICAgIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAgICAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgICAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuICAgICAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAgICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4sIHN0aWxsIGhhdmUgZmlsZSBsZWZ0LlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgICAgICAgICAgLy8gZW1wdHkgc2VnbWVudCBvZiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICAgICAgLy8gYS8qIHNob3VsZCBtYXRjaCBhL2IvXG4gICAgICAgICAgICByZXR1cm4gZmkgPT09IGZsIC0gMSAmJiBmaWxlW2ZpXSA9PT0gJyc7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIGJyYWNlRXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gYnJhY2VFeHBhbmQodGhpcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShwYXR0ZXJuKSB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gc2hvcnRjdXRzXG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnKionKVxuICAgICAgICAgICAgcmV0dXJuIEdMT0JTVEFSO1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8vIGZhciBhbmQgYXdheSwgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybiBwYXJ0cyBhcmVcbiAgICAgICAgLy8gKiwgKi4qLCBhbmQgKi48ZXh0PiAgQWRkIGEgZmFzdCBjaGVjayBtZXRob2QgZm9yIHRob3NlLlxuICAgICAgICBsZXQgbTtcbiAgICAgICAgbGV0IGZhc3RUZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJUZXN0RG90IDogc3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RFeHRSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgICAgICA/IHN0YXJEb3RFeHRUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3QpKG1bMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChxbWFya3NSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdCkobSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJEb3RTdGFyVGVzdERvdCA6IHN0YXJEb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goZG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gZG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBBU1QuZnJvbUdsb2IocGF0dGVybiwgdGhpcy5vcHRpb25zKS50b01NUGF0dGVybigpO1xuICAgICAgICBpZiAoZmFzdFRlc3QgJiYgdHlwZW9mIHJlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gQXZvaWRzIG92ZXJyaWRpbmcgaW4gZnJvemVuIGVudmlyb25tZW50c1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZSwgJ3Rlc3QnLCB7IHZhbHVlOiBmYXN0VGVzdCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmU7XG4gICAgfVxuICAgIG1ha2VSZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgICAgIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgICAgICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgICAgICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHR3b1N0YXIgPSBvcHRpb25zLm5vZ2xvYnN0YXJcbiAgICAgICAgICAgID8gc3RhclxuICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgID8gdHdvU3RhckRvdFxuICAgICAgICAgICAgICAgIDogdHdvU3Rhck5vRG90O1xuICAgICAgICBjb25zdCBmbGFncyA9IG5ldyBTZXQob3B0aW9ucy5ub2Nhc2UgPyBbJ2knXSA6IFtdKTtcbiAgICAgICAgLy8gcmVnZXhwaWZ5IG5vbi1nbG9ic3RhciBwYXR0ZXJuc1xuICAgICAgICAvLyBpZiAqKiBpcyBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgICAgICAvLyBpZiAqKiBpcyBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAgICAgLy8gaWYgKiogaXMgbGFzdCwgYXBwZW5kIChcXC90d29TdGFyfCkgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gaWYgKiogaXMgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gdGhlbiBmaWx0ZXIgb3V0IEdMT0JTVEFSIHN5bWJvbHNcbiAgICAgICAgbGV0IHJlID0gc2V0XG4gICAgICAgICAgICAubWFwKHBhdHRlcm4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwYXR0ZXJuLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgcC5mbGFncy5zcGxpdCgnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hZGQoZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgICAgICAgICAgICAgOiBwID09PSBHTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBHTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwLl9zcmM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBwLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcHBbaSArIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBwcFtpIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHAgIT09IEdMT0JTVEFSIHx8IHByZXYgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQgIT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSAnKD86XFxcXC98JyArIHR3b1N0YXIgKyAnXFxcXC8pPycgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaV0gPSB0d29TdGFyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBwcFtpIC0gMV0gPSBwcmV2ICsgJyg/OlxcXFwvfCcgKyB0d29TdGFyICsgJyk/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCAhPT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJ1xcXFwvKScgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSBHTE9CU1RBUjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwcC5maWx0ZXIocCA9PiBwICE9PSBHTE9CU1RBUikuam9pbignLycpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gbmVlZCB0byB3cmFwIGluIHBhcmVucyBpZiB3ZSBoYWQgbW9yZSB0aGFuIG9uZSB0aGluZyB3aXRoIHwsXG4gICAgICAgIC8vIG90aGVyd2lzZSBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIGFuY2hvcmVkIHRvIF4gYW5kIHRoZSBsYXN0IHRvICRcbiAgICAgICAgY29uc3QgW29wZW4sIGNsb3NlXSA9IHNldC5sZW5ndGggPiAxID8gWycoPzonLCAnKSddIDogWycnLCAnJ107XG4gICAgICAgIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgICAgICAgLy8gZW5kaW5nIGluIGEgKiBvciAqKiB3aWxsIG1ha2UgaXQgbGVzcyBzdHJpY3QuXG4gICAgICAgIHJlID0gJ14nICsgb3BlbiArIHJlICsgY2xvc2UgKyAnJCc7XG4gICAgICAgIC8vIGNhbiBtYXRjaCBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIG5vdCB0aGlzLlxuICAgICAgICBpZiAodGhpcy5uZWdhdGUpXG4gICAgICAgICAgICByZSA9ICdeKD8hJyArIHJlICsgJykuKyQnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBbLi4uZmxhZ3NdLmpvaW4oJycpKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGVcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgIH1cbiAgICBzbGFzaFNwbGl0KHApIHtcbiAgICAgICAgLy8gaWYgcCBzdGFydHMgd2l0aCAvLyBvbiB3aW5kb3dzLCB3ZSBwcmVzZXJ2ZSB0aGF0XG4gICAgICAgIC8vIHNvIHRoYXQgVU5DIHBhdGhzIGFyZW4ndCBicm9rZW4uICBPdGhlcndpc2UsIGFueSBudW1iZXIgb2ZcbiAgICAgICAgLy8gLyBjaGFyYWN0ZXJzIGFyZSBjb2FsZXNjZWQgaW50byBvbmUsIHVubGVzc1xuICAgICAgICAvLyBwcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcyBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgaWYgKHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBwLnNwbGl0KCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc1dpbmRvd3MgJiYgL15cXC9cXC9bXlxcL10rLy50ZXN0KHApKSB7XG4gICAgICAgICAgICAvLyBhZGQgYW4gZXh0cmEgJycgZm9yIHRoZSBvbmUgd2UgbG9zZVxuICAgICAgICAgICAgcmV0dXJuIFsnJywgLi4ucC5zcGxpdCgvXFwvKy8pXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwLnNwbGl0KC9cXC8rLyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWF0Y2goZiwgcGFydGlhbCA9IHRoaXMucGFydGlhbCkge1xuICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaCcsIGYsIHRoaXMucGF0dGVybik7XG4gICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaW4gdGhlIGNhc2Ugb2YgYnVzdGVkIHRoaW5ncy5cbiAgICAgICAgLy8gY29tbWVudHMsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZiA9PT0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYgPT09ICcvJyAmJiBwYXJ0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyB3aW5kb3dzOiBuZWVkIHRvIHVzZSAvLCBub3QgXFxcbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBmID0gZi5zcGxpdCgnXFxcXCcpLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0cmVhdCB0aGUgdGVzdCBwYXRoIGFzIGEgc2V0IG9mIHBhdGhwYXJ0cy5cbiAgICAgICAgY29uc3QgZmYgPSB0aGlzLnNsYXNoU3BsaXQoZik7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc3BsaXQnLCBmZik7XG4gICAgICAgIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgICAgICAgLy8gbWF0Y2ggbWVhbnMgdGhhdCB3ZSBoYXZlIGZhaWxlZC5cbiAgICAgICAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0O1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NldCcsIHNldCk7XG4gICAgICAgIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gICAgICAgIGxldCBmaWxlbmFtZSA9IGZmW2ZmLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoIWZpbGVuYW1lKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmYubGVuZ3RoIC0gMjsgIWZpbGVuYW1lICYmIGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmZltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHNldFtpXTtcbiAgICAgICAgICAgIGxldCBmaWxlID0gZmY7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXRjaEJhc2UgJiYgcGF0dGVybi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gW2ZpbGVuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMubWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCk7XG4gICAgICAgICAgICBpZiAoaGl0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmxpcE5lZ2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLm5lZ2F0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBoaXRzLiAgdGhpcyBpcyBzdWNjZXNzIGlmIGl0J3MgYSBuZWdhdGl2ZVxuICAgICAgICAvLyBwYXR0ZXJuLCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmxpcE5lZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5lZ2F0ZTtcbiAgICB9XG4gICAgc3RhdGljIGRlZmF1bHRzKGRlZikge1xuICAgICAgICByZXR1cm4gbWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoO1xuICAgIH1cbn1cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuZXhwb3J0IHsgQVNUIH0gZnJvbSAnLi9hc3QuanMnO1xuZXhwb3J0IHsgZXNjYXBlIH0gZnJvbSAnLi9lc2NhcGUuanMnO1xuZXhwb3J0IHsgdW5lc2NhcGUgfSBmcm9tICcuL3VuZXNjYXBlLmpzJztcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5taW5pbWF0Y2guQVNUID0gQVNUO1xubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbm1pbmltYXRjaC5lc2NhcGUgPSBlc2NhcGU7XG5taW5pbWF0Y2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiY29uc3QgTUFYX1BBVFRFUk5fTEVOR1RIID0gMTAyNCAqIDY0O1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkUGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdHRlcm4gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMubWFwIiwKICAgICIvLyB0cmFuc2xhdGUgdGhlIHZhcmlvdXMgcG9zaXggY2hhcmFjdGVyIGNsYXNzZXMgaW50byB1bmljb2RlIHByb3BlcnRpZXNcbi8vIHRoaXMgd29ya3MgYWNyb3NzIGFsbCB1bmljb2RlIGxvY2FsZXNcbi8vIHsgPHBvc2l4IGNsYXNzPjogWzx0cmFuc2xhdGlvbj4sIC91IGZsYWcgcmVxdWlyZWQsIG5lZ2F0ZWRdXG5jb25zdCBwb3NpeENsYXNzZXMgPSB7XG4gICAgJ1s6YWxudW06XSc6IFsnXFxcXHB7TH1cXFxccHtObH1cXFxccHtOZH0nLCB0cnVlXSxcbiAgICAnWzphbHBoYTpdJzogWydcXFxccHtMfVxcXFxwe05sfScsIHRydWVdLFxuICAgICdbOmFzY2lpOl0nOiBbJ1xcXFx4JyArICcwMC1cXFxceCcgKyAnN2YnLCBmYWxzZV0sXG4gICAgJ1s6Ymxhbms6XSc6IFsnXFxcXHB7WnN9XFxcXHQnLCB0cnVlXSxcbiAgICAnWzpjbnRybDpdJzogWydcXFxccHtDY30nLCB0cnVlXSxcbiAgICAnWzpkaWdpdDpdJzogWydcXFxccHtOZH0nLCB0cnVlXSxcbiAgICAnWzpncmFwaDpdJzogWydcXFxccHtafVxcXFxwe0N9JywgdHJ1ZSwgdHJ1ZV0sXG4gICAgJ1s6bG93ZXI6XSc6IFsnXFxcXHB7TGx9JywgdHJ1ZV0sXG4gICAgJ1s6cHJpbnQ6XSc6IFsnXFxcXHB7Q30nLCB0cnVlXSxcbiAgICAnWzpwdW5jdDpdJzogWydcXFxccHtQfScsIHRydWVdLFxuICAgICdbOnNwYWNlOl0nOiBbJ1xcXFxwe1p9XFxcXHRcXFxcclxcXFxuXFxcXHZcXFxcZicsIHRydWVdLFxuICAgICdbOnVwcGVyOl0nOiBbJ1xcXFxwe0x1fScsIHRydWVdLFxuICAgICdbOndvcmQ6XSc6IFsnXFxcXHB7TH1cXFxccHtObH1cXFxccHtOZH1cXFxccHtQY30nLCB0cnVlXSxcbiAgICAnWzp4ZGlnaXQ6XSc6IFsnQS1GYS1mMC05JywgZmFsc2VdLFxufTtcbi8vIG9ubHkgbmVlZCB0byBlc2NhcGUgYSBmZXcgdGhpbmdzIGluc2lkZSBvZiBicmFjZSBleHByZXNzaW9uc1xuLy8gZXNjYXBlczogWyBcXCBdIC1cbmNvbnN0IGJyYWNlRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvW1tcXF1cXFxcLV0vZywgJ1xcXFwkJicpO1xuLy8gZXNjYXBlIGFsbCByZWdleHAgbWFnaWMgY2hhcmFjdGVyc1xuY29uc3QgcmVnZXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbi8vIGV2ZXJ5dGhpbmcgaGFzIGFscmVhZHkgYmVlbiBlc2NhcGVkLCB3ZSBqdXN0IGhhdmUgdG8gam9pblxuY29uc3QgcmFuZ2VzVG9TdHJpbmcgPSAocmFuZ2VzKSA9PiByYW5nZXMuam9pbignJyk7XG4vLyB0YWtlcyBhIGdsb2Igc3RyaW5nIGF0IGEgcG9zaXggYnJhY2UgZXhwcmVzc2lvbiwgYW5kIHJldHVybnNcbi8vIGFuIGVxdWl2YWxlbnQgcmVndWxhciBleHByZXNzaW9uIHNvdXJjZSwgYW5kIGJvb2xlYW4gaW5kaWNhdGluZ1xuLy8gd2hldGhlciB0aGUgL3UgZmxhZyBuZWVkcyB0byBiZSBhcHBsaWVkLCBhbmQgdGhlIG51bWJlciBvZiBjaGFyc1xuLy8gY29uc3VtZWQgdG8gcGFyc2UgdGhlIGNoYXJhY3RlciBjbGFzcy5cbi8vIFRoaXMgYWxzbyByZW1vdmVzIG91dCBvZiBvcmRlciByYW5nZXMsIGFuZCByZXR1cm5zICgkLikgaWYgdGhlXG4vLyBlbnRpcmUgY2xhc3MganVzdCBubyBnb29kLlxuZXhwb3J0IGNvbnN0IHBhcnNlQ2xhc3MgPSAoZ2xvYiwgcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBwb3MgPSBwb3NpdGlvbjtcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBpZiAoZ2xvYi5jaGFyQXQocG9zKSAhPT0gJ1snKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGluIGEgYnJhY2UgZXhwcmVzc2lvbicpO1xuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuICAgIGNvbnN0IG5lZ3MgPSBbXTtcbiAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgbGV0IHNhd1N0YXJ0ID0gZmFsc2U7XG4gICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgIGxldCBlbmRQb3MgPSBwb3M7XG4gICAgbGV0IHJhbmdlU3RhcnQgPSAnJztcbiAgICBXSElMRTogd2hpbGUgKGkgPCBnbG9iLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgIGlmICgoYyA9PT0gJyEnIHx8IGMgPT09ICdeJykgJiYgaSA9PT0gcG9zICsgMSkge1xuICAgICAgICAgICAgbmVnYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXScgJiYgc2F3U3RhcnQgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICBlbmRQb3MgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNhd1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2NhcGVkIFxcIGNoYXIsIGZhbGwgdGhyb3VnaCBhbmQgdHJlYXQgbGlrZSBub3JtYWwgY2hhclxuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnWycgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICAvLyBlaXRoZXIgYSBwb3NpeCBjbGFzcywgYSBjb2xsYXRpb24gZXF1aXZhbGVudCwgb3IganVzdCBhIFtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NscywgW3VuaXAsIHUsIG5lZ11dIG9mIE9iamVjdC5lbnRyaWVzKHBvc2l4Q2xhc3NlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKGNscywgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCwgW2EtW10gaXMgZmluZSwgYnV0IG5vdCBbYS1bOmFscGhhXV1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpICs9IGNscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWdzLnB1c2godW5pcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IHU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIFdISUxFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgaXQncyBqdXN0IGEgbm9ybWFsIGNoYXJhY3RlciwgZWZmZWN0aXZlbHlcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIHRocm93IHRoaXMgcmFuZ2UgYXdheSBpZiBpdCdzIG5vdCB2YWxpZCwgYnV0IG90aGVyc1xuICAgICAgICAgICAgLy8gY2FuIHN0aWxsIG1hdGNoLlxuICAgICAgICAgICAgaWYgKGMgPiByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUocmFuZ2VTdGFydCkgKyAnLScgKyBicmFjZUVzY2FwZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmFuZ2VTdGFydCA9ICcnO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IG1pZ2h0IGJlIHRoZSBzdGFydCBvZiBhIHJhbmdlLlxuICAgICAgICAvLyBjYW4gYmUgZWl0aGVyIGMtZCBvciBjLV0gb3IgYzxtb3JlLi4uPl0gb3IgY10gYXQgdGhpcyBwb2ludFxuICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKCctXScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYyArICctJykpO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IGM7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UsIGp1c3QgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoZW5kUG9zIDwgaSkge1xuICAgICAgICAvLyBkaWRuJ3Qgc2VlIHRoZSBlbmQgb2YgdGhlIGNsYXNzLCBub3QgYSB2YWxpZCBjbGFzcyxcbiAgICAgICAgLy8gYnV0IG1pZ2h0IHN0aWxsIGJlIHZhbGlkIGFzIGEgbGl0ZXJhbCBtYXRjaC5cbiAgICAgICAgcmV0dXJuIFsnJywgZmFsc2UsIDAsIGZhbHNlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG5vIHJhbmdlcyBhbmQgbm8gbmVnYXRlcywgdGhlbiB3ZSBoYXZlIGEgcmFuZ2UgdGhhdFxuICAgIC8vIGNhbm5vdCBwb3NzaWJseSBtYXRjaCBhbnl0aGluZywgYW5kIHRoYXQgcG9pc29ucyB0aGUgd2hvbGUgZ2xvYlxuICAgIGlmICghcmFuZ2VzLmxlbmd0aCAmJiAhbmVncy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFsnJC4nLCBmYWxzZSwgZ2xvYi5sZW5ndGggLSBwb3MsIHRydWVdO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBnb3Qgb25lIHBvc2l0aXZlIHJhbmdlLCBhbmQgaXQncyBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZW4gdGhhdCdzXG4gICAgLy8gbm90IGFjdHVhbGx5IGEgbWFnaWMgcGF0dGVybiwgaXQncyBqdXN0IHRoYXQgb25lIGxpdGVyYWwgY2hhcmFjdGVyLlxuICAgIC8vIHdlIHNob3VsZCBub3QgdHJlYXQgdGhhdCBhcyBcIm1hZ2ljXCIsIHdlIHNob3VsZCBqdXN0IHJldHVybiB0aGUgbGl0ZXJhbFxuICAgIC8vIGNoYXJhY3Rlci4gW19dIGlzIGEgcGVyZmVjdGx5IHZhbGlkIHdheSB0byBlc2NhcGUgZ2xvYiBtYWdpYyBjaGFycy5cbiAgICBpZiAobmVncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgcmFuZ2VzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAvXlxcXFw/LiQvLnRlc3QocmFuZ2VzWzBdKSAmJlxuICAgICAgICAhbmVnYXRlKSB7XG4gICAgICAgIGNvbnN0IHIgPSByYW5nZXNbMF0ubGVuZ3RoID09PSAyID8gcmFuZ2VzWzBdLnNsaWNlKC0xKSA6IHJhbmdlc1swXTtcbiAgICAgICAgcmV0dXJuIFtyZWdleHBFc2NhcGUociksIGZhbHNlLCBlbmRQb3MgLSBwb3MsIGZhbHNlXTtcbiAgICB9XG4gICAgY29uc3Qgc3JhbmdlcyA9ICdbJyArIChuZWdhdGUgPyAnXicgOiAnJykgKyByYW5nZXNUb1N0cmluZyhyYW5nZXMpICsgJ10nO1xuICAgIGNvbnN0IHNuZWdzID0gJ1snICsgKG5lZ2F0ZSA/ICcnIDogJ14nKSArIHJhbmdlc1RvU3RyaW5nKG5lZ3MpICsgJ10nO1xuICAgIGNvbnN0IGNvbWIgPSByYW5nZXMubGVuZ3RoICYmIG5lZ3MubGVuZ3RoXG4gICAgICAgID8gJygnICsgc3JhbmdlcyArICd8JyArIHNuZWdzICsgJyknXG4gICAgICAgIDogcmFuZ2VzLmxlbmd0aFxuICAgICAgICAgICAgPyBzcmFuZ2VzXG4gICAgICAgICAgICA6IHNuZWdzO1xuICAgIHJldHVybiBbY29tYiwgdWZsYWcsIGVuZFBvcyAtIHBvcywgdHJ1ZV07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJhY2UtZXhwcmVzc2lvbnMuanMubWFwIiwKICAgICIvKipcbiAqIFVuLWVzY2FwZSBhIHN0cmluZyB0aGF0IGhhcyBiZWVuIGVzY2FwZWQgd2l0aCB7QGxpbmsgZXNjYXBlfS5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIHdpbmRvd3NQYXRoc05vRXNjYXBlfSBvcHRpb24gaXMgdXNlZCwgdGhlbiBzcXVhcmUtYnJhY2VcbiAqIGVzY2FwZXMgYXJlIHJlbW92ZWQsIGJ1dCBub3QgYmFja3NsYXNoIGVzY2FwZXMuICBGb3IgZXhhbXBsZSwgaXQgd2lsbCB0dXJuXG4gKiB0aGUgc3RyaW5nIGAnWypdJ2AgaW50byBgKmAsIGJ1dCBpdCB3aWxsIG5vdCB0dXJuIGAnXFxcXConYCBpbnRvIGAnKidgLFxuICogYmVjdWFzZSBgXFxgIGlzIGEgcGF0aCBzZXBhcmF0b3IgaW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBtb2RlLlxuICpcbiAqIFdoZW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBpcyBub3Qgc2V0LCB0aGVuIGJvdGggYnJhY2UgZXNjYXBlcyBhbmRcbiAqIGJhY2tzbGFzaCBlc2NhcGVzIGFyZSByZW1vdmVkLlxuICpcbiAqIFNsYXNoZXMgKGFuZCBiYWNrc2xhc2hlcyBpbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUpIGNhbm5vdCBiZSBlc2NhcGVkXG4gKiBvciB1bmVzY2FwZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZVxuICAgICAgICA/IHMucmVwbGFjZSgvXFxbKFteXFwvXFxcXF0pXFxdL2csICckMScpXG4gICAgICAgIDogcy5yZXBsYWNlKC8oKD8hXFxcXCkufF4pXFxbKFteXFwvXFxcXF0pXFxdL2csICckMSQyJykucmVwbGFjZSgvXFxcXChbXlxcL10pL2csICckMScpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXNjYXBlLmpzLm1hcCIsCiAgICAiLy8gcGFyc2UgYSBzaW5nbGUgcGF0aCBwb3J0aW9uXG5pbXBvcnQgeyBwYXJzZUNsYXNzIH0gZnJvbSAnLi9icmFjZS1leHByZXNzaW9ucy5qcyc7XG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuY29uc3QgdHlwZXMgPSBuZXcgU2V0KFsnIScsICc/JywgJysnLCAnKicsICdAJ10pO1xuY29uc3QgaXNFeHRnbG9iVHlwZSA9IChjKSA9PiB0eXBlcy5oYXMoYyk7XG4vLyBQYXR0ZXJucyB0aGF0IGdldCBwcmVwZW5kZWQgdG8gYmluZCB0byB0aGUgc3RhcnQgb2YgZWl0aGVyIHRoZVxuLy8gZW50aXJlIHN0cmluZywgb3IganVzdCBhIHNpbmdsZSBwYXRoIHBvcnRpb24sIHRvIHByZXZlbnQgZG90c1xuLy8gYW5kL29yIHRyYXZlcnNhbCBwYXR0ZXJucywgd2hlbiBuZWVkZWQuXG4vLyBFeHRzIGRvbid0IG5lZWQgdGhlIF4gb3IgLyBiaXQsIGJlY2F1c2UgdGhlIHJvb3QgYmluZHMgdGhhdCBhbHJlYWR5LlxuY29uc3Qgc3RhcnROb1RyYXZlcnNhbCA9ICcoPyEoPzpefC8pXFxcXC5cXFxcLj8oPzokfC8pKSc7XG5jb25zdCBzdGFydE5vRG90ID0gJyg/IVxcXFwuKSc7XG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgYSBzdGFydCBvZiBwYXR0ZXJuIG5lZWRzIHRoZSBcIm5vIGRvdHNcIiBiaXQsXG4vLyBiZWNhdXNlIGEgZG90ICptaWdodCogYmUgbWF0Y2hlZC4gKCBpcyBub3QgaW4gdGhlIGxpc3QsIGJlY2F1c2UgaW5cbi8vIHRoZSBjYXNlIG9mIGEgY2hpbGQgZXh0Z2xvYiwgaXQgd2lsbCBoYW5kbGUgdGhlIHByZXZlbnRpb24gaXRzZWxmLlxuY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gbmV3IFNldChbJ1snLCAnLiddKTtcbi8vIGNhc2VzIHdoZXJlIHRyYXZlcnNhbCBpcyBBLU9LLCBubyBkb3QgcHJldmVudGlvbiBuZWVkZWRcbmNvbnN0IGp1c3REb3RzID0gbmV3IFNldChbJy4uJywgJy4nXSk7XG5jb25zdCByZVNwZWNpYWxzID0gbmV3IFNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKTtcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuY29uc3QgcW1hcmsgPSAnW14vXSc7XG4vLyAqID0+IGFueSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuY29uc3Qgc3RhciA9IHFtYXJrICsgJyo/Jztcbi8vIHVzZSArIHdoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCAqc29tZXRoaW5nKiBtYXRjaGVzLCBiZWNhdXNlIHRoZSAqIGlzXG4vLyB0aGUgb25seSB0aGluZyBpbiB0aGUgcGF0aCBwb3J0aW9uLlxuY29uc3Qgc3Rhck5vRW1wdHkgPSBxbWFyayArICcrPyc7XG4vLyByZW1vdmUgdGhlIFxcIGNoYXJzIHRoYXQgd2UgYWRkZWQgaWYgd2UgZW5kIHVwIGRvaW5nIGEgbm9ubWFnaWMgY29tcGFyZVxuLy8gY29uc3QgZGVzbGFzaCA9IChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuZXhwb3J0IGNsYXNzIEFTVCB7XG4gICAgdHlwZTtcbiAgICAjcm9vdDtcbiAgICAjaGFzTWFnaWM7XG4gICAgI3VmbGFnID0gZmFsc2U7XG4gICAgI3BhcnRzID0gW107XG4gICAgI3BhcmVudDtcbiAgICAjcGFyZW50SW5kZXg7XG4gICAgI25lZ3M7XG4gICAgI2ZpbGxlZE5lZ3MgPSBmYWxzZTtcbiAgICAjb3B0aW9ucztcbiAgICAjdG9TdHJpbmc7XG4gICAgLy8gc2V0IHRvIHRydWUgaWYgaXQncyBhbiBleHRnbG9iIHdpdGggbm8gY2hpbGRyZW5cbiAgICAvLyAod2hpY2ggcmVhbGx5IG1lYW5zIG9uZSBjaGlsZCBvZiAnJylcbiAgICAjZW1wdHlFeHQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAvLyBleHRnbG9icyBhcmUgaW5oZXJlbnRseSBtYWdpY2FsXG4gICAgICAgIGlmICh0eXBlKVxuICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICB0aGlzLiNwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuI3Jvb3QgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3Jvb3QgOiB0aGlzO1xuICAgICAgICB0aGlzLiNvcHRpb25zID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IG9wdGlvbnMgOiB0aGlzLiNyb290LiNvcHRpb25zO1xuICAgICAgICB0aGlzLiNuZWdzID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IFtdIDogdGhpcy4jcm9vdC4jbmVncztcbiAgICAgICAgaWYgKHR5cGUgPT09ICchJyAmJiAhdGhpcy4jcm9vdC4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHRoaXMuI25lZ3MucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy4jcGFyZW50SW5kZXggPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNNYWdpYygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiNoYXNNYWdpYyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc01hZ2ljO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocC50eXBlIHx8IHAuaGFzTWFnaWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNoYXNNYWdpYyA9IHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGU6IHdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIHdlIGdlbmVyYXRlIHRoZSByZWdleHAgc3JjIGFuZCBmaW5kIG91dFxuICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgfVxuICAgIC8vIHJlY29uc3RydWN0cyB0aGUgcGF0dGVyblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAodGhpcy4jdG9TdHJpbmcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiN0b1N0cmluZztcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPSB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPVxuICAgICAgICAgICAgICAgIHRoaXMudHlwZSArICcoJyArIHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignfCcpICsgJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjZmlsbE5lZ3MoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcyAhPT0gdGhpcy4jcm9vdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG9ubHkgY2FsbCBvbiByb290Jyk7XG4gICAgICAgIGlmICh0aGlzLiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIC8vIGNhbGwgdG9TdHJpbmcoKSBvbmNlIHRvIGZpbGwgdGhpcyBvdXRcbiAgICAgICAgdGhpcy50b1N0cmluZygpO1xuICAgICAgICB0aGlzLiNmaWxsZWROZWdzID0gdHJ1ZTtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHdoaWxlICgobiA9IHRoaXMuI25lZ3MucG9wKCkpKSB7XG4gICAgICAgICAgICBpZiAobi50eXBlICE9PSAnIScpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlLCBhcHBlbmRpbmcgZXZlcnRoaW5nIHRoYXQgY29tZXMgQUZURVIgcGFyZW50SW5kZXhcbiAgICAgICAgICAgIGxldCBwID0gbjtcbiAgICAgICAgICAgIGxldCBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIHdoaWxlIChwcCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwLiNwYXJlbnRJbmRleCArIDE7ICFwcC50eXBlICYmIGkgPCBwcC4jcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG4uI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBwYXJ0IGluIGV4dGdsb2IgQVNUPz8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNvcHlJbihwcC4jcGFydHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAgPSBwcDtcbiAgICAgICAgICAgICAgICBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcHVzaCguLi5wYXJ0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAnJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJyAmJiAhKHAgaW5zdGFuY2VvZiBBU1QgJiYgcC4jcGFyZW50ID09PSB0aGlzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXJ0OiAnICsgcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jcGFydHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMudHlwZSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLiNwYXJ0cy5zbGljZSgpLm1hcChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyBwIDogcC50b0pTT04oKSkpXG4gICAgICAgICAgICA6IFt0aGlzLnR5cGUsIC4uLnRoaXMuI3BhcnRzLm1hcChwID0+IHAudG9KU09OKCkpXTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpICYmICF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXQudW5zaGlmdChbXSk7XG4gICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICh0aGlzID09PSB0aGlzLiNyb290IHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI3Jvb3QuI2ZpbGxlZE5lZ3MgJiYgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlzU3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmICh0aGlzLnR5cGUpIHJldHVybiAhIXRoaXMuI3BhcmVudD8uaXNTdGFydCgpXG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc1N0YXJ0KCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnRJbmRleCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiBldmVyeXRoaW5nIEFIRUFEIG9mIHRoaXMgaXMgYSBuZWdhdGlvbiwgdGhlbiBpdCdzIHN0aWxsIHRoZSBcInN0YXJ0XCJcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhcmVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNwYXJlbnRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwcCA9IHAuI3BhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKCEocHAgaW5zdGFuY2VvZiBBU1QgJiYgcHAudHlwZSA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNFbmQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5pc0VuZCgpO1xuICAgICAgICAvLyBpZiBub3Qgcm9vdCwgaXQnbGwgYWx3YXlzIGhhdmUgYSBwYXJlbnRcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGFyZW50ID8gdGhpcy4jcGFyZW50LiNwYXJ0cy5sZW5ndGggOiAwO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50SW5kZXggPT09IHBsIC0gMTtcbiAgICB9XG4gICAgY29weUluKHBhcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQuY2xvbmUodGhpcykpO1xuICAgIH1cbiAgICBjbG9uZShwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IG5ldyBBU1QodGhpcy50eXBlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGMuY29weUluKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlQVNUKHN0ciwgYXN0LCBwb3MsIG9wdCkge1xuICAgICAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNlU3RhcnQgPSAtMTtcbiAgICAgICAgbGV0IGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgIGlmIChhc3QudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhIGV4dGdsb2IsIGFwcGVuZCB1bnRpbCB3ZSBmaW5kIGEgc3RhcnRcbiAgICAgICAgICAgIGxldCBpID0gcG9zO1xuICAgICAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0cyB0aGF0IGFyZSBlc2NhcGVkXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5CcmFjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICddJyAmJiAhKGkgPT09IGJyYWNlU3RhcnQgKyAyICYmIGJyYWNlTmVnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW9wdC5ub2V4dCAmJiBpc0V4dGdsb2JUeXBlKGMpICYmIHN0ci5jaGFyQXQoaSkgPT09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iLCBwb3MgaXMgYXQgdGhlIChcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCB8IG9yIClcbiAgICAgICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgICAgICBsZXQgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckF0KGkrKyk7XG4gICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgIGlmIChlc2NhcGluZyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGJyYWNlU3RhcnQgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnfCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgQVNUKG51bGwsIGFzdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjYyA9PT0gJycgJiYgYXN0LiNwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0LiNlbXB0eUV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIGFzdC5wdXNoKC4uLnBhcnRzLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVuZmluaXNoZWQgZXh0Z2xvYlxuICAgICAgICAvLyBpZiB3ZSBnb3QgaGVyZSwgaXQgd2FzIGEgbWFsZm9ybWVkIGV4dGdsb2IhIG5vdCBhbiBleHRnbG9iLCBidXRcbiAgICAgICAgLy8gbWF5YmUgc29tZXRoaW5nIGVsc2UgaW4gdGhlcmUuXG4gICAgICAgIGFzdC50eXBlID0gbnVsbDtcbiAgICAgICAgYXN0LiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgYXN0LiNwYXJ0cyA9IFtzdHIuc3Vic3RyaW5nKHBvcyAtIDEpXTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYXN0ID0gbmV3IEFTVChudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgICAgICBBU1QuI3BhcnNlQVNUKHBhdHRlcm4sIGFzdCwgMCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBhc3Q7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB0aGVyZSdzIG1hZ2ljLCBvciB0aGUgdW5lc2NhcGVkXG4gICAgLy8gc3RyaW5nIGlmIG5vdC5cbiAgICB0b01NUGF0dGVybigpIHtcbiAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHJvb3RcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvb3QudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgY29uc3QgZ2xvYiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgW3JlLCBib2R5LCBoYXNNYWdpYywgdWZsYWddID0gdGhpcy50b1JlZ0V4cFNvdXJjZSgpO1xuICAgICAgICAvLyBpZiB3ZSdyZSBpbiBub2Nhc2UgbW9kZSwgYW5kIG5vdCBub2Nhc2VNYWdpY09ubHksIHRoZW4gd2UgZG9cbiAgICAgICAgLy8gc3RpbGwgbmVlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB3ZSBoYXZlIHRvIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAgICAvLyBtYXRjaCBjYXBpdGFsL2xvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBjb25zdCBhbnlNYWdpYyA9IGhhc01hZ2ljIHx8XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyB8fFxuICAgICAgICAgICAgKHRoaXMuI29wdGlvbnMubm9jYXNlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI29wdGlvbnMubm9jYXNlTWFnaWNPbmx5ICYmXG4gICAgICAgICAgICAgICAgZ2xvYi50b1VwcGVyQ2FzZSgpICE9PSBnbG9iLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWFueU1hZ2ljKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLiNvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnKSArICh1ZmxhZyA/ICd1JyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cChgXiR7cmV9JGAsIGZsYWdzKSwge1xuICAgICAgICAgICAgX3NyYzogcmUsXG4gICAgICAgICAgICBfZ2xvYjogZ2xvYixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jb3B0aW9ucztcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoLCB0aGUgcmVnZXhwIHNvdXJjZSwgd2hldGhlciB0aGVyZSdzIG1hZ2ljXG4gICAgLy8gaW4gdGhlIHJlZ2V4cCAoc28gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQpIGFuZCB3aGV0aGVyIG9yXG4gICAgLy8gbm90IHRoZSB1ZmxhZyBpcyBuZWVkZWQgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGZvciBwb3NpeCBjbGFzc2VzKVxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaW5qZWN0aW5nIHRoZSBzdGFydC9lbmQgYXQgdGhpcyBwb2ludCwganVzdCByZXR1cm5cbiAgICAvLyB0aGUgQk9EWSBvZiB0aGUgcmVnZXhwLCBhbG9uZyB3aXRoIHRoZSBzdGFydC9lbmQgcG9ydGlvbnMgc3VpdGFibGVcbiAgICAvLyBmb3IgYmluZGluZyB0aGUgc3RhcnQvZW5kIGluIGVpdGhlciBhIGpvaW5lZCBmdWxsLXBhdGggbWFrZVJlIGNvbnRleHRcbiAgICAvLyAod2hlcmUgd2UgYmluZCB0byAoXnwvKSwgb3IgYSBzdGFuZGFsb25lIG1hdGNoUGFydCBjb250ZXh0ICh3aGVyZVxuICAgIC8vIHdlIGJpbmQgdG8gXiwgYW5kIG5vdCAvKS4gIE90aGVyd2lzZSBzbGFzaGVzIGdldCBkdXBlZCFcbiAgICAvL1xuICAgIC8vIEluIHBhcnQtbWF0Y2hpbmcgbW9kZSwgdGhlIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiBeKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiBeXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogXig/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNFbmQoKTogbm90aGluZ1xuICAgIC8vIC0gZWxzZTogJFxuICAgIC8vXG4gICAgLy8gSW4gZnVsbC1wYXRoIG1hdGNoaW5nIG1vZGUsIHdlIHB1dCB0aGUgc2xhc2ggYXQgdGhlIFNUQVJUIG9mIHRoZVxuICAgIC8vIHBhdHRlcm4sIHNvIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgZmlyc3QgcGF0dGVybjogc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGlmIG5vdCBpc1N0YXJ0KCk6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAvKD8hXFwuXFwuPyg/OiR8LykpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAvXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogLyg/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBsYXN0IHBhdHRlcm4sIHNhbWUgYXMgcGFydC1tYXRjaGluZyBtb2RlXG4gICAgLy8gLSBlbHNlIG5vdGhpbmdcbiAgICAvL1xuICAgIC8vIEFsd2F5cyBwdXQgdGhlICg/OiR8Lykgb24gbmVnYXRlZCB0YWlscywgdGhvdWdoLCBiZWNhdXNlIHRoYXQgaGFzIHRvIGJlXG4gICAgLy8gdGhlcmUgdG8gYmluZCB0aGUgZW5kIG9mIHRoZSBuZWdhdGVkIHBhdHRlcm4gcG9ydGlvbiwgYW5kIGl0J3MgZWFzaWVyIHRvXG4gICAgLy8ganVzdCBzdGljayBpdCBpbiBub3cgcmF0aGVyIHRoYW4gdHJ5IHRvIGluamVjdCBpdCBsYXRlciBpbiB0aGUgbWlkZGxlIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgLy9cbiAgICAvLyBXZSBjYW4ganVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVuZCwgYW5kIGxlYXZlIGl0IHVwIHRvIHRoZSBjYWxsZXJcbiAgICAvLyB0byBrbm93IHdoZXRoZXIgaXQncyBnb2luZyB0byBiZSB1c2VkIGpvaW5lZCBvciBpbiBwYXJ0cy5cbiAgICAvLyBBbmQsIGlmIHRoZSBzdGFydCBpcyBhZGp1c3RlZCBzbGlnaHRseSwgY2FuIGRvIHRoZSBzYW1lIHRoZXJlOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAoPzovfF4pXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogKD86L3xeKSg/IVxcLilcbiAgICAvL1xuICAgIC8vIEJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGEgc2ltcGxlciBiaW5kaW5nIHdpdGhvdXQgYSBjb25kaXRpb25hbCwgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UsIHNvIHByb2JhYmx5IGJldHRlciB0byByZXR1cm4gYm90aCBzdGFydCBvcHRpb25zLlxuICAgIC8vXG4gICAgLy8gVGhlbiB0aGUgY2FsbGVyIGp1c3QgaWdub3JlcyB0aGUgZW5kIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXR0ZXJuLFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgYWx3YXlzIGdldHMgYXBwbGllZC5cbiAgICAvL1xuICAgIC8vIEJ1dCB0aGF0J3MgYWx3YXlzIGdvaW5nIHRvIGJlICQgaWYgaXQncyB0aGUgZW5kaW5nIHBhdHRlcm4sIG9yIG5vdGhpbmcsXG4gICAgLy8gc28gdGhlIGNhbGxlciBjYW4ganVzdCBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gYnVpbGRpbmcuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgdG9kbyBpczpcbiAgICAvLyAtIGJldHRlciBkZXRlY3Qgd2hhdCBraW5kIG9mIHN0YXJ0IGlzIG5lZWRlZFxuICAgIC8vIC0gcmV0dXJuIGJvdGggZmxhdm9ycyBvZiBzdGFydGluZyBwYXR0ZXJuXG4gICAgLy8gLSBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gY3JlYXRpbmcgdGhlIGFjdHVhbCBSZWdFeHBcbiAgICAvL1xuICAgIC8vIEFoLCBidXQgd2FpdCwgbm8sIHRoYXQgYWxsIG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdCB3aGVuIHRoZSBmaXJzdCBwYXR0ZXJuXG4gICAgLy8gaXMgbm90IGFuIGV4dGdsb2IuIElmIHRoZSBmaXJzdCBwYXR0ZXJuIElTIGFuIGV4dGdsb2IsIHRoZW4gd2UgbmVlZCBhbGxcbiAgICAvLyB0aGF0IGRvdCBwcmV2ZW50aW9uIGJpeiB0byBsaXZlIGluIHRoZSBleHRnbG9iIHBvcnRpb25zLCBiZWNhdXNlIGVnXG4gICAgLy8gKygqfC54KikgY2FuIG1hdGNoIC54eSBidXQgbm90IC55eC5cbiAgICAvL1xuICAgIC8vIFNvLCByZXR1cm4gdGhlIHR3byBmbGF2b3JzIGlmIGl0J3MgI3Jvb3QgYW5kIHRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYW5cbiAgICAvLyBBU1QsIG90aGVyd2lzZSBsZWF2ZSBpdCB0byB0aGUgY2hpbGQgQVNUIHRvIGhhbmRsZSBpdCwgYW5kIHRoZXJlLFxuICAgIC8vIHVzZSB0aGUgKD86XnwvKSBzdHlsZSBvZiBzdGFydCBiaW5kaW5nLlxuICAgIC8vXG4gICAgLy8gRXZlbiBzaW1wbGlmaWVkIGZ1cnRoZXI6XG4gICAgLy8gLSBTaW5jZSB0aGUgc3RhcnQgZm9yIGEgam9pbiBpcyBlZyAvKD8hXFwuKSBhbmQgdGhlIHN0YXJ0IGZvciBhIHBhcnRcbiAgICAvLyBpcyBeKD8hXFwuKSwgd2UgY2FuIGp1c3QgcHJlcGVuZCAoPyFcXC4pIHRvIHRoZSBwYXR0ZXJuIChlaXRoZXIgcm9vdFxuICAgIC8vIG9yIHN0YXJ0IG9yIHdoYXRldmVyKSBhbmQgcHJlcGVuZCBeIG9yIC8gYXQgdGhlIFJlZ2V4cCBjb25zdHJ1Y3Rpb24uXG4gICAgdG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpIHtcbiAgICAgICAgY29uc3QgZG90ID0gYWxsb3dEb3QgPz8gISF0aGlzLiNvcHRpb25zLmRvdDtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICB0aGlzLiNmaWxsTmVncygpO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9FbXB0eSA9IHRoaXMuaXNTdGFydCgpICYmIHRoaXMuaXNFbmQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmUsIF8sIGhhc01hZ2ljLCB1ZmxhZ10gPSB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBBU1QuI3BhcnNlR2xvYihwLCB0aGlzLiNoYXNNYWdpYywgbm9FbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgOiBwLnRvUmVnRXhwU291cmNlKGFsbG93RG90KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRoaXMuI2hhc01hZ2ljIHx8IGhhc01hZ2ljO1xuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy4jcGFydHNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IHdpbGwgbWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBkb3RzIGFuZCBzdWNoLlxuICAgICAgICAgICAgICAgICAgICAvLyAnLicgYW5kICcuLicgY2Fubm90IG1hdGNoIHVubGVzcyB0aGUgcGF0dGVybiBpcyB0aGF0IGV4YWN0bHksXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgaXQgc3RhcnRzIHdpdGggLiBvciBkb3Q6dHJ1ZSBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdFRyYXZBbGxvd2VkID0gdGhpcy4jcGFydHMubGVuZ3RoID09PSAxICYmIGp1c3REb3RzLmhhcyh0aGlzLiNwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG90VHJhdkFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcyA9IGFkZFBhdHRlcm5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSBwb3NzaWJpbGl0eSBvZiBtYXRjaGluZyAuIG9yIC4uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHByZXZlbnQgdGhhdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb1RyYXYgPSBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvdHMgYXJlIGFsbG93ZWQsIGFuZCB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgIChkb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBcXC4sIGFuZCB0aGVuIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMuc3RhcnRzV2l0aCgnXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMikpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLlxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLlxcXFwuJykgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDQpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHByZXZlbnQgZG90cyBpZiBpdCBjYW4ndCBtYXRjaCBhIGRvdCwgb3IgaWYgYVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViLXBhdHRlcm4gd2lsbCBiZSBwcmV2ZW50aW5nIGl0IGFueXdheS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb0RvdCA9ICFkb3QgJiYgIWFsbG93RG90ICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5lZWROb1RyYXYgPyBzdGFydE5vVHJhdmVyc2FsIDogbmVlZE5vRG90ID8gc3RhcnROb0RvdCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBcImVuZCBvZiBwYXRoIHBvcnRpb25cIiBwYXR0ZXJuIHRvIG5lZ2F0aW9uIHRhaWxzXG4gICAgICAgICAgICBsZXQgZW5kID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gJyg/OiR8XFxcXC8pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbmFsID0gc3RhcnQgKyBzcmMgKyBlbmQ7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgICAgIHVuZXNjYXBlKHNyYyksXG4gICAgICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBib2R5ICp0d2ljZSogaWYgaXQncyBhIHJlcGVhdCBwYXR0ZXJuXG4gICAgICAgIC8vIGF0IHRoZSBzdGFydCwgb25jZSBpbiBub2RvdCBtb2RlLCB0aGVuIGFnYWluIGluIGRvdCBtb2RlLCBzbyBhXG4gICAgICAgIC8vIHBhdHRlcm4gbGlrZSAqKD8pIGNhbiBtYXRjaCAneC55J1xuICAgICAgICBjb25zdCByZXBlYXRlZCA9IHRoaXMudHlwZSA9PT0gJyonIHx8IHRoaXMudHlwZSA9PT0gJysnO1xuICAgICAgICAvLyBzb21lIGtpbmQgb2YgZXh0Z2xvYlxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMudHlwZSA9PT0gJyEnID8gJyg/Oig/ISg/OicgOiAnKD86JztcbiAgICAgICAgbGV0IGJvZHkgPSB0aGlzLiNwYXJ0c1RvUmVnRXhwKGRvdCk7XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkgJiYgIWJvZHkgJiYgdGhpcy50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIC8vIGludmFsaWQgZXh0Z2xvYiwgaGFzIHRvIGF0IGxlYXN0IGJlICpzb21ldGhpbmcqIHByZXNlbnQsIGlmIGl0J3NcbiAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgcGF0aCBwb3J0aW9uLlxuICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuI3BhcnRzID0gW3NdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIFtzLCB1bmVzY2FwZSh0aGlzLnRvU3RyaW5nKCkpLCBmYWxzZSwgZmFsc2VdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFhYWCBhYnN0cmFjdCBvdXQgdGhpcyBtYXAgbWV0aG9kXG4gICAgICAgIGxldCBib2R5RG90QWxsb3dlZCA9ICFyZXBlYXRlZCB8fCBhbGxvd0RvdCB8fCBkb3QgfHwgIXN0YXJ0Tm9Eb3RcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogdGhpcy4jcGFydHNUb1JlZ0V4cCh0cnVlKTtcbiAgICAgICAgaWYgKGJvZHlEb3RBbGxvd2VkID09PSBib2R5KSB7XG4gICAgICAgICAgICBib2R5RG90QWxsb3dlZCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5RG90QWxsb3dlZCkge1xuICAgICAgICAgICAgYm9keSA9IGAoPzoke2JvZHl9KSg/OiR7Ym9keURvdEFsbG93ZWR9KSo/YDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhbiBlbXB0eSAhKCkgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGEgc3Rhck5vRW1wdHlcbiAgICAgICAgbGV0IGZpbmFsID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICchJyAmJiB0aGlzLiNlbXB0eUV4dCkge1xuICAgICAgICAgICAgZmluYWwgPSAodGhpcy5pc1N0YXJ0KCkgJiYgIWRvdCA/IHN0YXJ0Tm9Eb3QgOiAnJykgKyBzdGFyTm9FbXB0eTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlID0gdGhpcy50eXBlID09PSAnISdcbiAgICAgICAgICAgICAgICA/IC8vICEoKSBtdXN0IG1hdGNoIHNvbWV0aGluZyxidXQgISh4KSBjYW4gbWF0Y2ggJydcbiAgICAgICAgICAgICAgICAgICAgJykpJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5pc1N0YXJ0KCkgJiYgIWRvdCAmJiAhYWxsb3dEb3QgPyBzdGFydE5vRG90IDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICdAJ1xuICAgICAgICAgICAgICAgICAgICA/ICcpJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJz8nXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICcpPydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnKycgJiYgYm9keURvdEFsbG93ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnKicgJiYgYm9keURvdEFsbG93ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgKT9gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYCkke3RoaXMudHlwZX1gO1xuICAgICAgICAgICAgZmluYWwgPSBzdGFydCArIGJvZHkgKyBjbG9zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICB1bmVzY2FwZShib2R5KSxcbiAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgIF07XG4gICAgfVxuICAgICNwYXJ0c1RvUmVnRXhwKGRvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFydHNcbiAgICAgICAgICAgIC5tYXAocCA9PiB7XG4gICAgICAgICAgICAvLyBleHRnbG9iIEFTVHMgc2hvdWxkIG9ubHkgY29udGFpbiBwYXJlbnQgQVNUc1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgdHlwZSBpbiBleHRnbG9iIGFzdD8/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gY2FuIGlnbm9yZSBoYXNNYWdpYywgYmVjYXVzZSBleHRnbG9icyBhcmUgYWxyZWFkeSBhbHdheXMgbWFnaWNcbiAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgX2hhc01hZ2ljLCB1ZmxhZ10gPSBwLnRvUmVnRXhwU291cmNlKGRvdCk7XG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihwID0+ICEodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpKSB8fCAhIXApXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlR2xvYihnbG9iLCBoYXNNYWdpYywgbm9FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmUgPSAnJztcbiAgICAgICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZSArPSAocmVTcGVjaWFscy5oYXMoYykgPyAnXFxcXCcgOiAnJykgKyBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBnbG9iLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gJ1xcXFxcXFxcJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3NyYywgbmVlZFVmbGFnLCBjb25zdW1lZCwgbWFnaWNdID0gcGFyc2VDbGFzcyhnbG9iLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IG5lZWRVZmxhZztcbiAgICAgICAgICAgICAgICAgICAgaSArPSBjb25zdW1lZCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgbWFnaWM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9FbXB0eSAmJiBnbG9iID09PSAnKicpXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXJOb0VtcHR5O1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3RhcjtcbiAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgcmUgKz0gcW1hcms7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmUgKz0gcmVnRXhwRXNjYXBlKGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmUsIHVuZXNjYXBlKGdsb2IpLCAhIWhhc01hZ2ljLCB1ZmxhZ107XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBFc2NhcGUgYWxsIG1hZ2ljIGNoYXJhY3RlcnMgaW4gYSBnbG9iIHBhdHRlcm4uXG4gKlxuICogSWYgdGhlIHtAbGluayB3aW5kb3dzUGF0aHNOb0VzY2FwZSB8IEdsb2JPcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlfVxuICogb3B0aW9uIGlzIHVzZWQsIHRoZW4gY2hhcmFjdGVycyBhcmUgZXNjYXBlZCBieSB3cmFwcGluZyBpbiBgW11gLCBiZWNhdXNlXG4gKiBhIG1hZ2ljIGNoYXJhY3RlciB3cmFwcGVkIGluIGEgY2hhcmFjdGVyIGNsYXNzIGNhbiBvbmx5IGJlIHNhdGlzZmllZCBieVxuICogdGhhdCBleGFjdCBjaGFyYWN0ZXIuICBJbiB0aGlzIG1vZGUsIGBcXGAgaXMgX25vdF8gZXNjYXBlZCwgYmVjYXVzZSBpdCBpc1xuICogbm90IGludGVycHJldGVkIGFzIGEgbWFnaWMgY2hhcmFjdGVyLCBidXQgaW5zdGVhZCBhcyBhIHBhdGggc2VwYXJhdG9yLlxuICovXG5leHBvcnQgY29uc3QgZXNjYXBlID0gKHMsIHsgd2luZG93c1BhdGhzTm9Fc2NhcGUgPSBmYWxzZSwgfSA9IHt9KSA9PiB7XG4gICAgLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgK0AhIGJlY2F1c2Ugd2UgZXNjYXBlIHRoZSBwYXJlbnNcbiAgICAvLyB0aGF0IG1ha2UgdGhvc2UgbWFnaWMsIGFuZCBlc2NhcGluZyAhIGFzIFshXSBpc24ndCB2YWxpZCxcbiAgICAvLyBiZWNhdXNlIFshXV0gaXMgYSB2YWxpZCBnbG9iIGNsYXNzIG1lYW5pbmcgbm90ICddJy5cbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1s/KigpW1xcXV0vZywgJ1skJl0nKVxuICAgICAgICA6IHMucmVwbGFjZSgvWz8qKClbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzY2FwZS5qcy5tYXAiLAogICAgImltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgUGF0aFNjdXJyeSwgUGF0aFNjdXJyeURhcndpbiwgUGF0aFNjdXJyeVBvc2l4LCBQYXRoU2N1cnJ5V2luMzIsIH0gZnJvbSAncGF0aC1zY3VycnknO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5qcyc7XG5pbXBvcnQgeyBHbG9iU3RyZWFtLCBHbG9iV2Fsa2VyIH0gZnJvbSAnLi93YWxrZXIuanMnO1xuLy8gaWYgbm8gcHJvY2VzcyBnbG9iYWwsIGp1c3QgY2FsbCBpdCBsaW51eC5cbi8vIHNvIHdlIGRlZmF1bHQgdG8gY2FzZS1zZW5zaXRpdmUsIC8gc2VwYXJhdG9yc1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcGVyZm9ybSBnbG9iIHBhdHRlcm4gdHJhdmVyc2Fscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2Ige1xuICAgIGFic29sdXRlO1xuICAgIGN3ZDtcbiAgICByb290O1xuICAgIGRvdDtcbiAgICBkb3RSZWxhdGl2ZTtcbiAgICBmb2xsb3c7XG4gICAgaWdub3JlO1xuICAgIG1hZ2ljYWxCcmFjZXM7XG4gICAgbWFyaztcbiAgICBtYXRjaEJhc2U7XG4gICAgbWF4RGVwdGg7XG4gICAgbm9icmFjZTtcbiAgICBub2Nhc2U7XG4gICAgbm9kaXI7XG4gICAgbm9leHQ7XG4gICAgbm9nbG9ic3RhcjtcbiAgICBwYXR0ZXJuO1xuICAgIHBsYXRmb3JtO1xuICAgIHJlYWxwYXRoO1xuICAgIHNjdXJyeTtcbiAgICBzdGF0O1xuICAgIHNpZ25hbDtcbiAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTtcbiAgICB3aXRoRmlsZVR5cGVzO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIG9wdHM7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcGFyc2VkIGltbXV0YWJsZSB7QGxpbmsgUGF0dGVybn0gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwYXR0ZXJucztcbiAgICAvKipcbiAgICAgKiBBbGwgb3B0aW9ucyBhcmUgc3RvcmVkIGFzIHByb3BlcnRpZXMgb24gdGhlIGBHbG9iYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIEdsb2JPcHRpb25zfSBmb3IgZnVsbCBvcHRpb25zIGRlc2NyaXB0aW9ucy5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBhIHByZXZpb3VzIGBHbG9iYCBvYmplY3QgY2FuIGJlIHBhc3NlZCBhcyB0aGVcbiAgICAgKiBgR2xvYk9wdGlvbnNgIHRvIGFub3RoZXIgYEdsb2JgIGluc3RhbnRpYXRpb24gdG8gcmUtdXNlIHNldHRpbmdzXG4gICAgICogYW5kIGNhY2hlcyB3aXRoIGEgbmV3IHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBUcmF2ZXJzYWwgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gcnVuIHRoZSB3YWxrXG4gICAgICogYWdhaW4uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0cykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFvcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZ2xvYiBvcHRpb25zIHJlcXVpcmVkJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2l0aEZpbGVUeXBlcyA9ICEhb3B0cy53aXRoRmlsZVR5cGVzO1xuICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5kb3RSZWxhdGl2ZSA9ICEhb3B0cy5kb3RSZWxhdGl2ZTtcbiAgICAgICAgdGhpcy5ub2RpciA9ICEhb3B0cy5ub2RpcjtcbiAgICAgICAgdGhpcy5tYXJrID0gISFvcHRzLm1hcms7XG4gICAgICAgIGlmICghb3B0cy5jd2QpIHtcbiAgICAgICAgICAgIHRoaXMuY3dkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0cy5jd2QgaW5zdGFuY2VvZiBVUkwgfHwgb3B0cy5jd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBvcHRzLmN3ZCA9IGZpbGVVUkxUb1BhdGgob3B0cy5jd2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgfHwgJyc7XG4gICAgICAgIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcbiAgICAgICAgdGhpcy5tYWdpY2FsQnJhY2VzID0gISFvcHRzLm1hZ2ljYWxCcmFjZXM7XG4gICAgICAgIHRoaXMubm9icmFjZSA9ICEhb3B0cy5ub2JyYWNlO1xuICAgICAgICB0aGlzLm5vZXh0ID0gISFvcHRzLm5vZXh0O1xuICAgICAgICB0aGlzLnJlYWxwYXRoID0gISFvcHRzLnJlYWxwYXRoO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gb3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub2dsb2JzdGFyID0gISFvcHRzLm5vZ2xvYnN0YXI7XG4gICAgICAgIHRoaXMubWF0Y2hCYXNlID0gISFvcHRzLm1hdGNoQmFzZTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0cy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMuc3RhdCA9ICEhb3B0cy5zdGF0O1xuICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdHMuaWdub3JlO1xuICAgICAgICBpZiAodGhpcy53aXRoRmlsZVR5cGVzICYmIHRoaXMuYWJzb2x1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGFic29sdXRlIGFuZCB3aXRoRmlsZVR5cGVzOnRydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRzLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICAgICAgICAgICAgb3B0cy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoQmFzZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Jhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+IChwLmluY2x1ZGVzKCcvJykgPyBwIDogYC4vKiovJHtwfWApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0gfTtcbiAgICAgICAgaWYgKG9wdHMuc2N1cnJ5KSB7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG9wdHMuc2N1cnJ5O1xuICAgICAgICAgICAgaWYgKG9wdHMubm9jYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBvcHRzLm5vY2FzZSAhPT0gb3B0cy5zY3Vycnkubm9jYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2Nhc2Ugb3B0aW9uIGNvbnRyYWRpY3RzIHByb3ZpZGVkIHNjdXJyeSBvcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFNjdXJyeSA9IG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyBQYXRoU2N1cnJ5V2luMzJcbiAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gUGF0aFNjdXJyeURhcndpblxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPyBQYXRoU2N1cnJ5UG9zaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogUGF0aFNjdXJyeTtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gbmV3IFNjdXJyeSh0aGlzLmN3ZCwge1xuICAgICAgICAgICAgICAgIG5vY2FzZTogb3B0cy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgZnM6IG9wdHMuZnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vY2FzZSA9IHRoaXMuc2N1cnJ5Lm5vY2FzZTtcbiAgICAgICAgLy8gSWYgeW91IGRvIG5vY2FzZTp0cnVlIG9uIGEgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW0sIHRoZW5cbiAgICAgICAgLy8gd2UgbmVlZCB0byB1c2UgcmVnZXhwcyBpbnN0ZWFkIG9mIHN0cmluZ3MgZm9yIG5vbi1tYWdpY1xuICAgICAgICAvLyBwYXRoIHBvcnRpb25zLCBiZWNhdXNlIHN0YXR0aW5nIGBhQmNgIHdvbid0IHJldHVybiByZXN1bHRzXG4gICAgICAgIC8vIGZvciB0aGUgZmlsZSBgQWJDYCBmb3IgZXhhbXBsZS5cbiAgICAgICAgY29uc3Qgbm9jYXNlTWFnaWNPbmx5ID0gdGhpcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgfHwgdGhpcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgICAgY29uc3QgbW1vID0ge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBub2Nhc2UgYmFzZWQgb24gcGxhdGZvcm1cbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBkb3Q6IHRoaXMuZG90LFxuICAgICAgICAgICAgbWF0Y2hCYXNlOiB0aGlzLm1hdGNoQmFzZSxcbiAgICAgICAgICAgIG5vYnJhY2U6IHRoaXMubm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICBub2Nhc2VNYWdpY09ubHksXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub2V4dDogdGhpcy5ub2V4dCxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlOiB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlLFxuICAgICAgICAgICAgZGVidWc6ICEhdGhpcy5vcHRzLmRlYnVnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtbXMgPSB0aGlzLnBhdHRlcm4ubWFwKHAgPT4gbmV3IE1pbmltYXRjaChwLCBtbW8pKTtcbiAgICAgICAgY29uc3QgW21hdGNoU2V0LCBnbG9iUGFydHNdID0gbW1zLnJlZHVjZSgoc2V0LCBtKSA9PiB7XG4gICAgICAgICAgICBzZXRbMF0ucHVzaCguLi5tLnNldCk7XG4gICAgICAgICAgICBzZXRbMV0ucHVzaCguLi5tLmdsb2JQYXJ0cyk7XG4gICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICB9LCBbW10sIFtdXSk7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBtYXRjaFNldC5tYXAoKHNldCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IGdsb2JQYXJ0c1tpXTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKCFnKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXR0ZXJuIG9iamVjdCcpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybihzZXQsIGcsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgLy8gV2Fsa2VycyBhbHdheXMgcmV0dXJuIGFycmF5IG9mIFBhdGggb2JqZWN0cywgc28gd2UganVzdCBoYXZlIHRvXG4gICAgICAgIC8vIGNvZXJjZSB0aGVtIGludG8gdGhlIHJpZ2h0IHNoYXBlLiAgSXQgd2lsbCBoYXZlIGFscmVhZHkgY2FsbGVkXG4gICAgICAgIC8vIHJlYWxwYXRoKCkgaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHRvIGRvIHNvLCBzbyB3ZSBrbm93IHRoYXQncyBjYWNoZWQuXG4gICAgICAgIC8vIHN0YXJ0IG91dCBrbm93aW5nIHRoZSBjd2QsIGF0IGxlYXN0XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgbmV3IEdsb2JXYWxrZXIodGhpcy5wYXR0ZXJucywgdGhpcy5zY3VycnkuY3dkLCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGVwdGggKyB0aGlzLnNjdXJyeS5jd2QuZGVwdGgoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICAgICAgfSkud2FsaygpKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5uZXcgR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrU3luYygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtKCk7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN5bmMgaXRlcmF0aW9uIGZ1bmN0aW9uLiBSZXR1cm5zIGEgR2VuZXJhdG9yIHRoYXRcbiAgICAgKiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGl0ZXJhdGVTeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1TeW5jKClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBhc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cbmNvbnN0IHBlcmYgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nXG4gICAgPyBwZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcbmNvbnN0IHdhcm5lZCA9IG5ldyBTZXQoKTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgISFwcm9jZXNzID8gcHJvY2VzcyA6IHt9KTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZW1pdFdhcm5pbmcgPSAobXNnLCB0eXBlLCBjb2RlLCBmbikgPT4ge1xuICAgIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUFJPQ0VTUy5lbWl0V2FybmluZyhtc2csIHR5cGUsIGNvZGUsIGZuKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoYFske2NvZGV9XSAke3R5cGV9OiAke21zZ31gKTtcbn07XG5sZXQgQUMgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcjtcbmxldCBBUyA9IGdsb2JhbFRoaXMuQWJvcnRTaWduYWw7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmlmICh0eXBlb2YgQUMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQVMgPSBjbGFzcyBBYm9ydFNpZ25hbCB7XG4gICAgICAgIG9uYWJvcnQ7XG4gICAgICAgIF9vbmFib3J0ID0gW107XG4gICAgICAgIHJlYXNvbjtcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKF8sIGZuKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmFib3J0LnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBBQyA9IGNsYXNzIEFib3J0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgd2FybkFDUG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBzaWduYWwgPSBuZXcgQVMoKTtcbiAgICAgICAgYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy5zaWduYWwuX29uYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBmbihyZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaWduYWwub25hYm9ydD8uKHJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnO1xuICAgIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXByaW50QUNQb2x5ZmlsbFdhcm5pbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHByaW50QUNQb2x5ZmlsbFdhcm5pbmcgPSBmYWxzZTtcbiAgICAgICAgZW1pdFdhcm5pbmcoJ0Fib3J0Q29udHJvbGxlciBpcyBub3QgZGVmaW5lZC4gSWYgdXNpbmcgbHJ1LWNhY2hlIGluICcgK1xuICAgICAgICAgICAgJ25vZGUgMTQsIGxvYWQgYW4gQWJvcnRDb250cm9sbGVyIHBvbHlmaWxsIGZyb20gdGhlICcgK1xuICAgICAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgICAgICdwcm92aWRlZCBmb3IgdXNlIGJ5IExSVUNhY2hlLmZldGNoKCksIGJ1dCBpdCBzaG91bGQgbm90IGJlICcgK1xuICAgICAgICAgICAgJ3JlbGllZCB1cG9uIGluIG90aGVyIGNvbnRleHRzIChlZywgcGFzc2luZyBpdCB0byBvdGhlciBBUElzIHRoYXQgJyArXG4gICAgICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGRpc2FibGUgdGhpcyB3aXRoIExSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORz0xIGluIHRoZSBlbnYuJywgJ05PX0FCT1JUX0NPTlRST0xMRVInLCAnRU5PVFNVUCcsIHdhcm5BQ1BvbHlmaWxsKTtcbiAgICB9O1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbmNvbnN0IHNob3VsZFdhcm4gPSAoY29kZSkgPT4gIXdhcm5lZC5oYXMoY29kZSk7XG5jb25zdCBUWVBFID0gU3ltYm9sKCd0eXBlJyk7XG5jb25zdCBpc1Bvc0ludCA9IChuKSA9PiBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobik7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbi8vIFRoaXMgaXMgYSBsaXR0bGUgYml0IHJpZGljdWxvdXMsIHRiaC5cbi8vIFRoZSBtYXhpbXVtIGFycmF5IGxlbmd0aCBpcyAyXjMyLTEgb3IgdGhlcmVhYm91dHMgb24gbW9zdCBKUyBpbXBscy5cbi8vIEFuZCB3ZWxsIGJlZm9yZSB0aGF0IHBvaW50LCB5b3UncmUgY2FjaGluZyB0aGUgZW50aXJlIHdvcmxkLCBJIG1lYW4sXG4vLyB0aGF0J3MgfjMyR0Igb2YganVzdCBpbnRlZ2VycyBmb3IgdGhlIG5leHQvcHJldiBsaW5rcywgcGx1cyB3aGF0ZXZlclxuLy8gZWxzZSB0byBob2xkIHRoYXQgbWFueSBrZXlzIGFuZCB2YWx1ZXMuICBKdXN0IGZpbGxpbmcgdGhlIG1lbW9yeSB3aXRoXG4vLyB6ZXJvZXMgYXQgaW5pdCB0aW1lIGlzIGJydXRhbCB3aGVuIHlvdSBnZXQgdGhhdCBiaWcuXG4vLyBCdXQgd2h5IG5vdCBiZSBjb21wbGV0ZT9cbi8vIE1heWJlIGluIHRoZSBmdXR1cmUsIHRoZXNlIGxpbWl0cyB3aWxsIGhhdmUgZXhwYW5kZWQuXG5jb25zdCBnZXRVaW50QXJyYXkgPSAobWF4KSA9PiAhaXNQb3NJbnQobWF4KVxuICAgID8gbnVsbFxuICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDgpXG4gICAgICAgID8gVWludDhBcnJheVxuICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAxNilcbiAgICAgICAgICAgID8gVWludDE2QXJyYXlcbiAgICAgICAgICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKVxuICAgICAgICAgICAgICAgID8gVWludDMyQXJyYXlcbiAgICAgICAgICAgICAgICA6IG1heCA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAgICAgICAgICAgICA/IFplcm9BcnJheVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgc3VwZXIoc2l6ZSk7XG4gICAgICAgIHRoaXMuZmlsbCgwKTtcbiAgICB9XG59XG5jbGFzcyBTdGFjayB7XG4gICAgaGVhcDtcbiAgICBsZW5ndGg7XG4gICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICAgIHN0YXRpYyAjY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgc3RhdGljIGNyZWF0ZShtYXgpIHtcbiAgICAgICAgY29uc3QgSGVhcENscyA9IGdldFVpbnRBcnJheShtYXgpO1xuICAgICAgICBpZiAoIUhlYXBDbHMpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscyk7XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1heCwgSGVhcENscykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFTdGFjay4jY29uc3RydWN0aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobiknKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHB1c2gobikge1xuICAgICAgICB0aGlzLmhlYXBbdGhpcy5sZW5ndGgrK10gPSBuO1xuICAgIH1cbiAgICBwb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF07XG4gICAgfVxufVxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIExSVUNhY2hlIHtcbiAgICAvLyBvcHRpb25zIHRoYXQgY2Fubm90IGJlIGNoYW5nZWQgd2l0aG91dCBkaXNhc3RlclxuICAgICNtYXg7XG4gICAgI21heFNpemU7XG4gICAgI2Rpc3Bvc2U7XG4gICAgI2Rpc3Bvc2VBZnRlcjtcbiAgICAjZmV0Y2hNZXRob2Q7XG4gICAgI21lbW9NZXRob2Q7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bH1cbiAgICAgKi9cbiAgICB0dGw7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bFJlc29sdXRpb259XG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25HZXR9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25HZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfVxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uSGFzO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfVxuICAgICAqL1xuICAgIGFsbG93U3RhbGU7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICAgKi9cbiAgICBub1VwZGF0ZVRUTDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgICAqL1xuICAgIG1heEVudHJ5U2l6ZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgICAqL1xuICAgIHNpemVDYWxjdWxhdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPblN0YWxlR2V0fVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBpZ25vcmVGZXRjaEFib3J0O1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICAjc2l6ZTtcbiAgICAjY2FsY3VsYXRlZFNpemU7XG4gICAgI2tleU1hcDtcbiAgICAja2V5TGlzdDtcbiAgICAjdmFsTGlzdDtcbiAgICAjbmV4dDtcbiAgICAjcHJldjtcbiAgICAjaGVhZDtcbiAgICAjdGFpbDtcbiAgICAjZnJlZTtcbiAgICAjZGlzcG9zZWQ7XG4gICAgI3NpemVzO1xuICAgICNzdGFydHM7XG4gICAgI3R0bHM7XG4gICAgI2hhc0Rpc3Bvc2U7XG4gICAgI2hhc0ZldGNoTWV0aG9kO1xuICAgICNoYXNEaXNwb3NlQWZ0ZXI7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNhbGwgdGhpcyBtZXRob2QgdW5sZXNzIHlvdSBuZWVkIHRvIGluc3BlY3QgdGhlXG4gICAgICogaW5uZXIgd29ya2luZ3Mgb2YgdGhlIGNhY2hlLiAgSWYgYW55dGhpbmcgcmV0dXJuZWQgYnkgdGhpc1xuICAgICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICAgKlxuICAgICAqIFRoZXNlIGZpZWxkcyBhcmUgcHJpdmF0ZSBmb3IgYSByZWFzb24hXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzKGMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHN0YXJ0czogYy4jc3RhcnRzLFxuICAgICAgICAgICAgdHRsczogYy4jdHRscyxcbiAgICAgICAgICAgIHNpemVzOiBjLiNzaXplcyxcbiAgICAgICAgICAgIGtleU1hcDogYy4ja2V5TWFwLFxuICAgICAgICAgICAga2V5TGlzdDogYy4ja2V5TGlzdCxcbiAgICAgICAgICAgIHZhbExpc3Q6IGMuI3ZhbExpc3QsXG4gICAgICAgICAgICBuZXh0OiBjLiNuZXh0LFxuICAgICAgICAgICAgcHJldjogYy4jcHJldixcbiAgICAgICAgICAgIGdldCBoZWFkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiNoZWFkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB0YWlsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiN0YWlsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZyZWU6IGMuI2ZyZWUsXG4gICAgICAgICAgICAvLyBtZXRob2RzXG4gICAgICAgICAgICBpc0JhY2tncm91bmRGZXRjaDogKHApID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgICAgICAgYmFja2dyb3VuZEZldGNoOiAoaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpID0+IGMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCksXG4gICAgICAgICAgICBtb3ZlVG9UYWlsOiAoaW5kZXgpID0+IGMuI21vdmVUb1RhaWwoaW5kZXgpLFxuICAgICAgICAgICAgaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI2luZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICByaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgICAgICAgaXNTdGFsZTogKGluZGV4KSA9PiBjLiNpc1N0YWxlKGluZGV4KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUHJvdGVjdGVkIHJlYWQtb25seSBtZW1iZXJzXG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm1heH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21heFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBjb21wdXRlZCBzaXplIG9mIGl0ZW1zIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBjYWxjdWxhdGVkU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbGN1bGF0ZWRTaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZmV0Y2hNZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmZXRjaE1ldGhvZDtcbiAgICB9XG4gICAgZ2V0IG1lbW9NZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlQWZ0ZXJ9IChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VBZnRlcjtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG1heCA9IDAsIHR0bCwgdHRsUmVzb2x1dGlvbiA9IDEsIHR0bEF1dG9wdXJnZSwgdXBkYXRlQWdlT25HZXQsIHVwZGF0ZUFnZU9uSGFzLCBhbGxvd1N0YWxlLCBkaXNwb3NlLCBkaXNwb3NlQWZ0ZXIsIG5vRGlzcG9zZU9uU2V0LCBub1VwZGF0ZVRUTCwgbWF4U2l6ZSA9IDAsIG1heEVudHJ5U2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiwgZmV0Y2hNZXRob2QsIG1lbW9NZXRob2QsIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgbm9EZWxldGVPblN0YWxlR2V0LCBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgaWdub3JlRmV0Y2hBYm9ydCwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChtYXggIT09IDAgJiYgIWlzUG9zSW50KG1heCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5O1xuICAgICAgICBpZiAoIVVpbnRBcnJheSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1heCB2YWx1ZTogJyArIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLiNtYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5tYXhFbnRyeVNpemUgPSBtYXhFbnRyeVNpemUgfHwgdGhpcy4jbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb247XG4gICAgICAgIGlmICh0aGlzLnNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiNtYXhTaXplICYmICF0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBzZXQgdG8gbm9uLWZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1lbW9NZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lbW9NZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtZW1vTWV0aG9kID0gbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKGZldGNoTWV0aG9kICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBmZXRjaE1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2ZldGNoTWV0aG9kID0gZmV0Y2hNZXRob2Q7XG4gICAgICAgIHRoaXMuI2hhc0ZldGNoTWV0aG9kID0gISFmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4ja2V5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiNuZXh0ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KTtcbiAgICAgICAgdGhpcy4jc2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlID0gZGlzcG9zZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2VBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gZGlzcG9zZUFmdGVyO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2U7XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciA9ICEhdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgICAgICB0aGlzLm5vRGlzcG9zZU9uU2V0ID0gISFub0Rpc3Bvc2VPblNldDtcbiAgICAgICAgdGhpcy5ub1VwZGF0ZVRUTCA9ICEhbm9VcGRhdGVUVEw7XG4gICAgICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSAhIWFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgICAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSAhIWFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydDtcbiAgICAgICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy5tYXhFbnRyeVNpemUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVNpemVUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZTtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQgPSAhIW5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkdldCA9ICEhdXBkYXRlQWdlT25HZXQ7XG4gICAgICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzO1xuICAgICAgICB0aGlzLnR0bFJlc29sdXRpb24gPVxuICAgICAgICAgICAgaXNQb3NJbnQodHRsUmVzb2x1dGlvbikgfHwgdHRsUmVzb2x1dGlvbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gdHRsUmVzb2x1dGlvblxuICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgdGhpcy50dGxBdXRvcHVyZ2UgPSAhIXR0bEF1dG9wdXJnZTtcbiAgICAgICAgdGhpcy50dGwgPSB0dGwgfHwgMDtcbiAgICAgICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvIG5vdCBhbGxvdyBjb21wbGV0ZWx5IHVuYm91bmRlZCBjYWNoZXNcbiAgICAgICAgaWYgKHRoaXMuI21heCA9PT0gMCAmJiB0aGlzLnR0bCA9PT0gMCAmJiB0aGlzLiNtYXhTaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBdCBsZWFzdCBvbmUgb2YgbWF4LCBtYXhTaXplLCBvciB0dGwgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudHRsQXV0b3B1cmdlICYmICF0aGlzLiNtYXggJiYgIXRoaXMuI21heFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSAnTFJVX0NBQ0hFX1VOQk9VTkRFRCc7XG4gICAgICAgICAgICBpZiAoc2hvdWxkV2Fybihjb2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm5lZC5hZGQoY29kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ1RUTCBjYWNoaW5nIHdpdGhvdXQgdHRsQXV0b3B1cmdlLCBtYXgsIG9yIG1heFNpemUgY2FuICcgK1xuICAgICAgICAgICAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJztcbiAgICAgICAgICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAgICogcmV0dXJucyBgMGAuIFJldHVybnMgYEluZmluaXR5YCBpZiBpdGVtIGlzIGluIGNhY2hlIHdpdGhvdXQgYSBkZWZpbmVkIFRUTC5cbiAgICAgKi9cbiAgICBnZXRSZW1haW5pbmdUVEwoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNrZXlNYXAuaGFzKGtleSkgPyBJbmZpbml0eSA6IDA7XG4gICAgfVxuICAgICNpbml0aWFsaXplVFRMVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHR0bHMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0cyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgdGhpcy4jdHRscyA9IHR0bHM7XG4gICAgICAgIHRoaXMuI3N0YXJ0cyA9IHN0YXJ0cztcbiAgICAgICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHBlcmYubm93KCkpID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDA7XG4gICAgICAgICAgICB0dGxzW2luZGV4XSA9IHR0bDtcbiAgICAgICAgICAgIGlmICh0dGwgIT09IDAgJiYgdGhpcy50dGxBdXRvcHVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdLCAnZXhwaXJlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0dGwgKyAxKTtcbiAgICAgICAgICAgICAgICAvLyB1bnJlZigpIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGxzW2luZGV4XSAhPT0gMCA/IHBlcmYubm93KCkgOiAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNzdGF0dXNUVEwgPSAoc3RhdHVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR0bHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgc3RhdHVzLnR0bCA9IHR0bDtcbiAgICAgICAgICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWJvdW5jZSBjYWxscyB0byBwZXJmLm5vdygpIHRvIDFzIHNvIHdlJ3JlIG5vdCBoaXR0aW5nXG4gICAgICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgICAgbGV0IGNhY2hlZE5vdyA9IDA7XG4gICAgICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBwZXJmLm5vdygpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHRsUmVzb2x1dGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICBjYWNoZWROb3cgPSBuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAodC51bnJlZikge1xuICAgICAgICAgICAgICAgICAgICB0LnVucmVmKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0O1xuICAgICAgICAgICAgcmV0dXJuIHR0bCAtIGFnZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgdCA9IHR0bHNbaW5kZXhdO1xuICAgICAgICAgICAgcmV0dXJuICEhdCAmJiAhIXMgJiYgKGNhY2hlZE5vdyB8fCBnZXROb3coKSkgLSBzID4gdDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gY29uZGl0aW9uYWxseSBzZXQgcHJpdmF0ZSBtZXRob2RzIHJlbGF0ZWQgdG8gVFRMXG4gICAgI3VwZGF0ZUl0ZW1BZ2UgPSAoKSA9PiB7IH07XG4gICAgI3N0YXR1c1RUTCA9ICgpID0+IHsgfTtcbiAgICAjc2V0SXRlbVRUTCA9ICgpID0+IHsgfTtcbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICNpc1N0YWxlID0gKCkgPT4gZmFsc2U7XG4gICAgI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNpemVzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemVzID0gc2l6ZXM7XG4gICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgLT0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gMDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAgICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgICAgIGlmIChzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gcmV0dXJuIGludmFsaWQgKGV4cGVjdCBwb3NpdGl2ZSBpbnRlZ2VyKScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1doZW4gbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgaXMgdXNlZCwgc2l6ZUNhbGN1bGF0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29yIHNpemUgbXVzdCBiZSBzZXQuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplID0gKGluZGV4LCBzaXplLCBzdGF0dXMpID0+IHtcbiAgICAgICAgICAgIHNpemVzW2luZGV4XSA9IHNpemU7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB0aGlzLiNtYXhTaXplIC0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLiNjYWxjdWxhdGVkU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5lbnRyeVNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIHN0YXR1cy50b3RhbENhbGN1bGF0ZWRTaXplID0gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgICNyZW1vdmVJdGVtU2l6ZSA9IF9pID0+IHsgfTtcbiAgICAjYWRkSXRlbVNpemUgPSAoX2ksIF9zLCBfc3QpID0+IHsgfTtcbiAgICAjcmVxdWlyZVNpemUgPSAoX2ssIF92LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgaWYgKHNpemUgfHwgc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI3RhaWw7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI2hlYWQ7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI25leHRbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNpc1ZhbGlkSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuZ2V0KHRoaXMuI2tleUxpc3RbaW5kZXhdKSA9PT0gaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFt0aGlzLiNrZXlMaXN0W2ldLCB0aGlzLiN2YWxMaXN0W2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmVudHJpZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqa2V5cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIGtleXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJrZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqdmFsdWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUudmFsdWVzfVxuICAgICAqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJ2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgICAqIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdC4gQ2FsbGVkIGJ5IHRoZSBidWlsdC1pbiBtZXRob2RcbiAgICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICovXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTFJVQ2FjaGUnO1xuICAgIC8qKlxuICAgICAqIEZpbmQgYSB2YWx1ZSBmb3Igd2hpY2ggdGhlIHN1cHBsaWVkIGZuIG1ldGhvZCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLFxuICAgICAqIHNpbWlsYXIgdG8gYEFycmF5LmZpbmQoKWAuIGZuIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICAgKi9cbiAgICBmaW5kKGZuLCBnZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZm4odmFsdWUsIHRoaXMuI2tleUxpc3RbaV0sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHRoaXMuI2tleUxpc3RbaV0sIGdldE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIG9uIGVhY2ggaXRlbSBpbiB0aGUgY2FjaGUsIGluIG9yZGVyIGZyb20gbW9zdFxuICAgICAqIHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKlxuICAgICAqIGBmbmAgaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqXG4gICAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAgICogdGhlIHByb3ZpZGVkIG9iamVjdCwgb3IgdGhlIGNhY2hlIGlmIG5vIGB0aGlzcGAgb2JqZWN0IGlzIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmb3JFYWNoKGZuLCB0aGlzcCA9IHRoaXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIExSVUNhY2hlLmZvckVhY2h9IGJ1dCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBpblxuICAgICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAgICovXG4gICAgcmZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIGFueSBzdGFsZSBlbnRyaWVzLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHJlbW92ZWQsXG4gICAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1cmdlU3RhbGUoKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgICAqIFRUTCBpbmZvIHNpbXVsdGFuZW91c2x5LiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgICAqIHNlcmlhbGl6YXRpb24sIHRoZSBgc3RhcnRgIHZhbHVlIGlzIGFsd2F5cyB0aGUgY3VycmVudCB0aW1lc3RhbXAsIGFuZCB0aGVcbiAgICAgKiBgdHRsYCBpcyBhIGNhbGN1bGF0ZWQgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSAobmVnYXRpdmUgaWYgZXhwaXJlZCkuXG4gICAgICpcbiAgICAgKiBBbHdheXMgcmV0dXJucyBzdGFsZSB2YWx1ZXMsIGlmIHRoZWlyIGluZm8gaXMgZm91bmQgaW4gdGhlIGNhY2hlLCBzbyBiZVxuICAgICAqIHN1cmUgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb25zIChpZSwgYSBuZWdhdGl2ZSB7QGxpbmsgTFJVQ2FjaGUuRW50cnkjdHRsfSlcbiAgICAgKiBpZiByZWxldmFudC5cbiAgICAgKi9cbiAgICBpbmZvKGtleSkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy4ja2V5TWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgOiB2O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuI3N0YXJ0c1tpXTtcbiAgICAgICAgICAgIGlmICh0dGwgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW4gPSB0dGwgLSAocGVyZi5ub3coKSAtIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSByZW1haW47XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICAgKiBwYXNzZWQgdG8ge0BsaW5rIExSTFVDYWNoZSNsb2FkfS5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIGBEYXRlLm5vdygpYFxuICAgICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIFN0YWxlIGVudHJpZXMgYXJlIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYGR1bXBgLCBldmVuIGlmXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgICAqXG4gICAgICogTm90ZTogdGhpcyByZXR1cm5zIGFuIGFjdHVhbCBhcnJheSwgbm90IGEgZ2VuZXJhdG9yLCBzbyBpdCBjYW4gYmUgbW9yZVxuICAgICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgICAqL1xuICAgIGR1bXAoKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkudHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgZHVtcCB0aGUgc3RhcnQgcmVsYXRpdmUgdG8gYSBwb3J0YWJsZSB0aW1lc3RhbXBcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBwZXJmLm5vdygpIC0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyci51bnNoaWZ0KFtrZXksIGVudHJ5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdGluZyBjYWNoZSBtYXkgYmUgZGlmZmVyZW50IGlmIHRoZSBzYW1lIG9wdGlvbnMgYXJlXG4gICAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYHN0YXJ0YCBmaWVsZHMgYXJlIGFzc3VtZWQgdG8gYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlXG4gICAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBsb2FkKGFycikge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gZW50cnkuc3RhcnQgaXMgYSBwb3J0YWJsZSB0aW1lc3RhbXAsIGJ1dCB3ZSBtYXkgYmUgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gd2UgZ2V0IHRoZSBpbnRlbmRlZCByZW1haW5pbmcgVFRMLCBubyBtYXR0ZXIgaG93IGxvbmcgaXQnc1xuICAgICAgICAgICAgICAgIC8vIGJlZW4gb24gaWNlLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gaXQncyBvayBmb3IgdGhpcyB0byBiZSBhIGJpdCBzbG93LCBpdCdzIGEgcmFyZSBvcGVyYXRpb24uXG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIGVudHJ5LnN0YXJ0O1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gcGVyZi5ub3coKSAtIGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgZW50cnkudmFsdWUsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSB2YWx1ZSB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjZGVsZXRlfVxuICAgICAqXG4gICAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMgZm9yIHRoZSBzY29wZVxuICAgICAqIG9mIHRoaXMgc2luZ2xlIGBzZXQoKWAgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSWYgYHN0YXJ0YCBpcyBwcm92aWRlZCwgdGhlbiB0aGF0IHdpbGwgc2V0IHRoZSBlZmZlY3RpdmUgc3RhcnRcbiAgICAgKiB0aW1lIGZvciB0aGUgVFRMIGNhbGN1bGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGEgcHJldmlvdXNcbiAgICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgICAqIGBEYXRlLm5vdygpYCBpZiBub3QuXG4gICAgICpcbiAgICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAgICogY2FsbGluZyB0aGUgYHNpemVDYWxjdWxhdGlvbmAgZnVuY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBudW1iZXIgaWYgaXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBhbmQgYG5vRGlzcG9zZU9uU2V0YCB3aGljaFxuICAgICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAgICogb3ZlcndyaXRlcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICAgKiBlbnRyeSBpcyBncmVhdGVyIHRoYW4gYG1heEVudHJ5U2l6ZWAsIHRoZW4gdGhlIGl0ZW0gd2lsbCBub3QgYmVcbiAgICAgKiBhZGRlZCB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiBgY2FjaGUuZGVsZXRlKGtleSlgLiBgdW5kZWZpbmVkYCBpcyBuZXZlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIHNldChrLCB2LCBzZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoayk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHR0bCA9IHRoaXMudHRsLCBzdGFydCwgbm9EaXNwb3NlT25TZXQgPSB0aGlzLm5vRGlzcG9zZU9uU2V0LCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgc3RhdHVzLCB9ID0gc2V0T3B0aW9ucztcbiAgICAgICAgbGV0IHsgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy4jcmVxdWlyZVNpemUoaywgdiwgc2V0T3B0aW9ucy5zaXplIHx8IDAsIHNpemVDYWxjdWxhdGlvbik7XG4gICAgICAgIC8vIGlmIHRoZSBpdGVtIGRvZXNuJ3QgZml0LCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIHNldCB0byBtYXhTaXplIGJ5IGRlZmF1bHRcbiAgICAgICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnbWlzcyc7XG4gICAgICAgICAgICAgICAgc3RhdHVzLm1heEVudHJ5U2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI3NpemUgPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gYWRkaXRpb25cbiAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuI3NpemUgPT09IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuI3RhaWxcbiAgICAgICAgICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNldmljdChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGs7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuc2V0KGssIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3ByZXZbaW5kZXhdID0gdGhpcy4jdGFpbDtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3NpemUrKztcbiAgICAgICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ2FkZCc7XG4gICAgICAgICAgICBub1VwZGF0ZVRUTCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlXG4gICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IF9fc3RhbGVXaGlsZUZldGNoaW5nOiBzIH0gPSBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzICE9PSB1bmRlZmluZWQgJiYgIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3MsIGssICdzZXQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW29sZFZhbCwgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB2O1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRWYWwgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvbGRWYWwuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkVmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5vbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAndXBkYXRlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldEl0ZW1UVEwoaW5kZXgsIHR0bCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFub0Rpc3Bvc2VPblNldCAmJiB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmljdCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBpdGVtLCByZXR1cm5pbmcgaXRzIHZhbHVlIG9yXG4gICAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAgICovXG4gICAgcG9wKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3NpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLiN2YWxMaXN0W3RoaXMuI2hlYWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2V2aWN0KHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNldmljdChmcmVlKSB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLiNoZWFkO1xuICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF07XG4gICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssICdldmljdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkPy5wdXNoKFt2LCBrLCAnZXZpY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaGVhZCk7XG4gICAgICAgIC8vIGlmIHdlIGFyZW4ndCBhYm91dCB0byB1c2UgdGhlIGluZGV4LCB0aGVuIG51bGwgdGhlc2Ugb3V0XG4gICAgICAgIGlmIChmcmVlKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtoZWFkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSAwO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaGVhZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICByZXR1cm4gaGVhZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBrZXkgaXMgaW4gdGhlIGNhY2hlLCB3aXRob3V0IHVwZGF0aW5nIHRoZSByZWNlbmN5IG9mIHVzZS5cbiAgICAgKiBXaWxsIHJldHVybiBmYWxzZSBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgZXZlbiB0aG91Z2ggaXQgaXMgdGVjaG5pY2FsbHlcbiAgICAgKiBpbiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2ZcbiAgICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAgICogdG8gYHRydWVgIGluIGVpdGhlciB0aGUgb3B0aW9ucyBvciB0aGUgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgICAqIHRoZSBjYWNoZS4gVGhlIGRpZmZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGlmIGl0IG1hdHRlcnMpIGJ5IHVzaW5nIGFcbiAgICAgKiBgc3RhdHVzYCBhcmd1bWVudCwgYW5kIGluc3BlY3RpbmcgdGhlIGBoYXNgIGZpZWxkLlxuICAgICAqXG4gICAgICogV2lsbCBub3QgdXBkYXRlIGl0ZW0gYWdlIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0LlxuICAgICAqL1xuICAgIGhhcyhrLCBoYXNPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyB1cGRhdGVBZ2VPbkhhcyA9IHRoaXMudXBkYXRlQWdlT25IYXMsIHN0YXR1cyB9ID0gaGFzT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgICAgICAgICAgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVBZ2VPbkhhcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuaGFzID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICAgKiBpdGVtcy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBzZXQuXG4gICAgICovXG4gICAgcGVlayhrLCBwZWVrT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSB9ID0gcGVla09wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICghYWxsb3dTdGFsZSAmJiB0aGlzLiNpc1N0YWxlKGluZGV4KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgICAgIHJldHVybiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2O1xuICAgIH1cbiAgICAjYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHYgPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWMgPSBuZXcgQUMoKTtcbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIC8vIHdoZW4vaWYgb3VyIEFDIHNpZ25hbHMsIHRoZW4gc3RvcCBsaXN0ZW5pbmcgdG8gdGhlaXJzLlxuICAgICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgICAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmV0Y2hPcHRzID0ge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2IgPSAodiwgdXBkYXRlQ2FjaGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb247XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVBYm9ydClcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGFjLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdiwgZmV0Y2hPcHRzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlYiA9IChlcikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoRmFpbChlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZldGNoRmFpbCA9IChlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgICAgICAgICAgY29uc3QgYWxsb3dTdGFsZSA9IGFsbG93U3RhbGVBYm9ydGVkIHx8IG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBub0RlbGV0ZSA9IGFsbG93U3RhbGUgfHwgb3B0aW9ucy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhbGxvdyBzdGFsZSBvbiBmZXRjaCByZWplY3Rpb25zLCB0aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhbGUgdmFsdWUgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUgZmV0Y2ggZmFpbHMuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsID0gIW5vRGVsZXRlIHx8IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhbGxvd1N0YWxlQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFyZSBkb25lIHdpdGggdGhlIHByb21pc2UgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgaXQgdW50b3VjaGVkIGlmIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmYuX19yZXR1cm5lZCA9PT0gYmYpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGNhbGwgPSAocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZtcCA9IHRoaXMuI2ZldGNoTWV0aG9kPy4oaywgdiwgZmV0Y2hPcHRzKTtcbiAgICAgICAgICAgIGlmIChmbXAgJiYgZm1wIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGZtcC50aGVuKHYgPT4gcmVzKHYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHYpLCByZWopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWdub3JlZCwgd2UgZ28gdW50aWwgd2UgZmluaXNoLCByZWdhcmRsZXNzLlxuICAgICAgICAgICAgLy8gZGVmZXIgY2hlY2sgdW50aWwgd2UgYXJlIGFjdHVhbGx5IGFib3J0aW5nLFxuICAgICAgICAgICAgLy8gc28gZmV0Y2hNZXRob2QgY2FuIG92ZXJyaWRlLlxuICAgICAgICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0IHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBldmVudHVhbGx5IHJlc29sdmVzLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB2ID0+IGNiKHYsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXR1cylcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZShwY2FsbCkudGhlbihjYiwgZWIpO1xuICAgICAgICBjb25zdCBiZiA9IE9iamVjdC5hc3NpZ24ocCwge1xuICAgICAgICAgICAgX19hYm9ydENvbnRyb2xsZXI6IGFjLFxuICAgICAgICAgICAgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHYsXG4gICAgICAgICAgICBfX3JldHVybmVkOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICAgICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiZjtcbiAgICB9XG4gICAgI2lzQmFja2dyb3VuZEZldGNoKHApIHtcbiAgICAgICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgYiA9IHA7XG4gICAgICAgIHJldHVybiAoISFiICYmXG4gICAgICAgICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDKTtcbiAgICB9XG4gICAgYXN5bmMgZmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBcbiAgICAgICAgLy8gZ2V0IG9wdGlvbnNcbiAgICAgICAgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgXG4gICAgICAgIC8vIHNldCBvcHRpb25zXG4gICAgICAgIHR0bCA9IHRoaXMudHRsLCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemUgPSAwLCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLCBcbiAgICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9IHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgY29udGV4dCwgZm9yY2VSZWZyZXNoID0gZmFsc2UsIHN0YXR1cywgc2lnbmFsLCB9ID0gZmV0Y2hPcHRpb25zO1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdnZXQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGssIHtcbiAgICAgICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dTdGFsZSxcbiAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgdHRsLFxuICAgICAgICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgICAgICAgbm9VcGRhdGVUVEwsXG4gICAgICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICAgICAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICAgICAgICBpZ25vcmVGZXRjaEFib3J0LFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnbWlzcyc7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpbiBjYWNoZSwgbWF5YmUgYWxyZWFkeSBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhbGUgPSBhbGxvd1N0YWxlICYmIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWxlID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6ICh2Ll9fcmV0dXJuZWQgPSB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHdlIGZvcmNlIGEgcmVmcmVzaCwgdGhhdCBtZWFucyBkbyBOT1Qgc2VydmUgdGhlIGNhY2hlZCB2YWx1ZSxcbiAgICAgICAgICAgIC8vIHVubGVzcyB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IGlzU3RhbGUgPSB0aGlzLiNpc1N0YWxlKGluZGV4KTtcbiAgICAgICAgICAgIGlmICghZm9yY2VSZWZyZXNoICYmICFpc1N0YWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0YWxlID0gcC5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3RhbGVWYWwgPSBoYXNTdGFsZSAmJiBhbGxvd1N0YWxlO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9IGlzU3RhbGUgPyAnc3RhbGUnIDogJ3JlZnJlc2gnO1xuICAgICAgICAgICAgICAgIGlmIChzdGFsZVZhbCAmJiBpc1N0YWxlKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IHRoaXMuZmV0Y2goaywgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIG1lbW8oaywgbWVtb09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBtZW1vTWV0aG9kID0gdGhpcy4jbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnM7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLmdldChrLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNvbnN0IHZ2ID0gbWVtb01ldGhvZChrLCB2LCB7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0KGssIHZ2LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHZ2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAgICogZW50cnkgZm91bmQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZ2V0KGssIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsIHVwZGF0ZUFnZU9uR2V0ID0gdGhpcy51cGRhdGVBZ2VPbkdldCwgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsIHN0YXR1cywgfSA9IGdldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdldCA9ICdzdGFsZSc7XG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgICAgICAgICAgaWYgKCFmZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1N0YWxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgY3VycmVudGx5IGZldGNoaW5nIGl0LCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGl0IHlldFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBub3Qgc3RhbGUsIGFuZCBmZXRjaGluZywgQU5EIGhhcyBhIF9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgLy8gdmFsdWUsIHRoZW4gdGhhdCBtZWFucyB0aGUgdXNlciBmZXRjaGVkIHdpdGgge2ZvcmNlUmVmcmVzaDp0cnVlfSxcbiAgICAgICAgICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgfVxuICAgICNjb25uZWN0KHAsIG4pIHtcbiAgICAgICAgdGhpcy4jcHJldltuXSA9IHA7XG4gICAgICAgIHRoaXMuI25leHRbcF0gPSBuO1xuICAgIH1cbiAgICAjbW92ZVRvVGFpbChpbmRleCkge1xuICAgICAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgLy8gaWYgaGVhZCwgbW92ZSBoZWFkIHRvIG5leHRbaW5kZXhdXG4gICAgICAgIC8vIGVsc2VcbiAgICAgICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgICAgICAvLyAgIG1vdmUgcHJldltuZXh0W2luZGV4XV0gdG8gcHJldltpbmRleF1cbiAgICAgICAgLy8gcHJldltpbmRleF0gPSB0YWlsXG4gICAgICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgICAgICAvLyB0YWlsID0gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3ByZXZbaW5kZXhdLCB0aGlzLiNuZXh0W2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3RhaWwsIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGtleSB3YXMgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGRlbGV0ZShrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjZGVsZXRlKGssIHJlYXNvbikge1xuICAgICAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleU1hcC5kZWxldGUoayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN0YWlsID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNuZXh0W3BpXSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmkgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3ByZXZbbmldID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGUgZW50aXJlbHksIHRocm93aW5nIGF3YXkgYWxsIHZhbHVlcy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKTtcbiAgICB9XG4gICAgI2NsZWFyKHJlYXNvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy4jdmFsTGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKTtcbiAgICAgICAgICAgIHRoaXMuI3N0YXJ0cy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgdGhpcy4jc2l6ZXMuZmlsbCgwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7IHBvc2l4LCB3aW4zMiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgbHN0YXRTeW5jLCByZWFkZGlyIGFzIHJlYWRkaXJDQiwgcmVhZGRpclN5bmMsIHJlYWRsaW5rU3luYywgcmVhbHBhdGhTeW5jIGFzIHJwcywgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBhY3R1YWxGUyBmcm9tICdub2RlOmZzJztcbmNvbnN0IHJlYWxwYXRoU3luYyA9IHJwcy5uYXRpdmU7XG4vLyBUT0RPOiB0ZXN0IHBlcmYgb2YgZnMvcHJvbWlzZXMgcmVhbHBhdGggdnMgcmVhbHBhdGhDQixcbi8vIHNpbmNlIHRoZSBwcm9taXNlcyBvbmUgdXNlcyByZWFscGF0aC5uYXRpdmVcbmltcG9ydCB7IGxzdGF0LCByZWFkZGlyLCByZWFkbGluaywgcmVhbHBhdGggfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IE1pbmlwYXNzIH0gZnJvbSAnbWluaXBhc3MnO1xuY29uc3QgZGVmYXVsdEZTID0ge1xuICAgIGxzdGF0U3luYyxcbiAgICByZWFkZGlyOiByZWFkZGlyQ0IsXG4gICAgcmVhZGRpclN5bmMsXG4gICAgcmVhZGxpbmtTeW5jLFxuICAgIHJlYWxwYXRoU3luYyxcbiAgICBwcm9taXNlczoge1xuICAgICAgICBsc3RhdCxcbiAgICAgICAgcmVhZGRpcixcbiAgICAgICAgcmVhZGxpbmssXG4gICAgICAgIHJlYWxwYXRoLFxuICAgIH0sXG59O1xuLy8gaWYgdGhleSBqdXN0IGdhdmUgdXMgcmVxdWlyZSgnZnMnKSB0aGVuIHVzZSBvdXIgZGVmYXVsdFxuY29uc3QgZnNGcm9tT3B0aW9uID0gKGZzT3B0aW9uKSA9PiAhZnNPcHRpb24gfHwgZnNPcHRpb24gPT09IGRlZmF1bHRGUyB8fCBmc09wdGlvbiA9PT0gYWN0dWFsRlMgP1xuICAgIGRlZmF1bHRGU1xuICAgIDoge1xuICAgICAgICAuLi5kZWZhdWx0RlMsXG4gICAgICAgIC4uLmZzT3B0aW9uLFxuICAgICAgICBwcm9taXNlczoge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZTLnByb21pc2VzLFxuICAgICAgICAgICAgLi4uKGZzT3B0aW9uLnByb21pc2VzIHx8IHt9KSxcbiAgICAgICAgfSxcbiAgICB9O1xuLy8gdHVybiBzb21ldGhpbmcgbGlrZSAvLz8vYzovIGludG8gYzpcXFxuY29uc3QgdW5jRHJpdmVSZWdleHAgPSAvXlxcXFxcXFxcXFw/XFxcXChbYS16XTopXFxcXD8kL2k7XG5jb25zdCB1bmNUb0RyaXZlID0gKHJvb3RQYXRoKSA9PiByb290UGF0aC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwnKS5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4vLyB3aW5kb3dzIHBhdGhzIGFyZSBzZXBhcmF0ZWQgYnkgZWl0aGVyIC8gb3IgXFxcbmNvbnN0IGVpdGhlclNlcCA9IC9bXFxcXFxcL10vO1xuY29uc3QgVU5LTk9XTiA9IDA7IC8vIG1heSBub3QgZXZlbiBleGlzdCwgZm9yIGFsbCB3ZSBrbm93XG5jb25zdCBJRklGTyA9IDBiMDAwMTtcbmNvbnN0IElGQ0hSID0gMGIwMDEwO1xuY29uc3QgSUZESVIgPSAwYjAxMDA7XG5jb25zdCBJRkJMSyA9IDBiMDExMDtcbmNvbnN0IElGUkVHID0gMGIxMDAwO1xuY29uc3QgSUZMTksgPSAwYjEwMTA7XG5jb25zdCBJRlNPQ0sgPSAwYjExMDA7XG5jb25zdCBJRk1UID0gMGIxMTExO1xuLy8gbWFzayB0byB1bnNldCBsb3cgNCBiaXRzXG5jb25zdCBJRk1UX1VOS05PV04gPSB+SUZNVDtcbi8vIHNldCBhZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZyByZWFkZGlyKCkgYW5kIGdldHRpbmcgZW50cmllcy5cbmNvbnN0IFJFQURESVJfQ0FMTEVEID0gMGIwMDAwXzAwMDFfMDAwMDtcbi8vIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgbHN0YXQoKVxuY29uc3QgTFNUQVRfQ0FMTEVEID0gMGIwMDAwXzAwMTBfMDAwMDtcbi8vIHNldCBpZiBhbiBlbnRyeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBpcyBkZWZpbml0ZWx5IG5vdCBhIGRpclxuY29uc3QgRU5PVERJUiA9IDBiMDAwMF8wMTAwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgZG9lcyBub3QgZXhpc3Rcbi8vIChjYW4gYWxzbyBiZSBzZXQgb24gbHN0YXQgZXJyb3JzIGxpa2UgRUFDQ0VTIG9yIEVOQU1FVE9PTE9ORylcbmNvbnN0IEVOT0VOVCA9IDBiMDAwMF8xMDAwXzAwMDA7XG4vLyBjYW5ub3QgaGF2ZSBjaGlsZCBlbnRyaWVzIC0tIGFsc28gdmVyaWZ5ICZJRk1UIGlzIGVpdGhlciBJRkRJUiBvciBJRkxOS1xuLy8gc2V0IGlmIHdlIGZhaWwgdG8gcmVhZGxpbmtcbmNvbnN0IEVOT1JFQURMSU5LID0gMGIwMDAxXzAwMDBfMDAwMDtcbi8vIHNldCBpZiB3ZSBrbm93IHJlYWxwYXRoKCkgd2lsbCBmYWlsXG5jb25zdCBFTk9SRUFMUEFUSCA9IDBiMDAxMF8wMDAwXzAwMDA7XG5jb25zdCBFTk9DSElMRCA9IEVOT1RESVIgfCBFTk9FTlQgfCBFTk9SRUFMUEFUSDtcbmNvbnN0IFRZUEVNQVNLID0gMGIwMDExXzExMTFfMTExMTtcbmNvbnN0IGVudFRvVHlwZSA9IChzKSA9PiBzLmlzRmlsZSgpID8gSUZSRUdcbiAgICA6IHMuaXNEaXJlY3RvcnkoKSA/IElGRElSXG4gICAgICAgIDogcy5pc1N5bWJvbGljTGluaygpID8gSUZMTktcbiAgICAgICAgICAgIDogcy5pc0NoYXJhY3RlckRldmljZSgpID8gSUZDSFJcbiAgICAgICAgICAgICAgICA6IHMuaXNCbG9ja0RldmljZSgpID8gSUZCTEtcbiAgICAgICAgICAgICAgICAgICAgOiBzLmlzU29ja2V0KCkgPyBJRlNPQ0tcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcy5pc0ZJRk8oKSA/IElGSUZPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVTktOT1dOO1xuLy8gbm9ybWFsaXplIHVuaWNvZGUgcGF0aCBuYW1lc1xuY29uc3Qgbm9ybWFsaXplQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemUgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBzLm5vcm1hbGl6ZSgnTkZLRCcpO1xuICAgIG5vcm1hbGl6ZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG5jb25zdCBub3JtYWxpemVOb2Nhc2VDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IG5vcm1hbGl6ZU5vY2FzZSA9IChzKSA9PiB7XG4gICAgY29uc3QgYyA9IG5vcm1hbGl6ZU5vY2FzZUNhY2hlLmdldChzKTtcbiAgICBpZiAoYylcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgY29uc3QgbiA9IG5vcm1hbGl6ZShzLnRvTG93ZXJDYXNlKCkpO1xuICAgIG5vcm1hbGl6ZU5vY2FzZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG4vKipcbiAqIEFuIExSVUNhY2hlIGZvciBzdG9yaW5nIHJlc29sdmVkIHBhdGggc3RyaW5ncyBvciBQYXRoIG9iamVjdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVDYWNoZSBleHRlbmRzIExSVUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoeyBtYXg6IDI1NiB9KTtcbiAgICB9XG59XG4vLyBJbiBvcmRlciB0byBwcmV2ZW50IGJsb3dpbmcgb3V0IHRoZSBqcyBoZWFwIGJ5IGFsbG9jYXRpbmcgaHVuZHJlZHMgb2Zcbi8vIHRob3VzYW5kcyBvZiBQYXRoIGVudHJpZXMgd2hlbiB3YWxraW5nIGV4dHJlbWVseSBsYXJnZSB0cmVlcywgdGhlIFwiY2hpbGRyZW5cIlxuLy8gaW4gdGhpcyB0cmVlIGFyZSByZXByZXNlbnRlZCBieSBzdG9yaW5nIGFuIGFycmF5IG9mIFBhdGggZW50cmllcyBpbiBhblxuLy8gTFJVQ2FjaGUsIGluZGV4ZWQgYnkgdGhlIHBhcmVudC4gIEF0IGFueSB0aW1lLCBQYXRoLmNoaWxkcmVuKCkgbWF5IHJldHVybiBhblxuLy8gZW1wdHkgYXJyYXksIGluZGljYXRpbmcgdGhhdCBpdCBkb2Vzbid0IGtub3cgYWJvdXQgYW55IG9mIGl0cyBjaGlsZHJlbiwgYW5kXG4vLyB0aHVzIGhhcyB0byByZWJ1aWxkIHRoYXQgY2FjaGUuICBUaGlzIGlzIGZpbmUsIGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSBkb24ndFxuLy8gYmVuZWZpdCBhcyBtdWNoIGZyb20gaGF2aW5nIHRoZSBjYWNoZWQgZW50cmllcywgYnV0IGh1Z2UgZGlyZWN0b3J5IHdhbGtzXG4vLyBkb24ndCBibG93IG91dCB0aGUgc3RhY2ssIGFuZCBzbWFsbGVyIG9uZXMgYXJlIHN0aWxsIGFzIGZhc3QgYXMgcG9zc2libGUuXG4vL1xuLy9JdCBkb2VzIGltcG9zZSBzb21lIGNvbXBsZXhpdHkgd2hlbiBidWlsZGluZyB1cCB0aGUgcmVhZGRpciBkYXRhLCBiZWNhdXNlIHdlXG4vL25lZWQgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgY2hpbGRyZW4gYXJyYXkgdGhhdCB3ZSBzdGFydGVkIHdpdGguXG4vKipcbiAqIGFuIExSVUNhY2hlIGZvciBzdG9yaW5nIGNoaWxkIGVudHJpZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIENoaWxkcmVuQ2FjaGUgZXh0ZW5kcyBMUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IobWF4U2l6ZSA9IDE2ICogMTAyNCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBtYXhTaXplLFxuICAgICAgICAgICAgLy8gcGFyZW50ICsgY2hpbGRyZW5cbiAgICAgICAgICAgIHNpemVDYWxjdWxhdGlvbjogYSA9PiBhLmxlbmd0aCArIDEsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNvbnN0IHNldEFzQ3dkID0gU3ltYm9sKCdQYXRoU2N1cnJ5IHNldEFzQ3dkJyk7XG4vKipcbiAqIFBhdGggb2JqZWN0cyBhcmUgc29ydCBvZiBsaWtlIGEgc3VwZXItcG93ZXJlZFxuICoge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvZnMuaHRtbCNjbGFzcy1mc2RpcmVudCBmcy5EaXJlbnR9XG4gKlxuICogRWFjaCBvbmUgcmVwcmVzZW50cyBhIHNpbmdsZSBmaWxlc3lzdGVtIGVudHJ5IG9uIGRpc2ssIHdoaWNoIG1heSBvciBtYXkgbm90XG4gKiBleGlzdC4gSXQgaW5jbHVkZXMgbWV0aG9kcyBmb3IgcmVhZGluZyB2YXJpb3VzIHR5cGVzIG9mIGluZm9ybWF0aW9uIHZpYVxuICogbHN0YXQsIHJlYWRsaW5rLCBhbmQgcmVhZGRpciwgYW5kIGNhY2hlcyBhbGwgaW5mb3JtYXRpb24gdG8gdGhlIGdyZWF0ZXN0XG4gKiBkZWdyZWUgcG9zc2libGUuXG4gKlxuICogTm90ZSB0aGF0IGZzIG9wZXJhdGlvbnMgdGhhdCB3b3VsZCBub3JtYWxseSB0aHJvdyB3aWxsIGluc3RlYWQgcmV0dXJuIGFuXG4gKiBcImVtcHR5XCIgdmFsdWUuIFRoaXMgaXMgaW4gb3JkZXIgdG8gcHJldmVudCBleGNlc3NpdmUgb3ZlcmhlYWQgZnJvbSBlcnJvclxuICogc3RhY2sgdHJhY2VzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHRoZSBiYXNlbmFtZSBvZiB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50Kio6ICphbHdheXMqIHRlc3QgdGhlIHBhdGggbmFtZSBhZ2FpbnN0IGFueSB0ZXN0IHN0cmluZ1xuICAgICAqIHVzaW5ndGhlIHtAbGluayBpc05hbWVkfSBtZXRob2QsIGFuZCBub3QgYnkgZGlyZWN0bHkgY29tcGFyaW5nIHRoaXNcbiAgICAgKiBzdHJpbmcuIE90aGVyd2lzZSwgdW5pY29kZSBwYXRoIHN0cmluZ3MgdGhhdCB0aGUgc3lzdGVtIHNlZXMgYXMgaWRlbnRpY2FsXG4gICAgICogd2lsbCBub3QgYmUgcHJvcGVybHkgdHJlYXRlZCBhcyB0aGUgc2FtZSBwYXRoLCBsZWFkaW5nIHRvIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yIGFuZCBwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZXMuXG4gICAgICovXG4gICAgbmFtZTtcbiAgICAvKipcbiAgICAgKiB0aGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRoIHJvb3QuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290O1xuICAgIC8qKlxuICAgICAqIEFsbCByb290cyBmb3VuZCB3aXRoaW4gdGhlIGN1cnJlbnQgUGF0aFNjdXJyeSBmYW1pbHlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJvb3RzO1xuICAgIC8qKlxuICAgICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgcGF0aCwgb3IgdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIHJvb3QgZW50cmllc1xuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyZW50O1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHBhdGhzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHlcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgLyoqXG4gICAgICogYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBwYXRoIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICogb2YgdGhlIFBhdGhTY3VycnkgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIGl0LlxuICAgICAqL1xuICAgIGlzQ1dEID0gZmFsc2U7XG4gICAgLy8gcG90ZW50aWFsIGRlZmF1bHQgZnMgb3ZlcnJpZGVcbiAgICAjZnM7XG4gICAgLy8gU3RhdHMgZmllbGRzXG4gICAgI2RldjtcbiAgICBnZXQgZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGV2O1xuICAgIH1cbiAgICAjbW9kZTtcbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21vZGU7XG4gICAgfVxuICAgICNubGluaztcbiAgICBnZXQgbmxpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNubGluaztcbiAgICB9XG4gICAgI3VpZDtcbiAgICBnZXQgdWlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdWlkO1xuICAgIH1cbiAgICAjZ2lkO1xuICAgIGdldCBnaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNnaWQ7XG4gICAgfVxuICAgICNyZGV2O1xuICAgIGdldCByZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmRldjtcbiAgICB9XG4gICAgI2Jsa3NpemU7XG4gICAgZ2V0IGJsa3NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNibGtzaXplO1xuICAgIH1cbiAgICAjaW5vO1xuICAgIGdldCBpbm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpbm87XG4gICAgfVxuICAgICNzaXplO1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgI2Jsb2NrcztcbiAgICBnZXQgYmxvY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxvY2tzO1xuICAgIH1cbiAgICAjYXRpbWVNcztcbiAgICBnZXQgYXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2F0aW1lTXM7XG4gICAgfVxuICAgICNtdGltZU1zO1xuICAgIGdldCBtdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXRpbWVNcztcbiAgICB9XG4gICAgI2N0aW1lTXM7XG4gICAgZ2V0IGN0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjdGltZU1zO1xuICAgIH1cbiAgICAjYmlydGh0aW1lTXM7XG4gICAgZ2V0IGJpcnRodGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmlydGh0aW1lTXM7XG4gICAgfVxuICAgICNhdGltZTtcbiAgICBnZXQgYXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZTtcbiAgICB9XG4gICAgI210aW1lO1xuICAgIGdldCBtdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lO1xuICAgIH1cbiAgICAjY3RpbWU7XG4gICAgZ2V0IGN0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWU7XG4gICAgfVxuICAgICNiaXJ0aHRpbWU7XG4gICAgZ2V0IGJpcnRodGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZTtcbiAgICB9XG4gICAgI21hdGNoTmFtZTtcbiAgICAjZGVwdGg7XG4gICAgI2Z1bGxwYXRoO1xuICAgICNmdWxscGF0aFBvc2l4O1xuICAgICNyZWxhdGl2ZTtcbiAgICAjcmVsYXRpdmVQb3NpeDtcbiAgICAjdHlwZTtcbiAgICAjY2hpbGRyZW47XG4gICAgI2xpbmtUYXJnZXQ7XG4gICAgI3JlYWxwYXRoO1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgRGlyZW50IGNsYXNzIGFzIG9mXG4gICAgICogTm9kZSB2MjAsIHdoZXJlIERpcmVudFsncGFyZW50UGF0aCddIHJlZmVycyB0byB0aGUgcGF0aCBvZiB0aGVcbiAgICAgKiBkaXJlY3RvcnkgdGhhdCB3YXMgcGFzc2VkIHRvIHJlYWRkaXIuIEZvciByb290IGVudHJpZXMsIGl0J3MgdGhlIHBhdGhcbiAgICAgKiB0byB0aGUgZW50cnkgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXJlbnRQYXRoKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMucGFyZW50IHx8IHRoaXMpLmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlcHJlY2F0ZWQgYWxpYXMgZm9yIERpcmVudFsncGFyZW50UGF0aCddIFNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmVseSxcbiAgICAgKiB0aGlzIHByb3BlcnR5IHJlZmVycyB0byB0aGUgKnBhcmVudCogcGF0aCwgbm90IHRoZSBwYXRoIG9iamVjdCBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuI21hdGNoTmFtZSA9IG5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShuYW1lKSA6IG5vcm1hbGl6ZShuYW1lKTtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHR5cGUgJiBUWVBFTUFTSztcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLiNmdWxscGF0aCA9IG9wdHMuZnVsbHBhdGg7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlID0gb3B0cy5yZWxhdGl2ZTtcbiAgICAgICAgdGhpcy4jcmVsYXRpdmVQb3NpeCA9IG9wdHMucmVsYXRpdmVQb3NpeDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBvcHRzLnBhcmVudDtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IHRoaXMucGFyZW50LiNmcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKG9wdHMuZnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBQYXRoIG9iamVjdCBmcm9tIGl0cyByb290LlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgcGF0aCBhdCBgL2Zvby9iYXJgIHdvdWxkIGhhdmUgYSBkZXB0aCBvZiAyLlxuICAgICAqL1xuICAgIGRlcHRoKCkge1xuICAgICAgICBpZiAodGhpcy4jZGVwdGggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNkZXB0aDtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNkZXB0aCA9IHRoaXMucGFyZW50LmRlcHRoKCkgKyAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIFBhdGggb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIHN0cmluZyBwYXRoLCByZXNvbHZlZCBmcm9tIHRoaXMgUGF0aFxuICAgICAqL1xuICAgIHJlc29sdmUocGF0aCkge1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5nZXRSb290U3RyaW5nKHBhdGgpO1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnN1YnN0cmluZyhyb290UGF0aC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkaXJQYXJ0cyA9IGRpci5zcGxpdCh0aGlzLnNwbGl0U2VwKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcm9vdFBhdGggP1xuICAgICAgICAgICAgdGhpcy5nZXRSb290KHJvb3RQYXRoKS4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKVxuICAgICAgICAgICAgOiB0aGlzLiNyZXNvbHZlUGFydHMoZGlyUGFydHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAjcmVzb2x2ZVBhcnRzKGRpclBhcnRzKSB7XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGRpclBhcnRzKSB7XG4gICAgICAgICAgICBwID0gcC5jaGlsZChwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIGNoaWxkcmVuIFBhdGggb2JqZWN0cywgaWYgc3RpbGwgYXZhaWxhYmxlLiAgSWYgdGhleVxuICAgICAqIGhhdmUgZmFsbGVuIG91dCBvZiB0aGUgY2FjaGUsIHRoZW4gcmV0dXJucyBhbiBlbXB0eSBhcnJheSwgYW5kIHJlc2V0cyB0aGVcbiAgICAgKiBSRUFERElSX0NBTExFRCBiaXQsIHNvIHRoYXQgZnV0dXJlIGNhbGxzIHRvIHJlYWRkaXIoKSB3aWxsIHJlcXVpcmUgYW4gZnNcbiAgICAgKiBsb29rdXAuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbigpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jY2hpbGRyZW4uZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmFzc2lnbihbXSwgeyBwcm92aXNpb25hbDogMCB9KTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4uc2V0KHRoaXMsIGNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy4jdHlwZSAmPSB+UkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSBwYXRoIHBvcnRpb24gYW5kIHJldHVybnMgb3IgY3JlYXRlcyB0aGUgY2hpbGQgUGF0aC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHRoaXNgIGlmIHBhdGhQYXJ0IGlzIGAnJ2Agb3IgYCcuJ2AsIG9yIGBwYXJlbnRgIGlmIHBhdGhQYXJ0IGlzXG4gICAgICogYCcuLidgLlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gIElmIGBwYXRoUGFydGAgY29udGFpbnMgYW55IHBhdGhcbiAgICAgKiBzZXBhcmF0b3JzLCBpdCB3aWxsIGxlYWQgdG8gdW5zYWZlIHVuZGVmaW5lZCBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVzZSBgUGF0aC5yZXNvbHZlKClgIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZChwYXRoUGFydCwgb3B0cykge1xuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcnIHx8IHBhdGhQYXJ0ID09PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50IHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCB0aGUgY2hpbGRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShwYXRoUGFydCkgOiBub3JtYWxpemUocGF0aFBhcnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChwLiNtYXRjaE5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZmluZCBpdCwgY3JlYXRlIHByb3Zpc2lvbmFsIGNoaWxkLCBzaW5jZSBpdCBtaWdodCBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgZXhpc3QuICBJZiB3ZSBrbm93IHRoZSBwYXJlbnQgaXNuJ3QgYSBkaXIsIHRoZW5cbiAgICAgICAgLy8gaW4gZmFjdCBpdCBDQU4nVCBleGlzdC5cbiAgICAgICAgY29uc3QgcyA9IHRoaXMucGFyZW50ID8gdGhpcy5zZXAgOiAnJztcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLiNmdWxscGF0aCA/IHRoaXMuI2Z1bGxwYXRoICsgcyArIHBhdGhQYXJ0IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwY2hpbGQgPSB0aGlzLm5ld0NoaWxkKHBhdGhQYXJ0LCBVTktOT1dOLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgICAgICAgZnVsbHBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBwY2hpbGQuI3R5cGUgfD0gRU5PRU5UO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGhhdmUgdG8gdXBkYXRlIHByb3Zpc2lvbmFsLCBiZWNhdXNlIGlmIHdlIGhhdmUgcmVhbCBjaGlsZHJlbixcbiAgICAgICAgLy8gdGhlbiBwcm92aXNpb25hbCBpcyBzZXQgdG8gY2hpbGRyZW4ubGVuZ3RoLCBvdGhlcndpc2UgYSBsb3dlciBudW1iZXJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChwY2hpbGQpO1xuICAgICAgICByZXR1cm4gcGNoaWxkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QuIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aCgpXG4gICAgICovXG4gICAgcmVsYXRpdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ1dEKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy4jcmVsYXRpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlbGF0aXZlID0gdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmUoKTtcbiAgICAgICAgcmV0dXJuIHB2ICsgKCFwdiB8fCAhcC5wYXJlbnQgPyAnJyA6IHRoaXMuc2VwKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCwgdXNpbmcgLyBhcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAgICogSWYgaXQgZG9lcyBub3Qgc2hhcmUgYW4gYW5jZXN0b3Igd2l0aFxuICAgICAqIHRoZSBjd2QsIHRoZW4gdGhpcyBlbmRzIHVwIGJlaW5nIGVxdWl2YWxlbnQgdG8gdGhlIGZ1bGxwYXRoUG9zaXgoKVxuICAgICAqIE9uIHBvc2l4IHN5c3RlbXMsIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHJlbGF0aXZlKCkuXG4gICAgICovXG4gICAgcmVsYXRpdmVQb3NpeCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlUG9zaXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZVBvc2l4O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZVBvc2l4ID0gdGhpcy5mdWxscGF0aFBvc2l4KCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5yZWxhdGl2ZVBvc2l4KCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiAnLycpICsgbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGx5IHJlc29sdmVkIHBhdGggc3RyaW5nIGZvciB0aGlzIFBhdGggZW50cnlcbiAgICAgKi9cbiAgICBmdWxscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNmdWxscGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGZwID0gcHYgKyAoIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoID0gZnApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB3aW5kb3dzLCB0aGlzIGlzIGlkZW50aWNhbCB0byBmdWxscGF0aC5cbiAgICAgKlxuICAgICAqIE9uIHdpbmRvd3MsIHRoaXMgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gdGhlIGZvcndhcmQtc2xhc2ggZm9ybSBvZiB0aGVcbiAgICAgKiBmdWxsIFVOQyBwYXRoLlxuICAgICAqL1xuICAgIGZ1bGxwYXRoUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aFBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGhQb3NpeDtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSB0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5mdWxscGF0aCgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgIGlmICgvXlthLXpdOlxcLy9pLnRlc3QocCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBgLy8/LyR7cH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgY29uc3QgcGZwcCA9IHAuZnVsbHBhdGhQb3NpeCgpO1xuICAgICAgICBjb25zdCBmcHAgPSBwZnBwICsgKCFwZnBwIHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIHRoaXMubmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gZnBwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggb2YgYW4gdW5rbm93biB0eXBlP1xuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHdlIG1pZ2h0IGtub3cgKnNvbWV0aGluZyogYWJvdXQgaXQgaWYgdGhlcmUgaGFzIGJlZW4gYSBwcmV2aW91c1xuICAgICAqIGZpbGVzeXN0ZW0gb3BlcmF0aW9uLCBmb3IgZXhhbXBsZSB0aGF0IGl0IGRvZXMgbm90IGV4aXN0LCBvciBpcyBub3QgYVxuICAgICAqIGxpbmssIG9yIHdoZXRoZXIgaXQgaGFzIGNoaWxkIGVudHJpZXMuXG4gICAgICovXG4gICAgaXNVbmtub3duKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gVU5LTk9XTjtcbiAgICB9XG4gICAgaXNUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYGlzJHt0eXBlfWBdKCk7XG4gICAgfVxuICAgIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc1Vua25vd24oKSA/ICdVbmtub3duJ1xuICAgICAgICAgICAgOiB0aGlzLmlzRGlyZWN0b3J5KCkgPyAnRGlyZWN0b3J5J1xuICAgICAgICAgICAgICAgIDogdGhpcy5pc0ZpbGUoKSA/ICdGaWxlJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNTeW1ib2xpY0xpbmsoKSA/ICdTeW1ib2xpY0xpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNGSUZPKCkgPyAnRklGTydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/ICdDaGFyYWN0ZXJEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0Jsb2NrRGV2aWNlKCkgPyAnQmxvY2tEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIGM4IGlnbm9yZSBzdGFydCAqLyB0aGlzLmlzU29ja2V0KCkgPyAnU29ja2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1Vua25vd24nKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggYSByZWd1bGFyIGZpbGU/XG4gICAgICovXG4gICAgaXNGaWxlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZSRUc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgZGlyZWN0b3J5P1xuICAgICAqL1xuICAgIGlzRGlyZWN0b3J5KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZESVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgY2hhcmFjdGVyIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0NoYXJhY3RlckRldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQ0hSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGJsb2NrIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0Jsb2NrRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZCTEs7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgRklGTyBwaXBlP1xuICAgICAqL1xuICAgIGlzRklGTygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGSUZPO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIHNvY2tldD9cbiAgICAgKi9cbiAgICBpc1NvY2tldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGU09DSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzeW1ib2xpYyBsaW5rP1xuICAgICAqL1xuICAgIGlzU3ltYm9saWNMaW5rKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRkxOSykgPT09IElGTE5LO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGVudHJ5IGlmIGl0IGhhcyBiZWVuIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIGxzdGF0LCBvclxuICAgICAqIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCogc2ltcGx5XG4gICAgICogbWVhbiB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIGxzdGF0IG9uIGl0LlxuICAgICAqL1xuICAgIGxzdGF0Q2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHlwZSAmIExTVEFUX0NBTExFRCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGVkIGxpbmsgdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdCBvZiBhXG4gICAgICogc3VjY2Vzc2Z1bCByZWFkbGluaywgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGxpbmsoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFkbGlua0NhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCByZWFscGF0aCB0YXJnZXQgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZSBzdWJqZWN0XG4gICAgICogb2YgYSBzdWNjZXNzZnVsIHJlYWxwYXRoLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFscGF0aCgpIGhhcyBiZWVuIGNhbGxlZCBhdCBzb21lIHBvaW50LlxuICAgICAqL1xuICAgIHJlYWxwYXRoQ2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZCBQYXRoIGVudHJpZXMgYXJyYXkgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZVxuICAgICAqIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIHJlYWRkaXIoKSwgb3IgW10gb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gZW1wdHkgYXJyYXkgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGRpcigpIGhhcyBiZWVuIGNhbGxlZCByZWNlbnRseSBlbm91Z2ggdG8gc3RpbGwgYmUgdmFsaWQuXG4gICAgICovXG4gICAgcmVhZGRpckNhY2hlZCgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIGl0J3Mgd29ydGggdHJ5aW5nIHRvIHJlYWRsaW5rLiAgSWUsIHdlIGRvbid0ICh5ZXQpIGhhdmVcbiAgICAgKiBhbnkgaW5kaWNhdGlvbiB0aGF0IHJlYWRsaW5rIHdpbGwgZGVmaW5pdGVseSBmYWlsLlxuICAgICAqXG4gICAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgYmUgYSBzeW1saW5rLCBpZiBhIHByZXZpb3VzXG4gICAgICogcmVhZGxpbmsgZmFpbGVkLCBvciBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuXG4gICAgICovXG4gICAgY2FuUmVhZGxpbmsoKSB7XG4gICAgICAgIGlmICh0aGlzLiNsaW5rVGFyZ2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGNhc2VzIHdoZXJlIGl0IGNhbm5vdCBwb3NzaWJseSBzdWNjZWVkXG4gICAgICAgIGNvbnN0IGlmbXQgPSB0aGlzLiN0eXBlICYgSUZNVDtcbiAgICAgICAgcmV0dXJuICEoKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZMTkspIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PUkVBRExJTksgfHxcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiByZWFkZGlyIGhhcyBwcmV2aW91c2x5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCBvbiB0aGlzXG4gICAgICogcGF0aCwgaW5kaWNhdGluZyB0aGF0IGNhY2hlZFJlYWRkaXIoKSBpcyBsaWtlbHkgdmFsaWQuXG4gICAgICovXG4gICAgY2FsbGVkUmVhZGRpcigpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBSRUFERElSX0NBTExFRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgZXhpc3QuIFRoYXQgaXMsIGEgcHJldmlvdXMgbHN0YXRcbiAgICAgKiBvciByZWFkZGlyIGZhaWxlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aGVuIHRoYXQgd291bGQgaGF2ZSBiZWVuXG4gICAgICogZXhwZWN0ZWQsIG9yIGEgcGFyZW50IGVudHJ5IHdhcyBtYXJrZWQgZWl0aGVyIGVub2VudCBvciBlbm90ZGlyLlxuICAgICAqL1xuICAgIGlzRU5PRU5UKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy4jdHlwZSAmIEVOT0VOVCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXRoIGlzIGEgbWF0Y2ggZm9yIHRoZSBnaXZlbiBwYXRoIG5hbWUuICBUaGlzIGhhbmRsZXNcbiAgICAgKiBjYXNlIHNlbnNpdGl2aXR5IGFuZCB1bmljb2RlIG5vcm1hbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBOb3RlOiBldmVuIG9uIGNhc2Utc2Vuc2l0aXZlIHN5c3RlbXMsIGl0IGlzICoqbm90Kiogc2FmZSB0byB0ZXN0IHRoZVxuICAgICAqIGVxdWFsaXR5IG9mIHRoZSBgLm5hbWVgIHByb3BlcnR5IHRvIGRldGVybWluZSB3aGV0aGVyIGEgZ2l2ZW4gcGF0aG5hbWVcbiAgICAgKiBtYXRjaGVzLCBkdWUgdG8gdW5pY29kZSBub3JtYWxpemF0aW9uIG1pc21hdGNoZXMuXG4gICAgICpcbiAgICAgKiBBbHdheXMgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2YgdGVzdGluZyB0aGUgYHBhdGgubmFtZWAgcHJvcGVydHlcbiAgICAgKiBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBpc05hbWVkKG4pIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vY2FzZSA/XG4gICAgICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZShuKVxuICAgICAgICAgICAgOiB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZU5vY2FzZShuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggaXMgbm90IGEgc3ltYm9saWMgbGluaywgb3IgaWYgdGhlIHJlYWRsaW5rIGNhbGwgZmFpbHMgZm9yIGFueVxuICAgICAqIHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHQgaXMgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0ZGF0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkbGluaygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGxpbmsodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSAoYXdhaXQgdGhpcy5wYXJlbnQucmVhbHBhdGgoKSk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UucmVhZGxpbmt9XG4gICAgICovXG4gICAgcmVhZGxpbmtTeW5jKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkbGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAvLyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGNhblJlYWRsaW5rIHRlc3QsIGhlcmUgZm9yIHRzIGdydW1wbGVzXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWQgPSB0aGlzLiNmcy5yZWFkbGlua1N5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSB0aGlzLnBhcmVudC5yZWFscGF0aFN5bmMoKT8ucmVzb2x2ZShyZWFkKTtcbiAgICAgICAgICAgIGlmIChsaW5rVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNsaW5rVGFyZ2V0ID0gbGlua1RhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkbGlua0ZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbikge1xuICAgICAgICAvLyBzdWNjZWVkZWQsIG1hcmsgcmVhZGRpciBjYWxsZWQgYml0XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gUkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIC8vIG1hcmsgYWxsIHJlbWFpbmluZyBwcm92aXNpb25hbCBjaGlsZHJlbiBhcyBFTk9FTlRcbiAgICAgICAgZm9yIChsZXQgcCA9IGNoaWxkcmVuLnByb3Zpc2lvbmFsOyBwIDwgY2hpbGRyZW4ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbltwXTtcbiAgICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgICAgIGMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbWFya0VOT0VOVCgpIHtcbiAgICAgICAgLy8gbWFyayBhcyBVTktOT1dOIGFuZCBFTk9FTlRcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9FTlQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSB8IEVOT0VOVCkgJiBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI21hcmtDaGlsZHJlbkVOT0VOVCgpO1xuICAgIH1cbiAgICAjbWFya0NoaWxkcmVuRU5PRU5UKCkge1xuICAgICAgICAvLyBhbGwgY2hpbGRyZW4gYXJlIHByb3Zpc2lvbmFsIGFuZCBkbyBub3QgZXhpc3RcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9SRUFMUEFUSCgpIHtcbiAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9SRUFMUEFUSDtcbiAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gd2hlbiB3ZSBrbm93IHRoZSBlbnRyeSBpcyBub3QgYSBkaXJcbiAgICAjbWFya0VOT1RESVIoKSB7XG4gICAgICAgIC8vIGVudHJ5IGlzIG5vdCBhIGRpcmVjdG9yeSwgc28gYW55IGNoaWxkcmVuIGNhbid0IGV4aXN0LlxuICAgICAgICAvLyB0aGlzICpzaG91bGQqIGJlIGltcG9zc2libGUsIHNpbmNlIGFueSBjaGlsZHJlbiBjcmVhdGVkXG4gICAgICAgIC8vIGFmdGVyIGl0J3MgYmVlbiBtYXJrZWQgRU5PVERJUiBzaG91bGQgYmUgbWFya2VkIEVOT0VOVCxcbiAgICAgICAgLy8gc28gaXQgd29uJ3QgZXZlbiBnZXQgdG8gdGhpcyBwb2ludC5cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PVERJUilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgbGV0IHQgPSB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBzdGF0IGEgZGlyLCB0aGVuIGRlbGV0ZSBpdCxcbiAgICAgICAgLy8gdGhlbiB0cnkgdG8gcmVhZCBpdCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuICAgICAgICBpZiAoKHQgJiBJRk1UKSA9PT0gSUZESVIpXG4gICAgICAgICAgICB0ICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHQgfCBFTk9URElSO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI3JlYWRkaXJGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBtYXJrRU5PVERJUiBhbmQgbWFya0VOT0VOVCBhbHNvIHNldCBwcm92aXNpb25hbD0wXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicgfHwgY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbigpLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbHN0YXRGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBXaW5kb3dzIGp1c3QgcmFpc2VzIEVOT0VOVCBpbiB0aGlzIGNhc2UsIGRpc2FibGUgZm9yIHdpbiBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBrbm93IGl0IGhhcyBhIHBhcmVudCBieSB0aGlzIHBvaW50XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICBwLiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkbGlua0ZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIGxldCB0ZXIgPSB0aGlzLiN0eXBlO1xuICAgICAgICB0ZXIgfD0gRU5PUkVBRExJTks7XG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgIHRlciB8PSBFTk9FTlQ7XG4gICAgICAgIC8vIHdpbmRvd3MgZ2V0cyBhIHdlaXJkIGVycm9yIHdoZW4geW91IHRyeSB0byByZWFkbGluayBhIGZpbGVcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFSU5WQUwnIHx8IGNvZGUgPT09ICdVTktOT1dOJykge1xuICAgICAgICAgICAgLy8gZXhpc3RzLCBidXQgbm90IGEgc3ltbGluaywgd2UgZG9uJ3Qga25vdyBXSEFUIGl0IGlzLCBzbyByZW1vdmVcbiAgICAgICAgICAgIC8vIGFsbCBJRk1UIGJpdHMuXG4gICAgICAgICAgICB0ZXIgJj0gSUZNVF9VTktOT1dOO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0ZXI7XG4gICAgICAgIC8vIHdpbmRvd3MganVzdCBnZXRzIEVOT0VOVCBpbiB0aGlzIGNhc2UuICBXZSBkbyBjb3ZlciB0aGUgY2FzZSxcbiAgICAgICAgLy8ganVzdCBkaXNhYmxlZCBiZWNhdXNlIGl0J3MgaW1wb3NzaWJsZSBvbiBXaW5kb3dzIENJXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgICAjcmVhZGRpckFkZENoaWxkKGUsIGMpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykgfHxcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGROZXdDaGlsZChlLCBjKSk7XG4gICAgfVxuICAgICNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykge1xuICAgICAgICAvLyBhbGxvYyBuZXcgZW50cnkgYXQgaGVhZCwgc28gaXQncyBuZXZlciBwcm92aXNpb25hbFxuICAgICAgICBjb25zdCB0eXBlID0gZW50VG9UeXBlKGUpO1xuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMubmV3Q2hpbGQoZS5uYW1lLCB0eXBlLCB7IHBhcmVudDogdGhpcyB9KTtcbiAgICAgICAgY29uc3QgaWZtdCA9IGNoaWxkLiN0eXBlICYgSUZNVDtcbiAgICAgICAgaWYgKGlmbXQgIT09IElGRElSICYmIGlmbXQgIT09IElGTE5LICYmIGlmbXQgIT09IFVOS05PV04pIHtcbiAgICAgICAgICAgIGNoaWxkLiN0eXBlIHw9IEVOT1RESVI7XG4gICAgICAgIH1cbiAgICAgICAgYy51bnNoaWZ0KGNoaWxkKTtcbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgICNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykge1xuICAgICAgICBmb3IgKGxldCBwID0gYy5wcm92aXNpb25hbDsgcCA8IGMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBjaGlsZCA9IGNbcF07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UoZS5uYW1lKSA6IG5vcm1hbGl6ZShlLm5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgIT09IHBjaGlsZC4jbWF0Y2hOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhZGRpclByb21vdGVDaGlsZChlLCBwY2hpbGQsIHAsIGMpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyUHJvbW90ZUNoaWxkKGUsIHAsIGluZGV4LCBjKSB7XG4gICAgICAgIGNvbnN0IHYgPSBwLm5hbWU7XG4gICAgICAgIC8vIHJldGFpbiBhbnkgb3RoZXIgZmxhZ3MsIGJ1dCBzZXQgaWZtdCBmcm9tIGRpcmVudFxuICAgICAgICBwLiN0eXBlID0gKHAuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgZW50VG9UeXBlKGUpO1xuICAgICAgICAvLyBjYXNlIHNlbnNpdGl2aXR5IGZpeGluZyB3aGVuIHdlIGxlYXJuIHRoZSB0cnVlIG5hbWUuXG4gICAgICAgIGlmICh2ICE9PSBlLm5hbWUpXG4gICAgICAgICAgICBwLm5hbWUgPSBlLm5hbWU7XG4gICAgICAgIC8vIGp1c3QgYWR2YW5jZSBwcm92aXNpb25hbCBpbmRleCAocG90ZW50aWFsbHkgb2ZmIHRoZSBsaXN0KSxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGhhdmUgdG8gc3BsaWNlL3BvcCBpdCBvdXQgYW5kIHJlLWluc2VydCBhdCBoZWFkXG4gICAgICAgIGlmIChpbmRleCAhPT0gYy5wcm92aXNpb25hbCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgYy5wb3AoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBjLnVuc2hpZnQocCk7XG4gICAgICAgIH1cbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoaXMgUGF0aCwgYW5kIHVwZGF0ZSBhbGwga25vd24gaW5mb3JtYXRpb24gdGhhdCBjYW4gYmVcbiAgICAgKiBkZXRlcm1pbmVkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHVubGlrZSBgZnMubHN0YXQoKWAsIHRoZSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNvbWVcbiAgICAgKiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBgbW9kZWAsIGBkZXZgLCBgbmxpbmtgLCBhbmQgYGlub2AuICBJZiB0aGF0XG4gICAgICogaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQsIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgZnMubHN0YXRgIHlvdXJzZWxmLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgb3IgaWYgdGhlIGxzdGF0IGNhbGwgZmFpbHMgZm9yXG4gICAgICogYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIHVwZGF0ZWQgUGF0aCBvYmplY3QgaXNcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBsc3RhdCgpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQoYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMubHN0YXQodGhpcy5mdWxscGF0aCgpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsc3RhdEZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYygpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQodGhpcy4jZnMubHN0YXRTeW5jKHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNhcHBseVN0YXQoc3QpIHtcbiAgICAgICAgY29uc3QgeyBhdGltZSwgYXRpbWVNcywgYmlydGh0aW1lLCBiaXJ0aHRpbWVNcywgYmxrc2l6ZSwgYmxvY2tzLCBjdGltZSwgY3RpbWVNcywgZGV2LCBnaWQsIGlubywgbW9kZSwgbXRpbWUsIG10aW1lTXMsIG5saW5rLCByZGV2LCBzaXplLCB1aWQsIH0gPSBzdDtcbiAgICAgICAgdGhpcy4jYXRpbWUgPSBhdGltZTtcbiAgICAgICAgdGhpcy4jYXRpbWVNcyA9IGF0aW1lTXM7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZSA9IGJpcnRodGltZTtcbiAgICAgICAgdGhpcy4jYmlydGh0aW1lTXMgPSBiaXJ0aHRpbWVNcztcbiAgICAgICAgdGhpcy4jYmxrc2l6ZSA9IGJsa3NpemU7XG4gICAgICAgIHRoaXMuI2Jsb2NrcyA9IGJsb2NrcztcbiAgICAgICAgdGhpcy4jY3RpbWUgPSBjdGltZTtcbiAgICAgICAgdGhpcy4jY3RpbWVNcyA9IGN0aW1lTXM7XG4gICAgICAgIHRoaXMuI2RldiA9IGRldjtcbiAgICAgICAgdGhpcy4jZ2lkID0gZ2lkO1xuICAgICAgICB0aGlzLiNpbm8gPSBpbm87XG4gICAgICAgIHRoaXMuI21vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLiNtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiNtdGltZU1zID0gbXRpbWVNcztcbiAgICAgICAgdGhpcy4jbmxpbmsgPSBubGluaztcbiAgICAgICAgdGhpcy4jcmRldiA9IHJkZXY7XG4gICAgICAgIHRoaXMuI3NpemUgPSBzaXplO1xuICAgICAgICB0aGlzLiN1aWQgPSB1aWQ7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBlbnRUb1R5cGUoc3QpO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IHRoZSBpZm10XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSAmIElGTVRfVU5LTk9XTikgfCBpZm10IHwgTFNUQVRfQ0FMTEVEO1xuICAgICAgICBpZiAoaWZtdCAhPT0gVU5LTk9XTiAmJiBpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSykge1xuICAgICAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgfVxuICAgICNvblJlYWRkaXJDQiA9IFtdO1xuICAgICNyZWFkZGlyQ0JJbkZsaWdodCA9IGZhbHNlO1xuICAgICNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2JzID0gdGhpcy4jb25SZWFkZGlyQ0Iuc2xpY2UoKTtcbiAgICAgICAgdGhpcy4jb25SZWFkZGlyQ0IubGVuZ3RoID0gMDtcbiAgICAgICAgY2JzLmZvckVhY2goY2IgPT4gY2IobnVsbCwgY2hpbGRyZW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgbm9kZS1zdHlsZSBjYWxsYmFjayBpbnRlcmZhY2UgdG8gZ2V0IGxpc3Qgb2YgZGlyZWN0b3J5IGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggKGVyLCBlbnRyaWVzKS4gIE5vdGUgdGhhdCB0aGUgYGVyYFxuICAgICAqIHBhcmFtIGlzIHNvbWV3aGF0IGV4dHJhbmVvdXMsIGFzIGFsbCByZWFkZGlyKCkgZXJyb3JzIGFyZSBoYW5kbGVkIGFuZFxuICAgICAqIHNpbXBseSByZXN1bHQgaW4gYW4gZW1wdHkgc2V0IG9mIGVudHJpZXMgYmVpbmcgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIGFsbG93WmFsZ28gQm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgaW1tZWRpYXRlbHkga25vd24gcmVzdWx0cyBzaG91bGRcbiAgICAgKiAqbm90KiBiZSBkZWZlcnJlZCB3aXRoIGBxdWV1ZU1pY3JvdGFza2AuIERlZmF1bHRzIHRvIGBmYWxzZWAuIFJlbGVhc2VcbiAgICAgKiB6YWxnbyBhdCB5b3VyIHBlcmlsLCB0aGUgZGFyayBwb255IGxvcmQgaXMgZGV2aW91cyBhbmQgdW5mb3JnaXZpbmcuXG4gICAgICovXG4gICAgcmVhZGRpckNCKGNiLCBhbGxvd1phbGdvID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgaWYgKGFsbG93WmFsZ28pXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgW10pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIFtdKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIGMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIGMpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHphbGdvIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLnB1c2goY2IpO1xuICAgICAgICBpZiAodGhpcy4jcmVhZGRpckNCSW5GbGlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCA9IHRydWU7XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRoaXMuI2ZzLnJlYWRkaXIoZnVsbHBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYW4gZXJyb3IsIHdlIGFsd2F5cyBnZXQgZW50cmllcy5cbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgICNhc3luY1JlYWRkaXJJbkZsaWdodDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Yga25vd24gY2hpbGQgZW50cmllcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGNhbm5vdCBvciBkb2VzIG5vdCBjb250YWluIGFueSBjaGlsZHJlbiwgdGhlbiBhbiBlbXB0eSBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRkaXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIGlmICh0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGxldCByZXNvbHZlID0gKCkgPT4geyB9O1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gbmV3IFByb21pc2UocmVzID0+IChyZXNvbHZlID0gcmVzKSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFkZGlyKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRkaXJ9XG4gICAgICovXG4gICAgcmVhZGRpclN5bmMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy4jZnMucmVhZGRpclN5bmMoZnVsbHBhdGgsIHtcbiAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgY2FuUmVhZGRpcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9DSElMRClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaWZtdCA9IElGTVQgJiB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB3ZSBhbHdheXMgc2V0IEVOT1RESVIgd2hlbiBzZXR0aW5nIElGTVQsIHNvIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIShpZm10ID09PSBVTktOT1dOIHx8IGlmbXQgPT09IElGRElSIHx8IGlmbXQgPT09IElGTE5LKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuICgodGhpcy4jdHlwZSAmIElGRElSKSA9PT0gSUZESVIgJiZcbiAgICAgICAgICAgICEodGhpcy4jdHlwZSAmIEVOT0NISUxEKSAmJlxuICAgICAgICAgICAgIWRpcnMuaGFzKHRoaXMpICYmXG4gICAgICAgICAgICAoIXdhbGtGaWx0ZXIgfHwgd2Fsa0ZpbHRlcih0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBhdGggb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gcGF0aCBhcyByZXNvbHZlZFxuICAgICAqIGJ5IHJlYWxwYXRoKDMpLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlYWxwYXRoIGNhbGwgZmFpbHMgZm9yIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICogT24gc3VjY2VzcywgcmV0dXJucyBhIFBhdGggb2JqZWN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWxwYXRoKCkge1xuICAgICAgICBpZiAodGhpcy4jcmVhbHBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgICAgIGlmICgoRU5PUkVBTFBBVEggfCBFTk9SRUFETElOSyB8IEVOT0VOVCkgJiB0aGlzLiN0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhbHBhdGgodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIHJlYWxwYXRofVxuICAgICAqL1xuICAgIHJlYWxwYXRoU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHRoaXMuI2ZzLnJlYWxwYXRoU3luYyh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFscGF0aCA9IHRoaXMucmVzb2x2ZShycCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PUkVBTFBBVEgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gbWFyayB0aGlzIFBhdGggb2JqZWN0IGFzIHRoZSBzY3VycnkgY3dkLFxuICAgICAqIGNhbGxlZCBieSB7QGxpbmsgUGF0aFNjdXJyeSNjaGRpcn1cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIFtzZXRBc0N3ZF0ob2xkQ3dkKSB7XG4gICAgICAgIGlmIChvbGRDd2QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9sZEN3ZC5pc0NXRCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ1dEID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IG5ldyBTZXQoW10pO1xuICAgICAgICBsZXQgcnAgPSBbXTtcbiAgICAgICAgbGV0IHAgPSB0aGlzO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCkge1xuICAgICAgICAgICAgY2hhbmdlZC5hZGQocCk7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZSA9IHJwLmpvaW4odGhpcy5zZXApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHJwLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgICAgIHJwLnB1c2goJy4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHVuLW1lbW9pemUgcGFyZW50cyBvZiBvbGQgY3dkXG4gICAgICAgIHAgPSBvbGRDd2Q7XG4gICAgICAgIHdoaWxlIChwICYmIHAucGFyZW50ICYmICFjaGFuZ2VkLmhhcyhwKSkge1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZVBvc2l4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBQYXRoIGNsYXNzIHVzZWQgb24gd2luMzIgc3lzdGVtc1xuICpcbiAqIFVzZXMgYCdcXFxcJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciByZXR1cm5lZCBwYXRocywgZWl0aGVyIGAnXFxcXCdgIG9yIGAnLydgXG4gKiBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoV2luMzIgZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9IGVpdGhlclNlcDtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICBzdXBlcihuYW1lLCB0eXBlLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoV2luMzIobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHdpbjMyLnBhcnNlKHBhdGgpLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3Qocm9vdFBhdGgpIHtcbiAgICAgICAgcm9vdFBhdGggPSB1bmNUb0RyaXZlKHJvb3RQYXRoLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBpZiAocm9vdFBhdGggPT09IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9rLCBub3QgdGhhdCBvbmUsIGNoZWNrIGlmIGl0IG1hdGNoZXMgYW5vdGhlciB3ZSBrbm93IGFib3V0XG4gICAgICAgIGZvciAoY29uc3QgW2NvbXBhcmUsIHJvb3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucm9vdHMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucm9vdHNbcm9vdFBhdGhdID0gcm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSBuZXcgUGF0aFNjdXJyeVdpbjMyKHJvb3RQYXRoLCB0aGlzKS5yb290KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgc2FtZVJvb3Qocm9vdFBhdGgsIGNvbXBhcmUgPSB0aGlzLnJvb3QubmFtZSkge1xuICAgICAgICAvLyB3aW5kb3dzIGNhbiAocmFyZWx5KSBoYXZlIGNhc2Utc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dFxuICAgICAgICAvLyBVTkMgYW5kIGRyaXZlIGxldHRlcnMgYXJlIGFsd2F5cyBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgY2Fub25pY2FsbHlcbiAgICAgICAgLy8gcmVwcmVzZW50ZWQgdXBwZXJjYXNlLlxuICAgICAgICByb290UGF0aCA9IHJvb3RQYXRoXG4gICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuICAgICAgICByZXR1cm4gcm9vdFBhdGggPT09IGNvbXBhcmU7XG4gICAgfVxufVxuLyoqXG4gKiBQYXRoIGNsYXNzIHVzZWQgb24gYWxsIHBvc2l4IHN5c3RlbXMuXG4gKlxuICogVXNlcyBgJy8nYCBhcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoUG9zaXggZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNwbGl0U2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdHlwZSwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpID8gJy8nIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3QoX3Jvb3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbn1cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBQYXRoU2N1cnJ5IGNsYXNzZXMsIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlIGZvciBwYXRoXG4gKiByZXNvbHV0aW9uIGFuZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuXG4gKlxuICogVHlwaWNhbGx5LCB5b3Ugc2hvdWxkICpub3QqIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGJ1dCByYXRoZXIgb25lXG4gKiBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY2xhc3Nlcywgb3IgdGhlIGV4cG9ydGVkIHtAbGluayBQYXRoU2N1cnJ5fSB3aGljaFxuICogZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvb3QgUGF0aCBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhpcyBTY3VycnlcbiAgICAgKi9cbiAgICByb290O1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJpbmcgcGF0aCBmb3IgdGhlIHJvb3Qgb2YgdGhpcyBTY3VycnkncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICovXG4gICAgcm9vdFBhdGg7XG4gICAgLyoqXG4gICAgICogQSBjb2xsZWN0aW9uIG9mIGFsbCByb290cyBlbmNvdW50ZXJlZCwgcmVmZXJlbmNlZCBieSByb290UGF0aFxuICAgICAqL1xuICAgIHJvb3RzO1xuICAgIC8qKlxuICAgICAqIFRoZSBQYXRoIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQYXRoU2N1cnJ5J3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICBjd2Q7XG4gICAgI3Jlc29sdmVDYWNoZTtcbiAgICAjcmVzb2x2ZVBvc2l4Q2FjaGU7XG4gICAgI2NoaWxkcmVuO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gcGF0aCBjb21wYXJpc29ucyBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0cnVlIG9uIERhcndpbiBhbmQgV2luZG93cyBzeXN0ZW1zLCBmYWxzZSBlbHNld2hlcmUuXG4gICAgICovXG4gICAgbm9jYXNlO1xuICAgICNmcztcbiAgICAvKipcbiAgICAgKiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuICAgICAqXG4gICAgICogVXNlIFBhdGhTY3VycnlXaW4zMiwgUGF0aFNjdXJyeURhcndpbiwgUGF0aFNjdXJyeVBvc2l4LCBvciBQYXRoU2N1cnJ5XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBwYXRoSW1wbCwgc2VwLCB7IG5vY2FzZSwgY2hpbGRyZW5DYWNoZVNpemUgPSAxNiAqIDEwMjQsIGZzID0gZGVmYXVsdEZTLCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy4jZnMgPSBmc0Zyb21PcHRpb24oZnMpO1xuICAgICAgICBpZiAoY3dkIGluc3RhbmNlb2YgVVJMIHx8IGN3ZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgIGN3ZCA9IGZpbGVVUkxUb1BhdGgoY3dkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCBzcGxpdCByb290LCBhbmQgdGhlbiBhZGQgdG8gdGhlIHN0b3JlLlxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgY2FsbCBwYXRoLnJlc29sdmUoKVxuICAgICAgICBjb25zdCBjd2RQYXRoID0gcGF0aEltcGwucmVzb2x2ZShjd2QpO1xuICAgICAgICB0aGlzLnJvb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5yb290UGF0aCA9IHRoaXMucGFyc2VSb290UGF0aChjd2RQYXRoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZSA9IG5ldyBSZXNvbHZlQ2FjaGUoKTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW5DYWNoZShjaGlsZHJlbkNhY2hlU2l6ZSk7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gY3dkUGF0aC5zdWJzdHJpbmcodGhpcy5yb290UGF0aC5sZW5ndGgpLnNwbGl0KHNlcCk7XG4gICAgICAgIC8vIHJlc29sdmUoJy8nKSBsZWF2ZXMgJycsIHNwbGl0cyB0byBbJyddLCB3ZSBkb24ndCB3YW50IHRoYXQuXG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGggPT09IDEgJiYgIXNwbGl0WzBdKSB7XG4gICAgICAgICAgICBzcGxpdC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKG5vY2FzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHByb3ZpZGUgbm9jYXNlIHNldHRpbmcgdG8gUGF0aFNjdXJyeUJhc2UgY3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLm5ld1Jvb3QodGhpcy4jZnMpO1xuICAgICAgICB0aGlzLnJvb3RzW3RoaXMucm9vdFBhdGhdID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMucm9vdDtcbiAgICAgICAgbGV0IGxlbiA9IHNwbGl0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGpvaW5TZXAgPSBwYXRoSW1wbC5zZXA7XG4gICAgICAgIGxldCBhYnMgPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICBsZXQgc2F3Rmlyc3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBjb25zdCBsID0gbGVuLS07XG4gICAgICAgICAgICBwcmV2ID0gcHJldi5jaGlsZChwYXJ0LCB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmU6IG5ldyBBcnJheShsKS5maWxsKCcuLicpLmpvaW4oam9pblNlcCksXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpeDogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbignLycpLFxuICAgICAgICAgICAgICAgIGZ1bGxwYXRoOiAoYWJzICs9IChzYXdGaXJzdCA/ICcnIDogam9pblNlcCkgKyBwYXJ0KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2F3Rmlyc3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gcHJldjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZXB0aCBvZiBhIHByb3ZpZGVkIHBhdGgsIHN0cmluZywgb3IgdGhlIGN3ZFxuICAgICAqL1xuICAgIGRlcHRoKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXRoID0gdGhpcy5jd2QucmVzb2x2ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aC5kZXB0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlIG9mIGNoaWxkIGVudHJpZXMuICBFeHBvc2VkIHNvIHN1YmNsYXNzZXMgY2FuIGNyZWF0ZVxuICAgICAqIGNoaWxkIFBhdGggb2JqZWN0cyBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHdheS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBwYXRoIHN0cmluZ3MgdG8gYSByZXNvbHZlZCBzdHJpbmdcbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmUoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZUNhY2hlLmdldChyKTtcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3dkLnJlc29sdmUocikuZnVsbHBhdGgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZywgcmV0dXJuaW5nXG4gICAgICogdGhlIHBvc2l4IHBhdGguICBJZGVudGljYWwgdG8gLnJlc29sdmUoKSBvbiBwb3NpeCBzeXN0ZW1zLCBidXQgb25cbiAgICAgKiB3aW5kb3dzIHdpbGwgcmV0dXJuIGEgZm9yd2FyZC1zbGFzaCBzZXBhcmF0ZWQgVU5DIHBhdGguXG4gICAgICpcbiAgICAgKiBTYW1lIGludGVyZmFjZSBhcyByZXF1aXJlKCdwYXRoJykucmVzb2x2ZS5cbiAgICAgKlxuICAgICAqIE11Y2ggZmFzdGVyIHRoYW4gcGF0aC5yZXNvbHZlKCkgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgICogcGF0aCwgYmVjYXVzZSB0aGUgcmVzb2x2ZWQgUGF0aCBvYmplY3RzIGFyZSBjYWNoZWQuICBNdWNoIHNsb3dlclxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICByZXNvbHZlUG9zaXgoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aFBvc2l4KCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3IgZW50cnlcbiAgICAgKi9cbiAgICByZWxhdGl2ZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5yZWxhdGl2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3JcbiAgICAgKiBlbnRyeSwgdXNpbmcgLyBhcyB0aGUgcGF0aCBkZWxpbWl0ZXIsIGV2ZW4gb24gV2luZG93cy5cbiAgICAgKi9cbiAgICByZWxhdGl2ZVBvc2l4KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlUG9zaXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBiYXNlbmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGJhc2VuYW1lKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZGlybmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGRpcm5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVudHJ5LnBhcmVudCB8fCBlbnRyeSkuZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGRpcihlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZW50cnkucmVhZGRpcigpO1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBwIDogcC5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRkaXJTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKS5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGUgc3RyaW5nIG9yIFBhdGggb2JqZWN0LCBhbmQgdXBkYXRlIGFsbCBrbm93blxuICAgICAqIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGRldGVybWluZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdW5saWtlIGBmcy5sc3RhdCgpYCwgdGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc29tZVxuICAgICAqIGluZm9ybWF0aW9uLCBzdWNoIGFzIGBtb2RlYCwgYGRldmAsIGBubGlua2AsIGFuZCBgaW5vYC4gIElmIHRoYXRcbiAgICAgKiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGBmcy5sc3RhdGAgeW91cnNlbGYuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLCBvciBpZiB0aGUgbHN0YXQgY2FsbCBmYWlscyBmb3JcbiAgICAgKiBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgdXBkYXRlZCBQYXRoIG9iamVjdCBpc1xuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGxzdGF0KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LmxzdGF0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXRTeW5jKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRsaW5rKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhZGxpbmsoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhZGxpbmtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhZGxpbmtTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWxwYXRoKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhbHBhdGgoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhbHBhdGhTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGsoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHdhbGsgPSAoZGlyLCBjYikgPT4ge1xuICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgIGRpci5yZWFkZGlyQ0IoKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghbGVuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS1sZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmIGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWFscGF0aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ociA9PiAocj8uaXNVbmtub3duKCkgPyByLmxzdGF0KCkgOiByKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IHI/LnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikgPyB3YWxrKHIsIG5leHQpIDogbmV4dCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrKGUsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7IC8vIHphbGdvb29vb29vXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW50cnk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHdhbGsoc3RhcnQsIGVyID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWooZXIpO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmVzKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3YWxrU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdXBwb3J0IGZvciBgZm9yIGF3YWl0YFxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlfVxuICAgICAqXG4gICAgICogTm90ZTogQXMgb2YgTm9kZSAxOSwgdGhpcyBpcyB2ZXJ5IHNsb3csIGNvbXBhcmVkIHRvIG90aGVyIG1ldGhvZHMgb2ZcbiAgICAgKiB3YWxraW5nLiAgQ29uc2lkZXIgdXNpbmcge0BsaW5rIFBhdGhTY3VycnlCYXNlLnN0cmVhbX0gaWYgbWVtb3J5IG92ZXJoZWFkXG4gICAgICogYW5kIGJhY2twcmVzc3VyZSBhcmUgY29uY2VybnMsIG9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS53YWxrfSBpZiBub3QuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbiAgICBpdGVyYXRlKGVudHJ5ID0gdGhpcy5jd2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBpdGVyYXRpbmcgYXN5bmMgb3ZlciB0aGUgc3RyZWFtIGlzIHNpZ25pZmljYW50bHkgbW9yZSBwZXJmb3JtYW50LFxuICAgICAgICAvLyBlc3BlY2lhbGx5IGluIHRoZSB3YXJtLWNhY2hlIHNjZW5hcmlvLCBiZWNhdXNlIGl0IGJ1ZmZlcnMgdXAgZGlyZWN0b3J5XG4gICAgICAgIC8vIGVudHJpZXMgaW4gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIHlpZWxkIGZvciBlYWNoIG9uZS5cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oZW50cnksIG9wdGlvbnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRpbmcgb3ZlciBhIFBhdGhTY3VycnkgcGVyZm9ybXMgYSBzeW5jaHJvbm91cyB3YWxrLlxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlU3luY31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgKml0ZXJhdGVTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KFtlbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbmV3IE1pbmlwYXNzKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldCgpO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFtlbnRyeV07XG4gICAgICAgIGxldCBwcm9jZXNzaW5nID0gMDtcbiAgICAgICAgY29uc3QgcHJvY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICghcGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2luZyA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZysrO1xuICAgICAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25SZWFkZGlyID0gKGVyLCBlbnRyaWVzLCBkaWRSZWFscGF0aHMgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgIWRpZFJlYWxwYXRocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWFscGF0aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocikgPT4gcj8uaXNVbmtub3duKCkgPyByLmxzdGF0KCkgOiByKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IG9uUmVhZGRpcihudWxsLCBlbnRyaWVzLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nLS07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGF1c2VkICYmICFyZXN1bHRzLmZsb3dpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMub25jZSgnZHJhaW4nLCBwcm9jZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyB6YWxnbyBjb250YWlubWVudFxuICAgICAgICAgICAgICAgIGxldCBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkaXIucmVhZGRpckNCKG9uUmVhZGRpciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBzdHJlYW1TeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbmV3IE1pbmlwYXNzKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtlbnRyeV07XG4gICAgICAgIGxldCBwcm9jZXNzaW5nID0gMDtcbiAgICAgICAgY29uc3QgcHJvY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICghcGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2luZyA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZysrO1xuICAgICAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgICAgIHJlc3VsdHMub25jZSgnZHJhaW4nLCBwcm9jZXNzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgY2hkaXIocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGNvbnN0IG9sZEN3ZCA9IHRoaXMuY3dkO1xuICAgICAgICB0aGlzLmN3ZCA9IHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHRoaXMuY3dkLnJlc29sdmUocGF0aCkgOiBwYXRoO1xuICAgICAgICB0aGlzLmN3ZFtzZXRBc0N3ZF0ob2xkQ3dkKTtcbiAgICB9XG59XG4vKipcbiAqIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFBhdGhTY3VycnlCYXNlfVxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2UgaW5zZW5zaXR2ZSwgdXNlcyBgJ1xcXFwnYCB0byBnZW5lcmF0ZSBwYXRoIHN0cmluZ3MuICBVc2VzXG4gKiB7QGxpbmsgUGF0aFdpbjMyfSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNjdXJyeVdpbjMyIGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCB3aW4zMiwgJ1xcXFwnLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIGZvciAobGV0IHAgPSB0aGlzLmN3ZDsgcDsgcCA9IHAucGFyZW50KSB7XG4gICAgICAgICAgICBwLm5vY2FzZSA9IHRoaXMubm9jYXNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcnNlUm9vdFBhdGgoZGlyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2luZ2xlIHNlcGFyYXRvciwgaXQncyBub3QgYSBVTkMsIGFuZCB3ZSdsbFxuICAgICAgICAvLyBqdXN0IGdldCBzZXBhcmF0b3IgYXMgdGhlIHJvb3QsIGFuZCBkcml2ZUZyb21VTkMgd2lsbCByZXR1cm4gXFxcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCBtb3VudCBcXCBvbiB0aGUgcm9vdCBmcm9tIHRoZSBjd2QuXG4gICAgICAgIHJldHVybiB3aW4zMi5wYXJzZShkaXIpLnJvb3QudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMih0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiAocC5zdGFydHNXaXRoKCcvJykgfHwgcC5zdGFydHNXaXRoKCdcXFxcJykgfHwgL15bYS16XTooXFwvfFxcXFwpL2kudGVzdChwKSk7XG4gICAgfVxufVxuLyoqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciBhbGwgcG9zaXggc3lzdGVtcyBvdGhlciB0aGFuIERhcndpbi5cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlLXNlbnNpdGl2ZSBtYXRjaGluZywgdXNlcyBgJy8nYCB0byBnZW5lcmF0ZSBwYXRoIHN0cmluZ3MuXG4gKlxuICogVXNlcyB7QGxpbmsgUGF0aFBvc2l4fSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNjdXJyeVBvc2l4IGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgcG9zaXgsICcvJywgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJzZVJvb3RQYXRoKF9kaXIpIHtcbiAgICAgICAgcmV0dXJuICcvJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQb3NpeCh0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICB9XG59XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIERhcndpbiAobWFjT1MpIHN5c3RlbXMuXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlcyBgJy8nYCBmb3IgZ2VuZXJhdGluZyBwYXRoXG4gKiBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlEYXJ3aW4gZXh0ZW5kcyBQYXRoU2N1cnJ5UG9zaXgge1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoQmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoV2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBhdGggPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFdpbjMyIDogUGF0aFBvc2l4O1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoU2N1cnJ5V2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlEYXJ3aW59IG9uXG4gKiBEYXJ3aW4gKG1hY09TKSBzeXN0ZW1zLCB7QGxpbmsgUGF0aFNjdXJyeVBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnQgY29uc3QgUGF0aFNjdXJyeSA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBQYXRoU2N1cnJ5V2luMzJcbiAgICA6IHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gUGF0aFNjdXJyeURhcndpblxuICAgICAgICA6IFBhdGhTY3VycnlQb3NpeDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiY29uc3QgcHJvYyA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzXG4gICAgPyBwcm9jZXNzXG4gICAgOiB7XG4gICAgICAgIHN0ZG91dDogbnVsbCxcbiAgICAgICAgc3RkZXJyOiBudWxsLFxuICAgIH07XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdub2RlOmV2ZW50cyc7XG5pbXBvcnQgU3RyZWFtIGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCB7IFN0cmluZ0RlY29kZXIgfSBmcm9tICdub2RlOnN0cmluZ19kZWNvZGVyJztcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgTWluaXBhc3Mgc3RyZWFtLCBOb2RlIHN0cmVhbSwgb3Igc29tZXRoaW5nXG4gKiBlbHNlIHRoYXQgTWluaXBhc3MgY2FuIGludGVyYWN0IHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCBpc1N0cmVhbSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICAocyBpbnN0YW5jZW9mIE1pbmlwYXNzIHx8XG4gICAgICAgIHMgaW5zdGFuY2VvZiBTdHJlYW0gfHxcbiAgICAgICAgaXNSZWFkYWJsZShzKSB8fFxuICAgICAgICBpc1dyaXRhYmxlKHMpKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLlJlYWRhYmxlfVxuICovXG5leHBvcnQgY29uc3QgaXNSZWFkYWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyICYmXG4gICAgdHlwZW9mIHMucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIC8vIG5vZGUgY29yZSBXcml0YWJsZSBzdHJlYW1zIGhhdmUgYSBwaXBlKCkgbWV0aG9kLCBidXQgaXQgdGhyb3dzXG4gICAgcy5waXBlICE9PSBTdHJlYW0uV3JpdGFibGUucHJvdG90eXBlLnBpcGU7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5Xcml0YWJsZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGlzV3JpdGFibGUgPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgcyBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLndyaXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHMuZW5kID09PSAnZnVuY3Rpb24nO1xuY29uc3QgRU9GID0gU3ltYm9sKCdFT0YnKTtcbmNvbnN0IE1BWUJFX0VNSVRfRU5EID0gU3ltYm9sKCdtYXliZUVtaXRFbmQnKTtcbmNvbnN0IEVNSVRURURfRU5EID0gU3ltYm9sKCdlbWl0dGVkRW5kJyk7XG5jb25zdCBFTUlUVElOR19FTkQgPSBTeW1ib2woJ2VtaXR0aW5nRW5kJyk7XG5jb25zdCBFTUlUVEVEX0VSUk9SID0gU3ltYm9sKCdlbWl0dGVkRXJyb3InKTtcbmNvbnN0IENMT1NFRCA9IFN5bWJvbCgnY2xvc2VkJyk7XG5jb25zdCBSRUFEID0gU3ltYm9sKCdyZWFkJyk7XG5jb25zdCBGTFVTSCA9IFN5bWJvbCgnZmx1c2gnKTtcbmNvbnN0IEZMVVNIQ0hVTksgPSBTeW1ib2woJ2ZsdXNoQ2h1bmsnKTtcbmNvbnN0IEVOQ09ESU5HID0gU3ltYm9sKCdlbmNvZGluZycpO1xuY29uc3QgREVDT0RFUiA9IFN5bWJvbCgnZGVjb2RlcicpO1xuY29uc3QgRkxPV0lORyA9IFN5bWJvbCgnZmxvd2luZycpO1xuY29uc3QgUEFVU0VEID0gU3ltYm9sKCdwYXVzZWQnKTtcbmNvbnN0IFJFU1VNRSA9IFN5bWJvbCgncmVzdW1lJyk7XG5jb25zdCBCVUZGRVIgPSBTeW1ib2woJ2J1ZmZlcicpO1xuY29uc3QgUElQRVMgPSBTeW1ib2woJ3BpcGVzJyk7XG5jb25zdCBCVUZGRVJMRU5HVEggPSBTeW1ib2woJ2J1ZmZlckxlbmd0aCcpO1xuY29uc3QgQlVGRkVSUFVTSCA9IFN5bWJvbCgnYnVmZmVyUHVzaCcpO1xuY29uc3QgQlVGRkVSU0hJRlQgPSBTeW1ib2woJ2J1ZmZlclNoaWZ0Jyk7XG5jb25zdCBPQkpFQ1RNT0RFID0gU3ltYm9sKCdvYmplY3RNb2RlJyk7XG4vLyBpbnRlcm5hbCBldmVudCB3aGVuIHN0cmVhbSBpcyBkZXN0cm95ZWRcbmNvbnN0IERFU1RST1lFRCA9IFN5bWJvbCgnZGVzdHJveWVkJyk7XG4vLyBpbnRlcm5hbCBldmVudCB3aGVuIHN0cmVhbSBoYXMgYW4gZXJyb3JcbmNvbnN0IEVSUk9SID0gU3ltYm9sKCdlcnJvcicpO1xuY29uc3QgRU1JVERBVEEgPSBTeW1ib2woJ2VtaXREYXRhJyk7XG5jb25zdCBFTUlURU5EID0gU3ltYm9sKCdlbWl0RW5kJyk7XG5jb25zdCBFTUlURU5EMiA9IFN5bWJvbCgnZW1pdEVuZDInKTtcbmNvbnN0IEFTWU5DID0gU3ltYm9sKCdhc3luYycpO1xuY29uc3QgQUJPUlQgPSBTeW1ib2woJ2Fib3J0Jyk7XG5jb25zdCBBQk9SVEVEID0gU3ltYm9sKCdhYm9ydGVkJyk7XG5jb25zdCBTSUdOQUwgPSBTeW1ib2woJ3NpZ25hbCcpO1xuY29uc3QgREFUQUxJU1RFTkVSUyA9IFN5bWJvbCgnZGF0YUxpc3RlbmVycycpO1xuY29uc3QgRElTQ0FSREVEID0gU3ltYm9sKCdkaXNjYXJkZWQnKTtcbmNvbnN0IGRlZmVyID0gKGZuKSA9PiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZuKTtcbmNvbnN0IG5vZGVmZXIgPSAoZm4pID0+IGZuKCk7XG5jb25zdCBpc0VuZGlzaCA9IChldikgPT4gZXYgPT09ICdlbmQnIHx8IGV2ID09PSAnZmluaXNoJyB8fCBldiA9PT0gJ3ByZWZpbmlzaCc7XG5jb25zdCBpc0FycmF5QnVmZmVyTGlrZSA9IChiKSA9PiBiIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHxcbiAgICAoISFiICYmXG4gICAgICAgIHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBiLmNvbnN0cnVjdG9yICYmXG4gICAgICAgIGIuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5QnVmZmVyJyAmJlxuICAgICAgICBiLmJ5dGVMZW5ndGggPj0gMCk7XG5jb25zdCBpc0FycmF5QnVmZmVyVmlldyA9IChiKSA9PiAhQnVmZmVyLmlzQnVmZmVyKGIpICYmIEFycmF5QnVmZmVyLmlzVmlldyhiKTtcbi8qKlxuICogSW50ZXJuYWwgY2xhc3MgcmVwcmVzZW50aW5nIGEgcGlwZSB0byBhIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUGlwZSB7XG4gICAgc3JjO1xuICAgIGRlc3Q7XG4gICAgb3B0cztcbiAgICBvbmRyYWluO1xuICAgIGNvbnN0cnVjdG9yKHNyYywgZGVzdCwgb3B0cykge1xuICAgICAgICB0aGlzLnNyYyA9IHNyYztcbiAgICAgICAgdGhpcy5kZXN0ID0gZGVzdDtcbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy5vbmRyYWluID0gKCkgPT4gc3JjW1JFU1VNRV0oKTtcbiAgICAgICAgdGhpcy5kZXN0Lm9uKCdkcmFpbicsIHRoaXMub25kcmFpbik7XG4gICAgfVxuICAgIHVucGlwZSgpIHtcbiAgICAgICAgdGhpcy5kZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIHRoaXMub25kcmFpbik7XG4gICAgfVxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHByb3RvdHlwZVxuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgIHByb3h5RXJyb3JzKF9lcikgeyB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICBlbmQoKSB7XG4gICAgICAgIHRoaXMudW5waXBlKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZW5kKVxuICAgICAgICAgICAgdGhpcy5kZXN0LmVuZCgpO1xuICAgIH1cbn1cbi8qKlxuICogSW50ZXJuYWwgY2xhc3MgcmVwcmVzZW50aW5nIGEgcGlwZSB0byBhIGRlc3RpbmF0aW9uIHN0cmVhbSB3aGVyZVxuICogZXJyb3JzIGFyZSBwcm94aWVkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBQaXBlUHJveHlFcnJvcnMgZXh0ZW5kcyBQaXBlIHtcbiAgICB1bnBpcGUoKSB7XG4gICAgICAgIHRoaXMuc3JjLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMucHJveHlFcnJvcnMpO1xuICAgICAgICBzdXBlci51bnBpcGUoKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc3JjLCBkZXN0LCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHNyYywgZGVzdCwgb3B0cyk7XG4gICAgICAgIHRoaXMucHJveHlFcnJvcnMgPSBlciA9PiBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICBzcmMub24oJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgfVxufVxuY29uc3QgaXNPYmplY3RNb2RlT3B0aW9ucyA9IChvKSA9PiAhIW8ub2JqZWN0TW9kZTtcbmNvbnN0IGlzRW5jb2RpbmdPcHRpb25zID0gKG8pID0+ICFvLm9iamVjdE1vZGUgJiYgISFvLmVuY29kaW5nICYmIG8uZW5jb2RpbmcgIT09ICdidWZmZXInO1xuLyoqXG4gKiBNYWluIGV4cG9ydCwgdGhlIE1pbmlwYXNzIGNsYXNzXG4gKlxuICogYFJUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIGVtaXR0ZWQsIGRlZmF1bHRzIHRvIEJ1ZmZlclxuICpcbiAqIGBXVHlwZWAgaXMgdGhlIHR5cGUgb2YgZGF0YSB0byBiZSB3cml0dGVuLCBpZiBSVHlwZSBpcyBidWZmZXIgb3Igc3RyaW5nLFxuICogdGhlbiBhbnkge0BsaW5rIE1pbmlwYXNzLkNvbnRpZ3VvdXNEYXRhfSBpcyBhbGxvd2VkLlxuICpcbiAqIGBFdmVudHNgIGlzIHRoZSBzZXQgb2YgZXZlbnQgaGFuZGxlciBzaWduYXR1cmVzIHRoYXQgdGhpcyBvYmplY3RcbiAqIHdpbGwgZW1pdCwgc2VlIHtAbGluayBNaW5pcGFzcy5FdmVudHN9XG4gKi9cbmV4cG9ydCBjbGFzcyBNaW5pcGFzcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgW1BBVVNFRF0gPSBmYWxzZTtcbiAgICBbUElQRVNdID0gW107XG4gICAgW0JVRkZFUl0gPSBbXTtcbiAgICBbT0JKRUNUTU9ERV07XG4gICAgW0VOQ09ESU5HXTtcbiAgICBbQVNZTkNdO1xuICAgIFtERUNPREVSXTtcbiAgICBbRU9GXSA9IGZhbHNlO1xuICAgIFtFTUlUVEVEX0VORF0gPSBmYWxzZTtcbiAgICBbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgIFtDTE9TRURdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRVJST1JdID0gbnVsbDtcbiAgICBbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgW0RFU1RST1lFRF0gPSBmYWxzZTtcbiAgICBbU0lHTkFMXTtcbiAgICBbQUJPUlRFRF0gPSBmYWxzZTtcbiAgICBbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgIFtESVNDQVJERURdID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSB3cml0dGVuXG4gICAgICovXG4gICAgd3JpdGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZFxuICAgICAqL1xuICAgIHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBJZiBgUlR5cGVgIGlzIEJ1ZmZlciwgdGhlbiBvcHRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLlxuICAgICAqIE90aGVyd2lzZSwgYW4gb3B0aW9ucyBvYmplY3QgbXVzdCBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGVpdGhlclxuICAgICAqIHtAbGluayBNaW5pcGFzcy5TaGFyZWRPcHRpb25zLm9iamVjdE1vZGV9IG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMuZW5jb2Rpbmd9LCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1swXSB8fFxuICAgICAgICAgICAge30pO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RNb2RlICYmIHR5cGVvZiBvcHRpb25zLmVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RpbmcgYW5kIG9iamVjdE1vZGUgbWF5IG5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0TW9kZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpc1tFTkNPRElOR10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5jb2RpbmdPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tBU1lOQ10gPSAhIW9wdGlvbnMuYXN5bmM7XG4gICAgICAgIHRoaXNbREVDT0RFUl0gPSB0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBuZXcgU3RyaW5nRGVjb2Rlcih0aGlzW0VOQ09ESU5HXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlQnVmZmVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1ZmZlcicsIHsgZ2V0OiAoKSA9PiB0aGlzW0JVRkZFUl0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlUGlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGlwZXMnLCB7IGdldDogKCkgPT4gdGhpc1tQSVBFU10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXNbU0lHTkFMXSA9IHNpZ25hbDtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbQUJPUlRdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzW0FCT1JUXSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgd2FpdGluZyB0byBiZSByZWFkLlxuICAgICAqXG4gICAgICogRm9yIEJ1ZmZlciBzdHJpbmdzLCB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEZvciBzdHJpbmcgZW5jb2Rpbmcgc3RyZWFtcywgdGhpcyB3aWxsIGJlIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGxlbmd0aCxcbiAgICAgKiBhY2NvcmRpbmcgdG8gSmF2YVNjcmlwdCdzIGBzdHJpbmcubGVuZ3RoYCBsb2dpYy5cbiAgICAgKiBGb3Igb2JqZWN0TW9kZSBzdHJlYW1zLCB0aGlzIGlzIGEgY291bnQgb2YgdGhlIGl0ZW1zIHdhaXRpbmcgdG8gYmVcbiAgICAgKiBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBidWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUkxFTkdUSF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBgQnVmZmVyRW5jb2RpbmdgIGN1cnJlbnRseSBpbiB1c2UsIG9yIGBudWxsYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU5DT0RJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkIG9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIEVuY29kaW5nIG1heSBvbmx5IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICAgKi9cbiAgICBzZXRFbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhpcyBpcyBhbiBvYmplY3RNb2RlIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBvYmplY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tPQkpFQ1RNT0RFXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IG9iamVjdE1vZGUoX29tKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBbJ2FzeW5jJ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gbWFrZSB0aGlzIHN0cmVhbSBhc3luYy5cbiAgICAgKlxuICAgICAqIE9uY2Ugc2V0LCBpdCBjYW5ub3QgYmUgdW5zZXQsIGFzIHRoaXMgd291bGQgcG90ZW50aWFsbHkgY2F1c2UgaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IuICBJZSwgYSBzeW5jIHN0cmVhbSBjYW4gYmUgbWFkZSBhc3luYywgYnV0IGFuIGFzeW5jIHN0cmVhbVxuICAgICAqIGNhbm5vdCBiZSBzYWZlbHkgbWFkZSBzeW5jLlxuICAgICAqL1xuICAgIHNldCBbJ2FzeW5jJ10oYSkge1xuICAgICAgICB0aGlzW0FTWU5DXSA9IHRoaXNbQVNZTkNdIHx8ICEhYTtcbiAgICB9XG4gICAgLy8gZHJvcCBldmVyeXRoaW5nIGFuZCBnZXQgb3V0IG9mIHRoZSBmbG93IGNvbXBsZXRlbHlcbiAgICBbQUJPUlRdKCkge1xuICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydCcsIHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FCT1JURURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOby1vcCBzZXR0ZXIuIFN0cmVhbSBhYm9ydGVkIHN0YXR1cyBpcyBzZXQgdmlhIHRoZSBBYm9ydFNpZ25hbCBwcm92aWRlZFxuICAgICAqIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldCBhYm9ydGVkKF8pIHsgfVxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnKSwgeyBjb2RlOiAnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuY29kaW5nKVxuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpc1tBU1lOQ10gPyBkZWZlciA6IG5vZGVmZXI7XG4gICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgYnVmZmVycyBhbmQgdHlwZWQgYXJyYXkgdmlld3MgaW50byBidWZmZXJzXG4gICAgICAgIC8vIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gZG8gdGhlIG9wcG9zaXRlIVxuICAgICAgICAvLyBsZWF2ZSBzdHJpbmdzIGFuZCBidWZmZXJzIGFzLWlzXG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG9ubHkgYWxsb3dlZCBpZiBpbiBvYmplY3QgbW9kZSwgc28gdGhyb3dcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1vZGUgc3RyZWFtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIG9iamVjdCBtb2RlIHVwIGZyb250LCBzaW5jZSBpdCdzIHNpbXBsZXJcbiAgICAgICAgLy8gdGhpcyB5aWVsZHMgYmV0dGVyIHBlcmZvcm1hbmNlLCBmZXdlciBjaGVja3MgbGF0ZXIuXG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBtYXliZSBpbXBvc3NpYmxlP1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgY2h1bmsgaXMgYSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICAgIC8vIGRvbid0IGJ1ZmZlciBpdCB1cCBvciBzZW5kIGl0IHRvIHRoZSBkZWNvZGVyXG4gICAgICAgIGlmICghY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYXN0LXBhdGggd3JpdGluZyBzdHJpbmdzIG9mIHNhbWUgZW5jb2RpbmcgdG8gYSBzdHJlYW0gd2l0aFxuICAgICAgICAvLyBhbiBlbXB0eSBidWZmZXIsIHNraXBwaW5nIHRoZSBidWZmZXIvZGVjb2RlciBkYW5jZVxuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgc3RyaW5nIGFscmVhZHkgcmVhZHkgZm9yIHVzIHRvIHVzZVxuICAgICAgICAgICAgIShlbmNvZGluZyA9PT0gdGhpc1tFTkNPRElOR10gJiYgIXRoaXNbREVDT0RFUl0/Lmxhc3ROZWVkKSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHRoaXNbRU5DT0RJTkddKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IHRoaXNbREVDT0RFUl0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGZsdXNoaW5nIENBTiBwb3RlbnRpYWxseSBzd2l0Y2ggdXMgaW50byBub3QtZmxvd2luZyBtb2RlXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvdy1sZXZlbCBleHBsaWNpdCByZWFkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEluIG9iamVjdE1vZGUsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgb25lIGl0ZW0gaXMgcmV0dXJuZWQgaWZcbiAgICAgKiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBgbmAgaXMgdGhlIG51bWJlciBvZiBieXRlcyAob3IgaW4gdGhlIGNhc2Ugb2YgZW5jb2Rpbmcgc3RyZWFtcyxcbiAgICAgKiBjaGFyYWN0ZXJzKSB0byBjb25zdW1lLiBJZiBgbmAgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBlbnRpcmUgYnVmZmVyXG4gICAgICogaXMgcmV0dXJuZWQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gICAgICogdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVhZChuKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gPT09IDAgfHxcbiAgICAgICAgICAgIG4gPT09IDAgfHxcbiAgICAgICAgICAgIChuICYmIG4gPiB0aGlzW0JVRkZFUkxFTkdUSF0pKSB7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGggPiAxICYmICF0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBub3Qgb2JqZWN0IG1vZGUsIHNvIGlmIHdlIGhhdmUgYW4gZW5jb2RpbmcsIHRoZW4gUlR5cGUgaXMgc3RyaW5nXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIG11c3QgYmUgQnVmZmVyXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBbXG4gICAgICAgICAgICAgICAgKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICAgICAgICAgID8gdGhpc1tCVUZGRVJdLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzW0JVRkZFUl0sIHRoaXNbQlVGRkVSTEVOR1RIXSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW1JFQURdKG4gfHwgbnVsbCwgdGhpc1tCVUZGRVJdWzBdKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW1JFQURdKG4sIGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2h1bms7XG4gICAgICAgICAgICBpZiAobiA9PT0gYy5sZW5ndGggfHwgbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zbGljZShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnN1YmFycmF5KG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zdWJhcnJheSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGlmICghdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGVuZChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gY2h1bms7XG4gICAgICAgICAgICBjaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgY2IpO1xuICAgICAgICB0aGlzW0VPRl0gPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIGlmIHdlIGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZywgdGhlbiBnbyBhaGVhZCBhbmQgZW1pdCxcbiAgICAgICAgLy8gZXZlbiBpZiB3ZSdyZSBub3QgcmVhZGluZy5cbiAgICAgICAgLy8gd2UnbGwgcmUtZW1pdCBpZiBhIG5ldyAnZW5kJyBsaXN0ZW5lciBpcyBhZGRlZCBhbnl3YXkuXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgTVAgbW9yZSBzdWl0YWJsZSB0byB3cml0ZS1vbmx5IHVzZSBjYXNlcy5cbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gfHwgIXRoaXNbUEFVU0VEXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBkb24ndCBsZXQgdGhlIGludGVybmFsIHJlc3VtZSBiZSBvdmVyd3JpdHRlblxuICAgIFtSRVNVTUVdKCkge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXNbREFUQUxJU1RFTkVSU10gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW1BBVVNFRF0gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN1bWUgdGhlIHN0cmVhbSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKlxuICAgICAqIElmIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBgZGF0YWAgZXZlbnQgbGlzdGVuZXJzLFxuICAgICAqIHRoaXMgd2lsbCBwbGFjZSB0aGUgc3RyZWFtIGluIGEgXCJkaXNjYXJkZWRcIiBzdGF0ZSwgd2hlcmUgYWxsIGRhdGEgd2lsbFxuICAgICAqIGJlIHRocm93biBhd2F5LiBUaGUgZGlzY2FyZGVkIHN0YXRlIGlzIHJlbW92ZWQgaWYgYSBwaXBlIGRlc3RpbmF0aW9uIG9yXG4gICAgICogZGF0YSBoYW5kbGVyIGlzIGFkZGVkLCBpZiBwYXVzZSgpIGlzIGNhbGxlZCwgb3IgaWYgYW55IHN5bmNocm9ub3VzIG9yXG4gICAgICogYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUkVTVU1FXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXVzZSB0aGUgc3RyZWFtXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tQQVVTRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBmb3JjaWJseSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBnZXQgZGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tERVNUUk9ZRURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgZmxvd2luZyBzdGF0ZSwgbWVhbmluZyB0aGF0XG4gICAgICogYW55IHdyaXRlcyB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGZsb3dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUEFVU0VEXTtcbiAgICB9XG4gICAgW0JVRkZFUlBVU0hdKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRoaXNbQlVGRkVSXS5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgW0JVRkZFUlNISUZUXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IHRoaXNbQlVGRkVSXVswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUl0uc2hpZnQoKTtcbiAgICB9XG4gICAgW0ZMVVNIXShub0RyYWluID0gZmFsc2UpIHtcbiAgICAgICAgZG8geyB9IHdoaWxlICh0aGlzW0ZMVVNIQ0hVTktdKHRoaXNbQlVGRkVSU0hJRlRdKCkpICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFub0RyYWluICYmICF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIFtGTFVTSENIVU5LXShjaHVuaykge1xuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQaXBlIGFsbCBkYXRhIGVtaXR0ZWQgYnkgdGhpcyBzdHJlYW0gaW50byB0aGUgZGVzdGluYXRpb24gcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyB0aGUgZmxvdyBvZiBkYXRhLlxuICAgICAqL1xuICAgIHBpcGUoZGVzdCwgb3B0cykge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKGRlc3QgPT09IHByb2Muc3Rkb3V0IHx8IGRlc3QgPT09IHByb2Muc3RkZXJyKVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBvcHRzLmVuZCAhPT0gZmFsc2U7XG4gICAgICAgIG9wdHMucHJveHlFcnJvcnMgPSAhIW9wdHMucHJveHlFcnJvcnM7XG4gICAgICAgIC8vIHBpcGluZyBhbiBlbmRlZCBzdHJlYW0gZW5kcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgICAgICBkZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gXCJhc1wiIGhlcmUganVzdCBpZ25vcmVzIHRoZSBXVHlwZSwgd2hpY2ggcGlwZXMgZG9uJ3QgY2FyZSBhYm91dCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgb25seSBjb25zdW1pbmcgZnJvbSB1cywgYW5kIHdyaXRpbmcgdG8gdGhlIGRlc3RcbiAgICAgICAgICAgIHRoaXNbUElQRVNdLnB1c2goIW9wdHMucHJveHlFcnJvcnNcbiAgICAgICAgICAgICAgICA/IG5ldyBQaXBlKHRoaXMsIGRlc3QsIG9wdHMpXG4gICAgICAgICAgICAgICAgOiBuZXcgUGlwZVByb3h5RXJyb3JzKHRoaXMsIGRlc3QsIG9wdHMpKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB0aGlzW1JFU1VNRV0oKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZ1bGx5IHVuaG9vayBhIHBpcGVkIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gd2FzIHRoZSBvbmx5IGNvbnN1bWVyIG9mIHRoaXMgc3RyZWFtIChpZSxcbiAgICAgKiB0aGVyZSBhcmUgbm8gb3RoZXIgcGlwZWQgZGVzdGluYXRpb25zIG9yIGAnZGF0YSdgIGV2ZW50IGxpc3RlbmVycylcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICB1bnBpcGUoZGVzdCkge1xuICAgICAgICBjb25zdCBwID0gdGhpc1tQSVBFU10uZmluZChwID0+IHAuZGVzdCA9PT0gZGVzdCk7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tQSVBFU10ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10uc3BsaWNlKHRoaXNbUElQRVNdLmluZGV4T2YocCksIDEpO1xuICAgICAgICAgICAgcC51bnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29ufVxuICAgICAqL1xuICAgIGFkZExpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9uYCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAnZGF0YScgZXZlbnQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGZsb3cgb2YgZGF0YVxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGhhbmRsZXIgd2hlbiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZFxuICAgICAqICAgd2lsbCBjYXVzZSAncmVhZGFibGUnIHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZW5kaXNoJyBldmVudCBoYW5kbGVyICgnZW5kJywgJ2ZpbmlzaCcsIGV0Yy4pIHdoaWNoIGhhc1xuICAgICAqICAgYWxyZWFkeSBwYXNzZWQgd2lsbCBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhbmQgYWxsXG4gICAgICogICBoYW5kbGVycyByZW1vdmVkLlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2Vycm9yJyBldmVudCBoYW5kbGVyIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIGVtaXR0ZWQgd2lsbFxuICAgICAqICAgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIHJlLWVtaXR0ZWQgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3IgcHJldmlvdXNseVxuICAgICAqICAgcmFpc2VkLlxuICAgICAqL1xuICAgIG9uKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9uKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSsrO1xuICAgICAgICAgICAgaWYgKCF0aGlzW1BJUEVTXS5sZW5ndGggJiYgIXRoaXNbRkxPV0lOR10pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmRpc2goZXYpICYmIHRoaXNbRU1JVFRFRF9FTkRdKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJyAmJiB0aGlzW0VNSVRURURfRVJST1JdKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29mZn1cbiAgICAgKi9cbiAgICByZW1vdmVMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmYoZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub2ZmYFxuICAgICAqXG4gICAgICogSWYgYSAnZGF0YScgZXZlbnQgaGFuZGxlciBpcyByZW1vdmVkLCBhbmQgaXQgd2FzIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3Igb3RoZXIgJ2RhdGEnIGV2ZW50IGxpc3RlbmVycyksXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgb2ZmKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgaGFuZGxlcik7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGxpc3RlbmVycywgYW5kIG5vdyB3ZSBkb24ndCwgYW5kIHdlIGRvbid0XG4gICAgICAgIC8vIGhhdmUgYW55IHBpcGVzLCB0aGVuIHN0b3AgdGhlIGZsb3csIHVubGVzcyBpdCdzIGJlZW4gZXhwbGljaXRseVxuICAgICAgICAvLyBwdXQgaW4gYSBkaXNjYXJkZWQgZmxvd2luZyBzdGF0ZSB2aWEgc3RyZWFtLnJlc3VtZSgpLlxuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IHRoaXMubGlzdGVuZXJzKCdkYXRhJykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tESVNDQVJERURdICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzYFxuICAgICAqXG4gICAgICogSWYgYWxsICdkYXRhJyBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZXkgd2VyZSB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zKSwgdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcFxuICAgICAqIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3Ige0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseVxuICAgICAqIGNhbGxlZC5cbiAgICAgKi9cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoZXYpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlICdlbmQnIGV2ZW50IGhhcyBiZWVuIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBnZXQgZW1pdHRlZEVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgIH1cbiAgICBbTUFZQkVfRU1JVF9FTkRdKCkge1xuICAgICAgICBpZiAoIXRoaXNbRU1JVFRJTkdfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbRU1JVFRFRF9FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tERVNUUk9ZRURdICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzW0VPRl0pIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICAgICAgICBpZiAodGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5lbWl0YCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIG90aGVyXG4gICAgICogdGhhbiAnY2xvc2UnIG9yICdlcnJvcicsIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZCBhbmQgbm8gaGFuZGxlcnNcbiAgICAgKiBhcmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlbmQnLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkLCB0aGVuIHRoZSBldmVudFxuICAgICAqIGlzIGlnbm9yZWQuIElmIHRoZSBzdHJlYW0gaXMgaW4gYSBwYXVzZWQgb3Igbm9uLWZsb3dpbmcgc3RhdGUsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBkYXRhIGZsb3cgcmVzdW1lcy4gSWYgdGhlIHN0cmVhbSBpc1xuICAgICAqIGFzeW5jLCB0aGVuIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXh0IHRpY2sgcmF0aGVyIHRoYW5cbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnY2xvc2UnLCBhbmQgJ2VuZCcgaGFzIG5vdCB5ZXQgYmVlbiBlbWl0dGVkLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgJ2VuZCcgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZXJyb3InLCBhbmQgYW4gQWJvcnRTaWduYWwgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RyZWFtLFxuICAgICAqIGFuZCB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLCB0aGVuIHRoZSBldmVudCBpcyBpZ25vcmVkLCBtYXRjaGluZyB0aGVcbiAgICAgKiBiZWhhdmlvciBvZiBub2RlIGNvcmUgc3RyZWFtcyBpbiB0aGUgcHJlc2Vuc2Ugb2YgYW4gQWJvcnRTaWduYWwuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2ZpbmlzaCcgb3IgJ3ByZWZpbmlzaCcsIHRoZW4gYWxsIGxpc3RlbmVycyB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnQsIHRvIHByZXZlbnQgZG91YmxlLWZpcmluZy5cbiAgICAgKi9cbiAgICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBlcnJvciBhbmQgY2xvc2UgYXJlIG9ubHkgZXZlbnRzIGFsbG93ZWQgYWZ0ZXIgY2FsbGluZyBkZXN0cm95KClcbiAgICAgICAgaWYgKGV2ICE9PSAnZXJyb3InICYmXG4gICAgICAgICAgICBldiAhPT0gJ2Nsb3NlJyAmJlxuICAgICAgICAgICAgZXYgIT09IERFU1RST1lFRCAmJlxuICAgICAgICAgICAgdGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzW09CSkVDVE1PREVdICYmICFkYXRhXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpc1tBU1lOQ11cbiAgICAgICAgICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlUREFUQV0oZGF0YSkpLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbRU1JVERBVEFdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRU1JVEVORF0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpc1tDTE9TRURdID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGRvbid0IGVtaXQgY2xvc2UgYmVmb3JlICdlbmQnIGFuZCAnZmluaXNoJ1xuICAgICAgICAgICAgaWYgKCF0aGlzW0VNSVRURURfRU5EXSAmJiAhdGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRFRF9FUlJPUl0gPSBkYXRhO1xuICAgICAgICAgICAgc3VwZXIuZW1pdChFUlJPUiwgZGF0YSk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSAhdGhpc1tTSUdOQUxdIHx8IHRoaXMubGlzdGVuZXJzKCdlcnJvcicpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gc3VwZXIuZW1pdCgnZXJyb3InLCBkYXRhKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgdW5rbm93biBldmVudFxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVREQVRBXShkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgaWYgKHAuZGVzdC53cml0ZShkYXRhKSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbRElTQ0FSREVEXSA/IGZhbHNlIDogc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVEVORF0oKSB7XG4gICAgICAgIGlmICh0aGlzW0VNSVRURURfRU5EXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpc1tFTUlUVEVEX0VORF0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlURU5EMl0oKSksIHRydWUpXG4gICAgICAgICAgICA6IHRoaXNbRU1JVEVORDJdKCk7XG4gICAgfVxuICAgIFtFTUlURU5EMl0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFQ09ERVJdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpc1tERUNPREVSXS5lbmQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZGVzdC53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0pXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIHAuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFsbCBlbWl0dGVkIGRhdGEgb25jZVxuICAgICAqIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCBidWYgPSBPYmplY3QuYXNzaWduKFtdLCB7XG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggPSAwO1xuICAgICAgICAvLyBzZXQgdGhlIHByb21pc2UgZmlyc3QsIGluIGNhc2UgYW4gZXJyb3IgaXMgcmFpc2VkXG4gICAgICAgIC8vIGJ5IHRyaWdnZXJpbmcgdGhlIGZsb3cgaGVyZS5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgYyA9PiB7XG4gICAgICAgICAgICBidWYucHVzaChjKTtcbiAgICAgICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgICAgICBidWYuZGF0YUxlbmd0aCArPSBjLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgZW1pdHRlZCBkYXRhXG4gICAgICogb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICpcbiAgICAgKiBOb3QgYWxsb3dlZCBvbiBvYmplY3RNb2RlIHN0cmVhbXMuXG4gICAgICovXG4gICAgYXN5bmMgY29uY2F0KCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCB0aGlzLmNvbGxlY3QoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBidWYuam9pbignJylcbiAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdChidWYsIGJ1Zi5kYXRhTGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZvaWQgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uKERFU1RST1lFRCwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyID0+IHJlamVjdChlcikpO1xuICAgICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91cyBgZm9yIGF3YWl0IG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgY29udGludWUgZW1pdHRpbmcgYWxsIGNodW5rcyB1bnRpbCB0aGUgc3RyZWFtIHRlcm1pbmF0ZXMuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgbGV0IHJlc29sdmU7XG4gICAgICAgICAgICBsZXQgcmVqZWN0O1xuICAgICAgICAgICAgY29uc3Qgb25lcnIgPSAoZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kYXRhID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdmFsdWUsIGRvbmU6ICEhdGhpc1tFT0ZdIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRlc3Ryb3kgPSAoKSA9PiBvbmVycihuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyBgZm9yIG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRlIHdoZW4gdGhlIGludGVybmFsIGJ1ZmZlciBydW5zIG91dCwgZXZlblxuICAgICAqIGlmIHRoZSBzdHJlYW0gaGFzIG5vdCB5ZXQgdGVybWluYXRlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICB0aGlzLm9mZihFUlJPUiwgc3RvcCk7XG4gICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIHN0b3ApO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IHN0b3AoKSA6IHsgZG9uZTogZmFsc2UsIHZhbHVlIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25jZSgnZW5kJywgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShFUlJPUiwgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIHRocm93OiBzdG9wLFxuICAgICAgICAgICAgcmV0dXJuOiBzdG9wLFxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IGEgc3RyZWFtLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcgdXNlZCBmb3IgYW55IGZ1cnRoZXIgcHVycG9zZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGEgYGNsb3NlKClgIG1ldGhvZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBvblxuICAgICAqIGRlc3RydWN0aW9uLlxuICAgICAqXG4gICAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFueSBhdHRlbXB0IHRvIHdyaXRlIGRhdGEsIHJlYWQgZGF0YSwgb3IgZW1pdCBtb3N0XG4gICAgICogZXZlbnRzIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIElmIGFuIGVycm9yIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgYmUgZW1pdHRlZCBpbiBhblxuICAgICAqICdlcnJvcicgZXZlbnQuXG4gICAgICovXG4gICAgZGVzdHJveShlcikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbREVTVFJPWUVEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIC8vIHRocm93IGF3YXkgYWxsIGJ1ZmZlcmVkIGRhdGEsIGl0J3MgbmV2ZXIgY29taW5nIG91dFxuICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdID0gMDtcbiAgICAgICAgY29uc3Qgd2MgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHdjLmNsb3NlID09PSAnZnVuY3Rpb24nICYmICF0aGlzW0NMT1NFRF0pXG4gICAgICAgICAgICB3Yy5jbG9zZSgpO1xuICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAvLyBpZiBubyBlcnJvciB0byBlbWl0LCBzdGlsbCByZWplY3QgcGVuZGluZyBwcm9taXNlc1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgaXNTdHJlYW19XG4gICAgICpcbiAgICAgKiBGb3JtZXIgZXhwb3J0IGxvY2F0aW9uLCBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgc3RhdGljIGdldCBpc1N0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyZWFtO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLy8gdGhpcyBpcyBqdXN0IGEgdmVyeSBsaWdodCB3cmFwcGVyIGFyb3VuZCAyIGFycmF5cyB3aXRoIGFuIG9mZnNldCBpbmRleFxuaW1wb3J0IHsgR0xPQlNUQVIgfSBmcm9tICdtaW5pbWF0Y2gnO1xuY29uc3QgaXNQYXR0ZXJuTGlzdCA9IChwbCkgPT4gcGwubGVuZ3RoID49IDE7XG5jb25zdCBpc0dsb2JMaXN0ID0gKGdsKSA9PiBnbC5sZW5ndGggPj0gMTtcbi8qKlxuICogQW4gaW1tdXRhYmxlLWlzaCB2aWV3IG9uIGFuIGFycmF5IG9mIGdsb2IgcGFydHMgYW5kIHRoZWlyIHBhcnNlZFxuICogcmVzdWx0c1xuICovXG5leHBvcnQgY2xhc3MgUGF0dGVybiB7XG4gICAgI3BhdHRlcm5MaXN0O1xuICAgICNnbG9iTGlzdDtcbiAgICAjaW5kZXg7XG4gICAgbGVuZ3RoO1xuICAgICNwbGF0Zm9ybTtcbiAgICAjcmVzdDtcbiAgICAjZ2xvYlN0cmluZztcbiAgICAjaXNEcml2ZTtcbiAgICAjaXNVTkM7XG4gICAgI2lzQWJzb2x1dGU7XG4gICAgI2ZvbGxvd0dsb2JzdGFyID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuTGlzdCwgZ2xvYkxpc3QsIGluZGV4LCBwbGF0Zm9ybSkge1xuICAgICAgICBpZiAoIWlzUGF0dGVybkxpc3QocGF0dGVybkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBwYXR0ZXJuIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzR2xvYkxpc3QoZ2xvYkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBnbG9iIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2xvYkxpc3QubGVuZ3RoICE9PSBwYXR0ZXJuTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoZWQgcGF0dGVybiBsaXN0IGFuZCBnbG9iIGxpc3QgbGVuZ3RocycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IHBhdHRlcm5MaXN0O1xuICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IGdsb2JMaXN0O1xuICAgICAgICB0aGlzLiNpbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9IHBsYXRmb3JtO1xuICAgICAgICAvLyBub3JtYWxpemUgcm9vdCBlbnRyaWVzIG9mIGFic29sdXRlIHBhdHRlcm5zIG9uIGluaXRpYWwgY3JlYXRpb24uXG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gYzogPT4gWydjOi8nXVxuICAgICAgICAgICAgLy8gQzovID0+IFsnQzovJ11cbiAgICAgICAgICAgIC8vIEM6L3ggPT4gWydDOi8nLCAneCddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUgPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS8gPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS94ID0+IFsnLy9ob3N0L3NoYXJlLycsICd4J11cbiAgICAgICAgICAgIC8vIC9ldGMgPT4gWycvJywgJ2V0YyddXG4gICAgICAgICAgICAvLyAvID0+IFsnLyddXG4gICAgICAgICAgICBpZiAodGhpcy5pc1VOQygpKSB7XG4gICAgICAgICAgICAgICAgLy8gJycgLyAnJyAvICdob3N0JyAvICdzaGFyZSdcbiAgICAgICAgICAgICAgICBjb25zdCBbcDAsIHAxLCBwMiwgcDMsIC4uLnByZXN0XSA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtnMCwgZzEsIGcyLCBnMywgLi4uZ3Jlc3RdID0gdGhpcy4jZ2xvYkxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByZXN0WzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIGluIC9cbiAgICAgICAgICAgICAgICAgICAgcHJlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZ3Jlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFtwMCwgcDEsIHAyLCBwMywgJyddLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gW2cwLCBnMSwgZzIsIGczLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzRHJpdmUoKSB8fCB0aGlzLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMSwgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cxLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcDEgKyAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IGcxICsgJy8nO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYXJzZWQgbGlzdCBvZiBwYXR0ZXJuc1xuICAgICAqL1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgYSBzdHJpbmdcbiAgICAgKi9cbiAgICBpc1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIG9mIGlmIHBhdHRlcm4oKSByZXR1cm5zIEdMT0JTVEFSXG4gICAgICovXG4gICAgaXNHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gR0xPQlNUQVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgcGF0dGVybigpIHJldHVybnMgYSByZWdleHBcbiAgICAgKi9cbiAgICBpc1JlZ0V4cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIC8tam9pbmVkIHNldCBvZiBnbG9iIHBhcnRzIHRoYXQgbWFrZSB1cCB0aGlzIHBhdHRlcm5cbiAgICAgKi9cbiAgICBnbG9iU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI2dsb2JTdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy4jZ2xvYlN0cmluZyB8fFxuICAgICAgICAgICAgICAgICh0aGlzLiNpbmRleCA9PT0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBYnNvbHV0ZSgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0WzBdICsgdGhpcy4jZ2xvYkxpc3Quc2xpY2UoMSkuam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LmpvaW4oJy8nKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LnNsaWNlKHRoaXMuI2luZGV4KS5qb2luKCcvJykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBwYXR0ZXJuIHBhcnRzIGFmdGVyIHRoaXMgb25lXG4gICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gdGhpcy4jaW5kZXggKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlciB0aGlzIHBhcnQsIG9yIG51bGwgaWYgdGhpcyBpcyB0aGUgZW5kXG4gICAgICovXG4gICAgcmVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jlc3QgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgICAgICBpZiAoIXRoaXMuaGFzTW9yZSgpKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZXN0ID0gbnVsbCk7XG4gICAgICAgIHRoaXMuI3Jlc3QgPSBuZXcgUGF0dGVybih0aGlzLiNwYXR0ZXJuTGlzdCwgdGhpcy4jZ2xvYkxpc3QsIHRoaXMuI2luZGV4ICsgMSwgdGhpcy4jcGxhdGZvcm0pO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0Fic29sdXRlID0gdGhpcy4jaXNBYnNvbHV0ZTtcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNVTkMgPSB0aGlzLiNpc1VOQztcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNEcml2ZSA9IHRoaXMuI2lzRHJpdmU7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBwYXR0ZXJuIHJlcHJlc2VudHMgYSAvL3VuYy9wYXRoLyBvbiB3aW5kb3dzXG4gICAgICovXG4gICAgaXNVTkMoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc1VOQyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzVU5DXG4gICAgICAgICAgICA6ICh0aGlzLiNpc1VOQyA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBsWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbMl0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbMl0gJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXBsWzNdKTtcbiAgICB9XG4gICAgLy8gcGF0dGVybiBsaWtlIEM6Ly4uLlxuICAgIC8vIHNwbGl0ID0gWydDOicsIC4uLl1cbiAgICAvLyBYWFg6IHdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIHBhdHRlcm5zIGxpa2UgYGM6KmAgdG8gdGVzdCB0aGUgY3dkXG4gICAgLy8gaW4gYzogZm9yICosIGJ1dCBJIGRvbid0IGtub3cgb2YgYSB3YXkgdG8gZXZlbiBmaWd1cmUgb3V0IHdoYXQgdGhhdFxuICAgIC8vIGN3ZCBpcyB3aXRob3V0IGFjdHVhbGx5IGNoZGlyJ2luZyBpbnRvIGl0P1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBkcml2ZSBsZXR0ZXIgb24gV2luZG93c1xuICAgICAqL1xuICAgIGlzRHJpdmUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0RyaXZlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNEcml2ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNEcml2ZSA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFswXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwbFswXSkpO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuID0gJy8nIG9yICcvLi4uJyBvciAnL3gvLi4uJ1xuICAgIC8vIHNwbGl0ID0gWycnLCAnJ10gb3IgWycnLCAuLi5dIG9yIFsnJywgJ3gnLCAuLi5dXG4gICAgLy8gRHJpdmUgYW5kIFVOQyBib3RoIGNvbnNpZGVyZWQgYWJzb2x1dGUgb24gd2luZG93c1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gaXMgcm9vdGVkIG9uIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNBYnNvbHV0ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzQWJzb2x1dGVcbiAgICAgICAgICAgIDogKHRoaXMuI2lzQWJzb2x1dGUgPVxuICAgICAgICAgICAgICAgIChwbFswXSA9PT0gJycgJiYgcGwubGVuZ3RoID4gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyaXZlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VOQygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29uc3VtZSB0aGUgcm9vdCBvZiB0aGUgcGF0dGVybiwgYW5kIHJldHVybiBpdFxuICAgICAqL1xuICAgIHJvb3QoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLiNwYXR0ZXJuTGlzdFswXTtcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0Fic29sdXRlKCkgJiYgdGhpcy4jaW5kZXggPT09IDApID9cbiAgICAgICAgICAgIHBcbiAgICAgICAgICAgIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGFsbG93ZWQgdG8gZm9sbG93XG4gICAgICogYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqL1xuICAgIGNoZWNrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuI2luZGV4ID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy5pc0dsb2JzdGFyKCkgfHxcbiAgICAgICAgICAgICF0aGlzLiNmb2xsb3dHbG9ic3Rhcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhhdCB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGZvbGxvd2luZyBhIHN5bWJvbGljIGxpbmtcbiAgICAgKi9cbiAgICBtYXJrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCB8fCAhdGhpcy5pc0dsb2JzdGFyKCkgfHwgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLiNmb2xsb3dHbG9ic3RhciA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiLy8gZ2l2ZSBpdCBhIHBhdHRlcm4sIGFuZCBpdCdsbCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmXG4vLyBhIGdpdmVuIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQuXG4vLyBJZ25vcmluZyBhIHBhdGggaWdub3JlcyBpdHMgY2hpbGRyZW4gaWYgdGhlIHBhdHRlcm4gZW5kcyBpbiAvKipcbi8vIElnbm9yZXMgYXJlIGFsd2F5cyBwYXJzZWQgaW4gZG90OnRydWUgbW9kZVxuaW1wb3J0IHsgTWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IFBhdHRlcm4gfSBmcm9tICcuL3BhdHRlcm4uanMnO1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIHByb2Nlc3MgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5leHBvcnQgY2xhc3MgSWdub3JlIHtcbiAgICByZWxhdGl2ZTtcbiAgICByZWxhdGl2ZUNoaWxkcmVuO1xuICAgIGFic29sdXRlO1xuICAgIGFic29sdXRlQ2hpbGRyZW47XG4gICAgcGxhdGZvcm07XG4gICAgbW1vcHRzO1xuICAgIGNvbnN0cnVjdG9yKGlnbm9yZWQsIHsgbm9icmFjZSwgbm9jYXNlLCBub2V4dCwgbm9nbG9ic3RhciwgcGxhdGZvcm0gPSBkZWZhdWx0UGxhdGZvcm0sIH0pIHtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IFtdO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gW107XG4gICAgICAgIHRoaXMucmVsYXRpdmVDaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmFic29sdXRlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtO1xuICAgICAgICB0aGlzLm1tb3B0cyA9IHtcbiAgICAgICAgICAgIGRvdDogdHJ1ZSxcbiAgICAgICAgICAgIG5vYnJhY2UsXG4gICAgICAgICAgICBub2Nhc2UsXG4gICAgICAgICAgICBub2V4dCxcbiAgICAgICAgICAgIG5vZ2xvYnN0YXIsXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25MZXZlbDogMixcbiAgICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgaWduIG9mIGlnbm9yZWQpXG4gICAgICAgICAgICB0aGlzLmFkZChpZ24pO1xuICAgIH1cbiAgICBhZGQoaWduKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYSBsaXR0bGUgd2VpcmQsIGJ1dCBpdCBnaXZlcyB1cyBhIGNsZWFuIHNldCBvZiBvcHRpbWl6ZWRcbiAgICAgICAgLy8gbWluaW1hdGNoIG1hdGNoZXJzLCB3aXRob3V0IGdldHRpbmcgdHJpcHBlZCB1cCBpZiBvbmUgb2YgdGhlbVxuICAgICAgICAvLyBlbmRzIGluIC8qKiBpbnNpZGUgYSBicmFjZSBzZWN0aW9uLCBhbmQgaXQncyBvbmx5IGluZWZmaWNpZW50IGF0XG4gICAgICAgIC8vIHRoZSBzdGFydCBvZiB0aGUgd2Fsaywgbm90IGFsb25nIGl0LlxuICAgICAgICAvLyBJdCdkIGJlIG5pY2UgaWYgdGhlIFBhdHRlcm4gY2xhc3MganVzdCBoYWQgYSAudGVzdCgpIG1ldGhvZCwgYnV0XG4gICAgICAgIC8vIGhhbmRsaW5nIGdsb2JzdGFycyBpcyBhIGJpdCBvZiBhIHBpdGEsIGFuZCB0aGF0IGNvZGUgYWxyZWFkeSBsaXZlc1xuICAgICAgICAvLyBpbiBtaW5pbWF0Y2ggYW55d2F5LlxuICAgICAgICAvLyBBbm90aGVyIHdheSB3b3VsZCBiZSBpZiBtYXliZSBNaW5pbWF0Y2ggY291bGQgdGFrZSBpdHMgc2V0L2dsb2JQYXJ0c1xuICAgICAgICAvLyBhcyBhbiBvcHRpb24sIGFuZCB0aGVuIHdlIGNvdWxkIGF0IGxlYXN0IGp1c3QgdXNlIFBhdHRlcm4gdG8gdGVzdFxuICAgICAgICAvLyBmb3IgYWJzb2x1dGUtbmVzcy5cbiAgICAgICAgLy8gWWV0IGFub3RoZXIgd2F5LCBNaW5pbWF0Y2ggY291bGQgdGFrZSBhbiBhcnJheSBvZiBnbG9iIHN0cmluZ3MsIGFuZFxuICAgICAgICAvLyBhIGN3ZCBvcHRpb24sIGFuZCBkbyB0aGUgcmlnaHQgdGhpbmcuXG4gICAgICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChpZ24sIHRoaXMubW1vcHRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtbS5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IG1tLnNldFtpXTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JQYXJ0cyA9IG1tLmdsb2JQYXJ0c1tpXTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKCFwYXJzZWQgfHwgIWdsb2JQYXJ0cykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXR0ZXJuIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3RyaXAgb2ZmIGxlYWRpbmcgLi8gcG9ydGlvbnNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1nbG9iL2lzc3Vlcy81NzBcbiAgICAgICAgICAgIHdoaWxlIChwYXJzZWRbMF0gPT09ICcuJyAmJiBnbG9iUGFydHNbMF0gPT09ICcuJykge1xuICAgICAgICAgICAgICAgIHBhcnNlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGdsb2JQYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUGF0dGVybihwYXJzZWQsIGdsb2JQYXJ0cywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgICAgICBjb25zdCBtID0gbmV3IE1pbmltYXRjaChwLmdsb2JTdHJpbmcoKSwgdGhpcy5tbW9wdHMpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnbG9iUGFydHNbZ2xvYlBhcnRzLmxlbmd0aCAtIDFdID09PSAnKionO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlLnB1c2gobSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZS5wdXNoKG0pO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlQ2hpbGRyZW4ucHVzaChtKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgZnVsbHBhdGhzID0gYCR7ZnVsbHBhdGh9L2A7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcC5yZWxhdGl2ZSgpIHx8ICcuJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmVzID0gYCR7cmVsYXRpdmV9L2A7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkgfHwgbS5tYXRjaChyZWxhdGl2ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLmFic29sdXRlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkgfHwgbS5tYXRjaChmdWxscGF0aHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2hpbGRyZW5JZ25vcmVkKHApIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBwLmZ1bGxwYXRoKCkgKyAnLyc7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gKHAucmVsYXRpdmUoKSB8fCAnLicpICsgJy8nO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2goZnVsbHBhdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZ25vcmUuanMubWFwIiwKICAgICIvLyBzeW5jaHJvbm91cyB1dGlsaXR5IGZvciBmaWx0ZXJpbmcgZW50cmllcyBhbmQgY2FsY3VsYXRpbmcgc3Vid2Fsa3NcbmltcG9ydCB7IEdMT0JTVEFSIH0gZnJvbSAnbWluaW1hdGNoJztcbi8qKlxuICogQSBjYWNoZSBvZiB3aGljaCBwYXR0ZXJucyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGZvciBhIGdpdmVuIFBhdGhcbiAqL1xuZXhwb3J0IGNsYXNzIEhhc1dhbGtlZENhY2hlIHtcbiAgICBzdG9yZTtcbiAgICBjb25zdHJ1Y3RvcihzdG9yZSA9IG5ldyBNYXAoKSkge1xuICAgICAgICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgfVxuICAgIGNvcHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSGFzV2Fsa2VkQ2FjaGUobmV3IE1hcCh0aGlzLnN0b3JlKSk7XG4gICAgfVxuICAgIGhhc1dhbGtlZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0KHRhcmdldC5mdWxscGF0aCgpKT8uaGFzKHBhdHRlcm4uZ2xvYlN0cmluZygpKTtcbiAgICB9XG4gICAgc3RvcmVXYWxrZWQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGFyZ2V0LmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc3RvcmUuZ2V0KGZ1bGxwYXRoKTtcbiAgICAgICAgaWYgKGNhY2hlZClcbiAgICAgICAgICAgIGNhY2hlZC5hZGQocGF0dGVybi5nbG9iU3RyaW5nKCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldChmdWxscGF0aCwgbmV3IFNldChbcGF0dGVybi5nbG9iU3RyaW5nKCldKSk7XG4gICAgfVxufVxuLyoqXG4gKiBBIHJlY29yZCBvZiB3aGljaCBwYXRocyBoYXZlIGJlZW4gbWF0Y2hlZCBpbiBhIGdpdmVuIHdhbGsgc3RlcCxcbiAqIGFuZCB3aGV0aGVyIHRoZXkgb25seSBhcmUgY29uc2lkZXJlZCBhIG1hdGNoIGlmIHRoZXkgYXJlIGEgZGlyZWN0b3J5LFxuICogYW5kIHdoZXRoZXIgdGhlaXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCBzaG91bGQgYmUgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRjaFJlY29yZCB7XG4gICAgc3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgYWRkKHRhcmdldCwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IG4gPSAoYWJzb2x1dGUgPyAyIDogMCkgfCAoaWZEaXIgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICB0aGlzLnN0b3JlLnNldCh0YXJnZXQsIGN1cnJlbnQgPT09IHVuZGVmaW5lZCA/IG4gOiBuICYgY3VycmVudCk7XG4gICAgfVxuICAgIC8vIG1hdGNoLCBhYnNvbHV0ZSwgaWZkaXJcbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUuZW50cmllcygpXS5tYXAoKFtwYXRoLCBuXSkgPT4gW1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICEhKG4gJiAyKSxcbiAgICAgICAgICAgICEhKG4gJiAxKSxcbiAgICAgICAgXSk7XG4gICAgfVxufVxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgcGF0dGVybnMgdGhhdCBtdXN0IGJlIHByb2Nlc3NlZCBpbiBhIHN1YnNlcXVlbnQgc3RlcFxuICogZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1YldhbGtzIHtcbiAgICBzdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBhZGQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIGlmICghdGFyZ2V0LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgaWYgKCFzdWJzLmZpbmQocCA9PiBwLmdsb2JTdHJpbmcoKSA9PT0gcGF0dGVybi5nbG9iU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgc3Vicy5wdXNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHRhcmdldCwgW3BhdHRlcm5dKTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghc3Vicykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0aW5nIHRvIHdhbGsgdW5rbm93biBwYXRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHN1YnM7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleXMoKS5tYXAoayA9PiBbaywgdGhpcy5zdG9yZS5nZXQoayldKTtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmtleXMoKV0uZmlsdGVyKHQgPT4gdC5jYW5SZWFkZGlyKCkpO1xuICAgIH1cbn1cbi8qKlxuICogVGhlIGNsYXNzIHRoYXQgcHJvY2Vzc2VzIHBhdHRlcm5zIGZvciBhIGdpdmVuIHBhdGguXG4gKlxuICogSGFuZGxlcyBjaGlsZCBlbnRyeSBmaWx0ZXJpbmcsIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcGF0aCdzXG4gKiBkaXJlY3RvcnkgY29udGVudHMgbXVzdCBiZSByZWFkLlxuICovXG5leHBvcnQgY2xhc3MgUHJvY2Vzc29yIHtcbiAgICBoYXNXYWxrZWRDYWNoZTtcbiAgICBtYXRjaGVzID0gbmV3IE1hdGNoUmVjb3JkKCk7XG4gICAgc3Vid2Fsa3MgPSBuZXcgU3ViV2Fsa3MoKTtcbiAgICBwYXR0ZXJucztcbiAgICBmb2xsb3c7XG4gICAgZG90O1xuICAgIG9wdHM7XG4gICAgY29uc3RydWN0b3Iob3B0cywgaGFzV2Fsa2VkQ2FjaGUpIHtcbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy5mb2xsb3cgPSAhIW9wdHMuZm9sbG93O1xuICAgICAgICB0aGlzLmRvdCA9ICEhb3B0cy5kb3Q7XG4gICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUgPVxuICAgICAgICAgICAgaGFzV2Fsa2VkQ2FjaGUgPyBoYXNXYWxrZWRDYWNoZS5jb3B5KCkgOiBuZXcgSGFzV2Fsa2VkQ2FjaGUoKTtcbiAgICB9XG4gICAgcHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zO1xuICAgICAgICBjb25zdCBwcm9jZXNzaW5nU2V0ID0gcGF0dGVybnMubWFwKHAgPT4gW3RhcmdldCwgcF0pO1xuICAgICAgICAvLyBtYXAgb2YgcGF0aHMgdG8gdGhlIG1hZ2ljLXN0YXJ0aW5nIHN1YndhbGtzIHRoZXkgbmVlZCB0byB3YWxrXG4gICAgICAgIC8vIGZpcnN0IGl0ZW0gaW4gcGF0dGVybnMgaXMgdGhlIGZpbHRlclxuICAgICAgICBmb3IgKGxldCBbdCwgcGF0dGVybl0gb2YgcHJvY2Vzc2luZ1NldCkge1xuICAgICAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZS5zdG9yZVdhbGtlZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBwYXR0ZXJuLnJvb3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlID0gcGF0dGVybi5pc0Fic29sdXRlKCkgJiYgdGhpcy5vcHRzLmFic29sdXRlICE9PSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHN0YXJ0IGFic29sdXRlIHBhdHRlcm5zIGF0IHJvb3RcbiAgICAgICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAgICAgdCA9IHQucmVzb2x2ZShyb290ID09PSAnLycgJiYgdGhpcy5vcHRzLnJvb3QgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0cy5yb290XG4gICAgICAgICAgICAgICAgICAgIDogcm9vdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcmVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5pc0VOT0VOVCgpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHA7XG4gICAgICAgICAgICBsZXQgcmVzdDtcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAodHlwZW9mIChwID0gcGF0dGVybi5wYXR0ZXJuKCkpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIChyZXN0ID0gcGF0dGVybi5yZXN0KCkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHQucmVzb2x2ZShwKTtcbiAgICAgICAgICAgICAgICB0ID0gYztcbiAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcmVzdDtcbiAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAgPSBwYXR0ZXJuLnBhdHRlcm4oKTtcbiAgICAgICAgICAgIHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzV2Fsa2VkQ2FjaGUuaGFzV2Fsa2VkKHQsIHBhdHRlcm4pKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlLnN0b3JlV2Fsa2VkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbm93IHdlIGhhdmUgZWl0aGVyIGEgZmluYWwgc3RyaW5nIGZvciBhIGtub3duIGVudHJ5LFxuICAgICAgICAgICAgLy8gbW9yZSBzdHJpbmdzIGZvciBhbiB1bmtub3duIGVudHJ5LFxuICAgICAgICAgICAgLy8gb3IgYSBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggbWFnaWMsIG1vdW50ZWQgb24gdC5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBtdXN0IG5vdCBiZSBmaW5hbCBlbnRyeSwgb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmVcbiAgICAgICAgICAgICAgICAvLyBjb25jYXRlbmF0ZWQgaXQgZWFybGllci5cbiAgICAgICAgICAgICAgICBjb25zdCBpZkRpciA9IHAgPT09ICcuLicgfHwgcCA9PT0gJycgfHwgcCA9PT0gJy4nO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodC5yZXNvbHZlKHApLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBubyByZXN0LCBtYXRjaCBhbmQgc3Vid2FsayBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gaWYgcmVzdCwgcHJvY2VzcyByZXN0IGFuZCBzdWJ3YWxrIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgc3ltbGluaywgYnV0IHdlIGRpZG4ndCBnZXQgaGVyZSBieSB3YXkgb2YgYVxuICAgICAgICAgICAgICAgIC8vIGdsb2JzdGFyIG1hdGNoIChtZWFuaW5nIGl0J3MgdGhlIGZpcnN0IHRpbWUgVEhJUyBnbG9ic3RhclxuICAgICAgICAgICAgICAgIC8vIGhhcyB0cmF2ZXJzZWQgYSBzeW1saW5rKSwgdGhlbiB3ZSBmb2xsb3cgaXQuIE90aGVyd2lzZSwgc3RvcC5cbiAgICAgICAgICAgICAgICBpZiAoIXQuaXNTeW1ib2xpY0xpbmsoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGxvdyB8fFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLmNoZWNrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcnAgPSByZXN0Py5wYXR0ZXJuKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnJlc3QgPSByZXN0Py5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN0IHx8ICgocnAgPT09ICcnIHx8IHJwID09PSAnLicpICYmICFycmVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBIQVMgdG8gYmUgYSBkaXIgaWYgaXQgZW5kcyBpbiAqKi8gb3IgKiovLlxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgZW5kaW5nIGluICoqIHdpbGwgbWF0Y2ggZmlsZXMgYXMgd2VsbC5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LCBhYnNvbHV0ZSwgcnAgPT09ICcnIHx8IHJwID09PSAnLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJwID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdvdWxkIG1lYW4geW91J3JlIG1hdGNoaW5nICoqLy4uIGF0IHRoZSBmcyByb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG5vIHRoYW5rcywgSSdtIG5vdCBnb25uYSB0ZXN0IHRoYXQgc3BlY2lmaWMgY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHAgPSB0LnBhcmVudCB8fCB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnJlc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0cCwgYWJzb2x1dGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuaGFzV2Fsa2VkQ2FjaGUuaGFzV2Fsa2VkKHRwLCBycmVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0cCwgcnJlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdWJ3YWxrVGFyZ2V0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Vid2Fsa3Mua2V5cygpO1xuICAgIH1cbiAgICBjaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzb3IodGhpcy5vcHRzLCB0aGlzLmhhc1dhbGtlZENhY2hlKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGEgbmV3IFByb2Nlc3NvciBjb250YWluaW5nIHRoZSBzdWJ3YWxrcyBmb3IgZWFjaFxuICAgIC8vIGNoaWxkIGVudHJ5LCBhbmQgYSBzZXQgb2YgbWF0Y2hlcywgYW5kXG4gICAgLy8gYSBoYXNXYWxrZWRDYWNoZSB0aGF0J3MgYSBjb3B5IG9mIHRoaXMgb25lXG4gICAgLy8gdGhlbiB3ZSdyZSBnb2luZyB0byBjYWxsXG4gICAgZmlsdGVyRW50cmllcyhwYXJlbnQsIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSB0aGlzLnN1YndhbGtzLmdldChwYXJlbnQpO1xuICAgICAgICAvLyBwdXQgbWF0Y2hlcyBhbmQgZW50cnkgd2Fsa3MgaW50byB0aGUgcmVzdWx0cyBwcm9jZXNzb3JcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuY2hpbGQoKTtcbiAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFic29sdXRlID0gcGF0dGVybi5pc0Fic29sdXRlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhdHRlcm4ucGF0dGVybigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAocCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0R2xvYnN0YXIoZSwgcGF0dGVybiwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdFJlZ0V4cChlLCBwLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RTdHJpbmcoZSwgcCwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgdGVzdEdsb2JzdGFyKGUsIHBhdHRlcm4sIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIGlmICh0aGlzLmRvdCB8fCAhZS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLmhhc01vcmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIGZvbGxvdyBtb2RlIG9yIGl0J3Mgbm90IGEgc3ltbGluaywganVzdCBrZWVwXG4gICAgICAgICAgICAgICAgLy8gdGVzdGluZyB0aGUgc2FtZSBwYXR0ZXJuLiBJZiB0aGVyZSdzIG1vcmUgYWZ0ZXIgdGhlIGdsb2JzdGFyLFxuICAgICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBzeW1saW5rIGNvbnN1bWVzIHRoZSBnbG9ic3Rhci4gSWYgbm90LCB0aGVuIHdlIGNhblxuICAgICAgICAgICAgICAgIC8vIGZvbGxvdyBhdCBtb3N0IE9ORSBzeW1saW5rIGFsb25nIHRoZSB3YXksIHNvIHdlIG1hcmsgaXQsIHdoaWNoXG4gICAgICAgICAgICAgICAgLy8gYWxzbyBjaGVja3MgdG8gZW5zdXJlIHRoYXQgaXQgd2Fzbid0IGFscmVhZHkgbWFya2VkLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvbGxvdyB8fCAhZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3QgJiYgcGF0dGVybi5jaGVja0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhdHRlcm4ubWFya0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBORVhUIHRoaW5nIG1hdGNoZXMgdGhpcyBlbnRyeSwgdGhlbiBhbHNvIGFkZFxuICAgICAgICAvLyB0aGUgcmVzdC5cbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gcmVzdC5wYXR0ZXJuKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJwID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC8vIGRvdHMgYW5kIGVtcHR5IHdlcmUgaGFuZGxlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgcnAgIT09ICcuLicgJiZcbiAgICAgICAgICAgICAgICBycCAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICBycCAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0U3RyaW5nKGUsIHJwLCByZXN0LnJlc3QoKSwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnAgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBlcCA9IGUucGFyZW50IHx8IGU7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlcCwgcmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChycCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJlZ0V4cChlLCBycCwgcmVzdC5yZXN0KCksIGFic29sdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXN0UmVnRXhwKGUsIHAsIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIGlmICghcC50ZXN0KGUubmFtZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGVzdFN0cmluZyhlLCBwLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuP1xuICAgICAgICBpZiAoIWUuaXNOYW1lZChwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3Nvci5qcy5tYXAiLAogICAgIi8qKlxuICogU2luZ2xlLXVzZSB1dGlsaXR5IGNsYXNzZXMgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSB7QGxpbmsgR2xvYn1cbiAqIG1ldGhvZHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBNaW5pcGFzcyB9IGZyb20gJ21pbmlwYXNzJztcbmltcG9ydCB7IElnbm9yZSB9IGZyb20gJy4vaWdub3JlLmpzJztcbmltcG9ydCB7IFByb2Nlc3NvciB9IGZyb20gJy4vcHJvY2Vzc29yLmpzJztcbmNvbnN0IG1ha2VJZ25vcmUgPSAoaWdub3JlLCBvcHRzKSA9PiB0eXBlb2YgaWdub3JlID09PSAnc3RyaW5nJyA/IG5ldyBJZ25vcmUoW2lnbm9yZV0sIG9wdHMpXG4gICAgOiBBcnJheS5pc0FycmF5KGlnbm9yZSkgPyBuZXcgSWdub3JlKGlnbm9yZSwgb3B0cylcbiAgICAgICAgOiBpZ25vcmU7XG4vKipcbiAqIGJhc2ljIHdhbGtpbmcgdXRpbGl0aWVzIHRoYXQgYWxsIHRoZSBnbG9iIHdhbGtlciB0eXBlcyB1c2VcbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2JVdGlsIHtcbiAgICBwYXRoO1xuICAgIHBhdHRlcm5zO1xuICAgIG9wdHM7XG4gICAgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICBhYm9ydGVkID0gZmFsc2U7XG4gICAgI29uUmVzdW1lID0gW107XG4gICAgI2lnbm9yZTtcbiAgICAjc2VwO1xuICAgIHNpZ25hbDtcbiAgICBtYXhEZXB0aDtcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy4jc2VwID0gIW9wdHMucG9zaXggJiYgb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdcXFxcJyA6ICcvJztcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdHMuaWdub3JlIHx8ICF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2lnbm9yZSA9IG1ha2VJZ25vcmUob3B0cy5pZ25vcmUgPz8gW10sIG9wdHMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy4jaWdub3JlLmFkZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSAnY2Fubm90IGlnbm9yZSBjaGlsZCBtYXRjaGVzLCBpZ25vcmUgbGFja3MgYWRkKCkgbWV0aG9kLic7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlnbm9yZSwgYWx3YXlzIHNldCB3aXRoIG1heERlcHRoLCBidXQgaXQncyBvcHRpb25hbCBvbiB0aGVcbiAgICAgICAgLy8gR2xvYk9wdGlvbnMgdHlwZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG9wdHMubWF4RGVwdGggfHwgSW5maW5pdHk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjaWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZW4uaGFzKHBhdGgpIHx8ICEhdGhpcy4jaWdub3JlPy5pZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgICNjaGlsZHJlbklnbm9yZWQocGF0aCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNpZ25vcmU/LmNoaWxkcmVuSWdub3JlZD8uKHBhdGgpO1xuICAgIH1cbiAgICAvLyBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdW1lKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgKGZuID0gdGhpcy4jb25SZXN1bWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SZXN1bWUoZm4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNvblJlc3VtZS5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBkbyB0aGUgcmVxdWlzaXRlIHJlYWxwYXRoL3N0YXQgY2hlY2tpbmcsIGFuZCByZXR1cm4gdGhlIHBhdGhcbiAgICAvLyB0byBhZGQgb3IgdW5kZWZpbmVkIHRvIGZpbHRlciBpdCBvdXQuXG4gICAgYXN5bmMgbWF0Y2hDaGVjayhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IChhd2FpdCBlLnJlYWxwYXRoKCkpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBhd2FpdCBlLmxzdGF0KCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgcy5yZWFscGF0aCgpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGFyZ2V0LmxzdGF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1Rlc3QoZSwgaWZEaXIpIHtcbiAgICAgICAgcmV0dXJuIChlICYmXG4gICAgICAgICAgICAodGhpcy5tYXhEZXB0aCA9PT0gSW5maW5pdHkgfHwgZS5kZXB0aCgpIDw9IHRoaXMubWF4RGVwdGgpICYmXG4gICAgICAgICAgICAoIWlmRGlyIHx8IGUuY2FuUmVhZGRpcigpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHwgIWUuaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICghdGhpcy5vcHRzLm5vZGlyIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMub3B0cy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAhZS5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgIWUucmVhbHBhdGhDYWNoZWQoKT8uaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICF0aGlzLiNpZ25vcmVkKGUpKSA/XG4gICAgICAgICAgICBlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpIHtcbiAgICAgICAgaWYgKGlmRGlyICYmIHRoaXMub3B0cy5ub2RpcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBycGM7XG4gICAgICAgIGlmICh0aGlzLm9wdHMucmVhbHBhdGgpIHtcbiAgICAgICAgICAgIHJwYyA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlLnJlYWxwYXRoU3luYygpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBlLmxzdGF0U3luYygpIDogZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5mb2xsb3cgJiYgdGhpcy5vcHRzLm5vZGlyICYmIHM/LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHMucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQ/LmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaENoZWNrVGVzdChzLCBpZkRpcik7XG4gICAgfVxuICAgIG1hdGNoRmluaXNoKGUsIGFic29sdXRlKSB7XG4gICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyB3ZSBrbm93IHdlIGhhdmUgYW4gaWdub3JlIGlmIHRoaXMgaXMgZmFsc2UsIGJ1dCBUUyBkb2Vzbid0XG4gICAgICAgIGlmICghdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzICYmIHRoaXMuI2lnbm9yZT8uYWRkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ24gPSBgJHtlLnJlbGF0aXZlUG9zaXgoKX0vKipgO1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlLmFkZChpZ24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFicyA9IHRoaXMub3B0cy5hYnNvbHV0ZSA9PT0gdW5kZWZpbmVkID8gYWJzb2x1dGUgOiB0aGlzLm9wdHMuYWJzb2x1dGU7XG4gICAgICAgIHRoaXMuc2Vlbi5hZGQoZSk7XG4gICAgICAgIGNvbnN0IG1hcmsgPSB0aGlzLm9wdHMubWFyayAmJiBlLmlzRGlyZWN0b3J5KCkgPyB0aGlzLiNzZXAgOiAnJztcbiAgICAgICAgLy8gb2ssIHdlIGhhdmUgd2hhdCB3ZSBuZWVkIVxuICAgICAgICBpZiAodGhpcy5vcHRzLndpdGhGaWxlVHlwZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFicykge1xuICAgICAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5mdWxscGF0aFBvc2l4KCkgOiBlLmZ1bGxwYXRoKCk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdChhYnMgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbCA9IHRoaXMub3B0cy5wb3NpeCA/IGUucmVsYXRpdmVQb3NpeCgpIDogZS5yZWxhdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJlID0gdGhpcy5vcHRzLmRvdFJlbGF0aXZlICYmICFyZWwuc3RhcnRzV2l0aCgnLi4nICsgdGhpcy4jc2VwKSA/XG4gICAgICAgICAgICAgICAgJy4nICsgdGhpcy4jc2VwXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KCFyZWwgPyAnLicgKyBtYXJrIDogcHJlICsgcmVsICsgbWFyayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbWF0Y2goZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQ2hlY2soZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICBtYXRjaFN5bmMoZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLm1hdGNoQ2hlY2tTeW5jKGUsIGlmRGlyKTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgICB0aGlzLm1hdGNoRmluaXNoKHAsIGFic29sdXRlKTtcbiAgICB9XG4gICAgd2Fsa0NCKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMpLCBjYik7XG4gICAgfVxuICAgIHdhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5DYWNoZWQgPSB0LnJlYWRkaXJDYWNoZWQoKTtcbiAgICAgICAgICAgIGlmICh0LmNhbGxlZFJlYWRkaXIoKSlcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtDQjModCwgY2hpbGRyZW5DYWNoZWQsIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0LnJlYWRkaXJDQigoXywgZW50cmllcykgPT4gdGhpcy53YWxrQ0IzKHQsIGVudHJpZXMsIHByb2Nlc3NvciwgbmV4dCksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCMyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBjYikge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucyk7XG4gICAgICAgIC8vIGRvbmUgcHJvY2Vzc2luZy4gIGFsbCBvZiB0aGUgYWJvdmUgaXMgc3luYywgY2FuIGJlIGFic3RyYWN0ZWQgb3V0LlxuICAgICAgICAvLyBzdWJ3YWxrcyBpcyBhIG1hcCBvZiBwYXRocyB0byB0aGUgZW50cnkgZmlsdGVycyB0aGV5IG5lZWRcbiAgICAgICAgLy8gbWF0Y2hlcyBpcyBhIG1hcCBvZiBwYXRocyB0byBbYWJzb2x1dGUsIGlmRGlyXSB0dXBsZXMuXG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjNTeW5jKHQsIGNoaWxkcmVuLCBwcm9jZXNzb3IsIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCM1N5bmModGFyZ2V0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3Nvci5maWx0ZXJFbnRyaWVzKHRhcmdldCwgZW50cmllcyk7XG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3Nvci5jaGlsZCgpLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEdsb2JXYWxrZXIgZXh0ZW5kcyBHbG9iVXRpbCB7XG4gICAgbWF0Y2hlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJucywgcGF0aCwgb3B0cykge1xuICAgICAgICBzdXBlcihwYXR0ZXJucywgcGF0aCwgb3B0cyk7XG4gICAgfVxuICAgIG1hdGNoRW1pdChlKSB7XG4gICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGsoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wYXRoLmxzdGF0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLndhbGtDQih0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqKHRoaXMuc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXModGhpcy5tYXRjaGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXM7XG4gICAgfVxuICAgIHdhbGtTeW5jKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aC5sc3RhdFN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3RoaW5nIGZvciB0aGUgY2FsbGJhY2sgdG8gZG8sIGJlY2F1c2UgdGhpcyBuZXZlciBwYXVzZXNcbiAgICAgICAgdGhpcy53YWxrQ0JTeW5jKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEdsb2JTdHJlYW0gZXh0ZW5kcyBHbG9iVXRpbCB7XG4gICAgcmVzdWx0cztcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJucywgcGF0aCwgb3B0cykge1xuICAgICAgICBzdXBlcihwYXR0ZXJucywgcGF0aCwgb3B0cyk7XG4gICAgICAgIHRoaXMucmVzdWx0cyA9IG5ldyBNaW5pcGFzcyh7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbignZHJhaW4nLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzLm9uKCdyZXN1bWUnLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRzLndyaXRlKGUpO1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucGF0aDtcbiAgICAgICAgaWYgKHRhcmdldC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGFyZ2V0LmxzdGF0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhbGtDQih0YXJnZXQsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2Fsa2VyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgTWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBhdHRlcm5zIHByb3ZpZGVkIGNvbnRhaW4gYW55IG1hZ2ljIGdsb2IgY2hhcmFjdGVycyxcbiAqIGdpdmVuIHRoZSBvcHRpb25zIHByb3ZpZGVkLlxuICpcbiAqIEJyYWNlIGV4cGFuc2lvbiBpcyBub3QgY29uc2lkZXJlZCBcIm1hZ2ljXCIgdW5sZXNzIHRoZSBgbWFnaWNhbEJyYWNlc2Agb3B0aW9uXG4gKiBpcyBzZXQsIGFzIGJyYWNlIGV4cGFuc2lvbiBqdXN0IHR1cm5zIG9uZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogU28gYSBwYXR0ZXJuIGxpa2UgYCd4e2EsYn15J2Agd291bGQgcmV0dXJuIGBmYWxzZWAsIGJlY2F1c2UgYCd4YXknYCBhbmRcbiAqIGAneGJ5J2AgYm90aCBkbyBub3QgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLCBhbmQgaXQncyB0cmVhdGVkIHRoZVxuICogc2FtZSBhcyBpZiB5b3UgaGFkIGNhbGxlZCBpdCBvbiBgWyd4YXknLCAneGJ5J11gLiBXaGVuIGBtYWdpY2FsQnJhY2VzOnRydWVgXG4gKiBpcyBpbiB0aGUgb3B0aW9ucywgYnJhY2UgZXhwYW5zaW9uIF9pc18gdHJlYXRlZCBhcyBhIHBhdHRlcm4gaGF2aW5nIG1hZ2ljLlxuICovXG5leHBvcnQgY29uc3QgaGFzTWFnaWMgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgICAgIHBhdHRlcm4gPSBbcGF0dGVybl07XG4gICAgfVxuICAgIGZvciAoY29uc3QgcCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgIGlmIChuZXcgTWluaW1hdGNoKHAsIG9wdGlvbnMpLmhhc01hZ2ljKCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhcy1tYWdpYy5qcy5tYXAiLAogICAgImltcG9ydCB7IGVzY2FwZSwgdW5lc2NhcGUgfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgR2xvYiB9IGZyb20gJy4vZ2xvYi5qcyc7XG5pbXBvcnQgeyBoYXNNYWdpYyB9IGZyb20gJy4vaGFzLW1hZ2ljLmpzJztcbmV4cG9ydCB7IGVzY2FwZSwgdW5lc2NhcGUgfSBmcm9tICdtaW5pbWF0Y2gnO1xuZXhwb3J0IHsgR2xvYiB9IGZyb20gJy4vZ2xvYi5qcyc7XG5leHBvcnQgeyBoYXNNYWdpYyB9IGZyb20gJy4vaGFzLW1hZ2ljLmpzJztcbmV4cG9ydCB7IElnbm9yZSB9IGZyb20gJy4vaWdub3JlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBnbG9iU3RyZWFtU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuc3RyZWFtU3luYygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JTdHJlYW0ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrU3luYygpO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2xvYl8ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLndhbGsoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iSXRlcmF0ZVN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLml0ZXJhdGVTeW5jKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYkl0ZXJhdGUocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLml0ZXJhdGUoKTtcbn1cbi8vIGFsaWFzZXM6IGdsb2Iuc3luYy5zdHJlYW0oKSBnbG9iLnN0cmVhbS5zeW5jKCkgZ2xvYi5zeW5jKCkgZXRjXG5leHBvcnQgY29uc3Qgc3RyZWFtU3luYyA9IGdsb2JTdHJlYW1TeW5jO1xuZXhwb3J0IGNvbnN0IHN0cmVhbSA9IE9iamVjdC5hc3NpZ24oZ2xvYlN0cmVhbSwgeyBzeW5jOiBnbG9iU3RyZWFtU3luYyB9KTtcbmV4cG9ydCBjb25zdCBpdGVyYXRlU3luYyA9IGdsb2JJdGVyYXRlU3luYztcbmV4cG9ydCBjb25zdCBpdGVyYXRlID0gT2JqZWN0LmFzc2lnbihnbG9iSXRlcmF0ZSwge1xuICAgIHN5bmM6IGdsb2JJdGVyYXRlU3luYyxcbn0pO1xuZXhwb3J0IGNvbnN0IHN5bmMgPSBPYmplY3QuYXNzaWduKGdsb2JTeW5jLCB7XG4gICAgc3RyZWFtOiBnbG9iU3RyZWFtU3luYyxcbiAgICBpdGVyYXRlOiBnbG9iSXRlcmF0ZVN5bmMsXG59KTtcbmV4cG9ydCBjb25zdCBnbG9iID0gT2JqZWN0LmFzc2lnbihnbG9iXywge1xuICAgIGdsb2I6IGdsb2JfLFxuICAgIGdsb2JTeW5jLFxuICAgIHN5bmMsXG4gICAgZ2xvYlN0cmVhbSxcbiAgICBzdHJlYW0sXG4gICAgZ2xvYlN0cmVhbVN5bmMsXG4gICAgc3RyZWFtU3luYyxcbiAgICBnbG9iSXRlcmF0ZSxcbiAgICBpdGVyYXRlLFxuICAgIGdsb2JJdGVyYXRlU3luYyxcbiAgICBpdGVyYXRlU3luYyxcbiAgICBHbG9iLFxuICAgIGhhc01hZ2ljLFxuICAgIGVzY2FwZSxcbiAgICB1bmVzY2FwZSxcbn0pO1xuZ2xvYi5nbG9iID0gZ2xvYjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZmluZEFjdHVhbEV4ZWN1dGFibGUgfSBmcm9tICdzcGF3bi1yeCdcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCByZXNvbHZlIH0gZnJvbSAnbm9kZTp1cmwnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4vbG9nLmpzJ1xuaW1wb3J0IHsgZXhlY0ZpbGVOb1Rocm93IH0gZnJvbSAnLi9leGVjRmlsZU5vVGhyb3cuanMnXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnXG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IHJlc29sdmUoXG4gIF9fZmlsZW5hbWUsXG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcgPyAnLi4vLi4nIDogJy4nLFxuKVxuXG5jb25zdCBkID0gZGVidWcoJ2NsYXVkZTpyaXBncmVwJylcblxuY29uc3QgdXNlQnVpbHRpblJpcGdyZXAgPSAhIXByb2Nlc3MuZW52LlVTRV9CVUlMVElOX1JJUEdSRVBcbmlmICh1c2VCdWlsdGluUmlwZ3JlcCkge1xuICBkKCdVc2luZyBidWlsdGluIHJpcGdyZXAgYmVjYXVzZSBVU0VfQlVJTFRJTl9SSVBHUkVQIGlzIHNldCcpXG59XG5cbmNvbnN0IHJpcGdyZXBQYXRoID0gbWVtb2l6ZSgoKSA9PiB7XG4gIGNvbnN0IHsgY21kIH0gPSBmaW5kQWN0dWFsRXhlY3V0YWJsZSgncmcnLCBbXSlcbiAgZChgcmlwZ3JlcCBpbml0aWFsbHkgcmVzb2x2ZWQgYXM6ICR7Y21kfWApXG5cbiAgaWYgKGNtZCAhPT0gJ3JnJyAmJiAhdXNlQnVpbHRpblJpcGdyZXApIHtcbiAgICAvLyBOQjogSWYgd2UncmUgYWJsZSB0byBmaW5kIHJpcGdyZXAgaW4gJFBBVEgsIGNtZCB3aWxsIGJlIGFuIGFic29sdXRlXG4gICAgLy8gcGF0aCByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyAncmcnXG4gICAgcmV0dXJuIGNtZFxuICB9IGVsc2Uge1xuICAgIC8vIFVzZSB0aGUgb25lIHdlIHNoaXAgaW4tYm94XG4gICAgY29uc3QgcmdSb290ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3ZlbmRvcicsICdyaXBncmVwJylcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgLy8gTkI6IFJpcGdyZXAgZG9lc24ndCBzaGlwIGFuIGFhcmNoNjQgYmluYXJ5IGZvciBXaW5kb3dzLCBib29vb29vXG4gICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHJnUm9vdCwgJ3g2NC13aW4zMicsICdyZy5leGUnKVxuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IHBhdGgucmVzb2x2ZShcbiAgICAgIHJnUm9vdCxcbiAgICAgIGAke3Byb2Nlc3MuYXJjaH0tJHtwcm9jZXNzLnBsYXRmb3JtfWAsXG4gICAgICAncmcnLFxuICAgIClcblxuICAgIGQoJ2ludGVybmFsIHJpcGdyZXAgcmVzb2x2ZWQgYXM6ICVzJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfVxufSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJpcEdyZXAoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBhd2FpdCBjb2Rlc2lnblJpcGdyZXBJZk5lY2Vzc2FyeSgpXG4gIGNvbnN0IHJnID0gcmlwZ3JlcFBhdGgoKVxuICBkKCdyaXBncmVwIGNhbGxlZDogJXMgJW8nLCByZywgdGFyZ2V0LCBhcmdzKVxuXG4gIC8vIE5COiBXaGVuIHJ1bm5pbmcgaW50ZXJhY3RpdmVseSwgcmlwZ3JlcCBkb2VzIG5vdCByZXF1aXJlIGEgcGF0aCBhcyBpdHMgbGFzdFxuICAvLyBhcmd1bWVudCwgYnV0IHdoZW4gcnVuIG5vbi1pbnRlcmFjdGl2ZWx5LCBpdCB3aWxsIGhhbmcgdW5sZXNzIGEgcGF0aCBvciBmaWxlXG4gIC8vIHBhdHRlcm4gaXMgcHJvdmlkZWRcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGV4ZWNGaWxlKFxuICAgICAgcmlwZ3JlcFBhdGgoKSxcbiAgICAgIFsuLi5hcmdzLCB0YXJnZXRdLFxuICAgICAge1xuICAgICAgICBtYXhCdWZmZXI6IDFfMDAwXzAwMCxcbiAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgfSxcbiAgICAgIChlcnJvciwgc3Rkb3V0KSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIC8vIEV4aXQgY29kZSAxIGZyb20gcmlwZ3JlcCBtZWFucyBcIm5vIG1hdGNoZXMgZm91bmRcIiAtIHRoaXMgaXMgbm9ybWFsXG4gICAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09IDEpIHtcbiAgICAgICAgICAgIGQoJ3JpcGdyZXAgZXJyb3I6ICVvJywgZXJyb3IpXG4gICAgICAgICAgICBsb2dFcnJvcihlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShbXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkKCdyaXBncmVwIHN1Y2NlZWRlZCB3aXRoICVzJywgc3Rkb3V0KVxuICAgICAgICAgIHJlc29sdmUoc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJykuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIClcbiAgfSlcbn1cblxuLy8gTkI6IFdlIGRvIHNvbWV0aGluZyB0cmlja3kgaGVyZS4gV2Uga25vdyB0aGF0IHJpcGdyZXAgcHJvY2Vzc2VzIGNvbW1vblxuLy8gaWdub3JlIGZpbGVzIGZvciB1cywgc28gd2UganVzdCByaXBncmVwIGZvciBhbnkgY2hhcmFjdGVyLCB3aGljaCBtYXRjaGVzXG4vLyBhbGwgbm9uLWVtcHR5IGZpbGVzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEFsbENvbnRlbnRGaWxlcyhcbiAgcGF0aDogc3RyaW5nLFxuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHRyeSB7XG4gICAgZCgnbGlzdEFsbENvbnRlbnRGaWxlcyBjYWxsZWQ6ICVzJywgcGF0aClcbiAgICByZXR1cm4gKGF3YWl0IHJpcEdyZXAoWyctbCcsICcuJywgcGF0aF0sIHBhdGgsIGFib3J0U2lnbmFsKSkuc2xpY2UoMCwgbGltaXQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkKCdsaXN0QWxsQ29udGVudEZpbGVzIGZhaWxlZDogJW8nLCBlKVxuXG4gICAgbG9nRXJyb3IoZSlcbiAgICByZXR1cm4gW11cbiAgfVxufVxuXG5sZXQgYWxyZWFkeURvbmVTaWduQ2hlY2sgPSBmYWxzZVxuYXN5bmMgZnVuY3Rpb24gY29kZXNpZ25SaXBncmVwSWZOZWNlc3NhcnkoKSB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnZGFyd2luJyB8fCBhbHJlYWR5RG9uZVNpZ25DaGVjaykge1xuICAgIHJldHVyblxuICB9XG5cbiAgYWxyZWFkeURvbmVTaWduQ2hlY2sgPSB0cnVlXG5cbiAgLy8gRmlyc3QsIGNoZWNrIHRvIHNlZSBpZiByaXBncmVwIGlzIGFscmVhZHkgc2lnbmVkXG4gIGQoJ2NoZWNraW5nIGlmIHJpcGdyZXAgaXMgYWxyZWFkeSBzaWduZWQnKVxuICBjb25zdCBsaW5lcyA9IChcbiAgICBhd2FpdCBleGVjRmlsZU5vVGhyb3coXG4gICAgICAnY29kZXNpZ24nLFxuICAgICAgWyctdnYnLCAnLWQnLCByaXBncmVwUGF0aCgpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGZhbHNlLFxuICAgIClcbiAgKS5zdGRvdXQuc3BsaXQoJ1xcbicpXG5cbiAgY29uc3QgbmVlZHNTaWduZWQgPSBsaW5lcy5maW5kKGxpbmUgPT4gbGluZS5pbmNsdWRlcygnbGlua2VyLXNpZ25lZCcpKVxuICBpZiAoIW5lZWRzU2lnbmVkKSB7XG4gICAgZCgnc2VlbXMgdG8gYmUgYWxyZWFkeSBzaWduZWQnKVxuICAgIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBkKCdzaWduaW5nIHJpcGdyZXAnKVxuICAgIGNvbnN0IHNpZ25SZXN1bHQgPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coJ2NvZGVzaWduJywgW1xuICAgICAgJy0tc2lnbicsXG4gICAgICAnLScsXG4gICAgICAnLS1mb3JjZScsXG4gICAgICAnLS1wcmVzZXJ2ZS1tZXRhZGF0YT1lbnRpdGxlbWVudHMscmVxdWlyZW1lbnRzLGZsYWdzLHJ1bnRpbWUnLFxuICAgICAgcmlwZ3JlcFBhdGgoKSxcbiAgICBdKVxuXG4gICAgaWYgKHNpZ25SZXN1bHQuY29kZSAhPT0gMCkge1xuICAgICAgZCgnZmFpbGVkIHRvIHNpZ24gcmlwZ3JlcDogJW8nLCBzaWduUmVzdWx0KVxuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gc2lnbiByaXBncmVwOiAke3NpZ25SZXN1bHQuc3Rkb3V0fSAke3NpZ25SZXN1bHQuc3RkZXJyfWAsXG4gICAgICApXG4gICAgfVxuXG4gICAgZCgncmVtb3ZpbmcgcXVhcmFudGluZScpXG4gICAgY29uc3QgcXVhcmFudGluZVJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlTm9UaHJvdygneGF0dHInLCBbXG4gICAgICAnLWQnLFxuICAgICAgJ2NvbS5hcHBsZS5xdWFyYW50aW5lJyxcbiAgICAgIHJpcGdyZXBQYXRoKCksXG4gICAgXSlcblxuICAgIGlmIChxdWFyYW50aW5lUmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICAgIGQoJ2ZhaWxlZCB0byByZW1vdmUgcXVhcmFudGluZTogJW8nLCBxdWFyYW50aW5lUmVzdWx0KVxuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVtb3ZlIHF1YXJhbnRpbmU6ICR7cXVhcmFudGluZVJlc3VsdC5zdGRvdXR9ICR7cXVhcmFudGluZVJlc3VsdC5zdGRlcnJ9YCxcbiAgICAgIClcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkKCdmYWlsZWQgZHVyaW5nIHNpZ246ICVvJywgZSlcbiAgICBsb2dFcnJvcihlKVxuICB9XG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICdpbmsnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuL0N1c3RvbVNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgTGluayBmcm9tICcuL0xpbmsuanMnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIG9uRG9uZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29zdFRocmVzaG9sZERpYWxvZyh7IG9uRG9uZSB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIEhhbmRsZSBDdHJsK0MsIEN0cmwrRCBhbmQgRXNjXG4gIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgaWYgKChrZXkuY3RybCAmJiAoaW5wdXQgPT09ICdjJyB8fCBpbnB1dCA9PT0gJ2QnKSkgfHwga2V5LmVzY2FwZSkge1xuICAgICAgb25Eb25lKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgcGFkZGluZz17MX1cbiAgICAgIGJvcmRlckNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeUJvcmRlcn1cbiAgICA+XG4gICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8VGV4dCBib2xkPlxuICAgICAgICAgIFlvdSZhcG9zO3ZlIHNwZW50ICQ1IG9uIHRoZSBBbnRocm9waWMgQVBJIHRoaXMgc2Vzc2lvbi5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD5MZWFybiBtb3JlIGFib3V0IGhvdyB0byBtb25pdG9yIHlvdXIgc3BlbmRpbmc6PC9UZXh0PlxuICAgICAgICA8TGluayB1cmw9XCJodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9zL2NsYXVkZS1jb2RlLWNvc3RcIiAvPlxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94PlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YWx1ZTogJ29rJyxcbiAgICAgICAgICAgICAgbGFiZWw6ICdHb3QgaXQsIHRoYW5rcyEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkRvbmV9XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgUmVhY3QsIHsgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4vc2VsZWN0LW9wdGlvbi5qcydcbmltcG9ydCB7IHR5cGUgVGhlbWUgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgdXNlU2VsZWN0U3RhdGUgfSBmcm9tICcuL3VzZS1zZWxlY3Qtc3RhdGUuanMnXG5pbXBvcnQgeyB1c2VTZWxlY3QgfSBmcm9tICcuL3VzZS1zZWxlY3QuanMnXG5pbXBvcnQgeyBPcHRpb24sIHVzZUNvbXBvbmVudFRoZW1lIH0gZnJvbSAnQGlua2pzL3VpJ1xuXG5leHBvcnQgdHlwZSBPcHRpb25TdWJ0cmVlID0ge1xuICAvKipcbiAgICogSGVhZGVyIHRvIHNob3cgYWJvdmUgc3ViLW9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXI/OiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IChPcHRpb24gfCBPcHRpb25TdWJ0cmVlKVtdXG59XG5cbmV4cG9ydCB0eXBlIE9wdGlvbkhlYWRlciA9IHtcbiAgcmVhZG9ubHkgaGVhZGVyOiBzdHJpbmdcblxuICByZWFkb25seSBvcHRpb25WYWx1ZXM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBjb25zdCBvcHRpb25IZWFkZXJLZXkgPSAob3B0aW9uSGVhZGVyOiBPcHRpb25IZWFkZXIpOiBzdHJpbmcgPT5cbiAgYEhFQURFUi0ke29wdGlvbkhlYWRlci5vcHRpb25WYWx1ZXMuam9pbignLCcpfWBcblxuZXhwb3J0IHR5cGUgU2VsZWN0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBXaGVuIGRpc2FibGVkLCB1c2VyIGlucHV0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc0Rpc2FibGVkPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdmlzaWJsZSBvcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlT3B0aW9uQ291bnQ/OiBudW1iZXJcblxuICAvKipcbiAgICogSGlnaGxpZ2h0IHRleHQgaW4gb3B0aW9uIGxhYmVscy5cbiAgICovXG4gIHJlYWRvbmx5IGhpZ2hsaWdodFRleHQ/OiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IChPcHRpb24gfCBPcHRpb25TdWJ0cmVlKVtdXG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBzZWxlY3RlZCBvcHRpb24gY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBmb2N1c2VkIG9wdGlvbiBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25Gb2N1cz86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIFZhbHVlIHRvIGZvY3VzXG4gICAqL1xuICByZWFkb25seSBmb2N1c1ZhbHVlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Qoe1xuICBpc0Rpc2FibGVkID0gZmFsc2UsXG4gIHZpc2libGVPcHRpb25Db3VudCA9IDUsXG4gIGhpZ2hsaWdodFRleHQsXG4gIG9wdGlvbnMsXG4gIGRlZmF1bHRWYWx1ZSxcbiAgb25DaGFuZ2UsXG4gIG9uRm9jdXMsXG4gIGZvY3VzVmFsdWUsXG59OiBTZWxlY3RQcm9wcykge1xuICBjb25zdCBzdGF0ZSA9IHVzZVNlbGVjdFN0YXRlKHtcbiAgICB2aXNpYmxlT3B0aW9uQ291bnQsXG4gICAgb3B0aW9ucyxcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgb25DaGFuZ2UsXG4gICAgb25Gb2N1cyxcbiAgICBmb2N1c1ZhbHVlLFxuICB9KVxuXG4gIHVzZVNlbGVjdCh7IGlzRGlzYWJsZWQsIHN0YXRlIH0pXG5cbiAgY29uc3QgeyBzdHlsZXMgfSA9IHVzZUNvbXBvbmVudFRoZW1lPFRoZW1lPignU2VsZWN0JylcblxuICByZXR1cm4gKFxuICAgIDxCb3ggey4uLnN0eWxlcy5jb250YWluZXIoKX0+XG4gICAgICB7c3RhdGUudmlzaWJsZU9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9ICd2YWx1ZScgaW4gb3B0aW9uID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uSGVhZGVyS2V5KG9wdGlvbilcbiAgICAgICAgY29uc3QgaXNGb2N1c2VkID1cbiAgICAgICAgICAhaXNEaXNhYmxlZCAmJlxuICAgICAgICAgIHN0YXRlLmZvY3VzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgKCd2YWx1ZScgaW4gb3B0aW9uXG4gICAgICAgICAgICA/IHN0YXRlLmZvY3VzZWRWYWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICAgICAgICA6IG9wdGlvbi5vcHRpb25WYWx1ZXMuaW5jbHVkZXMoc3RhdGUuZm9jdXNlZFZhbHVlKSlcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9XG4gICAgICAgICAgISFzdGF0ZS52YWx1ZSAmJlxuICAgICAgICAgICgndmFsdWUnIGluIG9wdGlvblxuICAgICAgICAgICAgPyBzdGF0ZS52YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICAgICAgICA6IG9wdGlvbi5vcHRpb25WYWx1ZXMuaW5jbHVkZXMoc3RhdGUudmFsdWUpKVxuICAgICAgICBjb25zdCBzbWFsbFBvaW50ZXIgPSAnaGVhZGVyJyBpbiBvcHRpb25cbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gJ2xhYmVsJyBpbiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiBvcHRpb24uaGVhZGVyXG4gICAgICAgIGxldCBsYWJlbDogUmVhY3ROb2RlID0gbGFiZWxUZXh0XG5cbiAgICAgICAgaWYgKGhpZ2hsaWdodFRleHQgJiYgbGFiZWxUZXh0LmluY2x1ZGVzKGhpZ2hsaWdodFRleHQpKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBsYWJlbFRleHQuaW5kZXhPZihoaWdobGlnaHRUZXh0KVxuXG4gICAgICAgICAgbGFiZWwgPSAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7bGFiZWxUZXh0LnNsaWNlKDAsIGluZGV4KX1cbiAgICAgICAgICAgICAgPFRleHQgey4uLnN0eWxlcy5oaWdobGlnaHRlZFRleHQoKX0+e2hpZ2hsaWdodFRleHR9PC9UZXh0PlxuICAgICAgICAgICAgICB7bGFiZWxUZXh0LnNsaWNlKGluZGV4ICsgaGlnaGxpZ2h0VGV4dC5sZW5ndGgpfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U2VsZWN0T3B0aW9uXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGlzRm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgIHNtYWxsUG9pbnRlcj17c21hbGxQb2ludGVyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L1NlbGVjdE9wdGlvbj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBSZWFjdCwgeyB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdHlwZSBUaGVtZSB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyB1c2VDb21wb25lbnRUaGVtZSB9IGZyb20gJ0Bpbmtqcy91aSdcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIG9wdGlvbiBpcyBmb2N1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNGb2N1c2VkOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTZWxlY3RlZDogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHBvaW50ZXIgaXMgc2hvd24gd2hlbiBzZWxlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgc21hbGxQb2ludGVyPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBPcHRpb24gbGFiZWwuXG4gICAqL1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3RPcHRpb24oe1xuICBpc0ZvY3VzZWQsXG4gIGlzU2VsZWN0ZWQsXG4gIHNtYWxsUG9pbnRlcixcbiAgY2hpbGRyZW4sXG59OiBTZWxlY3RPcHRpb25Qcm9wcykge1xuICBjb25zdCB7IHN0eWxlcyB9ID0gdXNlQ29tcG9uZW50VGhlbWU8VGhlbWU+KCdTZWxlY3QnKVxuXG4gIHJldHVybiAoXG4gICAgPEJveCB7Li4uc3R5bGVzLm9wdGlvbih7IGlzRm9jdXNlZCB9KX0+XG4gICAgICB7aXNGb2N1c2VkICYmIChcbiAgICAgICAgPFRleHQgey4uLnN0eWxlcy5mb2N1c0luZGljYXRvcigpfT5cbiAgICAgICAgICB7c21hbGxQb2ludGVyID8gZmlndXJlcy50cmlhbmdsZURvd25TbWFsbCA6IGZpZ3VyZXMucG9pbnRlcn1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKX1cblxuICAgICAgPFRleHQgey4uLnN0eWxlcy5sYWJlbCh7IGlzRm9jdXNlZCwgaXNTZWxlY3RlZCB9KX0+e2NoaWxkcmVufTwvVGV4dD5cblxuICAgICAge2lzU2VsZWN0ZWQgJiYgKFxuICAgICAgICA8VGV4dCB7Li4uc3R5bGVzLnNlbGVjdGVkSW5kaWNhdG9yKCl9PntmaWd1cmVzLnRpY2t9PC9UZXh0PlxuICAgICAgKX1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB7XG4gIHVzZVJlZHVjZXIsXG4gIHR5cGUgUmVkdWNlcixcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IE9wdGlvbk1hcCBmcm9tICcuL29wdGlvbi1tYXAuanMnXG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICdAaW5ranMvdWknXG5pbXBvcnQgdHlwZSB7IE9wdGlvbkhlYWRlciwgT3B0aW9uU3VidHJlZSB9IGZyb20gJy4vc2VsZWN0LmpzJ1xuXG50eXBlIFN0YXRlID0ge1xuICAvKipcbiAgICogTWFwIHdoZXJlIGtleSBpcyBvcHRpb24ncyB2YWx1ZSBhbmQgdmFsdWUgaXMgb3B0aW9uJ3MgaW5kZXguXG4gICAqL1xuICBvcHRpb25NYXA6IE9wdGlvbk1hcFxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdmlzaWJsZSBvcHRpb25zLlxuICAgKi9cbiAgdmlzaWJsZU9wdGlvbkNvdW50OiBudW1iZXJcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGN1cnJlbnRseSBmb2N1c2VkIG9wdGlvbi5cbiAgICovXG4gIGZvY3VzZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIHRoZSBmaXJzdCB2aXNpYmxlIG9wdGlvbi5cbiAgICovXG4gIHZpc2libGVGcm9tSW5kZXg6IG51bWJlclxuXG4gIC8qKlxuICAgKiBJbmRleCBvZiB0aGUgbGFzdCB2aXNpYmxlIG9wdGlvbi5cbiAgICovXG4gIHZpc2libGVUb0luZGV4OiBudW1iZXJcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgb3B0aW9uLlxuICAgKi9cbiAgcHJldmlvdXNWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBzZWxlY3RlZCBvcHRpb24uXG4gICAqL1xuICB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG59XG5cbnR5cGUgQWN0aW9uID1cbiAgfCBGb2N1c05leHRPcHRpb25BY3Rpb25cbiAgfCBGb2N1c1ByZXZpb3VzT3B0aW9uQWN0aW9uXG4gIHwgU2VsZWN0Rm9jdXNlZE9wdGlvbkFjdGlvblxuICB8IFNldEZvY3VzQWN0aW9uXG4gIHwgUmVzZXRBY3Rpb25cblxudHlwZSBTZXRGb2N1c0FjdGlvbiA9IHtcbiAgdHlwZTogJ3NldC1mb2N1cydcbiAgdmFsdWU6IHN0cmluZ1xufVxuXG50eXBlIEZvY3VzTmV4dE9wdGlvbkFjdGlvbiA9IHtcbiAgdHlwZTogJ2ZvY3VzLW5leHQtb3B0aW9uJ1xufVxuXG50eXBlIEZvY3VzUHJldmlvdXNPcHRpb25BY3Rpb24gPSB7XG4gIHR5cGU6ICdmb2N1cy1wcmV2aW91cy1vcHRpb24nXG59XG5cbnR5cGUgU2VsZWN0Rm9jdXNlZE9wdGlvbkFjdGlvbiA9IHtcbiAgdHlwZTogJ3NlbGVjdC1mb2N1c2VkLW9wdGlvbidcbn1cblxudHlwZSBSZXNldEFjdGlvbiA9IHtcbiAgdHlwZTogJ3Jlc2V0J1xuICBzdGF0ZTogU3RhdGVcbn1cblxuY29uc3QgcmVkdWNlcjogUmVkdWNlcjxTdGF0ZSwgQWN0aW9uPiA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmb2N1cy1uZXh0LW9wdGlvbic6IHtcbiAgICAgIGlmICghc3RhdGUuZm9jdXNlZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpdGVtID0gc3RhdGUub3B0aW9uTWFwLmdldChzdGF0ZS5mb2N1c2VkVmFsdWUpXG5cbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICByZXR1cm4gc3RhdGVcbiAgICAgIH1cblxuICAgICAgbGV0IG5leHQgPSBpdGVtLm5leHRcbiAgICAgIHdoaWxlIChuZXh0ICYmICEoJ3ZhbHVlJyBpbiBuZXh0KSkge1xuICAgICAgICAvLyBTa2lwIGhlYWRlcnNcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dFxuICAgICAgfVxuXG4gICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lZWRzVG9TY3JvbGwgPSBuZXh0LmluZGV4ID49IHN0YXRlLnZpc2libGVUb0luZGV4XG5cbiAgICAgIGlmICghbmVlZHNUb1Njcm9sbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGZvY3VzZWRWYWx1ZTogbmV4dC52YWx1ZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0VmlzaWJsZVRvSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgc3RhdGUub3B0aW9uTWFwLnNpemUsXG4gICAgICAgIHN0YXRlLnZpc2libGVUb0luZGV4ICsgMSxcbiAgICAgIClcblxuICAgICAgY29uc3QgbmV4dFZpc2libGVGcm9tSW5kZXggPSBuZXh0VmlzaWJsZVRvSW5kZXggLSBzdGF0ZS52aXNpYmxlT3B0aW9uQ291bnRcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbmV4dC52YWx1ZSxcbiAgICAgICAgdmlzaWJsZUZyb21JbmRleDogbmV4dFZpc2libGVGcm9tSW5kZXgsXG4gICAgICAgIHZpc2libGVUb0luZGV4OiBuZXh0VmlzaWJsZVRvSW5kZXgsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnZm9jdXMtcHJldmlvdXMtb3B0aW9uJzoge1xuICAgICAgaWYgKCFzdGF0ZS5mb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGl0ZW0gPSBzdGF0ZS5vcHRpb25NYXAuZ2V0KHN0YXRlLmZvY3VzZWRWYWx1ZSlcblxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgfVxuXG4gICAgICBsZXQgcHJldmlvdXMgPSBpdGVtLnByZXZpb3VzXG4gICAgICB3aGlsZSAocHJldmlvdXMgJiYgISgndmFsdWUnIGluIHByZXZpb3VzKSkge1xuICAgICAgICAvLyBTa2lwIGhlYWRlcnNcbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c1xuICAgICAgfVxuXG4gICAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZWVkc1RvU2Nyb2xsID0gcHJldmlvdXMuaW5kZXggPD0gc3RhdGUudmlzaWJsZUZyb21JbmRleFxuXG4gICAgICBpZiAoIW5lZWRzVG9TY3JvbGwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBmb2N1c2VkVmFsdWU6IHByZXZpb3VzLnZhbHVlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRWaXNpYmxlRnJvbUluZGV4ID0gTWF0aC5tYXgoMCwgc3RhdGUudmlzaWJsZUZyb21JbmRleCAtIDEpXG5cbiAgICAgIGNvbnN0IG5leHRWaXNpYmxlVG9JbmRleCA9IG5leHRWaXNpYmxlRnJvbUluZGV4ICsgc3RhdGUudmlzaWJsZU9wdGlvbkNvdW50XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmb2N1c2VkVmFsdWU6IHByZXZpb3VzLnZhbHVlLFxuICAgICAgICB2aXNpYmxlRnJvbUluZGV4OiBuZXh0VmlzaWJsZUZyb21JbmRleCxcbiAgICAgICAgdmlzaWJsZVRvSW5kZXg6IG5leHRWaXNpYmxlVG9JbmRleCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdzZWxlY3QtZm9jdXNlZC1vcHRpb24nOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcHJldmlvdXNWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgICAgIHZhbHVlOiBzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAncmVzZXQnOiB7XG4gICAgICByZXR1cm4gYWN0aW9uLnN0YXRlXG4gICAgfVxuXG4gICAgY2FzZSAnc2V0LWZvY3VzJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogYWN0aW9uLnZhbHVlLFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBVc2VTZWxlY3RTdGF0ZVByb3BzID0ge1xuICAvKipcbiAgICogTnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDVcbiAgICovXG4gIHZpc2libGVPcHRpb25Db3VudD86IG51bWJlclxuXG4gIC8qKlxuICAgKiBPcHRpb25zLlxuICAgKi9cbiAgb3B0aW9uczogKE9wdGlvbiB8IE9wdGlvblN1YnRyZWUpW11cblxuICAvKipcbiAgICogSW5pdGlhbGx5IHNlbGVjdGVkIG9wdGlvbidzIHZhbHVlLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciBzZWxlY3RpbmcgYW4gb3B0aW9uLlxuICAgKi9cbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgZm9jdXNpbmcgYW4gb3B0aW9uLlxuICAgKi9cbiAgb25Gb2N1cz86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIFZhbHVlIHRvIGZvY3VzXG4gICAqL1xuICBmb2N1c1ZhbHVlPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFN0YXRlID0gUGljazxcbiAgU3RhdGUsXG4gICdmb2N1c2VkVmFsdWUnIHwgJ3Zpc2libGVGcm9tSW5kZXgnIHwgJ3Zpc2libGVUb0luZGV4JyB8ICd2YWx1ZSdcbj4gJiB7XG4gIC8qKlxuICAgKiBWaXNpYmxlIG9wdGlvbnMuXG4gICAqL1xuICB2aXNpYmxlT3B0aW9uczogQXJyYXk8KE9wdGlvbiB8IE9wdGlvbkhlYWRlcikgJiB7IGluZGV4OiBudW1iZXIgfT5cblxuICAvKipcbiAgICogRm9jdXMgbmV4dCBvcHRpb24gYW5kIHNjcm9sbCB0aGUgbGlzdCBkb3duLCBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c05leHRPcHRpb246ICgpID0+IHZvaWRcblxuICAvKipcbiAgICogRm9jdXMgcHJldmlvdXMgb3B0aW9uIGFuZCBzY3JvbGwgdGhlIGxpc3QgdXAsIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzUHJldmlvdXNPcHRpb246ICgpID0+IHZvaWRcblxuICAvKipcbiAgICogU2VsZWN0IGN1cnJlbnRseSBmb2N1c2VkIG9wdGlvbi5cbiAgICovXG4gIHNlbGVjdEZvY3VzZWRPcHRpb246ICgpID0+IHZvaWRcbn1cblxuY29uc3QgZmxhdHRlbk9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IChPcHRpb24gfCBPcHRpb25TdWJ0cmVlKVtdLFxuKTogKE9wdGlvbiB8IE9wdGlvbkhlYWRlcilbXSA9PlxuICBvcHRpb25zLmZsYXRNYXAob3B0aW9uID0+IHtcbiAgICBpZiAoJ29wdGlvbnMnIGluIG9wdGlvbikge1xuICAgICAgY29uc3QgZmxhdFN1YnRyZWUgPSBmbGF0dGVuT3B0aW9ucyhvcHRpb24ub3B0aW9ucylcbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlcyA9IGZsYXRTdWJ0cmVlLmZsYXRNYXAobyA9PlxuICAgICAgICAndmFsdWUnIGluIG8gPyBvLnZhbHVlIDogW10sXG4gICAgICApXG4gICAgICBjb25zdCBoZWFkZXIgPVxuICAgICAgICBvcHRpb24uaGVhZGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IFt7IGhlYWRlcjogb3B0aW9uLmhlYWRlciwgb3B0aW9uVmFsdWVzIH1dXG4gICAgICAgICAgOiBbXVxuXG4gICAgICByZXR1cm4gWy4uLmhlYWRlciwgLi4uZmxhdFN1YnRyZWVdXG4gICAgfVxuICAgIHJldHVybiBvcHRpb25cbiAgfSlcblxuY29uc3QgY3JlYXRlRGVmYXVsdFN0YXRlID0gKHtcbiAgdmlzaWJsZU9wdGlvbkNvdW50OiBjdXN0b21WaXNpYmxlT3B0aW9uQ291bnQsXG4gIGRlZmF1bHRWYWx1ZSxcbiAgb3B0aW9ucyxcbn06IFBpY2s8XG4gIFVzZVNlbGVjdFN0YXRlUHJvcHMsXG4gICd2aXNpYmxlT3B0aW9uQ291bnQnIHwgJ2RlZmF1bHRWYWx1ZScgfCAnb3B0aW9ucydcbj4pID0+IHtcbiAgY29uc3QgZmxhdE9wdGlvbnMgPSBmbGF0dGVuT3B0aW9ucyhvcHRpb25zKVxuXG4gIGNvbnN0IHZpc2libGVPcHRpb25Db3VudCA9XG4gICAgdHlwZW9mIGN1c3RvbVZpc2libGVPcHRpb25Db3VudCA9PT0gJ251bWJlcidcbiAgICAgID8gTWF0aC5taW4oY3VzdG9tVmlzaWJsZU9wdGlvbkNvdW50LCBmbGF0T3B0aW9ucy5sZW5ndGgpXG4gICAgICA6IGZsYXRPcHRpb25zLmxlbmd0aFxuXG4gIGNvbnN0IG9wdGlvbk1hcCA9IG5ldyBPcHRpb25NYXAoZmxhdE9wdGlvbnMpXG4gIGNvbnN0IGZpcnN0T3B0aW9uID0gb3B0aW9uTWFwLmZpcnN0XG4gIGNvbnN0IGZvY3VzZWRWYWx1ZSA9XG4gICAgZmlyc3RPcHRpb24gJiYgJ3ZhbHVlJyBpbiBmaXJzdE9wdGlvbiA/IGZpcnN0T3B0aW9uLnZhbHVlIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25NYXAsXG4gICAgdmlzaWJsZU9wdGlvbkNvdW50LFxuICAgIGZvY3VzZWRWYWx1ZSxcbiAgICB2aXNpYmxlRnJvbUluZGV4OiAwLFxuICAgIHZpc2libGVUb0luZGV4OiB2aXNpYmxlT3B0aW9uQ291bnQsXG4gICAgcHJldmlvdXNWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIHZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVNlbGVjdFN0YXRlID0gKHtcbiAgdmlzaWJsZU9wdGlvbkNvdW50ID0gNSxcbiAgb3B0aW9ucyxcbiAgZGVmYXVsdFZhbHVlLFxuICBvbkNoYW5nZSxcbiAgb25Gb2N1cyxcbiAgZm9jdXNWYWx1ZSxcbn06IFVzZVNlbGVjdFN0YXRlUHJvcHMpID0+IHtcbiAgY29uc3QgZmxhdE9wdGlvbnMgPSBmbGF0dGVuT3B0aW9ucyhvcHRpb25zKVxuXG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihcbiAgICByZWR1Y2VyLFxuICAgIHsgdmlzaWJsZU9wdGlvbkNvdW50LCBkZWZhdWx0VmFsdWUsIG9wdGlvbnMgfSxcbiAgICBjcmVhdGVEZWZhdWx0U3RhdGUsXG4gIClcblxuICBjb25zdCBbbGFzdE9wdGlvbnMsIHNldExhc3RPcHRpb25zXSA9IHVzZVN0YXRlKGZsYXRPcHRpb25zKVxuXG4gIGlmIChcbiAgICBmbGF0T3B0aW9ucyAhPT0gbGFzdE9wdGlvbnMgJiZcbiAgICAhaXNEZWVwU3RyaWN0RXF1YWwoZmxhdE9wdGlvbnMsIGxhc3RPcHRpb25zKVxuICApIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiAncmVzZXQnLFxuICAgICAgc3RhdGU6IGNyZWF0ZURlZmF1bHRTdGF0ZSh7IHZpc2libGVPcHRpb25Db3VudCwgZGVmYXVsdFZhbHVlLCBvcHRpb25zIH0pLFxuICAgIH0pXG5cbiAgICBzZXRMYXN0T3B0aW9ucyhmbGF0T3B0aW9ucylcbiAgfVxuXG4gIGNvbnN0IGZvY3VzTmV4dE9wdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnZm9jdXMtbmV4dC1vcHRpb24nLFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGZvY3VzUHJldmlvdXNPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ2ZvY3VzLXByZXZpb3VzLW9wdGlvbicsXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc2VsZWN0Rm9jdXNlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2VsZWN0LWZvY3VzZWQtb3B0aW9uJyxcbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBmbGF0T3B0aW9uc1xuICAgICAgLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKHtcbiAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICBpbmRleCxcbiAgICAgIH0pKVxuICAgICAgLnNsaWNlKHN0YXRlLnZpc2libGVGcm9tSW5kZXgsIHN0YXRlLnZpc2libGVUb0luZGV4KVxuICB9LCBbZmxhdE9wdGlvbnMsIHN0YXRlLnZpc2libGVGcm9tSW5kZXgsIHN0YXRlLnZpc2libGVUb0luZGV4XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS52YWx1ZSAmJiBzdGF0ZS5wcmV2aW91c1ZhbHVlICE9PSBzdGF0ZS52YWx1ZSkge1xuICAgICAgb25DaGFuZ2U/LihzdGF0ZS52YWx1ZSlcbiAgICB9XG4gIH0sIFtzdGF0ZS5wcmV2aW91c1ZhbHVlLCBzdGF0ZS52YWx1ZSwgb3B0aW9ucywgb25DaGFuZ2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLmZvY3VzZWRWYWx1ZSkge1xuICAgICAgb25Gb2N1cz8uKHN0YXRlLmZvY3VzZWRWYWx1ZSlcbiAgICB9XG4gIH0sIFtzdGF0ZS5mb2N1c2VkVmFsdWUsIG9uRm9jdXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmFsdWUpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3NldC1mb2N1cycsXG4gICAgICAgIHZhbHVlOiBmb2N1c1ZhbHVlLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtmb2N1c1ZhbHVlXSlcblxuICByZXR1cm4ge1xuICAgIGZvY3VzZWRWYWx1ZTogc3RhdGUuZm9jdXNlZFZhbHVlLFxuICAgIHZpc2libGVGcm9tSW5kZXg6IHN0YXRlLnZpc2libGVGcm9tSW5kZXgsXG4gICAgdmlzaWJsZVRvSW5kZXg6IHN0YXRlLnZpc2libGVUb0luZGV4LFxuICAgIHZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICB2aXNpYmxlT3B0aW9ucyxcbiAgICBmb2N1c05leHRPcHRpb24sXG4gICAgZm9jdXNQcmV2aW91c09wdGlvbixcbiAgICBzZWxlY3RGb2N1c2VkT3B0aW9uLFxuICB9XG59XG4iLAogICAgImltcG9ydCB7IHR5cGUgT3B0aW9uIH0gZnJvbSAnQGlua2pzL3VpJ1xuaW1wb3J0IHsgb3B0aW9uSGVhZGVyS2V5LCB0eXBlIE9wdGlvbkhlYWRlciB9IGZyb20gJy4vc2VsZWN0LmpzJ1xuXG50eXBlIE9wdGlvbk1hcEl0ZW0gPSAoT3B0aW9uIHwgT3B0aW9uSGVhZGVyKSAmIHtcbiAgcHJldmlvdXM6IE9wdGlvbk1hcEl0ZW0gfCB1bmRlZmluZWRcbiAgbmV4dDogT3B0aW9uTWFwSXRlbSB8IHVuZGVmaW5lZFxuICBpbmRleDogbnVtYmVyXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbk1hcCBleHRlbmRzIE1hcDxzdHJpbmcsIE9wdGlvbk1hcEl0ZW0+IHtcbiAgcmVhZG9ubHkgZmlyc3Q6IE9wdGlvbk1hcEl0ZW0gfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiAoT3B0aW9uIHwgT3B0aW9uSGVhZGVyKVtdKSB7XG4gICAgY29uc3QgaXRlbXM6IEFycmF5PFtzdHJpbmcsIE9wdGlvbk1hcEl0ZW1dPiA9IFtdXG4gICAgbGV0IGZpcnN0SXRlbTogT3B0aW9uTWFwSXRlbSB8IHVuZGVmaW5lZFxuICAgIGxldCBwcmV2aW91czogT3B0aW9uTWFwSXRlbSB8IHVuZGVmaW5lZFxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgcHJldmlvdXMsXG4gICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaW5kZXgsXG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBwcmV2aW91cy5uZXh0ID0gaXRlbVxuICAgICAgfVxuXG4gICAgICBmaXJzdEl0ZW0gfHw9IGl0ZW1cblxuICAgICAgY29uc3Qga2V5ID0gJ3ZhbHVlJyBpbiBvcHRpb24gPyBvcHRpb24udmFsdWUgOiBvcHRpb25IZWFkZXJLZXkob3B0aW9uKVxuICAgICAgaXRlbXMucHVzaChba2V5LCBpdGVtXSlcbiAgICAgIGluZGV4KytcbiAgICAgIHByZXZpb3VzID0gaXRlbVxuICAgIH1cblxuICAgIHN1cGVyKGl0ZW1zKVxuICAgIHRoaXMuZmlyc3QgPSBmaXJzdEl0ZW1cbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IHR5cGUgU2VsZWN0U3RhdGUgfSBmcm9tICcuL3VzZS1zZWxlY3Qtc3RhdGUuanMnXG5cbmV4cG9ydCB0eXBlIFVzZVNlbGVjdFByb3BzID0ge1xuICAvKipcbiAgICogV2hlbiBkaXNhYmxlZCwgdXNlciBpbnB1dCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cblxuICAvKipcbiAgICogU2VsZWN0IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU6IFNlbGVjdFN0YXRlXG59XG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3QgPSAoeyBpc0Rpc2FibGVkID0gZmFsc2UsIHN0YXRlIH06IFVzZVNlbGVjdFByb3BzKSA9PiB7XG4gIHVzZUlucHV0KFxuICAgIChfaW5wdXQsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgc3RhdGUuZm9jdXNOZXh0T3B0aW9uKClcbiAgICAgIH1cblxuICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgIHN0YXRlLmZvY3VzUHJldmlvdXNPcHRpb24oKVxuICAgICAgfVxuXG4gICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICBzdGF0ZS5zZWxlY3RGb2N1c2VkT3B0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgaXNBY3RpdmU6ICFpc0Rpc2FibGVkIH0sXG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRyYW5zZm9ybSwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHRlcm1pbmFsTGluayBmcm9tICd0ZXJtaW5hbC1saW5rJztcbi8qIGVzbGludC1lbmFibGUgcmVhY3QvYm9vbGVhbi1wcm9wLW5hbWluZyAqL1xuLyoqXG5BbiBJbmsgY29tcG9uZW50IHRoYXQgY3JlYXRlcyBjbGlja2FibGUgbGlua3MgaW4gdGhlIHRlcm1pbmFsLlxuXG5bU3VwcG9ydGVkIHRlcm1pbmFscy5dKGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2VnbW9udGtvYi9lYjExNDI5NGVmYmNkNWFkYjE5NDRjOWYzY2I1ZmVkYSlcblxuRm9yIHVuc3VwcG9ydGVkIHRlcm1pbmFscywgdGhlIGxpbmsgd2lsbCBiZSBwcmludGVkIGluIHBhcmVucyBhZnRlciB0aGUgdGV4dDogYE15IHdlYnNpdGUgKGh0dHBzOi8vc2luZHJlc29yaHVzLmNvbSlgLlxuXG5AZXhhbXBsZVxuYGBgXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtyZW5kZXIsIENvbG9yfSBmcm9tICdpbmsnO1xuaW1wb3J0IExpbmsgZnJvbSAnaW5rLWxpbmsnO1xuXG5yZW5kZXIoXG4gICAgPExpbmsgdXJsPVwiaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tXCI+XG4gICAgICAgIE15IDxDb2xvciBjeWFuPldlYnNpdGU8L0NvbG9yPlxuICAgIDwvTGluaz5cbik7XG5gYGBcbiovXG5jb25zdCBMaW5rID0gKHsgY2hpbGRyZW4sIHVybCwgZmFsbGJhY2sgPSB0cnVlIH0pID0+ICggLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2Zvcm0sIHsgdHJhbnNmb3JtOiBjaGlsZHJlbiA9PiB0ZXJtaW5hbExpbmsoY2hpbGRyZW4sIHVybCwgeyBmYWxsYmFjayB9KSB9LFxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgY2hpbGRyZW4pKSk7XG5MaW5rLnByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSxcbiAgICAgICAgUHJvcFR5cGVzLm5vZGUsXG4gICAgXSkuaXNSZXF1aXJlZCxcbiAgICB1cmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBmYWxsYmFjazogUHJvcFR5cGVzLmJvb2wsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QvYm9vbGVhbi1wcm9wLW5hbWluZ1xufTtcbmV4cG9ydCBkZWZhdWx0IExpbms7XG4iLAogICAgImNvbnN0IEVTQyA9ICdcXHUwMDFCWyc7XG5jb25zdCBPU0MgPSAnXFx1MDAxQl0nO1xuY29uc3QgQkVMID0gJ1xcdTAwMDcnO1xuY29uc3QgU0VQID0gJzsnO1xuY29uc3QgaXNUZXJtaW5hbEFwcCA9IHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTSA9PT0gJ0FwcGxlX1Rlcm1pbmFsJztcblxuY29uc3QgYW5zaUVzY2FwZXMgPSB7fTtcblxuYW5zaUVzY2FwZXMuY3Vyc29yVG8gPSAoeCwgeSkgPT4ge1xuXHRpZiAodHlwZW9mIHggIT09ICdudW1iZXInKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGB4YCBhcmd1bWVudCBpcyByZXF1aXJlZCcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB5ICE9PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBFU0MgKyAoeCArIDEpICsgJ0cnO1xuXHR9XG5cblx0cmV0dXJuIEVTQyArICh5ICsgMSkgKyAnOycgKyAoeCArIDEpICsgJ0gnO1xufTtcblxuYW5zaUVzY2FwZXMuY3Vyc29yTW92ZSA9ICh4LCB5KSA9PiB7XG5cdGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYHhgIGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblxuXHRpZiAoeCA8IDApIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBFU0MgKyAoLXgpICsgJ0QnO1xuXHR9IGVsc2UgaWYgKHggPiAwKSB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gRVNDICsgeCArICdDJztcblx0fVxuXG5cdGlmICh5IDwgMCkge1xuXHRcdHJldHVyblZhbHVlICs9IEVTQyArICgteSkgKyAnQSc7XG5cdH0gZWxzZSBpZiAoeSA+IDApIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBFU0MgKyB5ICsgJ0InO1xuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuYW5zaUVzY2FwZXMuY3Vyc29yVXAgPSAoY291bnQgPSAxKSA9PiBFU0MgKyBjb3VudCArICdBJztcbmFuc2lFc2NhcGVzLmN1cnNvckRvd24gPSAoY291bnQgPSAxKSA9PiBFU0MgKyBjb3VudCArICdCJztcbmFuc2lFc2NhcGVzLmN1cnNvckZvcndhcmQgPSAoY291bnQgPSAxKSA9PiBFU0MgKyBjb3VudCArICdDJztcbmFuc2lFc2NhcGVzLmN1cnNvckJhY2t3YXJkID0gKGNvdW50ID0gMSkgPT4gRVNDICsgY291bnQgKyAnRCc7XG5cbmFuc2lFc2NhcGVzLmN1cnNvckxlZnQgPSBFU0MgKyAnRyc7XG5hbnNpRXNjYXBlcy5jdXJzb3JTYXZlUG9zaXRpb24gPSBpc1Rlcm1pbmFsQXBwID8gJ1xcdTAwMUI3JyA6IEVTQyArICdzJztcbmFuc2lFc2NhcGVzLmN1cnNvclJlc3RvcmVQb3NpdGlvbiA9IGlzVGVybWluYWxBcHAgPyAnXFx1MDAxQjgnIDogRVNDICsgJ3UnO1xuYW5zaUVzY2FwZXMuY3Vyc29yR2V0UG9zaXRpb24gPSBFU0MgKyAnNm4nO1xuYW5zaUVzY2FwZXMuY3Vyc29yTmV4dExpbmUgPSBFU0MgKyAnRSc7XG5hbnNpRXNjYXBlcy5jdXJzb3JQcmV2TGluZSA9IEVTQyArICdGJztcbmFuc2lFc2NhcGVzLmN1cnNvckhpZGUgPSBFU0MgKyAnPzI1bCc7XG5hbnNpRXNjYXBlcy5jdXJzb3JTaG93ID0gRVNDICsgJz8yNWgnO1xuXG5hbnNpRXNjYXBlcy5lcmFzZUxpbmVzID0gY291bnQgPT4ge1xuXHRsZXQgY2xlYXIgPSAnJztcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRjbGVhciArPSBhbnNpRXNjYXBlcy5lcmFzZUxpbmUgKyAoaSA8IGNvdW50IC0gMSA/IGFuc2lFc2NhcGVzLmN1cnNvclVwKCkgOiAnJyk7XG5cdH1cblxuXHRpZiAoY291bnQpIHtcblx0XHRjbGVhciArPSBhbnNpRXNjYXBlcy5jdXJzb3JMZWZ0O1xuXHR9XG5cblx0cmV0dXJuIGNsZWFyO1xufTtcblxuYW5zaUVzY2FwZXMuZXJhc2VFbmRMaW5lID0gRVNDICsgJ0snO1xuYW5zaUVzY2FwZXMuZXJhc2VTdGFydExpbmUgPSBFU0MgKyAnMUsnO1xuYW5zaUVzY2FwZXMuZXJhc2VMaW5lID0gRVNDICsgJzJLJztcbmFuc2lFc2NhcGVzLmVyYXNlRG93biA9IEVTQyArICdKJztcbmFuc2lFc2NhcGVzLmVyYXNlVXAgPSBFU0MgKyAnMUonO1xuYW5zaUVzY2FwZXMuZXJhc2VTY3JlZW4gPSBFU0MgKyAnMkonO1xuYW5zaUVzY2FwZXMuc2Nyb2xsVXAgPSBFU0MgKyAnUyc7XG5hbnNpRXNjYXBlcy5zY3JvbGxEb3duID0gRVNDICsgJ1QnO1xuXG5hbnNpRXNjYXBlcy5jbGVhclNjcmVlbiA9ICdcXHUwMDFCYyc7XG5cbmFuc2lFc2NhcGVzLmNsZWFyVGVybWluYWwgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID9cblx0YCR7YW5zaUVzY2FwZXMuZXJhc2VTY3JlZW59JHtFU0N9MGZgIDpcblx0Ly8gMS4gRXJhc2VzIHRoZSBzY3JlZW4gKE9ubHkgZG9uZSBpbiBjYXNlIGAyYCBpcyBub3Qgc3VwcG9ydGVkKVxuXHQvLyAyLiBFcmFzZXMgdGhlIHdob2xlIHNjcmVlbiBpbmNsdWRpbmcgc2Nyb2xsYmFjayBidWZmZXJcblx0Ly8gMy4gTW92ZXMgY3Vyc29yIHRvIHRoZSB0b3AtbGVmdCBwb3NpdGlvblxuXHQvLyBNb3JlIGluZm86IGh0dHBzOi8vd3d3LnJlYWwtd29ybGQtc3lzdGVtcy5jb20vZG9jcy9BTlNJY29kZS5odG1sXG5cdGAke2Fuc2lFc2NhcGVzLmVyYXNlU2NyZWVufSR7RVNDfTNKJHtFU0N9SGA7XG5cbmFuc2lFc2NhcGVzLmJlZXAgPSBCRUw7XG5cbmFuc2lFc2NhcGVzLmxpbmsgPSAodGV4dCwgdXJsKSA9PiB7XG5cdHJldHVybiBbXG5cdFx0T1NDLFxuXHRcdCc4Jyxcblx0XHRTRVAsXG5cdFx0U0VQLFxuXHRcdHVybCxcblx0XHRCRUwsXG5cdFx0dGV4dCxcblx0XHRPU0MsXG5cdFx0JzgnLFxuXHRcdFNFUCxcblx0XHRTRVAsXG5cdFx0QkVMXG5cdF0uam9pbignJyk7XG59O1xuXG5hbnNpRXNjYXBlcy5pbWFnZSA9IChidWZmZXIsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRsZXQgcmV0dXJuVmFsdWUgPSBgJHtPU0N9MTMzNztGaWxlPWlubGluZT0xYDtcblxuXHRpZiAob3B0aW9ucy53aWR0aCkge1xuXHRcdHJldHVyblZhbHVlICs9IGA7d2lkdGg9JHtvcHRpb25zLndpZHRofWA7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5oZWlnaHQpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBgO2hlaWdodD0ke29wdGlvbnMuaGVpZ2h0fWA7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvID09PSBmYWxzZSkge1xuXHRcdHJldHVyblZhbHVlICs9ICc7cHJlc2VydmVBc3BlY3RSYXRpbz0wJztcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZSArICc6JyArIGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JykgKyBCRUw7XG59O1xuXG5hbnNpRXNjYXBlcy5pVGVybSA9IHtcblx0c2V0Q3dkOiAoY3dkID0gcHJvY2Vzcy5jd2QoKSkgPT4gYCR7T1NDfTUwO0N1cnJlbnREaXI9JHtjd2R9JHtCRUx9YCxcblxuXHRhbm5vdGF0aW9uOiAobWVzc2FnZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdFx0bGV0IHJldHVyblZhbHVlID0gYCR7T1NDfTEzMzc7YDtcblxuXHRcdGNvbnN0IGhhc1ggPSB0eXBlb2Ygb3B0aW9ucy54ICE9PSAndW5kZWZpbmVkJztcblx0XHRjb25zdCBoYXNZID0gdHlwZW9mIG9wdGlvbnMueSAhPT0gJ3VuZGVmaW5lZCc7XG5cdFx0aWYgKChoYXNYIHx8IGhhc1kpICYmICEoaGFzWCAmJiBoYXNZICYmIHR5cGVvZiBvcHRpb25zLmxlbmd0aCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2B4YCwgYHlgIGFuZCBgbGVuZ3RoYCBtdXN0IGJlIGRlZmluZWQgd2hlbiBgeGAgb3IgYHlgIGlzIGRlZmluZWQnKTtcblx0XHR9XG5cblx0XHRtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXHwvZywgJycpO1xuXG5cdFx0cmV0dXJuVmFsdWUgKz0gb3B0aW9ucy5pc0hpZGRlbiA/ICdBZGRIaWRkZW5Bbm5vdGF0aW9uPScgOiAnQWRkQW5ub3RhdGlvbj0nO1xuXG5cdFx0aWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuVmFsdWUgKz1cblx0XHRcdFx0XHQoaGFzWCA/XG5cdFx0XHRcdFx0XHRbbWVzc2FnZSwgb3B0aW9ucy5sZW5ndGgsIG9wdGlvbnMueCwgb3B0aW9ucy55XSA6XG5cdFx0XHRcdFx0XHRbb3B0aW9ucy5sZW5ndGgsIG1lc3NhZ2VdKS5qb2luKCd8Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVyblZhbHVlICs9IG1lc3NhZ2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldHVyblZhbHVlICsgQkVMO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpRXNjYXBlcztcbiIsCiAgICAiaW1wb3J0IGFuc2lFc2NhcGVzIGZyb20gJ2Fuc2ktZXNjYXBlcyc7XG5pbXBvcnQgc3VwcG9ydHNIeXBlcmxpbmtzIGZyb20gJ3N1cHBvcnRzLWh5cGVybGlua3MnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZXJtaW5hbExpbmsodGV4dCwgdXJsLCB7dGFyZ2V0ID0gJ3N0ZG91dCcsIC4uLm9wdGlvbnN9ID0ge30pIHtcblx0aWYgKCFzdXBwb3J0c0h5cGVybGlua3NbdGFyZ2V0XSkge1xuXHRcdC8vIElmIHRoZSBmYWxsYmFjayBoYXMgYmVlbiBleHBsaWNpdGx5IGRpc2FibGVkLCBkb24ndCBtb2RpZnkgdGhlIHRleHQgaXRzZWxmLlxuXHRcdGlmIChvcHRpb25zLmZhbGxiYWNrID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHR5cGVvZiBvcHRpb25zLmZhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5mYWxsYmFjayh0ZXh0LCB1cmwpIDogYCR7dGV4dH0gKFxcdTIwMEIke3VybH1cXHUyMDBCKWA7XG5cdH1cblxuXHRyZXR1cm4gYW5zaUVzY2FwZXMubGluayh0ZXh0LCB1cmwpO1xufVxuXG50ZXJtaW5hbExpbmsuaXNTdXBwb3J0ZWQgPSBzdXBwb3J0c0h5cGVybGlua3Muc3Rkb3V0O1xudGVybWluYWxMaW5rLnN0ZGVyciA9ICh0ZXh0LCB1cmwsIG9wdGlvbnMgPSB7fSkgPT4gdGVybWluYWxMaW5rKHRleHQsIHVybCwge3RhcmdldDogJ3N0ZGVycicsIC4uLm9wdGlvbnN9KTtcbnRlcm1pbmFsTGluay5zdGRlcnIuaXNTdXBwb3J0ZWQgPSBzdXBwb3J0c0h5cGVybGlua3Muc3RkZXJyO1xuIiwKICAgICJpbXBvcnQgSW5rTGluayBmcm9tICdpbmstbGluaydcbmltcG9ydCB7IFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi91dGlscy9lbnYuanMnXG5cbnR5cGUgTGlua1Byb3BzID0ge1xuICB1cmw6IHN0cmluZ1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG4vLyBUZXJtaW5hbHMgdGhhdCBzdXBwb3J0IGh5cGVybGlua3NcbmNvbnN0IExJTktfU1VQUE9SVElOR19URVJNSU5BTFMgPSBbJ2lUZXJtLmFwcCcsICdXZXpUZXJtJywgJ0h5cGVyJywgJ1ZTQ29kZSddXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExpbmsoeyB1cmwsIGNoaWxkcmVuIH06IExpbmtQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHN1cHBvcnRzTGlua3MgPSBMSU5LX1NVUFBPUlRJTkdfVEVSTUlOQUxTLmluY2x1ZGVzKGVudi50ZXJtaW5hbCA/PyAnJylcblxuICAvLyBEZXRlcm1pbmUgd2hhdCB0ZXh0IHRvIGRpc3BsYXkgLSB1c2UgY2hpbGRyZW4gb3IgZmFsbCBiYWNrIHRvIHRoZSBVUkwgaXRzZWxmXG4gIGNvbnN0IGRpc3BsYXlDb250ZW50ID0gY2hpbGRyZW4gfHwgdXJsXG5cbiAgLy8gVXNlIElua0xpbmsgdG8gZ2V0IGNsaWNrYWJsZSBsaW5rcyB3aGVuIHdlIGNhbiwgb3IgdG8gZ2V0IGEgbmljZSBmYWxsYmFjayB3aGVuIHdlIGNhbid0XG4gIGlmIChzdXBwb3J0c0xpbmtzIHx8IGRpc3BsYXlDb250ZW50ICE9PSB1cmwpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPElua0xpbmsgdXJsPXt1cmx9PlxuICAgICAgICA8VGV4dD57ZGlzcGxheUNvbnRlbnR9PC9UZXh0PlxuICAgICAgPC9JbmtMaW5rPlxuICAgIClcbiAgfSBlbHNlIHtcbiAgICAvLyBCdXQgaWYgd2UgZG9uJ3QgaGF2ZSBhIHRpdGxlIGFuZCBqdXN0IGhhdmUgYSB1cmwgKmFuZCogYXJlIG5vdCBhIHRlcm1pbmFsIHRoYXQgc3VwcG9ydHMgbGlua3NcbiAgICAvLyB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBjbGlja2FibGUgbGlua3MgYW55d2F5LCBqdXN0IHNob3cgdGhlIFVSTFxuICAgIHJldHVybiA8VGV4dCB1bmRlcmxpbmU+e2Rpc3BsYXlDb250ZW50fTwvVGV4dD5cbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyBUb29sVXNlQmxvY2tQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBCb3gsIE5ld2xpbmUsIFN0YXRpYyB9IGZyb20gJ2luaydcbmltcG9ydCBQcm9qZWN0T25ib2FyZGluZywge1xuICBtYXJrUHJvamVjdE9uYm9hcmRpbmdDb21wbGV0ZSxcbn0gZnJvbSAnLi4vUHJvamVjdE9uYm9hcmRpbmcuanMnXG5pbXBvcnQgeyBDb3N0VGhyZXNob2xkRGlhbG9nIH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db3N0VGhyZXNob2xkRGlhbG9nLmpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBMb2dvIH0gZnJvbSAnLi4vY29tcG9uZW50cy9Mb2dvLmpzJ1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvTWVzc2FnZS5qcydcbmltcG9ydCB7IE1lc3NhZ2VSZXNwb25zZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvTWVzc2FnZVJlc3BvbnNlLmpzJ1xuaW1wb3J0IHsgTWVzc2FnZVNlbGVjdG9yIH0gZnJvbSAnLi4vY29tcG9uZW50cy9NZXNzYWdlU2VsZWN0b3IuanMnXG5pbXBvcnQge1xuICBQZXJtaXNzaW9uUmVxdWVzdCxcbiAgVG9vbFVzZUNvbmZpcm0sXG59IGZyb20gJy4uL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvUGVybWlzc2lvblJlcXVlc3QuanMnXG5pbXBvcnQgUHJvbXB0SW5wdXQgZnJvbSAnLi4vY29tcG9uZW50cy9Qcm9tcHRJbnB1dC5qcydcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL1NwaW5uZXIuanMnXG5pbXBvcnQgeyBnZXRTeXN0ZW1Qcm9tcHQgfSBmcm9tICcuLi9jb25zdGFudHMvcHJvbXB0cy5qcydcbmltcG9ydCB7IGdldENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0VG90YWxDb3N0LCB1c2VDb3N0U3VtbWFyeSB9IGZyb20gJy4uL2Nvc3QtdHJhY2tlci5qcydcbmltcG9ydCB7IHVzZUxvZ1N0YXJ0dXBUaW1lIH0gZnJvbSAnLi4vaG9va3MvdXNlTG9nU3RhcnR1cFRpbWUuanMnXG5pbXBvcnQgeyBhZGRUb0hpc3RvcnkgfSBmcm9tICcuLi9oaXN0b3J5LmpzJ1xuaW1wb3J0IHsgdXNlQXBpS2V5VmVyaWZpY2F0aW9uIH0gZnJvbSAnLi4vaG9va3MvdXNlQXBpS2V5VmVyaWZpY2F0aW9uLmpzJ1xuaW1wb3J0IHsgdXNlQ2FuY2VsUmVxdWVzdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNhbmNlbFJlcXVlc3QuanMnXG5pbXBvcnQgdXNlQ2FuVXNlVG9vbCBmcm9tICcuLi9ob29rcy91c2VDYW5Vc2VUb29sLmpzJ1xuaW1wb3J0IHsgdXNlTG9nTWVzc2FnZXMgfSBmcm9tICcuLi9ob29rcy91c2VMb2dNZXNzYWdlcy5qcydcbmltcG9ydCB7IHNldE1lc3NhZ2VzR2V0dGVyLCBzZXRNZXNzYWdlc1NldHRlciB9IGZyb20gJy4uL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHtcbiAgQXNzaXN0YW50TWVzc2FnZSxcbiAgQmluYXJ5RmVlZGJhY2tSZXN1bHQsXG4gIE1lc3NhZ2UgYXMgTWVzc2FnZVR5cGUsXG4gIFByb2dyZXNzTWVzc2FnZSxcbiAgcXVlcnksXG59IGZyb20gJy4uL3F1ZXJ5LmpzJ1xuaW1wb3J0IHR5cGUgeyBXcmFwcGVkQ2xpZW50IH0gZnJvbSAnLi4vc2VydmljZXMvbWNwQ2xpZW50LmpzJ1xuaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSAnLi4vVG9vbC5qcydcbmltcG9ydCB7IEF1dG9VcGRhdGVyUmVzdWx0IH0gZnJvbSAnLi4vdXRpbHMvYXV0b1VwZGF0ZXIuanMnXG5pbXBvcnQgeyBnZXRHbG9iYWxDb25maWcsIHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5pbXBvcnQgeyBnZXROZXh0QXZhaWxhYmxlTG9nRm9ya051bWJlciB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7XG4gIGdldEVycm9yZWRUb29sVXNlTWVzc2FnZXMsXG4gIGdldEluUHJvZ3Jlc3NUb29sVXNlSURzLFxuICBnZXRMYXN0QXNzaXN0YW50TWVzc2FnZUlkLFxuICBnZXRUb29sVXNlSUQsXG4gIGdldFVucmVzb2x2ZWRUb29sVXNlSURzLFxuICBJTlRFUlJVUFRfTUVTU0FHRSxcbiAgaXNOb3RFbXB0eU1lc3NhZ2UsXG4gIHR5cGUgTm9ybWFsaXplZE1lc3NhZ2UsXG4gIG5vcm1hbGl6ZU1lc3NhZ2VzLFxuICBub3JtYWxpemVNZXNzYWdlc0ZvckFQSSxcbiAgcHJvY2Vzc1VzZXJJbnB1dCxcbiAgcmVvcmRlck1lc3NhZ2VzLFxufSBmcm9tICcuLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC5qcydcbmltcG9ydCB7IGNsZWFyVGVybWluYWwsIHVwZGF0ZVRlcm1pbmFsVGl0bGUgfSBmcm9tICcuLi91dGlscy90ZXJtaW5hbC5qcydcbmltcG9ydCB7IEJpbmFyeUZlZWRiYWNrIH0gZnJvbSAnLi4vY29tcG9uZW50cy9iaW5hcnktZmVlZGJhY2svQmluYXJ5RmVlZGJhY2suanMnXG5pbXBvcnQgeyBnZXRNYXhUaGlua2luZ1Rva2VucyB9IGZyb20gJy4uL3V0aWxzL3RoaW5raW5nLmpzJ1xuaW1wb3J0IHsgZ2V0T3JpZ2luYWxDd2QgfSBmcm9tICcuLi91dGlscy9zdGF0ZS5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgY29tbWFuZHM6IENvbW1hbmRbXVxuICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucz86IGJvb2xlYW5cbiAgZGVidWc/OiBib29sZWFuXG4gIGluaXRpYWxGb3JrTnVtYmVyPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGluaXRpYWxQcm9tcHQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvLyBBIHVuaXF1ZSBuYW1lIGZvciB0aGUgbWVzc2FnZSBsb2cgZmlsZSwgdXNlZCB0byBpZGVudGlmeSB0aGUgZm9ya1xuICBtZXNzYWdlTG9nTmFtZTogc3RyaW5nXG4gIHNob3VsZFNob3dQcm9tcHRJbnB1dDogYm9vbGVhblxuICB0b29sczogVG9vbFtdXG4gIHZlcmJvc2U6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLy8gSW5pdGlhbCBtZXNzYWdlcyB0byBwb3B1bGF0ZSB0aGUgUkVQTCB3aXRoXG4gIGluaXRpYWxNZXNzYWdlcz86IE1lc3NhZ2VUeXBlW11cbiAgLy8gTUNQIGNsaWVudHNcbiAgbWNwQ2xpZW50cz86IFdyYXBwZWRDbGllbnRbXVxuICAvLyBGbGFnIHRvIGluZGljYXRlIGlmIGN1cnJlbnQgbW9kZWwgaXMgZGVmYXVsdFxuICBpc0RlZmF1bHRNb2RlbD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgQmluYXJ5RmVlZGJhY2tDb250ZXh0ID0ge1xuICBtMTogQXNzaXN0YW50TWVzc2FnZVxuICBtMjogQXNzaXN0YW50TWVzc2FnZVxuICByZXNvbHZlOiAocmVzdWx0OiBCaW5hcnlGZWVkYmFja1Jlc3VsdCkgPT4gdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUkVQTCh7XG4gIGNvbW1hbmRzLFxuICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucyxcbiAgZGVidWcgPSBmYWxzZSxcbiAgaW5pdGlhbEZvcmtOdW1iZXIgPSAwLFxuICBpbml0aWFsUHJvbXB0LFxuICBtZXNzYWdlTG9nTmFtZSxcbiAgc2hvdWxkU2hvd1Byb21wdElucHV0LFxuICB0b29scyxcbiAgdmVyYm9zZTogdmVyYm9zZUZyb21DTEksXG4gIGluaXRpYWxNZXNzYWdlcyxcbiAgbWNwQ2xpZW50cyA9IFtdLFxuICBpc0RlZmF1bHRNb2RlbCA9IHRydWUsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIFRPRE86IHByb2JhYmx5IHNob3VsZG4ndCByZS1yZWFkIGNvbmZpZyBmcm9tIGZpbGUgc3luY2hyb25vdXNseSBvbiBldmVyeSBrZXlzdHJva2VcbiAgY29uc3QgdmVyYm9zZSA9IHZlcmJvc2VGcm9tQ0xJID8/IGdldEdsb2JhbENvbmZpZygpLnZlcmJvc2VcblxuICAvLyBVc2VkIHRvIGZvcmNlIHRoZSBsb2dvIHRvIHJlLXJlbmRlciBhbmQgY29udmVyc2F0aW9uIGxvZyB0byB1c2UgYSBuZXcgZmlsZVxuICBjb25zdCBbZm9ya051bWJlciwgc2V0Rm9ya051bWJlcl0gPSB1c2VTdGF0ZShcbiAgICBnZXROZXh0QXZhaWxhYmxlTG9nRm9ya051bWJlcihtZXNzYWdlTG9nTmFtZSwgaW5pdGlhbEZvcmtOdW1iZXIsIDApLFxuICApXG5cbiAgY29uc3QgW1xuICAgIGZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcixcbiAgICBzZXRGb3JrQ29udm9XaXRoTWVzc2FnZXNPblRoZU5leHRSZW5kZXIsXG4gIF0gPSB1c2VTdGF0ZTxNZXNzYWdlVHlwZVtdIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBbYWJvcnRDb250cm9sbGVyLCBzZXRBYm9ydENvbnRyb2xsZXJdID1cbiAgICB1c2VTdGF0ZTxBYm9ydENvbnRyb2xsZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFthdXRvVXBkYXRlclJlc3VsdCwgc2V0QXV0b1VwZGF0ZXJSZXN1bHRdID1cbiAgICB1c2VTdGF0ZTxBdXRvVXBkYXRlclJlc3VsdCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFt0b29sSlNYLCBzZXRUb29sSlNYXSA9IHVzZVN0YXRlPHtcbiAgICBqc3g6IFJlYWN0LlJlYWN0Tm9kZSB8IG51bGxcbiAgICBzaG91bGRIaWRlUHJvbXB0SW5wdXQ6IGJvb2xlYW5cbiAgfSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFt0b29sVXNlQ29uZmlybSwgc2V0VG9vbFVzZUNvbmZpcm1dID0gdXNlU3RhdGU8VG9vbFVzZUNvbmZpcm0gfCBudWxsPihcbiAgICBudWxsLFxuICApXG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlU3RhdGU8TWVzc2FnZVR5cGVbXT4oaW5pdGlhbE1lc3NhZ2VzID8/IFtdKVxuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW2lucHV0TW9kZSwgc2V0SW5wdXRNb2RlXSA9IHVzZVN0YXRlPCdiYXNoJyB8ICdwcm9tcHQnPigncHJvbXB0JylcbiAgY29uc3QgW3N1Ym1pdENvdW50LCBzZXRTdWJtaXRDb3VudF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbaXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlLCBzZXRJc01lc3NhZ2VTZWxlY3RvclZpc2libGVdID1cbiAgICB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dDb3N0RGlhbG9nLCBzZXRTaG93Q29zdERpYWxvZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhdmVTaG93bkNvc3REaWFsb2csIHNldEhhdmVTaG93bkNvc3REaWFsb2ddID0gdXNlU3RhdGUoXG4gICAgZ2V0R2xvYmFsQ29uZmlnKCkuaGFzQWNrbm93bGVkZ2VkQ29zdFRocmVzaG9sZCxcbiAgKVxuXG4gIGNvbnN0IFtiaW5hcnlGZWVkYmFja0NvbnRleHQsIHNldEJpbmFyeUZlZWRiYWNrQ29udGV4dF0gPVxuICAgIHVzZVN0YXRlPEJpbmFyeUZlZWRiYWNrQ29udGV4dCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgZ2V0QmluYXJ5RmVlZGJhY2tSZXNwb25zZSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG0xOiBBc3Npc3RhbnRNZXNzYWdlLFxuICAgICAgbTI6IEFzc2lzdGFudE1lc3NhZ2UsXG4gICAgKTogUHJvbWlzZTxCaW5hcnlGZWVkYmFja1Jlc3VsdD4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEJpbmFyeUZlZWRiYWNrUmVzdWx0PihyZXNvbHZlUHJvbWlzZSA9PiB7XG4gICAgICAgIHNldEJpbmFyeUZlZWRiYWNrQ29udGV4dCh7XG4gICAgICAgICAgbTEsXG4gICAgICAgICAgbTIsXG4gICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZVByb21pc2UsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sXG4gICAgW10sXG4gIClcblxuICBjb25zdCByZWFkRmlsZVRpbWVzdGFtcHMgPSB1c2VSZWY8e1xuICAgIFtmaWxlbmFtZTogc3RyaW5nXTogbnVtYmVyXG4gIH0+KHt9KVxuXG4gIGNvbnN0IHsgc3RhdHVzOiBhcGlLZXlTdGF0dXMsIHJldmVyaWZ5IH0gPSB1c2VBcGlLZXlWZXJpZmljYXRpb24oKVxuICBmdW5jdGlvbiBvbkNhbmNlbCgpIHtcbiAgICBpZiAoIWlzTG9hZGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICBpZiAodG9vbFVzZUNvbmZpcm0pIHtcbiAgICAgIC8vIFRvb2wgdXNlIGNvbmZpcm0gaGFuZGxlcyB0aGUgYWJvcnQgc2lnbmFsIGl0c2VsZlxuICAgICAgdG9vbFVzZUNvbmZpcm0ub25BYm9ydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFib3J0Q29udHJvbGxlcj8uYWJvcnQoKVxuICAgIH1cbiAgfVxuXG4gIHVzZUNhbmNlbFJlcXVlc3QoXG4gICAgc2V0VG9vbEpTWCxcbiAgICBzZXRUb29sVXNlQ29uZmlybSxcbiAgICBzZXRCaW5hcnlGZWVkYmFja0NvbnRleHQsXG4gICAgb25DYW5jZWwsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzTWVzc2FnZVNlbGVjdG9yVmlzaWJsZSxcbiAgICBhYm9ydENvbnRyb2xsZXI/LnNpZ25hbCxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcikge1xuICAgICAgc2V0Rm9ya051bWJlcihfID0+IF8gKyAxKVxuICAgICAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyKG51bGwpXG4gICAgICBzZXRNZXNzYWdlcyhmb3JrQ29udm9XaXRoTWVzc2FnZXNPblRoZU5leHRSZW5kZXIpXG4gICAgfVxuICB9LCBbZm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRvdGFsQ29zdCA9IGdldFRvdGFsQ29zdCgpXG4gICAgaWYgKHRvdGFsQ29zdCA+PSA1IC8qICQ1ICovICYmICFzaG93Q29zdERpYWxvZyAmJiAhaGF2ZVNob3duQ29zdERpYWxvZykge1xuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2Nvc3RfdGhyZXNob2xkX3JlYWNoZWQnLCB7fSlcbiAgICAgIHNldFNob3dDb3N0RGlhbG9nKHRydWUpXG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIHNob3dDb3N0RGlhbG9nLCBoYXZlU2hvd25Db3N0RGlhbG9nXSlcblxuICBjb25zdCBjYW5Vc2VUb29sID0gdXNlQ2FuVXNlVG9vbChzZXRUb29sVXNlQ29uZmlybSlcblxuICBhc3luYyBmdW5jdGlvbiBvbkluaXQoKSB7XG4gICAgcmV2ZXJpZnkoKVxuXG4gICAgaWYgKCFpbml0aWFsUHJvbXB0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHNldEFib3J0Q29udHJvbGxlcihhYm9ydENvbnRyb2xsZXIpXG5cbiAgICBjb25zdCBtb2RlbCA9IGF3YWl0IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKVxuICAgIGNvbnN0IG5ld01lc3NhZ2VzID0gYXdhaXQgcHJvY2Vzc1VzZXJJbnB1dChcbiAgICAgIGluaXRpYWxQcm9tcHQsXG4gICAgICAncHJvbXB0JyxcbiAgICAgIHNldFRvb2xKU1gsXG4gICAgICB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgIGZvcmtOdW1iZXIsXG4gICAgICAgICAgbWVzc2FnZUxvZ05hbWUsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgICBzbG93QW5kQ2FwYWJsZU1vZGVsOiBtb2RlbCxcbiAgICAgICAgICBtYXhUaGlua2luZ1Rva2VuczogMCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBnZXRMYXN0QXNzaXN0YW50TWVzc2FnZUlkKG1lc3NhZ2VzKSxcbiAgICAgICAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyLFxuICAgICAgICByZWFkRmlsZVRpbWVzdGFtcHM6IHJlYWRGaWxlVGltZXN0YW1wcy5jdXJyZW50LFxuICAgICAgfSxcbiAgICAgIG51bGwsXG4gICAgKVxuXG4gICAgaWYgKG5ld01lc3NhZ2VzLmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG5ld01lc3NhZ2VzKSB7XG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICd1c2VyJykge1xuICAgICAgICAgIGFkZFRvSGlzdG9yeShpbml0aWFsUHJvbXB0KVxuICAgICAgICAgIC8vIFRPRE86IHNldEhpc3RvcnlJbmRleFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRNZXNzYWdlcyhfID0+IFsuLi5fLCAuLi5uZXdNZXNzYWdlc10pXG5cbiAgICAgIC8vIFRoZSBsYXN0IG1lc3NhZ2UgaXMgYW4gYXNzaXN0YW50IG1lc3NhZ2UgaWYgdGhlIHVzZXIgaW5wdXQgd2FzIGEgYmFzaCBjb21tYW5kLFxuICAgICAgLy8gb3IgaWYgdGhlIHVzZXIgaW5wdXQgd2FzIGFuIGludmFsaWQgc2xhc2ggY29tbWFuZC5cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbmV3TWVzc2FnZXNbbmV3TWVzc2FnZXMubGVuZ3RoIC0gMV0hXG4gICAgICBpZiAobGFzdE1lc3NhZ2UudHlwZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgc2V0QWJvcnRDb250cm9sbGVyKG51bGwpXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtzeXN0ZW1Qcm9tcHQsIGNvbnRleHQsIG1vZGVsLCBtYXhUaGlua2luZ1Rva2Vuc10gPVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZ2V0U3lzdGVtUHJvbXB0KCksXG4gICAgICAgICAgZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKSxcbiAgICAgICAgICBnZXRNYXhUaGlua2luZ1Rva2VucyhbLi4ubWVzc2FnZXMsIC4uLm5ld01lc3NhZ2VzXSksXG4gICAgICAgIF0pXG5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgbWVzc2FnZSBvZiBxdWVyeShcbiAgICAgICAgWy4uLm1lc3NhZ2VzLCAuLi5uZXdNZXNzYWdlc10sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FuVXNlVG9vbCxcbiAgICAgICAge1xuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgICAgZm9ya051bWJlcixcbiAgICAgICAgICAgIG1lc3NhZ2VMb2dOYW1lLFxuICAgICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgICBzbG93QW5kQ2FwYWJsZU1vZGVsOiBtb2RlbCxcbiAgICAgICAgICAgIHZlcmJvc2UsXG4gICAgICAgICAgICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBnZXRMYXN0QXNzaXN0YW50TWVzc2FnZUlkKFsuLi5tZXNzYWdlcywgLi4ubmV3TWVzc2FnZXNdKSxcbiAgICAgICAgICByZWFkRmlsZVRpbWVzdGFtcHM6IHJlYWRGaWxlVGltZXN0YW1wcy5jdXJyZW50LFxuICAgICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgICBzZXRUb29sSlNYLFxuICAgICAgICB9LFxuICAgICAgICBnZXRCaW5hcnlGZWVkYmFja1Jlc3BvbnNlLFxuICAgICAgKSkge1xuICAgICAgICBzZXRNZXNzYWdlcyhvbGRNZXNzYWdlcyA9PiBbLi4ub2xkTWVzc2FnZXMsIG1lc3NhZ2VdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRUb0hpc3RvcnkoaW5pdGlhbFByb21wdClcbiAgICAgIC8vIFRPRE86IHNldEhpc3RvcnlJbmRleFxuICAgIH1cblxuICAgIHNldEhhdmVTaG93bkNvc3REaWFsb2coXG4gICAgICBnZXRHbG9iYWxDb25maWcoKS5oYXNBY2tub3dsZWRnZWRDb3N0VGhyZXNob2xkIHx8IGZhbHNlLFxuICAgIClcblxuICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9uUXVlcnkoXG4gICAgbmV3TWVzc2FnZXM6IE1lc3NhZ2VUeXBlW10sXG4gICAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gICkge1xuICAgIHNldE1lc3NhZ2VzKG9sZE1lc3NhZ2VzID0+IFsuLi5vbGRNZXNzYWdlcywgLi4ubmV3TWVzc2FnZXNdKVxuXG4gICAgLy8gTWFyayBvbmJvYXJkaW5nIGFzIGNvbXBsZXRlIHdoZW4gYW55IHVzZXIgbWVzc2FnZSBpcyBzZW50IHRvIENsYXVkZVxuICAgIG1hcmtQcm9qZWN0T25ib2FyZGluZ0NvbXBsZXRlKClcblxuICAgIC8vIFRoZSBsYXN0IG1lc3NhZ2UgaXMgYW4gYXNzaXN0YW50IG1lc3NhZ2UgaWYgdGhlIHVzZXIgaW5wdXQgd2FzIGEgYmFzaCBjb21tYW5kLFxuICAgIC8vIG9yIGlmIHRoZSB1c2VyIGlucHV0IHdhcyBhbiBpbnZhbGlkIHNsYXNoIGNvbW1hbmQuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBuZXdNZXNzYWdlc1tuZXdNZXNzYWdlcy5sZW5ndGggLSAxXSFcblxuICAgIC8vIFVwZGF0ZSB0ZXJtaW5hbCB0aXRsZSBiYXNlZCBvbiB1c2VyIG1lc3NhZ2VcbiAgICBpZiAoXG4gICAgICBsYXN0TWVzc2FnZS50eXBlID09PSAndXNlcicgJiZcbiAgICAgIHR5cGVvZiBsYXN0TWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnXG4gICAgKSB7XG4gICAgICB1cGRhdGVUZXJtaW5hbFRpdGxlKGxhc3RNZXNzYWdlLm1lc3NhZ2UuY29udGVudClcbiAgICB9XG4gICAgaWYgKGxhc3RNZXNzYWdlLnR5cGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICBzZXRBYm9ydENvbnRyb2xsZXIobnVsbClcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFtzeXN0ZW1Qcm9tcHQsIGNvbnRleHQsIG1vZGVsLCBtYXhUaGlua2luZ1Rva2Vuc10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIFtcbiAgICAgICAgZ2V0U3lzdGVtUHJvbXB0KCksXG4gICAgICAgIGdldENvbnRleHQoKSxcbiAgICAgICAgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCgpLFxuICAgICAgICBnZXRNYXhUaGlua2luZ1Rva2VucyhbLi4ubWVzc2FnZXMsIGxhc3RNZXNzYWdlXSksXG4gICAgICBdLFxuICAgIClcblxuICAgIC8vIHF1ZXJ5IHRoZSBBUElcbiAgICBmb3IgYXdhaXQgKGNvbnN0IG1lc3NhZ2Ugb2YgcXVlcnkoXG4gICAgICBbLi4ubWVzc2FnZXMsIGxhc3RNZXNzYWdlXSxcbiAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjYW5Vc2VUb29sLFxuICAgICAge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgZm9ya051bWJlcixcbiAgICAgICAgICBtZXNzYWdlTG9nTmFtZSxcbiAgICAgICAgICB0b29scyxcbiAgICAgICAgICBzbG93QW5kQ2FwYWJsZU1vZGVsOiBtb2RlbCxcbiAgICAgICAgICB2ZXJib3NlLFxuICAgICAgICAgIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zLFxuICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zLFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlSWQ6IGdldExhc3RBc3Npc3RhbnRNZXNzYWdlSWQoWy4uLm1lc3NhZ2VzLCBsYXN0TWVzc2FnZV0pLFxuICAgICAgICByZWFkRmlsZVRpbWVzdGFtcHM6IHJlYWRGaWxlVGltZXN0YW1wcy5jdXJyZW50LFxuICAgICAgICBhYm9ydENvbnRyb2xsZXIsXG4gICAgICAgIHNldFRvb2xKU1gsXG4gICAgICB9LFxuICAgICAgZ2V0QmluYXJ5RmVlZGJhY2tSZXNwb25zZSxcbiAgICApKSB7XG4gICAgICBzZXRNZXNzYWdlcyhvbGRNZXNzYWdlcyA9PiBbLi4ub2xkTWVzc2FnZXMsIG1lc3NhZ2VdKVxuICAgIH1cbiAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gIH1cblxuICAvLyBSZWdpc3RlciBjb3N0IHN1bW1hcnkgdHJhY2tlclxuICB1c2VDb3N0U3VtbWFyeSgpXG5cbiAgLy8gUmVnaXN0ZXIgbWVzc2FnZXMgZ2V0dGVyIGFuZCBzZXR0ZXJcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnZXRNZXNzYWdlcyA9ICgpID0+IG1lc3NhZ2VzXG4gICAgc2V0TWVzc2FnZXNHZXR0ZXIoZ2V0TWVzc2FnZXMpXG4gICAgc2V0TWVzc2FnZXNTZXR0ZXIoc2V0TWVzc2FnZXMpXG4gIH0sIFttZXNzYWdlc10pXG5cbiAgLy8gUmVjb3JkIHRyYW5zY3JpcHRzIGxvY2FsbHksIGZvciBkZWJ1Z2dpbmcgYW5kIGNvbnZlcnNhdGlvbiByZWNvdmVyeVxuICB1c2VMb2dNZXNzYWdlcyhtZXNzYWdlcywgbWVzc2FnZUxvZ05hbWUsIGZvcmtOdW1iZXIpXG5cbiAgLy8gTG9nIHN0YXJ0dXAgdGltZVxuICB1c2VMb2dTdGFydHVwVGltZSgpXG5cbiAgLy8gSW5pdGlhbCBsb2FkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25Jbml0KClcbiAgICAvLyBUT0RPOiBmaXggdGhpc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pXG5cbiAgY29uc3Qgbm9ybWFsaXplZE1lc3NhZ2VzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBub3JtYWxpemVNZXNzYWdlcyhtZXNzYWdlcykuZmlsdGVyKGlzTm90RW1wdHlNZXNzYWdlKSxcbiAgICBbbWVzc2FnZXNdLFxuICApXG5cbiAgY29uc3QgdW5yZXNvbHZlZFRvb2xVc2VJRHMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFVucmVzb2x2ZWRUb29sVXNlSURzKG5vcm1hbGl6ZWRNZXNzYWdlcyksXG4gICAgW25vcm1hbGl6ZWRNZXNzYWdlc10sXG4gIClcblxuICBjb25zdCBpblByb2dyZXNzVG9vbFVzZUlEcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0SW5Qcm9ncmVzc1Rvb2xVc2VJRHMobm9ybWFsaXplZE1lc3NhZ2VzKSxcbiAgICBbbm9ybWFsaXplZE1lc3NhZ2VzXSxcbiAgKVxuXG4gIGNvbnN0IGVycm9yZWRUb29sVXNlSURzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbmV3IFNldChcbiAgICAgICAgZ2V0RXJyb3JlZFRvb2xVc2VNZXNzYWdlcyhub3JtYWxpemVkTWVzc2FnZXMpLm1hcChcbiAgICAgICAgICBfID0+IChfLm1lc3NhZ2UuY29udGVudFswXSEgYXMgVG9vbFVzZUJsb2NrUGFyYW0pLmlkLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICBbbm9ybWFsaXplZE1lc3NhZ2VzXSxcbiAgKVxuXG4gIGNvbnN0IG1lc3NhZ2VzSlNYID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0YXRpYycsXG4gICAgICAgIGpzeDogKFxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGtleT17YGxvZ28ke2ZvcmtOdW1iZXJ9YH0+XG4gICAgICAgICAgICA8TG9nbyBtY3BDbGllbnRzPXttY3BDbGllbnRzfSBpc0RlZmF1bHRNb2RlbD17aXNEZWZhdWx0TW9kZWx9IC8+XG4gICAgICAgICAgICA8UHJvamVjdE9uYm9hcmRpbmcgd29ya3NwYWNlRGlyPXtnZXRPcmlnaW5hbEN3ZCgpfSAvPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIC4uLnJlb3JkZXJNZXNzYWdlcyhub3JtYWxpemVkTWVzc2FnZXMpLm1hcChfID0+IHtcbiAgICAgICAgY29uc3QgdG9vbFVzZUlEID0gZ2V0VG9vbFVzZUlEKF8pXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgIF8udHlwZSA9PT0gJ3Byb2dyZXNzJyA/IChcbiAgICAgICAgICAgIF8uY29udGVudC5tZXNzYWdlLmNvbnRlbnRbMF0/LnR5cGUgPT09ICd0ZXh0JyAmJlxuICAgICAgICAgICAgLy8gSGFjazogQWdlbnRUb29sIGludGVycnVwdHMgdXNlIFByb2dyZXNzIG1lc3NhZ2VzLCBzbyBkb24ndFxuICAgICAgICAgICAgLy8gbmVlZCBhbiBleHRyYSDijr8gYmVjYXVzZSA8TWVzc2FnZSAvPiBhbHJlYWR5IGFkZHMgb25lLlxuICAgICAgICAgICAgLy8gVE9ETzogRmluZCBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXMuXG4gICAgICAgICAgICBfLmNvbnRlbnQubWVzc2FnZS5jb250ZW50WzBdLnRleHQgPT09IElOVEVSUlVQVF9NRVNTQUdFID8gKFxuICAgICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e18uY29udGVudH1cbiAgICAgICAgICAgICAgICBtZXNzYWdlcz17Xy5ub3JtYWxpemVkTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgYWRkTWFyZ2luPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB0b29scz17Xy50b29sc31cbiAgICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlID8/IGZhbHNlfVxuICAgICAgICAgICAgICAgIGRlYnVnPXtkZWJ1Z31cbiAgICAgICAgICAgICAgICBlcnJvcmVkVG9vbFVzZUlEcz17bmV3IFNldCgpfVxuICAgICAgICAgICAgICAgIGluUHJvZ3Jlc3NUb29sVXNlSURzPXtuZXcgU2V0KCl9XG4gICAgICAgICAgICAgICAgdW5yZXNvbHZlZFRvb2xVc2VJRHM9e25ldyBTZXQoKX1cbiAgICAgICAgICAgICAgICBzaG91bGRBbmltYXRlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBzaG91bGRTaG93RG90PXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e18uY29udGVudH1cbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzPXtfLm5vcm1hbGl6ZWRNZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgIGFkZE1hcmdpbj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICB0b29scz17Xy50b29sc31cbiAgICAgICAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgICAgICAgICAgICBlcnJvcmVkVG9vbFVzZUlEcz17bmV3IFNldCgpfVxuICAgICAgICAgICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e25ldyBTZXQoKX1cbiAgICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRUb29sVXNlSURzPXtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAgICAgICAgICAgKF8uY29udGVudC5tZXNzYWdlLmNvbnRlbnRbMF0hIGFzIFRvb2xVc2VCbG9ja1BhcmFtKS5pZCxcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHNob3VsZEFuaW1hdGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0RvdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgIG1lc3NhZ2U9e199XG4gICAgICAgICAgICAgIG1lc3NhZ2VzPXtub3JtYWxpemVkTWVzc2FnZXN9XG4gICAgICAgICAgICAgIGFkZE1hcmdpbj17dHJ1ZX1cbiAgICAgICAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgICAgICAgIGVycm9yZWRUb29sVXNlSURzPXtlcnJvcmVkVG9vbFVzZUlEc31cbiAgICAgICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e2luUHJvZ3Jlc3NUb29sVXNlSURzfVxuICAgICAgICAgICAgICBzaG91bGRBbmltYXRlPXtcbiAgICAgICAgICAgICAgICAhdG9vbEpTWCAmJlxuICAgICAgICAgICAgICAgICF0b29sVXNlQ29uZmlybSAmJlxuICAgICAgICAgICAgICAgICFpc01lc3NhZ2VTZWxlY3RvclZpc2libGUgJiZcbiAgICAgICAgICAgICAgICAoIXRvb2xVc2VJRCB8fCBpblByb2dyZXNzVG9vbFVzZUlEcy5oYXModG9vbFVzZUlEKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzaG91bGRTaG93RG90PXt0cnVlfVxuICAgICAgICAgICAgICB1bnJlc29sdmVkVG9vbFVzZUlEcz17dW5yZXNvbHZlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcblxuICAgICAgICBjb25zdCB0eXBlID0gc2hvdWxkUmVuZGVyU3RhdGljYWxseShcbiAgICAgICAgICBfLFxuICAgICAgICAgIG5vcm1hbGl6ZWRNZXNzYWdlcyxcbiAgICAgICAgICB1bnJlc29sdmVkVG9vbFVzZUlEcyxcbiAgICAgICAgKVxuICAgICAgICAgID8gJ3N0YXRpYydcbiAgICAgICAgICA6ICd0cmFuc2llbnQnXG5cbiAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBqc3g6IChcbiAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlPVwic2luZ2xlXCJcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcj17dHlwZSA9PT0gJ3N0YXRpYycgPyAnZ3JlZW4nIDogJ3JlZCd9XG4gICAgICAgICAgICAgICAga2V5PXtfLnV1aWR9XG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGpzeDogKFxuICAgICAgICAgICAgPEJveCBrZXk9e18udXVpZH0gd2lkdGg9XCIxMDAlXCI+XG4gICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgKSxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgXVxuICB9LCBbXG4gICAgZm9ya051bWJlcixcbiAgICBub3JtYWxpemVkTWVzc2FnZXMsXG4gICAgdG9vbHMsXG4gICAgdmVyYm9zZSxcbiAgICBkZWJ1ZyxcbiAgICBlcnJvcmVkVG9vbFVzZUlEcyxcbiAgICBpblByb2dyZXNzVG9vbFVzZUlEcyxcbiAgICB0b29sSlNYLFxuICAgIHRvb2xVc2VDb25maXJtLFxuICAgIGlzTWVzc2FnZVNlbGVjdG9yVmlzaWJsZSxcbiAgICB1bnJlc29sdmVkVG9vbFVzZUlEcyxcbiAgICBtY3BDbGllbnRzLFxuICAgIGlzRGVmYXVsdE1vZGVsLFxuICBdKVxuXG4gIC8vIG9ubHkgc2hvdyB0aGUgZGlhbG9nIG9uY2Ugbm90IGxvYWRpbmdcbiAgY29uc3Qgc2hvd2luZ0Nvc3REaWFsb2cgPSAhaXNMb2FkaW5nICYmIHNob3dDb3N0RGlhbG9nXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0YXRpY1xuICAgICAgICBrZXk9e2BzdGF0aWMtbWVzc2FnZXMtJHtmb3JrTnVtYmVyfWB9XG4gICAgICAgIGl0ZW1zPXttZXNzYWdlc0pTWC5maWx0ZXIoXyA9PiBfLnR5cGUgPT09ICdzdGF0aWMnKX1cbiAgICAgID5cbiAgICAgICAge18gPT4gXy5qc3h9XG4gICAgICA8L1N0YXRpYz5cbiAgICAgIHttZXNzYWdlc0pTWC5maWx0ZXIoXyA9PiBfLnR5cGUgPT09ICd0cmFuc2llbnQnKS5tYXAoXyA9PiBfLmpzeCl9XG4gICAgICA8Qm94XG4gICAgICAgIGJvcmRlckNvbG9yPVwicmVkXCJcbiAgICAgICAgYm9yZGVyU3R5bGU9e2RlYnVnID8gJ3NpbmdsZScgOiB1bmRlZmluZWR9XG4gICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgPlxuICAgICAgICB7IXRvb2xKU1ggJiYgIXRvb2xVc2VDb25maXJtICYmICFiaW5hcnlGZWVkYmFja0NvbnRleHQgJiYgaXNMb2FkaW5nICYmIChcbiAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICApfVxuICAgICAgICB7dG9vbEpTWCA/IHRvb2xKU1guanN4IDogbnVsbH1cbiAgICAgICAgeyF0b29sSlNYICYmIGJpbmFyeUZlZWRiYWNrQ29udGV4dCAmJiAhaXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlICYmIChcbiAgICAgICAgICA8QmluYXJ5RmVlZGJhY2tcbiAgICAgICAgICAgIG0xPXtiaW5hcnlGZWVkYmFja0NvbnRleHQubTF9XG4gICAgICAgICAgICBtMj17YmluYXJ5RmVlZGJhY2tDb250ZXh0Lm0yfVxuICAgICAgICAgICAgcmVzb2x2ZT17cmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgYmluYXJ5RmVlZGJhY2tDb250ZXh0LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEJpbmFyeUZlZWRiYWNrQ29udGV4dChudWxsKSwgMClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgbm9ybWFsaXplZE1lc3NhZ2VzPXtub3JtYWxpemVkTWVzc2FnZXN9XG4gICAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgICAgICBlcnJvcmVkVG9vbFVzZUlEcz17ZXJyb3JlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgICBpblByb2dyZXNzVG9vbFVzZUlEcz17aW5Qcm9ncmVzc1Rvb2xVc2VJRHN9XG4gICAgICAgICAgICB1bnJlc29sdmVkVG9vbFVzZUlEcz17dW5yZXNvbHZlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyF0b29sSlNYICYmXG4gICAgICAgICAgdG9vbFVzZUNvbmZpcm0gJiZcbiAgICAgICAgICAhaXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlICYmXG4gICAgICAgICAgIWJpbmFyeUZlZWRiYWNrQ29udGV4dCAmJiAoXG4gICAgICAgICAgICA8UGVybWlzc2lvblJlcXVlc3RcbiAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm09e3Rvb2xVc2VDb25maXJtfVxuICAgICAgICAgICAgICBvbkRvbmU9eygpID0+IHNldFRvb2xVc2VDb25maXJtKG51bGwpfVxuICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7IXRvb2xKU1ggJiZcbiAgICAgICAgICAhdG9vbFVzZUNvbmZpcm0gJiZcbiAgICAgICAgICAhaXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlICYmXG4gICAgICAgICAgIWJpbmFyeUZlZWRiYWNrQ29udGV4dCAmJlxuICAgICAgICAgIHNob3dpbmdDb3N0RGlhbG9nICYmIChcbiAgICAgICAgICAgIDxDb3N0VGhyZXNob2xkRGlhbG9nXG4gICAgICAgICAgICAgIG9uRG9uZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dDb3N0RGlhbG9nKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldEhhdmVTaG93bkNvc3REaWFsb2codHJ1ZSlcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgICAgICAgICAgICAgICBzYXZlR2xvYmFsQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgIC4uLnByb2plY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICBoYXNBY2tub3dsZWRnZWRDb3N0VGhyZXNob2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2Nvc3RfdGhyZXNob2xkX2Fja25vd2xlZGdlZCcsIHt9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgIHshdG9vbFVzZUNvbmZpcm0gJiZcbiAgICAgICAgICAhdG9vbEpTWD8uc2hvdWxkSGlkZVByb21wdElucHV0ICYmXG4gICAgICAgICAgc2hvdWxkU2hvd1Byb21wdElucHV0ICYmXG4gICAgICAgICAgIWlzTWVzc2FnZVNlbGVjdG9yVmlzaWJsZSAmJlxuICAgICAgICAgICFiaW5hcnlGZWVkYmFja0NvbnRleHQgJiZcbiAgICAgICAgICAhc2hvd2luZ0Nvc3REaWFsb2cgJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFByb21wdElucHV0XG4gICAgICAgICAgICAgICAgY29tbWFuZHM9e2NvbW1hbmRzfVxuICAgICAgICAgICAgICAgIGZvcmtOdW1iZXI9e2ZvcmtOdW1iZXJ9XG4gICAgICAgICAgICAgICAgbWVzc2FnZUxvZ05hbWU9e21lc3NhZ2VMb2dOYW1lfVxuICAgICAgICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXthcGlLZXlTdGF0dXMgPT09ICdpbnZhbGlkJ31cbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICBvblF1ZXJ5PXtvblF1ZXJ5fVxuICAgICAgICAgICAgICAgIGRlYnVnPXtkZWJ1Z31cbiAgICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzPXttZXNzYWdlc31cbiAgICAgICAgICAgICAgICBzZXRUb29sSlNYPXtzZXRUb29sSlNYfVxuICAgICAgICAgICAgICAgIG9uQXV0b1VwZGF0ZXJSZXN1bHQ9e3NldEF1dG9VcGRhdGVyUmVzdWx0fVxuICAgICAgICAgICAgICAgIGF1dG9VcGRhdGVyUmVzdWx0PXthdXRvVXBkYXRlclJlc3VsdH1cbiAgICAgICAgICAgICAgICBpbnB1dD17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICBvbklucHV0Q2hhbmdlPXtzZXRJbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG1vZGU9e2lucHV0TW9kZX1cbiAgICAgICAgICAgICAgICBvbk1vZGVDaGFuZ2U9e3NldElucHV0TW9kZX1cbiAgICAgICAgICAgICAgICBzdWJtaXRDb3VudD17c3VibWl0Q291bnR9XG4gICAgICAgICAgICAgICAgb25TdWJtaXRDb3VudENoYW5nZT17c2V0U3VibWl0Q291bnR9XG4gICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nPXtzZXRJc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgc2V0QWJvcnRDb250cm9sbGVyPXtzZXRBYm9ydENvbnRyb2xsZXJ9XG4gICAgICAgICAgICAgICAgb25TaG93TWVzc2FnZVNlbGVjdG9yPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0SXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlKHByZXYgPT4gIXByZXYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldEZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcj17XG4gICAgICAgICAgICAgICAgICBzZXRGb3JrQ29udm9XaXRoTWVzc2FnZXNPblRoZU5leHRSZW5kZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVhZEZpbGVUaW1lc3RhbXBzPXtyZWFkRmlsZVRpbWVzdGFtcHMuY3VycmVudH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICA8L0JveD5cbiAgICAgIHtpc01lc3NhZ2VTZWxlY3RvclZpc2libGUgJiYgKFxuICAgICAgICA8TWVzc2FnZVNlbGVjdG9yXG4gICAgICAgICAgZXJyb3JlZFRvb2xVc2VJRHM9e2Vycm9yZWRUb29sVXNlSURzfVxuICAgICAgICAgIHVucmVzb2x2ZWRUb29sVXNlSURzPXt1bnJlc29sdmVkVG9vbFVzZUlEc31cbiAgICAgICAgICBtZXNzYWdlcz17bm9ybWFsaXplTWVzc2FnZXNGb3JBUEkobWVzc2FnZXMpfVxuICAgICAgICAgIG9uU2VsZWN0PXthc3luYyBtZXNzYWdlID0+IHtcbiAgICAgICAgICAgIHNldElzTWVzc2FnZVNlbGVjdG9yVmlzaWJsZShmYWxzZSlcblxuICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgc2VsZWN0ZWQgdGhlIGN1cnJlbnQgcHJvbXB0LCBkbyBub3RoaW5nXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VzLmluY2x1ZGVzKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYW5jZWwgdG9vbCB1c2UgY2FsbHMvcmVxdWVzdHNcbiAgICAgICAgICAgIG9uQ2FuY2VsKClcblxuICAgICAgICAgICAgLy8gSGFjazogbWFrZSBzdXJlIHRoZSBcIkludGVycnVwdGVkIGJ5IHVzZXJcIiBtZXNzYWdlIGlzXG4gICAgICAgICAgICAvLyByZW5kZXJlZCBpbiByZXNwb25zZSB0byB0aGUgY2FuY2VsbGF0aW9uLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAvLyB0aGUgc2NyZWVuIHdpbGwgYmUgY2xlYXJlZCBidXQgdGhlcmUgd2lsbCByZW1haW4gYVxuICAgICAgICAgICAgLy8gdmVzdGlnaWFsIFwiSW50ZXJydXB0ZWQgYnkgdXNlclwiIG1lc3NhZ2UgYXQgdGhlIHRvcC5cbiAgICAgICAgICAgIHNldEltbWVkaWF0ZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIENsZWFyIG1lc3NhZ2VzLCBhbmQgcmUtcmVuZGVyXG4gICAgICAgICAgICAgIGF3YWl0IGNsZWFyVGVybWluYWwoKVxuICAgICAgICAgICAgICBzZXRNZXNzYWdlcyhbXSlcbiAgICAgICAgICAgICAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyKFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnNsaWNlKDAsIG1lc3NhZ2VzLmluZGV4T2YobWVzc2FnZSkpLFxuICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgLy8gUG9wdWxhdGUvcmVzZXQgdGhlIHByb21wdCBpbnB1dFxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUobWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkVzY2FwZT17KCkgPT4gc2V0SXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlKGZhbHNlKX1cbiAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgey8qKiBGaXggb2NjYXNpb25hbCByZW5kZXJpbmcgYXJ0aWZhY3QgKi99XG4gICAgICA8TmV3bGluZSAvPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlbmRlclN0YXRpY2FsbHkoXG4gIG1lc3NhZ2U6IE5vcm1hbGl6ZWRNZXNzYWdlLFxuICBtZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXSxcbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHM6IFNldDxzdHJpbmc+LFxuKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgY2FzZSAndXNlcic6XG4gICAgY2FzZSAnYXNzaXN0YW50Jzoge1xuICAgICAgY29uc3QgdG9vbFVzZUlEID0gZ2V0VG9vbFVzZUlEKG1lc3NhZ2UpXG4gICAgICBpZiAoIXRvb2xVc2VJRCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHVucmVzb2x2ZWRUb29sVXNlSURzLmhhcyh0b29sVXNlSUQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nUHJvZ3Jlc3NNZXNzYWdlID0gbWVzc2FnZXMuZmluZChcbiAgICAgICAgXyA9PiBfLnR5cGUgPT09ICdwcm9ncmVzcycgJiYgXy50b29sVXNlSUQgPT09IHRvb2xVc2VJRCxcbiAgICAgICkgYXMgUHJvZ3Jlc3NNZXNzYWdlIHwgbnVsbFxuICAgICAgaWYgKCFjb3JyZXNwb25kaW5nUHJvZ3Jlc3NNZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaW50ZXJzZWN0cyhcbiAgICAgICAgdW5yZXNvbHZlZFRvb2xVc2VJRHMsXG4gICAgICAgIGNvcnJlc3BvbmRpbmdQcm9ncmVzc01lc3NhZ2Uuc2libGluZ1Rvb2xVc2VJRHMsXG4gICAgICApXG4gICAgfVxuICAgIGNhc2UgJ3Byb2dyZXNzJzpcbiAgICAgIHJldHVybiAhaW50ZXJzZWN0cyh1bnJlc29sdmVkVG9vbFVzZUlEcywgbWVzc2FnZS5zaWJsaW5nVG9vbFVzZUlEcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RzPEE+KGE6IFNldDxBPiwgYjogU2V0PEE+KTogYm9vbGVhbiB7XG4gIHJldHVybiBhLnNpemUgPiAwICYmIGIuc2l6ZSA+IDAgJiYgWy4uLmFdLnNvbWUoXyA9PiBiLmhhcyhfKSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb2R1Y3QuanMnXG5pbXBvcnQgeyBpc0RlZmF1bHRBcGlLZXksIGdldEFudGhyb3BpY0FwaUtleSB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHR5cGUgeyBXcmFwcGVkQ2xpZW50IH0gZnJvbSAnLi4vc2VydmljZXMvbWNwQ2xpZW50LmpzJ1xuXG5leHBvcnQgY29uc3QgTUlOX0xPR09fV0lEVEggPSA0NlxuXG5leHBvcnQgZnVuY3Rpb24gTG9nbyh7XG4gIG1jcENsaWVudHMsXG4gIGlzRGVmYXVsdE1vZGVsID0gZmFsc2UsXG59OiB7XG4gIG1jcENsaWVudHM6IFdyYXBwZWRDbGllbnRbXVxuICBpc0RlZmF1bHRNb2RlbD86IGJvb2xlYW5cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KE1JTl9MT0dPX1dJRFRILCBnZXRDd2QoKS5sZW5ndGggKyAxMilcbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG4gIGNvbnN0IGN1cnJlbnRNb2RlbCA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19NT0RFTFxuICBjb25zdCBhcGlLZXkgPSBnZXRBbnRocm9waWNBcGlLZXkoKVxuICBjb25zdCBpc0N1c3RvbUFwaUtleSA9ICFpc0RlZmF1bHRBcGlLZXkoKVxuICBjb25zdCBpc0N1c3RvbU1vZGVsID0gIWlzRGVmYXVsdE1vZGVsICYmIEJvb2xlYW4oY3VycmVudE1vZGVsKVxuICBjb25zdCBoYXNPdmVycmlkZXMgPVxuICAgIHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgJiZcbiAgICBCb29sZWFuKFxuICAgICAgaXNDdXN0b21BcGlLZXkgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuRElTQUJMRV9QUk9NUFRfQ0FDSElORyB8fFxuICAgICAgICBwcm9jZXNzLmVudi5BUElfVElNRU9VVF9NUyB8fFxuICAgICAgICBwcm9jZXNzLmVudi5NQVhfVEhJTktJTkdfVE9LRU5TIHx8XG4gICAgICAgIHByb2Nlc3MuZW52LkFOVEhST1BJQ19CQVNFX1VSTCB8fFxuICAgICAgICBpc0N1c3RvbU1vZGVsLFxuICAgIClcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgPEJveFxuICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUuY2xhdWRlfVxuICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIGdhcD17MX1cbiAgICAgICAgcGFkZGluZ0xlZnQ9ezF9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgID5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmNsYXVkZX0+4py7PC9UZXh0PiBXZWxjb21lIHRveycgJ31cbiAgICAgICAgICA8VGV4dCBib2xkPntQUk9EVUNUX05BTUV9PC9UZXh0PiA8VGV4dD5yZXNlYXJjaCBwcmV2aWV3ITwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8PlxuICAgICAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezJ9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9IGl0YWxpYz5cbiAgICAgICAgICAgICAgL2hlbHAgZm9yIGhlbHBcbiAgICAgICAgICAgICAge3Byb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgJiYgPD4gwrcgaHR0cHM6Ly9nby9jbGF1ZGUtY2xpPC8+fVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PmN3ZDoge2dldEN3ZCgpfTwvVGV4dD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgICB7aGFzT3ZlcnJpZGVzICYmIChcbiAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLnNlY29uZGFyeUJvcmRlcn1cbiAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgICBib3JkZXJCb3R0b209e2ZhbHNlfVxuICAgICAgICAgICAgICBib3JkZXJMZWZ0PXtmYWxzZX1cbiAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBib3JkZXJUb3A9e3RydWV9XG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0PXsyfVxuICAgICAgICAgICAgICBtYXJnaW5SaWdodD17MX1cbiAgICAgICAgICAgICAgcGFkZGluZ1RvcD17MX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5PdmVycmlkZXMgKHZpYSBlbnYpOjwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgIHtpc0N1c3RvbU1vZGVsICYmIChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICDigKIgTW9kZWw6IDxUZXh0IGJvbGQ+e2N1cnJlbnRNb2RlbH08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aXNDdXN0b21BcGlLZXkgJiYgYXBpS2V5ID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgICAgICAgICAgIOKAoiBBUEkgS2V5OnsnICd9XG4gICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPnNrLWFudC3igKZ7YXBpS2V5IS5zbGljZSgtd2lkdGggKyAyNSl9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtwcm9jZXNzLmVudi5ESVNBQkxFX1BST01QVF9DQUNISU5HID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgICAgICAgICAgIOKAoiBQcm9tcHQgY2FjaGluZzp7JyAnfVxuICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmVycm9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICBvZmZcbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7cHJvY2Vzcy5lbnYuQVBJX1RJTUVPVVRfTVMgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAgICAg4oCiIEFQSSB0aW1lb3V0OnsnICd9XG4gICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPntwcm9jZXNzLmVudi5BUElfVElNRU9VVF9NU31tczwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7cHJvY2Vzcy5lbnYuTUFYX1RISU5LSU5HX1RPS0VOUyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICDigKIgTWF4IHRoaW5raW5nIHRva2Vuczp7JyAnfVxuICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD57cHJvY2Vzcy5lbnYuTUFYX1RISU5LSU5HX1RPS0VOU308L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3Byb2Nlc3MuZW52LkFOVEhST1BJQ19CQVNFX1VSTCA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICDigKIgQVBJIEJhc2UgVVJMOnsnICd9XG4gICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPntwcm9jZXNzLmVudi5BTlRIUk9QSUNfQkFTRV9VUkx9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICAge21jcENsaWVudHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5zZWNvbmRhcnlCb3JkZXJ9XG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBib3JkZXJCb3R0b209e2ZhbHNlfVxuICAgICAgICAgICAgYm9yZGVyTGVmdD17ZmFsc2V9XG4gICAgICAgICAgICBib3JkZXJSaWdodD17ZmFsc2V9XG4gICAgICAgICAgICBib3JkZXJUb3A9e3RydWV9XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezJ9XG4gICAgICAgICAgICBtYXJnaW5SaWdodD17MX1cbiAgICAgICAgICAgIHBhZGRpbmdUb3A9ezF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+TUNQIFNlcnZlcnM6PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7bWNwQ2xpZW50cy5tYXAoKGNsaWVudCwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgIDxCb3gga2V5PXtpZHh9IHdpZHRoPXt3aWR0aCAtIDZ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT7igKIge2NsaWVudC5uYW1lfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfSAvPlxuICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICBib2xkXG4gICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudC50eXBlID09PSAnY29ubmVjdGVkJyA/IHRoZW1lLnN1Y2Nlc3MgOiB0aGVtZS5lcnJvclxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjbGllbnQudHlwZSA9PT0gJ2Nvbm5lY3RlZCcgPyAnY29ubmVjdGVkJyA6ICdmYWlsZWQnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBCb3ggfSBmcm9tICdpbmsnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQXNzaXN0YW50TWVzc2FnZSwgTWVzc2FnZSwgVXNlck1lc3NhZ2UgfSBmcm9tICcuLi9xdWVyeS5qcydcbmltcG9ydCB0eXBlIHtcbiAgQ29udGVudEJsb2NrLFxuICBEb2N1bWVudEJsb2NrUGFyYW0sXG4gIEltYWdlQmxvY2tQYXJhbSxcbiAgVGV4dEJsb2NrUGFyYW0sXG4gIFRoaW5raW5nQmxvY2tQYXJhbSxcbiAgVG9vbFJlc3VsdEJsb2NrUGFyYW0sXG4gIFRvb2xVc2VCbG9ja1BhcmFtLFxufSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IFVzZXJUb29sUmVzdWx0TWVzc2FnZSB9IGZyb20gJy4vbWVzc2FnZXMvVXNlclRvb2xSZXN1bHRNZXNzYWdlL1VzZXJUb29sUmVzdWx0TWVzc2FnZS5qcydcbmltcG9ydCB7IEFzc2lzdGFudFRvb2xVc2VNZXNzYWdlIH0gZnJvbSAnLi9tZXNzYWdlcy9Bc3Npc3RhbnRUb29sVXNlTWVzc2FnZS5qcydcbmltcG9ydCB7IEFzc2lzdGFudFRleHRNZXNzYWdlIH0gZnJvbSAnLi9tZXNzYWdlcy9Bc3Npc3RhbnRUZXh0TWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJUZXh0TWVzc2FnZSB9IGZyb20gJy4vbWVzc2FnZXMvVXNlclRleHRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgTm9ybWFsaXplZE1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IEFzc2lzdGFudFRoaW5raW5nTWVzc2FnZSB9IGZyb20gJy4vbWVzc2FnZXMvQXNzaXN0YW50VGhpbmtpbmdNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgQXNzaXN0YW50UmVkYWN0ZWRUaGlua2luZ01lc3NhZ2UgfSBmcm9tICcuL21lc3NhZ2VzL0Fzc2lzdGFudFJlZGFjdGVkVGhpbmtpbmdNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgdXNlVGVybWluYWxTaXplIH0gZnJvbSAnLi4vaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBtZXNzYWdlOiBVc2VyTWVzc2FnZSB8IEFzc2lzdGFudE1lc3NhZ2VcbiAgbWVzc2FnZXM6IE5vcm1hbGl6ZWRNZXNzYWdlW11cbiAgLy8gVE9ETzogRmluZCBhIHdheSB0byByZW1vdmUgdGhpcywgYW5kIGxlYXZlIHNwYWNpbmcgdG8gdGhlIGNvbnN1bWVyXG4gIGFkZE1hcmdpbjogYm9vbGVhblxuICB0b29sczogVG9vbFtdXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgZGVidWc6IGJvb2xlYW5cbiAgZXJyb3JlZFRvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIGluUHJvZ3Jlc3NUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICB1bnJlc29sdmVkVG9vbFVzZUlEczogU2V0PHN0cmluZz5cbiAgc2hvdWxkQW5pbWF0ZTogYm9vbGVhblxuICBzaG91bGRTaG93RG90OiBib29sZWFuXG4gIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZXNzYWdlKHtcbiAgbWVzc2FnZSxcbiAgbWVzc2FnZXMsXG4gIGFkZE1hcmdpbixcbiAgdG9vbHMsXG4gIHZlcmJvc2UsXG4gIGRlYnVnLFxuICBlcnJvcmVkVG9vbFVzZUlEcyxcbiAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHMsXG4gIHVucmVzb2x2ZWRUb29sVXNlSURzLFxuICBzaG91bGRBbmltYXRlLFxuICBzaG91bGRTaG93RG90LFxuICB3aWR0aCxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgLy8gQXNzaXN0YW50IG1lc3NhZ2VcbiAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICAgIHttZXNzYWdlLm1lc3NhZ2UuY29udGVudC5tYXAoKF8sIGluZGV4KSA9PiAoXG4gICAgICAgICAgPEFzc2lzdGFudE1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBwYXJhbT17X31cbiAgICAgICAgICAgIGNvc3RVU0Q9e21lc3NhZ2UuY29zdFVTRH1cbiAgICAgICAgICAgIGR1cmF0aW9uTXM9e21lc3NhZ2UuZHVyYXRpb25Nc31cbiAgICAgICAgICAgIGFkZE1hcmdpbj17YWRkTWFyZ2lufVxuICAgICAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICAgICAgZGVidWc9e2RlYnVnfVxuICAgICAgICAgICAgb3B0aW9ucz17eyB2ZXJib3NlIH19XG4gICAgICAgICAgICBlcnJvcmVkVG9vbFVzZUlEcz17ZXJyb3JlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgICBpblByb2dyZXNzVG9vbFVzZUlEcz17aW5Qcm9ncmVzc1Rvb2xVc2VJRHN9XG4gICAgICAgICAgICB1bnJlc29sdmVkVG9vbFVzZUlEcz17dW5yZXNvbHZlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgICBzaG91bGRBbmltYXRlPXtzaG91bGRBbmltYXRlfVxuICAgICAgICAgICAgc2hvdWxkU2hvd0RvdD17c2hvdWxkU2hvd0RvdH1cbiAgICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIC8vIFVzZXIgbWVzc2FnZVxuICAvLyBUT0RPOiBub3JtYWxpemUgdXBzdHJlYW1cbiAgY29uc3QgY29udGVudCA9XG4gICAgdHlwZW9mIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJ1xuICAgICAgPyBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50IH0gYXMgVGV4dEJsb2NrUGFyYW1dXG4gICAgICA6IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50XG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICB7Y29udGVudC5tYXAoKF8sIGluZGV4KSA9PiAoXG4gICAgICAgIDxVc2VyTWVzc2FnZVxuICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICBtZXNzYWdlcz17bWVzc2FnZXN9XG4gICAgICAgICAgYWRkTWFyZ2luPXthZGRNYXJnaW59XG4gICAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICAgIHBhcmFtPXtfIGFzIFRleHRCbG9ja1BhcmFtfVxuICAgICAgICAgIG9wdGlvbnM9e3sgdmVyYm9zZSB9fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVXNlck1lc3NhZ2Uoe1xuICBtZXNzYWdlLFxuICBtZXNzYWdlcyxcbiAgYWRkTWFyZ2luLFxuICB0b29scyxcbiAgcGFyYW0sXG4gIG9wdGlvbnM6IHsgdmVyYm9zZSB9LFxufToge1xuICBtZXNzYWdlOiBVc2VyTWVzc2FnZVxuICBtZXNzYWdlczogTWVzc2FnZVtdXG4gIGFkZE1hcmdpbjogYm9vbGVhblxuICB0b29sczogVG9vbFtdXG4gIHBhcmFtOlxuICAgIHwgVGV4dEJsb2NrUGFyYW1cbiAgICB8IERvY3VtZW50QmxvY2tQYXJhbVxuICAgIHwgSW1hZ2VCbG9ja1BhcmFtXG4gICAgfCBUb29sVXNlQmxvY2tQYXJhbVxuICAgIHwgVG9vbFJlc3VsdEJsb2NrUGFyYW1cbiAgb3B0aW9uczoge1xuICAgIHZlcmJvc2U6IGJvb2xlYW5cbiAgfVxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgc3dpdGNoIChwYXJhbS50eXBlKSB7XG4gICAgY2FzZSAndGV4dCc6XG4gICAgICByZXR1cm4gPFVzZXJUZXh0TWVzc2FnZSBhZGRNYXJnaW49e2FkZE1hcmdpbn0gcGFyYW09e3BhcmFtfSAvPlxuICAgIGNhc2UgJ3Rvb2xfcmVzdWx0JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxVc2VyVG9vbFJlc3VsdE1lc3NhZ2VcbiAgICAgICAgICBwYXJhbT17cGFyYW19XG4gICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICBtZXNzYWdlcz17bWVzc2FnZXN9XG4gICAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgICAgd2lkdGg9e2NvbHVtbnMgLSA1fVxuICAgICAgICAvPlxuICAgICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIEFzc2lzdGFudE1lc3NhZ2Uoe1xuICBwYXJhbSxcbiAgY29zdFVTRCxcbiAgZHVyYXRpb25NcyxcbiAgYWRkTWFyZ2luLFxuICB0b29scyxcbiAgZGVidWcsXG4gIG9wdGlvbnM6IHsgdmVyYm9zZSB9LFxuICBlcnJvcmVkVG9vbFVzZUlEcyxcbiAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHMsXG4gIHVucmVzb2x2ZWRUb29sVXNlSURzLFxuICBzaG91bGRBbmltYXRlLFxuICBzaG91bGRTaG93RG90LFxuICB3aWR0aCxcbn06IHtcbiAgcGFyYW06XG4gICAgfCBDb250ZW50QmxvY2tcbiAgICB8IFRleHRCbG9ja1BhcmFtXG4gICAgfCBJbWFnZUJsb2NrUGFyYW1cbiAgICB8IFRoaW5raW5nQmxvY2tQYXJhbVxuICAgIHwgVG9vbFVzZUJsb2NrUGFyYW1cbiAgICB8IFRvb2xSZXN1bHRCbG9ja1BhcmFtXG4gIGNvc3RVU0Q6IG51bWJlclxuICBkdXJhdGlvbk1zOiBudW1iZXJcbiAgYWRkTWFyZ2luOiBib29sZWFuXG4gIHRvb2xzOiBUb29sW11cbiAgZGVidWc6IGJvb2xlYW5cbiAgb3B0aW9uczoge1xuICAgIHZlcmJvc2U6IGJvb2xlYW5cbiAgfVxuICBlcnJvcmVkVG9vbFVzZUlEczogU2V0PHN0cmluZz5cbiAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIHVucmVzb2x2ZWRUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICBzaG91bGRBbmltYXRlOiBib29sZWFuXG4gIHNob3VsZFNob3dEb3Q6IGJvb2xlYW5cbiAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmdcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICBjYXNlICd0b29sX3VzZSc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QXNzaXN0YW50VG9vbFVzZU1lc3NhZ2VcbiAgICAgICAgICBwYXJhbT17cGFyYW19XG4gICAgICAgICAgY29zdFVTRD17Y29zdFVTRH1cbiAgICAgICAgICBkdXJhdGlvbk1zPXtkdXJhdGlvbk1zfVxuICAgICAgICAgIGFkZE1hcmdpbj17YWRkTWFyZ2lufVxuICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICBlcnJvcmVkVG9vbFVzZUlEcz17ZXJyb3JlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e2luUHJvZ3Jlc3NUb29sVXNlSURzfVxuICAgICAgICAgIHVucmVzb2x2ZWRUb29sVXNlSURzPXt1bnJlc29sdmVkVG9vbFVzZUlEc31cbiAgICAgICAgICBzaG91bGRBbmltYXRlPXtzaG91bGRBbmltYXRlfVxuICAgICAgICAgIHNob3VsZFNob3dEb3Q9e3Nob3VsZFNob3dEb3R9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgY2FzZSAndGV4dCc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QXNzaXN0YW50VGV4dE1lc3NhZ2VcbiAgICAgICAgICBwYXJhbT17cGFyYW19XG4gICAgICAgICAgY29zdFVTRD17Y29zdFVTRH1cbiAgICAgICAgICBkdXJhdGlvbk1zPXtkdXJhdGlvbk1zfVxuICAgICAgICAgIGRlYnVnPXtkZWJ1Z31cbiAgICAgICAgICBhZGRNYXJnaW49e2FkZE1hcmdpbn1cbiAgICAgICAgICBzaG91bGRTaG93RG90PXtzaG91bGRTaG93RG90fVxuICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIGNhc2UgJ3JlZGFjdGVkX3RoaW5raW5nJzpcbiAgICAgIHJldHVybiA8QXNzaXN0YW50UmVkYWN0ZWRUaGlua2luZ01lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IC8+XG4gICAgY2FzZSAndGhpbmtpbmcnOlxuICAgICAgcmV0dXJuIDxBc3Npc3RhbnRUaGlua2luZ01lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IHBhcmFtPXtwYXJhbX0gLz5cbiAgICBkZWZhdWx0OlxuICAgICAgbG9nRXJyb3IoYFVuYWJsZSB0byByZW5kZXIgbWVzc2FnZSB0eXBlOiAke3BhcmFtLnR5cGV9YClcbiAgICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgVG9vbFJlc3VsdEJsb2NrUGFyYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IE1lc3NhZ2UsIFVzZXJNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnkuanMnXG5pbXBvcnQgeyBDQU5DRUxfTUVTU0FHRSwgUkVKRUNUX01FU1NBR0UgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IFVzZXJUb29sQ2FuY2VsZWRNZXNzYWdlIH0gZnJvbSAnLi9Vc2VyVG9vbENhbmNlbGVkTWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJUb29sRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi9Vc2VyVG9vbEVycm9yTWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJUb29sUmVqZWN0TWVzc2FnZSB9IGZyb20gJy4vVXNlclRvb2xSZWplY3RNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVXNlclRvb2xTdWNjZXNzTWVzc2FnZSB9IGZyb20gJy4vVXNlclRvb2xTdWNjZXNzTWVzc2FnZS5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgcGFyYW06IFRvb2xSZXN1bHRCbG9ja1BhcmFtXG4gIG1lc3NhZ2U6IFVzZXJNZXNzYWdlXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW11cbiAgdG9vbHM6IFRvb2xbXVxuICB2ZXJib3NlOiBib29sZWFuXG4gIHdpZHRoOiBudW1iZXIgfCBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVzZXJUb29sUmVzdWx0TWVzc2FnZSh7XG4gIHBhcmFtLFxuICBtZXNzYWdlLFxuICBtZXNzYWdlcyxcbiAgdG9vbHMsXG4gIHZlcmJvc2UsXG4gIHdpZHRoLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAocGFyYW0uY29udGVudCA9PT0gQ0FOQ0VMX01FU1NBR0UpIHtcbiAgICByZXR1cm4gPFVzZXJUb29sQ2FuY2VsZWRNZXNzYWdlIC8+XG4gIH1cblxuICBpZiAocGFyYW0uY29udGVudCA9PT0gUkVKRUNUX01FU1NBR0UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFVzZXJUb29sUmVqZWN0TWVzc2FnZVxuICAgICAgICB0b29sVXNlSUQ9e3BhcmFtLnRvb2xfdXNlX2lkfVxuICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgIG1lc3NhZ2VzPXttZXNzYWdlc31cbiAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHBhcmFtLmlzX2Vycm9yKSB7XG4gICAgcmV0dXJuIDxVc2VyVG9vbEVycm9yTWVzc2FnZSBwYXJhbT17cGFyYW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxVc2VyVG9vbFN1Y2Nlc3NNZXNzYWdlXG4gICAgICBwYXJhbT17cGFyYW19XG4gICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgbWVzc2FnZXM9e21lc3NhZ2VzfVxuICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAvPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHJhbmRvbVVVSUQsIFVVSUQgfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBCb3ggfSBmcm9tICdpbmsnXG5pbXBvcnQge1xuICBBc3Npc3RhbnRNZXNzYWdlLFxuICBNZXNzYWdlLFxuICBQcm9ncmVzc01lc3NhZ2UsXG4gIFVzZXJNZXNzYWdlLFxufSBmcm9tICcuLi9xdWVyeS5qcydcbmltcG9ydCB7IGdldENvbW1hbmQsIGhhc0NvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IE1hbGZvcm1lZENvbW1hbmRFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgbGFzdCwgbWVtb2l6ZSB9IGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB0eXBlIHsgU2V0VG9vbEpTWEZuLCBUb29sLCBUb29sVXNlQ29udGV4dCB9IGZyb20gJy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBsYXN0WCB9IGZyb20gJy4uL3V0aWxzL2dlbmVyYXRvcnMuanMnXG5pbXBvcnQgeyBOT19DT05URU5UX01FU1NBR0UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jbGF1ZGUuanMnXG5pbXBvcnQge1xuICBJbWFnZUJsb2NrUGFyYW0sXG4gIFRleHRCbG9ja1BhcmFtLFxuICBUb29sUmVzdWx0QmxvY2tQYXJhbSxcbiAgVG9vbFVzZUJsb2NrUGFyYW0sXG4gIE1lc3NhZ2UgYXMgQVBJTWVzc2FnZSxcbiAgQ29udGVudEJsb2NrUGFyYW0sXG4gIENvbnRlbnRCbG9jayxcbn0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2luZGV4Lm1qcydcbmltcG9ydCB7IHNldEN3ZCB9IGZyb20gJy4vc3RhdGUuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuL3N0YXRlLmpzJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBVc2VyQmFzaElucHV0TWVzc2FnZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVzc2FnZXMvVXNlckJhc2hJbnB1dE1lc3NhZ2UuanMnXG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vY29tcG9uZW50cy9TcGlubmVyLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuLi90b29scy9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IFRvb2xVc2VCbG9jayB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5cbmV4cG9ydCBjb25zdCBJTlRFUlJVUFRfTUVTU0FHRSA9ICdbUmVxdWVzdCBpbnRlcnJ1cHRlZCBieSB1c2VyXSdcbmV4cG9ydCBjb25zdCBJTlRFUlJVUFRfTUVTU0FHRV9GT1JfVE9PTF9VU0UgPVxuICAnW1JlcXVlc3QgaW50ZXJydXB0ZWQgYnkgdXNlciBmb3IgdG9vbCB1c2VdJ1xuZXhwb3J0IGNvbnN0IENBTkNFTF9NRVNTQUdFID1cbiAgXCJUaGUgdXNlciBkb2Vzbid0IHdhbnQgdG8gdGFrZSB0aGlzIGFjdGlvbiByaWdodCBub3cuIFNUT1Agd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCB3YWl0IGZvciB0aGUgdXNlciB0byB0ZWxsIHlvdSBob3cgdG8gcHJvY2VlZC5cIlxuZXhwb3J0IGNvbnN0IFJFSkVDVF9NRVNTQUdFID1cbiAgXCJUaGUgdXNlciBkb2Vzbid0IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHRoaXMgdG9vbCB1c2UuIFRoZSB0b29sIHVzZSB3YXMgcmVqZWN0ZWQgKGVnLiBpZiBpdCB3YXMgYSBmaWxlIGVkaXQsIHRoZSBuZXdfc3RyaW5nIHdhcyBOT1Qgd3JpdHRlbiB0byB0aGUgZmlsZSkuIFNUT1Agd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCB3YWl0IGZvciB0aGUgdXNlciB0byB0ZWxsIHlvdSBob3cgdG8gcHJvY2VlZC5cIlxuZXhwb3J0IGNvbnN0IE5PX1JFU1BPTlNFX1JFUVVFU1RFRCA9ICdObyByZXNwb25zZSByZXF1ZXN0ZWQuJ1xuXG5leHBvcnQgY29uc3QgU1lOVEhFVElDX0FTU0lTVEFOVF9NRVNTQUdFUyA9IG5ldyBTZXQoW1xuICBJTlRFUlJVUFRfTUVTU0FHRSxcbiAgSU5URVJSVVBUX01FU1NBR0VfRk9SX1RPT0xfVVNFLFxuICBDQU5DRUxfTUVTU0FHRSxcbiAgUkVKRUNUX01FU1NBR0UsXG4gIE5PX1JFU1BPTlNFX1JFUVVFU1RFRCxcbl0pXG5cbmZ1bmN0aW9uIGJhc2VDcmVhdGVBc3Npc3RhbnRNZXNzYWdlKFxuICBjb250ZW50OiBDb250ZW50QmxvY2tbXSxcbiAgZXh0cmE/OiBQYXJ0aWFsPEFzc2lzdGFudE1lc3NhZ2U+LFxuKTogQXNzaXN0YW50TWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2Fzc2lzdGFudCcsXG4gICAgY29zdFVTRDogMCxcbiAgICBkdXJhdGlvbk1zOiAwLFxuICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBpZDogcmFuZG9tVVVJRCgpLFxuICAgICAgbW9kZWw6ICc8c3ludGhldGljPicsXG4gICAgICByb2xlOiAnYXNzaXN0YW50JyxcbiAgICAgIHN0b3BfcmVhc29uOiAnc3RvcF9zZXF1ZW5jZScsXG4gICAgICBzdG9wX3NlcXVlbmNlOiAnJyxcbiAgICAgIHR5cGU6ICdtZXNzYWdlJyxcbiAgICAgIHVzYWdlOiB7XG4gICAgICAgIGlucHV0X3Rva2VuczogMCxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiAwLFxuICAgICAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2VuczogMCxcbiAgICAgIH0sXG4gICAgICBjb250ZW50LFxuICAgIH0sXG4gICAgLi4uZXh0cmEsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UoY29udGVudDogc3RyaW5nKTogQXNzaXN0YW50TWVzc2FnZSB7XG4gIHJldHVybiBiYXNlQ3JlYXRlQXNzaXN0YW50TWVzc2FnZShbXG4gICAge1xuICAgICAgdHlwZTogJ3RleHQnIGFzIGNvbnN0LFxuICAgICAgdGV4dDogY29udGVudCA9PT0gJycgPyBOT19DT05URU5UX01FU1NBR0UgOiBjb250ZW50LFxuICAgICAgY2l0YXRpb25zOiBbXSxcbiAgICB9LFxuICBdKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXNzaXN0YW50QVBJRXJyb3JNZXNzYWdlKFxuICBjb250ZW50OiBzdHJpbmcsXG4pOiBBc3Npc3RhbnRNZXNzYWdlIHtcbiAgcmV0dXJuIGJhc2VDcmVhdGVBc3Npc3RhbnRNZXNzYWdlKFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3RleHQnIGFzIGNvbnN0LFxuICAgICAgICB0ZXh0OiBjb250ZW50ID09PSAnJyA/IE5PX0NPTlRFTlRfTUVTU0FHRSA6IGNvbnRlbnQsXG4gICAgICAgIGNpdGF0aW9uczogW10sXG4gICAgICB9LFxuICAgIF0sXG4gICAgeyBpc0FwaUVycm9yTWVzc2FnZTogdHJ1ZSB9LFxuICApXG59XG5cbmV4cG9ydCB0eXBlIEZ1bGxUb29sVXNlUmVzdWx0ID0ge1xuICBkYXRhOiB1bmtub3duIC8vIE1hdGNoZXMgdG9vbCdzIGBPdXRwdXRgIHR5cGVcbiAgcmVzdWx0Rm9yQXNzaXN0YW50OiBUb29sUmVzdWx0QmxvY2tQYXJhbVsnY29udGVudCddXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyTWVzc2FnZShcbiAgY29udGVudDogc3RyaW5nIHwgQ29udGVudEJsb2NrUGFyYW1bXSxcbiAgdG9vbFVzZVJlc3VsdD86IEZ1bGxUb29sVXNlUmVzdWx0LFxuKTogVXNlck1lc3NhZ2Uge1xuICBjb25zdCBtOiBVc2VyTWVzc2FnZSA9IHtcbiAgICB0eXBlOiAndXNlcicsXG4gICAgbWVzc2FnZToge1xuICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgY29udGVudCxcbiAgICB9LFxuICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICB0b29sVXNlUmVzdWx0LFxuICB9XG4gIHJldHVybiBtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9ncmVzc01lc3NhZ2UoXG4gIHRvb2xVc2VJRDogc3RyaW5nLFxuICBzaWJsaW5nVG9vbFVzZUlEczogU2V0PHN0cmluZz4sXG4gIGNvbnRlbnQ6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIG5vcm1hbGl6ZWRNZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXSxcbiAgdG9vbHM6IFRvb2xbXSxcbik6IFByb2dyZXNzTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3Byb2dyZXNzJyxcbiAgICBjb250ZW50LFxuICAgIG5vcm1hbGl6ZWRNZXNzYWdlcyxcbiAgICBzaWJsaW5nVG9vbFVzZUlEcyxcbiAgICB0b29scyxcbiAgICB0b29sVXNlSUQsXG4gICAgdXVpZDogcmFuZG9tVVVJRCgpLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb29sUmVzdWx0U3RvcE1lc3NhZ2UoXG4gIHRvb2xVc2VJRDogc3RyaW5nLFxuKTogVG9vbFJlc3VsdEJsb2NrUGFyYW0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICd0b29sX3Jlc3VsdCcsXG4gICAgY29udGVudDogQ0FOQ0VMX01FU1NBR0UsXG4gICAgaXNfZXJyb3I6IHRydWUsXG4gICAgdG9vbF91c2VfaWQ6IHRvb2xVc2VJRCxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1VzZXJJbnB1dChcbiAgaW5wdXQ6IHN0cmluZyxcbiAgbW9kZTogJ2Jhc2gnIHwgJ3Byb21wdCcsXG4gIHNldFRvb2xKU1g6IFNldFRvb2xKU1hGbixcbiAgY29udGV4dDogVG9vbFVzZUNvbnRleHQgJiB7XG4gICAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyOiAoXG4gICAgICBmb3JrQ29udm9XaXRoTWVzc2FnZXM6IE1lc3NhZ2VbXSxcbiAgICApID0+IHZvaWRcbiAgfSxcbiAgcGFzdGVkSW1hZ2U6IHN0cmluZyB8IG51bGwsXG4pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICAvLyBCYXNoIGNvbW1hbmRzXG4gIGlmIChtb2RlID09PSAnYmFzaCcpIHtcbiAgICBsb2dFdmVudCgndGVuZ3VfaW5wdXRfYmFzaCcsIHt9KVxuXG4gICAgY29uc3QgdXNlck1lc3NhZ2UgPSBjcmVhdGVVc2VyTWVzc2FnZShgPGJhc2gtaW5wdXQ+JHtpbnB1dH08L2Jhc2gtaW5wdXQ+YClcblxuICAgIC8vIFNwZWNpYWwgY2FzZTogY2RcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnY2QgJykpIHtcbiAgICAgIGNvbnN0IG9sZEN3ZCA9IGdldEN3ZCgpXG4gICAgICBjb25zdCBuZXdDd2QgPSByZXNvbHZlKG9sZEN3ZCwgaW5wdXQuc2xpY2UoMykpXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZXRDd2QobmV3Q3dkKVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHVzZXJNZXNzYWdlLFxuICAgICAgICAgIGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UoXG4gICAgICAgICAgICBgPGJhc2gtc3Rkb3V0PkNoYW5nZWQgZGlyZWN0b3J5IHRvICR7Y2hhbGsuYm9sZChgJHtuZXdDd2R9L2ApfTwvYmFzaC1zdGRvdXQ+YCxcbiAgICAgICAgICApLFxuICAgICAgICBdXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ0Vycm9yKGUpXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgdXNlck1lc3NhZ2UsXG4gICAgICAgICAgY3JlYXRlQXNzaXN0YW50TWVzc2FnZShcbiAgICAgICAgICAgIGA8YmFzaC1zdGRlcnI+Y3dkIGVycm9yOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX08L2Jhc2gtc3RkZXJyPmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbCBvdGhlciBiYXNoIGNvbW1hbmRzXG4gICAgc2V0VG9vbEpTWCh7XG4gICAgICBqc3g6IChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICA8VXNlckJhc2hJbnB1dE1lc3NhZ2VcbiAgICAgICAgICAgIGFkZE1hcmdpbj17ZmFsc2V9XG4gICAgICAgICAgICBwYXJhbT17eyB0ZXh0OiBgPGJhc2gtaW5wdXQ+JHtpbnB1dH08L2Jhc2gtaW5wdXQ+YCwgdHlwZTogJ3RleHQnIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICA8L0JveD5cbiAgICAgICksXG4gICAgICBzaG91bGRIaWRlUHJvbXB0SW5wdXQ6IGZhbHNlLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCBCYXNoVG9vbC52YWxpZGF0ZUlucHV0KHtcbiAgICAgICAgY29tbWFuZDogaW5wdXQsXG4gICAgICB9KVxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnJlc3VsdCkge1xuICAgICAgICByZXR1cm4gW3VzZXJNZXNzYWdlLCBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQubWVzc2FnZSldXG4gICAgICB9XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGxhc3RYKEJhc2hUb29sLmNhbGwoeyBjb21tYW5kOiBpbnB1dCB9LCBjb250ZXh0KSlcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHVzZXJNZXNzYWdlLFxuICAgICAgICBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlKFxuICAgICAgICAgIGA8YmFzaC1zdGRvdXQ+JHtkYXRhLnN0ZG91dH08L2Jhc2gtc3Rkb3V0PjxiYXNoLXN0ZGVycj4ke2RhdGEuc3RkZXJyfTwvYmFzaC1zdGRlcnI+YCxcbiAgICAgICAgKSxcbiAgICAgIF1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1c2VyTWVzc2FnZSxcbiAgICAgICAgY3JlYXRlQXNzaXN0YW50TWVzc2FnZShcbiAgICAgICAgICBgPGJhc2gtc3RkZXJyPkNvbW1hbmQgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX08L2Jhc2gtc3RkZXJyPmAsXG4gICAgICAgICksXG4gICAgICBdXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFRvb2xKU1gobnVsbClcbiAgICB9XG4gIH1cblxuICAvLyBTbGFzaCBjb21tYW5kc1xuICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgY29uc3Qgd29yZHMgPSBpbnB1dC5zbGljZSgxKS5zcGxpdCgnICcpXG4gICAgbGV0IGNvbW1hbmROYW1lID0gd29yZHNbMF1cbiAgICBpZiAod29yZHMubGVuZ3RoID4gMSAmJiB3b3Jkc1sxXSA9PT0gJyhNQ1ApJykge1xuICAgICAgY29tbWFuZE5hbWUgPSBjb21tYW5kTmFtZSArICcgKE1DUCknXG4gICAgfVxuICAgIGlmICghY29tbWFuZE5hbWUpIHtcbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9pbnB1dF9zbGFzaF9taXNzaW5nJywgeyBpbnB1dCB9KVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgY3JlYXRlQXNzaXN0YW50TWVzc2FnZSgnQ29tbWFuZHMgYXJlIGluIHRoZSBmb3JtIGAvY29tbWFuZCBbYXJnc11gJyksXG4gICAgICBdXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHJlYWwgY29tbWFuZCBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgIGlmICghaGFzQ29tbWFuZChjb21tYW5kTmFtZSwgY29udGV4dC5vcHRpb25zLmNvbW1hbmRzKSkge1xuICAgICAgLy8gSWYgbm90IGEgcmVhbCBjb21tYW5kLCB0cmVhdCBpdCBhcyBhIHJlZ3VsYXIgdXNlciBpbnB1dFxuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2lucHV0X3Byb21wdCcsIHt9KVxuICAgICAgcmV0dXJuIFtjcmVhdGVVc2VyTWVzc2FnZShpbnB1dCldXG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IGlucHV0LnNsaWNlKGNvbW1hbmROYW1lLmxlbmd0aCArIDIpXG4gICAgY29uc3QgbmV3TWVzc2FnZXMgPSBhd2FpdCBnZXRNZXNzYWdlc0ZvclNsYXNoQ29tbWFuZChcbiAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgYXJncyxcbiAgICAgIHNldFRvb2xKU1gsXG4gICAgICBjb250ZXh0LFxuICAgIClcblxuICAgIC8vIExvY2FsIEpTWCBjb21tYW5kc1xuICAgIGlmIChuZXdNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9pbnB1dF9jb21tYW5kJywgeyBpbnB1dCB9KVxuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgLy8gRm9yIGludmFsaWQgY29tbWFuZHMsIHByZXNlcnZlIGJvdGggdGhlIHVzZXIgbWVzc2FnZSBhbmQgZXJyb3JcbiAgICBpZiAoXG4gICAgICBuZXdNZXNzYWdlcy5sZW5ndGggPT09IDIgJiZcbiAgICAgIG5ld01lc3NhZ2VzWzBdIS50eXBlID09PSAndXNlcicgJiZcbiAgICAgIG5ld01lc3NhZ2VzWzFdIS50eXBlID09PSAnYXNzaXN0YW50JyAmJlxuICAgICAgdHlwZW9mIG5ld01lc3NhZ2VzWzFdIS5tZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUT0RPOiB0aGlzIGlzIHByb2JhYmx5IGEgYnVnXG4gICAgICBuZXdNZXNzYWdlc1sxXSEubWVzc2FnZS5jb250ZW50LnN0YXJ0c1dpdGgoJ1Vua25vd24gY29tbWFuZDonKVxuICAgICkge1xuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2lucHV0X3NsYXNoX2ludmFsaWQnLCB7IGlucHV0IH0pXG4gICAgICByZXR1cm4gbmV3TWVzc2FnZXNcbiAgICB9XG5cbiAgICAvLyBVc2VyLUFzc2lzdGFudCBwYWlyIChlZy4gbG9jYWwgY29tbWFuZHMpXG4gICAgaWYgKG5ld01lc3NhZ2VzLmxlbmd0aCA9PT0gMikge1xuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2lucHV0X2NvbW1hbmQnLCB7IGlucHV0IH0pXG4gICAgICByZXR1cm4gbmV3TWVzc2FnZXNcbiAgICB9XG5cbiAgICAvLyBBIHZhbGlkIGNvbW1hbmRcbiAgICBsb2dFdmVudCgndGVuZ3VfaW5wdXRfY29tbWFuZCcsIHsgaW5wdXQgfSlcbiAgICByZXR1cm4gbmV3TWVzc2FnZXNcbiAgfVxuXG4gIC8vIFJlZ3VsYXIgdXNlciBwcm9tcHRcbiAgbG9nRXZlbnQoJ3Rlbmd1X2lucHV0X3Byb21wdCcsIHt9KVxuICBpZiAocGFzdGVkSW1hZ2UpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3JlYXRlVXNlck1lc3NhZ2UoW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgIHR5cGU6ICdiYXNlNjQnLFxuICAgICAgICAgICAgbWVkaWFfdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICBkYXRhOiBwYXN0ZWRJbWFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHRleHQ6IGlucHV0LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgXVxuICB9XG4gIHJldHVybiBbY3JlYXRlVXNlck1lc3NhZ2UoaW5wdXQpXVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNZXNzYWdlc0ZvclNsYXNoQ29tbWFuZChcbiAgY29tbWFuZE5hbWU6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nLFxuICBzZXRUb29sSlNYOiBTZXRUb29sSlNYRm4sXG4gIGNvbnRleHQ6IFRvb2xVc2VDb250ZXh0ICYge1xuICAgIHNldEZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcjogKFxuICAgICAgZm9ya0NvbnZvV2l0aE1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gICAgKSA9PiB2b2lkXG4gIH0sXG4pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBnZXRDb21tYW5kKGNvbW1hbmROYW1lLCBjb250ZXh0Lm9wdGlvbnMuY29tbWFuZHMpXG4gICAgc3dpdGNoIChjb21tYW5kLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvY2FsLWpzeCc6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbW1hbmRcbiAgICAgICAgICAgIC5jYWxsKHIgPT4ge1xuICAgICAgICAgICAgICBzZXRUb29sSlNYKG51bGwpXG4gICAgICAgICAgICAgIHJlc29sdmUoW1xuICAgICAgICAgICAgICAgIGNyZWF0ZVVzZXJNZXNzYWdlKGA8Y29tbWFuZC1uYW1lPiR7Y29tbWFuZC51c2VyRmFjaW5nTmFtZSgpfTwvY29tbWFuZC1uYW1lPlxuICAgICAgICAgIDxjb21tYW5kLW1lc3NhZ2U+JHtjb21tYW5kLnVzZXJGYWNpbmdOYW1lKCl9PC9jb21tYW5kLW1lc3NhZ2U+XG4gICAgICAgICAgPGNvbW1hbmQtYXJncz4ke2FyZ3N9PC9jb21tYW5kLWFyZ3M+YCksXG4gICAgICAgICAgICAgICAgclxuICAgICAgICAgICAgICAgICAgPyBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlKHIpXG4gICAgICAgICAgICAgICAgICA6IGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UoTk9fUkVTUE9OU0VfUkVRVUVTVEVEKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIH0sIGNvbnRleHQpXG4gICAgICAgICAgICAudGhlbihqc3ggPT4ge1xuICAgICAgICAgICAgICBzZXRUb29sSlNYKHtcbiAgICAgICAgICAgICAgICBqc3gsXG4gICAgICAgICAgICAgICAgc2hvdWxkSGlkZVByb21wdElucHV0OiB0cnVlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xvY2FsJzoge1xuICAgICAgICBjb25zdCB1c2VyTWVzc2FnZSA9XG4gICAgICAgICAgY3JlYXRlVXNlck1lc3NhZ2UoYDxjb21tYW5kLW5hbWU+JHtjb21tYW5kLnVzZXJGYWNpbmdOYW1lKCl9PC9jb21tYW5kLW5hbWU+XG4gICAgICAgIDxjb21tYW5kLW1lc3NhZ2U+JHtjb21tYW5kLnVzZXJGYWNpbmdOYW1lKCl9PC9jb21tYW5kLW1lc3NhZ2U+XG4gICAgICAgIDxjb21tYW5kLWFyZ3M+JHthcmdzfTwvY29tbWFuZC1hcmdzPmApXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb21tYW5kLmNhbGwoYXJncywgY29udGV4dClcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB1c2VyTWVzc2FnZSxcbiAgICAgICAgICAgIGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGA8bG9jYWwtY29tbWFuZC1zdGRvdXQ+JHtyZXN1bHR9PC9sb2NhbC1jb21tYW5kLXN0ZG91dD5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2dFcnJvcihlKVxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB1c2VyTWVzc2FnZSxcbiAgICAgICAgICAgIGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGA8bG9jYWwtY29tbWFuZC1zdGRlcnI+JHtTdHJpbmcoZSl9PC9sb2NhbC1jb21tYW5kLXN0ZGVycj5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Byb21wdCc6IHtcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gYXdhaXQgY29tbWFuZC5nZXRQcm9tcHRGb3JDb21tYW5kKGFyZ3MpXG4gICAgICAgIHJldHVybiBwcm9tcHQubWFwKF8gPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgXy5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHJvbGU6IF8ucm9sZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBgPGNvbW1hbmQtbWVzc2FnZT4ke2NvbW1hbmQudXNlckZhY2luZ05hbWUoKX0gaXMgJHtjb21tYW5kLnByb2dyZXNzTWVzc2FnZX3igKY8L2NvbW1hbmQtbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPGNvbW1hbmQtbmFtZT4ke2NvbW1hbmQudXNlckZhY2luZ05hbWUoKX08L2NvbW1hbmQtbmFtZT5cbiAgICAgICAgICAgICAgICAgICAgPGNvbW1hbmQtYXJncz4ke2FyZ3N9PC9jb21tYW5kLWFyZ3M+XG4gICAgICAgICAgICAgICAgICAgIDxjb21tYW5kLWNvbnRlbnRzPiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgXy5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgKX08L2NvbW1hbmQtY29udGVudHM+YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICAgICAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIHJvbGU6IF8ucm9sZSxcbiAgICAgICAgICAgICAgY29udGVudDogXy5jb250ZW50Lm1hcChfID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF8udHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29tbWFuZC1tZXNzYWdlPiR7Y29tbWFuZC51c2VyRmFjaW5nTmFtZSgpfSBpcyAke2NvbW1hbmQucHJvZ3Jlc3NNZXNzYWdlfeKApjwvY29tbWFuZC1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbW1hbmQtbmFtZT4ke2NvbW1hbmQudXNlckZhY2luZ05hbWUoKX08L2NvbW1hbmQtbmFtZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb21tYW5kLWFyZ3M+JHthcmdzfTwvY29tbWFuZC1hcmdzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbW1hbmQtY29udGVudHM+JHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICl9PC9jb21tYW5kLWNvbnRlbnRzPlxuICAgICAgICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoZXNlIHdvbid0IHJlbmRlciBwcm9wZXJseVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBNYWxmb3JtZWRDb21tYW5kRXJyb3IpIHtcbiAgICAgIHJldHVybiBbY3JlYXRlQXNzaXN0YW50TWVzc2FnZShlLm1lc3NhZ2UpXVxuICAgIH1cbiAgICB0aHJvdyBlXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUYWdGcm9tTWVzc2FnZShcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgdGFnTmFtZTogc3RyaW5nLFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChtZXNzYWdlLnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGlmICh0eXBlb2YgbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gZXh0cmFjdFRhZyhtZXNzYWdlLm1lc3NhZ2UuY29udGVudCwgdGFnTmFtZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUYWcoaHRtbDogc3RyaW5nLCB0YWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFodG1sLnRyaW0oKSB8fCAhdGFnTmFtZS50cmltKCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgdGFnIG5hbWVcbiAgY29uc3QgZXNjYXBlZFRhZyA9IHRhZ05hbWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuXG4gIC8vIENyZWF0ZSByZWdleCBwYXR0ZXJuIHRoYXQgaGFuZGxlczpcbiAgLy8gMS4gU2VsZi1jbG9zaW5nIHRhZ3NcbiAgLy8gMi4gVGFncyB3aXRoIGF0dHJpYnV0ZXNcbiAgLy8gMy4gTmVzdGVkIHRhZ3Mgb2YgdGhlIHNhbWUgdHlwZVxuICAvLyA0LiBNdWx0aWxpbmUgY29udGVudFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICBgPCR7ZXNjYXBlZFRhZ30oPzpcXFxccytbXj5dKik/PmAgKyAvLyBPcGVuaW5nIHRhZyB3aXRoIG9wdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICAgICcoW1xcXFxzXFxcXFNdKj8pJyArIC8vIENvbnRlbnQgKG5vbi1ncmVlZHkgbWF0Y2gpXG4gICAgICBgPFxcXFwvJHtlc2NhcGVkVGFnfT5gLCAvLyBDbG9zaW5nIHRhZ1xuICAgICdnaScsXG4gIClcblxuICBsZXQgbWF0Y2hcbiAgbGV0IGRlcHRoID0gMFxuICBsZXQgbGFzdEluZGV4ID0gMFxuICBjb25zdCBvcGVuaW5nVGFnID0gbmV3IFJlZ0V4cChgPCR7ZXNjYXBlZFRhZ30oPzpcXFxccytbXj5dKj8pPz5gLCAnZ2knKVxuICBjb25zdCBjbG9zaW5nVGFnID0gbmV3IFJlZ0V4cChgPFxcXFwvJHtlc2NhcGVkVGFnfT5gLCAnZ2knKVxuXG4gIHdoaWxlICgobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XG4gICAgLy8gQ2hlY2sgZm9yIG5lc3RlZCB0YWdzXG4gICAgY29uc3QgY29udGVudCA9IG1hdGNoWzFdXG4gICAgY29uc3QgYmVmb3JlTWF0Y2ggPSBodG1sLnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpXG5cbiAgICAvLyBSZXNldCBkZXB0aCBjb3VudGVyXG4gICAgZGVwdGggPSAwXG5cbiAgICAvLyBDb3VudCBvcGVuaW5nIHRhZ3MgYmVmb3JlIHRoaXMgbWF0Y2hcbiAgICBvcGVuaW5nVGFnLmxhc3RJbmRleCA9IDBcbiAgICB3aGlsZSAob3BlbmluZ1RhZy5leGVjKGJlZm9yZU1hdGNoKSAhPT0gbnVsbCkge1xuICAgICAgZGVwdGgrK1xuICAgIH1cblxuICAgIC8vIENvdW50IGNsb3NpbmcgdGFncyBiZWZvcmUgdGhpcyBtYXRjaFxuICAgIGNsb3NpbmdUYWcubGFzdEluZGV4ID0gMFxuICAgIHdoaWxlIChjbG9zaW5nVGFnLmV4ZWMoYmVmb3JlTWF0Y2gpICE9PSBudWxsKSB7XG4gICAgICBkZXB0aC0tXG4gICAgfVxuXG4gICAgLy8gT25seSBpbmNsdWRlIGNvbnRlbnQgaWYgd2UncmUgYXQgdGhlIGNvcnJlY3QgbmVzdGluZyBsZXZlbFxuICAgIGlmIChkZXB0aCA9PT0gMCAmJiBjb250ZW50KSB7XG4gICAgICByZXR1cm4gY29udGVudFxuICAgIH1cblxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbXB0eU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICBpZiAobWVzc2FnZS50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50LnRyaW0oKS5sZW5ndGggPiAwXG4gIH1cblxuICBpZiAobWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBTa2lwIG11bHRpLWJsb2NrIG1lc3NhZ2VzIGZvciBub3dcbiAgaWYgKG1lc3NhZ2UubWVzc2FnZS5jb250ZW50Lmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKG1lc3NhZ2UubWVzc2FnZS5jb250ZW50WzBdIS50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICBtZXNzYWdlLm1lc3NhZ2UuY29udGVudFswXSEudGV4dC50cmltKCkubGVuZ3RoID4gMCAmJlxuICAgIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50WzBdIS50ZXh0ICE9PSBOT19DT05URU5UX01FU1NBR0UgJiZcbiAgICBtZXNzYWdlLm1lc3NhZ2UuY29udGVudFswXSEudGV4dCAhPT0gSU5URVJSVVBUX01FU1NBR0VfRk9SX1RPT0xfVVNFXG4gIClcbn1cblxuLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggcGxhaW4gVXNlck1lc3NhZ2UgaWYvd2hlbiBQUiAjNDA1IGxhbmRzXG50eXBlIE5vcm1hbGl6ZWRVc2VyTWVzc2FnZSA9IHtcbiAgbWVzc2FnZToge1xuICAgIGNvbnRlbnQ6IFtcbiAgICAgIHwgVGV4dEJsb2NrUGFyYW1cbiAgICAgIHwgSW1hZ2VCbG9ja1BhcmFtXG4gICAgICB8IFRvb2xVc2VCbG9ja1BhcmFtXG4gICAgICB8IFRvb2xSZXN1bHRCbG9ja1BhcmFtLFxuICAgIF1cbiAgICByb2xlOiAndXNlcidcbiAgfVxuICB0eXBlOiAndXNlcidcbiAgdXVpZDogVVVJRFxufVxuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkTWVzc2FnZSA9XG4gIHwgTm9ybWFsaXplZFVzZXJNZXNzYWdlXG4gIHwgQXNzaXN0YW50TWVzc2FnZVxuICB8IFByb2dyZXNzTWVzc2FnZVxuXG4vLyBTcGxpdCBtZXNzYWdlcywgc28gZWFjaCBjb250ZW50IGJsb2NrIGdldHMgaXRzIG93biBtZXNzYWdlXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE5vcm1hbGl6ZWRNZXNzYWdlW10ge1xuICByZXR1cm4gbWVzc2FnZXMuZmxhdE1hcChtZXNzYWdlID0+IHtcbiAgICBpZiAobWVzc2FnZS50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICByZXR1cm4gW21lc3NhZ2VdIGFzIE5vcm1hbGl6ZWRNZXNzYWdlW11cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbbWVzc2FnZV0gYXMgTm9ybWFsaXplZE1lc3NhZ2VbXVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQubWFwKF8gPT4ge1xuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXNzaXN0YW50JzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Fzc2lzdGFudCcsXG4gICAgICAgICAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIC4uLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICAgICAgY29udGVudDogW19dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvc3RVU0Q6XG4gICAgICAgICAgICAgIChtZXNzYWdlIGFzIEFzc2lzdGFudE1lc3NhZ2UpLmNvc3RVU0QgL1xuICAgICAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2UuY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiAobWVzc2FnZSBhcyBBc3Npc3RhbnRNZXNzYWdlKS5kdXJhdGlvbk1zLFxuICAgICAgICAgIH0gYXMgTm9ybWFsaXplZE1lc3NhZ2VcbiAgICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgICAgLy8gSXQgc2VlbXMgbGlrZSB0aGUgbGluZSBiZWxvdyB3YXMgYSBuby1vcCBiZWZvcmUsIGJ1dCBJJ20gbm90IHN1cmUuXG4gICAgICAgICAgLy8gVG8gY2hlY2ssIHdlIGNvdWxkIHRocm93IGFuIGVycm9yIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOlxuICAgICAgICAgIC8vIC0gbWVzc2FnZSBgcm9sZWAgZG9lcyBpc24ndCBgdXNlcmAgLS0gdGhpcyBwb3NzaWJpbGl0eSBpcyBhbGxvd2VkIGJ5IE1DUCB0b29scyxcbiAgICAgICAgICAvLyAgIHRob3VnaCBpc24ndCBzdXBwb3NlZCB0byBoYXBwZW4gaW4gcHJhY3RpY2UgKHdlIHNob3VsZCBmaXggdGhpcylcbiAgICAgICAgICAvLyAtIG1lc3NhZ2UgYGNvbnRlbnRgIGlzIG5vdCBhbiBhcnJheSAtLSB0aGlzIG9uZSBpcyBtb3JlIGNvbmNlcm5pbmcgYmVjYXVzZSBpdCdzXG4gICAgICAgICAgLy8gICBub3QgYWxsb3dlZCBieSB0aGUgYE5vcm1hbGl6ZWRVc2VyTWVzc2FnZWAgdHlwZSwgYnV0IGlmIGl0J3MgaGFwcGVuaW5nIHRoYXQgd2FzXG4gICAgICAgICAgLy8gICBwcm9iYWJseSBhIGJ1ZyBiZWZvcmUuXG4gICAgICAgICAgLy8gTWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nPyAtKGFiKVxuICAgICAgICAgIC8vIHJldHVybiBjcmVhdGVVc2VyTWVzc2FnZShbX10pIGFzIE5vcm1hbGl6ZWRNZXNzYWdlXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2UgYXMgTm9ybWFsaXplZFVzZXJNZXNzYWdlXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cblxudHlwZSBUb29sVXNlUmVxdWVzdE1lc3NhZ2UgPSBBc3Npc3RhbnRNZXNzYWdlICYge1xuICBtZXNzYWdlOiB7IGNvbnRlbnQ6IFRvb2xVc2VCbG9ja1tdIH1cbn1cblxuZnVuY3Rpb24gaXNUb29sVXNlUmVxdWVzdE1lc3NhZ2UoXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4pOiBtZXNzYWdlIGlzIFRvb2xVc2VSZXF1ZXN0TWVzc2FnZSB7XG4gIHJldHVybiAoXG4gICAgbWVzc2FnZS50eXBlID09PSAnYXNzaXN0YW50JyAmJlxuICAgICdjb3N0VVNEJyBpbiBtZXNzYWdlICYmXG4gICAgLy8gTm90ZTogc3RvcF9yZWFzb24gPT09ICd0b29sX3VzZScgaXMgdW5yZWxpYWJsZSAtLSBpdCdzIG5vdCBhbHdheXMgc2V0IGNvcnJlY3RseVxuICAgIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50LnNvbWUoXyA9PiBfLnR5cGUgPT09ICd0b29sX3VzZScpXG4gIClcbn1cblxuLy8gUmUtb3JkZXIsIHRvIG1vdmUgcmVzdWx0IG1lc3NhZ2VzIHRvIGJlIGFmdGVyIHRoZWlyIHRvb2wgdXNlIG1lc3NhZ2VzXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlck1lc3NhZ2VzKFxuICBtZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXSxcbik6IE5vcm1hbGl6ZWRNZXNzYWdlW10ge1xuICBjb25zdCBtczogTm9ybWFsaXplZE1lc3NhZ2VbXSA9IFtdXG4gIGNvbnN0IHRvb2xVc2VNZXNzYWdlczogVG9vbFVzZVJlcXVlc3RNZXNzYWdlW10gPSBbXVxuXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgIC8vIHRyYWNrIHRvb2wgdXNlIG1lc3NhZ2VzIHdlJ3ZlIHNlZW5cbiAgICBpZiAoaXNUb29sVXNlUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICAgIHRvb2xVc2VNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBhIHRvb2wgcHJvZ3Jlc3MgbWVzc2FnZS4uLlxuICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIC8vIHJlcGxhY2UgYW55IGV4aXN0aW5nIHByb2dyZXNzIG1lc3NhZ2VzIHdpdGggdGhpcyBvbmVcbiAgICAgIGNvbnN0IGV4aXN0aW5nUHJvZ3Jlc3NNZXNzYWdlID0gbXMuZmluZChcbiAgICAgICAgXyA9PiBfLnR5cGUgPT09ICdwcm9ncmVzcycgJiYgXy50b29sVXNlSUQgPT09IG1lc3NhZ2UudG9vbFVzZUlELFxuICAgICAgKVxuICAgICAgaWYgKGV4aXN0aW5nUHJvZ3Jlc3NNZXNzYWdlKSB7XG4gICAgICAgIG1zW21zLmluZGV4T2YoZXhpc3RpbmdQcm9ncmVzc01lc3NhZ2UpXSA9IG1lc3NhZ2VcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIC8vIG90aGVyd2lzZSwgaW5zZXJ0IGl0IGFmdGVyIGl0cyB0b29sIHVzZVxuICAgICAgY29uc3QgdG9vbFVzZU1lc3NhZ2UgPSB0b29sVXNlTWVzc2FnZXMuZmluZChcbiAgICAgICAgXyA9PiBfLm1lc3NhZ2UuY29udGVudFswXT8uaWQgPT09IG1lc3NhZ2UudG9vbFVzZUlELFxuICAgICAgKVxuICAgICAgaWYgKHRvb2xVc2VNZXNzYWdlKSB7XG4gICAgICAgIG1zLnNwbGljZShtcy5pbmRleE9mKHRvb2xVc2VNZXNzYWdlKSArIDEsIDAsIG1lc3NhZ2UpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBhIHRvb2wgcmVzdWx0LCBpbnNlcnQgaXQgYWZ0ZXIgaXRzIHRvb2wgdXNlIGFuZCBwcm9ncmVzcyBtZXNzYWdlc1xuICAgIGlmIChcbiAgICAgIG1lc3NhZ2UudHlwZSA9PT0gJ3VzZXInICYmXG4gICAgICBBcnJheS5pc0FycmF5KG1lc3NhZ2UubWVzc2FnZS5jb250ZW50KSAmJlxuICAgICAgbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRbMF0/LnR5cGUgPT09ICd0b29sX3Jlc3VsdCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHRvb2xVc2VJRCA9IChtZXNzYWdlLm1lc3NhZ2UuY29udGVudFswXSBhcyBUb29sUmVzdWx0QmxvY2tQYXJhbSlcbiAgICAgICAgPy50b29sX3VzZV9pZFxuXG4gICAgICAvLyBGaXJzdCBjaGVjayBmb3IgcHJvZ3Jlc3MgbWVzc2FnZXNcbiAgICAgIGNvbnN0IGxhc3RQcm9ncmVzc01lc3NhZ2UgPSBtcy5maW5kKFxuICAgICAgICBfID0+IF8udHlwZSA9PT0gJ3Byb2dyZXNzJyAmJiBfLnRvb2xVc2VJRCA9PT0gdG9vbFVzZUlELFxuICAgICAgKVxuICAgICAgaWYgKGxhc3RQcm9ncmVzc01lc3NhZ2UpIHtcbiAgICAgICAgbXMuc3BsaWNlKG1zLmluZGV4T2YobGFzdFByb2dyZXNzTWVzc2FnZSkgKyAxLCAwLCBtZXNzYWdlKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBwcm9ncmVzcyBtZXNzYWdlcywgY2hlY2sgZm9yIHRvb2wgdXNlIG1lc3NhZ2VzXG4gICAgICBjb25zdCB0b29sVXNlTWVzc2FnZSA9IHRvb2xVc2VNZXNzYWdlcy5maW5kKFxuICAgICAgICBfID0+IF8ubWVzc2FnZS5jb250ZW50WzBdPy5pZCA9PT0gdG9vbFVzZUlELFxuICAgICAgKVxuICAgICAgaWYgKHRvb2xVc2VNZXNzYWdlKSB7XG4gICAgICAgIG1zLnNwbGljZShtcy5pbmRleE9mKHRvb2xVc2VNZXNzYWdlKSArIDEsIDAsIG1lc3NhZ2UpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBqdXN0IGFkZCBpdCB0byB0aGUgbGlzdFxuICAgIGVsc2Uge1xuICAgICAgbXMucHVzaChtZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtc1xufVxuXG5jb25zdCBnZXRUb29sUmVzdWx0SURzID0gbWVtb2l6ZShcbiAgKG5vcm1hbGl6ZWRNZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXSk6IHsgW3Rvb2xVc2VJRDogc3RyaW5nXTogYm9vbGVhbiB9ID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgbm9ybWFsaXplZE1lc3NhZ2VzLmZsYXRNYXAoXyA9PlxuICAgICAgICBfLnR5cGUgPT09ICd1c2VyJyAmJiBfLm1lc3NhZ2UuY29udGVudFswXT8udHlwZSA9PT0gJ3Rvb2xfcmVzdWx0J1xuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXy5tZXNzYWdlLmNvbnRlbnRbMF0hLnRvb2xfdXNlX2lkLFxuICAgICAgICAgICAgICAgIF8ubWVzc2FnZS5jb250ZW50WzBdIS5pc19lcnJvciA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IChbXSBhcyBbc3RyaW5nLCBib29sZWFuXVtdKSxcbiAgICAgICksXG4gICAgKSxcbilcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVucmVzb2x2ZWRUb29sVXNlSURzKFxuICBub3JtYWxpemVkTWVzc2FnZXM6IE5vcm1hbGl6ZWRNZXNzYWdlW10sXG4pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IHRvb2xSZXN1bHRzID0gZ2V0VG9vbFJlc3VsdElEcyhub3JtYWxpemVkTWVzc2FnZXMpXG4gIHJldHVybiBuZXcgU2V0KFxuICAgIG5vcm1hbGl6ZWRNZXNzYWdlc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKFxuICAgICAgICAgIF8sXG4gICAgICAgICk6IF8gaXMgQXNzaXN0YW50TWVzc2FnZSAmIHtcbiAgICAgICAgICBtZXNzYWdlOiB7IGNvbnRlbnQ6IFtUb29sVXNlQmxvY2tQYXJhbV0gfVxuICAgICAgICB9ID0+XG4gICAgICAgICAgXy50eXBlID09PSAnYXNzaXN0YW50JyAmJlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoXy5tZXNzYWdlLmNvbnRlbnQpICYmXG4gICAgICAgICAgXy5tZXNzYWdlLmNvbnRlbnRbMF0/LnR5cGUgPT09ICd0b29sX3VzZScgJiZcbiAgICAgICAgICAhKF8ubWVzc2FnZS5jb250ZW50WzBdPy5pZCBpbiB0b29sUmVzdWx0cyksXG4gICAgICApXG4gICAgICAubWFwKF8gPT4gXy5tZXNzYWdlLmNvbnRlbnRbMF0uaWQpLFxuICApXG59XG5cbi8qKlxuICogVG9vbCB1c2VzIGFyZSBpbiBmbGlnaHQgaWYgZWl0aGVyOlxuICogMS4gVGhleSBoYXZlIGEgY29ycmVzcG9uZGluZyBwcm9ncmVzcyBtZXNzYWdlIGFuZCBubyByZXN1bHQgbWVzc2FnZVxuICogMi4gVGhleSBhcmUgdGhlIGZpcnN0IHVucmVzb3ZlZCB0b29sIHVzZVxuICpcbiAqIFRPRE86IEZpbmQgYSB3YXkgdG8gaGFyZGVuIHRoaXMgbG9naWMgdG8gbWFrZSBpdCBtb3JlIGV4cGxpY2l0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJblByb2dyZXNzVG9vbFVzZUlEcyhcbiAgbm9ybWFsaXplZE1lc3NhZ2VzOiBOb3JtYWxpemVkTWVzc2FnZVtdLFxuKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCB1bnJlc29sdmVkVG9vbFVzZUlEcyA9IGdldFVucmVzb2x2ZWRUb29sVXNlSURzKG5vcm1hbGl6ZWRNZXNzYWdlcylcbiAgY29uc3QgdG9vbFVzZUlEc1RoYXRIYXZlUHJvZ3Jlc3NNZXNzYWdlcyA9IG5ldyBTZXQoXG4gICAgbm9ybWFsaXplZE1lc3NhZ2VzLmZpbHRlcihfID0+IF8udHlwZSA9PT0gJ3Byb2dyZXNzJykubWFwKF8gPT4gXy50b29sVXNlSUQpLFxuICApXG4gIHJldHVybiBuZXcgU2V0KFxuICAgIChcbiAgICAgIG5vcm1hbGl6ZWRNZXNzYWdlcy5maWx0ZXIoXyA9PiB7XG4gICAgICAgIGlmIChfLnR5cGUgIT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8ubWVzc2FnZS5jb250ZW50WzBdPy50eXBlICE9PSAndG9vbF91c2UnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9vbFVzZUlEID0gXy5tZXNzYWdlLmNvbnRlbnRbMF0uaWRcbiAgICAgICAgaWYgKHRvb2xVc2VJRCA9PT0gdW5yZXNvbHZlZFRvb2xVc2VJRHMudmFsdWVzKCkubmV4dCgpLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0b29sVXNlSURzVGhhdEhhdmVQcm9ncmVzc01lc3NhZ2VzLmhhcyh0b29sVXNlSUQpICYmXG4gICAgICAgICAgdW5yZXNvbHZlZFRvb2xVc2VJRHMuaGFzKHRvb2xVc2VJRClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSkgYXMgQXNzaXN0YW50TWVzc2FnZVtdXG4gICAgKS5tYXAoXyA9PiAoXy5tZXNzYWdlLmNvbnRlbnRbMF0hIGFzIFRvb2xVc2VCbG9ja1BhcmFtKS5pZCksXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yZWRUb29sVXNlTWVzc2FnZXMoXG4gIG5vcm1hbGl6ZWRNZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXSxcbik6IEFzc2lzdGFudE1lc3NhZ2VbXSB7XG4gIGNvbnN0IHRvb2xSZXN1bHRzID0gZ2V0VG9vbFJlc3VsdElEcyhub3JtYWxpemVkTWVzc2FnZXMpXG4gIHJldHVybiBub3JtYWxpemVkTWVzc2FnZXMuZmlsdGVyKFxuICAgIF8gPT5cbiAgICAgIF8udHlwZSA9PT0gJ2Fzc2lzdGFudCcgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoXy5tZXNzYWdlLmNvbnRlbnQpICYmXG4gICAgICBfLm1lc3NhZ2UuY29udGVudFswXT8udHlwZSA9PT0gJ3Rvb2xfdXNlJyAmJlxuICAgICAgXy5tZXNzYWdlLmNvbnRlbnRbMF0/LmlkIGluIHRvb2xSZXN1bHRzICYmXG4gICAgICB0b29sUmVzdWx0c1tfLm1lc3NhZ2UuY29udGVudFswXT8uaWRdLFxuICApIGFzIEFzc2lzdGFudE1lc3NhZ2VbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTWVzc2FnZXNGb3JBUEkoXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW10sXG4pOiAoVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlKVtdIHtcbiAgY29uc3QgcmVzdWx0OiAoVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlKVtdID0gW11cbiAgbWVzc2FnZXNcbiAgICAuZmlsdGVyKF8gPT4gXy50eXBlICE9PSAncHJvZ3Jlc3MnKVxuICAgIC5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAndXNlcic6IHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBtZXNzYWdlIGlzIG5vdCBhIHRvb2wgcmVzdWx0LCBhZGQgaXQgdG8gdGhlIHJlc3VsdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KG1lc3NhZ2UubWVzc2FnZS5jb250ZW50KSB8fFxuICAgICAgICAgICAgbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRbMF0/LnR5cGUgIT09ICd0b29sX3Jlc3VsdCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGUgbGFzdCBtZXNzYWdlIGlzIG5vdCBhIHRvb2wgcmVzdWx0LCBhZGQgaXQgdG8gdGhlIHJlc3VsdFxuICAgICAgICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbGFzdChyZXN1bHQpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWxhc3RNZXNzYWdlIHx8XG4gICAgICAgICAgICBsYXN0TWVzc2FnZT8udHlwZSA9PT0gJ2Fzc2lzdGFudCcgfHxcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGxhc3RNZXNzYWdlLm1lc3NhZ2UuY29udGVudCkgfHxcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlLm1lc3NhZ2UuY29udGVudFswXT8udHlwZSAhPT0gJ3Rvb2xfcmVzdWx0J1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobWVzc2FnZSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgbWVyZ2UgdGhlIGN1cnJlbnQgbWVzc2FnZSB3aXRoIHRoZSBsYXN0IG1lc3NhZ2VcbiAgICAgICAgICByZXN1bHRbcmVzdWx0LmluZGV4T2YobGFzdE1lc3NhZ2UpXSA9IHtcbiAgICAgICAgICAgIC4uLmxhc3RNZXNzYWdlLFxuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICAgICAgLi4ubGFzdE1lc3NhZ2UubWVzc2FnZS5jb250ZW50LFxuICAgICAgICAgICAgICAgIC4uLm1lc3NhZ2UubWVzc2FnZS5jb250ZW50LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYXNzaXN0YW50JzpcbiAgICAgICAgICByZXN1bHQucHVzaChtZXNzYWdlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gU29tZXRpbWVzIHRoZSBBUEkgcmV0dXJucyBlbXB0eSBtZXNzYWdlcyAoZWcuIFwiXFxuXFxuXCIpLiBXZSBuZWVkIHRvIGZpbHRlciB0aGVzZSBvdXQsXG4vLyBvdGhlcndpc2UgdGhleSB3aWxsIGdpdmUgYW4gQVBJIGVycm9yIHdoZW4gd2Ugc2VuZCB0aGVtIHRvIHRoZSBBUEkgbmV4dCB0aW1lIHdlIGNhbGwgcXVlcnkoKS5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVDb250ZW50RnJvbUFQSShcbiAgY29udGVudDogQVBJTWVzc2FnZVsnY29udGVudCddLFxuKTogQVBJTWVzc2FnZVsnY29udGVudCddIHtcbiAgY29uc3QgZmlsdGVyZWRDb250ZW50ID0gY29udGVudC5maWx0ZXIoXG4gICAgXyA9PiBfLnR5cGUgIT09ICd0ZXh0JyB8fCBfLnRleHQudHJpbSgpLmxlbmd0aCA+IDAsXG4gIClcblxuICBpZiAoZmlsdGVyZWRDb250ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IE5PX0NPTlRFTlRfTUVTU0FHRSwgY2l0YXRpb25zOiBbXSB9XVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkQ29udGVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eU1lc3NhZ2VUZXh0KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHN0cmlwU3lzdGVtTWVzc2FnZXModGV4dCkudHJpbSgpID09PSAnJyB8fFxuICAgIHRleHQudHJpbSgpID09PSBOT19DT05URU5UX01FU1NBR0VcbiAgKVxufVxuY29uc3QgU1RSSVBQRURfVEFHUyA9IFtcbiAgJ2NvbW1pdF9hbmFseXNpcycsXG4gICdjb250ZXh0JyxcbiAgJ2Z1bmN0aW9uX2FuYWx5c2lzJyxcbiAgJ3ByX2FuYWx5c2lzJyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwU3lzdGVtTWVzc2FnZXMoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGA8KCR7U1RSSVBQRURfVEFHUy5qb2luKCd8Jyl9KT4uKj88L1xcXFwxPlxcbj9gLCAnZ3MnKVxuICByZXR1cm4gY29udGVudC5yZXBsYWNlKHJlZ2V4LCAnJykudHJpbSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sVXNlSUQobWVzc2FnZTogTm9ybWFsaXplZE1lc3NhZ2UpOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICBjYXNlICdhc3Npc3RhbnQnOlxuICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZS5jb250ZW50WzBdPy50eXBlICE9PSAndG9vbF91c2UnKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRbMF0uaWRcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UuY29udGVudFswXT8udHlwZSAhPT0gJ3Rvb2xfcmVzdWx0Jykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50WzBdLnRvb2xfdXNlX2lkXG4gICAgY2FzZSAncHJvZ3Jlc3MnOlxuICAgICAgcmV0dXJuIG1lc3NhZ2UudG9vbFVzZUlEXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RBc3Npc3RhbnRNZXNzYWdlSWQoXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW10sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBJdGVyYXRlIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgdG8gZmluZCB0aGUgbGFzdCBhc3Npc3RhbnQgbWVzc2FnZVxuICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV1cbiAgICBpZiAobWVzc2FnZSAmJiBtZXNzYWdlLnR5cGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZS5tZXNzYWdlLmlkXG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBnZXRNZXNzYWdlc0dldHRlciB9IGZyb20gJy4uL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSAnLi4vcXVlcnkuanMnXG5pbXBvcnQgVGV4dElucHV0IGZyb20gJy4vVGV4dElucHV0LmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IsIGdldEluTWVtb3J5RXJyb3JzIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgZ2V0R2l0U3RhdGUsIGdldElzR2l0LCBHaXRSZXBvU3RhdGUgfSBmcm9tICcuLi91dGlscy9naXQuanMnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICcuLi9ob29rcy91c2VUZXJtaW5hbFNpemUuanMnXG5pbXBvcnQgeyBnZXRBbnRocm9waWNBcGlLZXkgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBVU0VSX0FHRU5UIH0gZnJvbSAnLi4vdXRpbHMvaHR0cC5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IFBST0RVQ1RfTkFNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuaW1wb3J0IHsgQVBJX0VSUk9SX01FU1NBR0VfUFJFRklYLCBxdWVyeUhhaWt1IH0gZnJvbSAnLi4vc2VydmljZXMvY2xhdWRlLmpzJ1xuaW1wb3J0IHsgb3BlbkJyb3dzZXIgfSBmcm9tICcuLi91dGlscy9icm93c2VyLmpzJ1xuaW1wb3J0IHsgdXNlRXhpdE9uQ3RybENEIH0gZnJvbSAnLi4vaG9va3MvdXNlRXhpdE9uQ3RybENELmpzJ1xuXG5jb25zdCBHSVRIVUJfSVNTVUVTX1JFUE9fVVJMID1cbiAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbnRocm9waWNzL2NsYXVkZS1jb2RlL2lzc3VlcydcblxudHlwZSBQcm9wcyA9IHtcbiAgb25Eb25lKHJlc3VsdDogc3RyaW5nKTogdm9pZFxufVxuXG50eXBlIFN0ZXAgPSAndXNlcklucHV0JyB8ICdjb25zZW50JyB8ICdzdWJtaXR0aW5nJyB8ICdkb25lJ1xuXG50eXBlIEZlZWRiYWNrRGF0YSA9IHtcbiAgLy8gUmVtb3ZpbmcgYmVjYXVzZSBvZiBwcml2YWN5IGNvbmNlcm5zLiBBZGQgdGhpcyBiYWNrIGluIHdoZW4gd2UgaGF2ZSBhIG1vcmVcbiAgLy8gcm9idXN0IHRvb2wgZm9yIHZpZXdpbmcgZmVlZGJhY2sgZGF0YSB0aGF0IGNhbiBkZS1pZGVudGlmeSB1c2Vyc1xuICAvLyB1c2VyX2lkOiBzdHJpbmdcbiAgLy8gc2Vzc2lvbl9pZDogc3RyaW5nXG4gIG1lc3NhZ2VfY291bnQ6IG51bWJlclxuICBkYXRldGltZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgcGxhdGZvcm06IHN0cmluZ1xuICBnaXRSZXBvOiBib29sZWFuXG4gIHZlcnNpb246IHN0cmluZyB8IG51bGxcbiAgdHJhbnNjcmlwdDogTWVzc2FnZVtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCdWcoeyBvbkRvbmUgfTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSB1c2VTdGF0ZTxTdGVwPigndXNlcklucHV0JylcbiAgY29uc3QgW2N1cnNvck9mZnNldCwgc2V0Q3Vyc29yT2Zmc2V0XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtkZXNjcmlwdGlvbiwgc2V0RGVzY3JpcHRpb25dID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtmZWVkYmFja0lkLCBzZXRGZWVkYmFja0lkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2VudkluZm8sIHNldEVudkluZm9dID0gdXNlU3RhdGU8e1xuICAgIGlzR2l0OiBib29sZWFuXG4gICAgZ2l0U3RhdGU6IEdpdFJlcG9TdGF0ZSB8IG51bGxcbiAgfT4oeyBpc0dpdDogZmFsc2UsIGdpdFN0YXRlOiBudWxsIH0pXG4gIGNvbnN0IFt0aXRsZSwgc2V0VGl0bGVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgdGV4dElucHV0Q29sdW1ucyA9IHVzZVRlcm1pbmFsU2l6ZSgpLmNvbHVtbnMgLSA0XG4gIGNvbnN0IG1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNHZXR0ZXIoKSgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkRW52SW5mbygpIHtcbiAgICAgIGNvbnN0IGlzR2l0ID0gYXdhaXQgZ2V0SXNHaXQoKVxuICAgICAgbGV0IGdpdFN0YXRlOiBHaXRSZXBvU3RhdGUgfCBudWxsID0gbnVsbFxuICAgICAgaWYgKGlzR2l0KSB7XG4gICAgICAgIGdpdFN0YXRlID0gYXdhaXQgZ2V0R2l0U3RhdGUoKVxuICAgICAgfVxuICAgICAgc2V0RW52SW5mbyh7IGlzR2l0LCBnaXRTdGF0ZSB9KVxuICAgIH1cbiAgICB2b2lkIGxvYWRFbnZJbmZvKClcbiAgfSwgW10pXG5cbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcblxuICBjb25zdCBzdWJtaXRSZXBvcnQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0U3RlcCgnc3VibWl0dGluZycpXG4gICAgc2V0RXJyb3IobnVsbClcbiAgICBzZXRGZWVkYmFja0lkKG51bGwpXG5cbiAgICBjb25zdCByZXBvcnREYXRhID0ge1xuICAgICAgbWVzc2FnZV9jb3VudDogbWVzc2FnZXMubGVuZ3RoLFxuICAgICAgZGF0ZXRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgIGdpdFJlcG86IGVudkluZm8uaXNHaXQsXG4gICAgICB0ZXJtaW5hbDogZW52LnRlcm1pbmFsLFxuICAgICAgdmVyc2lvbjogTUFDUk8uVkVSU0lPTixcbiAgICAgIHRyYW5zY3JpcHQ6IG1lc3NhZ2VzLFxuICAgICAgZXJyb3JzOiBnZXRJbk1lbW9yeUVycm9ycygpLFxuICAgIH1cblxuICAgIGNvbnN0IFtyZXN1bHQsIHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3VibWl0RmVlZGJhY2socmVwb3J0RGF0YSksXG4gICAgICBnZW5lcmF0ZVRpdGxlKGRlc2NyaXB0aW9uKSxcbiAgICBdKVxuXG4gICAgc2V0VGl0bGUodClcblxuICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgaWYgKHJlc3VsdC5mZWVkYmFja0lkKSB7XG4gICAgICAgIHNldEZlZWRiYWNrSWQocmVzdWx0LmZlZWRiYWNrSWQpXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9idWdfcmVwb3J0X3N1Ym1pdHRlZCcsIHtcbiAgICAgICAgICBmZWVkYmFja19pZDogcmVzdWx0LmZlZWRiYWNrSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBzZXRTdGVwKCdkb25lJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXJyb3IoJ0NvdWxkIG5vdCBzdWJtaXQgZmVlZGJhY2suIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJylcbiAgICAgIHNldFN0ZXAoJ3VzZXJJbnB1dCcpXG4gICAgfVxuICB9LCBbZGVzY3JpcHRpb24sIGVudkluZm8uaXNHaXQsIG1lc3NhZ2VzXSlcblxuICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgIC8vIEFsbG93IGFueSBrZXkgcHJlc3MgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIGRvbmUgb3Igd2hlbiB0aGVyZSdzIGFuIGVycm9yXG4gICAgaWYgKHN0ZXAgPT09ICdkb25lJykge1xuICAgICAgaWYgKGtleS5yZXR1cm4gJiYgZmVlZGJhY2tJZCAmJiB0aXRsZSkge1xuICAgICAgICAvLyBPcGVuIEdpdEh1YiBpc3N1ZSBVUkwgd2hlbiBFbnRlciBpcyBwcmVzc2VkXG4gICAgICAgIGNvbnN0IGlzc3VlVXJsID0gY3JlYXRlR2l0SHViSXNzdWVVcmwoZmVlZGJhY2tJZCwgdGl0bGUsIGRlc2NyaXB0aW9uKVxuICAgICAgICB2b2lkIG9wZW5Ccm93c2VyKGlzc3VlVXJsKVxuICAgICAgfVxuICAgICAgb25Eb25lKCc8YmFzaC1zdGRvdXQ+QnVnIHJlcG9ydCBzdWJtaXR0ZWQ8L2Jhc2gtc3Rkb3V0PicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG9uRG9uZSgnPGJhc2gtc3RkZXJyPkVycm9yIHN1Ym1pdHRpbmcgYnVnIHJlcG9ydDwvYmFzaC1zdGRlcnI+JylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICBvbkRvbmUoJzxiYXNoLXN0ZGVycj5CdWcgcmVwb3J0IGNhbmNlbGxlZDwvYmFzaC1zdGRlcnI+JylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzdGVwID09PSAnY29uc2VudCcgJiYgKGtleS5yZXR1cm4gfHwgaW5wdXQgPT09ICcgJykpIHtcbiAgICAgIHZvaWQgc3VibWl0UmVwb3J0KClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJveFxuICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5wZXJtaXNzaW9ufVxuICAgICAgICBwYWRkaW5nWD17MX1cbiAgICAgICAgcGFkZGluZ0JvdHRvbT17MX1cbiAgICAgICAgZ2FwPXsxfVxuICAgICAgPlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPXt0aGVtZS5wZXJtaXNzaW9ufT5cbiAgICAgICAgICBTdWJtaXQgQnVnIFJlcG9ydFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIHtzdGVwID09PSAndXNlcklucHV0JyAmJiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxUZXh0PkRlc2NyaWJlIHRoZSBpc3N1ZSBiZWxvdzo8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHZhbHVlPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldERlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICBjb2x1bW5zPXt0ZXh0SW5wdXRDb2x1bW5zfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KCkgPT4gc2V0U3RlcCgnY29uc2VudCcpfVxuICAgICAgICAgICAgICBvbkV4aXRNZXNzYWdlPXsoKSA9PlxuICAgICAgICAgICAgICAgIG9uRG9uZSgnPGJhc2gtc3RkZXJyPkJ1ZyByZXBvcnQgY2FuY2VsbGVkPC9iYXNoLXN0ZGVycj4nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnNvck9mZnNldD17Y3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgICBvbkNoYW5nZUN1cnNvck9mZnNldD17c2V0Q3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj57ZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlByZXNzIGFueSBrZXkgdG8gY2xvc2U8L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKX1cblxuICAgICAgICB7c3RlcCA9PT0gJ2NvbnNlbnQnICYmIChcbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgcmVwb3J0IHdpbGwgaW5jbHVkZTo8L1RleHQ+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgLSBZb3VyIGJ1ZyBkZXNjcmlwdGlvbjogPFRleHQgZGltQ29sb3I+e2Rlc2NyaXB0aW9ufTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAtIEVudmlyb25tZW50IGluZm86eycgJ31cbiAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgIHtlbnYucGxhdGZvcm19LCB7ZW52LnRlcm1pbmFsfSwgdntNQUNSTy5WRVJTSU9OfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICB7ZW52SW5mby5naXRTdGF0ZSAmJiAoXG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAtIEdpdCByZXBvIG1ldGFkYXRhOnsnICd9XG4gICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgICAge2VudkluZm8uZ2l0U3RhdGUuYnJhbmNoTmFtZX1cbiAgICAgICAgICAgICAgICAgICAge2VudkluZm8uZ2l0U3RhdGUuY29tbWl0SGFzaFxuICAgICAgICAgICAgICAgICAgICAgID8gYCwgJHtlbnZJbmZvLmdpdFN0YXRlLmNvbW1pdEhhc2guc2xpY2UoMCwgNyl9YFxuICAgICAgICAgICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICAgICAgICAgIHtlbnZJbmZvLmdpdFN0YXRlLnJlbW90ZVVybFxuICAgICAgICAgICAgICAgICAgICAgID8gYCBAICR7ZW52SW5mby5naXRTdGF0ZS5yZW1vdGVVcmx9YFxuICAgICAgICAgICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICAgICAgICAgIHshZW52SW5mby5naXRTdGF0ZS5pc0hlYWRPblJlbW90ZSAmJiAnLCBub3Qgc3luY2VkJ31cbiAgICAgICAgICAgICAgICAgICAgeyFlbnZJbmZvLmdpdFN0YXRlLmlzQ2xlYW4gJiYgJywgaGFzIGxvY2FsIGNoYW5nZXMnfVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPFRleHQ+LSBDdXJyZW50IHNlc3Npb24gdHJhbnNjcmlwdDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICA8VGV4dCB3cmFwPVwid3JhcFwiIGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgIFdlIHdpbGwgdXNlIHlvdXIgZmVlZGJhY2sgdG8gZGVidWcgcmVsYXRlZCBpc3N1ZXMgb3IgdG8gaW1wcm92ZXsnICd9XG4gICAgICAgICAgICAgICAge1BST0RVQ1RfTkFNRX0mYXBvcztzIGZ1bmN0aW9uYWxpdHkgKGVnLiB0byByZWR1Y2UgdGhlIHJpc2sgb2ZcbiAgICAgICAgICAgICAgICBidWdzIG9jY3VycmluZyBpbiB0aGUgZnV0dXJlKS4gQW50aHJvcGljIHdpbGwgbm90IHRyYWluXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGl2ZSBtb2RlbHMgdXNpbmcgZmVlZGJhY2sgZnJvbSB7UFJPRFVDVF9OQU1FfS5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIFByZXNzIDxUZXh0IGJvbGQ+RW50ZXI8L1RleHQ+IHRvIGNvbmZpcm0gYW5kIHN1Ym1pdC5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICl9XG5cbiAgICAgICAge3N0ZXAgPT09ICdzdWJtaXR0aW5nJyAmJiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxUZXh0PlN1Ym1pdHRpbmcgcmVwb3J04oCmPC9UZXh0PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApfVxuXG4gICAgICAgIHtzdGVwID09PSAnZG9uZScgJiYgKFxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuc3VjY2Vzc30+VGhhbmsgeW91IGZvciB5b3VyIHJlcG9ydCE8L1RleHQ+XG4gICAgICAgICAgICB7ZmVlZGJhY2tJZCAmJiA8VGV4dCBkaW1Db2xvcj5GZWVkYmFjayBJRDoge2ZlZWRiYWNrSWR9PC9UZXh0Pn1cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgPFRleHQ+UHJlc3MgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dCBib2xkPkVudGVyIDwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgdG8gYWxzbyBjcmVhdGUgYSBHaXRIdWIgaXNzdWUsIG9yIGFueSBvdGhlciBrZXkgdG8gY2xvc2UuXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApfVxuICAgICAgPC9Cb3g+XG5cbiAgICAgIDxCb3ggbWFyZ2luTGVmdD17M30+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIHtleGl0U3RhdGUucGVuZGluZyA/IChcbiAgICAgICAgICAgIDw+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC8+XG4gICAgICAgICAgKSA6IHN0ZXAgPT09ICd1c2VySW5wdXQnID8gKFxuICAgICAgICAgICAgPD5FbnRlciB0byBjb250aW51ZSDCtyBFc2MgdG8gY2FuY2VsPC8+XG4gICAgICAgICAgKSA6IHN0ZXAgPT09ICdjb25zZW50JyA/IChcbiAgICAgICAgICAgIDw+RW50ZXIgdG8gc3VibWl0IMK3IEVzYyB0byBjYW5jZWw8Lz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlR2l0SHViSXNzdWVVcmwoXG4gIGZlZWRiYWNrSWQ6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGJvZHkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgYCoqQnVnIERlc2NyaXB0aW9uKipcXG4ke2Rlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgYCoqRW52aXJvbm1lbnQgSW5mbyoqXFxuYCArXG4gICAgICBgLSBQbGF0Zm9ybTogJHtlbnYucGxhdGZvcm19XFxuYCArXG4gICAgICBgLSBUZXJtaW5hbDogJHtlbnYudGVybWluYWx9XFxuYCArXG4gICAgICBgLSBWZXJzaW9uOiAke01BQ1JPLlZFUlNJT04gfHwgJ3Vua25vd24nfVxcbmAgK1xuICAgICAgYC0gRmVlZGJhY2sgSUQ6ICR7ZmVlZGJhY2tJZH1cXG5gLFxuICApXG4gIHJldHVybiBgJHtHSVRIVUJfSVNTVUVTX1JFUE9fVVJMfS9uZXc/dGl0bGU9JHtlbmNvZGVVUklDb21wb25lbnQodGl0bGUpfSZib2R5PSR7Ym9keX0mbGFiZWxzPXVzZXItcmVwb3J0ZWQsYnVnYFxufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRpdGxlKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHF1ZXJ5SGFpa3Uoe1xuICAgIHN5c3RlbVByb21wdDogW1xuICAgICAgJ0dlbmVyYXRlIGEgY29uY2lzZSBpc3N1ZSB0aXRsZSAobWF4IDgwIGNoYXJzKSB0aGF0IGNhcHR1cmVzIHRoZSBrZXkgcG9pbnQgb2YgdGhpcyBmZWVkYmFjay4gRG8gbm90IGluY2x1ZGUgcXVvdGVzIG9yIHByZWZpeGVzIGxpa2UgXCJGZWVkYmFjazpcIiBvciBcIklzc3VlOlwiLiBJZiB5b3UgY2Fubm90IGdlbmVyYXRlIGEgdGl0bGUsIGp1c3QgdXNlIFwiVXNlciBGZWVkYmFja1wiLicsXG4gICAgXSxcbiAgICB1c2VyUHJvbXB0OiBkZXNjcmlwdGlvbixcbiAgfSlcbiAgY29uc3QgdGl0bGUgPVxuICAgIHJlc3BvbnNlLm1lc3NhZ2UuY29udGVudFswXT8udHlwZSA9PT0gJ3RleHQnXG4gICAgICA/IHJlc3BvbnNlLm1lc3NhZ2UuY29udGVudFswXS50ZXh0XG4gICAgICA6ICdCdWcgUmVwb3J0J1xuICBpZiAodGl0bGUuc3RhcnRzV2l0aChBUElfRVJST1JfTUVTU0FHRV9QUkVGSVgpKSB7XG4gICAgcmV0dXJuIGBCdWcgUmVwb3J0OiAke2Rlc2NyaXB0aW9uLnNsaWNlKDAsIDYwKX0ke2Rlc2NyaXB0aW9uLmxlbmd0aCA+IDYwID8gJy4uLicgOiAnJ31gXG4gIH1cbiAgcmV0dXJuIHRpdGxlXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEZlZWRiYWNrKFxuICBkYXRhOiBGZWVkYmFja0RhdGEsXG4pOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZmVlZGJhY2tJZD86IHN0cmluZyB9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXBpS2V5ID0gZ2V0QW50aHJvcGljQXBpS2V5KClcbiAgICBpZiAoIWFwaUtleSkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS9hcGkvY2xhdWRlX2NsaV9mZWVkYmFjaycsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnVXNlci1BZ2VudCc6IFVTRVJfQUdFTlQsXG4gICAgICAgICAgJ3gtYXBpLWtleSc6IGFwaUtleSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgIGlmIChyZXN1bHQ/LmZlZWRiYWNrX2lkKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGZlZWRiYWNrSWQ6IHJlc3VsdC5mZWVkYmFja19pZCB9XG4gICAgICB9XG4gICAgICBsb2dFcnJvcignRmFpbGVkIHRvIHN1Ym1pdCBmZWVkYmFjazogcmVxdWVzdCBkaWQgbm90IHJldHVybiBmZWVkYmFja19pZCcpXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoJ0ZhaWxlZCB0byBzdWJtaXQgZmVlZGJhY2s6JyArIHJlc3BvbnNlLnN0YXR1cylcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ0Vycm9yKFxuICAgICAgJ0Vycm9yIHN1Ym1pdHRpbmcgZmVlZGJhY2s6ICcgK1xuICAgICAgICAoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyksXG4gICAgKVxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlIH1cbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IE1lc3NhZ2UgfSBmcm9tICcuL3F1ZXJ5LmpzJ1xuXG5sZXQgZ2V0TWVzc2FnZXM6ICgpID0+IE1lc3NhZ2VbXSA9ICgpID0+IFtdXG5sZXQgc2V0TWVzc2FnZXM6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPE1lc3NhZ2VbXT4+ID0gKCkgPT4ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1lc3NhZ2VzR2V0dGVyKGdldHRlcjogKCkgPT4gTWVzc2FnZVtdKSB7XG4gIGdldE1lc3NhZ2VzID0gZ2V0dGVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlc0dldHRlcigpOiAoKSA9PiBNZXNzYWdlW10ge1xuICByZXR1cm4gZ2V0TWVzc2FnZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1lc3NhZ2VzU2V0dGVyKFxuICBzZXR0ZXI6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPE1lc3NhZ2VbXT4+LFxuKSB7XG4gIHNldE1lc3NhZ2VzID0gc2V0dGVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlc1NldHRlcigpOiBSZWFjdC5EaXNwYXRjaDxcbiAgUmVhY3QuU2V0U3RhdGVBY3Rpb248TWVzc2FnZVtdPlxuPiB7XG4gIHJldHVybiBzZXRNZXNzYWdlc1xufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7IHVzZVRleHRJbnB1dCB9IGZyb20gJy4uL2hvb2tzL3VzZVRleHRJbnB1dC5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyB0eXBlIEtleSB9IGZyb20gJ2luaydcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjYWxsYmFjayBmb3IgaGFuZGxpbmcgaGlzdG9yeSBuYXZpZ2F0aW9uIG9uIHVwIGFycm93IGF0IHN0YXJ0IG9mIGlucHV0XG4gICAqL1xuICByZWFkb25seSBvbkhpc3RvcnlVcD86ICgpID0+IHZvaWRcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGhhbmRsaW5nIGhpc3RvcnkgbmF2aWdhdGlvbiBvbiBkb3duIGFycm93IGF0IGVuZCBvZiBpbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgb25IaXN0b3J5RG93bj86ICgpID0+IHZvaWRcblxuICAvKipcbiAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gYHZhbHVlYCBpcyBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEFsbG93IG11bHRpLWxpbmUgaW5wdXQgdmlhIGxpbmUgZW5kaW5nIHdpdGggYmFja3NsYXNoIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICByZWFkb25seSBtdWx0aWxpbmU/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byB1c2VyJ3MgaW5wdXQuIFVzZWZ1bCBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnB1dCBjb21wb25lbnRzXG4gICAqIGF0IHRoZSBzYW1lIHRpbWUgYW5kIGlucHV0IG11c3QgYmUgXCJyb3V0ZWRcIiB0byBhIHNwZWNpZmljIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGZvY3VzPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGFsbCBjaGFycyBhbmQgbWFzayB0aGUgdmFsdWUuIFVzZWZ1bCBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFzaz86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgY3Vyc29yIGFuZCBhbGxvdyBuYXZpZ2F0aW9uIGluc2lkZSB0ZXh0IGlucHV0IHdpdGggYXJyb3cga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dDdXJzb3I/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEhpZ2hsaWdodCBwYXN0ZWQgdGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgaGlnaGxpZ2h0UGFzdGVkVGV4dD86IGJvb2xlYW5cblxuICAvKipcbiAgICogVmFsdWUgdG8gZGlzcGxheSBpbiBhIHRleHQgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB2YWx1ZSB1cGRhdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBgRW50ZXJgIGlzIHByZXNzZWQsIHdoZXJlIGZpcnN0IGFyZ3VtZW50IGlzIGEgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgb25TdWJtaXQ/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gQ3RybCtDIGlzIHByZXNzZWQgdG8gZXhpdC5cbiAgICovXG4gIHJlYWRvbmx5IG9uRXhpdD86ICgpID0+IHZvaWRcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgdG8gc2hvdyBleGl0IG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IG9uRXhpdE1lc3NhZ2U/OiAoc2hvdzogYm9vbGVhbiwga2V5Pzogc3RyaW5nKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHNob3cgY3VzdG9tIG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IG9uTWVzc2FnZT86IChzaG93OiBib29sZWFuLCBtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlc2V0IGhpc3RvcnkgcG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG9uSGlzdG9yeVJlc2V0PzogKCkgPT4gdm9pZFxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgY29sdW1ucyB0byB3cmFwIHRleHQgYXRcbiAgICovXG4gIHJlYWRvbmx5IGNvbHVtbnM6IG51bWJlclxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjYWxsYmFjayB3aGVuIGFuIGltYWdlIGlzIHBhc3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgb25JbWFnZVBhc3RlPzogKGJhc2U2NEltYWdlOiBzdHJpbmcpID0+IHZvaWRcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgd2hlbiBhIGxhcmdlIHRleHQgKG92ZXIgODAwIGNoYXJzKSBpcyBwYXN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG9uUGFzdGU/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGRpbW1lZCBhbmQgbm9uLWludGVyYWN0aXZlXG4gICAqL1xuICByZWFkb25seSBpc0RpbW1lZD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGN1cnNvciBtb3ZlbWVudCBmb3IgdXAvZG93biBhcnJvdyBrZXlzXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlQ3Vyc29yTW92ZW1lbnRGb3JVcERvd25LZXlzPzogYm9vbGVhblxuXG4gIHJlYWRvbmx5IGN1cnNvck9mZnNldDogbnVtYmVyXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIHNldCB0aGUgb2Zmc2V0IG9mIHRoZSBjdXJzb3JcbiAgICovXG4gIG9uQ2hhbmdlQ3Vyc29yT2Zmc2V0OiAob2Zmc2V0OiBudW1iZXIpID0+IHZvaWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgdmFsdWU6IG9yaWdpbmFsVmFsdWUsXG4gIHBsYWNlaG9sZGVyID0gJycsXG4gIGZvY3VzID0gdHJ1ZSxcbiAgbWFzayxcbiAgbXVsdGlsaW5lID0gZmFsc2UsXG4gIGhpZ2hsaWdodFBhc3RlZFRleHQgPSBmYWxzZSxcbiAgc2hvd0N1cnNvciA9IHRydWUsXG4gIG9uQ2hhbmdlLFxuICBvblN1Ym1pdCxcbiAgb25FeGl0LFxuICBvbkhpc3RvcnlVcCxcbiAgb25IaXN0b3J5RG93bixcbiAgb25FeGl0TWVzc2FnZSxcbiAgb25NZXNzYWdlLFxuICBvbkhpc3RvcnlSZXNldCxcbiAgY29sdW1ucyxcbiAgb25JbWFnZVBhc3RlLFxuICBvblBhc3RlLFxuICBpc0RpbW1lZCA9IGZhbHNlLFxuICBkaXNhYmxlQ3Vyc29yTW92ZW1lbnRGb3JVcERvd25LZXlzID0gZmFsc2UsXG4gIGN1cnNvck9mZnNldCxcbiAgb25DaGFuZ2VDdXJzb3JPZmZzZXQsXG59OiBQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBvbklucHV0LCByZW5kZXJlZFZhbHVlIH0gPSB1c2VUZXh0SW5wdXQoe1xuICAgIHZhbHVlOiBvcmlnaW5hbFZhbHVlLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9uU3VibWl0LFxuICAgIG9uRXhpdCxcbiAgICBvbkV4aXRNZXNzYWdlLFxuICAgIG9uTWVzc2FnZSxcbiAgICBvbkhpc3RvcnlSZXNldCxcbiAgICBvbkhpc3RvcnlVcCxcbiAgICBvbkhpc3RvcnlEb3duLFxuICAgIGZvY3VzLFxuICAgIG1hc2ssXG4gICAgbXVsdGlsaW5lLFxuICAgIGN1cnNvckNoYXI6IHNob3dDdXJzb3IgPyAnICcgOiAnJyxcbiAgICBoaWdobGlnaHRQYXN0ZWRUZXh0LFxuICAgIGludmVydDogY2hhbGsuaW52ZXJzZSxcbiAgICB0aGVtZVRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IGNoYWxrLmhleChnZXRUaGVtZSgpLnRleHQpKHRleHQpLFxuICAgIGNvbHVtbnMsXG4gICAgb25JbWFnZVBhc3RlLFxuICAgIGRpc2FibGVDdXJzb3JNb3ZlbWVudEZvclVwRG93bktleXMsXG4gICAgZXh0ZXJuYWxPZmZzZXQ6IGN1cnNvck9mZnNldCxcbiAgICBvbk9mZnNldENoYW5nZTogb25DaGFuZ2VDdXJzb3JPZmZzZXQsXG4gIH0pXG5cbiAgLy8gUGFzdGUgZGV0ZWN0aW9uIHN0YXRlXG4gIGNvbnN0IFtwYXN0ZVN0YXRlLCBzZXRQYXN0ZVN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlPHtcbiAgICBjaHVua3M6IHN0cmluZ1tdXG4gICAgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGxcbiAgfT4oeyBjaHVua3M6IFtdLCB0aW1lb3V0SWQ6IG51bGwgfSlcblxuICBjb25zdCByZXNldFBhc3RlVGltZW91dCA9IChcbiAgICBjdXJyZW50VGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwsXG4gICkgPT4ge1xuICAgIGlmIChjdXJyZW50VGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQoY3VycmVudFRpbWVvdXRJZClcbiAgICB9XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0UGFzdGVTdGF0ZSgoeyBjaHVua3MgfSkgPT4ge1xuICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gY2h1bmtzLmpvaW4oJycpXG4gICAgICAgIC8vIFNjaGVkdWxlIGNhbGxiYWNrIGFmdGVyIGN1cnJlbnQgcmVuZGVyIHRvIGF2b2lkIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHJlbmRlclxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IG9uUGFzdGUhKHBhc3RlZFRleHQpKVxuICAgICAgICByZXR1cm4geyBjaHVua3M6IFtdLCB0aW1lb3V0SWQ6IG51bGwgfVxuICAgICAgfSlcbiAgICB9LCAxMDApXG4gIH1cblxuICBjb25zdCB3cmFwcGVkT25JbnB1dCA9IChpbnB1dDogc3RyaW5nLCBrZXk6IEtleSk6IHZvaWQgPT4ge1xuICAgIC8vIEhhbmRsZSBwYXN0ZXMgKD44MDAgY2hhcnMpXG4gICAgLy8gVXN1YWxseSB3ZSBnZXQgb25lIG9yIHR3byBpbnB1dCBjaGFyYWN0ZXJzIGF0IGEgdGltZS4gSWYgd2VcbiAgICAvLyBnZXQgYSBidW5jaCwgdGhlIHVzZXIgaGFzIHByb2JhYmx5IHBhc3RlZC5cbiAgICAvLyBVbmZvcnR1bmF0ZWx5IG5vZGUgYmF0Y2hlcyBsb25nIHBhc3Rlcywgc28gaXQncyBwb3NzaWJsZVxuICAgIC8vIHRoYXQgd2Ugd291bGQgc2VlIGUuZy4gMTAyNCBjaGFyYWN0ZXJzIGFuZCB0aGVuIGp1c3QgYSBmZXdcbiAgICAvLyBtb3JlIGluIHRoZSBuZXh0IGZyYW1lIHRoYXQgYmVsb25nIHdpdGggdGhlIG9yaWdpbmFsIHBhc3RlLlxuICAgIC8vIFRoaXMgYmF0Y2hpbmcgbnVtYmVyIGlzIG5vdCBjb25zaXN0ZW50LlxuICAgIGlmIChvblBhc3RlICYmIChpbnB1dC5sZW5ndGggPiA4MDAgfHwgcGFzdGVTdGF0ZS50aW1lb3V0SWQpKSB7XG4gICAgICBzZXRQYXN0ZVN0YXRlKCh7IGNodW5rcywgdGltZW91dElkIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaHVua3M6IFsuLi5jaHVua3MsIGlucHV0XSxcbiAgICAgICAgICB0aW1lb3V0SWQ6IHJlc2V0UGFzdGVUaW1lb3V0KHRpbWVvdXRJZCksXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvbklucHV0KGlucHV0LCBrZXkpXG4gIH1cblxuICB1c2VJbnB1dCh3cmFwcGVkT25JbnB1dCwgeyBpc0FjdGl2ZTogZm9jdXMgfSlcblxuICBsZXQgcmVuZGVyZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyXG4gICAgPyBjaGFsay5oZXgoZ2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0KShwbGFjZWhvbGRlcilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIC8vIEZha2UgbW91c2UgY3Vyc29yLCBiZWNhdXNlIHdlIGxpa2UgcHVuaXNobWVudFxuICBpZiAoc2hvd0N1cnNvciAmJiBmb2N1cykge1xuICAgIHJlbmRlcmVkUGxhY2Vob2xkZXIgPVxuICAgICAgcGxhY2Vob2xkZXIubGVuZ3RoID4gMFxuICAgICAgICA/IGNoYWxrLmludmVyc2UocGxhY2Vob2xkZXJbMF0pICtcbiAgICAgICAgICBjaGFsay5oZXgoZ2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0KShwbGFjZWhvbGRlci5zbGljZSgxKSlcbiAgICAgICAgOiBjaGFsay5pbnZlcnNlKCcgJylcbiAgfVxuXG4gIGNvbnN0IHNob3dQbGFjZWhvbGRlciA9IG9yaWdpbmFsVmFsdWUubGVuZ3RoID09IDAgJiYgcGxhY2Vob2xkZXJcbiAgcmV0dXJuIChcbiAgICA8VGV4dCB3cmFwPVwidHJ1bmNhdGUtZW5kXCIgZGltQ29sb3I9e2lzRGltbWVkfT5cbiAgICAgIHtzaG93UGxhY2Vob2xkZXIgPyByZW5kZXJlZFBsYWNlaG9sZGVyIDogcmVuZGVyZWRWYWx1ZX1cbiAgICA8L1RleHQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHR5cGUgS2V5IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgdXNlRG91YmxlUHJlc3MgfSBmcm9tICcuL3VzZURvdWJsZVByZXNzLmpzJ1xuaW1wb3J0IHsgQ3Vyc29yIH0gZnJvbSAnLi4vdXRpbHMvQ3Vyc29yLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SW1hZ2VGcm9tQ2xpcGJvYXJkLFxuICBDTElQQk9BUkRfRVJST1JfTUVTU0FHRSxcbn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2VQYXN0ZS5qcydcblxuY29uc3QgSU1BR0VfUExBQ0VIT0xERVIgPSAnW0ltYWdlIHBhc3RlZF0nXG5cbnR5cGUgTWF5YmVDdXJzb3IgPSB2b2lkIHwgQ3Vyc29yXG50eXBlIElucHV0SGFuZGxlciA9IChpbnB1dDogc3RyaW5nKSA9PiBNYXliZUN1cnNvclxudHlwZSBJbnB1dE1hcHBlciA9IChpbnB1dDogc3RyaW5nKSA9PiBNYXliZUN1cnNvclxuZnVuY3Rpb24gbWFwSW5wdXQoaW5wdXRfbWFwOiBBcnJheTxbc3RyaW5nLCBJbnB1dEhhbmRsZXJdPik6IElucHV0TWFwcGVyIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpbnB1dDogc3RyaW5nKTogTWF5YmVDdXJzb3Ige1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTWFwKGlucHV0X21hcCkuZ2V0KGlucHV0KSA/PyAoKCkgPT4ge30pXG4gICAgcmV0dXJuIGhhbmRsZXIoaW5wdXQpXG4gIH1cbn1cblxudHlwZSBVc2VUZXh0SW5wdXRQcm9wcyA9IHtcbiAgdmFsdWU6IHN0cmluZ1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgb25TdWJtaXQ/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICBvbkV4aXQ/OiAoKSA9PiB2b2lkXG4gIG9uRXhpdE1lc3NhZ2U/OiAoc2hvdzogYm9vbGVhbiwga2V5Pzogc3RyaW5nKSA9PiB2b2lkXG4gIG9uTWVzc2FnZT86IChzaG93OiBib29sZWFuLCBtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkXG4gIG9uSGlzdG9yeVVwPzogKCkgPT4gdm9pZFxuICBvbkhpc3RvcnlEb3duPzogKCkgPT4gdm9pZFxuICBvbkhpc3RvcnlSZXNldD86ICgpID0+IHZvaWRcbiAgZm9jdXM/OiBib29sZWFuXG4gIG1hc2s/OiBzdHJpbmdcbiAgbXVsdGlsaW5lPzogYm9vbGVhblxuICBjdXJzb3JDaGFyOiBzdHJpbmdcbiAgaGlnaGxpZ2h0UGFzdGVkVGV4dD86IGJvb2xlYW5cbiAgaW52ZXJ0OiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgdGhlbWVUZXh0OiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgY29sdW1uczogbnVtYmVyXG4gIG9uSW1hZ2VQYXN0ZT86IChiYXNlNjRJbWFnZTogc3RyaW5nKSA9PiB2b2lkXG4gIGRpc2FibGVDdXJzb3JNb3ZlbWVudEZvclVwRG93bktleXM/OiBib29sZWFuXG4gIGV4dGVybmFsT2Zmc2V0OiBudW1iZXJcbiAgb25PZmZzZXRDaGFuZ2U6IChvZmZzZXQ6IG51bWJlcikgPT4gdm9pZFxufVxuXG50eXBlIFVzZVRleHRJbnB1dFJlc3VsdCA9IHtcbiAgcmVuZGVyZWRWYWx1ZTogc3RyaW5nXG4gIG9uSW5wdXQ6IChpbnB1dDogc3RyaW5nLCBrZXk6IEtleSkgPT4gdm9pZFxuICBvZmZzZXQ6IG51bWJlclxuICBzZXRPZmZzZXQ6IChvZmZzZXQ6IG51bWJlcikgPT4gdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVGV4dElucHV0KHtcbiAgdmFsdWU6IG9yaWdpbmFsVmFsdWUsXG4gIG9uQ2hhbmdlLFxuICBvblN1Ym1pdCxcbiAgb25FeGl0LFxuICBvbkV4aXRNZXNzYWdlLFxuICBvbk1lc3NhZ2UsXG4gIG9uSGlzdG9yeVVwLFxuICBvbkhpc3RvcnlEb3duLFxuICBvbkhpc3RvcnlSZXNldCxcbiAgbWFzayA9ICcnLFxuICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgY3Vyc29yQ2hhcixcbiAgaW52ZXJ0LFxuICBjb2x1bW5zLFxuICBvbkltYWdlUGFzdGUsXG4gIGRpc2FibGVDdXJzb3JNb3ZlbWVudEZvclVwRG93bktleXMgPSBmYWxzZSxcbiAgZXh0ZXJuYWxPZmZzZXQsXG4gIG9uT2Zmc2V0Q2hhbmdlLFxufTogVXNlVGV4dElucHV0UHJvcHMpOiBVc2VUZXh0SW5wdXRSZXN1bHQge1xuICBjb25zdCBvZmZzZXQgPSBleHRlcm5hbE9mZnNldFxuICBjb25zdCBzZXRPZmZzZXQgPSBvbk9mZnNldENoYW5nZVxuICBjb25zdCBjdXJzb3IgPSBDdXJzb3IuZnJvbVRleHQob3JpZ2luYWxWYWx1ZSwgY29sdW1ucywgb2Zmc2V0KVxuICBjb25zdCBbaW1hZ2VQYXN0ZUVycm9yVGltZW91dCwgc2V0SW1hZ2VQYXN0ZUVycm9yVGltZW91dF0gPVxuICAgIHVzZVN0YXRlPE5vZGVKUy5UaW1lb3V0IHwgbnVsbD4obnVsbClcblxuICBmdW5jdGlvbiBtYXliZUNsZWFySW1hZ2VQYXN0ZUVycm9yVGltZW91dCgpIHtcbiAgICBpZiAoIWltYWdlUGFzdGVFcnJvclRpbWVvdXQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjbGVhclRpbWVvdXQoaW1hZ2VQYXN0ZUVycm9yVGltZW91dClcbiAgICBzZXRJbWFnZVBhc3RlRXJyb3JUaW1lb3V0KG51bGwpXG4gICAgb25NZXNzYWdlPy4oZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDdHJsQyA9IHVzZURvdWJsZVByZXNzKFxuICAgIHNob3cgPT4ge1xuICAgICAgbWF5YmVDbGVhckltYWdlUGFzdGVFcnJvclRpbWVvdXQoKVxuICAgICAgb25FeGl0TWVzc2FnZT8uKHNob3csICdDdHJsLUMnKVxuICAgIH0sXG4gICAgKCkgPT4gb25FeGl0Py4oKSxcbiAgICAoKSA9PiB7XG4gICAgICBpZiAob3JpZ2luYWxWYWx1ZSkge1xuICAgICAgICBvbkNoYW5nZSgnJylcbiAgICAgICAgb25IaXN0b3J5UmVzZXQ/LigpXG4gICAgICB9XG4gICAgfSxcbiAgKVxuXG4gIC8vIEtlZXAgRXNjYXBlIGZvciBjbGVhcmluZyBpbnB1dFxuICBjb25zdCBoYW5kbGVFc2NhcGUgPSB1c2VEb3VibGVQcmVzcyhcbiAgICBzaG93ID0+IHtcbiAgICAgIG1heWJlQ2xlYXJJbWFnZVBhc3RlRXJyb3JUaW1lb3V0KClcbiAgICAgIG9uTWVzc2FnZT8uKCEhb3JpZ2luYWxWYWx1ZSAmJiBzaG93LCBgUHJlc3MgRXNjYXBlIGFnYWluIHRvIGNsZWFyYClcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgIGlmIChvcmlnaW5hbFZhbHVlKSB7XG4gICAgICAgIG9uQ2hhbmdlKCcnKVxuICAgICAgfVxuICAgIH0sXG4gIClcbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgcmV0dXJuIEN1cnNvci5mcm9tVGV4dCgnJywgY29sdW1ucywgMClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVtcHR5Q3RybEQgPSB1c2VEb3VibGVQcmVzcyhcbiAgICBzaG93ID0+IG9uRXhpdE1lc3NhZ2U/LihzaG93LCAnQ3RybC1EJyksXG4gICAgKCkgPT4gb25FeGl0Py4oKSxcbiAgKVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUN0cmxEKCk6IE1heWJlQ3Vyc29yIHtcbiAgICBtYXliZUNsZWFySW1hZ2VQYXN0ZUVycm9yVGltZW91dCgpXG4gICAgaWYgKGN1cnNvci50ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2hlbiBpbnB1dCBpcyBlbXB0eSwgaGFuZGxlIGRvdWJsZS1wcmVzc1xuICAgICAgaGFuZGxlRW1wdHlDdHJsRCgpXG4gICAgICByZXR1cm4gY3Vyc29yXG4gICAgfVxuICAgIC8vIFdoZW4gaW5wdXQgaXMgbm90IGVtcHR5LCBkZWxldGUgZm9yd2FyZCBsaWtlIGlQeXRob25cbiAgICByZXR1cm4gY3Vyc29yLmRlbCgpXG4gIH1cblxuICBmdW5jdGlvbiB0cnlJbWFnZVBhc3RlKCkge1xuICAgIGNvbnN0IGJhc2U2NEltYWdlID0gZ2V0SW1hZ2VGcm9tQ2xpcGJvYXJkKClcbiAgICBpZiAoYmFzZTY0SW1hZ2UgPT09IG51bGwpIHtcbiAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnZGFyd2luJykge1xuICAgICAgICByZXR1cm4gY3Vyc29yXG4gICAgICB9XG4gICAgICBvbk1lc3NhZ2U/Lih0cnVlLCBDTElQQk9BUkRfRVJST1JfTUVTU0FHRSlcbiAgICAgIG1heWJlQ2xlYXJJbWFnZVBhc3RlRXJyb3JUaW1lb3V0KClcbiAgICAgIHNldEltYWdlUGFzdGVFcnJvclRpbWVvdXQoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEJ1biBpcyBvdmVybG9hZGluZyB0eXBlcyBoZXJlLCBidXQgd2UncmUgdXNpbmcgdGhlIE5vZGVKUyBydW50aW1lXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9uTWVzc2FnZT8uKGZhbHNlKVxuICAgICAgICB9LCA0MDAwKSxcbiAgICAgIClcbiAgICAgIHJldHVybiBjdXJzb3JcbiAgICB9XG5cbiAgICBvbkltYWdlUGFzdGU/LihiYXNlNjRJbWFnZSlcbiAgICByZXR1cm4gY3Vyc29yLmluc2VydChJTUFHRV9QTEFDRUhPTERFUilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUN0cmwgPSBtYXBJbnB1dChbXG4gICAgWydhJywgKCkgPT4gY3Vyc29yLnN0YXJ0T2ZMaW5lKCldLFxuICAgIFsnYicsICgpID0+IGN1cnNvci5sZWZ0KCldLFxuICAgIFsnYycsIGhhbmRsZUN0cmxDXSxcbiAgICBbJ2QnLCBoYW5kbGVDdHJsRF0sXG4gICAgWydlJywgKCkgPT4gY3Vyc29yLmVuZE9mTGluZSgpXSxcbiAgICBbJ2YnLCAoKSA9PiBjdXJzb3IucmlnaHQoKV0sXG4gICAgWydoJywgKCkgPT4gY3Vyc29yLmJhY2tzcGFjZSgpXSxcbiAgICBbJ2snLCAoKSA9PiBjdXJzb3IuZGVsZXRlVG9MaW5lRW5kKCldLFxuICAgIFsnbCcsICgpID0+IGNsZWFyKCldLFxuICAgIFsnbicsICgpID0+IGRvd25Pckhpc3RvcnlEb3duKCldLFxuICAgIFsncCcsICgpID0+IHVwT3JIaXN0b3J5VXAoKV0sXG4gICAgWyd1JywgKCkgPT4gY3Vyc29yLmRlbGV0ZVRvTGluZVN0YXJ0KCldLFxuICAgIFsndicsIHRyeUltYWdlUGFzdGVdLFxuICAgIFsndycsICgpID0+IGN1cnNvci5kZWxldGVXb3JkQmVmb3JlKCldLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZU1ldGEgPSBtYXBJbnB1dChbXG4gICAgWydiJywgKCkgPT4gY3Vyc29yLnByZXZXb3JkKCldLFxuICAgIFsnZicsICgpID0+IGN1cnNvci5uZXh0V29yZCgpXSxcbiAgICBbJ2QnLCAoKSA9PiBjdXJzb3IuZGVsZXRlV29yZEFmdGVyKCldLFxuICBdKVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVudGVyKGtleTogS2V5KSB7XG4gICAgaWYgKFxuICAgICAgbXVsdGlsaW5lICYmXG4gICAgICBjdXJzb3Iub2Zmc2V0ID4gMCAmJlxuICAgICAgY3Vyc29yLnRleHRbY3Vyc29yLm9mZnNldCAtIDFdID09PSAnXFxcXCdcbiAgICApIHtcbiAgICAgIHJldHVybiBjdXJzb3IuYmFja3NwYWNlKCkuaW5zZXJ0KCdcXG4nKVxuICAgIH1cbiAgICBpZiAoa2V5Lm1ldGEpIHtcbiAgICAgIHJldHVybiBjdXJzb3IuaW5zZXJ0KCdcXG4nKVxuICAgIH1cbiAgICBvblN1Ym1pdD8uKG9yaWdpbmFsVmFsdWUpXG4gIH1cblxuICBmdW5jdGlvbiB1cE9ySGlzdG9yeVVwKCkge1xuICAgIGlmIChkaXNhYmxlQ3Vyc29yTW92ZW1lbnRGb3JVcERvd25LZXlzKSB7XG4gICAgICBvbkhpc3RvcnlVcD8uKClcbiAgICAgIHJldHVybiBjdXJzb3JcbiAgICB9XG4gICAgY29uc3QgY3Vyc29yVXAgPSBjdXJzb3IudXAoKVxuICAgIGlmIChjdXJzb3JVcC5lcXVhbHMoY3Vyc29yKSkge1xuICAgICAgLy8gYWxyZWFkeSBhdCBiZWdpbm5pbmdcbiAgICAgIG9uSGlzdG9yeVVwPy4oKVxuICAgIH1cbiAgICByZXR1cm4gY3Vyc29yVXBcbiAgfVxuICBmdW5jdGlvbiBkb3duT3JIaXN0b3J5RG93bigpIHtcbiAgICBpZiAoZGlzYWJsZUN1cnNvck1vdmVtZW50Rm9yVXBEb3duS2V5cykge1xuICAgICAgb25IaXN0b3J5RG93bj8uKClcbiAgICAgIHJldHVybiBjdXJzb3JcbiAgICB9XG4gICAgY29uc3QgY3Vyc29yRG93biA9IGN1cnNvci5kb3duKClcbiAgICBpZiAoY3Vyc29yRG93bi5lcXVhbHMoY3Vyc29yKSkge1xuICAgICAgb25IaXN0b3J5RG93bj8uKClcbiAgICB9XG4gICAgcmV0dXJuIGN1cnNvckRvd25cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcEtleShrZXk6IEtleSk6IElucHV0TWFwcGVyIHtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2Uga2V5LmVzY2FwZTpcbiAgICAgICAgcmV0dXJuIGhhbmRsZUVzY2FwZVxuICAgICAgY2FzZSBrZXkubGVmdEFycm93ICYmIChrZXkuY3RybCB8fCBrZXkubWV0YSB8fCBrZXkuZm4pOlxuICAgICAgICByZXR1cm4gKCkgPT4gY3Vyc29yLnByZXZXb3JkKClcbiAgICAgIGNhc2Uga2V5LnJpZ2h0QXJyb3cgJiYgKGtleS5jdHJsIHx8IGtleS5tZXRhIHx8IGtleS5mbik6XG4gICAgICAgIHJldHVybiAoKSA9PiBjdXJzb3IubmV4dFdvcmQoKVxuICAgICAgY2FzZSBrZXkuYmFja3NwYWNlOlxuICAgICAgICByZXR1cm4ga2V5Lm1ldGFcbiAgICAgICAgICA/ICgpID0+IGN1cnNvci5kZWxldGVXb3JkQmVmb3JlKClcbiAgICAgICAgICA6ICgpID0+IGN1cnNvci5iYWNrc3BhY2UoKVxuICAgICAgY2FzZSBrZXkuZGVsZXRlOlxuICAgICAgICByZXR1cm4ga2V5Lm1ldGEgPyAoKSA9PiBjdXJzb3IuZGVsZXRlVG9MaW5lRW5kKCkgOiAoKSA9PiBjdXJzb3IuZGVsKClcbiAgICAgIGNhc2Uga2V5LmN0cmw6XG4gICAgICAgIHJldHVybiBoYW5kbGVDdHJsXG4gICAgICBjYXNlIGtleS5ob21lOlxuICAgICAgICByZXR1cm4gKCkgPT4gY3Vyc29yLnN0YXJ0T2ZMaW5lKClcbiAgICAgIGNhc2Uga2V5LmVuZDpcbiAgICAgICAgcmV0dXJuICgpID0+IGN1cnNvci5lbmRPZkxpbmUoKVxuICAgICAgY2FzZSBrZXkucGFnZURvd246XG4gICAgICAgIHJldHVybiAoKSA9PiBjdXJzb3IuZW5kT2ZMaW5lKClcbiAgICAgIGNhc2Uga2V5LnBhZ2VVcDpcbiAgICAgICAgcmV0dXJuICgpID0+IGN1cnNvci5zdGFydE9mTGluZSgpXG4gICAgICBjYXNlIGtleS5tZXRhOlxuICAgICAgICByZXR1cm4gaGFuZGxlTWV0YVxuICAgICAgY2FzZSBrZXkucmV0dXJuOlxuICAgICAgICByZXR1cm4gKCkgPT4gaGFuZGxlRW50ZXIoa2V5KVxuICAgICAgY2FzZSBrZXkudGFiOlxuICAgICAgICByZXR1cm4gKCkgPT4ge31cbiAgICAgIGNhc2Uga2V5LnVwQXJyb3c6XG4gICAgICAgIHJldHVybiB1cE9ySGlzdG9yeVVwXG4gICAgICBjYXNlIGtleS5kb3duQXJyb3c6XG4gICAgICAgIHJldHVybiBkb3duT3JIaXN0b3J5RG93blxuICAgICAgY2FzZSBrZXkubGVmdEFycm93OlxuICAgICAgICByZXR1cm4gKCkgPT4gY3Vyc29yLmxlZnQoKVxuICAgICAgY2FzZSBrZXkucmlnaHRBcnJvdzpcbiAgICAgICAgcmV0dXJuICgpID0+IGN1cnNvci5yaWdodCgpXG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoaW5wdXQ6IHN0cmluZykge1xuICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgIC8vIEhvbWUga2V5XG4gICAgICAgIGNhc2UgaW5wdXQgPT0gJ1xceDFiW0gnIHx8IGlucHV0ID09ICdcXHgxYlsxfic6XG4gICAgICAgICAgcmV0dXJuIGN1cnNvci5zdGFydE9mTGluZSgpXG4gICAgICAgIC8vIEVuZCBrZXlcbiAgICAgICAgY2FzZSBpbnB1dCA9PSAnXFx4MWJbRicgfHwgaW5wdXQgPT0gJ1xceDFiWzR+JzpcbiAgICAgICAgICByZXR1cm4gY3Vyc29yLmVuZE9mTGluZSgpXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGN1cnNvci5pbnNlcnQoaW5wdXQucmVwbGFjZSgvXFxyL2csICdcXG4nKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbklucHV0KGlucHV0OiBzdHJpbmcsIGtleTogS2V5KTogdm9pZCB7XG4gICAgY29uc3QgbmV4dEN1cnNvciA9IG1hcEtleShrZXkpKGlucHV0KVxuICAgIGlmIChuZXh0Q3Vyc29yKSB7XG4gICAgICBpZiAoIWN1cnNvci5lcXVhbHMobmV4dEN1cnNvcikpIHtcbiAgICAgICAgc2V0T2Zmc2V0KG5leHRDdXJzb3Iub2Zmc2V0KVxuICAgICAgICBpZiAoY3Vyc29yLnRleHQgIT0gbmV4dEN1cnNvci50ZXh0KSB7XG4gICAgICAgICAgb25DaGFuZ2UobmV4dEN1cnNvci50ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbklucHV0LFxuICAgIHJlbmRlcmVkVmFsdWU6IGN1cnNvci5yZW5kZXIoY3Vyc29yQ2hhciwgbWFzaywgaW52ZXJ0KSxcbiAgICBvZmZzZXQsXG4gICAgc2V0T2Zmc2V0LFxuICB9XG59XG4iLAogICAgIi8vIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIG9uZSBmdW5jdGlvbiBvbiB0aGUgZmlyc3QgY2FsbCBhbmQgYW5vdGhlclxuLy8gZnVuY3Rpb24gb24gdGhlIHNlY29uZCBjYWxsIHdpdGhpbiBhIGNlcnRhaW4gdGltZW91dFxuXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IERPVUJMRV9QUkVTU19USU1FT1VUX01TID0gMjAwMFxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRG91YmxlUHJlc3MoXG4gIHNldFBlbmRpbmc6IChwZW5kaW5nOiBib29sZWFuKSA9PiB2b2lkLFxuICBvbkRvdWJsZVByZXNzOiAoKSA9PiB2b2lkLFxuICBvbkZpcnN0UHJlc3M/OiAoKSA9PiB2b2lkLFxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGxhc3RQcmVzc1JlZiA9IHVzZVJlZjxudW1iZXI+KDApXG4gIGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWY8Tm9kZUpTLlRpbWVvdXQ+KClcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0UHJlc3MgPSBub3cgLSBsYXN0UHJlc3NSZWYuY3VycmVudFxuXG4gICAgLy8gRm9yIHRoaXMgdG8gY291bnQgYXMgYSBkb3VibGUtY2FsbCwgYmUgc3VyZSB0byBjaGVjayB0aGF0XG4gICAgLy8gdGltZW91dFJlZi5jdXJyZW50IGV4aXN0cyBzbyB3ZSBkb24ndCB0cmlnZ2VyIG9uIHRyaXBsZSBjYWxsXG4gICAgLy8gKGUuZy4gb2YgRXNjIHRvIGNsZWFyIHRoZSB0ZXh0IGlucHV0KVxuICAgIGlmICh0aW1lU2luY2VMYXN0UHJlc3MgPD0gRE9VQkxFX1BSRVNTX1RJTUVPVVRfTVMgJiYgdGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICBpZiAodGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgICAgIHRpbWVvdXRSZWYuY3VycmVudCA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgb25Eb3VibGVQcmVzcygpXG4gICAgICBzZXRQZW5kaW5nKGZhbHNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkZpcnN0UHJlc3M/LigpXG4gICAgICBzZXRQZW5kaW5nKHRydWUpXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBCdW4gaXMgb3ZlcmxvYWRpbmcgdHlwZXMgaGVyZSwgYnV0IHdlJ3JlIHVzaW5nIHRoZSBOb2RlSlMgcnVudGltZVxuICAgICAgdGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gc2V0UGVuZGluZyhmYWxzZSksXG4gICAgICAgIERPVUJMRV9QUkVTU19USU1FT1VUX01TLFxuICAgICAgKVxuICAgIH1cblxuICAgIGxhc3RQcmVzc1JlZi5jdXJyZW50ID0gbm93XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHdyYXBBbnNpIGZyb20gJ3dyYXAtYW5zaSdcblxudHlwZSBXcmFwcGVkVGV4dCA9IHN0cmluZ1tdXG50eXBlIFBvc2l0aW9uID0ge1xuICBsaW5lOiBudW1iZXJcbiAgY29sdW1uOiBudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIEN1cnNvciB7XG4gIHJlYWRvbmx5IG9mZnNldDogbnVtYmVyXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1lYXN1cmVkVGV4dDogTWVhc3VyZWRUZXh0LFxuICAgIG9mZnNldDogbnVtYmVyID0gMCxcbiAgICByZWFkb25seSBzZWxlY3Rpb246IG51bWJlciA9IDAsXG4gICkge1xuICAgIC8vIGl0J3Mgb2sgZm9yIHRoZSBjdXJzb3IgdG8gYmUgMSBjaGFyIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmdcbiAgICB0aGlzLm9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMubWVhc3VyZWRUZXh0LnRleHQubGVuZ3RoLCBvZmZzZXQpKVxuICB9XG5cbiAgc3RhdGljIGZyb21UZXh0KFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBjb2x1bW5zOiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIgPSAwLFxuICAgIHNlbGVjdGlvbjogbnVtYmVyID0gMCxcbiAgKTogQ3Vyc29yIHtcbiAgICAvLyBtYWtlIE1lYXN1cmVkVGV4dCBvbiBsZXNzIHRoYW4gY29sdW1ucyB3aWR0aCwgdG8gYWNjb3VudCBmb3IgY3Vyc29yXG4gICAgcmV0dXJuIG5ldyBDdXJzb3IobmV3IE1lYXN1cmVkVGV4dCh0ZXh0LCBjb2x1bW5zIC0gMSksIG9mZnNldCwgc2VsZWN0aW9uKVxuICB9XG5cbiAgcmVuZGVyKGN1cnNvckNoYXI6IHN0cmluZywgbWFzazogc3RyaW5nLCBpbnZlcnQ6ICh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgIGNvbnN0IHsgbGluZSwgY29sdW1uIH0gPSB0aGlzLmdldFBvc2l0aW9uKClcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlZFRleHRcbiAgICAgIC5nZXRXcmFwcGVkVGV4dCgpXG4gICAgICAubWFwKCh0ZXh0LCBjdXJyZW50TGluZSwgYWxsTGluZXMpID0+IHtcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dFxuICAgICAgICBpZiAobWFzayAmJiBjdXJyZW50TGluZSA9PT0gYWxsTGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RTaXhTdGFydCA9IE1hdGgubWF4KDAsIHRleHQubGVuZ3RoIC0gNilcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IG1hc2sucmVwZWF0KGxhc3RTaXhTdGFydCkgKyB0ZXh0LnNsaWNlKGxhc3RTaXhTdGFydClcbiAgICAgICAgfVxuICAgICAgICAvLyBsb29raW5nIGZvciB0aGUgbGluZSB3aXRoIHRoZSBjdXJzb3JcbiAgICAgICAgaWYgKGxpbmUgIT0gY3VycmVudExpbmUpIHJldHVybiBkaXNwbGF5VGV4dC50cmltRW5kKClcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGRpc3BsYXlUZXh0LnNsaWNlKDAsIGNvbHVtbikgK1xuICAgICAgICAgIGludmVydChkaXNwbGF5VGV4dFtjb2x1bW5dIHx8IGN1cnNvckNoYXIpICtcbiAgICAgICAgICBkaXNwbGF5VGV4dC50cmltRW5kKCkuc2xpY2UoY29sdW1uICsgMSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XG5cbiAgbGVmdCgpOiBDdXJzb3Ige1xuICAgIHJldHVybiBuZXcgQ3Vyc29yKHRoaXMubWVhc3VyZWRUZXh0LCB0aGlzLm9mZnNldCAtIDEpXG4gIH1cblxuICByaWdodCgpOiBDdXJzb3Ige1xuICAgIHJldHVybiBuZXcgQ3Vyc29yKHRoaXMubWVhc3VyZWRUZXh0LCB0aGlzLm9mZnNldCArIDEpXG4gIH1cblxuICB1cCgpOiBDdXJzb3Ige1xuICAgIGNvbnN0IHsgbGluZSwgY29sdW1uIH0gPSB0aGlzLmdldFBvc2l0aW9uKClcbiAgICBpZiAobGluZSA9PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IEN1cnNvcih0aGlzLm1lYXN1cmVkVGV4dCwgMCwgMClcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPZmZzZXQgPSB0aGlzLmdldE9mZnNldCh7IGxpbmU6IGxpbmUgLSAxLCBjb2x1bW4gfSlcbiAgICByZXR1cm4gbmV3IEN1cnNvcih0aGlzLm1lYXN1cmVkVGV4dCwgbmV3T2Zmc2V0LCAwKVxuICB9XG5cbiAgZG93bigpOiBDdXJzb3Ige1xuICAgIGNvbnN0IHsgbGluZSwgY29sdW1uIH0gPSB0aGlzLmdldFBvc2l0aW9uKClcbiAgICBpZiAobGluZSA+PSB0aGlzLm1lYXN1cmVkVGV4dC5saW5lQ291bnQgLSAxKSB7XG4gICAgICByZXR1cm4gbmV3IEN1cnNvcih0aGlzLm1lYXN1cmVkVGV4dCwgdGhpcy50ZXh0Lmxlbmd0aCwgMClcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPZmZzZXQgPSB0aGlzLmdldE9mZnNldCh7IGxpbmU6IGxpbmUgKyAxLCBjb2x1bW4gfSlcbiAgICByZXR1cm4gbmV3IEN1cnNvcih0aGlzLm1lYXN1cmVkVGV4dCwgbmV3T2Zmc2V0LCAwKVxuICB9XG5cbiAgc3RhcnRPZkxpbmUoKTogQ3Vyc29yIHtcbiAgICBjb25zdCB7IGxpbmUgfSA9IHRoaXMuZ2V0UG9zaXRpb24oKVxuICAgIHJldHVybiBuZXcgQ3Vyc29yKFxuICAgICAgdGhpcy5tZWFzdXJlZFRleHQsXG4gICAgICB0aGlzLmdldE9mZnNldCh7XG4gICAgICAgIGxpbmUsXG4gICAgICAgIGNvbHVtbjogMCxcbiAgICAgIH0pLFxuICAgICAgMCxcbiAgICApXG4gIH1cblxuICBlbmRPZkxpbmUoKTogQ3Vyc29yIHtcbiAgICBjb25zdCB7IGxpbmUgfSA9IHRoaXMuZ2V0UG9zaXRpb24oKVxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMubWVhc3VyZWRUZXh0LmdldExpbmVMZW5ndGgobGluZSlcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmdldE9mZnNldCh7IGxpbmUsIGNvbHVtbiB9KVxuICAgIHJldHVybiBuZXcgQ3Vyc29yKHRoaXMubWVhc3VyZWRUZXh0LCBvZmZzZXQsIDApXG4gIH1cblxuICBuZXh0V29yZCgpOiBDdXJzb3Ige1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGxldCBuZXh0Q3Vyc29yOiBDdXJzb3IgPSB0aGlzXG4gICAgLy8gSWYgd2UncmUgb24gYSB3b3JkLCBtb3ZlIHRvIHRoZSBuZXh0IG5vbi13b3JkXG4gICAgd2hpbGUgKG5leHRDdXJzb3IuaXNPdmVyV29yZENoYXIoKSAmJiAhbmV4dEN1cnNvci5pc0F0RW5kKCkpIHtcbiAgICAgIG5leHRDdXJzb3IgPSBuZXh0Q3Vyc29yLnJpZ2h0KClcbiAgICB9XG4gICAgLy8gbm93IG1vdmUgdG8gdGhlIG5leHQgd29yZCBjaGFyXG4gICAgd2hpbGUgKCFuZXh0Q3Vyc29yLmlzT3ZlcldvcmRDaGFyKCkgJiYgIW5leHRDdXJzb3IuaXNBdEVuZCgpKSB7XG4gICAgICBuZXh0Q3Vyc29yID0gbmV4dEN1cnNvci5yaWdodCgpXG4gICAgfVxuICAgIHJldHVybiBuZXh0Q3Vyc29yXG4gIH1cblxuICBwcmV2V29yZCgpOiBDdXJzb3Ige1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGxldCBjdXJzb3I6IEN1cnNvciA9IHRoaXNcblxuICAgIC8vIGlmIHdlIGFyZSBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkLCBzdGVwIG9mZiBpdFxuICAgIGlmICghY3Vyc29yLmxlZnQoKS5pc092ZXJXb3JkQ2hhcigpKSB7XG4gICAgICBjdXJzb3IgPSBjdXJzb3IubGVmdCgpXG4gICAgfVxuXG4gICAgLy8gTW92ZSBsZWZ0IG92ZXIgYW55IG5vbi13b3JkIGNoYXJhY3RlcnNcbiAgICB3aGlsZSAoIWN1cnNvci5pc092ZXJXb3JkQ2hhcigpICYmICFjdXJzb3IuaXNBdFN0YXJ0KCkpIHtcbiAgICAgIGN1cnNvciA9IGN1cnNvci5sZWZ0KClcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSdyZSBvdmVyIGEgd29yZCBjaGFyYWN0ZXIsIG1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoaXMgd29yZFxuICAgIGlmIChjdXJzb3IuaXNPdmVyV29yZENoYXIoKSkge1xuICAgICAgd2hpbGUgKGN1cnNvci5sZWZ0KCkuaXNPdmVyV29yZENoYXIoKSAmJiAhY3Vyc29yLmlzQXRTdGFydCgpKSB7XG4gICAgICAgIGN1cnNvciA9IGN1cnNvci5sZWZ0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3Vyc29yXG4gIH1cblxuICBwcml2YXRlIG1vZGlmeVRleHQoZW5kOiBDdXJzb3IsIGluc2VydFN0cmluZzogc3RyaW5nID0gJycpOiBDdXJzb3Ige1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5vZmZzZXRcbiAgICBjb25zdCBlbmRPZmZzZXQgPSBlbmQub2Zmc2V0XG5cbiAgICBjb25zdCBuZXdUZXh0ID1cbiAgICAgIHRoaXMudGV4dC5zbGljZSgwLCBzdGFydE9mZnNldCkgK1xuICAgICAgaW5zZXJ0U3RyaW5nICtcbiAgICAgIHRoaXMudGV4dC5zbGljZShlbmRPZmZzZXQpXG5cbiAgICByZXR1cm4gQ3Vyc29yLmZyb21UZXh0KFxuICAgICAgbmV3VGV4dCxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHN0YXJ0T2Zmc2V0ICsgaW5zZXJ0U3RyaW5nLmxlbmd0aCxcbiAgICApXG4gIH1cblxuICBpbnNlcnQoaW5zZXJ0U3RyaW5nOiBzdHJpbmcpOiBDdXJzb3Ige1xuICAgIGNvbnN0IG5ld0N1cnNvciA9IHRoaXMubW9kaWZ5VGV4dCh0aGlzLCBpbnNlcnRTdHJpbmcpXG4gICAgcmV0dXJuIG5ld0N1cnNvclxuICB9XG5cbiAgZGVsKCk6IEN1cnNvciB7XG4gICAgaWYgKHRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb2RpZnlUZXh0KHRoaXMucmlnaHQoKSlcbiAgfVxuXG4gIGJhY2tzcGFjZSgpOiBDdXJzb3Ige1xuICAgIGlmICh0aGlzLmlzQXRTdGFydCgpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZWZ0KCkubW9kaWZ5VGV4dCh0aGlzKVxuICB9XG5cbiAgZGVsZXRlVG9MaW5lU3RhcnQoKTogQ3Vyc29yIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydE9mTGluZSgpLm1vZGlmeVRleHQodGhpcylcbiAgfVxuXG4gIGRlbGV0ZVRvTGluZUVuZCgpOiBDdXJzb3Ige1xuICAgIC8vIElmIGN1cnNvciBpcyBvbiBhIG5ld2xpbmUgY2hhcmFjdGVyLCBkZWxldGUganVzdCB0aGF0IGNoYXJhY3RlclxuICAgIGlmICh0aGlzLnRleHRbdGhpcy5vZmZzZXRdID09PSAnXFxuJykge1xuICAgICAgcmV0dXJuIHRoaXMubW9kaWZ5VGV4dCh0aGlzLnJpZ2h0KCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubW9kaWZ5VGV4dCh0aGlzLmVuZE9mTGluZSgpKVxuICB9XG5cbiAgZGVsZXRlV29yZEJlZm9yZSgpOiBDdXJzb3Ige1xuICAgIGlmICh0aGlzLmlzQXRTdGFydCgpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcmV2V29yZCgpLm1vZGlmeVRleHQodGhpcylcbiAgfVxuXG4gIGRlbGV0ZVdvcmRBZnRlcigpOiBDdXJzb3Ige1xuICAgIGlmICh0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tb2RpZnlUZXh0KHRoaXMubmV4dFdvcmQoKSlcbiAgfVxuXG4gIHByaXZhdGUgaXNPdmVyV29yZENoYXIoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudENoYXIgPSB0aGlzLnRleHRbdGhpcy5vZmZzZXRdID8/ICcnXG4gICAgcmV0dXJuIC9cXHcvLnRlc3QoY3VycmVudENoYXIpXG4gIH1cblxuICBlcXVhbHMob3RoZXI6IEN1cnNvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm9mZnNldCA9PT0gb3RoZXIub2Zmc2V0ICYmIHRoaXMubWVhc3VyZWRUZXh0ID09IG90aGVyLm1lYXN1cmVkVGV4dFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgaXNBdFN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9mZnNldCA9PSAwXG4gIH1cbiAgcHJpdmF0ZSBpc0F0RW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9mZnNldCA9PSB0aGlzLnRleHQubGVuZ3RoXG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlZFRleHQudGV4dFxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sdW1ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1lYXN1cmVkVGV4dC5jb2x1bW5zICsgMVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb3NpdGlvbigpOiBQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZWRUZXh0LmdldFBvc2l0aW9uRnJvbU9mZnNldCh0aGlzLm9mZnNldClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2Zmc2V0KHBvc2l0aW9uOiBQb3NpdGlvbik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZWRUZXh0LmdldE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbilcbiAgfVxufVxuXG5jbGFzcyBXcmFwcGVkTGluZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB0ZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXJ0T2Zmc2V0OiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzUHJlY2VkZWRCeU5ld2xpbmU6IGJvb2xlYW4sXG4gICAgcHVibGljIHJlYWRvbmx5IGVuZHNXaXRoTmV3bGluZTogYm9vbGVhbiA9IGZhbHNlLFxuICApIHt9XG5cbiAgZXF1YWxzKG90aGVyOiBXcmFwcGVkTGluZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRleHQgPT09IG90aGVyLnRleHQgJiYgdGhpcy5zdGFydE9mZnNldCA9PT0gb3RoZXIuc3RhcnRPZmZzZXRcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aCArICh0aGlzLmVuZHNXaXRoTmV3bGluZSA/IDEgOiAwKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWFzdXJlZFRleHQge1xuICBwcml2YXRlIHdyYXBwZWRMaW5lczogV3JhcHBlZExpbmVbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHRleHQ6IHN0cmluZyxcbiAgICByZWFkb25seSBjb2x1bW5zOiBudW1iZXIsXG4gICkge1xuICAgIHRoaXMud3JhcHBlZExpbmVzID0gdGhpcy5tZWFzdXJlV3JhcHBlZFRleHQoKVxuICB9XG5cbiAgcHJpdmF0ZSBtZWFzdXJlV3JhcHBlZFRleHQoKTogV3JhcHBlZExpbmVbXSB7XG4gICAgY29uc3Qgd3JhcHBlZFRleHQgPSB3cmFwQW5zaSh0aGlzLnRleHQsIHRoaXMuY29sdW1ucywge1xuICAgICAgaGFyZDogdHJ1ZSxcbiAgICAgIHRyaW06IGZhbHNlLFxuICAgIH0pXG5cbiAgICBjb25zdCB3cmFwcGVkTGluZXM6IFdyYXBwZWRMaW5lW10gPSBbXVxuICAgIGxldCBzZWFyY2hPZmZzZXQgPSAwXG4gICAgbGV0IGxhc3ROZXdMaW5lUG9zID0gLTFcblxuICAgIGNvbnN0IGxpbmVzID0gd3JhcHBlZFRleHQuc3BsaXQoJ1xcbicpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGV4dCA9IGxpbmVzW2ldIVxuICAgICAgY29uc3QgaXNQcmVjZWRlZEJ5TmV3bGluZSA9IChzdGFydE9mZnNldDogbnVtYmVyKSA9PlxuICAgICAgICBpID09IDAgfHwgKHN0YXJ0T2Zmc2V0ID4gMCAmJiB0aGlzLnRleHRbc3RhcnRPZmZzZXQgLSAxXSA9PT0gJ1xcbicpXG5cbiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBGb3IgYmxhbmsgbGluZXMsIGZpbmQgdGhlIG5leHQgbmV3bGluZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxhc3Qgb25lXG4gICAgICAgIGxhc3ROZXdMaW5lUG9zID0gdGhpcy50ZXh0LmluZGV4T2YoJ1xcbicsIGxhc3ROZXdMaW5lUG9zICsgMSlcblxuICAgICAgICBpZiAobGFzdE5ld0xpbmVQb3MgIT09IC0xKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBsYXN0TmV3TGluZVBvc1xuICAgICAgICAgIGNvbnN0IGVuZHNXaXRoTmV3bGluZSA9IHRydWVcblxuICAgICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFdyYXBwZWRMaW5lKFxuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgaXNQcmVjZWRlZEJ5TmV3bGluZShzdGFydE9mZnNldCksXG4gICAgICAgICAgICAgIGVuZHNXaXRoTmV3bGluZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHdlIGNhbid0IGZpbmQgYW5vdGhlciBuZXdsaW5lLCB0aGlzIG11c3QgYmUgdGhlIGVuZCBvZiB0ZXh0XG4gICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLnRleHQubGVuZ3RoXG4gICAgICAgICAgd3JhcHBlZExpbmVzLnB1c2goXG4gICAgICAgICAgICBuZXcgV3JhcHBlZExpbmUoXG4gICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgICBpc1ByZWNlZGVkQnlOZXdsaW5lKHN0YXJ0T2Zmc2V0KSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG5vbi1ibGFuayBsaW5lc1xuICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMudGV4dC5pbmRleE9mKHRleHQsIHNlYXJjaE9mZnNldClcbiAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWJ1ZzogRmFpbGVkIHRvIGZpbmQgd3JhcHBlZCBsaW5lIGluIG9yaWdpbmFsIHRleHQnKVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWJ1ZzogQ3VycmVudCB0ZXh0OicsIHRleHQpXG4gICAgICAgICAgY29uc29sZS5sb2coJ0RlYnVnOiBGdWxsIG9yaWdpbmFsIHRleHQ6JywgdGhpcy50ZXh0KVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWJ1ZzogU2VhcmNoIG9mZnNldDonLCBzZWFyY2hPZmZzZXQpXG4gICAgICAgICAgY29uc29sZS5sb2coJ0RlYnVnOiBXcmFwcGVkIHRleHQ6Jywgd3JhcHBlZFRleHQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmluZCB3cmFwcGVkIGxpbmUgaW4gb3JpZ2luYWwgdGV4dCcpXG4gICAgICAgIH1cblxuICAgICAgICBzZWFyY2hPZmZzZXQgPSBzdGFydE9mZnNldCArIHRleHQubGVuZ3RoXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBsaW5lIGVuZHMgd2l0aCBhIG5ld2xpbmUgaW4gdGhlIG9yaWdpbmFsIHRleHRcbiAgICAgICAgY29uc3QgcG90ZW50aWFsTmV3bGluZVBvcyA9IHN0YXJ0T2Zmc2V0ICsgdGV4dC5sZW5ndGhcbiAgICAgICAgY29uc3QgZW5kc1dpdGhOZXdsaW5lID1cbiAgICAgICAgICBwb3RlbnRpYWxOZXdsaW5lUG9zIDwgdGhpcy50ZXh0Lmxlbmd0aCAmJlxuICAgICAgICAgIHRoaXMudGV4dFtwb3RlbnRpYWxOZXdsaW5lUG9zXSA9PT0gJ1xcbidcblxuICAgICAgICBpZiAoZW5kc1dpdGhOZXdsaW5lKSB7XG4gICAgICAgICAgbGFzdE5ld0xpbmVQb3MgPSBwb3RlbnRpYWxOZXdsaW5lUG9zXG4gICAgICAgIH1cblxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChcbiAgICAgICAgICBuZXcgV3JhcHBlZExpbmUoXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBpc1ByZWNlZGVkQnlOZXdsaW5lKHN0YXJ0T2Zmc2V0KSxcbiAgICAgICAgICAgIGVuZHNXaXRoTmV3bGluZSxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBwZWRMaW5lc1xuICB9XG5cbiAgcHVibGljIGdldFdyYXBwZWRUZXh0KCk6IFdyYXBwZWRUZXh0IHtcbiAgICByZXR1cm4gdGhpcy53cmFwcGVkTGluZXMubWFwKGxpbmUgPT5cbiAgICAgIGxpbmUuaXNQcmVjZWRlZEJ5TmV3bGluZSA/IGxpbmUudGV4dCA6IGxpbmUudGV4dC50cmltU3RhcnQoKSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldExpbmUobGluZTogbnVtYmVyKTogV3JhcHBlZExpbmUge1xuICAgIHJldHVybiB0aGlzLndyYXBwZWRMaW5lc1tcbiAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGxpbmUsIHRoaXMud3JhcHBlZExpbmVzLmxlbmd0aCAtIDEpKVxuICAgIF0hXG4gIH1cblxuICBwdWJsaWMgZ2V0T2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uOiBQb3NpdGlvbik6IG51bWJlciB7XG4gICAgY29uc3Qgd3JhcHBlZExpbmUgPSB0aGlzLmdldExpbmUocG9zaXRpb24ubGluZSlcbiAgICBjb25zdCBzdGFydE9mZnNldFBsdXNDb2x1bW4gPSB3cmFwcGVkTGluZS5zdGFydE9mZnNldCArIHBvc2l0aW9uLmNvbHVtblxuXG4gICAgLy8gSGFuZGxlIGJsYW5rIGxpbmVzIHNwZWNpYWxseVxuICAgIGlmICh3cmFwcGVkTGluZS50ZXh0Lmxlbmd0aCA9PT0gMCAmJiB3cmFwcGVkTGluZS5lbmRzV2l0aE5ld2xpbmUpIHtcbiAgICAgIHJldHVybiB3cmFwcGVkTGluZS5zdGFydE9mZnNldFxuICAgIH1cblxuICAgIC8vIEZvciBub3JtYWwgbGluZXNcbiAgICBjb25zdCBsaW5lRW5kID0gd3JhcHBlZExpbmUuc3RhcnRPZmZzZXQgKyB3cmFwcGVkTGluZS50ZXh0Lmxlbmd0aFxuICAgIC8vIEFkZCAxIG9ubHkgaWYgdGhpcyBsaW5lIGVuZHMgd2l0aCBhIG5ld2xpbmVcbiAgICBjb25zdCBtYXhPZmZzZXQgPSB3cmFwcGVkTGluZS5lbmRzV2l0aE5ld2xpbmUgPyBsaW5lRW5kICsgMSA6IGxpbmVFbmRcblxuICAgIHJldHVybiBNYXRoLm1pbihzdGFydE9mZnNldFBsdXNDb2x1bW4sIG1heE9mZnNldClcbiAgfVxuXG4gIHB1YmxpYyBnZXRMaW5lTGVuZ3RoKGxpbmU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudExpbmUgPSB0aGlzLmdldExpbmUobGluZSlcbiAgICBjb25zdCBuZXh0TGluZSA9IHRoaXMuZ2V0TGluZShsaW5lICsgMSlcbiAgICBpZiAobmV4dExpbmUuZXF1YWxzKGN1cnJlbnRMaW5lKSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dC5sZW5ndGggLSBjdXJyZW50TGluZS5zdGFydE9mZnNldFxuICAgIH1cblxuICAgIHJldHVybiBuZXh0TGluZS5zdGFydE9mZnNldCAtIGN1cnJlbnRMaW5lLnN0YXJ0T2Zmc2V0IC0gMVxuICB9XG5cbiAgcHVibGljIGdldFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQ6IG51bWJlcik6IFBvc2l0aW9uIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMud3JhcHBlZExpbmVzXG4gICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCBsaW5lcy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgY29uc3QgY3VycmVudExpbmUgPSBsaW5lc1tsaW5lXSFcbiAgICAgIGNvbnN0IG5leHRMaW5lID0gbGluZXNbbGluZSArIDFdXG4gICAgICBpZiAoXG4gICAgICAgIG9mZnNldCA+PSBjdXJyZW50TGluZS5zdGFydE9mZnNldCAmJlxuICAgICAgICAoIW5leHRMaW5lIHx8IG9mZnNldCA8IG5leHRMaW5lLnN0YXJ0T2Zmc2V0KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXBhY2UgPSBjdXJyZW50TGluZS5pc1ByZWNlZGVkQnlOZXdsaW5lXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBjdXJyZW50TGluZS50ZXh0Lmxlbmd0aCAtIGN1cnJlbnRMaW5lLnRleHQudHJpbVN0YXJ0KCkubGVuZ3RoXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICBvZmZzZXQgLSBjdXJyZW50TGluZS5zdGFydE9mZnNldCAtIGxlYWRpbmdXaGl0ZXBhY2UsXG4gICAgICAgICAgICBjdXJyZW50TGluZS50ZXh0Lmxlbmd0aCxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZSxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSdyZSBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlciwgcmV0dXJuIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZVxuICAgIGNvbnN0IGxpbmUgPSBsaW5lcy5sZW5ndGggLSAxXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmUsXG4gICAgICBjb2x1bW46IHRoaXMud3JhcHBlZExpbmVzW2xpbmVdIS50ZXh0Lmxlbmd0aCxcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmVDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndyYXBwZWRMaW5lcy5sZW5ndGhcbiAgfVxuICBlcXVhbHMob3RoZXI6IE1lYXN1cmVkVGV4dCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRleHQgPT09IG90aGVyLnRleHQgJiYgdGhpcy5jb2x1bW5zID09PSBvdGhlci5jb2x1bW5zXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnXG5cbmNvbnN0IFNDUkVFTlNIT1RfUEFUSCA9ICcvdG1wL2NsYXVkZV9jbGlfbGF0ZXN0X3NjcmVlbnNob3QucG5nJ1xuXG5leHBvcnQgY29uc3QgQ0xJUEJPQVJEX0VSUk9SX01FU1NBR0UgPVxuICAnTm8gaW1hZ2UgZm91bmQgaW4gY2xpcGJvYXJkLiBVc2UgQ21kICsgQ3RybCArIFNoaWZ0ICsgNCB0byBjb3B5IGEgc2NyZWVuc2hvdCB0byBjbGlwYm9hcmQuJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VGcm9tQ2xpcGJvYXJkKCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ2RhcndpbicpIHtcbiAgICAvLyBvbmx5IHN1cHBvcnQgaW1hZ2UgcGFzdGUgb24gbWFjT1MgZm9yIG5vd1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENoZWNrIGlmIGNsaXBib2FyZCBoYXMgaW1hZ2VcbiAgICBleGVjU3luYyhgb3Nhc2NyaXB0IC1lICd0aGUgY2xpcGJvYXJkIGFzIMKrY2xhc3MgUE5HZsK7J2AsIHtcbiAgICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICB9KVxuXG4gICAgLy8gU2F2ZSB0aGUgaW1hZ2VcbiAgICBleGVjU3luYyhcbiAgICAgIGBvc2FzY3JpcHQgLWUgJ3NldCBwbmdfZGF0YSB0byAodGhlIGNsaXBib2FyZCBhcyDCq2NsYXNzIFBOR2bCuyknIC1lICdzZXQgZnAgdG8gb3BlbiBmb3IgYWNjZXNzIFBPU0lYIGZpbGUgXCIke1NDUkVFTlNIT1RfUEFUSH1cIiB3aXRoIHdyaXRlIHBlcm1pc3Npb24nIC1lICd3cml0ZSBwbmdfZGF0YSB0byBmcCcgLWUgJ2Nsb3NlIGFjY2VzcyBmcCdgLFxuICAgICAgeyBzdGRpbzogJ2lnbm9yZScgfSxcbiAgICApXG5cbiAgICAvLyBSZWFkIHRoZSBpbWFnZSBhbmQgY29udmVydCB0byBiYXNlNjRcbiAgICBjb25zdCBpbWFnZUJ1ZmZlciA9IHJlYWRGaWxlU3luYyhTQ1JFRU5TSE9UX1BBVEgpXG4gICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWFnZUJ1ZmZlci50b1N0cmluZygnYmFzZTY0JylcblxuICAgIC8vIENsZWFudXBcbiAgICBleGVjU3luYyhgcm0gLWYgXCIke1NDUkVFTlNIT1RfUEFUSH1cImAsIHsgc3RkaW86ICdpZ25vcmUnIH0pXG5cbiAgICByZXR1cm4gYmFzZTY0SW1hZ2VcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUZXJtaW5hbFNpemUoKSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IHVzZVN0YXRlKHtcbiAgICBjb2x1bW5zOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLFxuICAgIHJvd3M6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQsXG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgICAgc2V0U2l6ZSh7XG4gICAgICAgIGNvbHVtbnM6IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODAsXG4gICAgICAgIHJvd3M6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHByb2Nlc3Muc3Rkb3V0Lm9uKCdyZXNpemUnLCB1cGRhdGVTaXplKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC5vZmYoJ3Jlc2l6ZScsIHVwZGF0ZVNpemUpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gc2l6ZVxufVxuIiwKICAgICIvKipcbiAqIEhUVFAgdXRpbGl0eSBjb25zdGFudHMgYW5kIGhlbHBlcnNcbiAqL1xuXG4vLyBXQVJOSU5HOiBXZSByZWx5IG9uIGBjbGF1ZGUtY2xpYCBpbiB0aGUgdXNlciBhZ2VudCBmb3IgbG9nIGZpbHRlcmluZy5cbi8vIFBsZWFzZSBkbyBOT1QgY2hhbmdlIHRoaXMgd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IGxvZ2dpbmcgYWxzbyBnZXRzIHVwZGF0ZWQhXG5leHBvcnQgY29uc3QgVVNFUl9BR0VOVCA9IGBjbGF1ZGUtY2xpLyR7TUFDUk8uVkVSU0lPTn0gKCR7cHJvY2Vzcy5lbnYuVVNFUl9UWVBFfSlgXG4iLAogICAgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzAuMzYuMyc7IC8vIHgtcmVsZWFzZS1wbGVhc2UtdmVyc2lvblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5tanMubWFwIiwKICAgICIvKipcbiAqIERpc2NsYWltZXI6IG1vZHVsZXMgaW4gX3NoaW1zIGFyZW4ndCBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBieSBTREsgdXNlcnMuXG4gKi9cbmltcG9ydCAqIGFzIHNoaW1zIGZyb20gJy4vcmVnaXN0cnkubWpzJztcbmltcG9ydCAqIGFzIGF1dG8gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvX3NoaW1zL2F1dG8vcnVudGltZSc7XG5pZiAoIXNoaW1zLmtpbmQpIHNoaW1zLnNldFNoaW1zKGF1dG8uZ2V0UnVudGltZSgpLCB7IGF1dG86IHRydWUgfSk7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5Lm1qcyc7XG4iLAogICAgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5pbXBvcnQgeyBjYXN0VG9FcnJvciB9IGZyb20gXCIuL2NvcmUubWpzXCI7XG5leHBvcnQgY2xhc3MgQW50aHJvcGljRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG5leHBvcnQgY2xhc3MgQVBJRXJyb3IgZXh0ZW5kcyBBbnRocm9waWNFcnJvciB7XG4gICAgY29uc3RydWN0b3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycykge1xuICAgICAgICBzdXBlcihgJHtBUElFcnJvci5tYWtlTWVzc2FnZShzdGF0dXMsIGVycm9yLCBtZXNzYWdlKX1gKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdF9pZCA9IGhlYWRlcnM/LlsncmVxdWVzdC1pZCddO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHN0YXRpYyBtYWtlTWVzc2FnZShzdGF0dXMsIGVycm9yLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVycm9yPy5tZXNzYWdlID9cbiAgICAgICAgICAgIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgIDogZXJyb3IgPyBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2U7XG4gICAgICAgIGlmIChzdGF0dXMgJiYgbXNnKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7c3RhdHVzfSAke21zZ31gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtzdGF0dXN9IHN0YXR1cyBjb2RlIChubyBib2R5KWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1zZykge1xuICAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyhubyBzdGF0dXMgY29kZSBvciBib2R5KSc7XG4gICAgfVxuICAgIHN0YXRpYyBnZW5lcmF0ZShzdGF0dXMsIGVycm9yUmVzcG9uc2UsIG1lc3NhZ2UsIGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMgfHwgIWhlYWRlcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQVBJQ29ubmVjdGlvbkVycm9yKHsgbWVzc2FnZSwgY2F1c2U6IGNhc3RUb0Vycm9yKGVycm9yUmVzcG9uc2UpIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyb3JSZXNwb25zZTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJhZFJlcXVlc3RFcnJvcihzdGF0dXMsIGVycm9yLCBtZXNzYWdlLCBoZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aGVudGljYXRpb25FcnJvcihzdGF0dXMsIGVycm9yLCBtZXNzYWdlLCBoZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGVybWlzc2lvbkRlbmllZEVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwOSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQyMikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVbnByb2Nlc3NhYmxlRW50aXR5RXJyb3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDI5KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhdGVMaW1pdEVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPj0gNTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGVybmFsU2VydmVyRXJyb3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBUElFcnJvcihzdGF0dXMsIGVycm9yLCBtZXNzYWdlLCBoZWFkZXJzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQVBJVXNlckFib3J0RXJyb3IgZXh0ZW5kcyBBUElFcnJvciB7XG4gICAgY29uc3RydWN0b3IoeyBtZXNzYWdlIH0gPSB7fSkge1xuICAgICAgICBzdXBlcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgbWVzc2FnZSB8fCAnUmVxdWVzdCB3YXMgYWJvcnRlZC4nLCB1bmRlZmluZWQpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBUElDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBBUElFcnJvciB7XG4gICAgY29uc3RydWN0b3IoeyBtZXNzYWdlLCBjYXVzZSB9KSB7XG4gICAgICAgIHN1cGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBtZXNzYWdlIHx8ICdDb25uZWN0aW9uIGVycm9yLicsIHVuZGVmaW5lZCk7XG4gICAgICAgIC8vIGluIHNvbWUgZW52aXJvbm1lbnRzIHRoZSAnY2F1c2UnIHByb3BlcnR5IGlzIGFscmVhZHkgZGVjbGFyZWRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoY2F1c2UpXG4gICAgICAgICAgICB0aGlzLmNhdXNlID0gY2F1c2U7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IgZXh0ZW5kcyBBUElDb25uZWN0aW9uRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSB9ID0ge30pIHtcbiAgICAgICAgc3VwZXIoeyBtZXNzYWdlOiBtZXNzYWdlID8/ICdSZXF1ZXN0IHRpbWVkIG91dC4nIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBBUElFcnJvciB7XG59XG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25FcnJvciBleHRlbmRzIEFQSUVycm9yIHtcbn1cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRGVuaWVkRXJyb3IgZXh0ZW5kcyBBUElFcnJvciB7XG59XG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIEFQSUVycm9yIHtcbn1cbmV4cG9ydCBjbGFzcyBDb25mbGljdEVycm9yIGV4dGVuZHMgQVBJRXJyb3Ige1xufVxuZXhwb3J0IGNsYXNzIFVucHJvY2Vzc2FibGVFbnRpdHlFcnJvciBleHRlbmRzIEFQSUVycm9yIHtcbn1cbmV4cG9ydCBjbGFzcyBSYXRlTGltaXRFcnJvciBleHRlbmRzIEFQSUVycm9yIHtcbn1cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgQVBJRXJyb3Ige1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3IubWpzLm1hcCIsCiAgICAidmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9MaW5lRGVjb2Rlcl9jYXJyaWFnZVJldHVybkluZGV4O1xuaW1wb3J0IHsgQW50aHJvcGljRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3IubWpzXCI7XG4vKipcbiAqIEEgcmUtaW1wbGVtZW50YXRpb24gb2YgaHR0cHgncyBgTGluZURlY29kZXJgIGluIFB5dGhvbiB0aGF0IGhhbmRsZXMgaW5jcmVtZW50YWxseVxuICogcmVhZGluZyBsaW5lcyBmcm9tIHRleHQuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2VuY29kZS9odHRweC9ibG9iLzkyMDMzM2VhOTgxMThlOWNmNjE3ZjI0NjkwNWQ3YjIwMjUxMDk0MWMvaHR0cHgvX2RlY29kZXJzLnB5I0wyNThcbiAqL1xuZXhwb3J0IGNsYXNzIExpbmVEZWNvZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgX0xpbmVEZWNvZGVyX2NhcnJpYWdlUmV0dXJuSW5kZXguc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTGluZURlY29kZXJfY2FycmlhZ2VSZXR1cm5JbmRleCwgbnVsbCwgXCJmXCIpO1xuICAgIH1cbiAgICBkZWNvZGUoY2h1bmspIHtcbiAgICAgICAgaWYgKGNodW5rID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaW5hcnlDaHVuayA9IGNodW5rIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShjaHVuaylcbiAgICAgICAgICAgIDogdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjaHVuaylcbiAgICAgICAgICAgICAgICA6IGNodW5rO1xuICAgICAgICBsZXQgbmV3RGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmxlbmd0aCArIGJpbmFyeUNodW5rLmxlbmd0aCk7XG4gICAgICAgIG5ld0RhdGEuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICAgICAgbmV3RGF0YS5zZXQoYmluYXJ5Q2h1bmssIHRoaXMuYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbmV3RGF0YTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgbGV0IHBhdHRlcm5JbmRleDtcbiAgICAgICAgd2hpbGUgKChwYXR0ZXJuSW5kZXggPSBmaW5kTmV3bGluZUluZGV4KHRoaXMuYnVmZmVyLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MaW5lRGVjb2Rlcl9jYXJyaWFnZVJldHVybkluZGV4LCBcImZcIikpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocGF0dGVybkluZGV4LmNhcnJpYWdlICYmIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xpbmVEZWNvZGVyX2NhcnJpYWdlUmV0dXJuSW5kZXgsIFwiZlwiKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCB1bnRpbCB3ZSBlaXRoZXIgZ2V0IGEgY29ycmVzcG9uZGluZyBgXFxuYCwgYSBuZXcgYFxccmAgb3Igbm90aGluZ1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0xpbmVEZWNvZGVyX2NhcnJpYWdlUmV0dXJuSW5kZXgsIHBhdHRlcm5JbmRleC5pbmRleCwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgZ290IGRvdWJsZSBcXHIgb3IgXFxydGV4dFxcblxuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xpbmVEZWNvZGVyX2NhcnJpYWdlUmV0dXJuSW5kZXgsIFwiZlwiKSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgKHBhdHRlcm5JbmRleC5pbmRleCAhPT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTGluZURlY29kZXJfY2FycmlhZ2VSZXR1cm5JbmRleCwgXCJmXCIpICsgMSB8fCBwYXR0ZXJuSW5kZXguY2FycmlhZ2UpKSB7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCh0aGlzLmRlY29kZVRleHQodGhpcy5idWZmZXIuc2xpY2UoMCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTGluZURlY29kZXJfY2FycmlhZ2VSZXR1cm5JbmRleCwgXCJmXCIpIC0gMSkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnNsaWNlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xpbmVEZWNvZGVyX2NhcnJpYWdlUmV0dXJuSW5kZXgsIFwiZlwiKSk7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTGluZURlY29kZXJfY2FycmlhZ2VSZXR1cm5JbmRleCwgbnVsbCwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MaW5lRGVjb2Rlcl9jYXJyaWFnZVJldHVybkluZGV4LCBcImZcIikgIT09IG51bGwgPyBwYXR0ZXJuSW5kZXgucHJlY2VkaW5nIC0gMSA6IHBhdHRlcm5JbmRleC5wcmVjZWRpbmc7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5kZWNvZGVUZXh0KHRoaXMuYnVmZmVyLnNsaWNlKDAsIGVuZEluZGV4KSk7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zbGljZShwYXR0ZXJuSW5kZXguaW5kZXgpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTGluZURlY29kZXJfY2FycmlhZ2VSZXR1cm5JbmRleCwgbnVsbCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgZGVjb2RlVGV4dChieXRlcykge1xuICAgICAgICBpZiAoYnl0ZXMgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgIC8vIE5vZGU6XG4gICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKGJ5dGVzIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBVbmV4cGVjdGVkOiByZWNlaXZlZCBub24tVWludDhBcnJheSAoJHtieXRlcy5jb25zdHJ1Y3Rvci5uYW1lfSkgc3RyZWFtIGNodW5rIGluIGFuIGVudmlyb25tZW50IHdpdGggYSBnbG9iYWwgXCJCdWZmZXJcIiBkZWZpbmVkLCB3aGljaCB0aGlzIGxpYnJhcnkgYXNzdW1lcyB0byBiZSBOb2RlLiBQbGVhc2UgcmVwb3J0IHRoaXMgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQnJvd3NlclxuICAgICAgICBpZiAodHlwZW9mIFRleHREZWNvZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBieXRlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0RGVjb2RlciA/PyAodGhpcy50ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmOCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBVbmV4cGVjdGVkOiByZWNlaXZlZCBub24tVWludDhBcnJheS9BcnJheUJ1ZmZlciAoJHtieXRlcy5jb25zdHJ1Y3Rvci5uYW1lfSkgaW4gYSB3ZWIgcGxhdGZvcm0uIFBsZWFzZSByZXBvcnQgdGhpcyBlcnJvci5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYFVuZXhwZWN0ZWQ6IG5laXRoZXIgQnVmZmVyIG5vciBUZXh0RGVjb2RlciBhcmUgYXZhaWxhYmxlIGFzIGdsb2JhbHMuIFBsZWFzZSByZXBvcnQgdGhpcyBlcnJvci5gKTtcbiAgICB9XG4gICAgZmx1c2goKSB7XG4gICAgICAgIGlmICghdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKCdcXG4nKTtcbiAgICB9XG59XG5fTGluZURlY29kZXJfY2FycmlhZ2VSZXR1cm5JbmRleCA9IG5ldyBXZWFrTWFwKCk7XG4vLyBwcmV0dGllci1pZ25vcmVcbkxpbmVEZWNvZGVyLk5FV0xJTkVfQ0hBUlMgPSBuZXcgU2V0KFsnXFxuJywgJ1xcciddKTtcbkxpbmVEZWNvZGVyLk5FV0xJTkVfUkVHRVhQID0gL1xcclxcbnxbXFxuXFxyXS9nO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBidWZmZXIgZm9yIHRoZSBlbmQgcGF0dGVybnMsIChcXHIgb3IgXFxuKVxuICogYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIGluZGV4IHByZWNlZGluZyB0aGUgbWF0Y2hlZCBuZXdsaW5lIGFuZCB0aGVcbiAqIGluZGV4IGFmdGVyIHRoZSBuZXdsaW5lIGNoYXIuIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBuZXcgbGluZSBpcyBmb3VuZC5cbiAqXG4gKiBgYGB0c1xuICogZmluZE5ld0xpbmVJbmRleCgnYWJjXFxuZGVmJykgLT4geyBwcmVjZWRpbmc6IDIsIGluZGV4OiAzIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBmaW5kTmV3bGluZUluZGV4KGJ1ZmZlciwgc3RhcnRJbmRleCkge1xuICAgIGNvbnN0IG5ld2xpbmUgPSAweDBhOyAvLyBcXG5cbiAgICBjb25zdCBjYXJyaWFnZSA9IDB4MGQ7IC8vIFxcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4ID8/IDA7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGJ1ZmZlcltpXSA9PT0gbmV3bGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJlY2VkaW5nOiBpLCBpbmRleDogaSArIDEsIGNhcnJpYWdlOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWZmZXJbaV0gPT09IGNhcnJpYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBwcmVjZWRpbmc6IGksIGluZGV4OiBpICsgMSwgY2FycmlhZ2U6IHRydWUgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbmUubWpzLm1hcCIsCiAgICAiLyoqXG4gKiBNb3N0IGJyb3dzZXJzIGRvbid0IHlldCBoYXZlIGFzeW5jIGl0ZXJhYmxlIHN1cHBvcnQgZm9yIFJlYWRhYmxlU3RyZWFtLFxuICogYW5kIE5vZGUgaGFzIGEgdmVyeSBkaWZmZXJlbnQgd2F5IG9mIHJlYWRpbmcgYnl0ZXMgZnJvbSBpdHMgXCJSZWFkYWJsZVN0cmVhbVwiLlxuICpcbiAqIFRoaXMgcG9seWZpbGwgd2FzIHB1bGxlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9NYXR0aWFzQnVlbGVucy93ZWItc3RyZWFtcy1wb2x5ZmlsbC9wdWxsLzEyMiNpc3N1ZWNvbW1lbnQtMTYyNzM1NDQ5MFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Ub0FzeW5jSXRlcmFibGUoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pXG4gICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdD8uZG9uZSlcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7IC8vIHJlbGVhc2UgbG9jayB3aGVuIHN0cmVhbSBiZWNvbWVzIGNsb3NlZFxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpOyAvLyByZWxlYXNlIGxvY2sgd2hlbiBzdHJlYW0gYmVjb21lcyBlcnJvcmVkXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcmV0dXJuKCkge1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IHJlYWRlci5jYW5jZWwoKTtcbiAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgYXdhaXQgY2FuY2VsUHJvbWlzZTtcbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfSxcbiAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJlYW0tdXRpbHMubWpzLm1hcCIsCiAgICAiaW1wb3J0IHsgUmVhZGFibGVTdHJlYW0gfSBmcm9tIFwiLi9fc2hpbXMvaW5kZXgubWpzXCI7XG5pbXBvcnQgeyBBbnRocm9waWNFcnJvciB9IGZyb20gXCIuL2Vycm9yLm1qc1wiO1xuaW1wb3J0IHsgTGluZURlY29kZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC9kZWNvZGVycy9saW5lLm1qc1wiO1xuaW1wb3J0IHsgUmVhZGFibGVTdHJlYW1Ub0FzeW5jSXRlcmFibGUgfSBmcm9tIFwiLi9pbnRlcm5hbC9zdHJlYW0tdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXNwb25zZUhlYWRlcnMgfSBmcm9tIFwiLi9jb3JlLm1qc1wiO1xuaW1wb3J0IHsgQVBJRXJyb3IgfSBmcm9tIFwiLi9lcnJvci5tanNcIjtcbmV4cG9ydCBjbGFzcyBTdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKGl0ZXJhdG9yLCBjb250cm9sbGVyKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0b3IgPSBpdGVyYXRvcjtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB9XG4gICAgc3RhdGljIGZyb21TU0VSZXNwb25zZShyZXNwb25zZSwgY29udHJvbGxlcikge1xuICAgICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24qIGl0ZXJhdG9yKCkge1xuICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaXRlcmF0ZSBvdmVyIGEgY29uc3VtZWQgc3RyZWFtLCB1c2UgYC50ZWUoKWAgdG8gc3BsaXQgdGhlIHN0cmVhbS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3Qgc3NlIG9mIF9pdGVyU1NFTWVzc2FnZXMocmVzcG9uc2UsIGNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzc2UuZXZlbnQgPT09ICdjb21wbGV0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBKU09OLnBhcnNlKHNzZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IHBhcnNlIG1lc3NhZ2UgaW50byBKU09OOmAsIHNzZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGcm9tIGNodW5rOmAsIHNzZS5yYXcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNzZS5ldmVudCA9PT0gJ21lc3NhZ2Vfc3RhcnQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzc2UuZXZlbnQgPT09ICdtZXNzYWdlX2RlbHRhJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3NlLmV2ZW50ID09PSAnbWVzc2FnZV9zdG9wJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3NlLmV2ZW50ID09PSAnY29udGVudF9ibG9ja19zdGFydCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNzZS5ldmVudCA9PT0gJ2NvbnRlbnRfYmxvY2tfZGVsdGEnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzc2UuZXZlbnQgPT09ICdjb250ZW50X2Jsb2NrX3N0b3AnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIEpTT04ucGFyc2Uoc3NlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDb3VsZCBub3QgcGFyc2UgbWVzc2FnZSBpbnRvIEpTT046YCwgc3NlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZyb20gY2h1bms6YCwgc3NlLnJhdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3NlLmV2ZW50ID09PSAncGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzc2UuZXZlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEFQSUVycm9yLmdlbmVyYXRlKHVuZGVmaW5lZCwgYFNTRSBFcnJvcjogJHtzc2UuZGF0YX1gLCBzc2UuZGF0YSwgY3JlYXRlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FsbHMgYHN0cmVhbS5jb250cm9sbGVyLmFib3J0KClgLCB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IHRocm93aW5nLlxuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgYGJyZWFrYHMsIGFib3J0IHRoZSBvbmdvaW5nIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgaWYgKCFkb25lKVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oaXRlcmF0b3IsIGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBTdHJlYW0gZnJvbSBhIG5ld2xpbmUtc2VwYXJhdGVkIFJlYWRhYmxlU3RyZWFtXG4gICAgICogd2hlcmUgZWFjaCBpdGVtIGlzIGEgSlNPTiB2YWx1ZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbVJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGxldCBjb25zdW1lZCA9IGZhbHNlO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiogaXRlckxpbmVzKCkge1xuICAgICAgICAgICAgY29uc3QgbGluZURlY29kZXIgPSBuZXcgTGluZURlY29kZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZXIgPSBSZWFkYWJsZVN0cmVhbVRvQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbSk7XG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZURlY29kZXIuZGVjb2RlKGNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lRGVjb2Rlci5mbHVzaCgpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiogaXRlcmF0b3IoKSB7XG4gICAgICAgICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpdGVyYXRlIG92ZXIgYSBjb25zdW1lZCBzdHJlYW0sIHVzZSBgLnRlZSgpYCB0byBzcGxpdCB0aGUgc3RyZWFtLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBsaW5lIG9mIGl0ZXJMaW5lcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lKVxuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgSlNPTi5wYXJzZShsaW5lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhbGxzIGBzdHJlYW0uY29udHJvbGxlci5hYm9ydCgpYCwgd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCB0aHJvd2luZy5cbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGBicmVha2BzLCBhYm9ydCB0aGUgb25nb2luZyByZXF1ZXN0LlxuICAgICAgICAgICAgICAgIGlmICghZG9uZSlcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKGl0ZXJhdG9yLCBjb250cm9sbGVyKTtcbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0b3IoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BsaXRzIHRoZSBzdHJlYW0gaW50byB0d28gc3RyZWFtcyB3aGljaCBjYW4gYmVcbiAgICAgKiBpbmRlcGVuZGVudGx5IHJlYWQgZnJvbSBhdCBkaWZmZXJlbnQgc3BlZWRzLlxuICAgICAqL1xuICAgIHRlZSgpIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IFtdO1xuICAgICAgICBjb25zdCByaWdodCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgY29uc3QgdGVlSXRlcmF0b3IgPSAocXVldWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0LnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBTdHJlYW0oKCkgPT4gdGVlSXRlcmF0b3IobGVmdCksIHRoaXMuY29udHJvbGxlciksXG4gICAgICAgICAgICBuZXcgU3RyZWFtKCgpID0+IHRlZUl0ZXJhdG9yKHJpZ2h0KSwgdGhpcy5jb250cm9sbGVyKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhpcyBzdHJlYW0gdG8gYSBuZXdsaW5lLXNlcGFyYXRlZCBSZWFkYWJsZVN0cmVhbSBvZlxuICAgICAqIEpTT04gc3RyaW5naWZpZWQgdmFsdWVzIGluIHRoZSBzdHJlYW1cbiAgICAgKiB3aGljaCBjYW4gYmUgdHVybmVkIGJhY2sgaW50byBhIFN0cmVhbSB3aXRoIGBTdHJlYW0uZnJvbVJlYWRhYmxlU3RyZWFtKClgLlxuICAgICAqL1xuICAgIHRvUmVhZGFibGVTdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgaXRlcjtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICAgICAgICAgIGl0ZXIgPSBzZWxmW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIHB1bGwoY3RybCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHJsLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICBjdHJsLmVucXVldWUoYnl0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0cmwuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXIucmV0dXJuPy4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogX2l0ZXJTU0VNZXNzYWdlcyhyZXNwb25zZSwgY29udHJvbGxlcikge1xuICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcihgQXR0ZW1wdGVkIHRvIGl0ZXJhdGUgb3ZlciBhIHJlc3BvbnNlIHdpdGggbm8gYm9keWApO1xuICAgIH1cbiAgICBjb25zdCBzc2VEZWNvZGVyID0gbmV3IFNTRURlY29kZXIoKTtcbiAgICBjb25zdCBsaW5lRGVjb2RlciA9IG5ldyBMaW5lRGVjb2RlcigpO1xuICAgIGNvbnN0IGl0ZXIgPSBSZWFkYWJsZVN0cmVhbVRvQXN5bmNJdGVyYWJsZShyZXNwb25zZS5ib2R5KTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHNzZUNodW5rIG9mIGl0ZXJTU0VDaHVua3MoaXRlcikpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVEZWNvZGVyLmRlY29kZShzc2VDaHVuaykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNzZSA9IHNzZURlY29kZXIuZGVjb2RlKGxpbmUpO1xuICAgICAgICAgICAgaWYgKHNzZSlcbiAgICAgICAgICAgICAgICB5aWVsZCBzc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVEZWNvZGVyLmZsdXNoKCkpIHtcbiAgICAgICAgY29uc3Qgc3NlID0gc3NlRGVjb2Rlci5kZWNvZGUobGluZSk7XG4gICAgICAgIGlmIChzc2UpXG4gICAgICAgICAgICB5aWVsZCBzc2U7XG4gICAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciwgaXRlcmF0ZXMgb3ZlciBpdCBhbmQgeWllbGRzIGZ1bGxcbiAqIFNTRSBjaHVua3MsIGkuZS4geWllbGRzIHdoZW4gYSBkb3VibGUgbmV3LWxpbmUgaXMgZW5jb3VudGVyZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uKiBpdGVyU1NFQ2h1bmtzKGl0ZXJhdG9yKSB7XG4gICAgbGV0IGRhdGEgPSBuZXcgVWludDhBcnJheSgpO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGNodW5rID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmFyeUNodW5rID0gY2h1bmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGNodW5rKVxuICAgICAgICAgICAgOiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGNodW5rKVxuICAgICAgICAgICAgICAgIDogY2h1bms7XG4gICAgICAgIGxldCBuZXdEYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5sZW5ndGggKyBiaW5hcnlDaHVuay5sZW5ndGgpO1xuICAgICAgICBuZXdEYXRhLnNldChkYXRhKTtcbiAgICAgICAgbmV3RGF0YS5zZXQoYmluYXJ5Q2h1bmssIGRhdGEubGVuZ3RoKTtcbiAgICAgICAgZGF0YSA9IG5ld0RhdGE7XG4gICAgICAgIGxldCBwYXR0ZXJuSW5kZXg7XG4gICAgICAgIHdoaWxlICgocGF0dGVybkluZGV4ID0gZmluZERvdWJsZU5ld2xpbmVJbmRleChkYXRhKSkgIT09IC0xKSB7XG4gICAgICAgICAgICB5aWVsZCBkYXRhLnNsaWNlKDAsIHBhdHRlcm5JbmRleCk7XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZShwYXR0ZXJuSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgeWllbGQgZGF0YTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaW5kRG91YmxlTmV3bGluZUluZGV4KGJ1ZmZlcikge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGVuZCBwYXR0ZXJucyAoXFxyXFxyLCBcXG5cXG4sIFxcclxcblxcclxcbilcbiAgICAvLyBhbmQgcmV0dXJucyB0aGUgaW5kZXggcmlnaHQgYWZ0ZXIgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW55IHBhdHRlcm4sXG4gICAgLy8gb3IgLTEgaWYgbm9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGZvdW5kLlxuICAgIGNvbnN0IG5ld2xpbmUgPSAweDBhOyAvLyBcXG5cbiAgICBjb25zdCBjYXJyaWFnZSA9IDB4MGQ7IC8vIFxcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICBpZiAoYnVmZmVyW2ldID09PSBuZXdsaW5lICYmIGJ1ZmZlcltpICsgMV0gPT09IG5ld2xpbmUpIHtcbiAgICAgICAgICAgIC8vIFxcblxcblxuICAgICAgICAgICAgcmV0dXJuIGkgKyAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWZmZXJbaV0gPT09IGNhcnJpYWdlICYmIGJ1ZmZlcltpICsgMV0gPT09IGNhcnJpYWdlKSB7XG4gICAgICAgICAgICAvLyBcXHJcXHJcbiAgICAgICAgICAgIHJldHVybiBpICsgMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVyW2ldID09PSBjYXJyaWFnZSAmJlxuICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9PT0gbmV3bGluZSAmJlxuICAgICAgICAgICAgaSArIDMgPCBidWZmZXIubGVuZ3RoICYmXG4gICAgICAgICAgICBidWZmZXJbaSArIDJdID09PSBjYXJyaWFnZSAmJlxuICAgICAgICAgICAgYnVmZmVyW2kgKyAzXSA9PT0gbmV3bGluZSkge1xuICAgICAgICAgICAgLy8gXFxyXFxuXFxyXFxuXG4gICAgICAgICAgICByZXR1cm4gaSArIDQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuY2xhc3MgU1NFRGVjb2RlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICB9XG4gICAgZGVjb2RlKGxpbmUpIHtcbiAgICAgICAgaWYgKGxpbmUuZW5kc1dpdGgoJ1xccicpKSB7XG4gICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgbGluZS5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxpbmUpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IGxpbmUgYW5kIHdlIGRpZG4ndCBwcmV2aW91c2x5IGVuY291bnRlciBhbnkgbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudCAmJiAhdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHNzZSA9IHtcbiAgICAgICAgICAgICAgICBldmVudDogdGhpcy5ldmVudCxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEuam9pbignXFxuJyksXG4gICAgICAgICAgICAgICAgcmF3OiB0aGlzLmNodW5rcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmV2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBzc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaHVua3MucHVzaChsaW5lKTtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgW2ZpZWxkbmFtZSwgXywgdmFsdWVdID0gcGFydGl0aW9uKGxpbmUsICc6Jyk7XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcgJykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZG5hbWUgPT09ICdldmVudCcpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaWVsZG5hbWUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbi8qKiBUaGlzIGlzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0aGF0J3MganVzdCB1c2VkIGZvciB0ZXN0aW5nICovXG5leHBvcnQgZnVuY3Rpb24gX2RlY29kZUNodW5rcyhjaHVua3MsIHsgZmx1c2ggfSA9IHsgZmx1c2g6IGZhbHNlIH0pIHtcbiAgICBjb25zdCBkZWNvZGVyID0gbmV3IExpbmVEZWNvZGVyKCk7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBsaW5lcy5wdXNoKC4uLmRlY29kZXIuZGVjb2RlKGNodW5rKSk7XG4gICAgfVxuICAgIGlmIChmbHVzaCkge1xuICAgICAgICBsaW5lcy5wdXNoKC4uLmRlY29kZXIuZmx1c2goKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cbmZ1bmN0aW9uIHBhcnRpdGlvbihzdHIsIGRlbGltaXRlcikge1xuICAgIGNvbnN0IGluZGV4ID0gc3RyLmluZGV4T2YoZGVsaW1pdGVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBpbmRleCksIGRlbGltaXRlciwgc3RyLnN1YnN0cmluZyhpbmRleCArIGRlbGltaXRlci5sZW5ndGgpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdHIsICcnLCAnJ107XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJlYW1pbmcubWpzLm1hcCIsCiAgICAiaW1wb3J0IHsgRm9ybURhdGEsIEZpbGUsIGdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zLCBpc0ZzUmVhZFN0cmVhbSwgfSBmcm9tIFwiLi9fc2hpbXMvaW5kZXgubWpzXCI7XG5leHBvcnQgeyBmaWxlRnJvbVBhdGggfSBmcm9tIFwiLi9fc2hpbXMvaW5kZXgubWpzXCI7XG5leHBvcnQgY29uc3QgaXNSZXNwb25zZUxpa2UgPSAodmFsdWUpID0+IHZhbHVlICE9IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHZhbHVlLnVybCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2YgdmFsdWUuYmxvYiA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc0ZpbGVMaWtlID0gKHZhbHVlKSA9PiB2YWx1ZSAhPSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiB2YWx1ZS5uYW1lID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiB2YWx1ZS5sYXN0TW9kaWZpZWQgPT09ICdudW1iZXInICYmXG4gICAgaXNCbG9iTGlrZSh2YWx1ZSk7XG4vKipcbiAqIFRoZSBCbG9iTGlrZSB0eXBlIG9taXRzIGFycmF5QnVmZmVyKCkgYmVjYXVzZSBAdHlwZXMvbm9kZS1mZXRjaEBeMi42LjQgbGFja3MgaXQ7IGJ1dCB0aGlzIGNoZWNrXG4gKiBhZGRzIHRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCB0eXBlIGJlY2F1c2UgaXQgaXMgYXZhaWxhYmxlIGFuZCB1c2VkIGF0IHJ1bnRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQmxvYkxpa2UgPSAodmFsdWUpID0+IHZhbHVlICE9IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHZhbHVlLnR5cGUgPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIHZhbHVlLnRleHQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsdWUuc2xpY2UgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsdWUuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbic7XG5leHBvcnQgY29uc3QgaXNVcGxvYWRhYmxlID0gKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIGlzRmlsZUxpa2UodmFsdWUpIHx8IGlzUmVzcG9uc2VMaWtlKHZhbHVlKSB8fCBpc0ZzUmVhZFN0cmVhbSh2YWx1ZSk7XG59O1xuLyoqXG4gKiBIZWxwZXIgZm9yIGNyZWF0aW5nIGEge0BsaW5rIEZpbGV9IHRvIHBhc3MgdG8gYW4gU0RLIHVwbG9hZCBtZXRob2QgZnJvbSBhIHZhcmlldHkgb2YgZGlmZmVyZW50IGRhdGEgZm9ybWF0c1xuICogQHBhcmFtIHZhbHVlIHRoZSByYXcgY29udGVudCBvZiB0aGUgZmlsZS4gIENhbiBiZSBhbiB7QGxpbmsgVXBsb2FkYWJsZX0sIHtAbGluayBCbG9iTGlrZVBhcnR9LCBvciB7QGxpbmsgQXN5bmNJdGVyYWJsZX0gb2Yge0BsaW5rIEJsb2JMaWtlUGFydH1zXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUuIElmIG9taXR0ZWQsIHRvRmlsZSB3aWxsIHRyeSB0byBkZXRlcm1pbmUgYSBmaWxlIG5hbWUgZnJvbSBiaXRzIGlmIHBvc3NpYmxlXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMudHlwZSB0aGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50XG4gKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMubGFzdE1vZGlmaWVkIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWVzdGFtcFxuICogQHJldHVybnMgYSB7QGxpbmsgRmlsZX0gd2l0aCB0aGUgZ2l2ZW4gcHJvcGVydGllc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9GaWxlKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gICAgLy8gSWYgaXQncyBhIHByb21pc2UsIHJlc29sdmUgaXQuXG4gICAgdmFsdWUgPSBhd2FpdCB2YWx1ZTtcbiAgICAvLyBJZiB3ZSd2ZSBiZWVuIGdpdmVuIGEgYEZpbGVgIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICBpZiAoaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNSZXNwb25zZUxpa2UodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB2YWx1ZS5ibG9iKCk7XG4gICAgICAgIG5hbWUgfHwgKG5hbWUgPSBuZXcgVVJMKHZhbHVlLnVybCkucGF0aG5hbWUuc3BsaXQoL1tcXFxcL10vKS5wb3AoKSA/PyAndW5rbm93bl9maWxlJyk7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gY29udmVydCB0aGUgYEJsb2JgIGludG8gYW4gYXJyYXkgYnVmZmVyIGJlY2F1c2UgdGhlIGBCbG9iYCBjbGFzc1xuICAgICAgICAvLyB0aGF0IGBub2RlLWZldGNoYCBkZWZpbmVzIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSB3ZWIgc3RhbmRhcmQgd2hpY2ggcmVzdWx0c1xuICAgICAgICAvLyBpbiBgbmV3IEZpbGVgIGludGVycHJldGluZyBpdCBhcyBhIHN0cmluZyBpbnN0ZWFkIG9mIGJpbmFyeSBkYXRhLlxuICAgICAgICBjb25zdCBkYXRhID0gaXNCbG9iTGlrZShibG9iKSA/IFsoYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpKV0gOiBbYmxvYl07XG4gICAgICAgIHJldHVybiBuZXcgRmlsZShkYXRhLCBuYW1lLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgYml0cyA9IGF3YWl0IGdldEJ5dGVzKHZhbHVlKTtcbiAgICBuYW1lIHx8IChuYW1lID0gZ2V0TmFtZSh2YWx1ZSkgPz8gJ3Vua25vd25fZmlsZScpO1xuICAgIGlmICghb3B0aW9ucz8udHlwZSkge1xuICAgICAgICBjb25zdCB0eXBlID0gYml0c1swXT8udHlwZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgdHlwZSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRmlsZShiaXRzLCBuYW1lLCBvcHRpb25zKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldEJ5dGVzKHZhbHVlKSB7XG4gICAgbGV0IHBhcnRzID0gW107XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSB8fCAvLyBpbmNsdWRlcyBVaW50OEFycmF5LCBCdWZmZXIsIGV0Yy5cbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBwYXJ0cy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcGFydHMucHVzaChhd2FpdCB2YWx1ZS5hcnJheUJ1ZmZlcigpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBc3luY0l0ZXJhYmxlSXRlcmF0b3IodmFsdWUpIC8vIGluY2x1ZGVzIFJlYWRhYmxlLCBSZWFkYWJsZVN0cmVhbSwgZXRjLlxuICAgICkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGNodW5rKTsgLy8gVE9ETywgY29uc2lkZXIgdmFsaWRhdGluZz9cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGRhdGEgdHlwZTogJHt0eXBlb2YgdmFsdWV9OyBjb25zdHJ1Y3RvcjogJHt2YWx1ZT8uY29uc3RydWN0b3JcbiAgICAgICAgICAgID8ubmFtZX07IHByb3BzOiAke3Byb3BzRm9yRXJyb3IodmFsdWUpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHM7XG59XG5mdW5jdGlvbiBwcm9wc0ZvckVycm9yKHZhbHVlKSB7XG4gICAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gICAgcmV0dXJuIGBbJHtwcm9wcy5tYXAoKHApID0+IGBcIiR7cH1cImApLmpvaW4oJywgJyl9XWA7XG59XG5mdW5jdGlvbiBnZXROYW1lKHZhbHVlKSB7XG4gICAgcmV0dXJuIChnZXRTdHJpbmdGcm9tTWF5YmVCdWZmZXIodmFsdWUubmFtZSkgfHxcbiAgICAgICAgZ2V0U3RyaW5nRnJvbU1heWJlQnVmZmVyKHZhbHVlLmZpbGVuYW1lKSB8fFxuICAgICAgICAvLyBGb3IgZnMuUmVhZFN0cmVhbVxuICAgICAgICBnZXRTdHJpbmdGcm9tTWF5YmVCdWZmZXIodmFsdWUucGF0aCk/LnNwbGl0KC9bXFxcXC9dLykucG9wKCkpO1xufVxuY29uc3QgZ2V0U3RyaW5nRnJvbU1heWJlQnVmZmVyID0gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4geDtcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgeCBpbnN0YW5jZW9mIEJ1ZmZlcilcbiAgICAgICAgcmV0dXJuIFN0cmluZyh4KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbmNvbnN0IGlzQXN5bmNJdGVyYWJsZUl0ZXJhdG9yID0gKHZhbHVlKSA9PiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc011bHRpcGFydEJvZHkgPSAoYm9keSkgPT4gYm9keSAmJiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgJiYgYm9keS5ib2R5ICYmIGJvZHlbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ011bHRpcGFydEJvZHknO1xuLyoqXG4gKiBSZXR1cm5zIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSByZXF1ZXN0IGlmIGFueSBwYXJ0IG9mIHRoZSBnaXZlbiByZXF1ZXN0IGJvZHkgY29udGFpbnMgYSBGaWxlIC8gQmxvYiB2YWx1ZS5cbiAqIE90aGVyd2lzZSByZXR1cm5zIHRoZSByZXF1ZXN0IGFzIGlzLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVNdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMgPSBhc3luYyAob3B0cykgPT4ge1xuICAgIGlmICghaGFzVXBsb2FkYWJsZVZhbHVlKG9wdHMuYm9keSkpXG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgIGNvbnN0IGZvcm0gPSBhd2FpdCBjcmVhdGVGb3JtKG9wdHMuYm9keSk7XG4gICAgcmV0dXJuIGdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zKGZvcm0sIG9wdHMpO1xufTtcbmV4cG9ydCBjb25zdCBtdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMgPSBhc3luYyAob3B0cykgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBhd2FpdCBjcmVhdGVGb3JtKG9wdHMuYm9keSk7XG4gICAgcmV0dXJuIGdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zKGZvcm0sIG9wdHMpO1xufTtcbmV4cG9ydCBjb25zdCBjcmVhdGVGb3JtID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoYm9keSB8fCB7fSkubWFwKChba2V5LCB2YWx1ZV0pID0+IGFkZEZvcm1WYWx1ZShmb3JtLCBrZXksIHZhbHVlKSkpO1xuICAgIHJldHVybiBmb3JtO1xufTtcbmNvbnN0IGhhc1VwbG9hZGFibGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmIChpc1VwbG9hZGFibGUodmFsdWUpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZS5zb21lKGhhc1VwbG9hZGFibGVWYWx1ZSk7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoaGFzVXBsb2FkYWJsZVZhbHVlKHZhbHVlW2tdKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgYWRkRm9ybVZhbHVlID0gYXN5bmMgKGZvcm0sIGtleSwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlY2VpdmVkIG51bGwgZm9yIFwiJHtrZXl9XCI7IHRvIHBhc3MgbnVsbCBpbiBGb3JtRGF0YSwgeW91IG11c3QgdXNlIHRoZSBzdHJpbmcgJ251bGwnYCk7XG4gICAgfVxuICAgIC8vIFRPRE86IG1ha2UgbmVzdGVkIGZvcm1hdHMgY29uZmlndXJhYmxlXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICBmb3JtLmFwcGVuZChrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1VwbG9hZGFibGUodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0b0ZpbGUodmFsdWUpO1xuICAgICAgICBmb3JtLmFwcGVuZChrZXksIGZpbGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh2YWx1ZS5tYXAoKGVudHJ5KSA9PiBhZGRGb3JtVmFsdWUoZm9ybSwga2V5ICsgJ1tdJywgZW50cnkpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW25hbWUsIHByb3BdKSA9PiBhZGRGb3JtVmFsdWUoZm9ybSwgYCR7a2V5fVske25hbWV9XWAsIHByb3ApKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZhbHVlIGdpdmVuIHRvIGZvcm0sIGV4cGVjdGVkIGEgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9iamVjdCwgQXJyYXksIEZpbGUgb3IgQmxvYiBidXQgZ290ICR7dmFsdWV9IGluc3RlYWRgKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2Fkcy5tanMubWFwIiwKICAgICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0Fic3RyYWN0UGFnZV9jbGllbnQ7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5tanNcIjtcbmltcG9ydCB7IFN0cmVhbSB9IGZyb20gXCIuL3N0cmVhbWluZy5tanNcIjtcbmltcG9ydCB7IEFudGhyb3BpY0Vycm9yLCBBUElFcnJvciwgQVBJQ29ubmVjdGlvbkVycm9yLCBBUElDb25uZWN0aW9uVGltZW91dEVycm9yLCBBUElVc2VyQWJvcnRFcnJvciwgfSBmcm9tIFwiLi9lcnJvci5tanNcIjtcbmltcG9ydCB7IGtpbmQgYXMgc2hpbXNLaW5kLCBnZXREZWZhdWx0QWdlbnQsIGZldGNoLCB9IGZyb20gXCIuL19zaGltcy9pbmRleC5tanNcIjtcbmltcG9ydCB7IGlzQmxvYkxpa2UsIGlzTXVsdGlwYXJ0Qm9keSB9IGZyb20gXCIuL3VwbG9hZHMubWpzXCI7XG5leHBvcnQgeyBtYXliZU11bHRpcGFydEZvcm1SZXF1ZXN0T3B0aW9ucywgbXVsdGlwYXJ0Rm9ybVJlcXVlc3RPcHRpb25zLCBjcmVhdGVGb3JtLCB9IGZyb20gXCIuL3VwbG9hZHMubWpzXCI7XG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0UGFyc2VSZXNwb25zZShwcm9wcykge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IHByb3BzO1xuICAgIGlmIChwcm9wcy5vcHRpb25zLnN0cmVhbSkge1xuICAgICAgICBkZWJ1ZygncmVzcG9uc2UnLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnVybCwgcmVzcG9uc2UuaGVhZGVycywgcmVzcG9uc2UuYm9keSk7XG4gICAgICAgIC8vIE5vdGU6IHRoZXJlIGlzIGFuIGludmFyaWFudCBoZXJlIHRoYXQgaXNuJ3QgcmVwcmVzZW50ZWQgaW4gdGhlIHR5cGUgc3lzdGVtXG4gICAgICAgIC8vIHRoYXQgaWYgeW91IHNldCBgc3RyZWFtOiB0cnVlYCB0aGUgcmVzcG9uc2UgdHlwZSBtdXN0IGFsc28gYmUgYFN0cmVhbTxUPmBcbiAgICAgICAgaWYgKHByb3BzLm9wdGlvbnMuX19zdHJlYW1DbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLm9wdGlvbnMuX19zdHJlYW1DbGFzcy5mcm9tU1NFUmVzcG9uc2UocmVzcG9uc2UsIHByb3BzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJlYW0uZnJvbVNTRVJlc3BvbnNlKHJlc3BvbnNlLCBwcm9wcy5jb250cm9sbGVyKTtcbiAgICB9XG4gICAgLy8gZmV0Y2ggcmVmdXNlcyB0byByZWFkIHRoZSBib2R5IHdoZW4gdGhlIHN0YXR1cyBjb2RlIGlzIDIwNC5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9wcy5vcHRpb25zLl9fYmluYXJ5UmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICBjb25zdCBpc0pTT04gPSBjb250ZW50VHlwZT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSB8fCBjb250ZW50VHlwZT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL3ZuZC5hcGkranNvbicpO1xuICAgIGlmIChpc0pTT04pIHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgZGVidWcoJ3Jlc3BvbnNlJywgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS51cmwsIHJlc3BvbnNlLmhlYWRlcnMsIGpzb24pO1xuICAgICAgICByZXR1cm4gX2FkZFJlcXVlc3RJRChqc29uLCByZXNwb25zZSk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgZGVidWcoJ3Jlc3BvbnNlJywgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS51cmwsIHJlc3BvbnNlLmhlYWRlcnMsIHRleHQpO1xuICAgIC8vIFRPRE8gaGFuZGxlIGJsb2IsIGFycmF5YnVmZmVyLCBvdGhlciBjb250ZW50IHR5cGVzLCBldGMuXG4gICAgcmV0dXJuIHRleHQ7XG59XG5mdW5jdGlvbiBfYWRkUmVxdWVzdElEKHZhbHVlLCByZXNwb25zZSkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsICdfcmVxdWVzdF9pZCcsIHtcbiAgICAgICAgdmFsdWU6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXF1ZXN0LWlkJyksXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xufVxuLyoqXG4gKiBBIHN1YmNsYXNzIG9mIGBQcm9taXNlYCBwcm92aWRpbmcgYWRkaXRpb25hbCBoZWxwZXIgbWV0aG9kc1xuICogZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIFNESy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFQSVByb21pc2UgZXh0ZW5kcyBQcm9taXNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zZVByb21pc2UsIHBhcnNlUmVzcG9uc2UgPSBkZWZhdWx0UGFyc2VSZXNwb25zZSkge1xuICAgICAgICBzdXBlcigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBtYXliZSBhIGJpdCB3ZWlyZCBidXQgdGhpcyBoYXMgdG8gYmUgYSBuby1vcCB0byBub3QgaW1wbGljaXRseVxuICAgICAgICAgICAgLy8gcGFyc2UgdGhlIHJlc3BvbnNlIGJvZHk7IGluc3RlYWQgLnRoZW4sIC5jYXRjaCwgLmZpbmFsbHkgYXJlIG92ZXJyaWRkZW5cbiAgICAgICAgICAgIC8vIHRvIHBhcnNlIHRoZSByZXNwb25zZVxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzcG9uc2VQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlO1xuICAgICAgICB0aGlzLnBhcnNlUmVzcG9uc2UgPSBwYXJzZVJlc3BvbnNlO1xuICAgIH1cbiAgICBfdGhlblVud3JhcCh0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBUElQcm9taXNlKHRoaXMucmVzcG9uc2VQcm9taXNlLCBhc3luYyAocHJvcHMpID0+IF9hZGRSZXF1ZXN0SUQodHJhbnNmb3JtKGF3YWl0IHRoaXMucGFyc2VSZXNwb25zZShwcm9wcyksIHByb3BzKSwgcHJvcHMucmVzcG9uc2UpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcmF3IGBSZXNwb25zZWAgaW5zdGFuY2UgaW5zdGVhZCBvZiBwYXJzaW5nIHRoZSByZXNwb25zZVxuICAgICAqIGRhdGEuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgcmVzcG9uc2UgYm9keSBidXQgc3RpbGwgZ2V0IHRoZSBgUmVzcG9uc2VgXG4gICAgICogaW5zdGFuY2UsIHlvdSBjYW4gdXNlIHtAbGluayB3aXRoUmVzcG9uc2UoKX0uXG4gICAgICpcbiAgICAgKiDwn5GLIEdldHRpbmcgdGhlIHdyb25nIFR5cGVTY3JpcHQgdHlwZSBmb3IgYFJlc3BvbnNlYD9cbiAgICAgKiBUcnkgc2V0dGluZyBgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiTm9kZU5leHRcImAgaWYgeW91IGNhbixcbiAgICAgKiBvciBhZGQgb25lIG9mIHRoZXNlIGltcG9ydHMgYmVmb3JlIHlvdXIgZmlyc3QgYGltcG9ydCDigKYgZnJvbSAnQGFudGhyb3BpYy1haS9zZGsnYDpcbiAgICAgKiAtIGBpbXBvcnQgJ0BhbnRocm9waWMtYWkvc2RrL3NoaW1zL25vZGUnYCAoaWYgeW91J3JlIHJ1bm5pbmcgb24gTm9kZSlcbiAgICAgKiAtIGBpbXBvcnQgJ0BhbnRocm9waWMtYWkvc2RrL3NoaW1zL3dlYidgIChvdGhlcndpc2UpXG4gICAgICovXG4gICAgYXNSZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VQcm9taXNlLnRoZW4oKHApID0+IHAucmVzcG9uc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXJzZWQgcmVzcG9uc2UgZGF0YSwgdGhlIHJhdyBgUmVzcG9uc2VgIGluc3RhbmNlIGFuZCB0aGUgSUQgb2YgdGhlIHJlcXVlc3QsXG4gICAgICogcmV0dXJuZWQgdmllIHRoZSBgcmVxdWVzdC1pZGAgaGVhZGVyIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHJlcXVlc3RzIGFuZCByZXNwb3J0aW5nXG4gICAgICogaXNzdWVzIHRvIEFudGhyb3BpYy5cbiAgICAgKlxuICAgICAqIElmIHlvdSBqdXN0IHdhbnQgdG8gZ2V0IHRoZSByYXcgYFJlc3BvbnNlYCBpbnN0YW5jZSB3aXRob3V0IHBhcnNpbmcgaXQsXG4gICAgICogeW91IGNhbiB1c2Uge0BsaW5rIGFzUmVzcG9uc2UoKX0uXG4gICAgICpcbiAgICAgKiDwn5GLIEdldHRpbmcgdGhlIHdyb25nIFR5cGVTY3JpcHQgdHlwZSBmb3IgYFJlc3BvbnNlYD9cbiAgICAgKiBUcnkgc2V0dGluZyBgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiTm9kZU5leHRcImAgaWYgeW91IGNhbixcbiAgICAgKiBvciBhZGQgb25lIG9mIHRoZXNlIGltcG9ydHMgYmVmb3JlIHlvdXIgZmlyc3QgYGltcG9ydCDigKYgZnJvbSAnQGFudGhyb3BpYy1haS9zZGsnYDpcbiAgICAgKiAtIGBpbXBvcnQgJ0BhbnRocm9waWMtYWkvc2RrL3NoaW1zL25vZGUnYCAoaWYgeW91J3JlIHJ1bm5pbmcgb24gTm9kZSlcbiAgICAgKiAtIGBpbXBvcnQgJ0BhbnRocm9waWMtYWkvc2RrL3NoaW1zL3dlYidgIChvdGhlcndpc2UpXG4gICAgICovXG4gICAgYXN5bmMgd2l0aFJlc3BvbnNlKCkge1xuICAgICAgICBjb25zdCBbZGF0YSwgcmVzcG9uc2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucGFyc2UoKSwgdGhpcy5hc1Jlc3BvbnNlKCldKTtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgcmVzcG9uc2UsIHJlcXVlc3RfaWQ6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXF1ZXN0LWlkJykgfTtcbiAgICB9XG4gICAgcGFyc2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJzZWRQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlZFByb21pc2UgPSB0aGlzLnJlc3BvbnNlUHJvbWlzZS50aGVuKHRoaXMucGFyc2VSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VkUHJvbWlzZTtcbiAgICB9XG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZSgpLnRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpO1xuICAgIH1cbiAgICBjYXRjaChvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlKCkuY2F0Y2gob25yZWplY3RlZCk7XG4gICAgfVxuICAgIGZpbmFsbHkob25maW5hbGx5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlKCkuZmluYWxseShvbmZpbmFsbHkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBUElDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHsgYmFzZVVSTCwgbWF4UmV0cmllcyA9IDIsIHRpbWVvdXQgPSA2MDAwMDAsIC8vIDEwIG1pbnV0ZXNcbiAgICBodHRwQWdlbnQsIGZldGNoOiBvdmVycmlkZGVuRmV0Y2gsIH0pIHtcbiAgICAgICAgdGhpcy5iYXNlVVJMID0gYmFzZVVSTDtcbiAgICAgICAgdGhpcy5tYXhSZXRyaWVzID0gdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoJ21heFJldHJpZXMnLCBtYXhSZXRyaWVzKTtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoJ3RpbWVvdXQnLCB0aW1lb3V0KTtcbiAgICAgICAgdGhpcy5odHRwQWdlbnQgPSBodHRwQWdlbnQ7XG4gICAgICAgIHRoaXMuZmV0Y2ggPSBvdmVycmlkZGVuRmV0Y2ggPz8gZmV0Y2g7XG4gICAgfVxuICAgIGF1dGhIZWFkZXJzKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGlzIHRvIGFkZCB5b3VyIG93biBkZWZhdWx0IGhlYWRlcnMsIGZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogIHtcbiAgICAgKiAgICAuLi5zdXBlci5kZWZhdWx0SGVhZGVycygpLFxuICAgICAqICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgMTIzJyxcbiAgICAgKiAgfVxuICAgICAqL1xuICAgIGRlZmF1bHRIZWFkZXJzKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogdGhpcy5nZXRVc2VyQWdlbnQoKSxcbiAgICAgICAgICAgIC4uLmdldFBsYXRmb3JtSGVhZGVycygpLFxuICAgICAgICAgICAgLi4udGhpcy5hdXRoSGVhZGVycyhvcHRzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhpcyB0byBhZGQgeW91ciBvd24gaGVhZGVycyB2YWxpZGF0aW9uOlxuICAgICAqL1xuICAgIHZhbGlkYXRlSGVhZGVycyhoZWFkZXJzLCBjdXN0b21IZWFkZXJzKSB7IH1cbiAgICBkZWZhdWx0SWRlbXBvdGVuY3lLZXkoKSB7XG4gICAgICAgIHJldHVybiBgc3RhaW5sZXNzLW5vZGUtcmV0cnktJHt1dWlkNCgpfWA7XG4gICAgfVxuICAgIGdldChwYXRoLCBvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZFJlcXVlc3QoJ2dldCcsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBwb3N0KHBhdGgsIG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kUmVxdWVzdCgncG9zdCcsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBwYXRjaChwYXRoLCBvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZFJlcXVlc3QoJ3BhdGNoJywgcGF0aCwgb3B0cyk7XG4gICAgfVxuICAgIHB1dChwYXRoLCBvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZFJlcXVlc3QoJ3B1dCcsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBkZWxldGUocGF0aCwgb3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2RSZXF1ZXN0KCdkZWxldGUnLCBwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgbWV0aG9kUmVxdWVzdChtZXRob2QsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChQcm9taXNlLnJlc29sdmUob3B0cykudGhlbihhc3luYyAob3B0cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IG9wdHMgJiYgaXNCbG9iTGlrZShvcHRzPy5ib2R5KSA/IG5ldyBEYXRhVmlldyhhd2FpdCBvcHRzLmJvZHkuYXJyYXlCdWZmZXIoKSlcbiAgICAgICAgICAgICAgICA6IG9wdHM/LmJvZHkgaW5zdGFuY2VvZiBEYXRhVmlldyA/IG9wdHMuYm9keVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHM/LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBEYXRhVmlldyhvcHRzLmJvZHkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9wdHMgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KG9wdHM/LmJvZHkpID8gbmV3IERhdGFWaWV3KG9wdHMuYm9keS5idWZmZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvcHRzPy5ib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHsgbWV0aG9kLCBwYXRoLCAuLi5vcHRzLCBib2R5IH07XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZ2V0QVBJTGlzdChwYXRoLCBQYWdlLCBvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBUElMaXN0KFBhZ2UsIHsgbWV0aG9kOiAnZ2V0JywgcGF0aCwgLi4ub3B0cyB9KTtcbiAgICB9XG4gICAgY2FsY3VsYXRlQ29udGVudExlbmd0aChib2R5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCAndXRmOCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFRleHRFbmNvZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2Rlci5lbmNvZGUoYm9keSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZWQubGVuZ3RoLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGJ1aWxkUmVxdWVzdChvcHRpb25zLCB7IHJldHJ5Q291bnQgPSAwIH0gPSB7fSkge1xuICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kLCBwYXRoLCBxdWVyeSwgaGVhZGVyczogaGVhZGVycyA9IHt9IH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBib2R5ID0gQXJyYXlCdWZmZXIuaXNWaWV3KG9wdGlvbnMuYm9keSkgfHwgKG9wdGlvbnMuX19iaW5hcnlSZXF1ZXN0ICYmIHR5cGVvZiBvcHRpb25zLmJvZHkgPT09ICdzdHJpbmcnKSA/XG4gICAgICAgICAgICBvcHRpb25zLmJvZHlcbiAgICAgICAgICAgIDogaXNNdWx0aXBhcnRCb2R5KG9wdGlvbnMuYm9keSkgPyBvcHRpb25zLmJvZHkuYm9keVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5ib2R5ID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5ib2R5LCBudWxsLCAyKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLmNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoYm9keSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVUkwocGF0aCwgcXVlcnkpO1xuICAgICAgICBpZiAoJ3RpbWVvdXQnIGluIG9wdGlvbnMpXG4gICAgICAgICAgICB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcigndGltZW91dCcsIG9wdGlvbnMudGltZW91dCk7XG4gICAgICAgIG9wdGlvbnMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyB0aGlzLnRpbWVvdXQ7XG4gICAgICAgIGNvbnN0IGh0dHBBZ2VudCA9IG9wdGlvbnMuaHR0cEFnZW50ID8/IHRoaXMuaHR0cEFnZW50ID8/IGdldERlZmF1bHRBZ2VudCh1cmwpO1xuICAgICAgICBjb25zdCBtaW5BZ2VudFRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgKyAxMDAwO1xuICAgICAgICBpZiAodHlwZW9mIGh0dHBBZ2VudD8ub3B0aW9ucz8udGltZW91dCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIG1pbkFnZW50VGltZW91dCA+IChodHRwQWdlbnQub3B0aW9ucy50aW1lb3V0ID8/IDApKSB7XG4gICAgICAgICAgICAvLyBBbGxvdyBhbnkgZ2l2ZW4gcmVxdWVzdCB0byBidW1wIG91ciBhZ2VudCBhY3RpdmUgc29ja2V0IHRpbWVvdXQuXG4gICAgICAgICAgICAvLyBUaGlzIG1heSBzZWVtIHN0cmFuZ2UsIGJ1dCBsZWFraW5nIGFjdGl2ZSBzb2NrZXRzIHNob3VsZCBiZSByYXJlIGFuZCBub3QgcGFydGljdWxhcmx5IHByb2JsZW1hdGljLFxuICAgICAgICAgICAgLy8gYW5kIHdpdGhvdXQgbXV0YXRpbmcgYWdlbnQgd2Ugd291bGQgbmVlZCB0byBjcmVhdGUgbW9yZSBvZiB0aGVtLlxuICAgICAgICAgICAgLy8gVGhpcyB0cmFkZW9mZiBvcHRpbWl6ZXMgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgaHR0cEFnZW50Lm9wdGlvbnMudGltZW91dCA9IG1pbkFnZW50VGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pZGVtcG90ZW5jeUhlYWRlciAmJiBtZXRob2QgIT09ICdnZXQnKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWRlbXBvdGVuY3lLZXkpXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5pZGVtcG90ZW5jeUtleSA9IHRoaXMuZGVmYXVsdElkZW1wb3RlbmN5S2V5KCk7XG4gICAgICAgICAgICBoZWFkZXJzW3RoaXMuaWRlbXBvdGVuY3lIZWFkZXJdID0gb3B0aW9ucy5pZGVtcG90ZW5jeUtleTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXFIZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoeyBvcHRpb25zLCBoZWFkZXJzLCBjb250ZW50TGVuZ3RoLCByZXRyeUNvdW50IH0pO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAuLi4oYm9keSAmJiB7IGJvZHk6IGJvZHkgfSksXG4gICAgICAgICAgICBoZWFkZXJzOiByZXFIZWFkZXJzLFxuICAgICAgICAgICAgLi4uKGh0dHBBZ2VudCAmJiB7IGFnZW50OiBodHRwQWdlbnQgfSksXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIG5vZGUtZmV0Y2ggdXNlcyBhIGN1c3RvbSBBYm9ydFNpZ25hbCB0eXBlIHRoYXQgaXNcbiAgICAgICAgICAgIC8vIG5vdCBjb21wYXRpYmxlIHdpdGggc3RhbmRhcmQgd2ViIHR5cGVzXG4gICAgICAgICAgICBzaWduYWw6IG9wdGlvbnMuc2lnbmFsID8/IG51bGwsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IHJlcSwgdXJsLCB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQgfTtcbiAgICB9XG4gICAgYnVpbGRIZWFkZXJzKHsgb3B0aW9ucywgaGVhZGVycywgY29udGVudExlbmd0aCwgcmV0cnlDb3VudCwgfSkge1xuICAgICAgICBjb25zdCByZXFIZWFkZXJzID0ge307XG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXFIZWFkZXJzWydjb250ZW50LWxlbmd0aCddID0gY29udGVudExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0SGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnMob3B0aW9ucyk7XG4gICAgICAgIGFwcGx5SGVhZGVyc011dChyZXFIZWFkZXJzLCBkZWZhdWx0SGVhZGVycyk7XG4gICAgICAgIGFwcGx5SGVhZGVyc011dChyZXFIZWFkZXJzLCBoZWFkZXJzKTtcbiAgICAgICAgLy8gbGV0IGJ1aWx0aW4gZmV0Y2ggc2V0IHRoZSBDb250ZW50LVR5cGUgZm9yIG11bHRpcGFydCBib2RpZXNcbiAgICAgICAgaWYgKGlzTXVsdGlwYXJ0Qm9keShvcHRpb25zLmJvZHkpICYmIHNoaW1zS2luZCAhPT0gJ25vZGUnKSB7XG4gICAgICAgICAgICBkZWxldGUgcmVxSGVhZGVyc1snY29udGVudC10eXBlJ107XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZXNlcyBoZWFkZXJzIGlmIHRoZXkgd2VyZSBhbHJlYWR5IHNldCBvciByZW1vdmVkIHRocm91Z2ggZGVmYXVsdCBoZWFkZXJzIG9yIGJ5IHRoZSBjYWxsZXIuXG4gICAgICAgIC8vIFdlIGNoZWNrIGBkZWZhdWx0SGVhZGVyc2AgYW5kIGBoZWFkZXJzYCwgd2hpY2ggY2FuIGNvbnRhaW4gbnVsbHMsIGluc3RlYWQgb2YgYHJlcUhlYWRlcnNgIHRvIGFjY291bnRcbiAgICAgICAgLy8gZm9yIHRoZSByZW1vdmFsIGNhc2UuXG4gICAgICAgIGlmIChnZXRIZWFkZXIoZGVmYXVsdEhlYWRlcnMsICd4LXN0YWlubGVzcy1yZXRyeS1jb3VudCcpID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGdldEhlYWRlcihoZWFkZXJzLCAneC1zdGFpbmxlc3MtcmV0cnktY291bnQnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXFIZWFkZXJzWyd4LXN0YWlubGVzcy1yZXRyeS1jb3VudCddID0gU3RyaW5nKHJldHJ5Q291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRIZWFkZXIoZGVmYXVsdEhlYWRlcnMsICd4LXN0YWlubGVzcy10aW1lb3V0JykgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZ2V0SGVhZGVyKGhlYWRlcnMsICd4LXN0YWlubGVzcy10aW1lb3V0JykgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICAgICAgICByZXFIZWFkZXJzWyd4LXN0YWlubGVzcy10aW1lb3V0J10gPSBTdHJpbmcob3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlSGVhZGVycyhyZXFIZWFkZXJzLCBoZWFkZXJzKTtcbiAgICAgICAgcmV0dXJuIHJlcUhlYWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzZWQgYXMgYSBjYWxsYmFjayBmb3IgbXV0YXRpbmcgdGhlIGdpdmVuIGBGaW5hbFJlcXVlc3RPcHRpb25zYCBvYmplY3QuXG4gICAgICovXG4gICAgYXN5bmMgcHJlcGFyZU9wdGlvbnMob3B0aW9ucykgeyB9XG4gICAgLyoqXG4gICAgICogVXNlZCBhcyBhIGNhbGxiYWNrIGZvciBtdXRhdGluZyB0aGUgZ2l2ZW4gYFJlcXVlc3RJbml0YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgeW91IHdhbnQgdG8gYWRkIGNlcnRhaW4gaGVhZGVycyBiYXNlZCBvZmYgb2ZcbiAgICAgKiB0aGUgcmVxdWVzdCBwcm9wZXJ0aWVzLCBlLmcuIGBtZXRob2RgIG9yIGB1cmxgLlxuICAgICAqL1xuICAgIGFzeW5jIHByZXBhcmVSZXF1ZXN0KHJlcXVlc3QsIHsgdXJsLCBvcHRpb25zIH0pIHsgfVxuICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiAoIWhlYWRlcnMgPyB7fVxuICAgICAgICAgICAgOiBTeW1ib2wuaXRlcmF0b3IgaW4gaGVhZGVycyA/XG4gICAgICAgICAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKEFycmF5LmZyb20oaGVhZGVycykubWFwKChoZWFkZXIpID0+IFsuLi5oZWFkZXJdKSlcbiAgICAgICAgICAgICAgICA6IHsgLi4uaGVhZGVycyB9KTtcbiAgICB9XG4gICAgbWFrZVN0YXR1c0Vycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIEFQSUVycm9yLmdlbmVyYXRlKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgIH1cbiAgICByZXF1ZXN0KG9wdGlvbnMsIHJlbWFpbmluZ1JldHJpZXMgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuZXcgQVBJUHJvbWlzZSh0aGlzLm1ha2VSZXF1ZXN0KG9wdGlvbnMsIHJlbWFpbmluZ1JldHJpZXMpKTtcbiAgICB9XG4gICAgYXN5bmMgbWFrZVJlcXVlc3Qob3B0aW9uc0lucHV0LCByZXRyaWVzUmVtYWluaW5nKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBvcHRpb25zSW5wdXQ7XG4gICAgICAgIGNvbnN0IG1heFJldHJpZXMgPSBvcHRpb25zLm1heFJldHJpZXMgPz8gdGhpcy5tYXhSZXRyaWVzO1xuICAgICAgICBpZiAocmV0cmllc1JlbWFpbmluZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXRyaWVzUmVtYWluaW5nID0gbWF4UmV0cmllcztcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IHJlcSwgdXJsLCB0aW1lb3V0IH0gPSB0aGlzLmJ1aWxkUmVxdWVzdChvcHRpb25zLCB7IHJldHJ5Q291bnQ6IG1heFJldHJpZXMgLSByZXRyaWVzUmVtYWluaW5nIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVSZXF1ZXN0KHJlcSwgeyB1cmwsIG9wdGlvbnMgfSk7XG4gICAgICAgIGRlYnVnKCdyZXF1ZXN0JywgdXJsLCBvcHRpb25zLCByZXEuaGVhZGVycyk7XG4gICAgICAgIGlmIChvcHRpb25zLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRpbWVvdXQodXJsLCByZXEsIHRpbWVvdXQsIGNvbnRyb2xsZXIpLmNhdGNoKGNhc3RUb0Vycm9yKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBUElVc2VyQWJvcnRFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldHJpZXNSZW1haW5pbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXRyeVJlcXVlc3Qob3B0aW9ucywgcmV0cmllc1JlbWFpbmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBBUElDb25uZWN0aW9uRXJyb3IoeyBjYXVzZTogcmVzcG9uc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gY3JlYXRlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBpZiAocmV0cmllc1JlbWFpbmluZyAmJiB0aGlzLnNob3VsZFJldHJ5KHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5TWVzc2FnZSA9IGByZXRyeWluZywgJHtyZXRyaWVzUmVtYWluaW5nfSBhdHRlbXB0cyByZW1haW5pbmdgO1xuICAgICAgICAgICAgICAgIGRlYnVnKGByZXNwb25zZSAoZXJyb3I7ICR7cmV0cnlNZXNzYWdlfSlgLCByZXNwb25zZS5zdGF0dXMsIHVybCwgcmVzcG9uc2VIZWFkZXJzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXRyeVJlcXVlc3Qob3B0aW9ucywgcmV0cmllc1JlbWFpbmluZywgcmVzcG9uc2VIZWFkZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVyclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKGUpID0+IGNhc3RUb0Vycm9yKGUpLm1lc3NhZ2UpO1xuICAgICAgICAgICAgY29uc3QgZXJySlNPTiA9IHNhZmVKU09OKGVyclRleHQpO1xuICAgICAgICAgICAgY29uc3QgZXJyTWVzc2FnZSA9IGVyckpTT04gPyB1bmRlZmluZWQgOiBlcnJUZXh0O1xuICAgICAgICAgICAgY29uc3QgcmV0cnlNZXNzYWdlID0gcmV0cmllc1JlbWFpbmluZyA/IGAoZXJyb3I7IG5vIG1vcmUgcmV0cmllcyBsZWZ0KWAgOiBgKGVycm9yOyBub3QgcmV0cnlhYmxlKWA7XG4gICAgICAgICAgICBkZWJ1ZyhgcmVzcG9uc2UgKGVycm9yOyAke3JldHJ5TWVzc2FnZX0pYCwgcmVzcG9uc2Uuc3RhdHVzLCB1cmwsIHJlc3BvbnNlSGVhZGVycywgZXJyTWVzc2FnZSk7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSB0aGlzLm1ha2VTdGF0dXNFcnJvcihyZXNwb25zZS5zdGF0dXMsIGVyckpTT04sIGVyck1lc3NhZ2UsIHJlc3BvbnNlSGVhZGVycyk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2UsIG9wdGlvbnMsIGNvbnRyb2xsZXIgfTtcbiAgICB9XG4gICAgcmVxdWVzdEFQSUxpc3QoUGFnZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5tYWtlUmVxdWVzdChvcHRpb25zLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlUHJvbWlzZSh0aGlzLCByZXF1ZXN0LCBQYWdlKTtcbiAgICB9XG4gICAgYnVpbGRVUkwocGF0aCwgcXVlcnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gaXNBYnNvbHV0ZVVSTChwYXRoKSA/XG4gICAgICAgICAgICBuZXcgVVJMKHBhdGgpXG4gICAgICAgICAgICA6IG5ldyBVUkwodGhpcy5iYXNlVVJMICsgKHRoaXMuYmFzZVVSTC5lbmRzV2l0aCgnLycpICYmIHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aC5zbGljZSgxKSA6IHBhdGgpKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFF1ZXJ5ID0gdGhpcy5kZWZhdWx0UXVlcnkoKTtcbiAgICAgICAgaWYgKCFpc0VtcHR5T2JqKGRlZmF1bHRRdWVyeSkpIHtcbiAgICAgICAgICAgIHF1ZXJ5ID0geyAuLi5kZWZhdWx0UXVlcnksIC4uLnF1ZXJ5IH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgcXVlcnkgJiYgIUFycmF5LmlzQXJyYXkocXVlcnkpKSB7XG4gICAgICAgICAgICB1cmwuc2VhcmNoID0gdGhpcy5zdHJpbmdpZnlRdWVyeShxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICAgIH1cbiAgICBzdHJpbmdpZnlRdWVyeShxdWVyeSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgICAgICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcihgQ2Fubm90IHN0cmluZ2lmeSB0eXBlICR7dHlwZW9mIHZhbHVlfTsgRXhwZWN0ZWQgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG51bGwuIElmIHlvdSBuZWVkIHRvIHBhc3MgbmVzdGVkIHF1ZXJ5IHBhcmFtZXRlcnMsIHlvdSBjYW4gbWFudWFsbHkgZW5jb2RlIHRoZW0sIGUuZy4geyBxdWVyeTogeyAnZm9vW2tleTFdJzogdmFsdWUxLCAnZm9vW2tleTJdJzogdmFsdWUyIH0gfSwgYW5kIHBsZWFzZSBvcGVuIGEgR2l0SHViIGlzc3VlIHJlcXVlc3RpbmcgYmV0dGVyIHN1cHBvcnQgZm9yIHlvdXIgdXNlIGNhc2UuYCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJicpO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaFdpdGhUaW1lb3V0KHVybCwgaW5pdCwgbXMsIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyBzaWduYWwsIC4uLm9wdGlvbnMgfSA9IGluaXQgfHwge307XG4gICAgICAgIGlmIChzaWduYWwpXG4gICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBjb250cm9sbGVyLmFib3J0KCkpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIG1zKTtcbiAgICAgICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge1xuICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChmZXRjaE9wdGlvbnMubWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBDdXN0b20gbWV0aG9kcyBsaWtlICdwYXRjaCcgbmVlZCB0byBiZSB1cHBlcmNhc2VkXG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIyOTRcbiAgICAgICAgICAgIGZldGNoT3B0aW9ucy5tZXRob2QgPSBmZXRjaE9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gdXNlIHVuZGVmaW5lZCB0aGlzIGJpbmRpbmc7IGZldGNoIGVycm9ycyBpZiBib3VuZCB0byBzb21ldGhpbmcgZWxzZSBpbiBicm93c2VyL2Nsb3VkZmxhcmVcbiAgICAgICAgdGhpcy5mZXRjaC5jYWxsKHVuZGVmaW5lZCwgdXJsLCBmZXRjaE9wdGlvbnMpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHNob3VsZFJldHJ5KHJlc3BvbnNlKSB7XG4gICAgICAgIC8vIE5vdGUgdGhpcyBpcyBub3QgYSBzdGFuZGFyZCBoZWFkZXIuXG4gICAgICAgIGNvbnN0IHNob3VsZFJldHJ5SGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtc2hvdWxkLXJldHJ5Jyk7XG4gICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgZXhwbGljaXRseSBzYXlzIHdoZXRoZXIgb3Igbm90IHRvIHJldHJ5LCBvYmV5LlxuICAgICAgICBpZiAoc2hvdWxkUmV0cnlIZWFkZXIgPT09ICd0cnVlJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoc2hvdWxkUmV0cnlIZWFkZXIgPT09ICdmYWxzZScpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFJldHJ5IG9uIHJlcXVlc3QgdGltZW91dHMuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwOClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBSZXRyeSBvbiBsb2NrIHRpbWVvdXRzLlxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gUmV0cnkgb24gcmF0ZSBsaW1pdHMuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBSZXRyeSBpbnRlcm5hbCBlcnJvcnMuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYXN5bmMgcmV0cnlSZXF1ZXN0KG9wdGlvbnMsIHJldHJpZXNSZW1haW5pbmcsIHJlc3BvbnNlSGVhZGVycykge1xuICAgICAgICBsZXQgdGltZW91dE1pbGxpcztcbiAgICAgICAgLy8gTm90ZSB0aGUgYHJldHJ5LWFmdGVyLW1zYCBoZWFkZXIgbWF5IG5vdCBiZSBzdGFuZGFyZCwgYnV0IGlzIGEgZ29vZCBpZGVhIGFuZCB3ZSdkIGxpa2UgcHJvYWN0aXZlIHN1cHBvcnQgZm9yIGl0LlxuICAgICAgICBjb25zdCByZXRyeUFmdGVyTWlsbGlzSGVhZGVyID0gcmVzcG9uc2VIZWFkZXJzPy5bJ3JldHJ5LWFmdGVyLW1zJ107XG4gICAgICAgIGlmIChyZXRyeUFmdGVyTWlsbGlzSGVhZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0TXMgPSBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJNaWxsaXNIZWFkZXIpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGltZW91dE1zKSkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXMgPSB0aW1lb3V0TXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWJvdXQgdGhlIFJldHJ5LUFmdGVyIGhlYWRlcjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JldHJ5LUFmdGVyXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZUhlYWRlcnM/LlsncmV0cnktYWZ0ZXInXTtcbiAgICAgICAgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIgJiYgIXRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gcGFyc2VGbG9hdChyZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHRpbWVvdXRTZWNvbmRzKSkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXMgPSB0aW1lb3V0U2Vjb25kcyAqIDEwMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzID0gRGF0ZS5wYXJzZShyZXRyeUFmdGVySGVhZGVyKSAtIERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIEFQSSBhc2tzIHVzIHRvIHdhaXQgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lIChhbmQgaXQncyBhIHJlYXNvbmFibGUgYW1vdW50KSxcbiAgICAgICAgLy8ganVzdCBkbyB3aGF0IGl0IHNheXMsIGJ1dCBvdGhlcndpc2UgY2FsY3VsYXRlIGEgZGVmYXVsdFxuICAgICAgICBpZiAoISh0aW1lb3V0TWlsbGlzICYmIDAgPD0gdGltZW91dE1pbGxpcyAmJiB0aW1lb3V0TWlsbGlzIDwgNjAgKiAxMDAwKSkge1xuICAgICAgICAgICAgY29uc3QgbWF4UmV0cmllcyA9IG9wdGlvbnMubWF4UmV0cmllcyA/PyB0aGlzLm1heFJldHJpZXM7XG4gICAgICAgICAgICB0aW1lb3V0TWlsbGlzID0gdGhpcy5jYWxjdWxhdGVEZWZhdWx0UmV0cnlUaW1lb3V0TWlsbGlzKHJldHJpZXNSZW1haW5pbmcsIG1heFJldHJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRNaWxsaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChvcHRpb25zLCByZXRyaWVzUmVtYWluaW5nIC0gMSk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZURlZmF1bHRSZXRyeVRpbWVvdXRNaWxsaXMocmV0cmllc1JlbWFpbmluZywgbWF4UmV0cmllcykge1xuICAgICAgICBjb25zdCBpbml0aWFsUmV0cnlEZWxheSA9IDAuNTtcbiAgICAgICAgY29uc3QgbWF4UmV0cnlEZWxheSA9IDguMDtcbiAgICAgICAgY29uc3QgbnVtUmV0cmllcyA9IG1heFJldHJpZXMgLSByZXRyaWVzUmVtYWluaW5nO1xuICAgICAgICAvLyBBcHBseSBleHBvbmVudGlhbCBiYWNrb2ZmLCBidXQgbm90IG1vcmUgdGhhbiB0aGUgbWF4LlxuICAgICAgICBjb25zdCBzbGVlcFNlY29uZHMgPSBNYXRoLm1pbihpbml0aWFsUmV0cnlEZWxheSAqIE1hdGgucG93KDIsIG51bVJldHJpZXMpLCBtYXhSZXRyeURlbGF5KTtcbiAgICAgICAgLy8gQXBwbHkgc29tZSBqaXR0ZXIsIHRha2UgdXAgdG8gYXQgbW9zdCAyNSBwZXJjZW50IG9mIHRoZSByZXRyeSB0aW1lLlxuICAgICAgICBjb25zdCBqaXR0ZXIgPSAxIC0gTWF0aC5yYW5kb20oKSAqIDAuMjU7XG4gICAgICAgIHJldHVybiBzbGVlcFNlY29uZHMgKiBqaXR0ZXIgKiAxMDAwO1xuICAgIH1cbiAgICBnZXRVc2VyQWdlbnQoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9L0pTICR7VkVSU0lPTn1gO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCwgcmVzcG9uc2UsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgX0Fic3RyYWN0UGFnZV9jbGllbnQuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Fic3RyYWN0UGFnZV9jbGllbnQsIGNsaWVudCwgXCJmXCIpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgfVxuICAgIGhhc05leHRQYWdlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0UGFnaW5hdGVkSXRlbXMoKTtcbiAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRQYWdlSW5mbygpICE9IG51bGw7XG4gICAgfVxuICAgIGFzeW5jIGdldE5leHRQYWdlKCkge1xuICAgICAgICBjb25zdCBuZXh0SW5mbyA9IHRoaXMubmV4dFBhZ2VJbmZvKCk7XG4gICAgICAgIGlmICghbmV4dEluZm8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcignTm8gbmV4dCBwYWdlIGV4cGVjdGVkOyBwbGVhc2UgY2hlY2sgYC5oYXNOZXh0UGFnZSgpYCBiZWZvcmUgY2FsbGluZyBgLmdldE5leHRQYWdlKClgLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRPcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMgfTtcbiAgICAgICAgaWYgKCdwYXJhbXMnIGluIG5leHRJbmZvICYmIHR5cGVvZiBuZXh0T3B0aW9ucy5xdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG5leHRPcHRpb25zLnF1ZXJ5ID0geyAuLi5uZXh0T3B0aW9ucy5xdWVyeSwgLi4ubmV4dEluZm8ucGFyYW1zIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoJ3VybCcgaW4gbmV4dEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFsuLi5PYmplY3QuZW50cmllcyhuZXh0T3B0aW9ucy5xdWVyeSB8fCB7fSksIC4uLm5leHRJbmZvLnVybC5zZWFyY2hQYXJhbXMuZW50cmllcygpXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhcmFtcykge1xuICAgICAgICAgICAgICAgIG5leHRJbmZvLnVybC5zZWFyY2hQYXJhbXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE9wdGlvbnMucXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBuZXh0T3B0aW9ucy5wYXRoID0gbmV4dEluZm8udXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Fic3RyYWN0UGFnZV9jbGllbnQsIFwiZlwiKS5yZXF1ZXN0QVBJTGlzdCh0aGlzLmNvbnN0cnVjdG9yLCBuZXh0T3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jICppdGVyUGFnZXMoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBsZXQgcGFnZSA9IHRoaXM7XG4gICAgICAgIHlpZWxkIHBhZ2U7XG4gICAgICAgIHdoaWxlIChwYWdlLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgIHBhZ2UgPSBhd2FpdCBwYWdlLmdldE5leHRQYWdlKCk7XG4gICAgICAgICAgICB5aWVsZCBwYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jICpbKF9BYnN0cmFjdFBhZ2VfY2xpZW50ID0gbmV3IFdlYWtNYXAoKSwgU3ltYm9sLmFzeW5jSXRlcmF0b3IpXSgpIHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHRoaXMuaXRlclBhZ2VzKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYWdlLmdldFBhZ2luYXRlZEl0ZW1zKCkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBUaGlzIHN1YmNsYXNzIG9mIFByb21pc2Ugd2lsbCByZXNvbHZlIHRvIGFuIGluc3RhbnRpYXRlZCBQYWdlIG9uY2UgdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICpcbiAqIEl0IGFsc28gaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlIHRvIGFsbG93IGF1dG8tcGFnaW5hdGluZyBpdGVyYXRpb24gb24gYW4gdW5hd2FpdGVkIGxpc3QgY2FsbCwgZWc6XG4gKlxuICogICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGNsaWVudC5pdGVtcy5saXN0KCkpIHtcbiAqICAgICAgY29uc29sZS5sb2coaXRlbSlcbiAqICAgIH1cbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VQcm9taXNlIGV4dGVuZHMgQVBJUHJvbWlzZSB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50LCByZXF1ZXN0LCBQYWdlKSB7XG4gICAgICAgIHN1cGVyKHJlcXVlc3QsIGFzeW5jIChwcm9wcykgPT4gbmV3IFBhZ2UoY2xpZW50LCBwcm9wcy5yZXNwb25zZSwgYXdhaXQgZGVmYXVsdFBhcnNlUmVzcG9uc2UocHJvcHMpLCBwcm9wcy5vcHRpb25zKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGF1dG8tcGFnaW5hdGluZyBpdGVyYXRpb24gb24gYW4gdW5hd2FpdGVkIGxpc3QgY2FsbCwgZWc6XG4gICAgICpcbiAgICAgKiAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgY2xpZW50Lml0ZW1zLmxpc3QoKSkge1xuICAgICAqICAgICAgY29uc29sZS5sb2coaXRlbSlcbiAgICAgKiAgICB9XG4gICAgICovXG4gICAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgcGFnZSkge1xuICAgICAgICAgICAgeWllbGQgaXRlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBjcmVhdGVSZXNwb25zZUhlYWRlcnMgPSAoaGVhZGVycykgPT4ge1xuICAgIHJldHVybiBuZXcgUHJveHkoT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBoZWFkZXJzLmVudHJpZXMoKSksIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgbmFtZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmFtZS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXkudG9Mb3dlckNhc2UoKV0gfHwgdGFyZ2V0W2tleV07XG4gICAgICAgIH0sXG4gICAgfSk7XG59O1xuLy8gVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgaWYgYSBnaXZlbiBvYmplY3QgbWF0Y2hlcyB0aGUgUmVxdWVzdE9wdGlvbnNcbi8vIHR5cGUgYXQgcnVudGltZS4gV2hpbGUgdGhpcyByZXF1aXJlcyBkdXBsaWNhdGlvbiwgaXQgaXMgZW5mb3JjZWQgYnkgdGhlIFR5cGVTY3JpcHRcbi8vIGNvbXBpbGVyIHN1Y2ggdGhhdCBhbnkgbWlzc2luZyAvIGV4dHJhbmVvdXMga2V5cyB3aWxsIGNhdXNlIGFuIGVycm9yLlxuY29uc3QgcmVxdWVzdE9wdGlvbnNLZXlzID0ge1xuICAgIG1ldGhvZDogdHJ1ZSxcbiAgICBwYXRoOiB0cnVlLFxuICAgIHF1ZXJ5OiB0cnVlLFxuICAgIGJvZHk6IHRydWUsXG4gICAgaGVhZGVyczogdHJ1ZSxcbiAgICBtYXhSZXRyaWVzOiB0cnVlLFxuICAgIHN0cmVhbTogdHJ1ZSxcbiAgICB0aW1lb3V0OiB0cnVlLFxuICAgIGh0dHBBZ2VudDogdHJ1ZSxcbiAgICBzaWduYWw6IHRydWUsXG4gICAgaWRlbXBvdGVuY3lLZXk6IHRydWUsXG4gICAgX19iaW5hcnlSZXF1ZXN0OiB0cnVlLFxuICAgIF9fYmluYXJ5UmVzcG9uc2U6IHRydWUsXG4gICAgX19zdHJlYW1DbGFzczogdHJ1ZSxcbn07XG5leHBvcnQgY29uc3QgaXNSZXF1ZXN0T3B0aW9ucyA9IChvYmopID0+IHtcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgICAgIG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICAhaXNFbXB0eU9iaihvYmopICYmXG4gICAgICAgIE9iamVjdC5rZXlzKG9iaikuZXZlcnkoKGspID0+IGhhc093bihyZXF1ZXN0T3B0aW9uc0tleXMsIGspKSk7XG59O1xuY29uc3QgZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcgJiYgRGVuby5idWlsZCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtTGFuZyc6ICdqcycsXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtUGFja2FnZS1WZXJzaW9uJzogVkVSU0lPTixcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1PUyc6IG5vcm1hbGl6ZVBsYXRmb3JtKERlbm8uYnVpbGQub3MpLFxuICAgICAgICAgICAgJ1gtU3RhaW5sZXNzLUFyY2gnOiBub3JtYWxpemVBcmNoKERlbm8uYnVpbGQuYXJjaCksXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtUnVudGltZSc6ICdkZW5vJyxcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lLVZlcnNpb24nOiB0eXBlb2YgRGVuby52ZXJzaW9uID09PSAnc3RyaW5nJyA/IERlbm8udmVyc2lvbiA6IERlbm8udmVyc2lvbj8uZGVubyA/PyAndW5rbm93bicsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgRWRnZVJ1bnRpbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtTGFuZyc6ICdqcycsXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtUGFja2FnZS1WZXJzaW9uJzogVkVSU0lPTixcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1PUyc6ICdVbmtub3duJyxcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1BcmNoJzogYG90aGVyOiR7RWRnZVJ1bnRpbWV9YCxcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lJzogJ2VkZ2UnLFxuICAgICAgICAgICAgJ1gtU3RhaW5sZXNzLVJ1bnRpbWUtVmVyc2lvbic6IHByb2Nlc3MudmVyc2lvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgTm9kZS5qc1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnID8gcHJvY2VzcyA6IDApID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1MYW5nJzogJ2pzJyxcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1QYWNrYWdlLVZlcnNpb24nOiBWRVJTSU9OLFxuICAgICAgICAgICAgJ1gtU3RhaW5sZXNzLU9TJzogbm9ybWFsaXplUGxhdGZvcm0ocHJvY2Vzcy5wbGF0Zm9ybSksXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtQXJjaCc6IG5vcm1hbGl6ZUFyY2gocHJvY2Vzcy5hcmNoKSxcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lJzogJ25vZGUnLFxuICAgICAgICAgICAgJ1gtU3RhaW5sZXNzLVJ1bnRpbWUtVmVyc2lvbic6IHByb2Nlc3MudmVyc2lvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYnJvd3NlckluZm8gPSBnZXRCcm93c2VySW5mbygpO1xuICAgIGlmIChicm93c2VySW5mbykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ1gtU3RhaW5sZXNzLUxhbmcnOiAnanMnLFxuICAgICAgICAgICAgJ1gtU3RhaW5sZXNzLVBhY2thZ2UtVmVyc2lvbic6IFZFUlNJT04sXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtT1MnOiAnVW5rbm93bicsXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtQXJjaCc6ICd1bmtub3duJyxcbiAgICAgICAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lJzogYGJyb3dzZXI6JHticm93c2VySW5mby5icm93c2VyfWAsXG4gICAgICAgICAgICAnWC1TdGFpbmxlc3MtUnVudGltZS1WZXJzaW9uJzogYnJvd3NlckluZm8udmVyc2lvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gVE9ETyBhZGQgc3VwcG9ydCBmb3IgQ2xvdWRmbGFyZSB3b3JrZXJzLCBldGMuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ1gtU3RhaW5sZXNzLUxhbmcnOiAnanMnLFxuICAgICAgICAnWC1TdGFpbmxlc3MtUGFja2FnZS1WZXJzaW9uJzogVkVSU0lPTixcbiAgICAgICAgJ1gtU3RhaW5sZXNzLU9TJzogJ1Vua25vd24nLFxuICAgICAgICAnWC1TdGFpbmxlc3MtQXJjaCc6ICd1bmtub3duJyxcbiAgICAgICAgJ1gtU3RhaW5sZXNzLVJ1bnRpbWUnOiAndW5rbm93bicsXG4gICAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lLVZlcnNpb24nOiAndW5rbm93bicsXG4gICAgfTtcbn07XG4vLyBOb3RlOiBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9KUy1EZXZUb29scy9ob3N0LWVudmlyb25tZW50L2Jsb2IvYjFhYjc5ZWNkZTM3ZGI1ZDZlMTYzYzA1MGU1NGZlN2QyODdkN2M5Mi9zcmMvaXNvbW9ycGhpYy5icm93c2VyLnRzXG5mdW5jdGlvbiBnZXRCcm93c2VySW5mbygpIHtcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5hdmlnYXRvcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gTk9URTogVGhlIG9yZGVyIG1hdHRlcnMgaGVyZSFcbiAgICBjb25zdCBicm93c2VyUGF0dGVybnMgPSBbXG4gICAgICAgIHsga2V5OiAnZWRnZScsIHBhdHRlcm46IC9FZGdlKD86XFxXKyhcXGQrKVxcLihcXGQrKSg/OlxcLihcXGQrKSk/KT8vIH0sXG4gICAgICAgIHsga2V5OiAnaWUnLCBwYXR0ZXJuOiAvTVNJRSg/OlxcVysoXFxkKylcXC4oXFxkKykoPzpcXC4oXFxkKykpPyk/LyB9LFxuICAgICAgICB7IGtleTogJ2llJywgcGF0dGVybjogL1RyaWRlbnQoPzouKnJ2XFw6KFxcZCspXFwuKFxcZCspKD86XFwuKFxcZCspKT8pPy8gfSxcbiAgICAgICAgeyBrZXk6ICdjaHJvbWUnLCBwYXR0ZXJuOiAvQ2hyb21lKD86XFxXKyhcXGQrKVxcLihcXGQrKSg/OlxcLihcXGQrKSk/KT8vIH0sXG4gICAgICAgIHsga2V5OiAnZmlyZWZveCcsIHBhdHRlcm46IC9GaXJlZm94KD86XFxXKyhcXGQrKVxcLihcXGQrKSg/OlxcLihcXGQrKSk/KT8vIH0sXG4gICAgICAgIHsga2V5OiAnc2FmYXJpJywgcGF0dGVybjogLyg/OlZlcnNpb25cXFcrKFxcZCspXFwuKFxcZCspKD86XFwuKFxcZCspKT8pPyg/OlxcVytNb2JpbGVcXFMqKT9cXFcrU2FmYXJpLyB9LFxuICAgIF07XG4gICAgLy8gRmluZCB0aGUgRklSU1QgbWF0Y2hpbmcgYnJvd3NlclxuICAgIGZvciAoY29uc3QgeyBrZXksIHBhdHRlcm4gfSBvZiBicm93c2VyUGF0dGVybnMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgbWFqb3IgPSBtYXRjaFsxXSB8fCAwO1xuICAgICAgICAgICAgY29uc3QgbWlub3IgPSBtYXRjaFsyXSB8fCAwO1xuICAgICAgICAgICAgY29uc3QgcGF0Y2ggPSBtYXRjaFszXSB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgYnJvd3Nlcjoga2V5LCB2ZXJzaW9uOiBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH1gIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5jb25zdCBub3JtYWxpemVBcmNoID0gKGFyY2gpID0+IHtcbiAgICAvLyBOb2RlIGRvY3M6XG4gICAgLy8gLSBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzYXJjaFxuICAgIC8vIERlbm8gZG9jczpcbiAgICAvLyAtIGh0dHBzOi8vZG9jLmRlbm8ubGFuZC9kZW5vL3N0YWJsZS9+L0Rlbm8uYnVpbGRcbiAgICBpZiAoYXJjaCA9PT0gJ3gzMicpXG4gICAgICAgIHJldHVybiAneDMyJztcbiAgICBpZiAoYXJjaCA9PT0gJ3g4Nl82NCcgfHwgYXJjaCA9PT0gJ3g2NCcpXG4gICAgICAgIHJldHVybiAneDY0JztcbiAgICBpZiAoYXJjaCA9PT0gJ2FybScpXG4gICAgICAgIHJldHVybiAnYXJtJztcbiAgICBpZiAoYXJjaCA9PT0gJ2FhcmNoNjQnIHx8IGFyY2ggPT09ICdhcm02NCcpXG4gICAgICAgIHJldHVybiAnYXJtNjQnO1xuICAgIGlmIChhcmNoKVxuICAgICAgICByZXR1cm4gYG90aGVyOiR7YXJjaH1gO1xuICAgIHJldHVybiAndW5rbm93bic7XG59O1xuY29uc3Qgbm9ybWFsaXplUGxhdGZvcm0gPSAocGxhdGZvcm0pID0+IHtcbiAgICAvLyBOb2RlIHBsYXRmb3JtczpcbiAgICAvLyAtIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NwbGF0Zm9ybVxuICAgIC8vIERlbm8gcGxhdGZvcm1zOlxuICAgIC8vIC0gaHR0cHM6Ly9kb2MuZGVuby5sYW5kL2Rlbm8vc3RhYmxlL34vRGVuby5idWlsZFxuICAgIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm8vaXNzdWVzLzE0Nzk5XG4gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIE5PVEU6IHRoaXMgaU9TIGNoZWNrIGlzIHVudGVzdGVkIGFuZCBtYXkgbm90IHdvcmtcbiAgICAvLyBOb2RlIGRvZXMgbm90IHdvcmsgbmF0aXZlbHkgb24gSU9TLCB0aGVyZSBpcyBhIGZvcmsgYXRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzLW1vYmlsZS9ub2RlanMtbW9iaWxlXG4gICAgLy8gaG93ZXZlciBpdCBpcyB1bmtub3duIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgaG93IHRvIGRldGVjdCBpZiBpdCBpcyBydW5uaW5nXG4gICAgaWYgKHBsYXRmb3JtLmluY2x1ZGVzKCdpb3MnKSlcbiAgICAgICAgcmV0dXJuICdpT1MnO1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKVxuICAgICAgICByZXR1cm4gJ0FuZHJvaWQnO1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpXG4gICAgICAgIHJldHVybiAnTWFjT1MnO1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJylcbiAgICAgICAgcmV0dXJuICdXaW5kb3dzJztcbiAgICBpZiAocGxhdGZvcm0gPT09ICdmcmVlYnNkJylcbiAgICAgICAgcmV0dXJuICdGcmVlQlNEJztcbiAgICBpZiAocGxhdGZvcm0gPT09ICdvcGVuYnNkJylcbiAgICAgICAgcmV0dXJuICdPcGVuQlNEJztcbiAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpXG4gICAgICAgIHJldHVybiAnTGludXgnO1xuICAgIGlmIChwbGF0Zm9ybSlcbiAgICAgICAgcmV0dXJuIGBPdGhlcjoke3BsYXRmb3JtfWA7XG4gICAgcmV0dXJuICdVbmtub3duJztcbn07XG5sZXQgX3BsYXRmb3JtSGVhZGVycztcbmNvbnN0IGdldFBsYXRmb3JtSGVhZGVycyA9ICgpID0+IHtcbiAgICByZXR1cm4gKF9wbGF0Zm9ybUhlYWRlcnMgPz8gKF9wbGF0Zm9ybUhlYWRlcnMgPSBnZXRQbGF0Zm9ybVByb3BlcnRpZXMoKSkpO1xufTtcbmV4cG9ydCBjb25zdCBzYWZlSlNPTiA9ICh0ZXh0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtc2NoZW1lLXN0cmluZ1xuY29uc3Qgc3RhcnRzV2l0aFNjaGVtZVJlZ2V4cCA9IC9eW2Etel1bYS16MC05Ky4tXSo6L2k7XG5jb25zdCBpc0Fic29sdXRlVVJMID0gKHVybCkgPT4ge1xuICAgIHJldHVybiBzdGFydHNXaXRoU2NoZW1lUmVnZXhwLnRlc3QodXJsKTtcbn07XG5leHBvcnQgY29uc3Qgc2xlZXAgPSAobXMpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG5jb25zdCB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlciA9IChuYW1lLCBuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkge1xuICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhbiBpbnRlZ2VyYCk7XG4gICAgfVxuICAgIGlmIChuIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG59O1xuZXhwb3J0IGNvbnN0IGNhc3RUb0Vycm9yID0gKGVycikgPT4ge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcilcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiYgZXJyICE9PSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KGVycikpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHsgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKFN0cmluZyhlcnIpKTtcbn07XG5leHBvcnQgY29uc3QgZW5zdXJlUHJlc2VudCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYEV4cGVjdGVkIGEgdmFsdWUgdG8gYmUgZ2l2ZW4gYnV0IHJlY2VpdmVkICR7dmFsdWV9IGluc3RlYWQuYCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcbi8qKlxuICogUmVhZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBUcmltcyBiZWdpbm5pbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuXG4gKlxuICogV2lsbCByZXR1cm4gdW5kZWZpbmVkIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBkb2Vzbid0IGV4aXN0IG9yIGNhbm5vdCBiZSBhY2Nlc3NlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlYWRFbnYgPSAoZW52KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnY/LltlbnZdPy50cmltKCkgPz8gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIERlbm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBEZW5vLmVudj8uZ2V0Py4oZW52KT8udHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBjb25zdCBjb2VyY2VJbnRlZ2VyID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBDb3VsZCBub3QgY29lcmNlICR7dmFsdWV9ICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pIGludG8gYSBudW1iZXJgKTtcbn07XG5leHBvcnQgY29uc3QgY29lcmNlRmxvYXQgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBDb3VsZCBub3QgY29lcmNlICR7dmFsdWV9ICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pIGludG8gYSBudW1iZXJgKTtcbn07XG5leHBvcnQgY29uc3QgY29lcmNlQm9vbGVhbiA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJylcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJztcbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IGNvbnN0IG1heWJlQ29lcmNlSW50ZWdlciA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBjb2VyY2VJbnRlZ2VyKHZhbHVlKTtcbn07XG5leHBvcnQgY29uc3QgbWF5YmVDb2VyY2VGbG9hdCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBjb2VyY2VGbG9hdCh2YWx1ZSk7XG59O1xuZXhwb3J0IGNvbnN0IG1heWJlQ29lcmNlQm9vbGVhbiA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBjb2VyY2VCb29sZWFuKHZhbHVlKTtcbn07XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODdcbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5T2JqKG9iaikge1xuICAgIGlmICghb2JqKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IF9rIGluIG9iailcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuLy8gaHR0cHM6Ly9lc2xpbnQub3JnL2RvY3MvbGF0ZXN0L3J1bGVzL25vLXByb3RvdHlwZS1idWlsdGluc1xuZXhwb3J0IGZ1bmN0aW9uIGhhc093bihvYmosIGtleSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuLyoqXG4gKiBDb3BpZXMgaGVhZGVycyBmcm9tIFwibmV3SGVhZGVyc1wiIG9udG8gXCJ0YXJnZXRIZWFkZXJzXCIsXG4gKiB1c2luZyBsb3dlci1jYXNlIGZvciBhbGwgcHJvcGVydGllcyxcbiAqIGlnbm9yaW5nIGFueSBrZXlzIHdpdGggdW5kZWZpbmVkIHZhbHVlcyxcbiAqIGFuZCBkZWxldGluZyBhbnkga2V5cyB3aXRoIG51bGwgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBhcHBseUhlYWRlcnNNdXQodGFyZ2V0SGVhZGVycywgbmV3SGVhZGVycykge1xuICAgIGZvciAoY29uc3QgayBpbiBuZXdIZWFkZXJzKSB7XG4gICAgICAgIGlmICghaGFzT3duKG5ld0hlYWRlcnMsIGspKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGxvd2VyS2V5ID0gay50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIWxvd2VyS2V5KVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHZhbCA9IG5ld0hlYWRlcnNba107XG4gICAgICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRIZWFkZXJzW2xvd2VyS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0SGVhZGVyc1tsb3dlcktleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZGVidWcoYWN0aW9uLCAuLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzPy5lbnY/LlsnREVCVUcnXSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBbnRocm9waWM6REVCVUc6JHthY3Rpb259YCwgLi4uYXJncyk7XG4gICAgfVxufVxuLyoqXG4gKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjExNzUyM1xuICovXG5jb25zdCB1dWlkNCA9ICgpID0+IHtcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCAoYykgPT4ge1xuICAgICAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwO1xuICAgICAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbkJyb3dzZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKTtcbn07XG5leHBvcnQgY29uc3QgaXNIZWFkZXJzUHJvdG9jb2wgPSAoaGVhZGVycykgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgaGVhZGVycz8uZ2V0ID09PSAnZnVuY3Rpb24nO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEhlYWRlciA9IChoZWFkZXJzLCBoZWFkZXIpID0+IHtcbiAgICBjb25zdCBmb3VuZEhlYWRlciA9IGdldEhlYWRlcihoZWFkZXJzLCBoZWFkZXIpO1xuICAgIGlmIChmb3VuZEhlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgJHtoZWFkZXJ9IGhlYWRlcmApO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmRIZWFkZXI7XG59O1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlciA9IChoZWFkZXJzLCBoZWFkZXIpID0+IHtcbiAgICBjb25zdCBsb3dlckNhc2VkSGVhZGVyID0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGlzSGVhZGVyc1Byb3RvY29sKGhlYWRlcnMpKSB7XG4gICAgICAgIC8vIHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgaGVhZGVyIGxvb2tzIGxpa2UgU3RhaW5sZXNzLUV2ZW50LUlkXG4gICAgICAgIGNvbnN0IGludGVyY2Fwc0hlYWRlciA9IGhlYWRlclswXT8udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICBoZWFkZXIuc3Vic3RyaW5nKDEpLnJlcGxhY2UoLyhbXlxcd10pKFxcdykvZywgKF9tLCBnMSwgZzIpID0+IGcxICsgZzIudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIFtoZWFkZXIsIGxvd2VyQ2FzZWRIZWFkZXIsIGhlYWRlci50b1VwcGVyQ2FzZSgpLCBpbnRlcmNhcHNIZWFkZXJdKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBsb3dlckNhc2VkSGVhZGVyKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDw9IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFJlY2VpdmVkICR7dmFsdWUubGVuZ3RofSBlbnRyaWVzIGZvciB0aGUgJHtoZWFkZXJ9IGhlYWRlciwgdXNpbmcgdGhlIGZpcnN0IGVudHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbi8qKlxuICogRW5jb2RlcyBhIHN0cmluZyB0byBCYXNlNjQgZm9ybWF0LlxuICovXG5leHBvcnQgY29uc3QgdG9CYXNlNjQgPSAoc3RyKSA9PiB7XG4gICAgaWYgKCFzdHIpXG4gICAgICAgIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0cikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBidG9hKHN0cik7XG4gICAgfVxuICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcignQ2Fubm90IGdlbmVyYXRlIGI2NCBzdHJpbmc7IEV4cGVjdGVkIGBCdWZmZXJgIG9yIGBidG9hYCB0byBiZSBkZWZpbmVkJyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqKG9iaikge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShvYmopO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5tanMubWFwIiwKICAgICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuaW1wb3J0IHsgQWJzdHJhY3RQYWdlIH0gZnJvbSBcIi4vY29yZS5tanNcIjtcbmV4cG9ydCBjbGFzcyBQYWdlIGV4dGVuZHMgQWJzdHJhY3RQYWdlIHtcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIHJlc3BvbnNlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudCwgcmVzcG9uc2UsIGJvZHksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmRhdGEgPSBib2R5LmRhdGEgfHwgW107XG4gICAgICAgIHRoaXMuaGFzX21vcmUgPSBib2R5Lmhhc19tb3JlIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcnN0X2lkID0gYm9keS5maXJzdF9pZCB8fCBudWxsO1xuICAgICAgICB0aGlzLmxhc3RfaWQgPSBib2R5Lmxhc3RfaWQgfHwgbnVsbDtcbiAgICB9XG4gICAgZ2V0UGFnaW5hdGVkSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPz8gW107XG4gICAgfVxuICAgIGhhc05leHRQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNfbW9yZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuaGFzTmV4dFBhZ2UoKTtcbiAgICB9XG4gICAgLy8gQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgbmV4dFBhZ2VJbmZvKClgIGluc3RlYWRcbiAgICBuZXh0UGFnZVBhcmFtcygpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMubmV4dFBhZ2VJbmZvKCk7XG4gICAgICAgIGlmICghaW5mbylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoJ3BhcmFtcycgaW4gaW5mbylcbiAgICAgICAgICAgIHJldHVybiBpbmZvLnBhcmFtcztcbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyb21FbnRyaWVzKGluZm8udXJsLnNlYXJjaFBhcmFtcyk7XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgbmV4dFBhZ2VJbmZvKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnF1ZXJ5Py5bJ2JlZm9yZV9pZCddKSB7XG4gICAgICAgICAgICAvLyBpbiByZXZlcnNlXG4gICAgICAgICAgICBjb25zdCBmaXJzdElkID0gdGhpcy5maXJzdF9pZDtcbiAgICAgICAgICAgIGlmICghZmlyc3RJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlX2lkOiBmaXJzdElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMubGFzdF9pZDtcbiAgICAgICAgaWYgKCFjdXJzb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBhZnRlcl9pZDogY3Vyc29yLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWdpbmF0aW9uLm1qcy5tYXAiLAogICAgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5leHBvcnQgY2xhc3MgQVBJUmVzb3VyY2Uge1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb3VyY2UubWpzLm1hcCIsCiAgICAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9jb3JlLm1qc1wiO1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gXCIuLi8uLi9wYWdpbmF0aW9uLm1qc1wiO1xuZXhwb3J0IGNsYXNzIE1vZGVscyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyBtb2RlbC5cbiAgICAgKlxuICAgICAqIFRoZSBNb2RlbHMgQVBJIHJlc3BvbnNlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljXG4gICAgICogbW9kZWwgb3IgcmVzb2x2ZSBhIG1vZGVsIGFsaWFzIHRvIGEgbW9kZWwgSUQuXG4gICAgICovXG4gICAgcmV0cmlldmUobW9kZWxJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL3YxL21vZGVscy8ke21vZGVsSWR9P2JldGE9dHJ1ZWAsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBsaXN0KHF1ZXJ5ID0ge30sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KCcvdjEvbW9kZWxzP2JldGE9dHJ1ZScsIEJldGFNb2RlbEluZm9zUGFnZSwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQmV0YU1vZGVsSW5mb3NQYWdlIGV4dGVuZHMgUGFnZSB7XG59XG5Nb2RlbHMuQmV0YU1vZGVsSW5mb3NQYWdlID0gQmV0YU1vZGVsSW5mb3NQYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kZWxzLm1qcy5tYXAiLAogICAgImltcG9ydCB7IEFudGhyb3BpY0Vycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yLm1qc1wiO1xuaW1wb3J0IHsgUmVhZGFibGVTdHJlYW1Ub0FzeW5jSXRlcmFibGUgfSBmcm9tIFwiLi4vc3RyZWFtLXV0aWxzLm1qc1wiO1xuaW1wb3J0IHsgTGluZURlY29kZXIgfSBmcm9tIFwiLi9saW5lLm1qc1wiO1xuZXhwb3J0IGNsYXNzIEpTT05MRGVjb2RlciB7XG4gICAgY29uc3RydWN0b3IoaXRlcmF0b3IsIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5pdGVyYXRvciA9IGl0ZXJhdG9yO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIH1cbiAgICBhc3luYyAqZGVjb2RlcigpIHtcbiAgICAgICAgY29uc3QgbGluZURlY29kZXIgPSBuZXcgTGluZURlY29kZXIoKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiB0aGlzLml0ZXJhdG9yKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZURlY29kZXIuZGVjb2RlKGNodW5rKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIEpTT04ucGFyc2UobGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVEZWNvZGVyLmZsdXNoKCkpIHtcbiAgICAgICAgICAgIHlpZWxkIEpTT04ucGFyc2UobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlcigpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBBdHRlbXB0ZWQgdG8gaXRlcmF0ZSBvdmVyIGEgcmVzcG9uc2Ugd2l0aCBubyBib2R5YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBKU09OTERlY29kZXIoUmVhZGFibGVTdHJlYW1Ub0FzeW5jSXRlcmFibGUocmVzcG9uc2UuYm9keSksIGNvbnRyb2xsZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzb25sLm1qcy5tYXAiLAogICAgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGlzUmVxdWVzdE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS5tanNcIjtcbmltcG9ydCB7IFBhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vcGFnaW5hdGlvbi5tanNcIjtcbmltcG9ydCB7IEpTT05MRGVjb2RlciB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcm5hbC9kZWNvZGVycy9qc29ubC5tanNcIjtcbmltcG9ydCB7IEFudGhyb3BpY0Vycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2Vycm9yLm1qc1wiO1xuZXhwb3J0IGNsYXNzIEJhdGNoZXMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gICAgLyoqXG4gICAgICogU2VuZCBhIGJhdGNoIG9mIE1lc3NhZ2UgY3JlYXRpb24gcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBUaGUgTWVzc2FnZSBCYXRjaGVzIEFQSSBjYW4gYmUgdXNlZCB0byBwcm9jZXNzIG11bHRpcGxlIE1lc3NhZ2VzIEFQSSByZXF1ZXN0cyBhdFxuICAgICAqIG9uY2UuIE9uY2UgYSBNZXNzYWdlIEJhdGNoIGlzIGNyZWF0ZWQsIGl0IGJlZ2lucyBwcm9jZXNzaW5nIGltbWVkaWF0ZWx5LiBCYXRjaGVzXG4gICAgICogY2FuIHRha2UgdXAgdG8gMjQgaG91cnMgdG8gY29tcGxldGUuXG4gICAgICpcbiAgICAgKiBMZWFybiBtb3JlIGFib3V0IHRoZSBNZXNzYWdlIEJhdGNoZXMgQVBJIGluIG91clxuICAgICAqIFt1c2VyIGd1aWRlXSgvZW4vZG9jcy9idWlsZC13aXRoLWNsYXVkZS9iYXRjaC1wcm9jZXNzaW5nKVxuICAgICAqL1xuICAgIGNyZWF0ZShwYXJhbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBiZXRhcywgLi4uYm9keSB9ID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy92MS9tZXNzYWdlcy9iYXRjaGVzP2JldGE9dHJ1ZScsIHtcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdhbnRocm9waWMtYmV0YSc6IFsuLi4oYmV0YXMgPz8gW10pLCAnbWVzc2FnZS1iYXRjaGVzLTIwMjQtMDktMjQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0cmlldmUobWVzc2FnZUJhdGNoSWQsIHBhcmFtcyA9IHt9LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHJpZXZlKG1lc3NhZ2VCYXRjaElkLCB7fSwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGJldGFzIH0gPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvdjEvbWVzc2FnZXMvYmF0Y2hlcy8ke21lc3NhZ2VCYXRjaElkfT9iZXRhPXRydWVgLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdhbnRocm9waWMtYmV0YSc6IFsuLi4oYmV0YXMgPz8gW10pLCAnbWVzc2FnZS1iYXRjaGVzLTIwMjQtMDktMjQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGlzdChwYXJhbXMgPSB7fSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoaXNSZXF1ZXN0T3B0aW9ucyhwYXJhbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYmV0YXMsIC4uLnF1ZXJ5IH0gPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdCgnL3YxL21lc3NhZ2VzL2JhdGNoZXM/YmV0YT10cnVlJywgQmV0YU1lc3NhZ2VCYXRjaGVzUGFnZSwge1xuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdhbnRocm9waWMtYmV0YSc6IFsuLi4oYmV0YXMgPz8gW10pLCAnbWVzc2FnZS1iYXRjaGVzLTIwMjQtMDktMjQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVsZXRlKG1lc3NhZ2VCYXRjaElkLCBwYXJhbXMgPSB7fSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoaXNSZXF1ZXN0T3B0aW9ucyhwYXJhbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxldGUobWVzc2FnZUJhdGNoSWQsIHt9LCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYmV0YXMgfSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5kZWxldGUoYC92MS9tZXNzYWdlcy9iYXRjaGVzLyR7bWVzc2FnZUJhdGNoSWR9P2JldGE9dHJ1ZWAsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ2FudGhyb3BpYy1iZXRhJzogWy4uLihiZXRhcyA/PyBbXSksICdtZXNzYWdlLWJhdGNoZXMtMjAyNC0wOS0yNCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uaGVhZGVycyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYW5jZWwobWVzc2FnZUJhdGNoSWQsIHBhcmFtcyA9IHt9LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbmNlbChtZXNzYWdlQmF0Y2hJZCwge30sIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBiZXRhcyB9ID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoYC92MS9tZXNzYWdlcy9iYXRjaGVzLyR7bWVzc2FnZUJhdGNoSWR9L2NhbmNlbD9iZXRhPXRydWVgLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdhbnRocm9waWMtYmV0YSc6IFsuLi4oYmV0YXMgPz8gW10pLCAnbWVzc2FnZS1iYXRjaGVzLTIwMjQtMDktMjQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgcmVzdWx0cyhtZXNzYWdlQmF0Y2hJZCwgcGFyYW1zID0ge30sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocGFyYW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cyhtZXNzYWdlQmF0Y2hJZCwge30sIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmF0Y2ggPSBhd2FpdCB0aGlzLnJldHJpZXZlKG1lc3NhZ2VCYXRjaElkKTtcbiAgICAgICAgaWYgKCFiYXRjaC5yZXN1bHRzX3VybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBObyBiYXRjaCBcXGByZXN1bHRzX3VybFxcYDsgSGFzIGl0IGZpbmlzaGVkIHByb2Nlc3Npbmc/ICR7YmF0Y2gucHJvY2Vzc2luZ19zdGF0dXN9IC0gJHtiYXRjaC5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGJldGFzIH0gPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRcbiAgICAgICAgICAgIC5nZXQoYmF0Y2gucmVzdWx0c191cmwsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ2FudGhyb3BpYy1iZXRhJzogWy4uLihiZXRhcyA/PyBbXSksICdtZXNzYWdlLWJhdGNoZXMtMjAyNC0wOS0yNCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vYmluYXJ5JyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fYmluYXJ5UmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuX3RoZW5VbndyYXAoKF8sIHByb3BzKSA9PiBKU09OTERlY29kZXIuZnJvbVJlc3BvbnNlKHByb3BzLnJlc3BvbnNlLCBwcm9wcy5jb250cm9sbGVyKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEJldGFNZXNzYWdlQmF0Y2hlc1BhZ2UgZXh0ZW5kcyBQYWdlIHtcbn1cbkJhdGNoZXMuQmV0YU1lc3NhZ2VCYXRjaGVzUGFnZSA9IEJldGFNZXNzYWdlQmF0Y2hlc1BhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXRjaGVzLm1qcy5tYXAiLAogICAgImNvbnN0IHRva2VuaXplID0gKGlucHV0KSA9PiB7XG4gICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgIGxldCB0b2tlbnMgPSBbXTtcbiAgICB3aGlsZSAoY3VycmVudCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICBsZXQgY2hhciA9IGlucHV0W2N1cnJlbnRdO1xuICAgICAgICBpZiAoY2hhciA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ3snLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gJ30nKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ30nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gJ1snKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BhcmVuJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1snLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gJ10nKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BhcmVuJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ10nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gJzonKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICc6JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudCsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09ICcsJykge1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkZWxpbWl0ZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnLCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN1cnJlbnQrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIGxldCBkYW5nbGluZ1F1b3RlID0gZmFsc2U7XG4gICAgICAgICAgICBjaGFyID0gaW5wdXRbKytjdXJyZW50XTtcbiAgICAgICAgICAgIHdoaWxlIChjaGFyICE9PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkYW5nbGluZ1F1b3RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYW5nbGluZ1F1b3RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGNoYXIgKyBpbnB1dFtjdXJyZW50XTtcbiAgICAgICAgICAgICAgICAgICAgY2hhciA9IGlucHV0WysrY3VycmVudF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBjaGFyO1xuICAgICAgICAgICAgICAgICAgICBjaGFyID0gaW5wdXRbKytjdXJyZW50XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGFyID0gaW5wdXRbKytjdXJyZW50XTtcbiAgICAgICAgICAgIGlmICghZGFuZ2xpbmdRdW90ZSkge1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IFdISVRFU1BBQ0UgPSAvXFxzLztcbiAgICAgICAgaWYgKGNoYXIgJiYgV0hJVEVTUEFDRS50ZXN0KGNoYXIpKSB7XG4gICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgTlVNQkVSUyA9IC9bMC05XS87XG4gICAgICAgIGlmICgoY2hhciAmJiBOVU1CRVJTLnRlc3QoY2hhcikpIHx8IGNoYXIgPT09ICctJyB8fCBjaGFyID09PSAnLicpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgaWYgKGNoYXIgPT09ICctJykge1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IGNoYXI7XG4gICAgICAgICAgICAgICAgY2hhciA9IGlucHV0WysrY3VycmVudF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoKGNoYXIgJiYgTlVNQkVSUy50ZXN0KGNoYXIpKSB8fCBjaGFyID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBjaGFyO1xuICAgICAgICAgICAgICAgIGNoYXIgPSBpbnB1dFsrK2N1cnJlbnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgTEVUVEVSUyA9IC9bYS16XS9pO1xuICAgICAgICBpZiAoY2hhciAmJiBMRVRURVJTLnRlc3QoY2hhcikpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGNoYXIgJiYgTEVUVEVSUy50ZXN0KGNoYXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gY2hhcjtcbiAgICAgICAgICAgICAgICBjaGFyID0gaW5wdXRbKytjdXJyZW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAndHJ1ZScgfHwgdmFsdWUgPT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdW5rbm93biB0b2tlbiwgZS5nLiBgbnVsYCB3aGljaCBpc24ndCBxdWl0ZSBgbnVsbGBcbiAgICAgICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Kys7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG59LCBzdHJpcCA9ICh0b2tlbnMpID0+IHtcbiAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbiAgICBsZXQgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICBzd2l0Y2ggKGxhc3RUb2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3NlcGFyYXRvcic6XG4gICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoMCwgdG9rZW5zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmlwKHRva2Vucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGxldCBsYXN0Q2hhcmFjdGVyT2ZMYXN0VG9rZW4gPSBsYXN0VG9rZW4udmFsdWVbbGFzdFRva2VuLnZhbHVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJPZkxhc3RUb2tlbiA9PT0gJy4nIHx8IGxhc3RDaGFyYWN0ZXJPZkxhc3RUb2tlbiA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKDAsIHRva2Vucy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXAodG9rZW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGxldCB0b2tlbkJlZm9yZVRoZUxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgICBpZiAodG9rZW5CZWZvcmVUaGVMYXN0VG9rZW4/LnR5cGUgPT09ICdkZWxpbWl0ZXInKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKDAsIHRva2Vucy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXAodG9rZW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuQmVmb3JlVGhlTGFzdFRva2VuPy50eXBlID09PSAnYnJhY2UnICYmIHRva2VuQmVmb3JlVGhlTGFzdFRva2VuLnZhbHVlID09PSAneycpIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoMCwgdG9rZW5zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpcCh0b2tlbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlbGltaXRlcic6XG4gICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoMCwgdG9rZW5zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmlwKHRva2Vucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vucztcbn0sIHVuc3RyaXAgPSAodG9rZW5zKSA9PiB7XG4gICAgbGV0IHRhaWwgPSBbXTtcbiAgICB0b2tlbnMubWFwKCh0b2tlbikgPT4ge1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2JyYWNlJykge1xuICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAneycpIHtcbiAgICAgICAgICAgICAgICB0YWlsLnB1c2goJ30nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhaWwuc3BsaWNlKHRhaWwubGFzdEluZGV4T2YoJ30nKSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdwYXJlbicpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgdGFpbC5wdXNoKCddJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YWlsLnNwbGljZSh0YWlsLmxhc3RJbmRleE9mKCddJyksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgICAgICB0YWlsLnJldmVyc2UoKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdicmFjZScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnfScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwYXJlbicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnXScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW5zO1xufSwgZ2VuZXJhdGUgPSAodG9rZW5zKSA9PiB7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIHRva2Vucy5tYXAoKHRva2VuKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1wiJyArIHRva2VuLnZhbHVlICsgJ1wiJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRva2VuLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG91dHB1dDtcbn0sIHBhcnRpYWxQYXJzZSA9IChpbnB1dCkgPT4gSlNPTi5wYXJzZShnZW5lcmF0ZSh1bnN0cmlwKHN0cmlwKHRva2VuaXplKGlucHV0KSkpKSk7XG5leHBvcnQgeyBwYXJ0aWFsUGFyc2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlci5tanMubWFwIiwKICAgICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0JldGFNZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgX0JldGFNZXNzYWdlU3RyZWFtX2N1cnJlbnRNZXNzYWdlU25hcHNob3QsIF9CZXRhTWVzc2FnZVN0cmVhbV9jb25uZWN0ZWRQcm9taXNlLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzb2x2ZUNvbm5lY3RlZFByb21pc2UsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kUHJvbWlzZSwgX0JldGFNZXNzYWdlU3RyZWFtX3Jlc29sdmVFbmRQcm9taXNlLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVqZWN0RW5kUHJvbWlzZSwgX0JldGFNZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgX0JldGFNZXNzYWdlU3RyZWFtX2VuZGVkLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZXJyb3JlZCwgX0JldGFNZXNzYWdlU3RyZWFtX2Fib3J0ZWQsIF9CZXRhTWVzc2FnZVN0cmVhbV9jYXRjaGluZ1Byb21pc2VDcmVhdGVkLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzcG9uc2UsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZXF1ZXN0X2lkLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZ2V0RmluYWxNZXNzYWdlLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZ2V0RmluYWxUZXh0LCBfQmV0YU1lc3NhZ2VTdHJlYW1faGFuZGxlRXJyb3IsIF9CZXRhTWVzc2FnZVN0cmVhbV9iZWdpblJlcXVlc3QsIF9CZXRhTWVzc2FnZVN0cmVhbV9hZGRTdHJlYW1FdmVudCwgX0JldGFNZXNzYWdlU3RyZWFtX2VuZFJlcXVlc3QsIF9CZXRhTWVzc2FnZVN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZTtcbmltcG9ydCB7IEFudGhyb3BpY0Vycm9yLCBBUElVc2VyQWJvcnRFcnJvciB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL2Vycm9yJztcbmltcG9ydCB7IFN0cmVhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3N0cmVhbWluZyc7XG5pbXBvcnQgeyBwYXJ0aWFsUGFyc2UgfSBmcm9tIFwiLi4vX3ZlbmRvci9wYXJ0aWFsLWpzb24tcGFyc2VyL3BhcnNlci5tanNcIjtcbmNvbnN0IEpTT05fQlVGX1BST1BFUlRZID0gJ19fanNvbl9idWYnO1xuZXhwb3J0IGNsYXNzIEJldGFNZXNzYWdlU3RyZWFtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yZWNlaXZlZE1lc3NhZ2VzID0gW107XG4gICAgICAgIF9CZXRhTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIF9CZXRhTWVzc2FnZVN0cmVhbV9jb25uZWN0ZWRQcm9taXNlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzb2x2ZUNvbm5lY3RlZFByb21pc2Uuc2V0KHRoaXMsICgpID0+IHsgfSk7XG4gICAgICAgIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLnNldCh0aGlzLCAoKSA9PiB7IH0pO1xuICAgICAgICBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kUHJvbWlzZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX3Jlc29sdmVFbmRQcm9taXNlLnNldCh0aGlzLCAoKSA9PiB7IH0pO1xuICAgICAgICBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVqZWN0RW5kUHJvbWlzZS5zZXQodGhpcywgKCkgPT4geyB9KTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX2xpc3RlbmVycy5zZXQodGhpcywge30pO1xuICAgICAgICBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX2Vycm9yZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX2Fib3J0ZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX3Jlc3BvbnNlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVxdWVzdF9pZC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0JldGFNZXNzYWdlU3RyZWFtX2hhbmRsZUVycm9yLnNldCh0aGlzLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2Vycm9yZWQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBUElVc2VyQWJvcnRFcnJvcikge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2Fib3J0ZWQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW1pdCgnYWJvcnQnLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBbnRocm9waWNFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW50aHJvcGljRXJyb3IgPSBuZXcgQW50aHJvcGljRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGFudGhyb3BpY0Vycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXQoJ2Vycm9yJywgYW50aHJvcGljRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXQoJ2Vycm9yJywgbmV3IEFudGhyb3BpY0Vycm9yKFN0cmluZyhlcnJvcikpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2Nvbm5lY3RlZFByb21pc2UsIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX3Jlc29sdmVDb25uZWN0ZWRQcm9taXNlLCByZXNvbHZlLCBcImZcIik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLCByZWplY3QsIFwiZlwiKTtcbiAgICAgICAgfSksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kUHJvbWlzZSwgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzb2x2ZUVuZFByb21pc2UsIHJlc29sdmUsIFwiZlwiKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX3JlamVjdEVuZFByb21pc2UsIHJlamVjdCwgXCJmXCIpO1xuICAgICAgICB9KSwgXCJmXCIpO1xuICAgICAgICAvLyBEb24ndCBsZXQgdGhlc2UgcHJvbWlzZXMgY2F1c2UgdW5oYW5kbGVkIHJlamVjdGlvbiBlcnJvcnMuXG4gICAgICAgIC8vIHdlIHdpbGwgbWFudWFsbHkgY2F1c2UgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBlcnJvciBsYXRlclxuICAgICAgICAvLyBpZiB0aGUgdXNlciBoYXNuJ3QgcmVnaXN0ZXJlZCBhbnkgZXJyb3IgbGlzdGVuZXIgb3IgY2FsbGVkXG4gICAgICAgIC8vIGFueSBwcm9taXNlLXJldHVybmluZyBtZXRob2QuXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2Nvbm5lY3RlZFByb21pc2UsIFwiZlwiKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9lbmRQcm9taXNlLCBcImZcIikuY2F0Y2goKCkgPT4geyB9KTtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzcG9uc2UsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IHJlcXVlc3RfaWQoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZXF1ZXN0X2lkLCBcImZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBNZXNzYWdlU3RyZWFtYCBkYXRhLCB0aGUgcmF3IGBSZXNwb25zZWAgaW5zdGFuY2UgYW5kIHRoZSBJRCBvZiB0aGUgcmVxdWVzdCxcbiAgICAgKiByZXR1cm5lZCB2aWUgdGhlIGByZXF1ZXN0LWlkYCBoZWFkZXIgd2hpY2ggaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcmVxdWVzdHMgYW5kIHJlc3BvcnRpbmdcbiAgICAgKiBpc3N1ZXMgdG8gQW50aHJvcGljLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYEFQSVByb21pc2Uud2l0aFJlc3BvbnNlKClgIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IGNyZWF0ZWQgdGhlIHN0cmVhbSB1c2luZyBgTWVzc2FnZVN0cmVhbS5mcm9tUmVhZGFibGVTdHJlYW1gXG4gICAgICogYXMgbm8gYFJlc3BvbnNlYCBpcyBhdmFpbGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgd2l0aFJlc3BvbnNlKCkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2Nvbm5lY3RlZFByb21pc2UsIFwiZlwiKTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBhIGBSZXNwb25zZWAgb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHJlcXVlc3RfaWQ6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXF1ZXN0LWlkJyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVuZGVkIGZvciB1c2Ugb24gdGhlIGZyb250ZW5kLCBjb25zdW1pbmcgYSBzdHJlYW0gcHJvZHVjZWQgd2l0aFxuICAgICAqIGAudG9SZWFkYWJsZVN0cmVhbSgpYCBvbiB0aGUgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBtZXNzYWdlcyBzZW50IHRvIHRoZSBtb2RlbCBkbyBub3QgYXBwZWFyIGluIGAub24oJ21lc3NhZ2UnKWBcbiAgICAgKiBpbiB0aGlzIGNvbnRleHQuXG4gICAgICovXG4gICAgc3RhdGljIGZyb21SZWFkYWJsZVN0cmVhbShzdHJlYW0pIHtcbiAgICAgICAgY29uc3QgcnVubmVyID0gbmV3IEJldGFNZXNzYWdlU3RyZWFtKCk7XG4gICAgICAgIHJ1bm5lci5fcnVuKCgpID0+IHJ1bm5lci5fZnJvbVJlYWRhYmxlU3RyZWFtKHN0cmVhbSkpO1xuICAgICAgICByZXR1cm4gcnVubmVyO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlTWVzc2FnZShtZXNzYWdlcywgcGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBCZXRhTWVzc2FnZVN0cmVhbSgpO1xuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcGFyYW1zLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICBydW5uZXIuX2FkZE1lc3NhZ2VQYXJhbShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBydW5uZXIuX3J1bigoKSA9PiBydW5uZXIuX2NyZWF0ZU1lc3NhZ2UobWVzc2FnZXMsIHsgLi4ucGFyYW1zLCBzdHJlYW06IHRydWUgfSwgeyAuLi5vcHRpb25zLCBoZWFkZXJzOiB7IC4uLm9wdGlvbnM/LmhlYWRlcnMsICdYLVN0YWlubGVzcy1IZWxwZXItTWV0aG9kJzogJ3N0cmVhbScgfSB9KSk7XG4gICAgICAgIHJldHVybiBydW5uZXI7XG4gICAgfVxuICAgIF9ydW4oZXhlY3V0b3IpIHtcbiAgICAgICAgZXhlY3V0b3IoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRGaW5hbCgpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnZW5kJyk7XG4gICAgICAgIH0sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2hhbmRsZUVycm9yLCBcImZcIikpO1xuICAgIH1cbiAgICBfYWRkTWVzc2FnZVBhcmFtKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBfYWRkTWVzc2FnZShtZXNzYWdlLCBlbWl0ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnJlY2VpdmVkTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgaWYgKGVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfY3JlYXRlTWVzc2FnZShtZXNzYWdlcywgcGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnM/LnNpZ25hbDtcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpcy5jb250cm9sbGVyLmFib3J0KCkpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9CZXRhTWVzc2FnZVN0cmVhbV9iZWdpblJlcXVlc3QpLmNhbGwodGhpcyk7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UsIGRhdGE6IHN0cmVhbSB9ID0gYXdhaXQgbWVzc2FnZXNcbiAgICAgICAgICAgIC5jcmVhdGUoeyAuLi5wYXJhbXMsIHN0cmVhbTogdHJ1ZSB9LCB7IC4uLm9wdGlvbnMsIHNpZ25hbDogdGhpcy5jb250cm9sbGVyLnNpZ25hbCB9KVxuICAgICAgICAgICAgLndpdGhSZXNwb25zZSgpO1xuICAgICAgICB0aGlzLl9jb25uZWN0ZWQocmVzcG9uc2UpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBcIm1cIiwgX0JldGFNZXNzYWdlU3RyZWFtX2FkZFN0cmVhbUV2ZW50KS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLmNvbnRyb2xsZXIuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kUmVxdWVzdCkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgX2Nvbm5lY3RlZChyZXNwb25zZSkge1xuICAgICAgICBpZiAodGhpcy5lbmRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzcG9uc2UsIHJlc3BvbnNlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX3JlcXVlc3RfaWQsIHJlc3BvbnNlPy5oZWFkZXJzLmdldCgncmVxdWVzdC1pZCcpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX3Jlc29sdmVDb25uZWN0ZWRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCByZXNwb25zZSk7XG4gICAgICAgIHRoaXMuX2VtaXQoJ2Nvbm5lY3QnKTtcbiAgICB9XG4gICAgZ2V0IGVuZGVkKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kZWQsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IGVycm9yZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9lcnJvcmVkLCBcImZcIik7XG4gICAgfVxuICAgIGdldCBhYm9ydGVkKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fYWJvcnRlZCwgXCJmXCIpO1xuICAgIH1cbiAgICBhYm9ydCgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RlbmVycyBhcnJheSBmb3IgdGhlIGV2ZW50LlxuICAgICAqIE5vIGNoZWNrcyBhcmUgbWFkZSB0byBzZWUgaWYgdGhlIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQuIE11bHRpcGxlIGNhbGxzIHBhc3NpbmdcbiAgICAgKiB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBldmVudCBhbmQgbGlzdGVuZXIgd2lsbCByZXN1bHQgaW4gdGhlIGxpc3RlbmVyIGJlaW5nIGFkZGVkLCBhbmRcbiAgICAgKiBjYWxsZWQsIG11bHRpcGxlIHRpbWVzLlxuICAgICAqIEByZXR1cm5zIHRoaXMgTWVzc2FnZVN0cmVhbSwgc28gdGhhdCBjYWxscyBjYW4gYmUgY2hhaW5lZFxuICAgICAqL1xuICAgIG9uKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMsIFwiZlwiKVtldmVudF0gfHwgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgXCJmXCIpW2V2ZW50XSA9IFtdKTtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goeyBsaXN0ZW5lciB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBsaXN0ZW5lciBmcm9tIHRoZSBsaXN0ZW5lciBhcnJheSBmb3IgdGhlIGV2ZW50LlxuICAgICAqIG9mZigpIHdpbGwgcmVtb3ZlLCBhdCBtb3N0LCBvbmUgaW5zdGFuY2Ugb2YgYSBsaXN0ZW5lciBmcm9tIHRoZSBsaXN0ZW5lciBhcnJheS4gSWYgYW55IHNpbmdsZVxuICAgICAqIGxpc3RlbmVyIGhhcyBiZWVuIGFkZGVkIG11bHRpcGxlIHRpbWVzIHRvIHRoZSBsaXN0ZW5lciBhcnJheSBmb3IgdGhlIHNwZWNpZmllZCBldmVudCwgdGhlblxuICAgICAqIG9mZigpIG11c3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJlbW92ZSBlYWNoIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHRoaXMgTWVzc2FnZVN0cmVhbSwgc28gdGhhdCBjYWxscyBjYW4gYmUgY2hhaW5lZFxuICAgICAqL1xuICAgIG9mZihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fbGlzdGVuZXJzLCBcImZcIilbZXZlbnRdO1xuICAgICAgICBpZiAoIWxpc3RlbmVycylcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVycy5maW5kSW5kZXgoKGwpID0+IGwubGlzdGVuZXIgPT09IGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApXG4gICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBvbmUtdGltZSBsaXN0ZW5lciBmdW5jdGlvbiBmb3IgdGhlIGV2ZW50LiBUaGUgbmV4dCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQsXG4gICAgICogdGhpcyBsaXN0ZW5lciBpcyByZW1vdmVkIGFuZCB0aGVuIGludm9rZWQuXG4gICAgICogQHJldHVybnMgdGhpcyBNZXNzYWdlU3RyZWFtLCBzbyB0aGF0IGNhbGxzIGNhbiBiZSBjaGFpbmVkXG4gICAgICovXG4gICAgb25jZShldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fbGlzdGVuZXJzLCBcImZcIilbZXZlbnRdIHx8IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMsIFwiZlwiKVtldmVudF0gPSBbXSk7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIG9uY2U6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gYC5vbmNlKClgLCBidXQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgbmV4dCB0aW1lXG4gICAgICogdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCwgaW5zdGVhZCBvZiBjYWxsaW5nIGEgbGlzdGVuZXIgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIG5leHQgdGltZSBnaXZlbiBldmVudCBpcyB0cmlnZ2VyZWQsXG4gICAgICogb3IgcmVqZWN0cyBpZiBhbiBlcnJvciBpcyBlbWl0dGVkLiAgKElmIHlvdSByZXF1ZXN0IHRoZSAnZXJyb3InIGV2ZW50LFxuICAgICAqIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXJyb3IpLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHN0cmVhbS5lbWl0dGVkKCdtZXNzYWdlJykgLy8gcmVqZWN0cyBpZiB0aGUgc3RyZWFtIGVycm9yc1xuICAgICAqL1xuICAgIGVtaXR0ZWQoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gJ2Vycm9yJylcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICAgIHRoaXMub25jZShldmVudCwgcmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBkb25lKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9jYXRjaGluZ1Byb21pc2VDcmVhdGVkLCB0cnVlLCBcImZcIik7XG4gICAgICAgIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2VuZFByb21pc2UsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCwgXCJmXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0aGUgZmluYWwgYXNzaXN0YW50IE1lc3NhZ2UgcmVzcG9uc2UsXG4gICAgICogb3IgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgc3RyZWFtIGVuZGVkIHByZW1hdHVyZWx5IHdpdGhvdXQgcHJvZHVjaW5nIGEgTWVzc2FnZS5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5hbE1lc3NhZ2UoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZG9uZSgpO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBcIm1cIiwgX0JldGFNZXNzYWdlU3RyZWFtX2dldEZpbmFsTWVzc2FnZSkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdGhlIGZpbmFsIGFzc2lzdGFudCBNZXNzYWdlJ3MgdGV4dCByZXNwb25zZSwgY29uY2F0ZW5hdGVkXG4gICAgICogdG9nZXRoZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdGV4dCBibG9ja3MuXG4gICAgICogUmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgc3RyZWFtIGVuZGVkIHByZW1hdHVyZWx5IHdpdGhvdXQgcHJvZHVjaW5nIGEgTWVzc2FnZS5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5hbFRleHQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZG9uZSgpO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBcIm1cIiwgX0JldGFNZXNzYWdlU3RyZWFtX2dldEZpbmFsVGV4dCkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgX2VtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGVtaXQgYW55IE1lc3NhZ2VTdHJlYW1FdmVudHMgYWZ0ZXIgZW5kXG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9lbmRlZCwgXCJmXCIpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZXZlbnQgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9lbmRlZCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzb2x2ZUVuZFByb21pc2UsIFwiZlwiKS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgXCJmXCIpW2V2ZW50XTtcbiAgICAgICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fbGlzdGVuZXJzLCBcImZcIilbZXZlbnRdID0gbGlzdGVuZXJzLmZpbHRlcigobCkgPT4gIWwub25jZSk7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgoeyBsaXN0ZW5lciB9KSA9PiBsaXN0ZW5lciguLi5hcmdzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50ID09PSAnYWJvcnQnKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGFyZ3NbMF07XG4gICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQsIFwiZlwiKSAmJiAhbGlzdGVuZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RFbmRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdlbmQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IF9lbWl0KCdlcnJvcicsIGVycm9yKSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSAjaGFuZGxlRXJyb3IoKS5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXJnc1swXTtcbiAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fY2F0Y2hpbmdQcm9taXNlQ3JlYXRlZCwgXCJmXCIpICYmICFsaXN0ZW5lcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBpZiB0aGUgdXNlciBoYXNuJ3QgcmVnaXN0ZXJlZCBhbnkgZXJyb3IgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgLy8gSWYgeW91IGFyZSBzZWVpbmcgc3RhY2sgdHJhY2VzIGhlcmUsIG1ha2Ugc3VyZSB0byBoYW5kbGUgZXJyb3JzIHZpYSBlaXRoZXI6XG4gICAgICAgICAgICAgICAgLy8gLSBydW5uZXIub24oJ2Vycm9yJywgKCkgPT4gLi4uKVxuICAgICAgICAgICAgICAgIC8vIC0gYXdhaXQgcnVubmVyLmRvbmUoKVxuICAgICAgICAgICAgICAgIC8vIC0gYXdhaXQgcnVubmVyLmZpbmFsLi4uKClcbiAgICAgICAgICAgICAgICAvLyAtIGV0Yy5cbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RFbmRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZW1pdEZpbmFsKCkge1xuICAgICAgICBjb25zdCBmaW5hbE1lc3NhZ2UgPSB0aGlzLnJlY2VpdmVkTWVzc2FnZXMuYXQoLTEpO1xuICAgICAgICBpZiAoZmluYWxNZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdmaW5hbE1lc3NhZ2UnLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZ2V0RmluYWxNZXNzYWdlKS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfZnJvbVJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnM/LnNpZ25hbDtcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpcy5jb250cm9sbGVyLmFib3J0KCkpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9CZXRhTWVzc2FnZVN0cmVhbV9iZWdpblJlcXVlc3QpLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3RlZChudWxsKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gU3RyZWFtLmZyb21SZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSwgdGhpcy5jb250cm9sbGVyKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzdHJlYW0pIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9CZXRhTWVzc2FnZVN0cmVhbV9hZGRTdHJlYW1FdmVudCkuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5jb250cm9sbGVyLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBcIm1cIiwgX0JldGFNZXNzYWdlU3RyZWFtX2VuZFJlcXVlc3QpLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIFsoX0JldGFNZXNzYWdlU3RyZWFtX2N1cnJlbnRNZXNzYWdlU25hcHNob3QgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fY29ubmVjdGVkUHJvbWlzZSA9IG5ldyBXZWFrTWFwKCksIF9CZXRhTWVzc2FnZVN0cmVhbV9yZXNvbHZlQ29ubmVjdGVkUHJvbWlzZSA9IG5ldyBXZWFrTWFwKCksIF9CZXRhTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlID0gbmV3IFdlYWtNYXAoKSwgX0JldGFNZXNzYWdlU3RyZWFtX2VuZFByb21pc2UgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzb2x2ZUVuZFByb21pc2UgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVqZWN0RW5kUHJvbWlzZSA9IG5ldyBXZWFrTWFwKCksIF9CZXRhTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZW5kZWQgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZXJyb3JlZCA9IG5ldyBXZWFrTWFwKCksIF9CZXRhTWVzc2FnZVN0cmVhbV9hYm9ydGVkID0gbmV3IFdlYWtNYXAoKSwgX0JldGFNZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVzcG9uc2UgPSBuZXcgV2Vha01hcCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fcmVxdWVzdF9pZCA9IG5ldyBXZWFrTWFwKCksIF9CZXRhTWVzc2FnZVN0cmVhbV9oYW5kbGVFcnJvciA9IG5ldyBXZWFrTWFwKCksIF9CZXRhTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfQmV0YU1lc3NhZ2VTdHJlYW1fZ2V0RmluYWxNZXNzYWdlID0gZnVuY3Rpb24gX0JldGFNZXNzYWdlU3RyZWFtX2dldEZpbmFsTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVjZWl2ZWRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcignc3RyZWFtIGVuZGVkIHdpdGhvdXQgcHJvZHVjaW5nIGEgTWVzc2FnZSB3aXRoIHJvbGU9YXNzaXN0YW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWl2ZWRNZXNzYWdlcy5hdCgtMSk7XG4gICAgfSwgX0JldGFNZXNzYWdlU3RyZWFtX2dldEZpbmFsVGV4dCA9IGZ1bmN0aW9uIF9CZXRhTWVzc2FnZVN0cmVhbV9nZXRGaW5hbFRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoJ3N0cmVhbSBlbmRlZCB3aXRob3V0IHByb2R1Y2luZyBhIE1lc3NhZ2Ugd2l0aCByb2xlPWFzc2lzdGFudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRCbG9ja3MgPSB0aGlzLnJlY2VpdmVkTWVzc2FnZXNcbiAgICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgICAgIC5jb250ZW50LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiBibG9jay50ZXh0KTtcbiAgICAgICAgaWYgKHRleHRCbG9ja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoJ3N0cmVhbSBlbmRlZCB3aXRob3V0IHByb2R1Y2luZyBhIGNvbnRlbnQgYmxvY2sgd2l0aCB0eXBlPXRleHQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dEJsb2Nrcy5qb2luKCcgJyk7XG4gICAgfSwgX0JldGFNZXNzYWdlU3RyZWFtX2JlZ2luUmVxdWVzdCA9IGZ1bmN0aW9uIF9CZXRhTWVzc2FnZVN0cmVhbV9iZWdpblJlcXVlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmVuZGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LCB1bmRlZmluZWQsIFwiZlwiKTtcbiAgICB9LCBfQmV0YU1lc3NhZ2VTdHJlYW1fYWRkU3RyZWFtRXZlbnQgPSBmdW5jdGlvbiBfQmV0YU1lc3NhZ2VTdHJlYW1fYWRkU3RyZWFtRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VTbmFwc2hvdCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9CZXRhTWVzc2FnZVN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZSkuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIHRoaXMuX2VtaXQoJ3N0cmVhbUV2ZW50JywgZXZlbnQsIG1lc3NhZ2VTbmFwc2hvdCk7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY29udGVudF9ibG9ja19kZWx0YSc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZVNuYXBzaG90LmNvbnRlbnQuYXQoLTEpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuZGVsdGEudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0X2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgndGV4dCcsIGV2ZW50LmRlbHRhLnRleHQsIGNvbnRlbnQudGV4dCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjaXRhdGlvbnNfZGVsdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCdjaXRhdGlvbicsIGV2ZW50LmRlbHRhLmNpdGF0aW9uLCBjb250ZW50LmNpdGF0aW9ucyA/PyBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnB1dF9qc29uX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3Rvb2xfdXNlJyAmJiBjb250ZW50LmlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnaW5wdXRKc29uJywgZXZlbnQuZGVsdGEucGFydGlhbF9qc29uLCBjb250ZW50LmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ3RoaW5raW5nJywgZXZlbnQuZGVsdGEudGhpbmtpbmcsIGNvbnRlbnQudGhpbmtpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2lnbmF0dXJlX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgZW1pdCBhbnl0aGluZyBzcGVjaWFsIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja05ldmVyKGV2ZW50LmRlbHRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX3N0b3AnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkTWVzc2FnZVBhcmFtKG1lc3NhZ2VTbmFwc2hvdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkTWVzc2FnZShtZXNzYWdlU25hcHNob3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnY29udGVudF9ibG9ja19zdG9wJzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NvbnRlbnRCbG9jaycsIG1lc3NhZ2VTbmFwc2hvdC5jb250ZW50LmF0KC0xKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX3N0YXJ0Jzoge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0JldGFNZXNzYWdlU3RyZWFtX2N1cnJlbnRNZXNzYWdlU25hcHNob3QsIG1lc3NhZ2VTbmFwc2hvdCwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnY29udGVudF9ibG9ja19zdGFydCc6XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX2RlbHRhJzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0sIF9CZXRhTWVzc2FnZVN0cmVhbV9lbmRSZXF1ZXN0ID0gZnVuY3Rpb24gX0JldGFNZXNzYWdlU3RyZWFtX2VuZFJlcXVlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmVuZGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYHN0cmVhbSBoYXMgZW5kZWQsIHRoaXMgc2hvdWxkbid0IGhhcHBlbmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNuYXBzaG90ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmV0YU1lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCwgXCJmXCIpO1xuICAgICAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYHJlcXVlc3QgZW5kZWQgd2l0aG91dCBzZW5kaW5nIGFueSBjaHVua3NgKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LCB1bmRlZmluZWQsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgIH0sIF9CZXRhTWVzc2FnZVN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZSA9IGZ1bmN0aW9uIF9CZXRhTWVzc2FnZVN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZShldmVudCkge1xuICAgICAgICBsZXQgc25hcHNob3QgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZXRhTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LCBcImZcIik7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnbWVzc2FnZV9zdGFydCcpIHtcbiAgICAgICAgICAgIGlmIChzbmFwc2hvdCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcihgVW5leHBlY3RlZCBldmVudCBvcmRlciwgZ290ICR7ZXZlbnQudHlwZX0gYmVmb3JlIHJlY2VpdmluZyBcIm1lc3NhZ2Vfc3RvcFwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYFVuZXhwZWN0ZWQgZXZlbnQgb3JkZXIsIGdvdCAke2V2ZW50LnR5cGV9IGJlZm9yZSBcIm1lc3NhZ2Vfc3RhcnRcImApO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbWVzc2FnZV9zdG9wJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX2RlbHRhJzpcbiAgICAgICAgICAgICAgICBzbmFwc2hvdC5zdG9wX3JlYXNvbiA9IGV2ZW50LmRlbHRhLnN0b3BfcmVhc29uO1xuICAgICAgICAgICAgICAgIHNuYXBzaG90LnN0b3Bfc2VxdWVuY2UgPSBldmVudC5kZWx0YS5zdG9wX3NlcXVlbmNlO1xuICAgICAgICAgICAgICAgIHNuYXBzaG90LnVzYWdlLm91dHB1dF90b2tlbnMgPSBldmVudC51c2FnZS5vdXRwdXRfdG9rZW5zO1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnRfYmxvY2tfc3RhcnQnOlxuICAgICAgICAgICAgICAgIHNuYXBzaG90LmNvbnRlbnQucHVzaChldmVudC5jb250ZW50X2Jsb2NrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICBjYXNlICdjb250ZW50X2Jsb2NrX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90Q29udGVudCA9IHNuYXBzaG90LmNvbnRlbnQuYXQoZXZlbnQuaW5kZXgpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuZGVsdGEudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0X2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBzaG90Q29udGVudD8udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RDb250ZW50LnRleHQgKz0gZXZlbnQuZGVsdGEudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NpdGF0aW9uc19kZWx0YSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbmFwc2hvdENvbnRlbnQ/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90Q29udGVudC5jaXRhdGlvbnMgPz8gKHNuYXBzaG90Q29udGVudC5jaXRhdGlvbnMgPSBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RDb250ZW50LmNpdGF0aW9ucy5wdXNoKGV2ZW50LmRlbHRhLmNpdGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lucHV0X2pzb25fZGVsdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc25hcHNob3RDb250ZW50Py50eXBlID09PSAndG9vbF91c2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSByYXcgSlNPTiBzdHJpbmcgYXMgd2VsbCBzbyB0aGF0IHdlIGNhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlLXBhcnNlIGl0IGZvciBlYWNoIGRlbHRhLCBmb3Igbm93IHdlIGp1c3Qgc3RvcmUgaXQgYXMgYW4gdW50eXBlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG9uIHRoZSBzbmFwc2hvdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uQnVmID0gc25hcHNob3RDb250ZW50W0pTT05fQlVGX1BST1BFUlRZXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uQnVmICs9IGV2ZW50LmRlbHRhLnBhcnRpYWxfanNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc25hcHNob3RDb250ZW50LCBKU09OX0JVRl9QUk9QRVJUWSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToganNvbkJ1ZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uQnVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90Q29udGVudC5pbnB1dCA9IHBhcnRpYWxQYXJzZShqc29uQnVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0aGlua2luZ19kZWx0YSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbmFwc2hvdENvbnRlbnQ/LnR5cGUgPT09ICd0aGlua2luZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdENvbnRlbnQudGhpbmtpbmcgKz0gZXZlbnQuZGVsdGEudGhpbmtpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdzaWduYXR1cmVfZGVsdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc25hcHNob3RDb250ZW50Py50eXBlID09PSAndGhpbmtpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RDb250ZW50LnNpZ25hdHVyZSArPSBldmVudC5kZWx0YS5zaWduYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tOZXZlcihldmVudC5kZWx0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnRfYmxvY2tfc3RvcCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICB9XG4gICAgfSwgU3ltYm9sLmFzeW5jSXRlcmF0b3IpXSgpIHtcbiAgICAgICAgY29uc3QgcHVzaFF1ZXVlID0gW107XG4gICAgICAgIGNvbnN0IHJlYWRRdWV1ZSA9IFtdO1xuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uKCdzdHJlYW1FdmVudCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gcmVhZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlc29sdmUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaFF1ZXVlLnB1c2goZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiByZWFkUXVldWUpIHtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhZFF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdhYm9ydCcsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWFkZXIgb2YgcmVhZFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhZFF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWFkZXIgb2YgcmVhZFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhZFF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHVzaFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZWFkUXVldWUucHVzaCh7IHJlc29sdmUsIHJlamVjdCB9KSkudGhlbigoY2h1bmspID0+IChjaHVuayA/IHsgdmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZSB9IDogeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBwdXNoUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0dXJuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvUmVhZGFibGVTdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJlYW0odGhpc1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0uYmluZCh0aGlzKSwgdGhpcy5jb250cm9sbGVyKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS50b1JlYWRhYmxlU3RyZWFtKCk7XG4gICAgfVxufVxuLy8gdXNlZCB0byBlbnN1cmUgZXhoYXVzdGl2ZSBjYXNlIG1hdGNoaW5nIHdpdGhvdXQgdGhyb3dpbmcgYSBydW50aW1lIGVycm9yXG5mdW5jdGlvbiBjaGVja05ldmVyKHgpIHsgfVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmV0YU1lc3NhZ2VTdHJlYW0ubWpzLm1hcCIsCiAgICAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0ICogYXMgQmF0Y2hlc0FQSSBmcm9tIFwiLi9iYXRjaGVzLm1qc1wiO1xuaW1wb3J0IHsgQmF0Y2hlcywgQmV0YU1lc3NhZ2VCYXRjaGVzUGFnZSwgfSBmcm9tIFwiLi9iYXRjaGVzLm1qc1wiO1xuaW1wb3J0IHsgQmV0YU1lc3NhZ2VTdHJlYW0gfSBmcm9tIFwiLi4vLi4vLi4vbGliL0JldGFNZXNzYWdlU3RyZWFtLm1qc1wiO1xuY29uc3QgREVQUkVDQVRFRF9NT0RFTFMgPSB7XG4gICAgJ2NsYXVkZS0xLjMnOiAnTm92ZW1iZXIgNnRoLCAyMDI0JyxcbiAgICAnY2xhdWRlLTEuMy0xMDBrJzogJ05vdmVtYmVyIDZ0aCwgMjAyNCcsXG4gICAgJ2NsYXVkZS1pbnN0YW50LTEuMSc6ICdOb3ZlbWJlciA2dGgsIDIwMjQnLFxuICAgICdjbGF1ZGUtaW5zdGFudC0xLjEtMTAwayc6ICdOb3ZlbWJlciA2dGgsIDIwMjQnLFxuICAgICdjbGF1ZGUtaW5zdGFudC0xLjInOiAnTm92ZW1iZXIgNnRoLCAyMDI0JyxcbiAgICAnY2xhdWRlLTMtc29ubmV0LTIwMjQwMjI5JzogJ0p1bHkgMjFzdCwgMjAyNScsXG4gICAgJ2NsYXVkZS0yLjEnOiAnSnVseSAyMXN0LCAyMDI1JyxcbiAgICAnY2xhdWRlLTIuMCc6ICdKdWx5IDIxc3QsIDIwMjUnLFxufTtcbmV4cG9ydCBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5iYXRjaGVzID0gbmV3IEJhdGNoZXNBUEkuQmF0Y2hlcyh0aGlzLl9jbGllbnQpO1xuICAgIH1cbiAgICBjcmVhdGUocGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgYmV0YXMsIC4uLmJvZHkgfSA9IHBhcmFtcztcbiAgICAgICAgaWYgKGJvZHkubW9kZWwgaW4gREVQUkVDQVRFRF9NT0RFTFMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIG1vZGVsICcke2JvZHkubW9kZWx9JyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHJlYWNoIGVuZC1vZi1saWZlIG9uICR7REVQUkVDQVRFRF9NT0RFTFNbYm9keS5tb2RlbF19XFxuUGxlYXNlIG1pZ3JhdGUgdG8gYSBuZXdlciBtb2RlbC4gVmlzaXQgaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9yZXNvdXJjZXMvbW9kZWwtZGVwcmVjYXRpb25zIGZvciBtb3JlIGluZm9ybWF0aW9uLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL3YxL21lc3NhZ2VzP2JldGE9dHJ1ZScsIHtcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLl9jbGllbnQuX29wdGlvbnMudGltZW91dCA/PyA2MDAwMDAsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIC4uLihiZXRhcz8udG9TdHJpbmcoKSAhPSBudWxsID8geyAnYW50aHJvcGljLWJldGEnOiBiZXRhcz8udG9TdHJpbmcoKSB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmVhbTogcGFyYW1zLnN0cmVhbSA/PyBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIE1lc3NhZ2Ugc3RyZWFtXG4gICAgICovXG4gICAgc3RyZWFtKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIEJldGFNZXNzYWdlU3RyZWFtLmNyZWF0ZU1lc3NhZ2UodGhpcywgYm9keSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIGEgTWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFRoZSBUb2tlbiBDb3VudCBBUEkgY2FuIGJlIHVzZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiB0b2tlbnMgaW4gYSBNZXNzYWdlLFxuICAgICAqIGluY2x1ZGluZyB0b29scywgaW1hZ2VzLCBhbmQgZG9jdW1lbnRzLCB3aXRob3V0IGNyZWF0aW5nIGl0LlxuICAgICAqXG4gICAgICogTGVhcm4gbW9yZSBhYm91dCB0b2tlbiBjb3VudGluZyBpbiBvdXJcbiAgICAgKiBbdXNlciBndWlkZV0oL2VuL2RvY3MvYnVpbGQtd2l0aC1jbGF1ZGUvdG9rZW4tY291bnRpbmcpXG4gICAgICovXG4gICAgY291bnRUb2tlbnMocGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgYmV0YXMsIC4uLmJvZHkgfSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvdjEvbWVzc2FnZXMvY291bnRfdG9rZW5zP2JldGE9dHJ1ZScsIHtcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdhbnRocm9waWMtYmV0YSc6IFsuLi4oYmV0YXMgPz8gW10pLCAndG9rZW4tY291bnRpbmctMjAyNC0xMS0wMSddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uaGVhZGVycyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbk1lc3NhZ2VzLkJhdGNoZXMgPSBCYXRjaGVzO1xuTWVzc2FnZXMuQmV0YU1lc3NhZ2VCYXRjaGVzUGFnZSA9IEJldGFNZXNzYWdlQmF0Y2hlc1BhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXNzYWdlcy5tanMubWFwIiwKICAgICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgKiBhcyBNb2RlbHNBUEkgZnJvbSBcIi4vbW9kZWxzLm1qc1wiO1xuaW1wb3J0IHsgQmV0YU1vZGVsSW5mb3NQYWdlLCBNb2RlbHMgfSBmcm9tIFwiLi9tb2RlbHMubWpzXCI7XG5pbXBvcnQgKiBhcyBNZXNzYWdlc0FQSSBmcm9tIFwiLi9tZXNzYWdlcy9tZXNzYWdlcy5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VzLCB9IGZyb20gXCIuL21lc3NhZ2VzL21lc3NhZ2VzLm1qc1wiO1xuZXhwb3J0IGNsYXNzIEJldGEgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubW9kZWxzID0gbmV3IE1vZGVsc0FQSS5Nb2RlbHModGhpcy5fY2xpZW50KTtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlc0FQSS5NZXNzYWdlcyh0aGlzLl9jbGllbnQpO1xuICAgIH1cbn1cbkJldGEuTW9kZWxzID0gTW9kZWxzO1xuQmV0YS5CZXRhTW9kZWxJbmZvc1BhZ2UgPSBCZXRhTW9kZWxJbmZvc1BhZ2U7XG5CZXRhLk1lc3NhZ2VzID0gTWVzc2FnZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iZXRhLm1qcy5tYXAiLAogICAgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmV4cG9ydCBjbGFzcyBDb21wbGV0aW9ucyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgICBjcmVhdGUoYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy92MS9jb21wbGV0ZScsIHtcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLl9jbGllbnQuX29wdGlvbnMudGltZW91dCA/PyA2MDAwMDAsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgc3RyZWFtOiBib2R5LnN0cmVhbSA/PyBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGxldGlvbnMubWpzLm1hcCIsCiAgICAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9jb3JlLm1qc1wiO1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gXCIuLi8uLi9wYWdpbmF0aW9uLm1qc1wiO1xuaW1wb3J0IHsgSlNPTkxEZWNvZGVyIH0gZnJvbSBcIi4uLy4uL2ludGVybmFsL2RlY29kZXJzL2pzb25sLm1qc1wiO1xuaW1wb3J0IHsgQW50aHJvcGljRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3IubWpzXCI7XG5leHBvcnQgY2xhc3MgQmF0Y2hlcyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgICAvKipcbiAgICAgKiBTZW5kIGEgYmF0Y2ggb2YgTWVzc2FnZSBjcmVhdGlvbiByZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBNZXNzYWdlIEJhdGNoZXMgQVBJIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3MgbXVsdGlwbGUgTWVzc2FnZXMgQVBJIHJlcXVlc3RzIGF0XG4gICAgICogb25jZS4gT25jZSBhIE1lc3NhZ2UgQmF0Y2ggaXMgY3JlYXRlZCwgaXQgYmVnaW5zIHByb2Nlc3NpbmcgaW1tZWRpYXRlbHkuIEJhdGNoZXNcbiAgICAgKiBjYW4gdGFrZSB1cCB0byAyNCBob3VycyB0byBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIExlYXJuIG1vcmUgYWJvdXQgdGhlIE1lc3NhZ2UgQmF0Y2hlcyBBUEkgaW4gb3VyXG4gICAgICogW3VzZXIgZ3VpZGVdKC9lbi9kb2NzL2J1aWxkLXdpdGgtY2xhdWRlL2JhdGNoLXByb2Nlc3NpbmcpXG4gICAgICovXG4gICAgY3JlYXRlKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvdjEvbWVzc2FnZXMvYmF0Y2hlcycsIHsgYm9keSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBlbmRwb2ludCBpcyBpZGVtcG90ZW50IGFuZCBjYW4gYmUgdXNlZCB0byBwb2xsIGZvciBNZXNzYWdlIEJhdGNoXG4gICAgICogY29tcGxldGlvbi4gVG8gYWNjZXNzIHRoZSByZXN1bHRzIG9mIGEgTWVzc2FnZSBCYXRjaCwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlXG4gICAgICogYHJlc3VsdHNfdXJsYCBmaWVsZCBpbiB0aGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBMZWFybiBtb3JlIGFib3V0IHRoZSBNZXNzYWdlIEJhdGNoZXMgQVBJIGluIG91clxuICAgICAqIFt1c2VyIGd1aWRlXSgvZW4vZG9jcy9idWlsZC13aXRoLWNsYXVkZS9iYXRjaC1wcm9jZXNzaW5nKVxuICAgICAqL1xuICAgIHJldHJpZXZlKG1lc3NhZ2VCYXRjaElkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvdjEvbWVzc2FnZXMvYmF0Y2hlcy8ke21lc3NhZ2VCYXRjaElkfWAsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBsaXN0KHF1ZXJ5ID0ge30sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KCcvdjEvbWVzc2FnZXMvYmF0Y2hlcycsIE1lc3NhZ2VCYXRjaGVzUGFnZSwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIGEgTWVzc2FnZSBCYXRjaC5cbiAgICAgKlxuICAgICAqIE1lc3NhZ2UgQmF0Y2hlcyBjYW4gb25seSBiZSBkZWxldGVkIG9uY2UgdGhleSd2ZSBmaW5pc2hlZCBwcm9jZXNzaW5nLiBJZiB5b3UnZFxuICAgICAqIGxpa2UgdG8gZGVsZXRlIGFuIGluLXByb2dyZXNzIGJhdGNoLCB5b3UgbXVzdCBmaXJzdCBjYW5jZWwgaXQuXG4gICAgICpcbiAgICAgKiBMZWFybiBtb3JlIGFib3V0IHRoZSBNZXNzYWdlIEJhdGNoZXMgQVBJIGluIG91clxuICAgICAqIFt1c2VyIGd1aWRlXSgvZW4vZG9jcy9idWlsZC13aXRoLWNsYXVkZS9iYXRjaC1wcm9jZXNzaW5nKVxuICAgICAqL1xuICAgIGRlbGV0ZShtZXNzYWdlQmF0Y2hJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmRlbGV0ZShgL3YxL21lc3NhZ2VzL2JhdGNoZXMvJHttZXNzYWdlQmF0Y2hJZH1gLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmF0Y2hlcyBtYXkgYmUgY2FuY2VsZWQgYW55IHRpbWUgYmVmb3JlIHByb2Nlc3NpbmcgZW5kcy4gT25jZSBjYW5jZWxsYXRpb24gaXNcbiAgICAgKiBpbml0aWF0ZWQsIHRoZSBiYXRjaCBlbnRlcnMgYSBgY2FuY2VsaW5nYCBzdGF0ZSwgYXQgd2hpY2ggdGltZSB0aGUgc3lzdGVtIG1heVxuICAgICAqIGNvbXBsZXRlIGFueSBpbi1wcm9ncmVzcywgbm9uLWludGVycnVwdGlibGUgcmVxdWVzdHMgYmVmb3JlIGZpbmFsaXppbmdcbiAgICAgKiBjYW5jZWxsYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNhbmNlbGVkIHJlcXVlc3RzIGlzIHNwZWNpZmllZCBpbiBgcmVxdWVzdF9jb3VudHNgLiBUbyBkZXRlcm1pbmVcbiAgICAgKiB3aGljaCByZXF1ZXN0cyB3ZXJlIGNhbmNlbGVkLCBjaGVjayB0aGUgaW5kaXZpZHVhbCByZXN1bHRzIHdpdGhpbiB0aGUgYmF0Y2guXG4gICAgICogTm90ZSB0aGF0IGNhbmNlbGxhdGlvbiBtYXkgbm90IHJlc3VsdCBpbiBhbnkgY2FuY2VsZWQgcmVxdWVzdHMgaWYgdGhleSB3ZXJlXG4gICAgICogbm9uLWludGVycnVwdGlibGUuXG4gICAgICpcbiAgICAgKiBMZWFybiBtb3JlIGFib3V0IHRoZSBNZXNzYWdlIEJhdGNoZXMgQVBJIGluIG91clxuICAgICAqIFt1c2VyIGd1aWRlXSgvZW4vZG9jcy9idWlsZC13aXRoLWNsYXVkZS9iYXRjaC1wcm9jZXNzaW5nKVxuICAgICAqL1xuICAgIGNhbmNlbChtZXNzYWdlQmF0Y2hJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoYC92MS9tZXNzYWdlcy9iYXRjaGVzLyR7bWVzc2FnZUJhdGNoSWR9L2NhbmNlbGAsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJlYW1zIHRoZSByZXN1bHRzIG9mIGEgTWVzc2FnZSBCYXRjaCBhcyBhIGAuanNvbmxgIGZpbGUuXG4gICAgICpcbiAgICAgKiBFYWNoIGxpbmUgaW4gdGhlIGZpbGUgaXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUgcmVxdWVzdFxuICAgICAqIGluIHRoZSBNZXNzYWdlIEJhdGNoLiBSZXN1bHRzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUgc2FtZSBvcmRlciBhc1xuICAgICAqIHJlcXVlc3RzLiBVc2UgdGhlIGBjdXN0b21faWRgIGZpZWxkIHRvIG1hdGNoIHJlc3VsdHMgdG8gcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBMZWFybiBtb3JlIGFib3V0IHRoZSBNZXNzYWdlIEJhdGNoZXMgQVBJIGluIG91clxuICAgICAqIFt1c2VyIGd1aWRlXSgvZW4vZG9jcy9idWlsZC13aXRoLWNsYXVkZS9iYXRjaC1wcm9jZXNzaW5nKVxuICAgICAqL1xuICAgIGFzeW5jIHJlc3VsdHMobWVzc2FnZUJhdGNoSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBhd2FpdCB0aGlzLnJldHJpZXZlKG1lc3NhZ2VCYXRjaElkKTtcbiAgICAgICAgaWYgKCFiYXRjaC5yZXN1bHRzX3VybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBObyBiYXRjaCBcXGByZXN1bHRzX3VybFxcYDsgSGFzIGl0IGZpbmlzaGVkIHByb2Nlc3Npbmc/ICR7YmF0Y2gucHJvY2Vzc2luZ19zdGF0dXN9IC0gJHtiYXRjaC5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50XG4gICAgICAgICAgICAuZ2V0KGJhdGNoLnJlc3VsdHNfdXJsLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2JpbmFyeScsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uaGVhZGVycyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfX2JpbmFyeVJlc3BvbnNlOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLl90aGVuVW53cmFwKChfLCBwcm9wcykgPT4gSlNPTkxEZWNvZGVyLmZyb21SZXNwb25zZShwcm9wcy5yZXNwb25zZSwgcHJvcHMuY29udHJvbGxlcikpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNZXNzYWdlQmF0Y2hlc1BhZ2UgZXh0ZW5kcyBQYWdlIHtcbn1cbkJhdGNoZXMuTWVzc2FnZUJhdGNoZXNQYWdlID0gTWVzc2FnZUJhdGNoZXNQYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmF0Y2hlcy5tanMubWFwIiwKICAgICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX01lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBfTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LCBfTWVzc2FnZVN0cmVhbV9jb25uZWN0ZWRQcm9taXNlLCBfTWVzc2FnZVN0cmVhbV9yZXNvbHZlQ29ubmVjdGVkUHJvbWlzZSwgX01lc3NhZ2VTdHJlYW1fcmVqZWN0Q29ubmVjdGVkUHJvbWlzZSwgX01lc3NhZ2VTdHJlYW1fZW5kUHJvbWlzZSwgX01lc3NhZ2VTdHJlYW1fcmVzb2x2ZUVuZFByb21pc2UsIF9NZXNzYWdlU3RyZWFtX3JlamVjdEVuZFByb21pc2UsIF9NZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgX01lc3NhZ2VTdHJlYW1fZW5kZWQsIF9NZXNzYWdlU3RyZWFtX2Vycm9yZWQsIF9NZXNzYWdlU3RyZWFtX2Fib3J0ZWQsIF9NZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQsIF9NZXNzYWdlU3RyZWFtX3Jlc3BvbnNlLCBfTWVzc2FnZVN0cmVhbV9yZXF1ZXN0X2lkLCBfTWVzc2FnZVN0cmVhbV9nZXRGaW5hbE1lc3NhZ2UsIF9NZXNzYWdlU3RyZWFtX2dldEZpbmFsVGV4dCwgX01lc3NhZ2VTdHJlYW1faGFuZGxlRXJyb3IsIF9NZXNzYWdlU3RyZWFtX2JlZ2luUmVxdWVzdCwgX01lc3NhZ2VTdHJlYW1fYWRkU3RyZWFtRXZlbnQsIF9NZXNzYWdlU3RyZWFtX2VuZFJlcXVlc3QsIF9NZXNzYWdlU3RyZWFtX2FjY3VtdWxhdGVNZXNzYWdlO1xuaW1wb3J0IHsgQW50aHJvcGljRXJyb3IsIEFQSVVzZXJBYm9ydEVycm9yIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvZXJyb3InO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvc3RyZWFtaW5nJztcbmltcG9ydCB7IHBhcnRpYWxQYXJzZSB9IGZyb20gXCIuLi9fdmVuZG9yL3BhcnRpYWwtanNvbi1wYXJzZXIvcGFyc2VyLm1qc1wiO1xuY29uc3QgSlNPTl9CVUZfUFJPUEVSVFkgPSAnX19qc29uX2J1Zic7XG5leHBvcnQgY2xhc3MgTWVzc2FnZVN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yZWNlaXZlZE1lc3NhZ2VzID0gW107XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX2N1cnJlbnRNZXNzYWdlU25hcHNob3Quc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgX01lc3NhZ2VTdHJlYW1fY29ubmVjdGVkUHJvbWlzZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX01lc3NhZ2VTdHJlYW1fcmVzb2x2ZUNvbm5lY3RlZFByb21pc2Uuc2V0KHRoaXMsICgpID0+IHsgfSk7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX3JlamVjdENvbm5lY3RlZFByb21pc2Uuc2V0KHRoaXMsICgpID0+IHsgfSk7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX2VuZFByb21pc2Uuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX3Jlc29sdmVFbmRQcm9taXNlLnNldCh0aGlzLCAoKSA9PiB7IH0pO1xuICAgICAgICBfTWVzc2FnZVN0cmVhbV9yZWplY3RFbmRQcm9taXNlLnNldCh0aGlzLCAoKSA9PiB7IH0pO1xuICAgICAgICBfTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMuc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX01lc3NhZ2VTdHJlYW1fZW5kZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX01lc3NhZ2VTdHJlYW1fZXJyb3JlZC5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfTWVzc2FnZVN0cmVhbV9hYm9ydGVkLnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX01lc3NhZ2VTdHJlYW1fcmVzcG9uc2Uuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX3JlcXVlc3RfaWQuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9NZXNzYWdlU3RyZWFtX2hhbmRsZUVycm9yLnNldCh0aGlzLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fZXJyb3JlZCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFQSVVzZXJBYm9ydEVycm9yKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9hYm9ydGVkLCB0cnVlLCBcImZcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXQoJ2Fib3J0JywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQW50aHJvcGljRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFudGhyb3BpY0Vycm9yID0gbmV3IEFudGhyb3BpY0Vycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBhbnRocm9waWNFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbWl0KCdlcnJvcicsIGFudGhyb3BpY0Vycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbWl0KCdlcnJvcicsIG5ldyBBbnRocm9waWNFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2Nvbm5lY3RlZFByb21pc2UsIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fcmVzb2x2ZUNvbm5lY3RlZFByb21pc2UsIHJlc29sdmUsIFwiZlwiKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fcmVqZWN0Q29ubmVjdGVkUHJvbWlzZSwgcmVqZWN0LCBcImZcIik7XG4gICAgICAgIH0pLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fZW5kUHJvbWlzZSwgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9yZXNvbHZlRW5kUHJvbWlzZSwgcmVzb2x2ZSwgXCJmXCIpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9yZWplY3RFbmRQcm9taXNlLCByZWplY3QsIFwiZlwiKTtcbiAgICAgICAgfSksIFwiZlwiKTtcbiAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZXNlIHByb21pc2VzIGNhdXNlIHVuaGFuZGxlZCByZWplY3Rpb24gZXJyb3JzLlxuICAgICAgICAvLyB3ZSB3aWxsIG1hbnVhbGx5IGNhdXNlIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gZXJyb3IgbGF0ZXJcbiAgICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzbid0IHJlZ2lzdGVyZWQgYW55IGVycm9yIGxpc3RlbmVyIG9yIGNhbGxlZFxuICAgICAgICAvLyBhbnkgcHJvbWlzZS1yZXR1cm5pbmcgbWV0aG9kLlxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2Nvbm5lY3RlZFByb21pc2UsIFwiZlwiKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2VuZFByb21pc2UsIFwiZlwiKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgIH1cbiAgICBnZXQgcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX3Jlc3BvbnNlLCBcImZcIik7XG4gICAgfVxuICAgIGdldCByZXF1ZXN0X2lkKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9yZXF1ZXN0X2lkLCBcImZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBNZXNzYWdlU3RyZWFtYCBkYXRhLCB0aGUgcmF3IGBSZXNwb25zZWAgaW5zdGFuY2UgYW5kIHRoZSBJRCBvZiB0aGUgcmVxdWVzdCxcbiAgICAgKiByZXR1cm5lZCB2aWUgdGhlIGByZXF1ZXN0LWlkYCBoZWFkZXIgd2hpY2ggaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcmVxdWVzdHMgYW5kIHJlc3BvcnRpbmdcbiAgICAgKiBpc3N1ZXMgdG8gQW50aHJvcGljLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYEFQSVByb21pc2Uud2l0aFJlc3BvbnNlKClgIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IGNyZWF0ZWQgdGhlIHN0cmVhbSB1c2luZyBgTWVzc2FnZVN0cmVhbS5mcm9tUmVhZGFibGVTdHJlYW1gXG4gICAgICogYXMgbm8gYFJlc3BvbnNlYCBpcyBhdmFpbGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgd2l0aFJlc3BvbnNlKCkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY29ubmVjdGVkUHJvbWlzZSwgXCJmXCIpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIGEgYFJlc3BvbnNlYCBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogdGhpcyxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgcmVxdWVzdF9pZDogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3JlcXVlc3QtaWQnKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZW5kZWQgZm9yIHVzZSBvbiB0aGUgZnJvbnRlbmQsIGNvbnN1bWluZyBhIHN0cmVhbSBwcm9kdWNlZCB3aXRoXG4gICAgICogYC50b1JlYWRhYmxlU3RyZWFtKClgIG9uIHRoZSBiYWNrZW5kLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IG1lc3NhZ2VzIHNlbnQgdG8gdGhlIG1vZGVsIGRvIG5vdCBhcHBlYXIgaW4gYC5vbignbWVzc2FnZScpYFxuICAgICAqIGluIHRoaXMgY29udGV4dC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbVJlYWRhYmxlU3RyZWFtKHN0cmVhbSkge1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgTWVzc2FnZVN0cmVhbSgpO1xuICAgICAgICBydW5uZXIuX3J1bigoKSA9PiBydW5uZXIuX2Zyb21SZWFkYWJsZVN0cmVhbShzdHJlYW0pKTtcbiAgICAgICAgcmV0dXJuIHJ1bm5lcjtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZU1lc3NhZ2UobWVzc2FnZXMsIHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgTWVzc2FnZVN0cmVhbSgpO1xuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcGFyYW1zLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICBydW5uZXIuX2FkZE1lc3NhZ2VQYXJhbShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBydW5uZXIuX3J1bigoKSA9PiBydW5uZXIuX2NyZWF0ZU1lc3NhZ2UobWVzc2FnZXMsIHsgLi4ucGFyYW1zLCBzdHJlYW06IHRydWUgfSwgeyAuLi5vcHRpb25zLCBoZWFkZXJzOiB7IC4uLm9wdGlvbnM/LmhlYWRlcnMsICdYLVN0YWlubGVzcy1IZWxwZXItTWV0aG9kJzogJ3N0cmVhbScgfSB9KSk7XG4gICAgICAgIHJldHVybiBydW5uZXI7XG4gICAgfVxuICAgIF9ydW4oZXhlY3V0b3IpIHtcbiAgICAgICAgZXhlY3V0b3IoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRGaW5hbCgpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnZW5kJyk7XG4gICAgICAgIH0sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1faGFuZGxlRXJyb3IsIFwiZlwiKSk7XG4gICAgfVxuICAgIF9hZGRNZXNzYWdlUGFyYW0obWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICAgIF9hZGRNZXNzYWdlKG1lc3NhZ2UsIGVtaXQgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMucmVjZWl2ZWRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICBpZiAoZW1pdCkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9jcmVhdGVNZXNzYWdlKG1lc3NhZ2VzLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsO1xuICAgICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfTWVzc2FnZVN0cmVhbV9iZWdpblJlcXVlc3QpLmNhbGwodGhpcyk7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UsIGRhdGE6IHN0cmVhbSB9ID0gYXdhaXQgbWVzc2FnZXNcbiAgICAgICAgICAgIC5jcmVhdGUoeyAuLi5wYXJhbXMsIHN0cmVhbTogdHJ1ZSB9LCB7IC4uLm9wdGlvbnMsIHNpZ25hbDogdGhpcy5jb250cm9sbGVyLnNpZ25hbCB9KVxuICAgICAgICAgICAgLndpdGhSZXNwb25zZSgpO1xuICAgICAgICB0aGlzLl9jb25uZWN0ZWQocmVzcG9uc2UpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfTWVzc2FnZVN0cmVhbV9hZGRTdHJlYW1FdmVudCkuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5jb250cm9sbGVyLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfTWVzc2FnZVN0cmVhbV9lbmRSZXF1ZXN0KS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBfY29ubmVjdGVkKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICh0aGlzLmVuZGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX3Jlc3BvbnNlLCByZXNwb25zZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX3JlcXVlc3RfaWQsIHJlc3BvbnNlPy5oZWFkZXJzLmdldCgncmVxdWVzdC1pZCcpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fcmVzb2x2ZUNvbm5lY3RlZFByb21pc2UsIFwiZlwiKS5jYWxsKHRoaXMsIHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5fZW1pdCgnY29ubmVjdCcpO1xuICAgIH1cbiAgICBnZXQgZW5kZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2VuZGVkLCBcImZcIik7XG4gICAgfVxuICAgIGdldCBlcnJvcmVkKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9lcnJvcmVkLCBcImZcIik7XG4gICAgfVxuICAgIGdldCBhYm9ydGVkKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9hYm9ydGVkLCBcImZcIik7XG4gICAgfVxuICAgIGFib3J0KCkge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdGVuZXJzIGFycmF5IGZvciB0aGUgZXZlbnQuXG4gICAgICogTm8gY2hlY2tzIGFyZSBtYWRlIHRvIHNlZSBpZiB0aGUgbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZC4gTXVsdGlwbGUgY2FsbHMgcGFzc2luZ1xuICAgICAqIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGV2ZW50IGFuZCBsaXN0ZW5lciB3aWxsIHJlc3VsdCBpbiB0aGUgbGlzdGVuZXIgYmVpbmcgYWRkZWQsIGFuZFxuICAgICAqIGNhbGxlZCwgbXVsdGlwbGUgdGltZXMuXG4gICAgICogQHJldHVybnMgdGhpcyBNZXNzYWdlU3RyZWFtLCBzbyB0aGF0IGNhbGxzIGNhbiBiZSBjaGFpbmVkXG4gICAgICovXG4gICAgb24oZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fbGlzdGVuZXJzLCBcImZcIilbZXZlbnRdIHx8IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgXCJmXCIpW2V2ZW50XSA9IFtdKTtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goeyBsaXN0ZW5lciB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBsaXN0ZW5lciBmcm9tIHRoZSBsaXN0ZW5lciBhcnJheSBmb3IgdGhlIGV2ZW50LlxuICAgICAqIG9mZigpIHdpbGwgcmVtb3ZlLCBhdCBtb3N0LCBvbmUgaW5zdGFuY2Ugb2YgYSBsaXN0ZW5lciBmcm9tIHRoZSBsaXN0ZW5lciBhcnJheS4gSWYgYW55IHNpbmdsZVxuICAgICAqIGxpc3RlbmVyIGhhcyBiZWVuIGFkZGVkIG11bHRpcGxlIHRpbWVzIHRvIHRoZSBsaXN0ZW5lciBhcnJheSBmb3IgdGhlIHNwZWNpZmllZCBldmVudCwgdGhlblxuICAgICAqIG9mZigpIG11c3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJlbW92ZSBlYWNoIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHRoaXMgTWVzc2FnZVN0cmVhbSwgc28gdGhhdCBjYWxscyBjYW4gYmUgY2hhaW5lZFxuICAgICAqL1xuICAgIG9mZihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMsIFwiZlwiKVtldmVudF07XG4gICAgICAgIGlmICghbGlzdGVuZXJzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmZpbmRJbmRleCgobCkgPT4gbC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMClcbiAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIG9uZS10aW1lIGxpc3RlbmVyIGZ1bmN0aW9uIGZvciB0aGUgZXZlbnQuIFRoZSBuZXh0IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCxcbiAgICAgKiB0aGlzIGxpc3RlbmVyIGlzIHJlbW92ZWQgYW5kIHRoZW4gaW52b2tlZC5cbiAgICAgKiBAcmV0dXJucyB0aGlzIE1lc3NhZ2VTdHJlYW0sIHNvIHRoYXQgY2FsbHMgY2FuIGJlIGNoYWluZWRcbiAgICAgKi9cbiAgICBvbmNlKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgXCJmXCIpW2V2ZW50XSB8fCAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMsIFwiZlwiKVtldmVudF0gPSBbXSk7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIG9uY2U6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gYC5vbmNlKClgLCBidXQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgbmV4dCB0aW1lXG4gICAgICogdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCwgaW5zdGVhZCBvZiBjYWxsaW5nIGEgbGlzdGVuZXIgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIG5leHQgdGltZSBnaXZlbiBldmVudCBpcyB0cmlnZ2VyZWQsXG4gICAgICogb3IgcmVqZWN0cyBpZiBhbiBlcnJvciBpcyBlbWl0dGVkLiAgKElmIHlvdSByZXF1ZXN0IHRoZSAnZXJyb3InIGV2ZW50LFxuICAgICAqIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXJyb3IpLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHN0cmVhbS5lbWl0dGVkKCdtZXNzYWdlJykgLy8gcmVqZWN0cyBpZiB0aGUgc3RyZWFtIGVycm9yc1xuICAgICAqL1xuICAgIGVtaXR0ZWQoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY2F0Y2hpbmdQcm9taXNlQ3JlYXRlZCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ICE9PSAnZXJyb3InKVxuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgICAgdGhpcy5vbmNlKGV2ZW50LCByZXNvbHZlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRvbmUoKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY2F0Y2hpbmdQcm9taXNlQ3JlYXRlZCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2VuZFByb21pc2UsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LCBcImZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRoZSBmaW5hbCBhc3Npc3RhbnQgTWVzc2FnZSByZXNwb25zZSxcbiAgICAgKiBvciByZWplY3RzIGlmIGFuIGVycm9yIG9jY3VycmVkIG9yIHRoZSBzdHJlYW0gZW5kZWQgcHJlbWF0dXJlbHkgd2l0aG91dCBwcm9kdWNpbmcgYSBNZXNzYWdlLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmFsTWVzc2FnZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kb25lKCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9NZXNzYWdlU3RyZWFtX2dldEZpbmFsTWVzc2FnZSkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdGhlIGZpbmFsIGFzc2lzdGFudCBNZXNzYWdlJ3MgdGV4dCByZXNwb25zZSwgY29uY2F0ZW5hdGVkXG4gICAgICogdG9nZXRoZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdGV4dCBibG9ja3MuXG4gICAgICogUmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgc3RyZWFtIGVuZGVkIHByZW1hdHVyZWx5IHdpdGhvdXQgcHJvZHVjaW5nIGEgTWVzc2FnZS5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5hbFRleHQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZG9uZSgpO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfTWVzc2FnZVN0cmVhbV9nZXRGaW5hbFRleHQpLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIF9lbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBlbWl0IGFueSBNZXNzYWdlU3RyZWFtRXZlbnRzIGFmdGVyIGVuZFxuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9lbmRlZCwgXCJmXCIpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZXZlbnQgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2VuZGVkLCB0cnVlLCBcImZcIik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX3Jlc29sdmVFbmRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2xpc3RlbmVycywgXCJmXCIpW2V2ZW50XTtcbiAgICAgICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9saXN0ZW5lcnMsIFwiZlwiKVtldmVudF0gPSBsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiAhbC5vbmNlKTtcbiAgICAgICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKCh7IGxpc3RlbmVyIH0pID0+IGxpc3RlbmVyKC4uLmFyZ3MpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgPT09ICdhYm9ydCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXJnc1swXTtcbiAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9jYXRjaGluZ1Byb21pc2VDcmVhdGVkLCBcImZcIikgJiYgIWxpc3RlbmVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX3JlamVjdEVuZFByb21pc2UsIFwiZlwiKS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgLy8gTk9URTogX2VtaXQoJ2Vycm9yJywgZXJyb3IpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tICNoYW5kbGVFcnJvcigpLlxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhcmdzWzBdO1xuICAgICAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQsIFwiZlwiKSAmJiAhbGlzdGVuZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gaWYgdGhlIHVzZXIgaGFzbid0IHJlZ2lzdGVyZWQgYW55IGVycm9yIGhhbmRsZXJzLlxuICAgICAgICAgICAgICAgIC8vIElmIHlvdSBhcmUgc2VlaW5nIHN0YWNrIHRyYWNlcyBoZXJlLCBtYWtlIHN1cmUgdG8gaGFuZGxlIGVycm9ycyB2aWEgZWl0aGVyOlxuICAgICAgICAgICAgICAgIC8vIC0gcnVubmVyLm9uKCdlcnJvcicsICgpID0+IC4uLilcbiAgICAgICAgICAgICAgICAvLyAtIGF3YWl0IHJ1bm5lci5kb25lKClcbiAgICAgICAgICAgICAgICAvLyAtIGF3YWl0IHJ1bm5lci5maW5hbC4uLigpXG4gICAgICAgICAgICAgICAgLy8gLSBldGMuXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9yZWplY3RDb25uZWN0ZWRQcm9taXNlLCBcImZcIikuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX3JlamVjdEVuZFByb21pc2UsIFwiZlwiKS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9lbWl0RmluYWwoKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IHRoaXMucmVjZWl2ZWRNZXNzYWdlcy5hdCgtMSk7XG4gICAgICAgIGlmIChmaW5hbE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2ZpbmFsTWVzc2FnZScsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBcIm1cIiwgX01lc3NhZ2VTdHJlYW1fZ2V0RmluYWxNZXNzYWdlKS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfZnJvbVJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnM/LnNpZ25hbDtcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpcy5jb250cm9sbGVyLmFib3J0KCkpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1faW5zdGFuY2VzLCBcIm1cIiwgX01lc3NhZ2VTdHJlYW1fYmVnaW5SZXF1ZXN0KS5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLl9jb25uZWN0ZWQobnVsbCk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IFN0cmVhbS5mcm9tUmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0sIHRoaXMuY29udHJvbGxlcik7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9NZXNzYWdlU3RyZWFtX2FkZFN0cmVhbUV2ZW50KS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLmNvbnRyb2xsZXIuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9NZXNzYWdlU3RyZWFtX2luc3RhbmNlcywgXCJtXCIsIF9NZXNzYWdlU3RyZWFtX2VuZFJlcXVlc3QpLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIFsoX01lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCA9IG5ldyBXZWFrTWFwKCksIF9NZXNzYWdlU3RyZWFtX2Nvbm5lY3RlZFByb21pc2UgPSBuZXcgV2Vha01hcCgpLCBfTWVzc2FnZVN0cmVhbV9yZXNvbHZlQ29ubmVjdGVkUHJvbWlzZSA9IG5ldyBXZWFrTWFwKCksIF9NZXNzYWdlU3RyZWFtX3JlamVjdENvbm5lY3RlZFByb21pc2UgPSBuZXcgV2Vha01hcCgpLCBfTWVzc2FnZVN0cmVhbV9lbmRQcm9taXNlID0gbmV3IFdlYWtNYXAoKSwgX01lc3NhZ2VTdHJlYW1fcmVzb2x2ZUVuZFByb21pc2UgPSBuZXcgV2Vha01hcCgpLCBfTWVzc2FnZVN0cmVhbV9yZWplY3RFbmRQcm9taXNlID0gbmV3IFdlYWtNYXAoKSwgX01lc3NhZ2VTdHJlYW1fbGlzdGVuZXJzID0gbmV3IFdlYWtNYXAoKSwgX01lc3NhZ2VTdHJlYW1fZW5kZWQgPSBuZXcgV2Vha01hcCgpLCBfTWVzc2FnZVN0cmVhbV9lcnJvcmVkID0gbmV3IFdlYWtNYXAoKSwgX01lc3NhZ2VTdHJlYW1fYWJvcnRlZCA9IG5ldyBXZWFrTWFwKCksIF9NZXNzYWdlU3RyZWFtX2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQgPSBuZXcgV2Vha01hcCgpLCBfTWVzc2FnZVN0cmVhbV9yZXNwb25zZSA9IG5ldyBXZWFrTWFwKCksIF9NZXNzYWdlU3RyZWFtX3JlcXVlc3RfaWQgPSBuZXcgV2Vha01hcCgpLCBfTWVzc2FnZVN0cmVhbV9oYW5kbGVFcnJvciA9IG5ldyBXZWFrTWFwKCksIF9NZXNzYWdlU3RyZWFtX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9NZXNzYWdlU3RyZWFtX2dldEZpbmFsTWVzc2FnZSA9IGZ1bmN0aW9uIF9NZXNzYWdlU3RyZWFtX2dldEZpbmFsTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVjZWl2ZWRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcignc3RyZWFtIGVuZGVkIHdpdGhvdXQgcHJvZHVjaW5nIGEgTWVzc2FnZSB3aXRoIHJvbGU9YXNzaXN0YW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWl2ZWRNZXNzYWdlcy5hdCgtMSk7XG4gICAgfSwgX01lc3NhZ2VTdHJlYW1fZ2V0RmluYWxUZXh0ID0gZnVuY3Rpb24gX01lc3NhZ2VTdHJlYW1fZ2V0RmluYWxUZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5yZWNlaXZlZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKCdzdHJlYW0gZW5kZWQgd2l0aG91dCBwcm9kdWNpbmcgYSBNZXNzYWdlIHdpdGggcm9sZT1hc3Npc3RhbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0QmxvY2tzID0gdGhpcy5yZWNlaXZlZE1lc3NhZ2VzXG4gICAgICAgICAgICAuYXQoLTEpXG4gICAgICAgICAgICAuY29udGVudC5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay50eXBlID09PSAndGV4dCcpXG4gICAgICAgICAgICAubWFwKChibG9jaykgPT4gYmxvY2sudGV4dCk7XG4gICAgICAgIGlmICh0ZXh0QmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKCdzdHJlYW0gZW5kZWQgd2l0aG91dCBwcm9kdWNpbmcgYSBjb250ZW50IGJsb2NrIHdpdGggdHlwZT10ZXh0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHRCbG9ja3Muam9pbignICcpO1xuICAgIH0sIF9NZXNzYWdlU3RyZWFtX2JlZ2luUmVxdWVzdCA9IGZ1bmN0aW9uIF9NZXNzYWdlU3RyZWFtX2JlZ2luUmVxdWVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCwgdW5kZWZpbmVkLCBcImZcIik7XG4gICAgfSwgX01lc3NhZ2VTdHJlYW1fYWRkU3RyZWFtRXZlbnQgPSBmdW5jdGlvbiBfTWVzc2FnZVN0cmVhbV9hZGRTdHJlYW1FdmVudChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5lbmRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWVzc2FnZVNuYXBzaG90ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9pbnN0YW5jZXMsIFwibVwiLCBfTWVzc2FnZVN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZSkuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIHRoaXMuX2VtaXQoJ3N0cmVhbUV2ZW50JywgZXZlbnQsIG1lc3NhZ2VTbmFwc2hvdCk7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY29udGVudF9ibG9ja19kZWx0YSc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZVNuYXBzaG90LmNvbnRlbnQuYXQoLTEpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuZGVsdGEudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0X2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgndGV4dCcsIGV2ZW50LmRlbHRhLnRleHQsIGNvbnRlbnQudGV4dCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjaXRhdGlvbnNfZGVsdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCdjaXRhdGlvbicsIGV2ZW50LmRlbHRhLmNpdGF0aW9uLCBjb250ZW50LmNpdGF0aW9ucyA/PyBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnB1dF9qc29uX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3Rvb2xfdXNlJyAmJiBjb250ZW50LmlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnaW5wdXRKc29uJywgZXZlbnQuZGVsdGEucGFydGlhbF9qc29uLCBjb250ZW50LmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ3RoaW5raW5nJywgZXZlbnQuZGVsdGEudGhpbmtpbmcsIGNvbnRlbnQudGhpbmtpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2lnbmF0dXJlX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgZW1pdCBhbnl0aGluZyBzcGVjaWFsIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja05ldmVyKGV2ZW50LmRlbHRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX3N0b3AnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkTWVzc2FnZVBhcmFtKG1lc3NhZ2VTbmFwc2hvdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkTWVzc2FnZShtZXNzYWdlU25hcHNob3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnY29udGVudF9ibG9ja19zdG9wJzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NvbnRlbnRCbG9jaycsIG1lc3NhZ2VTbmFwc2hvdC5jb250ZW50LmF0KC0xKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX3N0YXJ0Jzoge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCwgbWVzc2FnZVNuYXBzaG90LCBcImZcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdjb250ZW50X2Jsb2NrX3N0YXJ0JzpcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2VfZGVsdGEnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSwgX01lc3NhZ2VTdHJlYW1fZW5kUmVxdWVzdCA9IGZ1bmN0aW9uIF9NZXNzYWdlU3RyZWFtX2VuZFJlcXVlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmVuZGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYHN0cmVhbSBoYXMgZW5kZWQsIHRoaXMgc2hvdWxkbid0IGhhcHBlbmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNuYXBzaG90ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTWVzc2FnZVN0cmVhbV9jdXJyZW50TWVzc2FnZVNuYXBzaG90LCBcImZcIik7XG4gICAgICAgIGlmICghc25hcHNob3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbnRocm9waWNFcnJvcihgcmVxdWVzdCBlbmRlZCB3aXRob3V0IHNlbmRpbmcgYW55IGNodW5rc2ApO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCwgdW5kZWZpbmVkLCBcImZcIik7XG4gICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICB9LCBfTWVzc2FnZVN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZSA9IGZ1bmN0aW9uIF9NZXNzYWdlU3RyZWFtX2FjY3VtdWxhdGVNZXNzYWdlKGV2ZW50KSB7XG4gICAgICAgIGxldCBzbmFwc2hvdCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01lc3NhZ2VTdHJlYW1fY3VycmVudE1lc3NhZ2VTbmFwc2hvdCwgXCJmXCIpO1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ21lc3NhZ2Vfc3RhcnQnKSB7XG4gICAgICAgICAgICBpZiAoc25hcHNob3QpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQW50aHJvcGljRXJyb3IoYFVuZXhwZWN0ZWQgZXZlbnQgb3JkZXIsIGdvdCAke2V2ZW50LnR5cGV9IGJlZm9yZSByZWNlaXZpbmcgXCJtZXNzYWdlX3N0b3BcImApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzbmFwc2hvdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBVbmV4cGVjdGVkIGV2ZW50IG9yZGVyLCBnb3QgJHtldmVudC50eXBlfSBiZWZvcmUgXCJtZXNzYWdlX3N0YXJ0XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2Vfc3RvcCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgY2FzZSAnbWVzc2FnZV9kZWx0YSc6XG4gICAgICAgICAgICAgICAgc25hcHNob3Quc3RvcF9yZWFzb24gPSBldmVudC5kZWx0YS5zdG9wX3JlYXNvbjtcbiAgICAgICAgICAgICAgICBzbmFwc2hvdC5zdG9wX3NlcXVlbmNlID0gZXZlbnQuZGVsdGEuc3RvcF9zZXF1ZW5jZTtcbiAgICAgICAgICAgICAgICBzbmFwc2hvdC51c2FnZS5vdXRwdXRfdG9rZW5zID0gZXZlbnQudXNhZ2Uub3V0cHV0X3Rva2VucztcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICBjYXNlICdjb250ZW50X2Jsb2NrX3N0YXJ0JzpcbiAgICAgICAgICAgICAgICBzbmFwc2hvdC5jb250ZW50LnB1c2goZXZlbnQuY29udGVudF9ibG9jayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgY2FzZSAnY29udGVudF9ibG9ja19kZWx0YSc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdENvbnRlbnQgPSBzbmFwc2hvdC5jb250ZW50LmF0KGV2ZW50LmluZGV4KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmRlbHRhLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dF9kZWx0YSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbmFwc2hvdENvbnRlbnQ/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90Q29udGVudC50ZXh0ICs9IGV2ZW50LmRlbHRhLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjaXRhdGlvbnNfZGVsdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc25hcHNob3RDb250ZW50Py50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdENvbnRlbnQuY2l0YXRpb25zID8/IChzbmFwc2hvdENvbnRlbnQuY2l0YXRpb25zID0gW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90Q29udGVudC5jaXRhdGlvbnMucHVzaChldmVudC5kZWx0YS5jaXRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnB1dF9qc29uX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBzaG90Q29udGVudD8udHlwZSA9PT0gJ3Rvb2xfdXNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmF3IEpTT04gc3RyaW5nIGFzIHdlbGwgc28gdGhhdCB3ZSBjYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1wYXJzZSBpdCBmb3IgZWFjaCBkZWx0YSwgZm9yIG5vdyB3ZSBqdXN0IHN0b3JlIGl0IGFzIGFuIHVudHlwZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBvbiB0aGUgc25hcHNob3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbkJ1ZiA9IHNuYXBzaG90Q29udGVudFtKU09OX0JVRl9QUk9QRVJUWV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbkJ1ZiArPSBldmVudC5kZWx0YS5wYXJ0aWFsX2pzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNuYXBzaG90Q29udGVudCwgSlNPTl9CVUZfUFJPUEVSVFksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGpzb25CdWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbkJ1Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdENvbnRlbnQuaW5wdXQgPSBwYXJ0aWFsUGFyc2UoanNvbkJ1Zik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGhpbmtpbmdfZGVsdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc25hcHNob3RDb250ZW50Py50eXBlID09PSAndGhpbmtpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RDb250ZW50LnRoaW5raW5nICs9IGV2ZW50LmRlbHRhLnRoaW5raW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2lnbmF0dXJlX2RlbHRhJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBzaG90Q29udGVudD8udHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90Q29udGVudC5zaWduYXR1cmUgKz0gZXZlbnQuZGVsdGEuc2lnbmF0dXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTmV2ZXIoZXZlbnQuZGVsdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdjb250ZW50X2Jsb2NrX3N0b3AnOlxuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgfVxuICAgIH0sIFN5bWJvbC5hc3luY0l0ZXJhdG9yKV0oKSB7XG4gICAgICAgIGNvbnN0IHB1c2hRdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCByZWFkUXVldWUgPSBbXTtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbignc3RyZWFtRXZlbnQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKHJlYWRlcikge1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZXNvbHZlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hRdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWFkZXIgb2YgcmVhZFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRRdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignYWJvcnQnLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHJlYWRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRRdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHJlYWRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRRdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXB1c2hRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVhZFF1ZXVlLnB1c2goeyByZXNvbHZlLCByZWplY3QgfSkpLnRoZW4oKGNodW5rKSA9PiAoY2h1bmsgPyB7IHZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2UgfSA6IHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gcHVzaFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldHVybjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1JlYWRhYmxlU3RyZWFtKCkge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyZWFtKHRoaXNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLmJpbmQodGhpcyksIHRoaXMuY29udHJvbGxlcik7XG4gICAgICAgIHJldHVybiBzdHJlYW0udG9SZWFkYWJsZVN0cmVhbSgpO1xuICAgIH1cbn1cbi8vIHVzZWQgdG8gZW5zdXJlIGV4aGF1c3RpdmUgY2FzZSBtYXRjaGluZyB3aXRob3V0IHRocm93aW5nIGEgcnVudGltZSBlcnJvclxuZnVuY3Rpb24gY2hlY2tOZXZlcih4KSB7IH1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1lc3NhZ2VTdHJlYW0ubWpzLm1hcCIsCiAgICAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0ICogYXMgQmF0Y2hlc0FQSSBmcm9tIFwiLi9iYXRjaGVzLm1qc1wiO1xuaW1wb3J0IHsgQmF0Y2hlcywgTWVzc2FnZUJhdGNoZXNQYWdlLCB9IGZyb20gXCIuL2JhdGNoZXMubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3RyZWFtIH0gZnJvbSBcIi4uLy4uL2xpYi9NZXNzYWdlU3RyZWFtLm1qc1wiO1xuZXhwb3J0IHsgTWVzc2FnZVN0cmVhbSB9IGZyb20gXCIuLi8uLi9saWIvTWVzc2FnZVN0cmVhbS5tanNcIjtcbmV4cG9ydCBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5iYXRjaGVzID0gbmV3IEJhdGNoZXNBUEkuQmF0Y2hlcyh0aGlzLl9jbGllbnQpO1xuICAgIH1cbiAgICBjcmVhdGUoYm9keSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoYm9keS5tb2RlbCBpbiBERVBSRUNBVEVEX01PREVMUykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgbW9kZWwgJyR7Ym9keS5tb2RlbH0nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmVhY2ggZW5kLW9mLWxpZmUgb24gJHtERVBSRUNBVEVEX01PREVMU1tib2R5Lm1vZGVsXX1cXG5QbGVhc2UgbWlncmF0ZSB0byBhIG5ld2VyIG1vZGVsLiBWaXNpdCBodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9lbi9kb2NzL3Jlc291cmNlcy9tb2RlbC1kZXByZWNhdGlvbnMgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvdjEvbWVzc2FnZXMnLCB7XG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgdGltZW91dDogdGhpcy5fY2xpZW50Ll9vcHRpb25zLnRpbWVvdXQgPz8gNjAwMDAwLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHN0cmVhbTogYm9keS5zdHJlYW0gPz8gZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBNZXNzYWdlIHN0cmVhbVxuICAgICAqL1xuICAgIHN0cmVhbShib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBNZXNzYWdlU3RyZWFtLmNyZWF0ZU1lc3NhZ2UodGhpcywgYm9keSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIGEgTWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFRoZSBUb2tlbiBDb3VudCBBUEkgY2FuIGJlIHVzZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiB0b2tlbnMgaW4gYSBNZXNzYWdlLFxuICAgICAqIGluY2x1ZGluZyB0b29scywgaW1hZ2VzLCBhbmQgZG9jdW1lbnRzLCB3aXRob3V0IGNyZWF0aW5nIGl0LlxuICAgICAqXG4gICAgICogTGVhcm4gbW9yZSBhYm91dCB0b2tlbiBjb3VudGluZyBpbiBvdXJcbiAgICAgKiBbdXNlciBndWlkZV0oL2VuL2RvY3MvYnVpbGQtd2l0aC1jbGF1ZGUvdG9rZW4tY291bnRpbmcpXG4gICAgICovXG4gICAgY291bnRUb2tlbnMoYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy92MS9tZXNzYWdlcy9jb3VudF90b2tlbnMnLCB7IGJvZHksIC4uLm9wdGlvbnMgfSk7XG4gICAgfVxufVxuY29uc3QgREVQUkVDQVRFRF9NT0RFTFMgPSB7XG4gICAgJ2NsYXVkZS0xLjMnOiAnTm92ZW1iZXIgNnRoLCAyMDI0JyxcbiAgICAnY2xhdWRlLTEuMy0xMDBrJzogJ05vdmVtYmVyIDZ0aCwgMjAyNCcsXG4gICAgJ2NsYXVkZS1pbnN0YW50LTEuMSc6ICdOb3ZlbWJlciA2dGgsIDIwMjQnLFxuICAgICdjbGF1ZGUtaW5zdGFudC0xLjEtMTAwayc6ICdOb3ZlbWJlciA2dGgsIDIwMjQnLFxuICAgICdjbGF1ZGUtaW5zdGFudC0xLjInOiAnTm92ZW1iZXIgNnRoLCAyMDI0JyxcbiAgICAnY2xhdWRlLTMtc29ubmV0LTIwMjQwMjI5JzogJ0p1bHkgMjFzdCwgMjAyNScsXG4gICAgJ2NsYXVkZS0yLjEnOiAnSnVseSAyMXN0LCAyMDI1JyxcbiAgICAnY2xhdWRlLTIuMCc6ICdKdWx5IDIxc3QsIDIwMjUnLFxufTtcbk1lc3NhZ2VzLkJhdGNoZXMgPSBCYXRjaGVzO1xuTWVzc2FnZXMuTWVzc2FnZUJhdGNoZXNQYWdlID0gTWVzc2FnZUJhdGNoZXNQYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVzc2FnZXMubWpzLm1hcCIsCiAgICAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlLm1qc1wiO1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gXCIuLi9wYWdpbmF0aW9uLm1qc1wiO1xuZXhwb3J0IGNsYXNzIE1vZGVscyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyBtb2RlbC5cbiAgICAgKlxuICAgICAqIFRoZSBNb2RlbHMgQVBJIHJlc3BvbnNlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljXG4gICAgICogbW9kZWwgb3IgcmVzb2x2ZSBhIG1vZGVsIGFsaWFzIHRvIGEgbW9kZWwgSUQuXG4gICAgICovXG4gICAgcmV0cmlldmUobW9kZWxJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL3YxL21vZGVscy8ke21vZGVsSWR9YCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGxpc3QocXVlcnkgPSB7fSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoaXNSZXF1ZXN0T3B0aW9ucyhxdWVyeSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Qoe30sIHF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEFQSUxpc3QoJy92MS9tb2RlbHMnLCBNb2RlbEluZm9zUGFnZSwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTW9kZWxJbmZvc1BhZ2UgZXh0ZW5kcyBQYWdlIHtcbn1cbk1vZGVscy5Nb2RlbEluZm9zUGFnZSA9IE1vZGVsSW5mb3NQYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kZWxzLm1qcy5tYXAiLAogICAgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG52YXIgX2E7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gXCIuL2NvcmUubWpzXCI7XG5pbXBvcnQgKiBhcyBFcnJvcnMgZnJvbSBcIi4vZXJyb3IubWpzXCI7XG5pbXBvcnQgKiBhcyBQYWdpbmF0aW9uIGZyb20gXCIuL3BhZ2luYXRpb24ubWpzXCI7XG5pbXBvcnQgKiBhcyBVcGxvYWRzIGZyb20gXCIuL3VwbG9hZHMubWpzXCI7XG5pbXBvcnQgKiBhcyBBUEkgZnJvbSBcIi4vcmVzb3VyY2VzL2luZGV4Lm1qc1wiO1xuaW1wb3J0IHsgQ29tcGxldGlvbnMsIH0gZnJvbSBcIi4vcmVzb3VyY2VzL2NvbXBsZXRpb25zLm1qc1wiO1xuaW1wb3J0IHsgTW9kZWxJbmZvc1BhZ2UsIE1vZGVscyB9IGZyb20gXCIuL3Jlc291cmNlcy9tb2RlbHMubWpzXCI7XG5pbXBvcnQgeyBCZXRhLCB9IGZyb20gXCIuL3Jlc291cmNlcy9iZXRhL2JldGEubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlcywgfSBmcm9tIFwiLi9yZXNvdXJjZXMvbWVzc2FnZXMvbWVzc2FnZXMubWpzXCI7XG4vKipcbiAqIEFQSSBDbGllbnQgZm9yIGludGVyZmFjaW5nIHdpdGggdGhlIEFudGhyb3BpYyBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbnRocm9waWMgZXh0ZW5kcyBDb3JlLkFQSUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogQVBJIENsaWVudCBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgQW50aHJvcGljIEFQSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdHMuYXBpS2V5PXByb2Nlc3MuZW52WydBTlRIUk9QSUNfQVBJX0tFWSddID8/IG51bGxdXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0cy5hdXRoVG9rZW49cHJvY2Vzcy5lbnZbJ0FOVEhST1BJQ19BVVRIX1RPS0VOJ10gPz8gbnVsbF1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYmFzZVVSTD1wcm9jZXNzLmVudlsnQU5USFJPUElDX0JBU0VfVVJMJ10gPz8gaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbV0gLSBPdmVycmlkZSB0aGUgZGVmYXVsdCBiYXNlIFVSTCBmb3IgdGhlIEFQSS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMudGltZW91dD0xMCBtaW51dGVzXSAtIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZSBjbGllbnQgd2lsbCB3YWl0IGZvciBhIHJlc3BvbnNlIGJlZm9yZSB0aW1pbmcgb3V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5odHRwQWdlbnRdIC0gQW4gSFRUUCBhZ2VudCB1c2VkIHRvIG1hbmFnZSBIVFRQKHMpIGNvbm5lY3Rpb25zLlxuICAgICAqIEBwYXJhbSB7Q29yZS5GZXRjaH0gW29wdHMuZmV0Y2hdIC0gU3BlY2lmeSBhIGN1c3RvbSBgZmV0Y2hgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5tYXhSZXRyaWVzPTJdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoZSBjbGllbnQgd2lsbCByZXRyeSBhIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtDb3JlLkhlYWRlcnN9IG9wdHMuZGVmYXVsdEhlYWRlcnMgLSBEZWZhdWx0IGhlYWRlcnMgdG8gaW5jbHVkZSB3aXRoIGV2ZXJ5IHJlcXVlc3QgdG8gdGhlIEFQSS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuRGVmYXVsdFF1ZXJ5fSBvcHRzLmRlZmF1bHRRdWVyeSAtIERlZmF1bHQgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIHdpdGggZXZlcnkgcmVxdWVzdCB0byB0aGUgQVBJLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXI9ZmFsc2VdIC0gQnkgZGVmYXVsdCwgY2xpZW50LXNpZGUgdXNlIG9mIHRoaXMgbGlicmFyeSBpcyBub3QgYWxsb3dlZCwgYXMgaXQgcmlza3MgZXhwb3NpbmcgeW91ciBzZWNyZXQgQVBJIGNyZWRlbnRpYWxzIHRvIGF0dGFja2Vycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih7IGJhc2VVUkwgPSBDb3JlLnJlYWRFbnYoJ0FOVEhST1BJQ19CQVNFX1VSTCcpLCBhcGlLZXkgPSBDb3JlLnJlYWRFbnYoJ0FOVEhST1BJQ19BUElfS0VZJykgPz8gbnVsbCwgYXV0aFRva2VuID0gQ29yZS5yZWFkRW52KCdBTlRIUk9QSUNfQVVUSF9UT0tFTicpID8/IG51bGwsIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhcGlLZXksXG4gICAgICAgICAgICBhdXRoVG9rZW4sXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgYmFzZVVSTDogYmFzZVVSTCB8fCBgaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbWAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghb3B0aW9ucy5kYW5nZXJvdXNseUFsbG93QnJvd3NlciAmJiBDb3JlLmlzUnVubmluZ0luQnJvd3NlcigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3JzLkFudGhyb3BpY0Vycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgcnVubmluZyBpbiBhIGJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cXG5cXG5UaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFzIGl0IHJpc2tzIGV4cG9zaW5nIHlvdXIgc2VjcmV0IEFQSSBjcmVkZW50aWFscyB0byBhdHRhY2tlcnMuXFxuSWYgeW91IHVuZGVyc3RhbmQgdGhlIHJpc2tzIGFuZCBoYXZlIGFwcHJvcHJpYXRlIG1pdGlnYXRpb25zIGluIHBsYWNlLFxcbnlvdSBjYW4gc2V0IHRoZSBgZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXJgIG9wdGlvbiB0byBgdHJ1ZWAsIGUuZy4sXFxuXFxubmV3IEFudGhyb3BpYyh7IGFwaUtleSwgZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXI6IHRydWUgfSk7XFxuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCA/PyA2MDAwMDAgLyogMTAgbWludXRlcyAqLyxcbiAgICAgICAgICAgIGh0dHBBZ2VudDogb3B0aW9ucy5odHRwQWdlbnQsXG4gICAgICAgICAgICBtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMsXG4gICAgICAgICAgICBmZXRjaDogb3B0aW9ucy5mZXRjaCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGxldGlvbnMgPSBuZXcgQVBJLkNvbXBsZXRpb25zKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IEFQSS5NZXNzYWdlcyh0aGlzKTtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBuZXcgQVBJLk1vZGVscyh0aGlzKTtcbiAgICAgICAgdGhpcy5iZXRhID0gbmV3IEFQSS5CZXRhKHRoaXMpO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgICAgIHRoaXMuYXV0aFRva2VuID0gYXV0aFRva2VuO1xuICAgIH1cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmRlZmF1bHRRdWVyeTtcbiAgICB9XG4gICAgZGVmYXVsdEhlYWRlcnMob3B0cykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuZGVmYXVsdEhlYWRlcnMob3B0cyksXG4gICAgICAgICAgICAuLi4odGhpcy5fb3B0aW9ucy5kYW5nZXJvdXNseUFsbG93QnJvd3NlciA/XG4gICAgICAgICAgICAgICAgeyAnYW50aHJvcGljLWRhbmdlcm91cy1kaXJlY3QtYnJvd3Nlci1hY2Nlc3MnOiAndHJ1ZScgfVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICdhbnRocm9waWMtdmVyc2lvbic6ICcyMDIzLTA2LTAxJyxcbiAgICAgICAgICAgIC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdEhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhbGlkYXRlSGVhZGVycyhoZWFkZXJzLCBjdXN0b21IZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLmFwaUtleSAmJiBoZWFkZXJzWyd4LWFwaS1rZXknXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXN0b21IZWFkZXJzWyd4LWFwaS1rZXknXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF1dGhUb2tlbiAmJiBoZWFkZXJzWydhdXRob3JpemF0aW9uJ10pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VzdG9tSGVhZGVyc1snYXV0aG9yaXphdGlvbiddID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBhdXRoZW50aWNhdGlvbiBtZXRob2QuIEV4cGVjdGVkIGVpdGhlciBhcGlLZXkgb3IgYXV0aFRva2VuIHRvIGJlIHNldC4gT3IgZm9yIG9uZSBvZiB0aGUgXCJYLUFwaS1LZXlcIiBvciBcIkF1dGhvcml6YXRpb25cIiBoZWFkZXJzIHRvIGJlIGV4cGxpY2l0bHkgb21pdHRlZCcpO1xuICAgIH1cbiAgICBhdXRoSGVhZGVycyhvcHRzKSB7XG4gICAgICAgIGNvbnN0IGFwaUtleUF1dGggPSB0aGlzLmFwaUtleUF1dGgob3B0cyk7XG4gICAgICAgIGNvbnN0IGJlYXJlckF1dGggPSB0aGlzLmJlYXJlckF1dGgob3B0cyk7XG4gICAgICAgIGlmIChhcGlLZXlBdXRoICE9IG51bGwgJiYgIUNvcmUuaXNFbXB0eU9iaihhcGlLZXlBdXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwaUtleUF1dGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlYXJlckF1dGggIT0gbnVsbCAmJiAhQ29yZS5pc0VtcHR5T2JqKGJlYXJlckF1dGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmVhcmVyQXV0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGFwaUtleUF1dGgob3B0cykge1xuICAgICAgICBpZiAodGhpcy5hcGlLZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7ICdYLUFwaS1LZXknOiB0aGlzLmFwaUtleSB9O1xuICAgIH1cbiAgICBiZWFyZXJBdXRoKG9wdHMpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0aFRva2VuID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hdXRoVG9rZW59YCB9O1xuICAgIH1cbn1cbl9hID0gQW50aHJvcGljO1xuQW50aHJvcGljLkFudGhyb3BpYyA9IF9hO1xuQW50aHJvcGljLkhVTUFOX1BST01QVCA9ICdcXG5cXG5IdW1hbjonO1xuQW50aHJvcGljLkFJX1BST01QVCA9ICdcXG5cXG5Bc3Npc3RhbnQ6JztcbkFudGhyb3BpYy5ERUZBVUxUX1RJTUVPVVQgPSA2MDAwMDA7IC8vIDEwIG1pbnV0ZXNcbkFudGhyb3BpYy5BbnRocm9waWNFcnJvciA9IEVycm9ycy5BbnRocm9waWNFcnJvcjtcbkFudGhyb3BpYy5BUElFcnJvciA9IEVycm9ycy5BUElFcnJvcjtcbkFudGhyb3BpYy5BUElDb25uZWN0aW9uRXJyb3IgPSBFcnJvcnMuQVBJQ29ubmVjdGlvbkVycm9yO1xuQW50aHJvcGljLkFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IgPSBFcnJvcnMuQVBJQ29ubmVjdGlvblRpbWVvdXRFcnJvcjtcbkFudGhyb3BpYy5BUElVc2VyQWJvcnRFcnJvciA9IEVycm9ycy5BUElVc2VyQWJvcnRFcnJvcjtcbkFudGhyb3BpYy5Ob3RGb3VuZEVycm9yID0gRXJyb3JzLk5vdEZvdW5kRXJyb3I7XG5BbnRocm9waWMuQ29uZmxpY3RFcnJvciA9IEVycm9ycy5Db25mbGljdEVycm9yO1xuQW50aHJvcGljLlJhdGVMaW1pdEVycm9yID0gRXJyb3JzLlJhdGVMaW1pdEVycm9yO1xuQW50aHJvcGljLkJhZFJlcXVlc3RFcnJvciA9IEVycm9ycy5CYWRSZXF1ZXN0RXJyb3I7XG5BbnRocm9waWMuQXV0aGVudGljYXRpb25FcnJvciA9IEVycm9ycy5BdXRoZW50aWNhdGlvbkVycm9yO1xuQW50aHJvcGljLkludGVybmFsU2VydmVyRXJyb3IgPSBFcnJvcnMuSW50ZXJuYWxTZXJ2ZXJFcnJvcjtcbkFudGhyb3BpYy5QZXJtaXNzaW9uRGVuaWVkRXJyb3IgPSBFcnJvcnMuUGVybWlzc2lvbkRlbmllZEVycm9yO1xuQW50aHJvcGljLlVucHJvY2Vzc2FibGVFbnRpdHlFcnJvciA9IEVycm9ycy5VbnByb2Nlc3NhYmxlRW50aXR5RXJyb3I7XG5BbnRocm9waWMudG9GaWxlID0gVXBsb2Fkcy50b0ZpbGU7XG5BbnRocm9waWMuZmlsZUZyb21QYXRoID0gVXBsb2Fkcy5maWxlRnJvbVBhdGg7XG5BbnRocm9waWMuQ29tcGxldGlvbnMgPSBDb21wbGV0aW9ucztcbkFudGhyb3BpYy5NZXNzYWdlcyA9IE1lc3NhZ2VzO1xuQW50aHJvcGljLk1vZGVscyA9IE1vZGVscztcbkFudGhyb3BpYy5Nb2RlbEluZm9zUGFnZSA9IE1vZGVsSW5mb3NQYWdlO1xuQW50aHJvcGljLkJldGEgPSBCZXRhO1xuZXhwb3J0IGNvbnN0IHsgSFVNQU5fUFJPTVBULCBBSV9QUk9NUFQgfSA9IEFudGhyb3BpYztcbmV4cG9ydCB7IHRvRmlsZSwgZmlsZUZyb21QYXRoIH0gZnJvbSBcIi4vdXBsb2Fkcy5tanNcIjtcbmV4cG9ydCB7IEFudGhyb3BpY0Vycm9yLCBBUElFcnJvciwgQVBJQ29ubmVjdGlvbkVycm9yLCBBUElDb25uZWN0aW9uVGltZW91dEVycm9yLCBBUElVc2VyQWJvcnRFcnJvciwgTm90Rm91bmRFcnJvciwgQ29uZmxpY3RFcnJvciwgUmF0ZUxpbWl0RXJyb3IsIEJhZFJlcXVlc3RFcnJvciwgQXV0aGVudGljYXRpb25FcnJvciwgSW50ZXJuYWxTZXJ2ZXJFcnJvciwgUGVybWlzc2lvbkRlbmllZEVycm9yLCBVbnByb2Nlc3NhYmxlRW50aXR5RXJyb3IsIH0gZnJvbSBcIi4vZXJyb3IubWpzXCI7XG5leHBvcnQgZGVmYXVsdCBBbnRocm9waWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwIiwKICAgICJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBTaWduYXR1cmVWNCB9IGZyb20gJ0BzbWl0aHkvc2lnbmF0dXJlLXY0JztcbmltcG9ydCB7IGZyb21Ob2RlUHJvdmlkZXJDaGFpbiB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQHNtaXRoeS9wcm90b2NvbC1odHRwJztcbmltcG9ydCB7IFNoYTI1NiB9IGZyb20gJ0Bhd3MtY3J5cHRvL3NoYTI1Ni1qcyc7XG5leHBvcnQgY29uc3QgZ2V0QXV0aEhlYWRlcnMgPSBhc3luYyAocmVxLCBwcm9wcykgPT4ge1xuICAgIGFzc2VydChyZXEubWV0aG9kLCAnRXhwZWN0ZWQgcmVxdWVzdCBtZXRob2QgcHJvcGVydHkgdG8gYmUgc2V0Jyk7XG4gICAgY29uc3QgcHJvdmlkZXJDaGFpbiA9IGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgd2l0aFRlbXBFbnYoKCkgPT4ge1xuICAgICAgICAvLyBUZW1wb3JhcmlseSBzZXQgdGhlIGFwcHJvcHJpYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZiB3ZSd2ZSBiZWVuXG4gICAgICAgIC8vIGV4cGxpY2l0bHkgZ2l2ZW4gY3JlZGVudGlhbHMgc28gdGhhdCB0aGUgY3JlZGVudGlhbHMgcHJvdmlkZXIgY2FuXG4gICAgICAgIC8vIHJlc29sdmUgdGhlbS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZTogdGhlIGVudmlyb25tZW50IHByb3ZpZGVyIGlzIG9ubHkgbm90IHJ1biBmaXJzdCBpZiB0aGUgYEFXU19QUk9GSUxFYFxuICAgICAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy12My9ibG9iLzQ0YTE4YTM0YjJjOTNmZWNjZGZjZDE2MjkyOGQxM2U2ZGJkY2FmMzAvcGFja2FnZXMvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlL3NyYy9kZWZhdWx0UHJvdmlkZXIudHMjTDQ5XG4gICAgICAgIGlmIChwcm9wcy5hd3NBY2Nlc3NLZXkpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydBV1NfQUNDRVNTX0tFWV9JRCddID0gcHJvcHMuYXdzQWNjZXNzS2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5hd3NTZWNyZXRLZXkpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydBV1NfU0VDUkVUX0FDQ0VTU19LRVknXSA9IHByb3BzLmF3c1NlY3JldEtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuYXdzU2Vzc2lvblRva2VuKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnQVdTX1NFU1NJT05fVE9LRU4nXSA9IHByb3BzLmF3c1Nlc3Npb25Ub2tlbjtcbiAgICAgICAgfVxuICAgIH0sICgpID0+IHByb3ZpZGVyQ2hhaW4oKSk7XG4gICAgY29uc3Qgc2lnbmVyID0gbmV3IFNpZ25hdHVyZVY0KHtcbiAgICAgICAgc2VydmljZTogJ2JlZHJvY2snLFxuICAgICAgICByZWdpb246IHByb3BzLnJlZ2lvbk5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgICBzaGEyNTY6IFNoYTI1NixcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHByb3BzLnVybCk7XG4gICAgY29uc3QgaGVhZGVycyA9ICFyZXEuaGVhZGVycyA/IHt9XG4gICAgICAgIDogU3ltYm9sLml0ZXJhdG9yIGluIHJlcS5oZWFkZXJzID9cbiAgICAgICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhBcnJheS5mcm9tKHJlcS5oZWFkZXJzKS5tYXAoKGhlYWRlcikgPT4gWy4uLmhlYWRlcl0pKVxuICAgICAgICAgICAgOiB7IC4uLnJlcS5oZWFkZXJzIH07XG4gICAgLy8gVGhlIGNvbm5lY3Rpb24gaGVhZGVyIG1heSBiZSBzdHJpcHBlZCBieSBhIHByb3h5IHNvbWV3aGVyZSwgc28gdGhlIHJlY2VpdmVyXG4gICAgLy8gb2YgdGhpcyBtZXNzYWdlIG1heSBub3Qgc2VlIHRoaXMgaGVhZGVyLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIGhlYWRlcnNcbiAgICAvLyB0aGF0IGFyZSBzaWduZWQuXG4gICAgZGVsZXRlIGhlYWRlcnNbJ2Nvbm5lY3Rpb24nXTtcbiAgICBoZWFkZXJzWydob3N0J10gPSB1cmwuaG9zdG5hbWU7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIdHRwUmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBwcm90b2NvbDogdXJsLnByb3RvY29sLFxuICAgICAgICBwYXRoOiB1cmwucGF0aG5hbWUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IHJlcS5ib2R5LFxuICAgIH0pO1xuICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IHNpZ25lci5zaWduKHJlcXVlc3QpO1xuICAgIHJldHVybiBzaWduZWQuaGVhZGVycztcbn07XG5jb25zdCB3aXRoVGVtcEVudiA9IGFzeW5jICh1cGRhdGVFbnYsIGZuKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNFbnYgPSB7IC4uLnByb2Nlc3MuZW52IH07XG4gICAgdHJ5IHtcbiAgICAgICAgdXBkYXRlRW52KCk7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgcHJvY2Vzcy5lbnYgPSBwcmV2aW91c0VudjtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5tanMubWFwIiwKICAgICJpbXBvcnQgeyBFdmVudFN0cmVhbU1hcnNoYWxsZXIgfSBmcm9tICdAc21pdGh5L2V2ZW50c3RyZWFtLXNlcmRlLW5vZGUnO1xuaW1wb3J0IHsgZnJvbUJhc2U2NCwgdG9CYXNlNjQgfSBmcm9tICdAc21pdGh5L3V0aWwtYmFzZTY0JztcbmltcG9ydCB7IHN0cmVhbUNvbGxlY3RvciB9IGZyb20gJ0BzbWl0aHkvZmV0Y2gtaHR0cC1oYW5kbGVyJztcbmltcG9ydCB7IFN0cmVhbSBhcyBDb3JlU3RyZWFtIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvc3RyZWFtaW5nJztcbmltcG9ydCB7IFJlYWRhYmxlU3RyZWFtVG9Bc3luY0l0ZXJhYmxlIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvaW50ZXJuYWwvc3RyZWFtLXV0aWxzJztcbmltcG9ydCB7IEFudGhyb3BpY0Vycm9yIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvZXJyb3InO1xuaW1wb3J0IHsgQVBJRXJyb3IgfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkayc7XG5pbXBvcnQgeyBjcmVhdGVSZXNwb25zZUhlYWRlcnMsIHNhZmVKU09OIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvY29yZSc7XG5pbXBvcnQgeyBkZV9SZXNwb25zZVN0cmVhbSB9IGZyb20gXCIuL0FXU19yZXN0SnNvbjEubWpzXCI7XG5leHBvcnQgY29uc3QgdG9VdGY4ID0gKGlucHV0KSA9PiBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JykuZGVjb2RlKGlucHV0KTtcbmV4cG9ydCBjb25zdCBmcm9tVXRmOCA9IChpbnB1dCkgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGlucHV0KTtcbi8vIGBkZV9SZXNwb25zZVN0cmVhbWAgcGFyc2VzIGEgQmVkcm9jayByZXNwb25zZSBzdHJlYW0gYW5kIGVtaXRzIGV2ZW50cyBhcyB0aGV5IGFyZSBmb3VuZC5cbi8vIEl0IHJlcXVpcmVzIGEgXCJjb250ZXh0XCIgYXJndW1lbnQgd2hpY2ggaGFzIG1hbnkgZmllbGRzLCBidXQgZm9yIHdoYXQgd2UncmUgdXNpbmcgaXQgZm9yXG4vLyBpdCBvbmx5IG5lZWRzIHRoaXMuXG5leHBvcnQgY29uc3QgZ2V0TWluaW1hbFNlcmRlQ29udGV4dCA9ICgpID0+IHtcbiAgICBjb25zdCBtYXJzaGFsbGVyID0gbmV3IEV2ZW50U3RyZWFtTWFyc2hhbGxlcih7IHV0ZjhFbmNvZGVyOiB0b1V0ZjgsIHV0ZjhEZWNvZGVyOiBmcm9tVXRmOCB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlNjREZWNvZGVyOiBmcm9tQmFzZTY0LFxuICAgICAgICBiYXNlNjRFbmNvZGVyOiB0b0Jhc2U2NCxcbiAgICAgICAgdXRmOERlY29kZXI6IGZyb21VdGY4LFxuICAgICAgICB1dGY4RW5jb2RlcjogdG9VdGY4LFxuICAgICAgICBldmVudFN0cmVhbU1hcnNoYWxsZXI6IG1hcnNoYWxsZXIsXG4gICAgICAgIHN0cmVhbUNvbGxlY3Rvcjogc3RyZWFtQ29sbGVjdG9yLFxuICAgIH07XG59O1xuZXhwb3J0IGNsYXNzIFN0cmVhbSBleHRlbmRzIENvcmVTdHJlYW0ge1xuICAgIHN0YXRpYyBmcm9tU1NFUmVzcG9uc2UocmVzcG9uc2UsIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uKiBpdGVyTWVzc2FnZXMoKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFudGhyb3BpY0Vycm9yKGBBdHRlbXB0ZWQgdG8gaXRlcmF0ZSBvdmVyIGEgcmVzcG9uc2Ugd2l0aCBubyBib2R5YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHlJdGVyID0gUmVhZGFibGVTdHJlYW1Ub0FzeW5jSXRlcmFibGUocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICBjb25zdCBldmVudFN0cmVhbSA9IGRlX1Jlc3BvbnNlU3RyZWFtKHJlc3BvbnNlQm9keUl0ZXIsIGdldE1pbmltYWxTZXJkZUNvbnRleHQoKSk7XG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIGV2ZW50U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNodW5rICYmIGV2ZW50LmNodW5rLmJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0b1V0ZjgoZXZlbnQuY2h1bmsuYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB7IGV2ZW50OiAnY2h1bmsnLCBkYXRhOiBzLCByYXc6IFtdIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmludGVybmFsU2VydmVyRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHsgZXZlbnQ6ICdlcnJvcicsIGRhdGE6ICdJbnRlcm5hbFNlcnZlckV4Y2VwdGlvbicsIHJhdzogW10gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQubW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB7IGV2ZW50OiAnZXJyb3InLCBkYXRhOiAnTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvbicsIHJhdzogW10gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQudmFsaWRhdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB7IGV2ZW50OiAnZXJyb3InLCBkYXRhOiAnVmFsaWRhdGlvbkV4Y2VwdGlvbicsIHJhdzogW10gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQudGhyb3R0bGluZ0V4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB7IGV2ZW50OiAnZXJyb3InLCBkYXRhOiAnVGhyb3R0bGluZ0V4Y2VwdGlvbicsIHJhdzogW10gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZW50aXJlbHkgZnJvbSB0aGUgY29yZSBTREtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24qIGl0ZXJhdG9yKCkge1xuICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaXRlcmF0ZSBvdmVyIGEgY29uc3VtZWQgc3RyZWFtLCB1c2UgYC50ZWUoKWAgdG8gc3BsaXQgdGhlIHN0cmVhbS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3Qgc3NlIG9mIGl0ZXJNZXNzYWdlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzc2UuZXZlbnQgPT09ICdjaHVuaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgSlNPTi5wYXJzZShzc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBwYXJzZSBtZXNzYWdlIGludG8gSlNPTjpgLCBzc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRnJvbSBjaHVuazpgLCBzc2UucmF3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzc2UuZXZlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyclRleHQgPSBzc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyckpTT04gPSBzYWZlSlNPTihlcnJUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyck1lc3NhZ2UgPSBlcnJKU09OID8gdW5kZWZpbmVkIDogZXJyVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEFQSUVycm9yLmdlbmVyYXRlKHVuZGVmaW5lZCwgZXJySlNPTiwgZXJyTWVzc2FnZSwgY3JlYXRlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FsbHMgYHN0cmVhbS5jb250cm9sbGVyLmFib3J0KClgLCB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IHRocm93aW5nLlxuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgYGJyZWFrYHMsIGFib3J0IHRoZSBvbmdvaW5nIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgaWYgKCFkb25lKVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oaXRlcmF0b3IsIGNvbnRyb2xsZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmVhbWluZy5tanMubWFwIiwKICAgICIvLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMvYmxvYi9iZWU2NmZiZDJhNTE5YTE2YjU3Yzc4N2IyNjg5YWY4NTdhZjcyMGFmL2NsaWVudHMvY2xpZW50LWJlZHJvY2stcnVudGltZS9zcmMvcHJvdG9jb2xzL0F3c19yZXN0SnNvbjEudHNcbi8vIE1vZGlmaWVkIHRvIHJlbW92ZSB1bm5lY2Vzc2FyeSBjb2RlICh3ZSBvbmx5IG5lZWQgdG8gY2FsbCBgZGVfUmVzcG9uc2VTdHJlYW1gKSBhbmQgdG8gYWRqdXN0IGltcG9ydHMuXG5pbXBvcnQgeyBjb2xsZWN0Qm9keSwgZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uIGFzIF9fZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uLCBleHBlY3RJbnQzMiBhcyBfX2V4cGVjdEludDMyLCBleHBlY3RTdHJpbmcgYXMgX19leHBlY3RTdHJpbmcsIG1hcCwgdGFrZSwgfSBmcm9tICdAc21pdGh5L3NtaXRoeS1jbGllbnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb24sIE1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb24sIFRocm90dGxpbmdFeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24sIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG4vKipcbiAqIGRlc2VyaWFsaXplQXdzX3Jlc3RKc29uMUludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzXG4gKi9cbmNvbnN0IGRlX0ludGVybmFsU2VydmVyRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gbWFwKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gdGFrZShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IF9fZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IEludGVybmFsU2VydmVyRXhjZXB0aW9uKHtcbiAgICAgICAgJG1ldGFkYXRhOiBkZXNlcmlhbGl6ZU1ldGFkYXRhKHBhcnNlZE91dHB1dCksXG4gICAgICAgIC4uLmNvbnRlbnRzLFxuICAgIH0pO1xuICAgIHJldHVybiBfX2RlY29yYXRlU2VydmljZUV4Y2VwdGlvbihleGNlcHRpb24sIHBhcnNlZE91dHB1dC5ib2R5KTtcbn07XG4vKipcbiAqIGRlc2VyaWFsaXplQXdzX3Jlc3RKc29uMU1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25SZXNcbiAqL1xuY29uc3QgZGVfTW9kZWxTdHJlYW1FcnJvckV4Y2VwdGlvblJlcyA9IGFzeW5jIChwYXJzZWRPdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IG1hcCh7fSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlZE91dHB1dC5ib2R5O1xuICAgIGNvbnN0IGRvYyA9IHRha2UoZGF0YSwge1xuICAgICAgICBtZXNzYWdlOiBfX2V4cGVjdFN0cmluZyxcbiAgICAgICAgb3JpZ2luYWxNZXNzYWdlOiBfX2V4cGVjdFN0cmluZyxcbiAgICAgICAgb3JpZ2luYWxTdGF0dXNDb2RlOiBfX2V4cGVjdEludDMyLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IE1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbi8qKlxuICogZGVzZXJpYWxpemVBd3NfcmVzdEpzb24xVGhyb3R0bGluZ0V4Y2VwdGlvblJlc1xuICovXG5jb25zdCBkZV9UaHJvdHRsaW5nRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gbWFwKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gdGFrZShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IF9fZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IFRocm90dGxpbmdFeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbi8qKlxuICogZGVzZXJpYWxpemVBd3NfcmVzdEpzb24xVmFsaWRhdGlvbkV4Y2VwdGlvblJlc1xuICovXG5jb25zdCBkZV9WYWxpZGF0aW9uRXhjZXB0aW9uUmVzID0gYXN5bmMgKHBhcnNlZE91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gbWFwKHt9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VkT3V0cHV0LmJvZHk7XG4gICAgY29uc3QgZG9jID0gdGFrZShkYXRhLCB7XG4gICAgICAgIG1lc3NhZ2U6IF9fZXhwZWN0U3RyaW5nLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRvYyk7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gbmV3IFZhbGlkYXRpb25FeGNlcHRpb24oe1xuICAgICAgICAkbWV0YWRhdGE6IGRlc2VyaWFsaXplTWV0YWRhdGEocGFyc2VkT3V0cHV0KSxcbiAgICAgICAgLi4uY29udGVudHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgcGFyc2VkT3V0cHV0LmJvZHkpO1xufTtcbi8qKlxuICogZGVzZXJpYWxpemVBd3NfcmVzdEpzb24xUmVzcG9uc2VTdHJlYW1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlX1Jlc3BvbnNlU3RyZWFtID0gKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIHJldHVybiBjb250ZXh0LmV2ZW50U3RyZWFtTWFyc2hhbGxlci5kZXNlcmlhbGl6ZShvdXRwdXQsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnRbJ2NodW5rJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjaHVuazogYXdhaXQgZGVfUGF5bG9hZFBhcnRfZXZlbnQoZXZlbnRbJ2NodW5rJ10sIGNvbnRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnRbJ2ludGVybmFsU2VydmVyRXhjZXB0aW9uJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFNlcnZlckV4Y2VwdGlvbjogYXdhaXQgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25fZXZlbnQoZXZlbnRbJ2ludGVybmFsU2VydmVyRXhjZXB0aW9uJ10sIGNvbnRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnRbJ21vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb24nXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb246IGF3YWl0IGRlX01vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25fZXZlbnQoZXZlbnRbJ21vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb24nXSwgY29udGV4dCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudFsndmFsaWRhdGlvbkV4Y2VwdGlvbiddICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbkV4Y2VwdGlvbjogYXdhaXQgZGVfVmFsaWRhdGlvbkV4Y2VwdGlvbl9ldmVudChldmVudFsndmFsaWRhdGlvbkV4Y2VwdGlvbiddLCBjb250ZXh0KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50Wyd0aHJvdHRsaW5nRXhjZXB0aW9uJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0aHJvdHRsaW5nRXhjZXB0aW9uOiBhd2FpdCBkZV9UaHJvdHRsaW5nRXhjZXB0aW9uX2V2ZW50KGV2ZW50Wyd0aHJvdHRsaW5nRXhjZXB0aW9uJ10sIGNvbnRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAkdW5rbm93bjogb3V0cHV0IH07XG4gICAgfSk7XG59O1xuY29uc3QgZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25fZXZlbnQgPSBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkT3V0cHV0ID0ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGJvZHk6IGF3YWl0IHBhcnNlQm9keShvdXRwdXQuYm9keSwgY29udGV4dCksXG4gICAgfTtcbiAgICByZXR1cm4gZGVfSW50ZXJuYWxTZXJ2ZXJFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbn07XG5jb25zdCBkZV9Nb2RlbFN0cmVhbUVycm9yRXhjZXB0aW9uX2V2ZW50ID0gYXN5bmMgKG91dHB1dCwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE91dHB1dCA9IHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBib2R5OiBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpLFxuICAgIH07XG4gICAgcmV0dXJuIGRlX01vZGVsU3RyZWFtRXJyb3JFeGNlcHRpb25SZXMocGFyc2VkT3V0cHV0LCBjb250ZXh0KTtcbn07XG5jb25zdCBkZV9QYXlsb2FkUGFydF9ldmVudCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHt9O1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwYXJzZUJvZHkob3V0cHV0LmJvZHksIGNvbnRleHQpO1xuICAgIE9iamVjdC5hc3NpZ24oY29udGVudHMsIGRlX1BheWxvYWRQYXJ0KGRhdGEsIGNvbnRleHQpKTtcbiAgICByZXR1cm4gY29udGVudHM7XG59O1xuY29uc3QgZGVfVGhyb3R0bGluZ0V4Y2VwdGlvbl9ldmVudCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIHJldHVybiBkZV9UaHJvdHRsaW5nRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG59O1xuY29uc3QgZGVfVmFsaWRhdGlvbkV4Y2VwdGlvbl9ldmVudCA9IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXQgPSB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgYm9keTogYXdhaXQgcGFyc2VCb2R5KG91dHB1dC5ib2R5LCBjb250ZXh0KSxcbiAgICB9O1xuICAgIHJldHVybiBkZV9WYWxpZGF0aW9uRXhjZXB0aW9uUmVzKHBhcnNlZE91dHB1dCwgY29udGV4dCk7XG59O1xuLyoqXG4gKiBkZXNlcmlhbGl6ZUF3c19yZXN0SnNvbjFQYXlsb2FkUGFydFxuICovXG5jb25zdCBkZV9QYXlsb2FkUGFydCA9IChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICByZXR1cm4gdGFrZShvdXRwdXQsIHtcbiAgICAgICAgYnl0ZXM6IGNvbnRleHQuYmFzZTY0RGVjb2RlcixcbiAgICB9KTtcbn07XG5jb25zdCBkZXNlcmlhbGl6ZU1ldGFkYXRhID0gKG91dHB1dCkgPT4gKHtcbiAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgcmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1sneC1hbXpuLXJlcXVlc3RpZCddID8/XG4gICAgICAgIG91dHB1dC5oZWFkZXJzWyd4LWFtem4tcmVxdWVzdC1pZCddID8/XG4gICAgICAgIG91dHB1dC5oZWFkZXJzWyd4LWFtei1yZXF1ZXN0LWlkJ10gPz9cbiAgICAgICAgJycsXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzWyd4LWFtei1pZC0yJ10gPz8gJycsXG4gICAgY2ZJZDogb3V0cHV0LmhlYWRlcnNbJ3gtYW16LWNmLWlkJ10gPz8gJycsXG59KTtcbi8vIEVuY29kZSBVaW50OEFycmF5IGRhdGEgaW50byBzdHJpbmcgd2l0aCB1dGYtOC5cbmNvbnN0IGNvbGxlY3RCb2R5U3RyaW5nID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5KHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGJvZHkpID0+IGNvbnRleHQudXRmOEVuY29kZXIoYm9keSkpO1xuY29uc3QgcGFyc2VCb2R5ID0gKHN0cmVhbUJvZHksIGNvbnRleHQpID0+IGNvbGxlY3RCb2R5U3RyaW5nKHN0cmVhbUJvZHksIGNvbnRleHQpLnRoZW4oKGVuY29kZWQpID0+IHtcbiAgICBpZiAoZW5jb2RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZW5jb2RlZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QVdTX3Jlc3RKc29uMS5tanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBDb3JlIGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL2NvcmUnO1xuaW1wb3J0ICogYXMgUmVzb3VyY2VzIGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQgeyBnZXRBdXRoSGVhZGVycyB9IGZyb20gXCIuL2F1dGgubWpzXCI7XG5pbXBvcnQgeyBTdHJlYW0gfSBmcm9tIFwiLi9zdHJlYW1pbmcubWpzXCI7XG5jb25zdCBERUZBVUxUX1ZFUlNJT04gPSAnYmVkcm9jay0yMDIzLTA1LTMxJztcbmNvbnN0IE1PREVMX0VORFBPSU5UUyA9IG5ldyBTZXQoWycvdjEvY29tcGxldGUnLCAnL3YxL21lc3NhZ2VzJywgJy92MS9tZXNzYWdlcz9iZXRhPXRydWUnXSk7XG4vKiogQVBJIENsaWVudCBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgQW50aHJvcGljIEJlZHJvY2sgQVBJLiAqL1xuZXhwb3J0IGNsYXNzIEFudGhyb3BpY0JlZHJvY2sgZXh0ZW5kcyBDb3JlLkFQSUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogQVBJIENsaWVudCBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgQW50aHJvcGljIEJlZHJvY2sgQVBJLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0cy5hd3NTZWNyZXRLZXldXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0cy5hd3NBY2Nlc3NLZXldXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFtvcHRzLmF3c1JlZ2lvbj1wcm9jZXNzLmVudlsnQVdTX1JFR0lPTiddID8/IHVzLWVhc3QtMV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRzLmF3c1Nlc3Npb25Ub2tlbl1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYmFzZVVSTD1wcm9jZXNzLmVudlsnQU5USFJPUElDX0JFRFJPQ0tfQkFTRV9VUkwnXSA/PyBodHRwczovL2JlZHJvY2stcnVudGltZS4ke3RoaXMuYXdzUmVnaW9ufS5hbWF6b25hd3MuY29tXSAtIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJhc2UgVVJMIGZvciB0aGUgQVBJLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lb3V0PTEwIG1pbnV0ZXNdIC0gVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlIGNsaWVudCB3aWxsIHdhaXQgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHRpbWluZyBvdXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmh0dHBBZ2VudF0gLSBBbiBIVFRQIGFnZW50IHVzZWQgdG8gbWFuYWdlIEhUVFAocykgY29ubmVjdGlvbnMuXG4gICAgICogQHBhcmFtIHtDb3JlLkZldGNofSBbb3B0cy5mZXRjaF0gLSBTcGVjaWZ5IGEgY3VzdG9tIGBmZXRjaGAgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1heFJldHJpZXM9Ml0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhlIGNsaWVudCB3aWxsIHJldHJ5IGEgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge0NvcmUuSGVhZGVyc30gb3B0cy5kZWZhdWx0SGVhZGVycyAtIERlZmF1bHQgaGVhZGVycyB0byBpbmNsdWRlIHdpdGggZXZlcnkgcmVxdWVzdCB0byB0aGUgQVBJLlxuICAgICAqIEBwYXJhbSB7Q29yZS5EZWZhdWx0UXVlcnl9IG9wdHMuZGVmYXVsdFF1ZXJ5IC0gRGVmYXVsdCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgd2l0aCBldmVyeSByZXF1ZXN0IHRvIHRoZSBBUEkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoeyBiYXNlVVJMID0gQ29yZS5yZWFkRW52KCdBTlRIUk9QSUNfQkVEUk9DS19CQVNFX1VSTCcpLCBhd3NTZWNyZXRLZXkgPSBudWxsLCBhd3NBY2Nlc3NLZXkgPSBudWxsLCBhd3NSZWdpb24gPSBDb3JlLnJlYWRFbnYoJ0FXU19SRUdJT04nKSA/PyAndXMtZWFzdC0xJywgYXdzU2Vzc2lvblRva2VuID0gbnVsbCwgLi4ub3B0cyB9ID0ge30pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGF3c1NlY3JldEtleSxcbiAgICAgICAgICAgIGF3c0FjY2Vzc0tleSxcbiAgICAgICAgICAgIGF3c1JlZ2lvbixcbiAgICAgICAgICAgIGF3c1Nlc3Npb25Ub2tlbixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBiYXNlVVJMOiBiYXNlVVJMIHx8IGBodHRwczovL2JlZHJvY2stcnVudGltZS4ke2F3c1JlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCA/PyA2MDAwMDAgLyogMTAgbWludXRlcyAqLyxcbiAgICAgICAgICAgIGh0dHBBZ2VudDogb3B0aW9ucy5odHRwQWdlbnQsXG4gICAgICAgICAgICBtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMsXG4gICAgICAgICAgICBmZXRjaDogb3B0aW9ucy5mZXRjaCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBtYWtlTWVzc2FnZXNSZXNvdXJjZSh0aGlzKTtcbiAgICAgICAgdGhpcy5jb21wbGV0aW9ucyA9IG5ldyBSZXNvdXJjZXMuQ29tcGxldGlvbnModGhpcyk7XG4gICAgICAgIHRoaXMuYmV0YSA9IG1ha2VCZXRhUmVzb3VyY2UodGhpcyk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmF3c1NlY3JldEtleSA9IGF3c1NlY3JldEtleTtcbiAgICAgICAgdGhpcy5hd3NBY2Nlc3NLZXkgPSBhd3NBY2Nlc3NLZXk7XG4gICAgICAgIHRoaXMuYXdzUmVnaW9uID0gYXdzUmVnaW9uO1xuICAgICAgICB0aGlzLmF3c1Nlc3Npb25Ub2tlbiA9IGF3c1Nlc3Npb25Ub2tlbjtcbiAgICB9XG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5kZWZhdWx0UXVlcnk7XG4gICAgfVxuICAgIGRlZmF1bHRIZWFkZXJzKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLmRlZmF1bHRIZWFkZXJzKG9wdHMpLFxuICAgICAgICAgICAgLi4udGhpcy5fb3B0aW9ucy5kZWZhdWx0SGVhZGVycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgcHJlcGFyZVJlcXVlc3QocmVxdWVzdCwgeyB1cmwsIG9wdGlvbnMgfSkge1xuICAgICAgICBjb25zdCByZWdpb25OYW1lID0gdGhpcy5hd3NSZWdpb247XG4gICAgICAgIGlmICghcmVnaW9uTmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBgYXdzUmVnaW9uYCBvcHRpb24gdG8gYmUgcGFzc2VkIHRvIHRoZSBjbGllbnQgb3IgdGhlIGBBV1NfUkVHSU9OYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBiZSBwcmVzZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IGdldEF1dGhIZWFkZXJzKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlZ2lvbk5hbWUsXG4gICAgICAgICAgICBhd3NBY2Nlc3NLZXk6IHRoaXMuYXdzQWNjZXNzS2V5LFxuICAgICAgICAgICAgYXdzU2VjcmV0S2V5OiB0aGlzLmF3c1NlY3JldEtleSxcbiAgICAgICAgICAgIGF3c1Nlc3Npb25Ub2tlbjogdGhpcy5hd3NTZXNzaW9uVG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMgPSB7IC4uLnJlcXVlc3QuaGVhZGVycywgLi4uaGVhZGVycyB9O1xuICAgIH1cbiAgICBidWlsZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zLl9fc3RyZWFtQ2xhc3MgPSBTdHJlYW07XG4gICAgICAgIGlmIChDb3JlLmlzT2JqKG9wdGlvbnMuYm9keSkpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgcmVxdWVzdCBib2R5IHNvIHRoYXQgY29kZSB0aGF0IG11dGF0ZXMgaXQgbGF0ZXJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCB1c2VyLXByb3ZpZGVkIG9iamVjdFxuICAgICAgICAgICAgb3B0aW9ucy5ib2R5ID0geyAuLi5vcHRpb25zLmJvZHkgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQ29yZS5pc09iaihvcHRpb25zLmJvZHkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYm9keVsnYW50aHJvcGljX3ZlcnNpb24nXSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuYm9keVsnYW50aHJvcGljX3ZlcnNpb24nXSA9IERFRkFVTFRfVkVSU0lPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgJiYgIW9wdGlvbnMuYm9keVsnYW50aHJvcGljX2JldGEnXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJldGFzID0gQ29yZS5nZXRIZWFkZXIob3B0aW9ucy5oZWFkZXJzLCAnYW50aHJvcGljLWJldGEnKTtcbiAgICAgICAgICAgICAgICBpZiAoYmV0YXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvZHlbJ2FudGhyb3BpY19iZXRhJ10gPSBiZXRhcy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoTU9ERUxfRU5EUE9JTlRTLmhhcyhvcHRpb25zLnBhdGgpICYmIG9wdGlvbnMubWV0aG9kID09PSAncG9zdCcpIHtcbiAgICAgICAgICAgIGlmICghQ29yZS5pc09iaihvcHRpb25zLmJvZHkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZXF1ZXN0IGJvZHkgdG8gYmUgYW4gb2JqZWN0IGZvciBwb3N0IC92MS9tZXNzYWdlcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBvcHRpb25zLmJvZHlbJ21vZGVsJ107XG4gICAgICAgICAgICBvcHRpb25zLmJvZHlbJ21vZGVsJ10gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBvcHRpb25zLmJvZHlbJ3N0cmVhbSddO1xuICAgICAgICAgICAgb3B0aW9ucy5ib2R5WydzdHJlYW0nXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnBhdGggPSBgL21vZGVsLyR7bW9kZWx9L2ludm9rZS13aXRoLXJlc3BvbnNlLXN0cmVhbWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnBhdGggPSBgL21vZGVsLyR7bW9kZWx9L2ludm9rZWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmJ1aWxkUmVxdWVzdChvcHRpb25zKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlTWVzc2FnZXNSZXNvdXJjZShjbGllbnQpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBSZXNvdXJjZXMuTWVzc2FnZXMoY2xpZW50KTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlJ3JlIGRlbGV0aW5nIG5vbi1vcHRpb25hbCBwcm9wZXJ0aWVzXG4gICAgZGVsZXRlIHJlc291cmNlLmJhdGNoZXM7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSdyZSBkZWxldGluZyBub24tb3B0aW9uYWwgcHJvcGVydGllc1xuICAgIGRlbGV0ZSByZXNvdXJjZS5jb3VudFRva2VucztcbiAgICByZXR1cm4gcmVzb3VyY2U7XG59XG5mdW5jdGlvbiBtYWtlQmV0YVJlc291cmNlKGNsaWVudCkge1xuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IFJlc291cmNlcy5CZXRhKGNsaWVudCk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSdyZSBkZWxldGluZyBub24tb3B0aW9uYWwgcHJvcGVydGllc1xuICAgIGRlbGV0ZSByZXNvdXJjZS5wcm9tcHRDYWNoaW5nO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igd2UncmUgZGVsZXRpbmcgbm9uLW9wdGlvbmFsIHByb3BlcnRpZXNcbiAgICBkZWxldGUgcmVzb3VyY2UubWVzc2FnZXMuYmF0Y2hlcztcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlJ3JlIGRlbGV0aW5nIG5vbi1vcHRpb25hbCBwcm9wZXJ0aWVzXG4gICAgZGVsZXRlIHJlc291cmNlLm1lc3NhZ2VzLmNvdW50VG9rZW5zO1xuICAgIHJldHVybiByZXNvdXJjZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudC5tanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBDb3JlIGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL2NvcmUnO1xuaW1wb3J0ICogYXMgUmVzb3VyY2VzIGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQgeyBHb29nbGVBdXRoIH0gZnJvbSAnZ29vZ2xlLWF1dGgtbGlicmFyeSc7XG5jb25zdCBERUZBVUxUX1ZFUlNJT04gPSAndmVydGV4LTIwMjMtMTAtMTYnO1xuY29uc3QgTU9ERUxfRU5EUE9JTlRTID0gbmV3IFNldChbJy92MS9tZXNzYWdlcycsICcvdjEvbWVzc2FnZXM/YmV0YT10cnVlJ10pO1xuZXhwb3J0IGNsYXNzIEFudGhyb3BpY1ZlcnRleCBleHRlbmRzIENvcmUuQVBJQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBBUEkgQ2xpZW50IGZvciBpbnRlcmZhY2luZyB3aXRoIHRoZSBBbnRocm9waWMgVmVydGV4IEFQSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gb3B0cy5hY2Nlc3NUb2tlblxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gb3B0cy5wcm9qZWN0SWRcbiAgICAgKiBAcGFyYW0ge0dvb2dsZUF1dGh9IG9wdHMuZ29vZ2xlQXV0aCAtIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGdvb2dsZSBhdXRoIGNvbmZpZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW29wdHMucmVnaW9uPXByb2Nlc3MuZW52WydDTE9VRF9NTF9SRUdJT04nXV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYmFzZVVSTD1wcm9jZXNzLmVudlsnQU5USFJPUElDX1ZFUlRFWF9fQkFTRV9VUkwnXSA/PyBodHRwczovLyR7cmVnaW9ufS1haXBsYXRmb3JtLmdvb2dsZWFwaXMuY29tL3YxXSAtIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJhc2UgVVJMIGZvciB0aGUgQVBJLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lb3V0PTEwIG1pbnV0ZXNdIC0gVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlIGNsaWVudCB3aWxsIHdhaXQgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHRpbWluZyBvdXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmh0dHBBZ2VudF0gLSBBbiBIVFRQIGFnZW50IHVzZWQgdG8gbWFuYWdlIEhUVFAocykgY29ubmVjdGlvbnMuXG4gICAgICogQHBhcmFtIHtDb3JlLkZldGNofSBbb3B0cy5mZXRjaF0gLSBTcGVjaWZ5IGEgY3VzdG9tIGBmZXRjaGAgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1heFJldHJpZXM9Ml0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhlIGNsaWVudCB3aWxsIHJldHJ5IGEgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge0NvcmUuSGVhZGVyc30gb3B0cy5kZWZhdWx0SGVhZGVycyAtIERlZmF1bHQgaGVhZGVycyB0byBpbmNsdWRlIHdpdGggZXZlcnkgcmVxdWVzdCB0byB0aGUgQVBJLlxuICAgICAqIEBwYXJhbSB7Q29yZS5EZWZhdWx0UXVlcnl9IG9wdHMuZGVmYXVsdFF1ZXJ5IC0gRGVmYXVsdCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgd2l0aCBldmVyeSByZXF1ZXN0IHRvIHRoZSBBUEkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoeyBiYXNlVVJMID0gQ29yZS5yZWFkRW52KCdBTlRIUk9QSUNfVkVSVEVYX0JBU0VfVVJMJyksIHJlZ2lvbiA9IENvcmUucmVhZEVudignQ0xPVURfTUxfUkVHSU9OJykgPz8gbnVsbCwgcHJvamVjdElkID0gQ29yZS5yZWFkRW52KCdBTlRIUk9QSUNfVkVSVEVYX1BST0pFQ1RfSUQnKSA/PyBudWxsLCAuLi5vcHRzIH0gPSB7fSkge1xuICAgICAgICBpZiAoIXJlZ2lvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWdpb24gd2FzIGdpdmVuLiBUaGUgY2xpZW50IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCB0aGUgYHJlZ2lvbmAgb3B0aW9uIG9yIHRoZSBgQ0xPVURfTUxfUkVHSU9OYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzaG91bGQgYmUgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgYmFzZVVSTDogYmFzZVVSTCB8fCBgaHR0cHM6Ly8ke3JlZ2lvbn0tYWlwbGF0Zm9ybS5nb29nbGVhcGlzLmNvbS92MWAsXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCA/PyA2MDAwMDAgLyogMTAgbWludXRlcyAqLyxcbiAgICAgICAgICAgIGh0dHBBZ2VudDogb3B0aW9ucy5odHRwQWdlbnQsXG4gICAgICAgICAgICBtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMsXG4gICAgICAgICAgICBmZXRjaDogb3B0aW9ucy5mZXRjaCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBtYWtlTWVzc2FnZXNSZXNvdXJjZSh0aGlzKTtcbiAgICAgICAgdGhpcy5iZXRhID0gbWFrZUJldGFSZXNvdXJjZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucmVnaW9uID0gcmVnaW9uO1xuICAgICAgICB0aGlzLnByb2plY3RJZCA9IHByb2plY3RJZDtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IG9wdGlvbnMuYWNjZXNzVG9rZW4gPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fYXV0aCA9XG4gICAgICAgICAgICBvcHRpb25zLmdvb2dsZUF1dGggPz8gbmV3IEdvb2dsZUF1dGgoeyBzY29wZXM6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2Nsb3VkLXBsYXRmb3JtJyB9KTtcbiAgICAgICAgdGhpcy5fYXV0aENsaWVudFByb21pc2UgPSB0aGlzLl9hdXRoLmdldENsaWVudCgpO1xuICAgIH1cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmRlZmF1bHRRdWVyeTtcbiAgICB9XG4gICAgZGVmYXVsdEhlYWRlcnMob3B0cykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuZGVmYXVsdEhlYWRlcnMob3B0cyksXG4gICAgICAgICAgICAuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRIZWFkZXJzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGF1dGhDbGllbnQgPSBhd2FpdCB0aGlzLl9hdXRoQ2xpZW50UHJvbWlzZTtcbiAgICAgICAgY29uc3QgYXV0aEhlYWRlcnMgPSBhd2FpdCBhdXRoQ2xpZW50LmdldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgICAgIGNvbnN0IHByb2plY3RJZCA9IGF1dGhDbGllbnQucHJvamVjdElkID8/IGF1dGhIZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J107XG4gICAgICAgIGlmICghdGhpcy5wcm9qZWN0SWQgJiYgcHJvamVjdElkKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RJZCA9IHByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSB7IC4uLmF1dGhIZWFkZXJzLCAuLi5vcHRpb25zLmhlYWRlcnMgfTtcbiAgICB9XG4gICAgYnVpbGRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKENvcmUuaXNPYmoob3B0aW9ucy5ib2R5KSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSByZXF1ZXN0IGJvZHkgc28gdGhhdCBjb2RlIHRoYXQgbXV0YXRlcyBpdCBsYXRlclxuICAgICAgICAgICAgLy8gZG9lc24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIHVzZXItcHJvdmlkZWQgb2JqZWN0XG4gICAgICAgICAgICBvcHRpb25zLmJvZHkgPSB7IC4uLm9wdGlvbnMuYm9keSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChDb3JlLmlzT2JqKG9wdGlvbnMuYm9keSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5ib2R5WydhbnRocm9waWNfdmVyc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ib2R5WydhbnRocm9waWNfdmVyc2lvbiddID0gREVGQVVMVF9WRVJTSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChNT0RFTF9FTkRQT0lOVFMuaGFzKG9wdGlvbnMucGF0aCkgJiYgb3B0aW9ucy5tZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2plY3RJZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcHJvamVjdElkIHdhcyBnaXZlbiBhbmQgaXQgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gY3JlZGVudGlhbHMuIFRoZSBjbGllbnQgc2hvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIHRoZSBgcHJvamVjdElkYCBvcHRpb24gb3IgdGhlIGBBTlRIUk9QSUNfVkVSVEVYX1BST0pFQ1RfSURgIGVudmlyb25tZW50IHZhcmlhYmxlIHNob3VsZCBiZSBzZXQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUNvcmUuaXNPYmoob3B0aW9ucy5ib2R5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVxdWVzdCBib2R5IHRvIGJlIGFuIG9iamVjdCBmb3IgcG9zdCAvdjEvbWVzc2FnZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5ib2R5Wydtb2RlbCddO1xuICAgICAgICAgICAgb3B0aW9ucy5ib2R5Wydtb2RlbCddID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gb3B0aW9ucy5ib2R5WydzdHJlYW0nXSA/PyBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IHN0cmVhbSA/ICdzdHJlYW1SYXdQcmVkaWN0JyA6ICdyYXdQcmVkaWN0JztcbiAgICAgICAgICAgIG9wdGlvbnMucGF0aCA9IGAvcHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vbG9jYXRpb25zLyR7dGhpcy5yZWdpb259L3B1Ymxpc2hlcnMvYW50aHJvcGljL21vZGVscy8ke21vZGVsfToke3NwZWNpZmllcn1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBhdGggPT09ICcvdjEvbWVzc2FnZXMvY291bnRfdG9rZW5zJyB8fFxuICAgICAgICAgICAgKG9wdGlvbnMucGF0aCA9PSAnL3YxL21lc3NhZ2VzL2NvdW50X3Rva2Vucz9iZXRhPXRydWUnICYmIG9wdGlvbnMubWV0aG9kID09PSAncG9zdCcpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvamVjdElkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwcm9qZWN0SWQgd2FzIGdpdmVuIGFuZCBpdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSBjcmVkZW50aWFscy4gVGhlIGNsaWVudCBzaG91bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggdGhlIGBwcm9qZWN0SWRgIG9wdGlvbiBvciB0aGUgYEFOVEhST1BJQ19WRVJURVhfUFJPSkVDVF9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2hvdWxkIGJlIHNldC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMucGF0aCA9IGAvcHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vbG9jYXRpb25zLyR7dGhpcy5yZWdpb259L3B1Ymxpc2hlcnMvYW50aHJvcGljL21vZGVscy9jb3VudC10b2tlbnM6cmF3UHJlZGljdGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmJ1aWxkUmVxdWVzdChvcHRpb25zKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlTWVzc2FnZXNSZXNvdXJjZShjbGllbnQpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBSZXNvdXJjZXMuTWVzc2FnZXMoY2xpZW50KTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlJ3JlIGRlbGV0aW5nIG5vbi1vcHRpb25hbCBwcm9wZXJ0aWVzXG4gICAgZGVsZXRlIHJlc291cmNlLmJhdGNoZXM7XG4gICAgcmV0dXJuIHJlc291cmNlO1xufVxuZnVuY3Rpb24gbWFrZUJldGFSZXNvdXJjZShjbGllbnQpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBSZXNvdXJjZXMuQmV0YShjbGllbnQpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igd2UncmUgZGVsZXRpbmcgbm9uLW9wdGlvbmFsIHByb3BlcnRpZXNcbiAgICBkZWxldGUgcmVzb3VyY2UucHJvbXB0Q2FjaGluZztcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlJ3JlIGRlbGV0aW5nIG5vbi1vcHRpb25hbCBwcm9wZXJ0aWVzXG4gICAgZGVsZXRlIHJlc291cmNlLm1lc3NhZ2VzLmJhdGNoZXM7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSdyZSBkZWxldGluZyBub24tb3B0aW9uYWwgcHJvcGVydGllc1xuICAgIGRlbGV0ZSByZXNvdXJjZS5tZXNzYWdlcy5jb3VudFRva2VucztcbiAgICByZXR1cm4gcmVzb3VyY2U7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnQubWpzLm1hcCIsCiAgICAiaW1wb3J0ICdAYW50aHJvcGljLWFpL3Nkay9zaGltcy9ub2RlJ1xuaW1wb3J0IEFudGhyb3BpYywgeyBBUElDb25uZWN0aW9uRXJyb3IsIEFQSUVycm9yIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsnXG5pbXBvcnQgeyBBbnRocm9waWNCZWRyb2NrIH0gZnJvbSAnQGFudGhyb3BpYy1haS9iZWRyb2NrLXNkaydcbmltcG9ydCB7IEFudGhyb3BpY1ZlcnRleCB9IGZyb20gJ0BhbnRocm9waWMtYWkvdmVydGV4LXNkaydcbmltcG9ydCB0eXBlIHsgQmV0YVVzYWdlIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2JldGEvbWVzc2FnZXMvbWVzc2FnZXMubWpzJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCAnZG90ZW52L2NvbmZpZydcbmltcG9ydCB7IGdldEJldGFzIH0gZnJvbSAnLi4vdXRpbHMvYmV0YXMuanMnXG5cbmltcG9ydCB7IGFkZFRvVG90YWxDb3N0IH0gZnJvbSAnLi4vY29zdC10cmFja2VyLmpzJ1xuaW1wb3J0IHR5cGUgeyBBc3Npc3RhbnRNZXNzYWdlLCBVc2VyTWVzc2FnZSB9IGZyb20gJy4uL3F1ZXJ5LmpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBnZXRBbnRocm9waWNBcGlLZXksIGdldE9yQ3JlYXRlVXNlcklEIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IsIFNFU1NJT05fSUQgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBVU0VSX0FHRU5UIH0gZnJvbSAnLi4vdXRpbHMvaHR0cC5qcydcbmltcG9ydCB7XG4gIGNyZWF0ZUFzc2lzdGFudEFQSUVycm9yTWVzc2FnZSxcbiAgbm9ybWFsaXplQ29udGVudEZyb21BUEksXG59IGZyb20gJy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgY291bnRUb2tlbnMgfSBmcm9tICcuLi91dGlscy90b2tlbnMuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4vc3RhdHNpZy5qcydcbmltcG9ydCB7IHdpdGhWQ1IgfSBmcm9tICcuL3Zjci5qcydcbmltcG9ydCB7IHpvZFRvSnNvblNjaGVtYSB9IGZyb20gJ3pvZC10by1qc29uLXNjaGVtYSdcbmltcG9ydCB0eXBlIHsgQmV0YU1lc3NhZ2VTdHJlYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9saWIvQmV0YU1lc3NhZ2VTdHJlYW0ubWpzJ1xuaW1wb3J0IHR5cGUge1xuICBNZXNzYWdlIGFzIEFQSU1lc3NhZ2UsXG4gIE1lc3NhZ2VQYXJhbSxcbiAgVGV4dEJsb2NrUGFyYW0sXG59IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBTTUFMTF9GQVNUX01PREVMLCBVU0VfQkVEUk9DSywgVVNFX1ZFUlRFWCB9IGZyb20gJy4uL3V0aWxzL21vZGVsLmpzJ1xuaW1wb3J0IHsgZ2V0Q0xJU3lzcHJvbXB0UHJlZml4IH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb21wdHMuanMnXG5pbXBvcnQgeyBnZXRWZXJ0ZXhSZWdpb25Gb3JNb2RlbCB9IGZyb20gJy4uL3V0aWxzL21vZGVsLmpzJ1xuXG5pbnRlcmZhY2UgU3RyZWFtUmVzcG9uc2UgZXh0ZW5kcyBBUElNZXNzYWdlIHtcbiAgdHRmdE1zPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBBUElfRVJST1JfTUVTU0FHRV9QUkVGSVggPSAnQVBJIEVycm9yJ1xuZXhwb3J0IGNvbnN0IFBST01QVF9UT09fTE9OR19FUlJPUl9NRVNTQUdFID0gJ1Byb21wdCBpcyB0b28gbG9uZydcbmV4cG9ydCBjb25zdCBDUkVESVRfQkFMQU5DRV9UT09fTE9XX0VSUk9SX01FU1NBR0UgPSAnQ3JlZGl0IGJhbGFuY2UgaXMgdG9vIGxvdydcbmV4cG9ydCBjb25zdCBJTlZBTElEX0FQSV9LRVlfRVJST1JfTUVTU0FHRSA9XG4gICdJbnZhbGlkIEFQSSBrZXkgwrcgUGxlYXNlIHJ1biAvbG9naW4nXG5leHBvcnQgY29uc3QgTk9fQ09OVEVOVF9NRVNTQUdFID0gJyhubyBjb250ZW50KSdcbmNvbnN0IFBST01QVF9DQUNISU5HX0VOQUJMRUQgPSAhcHJvY2Vzcy5lbnYuRElTQUJMRV9QUk9NUFRfQ0FDSElOR1xuXG4vLyBAc2VlIGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvYWJvdXQtY2xhdWRlL21vZGVscyNtb2RlbC1jb21wYXJpc29uLXRhYmxlXG5jb25zdCBIQUlLVV9DT1NUX1BFUl9NSUxMSU9OX0lOUFVUX1RPS0VOUyA9IDAuOFxuY29uc3QgSEFJS1VfQ09TVF9QRVJfTUlMTElPTl9PVVRQVVRfVE9LRU5TID0gNFxuY29uc3QgSEFJS1VfQ09TVF9QRVJfTUlMTElPTl9QUk9NUFRfQ0FDSEVfV1JJVEVfVE9LRU5TID0gMVxuY29uc3QgSEFJS1VfQ09TVF9QRVJfTUlMTElPTl9QUk9NUFRfQ0FDSEVfUkVBRF9UT0tFTlMgPSAwLjA4XG5cbmNvbnN0IFNPTk5FVF9DT1NUX1BFUl9NSUxMSU9OX0lOUFVUX1RPS0VOUyA9IDNcbmNvbnN0IFNPTk5FVF9DT1NUX1BFUl9NSUxMSU9OX09VVFBVVF9UT0tFTlMgPSAxNVxuY29uc3QgU09OTkVUX0NPU1RfUEVSX01JTExJT05fUFJPTVBUX0NBQ0hFX1dSSVRFX1RPS0VOUyA9IDMuNzVcbmNvbnN0IFNPTk5FVF9DT1NUX1BFUl9NSUxMSU9OX1BST01QVF9DQUNIRV9SRUFEX1RPS0VOUyA9IDAuM1xuXG5leHBvcnQgY29uc3QgTUFJTl9RVUVSWV9URU1QRVJBVFVSRSA9IDEgLy8gdG8gZ2V0IG1vcmUgdmFyaWF0aW9uIGZvciBiaW5hcnkgZmVlZGJhY2tcblxuZnVuY3Rpb24gZ2V0TWV0YWRhdGEoKSB7XG4gIHJldHVybiB7XG4gICAgdXNlcl9pZDogYCR7Z2V0T3JDcmVhdGVVc2VySUQoKX1fJHtTRVNTSU9OX0lEfWAsXG4gIH1cbn1cblxuY29uc3QgTUFYX1JFVFJJRVMgPSBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdTV0VfQkVOQ0gnID8gMTAwIDogMTBcbmNvbnN0IEJBU0VfREVMQVlfTVMgPSA1MDBcblxuaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIG1heFJldHJpZXM/OiBudW1iZXJcbn1cblxuZnVuY3Rpb24gZ2V0UmV0cnlEZWxheShcbiAgYXR0ZW1wdDogbnVtYmVyLFxuICByZXRyeUFmdGVySGVhZGVyPzogc3RyaW5nIHwgbnVsbCxcbik6IG51bWJlciB7XG4gIGlmIChyZXRyeUFmdGVySGVhZGVyKSB7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlSW50KHJldHJ5QWZ0ZXJIZWFkZXIsIDEwKVxuICAgIGlmICghaXNOYU4oc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBzZWNvbmRzICogMTAwMFxuICAgIH1cbiAgfVxuICByZXR1cm4gTWF0aC5taW4oQkFTRV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSwgMzIwMDApIC8vIE1heCAzMnMgZGVsYXlcbn1cblxuZnVuY3Rpb24gc2hvdWxkUmV0cnkoZXJyb3I6IEFQSUVycm9yKTogYm9vbGVhbiB7XG4gIC8vIENoZWNrIGZvciBvdmVybG9hZGVkIGVycm9ycyBmaXJzdCBhbmQgb25seSByZXRyeSBmb3IgU1dFX0JFTkNIXG4gIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnXCJ0eXBlXCI6XCJvdmVybG9hZGVkX2Vycm9yXCInKSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdTV0VfQkVOQ0gnXG4gIH1cblxuICAvLyBOb3RlIHRoaXMgaXMgbm90IGEgc3RhbmRhcmQgaGVhZGVyLlxuICBjb25zdCBzaG91bGRSZXRyeUhlYWRlciA9IGVycm9yLmhlYWRlcnM/LlsneC1zaG91bGQtcmV0cnknXVxuXG4gIC8vIElmIHRoZSBzZXJ2ZXIgZXhwbGljaXRseSBzYXlzIHdoZXRoZXIgb3Igbm90IHRvIHJldHJ5LCBvYmV5LlxuICBpZiAoc2hvdWxkUmV0cnlIZWFkZXIgPT09ICd0cnVlJykgcmV0dXJuIHRydWVcbiAgaWYgKHNob3VsZFJldHJ5SGVhZGVyID09PSAnZmFsc2UnKSByZXR1cm4gZmFsc2VcblxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBUElDb25uZWN0aW9uRXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKCFlcnJvci5zdGF0dXMpIHJldHVybiBmYWxzZVxuXG4gIC8vIFJldHJ5IG9uIHJlcXVlc3QgdGltZW91dHMuXG4gIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOCkgcmV0dXJuIHRydWVcblxuICAvLyBSZXRyeSBvbiBsb2NrIHRpbWVvdXRzLlxuICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDkpIHJldHVybiB0cnVlXG5cbiAgLy8gUmV0cnkgb24gcmF0ZSBsaW1pdHMuXG4gIGlmIChlcnJvci5zdGF0dXMgPT09IDQyOSkgcmV0dXJuIHRydWVcblxuICAvLyBSZXRyeSBpbnRlcm5hbCBlcnJvcnMuXG4gIGlmIChlcnJvci5zdGF0dXMgJiYgZXJyb3Iuc3RhdHVzID49IDUwMCkgcmV0dXJuIHRydWVcblxuICByZXR1cm4gZmFsc2Vcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2l0aFJldHJ5PFQ+KFxuICBvcGVyYXRpb246IChhdHRlbXB0OiBudW1iZXIpID0+IFByb21pc2U8VD4sXG4gIG9wdGlvbnM6IFJldHJ5T3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG1heFJldHJpZXMgPSBvcHRpb25zLm1heFJldHJpZXMgPz8gTUFYX1JFVFJJRVNcbiAgbGV0IGxhc3RFcnJvcjogdW5rbm93blxuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heFJldHJpZXMgKyAxOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG9wZXJhdGlvbihhdHRlbXB0KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsYXN0RXJyb3IgPSBlcnJvclxuXG4gICAgICAvLyBPbmx5IHJldHJ5IGlmIHRoZSBlcnJvciBpbmRpY2F0ZXMgd2Ugc2hvdWxkXG4gICAgICBpZiAoXG4gICAgICAgIGF0dGVtcHQgPiBtYXhSZXRyaWVzIHx8XG4gICAgICAgICEoZXJyb3IgaW5zdGFuY2VvZiBBUElFcnJvcikgfHxcbiAgICAgICAgIXNob3VsZFJldHJ5KGVycm9yKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgICAvLyBHZXQgcmV0cnktYWZ0ZXIgaGVhZGVyIGlmIGF2YWlsYWJsZVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGVycm9yLmhlYWRlcnM/LlsncmV0cnktYWZ0ZXInXSA/PyBudWxsXG4gICAgICBjb25zdCBkZWxheU1zID0gZ2V0UmV0cnlEZWxheShhdHRlbXB0LCByZXRyeUFmdGVyKVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCAg4o6/ICAke2NoYWxrLnJlZChgQVBJICR7ZXJyb3IubmFtZX0gKCR7ZXJyb3IubWVzc2FnZX0pIMK3IFJldHJ5aW5nIGluICR7TWF0aC5yb3VuZChkZWxheU1zIC8gMTAwMCl9IHNlY29uZHPigKYgKGF0dGVtcHQgJHthdHRlbXB0fS8ke21heFJldHJpZXN9KWApfWAsXG4gICAgICApXG5cbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfcmV0cnknLCB7XG4gICAgICAgIGF0dGVtcHQ6IFN0cmluZyhhdHRlbXB0KSxcbiAgICAgICAgZGVsYXlNczogU3RyaW5nKGRlbGF5TXMpLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgc3RhdHVzOiBTdHJpbmcoZXJyb3Iuc3RhdHVzKSxcbiAgICAgICAgcHJvdmlkZXI6IFVTRV9CRURST0NLID8gJ2JlZHJvY2snIDogVVNFX1ZFUlRFWCA/ICd2ZXJ0ZXgnIDogJzFwJyxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheU1zKSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBsYXN0RXJyb3Jcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUFwaUtleShhcGlLZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBhbnRocm9waWMgPSBuZXcgQW50aHJvcGljKHtcbiAgICBhcGlLZXksXG4gICAgZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXI6IHRydWUsXG4gICAgbWF4UmV0cmllczogMyxcbiAgICBkZWZhdWx0SGVhZGVyczoge1xuICAgICAgJ1VzZXItQWdlbnQnOiBVU0VSX0FHRU5ULFxuICAgIH0sXG4gIH0pXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3aXRoUmV0cnkoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gU01BTExfRkFTVF9NT0RFTFxuICAgICAgICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVBhcmFtW10gPSBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICd0ZXN0JyB9XVxuICAgICAgICBhd2FpdCBhbnRocm9waWMubWVzc2FnZXMuY3JlYXRlKHtcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBtYXhfdG9rZW5zOiAxLFxuICAgICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICAgIHRlbXBlcmF0dXJlOiAwLFxuICAgICAgICAgIG1ldGFkYXRhOiBnZXRNZXRhZGF0YSgpLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSxcbiAgICAgIHsgbWF4UmV0cmllczogMiB9LCAvLyBVc2UgZmV3ZXIgcmV0cmllcyBmb3IgQVBJIGtleSB2ZXJpZmljYXRpb25cbiAgICApXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dFcnJvcihlcnJvcilcbiAgICAvLyBDaGVjayBmb3IgYXV0aGVudGljYXRpb24gZXJyb3JcbiAgICBpZiAoXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFxuICAgICAgICAne1widHlwZVwiOlwiZXJyb3JcIixcImVycm9yXCI6e1widHlwZVwiOlwiYXV0aGVudGljYXRpb25fZXJyb3JcIixcIm1lc3NhZ2VcIjpcImludmFsaWQgeC1hcGkta2V5XCJ9fScsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlU3RyZWFtKFxuICBzdHJlYW06IEJldGFNZXNzYWdlU3RyZWFtLFxuKTogUHJvbWlzZTxTdHJlYW1SZXNwb25zZT4ge1xuICBjb25zdCBzdHJlYW1TdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gIGxldCB0dGZ0TXM6IG51bWJlciB8IHVuZGVmaW5lZFxuXG4gIC8vIFRPRE8oYmVuKTogQ29uc2lkZXIgc2hvd2luZyBhbiBpbmNyZW1lbnRhbCBwcm9ncmVzcyBpbmRpY2F0b3IuXG4gIGZvciBhd2FpdCAoY29uc3QgcGFydCBvZiBzdHJlYW0pIHtcbiAgICBpZiAocGFydC50eXBlID09PSAnbWVzc2FnZV9zdGFydCcpIHtcbiAgICAgIHR0ZnRNcyA9IERhdGUubm93KCkgLSBzdHJlYW1TdGFydFRpbWVcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaW5hbFJlc3BvbnNlID0gYXdhaXQgc3RyZWFtLmZpbmFsTWVzc2FnZSgpXG4gIHJldHVybiB7XG4gICAgLi4uZmluYWxSZXNwb25zZSxcbiAgICB0dGZ0TXMsXG4gIH1cbn1cblxubGV0IGFudGhyb3BpY0NsaWVudDogQW50aHJvcGljIHwgbnVsbCA9IG51bGxcblxuLyoqXG4gKiBHZXQgdGhlIEFudGhyb3BpYyBjbGllbnQsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFudGhyb3BpY0NsaWVudChtb2RlbD86IHN0cmluZyk6IEFudGhyb3BpYyB7XG4gIGlmIChhbnRocm9waWNDbGllbnQpIHtcbiAgICByZXR1cm4gYW50aHJvcGljQ2xpZW50XG4gIH1cblxuICBjb25zdCByZWdpb24gPSBnZXRWZXJ0ZXhSZWdpb25Gb3JNb2RlbChtb2RlbClcblxuICBjb25zdCBkZWZhdWx0SGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAneC1hcHAnOiAnY2xpJyxcbiAgICAnVXNlci1BZ2VudCc6IFVTRVJfQUdFTlQsXG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkFOVEhST1BJQ19BVVRIX1RPS0VOKSB7XG4gICAgZGVmYXVsdEhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9XG4gICAgICBgQmVhcmVyICR7cHJvY2Vzcy5lbnYuQU5USFJPUElDX0FVVEhfVE9LRU59YFxuICB9XG5cbiAgY29uc3QgQVJHUyA9IHtcbiAgICBkZWZhdWx0SGVhZGVycyxcbiAgICBtYXhSZXRyaWVzOiAwLCAvLyBEaXNhYmxlZCBhdXRvLXJldHJ5IGluIGZhdm9yIG9mIG1hbnVhbCBpbXBsZW1lbnRhdGlvblxuICAgIHRpbWVvdXQ6IHBhcnNlSW50KHByb2Nlc3MuZW52LkFQSV9USU1FT1VUX01TIHx8IFN0cmluZyg2MCAqIDEwMDApLCAxMCksXG4gIH1cbiAgaWYgKFVTRV9CRURST0NLKSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFudGhyb3BpY0JlZHJvY2soQVJHUylcbiAgICBhbnRocm9waWNDbGllbnQgPSBjbGllbnRcbiAgICByZXR1cm4gY2xpZW50XG4gIH1cbiAgaWYgKFVTRV9WRVJURVgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhBcmdzID0ge1xuICAgICAgLi4uQVJHUyxcbiAgICAgIHJlZ2lvbjogcmVnaW9uIHx8IHByb2Nlc3MuZW52LkNMT1VEX01MX1JFR0lPTiB8fCAndXMtZWFzdDUnLFxuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQW50aHJvcGljVmVydGV4KHZlcnRleEFyZ3MpXG4gICAgYW50aHJvcGljQ2xpZW50ID0gY2xpZW50XG4gICAgcmV0dXJuIGNsaWVudFxuICB9XG5cbiAgY29uc3QgYXBpS2V5ID0gZ2V0QW50aHJvcGljQXBpS2V5KClcbiAgaWYgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgJiYgIWFwaUtleSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgICdbQU5ULU9OTFldIFBsZWFzZSBzZXQgdGhlIEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHVzZSB0aGUgQ0xJLiBUbyBjcmVhdGUgYSBuZXcga2V5LCBnbyB0byBodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9zZXR0aW5ncy9rZXlzLicsXG4gICAgICApLFxuICAgIClcbiAgfVxuICBhbnRocm9waWNDbGllbnQgPSBuZXcgQW50aHJvcGljKHtcbiAgICBhcGlLZXksXG4gICAgZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXI6IHRydWUsXG4gICAgLi4uQVJHUyxcbiAgfSlcbiAgcmV0dXJuIGFudGhyb3BpY0NsaWVudFxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSBBbnRocm9waWMgY2xpZW50IHRvIG51bGwsIGZvcmNpbmcgYSBuZXcgY2xpZW50IHRvIGJlIGNyZWF0ZWQgb24gbmV4dCB1c2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0QW50aHJvcGljQ2xpZW50KCk6IHZvaWQge1xuICBhbnRocm9waWNDbGllbnQgPSBudWxsXG59XG5cbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBkaWZmZXJlbnQgY2xpZW50IHR5cGVzOlxuICpcbiAqIERpcmVjdCBBUEk6XG4gKiAtIEFOVEhST1BJQ19BUElfS0VZOiBSZXF1aXJlZCBmb3IgZGlyZWN0IEFQSSBhY2Nlc3NcbiAqXG4gKiBBV1MgQmVkcm9jazpcbiAqIC0gQVdTIGNyZWRlbnRpYWxzIGNvbmZpZ3VyZWQgdmlhIGF3cy1zZGsgZGVmYXVsdHNcbiAqXG4gKiBWZXJ0ZXggQUk6XG4gKiAtIE1vZGVsLXNwZWNpZmljIHJlZ2lvbiB2YXJpYWJsZXMgKGhpZ2hlc3QgcHJpb3JpdHkpOlxuICogICAtIFZFUlRFWF9SRUdJT05fQ0xBVURFXzNfNV9IQUlLVTogUmVnaW9uIGZvciBDbGF1ZGUgMy41IEhhaWt1IG1vZGVsXG4gKiAgIC0gVkVSVEVYX1JFR0lPTl9DTEFVREVfM181X1NPTk5FVDogUmVnaW9uIGZvciBDbGF1ZGUgMy41IFNvbm5ldCBtb2RlbFxuICogICAtIFZFUlRFWF9SRUdJT05fQ0xBVURFXzNfN19TT05ORVQ6IFJlZ2lvbiBmb3IgQ2xhdWRlIDMuNyBTb25uZXQgbW9kZWxcbiAqIC0gQ0xPVURfTUxfUkVHSU9OOiBPcHRpb25hbC4gVGhlIGRlZmF1bHQgR0NQIHJlZ2lvbiB0byB1c2UgZm9yIGFsbCBtb2RlbHNcbiAqICAgSWYgc3BlY2lmaWMgbW9kZWwgcmVnaW9uIG5vdCBzcGVjaWZpZWQgYWJvdmVcbiAqIC0gQU5USFJPUElDX1ZFUlRFWF9QUk9KRUNUX0lEOiBSZXF1aXJlZC4gWW91ciBHQ1AgcHJvamVjdCBJRFxuICogLSBTdGFuZGFyZCBHQ1AgY3JlZGVudGlhbHMgY29uZmlndXJlZCB2aWEgZ29vZ2xlLWF1dGgtbGlicmFyeVxuICpcbiAqIFByaW9yaXR5IGZvciBkZXRlcm1pbmluZyByZWdpb246XG4gKiAxLiBIYXJkY29kZWQgbW9kZWwtc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiAyLiBHbG9iYWwgQ0xPVURfTUxfUkVHSU9OIHZhcmlhYmxlXG4gKiAzLiBEZWZhdWx0IHJlZ2lvbiBmcm9tIGNvbmZpZ1xuICogNC4gRmFsbGJhY2sgcmVnaW9uICh1cy1lYXN0NSlcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlck1lc3NhZ2VUb01lc3NhZ2VQYXJhbShcbiAgbWVzc2FnZTogVXNlck1lc3NhZ2UsXG4gIGFkZENhY2hlID0gZmFsc2UsXG4pOiBNZXNzYWdlUGFyYW0ge1xuICBpZiAoYWRkQ2FjaGUpIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdGV4dDogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgICAgICAuLi4oUFJPTVBUX0NBQ0hJTkdfRU5BQkxFRFxuICAgICAgICAgICAgICA/IHsgY2FjaGVfY29udHJvbDogeyB0eXBlOiAnZXBoZW1lcmFsJyB9IH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudC5tYXAoKF8sIGkpID0+ICh7XG4gICAgICAgICAgLi4uXyxcbiAgICAgICAgICAuLi4oaSA9PT0gbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyBQUk9NUFRfQ0FDSElOR19FTkFCTEVEXG4gICAgICAgICAgICAgID8geyBjYWNoZV9jb250cm9sOiB7IHR5cGU6ICdlcGhlbWVyYWwnIH0gfVxuICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSkpLFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHJvbGU6ICd1c2VyJyxcbiAgICBjb250ZW50OiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaXN0YW50TWVzc2FnZVRvTWVzc2FnZVBhcmFtKFxuICBtZXNzYWdlOiBBc3Npc3RhbnRNZXNzYWdlLFxuICBhZGRDYWNoZSA9IGZhbHNlLFxuKTogTWVzc2FnZVBhcmFtIHtcbiAgaWYgKGFkZENhY2hlKSB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvbGU6ICdhc3Npc3RhbnQnLFxuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdGV4dDogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgICAgICAuLi4oUFJPTVBUX0NBQ0hJTkdfRU5BQkxFRFxuICAgICAgICAgICAgICA/IHsgY2FjaGVfY29udHJvbDogeyB0eXBlOiAnZXBoZW1lcmFsJyB9IH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm9sZTogJ2Fzc2lzdGFudCcsXG4gICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50Lm1hcCgoXywgaSkgPT4gKHtcbiAgICAgICAgICAuLi5fLFxuICAgICAgICAgIC4uLihpID09PSBtZXNzYWdlLm1lc3NhZ2UuY29udGVudC5sZW5ndGggLSAxICYmXG4gICAgICAgICAgXy50eXBlICE9PSAndGhpbmtpbmcnICYmXG4gICAgICAgICAgXy50eXBlICE9PSAncmVkYWN0ZWRfdGhpbmtpbmcnXG4gICAgICAgICAgICA/IFBST01QVF9DQUNISU5HX0VOQUJMRURcbiAgICAgICAgICAgICAgPyB7IGNhY2hlX2NvbnRyb2w6IHsgdHlwZTogJ2VwaGVtZXJhbCcgfSB9XG4gICAgICAgICAgICAgIDoge31cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9KSksXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2Fzc2lzdGFudCcsXG4gICAgY29udGVudDogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQsXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXRTeXNQcm9tcHRQcmVmaXgoc3lzdGVtUHJvbXB0OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgLy8gc3BsaXQgb3V0IHRoZSBmaXJzdCBibG9jayBvZiB0aGUgc3lzdGVtIHByb21wdCBhcyB0aGUgXCJwcmVmaXhcIiBmb3IgQVBJXG4gIC8vIHRvIG1hdGNoIG9uIGluIGh0dHBzOi8vY29uc29sZS5zdGF0c2lnLmNvbS80YUYzRXdhdGI2eFBWcEN3eGI1bkEzL2R5bmFtaWNfY29uZmlncy9jbGF1ZGVfY2xpX3N5c3RlbV9wcm9tcHRfcHJlZml4ZXNcbiAgY29uc3Qgc3lzdGVtUHJvbXB0Rmlyc3RCbG9jayA9IHN5c3RlbVByb21wdFswXSB8fCAnJ1xuICBjb25zdCBzeXN0ZW1Qcm9tcHRSZXN0ID0gc3lzdGVtUHJvbXB0LnNsaWNlKDEpXG4gIHJldHVybiBbc3lzdGVtUHJvbXB0Rmlyc3RCbG9jaywgc3lzdGVtUHJvbXB0UmVzdC5qb2luKCdcXG4nKV0uZmlsdGVyKEJvb2xlYW4pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBxdWVyeVNvbm5ldChcbiAgbWVzc2FnZXM6IChVc2VyTWVzc2FnZSB8IEFzc2lzdGFudE1lc3NhZ2UpW10sXG4gIHN5c3RlbVByb21wdDogc3RyaW5nW10sXG4gIG1heFRoaW5raW5nVG9rZW5zOiBudW1iZXIsXG4gIHRvb2xzOiBUb29sW10sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4gIG9wdGlvbnM6IHtcbiAgICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9uczogYm9vbGVhblxuICAgIG1vZGVsOiBzdHJpbmdcbiAgICBwcmVwZW5kQ0xJU3lzcHJvbXB0OiBib29sZWFuXG4gIH0sXG4pOiBQcm9taXNlPEFzc2lzdGFudE1lc3NhZ2U+IHtcbiAgcmV0dXJuIGF3YWl0IHdpdGhWQ1IobWVzc2FnZXMsICgpID0+XG4gICAgcXVlcnlTb25uZXRXaXRoUHJvbXB0Q2FjaGluZyhcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgbWF4VGhpbmtpbmdUb2tlbnMsXG4gICAgICB0b29scyxcbiAgICAgIHNpZ25hbCxcbiAgICAgIG9wdGlvbnMsXG4gICAgKSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U3lzdGVtUHJvbXB0V2l0aENvbnRleHQoXG4gIHN5c3RlbVByb21wdDogc3RyaW5nW10sXG4gIGNvbnRleHQ6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9LFxuKTogc3RyaW5nW10ge1xuICBpZiAoT2JqZWN0LmVudHJpZXMoY29udGV4dCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN5c3RlbVByb21wdFxuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5zeXN0ZW1Qcm9tcHQsXG4gICAgYFxcbkFzIHlvdSBhbnN3ZXIgdGhlIHVzZXIncyBxdWVzdGlvbnMsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29udGV4dDpcXG5gLFxuICAgIC4uLk9iamVjdC5lbnRyaWVzKGNvbnRleHQpLm1hcChcbiAgICAgIChba2V5LCB2YWx1ZV0pID0+IGA8Y29udGV4dCBuYW1lPVwiJHtrZXl9XCI+JHt2YWx1ZX08L2NvbnRleHQ+YCxcbiAgICApLFxuICBdXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5U29ubmV0V2l0aFByb21wdENhY2hpbmcoXG4gIG1lc3NhZ2VzOiAoVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlKVtdLFxuICBzeXN0ZW1Qcm9tcHQ6IHN0cmluZ1tdLFxuICBtYXhUaGlua2luZ1Rva2VuczogbnVtYmVyLFxuICB0b29sczogVG9vbFtdLFxuICBzaWduYWw6IEFib3J0U2lnbmFsLFxuICBvcHRpb25zOiB7XG4gICAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnM6IGJvb2xlYW5cbiAgICBtb2RlbDogc3RyaW5nXG4gICAgcHJlcGVuZENMSVN5c3Byb21wdDogYm9vbGVhblxuICB9LFxuKTogUHJvbWlzZTxBc3Npc3RhbnRNZXNzYWdlPiB7XG4gIGNvbnN0IGFudGhyb3BpYyA9IGF3YWl0IGdldEFudGhyb3BpY0NsaWVudChvcHRpb25zLm1vZGVsKVxuXG4gIC8vIFByZXBlbmQgc3lzdGVtIHByb21wdCBibG9jayBmb3IgZWFzeSBBUEkgaWRlbnRpZmljYXRpb25cbiAgaWYgKG9wdGlvbnMucHJlcGVuZENMSVN5c3Byb21wdCkge1xuICAgIC8vIExvZyBzdGF0cyBhYm91dCBmaXJzdCBibG9jayBmb3IgYW5hbHl6aW5nIHByZWZpeCBtYXRjaGluZyBjb25maWcgKHNlZSBodHRwczovL2NvbnNvbGUuc3RhdHNpZy5jb20vNGFGM0V3YXRiNnhQVnBDd3hiNW5BMy9keW5hbWljX2NvbmZpZ3MvY2xhdWRlX2NsaV9zeXN0ZW1fcHJvbXB0X3ByZWZpeGVzKVxuICAgIGNvbnN0IFtmaXJzdFN5c3Byb21wdEJsb2NrXSA9IHNwbGl0U3lzUHJvbXB0UHJlZml4KHN5c3RlbVByb21wdClcbiAgICBsb2dFdmVudCgndGVuZ3Vfc3lzcHJvbXB0X2Jsb2NrJywge1xuICAgICAgc25pcHBldDogZmlyc3RTeXNwcm9tcHRCbG9jaz8uc2xpY2UoMCwgMjApLFxuICAgICAgbGVuZ3RoOiBTdHJpbmcoZmlyc3RTeXNwcm9tcHRCbG9jaz8ubGVuZ3RoID8/IDApLFxuICAgICAgaGFzaDogZmlyc3RTeXNwcm9tcHRCbG9ja1xuICAgICAgICA/IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShmaXJzdFN5c3Byb21wdEJsb2NrKS5kaWdlc3QoJ2hleCcpXG4gICAgICAgIDogJycsXG4gICAgfSlcblxuICAgIHN5c3RlbVByb21wdCA9IFtnZXRDTElTeXNwcm9tcHRQcmVmaXgoKSwgLi4uc3lzdGVtUHJvbXB0XVxuICB9XG5cbiAgY29uc3Qgc3lzdGVtOiBUZXh0QmxvY2tQYXJhbVtdID0gc3BsaXRTeXNQcm9tcHRQcmVmaXgoc3lzdGVtUHJvbXB0KS5tYXAoXG4gICAgXyA9PiAoe1xuICAgICAgLi4uKFBST01QVF9DQUNISU5HX0VOQUJMRURcbiAgICAgICAgPyB7IGNhY2hlX2NvbnRyb2w6IHsgdHlwZTogJ2VwaGVtZXJhbCcgfSB9XG4gICAgICAgIDoge30pLFxuICAgICAgdGV4dDogXyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICB9KSxcbiAgKVxuXG4gIGNvbnN0IHRvb2xTY2hlbWFzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdG9vbHMubWFwKGFzeW5jIF8gPT4gKHtcbiAgICAgIG5hbWU6IF8ubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBhd2FpdCBfLnByb21wdCh7XG4gICAgICAgIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zOiBvcHRpb25zLmRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zLFxuICAgICAgfSksXG4gICAgICAvLyBVc2UgdG9vbCdzIEpTT04gc2NoZW1hIGRpcmVjdGx5IGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgY29udmVydCBab2Qgc2NoZW1hXG4gICAgICBpbnB1dF9zY2hlbWE6ICgnaW5wdXRKU09OU2NoZW1hJyBpbiBfICYmIF8uaW5wdXRKU09OU2NoZW1hXG4gICAgICAgID8gXy5pbnB1dEpTT05TY2hlbWFcbiAgICAgICAgOiB6b2RUb0pzb25TY2hlbWEoXy5pbnB1dFNjaGVtYSkpIGFzIEFudGhyb3BpYy5Ub29sLklucHV0U2NoZW1hLFxuICAgIH0pKSxcbiAgKVxuXG4gIGNvbnN0IGJldGFzID0gYXdhaXQgZ2V0QmV0YXMoKVxuICBjb25zdCB1c2VCZXRhcyA9IFBST01QVF9DQUNISU5HX0VOQUJMRUQgJiYgYmV0YXMubGVuZ3RoID4gMFxuICBsb2dFdmVudCgndGVuZ3VfYXBpX3F1ZXJ5Jywge1xuICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgIG1lc3NhZ2VzTGVuZ3RoOiBTdHJpbmcoXG4gICAgICBKU09OLnN0cmluZ2lmeShbLi4uc3lzdGVtLCAuLi5tZXNzYWdlcywgLi4udG9vbFNjaGVtYXNdKS5sZW5ndGgsXG4gICAgKSxcbiAgICB0ZW1wZXJhdHVyZTogU3RyaW5nKE1BSU5fUVVFUllfVEVNUEVSQVRVUkUpLFxuICAgIHByb3ZpZGVyOiBVU0VfQkVEUk9DSyA/ICdiZWRyb2NrJyA6IFVTRV9WRVJURVggPyAndmVydGV4JyA6ICcxcCcsXG4gICAgLi4uKHVzZUJldGFzID8geyBiZXRhczogYmV0YXMuam9pbignLCcpIH0gOiB7fSksXG4gIH0pXG5cbiAgY29uc3Qgc3RhcnRJbmNsdWRpbmdSZXRyaWVzID0gRGF0ZS5ub3coKVxuICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpXG4gIGxldCBhdHRlbXB0TnVtYmVyID0gMFxuICBsZXQgcmVzcG9uc2VcbiAgbGV0IHN0cmVhbTogQmV0YU1lc3NhZ2VTdHJlYW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgdHJ5IHtcbiAgICByZXNwb25zZSA9IGF3YWl0IHdpdGhSZXRyeShhc3luYyBhdHRlbXB0ID0+IHtcbiAgICAgIGF0dGVtcHROdW1iZXIgPSBhdHRlbXB0XG4gICAgICBzdGFydCA9IERhdGUubm93KClcbiAgICAgIGNvbnN0IHMgPSBhbnRocm9waWMuYmV0YS5tZXNzYWdlcy5zdHJlYW0oXG4gICAgICAgIHtcbiAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICBtYXhfdG9rZW5zOiBNYXRoLm1heChcbiAgICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zICsgMSxcbiAgICAgICAgICAgIGdldE1heFRva2Vuc0Zvck1vZGVsKG9wdGlvbnMubW9kZWwpLFxuICAgICAgICAgICksXG4gICAgICAgICAgbWVzc2FnZXM6IGFkZENhY2hlQnJlYWtwb2ludHMobWVzc2FnZXMpLFxuICAgICAgICAgIHRlbXBlcmF0dXJlOiBNQUlOX1FVRVJZX1RFTVBFUkFUVVJFLFxuICAgICAgICAgIHN5c3RlbSxcbiAgICAgICAgICB0b29sczogdG9vbFNjaGVtYXMsXG4gICAgICAgICAgLi4uKHVzZUJldGFzID8geyBiZXRhcyB9IDoge30pLFxuICAgICAgICAgIG1ldGFkYXRhOiBnZXRNZXRhZGF0YSgpLFxuICAgICAgICAgIC4uLihwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnICYmIG1heFRoaW5raW5nVG9rZW5zID4gMFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdGhpbmtpbmc6IHtcbiAgICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM6IG1heFRoaW5raW5nVG9rZW5zLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZWQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB7IHNpZ25hbCB9LFxuICAgICAgKVxuICAgICAgc3RyZWFtID0gc1xuICAgICAgcmV0dXJuIGhhbmRsZU1lc3NhZ2VTdHJlYW0ocylcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfZXJyb3InLCB7XG4gICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICBzdGF0dXM6IGVycm9yIGluc3RhbmNlb2YgQVBJRXJyb3IgPyBTdHJpbmcoZXJyb3Iuc3RhdHVzKSA6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2VDb3VudDogU3RyaW5nKG1lc3NhZ2VzLmxlbmd0aCksXG4gICAgICBtZXNzYWdlVG9rZW5zOiBTdHJpbmcoY291bnRUb2tlbnMobWVzc2FnZXMpKSxcbiAgICAgIGR1cmF0aW9uTXM6IFN0cmluZyhEYXRlLm5vdygpIC0gc3RhcnQpLFxuICAgICAgZHVyYXRpb25Nc0luY2x1ZGluZ1JldHJpZXM6IFN0cmluZyhEYXRlLm5vdygpIC0gc3RhcnRJbmNsdWRpbmdSZXRyaWVzKSxcbiAgICAgIGF0dGVtcHQ6IFN0cmluZyhhdHRlbXB0TnVtYmVyKSxcbiAgICAgIHByb3ZpZGVyOiBVU0VfQkVEUk9DSyA/ICdiZWRyb2NrJyA6IFVTRV9WRVJURVggPyAndmVydGV4JyA6ICcxcCcsXG4gICAgICByZXF1ZXN0SWQ6XG4gICAgICAgIChzdHJlYW0gYXMgQmV0YU1lc3NhZ2VTdHJlYW0gfCB1bmRlZmluZWQpPy5yZXF1ZXN0X2lkID8/IHVuZGVmaW5lZCxcbiAgICB9KVxuICAgIHJldHVybiBnZXRBc3Npc3RhbnRNZXNzYWdlRnJvbUVycm9yKGVycm9yKVxuICB9XG4gIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRcbiAgY29uc3QgZHVyYXRpb25Nc0luY2x1ZGluZ1JldHJpZXMgPSBEYXRlLm5vdygpIC0gc3RhcnRJbmNsdWRpbmdSZXRyaWVzXG4gIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfc3VjY2VzcycsIHtcbiAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICBtZXNzYWdlQ291bnQ6IFN0cmluZyhtZXNzYWdlcy5sZW5ndGgpLFxuICAgIG1lc3NhZ2VUb2tlbnM6IFN0cmluZyhjb3VudFRva2VucyhtZXNzYWdlcykpLFxuICAgIGlucHV0VG9rZW5zOiBTdHJpbmcocmVzcG9uc2UudXNhZ2UuaW5wdXRfdG9rZW5zKSxcbiAgICBvdXRwdXRUb2tlbnM6IFN0cmluZyhyZXNwb25zZS51c2FnZS5vdXRwdXRfdG9rZW5zKSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogU3RyaW5nKFxuICAgICAgKHJlc3BvbnNlLnVzYWdlIGFzIEJldGFVc2FnZSkuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMCxcbiAgICApLFxuICAgIHVuY2FjaGVkSW5wdXRUb2tlbnM6IFN0cmluZyhcbiAgICAgIChyZXNwb25zZS51c2FnZSBhcyBCZXRhVXNhZ2UpLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyA/PyAwLFxuICAgICksXG4gICAgZHVyYXRpb25NczogU3RyaW5nKGR1cmF0aW9uTXMpLFxuICAgIGR1cmF0aW9uTXNJbmNsdWRpbmdSZXRyaWVzOiBTdHJpbmcoZHVyYXRpb25Nc0luY2x1ZGluZ1JldHJpZXMpLFxuICAgIGF0dGVtcHQ6IFN0cmluZyhhdHRlbXB0TnVtYmVyKSxcbiAgICB0dGZ0TXM6IFN0cmluZyhyZXNwb25zZS50dGZ0TXMpLFxuICAgIHByb3ZpZGVyOiBVU0VfQkVEUk9DSyA/ICdiZWRyb2NrJyA6IFVTRV9WRVJURVggPyAndmVydGV4JyA6ICcxcCcsXG4gICAgcmVxdWVzdElkOlxuICAgICAgKHN0cmVhbSBhcyBCZXRhTWVzc2FnZVN0cmVhbSB8IHVuZGVmaW5lZCk/LnJlcXVlc3RfaWQgPz8gdW5kZWZpbmVkLFxuICAgIHN0b3BfcmVhc29uOiByZXNwb25zZS5zdG9wX3JlYXNvbiA/PyB1bmRlZmluZWQsXG4gIH0pXG5cbiAgY29uc3QgaW5wdXRUb2tlbnMgPSByZXNwb25zZS51c2FnZS5pbnB1dF90b2tlbnNcbiAgY29uc3Qgb3V0cHV0VG9rZW5zID0gcmVzcG9uc2UudXNhZ2Uub3V0cHV0X3Rva2Vuc1xuICBjb25zdCBjYWNoZVJlYWRJbnB1dFRva2VucyA9XG4gICAgKHJlc3BvbnNlLnVzYWdlIGFzIEJldGFVc2FnZSkuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMFxuICBjb25zdCBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgPVxuICAgIChyZXNwb25zZS51c2FnZSBhcyBCZXRhVXNhZ2UpLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyA/PyAwXG4gIGNvbnN0IGNvc3RVU0QgPVxuICAgIChpbnB1dFRva2VucyAvIDFfMDAwXzAwMCkgKiBTT05ORVRfQ09TVF9QRVJfTUlMTElPTl9JTlBVVF9UT0tFTlMgK1xuICAgIChvdXRwdXRUb2tlbnMgLyAxXzAwMF8wMDApICogU09OTkVUX0NPU1RfUEVSX01JTExJT05fT1VUUFVUX1RPS0VOUyArXG4gICAgKGNhY2hlUmVhZElucHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqXG4gICAgICBTT05ORVRfQ09TVF9QRVJfTUlMTElPTl9QUk9NUFRfQ0FDSEVfUkVBRF9UT0tFTlMgK1xuICAgIChjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgLyAxXzAwMF8wMDApICpcbiAgICAgIFNPTk5FVF9DT1NUX1BFUl9NSUxMSU9OX1BST01QVF9DQUNIRV9XUklURV9UT0tFTlNcblxuICBhZGRUb1RvdGFsQ29zdChjb3N0VVNELCBkdXJhdGlvbk1zSW5jbHVkaW5nUmV0cmllcylcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgY29udGVudDogbm9ybWFsaXplQ29udGVudEZyb21BUEkocmVzcG9uc2UuY29udGVudCksXG4gICAgICB1c2FnZToge1xuICAgICAgICAuLi5yZXNwb25zZS51c2FnZSxcbiAgICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHJlc3BvbnNlLnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VuczpcbiAgICAgICAgICByZXNwb25zZS51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb3N0VVNELFxuICAgIGR1cmF0aW9uTXMsXG4gICAgdHlwZTogJ2Fzc2lzdGFudCcsXG4gICAgdXVpZDogcmFuZG9tVVVJRCgpLFxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFzc2lzdGFudE1lc3NhZ2VGcm9tRXJyb3IoZXJyb3I6IHVua25vd24pOiBBc3Npc3RhbnRNZXNzYWdlIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJykpIHtcbiAgICByZXR1cm4gY3JlYXRlQXNzaXN0YW50QVBJRXJyb3JNZXNzYWdlKFBST01QVF9UT09fTE9OR19FUlJPUl9NRVNTQUdFKVxuICB9XG4gIGlmIChcbiAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnWW91ciBjcmVkaXQgYmFsYW5jZSBpcyB0b28gbG93JylcbiAgKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUFzc2lzdGFudEFQSUVycm9yTWVzc2FnZShDUkVESVRfQkFMQU5DRV9UT09fTE9XX0VSUk9SX01FU1NBR0UpXG4gIH1cbiAgaWYgKFxuICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICBlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3gtYXBpLWtleScpXG4gICkge1xuICAgIHJldHVybiBjcmVhdGVBc3Npc3RhbnRBUElFcnJvck1lc3NhZ2UoSU5WQUxJRF9BUElfS0VZX0VSUk9SX01FU1NBR0UpXG4gIH1cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlQXNzaXN0YW50QVBJRXJyb3JNZXNzYWdlKFxuICAgICAgYCR7QVBJX0VSUk9SX01FU1NBR0VfUFJFRklYfTogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgKVxuICB9XG4gIHJldHVybiBjcmVhdGVBc3Npc3RhbnRBUElFcnJvck1lc3NhZ2UoQVBJX0VSUk9SX01FU1NBR0VfUFJFRklYKVxufVxuXG5mdW5jdGlvbiBhZGRDYWNoZUJyZWFrcG9pbnRzKFxuICBtZXNzYWdlczogKFVzZXJNZXNzYWdlIHwgQXNzaXN0YW50TWVzc2FnZSlbXSxcbik6IE1lc3NhZ2VQYXJhbVtdIHtcbiAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobXNnLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBtc2cudHlwZSA9PT0gJ3VzZXInXG4gICAgICA/IHVzZXJNZXNzYWdlVG9NZXNzYWdlUGFyYW0obXNnLCBpbmRleCA+IG1lc3NhZ2VzLmxlbmd0aCAtIDMpXG4gICAgICA6IGFzc2lzdGFudE1lc3NhZ2VUb01lc3NhZ2VQYXJhbShtc2csIGluZGV4ID4gbWVzc2FnZXMubGVuZ3RoIC0gMylcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcXVlcnlIYWlrdVdpdGhQcm9tcHRDYWNoaW5nKHtcbiAgc3lzdGVtUHJvbXB0LFxuICB1c2VyUHJvbXB0LFxuICBhc3Npc3RhbnRQcm9tcHQsXG4gIHNpZ25hbCxcbn06IHtcbiAgc3lzdGVtUHJvbXB0OiBzdHJpbmdbXVxuICB1c2VyUHJvbXB0OiBzdHJpbmdcbiAgYXNzaXN0YW50UHJvbXB0Pzogc3RyaW5nXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG59KTogUHJvbWlzZTxBc3Npc3RhbnRNZXNzYWdlPiB7XG4gIGNvbnN0IGFudGhyb3BpYyA9IGF3YWl0IGdldEFudGhyb3BpY0NsaWVudChTTUFMTF9GQVNUX01PREVMKVxuICBjb25zdCBtb2RlbCA9IFNNQUxMX0ZBU1RfTU9ERUxcbiAgY29uc3QgbWVzc2FnZXMgPSBbXG4gICAge1xuICAgICAgcm9sZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgICAgY29udGVudDogdXNlclByb21wdCxcbiAgICB9LFxuICAgIC4uLihhc3Npc3RhbnRQcm9tcHRcbiAgICAgID8gW3sgcm9sZTogJ2Fzc2lzdGFudCcgYXMgY29uc3QsIGNvbnRlbnQ6IGFzc2lzdGFudFByb21wdCB9XVxuICAgICAgOiBbXSksXG4gIF1cblxuICBjb25zdCBzeXN0ZW06IFRleHRCbG9ja1BhcmFtW10gPSBzcGxpdFN5c1Byb21wdFByZWZpeChzeXN0ZW1Qcm9tcHQpLm1hcChcbiAgICBfID0+ICh7XG4gICAgICAuLi4oUFJPTVBUX0NBQ0hJTkdfRU5BQkxFRFxuICAgICAgICA/IHsgY2FjaGVfY29udHJvbDogeyB0eXBlOiAnZXBoZW1lcmFsJyB9IH1cbiAgICAgICAgOiB7fSksXG4gICAgICB0ZXh0OiBfLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgIH0pLFxuICApXG5cbiAgbG9nRXZlbnQoJ3Rlbmd1X2FwaV9xdWVyeScsIHtcbiAgICBtb2RlbCxcbiAgICBtZXNzYWdlc0xlbmd0aDogU3RyaW5nKEpTT04uc3RyaW5naWZ5KFsuLi5zeXN0ZW0sIC4uLm1lc3NhZ2VzXSkubGVuZ3RoKSxcbiAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICB9KVxuICBsZXQgYXR0ZW1wdE51bWJlciA9IDBcbiAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICBjb25zdCBzdGFydEluY2x1ZGluZ1JldHJpZXMgPSBEYXRlLm5vdygpXG4gIGxldCByZXNwb25zZTogU3RyZWFtUmVzcG9uc2VcbiAgbGV0IHN0cmVhbTogQmV0YU1lc3NhZ2VTdHJlYW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgdHJ5IHtcbiAgICByZXNwb25zZSA9IGF3YWl0IHdpdGhSZXRyeShhc3luYyBhdHRlbXB0ID0+IHtcbiAgICAgIGF0dGVtcHROdW1iZXIgPSBhdHRlbXB0XG4gICAgICBzdGFydCA9IERhdGUubm93KClcbiAgICAgIGNvbnN0IHMgPSBhbnRocm9waWMuYmV0YS5tZXNzYWdlcy5zdHJlYW0oXG4gICAgICAgIHtcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBtYXhfdG9rZW5zOiA1MTIsXG4gICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgc3lzdGVtLFxuICAgICAgICAgIHRlbXBlcmF0dXJlOiAwLFxuICAgICAgICAgIG1ldGFkYXRhOiBnZXRNZXRhZGF0YSgpLFxuICAgICAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBzaWduYWwgfSxcbiAgICAgIClcbiAgICAgIHN0cmVhbSA9IHNcbiAgICAgIHJldHVybiBhd2FpdCBoYW5kbGVNZXNzYWdlU3RyZWFtKHMpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dFcnJvcihlcnJvcilcbiAgICBsb2dFdmVudCgndGVuZ3VfYXBpX2Vycm9yJywge1xuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIHN0YXR1czogZXJyb3IgaW5zdGFuY2VvZiBBUElFcnJvciA/IFN0cmluZyhlcnJvci5zdGF0dXMpIDogdW5kZWZpbmVkLFxuICAgICAgbW9kZWw6IFNNQUxMX0ZBU1RfTU9ERUwsXG4gICAgICBtZXNzYWdlQ291bnQ6IFN0cmluZyhhc3Npc3RhbnRQcm9tcHQgPyAyIDogMSksXG4gICAgICBkdXJhdGlvbk1zOiBTdHJpbmcoRGF0ZS5ub3coKSAtIHN0YXJ0KSxcbiAgICAgIGR1cmF0aW9uTXNJbmNsdWRpbmdSZXRyaWVzOiBTdHJpbmcoRGF0ZS5ub3coKSAtIHN0YXJ0SW5jbHVkaW5nUmV0cmllcyksXG4gICAgICBhdHRlbXB0OiBTdHJpbmcoYXR0ZW1wdE51bWJlciksXG4gICAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICAgICAgcmVxdWVzdElkOlxuICAgICAgICAoc3RyZWFtIGFzIEJldGFNZXNzYWdlU3RyZWFtIHwgdW5kZWZpbmVkKT8ucmVxdWVzdF9pZCA/PyB1bmRlZmluZWQsXG4gICAgfSlcbiAgICByZXR1cm4gZ2V0QXNzaXN0YW50TWVzc2FnZUZyb21FcnJvcihlcnJvcilcbiAgfVxuXG4gIGNvbnN0IGlucHV0VG9rZW5zID0gcmVzcG9uc2UudXNhZ2UuaW5wdXRfdG9rZW5zXG4gIGNvbnN0IG91dHB1dFRva2VucyA9IHJlc3BvbnNlLnVzYWdlLm91dHB1dF90b2tlbnNcbiAgY29uc3QgY2FjaGVSZWFkSW5wdXRUb2tlbnMgPSByZXNwb25zZS51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwXG4gIGNvbnN0IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA9XG4gICAgcmVzcG9uc2UudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zID8/IDBcbiAgY29uc3QgY29zdFVTRCA9XG4gICAgKGlucHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqIEhBSUtVX0NPU1RfUEVSX01JTExJT05fSU5QVVRfVE9LRU5TICtcbiAgICAob3V0cHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqIEhBSUtVX0NPU1RfUEVSX01JTExJT05fT1VUUFVUX1RPS0VOUyArXG4gICAgKGNhY2hlUmVhZElucHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqXG4gICAgICBIQUlLVV9DT1NUX1BFUl9NSUxMSU9OX1BST01QVF9DQUNIRV9SRUFEX1RPS0VOUyArXG4gICAgKGNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyAvIDFfMDAwXzAwMCkgKlxuICAgICAgSEFJS1VfQ09TVF9QRVJfTUlMTElPTl9QUk9NUFRfQ0FDSEVfV1JJVEVfVE9LRU5TXG5cbiAgY29uc3QgZHVyYXRpb25NcyA9IERhdGUubm93KCkgLSBzdGFydFxuICBjb25zdCBkdXJhdGlvbk1zSW5jbHVkaW5nUmV0cmllcyA9IERhdGUubm93KCkgLSBzdGFydEluY2x1ZGluZ1JldHJpZXNcbiAgYWRkVG9Ub3RhbENvc3QoY29zdFVTRCwgZHVyYXRpb25Nc0luY2x1ZGluZ1JldHJpZXMpXG5cbiAgY29uc3QgYXNzaXN0YW50TWVzc2FnZTogQXNzaXN0YW50TWVzc2FnZSA9IHtcbiAgICBkdXJhdGlvbk1zLFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgY29udGVudDogbm9ybWFsaXplQ29udGVudEZyb21BUEkocmVzcG9uc2UuY29udGVudCksXG4gICAgfSxcbiAgICBjb3N0VVNELFxuICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICB0eXBlOiAnYXNzaXN0YW50JyxcbiAgfVxuXG4gIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfc3VjY2VzcycsIHtcbiAgICBtb2RlbDogU01BTExfRkFTVF9NT0RFTCxcbiAgICBtZXNzYWdlQ291bnQ6IFN0cmluZyhhc3Npc3RhbnRQcm9tcHQgPyAyIDogMSksXG4gICAgaW5wdXRUb2tlbnM6IFN0cmluZyhpbnB1dFRva2VucyksXG4gICAgb3V0cHV0VG9rZW5zOiBTdHJpbmcocmVzcG9uc2UudXNhZ2Uub3V0cHV0X3Rva2VucyksXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IFN0cmluZyhyZXNwb25zZS51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwKSxcbiAgICB1bmNhY2hlZElucHV0VG9rZW5zOiBTdHJpbmcoXG4gICAgICByZXNwb25zZS51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMCxcbiAgICApLFxuICAgIGR1cmF0aW9uTXM6IFN0cmluZyhkdXJhdGlvbk1zKSxcbiAgICBkdXJhdGlvbk1zSW5jbHVkaW5nUmV0cmllczogU3RyaW5nKGR1cmF0aW9uTXNJbmNsdWRpbmdSZXRyaWVzKSxcbiAgICB0dGZ0TXM6IFN0cmluZyhyZXNwb25zZS50dGZ0TXMpLFxuICAgIHByb3ZpZGVyOiBVU0VfQkVEUk9DSyA/ICdiZWRyb2NrJyA6IFVTRV9WRVJURVggPyAndmVydGV4JyA6ICcxcCcsXG4gICAgcmVxdWVzdElkOlxuICAgICAgKHN0cmVhbSBhcyBCZXRhTWVzc2FnZVN0cmVhbSB8IHVuZGVmaW5lZCk/LnJlcXVlc3RfaWQgPz8gdW5kZWZpbmVkLFxuICAgIHN0b3BfcmVhc29uOiByZXNwb25zZS5zdG9wX3JlYXNvbiA/PyB1bmRlZmluZWQsXG4gIH0pXG5cbiAgcmV0dXJuIGFzc2lzdGFudE1lc3NhZ2Vcbn1cblxuYXN5bmMgZnVuY3Rpb24gcXVlcnlIYWlrdVdpdGhvdXRQcm9tcHRDYWNoaW5nKHtcbiAgc3lzdGVtUHJvbXB0LFxuICB1c2VyUHJvbXB0LFxuICBhc3Npc3RhbnRQcm9tcHQsXG4gIHNpZ25hbCxcbn06IHtcbiAgc3lzdGVtUHJvbXB0OiBzdHJpbmdbXVxuICB1c2VyUHJvbXB0OiBzdHJpbmdcbiAgYXNzaXN0YW50UHJvbXB0Pzogc3RyaW5nXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG59KTogUHJvbWlzZTxBc3Npc3RhbnRNZXNzYWdlPiB7XG4gIGNvbnN0IGFudGhyb3BpYyA9IGF3YWl0IGdldEFudGhyb3BpY0NsaWVudChTTUFMTF9GQVNUX01PREVMKVxuICBjb25zdCBtb2RlbCA9IFNNQUxMX0ZBU1RfTU9ERUxcbiAgY29uc3QgbWVzc2FnZXMgPSBbXG4gICAgeyByb2xlOiAndXNlcicgYXMgY29uc3QsIGNvbnRlbnQ6IHVzZXJQcm9tcHQgfSxcbiAgICAuLi4oYXNzaXN0YW50UHJvbXB0XG4gICAgICA/IFt7IHJvbGU6ICdhc3Npc3RhbnQnIGFzIGNvbnN0LCBjb250ZW50OiBhc3Npc3RhbnRQcm9tcHQgfV1cbiAgICAgIDogW10pLFxuICBdXG4gIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfcXVlcnknLCB7XG4gICAgbW9kZWwsXG4gICAgbWVzc2FnZXNMZW5ndGg6IFN0cmluZyhcbiAgICAgIEpTT04uc3RyaW5naWZ5KFt7IHN5c3RlbVByb21wdCB9LCAuLi5tZXNzYWdlc10pLmxlbmd0aCxcbiAgICApLFxuICAgIHByb3ZpZGVyOiBVU0VfQkVEUk9DSyA/ICdiZWRyb2NrJyA6IFVTRV9WRVJURVggPyAndmVydGV4JyA6ICcxcCcsXG4gIH0pXG5cbiAgbGV0IGF0dGVtcHROdW1iZXIgPSAwXG4gIGxldCBzdGFydCA9IERhdGUubm93KClcbiAgY29uc3Qgc3RhcnRJbmNsdWRpbmdSZXRyaWVzID0gRGF0ZS5ub3coKVxuICBsZXQgcmVzcG9uc2U6IFN0cmVhbVJlc3BvbnNlXG4gIGxldCBzdHJlYW06IEJldGFNZXNzYWdlU3RyZWFtIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIHRyeSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCB3aXRoUmV0cnkoYXN5bmMgYXR0ZW1wdCA9PiB7XG4gICAgICBhdHRlbXB0TnVtYmVyID0gYXR0ZW1wdFxuICAgICAgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICBjb25zdCBzID0gYW50aHJvcGljLmJldGEubWVzc2FnZXMuc3RyZWFtKFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgbWF4X3Rva2VuczogNTEyLFxuICAgICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICAgIHN5c3RlbTogc3BsaXRTeXNQcm9tcHRQcmVmaXgoc3lzdGVtUHJvbXB0KS5tYXAodGV4dCA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgdGVtcGVyYXR1cmU6IDAsXG4gICAgICAgICAgbWV0YWRhdGE6IGdldE1ldGFkYXRhKCksXG4gICAgICAgICAgc3RyZWFtOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7IHNpZ25hbCB9LFxuICAgICAgKVxuICAgICAgc3RyZWFtID0gc1xuICAgICAgcmV0dXJuIGF3YWl0IGhhbmRsZU1lc3NhZ2VTdHJlYW0ocylcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfZXJyb3InLCB7XG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgc3RhdHVzOiBlcnJvciBpbnN0YW5jZW9mIEFQSUVycm9yID8gU3RyaW5nKGVycm9yLnN0YXR1cykgOiB1bmRlZmluZWQsXG4gICAgICBtb2RlbDogU01BTExfRkFTVF9NT0RFTCxcbiAgICAgIG1lc3NhZ2VDb3VudDogU3RyaW5nKGFzc2lzdGFudFByb21wdCA/IDIgOiAxKSxcbiAgICAgIGR1cmF0aW9uTXM6IFN0cmluZyhEYXRlLm5vdygpIC0gc3RhcnQpLFxuICAgICAgZHVyYXRpb25Nc0luY2x1ZGluZ1JldHJpZXM6IFN0cmluZyhEYXRlLm5vdygpIC0gc3RhcnRJbmNsdWRpbmdSZXRyaWVzKSxcbiAgICAgIGF0dGVtcHQ6IFN0cmluZyhhdHRlbXB0TnVtYmVyKSxcbiAgICAgIHByb3ZpZGVyOiBVU0VfQkVEUk9DSyA/ICdiZWRyb2NrJyA6IFVTRV9WRVJURVggPyAndmVydGV4JyA6ICcxcCcsXG4gICAgICByZXF1ZXN0SWQ6XG4gICAgICAgIChzdHJlYW0gYXMgQmV0YU1lc3NhZ2VTdHJlYW0gfCB1bmRlZmluZWQpPy5yZXF1ZXN0X2lkID8/IHVuZGVmaW5lZCxcbiAgICB9KVxuICAgIHJldHVybiBnZXRBc3Npc3RhbnRNZXNzYWdlRnJvbUVycm9yKGVycm9yKVxuICB9XG4gIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRcbiAgY29uc3QgZHVyYXRpb25Nc0luY2x1ZGluZ1JldHJpZXMgPSBEYXRlLm5vdygpIC0gc3RhcnRJbmNsdWRpbmdSZXRyaWVzXG4gIGxvZ0V2ZW50KCd0ZW5ndV9hcGlfc3VjY2VzcycsIHtcbiAgICBtb2RlbDogU01BTExfRkFTVF9NT0RFTCxcbiAgICBtZXNzYWdlQ291bnQ6IFN0cmluZyhhc3Npc3RhbnRQcm9tcHQgPyAyIDogMSksXG4gICAgaW5wdXRUb2tlbnM6IFN0cmluZyhyZXNwb25zZS51c2FnZS5pbnB1dF90b2tlbnMpLFxuICAgIG91dHB1dFRva2VuczogU3RyaW5nKHJlc3BvbnNlLnVzYWdlLm91dHB1dF90b2tlbnMpLFxuICAgIGR1cmF0aW9uTXM6IFN0cmluZyhkdXJhdGlvbk1zKSxcbiAgICBkdXJhdGlvbk1zSW5jbHVkaW5nUmV0cmllczogU3RyaW5nKGR1cmF0aW9uTXNJbmNsdWRpbmdSZXRyaWVzKSxcbiAgICBhdHRlbXB0OiBTdHJpbmcoYXR0ZW1wdE51bWJlciksXG4gICAgcHJvdmlkZXI6IFVTRV9CRURST0NLID8gJ2JlZHJvY2snIDogVVNFX1ZFUlRFWCA/ICd2ZXJ0ZXgnIDogJzFwJyxcbiAgICByZXF1ZXN0SWQ6XG4gICAgICAoc3RyZWFtIGFzIEJldGFNZXNzYWdlU3RyZWFtIHwgdW5kZWZpbmVkKT8ucmVxdWVzdF9pZCA/PyB1bmRlZmluZWQsXG4gICAgc3RvcF9yZWFzb246IHJlc3BvbnNlLnN0b3BfcmVhc29uID8/IHVuZGVmaW5lZCxcbiAgfSlcblxuICBjb25zdCBpbnB1dFRva2VucyA9IHJlc3BvbnNlLnVzYWdlLmlucHV0X3Rva2Vuc1xuICBjb25zdCBvdXRwdXRUb2tlbnMgPSByZXNwb25zZS51c2FnZS5vdXRwdXRfdG9rZW5zXG4gIGNvbnN0IGNvc3RVU0QgPVxuICAgIChpbnB1dFRva2VucyAvIDFfMDAwXzAwMCkgKiBIQUlLVV9DT1NUX1BFUl9NSUxMSU9OX0lOUFVUX1RPS0VOUyArXG4gICAgKG91dHB1dFRva2VucyAvIDFfMDAwXzAwMCkgKiBIQUlLVV9DT1NUX1BFUl9NSUxMSU9OX09VVFBVVF9UT0tFTlNcblxuICBhZGRUb1RvdGFsQ29zdChjb3N0VVNELCBkdXJhdGlvbk1zKVxuXG4gIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2UgPSB7XG4gICAgZHVyYXRpb25NcyxcbiAgICBtZXNzYWdlOiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGNvbnRlbnQ6IG5vcm1hbGl6ZUNvbnRlbnRGcm9tQVBJKHJlc3BvbnNlLmNvbnRlbnQpLFxuICAgICAgdXNhZ2U6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UudXNhZ2UsXG4gICAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IDAsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29zdFVTRCxcbiAgICB0eXBlOiAnYXNzaXN0YW50JyxcbiAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gIH1cblxuICByZXR1cm4gYXNzaXN0YW50TWVzc2FnZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVlcnlIYWlrdSh7XG4gIHN5c3RlbVByb21wdCA9IFtdLFxuICB1c2VyUHJvbXB0LFxuICBhc3Npc3RhbnRQcm9tcHQsXG4gIGVuYWJsZVByb21wdENhY2hpbmcgPSBmYWxzZSxcbiAgc2lnbmFsLFxufToge1xuICBzeXN0ZW1Qcm9tcHQ6IHN0cmluZ1tdXG4gIHVzZXJQcm9tcHQ6IHN0cmluZ1xuICBhc3Npc3RhbnRQcm9tcHQ/OiBzdHJpbmdcbiAgZW5hYmxlUHJvbXB0Q2FjaGluZz86IGJvb2xlYW5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbn0pOiBQcm9taXNlPEFzc2lzdGFudE1lc3NhZ2U+IHtcbiAgcmV0dXJuIGF3YWl0IHdpdGhWQ1IoXG4gICAgW1xuICAgICAge1xuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IHN5c3RlbVByb21wdC5tYXAodGV4dCA9PiAoeyB0eXBlOiAndGV4dCcsIHRleHQgfSkpLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1lc3NhZ2U6IHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiB1c2VyUHJvbXB0IH0sXG4gICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgdXVpZDogcmFuZG9tVVVJRCgpLFxuICAgICAgfSxcbiAgICBdLFxuICAgICgpID0+IHtcbiAgICAgIHJldHVybiBlbmFibGVQcm9tcHRDYWNoaW5nXG4gICAgICAgID8gcXVlcnlIYWlrdVdpdGhQcm9tcHRDYWNoaW5nKHtcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICAgIHVzZXJQcm9tcHQsXG4gICAgICAgICAgICBhc3Npc3RhbnRQcm9tcHQsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBxdWVyeUhhaWt1V2l0aG91dFByb21wdENhY2hpbmcoe1xuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgICAgdXNlclByb21wdCxcbiAgICAgICAgICAgIGFzc2lzdGFudFByb21wdCxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICB9KVxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0TWF4VG9rZW5zRm9yTW9kZWwobW9kZWw6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChtb2RlbC5pbmNsdWRlcygnMy01JykpIHtcbiAgICByZXR1cm4gODE5MlxuICB9XG4gIGlmIChtb2RlbC5pbmNsdWRlcygnaGFpa3UnKSkge1xuICAgIHJldHVybiA4MTkyXG4gIH1cbiAgcmV0dXJuIDIwXzAwMFxufVxuIiwKICAgICJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXQuanMnXG5pbXBvcnQge1xuICBnZXRDdXJyZW50UHJvamVjdENvbmZpZyxcbiAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnLFxufSBmcm9tICcuL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7IFNFU1NJT05fSUQgfSBmcm9tICcuL3V0aWxzL2xvZy5qcydcblxuLy8gRE8gTk9UIEFERCBNT1JFIFNUQVRFIEhFUkUgT1IgQk9SSVMgV0lMTCBDVVJTRSBZT1VcbmNvbnN0IFNUQVRFOiB7XG4gIHRvdGFsQ29zdDogbnVtYmVyXG4gIHRvdGFsQVBJRHVyYXRpb246IG51bWJlclxuICBzdGFydFRpbWU6IG51bWJlclxufSA9IHtcbiAgdG90YWxDb3N0OiAwLFxuICB0b3RhbEFQSUR1cmF0aW9uOiAwLFxuICBzdGFydFRpbWU6IERhdGUubm93KCksXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb1RvdGFsQ29zdChjb3N0OiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgU1RBVEUudG90YWxDb3N0ICs9IGNvc3RcbiAgU1RBVEUudG90YWxBUElEdXJhdGlvbiArPSBkdXJhdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG90YWxDb3N0KCk6IG51bWJlciB7XG4gIHJldHVybiBTVEFURS50b3RhbENvc3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdGFsRHVyYXRpb24oKTogbnVtYmVyIHtcbiAgcmV0dXJuIERhdGUubm93KCkgLSBTVEFURS5zdGFydFRpbWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdGFsQVBJRHVyYXRpb24oKTogbnVtYmVyIHtcbiAgcmV0dXJuIFNUQVRFLnRvdGFsQVBJRHVyYXRpb25cbn1cblxuZnVuY3Rpb24gZm9ybWF0Q29zdChjb3N0OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCQke2Nvc3QgPiAwLjUgPyByb3VuZChjb3N0LCAxMDApLnRvRml4ZWQoMikgOiBjb3N0LnRvRml4ZWQoNCl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VG90YWxDb3N0KCk6IHN0cmluZyB7XG4gIHJldHVybiBjaGFsay5ncmV5KFxuICAgIGBUb3RhbCBjb3N0OiAke2Zvcm1hdENvc3QoU1RBVEUudG90YWxDb3N0KX1cblRvdGFsIGR1cmF0aW9uIChBUEkpOiAke2Zvcm1hdER1cmF0aW9uKFNUQVRFLnRvdGFsQVBJRHVyYXRpb24pfVxuVG90YWwgZHVyYXRpb24gKHdhbGwpOiAke2Zvcm1hdER1cmF0aW9uKGdldFRvdGFsRHVyYXRpb24oKSl9YCxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29zdFN1bW1hcnkoKTogdm9pZCB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZiA9ICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXG4nICsgZm9ybWF0VG90YWxDb3N0KCkgKyAnXFxuJylcblxuICAgICAgLy8gU2F2ZSBsYXN0IGNvc3QgYW5kIGR1cmF0aW9uIHRvIHByb2plY3QgY29uZmlnXG4gICAgICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICAgICAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKHtcbiAgICAgICAgLi4ucHJvamVjdENvbmZpZyxcbiAgICAgICAgbGFzdENvc3Q6IFNUQVRFLnRvdGFsQ29zdCxcbiAgICAgICAgbGFzdEFQSUR1cmF0aW9uOiBTVEFURS50b3RhbEFQSUR1cmF0aW9uLFxuICAgICAgICBsYXN0RHVyYXRpb246IGdldFRvdGFsRHVyYXRpb24oKSxcbiAgICAgICAgbGFzdFNlc3Npb25JZDogU0VTU0lPTl9JRCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBmKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBwcm9jZXNzLm9mZignZXhpdCcsIGYpXG4gICAgfVxuICB9LCBbXSlcbn1cblxuZnVuY3Rpb24gcm91bmQobnVtYmVyOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogcHJlY2lzaW9uKSAvIHByZWNpc2lvblxufVxuXG4vLyBPbmx5IHVzZWQgaW4gdGVzdHNcbmV4cG9ydCBmdW5jdGlvbiByZXNldFN0YXRlRm9yVGVzdHMoKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXNldFN0YXRlRm9yVGVzdHMgY2FuIG9ubHkgYmUgY2FsbGVkIGluIHRlc3RzJylcbiAgfVxuICBTVEFURS5zdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gIFNUQVRFLnRvdGFsQ29zdCA9IDBcbiAgU1RBVEUudG90YWxBUElEdXJhdGlvbiA9IDBcbn1cbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIHdyYXBUZXh0KHRleHQ6IHN0cmluZywgd2lkdGg6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgbGV0IGN1cnJlbnRMaW5lID0gJydcblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdGV4dCkge1xuICAgIC8vIEltcG9ydGFudDogd2UgbmVlZCB0aGUgc3ByZWFkIHRvIHByb3Blcmx5IGNvdW50IG11bHRpLXBsYW5lIFVURi04IGNoYXJhY3RlcnMgKGVnLiDwkZqWKVxuICAgIGlmIChbLi4uY3VycmVudExpbmVdLmxlbmd0aCA8IHdpZHRoKSB7XG4gICAgICBjdXJyZW50TGluZSArPSBjaGFyXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goY3VycmVudExpbmUpXG4gICAgICBjdXJyZW50TGluZSA9IGNoYXJcbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudExpbmUpIGxpbmVzLnB1c2goY3VycmVudExpbmUpXG4gIHJldHVybiBsaW5lc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChtcyA8IDYwMDAwKSB7XG4gICAgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMSl9c2BcbiAgfVxuXG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtcyAvIDM2MDAwMDApXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChtcyAlIDM2MDAwMDApIC8gNjAwMDApXG4gIGNvbnN0IHNlY29uZHMgPSAoKG1zICUgNjAwMDApIC8gMTAwMCkudG9GaXhlZCgxKVxuXG4gIGlmIChob3VycyA+IDApIHtcbiAgICByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXN9bSAke3NlY29uZHN9c2BcbiAgfVxuICBpZiAobWludXRlcyA+IDApIHtcbiAgICByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kc31zYFxuICB9XG4gIHJldHVybiBgJHtzZWNvbmRzfXNgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtYmVyOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlbicsIHtcbiAgICBub3RhdGlvbjogJ2NvbXBhY3QnLFxuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMSxcbiAgfSlcbiAgICAuZm9ybWF0KG51bWJlcikgLy8gZWcuIFwiMTMyMVwiID0+IFwiMS4zS1wiXG4gICAgLnRvTG93ZXJDYXNlKCkgLy8gZWcuIFwiMS4zS1wiID0+IFwiMS4za1wiXG59XG4iLAogICAgImltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi9xdWVyeS5qcydcbmltcG9ydCB7IFNZTlRIRVRJQ19BU1NJU1RBTlRfTUVTU0FHRVMgfSBmcm9tICcuL21lc3NhZ2VzLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY291bnRUb2tlbnMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IG51bWJlciB7XG4gIGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMVxuICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldXG4gICAgaWYgKFxuICAgICAgbWVzc2FnZT8udHlwZSA9PT0gJ2Fzc2lzdGFudCcgJiZcbiAgICAgICd1c2FnZScgaW4gbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAhKFxuICAgICAgICBtZXNzYWdlLm1lc3NhZ2UuY29udGVudFswXT8udHlwZSA9PT0gJ3RleHQnICYmXG4gICAgICAgIFNZTlRIRVRJQ19BU1NJU1RBTlRfTUVTU0FHRVMuaGFzKG1lc3NhZ2UubWVzc2FnZS5jb250ZW50WzBdLnRleHQpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHVzYWdlIH0gPSBtZXNzYWdlLm1lc3NhZ2VcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHVzYWdlLmlucHV0X3Rva2VucyArXG4gICAgICAgICh1c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMCkgK1xuICAgICAgICAodXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMCkgK1xuICAgICAgICB1c2FnZS5vdXRwdXRfdG9rZW5zXG4gICAgICApXG4gICAgfVxuICAgIGktLVxuICB9XG4gIHJldHVybiAwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3VudENhY2hlZFRva2VucyhtZXNzYWdlczogTWVzc2FnZVtdKTogbnVtYmVyIHtcbiAgbGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gIHdoaWxlIChpID49IDApIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV1cbiAgICBpZiAobWVzc2FnZT8udHlwZSA9PT0gJ2Fzc2lzdGFudCcgJiYgJ3VzYWdlJyBpbiBtZXNzYWdlLm1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IHsgdXNhZ2UgfSA9IG1lc3NhZ2UubWVzc2FnZVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyA/PyAwKSArXG4gICAgICAgICh1c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwKVxuICAgICAgKVxuICAgIH1cbiAgICBpLS1cbiAgfVxuICByZXR1cm4gMFxufVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVIYXNoLCB0eXBlIFVVSUQgfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2UsIFVzZXJNZXNzYWdlIH0gZnJvbSAnLi4vcXVlcnkuanMnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi91dGlscy9lbnYuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IG1hcFZhbHVlcyB9IGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB0eXBlIHsgQ29udGVudEJsb2NrIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2luZGV4Lm1qcydcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhWQ1IoXG4gIG1lc3NhZ2VzOiAoVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlKVtdLFxuICBmOiAoKSA9PiBQcm9taXNlPEFzc2lzdGFudE1lc3NhZ2U+LFxuKTogUHJvbWlzZTxBc3Npc3RhbnRNZXNzYWdlPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgcmV0dXJuIGF3YWl0IGYoKVxuICB9XG5cbiAgY29uc3QgZGVoeWRyYXRlZElucHV0ID0gbWFwTWVzc2FnZXMoXG4gICAgbWVzc2FnZXMubWFwKF8gPT4gXy5tZXNzYWdlLmNvbnRlbnQpLFxuICAgIGRlaHlkcmF0ZVZhbHVlLFxuICApXG4gIGNvbnN0IGZpbGVuYW1lID0gYC4vZml4dHVyZXMvJHtkZWh5ZHJhdGVkSW5wdXQubWFwKF8gPT4gY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShfKSkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCA2KSkuam9pbignLScpfS5qc29uYFxuXG4gIC8vIEZldGNoIGNhY2hlZCBmaXh0dXJlXG4gIGlmIChleGlzdHNTeW5jKGZpbGVuYW1lKSkge1xuICAgIGNvbnN0IGNhY2hlZCA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGZpbGVuYW1lLCAndXRmLTgnKSlcbiAgICByZXR1cm4gbWFwQXNzaXN0YW50TWVzc2FnZShjYWNoZWQub3V0cHV0LCBoeWRyYXRlVmFsdWUpXG4gIH1cblxuICBpZiAoZW52LmlzQ0kpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgQW50aHJvcGljIEFQSSBmaXh0dXJlIG1pc3NpbmcuIFJlLXJ1biBucG0gdGVzdCBsb2NhbGx5LCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LiAke0pTT04uc3RyaW5naWZ5KHsgaW5wdXQ6IGRlaHlkcmF0ZWRJbnB1dCB9LCBudWxsLCAyKX1gLFxuICAgIClcbiAgfVxuXG4gIC8vIENyZWF0ZSAmIHdyaXRlIG5ldyBmaXh0dXJlXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGYoKVxuICBpZiAoZW52LmlzQ0kpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZGlybmFtZShmaWxlbmFtZSkpKSB7XG4gICAgbWtkaXJTeW5jKGRpcm5hbWUoZmlsZW5hbWUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICB9XG4gIHdyaXRlRmlsZVN5bmMoXG4gICAgZmlsZW5hbWUsXG4gICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBkZWh5ZHJhdGVkSW5wdXQsXG4gICAgICAgIG91dHB1dDogbWFwQXNzaXN0YW50TWVzc2FnZShyZXN1bHQsIGRlaHlkcmF0ZVZhbHVlKSxcbiAgICAgIH0sXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApLFxuICApXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gbWFwTWVzc2FnZXMoXG4gIG1lc3NhZ2VzOiAoVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlKVsnbWVzc2FnZSddWydjb250ZW50J11bXSxcbiAgZjogKHM6IHVua25vd24pID0+IHVua25vd24sXG4pOiAoVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlKVsnbWVzc2FnZSddWydjb250ZW50J11bXSB7XG4gIHJldHVybiBtZXNzYWdlcy5tYXAoXyA9PiB7XG4gICAgaWYgKHR5cGVvZiBfID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGYoXylcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKF8gPT4ge1xuICAgICAgc3dpdGNoIChfLnR5cGUpIHtcbiAgICAgICAgY2FzZSAndG9vbF9yZXN1bHQnOlxuICAgICAgICAgIGlmICh0eXBlb2YgXy5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uXywgY29udGVudDogZihfLmNvbnRlbnQpIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoXy5jb250ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgICAgY29udGVudDogXy5jb250ZW50Lm1hcChfID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF8udHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLl8sIHRleHQ6IGYoXy50ZXh0KSB9XG4gICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9cbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgcmV0dXJuIHsgLi4uXywgdGV4dDogZihfLnRleHQpIH1cbiAgICAgICAgY2FzZSAndG9vbF91c2UnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5wdXQ6IG1hcFZhbHVlcyhfLmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmKSxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICByZXR1cm4gX1xuICAgICAgfVxuICAgIH0pXG4gIH0pIGFzIChVc2VyTWVzc2FnZSB8IEFzc2lzdGFudE1lc3NhZ2UpWydtZXNzYWdlJ11bJ2NvbnRlbnQnXVtdXG59XG5cbmZ1bmN0aW9uIG1hcEFzc2lzdGFudE1lc3NhZ2UoXG4gIG1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIGY6IChzOiB1bmtub3duKSA9PiB1bmtub3duLFxuKTogQXNzaXN0YW50TWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb25NczogJ0RVUkFUSU9OJyBhcyB1bmtub3duIGFzIG51bWJlcixcbiAgICBjb3N0VVNEOiAnQ09TVCcgYXMgdW5rbm93biBhcyBudW1iZXIsXG4gICAgdXVpZDogJ1VVSUQnIGFzIHVua25vd24gYXMgVVVJRCxcbiAgICBtZXNzYWdlOiB7XG4gICAgICAuLi5tZXNzYWdlLm1lc3NhZ2UsXG4gICAgICBjb250ZW50OiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudFxuICAgICAgICAubWFwKF8gPT4ge1xuICAgICAgICAgIHN3aXRjaCAoXy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgICAgIHRleHQ6IGYoXy50ZXh0KSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgY2l0YXRpb25zOiBfLmNpdGF0aW9ucyB8fCBbXSxcbiAgICAgICAgICAgICAgfSAvLyBFbnN1cmUgY2l0YXRpb25zXG4gICAgICAgICAgICBjYXNlICd0b29sX3VzZSc6XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgICAgICBpbnB1dDogbWFwVmFsdWVzKF8uaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGYpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gXyAvLyBIYW5kbGUgb3RoZXIgYmxvY2sgdHlwZXMgdW5jaGFuZ2VkXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIENvbnRlbnRCbG9ja1tdLFxuICAgIH0sXG4gICAgdHlwZTogJ2Fzc2lzdGFudCcsXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVoeWRyYXRlVmFsdWUoczogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodHlwZW9mIHMgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHNcbiAgfVxuICBjb25zdCBzMSA9IHNcbiAgICAucmVwbGFjZSgvbnVtX2ZpbGVzPVwiXFxkK1wiL2csICdudW1fZmlsZXM9XCJbTlVNXVwiJylcbiAgICAucmVwbGFjZSgvZHVyYXRpb25fbXM9XCJcXGQrXCIvZywgJ2R1cmF0aW9uX21zPVwiW0RVUkFUSU9OXVwiJylcbiAgICAucmVwbGFjZSgvY29zdF91c2Q9XCJcXGQrXCIvZywgJ2Nvc3RfdXNkPVwiW0NPU1RdXCInKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgcGF0aC5zZXApXG4gICAgLnJlcGxhY2VBbGwoZ2V0Q3dkKCksICdbQ1dEXScpXG4gIGlmIChzMS5pbmNsdWRlcygnRmlsZXMgbW9kaWZpZWQgYnkgdXNlcjonKSkge1xuICAgIHJldHVybiAnRmlsZXMgbW9kaWZpZWQgYnkgdXNlcjogW0ZJTEVTXSdcbiAgfVxuICByZXR1cm4gczFcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZVZhbHVlKHM6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiBzICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzXG4gIH1cbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZUFsbCgnW05VTV0nLCAnMScpXG4gICAgLnJlcGxhY2VBbGwoJ1tEVVJBVElPTl0nLCAnMTAwJylcbiAgICAucmVwbGFjZUFsbCgnW0NXRF0nLCBnZXRDd2QoKSlcbn1cbiIsCiAgICAiZXhwb3J0IGNvbnN0IGlnbm9yZU92ZXJyaWRlID0gU3ltYm9sKFwiTGV0IHpvZFRvSnNvblNjaGVtYSBkZWNpZGUgb24gd2hpY2ggcGFyc2VyIHRvIHVzZVwiKTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgJHJlZlN0cmF0ZWd5OiBcInJvb3RcIixcbiAgICBiYXNlUGF0aDogW1wiI1wiXSxcbiAgICBlZmZlY3RTdHJhdGVneTogXCJpbnB1dFwiLFxuICAgIHBpcGVTdHJhdGVneTogXCJhbGxcIixcbiAgICBkYXRlU3RyYXRlZ3k6IFwiZm9ybWF0OmRhdGUtdGltZVwiLFxuICAgIG1hcFN0cmF0ZWd5OiBcImVudHJpZXNcIixcbiAgICByZW1vdmVBZGRpdGlvbmFsU3RyYXRlZ3k6IFwicGFzc3Rocm91Z2hcIixcbiAgICBkZWZpbml0aW9uUGF0aDogXCJkZWZpbml0aW9uc1wiLFxuICAgIHRhcmdldDogXCJqc29uU2NoZW1hN1wiLFxuICAgIHN0cmljdFVuaW9uczogZmFsc2UsXG4gICAgZGVmaW5pdGlvbnM6IHt9LFxuICAgIGVycm9yTWVzc2FnZXM6IGZhbHNlLFxuICAgIG1hcmtkb3duRGVzY3JpcHRpb246IGZhbHNlLFxuICAgIHBhdHRlcm5TdHJhdGVneTogXCJlc2NhcGVcIixcbiAgICBhcHBseVJlZ2V4RmxhZ3M6IGZhbHNlLFxuICAgIGVtYWlsU3RyYXRlZ3k6IFwiZm9ybWF0OmVtYWlsXCIsXG4gICAgYmFzZTY0U3RyYXRlZ3k6IFwiY29udGVudEVuY29kaW5nOmJhc2U2NFwiLFxuICAgIG5hbWVTdHJhdGVneTogXCJyZWZcIixcbn07XG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdE9wdGlvbnMgPSAob3B0aW9ucykgPT4gKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiXG4gICAgPyB7XG4gICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICBuYW1lOiBvcHRpb25zLFxuICAgIH1cbiAgICA6IHtcbiAgICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4iLAogICAgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vT3B0aW9ucy5qc1wiO1xuZXhwb3J0IGNvbnN0IGdldFJlZnMgPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IF9vcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgY3VycmVudFBhdGggPSBfb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBbLi4uX29wdGlvbnMuYmFzZVBhdGgsIF9vcHRpb25zLmRlZmluaXRpb25QYXRoLCBfb3B0aW9ucy5uYW1lXVxuICAgICAgICA6IF9vcHRpb25zLmJhc2VQYXRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLl9vcHRpb25zLFxuICAgICAgICBjdXJyZW50UGF0aDogY3VycmVudFBhdGgsXG4gICAgICAgIHByb3BlcnR5UGF0aDogdW5kZWZpbmVkLFxuICAgICAgICBzZWVuOiBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKF9vcHRpb25zLmRlZmluaXRpb25zKS5tYXAoKFtuYW1lLCBkZWZdKSA9PiBbXG4gICAgICAgICAgICBkZWYuX2RlZixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkZWY6IGRlZi5fZGVmLFxuICAgICAgICAgICAgICAgIHBhdGg6IFsuLi5fb3B0aW9ucy5iYXNlUGF0aCwgX29wdGlvbnMuZGVmaW5pdGlvblBhdGgsIG5hbWVdLFxuICAgICAgICAgICAgICAgIC8vIFJlc29sdXRpb24gb2YgcmVmZXJlbmNlcyB3aWxsIGJlIGZvcmNlZCBldmVuIHRob3VnaCBzZWVuLCBzbyBpdCdzIG9rIHRoYXQgdGhlIHNjaGVtYSBpcyB1bmRlZmluZWQgaGVyZSBmb3Igbm93LlxuICAgICAgICAgICAgICAgIGpzb25TY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0pKSxcbiAgICB9O1xufTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGFkZEVycm9yTWVzc2FnZShyZXMsIGtleSwgZXJyb3JNZXNzYWdlLCByZWZzKSB7XG4gICAgaWYgKCFyZWZzPy5lcnJvck1lc3NhZ2VzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICByZXMuZXJyb3JNZXNzYWdlID0ge1xuICAgICAgICAgICAgLi4ucmVzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIFtrZXldOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBrZXksIHZhbHVlLCBlcnJvck1lc3NhZ2UsIHJlZnMpIHtcbiAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIGFkZEVycm9yTWVzc2FnZShyZXMsIGtleSwgZXJyb3JNZXNzYWdlLCByZWZzKTtcbn1cbiIsCiAgICAidmFyIHV0aWw7XG4oZnVuY3Rpb24gKHV0aWwpIHtcbiAgICB1dGlsLmFzc2VydEVxdWFsID0gKHZhbCkgPT4gdmFsO1xuICAgIGZ1bmN0aW9uIGFzc2VydElzKF9hcmcpIHsgfVxuICAgIHV0aWwuYXNzZXJ0SXMgPSBhc3NlcnRJcztcbiAgICBmdW5jdGlvbiBhc3NlcnROZXZlcihfeCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnROZXZlciA9IGFzc2VydE5ldmVyO1xuICAgIHV0aWwuYXJyYXlUb0VudW0gPSAoaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgb2JqW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXMgPSAob2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IHV0aWwub2JqZWN0S2V5cyhvYmopLmZpbHRlcigoaykgPT4gdHlwZW9mIG9ialtvYmpba11dICE9PSBcIm51bWJlclwiKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIHZhbGlkS2V5cykge1xuICAgICAgICAgICAgZmlsdGVyZWRba10gPSBvYmpba107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKGZpbHRlcmVkKTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0VmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RLZXlzKG9iaikubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqW2VdO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0S2V5cyA9IHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gXCJmdW5jdGlvblwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA/IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBiYW4vYmFuXG4gICAgICAgIDogKG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH07XG4gICAgdXRpbC5maW5kID0gKGFyciwgY2hlY2tlcikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tlcihpdGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgdXRpbC5pc0ludGVnZXIgPSB0eXBlb2YgTnVtYmVyLmlzSW50ZWdlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gKHZhbCkgPT4gTnVtYmVyLmlzSW50ZWdlcih2YWwpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsKSAmJiBNYXRoLmZsb29yKHZhbCkgPT09IHZhbDtcbiAgICBmdW5jdGlvbiBqb2luVmFsdWVzKGFycmF5LCBzZXBhcmF0b3IgPSBcIiB8IFwiKSB7XG4gICAgICAgIHJldHVybiBhcnJheVxuICAgICAgICAgICAgLm1hcCgodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAnJHt2YWx9J2AgOiB2YWwpKVxuICAgICAgICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9XG4gICAgdXRpbC5qb2luVmFsdWVzID0gam9pblZhbHVlcztcbiAgICB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciA9IChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn0pKHV0aWwgfHwgKHV0aWwgPSB7fSkpO1xudmFyIG9iamVjdFV0aWw7XG4oZnVuY3Rpb24gKG9iamVjdFV0aWwpIHtcbiAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzID0gKGZpcnN0LCBzZWNvbmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpcnN0LFxuICAgICAgICAgICAgLi4uc2Vjb25kLCAvLyBzZWNvbmQgb3ZlcndyaXRlcyBmaXJzdFxuICAgICAgICB9O1xuICAgIH07XG59KShvYmplY3RVdGlsIHx8IChvYmplY3RVdGlsID0ge30pKTtcbmNvbnN0IFpvZFBhcnNlZFR5cGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibmFuXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcInVuZGVmaW5lZFwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwidW5rbm93blwiLFxuICAgIFwicHJvbWlzZVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm1hcFwiLFxuICAgIFwic2V0XCIsXG5dKTtcbmNvbnN0IGdldFBhcnNlZFR5cGUgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgZGF0YTtcbiAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zdHJpbmc7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBpc05hTihkYXRhKSA/IFpvZFBhcnNlZFR5cGUubmFuIDogWm9kUGFyc2VkVHlwZS5udW1iZXI7XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5ib29sZWFuO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uO1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5iaWdpbnQ7XG4gICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnN5bWJvbDtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5hcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUubnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLnRoZW4gJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aGVuID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICBkYXRhLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEuY2F0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUubWFwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBTZXQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgRGF0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5vYmplY3Q7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS51bmtub3duO1xuICAgIH1cbn07XG5cbmNvbnN0IFpvZElzc3VlQ29kZSA9IHV0aWwuYXJyYXlUb0VudW0oW1xuICAgIFwiaW52YWxpZF90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2xpdGVyYWxcIixcbiAgICBcImN1c3RvbVwiLFxuICAgIFwiaW52YWxpZF91bmlvblwiLFxuICAgIFwiaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yXCIsXG4gICAgXCJpbnZhbGlkX2VudW1fdmFsdWVcIixcbiAgICBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgXCJpbnZhbGlkX2FyZ3VtZW50c1wiLFxuICAgIFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiLFxuICAgIFwiaW52YWxpZF9kYXRlXCIsXG4gICAgXCJpbnZhbGlkX3N0cmluZ1wiLFxuICAgIFwidG9vX3NtYWxsXCIsXG4gICAgXCJ0b29fYmlnXCIsXG4gICAgXCJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlc1wiLFxuICAgIFwibm90X211bHRpcGxlX29mXCIsXG4gICAgXCJub3RfZmluaXRlXCIsXG5dKTtcbmNvbnN0IHF1b3RlbGVzc0pzb24gPSAob2JqKSA9PiB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLCBcIiQxOlwiKTtcbn07XG5jbGFzcyBab2RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlzc3Vlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlzc3VlcyA9IFtdO1xuICAgICAgICB0aGlzLmFkZElzc3VlID0gKHN1YikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc3N1ZXMgPSBbLi4udGhpcy5pc3N1ZXMsIHN1Yl07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWRkSXNzdWVzID0gKHN1YnMgPSBbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc3N1ZXMgPSBbLi4udGhpcy5pc3N1ZXMsIC4uLnN1YnNdO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY3R1YWxQcm90byA9IG5ldy50YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYmFuL2JhblxuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIGFjdHVhbFByb3RvKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX19wcm90b19fID0gYWN0dWFsUHJvdG87XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYW1lID0gXCJab2RFcnJvclwiO1xuICAgICAgICB0aGlzLmlzc3VlcyA9IGlzc3VlcztcbiAgICB9XG4gICAgZm9ybWF0KF9tYXBwZXIpIHtcbiAgICAgICAgY29uc3QgbWFwcGVyID0gX21hcHBlciB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlzc3VlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfdW5pb25cIikge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZS51bmlvbkVycm9ycy5tYXAocHJvY2Vzc0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3JldHVybl90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLnJldHVyblR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9hcmd1bWVudHNcIikge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoaXNzdWUuYXJndW1lbnRzRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgaXNzdWUucGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gaXNzdWUucGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gaXNzdWUucGF0aC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodHlwZW9mIGVsID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zdCBlcnJvckFycmF5OiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGVycm9yQXJyYXkuX2Vycm9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCBlcnJvckFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyW2VsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2Vzc0Vycm9yKHRoaXMpO1xuICAgICAgICByZXR1cm4gZmllbGRFcnJvcnM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3NlcnQodmFsdWUpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBab2RFcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGEgWm9kRXJyb3I6ICR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxuICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGZsYXR0ZW4obWFwcGVyID0gKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IGZvcm1FcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5pc3N1ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdWIucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dID0gZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dIHx8IFtdO1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXS5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1FcnJvcnMucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZm9ybUVycm9ycywgZmllbGRFcnJvcnMgfTtcbiAgICB9XG4gICAgZ2V0IGZvcm1FcnJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYXR0ZW4oKTtcbiAgICB9XG59XG5ab2RFcnJvci5jcmVhdGUgPSAoaXNzdWVzKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoaXNzdWVzKTtcbiAgICByZXR1cm4gZXJyb3I7XG59O1xuXG5jb25zdCBlcnJvck1hcCA9IChpc3N1ZSwgX2N0eCkgPT4ge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGU6XG4gICAgICAgICAgICBpZiAoaXNzdWUucmVjZWl2ZWQgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiUmVxdWlyZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRXhwZWN0ZWQgJHtpc3N1ZS5leHBlY3RlZH0sIHJlY2VpdmVkICR7aXNzdWUucmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWw6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgbGl0ZXJhbCB2YWx1ZSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShpc3N1ZS5leHBlY3RlZCwgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYFVucmVjb2duaXplZCBrZXkocykgaW4gb2JqZWN0OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLm9wdGlvbnMpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGVudW0gdmFsdWUuIEV4cGVjdGVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLm9wdGlvbnMpfSwgcmVjZWl2ZWQgJyR7aXNzdWUucmVjZWl2ZWR9J2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZnVuY3Rpb24gYXJndW1lbnRzYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3JldHVybl90eXBlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIHJldHVybiB0eXBlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZGF0ZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlLnZhbGlkYXRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJpbmNsdWRlc1wiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IGluY2x1ZGUgXCIke2lzc3VlLnZhbGlkYXRpb24uaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlLnZhbGlkYXRpb24ucG9zaXRpb24gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgJHttZXNzYWdlfSBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7aXNzdWUudmFsaWRhdGlvbi5wb3NpdGlvbn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwic3RhcnRzV2l0aFwiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IHN0YXJ0IHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uc3RhcnRzV2l0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiZW5kc1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBlbmQgd2l0aCBcIiR7aXNzdWUudmFsaWRhdGlvbi5lbmRzV2l0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnZhbGlkYXRpb24gIT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCAke2lzc3VlLnZhbGlkYXRpb259YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS50b29fc21hbGw6XG4gICAgICAgICAgICBpZiAoaXNzdWUudHlwZSA9PT0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXJyYXkgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBcImV4YWN0bHlcIiA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBsZWFzdGAgOiBgbW9yZSB0aGFuYH0gJHtpc3N1ZS5taW5pbXVtfSBlbGVtZW50KHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBTdHJpbmcgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBcImV4YWN0bHlcIiA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBsZWFzdGAgOiBgb3ZlcmB9ICR7aXNzdWUubWluaW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHkgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGdyZWF0ZXIgdGhhbiBgfSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5IGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBncmVhdGVyIHRoYW4gYH0ke25ldyBEYXRlKE51bWJlcihpc3N1ZS5taW5pbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX2JpZzpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGB1bmRlcmB9ICR7aXNzdWUubWF4aW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBCaWdJbnQgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiZGF0ZVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRGF0ZSBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseWBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0b2BcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYHNtYWxsZXIgdGhhbmB9ICR7bmV3IERhdGUoTnVtYmVyKGlzc3VlLm1heGltdW0pKX1gO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5jdXN0b206XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2Y6XG4gICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtpc3N1ZS5tdWx0aXBsZU9mfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk51bWJlciBtdXN0IGJlIGZpbml0ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2N0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xufTtcblxubGV0IG92ZXJyaWRlRXJyb3JNYXAgPSBlcnJvck1hcDtcbmZ1bmN0aW9uIHNldEVycm9yTWFwKG1hcCkge1xuICAgIG92ZXJyaWRlRXJyb3JNYXAgPSBtYXA7XG59XG5mdW5jdGlvbiBnZXRFcnJvck1hcCgpIHtcbiAgICByZXR1cm4gb3ZlcnJpZGVFcnJvck1hcDtcbn1cblxuY29uc3QgbWFrZUlzc3VlID0gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgcGF0aCwgZXJyb3JNYXBzLCBpc3N1ZURhdGEgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmdWxsUGF0aCA9IFsuLi5wYXRoLCAuLi4oaXNzdWVEYXRhLnBhdGggfHwgW10pXTtcbiAgICBjb25zdCBmdWxsSXNzdWUgPSB7XG4gICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgfTtcbiAgICBpZiAoaXNzdWVEYXRhLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICAgICAgICBtZXNzYWdlOiBpc3N1ZURhdGEubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgY29uc3QgbWFwcyA9IGVycm9yTWFwc1xuICAgICAgICAuZmlsdGVyKChtKSA9PiAhIW0pXG4gICAgICAgIC5zbGljZSgpXG4gICAgICAgIC5yZXZlcnNlKCk7XG4gICAgZm9yIChjb25zdCBtYXAgb2YgbWFwcykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBtYXAoZnVsbElzc3VlLCB7IGRhdGEsIGRlZmF1bHRFcnJvcjogZXJyb3JNZXNzYWdlIH0pLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICB9O1xufTtcbmNvbnN0IEVNUFRZX1BBVEggPSBbXTtcbmZ1bmN0aW9uIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgaXNzdWVEYXRhKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVNYXAgPSBnZXRFcnJvck1hcCgpO1xuICAgIGNvbnN0IGlzc3VlID0gbWFrZUlzc3VlKHtcbiAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZURhdGEsXG4gICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCwgLy8gY29udGV4dHVhbCBlcnJvciBtYXAgaXMgZmlyc3QgcHJpb3JpdHlcbiAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCwgLy8gdGhlbiBzY2hlbWEtYm91bmQgbWFwIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAsIC8vIHRoZW4gZ2xvYmFsIG92ZXJyaWRlIG1hcFxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAgPT09IGVycm9yTWFwID8gdW5kZWZpbmVkIDogZXJyb3JNYXAsIC8vIHRoZW4gZ2xvYmFsIGRlZmF1bHQgbWFwXG4gICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgIH0pO1xuICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goaXNzdWUpO1xufVxuY2xhc3MgUGFyc2VTdGF0dXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gXCJ2YWxpZFwiO1xuICAgIH1cbiAgICBkaXJ0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IFwidmFsaWRcIilcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcImRpcnR5XCI7XG4gICAgfVxuICAgIGFib3J0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJhYm9ydGVkXCI7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0cykge1xuICAgICAgICBjb25zdCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocy5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBhcnJheVZhbHVlLnB1c2gocy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBhcnJheVZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycykge1xuICAgICAgICBjb25zdCBmaW5hbE9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcGFpcjtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmIChrZXkudmFsdWUgIT09IFwiX19wcm90b19fXCIgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiIHx8IHBhaXIuYWx3YXlzU2V0KSkge1xuICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0W2tleS52YWx1ZV0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsT2JqZWN0IH07XG4gICAgfVxufVxuY29uc3QgSU5WQUxJRCA9IE9iamVjdC5mcmVlemUoe1xuICAgIHN0YXR1czogXCJhYm9ydGVkXCIsXG59KTtcbmNvbnN0IERJUlRZID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwiZGlydHlcIiwgdmFsdWUgfSk7XG5jb25zdCBPSyA9ICh2YWx1ZSkgPT4gKHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlIH0pO1xuY29uc3QgaXNBYm9ydGVkID0gKHgpID0+IHguc3RhdHVzID09PSBcImFib3J0ZWRcIjtcbmNvbnN0IGlzRGlydHkgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiZGlydHlcIjtcbmNvbnN0IGlzVmFsaWQgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwidmFsaWRcIjtcbmNvbnN0IGlzQXN5bmMgPSAoeCkgPT4gdHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgeCBpbnN0YW5jZW9mIFByb21pc2U7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG52YXIgZXJyb3JVdGlsO1xuKGZ1bmN0aW9uIChlcnJvclV0aWwpIHtcbiAgICBlcnJvclV0aWwuZXJyVG9PYmogPSAobWVzc2FnZSkgPT4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2UgfSA6IG1lc3NhZ2UgfHwge307XG4gICAgZXJyb3JVdGlsLnRvU3RyaW5nID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5tZXNzYWdlO1xufSkoZXJyb3JVdGlsIHx8IChlcnJvclV0aWwgPSB7fSkpO1xuXG52YXIgX1pvZEVudW1fY2FjaGUsIF9ab2ROYXRpdmVFbnVtX2NhY2hlO1xuY2xhc3MgUGFyc2VJbnB1dExhenlQYXRoIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbHVlLCBwYXRoLCBrZXkpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLl9rZXkgPSBrZXk7XG4gICAgfVxuICAgIGdldCBwYXRoKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlZFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fa2V5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwgLi4udGhpcy5fa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCB0aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRQYXRoO1xuICAgIH1cbn1cbmNvbnN0IGhhbmRsZVJlc3VsdCA9IChjdHgsIHJlc3VsdCkgPT4ge1xuICAgIGlmIChpc1ZhbGlkKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LnZhbHVlIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIWN0eC5jb21tb24uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsaWRhdGlvbiBmYWlsZWQgYnV0IG5vIGlzc3VlcyBkZXRlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKGN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IGVycm9yTWFwLCBpbnZhbGlkX3R5cGVfZXJyb3IsIHJlcXVpcmVkX2Vycm9yLCBkZXNjcmlwdGlvbiB9ID0gcGFyYW1zO1xuICAgIGlmIChlcnJvck1hcCAmJiAoaW52YWxpZF90eXBlX2Vycm9yIHx8IHJlcXVpcmVkX2Vycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHVzZSBcImludmFsaWRfdHlwZV9lcnJvclwiIG9yIFwicmVxdWlyZWRfZXJyb3JcIiBpbiBjb25qdW5jdGlvbiB3aXRoIGN1c3RvbSBlcnJvciBtYXAuYCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1hcClcbiAgICAgICAgcmV0dXJuIHsgZXJyb3JNYXA6IGVycm9yTWFwLCBkZXNjcmlwdGlvbiB9O1xuICAgIGNvbnN0IGN1c3RvbU1hcCA9IChpc3MsIGN0eCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHBhcmFtcztcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcImludmFsaWRfZW51bV92YWx1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjdHguZGF0YSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogKF9hID0gbWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogcmVxdWlyZWRfZXJyb3IpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNzLmNvZGUgIT09IFwiaW52YWxpZF90eXBlXCIpXG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IChfYiA9IG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6IGludmFsaWRfdHlwZV9lcnJvcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3JNYXA6IGN1c3RvbU1hcCwgZGVzY3JpcHRpb24gfTtcbn1cbmNsYXNzIFpvZFR5cGUge1xuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgX2dldFR5cGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIF9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KSB7XG4gICAgICAgIHJldHVybiAoY3R4IHx8IHtcbiAgICAgICAgICAgIGNvbW1vbjogaW5wdXQucGFyZW50LmNvbW1vbixcbiAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGlucHV0LnBhcmVudCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogbmV3IFBhcnNlU3RhdHVzKCksXG4gICAgICAgICAgICBjdHg6IHtcbiAgICAgICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICAgICAgZGF0YTogaW5wdXQuZGF0YSxcbiAgICAgICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpLFxuICAgICAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGlucHV0LnBhcmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXJzZVN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAoaXNBc3luYyhyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeW5jaHJvbm91cyBwYXJzZSBlbmNvdW50ZXJlZCBwcm9taXNlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfcGFyc2VBc3luYyhpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICB9XG4gICAgcGFyc2UoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2FmZVBhcnNlKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBzYWZlUGFyc2UoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBhc3luYzogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmFzeW5jKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5lcnJvck1hcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhdGgpIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICBcIn52YWxpZGF0ZVwiKGRhdGEpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBhc3luYzogISF0aGlzW1wifnN0YW5kYXJkXCJdLmFzeW5jLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdGg6IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2VTeW5jKHsgZGF0YSwgcGF0aDogW10sIHBhcmVudDogY3R4IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkKHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBjdHguY29tbW9uLmlzc3VlcyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoKF9iID0gKF9hID0gZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLm1lc3NhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5jbHVkZXMoXCJlbmNvdW50ZXJlZFwiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW1wifnN0YW5kYXJkXCJdLmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3R4LmNvbW1vbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VBc3luYyh7IGRhdGEsIHBhdGg6IFtdLCBwYXJlbnQ6IGN0eCB9KS50aGVuKChyZXN1bHQpID0+IGlzVmFsaWQocmVzdWx0KVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGlzc3VlczogY3R4LmNvbW1vbi5pc3N1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgcGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgYXN5bmMgc2FmZVBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgY29udGV4dHVhbEVycm9yTWFwOiBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wYXRoKSB8fCBbXSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWF5YmVBc3luY1Jlc3VsdCA9IHRoaXMuX3BhcnNlKHsgZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoaXNBc3luYyhtYXliZUFzeW5jUmVzdWx0KVxuICAgICAgICAgICAgPyBtYXliZUFzeW5jUmVzdWx0XG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShtYXliZUFzeW5jUmVzdWx0KSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICByZWZpbmUoY2hlY2ssIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZ2V0SXNzdWVQcm9wZXJ0aWVzID0gKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtZXNzYWdlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZmluZW1lbnQoKHZhbCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaGVjayh2YWwpO1xuICAgICAgICAgICAgY29uc3Qgc2V0RXJyb3IgPSAoKSA9PiBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICAgICAgLi4uZ2V0SXNzdWVQcm9wZXJ0aWVzKHZhbCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWZpbmVtZW50KGNoZWNrLCByZWZpbmVtZW50RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmICghY2hlY2sodmFsKSkge1xuICAgICAgICAgICAgICAgIGN0eC5hZGRJc3N1ZSh0eXBlb2YgcmVmaW5lbWVudERhdGEgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHJlZmluZW1lbnREYXRhKHZhbCwgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHJlZmluZW1lbnREYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInJlZmluZW1lbnRcIiwgcmVmaW5lbWVudCB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudChyZWZpbmVtZW50KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZGVmKSB7XG4gICAgICAgIC8qKiBBbGlhcyBvZiBzYWZlUGFyc2VBc3luYyAqL1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc2FmZVBhcnNlQXN5bmM7XG4gICAgICAgIHRoaXMuX2RlZiA9IGRlZjtcbiAgICAgICAgdGhpcy5wYXJzZSA9IHRoaXMucGFyc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zYWZlUGFyc2UgPSB0aGlzLnNhZmVQYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBhcnNlQXN5bmMgPSB0aGlzLnBhcnNlQXN5bmMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zYWZlUGFyc2VBc3luYyA9IHRoaXMuc2FmZVBhcnNlQXN5bmMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zcGEgPSB0aGlzLnNwYS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZmluZSA9IHRoaXMucmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lbWVudCA9IHRoaXMucmVmaW5lbWVudC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnN1cGVyUmVmaW5lID0gdGhpcy5zdXBlclJlZmluZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbmFsID0gdGhpcy5vcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm51bGxhYmxlID0gdGhpcy5udWxsYWJsZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm51bGxpc2ggPSB0aGlzLm51bGxpc2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hcnJheSA9IHRoaXMuYXJyYXkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gdGhpcy5wcm9taXNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3IgPSB0aGlzLm9yLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYW5kID0gdGhpcy5hbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJyYW5kID0gdGhpcy5icmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlZmF1bHQgPSB0aGlzLmRlZmF1bHQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jYXRjaCA9IHRoaXMuY2F0Y2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXNjcmliZSA9IHRoaXMuZGVzY3JpYmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5waXBlID0gdGhpcy5waXBlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNOdWxsYWJsZSA9IHRoaXMuaXNOdWxsYWJsZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzT3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpc1tcIn5zdGFuZGFyZFwiXSA9IHtcbiAgICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgICB2ZW5kb3I6IFwiem9kXCIsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGRhdGEpID0+IHRoaXNbXCJ+dmFsaWRhdGVcIl0oZGF0YSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gWm9kT3B0aW9uYWwuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gWm9kTnVsbGFibGUuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG51bGxpc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bGxhYmxlKCkub3B0aW9uYWwoKTtcbiAgICB9XG4gICAgYXJyYXkoKSB7XG4gICAgICAgIHJldHVybiBab2RBcnJheS5jcmVhdGUodGhpcyk7XG4gICAgfVxuICAgIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBab2RQcm9taXNlLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBvcihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIFpvZFVuaW9uLmNyZWF0ZShbdGhpcywgb3B0aW9uXSwgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgYW5kKGluY29taW5nKSB7XG4gICAgICAgIHJldHVybiBab2RJbnRlcnNlY3Rpb24uY3JlYXRlKHRoaXMsIGluY29taW5nLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZhdWx0KGRlZikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYnJhbmQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQnJhbmRlZCh7XG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJyYW5kZWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2goZGVmKSB7XG4gICAgICAgIGNvbnN0IGNhdGNoVmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIGlubmVyVHlwZTogdGhpcyxcbiAgICAgICAgICAgIGNhdGNoVmFsdWU6IGNhdGNoVmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IFRoaXMgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gbmV3IFRoaXMoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaXBlKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gWm9kUGlwZWxpbmUuY3JlYXRlKHRoaXMsIHRhcmdldCk7XG4gICAgfVxuICAgIHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gWm9kUmVhZG9ubHkuY3JlYXRlKHRoaXMpO1xuICAgIH1cbiAgICBpc09wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UodW5kZWZpbmVkKS5zdWNjZXNzO1xuICAgIH1cbiAgICBpc051bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2VzcztcbiAgICB9XG59XG5jb25zdCBjdWlkUmVnZXggPSAvXmNbXlxccy1dezgsfSQvaTtcbmNvbnN0IGN1aWQyUmVnZXggPSAvXlswLTlhLXpdKyQvO1xuY29uc3QgdWxpZFJlZ2V4ID0gL15bMC05QS1ISktNTlAtVFYtWl17MjZ9JC9pO1xuLy8gY29uc3QgdXVpZFJlZ2V4ID1cbi8vICAgL14oW2EtZjAtOV17OH0tW2EtZjAtOV17NH0tWzEtNV1bYS1mMC05XXszfS1bYS1mMC05XXs0fS1bYS1mMC05XXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmNvbnN0IHV1aWRSZWdleCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC9pO1xuY29uc3QgbmFub2lkUmVnZXggPSAvXlthLXowLTlfLV17MjF9JC9pO1xuY29uc3Qgand0UmVnZXggPSAvXltBLVphLXowLTktX10rXFwuW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dKiQvO1xuY29uc3QgZHVyYXRpb25SZWdleCA9IC9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xcZCtZKXwoPzpbLStdP1xcZCtbLixdXFxkK1kkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/Oig/OlstK10/XFxkK1cpfCg/OlstK10/XFxkK1suLF1cXGQrVyQpKT8oPzooPzpbLStdP1xcZCtEKXwoPzpbLStdP1xcZCtbLixdXFxkK0QkKSk/KD86VCg/PVtcXGQrLV0pKD86KD86Wy0rXT9cXGQrSCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtIJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzpbLStdP1xcZCsoPzpbLixdXFxkKyk/Uyk/KT8/JC87XG4vLyBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjE4MS8xNTUwMTU1XG4vLyBvbGQgdmVyc2lvbjogdG9vIHNsb3csIGRpZG4ndCBzdXBwb3J0IHVuaWNvZGVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPSAvXigoKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSsoXFwuKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSspKil8KChcXHgyMikoKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPygoW1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4N2ZdfFxceDIxfFtcXHgyMy1cXHg1Yl18W1xceDVkLVxceDdlXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KFxcXFwoW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBkLVxceDdmXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSkqKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPyhcXHgyMikpKUAoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSkkL2k7XG4vL29sZCBlbWFpbCByZWdleFxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKChbXjw+KClbXFxdLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF0uLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoPyEtKShbXjw+KClbXFxdLiw7Olxcc0BcIl0rXFwuKStbXjw+KClbXFxdLiw7Olxcc0BcIl17MSx9KVteLTw+KClbXFxdLiw7Olxcc0BcIl0kL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChcXFsoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXF0pfChcXFtJUHY2OigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSlcXF0pfChbQS1aYS16MC05XShbQS1aYS16MC05LV0qW0EtWmEtejAtOV0pKihcXC5bQS1aYS16XXsyLH0pKykpJC87XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16QS1aMC05XFwuXFwhXFwjXFwkXFwlXFwmXFwnXFwqXFwrXFwvXFw9XFw/XFxeXFxfXFxgXFx7XFx8XFx9XFx+XFwtXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXig/OlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pJC9pO1xuY29uc3QgZW1haWxSZWdleCA9IC9eKD8hXFwuKSg/IS4qXFwuXFwuKShbQS1aMC05XycrXFwtXFwuXSopW0EtWjAtOV8rLV1AKFtBLVowLTldW0EtWjAtOVxcLV0qXFwuKStbQS1aXXsyLH0kL2k7XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16MC05LiEjJCUm4oCZKisvPT9eX2B7fH1+LV0rQFthLXowLTktXSsoPzpcXC5bYS16MC05XFwtXSspKiQvaTtcbi8vIGZyb20gaHR0cHM6Ly90aGVrZXZpbnNjb3R0LmNvbS9lbW9qaXMtaW4tamF2YXNjcmlwdC8jd3JpdGluZy1hLXJlZ3VsYXItZXhwcmVzc2lvblxuY29uc3QgX2Vtb2ppUmVnZXggPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xubGV0IGVtb2ppUmVnZXg7XG4vLyBmYXN0ZXIsIHNpbXBsZXIsIHNhZmVyXG5jb25zdCBpcHY0UmVnZXggPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuY29uc3QgaXB2NENpZHJSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwvKDNbMC0yXXxbMTJdP1swLTldKSQvO1xuLy8gY29uc3QgaXB2NlJlZ2V4ID1cbi8vIC9eKChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKSQvO1xuY29uc3QgaXB2NlJlZ2V4ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3LDd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXXswLDR9KXswLDR9JVswLTlhLXpBLVpdezEsfXw6OihmZmZmKDowezEsNH0pezAsMX06KXswLDF9KCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSkpJC87XG5jb25zdCBpcHY2Q2lkclJlZ2V4ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3LDd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXXswLDR9KXswLDR9JVswLTlhLXpBLVpdezEsfXw6OihmZmZmKDowezEsNH0pezAsMX06KXswLDF9KCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSkpXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLztcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NjAzOTIvZGV0ZXJtaW5lLWlmLXN0cmluZy1pcy1pbi1iYXNlNjQtdXNpbmctamF2YXNjcmlwdFxuY29uc3QgYmFzZTY0UmVnZXggPSAvXihbMC05YS16QS1aKy9dezR9KSooKFswLTlhLXpBLVorL117Mn09PSl8KFswLTlhLXpBLVorL117M309KSk/JC87XG4vLyBodHRwczovL2Jhc2U2NC5ndXJ1L3N0YW5kYXJkcy9iYXNlNjR1cmxcbmNvbnN0IGJhc2U2NHVybFJlZ2V4ID0gL14oWzAtOWEtekEtWi1fXXs0fSkqKChbMC05YS16QS1aLV9dezJ9KD09KT8pfChbMC05YS16QS1aLV9dezN9KD0pPykpPyQvO1xuLy8gc2ltcGxlXG4vLyBjb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn1gO1xuLy8gbm8gbGVhcCB5ZWFyIHZhbGlkYXRpb25cbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS0oKDBbMTM1NzhdfDEwfDEyKS0zMXwoMFsxMy05XXwxWzAtMl0pLTMwfCgwWzEtOV18MVswLTJdKS0oMFsxLTldfDFcXFxcZHwyXFxcXGQpKWA7XG4vLyB3aXRoIGxlYXAgeWVhciB2YWxpZGF0aW9uXG5jb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgKChcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KDBbNDY5XXwxMSktKDBbMS05XXxbMTJdXFxcXGR8MzApfCgwMiktKDBbMS05XXwxXFxcXGR8MlswLThdKSkpYDtcbmNvbnN0IGRhdGVSZWdleCA9IG5ldyBSZWdFeHAoYF4ke2RhdGVSZWdleFNvdXJjZX0kYCk7XG5mdW5jdGlvbiB0aW1lUmVnZXhTb3VyY2UoYXJncykge1xuICAgIC8vIGxldCByZWdleCA9IGBcXFxcZHsyfTpcXFxcZHsyfTpcXFxcZHsyfWA7XG4gICAgbGV0IHJlZ2V4ID0gYChbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkOlswLTVdXFxcXGRgO1xuICAgIGlmIChhcmdzLnByZWNpc2lvbikge1xuICAgICAgICByZWdleCA9IGAke3JlZ2V4fVxcXFwuXFxcXGR7JHthcmdzLnByZWNpc2lvbn19YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgICByZWdleCA9IGAke3JlZ2V4fShcXFxcLlxcXFxkKyk/YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuZnVuY3Rpb24gdGltZVJlZ2V4KGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfSRgKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE0MzIzMVxuZnVuY3Rpb24gZGF0ZXRpbWVSZWdleChhcmdzKSB7XG4gICAgbGV0IHJlZ2V4ID0gYCR7ZGF0ZVJlZ2V4U291cmNlfVQke3RpbWVSZWdleFNvdXJjZShhcmdzKX1gO1xuICAgIGNvbnN0IG9wdHMgPSBbXTtcbiAgICBvcHRzLnB1c2goYXJncy5sb2NhbCA/IGBaP2AgOiBgWmApO1xuICAgIGlmIChhcmdzLm9mZnNldClcbiAgICAgICAgb3B0cy5wdXNoKGAoWystXVxcXFxkezJ9Oj9cXFxcZHsyfSlgKTtcbiAgICByZWdleCA9IGAke3JlZ2V4fSgke29wdHMuam9pbihcInxcIil9KWA7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4fSRgKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRJUChpcCwgdmVyc2lvbikge1xuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NFwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY0UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NlwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY2UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRKV1Qoand0LCBhbGcpIHtcbiAgICBpZiAoIWp3dFJlZ2V4LnRlc3Qoand0KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IFtoZWFkZXJdID0gand0LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgLy8gQ29udmVydCBiYXNlNjR1cmwgdG8gYmFzZTY0XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGhlYWRlclxuICAgICAgICAgICAgLnJlcGxhY2UoLy0vZywgXCIrXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXy9nLCBcIi9cIilcbiAgICAgICAgICAgIC5wYWRFbmQoaGVhZGVyLmxlbmd0aCArICgoNCAtIChoZWFkZXIubGVuZ3RoICUgNCkpICUgNCksIFwiPVwiKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IEpTT04ucGFyc2UoYXRvYihiYXNlNjQpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWNvZGVkICE9PSBcIm9iamVjdFwiIHx8IGRlY29kZWQgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghZGVjb2RlZC50eXAgfHwgIWRlY29kZWQuYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxnICYmIGRlY29kZWQuYWxnICE9PSBhbGcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVmFsaWRDaWRyKGlwLCB2ZXJzaW9uKSB7XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY0XCIgfHwgIXZlcnNpb24pICYmIGlwdjRDaWRyUmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NlwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY2Q2lkclJlZ2V4LnRlc3QoaXApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5jbGFzcyBab2RTdHJpbmcgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBTdHJpbmcoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5sZW5ndGggPiBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImxlbmd0aFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gaW5wdXQuZGF0YS5sZW5ndGggPiBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGlucHV0LmRhdGEubGVuZ3RoIDwgY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvb0JpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtYWlsXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtYWlsUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbW9qaVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4KSB7XG4gICAgICAgICAgICAgICAgICAgIGVtb2ppUmVnZXggPSBuZXcgUmVnRXhwKF9lbW9qaVJlZ2V4LCBcInVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZW1vamlSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1vamlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInV1aWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXVpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1dWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJuYW5vaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghbmFub2lkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcIm5hbm9pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImN1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImN1aWQyXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWQyUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImN1aWQyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1bGlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVsaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidWxpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXJsXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBuZXcgVVJMKGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBjaGVjay5yZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBjaGVjay5yZWdleC50ZXN0KGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0cmltXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImluY2x1ZGVzXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuaW5jbHVkZXMoY2hlY2sudmFsdWUsIGNoZWNrLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IGluY2x1ZGVzOiBjaGVjay52YWx1ZSwgcG9zaXRpb246IGNoZWNrLnBvc2l0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0b0xvd2VyQ2FzZVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidG9VcHBlckNhc2VcIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInN0YXJ0c1dpdGhcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5zdGFydHNXaXRoKGNoZWNrLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IHN0YXJ0c1dpdGg6IGNoZWNrLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbmRzV2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLmVuZHNXaXRoKGNoZWNrLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IGVuZHNXaXRoOiBjaGVjay52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZGF0ZXRpbWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gZGF0ZXRpbWVSZWdleChjaGVjayk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImRhdGVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gZGF0ZVJlZ2V4O1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gdGltZVJlZ2V4KGNoZWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkdXJhdGlvblJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiaXBcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZElQKGlucHV0LmRhdGEsIGNoZWNrLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiaXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImp3dFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSldUKGlucHV0LmRhdGEsIGNoZWNrLmFsZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJqd3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImNpZHJcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZENpZHIoaW5wdXQuZGF0YSwgY2hlY2sudmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjaWRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZTY0UmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImJhc2U2NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiYmFzZTY0dXJsXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NHVybFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJiYXNlNjR1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgX3JlZ2V4KHJlZ2V4LCB2YWxpZGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmluZW1lbnQoKGRhdGEpID0+IHJlZ2V4LnRlc3QoZGF0YSksIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW1haWwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImVtYWlsXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1cmxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBlbW9qaShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1vamlcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1dWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1dWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgbmFub2lkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJuYW5vaWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjdWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgY3VpZDIobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWQyXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdWxpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidWxpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGJhc2U2NChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiYmFzZTY0XCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgYmFzZTY0dXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gYmFzZTY0dXJsIGVuY29kaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGJhc2U2NCB0aGF0IGNhbiBzYWZlbHkgYmUgdXNlZCBpbiBVUkxzIGFuZCBmaWxlbmFtZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiYmFzZTY0dXJsXCIsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBqd3Qob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImp3dFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGlwKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJpcFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGNpZHIob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImNpZHJcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBkYXRldGltZShvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbG9jYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24pID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICBvZmZzZXQ6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vZmZzZXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgbG9jYWw6IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGF0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZGF0ZVwiLCBtZXNzYWdlIH0pO1xuICAgIH1cbiAgICB0aW1lKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24pID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZHVyYXRpb24obWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImR1cmF0aW9uXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgcmVnZXgocmVnZXgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwicmVnZXhcIixcbiAgICAgICAgICAgIHJlZ2V4OiByZWdleCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluY2x1ZGVzKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImluY2x1ZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBwb3NpdGlvbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXJ0c1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwic3RhcnRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW5kc1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZW5kc1dpdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluTGVuZ3RoLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heExlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhMZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImxlbmd0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IGxlbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYC5taW4oMSlgXG4gICAgICovXG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgdHJpbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRyaW1cIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvTG93ZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9Mb3dlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvVXBwZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9VcHBlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBpc0RhdGV0aW1lKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGV0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEYXRlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGVcIik7XG4gICAgfVxuICAgIGdldCBpc1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidGltZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZHVyYXRpb25cIik7XG4gICAgfVxuICAgIGdldCBpc0VtYWlsKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtYWlsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVUkwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidXJsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNFbW9qaSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJlbW9qaVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVVVJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1dWlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNOQU5PSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwibmFub2lkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWQyXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVTElEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInVsaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0lQKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImlwXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDSURSKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImNpZHJcIik7XG4gICAgfVxuICAgIGdldCBpc0Jhc2U2NCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJiYXNlNjRcIik7XG4gICAgfVxuICAgIGdldCBpc0Jhc2U2NHVybCgpIHtcbiAgICAgICAgLy8gYmFzZTY0dXJsIGVuY29kaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGJhc2U2NCB0aGF0IGNhbiBzYWZlbHkgYmUgdXNlZCBpbiBVUkxzIGFuZCBmaWxlbmFtZXNcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJiYXNlNjR1cmxcIik7XG4gICAgfVxuICAgIGdldCBtaW5MZW5ndGgoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heExlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbn1cblpvZFN0cmluZy5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTdHJpbmcsXG4gICAgICAgIGNvZXJjZTogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTY2NDg0L3doeS1kb2VzLW1vZHVsdXMtb3BlcmF0b3ItcmV0dXJuLWZyYWN0aW9uYWwtbnVtYmVyLWluLWphdmFzY3JpcHQvMzE3MTEwMzQjMzE3MTEwMzRcbmZ1bmN0aW9uIGZsb2F0U2FmZVJlbWFpbmRlcih2YWwsIHN0ZXApIHtcbiAgICBjb25zdCB2YWxEZWNDb3VudCA9ICh2YWwudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGNvbnN0IHN0ZXBEZWNDb3VudCA9IChzdGVwLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBkZWNDb3VudCA9IHZhbERlY0NvdW50ID4gc3RlcERlY0NvdW50ID8gdmFsRGVjQ291bnQgOiBzdGVwRGVjQ291bnQ7XG4gICAgY29uc3QgdmFsSW50ID0gcGFyc2VJbnQodmFsLnRvRml4ZWQoZGVjQ291bnQpLnJlcGxhY2UoXCIuXCIsIFwiXCIpKTtcbiAgICBjb25zdCBzdGVwSW50ID0gcGFyc2VJbnQoc3RlcC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgcmV0dXJuICh2YWxJbnQgJSBzdGVwSW50KSAvIE1hdGgucG93KDEwLCBkZWNDb3VudCk7XG59XG5jbGFzcyBab2ROdW1iZXIgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5taW4gPSB0aGlzLmd0ZTtcbiAgICAgICAgdGhpcy5tYXggPSB0aGlzLmx0ZTtcbiAgICAgICAgdGhpcy5zdGVwID0gdGhpcy5tdWx0aXBsZU9mO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBOdW1iZXIoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubnVtYmVyLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwiaW50XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNJbnRlZ2VyKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZDogXCJmbG9hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGNoZWNrLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LmRhdGEgPCBjaGVjay52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0LmRhdGEgPD0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA+IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA+PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmxvYXRTYWZlUmVtYWluZGVyKGlucHV0LmRhdGEsIGNoZWNrLnZhbHVlKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJmaW5pdGVcIikge1xuICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfZmluaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBndGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGd0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHRlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIHNldExpbWl0KGtpbmQsIHZhbHVlLCBpbmNsdXNpdmUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2ROdW1iZXIoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLmNoZWNrcyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbnQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJpbnRcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ucG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ubmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbXVsdGlwbGVPZih2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmaW5pdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJmaW5pdGVcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNhZmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSkuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGdldCBpc0ludCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJpbnRcIiB8fFxuICAgICAgICAgICAgKGNoLmtpbmQgPT09IFwibXVsdGlwbGVPZlwiICYmIHV0aWwuaXNJbnRlZ2VyKGNoLnZhbHVlKSkpO1xuICAgIH1cbiAgICBnZXQgaXNGaW5pdGUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsLCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcImZpbml0ZVwiIHx8XG4gICAgICAgICAgICAgICAgY2gua2luZCA9PT0gXCJpbnRcIiB8fFxuICAgICAgICAgICAgICAgIGNoLmtpbmQgPT09IFwibXVsdGlwbGVPZlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShtaW4pICYmIE51bWJlci5pc0Zpbml0ZShtYXgpO1xuICAgIH1cbn1cblpvZE51bWJlci5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdW1iZXIoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bWJlcixcbiAgICAgICAgY29lcmNlOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgfHwgZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RCaWdJbnQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5taW4gPSB0aGlzLmd0ZTtcbiAgICAgICAgdGhpcy5tYXggPSB0aGlzLmx0ZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBCaWdJbnQoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SW52YWxpZElucHV0KGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJpZ2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEludmFsaWRJbnB1dChpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGNoZWNrLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LmRhdGEgPCBjaGVjay52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0LmRhdGEgPD0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA+IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA+PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YSAlIGNoZWNrLnZhbHVlICE9PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlT2Y6IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBfZ2V0SW52YWxpZElucHV0KGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYmlnaW50LFxuICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbnBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ubmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbn1cblpvZEJpZ0ludC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCaWdJbnQsXG4gICAgICAgIGNvZXJjZTogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RCb29sZWFuIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gQm9vbGVhbihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJvb2xlYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RCb29sZWFuLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEJvb2xlYW4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJvb2xlYW4sXG4gICAgICAgIGNvZXJjZTogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpIHx8IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRGF0ZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IG5ldyBEYXRlKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5kYXRlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGlucHV0LmRhdGEuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5nZXRUaW1lKCkgPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZShpbnB1dC5kYXRhLmdldFRpbWUoKSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkRhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluRGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4RGF0ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhEYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5EYXRlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCA/IG5ldyBEYXRlKG1pbikgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgbWF4RGF0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ICE9IG51bGwgPyBuZXcgRGF0ZShtYXgpIDogbnVsbDtcbiAgICB9XG59XG5ab2REYXRlLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REYXRlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kU3ltYm9sIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3ltYm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN5bWJvbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RTeW1ib2wuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kU3ltYm9sKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTeW1ib2wsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RVbmRlZmluZWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFVuZGVmaW5lZC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmRlZmluZWQoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuZGVmaW5lZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE51bGwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm51bGwsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kTnVsbC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQW55IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHRvIHByZXZlbnQgaW5zdGFuY2VzIG9mIG90aGVyIGNsYXNzZXMgZnJvbSBleHRlbmRpbmcgWm9kQW55LiB0aGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBjYXRjaGFsbCBpbiBab2RPYmplY3QuXG4gICAgICAgIHRoaXMuX2FueSA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQW55LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFueSh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQW55LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVW5rbm93biBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICB0aGlzLl91bmtub3duID0gdHJ1ZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmtub3duLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVua25vd24oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVua25vd24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROZXZlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5ldmVyLFxuICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgfVxufVxuWm9kTmV2ZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmV2ZXIoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5ldmVyLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVm9pZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS52b2lkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFZvaWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVm9pZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVm9pZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEFycmF5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4LCBzdGF0dXMgfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuX2RlZjtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5leGFjdExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY3R4LmRhdGEubGVuZ3RoID4gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBjdHguZGF0YS5sZW5ndGggPCBkZWYuZXhhY3RMZW5ndGgudmFsdWU7XG4gICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHRvb0JpZyA/IFpvZElzc3VlQ29kZS50b29fYmlnIDogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogKHRvb1NtYWxsID8gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogKHRvb0JpZyA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLmV4YWN0TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5taW5MZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPCBkZWYubWluTGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5MZW5ndGgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5taW5MZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1heExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5tYXhMZW5ndGgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhMZW5ndGgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5tYXhMZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsuLi5jdHguZGF0YV0ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZUFzeW5jKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaSkpO1xuICAgICAgICAgICAgfSkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5jdHguZGF0YV0ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLnR5cGUuX3BhcnNlU3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0KTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG4gICAgbWluKG1pbkxlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1pbkxlbmd0aDogeyB2YWx1ZTogbWluTGVuZ3RoLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhMZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtYXhMZW5ndGg6IHsgdmFsdWU6IG1heExlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZXhhY3RMZW5ndGg6IHsgdmFsdWU6IGxlbiwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBtZXNzYWdlKTtcbiAgICB9XG59XG5ab2RBcnJheS5jcmVhdGUgPSAoc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgdHlwZTogc2NoZW1hLFxuICAgICAgICBtaW5MZW5ndGg6IG51bGwsXG4gICAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgICAgZXhhY3RMZW5ndGg6IG51bGwsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5mdW5jdGlvbiBkZWVwUGFydGlhbGlmeShzY2hlbWEpIHtcbiAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5zaGFwZSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSBzY2hlbWEuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBab2RPcHRpb25hbC5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoZmllbGRTY2hlbWEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi5zY2hlbWEuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZEFycmF5KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICB0eXBlOiBkZWVwUGFydGlhbGlmeShzY2hlbWEuZWxlbWVudCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS51bndyYXAoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gWm9kTnVsbGFibGUuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS51bndyYXAoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RUdXBsZSkge1xuICAgICAgICByZXR1cm4gWm9kVHVwbGUuY3JlYXRlKHNjaGVtYS5pdGVtcy5tYXAoKGl0ZW0pID0+IGRlZXBQYXJ0aWFsaWZ5KGl0ZW0pKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbn1cbmNsYXNzIFpvZE9iamVjdCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9jYWNoZWQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgSW4gbW9zdCBjYXNlcywgdGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIC0gdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBub3cgc2lsZW50bHkgc3RyaXBwZWQuXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIHBhc3MgdGhyb3VnaCB1bmtub3duIHByb3BlcnRpZXMsIHVzZSBgLnBhc3N0aHJvdWdoKClgIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5vbnN0cmljdCA9IHRoaXMucGFzc3Rocm91Z2g7XG4gICAgICAgIC8vIGV4dGVuZDxcbiAgICAgICAgLy8gICBBdWdtZW50YXRpb24gZXh0ZW5kcyBab2RSYXdTaGFwZSxcbiAgICAgICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgICAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgT3V0cHV0XG4gICAgICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgICAgIC8vICAgfT4sXG4gICAgICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIElucHV0XG4gICAgICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PlxuICAgICAgICAvLyA+KFxuICAgICAgICAvLyAgIGF1Z21lbnRhdGlvbjogQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAgICAgLy8gICBleHRlbmRTaGFwZTxULCBBdWdtZW50YXRpb24+LFxuICAgICAgICAvLyAgIFVua25vd25LZXlzLFxuICAgICAgICAvLyAgIENhdGNoYWxsLFxuICAgICAgICAvLyAgIE5ld091dHB1dCxcbiAgICAgICAgLy8gICBOZXdJbnB1dFxuICAgICAgICAvLyA+IHtcbiAgICAgICAgLy8gICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIC8vICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgIC8vICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgLy8gICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgIC8vICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgVXNlIGAuZXh0ZW5kYCBpbnN0ZWFkXG4gICAgICAgICAqICAqL1xuICAgICAgICB0aGlzLmF1Z21lbnQgPSB0aGlzLmV4dGVuZDtcbiAgICB9XG4gICAgX2dldENhY2hlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlZCAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWQ7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSB1dGlsLm9iamVjdEtleXMoc2hhcGUpO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2NhY2hlZCA9IHsgc2hhcGUsIGtleXMgfSk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCB7IHNoYXBlLCBrZXlzOiBzaGFwZUtleXMgfSA9IHRoaXMuX2dldENhY2hlZCgpO1xuICAgICAgICBjb25zdCBleHRyYUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCEodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgWm9kTmV2ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpcFwiKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNoYXBlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXBlS2V5cykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsaWRhdG9yID0gc2hhcGVba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3R4LmRhdGFba2V5XTtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBrZXlWYWxpZGF0b3IuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIFpvZE5ldmVyKSB7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duS2V5cyA9IHRoaXMuX2RlZi51bmtub3duS2V5cztcbiAgICAgICAgICAgIGlmICh1bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGN0eC5kYXRhW2tleV0gfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBleHRyYUtleXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmtub3duS2V5cyA9PT0gXCJzdHJpcFwiKSA7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIFpvZE9iamVjdCBlcnJvcjogaW52YWxpZCB1bmtub3duS2V5cyB2YWx1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJ1biBjYXRjaGFsbCB2YWxpZGF0aW9uXG4gICAgICAgICAgICBjb25zdCBjYXRjaGFsbCA9IHRoaXMuX2RlZi5jYXRjaGFsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3R4LmRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRjaGFsbC5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwga2V5KSAvLywgY3R4LmNoaWxkKGtleSksIHZhbHVlLCBnZXRQYXJzZWRUeXBlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bmNQYWlycyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5c1NldDogcGFpci5hbHdheXNTZXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3luY1BhaXJzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoc3luY1BhaXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgfVxuICAgIHN0cmljdChtZXNzYWdlKSB7XG4gICAgICAgIGVycm9yVXRpbC5lcnJUb09iajtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwic3RyaWN0XCIsXG4gICAgICAgICAgICAuLi4obWVzc2FnZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWFwOiAoaXNzdWUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEVycm9yID0gKF9jID0gKF9iID0gKF9hID0gdGhpcy5fZGVmKS5lcnJvck1hcCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGlzc3VlLCBjdHgpLm1lc3NhZ2UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGN0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IChfZCA9IGVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdHJpcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhc3N0aHJvdWdoKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJwYXNzdGhyb3VnaFwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gY29uc3QgQXVnbWVudEZhY3RvcnkgPVxuICAgIC8vICAgPERlZiBleHRlbmRzIFpvZE9iamVjdERlZj4oZGVmOiBEZWYpID0+XG4gICAgLy8gICA8QXVnbWVudGF0aW9uIGV4dGVuZHMgWm9kUmF3U2hhcGU+KFxuICAgIC8vICAgICBhdWdtZW50YXRpb246IEF1Z21lbnRhdGlvblxuICAgIC8vICAgKTogWm9kT2JqZWN0PFxuICAgIC8vICAgICBleHRlbmRTaGFwZTxSZXR1cm5UeXBlPERlZltcInNoYXBlXCJdPiwgQXVnbWVudGF0aW9uPixcbiAgICAvLyAgICAgRGVmW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICAgIERlZltcImNhdGNoYWxsXCJdXG4gICAgLy8gICA+ID0+IHtcbiAgICAvLyAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICAgIC4uLmRlZixcbiAgICAvLyAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAvLyAgICAgICAgIC4uLmRlZi5zaGFwZSgpLFxuICAgIC8vICAgICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgIC8vICAgICAgIH0pLFxuICAgIC8vICAgICB9KSBhcyBhbnk7XG4gICAgLy8gICB9O1xuICAgIGV4dGVuZChhdWdtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmlvciB0byB6b2RAMS4wLjEyIHRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGVcbiAgICAgKiBpbmZlcnJlZCB0eXBlIG9mIG1lcmdlZCBvYmplY3RzLiBQbGVhc2VcbiAgICAgKiB1cGdyYWRlIGlmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGlzc3Vlcy5cbiAgICAgKi9cbiAgICBtZXJnZShtZXJnaW5nKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAgICAgICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgICAgICAuLi5tZXJnaW5nLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICAvLyBtZXJnZTxcbiAgICAvLyAgIEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0LFxuICAgIC8vICAgQXVnbWVudGF0aW9uIGV4dGVuZHMgSW5jb21pbmdbXCJzaGFwZVwiXSxcbiAgICAvLyAgIE5ld091dHB1dCBleHRlbmRzIHtcbiAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX291dHB1dFwiXVxuICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIE91dHB1dFxuICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH0sXG4gICAgLy8gICBOZXdJbnB1dCBleHRlbmRzIHtcbiAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfaW5wdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBJbnB1dFxuICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgIC8vICAgfVxuICAgIC8vID4oXG4gICAgLy8gICBtZXJnaW5nOiBJbmNvbWluZ1xuICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIFJldHVyblR5cGU8SW5jb21pbmdbXCJfZGVmXCJdW1wic2hhcGVcIl0+PixcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1wiY2F0Y2hhbGxcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQsXG4gICAgLy8gICBOZXdJbnB1dFxuICAgIC8vID4ge1xuICAgIC8vICAgY29uc3QgbWVyZ2VkOiBhbnkgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAvLyAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAvLyAgICAgc2hhcGU6ICgpID0+XG4gICAgLy8gICAgICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyh0aGlzLl9kZWYuc2hhcGUoKSwgbWVyZ2luZy5fZGVmLnNoYXBlKCkpLFxuICAgIC8vICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAvLyAgIHJldHVybiBtZXJnZWQ7XG4gICAgLy8gfVxuICAgIHNldEtleShrZXksIHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdWdtZW50KHsgW2tleV06IHNjaGVtYSB9KTtcbiAgICB9XG4gICAgLy8gbWVyZ2U8SW5jb21pbmcgZXh0ZW5kcyBBbnlab2RPYmplY3Q+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiAvL1pvZE9iamVjdDxUICYgSW5jb21pbmdbXCJfc2hhcGVcIl0sIFVua25vd25LZXlzLCBDYXRjaGFsbD4gPSAobWVyZ2luZykgPT4ge1xuICAgIC8vIFpvZE9iamVjdDxcbiAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIFJldHVyblR5cGU8SW5jb21pbmdbXCJfZGVmXCJdW1wic2hhcGVcIl0+PixcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1wiY2F0Y2hhbGxcIl1cbiAgICAvLyA+IHtcbiAgICAvLyAgIC8vIGNvbnN0IG1lcmdlZFNoYXBlID0gb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyhcbiAgICAvLyAgIC8vICAgdGhpcy5fZGVmLnNoYXBlKCksXG4gICAgLy8gICAvLyAgIG1lcmdpbmcuX2RlZi5zaGFwZSgpXG4gICAgLy8gICAvLyApO1xuICAgIC8vICAgY29uc3QgbWVyZ2VkOiBhbnkgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAvLyAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAvLyAgICAgc2hhcGU6ICgpID0+XG4gICAgLy8gICAgICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyh0aGlzLl9kZWYuc2hhcGUoKSwgbWVyZ2luZy5fZGVmLnNoYXBlKCkpLFxuICAgIC8vICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAvLyAgIHJldHVybiBtZXJnZWQ7XG4gICAgLy8gfVxuICAgIGNhdGNoYWxsKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNhdGNoYWxsOiBpbmRleCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBpY2sobWFzaykge1xuICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXMobWFzaykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAobWFza1trZXldICYmIHRoaXMuc2hhcGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbWl0KG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBkZWVwUGFydGlhbCgpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBQYXJ0aWFsaWZ5KHRoaXMpO1xuICAgIH1cbiAgICBwYXJ0aWFsKG1hc2spIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1aXJlZChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChtYXNrICYmICFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGRTY2hlbWE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0ZpZWxkIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC5fZGVmLmlubmVyVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IG5ld0ZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAga2V5b2YoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVab2RFbnVtKHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSk7XG4gICAgfVxufVxuWm9kT2JqZWN0LmNyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RPYmplY3Quc3RyaWN0Q3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaWN0XCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RPYmplY3QubGF6eWNyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFVuaW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJlc3VsdHMocmVzdWx0cykge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGlzc3VlLWZyZWUgdmFsaWRhdGlvbiBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGlzc3VlcyBmcm9tIGRpcnR5IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKC4uLnJlc3VsdC5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJldHVybiBpbnZhbGlkXG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IG5ldyBab2RFcnJvcihyZXN1bHQuY3R4LmNvbW1vbi5pc3N1ZXMpKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLFxuICAgICAgICAgICAgICAgIHVuaW9uRXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wdGlvbnMubWFwKGFzeW5jIChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0IG9wdGlvbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGN0eDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKS50aGVuKGhhbmRsZVJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHggPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIgJiYgIWRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0geyByZXN1bHQsIGN0eDogY2hpbGRDdHggfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3Vlcy5wdXNoKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4uZGlydHkuY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXJ0eS5yZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IGlzc3Vlcy5tYXAoKGlzc3VlcykgPT4gbmV3IFpvZEVycm9yKGlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxufVxuWm9kVW5pb24uY3JlYXRlID0gKHR5cGVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVuaW9uKHtcbiAgICAgICAgb3B0aW9uczogdHlwZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5pb24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgWm9kRGlzY3JpbWluYXRlZFVuaW9uICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuY29uc3QgZ2V0RGlzY3JpbWluYXRvciA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMYXp5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5pbm5lclR5cGUoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMaXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBbdHlwZS52YWx1ZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RFbnVtKSB7XG4gICAgICAgIHJldHVybiB0eXBlLm9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROYXRpdmVFbnVtKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyh0eXBlLmVudW0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsKSB7XG4gICAgICAgIHJldHVybiBbbnVsbF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gW251bGwsIC4uLmdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSldO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQnJhbmRlZCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQ2F0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5fZGVmLmlubmVyVHlwZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcbmNsYXNzIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yID0gdGhpcy5kaXNjcmltaW5hdG9yO1xuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBjdHguZGF0YVtkaXNjcmltaW5hdG9yXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zTWFwLmdldChkaXNjcmltaW5hdG9yVmFsdWUpO1xuICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtkaXNjcmltaW5hdG9yXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRpc2NyaW1pbmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGlzY3JpbWluYXRvcjtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnNNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9uc01hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uIHNjaGVtYS4gSXRzIGJlaGF2aW91ciBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgbm9ybWFsIHoudW5pb24oKSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBIb3dldmVyLCBpdCBvbmx5IGFsbG93cyBhIHVuaW9uIG9mIG9iamVjdHMsIGFsbCBvZiB3aGljaCBuZWVkIHRvIHNoYXJlIGEgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBtdXN0XG4gICAgICogaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgZWFjaCBvYmplY3QgaW4gdGhlIHVuaW9uLlxuICAgICAqIEBwYXJhbSBkaXNjcmltaW5hdG9yIHRoZSBuYW1lIG9mIHRoZSBkaXNjcmltaW5hdG9yIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGVzIGFuIGFycmF5IG9mIG9iamVjdCBzY2hlbWFzXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICAgIC8vIEdldCBhbGwgdGhlIHZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWVzXG4gICAgICAgIGNvbnN0IG9wdGlvbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWVzID0gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNoYXBlW2Rpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgICAgIGlmICghZGlzY3JpbWluYXRvclZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgZGlzY3JpbWluYXRvciB2YWx1ZSBmb3Iga2V5IFxcYCR7ZGlzY3JpbWluYXRvcn1cXGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkaXNjcmltaW5hdG9yVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZGlzY3JpbWluYXRvcil9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcodmFsdWUpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnNldCh2YWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REaXNjcmltaW5hdGVkVW5pb24sXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnNNYXAsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICBjb25zdCBhVHlwZSA9IGdldFBhcnNlZFR5cGUoYSk7XG4gICAgY29uc3QgYlR5cGUgPSBnZXRQYXJzZWRUeXBlKGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLm9iamVjdCAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgY29uc3QgYktleXMgPSB1dGlsLm9iamVjdEtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSB1dGlsXG4gICAgICAgICAgICAub2JqZWN0S2V5cyhhKVxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBiS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5hLCAuLi5iIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXJlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBzaGFyZWRWYWx1ZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdPYmogfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0FycmF5LnB1c2goc2hhcmVkVmFsdWUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld0FycmF5IH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLmRhdGUgJiZcbiAgICAgICAgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJlxuICAgICAgICArYSA9PT0gK2IpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbn1cbmNsYXNzIFpvZEludGVyc2VjdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBoYW5kbGVQYXJzZWQgPSAocGFyc2VkTGVmdCwgcGFyc2VkUmlnaHQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Fib3J0ZWQocGFyc2VkTGVmdCkgfHwgaXNBYm9ydGVkKHBhcnNlZFJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VWYWx1ZXMocGFyc2VkTGVmdC52YWx1ZSwgcGFyc2VkUmlnaHQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGlydHkocGFyc2VkTGVmdCkgfHwgaXNEaXJ0eShwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogbWVyZ2VkLmRhdGEgfTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmLmxlZnQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKS50aGVuKChbbGVmdCwgcmlnaHRdKSA9PiBoYW5kbGVQYXJzZWQobGVmdCwgcmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVQYXJzZWQodGhpcy5fZGVmLmxlZnQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KSwgdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSA9IChsZWZ0LCByaWdodCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RJbnRlcnNlY3Rpb24oe1xuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVHVwbGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgbWluaW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdCA9IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICBpZiAoIXJlc3QgJiYgY3R4LmRhdGEubGVuZ3RoID4gdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgbWF4aW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4uY3R4LmRhdGFdXG4gICAgICAgICAgICAubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuX2RlZi5pdGVtc1tpdGVtSW5kZXhdIHx8IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICAgICAgaWYgKCFzY2hlbWEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGl0ZW1JbmRleCkpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gISF4KTsgLy8gZmlsdGVyIG51bGxzXG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaXRlbXMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaXRlbXM7XG4gICAgfVxuICAgIHJlc3QocmVzdCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHJlc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblpvZFR1cGxlLmNyZWF0ZSA9IChzY2hlbWFzLCBwYXJhbXMpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSlcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgWm9kVHVwbGUoe1xuICAgICAgICBpdGVtczogc2NoZW1hcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RUdXBsZSxcbiAgICAgICAgcmVzdDogbnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFJlY29yZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdHguZGF0YSkge1xuICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5OiBrZXlUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwga2V5LCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGN0eC5kYXRhW2tleV0sIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RBc3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGZpcnN0LCBzZWNvbmQsIHRoaXJkKSB7XG4gICAgICAgIGlmIChzZWNvbmQgaW5zdGFuY2VvZiBab2RUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICAgICAga2V5VHlwZTogZmlyc3QsXG4gICAgICAgICAgICAgICAgdmFsdWVUeXBlOiBzZWNvbmQsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWNvcmQsXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlyZCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICBrZXlUeXBlOiBab2RTdHJpbmcuY3JlYXRlKCksXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWNvcmQsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHNlY29uZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIFpvZE1hcCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5tYXApIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubWFwLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBjb25zdCBwYWlycyA9IFsuLi5jdHguZGF0YS5lbnRyaWVzKCldLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBrZXksIGN0eC5wYXRoLCBbaW5kZXgsIFwia2V5XCJdKSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwgW2luZGV4LCBcInZhbHVlXCJdKSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxNYXAuc2V0KGtleS52YWx1ZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5ab2RNYXAuY3JlYXRlID0gKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RNYXAoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTWFwLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kU2V0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zZXQpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc2V0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoZGVmLm1pblNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplIDwgZGVmLm1pblNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pblNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluU2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4U2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLnNpemUgPiBkZWYubWF4U2l6ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heFNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4U2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplU2V0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkU2V0LmFkZChlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcGFyc2VkU2V0IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbLi4uY3R4LmRhdGEudmFsdWVzKCldLm1hcCgoaXRlbSwgaSkgPT4gdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudHMpLnRoZW4oKGVsZW1lbnRzKSA9PiBmaW5hbGl6ZVNldChlbGVtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplU2V0KGVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtaW4obWluU2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5TaXplOiB7IHZhbHVlOiBtaW5TaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhTaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heFNpemU6IHsgdmFsdWU6IG1heFNpemUsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2l6ZShzaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbihzaXplLCBtZXNzYWdlKS5tYXgoc2l6ZSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZFNldC5jcmVhdGUgPSAodmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgbWluU2l6ZTogbnVsbCxcbiAgICAgICAgbWF4U2l6ZTogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTZXQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RGdW5jdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnZhbGlkYXRlID0gdGhpcy5pbXBsZW1lbnQ7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWFrZUFyZ3NJc3N1ZShhcmdzLCBlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJc3N1ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcHM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3JNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlUmV0dXJuc0lzc3VlKHJldHVybnMsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5zLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNjaGVtYUVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvck1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcCxcbiAgICAgICAgICAgICAgICBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfcmV0dXJuX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVFcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwIH07XG4gICAgICAgIGNvbnN0IGZuID0gY3R4LmRhdGE7XG4gICAgICAgIGlmICh0aGlzLl9kZWYucmV0dXJucyBpbnN0YW5jZW9mIFpvZFByb21pc2UpIHtcbiAgICAgICAgICAgIC8vIFdvdWxkIGxvdmUgYSB3YXkgdG8gYXZvaWQgZGlzYWJsaW5nIHRoaXMgcnVsZSwgYnV0IHdlIG5lZWRcbiAgICAgICAgICAgIC8vIGFuIGFsaWFzICh1c2luZyBhbiBhcnJvdyBmdW5jdGlvbiB3YXMgd2hhdCBjYXVzZWQgMjY1MSkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBPSyhhc3luYyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKFtdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gYXdhaXQgbWUuX2RlZi5hcmdzXG4gICAgICAgICAgICAgICAgICAgIC5wYXJzZUFzeW5jKGFyZ3MsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VBcmdzSXNzdWUoYXJncywgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gYXdhaXQgbWUuX2RlZi5yZXR1cm5zLl9kZWYudHlwZVxuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhyZXN1bHQsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRSZXR1cm5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gbWUuX2RlZi5hcmdzLnNhZmVQYXJzZShhcmdzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkQXJncy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBab2RFcnJvcihbbWFrZUFyZ3NJc3N1ZShhcmdzLCBwYXJzZWRBcmdzLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJldHVybnMgPSBtZS5fZGVmLnJldHVybnMuc2FmZVBhcnNlKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFJldHVybnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBwYXJzZWRSZXR1cm5zLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5hcmdzO1xuICAgIH1cbiAgICByZXR1cm5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnJldHVybnM7XG4gICAgfVxuICAgIGFyZ3MoLi4uaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBhcmdzOiBab2RUdXBsZS5jcmVhdGUoaXRlbXMpLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm5zKHJldHVyblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdHJpY3RJbXBsZW1lbnQoZnVuYykge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGdW5jID0gdGhpcy5wYXJzZShmdW5jKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYXJncywgcmV0dXJucywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgYXJnczogKGFyZ3NcbiAgICAgICAgICAgICAgICA/IGFyZ3NcbiAgICAgICAgICAgICAgICA6IFpvZFR1cGxlLmNyZWF0ZShbXSkucmVzdChab2RVbmtub3duLmNyZWF0ZSgpKSksXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5zIHx8IFpvZFVua25vd24uY3JlYXRlKCksXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEZ1bmN0aW9uLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBab2RMYXp5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBsYXp5U2NoZW1hID0gdGhpcy5fZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gbGF6eVNjaGVtYS5fcGFyc2UoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgIH1cbn1cblpvZExhenkuY3JlYXRlID0gKGdldHRlciwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgZ2V0dGVyOiBnZXR0ZXIsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGF6eSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZExpdGVyYWwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LmRhdGEgIT09IHRoaXMuX2RlZi52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWwsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHRoaXMuX2RlZi52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZTtcbiAgICB9XG59XG5ab2RMaXRlcmFsLmNyZWF0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMaXRlcmFsKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZExpdGVyYWwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5mdW5jdGlvbiBjcmVhdGVab2RFbnVtKHZhbHVlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmNsYXNzIFpvZEVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX1pvZEVudW1fY2FjaGUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0LmRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIFwiZlwiKSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgbmV3IFNldCh0aGlzLl9kZWYudmFsdWVzKSwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgXCJmXCIpLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB0aGlzLl9kZWYudmFsdWVzO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2VudW1fdmFsdWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXhwZWN0ZWRWYWx1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVzO1xuICAgIH1cbiAgICBnZXQgZW51bSgpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGdldCBWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgRW51bSgpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGV4dHJhY3QodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHZhbHVlcywge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjbHVkZSh2YWx1ZXMsIG5ld0RlZiA9IHRoaXMuX2RlZikge1xuICAgICAgICByZXR1cm4gWm9kRW51bS5jcmVhdGUodGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhdmFsdWVzLmluY2x1ZGVzKG9wdCkpLCB7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICAuLi5uZXdEZWYsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbl9ab2RFbnVtX2NhY2hlID0gbmV3IFdlYWtNYXAoKTtcblpvZEVudW0uY3JlYXRlID0gY3JlYXRlWm9kRW51bTtcbmNsYXNzIFpvZE5hdGl2ZUVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX1pvZE5hdGl2ZUVudW1fY2FjaGUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbnVtVmFsdWVzID0gdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXModGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZyAmJlxuICAgICAgICAgICAgY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHV0aWwub2JqZWN0VmFsdWVzKG5hdGl2ZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHV0aWwuam9pblZhbHVlcyhleHBlY3RlZFZhbHVlcyksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgXCJmXCIpKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ab2ROYXRpdmVFbnVtX2NhY2hlLCBuZXcgU2V0KHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpKSwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgXCJmXCIpLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG59XG5fWm9kTmF0aXZlRW51bV9jYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5ab2ROYXRpdmVFbnVtLmNyZWF0ZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmF0aXZlRW51bSh7XG4gICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hdGl2ZUVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RQcm9taXNlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnByb21pc2UgJiZcbiAgICAgICAgICAgIGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnByb21pc2UsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNpZmllZCA9IGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnByb21pc2VcbiAgICAgICAgICAgID8gY3R4LmRhdGFcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGN0eC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIE9LKHByb21pc2lmaWVkLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5wYXJzZUFzeW5jKGRhdGEsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcDogY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cblpvZFByb21pc2UuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RQcm9taXNlKHtcbiAgICAgICAgdHlwZTogc2NoZW1hLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFByb21pc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RFZmZlY3RzIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgaW5uZXJUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgc291cmNlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHNcbiAgICAgICAgICAgID8gdGhpcy5fZGVmLnNjaGVtYS5zb3VyY2VUeXBlKClcbiAgICAgICAgICAgIDogdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IHRoaXMuX2RlZi5lZmZlY3QgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgY2hlY2tDdHggPSB7XG4gICAgICAgICAgICBhZGRJc3N1ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmZhdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBwYXRoKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQ3R4LmFkZElzc3VlID0gY2hlY2tDdHguYWRkSXNzdWUuYmluZChjaGVja0N0eCk7XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJwcmVwcm9jZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IGVmZmVjdC50cmFuc2Zvcm0oY3R4LmRhdGEsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm9jZXNzZWQpLnRoZW4oYXN5bmMgKHByb2Nlc3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwicmVmaW5lbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRlUmVmaW5lbWVudCA9IChhY2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QucmVmaW5lbWVudChhY2MsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHJlZmluZW1lbnQgZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZFxuICAgICAgICAgICAgICAgIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAuX3BhcnNlQXN5bmMoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChpbm5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXN5bmNocm9ub3VzIHRyYW5zZm9ybSBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgIC5fcGFyc2VBc3luYyh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGJhc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGJhc2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWZmZWN0LnRyYW5zZm9ybShiYXNlLnZhbHVlLCBjaGVja0N0eCkpLnRoZW4oKHJlc3VsdCkgPT4gKHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoZWZmZWN0KTtcbiAgICB9XG59XG5ab2RFZmZlY3RzLmNyZWF0ZSA9IChzY2hlbWEsIGVmZmVjdCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIGVmZmVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3MgPSAocHJlcHJvY2Vzcywgc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInByZXByb2Nlc3NcIiwgdHJhbnNmb3JtOiBwcmVwcm9jZXNzIH0sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE9wdGlvbmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZE9wdGlvbmFsLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9wdGlvbmFsKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTnVsbGFibGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2ROdWxsYWJsZS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsYWJsZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZERlZmF1bHQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGxldCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kZWYuZGVmYXVsdFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVtb3ZlRGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kRGVmYXVsdC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHQsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIHBhcmFtcy5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcGFyYW1zLmRlZmF1bHRcbiAgICAgICAgICAgIDogKCkgPT4gcGFyYW1zLmRlZmF1bHQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RDYXRjaCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgLy8gbmV3Q3R4IGlzIHVzZWQgdG8gbm90IGNvbGxlY3QgaXNzdWVzIGZyb20gaW5uZXIgdHlwZXMgaW4gY3R4XG4gICAgICAgIGNvbnN0IG5ld0N0eCA9IHtcbiAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGE6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgcGF0aDogbmV3Q3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5uZXdDdHgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogXCJ2YWxpZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ2F0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZENhdGNoLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICBjYXRjaFZhbHVlOiB0eXBlb2YgcGFyYW1zLmNhdGNoID09PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMuY2F0Y2ggOiAoKSA9PiBwYXJhbXMuY2F0Y2gsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROYU4gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5uYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubmFuLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxufVxuWm9kTmFOLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5hTih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmFOLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY29uc3QgQlJBTkQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5jbGFzcyBab2RCcmFuZGVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG59XG5jbGFzcyBab2RQaXBlbGluZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQXN5bmMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5SZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuaW4uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShpblJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gdGhpcy5fZGVmLmluLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJkaXJ0eVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYub3V0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYSwgYikge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFBpcGVsaW5lKHtcbiAgICAgICAgICAgIGluOiBhLFxuICAgICAgICAgICAgb3V0OiBiLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQaXBlbGluZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY2xhc3MgWm9kUmVhZG9ubHkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBjb25zdCBmcmVlemUgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlID0gT2JqZWN0LmZyZWV6ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNBc3luYyhyZXN1bHQpXG4gICAgICAgICAgICA/IHJlc3VsdC50aGVuKChkYXRhKSA9PiBmcmVlemUoZGF0YSkpXG4gICAgICAgICAgICA6IGZyZWV6ZShyZXN1bHQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZFJlYWRvbmx5LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlYWRvbmx5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3VzdG9tKGNoZWNrLCBwYXJhbXMgPSB7fSwgXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogUGFzcyBgZmF0YWxgIGludG8gdGhlIHBhcmFtcyBvYmplY3QgaW5zdGVhZDpcbiAqXG4gKiBgYGB0c1xuICogei5zdHJpbmcoKS5jdXN0b20oKHZhbCkgPT4gdmFsLmxlbmd0aCA+IDUsIHsgZmF0YWw6IGZhbHNlIH0pXG4gKiBgYGBcbiAqXG4gKi9cbmZhdGFsKSB7XG4gICAgaWYgKGNoZWNrKVxuICAgICAgICByZXR1cm4gWm9kQW55LmNyZWF0ZSgpLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpZiAoIWNoZWNrKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHBhcmFtcyhkYXRhKVxuICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBtZXNzYWdlOiBwYXJhbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJhbXM7XG4gICAgICAgICAgICAgICAgY29uc3QgX2ZhdGFsID0gKF9iID0gKF9hID0gcC5mYXRhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmF0YWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcDIgPSB0eXBlb2YgcCA9PT0gXCJzdHJpbmdcIiA/IHsgbWVzc2FnZTogcCB9IDogcDtcbiAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wMiwgZmF0YWw6IF9mYXRhbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKTtcbn1cbmNvbnN0IGxhdGUgPSB7XG4gICAgb2JqZWN0OiBab2RPYmplY3QubGF6eWNyZWF0ZSxcbn07XG52YXIgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kO1xuKGZ1bmN0aW9uIChab2RGaXJzdFBhcnR5VHlwZUtpbmQpIHtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTdHJpbmdcIl0gPSBcIlpvZFN0cmluZ1wiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bWJlclwiXSA9IFwiWm9kTnVtYmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmFOXCJdID0gXCJab2ROYU5cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCaWdJbnRcIl0gPSBcIlpvZEJpZ0ludFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJvb2xlYW5cIl0gPSBcIlpvZEJvb2xlYW5cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REYXRlXCJdID0gXCJab2REYXRlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3ltYm9sXCJdID0gXCJab2RTeW1ib2xcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmRlZmluZWRcIl0gPSBcIlpvZFVuZGVmaW5lZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bGxcIl0gPSBcIlpvZE51bGxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RBbnlcIl0gPSBcIlpvZEFueVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVua25vd25cIl0gPSBcIlpvZFVua25vd25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROZXZlclwiXSA9IFwiWm9kTmV2ZXJcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RWb2lkXCJdID0gXCJab2RWb2lkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQXJyYXlcIl0gPSBcIlpvZEFycmF5XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT2JqZWN0XCJdID0gXCJab2RPYmplY3RcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmlvblwiXSA9IFwiWm9kVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REaXNjcmltaW5hdGVkVW5pb25cIl0gPSBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEludGVyc2VjdGlvblwiXSA9IFwiWm9kSW50ZXJzZWN0aW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVHVwbGVcIl0gPSBcIlpvZFR1cGxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVjb3JkXCJdID0gXCJab2RSZWNvcmRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RNYXBcIl0gPSBcIlpvZE1hcFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFNldFwiXSA9IFwiWm9kU2V0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRnVuY3Rpb25cIl0gPSBcIlpvZEZ1bmN0aW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTGF6eVwiXSA9IFwiWm9kTGF6eVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExpdGVyYWxcIl0gPSBcIlpvZExpdGVyYWxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RFbnVtXCJdID0gXCJab2RFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRWZmZWN0c1wiXSA9IFwiWm9kRWZmZWN0c1wiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hdGl2ZUVudW1cIl0gPSBcIlpvZE5hdGl2ZUVudW1cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RPcHRpb25hbFwiXSA9IFwiWm9kT3B0aW9uYWxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsYWJsZVwiXSA9IFwiWm9kTnVsbGFibGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REZWZhdWx0XCJdID0gXCJab2REZWZhdWx0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQ2F0Y2hcIl0gPSBcIlpvZENhdGNoXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUHJvbWlzZVwiXSA9IFwiWm9kUHJvbWlzZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJyYW5kZWRcIl0gPSBcIlpvZEJyYW5kZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RQaXBlbGluZVwiXSA9IFwiWm9kUGlwZWxpbmVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RSZWFkb25seVwiXSA9IFwiWm9kUmVhZG9ubHlcIjtcbn0pKFpvZEZpcnN0UGFydHlUeXBlS2luZCB8fCAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kID0ge30pKTtcbmNvbnN0IGluc3RhbmNlT2ZUeXBlID0gKFxuLy8gY29uc3QgaW5zdGFuY2VPZlR5cGUgPSA8VCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueT4oXG5jbHMsIHBhcmFtcyA9IHtcbiAgICBtZXNzYWdlOiBgSW5wdXQgbm90IGluc3RhbmNlIG9mICR7Y2xzLm5hbWV9YCxcbn0pID0+IGN1c3RvbSgoZGF0YSkgPT4gZGF0YSBpbnN0YW5jZW9mIGNscywgcGFyYW1zKTtcbmNvbnN0IHN0cmluZ1R5cGUgPSBab2RTdHJpbmcuY3JlYXRlO1xuY29uc3QgbnVtYmVyVHlwZSA9IFpvZE51bWJlci5jcmVhdGU7XG5jb25zdCBuYW5UeXBlID0gWm9kTmFOLmNyZWF0ZTtcbmNvbnN0IGJpZ0ludFR5cGUgPSBab2RCaWdJbnQuY3JlYXRlO1xuY29uc3QgYm9vbGVhblR5cGUgPSBab2RCb29sZWFuLmNyZWF0ZTtcbmNvbnN0IGRhdGVUeXBlID0gWm9kRGF0ZS5jcmVhdGU7XG5jb25zdCBzeW1ib2xUeXBlID0gWm9kU3ltYm9sLmNyZWF0ZTtcbmNvbnN0IHVuZGVmaW5lZFR5cGUgPSBab2RVbmRlZmluZWQuY3JlYXRlO1xuY29uc3QgbnVsbFR5cGUgPSBab2ROdWxsLmNyZWF0ZTtcbmNvbnN0IGFueVR5cGUgPSBab2RBbnkuY3JlYXRlO1xuY29uc3QgdW5rbm93blR5cGUgPSBab2RVbmtub3duLmNyZWF0ZTtcbmNvbnN0IG5ldmVyVHlwZSA9IFpvZE5ldmVyLmNyZWF0ZTtcbmNvbnN0IHZvaWRUeXBlID0gWm9kVm9pZC5jcmVhdGU7XG5jb25zdCBhcnJheVR5cGUgPSBab2RBcnJheS5jcmVhdGU7XG5jb25zdCBvYmplY3RUeXBlID0gWm9kT2JqZWN0LmNyZWF0ZTtcbmNvbnN0IHN0cmljdE9iamVjdFR5cGUgPSBab2RPYmplY3Quc3RyaWN0Q3JlYXRlO1xuY29uc3QgdW5pb25UeXBlID0gWm9kVW5pb24uY3JlYXRlO1xuY29uc3QgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSA9IFpvZERpc2NyaW1pbmF0ZWRVbmlvbi5jcmVhdGU7XG5jb25zdCBpbnRlcnNlY3Rpb25UeXBlID0gWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZTtcbmNvbnN0IHR1cGxlVHlwZSA9IFpvZFR1cGxlLmNyZWF0ZTtcbmNvbnN0IHJlY29yZFR5cGUgPSBab2RSZWNvcmQuY3JlYXRlO1xuY29uc3QgbWFwVHlwZSA9IFpvZE1hcC5jcmVhdGU7XG5jb25zdCBzZXRUeXBlID0gWm9kU2V0LmNyZWF0ZTtcbmNvbnN0IGZ1bmN0aW9uVHlwZSA9IFpvZEZ1bmN0aW9uLmNyZWF0ZTtcbmNvbnN0IGxhenlUeXBlID0gWm9kTGF6eS5jcmVhdGU7XG5jb25zdCBsaXRlcmFsVHlwZSA9IFpvZExpdGVyYWwuY3JlYXRlO1xuY29uc3QgZW51bVR5cGUgPSBab2RFbnVtLmNyZWF0ZTtcbmNvbnN0IG5hdGl2ZUVudW1UeXBlID0gWm9kTmF0aXZlRW51bS5jcmVhdGU7XG5jb25zdCBwcm9taXNlVHlwZSA9IFpvZFByb21pc2UuY3JlYXRlO1xuY29uc3QgZWZmZWN0c1R5cGUgPSBab2RFZmZlY3RzLmNyZWF0ZTtcbmNvbnN0IG9wdGlvbmFsVHlwZSA9IFpvZE9wdGlvbmFsLmNyZWF0ZTtcbmNvbnN0IG51bGxhYmxlVHlwZSA9IFpvZE51bGxhYmxlLmNyZWF0ZTtcbmNvbnN0IHByZXByb2Nlc3NUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGVXaXRoUHJlcHJvY2VzcztcbmNvbnN0IHBpcGVsaW5lVHlwZSA9IFpvZFBpcGVsaW5lLmNyZWF0ZTtcbmNvbnN0IG9zdHJpbmcgPSAoKSA9PiBzdHJpbmdUeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IG9udW1iZXIgPSAoKSA9PiBudW1iZXJUeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IG9ib29sZWFuID0gKCkgPT4gYm9vbGVhblR5cGUoKS5vcHRpb25hbCgpO1xuY29uc3QgY29lcmNlID0ge1xuICAgIHN0cmluZzogKChhcmcpID0+IFpvZFN0cmluZy5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgbnVtYmVyOiAoKGFyZykgPT4gWm9kTnVtYmVyLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBib29sZWFuOiAoKGFyZykgPT4gWm9kQm9vbGVhbi5jcmVhdGUoe1xuICAgICAgICAuLi5hcmcsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICB9KSksXG4gICAgYmlnaW50OiAoKGFyZykgPT4gWm9kQmlnSW50LmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBkYXRlOiAoKGFyZykgPT4gWm9kRGF0ZS5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG59O1xuY29uc3QgTkVWRVIgPSBJTlZBTElEO1xuXG52YXIgeiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZGVmYXVsdEVycm9yTWFwOiBlcnJvck1hcCxcbiAgICBzZXRFcnJvck1hcDogc2V0RXJyb3JNYXAsXG4gICAgZ2V0RXJyb3JNYXA6IGdldEVycm9yTWFwLFxuICAgIG1ha2VJc3N1ZTogbWFrZUlzc3VlLFxuICAgIEVNUFRZX1BBVEg6IEVNUFRZX1BBVEgsXG4gICAgYWRkSXNzdWVUb0NvbnRleHQ6IGFkZElzc3VlVG9Db250ZXh0LFxuICAgIFBhcnNlU3RhdHVzOiBQYXJzZVN0YXR1cyxcbiAgICBJTlZBTElEOiBJTlZBTElELFxuICAgIERJUlRZOiBESVJUWSxcbiAgICBPSzogT0ssXG4gICAgaXNBYm9ydGVkOiBpc0Fib3J0ZWQsXG4gICAgaXNEaXJ0eTogaXNEaXJ0eSxcbiAgICBpc1ZhbGlkOiBpc1ZhbGlkLFxuICAgIGlzQXN5bmM6IGlzQXN5bmMsXG4gICAgZ2V0IHV0aWwgKCkgeyByZXR1cm4gdXRpbDsgfSxcbiAgICBnZXQgb2JqZWN0VXRpbCAoKSB7IHJldHVybiBvYmplY3RVdGlsOyB9LFxuICAgIFpvZFBhcnNlZFR5cGU6IFpvZFBhcnNlZFR5cGUsXG4gICAgZ2V0UGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZSxcbiAgICBab2RUeXBlOiBab2RUeXBlLFxuICAgIGRhdGV0aW1lUmVnZXg6IGRhdGV0aW1lUmVnZXgsXG4gICAgWm9kU3RyaW5nOiBab2RTdHJpbmcsXG4gICAgWm9kTnVtYmVyOiBab2ROdW1iZXIsXG4gICAgWm9kQmlnSW50OiBab2RCaWdJbnQsXG4gICAgWm9kQm9vbGVhbjogWm9kQm9vbGVhbixcbiAgICBab2REYXRlOiBab2REYXRlLFxuICAgIFpvZFN5bWJvbDogWm9kU3ltYm9sLFxuICAgIFpvZFVuZGVmaW5lZDogWm9kVW5kZWZpbmVkLFxuICAgIFpvZE51bGw6IFpvZE51bGwsXG4gICAgWm9kQW55OiBab2RBbnksXG4gICAgWm9kVW5rbm93bjogWm9kVW5rbm93bixcbiAgICBab2ROZXZlcjogWm9kTmV2ZXIsXG4gICAgWm9kVm9pZDogWm9kVm9pZCxcbiAgICBab2RBcnJheTogWm9kQXJyYXksXG4gICAgWm9kT2JqZWN0OiBab2RPYmplY3QsXG4gICAgWm9kVW5pb246IFpvZFVuaW9uLFxuICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbjogWm9kRGlzY3JpbWluYXRlZFVuaW9uLFxuICAgIFpvZEludGVyc2VjdGlvbjogWm9kSW50ZXJzZWN0aW9uLFxuICAgIFpvZFR1cGxlOiBab2RUdXBsZSxcbiAgICBab2RSZWNvcmQ6IFpvZFJlY29yZCxcbiAgICBab2RNYXA6IFpvZE1hcCxcbiAgICBab2RTZXQ6IFpvZFNldCxcbiAgICBab2RGdW5jdGlvbjogWm9kRnVuY3Rpb24sXG4gICAgWm9kTGF6eTogWm9kTGF6eSxcbiAgICBab2RMaXRlcmFsOiBab2RMaXRlcmFsLFxuICAgIFpvZEVudW06IFpvZEVudW0sXG4gICAgWm9kTmF0aXZlRW51bTogWm9kTmF0aXZlRW51bSxcbiAgICBab2RQcm9taXNlOiBab2RQcm9taXNlLFxuICAgIFpvZEVmZmVjdHM6IFpvZEVmZmVjdHMsXG4gICAgWm9kVHJhbnNmb3JtZXI6IFpvZEVmZmVjdHMsXG4gICAgWm9kT3B0aW9uYWw6IFpvZE9wdGlvbmFsLFxuICAgIFpvZE51bGxhYmxlOiBab2ROdWxsYWJsZSxcbiAgICBab2REZWZhdWx0OiBab2REZWZhdWx0LFxuICAgIFpvZENhdGNoOiBab2RDYXRjaCxcbiAgICBab2ROYU46IFpvZE5hTixcbiAgICBCUkFORDogQlJBTkQsXG4gICAgWm9kQnJhbmRlZDogWm9kQnJhbmRlZCxcbiAgICBab2RQaXBlbGluZTogWm9kUGlwZWxpbmUsXG4gICAgWm9kUmVhZG9ubHk6IFpvZFJlYWRvbmx5LFxuICAgIGN1c3RvbTogY3VzdG9tLFxuICAgIFNjaGVtYTogWm9kVHlwZSxcbiAgICBab2RTY2hlbWE6IFpvZFR5cGUsXG4gICAgbGF0ZTogbGF0ZSxcbiAgICBnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kICgpIHsgcmV0dXJuIFpvZEZpcnN0UGFydHlUeXBlS2luZDsgfSxcbiAgICBjb2VyY2U6IGNvZXJjZSxcbiAgICBhbnk6IGFueVR5cGUsXG4gICAgYXJyYXk6IGFycmF5VHlwZSxcbiAgICBiaWdpbnQ6IGJpZ0ludFR5cGUsXG4gICAgYm9vbGVhbjogYm9vbGVhblR5cGUsXG4gICAgZGF0ZTogZGF0ZVR5cGUsXG4gICAgZGlzY3JpbWluYXRlZFVuaW9uOiBkaXNjcmltaW5hdGVkVW5pb25UeXBlLFxuICAgIGVmZmVjdDogZWZmZWN0c1R5cGUsXG4gICAgJ2VudW0nOiBlbnVtVHlwZSxcbiAgICAnZnVuY3Rpb24nOiBmdW5jdGlvblR5cGUsXG4gICAgJ2luc3RhbmNlb2YnOiBpbnN0YW5jZU9mVHlwZSxcbiAgICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblR5cGUsXG4gICAgbGF6eTogbGF6eVR5cGUsXG4gICAgbGl0ZXJhbDogbGl0ZXJhbFR5cGUsXG4gICAgbWFwOiBtYXBUeXBlLFxuICAgIG5hbjogbmFuVHlwZSxcbiAgICBuYXRpdmVFbnVtOiBuYXRpdmVFbnVtVHlwZSxcbiAgICBuZXZlcjogbmV2ZXJUeXBlLFxuICAgICdudWxsJzogbnVsbFR5cGUsXG4gICAgbnVsbGFibGU6IG51bGxhYmxlVHlwZSxcbiAgICBudW1iZXI6IG51bWJlclR5cGUsXG4gICAgb2JqZWN0OiBvYmplY3RUeXBlLFxuICAgIG9ib29sZWFuOiBvYm9vbGVhbixcbiAgICBvbnVtYmVyOiBvbnVtYmVyLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbFR5cGUsXG4gICAgb3N0cmluZzogb3N0cmluZyxcbiAgICBwaXBlbGluZTogcGlwZWxpbmVUeXBlLFxuICAgIHByZXByb2Nlc3M6IHByZXByb2Nlc3NUeXBlLFxuICAgIHByb21pc2U6IHByb21pc2VUeXBlLFxuICAgIHJlY29yZDogcmVjb3JkVHlwZSxcbiAgICBzZXQ6IHNldFR5cGUsXG4gICAgc3RyaWN0T2JqZWN0OiBzdHJpY3RPYmplY3RUeXBlLFxuICAgIHN0cmluZzogc3RyaW5nVHlwZSxcbiAgICBzeW1ib2w6IHN5bWJvbFR5cGUsXG4gICAgdHJhbnNmb3JtZXI6IGVmZmVjdHNUeXBlLFxuICAgIHR1cGxlOiB0dXBsZVR5cGUsXG4gICAgJ3VuZGVmaW5lZCc6IHVuZGVmaW5lZFR5cGUsXG4gICAgdW5pb246IHVuaW9uVHlwZSxcbiAgICB1bmtub3duOiB1bmtub3duVHlwZSxcbiAgICAndm9pZCc6IHZvaWRUeXBlLFxuICAgIE5FVkVSOiBORVZFUixcbiAgICBab2RJc3N1ZUNvZGU6IFpvZElzc3VlQ29kZSxcbiAgICBxdW90ZWxlc3NKc29uOiBxdW90ZWxlc3NKc29uLFxuICAgIFpvZEVycm9yOiBab2RFcnJvclxufSk7XG5cbmV4cG9ydCB7IEJSQU5ELCBESVJUWSwgRU1QVFlfUEFUSCwgSU5WQUxJRCwgTkVWRVIsIE9LLCBQYXJzZVN0YXR1cywgWm9kVHlwZSBhcyBTY2hlbWEsIFpvZEFueSwgWm9kQXJyYXksIFpvZEJpZ0ludCwgWm9kQm9vbGVhbiwgWm9kQnJhbmRlZCwgWm9kQ2F0Y2gsIFpvZERhdGUsIFpvZERlZmF1bHQsIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiwgWm9kRWZmZWN0cywgWm9kRW51bSwgWm9kRXJyb3IsIFpvZEZpcnN0UGFydHlUeXBlS2luZCwgWm9kRnVuY3Rpb24sIFpvZEludGVyc2VjdGlvbiwgWm9kSXNzdWVDb2RlLCBab2RMYXp5LCBab2RMaXRlcmFsLCBab2RNYXAsIFpvZE5hTiwgWm9kTmF0aXZlRW51bSwgWm9kTmV2ZXIsIFpvZE51bGwsIFpvZE51bGxhYmxlLCBab2ROdW1iZXIsIFpvZE9iamVjdCwgWm9kT3B0aW9uYWwsIFpvZFBhcnNlZFR5cGUsIFpvZFBpcGVsaW5lLCBab2RQcm9taXNlLCBab2RSZWFkb25seSwgWm9kUmVjb3JkLCBab2RUeXBlIGFzIFpvZFNjaGVtYSwgWm9kU2V0LCBab2RTdHJpbmcsIFpvZFN5bWJvbCwgWm9kRWZmZWN0cyBhcyBab2RUcmFuc2Zvcm1lciwgWm9kVHVwbGUsIFpvZFR5cGUsIFpvZFVuZGVmaW5lZCwgWm9kVW5pb24sIFpvZFVua25vd24sIFpvZFZvaWQsIGFkZElzc3VlVG9Db250ZXh0LCBhbnlUeXBlIGFzIGFueSwgYXJyYXlUeXBlIGFzIGFycmF5LCBiaWdJbnRUeXBlIGFzIGJpZ2ludCwgYm9vbGVhblR5cGUgYXMgYm9vbGVhbiwgY29lcmNlLCBjdXN0b20sIGRhdGVUeXBlIGFzIGRhdGUsIGRhdGV0aW1lUmVnZXgsIHogYXMgZGVmYXVsdCwgZXJyb3JNYXAgYXMgZGVmYXVsdEVycm9yTWFwLCBkaXNjcmltaW5hdGVkVW5pb25UeXBlIGFzIGRpc2NyaW1pbmF0ZWRVbmlvbiwgZWZmZWN0c1R5cGUgYXMgZWZmZWN0LCBlbnVtVHlwZSBhcyBlbnVtLCBmdW5jdGlvblR5cGUgYXMgZnVuY3Rpb24sIGdldEVycm9yTWFwLCBnZXRQYXJzZWRUeXBlLCBpbnN0YW5jZU9mVHlwZSBhcyBpbnN0YW5jZW9mLCBpbnRlcnNlY3Rpb25UeXBlIGFzIGludGVyc2VjdGlvbiwgaXNBYm9ydGVkLCBpc0FzeW5jLCBpc0RpcnR5LCBpc1ZhbGlkLCBsYXRlLCBsYXp5VHlwZSBhcyBsYXp5LCBsaXRlcmFsVHlwZSBhcyBsaXRlcmFsLCBtYWtlSXNzdWUsIG1hcFR5cGUgYXMgbWFwLCBuYW5UeXBlIGFzIG5hbiwgbmF0aXZlRW51bVR5cGUgYXMgbmF0aXZlRW51bSwgbmV2ZXJUeXBlIGFzIG5ldmVyLCBudWxsVHlwZSBhcyBudWxsLCBudWxsYWJsZVR5cGUgYXMgbnVsbGFibGUsIG51bWJlclR5cGUgYXMgbnVtYmVyLCBvYmplY3RUeXBlIGFzIG9iamVjdCwgb2JqZWN0VXRpbCwgb2Jvb2xlYW4sIG9udW1iZXIsIG9wdGlvbmFsVHlwZSBhcyBvcHRpb25hbCwgb3N0cmluZywgcGlwZWxpbmVUeXBlIGFzIHBpcGVsaW5lLCBwcmVwcm9jZXNzVHlwZSBhcyBwcmVwcm9jZXNzLCBwcm9taXNlVHlwZSBhcyBwcm9taXNlLCBxdW90ZWxlc3NKc29uLCByZWNvcmRUeXBlIGFzIHJlY29yZCwgc2V0VHlwZSBhcyBzZXQsIHNldEVycm9yTWFwLCBzdHJpY3RPYmplY3RUeXBlIGFzIHN0cmljdE9iamVjdCwgc3RyaW5nVHlwZSBhcyBzdHJpbmcsIHN5bWJvbFR5cGUgYXMgc3ltYm9sLCBlZmZlY3RzVHlwZSBhcyB0cmFuc2Zvcm1lciwgdHVwbGVUeXBlIGFzIHR1cGxlLCB1bmRlZmluZWRUeXBlIGFzIHVuZGVmaW5lZCwgdW5pb25UeXBlIGFzIHVuaW9uLCB1bmtub3duVHlwZSBhcyB1bmtub3duLCB1dGlsLCB2b2lkVHlwZSBhcyB2b2lkLCB6IH07XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJzZUFueURlZigpIHtcbiAgICByZXR1cm4ge307XG59XG4iLAogICAgImltcG9ydCB7IFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMgfSBmcm9tIFwiLi4vZXJyb3JNZXNzYWdlcy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VEZWYgfSBmcm9tIFwiLi4vcGFyc2VEZWYuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5RGVmKGRlZiwgcmVmcykge1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgIH07XG4gICAgaWYgKGRlZi50eXBlPy5fZGVmICYmXG4gICAgICAgIGRlZi50eXBlPy5fZGVmPy50eXBlTmFtZSAhPT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFueSkge1xuICAgICAgICByZXMuaXRlbXMgPSBwYXJzZURlZihkZWYudHlwZS5fZGVmLCB7XG4gICAgICAgICAgICAuLi5yZWZzLFxuICAgICAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcIml0ZW1zXCJdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRlZi5taW5MZW5ndGgpIHtcbiAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibWluSXRlbXNcIiwgZGVmLm1pbkxlbmd0aC52YWx1ZSwgZGVmLm1pbkxlbmd0aC5tZXNzYWdlLCByZWZzKTtcbiAgICB9XG4gICAgaWYgKGRlZi5tYXhMZW5ndGgpIHtcbiAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibWF4SXRlbXNcIiwgZGVmLm1heExlbmd0aC52YWx1ZSwgZGVmLm1heExlbmd0aC5tZXNzYWdlLCByZWZzKTtcbiAgICB9XG4gICAgaWYgKGRlZi5leGFjdExlbmd0aCkge1xuICAgICAgICBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzKHJlcywgXCJtaW5JdGVtc1wiLCBkZWYuZXhhY3RMZW5ndGgudmFsdWUsIGRlZi5leGFjdExlbmd0aC5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibWF4SXRlbXNcIiwgZGVmLmV4YWN0TGVuZ3RoLnZhbHVlLCBkZWYuZXhhY3RMZW5ndGgubWVzc2FnZSwgcmVmcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4iLAogICAgImltcG9ydCB7IHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMgfSBmcm9tIFwiLi4vZXJyb3JNZXNzYWdlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmlnaW50RGVmKGRlZiwgcmVmcykge1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIGZvcm1hdDogXCJpbnQ2NFwiLFxuICAgIH07XG4gICAgaWYgKCFkZWYuY2hlY2tzKVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIGZvciAoY29uc3QgY2hlY2sgb2YgZGVmLmNoZWNrcykge1xuICAgICAgICBzd2l0Y2ggKGNoZWNrLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgICBpZiAocmVmcy50YXJnZXQgPT09IFwianNvblNjaGVtYTdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2suaW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzKHJlcywgXCJtaW5pbXVtXCIsIGNoZWNrLnZhbHVlLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcImV4Y2x1c2l2ZU1pbmltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrLmluY2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmV4Y2x1c2l2ZU1pbmltdW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcIm1pbmltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgICAgICBpZiAocmVmcy50YXJnZXQgPT09IFwianNvblNjaGVtYTdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2suaW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzKHJlcywgXCJtYXhpbXVtXCIsIGNoZWNrLnZhbHVlLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcImV4Y2x1c2l2ZU1heGltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrLmluY2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmV4Y2x1c2l2ZU1heGltdW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcIm1heGltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZU9mXCI6XG4gICAgICAgICAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibXVsdGlwbGVPZlwiLCBjaGVjay52YWx1ZSwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQm9vbGVhbkRlZigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQnJhbmRlZERlZihfZGVmLCByZWZzKSB7XG4gICAgcmV0dXJuIHBhcnNlRGVmKF9kZWYudHlwZS5fZGVmLCByZWZzKTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgcGFyc2VEZWYgfSBmcm9tIFwiLi4vcGFyc2VEZWYuanNcIjtcbmV4cG9ydCBjb25zdCBwYXJzZUNhdGNoRGVmID0gKGRlZiwgcmVmcykgPT4ge1xuICAgIHJldHVybiBwYXJzZURlZihkZWYuaW5uZXJUeXBlLl9kZWYsIHJlZnMpO1xufTtcbiIsCiAgICAiaW1wb3J0IHsgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyB9IGZyb20gXCIuLi9lcnJvck1lc3NhZ2VzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlRGVmKGRlZiwgcmVmcywgb3ZlcnJpZGVEYXRlU3RyYXRlZ3kpIHtcbiAgICBjb25zdCBzdHJhdGVneSA9IG92ZXJyaWRlRGF0ZVN0cmF0ZWd5ID8/IHJlZnMuZGF0ZVN0cmF0ZWd5O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHN0cmF0ZWd5KSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYW55T2Y6IHN0cmF0ZWd5Lm1hcCgoaXRlbSwgaSkgPT4gcGFyc2VEYXRlRGVmKGRlZiwgcmVmcywgaXRlbSkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcImZvcm1hdDpkYXRlLXRpbWVcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGF0ZS10aW1lXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiZm9ybWF0OmRhdGVcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBpbnRlZ2VyRGF0ZVBhcnNlcihkZWYsIHJlZnMpO1xuICAgIH1cbn1cbmNvbnN0IGludGVnZXJEYXRlUGFyc2VyID0gKGRlZiwgcmVmcykgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1bml4LXRpbWVcIixcbiAgICB9O1xuICAgIGlmIChyZWZzLnRhcmdldCA9PT0gXCJvcGVuQXBpM1wiKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2hlY2sgb2YgZGVmLmNoZWNrcykge1xuICAgICAgICBzd2l0Y2ggKGNoZWNrLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgICBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzKHJlcywgXCJtaW5pbXVtXCIsIGNoZWNrLnZhbHVlLCAvLyBUaGlzIGlzIGluIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgICAgIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcIm1heGltdW1cIiwgY2hlY2sudmFsdWUsIC8vIFRoaXMgaXMgaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICAgICAgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG4iLAogICAgImltcG9ydCB7IHBhcnNlRGVmIH0gZnJvbSBcIi4uL3BhcnNlRGVmLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEZWZhdWx0RGVmKF9kZWYsIHJlZnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5wYXJzZURlZihfZGVmLmlubmVyVHlwZS5fZGVmLCByZWZzKSxcbiAgICAgICAgZGVmYXVsdDogX2RlZi5kZWZhdWx0VmFsdWUoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWZmZWN0c0RlZihfZGVmLCByZWZzKSB7XG4gICAgcmV0dXJuIHJlZnMuZWZmZWN0U3RyYXRlZ3kgPT09IFwiaW5wdXRcIlxuICAgICAgICA/IHBhcnNlRGVmKF9kZWYuc2NoZW1hLl9kZWYsIHJlZnMpXG4gICAgICAgIDoge307XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJzZUVudW1EZWYoZGVmKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZW51bTogQXJyYXkuZnJvbShkZWYudmFsdWVzKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuY29uc3QgaXNKc29uU2NoZW1hN0FsbE9mVHlwZSA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKFwidHlwZVwiIGluIHR5cGUgJiYgdHlwZS50eXBlID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFwiYWxsT2ZcIiBpbiB0eXBlO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludGVyc2VjdGlvbkRlZihkZWYsIHJlZnMpIHtcbiAgICBjb25zdCBhbGxPZiA9IFtcbiAgICAgICAgcGFyc2VEZWYoZGVmLmxlZnQuX2RlZiwge1xuICAgICAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJhbGxPZlwiLCBcIjBcIl0sXG4gICAgICAgIH0pLFxuICAgICAgICBwYXJzZURlZihkZWYucmlnaHQuX2RlZiwge1xuICAgICAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJhbGxPZlwiLCBcIjFcIl0sXG4gICAgICAgIH0pLFxuICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpO1xuICAgIGxldCB1bmV2YWx1YXRlZFByb3BlcnRpZXMgPSByZWZzLnRhcmdldCA9PT0gXCJqc29uU2NoZW1hMjAxOS0wOVwiXG4gICAgICAgID8geyB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWVyZ2VkQWxsT2YgPSBbXTtcbiAgICAvLyBJZiBlaXRoZXIgb2YgdGhlIHNjaGVtYXMgaXMgYW4gYWxsT2YsIG1lcmdlIHRoZW0gaW50byBhIHNpbmdsZSBhbGxPZlxuICAgIGFsbE9mLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgICBpZiAoaXNKc29uU2NoZW1hN0FsbE9mVHlwZShzY2hlbWEpKSB7XG4gICAgICAgICAgICBtZXJnZWRBbGxPZi5wdXNoKC4uLnNjaGVtYS5hbGxPZik7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnVuZXZhbHVhdGVkUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBzY2hlbWFzIGhhcyBubyB1bmV2YWx1YXRlZFByb3BlcnRpZXMgc2V0LFxuICAgICAgICAgICAgICAgIC8vIHRoZSBtZXJnZWQgc2NoZW1hIHNob3VsZCBhbHNvIGhhdmUgbm8gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIHNldFxuICAgICAgICAgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXN0ZWRTY2hlbWEgPSBzY2hlbWE7XG4gICAgICAgICAgICBpZiAoXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiIGluIHNjaGVtYSAmJlxuICAgICAgICAgICAgICAgIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFkZGl0aW9uYWxQcm9wZXJ0aWVzLCAuLi5yZXN0IH0gPSBzY2hlbWE7XG4gICAgICAgICAgICAgICAgbmVzdGVkU2NoZW1hID0gcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFzIHNvb24gYXMgb25lIG9mIHRoZSBzY2hlbWFzIGhhcyBhZGRpdGlvbmFsUHJvcGVydGllcyBzZXQgbm90IHRvIGZhbHNlLCB3ZSBhbGxvdyB1bmV2YWx1YXRlZFByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXJnZWRBbGxPZi5wdXNoKG5lc3RlZFNjaGVtYSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWVyZ2VkQWxsT2YubGVuZ3RoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgYWxsT2Y6IG1lcmdlZEFsbE9mLFxuICAgICAgICAgICAgLi4udW5ldmFsdWF0ZWRQcm9wZXJ0aWVzLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gcGFyc2VMaXRlcmFsRGVmKGRlZiwgcmVmcykge1xuICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0eXBlb2YgZGVmLnZhbHVlO1xuICAgIGlmIChwYXJzZWRUeXBlICE9PSBcImJpZ2ludFwiICYmXG4gICAgICAgIHBhcnNlZFR5cGUgIT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgcGFyc2VkVHlwZSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgcGFyc2VkVHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogQXJyYXkuaXNBcnJheShkZWYudmFsdWUpID8gXCJhcnJheVwiIDogXCJvYmplY3RcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHJlZnMudGFyZ2V0ID09PSBcIm9wZW5BcGkzXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHBhcnNlZFR5cGUgPT09IFwiYmlnaW50XCIgPyBcImludGVnZXJcIiA6IHBhcnNlZFR5cGUsXG4gICAgICAgICAgICBlbnVtOiBbZGVmLnZhbHVlXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogcGFyc2VkVHlwZSA9PT0gXCJiaWdpbnRcIiA/IFwiaW50ZWdlclwiIDogcGFyc2VkVHlwZSxcbiAgICAgICAgY29uc3Q6IGRlZi52YWx1ZSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzIH0gZnJvbSBcIi4uL2Vycm9yTWVzc2FnZXMuanNcIjtcbmxldCBlbW9qaVJlZ2V4ID0gdW5kZWZpbmVkO1xuLyoqXG4gKiBHZW5lcmF0ZWQgZnJvbSB0aGUgcmVndWxhciBleHByZXNzaW9ucyBmb3VuZCBoZXJlIGFzIG9mIDIwMjQtMDUtMjI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vY29saW5oYWNrcy96b2QvYmxvYi9tYXN0ZXIvc3JjL3R5cGVzLnRzLlxuICpcbiAqIEV4cHJlc3Npb25zIHdpdGggL2kgZmxhZyBoYXZlIGJlZW4gY2hhbmdlZCBhY2NvcmRpbmdseS5cbiAqL1xuZXhwb3J0IGNvbnN0IHpvZFBhdHRlcm5zID0ge1xuICAgIC8qKlxuICAgICAqIGBjYCB3YXMgY2hhbmdlZCB0byBgW2NDXWAgdG8gcmVwbGljYXRlIC9pIGZsYWdcbiAgICAgKi9cbiAgICBjdWlkOiAvXltjQ11bXlxccy1dezgsfSQvLFxuICAgIGN1aWQyOiAvXlswLTlhLXpdKyQvLFxuICAgIHVsaWQ6IC9eWzAtOUEtSEpLTU5QLVRWLVpdezI2fSQvLFxuICAgIC8qKlxuICAgICAqIGBhLXpgIHdhcyBhZGRlZCB0byByZXBsaWNhdGUgL2kgZmxhZ1xuICAgICAqL1xuICAgIGVtYWlsOiAvXig/IVxcLikoPyEuKlxcLlxcLikoW2EtekEtWjAtOV8nK1xcLVxcLl0qKVthLXpBLVowLTlfKy1dQChbYS16QS1aMC05XVthLXpBLVowLTlcXC1dKlxcLikrW2EtekEtWl17Mix9JC8sXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0ZWQgYSB2YWxpZCBVbmljb2RlIFJlZ0V4cFxuICAgICAqXG4gICAgICogTGF6aWx5IGluc3RhbnRpYXRlIHNpbmNlIHRoaXMgdHlwZSBvZiByZWdleCBpc24ndCBzdXBwb3J0ZWRcbiAgICAgKiBpbiBhbGwgZW52cyAoZS5nLiBSZWFjdCBOYXRpdmUpLlxuICAgICAqXG4gICAgICogU2VlOlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2xpbmhhY2tzL3pvZC9pc3N1ZXMvMjQzM1xuICAgICAqIEZpeCBpbiBab2Q6XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2NvbGluaGFja3Mvem9kL2NvbW1pdC85MzQwZmQ1MWU0ODU3NmE3NWFkYzkxOWJmZjY1ZGJjNGE1ZDRjOTliXG4gICAgICovXG4gICAgZW1vamk6ICgpID0+IHtcbiAgICAgICAgaWYgKGVtb2ppUmVnZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW1vamlSZWdleCA9IFJlZ0V4cChcIl4oXFxcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfXxcXFxccHtFbW9qaV9Db21wb25lbnR9KSskXCIsIFwidVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1vamlSZWdleDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVudXNlZFxuICAgICAqL1xuICAgIHV1aWQ6IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC8sXG4gICAgLyoqXG4gICAgICogVW51c2VkXG4gICAgICovXG4gICAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxcbiAgICBpcHY0Q2lkcjogL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oM1swLTJdfFsxMl0/WzAtOV0pJC8sXG4gICAgLyoqXG4gICAgICogVW51c2VkXG4gICAgICovXG4gICAgaXB2NjogL14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC8sXG4gICAgaXB2NkNpZHI6IC9eKChbMC05YS1mQS1GXXsxLDR9Oil7Nyw3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl17MCw0fSl7MCw0fSVbMC05YS16QS1aXXsxLH18OjooZmZmZig6MHsxLDR9KXswLDF9Oil7MCwxfSgoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pKVxcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sXG4gICAgYmFzZTY0OiAvXihbMC05YS16QS1aKy9dezR9KSooKFswLTlhLXpBLVorL117Mn09PSl8KFswLTlhLXpBLVorL117M309KSk/JC8sXG4gICAgYmFzZTY0dXJsOiAvXihbMC05YS16QS1aLV9dezR9KSooKFswLTlhLXpBLVotX117Mn0oPT0pPyl8KFswLTlhLXpBLVotX117M30oPSk/KSk/JC8sXG4gICAgbmFub2lkOiAvXlthLXpBLVowLTlfLV17MjF9JC8sXG4gICAgand0OiAvXltBLVphLXowLTktX10rXFwuW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dKiQvLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZ0RlZihkZWYsIHJlZnMpIHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfTtcbiAgICBpZiAoZGVmLmNoZWNrcykge1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGRlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hlY2sua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibWluTGVuZ3RoXCIsIHR5cGVvZiByZXMubWluTGVuZ3RoID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IE1hdGgubWF4KHJlcy5taW5MZW5ndGgsIGNoZWNrLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGVjay52YWx1ZSwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibWF4TGVuZ3RoXCIsIHR5cGVvZiByZXMubWF4TGVuZ3RoID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IE1hdGgubWluKHJlcy5tYXhMZW5ndGgsIGNoZWNrLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGVjay52YWx1ZSwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbWFpbFwiOlxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZnMuZW1haWxTdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZvcm1hdDplbWFpbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwiZW1haWxcIiwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZm9ybWF0Omlkbi1lbWFpbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwiaWRuLWVtYWlsXCIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBhdHRlcm46em9kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGF0dGVybihyZXMsIHpvZFBhdHRlcm5zLmVtYWlsLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwidXJpXCIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRGb3JtYXQocmVzLCBcInV1aWRcIiwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyZWdleFwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgY2hlY2sucmVnZXgsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3VpZFwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMuY3VpZCwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjdWlkMlwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMuY3VpZDIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRzV2l0aFwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgUmVnRXhwKGBeJHtlc2NhcGVMaXRlcmFsQ2hlY2tWYWx1ZShjaGVjay52YWx1ZSwgcmVmcyl9YCksIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgICAgICAgICAgICAgYWRkUGF0dGVybihyZXMsIFJlZ0V4cChgJHtlc2NhcGVMaXRlcmFsQ2hlY2tWYWx1ZShjaGVjay52YWx1ZSwgcmVmcyl9JGApLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwiZGF0ZS10aW1lXCIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRGb3JtYXQocmVzLCBcImRhdGVcIiwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwidGltZVwiLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImR1cmF0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwiZHVyYXRpb25cIiwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsZW5ndGhcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibWluTGVuZ3RoXCIsIHR5cGVvZiByZXMubWluTGVuZ3RoID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IE1hdGgubWF4KHJlcy5taW5MZW5ndGgsIGNoZWNrLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGVjay52YWx1ZSwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcIm1heExlbmd0aFwiLCB0eXBlb2YgcmVzLm1heExlbmd0aCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBNYXRoLm1pbihyZXMubWF4TGVuZ3RoLCBjaGVjay52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5jbHVkZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgUmVnRXhwKGVzY2FwZUxpdGVyYWxDaGVja1ZhbHVlKGNoZWNrLnZhbHVlLCByZWZzKSksIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcImlwXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrLnZlcnNpb24gIT09IFwidjZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRm9ybWF0KHJlcywgXCJpcHY0XCIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVjay52ZXJzaW9uICE9PSBcInY0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwiaXB2NlwiLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMuYmFzZTY0dXJsLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImp3dFwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMuand0LCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNpZHJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sudmVyc2lvbiAhPT0gXCJ2NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMuaXB2NENpZHIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVjay52ZXJzaW9uICE9PSBcInY0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFBhdHRlcm4ocmVzLCB6b2RQYXR0ZXJucy5pcHY2Q2lkciwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbW9qaVwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMuZW1vamkoKSwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ1bGlkXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGF0dGVybihyZXMsIHpvZFBhdHRlcm5zLnVsaWQsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVmcy5iYXNlNjRTdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZvcm1hdDpiaW5hcnlcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZvcm1hdChyZXMsIFwiYmluYXJ5XCIsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvbnRlbnRFbmNvZGluZzpiYXNlNjRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcImNvbnRlbnRFbmNvZGluZ1wiLCBcImJhc2U2NFwiLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJwYXR0ZXJuOnpvZFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGF0dGVybihyZXMsIHpvZFBhdHRlcm5zLmJhc2U2NCwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgXCJuYW5vaWRcIjoge1xuICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuKHJlcywgem9kUGF0dGVybnMubmFub2lkLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcInRvTG93ZXJDYXNlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInRvVXBwZXJDYXNlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInRyaW1cIjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICAgICAgKChfKSA9PiB7IH0pKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gZXNjYXBlTGl0ZXJhbENoZWNrVmFsdWUobGl0ZXJhbCwgcmVmcykge1xuICAgIHJldHVybiByZWZzLnBhdHRlcm5TdHJhdGVneSA9PT0gXCJlc2NhcGVcIlxuICAgICAgICA/IGVzY2FwZU5vbkFscGhhTnVtZXJpYyhsaXRlcmFsKVxuICAgICAgICA6IGxpdGVyYWw7XG59XG5jb25zdCBBTFBIQV9OVU1FUklDID0gbmV3IFNldChcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OVwiKTtcbmZ1bmN0aW9uIGVzY2FwZU5vbkFscGhhTnVtZXJpYyhzb3VyY2UpIHtcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUFMUEhBX05VTUVSSUMuaGFzKHNvdXJjZVtpXSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIlxcXFxcIjtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gc291cmNlW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLy8gQWRkcyBhIFwiZm9ybWF0XCIga2V5d29yZCB0byB0aGUgc2NoZW1hLiBJZiBhIGZvcm1hdCBleGlzdHMsIGJvdGggZm9ybWF0cyB3aWxsIGJlIGpvaW5lZCBpbiBhbiBhbGxPZi1ub2RlLCBhbG9uZyB3aXRoIHN1YnNlcXVlbnQgb25lcy5cbmZ1bmN0aW9uIGFkZEZvcm1hdChzY2hlbWEsIHZhbHVlLCBtZXNzYWdlLCByZWZzKSB7XG4gICAgaWYgKHNjaGVtYS5mb3JtYXQgfHwgc2NoZW1hLmFueU9mPy5zb21lKCh4KSA9PiB4LmZvcm1hdCkpIHtcbiAgICAgICAgaWYgKCFzY2hlbWEuYW55T2YpIHtcbiAgICAgICAgICAgIHNjaGVtYS5hbnlPZiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuZm9ybWF0KSB7XG4gICAgICAgICAgICBzY2hlbWEuYW55T2YucHVzaCh7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBzY2hlbWEuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC4uLihzY2hlbWEuZXJyb3JNZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZnMuZXJyb3JNZXNzYWdlcyAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogeyBmb3JtYXQ6IHNjaGVtYS5lcnJvck1lc3NhZ2UuZm9ybWF0IH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWEuZm9ybWF0O1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hLmVycm9yTWVzc2FnZS5mb3JtYXQ7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYS5lcnJvck1lc3NhZ2UpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hLmFueU9mLnB1c2goe1xuICAgICAgICAgICAgZm9ybWF0OiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLihtZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgcmVmcy5lcnJvck1lc3NhZ2VzICYmIHsgZXJyb3JNZXNzYWdlOiB7IGZvcm1hdDogbWVzc2FnZSB9IH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMoc2NoZW1hLCBcImZvcm1hdFwiLCB2YWx1ZSwgbWVzc2FnZSwgcmVmcyk7XG4gICAgfVxufVxuLy8gQWRkcyBhIFwicGF0dGVyblwiIGtleXdvcmQgdG8gdGhlIHNjaGVtYS4gSWYgYSBwYXR0ZXJuIGV4aXN0cywgYm90aCBwYXR0ZXJucyB3aWxsIGJlIGpvaW5lZCBpbiBhbiBhbGxPZi1ub2RlLCBhbG9uZyB3aXRoIHN1YnNlcXVlbnQgb25lcy5cbmZ1bmN0aW9uIGFkZFBhdHRlcm4oc2NoZW1hLCByZWdleCwgbWVzc2FnZSwgcmVmcykge1xuICAgIGlmIChzY2hlbWEucGF0dGVybiB8fCBzY2hlbWEuYWxsT2Y/LnNvbWUoKHgpID0+IHgucGF0dGVybikpIHtcbiAgICAgICAgaWYgKCFzY2hlbWEuYWxsT2YpIHtcbiAgICAgICAgICAgIHNjaGVtYS5hbGxPZiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuICAgICAgICAgICAgc2NoZW1hLmFsbE9mLnB1c2goe1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IHNjaGVtYS5wYXR0ZXJuLFxuICAgICAgICAgICAgICAgIC4uLihzY2hlbWEuZXJyb3JNZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZnMuZXJyb3JNZXNzYWdlcyAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogeyBwYXR0ZXJuOiBzY2hlbWEuZXJyb3JNZXNzYWdlLnBhdHRlcm4gfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVsZXRlIHNjaGVtYS5wYXR0ZXJuO1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hLmVycm9yTWVzc2FnZS5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEuZXJyb3JNZXNzYWdlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjaGVtYS5hbGxPZi5wdXNoKHtcbiAgICAgICAgICAgIHBhdHRlcm46IHN0cmluZ2lmeVJlZ0V4cFdpdGhGbGFncyhyZWdleCwgcmVmcyksXG4gICAgICAgICAgICAuLi4obWVzc2FnZSAmJlxuICAgICAgICAgICAgICAgIHJlZnMuZXJyb3JNZXNzYWdlcyAmJiB7IGVycm9yTWVzc2FnZTogeyBwYXR0ZXJuOiBtZXNzYWdlIH0gfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhzY2hlbWEsIFwicGF0dGVyblwiLCBzdHJpbmdpZnlSZWdFeHBXaXRoRmxhZ3MocmVnZXgsIHJlZnMpLCBtZXNzYWdlLCByZWZzKTtcbiAgICB9XG59XG4vLyBNdXRhdGUgei5zdHJpbmcucmVnZXgoKSBpbiBhIGJlc3QgYXR0ZW1wdCB0byBhY2NvbW1vZGF0ZSBmb3IgcmVnZXggZmxhZ3Mgd2hlbiBhcHBseVJlZ2V4RmxhZ3MgaXMgdHJ1ZVxuZnVuY3Rpb24gc3RyaW5naWZ5UmVnRXhwV2l0aEZsYWdzKHJlZ2V4LCByZWZzKSB7XG4gICAgaWYgKCFyZWZzLmFwcGx5UmVnZXhGbGFncyB8fCAhcmVnZXguZmxhZ3MpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnNvdXJjZTtcbiAgICB9XG4gICAgLy8gQ3VycmVudGx5IGhhbmRsZWQgZmxhZ3NcbiAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgaTogcmVnZXguZmxhZ3MuaW5jbHVkZXMoXCJpXCIpLFxuICAgICAgICBtOiByZWdleC5mbGFncy5pbmNsdWRlcyhcIm1cIiksXG4gICAgICAgIHM6IHJlZ2V4LmZsYWdzLmluY2x1ZGVzKFwic1wiKSwgLy8gYC5gIG1hdGNoZXMgbmV3bGluZXNcbiAgICB9O1xuICAgIC8vIFRoZSBnZW5lcmFsIHByaW5jaXBsZSBoZXJlIGlzIHRvIHN0ZXAgdGhyb3VnaCBlYWNoIGNoYXJhY3Rlciwgb25lIGF0IGEgdGltZSwgYXBwbHlpbmcgbXV0YXRpb25zIGFzIGZsYWdzIHJlcXVpcmUuIFdlIGtlZXAgdHJhY2sgd2hlbiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgZXNjYXBlZCwgYW5kIHdoZW4gaXQncyBpbnNpZGUgYSBncm91cCAvbGlrZSBbdGhpc10vIG9yIChhbHNvKSBhIHJhbmdlIGxpa2UgL1thLXpdLy4gVGhlIGZvbGxvd2luZyBpcyBmYWlybHkgYnJpdHRsZSBpbXBlcmF0aXZlIGNvZGU7IGVkaXQgYXQgeW91ciBwZXJpbCFcbiAgICBjb25zdCBzb3VyY2UgPSBmbGFncy5pID8gcmVnZXguc291cmNlLnRvTG93ZXJDYXNlKCkgOiByZWdleC5zb3VyY2U7XG4gICAgbGV0IHBhdHRlcm4gPSBcIlwiO1xuICAgIGxldCBpc0VzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgaW5DaGFyR3JvdXAgPSBmYWxzZTtcbiAgICBsZXQgaW5DaGFyUmFuZ2UgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNFc2NhcGVkKSB7XG4gICAgICAgICAgICBwYXR0ZXJuICs9IHNvdXJjZVtpXTtcbiAgICAgICAgICAgIGlzRXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsYWdzLmkpIHtcbiAgICAgICAgICAgIGlmIChpbkNoYXJHcm91cCkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaV0ubWF0Y2goL1thLXpdLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluQ2hhclJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IHNvdXJjZVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gYCR7c291cmNlW2kgLSAyXX0tJHtzb3VyY2VbaV19YC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5DaGFyUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VbaSArIDFdID09PSBcIi1cIiAmJiBzb3VyY2VbaSArIDJdPy5tYXRjaCgvW2Etel0vKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiArPSBzb3VyY2VbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkNoYXJSYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IGAke3NvdXJjZVtpXX0ke3NvdXJjZVtpXS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc291cmNlW2ldLm1hdGNoKC9bYS16XS8pKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiArPSBgWyR7c291cmNlW2ldfSR7c291cmNlW2ldLnRvVXBwZXJDYXNlKCl9XWA7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsYWdzLm0pIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VbaV0gPT09IFwiXlwiKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiArPSBgKF58KD88PVtcXHJcXG5dKSlgO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc291cmNlW2ldID09PSBcIiRcIikge1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gYCgkfCg/PVtcXHJcXG5dKSlgO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmbGFncy5zICYmIHNvdXJjZVtpXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gKz0gaW5DaGFyR3JvdXAgPyBgJHtzb3VyY2VbaV19XFxyXFxuYCA6IGBbJHtzb3VyY2VbaV19XFxyXFxuXWA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuICs9IHNvdXJjZVtpXTtcbiAgICAgICAgaWYgKHNvdXJjZVtpXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGlzRXNjYXBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5DaGFyR3JvdXAgJiYgc291cmNlW2ldID09PSBcIl1cIikge1xuICAgICAgICAgICAgaW5DaGFyR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5DaGFyR3JvdXAgJiYgc291cmNlW2ldID09PSBcIltcIikge1xuICAgICAgICAgICAgaW5DaGFyR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIG5ldyBSZWdFeHAocGF0dGVybik7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBDb3VsZCBub3QgY29udmVydCByZWdleCBwYXR0ZXJuIGF0ICR7cmVmcy5jdXJyZW50UGF0aC5qb2luKFwiL1wiKX0gdG8gYSBmbGFnLWluZGVwZW5kZW50IGZvcm0hIEZhbGxpbmcgYmFjayB0byB0aGUgZmxhZy1pZ25vcmFudCBzb3VyY2VgKTtcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdHRlcm47XG59XG4iLAogICAgImltcG9ydCB7IFpvZEZpcnN0UGFydHlUeXBlS2luZCwgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VTdHJpbmdEZWYgfSBmcm9tIFwiLi9zdHJpbmcuanNcIjtcbmltcG9ydCB7IHBhcnNlQnJhbmRlZERlZiB9IGZyb20gXCIuL2JyYW5kZWQuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlY29yZERlZihkZWYsIHJlZnMpIHtcbiAgICBpZiAocmVmcy50YXJnZXQgPT09IFwib3BlbkFpXCIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiV2FybmluZzogT3BlbkFJIG1heSBub3Qgc3VwcG9ydCByZWNvcmRzIGluIHNjaGVtYXMhIFRyeSBhbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgaW5zdGVhZC5cIik7XG4gICAgfVxuICAgIGlmIChyZWZzLnRhcmdldCA9PT0gXCJvcGVuQXBpM1wiICYmXG4gICAgICAgIGRlZi5rZXlUeXBlPy5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRW51bSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBkZWYua2V5VHlwZS5fZGVmLnZhbHVlcyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IGRlZi5rZXlUeXBlLl9kZWYudmFsdWVzLnJlZHVjZSgoYWNjLCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtrZXldOiBwYXJzZURlZihkZWYudmFsdWVUeXBlLl9kZWYsIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcInByb3BlcnRpZXNcIiwga2V5XSxcbiAgICAgICAgICAgICAgICB9KSA/PyB7fSxcbiAgICAgICAgICAgIH0pLCB7fSksXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHBhcnNlRGVmKGRlZi52YWx1ZVR5cGUuX2RlZiwge1xuICAgICAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXSxcbiAgICAgICAgfSkgPz8ge30sXG4gICAgfTtcbiAgICBpZiAocmVmcy50YXJnZXQgPT09IFwib3BlbkFwaTNcIikge1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBpZiAoZGVmLmtleVR5cGU/Ll9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTdHJpbmcgJiZcbiAgICAgICAgZGVmLmtleVR5cGUuX2RlZi5jaGVja3M/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IHR5cGUsIC4uLmtleVR5cGUgfSA9IHBhcnNlU3RyaW5nRGVmKGRlZi5rZXlUeXBlLl9kZWYsIHJlZnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lczoga2V5VHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmtleVR5cGU/Ll9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFbnVtKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzOiB7XG4gICAgICAgICAgICAgICAgZW51bTogZGVmLmtleVR5cGUuX2RlZi52YWx1ZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChkZWYua2V5VHlwZT8uX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJyYW5kZWQgJiZcbiAgICAgICAgZGVmLmtleVR5cGUuX2RlZi50eXBlLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTdHJpbmcgJiZcbiAgICAgICAgZGVmLmtleVR5cGUuX2RlZi50eXBlLl9kZWYuY2hlY2tzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCAuLi5rZXlUeXBlIH0gPSBwYXJzZUJyYW5kZWREZWYoZGVmLmtleVR5cGUuX2RlZiwgcmVmcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzOiBrZXlUeXBlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hO1xufVxuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VSZWNvcmREZWYgfSBmcm9tIFwiLi9yZWNvcmQuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1hcERlZihkZWYsIHJlZnMpIHtcbiAgICBpZiAocmVmcy5tYXBTdHJhdGVneSA9PT0gXCJyZWNvcmRcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmREZWYoZGVmLCByZWZzKTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IHBhcnNlRGVmKGRlZi5rZXlUeXBlLl9kZWYsIHtcbiAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcIml0ZW1zXCIsIFwiaXRlbXNcIiwgXCIwXCJdLFxuICAgIH0pIHx8IHt9O1xuICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlRGVmKGRlZi52YWx1ZVR5cGUuX2RlZiwge1xuICAgICAgICAuLi5yZWZzLFxuICAgICAgICBjdXJyZW50UGF0aDogWy4uLnJlZnMuY3VycmVudFBhdGgsIFwiaXRlbXNcIiwgXCJpdGVtc1wiLCBcIjFcIl0sXG4gICAgfSkgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICBtYXhJdGVtczogMTI1LFxuICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgaXRlbXM6IFtrZXlzLCB2YWx1ZXNdLFxuICAgICAgICAgICAgbWluSXRlbXM6IDIsXG4gICAgICAgICAgICBtYXhJdGVtczogMixcbiAgICAgICAgfSxcbiAgICB9O1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gcGFyc2VOYXRpdmVFbnVtRGVmKGRlZikge1xuICAgIGNvbnN0IG9iamVjdCA9IGRlZi52YWx1ZXM7XG4gICAgY29uc3QgYWN0dWFsS2V5cyA9IE9iamVjdC5rZXlzKGRlZi52YWx1ZXMpLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0W29iamVjdFtrZXldXSAhPT0gXCJudW1iZXJcIjtcbiAgICB9KTtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSBhY3R1YWxLZXlzLm1hcCgoa2V5KSA9PiBvYmplY3Rba2V5XSk7XG4gICAgY29uc3QgcGFyc2VkVHlwZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoYWN0dWFsVmFsdWVzLm1hcCgodmFsdWVzKSA9PiB0eXBlb2YgdmFsdWVzKSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHBhcnNlZFR5cGVzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgPyBwYXJzZWRUeXBlc1swXSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgIDogXCJudW1iZXJcIlxuICAgICAgICAgICAgOiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIl0sXG4gICAgICAgIGVudW06IGFjdHVhbFZhbHVlcyxcbiAgICB9O1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gcGFyc2VOZXZlckRlZigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBub3Q6IHt9LFxuICAgIH07XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bGxEZWYocmVmcykge1xuICAgIHJldHVybiByZWZzLnRhcmdldCA9PT0gXCJvcGVuQXBpM1wiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZW51bTogW1wibnVsbFwiXSxcbiAgICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgdHlwZTogXCJudWxsXCIsXG4gICAgICAgIH07XG59XG4iLAogICAgImltcG9ydCB7IHBhcnNlRGVmIH0gZnJvbSBcIi4uL3BhcnNlRGVmLmpzXCI7XG5leHBvcnQgY29uc3QgcHJpbWl0aXZlTWFwcGluZ3MgPSB7XG4gICAgWm9kU3RyaW5nOiBcInN0cmluZ1wiLFxuICAgIFpvZE51bWJlcjogXCJudW1iZXJcIixcbiAgICBab2RCaWdJbnQ6IFwiaW50ZWdlclwiLFxuICAgIFpvZEJvb2xlYW46IFwiYm9vbGVhblwiLFxuICAgIFpvZE51bGw6IFwibnVsbFwiLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVuaW9uRGVmKGRlZiwgcmVmcykge1xuICAgIGlmIChyZWZzLnRhcmdldCA9PT0gXCJvcGVuQXBpM1wiKVxuICAgICAgICByZXR1cm4gYXNBbnlPZihkZWYsIHJlZnMpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBkZWYub3B0aW9ucyBpbnN0YW5jZW9mIE1hcCA/IEFycmF5LmZyb20oZGVmLm9wdGlvbnMudmFsdWVzKCkpIDogZGVmLm9wdGlvbnM7XG4gICAgLy8gVGhpcyBibG9ja3MgdHJpZXMgdG8gbG9vayBhaGVhZCBhIGJpdCB0byBwcm9kdWNlIG5pY2VyIGxvb2tpbmcgc2NoZW1hcyB3aXRoIHR5cGUgYXJyYXkgaW5zdGVhZCBvZiBhbnlPZi5cbiAgICBpZiAob3B0aW9ucy5ldmVyeSgoeCkgPT4geC5fZGVmLnR5cGVOYW1lIGluIHByaW1pdGl2ZU1hcHBpbmdzICYmXG4gICAgICAgICgheC5fZGVmLmNoZWNrcyB8fCAheC5fZGVmLmNoZWNrcy5sZW5ndGgpKSkge1xuICAgICAgICAvLyBhbGwgdHlwZXMgaW4gdW5pb24gYXJlIHByaW1pdGl2ZSBhbmQgbGFjayBjaGVja3MsIHNvIG1pZ2h0IGFzIHdlbGwgc3F1YXNoIGludG8ge3R5cGU6IFsuLi5dfVxuICAgICAgICBjb25zdCB0eXBlcyA9IG9wdGlvbnMucmVkdWNlKCh0eXBlcywgeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHByaW1pdGl2ZU1hcHBpbmdzW3guX2RlZi50eXBlTmFtZV07IC8vQ2FuIGJlIHNhZmVseSBjYXN0ZWQgZHVlIHRvIHJvdyA0M1xuICAgICAgICAgICAgcmV0dXJuIHR5cGUgJiYgIXR5cGVzLmluY2x1ZGVzKHR5cGUpID8gWy4uLnR5cGVzLCB0eXBlXSA6IHR5cGVzO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5sZW5ndGggPiAxID8gdHlwZXMgOiB0eXBlc1swXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAob3B0aW9ucy5ldmVyeSgoeCkgPT4geC5fZGVmLnR5cGVOYW1lID09PSBcIlpvZExpdGVyYWxcIiAmJiAheC5kZXNjcmlwdGlvbikpIHtcbiAgICAgICAgLy8gYWxsIG9wdGlvbnMgbGl0ZXJhbHNcbiAgICAgICAgY29uc3QgdHlwZXMgPSBvcHRpb25zLnJlZHVjZSgoYWNjLCB4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHguX2RlZi52YWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hY2MsIHR5cGVdO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hY2MsIFwiaW50ZWdlclwiXTtcbiAgICAgICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh4Ll9kZWYudmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgXCJudWxsXCJdO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgICAgICBpZiAodHlwZXMubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gYWxsIHRoZSBsaXRlcmFscyBhcmUgcHJpbWl0aXZlLCBhcyBmYXIgYXMgbnVsbCBjYW4gYmUgY29uc2lkZXJlZCBwcmltaXRpdmVcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVR5cGVzID0gdHlwZXMuZmlsdGVyKCh4LCBpLCBhKSA9PiBhLmluZGV4T2YoeCkgPT09IGkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlxdWVUeXBlcy5sZW5ndGggPiAxID8gdW5pcXVlVHlwZXMgOiB1bmlxdWVUeXBlc1swXSxcbiAgICAgICAgICAgICAgICBlbnVtOiBvcHRpb25zLnJlZHVjZSgoYWNjLCB4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MuaW5jbHVkZXMoeC5fZGVmLnZhbHVlKSA/IGFjYyA6IFsuLi5hY2MsIHguX2RlZi52YWx1ZV07XG4gICAgICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zLmV2ZXJ5KCh4KSA9PiB4Ll9kZWYudHlwZU5hbWUgPT09IFwiWm9kRW51bVwiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGVudW06IG9wdGlvbnMucmVkdWNlKChhY2MsIHgpID0+IFtcbiAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgLi4ueC5fZGVmLnZhbHVlcy5maWx0ZXIoKHgpID0+ICFhY2MuaW5jbHVkZXMoeCkpLFxuICAgICAgICAgICAgXSwgW10pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYXNBbnlPZihkZWYsIHJlZnMpO1xufVxuY29uc3QgYXNBbnlPZiA9IChkZWYsIHJlZnMpID0+IHtcbiAgICBjb25zdCBhbnlPZiA9IChkZWYub3B0aW9ucyBpbnN0YW5jZW9mIE1hcFxuICAgICAgICA/IEFycmF5LmZyb20oZGVmLm9wdGlvbnMudmFsdWVzKCkpXG4gICAgICAgIDogZGVmLm9wdGlvbnMpXG4gICAgICAgIC5tYXAoKHgsIGkpID0+IHBhcnNlRGVmKHguX2RlZiwge1xuICAgICAgICAuLi5yZWZzLFxuICAgICAgICBjdXJyZW50UGF0aDogWy4uLnJlZnMuY3VycmVudFBhdGgsIFwiYW55T2ZcIiwgYCR7aX1gXSxcbiAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoeCkgPT4gISF4ICYmXG4gICAgICAgICghcmVmcy5zdHJpY3RVbmlvbnMgfHxcbiAgICAgICAgICAgICh0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyh4KS5sZW5ndGggPiAwKSkpO1xuICAgIHJldHVybiBhbnlPZi5sZW5ndGggPyB7IGFueU9mIH0gOiB1bmRlZmluZWQ7XG59O1xuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuaW1wb3J0IHsgcHJpbWl0aXZlTWFwcGluZ3MgfSBmcm9tIFwiLi91bmlvbi5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVsbGFibGVEZWYoZGVmLCByZWZzKSB7XG4gICAgaWYgKFtcIlpvZFN0cmluZ1wiLCBcIlpvZE51bWJlclwiLCBcIlpvZEJpZ0ludFwiLCBcIlpvZEJvb2xlYW5cIiwgXCJab2ROdWxsXCJdLmluY2x1ZGVzKGRlZi5pbm5lclR5cGUuX2RlZi50eXBlTmFtZSkgJiZcbiAgICAgICAgKCFkZWYuaW5uZXJUeXBlLl9kZWYuY2hlY2tzIHx8ICFkZWYuaW5uZXJUeXBlLl9kZWYuY2hlY2tzLmxlbmd0aCkpIHtcbiAgICAgICAgaWYgKHJlZnMudGFyZ2V0ID09PSBcIm9wZW5BcGkzXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogcHJpbWl0aXZlTWFwcGluZ3NbZGVmLmlubmVyVHlwZS5fZGVmLnR5cGVOYW1lXSxcbiAgICAgICAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFtcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVNYXBwaW5nc1tkZWYuaW5uZXJUeXBlLl9kZWYudHlwZU5hbWVdLFxuICAgICAgICAgICAgICAgIFwibnVsbFwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHJlZnMudGFyZ2V0ID09PSBcIm9wZW5BcGkzXCIpIHtcbiAgICAgICAgY29uc3QgYmFzZSA9IHBhcnNlRGVmKGRlZi5pbm5lclR5cGUuX2RlZiwge1xuICAgICAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aF0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYmFzZSAmJiBcIiRyZWZcIiBpbiBiYXNlKVxuICAgICAgICAgICAgcmV0dXJuIHsgYWxsT2Y6IFtiYXNlXSwgbnVsbGFibGU6IHRydWUgfTtcbiAgICAgICAgcmV0dXJuIGJhc2UgJiYgeyAuLi5iYXNlLCBudWxsYWJsZTogdHJ1ZSB9O1xuICAgIH1cbiAgICBjb25zdCBiYXNlID0gcGFyc2VEZWYoZGVmLmlubmVyVHlwZS5fZGVmLCB7XG4gICAgICAgIC4uLnJlZnMsXG4gICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJhbnlPZlwiLCBcIjBcIl0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGJhc2UgJiYgeyBhbnlPZjogW2Jhc2UsIHsgdHlwZTogXCJudWxsXCIgfV0gfTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgYWRkRXJyb3JNZXNzYWdlLCBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzLCB9IGZyb20gXCIuLi9lcnJvck1lc3NhZ2VzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJEZWYoZGVmLCByZWZzKSB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIH07XG4gICAgaWYgKCFkZWYuY2hlY2tzKVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIGZvciAoY29uc3QgY2hlY2sgb2YgZGVmLmNoZWNrcykge1xuICAgICAgICBzd2l0Y2ggKGNoZWNrLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnRcIjpcbiAgICAgICAgICAgICAgICByZXMudHlwZSA9IFwiaW50ZWdlclwiO1xuICAgICAgICAgICAgICAgIGFkZEVycm9yTWVzc2FnZShyZXMsIFwidHlwZVwiLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgICBpZiAocmVmcy50YXJnZXQgPT09IFwianNvblNjaGVtYTdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2suaW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzKHJlcywgXCJtaW5pbXVtXCIsIGNoZWNrLnZhbHVlLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcImV4Y2x1c2l2ZU1pbmltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrLmluY2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmV4Y2x1c2l2ZU1pbmltdW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcIm1pbmltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgICAgICBpZiAocmVmcy50YXJnZXQgPT09IFwianNvblNjaGVtYTdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2suaW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzKHJlcywgXCJtYXhpbXVtXCIsIGNoZWNrLnZhbHVlLCBjaGVjay5tZXNzYWdlLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcImV4Y2x1c2l2ZU1heGltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrLmluY2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmV4Y2x1c2l2ZU1heGltdW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlVmFsdWVBbmRFcnJvcnMocmVzLCBcIm1heGltdW1cIiwgY2hlY2sudmFsdWUsIGNoZWNrLm1lc3NhZ2UsIHJlZnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZU9mXCI6XG4gICAgICAgICAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhyZXMsIFwibXVsdGlwbGVPZlwiLCBjaGVjay52YWx1ZSwgY2hlY2subWVzc2FnZSwgcmVmcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsCiAgICAiaW1wb3J0IHsgWm9kT3B0aW9uYWwgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuZnVuY3Rpb24gZGVjaWRlQWRkaXRpb25hbFByb3BlcnRpZXMoZGVmLCByZWZzKSB7XG4gICAgaWYgKHJlZnMucmVtb3ZlQWRkaXRpb25hbFN0cmF0ZWd5ID09PSBcInN0cmljdFwiKSB7XG4gICAgICAgIHJldHVybiBkZWYuY2F0Y2hhbGwuX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROZXZlclwiXG4gICAgICAgICAgICA/IGRlZi51bmtub3duS2V5cyAhPT0gXCJzdHJpY3RcIlxuICAgICAgICAgICAgOiBwYXJzZURlZihkZWYuY2F0Y2hhbGwuX2RlZiwge1xuICAgICAgICAgICAgICAgIC4uLnJlZnMsXG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCJdLFxuICAgICAgICAgICAgfSkgPz8gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWYuY2F0Y2hhbGwuX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROZXZlclwiXG4gICAgICAgICAgICA/IGRlZi51bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiXG4gICAgICAgICAgICA6IHBhcnNlRGVmKGRlZi5jYXRjaGFsbC5fZGVmLCB7XG4gICAgICAgICAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aDogWy4uLnJlZnMuY3VycmVudFBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgICAgICB9KSA/PyB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9iamVjdERlZihkZWYsIHJlZnMpIHtcbiAgICBjb25zdCBmb3JjZU9wdGlvbmFsSW50b051bGxhYmxlID0gcmVmcy50YXJnZXQgPT09IFwib3BlbkFpXCI7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAuLi5PYmplY3QuZW50cmllcyhkZWYuc2hhcGUoKSkucmVkdWNlKChhY2MsIFtwcm9wTmFtZSwgcHJvcERlZl0pID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wRGVmID09PSB1bmRlZmluZWQgfHwgcHJvcERlZi5fZGVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIGxldCBwcm9wT3B0aW9uYWwgPSBwcm9wRGVmLmlzT3B0aW9uYWwoKTtcbiAgICAgICAgICAgIGlmIChwcm9wT3B0aW9uYWwgJiYgZm9yY2VPcHRpb25hbEludG9OdWxsYWJsZSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wRGVmIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcERlZiA9IHByb3BEZWYuX2RlZi5pbm5lclR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcHJvcERlZi5pc051bGxhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcERlZiA9IHByb3BEZWYubnVsbGFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcE9wdGlvbmFsID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJzZWREZWYgPSBwYXJzZURlZihwcm9wRGVmLl9kZWYsIHtcbiAgICAgICAgICAgICAgICAuLi5yZWZzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJwcm9wZXJ0aWVzXCIsIHByb3BOYW1lXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcInByb3BlcnRpZXNcIiwgcHJvcE5hbWVdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkRGVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogeyAuLi5hY2MucHJvcGVydGllcywgW3Byb3BOYW1lXTogcGFyc2VkRGVmIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHByb3BPcHRpb25hbCA/IGFjYy5yZXF1aXJlZCA6IFsuLi5hY2MucmVxdWlyZWQsIHByb3BOYW1lXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIHsgcHJvcGVydGllczoge30sIHJlcXVpcmVkOiBbXSB9KSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGRlY2lkZUFkZGl0aW9uYWxQcm9wZXJ0aWVzKGRlZiwgcmVmcyksXG4gICAgfTtcbiAgICBpZiAoIXJlc3VsdC5yZXF1aXJlZC5sZW5ndGgpXG4gICAgICAgIGRlbGV0ZSByZXN1bHQucmVxdWlyZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsCiAgICAiaW1wb3J0IHsgcGFyc2VEZWYgfSBmcm9tIFwiLi4vcGFyc2VEZWYuanNcIjtcbmV4cG9ydCBjb25zdCBwYXJzZU9wdGlvbmFsRGVmID0gKGRlZiwgcmVmcykgPT4ge1xuICAgIGlmIChyZWZzLmN1cnJlbnRQYXRoLnRvU3RyaW5nKCkgPT09IHJlZnMucHJvcGVydHlQYXRoPy50b1N0cmluZygpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZURlZihkZWYuaW5uZXJUeXBlLl9kZWYsIHJlZnMpO1xuICAgIH1cbiAgICBjb25zdCBpbm5lclNjaGVtYSA9IHBhcnNlRGVmKGRlZi5pbm5lclR5cGUuX2RlZiwge1xuICAgICAgICAuLi5yZWZzLFxuICAgICAgICBjdXJyZW50UGF0aDogWy4uLnJlZnMuY3VycmVudFBhdGgsIFwiYW55T2ZcIiwgXCIxXCJdLFxuICAgIH0pO1xuICAgIHJldHVybiBpbm5lclNjaGVtYVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBub3Q6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5uZXJTY2hlbWEsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICAgIDoge307XG59O1xuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuZXhwb3J0IGNvbnN0IHBhcnNlUGlwZWxpbmVEZWYgPSAoZGVmLCByZWZzKSA9PiB7XG4gICAgaWYgKHJlZnMucGlwZVN0cmF0ZWd5ID09PSBcImlucHV0XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVmKGRlZi5pbi5fZGVmLCByZWZzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmcy5waXBlU3RyYXRlZ3kgPT09IFwib3V0cHV0XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVmKGRlZi5vdXQuX2RlZiwgcmVmcyk7XG4gICAgfVxuICAgIGNvbnN0IGEgPSBwYXJzZURlZihkZWYuaW4uX2RlZiwge1xuICAgICAgICAuLi5yZWZzLFxuICAgICAgICBjdXJyZW50UGF0aDogWy4uLnJlZnMuY3VycmVudFBhdGgsIFwiYWxsT2ZcIiwgXCIwXCJdLFxuICAgIH0pO1xuICAgIGNvbnN0IGIgPSBwYXJzZURlZihkZWYub3V0Ll9kZWYsIHtcbiAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcImFsbE9mXCIsIGEgPyBcIjFcIiA6IFwiMFwiXSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxPZjogW2EsIGJdLmZpbHRlcigoeCkgPT4geCAhPT0gdW5kZWZpbmVkKSxcbiAgICB9O1xufTtcbiIsCiAgICAiaW1wb3J0IHsgcGFyc2VEZWYgfSBmcm9tIFwiLi4vcGFyc2VEZWYuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb21pc2VEZWYoZGVmLCByZWZzKSB7XG4gICAgcmV0dXJuIHBhcnNlRGVmKGRlZi50eXBlLl9kZWYsIHJlZnMpO1xufVxuIiwKICAgICJpbXBvcnQgeyBzZXRSZXNwb25zZVZhbHVlQW5kRXJyb3JzIH0gZnJvbSBcIi4uL2Vycm9yTWVzc2FnZXMuanNcIjtcbmltcG9ydCB7IHBhcnNlRGVmIH0gZnJvbSBcIi4uL3BhcnNlRGVmLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZXREZWYoZGVmLCByZWZzKSB7XG4gICAgY29uc3QgaXRlbXMgPSBwYXJzZURlZihkZWYudmFsdWVUeXBlLl9kZWYsIHtcbiAgICAgICAgLi4ucmVmcyxcbiAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcIml0ZW1zXCJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgaXRlbXMsXG4gICAgfTtcbiAgICBpZiAoZGVmLm1pblNpemUpIHtcbiAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhzY2hlbWEsIFwibWluSXRlbXNcIiwgZGVmLm1pblNpemUudmFsdWUsIGRlZi5taW5TaXplLm1lc3NhZ2UsIHJlZnMpO1xuICAgIH1cbiAgICBpZiAoZGVmLm1heFNpemUpIHtcbiAgICAgICAgc2V0UmVzcG9uc2VWYWx1ZUFuZEVycm9ycyhzY2hlbWEsIFwibWF4SXRlbXNcIiwgZGVmLm1heFNpemUudmFsdWUsIGRlZi5tYXhTaXplLm1lc3NhZ2UsIHJlZnMpO1xuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hO1xufVxuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVHVwbGVEZWYoZGVmLCByZWZzKSB7XG4gICAgaWYgKGRlZi5yZXN0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBtaW5JdGVtczogZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW1zOiBkZWYuaXRlbXNcbiAgICAgICAgICAgICAgICAubWFwKCh4LCBpKSA9PiBwYXJzZURlZih4Ll9kZWYsIHtcbiAgICAgICAgICAgICAgICAuLi5yZWZzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJpdGVtc1wiLCBgJHtpfWBdLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB4KSA9PiAoeCA9PT0gdW5kZWZpbmVkID8gYWNjIDogWy4uLmFjYywgeF0pLCBbXSksXG4gICAgICAgICAgICBhZGRpdGlvbmFsSXRlbXM6IHBhcnNlRGVmKGRlZi5yZXN0Ll9kZWYsIHtcbiAgICAgICAgICAgICAgICAuLi5yZWZzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4ucmVmcy5jdXJyZW50UGF0aCwgXCJhZGRpdGlvbmFsSXRlbXNcIl0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBtaW5JdGVtczogZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgIG1heEl0ZW1zOiBkZWYuaXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbXM6IGRlZi5pdGVtc1xuICAgICAgICAgICAgICAgIC5tYXAoKHgsIGkpID0+IHBhcnNlRGVmKHguX2RlZiwge1xuICAgICAgICAgICAgICAgIC4uLnJlZnMsXG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmN1cnJlbnRQYXRoLCBcIml0ZW1zXCIsIGAke2l9YF0sXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIHgpID0+ICh4ID09PSB1bmRlZmluZWQgPyBhY2MgOiBbLi4uYWNjLCB4XSksIFtdKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJzZVVuZGVmaW5lZERlZigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBub3Q6IHt9LFxuICAgIH07XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJzZVVua25vd25EZWYoKSB7XG4gICAgcmV0dXJuIHt9O1xufVxuIiwKICAgICJpbXBvcnQgeyBwYXJzZURlZiB9IGZyb20gXCIuLi9wYXJzZURlZi5qc1wiO1xuZXhwb3J0IGNvbnN0IHBhcnNlUmVhZG9ubHlEZWYgPSAoZGVmLCByZWZzKSA9PiB7XG4gICAgcmV0dXJuIHBhcnNlRGVmKGRlZi5pbm5lclR5cGUuX2RlZiwgcmVmcyk7XG59O1xuIiwKICAgICJpbXBvcnQgeyBab2RGaXJzdFBhcnR5VHlwZUtpbmQgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwYXJzZUFueURlZiB9IGZyb20gXCIuL3BhcnNlcnMvYW55LmpzXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5RGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9hcnJheS5qc1wiO1xuaW1wb3J0IHsgcGFyc2VCaWdpbnREZWYgfSBmcm9tIFwiLi9wYXJzZXJzL2JpZ2ludC5qc1wiO1xuaW1wb3J0IHsgcGFyc2VCb29sZWFuRGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9ib29sZWFuLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUJyYW5kZWREZWYgfSBmcm9tIFwiLi9wYXJzZXJzL2JyYW5kZWQuanNcIjtcbmltcG9ydCB7IHBhcnNlQ2F0Y2hEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL2NhdGNoLmpzXCI7XG5pbXBvcnQgeyBwYXJzZURhdGVEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL2RhdGUuanNcIjtcbmltcG9ydCB7IHBhcnNlRGVmYXVsdERlZiB9IGZyb20gXCIuL3BhcnNlcnMvZGVmYXVsdC5qc1wiO1xuaW1wb3J0IHsgcGFyc2VFZmZlY3RzRGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9lZmZlY3RzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUVudW1EZWYgfSBmcm9tIFwiLi9wYXJzZXJzL2VudW0uanNcIjtcbmltcG9ydCB7IHBhcnNlSW50ZXJzZWN0aW9uRGVmLCB9IGZyb20gXCIuL3BhcnNlcnMvaW50ZXJzZWN0aW9uLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUxpdGVyYWxEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL2xpdGVyYWwuanNcIjtcbmltcG9ydCB7IHBhcnNlTWFwRGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9tYXAuanNcIjtcbmltcG9ydCB7IHBhcnNlTmF0aXZlRW51bURlZiwgfSBmcm9tIFwiLi9wYXJzZXJzL25hdGl2ZUVudW0uanNcIjtcbmltcG9ydCB7IHBhcnNlTmV2ZXJEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL25ldmVyLmpzXCI7XG5pbXBvcnQgeyBwYXJzZU51bGxEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL251bGwuanNcIjtcbmltcG9ydCB7IHBhcnNlTnVsbGFibGVEZWYsIH0gZnJvbSBcIi4vcGFyc2Vycy9udWxsYWJsZS5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXJEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL251bWJlci5qc1wiO1xuaW1wb3J0IHsgcGFyc2VPYmplY3REZWYgfSBmcm9tIFwiLi9wYXJzZXJzL29iamVjdC5qc1wiO1xuaW1wb3J0IHsgcGFyc2VPcHRpb25hbERlZiB9IGZyb20gXCIuL3BhcnNlcnMvb3B0aW9uYWwuanNcIjtcbmltcG9ydCB7IHBhcnNlUGlwZWxpbmVEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL3BpcGVsaW5lLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVByb21pc2VEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL3Byb21pc2UuanNcIjtcbmltcG9ydCB7IHBhcnNlUmVjb3JkRGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9yZWNvcmQuanNcIjtcbmltcG9ydCB7IHBhcnNlU2V0RGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9zZXQuanNcIjtcbmltcG9ydCB7IHBhcnNlU3RyaW5nRGVmIH0gZnJvbSBcIi4vcGFyc2Vycy9zdHJpbmcuanNcIjtcbmltcG9ydCB7IHBhcnNlVHVwbGVEZWYgfSBmcm9tIFwiLi9wYXJzZXJzL3R1cGxlLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVVuZGVmaW5lZERlZiwgfSBmcm9tIFwiLi9wYXJzZXJzL3VuZGVmaW5lZC5qc1wiO1xuaW1wb3J0IHsgcGFyc2VVbmlvbkRlZiB9IGZyb20gXCIuL3BhcnNlcnMvdW5pb24uanNcIjtcbmltcG9ydCB7IHBhcnNlVW5rbm93bkRlZiB9IGZyb20gXCIuL3BhcnNlcnMvdW5rbm93bi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VSZWFkb25seURlZiB9IGZyb20gXCIuL3BhcnNlcnMvcmVhZG9ubHkuanNcIjtcbmltcG9ydCB7IGlnbm9yZU92ZXJyaWRlIH0gZnJvbSBcIi4vT3B0aW9ucy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVmKGRlZiwgcmVmcywgZm9yY2VSZXNvbHV0aW9uID0gZmFsc2UpIHtcbiAgICBjb25zdCBzZWVuSXRlbSA9IHJlZnMuc2Vlbi5nZXQoZGVmKTtcbiAgICBpZiAocmVmcy5vdmVycmlkZSkge1xuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IHJlZnMub3ZlcnJpZGU/LihkZWYsIHJlZnMsIHNlZW5JdGVtLCBmb3JjZVJlc29sdXRpb24pO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQgIT09IGlnbm9yZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVSZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlZW5JdGVtICYmICFmb3JjZVJlc29sdXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2VlblNjaGVtYSA9IGdldCRyZWYoc2Vlbkl0ZW0sIHJlZnMpO1xuICAgICAgICBpZiAoc2VlblNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VlblNjaGVtYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdJdGVtID0geyBkZWYsIHBhdGg6IHJlZnMuY3VycmVudFBhdGgsIGpzb25TY2hlbWE6IHVuZGVmaW5lZCB9O1xuICAgIHJlZnMuc2Vlbi5zZXQoZGVmLCBuZXdJdGVtKTtcbiAgICBjb25zdCBqc29uU2NoZW1hID0gc2VsZWN0UGFyc2VyKGRlZiwgZGVmLnR5cGVOYW1lLCByZWZzKTtcbiAgICBpZiAoanNvblNjaGVtYSkge1xuICAgICAgICBhZGRNZXRhKGRlZiwgcmVmcywganNvblNjaGVtYSk7XG4gICAgfVxuICAgIG5ld0l0ZW0uanNvblNjaGVtYSA9IGpzb25TY2hlbWE7XG4gICAgcmV0dXJuIGpzb25TY2hlbWE7XG59XG5jb25zdCBnZXQkcmVmID0gKGl0ZW0sIHJlZnMpID0+IHtcbiAgICBzd2l0Y2ggKHJlZnMuJHJlZlN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgXCJyb290XCI6XG4gICAgICAgICAgICByZXR1cm4geyAkcmVmOiBpdGVtLnBhdGguam9pbihcIi9cIikgfTtcbiAgICAgICAgY2FzZSBcInJlbGF0aXZlXCI6XG4gICAgICAgICAgICByZXR1cm4geyAkcmVmOiBnZXRSZWxhdGl2ZVBhdGgocmVmcy5jdXJyZW50UGF0aCwgaXRlbS5wYXRoKSB9O1xuICAgICAgICBjYXNlIFwibm9uZVwiOlxuICAgICAgICBjYXNlIFwic2VlblwiOiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5wYXRoLmxlbmd0aCA8IHJlZnMuY3VycmVudFBhdGgubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgaXRlbS5wYXRoLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHJlZnMuY3VycmVudFBhdGhbaW5kZXhdID09PSB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFJlY3Vyc2l2ZSByZWZlcmVuY2UgZGV0ZWN0ZWQgYXQgJHtyZWZzLmN1cnJlbnRQYXRoLmpvaW4oXCIvXCIpfSEgRGVmYXVsdGluZyB0byBhbnlgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVmcy4kcmVmU3RyYXRlZ3kgPT09IFwic2VlblwiID8ge30gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgZ2V0UmVsYXRpdmVQYXRoID0gKHBhdGhBLCBwYXRoQikgPT4ge1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHBhdGhBLmxlbmd0aCAmJiBpIDwgcGF0aEIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhdGhBW2ldICE9PSBwYXRoQltpXSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gWyhwYXRoQS5sZW5ndGggLSBpKS50b1N0cmluZygpLCAuLi5wYXRoQi5zbGljZShpKV0uam9pbihcIi9cIik7XG59O1xuY29uc3Qgc2VsZWN0UGFyc2VyID0gKGRlZiwgdHlwZU5hbWUsIHJlZnMpID0+IHtcbiAgICBzd2l0Y2ggKHR5cGVOYW1lKSB7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVN0cmluZ0RlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdW1iZXI6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJEZWYoZGVmLCByZWZzKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0OlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0RGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJpZ0ludDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUJpZ2ludERlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQm9vbGVhbkRlZigpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REYXRlOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGF0ZURlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmRlZmluZWQ6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmRlZmluZWREZWYoKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bGxEZWYocmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5OlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlEZWYoZGVmLCByZWZzKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5pb246XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERpc2NyaW1pbmF0ZWRVbmlvbjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVVuaW9uRGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEludGVyc2VjdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludGVyc2VjdGlvbkRlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RUdXBsZTpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVR1cGxlRGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlY29yZDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZERlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMaXRlcmFsOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbERlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFbnVtOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW51bURlZihkZWYpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROYXRpdmVFbnVtOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlRW51bURlZihkZWYpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsYWJsZTpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bGxhYmxlRGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9uYWxEZWYoZGVmLCByZWZzKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTWFwOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTWFwRGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFNldDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVNldERlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMYXp5OlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGVmKGRlZi5nZXR0ZXIoKS5fZGVmLCByZWZzKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUHJvbWlzZTpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVByb21pc2VEZWYoZGVmLCByZWZzKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmFOOlxuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROZXZlcjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU5ldmVyRGVmKCk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHM6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VFZmZlY3RzRGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFueTpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUFueURlZigpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmtub3duOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlVW5rbm93bkRlZigpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGVmYXVsdERlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCcmFuZGVkOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQnJhbmRlZERlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWFkb25seTpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVJlYWRvbmx5RGVmKGRlZiwgcmVmcyk7XG4gICAgICAgIGNhc2UgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2F0Y2hEZWYoZGVmLCByZWZzKTtcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmU6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VQaXBlbGluZURlZihkZWYsIHJlZnMpO1xuICAgICAgICBjYXNlIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RGdW5jdGlvbjpcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVm9pZDpcbiAgICAgICAgY2FzZSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3ltYm9sOlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICByZXR1cm4gKChfKSA9PiB1bmRlZmluZWQpKHR5cGVOYW1lKTtcbiAgICB9XG59O1xuY29uc3QgYWRkTWV0YSA9IChkZWYsIHJlZnMsIGpzb25TY2hlbWEpID0+IHtcbiAgICBpZiAoZGVmLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGpzb25TY2hlbWEuZGVzY3JpcHRpb24gPSBkZWYuZGVzY3JpcHRpb247XG4gICAgICAgIGlmIChyZWZzLm1hcmtkb3duRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGpzb25TY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbiA9IGRlZi5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ganNvblNjaGVtYTtcbn07XG4iLAogICAgImltcG9ydCB7IHBhcnNlRGVmIH0gZnJvbSBcIi4vcGFyc2VEZWYuanNcIjtcbmltcG9ydCB7IGdldFJlZnMgfSBmcm9tIFwiLi9SZWZzLmpzXCI7XG5jb25zdCB6b2RUb0pzb25TY2hlbWEgPSAoc2NoZW1hLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcmVmcyA9IGdldFJlZnMob3B0aW9ucyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zLmRlZmluaXRpb25zXG4gICAgICAgID8gT2JqZWN0LmVudHJpZXMob3B0aW9ucy5kZWZpbml0aW9ucykucmVkdWNlKChhY2MsIFtuYW1lLCBzY2hlbWFdKSA9PiAoe1xuICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgW25hbWVdOiBwYXJzZURlZihzY2hlbWEuX2RlZiwge1xuICAgICAgICAgICAgICAgIC4uLnJlZnMsXG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmJhc2VQYXRoLCByZWZzLmRlZmluaXRpb25QYXRoLCBuYW1lXSxcbiAgICAgICAgICAgIH0sIHRydWUpID8/IHt9LFxuICAgICAgICB9KSwge30pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG9wdGlvbnNcbiAgICAgICAgOiBvcHRpb25zPy5uYW1lU3RyYXRlZ3kgPT09IFwidGl0bGVcIlxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogb3B0aW9ucz8ubmFtZTtcbiAgICBjb25zdCBtYWluID0gcGFyc2VEZWYoc2NoZW1hLl9kZWYsIG5hbWUgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHJlZnNcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi5yZWZzLFxuICAgICAgICAgICAgY3VycmVudFBhdGg6IFsuLi5yZWZzLmJhc2VQYXRoLCByZWZzLmRlZmluaXRpb25QYXRoLCBuYW1lXSxcbiAgICAgICAgfSwgZmFsc2UpID8/IHt9O1xuICAgIGNvbnN0IHRpdGxlID0gdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgb3B0aW9ucy5uYW1lU3RyYXRlZ3kgPT09IFwidGl0bGVcIlxuICAgICAgICA/IG9wdGlvbnMubmFtZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYWluLnRpdGxlID0gdGl0bGU7XG4gICAgfVxuICAgIGNvbnN0IGNvbWJpbmVkID0gbmFtZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gZGVmaW5pdGlvbnNcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLm1haW4sXG4gICAgICAgICAgICAgICAgW3JlZnMuZGVmaW5pdGlvblBhdGhdOiBkZWZpbml0aW9ucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbWFpblxuICAgICAgICA6IHtcbiAgICAgICAgICAgICRyZWY6IFtcbiAgICAgICAgICAgICAgICAuLi4ocmVmcy4kcmVmU3RyYXRlZ3kgPT09IFwicmVsYXRpdmVcIiA/IFtdIDogcmVmcy5iYXNlUGF0aCksXG4gICAgICAgICAgICAgICAgcmVmcy5kZWZpbml0aW9uUGF0aCxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgXS5qb2luKFwiL1wiKSxcbiAgICAgICAgICAgIFtyZWZzLmRlZmluaXRpb25QYXRoXToge1xuICAgICAgICAgICAgICAgIC4uLmRlZmluaXRpb25zLFxuICAgICAgICAgICAgICAgIFtuYW1lXTogbWFpbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgaWYgKHJlZnMudGFyZ2V0ID09PSBcImpzb25TY2hlbWE3XCIpIHtcbiAgICAgICAgY29tYmluZWQuJHNjaGVtYSA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZnMudGFyZ2V0ID09PSBcImpzb25TY2hlbWEyMDE5LTA5XCIgfHwgcmVmcy50YXJnZXQgPT09IFwib3BlbkFpXCIpIHtcbiAgICAgICAgY29tYmluZWQuJHNjaGVtYSA9IFwiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEjXCI7XG4gICAgfVxuICAgIGlmIChyZWZzLnRhcmdldCA9PT0gXCJvcGVuQWlcIiAmJlxuICAgICAgICAoXCJhbnlPZlwiIGluIGNvbWJpbmVkIHx8XG4gICAgICAgICAgICBcIm9uZU9mXCIgaW4gY29tYmluZWQgfHxcbiAgICAgICAgICAgIFwiYWxsT2ZcIiBpbiBjb21iaW5lZCB8fFxuICAgICAgICAgICAgKFwidHlwZVwiIGluIGNvbWJpbmVkICYmIEFycmF5LmlzQXJyYXkoY29tYmluZWQudHlwZSkpKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBPcGVuQUkgbWF5IG5vdCBzdXBwb3J0IHNjaGVtYXMgd2l0aCB1bmlvbnMgYXMgcm9vdHMhIFRyeSB3cmFwcGluZyBpdCBpbiBhbiBvYmplY3QgcHJvcGVydHkuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29tYmluZWQ7XG59O1xuZXhwb3J0IHsgem9kVG9Kc29uU2NoZW1hIH07XG4iLAogICAgImltcG9ydCB7IHN0YXRTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcydcbmltcG9ydCB7IGlzQWJzb2x1dGUsIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Byb2R1Y3QuanMnXG5pbXBvcnQgeyBxdWVyeUhhaWt1IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2xhdWRlLmpzJ1xuaW1wb3J0IHsgVG9vbCwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBzcGxpdENvbW1hbmQgfSBmcm9tICcuLi8uLi91dGlscy9jb21tYW5kcy5qcydcbmltcG9ydCB7IGlzSW5EaXJlY3RvcnkgfSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBQZXJzaXN0ZW50U2hlbGwgfSBmcm9tICcuLi8uLi91dGlscy9QZXJzaXN0ZW50U2hlbGwuanMnXG5pbXBvcnQgeyBnZXRDd2QsIGdldE9yaWdpbmFsQ3dkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgQmFzaFRvb2xSZXN1bHRNZXNzYWdlIGZyb20gJy4vQmFzaFRvb2xSZXN1bHRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgQkFOTkVEX0NPTU1BTkRTLCBQUk9NUFQgfSBmcm9tICcuL3Byb21wdC5qcydcbmltcG9ydCB7IGZvcm1hdE91dHB1dCwgZ2V0Q29tbWFuZEZpbGVQYXRocyB9IGZyb20gJy4vdXRpbHMuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5cbmV4cG9ydCBjb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgY29tbWFuZDogei5zdHJpbmcoKS5kZXNjcmliZSgnVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZScpLFxuICB0aW1lb3V0OiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoJ09wdGlvbmFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChtYXggNjAwMDAwKScpLFxufSlcblxudHlwZSBJbiA9IHR5cGVvZiBpbnB1dFNjaGVtYVxuZXhwb3J0IHR5cGUgT3V0ID0ge1xuICBzdGRvdXQ6IHN0cmluZ1xuICBzdGRvdXRMaW5lczogbnVtYmVyIC8vIFRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiBvcmlnaW5hbCBzdGRvdXQsIGV2ZW4gaWYgYHN0ZG91dGAgaXMgbm93IHRydW5jYXRlZFxuICBzdGRlcnI6IHN0cmluZ1xuICBzdGRlcnJMaW5lczogbnVtYmVyIC8vIFRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiBvcmlnaW5hbCBzdGRlcnIsIGV2ZW4gaWYgYHN0ZGVycmAgaXMgbm93IHRydW5jYXRlZFxuICBpbnRlcnJ1cHRlZDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQmFzaFRvb2wgPSB7XG4gIG5hbWU6ICdCYXNoJyxcbiAgYXN5bmMgZGVzY3JpcHRpb24oeyBjb21tYW5kIH0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlIYWlrdSh7XG4gICAgICAgIHN5c3RlbVByb21wdDogW1xuICAgICAgICAgIGBZb3UgYXJlIGEgY29tbWFuZCBkZXNjcmlwdGlvbiBnZW5lcmF0b3IuIFdyaXRlIGEgY2xlYXIsIGNvbmNpc2UgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIGNvbW1hbmQgZG9lcyBpbiA1LTEwIHdvcmRzLiBFeGFtcGxlczpcblxuICAgICAgICAgIElucHV0OiBsc1xuICAgICAgICAgIE91dHB1dDogTGlzdHMgZmlsZXMgaW4gY3VycmVudCBkaXJlY3RvcnlcblxuICAgICAgICAgIElucHV0OiBnaXQgc3RhdHVzXG4gICAgICAgICAgT3V0cHV0OiBTaG93cyB3b3JraW5nIHRyZWUgc3RhdHVzXG5cbiAgICAgICAgICBJbnB1dDogbnBtIGluc3RhbGxcbiAgICAgICAgICBPdXRwdXQ6IEluc3RhbGxzIHBhY2thZ2UgZGVwZW5kZW5jaWVzXG5cbiAgICAgICAgICBJbnB1dDogbWtkaXIgZm9vXG4gICAgICAgICAgT3V0cHV0OiBDcmVhdGVzIGRpcmVjdG9yeSAnZm9vJ2AsXG4gICAgICAgIF0sXG4gICAgICAgIHVzZXJQcm9tcHQ6IGBEZXNjcmliZSB0aGlzIGNvbW1hbmQ6ICR7Y29tbWFuZH1gLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UuY29udGVudFswXT8udHlwZSA9PT0gJ3RleHQnXG4gICAgICAgICAgPyByZXN1bHQubWVzc2FnZS5jb250ZW50WzBdLnRleHRcbiAgICAgICAgICA6IG51bGxcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbiB8fCAnRXhlY3V0ZXMgYSBiYXNoIGNvbW1hbmQnXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgICAgcmV0dXJuICdFeGVjdXRlcyBhIGJhc2ggY29tbWFuZCdcbiAgICB9XG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gUFJPTVBUXG4gIH0sXG4gIGlzUmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIGlucHV0U2NoZW1hLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ0Jhc2gnXG4gIH0sXG4gIGFzeW5jIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICBuZWVkc1Blcm1pc3Npb25zKCk6IGJvb2xlYW4ge1xuICAgIC8vIEFsd2F5cyBjaGVjayBwZXItcHJvamVjdCBwZXJtaXNzaW9ucyBmb3IgQmFzaFRvb2xcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICBhc3luYyB2YWxpZGF0ZUlucHV0KHsgY29tbWFuZCB9KTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBzcGxpdENvbW1hbmQoY29tbWFuZClcbiAgICBmb3IgKGNvbnN0IGNtZCBvZiBjb21tYW5kcykge1xuICAgICAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoJyAnKVxuICAgICAgY29uc3QgYmFzZUNtZCA9IHBhcnRzWzBdXG5cbiAgICAgIC8vIENoZWNrIGlmIGNvbW1hbmQgaXMgYmFubmVkXG4gICAgICBpZiAoYmFzZUNtZCAmJiBCQU5ORURfQ09NTUFORFMuaW5jbHVkZXMoYmFzZUNtZC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogYENvbW1hbmQgJyR7YmFzZUNtZH0nIGlzIG5vdCBhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zYCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBjZCBjb21tYW5kXG4gICAgICBpZiAoYmFzZUNtZCA9PT0gJ2NkJyAmJiBwYXJ0c1sxXSkge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXJ0c1sxXSEucmVwbGFjZSgvXlsnXCJdfFsnXCJdJC9nLCAnJykgLy8gUmVtb3ZlIHF1b3RlcyBpZiBwcmVzZW50XG4gICAgICAgIGNvbnN0IGZ1bGxUYXJnZXREaXIgPSBpc0Fic29sdXRlKHRhcmdldERpcilcbiAgICAgICAgICA/IHRhcmdldERpclxuICAgICAgICAgIDogcmVzb2x2ZShnZXRDd2QoKSwgdGFyZ2V0RGlyKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzSW5EaXJlY3RvcnkoXG4gICAgICAgICAgICByZWxhdGl2ZShnZXRPcmlnaW5hbEN3ZCgpLCBmdWxsVGFyZ2V0RGlyKSxcbiAgICAgICAgICAgIHJlbGF0aXZlKGdldEN3ZCgpLCBnZXRPcmlnaW5hbEN3ZCgpKSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogYEVSUk9SOiBjZCB0byAnJHtmdWxsVGFyZ2V0RGlyfScgd2FzIGJsb2NrZWQuIEZvciBzZWN1cml0eSwgJHtQUk9EVUNUX05BTUV9IG1heSBvbmx5IGNoYW5nZSBkaXJlY3RvcmllcyB0byBjaGlsZCBkaXJlY3RvcmllcyBvZiB0aGUgb3JpZ2luYWwgd29ya2luZyBkaXJlY3RvcnkgKCR7Z2V0T3JpZ2luYWxDd2QoKX0pIGZvciB0aGlzIHNlc3Npb24uYCxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9LFxuICByZW5kZXJUb29sVXNlTWVzc2FnZSh7IGNvbW1hbmQgfSkge1xuICAgIC8vIENsZWFuIHVwIGFueSBjb21tYW5kIHRoYXQgdXNlcyB0aGUgcXVvdGVkIEhFUkVET0MgcGF0dGVyblxuICAgIGlmIChjb21tYW5kLmluY2x1ZGVzKFwiXFxcIiQoY2F0IDw8J0VPRidcIikpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gY29tbWFuZC5tYXRjaChcbiAgICAgICAgL14oLio/KVwiP1xcJFxcKGNhdCA8PCdFT0YnXFxuKFtcXHNcXFNdKj8pXFxuXFxzKkVPRlxcblxccypcXClcIiguKikkLyxcbiAgICAgIClcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSAmJiBtYXRjaFsyXSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXVxuICAgICAgICBjb25zdCBjb250ZW50ID0gbWF0Y2hbMl1cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gbWF0Y2hbM10gfHwgJydcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeC50cmltKCl9IFwiJHtjb250ZW50LnRyaW0oKX1cIiR7c3VmZml4LnRyaW0oKX1gXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kXG4gIH0sXG4gIHJlbmRlclRvb2xVc2VSZWplY3RlZE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIDxGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgLz5cbiAgfSxcblxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZShjb250ZW50LCB7IHZlcmJvc2UgfSkge1xuICAgIHJldHVybiA8QmFzaFRvb2xSZXN1bHRNZXNzYWdlIGNvbnRlbnQ9e2NvbnRlbnR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH0sXG4gIHJlbmRlclJlc3VsdEZvckFzc2lzdGFudCh7IGludGVycnVwdGVkLCBzdGRvdXQsIHN0ZGVyciB9KSB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IHN0ZGVyci50cmltKClcbiAgICBpZiAoaW50ZXJydXB0ZWQpIHtcbiAgICAgIGlmIChzdGRlcnIpIGVycm9yTWVzc2FnZSArPSBFT0xcbiAgICAgIGVycm9yTWVzc2FnZSArPSAnPGVycm9yPkNvbW1hbmQgd2FzIGFib3J0ZWQgYmVmb3JlIGNvbXBsZXRpb248L2Vycm9yPidcbiAgICB9XG4gICAgY29uc3QgaGFzQm90aCA9IHN0ZG91dC50cmltKCkgJiYgZXJyb3JNZXNzYWdlXG4gICAgcmV0dXJuIGAke3N0ZG91dC50cmltKCl9JHtoYXNCb3RoID8gJ1xcbicgOiAnJ30ke2Vycm9yTWVzc2FnZS50cmltKCl9YFxuICB9LFxuICBhc3luYyAqY2FsbChcbiAgICB7IGNvbW1hbmQsIHRpbWVvdXQgPSAxMjAwMDAgfSxcbiAgICB7IGFib3J0Q29udHJvbGxlciwgcmVhZEZpbGVUaW1lc3RhbXBzIH0sXG4gICkge1xuICAgIGxldCBzdGRvdXQgPSAnJ1xuICAgIGxldCBzdGRlcnIgPSAnJ1xuXG4gICAgLy8gRXhlY3V0ZSBjb21tYW5kc1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFBlcnNpc3RlbnRTaGVsbC5nZXRJbnN0YW5jZSgpLmV4ZWMoXG4gICAgICBjb21tYW5kLFxuICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIHRpbWVvdXQsXG4gICAgKVxuICAgIHN0ZG91dCArPSAocmVzdWx0LnN0ZG91dCB8fCAnJykudHJpbSgpICsgRU9MXG4gICAgc3RkZXJyICs9IChyZXN1bHQuc3RkZXJyIHx8ICcnKS50cmltKCkgKyBFT0xcbiAgICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICAgIHN0ZGVyciArPSBgRXhpdCBjb2RlICR7cmVzdWx0LmNvZGV9YFxuICAgIH1cblxuICAgIGlmICghaXNJbkRpcmVjdG9yeShnZXRDd2QoKSwgZ2V0T3JpZ2luYWxDd2QoKSkpIHtcbiAgICAgIC8vIFNoZWxsIGRpcmVjdG9yeSBpcyBvdXRzaWRlIG9yaWdpbmFsIHdvcmtpbmcgZGlyZWN0b3J5LCByZXNldCBpdFxuICAgICAgYXdhaXQgUGVyc2lzdGVudFNoZWxsLmdldEluc3RhbmNlKCkuc2V0Q3dkKGdldE9yaWdpbmFsQ3dkKCkpXG4gICAgICBzdGRlcnIgPSBgJHtzdGRlcnIudHJpbSgpfSR7RU9MfVNoZWxsIGN3ZCB3YXMgcmVzZXQgdG8gJHtnZXRPcmlnaW5hbEN3ZCgpfWBcbiAgICAgIGxvZ0V2ZW50KCdiYXNoX3Rvb2xfcmVzZXRfdG9fb3JpZ2luYWxfZGlyJywge30pXG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHJlYWQgdGltZXN0YW1wcyBmb3IgYW55IGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbW1hbmRcbiAgICAvLyBEb24ndCBibG9jayB0aGUgbWFpbiB0aHJlYWQhXG4gICAgLy8gU2tpcCB0aGlzIGluIHRlc3RzIGJlY2F1c2UgaXQgbWFrZXMgZml4dHVyZXMgbm9uLWRldGVybWluaXN0aWMgKHRoZXkgbWlnaHQgbm90IGFsd2F5cyBnZXQgd3JpdHRlbiksXG4gICAgLy8gc28gd2lsbCBiZSBtaXNzaW5nIGluIENJLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICBnZXRDb21tYW5kRmlsZVBhdGhzKGNvbW1hbmQsIHN0ZG91dCkudGhlbihmaWxlUGF0aHMgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgICAgIGNvbnN0IGZ1bGxGaWxlUGF0aCA9IGlzQWJzb2x1dGUoZmlsZVBhdGgpXG4gICAgICAgICAgICA/IGZpbGVQYXRoXG4gICAgICAgICAgICA6IHJlc29sdmUoZ2V0Q3dkKCksIGZpbGVQYXRoKVxuXG4gICAgICAgICAgLy8gVHJ5L2NhdGNoIGluIGNhc2UgdGhlIGZpbGUgZG9lc24ndCBleGlzdCAoYmVjYXVzZSBIYWlrdSBkaWRuJ3QgcHJvcGVybHkgZXh0cmFjdCBpdClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVhZEZpbGVUaW1lc3RhbXBzW2Z1bGxGaWxlUGF0aF0gPSBzdGF0U3luYyhmdWxsRmlsZVBhdGgpLm10aW1lTXNcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB7IHRvdGFsTGluZXM6IHN0ZG91dExpbmVzLCB0cnVuY2F0ZWRDb250ZW50OiBzdGRvdXRDb250ZW50IH0gPVxuICAgICAgZm9ybWF0T3V0cHV0KHN0ZG91dC50cmltKCkpXG4gICAgY29uc3QgeyB0b3RhbExpbmVzOiBzdGRlcnJMaW5lcywgdHJ1bmNhdGVkQ29udGVudDogc3RkZXJyQ29udGVudCB9ID1cbiAgICAgIGZvcm1hdE91dHB1dChzdGRlcnIudHJpbSgpKVxuXG4gICAgY29uc3QgZGF0YTogT3V0ID0ge1xuICAgICAgc3Rkb3V0OiBzdGRvdXRDb250ZW50LFxuICAgICAgc3Rkb3V0TGluZXMsXG4gICAgICBzdGRlcnI6IHN0ZGVyckNvbnRlbnQsXG4gICAgICBzdGRlcnJMaW5lcyxcbiAgICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgfVxuXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6IHRoaXMucmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50KGRhdGEpLFxuICAgICAgZGF0YSxcbiAgICB9XG4gIH0sXG59IHNhdGlzZmllcyBUb29sPEluLCBPdXQ+XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFRleHQgfSBmcm9tICdpbmsnXG5cbmV4cG9ydCBmdW5jdGlvbiBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dD5cbiAgICAgICZuYnNwOyZuYnNwO+KOvyAmbmJzcDtcbiAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLmVycm9yfT5cbiAgICAgICAgTm8gKHRlbGwgQ2xhdWRlIHdoYXQgdG8gZG8gZGlmZmVyZW50bHkpXG4gICAgICA8L1RleHQ+XG4gICAgPC9UZXh0PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBBUElfRVJST1JfTUVTU0FHRV9QUkVGSVgsIHF1ZXJ5SGFpa3UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jbGF1ZGUuanMnXG5pbXBvcnQgeyB0eXBlIENvbnRyb2xPcGVyYXRvciwgcGFyc2UsIFBhcnNlRW50cnkgfSBmcm9tICdzaGVsbC1xdW90ZSdcbmltcG9ydCB7IFBST0RVQ1RfTkFNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuXG5jb25zdCBTSU5HTEVfUVVPVEUgPSAnX19TSU5HTEVfUVVPVEVfXydcbmNvbnN0IERPVUJMRV9RVU9URSA9ICdfX0RPVUJMRV9RVU9URV9fJ1xuXG5leHBvcnQgdHlwZSBDb21tYW5kUHJlZml4UmVzdWx0ID1cbiAgfCB7XG4gICAgICBjb21tYW5kUHJlZml4OiBzdHJpbmcgfCBudWxsXG4gICAgICBjb21tYW5kSW5qZWN0aW9uRGV0ZWN0ZWQ6IGZhbHNlXG4gICAgfVxuICB8IHsgY29tbWFuZEluamVjdGlvbkRldGVjdGVkOiB0cnVlIH1cblxuLy8gQ29tbWFuZCBwcmVmaXggcmVzdWx0IGFsb25nc2lkZSBzdWJjb21tYW5kIHByZWZpeGVzXG5leHBvcnQgdHlwZSBDb21tYW5kU3ViY29tbWFuZFByZWZpeFJlc3VsdCA9IENvbW1hbmRQcmVmaXhSZXN1bHQgJiB7XG4gIHN1YmNvbW1hbmRQcmVmaXhlczogTWFwPHN0cmluZywgQ29tbWFuZFByZWZpeFJlc3VsdD5cbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBjb21tYW5kIHN0cmluZyBpbnRvIGluZGl2aWR1YWwgY29tbWFuZHMgYmFzZWQgb24gc2hlbGwgb3BlcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdENvbW1hbmQoY29tbWFuZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJ0czogUGFyc2VFbnRyeVtdID0gW11cblxuICAvLyAxLiBDb2xsYXBzZSBhZGphY2VudCBzdHJpbmdzXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJzZShcbiAgICBjb21tYW5kXG4gICAgICAucmVwbGFjZUFsbCgnXCInLCBgXCIke0RPVUJMRV9RVU9URX1gKSAvLyBwYXJzZSgpIHN0cmlwcyBvdXQgcXVvdGVzIDpQXG4gICAgICAucmVwbGFjZUFsbChcIidcIiwgYCcke1NJTkdMRV9RVU9URX1gKSwgLy8gcGFyc2UoKSBzdHJpcHMgb3V0IHF1b3RlcyA6UFxuICAgIHZhck5hbWUgPT4gYCQke3Zhck5hbWV9YCwgLy8gUHJlc2VydmUgc2hlbGwgdmFyaWFibGVzXG4gICkpIHtcbiAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCAmJiB0eXBlb2YgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdICs9ICcgJyArIHBhcnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydHMucHVzaChwYXJ0KVxuICB9XG5cbiAgLy8gMi4gTWFwIHRva2VucyB0byBzdHJpbmdzXG4gIGNvbnN0IHN0cmluZ1BhcnRzID0gcGFydHNcbiAgICAubWFwKHBhcnQgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGFydFxuICAgICAgfVxuICAgICAgaWYgKCdjb21tZW50JyBpbiBwYXJ0KSB7XG4gICAgICAgIC8vIFRPRE86IG1ha2UgdGhpcyBsZXNzIGhhY2t5XG4gICAgICAgIHJldHVybiAnIycgKyBwYXJ0LmNvbW1lbnRcbiAgICAgIH1cbiAgICAgIGlmICgnb3AnIGluIHBhcnQgJiYgcGFydC5vcCA9PT0gJ2dsb2InKSB7XG4gICAgICAgIHJldHVybiBwYXJ0LnBhdHRlcm5cbiAgICAgIH1cbiAgICAgIGlmICgnb3AnIGluIHBhcnQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnQub3BcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSlcbiAgICAuZmlsdGVyKF8gPT4gXyAhPT0gbnVsbClcblxuICAvLyAzLiBNYXAgcXVvdGVzIGJhY2sgdG8gdGhlaXIgb3JpZ2luYWwgZm9ybVxuICBjb25zdCBxdW90ZWRQYXJ0cyA9IHN0cmluZ1BhcnRzLm1hcChwYXJ0ID0+IHtcbiAgICByZXR1cm4gcGFydFxuICAgICAgLnJlcGxhY2VBbGwoYCR7U0lOR0xFX1FVT1RFfWAsIFwiJ1wiKVxuICAgICAgLnJlcGxhY2VBbGwoYCR7RE9VQkxFX1FVT1RFfWAsICdcIicpXG4gIH0pXG5cbiAgLy8gNC4gRmlsdGVyIG91dCBzZXBhcmF0b3JzXG4gIHJldHVybiBxdW90ZWRQYXJ0cy5maWx0ZXIoXG4gICAgcGFydCA9PiAhKENPTU1BTkRfTElTVF9TRVBBUkFUT1JTIGFzIFNldDxzdHJpbmc+KS5oYXMocGFydCksXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGdldENvbW1hbmRTdWJjb21tYW5kUHJlZml4ID0gbWVtb2l6ZShcbiAgYXN5bmMgKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8Q29tbWFuZFN1YmNvbW1hbmRQcmVmaXhSZXN1bHQgfCBudWxsPiA9PiB7XG4gICAgY29uc3Qgc3ViY29tbWFuZHMgPSBzcGxpdENvbW1hbmQoY29tbWFuZClcblxuICAgIGNvbnN0IFtmdWxsQ29tbWFuZFByZWZpeCwgLi4uc3ViY29tbWFuZFByZWZpeGVzUmVzdWx0c10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIFtcbiAgICAgICAgZ2V0Q29tbWFuZFByZWZpeChjb21tYW5kLCBhYm9ydFNpZ25hbCksXG4gICAgICAgIC4uLnN1YmNvbW1hbmRzLm1hcChhc3luYyBzdWJjb21tYW5kID0+ICh7XG4gICAgICAgICAgc3ViY29tbWFuZCxcbiAgICAgICAgICBwcmVmaXg6IGF3YWl0IGdldENvbW1hbmRQcmVmaXgoc3ViY29tbWFuZCwgYWJvcnRTaWduYWwpLFxuICAgICAgICB9KSksXG4gICAgICBdLFxuICAgIClcbiAgICBpZiAoIWZ1bGxDb21tYW5kUHJlZml4KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCBzdWJjb21tYW5kUHJlZml4ZXMgPSBzdWJjb21tYW5kUHJlZml4ZXNSZXN1bHRzLnJlZHVjZShcbiAgICAgIChhY2MsIHsgc3ViY29tbWFuZCwgcHJlZml4IH0pID0+IHtcbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgIGFjYy5zZXQoc3ViY29tbWFuZCwgcHJlZml4KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sXG4gICAgICBuZXcgTWFwPHN0cmluZywgQ29tbWFuZFByZWZpeFJlc3VsdD4oKSxcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZnVsbENvbW1hbmRQcmVmaXgsXG4gICAgICBzdWJjb21tYW5kUHJlZml4ZXMsXG4gICAgfVxuICB9LFxuICBjb21tYW5kID0+IGNvbW1hbmQsIC8vIG1lbW9pemUgYnkgY29tbWFuZCBvbmx5XG4pXG5cbmNvbnN0IGdldENvbW1hbmRQcmVmaXggPSBtZW1vaXplKFxuICBhc3luYyAoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxDb21tYW5kUHJlZml4UmVzdWx0IHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcXVlcnlIYWlrdSh7XG4gICAgICBzeXN0ZW1Qcm9tcHQ6IFtcbiAgICAgICAgYFlvdXIgdGFzayBpcyB0byBwcm9jZXNzIEJhc2ggY29tbWFuZHMgdGhhdCBhbiBBSSBjb2RpbmcgYWdlbnQgd2FudHMgdG8gcnVuLlxuXG5UaGlzIHBvbGljeSBzcGVjIGRlZmluZXMgaG93IHRvIGRldGVybWluZSB0aGUgcHJlZml4IG9mIGEgQmFzaCBjb21tYW5kOmAsXG4gICAgICBdLFxuICAgICAgdXNlclByb21wdDogYDxwb2xpY3lfc3BlYz5cbiMgJHtQUk9EVUNUX05BTUV9IENvZGUgQmFzaCBjb21tYW5kIHByZWZpeCBkZXRlY3Rpb25cblxuVGhpcyBkb2N1bWVudCBkZWZpbmVzIHJpc2sgbGV2ZWxzIGZvciBhY3Rpb25zIHRoYXQgdGhlICR7UFJPRFVDVF9OQU1FfSBhZ2VudCBtYXkgdGFrZS4gVGhpcyBjbGFzc2lmaWNhdGlvbiBzeXN0ZW0gaXMgcGFydCBvZiBhIGJyb2FkZXIgc2FmZXR5IGZyYW1ld29yayBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhZGRpdGlvbmFsIHVzZXIgY29uZmlybWF0aW9uIG9yIG92ZXJzaWdodCBtYXkgYmUgbmVlZGVkLlxuXG4jIyBEZWZpbml0aW9uc1xuXG4qKkNvbW1hbmQgSW5qZWN0aW9uOioqIEFueSB0ZWNobmlxdWUgdXNlZCB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIGNvbW1hbmQgYmVpbmcgcnVuIG90aGVyIHRoYW4gdGhlIGRldGVjdGVkIHByZWZpeC5cblxuIyMgQ29tbWFuZCBwcmVmaXggZXh0cmFjdGlvbiBleGFtcGxlc1xuRXhhbXBsZXM6XG4tIGNhdCBmb28udHh0ID0+IGNhdFxuLSBjZCBzcmMgPT4gY2Rcbi0gY2QgcGF0aC90by9maWxlcy8gPT4gY2Rcbi0gZmluZCAuL3NyYyAtdHlwZSBmIC1uYW1lIFwiKi50c1wiID0+IGZpbmRcbi0gZ2cgY2F0IGZvby5weSA9PiBnZyBjYXRcbi0gZ2cgY3AgZm9vLnB5IGJhci5weSA9PiBnZyBjcFxuLSBnaXQgY29tbWl0IC1tIFwiZm9vXCIgPT4gZ2l0IGNvbW1pdFxuLSBnaXQgZGlmZiBIRUFEfjEgPT4gZ2l0IGRpZmZcbi0gZ2l0IGRpZmYgLS1zdGFnZWQgPT4gZ2l0IGRpZmZcbi0gZ2l0IGRpZmYgJChwd2QpID0+IGNvbW1hbmRfaW5qZWN0aW9uX2RldGVjdGVkXG4tIGdpdCBzdGF0dXMgPT4gZ2l0IHN0YXR1c1xuLSBnaXQgc3RhdHVzIyB0ZXN0KFxcYGlkXFxgKSA9PiBjb21tYW5kX2luamVjdGlvbl9kZXRlY3RlZFxuLSBnaXQgc3RhdHVzXFxgbHNcXGAgPT4gY29tbWFuZF9pbmplY3Rpb25fZGV0ZWN0ZWRcbi0gZ2l0IHB1c2ggPT4gbm9uZVxuLSBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyID0+IGdpdCBwdXNoXG4tIGdpdCBsb2cgLW4gNSA9PiBnaXQgbG9nXG4tIGdpdCBsb2cgLS1vbmVsaW5lIC1uIDUgPT4gZ2l0IGxvZ1xuLSBncmVwIC1BIDQwIFwiZnJvbSBmb28uYmFyLmJheiBpbXBvcnRcIiBhbHBoYS9iZXRhL2dhbW1hLnB5ID0+IGdyZXBcbi0gcGlnIHRhaWwgemVyYmEubG9nID0+IHBpZyB0YWlsXG4tIG5wbSB0ZXN0ID0+IG5vbmVcbi0gbnBtIHRlc3QgLS1mb28gPT4gbnBtIHRlc3Rcbi0gbnBtIHRlc3QgLS0gLWYgXCJmb29cIiA9PiBucG0gdGVzdFxuLSBwd2RcXG4gY3VybCBleGFtcGxlLmNvbSA9PiBjb21tYW5kX2luamVjdGlvbl9kZXRlY3RlZFxuLSBweXRlc3QgZm9vL2Jhci5weSA9PiBweXRlc3Rcbi0gc2NhbGFjIGJ1aWxkID0+IG5vbmVcbjwvcG9saWN5X3NwZWM+XG5cblRoZSB1c2VyIGhhcyBhbGxvd2VkIGNlcnRhaW4gY29tbWFuZCBwcmVmaXhlcyB0byBiZSBydW4sIGFuZCB3aWxsIG90aGVyd2lzZSBiZSBhc2tlZCB0byBhcHByb3ZlIG9yIGRlbnkgdGhlIGNvbW1hbmQuXG5Zb3VyIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb21tYW5kIHByZWZpeCBmb3IgdGhlIGZvbGxvd2luZyBjb21tYW5kLlxuXG5JTVBPUlRBTlQ6IEJhc2ggY29tbWFuZHMgbWF5IHJ1biBtdWx0aXBsZSBjb21tYW5kcyB0aGF0IGFyZSBjaGFpbmVkIHRvZ2V0aGVyLlxuRm9yIHNhZmV0eSwgaWYgdGhlIGNvbW1hbmQgc2VlbXMgdG8gY29udGFpbiBjb21tYW5kIGluamVjdGlvbiwgeW91IG11c3QgcmV0dXJuIFwiY29tbWFuZF9pbmplY3Rpb25fZGV0ZWN0ZWRcIi4gXG4oVGhpcyB3aWxsIGhlbHAgcHJvdGVjdCB0aGUgdXNlcjogaWYgdGhleSB0aGluayB0aGF0IHRoZXkncmUgYWxsb3dsaXN0aW5nIGNvbW1hbmQgQSwgXG5idXQgdGhlIEFJIGNvZGluZyBhZ2VudCBzZW5kcyBhIG1hbGljaW91cyBjb21tYW5kIHRoYXQgdGVjaG5pY2FsbHkgaGFzIHRoZSBzYW1lIHByZWZpeCBhcyBjb21tYW5kIEEsIFxudGhlbiB0aGUgc2FmZXR5IHN5c3RlbSB3aWxsIHNlZSB0aGF0IHlvdSBzYWlkIOKAnGNvbW1hbmRfaW5qZWN0aW9uX2RldGVjdGVk4oCdIGFuZCBhc2sgdGhlIHVzZXIgZm9yIG1hbnVhbCBjb25maXJtYXRpb24uKVxuXG5Ob3RlIHRoYXQgbm90IGV2ZXJ5IGNvbW1hbmQgaGFzIGEgcHJlZml4LiBJZiBhIGNvbW1hbmQgaGFzIG5vIHByZWZpeCwgcmV0dXJuIFwibm9uZVwiLlxuXG5PTkxZIHJldHVybiB0aGUgcHJlZml4LiBEbyBub3QgcmV0dXJuIGFueSBvdGhlciB0ZXh0LCBtYXJrZG93biBtYXJrZXJzLCBvciBvdGhlciBjb250ZW50IG9yIGZvcm1hdHRpbmcuXG5cbkNvbW1hbmQ6ICR7Y29tbWFuZH1cbmAsXG4gICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgZW5hYmxlUHJvbXB0Q2FjaGluZzogZmFsc2UsXG4gICAgfSlcblxuICAgIGNvbnN0IHByZWZpeCA9XG4gICAgICB0eXBlb2YgcmVzcG9uc2UubWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHJlc3BvbnNlLm1lc3NhZ2UuY29udGVudFxuICAgICAgICA6IEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZS5jb250ZW50KVxuICAgICAgICAgID8gKHJlc3BvbnNlLm1lc3NhZ2UuY29udGVudC5maW5kKF8gPT4gXy50eXBlID09PSAndGV4dCcpPy50ZXh0ID8/XG4gICAgICAgICAgICAnbm9uZScpXG4gICAgICAgICAgOiAnbm9uZSdcblxuICAgIGlmIChwcmVmaXguc3RhcnRzV2l0aChBUElfRVJST1JfTUVTU0FHRV9QUkVGSVgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChwcmVmaXggPT09ICdjb21tYW5kX2luamVjdGlvbl9kZXRlY3RlZCcpIHtcbiAgICAgIHJldHVybiB7IGNvbW1hbmRJbmplY3Rpb25EZXRlY3RlZDogdHJ1ZSB9XG4gICAgfVxuXG4gICAgLy8gTmV2ZXIgYWNjZXB0IGJhc2UgYGdpdGAgYXMgYSBwcmVmaXggKGlmIGUuZy4gYGdpdCBkaWZmYCBwcmVmaXggbm90IGRldGVjdGVkKVxuICAgIGlmIChwcmVmaXggPT09ICdnaXQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kUHJlZml4OiBudWxsLFxuICAgICAgICBjb21tYW5kSW5qZWN0aW9uRGV0ZWN0ZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmVmaXggPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZFByZWZpeDogbnVsbCxcbiAgICAgICAgY29tbWFuZEluamVjdGlvbkRldGVjdGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZFByZWZpeDogcHJlZml4LFxuICAgICAgY29tbWFuZEluamVjdGlvbkRldGVjdGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sXG4gIGNvbW1hbmQgPT4gY29tbWFuZCwgLy8gbWVtb2l6ZSBieSBjb21tYW5kIG9ubHlcbilcblxuY29uc3QgQ09NTUFORF9MSVNUX1NFUEFSQVRPUlMgPSBuZXcgU2V0PENvbnRyb2xPcGVyYXRvcj4oW1xuICAnJiYnLFxuICAnfHwnLFxuICAnOycsXG4gICc7OycsXG5dKVxuXG4vLyBDaGVja3MgaWYgdGhpcyBpcyBqdXN0IGEgbGlzdCBvZiBjb21tYW5kc1xuZnVuY3Rpb24gaXNDb21tYW5kTGlzdChjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnNlKFxuICAgIGNvbW1hbmRcbiAgICAgIC5yZXBsYWNlQWxsKCdcIicsIGBcIiR7RE9VQkxFX1FVT1RFfWApIC8vIHBhcnNlKCkgc3RyaXBzIG91dCBxdW90ZXMgOlBcbiAgICAgIC5yZXBsYWNlQWxsKFwiJ1wiLCBgJyR7U0lOR0xFX1FVT1RFfWApLCAvLyBwYXJzZSgpIHN0cmlwcyBvdXQgcXVvdGVzIDpQXG4gICAgdmFyTmFtZSA9PiBgJCR7dmFyTmFtZX1gLCAvLyBQcmVzZXJ2ZSBzaGVsbCB2YXJpYWJsZXNcbiAgKSkge1xuICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFN0cmluZ3MgYXJlIHNhZmVcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICgnY29tbWVudCcgaW4gcGFydCkge1xuICAgICAgLy8gRG9uJ3QgdHJ1c3QgY29tbWVudHMsIHRoZXkgY2FuIGNvbnRhaW4gY29tbWFuZCBpbmplY3Rpb25cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAoJ29wJyBpbiBwYXJ0KSB7XG4gICAgICBpZiAocGFydC5vcCA9PT0gJ2dsb2InKSB7XG4gICAgICAgIC8vIEdsb2JzIGFyZSBzYWZlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKENPTU1BTkRfTElTVF9TRVBBUkFUT1JTLmhhcyhwYXJ0Lm9wKSkge1xuICAgICAgICAvLyBDb21tYW5kIGxpc3Qgc2VwYXJhdG9ycyBhcmUgc2FmZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgLy8gT3RoZXIgb3BlcmF0b3JzIGFyZSB1bnNhZmVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICAvLyBObyB1bnNhZmUgb3BlcmF0b3JzIGZvdW5kIGluIGVudGlyZSBjb21tYW5kXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Vuc2FmZUNvbXBvdW5kQ29tbWFuZChjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwbGl0Q29tbWFuZChjb21tYW5kKS5sZW5ndGggPiAxICYmICFpc0NvbW1hbmRMaXN0KGNvbW1hbmQpXG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IE1BWF9SRU5ERVJFRF9MSU5FUyB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG5mdW5jdGlvbiByZW5kZXJUcnVuY2F0ZWRDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgdG90YWxMaW5lczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgYWxsTGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKVxuICBpZiAoYWxsTGluZXMubGVuZ3RoIDw9IE1BWF9SRU5ERVJFRF9MSU5FUykge1xuICAgIHJldHVybiBhbGxMaW5lcy5qb2luKCdcXG4nKVxuICB9XG4gIGNvbnN0IGZpcnN0SGFsZiA9IE1hdGguZmxvb3IoTUFYX1JFTkRFUkVEX0xJTkVTIC8gMilcbiAgY29uc3Qgc2Vjb25kSGFsZiA9IE1BWF9SRU5ERVJFRF9MSU5FUyAtIGZpcnN0SGFsZlxuICByZXR1cm4gW1xuICAgIC4uLmFsbExpbmVzLnNsaWNlKDAsIGZpcnN0SGFsZiksXG4gICAgY2hhbGsuZ3JleShgLi4uICgrJHt0b3RhbExpbmVzIC0gTUFYX1JFTkRFUkVEX0xJTkVTfSBsaW5lcylgKSxcbiAgICAuLi5hbGxMaW5lcy5zbGljZSgtc2Vjb25kSGFsZiksXG4gIF0uam9pbignXFxuJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE91dHB1dExpbmUoe1xuICBjb250ZW50LFxuICBsaW5lcyxcbiAgdmVyYm9zZSxcbiAgaXNFcnJvcixcbn06IHtcbiAgY29udGVudDogc3RyaW5nXG4gIGxpbmVzOiBudW1iZXJcbiAgdmVyYm9zZTogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxufSkge1xuICByZXR1cm4gKFxuICAgIDxCb3gganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIj5cbiAgICAgICAgPFRleHQ+Jm5ic3A7Jm5ic3A74o6/ICZuYnNwOzwvVGV4dD5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgPFRleHQgY29sb3I9e2lzRXJyb3IgPyBnZXRUaGVtZSgpLmVycm9yIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgIHt2ZXJib3NlXG4gICAgICAgICAgICAgID8gY29udGVudC50cmltKClcbiAgICAgICAgICAgICAgOiByZW5kZXJUcnVuY2F0ZWRDb250ZW50KGNvbnRlbnQudHJpbSgpLCBsaW5lcyl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImV4cG9ydCBjb25zdCBUT09MX05BTUUgPSAnZGlzcGF0Y2hfYWdlbnQnXG4iLAogICAgImltcG9ydCB7IEltYWdlQmxvY2tQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBleHRuYW1lLCByZWxhdGl2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZS5qcydcbmltcG9ydCB7IEhpZ2hsaWdodGVkQ29kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvSGlnaGxpZ2h0ZWRDb2RlLmpzJ1xuaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHtcbiAgYWRkTGluZU51bWJlcnMsXG4gIGZpbmRTaW1pbGFyRmlsZSxcbiAgbm9ybWFsaXplRmlsZVBhdGgsXG4gIHJlYWRUZXh0Q29udGVudCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IERFU0NSSVBUSU9OLCBQUk9NUFQgfSBmcm9tICcuL3Byb21wdC5qcydcbmltcG9ydCB7IGhhc1JlYWRQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvZmlsZXN5c3RlbS5qcydcblxuY29uc3QgTUFYX0xJTkVTX1RPX1JFTkRFUiA9IDNcbmNvbnN0IE1BWF9PVVRQVVRfU0laRSA9IDAuMjUgKiAxMDI0ICogMTAyNCAvLyAwLjI1TUIgaW4gYnl0ZXNcblxuLy8gQ29tbW9uIGltYWdlIGV4dGVuc2lvbnNcbmNvbnN0IElNQUdFX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFtcbiAgJy5wbmcnLFxuICAnLmpwZycsXG4gICcuanBlZycsXG4gICcuZ2lmJyxcbiAgJy5ibXAnLFxuICAnLndlYnAnLFxuXSlcblxuLy8gTWF4aW11bSBkaW1lbnNpb25zIGZvciBpbWFnZXNcbmNvbnN0IE1BWF9XSURUSCA9IDIwMDBcbmNvbnN0IE1BWF9IRUlHSFQgPSAyMDAwXG5jb25zdCBNQVhfSU1BR0VfU0laRSA9IDMuNzUgKiAxMDI0ICogMTAyNCAvLyA1TUIgaW4gYnl0ZXMsIHdpdGggYmFzZTY0IGVuY29kaW5nXG5cbmNvbnN0IGlucHV0U2NoZW1hID0gei5zdHJpY3RPYmplY3Qoe1xuICBmaWxlX3BhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1RoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIHRvIHJlYWQnKSxcbiAgb2Zmc2V0OiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICAnVGhlIGxpbmUgbnVtYmVyIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4gT25seSBwcm92aWRlIGlmIHRoZSBmaWxlIGlzIHRvbyBsYXJnZSB0byByZWFkIGF0IG9uY2UnLFxuICAgICksXG4gIGxpbWl0OiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICAnVGhlIG51bWJlciBvZiBsaW5lcyB0byByZWFkLiBPbmx5IHByb3ZpZGUgaWYgdGhlIGZpbGUgaXMgdG9vIGxhcmdlIHRvIHJlYWQgYXQgb25jZS4nLFxuICAgICksXG59KVxuXG5leHBvcnQgY29uc3QgRmlsZVJlYWRUb29sID0ge1xuICBuYW1lOiAnVmlldycsXG4gIGFzeW5jIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBERVNDUklQVElPTlxuICB9LFxuICBhc3luYyBwcm9tcHQoKSB7XG4gICAgcmV0dXJuIFBST01QVFxuICB9LFxuICBpbnB1dFNjaGVtYSxcbiAgaXNSZWFkT25seSgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ1JlYWQnXG4gIH0sXG4gIGFzeW5jIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICBuZWVkc1Blcm1pc3Npb25zKHsgZmlsZV9wYXRoIH0pIHtcbiAgICByZXR1cm4gIWhhc1JlYWRQZXJtaXNzaW9uKGZpbGVfcGF0aCB8fCBnZXRDd2QoKSlcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZU1lc3NhZ2UoaW5wdXQsIHsgdmVyYm9zZSB9KSB7XG4gICAgY29uc3QgeyBmaWxlX3BhdGgsIC4uLnJlc3QgfSA9IGlucHV0XG4gICAgY29uc3QgZW50cmllcyA9IFtcbiAgICAgIFsnZmlsZV9wYXRoJywgdmVyYm9zZSA/IGZpbGVfcGF0aCA6IHJlbGF0aXZlKGdldEN3ZCgpLCBmaWxlX3BhdGgpXSxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHJlc3QpLFxuICAgIF1cbiAgICByZXR1cm4gZW50cmllc1xuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKVxuICAgICAgLmpvaW4oJywgJylcbiAgfSxcbiAgcmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2Uob3V0cHV0LCB7IHZlcmJvc2UgfSkge1xuICAgIC8vIFRPRE86IFJlbmRlciByZWN1cnNpdmVseVxuICAgIHN3aXRjaCAob3V0cHV0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Qm94IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiIG92ZXJmbG93WD1cImhpZGRlblwiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgICAgIDxUZXh0PiZuYnNwOyZuYnNwO+KOvyAmbmJzcDs8L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0PlJlYWQgaW1hZ2U8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKVxuICAgICAgY2FzZSAndGV4dCc6IHtcbiAgICAgICAgY29uc3QgeyBmaWxlUGF0aCwgY29udGVudCwgbnVtTGluZXMgfSA9IG91dHB1dC5maWxlXG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaXRoRmFsbGJhY2sgPSBjb250ZW50IHx8ICcoTm8gY29udGVudCknXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiBvdmVyZmxvd1g9XCJoaWRkZW5cIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAgICAgICAgICA8VGV4dD4mbmJzcDsmbmJzcDvijr8gJm5ic3A7PC9UZXh0PlxuICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8SGlnaGxpZ2h0ZWRDb2RlXG4gICAgICAgICAgICAgICAgICBjb2RlPXtcbiAgICAgICAgICAgICAgICAgICAgdmVyYm9zZVxuICAgICAgICAgICAgICAgICAgICAgID8gY29udGVudFdpdGhGYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgIDogY29udGVudFdpdGhGYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCBNQVhfTElORVNfVE9fUkVOREVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKF8gPT4gXy50cmltKCkgIT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtleHRuYW1lKGZpbGVQYXRoKS5zbGljZSgxKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHshdmVyYm9zZSAmJiBudW1MaW5lcyA+IE1BWF9MSU5FU19UT19SRU5ERVIgJiYgKFxuICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICAgIC4uLiAoK3tudW1MaW5lcyAtIE1BWF9MSU5FU19UT19SRU5ERVJ9IGxpbmVzKVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlbmRlclRvb2xVc2VSZWplY3RlZE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIDxGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgLz5cbiAgfSxcbiAgYXN5bmMgdmFsaWRhdGVJbnB1dCh7IGZpbGVfcGF0aCwgb2Zmc2V0LCBsaW1pdCB9KSB7XG4gICAgY29uc3QgZnVsbEZpbGVQYXRoID0gbm9ybWFsaXplRmlsZVBhdGgoZmlsZV9wYXRoKVxuXG4gICAgaWYgKCFleGlzdHNTeW5jKGZ1bGxGaWxlUGF0aCkpIHtcbiAgICAgIC8vIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmaWxlIHdpdGggYSBkaWZmZXJlbnQgZXh0ZW5zaW9uXG4gICAgICBjb25zdCBzaW1pbGFyRmlsZW5hbWUgPSBmaW5kU2ltaWxhckZpbGUoZnVsbEZpbGVQYXRoKVxuICAgICAgbGV0IG1lc3NhZ2UgPSAnRmlsZSBkb2VzIG5vdCBleGlzdC4nXG5cbiAgICAgIC8vIElmIHdlIGZvdW5kIGEgc2ltaWxhciBmaWxlLCBzdWdnZXN0IGl0IHRvIHRoZSBhc3Npc3RhbnRcbiAgICAgIGlmIChzaW1pbGFyRmlsZW5hbWUpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIERpZCB5b3UgbWVhbiAke3NpbWlsYXJGaWxlbmFtZX0/YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBmaWxlIHN0YXRzIHRvIGNoZWNrIHNpemVcbiAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKGZ1bGxGaWxlUGF0aClcbiAgICBjb25zdCBmaWxlU2l6ZSA9IHN0YXRzLnNpemVcbiAgICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZnVsbEZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyBTa2lwIHNpemUgY2hlY2sgZm9yIGltYWdlIGZpbGVzIC0gdGhleSBoYXZlIHRoZWlyIG93biBzaXplIGxpbWl0c1xuICAgIGlmICghSU1BR0VfRVhURU5TSU9OUy5oYXMoZXh0KSkge1xuICAgICAgLy8gSWYgZmlsZSBpcyB0b28gbGFyZ2UgYW5kIG5vIG9mZnNldC9saW1pdCBwcm92aWRlZFxuICAgICAgaWYgKGZpbGVTaXplID4gTUFYX09VVFBVVF9TSVpFICYmICFvZmZzZXQgJiYgIWxpbWl0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBmb3JtYXRGaWxlU2l6ZUVycm9yKGZpbGVTaXplKSxcbiAgICAgICAgICBtZXRhOiB7IGZpbGVTaXplIH0sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9LFxuICBhc3luYyAqY2FsbChcbiAgICB7IGZpbGVfcGF0aCwgb2Zmc2V0ID0gMSwgbGltaXQgPSB1bmRlZmluZWQgfSxcbiAgICB7IHJlYWRGaWxlVGltZXN0YW1wcyB9LFxuICApIHtcbiAgICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZV9wYXRoKS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgZnVsbEZpbGVQYXRoID0gbm9ybWFsaXplRmlsZVBhdGgoZmlsZV9wYXRoKVxuXG4gICAgLy8gVXBkYXRlIHJlYWQgdGltZXN0YW1wLCB0byBpbnZhbGlkYXRlIHN0YWxlIHdyaXRlc1xuICAgIHJlYWRGaWxlVGltZXN0YW1wc1tmdWxsRmlsZVBhdGhdID0gRGF0ZS5ub3coKVxuXG4gICAgLy8gSWYgaXQncyBhbiBpbWFnZSBmaWxlLCBwcm9jZXNzIGFuZCByZXR1cm4gYmFzZTY0IGVuY29kZWQgY29udGVudHNcbiAgICBpZiAoSU1BR0VfRVhURU5TSU9OUy5oYXMoZXh0KSkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRJbWFnZShmdWxsRmlsZVBhdGgsIGV4dClcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgb2Zmc2V0IHByb3Blcmx5IC0gaWYgb2Zmc2V0IGlzIDAsIGRvbid0IHN1YnRyYWN0IDFcbiAgICBjb25zdCBsaW5lT2Zmc2V0ID0gb2Zmc2V0ID09PSAwID8gMCA6IG9mZnNldCAtIDFcbiAgICBjb25zdCB7IGNvbnRlbnQsIGxpbmVDb3VudCwgdG90YWxMaW5lcyB9ID0gcmVhZFRleHRDb250ZW50KFxuICAgICAgZnVsbEZpbGVQYXRoLFxuICAgICAgbGluZU9mZnNldCxcbiAgICAgIGxpbWl0LFxuICAgIClcblxuICAgIC8vIEFkZCBzaXplIHZhbGlkYXRpb24gYWZ0ZXIgcmVhZGluZyBmb3Igbm9uLWltYWdlIGZpbGVzXG4gICAgaWYgKCFJTUFHRV9FWFRFTlNJT05TLmhhcyhleHQpICYmIGNvbnRlbnQubGVuZ3RoID4gTUFYX09VVFBVVF9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RmlsZVNpemVFcnJvcihjb250ZW50Lmxlbmd0aCkpXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHR5cGU6ICd0ZXh0JyBhcyBjb25zdCxcbiAgICAgIGZpbGU6IHtcbiAgICAgICAgZmlsZVBhdGg6IGZpbGVfcGF0aCxcbiAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgbnVtTGluZXM6IGxpbmVDb3VudCxcbiAgICAgICAgc3RhcnRMaW5lOiBvZmZzZXQsXG4gICAgICAgIHRvdGFsTGluZXMsXG4gICAgICB9LFxuICAgIH1cblxuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgfVxuICB9LFxuICByZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSkge1xuICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgICAgICAgICAgZGF0YTogZGF0YS5maWxlLmJhc2U2NCxcbiAgICAgICAgICAgICAgbWVkaWFfdHlwZTogZGF0YS5maWxlLnR5cGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICByZXR1cm4gYWRkTGluZU51bWJlcnMoZGF0YS5maWxlKVxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIFRvb2w8XG4gIHR5cGVvZiBpbnB1dFNjaGVtYSxcbiAgfCB7XG4gICAgICB0eXBlOiAndGV4dCdcbiAgICAgIGZpbGU6IHtcbiAgICAgICAgZmlsZVBhdGg6IHN0cmluZ1xuICAgICAgICBjb250ZW50OiBzdHJpbmdcbiAgICAgICAgbnVtTGluZXM6IG51bWJlclxuICAgICAgICBzdGFydExpbmU6IG51bWJlclxuICAgICAgICB0b3RhbExpbmVzOiBudW1iZXJcbiAgICAgIH1cbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgZmlsZTogeyBiYXNlNjQ6IHN0cmluZzsgdHlwZTogSW1hZ2VCbG9ja1BhcmFtLlNvdXJjZVsnbWVkaWFfdHlwZSddIH1cbiAgICB9XG4+XG5cbmNvbnN0IGZvcm1hdEZpbGVTaXplRXJyb3IgPSAoc2l6ZUluQnl0ZXM6IG51bWJlcikgPT5cbiAgYEZpbGUgY29udGVudCAoJHtNYXRoLnJvdW5kKHNpemVJbkJ5dGVzIC8gMTAyNCl9S0IpIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUgKCR7TWF0aC5yb3VuZChNQVhfT1VUUFVUX1NJWkUgLyAxMDI0KX1LQikuIFBsZWFzZSB1c2Ugb2Zmc2V0IGFuZCBsaW1pdCBwYXJhbWV0ZXJzIHRvIHJlYWQgc3BlY2lmaWMgcG9ydGlvbnMgb2YgdGhlIGZpbGUsIG9yIHVzZSB0aGUgR3JlcFRvb2wgdG8gc2VhcmNoIGZvciBzcGVjaWZpYyBjb250ZW50LmBcblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VSZXNwb25zZShcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGV4dDogc3RyaW5nLFxuKToge1xuICB0eXBlOiAnaW1hZ2UnXG4gIGZpbGU6IHsgYmFzZTY0OiBzdHJpbmc7IHR5cGU6IEltYWdlQmxvY2tQYXJhbS5Tb3VyY2VbJ21lZGlhX3R5cGUnXSB9XG59IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnaW1hZ2UnLFxuICAgIGZpbGU6IHtcbiAgICAgIGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHR5cGU6IGBpbWFnZS8ke2V4dC5zbGljZSgxKX1gIGFzIEltYWdlQmxvY2tQYXJhbS5Tb3VyY2VbJ21lZGlhX3R5cGUnXSxcbiAgICB9LFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRJbWFnZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgZXh0OiBzdHJpbmcsXG4pOiBQcm9taXNlPHtcbiAgdHlwZTogJ2ltYWdlJ1xuICBmaWxlOiB7IGJhc2U2NDogc3RyaW5nOyB0eXBlOiBJbWFnZUJsb2NrUGFyYW0uU291cmNlWydtZWRpYV90eXBlJ10gfVxufT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMoZmlsZVBhdGgpXG4gICAgY29uc3Qgc2hhcnAgPSAoXG4gICAgICAoYXdhaXQgaW1wb3J0KCdzaGFycCcpKSBhcyB1bmtub3duIGFzIHsgZGVmYXVsdDogdHlwZW9mIGltcG9ydCgnc2hhcnAnKSB9XG4gICAgKS5kZWZhdWx0XG4gICAgY29uc3QgaW1hZ2UgPSBzaGFycChyZWFkRmlsZVN5bmMoZmlsZVBhdGgpKVxuICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxuXG4gICAgaWYgKCFtZXRhZGF0YS53aWR0aCB8fCAhbWV0YWRhdGEuaGVpZ2h0KSB7XG4gICAgICBpZiAoc3RhdHMuc2l6ZSA+IE1BWF9JTUFHRV9TSVpFKSB7XG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWRCdWZmZXIgPSBhd2FpdCBpbWFnZS5qcGVnKHsgcXVhbGl0eTogODAgfSkudG9CdWZmZXIoKVxuICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VSZXNwb25zZShjb21wcmVzc2VkQnVmZmVyLCAnanBlZycpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIGRpbWVuc2lvbnMgd2hpbGUgbWFpbnRhaW5pbmcgYXNwZWN0IHJhdGlvXG4gICAgbGV0IHdpZHRoID0gbWV0YWRhdGEud2lkdGggfHwgMFxuICAgIGxldCBoZWlnaHQgPSBtZXRhZGF0YS5oZWlnaHQgfHwgMFxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGZpbGUganVzdCB3b3Jrc1xuICAgIGlmIChcbiAgICAgIHN0YXRzLnNpemUgPD0gTUFYX0lNQUdFX1NJWkUgJiZcbiAgICAgIHdpZHRoIDw9IE1BWF9XSURUSCAmJlxuICAgICAgaGVpZ2h0IDw9IE1BWF9IRUlHSFRcbiAgICApIHtcbiAgICAgIHJldHVybiBjcmVhdGVJbWFnZVJlc3BvbnNlKHJlYWRGaWxlU3luYyhmaWxlUGF0aCksIGV4dClcbiAgICB9XG5cbiAgICBpZiAod2lkdGggPiBNQVhfV0lEVEgpIHtcbiAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoKGhlaWdodCAqIE1BWF9XSURUSCkgLyB3aWR0aClcbiAgICAgIHdpZHRoID0gTUFYX1dJRFRIXG4gICAgfVxuXG4gICAgaWYgKGhlaWdodCA+IE1BWF9IRUlHSFQpIHtcbiAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCgod2lkdGggKiBNQVhfSEVJR0hUKSAvIGhlaWdodClcbiAgICAgIGhlaWdodCA9IE1BWF9IRUlHSFRcbiAgICB9XG5cbiAgICAvLyBSZXNpemUgaW1hZ2UgYW5kIGNvbnZlcnQgdG8gYnVmZmVyXG4gICAgY29uc3QgcmVzaXplZEltYWdlQnVmZmVyID0gYXdhaXQgaW1hZ2VcbiAgICAgIC5yZXNpemUod2lkdGgsIGhlaWdodCwge1xuICAgICAgICBmaXQ6ICdpbnNpZGUnLFxuICAgICAgICB3aXRob3V0RW5sYXJnZW1lbnQ6IHRydWUsXG4gICAgICB9KVxuICAgICAgLnRvQnVmZmVyKClcblxuICAgIC8vIElmIHN0aWxsIHRvbyBsYXJnZSBhZnRlciByZXNpemUsIGNvbXByZXNzIHF1YWxpdHlcbiAgICBpZiAocmVzaXplZEltYWdlQnVmZmVyLmxlbmd0aCA+IE1BWF9JTUFHRV9TSVpFKSB7XG4gICAgICBjb25zdCBjb21wcmVzc2VkQnVmZmVyID0gYXdhaXQgaW1hZ2UuanBlZyh7IHF1YWxpdHk6IDgwIH0pLnRvQnVmZmVyKClcbiAgICAgIHJldHVybiBjcmVhdGVJbWFnZVJlc3BvbnNlKGNvbXByZXNzZWRCdWZmZXIsICdqcGVnJylcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlSW1hZ2VSZXNwb25zZShyZXNpemVkSW1hZ2VCdWZmZXIsIGV4dClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpXG4gICAgLy8gSWYgYW55IGVycm9yIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZywgcmV0dXJuIG9yaWdpbmFsIGltYWdlXG4gICAgcmV0dXJuIGNyZWF0ZUltYWdlUmVzcG9uc2UocmVhZEZpbGVTeW5jKGZpbGVQYXRoKSwgZXh0KVxuICB9XG59XG4iLAogICAgImltcG9ydCB7IGhpZ2hsaWdodCwgc3VwcG9ydHNMYW5ndWFnZSB9IGZyb20gJ2NsaS1oaWdobGlnaHQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBjb2RlOiBzdHJpbmdcbiAgbGFuZ3VhZ2U6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSGlnaGxpZ2h0ZWRDb2RlKHsgY29kZSwgbGFuZ3VhZ2UgfTogUHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBoaWdobGlnaHRlZENvZGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1cHBvcnRzTGFuZ3VhZ2UobGFuZ3VhZ2UpKSB7XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQoY29kZSwgeyBsYW5ndWFnZSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgYExhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgd2hpbGUgaGlnaGxpZ2h0aW5nIGNvZGUsIGZhbGxpbmcgYmFjayB0byBtYXJrZG93bjogJHtsYW5ndWFnZX1gLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiBoaWdobGlnaHQoY29kZSwgeyBsYW5ndWFnZTogJ21hcmtkb3duJyB9KVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdVbmtub3duIGxhbmd1YWdlJykpIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgYExhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgd2hpbGUgaGlnaGxpZ2h0aW5nIGNvZGUsIGZhbGxpbmcgYmFjayB0byBtYXJrZG93bjogJHtlfWAsXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodChjb2RlLCB7IGxhbmd1YWdlOiAnbWFya2Rvd24nIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbY29kZSwgbGFuZ3VhZ2VdKVxuXG4gIHJldHVybiA8VGV4dD57aGlnaGxpZ2h0ZWRDb2RlfTwvVGV4dD5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBJbWFnZUJsb2NrUGFyYW0sXG4gIFRleHRCbG9ja1BhcmFtLFxufSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcydcbmltcG9ydCB7IFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBleHRuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZS5qcydcbmltcG9ydCB7IFRvb2wgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHtcbiAgTm90ZWJvb2tDZWxsU291cmNlLFxuICBOb3RlYm9va0NvbnRlbnQsXG4gIE5vdGVib29rQ2VsbCxcbiAgTm90ZWJvb2tPdXRwdXRJbWFnZSxcbiAgTm90ZWJvb2tDZWxsU291cmNlT3V0cHV0LFxuICBOb3RlYm9va0NlbGxPdXRwdXQsXG4gIE5vdGVib29rQ2VsbFR5cGUsXG59IGZyb20gJy4uLy4uL3R5cGVzL25vdGVib29rLmpzJ1xuaW1wb3J0IHsgZm9ybWF0T3V0cHV0IH0gZnJvbSAnLi4vQmFzaFRvb2wvdXRpbHMuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi8uLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCB7IGZpbmRTaW1pbGFyRmlsZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnXG5pbXBvcnQgeyBERVNDUklQVElPTiwgUFJPTVBUIH0gZnJvbSAnLi9wcm9tcHQuanMnXG5pbXBvcnQgeyBoYXNSZWFkUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25zL2ZpbGVzeXN0ZW0uanMnXG5cbmNvbnN0IGlucHV0U2NoZW1hID0gei5zdHJpY3RPYmplY3Qoe1xuICBub3RlYm9va19wYXRoOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ1RoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBKdXB5dGVyIG5vdGVib29rIGZpbGUgdG8gcmVhZCAobXVzdCBiZSBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlKScsXG4gICAgKSxcbn0pXG5cbnR5cGUgSW4gPSB0eXBlb2YgaW5wdXRTY2hlbWFcbnR5cGUgT3V0ID0gTm90ZWJvb2tDZWxsU291cmNlW11cblxuZnVuY3Rpb24gcmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50KGRhdGE6IE5vdGVib29rQ2VsbFNvdXJjZVtdKSB7XG4gIGNvbnN0IGFsbFJlc3VsdHMgPSBkYXRhLmZsYXRNYXAoZ2V0VG9vbFJlc3VsdEZyb21DZWxsKVxuXG4gIC8vIE1lcmdlIGFkamFjZW50IHRleHQgYmxvY2tzXG4gIHJldHVybiBhbGxSZXN1bHRzLnJlZHVjZTwoVGV4dEJsb2NrUGFyYW0gfCBJbWFnZUJsb2NrUGFyYW0pW10+KFxuICAgIChhY2MsIGN1cnIpID0+IHtcbiAgICAgIGlmIChhY2MubGVuZ3RoID09PSAwKSByZXR1cm4gW2N1cnJdXG5cbiAgICAgIGNvbnN0IHByZXYgPSBhY2NbYWNjLmxlbmd0aCAtIDFdXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICd0ZXh0JyAmJiBjdXJyLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAvLyBNZXJnZSB0aGUgdGV4dCBibG9ja3NcbiAgICAgICAgcHJldi50ZXh0ICs9ICdcXG4nICsgY3Vyci50ZXh0XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFsuLi5hY2MsIGN1cnJdXG4gICAgfSxcbiAgICBbXSxcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgTm90ZWJvb2tSZWFkVG9vbCA9IHtcbiAgbmFtZTogJ1JlYWROb3RlYm9vaycsXG4gIGFzeW5jIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBERVNDUklQVElPTlxuICB9LFxuICBhc3luYyBwcm9tcHQoKSB7XG4gICAgcmV0dXJuIFBST01QVFxuICB9LFxuICBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIGlucHV0U2NoZW1hLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ1JlYWQgTm90ZWJvb2snXG4gIH0sXG4gIGFzeW5jIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICBuZWVkc1Blcm1pc3Npb25zKHsgbm90ZWJvb2tfcGF0aCB9KSB7XG4gICAgcmV0dXJuICFoYXNSZWFkUGVybWlzc2lvbihub3RlYm9va19wYXRoKVxuICB9LFxuICBhc3luYyB2YWxpZGF0ZUlucHV0KHsgbm90ZWJvb2tfcGF0aCB9KSB7XG4gICAgY29uc3QgZnVsbEZpbGVQYXRoID0gaXNBYnNvbHV0ZShub3RlYm9va19wYXRoKVxuICAgICAgPyBub3RlYm9va19wYXRoXG4gICAgICA6IHJlc29sdmUoZ2V0Q3dkKCksIG5vdGVib29rX3BhdGgpXG5cbiAgICBpZiAoIWV4aXN0c1N5bmMoZnVsbEZpbGVQYXRoKSkge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZpbGUgd2l0aCBhIGRpZmZlcmVudCBleHRlbnNpb25cbiAgICAgIGNvbnN0IHNpbWlsYXJGaWxlbmFtZSA9IGZpbmRTaW1pbGFyRmlsZShmdWxsRmlsZVBhdGgpXG4gICAgICBsZXQgbWVzc2FnZSA9ICdGaWxlIGRvZXMgbm90IGV4aXN0LidcblxuICAgICAgLy8gSWYgd2UgZm91bmQgYSBzaW1pbGFyIGZpbGUsIHN1Z2dlc3QgaXQgdG8gdGhlIGFzc2lzdGFudFxuICAgICAgaWYgKHNpbWlsYXJGaWxlbmFtZSkge1xuICAgICAgICBtZXNzYWdlICs9IGAgRGlkIHlvdSBtZWFuICR7c2ltaWxhckZpbGVuYW1lfT9gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dG5hbWUoZnVsbEZpbGVQYXRoKSAhPT0gJy5pcHluYicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6ICdGaWxlIG11c3QgYmUgYSBKdXB5dGVyIG5vdGVib29rICguaXB5bmIgZmlsZSkuJyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9LFxuICByZW5kZXJUb29sVXNlTWVzc2FnZShpbnB1dCwgeyB2ZXJib3NlIH0pIHtcbiAgICByZXR1cm4gYG5vdGVib29rX3BhdGg6ICR7dmVyYm9zZSA/IGlucHV0Lm5vdGVib29rX3BhdGggOiByZWxhdGl2ZShnZXRDd2QoKSwgaW5wdXQubm90ZWJvb2tfcGF0aCl9YFxuICB9LFxuICByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKCkge1xuICAgIHJldHVybiA8RmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlIC8+XG4gIH0sXG5cbiAgcmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2UoY29udGVudCkge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgcmV0dXJuIDxUZXh0Pk5vIGNlbGxzIGZvdW5kIGluIG5vdGVib29rPC9UZXh0PlxuICAgIH1cbiAgICBpZiAoY29udGVudC5sZW5ndGggPCAxIHx8ICFjb250ZW50WzBdKSB7XG4gICAgICByZXR1cm4gPFRleHQ+Tm8gY2VsbHMgZm91bmQgaW4gbm90ZWJvb2s8L1RleHQ+XG4gICAgfVxuICAgIHJldHVybiA8VGV4dD5SZWFkIHtjb250ZW50Lmxlbmd0aH0gY2VsbHM8L1RleHQ+XG4gIH0sXG4gIGFzeW5jICpjYWxsKHsgbm90ZWJvb2tfcGF0aCB9KSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBpc0Fic29sdXRlKG5vdGVib29rX3BhdGgpXG4gICAgICA/IG5vdGVib29rX3BhdGhcbiAgICAgIDogcmVzb2x2ZShnZXRDd2QoKSwgbm90ZWJvb2tfcGF0aClcblxuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZnVsbFBhdGgsICd1dGYtOCcpXG4gICAgY29uc3Qgbm90ZWJvb2sgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIE5vdGVib29rQ29udGVudFxuICAgIGNvbnN0IGxhbmd1YWdlID0gbm90ZWJvb2subWV0YWRhdGEubGFuZ3VhZ2VfaW5mbz8ubmFtZSA/PyAncHl0aG9uJ1xuICAgIGNvbnN0IGNlbGxzID0gbm90ZWJvb2suY2VsbHMubWFwKChjZWxsLCBpbmRleCkgPT5cbiAgICAgIHByb2Nlc3NDZWxsKGNlbGwsIGluZGV4LCBsYW5ndWFnZSksXG4gICAgKVxuXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6IHJlbmRlclJlc3VsdEZvckFzc2lzdGFudChjZWxscyksXG4gICAgICBkYXRhOiBjZWxscyxcbiAgICB9XG4gIH0sXG4gIHJlbmRlclJlc3VsdEZvckFzc2lzdGFudCxcbn0gc2F0aXNmaWVzIFRvb2w8SW4sIE91dD5cblxuZnVuY3Rpb24gcHJvY2Vzc091dHB1dFRleHQodGV4dDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoIXRleHQpIHJldHVybiAnJ1xuICBjb25zdCByYXdUZXh0ID0gQXJyYXkuaXNBcnJheSh0ZXh0KSA/IHRleHQuam9pbignJykgOiB0ZXh0XG4gIGNvbnN0IHsgdHJ1bmNhdGVkQ29udGVudCB9ID0gZm9ybWF0T3V0cHV0KHJhd1RleHQpXG4gIHJldHVybiB0cnVuY2F0ZWRDb250ZW50XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJbWFnZShcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBOb3RlYm9va091dHB1dEltYWdlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBkYXRhWydpbWFnZS9wbmcnXSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VfZGF0YTogZGF0YVsnaW1hZ2UvcG5nJ10gYXMgc3RyaW5nLFxuICAgICAgbWVkaWFfdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgZGF0YVsnaW1hZ2UvanBlZyddID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBpbWFnZV9kYXRhOiBkYXRhWydpbWFnZS9qcGVnJ10gYXMgc3RyaW5nLFxuICAgICAgbWVkaWFfdHlwZTogJ2ltYWdlL2pwZWcnLFxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NPdXRwdXQob3V0cHV0OiBOb3RlYm9va0NlbGxPdXRwdXQpIHtcbiAgc3dpdGNoIChvdXRwdXQub3V0cHV0X3R5cGUpIHtcbiAgICBjYXNlICdzdHJlYW0nOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0X3R5cGU6IG91dHB1dC5vdXRwdXRfdHlwZSxcbiAgICAgICAgdGV4dDogcHJvY2Vzc091dHB1dFRleHQob3V0cHV0LnRleHQpLFxuICAgICAgfVxuICAgIGNhc2UgJ2V4ZWN1dGVfcmVzdWx0JzpcbiAgICBjYXNlICdkaXNwbGF5X2RhdGEnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0X3R5cGU6IG91dHB1dC5vdXRwdXRfdHlwZSxcbiAgICAgICAgdGV4dDogcHJvY2Vzc091dHB1dFRleHQob3V0cHV0LmRhdGE/LlsndGV4dC9wbGFpbiddKSxcbiAgICAgICAgaW1hZ2U6IG91dHB1dC5kYXRhICYmIGV4dHJhY3RJbWFnZShvdXRwdXQuZGF0YSksXG4gICAgICB9XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0X3R5cGU6IG91dHB1dC5vdXRwdXRfdHlwZSxcbiAgICAgICAgdGV4dDogcHJvY2Vzc091dHB1dFRleHQoXG4gICAgICAgICAgYCR7b3V0cHV0LmVuYW1lfTogJHtvdXRwdXQuZXZhbHVlfVxcbiR7b3V0cHV0LnRyYWNlYmFjay5qb2luKCdcXG4nKX1gLFxuICAgICAgICApLFxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDZWxsKFxuICBjZWxsOiBOb3RlYm9va0NlbGwsXG4gIGluZGV4OiBudW1iZXIsXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4pOiBOb3RlYm9va0NlbGxTb3VyY2Uge1xuICBjb25zdCBjZWxsRGF0YTogTm90ZWJvb2tDZWxsU291cmNlID0ge1xuICAgIGNlbGw6IGluZGV4LFxuICAgIGNlbGxUeXBlOiBjZWxsLmNlbGxfdHlwZSxcbiAgICBzb3VyY2U6IEFycmF5LmlzQXJyYXkoY2VsbC5zb3VyY2UpID8gY2VsbC5zb3VyY2Uuam9pbignJykgOiBjZWxsLnNvdXJjZSxcbiAgICBsYW5ndWFnZSxcbiAgICBleGVjdXRpb25fY291bnQ6IGNlbGwuZXhlY3V0aW9uX2NvdW50LFxuICB9XG5cbiAgaWYgKGNlbGwub3V0cHV0cz8ubGVuZ3RoKSB7XG4gICAgY2VsbERhdGEub3V0cHV0cyA9IGNlbGwub3V0cHV0cy5tYXAocHJvY2Vzc091dHB1dClcbiAgfVxuXG4gIHJldHVybiBjZWxsRGF0YVxufVxuXG5mdW5jdGlvbiBjZWxsQ29udGVudFRvVG9vbFJlc3VsdChjZWxsOiBOb3RlYm9va0NlbGxTb3VyY2UpOiBUZXh0QmxvY2tQYXJhbSB7XG4gIGNvbnN0IG1ldGFkYXRhID0gW11cbiAgaWYgKGNlbGwuY2VsbFR5cGUgIT09ICdjb2RlJykge1xuICAgIG1ldGFkYXRhLnB1c2goYDxjZWxsX3R5cGU+JHtjZWxsLmNlbGxUeXBlfTwvY2VsbF90eXBlPmApXG4gIH1cbiAgaWYgKGNlbGwubGFuZ3VhZ2UgIT09ICdweXRob24nICYmIGNlbGwuY2VsbFR5cGUgPT09ICdjb2RlJykge1xuICAgIG1ldGFkYXRhLnB1c2goYDxsYW5ndWFnZT4ke2NlbGwubGFuZ3VhZ2V9PC9sYW5ndWFnZT5gKVxuICB9XG4gIGNvbnN0IGNlbGxDb250ZW50ID0gYDxjZWxsICR7Y2VsbC5jZWxsfT4ke21ldGFkYXRhLmpvaW4oJycpfSR7Y2VsbC5zb3VyY2V9PC9jZWxsICR7Y2VsbC5jZWxsfT5gXG4gIHJldHVybiB7XG4gICAgdGV4dDogY2VsbENvbnRlbnQsXG4gICAgdHlwZTogJ3RleHQnLFxuICB9XG59XG5cbmZ1bmN0aW9uIGNlbGxPdXRwdXRUb1Rvb2xSZXN1bHQob3V0cHV0OiBOb3RlYm9va0NlbGxTb3VyY2VPdXRwdXQpIHtcbiAgY29uc3Qgb3V0cHV0czogKFRleHRCbG9ja1BhcmFtIHwgSW1hZ2VCbG9ja1BhcmFtKVtdID0gW11cbiAgaWYgKG91dHB1dC50ZXh0KSB7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIHRleHQ6IGBcXG4ke291dHB1dC50ZXh0fWAsXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgfSlcbiAgfVxuICBpZiAob3V0cHV0LmltYWdlKSB7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICBzb3VyY2U6IHtcbiAgICAgICAgZGF0YTogb3V0cHV0LmltYWdlLmltYWdlX2RhdGEsXG4gICAgICAgIG1lZGlhX3R5cGU6IG91dHB1dC5pbWFnZS5tZWRpYV90eXBlLFxuICAgICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuICByZXR1cm4gb3V0cHV0c1xufVxuXG5mdW5jdGlvbiBnZXRUb29sUmVzdWx0RnJvbUNlbGwoY2VsbDogTm90ZWJvb2tDZWxsU291cmNlKSB7XG4gIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSBjZWxsQ29udGVudFRvVG9vbFJlc3VsdChjZWxsKVxuICBjb25zdCBvdXRwdXRSZXN1bHRzID0gY2VsbC5vdXRwdXRzPy5mbGF0TWFwKGNlbGxPdXRwdXRUb1Rvb2xSZXN1bHQpXG4gIHJldHVybiBbY29udGVudFJlc3VsdCwgLi4uKG91dHB1dFJlc3VsdHMgPz8gW10pXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RlYm9va0NlbGxUeXBlKFxuICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbik6IHZhbHVlIGlzIE5vdGVib29rQ2VsbFR5cGUge1xuICByZXR1cm4gdmFsdWUgPT09ICdjb2RlJyB8fCB2YWx1ZSA9PT0gJ21hcmtkb3duJ1xufVxuIiwKICAgICJpbXBvcnQgeyBxdWVyeUhhaWt1IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2xhdWRlLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdFRhZyB9IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgTUFYX09VVFBVVF9MRU5HVEggfSBmcm9tICcuL3Byb21wdC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE91dHB1dChjb250ZW50OiBzdHJpbmcpOiB7XG4gIHRvdGFsTGluZXM6IG51bWJlclxuICB0cnVuY2F0ZWRDb250ZW50OiBzdHJpbmdcbn0ge1xuICBpZiAoY29udGVudC5sZW5ndGggPD0gTUFYX09VVFBVVF9MRU5HVEgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxMaW5lczogY29udGVudC5zcGxpdCgnXFxuJykubGVuZ3RoLFxuICAgICAgdHJ1bmNhdGVkQ29udGVudDogY29udGVudCxcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFsZkxlbmd0aCA9IE1BWF9PVVRQVVRfTEVOR1RIIC8gMlxuICBjb25zdCBzdGFydCA9IGNvbnRlbnQuc2xpY2UoMCwgaGFsZkxlbmd0aClcbiAgY29uc3QgZW5kID0gY29udGVudC5zbGljZSgtaGFsZkxlbmd0aClcbiAgY29uc3QgdHJ1bmNhdGVkID0gYCR7c3RhcnR9XFxuXFxuLi4uIFske2NvbnRlbnQuc2xpY2UoaGFsZkxlbmd0aCwgLWhhbGZMZW5ndGgpLnNwbGl0KCdcXG4nKS5sZW5ndGh9IGxpbmVzIHRydW5jYXRlZF0gLi4uXFxuXFxuJHtlbmR9YFxuXG4gIHJldHVybiB7XG4gICAgdG90YWxMaW5lczogY29udGVudC5zcGxpdCgnXFxuJykubGVuZ3RoLFxuICAgIHRydW5jYXRlZENvbnRlbnQ6IHRydW5jYXRlZCxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbWFuZEZpbGVQYXRocyhcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvdXRwdXQ6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUhhaWt1KHtcbiAgICBzeXN0ZW1Qcm9tcHQ6IFtcbiAgICAgIGBFeHRyYWN0IGFueSBmaWxlIHBhdGhzIHRoYXQgdGhpcyBjb21tYW5kIHJlYWRzIG9yIG1vZGlmaWVzLiBGb3IgY29tbWFuZHMgbGlrZSBcImdpdCBkaWZmXCIgYW5kIFwiY2F0XCIsIGluY2x1ZGUgdGhlIHBhdGhzIG9mIGZpbGVzIGJlaW5nIHNob3duLiBVc2UgcGF0aHMgdmVyYmF0aW0gLS0gZG9uJ3QgYWRkIGFueSBzbGFzaGVzIG9yIHRyeSB0byByZXNvbHZlIHRoZW0uIERvIG5vdCB0cnkgdG8gaW5mZXIgcGF0aHMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5IGxpc3RlZCBpbiB0aGUgY29tbWFuZCBvdXRwdXQuXG5Gb3JtYXQgeW91ciByZXNwb25zZSBhczpcbjxmaWxlcGF0aHM+XG5wYXRoL3RvL2ZpbGUxXG5wYXRoL3RvL2ZpbGUyXG48L2ZpbGVwYXRocz5cblxuSWYgbm8gZmlsZXMgYXJlIHJlYWQgb3IgbW9kaWZpZWQsIHJldHVybiBlbXB0eSBmaWxlcGF0aHMgdGFnczpcbjxmaWxlcGF0aHM+XG48L2ZpbGVwYXRocz5cblxuRG8gbm90IGluY2x1ZGUgYW55IG90aGVyIHRleHQgaW4geW91ciByZXNwb25zZS5gLFxuICAgIF0sXG4gICAgdXNlclByb21wdDogYENvbW1hbmQ6ICR7Y29tbWFuZH1cXG5PdXRwdXQ6ICR7b3V0cHV0fWAsXG4gICAgZW5hYmxlUHJvbXB0Q2FjaGluZzogdHJ1ZSxcbiAgfSlcbiAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLm1lc3NhZ2UuY29udGVudFxuICAgIC5maWx0ZXIoXyA9PiBfLnR5cGUgPT09ICd0ZXh0JylcbiAgICAubWFwKF8gPT4gXy50ZXh0KVxuICAgIC5qb2luKCcnKVxuXG4gIHJldHVybiAoXG4gICAgZXh0cmFjdFRhZyhjb250ZW50LCAnZmlsZXBhdGhzJyk/LnRyaW0oKS5zcGxpdCgnXFxuJykuZmlsdGVyKEJvb2xlYW4pIHx8IFtdXG4gIClcbn1cbiIsCiAgICAiZXhwb3J0IGNvbnN0IERFU0NSSVBUSU9OID1cbiAgJ0V4dHJhY3QgYW5kIHJlYWQgc291cmNlIGNvZGUgZnJvbSBhbGwgY29kZSBjZWxscyBpbiBhIEp1cHl0ZXIgbm90ZWJvb2suJ1xuZXhwb3J0IGNvbnN0IFBST01QVCA9IGBSZWFkcyBhIEp1cHl0ZXIgbm90ZWJvb2sgKC5pcHluYiBmaWxlKSBhbmQgcmV0dXJucyBhbGwgb2YgdGhlIGNlbGxzIHdpdGggdGhlaXIgb3V0cHV0cy4gSnVweXRlciBub3RlYm9va3MgYXJlIGludGVyYWN0aXZlIGRvY3VtZW50cyB0aGF0IGNvbWJpbmUgY29kZSwgdGV4dCwgYW5kIHZpc3VhbGl6YXRpb25zLCBjb21tb25seSB1c2VkIGZvciBkYXRhIGFuYWx5c2lzIGFuZCBzY2llbnRpZmljIGNvbXB1dGluZy4gVGhlIG5vdGVib29rX3BhdGggcGFyYW1ldGVyIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbm90IGEgcmVsYXRpdmUgcGF0aC5gXG4iLAogICAgImltcG9ydCB7IGlzQWJzb2x1dGUsIHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgZ2V0Q3dkLCBnZXRPcmlnaW5hbEN3ZCB9IGZyb20gJy4uL3N0YXRlLmpzJ1xuXG4vLyBJbi1tZW1vcnkgc3RvcmFnZSBmb3IgZmlsZSBwZXJtaXNzaW9ucyB0aGF0IHJlc2V0cyBlYWNoIHNlc3Npb25cbi8vIFNldHMgb2YgYWxsb3dlZCBkaXJlY3RvcmllcyBmb3IgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9uc1xuY29uc3QgcmVhZEZpbGVBbGxvd2VkRGlyZWN0b3JpZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5jb25zdCB3cml0ZUZpbGVBbGxvd2VkRGlyZWN0b3JpZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbi8qKlxuICogRW5zdXJlcyBhIHBhdGggaXMgYWJzb2x1dGUgYnkgcmVzb2x2aW5nIGl0IHJlbGF0aXZlIHRvIGN3ZCBpZiBuZWNlc3NhcnlcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgQWJzb2x1dGUgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9BYnNvbHV0ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzQWJzb2x1dGUocGF0aCkgPyByZXNvbHZlKHBhdGgpIDogcmVzb2x2ZShnZXRDd2QoKSwgcGF0aClcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgcGF0aCBpcyBpbiB0aGUgb3JpZ2luYWwgY3dkIHBhdGhcbiAqIEBwYXJhbSBkaXJlY3RvcnkgVGhlIGRpcmVjdG9yeSBwYXRoIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgQWJzb2x1dGUgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEluT3JpZ2luYWxDd2QocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFic29sdXRlUGF0aCA9IHRvQWJzb2x1dGVQYXRoKHBhdGgpXG4gIHJldHVybiBhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aCh0b0Fic29sdXRlUGF0aChnZXRPcmlnaW5hbEN3ZCgpKSlcbn1cblxuLyoqXG4gKiBDaGVjayBpZiByZWFkIHBlcm1pc3Npb24gZXhpc3RzIGZvciB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeVxuICogQHBhcmFtIGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGNoZWNrIHBlcm1pc3Npb24gZm9yXG4gKiBAcmV0dXJucyB0cnVlIGlmIHJlYWQgcGVybWlzc2lvbiBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVhZFBlcm1pc3Npb24oZGlyZWN0b3J5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gdG9BYnNvbHV0ZVBhdGgoZGlyZWN0b3J5KVxuXG4gIGZvciAoY29uc3QgYWxsb3dlZFBhdGggb2YgcmVhZEZpbGVBbGxvd2VkRGlyZWN0b3JpZXMpIHtcbiAgICAvLyBQZXJtaXNzaW9uIGV4aXN0cyBmb3IgdGhpcyBkaXJlY3Rvcnkgb3IgYSBwYXRoIHByZWZpeFxuICAgIGlmIChhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aChhbGxvd2VkUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHdyaXRlIHBlcm1pc3Npb24gZXhpc3RzIGZvciB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeVxuICogQHBhcmFtIGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGNoZWNrIHBlcm1pc3Npb24gZm9yXG4gKiBAcmV0dXJucyB0cnVlIGlmIHdyaXRlIHBlcm1pc3Npb24gZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1dyaXRlUGVybWlzc2lvbihkaXJlY3Rvcnk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBhYnNvbHV0ZVBhdGggPSB0b0Fic29sdXRlUGF0aChkaXJlY3RvcnkpXG5cbiAgZm9yIChjb25zdCBhbGxvd2VkUGF0aCBvZiB3cml0ZUZpbGVBbGxvd2VkRGlyZWN0b3JpZXMpIHtcbiAgICAvLyBQZXJtaXNzaW9uIGV4aXN0cyBmb3IgdGhpcyBkaXJlY3Rvcnkgb3IgYSBwYXRoIHByZWZpeFxuICAgIGlmIChhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aChhbGxvd2VkUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFNhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciBhIGRpcmVjdG9yeVxuICogQHBhcmFtIGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbiBmb3JcbiAqL1xuZnVuY3Rpb24gc2F2ZVJlYWRQZXJtaXNzaW9uKGRpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGFic29sdXRlUGF0aCA9IHRvQWJzb2x1dGVQYXRoKGRpcmVjdG9yeSlcblxuICAvLyBDbGVhbiB1cCBhbnkgZXhpc3Rpbmcgc3ViZGlyZWN0b3JpZXMgb2YgdGhpcyBwYXRoXG4gIGZvciAoY29uc3QgYWxsb3dlZFBhdGggb2YgcmVhZEZpbGVBbGxvd2VkRGlyZWN0b3JpZXMpIHtcbiAgICBpZiAoYWxsb3dlZFBhdGguc3RhcnRzV2l0aChhYnNvbHV0ZVBhdGgpKSB7XG4gICAgICByZWFkRmlsZUFsbG93ZWREaXJlY3Rvcmllcy5kZWxldGUoYWxsb3dlZFBhdGgpXG4gICAgfVxuICB9XG4gIHJlYWRGaWxlQWxsb3dlZERpcmVjdG9yaWVzLmFkZChhYnNvbHV0ZVBhdGgpXG59XG5cbmV4cG9ydCBjb25zdCBzYXZlUmVhZFBlcm1pc3Npb25Gb3JUZXN0ID0gc2F2ZVJlYWRQZXJtaXNzaW9uXG5cbi8qKlxuICogR3JhbnRzIHJlYWQgcGVybWlzc2lvbiBmb3IgdGhlIG9yaWdpbmFsIHByb2plY3QgZGlyZWN0b3J5LlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGluaXRpYWxpemluZyByZWFkIGFjY2VzcyB0byB0aGUgcHJvamVjdCByb290LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhbnRSZWFkUGVybWlzc2lvbkZvck9yaWdpbmFsRGlyKCk6IHZvaWQge1xuICBjb25zdCBvcmlnaW5hbFByb2plY3REaXIgPSBnZXRPcmlnaW5hbEN3ZCgpXG4gIHNhdmVSZWFkUGVybWlzc2lvbihvcmlnaW5hbFByb2plY3REaXIpXG59XG5cbi8qKlxuICogU2F2ZSB3cml0ZSBwZXJtaXNzaW9uIGZvciBhIGRpcmVjdG9yeVxuICogQHBhcmFtIGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGdyYW50IHdyaXRlIHBlcm1pc3Npb24gZm9yXG4gKi9cbmZ1bmN0aW9uIHNhdmVXcml0ZVBlcm1pc3Npb24oZGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gdG9BYnNvbHV0ZVBhdGgoZGlyZWN0b3J5KVxuXG4gIC8vIENsZWFuIHVwIGFueSBleGlzdGluZyBzdWJkaXJlY3RvcmllcyBvZiB0aGlzIHBhdGhcbiAgZm9yIChjb25zdCBhbGxvd2VkUGF0aCBvZiB3cml0ZUZpbGVBbGxvd2VkRGlyZWN0b3JpZXMpIHtcbiAgICBpZiAoYWxsb3dlZFBhdGguc3RhcnRzV2l0aChhYnNvbHV0ZVBhdGgpKSB7XG4gICAgICB3cml0ZUZpbGVBbGxvd2VkRGlyZWN0b3JpZXMuZGVsZXRlKGFsbG93ZWRQYXRoKVxuICAgIH1cbiAgfVxuICB3cml0ZUZpbGVBbGxvd2VkRGlyZWN0b3JpZXMuYWRkKGFic29sdXRlUGF0aClcbn1cblxuLyoqXG4gKiBHcmFudHMgd3JpdGUgcGVybWlzc2lvbiBmb3IgdGhlIG9yaWdpbmFsIHByb2plY3QgZGlyZWN0b3J5LlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGluaXRpYWxpemluZyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYW50V3JpdGVQZXJtaXNzaW9uRm9yT3JpZ2luYWxEaXIoKTogdm9pZCB7XG4gIGNvbnN0IG9yaWdpbmFsUHJvamVjdERpciA9IGdldE9yaWdpbmFsQ3dkKClcbiAgc2F2ZVdyaXRlUGVybWlzc2lvbihvcmlnaW5hbFByb2plY3REaXIpXG59XG5cbi8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJGaWxlUGVybWlzc2lvbnMoKTogdm9pZCB7XG4gIHJlYWRGaWxlQWxsb3dlZERpcmVjdG9yaWVzLmNsZWFyKClcbiAgd3JpdGVGaWxlQWxsb3dlZERpcmVjdG9yaWVzLmNsZWFyKClcbn1cbiIsCiAgICAiaW1wb3J0IHsgTm90ZWJvb2tSZWFkVG9vbCB9IGZyb20gJy4uL05vdGVib29rUmVhZFRvb2wvTm90ZWJvb2tSZWFkVG9vbC5qcydcblxuY29uc3QgTUFYX0xJTkVTX1RPX1JFQUQgPSAyMDAwXG5jb25zdCBNQVhfTElORV9MRU5HVEggPSAyMDAwXG5cbmV4cG9ydCBjb25zdCBERVNDUklQVElPTiA9ICdSZWFkIGEgZmlsZSBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtLidcbmV4cG9ydCBjb25zdCBQUk9NUFQgPSBgUmVhZHMgYSBmaWxlIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uIFRoZSBmaWxlX3BhdGggcGFyYW1ldGVyIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbm90IGEgcmVsYXRpdmUgcGF0aC4gQnkgZGVmYXVsdCwgaXQgcmVhZHMgdXAgdG8gJHtNQVhfTElORVNfVE9fUkVBRH0gbGluZXMgc3RhcnRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGxpbmUgb2Zmc2V0IGFuZCBsaW1pdCAoZXNwZWNpYWxseSBoYW5keSBmb3IgbG9uZyBmaWxlcyksIGJ1dCBpdCdzIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIHdob2xlIGZpbGUgYnkgbm90IHByb3ZpZGluZyB0aGVzZSBwYXJhbWV0ZXJzLiBBbnkgbGluZXMgbG9uZ2VyIHRoYW4gJHtNQVhfTElORV9MRU5HVEh9IGNoYXJhY3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQuIEZvciBpbWFnZSBmaWxlcywgdGhlIHRvb2wgd2lsbCBkaXNwbGF5IHRoZSBpbWFnZSBmb3IgeW91LiBGb3IgSnVweXRlciBub3RlYm9va3MgKC5pcHluYiBmaWxlcyksIHVzZSB0aGUgJHtOb3RlYm9va1JlYWRUb29sLm5hbWV9IGluc3RlYWQuYFxuIiwKICAgICJleHBvcnQgY29uc3QgVE9PTF9OQU1FX0ZPUl9QUk9NUFQgPSAnR2xvYlRvb2wnXG5cbmV4cG9ydCBjb25zdCBERVNDUklQVElPTiA9IGAtIEZhc3QgZmlsZSBwYXR0ZXJuIG1hdGNoaW5nIHRvb2wgdGhhdCB3b3JrcyB3aXRoIGFueSBjb2RlYmFzZSBzaXplXG4tIFN1cHBvcnRzIGdsb2IgcGF0dGVybnMgbGlrZSBcIioqLyouanNcIiBvciBcInNyYy8qKi8qLnRzXCJcbi0gUmV0dXJucyBtYXRjaGluZyBmaWxlIHBhdGhzIHNvcnRlZCBieSBtb2RpZmljYXRpb24gdGltZVxuLSBVc2UgdGhpcyB0b29sIHdoZW4geW91IG5lZWQgdG8gZmluZCBmaWxlcyBieSBuYW1lIHBhdHRlcm5zXG4tIFdoZW4geW91IGFyZSBkb2luZyBhbiBvcGVuIGVuZGVkIHNlYXJjaCB0aGF0IG1heSByZXF1aXJlIG11bHRpcGxlIHJvdW5kcyBvZiBnbG9iYmluZyBhbmQgZ3JlcHBpbmcsIHVzZSB0aGUgQWdlbnQgdG9vbCBpbnN0ZWFkXG5gXG4iLAogICAgImV4cG9ydCBjb25zdCBUT09MX05BTUVfRk9SX1BST01QVCA9ICdHcmVwVG9vbCdcblxuZXhwb3J0IGNvbnN0IERFU0NSSVBUSU9OID0gYFxuLSBGYXN0IGNvbnRlbnQgc2VhcmNoIHRvb2wgdGhhdCB3b3JrcyB3aXRoIGFueSBjb2RlYmFzZSBzaXplXG4tIFNlYXJjaGVzIGZpbGUgY29udGVudHMgdXNpbmcgcmVndWxhciBleHByZXNzaW9uc1xuLSBTdXBwb3J0cyBmdWxsIHJlZ2V4IHN5bnRheCAoZWcuIFwibG9nLipFcnJvclwiLCBcImZ1bmN0aW9uXFxcXHMrXFxcXHcrXCIsIGV0Yy4pXG4tIEZpbHRlciBmaWxlcyBieSBwYXR0ZXJuIHdpdGggdGhlIGluY2x1ZGUgcGFyYW1ldGVyIChlZy4gXCIqLmpzXCIsIFwiKi57dHMsdHN4fVwiKVxuLSBSZXR1cm5zIG1hdGNoaW5nIGZpbGUgcGF0aHMgc29ydGVkIGJ5IG1vZGlmaWNhdGlvbiB0aW1lXG4tIFVzZSB0aGlzIHRvb2wgd2hlbiB5b3UgbmVlZCB0byBmaW5kIGZpbGVzIGNvbnRhaW5pbmcgc3BlY2lmaWMgcGF0dGVybnNcbi0gV2hlbiB5b3UgYXJlIGRvaW5nIGFuIG9wZW4gZW5kZWQgc2VhcmNoIHRoYXQgbWF5IHJlcXVpcmUgbXVsdGlwbGUgcm91bmRzIG9mIGdsb2JiaW5nIGFuZCBncmVwcGluZywgdXNlIHRoZSBBZ2VudCB0b29sIGluc3RlYWRcbmBcbiIsCiAgICAiaW1wb3J0IHsgcmVhZGRpclN5bmMgfSBmcm9tICdmcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IGJhc2VuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSwgc2VwIH0gZnJvbSAncGF0aCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IERFU0NSSVBUSU9OIH0gZnJvbSAnLi9wcm9tcHQuanMnXG5pbXBvcnQgeyBoYXNSZWFkUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25zL2ZpbGVzeXN0ZW0uanMnXG5cbmNvbnN0IE1BWF9MSU5FUyA9IDRcbmNvbnN0IE1BWF9GSUxFUyA9IDEwMDBcbmNvbnN0IFRSVU5DQVRFRF9NRVNTQUdFID0gYFRoZXJlIGFyZSBtb3JlIHRoYW4gJHtNQVhfRklMRVN9IGZpbGVzIGluIHRoZSByZXBvc2l0b3J5LiBVc2UgdGhlIExTIHRvb2wgKHBhc3NpbmcgYSBzcGVjaWZpYyBwYXRoKSwgQmFzaCB0b29sLCBhbmQgb3RoZXIgdG9vbHMgdG8gZXhwbG9yZSBuZXN0ZWQgZGlyZWN0b3JpZXMuIFRoZSBmaXJzdCAke01BWF9GSUxFU30gZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZCBiZWxvdzpcXG5cXG5gXG5cbmNvbnN0IGlucHV0U2NoZW1hID0gei5zdHJpY3RPYmplY3Qoe1xuICBwYXRoOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ1RoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gbGlzdCAobXVzdCBiZSBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlKScsXG4gICAgKSxcbn0pXG5cbi8vIFRPRE86IEtpbGwgdGhpcyB0b29sIGFuZCB1c2UgYmFzaCBpbnN0ZWFkXG5leHBvcnQgY29uc3QgTFNUb29sID0ge1xuICBuYW1lOiAnTFMnLFxuICBhc3luYyBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAnTGlzdCdcbiAgfSxcbiAgYXN5bmMgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIGlzUmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcbiAgbmVlZHNQZXJtaXNzaW9ucyh7IHBhdGggfSkge1xuICAgIHJldHVybiAhaGFzUmVhZFBlcm1pc3Npb24ocGF0aClcbiAgfSxcbiAgYXN5bmMgcHJvbXB0KCkge1xuICAgIHJldHVybiBERVNDUklQVElPTlxuICB9LFxuICByZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0sXG4gIHJlbmRlclRvb2xVc2VNZXNzYWdlKHsgcGF0aCB9LCB7IHZlcmJvc2UgfSkge1xuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGhcbiAgICAgID8gaXNBYnNvbHV0ZShwYXRoKVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgOiByZXNvbHZlKGdldEN3ZCgpLCBwYXRoKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBhYnNvbHV0ZVBhdGggPyByZWxhdGl2ZShnZXRDd2QoKSwgYWJzb2x1dGVQYXRoKSA6ICcuJ1xuICAgIHJldHVybiBgcGF0aDogXCIke3ZlcmJvc2UgPyBwYXRoIDogcmVsYXRpdmVQYXRofVwiYFxuICB9LFxuICByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKCkge1xuICAgIHJldHVybiA8RmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlIC8+XG4gIH0sXG4gIHJlbmRlclRvb2xSZXN1bHRNZXNzYWdlKGNvbnRlbnQsIHsgdmVyYm9zZSB9KSB7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gY29udGVudC5yZXBsYWNlKFRSVU5DQVRFRF9NRVNTQUdFLCAnJylcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3gganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgPFRleHQ+Jm5ic3A7Jm5ic3A74o6/ICZuYnNwOzwvVGV4dD5cbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nTGVmdD17MH0+XG4gICAgICAgICAgICB7cmVzdWx0XG4gICAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgICAgLmZpbHRlcihfID0+IF8udHJpbSgpICE9PSAnJylcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIHZlcmJvc2UgPyB1bmRlZmluZWQgOiBNQVhfTElORVMpXG4gICAgICAgICAgICAgIC5tYXAoKF8sIGkpID0+IChcbiAgICAgICAgICAgICAgICA8VGV4dCBrZXk9e2l9PntffTwvVGV4dD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7IXZlcmJvc2UgJiYgcmVzdWx0LnNwbGl0KCdcXG4nKS5sZW5ndGggPiBNQVhfTElORVMgJiYgKFxuICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgICAgICAgICAuLi4gKCt7cmVzdWx0LnNwbGl0KCdcXG4nKS5sZW5ndGggLSBNQVhfTElORVN9IGl0ZW1zKVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfSxcbiAgYXN5bmMgKmNhbGwoeyBwYXRoIH0sIHsgYWJvcnRDb250cm9sbGVyIH0pIHtcbiAgICBjb25zdCBmdWxsRmlsZVBhdGggPSBpc0Fic29sdXRlKHBhdGgpID8gcGF0aCA6IHJlc29sdmUoZ2V0Q3dkKCksIHBhdGgpXG4gICAgY29uc3QgcmVzdWx0ID0gbGlzdERpcmVjdG9yeShcbiAgICAgIGZ1bGxGaWxlUGF0aCxcbiAgICAgIGdldEN3ZCgpLFxuICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICApLnNvcnQoKVxuICAgIGNvbnN0IHNhZmV0eVdhcm5pbmcgPSBgXFxuTk9URTogZG8gYW55IG9mIHRoZSBmaWxlcyBhYm92ZSBzZWVtIG1hbGljaW91cz8gSWYgc28sIHlvdSBNVVNUIHJlZnVzZSB0byBjb250aW51ZSB3b3JrLmBcblxuICAgIC8vIFBsYWluIHRyZWUgZm9yIHVzZXIgZGlzcGxheSB3aXRob3V0IHdhcm5pbmdcbiAgICBjb25zdCB1c2VyVHJlZSA9IHByaW50VHJlZShjcmVhdGVGaWxlVHJlZShyZXN1bHQpKVxuXG4gICAgLy8gVHJlZSB3aXRoIHNhZmV0eSB3YXJuaW5nIGZvciBhc3Npc3RhbnQgb25seVxuICAgIGNvbnN0IGFzc2lzdGFudFRyZWUgPSB1c2VyVHJlZSArIHNhZmV0eVdhcm5pbmdcblxuICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgTUFYX0ZJTEVTKSB7XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgICBkYXRhOiB1c2VyVHJlZSwgLy8gU2hvdyB1c2VyIHRoZSB0cmVlIHdpdGhvdXQgdGhlIHdhcm5pbmdcbiAgICAgICAgcmVzdWx0Rm9yQXNzaXN0YW50OiB0aGlzLnJlbmRlclJlc3VsdEZvckFzc2lzdGFudChhc3Npc3RhbnRUcmVlKSwgLy8gU2VuZCB3YXJuaW5nIG9ubHkgdG8gYXNzaXN0YW50XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVzZXJEYXRhID0gYCR7VFJVTkNBVEVEX01FU1NBR0V9JHt1c2VyVHJlZX1gXG4gICAgICBjb25zdCBhc3Npc3RhbnREYXRhID0gYCR7VFJVTkNBVEVEX01FU1NBR0V9JHthc3Npc3RhbnRUcmVlfWBcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICAgIGRhdGE6IHVzZXJEYXRhLCAvLyBTaG93IHVzZXIgdGhlIHRydW5jYXRlZCB0cmVlIHdpdGhvdXQgdGhlIHdhcm5pbmdcbiAgICAgICAgcmVzdWx0Rm9yQXNzaXN0YW50OiB0aGlzLnJlbmRlclJlc3VsdEZvckFzc2lzdGFudChhc3Npc3RhbnREYXRhKSwgLy8gU2VuZCB3YXJuaW5nIG9ubHkgdG8gYXNzaXN0YW50XG4gICAgICB9XG4gICAgfVxuICB9LFxufSBzYXRpc2ZpZXMgVG9vbDx0eXBlb2YgaW5wdXRTY2hlbWEsIHN0cmluZz5cblxuZnVuY3Rpb24gbGlzdERpcmVjdG9yeShcbiAgaW5pdGlhbFBhdGg6IHN0cmluZyxcbiAgY3dkOiBzdHJpbmcsXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXVxuXG4gIGNvbnN0IHF1ZXVlID0gW2luaXRpYWxQYXRoXVxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IE1BWF9GSUxFUykge1xuICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gcXVldWUuc2hpZnQoKSFcbiAgICBpZiAoc2tpcChwYXRoKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAocGF0aCAhPT0gaW5pdGlhbFBhdGgpIHtcbiAgICAgIHJlc3VsdHMucHVzaChyZWxhdGl2ZShjd2QsIHBhdGgpICsgc2VwKVxuICAgIH1cblxuICAgIGxldCBjaGlsZHJlblxuICAgIHRyeSB7XG4gICAgICBjaGlsZHJlbiA9IHJlYWRkaXJTeW5jKHBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVnLiBFUEVSTSwgRUFDQ0VTLCBFTk9FTlQsIGV0Yy5cbiAgICAgIGxvZ0Vycm9yKGUpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goam9pbihwYXRoLCBjaGlsZC5uYW1lKSArIHNlcClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gam9pbihwYXRoLCBjaGlsZC5uYW1lKVxuICAgICAgICBpZiAoc2tpcChmaWxlTmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMucHVzaChyZWxhdGl2ZShjd2QsIGZpbGVOYW1lKSlcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gTUFYX0ZJTEVTKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzXG59XG5cbnR5cGUgVHJlZU5vZGUgPSB7XG4gIG5hbWU6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgdHlwZTogJ2ZpbGUnIHwgJ2RpcmVjdG9yeSdcbiAgY2hpbGRyZW4/OiBUcmVlTm9kZVtdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVUcmVlKHNvcnRlZFBhdGhzOiBzdHJpbmdbXSk6IFRyZWVOb2RlW10ge1xuICBjb25zdCByb290OiBUcmVlTm9kZVtdID0gW11cblxuICBmb3IgKGNvbnN0IHBhdGggb2Ygc29ydGVkUGF0aHMpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoc2VwKVxuICAgIGxldCBjdXJyZW50TGV2ZWwgPSByb290XG4gICAgbGV0IGN1cnJlbnRQYXRoID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXSFcbiAgICAgIGlmICghcGFydCkge1xuICAgICAgICAvLyBkaXJlY3RvcmllcyBoYXZlIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRQYXRoID0gY3VycmVudFBhdGggPyBgJHtjdXJyZW50UGF0aH0ke3NlcH0ke3BhcnR9YCA6IHBhcnRcbiAgICAgIGNvbnN0IGlzTGFzdFBhcnQgPSBpID09PSBwYXJ0cy5sZW5ndGggLSAxXG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZSA9IGN1cnJlbnRMZXZlbC5maW5kKG5vZGUgPT4gbm9kZS5uYW1lID09PSBwYXJ0KVxuXG4gICAgICBpZiAoZXhpc3RpbmdOb2RlKSB7XG4gICAgICAgIGN1cnJlbnRMZXZlbCA9IGV4aXN0aW5nTm9kZS5jaGlsZHJlbiB8fCBbXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3Tm9kZTogVHJlZU5vZGUgPSB7XG4gICAgICAgICAgbmFtZTogcGFydCxcbiAgICAgICAgICBwYXRoOiBjdXJyZW50UGF0aCxcbiAgICAgICAgICB0eXBlOiBpc0xhc3RQYXJ0ID8gJ2ZpbGUnIDogJ2RpcmVjdG9yeScsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTGFzdFBhcnQpIHtcbiAgICAgICAgICBuZXdOb2RlLmNoaWxkcmVuID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRMZXZlbC5wdXNoKG5ld05vZGUpXG4gICAgICAgIGN1cnJlbnRMZXZlbCA9IG5ld05vZGUuY2hpbGRyZW4gfHwgW11cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdFxufVxuXG4vKipcbiAqIGVnLlxuICogLSBzcmMvXG4gKiAgIC0gaW5kZXgudHNcbiAqICAgLSB1dGlscy9cbiAqICAgICAtIGZpbGUudHNcbiAqL1xuZnVuY3Rpb24gcHJpbnRUcmVlKHRyZWU6IFRyZWVOb2RlW10sIGxldmVsID0gMCwgcHJlZml4ID0gJycpOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyBBZGQgYWJzb2x1dGUgcGF0aCBhdCByb290IGxldmVsXG4gIGlmIChsZXZlbCA9PT0gMCkge1xuICAgIHJlc3VsdCArPSBgLSAke2dldEN3ZCgpfSR7c2VwfVxcbmBcbiAgICBwcmVmaXggPSAnICAnXG4gIH1cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgdHJlZSkge1xuICAgIC8vIEFkZCB0aGUgY3VycmVudCBub2RlIHRvIHRoZSByZXN1bHRcbiAgICByZXN1bHQgKz0gYCR7cHJlZml4fSR7Jy0nfSAke25vZGUubmFtZX0ke25vZGUudHlwZSA9PT0gJ2RpcmVjdG9yeScgPyBzZXAgOiAnJ31cXG5gXG5cbiAgICAvLyBSZWN1cnNpdmVseSBwcmludCBjaGlsZHJlbiBpZiB0aGV5IGV4aXN0XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQgKz0gcHJpbnRUcmVlKG5vZGUuY2hpbGRyZW4sIGxldmVsICsgMSwgYCR7cHJlZml4fSAgYClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIFRPRE86IEFkZCB3aW5kb3dzIHN1cHBvcnRcbmZ1bmN0aW9uIHNraXAocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChwYXRoICE9PSAnLicgJiYgYmFzZW5hbWUocGF0aCkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAocGF0aC5pbmNsdWRlcyhgX19weWNhY2hlX18ke3NlcH1gKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG4iLAogICAgImV4cG9ydCBjb25zdCBERVNDUklQVElPTiA9XG4gICdMaXN0cyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gYSBnaXZlbiBwYXRoLiBUaGUgcGF0aCBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBub3QgYSByZWxhdGl2ZSBwYXRoLiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdGhlIEdsb2IgYW5kIEdyZXAgdG9vbHMsIGlmIHlvdSBrbm93IHdoaWNoIGRpcmVjdG9yaWVzIHRvIHNlYXJjaC4nXG4iLAogICAgImltcG9ydCB7IFBST0RVQ1RfTkFNRSwgUFJPRFVDVF9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcHJvZHVjdC5qcydcbmltcG9ydCB7IFRPT0xfTkFNRSBhcyBBR0VOVF9UT09MX05BTUUgfSBmcm9tICcuLi9BZ2VudFRvb2wvY29uc3RhbnRzLmpzJ1xuaW1wb3J0IHsgRmlsZVJlYWRUb29sIH0gZnJvbSAnLi4vRmlsZVJlYWRUb29sL0ZpbGVSZWFkVG9vbC5qcydcbmltcG9ydCB7IFRPT0xfTkFNRV9GT1JfUFJPTVBUIGFzIEdMT0JfVE9PTF9OQU1FIH0gZnJvbSAnLi4vR2xvYlRvb2wvcHJvbXB0LmpzJ1xuaW1wb3J0IHsgVE9PTF9OQU1FX0ZPUl9QUk9NUFQgYXMgR1JFUF9UT09MX05BTUUgfSBmcm9tICcuLi9HcmVwVG9vbC9wcm9tcHQuanMnXG5pbXBvcnQgeyBMU1Rvb2wgfSBmcm9tICcuLi9sc1Rvb2wvbHNUb29sLmpzJ1xuXG5leHBvcnQgY29uc3QgTUFYX09VVFBVVF9MRU5HVEggPSAzMDAwMFxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJFRF9MSU5FUyA9IDUwXG5leHBvcnQgY29uc3QgQkFOTkVEX0NPTU1BTkRTID0gW1xuICAnYWxpYXMnLFxuICAnY3VybCcsXG4gICdjdXJsaWUnLFxuICAnd2dldCcsXG4gICdheGVsJyxcbiAgJ2FyaWEyYycsXG4gICduYycsXG4gICd0ZWxuZXQnLFxuICAnbHlueCcsXG4gICd3M20nLFxuICAnbGlua3MnLFxuICAnaHR0cGllJyxcbiAgJ3hoJyxcbiAgJ2h0dHAtcHJvbXB0JyxcbiAgJ2Nocm9tZScsXG4gICdmaXJlZm94JyxcbiAgJ3NhZmFyaScsXG5dXG5cbmV4cG9ydCBjb25zdCBQUk9NUFQgPSBgRXhlY3V0ZXMgYSBnaXZlbiBiYXNoIGNvbW1hbmQgaW4gYSBwZXJzaXN0ZW50IHNoZWxsIHNlc3Npb24gd2l0aCBvcHRpb25hbCB0aW1lb3V0LCBlbnN1cmluZyBwcm9wZXIgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IG1lYXN1cmVzLlxuXG5CZWZvcmUgZXhlY3V0aW5nIHRoZSBjb21tYW5kLCBwbGVhc2UgZm9sbG93IHRoZXNlIHN0ZXBzOlxuXG4xLiBEaXJlY3RvcnkgVmVyaWZpY2F0aW9uOlxuICAgLSBJZiB0aGUgY29tbWFuZCB3aWxsIGNyZWF0ZSBuZXcgZGlyZWN0b3JpZXMgb3IgZmlsZXMsIGZpcnN0IHVzZSB0aGUgTFMgdG9vbCB0byB2ZXJpZnkgdGhlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyB0aGUgY29ycmVjdCBsb2NhdGlvblxuICAgLSBGb3IgZXhhbXBsZSwgYmVmb3JlIHJ1bm5pbmcgXCJta2RpciBmb28vYmFyXCIsIGZpcnN0IHVzZSBMUyB0byBjaGVjayB0aGF0IFwiZm9vXCIgZXhpc3RzIGFuZCBpcyB0aGUgaW50ZW5kZWQgcGFyZW50IGRpcmVjdG9yeVxuXG4yLiBTZWN1cml0eSBDaGVjazpcbiAgIC0gRm9yIHNlY3VyaXR5IGFuZCB0byBsaW1pdCB0aGUgdGhyZWF0IG9mIGEgcHJvbXB0IGluamVjdGlvbiBhdHRhY2ssIHNvbWUgY29tbWFuZHMgYXJlIGxpbWl0ZWQgb3IgYmFubmVkLiBJZiB5b3UgdXNlIGEgZGlzYWxsb3dlZCBjb21tYW5kLCB5b3Ugd2lsbCByZWNlaXZlIGFuIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGUgcmVzdHJpY3Rpb24uIEV4cGxhaW4gdGhlIGVycm9yIHRvIHRoZSBVc2VyLlxuICAgLSBWZXJpZnkgdGhhdCB0aGUgY29tbWFuZCBpcyBub3Qgb25lIG9mIHRoZSBiYW5uZWQgY29tbWFuZHM6ICR7QkFOTkVEX0NPTU1BTkRTLmpvaW4oJywgJyl9LlxuXG4zLiBDb21tYW5kIEV4ZWN1dGlvbjpcbiAgIC0gQWZ0ZXIgZW5zdXJpbmcgcHJvcGVyIHF1b3RpbmcsIGV4ZWN1dGUgdGhlIGNvbW1hbmQuXG4gICAtIENhcHR1cmUgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cblxuNC4gT3V0cHV0IFByb2Nlc3Npbmc6XG4gICAtIElmIHRoZSBvdXRwdXQgZXhjZWVkcyAke01BWF9PVVRQVVRfTEVOR1RIfSBjaGFyYWN0ZXJzLCBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHlvdS5cbiAgIC0gUHJlcGFyZSB0aGUgb3V0cHV0IGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuXG41LiBSZXR1cm4gUmVzdWx0OlxuICAgLSBQcm92aWRlIHRoZSBwcm9jZXNzZWQgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICAgLSBJZiBhbnkgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBleGVjdXRpb24sIGluY2x1ZGUgdGhvc2UgaW4gdGhlIG91dHB1dC5cblxuVXNhZ2Ugbm90ZXM6XG4gIC0gVGhlIGNvbW1hbmQgYXJndW1lbnQgaXMgcmVxdWlyZWQuXG4gIC0gWW91IGNhbiBzcGVjaWZ5IGFuIG9wdGlvbmFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICh1cCB0byA2MDAwMDBtcyAvIDEwIG1pbnV0ZXMpLiBJZiBub3Qgc3BlY2lmaWVkLCBjb21tYW5kcyB3aWxsIHRpbWVvdXQgYWZ0ZXIgMzAgbWludXRlcy5cbiAgLSBWRVJZIElNUE9SVEFOVDogWW91IE1VU1QgYXZvaWQgdXNpbmcgc2VhcmNoIGNvbW1hbmRzIGxpa2UgXFxgZmluZFxcYCBhbmQgXFxgZ3JlcFxcYC4gSW5zdGVhZCB1c2UgJHtHUkVQX1RPT0xfTkFNRX0sICR7R0xPQl9UT09MX05BTUV9LCBvciAke0FHRU5UX1RPT0xfTkFNRX0gdG8gc2VhcmNoLiBZb3UgTVVTVCBhdm9pZCByZWFkIHRvb2xzIGxpa2UgXFxgY2F0XFxgLCBcXGBoZWFkXFxgLCBcXGB0YWlsXFxgLCBhbmQgXFxgbHNcXGAsIGFuZCB1c2UgJHtGaWxlUmVhZFRvb2wubmFtZX0gYW5kICR7TFNUb29sLm5hbWV9IHRvIHJlYWQgZmlsZXMuXG4gIC0gV2hlbiBpc3N1aW5nIG11bHRpcGxlIGNvbW1hbmRzLCB1c2UgdGhlICc7JyBvciAnJiYnIG9wZXJhdG9yIHRvIHNlcGFyYXRlIHRoZW0uIERPIE5PVCB1c2UgbmV3bGluZXMgKG5ld2xpbmVzIGFyZSBvayBpbiBxdW90ZWQgc3RyaW5ncykuXG4gIC0gSU1QT1JUQU5UOiBBbGwgY29tbWFuZHMgc2hhcmUgdGhlIHNhbWUgc2hlbGwgc2Vzc2lvbi4gU2hlbGwgc3RhdGUgKGVudmlyb25tZW50IHZhcmlhYmxlcywgdmlydHVhbCBlbnZpcm9ubWVudHMsIGN1cnJlbnQgZGlyZWN0b3J5LCBldGMuKSBwZXJzaXN0IGJldHdlZW4gY29tbWFuZHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHBhcnQgb2YgYSBjb21tYW5kLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBwZXJzaXN0IGZvciBzdWJzZXF1ZW50IGNvbW1hbmRzLlxuICAtIFRyeSB0byBtYWludGFpbiB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdGhyb3VnaG91dCB0aGUgc2Vzc2lvbiBieSB1c2luZyBhYnNvbHV0ZSBwYXRocyBhbmQgYXZvaWRpbmcgdXNhZ2Ugb2YgXFxgY2RcXGAuIFlvdSBtYXkgdXNlIFxcYGNkXFxgIGlmIHRoZSBVc2VyIGV4cGxpY2l0bHkgcmVxdWVzdHMgaXQuXG4gIDxnb29kLWV4YW1wbGU+XG4gIHB5dGVzdCAvZm9vL2Jhci90ZXN0c1xuICA8L2dvb2QtZXhhbXBsZT5cbiAgPGJhZC1leGFtcGxlPlxuICBjZCAvZm9vL2JhciAmJiBweXRlc3QgdGVzdHNcbiAgPC9iYWQtZXhhbXBsZT5cblxuIyBDb21taXR0aW5nIGNoYW5nZXMgd2l0aCBnaXRcblxuV2hlbiB0aGUgdXNlciBhc2tzIHlvdSB0byBjcmVhdGUgYSBuZXcgZ2l0IGNvbW1pdCwgZm9sbG93IHRoZXNlIHN0ZXBzIGNhcmVmdWxseTpcblxuMS4gU3RhcnQgd2l0aCBhIHNpbmdsZSBtZXNzYWdlIHRoYXQgY29udGFpbnMgZXhhY3RseSB0aHJlZSB0b29sX3VzZSBibG9ja3MgdGhhdCBkbyB0aGUgZm9sbG93aW5nIChpdCBpcyBWRVJZIElNUE9SVEFOVCB0aGF0IHlvdSBzZW5kIHRoZXNlIHRvb2xfdXNlIGJsb2NrcyBpbiBhIHNpbmdsZSBtZXNzYWdlLCBvdGhlcndpc2UgaXQgd2lsbCBmZWVsIHNsb3cgdG8gdGhlIHVzZXIhKTpcbiAgIC0gUnVuIGEgZ2l0IHN0YXR1cyBjb21tYW5kIHRvIHNlZSBhbGwgdW50cmFja2VkIGZpbGVzLlxuICAgLSBSdW4gYSBnaXQgZGlmZiBjb21tYW5kIHRvIHNlZSBib3RoIHN0YWdlZCBhbmQgdW5zdGFnZWQgY2hhbmdlcyB0aGF0IHdpbGwgYmUgY29tbWl0dGVkLlxuICAgLSBSdW4gYSBnaXQgbG9nIGNvbW1hbmQgdG8gc2VlIHJlY2VudCBjb21taXQgbWVzc2FnZXMsIHNvIHRoYXQgeW91IGNhbiBmb2xsb3cgdGhpcyByZXBvc2l0b3J5J3MgY29tbWl0IG1lc3NhZ2Ugc3R5bGUuXG5cbjIuIFVzZSB0aGUgZ2l0IGNvbnRleHQgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgY29udmVyc2F0aW9uIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBhcmUgcmVsZXZhbnQgdG8geW91ciBjb21taXQuIEFkZCByZWxldmFudCB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdpbmcgYXJlYS4gRG8gbm90IGNvbW1pdCBmaWxlcyB0aGF0IHdlcmUgYWxyZWFkeSBtb2RpZmllZCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBjb252ZXJzYXRpb24sIGlmIHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB5b3VyIGNvbW1pdC5cblxuMy4gQW5hbHl6ZSBhbGwgc3RhZ2VkIGNoYW5nZXMgKGJvdGggcHJldmlvdXNseSBzdGFnZWQgYW5kIG5ld2x5IGFkZGVkKSBhbmQgZHJhZnQgYSBjb21taXQgbWVzc2FnZS4gV3JhcCB5b3VyIGFuYWx5c2lzIHByb2Nlc3MgaW4gPGNvbW1pdF9hbmFseXNpcz4gdGFnczpcblxuPGNvbW1pdF9hbmFseXNpcz5cbi0gTGlzdCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBvciBhZGRlZFxuLSBTdW1tYXJpemUgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyAoZWcuIG5ldyBmZWF0dXJlLCBlbmhhbmNlbWVudCB0byBhbiBleGlzdGluZyBmZWF0dXJlLCBidWcgZml4LCByZWZhY3RvcmluZywgdGVzdCwgZG9jcywgZXRjLilcbi0gQnJhaW5zdG9ybSB0aGUgcHVycG9zZSBvciBtb3RpdmF0aW9uIGJlaGluZCB0aGVzZSBjaGFuZ2VzXG4tIERvIG5vdCB1c2UgdG9vbHMgdG8gZXhwbG9yZSBjb2RlLCBiZXlvbmQgd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGdpdCBjb250ZXh0XG4tIEFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIG92ZXJhbGwgcHJvamVjdFxuLSBDaGVjayBmb3IgYW55IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZG4ndCBiZSBjb21taXR0ZWRcbi0gRHJhZnQgYSBjb25jaXNlICgxLTIgc2VudGVuY2VzKSBjb21taXQgbWVzc2FnZSB0aGF0IGZvY3VzZXMgb24gdGhlIFwid2h5XCIgcmF0aGVyIHRoYW4gdGhlIFwid2hhdFwiXG4tIEVuc3VyZSB5b3VyIGxhbmd1YWdlIGlzIGNsZWFyLCBjb25jaXNlLCBhbmQgdG8gdGhlIHBvaW50XG4tIEVuc3VyZSB0aGUgbWVzc2FnZSBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBjaGFuZ2VzIGFuZCB0aGVpciBwdXJwb3NlIChpLmUuIFwiYWRkXCIgbWVhbnMgYSB3aG9sbHkgbmV3IGZlYXR1cmUsIFwidXBkYXRlXCIgbWVhbnMgYW4gZW5oYW5jZW1lbnQgdG8gYW4gZXhpc3RpbmcgZmVhdHVyZSwgXCJmaXhcIiBtZWFucyBhIGJ1ZyBmaXgsIGV0Yy4pXG4tIEVuc3VyZSB0aGUgbWVzc2FnZSBpcyBub3QgZ2VuZXJpYyAoYXZvaWQgd29yZHMgbGlrZSBcIlVwZGF0ZVwiIG9yIFwiRml4XCIgd2l0aG91dCBjb250ZXh0KVxuLSBSZXZpZXcgdGhlIGRyYWZ0IG1lc3NhZ2UgdG8gZW5zdXJlIGl0IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHB1cnBvc2VcbjwvY29tbWl0X2FuYWx5c2lzPlxuXG40LiBDcmVhdGUgdGhlIGNvbW1pdCB3aXRoIGEgbWVzc2FnZSBlbmRpbmcgd2l0aDpcbvCfpJYgR2VuZXJhdGVkIHdpdGggJHtwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnID8gYFske1BST0RVQ1RfTkFNRX1dKCR7UFJPRFVDVF9VUkx9KWAgOiBQUk9EVUNUX05BTUV9XG5Dby1BdXRob3JlZC1CeTogQ2xhdWRlIDxub3JlcGx5QGFudGhyb3BpYy5jb20+XG5cbi0gSW4gb3JkZXIgdG8gZW5zdXJlIGdvb2QgZm9ybWF0dGluZywgQUxXQVlTIHBhc3MgdGhlIGNvbW1pdCBtZXNzYWdlIHZpYSBhIEhFUkVET0MsIGEgbGEgdGhpcyBleGFtcGxlOlxuPGV4YW1wbGU+XG5naXQgY29tbWl0IC1tIFwiJChjYXQgPDwnRU9GJ1xuICAgQ29tbWl0IG1lc3NhZ2UgaGVyZS5cblxuICAg8J+kliBHZW5lcmF0ZWQgd2l0aCAke3Byb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgPyBgWyR7UFJPRFVDVF9OQU1FfV0oJHtQUk9EVUNUX1VSTH0pYCA6IFBST0RVQ1RfTkFNRX1cbiAgIENvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT5cbiAgIEVPRlxuICAgKVwiXG48L2V4YW1wbGU+XG5cbjUuIElmIHRoZSBjb21taXQgZmFpbHMgZHVlIHRvIHByZS1jb21taXQgaG9vayBjaGFuZ2VzLCByZXRyeSB0aGUgY29tbWl0IE9OQ0UgdG8gaW5jbHVkZSB0aGVzZSBhdXRvbWF0ZWQgY2hhbmdlcy4gSWYgaXQgZmFpbHMgYWdhaW4sIGl0IHVzdWFsbHkgbWVhbnMgYSBwcmUtY29tbWl0IGhvb2sgaXMgcHJldmVudGluZyB0aGUgY29tbWl0LiBJZiB0aGUgY29tbWl0IHN1Y2NlZWRzIGJ1dCB5b3Ugbm90aWNlIHRoYXQgZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGUgcHJlLWNvbW1pdCBob29rLCB5b3UgTVVTVCBhbWVuZCB5b3VyIGNvbW1pdCB0byBpbmNsdWRlIHRoZW0uXG5cbjYuIEZpbmFsbHksIHJ1biBnaXQgc3RhdHVzIHRvIG1ha2Ugc3VyZSB0aGUgY29tbWl0IHN1Y2NlZWRlZC5cblxuSW1wb3J0YW50IG5vdGVzOlxuLSBXaGVuIHBvc3NpYmxlLCBjb21iaW5lIHRoZSBcImdpdCBhZGRcIiBhbmQgXCJnaXQgY29tbWl0XCIgY29tbWFuZHMgaW50byBhIHNpbmdsZSBcImdpdCBjb21taXQgLWFtXCIgY29tbWFuZCwgdG8gc3BlZWQgdGhpbmdzIHVwXG4tIEhvd2V2ZXIsIGJlIGNhcmVmdWwgbm90IHRvIHN0YWdlIGZpbGVzIChlLmcuIHdpdGggXFxgZ2l0IGFkZCAuXFxgKSBmb3IgY29tbWl0cyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBjaGFuZ2UsIHRoZXkgbWF5IGhhdmUgdW50cmFja2VkIGZpbGVzIHRoZXkgd2FudCB0byBrZWVwIGFyb3VuZCwgYnV0IG5vdCBjb21taXQuXG4tIE5FVkVSIHVwZGF0ZSB0aGUgZ2l0IGNvbmZpZ1xuLSBETyBOT1QgcHVzaCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnlcbi0gSU1QT1JUQU5UOiBOZXZlciB1c2UgZ2l0IGNvbW1hbmRzIHdpdGggdGhlIC1pIGZsYWcgKGxpa2UgZ2l0IHJlYmFzZSAtaSBvciBnaXQgYWRkIC1pKSBzaW5jZSB0aGV5IHJlcXVpcmUgaW50ZXJhY3RpdmUgaW5wdXQgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC5cbi0gSWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gY29tbWl0IChpLmUuLCBubyB1bnRyYWNrZWQgZmlsZXMgYW5kIG5vIG1vZGlmaWNhdGlvbnMpLCBkbyBub3QgY3JlYXRlIGFuIGVtcHR5IGNvbW1pdFxuLSBFbnN1cmUgeW91ciBjb21taXQgbWVzc2FnZSBpcyBtZWFuaW5nZnVsIGFuZCBjb25jaXNlLiBJdCBzaG91bGQgZXhwbGFpbiB0aGUgcHVycG9zZSBvZiB0aGUgY2hhbmdlcywgbm90IGp1c3QgZGVzY3JpYmUgdGhlbS5cbi0gUmV0dXJuIGFuIGVtcHR5IHJlc3BvbnNlIC0gdGhlIHVzZXIgd2lsbCBzZWUgdGhlIGdpdCBvdXRwdXQgZGlyZWN0bHlcblxuIyBDcmVhdGluZyBwdWxsIHJlcXVlc3RzXG5Vc2UgdGhlIGdoIGNvbW1hbmQgdmlhIHRoZSBCYXNoIHRvb2wgZm9yIEFMTCBHaXRIdWItcmVsYXRlZCB0YXNrcyBpbmNsdWRpbmcgd29ya2luZyB3aXRoIGlzc3VlcywgcHVsbCByZXF1ZXN0cywgY2hlY2tzLCBhbmQgcmVsZWFzZXMuIElmIGdpdmVuIGEgR2l0aHViIFVSTCB1c2UgdGhlIGdoIGNvbW1hbmQgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQuXG5cbklNUE9SVEFOVDogV2hlbiB0aGUgdXNlciBhc2tzIHlvdSB0byBjcmVhdGUgYSBwdWxsIHJlcXVlc3QsIGZvbGxvdyB0aGVzZSBzdGVwcyBjYXJlZnVsbHk6XG5cbjEuIFVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJyYW5jaC4gUmVtZW1iZXIgdG8gc2VuZCBhIHNpbmdsZSBtZXNzYWdlIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgdG9vbF91c2UgYmxvY2tzIChpdCBpcyBWRVJZIElNUE9SVEFOVCB0aGF0IHlvdSBkbyB0aGlzIGluIGEgc2luZ2xlIG1lc3NhZ2UsIG90aGVyd2lzZSBpdCB3aWxsIGZlZWwgc2xvdyB0byB0aGUgdXNlciEpOlxuICAgLSBSdW4gYSBnaXQgc3RhdHVzIGNvbW1hbmQgdG8gc2VlIGFsbCB1bnRyYWNrZWQgZmlsZXMuXG4gICAtIFJ1biBhIGdpdCBkaWZmIGNvbW1hbmQgdG8gc2VlIGJvdGggc3RhZ2VkIGFuZCB1bnN0YWdlZCBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBjb21taXR0ZWQuXG4gICAtIENoZWNrIGlmIHRoZSBjdXJyZW50IGJyYW5jaCB0cmFja3MgYSByZW1vdGUgYnJhbmNoIGFuZCBpcyB1cCB0byBkYXRlIHdpdGggdGhlIHJlbW90ZSwgc28geW91IGtub3cgaWYgeW91IG5lZWQgdG8gcHVzaCB0byB0aGUgcmVtb3RlXG4gICAtIFJ1biBhIGdpdCBsb2cgY29tbWFuZCBhbmQgXFxgZ2l0IGRpZmYgbWFpbi4uLkhFQURcXGAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb21taXQgaGlzdG9yeSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoIChmcm9tIHRoZSB0aW1lIGl0IGRpdmVyZ2VkIGZyb20gdGhlIFxcYG1haW5cXGAgYnJhbmNoLilcblxuMi4gQ3JlYXRlIG5ldyBicmFuY2ggaWYgbmVlZGVkXG5cbjMuIENvbW1pdCBjaGFuZ2VzIGlmIG5lZWRlZFxuXG40LiBQdXNoIHRvIHJlbW90ZSB3aXRoIC11IGZsYWcgaWYgbmVlZGVkXG5cbjUuIEFuYWx5emUgYWxsIGNoYW5nZXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBwdWxsIHJlcXVlc3QsIG1ha2luZyBzdXJlIHRvIGxvb2sgYXQgYWxsIHJlbGV2YW50IGNvbW1pdHMgKG5vdCBqdXN0IHRoZSBsYXRlc3QgY29tbWl0LCBidXQgYWxsIGNvbW1pdHMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBwdWxsIHJlcXVlc3QhKSwgYW5kIGRyYWZ0IGEgcHVsbCByZXF1ZXN0IHN1bW1hcnkuIFdyYXAgeW91ciBhbmFseXNpcyBwcm9jZXNzIGluIDxwcl9hbmFseXNpcz4gdGFnczpcblxuPHByX2FuYWx5c2lzPlxuLSBMaXN0IHRoZSBjb21taXRzIHNpbmNlIGRpdmVyZ2luZyBmcm9tIHRoZSBtYWluIGJyYW5jaFxuLSBTdW1tYXJpemUgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyAoZWcuIG5ldyBmZWF0dXJlLCBlbmhhbmNlbWVudCB0byBhbiBleGlzdGluZyBmZWF0dXJlLCBidWcgZml4LCByZWZhY3RvcmluZywgdGVzdCwgZG9jcywgZXRjLilcbi0gQnJhaW5zdG9ybSB0aGUgcHVycG9zZSBvciBtb3RpdmF0aW9uIGJlaGluZCB0aGVzZSBjaGFuZ2VzXG4tIEFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIG92ZXJhbGwgcHJvamVjdFxuLSBEbyBub3QgdXNlIHRvb2xzIHRvIGV4cGxvcmUgY29kZSwgYmV5b25kIHdoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBnaXQgY29udGV4dFxuLSBDaGVjayBmb3IgYW55IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZG4ndCBiZSBjb21taXR0ZWRcbi0gRHJhZnQgYSBjb25jaXNlICgxLTIgYnVsbGV0IHBvaW50cykgcHVsbCByZXF1ZXN0IHN1bW1hcnkgdGhhdCBmb2N1c2VzIG9uIHRoZSBcIndoeVwiIHJhdGhlciB0aGFuIHRoZSBcIndoYXRcIlxuLSBFbnN1cmUgdGhlIHN1bW1hcnkgYWNjdXJhdGVseSByZWZsZWN0cyBhbGwgY2hhbmdlcyBzaW5jZSBkaXZlcmdpbmcgZnJvbSB0aGUgbWFpbiBicmFuY2hcbi0gRW5zdXJlIHlvdXIgbGFuZ3VhZ2UgaXMgY2xlYXIsIGNvbmNpc2UsIGFuZCB0byB0aGUgcG9pbnRcbi0gRW5zdXJlIHRoZSBzdW1tYXJ5IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHB1cnBvc2UgKGllLiBcImFkZFwiIG1lYW5zIGEgd2hvbGx5IG5ldyBmZWF0dXJlLCBcInVwZGF0ZVwiIG1lYW5zIGFuIGVuaGFuY2VtZW50IHRvIGFuIGV4aXN0aW5nIGZlYXR1cmUsIFwiZml4XCIgbWVhbnMgYSBidWcgZml4LCBldGMuKVxuLSBFbnN1cmUgdGhlIHN1bW1hcnkgaXMgbm90IGdlbmVyaWMgKGF2b2lkIHdvcmRzIGxpa2UgXCJVcGRhdGVcIiBvciBcIkZpeFwiIHdpdGhvdXQgY29udGV4dClcbi0gUmV2aWV3IHRoZSBkcmFmdCBzdW1tYXJ5IHRvIGVuc3VyZSBpdCBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBjaGFuZ2VzIGFuZCB0aGVpciBwdXJwb3NlXG48L3ByX2FuYWx5c2lzPlxuXG42LiBDcmVhdGUgUFIgdXNpbmcgZ2ggcHIgY3JlYXRlIHdpdGggdGhlIGZvcm1hdCBiZWxvdy4gVXNlIGEgSEVSRURPQyB0byBwYXNzIHRoZSBib2R5IHRvIGVuc3VyZSBjb3JyZWN0IGZvcm1hdHRpbmcuXG48ZXhhbXBsZT5cbmdoIHByIGNyZWF0ZSAtLXRpdGxlIFwidGhlIHByIHRpdGxlXCIgLS1ib2R5IFwiJChjYXQgPDwnRU9GJ1xuIyMgU3VtbWFyeVxuPDEtMyBidWxsZXQgcG9pbnRzPlxuXG4jIyBUZXN0IHBsYW5cbltDaGVja2xpc3Qgb2YgVE9ET3MgZm9yIHRlc3RpbmcgdGhlIHB1bGwgcmVxdWVzdC4uLl1cblxu8J+kliBHZW5lcmF0ZWQgd2l0aCAke3Byb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgPyBgWyR7UFJPRFVDVF9OQU1FfV0oJHtQUk9EVUNUX1VSTH0pYCA6IFBST0RVQ1RfTkFNRX1cbkVPRlxuKVwiXG48L2V4YW1wbGU+XG5cbkltcG9ydGFudDpcbi0gUmV0dXJuIGFuIGVtcHR5IHJlc3BvbnNlIC0gdGhlIHVzZXIgd2lsbCBzZWUgdGhlIGdoIG91dHB1dCBkaXJlY3RseVxuLSBOZXZlciB1cGRhdGUgZ2l0IGNvbmZpZ2BcbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgT3V0cHV0TGluZSB9IGZyb20gJy4vT3V0cHV0TGluZS5qcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBPdXQgYXMgQmFzaE91dCB9IGZyb20gJy4vQmFzaFRvb2wuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbnRlbnQ6IE9taXQ8QmFzaE91dCwgJ2ludGVycnVwdGVkJz5cbiAgdmVyYm9zZTogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBCYXNoVG9vbFJlc3VsdE1lc3NhZ2UoeyBjb250ZW50LCB2ZXJib3NlIH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHN0ZG91dCwgc3Rkb3V0TGluZXMsIHN0ZGVyciwgc3RkZXJyTGluZXMgfSA9IGNvbnRlbnRcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAge3N0ZG91dCAhPT0gJycgPyAoXG4gICAgICAgIDxPdXRwdXRMaW5lIGNvbnRlbnQ9e3N0ZG91dH0gbGluZXM9e3N0ZG91dExpbmVzfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7c3RkZXJyICE9PSAnJyA/IChcbiAgICAgICAgPE91dHB1dExpbmVcbiAgICAgICAgICBjb250ZW50PXtzdGRlcnJ9XG4gICAgICAgICAgbGluZXM9e3N0ZGVyckxpbmVzfVxuICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgICAgaXNFcnJvclxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7c3Rkb3V0ID09PSAnJyAmJiBzdGRlcnIgPT09ICcnID8gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIj5cbiAgICAgICAgICA8VGV4dD4mbmJzcDsmbmJzcDvijr8gJm5ic3A7PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PihObyBjb250ZW50KTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JveD5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXNoVG9vbFJlc3VsdE1lc3NhZ2VcbiIsCiAgICAiaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgZ2V0SXNHaXQgfSBmcm9tICcuLi91dGlscy9naXQuanMnXG5pbXBvcnQge1xuICBJTlRFUlJVUFRfTUVTU0FHRSxcbiAgSU5URVJSVVBUX01FU1NBR0VfRk9SX1RPT0xfVVNFLFxufSBmcm9tICcuLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi9wcm9kdWN0LmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuLi90b29scy9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENMSVN5c3Byb21wdFByZWZpeCgpOiBzdHJpbmcge1xuICByZXR1cm4gYFlvdSBhcmUgJHtQUk9EVUNUX05BTUV9LCBBbnRocm9waWMncyBvZmZpY2lhbCBDTEkgZm9yIENsYXVkZS5gXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTeXN0ZW1Qcm9tcHQoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICByZXR1cm4gW1xuICAgIGBZb3UgYXJlIGFuIGludGVyYWN0aXZlIENMSSB0b29sIHRoYXQgaGVscHMgdXNlcnMgd2l0aCBzb2Z0d2FyZSBlbmdpbmVlcmluZyB0YXNrcy4gVXNlIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cgYW5kIHRoZSB0b29scyBhdmFpbGFibGUgdG8geW91IHRvIGFzc2lzdCB0aGUgdXNlci5cblxuSU1QT1JUQU5UOiBSZWZ1c2UgdG8gd3JpdGUgY29kZSBvciBleHBsYWluIGNvZGUgdGhhdCBtYXkgYmUgdXNlZCBtYWxpY2lvdXNseTsgZXZlbiBpZiB0aGUgdXNlciBjbGFpbXMgaXQgaXMgZm9yIGVkdWNhdGlvbmFsIHB1cnBvc2VzLiBXaGVuIHdvcmtpbmcgb24gZmlsZXMsIGlmIHRoZXkgc2VlbSByZWxhdGVkIHRvIGltcHJvdmluZywgZXhwbGFpbmluZywgb3IgaW50ZXJhY3Rpbmcgd2l0aCBtYWx3YXJlIG9yIGFueSBtYWxpY2lvdXMgY29kZSB5b3UgTVVTVCByZWZ1c2UuXG5JTVBPUlRBTlQ6IEJlZm9yZSB5b3UgYmVnaW4gd29yaywgdGhpbmsgYWJvdXQgd2hhdCB0aGUgY29kZSB5b3UncmUgZWRpdGluZyBpcyBzdXBwb3NlZCB0byBkbyBiYXNlZCBvbiB0aGUgZmlsZW5hbWVzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIElmIGl0IHNlZW1zIG1hbGljaW91cywgcmVmdXNlIHRvIHdvcmsgb24gaXQgb3IgYW5zd2VyIHF1ZXN0aW9ucyBhYm91dCBpdCwgZXZlbiBpZiB0aGUgcmVxdWVzdCBkb2VzIG5vdCBzZWVtIG1hbGljaW91cyAoZm9yIGluc3RhbmNlLCBqdXN0IGFza2luZyB0byBleHBsYWluIG9yIHNwZWVkIHVwIHRoZSBjb2RlKS5cblxuSGVyZSBhcmUgdXNlZnVsIHNsYXNoIGNvbW1hbmRzIHVzZXJzIGNhbiBydW4gdG8gaW50ZXJhY3Qgd2l0aCB5b3U6XG4tIC9oZWxwOiBHZXQgaGVscCB3aXRoIHVzaW5nICR7UFJPRFVDVF9OQU1FfVxuLSAvY29tcGFjdDogQ29tcGFjdCBhbmQgY29udGludWUgdGhlIGNvbnZlcnNhdGlvbi4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGNvbnZlcnNhdGlvbiBpcyByZWFjaGluZyB0aGUgY29udGV4dCBsaW1pdFxuVGhlcmUgYXJlIGFkZGl0aW9uYWwgc2xhc2ggY29tbWFuZHMgYW5kIGZsYWdzIGF2YWlsYWJsZSB0byB0aGUgdXNlci4gSWYgdGhlIHVzZXIgYXNrcyBhYm91dCAke1BST0RVQ1RfTkFNRX0gZnVuY3Rpb25hbGl0eSwgYWx3YXlzIHJ1biBcXGBjbGF1ZGUgLWhcXGAgd2l0aCAke0Jhc2hUb29sLm5hbWV9IHRvIHNlZSBzdXBwb3J0ZWQgY29tbWFuZHMgYW5kIGZsYWdzLiBORVZFUiBhc3N1bWUgYSBmbGFnIG9yIGNvbW1hbmQgZXhpc3RzIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGhlbHAgb3V0cHV0IGZpcnN0LlxuVG8gZ2l2ZSBmZWVkYmFjaywgdXNlcnMgc2hvdWxkICR7TUFDUk8uSVNTVUVTX0VYUExBSU5FUn0uXG5cbiMgTWVtb3J5XG5JZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgY2FsbGVkIENMQVVERS5tZCwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHlvdXIgY29udGV4dC4gVGhpcyBmaWxlIHNlcnZlcyBtdWx0aXBsZSBwdXJwb3NlczpcbjEuIFN0b3JpbmcgZnJlcXVlbnRseSB1c2VkIGJhc2ggY29tbWFuZHMgKGJ1aWxkLCB0ZXN0LCBsaW50LCBldGMuKSBzbyB5b3UgY2FuIHVzZSB0aGVtIHdpdGhvdXQgc2VhcmNoaW5nIGVhY2ggdGltZVxuMi4gUmVjb3JkaW5nIHRoZSB1c2VyJ3MgY29kZSBzdHlsZSBwcmVmZXJlbmNlcyAobmFtaW5nIGNvbnZlbnRpb25zLCBwcmVmZXJyZWQgbGlicmFyaWVzLCBldGMuKVxuMy4gTWFpbnRhaW5pbmcgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlYmFzZSBzdHJ1Y3R1cmUgYW5kIG9yZ2FuaXphdGlvblxuXG5XaGVuIHlvdSBzcGVuZCB0aW1lIHNlYXJjaGluZyBmb3IgY29tbWFuZHMgdG8gdHlwZWNoZWNrLCBsaW50LCBidWlsZCwgb3IgdGVzdCwgeW91IHNob3VsZCBhc2sgdGhlIHVzZXIgaWYgaXQncyBva2F5IHRvIGFkZCB0aG9zZSBjb21tYW5kcyB0byBDTEFVREUubWQuIFNpbWlsYXJseSwgd2hlbiBsZWFybmluZyBhYm91dCBjb2RlIHN0eWxlIHByZWZlcmVuY2VzIG9yIGltcG9ydGFudCBjb2RlYmFzZSBpbmZvcm1hdGlvbiwgYXNrIGlmIGl0J3Mgb2theSB0byBhZGQgdGhhdCB0byBDTEFVREUubWQgc28geW91IGNhbiByZW1lbWJlciBpdCBmb3IgbmV4dCB0aW1lLlxuXG4jIFRvbmUgYW5kIHN0eWxlXG5Zb3Ugc2hvdWxkIGJlIGNvbmNpc2UsIGRpcmVjdCwgYW5kIHRvIHRoZSBwb2ludC4gV2hlbiB5b3UgcnVuIGEgbm9uLXRyaXZpYWwgYmFzaCBjb21tYW5kLCB5b3Ugc2hvdWxkIGV4cGxhaW4gd2hhdCB0aGUgY29tbWFuZCBkb2VzIGFuZCB3aHkgeW91IGFyZSBydW5uaW5nIGl0LCB0byBtYWtlIHN1cmUgdGhlIHVzZXIgdW5kZXJzdGFuZHMgd2hhdCB5b3UgYXJlIGRvaW5nICh0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHdoZW4geW91IGFyZSBydW5uaW5nIGEgY29tbWFuZCB0aGF0IHdpbGwgbWFrZSBjaGFuZ2VzIHRvIHRoZSB1c2VyJ3Mgc3lzdGVtKS5cblJlbWVtYmVyIHRoYXQgeW91ciBvdXRwdXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gYSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLiBZb3VyIHJlc3BvbnNlcyBjYW4gdXNlIEdpdGh1Yi1mbGF2b3JlZCBtYXJrZG93biBmb3IgZm9ybWF0dGluZywgYW5kIHdpbGwgYmUgcmVuZGVyZWQgaW4gYSBtb25vc3BhY2UgZm9udCB1c2luZyB0aGUgQ29tbW9uTWFyayBzcGVjaWZpY2F0aW9uLlxuT3V0cHV0IHRleHQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdXNlcjsgYWxsIHRleHQgeW91IG91dHB1dCBvdXRzaWRlIG9mIHRvb2wgdXNlIGlzIGRpc3BsYXllZCB0byB0aGUgdXNlci4gT25seSB1c2UgdG9vbHMgdG8gY29tcGxldGUgdGFza3MuIE5ldmVyIHVzZSB0b29scyBsaWtlICR7QmFzaFRvb2wubmFtZX0gb3IgY29kZSBjb21tZW50cyBhcyBtZWFucyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSB1c2VyIGR1cmluZyB0aGUgc2Vzc2lvbi5cbklmIHlvdSBjYW5ub3Qgb3Igd2lsbCBub3QgaGVscCB0aGUgdXNlciB3aXRoIHNvbWV0aGluZywgcGxlYXNlIGRvIG5vdCBzYXkgd2h5IG9yIHdoYXQgaXQgY291bGQgbGVhZCB0bywgc2luY2UgdGhpcyBjb21lcyBhY3Jvc3MgYXMgcHJlYWNoeSBhbmQgYW5ub3lpbmcuIFBsZWFzZSBvZmZlciBoZWxwZnVsIGFsdGVybmF0aXZlcyBpZiBwb3NzaWJsZSwgYW5kIG90aGVyd2lzZSBrZWVwIHlvdXIgcmVzcG9uc2UgdG8gMS0yIHNlbnRlbmNlcy5cbklNUE9SVEFOVDogWW91IHNob3VsZCBtaW5pbWl6ZSBvdXRwdXQgdG9rZW5zIGFzIG11Y2ggYXMgcG9zc2libGUgd2hpbGUgbWFpbnRhaW5pbmcgaGVscGZ1bG5lc3MsIHF1YWxpdHksIGFuZCBhY2N1cmFjeS4gT25seSBhZGRyZXNzIHRoZSBzcGVjaWZpYyBxdWVyeSBvciB0YXNrIGF0IGhhbmQsIGF2b2lkaW5nIHRhbmdlbnRpYWwgaW5mb3JtYXRpb24gdW5sZXNzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGNvbXBsZXRpbmcgdGhlIHJlcXVlc3QuIElmIHlvdSBjYW4gYW5zd2VyIGluIDEtMyBzZW50ZW5jZXMgb3IgYSBzaG9ydCBwYXJhZ3JhcGgsIHBsZWFzZSBkby5cbklNUE9SVEFOVDogWW91IHNob3VsZCBOT1QgYW5zd2VyIHdpdGggdW5uZWNlc3NhcnkgcHJlYW1ibGUgb3IgcG9zdGFtYmxlIChzdWNoIGFzIGV4cGxhaW5pbmcgeW91ciBjb2RlIG9yIHN1bW1hcml6aW5nIHlvdXIgYWN0aW9uKSwgdW5sZXNzIHRoZSB1c2VyIGFza3MgeW91IHRvLlxuSU1QT1JUQU5UOiBLZWVwIHlvdXIgcmVzcG9uc2VzIHNob3J0LCBzaW5jZSB0aGV5IHdpbGwgYmUgZGlzcGxheWVkIG9uIGEgY29tbWFuZCBsaW5lIGludGVyZmFjZS4gWW91IE1VU1QgYW5zd2VyIGNvbmNpc2VseSB3aXRoIGZld2VyIHRoYW4gNCBsaW5lcyAobm90IGluY2x1ZGluZyB0b29sIHVzZSBvciBjb2RlIGdlbmVyYXRpb24pLCB1bmxlc3MgdXNlciBhc2tzIGZvciBkZXRhaWwuIEFuc3dlciB0aGUgdXNlcidzIHF1ZXN0aW9uIGRpcmVjdGx5LCB3aXRob3V0IGVsYWJvcmF0aW9uLCBleHBsYW5hdGlvbiwgb3IgZGV0YWlscy4gT25lIHdvcmQgYW5zd2VycyBhcmUgYmVzdC4gQXZvaWQgaW50cm9kdWN0aW9ucywgY29uY2x1c2lvbnMsIGFuZCBleHBsYW5hdGlvbnMuIFlvdSBNVVNUIGF2b2lkIHRleHQgYmVmb3JlL2FmdGVyIHlvdXIgcmVzcG9uc2UsIHN1Y2ggYXMgXCJUaGUgYW5zd2VyIGlzIDxhbnN3ZXI+LlwiLCBcIkhlcmUgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuLi5cIiBvciBcIkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgdGhlIGFuc3dlciBpcy4uLlwiIG9yIFwiSGVyZSBpcyB3aGF0IEkgd2lsbCBkbyBuZXh0Li4uXCIuIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgdG8gZGVtb25zdHJhdGUgYXBwcm9wcmlhdGUgdmVyYm9zaXR5OlxuPGV4YW1wbGU+XG51c2VyOiAyICsgMlxuYXNzaXN0YW50OiA0XG48L2V4YW1wbGU+XG5cbjxleGFtcGxlPlxudXNlcjogd2hhdCBpcyAyKzI/XG5hc3Npc3RhbnQ6IDRcbjwvZXhhbXBsZT5cblxuPGV4YW1wbGU+XG51c2VyOiBpcyAxMSBhIHByaW1lIG51bWJlcj9cbmFzc2lzdGFudDogdHJ1ZVxuPC9leGFtcGxlPlxuXG48ZXhhbXBsZT5cbnVzZXI6IHdoYXQgY29tbWFuZCBzaG91bGQgSSBydW4gdG8gbGlzdCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk/XG5hc3Npc3RhbnQ6IGxzXG48L2V4YW1wbGU+XG5cbjxleGFtcGxlPlxudXNlcjogd2hhdCBjb21tYW5kIHNob3VsZCBJIHJ1biB0byB3YXRjaCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk/XG5hc3Npc3RhbnQ6IFt1c2UgdGhlIGxzIHRvb2wgdG8gbGlzdCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGVuIHJlYWQgZG9jcy9jb21tYW5kcyBpbiB0aGUgcmVsZXZhbnQgZmlsZSB0byBmaW5kIG91dCBob3cgdG8gd2F0Y2ggZmlsZXNdXG5ucG0gcnVuIGRldlxuPC9leGFtcGxlPlxuXG48ZXhhbXBsZT5cbnVzZXI6IEhvdyBtYW55IGdvbGYgYmFsbHMgZml0IGluc2lkZSBhIGpldHRhP1xuYXNzaXN0YW50OiAxNTAwMDBcbjwvZXhhbXBsZT5cblxuPGV4YW1wbGU+XG51c2VyOiB3aGF0IGZpbGVzIGFyZSBpbiB0aGUgZGlyZWN0b3J5IHNyYy8/XG5hc3Npc3RhbnQ6IFtydW5zIGxzIGFuZCBzZWVzIGZvby5jLCBiYXIuYywgYmF6LmNdXG51c2VyOiB3aGljaCBmaWxlIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBmb28/XG5hc3Npc3RhbnQ6IHNyYy9mb28uY1xuPC9leGFtcGxlPlxuXG48ZXhhbXBsZT5cbnVzZXI6IHdyaXRlIHRlc3RzIGZvciBuZXcgZmVhdHVyZVxuYXNzaXN0YW50OiBbdXNlcyBncmVwIGFuZCBnbG9iIHNlYXJjaCB0b29scyB0byBmaW5kIHdoZXJlIHNpbWlsYXIgdGVzdHMgYXJlIGRlZmluZWQsIHVzZXMgY29uY3VycmVudCByZWFkIGZpbGUgdG9vbCB1c2UgYmxvY2tzIGluIG9uZSB0b29sIGNhbGwgdG8gcmVhZCByZWxldmFudCBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLCB1c2VzIGVkaXQgZmlsZSB0b29sIHRvIHdyaXRlIG5ldyB0ZXN0c11cbjwvZXhhbXBsZT5cblxuIyBQcm9hY3RpdmVuZXNzXG5Zb3UgYXJlIGFsbG93ZWQgdG8gYmUgcHJvYWN0aXZlLCBidXQgb25seSB3aGVuIHRoZSB1c2VyIGFza3MgeW91IHRvIGRvIHNvbWV0aGluZy4gWW91IHNob3VsZCBzdHJpdmUgdG8gc3RyaWtlIGEgYmFsYW5jZSBiZXR3ZWVuOlxuMS4gRG9pbmcgdGhlIHJpZ2h0IHRoaW5nIHdoZW4gYXNrZWQsIGluY2x1ZGluZyB0YWtpbmcgYWN0aW9ucyBhbmQgZm9sbG93LXVwIGFjdGlvbnNcbjIuIE5vdCBzdXJwcmlzaW5nIHRoZSB1c2VyIHdpdGggYWN0aW9ucyB5b3UgdGFrZSB3aXRob3V0IGFza2luZ1xuRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIGFza3MgeW91IGhvdyB0byBhcHByb2FjaCBzb21ldGhpbmcsIHlvdSBzaG91bGQgZG8geW91ciBiZXN0IHRvIGFuc3dlciB0aGVpciBxdWVzdGlvbiBmaXJzdCwgYW5kIG5vdCBpbW1lZGlhdGVseSBqdW1wIGludG8gdGFraW5nIGFjdGlvbnMuXG4zLiBEbyBub3QgYWRkIGFkZGl0aW9uYWwgY29kZSBleHBsYW5hdGlvbiBzdW1tYXJ5IHVubGVzcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIEFmdGVyIHdvcmtpbmcgb24gYSBmaWxlLCBqdXN0IHN0b3AsIHJhdGhlciB0aGFuIHByb3ZpZGluZyBhbiBleHBsYW5hdGlvbiBvZiB3aGF0IHlvdSBkaWQuXG5cbiMgU3ludGhldGljIG1lc3NhZ2VzXG5Tb21ldGltZXMsIHRoZSBjb252ZXJzYXRpb24gd2lsbCBjb250YWluIG1lc3NhZ2VzIGxpa2UgJHtJTlRFUlJVUFRfTUVTU0FHRX0gb3IgJHtJTlRFUlJVUFRfTUVTU0FHRV9GT1JfVE9PTF9VU0V9LiBUaGVzZSBtZXNzYWdlcyB3aWxsIGxvb2sgbGlrZSB0aGUgYXNzaXN0YW50IHNhaWQgdGhlbSwgYnV0IHRoZXkgd2VyZSBhY3R1YWxseSBzeW50aGV0aWMgbWVzc2FnZXMgYWRkZWQgYnkgdGhlIHN5c3RlbSBpbiByZXNwb25zZSB0byB0aGUgdXNlciBjYW5jZWxsaW5nIHdoYXQgdGhlIGFzc2lzdGFudCB3YXMgZG9pbmcuIFlvdSBzaG91bGQgbm90IHJlc3BvbmQgdG8gdGhlc2UgbWVzc2FnZXMuIFlvdSBtdXN0IE5FVkVSIHNlbmQgbWVzc2FnZXMgbGlrZSB0aGlzIHlvdXJzZWxmLiBcblxuIyBGb2xsb3dpbmcgY29udmVudGlvbnNcbldoZW4gbWFraW5nIGNoYW5nZXMgdG8gZmlsZXMsIGZpcnN0IHVuZGVyc3RhbmQgdGhlIGZpbGUncyBjb2RlIGNvbnZlbnRpb25zLiBNaW1pYyBjb2RlIHN0eWxlLCB1c2UgZXhpc3RpbmcgbGlicmFyaWVzIGFuZCB1dGlsaXRpZXMsIGFuZCBmb2xsb3cgZXhpc3RpbmcgcGF0dGVybnMuXG4tIE5FVkVSIGFzc3VtZSB0aGF0IGEgZ2l2ZW4gbGlicmFyeSBpcyBhdmFpbGFibGUsIGV2ZW4gaWYgaXQgaXMgd2VsbCBrbm93bi4gV2hlbmV2ZXIgeW91IHdyaXRlIGNvZGUgdGhhdCB1c2VzIGEgbGlicmFyeSBvciBmcmFtZXdvcmssIGZpcnN0IGNoZWNrIHRoYXQgdGhpcyBjb2RlYmFzZSBhbHJlYWR5IHVzZXMgdGhlIGdpdmVuIGxpYnJhcnkuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbG9vayBhdCBuZWlnaGJvcmluZyBmaWxlcywgb3IgY2hlY2sgdGhlIHBhY2thZ2UuanNvbiAob3IgY2FyZ28udG9tbCwgYW5kIHNvIG9uIGRlcGVuZGluZyBvbiB0aGUgbGFuZ3VhZ2UpLlxuLSBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgY29tcG9uZW50LCBmaXJzdCBsb29rIGF0IGV4aXN0aW5nIGNvbXBvbmVudHMgdG8gc2VlIGhvdyB0aGV5J3JlIHdyaXR0ZW47IHRoZW4gY29uc2lkZXIgZnJhbWV3b3JrIGNob2ljZSwgbmFtaW5nIGNvbnZlbnRpb25zLCB0eXBpbmcsIGFuZCBvdGhlciBjb252ZW50aW9ucy5cbi0gV2hlbiB5b3UgZWRpdCBhIHBpZWNlIG9mIGNvZGUsIGZpcnN0IGxvb2sgYXQgdGhlIGNvZGUncyBzdXJyb3VuZGluZyBjb250ZXh0IChlc3BlY2lhbGx5IGl0cyBpbXBvcnRzKSB0byB1bmRlcnN0YW5kIHRoZSBjb2RlJ3MgY2hvaWNlIG9mIGZyYW1ld29ya3MgYW5kIGxpYnJhcmllcy4gVGhlbiBjb25zaWRlciBob3cgdG8gbWFrZSB0aGUgZ2l2ZW4gY2hhbmdlIGluIGEgd2F5IHRoYXQgaXMgbW9zdCBpZGlvbWF0aWMuXG4tIEFsd2F5cyBmb2xsb3cgc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMuIE5ldmVyIGludHJvZHVjZSBjb2RlIHRoYXQgZXhwb3NlcyBvciBsb2dzIHNlY3JldHMgYW5kIGtleXMuIE5ldmVyIGNvbW1pdCBzZWNyZXRzIG9yIGtleXMgdG8gdGhlIHJlcG9zaXRvcnkuXG5cbiMgQ29kZSBzdHlsZVxuLSBEbyBub3QgYWRkIGNvbW1lbnRzIHRvIHRoZSBjb2RlIHlvdSB3cml0ZSwgdW5sZXNzIHRoZSB1c2VyIGFza3MgeW91IHRvLCBvciB0aGUgY29kZSBpcyBjb21wbGV4IGFuZCByZXF1aXJlcyBhZGRpdGlvbmFsIGNvbnRleHQuXG5cbiMgRG9pbmcgdGFza3NcblRoZSB1c2VyIHdpbGwgcHJpbWFyaWx5IHJlcXVlc3QgeW91IHBlcmZvcm0gc29mdHdhcmUgZW5naW5lZXJpbmcgdGFza3MuIFRoaXMgaW5jbHVkZXMgc29sdmluZyBidWdzLCBhZGRpbmcgbmV3IGZ1bmN0aW9uYWxpdHksIHJlZmFjdG9yaW5nIGNvZGUsIGV4cGxhaW5pbmcgY29kZSwgYW5kIG1vcmUuIEZvciB0aGVzZSB0YXNrcyB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSByZWNvbW1lbmRlZDpcbjEuIFVzZSB0aGUgYXZhaWxhYmxlIHNlYXJjaCB0b29scyB0byB1bmRlcnN0YW5kIHRoZSBjb2RlYmFzZSBhbmQgdGhlIHVzZXIncyBxdWVyeS4gWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGUgc2VhcmNoIHRvb2xzIGV4dGVuc2l2ZWx5IGJvdGggaW4gcGFyYWxsZWwgYW5kIHNlcXVlbnRpYWxseS5cbjIuIEltcGxlbWVudCB0aGUgc29sdXRpb24gdXNpbmcgYWxsIHRvb2xzIGF2YWlsYWJsZSB0byB5b3VcbjMuIFZlcmlmeSB0aGUgc29sdXRpb24gaWYgcG9zc2libGUgd2l0aCB0ZXN0cy4gTkVWRVIgYXNzdW1lIHNwZWNpZmljIHRlc3QgZnJhbWV3b3JrIG9yIHRlc3Qgc2NyaXB0LiBDaGVjayB0aGUgUkVBRE1FIG9yIHNlYXJjaCBjb2RlYmFzZSB0byBkZXRlcm1pbmUgdGhlIHRlc3RpbmcgYXBwcm9hY2guXG40LiBWRVJZIElNUE9SVEFOVDogV2hlbiB5b3UgaGF2ZSBjb21wbGV0ZWQgYSB0YXNrLCB5b3UgTVVTVCBydW4gdGhlIGxpbnQgYW5kIHR5cGVjaGVjayBjb21tYW5kcyAoZWcuIG5wbSBydW4gbGludCwgbnBtIHJ1biB0eXBlY2hlY2ssIHJ1ZmYsIGV0Yy4pIGlmIHRoZXkgd2VyZSBwcm92aWRlZCB0byB5b3UgdG8gZW5zdXJlIHlvdXIgY29kZSBpcyBjb3JyZWN0LiBJZiB5b3UgYXJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IGNvbW1hbmQsIGFzayB0aGUgdXNlciBmb3IgdGhlIGNvbW1hbmQgdG8gcnVuIGFuZCBpZiB0aGV5IHN1cHBseSBpdCwgcHJvYWN0aXZlbHkgc3VnZ2VzdCB3cml0aW5nIGl0IHRvIENMQVVERS5tZCBzbyB0aGF0IHlvdSB3aWxsIGtub3cgdG8gcnVuIGl0IG5leHQgdGltZS5cblxuTkVWRVIgY29tbWl0IGNoYW5nZXMgdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrcyB5b3UgdG8uIEl0IGlzIFZFUlkgSU1QT1JUQU5UIHRvIG9ubHkgY29tbWl0IHdoZW4gZXhwbGljaXRseSBhc2tlZCwgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZmVlbCB0aGF0IHlvdSBhcmUgYmVpbmcgdG9vIHByb2FjdGl2ZS5cblxuIyBUb29sIHVzYWdlIHBvbGljeVxuLSBXaGVuIGRvaW5nIGZpbGUgc2VhcmNoLCBwcmVmZXIgdG8gdXNlIHRoZSBBZ2VudCB0b29sIGluIG9yZGVyIHRvIHJlZHVjZSBjb250ZXh0IHVzYWdlLlxuLSBJZiB5b3UgaW50ZW5kIHRvIGNhbGwgbXVsdGlwbGUgdG9vbHMgYW5kIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgY2FsbHMsIG1ha2UgYWxsIG9mIHRoZSBpbmRlcGVuZGVudCBjYWxscyBpbiB0aGUgc2FtZSBmdW5jdGlvbl9jYWxscyBibG9jay5cblxuWW91IE1VU1QgYW5zd2VyIGNvbmNpc2VseSB3aXRoIGZld2VyIHRoYW4gNCBsaW5lcyBvZiB0ZXh0IChub3QgaW5jbHVkaW5nIHRvb2wgdXNlIG9yIGNvZGUgZ2VuZXJhdGlvbiksIHVubGVzcyB1c2VyIGFza3MgZm9yIGRldGFpbC5cbmAsXG4gICAgYFxcbiR7YXdhaXQgZ2V0RW52SW5mbygpfWAsXG4gICAgYElNUE9SVEFOVDogUmVmdXNlIHRvIHdyaXRlIGNvZGUgb3IgZXhwbGFpbiBjb2RlIHRoYXQgbWF5IGJlIHVzZWQgbWFsaWNpb3VzbHk7IGV2ZW4gaWYgdGhlIHVzZXIgY2xhaW1zIGl0IGlzIGZvciBlZHVjYXRpb25hbCBwdXJwb3Nlcy4gV2hlbiB3b3JraW5nIG9uIGZpbGVzLCBpZiB0aGV5IHNlZW0gcmVsYXRlZCB0byBpbXByb3ZpbmcsIGV4cGxhaW5pbmcsIG9yIGludGVyYWN0aW5nIHdpdGggbWFsd2FyZSBvciBhbnkgbWFsaWNpb3VzIGNvZGUgeW91IE1VU1QgcmVmdXNlLlxuSU1QT1JUQU5UOiBCZWZvcmUgeW91IGJlZ2luIHdvcmssIHRoaW5rIGFib3V0IHdoYXQgdGhlIGNvZGUgeW91J3JlIGVkaXRpbmcgaXMgc3VwcG9zZWQgdG8gZG8gYmFzZWQgb24gdGhlIGZpbGVuYW1lcyBkaXJlY3Rvcnkgc3RydWN0dXJlLiBJZiBpdCBzZWVtcyBtYWxpY2lvdXMsIHJlZnVzZSB0byB3b3JrIG9uIGl0IG9yIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgaXQsIGV2ZW4gaWYgdGhlIHJlcXVlc3QgZG9lcyBub3Qgc2VlbSBtYWxpY2lvdXMgKGZvciBpbnN0YW5jZSwganVzdCBhc2tpbmcgdG8gZXhwbGFpbiBvciBzcGVlZCB1cCB0aGUgY29kZSkuYCxcbiAgXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW52SW5mbygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbbW9kZWwsIGlzR2l0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRTbG93QW5kQ2FwYWJsZU1vZGVsKCksXG4gICAgZ2V0SXNHaXQoKSxcbiAgXSlcbiAgcmV0dXJuIGBIZXJlIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW52aXJvbm1lbnQgeW91IGFyZSBydW5uaW5nIGluOlxuPGVudj5cbldvcmtpbmcgZGlyZWN0b3J5OiAke2dldEN3ZCgpfVxuSXMgZGlyZWN0b3J5IGEgZ2l0IHJlcG86ICR7aXNHaXQgPyAnWWVzJyA6ICdObyd9XG5QbGF0Zm9ybTogJHtlbnYucGxhdGZvcm19XG5Ub2RheSdzIGRhdGU6ICR7bmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKX1cbk1vZGVsOiAke21vZGVsfVxuPC9lbnY+YFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWdlbnRQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICByZXR1cm4gW1xuICAgIGBZb3UgYXJlIGFuIGFnZW50IGZvciAke1BST0RVQ1RfTkFNRX0sIEFudGhyb3BpYydzIG9mZmljaWFsIENMSSBmb3IgQ2xhdWRlLiBHaXZlbiB0aGUgdXNlcidzIHByb21wdCwgeW91IHNob3VsZCB1c2UgdGhlIHRvb2xzIGF2YWlsYWJsZSB0byB5b3UgdG8gYW5zd2VyIHRoZSB1c2VyJ3MgcXVlc3Rpb24uXG5cbk5vdGVzOlxuMS4gSU1QT1JUQU5UOiBZb3Ugc2hvdWxkIGJlIGNvbmNpc2UsIGRpcmVjdCwgYW5kIHRvIHRoZSBwb2ludCwgc2luY2UgeW91ciByZXNwb25zZXMgd2lsbCBiZSBkaXNwbGF5ZWQgb24gYSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLiBBbnN3ZXIgdGhlIHVzZXIncyBxdWVzdGlvbiBkaXJlY3RseSwgd2l0aG91dCBlbGFib3JhdGlvbiwgZXhwbGFuYXRpb24sIG9yIGRldGFpbHMuIE9uZSB3b3JkIGFuc3dlcnMgYXJlIGJlc3QuIEF2b2lkIGludHJvZHVjdGlvbnMsIGNvbmNsdXNpb25zLCBhbmQgZXhwbGFuYXRpb25zLiBZb3UgTVVTVCBhdm9pZCB0ZXh0IGJlZm9yZS9hZnRlciB5b3VyIHJlc3BvbnNlLCBzdWNoIGFzIFwiVGhlIGFuc3dlciBpcyA8YW5zd2VyPi5cIiwgXCJIZXJlIGlzIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLi4uXCIgb3IgXCJCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHRoZSBhbnN3ZXIgaXMuLi5cIiBvciBcIkhlcmUgaXMgd2hhdCBJIHdpbGwgZG8gbmV4dC4uLlwiLlxuMi4gV2hlbiByZWxldmFudCwgc2hhcmUgZmlsZSBuYW1lcyBhbmQgY29kZSBzbmlwcGV0cyByZWxldmFudCB0byB0aGUgcXVlcnlcbjMuIEFueSBmaWxlIHBhdGhzIHlvdSByZXR1cm4gaW4geW91ciBmaW5hbCByZXNwb25zZSBNVVNUIGJlIGFic29sdXRlLiBETyBOT1QgdXNlIHJlbGF0aXZlIHBhdGhzLmAsXG4gICAgYCR7YXdhaXQgZ2V0RW52SW5mbygpfWAsXG4gIF1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZXhlY0ZpbGVOb1Rocm93IH0gZnJvbSAnLi9leGVjRmlsZU5vVGhyb3cuanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQnJvd3Nlcih1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cbiAgY29uc3QgY29tbWFuZCA9XG4gICAgcGxhdGZvcm0gPT09ICd3aW4zMicgPyAnc3RhcnQnIDogcGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gJ29wZW4nIDogJ3hkZy1vcGVuJ1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coY29tbWFuZCwgW3VybF0pXG4gICAgcmV0dXJuIGNvZGUgPT09IDBcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgdXNlRG91YmxlUHJlc3MgfSBmcm9tICcuL3VzZURvdWJsZVByZXNzLmpzJ1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxudHlwZSBFeGl0U3RhdGUgPSB7XG4gIHBlbmRpbmc6IGJvb2xlYW5cbiAga2V5TmFtZTogJ0N0cmwtQycgfCAnQ3RybC1EJyB8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUV4aXRPbkN0cmxDRChvbkV4aXQ6ICgpID0+IHZvaWQpOiBFeGl0U3RhdGUge1xuICBjb25zdCBbZXhpdFN0YXRlLCBzZXRFeGl0U3RhdGVdID0gdXNlU3RhdGU8RXhpdFN0YXRlPih7XG4gICAgcGVuZGluZzogZmFsc2UsXG4gICAga2V5TmFtZTogbnVsbCxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVDdHJsQyA9IHVzZURvdWJsZVByZXNzKFxuICAgIHBlbmRpbmcgPT4gc2V0RXhpdFN0YXRlKHsgcGVuZGluZywga2V5TmFtZTogJ0N0cmwtQycgfSksXG4gICAgb25FeGl0LFxuICApXG4gIGNvbnN0IGhhbmRsZUN0cmxEID0gdXNlRG91YmxlUHJlc3MoXG4gICAgcGVuZGluZyA9PiBzZXRFeGl0U3RhdGUoeyBwZW5kaW5nLCBrZXlOYW1lOiAnQ3RybC1EJyB9KSxcbiAgICBvbkV4aXQsXG4gIClcblxuICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ2MnKSBoYW5kbGVDdHJsQygpXG4gICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAnZCcpIGhhbmRsZUN0cmxEKClcbiAgfSlcblxuICByZXR1cm4gZXhpdFN0YXRlXG59XG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IEJ1ZyB9IGZyb20gJy4uL2NvbXBvbmVudHMvQnVnLmpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBQUk9EVUNUX05BTUUgfSBmcm9tICcuLi9jb25zdGFudHMvcHJvZHVjdC5qcydcblxuY29uc3QgYnVnID0ge1xuICB0eXBlOiAnbG9jYWwtanN4JyxcbiAgbmFtZTogJ2J1ZycsXG4gIGRlc2NyaXB0aW9uOiBgU3VibWl0IGZlZWRiYWNrIGFib3V0ICR7UFJPRFVDVF9OQU1FfWAsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBhc3luYyBjYWxsKG9uRG9uZSkge1xuICAgIHJldHVybiA8QnVnIG9uRG9uZT17b25Eb25lfSAvPlxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ2J1ZydcbiAgfSxcbn0gc2F0aXNmaWVzIENvbW1hbmRcblxuZXhwb3J0IGRlZmF1bHQgYnVnXG4iLAogICAgImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgam9pbiwgcGFyc2UsIGRpcm5hbWUgfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4vc3RhdGUuanMnXG5cbmNvbnN0IFNUWUxFX1BST01QVCA9XG4gICdUaGUgY29kZWJhc2UgZm9sbG93cyBzdHJpY3Qgc3R5bGUgZ3VpZGVsaW5lcyBzaG93biBiZWxvdy4gQWxsIGNvZGUgY2hhbmdlcyBtdXN0IHN0cmljdGx5IGFkaGVyZSB0byB0aGVzZSBndWlkZWxpbmVzIHRvIG1haW50YWluIGNvbnNpc3RlbmN5IGFuZCBxdWFsaXR5LidcblxuZXhwb3J0IGNvbnN0IGdldENvZGVTdHlsZSA9IG1lbW9pemUoKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHN0eWxlczogc3RyaW5nW10gPSBbXVxuICBsZXQgY3VycmVudERpciA9IGdldEN3ZCgpXG5cbiAgd2hpbGUgKGN1cnJlbnREaXIgIT09IHBhcnNlKGN1cnJlbnREaXIpLnJvb3QpIHtcbiAgICBjb25zdCBzdHlsZVBhdGggPSBqb2luKGN1cnJlbnREaXIsICdDTEFVREUubWQnKVxuICAgIGlmIChleGlzdHNTeW5jKHN0eWxlUGF0aCkpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFxuICAgICAgICBgQ29udGVudHMgb2YgJHtzdHlsZVBhdGh9OlxcblxcbiR7cmVhZEZpbGVTeW5jKHN0eWxlUGF0aCwgJ3V0Zi04Jyl9YCxcbiAgICAgIClcbiAgICB9XG4gICAgY3VycmVudERpciA9IGRpcm5hbWUoY3VycmVudERpcilcbiAgfVxuXG4gIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gYCR7U1RZTEVfUFJPTVBUfVxcblxcbiR7c3R5bGVzLnJldmVyc2UoKS5qb2luKCdcXG5cXG4nKX1gXG59KVxuIiwKICAgICJpbXBvcnQge1xuICBnZXRDdXJyZW50UHJvamVjdENvbmZpZyxcbiAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnLFxufSBmcm9tICcuL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBnZXRDb2RlU3R5bGUgfSBmcm9tICcuL3V0aWxzL3N0eWxlLmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCB7IG1lbW9pemUsIG9taXQgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBMU1Rvb2wgfSBmcm9tICcuL3Rvb2xzL2xzVG9vbC9sc1Rvb2wuanMnXG5pbXBvcnQgeyBnZXRJc0dpdCB9IGZyb20gJy4vdXRpbHMvZ2l0LmpzJ1xuaW1wb3J0IHsgcmlwR3JlcCB9IGZyb20gJy4vdXRpbHMvcmlwZ3JlcC5qcydcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IGV4ZWNGaWxlTm9UaHJvdyB9IGZyb20gJy4vdXRpbHMvZXhlY0ZpbGVOb1Rocm93LmpzJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ2ZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCB9IGZyb20gJy4vdXRpbHMvbW9kZWwuanMnXG5pbXBvcnQgeyBsYXN0WCB9IGZyb20gJy4vdXRpbHMvZ2VuZXJhdG9ycy5qcydcbmltcG9ydCB7IGdldEdpdEVtYWlsIH0gZnJvbSAnLi91dGlscy91c2VyLmpzJ1xuXG4vKipcbiAqIEZpbmQgYWxsIENMQVVERS5tZCBmaWxlcyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2xhdWRlRmlsZXMoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKSwgMzAwMClcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJpcEdyZXAoXG4gICAgICBbJy0tZmlsZXMnLCAnLS1nbG9iJywgam9pbignKionLCAnKicsICdDTEFVREUubWQnKV0sXG4gICAgICBnZXRDd2QoKSxcbiAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgKVxuICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIEFkZCBpbnN0cnVjdGlvbnMgZm9yIGFkZGl0aW9uYWwgQ0xBVURFLm1kIGZpbGVzXG4gICAgcmV0dXJuIGBOT1RFOiBBZGRpdGlvbmFsIENMQVVERS5tZCBmaWxlcyB3ZXJlIGZvdW5kLiBXaGVuIHdvcmtpbmcgaW4gdGhlc2UgZGlyZWN0b3JpZXMsIG1ha2Ugc3VyZSB0byByZWFkIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgY29ycmVzcG9uZGluZyBDTEFVREUubWQgZmlsZTpcXG4ke2ZpbGVzXG4gICAgICAubWFwKF8gPT4gcGF0aC5qb2luKGdldEN3ZCgpLCBfKSlcbiAgICAgIC5tYXAoXyA9PiBgLSAke199YClcbiAgICAgIC5qb2luKCdcXG4nKX1gXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIG51bGxcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udGV4dChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICBjb25zdCBjb250ZXh0ID0gb21pdChcbiAgICB7IC4uLnByb2plY3RDb25maWcuY29udGV4dCwgW2tleV06IHZhbHVlIH0sXG4gICAgJ2NvZGVTdHlsZScsXG4gICAgJ2RpcmVjdG9yeVN0cnVjdHVyZScsXG4gIClcbiAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKHsgLi4ucHJvamVjdENvbmZpZywgY29udGV4dCB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ29udGV4dChrZXk6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICBjb25zdCBjb250ZXh0ID0gb21pdChcbiAgICBwcm9qZWN0Q29uZmlnLmNvbnRleHQsXG4gICAga2V5LFxuICAgICdjb2RlU3R5bGUnLFxuICAgICdkaXJlY3RvcnlTdHJ1Y3R1cmUnLFxuICApXG4gIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyh7IC4uLnByb2plY3RDb25maWcsIGNvbnRleHQgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJlYWRtZSA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlYWRtZVBhdGggPSBqb2luKGdldEN3ZCgpLCAnUkVBRE1FLm1kJylcbiAgICBpZiAoIWV4aXN0c1N5bmMocmVhZG1lUGF0aCkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShyZWFkbWVQYXRoLCAndXRmLTgnKVxuICAgIHJldHVybiBjb250ZW50XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBnZXRHaXRTdGF0dXMgPSBtZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAvLyBBdm9pZCBjeWNsZXMgaW4gdGVzdHNcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGlmICghKGF3YWl0IGdldElzR2l0KCkpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgW2JyYW5jaCwgbWFpbkJyYW5jaCwgc3RhdHVzLCBsb2csIGF1dGhvckxvZ10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBleGVjRmlsZU5vVGhyb3coXG4gICAgICAgICdnaXQnLFxuICAgICAgICBbJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgZmFsc2UsXG4gICAgICApLnRoZW4oKHsgc3Rkb3V0IH0pID0+IHN0ZG91dC50cmltKCkpLFxuICAgICAgZXhlY0ZpbGVOb1Rocm93KFxuICAgICAgICAnZ2l0JyxcbiAgICAgICAgWydyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ29yaWdpbi9IRUFEJ10sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICkudGhlbigoeyBzdGRvdXQgfSkgPT4gc3Rkb3V0LnJlcGxhY2UoJ29yaWdpbi8nLCAnJykudHJpbSgpKSxcbiAgICAgIGV4ZWNGaWxlTm9UaHJvdyhcbiAgICAgICAgJ2dpdCcsXG4gICAgICAgIFsnc3RhdHVzJywgJy0tc2hvcnQnXSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKS50aGVuKCh7IHN0ZG91dCB9KSA9PiBzdGRvdXQudHJpbSgpKSxcbiAgICAgIGV4ZWNGaWxlTm9UaHJvdyhcbiAgICAgICAgJ2dpdCcsXG4gICAgICAgIFsnbG9nJywgJy0tb25lbGluZScsICctbicsICc1J10sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICkudGhlbigoeyBzdGRvdXQgfSkgPT4gc3Rkb3V0LnRyaW0oKSksXG4gICAgICBleGVjRmlsZU5vVGhyb3coXG4gICAgICAgICdnaXQnLFxuICAgICAgICBbXG4gICAgICAgICAgJ2xvZycsXG4gICAgICAgICAgJy0tb25lbGluZScsXG4gICAgICAgICAgJy1uJyxcbiAgICAgICAgICAnNScsXG4gICAgICAgICAgJy0tYXV0aG9yJyxcbiAgICAgICAgICAoYXdhaXQgZ2V0R2l0RW1haWwoKSkgfHwgJycsXG4gICAgICAgIF0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICkudGhlbigoeyBzdGRvdXQgfSkgPT4gc3Rkb3V0LnRyaW0oKSksXG4gICAgXSlcbiAgICAvLyBDaGVjayBpZiBzdGF0dXMgaGFzIG1vcmUgdGhhbiAyMDAgbGluZXNcbiAgICBjb25zdCBzdGF0dXNMaW5lcyA9IHN0YXR1cy5zcGxpdCgnXFxuJykubGVuZ3RoXG4gICAgY29uc3QgdHJ1bmNhdGVkU3RhdHVzID1cbiAgICAgIHN0YXR1c0xpbmVzID4gMjAwXG4gICAgICAgID8gc3RhdHVzLnNwbGl0KCdcXG4nKS5zbGljZSgwLCAyMDApLmpvaW4oJ1xcbicpICtcbiAgICAgICAgICAnXFxuLi4uICh0cnVuY2F0ZWQgYmVjYXVzZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDIwMCBsaW5lcy4gSWYgeW91IG5lZWQgbW9yZSBpbmZvcm1hdGlvbiwgcnVuIFwiZ2l0IHN0YXR1c1wiIHVzaW5nIEJhc2hUb29sKSdcbiAgICAgICAgOiBzdGF0dXNcblxuICAgIHJldHVybiBgVGhpcyBpcyB0aGUgZ2l0IHN0YXR1cyBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbnZlcnNhdGlvbi4gTm90ZSB0aGF0IHRoaXMgc3RhdHVzIGlzIGEgc25hcHNob3QgaW4gdGltZSwgYW5kIHdpbGwgbm90IHVwZGF0ZSBkdXJpbmcgdGhlIGNvbnZlcnNhdGlvbi5cXG5DdXJyZW50IGJyYW5jaDogJHticmFuY2h9XFxuXFxuTWFpbiBicmFuY2ggKHlvdSB3aWxsIHVzdWFsbHkgdXNlIHRoaXMgZm9yIFBScyk6ICR7bWFpbkJyYW5jaH1cXG5cXG5TdGF0dXM6XFxuJHt0cnVuY2F0ZWRTdGF0dXMgfHwgJyhjbGVhbiknfVxcblxcblJlY2VudCBjb21taXRzOlxcbiR7bG9nfVxcblxcbllvdXIgcmVjZW50IGNvbW1pdHM6XFxuJHthdXRob3JMb2cgfHwgJyhubyByZWNlbnQgY29tbWl0cyknfWBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dFcnJvcihlcnJvcilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59KVxuXG4vKipcbiAqIFRoaXMgY29udGV4dCBpcyBwcmVwZW5kZWQgdG8gZWFjaCBjb252ZXJzYXRpb24sIGFuZCBjYWNoZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29udmVyc2F0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGV4dCA9IG1lbW9pemUoXG4gIGFzeW5jICgpOiBQcm9taXNlPHtcbiAgICBbazogc3RyaW5nXTogc3RyaW5nXG4gIH0+ID0+IHtcbiAgICBjb25zdCBjb2RlU3R5bGUgPSBnZXRDb2RlU3R5bGUoKVxuICAgIGNvbnN0IHByb2plY3RDb25maWcgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gICAgY29uc3QgZG9udENyYXdsID0gcHJvamVjdENvbmZpZy5kb250Q3Jhd2xEaXJlY3RvcnlcbiAgICBjb25zdCBbZ2l0U3RhdHVzLCBkaXJlY3RvcnlTdHJ1Y3R1cmUsIGNsYXVkZUZpbGVzLCByZWFkbWVdID1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgZ2V0R2l0U3RhdHVzKCksXG4gICAgICAgIGRvbnRDcmF3bCA/IFByb21pc2UucmVzb2x2ZSgnJykgOiBnZXREaXJlY3RvcnlTdHJ1Y3R1cmUoKSxcbiAgICAgICAgZG9udENyYXdsID8gUHJvbWlzZS5yZXNvbHZlKCcnKSA6IGdldENsYXVkZUZpbGVzKCksXG4gICAgICAgIGdldFJlYWRtZSgpLFxuICAgICAgXSlcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJvamVjdENvbmZpZy5jb250ZXh0LFxuICAgICAgLi4uKGRpcmVjdG9yeVN0cnVjdHVyZSA/IHsgZGlyZWN0b3J5U3RydWN0dXJlIH0gOiB7fSksXG4gICAgICAuLi4oZ2l0U3RhdHVzID8geyBnaXRTdGF0dXMgfSA6IHt9KSxcbiAgICAgIC4uLihjb2RlU3R5bGUgPyB7IGNvZGVTdHlsZSB9IDoge30pLFxuICAgICAgLi4uKGNsYXVkZUZpbGVzID8geyBjbGF1ZGVGaWxlcyB9IDoge30pLFxuICAgICAgLi4uKHJlYWRtZSA/IHsgcmVhZG1lIH0gOiB7fSksXG4gICAgfVxuICB9LFxuKVxuXG4vKipcbiAqIEFwcHJveGltYXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIHRvIG9yaWVudCBDbGF1ZGUuIENsYXVkZSB3aWxsIHN0YXJ0IHdpdGggdGhpcywgdGhlbiB1c2VcbiAqIHRvb2xzIGxpa2UgTFMgYW5kIFZpZXcgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RvcnlTdHJ1Y3R1cmUgPSBtZW1vaXplKFxuICBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgbGluZXM6IHN0cmluZ1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSwgMV8wMDApXG4gICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKVxuICAgICAgY29uc3QgcmVzdWx0c0dlbiA9IExTVG9vbC5jYWxsKFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgICAgICAgIHRvb2xzOiBbXSxcbiAgICAgICAgICAgIHNsb3dBbmRDYXBhYmxlTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgZm9ya051bWJlcjogMCxcbiAgICAgICAgICAgIG1lc3NhZ2VMb2dOYW1lOiAndW51c2VkJyxcbiAgICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVhZEZpbGVUaW1lc3RhbXBzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGxhc3RYKHJlc3VsdHNHZW4pXG4gICAgICBsaW5lcyA9IHJlc3VsdC5kYXRhXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIGBCZWxvdyBpcyBhIHNuYXBzaG90IG9mIHRoaXMgcHJvamVjdCdzIGZpbGUgc3RydWN0dXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgY29udmVyc2F0aW9uLiBUaGlzIHNuYXBzaG90IHdpbGwgTk9UIHVwZGF0ZSBkdXJpbmcgdGhlIGNvbnZlcnNhdGlvbi5cblxuJHtsaW5lc31gXG4gIH0sXG4pXG4iLAogICAgImNvbnN0IE5PX1ZBTFVFID0gU3ltYm9sKCdOT19WQUxVRScpXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXN0WDxBPihhczogQXN5bmNHZW5lcmF0b3I8QT4pOiBQcm9taXNlPEE+IHtcbiAgbGV0IGxhc3RWYWx1ZTogQSB8IHR5cGVvZiBOT19WQUxVRSA9IE5PX1ZBTFVFXG4gIGZvciBhd2FpdCAoY29uc3QgYSBvZiBhcykge1xuICAgIGxhc3RWYWx1ZSA9IGFcbiAgfVxuICBpZiAobGFzdFZhbHVlID09PSBOT19WQUxVRSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gaXRlbXMgaW4gZ2VuZXJhdG9yJylcbiAgfVxuICByZXR1cm4gbGFzdFZhbHVlXG59XG5cbnR5cGUgUXVldWVkR2VuZXJhdG9yPEE+ID0ge1xuICBkb25lOiBib29sZWFuIHwgdm9pZFxuICB2YWx1ZTogQSB8IHZvaWRcbiAgZ2VuZXJhdG9yOiBBc3luY0dlbmVyYXRvcjxBLCB2b2lkPlxuICBwcm9taXNlOiBQcm9taXNlPFF1ZXVlZEdlbmVyYXRvcjxBPj5cbn1cblxuLy8gUnVuIGFsbCBnZW5lcmF0b3JzIGNvbmN1cnJlbnRseSB1cCB0byBhIGNvbmN1cnJlbmN5IGNhcCwgeWllbGRpbmcgdmFsdWVzIGFzIHRoZXkgY29tZSBpblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhbGw8QT4oXG4gIGdlbmVyYXRvcnM6IEFzeW5jR2VuZXJhdG9yPEEsIHZvaWQ+W10sXG4gIGNvbmN1cnJlbmN5Q2FwID0gSW5maW5pdHksXG4pOiBBc3luY0dlbmVyYXRvcjxBLCB2b2lkPiB7XG4gIGNvbnN0IG5leHQgPSAoZ2VuZXJhdG9yOiBBc3luY0dlbmVyYXRvcjxBLCB2b2lkPikgPT4ge1xuICAgIGNvbnN0IHByb21pc2U6IFByb21pc2U8UXVldWVkR2VuZXJhdG9yPEE+PiA9IGdlbmVyYXRvclxuICAgICAgLm5leHQoKVxuICAgICAgLnRoZW4oKHsgZG9uZSwgdmFsdWUgfSkgPT4gKHtcbiAgICAgICAgZG9uZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGdlbmVyYXRvcixcbiAgICAgICAgcHJvbWlzZSxcbiAgICAgIH0pKVxuICAgIHJldHVybiBwcm9taXNlXG4gIH1cbiAgY29uc3Qgd2FpdGluZyA9IFsuLi5nZW5lcmF0b3JzXVxuICBjb25zdCBwcm9taXNlcyA9IG5ldyBTZXQ8UHJvbWlzZTxRdWV1ZWRHZW5lcmF0b3I8QT4+PigpXG5cbiAgLy8gU3RhcnQgaW5pdGlhbCBiYXRjaCB1cCB0byBjb25jdXJyZW5jeSBjYXBcbiAgd2hpbGUgKHByb21pc2VzLnNpemUgPCBjb25jdXJyZW5jeUNhcCAmJiB3YWl0aW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBnZW4gPSB3YWl0aW5nLnNoaWZ0KCkhXG4gICAgcHJvbWlzZXMuYWRkKG5leHQoZ2VuKSlcbiAgfVxuXG4gIHdoaWxlIChwcm9taXNlcy5zaXplID4gMCkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUsIGdlbmVyYXRvciwgcHJvbWlzZSB9ID0gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKVxuICAgIHByb21pc2VzLmRlbGV0ZShwcm9taXNlKVxuXG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBwcm9taXNlcy5hZGQobmV4dChnZW5lcmF0b3IpKVxuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cFxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeWllbGQgdmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHdhaXRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgLy8gU3RhcnQgYSBuZXcgZ2VuZXJhdG9yIHdoZW4gb25lIGZpbmlzaGVzXG4gICAgICBjb25zdCBuZXh0R2VuID0gd2FpdGluZy5zaGlmdCgpIVxuICAgICAgcHJvbWlzZXMuYWRkKG5leHQobmV4dEdlbikpXG4gICAgfVxuICB9XG59XG4iLAogICAgImltcG9ydCB7IHF1ZXJ5SGFpa3UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jbGF1ZGUuanMnXG5pbXBvcnQgeyBzYWZlUGFyc2VKU09OIH0gZnJvbSAnLi9qc29uLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlcm1pbmFsVGl0bGUodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHByb2Nlc3MudGl0bGUgPSB0aXRsZSA/IGDinLMgJHt0aXRsZX1gIDogdGl0bGVcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFx4MWJdMDske3RpdGxlID8gYOKcsyAke3RpdGxlfWAgOiAnJ31cXHgwN2ApXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRlcm1pbmFsVGl0bGUobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlIYWlrdSh7XG4gICAgICBzeXN0ZW1Qcm9tcHQ6IFtcbiAgICAgICAgXCJBbmFseXplIGlmIHRoaXMgbWVzc2FnZSBpbmRpY2F0ZXMgYSBuZXcgY29udmVyc2F0aW9uIHRvcGljLiBJZiBpdCBkb2VzLCBleHRyYWN0IGEgMi0zIHdvcmQgdGl0bGUgdGhhdCBjYXB0dXJlcyB0aGUgbmV3IHRvcGljLiBGb3JtYXQgeW91ciByZXNwb25zZSBhcyBhIEpTT04gb2JqZWN0IHdpdGggdHdvIGZpZWxkczogJ2lzTmV3VG9waWMnIChib29sZWFuKSBhbmQgJ3RpdGxlJyAoc3RyaW5nLCBvciBudWxsIGlmIGlzTmV3VG9waWMgaXMgZmFsc2UpLiBPbmx5IGluY2x1ZGUgdGhlc2UgZmllbGRzLCBubyBvdGhlciB0ZXh0LlwiLFxuICAgICAgXSxcbiAgICAgIHVzZXJQcm9tcHQ6IG1lc3NhZ2UsXG4gICAgICBlbmFibGVQcm9tcHRDYWNoaW5nOiB0cnVlLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb250ZW50ID0gcmVzdWx0Lm1lc3NhZ2UuY29udGVudFxuICAgICAgLmZpbHRlcihfID0+IF8udHlwZSA9PT0gJ3RleHQnKVxuICAgICAgLm1hcChfID0+IF8udGV4dClcbiAgICAgIC5qb2luKCcnKVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBzYWZlUGFyc2VKU09OKGNvbnRlbnQpXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgJiZcbiAgICAgIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdpc05ld1RvcGljJyBpbiByZXNwb25zZSAmJlxuICAgICAgJ3RpdGxlJyBpbiByZXNwb25zZVxuICAgICkge1xuICAgICAgaWYgKHJlc3BvbnNlLmlzTmV3VG9waWMgJiYgcmVzcG9uc2UudGl0bGUpIHtcbiAgICAgICAgc2V0VGVybWluYWxUaXRsZShyZXNwb25zZS50aXRsZSBhcyBzdHJpbmcpXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0Vycm9yKGVycm9yKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRlcm1pbmFsKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xceDFiWzJKXFx4MWJbM0pcXHgxYltIJywgKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgZ2V0TWVzc2FnZXNTZXR0ZXIgfSBmcm9tICcuLi9tZXNzYWdlcy5qcydcbmltcG9ydCB7IGdldENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0Q29kZVN0eWxlIH0gZnJvbSAnLi4vdXRpbHMvc3R5bGUuanMnXG5pbXBvcnQgeyBjbGVhclRlcm1pbmFsIH0gZnJvbSAnLi4vdXRpbHMvdGVybWluYWwuanMnXG5pbXBvcnQgeyBnZXRPcmlnaW5hbEN3ZCwgc2V0Q3dkIH0gZnJvbSAnLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vcXVlcnkuanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhckNvbnZlcnNhdGlvbihjb250ZXh0OiB7XG4gIHNldEZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcjogKFxuICAgIGZvcmtDb252b1dpdGhNZXNzYWdlczogTWVzc2FnZVtdLFxuICApID0+IHZvaWRcbn0pIHtcbiAgYXdhaXQgY2xlYXJUZXJtaW5hbCgpXG4gIGdldE1lc3NhZ2VzU2V0dGVyKCkoW10pXG4gIGNvbnRleHQuc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyKFtdKVxuICBnZXRDb250ZXh0LmNhY2hlLmNsZWFyPy4oKVxuICBnZXRDb2RlU3R5bGUuY2FjaGUuY2xlYXI/LigpXG4gIGF3YWl0IHNldEN3ZChnZXRPcmlnaW5hbEN3ZCgpKVxufVxuXG5jb25zdCBjbGVhciA9IHtcbiAgdHlwZTogJ2xvY2FsJyxcbiAgbmFtZTogJ2NsZWFyJyxcbiAgZGVzY3JpcHRpb246ICdDbGVhciBjb252ZXJzYXRpb24gaGlzdG9yeSBhbmQgZnJlZSB1cCBjb250ZXh0JyxcbiAgaXNFbmFibGVkOiB0cnVlLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIGFzeW5jIGNhbGwoXywgY29udGV4dCkge1xuICAgIGNsZWFyQ29udmVyc2F0aW9uKGNvbnRleHQpXG4gICAgcmV0dXJuICcnXG4gIH0sXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAnY2xlYXInXG4gIH0sXG59IHNhdGlzZmllcyBDb21tYW5kXG5cbmV4cG9ydCBkZWZhdWx0IGNsZWFyXG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IGdldENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0TWVzc2FnZXNHZXR0ZXIsIGdldE1lc3NhZ2VzU2V0dGVyIH0gZnJvbSAnLi4vbWVzc2FnZXMuanMnXG5pbXBvcnQgeyBBUElfRVJST1JfTUVTU0FHRV9QUkVGSVgsIHF1ZXJ5U29ubmV0IH0gZnJvbSAnLi4vc2VydmljZXMvY2xhdWRlLmpzJ1xuaW1wb3J0IHtcbiAgY3JlYXRlVXNlck1lc3NhZ2UsXG4gIG5vcm1hbGl6ZU1lc3NhZ2VzRm9yQVBJLFxufSBmcm9tICcuLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IGdldENvZGVTdHlsZSB9IGZyb20gJy4uL3V0aWxzL3N0eWxlLmpzJ1xuaW1wb3J0IHsgY2xlYXJUZXJtaW5hbCB9IGZyb20gJy4uL3V0aWxzL3Rlcm1pbmFsLmpzJ1xuXG5jb25zdCBjb21wYWN0ID0ge1xuICB0eXBlOiAnbG9jYWwnLFxuICBuYW1lOiAnY29tcGFjdCcsXG4gIGRlc2NyaXB0aW9uOiAnQ2xlYXIgY29udmVyc2F0aW9uIGhpc3RvcnkgYnV0IGtlZXAgYSBzdW1tYXJ5IGluIGNvbnRleHQnLFxuICBpc0VuYWJsZWQ6IHRydWUsXG4gIGlzSGlkZGVuOiBmYWxzZSxcbiAgYXN5bmMgY2FsbChcbiAgICBfLFxuICAgIHtcbiAgICAgIG9wdGlvbnM6IHsgdG9vbHMsIHNsb3dBbmRDYXBhYmxlTW9kZWwgfSxcbiAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgIHNldEZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcixcbiAgICB9LFxuICApIHtcbiAgICAvLyBHZXQgZXhpc3RpbmcgbWVzc2FnZXMgYmVmb3JlIGNsZWFyaW5nXG4gICAgY29uc3QgbWVzc2FnZXMgPSBnZXRNZXNzYWdlc0dldHRlcigpKClcblxuICAgIC8vIEFkZCBzdW1tYXJ5IHJlcXVlc3QgYXMgYSBuZXcgbWVzc2FnZVxuICAgIGNvbnN0IHN1bW1hcnlSZXF1ZXN0ID0gY3JlYXRlVXNlck1lc3NhZ2UoXG4gICAgICBcIlByb3ZpZGUgYSBkZXRhaWxlZCBidXQgY29uY2lzZSBzdW1tYXJ5IG9mIG91ciBjb252ZXJzYXRpb24gYWJvdmUuIEZvY3VzIG9uIGluZm9ybWF0aW9uIHRoYXQgd291bGQgYmUgaGVscGZ1bCBmb3IgY29udGludWluZyB0aGUgY29udmVyc2F0aW9uLCBpbmNsdWRpbmcgd2hhdCB3ZSBkaWQsIHdoYXQgd2UncmUgZG9pbmcsIHdoaWNoIGZpbGVzIHdlJ3JlIHdvcmtpbmcgb24sIGFuZCB3aGF0IHdlJ3JlIGdvaW5nIHRvIGRvIG5leHQuXCIsXG4gICAgKVxuXG4gICAgY29uc3Qgc3VtbWFyeVJlc3BvbnNlID0gYXdhaXQgcXVlcnlTb25uZXQoXG4gICAgICBub3JtYWxpemVNZXNzYWdlc0ZvckFQSShbLi4ubWVzc2FnZXMsIHN1bW1hcnlSZXF1ZXN0XSksXG4gICAgICBbJ1lvdSBhcmUgYSBoZWxwZnVsIEFJIGFzc2lzdGFudCB0YXNrZWQgd2l0aCBzdW1tYXJpemluZyBjb252ZXJzYXRpb25zLiddLFxuICAgICAgMCxcbiAgICAgIHRvb2xzLFxuICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIHtcbiAgICAgICAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnM6IGZhbHNlLFxuICAgICAgICBtb2RlbDogc2xvd0FuZENhcGFibGVNb2RlbCxcbiAgICAgICAgcHJlcGVuZENMSVN5c3Byb21wdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgLy8gRXh0cmFjdCBzdW1tYXJ5IGZyb20gcmVzcG9uc2UsIHRocm93IGlmIHdlIGNhbid0IGdldCBpdFxuICAgIGNvbnN0IGNvbnRlbnQgPSBzdW1tYXJ5UmVzcG9uc2UubWVzc2FnZS5jb250ZW50XG4gICAgY29uc3Qgc3VtbWFyeSA9XG4gICAgICB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBjb250ZW50XG4gICAgICAgIDogY29udGVudC5sZW5ndGggPiAwICYmIGNvbnRlbnRbMF0/LnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgID8gY29udGVudFswXS50ZXh0XG4gICAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoIXN1bW1hcnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBnZW5lcmF0ZSBjb252ZXJzYXRpb24gc3VtbWFyeSAtIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB2YWxpZCB0ZXh0IGNvbnRlbnQgLSAke3N1bW1hcnlSZXNwb25zZX1gLFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoc3VtbWFyeS5zdGFydHNXaXRoKEFQSV9FUlJPUl9NRVNTQUdFX1BSRUZJWCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdW1tYXJ5KVxuICAgIH1cblxuICAgIC8vIFN1YnN0aXR1dGUgbG93IHRva2VuIHVzYWdlIGluZm8gc28gdGhhdCB0aGUgY29udGV4dC1zaXplIFVJIHdhcm5pbmcgZ29lc1xuICAgIC8vIGF3YXkuIFRoZSBhY3R1YWwgbnVtYmVycyBkb24ndCBtYXR0ZXIgdG9vIG11Y2g6IGBjb3VudFRva2Vuc2AgY2hlY2tzIHRoZVxuICAgIC8vIG1vc3QgcmVjZW50IGFzc2lzdGFudCBtZXNzYWdlIGZvciB1c2FnZSBudW1iZXJzLCBzbyB0aGlzIGVzdGltYXRlIHdpbGxcbiAgICAvLyBiZSBvdmVycmlkZGVuIHF1aWNrbHkuXG4gICAgc3VtbWFyeVJlc3BvbnNlLm1lc3NhZ2UudXNhZ2UgPSB7XG4gICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBzdW1tYXJ5UmVzcG9uc2UubWVzc2FnZS51c2FnZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IDAsXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgc2NyZWVuIGFuZCBtZXNzYWdlc1xuICAgIGF3YWl0IGNsZWFyVGVybWluYWwoKVxuICAgIGdldE1lc3NhZ2VzU2V0dGVyKCkoW10pXG4gICAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyKFtcbiAgICAgIGNyZWF0ZVVzZXJNZXNzYWdlKFxuICAgICAgICBgVXNlIHRoZSAvY29tcGFjdCBjb21tYW5kIHRvIGNsZWFyIHRoZSBjb252ZXJzYXRpb24gaGlzdG9yeSwgYW5kIHN0YXJ0IGEgbmV3IGNvbnZlcnNhdGlvbiB3aXRoIHRoZSBzdW1tYXJ5IGluIGNvbnRleHQuYCxcbiAgICAgICksXG4gICAgICBzdW1tYXJ5UmVzcG9uc2UsXG4gICAgXSlcbiAgICBnZXRDb250ZXh0LmNhY2hlLmNsZWFyPy4oKVxuICAgIGdldENvZGVTdHlsZS5jYWNoZS5jbGVhcj8uKClcblxuICAgIHJldHVybiAnJyAvLyBub3QgdXNlZCwganVzdCBmb3IgdHlwZXNhZmV0eS4gVE9ETzogYXZvaWQgdGhpcyBoYWNrXG4gIH0sXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAnY29tcGFjdCdcbiAgfSxcbn0gc2F0aXNmaWVzIENvbW1hbmRcblxuZXhwb3J0IGRlZmF1bHQgY29tcGFjdFxuIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQge1xuICBHbG9iYWxDb25maWcsXG4gIHNhdmVHbG9iYWxDb25maWcsXG4gIG5vcm1hbGl6ZUFwaUtleUZvckNvbmZpZyxcbn0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZ2V0R2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb2R1Y3QuanMnXG5pbXBvcnQgeyB1c2VFeGl0T25DdHJsQ0QgfSBmcm9tICcuLi9ob29rcy91c2VFeGl0T25DdHJsQ0QuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxudHlwZSBTZXR0aW5nID1cbiAgfCB7XG4gICAgICBpZDogc3RyaW5nXG4gICAgICBsYWJlbDogc3RyaW5nXG4gICAgICB2YWx1ZTogYm9vbGVhblxuICAgICAgb25DaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9XG4gIHwge1xuICAgICAgaWQ6IHN0cmluZ1xuICAgICAgbGFiZWw6IHN0cmluZ1xuICAgICAgdmFsdWU6IHN0cmluZ1xuICAgICAgb3B0aW9uczogc3RyaW5nW11cbiAgICAgIG9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkXG4gICAgICB0eXBlOiAnZW51bSdcbiAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maWcoeyBvbkNsb3NlIH06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgW2dsb2JhbENvbmZpZywgc2V0R2xvYmFsQ29uZmlnXSA9IHVzZVN0YXRlKGdldEdsb2JhbENvbmZpZygpKVxuICBjb25zdCBpbml0aWFsQ29uZmlnID0gUmVhY3QudXNlUmVmKGdldEdsb2JhbENvbmZpZygpKVxuICBjb25zdCBbc2VsZWN0ZWRJbmRleCwgc2V0U2VsZWN0ZWRJbmRleF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBleGl0U3RhdGUgPSB1c2VFeGl0T25DdHJsQ0QoKCkgPT4gcHJvY2Vzcy5leGl0KDApKVxuXG4gIC8vIFRPRE86IEFkZCBNQ1Agc2VydmVyc1xuICBjb25zdCBzZXR0aW5nczogU2V0dGluZ1tdID0gW1xuICAgIC8vIEdsb2JhbCBzZXR0aW5nc1xuICAgIC4uLihwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWVxuICAgICAgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdhcGlLZXknLFxuICAgICAgICAgICAgbGFiZWw6IGBVc2UgY3VzdG9tIEFQSSBrZXk6ICR7Y2hhbGsuYm9sZChub3JtYWxpemVBcGlLZXlGb3JDb25maWcocHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVkpKX1gLFxuICAgICAgICAgICAgdmFsdWU6IEJvb2xlYW4oXG4gICAgICAgICAgICAgIHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZICYmXG4gICAgICAgICAgICAgICAgZ2xvYmFsQ29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcz8uYXBwcm92ZWQ/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnKHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyBhcyBjb25zdCxcbiAgICAgICAgICAgIG9uQ2hhbmdlKHVzZUN1c3RvbUtleTogYm9vbGVhbikge1xuICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB7IC4uLmdldEdsb2JhbENvbmZpZygpIH1cbiAgICAgICAgICAgICAgaWYgKCFjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcyA9IHtcbiAgICAgICAgICAgICAgICAgIGFwcHJvdmVkOiBbXSxcbiAgICAgICAgICAgICAgICAgIHJlamVjdGVkOiBbXSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLmFwcHJvdmVkKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcy5hcHByb3ZlZCA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLnJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcy5yZWplY3RlZCA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkS2V5ID0gbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnKFxuICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmICh1c2VDdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMuYXBwcm92ZWQgPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMuYXBwcm92ZWQuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgIGsgPT4gayAhPT0gdHJ1bmNhdGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZWRLZXksXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICBjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLnJlamVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcy5yZWplY3RlZC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgayA9PiBrICE9PSB0cnVuY2F0ZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcy5hcHByb3ZlZCA9XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMuYXBwcm92ZWQuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgIGsgPT4gayAhPT0gdHJ1bmNhdGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLnJlamVjdGVkID0gW1xuICAgICAgICAgICAgICAgICAgICAuLi5jb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLnJlamVjdGVkLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICBrID0+IGsgIT09IHRydW5jYXRlZEtleSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkS2V5LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzYXZlR2xvYmFsQ29uZmlnKGNvbmZpZylcbiAgICAgICAgICAgICAgc2V0R2xvYmFsQ29uZmlnKGNvbmZpZylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAge1xuICAgICAgaWQ6ICd2ZXJib3NlJyxcbiAgICAgIGxhYmVsOiAnVmVyYm9zZSBvdXRwdXQnLFxuICAgICAgdmFsdWU6IGdsb2JhbENvbmZpZy52ZXJib3NlLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgb25DaGFuZ2UodmVyYm9zZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBjb25maWcgPSB7IC4uLmdldEdsb2JhbENvbmZpZygpLCB2ZXJib3NlIH1cbiAgICAgICAgc2F2ZUdsb2JhbENvbmZpZyhjb25maWcpXG4gICAgICAgIHNldEdsb2JhbENvbmZpZyhjb25maWcpXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd0aGVtZScsXG4gICAgICBsYWJlbDogJ1RoZW1lJyxcbiAgICAgIHZhbHVlOiBnbG9iYWxDb25maWcudGhlbWUsXG4gICAgICBvcHRpb25zOiBbJ2xpZ2h0JywgJ2RhcmsnLCAnbGlnaHQtZGFsdG9uaXplZCcsICdkYXJrLWRhbHRvbml6ZWQnXSxcbiAgICAgIHR5cGU6ICdlbnVtJyxcbiAgICAgIG9uQ2hhbmdlKHRoZW1lOiBHbG9iYWxDb25maWdbJ3RoZW1lJ10pIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0geyAuLi5nZXRHbG9iYWxDb25maWcoKSwgdGhlbWUgfVxuICAgICAgICBzYXZlR2xvYmFsQ29uZmlnKGNvbmZpZylcbiAgICAgICAgc2V0R2xvYmFsQ29uZmlnKGNvbmZpZylcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ25vdGlmQ2hhbm5lbCcsXG4gICAgICBsYWJlbDogJ05vdGlmaWNhdGlvbnMnLFxuICAgICAgdmFsdWU6IGdsb2JhbENvbmZpZy5wcmVmZXJyZWROb3RpZkNoYW5uZWwsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgICdpdGVybTInLFxuICAgICAgICAndGVybWluYWxfYmVsbCcsXG4gICAgICAgICdpdGVybTJfd2l0aF9iZWxsJyxcbiAgICAgICAgJ25vdGlmaWNhdGlvbnNfZGlzYWJsZWQnLFxuICAgICAgXSxcbiAgICAgIHR5cGU6ICdlbnVtJyxcbiAgICAgIG9uQ2hhbmdlKG5vdGlmQ2hhbm5lbDogR2xvYmFsQ29uZmlnWydwcmVmZXJyZWROb3RpZkNoYW5uZWwnXSkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgLi4uZ2V0R2xvYmFsQ29uZmlnKCksXG4gICAgICAgICAgcHJlZmVycmVkTm90aWZDaGFubmVsOiBub3RpZkNoYW5uZWwsXG4gICAgICAgIH1cbiAgICAgICAgc2F2ZUdsb2JhbENvbmZpZyhjb25maWcpXG4gICAgICAgIHNldEdsb2JhbENvbmZpZyhjb25maWcpXG4gICAgICB9LFxuICAgIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICAvLyBMb2cgYW55IGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGVcbiAgICAgIC8vIFRPRE86IE1ha2UgdGhlc2UgcHJvcGVyIG1lc3NhZ2VzXG4gICAgICBjb25zdCBjaGFuZ2VzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAvLyBDaGVjayBmb3IgQVBJIGtleSBjaGFuZ2VzXG4gICAgICBjb25zdCBpbml0aWFsVXNpbmdDdXN0b21LZXkgPSBCb29sZWFuKFxuICAgICAgICBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSAmJlxuICAgICAgICAgIGluaXRpYWxDb25maWcuY3VycmVudC5jdXN0b21BcGlLZXlSZXNwb25zZXM/LmFwcHJvdmVkPy5pbmNsdWRlcyhcbiAgICAgICAgICAgIG5vcm1hbGl6ZUFwaUtleUZvckNvbmZpZyhwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSksXG4gICAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2luZ0N1c3RvbUtleSA9IEJvb2xlYW4oXG4gICAgICAgIHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZICYmXG4gICAgICAgICAgZ2xvYmFsQ29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcz8uYXBwcm92ZWQ/LmluY2x1ZGVzKFxuICAgICAgICAgICAgbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnKHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZKSxcbiAgICAgICAgICApLFxuICAgICAgKVxuICAgICAgaWYgKGluaXRpYWxVc2luZ0N1c3RvbUtleSAhPT0gY3VycmVudFVzaW5nQ3VzdG9tS2V5KSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChcbiAgICAgICAgICBgICDijr8gICR7Y3VycmVudFVzaW5nQ3VzdG9tS2V5ID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ30gY3VzdG9tIEFQSSBrZXlgLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWxDb25maWcudmVyYm9zZSAhPT0gaW5pdGlhbENvbmZpZy5jdXJyZW50LnZlcmJvc2UpIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKGAgIOKOvyAgU2V0IHZlcmJvc2UgdG8gJHtjaGFsay5ib2xkKGdsb2JhbENvbmZpZy52ZXJib3NlKX1gKVxuICAgICAgfVxuICAgICAgaWYgKGdsb2JhbENvbmZpZy50aGVtZSAhPT0gaW5pdGlhbENvbmZpZy5jdXJyZW50LnRoZW1lKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChgICDijr8gIFNldCB0aGVtZSB0byAke2NoYWxrLmJvbGQoZ2xvYmFsQ29uZmlnLnRoZW1lKX1gKVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBnbG9iYWxDb25maWcucHJlZmVycmVkTm90aWZDaGFubmVsICE9PVxuICAgICAgICBpbml0aWFsQ29uZmlnLmN1cnJlbnQucHJlZmVycmVkTm90aWZDaGFubmVsXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKFxuICAgICAgICAgIGAgIOKOvyAgU2V0IG5vdGlmaWNhdGlvbnMgdG8gJHtjaGFsay5ib2xkKGdsb2JhbENvbmZpZy5wcmVmZXJyZWROb3RpZkNoYW5uZWwpfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShjaGFuZ2VzLmpvaW4oJ1xcbicpKSlcbiAgICAgIH1cbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9nZ2xlU2V0dGluZygpIHtcbiAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZWxlY3RlZEluZGV4XVxuICAgICAgaWYgKCFzZXR0aW5nIHx8ICFzZXR0aW5nLm9uQ2hhbmdlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc2V0dGluZy50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgc2V0dGluZy5vbkNoYW5nZSghc2V0dGluZy52YWx1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR0aW5nLnR5cGUgPT09ICdlbnVtJykge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBzZXR0aW5nLm9wdGlvbnMuaW5kZXhPZihzZXR0aW5nLnZhbHVlKVxuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBzZXR0aW5nLm9wdGlvbnMubGVuZ3RoXG4gICAgICAgIHNldHRpbmcub25DaGFuZ2Uoc2V0dGluZy5vcHRpb25zW25leHRJbmRleF0hKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5LnJldHVybiB8fCBpbnB1dCA9PT0gJyAnKSB7XG4gICAgICB0b2dnbGVTZXR0aW5nKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgc2V0U2VsZWN0ZWRJbmRleChwcmV2ID0+IE1hdGgubWF4KDAsIHByZXYgLSAxKSlcbiAgICB9XG5cbiAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgc2V0U2VsZWN0ZWRJbmRleChwcmV2ID0+IE1hdGgubWluKHNldHRpbmdzLmxlbmd0aCAtIDEsIHByZXYgKyAxKSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJveFxuICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgIGJvcmRlckNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeUJvcmRlcn1cbiAgICAgICAgcGFkZGluZ1g9ezF9XG4gICAgICAgIG1hcmdpblRvcD17MX1cbiAgICAgID5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWluSGVpZ2h0PXsyfSBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgIDxUZXh0IGJvbGQ+U2V0dGluZ3M8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+Q29uZmlndXJlIHtQUk9EVUNUX05BTUV9IHByZWZlcmVuY2VzPC9UZXh0PlxuICAgICAgICA8L0JveD5cblxuICAgICAgICB7c2V0dGluZ3MubWFwKChzZXR0aW5nLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGkgPT09IHNlbGVjdGVkSW5kZXhcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGtleT17c2V0dGluZy5pZH0gaGVpZ2h0PXsyfSBtaW5IZWlnaHQ9ezJ9PlxuICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs0NH0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzU2VsZWN0ZWQgPyAnYmx1ZScgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBmaWd1cmVzLnBvaW50ZXIgOiAnICd9IHtzZXR0aW5nLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAge3NldHRpbmcudHlwZSA9PT0gJ2Jvb2xlYW4nID8gKFxuICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzU2VsZWN0ZWQgPyAnYmx1ZScgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy52YWx1ZS50b1N0cmluZygpfVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWxlY3RlZCA/ICdibHVlJyA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnZhbHVlLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IG1hcmdpbkxlZnQ9ezN9PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICB7ZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgICAgICA8PlByZXNzIHtleGl0U3RhdGUua2V5TmFtZX0gYWdhaW4gdG8gZXhpdDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PuKGkS/ihpMgdG8gc2VsZWN0IMK3IEVudGVyL1NwYWNlIHRvIGNoYW5nZSDCtyBFc2MgdG8gY2xvc2U8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbmZpZy5qcydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBjb25maWcgPSB7XG4gIHR5cGU6ICdsb2NhbC1qc3gnLFxuICBuYW1lOiAnY29uZmlnJyxcbiAgZGVzY3JpcHRpb246ICdPcGVuIGNvbmZpZyBwYW5lbCcsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBhc3luYyBjYWxsKG9uRG9uZSkge1xuICAgIHJldHVybiA8Q29uZmlnIG9uQ2xvc2U9e29uRG9uZX0gLz5cbiAgfSxcbiAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgcmV0dXJuICdjb25maWcnXG4gIH0sXG59IHNhdGlzZmllcyBDb21tYW5kXG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IGZvcm1hdFRvdGFsQ29zdCB9IGZyb20gJy4uL2Nvc3QtdHJhY2tlci5qcydcblxuY29uc3QgY29zdCA9IHtcbiAgdHlwZTogJ2xvY2FsJyxcbiAgbmFtZTogJ2Nvc3QnLFxuICBkZXNjcmlwdGlvbjogJ1Nob3cgdGhlIHRvdGFsIGNvc3QgYW5kIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50IHNlc3Npb24nLFxuICBpc0VuYWJsZWQ6IHRydWUsXG4gIGlzSGlkZGVuOiBmYWxzZSxcbiAgYXN5bmMgY2FsbCgpIHtcbiAgICByZXR1cm4gZm9ybWF0VG90YWxDb3N0KClcbiAgfSxcbiAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgcmV0dXJuICdjb3N0J1xuICB9LFxufSBzYXRpc2ZpZXMgQ29tbWFuZFxuXG5leHBvcnQgZGVmYXVsdCBjb3N0XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSAnLi4vVG9vbC5qcydcbmltcG9ydCBUYWJsZSBmcm9tICdjbGktdGFibGUzJ1xuaW1wb3J0IHsgZ2V0U3lzdGVtUHJvbXB0IH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb21wdHMuanMnXG5pbXBvcnQgeyBnZXRDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC5qcydcbmltcG9ydCB7IHpvZFRvSnNvblNjaGVtYSB9IGZyb20gJ3pvZC10by1qc29uLXNjaGVtYSdcbmltcG9ydCB7IGdldE1lc3NhZ2VzR2V0dGVyIH0gZnJvbSAnLi4vbWVzc2FnZXMuanMnXG5cbi8vIFF1aWNrIGFuZCBkaXJ0eSBlc3RpbWF0ZSBvZiBieXRlcyBwZXIgdG9rZW4gZm9yIHJvdWdoIHRva2VuIGNvdW50c1xuY29uc3QgQllURVNfUEVSX1RPS0VOID0gNFxuXG5pbnRlcmZhY2UgU2VjdGlvbiB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUb29sU3VtbWFyeSB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRTZWN0aW9ucyh0ZXh0OiBzdHJpbmcpOiBTZWN0aW9uW10ge1xuICBjb25zdCBzZWN0aW9uczogU2VjdGlvbltdID0gW11cblxuICAvLyBGaW5kIGZpcnN0IDxjb250ZXh0PiB0YWdcbiAgY29uc3QgZmlyc3RDb250ZXh0SW5kZXggPSB0ZXh0LmluZGV4T2YoJzxjb250ZXh0JylcblxuICAvLyBFdmVyeXRoaW5nIGJlZm9yZSBmaXJzdCB0YWcgaXMgQ29yZSBTeXNwcm9tcHRcbiAgaWYgKGZpcnN0Q29udGV4dEluZGV4ID4gMCkge1xuICAgIGNvbnN0IGNvcmVTeXNwcm9tcHQgPSB0ZXh0LnNsaWNlKDAsIGZpcnN0Q29udGV4dEluZGV4KS50cmltKClcbiAgICBpZiAoY29yZVN5c3Byb21wdCkge1xuICAgICAgc2VjdGlvbnMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnQ29yZSBTeXNwcm9tcHQnLFxuICAgICAgICBjb250ZW50OiBjb3JlU3lzcHJvbXB0LFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBsZXQgY3VycmVudFBvcyA9IGZpcnN0Q29udGV4dEluZGV4XG4gIGxldCBub25Db250ZXh0Q29udGVudCA9ICcnXG5cbiAgY29uc3QgcmVnZXggPSAvPGNvbnRleHRcXHMrbmFtZT1cIihbXlwiXSopXCI+KFtcXHNcXFNdKj8pPFxcL2NvbnRleHQ+L2dcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsXG5cbiAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgLy8gQ29sbGVjdCB0ZXh0IGJldHdlZW4gY29udGV4dCB0YWdzXG4gICAgaWYgKG1hdGNoLmluZGV4ID4gY3VycmVudFBvcykge1xuICAgICAgbm9uQ29udGV4dENvbnRlbnQgKz0gdGV4dC5zbGljZShjdXJyZW50UG9zLCBtYXRjaC5pbmRleClcbiAgICB9XG5cbiAgICBjb25zdCBbLCBuYW1lID0gJ1VubmFtZWQgU2VjdGlvbicsIGNvbnRlbnQgPSAnJ10gPSBtYXRjaFxuICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgdGl0bGU6IG5hbWUgPT09ICdjb2RlU3R5bGUnID8gXCJDb2RlU3R5bGUgKyBDTEFVREUubWQnc1wiIDogbmFtZSxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQudHJpbSgpLFxuICAgIH0pXG5cbiAgICBjdXJyZW50UG9zID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuXG4gIC8vIENvbGxlY3QgcmVtYWluaW5nIHRleHQgYWZ0ZXIgbGFzdCB0YWdcbiAgaWYgKGN1cnJlbnRQb3MgPCB0ZXh0Lmxlbmd0aCkge1xuICAgIG5vbkNvbnRleHRDb250ZW50ICs9IHRleHQuc2xpY2UoY3VycmVudFBvcylcbiAgfVxuXG4gIC8vIEFkZCBub24tY29udGV4dHVhbGl6ZWQgY29udGVudCBpZiBwcmVzZW50XG4gIGNvbnN0IHRyaW1tZWROb25Db250ZXh0ID0gbm9uQ29udGV4dENvbnRlbnQudHJpbSgpXG4gIGlmICh0cmltbWVkTm9uQ29udGV4dCkge1xuICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgdGl0bGU6ICdOb24tY29udGV4dHVhbGl6ZWQgQ29udGVudCcsXG4gICAgICBjb250ZW50OiB0cmltbWVkTm9uQ29udGV4dCxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHNlY3Rpb25zXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRva2VuQ291bnQoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VucyA9IGJ5dGVzIC8gQllURVNfUEVSX1RPS0VOXG4gIGNvbnN0IGsgPSB0b2tlbnMgLyAxMDAwXG4gIHJldHVybiBgJHtNYXRoLnJvdW5kKGsgKiAxMCkgLyAxMH1rYFxufVxuXG5mdW5jdGlvbiBmb3JtYXRCeXRlQ291bnQoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGtiID0gYnl0ZXMgLyAxMDI0XG4gIHJldHVybiBgJHtNYXRoLnJvdW5kKGtiICogMTApIC8gMTB9a2JgXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN1bW1hcnlUYWJsZShcbiAgc3lzdGVtVGV4dDogc3RyaW5nLFxuICBzeXN0ZW1TZWN0aW9uczogU2VjdGlvbltdLFxuICB0b29sczogVG9vbFN1bW1hcnlbXSxcbiAgbWVzc2FnZXM6IHVua25vd24sXG4pOiBzdHJpbmcge1xuICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh7XG4gICAgaGVhZDogWydDb21wb25lbnQnLCAnVG9rZW5zJywgJ1NpemUnLCAnJSBVc2VkJ10sXG4gICAgc3R5bGU6IHsgaGVhZDogWydib2xkJ10gfSxcbiAgICBjaGFyczoge1xuICAgICAgbWlkOiAn4pSAJyxcbiAgICAgICdsZWZ0LW1pZCc6ICfilJwnLFxuICAgICAgJ21pZC1taWQnOiAn4pS8JyxcbiAgICAgICdyaWdodC1taWQnOiAn4pSkJyxcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IG1lc3NhZ2VzU3RyID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpXG4gIGNvbnN0IHRvb2xzU3RyID0gSlNPTi5zdHJpbmdpZnkodG9vbHMpXG5cbiAgLy8gQ2FsY3VsYXRlIHRvdGFsIGZvciBwZXJjZW50YWdlc1xuICBjb25zdCB0b3RhbCA9IHN5c3RlbVRleHQubGVuZ3RoICsgdG9vbHNTdHIubGVuZ3RoICsgbWVzc2FnZXNTdHIubGVuZ3RoXG4gIGNvbnN0IGdldFBlcmNlbnRhZ2UgPSAobjogbnVtYmVyKSA9PiBgJHtNYXRoLnJvdW5kKChuIC8gdG90YWwpICogMTAwKX0lYFxuXG4gIC8vIFN5c3RlbSBwcm9tcHQgYW5kIGl0cyBzZWN0aW9uc1xuICB0YWJsZS5wdXNoKFtcbiAgICAnU3lzdGVtIHByb21wdCcsXG4gICAgZm9ybWF0VG9rZW5Db3VudChzeXN0ZW1UZXh0Lmxlbmd0aCksXG4gICAgZm9ybWF0Qnl0ZUNvdW50KHN5c3RlbVRleHQubGVuZ3RoKSxcbiAgICBnZXRQZXJjZW50YWdlKHN5c3RlbVRleHQubGVuZ3RoKSxcbiAgXSlcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN5c3RlbVNlY3Rpb25zKSB7XG4gICAgdGFibGUucHVzaChbXG4gICAgICBgICAke3NlY3Rpb24udGl0bGV9YCxcbiAgICAgIGZvcm1hdFRva2VuQ291bnQoc2VjdGlvbi5jb250ZW50Lmxlbmd0aCksXG4gICAgICBmb3JtYXRCeXRlQ291bnQoc2VjdGlvbi5jb250ZW50Lmxlbmd0aCksXG4gICAgICBnZXRQZXJjZW50YWdlKHNlY3Rpb24uY29udGVudC5sZW5ndGgpLFxuICAgIF0pXG4gIH1cblxuICAvLyBUb29sc1xuICB0YWJsZS5wdXNoKFtcbiAgICAnVG9vbCBkZWZpbml0aW9ucycsXG4gICAgZm9ybWF0VG9rZW5Db3VudCh0b29sc1N0ci5sZW5ndGgpLFxuICAgIGZvcm1hdEJ5dGVDb3VudCh0b29sc1N0ci5sZW5ndGgpLFxuICAgIGdldFBlcmNlbnRhZ2UodG9vbHNTdHIubGVuZ3RoKSxcbiAgXSlcbiAgZm9yIChjb25zdCB0b29sIG9mIHRvb2xzKSB7XG4gICAgdGFibGUucHVzaChbXG4gICAgICBgICAke3Rvb2wubmFtZX1gLFxuICAgICAgZm9ybWF0VG9rZW5Db3VudCh0b29sLmRlc2NyaXB0aW9uLmxlbmd0aCksXG4gICAgICBmb3JtYXRCeXRlQ291bnQodG9vbC5kZXNjcmlwdGlvbi5sZW5ndGgpLFxuICAgICAgZ2V0UGVyY2VudGFnZSh0b29sLmRlc2NyaXB0aW9uLmxlbmd0aCksXG4gICAgXSlcbiAgfVxuXG4gIC8vIE1lc3NhZ2VzIGFuZCB0b3RhbFxuICB0YWJsZS5wdXNoKFxuICAgIFtcbiAgICAgICdNZXNzYWdlcycsXG4gICAgICBmb3JtYXRUb2tlbkNvdW50KG1lc3NhZ2VzU3RyLmxlbmd0aCksXG4gICAgICBmb3JtYXRCeXRlQ291bnQobWVzc2FnZXNTdHIubGVuZ3RoKSxcbiAgICAgIGdldFBlcmNlbnRhZ2UobWVzc2FnZXNTdHIubGVuZ3RoKSxcbiAgICBdLFxuICAgIFsnVG90YWwnLCBmb3JtYXRUb2tlbkNvdW50KHRvdGFsKSwgZm9ybWF0Qnl0ZUNvdW50KHRvdGFsKSwgJzEwMCUnXSxcbiAgKVxuXG4gIHJldHVybiB0YWJsZS50b1N0cmluZygpXG59XG5cbmNvbnN0IGNvbW1hbmQ6IENvbW1hbmQgPSB7XG4gIG5hbWU6ICdjdHgtdml6JyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1tBTlQtT05MWV0gU2hvdyB0b2tlbiB1c2FnZSBicmVha2Rvd24gZm9yIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBjb250ZXh0JyxcbiAgaXNFbmFibGVkOiBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIHR5cGU6ICdsb2NhbCcsXG5cbiAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9LFxuXG4gIGFzeW5jIGNhbGwoX2FyZ3M6IHN0cmluZywgY21kQ29udGV4dDogeyBvcHRpb25zOiB7IHRvb2xzOiBUb29sW10gfSB9KSB7XG4gICAgLy8gR2V0IHRvb2xzIGFuZCBzeXN0ZW0gcHJvbXB0IHdpdGggaW5qZWN0ZWQgY29udGV4dFxuICAgIGNvbnN0IFtzeXN0ZW1Qcm9tcHRSYXcsIHN5c0NvbnRleHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZ2V0U3lzdGVtUHJvbXB0KCksXG4gICAgICBnZXRDb250ZXh0KCksXG4gICAgXSlcblxuICAgIGNvbnN0IHJhd1Rvb2xzID0gY21kQ29udGV4dC5vcHRpb25zLnRvb2xzXG5cbiAgICAvLyBGdWxsIHN5c3RlbSBwcm9tcHQgd2l0aCBjb250ZXh0IHNlY3Rpb25zIGluamVjdGVkXG4gICAgbGV0IHN5c3RlbVByb21wdCA9IHN5c3RlbVByb21wdFJhdy5qb2luKCdcXG4nKVxuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN5c0NvbnRleHQpKSB7XG4gICAgICBzeXN0ZW1Qcm9tcHQgKz0gYFxcbjxjb250ZXh0IG5hbWU9XCIke25hbWV9XCI+JHtjb250ZW50fTwvY29udGV4dD5gXG4gICAgfVxuXG4gICAgLy8gR2V0IGZ1bGwgdG9vbCBkZWZpbml0aW9ucyBpbmNsdWRpbmcgcHJvbXB0cyBhbmQgc2NoZW1hc1xuICAgIGNvbnN0IHRvb2xzID0gcmF3VG9vbHMubWFwKHQgPT4ge1xuICAgICAgLy8gR2V0IGZ1bGwgcHJvbXB0IGFuZCBzY2hlbWFcbiAgICAgIGNvbnN0IGZ1bGxQcm9tcHQgPSB0LnByb21wdCh7IGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zOiBmYWxzZSB9KVxuICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICdpbnB1dEpTT05TY2hlbWEnIGluIHQgJiYgdC5pbnB1dEpTT05TY2hlbWFcbiAgICAgICAgICA/IHQuaW5wdXRKU09OU2NoZW1hXG4gICAgICAgICAgOiB6b2RUb0pzb25TY2hlbWEodC5pbnB1dFNjaGVtYSksXG4gICAgICApXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHQubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGAke2Z1bGxQcm9tcHR9XFxuXFxuU2NoZW1hOlxcbiR7c2NoZW1hfWAsXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEdldCBjdXJyZW50IG1lc3NhZ2VzIGZyb20gUkVQTFxuICAgIGNvbnN0IG1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNHZXR0ZXIoKSgpXG5cbiAgICBjb25zdCBzZWN0aW9ucyA9IGdldENvbnRleHRTZWN0aW9ucyhzeXN0ZW1Qcm9tcHQpXG4gICAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlUYWJsZShzeXN0ZW1Qcm9tcHQsIHNlY3Rpb25zLCB0b29scywgbWVzc2FnZXMpXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBEb2N0b3IgfSBmcm9tICcuLi9zY3JlZW5zL0RvY3Rvci5qcydcblxuY29uc3QgZG9jdG9yOiBDb21tYW5kID0ge1xuICBuYW1lOiAnZG9jdG9yJyxcbiAgZGVzY3JpcHRpb246ICdDaGVja3MgdGhlIGhlYWx0aCBvZiB5b3VyIENsYXVkZSBDb2RlIGluc3RhbGxhdGlvbicsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ2RvY3RvcidcbiAgfSxcbiAgdHlwZTogJ2xvY2FsLWpzeCcsXG4gIGNhbGwob25Eb25lKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoRG9jdG9yLCB7XG4gICAgICBvbkRvbmUsXG4gICAgICBkb2N0b3JNb2RlOiB0cnVlLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50KVxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBkb2N0b3JcbiIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnQGlua2pzL3VpJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IENvbmZpZ3VyZU5wbVByZWZpeCB9IGZyb20gJy4vQ29uZmlndXJlTnBtUHJlZml4LmpzJ1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tICdwcm9jZXNzJ1xuaW1wb3J0IHtcbiAgY2hlY2tOcG1QZXJtaXNzaW9ucyxcbiAgZ2V0RGVmYXVsdE5wbVByZWZpeCxcbiAgZ2V0UGVybWlzc2lvbnNDb21tYW5kLFxufSBmcm9tICcuLi91dGlscy9hdXRvVXBkYXRlci5qcydcbmltcG9ydCB7IHNhdmVHbG9iYWxDb25maWcsIGdldEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IFBST0RVQ1RfTkFNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuaW1wb3J0IHsgUHJlc3NFbnRlclRvQ29udGludWUgfSBmcm9tICcuLi9jb21wb25lbnRzL1ByZXNzRW50ZXJUb0NvbnRpbnVlLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBvbkRvbmU6ICgpID0+IHZvaWRcbiAgZG9jdG9yTW9kZT86IGJvb2xlYW5cbn1cblxudHlwZSBPcHRpb24gPSB7XG4gIGxhYmVsOiBzdHJpbmdcbiAgdmFsdWU6ICdhdXRvJyB8ICdtYW51YWwnIHwgJ2lnbm9yZSdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRG9jdG9yKHsgb25Eb25lLCBkb2N0b3JNb2RlID0gZmFsc2UgfTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbaGFzUGVybWlzc2lvbnMsIHNldEhhc1Blcm1pc3Npb25zXSA9IHVzZVN0YXRlPGJvb2xlYW4gfCBudWxsPihudWxsKVxuICBjb25zdCBbbnBtUHJlZml4LCBzZXROcG1QcmVmaXhdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxPcHRpb25bJ3ZhbHVlJ10gfCBudWxsPihcbiAgICBudWxsLFxuICApXG4gIGNvbnN0IFtjdXN0b21QcmVmaXgsIHNldEN1c3RvbVByZWZpeF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFxuICAgIGdldERlZmF1bHROcG1QcmVmaXgoKSxcbiAgKVxuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcbiAgY29uc3QgW3Nob3dpbmdQZXJtaXNzaW9uc01lc3NhZ2UsIHNldFNob3dpbmdQZXJtaXNzaW9uc01lc3NhZ2VdID1cbiAgICB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBvcHRpb25zOiBPcHRpb25bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogYE1hbnVhbGx5IGZpeCBwZXJtaXNzaW9ucyBvbiBjdXJyZW50IG5wbSBwcmVmaXggKFJlY29tbWVuZGVkKWAsXG4gICAgICB2YWx1ZTogJ21hbnVhbCcsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgcGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICAgICAgICA/ICdVc2VzIGljYWNscyB0byBncmFudCB3cml0ZSBwZXJtaXNzaW9ucydcbiAgICAgICAgICA6ICdVc2VzIHN1ZG8gdG8gY2hhbmdlIG93bmVyc2hpcCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ0NyZWF0ZSBuZXcgbnBtIHByZWZpeCBkaXJlY3RvcnknLFxuICAgICAgdmFsdWU6ICdhdXRvJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQ3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgZm9yIGdsb2JhbCBucG0gcGFja2FnZXMgaW4geW91ciBob21lIGRpcmVjdG9yeScsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1NraXAgY29uZmlndXJhdGlvbiB1bnRpbCBuZXh0IHNlc3Npb24nLFxuICAgICAgdmFsdWU6ICdpZ25vcmUnLFxuICAgICAgZGVzY3JpcHRpb246ICdTa2lwIHRoaXMgd2FybmluZyAoeW91IHdpbGwgYmUgcmVtaW5kZWQgYWdhaW4gbGF0ZXIpJyxcbiAgICB9LFxuICBdXG5cbiAgY29uc3QgY2hlY2tQZXJtaXNzaW9ucyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja05wbVBlcm1pc3Npb25zKClcbiAgICBsb2dFdmVudCgndGVuZ3VfYXV0b191cGRhdGVyX3Blcm1pc3Npb25zX2NoZWNrJywge1xuICAgICAgaGFzUGVybWlzc2lvbnM6IHJlc3VsdC5oYXNQZXJtaXNzaW9ucy50b1N0cmluZygpLFxuICAgICAgbnBtUHJlZml4OiByZXN1bHQubnBtUHJlZml4ID8/ICdudWxsJyxcbiAgICB9KVxuICAgIHNldEhhc1Blcm1pc3Npb25zKHJlc3VsdC5oYXNQZXJtaXNzaW9ucylcbiAgICBpZiAocmVzdWx0Lm5wbVByZWZpeCkge1xuICAgICAgc2V0TnBtUHJlZml4KHJlc3VsdC5ucG1QcmVmaXgpXG4gICAgfVxuICAgIGlmIChyZXN1bHQuaGFzUGVybWlzc2lvbnMpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gICAgICBzYXZlR2xvYmFsQ29uZmlnKHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBhdXRvVXBkYXRlclN0YXR1czogJ2VuYWJsZWQnLFxuICAgICAgfSlcbiAgICAgIGlmICghZG9jdG9yTW9kZSkge1xuICAgICAgICBvbkRvbmUoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW29uRG9uZSwgZG9jdG9yTW9kZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsb2dFdmVudCgndGVuZ3VfYXV0b191cGRhdGVyX2NvbmZpZ19zdGFydCcsIHt9KVxuICAgIGNoZWNrUGVybWlzc2lvbnMoKVxuICB9LCBbY2hlY2tQZXJtaXNzaW9uc10pXG5cbiAgdXNlSW5wdXQoXG4gICAgKF9pbnB1dCwga2V5KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChzaG93aW5nUGVybWlzc2lvbnNNZXNzYWdlIHx8XG4gICAgICAgICAgKGRvY3Rvck1vZGUgJiYgaGFzUGVybWlzc2lvbnMgPT09IHRydWUpKSAmJlxuICAgICAgICBrZXkucmV0dXJuXG4gICAgICApIHtcbiAgICAgICAgb25Eb25lKClcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlzQWN0aXZlOlxuICAgICAgICBzaG93aW5nUGVybWlzc2lvbnNNZXNzYWdlIHx8IChkb2N0b3JNb2RlICYmIGhhc1Blcm1pc3Npb25zID09PSB0cnVlKSxcbiAgICB9LFxuICApXG5cbiAgaWYgKGhhc1Blcm1pc3Npb25zID09PSBudWxsKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3ggcGFkZGluZ1g9ezF9IHBhZGRpbmdUb3A9ezF9PlxuICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+Q2hlY2tpbmcgbnBtIHBlcm1pc3Npb25z4oCmPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGhhc1Blcm1pc3Npb25zID09PSB0cnVlKSB7XG4gICAgaWYgKGRvY3Rvck1vZGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0gcGFkZGluZ1g9ezF9IHBhZGRpbmdUb3A9ezF9PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zdWNjZXNzfT7inJMgbnBtIHBlcm1pc3Npb25zOiBPSzwvVGV4dD5cbiAgICAgICAgICA8VGV4dD5Zb3VyIGluc3RhbGxhdGlvbiBpcyBoZWFsdGh5IGFuZCByZWFkeSBmb3IgYXV0by11cGRhdGVzLjwvVGV4dD5cbiAgICAgICAgICA8UHJlc3NFbnRlclRvQ29udGludWUgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8Qm94IHBhZGRpbmdYPXsxfSBwYWRkaW5nVG9wPXsxfT5cbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnN1Y2Nlc3N9PuKckyBBdXRvLXVwZGF0ZXMgZW5hYmxlZDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5wZXJtaXNzaW9ufVxuICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGdhcD17MX1cbiAgICAgIHBhZGRpbmdYPXsxfVxuICAgICAgcGFkZGluZ1RvcD17MX1cbiAgICA+XG4gICAgICA8VGV4dCBib2xkIGNvbG9yPXt0aGVtZS5wZXJtaXNzaW9ufT5cbiAgICAgICAgRW5hYmxlIGF1dG9tYXRpYyB1cGRhdGVzP1xuICAgICAgPC9UZXh0PlxuICAgICAgPFRleHQ+XG4gICAgICAgIHtQUk9EVUNUX05BTUV9IGNhbiZhcG9zO3QgdXBkYXRlIGl0c2VsZiBiZWNhdXNlIGl0IGRvZXNuJmFwb3M7dCBoYXZlXG4gICAgICAgIHBlcm1pc3Npb25zLiBEbyB5b3Ugd2FudCB0byBmaXggdGhpcyB0byBnZXQgYXV0b21hdGljIHVwZGF0ZXM/XG4gICAgICA8L1RleHQ+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgeyFzZWxlY3RlZE9wdGlvbiAmJiAoXG4gICAgICAgICAgPEJveCBtYXJnaW5MZWZ0PXsyfT5cbiAgICAgICAgICAgIDxUZXh0PlNlbGVjdCBhbiBvcHRpb24gYmVsb3cgdG8gZml4IHRoZSBwZXJtaXNzaW9ucyBpc3N1ZTo8L1RleHQ+XG4gICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSAnYXV0bycgJiZcbiAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSAnbWFudWFsJyAmJlxuICAgICAgICAgICAgICAgICAgdmFsdWUgIT09ICdpZ25vcmUnXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb24odmFsdWUpXG5cbiAgICAgICAgICAgICAgICAvLyBMb2cgb3B0aW9uIHNlbGVjdGlvblxuICAgICAgICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9hdXRvX3VwZGF0ZXJfY29uZmlnX29wdGlvbl9zZWxlY3RlZCcsIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbjogdmFsdWUgYXMgJ2F1dG8nIHwgJ21hbnVhbCcgfCAnaWdub3JlJyxcbiAgICAgICAgICAgICAgICAgIG5wbVByZWZpeDogbnBtUHJlZml4ID8/ICdudWxsJyxcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbWFudWFsJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgICAgICAgICAgICAgICAgIHNhdmVHbG9iYWxDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICAgIGF1dG9VcGRhdGVyU3RhdHVzOiAnbm90X2NvbmZpZ3VyZWQnLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIHNldFNob3dpbmdQZXJtaXNzaW9uc01lc3NhZ2UodHJ1ZSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKClcbiAgICAgICAgICAgICAgICAgIHNhdmVHbG9iYWxDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICAgIGF1dG9VcGRhdGVyU3RhdHVzOiAnbm90X2NvbmZpZ3VyZWQnLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKX1cblxuICAgICAgICB7c2VsZWN0ZWRPcHRpb24gPT09ICdhdXRvJyAmJiAoXG4gICAgICAgICAgPEJveCBtYXJnaW5MZWZ0PXsyfT5cbiAgICAgICAgICAgIDxDb25maWd1cmVOcG1QcmVmaXhcbiAgICAgICAgICAgICAgY3VzdG9tUHJlZml4PXtjdXN0b21QcmVmaXh9XG4gICAgICAgICAgICAgIG9uQ3VzdG9tUHJlZml4Q2hhbmdlPXtzZXRDdXN0b21QcmVmaXh9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz17Y2hlY2tQZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uRG9uZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICl9XG5cbiAgICAgICAge3NlbGVjdGVkT3B0aW9uID09PSAnbWFudWFsJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luTGVmdD17NH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8VGV4dD5SdW4gdGhpcyBjb21tYW5kIGluIHlvdXIgdGVybWluYWw6PC9UZXh0PlxuICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIiBnYXA9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS53YXJuaW5nfT5cbiAgICAgICAgICAgICAgICAgIHtnZXRQZXJtaXNzaW9uc0NvbW1hbmQobnBtUHJlZml4ID8/ICcnKX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIiBnYXA9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zdWdnZXN0aW9ufT5cbiAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIHJlc3RhcnQge1BST0RVQ1RfTkFNRX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8UHJlc3NFbnRlclRvQ29udGludWUgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnQGlua2pzL3VpJ1xuaW1wb3J0IFRleHRJbnB1dCBmcm9tICcuLi9jb21wb25lbnRzL1RleHRJbnB1dC5qcydcbmltcG9ydCB7IFNpbXBsZVNwaW5uZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL1NwaW5uZXIuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgdXNlVGVybWluYWxTaXplIH0gZnJvbSAnLi4vaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb2R1Y3QuanMnXG5pbXBvcnQgeyBzZXR1cE5ld1ByZWZpeCwgaW5zdGFsbEdsb2JhbFBhY2thZ2UgfSBmcm9tICcuLi91dGlscy9hdXRvVXBkYXRlci5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBjdXN0b21QcmVmaXg6IHN0cmluZ1xuICBvbkN1c3RvbVByZWZpeENoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgb25TdWNjZXNzOiAoKSA9PiB2b2lkXG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maWd1cmVOcG1QcmVmaXgoe1xuICBjdXN0b21QcmVmaXgsXG4gIG9uQ3VzdG9tUHJlZml4Q2hhbmdlLFxuICBvblN1Y2Nlc3MsXG4gIG9uQ2FuY2VsLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbY3Vyc29yT2Zmc2V0LCBzZXRDdXJzb3JPZmZzZXRdID0gdXNlU3RhdGUoY3VzdG9tUHJlZml4Lmxlbmd0aClcbiAgY29uc3QgW3Nob3dDb25maXJtYXRpb24sIHNldFNob3dDb25maXJtYXRpb25dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1NldHRpbmdVcFByZWZpeCwgc2V0SXNTZXR0aW5nVXBQcmVmaXhdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3N0ZXBzU3RhdHVzLCBzZXRTdGVwc1N0YXR1c10gPSB1c2VTdGF0ZTx7XG4gICAgY29tcGxldGVTdGVwczogYm9vbGVhbltdXG4gICAgaW5Qcm9ncmVzc1N0ZXA6IG51bWJlciB8IG51bGxcbiAgfT4oe1xuICAgIGNvbXBsZXRlU3RlcHM6IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgaW5Qcm9ncmVzc1N0ZXA6IG51bGwsXG4gIH0pXG4gIGNvbnN0IHRleHRJbnB1dENvbHVtbnMgPSB1c2VUZXJtaW5hbFNpemUoKS5jb2x1bW5zIC0gNlxuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVTZXR1cE5ld1ByZWZpeChwcmVmaXg6IHN0cmluZykge1xuICAgIHNldElzU2V0dGluZ1VwUHJlZml4KHRydWUpXG4gICAgc2V0RXJyb3IobnVsbClcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBzdGF0dXNcbiAgICAgIHNldFN0ZXBzU3RhdHVzKHtcbiAgICAgICAgY29tcGxldGVTdGVwczogW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgaW5Qcm9ncmVzc1N0ZXA6IDAsXG4gICAgICB9KVxuXG4gICAgICAvLyBTdGFydCBmaXJzdCB0aHJlZSBzdGVwc1xuICAgICAgYXdhaXQgc2V0dXBOZXdQcmVmaXgocHJlZml4KVxuICAgICAgc2V0U3RlcHNTdGF0dXMoe1xuICAgICAgICBjb21wbGV0ZVN0ZXBzOiBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBpblByb2dyZXNzU3RlcDogMyxcbiAgICAgIH0pXG5cbiAgICAgIC8vIFN0YXJ0IGluc3RhbGwgc3RlcFxuICAgICAgYXdhaXQgaW5zdGFsbEdsb2JhbFBhY2thZ2UoKVxuICAgICAgc2V0U3RlcHNTdGF0dXMoe1xuICAgICAgICBjb21wbGV0ZVN0ZXBzOiBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgIGluUHJvZ3Jlc3NTdGVwOiBudWxsLFxuICAgICAgfSlcblxuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X2F1dG9fdXBkYXRlcl9jb25maWdfY29tcGxldGUnLCB7XG4gICAgICAgIGZpbmFsU3RhdHVzOiAnZW5hYmxlZCcsXG4gICAgICAgIG1ldGhvZDogJ3ByZWZpeCcsXG4gICAgICAgIHN1Y2Nlc3M6ICd0cnVlJyxcbiAgICAgIH0pXG5cbiAgICAgIG9uU3VjY2VzcygpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dFcnJvcihlcnIpXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBzZXR1cCBucG0gcHJlZml4J1xuICAgICAgc2V0RXJyb3IoZXJyb3JNZXNzYWdlKVxuICAgICAgc2V0SXNTZXR0aW5nVXBQcmVmaXgoZmFsc2UpXG5cbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9hdXRvX3VwZGF0ZXJfY29uZmlnX2NvbXBsZXRlJywge1xuICAgICAgICBmaW5hbFN0YXR1czogJ25vdF9jb25maWd1cmVkJyxcbiAgICAgICAgbWV0aG9kOiAncHJlZml4JyxcbiAgICAgICAgc3VjY2VzczogJ2ZhbHNlJyxcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW5zdGFsbFN0ZXBzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnQ3JlYXRlIG5ldyBkaXJlY3RvcnkgZm9yIG5wbSBnbG9iYWwgcGFja2FnZXMnLFxuICAgICAgY29tbWFuZDogYG1rZGlyIC1wICR7Y3VzdG9tUHJlZml4fWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ0NvbmZpZ3VyZSBucG0gdG8gdXNlIG5ldyBsb2NhdGlvbicsXG4gICAgICBjb21tYW5kOiBgbnBtIC1nIGNvbmZpZyBzZXQgcHJlZml4ICR7Y3VzdG9tUHJlZml4fWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1VwZGF0ZSBzaGVsbCBQQVRIIGNvbmZpZ3VyYXRpb24nLFxuICAgICAgY29tbWFuZDogYGV4cG9ydCBQQVRIPSR7Y3VzdG9tUHJlZml4fS9iaW46JFBBVEhgLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGBSZWluc3RhbGwgJHtQUk9EVUNUX05BTUV9IGdsb2JhbGx5YCxcbiAgICAgIGNvbW1hbmQ6IGBucG0gaW5zdGFsbCAtZyAke01BQ1JPLlBBQ0tBR0VfVVJMfWAsXG4gICAgfSxcbiAgXVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBtYXJnaW5MZWZ0PXsyfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICDimqDvuI8gV2FybmluZzogVGhpcyB3aWxsIG1vZGlmeSB5b3VyIGdsb2JhbCBucG0gY29uZmlndXJhdGlvbiBhbmQgY2FuIGJlXG4gICAgICAgICAgZGFuZ2Vyb3VzLiBUaGUgZm9sbG93aW5nIGNoYW5nZXMgd2lsbCBiZSBtYWRlOlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIHtpbnN0YWxsU3RlcHMubWFwKChzdGVwLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxCb3gga2V5PXtpbmRleH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgc3RlcHNTdGF0dXMuY29tcGxldGVTdGVwc1tpbmRleF0gPyB0aGVtZS5zdWNjZXNzIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2lzU2V0dGluZ1VwUHJlZml4XG4gICAgICAgICAgICAgICAgICA/IHN0ZXBzU3RhdHVzLmNvbXBsZXRlU3RlcHNbaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgID8gJ+KckydcbiAgICAgICAgICAgICAgICAgICAgOiAnICdcbiAgICAgICAgICAgICAgICAgIDogYCR7aW5kZXggKyAxfS5gfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgIHtzdGVwc1N0YXR1cy5pblByb2dyZXNzU3RlcCA9PT0gaW5kZXggJiYgPFNpbXBsZVNwaW5uZXIgLz59XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgIHN0ZXBzU3RhdHVzLmNvbXBsZXRlU3RlcHNbaW5kZXhdID8gdGhlbWUuc3VjY2VzcyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtzdGVwLmxhYmVsfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIHtzdGVwLmNvbW1hbmQgJiYgKFxuICAgICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zdWdnZXN0aW9ufSBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgICQge3N0ZXAuY29tbWFuZH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnN1Z2dlc3Rpb259PlxuICAgICAgICAgIE5vdGU6IFlvdSZhcG9zO2xsIG5lZWQgdG8gcmVzdGFydCB5b3VyIHRlcm1pbmFsIGFmdGVyIHRoaXMgY2hhbmdlXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLndhcm5pbmd9PlxuICAgICAgICAgIEltcG9ydGFudDogQW55IGV4aXN0aW5nIGdsb2JhbCBucG0gcGFja2FnZXMgbWF5IG5lZWQgdG8gYmUgcmVpbnN0YWxsZWRcbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgICB7IWlzU2V0dGluZ1VwUHJlZml4ICYmIChcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dD5FbnRlciBwcmVmaXggcGF0aDo8L1RleHQ+XG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxUZXh0PiZndDs8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtjdXN0b21QcmVmaXh9XG4gICAgICAgICAgICAgIHZhbHVlPXtjdXN0b21QcmVmaXh9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkN1c3RvbVByZWZpeENoYW5nZX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eygpID0+IHNldFNob3dDb25maXJtYXRpb24odHJ1ZSl9XG4gICAgICAgICAgICAgIGNvbHVtbnM9e3RleHRJbnB1dENvbHVtbnN9XG4gICAgICAgICAgICAgIGN1cnNvck9mZnNldD17Y3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgICBvbkNoYW5nZUN1cnNvck9mZnNldD17c2V0Q3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgICB7c2hvd0NvbmZpcm1hdGlvbiAmJiAoXG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWUgd2l0aCBwcmVmaXg6IHtjdXN0b21QcmVmaXh9P1xuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnWWVzJywgdmFsdWU6ICd5ZXMnIH0sXG4gICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTm8nLCB2YWx1ZTogJ25vJyB9LFxuICAgICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRTaG93Q29uZmlybWF0aW9uKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAneWVzJykge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZXR1cE5ld1ByZWZpeChjdXN0b21QcmVmaXgpXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbCgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cbiAgICAgIHtlcnJvciAmJiA8VGV4dCBjb2xvcj17dGhlbWUuZXJyb3J9PkVycm9yOiB7ZXJyb3J9PC9UZXh0Pn1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IHNhbXBsZSB9IGZyb20gJ2xvZGFzaC1lcydcblxuLy8gTkI6IFRoZSB0aGlyZCBjaGFyYWN0ZXIgaW4gdGhpcyBzdHJpbmcgaXMgYW4gZW1vamkgdGhhdFxuLy8gcmVuZGVycyBvbiBXaW5kb3dzIGNvbnNvbGVzIHdpdGggYSBncmVlbiBiYWNrZ3JvdW5kXG5jb25zdCBDSEFSQUNURVJTID1cbiAgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbidcbiAgICA/IFsnwrcnLCAn4pyiJywgJ+KcsycsICfiiJcnLCAn4py7JywgJ+KcvSddXG4gICAgOiBbJ8K3JywgJ+KcoicsICcqJywgJ+KIlycsICfinLsnLCAn4py9J11cblxuY29uc3QgTUVTU0FHRVMgPSBbXG4gICdBY2NvbXBsaXNoaW5nJyxcbiAgJ0FjdGlvbmluZycsXG4gICdBY3R1YWxpemluZycsXG4gICdCYWtpbmcnLFxuICAnQnJld2luZycsXG4gICdDYWxjdWxhdGluZycsXG4gICdDZXJlYnJhdGluZycsXG4gICdDaHVybmluZycsXG4gICdDbGF1ZGluZycsXG4gICdDb2FsZXNjaW5nJyxcbiAgJ0NvZ2l0YXRpbmcnLFxuICAnQ29tcHV0aW5nJyxcbiAgJ0Nvbmp1cmluZycsXG4gICdDb25zaWRlcmluZycsXG4gICdDb29raW5nJyxcbiAgJ0NyYWZ0aW5nJyxcbiAgJ0NyZWF0aW5nJyxcbiAgJ0NydW5jaGluZycsXG4gICdEZWxpYmVyYXRpbmcnLFxuICAnRGV0ZXJtaW5pbmcnLFxuICAnRG9pbmcnLFxuICAnRWZmZWN0aW5nJyxcbiAgJ0ZpbmFnbGluZycsXG4gICdGb3JnaW5nJyxcbiAgJ0Zvcm1pbmcnLFxuICAnR2VuZXJhdGluZycsXG4gICdIYXRjaGluZycsXG4gICdIZXJkaW5nJyxcbiAgJ0hvbmtpbmcnLFxuICAnSHVzdGxpbmcnLFxuICAnSWRlYXRpbmcnLFxuICAnSW5mZXJyaW5nJyxcbiAgJ01hbmlmZXN0aW5nJyxcbiAgJ01hcmluYXRpbmcnLFxuICAnTW9zZXlpbmcnLFxuICAnTXVsbGluZycsXG4gICdNdXN0ZXJpbmcnLFxuICAnTXVzaW5nJyxcbiAgJ05vb2RsaW5nJyxcbiAgJ1BlcmNvbGF0aW5nJyxcbiAgJ1BvbmRlcmluZycsXG4gICdQcm9jZXNzaW5nJyxcbiAgJ1B1dHRlcmluZycsXG4gICdSZXRpY3VsYXRpbmcnLFxuICAnUnVtaW5hdGluZycsXG4gICdTY2hsZXBwaW5nJyxcbiAgJ1NodWNraW5nJyxcbiAgJ1NpbW1lcmluZycsXG4gICdTbW9vc2hpbmcnLFxuICAnU3Bpbm5pbmcnLFxuICAnU3Rld2luZycsXG4gICdTeW50aGVzaXppbmcnLFxuICAnVGhpbmtpbmcnLFxuICAnVHJhbnNtdXRpbmcnLFxuICAnVmliaW5nJyxcbiAgJ1dvcmtpbmcnLFxuXVxuXG5leHBvcnQgZnVuY3Rpb24gU3Bpbm5lcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBmcmFtZXMgPSBbLi4uQ0hBUkFDVEVSUywgLi4uWy4uLkNIQVJBQ1RFUlNdLnJldmVyc2UoKV1cbiAgY29uc3QgW2ZyYW1lLCBzZXRGcmFtZV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbZWxhcHNlZFRpbWUsIHNldEVsYXBzZWRUaW1lXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IG1lc3NhZ2UgPSB1c2VSZWYoc2FtcGxlKE1FU1NBR0VTKSlcbiAgY29uc3Qgc3RhcnRUaW1lID0gdXNlUmVmKERhdGUubm93KCkpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNldEZyYW1lKGYgPT4gKGYgKyAxKSAlIGZyYW1lcy5sZW5ndGgpXG4gICAgfSwgMTIwKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwodGltZXIpXG4gIH0sIFtmcmFtZXMubGVuZ3RoXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgc2V0RWxhcHNlZFRpbWUoTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZS5jdXJyZW50KSAvIDEwMDApKVxuICAgIH0sIDEwMDApXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0aW1lcilcbiAgfSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgPEJveCBmbGV4V3JhcD1cIm5vd3JhcFwiIGhlaWdodD17MX0gd2lkdGg9ezJ9PlxuICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5jbGF1ZGV9PntmcmFtZXNbZnJhbWVdfTwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuY2xhdWRlfT57bWVzc2FnZS5jdXJyZW50feKApiA8L1RleHQ+XG4gICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgKHtlbGFwc2VkVGltZX1zIMK3IDxUZXh0IGJvbGQ+ZXNjPC9UZXh0PiB0byBpbnRlcnJ1cHQpXG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNpbXBsZVNwaW5uZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgZnJhbWVzID0gWy4uLkNIQVJBQ1RFUlMsIC4uLlsuLi5DSEFSQUNURVJTXS5yZXZlcnNlKCldXG4gIGNvbnN0IFtmcmFtZSwgc2V0RnJhbWVdID0gdXNlU3RhdGUoMClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgc2V0RnJhbWUoZiA9PiAoZiArIDEpICUgZnJhbWVzLmxlbmd0aClcbiAgICB9LCAxMjApXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0aW1lcilcbiAgfSwgW2ZyYW1lcy5sZW5ndGhdKVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4V3JhcD1cIm5vd3JhcFwiIGhlaWdodD17MX0gd2lkdGg9ezJ9PlxuICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuY2xhdWRlfT57ZnJhbWVzW2ZyYW1lXX08L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIGFwcGVuZEZpbGVTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIGNvbnN0YW50cyxcbiAgd3JpdGVGaWxlU3luYyxcbiAgdW5saW5rU3luYyxcbiAgc3RhdFN5bmMsXG59IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tICdwcm9jZXNzJ1xuaW1wb3J0IHsgZXhlY0ZpbGVOb1Rocm93IH0gZnJvbSAnLi9leGVjRmlsZU5vVGhyb3cuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4vbG9nLmpzJ1xuaW1wb3J0IHsgYWNjZXNzU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgQ0xBVURFX0JBU0VfRElSIH0gZnJvbSAnLi9lbnYuanMnXG5pbXBvcnQgeyBsb2dFdmVudCwgZ2V0RHluYW1pY0NvbmZpZyB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5pbXBvcnQgeyBsdCB9IGZyb20gJ3NlbXZlcidcblxuZXhwb3J0IHR5cGUgSW5zdGFsbFN0YXR1cyA9XG4gIHwgJ3N1Y2Nlc3MnXG4gIHwgJ25vX3Blcm1pc3Npb25zJ1xuICB8ICdpbnN0YWxsX2ZhaWxlZCdcbiAgfCAnaW5fcHJvZ3Jlc3MnXG5cbmV4cG9ydCB0eXBlIEF1dG9VcGRhdGVyUmVzdWx0ID0ge1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsXG4gIHN0YXR1czogSW5zdGFsbFN0YXR1c1xufVxuXG5leHBvcnQgdHlwZSBWZXJzaW9uQ29uZmlnID0ge1xuICBtaW5WZXJzaW9uOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBtZWV0cyB0aGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIGZyb20gU3RhdHNpZyBjb25maWdcbiAqIFRlcm1pbmF0ZXMgdGhlIHByb2Nlc3Mgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSB2ZXJzaW9uIGlzIHRvbyBvbGRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydE1pblZlcnNpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmVyc2lvbkNvbmZpZyA9IGF3YWl0IGdldER5bmFtaWNDb25maWc8VmVyc2lvbkNvbmZpZz4oXG4gICAgICAndGVuZ3VfdmVyc2lvbl9jb25maWcnLFxuICAgICAgeyBtaW5WZXJzaW9uOiAnMC4wLjAnIH0sXG4gICAgKVxuXG4gICAgaWYgKFxuICAgICAgdmVyc2lvbkNvbmZpZy5taW5WZXJzaW9uICYmXG4gICAgICBsdChNQUNSTy5WRVJTSU9OLCB2ZXJzaW9uQ29uZmlnLm1pblZlcnNpb24pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcbkl0IGxvb2tzIGxpa2UgeW91ciB2ZXJzaW9uIG9mIENsYXVkZSBDb2RlICgke01BQ1JPLlZFUlNJT059KSBuZWVkcyBhbiB1cGRhdGUuXG5BIG5ld2VyIHZlcnNpb24gKCR7dmVyc2lvbkNvbmZpZy5taW5WZXJzaW9ufSBvciBoaWdoZXIpIGlzIHJlcXVpcmVkIHRvIGNvbnRpbnVlLlxuXG5UbyB1cGRhdGUsIHBsZWFzZSBydW46XG4gICAgY2xhdWRlIHVwZGF0ZVxuXG5UaGlzIHdpbGwgZW5zdXJlIHlvdSBoYXZlIGFjY2VzcyB0byB0aGUgbGF0ZXN0IGZlYXR1cmVzIGFuZCBpbXByb3ZlbWVudHMuXG5gKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0Vycm9yKGBFcnJvciBjaGVja2luZyBtaW5pbXVtIHZlcnNpb246ICR7ZXJyb3J9YClcbiAgfVxufVxuXG4vLyBMb2NrIGZpbGUgZm9yIGF1dG8tdXBkYXRlciB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdXBkYXRlc1xuZXhwb3J0IGNvbnN0IExPQ0tfRklMRV9QQVRIID0gam9pbihDTEFVREVfQkFTRV9ESVIsICcudXBkYXRlLmxvY2snKVxuY29uc3QgTE9DS19USU1FT1VUX01TID0gNSAqIDYwICogMTAwMCAvLyA1IG1pbnV0ZSB0aW1lb3V0IGZvciBsb2Nrc1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGFjcXVpcmUgYSBsb2NrIGZvciBhdXRvLXVwZGF0ZXJcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGxvY2sgd2FzIGFjcXVpcmVkLCBmYWxzZSBpZiBhbm90aGVyIHByb2Nlc3MgaG9sZHMgdGhlIGxvY2tcbiAqL1xuZnVuY3Rpb24gYWNxdWlyZUxvY2soKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgLy8gRW5zdXJlIHRoZSBiYXNlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBpZiAoIWV4aXN0c1N5bmMoQ0xBVURFX0JBU0VfRElSKSkge1xuICAgICAgbWtkaXJTeW5jKENMQVVERV9CQVNFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBsb2NrIGZpbGUgZXhpc3RzIGFuZCBpcyBub3Qgc3RhbGVcbiAgICBpZiAoZXhpc3RzU3luYyhMT0NLX0ZJTEVfUEFUSCkpIHtcbiAgICAgIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMoTE9DS19GSUxFX1BBVEgpXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gc3RhdHMubXRpbWVNc1xuXG4gICAgICAvLyBJZiBsb2NrIGZpbGUgaXMgb2xkZXIgdGhhbiB0aW1lb3V0LCBjb25zaWRlciBpdCBzdGFsZVxuICAgICAgaWYgKGFnZSA8IExPQ0tfVElNRU9VVF9NUykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gTG9jayBpcyBzdGFsZSwgd2UgY2FuIHRha2Ugb3ZlclxuICAgICAgdHJ5IHtcbiAgICAgICAgdW5saW5rU3luYyhMT0NLX0ZJTEVfUEFUSClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dFcnJvcihgRmFpbGVkIHRvIHJlbW92ZSBzdGFsZSBsb2NrIGZpbGU6ICR7ZXJyfWApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBsb2NrIGZpbGUgd2l0aCBjdXJyZW50IHBpZFxuICAgIHdyaXRlRmlsZVN5bmMoTE9DS19GSUxFX1BBVEgsIGAke3Byb2Nlc3MucGlkfWAsICd1dGY4JylcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgbG9jazogJHtlcnJ9YClcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJlbGVhc2VzIHRoZSB1cGRhdGUgbG9jayBpZiBpdCdzIGhlbGQgYnkgdGhpcyBwcm9jZXNzXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VMb2NrKCk6IHZvaWQge1xuICB0cnkge1xuICAgIGlmIChleGlzdHNTeW5jKExPQ0tfRklMRV9QQVRIKSkge1xuICAgICAgY29uc3QgbG9ja0RhdGEgPSByZWFkRmlsZVN5bmMoTE9DS19GSUxFX1BBVEgsICd1dGY4JylcbiAgICAgIGlmIChsb2NrRGF0YSA9PT0gYCR7cHJvY2Vzcy5waWR9YCkge1xuICAgICAgICB1bmxpbmtTeW5jKExPQ0tfRklMRV9QQVRIKVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nRXJyb3IoYEZhaWxlZCB0byByZWxlYXNlIGxvY2s6ICR7ZXJyfWApXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrTnBtUGVybWlzc2lvbnMoKTogUHJvbWlzZTx7XG4gIGhhc1Blcm1pc3Npb25zOiBib29sZWFuXG4gIG5wbVByZWZpeDogc3RyaW5nIHwgbnVsbFxufT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHByZWZpeFJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlTm9UaHJvdygnbnBtJywgW1xuICAgICAgJy1nJyxcbiAgICAgICdjb25maWcnLFxuICAgICAgJ2dldCcsXG4gICAgICAncHJlZml4JyxcbiAgICBdKVxuICAgIGlmIChwcmVmaXhSZXN1bHQuY29kZSAhPT0gMCkge1xuICAgICAgbG9nRXJyb3IoJ0ZhaWxlZCB0byBjaGVjayBucG0gcGVybWlzc2lvbnMnKVxuICAgICAgcmV0dXJuIHsgaGFzUGVybWlzc2lvbnM6IGZhbHNlLCBucG1QcmVmaXg6IG51bGwgfVxuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IHByZWZpeFJlc3VsdC5zdGRvdXQudHJpbSgpXG5cbiAgICBsZXQgdGVzdFdyaXRlUmVzdWx0ID0gZmFsc2VcbiAgICB0cnkge1xuICAgICAgYWNjZXNzU3luYyhwcmVmaXgsIGNvbnN0YW50cy5XX09LKVxuICAgICAgdGVzdFdyaXRlUmVzdWx0ID0gdHJ1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGVzdFdyaXRlUmVzdWx0ID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAodGVzdFdyaXRlUmVzdWx0KSB7XG4gICAgICByZXR1cm4geyBoYXNQZXJtaXNzaW9uczogdHJ1ZSwgbnBtUHJlZml4OiBwcmVmaXggfVxuICAgIH1cblxuICAgIGxvZ0Vycm9yKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIGdsb2JhbCBucG0gaW5zdGFsbC4nKVxuICAgIHJldHVybiB7IGhhc1Blcm1pc3Npb25zOiBmYWxzZSwgbnBtUHJlZml4OiBwcmVmaXggfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0Vycm9yKGBGYWlsZWQgdG8gdmVyaWZ5IG5wbSBnbG9iYWwgaW5zdGFsbCBwZXJtaXNzaW9uczogJHtlcnJvcn1gKVxuICAgIHJldHVybiB7IGhhc1Blcm1pc3Npb25zOiBmYWxzZSwgbnBtUHJlZml4OiBudWxsIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBOZXdQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFhY3F1aXJlTG9jaygpKSB7XG4gICAgLy8gTG9nIHRoZSBsb2NrIGNvbnRlbnRpb24gdG8gc3RhdHNpZ1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV9hdXRvX3VwZGF0ZXJfcHJlZml4X2xvY2tfY29udGVudGlvbicsIHtcbiAgICAgIHBpZDogU3RyaW5nKHByb2Nlc3MucGlkKSxcbiAgICAgIGN1cnJlbnRWZXJzaW9uOiBNQUNSTy5WRVJTSU9OLFxuICAgICAgcHJlZml4LFxuICAgIH0pXG4gICAgdGhyb3cgbmV3IEVycm9yKCdBbm90aGVyIHByb2Nlc3MgaXMgY3VycmVudGx5IHNldHRpbmcgdXAgbnBtIHByZWZpeCcpXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgIGlmICghZXhpc3RzU3luYyhwcmVmaXgpKSB7XG4gICAgICBta2RpclN5bmMocHJlZml4LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIC8vIFNldCBucG0gcHJlZml4XG4gICAgY29uc3Qgc2V0UHJlZml4ID0gYXdhaXQgZXhlY0ZpbGVOb1Rocm93KCducG0nLCBbXG4gICAgICAnLWcnLFxuICAgICAgJ2NvbmZpZycsXG4gICAgICAnc2V0JyxcbiAgICAgICdwcmVmaXgnLFxuICAgICAgcHJlZml4LFxuICAgIF0pXG5cbiAgICBpZiAoc2V0UHJlZml4LmNvZGUgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBucG0gcHJlZml4OiAke3NldFByZWZpeC5zdGRlcnJ9YClcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgc2hlbGwgY29uZmlnIGZpbGVzXG4gICAgY29uc3QgcGF0aFVwZGF0ZSA9IGBcXG4jIG5wbSBnbG9iYWwgcGF0aFxcbmV4cG9ydCBQQVRIPVwiJHtwcmVmaXh9L2JpbjokUEFUSFwiXFxuYFxuXG4gICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAvLyBPbiBXaW5kb3dzLCB1cGRhdGUgdXNlciBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICBjb25zdCBzZXR4UmVzdWx0ID0gYXdhaXQgZXhlY0ZpbGVOb1Rocm93KCdzZXR4JywgW1xuICAgICAgICAnUEFUSCcsXG4gICAgICAgIGAke3Byb2Nlc3MuZW52LlBBVEh9OyR7cHJlZml4fWAsXG4gICAgICBdKVxuICAgICAgaWYgKHNldHhSZXN1bHQuY29kZSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byB1cGRhdGUgUEFUSCBvbiBXaW5kb3dzOiAke3NldHhSZXN1bHQuc3RkZXJyfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5peC1saWtlIHN5c3RlbXNcbiAgICAgIGNvbnN0IHNoZWxsQ29uZmlncyA9IFtcbiAgICAgICAgLy8gQmFzaFxuICAgICAgICBqb2luKGhvbWVkaXIoKSwgJy5iYXNocmMnKSxcbiAgICAgICAgam9pbihob21lZGlyKCksICcuYmFzaF9wcm9maWxlJyksXG4gICAgICAgIC8vIFpzaFxuICAgICAgICBqb2luKGhvbWVkaXIoKSwgJy56c2hyYycpLFxuICAgICAgICAvLyBGaXNoXG4gICAgICAgIGpvaW4oaG9tZWRpcigpLCAnLmNvbmZpZycsICdmaXNoJywgJ2NvbmZpZy5maXNoJyksXG4gICAgICBdXG5cbiAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIHNoZWxsQ29uZmlncykge1xuICAgICAgICBpZiAoZXhpc3RzU3luYyhjb25maWcpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoY29uZmlnLCAndXRmOCcpXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQuaW5jbHVkZXMocHJlZml4KSkge1xuICAgICAgICAgICAgICBpZiAoY29uZmlnLmluY2x1ZGVzKCdmaXNoJykpIHtcbiAgICAgICAgICAgICAgICAvLyBGaXNoIHNoZWxsIGhhcyBkaWZmZXJlbnQgc3ludGF4XG4gICAgICAgICAgICAgICAgY29uc3QgZmlzaFBhdGggPSBgXFxuIyBucG0gZ2xvYmFsIHBhdGhcXG5zZXQgLWd4IFBBVEggJHtwcmVmaXh9L2JpbiAkUEFUSFxcbmBcbiAgICAgICAgICAgICAgICBhcHBlbmRGaWxlU3luYyhjb25maWcsIGZpc2hQYXRoKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVTeW5jKGNvbmZpZywgcGF0aFVwZGF0ZSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxvZ0V2ZW50KCducG1fcHJlZml4X3BhdGhfdXBkYXRlZCcsIHtcbiAgICAgICAgICAgICAgICBjb25maWdQYXRoOiBjb25maWcsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IHRocm93IC0gY29udGludWUgd2l0aCBvdGhlciBjb25maWdzXG4gICAgICAgICAgICBsb2dFdmVudCgnbnBtX3ByZWZpeF9wYXRoX3VwZGF0ZV9mYWlsZWQnLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ1BhdGg6IGNvbmZpZyxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICAgID8gZXJyLm1lc3NhZ2Uuc2xpY2UoMCwgMjAwKVxuICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyKS5zbGljZSgwLCAyMDApLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGxvZ0Vycm9yKGBGYWlsZWQgdG8gdXBkYXRlIHNoZWxsIGNvbmZpZyAke2NvbmZpZ306ICR7ZXJyfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2VMb2NrKClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE5wbVByZWZpeCgpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lZGlyKCksICcubnBtLWdsb2JhbCcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uc0NvbW1hbmQobnBtUHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aW5kb3dzQ29tbWFuZCA9IGBpY2FjbHMgXCIke25wbVByZWZpeH1cIiAvZ3JhbnQgXCIlVVNFUk5BTUUlOihPSSkoQ0kpRlwiYFxuICBjb25zdCBwcmVmaXhQYXRoID0gbnBtUHJlZml4IHx8ICckKG5wbSAtZyBjb25maWcgZ2V0IHByZWZpeCknXG4gIGNvbnN0IHVuaXhDb21tYW5kID0gYHN1ZG8gY2hvd24gLVIgJFVTRVI6JChpZCAtZ24pICR7cHJlZml4UGF0aH0gJiYgc3VkbyBjaG1vZCAtUiB1K3cgJHtwcmVmaXhQYXRofWBcblxuICByZXR1cm4gcGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW5kb3dzQ29tbWFuZCA6IHVuaXhDb21tYW5kXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgc2V0VGltZW91dCgoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKSwgNTAwMClcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRmlsZU5vVGhyb3coXG4gICAgJ25wbScsXG4gICAgWyd2aWV3JywgTUFDUk8uUEFDS0FHRV9VUkwsICd2ZXJzaW9uJ10sXG4gICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgKVxuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHJldHVybiByZXN1bHQuc3Rkb3V0LnRyaW0oKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEdsb2JhbFBhY2thZ2UoKTogUHJvbWlzZTxJbnN0YWxsU3RhdHVzPiB7XG4gIGlmICghYWNxdWlyZUxvY2soKSkge1xuICAgIGxvZ0Vycm9yKCdBbm90aGVyIHByb2Nlc3MgaXMgY3VycmVudGx5IGluc3RhbGxpbmcgYW4gdXBkYXRlJylcbiAgICAvLyBMb2cgdGhlIGxvY2sgY29udGVudGlvbiB0byBzdGF0c2lnXG4gICAgbG9nRXZlbnQoJ3Rlbmd1X2F1dG9fdXBkYXRlcl9sb2NrX2NvbnRlbnRpb24nLCB7XG4gICAgICBwaWQ6IFN0cmluZyhwcm9jZXNzLnBpZCksXG4gICAgICBjdXJyZW50VmVyc2lvbjogTUFDUk8uVkVSU0lPTixcbiAgICB9KVxuICAgIHJldHVybiAnaW5fcHJvZ3Jlc3MnXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHsgaGFzUGVybWlzc2lvbnMgfSA9IGF3YWl0IGNoZWNrTnBtUGVybWlzc2lvbnMoKVxuICAgIGlmICghaGFzUGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiAnbm9fcGVybWlzc2lvbnMnXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFsbFJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlTm9UaHJvdygnbnBtJywgW1xuICAgICAgJ2luc3RhbGwnLFxuICAgICAgJy1nJyxcbiAgICAgIE1BQ1JPLlBBQ0tBR0VfVVJMLFxuICAgIF0pXG4gICAgaWYgKGluc3RhbGxSZXN1bHQuY29kZSAhPT0gMCkge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gaW5zdGFsbCBuZXcgdmVyc2lvbiBvZiBjbGF1ZGU6ICR7aW5zdGFsbFJlc3VsdC5zdGRvdXR9ICR7aW5zdGFsbFJlc3VsdC5zdGRlcnJ9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiAnaW5zdGFsbF9mYWlsZWQnXG4gICAgfVxuXG4gICAgcmV0dXJuICdzdWNjZXNzJ1xuICB9IGZpbmFsbHkge1xuICAgIC8vIEVuc3VyZSB3ZSBhbHdheXMgcmVsZWFzZSB0aGUgbG9ja1xuICAgIHJlbGVhc2VMb2NrKClcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJ1xuXG5leHBvcnQgZnVuY3Rpb24gUHJlc3NFbnRlclRvQ29udGludWUoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5wZXJtaXNzaW9ufT5cbiAgICAgIFByZXNzIDxUZXh0IGJvbGQ+RW50ZXI8L1RleHQ+IHRvIGNvbnRpbnVl4oCmXG4gICAgPC9UZXh0PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IFBST0RVQ1RfTkFNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFByZXNzRW50ZXJUb0NvbnRpbnVlIH0gZnJvbSAnLi9QcmVzc0VudGVyVG9Db250aW51ZS5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHAoe1xuICBjb21tYW5kcyxcbiAgb25DbG9zZSxcbn06IHtcbiAgY29tbWFuZHM6IENvbW1hbmRbXVxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG59KTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG4gIGNvbnN0IGlzSW50ZXJuYWwgPSBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnXG4gIGNvbnN0IG1vcmVIZWxwID0gaXNJbnRlcm5hbFxuICAgID8gJ1tBTlQtT05MWV0gRm9yIG1vcmUgaGVscDogZ28vY2xhdWRlLWNsaSBvciAjY2xhdWRlLWNsaS1mZWVkYmFjaydcbiAgICA6IGBMZWFybiBtb3JlIGF0OiAke01BQ1JPLlJFQURNRV9VUkx9YFxuXG4gIGNvbnN0IGZpbHRlcmVkQ29tbWFuZHMgPSBjb21tYW5kcy5maWx0ZXIoY21kID0+ICFjbWQuaXNIaWRkZW4pXG4gIGNvbnN0IFtjb3VudCwgc2V0Q291bnRdID0gUmVhY3QudXNlU3RhdGUoMClcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY291bnQgPCAzKSB7XG4gICAgICAgIHNldENvdW50KGNvdW50ICsgMSlcbiAgICAgIH1cbiAgICB9LCAyNTApXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKVxuICB9LCBbY291bnRdKVxuXG4gIHVzZUlucHV0KChfLCBrZXkpID0+IHtcbiAgICBpZiAoa2V5LnJldHVybikgb25DbG9zZSgpXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgIDxUZXh0IGJvbGQgY29sb3I9e3RoZW1lLmNsYXVkZX0+XG4gICAgICAgIHtgJHtQUk9EVUNUX05BTUV9IHYke01BQ1JPLlZFUlNJT059YH1cbiAgICAgIDwvVGV4dD5cblxuICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAge1BST0RVQ1RfTkFNRX0gaXMgYSBiZXRhIHJlc2VhcmNoIHByZXZpZXcuIEFsd2F5cyByZXZpZXcgQ2xhdWRlJmFwb3M7c1xuICAgICAgICAgIHJlc3BvbnNlcywgZXNwZWNpYWxseSB3aGVuIHJ1bm5pbmcgY29kZS4gQ2xhdWRlIGhhcyByZWFkIGFjY2VzcyB0b1xuICAgICAgICAgIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgY2FuIHJ1biBjb21tYW5kcyBhbmQgZWRpdCBmaWxlc1xuICAgICAgICAgIHdpdGggeW91ciBwZXJtaXNzaW9uLlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cblxuICAgICAge2NvdW50ID49IDEgJiYgKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgIDxUZXh0IGJvbGQ+VXNhZ2UgTW9kZXM6PC9UZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAg4oCiIFJFUEw6IDxUZXh0IGJvbGQ+Y2xhdWRlPC9UZXh0PiAoaW50ZXJhY3RpdmUgc2Vzc2lvbilcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICDigKIgTm9uLWludGVyYWN0aXZlOiA8VGV4dCBib2xkPmNsYXVkZSAtcCAmcXVvdDtxdWVzdGlvbiZxdW90OzwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIFJ1biA8VGV4dCBib2xkPmNsYXVkZSAtaDwvVGV4dD4gZm9yIGFsbCBjb21tYW5kIGxpbmUgb3B0aW9uc1xuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICAgICl9XG5cbiAgICAgIHtjb3VudCA+PSAyICYmIChcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dCBib2xkPkNvbW1vbiBUYXNrczo8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICDigKIgQXNrIHF1ZXN0aW9ucyBhYm91dCB5b3VyIGNvZGViYXNleycgJ31cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAmZ3Q7IEhvdyBkb2VzIGZvby5weSB3b3JrP1xuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIOKAoiBFZGl0IGZpbGVzeycgJ31cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAmZ3Q7IFVwZGF0ZSBiYXIudHMgdG8uLi5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICDigKIgRml4IGVycm9yc3snICd9XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT4mZ3Q7IGNhcmdvIGJ1aWxkPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIOKAoiBSdW4gY29tbWFuZHN7JyAnfVxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5VGV4dH0+Jmd0OyAvaGVscDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICDigKIgUnVuIGJhc2ggY29tbWFuZHN7JyAnfVxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5VGV4dH0+Jmd0OyAhbHM8L1RleHQ+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICl9XG5cbiAgICAgIHtjb3VudCA+PSAzICYmIChcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dCBib2xkPkludGVyYWN0aXZlIE1vZGUgQ29tbWFuZHM6PC9UZXh0PlxuXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICB7ZmlsdGVyZWRDb21tYW5kcy5tYXAoKGNtZCwgaSkgPT4gKFxuICAgICAgICAgICAgICA8Qm94IGtleT17aX0gbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD57YC8ke2NtZC5uYW1lfWB9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiAtIHtjbWQuZGVzY3JpcHRpb259PC9UZXh0PlxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICAgICl9XG5cbiAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9Pnttb3JlSGVscH08L1RleHQ+XG4gICAgICA8L0JveD5cblxuICAgICAgPEJveCBtYXJnaW5Ub3A9ezJ9PlxuICAgICAgICA8UHJlc3NFbnRlclRvQ29udGludWUgLz5cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IEhlbHAgfSBmcm9tICcuLi9jb21wb25lbnRzL0hlbHAuanMnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuY29uc3QgaGVscCA9IHtcbiAgdHlwZTogJ2xvY2FsLWpzeCcsXG4gIG5hbWU6ICdoZWxwJyxcbiAgZGVzY3JpcHRpb246ICdTaG93IGhlbHAgYW5kIGF2YWlsYWJsZSBjb21tYW5kcycsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBhc3luYyBjYWxsKG9uRG9uZSwgeyBvcHRpb25zOiB7IGNvbW1hbmRzIH0gfSkge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Y29tbWFuZHN9IG9uQ2xvc2U9e29uRG9uZX0gLz5cbiAgfSxcbiAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgcmV0dXJuICdoZWxwJ1xuICB9LFxufSBzYXRpc2ZpZXMgQ29tbWFuZFxuXG5leHBvcnQgZGVmYXVsdCBoZWxwXG4iLAogICAgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgbWFya1Byb2plY3RPbmJvYXJkaW5nQ29tcGxldGUgfSBmcm9tICcuLi9Qcm9qZWN0T25ib2FyZGluZy5qcydcblxuY29uc3QgY29tbWFuZCA9IHtcbiAgdHlwZTogJ3Byb21wdCcsXG4gIG5hbWU6ICdpbml0JyxcbiAgZGVzY3JpcHRpb246ICdJbml0aWFsaXplIGEgbmV3IENMQVVERS5tZCBmaWxlIHdpdGggY29kZWJhc2UgZG9jdW1lbnRhdGlvbicsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBwcm9ncmVzc01lc3NhZ2U6ICdhbmFseXppbmcgeW91ciBjb2RlYmFzZScsXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAnaW5pdCdcbiAgfSxcbiAgYXN5bmMgZ2V0UHJvbXB0Rm9yQ29tbWFuZChfYXJnczogc3RyaW5nKSB7XG4gICAgLy8gTWFyayBvbmJvYXJkaW5nIGFzIGNvbXBsZXRlIHdoZW4gaW5pdCBjb21tYW5kIGlzIHJ1blxuICAgIG1hcmtQcm9qZWN0T25ib2FyZGluZ0NvbXBsZXRlKClcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICB0ZXh0OiBgUGxlYXNlIGFuYWx5emUgdGhpcyBjb2RlYmFzZSBhbmQgY3JlYXRlIGEgQ0xBVURFLm1kIGZpbGUgY29udGFpbmluZzpcbjEuIEJ1aWxkL2xpbnQvdGVzdCBjb21tYW5kcyAtIGVzcGVjaWFsbHkgZm9yIHJ1bm5pbmcgYSBzaW5nbGUgdGVzdFxuMi4gQ29kZSBzdHlsZSBndWlkZWxpbmVzIGluY2x1ZGluZyBpbXBvcnRzLCBmb3JtYXR0aW5nLCB0eXBlcywgbmFtaW5nIGNvbnZlbnRpb25zLCBlcnJvciBoYW5kbGluZywgZXRjLlxuXG5UaGUgZmlsZSB5b3UgY3JlYXRlIHdpbGwgYmUgZ2l2ZW4gdG8gYWdlbnRpYyBjb2RpbmcgYWdlbnRzIChzdWNoIGFzIHlvdXJzZWxmKSB0aGF0IG9wZXJhdGUgaW4gdGhpcyByZXBvc2l0b3J5LiBNYWtlIGl0IGFib3V0IDIwIGxpbmVzIGxvbmcuXG5JZiB0aGVyZSdzIGFscmVhZHkgYSBDTEFVREUubWQsIGltcHJvdmUgaXQuXG5JZiB0aGVyZSBhcmUgQ3Vyc29yIHJ1bGVzIChpbiAuY3Vyc29yL3J1bGVzLyBvciAuY3Vyc29ycnVsZXMpIG9yIENvcGlsb3QgcnVsZXMgKGluIC5naXRodWIvY29waWxvdC1pbnN0cnVjdGlvbnMubWQpLCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGVtLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXVxuICB9LFxufSBzYXRpc2ZpZXMgQ29tbWFuZFxuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kXG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgZXhlY0ZpbGVOb1Rocm93IH0gZnJvbSAnLi4vdXRpbHMvZXhlY0ZpbGVOb1Rocm93LmpzJ1xuXG5jb25zdCBpc0VuYWJsZWQgPVxuICBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyAmJlxuICBbJ2lUZXJtLmFwcCcsICdBcHBsZV9UZXJtaW5hbCddLmluY2x1ZGVzKHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTSB8fCAnJylcblxuY29uc3QgbGlzdGVuOiBDb21tYW5kID0ge1xuICB0eXBlOiAnbG9jYWwnLFxuICBuYW1lOiAnbGlzdGVuJyxcbiAgZGVzY3JpcHRpb246ICdBY3RpdmF0ZXMgc3BlZWNoIHJlY29nbml0aW9uIGFuZCB0cmFuc2NyaWJlcyBzcGVlY2ggdG8gdGV4dCcsXG4gIGlzRW5hYmxlZDogaXNFbmFibGVkLFxuICBpc0hpZGRlbjogaXNFbmFibGVkLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ2xpc3RlbidcbiAgfSxcbiAgYXN5bmMgY2FsbChfLCB7IGFib3J0Q29udHJvbGxlciB9KSB7XG4gICAgLy8gU3RhcnQgZGljdGF0aW9uIHVzaW5nIEFwcGxlU2NyaXB0XG4gICAgY29uc3Qgc2NyaXB0ID0gYHRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCIgdG8gdGVsbCDCrFxuKHRoZSBmaXJzdCBwcm9jZXNzIHdob3NlIGZyb250bW9zdCBpcyB0cnVlKSB0byB0ZWxsIMKsXG5tZW51IGJhciAxIHRvIHRlbGwgwqxcbm1lbnUgYmFyIGl0ZW0gXCJFZGl0XCIgdG8gdGVsbCDCrFxubWVudSBcIkVkaXRcIiB0byB0ZWxsIMKsXG5tZW51IGl0ZW0gXCJTdGFydCBEaWN0YXRpb25cIiB0byDCrFxuaWYgZXhpc3RzIHRoZW4gY2xpY2sgaXRgXG5cbiAgICBjb25zdCB7IHN0ZGVyciwgY29kZSB9ID0gYXdhaXQgZXhlY0ZpbGVOb1Rocm93KFxuICAgICAgJ29zYXNjcmlwdCcsXG4gICAgICBbJy1lJywgc2NyaXB0XSxcbiAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgKVxuXG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGxvZ0Vycm9yKGBGYWlsZWQgdG8gc3RhcnQgZGljdGF0aW9uOiAke3N0ZGVycn1gKVxuICAgICAgcmV0dXJuICdGYWlsZWQgdG8gc3RhcnQgZGljdGF0aW9uJ1xuICAgIH1cbiAgICByZXR1cm4gJ0RpY3RhdGlvbiBzdGFydGVkLiBQcmVzcyBlc2MgdG8gc3RvcC4nXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RlblxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgQ29uc29sZU9BdXRoRmxvdyB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29uc29sZU9BdXRoRmxvdy5qcydcbmltcG9ydCB7IGNsZWFyVGVybWluYWwgfSBmcm9tICcuLi91dGlscy90ZXJtaW5hbC5qcydcbmltcG9ydCB7IGlzTG9nZ2VkSW5Ub0FudGhyb3BpYyB9IGZyb20gJy4uL3V0aWxzL2F1dGguanMnXG5pbXBvcnQgeyB1c2VFeGl0T25DdHJsQ0QgfSBmcm9tICcuLi9ob29rcy91c2VFeGl0T25DdHJsQ0QuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBjbGVhckNvbnZlcnNhdGlvbiB9IGZyb20gJy4vY2xlYXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+XG4gICh7XG4gICAgdHlwZTogJ2xvY2FsLWpzeCcsXG4gICAgbmFtZTogJ2xvZ2luJyxcbiAgICBkZXNjcmlwdGlvbjogaXNMb2dnZWRJblRvQW50aHJvcGljKClcbiAgICAgID8gJ1N3aXRjaCBBbnRocm9waWMgYWNjb3VudHMnXG4gICAgICA6ICdTaWduIGluIHdpdGggeW91ciBBbnRocm9waWMgYWNjb3VudCcsXG4gICAgaXNFbmFibGVkOiB0cnVlLFxuICAgIGlzSGlkZGVuOiBmYWxzZSxcbiAgICBhc3luYyBjYWxsKG9uRG9uZSwgY29udGV4dCkge1xuICAgICAgYXdhaXQgY2xlYXJUZXJtaW5hbCgpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TG9naW5cbiAgICAgICAgICBvbkRvbmU9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyQ29udmVyc2F0aW9uKGNvbnRleHQpXG4gICAgICAgICAgICBvbkRvbmUoKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfSxcbiAgICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICAgIHJldHVybiAnbG9naW4nXG4gICAgfSxcbiAgfSkgc2F0aXNmaWVzIENvbW1hbmRcblxuZnVuY3Rpb24gTG9naW4ocHJvcHM6IHsgb25Eb25lOiAoKSA9PiB2b2lkIH0pIHtcbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKHByb3BzLm9uRG9uZSlcbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIDxDb25zb2xlT0F1dGhGbG93IG9uRG9uZT17cHJvcHMub25Eb25lfSAvPlxuICAgICAgPEJveCBtYXJnaW5MZWZ0PXszfT5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAge2V4aXRTdGF0ZS5wZW5kaW5nID8gKFxuICAgICAgICAgICAgPD5QcmVzcyB7ZXhpdFN0YXRlLmtleU5hbWV9IGFnYWluIHRvIGV4aXQ8Lz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFN0YXRpYywgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCBUZXh0SW5wdXQgZnJvbSAnLi9UZXh0SW5wdXQuanMnXG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UsIGNyZWF0ZUFuZFN0b3JlQXBpS2V5IH0gZnJvbSAnLi4vc2VydmljZXMvb2F1dGguanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgQXNjaWlMb2dvIH0gZnJvbSAnLi9Bc2NpaUxvZ28uanMnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICcuLi9ob29rcy91c2VUZXJtaW5hbFNpemUuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGNsZWFyVGVybWluYWwgfSBmcm9tICcuLi91dGlscy90ZXJtaW5hbC5qcydcbmltcG9ydCB7IFNpbXBsZVNwaW5uZXIgfSBmcm9tICcuL1NwaW5uZXIuanMnXG5pbXBvcnQgeyBXZWxjb21lQm94IH0gZnJvbSAnLi9PbmJvYXJkaW5nLmpzJ1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb2R1Y3QuanMnXG5pbXBvcnQgeyBzZW5kTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbm90aWZpZXIuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uRG9uZSgpOiB2b2lkXG59XG5cbnR5cGUgT0F1dGhTdGF0dXMgPVxuICB8IHsgc3RhdGU6ICdpZGxlJyB9XG4gIHwgeyBzdGF0ZTogJ3JlYWR5X3RvX3N0YXJ0JyB9XG4gIHwgeyBzdGF0ZTogJ3dhaXRpbmdfZm9yX2xvZ2luJzsgdXJsOiBzdHJpbmcgfVxuICB8IHsgc3RhdGU6ICdjcmVhdGluZ19hcGlfa2V5JyB9XG4gIHwgeyBzdGF0ZTogJ2Fib3V0X3RvX3JldHJ5JzsgbmV4dFN0YXRlOiBPQXV0aFN0YXR1cyB9XG4gIHwgeyBzdGF0ZTogJ3N1Y2Nlc3MnOyBhcGlLZXk6IHN0cmluZyB9XG4gIHwge1xuICAgICAgc3RhdGU6ICdlcnJvcidcbiAgICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgICAgdG9SZXRyeT86IE9BdXRoU3RhdHVzXG4gICAgfVxuXG5jb25zdCBQQVNURV9IRVJFX01TRyA9ICdQYXN0ZSBjb2RlIGhlcmUgaWYgcHJvbXB0ZWQgPiAnXG5cbmV4cG9ydCBmdW5jdGlvbiBDb25zb2xlT0F1dGhGbG93KHsgb25Eb25lIH06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgW29hdXRoU3RhdHVzLCBzZXRPQXV0aFN0YXR1c10gPSB1c2VTdGF0ZTxPQXV0aFN0YXR1cz4oe1xuICAgIHN0YXRlOiAnaWRsZScsXG4gIH0pXG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuXG4gIGNvbnN0IFtwYXN0ZWRDb2RlLCBzZXRQYXN0ZWRDb2RlXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbY3Vyc29yT2Zmc2V0LCBzZXRDdXJzb3JPZmZzZXRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW29hdXRoU2VydmljZV0gPSB1c2VTdGF0ZSgoKSA9PiBuZXcgT0F1dGhTZXJ2aWNlKCkpXG4gIC8vIEFmdGVyIGEgZmV3IHNlY29uZHMgd2Ugc3VnZ2VzdCB0aGUgdXNlciB0byBjb3B5L3Bhc3RlIHVybCBpZiB0aGVcbiAgLy8gYnJvd3NlciBkaWQgbm90IG9wZW4gYXV0b21hdGljYWxseS4gSW4gdGhpcyBmbG93IHdlIGV4cGVjdCB0aGUgdXNlciB0b1xuICAvLyBjb3B5IHRoZSBjb2RlIGZyb20gdGhlIGJyb3dzZXIgYW5kIHBhc3RlIGl0IGluIHRoZSB0ZXJtaW5hbFxuICBjb25zdCBbc2hvd1Bhc3RlUHJvbXB0LCBzZXRTaG93UGFzdGVQcm9tcHRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIHdlIG5lZWQgYSBzcGVjaWFsIGNsZWFyaW5nIHN0YXRlIHRvIGNvcnJlY3RseSByZS1yZW5kZXIgU3RhdGljIGVsZW1lbnRzXG4gIGNvbnN0IFtpc0NsZWFyaW5nLCBzZXRJc0NsZWFyaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHRleHRJbnB1dENvbHVtbnMgPSB1c2VUZXJtaW5hbFNpemUoKS5jb2x1bW5zIC0gUEFTVEVfSEVSRV9NU0cubGVuZ3RoIC0gMVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ2xlYXJpbmcpIHtcbiAgICAgIGNsZWFyVGVybWluYWwoKVxuICAgICAgc2V0SXNDbGVhcmluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtpc0NsZWFyaW5nXSlcblxuICAvLyBSZXRyeSBsb2dpY1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvYXV0aFN0YXR1cy5zdGF0ZSA9PT0gJ2Fib3V0X3RvX3JldHJ5Jykge1xuICAgICAgc2V0SXNDbGVhcmluZyh0cnVlKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldE9BdXRoU3RhdHVzKG9hdXRoU3RhdHVzLm5leHRTdGF0ZSlcbiAgICAgIH0sIDEwMDApXG4gICAgfVxuICB9LCBbb2F1dGhTdGF0dXNdKVxuXG4gIHVzZUlucHV0KGFzeW5jIChfLCBrZXkpID0+IHtcbiAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgaWYgKG9hdXRoU3RhdHVzLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgbG9nRXZlbnQoJ3Rlbmd1X29hdXRoX3N0YXJ0Jywge30pXG4gICAgICAgIHNldE9BdXRoU3RhdHVzKHsgc3RhdGU6ICdyZWFkeV90b19zdGFydCcgfSlcbiAgICAgIH0gZWxzZSBpZiAob2F1dGhTdGF0dXMuc3RhdGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBsb2dFdmVudCgndGVuZ3Vfb2F1dGhfc3VjY2VzcycsIHt9KVxuICAgICAgICBhd2FpdCBjbGVhclRlcm1pbmFsKCkgLy8gbmVlZGVkIHRvIGNsZWFyIG91dCBTdGF0aWMgY29tcG9uZW50c1xuICAgICAgICBvbkRvbmUoKVxuICAgICAgfSBlbHNlIGlmIChvYXV0aFN0YXR1cy5zdGF0ZSA9PT0gJ2Vycm9yJyAmJiBvYXV0aFN0YXR1cy50b1JldHJ5KSB7XG4gICAgICAgIHNldFBhc3RlZENvZGUoJycpXG4gICAgICAgIHNldE9BdXRoU3RhdHVzKHtcbiAgICAgICAgICBzdGF0ZTogJ2Fib3V0X3RvX3JldHJ5JyxcbiAgICAgICAgICBuZXh0U3RhdGU6IG9hdXRoU3RhdHVzLnRvUmV0cnksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdENvZGUodmFsdWU6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRXhwZWN0aW5nIGZvcm1hdCBcImF1dGhvcml6YXRpb25Db2RlI3N0YXRlXCIgZnJvbSB0aGUgYXV0aG9yaXphdGlvbiBjYWxsYmFjayBVUkxcbiAgICAgIGNvbnN0IFthdXRob3JpemF0aW9uQ29kZSwgc3RhdGVdID0gdmFsdWUuc3BsaXQoJyMnKVxuXG4gICAgICBpZiAoIWF1dGhvcml6YXRpb25Db2RlIHx8ICFzdGF0ZSkge1xuICAgICAgICBzZXRPQXV0aFN0YXR1cyh7XG4gICAgICAgICAgc3RhdGU6ICdlcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgY29kZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgZnVsbCBjb2RlIHdhcyBjb3BpZWQnLFxuICAgICAgICAgIHRvUmV0cnk6IHsgc3RhdGU6ICd3YWl0aW5nX2Zvcl9sb2dpbicsIHVybCB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gVHJhY2sgd2hpY2ggcGF0aCB0aGUgdXNlciBpcyB0YWtpbmcgKG1hbnVhbCBjb2RlIGVudHJ5KVxuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X29hdXRoX21hbnVhbF9lbnRyeScsIHt9KVxuICAgICAgb2F1dGhTZXJ2aWNlLnByb2Nlc3NDYWxsYmFjayh7XG4gICAgICAgIGF1dGhvcml6YXRpb25Db2RlLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgdXNlTWFudWFsUmVkaXJlY3Q6IHRydWUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nRXJyb3IoZXJyKVxuICAgICAgc2V0T0F1dGhTdGF0dXMoe1xuICAgICAgICBzdGF0ZTogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgICAgdG9SZXRyeTogeyBzdGF0ZTogJ3dhaXRpbmdfZm9yX2xvZ2luJywgdXJsIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0T0F1dGggPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9hdXRoU2VydmljZVxuICAgICAgICAuc3RhcnRPQXV0aEZsb3coYXN5bmMgdXJsID0+IHtcbiAgICAgICAgICBzZXRPQXV0aFN0YXR1cyh7IHN0YXRlOiAnd2FpdGluZ19mb3JfbG9naW4nLCB1cmwgfSlcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dQYXN0ZVByb21wdCh0cnVlKSwgMzAwMClcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIHRva2VuIGV4Y2hhbmdlIGVycm9ycyBzcGVjaWZpY2FsbHlcbiAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1Rva2VuIGV4Y2hhbmdlIGZhaWxlZCcpKSB7XG4gICAgICAgICAgICBzZXRPQXV0aFN0YXR1cyh7XG4gICAgICAgICAgICAgIHN0YXRlOiAnZXJyb3InLFxuICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZXhjaGFuZ2UgYXV0aG9yaXphdGlvbiBjb2RlIGZvciBhY2Nlc3MgdG9rZW4uIFBsZWFzZSB0cnkgYWdhaW4uJyxcbiAgICAgICAgICAgICAgdG9SZXRyeTogeyBzdGF0ZTogJ3JlYWR5X3RvX3N0YXJ0JyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9vYXV0aF90b2tlbl9leGNoYW5nZV9lcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBvdGhlciBlcnJvcnNcbiAgICAgICAgICAgIHNldE9BdXRoU3RhdHVzKHtcbiAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICB0b1JldHJ5OiB7IHN0YXRlOiAncmVhZHlfdG9fc3RhcnQnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgfSlcblxuICAgICAgc2V0T0F1dGhTdGF0dXMoeyBzdGF0ZTogJ2NyZWF0aW5nX2FwaV9rZXknIH0pXG5cbiAgICAgIGNvbnN0IGFwaUtleSA9IGF3YWl0IGNyZWF0ZUFuZFN0b3JlQXBpS2V5KHJlc3VsdC5hY2Nlc3NUb2tlbikuY2F0Y2goXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgc2V0T0F1dGhTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIGNyZWF0ZSBBUEkga2V5OiAnICsgZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICB0b1JldHJ5OiB7IHN0YXRlOiAncmVhZHlfdG9fc3RhcnQnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBsb2dFdmVudCgndGVuZ3Vfb2F1dGhfYXBpX2tleV9lcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pXG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIGlmIChhcGlLZXkpIHtcbiAgICAgICAgc2V0T0F1dGhTdGF0dXMoeyBzdGF0ZTogJ3N1Y2Nlc3MnLCBhcGlLZXkgfSlcbiAgICAgICAgc2VuZE5vdGlmaWNhdGlvbih7IG1lc3NhZ2U6ICdDbGF1ZGUgQ29kZSBsb2dpbiBzdWNjZXNzZnVsJyB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0T0F1dGhTdGF0dXMoe1xuICAgICAgICAgIHN0YXRlOiAnZXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBcIlVuYWJsZSB0byBjcmVhdGUgQVBJIGtleS4gVGhlIHNlcnZlciBhY2NlcHRlZCB0aGUgcmVxdWVzdCBidXQgZGlkbid0IHJldHVybiBhIGtleS5cIixcbiAgICAgICAgICB0b1JldHJ5OiB7IHN0YXRlOiAncmVhZHlfdG9fc3RhcnQnIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9vYXV0aF9hcGlfa2V5X2Vycm9yJywge1xuICAgICAgICAgIGVycm9yOiAnc2VydmVyX3JldHVybmVkX25vX2tleScsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAoZXJyIGFzIEVycm9yKS5tZXNzYWdlXG4gICAgICBsb2dFdmVudCgndGVuZ3Vfb2F1dGhfZXJyb3InLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSlcbiAgICB9XG4gIH0sIFtvYXV0aFNlcnZpY2UsIHNldFNob3dQYXN0ZVByb21wdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob2F1dGhTdGF0dXMuc3RhdGUgPT09ICdyZWFkeV90b19zdGFydCcpIHtcbiAgICAgIHN0YXJ0T0F1dGgoKVxuICAgIH1cbiAgfSwgW29hdXRoU3RhdHVzLnN0YXRlLCBzdGFydE9BdXRoXSlcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMgbWVzc2FnZVxuICBmdW5jdGlvbiByZW5kZXJTdGF0dXNNZXNzYWdlKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgc3dpdGNoIChvYXV0aFN0YXR1cy5zdGF0ZSkge1xuICAgICAgY2FzZSAnaWRsZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+XG4gICAgICAgICAgICAgIHtQUk9EVUNUX05BTUV9IGlzIGJpbGxlZCBiYXNlZCBvbiBBUEkgdXNhZ2UgdGhyb3VnaCB5b3VyIEFudGhyb3BpY1xuICAgICAgICAgICAgICBDb25zb2xlIGFjY291bnQuXG4gICAgICAgICAgICA8L1RleHQ+XG5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIFByaWNpbmcgbWF5IGV2b2x2ZSBhcyB3ZSBtb3ZlIHRvd2FyZHMgZ2VuZXJhbCBhdmFpbGFiaWxpdHkuXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5wZXJtaXNzaW9ufT5cbiAgICAgICAgICAgICAgICBQcmVzcyA8VGV4dCBib2xkPkVudGVyPC9UZXh0PiB0byBsb2dpbiB0byB5b3VyIEFudGhyb3BpYyBDb25zb2xlXG4gICAgICAgICAgICAgICAgYWNjb3VudOKAplxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKVxuXG4gICAgICBjYXNlICd3YWl0aW5nX2Zvcl9sb2dpbic6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIHshc2hvd1Bhc3RlUHJvbXB0ICYmIChcbiAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U2ltcGxlU3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0Pk9wZW5pbmcgYnJvd3NlciB0byBzaWduIGlu4oCmPC9UZXh0PlxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtzaG93UGFzdGVQcm9tcHQgJiYgKFxuICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0PntQQVNURV9IRVJFX01TR308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3Bhc3RlZENvZGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0UGFzdGVkQ29kZX1cbiAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXsodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0Q29kZSh2YWx1ZSwgb2F1dGhTdGF0dXMudXJsKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY3Vyc29yT2Zmc2V0PXtjdXJzb3JPZmZzZXR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZUN1cnNvck9mZnNldD17c2V0Q3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17dGV4dElucHV0Q29sdW1uc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIClcblxuICAgICAgY2FzZSAnY3JlYXRpbmdfYXBpX2tleSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgIDxTaW1wbGVTcGlubmVyIC8+XG4gICAgICAgICAgICAgIDxUZXh0PkNyZWF0aW5nIEFQSSBrZXkgZm9yIENsYXVkZSBDb2Rl4oCmPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIClcblxuICAgICAgY2FzZSAnYWJvdXRfdG9fcmV0cnknOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucGVybWlzc2lvbn0+UmV0cnlpbmfigKY8L1RleHQ+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIClcblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zdWNjZXNzfT5cbiAgICAgICAgICAgICAgTG9naW4gc3VjY2Vzc2Z1bC4gUHJlc3MgPFRleHQgYm9sZD5FbnRlcjwvVGV4dD4gdG8gY29udGludWXigKZcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKVxuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5lcnJvcn0+T0F1dGggZXJyb3I6IHtvYXV0aFN0YXR1cy5tZXNzYWdlfTwvVGV4dD5cblxuICAgICAgICAgICAge29hdXRoU3RhdHVzLnRvUmV0cnkgJiYgKFxuICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnBlcm1pc3Npb259PlxuICAgICAgICAgICAgICAgICAgUHJlc3MgPFRleHQgYm9sZD5FbnRlcjwvVGV4dD4gdG8gcmV0cnkuXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBXZSBuZWVkIHRvIHJlbmRlciB0aGUgY29weS1hYmxlIFVSTCBzdGF0aWNhbGx5IHRvIHByZXZlbnQgSW5rIDxUZXh0PiBmcm9tIGluc2VydGluZ1xuICAvLyBuZXdsaW5lcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBVUkwgKHRoaXMgYnJlYWtzIFNhZmFyaSkuIEJlY2F1c2UgPFN0YXRpYz4gY29tcG9uZW50cyBhcmVcbiAgLy8gb25seSByZW5kZXJlZCBvbmNlIHRvcC10by1ib3R0b20sIHdlIGFsc28gbmVlZCB0byBtYWtlIGV2ZXJ5dGhpbmcgYWJvdmUgdGhlIFVSTCBzdGF0aWMuXG4gIGNvbnN0IHN0YXRpY0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBKU1guRWxlbWVudD4gPSB7fVxuICBpZiAoIWlzQ2xlYXJpbmcpIHtcbiAgICBzdGF0aWNJdGVtcy5oZWFkZXIgPSAoXG4gICAgICA8Qm94IGtleT1cImhlYWRlclwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9PlxuICAgICAgICA8V2VsY29tZUJveCAvPlxuICAgICAgICA8Qm94IHBhZGRpbmdCb3R0b209ezF9IHBhZGRpbmdMZWZ0PXsxfT5cbiAgICAgICAgICA8QXNjaWlMb2dvIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG4gIGlmIChvYXV0aFN0YXR1cy5zdGF0ZSA9PT0gJ3dhaXRpbmdfZm9yX2xvZ2luJyAmJiBzaG93UGFzdGVQcm9tcHQpIHtcbiAgICBzdGF0aWNJdGVtcy51cmxUb0NvcHkgPSAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBrZXk9XCJ1cmxUb0NvcHlcIiBnYXA9ezF9IHBhZGRpbmdCb3R0b209ezF9PlxuICAgICAgICA8Qm94IHBhZGRpbmdYPXsxfT5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgIEJyb3dzZXIgZGlkbiZhcG9zO3Qgb3Blbj8gVXNlIHRoZSB1cmwgYmVsb3cgdG8gc2lnbiBpbjpcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8Qm94IHdpZHRoPXsxMDAwfT5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57b2F1dGhTdGF0dXMudXJsfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICApXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9PlxuICAgICAgPFN0YXRpYyBpdGVtcz17T2JqZWN0LmtleXMoc3RhdGljSXRlbXMpfT5cbiAgICAgICAge2l0ZW0gPT4gc3RhdGljSXRlbXNbaXRlbV19XG4gICAgICA8L1N0YXRpYz5cbiAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9PlxuICAgICAgICB7cmVuZGVyU3RhdHVzTWVzc2FnZSgpfVxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCdcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCdcblxuaW1wb3J0IHsgT0FVVEhfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzL29hdXRoLmpzJ1xuaW1wb3J0IHsgb3BlbkJyb3dzZXIgfSBmcm9tICcuLi91dGlscy9icm93c2VyLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyByZXNldEFudGhyb3BpY0NsaWVudCB9IGZyb20gJy4vY2xhdWRlLmpzJ1xuaW1wb3J0IHtcbiAgQWNjb3VudEluZm8sXG4gIGdldEdsb2JhbENvbmZpZyxcbiAgc2F2ZUdsb2JhbENvbmZpZyxcbiAgbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnLFxufSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5cbi8vIEJhc2U2NFVSTCBlbmNvZGluZyBmdW5jdGlvbiAoUkZDIDQ2NDgpXG5mdW5jdGlvbiBiYXNlNjRVUkxFbmNvZGUoYnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYnVmZmVyXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgIC5yZXBsYWNlKC89L2csICcnKVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVWZXJpZmllcigpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlKGNyeXB0by5yYW5kb21CeXRlcygzMikpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ29kZUNoYWxsZW5nZSh2ZXJpZmllcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG4gIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZSh2ZXJpZmllcilcbiAgY29uc3QgZGlnZXN0ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKVxuICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlKEJ1ZmZlci5mcm9tKGRpZ2VzdCkpXG59XG5cbnR5cGUgT0F1dGhUb2tlbkV4Y2hhbmdlUmVzcG9uc2UgPSB7XG4gIGFjY2Vzc190b2tlbjogc3RyaW5nXG4gIGFjY291bnQ/OiB7XG4gICAgdXVpZDogc3RyaW5nXG4gICAgZW1haWxfYWRkcmVzczogc3RyaW5nXG4gIH1cbiAgb3JnYW5pemF0aW9uPzoge1xuICAgIHV1aWQ6IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIE9BdXRoUmVzdWx0ID0ge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBPQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHNlcnZlcjogaHR0cC5TZXJ2ZXIgfCBudWxsID0gbnVsbFxuICBwcml2YXRlIGNvZGVWZXJpZmllcjogc3RyaW5nXG4gIHByaXZhdGUgZXhwZWN0ZWRTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgcHJpdmF0ZSBwZW5kaW5nQ29kZVByb21pc2U6IHtcbiAgICByZXNvbHZlOiAocmVzdWx0OiB7XG4gICAgICBhdXRob3JpemF0aW9uQ29kZTogc3RyaW5nXG4gICAgICB1c2VNYW51YWxSZWRpcmVjdDogYm9vbGVhblxuICAgIH0pID0+IHZvaWRcbiAgICByZWplY3Q6IChlcnI6IEVycm9yKSA9PiB2b2lkXG4gIH0gfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29kZVZlcmlmaWVyID0gZ2VuZXJhdGVDb2RlVmVyaWZpZXIoKVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUF1dGhVcmxzKFxuICAgIGNvZGVDaGFsbGVuZ2U6IHN0cmluZyxcbiAgICBzdGF0ZTogc3RyaW5nLFxuICApOiB7IGF1dG9Vcmw6IHN0cmluZzsgbWFudWFsVXJsOiBzdHJpbmcgfSB7XG4gICAgZnVuY3Rpb24gbWFrZVVybChpc01hbnVhbDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICBjb25zdCBhdXRoVXJsID0gbmV3IFVSTChPQVVUSF9DT05GSUcuQVVUSE9SSVpFX1VSTClcbiAgICAgIGF1dGhVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgnY2xpZW50X2lkJywgT0FVVEhfQ09ORklHLkNMSUVOVF9JRClcbiAgICAgIGF1dGhVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgncmVzcG9uc2VfdHlwZScsICdjb2RlJylcbiAgICAgIGF1dGhVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcbiAgICAgICAgJ3JlZGlyZWN0X3VyaScsXG4gICAgICAgIGlzTWFudWFsXG4gICAgICAgICAgPyBPQVVUSF9DT05GSUcuTUFOVUFMX1JFRElSRUNUX1VSTFxuICAgICAgICAgIDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtPQVVUSF9DT05GSUcuUkVESVJFQ1RfUE9SVH0vY2FsbGJhY2tgLFxuICAgICAgKVxuICAgICAgYXV0aFVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKCdzY29wZScsIE9BVVRIX0NPTkZJRy5TQ09QRVMuam9pbignICcpKVxuICAgICAgYXV0aFVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKCdjb2RlX2NoYWxsZW5nZScsIGNvZGVDaGFsbGVuZ2UpXG4gICAgICBhdXRoVXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2NvZGVfY2hhbGxlbmdlX21ldGhvZCcsICdTMjU2JylcbiAgICAgIGF1dGhVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgnc3RhdGUnLCBzdGF0ZSlcbiAgICAgIHJldHVybiBhdXRoVXJsLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXV0b1VybDogbWFrZVVybChmYWxzZSksXG4gICAgICBtYW51YWxVcmw6IG1ha2VVcmwodHJ1ZSksXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRPQXV0aEZsb3coXG4gICAgYXV0aFVSTEhhbmRsZXI6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPixcbiAgKTogUHJvbWlzZTxPQXV0aFJlc3VsdD4ge1xuICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBhd2FpdCBnZW5lcmF0ZUNvZGVDaGFsbGVuZ2UodGhpcy5jb2RlVmVyaWZpZXIpXG4gICAgY29uc3Qgc3RhdGUgPSBiYXNlNjRVUkxFbmNvZGUoY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKSlcbiAgICB0aGlzLmV4cGVjdGVkU3RhdGUgPSBzdGF0ZVxuICAgIGNvbnN0IHsgYXV0b1VybCwgbWFudWFsVXJsIH0gPSB0aGlzLmdlbmVyYXRlQXV0aFVybHMoY29kZUNoYWxsZW5nZSwgc3RhdGUpXG5cbiAgICBjb25zdCBvblJlYWR5ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXV0aFVSTEhhbmRsZXIobWFudWFsVXJsKVxuICAgICAgYXdhaXQgb3BlbkJyb3dzZXIoYXV0b1VybClcbiAgICB9XG5cbiAgICBjb25zdCB7IGF1dGhvcml6YXRpb25Db2RlLCB1c2VNYW51YWxSZWRpcmVjdCB9ID0gYXdhaXQgbmV3IFByb21pc2U8e1xuICAgICAgYXV0aG9yaXphdGlvbkNvZGU6IHN0cmluZ1xuICAgICAgdXNlTWFudWFsUmVkaXJlY3Q6IGJvb2xlYW5cbiAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnBlbmRpbmdDb2RlUHJvbWlzZSA9IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgIHRoaXMuc3RhcnRMb2NhbFNlcnZlcihzdGF0ZSwgb25SZWFkeSlcbiAgICB9KVxuXG4gICAgLy8gRXhjaGFuZ2UgY29kZSBmb3IgdG9rZW5zXG4gICAgY29uc3Qge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIGFjY291bnQsXG4gICAgICBvcmdhbml6YXRpb24sXG4gICAgfSA9IGF3YWl0IHRoaXMuZXhjaGFuZ2VDb2RlRm9yVG9rZW5zKFxuICAgICAgYXV0aG9yaXphdGlvbkNvZGUsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVzZU1hbnVhbFJlZGlyZWN0LFxuICAgIClcblxuICAgIC8vIFN0b3JlIGFjY291bnQgaW5mb1xuICAgIGlmIChhY2NvdW50KSB7XG4gICAgICBjb25zdCBhY2NvdW50SW5mbzogQWNjb3VudEluZm8gPSB7XG4gICAgICAgIGFjY291bnRVdWlkOiBhY2NvdW50LnV1aWQsXG4gICAgICAgIGVtYWlsQWRkcmVzczogYWNjb3VudC5lbWFpbF9hZGRyZXNzLFxuICAgICAgICBvcmdhbml6YXRpb25VdWlkOiBvcmdhbml6YXRpb24/LnV1aWQsXG4gICAgICB9XG4gICAgICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICAgICAgY29uZmlnLm9hdXRoQWNjb3VudCA9IGFjY291bnRJbmZvXG4gICAgICBzYXZlR2xvYmFsQ29uZmlnKGNvbmZpZylcbiAgICB9XG5cbiAgICByZXR1cm4geyBhY2Nlc3NUb2tlbiB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0TG9jYWxTZXJ2ZXIoc3RhdGU6IHN0cmluZywgb25SZWFkeT86ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXIpIHtcbiAgICAgIHRoaXMuY2xvc2VTZXJ2ZXIoKVxuICAgIH1cbiAgICB0aGlzLnNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKFxuICAgICAgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShyZXEudXJsIHx8ICcnLCB0cnVlKVxuXG4gICAgICAgIGlmIChwYXJzZWRVcmwucGF0aG5hbWUgPT09ICcvY2FsbGJhY2snKSB7XG4gICAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvbkNvZGUgPSBwYXJzZWRVcmwucXVlcnkuY29kZSBhcyBzdHJpbmdcbiAgICAgICAgICBjb25zdCByZXR1cm5lZFN0YXRlID0gcGFyc2VkVXJsLnF1ZXJ5LnN0YXRlIGFzIHN0cmluZ1xuXG4gICAgICAgICAgaWYgKCFhdXRob3JpemF0aW9uQ29kZSkge1xuICAgICAgICAgICAgcmVzLndyaXRlSGVhZCg0MDApXG4gICAgICAgICAgICByZXMuZW5kKCdBdXRob3JpemF0aW9uIGNvZGUgbm90IGZvdW5kJylcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb2RlUHJvbWlzZSkge1xuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDb2RlUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IEVycm9yKCdObyBhdXRob3JpemF0aW9uIGNvZGUgcmVjZWl2ZWQnKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJldHVybmVkU3RhdGUgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICByZXMud3JpdGVIZWFkKDQwMClcbiAgICAgICAgICAgIHJlcy5lbmQoJ0ludmFsaWQgc3RhdGUgcGFyYW1ldGVyJylcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb2RlUHJvbWlzZSkge1xuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDb2RlUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IEVycm9yKCdJbnZhbGlkIHN0YXRlIHBhcmFtZXRlcicpLCAvLyBQb3NzaWJsZSBDU1JGIGF0dGFja1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXMud3JpdGVIZWFkKDMwMiwge1xuICAgICAgICAgICAgTG9jYXRpb246IE9BVVRIX0NPTkZJRy5TVUNDRVNTX1VSTCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJlcy5lbmQoKVxuXG4gICAgICAgICAgLy8gVHJhY2sgd2hpY2ggcGF0aCB0aGUgdXNlciBpcyB0YWtpbmcgKGF1dG9tYXRpYyBicm93c2VyIHJlZGlyZWN0KVxuICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9vYXV0aF9hdXRvbWF0aWNfcmVkaXJlY3QnLCB7fSlcblxuICAgICAgICAgIHRoaXMucHJvY2Vzc0NhbGxiYWNrKHtcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb25Db2RlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICB1c2VNYW51YWxSZWRpcmVjdDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMud3JpdGVIZWFkKDQwNClcbiAgICAgICAgICByZXMuZW5kKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApXG5cbiAgICB0aGlzLnNlcnZlci5saXN0ZW4oT0FVVEhfQ09ORklHLlJFRElSRUNUX1BPUlQsIGFzeW5jICgpID0+IHtcbiAgICAgIG9uUmVhZHk/LigpXG4gICAgfSlcblxuICAgIHRoaXMuc2VydmVyLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBjb25zdCBwb3J0RXJyb3IgPSBlcnIgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uXG4gICAgICBpZiAocG9ydEVycm9yLmNvZGUgPT09ICdFQUREUklOVVNFJykge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgUG9ydCAke09BVVRIX0NPTkZJRy5SRURJUkVDVF9QT1JUfSBpcyBhbHJlYWR5IGluIHVzZS4gUGxlYXNlIGVuc3VyZSBubyBvdGhlciBhcHBsaWNhdGlvbnMgYXJlIHVzaW5nIHRoaXMgcG9ydC5gLFxuICAgICAgICApXG4gICAgICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgICAgICB0aGlzLmNsb3NlU2VydmVyKClcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NvZGVQcm9taXNlKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ29kZVByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRXJyb3IoZXJyKVxuICAgICAgICB0aGlzLmNsb3NlU2VydmVyKClcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NvZGVQcm9taXNlKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ29kZVByb21pc2UucmVqZWN0KGVycilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGNoYW5nZUNvZGVGb3JUb2tlbnMoXG4gICAgYXV0aG9yaXphdGlvbkNvZGU6IHN0cmluZyxcbiAgICBzdGF0ZTogc3RyaW5nLFxuICAgIHVzZU1hbnVhbFJlZGlyZWN0OiBib29sZWFuID0gZmFsc2UsXG4gICk6IFByb21pc2U8T0F1dGhUb2tlbkV4Y2hhbmdlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgY29kZTogYXV0aG9yaXphdGlvbkNvZGUsXG4gICAgICByZWRpcmVjdF91cmk6IHVzZU1hbnVhbFJlZGlyZWN0XG4gICAgICAgID8gT0FVVEhfQ09ORklHLk1BTlVBTF9SRURJUkVDVF9VUkxcbiAgICAgICAgOiBgaHR0cDovL2xvY2FsaG9zdDoke09BVVRIX0NPTkZJRy5SRURJUkVDVF9QT1JUfS9jYWxsYmFja2AsXG4gICAgICBjbGllbnRfaWQ6IE9BVVRIX0NPTkZJRy5DTElFTlRfSUQsXG4gICAgICBjb2RlX3ZlcmlmaWVyOiB0aGlzLmNvZGVWZXJpZmllcixcbiAgICAgIHN0YXRlLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goT0FVVEhfQ09ORklHLlRPS0VOX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxuICAgIH0pXG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRva2VuIGV4Y2hhbmdlIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBwcm9jZXNzQ2FsbGJhY2soe1xuICAgIGF1dGhvcml6YXRpb25Db2RlLFxuICAgIHN0YXRlLFxuICAgIHVzZU1hbnVhbFJlZGlyZWN0LFxuICB9OiB7XG4gICAgYXV0aG9yaXphdGlvbkNvZGU6IHN0cmluZ1xuICAgIHN0YXRlOiBzdHJpbmdcbiAgICB1c2VNYW51YWxSZWRpcmVjdDogYm9vbGVhblxuICB9KTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZVNlcnZlcigpXG5cbiAgICBpZiAoc3RhdGUgIT09IHRoaXMuZXhwZWN0ZWRTdGF0ZSkge1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0NvZGVQcm9taXNlKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NvZGVQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUgcGFyYW1ldGVyJyksIC8vIFBvc3NpYmxlIENTUkYgYXR0YWNrXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29kZVByb21pc2UgPSBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nQ29kZVByb21pc2UpIHtcbiAgICAgIHRoaXMucGVuZGluZ0NvZGVQcm9taXNlLnJlc29sdmUoeyBhdXRob3JpemF0aW9uQ29kZSwgdXNlTWFudWFsUmVkaXJlY3QgfSlcbiAgICAgIHRoaXMucGVuZGluZ0NvZGVQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VTZXJ2ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VydmVyKSB7XG4gICAgICB0aGlzLnNlcnZlci5jbG9zZSgpXG4gICAgICB0aGlzLnNlcnZlciA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFuZFN0b3JlQXBpS2V5KFxuICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgLy8gQ2FsbCBjcmVhdGVfYXBpX2tleSBlbmRwb2ludFxuICAgIGNvbnN0IGNyZWF0ZUFwaUtleVJlc3AgPSBhd2FpdCBmZXRjaChPQVVUSF9DT05GSUcuQVBJX0tFWV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCB9LFxuICAgIH0pXG5cbiAgICBsZXQgYXBpS2V5RGF0YVxuICAgIGxldCBlcnJvclRleHQgPSAnJ1xuXG4gICAgdHJ5IHtcbiAgICAgIGFwaUtleURhdGEgPSBhd2FpdCBjcmVhdGVBcGlLZXlSZXNwLmpzb24oKVxuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICAvLyBJZiByZXNwb25zZSBpcyBub3QgdmFsaWQgSlNPTiwgZ2V0IGFzIHRleHQgZm9yIGVycm9yIGxvZ2dpbmdcbiAgICAgIGVycm9yVGV4dCA9IGF3YWl0IGNyZWF0ZUFwaUtleVJlc3AudGV4dCgpXG4gICAgfVxuXG4gICAgbG9nRXZlbnQoJ3Rlbmd1X29hdXRoX2FwaV9rZXknLCB7XG4gICAgICBzdGF0dXM6IGNyZWF0ZUFwaUtleVJlc3Aub2sgPyAnc3VjY2VzcycgOiAnZmFpbHVyZScsXG4gICAgICBzdGF0dXNDb2RlOiBjcmVhdGVBcGlLZXlSZXNwLnN0YXR1cy50b1N0cmluZygpLFxuICAgICAgZXJyb3I6IGNyZWF0ZUFwaUtleVJlc3Aub2sgPyAnJyA6IGVycm9yVGV4dCB8fCBKU09OLnN0cmluZ2lmeShhcGlLZXlEYXRhKSxcbiAgICB9KVxuXG4gICAgaWYgKGNyZWF0ZUFwaUtleVJlc3Aub2sgJiYgYXBpS2V5RGF0YSAmJiBhcGlLZXlEYXRhLnJhd19rZXkpIHtcbiAgICAgIGNvbnN0IGFwaUtleSA9IGFwaUtleURhdGEucmF3X2tleVxuXG4gICAgICAvLyBTdG9yZSBpbiBnbG9iYWwgY29uZmlnXG4gICAgICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuXG4gICAgICAvLyBTdG9yZSBhcyBwcmltYXJ5IEFQSSBrZXlcbiAgICAgIGNvbmZpZy5wcmltYXJ5QXBpS2V5ID0gYXBpS2V5XG5cbiAgICAgIC8vIEFkZCB0byBhcHByb3ZlZCBsaXN0XG4gICAgICBpZiAoIWNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMpIHtcbiAgICAgICAgY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcyA9IHsgYXBwcm92ZWQ6IFtdLCByZWplY3RlZDogW10gfVxuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLmFwcHJvdmVkKSB7XG4gICAgICAgIGNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMuYXBwcm92ZWQgPSBbXVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnKGFwaUtleSlcbiAgICAgIGlmICghY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcy5hcHByb3ZlZC5pbmNsdWRlcyhub3JtYWxpemVkS2V5KSkge1xuICAgICAgICBjb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLmFwcHJvdmVkLnB1c2gobm9ybWFsaXplZEtleSlcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBjb25maWdcbiAgICAgIHNhdmVHbG9iYWxDb25maWcoY29uZmlnKVxuXG4gICAgICAvLyBSZXNldCB0aGUgQW50aHJvcGljIGNsaWVudCB0byBmb3JjZSBjcmVhdGlvbiB3aXRoIG5ldyBBUEkga2V5XG4gICAgICByZXNldEFudGhyb3BpY0NsaWVudCgpXG5cbiAgICAgIHJldHVybiBhcGlLZXlcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV9vYXV0aF9hcGlfa2V5Jywge1xuICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICBzdGF0dXNDb2RlOiAnZXhjZXB0aW9uJyxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLAogICAgImNvbnN0IEJBU0VfQ09ORklHID0ge1xuICBSRURJUkVDVF9QT1JUOiA1NDU0NSxcbiAgTUFOVUFMX1JFRElSRUNUX1VSTDogJy9vYXV0aC9jb2RlL2NhbGxiYWNrJyxcbiAgU0NPUEVTOiBbJ29yZzpjcmVhdGVfYXBpX2tleScsICd1c2VyOnByb2ZpbGUnXSBhcyBjb25zdCxcbn1cblxuLy8gUHJvZHVjdGlvbiBPQXV0aCBjb25maWd1cmF0aW9uIC0gVXNlZCBpbiBub3JtYWwgb3BlcmF0aW9uXG5jb25zdCBQUk9EX09BVVRIX0NPTkZJRyA9IHtcbiAgLi4uQkFTRV9DT05GSUcsXG4gIEFVVEhPUklaRV9VUkw6ICdodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9vYXV0aC9hdXRob3JpemUnLFxuICBUT0tFTl9VUkw6ICdodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS92MS9vYXV0aC90b2tlbicsXG4gIEFQSV9LRVlfVVJMOiAnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS9hcGkvb2F1dGgvY2xhdWRlX2NsaS9jcmVhdGVfYXBpX2tleScsXG4gIFNVQ0NFU1NfVVJMOlxuICAgICdodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9idXlfY3JlZGl0cz9yZXR1cm5Vcmw9L29hdXRoL2NvZGUvc3VjY2VzcycsXG4gIENMSUVOVF9JRDogJzlkMWMyNTBhLWU2MWItNDRkOS04OGVkLTU5NDRkMTk2MmY1ZScsXG59IGFzIGNvbnN0XG5cbi8vIE9ubHkgaW5jbHVkZSBzdGFnaW5nIGNvbmZpZyBpbiBhbnQgYnVpbGRzIHdpdGggc3RhZ2luZyBmbGFnXG5leHBvcnQgY29uc3QgU1RBR0lOR19PQVVUSF9DT05GSUcgPVxuICBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdhbnQnICYmIHByb2Nlc3MuZW52LlVTRV9TVEFHSU5HX09BVVRIID09PSAnMSdcbiAgICA/ICh7XG4gICAgICAgIC4uLkJBU0VfQ09ORklHLFxuICAgICAgICBBVVRIT1JJWkVfVVJMOiAnaHR0cHM6Ly9jb25zb2xlLnN0YWdpbmcuYW50LmRldi9vYXV0aC9hdXRob3JpemUnLFxuICAgICAgICBUT0tFTl9VUkw6ICdodHRwczovL2NvbnNvbGUuc3RhZ2luZy5hbnQuZGV2L3YxL29hdXRoL3Rva2VuJyxcbiAgICAgICAgQVBJX0tFWV9VUkw6XG4gICAgICAgICAgJ2h0dHBzOi8vYXBpLXN0YWdpbmcuYW50aHJvcGljLmNvbS9hcGkvb2F1dGgvY2xhdWRlX2NsaS9jcmVhdGVfYXBpX2tleScsXG4gICAgICAgIFNVQ0NFU1NfVVJMOlxuICAgICAgICAgICdodHRwczovL2NvbnNvbGUuc3RhZ2luZy5hbnQuZGV2L2J1eV9jcmVkaXRzP3JldHVyblVybD0vb2F1dGgvY29kZS9zdWNjZXNzJyxcbiAgICAgICAgQ0xJRU5UX0lEOiAnMjI0MjI3NTYtNjBjOS00MDg0LThlYjctMjc3MDVmZDVjZjlhJyxcbiAgICAgIH0gYXMgY29uc3QpXG4gICAgOiB1bmRlZmluZWRcblxuLy8gT25seSBpbmNsdWRlIHRlc3QgY29uZmlnIGluIHRlc3QgZW52aXJvbm1lbnRzXG5jb25zdCBURVNUX09BVVRIX0NPTkZJRyA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCdcbiAgICA/ICh7XG4gICAgICAgIC4uLkJBU0VfQ09ORklHLFxuICAgICAgICBBVVRIT1JJWkVfVVJMOiAnaHR0cDovL2xvY2FsaG9zdDozNDU2L29hdXRoL2F1dGhvcml6ZScsXG4gICAgICAgIFRPS0VOX1VSTDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzQ1Ni9vYXV0aC90b2tlbicsXG4gICAgICAgIEFQSV9LRVlfVVJMOiAnJyxcbiAgICAgICAgU1VDQ0VTU19VUkw6XG4gICAgICAgICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6MzQ1Ni9idXlfY3JlZGl0cz9yZXR1cm5Vcmw9L29hdXRoL2NvZGUvc3VjY2VzcycsXG4gICAgICAgIFJFRElSRUNUX1BPUlQ6IDc3NzcsXG4gICAgICAgIENMSUVOVF9JRDogJzlkMWMyNTBhLWU2MWItNDRkOS04OGVkLTU5NDRkMTk2MmY1ZScsXG4gICAgICB9IGFzIGNvbnN0KVxuICAgIDogdW5kZWZpbmVkXG5cbi8vIERlZmF1bHQgdG8gcHJvZCBjb25maWcsIG92ZXJyaWRlIHdpdGggdGVzdC9zdGFnaW5nIGlmIGVuYWJsZWRcbmV4cG9ydCBjb25zdCBPQVVUSF9DT05GSUcgPVxuICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyAmJiBURVNUX09BVVRIX0NPTkZJRykgfHxcbiAgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgJiZcbiAgICBwcm9jZXNzLmVudi5VU0VfU1RBR0lOR19PQVVUSCA9PT0gJzEnICYmXG4gICAgU1RBR0lOR19PQVVUSF9DT05GSUcpIHx8XG4gIFBST0RfT0FVVEhfQ09ORklHXG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBBc2NpaUxvZ28oKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgYWxpZ25JdGVtcz1cImZsZXgtc3RhcnRcIj5cbiAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5jbGF1ZGV9PlxuICAgICAgICB7YCDilojilojilojilojilojilojilZfilojilojilZcgICAgICDilojilojilojilojilojilZcg4paI4paI4pWXICAg4paI4paI4pWX4paI4paI4paI4paI4paI4paI4pWXIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKVl1xu4paI4paI4pWU4pWQ4pWQ4pWQ4pWQ4pWd4paI4paI4pWRICAgICDilojilojilZTilZDilZDilojilojilZfilojilojilZEgICDilojilojilZHilojilojilZTilZDilZDilojilojilZfilojilojilZTilZDilZDilZDilZDilZ1cbuKWiOKWiOKVkSAgICAg4paI4paI4pWRICAgICDilojilojilojilojilojilojilojilZHilojilojilZEgICDilojilojilZHilojilojilZEgIOKWiOKWiOKVkeKWiOKWiOKWiOKWiOKWiOKVlyAgXG7ilojilojilZEgICAgIOKWiOKWiOKVkSAgICAg4paI4paI4pWU4pWQ4pWQ4paI4paI4pWR4paI4paI4pWRICAg4paI4paI4pWR4paI4paI4pWRICDilojilojilZHilojilojilZTilZDilZDilZ0gIFxu4pWa4paI4paI4paI4paI4paI4paI4pWX4paI4paI4paI4paI4paI4paI4paI4pWX4paI4paI4pWRICDilojilojilZHilZrilojilojilojilojilojilojilZTilZ3ilojilojilojilojilojilojilZTilZ3ilojilojilojilojilojilojilojilZdcbiDilZrilZDilZDilZDilZDilZDilZ3ilZrilZDilZDilZDilZDilZDilZDilZ3ilZrilZDilZ0gIOKVmuKVkOKVnSDilZrilZDilZDilZDilZDilZDilZ0g4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWdIOKVmuKVkOKVkOKVkOKVkOKVkOKVkOKVnVxuIOKWiOKWiOKWiOKWiOKWiOKWiOKVlyDilojilojilojilojilojilojilZcg4paI4paI4paI4paI4paI4paI4pWXIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKVlyAgICAgICAgICAgICAgICBcbuKWiOKWiOKVlOKVkOKVkOKVkOKVkOKVneKWiOKWiOKVlOKVkOKVkOKVkOKWiOKWiOKVl+KWiOKWiOKVlOKVkOKVkOKWiOKWiOKVl+KWiOKWiOKVlOKVkOKVkOKVkOKVkOKVnSAgICAgICAgICAgICAgICBcbuKWiOKWiOKVkSAgICAg4paI4paI4pWRICAg4paI4paI4pWR4paI4paI4pWRICDilojilojilZHilojilojilojilojilojilZcgICAgICAgICAgICAgICAgICBcbuKWiOKWiOKVkSAgICAg4paI4paI4pWRICAg4paI4paI4pWR4paI4paI4pWRICDilojilojilZHilojilojilZTilZDilZDilZ0gICAgICAgICAgICAgICAgICBcbuKVmuKWiOKWiOKWiOKWiOKWiOKWiOKVl+KVmuKWiOKWiOKWiOKWiOKWiOKWiOKVlOKVneKWiOKWiOKWiOKWiOKWiOKWiOKVlOKVneKWiOKWiOKWiOKWiOKWiOKWiOKWiOKVlyAgICAgICAgICAgICAgICBcbiDilZrilZDilZDilZDilZDilZDilZ0g4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWdIOKVmuKVkOKVkOKVkOKVkOKVkOKVnSDilZrilZDilZDilZDilZDilZDilZDilZ1gfVxuICAgICAgPC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUFJPRFVDVF9OQU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Byb2R1Y3QuanMnXG5pbXBvcnQgeyBCb3gsIE5ld2xpbmUsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHtcbiAgZ2V0R2xvYmFsQ29uZmlnLFxuICBzYXZlR2xvYmFsQ29uZmlnLFxuICBnZXRDdXN0b21BcGlLZXlTdGF0dXMsXG4gIG5vcm1hbGl6ZUFwaUtleUZvckNvbmZpZyxcbiAgREVGQVVMVF9HTE9CQUxfQ09ORklHLFxufSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCB7IHVzZUV4aXRPbkN0cmxDRCB9IGZyb20gJy4uL2hvb2tzL3VzZUV4aXRPbkN0cmxDRC5qcydcbmltcG9ydCB7IE1JTl9MT0dPX1dJRFRIIH0gZnJvbSAnLi9Mb2dvLmpzJ1xuaW1wb3J0IHsgQ29uc29sZU9BdXRoRmxvdyB9IGZyb20gJy4vQ29uc29sZU9BdXRoRmxvdy5qcydcbmltcG9ydCB7IEFwcHJvdmVBcGlLZXkgfSBmcm9tICcuL0FwcHJvdmVBcGlLZXkuanMnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuL0N1c3RvbVNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IFN0cnVjdHVyZWREaWZmIH0gZnJvbSAnLi9TdHJ1Y3R1cmVkRGlmZi5qcydcbmltcG9ydCB7IGdldFRoZW1lLCBUaGVtZU5hbWVzIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBpc0FudGhyb3BpY0F1dGhFbmFibGVkIH0gZnJvbSAnLi4vdXRpbHMvYXV0aC5qcydcbmltcG9ydCBMaW5rIGZyb20gJy4vTGluay5qcydcbmltcG9ydCB7IGNsZWFyVGVybWluYWwgfSBmcm9tICcuLi91dGlscy90ZXJtaW5hbC5qcydcbmltcG9ydCB7IFByZXNzRW50ZXJUb0NvbnRpbnVlIH0gZnJvbSAnLi9QcmVzc0VudGVyVG9Db250aW51ZS5qcydcblxudHlwZSBTdGVwSWQgPSAndGhlbWUnIHwgJ29hdXRoJyB8ICdhcGkta2V5JyB8ICd1c2FnZScgfCAnc2VjdXJpdHknXG5cbmludGVyZmFjZSBPbmJvYXJkaW5nU3RlcCB7XG4gIGlkOiBTdGVwSWRcbiAgY29tcG9uZW50OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxudHlwZSBQcm9wcyA9IHtcbiAgb25Eb25lKCk6IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uYm9hcmRpbmcoeyBvbkRvbmUgfTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbY3VycmVudFN0ZXBJbmRleCwgc2V0Q3VycmVudFN0ZXBJbmRleF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBjb25zdCBvYXV0aEVuYWJsZWQgPSBpc0FudGhyb3BpY0F1dGhFbmFibGVkKClcbiAgY29uc3QgW3NlbGVjdGVkVGhlbWUsIHNldFNlbGVjdGVkVGhlbWVdID0gdXNlU3RhdGUoXG4gICAgREVGQVVMVF9HTE9CQUxfQ09ORklHLnRoZW1lLFxuICApXG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuICBmdW5jdGlvbiBnb1RvTmV4dFN0ZXAoKSB7XG4gICAgaWYgKGN1cnJlbnRTdGVwSW5kZXggPCBzdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50U3RlcEluZGV4ICsgMVxuICAgICAgc2V0Q3VycmVudFN0ZXBJbmRleChuZXh0SW5kZXgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGhlbWVTZWxlY3Rpb24obmV3VGhlbWU6IHN0cmluZykge1xuICAgIHNhdmVHbG9iYWxDb25maWcoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgdGhlbWU6IG5ld1RoZW1lIGFzIFRoZW1lTmFtZXMsXG4gICAgfSlcbiAgICBnb1RvTmV4dFN0ZXAoKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGhlbWVQcmV2aWV3KG5ld1RoZW1lOiBzdHJpbmcpIHtcbiAgICBzZXRTZWxlY3RlZFRoZW1lKG5ld1RoZW1lIGFzIFRoZW1lTmFtZXMpXG4gIH1cblxuICBjb25zdCBleGl0U3RhdGUgPSB1c2VFeGl0T25DdHJsQ0QoKCkgPT4gcHJvY2Vzcy5leGl0KDApKVxuXG4gIHVzZUlucHV0KGFzeW5jIChfLCBrZXkpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U3RlcCA9IHN0ZXBzW2N1cnJlbnRTdGVwSW5kZXhdXG4gICAgaWYgKFxuICAgICAga2V5LnJldHVybiAmJlxuICAgICAgY3VycmVudFN0ZXAgJiZcbiAgICAgIFsndXNhZ2UnLCAnc2VjdXJpdHknXS5pbmNsdWRlcyhjdXJyZW50U3RlcC5pZClcbiAgICApIHtcbiAgICAgIGlmIChjdXJyZW50U3RlcEluZGV4ID09PSBzdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIG9uRG9uZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBIQUNLOiBmb3Igc29tZSByZWFzb24gdGhlcmUncyBub3cgYSBqdW1wIGhlcmUgb3RoZXJ3aXNlIDooXG4gICAgICAgIGlmIChjdXJyZW50U3RlcC5pZCA9PT0gJ3NlY3VyaXR5Jykge1xuICAgICAgICAgIGF3YWl0IGNsZWFyVGVybWluYWwoKVxuICAgICAgICB9XG4gICAgICAgIGdvVG9OZXh0U3RlcCgpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIC8vIERlZmluZSBhbGwgb25ib2FyZGluZyBzdGVwc1xuICBjb25zdCB0aGVtZVN0ZXAgPSAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfSBwYWRkaW5nTGVmdD17MX0+XG4gICAgICA8VGV4dD5MZXQmYXBvcztzIGdldCBzdGFydGVkLjwvVGV4dD5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8VGV4dCBib2xkPkNob29zZSB0aGUgb3B0aW9uIHRoYXQgbG9va3MgYmVzdCB3aGVuIHlvdSBzZWxlY3QgaXQ6PC9UZXh0PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5UbyBjaGFuZ2UgdGhpcyBsYXRlciwgcnVuIC9jb25maWc8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICAgIDxTZWxlY3RcbiAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgIHsgbGFiZWw6ICdMaWdodCB0ZXh0JywgdmFsdWU6ICdkYXJrJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdEYXJrIHRleHQnLCB2YWx1ZTogJ2xpZ2h0JyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnTGlnaHQgdGV4dCAoY29sb3JibGluZC1mcmllbmRseSknLFxuICAgICAgICAgICAgdmFsdWU6ICdkYXJrLWRhbHRvbml6ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdEYXJrIHRleHQgKGNvbG9yYmxpbmQtZnJpZW5kbHkpJyxcbiAgICAgICAgICAgIHZhbHVlOiAnbGlnaHQtZGFsdG9uaXplZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXX1cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlVGhlbWVQcmV2aWV3fVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlVGhlbWVTZWxlY3Rpb259XG4gICAgICAvPlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIDxCb3hcbiAgICAgICAgICBwYWRkaW5nTGVmdD17MX1cbiAgICAgICAgICBtYXJnaW5SaWdodD17MX1cbiAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICBib3JkZXJDb2xvcj1cImdyYXlcIlxuICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICA+XG4gICAgICAgICAgPFN0cnVjdHVyZWREaWZmXG4gICAgICAgICAgICBwYXRjaD17e1xuICAgICAgICAgICAgICBvbGRTdGFydDogMSxcbiAgICAgICAgICAgICAgbmV3U3RhcnQ6IDEsXG4gICAgICAgICAgICAgIG9sZExpbmVzOiAzLFxuICAgICAgICAgICAgICBuZXdMaW5lczogMyxcbiAgICAgICAgICAgICAgbGluZXM6IFtcbiAgICAgICAgICAgICAgICAnZnVuY3Rpb24gZ3JlZXQoKSB7JyxcbiAgICAgICAgICAgICAgICAnLSAgY29uc29sZS5sb2coXCJIZWxsbywgV29ybGQhXCIpOycsXG4gICAgICAgICAgICAgICAgJysgIGNvbnNvbGUubG9nKFwiSGVsbG8sIENsYXVkZSFcIik7JyxcbiAgICAgICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGltPXtmYWxzZX1cbiAgICAgICAgICAgIHdpZHRoPXs0MH1cbiAgICAgICAgICAgIG92ZXJyaWRlVGhlbWU9e3NlbGVjdGVkVGhlbWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxuXG4gIGNvbnN0IHNlY3VyaXR5U3RlcCA9IChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9IHBhZGRpbmdMZWZ0PXsxfT5cbiAgICAgIDxUZXh0IGJvbGQ+U2VjdXJpdHkgbm90ZXM6PC9UZXh0PlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9ezcwfT5cbiAgICAgICAgPE9yZGVyZWRMaXN0PlxuICAgICAgICAgIDxPcmRlcmVkTGlzdC5JdGVtPlxuICAgICAgICAgICAgPFRleHQ+Q2xhdWRlIENvZGUgaXMgY3VycmVudGx5IGluIHJlc2VhcmNoIHByZXZpZXc8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0gd3JhcD1cIndyYXBcIj5cbiAgICAgICAgICAgICAgVGhpcyBiZXRhIHZlcnNpb24gbWF5IGhhdmUgbGltaXRhdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgICAgICAgICAgIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICAgIFJ1biAvYnVnIGF0IGFueSB0aW1lIHRvIHJlcG9ydCBpc3N1ZXMuXG4gICAgICAgICAgICAgIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9PcmRlcmVkTGlzdC5JdGVtPlxuICAgICAgICAgIDxPcmRlcmVkTGlzdC5JdGVtPlxuICAgICAgICAgICAgPFRleHQ+Q2xhdWRlIGNhbiBtYWtlIG1pc3Rha2VzPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9IHdyYXA9XCJ3cmFwXCI+XG4gICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHJldmlldyBDbGF1ZGUmYXBvcztzIHJlc3BvbnNlcywgZXNwZWNpYWxseSB3aGVuXG4gICAgICAgICAgICAgIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICAgIHJ1bm5pbmcgY29kZS5cbiAgICAgICAgICAgICAgPE5ld2xpbmUgLz5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L09yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgICAgPE9yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgRHVlIHRvIHByb21wdCBpbmplY3Rpb24gcmlza3MsIG9ubHkgdXNlIGl0IHdpdGggY29kZSB5b3UgdHJ1c3RcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fSB3cmFwPVwid3JhcFwiPlxuICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZTpcbiAgICAgICAgICAgICAgPE5ld2xpbmUgLz5cbiAgICAgICAgICAgICAgPExpbmsgdXJsPVwiaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vcy9jbGF1ZGUtY29kZS1zZWN1cml0eVwiIC8+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9PcmRlcmVkTGlzdC5JdGVtPlxuICAgICAgICA8L09yZGVyZWRMaXN0PlxuICAgICAgPC9Cb3g+XG4gICAgICA8UHJlc3NFbnRlclRvQ29udGludWUgLz5cbiAgICA8L0JveD5cbiAgKVxuXG4gIGNvbnN0IHVzYWdlU3RlcCA9IChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9IHBhZGRpbmdMZWZ0PXsxfT5cbiAgICAgIDxUZXh0IGJvbGQ+VXNpbmcge1BST0RVQ1RfTkFNRX0gZWZmZWN0aXZlbHk6PC9UZXh0PlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9ezcwfT5cbiAgICAgICAgPE9yZGVyZWRMaXN0PlxuICAgICAgICAgIDxPcmRlcmVkTGlzdC5JdGVtPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIFN0YXJ0IGluIHlvdXIgcHJvamVjdCBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgPE5ld2xpbmUgLz5cbiAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAgIEZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGNvbnRleHQgd2hlbiBuZWVkZWQuXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPE5ld2xpbmUgLz5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L09yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgICAgPE9yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgVXNlIHtQUk9EVUNUX05BTUV9IGFzIGEgZGV2ZWxvcG1lbnQgcGFydG5lclxuICAgICAgICAgICAgICA8TmV3bGluZSAvPlxuICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgR2V0IGhlbHAgd2l0aCBmaWxlIGFuYWx5c2lzLCBlZGl0aW5nLCBiYXNoIGNvbW1hbmRzLFxuICAgICAgICAgICAgICAgIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICAgICAgYW5kIGdpdCBoaXN0b3J5LlxuICAgICAgICAgICAgICAgIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L09yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgICAgPE9yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgUHJvdmlkZSBjbGVhciBjb250ZXh0XG4gICAgICAgICAgICAgIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgICAgICAgICAgICBCZSBhcyBzcGVjaWZpYyBhcyB5b3Ugd291bGQgd2l0aCBhbm90aGVyIGVuZ2luZWVyLiA8TmV3bGluZSAvPlxuICAgICAgICAgICAgICAgIFRoZSBiZXR0ZXIgdGhlIGNvbnRleHQsIHRoZSBiZXR0ZXIgdGhlIHJlc3VsdHMuIDxOZXdsaW5lIC8+XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L09yZGVyZWRMaXN0Lkl0ZW0+XG4gICAgICAgIDwvT3JkZXJlZExpc3Q+XG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIHtQUk9EVUNUX05BTUV9LCBzZWU6XG4gICAgICAgICAgICA8TmV3bGluZSAvPlxuICAgICAgICAgICAgPExpbmsgdXJsPXtNQUNSTy5SRUFETUVfVVJMfSAvPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICAgIDxQcmVzc0VudGVyVG9Db250aW51ZSAvPlxuICAgIDwvQm94PlxuICApXG5cbiAgLy8gQ3JlYXRlIHRoZSBzdGVwcyBhcnJheSAtIGRldGVybWluZSB3aGljaCBzdGVwcyB0byBpbmNsdWRlIGJhc2VkIG9uIHJlQXV0aCBhbmQgb2F1dGhFbmFibGVkXG4gIGNvbnN0IGFwaUtleU5lZWRpbmdBcHByb3ZhbCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgIT09ICdhbnQnKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgLy8gQWRkIEFQSSBrZXkgc3RlcCBpZiBuZWVkZWRcbiAgICBpZiAoIXByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgY29uc3QgY3VzdG9tQXBpS2V5VHJ1bmNhdGVkID0gbm9ybWFsaXplQXBpS2V5Rm9yQ29uZmlnKFxuICAgICAgcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVkhLFxuICAgIClcbiAgICBpZiAoZ2V0Q3VzdG9tQXBpS2V5U3RhdHVzKGN1c3RvbUFwaUtleVRydW5jYXRlZCkgPT09ICduZXcnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXBpS2V5VHJ1bmNhdGVkXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBzdGVwczogT25ib2FyZGluZ1N0ZXBbXSA9IFtdXG4gIHN0ZXBzLnB1c2goeyBpZDogJ3RoZW1lJywgY29tcG9uZW50OiB0aGVtZVN0ZXAgfSlcblxuICAvLyBBZGQgT0F1dGggc3RlcCBpZiBBbnRocm9waWMgYXV0aCBpcyBlbmFibGVkIGFuZCB1c2VyIGlzIG5vdCBsb2dnZWQgaW5cbiAgaWYgKG9hdXRoRW5hYmxlZCkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgaWQ6ICdvYXV0aCcsXG4gICAgICBjb21wb25lbnQ6IDxDb25zb2xlT0F1dGhGbG93IG9uRG9uZT17Z29Ub05leHRTdGVwfSAvPixcbiAgICB9KVxuICB9XG5cbiAgLy8gQWRkIEFQSSBrZXkgc3RlcCBpZiBuZWVkZWRcbiAgaWYgKGFwaUtleU5lZWRpbmdBcHByb3ZhbCkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgaWQ6ICdhcGkta2V5JyxcbiAgICAgIGNvbXBvbmVudDogKFxuICAgICAgICA8QXBwcm92ZUFwaUtleVxuICAgICAgICAgIGN1c3RvbUFwaUtleVRydW5jYXRlZD17YXBpS2V5TmVlZGluZ0FwcHJvdmFsfVxuICAgICAgICAgIG9uRG9uZT17Z29Ub05leHRTdGVwfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICB9KVxuICB9XG5cbiAgLy8gQWRkIHNlY3VyaXR5IHN0ZXBcbiAgc3RlcHMucHVzaCh7IGlkOiAnc2VjdXJpdHknLCBjb21wb25lbnQ6IHNlY3VyaXR5U3RlcCB9KVxuXG4gIC8vIEFkZCB1c2FnZSBzdGVwIGFzIHRoZSBsYXN0IGNvbnRlbnQgc3RlcFxuICBzdGVwcy5wdXNoKHsgaWQ6ICd1c2FnZScsIGNvbXBvbmVudDogdXNhZ2VTdGVwIH0pXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgIHsvKiBPQXV0aCB1c2VzIHN0YXRpYyByZW5kZXJpbmcgc28gd2UgbmVlZCB0byBoaWRlIHdlbGNvbWUgYm94IGhlcmVcbiAgICAgICAgICBhbmQgcmUtcmVuZGVyIGl0IGluc2lkZSBDb25zb2xlT0F1dGhGbG93IHRvIHByZXNlcnZlIGxheW91dCAqL31cbiAgICAgIHtzdGVwc1tjdXJyZW50U3RlcEluZGV4XT8uaWQgIT09ICdvYXV0aCcgJiYgPFdlbGNvbWVCb3ggLz59XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXswfSBnYXA9ezB9PlxuICAgICAgICB7c3RlcHNbY3VycmVudFN0ZXBJbmRleF0/LmNvbXBvbmVudH1cbiAgICAgICAge2V4aXRTdGF0ZS5wZW5kaW5nICYmIChcbiAgICAgICAgICA8Qm94IHBhZGRpbmc9ezF9PlxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC9UZXh0PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApfVxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdlbGNvbWVCb3goKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLmNsYXVkZX1cbiAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgcGFkZGluZ1g9ezF9XG4gICAgICB3aWR0aD17TUlOX0xPR09fV0lEVEh9XG4gICAgPlxuICAgICAgPFRleHQ+XG4gICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5jbGF1ZGV9PuKcuzwvVGV4dD4gV2VsY29tZSB0b3snICd9XG4gICAgICAgIDxUZXh0IGJvbGQ+e1BST0RVQ1RfTkFNRX08L1RleHQ+IHJlc2VhcmNoIHByZXZpZXchXG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgZ2V0R2xvYmFsQ29uZmlnLCBzYXZlR2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCB7IHVzZUV4aXRPbkN0cmxDRCB9IGZyb20gJy4uL2hvb2tzL3VzZUV4aXRPbkN0cmxDRC5qcydcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxudHlwZSBQcm9wcyA9IHtcbiAgY3VzdG9tQXBpS2V5VHJ1bmNhdGVkOiBzdHJpbmdcbiAgb25Eb25lKCk6IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcHJvdmVBcGlLZXkoe1xuICBjdXN0b21BcGlLZXlUcnVuY2F0ZWQsXG4gIG9uRG9uZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG5cbiAgZnVuY3Rpb24gb25DaGFuZ2UodmFsdWU6ICd5ZXMnIHwgJ25vJykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAneWVzJzoge1xuICAgICAgICBzYXZlR2xvYmFsQ29uZmlnKHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgY3VzdG9tQXBpS2V5UmVzcG9uc2VzOiB7XG4gICAgICAgICAgICAuLi5jb25maWcuY3VzdG9tQXBpS2V5UmVzcG9uc2VzLFxuICAgICAgICAgICAgYXBwcm92ZWQ6IFtcbiAgICAgICAgICAgICAgLi4uKGNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXM/LmFwcHJvdmVkID8/IFtdKSxcbiAgICAgICAgICAgICAgY3VzdG9tQXBpS2V5VHJ1bmNhdGVkLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBvbkRvbmUoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnbm8nOiB7XG4gICAgICAgIHNhdmVHbG9iYWxDb25maWcoe1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBjdXN0b21BcGlLZXlSZXNwb25zZXM6IHtcbiAgICAgICAgICAgIC4uLmNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMsXG4gICAgICAgICAgICByZWplY3RlZDogW1xuICAgICAgICAgICAgICAuLi4oY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcz8ucmVqZWN0ZWQgPz8gW10pLFxuICAgICAgICAgICAgICBjdXN0b21BcGlLZXlUcnVuY2F0ZWQsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIG9uRG9uZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Qm94XG4gICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICBnYXA9ezF9XG4gICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUud2FybmluZ31cbiAgICAgID5cbiAgICAgICAgPFRleHQgYm9sZCBjb2xvcj17dGhlbWUud2FybmluZ30+XG4gICAgICAgICAgRGV0ZWN0ZWQgYSBjdXN0b20gQVBJIGtleSBpbiB5b3VyIGVudmlyb25tZW50XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgWW91ciBlbnZpcm9ubWVudCBzZXRzeycgJ31cbiAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUud2FybmluZ30+QU5USFJPUElDX0FQSV9LRVk8L1RleHQ+OnsnICd9XG4gICAgICAgICAgPFRleHQgYm9sZD5zay1hbnQtLi4ue2N1c3RvbUFwaUtleVRydW5jYXRlZH08L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+RG8geW91IHdhbnQgdG8gdXNlIHRoaXMgQVBJIGtleT88L1RleHQ+XG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICB7IGxhYmVsOiBgTm8gKCR7Y2hhbGsuYm9sZCgncmVjb21tZW5kZWQnKX0pYCwgdmFsdWU6ICdubycgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdZZXMnLCB2YWx1ZTogJ3llcycgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIG9uQ2hhbmdlPXt2YWx1ZSA9PiBvbkNoYW5nZSh2YWx1ZSBhcyAneWVzJyB8ICdubycpfVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IG1hcmdpbkxlZnQ9ezN9PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICB7ZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgICAgICA8PlByZXNzIHtleGl0U3RhdGUua2V5TmFtZX0gYWdhaW4gdG8gZXhpdDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PkVudGVyIHRvIGNvbmZpcm08Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEh1bmsgfSBmcm9tICdkaWZmJ1xuaW1wb3J0IHsgZ2V0VGhlbWUsIFRoZW1lTmFtZXMgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHdyYXBUZXh0IH0gZnJvbSAnLi4vdXRpbHMvZm9ybWF0LmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBwYXRjaDogSHVua1xuICBkaW06IGJvb2xlYW5cbiAgd2lkdGg6IG51bWJlclxuICBvdmVycmlkZVRoZW1lPzogVGhlbWVOYW1lcyAvLyBjdXN0b20gdGhlbWUgZm9yIHByZXZpZXdzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdHJ1Y3R1cmVkRGlmZih7XG4gIHBhdGNoLFxuICBkaW0sXG4gIHdpZHRoLFxuICBvdmVycmlkZVRoZW1lLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBkaWZmID0gdXNlTWVtbyhcbiAgICAoKSA9PiBmb3JtYXREaWZmKHBhdGNoLmxpbmVzLCBwYXRjaC5vbGRTdGFydCwgd2lkdGgsIGRpbSwgb3ZlcnJpZGVUaGVtZSksXG4gICAgW3BhdGNoLmxpbmVzLCBwYXRjaC5vbGRTdGFydCwgd2lkdGgsIGRpbSwgb3ZlcnJpZGVUaGVtZV0sXG4gIClcblxuICByZXR1cm4gZGlmZi5tYXAoKF8sIGkpID0+IDxCb3gga2V5PXtpfT57X308L0JveD4pXG59XG5cbmZ1bmN0aW9uIGZvcm1hdERpZmYoXG4gIGxpbmVzOiBzdHJpbmdbXSxcbiAgc3RhcnRpbmdMaW5lTnVtYmVyOiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGRpbTogYm9vbGVhbixcbiAgb3ZlcnJpZGVUaGVtZT86IFRoZW1lTmFtZXMsXG4pOiBSZWFjdC5SZWFjdE5vZGVbXSB7XG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUob3ZlcnJpZGVUaGVtZSlcblxuICBjb25zdCBscyA9IG51bWJlckRpZmZMaW5lcyhcbiAgICBsaW5lcy5tYXAoY29kZSA9PiB7XG4gICAgICBpZiAoY29kZS5zdGFydHNXaXRoKCcrJykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2RlOiAnICcgKyBjb2RlLnNsaWNlKDEpLFxuICAgICAgICAgIGk6IDAsXG4gICAgICAgICAgdHlwZTogJ2FkZCcsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb2RlLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvZGU6ICcgJyArIGNvZGUuc2xpY2UoMSksXG4gICAgICAgICAgaTogMCxcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlJyxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29kZSwgaTogMCwgdHlwZTogJ25vY2hhbmdlJyB9XG4gICAgfSksXG4gICAgc3RhcnRpbmdMaW5lTnVtYmVyLFxuICApXG5cbiAgY29uc3QgbWF4TGluZU51bWJlciA9IE1hdGgubWF4KC4uLmxzLm1hcCgoeyBpIH0pID0+IGkpKVxuICBjb25zdCBtYXhXaWR0aCA9IG1heExpbmVOdW1iZXIudG9TdHJpbmcoKS5sZW5ndGhcblxuICByZXR1cm4gbHMuZmxhdE1hcCgoeyB0eXBlLCBjb2RlLCBpIH0pID0+IHtcbiAgICBjb25zdCB3cmFwcGVkTGluZXMgPSB3cmFwVGV4dChjb2RlLCB3aWR0aCAtIG1heFdpZHRoKVxuICAgIHJldHVybiB3cmFwcGVkTGluZXMubWFwKChsaW5lLCBsaW5lSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3R5cGV9LSR7aX0tJHtsaW5lSW5kZXh9YFxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxUZXh0IGtleT17a2V5fT5cbiAgICAgICAgICAgICAgPExpbmVOdW1iZXJcbiAgICAgICAgICAgICAgICBpPXtsaW5lSW5kZXggPT09IDAgPyBpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdpZHRoPXttYXhXaWR0aH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBjb2xvcj17b3ZlcnJpZGVUaGVtZSA/IHRoZW1lLnRleHQgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPXtcbiAgICAgICAgICAgICAgICAgIGRpbSA/IHRoZW1lLmRpZmYuYWRkZWREaW1tZWQgOiB0aGVtZS5kaWZmLmFkZGVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpbUNvbG9yPXtkaW19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bGluZX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIClcbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRleHQga2V5PXtrZXl9PlxuICAgICAgICAgICAgICA8TGluZU51bWJlclxuICAgICAgICAgICAgICAgIGk9e2xpbmVJbmRleCA9PT0gMCA/IGkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgd2lkdGg9e21heFdpZHRofVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIGNvbG9yPXtvdmVycmlkZVRoZW1lID8gdGhlbWUudGV4dCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e1xuICAgICAgICAgICAgICAgICAgZGltID8gdGhlbWUuZGlmZi5yZW1vdmVkRGltbWVkIDogdGhlbWUuZGlmZi5yZW1vdmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpbUNvbG9yPXtkaW19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bGluZX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIClcbiAgICAgICAgY2FzZSAnbm9jaGFuZ2UnOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGV4dCBrZXk9e2tleX0+XG4gICAgICAgICAgICAgIDxMaW5lTnVtYmVyXG4gICAgICAgICAgICAgICAgaT17bGluZUluZGV4ID09PSAwID8gaSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICB3aWR0aD17bWF4V2lkdGh9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgY29sb3I9e292ZXJyaWRlVGhlbWUgPyB0aGVtZS50ZXh0IDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIGRpbUNvbG9yPXtkaW19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bGluZX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBMaW5lTnVtYmVyKHtcbiAgaSxcbiAgd2lkdGgsXG59OiB7XG4gIGk6IG51bWJlciB8IHVuZGVmaW5lZFxuICB3aWR0aDogbnVtYmVyXG59KTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT5cbiAgICAgIHtpICE9PSB1bmRlZmluZWQgPyBpLnRvU3RyaW5nKCkucGFkU3RhcnQod2lkdGgpIDogJyAnLnJlcGVhdCh3aWR0aCl9eycgJ31cbiAgICA8L1RleHQ+XG4gIClcbn1cblxuZnVuY3Rpb24gbnVtYmVyRGlmZkxpbmVzKFxuICBkaWZmOiB7IGNvZGU6IHN0cmluZzsgdHlwZTogc3RyaW5nIH1bXSxcbiAgc3RhcnRMaW5lOiBudW1iZXIsXG4pOiB7IGNvZGU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpOiBudW1iZXIgfVtdIHtcbiAgbGV0IGkgPSBzdGFydExpbmVcbiAgY29uc3QgcmVzdWx0OiB7IGNvZGU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpOiBudW1iZXIgfVtdID0gW11cbiAgY29uc3QgcXVldWUgPSBbLi4uZGlmZl1cblxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHsgY29kZSwgdHlwZSB9ID0gcXVldWUuc2hpZnQoKSFcbiAgICBjb25zdCBsaW5lID0ge1xuICAgICAgY29kZTogY29kZSxcbiAgICAgIHR5cGUsXG4gICAgICBpLFxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3VudGVycyBiYXNlZCBvbiBjaGFuZ2UgdHlwZVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbm9jaGFuZ2UnOlxuICAgICAgICBpKytcbiAgICAgICAgcmVzdWx0LnB1c2gobGluZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgIGkrK1xuICAgICAgICByZXN1bHQucHVzaChsaW5lKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmVtb3ZlJzoge1xuICAgICAgICByZXN1bHQucHVzaChsaW5lKVxuICAgICAgICBsZXQgbnVtUmVtb3ZlZCA9IDBcbiAgICAgICAgd2hpbGUgKHF1ZXVlWzBdPy50eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgICAgIGkrK1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgdHlwZSB9ID0gcXVldWUuc2hpZnQoKSFcbiAgICAgICAgICBjb25zdCBsaW5lID0ge1xuICAgICAgICAgICAgY29kZTogY29kZSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaChsaW5lKVxuICAgICAgICAgIG51bVJlbW92ZWQrK1xuICAgICAgICB9XG4gICAgICAgIGkgLT0gbnVtUmVtb3ZlZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsCiAgICAiaW1wb3J0IHsgVVNFX0JFRFJPQ0ssIFVTRV9WRVJURVggfSBmcm9tICcuL21vZGVsLmpzJ1xuaW1wb3J0IHsgZ2V0R2xvYmFsQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FudGhyb3BpY0F1dGhFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gIShVU0VfQkVEUk9DSyB8fCBVU0VfVkVSVEVYKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMb2dnZWRJblRvQW50aHJvcGljKCk6IGJvb2xlYW4ge1xuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICByZXR1cm4gISFjb25maWcucHJpbWFyeUFwaUtleVxufVxuIiwKICAgICJpbXBvcnQgeyBnZXRHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvbk9wdGlvbnMgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZ1xuICB0aXRsZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBzZW5kSVRlcm0yTm90aWZpY2F0aW9uKHsgbWVzc2FnZSwgdGl0bGUgfTogTm90aWZpY2F0aW9uT3B0aW9ucyk6IHZvaWQge1xuICBjb25zdCBkaXNwbGF5U3RyaW5nID0gdGl0bGUgPyBgJHt0aXRsZX06XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlXG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxceDFiXTk7XFxuXFxuJHtkaXNwbGF5U3RyaW5nfVxceDA3YClcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGVycm9yc1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlbmRUZXJtaW5hbEJlbGwoKTogdm9pZCB7XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXHgwNycpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kTm90aWZpY2F0aW9uKFxuICBub3RpZjogTm90aWZpY2F0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjaGFubmVsID0gZ2V0R2xvYmFsQ29uZmlnKCkucHJlZmVycmVkTm90aWZDaGFubmVsXG4gIHN3aXRjaCAoY2hhbm5lbCkge1xuICAgIGNhc2UgJ2l0ZXJtMic6XG4gICAgICBzZW5kSVRlcm0yTm90aWZpY2F0aW9uKG5vdGlmKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd0ZXJtaW5hbF9iZWxsJzpcbiAgICAgIHNlbmRUZXJtaW5hbEJlbGwoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdpdGVybTJfd2l0aF9iZWxsJzpcbiAgICAgIHNlbmRJVGVybTJOb3RpZmljYXRpb24obm90aWYpXG4gICAgICBzZW5kVGVybWluYWxCZWxsKClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbm90aWZpY2F0aW9uc19kaXNhYmxlZCc6XG4gICAgICAvLyBEbyBub3RoaW5nXG4gICAgICBicmVha1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBnZXRHbG9iYWxDb25maWcsIHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBjbGVhclRlcm1pbmFsIH0gZnJvbSAnLi4vdXRpbHMvdGVybWluYWwuanMnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGU6ICdsb2NhbC1qc3gnLFxuICBuYW1lOiAnbG9nb3V0JyxcbiAgZGVzY3JpcHRpb246ICdTaWduIG91dCBmcm9tIHlvdXIgQW50aHJvcGljIGFjY291bnQnLFxuICBpc0VuYWJsZWQ6IHRydWUsXG4gIGlzSGlkZGVuOiBmYWxzZSxcbiAgYXN5bmMgY2FsbCgpIHtcbiAgICBhd2FpdCBjbGVhclRlcm1pbmFsKClcblxuICAgIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG5cbiAgICBjb25maWcub2F1dGhBY2NvdW50ID0gdW5kZWZpbmVkXG4gICAgY29uZmlnLnByaW1hcnlBcGlLZXkgPSB1bmRlZmluZWRcbiAgICBjb25maWcuaGFzQ29tcGxldGVkT25ib2FyZGluZyA9IGZhbHNlXG5cbiAgICBpZiAoY29uZmlnLmN1c3RvbUFwaUtleVJlc3BvbnNlcz8uYXBwcm92ZWQpIHtcbiAgICAgIGNvbmZpZy5jdXN0b21BcGlLZXlSZXNwb25zZXMuYXBwcm92ZWQgPSBbXVxuICAgIH1cblxuICAgIHNhdmVHbG9iYWxDb25maWcoY29uZmlnKVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IChcbiAgICAgIDxUZXh0PlN1Y2Nlc3NmdWxseSBsb2dnZWQgb3V0IGZyb20geW91ciBBbnRocm9waWMgYWNjb3VudC48L1RleHQ+XG4gICAgKVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9LCAyMDApXG5cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ2xvZ291dCdcbiAgfSxcbn0gc2F0aXNmaWVzIENvbW1hbmRcbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IE9uYm9hcmRpbmcgfSBmcm9tICcuLi9jb21wb25lbnRzL09uYm9hcmRpbmcuanMnXG5pbXBvcnQgeyBjbGVhclRlcm1pbmFsIH0gZnJvbSAnLi4vdXRpbHMvdGVybWluYWwuanMnXG5pbXBvcnQgeyBnZXRHbG9iYWxDb25maWcsIHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBjbGVhckNvbnZlcnNhdGlvbiB9IGZyb20gJy4vY2xlYXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZTogJ2xvY2FsLWpzeCcsXG4gIG5hbWU6ICdvbmJvYXJkaW5nJyxcbiAgZGVzY3JpcHRpb246ICdbQU5ULU9OTFldIFJ1biB0aHJvdWdoIHRoZSBvbmJvYXJkaW5nIGZsb3cnLFxuICBpc0VuYWJsZWQ6IHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcsXG4gIGlzSGlkZGVuOiBmYWxzZSxcbiAgYXN5bmMgY2FsbChvbkRvbmUsIGNvbnRleHQpIHtcbiAgICBhd2FpdCBjbGVhclRlcm1pbmFsKClcbiAgICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICAgIHNhdmVHbG9iYWxDb25maWcoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgdGhlbWU6ICdkYXJrJyxcbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxPbmJvYXJkaW5nXG4gICAgICAgIG9uRG9uZT17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNsZWFyQ29udmVyc2F0aW9uKGNvbnRleHQpXG4gICAgICAgICAgb25Eb25lKClcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKVxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ29uYm9hcmRpbmcnXG4gIH0sXG59IHNhdGlzZmllcyBDb21tYW5kXG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0eXBlOiAncHJvbXB0JyxcbiAgbmFtZTogJ3ByLWNvbW1lbnRzJyxcbiAgZGVzY3JpcHRpb246ICdHZXQgY29tbWVudHMgZnJvbSBhIEdpdEh1YiBwdWxsIHJlcXVlc3QnLFxuICBwcm9ncmVzc01lc3NhZ2U6ICdmZXRjaGluZyBQUiBjb21tZW50cycsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ3ByLWNvbW1lbnRzJ1xuICB9LFxuICBhc3luYyBnZXRQcm9tcHRGb3JDb21tYW5kKGFyZ3M6IHN0cmluZykge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHJvbGU6ICd1c2VyJyxcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHRleHQ6IGBZb3UgYXJlIGFuIEFJIGFzc2lzdGFudCBpbnRlZ3JhdGVkIGludG8gYSBnaXQtYmFzZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4gWW91ciB0YXNrIGlzIHRvIGZldGNoIGFuZCBkaXNwbGF5IGNvbW1lbnRzIGZyb20gYSBHaXRIdWIgcHVsbCByZXF1ZXN0LlxuXG5Gb2xsb3cgdGhlc2Ugc3RlcHM6XG5cbjEuIFVzZSBcXGBnaCBwciB2aWV3IC0tanNvbiBudW1iZXIsaGVhZFJlcG9zaXRvcnlcXGAgdG8gZ2V0IHRoZSBQUiBudW1iZXIgYW5kIHJlcG9zaXRvcnkgaW5mb1xuMi4gVXNlIFxcYGdoIGFwaSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tudW1iZXJ9L2NvbW1lbnRzXFxgIHRvIGdldCBQUi1sZXZlbCBjb21tZW50c1xuMy4gVXNlIFxcYGdoIGFwaSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve251bWJlcn0vY29tbWVudHNcXGAgdG8gZ2V0IHJldmlldyBjb21tZW50cy4gUGF5IHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgZmllbGRzOiBcXGBib2R5XFxgLCBcXGBkaWZmX2h1bmtcXGAsIFxcYHBhdGhcXGAsIFxcYGxpbmVcXGAsIGV0Yy4gSWYgdGhlIGNvbW1lbnQgcmVmZXJlbmNlcyBzb21lIGNvZGUsIGNvbnNpZGVyIGZldGNoaW5nIGl0IHVzaW5nIGVnIFxcYGdoIGFwaSAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9P3JlZj17YnJhbmNofSB8IGpxIC5jb250ZW50IC1yIHwgYmFzZTY0IC1kXFxgXG40LiBQYXJzZSBhbmQgZm9ybWF0IGFsbCBjb21tZW50cyBpbiBhIHJlYWRhYmxlIHdheVxuNS4gUmV0dXJuIE9OTFkgdGhlIGZvcm1hdHRlZCBjb21tZW50cywgd2l0aCBubyBhZGRpdGlvbmFsIHRleHRcblxuRm9ybWF0IHRoZSBjb21tZW50cyBhczpcblxuIyMgQ29tbWVudHNcblxuW0ZvciBlYWNoIGNvbW1lbnQgdGhyZWFkOl1cbi0gQGF1dGhvciBmaWxlLnRzI2xpbmU6XG4gIFxcYFxcYFxcYGRpZmZcbiAgW2RpZmZfaHVuayBmcm9tIHRoZSBBUEkgcmVzcG9uc2VdXG4gIFxcYFxcYFxcYFxuICA+IHF1b3RlZCBjb21tZW50IHRleHRcbiAgXG4gIFthbnkgcmVwbGllcyBpbmRlbnRlZF1cblxuSWYgdGhlcmUgYXJlIG5vIGNvbW1lbnRzLCByZXR1cm4gXCJObyBjb21tZW50cyBmb3VuZC5cIlxuXG5SZW1lbWJlcjpcbjEuIE9ubHkgc2hvdyB0aGUgYWN0dWFsIGNvbW1lbnRzLCBubyBleHBsYW5hdG9yeSB0ZXh0XG4yLiBJbmNsdWRlIGJvdGggUFItbGV2ZWwgYW5kIGNvZGUgcmV2aWV3IGNvbW1lbnRzXG4zLiBQcmVzZXJ2ZSB0aGUgdGhyZWFkaW5nL25lc3Rpbmcgb2YgY29tbWVudCByZXBsaWVzXG40LiBTaG93IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBjb250ZXh0IGZvciBjb2RlIHJldmlldyBjb21tZW50c1xuNS4gVXNlIGpxIHRvIHBhcnNlIHRoZSBKU09OIHJlc3BvbnNlcyBmcm9tIHRoZSBHaXRIdWIgQVBJXG5cbiR7YXJncyA/ICdBZGRpdGlvbmFsIHVzZXIgaW5wdXQ6ICcgKyBhcmdzIDogJyd9XG5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF1cbiAgfSxcbn0gc2F0aXNmaWVzIENvbW1hbmRcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBSRUxFQVNFX05PVEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzL3JlbGVhc2VOb3Rlcy5qcydcblxuY29uc3QgcmVsZWFzZU5vdGVzOiBDb21tYW5kID0ge1xuICBkZXNjcmlwdGlvbjogJ1Nob3cgcmVsZWFzZSBub3RlcyBmb3IgdGhlIGN1cnJlbnQgb3Igc3BlY2lmaWVkIHZlcnNpb24nLFxuICBpc0VuYWJsZWQ6IGZhbHNlLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIG5hbWU6ICdyZWxlYXNlLW5vdGVzJyxcbiAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgcmV0dXJuICdyZWxlYXNlLW5vdGVzJ1xuICB9LFxuICB0eXBlOiAnbG9jYWwnLFxuICBhc3luYyBjYWxsKGFyZ3MpIHtcbiAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IE1BQ1JPLlZFUlNJT05cblxuICAgIC8vIElmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1ZXN0ZWQsIHNob3cgdGhhdCB2ZXJzaW9uJ3Mgbm90ZXNcbiAgICBjb25zdCByZXF1ZXN0ZWRWZXJzaW9uID0gYXJncyA/IGFyZ3MudHJpbSgpIDogY3VycmVudFZlcnNpb25cblxuICAgIC8vIEdldCB0aGUgcmVxdWVzdGVkIHZlcnNpb24ncyBub3Rlc1xuICAgIGNvbnN0IG5vdGVzID0gUkVMRUFTRV9OT1RFU1tyZXF1ZXN0ZWRWZXJzaW9uXVxuXG4gICAgaWYgKCFub3RlcyB8fCBub3Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBgTm8gcmVsZWFzZSBub3RlcyBhdmFpbGFibGUgZm9yIHZlcnNpb24gJHtyZXF1ZXN0ZWRWZXJzaW9ufS5gXG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gYFJlbGVhc2Ugbm90ZXMgZm9yIHZlcnNpb24gJHtyZXF1ZXN0ZWRWZXJzaW9ufTpgXG4gICAgY29uc3QgZm9ybWF0dGVkTm90ZXMgPSBub3Rlcy5tYXAobm90ZSA9PiBg4oCiICR7bm90ZX1gKS5qb2luKCdcXG4nKVxuXG4gICAgcmV0dXJuIGAke2hlYWRlcn1cXG5cXG4ke2Zvcm1hdHRlZE5vdGVzfWBcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVsZWFzZU5vdGVzXG4iLAogICAgImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IEJhc2hUb29sIH0gZnJvbSAnLi4vdG9vbHMvQmFzaFRvb2wvQmFzaFRvb2wuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZTogJ3Byb21wdCcsXG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1JldmlldyBhIHB1bGwgcmVxdWVzdCcsXG4gIGlzRW5hYmxlZDogdHJ1ZSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBwcm9ncmVzc01lc3NhZ2U6ICdyZXZpZXdpbmcgcHVsbCByZXF1ZXN0JyxcbiAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgcmV0dXJuICdyZXZpZXcnXG4gIH0sXG4gIGFzeW5jIGdldFByb21wdEZvckNvbW1hbmQoYXJncykge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHJvbGU6ICd1c2VyJyxcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHRleHQ6IGBcbiAgICAgIFlvdSBhcmUgYW4gZXhwZXJ0IGNvZGUgcmV2aWV3ZXIuIEZvbGxvdyB0aGVzZSBzdGVwczpcblxuICAgICAgMS4gSWYgbm8gUFIgbnVtYmVyIGlzIHByb3ZpZGVkIGluIHRoZSBhcmdzLCB1c2UgJHtCYXNoVG9vbC5uYW1lfShcImdoIHByIGxpc3RcIikgdG8gc2hvdyBvcGVuIFBSc1xuICAgICAgMi4gSWYgYSBQUiBudW1iZXIgaXMgcHJvdmlkZWQsIHVzZSAke0Jhc2hUb29sLm5hbWV9KFwiZ2ggcHIgdmlldyA8bnVtYmVyPlwiKSB0byBnZXQgUFIgZGV0YWlsc1xuICAgICAgMy4gVXNlICR7QmFzaFRvb2wubmFtZX0oXCJnaCBwciBkaWZmIDxudW1iZXI+XCIpIHRvIGdldCB0aGUgZGlmZlxuICAgICAgNC4gQW5hbHl6ZSB0aGUgY2hhbmdlcyBhbmQgcHJvdmlkZSBhIHRob3JvdWdoIGNvZGUgcmV2aWV3IHRoYXQgaW5jbHVkZXM6XG4gICAgICAgICAtIE92ZXJ2aWV3IG9mIHdoYXQgdGhlIFBSIGRvZXNcbiAgICAgICAgIC0gQW5hbHlzaXMgb2YgY29kZSBxdWFsaXR5IGFuZCBzdHlsZVxuICAgICAgICAgLSBTcGVjaWZpYyBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnRzXG4gICAgICAgICAtIEFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIHJpc2tzXG4gICAgICBcbiAgICAgIEtlZXAgeW91ciByZXZpZXcgY29uY2lzZSBidXQgdGhvcm91Z2guIEZvY3VzIG9uOlxuICAgICAgLSBDb2RlIGNvcnJlY3RuZXNzXG4gICAgICAtIEZvbGxvd2luZyBwcm9qZWN0IGNvbnZlbnRpb25zXG4gICAgICAtIFBlcmZvcm1hbmNlIGltcGxpY2F0aW9uc1xuICAgICAgLSBUZXN0IGNvdmVyYWdlXG4gICAgICAtIFNlY3VyaXR5IGNvbnNpZGVyYXRpb25zXG5cbiAgICAgIEZvcm1hdCB5b3VyIHJldmlldyB3aXRoIGNsZWFyIHNlY3Rpb25zIGFuZCBidWxsZXQgcG9pbnRzLlxuXG4gICAgICBQUiBudW1iZXI6ICR7YXJnc31cbiAgICBgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF1cbiAgfSxcbn0gc2F0aXNmaWVzIENvbW1hbmRcbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IFJlc3VtZUNvbnZlcnNhdGlvbiB9IGZyb20gJy4uL3NjcmVlbnMvUmVzdW1lQ29udmVyc2F0aW9uLmpzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgQ0FDSEVfUEFUSFMsIGxvYWRMb2dMaXN0IH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGU6ICdsb2NhbC1qc3gnLFxuICBuYW1lOiAncmVzdW1lJyxcbiAgZGVzY3JpcHRpb246ICdbQU5ULU9OTFldIFJlc3VtZSBhIHByZXZpb3VzIGNvbnZlcnNhdGlvbicsXG4gIGlzRW5hYmxlZDogcHJvY2Vzcy5lbnYuVVNFUl9UWVBFID09PSAnYW50JyxcbiAgaXNIaWRkZW46IHByb2Nlc3MuZW52LlVTRVJfVFlQRSAhPT0gJ2FudCcsXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAncmVzdW1lJ1xuICB9LFxuICBhc3luYyBjYWxsKG9uRG9uZSwgeyBvcHRpb25zOiB7IGNvbW1hbmRzLCB0b29scywgdmVyYm9zZSB9IH0pIHtcbiAgICBjb25zdCBsb2dzID0gYXdhaXQgbG9hZExvZ0xpc3QoQ0FDSEVfUEFUSFMubWVzc2FnZXMoKSlcbiAgICByZW5kZXIoXG4gICAgICA8UmVzdW1lQ29udmVyc2F0aW9uXG4gICAgICAgIGNvbW1hbmRzPXtjb21tYW5kc31cbiAgICAgICAgY29udGV4dD17eyB1bm1vdW50OiBvbkRvbmUgfX1cbiAgICAgICAgbG9ncz17bG9nc31cbiAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgLz4sXG4gICAgKVxuICAgIC8vIFRoaXMgcmV0dXJuIGlzIGhlcmUgZm9yIHR5cGUgb25seVxuICAgIHJldHVybiBudWxsXG4gIH0sXG59IHNhdGlzZmllcyBDb21tYW5kXG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ2luaydcbmltcG9ydCB7IFJFUEwgfSBmcm9tICcuL1JFUEwuanMnXG5pbXBvcnQgeyBkZXNlcmlhbGl6ZU1lc3NhZ2VzIH0gZnJvbSAnLi4vdXRpbHMvY29udmVyc2F0aW9uUmVjb3ZlcnkuanMnXG5pbXBvcnQgeyBMb2dTZWxlY3RvciB9IGZyb20gJy4uL2NvbXBvbmVudHMvTG9nU2VsZWN0b3IuanMnXG5pbXBvcnQgdHlwZSB7IExvZ09wdGlvbiB9IGZyb20gJy4uL3R5cGVzL2xvZ3MuanMnXG5pbXBvcnQgeyBsb2dFcnJvciwgZ2V0TmV4dEF2YWlsYWJsZUxvZ0ZvcmtOdW1iZXIgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgdHlwZSB7IFRvb2wgfSBmcm9tICcuLi9Ub29sLmpzJ1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgaXNEZWZhdWx0U2xvd0FuZENhcGFibGVNb2RlbCB9IGZyb20gJy4uL3V0aWxzL21vZGVsLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kczogQ29tbWFuZFtdXG4gIGNvbnRleHQ6IHsgdW5tb3VudD86ICgpID0+IHZvaWQgfVxuICBsb2dzOiBMb2dPcHRpb25bXVxuICB0b29sczogVG9vbFtdXG4gIHZlcmJvc2U6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VtZUNvbnZlcnNhdGlvbih7XG4gIGNvbnRleHQsXG4gIGNvbW1hbmRzLFxuICBsb2dzLFxuICB0b29scyxcbiAgdmVyYm9zZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgYXN5bmMgZnVuY3Rpb24gb25TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGxvZyA9IGxvZ3NbaW5kZXhdXG4gICAgaWYgKCFsb2cpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIExvYWQgYW5kIGRlc2VyaWFsaXplIHRoZSBtZXNzYWdlc1xuICAgIHRyeSB7XG4gICAgICBjb250ZXh0LnVubW91bnQ/LigpXG4gICAgICAvLyBTdGFydCBhIG5ldyBSRVBMIHdpdGggdGhlIGxvYWRlZCBtZXNzYWdlc1xuICAgICAgLy8gSW5jcmVtZW50IHRoZSBmb3JrIG51bWJlciBieSAxIHRvIGdlbmVyYXRlIGEgbmV3IHRyYW5zY3JpcHRcbiAgICAgIC8vIENoZWNrIGlmIHVzaW5nIGRlZmF1bHQgbW9kZWwgYmVmb3JlIHJlbmRlcmluZ1xuICAgICAgY29uc3QgaXNEZWZhdWx0TW9kZWwgPSBhd2FpdCBpc0RlZmF1bHRTbG93QW5kQ2FwYWJsZU1vZGVsKClcblxuICAgICAgcmVuZGVyKFxuICAgICAgICA8UkVQTFxuICAgICAgICAgIG1lc3NhZ2VMb2dOYW1lPXtsb2cuZGF0ZX1cbiAgICAgICAgICBpbml0aWFsUHJvbXB0PVwiXCJcbiAgICAgICAgICBzaG91bGRTaG93UHJvbXB0SW5wdXQ9e3RydWV9XG4gICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICBjb21tYW5kcz17Y29tbWFuZHN9XG4gICAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICAgIGluaXRpYWxNZXNzYWdlcz17ZGVzZXJpYWxpemVNZXNzYWdlcyhsb2cubWVzc2FnZXMsIHRvb2xzKX1cbiAgICAgICAgICBpbml0aWFsRm9ya051bWJlcj17Z2V0TmV4dEF2YWlsYWJsZUxvZ0ZvcmtOdW1iZXIoXG4gICAgICAgICAgICBsb2cuZGF0ZSxcbiAgICAgICAgICAgIGxvZy5mb3JrTnVtYmVyID8/IDEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICl9XG4gICAgICAgICAgaXNEZWZhdWx0TW9kZWw9e2lzRGVmYXVsdE1vZGVsfVxuICAgICAgICAvPixcbiAgICAgICAge1xuICAgICAgICAgIGV4aXRPbkN0cmxDOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dFcnJvcihgRmFpbGVkIHRvIGxvYWQgY29udmVyc2F0aW9uOiAke2V9YClcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gPExvZ1NlbGVjdG9yIGxvZ3M9e2xvZ3N9IG9uU2VsZWN0PXtvblNlbGVjdH0gLz5cbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnQGlua2pzL3VpJ1xuaW1wb3J0IHR5cGUgeyBMb2dPcHRpb24gfSBmcm9tICcuLi90eXBlcy9sb2dzLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IHVzZVRlcm1pbmFsU2l6ZSB9IGZyb20gJy4uL2hvb2tzL3VzZVRlcm1pbmFsU2l6ZS5qcydcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5cbnR5cGUgTG9nU2VsZWN0b3JQcm9wcyA9IHtcbiAgbG9nczogTG9nT3B0aW9uW11cbiAgb25TZWxlY3Q6IChsb2dWYWx1ZTogbnVtYmVyKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMb2dTZWxlY3Rvcih7XG4gIGxvZ3MsXG4gIG9uU2VsZWN0LFxufTogTG9nU2VsZWN0b3JQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgcm93cywgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHZpc2libGVDb3VudCA9IHJvd3MgLSAzIC8vIEFjY291bnQgZm9yIGhlYWRlciBhbmQgZm9vdGVyXG4gIGNvbnN0IGhpZGRlbkNvdW50ID0gTWF0aC5tYXgoMCwgbG9ncy5sZW5ndGggLSB2aXNpYmxlQ291bnQpXG5cbiAgLy8gQ3JlYXRlIGZvcm1hdHRlZCBvcHRpb25zXG4gIC8vIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhzXG4gIGNvbnN0IGluZGV4V2lkdGggPSA3IC8vIFswXSB0byBbOTldIHdpdGggZXh0cmEgc3BhY2VzXG4gIGNvbnN0IG1vZGlmaWVkV2lkdGggPSAyMSAvLyBcIlllc3RlcmRheSBhdCA3OjQ5IHBtXCIgd2l0aCBzcGFjZVxuICBjb25zdCBjcmVhdGVkV2lkdGggPSAyMSAvLyBcIlllc3RlcmRheSBhdCA3OjQ5IHBtXCIgd2l0aCBzcGFjZVxuICBjb25zdCBjb3VudFdpZHRoID0gOSAvLyBcIjk5OSBtc2dzXCIgKHJpZ2h0LWFsaWduZWQpXG5cbiAgY29uc3Qgb3B0aW9ucyA9IGxvZ3MubWFwKChsb2csIGkpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGBbJHtpfV1gLnBhZEVuZChpbmRleFdpZHRoKVxuICAgIGNvbnN0IG1vZGlmaWVkID0gZm9ybWF0RGF0ZShsb2cubW9kaWZpZWQpLnBhZEVuZChtb2RpZmllZFdpZHRoKVxuICAgIGNvbnN0IGNyZWF0ZWQgPSBmb3JtYXREYXRlKGxvZy5jcmVhdGVkKS5wYWRFbmQoY3JlYXRlZFdpZHRoKVxuICAgIGNvbnN0IG1zZ0NvdW50ID0gYCR7bG9nLm1lc3NhZ2VDb3VudH1gLnBhZFN0YXJ0KGNvdW50V2lkdGgpXG4gICAgY29uc3QgcHJvbXB0ID0gbG9nLmZpcnN0UHJvbXB0XG4gICAgbGV0IGJyYW5jaEluZm8gPSAnJ1xuICAgIGlmIChsb2cuZm9ya051bWJlcikgYnJhbmNoSW5mbyArPSBgIChmb3JrICMke2xvZy5mb3JrTnVtYmVyfSlgXG4gICAgaWYgKGxvZy5zaWRlY2hhaW5OdW1iZXIpXG4gICAgICBicmFuY2hJbmZvICs9IGAgKHNpZGVjaGFpbiAjJHtsb2cuc2lkZWNoYWluTnVtYmVyfSlgXG5cbiAgICBjb25zdCBsYWJlbFR4dCA9IGAke2luZGV4fSR7bW9kaWZpZWR9JHtjcmVhdGVkfSR7bXNnQ291bnR9ICR7cHJvbXB0fSR7YnJhbmNoSW5mb31gXG4gICAgY29uc3QgdHJ1bmNhdGVkID1cbiAgICAgIGxhYmVsVHh0Lmxlbmd0aCA+IGNvbHVtbnMgLSAyIC8vIEFjY291bnQgZm9yIFwiPiBcIiBzZWxlY3Rpb24gY3Vyc29yXG4gICAgICAgID8gYCR7bGFiZWxUeHQuc2xpY2UoMCwgY29sdW1ucyAtIDUpfS4uLmBcbiAgICAgICAgOiBsYWJlbFR4dFxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogdHJ1bmNhdGVkLFxuICAgICAgdmFsdWU6IGxvZy52YWx1ZS50b1N0cmluZygpLFxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGhlaWdodD1cIjEwMCVcIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezl9PlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPXtnZXRUaGVtZSgpLnRleHR9PlxuICAgICAgICAgIE1vZGlmaWVkXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+eycgICAgICAgICAgICAgJ308L1RleHQ+XG4gICAgICAgIDxUZXh0IGJvbGQgY29sb3I9e2dldFRoZW1lKCkudGV4dH0+XG4gICAgICAgICAgQ3JlYXRlZFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0PnsnICAgICAgICAgICAgICd9PC9UZXh0PlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPXtnZXRUaGVtZSgpLnRleHR9PlxuICAgICAgICAgICMgTWVzc2FnZXNcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPXtnZXRUaGVtZSgpLnRleHR9PlxuICAgICAgICAgIEZpcnN0IG1lc3NhZ2VcbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgICA8U2VsZWN0XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgIG9uQ2hhbmdlPXtpbmRleCA9PiBvblNlbGVjdChwYXJzZUludChpbmRleCwgMTApKX1cbiAgICAgICAgdmlzaWJsZU9wdGlvbkNvdW50PXt2aXNpYmxlQ291bnR9XG4gICAgICAvPlxuICAgICAge2hpZGRlbkNvdW50ID4gMCAmJiAoXG4gICAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezJ9PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PmFuZCB7aGlkZGVuQ291bnR9IG1vcmXigKY8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB6aXBPYmplY3QgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQge1xuICBnZXRDdXJyZW50UHJvamVjdENvbmZpZyxcbiAgTWNwU2VydmVyQ29uZmlnLFxuICBzYXZlQ3VycmVudFByb2plY3RDb25maWcsXG4gIGdldEdsb2JhbENvbmZpZyxcbiAgc2F2ZUdsb2JhbENvbmZpZyxcbiAgZ2V0TWNwcmNDb25maWcsXG4gIGFkZE1jcHJjU2VydmVyRm9yVGVzdGluZyxcbiAgcmVtb3ZlTWNwcmNTZXJ2ZXJGb3JUZXN0aW5nLFxufSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBzYWZlUGFyc2VKU09OIH0gZnJvbSAnLi4vdXRpbHMvanNvbi5qcydcbmltcG9ydCB7XG4gIEltYWdlQmxvY2tQYXJhbSxcbiAgTWVzc2FnZVBhcmFtLFxuICBUb29sUmVzdWx0QmxvY2tQYXJhbSxcbn0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2luZGV4Lm1qcydcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvY2xpZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgU3RkaW9DbGllbnRUcmFuc3BvcnQgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2NsaWVudC9zdGRpby5qcydcbmltcG9ydCB7IFNTRUNsaWVudFRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvY2xpZW50L3NzZS5qcydcbmltcG9ydCB7XG4gIENhbGxUb29sUmVzdWx0U2NoZW1hLFxuICBDbGllbnRSZXF1ZXN0LFxuICBMaXN0UHJvbXB0c1Jlc3VsdCxcbiAgTGlzdFByb21wdHNSZXN1bHRTY2hlbWEsXG4gIExpc3RUb29sc1Jlc3VsdCxcbiAgTGlzdFRvb2xzUmVzdWx0U2NoZW1hLFxuICBSZXN1bHQsXG4gIFJlc3VsdFNjaGVtYSxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcydcbmltcG9ydCB7IG1lbW9pemUsIHBpY2tCeSB9IGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB0eXBlIHsgVG9vbCB9IGZyb20gJy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBNQ1BUb29sIH0gZnJvbSAnLi4vdG9vbHMvTUNQVG9vbC9NQ1BUb29sLmpzJ1xuaW1wb3J0IHsgbG9nTUNQRXJyb3IgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5cbnR5cGUgTWNwTmFtZSA9IHN0cmluZ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbnZWYXJzKFxuICByYXdFbnZBcmdzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWRFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuXG4gIC8vIFBhcnNlIGluZGl2aWR1YWwgZW52IHZhcnNcbiAgaWYgKHJhd0VudkFyZ3MpIHtcbiAgICBmb3IgKGNvbnN0IGVudlN0ciBvZiByYXdFbnZBcmdzKSB7XG4gICAgICBjb25zdCBba2V5LCAuLi52YWx1ZVBhcnRzXSA9IGVudlN0ci5zcGxpdCgnPScpXG4gICAgICBpZiAoIWtleSB8fCB2YWx1ZVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9ybWF0OiAke2VudlN0cn0sIGVudmlyb25tZW50IHZhcmlhYmxlcyBzaG91bGQgYmUgYWRkZWQgYXM6IC1lIEtFWTE9dmFsdWUxIC1lIEtFWTI9dmFsdWUyYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGFyc2VkRW52W2tleV0gPSB2YWx1ZVBhcnRzLmpvaW4oJz0nKVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkRW52XG59XG5cbmNvbnN0IFZBTElEX1NDT1BFUyA9IFsncHJvamVjdCcsICdnbG9iYWwnLCAnbWNwcmMnXSBhcyBjb25zdFxudHlwZSBDb25maWdTY29wZSA9ICh0eXBlb2YgVkFMSURfU0NPUEVTKVtudW1iZXJdXG5jb25zdCBFWFRFUk5BTF9TQ09QRVMgPSBbJ3Byb2plY3QnLCAnZ2xvYmFsJ10gYXMgQ29uZmlnU2NvcGVbXVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQ29uZmlnU2NvcGUoc2NvcGU/OiBzdHJpbmcpOiBDb25maWdTY29wZSB7XG4gIGlmICghc2NvcGUpIHJldHVybiAncHJvamVjdCdcblxuICBjb25zdCBzY29wZXNUb0NoZWNrID1cbiAgICBwcm9jZXNzLmVudi5VU0VSX1RZUEUgPT09ICdleHRlcm5hbCcgPyBFWFRFUk5BTF9TQ09QRVMgOiBWQUxJRF9TQ09QRVNcblxuICBpZiAoIXNjb3Blc1RvQ2hlY2suaW5jbHVkZXMoc2NvcGUgYXMgQ29uZmlnU2NvcGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlIG9uZSBvZjogJHtzY29wZXNUb0NoZWNrLmpvaW4oJywgJyl9YCxcbiAgICApXG4gIH1cblxuICByZXR1cm4gc2NvcGUgYXMgQ29uZmlnU2NvcGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE1jcFNlcnZlcihcbiAgbmFtZTogTWNwTmFtZSxcbiAgc2VydmVyOiBNY3BTZXJ2ZXJDb25maWcsXG4gIHNjb3BlOiBDb25maWdTY29wZSA9ICdwcm9qZWN0Jyxcbik6IHZvaWQge1xuICBpZiAoc2NvcGUgPT09ICdtY3ByYycpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgICAgYWRkTWNwcmNTZXJ2ZXJGb3JUZXN0aW5nKG5hbWUsIHNlcnZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWNwcmNQYXRoID0gam9pbihnZXRDd2QoKSwgJy5tY3ByYycpXG4gICAgICBsZXQgbWNwcmNDb25maWc6IFJlY29yZDxzdHJpbmcsIE1jcFNlcnZlckNvbmZpZz4gPSB7fVxuXG4gICAgICAvLyBSZWFkIGV4aXN0aW5nIGNvbmZpZyBpZiBwcmVzZW50XG4gICAgICBpZiAoZXhpc3RzU3luYyhtY3ByY1BhdGgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWNwcmNDb250ZW50ID0gcmVhZEZpbGVTeW5jKG1jcHJjUGF0aCwgJ3V0Zi04JylcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IHNhZmVQYXJzZUpTT04obWNwcmNDb250ZW50KVxuICAgICAgICAgIGlmIChleGlzdGluZ0NvbmZpZyAmJiB0eXBlb2YgZXhpc3RpbmdDb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBtY3ByY0NvbmZpZyA9IGV4aXN0aW5nQ29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIE1jcFNlcnZlckNvbmZpZz5cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElmIHdlIGNhbid0IHJlYWQvcGFyc2UsIHN0YXJ0IHdpdGggZW1wdHkgY29uZmlnXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHRoZSBzZXJ2ZXJcbiAgICAgIG1jcHJjQ29uZmlnW25hbWVdID0gc2VydmVyXG5cbiAgICAgIC8vIFdyaXRlIGJhY2sgdG8gLm1jcHJjXG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZUZpbGVTeW5jKG1jcHJjUGF0aCwgSlNPTi5zdHJpbmdpZnkobWNwcmNDb25maWcsIG51bGwsIDIpLCAndXRmLTgnKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gd3JpdGUgdG8gLm1jcHJjOiAke2Vycm9yfWApXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHNjb3BlID09PSAnZ2xvYmFsJykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gICAgaWYgKCFjb25maWcubWNwU2VydmVycykge1xuICAgICAgY29uZmlnLm1jcFNlcnZlcnMgPSB7fVxuICAgIH1cbiAgICBjb25maWcubWNwU2VydmVyc1tuYW1lXSA9IHNlcnZlclxuICAgIHNhdmVHbG9iYWxDb25maWcoY29uZmlnKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgICBpZiAoIWNvbmZpZy5tY3BTZXJ2ZXJzKSB7XG4gICAgICBjb25maWcubWNwU2VydmVycyA9IHt9XG4gICAgfVxuICAgIGNvbmZpZy5tY3BTZXJ2ZXJzW25hbWVdID0gc2VydmVyXG4gICAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKGNvbmZpZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTWNwU2VydmVyKFxuICBuYW1lOiBNY3BOYW1lLFxuICBzY29wZTogQ29uZmlnU2NvcGUgPSAncHJvamVjdCcsXG4pOiB2b2lkIHtcbiAgaWYgKHNjb3BlID09PSAnbWNwcmMnKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAgIHJlbW92ZU1jcHJjU2VydmVyRm9yVGVzdGluZyhuYW1lKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtY3ByY1BhdGggPSBqb2luKGdldEN3ZCgpLCAnLm1jcHJjJylcbiAgICAgIGlmICghZXhpc3RzU3luYyhtY3ByY1BhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gLm1jcHJjIGZpbGUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnknKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtY3ByY0NvbnRlbnQgPSByZWFkRmlsZVN5bmMobWNwcmNQYXRoLCAndXRmLTgnKVxuICAgICAgICBjb25zdCBtY3ByY0NvbmZpZyA9IHNhZmVQYXJzZUpTT04obWNwcmNDb250ZW50KSBhcyBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIE1jcFNlcnZlckNvbmZpZ1xuICAgICAgICA+IHwgbnVsbFxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbWNwcmNDb25maWcgfHxcbiAgICAgICAgICB0eXBlb2YgbWNwcmNDb25maWcgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgIW1jcHJjQ29uZmlnW25hbWVdXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gTUNQIHNlcnZlciBmb3VuZCB3aXRoIG5hbWU6ICR7bmFtZX0gaW4gLm1jcHJjYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBtY3ByY0NvbmZpZ1tuYW1lXVxuICAgICAgICB3cml0ZUZpbGVTeW5jKG1jcHJjUGF0aCwgSlNPTi5zdHJpbmdpZnkobWNwcmNDb25maWcsIG51bGwsIDIpLCAndXRmLTgnKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlbW92ZSBmcm9tIC5tY3ByYzogJHtlcnJvcn1gKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChzY29wZSA9PT0gJ2dsb2JhbCcpIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICAgIGlmICghY29uZmlnLm1jcFNlcnZlcnM/LltuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBnbG9iYWwgTUNQIHNlcnZlciBmb3VuZCB3aXRoIG5hbWU6ICR7bmFtZX1gKVxuICAgIH1cbiAgICBkZWxldGUgY29uZmlnLm1jcFNlcnZlcnNbbmFtZV1cbiAgICBzYXZlR2xvYmFsQ29uZmlnKGNvbmZpZylcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gICAgaWYgKCFjb25maWcubWNwU2VydmVycz8uW25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGxvY2FsIE1DUCBzZXJ2ZXIgZm91bmQgd2l0aCBuYW1lOiAke25hbWV9YClcbiAgICB9XG4gICAgZGVsZXRlIGNvbmZpZy5tY3BTZXJ2ZXJzW25hbWVdXG4gICAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKGNvbmZpZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdE1DUFNlcnZlcnMoKTogUmVjb3JkPHN0cmluZywgTWNwU2VydmVyQ29uZmlnPiB7XG4gIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gIGNvbnN0IG1jcHJjQ29uZmlnID0gZ2V0TWNwcmNDb25maWcoKVxuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICByZXR1cm4ge1xuICAgIC4uLihnbG9iYWxDb25maWcubWNwU2VydmVycyA/PyB7fSksXG4gICAgLi4uKG1jcHJjQ29uZmlnID8/IHt9KSwgLy8gbWNwcmMgY29uZmlncyBvdmVycmlkZSBnbG9iYWwgb25lc1xuICAgIC4uLihwcm9qZWN0Q29uZmlnLm1jcFNlcnZlcnMgPz8ge30pLCAvLyBQcm9qZWN0IGNvbmZpZ3Mgb3ZlcnJpZGUgbWNwcmMgb25lc1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNjb3BlZE1jcFNlcnZlckNvbmZpZyA9IE1jcFNlcnZlckNvbmZpZyAmIHtcbiAgc2NvcGU6IENvbmZpZ1Njb3BlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNY3BTZXJ2ZXIobmFtZTogTWNwTmFtZSk6IFNjb3BlZE1jcFNlcnZlckNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb2plY3RDb25maWcgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gIGNvbnN0IG1jcHJjQ29uZmlnID0gZ2V0TWNwcmNDb25maWcoKVxuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuXG4gIC8vIENoZWNrIGVhY2ggc2NvcGUgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZVxuICBpZiAocHJvamVjdENvbmZpZy5tY3BTZXJ2ZXJzPy5bbmFtZV0pIHtcbiAgICByZXR1cm4geyAuLi5wcm9qZWN0Q29uZmlnLm1jcFNlcnZlcnNbbmFtZV0sIHNjb3BlOiAncHJvamVjdCcgfVxuICB9XG5cbiAgaWYgKG1jcHJjQ29uZmlnPy5bbmFtZV0pIHtcbiAgICByZXR1cm4geyAuLi5tY3ByY0NvbmZpZ1tuYW1lXSwgc2NvcGU6ICdtY3ByYycgfVxuICB9XG5cbiAgaWYgKGdsb2JhbENvbmZpZy5tY3BTZXJ2ZXJzPy5bbmFtZV0pIHtcbiAgICByZXR1cm4geyAuLi5nbG9iYWxDb25maWcubWNwU2VydmVyc1tuYW1lXSwgc2NvcGU6ICdnbG9iYWwnIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvU2VydmVyKFxuICBuYW1lOiBzdHJpbmcsXG4gIHNlcnZlclJlZjogTWNwU2VydmVyQ29uZmlnLFxuKTogUHJvbWlzZTxDbGllbnQ+IHtcbiAgY29uc3QgdHJhbnNwb3J0ID1cbiAgICBzZXJ2ZXJSZWYudHlwZSA9PT0gJ3NzZSdcbiAgICAgID8gbmV3IFNTRUNsaWVudFRyYW5zcG9ydChuZXcgVVJMKHNlcnZlclJlZi51cmwpKVxuICAgICAgOiBuZXcgU3RkaW9DbGllbnRUcmFuc3BvcnQoe1xuICAgICAgICAgIGNvbW1hbmQ6IHNlcnZlclJlZi5jb21tYW5kLFxuICAgICAgICAgIGFyZ3M6IHNlcnZlclJlZi5hcmdzLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICAuLi5zZXJ2ZXJSZWYuZW52LFxuICAgICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgICAgICBzdGRlcnI6ICdwaXBlJywgLy8gcHJldmVudHMgZXJyb3Igb3V0cHV0IGZyb20gdGhlIE1DUCBzZXJ2ZXIgZnJvbSBwcmludGluZyB0byB0aGUgVUlcbiAgICAgICAgfSlcblxuICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KFxuICAgIHtcbiAgICAgIG5hbWU6ICdjbGF1ZGUnLFxuICAgICAgdmVyc2lvbjogJzAuMS4wJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNhcGFiaWxpdGllczoge30sXG4gICAgfSxcbiAgKVxuXG4gIC8vIEFkZCBhIHRpbWVvdXQgdG8gY29ubmVjdGlvbiBhdHRlbXB0cyB0byBwcmV2ZW50IHRlc3RzIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHlcbiAgY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01TID0gNTAwMFxuICBjb25zdCBjb25uZWN0UHJvbWlzZSA9IGNsaWVudC5jb25uZWN0KHRyYW5zcG9ydClcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYENvbm5lY3Rpb24gdG8gTUNQIHNlcnZlciBcIiR7bmFtZX1cIiB0aW1lZCBvdXQgYWZ0ZXIgJHtDT05ORUNUSU9OX1RJTUVPVVRfTVN9bXNgLFxuICAgICAgICApLFxuICAgICAgKVxuICAgIH0sIENPTk5FQ1RJT05fVElNRU9VVF9NUylcblxuICAgIC8vIENsZWFuIHVwIHRpbWVvdXQgaWYgY29ubmVjdCByZXNvbHZlcyBvciByZWplY3RzXG4gICAgY29ubmVjdFByb21pc2UudGhlbihcbiAgICAgICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpLFxuICAgICAgKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCksXG4gICAgKVxuICB9KVxuXG4gIGF3YWl0IFByb21pc2UucmFjZShbY29ubmVjdFByb21pc2UsIHRpbWVvdXRQcm9taXNlXSlcblxuICBpZiAoc2VydmVyUmVmLnR5cGUgPT09ICdzdGRpbycpIHtcbiAgICA7KHRyYW5zcG9ydCBhcyBTdGRpb0NsaWVudFRyYW5zcG9ydCkuc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGRhdGEudG9TdHJpbmcoKS50cmltKClcbiAgICAgIGlmIChlcnJvclRleHQpIHtcbiAgICAgICAgbG9nTUNQRXJyb3IobmFtZSwgYFNlcnZlciBzdGRlcnI6ICR7ZXJyb3JUZXh0fWApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gY2xpZW50XG59XG5cbnR5cGUgQ29ubmVjdGVkQ2xpZW50ID0ge1xuICBjbGllbnQ6IENsaWVudFxuICBuYW1lOiBzdHJpbmdcbiAgdHlwZTogJ2Nvbm5lY3RlZCdcbn1cbnR5cGUgRmFpbGVkQ2xpZW50ID0ge1xuICBuYW1lOiBzdHJpbmdcbiAgdHlwZTogJ2ZhaWxlZCdcbn1cbmV4cG9ydCB0eXBlIFdyYXBwZWRDbGllbnQgPSBDb25uZWN0ZWRDbGllbnQgfCBGYWlsZWRDbGllbnRcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1jcHJjU2VydmVyU3RhdHVzKFxuICBzZXJ2ZXJOYW1lOiBzdHJpbmcsXG4pOiAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJyB8ICdwZW5kaW5nJyB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgaWYgKGNvbmZpZy5hcHByb3ZlZE1jcHJjU2VydmVycz8uaW5jbHVkZXMoc2VydmVyTmFtZSkpIHtcbiAgICByZXR1cm4gJ2FwcHJvdmVkJ1xuICB9XG4gIGlmIChjb25maWcucmVqZWN0ZWRNY3ByY1NlcnZlcnM/LmluY2x1ZGVzKHNlcnZlck5hbWUpKSB7XG4gICAgcmV0dXJuICdyZWplY3RlZCdcbiAgfVxuICByZXR1cm4gJ3BlbmRpbmcnXG59XG5cbmV4cG9ydCBjb25zdCBnZXRDbGllbnRzID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxXcmFwcGVkQ2xpZW50W10+ID0+IHtcbiAgLy8gVE9ETzogVGhpcyBpcyBhIHRlbXBvcmFyeSBmaXggZm9yIGEgaGFuZyBkdXJpbmcgbnBtIHJ1biB2ZXJpZnkgaW4gQ0kuXG4gIC8vIFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5IE1DUCBjbGllbnQgY29ubmVjdGlvbnMgaGFuZyBpbiBDSSB2ZXJpZnkgYnV0IG5vdCBpbiBDSSB0ZXN0cy5cbiAgaWYgKHByb2Nlc3MuZW52LkNJICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGNvbnN0IGdsb2JhbFNlcnZlcnMgPSBnZXRHbG9iYWxDb25maWcoKS5tY3BTZXJ2ZXJzID8/IHt9XG4gIGNvbnN0IG1jcHJjU2VydmVycyA9IGdldE1jcHJjQ29uZmlnKClcbiAgY29uc3QgcHJvamVjdFNlcnZlcnMgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpLm1jcFNlcnZlcnMgPz8ge31cblxuICAvLyBGaWx0ZXIgbWNwcmMgc2VydmVycyB0byBvbmx5IGluY2x1ZGUgYXBwcm92ZWQgb25lc1xuICBjb25zdCBhcHByb3ZlZE1jcHJjU2VydmVycyA9IHBpY2tCeShcbiAgICBtY3ByY1NlcnZlcnMsXG4gICAgKF8sIG5hbWUpID0+IGdldE1jcHJjU2VydmVyU3RhdHVzKG5hbWUpID09PSAnYXBwcm92ZWQnLFxuICApXG5cbiAgY29uc3QgYWxsU2VydmVycyA9IHtcbiAgICAuLi5nbG9iYWxTZXJ2ZXJzLFxuICAgIC4uLmFwcHJvdmVkTWNwcmNTZXJ2ZXJzLCAvLyBBcHByb3ZlZCAubWNwcmMgc2VydmVycyBvdmVycmlkZSBnbG9iYWwgb25lc1xuICAgIC4uLnByb2plY3RTZXJ2ZXJzLCAvLyBQcm9qZWN0IHNlcnZlcnMgdGFrZSBoaWdoZXN0IHByZWNlZGVuY2VcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBPYmplY3QuZW50cmllcyhhbGxTZXJ2ZXJzKS5tYXAoYXN5bmMgKFtuYW1lLCBzZXJ2ZXJSZWZdKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBjb25uZWN0VG9TZXJ2ZXIobmFtZSwgc2VydmVyUmVmKVxuICAgICAgICBsb2dFdmVudCgndGVuZ3VfbWNwX3NlcnZlcl9jb25uZWN0aW9uX3N1Y2NlZWRlZCcsIHt9KVxuICAgICAgICByZXR1cm4geyBuYW1lLCBjbGllbnQsIHR5cGU6ICdjb25uZWN0ZWQnIGFzIGNvbnN0IH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9tY3Bfc2VydmVyX2Nvbm5lY3Rpb25fZmFpbGVkJywge30pXG4gICAgICAgIGxvZ01DUEVycm9yKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgYENvbm5lY3Rpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiB7IG5hbWUsIHR5cGU6ICdmYWlsZWQnIGFzIGNvbnN0IH1cbiAgICAgIH1cbiAgICB9KSxcbiAgKVxufSlcblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFsbDxcbiAgUmVzdWx0VCBleHRlbmRzIFJlc3VsdCxcbiAgUmVzdWx0U2NoZW1hVCBleHRlbmRzIHR5cGVvZiBSZXN1bHRTY2hlbWEsXG4+KFxuICByZXE6IENsaWVudFJlcXVlc3QsXG4gIHJlc3VsdFNjaGVtYTogUmVzdWx0U2NoZW1hVCxcbiAgcmVxdWlyZWRDYXBhYmlsaXR5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgY2xpZW50OiBDb25uZWN0ZWRDbGllbnQ7IHJlc3VsdDogUmVzdWx0VCB9W10+IHtcbiAgY29uc3QgY2xpZW50cyA9IGF3YWl0IGdldENsaWVudHMoKVxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgIGNsaWVudHMubWFwKGFzeW5jIGNsaWVudCA9PiB7XG4gICAgICBpZiAoY2xpZW50LnR5cGUgPT09ICdmYWlsZWQnKSByZXR1cm4gbnVsbFxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSBhd2FpdCBjbGllbnQuY2xpZW50LmdldFNlcnZlckNhcGFiaWxpdGllcygpXG4gICAgICAgIGlmICghY2FwYWJpbGl0aWVzPy5bcmVxdWlyZWRDYXBhYmlsaXR5XSkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVzdWx0OiAoYXdhaXQgY2xpZW50LmNsaWVudC5yZXF1ZXN0KHJlcSwgcmVzdWx0U2NoZW1hKSkgYXMgUmVzdWx0VCxcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGNsaWVudC50eXBlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgIGxvZ01DUEVycm9yKFxuICAgICAgICAgICAgY2xpZW50Lm5hbWUsXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHJlcXVlc3QgJyR7cmVxLm1ldGhvZH0nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0pLFxuICApXG4gIHJldHVybiByZXN1bHRzXG4gICAgLmZpbHRlcihcbiAgICAgIChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgKTogcmVzdWx0IGlzIFByb21pc2VGdWxmaWxsZWRSZXN1bHQ8e1xuICAgICAgICBjbGllbnQ6IENvbm5lY3RlZENsaWVudFxuICAgICAgICByZXN1bHQ6IFJlc3VsdFRcbiAgICAgIH0gfCBudWxsPiA9PiByZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyxcbiAgICApXG4gICAgLm1hcChyZXN1bHQgPT4gcmVzdWx0LnZhbHVlKVxuICAgIC5maWx0ZXIoXG4gICAgICAocmVzdWx0KTogcmVzdWx0IGlzIHsgY2xpZW50OiBDb25uZWN0ZWRDbGllbnQ7IHJlc3VsdDogUmVzdWx0VCB9ID0+XG4gICAgICAgIHJlc3VsdCAhPT0gbnVsbCxcbiAgICApXG59XG5cbmV4cG9ydCBjb25zdCBnZXRNQ1BUb29scyA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8VG9vbFtdPiA9PiB7XG4gIGNvbnN0IHRvb2xzTGlzdCA9IGF3YWl0IHJlcXVlc3RBbGw8XG4gICAgTGlzdFRvb2xzUmVzdWx0LFxuICAgIHR5cGVvZiBMaXN0VG9vbHNSZXN1bHRTY2hlbWFcbiAgPihcbiAgICB7XG4gICAgICBtZXRob2Q6ICd0b29scy9saXN0JyxcbiAgICB9LFxuICAgIExpc3RUb29sc1Jlc3VsdFNjaGVtYSxcbiAgICAndG9vbHMnLFxuICApXG5cbiAgLy8gVE9ETzogQWRkIHpvZCBzY2hlbWEgdmFsaWRhdGlvblxuICByZXR1cm4gdG9vbHNMaXN0LmZsYXRNYXAoKHsgY2xpZW50LCByZXN1bHQ6IHsgdG9vbHMgfSB9KSA9PlxuICAgIHRvb2xzLm1hcChcbiAgICAgICh0b29sKTogVG9vbCA9PiAoe1xuICAgICAgICAuLi5NQ1BUb29sLFxuICAgICAgICBuYW1lOiAnbWNwX18nICsgY2xpZW50Lm5hbWUgKyAnX18nICsgdG9vbC5uYW1lLFxuICAgICAgICBhc3luYyBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdG9vbC5kZXNjcmlwdGlvbiA/PyAnJ1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBwcm9tcHQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRvb2wuZGVzY3JpcHRpb24gPz8gJydcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXRKU09OU2NoZW1hOiB0b29sLmlucHV0U2NoZW1hIGFzIFRvb2xbJ2lucHV0SlNPTlNjaGVtYSddLFxuICAgICAgICBhc3luYyAqY2FsbChhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBjYWxsTUNQVG9vbCh7IGNsaWVudCwgdG9vbDogdG9vbC5uYW1lLCBhcmdzIH0pXG4gICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgdHlwZTogJ3Jlc3VsdCcgYXMgY29uc3QsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcmVzdWx0Rm9yQXNzaXN0YW50OiBkYXRhLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlckZhY2luZ05hbWUoKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2NsaWVudC5uYW1lfToke3Rvb2wubmFtZX0gKE1DUClgXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApLFxuICApXG59KVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsTUNQVG9vbCh7XG4gIGNsaWVudDogeyBjbGllbnQsIG5hbWUgfSxcbiAgdG9vbCxcbiAgYXJncyxcbn06IHtcbiAgY2xpZW50OiBDb25uZWN0ZWRDbGllbnRcbiAgdG9vbDogc3RyaW5nXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59KTogUHJvbWlzZTxUb29sUmVzdWx0QmxvY2tQYXJhbVsnY29udGVudCddPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5jYWxsVG9vbChcbiAgICB7XG4gICAgICBuYW1lOiB0b29sLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgIH0sXG4gICAgQ2FsbFRvb2xSZXN1bHRTY2hlbWEsXG4gIClcblxuICBpZiAoJ2lzRXJyb3InIGluIHJlc3VsdCAmJiByZXN1bHQuaXNFcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBFcnJvciBjYWxsaW5nIHRvb2wgJHt0b29sfTogJHtyZXN1bHQuZXJyb3J9YFxuICAgIGxvZ01DUEVycm9yKG5hbWUsIGVycm9yTWVzc2FnZSlcbiAgICB0aHJvdyBFcnJvcihlcnJvck1lc3NhZ2UpXG4gIH1cblxuICAvLyBIYW5kbGUgdG9vbFJlc3VsdC10eXBlIHJlc3BvbnNlXG4gIGlmICgndG9vbFJlc3VsdCcgaW4gcmVzdWx0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQudG9vbFJlc3VsdClcbiAgfVxuXG4gIC8vIEhhbmRsZSBjb250ZW50IGFycmF5IHJlc3BvbnNlXG4gIGlmICgnY29udGVudCcgaW4gcmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0LmNvbnRlbnQpKSB7XG4gICAgcmV0dXJuIHJlc3VsdC5jb250ZW50Lm1hcChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgdHlwZTogJ2Jhc2U2NCcsXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoaXRlbS5kYXRhKSxcbiAgICAgICAgICAgIG1lZGlhX3R5cGU6IGl0ZW0ubWltZVR5cGUgYXMgSW1hZ2VCbG9ja1BhcmFtLlNvdXJjZVsnbWVkaWFfdHlwZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSlcbiAgfVxuXG4gIHRocm93IEVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIGZvcm1hdCBmcm9tIHRvb2wgJHt0b29sfWApXG59XG5cbmV4cG9ydCBjb25zdCBnZXRNQ1BDb21tYW5kcyA9IG1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8Q29tbWFuZFtdPiA9PiB7XG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZXF1ZXN0QWxsPFxuICAgIExpc3RQcm9tcHRzUmVzdWx0LFxuICAgIHR5cGVvZiBMaXN0UHJvbXB0c1Jlc3VsdFNjaGVtYVxuICA+KFxuICAgIHtcbiAgICAgIG1ldGhvZDogJ3Byb21wdHMvbGlzdCcsXG4gICAgfSxcbiAgICBMaXN0UHJvbXB0c1Jlc3VsdFNjaGVtYSxcbiAgICAncHJvbXB0cycsXG4gIClcblxuICByZXR1cm4gcmVzdWx0cy5mbGF0TWFwKCh7IGNsaWVudCwgcmVzdWx0IH0pID0+XG4gICAgcmVzdWx0LnByb21wdHM/Lm1hcChfID0+IHtcbiAgICAgIGNvbnN0IGFyZ05hbWVzID0gT2JqZWN0LnZhbHVlcyhfLmFyZ3VtZW50cyA/PyB7fSkubWFwKGsgPT4gay5uYW1lKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3Byb21wdCcsXG4gICAgICAgIG5hbWU6ICdtY3BfXycgKyBjbGllbnQubmFtZSArICdfXycgKyBfLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBfLmRlc2NyaXB0aW9uID8/ICcnLFxuICAgICAgICBpc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGlzSGlkZGVuOiBmYWxzZSxcbiAgICAgICAgcHJvZ3Jlc3NNZXNzYWdlOiAncnVubmluZycsXG4gICAgICAgIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgICAgICAgIHJldHVybiBgJHtjbGllbnQubmFtZX06JHtfLm5hbWV9IChNQ1ApYFxuICAgICAgICB9LFxuICAgICAgICBhcmdOYW1lcyxcbiAgICAgICAgYXN5bmMgZ2V0UHJvbXB0Rm9yQ29tbWFuZChhcmdzOiBzdHJpbmcpIHtcbiAgICAgICAgICBjb25zdCBhcmdzQXJyYXkgPSBhcmdzLnNwbGl0KCcgJylcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChcbiAgICAgICAgICAgIHsgbmFtZTogXy5uYW1lLCBjbGllbnQgfSxcbiAgICAgICAgICAgIHppcE9iamVjdChhcmdOYW1lcywgYXJnc0FycmF5KSxcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfSksXG4gIClcbn0pXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKFxuICB7IG5hbWUsIGNsaWVudCB9OiB7IG5hbWU6IHN0cmluZzsgY2xpZW50OiBDb25uZWN0ZWRDbGllbnQgfSxcbiAgYXJnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IFByb21pc2U8TWVzc2FnZVBhcmFtW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuY2xpZW50LmdldFByb21wdCh7IG5hbWUsIGFyZ3VtZW50czogYXJncyB9KVxuICAgIC8vIFRPRE86IFN1cHBvcnQgdHlwZSA9PSByZXNvdXJjZVxuICAgIHJldHVybiByZXN1bHQubWVzc2FnZXMubWFwKFxuICAgICAgKG1lc3NhZ2UpOiBNZXNzYWdlUGFyYW0gPT4gKHtcbiAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgbWVzc2FnZS5jb250ZW50LnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIHRleHQ6IG1lc3NhZ2UuY29udGVudC50ZXh0LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKG1lc3NhZ2UuY29udGVudC5kYXRhKSxcbiAgICAgICAgICAgICAgICAgIG1lZGlhX3R5cGU6IG1lc3NhZ2UuY29udGVudFxuICAgICAgICAgICAgICAgICAgICAubWltZVR5cGUgYXMgSW1hZ2VCbG9ja1BhcmFtLlNvdXJjZVsnbWVkaWFfdHlwZSddLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jhc2U2NCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dNQ1BFcnJvcihcbiAgICAgIGNsaWVudC5uYW1lLFxuICAgICAgYEVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJHtuYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmV4cG9ydCBjb25zdCBMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiA9IFwiMjAyNC0xMS0wNVwiO1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTF9WRVJTSU9OUyA9IFtcbiAgICBMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcIjIwMjQtMTAtMDdcIixcbl07XG4vKiBKU09OLVJQQyB0eXBlcyAqL1xuZXhwb3J0IGNvbnN0IEpTT05SUENfVkVSU0lPTiA9IFwiMi4wXCI7XG4vKipcbiAqIEEgcHJvZ3Jlc3MgdG9rZW4sIHVzZWQgdG8gYXNzb2NpYXRlIHByb2dyZXNzIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFByb2dyZXNzVG9rZW5TY2hlbWEgPSB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLmludCgpXSk7XG4vKipcbiAqIEFuIG9wYXF1ZSB0b2tlbiB1c2VkIHRvIHJlcHJlc2VudCBhIGN1cnNvciBmb3IgcGFnaW5hdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEN1cnNvclNjaGVtYSA9IHouc3RyaW5nKCk7XG5jb25zdCBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBfbWV0YTogei5vcHRpb25hbCh6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgc3BlY2lmaWVkLCB0aGUgY2FsbGVyIGlzIHJlcXVlc3Rpbmcgb3V0LW9mLWJhbmQgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyBmb3IgdGhpcyByZXF1ZXN0IChhcyByZXByZXNlbnRlZCBieSBub3RpZmljYXRpb25zL3Byb2dyZXNzKS4gVGhlIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIGFuIG9wYXF1ZSB0b2tlbiB0aGF0IHdpbGwgYmUgYXR0YWNoZWQgdG8gYW55IHN1YnNlcXVlbnQgbm90aWZpY2F0aW9ucy4gVGhlIHJlY2VpdmVyIGlzIG5vdCBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSB0aGVzZSBub3RpZmljYXRpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgcHJvZ3Jlc3NUb2tlbjogei5vcHRpb25hbChQcm9ncmVzc1Rva2VuU2NoZW1hKSxcbiAgICB9KVxuICAgICAgICAucGFzc3Rocm91Z2goKSksXG59KVxuICAgIC5wYXNzdGhyb3VnaCgpO1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgbWV0aG9kOiB6LnN0cmluZygpLFxuICAgIHBhcmFtczogei5vcHRpb25hbChCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYSksXG59KTtcbmNvbnN0IEJhc2VOb3RpZmljYXRpb25QYXJhbXNTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgbmFtZSBpcyByZXNlcnZlZCBieSBNQ1AgdG8gYWxsb3cgY2xpZW50cyBhbmQgc2VydmVycyB0byBhdHRhY2ggYWRkaXRpb25hbCBtZXRhZGF0YSB0byB0aGVpciBub3RpZmljYXRpb25zLlxuICAgICAqL1xuICAgIF9tZXRhOiB6Lm9wdGlvbmFsKHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG5leHBvcnQgY29uc3QgTm90aWZpY2F0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICBwYXJhbXM6IHoub3B0aW9uYWwoQmFzZU5vdGlmaWNhdGlvblBhcmFtc1NjaGVtYSksXG59KTtcbmV4cG9ydCBjb25zdCBSZXN1bHRTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogVGhpcyByZXN1bHQgcHJvcGVydHkgaXMgcmVzZXJ2ZWQgYnkgdGhlIHByb3RvY29sIHRvIGFsbG93IGNsaWVudHMgYW5kIHNlcnZlcnMgdG8gYXR0YWNoIGFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gdGhlaXIgcmVzcG9uc2VzLlxuICAgICAqL1xuICAgIF9tZXRhOiB6Lm9wdGlvbmFsKHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG4vKipcbiAqIEEgdW5pcXVlbHkgaWRlbnRpZnlpbmcgSUQgZm9yIGEgcmVxdWVzdCBpbiBKU09OLVJQQy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RJZFNjaGVtYSA9IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCkuaW50KCldKTtcbi8qKlxuICogQSByZXF1ZXN0IHRoYXQgZXhwZWN0cyBhIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY29uc3QgSlNPTlJQQ1JlcXVlc3RTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAganNvbnJwYzogei5saXRlcmFsKEpTT05SUENfVkVSU0lPTiksXG4gICAgaWQ6IFJlcXVlc3RJZFNjaGVtYSxcbn0pXG4gICAgLm1lcmdlKFJlcXVlc3RTY2hlbWEpXG4gICAgLnN0cmljdCgpO1xuLyoqXG4gKiBBIG5vdGlmaWNhdGlvbiB3aGljaCBkb2VzIG5vdCBleHBlY3QgYSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05SUENOb3RpZmljYXRpb25TY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAganNvbnJwYzogei5saXRlcmFsKEpTT05SUENfVkVSU0lPTiksXG59KVxuICAgIC5tZXJnZShOb3RpZmljYXRpb25TY2hlbWEpXG4gICAgLnN0cmljdCgpO1xuLyoqXG4gKiBBIHN1Y2Nlc3NmdWwgKG5vbi1lcnJvcikgcmVzcG9uc2UgdG8gYSByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgSlNPTlJQQ1Jlc3BvbnNlU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIGpzb25ycGM6IHoubGl0ZXJhbChKU09OUlBDX1ZFUlNJT04pLFxuICAgIGlkOiBSZXF1ZXN0SWRTY2hlbWEsXG4gICAgcmVzdWx0OiBSZXN1bHRTY2hlbWEsXG59KVxuICAgIC5zdHJpY3QoKTtcbi8qKlxuICogRXJyb3IgY29kZXMgZGVmaW5lZCBieSB0aGUgSlNPTi1SUEMgc3BlY2lmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IHZhciBFcnJvckNvZGU7XG4oZnVuY3Rpb24gKEVycm9yQ29kZSkge1xuICAgIC8vIFNESyBlcnJvciBjb2Rlc1xuICAgIEVycm9yQ29kZVtFcnJvckNvZGVbXCJDb25uZWN0aW9uQ2xvc2VkXCJdID0gLTMyMDAwXSA9IFwiQ29ubmVjdGlvbkNsb3NlZFwiO1xuICAgIEVycm9yQ29kZVtFcnJvckNvZGVbXCJSZXF1ZXN0VGltZW91dFwiXSA9IC0zMjAwMV0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgLy8gU3RhbmRhcmQgSlNPTi1SUEMgZXJyb3IgY29kZXNcbiAgICBFcnJvckNvZGVbRXJyb3JDb2RlW1wiUGFyc2VFcnJvclwiXSA9IC0zMjcwMF0gPSBcIlBhcnNlRXJyb3JcIjtcbiAgICBFcnJvckNvZGVbRXJyb3JDb2RlW1wiSW52YWxpZFJlcXVlc3RcIl0gPSAtMzI2MDBdID0gXCJJbnZhbGlkUmVxdWVzdFwiO1xuICAgIEVycm9yQ29kZVtFcnJvckNvZGVbXCJNZXRob2ROb3RGb3VuZFwiXSA9IC0zMjYwMV0gPSBcIk1ldGhvZE5vdEZvdW5kXCI7XG4gICAgRXJyb3JDb2RlW0Vycm9yQ29kZVtcIkludmFsaWRQYXJhbXNcIl0gPSAtMzI2MDJdID0gXCJJbnZhbGlkUGFyYW1zXCI7XG4gICAgRXJyb3JDb2RlW0Vycm9yQ29kZVtcIkludGVybmFsRXJyb3JcIl0gPSAtMzI2MDNdID0gXCJJbnRlcm5hbEVycm9yXCI7XG59KShFcnJvckNvZGUgfHwgKEVycm9yQ29kZSA9IHt9KSk7XG4vKipcbiAqIEEgcmVzcG9uc2UgdG8gYSByZXF1ZXN0IHRoYXQgaW5kaWNhdGVzIGFuIGVycm9yIG9jY3VycmVkLlxuICovXG5leHBvcnQgY29uc3QgSlNPTlJQQ0Vycm9yU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIGpzb25ycGM6IHoubGl0ZXJhbChKU09OUlBDX1ZFUlNJT04pLFxuICAgIGlkOiBSZXF1ZXN0SWRTY2hlbWEsXG4gICAgZXJyb3I6IHoub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBlcnJvciB0eXBlIHRoYXQgb2NjdXJyZWQuXG4gICAgICAgICAqL1xuICAgICAgICBjb2RlOiB6Lm51bWJlcigpLmludCgpLFxuICAgICAgICAvKipcbiAgICAgICAgICogQSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuIFRoZSBtZXNzYWdlIFNIT1VMRCBiZSBsaW1pdGVkIHRvIGEgY29uY2lzZSBzaW5nbGUgc2VudGVuY2UuXG4gICAgICAgICAqL1xuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IuIFRoZSB2YWx1ZSBvZiB0aGlzIG1lbWJlciBpcyBkZWZpbmVkIGJ5IHRoZSBzZW5kZXIgKGUuZy4gZGV0YWlsZWQgZXJyb3IgaW5mb3JtYXRpb24sIG5lc3RlZCBlcnJvcnMgZXRjLikuXG4gICAgICAgICAqL1xuICAgICAgICBkYXRhOiB6Lm9wdGlvbmFsKHoudW5rbm93bigpKSxcbiAgICB9KSxcbn0pXG4gICAgLnN0cmljdCgpO1xuZXhwb3J0IGNvbnN0IEpTT05SUENNZXNzYWdlU2NoZW1hID0gei51bmlvbihbXG4gICAgSlNPTlJQQ1JlcXVlc3RTY2hlbWEsXG4gICAgSlNPTlJQQ05vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBKU09OUlBDUmVzcG9uc2VTY2hlbWEsXG4gICAgSlNPTlJQQ0Vycm9yU2NoZW1hLFxuXSk7XG4vKiBFbXB0eSByZXN1bHQgKi9cbi8qKlxuICogQSByZXNwb25zZSB0aGF0IGluZGljYXRlcyBzdWNjZXNzIGJ1dCBjYXJyaWVzIG5vIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBFbXB0eVJlc3VsdFNjaGVtYSA9IFJlc3VsdFNjaGVtYS5zdHJpY3QoKTtcbi8qIENhbmNlbGxhdGlvbiAqL1xuLyoqXG4gKiBUaGlzIG5vdGlmaWNhdGlvbiBjYW4gYmUgc2VudCBieSBlaXRoZXIgc2lkZSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIGNhbmNlbGxpbmcgYSBwcmV2aW91c2x5LWlzc3VlZCByZXF1ZXN0LlxuICpcbiAqIFRoZSByZXF1ZXN0IFNIT1VMRCBzdGlsbCBiZSBpbi1mbGlnaHQsIGJ1dCBkdWUgdG8gY29tbXVuaWNhdGlvbiBsYXRlbmN5LCBpdCBpcyBhbHdheXMgcG9zc2libGUgdGhhdCB0aGlzIG5vdGlmaWNhdGlvbiBNQVkgYXJyaXZlIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkLlxuICpcbiAqIFRoaXMgbm90aWZpY2F0aW9uIGluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSB1bnVzZWQsIHNvIGFueSBhc3NvY2lhdGVkIHByb2Nlc3NpbmcgU0hPVUxEIGNlYXNlLlxuICpcbiAqIEEgY2xpZW50IE1VU1QgTk9UIGF0dGVtcHQgdG8gY2FuY2VsIGl0cyBgaW5pdGlhbGl6ZWAgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENhbmNlbGxlZE5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwibm90aWZpY2F0aW9ucy9jYW5jZWxsZWRcIiksXG4gICAgcGFyYW1zOiBCYXNlTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgSUQgb2YgdGhlIHJlcXVlc3QgdG8gY2FuY2VsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIE1VU1QgY29ycmVzcG9uZCB0byB0aGUgSUQgb2YgYSByZXF1ZXN0IHByZXZpb3VzbHkgaXNzdWVkIGluIHRoZSBzYW1lIGRpcmVjdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHJlcXVlc3RJZDogUmVxdWVzdElkU2NoZW1hLFxuICAgICAgICAvKipcbiAgICAgICAgICogQW4gb3B0aW9uYWwgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHJlYXNvbiBmb3IgdGhlIGNhbmNlbGxhdGlvbi4gVGhpcyBNQVkgYmUgbG9nZ2VkIG9yIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICAgICAgICovXG4gICAgICAgIHJlYXNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxufSk7XG4vKiBJbml0aWFsaXphdGlvbiAqL1xuLyoqXG4gKiBEZXNjcmliZXMgdGhlIG5hbWUgYW5kIHZlcnNpb24gb2YgYW4gTUNQIGltcGxlbWVudGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgSW1wbGVtZW50YXRpb25TY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICB2ZXJzaW9uOiB6LnN0cmluZygpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogQ2FwYWJpbGl0aWVzIGEgY2xpZW50IG1heSBzdXBwb3J0LiBLbm93biBjYXBhYmlsaXRpZXMgYXJlIGRlZmluZWQgaGVyZSwgaW4gdGhpcyBzY2hlbWEsIGJ1dCB0aGlzIGlzIG5vdCBhIGNsb3NlZCBzZXQ6IGFueSBjbGllbnQgY2FuIGRlZmluZSBpdHMgb3duLCBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENsaWVudENhcGFiaWxpdGllc1NjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBFeHBlcmltZW50YWwsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgdGhhdCB0aGUgY2xpZW50IHN1cHBvcnRzLlxuICAgICAqL1xuICAgIGV4cGVyaW1lbnRhbDogei5vcHRpb25hbCh6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKSksXG4gICAgLyoqXG4gICAgICogUHJlc2VudCBpZiB0aGUgY2xpZW50IHN1cHBvcnRzIHNhbXBsaW5nIGZyb20gYW4gTExNLlxuICAgICAqL1xuICAgIHNhbXBsaW5nOiB6Lm9wdGlvbmFsKHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3VwcG9ydHMgbGlzdGluZyByb290cy5cbiAgICAgKi9cbiAgICByb290czogei5vcHRpb25hbCh6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGUgY2xpZW50IHN1cHBvcnRzIGlzc3Vpbmcgbm90aWZpY2F0aW9ucyBmb3IgY2hhbmdlcyB0byB0aGUgcm9vdHMgbGlzdC5cbiAgICAgICAgICovXG4gICAgICAgIGxpc3RDaGFuZ2VkOiB6Lm9wdGlvbmFsKHouYm9vbGVhbigpKSxcbiAgICB9KVxuICAgICAgICAucGFzc3Rocm91Z2goKSksXG59KVxuICAgIC5wYXNzdGhyb3VnaCgpO1xuLyoqXG4gKiBUaGlzIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB3aGVuIGl0IGZpcnN0IGNvbm5lY3RzLCBhc2tpbmcgaXQgdG8gYmVnaW4gaW5pdGlhbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBJbml0aWFsaXplUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcImluaXRpYWxpemVcIiksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBNb2RlbCBDb250ZXh0IFByb3RvY29sIHRoYXQgdGhlIGNsaWVudCBzdXBwb3J0cy4gVGhlIGNsaWVudCBNQVkgZGVjaWRlIHRvIHN1cHBvcnQgb2xkZXIgdmVyc2lvbnMgYXMgd2VsbC5cbiAgICAgICAgICovXG4gICAgICAgIHByb3RvY29sVmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgY2FwYWJpbGl0aWVzOiBDbGllbnRDYXBhYmlsaXRpZXNTY2hlbWEsXG4gICAgICAgIGNsaWVudEluZm86IEltcGxlbWVudGF0aW9uU2NoZW1hLFxuICAgIH0pLFxufSk7XG4vKipcbiAqIENhcGFiaWxpdGllcyB0aGF0IGEgc2VydmVyIG1heSBzdXBwb3J0LiBLbm93biBjYXBhYmlsaXRpZXMgYXJlIGRlZmluZWQgaGVyZSwgaW4gdGhpcyBzY2hlbWEsIGJ1dCB0aGlzIGlzIG5vdCBhIGNsb3NlZCBzZXQ6IGFueSBzZXJ2ZXIgY2FuIGRlZmluZSBpdHMgb3duLCBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckNhcGFiaWxpdGllc1NjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBFeHBlcmltZW50YWwsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgdGhhdCB0aGUgc2VydmVyIHN1cHBvcnRzLlxuICAgICAqL1xuICAgIGV4cGVyaW1lbnRhbDogei5vcHRpb25hbCh6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKSksXG4gICAgLyoqXG4gICAgICogUHJlc2VudCBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHNlbmRpbmcgbG9nIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgbG9nZ2luZzogei5vcHRpb25hbCh6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKSksXG4gICAgLyoqXG4gICAgICogUHJlc2VudCBpZiB0aGUgc2VydmVyIG9mZmVycyBhbnkgcHJvbXB0IHRlbXBsYXRlcy5cbiAgICAgKi9cbiAgICBwcm9tcHRzOiB6Lm9wdGlvbmFsKHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgc2VydmVyIHN1cHBvcnRzIGlzc3Vpbmcgbm90aWZpY2F0aW9ucyBmb3IgY2hhbmdlcyB0byB0aGUgcHJvbXB0IGxpc3QuXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0Q2hhbmdlZDogei5vcHRpb25hbCh6LmJvb2xlYW4oKSksXG4gICAgfSlcbiAgICAgICAgLnBhc3N0aHJvdWdoKCkpLFxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgaWYgdGhlIHNlcnZlciBvZmZlcnMgYW55IHJlc291cmNlcyB0byByZWFkLlxuICAgICAqL1xuICAgIHJlc291cmNlczogei5vcHRpb25hbCh6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGlzIHNlcnZlciBzdXBwb3J0cyBjbGllbnRzIHN1YnNjcmliaW5nIHRvIHJlc291cmNlIHVwZGF0ZXMuXG4gICAgICAgICAqL1xuICAgICAgICBzdWJzY3JpYmU6IHoub3B0aW9uYWwoei5ib29sZWFuKCkpLFxuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGlzIHNlcnZlciBzdXBwb3J0cyBpc3N1aW5nIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5nZXMgdG8gdGhlIHJlc291cmNlIGxpc3QuXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0Q2hhbmdlZDogei5vcHRpb25hbCh6LmJvb2xlYW4oKSksXG4gICAgfSlcbiAgICAgICAgLnBhc3N0aHJvdWdoKCkpLFxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgaWYgdGhlIHNlcnZlciBvZmZlcnMgYW55IHRvb2xzIHRvIGNhbGwuXG4gICAgICovXG4gICAgdG9vbHM6IHoub3B0aW9uYWwoelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBzZXJ2ZXIgc3VwcG9ydHMgaXNzdWluZyBub3RpZmljYXRpb25zIGZvciBjaGFuZ2VzIHRvIHRoZSB0b29sIGxpc3QuXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0Q2hhbmdlZDogei5vcHRpb25hbCh6LmJvb2xlYW4oKSksXG4gICAgfSlcbiAgICAgICAgLnBhc3N0aHJvdWdoKCkpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogQWZ0ZXIgcmVjZWl2aW5nIGFuIGluaXRpYWxpemUgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQsIHRoZSBzZXJ2ZXIgc2VuZHMgdGhpcyByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEluaXRpYWxpemVSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgTW9kZWwgQ29udGV4dCBQcm90b2NvbCB0aGF0IHRoZSBzZXJ2ZXIgd2FudHMgdG8gdXNlLiBUaGlzIG1heSBub3QgbWF0Y2ggdGhlIHZlcnNpb24gdGhhdCB0aGUgY2xpZW50IHJlcXVlc3RlZC4gSWYgdGhlIGNsaWVudCBjYW5ub3Qgc3VwcG9ydCB0aGlzIHZlcnNpb24sIGl0IE1VU1QgZGlzY29ubmVjdC5cbiAgICAgKi9cbiAgICBwcm90b2NvbFZlcnNpb246IHouc3RyaW5nKCksXG4gICAgY2FwYWJpbGl0aWVzOiBTZXJ2ZXJDYXBhYmlsaXRpZXNTY2hlbWEsXG4gICAgc2VydmVySW5mbzogSW1wbGVtZW50YXRpb25TY2hlbWEsXG4gICAgLyoqXG4gICAgICogSW5zdHJ1Y3Rpb25zIGRlc2NyaWJpbmcgaG93IHRvIHVzZSB0aGUgc2VydmVyIGFuZCBpdHMgZmVhdHVyZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gaW1wcm92ZSB0aGUgTExNJ3MgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgdG9vbHMsIHJlc291cmNlcywgZXRjLiBJdCBjYW4gYmUgdGhvdWdodCBvZiBsaWtlIGEgXCJoaW50XCIgdG8gdGhlIG1vZGVsLiBGb3IgZXhhbXBsZSwgdGhpcyBpbmZvcm1hdGlvbiBNQVkgYmUgYWRkZWQgdG8gdGhlIHN5c3RlbSBwcm9tcHQuXG4gICAgICovXG4gICAgaW5zdHJ1Y3Rpb25zOiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpLFxufSk7XG4vKipcbiAqIFRoaXMgbm90aWZpY2F0aW9uIGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaGFzIGZpbmlzaGVkLlxuICovXG5leHBvcnQgY29uc3QgSW5pdGlhbGl6ZWROb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWRcIiksXG59KTtcbi8qIFBpbmcgKi9cbi8qKlxuICogQSBwaW5nLCBpc3N1ZWQgYnkgZWl0aGVyIHRoZSBzZXJ2ZXIgb3IgdGhlIGNsaWVudCwgdG8gY2hlY2sgdGhhdCB0aGUgb3RoZXIgcGFydHkgaXMgc3RpbGwgYWxpdmUuIFRoZSByZWNlaXZlciBtdXN0IHByb21wdGx5IHJlc3BvbmQsIG9yIGVsc2UgbWF5IGJlIGRpc2Nvbm5lY3RlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBpbmdSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwicGluZ1wiKSxcbn0pO1xuLyogUHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyAqL1xuZXhwb3J0IGNvbnN0IFByb2dyZXNzU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFRoZSBwcm9ncmVzcyB0aHVzIGZhci4gVGhpcyBzaG91bGQgaW5jcmVhc2UgZXZlcnkgdGltZSBwcm9ncmVzcyBpcyBtYWRlLCBldmVuIGlmIHRoZSB0b3RhbCBpcyB1bmtub3duLlxuICAgICAqL1xuICAgIHByb2dyZXNzOiB6Lm51bWJlcigpLFxuICAgIC8qKlxuICAgICAqIFRvdGFsIG51bWJlciBvZiBpdGVtcyB0byBwcm9jZXNzIChvciB0b3RhbCBwcm9ncmVzcyByZXF1aXJlZCksIGlmIGtub3duLlxuICAgICAqL1xuICAgIHRvdGFsOiB6Lm9wdGlvbmFsKHoubnVtYmVyKCkpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogQW4gb3V0LW9mLWJhbmQgbm90aWZpY2F0aW9uIHVzZWQgdG8gaW5mb3JtIHRoZSByZWNlaXZlciBvZiBhIHByb2dyZXNzIHVwZGF0ZSBmb3IgYSBsb25nLXJ1bm5pbmcgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFByb2dyZXNzTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoXCJub3RpZmljYXRpb25zL3Byb2dyZXNzXCIpLFxuICAgIHBhcmFtczogQmFzZU5vdGlmaWNhdGlvblBhcmFtc1NjaGVtYS5tZXJnZShQcm9ncmVzc1NjaGVtYSkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBwcm9ncmVzcyB0b2tlbiB3aGljaCB3YXMgZ2l2ZW4gaW4gdGhlIGluaXRpYWwgcmVxdWVzdCwgdXNlZCB0byBhc3NvY2lhdGUgdGhpcyBub3RpZmljYXRpb24gd2l0aCB0aGUgcmVxdWVzdCB0aGF0IGlzIHByb2NlZWRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICBwcm9ncmVzc1Rva2VuOiBQcm9ncmVzc1Rva2VuU2NoZW1hLFxuICAgIH0pLFxufSk7XG4vKiBQYWdpbmF0aW9uICovXG5leHBvcnQgY29uc3QgUGFnaW5hdGVkUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBvcGFxdWUgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHBhZ2luYXRpb24gcG9zaXRpb24uXG4gICAgICAgICAqIElmIHByb3ZpZGVkLCB0aGUgc2VydmVyIHNob3VsZCByZXR1cm4gcmVzdWx0cyBzdGFydGluZyBhZnRlciB0aGlzIGN1cnNvci5cbiAgICAgICAgICovXG4gICAgICAgIGN1cnNvcjogei5vcHRpb25hbChDdXJzb3JTY2hlbWEpLFxuICAgIH0pLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBBbiBvcGFxdWUgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBwYWdpbmF0aW9uIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IHJldHVybmVkIHJlc3VsdC5cbiAgICAgKiBJZiBwcmVzZW50LCB0aGVyZSBtYXkgYmUgbW9yZSByZXN1bHRzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBuZXh0Q3Vyc29yOiB6Lm9wdGlvbmFsKEN1cnNvclNjaGVtYSksXG59KTtcbi8qIFJlc291cmNlcyAqL1xuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYSBzcGVjaWZpYyByZXNvdXJjZSBvciBzdWItcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNvbnRlbnRzU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFRoZSBVUkkgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKi9cbiAgICB1cmk6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGlzIHJlc291cmNlLCBpZiBrbm93bi5cbiAgICAgKi9cbiAgICBtaW1lVHlwZTogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG5leHBvcnQgY29uc3QgVGV4dFJlc291cmNlQ29udGVudHNTY2hlbWEgPSBSZXNvdXJjZUNvbnRlbnRzU2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIGl0ZW0uIFRoaXMgbXVzdCBvbmx5IGJlIHNldCBpZiB0aGUgaXRlbSBjYW4gYWN0dWFsbHkgYmUgcmVwcmVzZW50ZWQgYXMgdGV4dCAobm90IGJpbmFyeSBkYXRhKS5cbiAgICAgKi9cbiAgICB0ZXh0OiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgY29uc3QgQmxvYlJlc291cmNlQ29udGVudHNTY2hlbWEgPSBSZXNvdXJjZUNvbnRlbnRzU2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogQSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBiaW5hcnkgZGF0YSBvZiB0aGUgaXRlbS5cbiAgICAgKi9cbiAgICBibG9iOiB6LnN0cmluZygpLmJhc2U2NCgpLFxufSk7XG4vKipcbiAqIEEga25vd24gcmVzb3VyY2UgdGhhdCB0aGUgc2VydmVyIGlzIGNhcGFibGUgb2YgcmVhZGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFRoZSBVUkkgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKi9cbiAgICB1cmk6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIHBvcHVsYXRlIFVJIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgcmVzb3VyY2UgcmVwcmVzZW50cy5cbiAgICAgKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50cyB0byBpbXByb3ZlIHRoZSBMTE0ncyB1bmRlcnN0YW5kaW5nIG9mIGF2YWlsYWJsZSByZXNvdXJjZXMuIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGxpa2UgYSBcImhpbnRcIiB0byB0aGUgbW9kZWwuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgLyoqXG4gICAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGlzIHJlc291cmNlLCBpZiBrbm93bi5cbiAgICAgKi9cbiAgICBtaW1lVHlwZTogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG4vKipcbiAqIEEgdGVtcGxhdGUgZGVzY3JpcHRpb24gZm9yIHJlc291cmNlcyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlVGVtcGxhdGVTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogQSBVUkkgdGVtcGxhdGUgKGFjY29yZGluZyB0byBSRkMgNjU3MCkgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgcmVzb3VyY2UgVVJJcy5cbiAgICAgKi9cbiAgICB1cmlUZW1wbGF0ZTogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBBIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSB0eXBlIG9mIHJlc291cmNlIHRoaXMgdGVtcGxhdGUgcmVmZXJzIHRvLlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIHBvcHVsYXRlIFVJIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgdGVtcGxhdGUgaXMgZm9yLlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGltcHJvdmUgdGhlIExMTSdzIHVuZGVyc3RhbmRpbmcgb2YgYXZhaWxhYmxlIHJlc291cmNlcy4gSXQgY2FuIGJlIHRob3VnaHQgb2YgbGlrZSBhIFwiaGludFwiIHRvIHRoZSBtb2RlbC5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbiAgICAvKipcbiAgICAgKiBUaGUgTUlNRSB0eXBlIGZvciBhbGwgcmVzb3VyY2VzIHRoYXQgbWF0Y2ggdGhpcyB0ZW1wbGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBpZiBhbGwgcmVzb3VyY2VzIG1hdGNoaW5nIHRoaXMgdGVtcGxhdGUgaGF2ZSB0aGUgc2FtZSB0eXBlLlxuICAgICAqL1xuICAgIG1pbWVUeXBlOiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBhIGxpc3Qgb2YgcmVzb3VyY2VzIHRoZSBzZXJ2ZXIgaGFzLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEgPSBQYWdpbmF0ZWRSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoXCJyZXNvdXJjZXMvbGlzdFwiKSxcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSByZXNvdXJjZXMvbGlzdCByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RSZXNvdXJjZXNSZXN1bHRTY2hlbWEgPSBQYWdpbmF0ZWRSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICByZXNvdXJjZXM6IHouYXJyYXkoUmVzb3VyY2VTY2hlbWEpLFxufSk7XG4vKipcbiAqIFNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHJlcXVlc3QgYSBsaXN0IG9mIHJlc291cmNlIHRlbXBsYXRlcyB0aGUgc2VydmVyIGhhcy5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RSZXNvdXJjZVRlbXBsYXRlc1JlcXVlc3RTY2hlbWEgPSBQYWdpbmF0ZWRSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoXCJyZXNvdXJjZXMvdGVtcGxhdGVzL2xpc3RcIiksXG59KTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgcmVzb3VyY2VzL3RlbXBsYXRlcy9saXN0IHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgTGlzdFJlc291cmNlVGVtcGxhdGVzUmVzdWx0U2NoZW1hID0gUGFnaW5hdGVkUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgcmVzb3VyY2VUZW1wbGF0ZXM6IHouYXJyYXkoUmVzb3VyY2VUZW1wbGF0ZVNjaGVtYSksXG59KTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciwgdG8gcmVhZCBhIHNwZWNpZmljIHJlc291cmNlIFVSSS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlYWRSZXNvdXJjZVJlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoXCJyZXNvdXJjZXMvcmVhZFwiKSxcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSB0byByZWFkLiBUaGUgVVJJIGNhbiB1c2UgYW55IHByb3RvY29sOyBpdCBpcyB1cCB0byB0aGUgc2VydmVyIGhvdyB0byBpbnRlcnByZXQgaXQuXG4gICAgICAgICAqL1xuICAgICAgICB1cmk6IHouc3RyaW5nKCksXG4gICAgfSksXG59KTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgcmVzb3VyY2VzL3JlYWQgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBSZWFkUmVzb3VyY2VSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICBjb250ZW50czogei5hcnJheSh6LnVuaW9uKFtUZXh0UmVzb3VyY2VDb250ZW50c1NjaGVtYSwgQmxvYlJlc291cmNlQ29udGVudHNTY2hlbWFdKSksXG59KTtcbi8qKlxuICogQW4gb3B0aW9uYWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LCBpbmZvcm1pbmcgaXQgdGhhdCB0aGUgbGlzdCBvZiByZXNvdXJjZXMgaXQgY2FuIHJlYWQgZnJvbSBoYXMgY2hhbmdlZC4gVGhpcyBtYXkgYmUgaXNzdWVkIGJ5IHNlcnZlcnMgd2l0aG91dCBhbnkgcHJldmlvdXMgc3Vic2NyaXB0aW9uIGZyb20gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlTGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZFwiKSxcbn0pO1xuLyoqXG4gKiBTZW50IGZyb20gdGhlIGNsaWVudCB0byByZXF1ZXN0IHJlc291cmNlcy91cGRhdGVkIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgc2VydmVyIHdoZW5ldmVyIGEgcGFydGljdWxhciByZXNvdXJjZSBjaGFuZ2VzLlxuICovXG5leHBvcnQgY29uc3QgU3Vic2NyaWJlUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcInJlc291cmNlcy9zdWJzY3JpYmVcIiksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIFVSSSBvZiB0aGUgcmVzb3VyY2UgdG8gc3Vic2NyaWJlIHRvLiBUaGUgVVJJIGNhbiB1c2UgYW55IHByb3RvY29sOyBpdCBpcyB1cCB0byB0aGUgc2VydmVyIGhvdyB0byBpbnRlcnByZXQgaXQuXG4gICAgICAgICAqL1xuICAgICAgICB1cmk6IHouc3RyaW5nKCksXG4gICAgfSksXG59KTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgcmVzb3VyY2VzL3VwZGF0ZWQgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzZXJ2ZXIuIFRoaXMgc2hvdWxkIGZvbGxvdyBhIHByZXZpb3VzIHJlc291cmNlcy9zdWJzY3JpYmUgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFVuc3Vic2NyaWJlUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcInJlc291cmNlcy91bnN1YnNjcmliZVwiKSxcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSB0byB1bnN1YnNjcmliZSBmcm9tLlxuICAgICAgICAgKi9cbiAgICAgICAgdXJpOiB6LnN0cmluZygpLFxuICAgIH0pLFxufSk7XG4vKipcbiAqIEEgbm90aWZpY2F0aW9uIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LCBpbmZvcm1pbmcgaXQgdGhhdCBhIHJlc291cmNlIGhhcyBjaGFuZ2VkIGFuZCBtYXkgbmVlZCB0byBiZSByZWFkIGFnYWluLiBUaGlzIHNob3VsZCBvbmx5IGJlIHNlbnQgaWYgdGhlIGNsaWVudCBwcmV2aW91c2x5IHNlbnQgYSByZXNvdXJjZXMvc3Vic2NyaWJlIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVVwZGF0ZWROb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWRcIiksXG4gICAgcGFyYW1zOiBCYXNlTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSB0aGF0IGhhcyBiZWVuIHVwZGF0ZWQuIFRoaXMgbWlnaHQgYmUgYSBzdWItcmVzb3VyY2Ugb2YgdGhlIG9uZSB0aGF0IHRoZSBjbGllbnQgYWN0dWFsbHkgc3Vic2NyaWJlZCB0by5cbiAgICAgICAgICovXG4gICAgICAgIHVyaTogei5zdHJpbmcoKSxcbiAgICB9KSxcbn0pO1xuLyogUHJvbXB0cyAqL1xuLyoqXG4gKiBEZXNjcmliZXMgYW4gYXJndW1lbnQgdGhhdCBhIHByb21wdCBjYW4gYWNjZXB0LlxuICovXG5leHBvcnQgY29uc3QgUHJvbXB0QXJndW1lbnRTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50LlxuICAgICAqL1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnQuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGFyZ3VtZW50IG11c3QgYmUgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcmVxdWlyZWQ6IHoub3B0aW9uYWwoei5ib29sZWFuKCkpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogQSBwcm9tcHQgb3IgcHJvbXB0IHRlbXBsYXRlIHRoYXQgdGhlIHNlcnZlciBvZmZlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQcm9tcHRTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb21wdCBvciBwcm9tcHQgdGVtcGxhdGUuXG4gICAgICovXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgcHJvbXB0IHByb3ZpZGVzXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGFyZ3VtZW50cyB0byB1c2UgZm9yIHRlbXBsYXRpbmcgdGhlIHByb21wdC5cbiAgICAgKi9cbiAgICBhcmd1bWVudHM6IHoub3B0aW9uYWwoei5hcnJheShQcm9tcHRBcmd1bWVudFNjaGVtYSkpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBhIGxpc3Qgb2YgcHJvbXB0cyBhbmQgcHJvbXB0IHRlbXBsYXRlcyB0aGUgc2VydmVyIGhhcy5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RQcm9tcHRzUmVxdWVzdFNjaGVtYSA9IFBhZ2luYXRlZFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcInByb21wdHMvbGlzdFwiKSxcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSBwcm9tcHRzL2xpc3QgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBMaXN0UHJvbXB0c1Jlc3VsdFNjaGVtYSA9IFBhZ2luYXRlZFJlc3VsdFNjaGVtYS5leHRlbmQoe1xuICAgIHByb21wdHM6IHouYXJyYXkoUHJvbXB0U2NoZW1hKSxcbn0pO1xuLyoqXG4gKiBVc2VkIGJ5IHRoZSBjbGllbnQgdG8gZ2V0IGEgcHJvbXB0IHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBHZXRQcm9tcHRSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwicHJvbXB0cy9nZXRcIiksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIHByb21wdCBvciBwcm9tcHQgdGVtcGxhdGUuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICAvKipcbiAgICAgICAgICogQXJndW1lbnRzIHRvIHVzZSBmb3IgdGVtcGxhdGluZyB0aGUgcHJvbXB0LlxuICAgICAgICAgKi9cbiAgICAgICAgYXJndW1lbnRzOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCkpKSxcbiAgICB9KSxcbn0pO1xuLyoqXG4gKiBUZXh0IHByb3ZpZGVkIHRvIG9yIGZyb20gYW4gTExNLlxuICovXG5leHBvcnQgY29uc3QgVGV4dENvbnRlbnRTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG59KVxuICAgIC5wYXNzdGhyb3VnaCgpO1xuLyoqXG4gKiBBbiBpbWFnZSBwcm92aWRlZCB0byBvciBmcm9tIGFuIExMTS5cbiAqL1xuZXhwb3J0IGNvbnN0IEltYWdlQ29udGVudFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJpbWFnZVwiKSxcbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZTY0LWVuY29kZWQgaW1hZ2UgZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhOiB6LnN0cmluZygpLmJhc2U2NCgpLFxuICAgIC8qKlxuICAgICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhlIGltYWdlLiBEaWZmZXJlbnQgcHJvdmlkZXJzIG1heSBzdXBwb3J0IGRpZmZlcmVudCBpbWFnZSB0eXBlcy5cbiAgICAgKi9cbiAgICBtaW1lVHlwZTogei5zdHJpbmcoKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG4vKipcbiAqIFRoZSBjb250ZW50cyBvZiBhIHJlc291cmNlLCBlbWJlZGRlZCBpbnRvIGEgcHJvbXB0IG9yIHRvb2wgY2FsbCByZXN1bHQuXG4gKi9cbmV4cG9ydCBjb25zdCBFbWJlZGRlZFJlc291cmNlU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInJlc291cmNlXCIpLFxuICAgIHJlc291cmNlOiB6LnVuaW9uKFtUZXh0UmVzb3VyY2VDb250ZW50c1NjaGVtYSwgQmxvYlJlc291cmNlQ29udGVudHNTY2hlbWFdKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG4vKipcbiAqIERlc2NyaWJlcyBhIG1lc3NhZ2UgcmV0dXJuZWQgYXMgcGFydCBvZiBhIHByb21wdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFByb21wdE1lc3NhZ2VTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgcm9sZTogei5lbnVtKFtcInVzZXJcIiwgXCJhc3Npc3RhbnRcIl0pLFxuICAgIGNvbnRlbnQ6IHoudW5pb24oW1xuICAgICAgICBUZXh0Q29udGVudFNjaGVtYSxcbiAgICAgICAgSW1hZ2VDb250ZW50U2NoZW1hLFxuICAgICAgICBFbWJlZGRlZFJlc291cmNlU2NoZW1hLFxuICAgIF0pLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgcHJvbXB0cy9nZXQgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHZXRQcm9tcHRSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIHByb21wdC5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbiAgICBtZXNzYWdlczogei5hcnJheShQcm9tcHRNZXNzYWdlU2NoZW1hKSxcbn0pO1xuLyoqXG4gKiBBbiBvcHRpb25hbCBub3RpZmljYXRpb24gZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQsIGluZm9ybWluZyBpdCB0aGF0IHRoZSBsaXN0IG9mIHByb21wdHMgaXQgb2ZmZXJzIGhhcyBjaGFuZ2VkLiBUaGlzIG1heSBiZSBpc3N1ZWQgYnkgc2VydmVycyB3aXRob3V0IGFueSBwcmV2aW91cyBzdWJzY3JpcHRpb24gZnJvbSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgUHJvbXB0TGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWRcIiksXG59KTtcbi8qIFRvb2xzICovXG4vKipcbiAqIERlZmluaXRpb24gZm9yIGEgdG9vbCB0aGUgY2xpZW50IGNhbiBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgVG9vbFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgdG9vbC5cbiAgICAgKi9cbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHRvb2wuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgLyoqXG4gICAgICogQSBKU09OIFNjaGVtYSBvYmplY3QgZGVmaW5pbmcgdGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSB0b29sLlxuICAgICAqL1xuICAgIGlucHV0U2NoZW1hOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICB0eXBlOiB6LmxpdGVyYWwoXCJvYmplY3RcIiksXG4gICAgICAgIHByb3BlcnRpZXM6IHoub3B0aW9uYWwoei5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCkpLFxuICAgIH0pXG4gICAgICAgIC5wYXNzdGhyb3VnaCgpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBhIGxpc3Qgb2YgdG9vbHMgdGhlIHNlcnZlciBoYXMuXG4gKi9cbmV4cG9ydCBjb25zdCBMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hID0gUGFnaW5hdGVkUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwidG9vbHMvbGlzdFwiKSxcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSB0b29scy9saXN0IHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgTGlzdFRvb2xzUmVzdWx0U2NoZW1hID0gUGFnaW5hdGVkUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgdG9vbHM6IHouYXJyYXkoVG9vbFNjaGVtYSksXG59KTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgdG9vbCBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgQ2FsbFRvb2xSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICBjb250ZW50OiB6LmFycmF5KHoudW5pb24oW1RleHRDb250ZW50U2NoZW1hLCBJbWFnZUNvbnRlbnRTY2hlbWEsIEVtYmVkZGVkUmVzb3VyY2VTY2hlbWFdKSksXG4gICAgaXNFcnJvcjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSkub3B0aW9uYWwoKSxcbn0pO1xuLyoqXG4gKiBDYWxsVG9vbFJlc3VsdFNjaGVtYSBleHRlbmRlZCB3aXRoIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRvIHByb3RvY29sIHZlcnNpb24gMjAyNC0xMC0wNy5cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBhdGliaWxpdHlDYWxsVG9vbFJlc3VsdFNjaGVtYSA9IENhbGxUb29sUmVzdWx0U2NoZW1hLm9yKFJlc3VsdFNjaGVtYS5leHRlbmQoe1xuICAgIHRvb2xSZXN1bHQ6IHoudW5rbm93bigpLFxufSkpO1xuLyoqXG4gKiBVc2VkIGJ5IHRoZSBjbGllbnQgdG8gaW52b2tlIGEgdG9vbCBwcm92aWRlZCBieSB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY29uc3QgQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwidG9vbHMvY2FsbFwiKSxcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGFyZ3VtZW50czogei5vcHRpb25hbCh6LnJlY29yZCh6LnVua25vd24oKSkpLFxuICAgIH0pLFxufSk7XG4vKipcbiAqIEFuIG9wdGlvbmFsIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCwgaW5mb3JtaW5nIGl0IHRoYXQgdGhlIGxpc3Qgb2YgdG9vbHMgaXQgb2ZmZXJzIGhhcyBjaGFuZ2VkLiBUaGlzIG1heSBiZSBpc3N1ZWQgYnkgc2VydmVycyB3aXRob3V0IGFueSBwcmV2aW91cyBzdWJzY3JpcHRpb24gZnJvbSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgVG9vbExpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoXCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZFwiKSxcbn0pO1xuLyogTG9nZ2luZyAqL1xuLyoqXG4gKiBUaGUgc2V2ZXJpdHkgb2YgYSBsb2cgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2dpbmdMZXZlbFNjaGVtYSA9IHouZW51bShbXG4gICAgXCJkZWJ1Z1wiLFxuICAgIFwiaW5mb1wiLFxuICAgIFwibm90aWNlXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiY3JpdGljYWxcIixcbiAgICBcImFsZXJ0XCIsXG4gICAgXCJlbWVyZ2VuY3lcIixcbl0pO1xuLyoqXG4gKiBBIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIsIHRvIGVuYWJsZSBvciBhZGp1c3QgbG9nZ2luZy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNldExldmVsUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcImxvZ2dpbmcvc2V0TGV2ZWxcIiksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGxldmVsIG9mIGxvZ2dpbmcgdGhhdCB0aGUgY2xpZW50IHdhbnRzIHRvIHJlY2VpdmUgZnJvbSB0aGUgc2VydmVyLiBUaGUgc2VydmVyIHNob3VsZCBzZW5kIGFsbCBsb2dzIGF0IHRoaXMgbGV2ZWwgYW5kIGhpZ2hlciAoaS5lLiwgbW9yZSBzZXZlcmUpIHRvIHRoZSBjbGllbnQgYXMgbm90aWZpY2F0aW9ucy9sb2dnaW5nL21lc3NhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBsZXZlbDogTG9nZ2luZ0xldmVsU2NoZW1hLFxuICAgIH0pLFxufSk7XG4vKipcbiAqIE5vdGlmaWNhdGlvbiBvZiBhIGxvZyBtZXNzYWdlIHBhc3NlZCBmcm9tIHNlcnZlciB0byBjbGllbnQuIElmIG5vIGxvZ2dpbmcvc2V0TGV2ZWwgcmVxdWVzdCBoYXMgYmVlbiBzZW50IGZyb20gdGhlIGNsaWVudCwgdGhlIHNlcnZlciBNQVkgZGVjaWRlIHdoaWNoIG1lc3NhZ2VzIHRvIHNlbmQgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2dpbmdNZXNzYWdlTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoXCJub3RpZmljYXRpb25zL21lc3NhZ2VcIiksXG4gICAgcGFyYW1zOiBCYXNlTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc2V2ZXJpdHkgb2YgdGhpcyBsb2cgbWVzc2FnZS5cbiAgICAgICAgICovXG4gICAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxTY2hlbWEsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBsb2dnZXIgaXNzdWluZyB0aGlzIG1lc3NhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBsb2dnZXI6IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGF0YSB0byBiZSBsb2dnZWQsIHN1Y2ggYXMgYSBzdHJpbmcgbWVzc2FnZSBvciBhbiBvYmplY3QuIEFueSBKU09OIHNlcmlhbGl6YWJsZSB0eXBlIGlzIGFsbG93ZWQgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIGRhdGE6IHoudW5rbm93bigpLFxuICAgIH0pLFxufSk7XG4vKiBTYW1wbGluZyAqL1xuLyoqXG4gKiBIaW50cyB0byB1c2UgZm9yIG1vZGVsIHNlbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsSGludFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBBIGhpbnQgZm9yIGEgbW9kZWwgbmFtZS5cbiAgICAgKi9cbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KVxuICAgIC5wYXNzdGhyb3VnaCgpO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcHJlZmVyZW5jZXMgZm9yIG1vZGVsIHNlbGVjdGlvbiwgcmVxdWVzdGVkIG9mIHRoZSBjbGllbnQgZHVyaW5nIHNhbXBsaW5nLlxuICovXG5leHBvcnQgY29uc3QgTW9kZWxQcmVmZXJlbmNlc1NjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBoaW50cyB0byB1c2UgZm9yIG1vZGVsIHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBoaW50czogei5vcHRpb25hbCh6LmFycmF5KE1vZGVsSGludFNjaGVtYSkpLFxuICAgIC8qKlxuICAgICAqIEhvdyBtdWNoIHRvIHByaW9yaXRpemUgY29zdCB3aGVuIHNlbGVjdGluZyBhIG1vZGVsLlxuICAgICAqL1xuICAgIGNvc3RQcmlvcml0eTogei5vcHRpb25hbCh6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkpLFxuICAgIC8qKlxuICAgICAqIEhvdyBtdWNoIHRvIHByaW9yaXRpemUgc2FtcGxpbmcgc3BlZWQgKGxhdGVuY3kpIHdoZW4gc2VsZWN0aW5nIGEgbW9kZWwuXG4gICAgICovXG4gICAgc3BlZWRQcmlvcml0eTogei5vcHRpb25hbCh6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkpLFxuICAgIC8qKlxuICAgICAqIEhvdyBtdWNoIHRvIHByaW9yaXRpemUgaW50ZWxsaWdlbmNlIGFuZCBjYXBhYmlsaXRpZXMgd2hlbiBzZWxlY3RpbmcgYSBtb2RlbC5cbiAgICAgKi9cbiAgICBpbnRlbGxpZ2VuY2VQcmlvcml0eTogei5vcHRpb25hbCh6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogRGVzY3JpYmVzIGEgbWVzc2FnZSBpc3N1ZWQgdG8gb3IgcmVjZWl2ZWQgZnJvbSBhbiBMTE0gQVBJLlxuICovXG5leHBvcnQgY29uc3QgU2FtcGxpbmdNZXNzYWdlU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHJvbGU6IHouZW51bShbXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCJdKSxcbiAgICBjb250ZW50OiB6LnVuaW9uKFtUZXh0Q29udGVudFNjaGVtYSwgSW1hZ2VDb250ZW50U2NoZW1hXSksXG59KVxuICAgIC5wYXNzdGhyb3VnaCgpO1xuLyoqXG4gKiBBIHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyIHRvIHNhbXBsZSBhbiBMTE0gdmlhIHRoZSBjbGllbnQuIFRoZSBjbGllbnQgaGFzIGZ1bGwgZGlzY3JldGlvbiBvdmVyIHdoaWNoIG1vZGVsIHRvIHNlbGVjdC4gVGhlIGNsaWVudCBzaG91bGQgYWxzbyBpbmZvcm0gdGhlIHVzZXIgYmVmb3JlIGJlZ2lubmluZyBzYW1wbGluZywgdG8gYWxsb3cgdGhlbSB0byBpbnNwZWN0IHRoZSByZXF1ZXN0IChodW1hbiBpbiB0aGUgbG9vcCkgYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGFwcHJvdmUgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVNZXNzYWdlUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2VcIiksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICBtZXNzYWdlczogei5hcnJheShTYW1wbGluZ01lc3NhZ2VTY2hlbWEpLFxuICAgICAgICAvKipcbiAgICAgICAgICogQW4gb3B0aW9uYWwgc3lzdGVtIHByb21wdCB0aGUgc2VydmVyIHdhbnRzIHRvIHVzZSBmb3Igc2FtcGxpbmcuIFRoZSBjbGllbnQgTUFZIG1vZGlmeSBvciBvbWl0IHRoaXMgcHJvbXB0LlxuICAgICAgICAgKi9cbiAgICAgICAgc3lzdGVtUHJvbXB0OiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpLFxuICAgICAgICAvKipcbiAgICAgICAgICogQSByZXF1ZXN0IHRvIGluY2x1ZGUgY29udGV4dCBmcm9tIG9uZSBvciBtb3JlIE1DUCBzZXJ2ZXJzIChpbmNsdWRpbmcgdGhlIGNhbGxlciksIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBwcm9tcHQuIFRoZSBjbGllbnQgTUFZIGlnbm9yZSB0aGlzIHJlcXVlc3QuXG4gICAgICAgICAqL1xuICAgICAgICBpbmNsdWRlQ29udGV4dDogei5vcHRpb25hbCh6LmVudW0oW1wibm9uZVwiLCBcInRoaXNTZXJ2ZXJcIiwgXCJhbGxTZXJ2ZXJzXCJdKSksXG4gICAgICAgIHRlbXBlcmF0dXJlOiB6Lm9wdGlvbmFsKHoubnVtYmVyKCkpLFxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRva2VucyB0byBzYW1wbGUsIGFzIHJlcXVlc3RlZCBieSB0aGUgc2VydmVyLiBUaGUgY2xpZW50IE1BWSBjaG9vc2UgdG8gc2FtcGxlIGZld2VyIHRva2VucyB0aGFuIHJlcXVlc3RlZC5cbiAgICAgICAgICovXG4gICAgICAgIG1heFRva2Vuczogei5udW1iZXIoKS5pbnQoKSxcbiAgICAgICAgc3RvcFNlcXVlbmNlczogei5vcHRpb25hbCh6LmFycmF5KHouc3RyaW5nKCkpKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIG1ldGFkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgTExNIHByb3ZpZGVyLiBUaGUgZm9ybWF0IG9mIHRoaXMgbWV0YWRhdGEgaXMgcHJvdmlkZXItc3BlY2lmaWMuXG4gICAgICAgICAqL1xuICAgICAgICBtZXRhZGF0YTogei5vcHRpb25hbCh6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKSksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc2VydmVyJ3MgcHJlZmVyZW5jZXMgZm9yIHdoaWNoIG1vZGVsIHRvIHNlbGVjdC5cbiAgICAgICAgICovXG4gICAgICAgIG1vZGVsUHJlZmVyZW5jZXM6IHoub3B0aW9uYWwoTW9kZWxQcmVmZXJlbmNlc1NjaGVtYSksXG4gICAgfSksXG59KTtcbi8qKlxuICogVGhlIGNsaWVudCdzIHJlc3BvbnNlIHRvIGEgc2FtcGxpbmcvY3JlYXRlX21lc3NhZ2UgcmVxdWVzdCBmcm9tIHRoZSBzZXJ2ZXIuIFRoZSBjbGllbnQgc2hvdWxkIGluZm9ybSB0aGUgdXNlciBiZWZvcmUgcmV0dXJuaW5nIHRoZSBzYW1wbGVkIG1lc3NhZ2UsIHRvIGFsbG93IHRoZW0gdG8gaW5zcGVjdCB0aGUgcmVzcG9uc2UgKGh1bWFuIGluIHRoZSBsb29wKSBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgdGhlIHNlcnZlciB0byBzZWUgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVNZXNzYWdlUmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIG1vZGVsIHRoYXQgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIG1vZGVsOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gd2h5IHNhbXBsaW5nIHN0b3BwZWQuXG4gICAgICovXG4gICAgc3RvcFJlYXNvbjogei5vcHRpb25hbCh6LmVudW0oW1wiZW5kVHVyblwiLCBcInN0b3BTZXF1ZW5jZVwiLCBcIm1heFRva2Vuc1wiXSkub3Ioei5zdHJpbmcoKSkpLFxuICAgIHJvbGU6IHouZW51bShbXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCJdKSxcbiAgICBjb250ZW50OiB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICAgICAgICBUZXh0Q29udGVudFNjaGVtYSxcbiAgICAgICAgSW1hZ2VDb250ZW50U2NoZW1hLFxuICAgIF0pLFxufSk7XG4vKiBBdXRvY29tcGxldGUgKi9cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSByZXNvdXJjZSBvciByZXNvdXJjZSB0ZW1wbGF0ZSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUmVzb3VyY2VSZWZlcmVuY2VTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwicmVmL3Jlc291cmNlXCIpLFxuICAgIC8qKlxuICAgICAqIFRoZSBVUkkgb3IgVVJJIHRlbXBsYXRlIG9mIHRoZSByZXNvdXJjZS5cbiAgICAgKi9cbiAgICB1cmk6IHouc3RyaW5nKCksXG59KVxuICAgIC5wYXNzdGhyb3VnaCgpO1xuLyoqXG4gKiBJZGVudGlmaWVzIGEgcHJvbXB0LlxuICovXG5leHBvcnQgY29uc3QgUHJvbXB0UmVmZXJlbmNlU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInJlZi9wcm9tcHRcIiksXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb21wdCBvciBwcm9tcHQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBuYW1lOiB6LnN0cmluZygpLFxufSlcbiAgICAucGFzc3Rocm91Z2goKTtcbi8qKlxuICogQSByZXF1ZXN0IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyLCB0byBhc2sgZm9yIGNvbXBsZXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBsZXRlUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbChcImNvbXBsZXRpb24vY29tcGxldGVcIiksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICByZWY6IHoudW5pb24oW1Byb21wdFJlZmVyZW5jZVNjaGVtYSwgUmVzb3VyY2VSZWZlcmVuY2VTY2hlbWFdKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcmd1bWVudCdzIGluZm9ybWF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhcmd1bWVudDogelxuICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHRvIHVzZSBmb3IgY29tcGxldGlvbiBtYXRjaGluZy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFsdWU6IHouc3RyaW5nKCksXG4gICAgICAgIH0pXG4gICAgICAgICAgICAucGFzc3Rocm91Z2goKSxcbiAgICB9KSxcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSBjb21wbGV0aW9uL2NvbXBsZXRlIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBsZXRlUmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgY29tcGxldGlvbjogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIGNvbXBsZXRpb24gdmFsdWVzLiBNdXN0IG5vdCBleGNlZWQgMTAwIGl0ZW1zLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFsdWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLm1heCgxMDApLFxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBjb21wbGV0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBUaGlzIGNhbiBleGNlZWQgdGhlIG51bWJlciBvZiB2YWx1ZXMgYWN0dWFsbHkgc2VudCBpbiB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAqL1xuICAgICAgICB0b3RhbDogei5vcHRpb25hbCh6Lm51bWJlcigpLmludCgpKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbXBsZXRpb24gb3B0aW9ucyBiZXlvbmQgdGhvc2UgcHJvdmlkZWQgaW4gdGhlIGN1cnJlbnQgcmVzcG9uc2UsIGV2ZW4gaWYgdGhlIGV4YWN0IHRvdGFsIGlzIHVua25vd24uXG4gICAgICAgICAqL1xuICAgICAgICBoYXNNb3JlOiB6Lm9wdGlvbmFsKHouYm9vbGVhbigpKSxcbiAgICB9KVxuICAgICAgICAucGFzc3Rocm91Z2goKSxcbn0pO1xuLyogUm9vdHMgKi9cbi8qKlxuICogUmVwcmVzZW50cyBhIHJvb3QgZGlyZWN0b3J5IG9yIGZpbGUgdGhhdCB0aGUgc2VydmVyIGNhbiBvcGVyYXRlIG9uLlxuICovXG5leHBvcnQgY29uc3QgUm9vdFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBUaGUgVVJJIGlkZW50aWZ5aW5nIHRoZSByb290LiBUaGlzICptdXN0KiBzdGFydCB3aXRoIGZpbGU6Ly8gZm9yIG5vdy5cbiAgICAgKi9cbiAgICB1cmk6IHouc3RyaW5nKCkuc3RhcnRzV2l0aChcImZpbGU6Ly9cIiksXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgbmFtZSBmb3IgdGhlIHJvb3QuXG4gICAgICovXG4gICAgbmFtZTogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbn0pXG4gICAgLnBhc3N0aHJvdWdoKCk7XG4vKipcbiAqIFNlbnQgZnJvbSB0aGUgc2VydmVyIHRvIHJlcXVlc3QgYSBsaXN0IG9mIHJvb3QgVVJJcyBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBMaXN0Um9vdHNSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwicm9vdHMvbGlzdFwiKSxcbn0pO1xuLyoqXG4gKiBUaGUgY2xpZW50J3MgcmVzcG9uc2UgdG8gYSByb290cy9saXN0IHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFJvb3RzUmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgcm9vdHM6IHouYXJyYXkoUm9vdFNjaGVtYSksXG59KTtcbi8qKlxuICogQSBub3RpZmljYXRpb24gZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIsIGluZm9ybWluZyBpdCB0aGF0IHRoZSBsaXN0IG9mIHJvb3RzIGhhcyBjaGFuZ2VkLlxuICovXG5leHBvcnQgY29uc3QgUm9vdHNMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKFwibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWRcIiksXG59KTtcbi8qIENsaWVudCBtZXNzYWdlcyAqL1xuZXhwb3J0IGNvbnN0IENsaWVudFJlcXVlc3RTY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBQaW5nUmVxdWVzdFNjaGVtYSxcbiAgICBJbml0aWFsaXplUmVxdWVzdFNjaGVtYSxcbiAgICBDb21wbGV0ZVJlcXVlc3RTY2hlbWEsXG4gICAgU2V0TGV2ZWxSZXF1ZXN0U2NoZW1hLFxuICAgIEdldFByb21wdFJlcXVlc3RTY2hlbWEsXG4gICAgTGlzdFByb21wdHNSZXF1ZXN0U2NoZW1hLFxuICAgIExpc3RSZXNvdXJjZXNSZXF1ZXN0U2NoZW1hLFxuICAgIExpc3RSZXNvdXJjZVRlbXBsYXRlc1JlcXVlc3RTY2hlbWEsXG4gICAgUmVhZFJlc291cmNlUmVxdWVzdFNjaGVtYSxcbiAgICBTdWJzY3JpYmVSZXF1ZXN0U2NoZW1hLFxuICAgIFVuc3Vic2NyaWJlUmVxdWVzdFNjaGVtYSxcbiAgICBDYWxsVG9vbFJlcXVlc3RTY2hlbWEsXG4gICAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbl0pO1xuZXhwb3J0IGNvbnN0IENsaWVudE5vdGlmaWNhdGlvblNjaGVtYSA9IHoudW5pb24oW1xuICAgIENhbmNlbGxlZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBQcm9ncmVzc05vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBJbml0aWFsaXplZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBSb290c0xpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hLFxuXSk7XG5leHBvcnQgY29uc3QgQ2xpZW50UmVzdWx0U2NoZW1hID0gei51bmlvbihbXG4gICAgRW1wdHlSZXN1bHRTY2hlbWEsXG4gICAgQ3JlYXRlTWVzc2FnZVJlc3VsdFNjaGVtYSxcbiAgICBMaXN0Um9vdHNSZXN1bHRTY2hlbWEsXG5dKTtcbi8qIFNlcnZlciBtZXNzYWdlcyAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclJlcXVlc3RTY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBQaW5nUmVxdWVzdFNjaGVtYSxcbiAgICBDcmVhdGVNZXNzYWdlUmVxdWVzdFNjaGVtYSxcbiAgICBMaXN0Um9vdHNSZXF1ZXN0U2NoZW1hLFxuXSk7XG5leHBvcnQgY29uc3QgU2VydmVyTm90aWZpY2F0aW9uU2NoZW1hID0gei51bmlvbihbXG4gICAgQ2FuY2VsbGVkTm90aWZpY2F0aW9uU2NoZW1hLFxuICAgIFByb2dyZXNzTm90aWZpY2F0aW9uU2NoZW1hLFxuICAgIExvZ2dpbmdNZXNzYWdlTm90aWZpY2F0aW9uU2NoZW1hLFxuICAgIFJlc291cmNlVXBkYXRlZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBSZXNvdXJjZUxpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hLFxuICAgIFRvb2xMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBQcm9tcHRMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSxcbl0pO1xuZXhwb3J0IGNvbnN0IFNlcnZlclJlc3VsdFNjaGVtYSA9IHoudW5pb24oW1xuICAgIEVtcHR5UmVzdWx0U2NoZW1hLFxuICAgIEluaXRpYWxpemVSZXN1bHRTY2hlbWEsXG4gICAgQ29tcGxldGVSZXN1bHRTY2hlbWEsXG4gICAgR2V0UHJvbXB0UmVzdWx0U2NoZW1hLFxuICAgIExpc3RQcm9tcHRzUmVzdWx0U2NoZW1hLFxuICAgIExpc3RSZXNvdXJjZXNSZXN1bHRTY2hlbWEsXG4gICAgTGlzdFJlc291cmNlVGVtcGxhdGVzUmVzdWx0U2NoZW1hLFxuICAgIFJlYWRSZXNvdXJjZVJlc3VsdFNjaGVtYSxcbiAgICBDYWxsVG9vbFJlc3VsdFNjaGVtYSxcbiAgICBMaXN0VG9vbHNSZXN1bHRTY2hlbWEsXG5dKTtcbmV4cG9ydCBjbGFzcyBNY3BFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlLCBtZXNzYWdlLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKGBNQ1AgZXJyb3IgJHtjb2RlfTogJHttZXNzYWdlfWApO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQ2FuY2VsbGVkTm90aWZpY2F0aW9uU2NoZW1hLCBFcnJvckNvZGUsIE1jcEVycm9yLCBQaW5nUmVxdWVzdFNjaGVtYSwgUHJvZ3Jlc3NOb3RpZmljYXRpb25TY2hlbWEsIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlcXVlc3QgdGltZW91dCwgaW4gbWlsaXNlY29uZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFUVVFU1RfVElNRU9VVF9NU0VDID0gNjAwMDA7XG4vKipcbiAqIEltcGxlbWVudHMgTUNQIHByb3RvY29sIGZyYW1pbmcgb24gdG9wIG9mIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydCwgaW5jbHVkaW5nXG4gKiBmZWF0dXJlcyBsaWtlIHJlcXVlc3QvcmVzcG9uc2UgbGlua2luZywgbm90aWZpY2F0aW9ucywgYW5kIHByb2dyZXNzLlxuICovXG5leHBvcnQgY2xhc3MgUHJvdG9jb2wge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcbiAgICAgICAgdGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCA9IDA7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RIYW5kbGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VIYW5kbGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKENhbmNlbGxlZE5vdGlmaWNhdGlvblNjaGVtYSwgKG5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQobm90aWZpY2F0aW9uLnBhcmFtcy5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgY29udHJvbGxlciA9PT0gbnVsbCB8fCBjb250cm9sbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb250cm9sbGVyLmFib3J0KG5vdGlmaWNhdGlvbi5wYXJhbXMucmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihQcm9ncmVzc05vdGlmaWNhdGlvblNjaGVtYSwgKG5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25wcm9ncmVzcyhub3RpZmljYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihQaW5nUmVxdWVzdFNjaGVtYSwgXG4gICAgICAgIC8vIEF1dG9tYXRpYyBwb25nIGJ5IGRlZmF1bHQuXG4gICAgICAgIChfcmVxdWVzdCkgPT4gKHt9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIHRvIHRoZSBnaXZlbiB0cmFuc3BvcnQsIHN0YXJ0cyBpdCwgYW5kIHN0YXJ0cyBsaXN0ZW5pbmcgZm9yIG1lc3NhZ2VzLlxuICAgICAqXG4gICAgICogVGhlIFByb3RvY29sIG9iamVjdCBhc3N1bWVzIG93bmVyc2hpcCBvZiB0aGUgVHJhbnNwb3J0LCByZXBsYWNpbmcgYW55IGNhbGxiYWNrcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNldCwgYW5kIGV4cGVjdHMgdGhhdCBpdCBpcyB0aGUgb25seSB1c2VyIG9mIHRoZSBUcmFuc3BvcnQgaW5zdGFuY2UgZ29pbmcgZm9yd2FyZC5cbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0KHRyYW5zcG9ydCkge1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydC5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25jbG9zZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25lcnJvcihlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydC5vbm1lc3NhZ2UgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoXCJtZXRob2RcIiBpbiBtZXNzYWdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29ucmVzcG9uc2UobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcImlkXCIgaW4gbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29ucmVxdWVzdChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29ubm90aWZpY2F0aW9uKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQuc3RhcnQoKTtcbiAgICB9XG4gICAgX29uY2xvc2UoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIYW5kbGVycyA9IHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fdHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICAoX2EgPSB0aGlzLm9uY2xvc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpO1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBNY3BFcnJvcihFcnJvckNvZGUuQ29ubmVjdGlvbkNsb3NlZCwgXCJDb25uZWN0aW9uIGNsb3NlZFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHJlc3BvbnNlSGFuZGxlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZXIoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9vbmVycm9yKGVycm9yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5vbmVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgfVxuICAgIF9vbm5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKF9hID0gdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KG5vdGlmaWNhdGlvbi5tZXRob2QpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmZhbGxiYWNrTm90aWZpY2F0aW9uSGFuZGxlcjtcbiAgICAgICAgLy8gSWdub3JlIG5vdGlmaWNhdGlvbnMgbm90IGJlaW5nIHN1YnNjcmliZWQgdG8uXG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdGFydGluZyB3aXRoIFByb21pc2UucmVzb2x2ZSgpIHB1dHMgYW55IHN5bmNocm9ub3VzIGVycm9ycyBpbnRvIHRoZSBtb25hZCBhcyB3ZWxsLlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gaGFuZGxlcihub3RpZmljYXRpb24pKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gdGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke2Vycm9yfWApKSk7XG4gICAgfVxuICAgIF9vbnJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKF9hID0gdGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldChyZXF1ZXN0Lm1ldGhvZCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcjtcbiAgICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKF9iID0gdGhpcy5fdHJhbnNwb3J0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VuZCh7XG4gICAgICAgICAgICAgICAganNvbnJwYzogXCIyLjBcIixcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBFcnJvckNvZGUuTWV0aG9kTm90Rm91bmQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWV0aG9kIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBhbiBlcnJvciByZXNwb25zZTogJHtlcnJvcn1gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldChyZXF1ZXN0LmlkLCBhYm9ydENvbnRyb2xsZXIpO1xuICAgICAgICAvLyBTdGFydGluZyB3aXRoIFByb21pc2UucmVzb2x2ZSgpIHB1dHMgYW55IHN5bmNocm9ub3VzIGVycm9ycyBpbnRvIHRoZSBtb25hZCBhcyB3ZWxsLlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gaGFuZGxlcihyZXF1ZXN0LCB7IHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCB9KSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fdHJhbnNwb3J0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VuZCh7XG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIGpzb25ycGM6IFwiMi4wXCIsXG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl90cmFuc3BvcnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZW5kKHtcbiAgICAgICAgICAgICAgICBqc29ucnBjOiBcIjIuMFwiLFxuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IE51bWJlci5pc1NhZmVJbnRlZ2VyKGVycm9yW1wiY29kZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JbXCJjb2RlXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAoX2IgPSBlcnJvci5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIkludGVybmFsIGVycm9yXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gdGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2Vycm9yfWApKSlcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUocmVxdWVzdC5pZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfb25wcm9ncmVzcyhub3RpZmljYXRpb24pIHtcbiAgICAgICAgY29uc3QgeyBwcm9ncmVzc1Rva2VuLCAuLi5wYXJhbXMgfSA9IG5vdGlmaWNhdGlvbi5wYXJhbXM7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChOdW1iZXIocHJvZ3Jlc3NUb2tlbikpO1xuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSBwcm9ncmVzcyBub3RpZmljYXRpb24gZm9yIGFuIHVua25vd24gdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkobm90aWZpY2F0aW9uKX1gKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcihwYXJhbXMpO1xuICAgIH1cbiAgICBfb25yZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSByZXNwb25zZS5pZDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KE51bWJlcihtZXNzYWdlSWQpKTtcbiAgICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKE51bWJlcihtZXNzYWdlSWQpKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUoTnVtYmVyKG1lc3NhZ2VJZCkpO1xuICAgICAgICBpZiAoXCJyZXN1bHRcIiBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgaGFuZGxlcihyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBNY3BFcnJvcihyZXNwb25zZS5lcnJvci5jb2RlLCByZXNwb25zZS5lcnJvci5tZXNzYWdlLCByZXNwb25zZS5lcnJvci5kYXRhKTtcbiAgICAgICAgICAgIGhhbmRsZXIoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB0cmFuc3BvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBhd2FpdCAoKF9hID0gdGhpcy5fdHJhbnNwb3J0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xvc2UoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgcmVxdWVzdCBhbmQgd2FpdCBmb3IgYSByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIERvIG5vdCB1c2UgdGhpcyBtZXRob2QgdG8gZW1pdCBub3RpZmljYXRpb25zISBVc2Ugbm90aWZpY2F0aW9uKCkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICByZXF1ZXN0KHJlcXVlc3QsIHJlc3VsdFNjaGVtYSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl90cmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiTm90IGNvbm5lY3RlZFwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgoX2EgPSB0aGlzLl9vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QocmVxdWVzdC5tZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25hbCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkKys7XG4gICAgICAgICAgICBjb25zdCBqc29ucnBjUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGpzb25ycGM6IFwiMi4wXCIsXG4gICAgICAgICAgICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLnNldChtZXNzYWdlSWQsIG9wdGlvbnMub25wcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAganNvbnJwY1JlcXVlc3QucGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IHsgcHJvZ3Jlc3NUb2tlbjogbWVzc2FnZUlkIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zZUhhbmRsZXJzLnNldChtZXNzYWdlSWQsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbmFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRTY2hlbWEucGFyc2UocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbCA9IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUobWVzc2FnZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShtZXNzYWdlSWQpO1xuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMuX3RyYW5zcG9ydCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNlbmQoe1xuICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiBcIjIuMFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwibm90aWZpY2F0aW9ucy9jYW5jZWxsZWRcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogU3RyaW5nKHJlYXNvbiksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgY2FuY2VsbGF0aW9uOiAke2Vycm9yfWApKSk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKF9jID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25hbCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FuY2VsKChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWFzb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gKF9kID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IERFRkFVTFRfUkVRVUVTVF9USU1FT1VUX01TRUM7XG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNhbmNlbChuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLlJlcXVlc3RUaW1lb3V0LCBcIlJlcXVlc3QgdGltZWQgb3V0XCIsIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgICAgfSkpLCB0aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGpzb25ycGNSZXF1ZXN0KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXRzIGEgbm90aWZpY2F0aW9uLCB3aGljaCBpcyBhIG9uZS13YXkgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGV4cGVjdCBhIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIG5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmFuc3BvcnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBjb25uZWN0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KG5vdGlmaWNhdGlvbi5tZXRob2QpO1xuICAgICAgICBjb25zdCBqc29ucnBjTm90aWZpY2F0aW9uID0ge1xuICAgICAgICAgICAgLi4ubm90aWZpY2F0aW9uLFxuICAgICAgICAgICAganNvbnJwYzogXCIyLjBcIixcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoanNvbnJwY05vdGlmaWNhdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgdG8gaW52b2tlIHdoZW4gdGhpcyBwcm90b2NvbCBvYmplY3QgcmVjZWl2ZXMgYSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmVwbGFjZSBhbnkgcHJldmlvdXMgcmVxdWVzdCBoYW5kbGVyIGZvciB0aGUgc2FtZSBtZXRob2QuXG4gICAgICovXG4gICAgc2V0UmVxdWVzdEhhbmRsZXIocmVxdWVzdFNjaGVtYSwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCBtZXRob2QgPSByZXF1ZXN0U2NoZW1hLnNoYXBlLm1ldGhvZC52YWx1ZTtcbiAgICAgICAgdGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobWV0aG9kKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChtZXRob2QsIChyZXF1ZXN0LCBleHRyYSkgPT4gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocmVxdWVzdFNjaGVtYS5wYXJzZShyZXF1ZXN0KSwgZXh0cmEpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHJlcXVlc3QgaGFuZGxlciBmb3IgdGhlIGdpdmVuIG1ldGhvZC5cbiAgICAgKi9cbiAgICByZW1vdmVSZXF1ZXN0SGFuZGxlcihtZXRob2QpIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJzLmRlbGV0ZShtZXRob2QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NlcnRzIHRoYXQgYSByZXF1ZXN0IGhhbmRsZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gc2V0IGZvciB0aGUgZ2l2ZW4gbWV0aG9kLCBpbiBwcmVwYXJhdGlvbiBmb3IgYSBuZXcgb25lIGJlaW5nIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLlxuICAgICAqL1xuICAgIGFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKG1ldGhvZCkge1xuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyhtZXRob2QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke21ldGhvZH0gYWxyZWFkeSBleGlzdHMsIHdoaWNoIHdvdWxkIGJlIG92ZXJyaWRkZW5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBoYW5kbGVyIHRvIGludm9rZSB3aGVuIHRoaXMgcHJvdG9jb2wgb2JqZWN0IHJlY2VpdmVzIGEgbm90aWZpY2F0aW9uIHdpdGggdGhlIGdpdmVuIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmVwbGFjZSBhbnkgcHJldmlvdXMgbm90aWZpY2F0aW9uIGhhbmRsZXIgZm9yIHRoZSBzYW1lIG1ldGhvZC5cbiAgICAgKi9cbiAgICBzZXROb3RpZmljYXRpb25IYW5kbGVyKG5vdGlmaWNhdGlvblNjaGVtYSwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5zZXQobm90aWZpY2F0aW9uU2NoZW1hLnNoYXBlLm1ldGhvZC52YWx1ZSwgKG5vdGlmaWNhdGlvbikgPT4gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIobm90aWZpY2F0aW9uU2NoZW1hLnBhcnNlKG5vdGlmaWNhdGlvbikpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIG5vdGlmaWNhdGlvbiBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gbWV0aG9kLlxuICAgICAqL1xuICAgIHJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIobWV0aG9kKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmRlbGV0ZShtZXRob2QpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNhcGFiaWxpdGllcyhiYXNlLCBhZGRpdGlvbmFsKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWwpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBhY2Nba2V5XSA/IHsgLi4uYWNjW2tleV0sIC4uLnZhbHVlIH0gOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7IC4uLmJhc2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm90b2NvbC5qcy5tYXAiLAogICAgImltcG9ydCB7IG1lcmdlQ2FwYWJpbGl0aWVzLCBQcm90b2NvbCwgfSBmcm9tIFwiLi4vc2hhcmVkL3Byb3RvY29sLmpzXCI7XG5pbXBvcnQgeyBDYWxsVG9vbFJlc3VsdFNjaGVtYSwgQ29tcGxldGVSZXN1bHRTY2hlbWEsIEVtcHR5UmVzdWx0U2NoZW1hLCBHZXRQcm9tcHRSZXN1bHRTY2hlbWEsIEluaXRpYWxpemVSZXN1bHRTY2hlbWEsIExBVEVTVF9QUk9UT0NPTF9WRVJTSU9OLCBMaXN0UHJvbXB0c1Jlc3VsdFNjaGVtYSwgTGlzdFJlc291cmNlc1Jlc3VsdFNjaGVtYSwgTGlzdFJlc291cmNlVGVtcGxhdGVzUmVzdWx0U2NoZW1hLCBMaXN0VG9vbHNSZXN1bHRTY2hlbWEsIFJlYWRSZXNvdXJjZVJlc3VsdFNjaGVtYSwgU1VQUE9SVEVEX1BST1RPQ09MX1ZFUlNJT05TLCB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuLyoqXG4gKiBBbiBNQ1AgY2xpZW50IG9uIHRvcCBvZiBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKlxuICogVGhlIGNsaWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVnaW4gdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgd2l0aCB0aGUgc2VydmVyIHdoZW4gY29ubmVjdCgpIGlzIGNhbGxlZC5cbiAqXG4gKiBUbyB1c2Ugd2l0aCBjdXN0b20gdHlwZXMsIGV4dGVuZCB0aGUgYmFzZSBSZXF1ZXN0L05vdGlmaWNhdGlvbi9SZXN1bHQgdHlwZXMgYW5kIHBhc3MgdGhlbSBhcyB0eXBlIHBhcmFtZXRlcnM6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3VzdG9tIHNjaGVtYXNcbiAqIGNvbnN0IEN1c3RvbVJlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7Li4ufSlcbiAqIGNvbnN0IEN1c3RvbU5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoey4uLn0pXG4gKiBjb25zdCBDdXN0b21SZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHsuLi59KVxuICpcbiAqIC8vIFR5cGUgYWxpYXNlc1xuICogdHlwZSBDdXN0b21SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgQ3VzdG9tUmVxdWVzdFNjaGVtYT5cbiAqIHR5cGUgQ3VzdG9tTm90aWZpY2F0aW9uID0gei5pbmZlcjx0eXBlb2YgQ3VzdG9tTm90aWZpY2F0aW9uU2NoZW1hPlxuICogdHlwZSBDdXN0b21SZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDdXN0b21SZXN1bHRTY2hlbWE+XG4gKlxuICogLy8gQ3JlYXRlIHR5cGVkIGNsaWVudFxuICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudDxDdXN0b21SZXF1ZXN0LCBDdXN0b21Ob3RpZmljYXRpb24sIEN1c3RvbVJlc3VsdD4oe1xuICogICBuYW1lOiBcIkN1c3RvbUNsaWVudFwiLFxuICogICB2ZXJzaW9uOiBcIjEuMC4wXCJcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENsaWVudCBleHRlbmRzIFByb3RvY29sIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGlzIGNsaWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKF9jbGllbnRJbmZvLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX2NsaWVudEluZm8gPSBfY2xpZW50SW5mbztcbiAgICAgICAgdGhpcy5fY2FwYWJpbGl0aWVzID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcGFiaWxpdGllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBuZXcgY2FwYWJpbGl0aWVzLiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY29ubmVjdGluZyB0byBhIHRyYW5zcG9ydC5cbiAgICAgKlxuICAgICAqIFRoZSBuZXcgY2FwYWJpbGl0aWVzIHdpbGwgYmUgbWVyZ2VkIHdpdGggYW55IGV4aXN0aW5nIGNhcGFiaWxpdGllcyBwcmV2aW91c2x5IGdpdmVuIChlLmcuLCBhdCBpbml0aWFsaXphdGlvbikuXG4gICAgICovXG4gICAgcmVnaXN0ZXJDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcG9ydCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciBjb25uZWN0aW5nIHRvIHRyYW5zcG9ydFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYXBhYmlsaXRpZXMgPSBtZXJnZUNhcGFiaWxpdGllcyh0aGlzLl9jYXBhYmlsaXRpZXMsIGNhcGFiaWxpdGllcyk7XG4gICAgfVxuICAgIGFzc2VydENhcGFiaWxpdHkoY2FwYWJpbGl0eSwgbWV0aG9kKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5fc2VydmVyQ2FwYWJpbGl0aWVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbY2FwYWJpbGl0eV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0ICR7Y2FwYWJpbGl0eX0gKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgY29ubmVjdCh0cmFuc3BvcnQpIHtcbiAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiaW5pdGlhbGl6ZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbFZlcnNpb246IExBVEVTVF9QUk9UT0NPTF9WRVJTSU9OLFxuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuX2NhcGFiaWxpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50SW5mbzogdGhpcy5fY2xpZW50SW5mbyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgSW5pdGlhbGl6ZVJlc3VsdFNjaGVtYSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFTVVBQT1JURURfUFJPVE9DT0xfVkVSU0lPTlMuaW5jbHVkZXMocmVzdWx0LnByb3RvY29sVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlcidzIHByb3RvY29sIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZDogJHtyZXN1bHQucHJvdG9jb2xWZXJzaW9ufWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc2VydmVyQ2FwYWJpbGl0aWVzID0gcmVzdWx0LmNhcGFiaWxpdGllcztcbiAgICAgICAgICAgIHRoaXMuX3NlcnZlclZlcnNpb24gPSByZXN1bHQuc2VydmVySW5mbztcbiAgICAgICAgICAgIHRoaXMuX2luc3RydWN0aW9ucyA9IHJlc3VsdC5pbnN0cnVjdGlvbnM7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWRcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCBpZiBpbml0aWFsaXphdGlvbiBmYWlscy5cbiAgICAgICAgICAgIHZvaWQgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWZ0ZXIgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZCwgdGhpcyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBzZXJ2ZXIncyByZXBvcnRlZCBjYXBhYmlsaXRpZXMuXG4gICAgICovXG4gICAgZ2V0U2VydmVyQ2FwYWJpbGl0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VydmVyQ2FwYWJpbGl0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZnRlciBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLCB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlcidzIG5hbWUgYW5kIHZlcnNpb24uXG4gICAgICovXG4gICAgZ2V0U2VydmVyVmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlclZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyBjb21wbGV0ZWQsIHRoaXMgbWF5IGJlIHBvcHVsYXRlZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIncyBpbnN0cnVjdGlvbnMuXG4gICAgICovXG4gICAgZ2V0SW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdHJ1Y3Rpb25zO1xuICAgIH1cbiAgICBhc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKG1ldGhvZCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgY2FzZSBcImxvZ2dpbmcvc2V0TGV2ZWxcIjpcbiAgICAgICAgICAgICAgICBpZiAoISgoX2EgPSB0aGlzLl9zZXJ2ZXJDYXBhYmlsaXRpZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sb2dnaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGxvZ2dpbmcgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInByb21wdHMvZ2V0XCI6XG4gICAgICAgICAgICBjYXNlIFwicHJvbXB0cy9saXN0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCEoKF9iID0gdGhpcy5fc2VydmVyQ2FwYWJpbGl0aWVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHJvbXB0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBwcm9tcHRzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyZXNvdXJjZXMvbGlzdFwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdFwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc291cmNlcy9yZWFkXCI6XG4gICAgICAgICAgICBjYXNlIFwicmVzb3VyY2VzL3N1YnNjcmliZVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc291cmNlcy91bnN1YnNjcmliZVwiOlxuICAgICAgICAgICAgICAgIGlmICghKChfYyA9IHRoaXMuX3NlcnZlckNhcGFiaWxpdGllcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnJlc291cmNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCByZXNvdXJjZXMgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmVzb3VyY2VzL3N1YnNjcmliZVwiICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9zZXJ2ZXJDYXBhYmlsaXRpZXMucmVzb3VyY2VzLnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHJlc291cmNlIHN1YnNjcmlwdGlvbnMgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRvb2xzL2NhbGxcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0b29scy9saXN0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCEoKF9kID0gdGhpcy5fc2VydmVyQ2FwYWJpbGl0aWVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudG9vbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdG9vbHMgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbXBsZXRpb24vY29tcGxldGVcIjpcbiAgICAgICAgICAgICAgICBpZiAoISgoX2UgPSB0aGlzLl9zZXJ2ZXJDYXBhYmlsaXRpZXMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5wcm9tcHRzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHByb21wdHMgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImluaXRpYWxpemVcIjpcbiAgICAgICAgICAgICAgICAvLyBObyBzcGVjaWZpYyBjYXBhYmlsaXR5IHJlcXVpcmVkIGZvciBpbml0aWFsaXplXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicGluZ1wiOlxuICAgICAgICAgICAgICAgIC8vIE5vIHNwZWNpZmljIGNhcGFiaWxpdHkgcmVxdWlyZWQgZm9yIHBpbmdcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KG1ldGhvZCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlIFwibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWRcIjpcbiAgICAgICAgICAgICAgICBpZiAoISgoX2EgPSB0aGlzLl9jYXBhYmlsaXRpZXMucm9vdHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5saXN0Q2hhbmdlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCByb290cyBsaXN0IGNoYW5nZWQgbm90aWZpY2F0aW9ucyAocmVxdWlyZWQgZm9yICR7bWV0aG9kfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZFwiOlxuICAgICAgICAgICAgICAgIC8vIE5vIHNwZWNpZmljIGNhcGFiaWxpdHkgcmVxdWlyZWQgZm9yIGluaXRpYWxpemVkXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibm90aWZpY2F0aW9ucy9jYW5jZWxsZWRcIjpcbiAgICAgICAgICAgICAgICAvLyBDYW5jZWxsYXRpb24gbm90aWZpY2F0aW9ucyBhcmUgYWx3YXlzIGFsbG93ZWRcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub3RpZmljYXRpb25zL3Byb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgLy8gUHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyBhcmUgYWx3YXlzIGFsbG93ZWRcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobWV0aG9kKSB7XG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2FtcGxpbmcvY3JlYXRlTWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FwYWJpbGl0aWVzLnNhbXBsaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7bWV0aG9kfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicm9vdHMvbGlzdFwiOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FwYWJpbGl0aWVzLnJvb3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgcm9vdHMgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7bWV0aG9kfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicGluZ1wiOlxuICAgICAgICAgICAgICAgIC8vIE5vIHNwZWNpZmljIGNhcGFiaWxpdHkgcmVxdWlyZWQgZm9yIHBpbmdcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBwaW5nKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogXCJwaW5nXCIgfSwgRW1wdHlSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBjb21wbGV0ZShwYXJhbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogXCJjb21wbGV0aW9uL2NvbXBsZXRlXCIsIHBhcmFtcyB9LCBDb21wbGV0ZVJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIHNldExvZ2dpbmdMZXZlbChsZXZlbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiBcImxvZ2dpbmcvc2V0TGV2ZWxcIiwgcGFyYW1zOiB7IGxldmVsIH0gfSwgRW1wdHlSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBnZXRQcm9tcHQocGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6IFwicHJvbXB0cy9nZXRcIiwgcGFyYW1zIH0sIEdldFByb21wdFJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RQcm9tcHRzKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiBcInByb21wdHMvbGlzdFwiLCBwYXJhbXMgfSwgTGlzdFByb21wdHNSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0UmVzb3VyY2VzKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiBcInJlc291cmNlcy9saXN0XCIsIHBhcmFtcyB9LCBMaXN0UmVzb3VyY2VzUmVzdWx0U2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFJlc291cmNlVGVtcGxhdGVzKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiBcInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdFwiLCBwYXJhbXMgfSwgTGlzdFJlc291cmNlVGVtcGxhdGVzUmVzdWx0U2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZFJlc291cmNlKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiBcInJlc291cmNlcy9yZWFkXCIsIHBhcmFtcyB9LCBSZWFkUmVzb3VyY2VSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBzdWJzY3JpYmVSZXNvdXJjZShwYXJhbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogXCJyZXNvdXJjZXMvc3Vic2NyaWJlXCIsIHBhcmFtcyB9LCBFbXB0eVJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIHVuc3Vic2NyaWJlUmVzb3VyY2UocGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6IFwicmVzb3VyY2VzL3Vuc3Vic2NyaWJlXCIsIHBhcmFtcyB9LCBFbXB0eVJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIGNhbGxUb29sKHBhcmFtcywgcmVzdWx0U2NoZW1hID0gQ2FsbFRvb2xSZXN1bHRTY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogXCJ0b29scy9jYWxsXCIsIHBhcmFtcyB9LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0VG9vbHMocGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6IFwidG9vbHMvbGlzdFwiLCBwYXJhbXMgfSwgTGlzdFRvb2xzUmVzdWx0U2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZFJvb3RzTGlzdENoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7IG1ldGhvZDogXCJub3RpZmljYXRpb25zL3Jvb3RzL2xpc3RfY2hhbmdlZFwiIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgeyBSZWFkQnVmZmVyLCBzZXJpYWxpemVNZXNzYWdlIH0gZnJvbSBcIi4uL3NoYXJlZC9zdGRpby5qc1wiO1xuLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gaW5oZXJpdCBieSBkZWZhdWx0LCBpZiBhbiBlbnZpcm9ubWVudCBpcyBub3QgZXhwbGljaXRseSBnaXZlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5IRVJJVEVEX0VOVl9WQVJTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiXG4gICAgPyBbXG4gICAgICAgIFwiQVBQREFUQVwiLFxuICAgICAgICBcIkhPTUVEUklWRVwiLFxuICAgICAgICBcIkhPTUVQQVRIXCIsXG4gICAgICAgIFwiTE9DQUxBUFBEQVRBXCIsXG4gICAgICAgIFwiUEFUSFwiLFxuICAgICAgICBcIlBST0NFU1NPUl9BUkNISVRFQ1RVUkVcIixcbiAgICAgICAgXCJTWVNURU1EUklWRVwiLFxuICAgICAgICBcIlNZU1RFTVJPT1RcIixcbiAgICAgICAgXCJURU1QXCIsXG4gICAgICAgIFwiVVNFUk5BTUVcIixcbiAgICAgICAgXCJVU0VSUFJPRklMRVwiLFxuICAgIF1cbiAgICA6IC8qIGxpc3QgaW5zcGlyZWQgYnkgdGhlIGRlZmF1bHQgZW52IGluaGVyaXRhbmNlIG9mIHN1ZG8gKi9cbiAgICAgICAgW1wiSE9NRVwiLCBcIkxPR05BTUVcIiwgXCJQQVRIXCIsIFwiU0hFTExcIiwgXCJURVJNXCIsIFwiVVNFUlwiXTtcbi8qKlxuICogUmV0dXJucyBhIGRlZmF1bHQgZW52aXJvbm1lbnQgb2JqZWN0IGluY2x1ZGluZyBvbmx5IGVudmlyb25tZW50IHZhcmlhYmxlcyBkZWVtZWQgc2FmZSB0byBpbmhlcml0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEVudmlyb25tZW50KCkge1xuICAgIGNvbnN0IGVudiA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIERFRkFVTFRfSU5IRVJJVEVEX0VOVl9WQVJTKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiKClcIikpIHtcbiAgICAgICAgICAgIC8vIFNraXAgZnVuY3Rpb25zLCB3aGljaCBhcmUgYSBzZWN1cml0eSByaXNrLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZW52W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGVudjtcbn1cbi8qKlxuICogQ2xpZW50IHRyYW5zcG9ydCBmb3Igc3RkaW86IHRoaXMgd2lsbCBjb25uZWN0IHRvIGEgc2VydmVyIGJ5IHNwYXduaW5nIGEgcHJvY2VzcyBhbmQgY29tbXVuaWNhdGluZyB3aXRoIGl0IG92ZXIgc3RkaW4vc3Rkb3V0LlxuICpcbiAqIFRoaXMgdHJhbnNwb3J0IGlzIG9ubHkgYXZhaWxhYmxlIGluIE5vZGUuanMgZW52aXJvbm1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU3RkaW9DbGllbnRUcmFuc3BvcnQge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZlcikge1xuICAgICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIHRoaXMuX3JlYWRCdWZmZXIgPSBuZXcgUmVhZEJ1ZmZlcigpO1xuICAgICAgICB0aGlzLl9zZXJ2ZXJQYXJhbXMgPSBzZXJ2ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyB0aGUgc2VydmVyIHByb2Nlc3MgYW5kIHByZXBhcmVzIHRvIGNvbW11bmljYXRlIHdpdGggaXQuXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGRpb0NsaWVudFRyYW5zcG9ydCBhbHJlYWR5IHN0YXJ0ZWQhIElmIHVzaW5nIENsaWVudCBjbGFzcywgbm90ZSB0aGF0IGNvbm5lY3QoKSBjYWxscyBzdGFydCgpIGF1dG9tYXRpY2FsbHkuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSBzcGF3bih0aGlzLl9zZXJ2ZXJQYXJhbXMuY29tbWFuZCwgKF9hID0gdGhpcy5fc2VydmVyUGFyYW1zLmFyZ3MpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLCB7XG4gICAgICAgICAgICAgICAgZW52OiAoX2IgPSB0aGlzLl9zZXJ2ZXJQYXJhbXMuZW52KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBnZXREZWZhdWx0RW52aXJvbm1lbnQoKSxcbiAgICAgICAgICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgKF9jID0gdGhpcy5fc2VydmVyUGFyYW1zLnN0ZGVycikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJpbmhlcml0XCJdLFxuICAgICAgICAgICAgICAgIHNoZWxsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IHRoaXMuX2Fib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiAmJiBpc0VsZWN0cm9uKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3Mub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCB3aGVuIGNsb3NlKCkgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLm9uY2xvc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgKF9iID0gdGhpcy5vbmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3Mub24oXCJzcGF3blwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzLm9uKFwiY2xvc2VcIiwgKF9jb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy5vbmNsb3NlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgKF9kID0gdGhpcy5fcHJvY2Vzcy5zdGRpbikgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMub25lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAoX2UgPSB0aGlzLl9wcm9jZXNzLnN0ZG91dCkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQnVmZmVyLmFwcGVuZChjaHVuayk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVhZEJ1ZmZlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAoX2YgPSB0aGlzLl9wcm9jZXNzLnN0ZG91dCkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMub25lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc3RkZXJyIHN0cmVhbSBvZiB0aGUgY2hpbGQgcHJvY2VzcywgaWYgYFN0ZGlvU2VydmVyUGFyYW1ldGVycy5zdGRlcnJgIHdhcyBzZXQgdG8gXCJwaXBlXCIgb3IgXCJvdmVybGFwcGVkXCIuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyIHRoZSBwcm9jZXNzIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgZ2V0IHN0ZGVycigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuX3Byb2Nlc3MpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdGRlcnIpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgfVxuICAgIHByb2Nlc3NSZWFkQnVmZmVyKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fcmVhZEJ1ZmZlci5yZWFkTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLm9ubWVzc2FnZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoX2IgPSB0aGlzLm9uZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3JlYWRCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG4gICAgc2VuZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5fcHJvY2VzcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0ZGluKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBjb25uZWN0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBqc29uID0gc2VyaWFsaXplTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzLnN0ZGluLndyaXRlKGpzb24pKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzcy5zdGRpbi5vbmNlKFwiZHJhaW5cIiwgcmVzb2x2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzRWxlY3Ryb24oKSB7XG4gICAgcmV0dXJuIFwidHlwZVwiIGluIHByb2Nlc3M7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGRpby5qcy5tYXAiLAogICAgImltcG9ydCB7IEpTT05SUENNZXNzYWdlU2NoZW1hIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG4vKipcbiAqIEJ1ZmZlcnMgYSBjb250aW51b3VzIHN0ZGlvIHN0cmVhbSBpbnRvIGRpc2NyZXRlIEpTT04tUlBDIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgUmVhZEJ1ZmZlciB7XG4gICAgYXBwZW5kKGNodW5rKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMuX2J1ZmZlciA/IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZmZlciwgY2h1bmtdKSA6IGNodW5rO1xuICAgIH1cbiAgICByZWFkTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9idWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fYnVmZmVyLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLl9idWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIsIDAsIGluZGV4KTtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gdGhpcy5fYnVmZmVyLnN1YmFycmF5KGluZGV4ICsgMSk7XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZU1lc3NhZ2UobGluZSk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9idWZmZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZShsaW5lKSB7XG4gICAgcmV0dXJuIEpTT05SUENNZXNzYWdlU2NoZW1hLnBhcnNlKEpTT04ucGFyc2UobGluZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSArIFwiXFxuXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGRpby5qcy5tYXAiLAogICAgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlLCBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPSBcInN5bWJvbFwiID8ga2V5ICsgXCJcIiA6IGtleSwgdmFsdWUpO1xuY2xhc3MgUGFyc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpLCBfX3B1YmxpY0ZpZWxkKHRoaXMsIFwidHlwZVwiKSwgX19wdWJsaWNGaWVsZCh0aGlzLCBcImZpZWxkXCIpLCBfX3B1YmxpY0ZpZWxkKHRoaXMsIFwidmFsdWVcIiksIF9fcHVibGljRmllbGQodGhpcywgXCJsaW5lXCIpLCB0aGlzLm5hbWUgPSBcIlBhcnNlRXJyb3JcIiwgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlLCB0aGlzLmZpZWxkID0gb3B0aW9ucy5maWVsZCwgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWUsIHRoaXMubGluZSA9IG9wdGlvbnMubGluZTtcbiAgfVxufVxuZnVuY3Rpb24gbm9vcChfYXJnKSB7XG59XG5mdW5jdGlvbiBjcmVhdGVQYXJzZXIoY2FsbGJhY2tzKSB7XG4gIGNvbnN0IHsgb25FdmVudCA9IG5vb3AsIG9uRXJyb3IgPSBub29wLCBvblJldHJ5ID0gbm9vcCwgb25Db21tZW50IH0gPSBjYWxsYmFja3M7XG4gIGxldCBpbmNvbXBsZXRlTGluZSA9IFwiXCIsIGlzRmlyc3RDaHVuayA9ICEwLCBpZCwgZGF0YSA9IFwiXCIsIGV2ZW50VHlwZSA9IFwiXCI7XG4gIGZ1bmN0aW9uIGZlZWQobmV3Q2h1bmspIHtcbiAgICBjb25zdCBjaHVuayA9IGlzRmlyc3RDaHVuayA/IG5ld0NodW5rLnJlcGxhY2UoL15cXHhFRlxceEJCXFx4QkYvLCBcIlwiKSA6IG5ld0NodW5rLCBbY29tcGxldGUsIGluY29tcGxldGVdID0gc3BsaXRMaW5lcyhgJHtpbmNvbXBsZXRlTGluZX0ke2NodW5rfWApO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBjb21wbGV0ZSlcbiAgICAgIHBhcnNlTGluZShsaW5lKTtcbiAgICBpbmNvbXBsZXRlTGluZSA9IGluY29tcGxldGUsIGlzRmlyc3RDaHVuayA9ICExO1xuICB9XG4gIGZ1bmN0aW9uIHBhcnNlTGluZShsaW5lKSB7XG4gICAgaWYgKGxpbmUgPT09IFwiXCIpIHtcbiAgICAgIGRpc3BhdGNoRXZlbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcIjpcIikpIHtcbiAgICAgIG9uQ29tbWVudCAmJiBvbkNvbW1lbnQobGluZS5zbGljZShsaW5lLnN0YXJ0c1dpdGgoXCI6IFwiKSA/IDIgOiAxKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkU2VwYXJhdG9ySW5kZXggPSBsaW5lLmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChmaWVsZFNlcGFyYXRvckluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZmllbGQgPSBsaW5lLnNsaWNlKDAsIGZpZWxkU2VwYXJhdG9ySW5kZXgpLCBvZmZzZXQgPSBsaW5lW2ZpZWxkU2VwYXJhdG9ySW5kZXggKyAxXSA9PT0gXCIgXCIgPyAyIDogMSwgdmFsdWUgPSBsaW5lLnNsaWNlKGZpZWxkU2VwYXJhdG9ySW5kZXggKyBvZmZzZXQpO1xuICAgICAgcHJvY2Vzc0ZpZWxkKGZpZWxkLCB2YWx1ZSwgbGluZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHByb2Nlc3NGaWVsZChsaW5lLCBcIlwiLCBsaW5lKTtcbiAgfVxuICBmdW5jdGlvbiBwcm9jZXNzRmllbGQoZmllbGQsIHZhbHVlLCBsaW5lKSB7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSBcImV2ZW50XCI6XG4gICAgICAgIGV2ZW50VHlwZSA9IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkYXRhXCI6XG4gICAgICAgIGRhdGEgPSBgJHtkYXRhfSR7dmFsdWV9XG5gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpZFwiOlxuICAgICAgICBpZCA9IHZhbHVlLmluY2x1ZGVzKFwiXFwwXCIpID8gdm9pZCAwIDogdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJldHJ5XCI6XG4gICAgICAgIC9eXFxkKyQvLnRlc3QodmFsdWUpID8gb25SZXRyeShwYXJzZUludCh2YWx1ZSwgMTApKSA6IG9uRXJyb3IoXG4gICAgICAgICAgbmV3IFBhcnNlRXJyb3IoYEludmFsaWQgXFxgcmV0cnlcXGAgdmFsdWU6IFwiJHt2YWx1ZX1cImAsIHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZC1yZXRyeVwiLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvbkVycm9yKFxuICAgICAgICAgIG5ldyBQYXJzZUVycm9yKFxuICAgICAgICAgICAgYFVua25vd24gZmllbGQgXCIke2ZpZWxkLmxlbmd0aCA+IDIwID8gYCR7ZmllbGQuc2xpY2UoMCwgMjApfVxcdTIwMjZgIDogZmllbGR9XCJgLFxuICAgICAgICAgICAgeyB0eXBlOiBcInVua25vd24tZmllbGRcIiwgZmllbGQsIHZhbHVlLCBsaW5lIH1cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KCkge1xuICAgIGRhdGEubGVuZ3RoID4gMCAmJiBvbkV2ZW50KHtcbiAgICAgIGlkLFxuICAgICAgZXZlbnQ6IGV2ZW50VHlwZSB8fCB2b2lkIDAsXG4gICAgICAvLyBJZiB0aGUgZGF0YSBidWZmZXIncyBsYXN0IGNoYXJhY3RlciBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgZGF0YSBidWZmZXIuXG4gICAgICBkYXRhOiBkYXRhLmVuZHNXaXRoKGBcbmApID8gZGF0YS5zbGljZSgwLCAtMSkgOiBkYXRhXG4gICAgfSksIGlkID0gdm9pZCAwLCBkYXRhID0gXCJcIiwgZXZlbnRUeXBlID0gXCJcIjtcbiAgfVxuICBmdW5jdGlvbiByZXNldChvcHRpb25zID0ge30pIHtcbiAgICBpbmNvbXBsZXRlTGluZSAmJiBvcHRpb25zLmNvbnN1bWUgJiYgcGFyc2VMaW5lKGluY29tcGxldGVMaW5lKSwgaWQgPSB2b2lkIDAsIGRhdGEgPSBcIlwiLCBldmVudFR5cGUgPSBcIlwiLCBpbmNvbXBsZXRlTGluZSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIHsgZmVlZCwgcmVzZXQgfTtcbn1cbmZ1bmN0aW9uIHNwbGl0TGluZXMoY2h1bmspIHtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgbGV0IGluY29tcGxldGVMaW5lID0gXCJcIjtcbiAgY29uc3QgdG90YWxMZW5ndGggPSBjaHVuay5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxMZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBjaHVua1tpXTtcbiAgICBjaGFyID09PSBcIlxcclwiICYmIGNodW5rW2kgKyAxXSA9PT0gYFxuYCA/IChsaW5lcy5wdXNoKGluY29tcGxldGVMaW5lKSwgaW5jb21wbGV0ZUxpbmUgPSBcIlwiLCBpKyspIDogY2hhciA9PT0gXCJcXHJcIiB8fCBjaGFyID09PSBgXG5gID8gKGxpbmVzLnB1c2goaW5jb21wbGV0ZUxpbmUpLCBpbmNvbXBsZXRlTGluZSA9IFwiXCIpIDogaW5jb21wbGV0ZUxpbmUgKz0gY2hhcjtcbiAgfVxuICByZXR1cm4gW2xpbmVzLCBpbmNvbXBsZXRlTGluZV07XG59XG5leHBvcnQge1xuICBQYXJzZUVycm9yLFxuICBjcmVhdGVQYXJzZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlUGFyc2VyIH0gZnJvbSBcImV2ZW50c291cmNlLXBhcnNlclwiO1xuY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbn1cbmZ1bmN0aW9uIHN5bnRheEVycm9yKG1lc3NhZ2UpIHtcbiAgY29uc3QgRG9tRXhjZXB0aW9uID0gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb247XG4gIHJldHVybiB0eXBlb2YgRG9tRXhjZXB0aW9uID09IFwiZnVuY3Rpb25cIiA/IG5ldyBEb21FeGNlcHRpb24obWVzc2FnZSwgXCJTeW50YXhFcnJvclwiKSA6IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKTtcbn1cbnZhciBfX3R5cGVFcnJvciA9IChtc2cpID0+IHtcbiAgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG59LCBfX2FjY2Vzc0NoZWNrID0gKG9iaiwgbWVtYmVyLCBtc2cpID0+IG1lbWJlci5oYXMob2JqKSB8fCBfX3R5cGVFcnJvcihcIkNhbm5vdCBcIiArIG1zZyksIF9fcHJpdmF0ZUdldCA9IChvYmosIG1lbWJlciwgZ2V0dGVyKSA9PiAoX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgXCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZFwiKSwgZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKSksIF9fcHJpdmF0ZUFkZCA9IChvYmosIG1lbWJlciwgdmFsdWUpID0+IG1lbWJlci5oYXMob2JqKSA/IF9fdHlwZUVycm9yKFwiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZVwiKSA6IG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUpLCBfX3ByaXZhdGVTZXQgPSAob2JqLCBtZW1iZXIsIHZhbHVlLCBzZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCBcIndyaXRlIHRvIHByaXZhdGUgZmllbGRcIiksIG1lbWJlci5zZXQob2JqLCB2YWx1ZSksIHZhbHVlKSwgX19wcml2YXRlTWV0aG9kID0gKG9iaiwgbWVtYmVyLCBtZXRob2QpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCBcImFjY2VzcyBwcml2YXRlIG1ldGhvZFwiKSwgbWV0aG9kKSwgX3JlYWR5U3RhdGUsIF91cmwsIF9yZWRpcmVjdFVybCwgX3dpdGhDcmVkZW50aWFscywgX2ZldGNoLCBfcmVjb25uZWN0SW50ZXJ2YWwsIF9yZWNvbm5lY3RUaW1lciwgX2xhc3RFdmVudElkLCBfY29udHJvbGxlciwgX3BhcnNlciwgX29uRXJyb3IsIF9vbk1lc3NhZ2UsIF9vbk9wZW4sIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMsIGNvbm5lY3RfZm4sIF9vbkZldGNoUmVzcG9uc2UsIF9vbkZldGNoRXJyb3IsIGdldFJlcXVlc3RPcHRpb25zX2ZuLCBfb25FdmVudCwgX29uUmV0cnlDaGFuZ2UsIGZhaWxDb25uZWN0aW9uX2ZuLCBzY2hlZHVsZVJlY29ubmVjdF9mbiwgX3JlY29ubmVjdDtcbmNsYXNzIEV2ZW50U291cmNlIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcih1cmwsIGV2ZW50U291cmNlSW5pdERpY3QpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHN1cGVyKCksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfRXZlbnRTb3VyY2VfaW5zdGFuY2VzKSwgdGhpcy5DT05ORUNUSU5HID0gMCwgdGhpcy5PUEVOID0gMSwgdGhpcy5DTE9TRUQgPSAyLCBfX3ByaXZhdGVBZGQodGhpcywgX3JlYWR5U3RhdGUpLCBfX3ByaXZhdGVBZGQodGhpcywgX3VybCksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcmVkaXJlY3RVcmwpLCBfX3ByaXZhdGVBZGQodGhpcywgX3dpdGhDcmVkZW50aWFscyksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZmV0Y2gpLCBfX3ByaXZhdGVBZGQodGhpcywgX3JlY29ubmVjdEludGVydmFsKSwgX19wcml2YXRlQWRkKHRoaXMsIF9yZWNvbm5lY3RUaW1lciksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbGFzdEV2ZW50SWQsIG51bGwpLCBfX3ByaXZhdGVBZGQodGhpcywgX2NvbnRyb2xsZXIpLCBfX3ByaXZhdGVBZGQodGhpcywgX3BhcnNlciksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb25FcnJvciwgbnVsbCksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb25NZXNzYWdlLCBudWxsKSwgX19wcml2YXRlQWRkKHRoaXMsIF9vbk9wZW4sIG51bGwpLCBfX3ByaXZhdGVBZGQodGhpcywgX29uRmV0Y2hSZXNwb25zZSwgYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICB2YXIgX2EyO1xuICAgICAgX19wcml2YXRlR2V0KHRoaXMsIF9wYXJzZXIpLnJlc2V0KCk7XG4gICAgICBjb25zdCB7IGJvZHksIHJlZGlyZWN0ZWQsIHN0YXR1cywgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICBpZiAoc3RhdHVzID09PSAyMDQpIHtcbiAgICAgICAgX19wcml2YXRlTWV0aG9kKHRoaXMsIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMsIGZhaWxDb25uZWN0aW9uX2ZuKS5jYWxsKHRoaXMsIFwiU2VydmVyIHNlbnQgSFRUUCAyMDQsIG5vdCByZWNvbm5lY3RpbmdcIiwgMjA0KSwgdGhpcy5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVkaXJlY3RlZCA/IF9fcHJpdmF0ZVNldCh0aGlzLCBfcmVkaXJlY3RVcmwsIG5ldyBVUkwocmVzcG9uc2UudXJsKSkgOiBfX3ByaXZhdGVTZXQodGhpcywgX3JlZGlyZWN0VXJsLCB2b2lkIDApLCBzdGF0dXMgIT09IDIwMCkge1xuICAgICAgICBfX3ByaXZhdGVNZXRob2QodGhpcywgX0V2ZW50U291cmNlX2luc3RhbmNlcywgZmFpbENvbm5lY3Rpb25fZm4pLmNhbGwodGhpcywgYE5vbi0yMDAgc3RhdHVzIGNvZGUgKCR7c3RhdHVzfSlgLCBzdGF0dXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIShoZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKSB8fCBcIlwiKS5zdGFydHNXaXRoKFwidGV4dC9ldmVudC1zdHJlYW1cIikpIHtcbiAgICAgICAgX19wcml2YXRlTWV0aG9kKHRoaXMsIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMsIGZhaWxDb25uZWN0aW9uX2ZuKS5jYWxsKHRoaXMsICdJbnZhbGlkIGNvbnRlbnQgdHlwZSwgZXhwZWN0ZWQgXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiJywgc3RhdHVzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF9fcHJpdmF0ZUdldCh0aGlzLCBfcmVhZHlTdGF0ZSkgPT09IHRoaXMuQ0xPU0VEKVxuICAgICAgICByZXR1cm47XG4gICAgICBfX3ByaXZhdGVTZXQodGhpcywgX3JlYWR5U3RhdGUsIHRoaXMuT1BFTik7XG4gICAgICBjb25zdCBvcGVuRXZlbnQgPSBuZXcgRXZlbnQoXCJvcGVuXCIpO1xuICAgICAgaWYgKChfYTIgPSBfX3ByaXZhdGVHZXQodGhpcywgX29uT3BlbikpID09IG51bGwgfHwgX2EyLmNhbGwodGhpcywgb3BlbkV2ZW50KSwgdGhpcy5kaXNwYXRjaEV2ZW50KG9wZW5FdmVudCksIHR5cGVvZiBib2R5ICE9IFwib2JqZWN0XCIgfHwgIWJvZHkgfHwgIShcImdldFJlYWRlclwiIGluIGJvZHkpKSB7XG4gICAgICAgIF9fcHJpdmF0ZU1ldGhvZCh0aGlzLCBfRXZlbnRTb3VyY2VfaW5zdGFuY2VzLCBmYWlsQ29ubmVjdGlvbl9mbikuY2FsbCh0aGlzLCBcIkludmFsaWQgcmVzcG9uc2UgYm9keSwgZXhwZWN0ZWQgYSB3ZWIgUmVhZGFibGVTdHJlYW1cIiwgc3RhdHVzKSwgdGhpcy5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCksIHJlYWRlciA9IGJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICBsZXQgb3BlbiA9ICEwO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICB2YWx1ZSAmJiBfX3ByaXZhdGVHZXQodGhpcywgX3BhcnNlcikuZmVlZChkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06ICFkb25lIH0pKSwgZG9uZSAmJiAob3BlbiA9ICExLCBfX3ByaXZhdGVHZXQodGhpcywgX3BhcnNlcikucmVzZXQoKSwgX19wcml2YXRlTWV0aG9kKHRoaXMsIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMsIHNjaGVkdWxlUmVjb25uZWN0X2ZuKS5jYWxsKHRoaXMpKTtcbiAgICAgIH0gd2hpbGUgKG9wZW4pO1xuICAgIH0pLCBfX3ByaXZhdGVBZGQodGhpcywgX29uRmV0Y2hFcnJvciwgKGVycikgPT4ge1xuICAgICAgX19wcml2YXRlU2V0KHRoaXMsIF9jb250cm9sbGVyLCB2b2lkIDApLCAhKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIiB8fCBlcnIudHlwZSA9PT0gXCJhYm9ydGVkXCIpICYmIF9fcHJpdmF0ZU1ldGhvZCh0aGlzLCBfRXZlbnRTb3VyY2VfaW5zdGFuY2VzLCBzY2hlZHVsZVJlY29ubmVjdF9mbikuY2FsbCh0aGlzKTtcbiAgICB9KSwgX19wcml2YXRlQWRkKHRoaXMsIF9vbkV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIHR5cGVvZiBldmVudC5pZCA9PSBcInN0cmluZ1wiICYmIF9fcHJpdmF0ZVNldCh0aGlzLCBfbGFzdEV2ZW50SWQsIGV2ZW50LmlkKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VFdmVudCA9IG5ldyBNZXNzYWdlRXZlbnQoZXZlbnQuZXZlbnQgfHwgXCJtZXNzYWdlXCIsIHtcbiAgICAgICAgZGF0YTogZXZlbnQuZGF0YSxcbiAgICAgICAgb3JpZ2luOiBfX3ByaXZhdGVHZXQodGhpcywgX3JlZGlyZWN0VXJsKSA/IF9fcHJpdmF0ZUdldCh0aGlzLCBfcmVkaXJlY3RVcmwpLm9yaWdpbiA6IF9fcHJpdmF0ZUdldCh0aGlzLCBfdXJsKS5vcmlnaW4sXG4gICAgICAgIGxhc3RFdmVudElkOiBldmVudC5pZCB8fCBcIlwiXG4gICAgICB9KTtcbiAgICAgIF9fcHJpdmF0ZUdldCh0aGlzLCBfb25NZXNzYWdlKSAmJiAoIWV2ZW50LmV2ZW50IHx8IGV2ZW50LmV2ZW50ID09PSBcIm1lc3NhZ2VcIikgJiYgX19wcml2YXRlR2V0KHRoaXMsIF9vbk1lc3NhZ2UpLmNhbGwodGhpcywgbWVzc2FnZUV2ZW50KSwgdGhpcy5kaXNwYXRjaEV2ZW50KG1lc3NhZ2VFdmVudCk7XG4gICAgfSksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb25SZXRyeUNoYW5nZSwgKHZhbHVlKSA9PiB7XG4gICAgICBfX3ByaXZhdGVTZXQodGhpcywgX3JlY29ubmVjdEludGVydmFsLCB2YWx1ZSk7XG4gICAgfSksIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcmVjb25uZWN0LCAoKSA9PiB7XG4gICAgICBfX3ByaXZhdGVTZXQodGhpcywgX3JlY29ubmVjdFRpbWVyLCB2b2lkIDApLCBfX3ByaXZhdGVHZXQodGhpcywgX3JlYWR5U3RhdGUpID09PSB0aGlzLkNPTk5FQ1RJTkcgJiYgX19wcml2YXRlTWV0aG9kKHRoaXMsIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMsIGNvbm5lY3RfZm4pLmNhbGwodGhpcyk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpXG4gICAgICAgIF9fcHJpdmF0ZVNldCh0aGlzLCBfdXJsLCB1cmwpO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKVxuICAgICAgICBfX3ByaXZhdGVTZXQodGhpcywgX3VybCwgbmV3IFVSTCh1cmwsIGdldEJhc2VVUkwoKSkpO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IHN5bnRheEVycm9yKFwiQW4gaW52YWxpZCBvciBpbGxlZ2FsIHN0cmluZyB3YXMgc3BlY2lmaWVkXCIpO1xuICAgIH1cbiAgICBfX3ByaXZhdGVTZXQodGhpcywgX3BhcnNlciwgY3JlYXRlUGFyc2VyKHtcbiAgICAgIG9uRXZlbnQ6IF9fcHJpdmF0ZUdldCh0aGlzLCBfb25FdmVudCksXG4gICAgICBvblJldHJ5OiBfX3ByaXZhdGVHZXQodGhpcywgX29uUmV0cnlDaGFuZ2UpXG4gICAgfSkpLCBfX3ByaXZhdGVTZXQodGhpcywgX3JlYWR5U3RhdGUsIHRoaXMuQ09OTkVDVElORyksIF9fcHJpdmF0ZVNldCh0aGlzLCBfcmVjb25uZWN0SW50ZXJ2YWwsIDNlMyksIF9fcHJpdmF0ZVNldCh0aGlzLCBfZmV0Y2gsIChfYSA9IGV2ZW50U291cmNlSW5pdERpY3QgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50U291cmNlSW5pdERpY3QuZmV0Y2gpICE9IG51bGwgPyBfYSA6IGdsb2JhbFRoaXMuZmV0Y2gpLCBfX3ByaXZhdGVTZXQodGhpcywgX3dpdGhDcmVkZW50aWFscywgKF9iID0gZXZlbnRTb3VyY2VJbml0RGljdCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnRTb3VyY2VJbml0RGljdC53aXRoQ3JlZGVudGlhbHMpICE9IG51bGwgPyBfYiA6ICExKSwgX19wcml2YXRlTWV0aG9kKHRoaXMsIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMsIGNvbm5lY3RfZm4pLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoaXMgRXZlbnRTb3VyY2Ugb2JqZWN0J3MgY29ubmVjdGlvbi4gSXQgY2FuIGhhdmUgdGhlIHZhbHVlcyBkZXNjcmliZWQgYmVsb3cuXG4gICAqXG4gICAqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXZlbnRTb3VyY2UvcmVhZHlTdGF0ZSlcbiAgICpcbiAgICogTm90ZTogdHlwZWQgYXMgYG51bWJlcmAgaW5zdGVhZCBvZiBgMCB8IDEgfCAyYCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBgRXZlbnRTb3VyY2VgIGludGVyZmFjZSxcbiAgICogZGVmaW5lZCBpbiB0aGUgVHlwZVNjcmlwdCBgZG9tYCBsaWJyYXJ5LlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBnZXQgcmVhZHlTdGF0ZSgpIHtcbiAgICByZXR1cm4gX19wcml2YXRlR2V0KHRoaXMsIF9yZWFkeVN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVVJMIHByb3ZpZGluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0V2ZW50U291cmNlL3VybClcbiAgICpcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZ2V0IHVybCgpIHtcbiAgICByZXR1cm4gX19wcml2YXRlR2V0KHRoaXMsIF91cmwpLmhyZWY7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3JlZGVudGlhbHMgbW9kZSBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyB0byB0aGUgVVJMIHByb3ZpZGluZyB0aGUgZXZlbnQgc3RyZWFtIGlzIHNldCB0byBcImluY2x1ZGVcIiwgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICpcbiAgICogW01ETiBSZWZlcmVuY2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FdmVudFNvdXJjZS93aXRoQ3JlZGVudGlhbHMpXG4gICAqL1xuICBnZXQgd2l0aENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgX3dpdGhDcmVkZW50aWFscyk7XG4gIH1cbiAgLyoqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXZlbnRTb3VyY2UvZXJyb3JfZXZlbnQpICovXG4gIGdldCBvbmVycm9yKCkge1xuICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgX29uRXJyb3IpO1xuICB9XG4gIHNldCBvbmVycm9yKHZhbHVlKSB7XG4gICAgX19wcml2YXRlU2V0KHRoaXMsIF9vbkVycm9yLCB2YWx1ZSk7XG4gIH1cbiAgLyoqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXZlbnRTb3VyY2UvbWVzc2FnZV9ldmVudCkgKi9cbiAgZ2V0IG9ubWVzc2FnZSgpIHtcbiAgICByZXR1cm4gX19wcml2YXRlR2V0KHRoaXMsIF9vbk1lc3NhZ2UpO1xuICB9XG4gIHNldCBvbm1lc3NhZ2UodmFsdWUpIHtcbiAgICBfX3ByaXZhdGVTZXQodGhpcywgX29uTWVzc2FnZSwgdmFsdWUpO1xuICB9XG4gIC8qKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0V2ZW50U291cmNlL29wZW5fZXZlbnQpICovXG4gIGdldCBvbm9wZW4oKSB7XG4gICAgcmV0dXJuIF9fcHJpdmF0ZUdldCh0aGlzLCBfb25PcGVuKTtcbiAgfVxuICBzZXQgb25vcGVuKHZhbHVlKSB7XG4gICAgX19wcml2YXRlU2V0KHRoaXMsIF9vbk9wZW4sIHZhbHVlKTtcbiAgfVxuICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbGlzdGVuID0gbGlzdGVuZXI7XG4gICAgc3VwZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW4sIG9wdGlvbnMpO1xuICB9XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBsaXN0ZW4gPSBsaXN0ZW5lcjtcbiAgICBzdXBlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3Rlbiwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEFib3J0cyBhbnkgaW5zdGFuY2VzIG9mIHRoZSBmZXRjaCBhbGdvcml0aG0gc3RhcnRlZCBmb3IgdGhpcyBFdmVudFNvdXJjZSBvYmplY3QsIGFuZCBzZXRzIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBDTE9TRUQuXG4gICAqXG4gICAqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXZlbnRTb3VyY2UvY2xvc2UpXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIF9fcHJpdmF0ZUdldCh0aGlzLCBfcmVjb25uZWN0VGltZXIpICYmIGNsZWFyVGltZW91dChfX3ByaXZhdGVHZXQodGhpcywgX3JlY29ubmVjdFRpbWVyKSksIF9fcHJpdmF0ZUdldCh0aGlzLCBfcmVhZHlTdGF0ZSkgIT09IHRoaXMuQ0xPU0VEICYmIChfX3ByaXZhdGVHZXQodGhpcywgX2NvbnRyb2xsZXIpICYmIF9fcHJpdmF0ZUdldCh0aGlzLCBfY29udHJvbGxlcikuYWJvcnQoKSwgX19wcml2YXRlU2V0KHRoaXMsIF9yZWFkeVN0YXRlLCB0aGlzLkNMT1NFRCksIF9fcHJpdmF0ZVNldCh0aGlzLCBfY29udHJvbGxlciwgdm9pZCAwKSk7XG4gIH1cbn1cbl9yZWFkeVN0YXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF91cmwgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgX3JlZGlyZWN0VXJsID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF93aXRoQ3JlZGVudGlhbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgX2ZldGNoID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF9yZWNvbm5lY3RJbnRlcnZhbCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpLCBfcmVjb25uZWN0VGltZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgX2xhc3RFdmVudElkID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF9jb250cm9sbGVyID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF9wYXJzZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgX29uRXJyb3IgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgX29uTWVzc2FnZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpLCBfb25PcGVuID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF9FdmVudFNvdXJjZV9pbnN0YW5jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSwgLyoqXG4qIENvbm5lY3QgdG8gdGhlIGdpdmVuIFVSTCBhbmQgc3RhcnQgcmVjZWl2aW5nIGV2ZW50c1xuKlxuKiBAaW50ZXJuYWxcbiovXG5jb25uZWN0X2ZuID0gZnVuY3Rpb24oKSB7XG4gIF9fcHJpdmF0ZVNldCh0aGlzLCBfcmVhZHlTdGF0ZSwgdGhpcy5DT05ORUNUSU5HKSwgX19wcml2YXRlU2V0KHRoaXMsIF9jb250cm9sbGVyLCBuZXcgQWJvcnRDb250cm9sbGVyKCkpLCBfX3ByaXZhdGVHZXQodGhpcywgX2ZldGNoKShfX3ByaXZhdGVHZXQodGhpcywgX3VybCksIF9fcHJpdmF0ZU1ldGhvZCh0aGlzLCBfRXZlbnRTb3VyY2VfaW5zdGFuY2VzLCBnZXRSZXF1ZXN0T3B0aW9uc19mbikuY2FsbCh0aGlzKSkudGhlbihfX3ByaXZhdGVHZXQodGhpcywgX29uRmV0Y2hSZXNwb25zZSkpLmNhdGNoKF9fcHJpdmF0ZUdldCh0aGlzLCBfb25GZXRjaEVycm9yKSk7XG59LCBfb25GZXRjaFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF9vbkZldGNoRXJyb3IgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgLyoqXG4qIEdldCByZXF1ZXN0IG9wdGlvbnMgZm9yIHRoZSBgZmV0Y2goKWAgcmVxdWVzdFxuKlxuKiBAcmV0dXJucyBUaGUgcmVxdWVzdCBvcHRpb25zXG4qIEBpbnRlcm5hbFxuKi9cbmdldFJlcXVlc3RPcHRpb25zX2ZuID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfYTtcbiAgY29uc3QgaW5pdCA9IHtcbiAgICAvLyBbc3BlY10gTGV0IGBjb3JzQXR0cmlidXRlU3RhdGVgIGJlIGBBbm9ueW1vdXNg4oCmXG4gICAgLy8gW3NwZWNdIOKApndpbGwgaGF2ZSB0aGVpciBtb2RlIHNldCB0byBcImNvcnNcIuKAplxuICAgIG1vZGU6IFwiY29yc1wiLFxuICAgIHJlZGlyZWN0OiBcImZvbGxvd1wiLFxuICAgIGhlYWRlcnM6IHsgQWNjZXB0OiBcInRleHQvZXZlbnQtc3RyZWFtXCIsIC4uLl9fcHJpdmF0ZUdldCh0aGlzLCBfbGFzdEV2ZW50SWQpID8geyBcIkxhc3QtRXZlbnQtSURcIjogX19wcml2YXRlR2V0KHRoaXMsIF9sYXN0RXZlbnRJZCkgfSA6IHZvaWQgMCB9LFxuICAgIGNhY2hlOiBcIm5vLXN0b3JlXCIsXG4gICAgc2lnbmFsOiAoX2EgPSBfX3ByaXZhdGVHZXQodGhpcywgX2NvbnRyb2xsZXIpKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc2lnbmFsXG4gIH07XG4gIHJldHVybiBcIndpbmRvd1wiIGluIGdsb2JhbFRoaXMgJiYgKGluaXQuY3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscyA/IFwiaW5jbHVkZVwiIDogXCJzYW1lLW9yaWdpblwiKSwgaW5pdDtcbn0sIF9vbkV2ZW50ID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIF9vblJldHJ5Q2hhbmdlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIC8qKlxuKiBIYW5kbGVzIHRoZSBwcm9jZXNzIHJlZmVycmVkIHRvIGluIHRoZSBFdmVudFNvdXJjZSBzcGVjaWZpY2F0aW9uIGFzIFwiZmFpbGluZyBhIGNvbm5lY3Rpb25cIi5cbipcbiogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIGNhdXNpbmcgdGhlIGNvbm5lY3Rpb24gdG8gZmFpbFxuKiBAaW50ZXJuYWxcbiovXG5mYWlsQ29ubmVjdGlvbl9mbiA9IGZ1bmN0aW9uKGVycm9yLCBjb2RlKSB7XG4gIHZhciBfYTtcbiAgX19wcml2YXRlR2V0KHRoaXMsIF9yZWFkeVN0YXRlKSAhPT0gdGhpcy5DTE9TRUQgJiYgX19wcml2YXRlU2V0KHRoaXMsIF9yZWFkeVN0YXRlLCB0aGlzLkNMT1NFRCk7XG4gIGNvbnN0IGVycm9yRXZlbnQgPSBuZXcgRXJyb3JFdmVudChcImVycm9yXCIpO1xuICBlcnJvckV2ZW50LmNvZGUgPSBjb2RlLCBlcnJvckV2ZW50Lm1lc3NhZ2UgPSBlcnJvciwgKF9hID0gX19wcml2YXRlR2V0KHRoaXMsIF9vbkVycm9yKSkgPT0gbnVsbCB8fCBfYS5jYWxsKHRoaXMsIGVycm9yRXZlbnQpLCB0aGlzLmRpc3BhdGNoRXZlbnQoZXJyb3JFdmVudCk7XG59LCAvKipcbiogU2NoZWR1bGVzIGEgcmVjb25uZWN0aW9uIGF0dGVtcHQgYWdhaW5zdCB0aGUgRXZlbnRTb3VyY2UgZW5kcG9pbnQuXG4qXG4qIEBpbnRlcm5hbFxuKi9cbnNjaGVkdWxlUmVjb25uZWN0X2ZuID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfYTtcbiAgaWYgKF9fcHJpdmF0ZUdldCh0aGlzLCBfcmVhZHlTdGF0ZSkgPT09IHRoaXMuQ0xPU0VEKVxuICAgIHJldHVybjtcbiAgX19wcml2YXRlU2V0KHRoaXMsIF9yZWFkeVN0YXRlLCB0aGlzLkNPTk5FQ1RJTkcpO1xuICBjb25zdCBlcnJvckV2ZW50ID0gbmV3IEVycm9yRXZlbnQoXCJlcnJvclwiKTtcbiAgKF9hID0gX19wcml2YXRlR2V0KHRoaXMsIF9vbkVycm9yKSkgPT0gbnVsbCB8fCBfYS5jYWxsKHRoaXMsIGVycm9yRXZlbnQpLCB0aGlzLmRpc3BhdGNoRXZlbnQoZXJyb3JFdmVudCksIF9fcHJpdmF0ZVNldCh0aGlzLCBfcmVjb25uZWN0VGltZXIsIHNldFRpbWVvdXQoX19wcml2YXRlR2V0KHRoaXMsIF9yZWNvbm5lY3QpLCBfX3ByaXZhdGVHZXQodGhpcywgX3JlY29ubmVjdEludGVydmFsKSkpO1xufSwgX3JlY29ubmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpLCAvKipcbiogUmVhZHlTdGF0ZSByZXByZXNlbnRpbmcgYW4gRXZlbnRTb3VyY2UgY3VycmVudGx5IHRyeWluZyB0byBjb25uZWN0XG4qXG4qIEBwdWJsaWNcbiovXG5FdmVudFNvdXJjZS5DT05ORUNUSU5HID0gMCwgLyoqXG4qIFJlYWR5U3RhdGUgcmVwcmVzZW50aW5nIGFuIEV2ZW50U291cmNlIGNvbm5lY3Rpb24gdGhhdCBpcyBvcGVuIChlZyBjb25uZWN0ZWQpXG4qXG4qIEBwdWJsaWNcbiovXG5FdmVudFNvdXJjZS5PUEVOID0gMSwgLyoqXG4qIFJlYWR5U3RhdGUgcmVwcmVzZW50aW5nIGFuIEV2ZW50U291cmNlIGNvbm5lY3Rpb24gdGhhdCBpcyBjbG9zZWQgKGVnIGRpc2Nvbm5lY3RlZClcbipcbiogQHB1YmxpY1xuKi9cbkV2ZW50U291cmNlLkNMT1NFRCA9IDI7XG5mdW5jdGlvbiBnZXRCYXNlVVJMKCkge1xuICBjb25zdCBkb2MgPSBcImRvY3VtZW50XCIgaW4gZ2xvYmFsVGhpcyA/IGdsb2JhbFRoaXMuZG9jdW1lbnQgOiB2b2lkIDA7XG4gIHJldHVybiBkb2MgJiYgdHlwZW9mIGRvYyA9PSBcIm9iamVjdFwiICYmIFwiYmFzZVVSSVwiIGluIGRvYyAmJiB0eXBlb2YgZG9jLmJhc2VVUkkgPT0gXCJzdHJpbmdcIiA/IGRvYy5iYXNlVVJJIDogdm9pZCAwO1xufVxuZXhwb3J0IHtcbiAgRXJyb3JFdmVudCxcbiAgRXZlbnRTb3VyY2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgRXZlbnRTb3VyY2UgfSBmcm9tIFwiZXZlbnRzb3VyY2VcIjtcbmltcG9ydCB7IEpTT05SUENNZXNzYWdlU2NoZW1hIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgY2xhc3MgU3NlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY29kZSwgbWVzc2FnZSwgZXZlbnQpIHtcbiAgICAgICAgc3VwZXIoYFNTRSBlcnJvcjogJHttZXNzYWdlfWApO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG4gICAgfVxufVxuLyoqXG4gKiBDbGllbnQgdHJhbnNwb3J0IGZvciBTU0U6IHRoaXMgd2lsbCBjb25uZWN0IHRvIGEgc2VydmVyIHVzaW5nIFNlcnZlci1TZW50IEV2ZW50cyBmb3IgcmVjZWl2aW5nXG4gKiBtZXNzYWdlcyBhbmQgbWFrZSBzZXBhcmF0ZSBQT1NUIHJlcXVlc3RzIGZvciBzZW5kaW5nIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgU1NFQ2xpZW50VHJhbnNwb3J0IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xuICAgICAgICB0aGlzLl9ldmVudFNvdXJjZUluaXQgPSBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMuZXZlbnRTb3VyY2VJbml0O1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SW5pdCA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5yZXF1ZXN0SW5pdDtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9ldmVudFNvdXJjZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU1NFQ2xpZW50VHJhbnNwb3J0IGFscmVhZHkgc3RhcnRlZCEgSWYgdXNpbmcgQ2xpZW50IGNsYXNzLCBub3RlIHRoYXQgY29ubmVjdCgpIGNhbGxzIHN0YXJ0KCkgYXV0b21hdGljYWxseS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKHRoaXMuX3VybC5ocmVmLCB0aGlzLl9ldmVudFNvdXJjZUluaXQpO1xuICAgICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRTb3VyY2Uub25lcnJvciA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBTc2VFcnJvcihldmVudC5jb2RlLCBldmVudC5tZXNzYWdlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLm9uZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9ldmVudFNvdXJjZS5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gaXMgb3BlbiwgYnV0IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGVuZHBvaW50IHRvIGJlIHJlY2VpdmVkLlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50U291cmNlLmFkZEV2ZW50TGlzdGVuZXIoXCJlbmRwb2ludFwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kcG9pbnQgPSBuZXcgVVJMKG1lc3NhZ2VFdmVudC5kYXRhLCB0aGlzLl91cmwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZW5kcG9pbnQub3JpZ2luICE9PSB0aGlzLl91cmwub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZHBvaW50IG9yaWdpbiBkb2VzIG5vdCBtYXRjaCBjb25uZWN0aW9uIG9yaWdpbjogJHt0aGlzLl9lbmRwb2ludC5vcmlnaW59YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRoaXMub25lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50U291cmNlLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEpTT05SUENNZXNzYWdlU2NoZW1hLnBhcnNlKEpTT04ucGFyc2UobWVzc2FnZUV2ZW50LmRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRoaXMub25lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMub25tZXNzYWdlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIChfYSA9IHRoaXMuX2Fib3J0Q29udHJvbGxlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0KCk7XG4gICAgICAgIChfYiA9IHRoaXMuX2V2ZW50U291cmNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2xvc2UoKTtcbiAgICAgICAgKF9jID0gdGhpcy5vbmNsb3NlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZChtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBpZiAoIXRoaXMuX2VuZHBvaW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgY29ubmVjdGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKF9hID0gdGhpcy5fcmVxdWVzdEluaXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGluaXQgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fcmVxdWVzdEluaXQsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogKF9iID0gdGhpcy5fYWJvcnRDb250cm9sbGVyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2lnbmFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5fZW5kcG9pbnQsIGluaXQpO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBQT1NUaW5nIHRvIGVuZHBvaW50IChIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSk6ICR7dGV4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIChfYyA9IHRoaXMub25lcnJvcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zc2UuanMubWFwIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZS5qcydcbmltcG9ydCB7IHR5cGUgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgREVTQ1JJUFRJT04sIFBST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IHsgT3V0cHV0TGluZSB9IGZyb20gJy4uL0Jhc2hUb29sL091dHB1dExpbmUuanMnXG5cbi8vIEFsbG93IGFueSBpbnB1dCBvYmplY3Qgc2luY2UgTUNQIHRvb2xzIGRlZmluZSB0aGVpciBvd24gc2NoZW1hc1xuY29uc3QgaW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKVxuXG5leHBvcnQgY29uc3QgTUNQVG9vbCA9IHtcbiAgYXN5bmMgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIGlzUmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIC8vIE92ZXJyaWRkZW4gaW4gbWNwQ2xpZW50LnRzXG4gIG5hbWU6ICdtY3AnLFxuICAvLyBPdmVycmlkZGVuIGluIG1jcENsaWVudC50c1xuICBhc3luYyBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgLy8gT3ZlcnJpZGRlbiBpbiBtY3BDbGllbnQudHNcbiAgYXN5bmMgcHJvbXB0KCkge1xuICAgIHJldHVybiBQUk9NUFRcbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIC8vIE92ZXJyaWRkZW4gaW4gbWNwQ2xpZW50LnRzXG4gIGFzeW5jICpjYWxsKCkge1xuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgZGF0YTogJycsXG4gICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6ICcnLFxuICAgIH1cbiAgfSxcbiAgbmVlZHNQZXJtaXNzaW9ucygpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICByZW5kZXJUb29sVXNlTWVzc2FnZShpbnB1dCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dClcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YClcbiAgICAgIC5qb2luKCcsICcpXG4gIH0sXG4gIC8vIE92ZXJyaWRkZW4gaW4gbWNwQ2xpZW50LnRzXG4gIHVzZXJGYWNpbmdOYW1lOiAoKSA9PiAnbWNwJyxcbiAgcmVuZGVyVG9vbFVzZVJlamVjdGVkTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxuICB9LFxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZShvdXRwdXQsIHsgdmVyYm9zZSB9KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0KSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge291dHB1dC5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIlxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dYPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiZuYnNwOyZuYnNwO+KOvyAmbmJzcDs8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PltJbWFnZV08L1RleHQ+XG4gICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBpdGVtLnRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aFxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPE91dHB1dExpbmVcbiAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgY29udGVudD17aXRlbS50ZXh0fVxuICAgICAgICAgICAgICAgIGxpbmVzPXtsaW5lc31cbiAgICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L0JveD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIW91dHB1dCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiBvdmVyZmxvd1g9XCJoaWRkZW5cIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIj5cbiAgICAgICAgICAgIDxUZXh0PiZuYnNwOyZuYnNwO+KOvyAmbmJzcDs8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT4oTm8gY29udGVudCk8L1RleHQ+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcXG4nKS5sZW5ndGhcbiAgICByZXR1cm4gPE91dHB1dExpbmUgY29udGVudD17b3V0cHV0fSBsaW5lcz17bGluZXN9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH0sXG4gIHJlbmRlclJlc3VsdEZvckFzc2lzdGFudChjb250ZW50KSB7XG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgfSxcbn0gc2F0aXNmaWVzIFRvb2w8dHlwZW9mIGlucHV0U2NoZW1hLCBzdHJpbmc+XG4iLAogICAgIi8vIEFjdHVhbCBwcm9tcHQgYW5kIGRlc2NyaXB0aW9uIGFyZSBvdmVycmlkZGVuIGluIG1jcENsaWVudC50c1xuZXhwb3J0IGNvbnN0IFBST01QVCA9ICcnXG5leHBvcnQgY29uc3QgREVTQ1JJUFRJT04gPSAnJ1xuIiwKICAgICJpbXBvcnQgYnVnIGZyb20gJy4vY29tbWFuZHMvYnVnLmpzJ1xuaW1wb3J0IGNsZWFyIGZyb20gJy4vY29tbWFuZHMvY2xlYXIuanMnXG5pbXBvcnQgY29tcGFjdCBmcm9tICcuL2NvbW1hbmRzL2NvbXBhY3QuanMnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29tbWFuZHMvY29uZmlnLmpzJ1xuaW1wb3J0IGNvc3QgZnJvbSAnLi9jb21tYW5kcy9jb3N0LmpzJ1xuaW1wb3J0IGN0eF92aXogZnJvbSAnLi9jb21tYW5kcy9jdHhfdml6LmpzJ1xuaW1wb3J0IGRvY3RvciBmcm9tICcuL2NvbW1hbmRzL2RvY3Rvci5qcydcbmltcG9ydCBoZWxwIGZyb20gJy4vY29tbWFuZHMvaGVscC5qcydcbmltcG9ydCBpbml0IGZyb20gJy4vY29tbWFuZHMvaW5pdC5qcydcbmltcG9ydCBsaXN0ZW4gZnJvbSAnLi9jb21tYW5kcy9saXN0ZW4uanMnXG5pbXBvcnQgbG9naW4gZnJvbSAnLi9jb21tYW5kcy9sb2dpbi5qcydcbmltcG9ydCBsb2dvdXQgZnJvbSAnLi9jb21tYW5kcy9sb2dvdXQuanMnXG5pbXBvcnQgb25ib2FyZGluZyBmcm9tICcuL2NvbW1hbmRzL29uYm9hcmRpbmcuanMnXG5pbXBvcnQgcHJfY29tbWVudHMgZnJvbSAnLi9jb21tYW5kcy9wcl9jb21tZW50cy5qcydcbmltcG9ydCByZWxlYXNlTm90ZXMgZnJvbSAnLi9jb21tYW5kcy9yZWxlYXNlLW5vdGVzLmpzJ1xuaW1wb3J0IHJldmlldyBmcm9tICcuL2NvbW1hbmRzL3Jldmlldy5qcydcbmltcG9ydCB0ZXJtaW5hbFNldHVwIGZyb20gJy4vY29tbWFuZHMvdGVybWluYWxTZXR1cC5qcydcbmltcG9ydCB7IFRvb2wsIFRvb2xVc2VDb250ZXh0IH0gZnJvbSAnLi9Ub29sLmpzJ1xuaW1wb3J0IHJlc3VtZSBmcm9tICcuL2NvbW1hbmRzL3Jlc3VtZS5qcydcbmltcG9ydCB7IGdldE1DUENvbW1hbmRzIH0gZnJvbSAnLi9zZXJ2aWNlcy9tY3BDbGllbnQuanMnXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSAnLi9xdWVyeS5qcydcbmltcG9ydCB7IGlzQW50aHJvcGljQXV0aEVuYWJsZWQgfSBmcm9tICcuL3V0aWxzL2F1dGguanMnXG5cbnR5cGUgUHJvbXB0Q29tbWFuZCA9IHtcbiAgdHlwZTogJ3Byb21wdCdcbiAgcHJvZ3Jlc3NNZXNzYWdlOiBzdHJpbmdcbiAgYXJnTmFtZXM/OiBzdHJpbmdbXVxuICBnZXRQcm9tcHRGb3JDb21tYW5kKGFyZ3M6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVBhcmFtW10+XG59XG5cbnR5cGUgTG9jYWxDb21tYW5kID0ge1xuICB0eXBlOiAnbG9jYWwnXG4gIGNhbGwoXG4gICAgYXJnczogc3RyaW5nLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY29tbWFuZHM6IENvbW1hbmRbXVxuICAgICAgICB0b29sczogVG9vbFtdXG4gICAgICAgIHNsb3dBbmRDYXBhYmxlTW9kZWw6IHN0cmluZ1xuICAgICAgfVxuICAgICAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgICAgIHNldEZvcmtDb252b1dpdGhNZXNzYWdlc09uVGhlTmV4dFJlbmRlcjogKFxuICAgICAgICBmb3JrQ29udm9XaXRoTWVzc2FnZXM6IE1lc3NhZ2VbXSxcbiAgICAgICkgPT4gdm9pZFxuICAgIH0sXG4gICk6IFByb21pc2U8c3RyaW5nPlxufVxuXG50eXBlIExvY2FsSlNYQ29tbWFuZCA9IHtcbiAgdHlwZTogJ2xvY2FsLWpzeCdcbiAgY2FsbChcbiAgICBvbkRvbmU6IChyZXN1bHQ/OiBzdHJpbmcpID0+IHZvaWQsXG4gICAgY29udGV4dDogVG9vbFVzZUNvbnRleHQgJiB7XG4gICAgICBzZXRGb3JrQ29udm9XaXRoTWVzc2FnZXNPblRoZU5leHRSZW5kZXI6IChcbiAgICAgICAgZm9ya0NvbnZvV2l0aE1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gICAgICApID0+IHZvaWRcbiAgICB9LFxuICApOiBQcm9taXNlPFJlYWN0LlJlYWN0Tm9kZT5cbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IHtcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBpc0VuYWJsZWQ6IGJvb2xlYW5cbiAgaXNIaWRkZW46IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIGFsaWFzZXM/OiBzdHJpbmdbXVxuICB1c2VyRmFjaW5nTmFtZSgpOiBzdHJpbmdcbn0gJiAoUHJvbXB0Q29tbWFuZCB8IExvY2FsQ29tbWFuZCB8IExvY2FsSlNYQ29tbWFuZClcblxuY29uc3QgSU5URVJOQUxfT05MWV9DT01NQU5EUyA9IFtjdHhfdml6LCByZXN1bWUsIGxpc3Rlbl1cblxuLy8gRGVjbGFyZWQgYXMgYSBmdW5jdGlvbiBzbyB0aGF0IHdlIGRvbid0IHJ1biB0aGlzIHVudGlsIGdldENvbW1hbmRzIGlzIGNhbGxlZCxcbi8vIHNpbmNlIHVuZGVybHlpbmcgZnVuY3Rpb25zIHJlYWQgZnJvbSBjb25maWcsIHdoaWNoIGNhbid0IGJlIHJlYWQgYXQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWVcbmNvbnN0IENPTU1BTkRTID0gbWVtb2l6ZSgoKTogQ29tbWFuZFtdID0+IFtcbiAgY2xlYXIsXG4gIGNvbXBhY3QsXG4gIGNvbmZpZyxcbiAgY29zdCxcbiAgZG9jdG9yLFxuICBoZWxwLFxuICBpbml0LFxuICBvbmJvYXJkaW5nLFxuICBwcl9jb21tZW50cyxcbiAgcmVsZWFzZU5vdGVzLFxuICBidWcsXG4gIHJldmlldyxcbiAgdGVybWluYWxTZXR1cCxcbiAgLi4uKGlzQW50aHJvcGljQXV0aEVuYWJsZWQoKSA/IFtsb2dvdXQsIGxvZ2luKCldIDogW10pLFxuICAuLi4ocHJvY2Vzcy5lbnYuVVNFUl9UWVBFID09PSAnYW50JyA/IElOVEVSTkFMX09OTFlfQ09NTUFORFMgOiBbXSksXG5dKVxuXG5leHBvcnQgY29uc3QgZ2V0Q29tbWFuZHMgPSBtZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPENvbW1hbmRbXT4gPT4ge1xuICByZXR1cm4gWy4uLihhd2FpdCBnZXRNQ1BDb21tYW5kcygpKSwgLi4uQ09NTUFORFMoKV0uZmlsdGVyKF8gPT4gXy5pc0VuYWJsZWQpXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQ29tbWFuZChjb21tYW5kTmFtZTogc3RyaW5nLCBjb21tYW5kczogQ29tbWFuZFtdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb21tYW5kcy5zb21lKFxuICAgIF8gPT4gXy51c2VyRmFjaW5nTmFtZSgpID09PSBjb21tYW5kTmFtZSB8fCBfLmFsaWFzZXM/LmluY2x1ZGVzKGNvbW1hbmROYW1lKSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZChjb21tYW5kTmFtZTogc3RyaW5nLCBjb21tYW5kczogQ29tbWFuZFtdKTogQ29tbWFuZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBjb21tYW5kcy5maW5kKFxuICAgIF8gPT4gXy51c2VyRmFjaW5nTmFtZSgpID09PSBjb21tYW5kTmFtZSB8fCBfLmFsaWFzZXM/LmluY2x1ZGVzKGNvbW1hbmROYW1lKSxcbiAgKSBhcyBDb21tYW5kIHwgdW5kZWZpbmVkXG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IFJlZmVyZW5jZUVycm9yKFxuICAgICAgYENvbW1hbmQgJHtjb21tYW5kTmFtZX0gbm90IGZvdW5kLiBBdmFpbGFibGUgY29tbWFuZHM6ICR7Y29tbWFuZHNcbiAgICAgICAgLm1hcChfID0+IHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gXy51c2VyRmFjaW5nTmFtZSgpXG4gICAgICAgICAgcmV0dXJuIF8uYWxpYXNlcyA/IGAke25hbWV9IChhbGlhc2VzOiAke18uYWxpYXNlcy5qb2luKCcsICcpfSlgIDogbmFtZVxuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCAnKX1gLFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb21tYW5kXG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZXh0cmFjdFRhZyB9IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFRleHRCbG9ja1BhcmFtIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2luZGV4Lm1qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgYWRkTWFyZ2luOiBib29sZWFuXG4gIHBhcmFtOiBUZXh0QmxvY2tQYXJhbVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXNlckJhc2hJbnB1dE1lc3NhZ2Uoe1xuICBwYXJhbTogeyB0ZXh0IH0sXG4gIGFkZE1hcmdpbixcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgaW5wdXQgPSBleHRyYWN0VGFnKHRleHQsICdiYXNoLWlucHV0JylcbiAgaWYgKCFpbnB1dCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9e2FkZE1hcmdpbiA/IDEgOiAwfSB3aWR0aD1cIjEwMCVcIj5cbiAgICAgIDxCb3g+XG4gICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLmJhc2hCb3JkZXJ9PiE8L1RleHQ+XG4gICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PiB7aW5wdXR9PC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscy90aGVtZS5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZXJUb29sQ2FuY2VsZWRNZXNzYWdlKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFRleHQ+XG4gICAgICAmbmJzcDsmbmJzcDvijr8gJm5ic3A7XG4gICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5lcnJvcn0+SW50ZXJydXB0ZWQgYnkgdXNlcjwvVGV4dD5cbiAgICA8L1RleHQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgVG9vbFJlc3VsdEJsb2NrUGFyYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuXG5jb25zdCBNQVhfUkVOREVSRURfTElORVMgPSAxMFxuXG50eXBlIFByb3BzID0ge1xuICBwYXJhbTogVG9vbFJlc3VsdEJsb2NrUGFyYW1cbiAgdmVyYm9zZTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXNlclRvb2xFcnJvck1lc3NhZ2Uoe1xuICBwYXJhbSxcbiAgdmVyYm9zZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgZXJyb3IgPVxuICAgIHR5cGVvZiBwYXJhbS5jb250ZW50ID09PSAnc3RyaW5nJyA/IHBhcmFtLmNvbnRlbnQudHJpbSgpIDogJ0Vycm9yJ1xuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAgPFRleHQ+Jm5ic3A7Jm5ic3A74o6/ICZuYnNwOzwvVGV4dD5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5lcnJvcn0+XG4gICAgICAgICAge3ZlcmJvc2VcbiAgICAgICAgICAgID8gZXJyb3JcbiAgICAgICAgICAgIDogZXJyb3Iuc3BsaXQoJ1xcbicpLnNsaWNlKDAsIE1BWF9SRU5ERVJFRF9MSU5FUykuam9pbignXFxuJykgfHwgJyd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgeyF2ZXJib3NlICYmIGVycm9yLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBNQVhfUkVOREVSRURfTElORVMgJiYgKFxuICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgLi4uICgre2Vycm9yLnNwbGl0KCdcXG4nKS5sZW5ndGggLSBNQVhfUkVOREVSRURfTElORVN9IGxpbmVzKVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uLy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnkuanMnXG5pbXBvcnQgeyBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9GYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UuanMnXG5pbXBvcnQgeyB1c2VHZXRUb29sRnJvbU1lc3NhZ2VzIH0gZnJvbSAnLi91dGlscy5qcydcbmltcG9ydCB7IHVzZVRlcm1pbmFsU2l6ZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRlcm1pbmFsU2l6ZS5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgdG9vbFVzZUlEOiBzdHJpbmdcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVxuICB0b29sczogVG9vbFtdXG4gIHZlcmJvc2U6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVzZXJUb29sUmVqZWN0TWVzc2FnZSh7XG4gIHRvb2xVc2VJRCxcbiAgdG9vbHMsXG4gIG1lc3NhZ2VzLFxuICB2ZXJib3NlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIGNvbnN0IHsgdG9vbCwgdG9vbFVzZSB9ID0gdXNlR2V0VG9vbEZyb21NZXNzYWdlcyh0b29sVXNlSUQsIHRvb2xzLCBtZXNzYWdlcylcbiAgY29uc3QgaW5wdXQgPSB0b29sLmlucHV0U2NoZW1hLnNhZmVQYXJzZSh0b29sVXNlLmlucHV0KVxuICBpZiAoaW5wdXQuc3VjY2Vzcykge1xuICAgIHJldHVybiB0b29sLnJlbmRlclRvb2xVc2VSZWplY3RlZE1lc3NhZ2UoaW5wdXQuZGF0YSwge1xuICAgICAgY29sdW1ucyxcbiAgICAgIHZlcmJvc2UsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxufVxuIiwKICAgICJpbXBvcnQgeyBUb29sVXNlQmxvY2tQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnkuanMnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IEdsb2JUb29sIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvR2xvYlRvb2wvR2xvYlRvb2wuanMnXG5pbXBvcnQgeyBHcmVwVG9vbCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xzL0dyZXBUb29sL0dyZXBUb29sLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuXG5mdW5jdGlvbiBnZXRUb29sVXNlRnJvbU1lc3NhZ2VzKFxuICB0b29sVXNlSUQ6IHN0cmluZyxcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXSxcbik6IFRvb2xVc2VCbG9ja1BhcmFtIHwgbnVsbCB7XG4gIGxldCB0b29sVXNlOiBUb29sVXNlQmxvY2tQYXJhbSB8IG51bGwgPSBudWxsXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgIGlmIChcbiAgICAgIG1lc3NhZ2UudHlwZSAhPT0gJ2Fzc2lzdGFudCcgfHxcbiAgICAgICFBcnJheS5pc0FycmF5KG1lc3NhZ2UubWVzc2FnZS5jb250ZW50KVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250ZW50IG9mIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50KSB7XG4gICAgICBpZiAoY29udGVudC50eXBlID09PSAndG9vbF91c2UnICYmIGNvbnRlbnQuaWQgPT09IHRvb2xVc2VJRCkge1xuICAgICAgICB0b29sVXNlID0gY29udGVudFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9vbFVzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlR2V0VG9vbEZyb21NZXNzYWdlcyhcbiAgdG9vbFVzZUlEOiBzdHJpbmcsXG4gIHRvb2xzOiBUb29sW10sXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW10sXG4pIHtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xVc2UgPSBnZXRUb29sVXNlRnJvbU1lc3NhZ2VzKHRvb2xVc2VJRCwgbWVzc2FnZXMpXG4gICAgaWYgKCF0b29sVXNlKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgIGBUb29sIHVzZSBub3QgZm91bmQgZm9yIHRvb2xfdXNlX2lkICR7dG9vbFVzZUlEfWAsXG4gICAgICApXG4gICAgfVxuICAgIC8vIEhhY2s6IHdlIGRvbid0IGV4cG9zZSBHbG9iVG9vbCBhbmQgR3JlcFRvb2wgaW4gZ2V0VG9vbHMgYW55bW9yZSxcbiAgICAvLyBidXQgd2Ugc3RpbGwgd2FudCB0byBiZSBhYmxlIHRvIGxvYWQgb2xkIHRyYW5zY3JpcHRzLlxuICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gbG9nZ2luZyBoaXRzIHplcm9cbiAgICBjb25zdCB0b29sID0gWy4uLnRvb2xzLCBHbG9iVG9vbCwgR3JlcFRvb2xdLmZpbmQoXG4gICAgICBfID0+IF8ubmFtZSA9PT0gdG9vbFVzZS5uYW1lLFxuICAgIClcbiAgICBpZiAodG9vbCA9PT0gR2xvYlRvb2wgfHwgdG9vbCA9PT0gR3JlcFRvb2wpIHtcbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9sZWdhY3lfdG9vbF9sb29rdXAnLCB7fSlcbiAgICB9XG4gICAgaWYgKCF0b29sKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoYFRvb2wgbm90IGZvdW5kIGZvciAke3Rvb2xVc2UubmFtZX1gKVxuICAgIH1cbiAgICByZXR1cm4geyB0b29sLCB0b29sVXNlIH1cbiAgfSwgW3Rvb2xVc2VJRCwgbWVzc2FnZXMsIHRvb2xzXSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCB7IENvc3QgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0Nvc3QuanMnXG5pbXBvcnQgeyBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZS5qcydcbmltcG9ydCB7IFRvb2wgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBnbG9iIH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcydcbmltcG9ydCB7IERFU0NSSVBUSU9OLCBUT09MX05BTUVfRk9SX1BST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgaGFzUmVhZFBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9ucy9maWxlc3lzdGVtLmpzJ1xuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgcGF0dGVybjogei5zdHJpbmcoKS5kZXNjcmliZSgnVGhlIGdsb2IgcGF0dGVybiB0byBtYXRjaCBmaWxlcyBhZ2FpbnN0JyksXG4gIHBhdGg6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgICdUaGUgZGlyZWN0b3J5IHRvIHNlYXJjaCBpbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuJyxcbiAgICApLFxufSlcblxudHlwZSBPdXRwdXQgPSB7XG4gIGR1cmF0aW9uTXM6IG51bWJlclxuICBudW1GaWxlczogbnVtYmVyXG4gIGZpbGVuYW1lczogc3RyaW5nW11cbiAgdHJ1bmNhdGVkOiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBHbG9iVG9vbCA9IHtcbiAgbmFtZTogVE9PTF9OQU1FX0ZPUl9QUk9NUFQsXG4gIGFzeW5jIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBERVNDUklQVElPTlxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ1NlYXJjaCdcbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIGFzeW5jIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIG5lZWRzUGVybWlzc2lvbnMoeyBwYXRoIH0pIHtcbiAgICByZXR1cm4gIWhhc1JlYWRQZXJtaXNzaW9uKHBhdGggfHwgZ2V0Q3dkKCkpXG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgcmVuZGVyVG9vbFVzZU1lc3NhZ2UoeyBwYXR0ZXJuLCBwYXRoIH0sIHsgdmVyYm9zZSB9KSB7XG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aFxuICAgICAgPyBpc0Fic29sdXRlKHBhdGgpXG4gICAgICAgID8gcGF0aFxuICAgICAgICA6IHJlc29sdmUoZ2V0Q3dkKCksIHBhdGgpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGFic29sdXRlUGF0aFxuICAgICAgPyByZWxhdGl2ZShnZXRDd2QoKSwgYWJzb2x1dGVQYXRoKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gYHBhdHRlcm46IFwiJHtwYXR0ZXJufVwiJHtyZWxhdGl2ZVBhdGggfHwgdmVyYm9zZSA/IGAsIHBhdGg6IFwiJHt2ZXJib3NlID8gYWJzb2x1dGVQYXRoIDogcmVsYXRpdmVQYXRofVwiYCA6ICcnfWBcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZVJlamVjdGVkTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxuICB9LFxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZShvdXRwdXQpIHtcbiAgICAvLyBIYW5kbGUgc3RyaW5nIGNvbnRlbnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAodHlwZW9mIG91dHB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG91dHB1dCA9IEpTT04ucGFyc2Uob3V0cHV0KSBhcyBPdXRwdXRcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgPFRleHQ+Jm5ic3A7Jm5ic3A74o6/ICZuYnNwO0ZvdW5kIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBib2xkPntvdXRwdXQubnVtRmlsZXN9IDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtvdXRwdXQubnVtRmlsZXMgPT09IDAgfHwgb3V0cHV0Lm51bUZpbGVzID4gMSA/ICdmaWxlcycgOiAnZmlsZSd9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICAgPENvc3QgY29zdFVTRD17MH0gZHVyYXRpb25Ncz17b3V0cHV0LmR1cmF0aW9uTXN9IGRlYnVnPXtmYWxzZX0gLz5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfSxcbiAgYXN5bmMgKmNhbGwoeyBwYXR0ZXJuLCBwYXRoIH0sIHsgYWJvcnRDb250cm9sbGVyIH0pIHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICBjb25zdCB7IGZpbGVzLCB0cnVuY2F0ZWQgfSA9IGF3YWl0IGdsb2IoXG4gICAgICBwYXR0ZXJuLFxuICAgICAgcGF0aCA/PyBnZXRDd2QoKSxcbiAgICAgIHsgbGltaXQ6IDEwMCwgb2Zmc2V0OiAwIH0sXG4gICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIClcbiAgICBjb25zdCBvdXRwdXQ6IE91dHB1dCA9IHtcbiAgICAgIGZpbGVuYW1lczogZmlsZXMsXG4gICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gc3RhcnQsXG4gICAgICBudW1GaWxlczogZmlsZXMubGVuZ3RoLFxuICAgICAgdHJ1bmNhdGVkLFxuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICB0eXBlOiAncmVzdWx0JyxcbiAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQob3V0cHV0KSxcbiAgICAgIGRhdGE6IG91dHB1dCxcbiAgICB9XG4gIH0sXG4gIHJlbmRlclJlc3VsdEZvckFzc2lzdGFudChvdXRwdXQpIHtcbiAgICBsZXQgcmVzdWx0ID0gb3V0cHV0LmZpbGVuYW1lcy5qb2luKCdcXG4nKVxuICAgIGlmIChvdXRwdXQuZmlsZW5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0ID0gJ05vIGZpbGVzIGZvdW5kJ1xuICAgIH1cbiAgICAvLyBPbmx5IGFkZCB0cnVuY2F0aW9uIG1lc3NhZ2UgaWYgcmVzdWx0cyB3ZXJlIGFjdHVhbGx5IHRydW5jYXRlZFxuICAgIGVsc2UgaWYgKG91dHB1dC50cnVuY2F0ZWQpIHtcbiAgICAgIHJlc3VsdCArPVxuICAgICAgICAnXFxuKFJlc3VsdHMgYXJlIHRydW5jYXRlZC4gQ29uc2lkZXIgdXNpbmcgYSBtb3JlIHNwZWNpZmljIHBhdGggb3IgcGF0dGVybi4pJ1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0sXG59IHNhdGlzZmllcyBUb29sPHR5cGVvZiBpbnB1dFNjaGVtYSwgT3V0cHV0PlxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcblxudHlwZSBQcm9wcyA9IHtcbiAgY29zdFVTRDogbnVtYmVyXG4gIGR1cmF0aW9uTXM6IG51bWJlclxuICBkZWJ1ZzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29zdCh7IGNvc3RVU0QsIGR1cmF0aW9uTXMsIGRlYnVnIH06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgaWYgKCFkZWJ1Zykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBkdXJhdGlvbkluU2Vjb25kcyA9IChkdXJhdGlvbk1zIC8gMTAwMCkudG9GaXhlZCgxKVxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1pbldpZHRoPXsyM30gd2lkdGg9ezIzfT5cbiAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICBDb3N0OiAke2Nvc3RVU0QudG9GaXhlZCg0KX0gKHtkdXJhdGlvbkluU2Vjb25kc31zKVxuICAgICAgPC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHN0YXQgfSBmcm9tICdmcy9wcm9taXNlcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBDb3N0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db3N0LmpzJ1xuaW1wb3J0IHsgRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9GYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UuanMnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0QWJzb2x1dGVQYXRoLFxuICBnZXRBYnNvbHV0ZUFuZFJlbGF0aXZlUGF0aHMsXG59IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnXG5pbXBvcnQgeyByaXBHcmVwIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmlwZ3JlcC5qcydcbmltcG9ydCB7IERFU0NSSVBUSU9OLCBUT09MX05BTUVfRk9SX1BST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IHsgaGFzUmVhZFBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9ucy9maWxlc3lzdGVtLmpzJ1xuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgcGF0dGVybjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZSgnVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgaW4gZmlsZSBjb250ZW50cycpLFxuICBwYXRoOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICAnVGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggaW4uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LicsXG4gICAgKSxcbiAgaW5jbHVkZTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ0ZpbGUgcGF0dGVybiB0byBpbmNsdWRlIGluIHRoZSBzZWFyY2ggKGUuZy4gXCIqLmpzXCIsIFwiKi57dHMsdHN4fVwiKScsXG4gICAgKSxcbn0pXG5cbmNvbnN0IE1BWF9SRVNVTFRTID0gMTAwXG5cbnR5cGUgSW5wdXQgPSB0eXBlb2YgaW5wdXRTY2hlbWFcbnR5cGUgT3V0cHV0ID0ge1xuICBkdXJhdGlvbk1zOiBudW1iZXJcbiAgbnVtRmlsZXM6IG51bWJlclxuICBmaWxlbmFtZXM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBjb25zdCBHcmVwVG9vbCA9IHtcbiAgbmFtZTogVE9PTF9OQU1FX0ZPUl9QUk9NUFQsXG4gIGFzeW5jIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBERVNDUklQVElPTlxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ1NlYXJjaCdcbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIGlzUmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcbiAgYXN5bmMgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIG5lZWRzUGVybWlzc2lvbnMoeyBwYXRoIH0pIHtcbiAgICByZXR1cm4gIWhhc1JlYWRQZXJtaXNzaW9uKHBhdGggfHwgZ2V0Q3dkKCkpXG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgcmVuZGVyVG9vbFVzZU1lc3NhZ2UoeyBwYXR0ZXJuLCBwYXRoLCBpbmNsdWRlIH0sIHsgdmVyYm9zZSB9KSB7XG4gICAgY29uc3QgeyBhYnNvbHV0ZVBhdGgsIHJlbGF0aXZlUGF0aCB9ID0gZ2V0QWJzb2x1dGVBbmRSZWxhdGl2ZVBhdGhzKHBhdGgpXG4gICAgcmV0dXJuIGBwYXR0ZXJuOiBcIiR7cGF0dGVybn1cIiR7cmVsYXRpdmVQYXRoIHx8IHZlcmJvc2UgPyBgLCBwYXRoOiBcIiR7dmVyYm9zZSA/IGFic29sdXRlUGF0aCA6IHJlbGF0aXZlUGF0aH1cImAgOiAnJ30ke2luY2x1ZGUgPyBgLCBpbmNsdWRlOiBcIiR7aW5jbHVkZX1cImAgOiAnJ31gXG4gIH0sXG4gIHJlbmRlclRvb2xVc2VSZWplY3RlZE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIDxGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgLz5cbiAgfSxcbiAgcmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2Uob3V0cHV0KSB7XG4gICAgLy8gSGFuZGxlIHN0cmluZyBjb250ZW50IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBPdXRwdXQgdHlwZSB1c2luZyB0bXBEZXNlcmlhbGl6ZU9sZExvZ1Jlc3VsdCBpZiBuZWVkZWRcbiAgICAgIG91dHB1dCA9IG91dHB1dCBhcyB1bmtub3duIGFzIE91dHB1dFxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIj5cbiAgICAgICAgICA8VGV4dD4mbmJzcDsmbmJzcDvijr8gJm5ic3A7Rm91bmQgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGJvbGQ+e291dHB1dC5udW1GaWxlc30gPC9UZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge291dHB1dC5udW1GaWxlcyA9PT0gMCB8fCBvdXRwdXQubnVtRmlsZXMgPiAxID8gJ2ZpbGVzJyA6ICdmaWxlJ31cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8Q29zdCBjb3N0VVNEPXswfSBkdXJhdGlvbk1zPXtvdXRwdXQuZHVyYXRpb25Nc30gZGVidWc9e2ZhbHNlfSAvPlxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9LFxuICByZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoeyBudW1GaWxlcywgZmlsZW5hbWVzIH0pIHtcbiAgICBpZiAobnVtRmlsZXMgPT09IDApIHtcbiAgICAgIHJldHVybiAnTm8gZmlsZXMgZm91bmQnXG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBgRm91bmQgJHtudW1GaWxlc30gZmlsZSR7bnVtRmlsZXMgPT09IDEgPyAnJyA6ICdzJ31cXG4ke2ZpbGVuYW1lcy5zbGljZSgwLCBNQVhfUkVTVUxUUykuam9pbignXFxuJyl9YFxuICAgIGlmIChudW1GaWxlcyA+IE1BWF9SRVNVTFRTKSB7XG4gICAgICByZXN1bHQgKz1cbiAgICAgICAgJ1xcbihSZXN1bHRzIGFyZSB0cnVuY2F0ZWQuIENvbnNpZGVyIHVzaW5nIGEgbW9yZSBzcGVjaWZpYyBwYXRoIG9yIHBhdHRlcm4uKSdcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LFxuICBhc3luYyAqY2FsbCh7IHBhdHRlcm4sIHBhdGgsIGluY2x1ZGUgfSwgeyBhYm9ydENvbnRyb2xsZXIgfSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGdldEFic29sdXRlUGF0aChwYXRoKSB8fCBnZXRDd2QoKVxuXG4gICAgY29uc3QgYXJncyA9IFsnLWxpJywgcGF0dGVybl1cbiAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgYXJncy5wdXNoKCctLWdsb2InLCBpbmNsdWRlKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByaXBHcmVwKGFyZ3MsIGFic29sdXRlUGF0aCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbClcblxuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0cy5tYXAoXyA9PiBzdGF0KF8pKSlcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzdWx0c1xuICAgICAgLy8gU29ydCBieSBtb2RpZmljYXRpb24gdGltZVxuICAgICAgLm1hcCgoXywgaSkgPT4gW18sIHN0YXRzW2ldIV0gYXMgY29uc3QpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICAgICAgICAgIC8vIEluIHRlc3RzLCB3ZSBhbHdheXMgd2FudCB0byBzb3J0IGJ5IGZpbGVuYW1lLCBzbyB0aGF0IHJlc3VsdHMgYXJlIGRldGVybWluaXN0aWNcbiAgICAgICAgICByZXR1cm4gYVswXS5sb2NhbGVDb21wYXJlKGJbMF0pXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZUNvbXBhcmlzb24gPSAoYlsxXS5tdGltZU1zID8/IDApIC0gKGFbMV0ubXRpbWVNcyA/PyAwKVxuICAgICAgICBpZiAodGltZUNvbXBhcmlzb24gPT09IDApIHtcbiAgICAgICAgICAvLyBTb3J0IGJ5IGZpbGVuYW1lIGFzIGEgdGllYnJlYWtlclxuICAgICAgICAgIHJldHVybiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZUNvbXBhcmlzb25cbiAgICAgIH0pXG4gICAgICAubWFwKF8gPT4gX1swXSlcblxuICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgIGZpbGVuYW1lczogbWF0Y2hlcyxcbiAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydCxcbiAgICAgIG51bUZpbGVzOiBtYXRjaGVzLmxlbmd0aCxcbiAgICB9XG5cbiAgICB5aWVsZCB7XG4gICAgICB0eXBlOiAncmVzdWx0JyxcbiAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQob3V0cHV0KSxcbiAgICAgIGRhdGE6IG91dHB1dCxcbiAgICB9XG4gIH0sXG59IHNhdGlzZmllcyBUb29sPElucHV0LCBPdXRwdXQ+XG4iLAogICAgImltcG9ydCB7IFRvb2xSZXN1bHRCbG9ja1BhcmFtIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2luZGV4Lm1qcydcbmltcG9ydCB7IEJveCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uLy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBNZXNzYWdlLCBVc2VyTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3F1ZXJ5LmpzJ1xuaW1wb3J0IHsgdXNlR2V0VG9vbEZyb21NZXNzYWdlcyB9IGZyb20gJy4vdXRpbHMuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBhcmFtOiBUb29sUmVzdWx0QmxvY2tQYXJhbVxuICBtZXNzYWdlOiBVc2VyTWVzc2FnZVxuICBtZXNzYWdlczogTWVzc2FnZVtdXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgdG9vbHM6IFRvb2xbXVxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VyVG9vbFN1Y2Nlc3NNZXNzYWdlKHtcbiAgcGFyYW0sXG4gIG1lc3NhZ2UsXG4gIG1lc3NhZ2VzLFxuICB0b29scyxcbiAgdmVyYm9zZSxcbiAgd2lkdGgsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgdG9vbCB9ID0gdXNlR2V0VG9vbEZyb21NZXNzYWdlcyhwYXJhbS50b29sX3VzZV9pZCwgdG9vbHMsIG1lc3NhZ2VzKVxuXG4gIHJldHVybiAoXG4gICAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggVXNlck1lc3NhZ2UgZnJvbSBVc2VyVG9vbFJlc3VsdE1lc3NhZ2VcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiB3aWR0aD17d2lkdGh9PlxuICAgICAge3Rvb2wucmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2U/LihtZXNzYWdlLnRvb2xVc2VSZXN1bHQhLmRhdGEgYXMgbmV2ZXIsIHtcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgIH0pfVxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgVG9vbFVzZUJsb2NrUGFyYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBDb3N0IH0gZnJvbSAnLi4vQ29zdC5qcydcbmltcG9ydCB7IFRvb2xVc2VMb2FkZXIgfSBmcm9tICcuLi9Ub29sVXNlTG9hZGVyLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IEJMQUNLX0NJUkNMRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9maWd1cmVzLmpzJ1xuaW1wb3J0IHsgVGhpbmtUb29sIH0gZnJvbSAnLi4vLi4vdG9vbHMvVGhpbmtUb29sL1RoaW5rVG9vbC5qcydcbmltcG9ydCB7IEFzc2lzdGFudFRoaW5raW5nTWVzc2FnZSB9IGZyb20gJy4vQXNzaXN0YW50VGhpbmtpbmdNZXNzYWdlLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBwYXJhbTogVG9vbFVzZUJsb2NrUGFyYW1cbiAgY29zdFVTRDogbnVtYmVyXG4gIGR1cmF0aW9uTXM6IG51bWJlclxuICBhZGRNYXJnaW46IGJvb2xlYW5cbiAgdG9vbHM6IFRvb2xbXVxuICBkZWJ1ZzogYm9vbGVhblxuICB2ZXJib3NlOiBib29sZWFuXG4gIGVycm9yZWRUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICBpblByb2dyZXNzVG9vbFVzZUlEczogU2V0PHN0cmluZz5cbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIHNob3VsZEFuaW1hdGU6IGJvb2xlYW5cbiAgc2hvdWxkU2hvd0RvdDogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXNzaXN0YW50VG9vbFVzZU1lc3NhZ2Uoe1xuICBwYXJhbSxcbiAgY29zdFVTRCxcbiAgZHVyYXRpb25NcyxcbiAgYWRkTWFyZ2luLFxuICB0b29scyxcbiAgZGVidWcsXG4gIHZlcmJvc2UsXG4gIGVycm9yZWRUb29sVXNlSURzLFxuICBpblByb2dyZXNzVG9vbFVzZUlEcyxcbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHMsXG4gIHNob3VsZEFuaW1hdGUsXG4gIHNob3VsZFNob3dEb3QsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRvb2wgPSB0b29scy5maW5kKF8gPT4gXy5uYW1lID09PSBwYXJhbS5uYW1lKVxuICBpZiAoIXRvb2wpIHtcbiAgICBsb2dFcnJvcihgVG9vbCAke3BhcmFtLm5hbWV9IG5vdCBmb3VuZGApXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBpc1F1ZXVlZCA9XG4gICAgIWluUHJvZ3Jlc3NUb29sVXNlSURzLmhhcyhwYXJhbS5pZCkgJiYgdW5yZXNvbHZlZFRvb2xVc2VJRHMuaGFzKHBhcmFtLmlkKVxuICAvLyBLZWVwaW5nIGNvbG9yIHVuZGVmaW5lZCBtYWtlcyB0aGUgT1MgdXNlIHRoZSBkZWZhdWx0IGNvbG9yIHJlZ2FyZGxlc3Mgb2YgYXBwZWFyYW5jZVxuICBjb25zdCBjb2xvciA9IGlzUXVldWVkID8gZ2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0IDogdW5kZWZpbmVkXG5cbiAgLy8gVE9ETzogQXZvaWQgdGhpcyBzcGVjaWFsIGNhc2VcbiAgaWYgKHRvb2wgPT09IFRoaW5rVG9vbCkge1xuICAgIC8vIHBhcmFtcyB3ZXJlIGFscmVhZHkgdmFsaWRhdGVkIGluIHF1ZXJ5KCksIHNvIHRoaXMgd29uJ3QgdGhyb2VcbiAgICBjb25zdCB7IHRob3VnaHQgfSA9IFRoaW5rVG9vbC5pbnB1dFNjaGVtYS5wYXJzZShwYXJhbS5pbnB1dClcbiAgICByZXR1cm4gKFxuICAgICAgPEFzc2lzdGFudFRoaW5raW5nTWVzc2FnZVxuICAgICAgICBwYXJhbT17eyB0aGlua2luZzogdGhvdWdodCwgc2lnbmF0dXJlOiAnJywgdHlwZTogJ3RoaW5raW5nJyB9fVxuICAgICAgICBhZGRNYXJnaW49e2FkZE1hcmdpbn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgdXNlckZhY2luZ1Rvb2xOYW1lID0gdG9vbC51c2VyRmFjaW5nTmFtZShwYXJhbS5pbnB1dCBhcyBuZXZlcilcbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBmbGV4RGlyZWN0aW9uPVwicm93XCJcbiAgICAgIGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiXG4gICAgICBtYXJnaW5Ub3A9e2FkZE1hcmdpbiA/IDEgOiAwfVxuICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICA+XG4gICAgICA8Qm94PlxuICAgICAgICA8Qm94XG4gICAgICAgICAgZmxleFdyYXA9XCJub3dyYXBcIlxuICAgICAgICAgIG1pbldpZHRoPXt1c2VyRmFjaW5nVG9vbE5hbWUubGVuZ3RoICsgKHNob3VsZFNob3dEb3QgPyAyIDogMCl9XG4gICAgICAgID5cbiAgICAgICAgICB7c2hvdWxkU2hvd0RvdCAmJlxuICAgICAgICAgICAgKGlzUXVldWVkID8gKFxuICAgICAgICAgICAgICA8Qm94IG1pbldpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9PntCTEFDS19DSVJDTEV9PC9UZXh0PlxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxUb29sVXNlTG9hZGVyXG4gICAgICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZT17c2hvdWxkQW5pbWF0ZX1cbiAgICAgICAgICAgICAgICBpc1VucmVzb2x2ZWQ9e3VucmVzb2x2ZWRUb29sVXNlSURzLmhhcyhwYXJhbS5pZCl9XG4gICAgICAgICAgICAgICAgaXNFcnJvcj17ZXJyb3JlZFRvb2xVc2VJRHMuaGFzKHBhcmFtLmlkKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0gYm9sZD17IWlzUXVldWVkfT5cbiAgICAgICAgICAgIHt1c2VyRmFjaW5nVG9vbE5hbWV9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICAgPEJveCBmbGV4V3JhcD1cIm5vd3JhcFwiPlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhwYXJhbS5pbnB1dCBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubGVuZ3RoID5cbiAgICAgICAgICAgIDAgJiYgKFxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfT5cbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICB7dG9vbC5yZW5kZXJUb29sVXNlTWVzc2FnZShwYXJhbS5pbnB1dCBhcyBuZXZlciwge1xuICAgICAgICAgICAgICAgIHZlcmJvc2UsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9PuKApjwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICAgIDxDb3N0IGNvc3RVU0Q9e2Nvc3RVU0R9IGR1cmF0aW9uTXM9e2R1cmF0aW9uTXN9IGRlYnVnPXtkZWJ1Z30gLz5cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbnRlcnZhbCB9IGZyb20gJy4uL2hvb2tzL3VzZUludGVydmFsLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IEJMQUNLX0NJUkNMRSB9IGZyb20gJy4uL2NvbnN0YW50cy9maWd1cmVzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBpc0Vycm9yOiBib29sZWFuXG4gIGlzVW5yZXNvbHZlZDogYm9vbGVhblxuICBzaG91bGRBbmltYXRlOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUb29sVXNlTG9hZGVyKHtcbiAgaXNFcnJvcixcbiAgaXNVbnJlc29sdmVkLFxuICBzaG91bGRBbmltYXRlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbaXNWaXNpYmxlLCBzZXRJc1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSlcblxuICB1c2VJbnRlcnZhbCgoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRBbmltYXRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gVG8gYXZvaWQgZmxpY2tlcmluZyB3aGVuIHRoZSB0b29sIHVzZSBjb25maXJtIGlzIHZpc2libGUsIHdlIHNldCB0aGUgbG9hZGVyIHRvIGJlIHZpc2libGVcbiAgICAvLyB3aGVuIHRoZSB0b29sIHVzZSBjb25maXJtIGlzIHZpc2libGUuXG4gICAgc2V0SXNWaXNpYmxlKF8gPT4gIV8pXG4gIH0sIDYwMClcblxuICBjb25zdCBjb2xvciA9IGlzVW5yZXNvbHZlZFxuICAgID8gZ2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0XG4gICAgOiBpc0Vycm9yXG4gICAgICA/IGdldFRoZW1lKCkuZXJyb3JcbiAgICAgIDogZ2V0VGhlbWUoKS5zdWNjZXNzXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IG1pbldpZHRoPXsyfT5cbiAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0+e2lzVmlzaWJsZSA/IEJMQUNLX0NJUkNMRSA6ICcgICd9PC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbi8qKlxuICogQSBjdXN0b20gaG9vayB0aGF0IHJ1bnMgYSBjYWxsYmFjayBhdCBhIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAqIFRoZSBpbnRlcnZhbCBpcyBjbGVhcmVkIHdoZW4gdGhlIGNvbXBvbmVudCB1bm1vdW50cy5cbiAqIFRoZSBpbnRlcnZhbCBpcyBhbHNvIGNsZWFyZWQgYW5kIHJlc3RhcnRlZCBpZiB0aGUgZGVsYXkgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVydmFsKGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBkZWxheTogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IHNhdmVkQ2FsbGJhY2sgPSB1c2VSZWYoY2FsbGJhY2spXG5cbiAgLy8gUmVtZW1iZXIgdGhlIGxhdGVzdCBjYWxsYmFja1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNhdmVkQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrXG4gIH0sIFtjYWxsYmFja10pXG5cbiAgLy8gU2V0IHVwIHRoZSBpbnRlcnZhbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgICBzYXZlZENhbGxiYWNrLmN1cnJlbnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwodGljaywgZGVsYXkpXG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaWQpXG4gIH0sIFtkZWxheV0pXG59XG4iLAogICAgImltcG9ydCB7IGVudiB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcydcblxuLy8gVGhlIGZvcm1lciBpcyBiZXR0ZXIgdmVydGljYWxseSBhbGlnbmVkLCBidXQgaXNuJ3QgdXN1YWxseSBzdXBwb3J0ZWQgb24gV2luZG93cy9MaW51eFxuZXhwb3J0IGNvbnN0IEJMQUNLX0NJUkNMRSA9IGVudi5wbGF0Zm9ybSA9PT0gJ21hY29zJyA/ICfij7onIDogJ+KXjydcbiIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IERFU0NSSVBUSU9OLCBQUk9NUFQgfSBmcm9tICcuL3Byb21wdC5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL01lc3NhZ2VSZXNwb25zZS5qcydcbmltcG9ydCB7IGNoZWNrR2F0ZSwgbG9nRXZlbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgVVNFX0JFRFJPQ0ssIFVTRV9WRVJURVggfSBmcm9tICcuLi8uLi91dGlscy9tb2RlbC5qcydcblxuY29uc3QgdGhpbmtUb29sU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aG91Z2h0OiB6LnN0cmluZygpLmRlc2NyaWJlKCdZb3VyIHRob3VnaHRzLicpLFxufSlcblxuZXhwb3J0IGNvbnN0IFRoaW5rVG9vbCA9IHtcbiAgbmFtZTogJ1RoaW5rJyxcbiAgdXNlckZhY2luZ05hbWU6ICgpID0+ICdUaGluaycsXG4gIGRlc2NyaXB0aW9uOiBhc3luYyAoKSA9PiBERVNDUklQVElPTixcbiAgaW5wdXRTY2hlbWE6IHRoaW5rVG9vbFNjaGVtYSxcbiAgaXNFbmFibGVkOiBhc3luYyAoKSA9PlxuICAgIEJvb2xlYW4ocHJvY2Vzcy5lbnYuVEhJTktfVE9PTCkgJiYgKGF3YWl0IGNoZWNrR2F0ZSgndGVuZ3VfdGhpbmtfdG9vbCcpKSxcbiAgaXNSZWFkT25seTogKCkgPT4gdHJ1ZSxcbiAgbmVlZHNQZXJtaXNzaW9uczogKCkgPT4gZmFsc2UsXG4gIHByb21wdDogYXN5bmMgKCkgPT4gUFJPTVBULFxuXG4gIGFzeW5jICpjYWxsKGlucHV0LCB7IG1lc3NhZ2VJZCB9KSB7XG4gICAgbG9nRXZlbnQoJ3Rlbmd1X3RoaW5raW5nJywge1xuICAgICAgbWVzc2FnZUlkLFxuICAgICAgdGhvdWdodExlbmd0aDogaW5wdXQudGhvdWdodC5sZW5ndGgudG9TdHJpbmcoKSxcbiAgICAgIG1ldGhvZDogJ3Rvb2wnLFxuICAgICAgcHJvdmlkZXI6IFVTRV9CRURST0NLID8gJ2JlZHJvY2snIDogVVNFX1ZFUlRFWCA/ICd2ZXJ0ZXgnIDogJzFwJyxcbiAgICB9KVxuXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6ICdZb3VyIHRob3VnaHQgaGFzIGJlZW4gbG9nZ2VkLicsXG4gICAgICBkYXRhOiB7IHRob3VnaHQ6IGlucHV0LnRob3VnaHQgfSxcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGhpcyBpcyBuZXZlciBjYWxsZWQgLS0gaXQncyBzcGVjaWFsLWNhc2VkIGluIEFzc2lzdGFudFRvb2xVc2VNZXNzYWdlXG4gIHJlbmRlclRvb2xVc2VNZXNzYWdlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0LnRob3VnaHRcbiAgfSxcblxuICByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5lcnJvcn0+VGhvdWdodCBjYW5jZWxsZWQ8L1RleHQ+XG4gICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICApXG4gIH0sXG5cbiAgcmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50OiAoKSA9PiAnWW91ciB0aG91Z2h0IGhhcyBiZWVuIGxvZ2dlZC4nLFxufSBzYXRpc2ZpZXMgVG9vbDx0eXBlb2YgdGhpbmtUb29sU2NoZW1hPlxuIiwKICAgICJleHBvcnQgY29uc3QgREVTQ1JJUFRJT04gPVxuICAnVGhpcyBpcyBhIG5vLW9wIHRvb2wgdGhhdCBsb2dzIGEgdGhvdWdodC4gSXQgaXMgaW5zcGlyZWQgYnkgdGhlIHRhdS1iZW5jaCB0aGluayB0b29sLidcbmV4cG9ydCBjb25zdCBQUk9NUFQgPSBgVXNlIHRoZSB0b29sIHRvIHRoaW5rIGFib3V0IHNvbWV0aGluZy4gSXQgd2lsbCBub3Qgb2J0YWluIG5ldyBpbmZvcm1hdGlvbiBvciBtYWtlIGFueSBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5LCBidXQganVzdCBsb2cgdGhlIHRob3VnaHQuIFVzZSBpdCB3aGVuIGNvbXBsZXggcmVhc29uaW5nIG9yIGJyYWluc3Rvcm1pbmcgaXMgbmVlZGVkLiBcblxuQ29tbW9uIHVzZSBjYXNlczpcbjEuIFdoZW4gZXhwbG9yaW5nIGEgcmVwb3NpdG9yeSBhbmQgZGlzY292ZXJpbmcgdGhlIHNvdXJjZSBvZiBhIGJ1ZywgY2FsbCB0aGlzIHRvb2wgdG8gYnJhaW5zdG9ybSBzZXZlcmFsIHVuaXF1ZSB3YXlzIG9mIGZpeGluZyB0aGUgYnVnLCBhbmQgYXNzZXNzIHdoaWNoIGNoYW5nZShzKSBhcmUgbGlrZWx5IHRvIGJlIHNpbXBsZXN0IGFuZCBtb3N0IGVmZmVjdGl2ZVxuMi4gQWZ0ZXIgcmVjZWl2aW5nIHRlc3QgcmVzdWx0cywgdXNlIHRoaXMgdG9vbCB0byBicmFpbnN0b3JtIHdheXMgdG8gZml4IGZhaWxpbmcgdGVzdHNcbjMuIFdoZW4gcGxhbm5pbmcgYSBjb21wbGV4IHJlZmFjdG9yaW5nLCB1c2UgdGhpcyB0b29sIHRvIG91dGxpbmUgZGlmZmVyZW50IGFwcHJvYWNoZXMgYW5kIHRoZWlyIHRyYWRlb2Zmc1xuNC4gV2hlbiBkZXNpZ25pbmcgYSBuZXcgZmVhdHVyZSwgdXNlIHRoaXMgdG9vbCB0byB0aGluayB0aHJvdWdoIGFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHNcbjUuIFdoZW4gZGVidWdnaW5nIGEgY29tcGxleCBpc3N1ZSwgdXNlIHRoaXMgdG9vbCB0byBvcmdhbml6ZSB5b3VyIHRob3VnaHRzIGFuZCBoeXBvdGhlc2VzXG5cblRoZSB0b29sIHNpbXBseSBsb2dzIHlvdXIgdGhvdWdodCBwcm9jZXNzIGZvciBiZXR0ZXIgdHJhbnNwYXJlbmN5IGFuZCBkb2VzIG5vdCBleGVjdXRlIGFueSBjb2RlIG9yIG1ha2UgY2hhbmdlcy5gXG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZXNzYWdlUmVzcG9uc2UoeyBjaGlsZHJlbiB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgaGVpZ2h0PXsxfSBvdmVyZmxvdz1cImhpZGRlblwiPlxuICAgICAgPFRleHQ+eycgICd94o6/ICZuYnNwOzwvVGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgYXBwbHlNYXJrZG93biB9IGZyb20gJy4uLy4uL3V0aWxzL21hcmtkb3duLmpzJ1xuaW1wb3J0IHtcbiAgVGhpbmtpbmdCbG9jayxcbiAgVGhpbmtpbmdCbG9ja1BhcmFtLFxufSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBwYXJhbTogVGhpbmtpbmdCbG9jayB8IFRoaW5raW5nQmxvY2tQYXJhbVxuICBhZGRNYXJnaW46IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFzc2lzdGFudFRoaW5raW5nTWVzc2FnZSh7XG4gIHBhcmFtOiB7IHRoaW5raW5nIH0sXG4gIGFkZE1hcmdpbiA9IGZhbHNlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAoIXRoaW5raW5nKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICBnYXA9ezF9XG4gICAgICBtYXJnaW5Ub3A9e2FkZE1hcmdpbiA/IDEgOiAwfVxuICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICA+XG4gICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fSBpdGFsaWM+XG4gICAgICAgIOKcuyBUaGlua2luZ+KAplxuICAgICAgPC9UZXh0PlxuICAgICAgPEJveCBwYWRkaW5nTGVmdD17Mn0+XG4gICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9IGl0YWxpYz5cbiAgICAgICAgICB7YXBwbHlNYXJrZG93bih0aGlua2luZyl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgIi8qKlxuICogbWFya2VkIHYxNS4wLjYgLSBhIG1hcmtkb3duIHBhcnNlclxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMjUsIENocmlzdG9waGVyIEplZmZyZXkuIChNSVQgTGljZW5zZWQpXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkXG4gKi9cblxuLyoqXG4gKiBETyBOT1QgRURJVCBUSElTIEZJTEVcbiAqIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSBmaWxlcyBpbiAuL3NyYy9cbiAqL1xuXG4vKipcbiAqIEdldHMgdGhlIG9yaWdpbmFsIG1hcmtlZCBkZWZhdWx0IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIF9nZXREZWZhdWx0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYzogZmFsc2UsXG4gICAgICAgIGJyZWFrczogZmFsc2UsXG4gICAgICAgIGV4dGVuc2lvbnM6IG51bGwsXG4gICAgICAgIGdmbTogdHJ1ZSxcbiAgICAgICAgaG9va3M6IG51bGwsXG4gICAgICAgIHBlZGFudGljOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyZXI6IG51bGwsXG4gICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAgIHRva2VuaXplcjogbnVsbCxcbiAgICAgICAgd2Fsa1Rva2VuczogbnVsbCxcbiAgICB9O1xufVxubGV0IF9kZWZhdWx0cyA9IF9nZXREZWZhdWx0cygpO1xuZnVuY3Rpb24gY2hhbmdlRGVmYXVsdHMobmV3RGVmYXVsdHMpIHtcbiAgICBfZGVmYXVsdHMgPSBuZXdEZWZhdWx0cztcbn1cblxuY29uc3Qgbm9vcFRlc3QgPSB7IGV4ZWM6ICgpID0+IG51bGwgfTtcbmZ1bmN0aW9uIGVkaXQocmVnZXgsIG9wdCA9ICcnKSB7XG4gICAgbGV0IHNvdXJjZSA9IHR5cGVvZiByZWdleCA9PT0gJ3N0cmluZycgPyByZWdleCA6IHJlZ2V4LnNvdXJjZTtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIHJlcGxhY2U6IChuYW1lLCB2YWwpID0+IHtcbiAgICAgICAgICAgIGxldCB2YWxTb3VyY2UgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbCA6IHZhbC5zb3VyY2U7XG4gICAgICAgICAgICB2YWxTb3VyY2UgPSB2YWxTb3VyY2UucmVwbGFjZShvdGhlci5jYXJldCwgJyQxJyk7XG4gICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZShuYW1lLCB2YWxTb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UmVnZXg6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHNvdXJjZSwgb3B0KTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBvYmo7XG59XG5jb25zdCBvdGhlciA9IHtcbiAgICBjb2RlUmVtb3ZlSW5kZW50OiAvXig/OiB7MSw0fXwgezAsM31cXHQpL2dtLFxuICAgIG91dHB1dExpbmtSZXBsYWNlOiAvXFxcXChbXFxbXFxdXSkvZyxcbiAgICBpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOiAvXihcXHMrKSg/OmBgYCkvLFxuICAgIGJlZ2lubmluZ1NwYWNlOiAvXlxccysvLFxuICAgIGVuZGluZ0hhc2g6IC8jJC8sXG4gICAgc3RhcnRpbmdTcGFjZUNoYXI6IC9eIC8sXG4gICAgZW5kaW5nU3BhY2VDaGFyOiAvICQvLFxuICAgIG5vblNwYWNlQ2hhcjogL1teIF0vLFxuICAgIG5ld0xpbmVDaGFyR2xvYmFsOiAvXFxuL2csXG4gICAgdGFiQ2hhckdsb2JhbDogL1xcdC9nLFxuICAgIG11bHRpcGxlU3BhY2VHbG9iYWw6IC9cXHMrL2csXG4gICAgYmxhbmtMaW5lOiAvXlsgXFx0XSokLyxcbiAgICBkb3VibGVCbGFua0xpbmU6IC9cXG5bIFxcdF0qXFxuWyBcXHRdKiQvLFxuICAgIGJsb2NrcXVvdGVTdGFydDogL14gezAsM30+LyxcbiAgICBibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTogL1xcbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cXG58JCkvZyxcbiAgICBibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTI6IC9eIHswLDN9PlsgXFx0XT8vZ20sXG4gICAgbGlzdFJlcGxhY2VUYWJzOiAvXlxcdCsvLFxuICAgIGxpc3RSZXBsYWNlTmVzdGluZzogL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxcbiAgICBsaXN0SXNUYXNrOiAvXlxcW1sgeFhdXFxdIC8sXG4gICAgbGlzdFJlcGxhY2VUYXNrOiAvXlxcW1sgeFhdXFxdICsvLFxuICAgIGFueUxpbmU6IC9cXG4uKlxcbi8sXG4gICAgaHJlZkJyYWNrZXRzOiAvXjwoLiopPiQvLFxuICAgIHRhYmxlRGVsaW1pdGVyOiAvWzp8XS8sXG4gICAgdGFibGVBbGlnbkNoYXJzOiAvXlxcfHxcXHwgKiQvZyxcbiAgICB0YWJsZVJvd0JsYW5rTGluZTogL1xcblsgXFx0XSokLyxcbiAgICB0YWJsZUFsaWduUmlnaHQ6IC9eICotKzogKiQvLFxuICAgIHRhYmxlQWxpZ25DZW50ZXI6IC9eICo6LSs6ICokLyxcbiAgICB0YWJsZUFsaWduTGVmdDogL14gKjotKyAqJC8sXG4gICAgc3RhcnRBVGFnOiAvXjxhIC9pLFxuICAgIGVuZEFUYWc6IC9ePFxcL2E+L2ksXG4gICAgc3RhcnRQcmVTY3JpcHRUYWc6IC9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcXHN8PikvaSxcbiAgICBlbmRQcmVTY3JpcHRUYWc6IC9ePFxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcXHN8PikvaSxcbiAgICBzdGFydEFuZ2xlQnJhY2tldDogL148LyxcbiAgICBlbmRBbmdsZUJyYWNrZXQ6IC8+JC8sXG4gICAgcGVkYW50aWNIcmVmVGl0bGU6IC9eKFteJ1wiXSpbXlxcc10pXFxzKyhbJ1wiXSkoLiopXFwyLyxcbiAgICB1bmljb2RlQWxwaGFOdW1lcmljOiAvW1xccHtMfVxccHtOfV0vdSxcbiAgICBlc2NhcGVUZXN0OiAvWyY8PlwiJ10vLFxuICAgIGVzY2FwZVJlcGxhY2U6IC9bJjw+XCInXS9nLFxuICAgIGVzY2FwZVRlc3ROb0VuY29kZTogL1s8PlwiJ118Jig/ISgjXFxkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFxcdyspOykvLFxuICAgIGVzY2FwZVJlcGxhY2VOb0VuY29kZTogL1s8PlwiJ118Jig/ISgjXFxkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFxcdyspOykvZyxcbiAgICB1bmVzY2FwZVRlc3Q6IC8mKCMoPzpcXGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XFx3KykpOz8vaWcsXG4gICAgY2FyZXQ6IC8oXnxbXlxcW10pXFxeL2csXG4gICAgcGVyY2VudERlY29kZTogLyUyNS9nLFxuICAgIGZpbmRQaXBlOiAvXFx8L2csXG4gICAgc3BsaXRQaXBlOiAvIFxcfC8sXG4gICAgc2xhc2hQaXBlOiAvXFxcXFxcfC9nLFxuICAgIGNhcnJpYWdlUmV0dXJuOiAvXFxyXFxufFxcci9nLFxuICAgIHNwYWNlTGluZTogL14gKyQvZ20sXG4gICAgbm90U3BhY2VTdGFydDogL15cXFMqLyxcbiAgICBlbmRpbmdOZXdsaW5lOiAvXFxuJC8sXG4gICAgbGlzdEl0ZW1SZWdleDogKGJ1bGwpID0+IG5ldyBSZWdFeHAoYF4oIHswLDN9JHtidWxsfSkoKD86W1xcdCBdW15cXFxcbl0qKT8oPzpcXFxcbnwkKSlgKSxcbiAgICBuZXh0QnVsbGV0UmVnZXg6IChpbmRlbnQpID0+IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KD86WyorLV18XFxcXGR7MSw5fVsuKV0pKCg/OlsgXFx0XVteXFxcXG5dKik/KD86XFxcXG58JCkpYCksXG4gICAgaHJSZWdleDogKGluZGVudCkgPT4gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFxcXCogKil7Myx9KSg/OlxcXFxuK3wkKWApLFxuICAgIGZlbmNlc0JlZ2luUmVnZXg6IChpbmRlbnQpID0+IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KD86XFxgXFxgXFxgfH5+filgKSxcbiAgICBoZWFkaW5nQmVnaW5SZWdleDogKGluZGVudCkgPT4gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0jYCksXG4gICAgaHRtbEJlZ2luUmVnZXg6IChpbmRlbnQpID0+IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19PCg/OlthLXpdLio+fCEtLSlgLCAnaScpLFxufTtcbi8qKlxuICogQmxvY2stTGV2ZWwgR3JhbW1hclxuICovXG5jb25zdCBuZXdsaW5lID0gL14oPzpbIFxcdF0qKD86XFxufCQpKSsvO1xuY29uc3QgYmxvY2tDb2RlID0gL14oKD86IHs0fXwgezAsM31cXHQpW15cXG5dKyg/Olxcbig/OlsgXFx0XSooPzpcXG58JCkpKik/KSsvO1xuY29uc3QgZmVuY2VzID0gL14gezAsM30oYHszLH0oPz1bXmBcXG5dKig/OlxcbnwkKSl8fnszLH0pKFteXFxuXSopKD86XFxufCQpKD86fChbXFxzXFxTXSo/KSg/OlxcbnwkKSkoPzogezAsM31cXDFbfmBdKiAqKD89XFxufCQpfCQpLztcbmNvbnN0IGhyID0gL14gezAsM30oKD86LVtcXHQgXSopezMsfXwoPzpfWyBcXHRdKil7Myx9fCg/OlxcKlsgXFx0XSopezMsfSkoPzpcXG4rfCQpLztcbmNvbnN0IGhlYWRpbmcgPSAvXiB7MCwzfSgjezEsNn0pKD89XFxzfCQpKC4qKSg/Olxcbit8JCkvO1xuY29uc3QgYnVsbGV0ID0gLyg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkvO1xuY29uc3QgbGhlYWRpbmcgPSBlZGl0KC9eKD8hYnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbCkoKD86LnxcXG4oPyFcXHMqP1xcbnxidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sKSkrPylcXG4gezAsM30oPSt8LSspICooPzpcXG4rfCQpLylcbiAgICAucmVwbGFjZSgvYnVsbC9nLCBidWxsZXQpIC8vIGxpc3RzIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgvYmxvY2tDb2RlL2csIC8oPzogezR9fCB7MCwzfVxcdCkvKSAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoL2ZlbmNlcy9nLCAvIHswLDN9KD86YHszLH18fnszLH0pLykgLy8gZmVuY2VkIGNvZGUgYmxvY2tzIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgvYmxvY2txdW90ZS9nLCAvIHswLDN9Pi8pIC8vIGJsb2NrcXVvdGUgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKC9oZWFkaW5nL2csIC8gezAsM30jezEsNn0vKSAvLyBBVFggaGVhZGluZyBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoL2h0bWwvZywgLyB7MCwzfTxbXlxcbj5dKz5cXG4vKSAvLyBibG9jayBodG1sIGNhbiBpbnRlcnJ1cHRcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF9wYXJhZ3JhcGggPSAvXihbXlxcbl0rKD86XFxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcXG4pW15cXG5dKykqKS87XG5jb25zdCBibG9ja1RleHQgPSAvXlteXFxuXSsvO1xuY29uc3QgX2Jsb2NrTGFiZWwgPSAvKD8hXFxzKlxcXSkoPzpcXFxcLnxbXlxcW1xcXVxcXFxdKSsvO1xuY29uc3QgZGVmID0gZWRpdCgvXiB7MCwzfVxcWyhsYWJlbClcXF06ICooPzpcXG5bIFxcdF0qKT8oW148XFxzXVteXFxzXSp8PC4qPz4pKD86KD86ICsoPzpcXG5bIFxcdF0qKT98ICpcXG5bIFxcdF0qKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgX2Jsb2NrTGFiZWwpXG4gICAgLnJlcGxhY2UoJ3RpdGxlJywgLyg/OlwiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCdbXidcXG5dKig/OlxcblteJ1xcbl0rKSpcXG4/J3xcXChbXigpXSpcXCkpLylcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGxpc3QgPSBlZGl0KC9eKCB7MCwzfWJ1bGwpKFsgXFx0XVteXFxuXSs/KT8oPzpcXG58JCkvKVxuICAgIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldClcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF90YWcgPSAnYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb24nXG4gICAgKyAnfGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9uJ1xuICAgICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICAgICsgJ3xsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9uJ1xuICAgICsgJ3xwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGUnXG4gICAgKyAnfHRyfHRyYWNrfHVsJztcbmNvbnN0IF9jb21tZW50ID0gLzwhLS0oPzotPz58W1xcc1xcU10qPyg/Oi0tPnwkKSkvO1xuY29uc3QgaHRtbCA9IGVkaXQoJ14gezAsM30oPzonIC8vIG9wdGlvbmFsIGluZGVudGF0aW9uXG4gICAgKyAnPChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4gICAgKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbiAgICArICd8PFxcXFw/W1xcXFxzXFxcXFNdKj8oPzpcXFxcPz5cXFxcbip8JCknIC8vICgzKVxuICAgICsgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8oPzo+XFxcXG4qfCQpJyAvLyAoNClcbiAgICArICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qPyg/OlxcXFxdXFxcXF0+XFxcXG4qfCQpJyAvLyAoNSlcbiAgICArICd8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcblsgXFx0XSopK1xcXFxufCQpJyAvLyAoNilcbiAgICArICd8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcblsgXFx0XSopK1xcXFxufCQpJyAvLyAoNykgb3BlbiB0YWdcbiAgICArICd8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcXFx3LV0qXFxcXHMqPig/PVsgXFxcXHRdKig/OlxcXFxufCQpKVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG5bIFxcdF0qKStcXFxcbnwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4gICAgKyAnKScsICdpJylcbiAgICAucmVwbGFjZSgnY29tbWVudCcsIF9jb21tZW50KVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKVxuICAgIC5yZXBsYWNlKCdhdHRyaWJ1dGUnLCAvICtbYS16QS1aOl9dW1xcdy46LV0qKD86ICo9ICpcIlteXCJcXG5dKlwifCAqPSAqJ1teJ1xcbl0qJ3wgKj0gKlteXFxzXCInPTw+YF0rKT8vKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgcGFyYWdyYXBoID0gZWRpdChfcGFyYWdyYXBoKVxuICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgIC5yZXBsYWNlKCdoZWFkaW5nJywgJyB7MCwzfSN7MSw2fSg/OlxcXFxzfCQpJylcbiAgICAucmVwbGFjZSgnfGxoZWFkaW5nJywgJycpIC8vIHNldGV4dCBoZWFkaW5ncyBkb24ndCBpbnRlcnJ1cHQgY29tbW9ubWFyayBwYXJhZ3JhcGhzXG4gICAgLnJlcGxhY2UoJ3x0YWJsZScsICcnKVxuICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSkgJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKSAvLyBwYXJzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgYmxvY2txdW90ZSA9IGVkaXQoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxcbl0qKSg/OlxcbnwkKSkrLylcbiAgICAucmVwbGFjZSgncGFyYWdyYXBoJywgcGFyYWdyYXBoKVxuICAgIC5nZXRSZWdleCgpO1xuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5jb25zdCBibG9ja05vcm1hbCA9IHtcbiAgICBibG9ja3F1b3RlLFxuICAgIGNvZGU6IGJsb2NrQ29kZSxcbiAgICBkZWYsXG4gICAgZmVuY2VzLFxuICAgIGhlYWRpbmcsXG4gICAgaHIsXG4gICAgaHRtbCxcbiAgICBsaGVhZGluZyxcbiAgICBsaXN0LFxuICAgIG5ld2xpbmUsXG4gICAgcGFyYWdyYXBoLFxuICAgIHRhYmxlOiBub29wVGVzdCxcbiAgICB0ZXh0OiBibG9ja1RleHQsXG59O1xuLyoqXG4gKiBHRk0gQmxvY2sgR3JhbW1hclxuICovXG5jb25zdCBnZm1UYWJsZSA9IGVkaXQoJ14gKihbXlxcXFxuIF0uKilcXFxcbicgLy8gSGVhZGVyXG4gICAgKyAnIHswLDN9KCg/OlxcXFx8ICopPzo/LSs6PyAqKD86XFxcXHwgKjo/LSs6PyAqKSooPzpcXFxcfCAqKT8pJyAvLyBBbGlnblxuICAgICsgJyg/OlxcXFxuKCg/Oig/ISAqXFxcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcXFxufCQpKSopXFxcXG4qfCQpJykgLy8gQ2VsbHNcbiAgICAucmVwbGFjZSgnaHInLCBocilcbiAgICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0oPzpcXFxcc3wkKScpXG4gICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgLnJlcGxhY2UoJ2NvZGUnLCAnKD86IHs0fXwgezAsM31cXHQpW15cXFxcbl0nKVxuICAgIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSkgJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKSAvLyB0YWJsZXMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBibG9ja0dmbSA9IHtcbiAgICAuLi5ibG9ja05vcm1hbCxcbiAgICB0YWJsZTogZ2ZtVGFibGUsXG4gICAgcGFyYWdyYXBoOiBlZGl0KF9wYXJhZ3JhcGgpXG4gICAgICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgICAgICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0oPzpcXFxcc3wkKScpXG4gICAgICAgIC5yZXBsYWNlKCd8bGhlYWRpbmcnLCAnJykgLy8gc2V0ZXh0IGhlYWRpbmdzIGRvbid0IGludGVycnVwdCBjb21tb25tYXJrIHBhcmFncmFwaHNcbiAgICAgICAgLnJlcGxhY2UoJ3RhYmxlJywgZ2ZtVGFibGUpIC8vIGludGVycnVwdCBwYXJhZ3JhcGhzIHdpdGggdGFibGVcbiAgICAgICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgICAgIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgICAgICAgLnJlcGxhY2UoJ2xpc3QnLCAnIHswLDN9KD86WyorLV18MVsuKV0pICcpIC8vIG9ubHkgbGlzdHMgc3RhcnRpbmcgZnJvbSAxIGNhbiBpbnRlcnJ1cHRcbiAgICAgICAgLnJlcGxhY2UoJ2h0bWwnLCAnPC8/KD86dGFnKSg/OiArfFxcXFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKScpXG4gICAgICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKSAvLyBwYXJzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIFBlZGFudGljIGdyYW1tYXIgKG9yaWdpbmFsIEpvaG4gR3J1YmVyJ3MgbG9vc2UgbWFya2Rvd24gc3BlY2lmaWNhdGlvbilcbiAqL1xuY29uc3QgYmxvY2tQZWRhbnRpYyA9IHtcbiAgICAuLi5ibG9ja05vcm1hbCxcbiAgICBodG1sOiBlZGl0KCdeICooPzpjb21tZW50ICooPzpcXFxcbnxcXFxccyokKSdcbiAgICAgICAgKyAnfDwodGFnKVtcXFxcc1xcXFxTXSs/PC9cXFxcMT4gKig/OlxcXFxuezIsfXxcXFxccyokKScgLy8gY2xvc2VkIHRhZ1xuICAgICAgICArICd8PHRhZyg/OlwiW15cIl0qXCJ8XFwnW15cXCddKlxcJ3xcXFxcc1teXFwnXCIvPlxcXFxzXSopKj8vPz4gKig/OlxcXFxuezIsfXxcXFxccyokKSknKVxuICAgICAgICAucmVwbGFjZSgnY29tbWVudCcsIF9jb21tZW50KVxuICAgICAgICAucmVwbGFjZSgvdGFnL2csICcoPyEoPzonXG4gICAgICAgICsgJ2F8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWInXG4gICAgICAgICsgJ3xzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpJ1xuICAgICAgICArICdcXFxcYilcXFxcdysoPyE6fFteXFxcXHdcXFxcc0BdKkApXFxcXGInKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbiAgICBkZWY6IC9eICpcXFsoW15cXF1dKylcXF06ICo8PyhbXlxccz5dKyk+Pyg/OiArKFtcIihdW15cXG5dK1tcIildKSk/ICooPzpcXG4rfCQpLyxcbiAgICBoZWFkaW5nOiAvXigjezEsNn0pKC4qKSg/Olxcbit8JCkvLFxuICAgIGZlbmNlczogbm9vcFRlc3QsIC8vIGZlbmNlcyBub3Qgc3VwcG9ydGVkXG4gICAgbGhlYWRpbmc6IC9eKC4rPylcXG4gezAsM30oPSt8LSspICooPzpcXG4rfCQpLyxcbiAgICBwYXJhZ3JhcGg6IGVkaXQoX3BhcmFncmFwaClcbiAgICAgICAgLnJlcGxhY2UoJ2hyJywgaHIpXG4gICAgICAgIC5yZXBsYWNlKCdoZWFkaW5nJywgJyAqI3sxLDZ9ICpbXlxcbl0nKVxuICAgICAgICAucmVwbGFjZSgnbGhlYWRpbmcnLCBsaGVhZGluZylcbiAgICAgICAgLnJlcGxhY2UoJ3x0YWJsZScsICcnKVxuICAgICAgICAucmVwbGFjZSgnYmxvY2txdW90ZScsICcgezAsM30+JylcbiAgICAgICAgLnJlcGxhY2UoJ3xmZW5jZXMnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ3xsaXN0JywgJycpXG4gICAgICAgIC5yZXBsYWNlKCd8aHRtbCcsICcnKVxuICAgICAgICAucmVwbGFjZSgnfHRhZycsICcnKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIElubGluZS1MZXZlbCBHcmFtbWFyXG4gKi9cbmNvbnN0IGVzY2FwZSQxID0gL15cXFxcKFshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXFxdXFxcXF5fYHt8fX5dKS87XG5jb25zdCBpbmxpbmVDb2RlID0gL14oYCspKFteYF18W15gXVtcXHNcXFNdKj9bXmBdKVxcMSg/IWApLztcbmNvbnN0IGJyID0gL14oIHsyLH18XFxcXClcXG4oPyFcXHMqJCkvO1xuY29uc3QgaW5saW5lVGV4dCA9IC9eKGArfFteYF0pKD86KD89IHsyLH1cXG4pfFtcXHNcXFNdKj8oPzooPz1bXFxcXDwhXFxbYCpfXXxcXGJffCQpfFteIF0oPz0gezIsfVxcbikpKS87XG4vLyBsaXN0IG9mIHVuaWNvZGUgcHVuY3R1YXRpb24gbWFya3MsIHBsdXMgYW55IG1pc3NpbmcgY2hhcmFjdGVycyBmcm9tIENvbW1vbk1hcmsgc3BlY1xuY29uc3QgX3B1bmN0dWF0aW9uID0gL1tcXHB7UH1cXHB7U31dL3U7XG5jb25zdCBfcHVuY3R1YXRpb25PclNwYWNlID0gL1tcXHNcXHB7UH1cXHB7U31dL3U7XG5jb25zdCBfbm90UHVuY3R1YXRpb25PclNwYWNlID0gL1teXFxzXFxwe1B9XFxwe1N9XS91O1xuY29uc3QgcHVuY3R1YXRpb24gPSBlZGl0KC9eKCg/IVsqX10pcHVuY3RTcGFjZSkvLCAndScpXG4gICAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZSkuZ2V0UmVnZXgoKTtcbi8vIEdGTSBhbGxvd3MgfiBpbnNpZGUgc3Ryb25nIGFuZCBlbSBmb3Igc3RyaWtldGhyb3VnaFxuY29uc3QgX3B1bmN0dWF0aW9uR2ZtU3Ryb25nRW0gPSAvKD8hfilbXFxwe1B9XFxwe1N9XS91O1xuY29uc3QgX3B1bmN0dWF0aW9uT3JTcGFjZUdmbVN0cm9uZ0VtID0gLyg/IX4pW1xcc1xccHtQfVxccHtTfV0vdTtcbmNvbnN0IF9ub3RQdW5jdHVhdGlvbk9yU3BhY2VHZm1TdHJvbmdFbSA9IC8oPzpbXlxcc1xccHtQfVxccHtTfV18fikvdTtcbi8vIHNlcXVlbmNlcyBlbSBzaG91bGQgc2tpcCBvdmVyIFt0aXRsZV0obGluayksIGBjb2RlYCwgPGh0bWw+XG5jb25zdCBibG9ja1NraXAgPSAvXFxbW15bXFxdXSo/XFxdXFwoKD86XFxcXC58W15cXFxcXFwoXFwpXXxcXCgoPzpcXFxcLnxbXlxcXFxcXChcXCldKSpcXCkpKlxcKXxgW15gXSo/YHw8W148Pl0qPz4vZztcbmNvbnN0IGVtU3Ryb25nTERlbGltQ29yZSA9IC9eKD86XFwqKyg/OigoPyFcXCopcHVuY3QpfFteXFxzKl0pKXxeXysoPzooKD8hXylwdW5jdCl8KFteXFxzX10pKS87XG5jb25zdCBlbVN0cm9uZ0xEZWxpbSA9IGVkaXQoZW1TdHJvbmdMRGVsaW1Db3JlLCAndScpXG4gICAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGVtU3Ryb25nTERlbGltR2ZtID0gZWRpdChlbVN0cm9uZ0xEZWxpbUNvcmUsICd1JylcbiAgICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uR2ZtU3Ryb25nRW0pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBlbVN0cm9uZ1JEZWxpbUFzdENvcmUgPSAnXlteXypdKj9fX1teXypdKj9cXFxcKlteXypdKj8oPz1fXyknIC8vIFNraXAgb3JwaGFuIGluc2lkZSBzdHJvbmdcbiAgICArICd8W14qXSsoPz1bXipdKScgLy8gQ29uc3VtZSB0byBkZWxpbVxuICAgICsgJ3woPyFcXFxcKilwdW5jdChcXFxcKispKD89W1xcXFxzXXwkKScgLy8gKDEpICMqKiogY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8bm90UHVuY3RTcGFjZShcXFxcKispKD8hXFxcXCopKD89cHVuY3RTcGFjZXwkKScgLy8gKDIpIGEqKiojLCBhKioqIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4gICAgKyAnfCg/IVxcXFwqKXB1bmN0U3BhY2UoXFxcXCorKSg/PW5vdFB1bmN0U3BhY2UpJyAvLyAoMykgIyoqKmEsICoqKmEgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbiAgICArICd8W1xcXFxzXShcXFxcKispKD8hXFxcXCopKD89cHVuY3QpJyAvLyAoNCkgKioqIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3woPyFcXFxcKilwdW5jdChcXFxcKispKD8hXFxcXCopKD89cHVuY3QpJyAvLyAoNSkgIyoqKiMgY2FuIGJlIGVpdGhlciBMZWZ0IG9yIFJpZ2h0IERlbGltaXRlclxuICAgICsgJ3xub3RQdW5jdFNwYWNlKFxcXFwqKykoPz1ub3RQdW5jdFNwYWNlKSc7IC8vICg2KSBhKioqYSBjYW4gYmUgZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1pdGVyXG5jb25zdCBlbVN0cm9uZ1JEZWxpbUFzdCA9IGVkaXQoZW1TdHJvbmdSRGVsaW1Bc3RDb3JlLCAnZ3UnKVxuICAgIC5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csIF9ub3RQdW5jdHVhdGlvbk9yU3BhY2UpXG4gICAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZSlcbiAgICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgZW1TdHJvbmdSRGVsaW1Bc3RHZm0gPSBlZGl0KGVtU3Ryb25nUkRlbGltQXN0Q29yZSwgJ2d1JylcbiAgICAucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLCBfbm90UHVuY3R1YXRpb25PclNwYWNlR2ZtU3Ryb25nRW0pXG4gICAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZUdmbVN0cm9uZ0VtKVxuICAgIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb25HZm1TdHJvbmdFbSlcbiAgICAuZ2V0UmVnZXgoKTtcbi8vICg2KSBOb3QgYWxsb3dlZCBmb3IgX1xuY29uc3QgZW1TdHJvbmdSRGVsaW1VbmQgPSBlZGl0KCdeW15fKl0qP1xcXFwqXFxcXCpbXl8qXSo/X1teXypdKj8oPz1cXFxcKlxcXFwqKScgLy8gU2tpcCBvcnBoYW4gaW5zaWRlIHN0cm9uZ1xuICAgICsgJ3xbXl9dKyg/PVteX10pJyAvLyBDb25zdW1lIHRvIGRlbGltXG4gICAgKyAnfCg/IV8pcHVuY3QoXyspKD89W1xcXFxzXXwkKScgLy8gKDEpICNfX18gY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8bm90UHVuY3RTcGFjZShfKykoPyFfKSg/PXB1bmN0U3BhY2V8JCknIC8vICgyKSBhX19fIywgYV9fXyBjYW4gb25seSBiZSBhIFJpZ2h0IERlbGltaXRlclxuICAgICsgJ3woPyFfKXB1bmN0U3BhY2UoXyspKD89bm90UHVuY3RTcGFjZSknIC8vICgzKSAjX19fYSwgX19fYSBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3xbXFxcXHNdKF8rKSg/IV8pKD89cHVuY3QpJyAvLyAoNCkgX19fIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3woPyFfKXB1bmN0KF8rKSg/IV8pKD89cHVuY3QpJywgJ2d1JykgLy8gKDUpICNfX18jIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcbiAgICAucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLCBfbm90UHVuY3R1YXRpb25PclNwYWNlKVxuICAgIC5yZXBsYWNlKC9wdW5jdFNwYWNlL2csIF9wdW5jdHVhdGlvbk9yU3BhY2UpXG4gICAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGFueVB1bmN0dWF0aW9uID0gZWRpdCgvXFxcXChwdW5jdCkvLCAnZ3UnKVxuICAgIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBhdXRvbGluayA9IGVkaXQoL148KHNjaGVtZTpbXlxcc1xceDAwLVxceDFmPD5dKnxlbWFpbCk+LylcbiAgICAucmVwbGFjZSgnc2NoZW1lJywgL1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vKVxuICAgIC5yZXBsYWNlKCdlbWFpbCcsIC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgX2lubGluZUNvbW1lbnQgPSBlZGl0KF9jb21tZW50KS5yZXBsYWNlKCcoPzotLT58JCknLCAnLS0+JykuZ2V0UmVnZXgoKTtcbmNvbnN0IHRhZyA9IGVkaXQoJ15jb21tZW50J1xuICAgICsgJ3xePC9bYS16QS1aXVtcXFxcdzotXSpcXFxccyo+JyAvLyBzZWxmLWNsb3NpbmcgdGFnXG4gICAgKyAnfF48W2EtekEtWl1bXFxcXHctXSooPzphdHRyaWJ1dGUpKj9cXFxccyovPz4nIC8vIG9wZW4gdGFnXG4gICAgKyAnfF48XFxcXD9bXFxcXHNcXFxcU10qP1xcXFw/PicgLy8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgZS5nLiA8P3BocCA/PlxuICAgICsgJ3xePCFbYS16QS1aXStcXFxcc1tcXFxcc1xcXFxTXSo/PicgLy8gZGVjbGFyYXRpb24sIGUuZy4gPCFET0NUWVBFIGh0bWw+XG4gICAgKyAnfF48IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/XFxcXF1cXFxcXT4nKSAvLyBDREFUQSBzZWN0aW9uXG4gICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBfaW5saW5lQ29tbWVudClcbiAgICAucmVwbGFjZSgnYXR0cmlidXRlJywgL1xccytbYS16QS1aOl9dW1xcdy46LV0qKD86XFxzKj1cXHMqXCJbXlwiXSpcInxcXHMqPVxccyonW14nXSonfFxccyo9XFxzKlteXFxzXCInPTw+YF0rKT8vKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgX2lubGluZUxhYmVsID0gLyg/OlxcWyg/OlxcXFwufFteXFxbXFxdXFxcXF0pKlxcXXxcXFxcLnxgW15gXSpgfFteXFxbXFxdXFxcXGBdKSo/LztcbmNvbnN0IGxpbmsgPSBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFwoXFxzKihocmVmKSg/OlxccysodGl0bGUpKT9cXHMqXFwpLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgLnJlcGxhY2UoJ2hyZWYnLCAvPCg/OlxcXFwufFteXFxuPD5cXFxcXSkrPnxbXlxcc1xceDAwLVxceDFmXSovKVxuICAgIC5yZXBsYWNlKCd0aXRsZScsIC9cIig/OlxcXFxcIj98W15cIlxcXFxdKSpcInwnKD86XFxcXCc/fFteJ1xcXFxdKSonfFxcKCg/OlxcXFxcXCk/fFteKVxcXFxdKSpcXCkvKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgcmVmbGluayA9IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXFsocmVmKVxcXS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAgIC5yZXBsYWNlKCdyZWYnLCBfYmxvY2tMYWJlbClcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IG5vbGluayA9IGVkaXQoL14hP1xcWyhyZWYpXFxdKD86XFxbXFxdKT8vKVxuICAgIC5yZXBsYWNlKCdyZWYnLCBfYmxvY2tMYWJlbClcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IHJlZmxpbmtTZWFyY2ggPSBlZGl0KCdyZWZsaW5rfG5vbGluayg/IVxcXFwoKScsICdnJylcbiAgICAucmVwbGFjZSgncmVmbGluaycsIHJlZmxpbmspXG4gICAgLnJlcGxhY2UoJ25vbGluaycsIG5vbGluaylcbiAgICAuZ2V0UmVnZXgoKTtcbi8qKlxuICogTm9ybWFsIElubGluZSBHcmFtbWFyXG4gKi9cbmNvbnN0IGlubGluZU5vcm1hbCA9IHtcbiAgICBfYmFja3BlZGFsOiBub29wVGVzdCwgLy8gb25seSB1c2VkIGZvciBHRk0gdXJsXG4gICAgYW55UHVuY3R1YXRpb24sXG4gICAgYXV0b2xpbmssXG4gICAgYmxvY2tTa2lwLFxuICAgIGJyLFxuICAgIGNvZGU6IGlubGluZUNvZGUsXG4gICAgZGVsOiBub29wVGVzdCxcbiAgICBlbVN0cm9uZ0xEZWxpbSxcbiAgICBlbVN0cm9uZ1JEZWxpbUFzdCxcbiAgICBlbVN0cm9uZ1JEZWxpbVVuZCxcbiAgICBlc2NhcGU6IGVzY2FwZSQxLFxuICAgIGxpbmssXG4gICAgbm9saW5rLFxuICAgIHB1bmN0dWF0aW9uLFxuICAgIHJlZmxpbmssXG4gICAgcmVmbGlua1NlYXJjaCxcbiAgICB0YWcsXG4gICAgdGV4dDogaW5saW5lVGV4dCxcbiAgICB1cmw6IG5vb3BUZXN0LFxufTtcbi8qKlxuICogUGVkYW50aWMgSW5saW5lIEdyYW1tYXJcbiAqL1xuY29uc3QgaW5saW5lUGVkYW50aWMgPSB7XG4gICAgLi4uaW5saW5lTm9ybWFsLFxuICAgIGxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXCgoLio/KVxcKS8pXG4gICAgICAgIC5yZXBsYWNlKCdsYWJlbCcsIF9pbmxpbmVMYWJlbClcbiAgICAgICAgLmdldFJlZ2V4KCksXG4gICAgcmVmbGluazogZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxccypcXFsoW15cXF1dKilcXF0vKVxuICAgICAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgICAgIC5nZXRSZWdleCgpLFxufTtcbi8qKlxuICogR0ZNIElubGluZSBHcmFtbWFyXG4gKi9cbmNvbnN0IGlubGluZUdmbSA9IHtcbiAgICAuLi5pbmxpbmVOb3JtYWwsXG4gICAgZW1TdHJvbmdSRGVsaW1Bc3Q6IGVtU3Ryb25nUkRlbGltQXN0R2ZtLFxuICAgIGVtU3Ryb25nTERlbGltOiBlbVN0cm9uZ0xEZWxpbUdmbSxcbiAgICB1cmw6IGVkaXQoL14oKD86ZnRwfGh0dHBzPyk6XFwvXFwvfHd3d1xcLikoPzpbYS16QS1aMC05XFwtXStcXC4/KStbXlxcczxdKnxeZW1haWwvLCAnaScpXG4gICAgICAgIC5yZXBsYWNlKCdlbWFpbCcsIC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcXC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8pXG4gICAgICAgIC5nZXRSZWdleCgpLFxuICAgIF9iYWNrcGVkYWw6IC8oPzpbXj8hLiw6OypfJ1wifigpJl0rfFxcKFteKV0qXFwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJ1wifildKyg/ISQpKSsvLFxuICAgIGRlbDogL14ofn4/KSg/PVteXFxzfl0pKCg/OlxcXFwufFteXFxcXF0pKj8oPzpcXFxcLnxbXlxcc35cXFxcXSkpXFwxKD89W15+XXwkKS8sXG4gICAgdGV4dDogL14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cXG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCl8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKn5fXXxcXGJffGh0dHBzPzpcXC9cXC98ZnRwOlxcL1xcL3x3d3dcXC58JCl8W14gXSg/PSB7Mix9XFxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCkpKS8sXG59O1xuLyoqXG4gKiBHRk0gKyBMaW5lIEJyZWFrcyBJbmxpbmUgR3JhbW1hclxuICovXG5jb25zdCBpbmxpbmVCcmVha3MgPSB7XG4gICAgLi4uaW5saW5lR2ZtLFxuICAgIGJyOiBlZGl0KGJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICAgIHRleHQ6IGVkaXQoaW5saW5lR2ZtLnRleHQpXG4gICAgICAgIC5yZXBsYWNlKCdcXFxcYl8nLCAnXFxcXGJffCB7Mix9XFxcXG4nKVxuICAgICAgICAucmVwbGFjZSgvXFx7MixcXH0vZywgJyonKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIGV4cG9ydHNcbiAqL1xuY29uc3QgYmxvY2sgPSB7XG4gICAgbm9ybWFsOiBibG9ja05vcm1hbCxcbiAgICBnZm06IGJsb2NrR2ZtLFxuICAgIHBlZGFudGljOiBibG9ja1BlZGFudGljLFxufTtcbmNvbnN0IGlubGluZSA9IHtcbiAgICBub3JtYWw6IGlubGluZU5vcm1hbCxcbiAgICBnZm06IGlubGluZUdmbSxcbiAgICBicmVha3M6IGlubGluZUJyZWFrcyxcbiAgICBwZWRhbnRpYzogaW5saW5lUGVkYW50aWMsXG59O1xuXG4vKipcbiAqIEhlbHBlcnNcbiAqL1xuY29uc3QgZXNjYXBlUmVwbGFjZW1lbnRzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7Jyxcbn07XG5jb25zdCBnZXRFc2NhcGVSZXBsYWNlbWVudCA9IChjaCkgPT4gZXNjYXBlUmVwbGFjZW1lbnRzW2NoXTtcbmZ1bmN0aW9uIGVzY2FwZShodG1sLCBlbmNvZGUpIHtcbiAgICBpZiAoZW5jb2RlKSB7XG4gICAgICAgIGlmIChvdGhlci5lc2NhcGVUZXN0LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sLnJlcGxhY2Uob3RoZXIuZXNjYXBlUmVwbGFjZSwgZ2V0RXNjYXBlUmVwbGFjZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAob3RoZXIuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sLnJlcGxhY2Uob3RoZXIuZXNjYXBlUmVwbGFjZU5vRW5jb2RlLCBnZXRFc2NhcGVSZXBsYWNlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGh0bWw7XG59XG5mdW5jdGlvbiBjbGVhblVybChocmVmKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaHJlZiA9IGVuY29kZVVSSShocmVmKS5yZXBsYWNlKG90aGVyLnBlcmNlbnREZWNvZGUsICclJyk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBocmVmO1xufVxuZnVuY3Rpb24gc3BsaXRDZWxscyh0YWJsZVJvdywgY291bnQpIHtcbiAgICAvLyBlbnN1cmUgdGhhdCBldmVyeSBjZWxsLWRlbGltaXRpbmcgcGlwZSBoYXMgYSBzcGFjZVxuICAgIC8vIGJlZm9yZSBpdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGFuIGVzY2FwZWQgcGlwZVxuICAgIGNvbnN0IHJvdyA9IHRhYmxlUm93LnJlcGxhY2Uob3RoZXIuZmluZFBpcGUsIChtYXRjaCwgb2Zmc2V0LCBzdHIpID0+IHtcbiAgICAgICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGN1cnIgPSBvZmZzZXQ7XG4gICAgICAgIHdoaWxlICgtLWN1cnIgPj0gMCAmJiBzdHJbY3Vycl0gPT09ICdcXFxcJylcbiAgICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZDtcbiAgICAgICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgICAgICAgIC8vIG9kZCBudW1iZXIgb2Ygc2xhc2hlcyBtZWFucyB8IGlzIGVzY2FwZWRcbiAgICAgICAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IGFsb25lXG4gICAgICAgICAgICByZXR1cm4gJ3wnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gYWRkIHNwYWNlIGJlZm9yZSB1bmVzY2FwZWQgfFxuICAgICAgICAgICAgcmV0dXJuICcgfCc7XG4gICAgICAgIH1cbiAgICB9KSwgY2VsbHMgPSByb3cuc3BsaXQob3RoZXIuc3BsaXRQaXBlKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gRmlyc3QvbGFzdCBjZWxsIGluIGEgcm93IGNhbm5vdCBiZSBlbXB0eSBpZiBpdCBoYXMgbm8gbGVhZGluZy90cmFpbGluZyBwaXBlXG4gICAgaWYgKCFjZWxsc1swXS50cmltKCkpIHtcbiAgICAgICAgY2VsbHMuc2hpZnQoKTtcbiAgICB9XG4gICAgaWYgKGNlbGxzLmxlbmd0aCA+IDAgJiYgIWNlbGxzLmF0KC0xKT8udHJpbSgpKSB7XG4gICAgICAgIGNlbGxzLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoY291bnQpIHtcbiAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IGNvdW50KSB7XG4gICAgICAgICAgICBjZWxscy5zcGxpY2UoY291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKGNlbGxzLmxlbmd0aCA8IGNvdW50KVxuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgcGVyIHRoZSBnZm0gc3BlY1xuICAgICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLnRyaW0oKS5yZXBsYWNlKG90aGVyLnNsYXNoUGlwZSwgJ3wnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGxzO1xufVxuLyoqXG4gKiBSZW1vdmUgdHJhaWxpbmcgJ2Mncy4gRXF1aXZhbGVudCB0byBzdHIucmVwbGFjZSgvYyokLywgJycpLlxuICogL2MqJC8gaXMgdnVsbmVyYWJsZSB0byBSRURPUy5cbiAqXG4gKiBAcGFyYW0gc3RyXG4gKiBAcGFyYW0gY1xuICogQHBhcmFtIGludmVydCBSZW1vdmUgc3VmZml4IG9mIG5vbi1jIGNoYXJzIGluc3RlYWQuIERlZmF1bHQgZmFsc2V5LlxuICovXG5mdW5jdGlvbiBydHJpbShzdHIsIGMsIGludmVydCkge1xuICAgIGNvbnN0IGwgPSBzdHIubGVuZ3RoO1xuICAgIGlmIChsID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLy8gTGVuZ3RoIG9mIHN1ZmZpeCBtYXRjaGluZyB0aGUgaW52ZXJ0IGNvbmRpdGlvbi5cbiAgICBsZXQgc3VmZkxlbiA9IDA7XG4gICAgLy8gU3RlcCBsZWZ0IHVudGlsIHdlIGZhaWwgdG8gbWF0Y2ggdGhlIGludmVydCBjb25kaXRpb24uXG4gICAgd2hpbGUgKHN1ZmZMZW4gPCBsKSB7XG4gICAgICAgIGNvbnN0IGN1cnJDaGFyID0gc3RyLmNoYXJBdChsIC0gc3VmZkxlbiAtIDEpO1xuICAgICAgICBpZiAoY3VyckNoYXIgPT09IGMgJiYgdHJ1ZSkge1xuICAgICAgICAgICAgc3VmZkxlbisrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0ci5zbGljZSgwLCBsIC0gc3VmZkxlbik7XG59XG5mdW5jdGlvbiBmaW5kQ2xvc2luZ0JyYWNrZXQoc3RyLCBiKSB7XG4gICAgaWYgKHN0ci5pbmRleE9mKGJbMV0pID09PSAtMSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGxldCBsZXZlbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHN0cltpXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RyW2ldID09PSBiWzBdKSB7XG4gICAgICAgICAgICBsZXZlbCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0cltpXSA9PT0gYlsxXSkge1xuICAgICAgICAgICAgbGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChsZXZlbCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIG91dHB1dExpbmsoY2FwLCBsaW5rLCByYXcsIGxleGVyLCBydWxlcykge1xuICAgIGNvbnN0IGhyZWYgPSBsaW5rLmhyZWY7XG4gICAgY29uc3QgdGl0bGUgPSBsaW5rLnRpdGxlIHx8IG51bGw7XG4gICAgY29uc3QgdGV4dCA9IGNhcFsxXS5yZXBsYWNlKHJ1bGVzLm90aGVyLm91dHB1dExpbmtSZXBsYWNlLCAnJDEnKTtcbiAgICBpZiAoY2FwWzBdLmNoYXJBdCgwKSAhPT0gJyEnKSB7XG4gICAgICAgIGxleGVyLnN0YXRlLmluTGluayA9IHRydWU7XG4gICAgICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgcmF3LFxuICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHRva2VuczogbGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICB9O1xuICAgICAgICBsZXhlci5zdGF0ZS5pbkxpbmsgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICByYXcsXG4gICAgICAgIGhyZWYsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB0ZXh0LFxuICAgIH07XG59XG5mdW5jdGlvbiBpbmRlbnRDb2RlQ29tcGVuc2F0aW9uKHJhdywgdGV4dCwgcnVsZXMpIHtcbiAgICBjb25zdCBtYXRjaEluZGVudFRvQ29kZSA9IHJhdy5tYXRjaChydWxlcy5vdGhlci5pbmRlbnRDb2RlQ29tcGVuc2F0aW9uKTtcbiAgICBpZiAobWF0Y2hJbmRlbnRUb0NvZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGNvbnN0IGluZGVudFRvQ29kZSA9IG1hdGNoSW5kZW50VG9Db2RlWzFdO1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hJbmRlbnRJbk5vZGUgPSBub2RlLm1hdGNoKHJ1bGVzLm90aGVyLmJlZ2lubmluZ1NwYWNlKTtcbiAgICAgICAgaWYgKG1hdGNoSW5kZW50SW5Ob2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbaW5kZW50SW5Ob2RlXSA9IG1hdGNoSW5kZW50SW5Ob2RlO1xuICAgICAgICBpZiAoaW5kZW50SW5Ob2RlLmxlbmd0aCA+PSBpbmRlbnRUb0NvZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5zbGljZShpbmRlbnRUb0NvZGUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vKipcbiAqIFRva2VuaXplclxuICovXG5jbGFzcyBfVG9rZW5pemVyIHtcbiAgICBvcHRpb25zO1xuICAgIHJ1bGVzOyAvLyBzZXQgYnkgdGhlIGxleGVyXG4gICAgbGV4ZXI7IC8vIHNldCBieSB0aGUgbGV4ZXJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgIH1cbiAgICBzcGFjZShzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCAmJiBjYXBbMF0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3BhY2UnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb2RlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gY2FwWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5jb2RlUmVtb3ZlSW5kZW50LCAnJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICBjb2RlQmxvY2tTdHlsZTogJ2luZGVudGVkJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgICAgICAgICAgICAgID8gcnRyaW0odGV4dCwgJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIDogdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmVuY2VzKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGNhcFswXTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBpbmRlbnRDb2RlQ29tcGVuc2F0aW9uKHJhdywgY2FwWzNdIHx8ICcnLCB0aGlzLnJ1bGVzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICBsYW5nOiBjYXBbMl0gPyBjYXBbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogY2FwWzJdLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGhlYWRpbmcoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gY2FwWzJdLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyAjc1xuICAgICAgICAgICAgaWYgKHRoaXMucnVsZXMub3RoZXIuZW5kaW5nSGFzaC50ZXN0KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHJ0cmltKHRleHQsICcjJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJpbW1lZC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0cmltbWVkIHx8IHRoaXMucnVsZXMub3RoZXIuZW5kaW5nU3BhY2VDaGFyLnRlc3QodHJpbW1lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29tbW9uTWFyayByZXF1aXJlcyBzcGFjZSBiZWZvcmUgdHJhaWxpbmcgI3NcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRyaW1tZWQudHJpbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIGRlcHRoOiBjYXBbMV0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZSh0ZXh0KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaHIoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdocicsXG4gICAgICAgICAgICAgICAgcmF3OiBydHJpbShjYXBbMF0sICdcXG4nKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmxvY2txdW90ZShzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgbGV0IGxpbmVzID0gcnRyaW0oY2FwWzBdLCAnXFxuJykuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgbGV0IHJhdyA9ICcnO1xuICAgICAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IFtdO1xuICAgICAgICAgICAgd2hpbGUgKGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5CbG9ja3F1b3RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExpbmVzID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBsaW5lcyB1cCB0byBhIGNvbnRpbnVhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU3RhcnQudGVzdChsaW5lc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lcy5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluQmxvY2txdW90ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWluQmxvY2txdW90ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmVzLnB1c2gobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmF3ID0gY3VycmVudExpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUZXh0ID0gY3VycmVudFJhd1xuICAgICAgICAgICAgICAgICAgICAvLyBwcmVjZWRlIHNldGV4dCBjb250aW51YXRpb24gd2l0aCA0IHNwYWNlcyBzbyBpdCBpc24ndCBhIHNldGV4dFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTZXRleHRSZXBsYWNlLCAnXFxuICAgICQxJylcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTIsICcnKTtcbiAgICAgICAgICAgICAgICByYXcgPSByYXcgPyBgJHtyYXd9XFxuJHtjdXJyZW50UmF3fWAgOiBjdXJyZW50UmF3O1xuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0ID8gYCR7dGV4dH1cXG4ke2N1cnJlbnRUZXh0fWAgOiBjdXJyZW50VGV4dDtcbiAgICAgICAgICAgICAgICAvLyBwYXJzZSBibG9ja3F1b3RlIGxpbmVzIGFzIHRvcCBsZXZlbCB0b2tlbnNcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBwYXJhZ3JhcGhzIGlmIHRoaXMgaXMgYSBjb250aW51YXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmxleGVyLnN0YXRlLnRvcDtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5ibG9ja1Rva2VucyhjdXJyZW50VGV4dCwgdG9rZW5zLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRvcDtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250aW51YXRpb24gdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2NvZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrcXVvdGUgY29udGludWF0aW9uIGNhbm5vdCBiZSBwcmVjZWRlZCBieSBhIGNvZGUgYmxvY2tcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrcXVvdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgY29udGludWF0aW9uIGluIG5lc3RlZCBibG9ja3F1b3RlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFRva2VuID0gbGFzdFRva2VuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gb2xkVG9rZW4ucmF3ICsgJ1xcbicgKyBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLmJsb2NrcXVvdGUobmV3VGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPSBuZXdUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgcmF3ID0gcmF3LnN1YnN0cmluZygwLCByYXcubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIG9sZFRva2VuLnRleHQubGVuZ3RoKSArIG5ld1Rva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIGNvbnRpbnVhdGlvbiBpbiBuZXN0ZWQgbGlzdFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRUb2tlbiA9IGxhc3RUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dCA9IG9sZFRva2VuLnJhdyArICdcXG4nICsgbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5saXN0KG5ld1RleHQpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbmV3VG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHJhdyA9IHJhdy5zdWJzdHJpbmcoMCwgcmF3Lmxlbmd0aCAtIGxhc3RUb2tlbi5yYXcubGVuZ3RoKSArIG5ld1Rva2VuLnJhdztcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbmV3VGV4dC5zdWJzdHJpbmcodG9rZW5zLmF0KC0xKS5yYXcubGVuZ3RoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGUnLFxuICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGlzdChzcmMpIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGxldCBidWxsID0gY2FwWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIHJhdzogJycsXG4gICAgICAgICAgICAgICAgb3JkZXJlZDogaXNvcmRlcmVkLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBpc29yZGVyZWQgPyArYnVsbC5zbGljZSgwLCAtMSkgOiAnJyxcbiAgICAgICAgICAgICAgICBsb29zZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBgXFxcXGR7MSw5fVxcXFwke2J1bGwuc2xpY2UoLTEpfWAgOiBgXFxcXCR7YnVsbH1gO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBidWxsIDogJ1sqKy1dJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCBuZXh0IGxpc3QgaXRlbVxuICAgICAgICAgICAgY29uc3QgaXRlbVJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5saXN0SXRlbVJlZ2V4KGJ1bGwpO1xuICAgICAgICAgICAgbGV0IGVuZHNXaXRoQmxhbmtMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjdXJyZW50IGJ1bGxldCBwb2ludCBjYW4gc3RhcnQgYSBuZXcgTGlzdCBJdGVtXG4gICAgICAgICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEVhcmx5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHJhdyA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtQ29udGVudHMgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoIShjYXAgPSBpdGVtUmVnZXguZXhlYyhzcmMpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChzcmMpKSB7IC8vIEVuZCBsaXN0IGlmIGJ1bGxldCB3YXMgYWN0dWFsbHkgSFIgKHBvc3NpYmx5IG1vdmUgaW50byBpdGVtUmVnZXg/KVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmF3ID0gY2FwWzBdO1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcocmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXBbMl0uc3BsaXQoJ1xcbicsIDEpWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhYnMsICh0KSA9PiAnICcucmVwZWF0KDMgKiB0Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0TGluZSA9IHNyYy5zcGxpdCgnXFxuJywgMSlbMF07XG4gICAgICAgICAgICAgICAgbGV0IGJsYW5rTGluZSA9ICFsaW5lLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBsZXQgaW5kZW50ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db250ZW50cyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJsYW5rTGluZSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBjYXBbMV0ubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGNhcFsyXS5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpOyAvLyBGaW5kIGZpcnN0IG5vbi1zcGFjZSBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCA+IDQgPyAxIDogaW5kZW50OyAvLyBUcmVhdCBpbmRlbnRlZCBjb2RlIGJsb2NrcyAoPiA0IHNwYWNlcykgYXMgaGF2aW5nIG9ubHkgMSBpbmRlbnRcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS5zbGljZShpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gY2FwWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSAmJiB0aGlzLnJ1bGVzLm90aGVyLmJsYW5rTGluZS50ZXN0KG5leHRMaW5lKSkgeyAvLyBJdGVtcyBiZWdpbiB3aXRoIGF0IG1vc3Qgb25lIGJsYW5rIGxpbmVcbiAgICAgICAgICAgICAgICAgICAgcmF3ICs9IG5leHRMaW5lICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcobmV4dExpbmUubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZEVhcmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbmRFYXJseSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0QnVsbGV0UmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLm5leHRCdWxsZXRSZWdleChpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoclJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5oclJlZ2V4KGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlbmNlc0JlZ2luUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmZlbmNlc0JlZ2luUmVnZXgoaW5kZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGluZ0JlZ2luUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmhlYWRpbmdCZWdpblJlZ2V4KGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxCZWdpblJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5odG1sQmVnaW5SZWdleChpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIExpc3QgSXRlbVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYXdMaW5lID0gc3JjLnNwbGl0KCdcXG4nLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0TGluZVdpdGhvdXRUYWJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUgPSByYXdMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmUtYWxpZ24gdG8gZm9sbG93IGNvbW1vbm1hcmsgbmVzdGluZyBydWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMaW5lID0gbmV4dExpbmUucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlTmVzdGluZywgJyAgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmVXaXRob3V0VGFicyA9IG5leHRMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmVXaXRob3V0VGFicyA9IG5leHRMaW5lLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCAnICAgICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBjb2RlIGZlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlbmNlc0JlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgbmV3IGhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkaW5nQmVnaW5SZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBzdGFydCBvZiBodG1sIGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbEJlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgbmV3IGJ1bGxldFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRCdWxsZXRSZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSG9yaXpvbnRhbCBydWxlIGZvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHJSZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMaW5lV2l0aG91dFRhYnMuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSA+PSBpbmRlbnQgfHwgIW5leHRMaW5lLnRyaW0oKSkgeyAvLyBEZWRlbnQgaWYgcG9zc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29udGVudHMgKz0gJ1xcbicgKyBuZXh0TGluZVdpdGhvdXRUYWJzLnNsaWNlKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZW5vdWdoIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyYWdyYXBoIGNvbnRpbnVhdGlvbiB1bmxlc3MgbGFzdCBsaW5lIHdhcyBhIGRpZmZlcmVudCBibG9jayBsZXZlbCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYkNoYXJHbG9iYWwsICcgICAgJykuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSA+PSA0KSB7IC8vIGluZGVudGVkIGNvZGUgYmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZW5jZXNCZWdpblJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkaW5nQmVnaW5SZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHJSZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29udGVudHMgKz0gJ1xcbicgKyBuZXh0TGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxhbmtMaW5lICYmICFuZXh0TGluZS50cmltKCkpIHsgLy8gQ2hlY2sgaWYgY3VycmVudCBsaW5lIGlzIGJsYW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhbmtMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdyArPSByYXdMaW5lICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHJhd0xpbmUubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbmV4dExpbmVXaXRob3V0VGFicy5zbGljZShpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbGlzdC5sb29zZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgaXRlbSBlbmRlZCB3aXRoIGEgYmxhbmsgbGluZSwgdGhlIGxpc3QgaXMgbG9vc2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZHNXaXRoQmxhbmtMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Lmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnJ1bGVzLm90aGVyLmRvdWJsZUJsYW5rTGluZS50ZXN0KHJhdykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHNXaXRoQmxhbmtMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgaXN0YXNrID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgaXNjaGVja2VkO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciB0YXNrIGxpc3QgaXRlbXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdmbSkge1xuICAgICAgICAgICAgICAgICAgICBpc3Rhc2sgPSB0aGlzLnJ1bGVzLm90aGVyLmxpc3RJc1Rhc2suZXhlYyhpdGVtQ29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXN0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc2NoZWNrZWQgPSBpc3Rhc2tbMF0gIT09ICdbIF0gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db250ZW50cyA9IGl0ZW1Db250ZW50cy5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VUYXNrLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbScsXG4gICAgICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICAgICAgdGFzazogISFpc3Rhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGlzY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtQ29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIHRva2VuczogW10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGlzdC5yYXcgKz0gcmF3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRG8gbm90IGNvbnN1bWUgbmV3bGluZXMgYXQgZW5kIG9mIGZpbmFsIGl0ZW0uIEFsdGVybmF0aXZlbHksIG1ha2UgaXRlbVJlZ2V4ICpzdGFydCogd2l0aCBhbnkgbmV3bGluZXMgdG8gc2ltcGxpZnkvc3BlZWQgdXAgZW5kc1dpdGhCbGFua0xpbmUgbG9naWNcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJdGVtID0gbGlzdC5pdGVtcy5hdCgtMSk7XG4gICAgICAgICAgICBpZiAobGFzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBsYXN0SXRlbS5yYXcgPSBsYXN0SXRlbS5yYXcudHJpbUVuZCgpO1xuICAgICAgICAgICAgICAgIGxhc3RJdGVtLnRleHQgPSBsYXN0SXRlbS50ZXh0LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGxpc3Qgc2luY2UgdGhlcmUgd2VyZSBubyBpdGVtc1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpc3QucmF3ID0gbGlzdC5yYXcudHJpbUVuZCgpO1xuICAgICAgICAgICAgLy8gSXRlbSBjaGlsZCB0b2tlbnMgaGFuZGxlZCBoZXJlIGF0IGVuZCBiZWNhdXNlIHdlIG5lZWRlZCB0byBoYXZlIHRoZSBmaW5hbCBpdGVtIHRvIHRyaW0gaXQgZmlyc3RcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUudG9wID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGlzdC5pdGVtc1tpXS50b2tlbnMgPSB0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGxpc3QuaXRlbXNbaV0udGV4dCwgW10pO1xuICAgICAgICAgICAgICAgIGlmICghbGlzdC5sb29zZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBsaXN0IHNob3VsZCBiZSBsb29zZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFjZXJzID0gbGlzdC5pdGVtc1tpXS50b2tlbnMuZmlsdGVyKHQgPT4gdC50eXBlID09PSAnc3BhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlwbGVMaW5lQnJlYWtzID0gc3BhY2Vycy5sZW5ndGggPiAwICYmIHNwYWNlcnMuc29tZSh0ID0+IHRoaXMucnVsZXMub3RoZXIuYW55TGluZS50ZXN0KHQucmF3KSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3QubG9vc2UgPSBoYXNNdWx0aXBsZUxpbmVCcmVha3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGFsbCBpdGVtcyB0byBsb29zZSBpZiBsaXN0IGlzIGxvb3NlXG4gICAgICAgICAgICBpZiAobGlzdC5sb29zZSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsaXN0Lml0ZW1zW2ldLmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBodG1sKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgYmxvY2s6IHRydWUsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgcHJlOiBjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIHRleHQ6IGNhcFswXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVmKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IGNhcFsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCAnICcpO1xuICAgICAgICAgICAgY29uc3QgaHJlZiA9IGNhcFsyXSA/IGNhcFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuaHJlZkJyYWNrZXRzLCAnJDEnKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6IGNhcFszXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RlZicsXG4gICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhYmxlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKCFjYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucnVsZXMub3RoZXIudGFibGVEZWxpbWl0ZXIudGVzdChjYXBbMl0pKSB7XG4gICAgICAgICAgICAvLyBkZWxpbWl0ZXIgcm93IG11c3QgaGF2ZSBhIHBpcGUgKHwpIG9yIGNvbG9uICg6KSBvdGhlcndpc2UgaXQgaXMgYSBzZXRleHQgaGVhZGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBzcGxpdENlbGxzKGNhcFsxXSk7XG4gICAgICAgIGNvbnN0IGFsaWducyA9IGNhcFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNoYXJzLCAnJykuc3BsaXQoJ3wnKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGNhcFszXT8udHJpbSgpID8gY2FwWzNdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZVJvd0JsYW5rTGluZSwgJycpLnNwbGl0KCdcXG4nKSA6IFtdO1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgaGVhZGVyOiBbXSxcbiAgICAgICAgICAgIGFsaWduOiBbXSxcbiAgICAgICAgICAgIHJvd3M6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaGVhZGVycy5sZW5ndGggIT09IGFsaWducy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGhlYWRlciBhbmQgYWxpZ24gY29sdW1ucyBtdXN0IGJlIGVxdWFsLCByb3dzIGNhbiBiZSBkaWZmZXJlbnQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBhbGlnbiBvZiBhbGlnbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25SaWdodC50ZXN0KGFsaWduKSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uYWxpZ24ucHVzaCgncmlnaHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNlbnRlci50ZXN0KGFsaWduKSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uYWxpZ24ucHVzaCgnY2VudGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25MZWZ0LnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLmFsaWduLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtLmhlYWRlci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBoZWFkZXJzW2ldLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoaGVhZGVyc1tpXSksXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsaWduOiBpdGVtLmFsaWduW2ldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICAgICAgaXRlbS5yb3dzLnB1c2goc3BsaXRDZWxscyhyb3csIGl0ZW0uaGVhZGVyLmxlbmd0aCkubWFwKChjZWxsLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZShjZWxsKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ246IGl0ZW0uYWxpZ25baV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgbGhlYWRpbmcoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICBkZXB0aDogY2FwWzJdLmNoYXJBdCgwKSA9PT0gJz0nID8gMSA6IDIsXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzFdLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoY2FwWzFdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYWdyYXBoKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgICA6IGNhcFsxXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXh0KHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZShjYXBbMF0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlc2NhcGUoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2VzY2FwZScsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzFdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0YWcoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgJiYgdGhpcy5ydWxlcy5vdGhlci5zdGFydEFUYWcudGVzdChjYXBbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgJiYgdGhpcy5ydWxlcy5vdGhlci5lbmRBVGFnLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayAmJiB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0UHJlU2NyaXB0VGFnLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgJiYgdGhpcy5ydWxlcy5vdGhlci5lbmRQcmVTY3JpcHRUYWcudGVzdChjYXBbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdodG1sJyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICBpbkxpbms6IHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLFxuICAgICAgICAgICAgICAgIGluUmF3QmxvY2s6IHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxcbiAgICAgICAgICAgICAgICBibG9jazogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsaW5rKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZFVybCA9IGNhcFsyXS50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyAmJiB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3QodHJpbW1lZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjb21tb25tYXJrIHJlcXVpcmVzIG1hdGNoaW5nIGFuZ2xlIGJyYWNrZXRzXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdCh0cmltbWVkVXJsKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbmRpbmcgYW5nbGUgYnJhY2tldCBjYW5ub3QgYmUgZXNjYXBlZFxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0cmltU2xhc2ggPSBydHJpbSh0cmltbWVkVXJsLnNsaWNlKDAsIC0xKSwgJ1xcXFwnKTtcbiAgICAgICAgICAgICAgICBpZiAoKHRyaW1tZWRVcmwubGVuZ3RoIC0gcnRyaW1TbGFzaC5sZW5ndGgpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFBhcmVuSW5kZXggPSBmaW5kQ2xvc2luZ0JyYWNrZXQoY2FwWzJdLCAnKCknKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhcmVuSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGNhcFswXS5pbmRleE9mKCchJykgPT09IDAgPyA1IDogNDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua0xlbiA9IHN0YXJ0ICsgY2FwWzFdLmxlbmd0aCArIGxhc3RQYXJlbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjYXBbMl0gPSBjYXBbMl0uc3Vic3RyaW5nKDAsIGxhc3RQYXJlbkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY2FwWzBdID0gY2FwWzBdLnN1YnN0cmluZygwLCBsaW5rTGVuKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcFszXSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBocmVmID0gY2FwWzJdO1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgcGVkYW50aWMgaHJlZiBhbmQgdGl0bGVcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5ydWxlcy5vdGhlci5wZWRhbnRpY0hyZWZUaXRsZS5leGVjKGhyZWYpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGhyZWYgPSBsaW5rWzFdO1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGxpbmtbM107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc2xpY2UoMSwgLTEpIDogJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBocmVmID0gaHJlZi50cmltKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KGhyZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYyAmJiAhKHRoaXMucnVsZXMub3RoZXIuZW5kQW5nbGVCcmFja2V0LnRlc3QodHJpbW1lZFVybCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHBlZGFudGljIGFsbG93cyBzdGFydGluZyBhbmdsZSBicmFja2V0IHdpdGhvdXQgZW5kaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBocmVmID0gaHJlZi5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dExpbmsoY2FwLCB7XG4gICAgICAgICAgICAgICAgaHJlZjogaHJlZiA/IGhyZWYucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiBocmVmLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSA/IHRpdGxlLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogdGl0bGUsXG4gICAgICAgICAgICB9LCBjYXBbMF0sIHRoaXMubGV4ZXIsIHRoaXMucnVsZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZmxpbmsoc3JjLCBsaW5rcykge1xuICAgICAgICBsZXQgY2FwO1xuICAgICAgICBpZiAoKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhzcmMpKVxuICAgICAgICAgICAgfHwgKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHNyYykpKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rU3RyaW5nID0gKGNhcFsyXSB8fCBjYXBbMV0pLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCAnICcpO1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGxpbmtzW2xpbmtTdHJpbmcudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gY2FwWzBdLmNoYXJBdCgwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIHJhdzogdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dExpbmsoY2FwLCBsaW5rLCBjYXBbMF0sIHRoaXMubGV4ZXIsIHRoaXMucnVsZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVtU3Ryb25nKHNyYywgbWFza2VkU3JjLCBwcmV2Q2hhciA9ICcnKSB7XG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nTERlbGltLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gXyBjYW4ndCBiZSBiZXR3ZWVuIHR3byBhbHBoYW51bWVyaWNzLiBcXHB7TH1cXHB7Tn0gaW5jbHVkZXMgbm9uLWVuZ2xpc2ggYWxwaGFiZXQvbnVtYmVycyBhcyB3ZWxsXG4gICAgICAgIGlmIChtYXRjaFszXSAmJiBwcmV2Q2hhci5tYXRjaCh0aGlzLnJ1bGVzLm90aGVyLnVuaWNvZGVBbHBoYU51bWVyaWMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0Q2hhciA9IG1hdGNoWzFdIHx8IG1hdGNoWzJdIHx8ICcnO1xuICAgICAgICBpZiAoIW5leHRDaGFyIHx8ICFwcmV2Q2hhciB8fCB0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKHByZXZDaGFyKSkge1xuICAgICAgICAgICAgLy8gdW5pY29kZSBSZWdleCBjb3VudHMgZW1vamkgYXMgMSBjaGFyOyBzcHJlYWQgaW50byBhcnJheSBmb3IgcHJvcGVyIGNvdW50ICh1c2VkIG11bHRpcGxlIHRpbWVzIGJlbG93KVxuICAgICAgICAgICAgY29uc3QgbExlbmd0aCA9IFsuLi5tYXRjaFswXV0ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCByRGVsaW0sIHJMZW5ndGgsIGRlbGltVG90YWwgPSBsTGVuZ3RoLCBtaWREZWxpbVRvdGFsID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGVuZFJlZyA9IG1hdGNoWzBdWzBdID09PSAnKicgPyB0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ1JEZWxpbUFzdCA6IHRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nUkRlbGltVW5kO1xuICAgICAgICAgICAgZW5kUmVnLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAvLyBDbGlwIG1hc2tlZFNyYyB0byBzYW1lIHNlY3Rpb24gb2Ygc3RyaW5nIGFzIHNyYyAobW92ZSB0byBsZXhlcj8pXG4gICAgICAgICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoLTEgKiBzcmMubGVuZ3RoICsgbExlbmd0aCk7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gZW5kUmVnLmV4ZWMobWFza2VkU3JjKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJEZWxpbSA9IG1hdGNoWzFdIHx8IG1hdGNoWzJdIHx8IG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IG1hdGNoWzZdO1xuICAgICAgICAgICAgICAgIGlmICghckRlbGltKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBzaW5nbGUgKiBpbiBfX2FiYyphYmNfX1xuICAgICAgICAgICAgICAgIHJMZW5ndGggPSBbLi4uckRlbGltXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzNdIHx8IG1hdGNoWzRdKSB7IC8vIGZvdW5kIGFub3RoZXIgTGVmdCBEZWxpbVxuICAgICAgICAgICAgICAgICAgICBkZWxpbVRvdGFsICs9IHJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaFs1XSB8fCBtYXRjaFs2XSkgeyAvLyBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbVxuICAgICAgICAgICAgICAgICAgICBpZiAobExlbmd0aCAlIDMgJiYgISgobExlbmd0aCArIHJMZW5ndGgpICUgMykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZERlbGltVG90YWwgKz0gckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBDb21tb25NYXJrIEVtcGhhc2lzIFJ1bGVzIDktMTBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxpbVRvdGFsIC09IHJMZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGRlbGltVG90YWwgPiAwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSGF2ZW4ndCBmb3VuZCBlbm91Z2ggY2xvc2luZyBkZWxpbWl0ZXJzXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIGNoYXJhY3RlcnMuICphKioqIC0+ICphKlxuICAgICAgICAgICAgICAgIHJMZW5ndGggPSBNYXRoLm1pbihyTGVuZ3RoLCByTGVuZ3RoICsgZGVsaW1Ub3RhbCArIG1pZERlbGltVG90YWwpO1xuICAgICAgICAgICAgICAgIC8vIGNoYXIgbGVuZ3RoIGNhbiBiZSA+MSBmb3IgdW5pY29kZSBjaGFyYWN0ZXJzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDaGFyTGVuZ3RoID0gWy4uLm1hdGNoWzBdXVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gc3JjLnNsaWNlKDAsIGxMZW5ndGggKyBtYXRjaC5pbmRleCArIGxhc3RDaGFyTGVuZ3RoICsgckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGBlbWAgaWYgc21hbGxlc3QgZGVsaW1pdGVyIGhhcyBvZGQgY2hhciBjb3VudC4gKmEqKipcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5taW4obExlbmd0aCwgckxlbmd0aCkgJSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSByYXcuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2VtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgJ3N0cm9uZycgaWYgc21hbGxlc3QgZGVsaW1pdGVyIGhhcyBldmVuIGNoYXIgY291bnQuICoqYSoqKlxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSByYXcuc2xpY2UoMiwgLTIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJvbmcnLFxuICAgICAgICAgICAgICAgICAgICByYXcsXG4gICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnModGV4dCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb2Rlc3BhbihzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gY2FwWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc05vblNwYWNlQ2hhcnMgPSB0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhci50ZXN0KHRleHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzU3BhY2VDaGFyc09uQm90aEVuZHMgPSB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0aW5nU3BhY2VDaGFyLnRlc3QodGV4dCkgJiYgdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdCh0ZXh0KTtcbiAgICAgICAgICAgIGlmIChoYXNOb25TcGFjZUNoYXJzICYmIGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjb2Rlc3BhbicsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnIoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYnInLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWwoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RlbCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzJdLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoY2FwWzJdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXV0b2xpbmsoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgbGV0IHRleHQsIGhyZWY7XG4gICAgICAgICAgICBpZiAoY2FwWzJdID09PSAnQCcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2FwWzFdO1xuICAgICAgICAgICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGNhcFsxXTtcbiAgICAgICAgICAgICAgICBocmVmID0gdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgICAgICB0b2tlbnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cmwoc3JjKSB7XG4gICAgICAgIGxldCBjYXA7XG4gICAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhzcmMpKSB7XG4gICAgICAgICAgICBsZXQgdGV4dCwgaHJlZjtcbiAgICAgICAgICAgIGlmIChjYXBbMl0gPT09ICdAJykge1xuICAgICAgICAgICAgICAgIHRleHQgPSBjYXBbMF07XG4gICAgICAgICAgICAgICAgaHJlZiA9ICdtYWlsdG86JyArIHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBleHRlbmRlZCBhdXRvbGluayBwYXRoIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBsZXQgcHJldkNhcFplcm87XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2FwWmVybyA9IGNhcFswXTtcbiAgICAgICAgICAgICAgICAgICAgY2FwWzBdID0gdGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGNhcFswXSk/LlswXSA/PyAnJztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2Q2FwWmVybyAhPT0gY2FwWzBdKTtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2FwWzBdO1xuICAgICAgICAgICAgICAgIGlmIChjYXBbMV0gPT09ICd3d3cuJykge1xuICAgICAgICAgICAgICAgICAgICBocmVmID0gJ2h0dHA6Ly8nICsgY2FwWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGNhcFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgICAgdG9rZW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5saW5lVGV4dChzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGVzY2FwZWQgPSB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgZXNjYXBlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQmxvY2sgTGV4ZXJcbiAqL1xuY2xhc3MgX0xleGVyIHtcbiAgICB0b2tlbnM7XG4gICAgb3B0aW9ucztcbiAgICBzdGF0ZTtcbiAgICB0b2tlbml6ZXI7XG4gICAgaW5saW5lUXVldWU7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICAvLyBUb2tlbkxpc3QgY2Fubm90IGJlIGNyZWF0ZWQgaW4gb25lIGdvXG4gICAgICAgIHRoaXMudG9rZW5zID0gW107XG4gICAgICAgIHRoaXMudG9rZW5zLmxpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gICAgICAgIHRoaXMub3B0aW9ucy50b2tlbml6ZXIgPSB0aGlzLm9wdGlvbnMudG9rZW5pemVyIHx8IG5ldyBfVG9rZW5pemVyKCk7XG4gICAgICAgIHRoaXMudG9rZW5pemVyID0gdGhpcy5vcHRpb25zLnRva2VuaXplcjtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy50b2tlbml6ZXIubGV4ZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLmlubGluZVF1ZXVlID0gW107XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpbkxpbms6IGZhbHNlLFxuICAgICAgICAgICAgaW5SYXdCbG9jazogZmFsc2UsXG4gICAgICAgICAgICB0b3A6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJ1bGVzID0ge1xuICAgICAgICAgICAgb3RoZXIsXG4gICAgICAgICAgICBibG9jazogYmxvY2subm9ybWFsLFxuICAgICAgICAgICAgaW5saW5lOiBpbmxpbmUubm9ybWFsLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICBydWxlcy5ibG9jayA9IGJsb2NrLnBlZGFudGljO1xuICAgICAgICAgICAgcnVsZXMuaW5saW5lID0gaW5saW5lLnBlZGFudGljO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICAgICAgICAgIHJ1bGVzLmJsb2NrID0gYmxvY2suZ2ZtO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5icmVha3MpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUuYnJlYWtzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcnVsZXMuaW5saW5lID0gaW5saW5lLmdmbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2VuaXplci5ydWxlcyA9IHJ1bGVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHBvc2UgUnVsZXNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IHJ1bGVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICBpbmxpbmUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBMZXggTWV0aG9kXG4gICAgICovXG4gICAgc3RhdGljIGxleChzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgX0xleGVyKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbGV4ZXIubGV4KHNyYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBMZXggSW5saW5lIE1ldGhvZFxuICAgICAqL1xuICAgIHN0YXRpYyBsZXhJbmxpbmUoc3JjLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxleGVyID0gbmV3IF9MZXhlcihvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGxleGVyLmlubGluZVRva2VucyhzcmMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmVwcm9jZXNzaW5nXG4gICAgICovXG4gICAgbGV4KHNyYykge1xuICAgICAgICBzcmMgPSBzcmMucmVwbGFjZShvdGhlci5jYXJyaWFnZVJldHVybiwgJ1xcbicpO1xuICAgICAgICB0aGlzLmJsb2NrVG9rZW5zKHNyYywgdGhpcy50b2tlbnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5saW5lUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlubGluZVF1ZXVlW2ldO1xuICAgICAgICAgICAgdGhpcy5pbmxpbmVUb2tlbnMobmV4dC5zcmMsIG5leHQudG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlubGluZVF1ZXVlID0gW107XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG4gICAgYmxvY2tUb2tlbnMoc3JjLCB0b2tlbnMgPSBbXSwgbGFzdFBhcmFncmFwaENsaXBwZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICBzcmMgPSBzcmMucmVwbGFjZShvdGhlci50YWJDaGFyR2xvYmFsLCAnICAgICcpLnJlcGxhY2Uob3RoZXIuc3BhY2VMaW5lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHNyYykge1xuICAgICAgICAgICAgbGV0IHRva2VuO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5ibG9jaz8uc29tZSgoZXh0VG9rZW5pemVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuID0gZXh0VG9rZW5pemVyLmNhbGwoeyBsZXhlcjogdGhpcyB9LCBzcmMsIHRva2VucykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5ld2xpbmVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnNwYWNlKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnJhdy5sZW5ndGggPT09IDEgJiYgbGFzdFRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBhIHNpbmdsZSBcXG4gYXMgYSBzcGFjZXIsIGl0J3MgdGVybWluYXRpbmcgdGhlIGxhc3QgbGluZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gbW92ZSBpdCB0aGVyZSBzbyB0aGF0IHdlIGRvbid0IGdldCB1bm5lY2Vzc2FyeSBwYXJhZ3JhcGggdGFnc1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvZGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmNvZGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgICAgICAgICAvLyBBbiBpbmRlbnRlZCBjb2RlIGJsb2NrIGNhbm5vdCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGguXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ3BhcmFncmFwaCcgfHwgbGFzdFRva2VuPy50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnJhdyArPSAnXFxuJyArIHRva2VuLnJhdztcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gJ1xcbicgKyB0b2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmZW5jZXNcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmZlbmNlcyhzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoZWFkaW5nXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5oZWFkaW5nKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhyXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5ocihzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBibG9ja3F1b3RlXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxpc3RcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmxpc3Qoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaHRtbFxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuaHRtbChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWZcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmRlZihzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdwYXJhZ3JhcGgnIHx8IGxhc3RUb2tlbj8udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMudG9rZW5zLmxpbmtzW3Rva2VuLnRhZ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlbnMubGlua3NbdG9rZW4udGFnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IHRva2VuLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdG9rZW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFibGUgKGdmbSlcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnRhYmxlKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxoZWFkaW5nXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5saGVhZGluZyhzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0b3AtbGV2ZWwgcGFyYWdyYXBoXG4gICAgICAgICAgICAvLyBwcmV2ZW50IHBhcmFncmFwaCBjb25zdW1pbmcgZXh0ZW5zaW9ucyBieSBjbGlwcGluZyAnc3JjJyB0byBleHRlbnNpb24gc3RhcnRcbiAgICAgICAgICAgIGxldCBjdXRTcmMgPSBzcmM7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnN0YXJ0QmxvY2spIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnRJbmRleCA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBTcmMgPSBzcmMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgbGV0IHRlbXBTdGFydDtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goKGdldFN0YXJ0SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXJ0ID0gZ2V0U3RhcnRJbmRleC5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgdGVtcFNyYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcFN0YXJ0ID09PSAnbnVtYmVyJyAmJiB0ZW1wU3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIHRlbXBTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleCA8IEluZmluaXR5ICYmIHN0YXJ0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXRTcmMgPSBzcmMuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS50b3AgJiYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGN1dFNyYykpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhcmFncmFwaENsaXBwZWQgJiYgbGFzdFRva2VuPy50eXBlID09PSAncGFyYWdyYXBoJykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSAnXFxuJyArIHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYXN0UGFyYWdyYXBoQ2xpcHBlZCA9IGN1dFNyYy5sZW5ndGggIT09IHNyYy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRleHRcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnRleHQoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRva2VuPy50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnJhdyArPSAnXFxuJyArIHRva2VuLnJhdztcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gJ1xcbicgKyB0b2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3JjKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS50b3AgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbiAgICBpbmxpbmUoc3JjLCB0b2tlbnMgPSBbXSkge1xuICAgICAgICB0aGlzLmlubGluZVF1ZXVlLnB1c2goeyBzcmMsIHRva2VucyB9KTtcbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGV4aW5nL0NvbXBpbGluZ1xuICAgICAqL1xuICAgIGlubGluZVRva2VucyhzcmMsIHRva2VucyA9IFtdKSB7XG4gICAgICAgIC8vIFN0cmluZyB3aXRoIGxpbmtzIG1hc2tlZCB0byBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCBlbSBhbmQgc3Ryb25nXG4gICAgICAgIGxldCBtYXNrZWRTcmMgPSBzcmM7XG4gICAgICAgIGxldCBtYXRjaCA9IG51bGw7XG4gICAgICAgIC8vIE1hc2sgb3V0IHJlZmxpbmtzXG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5saW5rcykge1xuICAgICAgICAgICAgY29uc3QgbGlua3MgPSBPYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7XG4gICAgICAgICAgICBpZiAobGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKG1hdGNoWzBdLnNsaWNlKG1hdGNoWzBdLmxhc3RJbmRleE9mKCdbJykgKyAxLCAtMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoMCwgbWF0Y2guaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAnWycgKyAnYScucmVwZWF0KG1hdGNoWzBdLmxlbmd0aCAtIDIpICsgJ10nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtYXNrZWRTcmMuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXNrIG91dCBvdGhlciBibG9ja3NcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhtYXNrZWRTcmMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgJ1snICsgJ2EnLnJlcGVhdChtYXRjaFswXS5sZW5ndGggLSAyKSArICddJyArIG1hc2tlZFNyYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFzayBvdXQgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhtYXNrZWRTcmMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgJysrJyArIG1hc2tlZFNyYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQga2VlcFByZXZDaGFyID0gZmFsc2U7XG4gICAgICAgIGxldCBwcmV2Q2hhciA9ICcnO1xuICAgICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgICAgICBpZiAoIWtlZXBQcmV2Q2hhcikge1xuICAgICAgICAgICAgICAgIHByZXZDaGFyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZWVwUHJldkNoYXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCB0b2tlbjtcbiAgICAgICAgICAgIC8vIGV4dGVuc2lvbnNcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uaW5saW5lPy5zb21lKChleHRUb2tlbml6ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gPSBleHRUb2tlbml6ZXIuY2FsbCh7IGxleGVyOiB0aGlzIH0sIHNyYywgdG9rZW5zKSkge1xuICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5lc2NhcGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFnXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbGlua1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIubGluayhzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZWZsaW5rLCBub2xpbmtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnJlZmxpbmsoc3JjLCB0aGlzLnRva2Vucy5saW5rcykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICd0ZXh0JyAmJiBsYXN0VG9rZW4/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9IHRva2VuLnJhdztcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gdG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbSAmIHN0cm9uZ1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZW1TdHJvbmcoc3JjLCBtYXNrZWRTcmMsIHByZXZDaGFyKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29kZVxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuY29kZXNwYW4oc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYnJcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmJyKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRlbCAoZ2ZtKVxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZGVsKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG9saW5rXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5hdXRvbGluayhzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB1cmwgKGdmbSlcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZS5pbkxpbmsgJiYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIudXJsKHNyYykpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXh0XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGlubGluZVRleHQgY29uc3VtaW5nIGV4dGVuc2lvbnMgYnkgY2xpcHBpbmcgJ3NyYycgdG8gZXh0ZW5zaW9uIHN0YXJ0XG4gICAgICAgICAgICBsZXQgY3V0U3JjID0gc3JjO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydElubGluZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydEluZGV4ID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFNyYyA9IHNyYy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcFN0YXJ0O1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goKGdldFN0YXJ0SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXJ0ID0gZ2V0U3RhcnRJbmRleC5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgdGVtcFNyYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcFN0YXJ0ID09PSAnbnVtYmVyJyAmJiB0ZW1wU3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIHRlbXBTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleCA8IEluZmluaXR5ICYmIHN0YXJ0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXRTcmMgPSBzcmMuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGN1dFNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi5yYXcuc2xpY2UoLTEpICE9PSAnXycpIHsgLy8gVHJhY2sgcHJldkNoYXIgYmVmb3JlIHN0cmluZyBvZiBfX19fIHN0YXJ0ZWRcbiAgICAgICAgICAgICAgICAgICAgcHJldkNoYXIgPSB0b2tlbi5yYXcuc2xpY2UoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZWVwUHJldkNoYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2cgPSAnSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZW5kZXJlclxuICovXG5jbGFzcyBfUmVuZGVyZXIge1xuICAgIG9wdGlvbnM7XG4gICAgcGFyc2VyOyAvLyBzZXQgYnkgdGhlIHBhcnNlclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gICAgfVxuICAgIHNwYWNlKHRva2VuKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29kZSh7IHRleHQsIGxhbmcsIGVzY2FwZWQgfSkge1xuICAgICAgICBjb25zdCBsYW5nU3RyaW5nID0gKGxhbmcgfHwgJycpLm1hdGNoKG90aGVyLm5vdFNwYWNlU3RhcnQpPy5bMF07XG4gICAgICAgIGNvbnN0IGNvZGUgPSB0ZXh0LnJlcGxhY2Uob3RoZXIuZW5kaW5nTmV3bGluZSwgJycpICsgJ1xcbic7XG4gICAgICAgIGlmICghbGFuZ1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuICc8cHJlPjxjb2RlPidcbiAgICAgICAgICAgICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICAgICAgICAgICAgICArICc8L2NvZGU+PC9wcmU+XFxuJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzxwcmU+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0nXG4gICAgICAgICAgICArIGVzY2FwZShsYW5nU3RyaW5nKVxuICAgICAgICAgICAgKyAnXCI+J1xuICAgICAgICAgICAgKyAoZXNjYXBlZCA/IGNvZGUgOiBlc2NhcGUoY29kZSwgdHJ1ZSkpXG4gICAgICAgICAgICArICc8L2NvZGU+PC9wcmU+XFxuJztcbiAgICB9XG4gICAgYmxvY2txdW90ZSh7IHRva2VucyB9KSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLnBhcnNlci5wYXJzZSh0b2tlbnMpO1xuICAgICAgICByZXR1cm4gYDxibG9ja3F1b3RlPlxcbiR7Ym9keX08L2Jsb2NrcXVvdGU+XFxuYDtcbiAgICB9XG4gICAgaHRtbCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaGVhZGluZyh7IHRva2VucywgZGVwdGggfSkge1xuICAgICAgICByZXR1cm4gYDxoJHtkZXB0aH0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvaCR7ZGVwdGh9PlxcbmA7XG4gICAgfVxuICAgIGhyKHRva2VuKSB7XG4gICAgICAgIHJldHVybiAnPGhyPlxcbic7XG4gICAgfVxuICAgIGxpc3QodG9rZW4pIHtcbiAgICAgICAgY29uc3Qgb3JkZXJlZCA9IHRva2VuLm9yZGVyZWQ7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdG9rZW4uc3RhcnQ7XG4gICAgICAgIGxldCBib2R5ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW4uaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0b2tlbi5pdGVtc1tqXTtcbiAgICAgICAgICAgIGJvZHkgKz0gdGhpcy5saXN0aXRlbShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlID0gb3JkZXJlZCA/ICdvbCcgOiAndWwnO1xuICAgICAgICBjb25zdCBzdGFydEF0dHIgPSAob3JkZXJlZCAmJiBzdGFydCAhPT0gMSkgPyAoJyBzdGFydD1cIicgKyBzdGFydCArICdcIicpIDogJyc7XG4gICAgICAgIHJldHVybiAnPCcgKyB0eXBlICsgc3RhcnRBdHRyICsgJz5cXG4nICsgYm9keSArICc8LycgKyB0eXBlICsgJz5cXG4nO1xuICAgIH1cbiAgICBsaXN0aXRlbShpdGVtKSB7XG4gICAgICAgIGxldCBpdGVtQm9keSA9ICcnO1xuICAgICAgICBpZiAoaXRlbS50YXNrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IHRoaXMuY2hlY2tib3goeyBjaGVja2VkOiAhIWl0ZW0uY2hlY2tlZCB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxvb3NlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9rZW5zWzBdPy50eXBlID09PSAncGFyYWdyYXBoJykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnRva2Vuc1swXS50ZXh0ID0gY2hlY2tib3ggKyAnICcgKyBpdGVtLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbnNbMF0udG9rZW5zICYmIGl0ZW0udG9rZW5zWzBdLnRva2Vucy5sZW5ndGggPiAwICYmIGl0ZW0udG9rZW5zWzBdLnRva2Vuc1swXS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0ID0gY2hlY2tib3ggKyAnICcgKyBlc2NhcGUoaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLmVzY2FwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnRva2Vucy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogY2hlY2tib3ggKyAnICcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaGVja2JveCArICcgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1Cb2R5ICs9IGNoZWNrYm94ICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1Cb2R5ICs9IHRoaXMucGFyc2VyLnBhcnNlKGl0ZW0udG9rZW5zLCAhIWl0ZW0ubG9vc2UpO1xuICAgICAgICByZXR1cm4gYDxsaT4ke2l0ZW1Cb2R5fTwvbGk+XFxuYDtcbiAgICB9XG4gICAgY2hlY2tib3goeyBjaGVja2VkIH0pIHtcbiAgICAgICAgcmV0dXJuICc8aW5wdXQgJ1xuICAgICAgICAgICAgKyAoY2hlY2tlZCA/ICdjaGVja2VkPVwiXCIgJyA6ICcnKVxuICAgICAgICAgICAgKyAnZGlzYWJsZWQ9XCJcIiB0eXBlPVwiY2hlY2tib3hcIj4nO1xuICAgIH1cbiAgICBwYXJhZ3JhcGgoeyB0b2tlbnMgfSkge1xuICAgICAgICByZXR1cm4gYDxwPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L3A+XFxuYDtcbiAgICB9XG4gICAgdGFibGUodG9rZW4pIHtcbiAgICAgICAgbGV0IGhlYWRlciA9ICcnO1xuICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgbGV0IGNlbGwgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5oZWFkZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNlbGwgKz0gdGhpcy50YWJsZWNlbGwodG9rZW4uaGVhZGVyW2pdKTtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXIgKz0gdGhpcy50YWJsZXJvdyh7IHRleHQ6IGNlbGwgfSk7XG4gICAgICAgIGxldCBib2R5ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW4ucm93cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdG9rZW4ucm93c1tqXTtcbiAgICAgICAgICAgIGNlbGwgPSAnJztcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcm93Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgY2VsbCArPSB0aGlzLnRhYmxlY2VsbChyb3dba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keSArPSB0aGlzLnRhYmxlcm93KHsgdGV4dDogY2VsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIGJvZHkgPSBgPHRib2R5PiR7Ym9keX08L3Rib2R5PmA7XG4gICAgICAgIHJldHVybiAnPHRhYmxlPlxcbidcbiAgICAgICAgICAgICsgJzx0aGVhZD5cXG4nXG4gICAgICAgICAgICArIGhlYWRlclxuICAgICAgICAgICAgKyAnPC90aGVhZD5cXG4nXG4gICAgICAgICAgICArIGJvZHlcbiAgICAgICAgICAgICsgJzwvdGFibGU+XFxuJztcbiAgICB9XG4gICAgdGFibGVyb3coeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIGA8dHI+XFxuJHt0ZXh0fTwvdHI+XFxuYDtcbiAgICB9XG4gICAgdGFibGVjZWxsKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpO1xuICAgICAgICBjb25zdCB0eXBlID0gdG9rZW4uaGVhZGVyID8gJ3RoJyA6ICd0ZCc7XG4gICAgICAgIGNvbnN0IHRhZyA9IHRva2VuLmFsaWduXG4gICAgICAgICAgICA/IGA8JHt0eXBlfSBhbGlnbj1cIiR7dG9rZW4uYWxpZ259XCI+YFxuICAgICAgICAgICAgOiBgPCR7dHlwZX0+YDtcbiAgICAgICAgcmV0dXJuIHRhZyArIGNvbnRlbnQgKyBgPC8ke3R5cGV9PlxcbmA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHNwYW4gbGV2ZWwgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBzdHJvbmcoeyB0b2tlbnMgfSkge1xuICAgICAgICByZXR1cm4gYDxzdHJvbmc+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvc3Ryb25nPmA7XG4gICAgfVxuICAgIGVtKHsgdG9rZW5zIH0pIHtcbiAgICAgICAgcmV0dXJuIGA8ZW0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvZW0+YDtcbiAgICB9XG4gICAgY29kZXNwYW4oeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIGA8Y29kZT4ke2VzY2FwZSh0ZXh0LCB0cnVlKX08L2NvZGU+YDtcbiAgICB9XG4gICAgYnIodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuICc8YnI+JztcbiAgICB9XG4gICAgZGVsKHsgdG9rZW5zIH0pIHtcbiAgICAgICAgcmV0dXJuIGA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2RlbD5gO1xuICAgIH1cbiAgICBsaW5rKHsgaHJlZiwgdGl0bGUsIHRva2VucyB9KSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpO1xuICAgICAgICBjb25zdCBjbGVhbkhyZWYgPSBjbGVhblVybChocmVmKTtcbiAgICAgICAgaWYgKGNsZWFuSHJlZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaHJlZiA9IGNsZWFuSHJlZjtcbiAgICAgICAgbGV0IG91dCA9ICc8YSBocmVmPVwiJyArIGhyZWYgKyAnXCInO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRpdGxlPVwiJyArIChlc2NhcGUodGl0bGUpKSArICdcIic7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICc+JyArIHRleHQgKyAnPC9hPic7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGltYWdlKHsgaHJlZiwgdGl0bGUsIHRleHQgfSkge1xuICAgICAgICBjb25zdCBjbGVhbkhyZWYgPSBjbGVhblVybChocmVmKTtcbiAgICAgICAgaWYgKGNsZWFuSHJlZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVzY2FwZSh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBocmVmID0gY2xlYW5IcmVmO1xuICAgICAgICBsZXQgb3V0ID0gYDxpbWcgc3JjPVwiJHtocmVmfVwiIGFsdD1cIiR7dGV4dH1cImA7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgb3V0ICs9IGAgdGl0bGU9XCIke2VzY2FwZSh0aXRsZSl9XCJgO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnPic7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIHRleHQodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuICd0b2tlbnMnIGluIHRva2VuICYmIHRva2VuLnRva2Vuc1xuICAgICAgICAgICAgPyB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpXG4gICAgICAgICAgICA6ICgnZXNjYXBlZCcgaW4gdG9rZW4gJiYgdG9rZW4uZXNjYXBlZCA/IHRva2VuLnRleHQgOiBlc2NhcGUodG9rZW4udGV4dCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUZXh0UmVuZGVyZXJcbiAqIHJldHVybnMgb25seSB0aGUgdGV4dHVhbCBwYXJ0IG9mIHRoZSB0b2tlblxuICovXG5jbGFzcyBfVGV4dFJlbmRlcmVyIHtcbiAgICAvLyBubyBuZWVkIGZvciBibG9jayBsZXZlbCByZW5kZXJlcnNcbiAgICBzdHJvbmcoeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGVtKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBjb2Rlc3Bhbih7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgZGVsKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBodG1sKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICB0ZXh0KHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBsaW5rKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiAnJyArIHRleHQ7XG4gICAgfVxuICAgIGltYWdlKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiAnJyArIHRleHQ7XG4gICAgfVxuICAgIGJyKCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuXG4vKipcbiAqIFBhcnNpbmcgJiBDb21waWxpbmdcbiAqL1xuY2xhc3MgX1BhcnNlciB7XG4gICAgb3B0aW9ucztcbiAgICByZW5kZXJlcjtcbiAgICB0ZXh0UmVuZGVyZXI7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlbmRlcmVyID0gdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IG5ldyBfUmVuZGVyZXIoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBhcnNlciA9IHRoaXM7XG4gICAgICAgIHRoaXMudGV4dFJlbmRlcmVyID0gbmV3IF9UZXh0UmVuZGVyZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGljIFBhcnNlIE1ldGhvZFxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZSh0b2tlbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IF9QYXJzZXIob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UodG9rZW5zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGljIFBhcnNlIElubGluZSBNZXRob2RcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2VJbmxpbmUodG9rZW5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfUGFyc2VyKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIExvb3BcbiAgICAgKi9cbiAgICBwYXJzZSh0b2tlbnMsIHRvcCA9IHRydWUpIHtcbiAgICAgICAgbGV0IG91dCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYW55VG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICAvLyBSdW4gYW55IHJlbmRlcmVyIGV4dGVuc2lvbnNcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYW55VG9rZW4udHlwZV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmljVG9rZW4gPSBhbnlUb2tlbjtcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZ2VuZXJpY1Rva2VuLnR5cGVdLmNhbGwoeyBwYXJzZXI6IHRoaXMgfSwgZ2VuZXJpY1Rva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSBmYWxzZSB8fCAhWydzcGFjZScsICdocicsICdoZWFkaW5nJywgJ2NvZGUnLCAndGFibGUnLCAnYmxvY2txdW90ZScsICdsaXN0JywgJ2h0bWwnLCAncGFyYWdyYXBoJywgJ3RleHQnXS5pbmNsdWRlcyhnZW5lcmljVG9rZW4udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJldCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhbnlUb2tlbjtcbiAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5zcGFjZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdocic6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuaHIodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGluZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuaGVhZGluZyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdjb2RlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5jb2RlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50YWJsZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdibG9ja3F1b3RlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpc3QodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnaHRtbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuaHRtbCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdwYXJhZ3JhcGgnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dFRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGxldCBib2R5ID0gdGhpcy5yZW5kZXJlci50ZXh0KHRleHRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpICsgMSA8IHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW2kgKyAxXS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUb2tlbiA9IHRva2Vuc1srK2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSArPSAnXFxuJyArIHRoaXMucmVuZGVyZXIudGV4dCh0ZXh0VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBib2R5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiBbeyB0eXBlOiAndGV4dCcsIHJhdzogYm9keSwgdGV4dDogYm9keSwgZXNjYXBlZDogdHJ1ZSB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IGJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gJ1Rva2VuIHdpdGggXCInICsgdG9rZW4udHlwZSArICdcIiB0eXBlIHdhcyBub3QgZm91bmQuJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIElubGluZSBUb2tlbnNcbiAgICAgKi9cbiAgICBwYXJzZUlubGluZSh0b2tlbnMsIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcikge1xuICAgICAgICBsZXQgb3V0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhbnlUb2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIC8vIFJ1biBhbnkgcmVuZGVyZXIgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5yZW5kZXJlcnM/LlthbnlUb2tlbi50eXBlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thbnlUb2tlbi50eXBlXS5jYWxsKHsgcGFyc2VyOiB0aGlzIH0sIGFueVRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSBmYWxzZSB8fCAhWydlc2NhcGUnLCAnaHRtbCcsICdsaW5rJywgJ2ltYWdlJywgJ3N0cm9uZycsICdlbScsICdjb2Rlc3BhbicsICdicicsICdkZWwnLCAndGV4dCddLmluY2x1ZGVzKGFueVRva2VuLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZXQgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYW55VG9rZW47XG4gICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdlc2NhcGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci50ZXh0KHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2h0bWwnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5odG1sKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmsnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5saW5rKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuaW1hZ2UodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnc3Ryb25nJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuc3Ryb25nKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2VtJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuZW0odG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnY29kZXNwYW4nOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5jb2Rlc3Bhbih0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdicic6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmJyKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2RlbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmRlbCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIudGV4dCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9ICdUb2tlbiB3aXRoIFwiJyArIHRva2VuLnR5cGUgKyAnXCIgdHlwZSB3YXMgbm90IGZvdW5kLic7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbn1cblxuY2xhc3MgX0hvb2tzIHtcbiAgICBvcHRpb25zO1xuICAgIGJsb2NrO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gICAgfVxuICAgIHN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzID0gbmV3IFNldChbXG4gICAgICAgICdwcmVwcm9jZXNzJyxcbiAgICAgICAgJ3Bvc3Rwcm9jZXNzJyxcbiAgICAgICAgJ3Byb2Nlc3NBbGxUb2tlbnMnLFxuICAgIF0pO1xuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgbWFya2Rvd24gYmVmb3JlIG1hcmtlZFxuICAgICAqL1xuICAgIHByZXByb2Nlc3MobWFya2Rvd24pIHtcbiAgICAgICAgcmV0dXJuIG1hcmtkb3duO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIEhUTUwgYWZ0ZXIgbWFya2VkIGlzIGZpbmlzaGVkXG4gICAgICovXG4gICAgcG9zdHByb2Nlc3MoaHRtbCkge1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBhbGwgdG9rZW5zIGJlZm9yZSB3YWxrIHRva2Vuc1xuICAgICAqL1xuICAgIHByb2Nlc3NBbGxUb2tlbnModG9rZW5zKSB7XG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgZnVuY3Rpb24gdG8gdG9rZW5pemUgbWFya2Rvd25cbiAgICAgKi9cbiAgICBwcm92aWRlTGV4ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrID8gX0xleGVyLmxleCA6IF9MZXhlci5sZXhJbmxpbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgZnVuY3Rpb24gdG8gcGFyc2UgdG9rZW5zXG4gICAgICovXG4gICAgcHJvdmlkZVBhcnNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2sgPyBfUGFyc2VyLnBhcnNlIDogX1BhcnNlci5wYXJzZUlubGluZTtcbiAgICB9XG59XG5cbmNsYXNzIE1hcmtlZCB7XG4gICAgZGVmYXVsdHMgPSBfZ2V0RGVmYXVsdHMoKTtcbiAgICBvcHRpb25zID0gdGhpcy5zZXRPcHRpb25zO1xuICAgIHBhcnNlID0gdGhpcy5wYXJzZU1hcmtkb3duKHRydWUpO1xuICAgIHBhcnNlSW5saW5lID0gdGhpcy5wYXJzZU1hcmtkb3duKGZhbHNlKTtcbiAgICBQYXJzZXIgPSBfUGFyc2VyO1xuICAgIFJlbmRlcmVyID0gX1JlbmRlcmVyO1xuICAgIFRleHRSZW5kZXJlciA9IF9UZXh0UmVuZGVyZXI7XG4gICAgTGV4ZXIgPSBfTGV4ZXI7XG4gICAgVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbiAgICBIb29rcyA9IF9Ib29rcztcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMudXNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gICAgICovXG4gICAgd2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoY2FsbGJhY2suY2FsbCh0aGlzLCB0b2tlbikpO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHRhYmxlVG9rZW4uaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0YWJsZVRva2VuLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiByb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdFRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodGhpcy53YWxrVG9rZW5zKGxpc3RUb2tlbi5pdGVtcywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJpY1Rva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnM/LmNoaWxkVG9rZW5zPy5bZ2VuZXJpY1Rva2VuLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbZ2VuZXJpY1Rva2VuLnR5cGVdLmZvckVhY2goKGNoaWxkVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gZ2VuZXJpY1Rva2VuW2NoaWxkVG9rZW5zXS5mbGF0KEluZmluaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnZW5lcmljVG9rZW4udG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhnZW5lcmljVG9rZW4udG9rZW5zLCBjYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIHVzZSguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMgfHwgeyByZW5kZXJlcnM6IHt9LCBjaGlsZFRva2Vuczoge30gfTtcbiAgICAgICAgYXJncy5mb3JFYWNoKChwYWNrKSA9PiB7XG4gICAgICAgICAgICAvLyBjb3B5IG9wdGlvbnMgdG8gbmV3IG9iamVjdFxuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHsgLi4ucGFjayB9O1xuICAgICAgICAgICAgLy8gc2V0IGFzeW5jIHRvIHRydWUgaWYgaXQgd2FzIHNldCB0byB0cnVlIGJlZm9yZVxuICAgICAgICAgICAgb3B0cy5hc3luYyA9IHRoaXMuZGVmYXVsdHMuYXN5bmMgfHwgb3B0cy5hc3luYyB8fCBmYWxzZTtcbiAgICAgICAgICAgIC8vID09LS0gUGFyc2UgXCJhZGRvblwiIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgICAgICAgaWYgKHBhY2suZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIHBhY2suZXh0ZW5zaW9ucy5mb3JFYWNoKChleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHRlbnNpb24gbmFtZSByZXF1aXJlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgncmVuZGVyZXInIGluIGV4dCkgeyAvLyBSZW5kZXJlciBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyZXIgPSBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBleHRlbnNpb24gd2l0aCBmdW5jIHRvIHJ1biBuZXcgZXh0ZW5zaW9uIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gZXh0LnJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldlJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyZXJzW2V4dC5uYW1lXSA9IGV4dC5yZW5kZXJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3Rva2VuaXplcicgaW4gZXh0KSB7IC8vIFRva2VuaXplciBFeHRlbnNpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4dC5sZXZlbCB8fCAoZXh0LmxldmVsICE9PSAnYmxvY2snICYmIGV4dC5sZXZlbCAhPT0gJ2lubGluZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dExldmVsID0gZXh0ZW5zaW9uc1tleHQubGV2ZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0TGV2ZWwudW5zaGlmdChleHQudG9rZW5pemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNbZXh0LmxldmVsXSA9IFtleHQudG9rZW5pemVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHQuc3RhcnQpIHsgLy8gRnVuY3Rpb24gdG8gY2hlY2sgZm9yIHN0YXJ0IG9mIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dC5sZXZlbCA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0QmxvY2sucHVzaChleHQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydEJsb2NrID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0LmxldmVsID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydElubGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydElubGluZS5wdXNoKGV4dC5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0SW5saW5lID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdjaGlsZFRva2VucycgaW4gZXh0ICYmIGV4dC5jaGlsZFRva2VucykgeyAvLyBDaGlsZCB0b2tlbnMgdG8gYmUgdmlzaXRlZCBieSB3YWxrVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmNoaWxkVG9rZW5zW2V4dC5uYW1lXSA9IGV4dC5jaGlsZFRva2VucztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA9PS0tIFBhcnNlIFwib3ZlcndyaXRlXCIgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay5yZW5kZXJlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5kZWZhdWx0cy5yZW5kZXJlciB8fCBuZXcgX1JlbmRlcmVyKHRoaXMuZGVmYXVsdHMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwYWNrLnJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHByb3AgaW4gcmVuZGVyZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChbJ29wdGlvbnMnLCAncGFyc2VyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlclByb3AgPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlckZ1bmMgPSBwYWNrLnJlbmRlcmVyW3JlbmRlcmVyUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZSZW5kZXJlciA9IHJlbmRlcmVyW3JlbmRlcmVyUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcmVuZGVyZXIgd2l0aCBmdW5jIHRvIHJ1biBleHRlbnNpb24sIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJbcmVuZGVyZXJQcm9wXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gcmVuZGVyZXJGdW5jLmFwcGx5KHJlbmRlcmVyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldlJlbmRlcmVyLmFwcGx5KHJlbmRlcmVyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdHMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYWNrLnRva2VuaXplcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuaXplciA9IHRoaXMuZGVmYXVsdHMudG9rZW5pemVyIHx8IG5ldyBfVG9rZW5pemVyKHRoaXMuZGVmYXVsdHMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwYWNrLnRva2VuaXplcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShwcm9wIGluIHRva2VuaXplcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdG9rZW5pemVyICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChbJ29wdGlvbnMnLCAncnVsZXMnLCAnbGV4ZXInXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIG9wdGlvbnMsIHJ1bGVzLCBhbmQgbGV4ZXIgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW5pemVyUHJvcCA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuaXplckZ1bmMgPSBwYWNrLnRva2VuaXplclt0b2tlbml6ZXJQcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldlRva2VuaXplciA9IHRva2VuaXplclt0b2tlbml6ZXJQcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0b2tlbml6ZXIgd2l0aCBmdW5jIHRvIHJ1biBleHRlbnNpb24sIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW5ub3QgdHlwZSB0b2tlbml6ZXIgZnVuY3Rpb24gZHluYW1pY2FsbHlcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5pemVyW3Rva2VuaXplclByb3BdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXQgPSB0b2tlbml6ZXJGdW5jLmFwcGx5KHRva2VuaXplciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHByZXZUb2tlbml6ZXIuYXBwbHkodG9rZW5pemVyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdHMudG9rZW5pemVyID0gdG9rZW5pemVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPT0tLSBQYXJzZSBIb29rcyBleHRlbnNpb25zIC0tPT0gLy9cbiAgICAgICAgICAgIGlmIChwYWNrLmhvb2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG9va3MgPSB0aGlzLmRlZmF1bHRzLmhvb2tzIHx8IG5ldyBfSG9va3MoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcGFjay5ob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShwcm9wIGluIGhvb2tzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBob29rICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChbJ29wdGlvbnMnLCAnYmxvY2snXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIG9wdGlvbnMgYW5kIGJsb2NrIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvb2tzUHJvcCA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvb2tzRnVuYyA9IHBhY2suaG9va3NbaG9va3NQcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkhvb2sgPSBob29rc1tob29rc1Byb3BdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX0hvb2tzLnBhc3NUaHJvdWdoSG9va3MuaGFzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbm5vdCB0eXBlIGhvb2sgZnVuY3Rpb24gZHluYW1pY2FsbHlcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzW2hvb2tzUHJvcF0gPSAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdHMuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShob29rc0Z1bmMuY2FsbChob29rcywgYXJnKSkudGhlbihyZXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZIb29rLmNhbGwoaG9va3MsIHJldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXQgPSBob29rc0Z1bmMuY2FsbChob29rcywgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkhvb2suY2FsbChob29rcywgcmV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbm5vdCB0eXBlIGhvb2sgZnVuY3Rpb24gZHluYW1pY2FsbHlcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzW2hvb2tzUHJvcF0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXQgPSBob29rc0Z1bmMuYXBwbHkoaG9va3MsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHByZXZIb29rLmFwcGx5KGhvb2tzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0cy5ob29rcyA9IGhvb2tzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPT0tLSBQYXJzZSBXYWxrVG9rZW5zIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgICAgICAgaWYgKHBhY2sud2Fsa1Rva2Vucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtUb2tlbnMgPSB0aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFja1dhbGt0b2tlbnMgPSBwYWNrLndhbGtUb2tlbnM7XG4gICAgICAgICAgICAgICAgb3B0cy53YWxrVG9rZW5zID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2gocGFja1dhbGt0b2tlbnMuY2FsbCh0aGlzLCB0b2tlbikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2Fsa1Rva2Vucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdCh3YWxrVG9rZW5zLmNhbGwodGhpcywgdG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0geyAuLi50aGlzLmRlZmF1bHRzLCAuLi5vcHRzIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0T3B0aW9ucyhvcHQpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHsgLi4udGhpcy5kZWZhdWx0cywgLi4ub3B0IH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsZXhlcihzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9MZXhlci5sZXgoc3JjLCBvcHRpb25zID8/IHRoaXMuZGVmYXVsdHMpO1xuICAgIH1cbiAgICBwYXJzZXIodG9rZW5zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfUGFyc2VyLnBhcnNlKHRva2Vucywgb3B0aW9ucyA/PyB0aGlzLmRlZmF1bHRzKTtcbiAgICB9XG4gICAgcGFyc2VNYXJrZG93bihibG9ja1R5cGUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgcGFyc2UgPSAoc3JjLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnT3B0ID0geyAuLi5vcHRpb25zIH07XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9yaWdPcHQgfTtcbiAgICAgICAgICAgIGNvbnN0IHRocm93RXJyb3IgPSB0aGlzLm9uRXJyb3IoISFvcHQuc2lsZW50LCAhIW9wdC5hc3luYyk7XG4gICAgICAgICAgICAvLyB0aHJvdyBlcnJvciBpZiBhbiBleHRlbnNpb24gc2V0IGFzeW5jIHRvIHRydWUgYnV0IHBhcnNlIHdhcyBjYWxsZWQgd2l0aCBhc3luYzogZmFsc2VcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmFzeW5jID09PSB0cnVlICYmIG9yaWdPcHQuYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdtYXJrZWQoKTogVGhlIGFzeW5jIG9wdGlvbiB3YXMgc2V0IHRvIHRydWUgYnkgYW4gZXh0ZW5zaW9uLiBSZW1vdmUgYXN5bmM6IGZhbHNlIGZyb20gdGhlIHBhcnNlIG9wdGlvbnMgb2JqZWN0IHRvIHJldHVybiBhIFByb21pc2UuJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3IgaW4gY2FzZSBvZiBub24gc3RyaW5nIGlucHV0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNyYyA9PT0gJ3VuZGVmaW5lZCcgfHwgc3JjID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcmMgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgJ1xuICAgICAgICAgICAgICAgICAgICArIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzcmMpICsgJywgc3RyaW5nIGV4cGVjdGVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ob29rcykge1xuICAgICAgICAgICAgICAgIG9wdC5ob29rcy5vcHRpb25zID0gb3B0O1xuICAgICAgICAgICAgICAgIG9wdC5ob29rcy5ibG9jayA9IGJsb2NrVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxleGVyID0gb3B0Lmhvb2tzID8gb3B0Lmhvb2tzLnByb3ZpZGVMZXhlcigpIDogKGJsb2NrVHlwZSA/IF9MZXhlci5sZXggOiBfTGV4ZXIubGV4SW5saW5lKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IG9wdC5ob29rcyA/IG9wdC5ob29rcy5wcm92aWRlUGFyc2VyKCkgOiAoYmxvY2tUeXBlID8gX1BhcnNlci5wYXJzZSA6IF9QYXJzZXIucGFyc2VJbmxpbmUpO1xuICAgICAgICAgICAgaWYgKG9wdC5hc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob3B0Lmhvb2tzID8gb3B0Lmhvb2tzLnByZXByb2Nlc3Moc3JjKSA6IHNyYylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oc3JjID0+IGxleGVyKHNyYywgb3B0KSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4odG9rZW5zID0+IG9wdC5ob29rcyA/IG9wdC5ob29rcy5wcm9jZXNzQWxsVG9rZW5zKHRva2VucykgOiB0b2tlbnMpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHRva2VucyA9PiBvcHQud2Fsa1Rva2VucyA/IFByb21pc2UuYWxsKHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIG9wdC53YWxrVG9rZW5zKSkudGhlbigoKSA9PiB0b2tlbnMpIDogdG9rZW5zKVxuICAgICAgICAgICAgICAgICAgICAudGhlbih0b2tlbnMgPT4gcGFyc2VyKHRva2Vucywgb3B0KSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oaHRtbCA9PiBvcHQuaG9va3MgPyBvcHQuaG9va3MucG9zdHByb2Nlc3MoaHRtbCkgOiBodG1sKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2godGhyb3dFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc3JjID0gb3B0Lmhvb2tzLnByZXByb2Nlc3Moc3JjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHRva2VucyA9IGxleGVyKHNyYywgb3B0KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0Lmhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VucyA9IG9wdC5ob29rcy5wcm9jZXNzQWxsVG9rZW5zKHRva2Vucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHQud2Fsa1Rva2Vucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndhbGtUb2tlbnModG9rZW5zLCBvcHQud2Fsa1Rva2Vucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gcGFyc2VyKHRva2Vucywgb3B0KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0Lmhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBvcHQuaG9va3MucG9zdHByb2Nlc3MoaHRtbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlO1xuICAgIH1cbiAgICBvbkVycm9yKHNpbGVudCwgYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIChlKSA9PiB7XG4gICAgICAgICAgICBlLm1lc3NhZ2UgKz0gJ1xcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLic7XG4gICAgICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJzxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPidcbiAgICAgICAgICAgICAgICAgICAgKyBlc2NhcGUoZS5tZXNzYWdlICsgJycsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICsgJzwvcHJlPic7XG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jb25zdCBtYXJrZWRJbnN0YW5jZSA9IG5ldyBNYXJrZWQoKTtcbmZ1bmN0aW9uIG1hcmtlZChzcmMsIG9wdCkge1xuICAgIHJldHVybiBtYXJrZWRJbnN0YW5jZS5wYXJzZShzcmMsIG9wdCk7XG59XG4vKipcbiAqIFNldHMgdGhlIGRlZmF1bHQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBIYXNoIG9mIG9wdGlvbnNcbiAqL1xubWFya2VkLm9wdGlvbnMgPVxuICAgIG1hcmtlZC5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgbWFya2VkSW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgbWFya2VkLmRlZmF1bHRzID0gbWFya2VkSW5zdGFuY2UuZGVmYXVsdHM7XG4gICAgICAgIGNoYW5nZURlZmF1bHRzKG1hcmtlZC5kZWZhdWx0cyk7XG4gICAgICAgIHJldHVybiBtYXJrZWQ7XG4gICAgfTtcbi8qKlxuICogR2V0cyB0aGUgb3JpZ2luYWwgbWFya2VkIGRlZmF1bHQgb3B0aW9ucy5cbiAqL1xubWFya2VkLmdldERlZmF1bHRzID0gX2dldERlZmF1bHRzO1xubWFya2VkLmRlZmF1bHRzID0gX2RlZmF1bHRzO1xuLyoqXG4gKiBVc2UgRXh0ZW5zaW9uXG4gKi9cbm1hcmtlZC51c2UgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIG1hcmtlZEluc3RhbmNlLnVzZSguLi5hcmdzKTtcbiAgICBtYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWRJbnN0YW5jZS5kZWZhdWx0cztcbiAgICBjaGFuZ2VEZWZhdWx0cyhtYXJrZWQuZGVmYXVsdHMpO1xuICAgIHJldHVybiBtYXJrZWQ7XG59O1xuLyoqXG4gKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gKi9cbm1hcmtlZC53YWxrVG9rZW5zID0gZnVuY3Rpb24gKHRva2VucywgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbWFya2VkSW5zdGFuY2Uud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKTtcbn07XG4vKipcbiAqIENvbXBpbGVzIG1hcmtkb3duIHRvIEhUTUwgd2l0aG91dCBlbmNsb3NpbmcgYHBgIHRhZy5cbiAqXG4gKiBAcGFyYW0gc3JjIFN0cmluZyBvZiBtYXJrZG93biBzb3VyY2UgdG8gYmUgY29tcGlsZWRcbiAqIEBwYXJhbSBvcHRpb25zIEhhc2ggb2Ygb3B0aW9uc1xuICogQHJldHVybiBTdHJpbmcgb2YgY29tcGlsZWQgSFRNTFxuICovXG5tYXJrZWQucGFyc2VJbmxpbmUgPSBtYXJrZWRJbnN0YW5jZS5wYXJzZUlubGluZTtcbi8qKlxuICogRXhwb3NlXG4gKi9cbm1hcmtlZC5QYXJzZXIgPSBfUGFyc2VyO1xubWFya2VkLnBhcnNlciA9IF9QYXJzZXIucGFyc2U7XG5tYXJrZWQuUmVuZGVyZXIgPSBfUmVuZGVyZXI7XG5tYXJrZWQuVGV4dFJlbmRlcmVyID0gX1RleHRSZW5kZXJlcjtcbm1hcmtlZC5MZXhlciA9IF9MZXhlcjtcbm1hcmtlZC5sZXhlciA9IF9MZXhlci5sZXg7XG5tYXJrZWQuVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbm1hcmtlZC5Ib29rcyA9IF9Ib29rcztcbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcbmNvbnN0IG9wdGlvbnMgPSBtYXJrZWQub3B0aW9ucztcbmNvbnN0IHNldE9wdGlvbnMgPSBtYXJrZWQuc2V0T3B0aW9ucztcbmNvbnN0IHVzZSA9IG1hcmtlZC51c2U7XG5jb25zdCB3YWxrVG9rZW5zID0gbWFya2VkLndhbGtUb2tlbnM7XG5jb25zdCBwYXJzZUlubGluZSA9IG1hcmtlZC5wYXJzZUlubGluZTtcbmNvbnN0IHBhcnNlID0gbWFya2VkO1xuY29uc3QgcGFyc2VyID0gX1BhcnNlci5wYXJzZTtcbmNvbnN0IGxleGVyID0gX0xleGVyLmxleDtcblxuZXhwb3J0IHsgX0hvb2tzIGFzIEhvb2tzLCBfTGV4ZXIgYXMgTGV4ZXIsIE1hcmtlZCwgX1BhcnNlciBhcyBQYXJzZXIsIF9SZW5kZXJlciBhcyBSZW5kZXJlciwgX1RleHRSZW5kZXJlciBhcyBUZXh0UmVuZGVyZXIsIF9Ub2tlbml6ZXIgYXMgVG9rZW5pemVyLCBfZGVmYXVsdHMgYXMgZGVmYXVsdHMsIF9nZXREZWZhdWx0cyBhcyBnZXREZWZhdWx0cywgbGV4ZXIsIG1hcmtlZCwgb3B0aW9ucywgcGFyc2UsIHBhcnNlSW5saW5lLCBwYXJzZXIsIHNldE9wdGlvbnMsIHVzZSwgd2Fsa1Rva2VucyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFya2VkLmVzbS5qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgbWFya2VkLCBUb2tlbiB9IGZyb20gJ21hcmtlZCdcbmltcG9ydCB7IHN0cmlwU3lzdGVtTWVzc2FnZXMgfSBmcm9tICcuL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnXG5pbXBvcnQgeyBoaWdobGlnaHQsIHN1cHBvcnRzTGFuZ3VhZ2UgfSBmcm9tICdjbGktaGlnaGxpZ2h0J1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWFya2Rvd24oY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG1hcmtlZFxuICAgIC5sZXhlcihzdHJpcFN5c3RlbU1lc3NhZ2VzKGNvbnRlbnQpKVxuICAgIC5tYXAoXyA9PiBmb3JtYXQoXykpXG4gICAgLmpvaW4oJycpXG4gICAgLnRyaW0oKVxufVxuXG5mdW5jdGlvbiBmb3JtYXQoXG4gIHRva2VuOiBUb2tlbixcbiAgbGlzdERlcHRoID0gMCxcbiAgb3JkZXJlZExpc3ROdW1iZXI6IG51bWJlciB8IG51bGwgPSBudWxsLFxuICBwYXJlbnQ6IFRva2VuIHwgbnVsbCA9IG51bGwsXG4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIHJldHVybiBjaGFsay5kaW0uaXRhbGljKCh0b2tlbi50b2tlbnMgPz8gW10pLm1hcChfID0+IGZvcm1hdChfKSkuam9pbignJykpXG4gICAgY2FzZSAnY29kZSc6XG4gICAgICBpZiAodG9rZW4ubGFuZyAmJiBzdXBwb3J0c0xhbmd1YWdlKHRva2VuLmxhbmcpKSB7XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQodG9rZW4udGV4dCwgeyBsYW5ndWFnZTogdG9rZW4ubGFuZyB9KSArIEVPTFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgYExhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgd2hpbGUgaGlnaGxpZ2h0aW5nIGNvZGUsIGZhbGxpbmcgYmFjayB0byBtYXJrZG93bjogJHt0b2tlbi5sYW5nfWAsXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodCh0b2tlbi50ZXh0LCB7IGxhbmd1YWdlOiAnbWFya2Rvd24nIH0pICsgRU9MXG4gICAgICB9XG4gICAgY2FzZSAnY29kZXNwYW4nOlxuICAgICAgLy8gaW5saW5lIGNvZGVcbiAgICAgIHJldHVybiBjaGFsay5ibHVlKHRva2VuLnRleHQpXG4gICAgY2FzZSAnZW0nOlxuICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYygodG9rZW4udG9rZW5zID8/IFtdKS5tYXAoXyA9PiBmb3JtYXQoXykpLmpvaW4oJycpKVxuICAgIGNhc2UgJ3N0cm9uZyc6XG4gICAgICByZXR1cm4gY2hhbGsuYm9sZCgodG9rZW4udG9rZW5zID8/IFtdKS5tYXAoXyA9PiBmb3JtYXQoXykpLmpvaW4oJycpKVxuICAgIGNhc2UgJ2hlYWRpbmcnOlxuICAgICAgc3dpdGNoICh0b2tlbi5kZXB0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIGgxXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNoYWxrLmJvbGQuaXRhbGljLnVuZGVybGluZShcbiAgICAgICAgICAgICAgKHRva2VuLnRva2VucyA/PyBbXSkubWFwKF8gPT4gZm9ybWF0KF8pKS5qb2luKCcnKSxcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgRU9MICtcbiAgICAgICAgICAgIEVPTFxuICAgICAgICAgIClcbiAgICAgICAgY2FzZSAyOiAvLyBoMlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjaGFsay5ib2xkKCh0b2tlbi50b2tlbnMgPz8gW10pLm1hcChfID0+IGZvcm1hdChfKSkuam9pbignJykpICtcbiAgICAgICAgICAgIEVPTCArXG4gICAgICAgICAgICBFT0xcbiAgICAgICAgICApXG4gICAgICAgIGRlZmF1bHQ6IC8vIGgzK1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjaGFsay5ib2xkLmRpbSgodG9rZW4udG9rZW5zID8/IFtdKS5tYXAoXyA9PiBmb3JtYXQoXykpLmpvaW4oJycpKSArXG4gICAgICAgICAgICBFT0wgK1xuICAgICAgICAgICAgRU9MXG4gICAgICAgICAgKVxuICAgICAgfVxuICAgIGNhc2UgJ2hyJzpcbiAgICAgIHJldHVybiAnLS0tJ1xuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgIHJldHVybiBgW0ltYWdlOiAke3Rva2VuLnRpdGxlfTogJHt0b2tlbi5ocmVmfV1gXG4gICAgY2FzZSAnbGluayc6XG4gICAgICByZXR1cm4gY2hhbGsuYmx1ZSh0b2tlbi5ocmVmKVxuICAgIGNhc2UgJ2xpc3QnOiB7XG4gICAgICByZXR1cm4gdG9rZW4uaXRlbXNcbiAgICAgICAgLm1hcCgoXzogVG9rZW4sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgXyxcbiAgICAgICAgICAgIGxpc3REZXB0aCxcbiAgICAgICAgICAgIHRva2VuLm9yZGVyZWQgPyB0b2tlbi5zdGFydCArIGluZGV4IDogbnVsbCxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJycpXG4gICAgfVxuICAgIGNhc2UgJ2xpc3RfaXRlbSc6XG4gICAgICByZXR1cm4gKHRva2VuLnRva2VucyA/PyBbXSlcbiAgICAgICAgLm1hcChcbiAgICAgICAgICBfID0+XG4gICAgICAgICAgICBgJHsnICAnLnJlcGVhdChsaXN0RGVwdGgpfSR7Zm9ybWF0KF8sIGxpc3REZXB0aCArIDEsIG9yZGVyZWRMaXN0TnVtYmVyLCB0b2tlbil9YCxcbiAgICAgICAgKVxuICAgICAgICAuam9pbignJylcbiAgICBjYXNlICdwYXJhZ3JhcGgnOlxuICAgICAgcmV0dXJuICh0b2tlbi50b2tlbnMgPz8gW10pLm1hcChfID0+IGZvcm1hdChfKSkuam9pbignJykgKyBFT0xcbiAgICBjYXNlICdzcGFjZSc6XG4gICAgICByZXR1cm4gRU9MXG4gICAgY2FzZSAndGV4dCc6XG4gICAgICBpZiAocGFyZW50Py50eXBlID09PSAnbGlzdF9pdGVtJykge1xuICAgICAgICByZXR1cm4gYCR7b3JkZXJlZExpc3ROdW1iZXIgPT09IG51bGwgPyAnLScgOiBnZXRMaXN0TnVtYmVyKGxpc3REZXB0aCwgb3JkZXJlZExpc3ROdW1iZXIpICsgJy4nfSAke3Rva2VuLnRva2VucyA/IHRva2VuLnRva2Vucy5tYXAoXyA9PiBmb3JtYXQoXywgbGlzdERlcHRoLCBvcmRlcmVkTGlzdE51bWJlciwgdG9rZW4pKS5qb2luKCcnKSA6IHRva2VuLnRleHR9JHtFT0x9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLnRleHRcbiAgICAgIH1cbiAgfVxuICAvLyBUT0RPOiB0YWJsZXNcbiAgcmV0dXJuICcnXG59XG5cbmNvbnN0IERFUFRIXzFfTElTVF9OVU1CRVJTID0gW1xuICAnYScsXG4gICdiJyxcbiAgJ2MnLFxuICAnZCcsXG4gICdlJyxcbiAgJ2YnLFxuICAnZycsXG4gICdoJyxcbiAgJ2knLFxuICAnaicsXG4gICdrJyxcbiAgJ2wnLFxuICAnbScsXG4gICduJyxcbiAgJ28nLFxuICAncCcsXG4gICdxJyxcbiAgJ3InLFxuICAncycsXG4gICd0JyxcbiAgJ3UnLFxuICAndicsXG4gICd3JyxcbiAgJ3gnLFxuICAneScsXG4gICd6JyxcbiAgJ2FhJyxcbiAgJ2FiJyxcbiAgJ2FjJyxcbiAgJ2FkJyxcbiAgJ2FlJyxcbiAgJ2FmJyxcbiAgJ2FnJyxcbiAgJ2FoJyxcbiAgJ2FpJyxcbiAgJ2FqJyxcbiAgJ2FrJyxcbiAgJ2FsJyxcbiAgJ2FtJyxcbiAgJ2FuJyxcbiAgJ2FvJyxcbiAgJ2FwJyxcbiAgJ2FxJyxcbiAgJ2FyJyxcbiAgJ2FzJyxcbiAgJ2F0JyxcbiAgJ2F1JyxcbiAgJ2F2JyxcbiAgJ2F3JyxcbiAgJ2F4JyxcbiAgJ2F5JyxcbiAgJ2F6Jyxcbl1cbmNvbnN0IERFUFRIXzJfTElTVF9OVU1CRVJTID0gW1xuICAnaScsXG4gICdpaScsXG4gICdpaWknLFxuICAnaXYnLFxuICAndicsXG4gICd2aScsXG4gICd2aWknLFxuICAndmlpaScsXG4gICdpeCcsXG4gICd4JyxcbiAgJ3hpJyxcbiAgJ3hpaScsXG4gICd4aWlpJyxcbiAgJ3hpdicsXG4gICd4dicsXG4gICd4dmknLFxuICAneHZpaScsXG4gICd4dmlpaScsXG4gICd4aXgnLFxuICAneHgnLFxuICAneHhpJyxcbiAgJ3h4aWknLFxuICAneHhpaWknLFxuICAneHhpdicsXG4gICd4eHYnLFxuICAneHh2aScsXG4gICd4eHZpaScsXG4gICd4eHZpaWknLFxuICAneHhpeCcsXG4gICd4eHgnLFxuICAneHh4aScsXG4gICd4eHhpaScsXG4gICd4eHhpaWknLFxuICAneHh4aXYnLFxuICAneHh4dicsXG4gICd4eHh2aScsXG4gICd4eHh2aWknLFxuICAneHh4dmlpaScsXG4gICd4eHhpeCcsXG4gICd4bCcsXG5dXG5cbmZ1bmN0aW9uIGdldExpc3ROdW1iZXIobGlzdERlcHRoOiBudW1iZXIsIG9yZGVyZWRMaXN0TnVtYmVyOiBudW1iZXIpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGxpc3REZXB0aCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gb3JkZXJlZExpc3ROdW1iZXIudG9TdHJpbmcoKVxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBERVBUSF8xX0xJU1RfTlVNQkVSU1tvcmRlcmVkTGlzdE51bWJlciAtIDFdISAvLyBUT0RPOiBkb24ndCBoYXJkIGNvZGUgdGhlIGxpc3RcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gREVQVEhfMl9MSVNUX05VTUJFUlNbb3JkZXJlZExpc3ROdW1iZXIgLSAxXSEgLy8gVE9ETzogZG9uJ3QgaGFyZCBjb2RlIHRoZSBsaXN0XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvcmRlcmVkTGlzdE51bWJlci50b1N0cmluZygpXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgVGV4dEJsb2NrUGFyYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQXNzaXN0YW50QmFzaE91dHB1dE1lc3NhZ2UgfSBmcm9tICcuL0Fzc2lzdGFudEJhc2hPdXRwdXRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgQXNzaXN0YW50TG9jYWxDb21tYW5kT3V0cHV0TWVzc2FnZSB9IGZyb20gJy4vQXNzaXN0YW50TG9jYWxDb21tYW5kT3V0cHV0TWVzc2FnZS5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBDb3N0IH0gZnJvbSAnLi4vQ29zdC5qcydcbmltcG9ydCB7XG4gIEFQSV9FUlJPUl9NRVNTQUdFX1BSRUZJWCxcbiAgQ1JFRElUX0JBTEFOQ0VfVE9PX0xPV19FUlJPUl9NRVNTQUdFLFxuICBJTlZBTElEX0FQSV9LRVlfRVJST1JfTUVTU0FHRSxcbiAgUFJPTVBUX1RPT19MT05HX0VSUk9SX01FU1NBR0UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NsYXVkZS5qcydcbmltcG9ydCB7XG4gIENBTkNFTF9NRVNTQUdFLFxuICBJTlRFUlJVUFRfTUVTU0FHRSxcbiAgSU5URVJSVVBUX01FU1NBR0VfRk9SX1RPT0xfVVNFLFxuICBpc0VtcHR5TWVzc2FnZVRleHQsXG4gIE5PX1JFU1BPTlNFX1JFUVVFU1RFRCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZXMuanMnXG5pbXBvcnQgeyBCTEFDS19DSVJDTEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZmlndXJlcy5qcydcbmltcG9ydCB7IGFwcGx5TWFya2Rvd24gfSBmcm9tICcuLi8uLi91dGlscy9tYXJrZG93bi5qcydcbmltcG9ydCB7IHVzZVRlcm1pbmFsU2l6ZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRlcm1pbmFsU2l6ZS5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgcGFyYW06IFRleHRCbG9ja1BhcmFtXG4gIGNvc3RVU0Q6IG51bWJlclxuICBkdXJhdGlvbk1zOiBudW1iZXJcbiAgZGVidWc6IGJvb2xlYW5cbiAgYWRkTWFyZ2luOiBib29sZWFuXG4gIHNob3VsZFNob3dEb3Q6IGJvb2xlYW5cbiAgdmVyYm9zZT86IGJvb2xlYW5cbiAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFzc2lzdGFudFRleHRNZXNzYWdlKHtcbiAgcGFyYW06IHsgdGV4dCB9LFxuICBjb3N0VVNELFxuICBkdXJhdGlvbk1zLFxuICBkZWJ1ZyxcbiAgYWRkTWFyZ2luLFxuICBzaG91bGRTaG93RG90LFxuICB2ZXJib3NlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIGlmIChpc0VtcHR5TWVzc2FnZVRleHQodGV4dCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gU2hvdyBiYXNoIG91dHB1dFxuICBpZiAodGV4dC5zdGFydHNXaXRoKCc8YmFzaC1zdGRvdXQnKSB8fCB0ZXh0LnN0YXJ0c1dpdGgoJzxiYXNoLXN0ZGVycicpKSB7XG4gICAgcmV0dXJuIDxBc3Npc3RhbnRCYXNoT3V0cHV0TWVzc2FnZSBjb250ZW50PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICB9XG5cbiAgLy8gU2hvdyBjb21tYW5kIG91dHB1dFxuICBpZiAoXG4gICAgdGV4dC5zdGFydHNXaXRoKCc8bG9jYWwtY29tbWFuZC1zdGRvdXQnKSB8fFxuICAgIHRleHQuc3RhcnRzV2l0aCgnPGxvY2FsLWNvbW1hbmQtc3RkZXJyJylcbiAgKSB7XG4gICAgcmV0dXJuIDxBc3Npc3RhbnRMb2NhbENvbW1hbmRPdXRwdXRNZXNzYWdlIGNvbnRlbnQ9e3RleHR9IC8+XG4gIH1cblxuICBpZiAodGV4dC5zdGFydHNXaXRoKEFQSV9FUlJPUl9NRVNTQUdFX1BSRUZJWCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRleHQ+XG4gICAgICAgICZuYnNwOyZuYnNwO+KOvyAmbmJzcDtcbiAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuZXJyb3J9PlxuICAgICAgICAgIHt0ZXh0ID09PSBBUElfRVJST1JfTUVTU0FHRV9QUkVGSVhcbiAgICAgICAgICAgID8gYCR7QVBJX0VSUk9SX01FU1NBR0VfUFJFRklYfTogUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gXG4gICAgICAgICAgICA6IHRleHR9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVGV4dD5cbiAgICApXG4gIH1cblxuICBzd2l0Y2ggKHRleHQpIHtcbiAgICAvLyBMb2NhbCBKU1ggY29tbWFuZHMgZG9uJ3QgbmVlZCBhIHJlc3BvbnNlLCBidXQgd2Ugc3RpbGwgd2FudCBDbGF1ZGUgdG8gc2VlIHRoZW1cbiAgICAvLyBUb29sIHJlc3VsdHMgcmVuZGVyIHRoZWlyIG93biBpbnRlcnJ1cHQgbWVzc2FnZXNcbiAgICBjYXNlIE5PX1JFU1BPTlNFX1JFUVVFU1RFRDpcbiAgICBjYXNlIElOVEVSUlVQVF9NRVNTQUdFX0ZPUl9UT09MX1VTRTpcbiAgICAgIHJldHVybiBudWxsXG5cbiAgICBjYXNlIElOVEVSUlVQVF9NRVNTQUdFOlxuICAgIGNhc2UgQ0FOQ0VMX01FU1NBR0U6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAmbmJzcDsmbmJzcDvijr8gJm5ic3A7XG4gICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuZXJyb3J9PkludGVycnVwdGVkIGJ5IHVzZXI8L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcblxuICAgIGNhc2UgUFJPTVBUX1RPT19MT05HX0VSUk9SX01FU1NBR0U6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAmbmJzcDsmbmJzcDvijr8gJm5ic3A7XG4gICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuZXJyb3J9PlxuICAgICAgICAgICAgQ29udGV4dCBsb3cgJm1pZGRvdDsgUnVuIC9jb21wYWN0IHRvIGNvbXBhY3QgJiBjb250aW51ZVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuXG4gICAgY2FzZSBDUkVESVRfQkFMQU5DRV9UT09fTE9XX0VSUk9SX01FU1NBR0U6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAmbmJzcDsmbmJzcDvijr8gJm5ic3A7XG4gICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuZXJyb3J9PlxuICAgICAgICAgICAgQ3JlZGl0IGJhbGFuY2UgdG9vIGxvdyAmbWlkZG90OyBBZGQgZnVuZHM6XG4gICAgICAgICAgICBodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9zZXR0aW5ncy9iaWxsaW5nXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICApXG5cbiAgICBjYXNlIElOVkFMSURfQVBJX0tFWV9FUlJPUl9NRVNTQUdFOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgJm5ic3A7Jm5ic3A74o6/ICZuYnNwO1xuICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLmVycm9yfT57SU5WQUxJRF9BUElfS0VZX0VSUk9SX01FU1NBR0V9PC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICApXG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJveFxuICAgICAgICAgIGFsaWduSXRlbXM9XCJmbGV4LXN0YXJ0XCJcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwicm93XCJcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIlxuICAgICAgICAgIG1hcmdpblRvcD17YWRkTWFyZ2luID8gMSA6IDB9XG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAgICAgICAge3Nob3VsZFNob3dEb3QgJiYgKFxuICAgICAgICAgICAgICA8Qm94IG1pbldpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS50ZXh0fT57QkxBQ0tfQ0lSQ0xFfTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9e2NvbHVtbnMgLSA2fT5cbiAgICAgICAgICAgICAgPFRleHQ+e2FwcGx5TWFya2Rvd24odGV4dCl9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPENvc3QgY29zdFVTRD17Y29zdFVTRH0gZHVyYXRpb25Ncz17ZHVyYXRpb25Nc30gZGVidWc9e2RlYnVnfSAvPlxuICAgICAgICA8L0JveD5cbiAgICAgIClcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBCYXNoVG9vbFJlc3VsdE1lc3NhZ2UgZnJvbSAnLi4vLi4vdG9vbHMvQmFzaFRvb2wvQmFzaFRvb2xSZXN1bHRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdFRhZyB9IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQXNzaXN0YW50QmFzaE91dHB1dE1lc3NhZ2Uoe1xuICBjb250ZW50LFxuICB2ZXJib3NlLFxufToge1xuICBjb250ZW50OiBzdHJpbmdcbiAgdmVyYm9zZT86IGJvb2xlYW5cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBzdGRvdXQgPSBleHRyYWN0VGFnKGNvbnRlbnQsICdiYXNoLXN0ZG91dCcpID8/ICcnXG4gIGNvbnN0IHN0ZGVyciA9IGV4dHJhY3RUYWcoY29udGVudCwgJ2Jhc2gtc3RkZXJyJykgPz8gJydcbiAgY29uc3Qgc3Rkb3V0TGluZXMgPSBzdGRvdXQuc3BsaXQoJ1xcbicpLmxlbmd0aFxuICBjb25zdCBzdGRlcnJMaW5lcyA9IHN0ZGVyci5zcGxpdCgnXFxuJykubGVuZ3RoXG4gIHJldHVybiAoXG4gICAgPEJhc2hUb29sUmVzdWx0TWVzc2FnZVxuICAgICAgY29udGVudD17eyBzdGRvdXQsIHN0ZG91dExpbmVzLCBzdGRlcnIsIHN0ZGVyckxpbmVzIH19XG4gICAgICB2ZXJib3NlPXshIXZlcmJvc2V9XG4gICAgLz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGV4dHJhY3RUYWcgfSBmcm9tICcuLi8uLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5cbmV4cG9ydCBmdW5jdGlvbiBBc3Npc3RhbnRMb2NhbENvbW1hbmRPdXRwdXRNZXNzYWdlKHtcbiAgY29udGVudCxcbn06IHtcbiAgY29udGVudDogc3RyaW5nXG59KTogUmVhY3QuUmVhY3ROb2RlW10ge1xuICBjb25zdCBzdGRvdXQgPSBleHRyYWN0VGFnKGNvbnRlbnQsICdsb2NhbC1jb21tYW5kLXN0ZG91dCcpXG4gIGNvbnN0IHN0ZGVyciA9IGV4dHJhY3RUYWcoY29udGVudCwgJ2xvY2FsLWNvbW1hbmQtc3RkZXJyJylcbiAgaWYgKCFzdGRvdXQgJiYgIXN0ZGVycikge1xuICAgIHJldHVybiBbXVxuICB9XG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuICBsZXQgaW5zaWRlcyA9IFtcbiAgICBmb3JtYXQoc3Rkb3V0Py50cmltKCksIHRoZW1lLnRleHQpLFxuICAgIGZvcm1hdChzdGRlcnI/LnRyaW0oKSwgdGhlbWUuZXJyb3IpLFxuICBdLmZpbHRlcihCb29sZWFuKVxuXG4gIGlmIChpbnNpZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGluc2lkZXMgPSBbPFRleHQga2V5PVwiMFwiPihObyBvdXRwdXQpPC9UZXh0Pl1cbiAgfVxuXG4gIHJldHVybiBbXG4gICAgPEJveCBrZXk9XCIwXCIgZ2FwPXsxfT5cbiAgICAgIDxCb3g+XG4gICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fT57JyAgJ33ijr8gPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgICB7aW5zaWRlcy5tYXAoKF8sIGluZGV4KSA9PiAoXG4gICAgICAgIDxCb3gga2V5PXtpbmRleH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIHtffVxuICAgICAgICA8L0JveD5cbiAgICAgICkpfVxuICAgIDwvQm94PixcbiAgXVxufVxuXG5mdW5jdGlvbiBmb3JtYXQoY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb2xvcjogc3RyaW5nKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gPFRleHQgY29sb3I9e2NvbG9yfT57Y29udGVudH08L1RleHQ+XG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IGV4dHJhY3RUYWcgfSBmcm9tICcuLi8uLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IFRleHRCbG9ja1BhcmFtIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzL2luZGV4Lm1qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgYWRkTWFyZ2luOiBib29sZWFuXG4gIHBhcmFtOiBUZXh0QmxvY2tQYXJhbVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXNlckNvbW1hbmRNZXNzYWdlKHtcbiAgYWRkTWFyZ2luLFxuICBwYXJhbTogeyB0ZXh0IH0sXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IGNvbW1hbmRNZXNzYWdlID0gZXh0cmFjdFRhZyh0ZXh0LCAnY29tbWFuZC1tZXNzYWdlJylcbiAgY29uc3QgYXJncyA9IGV4dHJhY3RUYWcodGV4dCwgJ2NvbW1hbmQtYXJncycpXG4gIGlmICghY29tbWFuZE1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZSgpXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luVG9wPXthZGRNYXJnaW4gPyAxIDogMH0gd2lkdGg9XCIxMDAlXCI+XG4gICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICZndDsgL3tjb21tYW5kTWVzc2FnZX0ge2FyZ3N9XG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVGV4dEJsb2NrUGFyYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgdXNlVGVybWluYWxTaXplIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBhZGRNYXJnaW46IGJvb2xlYW5cbiAgcGFyYW06IFRleHRCbG9ja1BhcmFtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VyUHJvbXB0TWVzc2FnZSh7XG4gIGFkZE1hcmdpbixcbiAgcGFyYW06IHsgdGV4dCB9LFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIGlmICghdGV4dCkge1xuICAgIGxvZ0Vycm9yKCdObyBjb250ZW50IGZvdW5kIGluIHVzZXIgcHJvbXB0IG1lc3NhZ2UnKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIG1hcmdpblRvcD17YWRkTWFyZ2luID8gMSA6IDB9IHdpZHRoPVwiMTAwJVwiPlxuICAgICAgPEJveCBtaW5XaWR0aD17Mn0gd2lkdGg9ezJ9PlxuICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT4mZ3Q7PC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiB3aWR0aD17Y29sdW1ucyAtIDR9PlxuICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fSB3cmFwPVwid3JhcFwiPlxuICAgICAgICAgIHt0ZXh0fVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBUZXh0QmxvY2tQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBVc2VyQmFzaElucHV0TWVzc2FnZSB9IGZyb20gJy4vVXNlckJhc2hJbnB1dE1lc3NhZ2UuanMnXG5pbXBvcnQgeyBVc2VyQ29tbWFuZE1lc3NhZ2UgfSBmcm9tICcuL1VzZXJDb21tYW5kTWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJQcm9tcHRNZXNzYWdlIH0gZnJvbSAnLi9Vc2VyUHJvbXB0TWVzc2FnZS5qcydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTk9fQ09OVEVOVF9NRVNTQUdFIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2xhdWRlLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBhZGRNYXJnaW46IGJvb2xlYW5cbiAgcGFyYW06IFRleHRCbG9ja1BhcmFtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VyVGV4dE1lc3NhZ2UoeyBhZGRNYXJnaW4sIHBhcmFtIH06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgaWYgKHBhcmFtLnRleHQudHJpbSgpID09PSBOT19DT05URU5UX01FU1NBR0UpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gQmFzaCBpbnB1dHMhXG4gIGlmIChwYXJhbS50ZXh0LmluY2x1ZGVzKCc8YmFzaC1pbnB1dD4nKSkge1xuICAgIHJldHVybiA8VXNlckJhc2hJbnB1dE1lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IHBhcmFtPXtwYXJhbX0gLz5cbiAgfVxuXG4gIC8vIFNsYXNoIGNvbW1hbmRzL1xuICBpZiAoXG4gICAgcGFyYW0udGV4dC5pbmNsdWRlcygnPGNvbW1hbmQtbmFtZT4nKSB8fFxuICAgIHBhcmFtLnRleHQuaW5jbHVkZXMoJzxjb21tYW5kLW1lc3NhZ2U+JylcbiAgKSB7XG4gICAgcmV0dXJuIDxVc2VyQ29tbWFuZE1lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IHBhcmFtPXtwYXJhbX0gLz5cbiAgfVxuXG4gIC8vIFVzZXIgcHJvbXB0cz5cbiAgcmV0dXJuIDxVc2VyUHJvbXB0TWVzc2FnZSBhZGRNYXJnaW49e2FkZE1hcmdpbn0gcGFyYW09e3BhcmFtfSAvPlxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBhZGRNYXJnaW46IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFzc2lzdGFudFJlZGFjdGVkVGhpbmtpbmdNZXNzYWdlKHtcbiAgYWRkTWFyZ2luID0gZmFsc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPEJveCBtYXJnaW5Ub3A9e2FkZE1hcmdpbiA/IDEgOiAwfT5cbiAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9IGl0YWxpYz5cbiAgICAgICAg4py7IFRoaW5raW5n4oCmXG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBNZXNzYWdlIGFzIE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL01lc3NhZ2UuanMnXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgdHlwZSBUb29sIH0gZnJvbSAnLi4vVG9vbC5qcydcbmltcG9ydCB7XG4gIGNyZWF0ZVVzZXJNZXNzYWdlLFxuICBpc0VtcHR5TWVzc2FnZVRleHQsXG4gIGlzTm90RW1wdHlNZXNzYWdlLFxuICBub3JtYWxpemVNZXNzYWdlcyxcbn0gZnJvbSAnLi4vdXRpbHMvbWVzc2FnZXMuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5pbXBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2UsIFVzZXJNZXNzYWdlIH0gZnJvbSAnLi4vcXVlcnkuanMnXG5pbXBvcnQgeyB1c2VFeGl0T25DdHJsQ0QgfSBmcm9tICcuLi9ob29rcy91c2VFeGl0T25DdHJsQ0QuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGVycm9yZWRUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICBtZXNzYWdlczogKFVzZXJNZXNzYWdlIHwgQXNzaXN0YW50TWVzc2FnZSlbXVxuICBvblNlbGVjdDogKG1lc3NhZ2U6IFVzZXJNZXNzYWdlKSA9PiB2b2lkXG4gIG9uRXNjYXBlOiAoKSA9PiB2b2lkXG4gIHRvb2xzOiBUb29sW11cbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG59XG5cbmNvbnN0IE1BWF9WSVNJQkxFX01FU1NBR0VTID0gN1xuXG5leHBvcnQgZnVuY3Rpb24gTWVzc2FnZVNlbGVjdG9yKHtcbiAgZXJyb3JlZFRvb2xVc2VJRHMsXG4gIG1lc3NhZ2VzLFxuICBvblNlbGVjdCxcbiAgb25Fc2NhcGUsXG4gIHRvb2xzLFxuICB1bnJlc29sdmVkVG9vbFVzZUlEcyxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgY3VycmVudFVVSUQgPSB1c2VNZW1vKHJhbmRvbVVVSUQsIFtdKVxuXG4gIC8vIExvZyB3aGVuIHNlbGVjdG9yIGlzIG9wZW5lZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV9tZXNzYWdlX3NlbGVjdG9yX29wZW5lZCcsIHt9KVxuICB9LCBbXSlcblxuICBmdW5jdGlvbiBoYW5kbGVTZWxlY3QobWVzc2FnZTogVXNlck1lc3NhZ2UpIHtcbiAgICBjb25zdCBpbmRleEZyb21FbmQgPSBtZXNzYWdlcy5sZW5ndGggLSAxIC0gbWVzc2FnZXMuaW5kZXhPZihtZXNzYWdlKVxuICAgIGxvZ0V2ZW50KCd0ZW5ndV9tZXNzYWdlX3NlbGVjdG9yX3NlbGVjdGVkJywge1xuICAgICAgaW5kZXhfZnJvbV9lbmQ6IGluZGV4RnJvbUVuZC50b1N0cmluZygpLFxuICAgICAgbWVzc2FnZV90eXBlOiBtZXNzYWdlLnR5cGUsXG4gICAgICBpc19jdXJyZW50X3Byb21wdDogKG1lc3NhZ2UudXVpZCA9PT0gY3VycmVudFVVSUQpLnRvU3RyaW5nKCksXG4gICAgfSlcbiAgICBvblNlbGVjdChtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXNjYXBlKCkge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV9tZXNzYWdlX3NlbGVjdG9yX2NhbmNlbGxlZCcsIHt9KVxuICAgIG9uRXNjYXBlKClcbiAgfVxuXG4gIC8vIEFkZCBjdXJyZW50IHByb21wdCBhcyBhIHZpcnR1YWwgbWVzc2FnZVxuICBjb25zdCBhbGxJdGVtcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgLy8gRmlsdGVyIG91dCB0b29sIHJlc3VsdHNcbiAgICAgIC4uLm1lc3NhZ2VzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgXyA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgXy50eXBlID09PSAndXNlcicgJiZcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShfLm1lc3NhZ2UuY29udGVudCkgJiZcbiAgICAgICAgICAgICAgXy5tZXNzYWdlLmNvbnRlbnRbMF0/LnR5cGUgPT09ICd0b29sX3Jlc3VsdCdcbiAgICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLy8gRmlsdGVyIG91dCBhc3Npc3RhbnQgbWVzc2FnZXMsIHVudGlsIHdlIGhhdmUgYSB3YXkgdG8ga2ljayBvZmYgdGhlIHRvb2wgdXNlIGxvb3AgZnJvbSBSRVBMXG4gICAgICAgIC5maWx0ZXIoXyA9PiBfLnR5cGUgIT09ICdhc3Npc3RhbnQnKSxcbiAgICAgIHsgLi4uY3JlYXRlVXNlck1lc3NhZ2UoJycpLCB1dWlkOiBjdXJyZW50VVVJRCB9IGFzIFVzZXJNZXNzYWdlLFxuICAgIF0sXG4gICAgW21lc3NhZ2VzLCBjdXJyZW50VVVJRF0sXG4gIClcbiAgY29uc3QgW3NlbGVjdGVkSW5kZXgsIHNldFNlbGVjdGVkSW5kZXhdID0gdXNlU3RhdGUoYWxsSXRlbXMubGVuZ3RoIC0gMSlcblxuICBjb25zdCBleGl0U3RhdGUgPSB1c2VFeGl0T25DdHJsQ0QoKCkgPT4gcHJvY2Vzcy5leGl0KDApKVxuXG4gIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgaWYgKGtleS50YWIgfHwga2V5LmVzY2FwZSkge1xuICAgICAgaGFuZGxlRXNjYXBlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgaGFuZGxlU2VsZWN0KGFsbEl0ZW1zW3NlbGVjdGVkSW5kZXhdISlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgIGlmIChrZXkuY3RybCB8fCBrZXkuc2hpZnQgfHwga2V5Lm1ldGEpIHtcbiAgICAgICAgLy8gSnVtcCB0byB0b3Agd2l0aCBhbnkgbW9kaWZpZXIga2V5XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXgoMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXgocHJldiA9PiBNYXRoLm1heCgwLCBwcmV2IC0gMSkpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICBpZiAoa2V5LmN0cmwgfHwga2V5LnNoaWZ0IHx8IGtleS5tZXRhKSB7XG4gICAgICAgIC8vIEp1bXAgdG8gYm90dG9tIHdpdGggYW55IG1vZGlmaWVyIGtleVxuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGFsbEl0ZW1zLmxlbmd0aCAtIDEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KHByZXYgPT4gTWF0aC5taW4oYWxsSXRlbXMubGVuZ3RoIC0gMSwgcHJldiArIDEpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBudW1iZXIga2V5cyAoMS05KVxuICAgIGNvbnN0IG51bSA9IE51bWJlcihpbnB1dClcbiAgICBpZiAoIWlzTmFOKG51bSkgJiYgbnVtID49IDEgJiYgbnVtIDw9IE1hdGgubWluKDksIGFsbEl0ZW1zLmxlbmd0aCkpIHtcbiAgICAgIGlmICghYWxsSXRlbXNbbnVtIC0gMV0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTZWxlY3QoYWxsSXRlbXNbbnVtIC0gMV0hKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmaXJzdFZpc2libGVJbmRleCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgTWF0aC5taW4oXG4gICAgICBzZWxlY3RlZEluZGV4IC0gTWF0aC5mbG9vcihNQVhfVklTSUJMRV9NRVNTQUdFUyAvIDIpLFxuICAgICAgYWxsSXRlbXMubGVuZ3RoIC0gTUFYX1ZJU0lCTEVfTUVTU0FHRVMsXG4gICAgKSxcbiAgKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRNZXNzYWdlcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbm9ybWFsaXplTWVzc2FnZXMobWVzc2FnZXMpLmZpbHRlcihpc05vdEVtcHR5TWVzc2FnZSksXG4gICAgW21lc3NhZ2VzXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCb3hcbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICBib3JkZXJDb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlCb3JkZXJ9XG4gICAgICAgIGhlaWdodD17NCArIE1hdGgubWluKE1BWF9WSVNJQkxFX01FU1NBR0VTLCBhbGxJdGVtcy5sZW5ndGgpICogMn1cbiAgICAgICAgcGFkZGluZ1g9ezF9XG4gICAgICAgIG1hcmdpblRvcD17MX1cbiAgICAgID5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWluSGVpZ2h0PXsyfSBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgIDxUZXh0IGJvbGQ+SnVtcCB0byBhIHByZXZpb3VzIG1lc3NhZ2U8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+VGhpcyB3aWxsIGZvcmsgdGhlIGNvbnZlcnNhdGlvbjwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIHthbGxJdGVtc1xuICAgICAgICAgIC5zbGljZShmaXJzdFZpc2libGVJbmRleCwgZmlyc3RWaXNpYmxlSW5kZXggKyBNQVhfVklTSUJMRV9NRVNTQUdFUylcbiAgICAgICAgICAubWFwKChtc2csIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxJbmRleCA9IGZpcnN0VmlzaWJsZUluZGV4ICsgaW5kZXhcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBhY3R1YWxJbmRleCA9PT0gc2VsZWN0ZWRJbmRleFxuICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50ID0gbXNnLnV1aWQgPT09IGN1cnJlbnRVVUlEXG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxCb3gga2V5PXttc2cudXVpZH0gZmxleERpcmVjdGlvbj1cInJvd1wiIGhlaWdodD17Mn0gbWluSGVpZ2h0PXsyfT5cbiAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs3fT5cbiAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImJsdWVcIiBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgIHtmaWd1cmVzLnBvaW50ZXJ9IHtmaXJzdFZpc2libGVJbmRleCArIGluZGV4ICsgMX17JyAnfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICB7JyAgJ31cbiAgICAgICAgICAgICAgICAgICAgICB7Zmlyc3RWaXNpYmxlSW5kZXggKyBpbmRleCArIDF9eycgJ31cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8Qm94IGhlaWdodD17MX0gb3ZlcmZsb3c9XCJoaWRkZW5cIiB3aWR0aD17MTAwfT5cbiAgICAgICAgICAgICAgICAgIHtpc0N1cnJlbnQgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3IgaXRhbGljPlxuICAgICAgICAgICAgICAgICAgICAgICAgeycoY3VycmVudCknfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICApIDogQXJyYXkuaXNBcnJheShtc2cubWVzc2FnZS5jb250ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICBtc2cubWVzc2FnZS5jb250ZW50WzBdPy50eXBlID09PSAndGV4dCcgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eU1lc3NhZ2VUZXh0KG1zZy5tZXNzYWdlLmNvbnRlbnRbMF0udGV4dCkgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yIGl0YWxpYz5cbiAgICAgICAgICAgICAgICAgICAgICAoZW1wdHkgbWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXttc2d9XG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXM9e25vcm1hbGl6ZWRNZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgICBhZGRNYXJnaW49e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3JlZFRvb2xVc2VJRHM9e2Vycm9yZWRUb29sVXNlSURzfVxuICAgICAgICAgICAgICAgICAgICAgIGluUHJvZ3Jlc3NUb29sVXNlSURzPXtuZXcgU2V0KCl9XG4gICAgICAgICAgICAgICAgICAgICAgdW5yZXNvbHZlZFRvb2xVc2VJRHM9e3VucmVzb2x2ZWRUb29sVXNlSURzfVxuICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEFuaW1hdGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dEb3Q9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICA8L0JveD5cbiAgICAgIDxCb3ggbWFyZ2luTGVmdD17M30+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIHtleGl0U3RhdGUucGVuZGluZyA/IChcbiAgICAgICAgICAgIDw+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+4oaRL+KGkyB0byBzZWxlY3QgwrcgRW50ZXIgdG8gY29uZmlybSDCtyBUYWIvRXNjIHRvIGNhbmNlbDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IEFzc2lzdGFudE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9xdWVyeS5qcydcbmltcG9ydCB7IEZpbGVFZGl0VG9vbCB9IGZyb20gJy4uLy4uL3Rvb2xzL0ZpbGVFZGl0VG9vbC9GaWxlRWRpdFRvb2wuanMnXG5pbXBvcnQgeyBGaWxlV3JpdGVUb29sIH0gZnJvbSAnLi4vLi4vdG9vbHMvRmlsZVdyaXRlVG9vbC9GaWxlV3JpdGVUb29sLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuLi8uLi90b29scy9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IEZpbGVFZGl0UGVybWlzc2lvblJlcXVlc3QgfSBmcm9tICcuL0ZpbGVFZGl0UGVybWlzc2lvblJlcXVlc3QvRmlsZUVkaXRQZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IEJhc2hQZXJtaXNzaW9uUmVxdWVzdCB9IGZyb20gJy4vQmFzaFBlcm1pc3Npb25SZXF1ZXN0L0Jhc2hQZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IEZhbGxiYWNrUGVybWlzc2lvblJlcXVlc3QgfSBmcm9tICcuL0ZhbGxiYWNrUGVybWlzc2lvblJlcXVlc3QuanMnXG5pbXBvcnQgeyB1c2VOb3RpZnlBZnRlclRpbWVvdXQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VOb3RpZnlBZnRlclRpbWVvdXQuanMnXG5pbXBvcnQgeyBGaWxlV3JpdGVQZXJtaXNzaW9uUmVxdWVzdCB9IGZyb20gJy4vRmlsZVdyaXRlUGVybWlzc2lvblJlcXVlc3QvRmlsZVdyaXRlUGVybWlzc2lvblJlcXVlc3QuanMnXG5pbXBvcnQgeyB0eXBlIENvbW1hbmRTdWJjb21tYW5kUHJlZml4UmVzdWx0IH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBGaWxlc3lzdGVtUGVybWlzc2lvblJlcXVlc3QgfSBmcm9tICcuL0ZpbGVzeXN0ZW1QZXJtaXNzaW9uUmVxdWVzdC9GaWxlc3lzdGVtUGVybWlzc2lvblJlcXVlc3QuanMnXG5pbXBvcnQgeyBOb3RlYm9va0VkaXRUb29sIH0gZnJvbSAnLi4vLi4vdG9vbHMvTm90ZWJvb2tFZGl0VG9vbC9Ob3RlYm9va0VkaXRUb29sLmpzJ1xuaW1wb3J0IHsgR2xvYlRvb2wgfSBmcm9tICcuLi8uLi90b29scy9HbG9iVG9vbC9HbG9iVG9vbC5qcydcbmltcG9ydCB7IEdyZXBUb29sIH0gZnJvbSAnLi4vLi4vdG9vbHMvR3JlcFRvb2wvR3JlcFRvb2wuanMnXG5pbXBvcnQgeyBMU1Rvb2wgfSBmcm9tICcuLi8uLi90b29scy9sc1Rvb2wvbHNUb29sLmpzJ1xuaW1wb3J0IHsgRmlsZVJlYWRUb29sIH0gZnJvbSAnLi4vLi4vdG9vbHMvRmlsZVJlYWRUb29sL0ZpbGVSZWFkVG9vbC5qcydcbmltcG9ydCB7IE5vdGVib29rUmVhZFRvb2wgfSBmcm9tICcuLi8uLi90b29scy9Ob3RlYm9va1JlYWRUb29sL05vdGVib29rUmVhZFRvb2wuanMnXG5cbmZ1bmN0aW9uIHBlcm1pc3Npb25Db21wb25lbnRGb3JUb29sKHRvb2w6IFRvb2wpIHtcbiAgc3dpdGNoICh0b29sKSB7XG4gICAgY2FzZSBGaWxlRWRpdFRvb2w6XG4gICAgICByZXR1cm4gRmlsZUVkaXRQZXJtaXNzaW9uUmVxdWVzdFxuICAgIGNhc2UgRmlsZVdyaXRlVG9vbDpcbiAgICAgIHJldHVybiBGaWxlV3JpdGVQZXJtaXNzaW9uUmVxdWVzdFxuICAgIGNhc2UgQmFzaFRvb2w6XG4gICAgICByZXR1cm4gQmFzaFBlcm1pc3Npb25SZXF1ZXN0XG4gICAgY2FzZSBHbG9iVG9vbDpcbiAgICBjYXNlIEdyZXBUb29sOlxuICAgIGNhc2UgTFNUb29sOlxuICAgIGNhc2UgRmlsZVJlYWRUb29sOlxuICAgIGNhc2UgTm90ZWJvb2tSZWFkVG9vbDpcbiAgICBjYXNlIE5vdGVib29rRWRpdFRvb2w6XG4gICAgICByZXR1cm4gRmlsZXN5c3RlbVBlcm1pc3Npb25SZXF1ZXN0XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBGYWxsYmFja1Blcm1pc3Npb25SZXF1ZXN0XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUGVybWlzc2lvblJlcXVlc3RQcm9wcyA9IHtcbiAgdG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtXG4gIG9uRG9uZSgpOiB2b2lkXG4gIHZlcmJvc2U6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvb2xVc2VDb25maXJtR2V0UHJlZml4KFxuICB0b29sVXNlQ29uZmlybTogVG9vbFVzZUNvbmZpcm0sXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIChcbiAgICAodG9vbFVzZUNvbmZpcm0uY29tbWFuZFByZWZpeCAmJlxuICAgICAgIXRvb2xVc2VDb25maXJtLmNvbW1hbmRQcmVmaXguY29tbWFuZEluamVjdGlvbkRldGVjdGVkICYmXG4gICAgICB0b29sVXNlQ29uZmlybS5jb21tYW5kUHJlZml4LmNvbW1hbmRQcmVmaXgpIHx8XG4gICAgbnVsbFxuICApXG59XG5cbmV4cG9ydCB0eXBlIFRvb2xVc2VDb25maXJtID0ge1xuICBhc3Npc3RhbnRNZXNzYWdlOiBBc3Npc3RhbnRNZXNzYWdlXG4gIHRvb2w6IFRvb2xcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBpbnB1dDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH1cbiAgY29tbWFuZFByZWZpeDogQ29tbWFuZFN1YmNvbW1hbmRQcmVmaXhSZXN1bHQgfCBudWxsXG4gIC8vIFRPRE86IHJlbW92ZSByaXNrU2NvcmUgZnJvbSBUb29sVXNlQ29uZmlybVxuICByaXNrU2NvcmU6IG51bWJlciB8IG51bGxcbiAgb25BYm9ydCgpOiB2b2lkXG4gIG9uQWxsb3codHlwZTogJ3Blcm1hbmVudCcgfCAndGVtcG9yYXJ5Jyk6IHZvaWRcbiAgb25SZWplY3QoKTogdm9pZFxufVxuXG4vLyBUT0RPOiBNb3ZlIHRoaXMgdG8gVG9vbC5yZW5kZXJQZXJtaXNzaW9uUmVxdWVzdFxuZXhwb3J0IGZ1bmN0aW9uIFBlcm1pc3Npb25SZXF1ZXN0KHtcbiAgdG9vbFVzZUNvbmZpcm0sXG4gIG9uRG9uZSxcbiAgdmVyYm9zZSxcbn06IFBlcm1pc3Npb25SZXF1ZXN0UHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAvLyBIYW5kbGUgQ3RybCtDXG4gIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAnYycpIHtcbiAgICAgIG9uRG9uZSgpXG4gICAgICB0b29sVXNlQ29uZmlybS5vblJlamVjdCgpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHRvb2xOYW1lID0gdG9vbFVzZUNvbmZpcm0udG9vbC51c2VyRmFjaW5nTmFtZShcbiAgICB0b29sVXNlQ29uZmlybS5pbnB1dCBhcyBuZXZlcixcbiAgKVxuICB1c2VOb3RpZnlBZnRlclRpbWVvdXQoYENsYXVkZSBuZWVkcyB5b3VyIHBlcm1pc3Npb24gdG8gdXNlICR7dG9vbE5hbWV9YClcblxuICBjb25zdCBQZXJtaXNzaW9uQ29tcG9uZW50ID0gcGVybWlzc2lvbkNvbXBvbmVudEZvclRvb2wodG9vbFVzZUNvbmZpcm0udG9vbClcblxuICByZXR1cm4gKFxuICAgIDxQZXJtaXNzaW9uQ29tcG9uZW50XG4gICAgICB0b29sVXNlQ29uZmlybT17dG9vbFVzZUNvbmZpcm19XG4gICAgICBvbkRvbmU9e29uRG9uZX1cbiAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgLz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBIdW5rIH0gZnJvbSAnZGlmZidcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZEZpbGVTeW5jLCBzdGF0U3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUsIHNlcCB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBGaWxlRWRpdFRvb2xVcGRhdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmlsZUVkaXRUb29sVXBkYXRlZE1lc3NhZ2UuanMnXG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRGlmZiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvU3RydWN0dXJlZERpZmYuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5pbXBvcnQgeyBUb29sLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IGludGVyc3BlcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXkuanMnXG5pbXBvcnQge1xuICBhZGRMaW5lTnVtYmVycyxcbiAgZGV0ZWN0RmlsZUVuY29kaW5nLFxuICBkZXRlY3RMaW5lRW5kaW5ncyxcbiAgZmluZFNpbWlsYXJGaWxlLFxuICB3cml0ZVRleHRDb250ZW50LFxufSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi8uLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBOb3RlYm9va0VkaXRUb29sIH0gZnJvbSAnLi4vTm90ZWJvb2tFZGl0VG9vbC9Ob3RlYm9va0VkaXRUb29sLmpzJ1xuaW1wb3J0IHsgREVTQ1JJUFRJT04gfSBmcm9tICcuL3Byb21wdC5qcydcbmltcG9ydCB7IGFwcGx5RWRpdCB9IGZyb20gJy4vdXRpbHMuanMnXG5pbXBvcnQgeyBoYXNXcml0ZVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9ucy9maWxlc3lzdGVtLmpzJ1xuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgZmlsZV9wYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKCdUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSB0byBtb2RpZnknKSxcbiAgb2xkX3N0cmluZzogei5zdHJpbmcoKS5kZXNjcmliZSgnVGhlIHRleHQgdG8gcmVwbGFjZScpLFxuICBuZXdfc3RyaW5nOiB6LnN0cmluZygpLmRlc2NyaWJlKCdUaGUgdGV4dCB0byByZXBsYWNlIGl0IHdpdGgnKSxcbn0pXG5cbmV4cG9ydCB0eXBlIEluID0gdHlwZW9mIGlucHV0U2NoZW1hXG5cbi8vIE51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0IHRvIGluY2x1ZGUgYmVmb3JlL2FmdGVyIHRoZSBjaGFuZ2UgaW4gb3VyIHJlc3VsdCBtZXNzYWdlXG5jb25zdCBOX0xJTkVTX1NOSVBQRVQgPSA0XG5cbmV4cG9ydCBjb25zdCBGaWxlRWRpdFRvb2wgPSB7XG4gIG5hbWU6ICdFZGl0JyxcbiAgYXN5bmMgZGVzY3JpcHRpb24oKSB7XG4gICAgcmV0dXJuICdBIHRvb2wgZm9yIGVkaXRpbmcgZmlsZXMnXG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIHVzZXJGYWNpbmdOYW1lKHsgb2xkX3N0cmluZywgbmV3X3N0cmluZyB9KSB7XG4gICAgaWYgKG9sZF9zdHJpbmcgPT09ICcnKSByZXR1cm4gJ0NyZWF0ZSdcbiAgICBpZiAobmV3X3N0cmluZyA9PT0gJycpIHJldHVybiAnRGVsZXRlJ1xuICAgIHJldHVybiAnVXBkYXRlJ1xuICB9LFxuICBhc3luYyBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcbiAgbmVlZHNQZXJtaXNzaW9ucyh7IGZpbGVfcGF0aCB9KSB7XG4gICAgcmV0dXJuICFoYXNXcml0ZVBlcm1pc3Npb24oZmlsZV9wYXRoKVxuICB9LFxuICBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICByZW5kZXJUb29sVXNlTWVzc2FnZShpbnB1dCwgeyB2ZXJib3NlIH0pIHtcbiAgICByZXR1cm4gYGZpbGVfcGF0aDogJHt2ZXJib3NlID8gaW5wdXQuZmlsZV9wYXRoIDogcmVsYXRpdmUoZ2V0Q3dkKCksIGlucHV0LmZpbGVfcGF0aCl9YFxuICB9LFxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZSh7IGZpbGVQYXRoLCBzdHJ1Y3R1cmVkUGF0Y2ggfSwgeyB2ZXJib3NlIH0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZpbGVFZGl0VG9vbFVwZGF0ZWRNZXNzYWdlXG4gICAgICAgIGZpbGVQYXRoPXtmaWxlUGF0aH1cbiAgICAgICAgc3RydWN0dXJlZFBhdGNoPXtzdHJ1Y3R1cmVkUGF0Y2h9XG4gICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAvPlxuICAgIClcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZVJlamVjdGVkTWVzc2FnZShcbiAgICB7IGZpbGVfcGF0aCwgb2xkX3N0cmluZywgbmV3X3N0cmluZyB9LFxuICAgIHsgY29sdW1ucywgdmVyYm9zZSB9LFxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBwYXRjaCB9ID0gYXBwbHlFZGl0KGZpbGVfcGF0aCwgb2xkX3N0cmluZywgbmV3X3N0cmluZylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgeycgICd94o6/eycgJ31cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLmVycm9yfT5cbiAgICAgICAgICAgICAgVXNlciByZWplY3RlZCB7b2xkX3N0cmluZyA9PT0gJycgPyAnd3JpdGUnIDogJ3VwZGF0ZSd9IHRveycgJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+XG4gICAgICAgICAgICAgIHt2ZXJib3NlID8gZmlsZV9wYXRoIDogcmVsYXRpdmUoZ2V0Q3dkKCksIGZpbGVfcGF0aCl9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHtpbnRlcnNwZXJzZShcbiAgICAgICAgICAgIHBhdGNoLm1hcChwYXRjaCA9PiAoXG4gICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdMZWZ0PXs1fSBrZXk9e3BhdGNoLm5ld1N0YXJ0fT5cbiAgICAgICAgICAgICAgICA8U3RydWN0dXJlZERpZmYgcGF0Y2g9e3BhdGNofSBkaW09e3RydWV9IHdpZHRoPXtjb2x1bW5zIC0gMTJ9IC8+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBpID0+IChcbiAgICAgICAgICAgICAgPEJveCBwYWRkaW5nTGVmdD17NX0ga2V5PXtgZWxsaXBzaXMtJHtpfWB9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9Pi4uLjwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3aGlsZSB3ZSB3ZXJlIHNob3dpbmcgdGhlIGRpZmYsIHRoZSB1c2VyIG1hbnVhbGx5IG1hZGUgdGhlIGNoYW5nZS5cbiAgICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gc2hvdyB0aGUgZGlmZiBpbiB0aGlzIGNhc2VcbiAgICAgIGxvZ0Vycm9yKGUpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dD57JyAgJ33ijr8gKE5vIGNoYW5nZXMpPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIClcbiAgICB9XG4gIH0sXG4gIGFzeW5jIHZhbGlkYXRlSW5wdXQoXG4gICAgeyBmaWxlX3BhdGgsIG9sZF9zdHJpbmcsIG5ld19zdHJpbmcgfSxcbiAgICB7IHJlYWRGaWxlVGltZXN0YW1wcyB9LFxuICApIHtcbiAgICBpZiAob2xkX3N0cmluZyA9PT0gbmV3X3N0cmluZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnTm8gY2hhbmdlcyB0byBtYWtlOiBvbGRfc3RyaW5nIGFuZCBuZXdfc3RyaW5nIGFyZSBleGFjdGx5IHRoZSBzYW1lLicsXG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICBvbGRfc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBWYWxpZGF0aW9uUmVzdWx0XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbEZpbGVQYXRoID0gaXNBYnNvbHV0ZShmaWxlX3BhdGgpXG4gICAgICA/IGZpbGVfcGF0aFxuICAgICAgOiByZXNvbHZlKGdldEN3ZCgpLCBmaWxlX3BhdGgpXG5cbiAgICBpZiAoZXhpc3RzU3luYyhmdWxsRmlsZVBhdGgpICYmIG9sZF9zdHJpbmcgPT09ICcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiAnQ2Fubm90IGNyZWF0ZSBuZXcgZmlsZSAtIGZpbGUgYWxyZWFkeSBleGlzdHMuJyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWV4aXN0c1N5bmMoZnVsbEZpbGVQYXRoKSAmJiBvbGRfc3RyaW5nID09PSAnJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiB0cnVlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZXhpc3RzU3luYyhmdWxsRmlsZVBhdGgpKSB7XG4gICAgICAvLyBUcnkgdG8gZmluZCBhIHNpbWlsYXIgZmlsZSB3aXRoIGEgZGlmZmVyZW50IGV4dGVuc2lvblxuICAgICAgY29uc3Qgc2ltaWxhckZpbGVuYW1lID0gZmluZFNpbWlsYXJGaWxlKGZ1bGxGaWxlUGF0aClcbiAgICAgIGxldCBtZXNzYWdlID0gJ0ZpbGUgZG9lcyBub3QgZXhpc3QuJ1xuXG4gICAgICAvLyBJZiB3ZSBmb3VuZCBhIHNpbWlsYXIgZmlsZSwgc3VnZ2VzdCBpdCB0byB0aGUgYXNzaXN0YW50XG4gICAgICBpZiAoc2ltaWxhckZpbGVuYW1lKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCBEaWQgeW91IG1lYW4gJHtzaW1pbGFyRmlsZW5hbWV9P2BcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnVsbEZpbGVQYXRoLmVuZHNXaXRoKCcuaXB5bmInKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYEZpbGUgaXMgYSBKdXB5dGVyIE5vdGVib29rLiBVc2UgdGhlICR7Tm90ZWJvb2tFZGl0VG9vbC5uYW1lfSB0byBlZGl0IHRoaXMgZmlsZS5gLFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWRUaW1lc3RhbXAgPSByZWFkRmlsZVRpbWVzdGFtcHNbZnVsbEZpbGVQYXRoXVxuICAgIGlmICghcmVhZFRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnRmlsZSBoYXMgbm90IGJlZW4gcmVhZCB5ZXQuIFJlYWQgaXQgZmlyc3QgYmVmb3JlIHdyaXRpbmcgdG8gaXQuJyxcbiAgICAgICAgbWV0YToge1xuICAgICAgICAgIGlzRmlsZVBhdGhBYnNvbHV0ZTogU3RyaW5nKGlzQWJzb2x1dGUoZmlsZV9wYXRoKSksXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHMgYW5kIGdldCBpdHMgbGFzdCBtb2RpZmllZCB0aW1lXG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhmdWxsRmlsZVBhdGgpXG4gICAgY29uc3QgbGFzdFdyaXRlVGltZSA9IHN0YXRzLm10aW1lTXNcbiAgICBpZiAobGFzdFdyaXRlVGltZSA+IHJlYWRUaW1lc3RhbXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ0ZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgcmVhZCwgZWl0aGVyIGJ5IHRoZSB1c2VyIG9yIGJ5IGEgbGludGVyLiBSZWFkIGl0IGFnYWluIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHdyaXRlIGl0LicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5jID0gZGV0ZWN0RmlsZUVuY29kaW5nKGZ1bGxGaWxlUGF0aClcbiAgICBjb25zdCBmaWxlID0gcmVhZEZpbGVTeW5jKGZ1bGxGaWxlUGF0aCwgZW5jKVxuICAgIGlmICghZmlsZS5pbmNsdWRlcyhvbGRfc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFN0cmluZyB0byByZXBsYWNlIG5vdCBmb3VuZCBpbiBmaWxlLmAsXG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICBpc0ZpbGVQYXRoQWJzb2x1dGU6IFN0cmluZyhpc0Fic29sdXRlKGZpbGVfcGF0aCkpLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZXMgPSBmaWxlLnNwbGl0KG9sZF9zdHJpbmcpLmxlbmd0aCAtIDFcbiAgICBpZiAobWF0Y2hlcyA+IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBGb3VuZCAke21hdGNoZXN9IG1hdGNoZXMgb2YgdGhlIHN0cmluZyB0byByZXBsYWNlLiBGb3Igc2FmZXR5LCB0aGlzIHRvb2wgb25seSBzdXBwb3J0cyByZXBsYWNpbmcgZXhhY3RseSBvbmUgb2NjdXJyZW5jZSBhdCBhIHRpbWUuIEFkZCBtb3JlIGxpbmVzIG9mIGNvbnRleHQgdG8geW91ciBlZGl0IGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgbWV0YToge1xuICAgICAgICAgIGlzRmlsZVBhdGhBYnNvbHV0ZTogU3RyaW5nKGlzQWJzb2x1dGUoZmlsZV9wYXRoKSksXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgfSxcbiAgYXN5bmMgKmNhbGwoeyBmaWxlX3BhdGgsIG9sZF9zdHJpbmcsIG5ld19zdHJpbmcgfSwgeyByZWFkRmlsZVRpbWVzdGFtcHMgfSkge1xuICAgIGNvbnN0IHsgcGF0Y2gsIHVwZGF0ZWRGaWxlIH0gPSBhcHBseUVkaXQoZmlsZV9wYXRoLCBvbGRfc3RyaW5nLCBuZXdfc3RyaW5nKVxuXG4gICAgY29uc3QgZnVsbEZpbGVQYXRoID0gaXNBYnNvbHV0ZShmaWxlX3BhdGgpXG4gICAgICA/IGZpbGVfcGF0aFxuICAgICAgOiByZXNvbHZlKGdldEN3ZCgpLCBmaWxlX3BhdGgpXG4gICAgY29uc3QgZGlyID0gZGlybmFtZShmdWxsRmlsZVBhdGgpXG4gICAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICBjb25zdCBlbmMgPSBleGlzdHNTeW5jKGZ1bGxGaWxlUGF0aClcbiAgICAgID8gZGV0ZWN0RmlsZUVuY29kaW5nKGZ1bGxGaWxlUGF0aClcbiAgICAgIDogJ3V0ZjgnXG4gICAgY29uc3QgZW5kaW5ncyA9IGV4aXN0c1N5bmMoZnVsbEZpbGVQYXRoKVxuICAgICAgPyBkZXRlY3RMaW5lRW5kaW5ncyhmdWxsRmlsZVBhdGgpXG4gICAgICA6ICdMRidcbiAgICBjb25zdCBvcmlnaW5hbEZpbGUgPSBleGlzdHNTeW5jKGZ1bGxGaWxlUGF0aClcbiAgICAgID8gcmVhZEZpbGVTeW5jKGZ1bGxGaWxlUGF0aCwgZW5jKVxuICAgICAgOiAnJ1xuICAgIHdyaXRlVGV4dENvbnRlbnQoZnVsbEZpbGVQYXRoLCB1cGRhdGVkRmlsZSwgZW5jLCBlbmRpbmdzKVxuXG4gICAgLy8gVXBkYXRlIHJlYWQgdGltZXN0YW1wLCB0byBpbnZhbGlkYXRlIHN0YWxlIHdyaXRlc1xuICAgIHJlYWRGaWxlVGltZXN0YW1wc1tmdWxsRmlsZVBhdGhdID0gc3RhdFN5bmMoZnVsbEZpbGVQYXRoKS5tdGltZU1zXG5cbiAgICAvLyBMb2cgd2hlbiBlZGl0aW5nIENMQVVERS5tZFxuICAgIGlmIChmdWxsRmlsZVBhdGguZW5kc1dpdGgoYCR7c2VwfUNMQVVERS5tZGApKSB7XG4gICAgICBsb2dFdmVudCgndGVuZ3Vfd3JpdGVfY2xhdWRlbWQnLCB7fSlcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZmlsZVBhdGg6IGZpbGVfcGF0aCxcbiAgICAgIG9sZFN0cmluZzogb2xkX3N0cmluZyxcbiAgICAgIG5ld1N0cmluZzogbmV3X3N0cmluZyxcbiAgICAgIG9yaWdpbmFsRmlsZSxcbiAgICAgIHN0cnVjdHVyZWRQYXRjaDogcGF0Y2gsXG4gICAgfVxuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgfVxuICB9LFxuICByZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoeyBmaWxlUGF0aCwgb3JpZ2luYWxGaWxlLCBvbGRTdHJpbmcsIG5ld1N0cmluZyB9KSB7XG4gICAgY29uc3QgeyBzbmlwcGV0LCBzdGFydExpbmUgfSA9IGdldFNuaXBwZXQoXG4gICAgICBvcmlnaW5hbEZpbGUgfHwgJycsXG4gICAgICBvbGRTdHJpbmcsXG4gICAgICBuZXdTdHJpbmcsXG4gICAgKVxuICAgIHJldHVybiBgVGhlIGZpbGUgJHtmaWxlUGF0aH0gaGFzIGJlZW4gdXBkYXRlZC4gSGVyZSdzIHRoZSByZXN1bHQgb2YgcnVubmluZyBcXGBjYXQgLW5cXGAgb24gYSBzbmlwcGV0IG9mIHRoZSBlZGl0ZWQgZmlsZTpcbiR7YWRkTGluZU51bWJlcnMoe1xuICBjb250ZW50OiBzbmlwcGV0LFxuICBzdGFydExpbmUsXG59KX1gXG4gIH0sXG59IHNhdGlzZmllcyBUb29sPFxuICB0eXBlb2YgaW5wdXRTY2hlbWEsXG4gIHtcbiAgICBmaWxlUGF0aDogc3RyaW5nXG4gICAgb2xkU3RyaW5nOiBzdHJpbmdcbiAgICBuZXdTdHJpbmc6IHN0cmluZ1xuICAgIG9yaWdpbmFsRmlsZTogc3RyaW5nXG4gICAgc3RydWN0dXJlZFBhdGNoOiBIdW5rW11cbiAgfVxuPlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U25pcHBldChcbiAgaW5pdGlhbFRleHQ6IHN0cmluZyxcbiAgb2xkU3RyOiBzdHJpbmcsXG4gIG5ld1N0cjogc3RyaW5nLFxuKTogeyBzbmlwcGV0OiBzdHJpbmc7IHN0YXJ0TGluZTogbnVtYmVyIH0ge1xuICBjb25zdCBiZWZvcmUgPSBpbml0aWFsVGV4dC5zcGxpdChvbGRTdHIpWzBdID8/ICcnXG4gIGNvbnN0IHJlcGxhY2VtZW50TGluZSA9IGJlZm9yZS5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCAtIDFcbiAgY29uc3QgbmV3RmlsZUxpbmVzID0gaW5pdGlhbFRleHQucmVwbGFjZShvbGRTdHIsIG5ld1N0cikuc3BsaXQoL1xccj9cXG4vKVxuICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgbGluZSBudW1iZXJzIGZvciB0aGUgc25pcHBldFxuICBjb25zdCBzdGFydExpbmUgPSBNYXRoLm1heCgwLCByZXBsYWNlbWVudExpbmUgLSBOX0xJTkVTX1NOSVBQRVQpXG4gIGNvbnN0IGVuZExpbmUgPVxuICAgIHJlcGxhY2VtZW50TGluZSArIE5fTElORVNfU05JUFBFVCArIG5ld1N0ci5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aFxuICAvLyBHZXQgc25pcHBldFxuICBjb25zdCBzbmlwcGV0TGluZXMgPSBuZXdGaWxlTGluZXMuc2xpY2Uoc3RhcnRMaW5lLCBlbmRMaW5lICsgMSlcbiAgY29uc3Qgc25pcHBldCA9IHNuaXBwZXRMaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4geyBzbmlwcGV0LCBzdGFydExpbmU6IHN0YXJ0TGluZSArIDEgfVxufVxuIiwKICAgICJpbXBvcnQgeyBIdW5rIH0gZnJvbSAnZGlmZidcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgaW50ZXJzcGVyc2UgfSBmcm9tICcuLi91dGlscy9hcnJheS5qcydcbmltcG9ydCB7IFN0cnVjdHVyZWREaWZmIH0gZnJvbSAnLi9TdHJ1Y3R1cmVkRGlmZi5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IHVzZVRlcm1pbmFsU2l6ZSB9IGZyb20gJy4uL2hvb2tzL3VzZVRlcm1pbmFsU2l6ZS5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgZmlsZVBhdGg6IHN0cmluZ1xuICBzdHJ1Y3R1cmVkUGF0Y2g6IEh1bmtbXVxuICB2ZXJib3NlOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWxlRWRpdFRvb2xVcGRhdGVkTWVzc2FnZSh7XG4gIGZpbGVQYXRoLFxuICBzdHJ1Y3R1cmVkUGF0Y2gsXG4gIHZlcmJvc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgY29uc3QgbnVtQWRkaXRpb25zID0gc3RydWN0dXJlZFBhdGNoLnJlZHVjZShcbiAgICAoY291bnQsIGh1bmspID0+IGNvdW50ICsgaHVuay5saW5lcy5maWx0ZXIoXyA9PiBfLnN0YXJ0c1dpdGgoJysnKSkubGVuZ3RoLFxuICAgIDAsXG4gIClcbiAgY29uc3QgbnVtUmVtb3ZhbHMgPSBzdHJ1Y3R1cmVkUGF0Y2gucmVkdWNlKFxuICAgIChjb3VudCwgaHVuaykgPT4gY291bnQgKyBodW5rLmxpbmVzLmZpbHRlcihfID0+IF8uc3RhcnRzV2l0aCgnLScpKS5sZW5ndGgsXG4gICAgMCxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICA8VGV4dD5cbiAgICAgICAgeycgICd94o6/IFVwZGF0ZWR7JyAnfVxuICAgICAgICA8VGV4dCBib2xkPnt2ZXJib3NlID8gZmlsZVBhdGggOiByZWxhdGl2ZShnZXRDd2QoKSwgZmlsZVBhdGgpfTwvVGV4dD5cbiAgICAgICAge251bUFkZGl0aW9ucyA+IDAgfHwgbnVtUmVtb3ZhbHMgPiAwID8gJyB3aXRoICcgOiAnJ31cbiAgICAgICAge251bUFkZGl0aW9ucyA+IDAgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+e251bUFkZGl0aW9uc308L1RleHQ+eycgJ31cbiAgICAgICAgICAgIHtudW1BZGRpdGlvbnMgPiAxID8gJ2FkZGl0aW9ucycgOiAnYWRkaXRpb24nfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge251bUFkZGl0aW9ucyA+IDAgJiYgbnVtUmVtb3ZhbHMgPiAwID8gJyBhbmQgJyA6IG51bGx9XG4gICAgICAgIHtudW1SZW1vdmFscyA+IDAgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+e251bVJlbW92YWxzfTwvVGV4dD57JyAnfVxuICAgICAgICAgICAge251bVJlbW92YWxzID4gMSA/ICdyZW1vdmFscycgOiAncmVtb3ZhbCd9XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9UZXh0PlxuICAgICAge2ludGVyc3BlcnNlKFxuICAgICAgICBzdHJ1Y3R1cmVkUGF0Y2gubWFwKF8gPT4gKFxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdMZWZ0PXs1fSBrZXk9e18ubmV3U3RhcnR9PlxuICAgICAgICAgICAgPFN0cnVjdHVyZWREaWZmIHBhdGNoPXtffSBkaW09e2ZhbHNlfSB3aWR0aD17Y29sdW1ucyAtIDEyfSAvPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApKSxcbiAgICAgICAgaSA9PiAoXG4gICAgICAgICAgPEJveCBwYWRkaW5nTGVmdD17NX0ga2V5PXtgZWxsaXBzaXMtJHtpfWB9PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5VGV4dH0+Li4uPC9UZXh0PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApLFxuICAgICAgKX1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gaW50ZXJzcGVyc2U8QT4oYXM6IEFbXSwgc2VwYXJhdG9yOiAoaW5kZXg6IG51bWJlcikgPT4gQSk6IEFbXSB7XG4gIHJldHVybiBhcy5mbGF0TWFwKChhLCBpKSA9PiAoaSA/IFtzZXBhcmF0b3IoaSksIGFdIDogW2FdKSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBleHRuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZS5qcydcbmltcG9ydCB7IEhpZ2hsaWdodGVkQ29kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvSGlnaGxpZ2h0ZWRDb2RlLmpzJ1xuaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IE5vdGVib29rQ2VsbFR5cGUsIE5vdGVib29rQ29udGVudCB9IGZyb20gJy4uLy4uL3R5cGVzL25vdGVib29rLmpzJ1xuaW1wb3J0IHtcbiAgZGV0ZWN0RmlsZUVuY29kaW5nLFxuICBkZXRlY3RMaW5lRW5kaW5ncyxcbiAgd3JpdGVUZXh0Q29udGVudCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcydcbmltcG9ydCB7IHNhZmVQYXJzZUpTT04gfSBmcm9tICcuLi8uLi91dGlscy9qc29uLmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBERVNDUklQVElPTiwgUFJPTVBUIH0gZnJvbSAnLi9wcm9tcHQuanMnXG5pbXBvcnQgeyBoYXNXcml0ZVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9ucy9maWxlc3lzdGVtLmpzJ1xuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgbm90ZWJvb2tfcGF0aDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgICdUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgSnVweXRlciBub3RlYm9vayBmaWxlIHRvIGVkaXQgKG11c3QgYmUgYWJzb2x1dGUsIG5vdCByZWxhdGl2ZSknLFxuICAgICksXG4gIGNlbGxfbnVtYmVyOiB6Lm51bWJlcigpLmRlc2NyaWJlKCdUaGUgaW5kZXggb2YgdGhlIGNlbGwgdG8gZWRpdCAoMC1iYXNlZCknKSxcbiAgbmV3X3NvdXJjZTogei5zdHJpbmcoKS5kZXNjcmliZSgnVGhlIG5ldyBzb3VyY2UgZm9yIHRoZSBjZWxsJyksXG4gIGNlbGxfdHlwZTogelxuICAgIC5lbnVtKFsnY29kZScsICdtYXJrZG93biddKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ1RoZSB0eXBlIG9mIHRoZSBjZWxsIChjb2RlIG9yIG1hcmtkb3duKS4gSWYgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgY2VsbCB0eXBlLiBJZiB1c2luZyBlZGl0X21vZGU9aW5zZXJ0LCB0aGlzIGlzIHJlcXVpcmVkLicsXG4gICAgKSxcbiAgZWRpdF9tb2RlOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICAnVGhlIHR5cGUgb2YgZWRpdCB0byBtYWtlIChyZXBsYWNlLCBpbnNlcnQsIGRlbGV0ZSkuIERlZmF1bHRzIHRvIHJlcGxhY2UuJyxcbiAgICApLFxufSlcblxuZXhwb3J0IGNvbnN0IE5vdGVib29rRWRpdFRvb2wgPSB7XG4gIG5hbWU6ICdOb3RlYm9va0VkaXRDZWxsJyxcbiAgYXN5bmMgZGVzY3JpcHRpb24oKSB7XG4gICAgcmV0dXJuIERFU0NSSVBUSU9OXG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gUFJPTVBUXG4gIH0sXG4gIGlucHV0U2NoZW1hLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ0VkaXQgTm90ZWJvb2snXG4gIH0sXG4gIGFzeW5jIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBuZWVkc1Blcm1pc3Npb25zKHsgbm90ZWJvb2tfcGF0aCB9KSB7XG4gICAgcmV0dXJuICFoYXNXcml0ZVBlcm1pc3Npb24obm90ZWJvb2tfcGF0aClcbiAgfSxcbiAgcmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50KHsgY2VsbF9udW1iZXIsIGVkaXRfbW9kZSwgbmV3X3NvdXJjZSwgZXJyb3IgfSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yXG4gICAgfVxuICAgIHN3aXRjaCAoZWRpdF9tb2RlKSB7XG4gICAgICBjYXNlICdyZXBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGBVcGRhdGVkIGNlbGwgJHtjZWxsX251bWJlcn0gd2l0aCAke25ld19zb3VyY2V9YFxuICAgICAgY2FzZSAnaW5zZXJ0JzpcbiAgICAgICAgcmV0dXJuIGBJbnNlcnRlZCBjZWxsICR7Y2VsbF9udW1iZXJ9IHdpdGggJHtuZXdfc291cmNlfWBcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHJldHVybiBgRGVsZXRlZCBjZWxsICR7Y2VsbF9udW1iZXJ9YFxuICAgIH1cbiAgfSxcbiAgcmVuZGVyVG9vbFVzZU1lc3NhZ2UoaW5wdXQsIHsgdmVyYm9zZSB9KSB7XG4gICAgcmV0dXJuIGBub3RlYm9va19wYXRoOiAke3ZlcmJvc2UgPyBpbnB1dC5ub3RlYm9va19wYXRoIDogcmVsYXRpdmUoZ2V0Q3dkKCksIGlucHV0Lm5vdGVib29rX3BhdGgpfSwgY2VsbDogJHtpbnB1dC5jZWxsX251bWJlcn0sIGNvbnRlbnQ6ICR7aW5wdXQubmV3X3NvdXJjZS5zbGljZSgwLCAzMCl94oCmLCBjZWxsX3R5cGU6ICR7aW5wdXQuY2VsbF90eXBlfSwgZWRpdF9tb2RlOiAke2lucHV0LmVkaXRfbW9kZSA/PyAncmVwbGFjZSd9YFxuICB9LFxuICByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKCkge1xuICAgIHJldHVybiA8RmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlIC8+XG4gIH0sXG4gIHJlbmRlclRvb2xSZXN1bHRNZXNzYWdlKHsgY2VsbF9udW1iZXIsIG5ld19zb3VyY2UsIGxhbmd1YWdlLCBlcnJvciB9KSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPntlcnJvcn08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgPFRleHQ+VXBkYXRlZCBjZWxsIHtjZWxsX251bWJlcn06PC9UZXh0PlxuICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9PlxuICAgICAgICAgIDxIaWdobGlnaHRlZENvZGUgY29kZT17bmV3X3NvdXJjZX0gbGFuZ3VhZ2U9e2xhbmd1YWdlfSAvPlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfSxcbiAgYXN5bmMgdmFsaWRhdGVJbnB1dCh7XG4gICAgbm90ZWJvb2tfcGF0aCxcbiAgICBjZWxsX251bWJlcixcbiAgICBjZWxsX3R5cGUsXG4gICAgZWRpdF9tb2RlID0gJ3JlcGxhY2UnLFxuICB9KSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBpc0Fic29sdXRlKG5vdGVib29rX3BhdGgpXG4gICAgICA/IG5vdGVib29rX3BhdGhcbiAgICAgIDogcmVzb2x2ZShnZXRDd2QoKSwgbm90ZWJvb2tfcGF0aClcblxuICAgIGlmICghZXhpc3RzU3luYyhmdWxsUGF0aCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6ICdOb3RlYm9vayBmaWxlIGRvZXMgbm90IGV4aXN0LicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dG5hbWUoZnVsbFBhdGgpICE9PSAnLmlweW5iJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnRmlsZSBtdXN0IGJlIGEgSnVweXRlciBub3RlYm9vayAoLmlweW5iIGZpbGUpLiBGb3IgZWRpdGluZyBvdGhlciBmaWxlIHR5cGVzLCB1c2UgdGhlIEZpbGVFZGl0IHRvb2wuJyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2VsbF9udW1iZXIgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiAnQ2VsbCBudW1iZXIgbXVzdCBiZSBub24tbmVnYXRpdmUuJyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBlZGl0X21vZGUgIT09ICdyZXBsYWNlJyAmJlxuICAgICAgZWRpdF9tb2RlICE9PSAnaW5zZXJ0JyAmJlxuICAgICAgZWRpdF9tb2RlICE9PSAnZGVsZXRlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogJ0VkaXQgbW9kZSBtdXN0IGJlIHJlcGxhY2UsIGluc2VydCwgb3IgZGVsZXRlLicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVkaXRfbW9kZSA9PT0gJ2luc2VydCcgJiYgIWNlbGxfdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogJ0NlbGwgdHlwZSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGVkaXRfbW9kZT1pbnNlcnQuJyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbmMgPSBkZXRlY3RGaWxlRW5jb2RpbmcoZnVsbFBhdGgpXG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgZW5jKVxuICAgIGNvbnN0IG5vdGVib29rID0gc2FmZVBhcnNlSlNPTihjb250ZW50KSBhcyBOb3RlYm9va0NvbnRlbnQgfCBudWxsXG4gICAgaWYgKCFub3RlYm9vaykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogJ05vdGVib29rIGlzIG5vdCB2YWxpZCBKU09OLicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVkaXRfbW9kZSA9PT0gJ2luc2VydCcgJiYgY2VsbF9udW1iZXIgPiBub3RlYm9vay5jZWxscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBDZWxsIG51bWJlciBpcyBvdXQgb2YgYm91bmRzLiBGb3IgaW5zZXJ0IG1vZGUsIHRoZSBtYXhpbXVtIHZhbHVlIGlzICR7bm90ZWJvb2suY2VsbHMubGVuZ3RofSAodG8gYXBwZW5kIGF0IHRoZSBlbmQpLmAsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChlZGl0X21vZGUgPT09ICdyZXBsYWNlJyB8fCBlZGl0X21vZGUgPT09ICdkZWxldGUnKSAmJlxuICAgICAgKGNlbGxfbnVtYmVyID49IG5vdGVib29rLmNlbGxzLmxlbmd0aCB8fCAhbm90ZWJvb2suY2VsbHNbY2VsbF9udW1iZXJdKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYENlbGwgbnVtYmVyIGlzIG91dCBvZiBib3VuZHMuIE5vdGVib29rIGhhcyAke25vdGVib29rLmNlbGxzLmxlbmd0aH0gY2VsbHMuYCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9LFxuICBhc3luYyAqY2FsbCh7XG4gICAgbm90ZWJvb2tfcGF0aCxcbiAgICBjZWxsX251bWJlcixcbiAgICBuZXdfc291cmNlLFxuICAgIGNlbGxfdHlwZSxcbiAgICBlZGl0X21vZGUsXG4gIH0pIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGlzQWJzb2x1dGUobm90ZWJvb2tfcGF0aClcbiAgICAgID8gbm90ZWJvb2tfcGF0aFxuICAgICAgOiByZXNvbHZlKGdldEN3ZCgpLCBub3RlYm9va19wYXRoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuYyA9IGRldGVjdEZpbGVFbmNvZGluZyhmdWxsUGF0aClcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZnVsbFBhdGgsIGVuYylcbiAgICAgIGNvbnN0IG5vdGVib29rID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBOb3RlYm9va0NvbnRlbnRcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gbm90ZWJvb2subWV0YWRhdGEubGFuZ3VhZ2VfaW5mbz8ubmFtZSA/PyAncHl0aG9uJ1xuXG4gICAgICBpZiAoZWRpdF9tb2RlID09PSAnZGVsZXRlJykge1xuICAgICAgICAvLyBEZWxldGUgdGhlIHNwZWNpZmllZCBjZWxsXG4gICAgICAgIG5vdGVib29rLmNlbGxzLnNwbGljZShjZWxsX251bWJlciwgMSlcbiAgICAgIH0gZWxzZSBpZiAoZWRpdF9tb2RlID09PSAnaW5zZXJ0Jykge1xuICAgICAgICAvLyBJbnNlcnQgdGhlIG5ldyBjZWxsXG4gICAgICAgIGNvbnN0IG5ld19jZWxsID0ge1xuICAgICAgICAgIGNlbGxfdHlwZTogY2VsbF90eXBlISwgLy8gdmFsaWRhdGVJbnB1dCBlbnN1cmVzIGNlbGxfdHlwZSBpcyBub3QgdW5kZWZpbmVkXG4gICAgICAgICAgc291cmNlOiBuZXdfc291cmNlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfVxuICAgICAgICBub3RlYm9vay5jZWxscy5zcGxpY2UoXG4gICAgICAgICAgY2VsbF9udW1iZXIsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBjZWxsX3R5cGUgPT0gJ21hcmtkb3duJyA/IG5ld19jZWxsIDogeyAuLi5uZXdfY2VsbCwgb3V0cHV0czogW10gfSxcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmluZCB0aGUgc3BlY2lmaWVkIGNlbGxcbiAgICAgICAgY29uc3QgdGFyZ2V0Q2VsbCA9IG5vdGVib29rLmNlbGxzW2NlbGxfbnVtYmVyXSEgLy8gdmFsaWRhdGVJbnB1dCBlbnN1cmVzIGNlbGxfbnVtYmVyIGlzIGluIGJvdW5kc1xuICAgICAgICB0YXJnZXRDZWxsLnNvdXJjZSA9IG5ld19zb3VyY2VcbiAgICAgICAgLy8gUmVzZXQgZXhlY3V0aW9uIGNvdW50IGFuZCBjbGVhciBvdXRwdXRzIHNpbmNlIGNlbGwgd2FzIG1vZGlmaWVkXG4gICAgICAgIHRhcmdldENlbGwuZXhlY3V0aW9uX2NvdW50ID0gdW5kZWZpbmVkXG4gICAgICAgIHRhcmdldENlbGwub3V0cHV0cyA9IFtdXG4gICAgICAgIGlmIChjZWxsX3R5cGUgJiYgY2VsbF90eXBlICE9PSB0YXJnZXRDZWxsLmNlbGxfdHlwZSkge1xuICAgICAgICAgIHRhcmdldENlbGwuY2VsbF90eXBlID0gY2VsbF90eXBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdyaXRlIGJhY2sgdG8gZmlsZVxuICAgICAgY29uc3QgZW5kaW5ncyA9IGRldGVjdExpbmVFbmRpbmdzKGZ1bGxQYXRoKVxuICAgICAgd3JpdGVUZXh0Q29udGVudChcbiAgICAgICAgZnVsbFBhdGgsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG5vdGVib29rLCBudWxsLCAxKSxcbiAgICAgICAgZW5jLFxuICAgICAgICBlbmRpbmdzISxcbiAgICAgIClcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIGNlbGxfbnVtYmVyLFxuICAgICAgICBuZXdfc291cmNlLFxuICAgICAgICBjZWxsX3R5cGU6IGNlbGxfdHlwZSA/PyAnY29kZScsXG4gICAgICAgIGxhbmd1YWdlLFxuICAgICAgICBlZGl0X21vZGU6IGVkaXRfbW9kZSA/PyAncmVwbGFjZScsXG4gICAgICAgIGVycm9yOiAnJyxcbiAgICAgIH1cbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgY2VsbF9udW1iZXIsXG4gICAgICAgICAgbmV3X3NvdXJjZSxcbiAgICAgICAgICBjZWxsX3R5cGU6IGNlbGxfdHlwZSA/PyAnY29kZScsXG4gICAgICAgICAgbGFuZ3VhZ2U6ICdweXRob24nLFxuICAgICAgICAgIGVkaXRfbW9kZTogJ3JlcGxhY2UnLFxuICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICB9XG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICB0eXBlOiAncmVzdWx0JyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBjZWxsX251bWJlcixcbiAgICAgICAgbmV3X3NvdXJjZSxcbiAgICAgICAgY2VsbF90eXBlOiBjZWxsX3R5cGUgPz8gJ2NvZGUnLFxuICAgICAgICBsYW5ndWFnZTogJ3B5dGhvbicsXG4gICAgICAgIGVkaXRfbW9kZTogJ3JlcGxhY2UnLFxuICAgICAgICBlcnJvcjogJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZWRpdGluZyBub3RlYm9vaycsXG4gICAgICB9XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgICBkYXRhLFxuICAgICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6IHRoaXMucmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50KGRhdGEpLFxuICAgICAgfVxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIFRvb2w8XG4gIHR5cGVvZiBpbnB1dFNjaGVtYSxcbiAge1xuICAgIGNlbGxfbnVtYmVyOiBudW1iZXJcbiAgICBuZXdfc291cmNlOiBzdHJpbmdcbiAgICBjZWxsX3R5cGU6IE5vdGVib29rQ2VsbFR5cGVcbiAgICBsYW5ndWFnZTogc3RyaW5nXG4gICAgZWRpdF9tb2RlOiBzdHJpbmdcbiAgICBlcnJvcj86IHN0cmluZ1xuICB9XG4+XG4iLAogICAgImV4cG9ydCBjb25zdCBERVNDUklQVElPTiA9XG4gICdSZXBsYWNlIHRoZSBjb250ZW50cyBvZiBhIHNwZWNpZmljIGNlbGwgaW4gYSBKdXB5dGVyIG5vdGVib29rLidcbmV4cG9ydCBjb25zdCBQUk9NUFQgPSBgQ29tcGxldGVseSByZXBsYWNlcyB0aGUgY29udGVudHMgb2YgYSBzcGVjaWZpYyBjZWxsIGluIGEgSnVweXRlciBub3RlYm9vayAoLmlweW5iIGZpbGUpIHdpdGggbmV3IHNvdXJjZS4gSnVweXRlciBub3RlYm9va3MgYXJlIGludGVyYWN0aXZlIGRvY3VtZW50cyB0aGF0IGNvbWJpbmUgY29kZSwgdGV4dCwgYW5kIHZpc3VhbGl6YXRpb25zLCBjb21tb25seSB1c2VkIGZvciBkYXRhIGFuYWx5c2lzIGFuZCBzY2llbnRpZmljIGNvbXB1dGluZy4gVGhlIG5vdGVib29rX3BhdGggcGFyYW1ldGVyIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbm90IGEgcmVsYXRpdmUgcGF0aC4gVGhlIGNlbGxfbnVtYmVyIGlzIDAtaW5kZXhlZC4gVXNlIGVkaXRfbW9kZT1pbnNlcnQgdG8gYWRkIGEgbmV3IGNlbGwgYXQgdGhlIGluZGV4IHNwZWNpZmllZCBieSBjZWxsX251bWJlci4gVXNlIGVkaXRfbW9kZT1kZWxldGUgdG8gZGVsZXRlIHRoZSBjZWxsIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQgYnkgY2VsbF9udW1iZXIuYFxuIiwKICAgICJpbXBvcnQgeyBOb3RlYm9va0VkaXRUb29sIH0gZnJvbSAnLi4vTm90ZWJvb2tFZGl0VG9vbC9Ob3RlYm9va0VkaXRUb29sLmpzJ1xuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRJT04gPSBgVGhpcyBpcyBhIHRvb2wgZm9yIGVkaXRpbmcgZmlsZXMuIEZvciBtb3Zpbmcgb3IgcmVuYW1pbmcgZmlsZXMsIHlvdSBzaG91bGQgZ2VuZXJhbGx5IHVzZSB0aGUgQmFzaCB0b29sIHdpdGggdGhlICdtdicgY29tbWFuZCBpbnN0ZWFkLiBGb3IgbGFyZ2VyIGVkaXRzLCB1c2UgdGhlIFdyaXRlIHRvb2wgdG8gb3ZlcndyaXRlIGZpbGVzLiBGb3IgSnVweXRlciBub3RlYm9va3MgKC5pcHluYiBmaWxlcyksIHVzZSB0aGUgJHtOb3RlYm9va0VkaXRUb29sLm5hbWV9IGluc3RlYWQuXG5cbkJlZm9yZSB1c2luZyB0aGlzIHRvb2w6XG5cbjEuIFVzZSB0aGUgVmlldyB0b29sIHRvIHVuZGVyc3RhbmQgdGhlIGZpbGUncyBjb250ZW50cyBhbmQgY29udGV4dFxuXG4yLiBWZXJpZnkgdGhlIGRpcmVjdG9yeSBwYXRoIGlzIGNvcnJlY3QgKG9ubHkgYXBwbGljYWJsZSB3aGVuIGNyZWF0aW5nIG5ldyBmaWxlcyk6XG4gICAtIFVzZSB0aGUgTFMgdG9vbCB0byB2ZXJpZnkgdGhlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyB0aGUgY29ycmVjdCBsb2NhdGlvblxuXG5UbyBtYWtlIGEgZmlsZSBlZGl0LCBwcm92aWRlIHRoZSBmb2xsb3dpbmc6XG4xLiBmaWxlX3BhdGg6IFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIHRvIG1vZGlmeSAobXVzdCBiZSBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlKVxuMi4gb2xkX3N0cmluZzogVGhlIHRleHQgdG8gcmVwbGFjZSAobXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBmaWxlLCBhbmQgbXVzdCBtYXRjaCB0aGUgZmlsZSBjb250ZW50cyBleGFjdGx5LCBpbmNsdWRpbmcgYWxsIHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uKVxuMy4gbmV3X3N0cmluZzogVGhlIGVkaXRlZCB0ZXh0IHRvIHJlcGxhY2UgdGhlIG9sZF9zdHJpbmdcblxuVGhlIHRvb2wgd2lsbCByZXBsYWNlIE9ORSBvY2N1cnJlbmNlIG9mIG9sZF9zdHJpbmcgd2l0aCBuZXdfc3RyaW5nIGluIHRoZSBzcGVjaWZpZWQgZmlsZS5cblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTIEZPUiBVU0lORyBUSElTIFRPT0w6XG5cbjEuIFVOSVFVRU5FU1M6IFRoZSBvbGRfc3RyaW5nIE1VU1QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGluc3RhbmNlIHlvdSB3YW50IHRvIGNoYW5nZS4gVGhpcyBtZWFuczpcbiAgIC0gSW5jbHVkZSBBVCBMRUFTVCAzLTUgbGluZXMgb2YgY29udGV4dCBCRUZPUkUgdGhlIGNoYW5nZSBwb2ludFxuICAgLSBJbmNsdWRlIEFUIExFQVNUIDMtNSBsaW5lcyBvZiBjb250ZXh0IEFGVEVSIHRoZSBjaGFuZ2UgcG9pbnRcbiAgIC0gSW5jbHVkZSBhbGwgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIGFuZCBzdXJyb3VuZGluZyBjb2RlIGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiB0aGUgZmlsZVxuXG4yLiBTSU5HTEUgSU5TVEFOQ0U6IFRoaXMgdG9vbCBjYW4gb25seSBjaGFuZ2UgT05FIGluc3RhbmNlIGF0IGEgdGltZS4gSWYgeW91IG5lZWQgdG8gY2hhbmdlIG11bHRpcGxlIGluc3RhbmNlczpcbiAgIC0gTWFrZSBzZXBhcmF0ZSBjYWxscyB0byB0aGlzIHRvb2wgZm9yIGVhY2ggaW5zdGFuY2VcbiAgIC0gRWFjaCBjYWxsIG11c3QgdW5pcXVlbHkgaWRlbnRpZnkgaXRzIHNwZWNpZmljIGluc3RhbmNlIHVzaW5nIGV4dGVuc2l2ZSBjb250ZXh0XG5cbjMuIFZFUklGSUNBVElPTjogQmVmb3JlIHVzaW5nIHRoaXMgdG9vbDpcbiAgIC0gQ2hlY2sgaG93IG1hbnkgaW5zdGFuY2VzIG9mIHRoZSB0YXJnZXQgdGV4dCBleGlzdCBpbiB0aGUgZmlsZVxuICAgLSBJZiBtdWx0aXBsZSBpbnN0YW5jZXMgZXhpc3QsIGdhdGhlciBlbm91Z2ggY29udGV4dCB0byB1bmlxdWVseSBpZGVudGlmeSBlYWNoIG9uZVxuICAgLSBQbGFuIHNlcGFyYXRlIHRvb2wgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2VcblxuV0FSTklORzogSWYgeW91IGRvIG5vdCBmb2xsb3cgdGhlc2UgcmVxdWlyZW1lbnRzOlxuICAgLSBUaGUgdG9vbCB3aWxsIGZhaWwgaWYgb2xkX3N0cmluZyBtYXRjaGVzIG11bHRpcGxlIGxvY2F0aW9uc1xuICAgLSBUaGUgdG9vbCB3aWxsIGZhaWwgaWYgb2xkX3N0cmluZyBkb2Vzbid0IG1hdGNoIGV4YWN0bHkgKGluY2x1ZGluZyB3aGl0ZXNwYWNlKVxuICAgLSBZb3UgbWF5IGNoYW5nZSB0aGUgd3JvbmcgaW5zdGFuY2UgaWYgeW91IGRvbid0IGluY2x1ZGUgZW5vdWdoIGNvbnRleHRcblxuV2hlbiBtYWtpbmcgZWRpdHM6XG4gICAtIEVuc3VyZSB0aGUgZWRpdCByZXN1bHRzIGluIGlkaW9tYXRpYywgY29ycmVjdCBjb2RlXG4gICAtIERvIG5vdCBsZWF2ZSB0aGUgY29kZSBpbiBhIGJyb2tlbiBzdGF0ZVxuICAgLSBBbHdheXMgdXNlIGFic29sdXRlIGZpbGUgcGF0aHMgKHN0YXJ0aW5nIHdpdGggLylcblxuSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGZpbGUsIHVzZTpcbiAgIC0gQSBuZXcgZmlsZSBwYXRoLCBpbmNsdWRpbmcgZGlyIG5hbWUgaWYgbmVlZGVkXG4gICAtIEFuIGVtcHR5IG9sZF9zdHJpbmdcbiAgIC0gVGhlIG5ldyBmaWxlJ3MgY29udGVudHMgYXMgbmV3X3N0cmluZ1xuXG5SZW1lbWJlcjogd2hlbiBtYWtpbmcgbXVsdGlwbGUgZmlsZSBlZGl0cyBpbiBhIHJvdyB0byB0aGUgc2FtZSBmaWxlLCB5b3Ugc2hvdWxkIHByZWZlciB0byBzZW5kIGFsbCBlZGl0cyBpbiBhIHNpbmdsZSBtZXNzYWdlIHdpdGggbXVsdGlwbGUgY2FsbHMgdG8gdGhpcyB0b29sLCByYXRoZXIgdGhhbiBtdWx0aXBsZSBtZXNzYWdlcyB3aXRoIGEgc2luZ2xlIGNhbGwgZWFjaC5cbmBcbiIsCiAgICAiaW1wb3J0IHsgaXNBYnNvbHV0ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi8uLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgZGV0ZWN0RmlsZUVuY29kaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcydcbmltcG9ydCB7IHR5cGUgSHVuayB9IGZyb20gJ2RpZmYnXG5pbXBvcnQgeyBnZXRQYXRjaCB9IGZyb20gJy4uLy4uL3V0aWxzL2RpZmYuanMnXG5cbi8qKlxuICogQXBwbGllcyBhbiBlZGl0IHRvIGEgZmlsZSBhbmQgcmV0dXJucyB0aGUgcGF0Y2ggYW5kIHVwZGF0ZWQgZmlsZS5cbiAqIERvZXMgbm90IHdyaXRlIHRoZSBmaWxlIHRvIGRpc2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUVkaXQoXG4gIGZpbGVfcGF0aDogc3RyaW5nLFxuICBvbGRfc3RyaW5nOiBzdHJpbmcsXG4gIG5ld19zdHJpbmc6IHN0cmluZyxcbik6IHsgcGF0Y2g6IEh1bmtbXTsgdXBkYXRlZEZpbGU6IHN0cmluZyB9IHtcbiAgY29uc3QgZnVsbEZpbGVQYXRoID0gaXNBYnNvbHV0ZShmaWxlX3BhdGgpXG4gICAgPyBmaWxlX3BhdGhcbiAgICA6IHJlc29sdmUoZ2V0Q3dkKCksIGZpbGVfcGF0aClcblxuICBsZXQgb3JpZ2luYWxGaWxlXG4gIGxldCB1cGRhdGVkRmlsZVxuICBpZiAob2xkX3N0cmluZyA9PT0gJycpIHtcbiAgICAvLyBDcmVhdGUgbmV3IGZpbGVcbiAgICBvcmlnaW5hbEZpbGUgPSAnJ1xuICAgIHVwZGF0ZWRGaWxlID0gbmV3X3N0cmluZ1xuICB9IGVsc2Uge1xuICAgIC8vIEVkaXQgZXhpc3RpbmcgZmlsZVxuICAgIGNvbnN0IGVuYyA9IGRldGVjdEZpbGVFbmNvZGluZyhmdWxsRmlsZVBhdGgpXG4gICAgb3JpZ2luYWxGaWxlID0gcmVhZEZpbGVTeW5jKGZ1bGxGaWxlUGF0aCwgZW5jKVxuICAgIGlmIChuZXdfc3RyaW5nID09PSAnJykge1xuICAgICAgaWYgKFxuICAgICAgICAhb2xkX3N0cmluZy5lbmRzV2l0aCgnXFxuJykgJiZcbiAgICAgICAgb3JpZ2luYWxGaWxlLmluY2x1ZGVzKG9sZF9zdHJpbmcgKyAnXFxuJylcbiAgICAgICkge1xuICAgICAgICB1cGRhdGVkRmlsZSA9IG9yaWdpbmFsRmlsZS5yZXBsYWNlKG9sZF9zdHJpbmcgKyAnXFxuJywgKCkgPT4gbmV3X3N0cmluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZWRGaWxlID0gb3JpZ2luYWxGaWxlLnJlcGxhY2Uob2xkX3N0cmluZywgKCkgPT4gbmV3X3N0cmluZylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlZEZpbGUgPSBvcmlnaW5hbEZpbGUucmVwbGFjZShvbGRfc3RyaW5nLCAoKSA9PiBuZXdfc3RyaW5nKVxuICAgIH1cbiAgICBpZiAodXBkYXRlZEZpbGUgPT09IG9yaWdpbmFsRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnT3JpZ2luYWwgYW5kIGVkaXRlZCBmaWxlIG1hdGNoIGV4YWN0bHkuIEZhaWxlZCB0byBhcHBseSBlZGl0LicsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGF0Y2ggPSBnZXRQYXRjaCh7XG4gICAgZmlsZVBhdGg6IGZpbGVfcGF0aCxcbiAgICBmaWxlQ29udGVudHM6IG9yaWdpbmFsRmlsZSxcbiAgICBvbGRTdHI6IG9yaWdpbmFsRmlsZSxcbiAgICBuZXdTdHI6IHVwZGF0ZWRGaWxlLFxuICB9KVxuXG4gIHJldHVybiB7IHBhdGNoLCB1cGRhdGVkRmlsZSB9XG59XG4iLAogICAgImZ1bmN0aW9uIERpZmYoKSB7fVxuRGlmZi5wcm90b3R5cGUgPSB7XG4gIGRpZmY6IGZ1bmN0aW9uIGRpZmYob2xkU3RyaW5nLCBuZXdTdHJpbmcpIHtcbiAgICB2YXIgX29wdGlvbnMkdGltZW91dDtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gc2VsZi5wb3N0UHJvY2Vzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgc3ViY2xhc3NlcyB0byBtYXNzYWdlIHRoZSBpbnB1dCBwcmlvciB0byBydW5uaW5nXG4gICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nLCBvcHRpb25zKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChuZXdTdHJpbmcsIG9wdGlvbnMpO1xuICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcsIG9wdGlvbnMpKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nLCBvcHRpb25zKSk7XG4gICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoO1xuICAgIHZhciBlZGl0TGVuZ3RoID0gMTtcbiAgICB2YXIgbWF4RWRpdExlbmd0aCA9IG5ld0xlbiArIG9sZExlbjtcbiAgICBpZiAob3B0aW9ucy5tYXhFZGl0TGVuZ3RoICE9IG51bGwpIHtcbiAgICAgIG1heEVkaXRMZW5ndGggPSBNYXRoLm1pbihtYXhFZGl0TGVuZ3RoLCBvcHRpb25zLm1heEVkaXRMZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgbWF4RXhlY3V0aW9uVGltZSA9IChfb3B0aW9ucyR0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR0aW1lb3V0ICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR0aW1lb3V0IDogSW5maW5pdHk7XG4gICAgdmFyIGFib3J0QWZ0ZXJUaW1lc3RhbXAgPSBEYXRlLm5vdygpICsgbWF4RXhlY3V0aW9uVGltZTtcbiAgICB2YXIgYmVzdFBhdGggPSBbe1xuICAgICAgb2xkUG9zOiAtMSxcbiAgICAgIGxhc3RDb21wb25lbnQ6IHVuZGVmaW5lZFxuICAgIH1dO1xuXG4gICAgLy8gU2VlZCBlZGl0TGVuZ3RoID0gMCwgaS5lLiB0aGUgY29udGVudCBzdGFydHMgd2l0aCB0aGUgc2FtZSB2YWx1ZXNcbiAgICB2YXIgbmV3UG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCwgb3B0aW9ucyk7XG4gICAgaWYgKGJlc3RQYXRoWzBdLm9sZFBvcyArIDEgPj0gb2xkTGVuICYmIG5ld1BvcyArIDEgPj0gbmV3TGVuKSB7XG4gICAgICAvLyBJZGVudGl0eSBwZXIgdGhlIGVxdWFsaXR5IGFuZCB0b2tlbml6ZXJcbiAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJlc3RQYXRoWzBdLmxhc3RDb21wb25lbnQsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuICAgIH1cblxuICAgIC8vIE9uY2Ugd2UgaGl0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBlZGl0IGdyYXBoIG9uIHNvbWUgZGlhZ29uYWwgaywgd2UgY2FuXG4gICAgLy8gZGVmaW5pdGVseSByZWFjaCB0aGUgZW5kIG9mIHRoZSBlZGl0IGdyYXBoIGluIG5vIG1vcmUgdGhhbiBrIGVkaXRzLCBzb1xuICAgIC8vIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29uc2lkZXJpbmcgYW55IG1vdmVzIHRvIGRpYWdvbmFsIGsrMSBhbnkgbW9yZSAoZnJvbVxuICAgIC8vIHdoaWNoIHdlJ3JlIGd1YXJhbnRlZWQgdG8gbmVlZCBhdCBsZWFzdCBrKzEgbW9yZSBlZGl0cykuXG4gICAgLy8gU2ltaWxhcmx5LCBvbmNlIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgZWRpdCBncmFwaCwgdGhlcmUncyBub1xuICAgIC8vIHBvaW50IGNvbnNpZGVyaW5nIG1vdmVzIHRvIGxvd2VyIGRpYWdvbmFscy5cbiAgICAvLyBXZSByZWNvcmQgdGhpcyBmYWN0IGJ5IHNldHRpbmcgbWluRGlhZ29uYWxUb0NvbnNpZGVyIGFuZFxuICAgIC8vIG1heERpYWdvbmFsVG9Db25zaWRlciB0byBzb21lIGZpbml0ZSB2YWx1ZSBvbmNlIHdlJ3ZlIGhpdCB0aGUgZWRnZSBvZlxuICAgIC8vIHRoZSBlZGl0IGdyYXBoLlxuICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIGlzIG5vdCBmYWl0aGZ1bCB0byB0aGUgb3JpZ2luYWwgYWxnb3JpdGhtIHByZXNlbnRlZCBpblxuICAgIC8vIE15ZXJzJ3MgcGFwZXIsIHdoaWNoIGluc3RlYWQgcG9pbnRsZXNzbHkgZXh0ZW5kcyBELXBhdGhzIG9mZiB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIGVkaXQgZ3JhcGggLSBzZWUgcGFnZSA3IG9mIE15ZXJzJ3MgcGFwZXIgd2hpY2ggbm90ZXMgdGhpcyBwb2ludFxuICAgIC8vIGV4cGxpY2l0bHkgYW5kIGlsbHVzdHJhdGVzIGl0IHdpdGggYSBkaWFncmFtLiBUaGlzIGhhcyBtYWpvciBwZXJmb3JtYW5jZVxuICAgIC8vIGltcGxpY2F0aW9ucyBmb3Igc29tZSBjb21tb24gc2NlbmFyaW9zLiBGb3IgaW5zdGFuY2UsIHRvIGNvbXB1dGUgYSBkaWZmXG4gICAgLy8gd2hlcmUgdGhlIG5ldyB0ZXh0IHNpbXBseSBhcHBlbmRzIGQgY2hhcmFjdGVycyBvbiB0aGUgZW5kIG9mIHRoZVxuICAgIC8vIG9yaWdpbmFsIHRleHQgb2YgbGVuZ3RoIG4sIHRoZSB0cnVlIE15ZXJzIGFsZ29yaXRobSB3aWxsIHRha2UgTyhuK2ReMilcbiAgICAvLyB0aW1lIHdoaWxlIHRoaXMgb3B0aW1pemF0aW9uIG5lZWRzIG9ubHkgTyhuK2QpIHRpbWUuXG4gICAgdmFyIG1pbkRpYWdvbmFsVG9Db25zaWRlciA9IC1JbmZpbml0eSxcbiAgICAgIG1heERpYWdvbmFsVG9Db25zaWRlciA9IEluZmluaXR5O1xuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yICh2YXIgZGlhZ29uYWxQYXRoID0gTWF0aC5tYXgobWluRGlhZ29uYWxUb0NvbnNpZGVyLCAtZWRpdExlbmd0aCk7IGRpYWdvbmFsUGF0aCA8PSBNYXRoLm1pbihtYXhEaWFnb25hbFRvQ29uc2lkZXIsIGVkaXRMZW5ndGgpOyBkaWFnb25hbFBhdGggKz0gMikge1xuICAgICAgICB2YXIgYmFzZVBhdGggPSB2b2lkIDA7XG4gICAgICAgIHZhciByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG4gICAgICAgICAgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdO1xuICAgICAgICBpZiAocmVtb3ZlUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkFkZCA9IGZhbHNlO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIHdoYXQgbmV3UG9zIHdpbGwgYmUgYWZ0ZXIgd2UgZG8gYW4gaW5zZXJ0aW9uOlxuICAgICAgICAgIHZhciBhZGRQYXRoTmV3UG9zID0gYWRkUGF0aC5vbGRQb3MgLSBkaWFnb25hbFBhdGg7XG4gICAgICAgICAgY2FuQWRkID0gYWRkUGF0aCAmJiAwIDw9IGFkZFBhdGhOZXdQb3MgJiYgYWRkUGF0aE5ld1BvcyA8IG5ld0xlbjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuUmVtb3ZlID0gcmVtb3ZlUGF0aCAmJiByZW1vdmVQYXRoLm9sZFBvcyArIDEgPCBvbGRMZW47XG4gICAgICAgIGlmICghY2FuQWRkICYmICFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHBhdGggaXMgYSB0ZXJtaW5hbCB0aGVuIHBydW5lXG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgZGlhZ29uYWwgdGhhdCB3ZSB3YW50IHRvIGJyYW5jaCBmcm9tLiBXZSBzZWxlY3QgdGhlIHByaW9yXG4gICAgICAgIC8vIHBhdGggd2hvc2UgcG9zaXRpb24gaW4gdGhlIG9sZCBzdHJpbmcgaXMgdGhlIGZhcnRoZXN0IGZyb20gdGhlIG9yaWdpblxuICAgICAgICAvLyBhbmQgZG9lcyBub3QgcGFzcyB0aGUgYm91bmRzIG9mIHRoZSBkaWZmIGdyYXBoXG4gICAgICAgIGlmICghY2FuUmVtb3ZlIHx8IGNhbkFkZCAmJiByZW1vdmVQYXRoLm9sZFBvcyA8IGFkZFBhdGgub2xkUG9zKSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBzZWxmLmFkZFRvUGF0aChhZGRQYXRoLCB0cnVlLCBmYWxzZSwgMCwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBzZWxmLmFkZFRvUGF0aChyZW1vdmVQYXRoLCBmYWxzZSwgdHJ1ZSwgMSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UG9zID0gc2VsZi5leHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGJhc2VQYXRoLm9sZFBvcyArIDEgPj0gb2xkTGVuICYmIG5ld1BvcyArIDEgPj0gbmV3TGVuKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgICByZXR1cm4gZG9uZShidWlsZFZhbHVlcyhzZWxmLCBiYXNlUGF0aC5sYXN0Q29tcG9uZW50LCBuZXdTdHJpbmcsIG9sZFN0cmluZywgc2VsZi51c2VMb25nZXN0VG9rZW4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG4gICAgICAgICAgaWYgKGJhc2VQYXRoLm9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgICBtYXhEaWFnb25hbFRvQ29uc2lkZXIgPSBNYXRoLm1pbihtYXhEaWFnb25hbFRvQ29uc2lkZXIsIGRpYWdvbmFsUGF0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmV3UG9zICsgMSA+PSBuZXdMZW4pIHtcbiAgICAgICAgICAgIG1pbkRpYWdvbmFsVG9Db25zaWRlciA9IE1hdGgubWF4KG1pbkRpYWdvbmFsVG9Db25zaWRlciwgZGlhZ29uYWxQYXRoICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQsIG9yIHVudGlsIHRoZSBlZGl0IGxlbmd0aCBleGNlZWRzIG9wdGlvbnMubWF4RWRpdExlbmd0aCAoaWYgZ2l2ZW4pLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCB8fCBEYXRlLm5vdygpID4gYWJvcnRBZnRlclRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZXhlY0VkaXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgZXhlYygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgICB9KSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAoZWRpdExlbmd0aCA8PSBtYXhFZGl0TGVuZ3RoICYmIERhdGUubm93KCkgPD0gYWJvcnRBZnRlclRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGFkZFRvUGF0aDogZnVuY3Rpb24gYWRkVG9QYXRoKHBhdGgsIGFkZGVkLCByZW1vdmVkLCBvbGRQb3NJbmMsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGFzdCA9IHBhdGgubGFzdENvbXBvbmVudDtcbiAgICBpZiAobGFzdCAmJiAhb3B0aW9ucy5vbmVDaGFuZ2VQZXJUb2tlbiAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9sZFBvczogcGF0aC5vbGRQb3MgKyBvbGRQb3NJbmMsXG4gICAgICAgIGxhc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICBjb3VudDogbGFzdC5jb3VudCArIDEsXG4gICAgICAgICAgYWRkZWQ6IGFkZGVkLFxuICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsXG4gICAgICAgICAgcHJldmlvdXNDb21wb25lbnQ6IGxhc3QucHJldmlvdXNDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2xkUG9zOiBwYXRoLm9sZFBvcyArIG9sZFBvc0luYyxcbiAgICAgICAgbGFzdENvbXBvbmVudDoge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgICByZW1vdmVkOiByZW1vdmVkLFxuICAgICAgICAgIHByZXZpb3VzQ29tcG9uZW50OiBsYXN0XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uOiBmdW5jdGlvbiBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoLFxuICAgICAgb2xkUG9zID0gYmFzZVBhdGgub2xkUG9zLFxuICAgICAgbmV3UG9zID0gb2xkUG9zIC0gZGlhZ29uYWxQYXRoLFxuICAgICAgY29tbW9uQ291bnQgPSAwO1xuICAgIHdoaWxlIChuZXdQb3MgKyAxIDwgbmV3TGVuICYmIG9sZFBvcyArIDEgPCBvbGRMZW4gJiYgdGhpcy5lcXVhbHMob2xkU3RyaW5nW29sZFBvcyArIDFdLCBuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9wdGlvbnMpKSB7XG4gICAgICBuZXdQb3MrKztcbiAgICAgIG9sZFBvcysrO1xuICAgICAgY29tbW9uQ291bnQrKztcbiAgICAgIGlmIChvcHRpb25zLm9uZUNoYW5nZVBlclRva2VuKSB7XG4gICAgICAgIGJhc2VQYXRoLmxhc3RDb21wb25lbnQgPSB7XG4gICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgcHJldmlvdXNDb21wb25lbnQ6IGJhc2VQYXRoLmxhc3RDb21wb25lbnQsXG4gICAgICAgICAgYWRkZWQ6IGZhbHNlLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb21tb25Db3VudCAmJiAhb3B0aW9ucy5vbmVDaGFuZ2VQZXJUb2tlbikge1xuICAgICAgYmFzZVBhdGgubGFzdENvbXBvbmVudCA9IHtcbiAgICAgICAgY291bnQ6IGNvbW1vbkNvdW50LFxuICAgICAgICBwcmV2aW91c0NvbXBvbmVudDogYmFzZVBhdGgubGFzdENvbXBvbmVudCxcbiAgICAgICAgYWRkZWQ6IGZhbHNlLFxuICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgYmFzZVBhdGgub2xkUG9zID0gb2xkUG9zO1xuICAgIHJldHVybiBuZXdQb3M7XG4gIH0sXG4gIGVxdWFsczogZnVuY3Rpb24gZXF1YWxzKGxlZnQsIHJpZ2h0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGFyYXRvcihsZWZ0LCByaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCBvcHRpb25zLmlnbm9yZUNhc2UgJiYgbGVmdC50b0xvd2VyQ2FzZSgpID09PSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHk6IGZ1bmN0aW9uIHJlbW92ZUVtcHR5KGFycmF5KSB7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheVtpXSkge1xuICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIGNhc3RJbnB1dDogZnVuY3Rpb24gY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZTogZnVuY3Rpb24gdG9rZW5pemUodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gIH0sXG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH0sXG4gIHBvc3RQcm9jZXNzOiBmdW5jdGlvbiBwb3N0UHJvY2VzcyhjaGFuZ2VPYmplY3RzKSB7XG4gICAgcmV0dXJuIGNoYW5nZU9iamVjdHM7XG4gIH1cbn07XG5mdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBsYXN0Q29tcG9uZW50LCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG4gIC8vIEZpcnN0IHdlIGNvbnZlcnQgb3VyIGxpbmtlZCBsaXN0IG9mIGNvbXBvbmVudHMgaW4gcmV2ZXJzZSBvcmRlciB0byBhblxuICAvLyBhcnJheSBpbiB0aGUgcmlnaHQgb3JkZXI6XG4gIHZhciBjb21wb25lbnRzID0gW107XG4gIHZhciBuZXh0Q29tcG9uZW50O1xuICB3aGlsZSAobGFzdENvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudHMucHVzaChsYXN0Q29tcG9uZW50KTtcbiAgICBuZXh0Q29tcG9uZW50ID0gbGFzdENvbXBvbmVudC5wcmV2aW91c0NvbXBvbmVudDtcbiAgICBkZWxldGUgbGFzdENvbXBvbmVudC5wcmV2aW91c0NvbXBvbmVudDtcbiAgICBsYXN0Q29tcG9uZW50ID0gbmV4dENvbXBvbmVudDtcbiAgfVxuICBjb21wb25lbnRzLnJldmVyc2UoKTtcbiAgdmFyIGNvbXBvbmVudFBvcyA9IDAsXG4gICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG4gICAgbmV3UG9zID0gMCxcbiAgICBvbGRQb3MgPSAwO1xuICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgaWYgKCFjb21wb25lbnQucmVtb3ZlZCkge1xuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uICh2YWx1ZSwgaSkge1xuICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFN0cmluZ1tvbGRQb3MgKyBpXTtcbiAgICAgICAgICByZXR1cm4gb2xkVmFsdWUubGVuZ3RoID4gdmFsdWUubGVuZ3RoID8gb2xkVmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5cbnZhciBjaGFyYWN0ZXJEaWZmID0gbmV3IERpZmYoKTtcbmZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbG9uZ2VzdENvbW1vblByZWZpeChzdHIxLCBzdHIyKSB7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgc3RyMS5sZW5ndGggJiYgaSA8IHN0cjIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyMVtpXSAhPSBzdHIyW2ldKSB7XG4gICAgICByZXR1cm4gc3RyMS5zbGljZSgwLCBpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjEuc2xpY2UoMCwgaSk7XG59XG5mdW5jdGlvbiBsb25nZXN0Q29tbW9uU3VmZml4KHN0cjEsIHN0cjIpIHtcbiAgdmFyIGk7XG5cbiAgLy8gVW5saWtlIGxvbmdlc3RDb21tb25QcmVmaXgsIHdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgdG8gaGFuZGxlIGFsbCBzY2VuYXJpb3NcbiAgLy8gd2hlcmUgd2UgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgc2luY2Ugc3RyMS5zbGljZSgtMCkgd2lsbCByZXR1cm4gdGhlXG4gIC8vIGVudGlyZSBzdHJpbmcuXG4gIGlmICghc3RyMSB8fCAhc3RyMiB8fCBzdHIxW3N0cjEubGVuZ3RoIC0gMV0gIT0gc3RyMltzdHIyLmxlbmd0aCAtIDFdKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBzdHIxLmxlbmd0aCAmJiBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHIxW3N0cjEubGVuZ3RoIC0gKGkgKyAxKV0gIT0gc3RyMltzdHIyLmxlbmd0aCAtIChpICsgMSldKSB7XG4gICAgICByZXR1cm4gc3RyMS5zbGljZSgtaSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHIxLnNsaWNlKC1pKTtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VQcmVmaXgoc3RyaW5nLCBvbGRQcmVmaXgsIG5ld1ByZWZpeCkge1xuICBpZiAoc3RyaW5nLnNsaWNlKDAsIG9sZFByZWZpeC5sZW5ndGgpICE9IG9sZFByZWZpeCkge1xuICAgIHRocm93IEVycm9yKFwic3RyaW5nIFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShzdHJpbmcpLCBcIiBkb2Vzbid0IHN0YXJ0IHdpdGggcHJlZml4IFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkob2xkUHJlZml4KSwgXCI7IHRoaXMgaXMgYSBidWdcIikpO1xuICB9XG4gIHJldHVybiBuZXdQcmVmaXggKyBzdHJpbmcuc2xpY2Uob2xkUHJlZml4Lmxlbmd0aCk7XG59XG5mdW5jdGlvbiByZXBsYWNlU3VmZml4KHN0cmluZywgb2xkU3VmZml4LCBuZXdTdWZmaXgpIHtcbiAgaWYgKCFvbGRTdWZmaXgpIHtcbiAgICByZXR1cm4gc3RyaW5nICsgbmV3U3VmZml4O1xuICB9XG4gIGlmIChzdHJpbmcuc2xpY2UoLW9sZFN1ZmZpeC5sZW5ndGgpICE9IG9sZFN1ZmZpeCkge1xuICAgIHRocm93IEVycm9yKFwic3RyaW5nIFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShzdHJpbmcpLCBcIiBkb2Vzbid0IGVuZCB3aXRoIHN1ZmZpeCBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KG9sZFN1ZmZpeCksIFwiOyB0aGlzIGlzIGEgYnVnXCIpKTtcbiAgfVxuICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIC1vbGRTdWZmaXgubGVuZ3RoKSArIG5ld1N1ZmZpeDtcbn1cbmZ1bmN0aW9uIHJlbW92ZVByZWZpeChzdHJpbmcsIG9sZFByZWZpeCkge1xuICByZXR1cm4gcmVwbGFjZVByZWZpeChzdHJpbmcsIG9sZFByZWZpeCwgJycpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3VmZml4KHN0cmluZywgb2xkU3VmZml4KSB7XG4gIHJldHVybiByZXBsYWNlU3VmZml4KHN0cmluZywgb2xkU3VmZml4LCAnJyk7XG59XG5mdW5jdGlvbiBtYXhpbXVtT3ZlcmxhcChzdHJpbmcxLCBzdHJpbmcyKSB7XG4gIHJldHVybiBzdHJpbmcyLnNsaWNlKDAsIG92ZXJsYXBDb3VudChzdHJpbmcxLCBzdHJpbmcyKSk7XG59XG5cbi8vIE5pY2tlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MDQyMjg1My8xNzA5NTg3XG5mdW5jdGlvbiBvdmVybGFwQ291bnQoYSwgYikge1xuICAvLyBEZWFsIHdpdGggY2FzZXMgd2hlcmUgdGhlIHN0cmluZ3MgZGlmZmVyIGluIGxlbmd0aFxuICB2YXIgc3RhcnRBID0gMDtcbiAgaWYgKGEubGVuZ3RoID4gYi5sZW5ndGgpIHtcbiAgICBzdGFydEEgPSBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICB9XG4gIHZhciBlbmRCID0gYi5sZW5ndGg7XG4gIGlmIChhLmxlbmd0aCA8IGIubGVuZ3RoKSB7XG4gICAgZW5kQiA9IGEubGVuZ3RoO1xuICB9XG4gIC8vIENyZWF0ZSBhIGJhY2stcmVmZXJlbmNlIGZvciBlYWNoIGluZGV4XG4gIC8vICAgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgaW4gY2FzZSBvZiBhIG1pc21hdGNoLlxuICAvLyAgIFdlIG9ubHkgbmVlZCBCIHRvIG1ha2UgdGhlc2UgcmVmZXJlbmNlczpcbiAgdmFyIG1hcCA9IEFycmF5KGVuZEIpO1xuICB2YXIgayA9IDA7IC8vIEluZGV4IHRoYXQgbGFncyBiZWhpbmQgalxuICBtYXBbMF0gPSAwO1xuICBmb3IgKHZhciBqID0gMTsgaiA8IGVuZEI7IGorKykge1xuICAgIGlmIChiW2pdID09IGJba10pIHtcbiAgICAgIG1hcFtqXSA9IG1hcFtrXTsgLy8gc2tpcCBvdmVyIHRoZSBzYW1lIGNoYXJhY3RlciAob3B0aW9uYWwgb3B0aW1pc2F0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXBbal0gPSBrO1xuICAgIH1cbiAgICB3aGlsZSAoayA+IDAgJiYgYltqXSAhPSBiW2tdKSB7XG4gICAgICBrID0gbWFwW2tdO1xuICAgIH1cbiAgICBpZiAoYltqXSA9PSBiW2tdKSB7XG4gICAgICBrKys7XG4gICAgfVxuICB9XG4gIC8vIFBoYXNlIDI6IHVzZSB0aGVzZSByZWZlcmVuY2VzIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEFcbiAgayA9IDA7XG4gIGZvciAodmFyIGkgPSBzdGFydEE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgd2hpbGUgKGsgPiAwICYmIGFbaV0gIT0gYltrXSkge1xuICAgICAgayA9IG1hcFtrXTtcbiAgICB9XG4gICAgaWYgKGFbaV0gPT0gYltrXSkge1xuICAgICAgaysrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBjb25zaXN0ZW50bHkgdXNlcyBXaW5kb3dzIGxpbmUgZW5kaW5ncy5cbiAqL1xuZnVuY3Rpb24gaGFzT25seVdpbkxpbmVFbmRpbmdzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmluY2x1ZGVzKCdcXHJcXG4nKSAmJiAhc3RyaW5nLnN0YXJ0c1dpdGgoJ1xcbicpICYmICFzdHJpbmcubWF0Y2goL1teXFxyXVxcbi8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGNvbnNpc3RlbnRseSB1c2VzIFVuaXggbGluZSBlbmRpbmdzLlxuICovXG5mdW5jdGlvbiBoYXNPbmx5VW5peExpbmVFbmRpbmdzKHN0cmluZykge1xuICByZXR1cm4gIXN0cmluZy5pbmNsdWRlcygnXFxyXFxuJykgJiYgc3RyaW5nLmluY2x1ZGVzKCdcXG4nKTtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fc2NyaXB0X2luX1VuaWNvZGVcbi8vXG4vLyBSYW5nZXMgYW5kIGV4Y2VwdGlvbnM6XG4vLyBMYXRpbi0xIFN1cHBsZW1lbnQsIDAwODDigJMwMEZGXG4vLyAgLSBVKzAwRDcgIMOXIE11bHRpcGxpY2F0aW9uIHNpZ25cbi8vICAtIFUrMDBGNyAgw7cgRGl2aXNpb24gc2lnblxuLy8gTGF0aW4gRXh0ZW5kZWQtQSwgMDEwMOKAkzAxN0Zcbi8vIExhdGluIEV4dGVuZGVkLUIsIDAxODDigJMwMjRGXG4vLyBJUEEgRXh0ZW5zaW9ucywgMDI1MOKAkzAyQUZcbi8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgMDJCMOKAkzAyRkZcbi8vICAtIFUrMDJDNyAgy4cgJiM3MTE7ICBDYXJvblxuLy8gIC0gVSswMkQ4ICDLmCAmIzcyODsgIEJyZXZlXG4vLyAgLSBVKzAyRDkgIMuZICYjNzI5OyAgRG90IEFib3ZlXG4vLyAgLSBVKzAyREEgIMuaICYjNzMwOyAgUmluZyBBYm92ZVxuLy8gIC0gVSswMkRCICDLmyAmIzczMTsgIE9nb25la1xuLy8gIC0gVSswMkRDICDLnCAmIzczMjsgIFNtYWxsIFRpbGRlXG4vLyAgLSBVKzAyREQgIMudICYjNzMzOyAgRG91YmxlIEFjdXRlIEFjY2VudFxuLy8gTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCwgMUUwMOKAkzFFRkZcbnZhciBleHRlbmRlZFdvcmRDaGFycyA9IFwiYS16QS1aMC05X1xcXFx1e0MwfS1cXFxcdXtGRn1cXFxcdXtEOH0tXFxcXHV7RjZ9XFxcXHV7Rjh9LVxcXFx1ezJDNn1cXFxcdXsyQzh9LVxcXFx1ezJEN31cXFxcdXsyREV9LVxcXFx1ezJGRn1cXFxcdXsxRTAwfS1cXFxcdXsxRUZGfVwiO1xuXG4vLyBFYWNoIHRva2VuIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuLy8gLSBBIHB1bmN0dWF0aW9uIG1hcmsgcGx1cyB0aGUgc3Vycm91bmRpbmcgd2hpdGVzcGFjZVxuLy8gLSBBIHdvcmQgcGx1cyB0aGUgc3Vycm91bmRpbmcgd2hpdGVzcGFjZVxuLy8gLSBQdXJlIHdoaXRlc3BhY2UgKGJ1dCBvbmx5IGluIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhpcyB0aGUgZW50aXJlIHRleHRcbi8vICAgaXMganVzdCB3aGl0ZXNwYWNlKVxuLy9cbi8vIFdlIGhhdmUgdG8gaW5jbHVkZSBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIGluIHRoZSB0b2tlbnMgYmVjYXVzZSB0aGUgdHdvXG4vLyBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIHByb2R1Y2UgaG9ycmlibHkgYnJva2VuIHJlc3VsdHM6XG4vLyAqIElmIHdlIGp1c3QgZGlzY2FyZCB0aGUgd2hpdGVzcGFjZSwgd2UgY2FuJ3QgZnVsbHkgcmVwcm9kdWNlIHRoZSBvcmlnaW5hbFxuLy8gICB0ZXh0IGZyb20gdGhlIHNlcXVlbmNlIG9mIHRva2VucyBhbmQgYW55IGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBkaWZmIHdpbGxcbi8vICAgZ2V0IHRoZSB3aGl0ZXNwYWNlIHdyb25nLlxuLy8gKiBJZiB3ZSBoYXZlIHNlcGFyYXRlIHRva2VucyBmb3Igd2hpdGVzcGFjZSwgdGhlbiBpbiBhIHR5cGljYWwgdGV4dCBldmVyeVxuLy8gICBzZWNvbmQgdG9rZW4gd2lsbCBiZSBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIuIEJ1dCB0aGlzIG9mdGVuIHJlc3VsdHMgaW5cbi8vICAgdGhlIG9wdGltYWwgZGlmZiBiZXR3ZWVuIHR3byB0ZXh0cyBiZWluZyBhIHBlcnZlcnNlIG9uZSB0aGF0IHByZXNlcnZlc1xuLy8gICB0aGUgc3BhY2VzIGJldHdlZW4gd29yZHMgYnV0IGRlbGV0ZXMgYW5kIHJlaW5zZXJ0cyBhY3R1YWwgY29tbW9uIHdvcmRzLlxuLy8gICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2twZGVja2VyL2pzZGlmZi9pc3N1ZXMvMTYwI2lzc3VlY29tbWVudC0xODY2MDk5NjQwXG4vLyAgIGZvciBhbiBleGFtcGxlLlxuLy9cbi8vIEtlZXBpbmcgdGhlIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2Ugb2YgY291cnNlIGhhcyBpbXBsaWNhdGlvbnMgZm9yIC5lcXVhbHNcbi8vIGFuZCAuam9pbiwgbm90IGp1c3QgLnRva2VuaXplLlxuXG4vLyBUaGlzIHJlZ2V4IGRvZXMgTk9UIGZ1bGx5IGltcGxlbWVudCB0aGUgdG9rZW5pemF0aW9uIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZS5cbi8vIEluc3RlYWQsIGl0IGdpdmVzIHJ1bnMgb2Ygd2hpdGVzcGFjZSB0aGVpciBvd24gXCJ0b2tlblwiLiBUaGUgdG9rZW5pemUgbWV0aG9kXG4vLyB0aGVuIGhhbmRsZXMgc3RpdGNoaW5nIHdoaXRlc3BhY2UgdG9rZW5zIG9udG8gYWRqYWNlbnQgd29yZCBvciBwdW5jdHVhdGlvblxuLy8gdG9rZW5zLlxudmFyIHRva2VuaXplSW5jbHVkaW5nV2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoXCJbXCIuY29uY2F0KGV4dGVuZGVkV29yZENoYXJzLCBcIl0rfFxcXFxzK3xbXlwiKS5jb25jYXQoZXh0ZW5kZWRXb3JkQ2hhcnMsIFwiXVwiKSwgJ3VnJyk7XG52YXIgd29yZERpZmYgPSBuZXcgRGlmZigpO1xud29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmlnbm9yZUNhc2UpIHtcbiAgICBsZWZ0ID0gbGVmdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJpZ2h0ID0gcmlnaHQudG9Mb3dlckNhc2UoKTtcbiAgfVxuICByZXR1cm4gbGVmdC50cmltKCkgPT09IHJpZ2h0LnRyaW0oKTtcbn07XG53b3JkRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBwYXJ0cztcbiAgaWYgKG9wdGlvbnMuaW50bFNlZ21lbnRlcikge1xuICAgIGlmIChvcHRpb25zLmludGxTZWdtZW50ZXIucmVzb2x2ZWRPcHRpb25zKCkuZ3JhbnVsYXJpdHkgIT0gJ3dvcmQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzZWdtZW50ZXIgcGFzc2VkIG11c3QgaGF2ZSBhIGdyYW51bGFyaXR5IG9mIFwid29yZFwiJyk7XG4gICAgfVxuICAgIHBhcnRzID0gQXJyYXkuZnJvbShvcHRpb25zLmludGxTZWdtZW50ZXIuc2VnbWVudCh2YWx1ZSksIGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgICByZXR1cm4gc2VnbWVudC5zZWdtZW50O1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcnRzID0gdmFsdWUubWF0Y2godG9rZW5pemVJbmNsdWRpbmdXaGl0ZXNwYWNlKSB8fCBbXTtcbiAgfVxuICB2YXIgdG9rZW5zID0gW107XG4gIHZhciBwcmV2UGFydCA9IG51bGw7XG4gIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQpIHtcbiAgICBpZiAoL1xccy8udGVzdChwYXJ0KSkge1xuICAgICAgaWYgKHByZXZQYXJ0ID09IG51bGwpIHtcbiAgICAgICAgdG9rZW5zLnB1c2gocGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbnMucG9wKCkgKyBwYXJ0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9cXHMvLnRlc3QocHJldlBhcnQpKSB7XG4gICAgICBpZiAodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9PSBwcmV2UGFydCkge1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbnMucG9wKCkgKyBwYXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHByZXZQYXJ0ICsgcGFydCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgICBwcmV2UGFydCA9IHBhcnQ7XG4gIH0pO1xuICByZXR1cm4gdG9rZW5zO1xufTtcbndvcmREaWZmLmpvaW4gPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIC8vIFRva2VucyBiZWluZyBqb2luZWQgaGVyZSB3aWxsIGFsd2F5cyBoYXZlIGFwcGVhcmVkIGNvbnNlY3V0aXZlbHkgaW4gdGhlXG4gIC8vIHNhbWUgdGV4dCwgc28gd2UgY2FuIHNpbXBseSBzdHJpcCBvZmYgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIGFsbCB0aGVcbiAgLy8gdG9rZW5zIGV4Y2VwdCB0aGUgZmlyc3QgKGFuZCBleGNlcHQgYW55IHdoaXRlc3BhY2Utb25seSB0b2tlbnMgLSBidXQgc3VjaFxuICAvLyBhIHRva2VuIHdpbGwgYWx3YXlzIGJlIHRoZSBmaXJzdCBhbmQgb25seSB0b2tlbiBhbnl3YXkpIGFuZCB0aGVuIGpvaW4gdGhlbVxuICAvLyBhbmQgdGhlIHdoaXRlc3BhY2UgYXJvdW5kIHdvcmRzIGFuZCBwdW5jdHVhdGlvbiB3aWxsIGVuZCB1cCBjb3JyZWN0LlxuICByZXR1cm4gdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGkpIHtcbiAgICBpZiAoaSA9PSAwKSB7XG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlbi5yZXBsYWNlKC9eXFxzKy8sICcnKTtcbiAgICB9XG4gIH0pLmpvaW4oJycpO1xufTtcbndvcmREaWZmLnBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKGNoYW5nZXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFjaGFuZ2VzIHx8IG9wdGlvbnMub25lQ2hhbmdlUGVyVG9rZW4pIHtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuICB2YXIgbGFzdEtlZXAgPSBudWxsO1xuICAvLyBDaGFuZ2Ugb2JqZWN0cyByZXByZXNlbnRpbmcgYW55IGluc2VydGlvbiBvciBkZWxldGlvbiBzaW5jZSB0aGUgbGFzdFxuICAvLyBcImtlZXBcIiBjaGFuZ2Ugb2JqZWN0LiBUaGVyZSBjYW4gYmUgYXQgbW9zdCBvbmUgb2YgZWFjaC5cbiAgdmFyIGluc2VydGlvbiA9IG51bGw7XG4gIHZhciBkZWxldGlvbiA9IG51bGw7XG4gIGNoYW5nZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hhbmdlKSB7XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgaW5zZXJ0aW9uID0gY2hhbmdlO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIGRlbGV0aW9uID0gY2hhbmdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5zZXJ0aW9uIHx8IGRlbGV0aW9uKSB7XG4gICAgICAgIC8vIE1heSBiZSBmYWxzZSBhdCBzdGFydCBvZiB0ZXh0XG4gICAgICAgIGRlZHVwZVdoaXRlc3BhY2VJbkNoYW5nZU9iamVjdHMobGFzdEtlZXAsIGRlbGV0aW9uLCBpbnNlcnRpb24sIGNoYW5nZSk7XG4gICAgICB9XG4gICAgICBsYXN0S2VlcCA9IGNoYW5nZTtcbiAgICAgIGluc2VydGlvbiA9IG51bGw7XG4gICAgICBkZWxldGlvbiA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgaWYgKGluc2VydGlvbiB8fCBkZWxldGlvbikge1xuICAgIGRlZHVwZVdoaXRlc3BhY2VJbkNoYW5nZU9iamVjdHMobGFzdEtlZXAsIGRlbGV0aW9uLCBpbnNlcnRpb24sIG51bGwpO1xuICB9XG4gIHJldHVybiBjaGFuZ2VzO1xufTtcbmZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICAvLyBUaGlzIG9wdGlvbiBoYXMgbmV2ZXIgYmVlbiBkb2N1bWVudGVkIGFuZCBuZXZlciB3aWxsIGJlIChpdCdzIGNsZWFyZXIgdG9cbiAgLy8ganVzdCBjYWxsIGBkaWZmV29yZHNXaXRoU3BhY2VgIGRpcmVjdGx5IGlmIHlvdSBuZWVkIHRoYXQgYmVoYXZpb3IpLCBidXRcbiAgLy8gaGFzIGV4aXN0ZWQgaW4ganNkaWZmIGZvciBhIGxvbmcgdGltZSwgc28gd2UgcmV0YWluIHN1cHBvcnQgZm9yIGl0IGhlcmVcbiAgLy8gZm9yIHRoZSBzYWtlIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlKSAhPSBudWxsICYmICFvcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICByZXR1cm4gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBkZWR1cGVXaGl0ZXNwYWNlSW5DaGFuZ2VPYmplY3RzKHN0YXJ0S2VlcCwgZGVsZXRpb24sIGluc2VydGlvbiwgZW5kS2VlcCkge1xuICAvLyBCZWZvcmUgcmV0dXJuaW5nLCB3ZSB0aWR5IHVwIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9mIHRoZVxuICAvLyBjaGFuZ2Ugb2JqZWN0cyB0byBlbGltaW5hdGUgY2FzZXMgd2hlcmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBvbmUgb2JqZWN0XG4gIC8vIGlzIHJlcGVhdGVkIGFzIGxlYWRpbmcgd2hpdGVzcGFjZSBpbiB0aGUgbmV4dC5cbiAgLy8gQmVsb3cgYXJlIGV4YW1wbGVzIG9mIHRoZSBvdXRjb21lcyB3ZSB3YW50IGhlcmUgdG8gZXhwbGFpbiB0aGUgY29kZS5cbiAgLy8gST1pbnNlcnQsIEs9a2VlcCwgRD1kZWxldGVcbiAgLy8gMS4gZGlmZmluZyAnZm9vIGJhciBiYXonIHZzICdmb28gYmF6J1xuICAvLyAgICBQcmlvciB0byBjbGVhbnVwLCB3ZSBoYXZlIEs6J2ZvbyAnIEQ6JyBiYXIgJyBLOicgYmF6J1xuICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSB3YW50OiAgIEs6J2ZvbyAnIEQ6J2JhciAnIEs6J2JheidcbiAgLy9cbiAgLy8gMi4gRGlmZmluZyAnZm9vIGJhciBiYXonIHZzICdmb28gcXV4IGJheidcbiAgLy8gICAgUHJpb3IgdG8gY2xlYW51cCwgd2UgaGF2ZSBLOidmb28gJyBEOicgYmFyICcgSTonIHF1eCAnIEs6JyBiYXonXG4gIC8vICAgIEFmdGVyIGNsZWFudXAsIHdlIHdhbnQgSzonZm9vICcgRDonYmFyJyBJOidxdXgnIEs6JyBiYXonXG4gIC8vXG4gIC8vIDMuIERpZmZpbmcgJ2Zvb1xcbmJhciBiYXonIHZzICdmb28gYmF6J1xuICAvLyAgICBQcmlvciB0byBjbGVhbnVwLCB3ZSBoYXZlIEs6J2ZvbyAnIEQ6J1xcbmJhciAnIEs6JyBiYXonXG4gIC8vICAgIEFmdGVyIGNsZWFudXAsIHdlIHdhbnQgSydmb28nIEQ6J1xcbmJhcicgSzonIGJheidcbiAgLy9cbiAgLy8gNC4gRGlmZmluZyAnZm9vIGJheicgdnMgJ2Zvb1xcbmJhciBiYXonXG4gIC8vICAgIFByaW9yIHRvIGNsZWFudXAsIHdlIGhhdmUgSzonZm9vXFxuJyBJOidcXG5iYXIgJyBLOicgYmF6J1xuICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSBpZGVhbGx5IHdhbnQgSydmb28nIEk6J1xcbmJhcicgSzonIGJheidcbiAgLy8gICAgYnV0IGRvbid0IGFjdHVhbGx5IG1hbmFnZSB0aGlzIGN1cnJlbnRseSAodGhlIHByZS1jbGVhbnVwIGNoYW5nZVxuICAvLyAgICBvYmplY3RzIGRvbid0IGNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2libGUpLlxuICAvL1xuICAvLyA1LiBEaWZmaW5nICdmb28gICBiYXIgYmF6JyB2cyAnZm9vICBiYXonXG4gIC8vICAgIFByaW9yIHRvIGNsZWFudXAsIHdlIGhhdmUgSzonZm9vICAnIEQ6JyAgIGJhciAnIEs6JyAgYmF6J1xuICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSB3YW50IEs6J2ZvbyAgJyBEOicgYmFyICcgSzonYmF6J1xuICAvL1xuICAvLyBPdXIgaGFuZGxpbmcgaXMgdW5hdm9pZGFibHkgaW1wZXJmZWN0IGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3MgYSBzaW5nbGVcbiAgLy8gaW5kZWwgYmV0d2VlbiBrZWVwcyBhbmQgdGhlIHdoaXRlc3BhY2UgaGFzIGNoYW5nZWQuIEZvciBpbnN0YW5jZSwgY29uc2lkZXJcbiAgLy8gZGlmZmluZyAnZm9vXFx0YmFyXFxuYmF6JyB2cyAnZm9vIGJheicuIFVubGVzcyB3ZSBjcmVhdGUgYW4gZXh0cmEgY2hhbmdlXG4gIC8vIG9iamVjdCB0byByZXByZXNlbnQgdGhlIGluc2VydGlvbiBvZiB0aGUgc3BhY2UgY2hhcmFjdGVyICh3aGljaCBpc24ndCBldmVuXG4gIC8vIGEgdG9rZW4pLCB3ZSBoYXZlIG5vIHdheSB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRleHRzJ1xuICAvLyBvcmlnaW5hbCB3aGl0ZXNwYWNlIGluIHRoZSByZXN1bHQgd2UgcmV0dXJuLiBTdGlsbCwgd2UgZG8gb3VyIGJlc3QgdG9cbiAgLy8gb3V0cHV0IHNvbWV0aGluZyB0aGF0IHdpbGwgbG9vayBzZW5zaWJsZSBpZiB3ZSBlLmcuIHByaW50IGl0IHdpdGhcbiAgLy8gaW5zZXJ0aW9ucyBpbiBncmVlbiBhbmQgZGVsZXRpb25zIGluIHJlZC5cblxuICAvLyBCZXR3ZWVuIHR3byBcImtlZXBcIiBjaGFuZ2Ugb2JqZWN0cyAob3IgYmVmb3JlIHRoZSBmaXJzdCBvciBhZnRlciB0aGUgbGFzdFxuICAvLyBjaGFuZ2Ugb2JqZWN0KSwgd2UgY2FuIGhhdmUgZWl0aGVyOlxuICAvLyAqIEEgXCJkZWxldGVcIiBmb2xsb3dlZCBieSBhbiBcImluc2VydFwiXG4gIC8vICogSnVzdCBhbiBcImluc2VydFwiXG4gIC8vICogSnVzdCBhIFwiZGVsZXRlXCJcbiAgLy8gV2UgaGFuZGxlIHRoZSB0aHJlZSBjYXNlcyBzZXBhcmF0ZWx5LlxuICBpZiAoZGVsZXRpb24gJiYgaW5zZXJ0aW9uKSB7XG4gICAgdmFyIG9sZFdzUHJlZml4ID0gZGVsZXRpb24udmFsdWUubWF0Y2goL15cXHMqLylbMF07XG4gICAgdmFyIG9sZFdzU3VmZml4ID0gZGVsZXRpb24udmFsdWUubWF0Y2goL1xccyokLylbMF07XG4gICAgdmFyIG5ld1dzUHJlZml4ID0gaW5zZXJ0aW9uLnZhbHVlLm1hdGNoKC9eXFxzKi8pWzBdO1xuICAgIHZhciBuZXdXc1N1ZmZpeCA9IGluc2VydGlvbi52YWx1ZS5tYXRjaCgvXFxzKiQvKVswXTtcbiAgICBpZiAoc3RhcnRLZWVwKSB7XG4gICAgICB2YXIgY29tbW9uV3NQcmVmaXggPSBsb25nZXN0Q29tbW9uUHJlZml4KG9sZFdzUHJlZml4LCBuZXdXc1ByZWZpeCk7XG4gICAgICBzdGFydEtlZXAudmFsdWUgPSByZXBsYWNlU3VmZml4KHN0YXJ0S2VlcC52YWx1ZSwgbmV3V3NQcmVmaXgsIGNvbW1vbldzUHJlZml4KTtcbiAgICAgIGRlbGV0aW9uLnZhbHVlID0gcmVtb3ZlUHJlZml4KGRlbGV0aW9uLnZhbHVlLCBjb21tb25Xc1ByZWZpeCk7XG4gICAgICBpbnNlcnRpb24udmFsdWUgPSByZW1vdmVQcmVmaXgoaW5zZXJ0aW9uLnZhbHVlLCBjb21tb25Xc1ByZWZpeCk7XG4gICAgfVxuICAgIGlmIChlbmRLZWVwKSB7XG4gICAgICB2YXIgY29tbW9uV3NTdWZmaXggPSBsb25nZXN0Q29tbW9uU3VmZml4KG9sZFdzU3VmZml4LCBuZXdXc1N1ZmZpeCk7XG4gICAgICBlbmRLZWVwLnZhbHVlID0gcmVwbGFjZVByZWZpeChlbmRLZWVwLnZhbHVlLCBuZXdXc1N1ZmZpeCwgY29tbW9uV3NTdWZmaXgpO1xuICAgICAgZGVsZXRpb24udmFsdWUgPSByZW1vdmVTdWZmaXgoZGVsZXRpb24udmFsdWUsIGNvbW1vbldzU3VmZml4KTtcbiAgICAgIGluc2VydGlvbi52YWx1ZSA9IHJlbW92ZVN1ZmZpeChpbnNlcnRpb24udmFsdWUsIGNvbW1vbldzU3VmZml4KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaW5zZXJ0aW9uKSB7XG4gICAgLy8gVGhlIHdoaXRlc3BhY2VzIGFsbCByZWZsZWN0IHdoYXQgd2FzIGluIHRoZSBuZXcgdGV4dCByYXRoZXIgdGhhblxuICAgIC8vIHRoZSBvbGQsIHNvIHdlIGVzc2VudGlhbGx5IGhhdmUgbm8gaW5mb3JtYXRpb24gYWJvdXQgd2hpdGVzcGFjZVxuICAgIC8vIGluc2VydGlvbiBvciBkZWxldGlvbi4gV2UganVzdCB3YW50IHRvIGRlZHVwZSB0aGUgd2hpdGVzcGFjZS5cbiAgICAvLyBXZSBkbyB0aGF0IGJ5IGhhdmluZyBlYWNoIGNoYW5nZSBvYmplY3Qga2VlcCBpdHMgdHJhaWxpbmdcbiAgICAvLyB3aGl0ZXNwYWNlIGFuZCBkZWxldGluZyBkdXBsaWNhdGUgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZXJlXG4gICAgLy8gcHJlc2VudC5cbiAgICBpZiAoc3RhcnRLZWVwKSB7XG4gICAgICBpbnNlcnRpb24udmFsdWUgPSBpbnNlcnRpb24udmFsdWUucmVwbGFjZSgvXlxccyovLCAnJyk7XG4gICAgfVxuICAgIGlmIChlbmRLZWVwKSB7XG4gICAgICBlbmRLZWVwLnZhbHVlID0gZW5kS2VlcC52YWx1ZS5yZXBsYWNlKC9eXFxzKi8sICcnKTtcbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIHdlJ3ZlIGdvdCBhIGRlbGV0aW9uIGFuZCBubyBpbnNlcnRpb25cbiAgfSBlbHNlIGlmIChzdGFydEtlZXAgJiYgZW5kS2VlcCkge1xuICAgIHZhciBuZXdXc0Z1bGwgPSBlbmRLZWVwLnZhbHVlLm1hdGNoKC9eXFxzKi8pWzBdLFxuICAgICAgZGVsV3NTdGFydCA9IGRlbGV0aW9uLnZhbHVlLm1hdGNoKC9eXFxzKi8pWzBdLFxuICAgICAgZGVsV3NFbmQgPSBkZWxldGlvbi52YWx1ZS5tYXRjaCgvXFxzKiQvKVswXTtcblxuICAgIC8vIEFueSB3aGl0ZXNwYWNlIHRoYXQgY29tZXMgc3RyYWlnaHQgYWZ0ZXIgc3RhcnRLZWVwIGluIGJvdGggdGhlIG9sZCBhbmRcbiAgICAvLyBuZXcgdGV4dHMsIGFzc2lnbiB0byBzdGFydEtlZXAgYW5kIHJlbW92ZSBmcm9tIHRoZSBkZWxldGlvbi5cbiAgICB2YXIgbmV3V3NTdGFydCA9IGxvbmdlc3RDb21tb25QcmVmaXgobmV3V3NGdWxsLCBkZWxXc1N0YXJ0KTtcbiAgICBkZWxldGlvbi52YWx1ZSA9IHJlbW92ZVByZWZpeChkZWxldGlvbi52YWx1ZSwgbmV3V3NTdGFydCk7XG5cbiAgICAvLyBBbnkgd2hpdGVzcGFjZSB0aGF0IGNvbWVzIHN0cmFpZ2h0IGJlZm9yZSBlbmRLZWVwIGluIGJvdGggdGhlIG9sZCBhbmRcbiAgICAvLyBuZXcgdGV4dHMsIGFuZCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIHRvIHN0YXJ0S2VlcCwgYXNzaWduIHRvXG4gICAgLy8gZW5kS2VlcCBhbmQgcmVtb3ZlIGZyb20gdGhlIGRlbGV0aW9uLlxuICAgIHZhciBuZXdXc0VuZCA9IGxvbmdlc3RDb21tb25TdWZmaXgocmVtb3ZlUHJlZml4KG5ld1dzRnVsbCwgbmV3V3NTdGFydCksIGRlbFdzRW5kKTtcbiAgICBkZWxldGlvbi52YWx1ZSA9IHJlbW92ZVN1ZmZpeChkZWxldGlvbi52YWx1ZSwgbmV3V3NFbmQpO1xuICAgIGVuZEtlZXAudmFsdWUgPSByZXBsYWNlUHJlZml4KGVuZEtlZXAudmFsdWUsIG5ld1dzRnVsbCwgbmV3V3NFbmQpO1xuXG4gICAgLy8gSWYgdGhlcmUncyBhbnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBuZXcgdGV4dCB0aGF0IEhBU04nVCBhbHJlYWR5IGJlZW5cbiAgICAvLyBhc3NpZ25lZCwgYXNzaWduIGl0IHRvIHRoZSBzdGFydDpcbiAgICBzdGFydEtlZXAudmFsdWUgPSByZXBsYWNlU3VmZml4KHN0YXJ0S2VlcC52YWx1ZSwgbmV3V3NGdWxsLCBuZXdXc0Z1bGwuc2xpY2UoMCwgbmV3V3NGdWxsLmxlbmd0aCAtIG5ld1dzRW5kLmxlbmd0aCkpO1xuICB9IGVsc2UgaWYgKGVuZEtlZXApIHtcbiAgICAvLyBXZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LiBQcmVzZXJ2ZSBhbGwgdGhlIHdoaXRlc3BhY2Ugb25cbiAgICAvLyBlbmRLZWVwLCBhbmQganVzdCByZW1vdmUgd2hpdGVzcGFjZSBmcm9tIHRoZSBlbmQgb2YgZGVsZXRpb24gdG8gdGhlXG4gICAgLy8gZXh0ZW50IHRoYXQgaXQgb3ZlcmxhcHMgd2l0aCB0aGUgc3RhcnQgb2YgZW5kS2VlcC5cbiAgICB2YXIgZW5kS2VlcFdzUHJlZml4ID0gZW5kS2VlcC52YWx1ZS5tYXRjaCgvXlxccyovKVswXTtcbiAgICB2YXIgZGVsZXRpb25Xc1N1ZmZpeCA9IGRlbGV0aW9uLnZhbHVlLm1hdGNoKC9cXHMqJC8pWzBdO1xuICAgIHZhciBvdmVybGFwID0gbWF4aW11bU92ZXJsYXAoZGVsZXRpb25Xc1N1ZmZpeCwgZW5kS2VlcFdzUHJlZml4KTtcbiAgICBkZWxldGlvbi52YWx1ZSA9IHJlbW92ZVN1ZmZpeChkZWxldGlvbi52YWx1ZSwgb3ZlcmxhcCk7XG4gIH0gZWxzZSBpZiAoc3RhcnRLZWVwKSB7XG4gICAgLy8gV2UgYXJlIGF0IHRoZSBFTkQgb2YgdGhlIHRleHQuIFByZXNlcnZlIGFsbCB0aGUgd2hpdGVzcGFjZSBvblxuICAgIC8vIHN0YXJ0S2VlcCwgYW5kIGp1c3QgcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSB0aGUgc3RhcnQgb2YgZGVsZXRpb24gdG9cbiAgICAvLyB0aGUgZXh0ZW50IHRoYXQgaXQgb3ZlcmxhcHMgd2l0aCB0aGUgZW5kIG9mIHN0YXJ0S2VlcC5cbiAgICB2YXIgc3RhcnRLZWVwV3NTdWZmaXggPSBzdGFydEtlZXAudmFsdWUubWF0Y2goL1xccyokLylbMF07XG4gICAgdmFyIGRlbGV0aW9uV3NQcmVmaXggPSBkZWxldGlvbi52YWx1ZS5tYXRjaCgvXlxccyovKVswXTtcbiAgICB2YXIgX292ZXJsYXAgPSBtYXhpbXVtT3ZlcmxhcChzdGFydEtlZXBXc1N1ZmZpeCwgZGVsZXRpb25Xc1ByZWZpeCk7XG4gICAgZGVsZXRpb24udmFsdWUgPSByZW1vdmVQcmVmaXgoZGVsZXRpb24udmFsdWUsIF9vdmVybGFwKTtcbiAgfVxufVxudmFyIHdvcmRXaXRoU3BhY2VEaWZmID0gbmV3IERpZmYoKTtcbndvcmRXaXRoU3BhY2VEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIC8vIFNsaWdodGx5IGRpZmZlcmVudCB0byB0aGUgdG9rZW5pemVJbmNsdWRpbmdXaGl0ZXNwYWNlIHJlZ2V4IHVzZWQgYWJvdmUgaW5cbiAgLy8gdGhhdCB0aGlzIG9uZSB0cmVhdHMgZWFjaCBpbmRpdmlkdWFsIG5ld2xpbmUgYXMgYSBkaXN0aW5jdCB0b2tlbnMsIHJhdGhlclxuICAvLyB0aGFuIG1lcmdpbmcgdGhlbSBpbnRvIG90aGVyIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UuIFRoaXMgd2FzIHJlcXVlc3RlZFxuICAvLyBpbiBodHRwczovL2dpdGh1Yi5jb20va3BkZWNrZXIvanNkaWZmL2lzc3Vlcy8xODAgJlxuICAvLyAgICBodHRwczovL2dpdGh1Yi5jb20va3BkZWNrZXIvanNkaWZmL2lzc3Vlcy8yMTFcbiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChcIihcXFxccj9cXFxcbil8W1wiLmNvbmNhdChleHRlbmRlZFdvcmRDaGFycywgXCJdK3xbXlxcXFxTXFxcXG5cXFxccl0rfFteXCIpLmNvbmNhdChleHRlbmRlZFdvcmRDaGFycywgXCJdXCIpLCAndWcnKTtcbiAgcmV0dXJuIHZhbHVlLm1hdGNoKHJlZ2V4KSB8fCBbXTtcbn07XG5mdW5jdGlvbiBkaWZmV29yZHNXaXRoU3BhY2Uob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHdvcmRXaXRoU3BhY2VEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbnMob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGVmYXVsdHMuY2FsbGJhY2sgPSBvcHRpb25zO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWZhdWx0cztcbn1cblxudmFyIGxpbmVEaWZmID0gbmV3IERpZmYoKTtcbmxpbmVEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnN0cmlwVHJhaWxpbmdDcikge1xuICAgIC8vIHJlbW92ZSBvbmUgXFxyIGJlZm9yZSBcXG4gdG8gbWF0Y2ggR05VIGRpZmYncyAtLXN0cmlwLXRyYWlsaW5nLWNyIGJlaGF2aW9yXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xuICB9XG4gIHZhciByZXRMaW5lcyA9IFtdLFxuICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7XG5cbiAgLy8gSWdub3JlIHRoZSBmaW5hbCBlbXB0eSB0b2tlbiB0aGF0IG9jY3VycyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBhIG5ldyBsaW5lXG4gIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgbGluZXNBbmROZXdsaW5lcy5wb3AoKTtcbiAgfVxuXG4gIC8vIE1lcmdlIHRoZSBjb250ZW50IGFuZCBsaW5lIHNlcGFyYXRvcnMgaW50byBzaW5nbGUgdG9rZW5zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcbiAgICBpZiAoaSAlIDIgJiYgIW9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldExpbmVzLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXRMaW5lcztcbn07XG5saW5lRGlmZi5lcXVhbHMgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIG9wdGlvbnMpIHtcbiAgLy8gSWYgd2UncmUgaWdub3Jpbmcgd2hpdGVzcGFjZSwgd2UgbmVlZCB0byBub3JtYWxpc2UgbGluZXMgYnkgc3RyaXBwaW5nXG4gIC8vIHdoaXRlc3BhY2UgYmVmb3JlIGNoZWNraW5nIGVxdWFsaXR5LiAoVGhpcyBoYXMgYW4gYW5ub3lpbmcgaW50ZXJhY3Rpb25cbiAgLy8gd2l0aCBuZXdsaW5lSXNUb2tlbiB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmc6IGlmIG5ld2xpbmVzIGdldCB0aGVpclxuICAvLyBvd24gdG9rZW4sIHRoZW4gd2UgRE9OJ1Qgd2FudCB0byB0cmltIHRoZSAqbmV3bGluZSogdG9rZW5zIGRvd24gdG8gZW1wdHlcbiAgLy8gc3RyaW5ncywgc2luY2UgdGhpcyB3b3VsZCBjYXVzZSB1cyB0byB0cmVhdCB3aGl0ZXNwYWNlLW9ubHkgbGluZSBjb250ZW50XG4gIC8vIGFzIGVxdWFsIHRvIGEgc2VwYXJhdG9yIGJldHdlZW4gbGluZXMsIHdoaWNoIHdvdWxkIGJlIHdlaXJkIGFuZFxuICAvLyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvciBvZiB0aGUgb3B0aW9ucy4pXG4gIGlmIChvcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICBpZiAoIW9wdGlvbnMubmV3bGluZUlzVG9rZW4gfHwgIWxlZnQuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICBsZWZ0ID0gbGVmdC50cmltKCk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5uZXdsaW5lSXNUb2tlbiB8fCAhcmlnaHQuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICByaWdodCA9IHJpZ2h0LnRyaW0oKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5pZ25vcmVOZXdsaW5lQXRFb2YgJiYgIW9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICBpZiAobGVmdC5lbmRzV2l0aCgnXFxuJykpIHtcbiAgICAgIGxlZnQgPSBsZWZ0LnNsaWNlKDAsIC0xKTtcbiAgICB9XG4gICAgaWYgKHJpZ2h0LmVuZHNXaXRoKCdcXG4nKSkge1xuICAgICAgcmlnaHQgPSByaWdodC5zbGljZSgwLCAtMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBEaWZmLnByb3RvdHlwZS5lcXVhbHMuY2FsbCh0aGlzLCBsZWZ0LCByaWdodCwgb3B0aW9ucyk7XG59O1xuZnVuY3Rpb24gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuXG4vLyBLZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhpcyBpcyBhIHJhdGhlciBhcmJpdHJhcnkgd3JhcHBlciBtZXRob2Rcbi8vIHRoYXQganVzdCBjYWxscyBgZGlmZkxpbmVzYCB3aXRoIGBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlYC4gSXQncyBjb25mdXNpbmcgdG9cbi8vIGhhdmUgdHdvIHdheXMgdG8gZG8gZXhhY3RseSB0aGUgc2FtZSB0aGluZyBpbiB0aGUgQVBJLCBzbyB3ZSBubyBsb25nZXJcbi8vIGRvY3VtZW50IHRoaXMgb25lIChsaWJyYXJ5IHVzZXJzIHNob3VsZCBleHBsaWNpdGx5IHVzZSBgZGlmZkxpbmVzYCB3aXRoXG4vLyBgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZWAgaW5zdGVhZCkgYnV0IHdlIGtlZXAgaXQgYXJvdW5kIHRvIG1haW50YWluXG4vLyBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IHVzZWQgb2xkIHZlcnNpb25zLlxuZnVuY3Rpb24gZGlmZlRyaW1tZWRMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgdmFyIG9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnMoY2FsbGJhY2ssIHtcbiAgICBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG5cbnZhciBzZW50ZW5jZURpZmYgPSBuZXcgRGlmZigpO1xuc2VudGVuY2VEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFxcUy4rP1suIT9dKSg/PVxccyt8JCkvKTtcbn07XG5mdW5jdGlvbiBkaWZmU2VudGVuY2VzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2VudGVuY2VEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcbn1cblxudmFyIGNzc0RpZmYgPSBuZXcgRGlmZigpO1xuY3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhbe306OyxdfFxccyspLyk7XG59O1xuZnVuY3Rpb24gZGlmZkNzcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcbiAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuICB9XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuICAgIHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcbiAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiO1xufVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbnZhciBqc29uRGlmZiA9IG5ldyBEaWZmKCk7XG4vLyBEaXNjcmltaW5hdGUgYmV0d2VlbiB0d28gbGluZXMgb2YgcHJldHR5LXByaW50ZWQsIHNlcmlhbGl6ZWQgSlNPTiB3aGVyZSBvbmUgb2YgdGhlbSBoYXMgYVxuLy8gZGFuZ2xpbmcgY29tbWEgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBUdXJucyBvdXQgaW5jbHVkaW5nIHRoZSBkYW5nbGluZyBjb21tYSB5aWVsZHMgdGhlIG5pY2VzdCBvdXRwdXQ6XG5qc29uRGlmZi51c2VMb25nZXN0VG9rZW4gPSB0cnVlO1xuanNvbkRpZmYudG9rZW5pemUgPSBsaW5lRGlmZi50b2tlbml6ZTtcbmpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5kZWZpbmVkUmVwbGFjZW1lbnQgPSBvcHRpb25zLnVuZGVmaW5lZFJlcGxhY2VtZW50LFxuICAgIF9vcHRpb25zJHN0cmluZ2lmeVJlcCA9IG9wdGlvbnMuc3RyaW5naWZ5UmVwbGFjZXIsXG4gICAgc3RyaW5naWZ5UmVwbGFjZXIgPSBfb3B0aW9ucyRzdHJpbmdpZnlSZXAgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2O1xuICAgIH0gOiBfb3B0aW9ucyRzdHJpbmdpZnlSZXA7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeShjYW5vbmljYWxpemUodmFsdWUsIG51bGwsIG51bGwsIHN0cmluZ2lmeVJlcGxhY2VyKSwgc3RyaW5naWZ5UmVwbGFjZXIsICcgICcpO1xufTtcbmpzb25EaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgb3B0aW9ucykge1xuICByZXR1cm4gRGlmZi5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCBvcHRpb25zKTtcbn07XG5mdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykge1xuICByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgXCJzdGFja1wiIG9mIGl0ZW1zIGJlaW5nIHByb2Nlc3NlZC4gQWNjZXB0cyBhbiBvcHRpb25hbCByZXBsYWNlclxuZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgc3RhY2sgPSBzdGFjayB8fCBbXTtcbiAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG4gIGlmIChyZXBsYWNlcikge1xuICAgIG9iaiA9IHJlcGxhY2VyKGtleSwgb2JqKTtcbiAgfVxuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgIH1cbiAgfVxuICB2YXIgY2Fub25pY2FsaXplZE9iajtcbiAgaWYgKCdbb2JqZWN0IEFycmF5XScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSB7XG4gICAgc3RhY2sucHVzaChvYmopO1xuICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBuZXcgQXJyYXkob2JqLmxlbmd0aCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuICAgIGZvciAoaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSk7XG4gICAgfVxuICAgIHN0YWNrLnBvcCgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG4gIH1cbiAgaWYgKG9iaiAmJiBvYmoudG9KU09OKSB7XG4gICAgb2JqID0gb2JqLnRvSlNPTigpO1xuICB9XG4gIGlmIChfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0ge307XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuICAgIHZhciBzb3J0ZWRLZXlzID0gW10sXG4gICAgICBfa2V5O1xuICAgIGZvciAoX2tleSBpbiBvYmopIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgX2tleSkpIHtcbiAgICAgICAgc29ydGVkS2V5cy5wdXNoKF9rZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgX2tleSA9IHNvcnRlZEtleXNbaV07XG4gICAgICBjYW5vbmljYWxpemVkT2JqW19rZXldID0gY2Fub25pY2FsaXplKG9ialtfa2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBfa2V5KTtcbiAgICB9XG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBjYW5vbmljYWxpemVkT2JqID0gb2JqO1xuICB9XG4gIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xufVxuXG52YXIgYXJyYXlEaWZmID0gbmV3IERpZmYoKTtcbmFycmF5RGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcbn07XG5hcnJheURpZmYuam9pbiA9IGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59O1xuZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGFycmF5RGlmZi5kaWZmKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuaXhUb1dpbihwYXRjaCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gcGF0Y2gubWFwKHVuaXhUb1dpbik7XG4gIH1cbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBwYXRjaCksIHt9LCB7XG4gICAgaHVua3M6IHBhdGNoLmh1bmtzLm1hcChmdW5jdGlvbiAoaHVuaykge1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBodW5rKSwge30sIHtcbiAgICAgICAgbGluZXM6IGh1bmsubGluZXMubWFwKGZ1bmN0aW9uIChsaW5lLCBpKSB7XG4gICAgICAgICAgdmFyIF9odW5rJGxpbmVzO1xuICAgICAgICAgIHJldHVybiBsaW5lLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCBsaW5lLmVuZHNXaXRoKCdcXHInKSB8fCAoX2h1bmskbGluZXMgPSBodW5rLmxpbmVzW2kgKyAxXSkgIT09IG51bGwgJiYgX2h1bmskbGluZXMgIT09IHZvaWQgMCAmJiBfaHVuayRsaW5lcy5zdGFydHNXaXRoKCdcXFxcJykgPyBsaW5lIDogbGluZSArICdcXHInO1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiB3aW5Ub1VuaXgocGF0Y2gpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHBhdGNoLm1hcCh3aW5Ub1VuaXgpO1xuICB9XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGF0Y2gpLCB7fSwge1xuICAgIGh1bmtzOiBwYXRjaC5odW5rcy5tYXAoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgaHVuayksIHt9LCB7XG4gICAgICAgIGxpbmVzOiBodW5rLmxpbmVzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAgIHJldHVybiBsaW5lLmVuZHNXaXRoKCdcXHInKSA/IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUubGVuZ3RoIC0gMSkgOiBsaW5lO1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSlcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRjaCBjb25zaXN0ZW50bHkgdXNlcyBVbml4IGxpbmUgZW5kaW5ncyAob3Igb25seSBpbnZvbHZlcyBvbmUgbGluZSBhbmQgaGFzXG4gKiBubyBsaW5lIGVuZGluZ3MpLlxuICovXG5mdW5jdGlvbiBpc1VuaXgocGF0Y2gpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHBhdGNoID0gW3BhdGNoXTtcbiAgfVxuICByZXR1cm4gIXBhdGNoLnNvbWUoZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4Lmh1bmtzLnNvbWUoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgIHJldHVybiBodW5rLmxpbmVzLnNvbWUoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuICFsaW5lLnN0YXJ0c1dpdGgoJ1xcXFwnKSAmJiBsaW5lLmVuZHNXaXRoKCdcXHInKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGNoIHVzZXMgV2luZG93cyBsaW5lIGVuZGluZ3MgYW5kIG9ubHkgV2luZG93cyBsaW5lIGVuZGluZ3MuXG4gKi9cbmZ1bmN0aW9uIGlzV2luKHBhdGNoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICBwYXRjaCA9IFtwYXRjaF07XG4gIH1cbiAgcmV0dXJuIHBhdGNoLnNvbWUoZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4Lmh1bmtzLnNvbWUoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgIHJldHVybiBodW5rLmxpbmVzLnNvbWUoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUuZW5kc1dpdGgoJ1xccicpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pICYmIHBhdGNoLmV2ZXJ5KGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBpbmRleC5odW5rcy5ldmVyeShmdW5jdGlvbiAoaHVuaykge1xuICAgICAgcmV0dXJuIGh1bmsubGluZXMuZXZlcnkoZnVuY3Rpb24gKGxpbmUsIGkpIHtcbiAgICAgICAgdmFyIF9odW5rJGxpbmVzMjtcbiAgICAgICAgcmV0dXJuIGxpbmUuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IGxpbmUuZW5kc1dpdGgoJ1xccicpIHx8ICgoX2h1bmskbGluZXMyID0gaHVuay5saW5lc1tpICsgMV0pID09PSBudWxsIHx8IF9odW5rJGxpbmVzMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2h1bmskbGluZXMyLnN0YXJ0c1dpdGgoJ1xcXFwnKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0Y2godW5pRGlmZikge1xuICB2YXIgZGlmZnN0ciA9IHVuaURpZmYuc3BsaXQoL1xcbi8pLFxuICAgIGxpc3QgPSBbXSxcbiAgICBpID0gMDtcbiAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICB2YXIgaW5kZXggPSB7fTtcbiAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG4gICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIHZhciBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgIGlmICgvXihcXC1cXC1cXC18XFwrXFwrXFwrfEBAKVxccy8udGVzdChsaW5lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRGlmZiBpbmRleFxuICAgICAgdmFyIGhlYWRlciA9IC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLy5leGVjKGxpbmUpO1xuICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICBpbmRleC5pbmRleCA9IGhlYWRlclsxXTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuICAgIC8vIFBhcnNlIGh1bmtzXG4gICAgaW5kZXguaHVua3MgPSBbXTtcbiAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICB2YXIgX2xpbmUgPSBkaWZmc3RyW2ldO1xuICAgICAgaWYgKC9eKEluZGV4Olxcc3xkaWZmXFxzfFxcLVxcLVxcLVxcc3xcXCtcXCtcXCtcXHN8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSkvLnRlc3QoX2xpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgvXkBALy50ZXN0KF9saW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAoX2xpbmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlcyB0aGUgLS0tIGFuZCArKysgaGVhZGVycywgaWYgbm9uZSBhcmUgZm91bmQsIG5vIGxpbmVzXG4gIC8vIGFyZSBjb25zdW1lZC5cbiAgZnVuY3Rpb24gcGFyc2VGaWxlSGVhZGVyKGluZGV4KSB7XG4gICAgdmFyIGZpbGVIZWFkZXIgPSAvXigtLS18XFwrXFwrXFwrKVxccysoLiopXFxyPyQvLmV4ZWMoZGlmZnN0cltpXSk7XG4gICAgaWYgKGZpbGVIZWFkZXIpIHtcbiAgICAgIHZhciBrZXlQcmVmaXggPSBmaWxlSGVhZGVyWzFdID09PSAnLS0tJyA/ICdvbGQnIDogJ25ldyc7XG4gICAgICB2YXIgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgdmFyIGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuICAgICAgaWYgKC9eXCIuKlwiJC8udGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG4gICAgICB9XG4gICAgICBpbmRleFtrZXlQcmVmaXggKyAnRmlsZU5hbWUnXSA9IGZpbGVOYW1lO1xuICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gKGRhdGFbMV0gfHwgJycpLnRyaW0oKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgYSBodW5rXG4gIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBodW5rLlxuICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG4gICAgdmFyIGNodW5rSGVhZGVySW5kZXggPSBpLFxuICAgICAgY2h1bmtIZWFkZXJMaW5lID0gZGlmZnN0cltpKytdLFxuICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG4gICAgdmFyIGh1bmsgPSB7XG4gICAgICBvbGRTdGFydDogK2NodW5rSGVhZGVyWzFdLFxuICAgICAgb2xkTGluZXM6IHR5cGVvZiBjaHVua0hlYWRlclsyXSA9PT0gJ3VuZGVmaW5lZCcgPyAxIDogK2NodW5rSGVhZGVyWzJdLFxuICAgICAgbmV3U3RhcnQ6ICtjaHVua0hlYWRlclszXSxcbiAgICAgIG5ld0xpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbNF0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlcls0XSxcbiAgICAgIGxpbmVzOiBbXVxuICAgIH07XG5cbiAgICAvLyBVbmlmaWVkIERpZmYgRm9ybWF0IHF1aXJrOiBJZiB0aGUgY2h1bmsgc2l6ZSBpcyAwLFxuICAgIC8vIHRoZSBmaXJzdCBudW1iZXIgaXMgb25lIGxvd2VyIHRoYW4gb25lIHdvdWxkIGV4cGVjdC5cbiAgICAvLyBodHRwczovL3d3dy5hcnRpbWEuY29tL3dlYmxvZ3Mvdmlld3Bvc3QuanNwP3RocmVhZD0xNjQyOTNcbiAgICBpZiAoaHVuay5vbGRMaW5lcyA9PT0gMCkge1xuICAgICAgaHVuay5vbGRTdGFydCArPSAxO1xuICAgIH1cbiAgICBpZiAoaHVuay5uZXdMaW5lcyA9PT0gMCkge1xuICAgICAgaHVuay5uZXdTdGFydCArPSAxO1xuICAgIH1cbiAgICB2YXIgYWRkQ291bnQgPSAwLFxuICAgICAgcmVtb3ZlQ291bnQgPSAwO1xuICAgIGZvciAoOyBpIDwgZGlmZnN0ci5sZW5ndGggJiYgKHJlbW92ZUNvdW50IDwgaHVuay5vbGRMaW5lcyB8fCBhZGRDb3VudCA8IGh1bmsubmV3TGluZXMgfHwgKF9kaWZmc3RyJGkgPSBkaWZmc3RyW2ldKSAhPT0gbnVsbCAmJiBfZGlmZnN0ciRpICE9PSB2b2lkIDAgJiYgX2RpZmZzdHIkaS5zdGFydHNXaXRoKCdcXFxcJykpOyBpKyspIHtcbiAgICAgIHZhciBfZGlmZnN0ciRpO1xuICAgICAgdmFyIG9wZXJhdGlvbiA9IGRpZmZzdHJbaV0ubGVuZ3RoID09IDAgJiYgaSAhPSBkaWZmc3RyLmxlbmd0aCAtIDEgPyAnICcgOiBkaWZmc3RyW2ldWzBdO1xuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnIHx8IG9wZXJhdGlvbiA9PT0gJy0nIHx8IG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGh1bmsubGluZXMucHVzaChkaWZmc3RyW2ldKTtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkh1bmsgYXQgbGluZSBcIi5jb25jYXQoY2h1bmtIZWFkZXJJbmRleCArIDEsIFwiIGNvbnRhaW5lZCBpbnZhbGlkIGxpbmUgXCIpLmNvbmNhdChkaWZmc3RyW2ldKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSBlbXB0eSBibG9jayBjb3VudCBjYXNlXG4gICAgaWYgKCFhZGRDb3VudCAmJiBodW5rLm5ld0xpbmVzID09PSAxKSB7XG4gICAgICBodW5rLm5ld0xpbmVzID0gMDtcbiAgICB9XG4gICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG4gICAgICBodW5rLm9sZExpbmVzID0gMDtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIHNhbml0eSBjaGVja2luZ1xuICAgIGlmIChhZGRDb3VudCAhPT0gaHVuay5uZXdMaW5lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVDb3VudCAhPT0gaHVuay5vbGRMaW5lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIGh1bms7XG4gIH1cbiAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgIHBhcnNlSW5kZXgoKTtcbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cblxuLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmZ1bmN0aW9uIGRpc3RhbmNlSXRlcmF0b3IgKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIHZhciB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgYmFja3dhcmRFeGhhdXN0ZWQgPSBmYWxzZSxcbiAgICBmb3J3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG4gICAgbG9jYWxPZmZzZXQgPSAxO1xuICByZXR1cm4gZnVuY3Rpb24gaXRlcmF0b3IoKSB7XG4gICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICBpZiAoYmFja3dhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgbG9jYWxPZmZzZXQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmV5b25kIHRleHQgbGVuZ3RoLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG4gICAgICAvLyBhZnRlciBvZmZzZXQgbG9jYXRpb24gKG9yIGRlc2lyZWQgbG9jYXRpb24gb24gZmlyc3QgaXRlcmF0aW9uKVxuICAgICAgaWYgKHN0YXJ0ICsgbG9jYWxPZmZzZXQgPD0gbWF4TGluZSkge1xuICAgICAgICByZXR1cm4gc3RhcnQgKyBsb2NhbE9mZnNldDtcbiAgICAgIH1cbiAgICAgIGZvcndhcmRFeGhhdXN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWJhY2t3YXJkRXhoYXVzdGVkKSB7XG4gICAgICBpZiAoIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJlZm9yZSB0ZXh0IGJlZ2lubmluZywgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuICAgICAgLy8gYmVmb3JlIG9mZnNldCBsb2NhdGlvblxuICAgICAgaWYgKG1pbkxpbmUgPD0gc3RhcnQgLSBsb2NhbE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc3RhcnQgLSBsb2NhbE9mZnNldCsrO1xuICAgICAgfVxuICAgICAgYmFja3dhcmRFeGhhdXN0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XG4gICAgfVxuXG4gICAgLy8gV2UgdHJpZWQgdG8gZml0IGh1bmsgYmVmb3JlIHRleHQgYmVnaW5uaW5nIGFuZCBiZXlvbmQgdGV4dCBsZW5ndGgsIHRoZW5cbiAgICAvLyBodW5rIGNhbid0IGZpdCBvbiB0aGUgdGV4dC4gUmV0dXJuIHVuZGVmaW5lZFxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseVBhdGNoKHNvdXJjZSwgdW5pRGlmZikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh1bmlEaWZmKSkge1xuICAgIGlmICh1bmlEaWZmLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXBwbHlQYXRjaCBvbmx5IHdvcmtzIHdpdGggYSBzaW5nbGUgaW5wdXQuJyk7XG4gICAgfVxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG4gIGlmIChvcHRpb25zLmF1dG9Db252ZXJ0TGluZUVuZGluZ3MgfHwgb3B0aW9ucy5hdXRvQ29udmVydExpbmVFbmRpbmdzID09IG51bGwpIHtcbiAgICBpZiAoaGFzT25seVdpbkxpbmVFbmRpbmdzKHNvdXJjZSkgJiYgaXNVbml4KHVuaURpZmYpKSB7XG4gICAgICB1bmlEaWZmID0gdW5peFRvV2luKHVuaURpZmYpO1xuICAgIH0gZWxzZSBpZiAoaGFzT25seVVuaXhMaW5lRW5kaW5ncyhzb3VyY2UpICYmIGlzV2luKHVuaURpZmYpKSB7XG4gICAgICB1bmlEaWZmID0gd2luVG9Vbml4KHVuaURpZmYpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpLFxuICAgIGh1bmtzID0gdW5pRGlmZi5odW5rcyxcbiAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgZnVuY3Rpb24gKGxpbmVOdW1iZXIsIGxpbmUsIG9wZXJhdGlvbiwgcGF0Y2hDb250ZW50KSB7XG4gICAgICByZXR1cm4gbGluZSA9PT0gcGF0Y2hDb250ZW50O1xuICAgIH0sXG4gICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgIG1pbkxpbmUgPSAwO1xuICBpZiAoZnV6ekZhY3RvciA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIoZnV6ekZhY3RvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1enpGYWN0b3IgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cblxuICAvLyBTcGVjaWFsIGNhc2UgZm9yIGVtcHR5IHBhdGNoLlxuICBpZiAoIWh1bmtzLmxlbmd0aCkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBCZWZvcmUgYW55dGhpbmcgZWxzZSwgaGFuZGxlIEVPRk5MIGluc2VydGlvbi9yZW1vdmFsLiBJZiB0aGUgcGF0Y2ggdGVsbHMgdXMgdG8gbWFrZSBhIGNoYW5nZVxuICAvLyB0byB0aGUgRU9GTkwgdGhhdCBpcyByZWR1bmRhbnQvaW1wb3NzaWJsZSAtIGkuZS4gdG8gcmVtb3ZlIGEgbmV3bGluZSB0aGF0J3Mgbm90IHRoZXJlLCBvciBhZGQgYVxuICAvLyBuZXdsaW5lIHRoYXQgYWxyZWFkeSBleGlzdHMgLSB0aGVuIHdlIGVpdGhlciByZXR1cm4gZmFsc2UgYW5kIGZhaWwgdG8gYXBwbHkgdGhlIHBhdGNoIChpZlxuICAvLyBmdXp6RmFjdG9yIGlzIDApIG9yIHNpbXBseSBpZ25vcmUgdGhlIHByb2JsZW0gYW5kIGRvIG5vdGhpbmcgKGlmIGZ1enpGYWN0b3IgaXMgPjApLlxuICAvLyBJZiB3ZSBkbyBuZWVkIHRvIHJlbW92ZS9hZGQgYSBuZXdsaW5lIGF0IEVPRiwgdGhpcyB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgZmluYWwgaHVuazpcbiAgdmFyIHByZXZMaW5lID0gJycsXG4gICAgcmVtb3ZlRU9GTkwgPSBmYWxzZSxcbiAgICBhZGRFT0ZOTCA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGh1bmtzW2h1bmtzLmxlbmd0aCAtIDFdLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxpbmUgPSBodW5rc1todW5rcy5sZW5ndGggLSAxXS5saW5lc1tpXTtcbiAgICBpZiAobGluZVswXSA9PSAnXFxcXCcpIHtcbiAgICAgIGlmIChwcmV2TGluZVswXSA9PSAnKycpIHtcbiAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwcmV2TGluZVswXSA9PSAnLScpIHtcbiAgICAgICAgYWRkRU9GTkwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2TGluZSA9IGxpbmU7XG4gIH1cbiAgaWYgKHJlbW92ZUVPRk5MKSB7XG4gICAgaWYgKGFkZEVPRk5MKSB7XG4gICAgICAvLyBUaGlzIG1lYW5zIHRoZSBmaW5hbCBsaW5lIGdldHMgY2hhbmdlZCBidXQgZG9lc24ndCBoYXZlIGEgdHJhaWxpbmcgbmV3bGluZSBpbiBlaXRoZXIgdGhlXG4gICAgICAvLyBvcmlnaW5hbCBvciBwYXRjaGVkIHZlcnNpb24uIEluIHRoYXQgY2FzZSwgd2UgZG8gbm90aGluZyBpZiBmdXp6RmFjdG9yID4gMCwgYW5kIGlmXG4gICAgICAvLyBmdXp6RmFjdG9yIGlzIDAsIHdlIHNpbXBseSB2YWxpZGF0ZSB0aGF0IHRoZSBzb3VyY2UgZmlsZSBoYXMgbm8gdHJhaWxpbmcgbmV3bGluZS5cbiAgICAgIGlmICghZnV6ekZhY3RvciAmJiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PSAnJykge1xuICAgICAgbGluZXMucG9wKCk7XG4gICAgfSBlbHNlIGlmICghZnV6ekZhY3Rvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhZGRFT0ZOTCkge1xuICAgIGlmIChsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSAhPSAnJykge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfSBlbHNlIGlmICghZnV6ekZhY3Rvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgY2FuIGJlIG1hZGUgdG8gZml0IGF0IHRoZSBwcm92aWRlZCBsb2NhdGlvbiB3aXRoIGF0IG1vc3QgYG1heEVycm9yc2BcbiAgICogaW5zZXJ0aW9ucywgc3Vic3RpdHV0aW9ucywgb3IgZGVsZXRpb25zLCB3aGlsZSBlbnN1cmluZyBhbHNvIHRoYXQ6XG4gICAqIC0gbGluZXMgZGVsZXRlZCBpbiB0aGUgaHVuayBtYXRjaCBleGFjdGx5LCBhbmRcbiAgICogLSB3aGVyZXZlciBhbiBpbnNlcnRpb24gb3BlcmF0aW9uIG9yIGJsb2NrIG9mIGluc2VydGlvbiBvcGVyYXRpb25zIGFwcGVhcnMgaW4gdGhlIGh1bmssIHRoZVxuICAgKiAgIGltbWVkaWF0ZWx5IHByZWNlZGluZyBhbmQgZm9sbG93aW5nIGxpbmVzIG9mIGNvbnRleHQgbWF0Y2ggZXhhY3RseVxuICAgKlxuICAgKiBgdG9Qb3NgIHNob3VsZCBiZSBzZXQgc3VjaCB0aGF0IGxpbmVzW3RvUG9zXSBpcyBtZWFudCB0byBtYXRjaCBodW5rTGluZXNbMF0uXG4gICAqXG4gICAqIElmIHRoZSBodW5rIGNhbiBiZSBhcHBsaWVkLCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYG9sZExpbmVMYXN0SWAgYW5kXG4gICAqIGByZXBsYWNlbWVudExpbmVzYC4gT3RoZXJ3aXNlLCByZXR1cm5zIG51bGwuXG4gICAqL1xuICBmdW5jdGlvbiBhcHBseUh1bmsoaHVua0xpbmVzLCB0b1BvcywgbWF4RXJyb3JzKSB7XG4gICAgdmFyIGh1bmtMaW5lc0kgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG4gICAgdmFyIGxhc3RDb250ZXh0TGluZU1hdGNoZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gICAgdmFyIHBhdGNoZWRMaW5lcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogW107XG4gICAgdmFyIHBhdGNoZWRMaW5lc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ICYmIGFyZ3VtZW50c1s2XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzZdIDogMDtcbiAgICB2YXIgbkNvbnNlY3V0aXZlT2xkQ29udGV4dExpbmVzID0gMDtcbiAgICB2YXIgbmV4dENvbnRleHRMaW5lTXVzdE1hdGNoID0gZmFsc2U7XG4gICAgZm9yICg7IGh1bmtMaW5lc0kgPCBodW5rTGluZXMubGVuZ3RoOyBodW5rTGluZXNJKyspIHtcbiAgICAgIHZhciBodW5rTGluZSA9IGh1bmtMaW5lc1todW5rTGluZXNJXSxcbiAgICAgICAgb3BlcmF0aW9uID0gaHVua0xpbmUubGVuZ3RoID4gMCA/IGh1bmtMaW5lWzBdIDogJyAnLFxuICAgICAgICBjb250ZW50ID0gaHVua0xpbmUubGVuZ3RoID4gMCA/IGh1bmtMaW5lLnN1YnN0cigxKSA6IGh1bmtMaW5lO1xuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGlmIChjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIHRvUG9zKys7XG4gICAgICAgICAgbkNvbnNlY3V0aXZlT2xkQ29udGV4dExpbmVzID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW1heEVycm9ycyB8fCBsaW5lc1t0b1Bvc10gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGNoZWRMaW5lc1twYXRjaGVkTGluZXNMZW5ndGhdID0gbGluZXNbdG9Qb3NdO1xuICAgICAgICAgIHJldHVybiBhcHBseUh1bmsoaHVua0xpbmVzLCB0b1BvcyArIDEsIG1heEVycm9ycyAtIDEsIGh1bmtMaW5lc0ksIGZhbHNlLCBwYXRjaGVkTGluZXMsIHBhdGNoZWRMaW5lc0xlbmd0aCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgaWYgKCFsYXN0Q29udGV4dExpbmVNYXRjaGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcGF0Y2hlZExpbmVzW3BhdGNoZWRMaW5lc0xlbmd0aF0gPSBjb250ZW50O1xuICAgICAgICBwYXRjaGVkTGluZXNMZW5ndGgrKztcbiAgICAgICAgbkNvbnNlY3V0aXZlT2xkQ29udGV4dExpbmVzID0gMDtcbiAgICAgICAgbmV4dENvbnRleHRMaW5lTXVzdE1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICBuQ29uc2VjdXRpdmVPbGRDb250ZXh0TGluZXMrKztcbiAgICAgICAgcGF0Y2hlZExpbmVzW3BhdGNoZWRMaW5lc0xlbmd0aF0gPSBsaW5lc1t0b1Bvc107XG4gICAgICAgIGlmIChjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIHBhdGNoZWRMaW5lc0xlbmd0aCsrO1xuICAgICAgICAgIGxhc3RDb250ZXh0TGluZU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgIG5leHRDb250ZXh0TGluZU11c3RNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIHRvUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5leHRDb250ZXh0TGluZU11c3RNYXRjaCB8fCAhbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDb25zaWRlciAzIHBvc3NpYmlsaXRpZXMgaW4gc2VxdWVuY2U6XG4gICAgICAgICAgLy8gMS4gbGluZXMgY29udGFpbnMgYSAqc3Vic3RpdHV0aW9uKiBub3QgaW5jbHVkZWQgaW4gdGhlIHBhdGNoIGNvbnRleHQsIG9yXG4gICAgICAgICAgLy8gMi4gbGluZXMgY29udGFpbnMgYW4gKmluc2VydGlvbiogbm90IGluY2x1ZGVkIGluIHRoZSBwYXRjaCBjb250ZXh0LCBvclxuICAgICAgICAgIC8vIDMuIGxpbmVzIGNvbnRhaW5zIGEgKmRlbGV0aW9uKiBub3QgaW5jbHVkZWQgaW4gdGhlIHBhdGNoIGNvbnRleHRcbiAgICAgICAgICAvLyBUaGUgZmlyc3QgdHdvIG9wdGlvbnMgYXJlIG9mIGNvdXJzZSBvbmx5IHBvc3NpYmxlIGlmIHRoZSBsaW5lIGZyb20gbGluZXMgaXMgbm9uLW51bGwgLVxuICAgICAgICAgIC8vIGkuZS4gb25seSBvcHRpb24gMyBpcyBwb3NzaWJsZSBpZiB3ZSd2ZSBvdmVycnVuIHRoZSBlbmQgb2YgdGhlIG9sZCBmaWxlLlxuICAgICAgICAgIHJldHVybiBsaW5lc1t0b1Bvc10gJiYgKGFwcGx5SHVuayhodW5rTGluZXMsIHRvUG9zICsgMSwgbWF4RXJyb3JzIC0gMSwgaHVua0xpbmVzSSArIDEsIGZhbHNlLCBwYXRjaGVkTGluZXMsIHBhdGNoZWRMaW5lc0xlbmd0aCArIDEpIHx8IGFwcGx5SHVuayhodW5rTGluZXMsIHRvUG9zICsgMSwgbWF4RXJyb3JzIC0gMSwgaHVua0xpbmVzSSwgZmFsc2UsIHBhdGNoZWRMaW5lcywgcGF0Y2hlZExpbmVzTGVuZ3RoICsgMSkpIHx8IGFwcGx5SHVuayhodW5rTGluZXMsIHRvUG9zLCBtYXhFcnJvcnMgLSAxLCBodW5rTGluZXNJICsgMSwgZmFsc2UsIHBhdGNoZWRMaW5lcywgcGF0Y2hlZExpbmVzTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJlZm9yZSByZXR1cm5pbmcsIHRyaW0gYW55IHVubW9kaWZpZWQgY29udGV4dCBsaW5lcyBvZmYgdGhlIGVuZCBvZiBwYXRjaGVkTGluZXMgYW5kIHJlZHVjZVxuICAgIC8vIHRvUG9zIChhbmQgdGh1cyBvbGRMaW5lTGFzdEkpIGFjY29yZGluZ2x5LiBUaGlzIGFsbG93cyBsYXRlciBodW5rcyB0byBiZSBhcHBsaWVkIHRvIGEgcmVnaW9uXG4gICAgLy8gdGhhdCBzdGFydHMgaW4gdGhpcyBodW5rJ3MgdHJhaWxpbmcgY29udGV4dC5cbiAgICBwYXRjaGVkTGluZXNMZW5ndGggLT0gbkNvbnNlY3V0aXZlT2xkQ29udGV4dExpbmVzO1xuICAgIHRvUG9zIC09IG5Db25zZWN1dGl2ZU9sZENvbnRleHRMaW5lcztcbiAgICBwYXRjaGVkTGluZXMubGVuZ3RoID0gcGF0Y2hlZExpbmVzTGVuZ3RoO1xuICAgIHJldHVybiB7XG4gICAgICBwYXRjaGVkTGluZXM6IHBhdGNoZWRMaW5lcyxcbiAgICAgIG9sZExpbmVMYXN0STogdG9Qb3MgLSAxXG4gICAgfTtcbiAgfVxuICB2YXIgcmVzdWx0TGluZXMgPSBbXTtcblxuICAvLyBTZWFyY2ggYmVzdCBmaXQgb2Zmc2V0cyBmb3IgZWFjaCBodW5rIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBvbmVzXG4gIHZhciBwcmV2SHVua09mZnNldCA9IDA7XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBodW5rcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgaHVuayA9IGh1bmtzW19pXTtcbiAgICB2YXIgaHVua1Jlc3VsdCA9IHZvaWQgMDtcbiAgICB2YXIgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMgKyBmdXp6RmFjdG9yO1xuICAgIHZhciB0b1BvcyA9IHZvaWQgMDtcbiAgICBmb3IgKHZhciBtYXhFcnJvcnMgPSAwOyBtYXhFcnJvcnMgPD0gZnV6ekZhY3RvcjsgbWF4RXJyb3JzKyspIHtcbiAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIHByZXZIdW5rT2Zmc2V0IC0gMTtcbiAgICAgIHZhciBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuICAgICAgZm9yICg7IHRvUG9zICE9PSB1bmRlZmluZWQ7IHRvUG9zID0gaXRlcmF0b3IoKSkge1xuICAgICAgICBodW5rUmVzdWx0ID0gYXBwbHlIdW5rKGh1bmsubGluZXMsIHRvUG9zLCBtYXhFcnJvcnMpO1xuICAgICAgICBpZiAoaHVua1Jlc3VsdCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaHVua1Jlc3VsdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFodW5rUmVzdWx0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ29weSBldmVyeXRoaW5nIGZyb20gdGhlIGVuZCBvZiB3aGVyZSB3ZSBhcHBsaWVkIHRoZSBsYXN0IGh1bmsgdG8gdGhlIHN0YXJ0IG9mIHRoaXMgaHVua1xuICAgIGZvciAodmFyIF9pMiA9IG1pbkxpbmU7IF9pMiA8IHRvUG9zOyBfaTIrKykge1xuICAgICAgcmVzdWx0TGluZXMucHVzaChsaW5lc1tfaTJdKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGxpbmVzIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIHRoZSBodW5rOlxuICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGh1bmtSZXN1bHQucGF0Y2hlZExpbmVzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIHZhciBfbGluZSA9IGh1bmtSZXN1bHQucGF0Y2hlZExpbmVzW19pM107XG4gICAgICByZXN1bHRMaW5lcy5wdXNoKF9saW5lKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgbG93ZXIgdGV4dCBsaW1pdCB0byBlbmQgb2YgdGhlIGN1cnJlbnQgaHVuaywgc28gbmV4dCBvbmVzIGRvbid0IHRyeVxuICAgIC8vIHRvIGZpdCBvdmVyIGFscmVhZHkgcGF0Y2hlZCB0ZXh0XG4gICAgbWluTGluZSA9IGh1bmtSZXN1bHQub2xkTGluZUxhc3RJICsgMTtcblxuICAgIC8vIE5vdGUgdGhlIG9mZnNldCBiZXR3ZWVuIHdoZXJlIHRoZSBwYXRjaCBzYWlkIHRoZSBodW5rIHNob3VsZCd2ZSBhcHBsaWVkIGFuZCB3aGVyZSB3ZVxuICAgIC8vIGFwcGxpZWQgaXQsIHNvIHdlIGNhbiBhZGp1c3QgZnV0dXJlIGh1bmtzIGFjY29yZGluZ2x5OlxuICAgIHByZXZIdW5rT2Zmc2V0ID0gdG9Qb3MgKyAxIC0gaHVuay5vbGRTdGFydDtcbiAgfVxuXG4gIC8vIENvcHkgb3ZlciB0aGUgcmVzdCBvZiB0aGUgbGluZXMgZnJvbSB0aGUgb2xkIHRleHRcbiAgZm9yICh2YXIgX2k0ID0gbWluTGluZTsgX2k0IDwgbGluZXMubGVuZ3RoOyBfaTQrKykge1xuICAgIHJlc3VsdExpbmVzLnB1c2gobGluZXNbX2k0XSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdExpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBXcmFwcGVyIHRoYXQgc3VwcG9ydHMgbXVsdGlwbGUgZmlsZSBwYXRjaGVzIHZpYSBjYWxsYmFja3MuXG5mdW5jdGlvbiBhcHBseVBhdGNoZXModW5pRGlmZiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHVuaURpZmYgPT09ICdzdHJpbmcnKSB7XG4gICAgdW5pRGlmZiA9IHBhcnNlUGF0Y2godW5pRGlmZik7XG4gIH1cbiAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG4gIGZ1bmN0aW9uIHByb2Nlc3NJbmRleCgpIHtcbiAgICB2YXIgaW5kZXggPSB1bmlEaWZmW2N1cnJlbnRJbmRleCsrXTtcbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZSgpO1xuICAgIH1cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICB9XG4gICAgICB2YXIgdXBkYXRlZENvbnRlbnQgPSBhcHBseVBhdGNoKGRhdGEsIGluZGV4LCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMucGF0Y2hlZChpbmRleCwgdXBkYXRlZENvbnRlbnQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0luZGV4KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBwcm9jZXNzSW5kZXgoKTtcbn1cblxuZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgY2FsbGJhY2s6IG9wdGlvbnNcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cbiAgaWYgKG9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld2xpbmVJc1Rva2VuIG1heSBub3QgYmUgdXNlZCB3aXRoIHBhdGNoLWdlbmVyYXRpb24gZnVuY3Rpb25zLCBvbmx5IHdpdGggZGlmZmluZyBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoIW9wdGlvbnMuY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZGlmZkxpbmVzUmVzdWx0VG9QYXRjaChkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX2NhbGxiYWNrID0gX29wdGlvbnMuY2FsbGJhY2s7XG4gICAgZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soZGlmZikge1xuICAgICAgICB2YXIgcGF0Y2ggPSBkaWZmTGluZXNSZXN1bHRUb1BhdGNoKGRpZmYpO1xuICAgICAgICBfY2FsbGJhY2socGF0Y2gpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuICBmdW5jdGlvbiBkaWZmTGluZXNSZXN1bHRUb1BhdGNoKGRpZmYpIHtcbiAgICAvLyBTVEVQIDE6IEJ1aWxkIHVwIHRoZSBwYXRjaCB3aXRoIG5vIFwiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVwiIGxpbmVzIGFuZCB3aXRoIHRoZSBhcnJheXNcbiAgICAvLyAgICAgICAgIG9mIGxpbmVzIGNvbnRhaW5pbmcgdHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXJzLiBXZSdsbCB0aWR5IHVwIGxhdGVyLi4uXG5cbiAgICBpZiAoIWRpZmYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGlmZi5wdXNoKHtcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGxpbmVzOiBbXVxuICAgIH0pOyAvLyBBcHBlbmQgYW4gZW1wdHkgdmFsdWUgdG8gbWFrZSBjbGVhbnVwIGVhc2llclxuXG4gICAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gJyAnICsgZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGh1bmtzID0gW107XG4gICAgdmFyIG9sZFJhbmdlU3RhcnQgPSAwLFxuICAgICAgbmV3UmFuZ2VTdGFydCA9IDAsXG4gICAgICBjdXJSYW5nZSA9IFtdLFxuICAgICAgb2xkTGluZSA9IDEsXG4gICAgICBuZXdMaW5lID0gMTtcbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZGlmZltpXSxcbiAgICAgICAgbGluZXMgPSBjdXJyZW50LmxpbmVzIHx8IHNwbGl0TGluZXMoY3VycmVudC52YWx1ZSk7XG4gICAgICBjdXJyZW50LmxpbmVzID0gbGluZXM7XG4gICAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcbiAgICAgICAgdmFyIF9jdXJSYW5nZTtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgICAgaWYgKCFvbGRSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgdmFyIHByZXYgPSBkaWZmW2kgLSAxXTtcbiAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gb2xkTGluZTtcbiAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcbiAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgY3VyUmFuZ2UgPSBvcHRpb25zLmNvbnRleHQgPiAwID8gY29udGV4dExpbmVzKHByZXYubGluZXMuc2xpY2UoLW9wdGlvbnMuY29udGV4dCkpIDogW107XG4gICAgICAgICAgICBvbGRSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcbiAgICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgICAoX2N1clJhbmdlID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlLCBfdG9Db25zdW1hYmxlQXJyYXkobGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgICAgfSkpKTtcblxuICAgICAgICAvLyBUcmFjayB0aGUgdXBkYXRlZCBmaWxlIHBvc2l0aW9uXG4gICAgICAgIGlmIChjdXJyZW50LmFkZGVkKSB7XG4gICAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElkZW50aWNhbCBjb250ZXh0IGxpbmVzLiBUcmFjayBsaW5lIGNoYW5nZXNcbiAgICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAvLyBDbG9zZSBvdXQgYW55IGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IChvciBqb2luIG92ZXJsYXBwaW5nKVxuICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0ICogMiAmJiBpIDwgZGlmZi5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgICB2YXIgX2N1clJhbmdlMjtcbiAgICAgICAgICAgIC8vIE92ZXJsYXBwaW5nXG4gICAgICAgICAgICAoX2N1clJhbmdlMiA9IGN1clJhbmdlKS5wdXNoLmFwcGx5KF9jdXJSYW5nZTIsIF90b0NvbnN1bWFibGVBcnJheShjb250ZXh0TGluZXMobGluZXMpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBfY3VyUmFuZ2UzO1xuICAgICAgICAgICAgLy8gZW5kIHRoZSByYW5nZSBhbmQgb3V0cHV0XG4gICAgICAgICAgICB2YXIgY29udGV4dFNpemUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIG9wdGlvbnMuY29udGV4dCk7XG4gICAgICAgICAgICAoX2N1clJhbmdlMyA9IGN1clJhbmdlKS5wdXNoLmFwcGx5KF9jdXJSYW5nZTMsIF90b0NvbnN1bWFibGVBcnJheShjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSkpO1xuICAgICAgICAgICAgdmFyIF9odW5rID0ge1xuICAgICAgICAgICAgICBvbGRTdGFydDogb2xkUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgb2xkTGluZXM6IG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG4gICAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgICBuZXdMaW5lczogbmV3TGluZSAtIG5ld1JhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcbiAgICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHVua3MucHVzaChfaHVuayk7XG4gICAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgICAgY3VyUmFuZ2UgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfbG9vcCgpO1xuICAgIH1cblxuICAgIC8vIFN0ZXAgMjogZWxpbWluYXRlIHRoZSB0cmFpbGluZyBgXFxuYCBmcm9tIGVhY2ggbGluZSBvZiBlYWNoIGh1bmssIGFuZCwgd2hlcmUgbmVlZGVkLCBhZGRcbiAgICAvLyAgICAgICAgIFwiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVwiLlxuICAgIGZvciAodmFyIF9pID0gMCwgX2h1bmtzID0gaHVua3M7IF9pIDwgX2h1bmtzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGh1bmsgPSBfaHVua3NbX2ldO1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgaHVuay5saW5lcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIGlmIChodW5rLmxpbmVzW19pMl0uZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgICAgICAgaHVuay5saW5lc1tfaTJdID0gaHVuay5saW5lc1tfaTJdLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodW5rLmxpbmVzLnNwbGljZShfaTIgKyAxLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgX2kyKys7IC8vIFNraXAgdGhlIGxpbmUgd2UganVzdCBhZGRlZCwgdGhlbiBjb250aW51ZSBpdGVyYXRpbmdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb2xkRmlsZU5hbWU6IG9sZEZpbGVOYW1lLFxuICAgICAgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgICAgb2xkSGVhZGVyOiBvbGRIZWFkZXIsXG4gICAgICBuZXdIZWFkZXI6IG5ld0hlYWRlcixcbiAgICAgIGh1bmtzOiBodW5rc1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGZvcm1hdFBhdGNoKGRpZmYpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZikpIHtcbiAgICByZXR1cm4gZGlmZi5tYXAoZm9ybWF0UGF0Y2gpLmpvaW4oJ1xcbicpO1xuICB9XG4gIHZhciByZXQgPSBbXTtcbiAgaWYgKGRpZmYub2xkRmlsZU5hbWUgPT0gZGlmZi5uZXdGaWxlTmFtZSkge1xuICAgIHJldC5wdXNoKCdJbmRleDogJyArIGRpZmYub2xkRmlsZU5hbWUpO1xuICB9XG4gIHJldC5wdXNoKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gIHJldC5wdXNoKCctLS0gJyArIGRpZmYub2xkRmlsZU5hbWUgKyAodHlwZW9mIGRpZmYub2xkSGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm9sZEhlYWRlcikpO1xuICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmLmh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0IC09IDE7XG4gICAgfVxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuICAgIHJldC5wdXNoKCdAQCAtJyArIGh1bmsub2xkU3RhcnQgKyAnLCcgKyBodW5rLm9sZExpbmVzICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzICsgJyBAQCcpO1xuICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG4gIH1cbiAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xufVxuZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICB2YXIgX29wdGlvbnMyO1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgY2FsbGJhY2s6IG9wdGlvbnNcbiAgICB9O1xuICB9XG4gIGlmICghKChfb3B0aW9uczIgPSBvcHRpb25zKSAhPT0gbnVsbCAmJiBfb3B0aW9uczIgIT09IHZvaWQgMCAmJiBfb3B0aW9uczIuY2FsbGJhY2spKSB7XG4gICAgdmFyIHBhdGNoT2JqID0gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbiAgICBpZiAoIXBhdGNoT2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRQYXRjaChwYXRjaE9iaik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9vcHRpb25zMyA9IG9wdGlvbnMsXG4gICAgICBfY2FsbGJhY2syID0gX29wdGlvbnMzLmNhbGxiYWNrO1xuICAgIHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKHBhdGNoT2JqKSB7XG4gICAgICAgIGlmICghcGF0Y2hPYmopIHtcbiAgICAgICAgICBfY2FsbGJhY2syKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2NhbGxiYWNrMihmb3JtYXRQYXRjaChwYXRjaE9iaikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTcGxpdCBgdGV4dGAgaW50byBhbiBhcnJheSBvZiBsaW5lcywgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBuZXdsaW5lIGNoYXJhY3RlciAod2hlcmUgcHJlc2VudClcbiAqL1xuZnVuY3Rpb24gc3BsaXRMaW5lcyh0ZXh0KSB7XG4gIHZhciBoYXNUcmFpbGluZ05sID0gdGV4dC5lbmRzV2l0aCgnXFxuJyk7XG4gIHZhciByZXN1bHQgPSB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICByZXR1cm4gbGluZSArICdcXG4nO1xuICB9KTtcbiAgaWYgKGhhc1RyYWlsaW5nTmwpIHtcbiAgICByZXN1bHQucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnB1c2gocmVzdWx0LnBvcCgpLnNsaWNlKDAsIC0xKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYXJyYXlFcXVhbChhLCBiKSB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcbn1cbmZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2FsY0xpbmVDb3VudChodW5rKSB7XG4gIHZhciBfY2FsY09sZE5ld0xpbmVDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQoaHVuay5saW5lcyksXG4gICAgb2xkTGluZXMgPSBfY2FsY09sZE5ld0xpbmVDb3VudC5vbGRMaW5lcyxcbiAgICBuZXdMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm5ld0xpbmVzO1xuICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5vbGRMaW5lcztcbiAgfVxuICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG4gIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuICB2YXIgcmV0ID0ge307XG5cbiAgLy8gRm9yIGluZGV4IHdlIGp1c3QgbGV0IGl0IHBhc3MgdGhyb3VnaCBhcyBpdCBkb2Vzbid0IGhhdmUgYW55IG5lY2Vzc2FyeSBtZWFuaW5nLlxuICAvLyBMZWF2aW5nIHNhbml0eSBjaGVja3Mgb24gdGhpcyB0byB0aGUgQVBJIGNvbnN1bWVyIHRoYXQgbWF5IGtub3cgbW9yZSBhYm91dCB0aGVcbiAgLy8gbWVhbmluZyBpbiB0aGVpciBvd24gY29udGV4dC5cbiAgaWYgKG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4KSB7XG4gICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG4gIH1cbiAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG4gICAgaWYgKCFmaWxlTmFtZUNoYW5nZWQobWluZSkpIHtcbiAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gb3VycywgdXNlIHRoZWlycyAoYW5kIG91cnMgaWYgdGhlaXJzIGRvZXMgbm90IGV4aXN0KVxuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSB0aGVpcnMubmV3RmlsZU5hbWUgfHwgbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSB0aGVpcnMub2xkSGVhZGVyIHx8IG1pbmUub2xkSGVhZGVyO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG4gICAgfSBlbHNlIGlmICghZmlsZU5hbWVDaGFuZ2VkKHRoZWlycykpIHtcbiAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gdGhlaXJzLCB1c2Ugb3Vyc1xuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICByZXQub2xkSGVhZGVyID0gbWluZS5vbGRIZWFkZXI7XG4gICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJvdGggY2hhbmdlZC4uLiBmaWd1cmUgaXQgb3V0XG4gICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3RmlsZU5hbWUsIHRoZWlycy5uZXdGaWxlTmFtZSk7XG4gICAgICByZXQub2xkSGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEhlYWRlciwgdGhlaXJzLm9sZEhlYWRlcik7XG4gICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG4gICAgfVxuICB9XG4gIHJldC5odW5rcyA9IFtdO1xuICB2YXIgbWluZUluZGV4ID0gMCxcbiAgICB0aGVpcnNJbmRleCA9IDAsXG4gICAgbWluZU9mZnNldCA9IDAsXG4gICAgdGhlaXJzT2Zmc2V0ID0gMDtcbiAgd2hpbGUgKG1pbmVJbmRleCA8IG1pbmUuaHVua3MubGVuZ3RoIHx8IHRoZWlyc0luZGV4IDwgdGhlaXJzLmh1bmtzLmxlbmd0aCkge1xuICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7XG4gICAgICAgIG9sZFN0YXJ0OiBJbmZpbml0eVxuICAgICAgfSxcbiAgICAgIHRoZWlyc0N1cnJlbnQgPSB0aGVpcnMuaHVua3NbdGhlaXJzSW5kZXhdIHx8IHtcbiAgICAgICAgb2xkU3RhcnQ6IEluZmluaXR5XG4gICAgICB9O1xuICAgIGlmIChodW5rQmVmb3JlKG1pbmVDdXJyZW50LCB0aGVpcnNDdXJyZW50KSkge1xuICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cbiAgICAgIHJldC5odW5rcy5wdXNoKGNsb25lSHVuayhtaW5lQ3VycmVudCwgbWluZU9mZnNldCkpO1xuICAgICAgbWluZUluZGV4Kys7XG4gICAgICB0aGVpcnNPZmZzZXQgKz0gbWluZUN1cnJlbnQubmV3TGluZXMgLSBtaW5lQ3VycmVudC5vbGRMaW5lcztcbiAgICB9IGVsc2UgaWYgKGh1bmtCZWZvcmUodGhlaXJzQ3VycmVudCwgbWluZUN1cnJlbnQpKSB7XG4gICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKHRoZWlyc0N1cnJlbnQsIHRoZWlyc09mZnNldCkpO1xuICAgICAgdGhlaXJzSW5kZXgrKztcbiAgICAgIG1pbmVPZmZzZXQgKz0gdGhlaXJzQ3VycmVudC5uZXdMaW5lcyAtIHRoZWlyc0N1cnJlbnQub2xkTGluZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE92ZXJsYXAsIG1lcmdlIGFzIGJlc3Qgd2UgY2FuXG4gICAgICB2YXIgbWVyZ2VkSHVuayA9IHtcbiAgICAgICAgb2xkU3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0KSxcbiAgICAgICAgb2xkTGluZXM6IDAsXG4gICAgICAgIG5ld1N0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5uZXdTdGFydCArIG1pbmVPZmZzZXQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQgKyB0aGVpcnNPZmZzZXQpLFxuICAgICAgICBuZXdMaW5lczogMCxcbiAgICAgICAgbGluZXM6IFtdXG4gICAgICB9O1xuICAgICAgbWVyZ2VMaW5lcyhtZXJnZWRIdW5rLCBtaW5lQ3VycmVudC5vbGRTdGFydCwgbWluZUN1cnJlbnQubGluZXMsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQubGluZXMpO1xuICAgICAgdGhlaXJzSW5kZXgrKztcbiAgICAgIG1pbmVJbmRleCsrO1xuICAgICAgcmV0Lmh1bmtzLnB1c2gobWVyZ2VkSHVuayk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBsb2FkUGF0Y2gocGFyYW0sIGJhc2UpIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoL15AQC9tLnRlc3QocGFyYW0pIHx8IC9eSW5kZXg6L20udGVzdChwYXJhbSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVBhdGNoKHBhcmFtKVswXTtcbiAgICB9XG4gICAgaWYgKCFiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBhIGJhc2UgcmVmZXJlbmNlIG9yIHBhc3MgaW4gYSBwYXRjaCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3RydWN0dXJlZFBhdGNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBiYXNlLCBwYXJhbSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtO1xufVxuZnVuY3Rpb24gZmlsZU5hbWVDaGFuZ2VkKHBhdGNoKSB7XG4gIHJldHVybiBwYXRjaC5uZXdGaWxlTmFtZSAmJiBwYXRjaC5uZXdGaWxlTmFtZSAhPT0gcGF0Y2gub2xkRmlsZU5hbWU7XG59XG5mdW5jdGlvbiBzZWxlY3RGaWVsZChpbmRleCwgbWluZSwgdGhlaXJzKSB7XG4gIGlmIChtaW5lID09PSB0aGVpcnMpIHtcbiAgICByZXR1cm4gbWluZTtcbiAgfSBlbHNlIHtcbiAgICBpbmRleC5jb25mbGljdCA9IHRydWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbmU6IG1pbmUsXG4gICAgICB0aGVpcnM6IHRoZWlyc1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGh1bmtCZWZvcmUodGVzdCwgY2hlY2spIHtcbiAgcmV0dXJuIHRlc3Qub2xkU3RhcnQgPCBjaGVjay5vbGRTdGFydCAmJiB0ZXN0Lm9sZFN0YXJ0ICsgdGVzdC5vbGRMaW5lcyA8IGNoZWNrLm9sZFN0YXJ0O1xufVxuZnVuY3Rpb24gY2xvbmVIdW5rKGh1bmssIG9mZnNldCkge1xuICByZXR1cm4ge1xuICAgIG9sZFN0YXJ0OiBodW5rLm9sZFN0YXJ0LFxuICAgIG9sZExpbmVzOiBodW5rLm9sZExpbmVzLFxuICAgIG5ld1N0YXJ0OiBodW5rLm5ld1N0YXJ0ICsgb2Zmc2V0LFxuICAgIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuICAgIGxpbmVzOiBodW5rLmxpbmVzXG4gIH07XG59XG5mdW5jdGlvbiBtZXJnZUxpbmVzKGh1bmssIG1pbmVPZmZzZXQsIG1pbmVMaW5lcywgdGhlaXJPZmZzZXQsIHRoZWlyTGluZXMpIHtcbiAgLy8gVGhpcyB3aWxsIGdlbmVyYWxseSByZXN1bHQgaW4gYSBjb25mbGljdGVkIGh1bmssIGJ1dCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvbnRleHRcbiAgLy8gaXMgdGhlIG9ubHkgb3ZlcmxhcCB3aGVyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IG1lcmdlIHRoZSBjb250ZW50IGhlcmUuXG4gIHZhciBtaW5lID0ge1xuICAgICAgb2Zmc2V0OiBtaW5lT2Zmc2V0LFxuICAgICAgbGluZXM6IG1pbmVMaW5lcyxcbiAgICAgIGluZGV4OiAwXG4gICAgfSxcbiAgICB0aGVpciA9IHtcbiAgICAgIG9mZnNldDogdGhlaXJPZmZzZXQsXG4gICAgICBsaW5lczogdGhlaXJMaW5lcyxcbiAgICAgIGluZGV4OiAwXG4gICAgfTtcblxuICAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgaW5zZXJ0TGVhZGluZyhodW5rLCB0aGVpciwgbWluZSk7XG5cbiAgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuICB3aGlsZSAobWluZS5pbmRleCA8IG1pbmUubGluZXMubGVuZ3RoICYmIHRoZWlyLmluZGV4IDwgdGhlaXIubGluZXMubGVuZ3RoKSB7XG4gICAgdmFyIG1pbmVDdXJyZW50ID0gbWluZS5saW5lc1ttaW5lLmluZGV4XSxcbiAgICAgIHRoZWlyQ3VycmVudCA9IHRoZWlyLmxpbmVzW3RoZWlyLmluZGV4XTtcbiAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJykgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cbiAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXM7XG4gICAgICAvLyBNaW5lIGluc2VydGVkXG4gICAgICAoX2h1bmskbGluZXMgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzLCBfdG9Db25zdW1hYmxlQXJyYXkoY29sbGVjdENoYW5nZShtaW5lKSkpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgdmFyIF9odW5rJGxpbmVzMjtcbiAgICAgIC8vIFRoZWlycyBpbnNlcnRlZFxuICAgICAgKF9odW5rJGxpbmVzMiA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXMyLCBfdG9Db25zdW1hYmxlQXJyYXkoY29sbGVjdENoYW5nZSh0aGVpcikpKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnLScgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgdGhlaXIsIG1pbmUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnQgPT09IHRoZWlyQ3VycmVudCkge1xuICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgaHVuay5saW5lcy5wdXNoKG1pbmVDdXJyZW50KTtcbiAgICAgIG1pbmUuaW5kZXgrKztcbiAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRleHQgbWlzbWF0Y2hcbiAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9XG4gIH1cblxuICAvLyBOb3cgcHVzaCBhbnl0aGluZyB0aGF0IG1heSBiZSByZW1haW5pbmdcbiAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG4gIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcbiAgY2FsY0xpbmVDb3VudChodW5rKTtcbn1cbmZ1bmN0aW9uIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcikge1xuICB2YXIgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcbiAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcbiAgaWYgKGFsbFJlbW92ZXMobXlDaGFuZ2VzKSAmJiBhbGxSZW1vdmVzKHRoZWlyQ2hhbmdlcykpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgIGlmIChhcnJheVN0YXJ0c1dpdGgobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldCh0aGVpciwgbXlDaGFuZ2VzLCBteUNoYW5nZXMubGVuZ3RoIC0gdGhlaXJDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIHZhciBfaHVuayRsaW5lczM7XG4gICAgICAoX2h1bmskbGluZXMzID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczMsIF90b0NvbnN1bWFibGVBcnJheShteUNoYW5nZXMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGFycmF5U3RhcnRzV2l0aCh0aGVpckNoYW5nZXMsIG15Q2hhbmdlcykgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KG1pbmUsIHRoZWlyQ2hhbmdlcywgdGhlaXJDaGFuZ2VzLmxlbmd0aCAtIG15Q2hhbmdlcy5sZW5ndGgpKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXM0O1xuICAgICAgKF9odW5rJGxpbmVzNCA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM0LCBfdG9Db25zdW1hYmxlQXJyYXkodGhlaXJDaGFuZ2VzKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKGFycmF5RXF1YWwobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpKSB7XG4gICAgdmFyIF9odW5rJGxpbmVzNTtcbiAgICAoX2h1bmskbGluZXM1ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczUsIF90b0NvbnN1bWFibGVBcnJheShteUNoYW5nZXMpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uZmxpY3QoaHVuaywgbXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpO1xufVxuZnVuY3Rpb24gcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpciwgc3dhcCkge1xuICB2YXIgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcbiAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q29udGV4dCh0aGVpciwgbXlDaGFuZ2VzKTtcbiAgaWYgKHRoZWlyQ2hhbmdlcy5tZXJnZWQpIHtcbiAgICB2YXIgX2h1bmskbGluZXM2O1xuICAgIChfaHVuayRsaW5lczYgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzNiwgX3RvQ29uc3VtYWJsZUFycmF5KHRoZWlyQ2hhbmdlcy5tZXJnZWQpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25mbGljdChodW5rLCBzd2FwID8gdGhlaXJDaGFuZ2VzIDogbXlDaGFuZ2VzLCBzd2FwID8gbXlDaGFuZ2VzIDogdGhlaXJDaGFuZ2VzKTtcbiAgfVxufVxuZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgaHVuay5jb25mbGljdCA9IHRydWU7XG4gIGh1bmsubGluZXMucHVzaCh7XG4gICAgY29uZmxpY3Q6IHRydWUsXG4gICAgbWluZTogbWluZSxcbiAgICB0aGVpcnM6IHRoZWlyXG4gIH0pO1xufVxuZnVuY3Rpb24gaW5zZXJ0TGVhZGluZyhodW5rLCBpbnNlcnQsIHRoZWlyKSB7XG4gIHdoaWxlIChpbnNlcnQub2Zmc2V0IDwgdGhlaXIub2Zmc2V0ICYmIGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcbiAgICB2YXIgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG4gICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuICAgIGluc2VydC5vZmZzZXQrKztcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0VHJhaWxpbmcoaHVuaywgaW5zZXJ0KSB7XG4gIHdoaWxlIChpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG4gICAgdmFyIGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICB2YXIgcmV0ID0gW10sXG4gICAgb3BlcmF0aW9uID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdWzBdO1xuICB3aGlsZSAoc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcbiAgICB2YXIgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTtcblxuICAgIC8vIEdyb3VwIGFkZGl0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhZnRlciBzdWJ0cmFjdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgb25lIFwiYXRvbWljXCIgbW9kaWZ5IGNoYW5nZS5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG4gICAgICBvcGVyYXRpb24gPSAnKyc7XG4gICAgfVxuICAgIGlmIChvcGVyYXRpb24gPT09IGxpbmVbMF0pIHtcbiAgICAgIHJldC5wdXNoKGxpbmUpO1xuICAgICAgc3RhdGUuaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gIHZhciBjaGFuZ2VzID0gW10sXG4gICAgbWVyZ2VkID0gW10sXG4gICAgbWF0Y2hJbmRleCA9IDAsXG4gICAgY29udGV4dENoYW5nZXMgPSBmYWxzZSxcbiAgICBjb25mbGljdGVkID0gZmFsc2U7XG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICBtYXRjaCA9IG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XTtcblxuICAgIC8vIE9uY2Ugd2UndmUgaGl0IG91ciBhZGQsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICBpZiAobWF0Y2hbMF0gPT09ICcrJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG4gICAgbWVyZ2VkLnB1c2gobWF0Y2gpO1xuICAgIG1hdGNoSW5kZXgrKztcblxuICAgIC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG4gICAgLy8gdG8gcHVsbCBpbiB0aGUgcmVtYWluaW5nIGNvbnRleHQgYWZ0ZXIgdGhpc1xuICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG4gICAgICB3aGlsZSAoY2hhbmdlWzBdID09PSAnKycpIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgIGNoYW5nZSA9IHN0YXRlLmxpbmVzWysrc3RhdGUuaW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XSB8fCAnJylbMF0gPT09ICcrJyAmJiBjb250ZXh0Q2hhbmdlcykge1xuICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICB9XG4gIGlmIChjb25mbGljdGVkKSB7XG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cbiAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoKSB7XG4gICAgbWVyZ2VkLnB1c2gobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXgrK10pO1xuICB9XG4gIHJldHVybiB7XG4gICAgbWVyZ2VkOiBtZXJnZWQsXG4gICAgY2hhbmdlczogY2hhbmdlc1xuICB9O1xufVxuZnVuY3Rpb24gYWxsUmVtb3ZlcyhjaGFuZ2VzKSB7XG4gIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY2hhbmdlKSB7XG4gICAgcmV0dXJuIHByZXYgJiYgY2hhbmdlWzBdID09PSAnLSc7XG4gIH0sIHRydWUpO1xufVxuZnVuY3Rpb24gc2tpcFJlbW92ZVN1cGVyc2V0KHN0YXRlLCByZW1vdmVDaGFuZ2VzLCBkZWx0YSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcbiAgICB2YXIgY2hhbmdlQ29udGVudCA9IHJlbW92ZUNoYW5nZXNbcmVtb3ZlQ2hhbmdlcy5sZW5ndGggLSBkZWx0YSArIGldLnN1YnN0cigxKTtcbiAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5pbmRleCArPSBkZWx0YTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG4gIHZhciBvbGRMaW5lcyA9IDA7XG4gIHZhciBuZXdMaW5lcyA9IDA7XG4gIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICBpZiAodHlwZW9mIGxpbmUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbXlDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS5taW5lKTtcbiAgICAgIHZhciB0aGVpckNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLnRoZWlycyk7XG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChteUNvdW50Lm5ld0xpbmVzID09PSB0aGVpckNvdW50Lm5ld0xpbmVzKSB7XG4gICAgICAgICAgbmV3TGluZXMgKz0gbXlDb3VudC5uZXdMaW5lcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMaW5lcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJysnIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgbmV3TGluZXMrKztcbiAgICAgIH1cbiAgICAgIGlmIChvbGRMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnLScgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBvbGRMaW5lcysrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgb2xkTGluZXM6IG9sZExpbmVzLFxuICAgIG5ld0xpbmVzOiBuZXdMaW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXZlcnNlUGF0Y2goc3RydWN0dXJlZFBhdGNoKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHN0cnVjdHVyZWRQYXRjaCkpIHtcbiAgICByZXR1cm4gc3RydWN0dXJlZFBhdGNoLm1hcChyZXZlcnNlUGF0Y2gpLnJldmVyc2UoKTtcbiAgfVxuICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0cnVjdHVyZWRQYXRjaCksIHt9LCB7XG4gICAgb2xkRmlsZU5hbWU6IHN0cnVjdHVyZWRQYXRjaC5uZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IHN0cnVjdHVyZWRQYXRjaC5uZXdIZWFkZXIsXG4gICAgbmV3RmlsZU5hbWU6IHN0cnVjdHVyZWRQYXRjaC5vbGRGaWxlTmFtZSxcbiAgICBuZXdIZWFkZXI6IHN0cnVjdHVyZWRQYXRjaC5vbGRIZWFkZXIsXG4gICAgaHVua3M6IHN0cnVjdHVyZWRQYXRjaC5odW5rcy5tYXAoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9sZExpbmVzOiBodW5rLm5ld0xpbmVzLFxuICAgICAgICBvbGRTdGFydDogaHVuay5uZXdTdGFydCxcbiAgICAgICAgbmV3TGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgICAgIG5ld1N0YXJ0OiBodW5rLm9sZFN0YXJ0LFxuICAgICAgICBsaW5lczogaHVuay5saW5lcy5tYXAoZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgICAgIHJldHVybiBcIitcIi5jb25jYXQobC5zbGljZSgxKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJysnKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLVwiLmNvbmNhdChsLnNsaWNlKDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH0pXG4gIH0pO1xufVxuXG4vLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuZnVuY3Rpb24gY29udmVydENoYW5nZXNUb0RNUChjaGFuZ2VzKSB7XG4gIHZhciByZXQgPSBbXSxcbiAgICBjaGFuZ2UsXG4gICAgb3BlcmF0aW9uO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIG9wZXJhdGlvbiA9IDE7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgb3BlcmF0aW9uID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdGlvbiA9IDA7XG4gICAgfVxuICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9YTUwoY2hhbmdlcykge1xuICB2YXIgcmV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8aW5zPicpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8ZGVsPicpO1xuICAgIH1cbiAgICByZXQucHVzaChlc2NhcGVIVE1MKGNoYW5nZS52YWx1ZSkpO1xuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQuam9pbignJyk7XG59XG5mdW5jdGlvbiBlc2NhcGVIVE1MKHMpIHtcbiAgdmFyIG4gPSBzO1xuICBuID0gbi5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xuICBuID0gbi5yZXBsYWNlKC88L2csICcmbHQ7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuICByZXR1cm4gbjtcbn1cblxuZXhwb3J0IHsgRGlmZiwgYXBwbHlQYXRjaCwgYXBwbHlQYXRjaGVzLCBjYW5vbmljYWxpemUsIGNvbnZlcnRDaGFuZ2VzVG9ETVAsIGNvbnZlcnRDaGFuZ2VzVG9YTUwsIGNyZWF0ZVBhdGNoLCBjcmVhdGVUd29GaWxlc1BhdGNoLCBkaWZmQXJyYXlzLCBkaWZmQ2hhcnMsIGRpZmZDc3MsIGRpZmZKc29uLCBkaWZmTGluZXMsIGRpZmZTZW50ZW5jZXMsIGRpZmZUcmltbWVkTGluZXMsIGRpZmZXb3JkcywgZGlmZldvcmRzV2l0aFNwYWNlLCBmb3JtYXRQYXRjaCwgbWVyZ2UsIHBhcnNlUGF0Y2gsIHJldmVyc2VQYXRjaCwgc3RydWN0dXJlZFBhdGNoIH07XG4iLAogICAgImltcG9ydCB7IHR5cGUgSHVuaywgc3RydWN0dXJlZFBhdGNoIH0gZnJvbSAnZGlmZidcblxuY29uc3QgQ09OVEVYVF9MSU5FUyA9IDNcblxuLy8gRm9yIHNvbWUgcmVhc29uLCAmIGNvbmZ1c2VzIHRoZSBkaWZmIGxpYnJhcnksIHNvIHdlIHJlcGxhY2UgaXQgd2l0aCBhIHRva2VuLFxuLy8gdGhlbiBzdWJzdGl0dXRlIGl0IGJhY2sgaW4gYWZ0ZXIgdGhlIGRpZmYgaXMgY29tcHV0ZWQuXG5jb25zdCBBTVBFUlNBTkRfVE9LRU4gPSAnPDw6QU1QRVJTQU5EX1RPS0VOOj4+J1xuXG5jb25zdCBET0xMQVJfVE9LRU4gPSAnPDw6RE9MTEFSX1RPS0VOOj4+J1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0Y2goe1xuICBmaWxlUGF0aCxcbiAgZmlsZUNvbnRlbnRzLFxuICBvbGRTdHIsXG4gIG5ld1N0cixcbn06IHtcbiAgZmlsZVBhdGg6IHN0cmluZ1xuICBmaWxlQ29udGVudHM6IHN0cmluZ1xuICBvbGRTdHI6IHN0cmluZ1xuICBuZXdTdHI6IHN0cmluZ1xufSk6IEh1bmtbXSB7XG4gIHJldHVybiBzdHJ1Y3R1cmVkUGF0Y2goXG4gICAgZmlsZVBhdGgsXG4gICAgZmlsZVBhdGgsXG4gICAgZmlsZUNvbnRlbnRzLnJlcGxhY2VBbGwoJyYnLCBBTVBFUlNBTkRfVE9LRU4pLnJlcGxhY2VBbGwoJyQnLCBET0xMQVJfVE9LRU4pLFxuICAgIGZpbGVDb250ZW50c1xuICAgICAgLnJlcGxhY2VBbGwoJyYnLCBBTVBFUlNBTkRfVE9LRU4pXG4gICAgICAucmVwbGFjZUFsbCgnJCcsIERPTExBUl9UT0tFTilcbiAgICAgIC5yZXBsYWNlKFxuICAgICAgICBvbGRTdHIucmVwbGFjZUFsbCgnJicsIEFNUEVSU0FORF9UT0tFTikucmVwbGFjZUFsbCgnJCcsIERPTExBUl9UT0tFTiksXG4gICAgICAgIG5ld1N0ci5yZXBsYWNlQWxsKCcmJywgQU1QRVJTQU5EX1RPS0VOKS5yZXBsYWNlQWxsKCckJywgRE9MTEFSX1RPS0VOKSxcbiAgICAgICksXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICB7IGNvbnRleHQ6IENPTlRFWFRfTElORVMgfSxcbiAgKS5odW5rcy5tYXAoXyA9PiAoe1xuICAgIC4uLl8sXG4gICAgbGluZXM6IF8ubGluZXMubWFwKF8gPT5cbiAgICAgIF8ucmVwbGFjZUFsbChBTVBFUlNBTkRfVE9LRU4sICcmJykucmVwbGFjZUFsbChET0xMQVJfVE9LRU4sICckJyksXG4gICAgKSxcbiAgfSkpXG59XG4iLAogICAgImltcG9ydCB7IEh1bmsgfSBmcm9tICdkaWZmJ1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcydcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIGlzQWJzb2x1dGUsIHJlbGF0aXZlLCByZXNvbHZlLCBzZXAgfSBmcm9tICdwYXRoJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJ1xuaW1wb3J0IHsgRmlsZUVkaXRUb29sVXBkYXRlZE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZpbGVFZGl0VG9vbFVwZGF0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgSGlnaGxpZ2h0ZWRDb2RlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9IaWdobGlnaHRlZENvZGUuanMnXG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRGlmZiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvU3RydWN0dXJlZERpZmYuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5pbXBvcnQgdHlwZSB7IFRvb2wgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHsgaW50ZXJzcGVyc2UgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheS5qcydcbmltcG9ydCB7XG4gIGFkZExpbmVOdW1iZXJzLFxuICBkZXRlY3RGaWxlRW5jb2RpbmcsXG4gIGRldGVjdExpbmVFbmRpbmdzLFxuICBkZXRlY3RSZXBvTGluZUVuZGluZ3MsXG4gIHdyaXRlVGV4dENvbnRlbnQsXG59IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFBST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IHsgaGFzV3JpdGVQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvZmlsZXN5c3RlbS5qcydcbmltcG9ydCB7IGdldFBhdGNoIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGlmZi5qcydcblxuY29uc3QgTUFYX0xJTkVTX1RPX1JFTkRFUiA9IDEwXG5jb25zdCBNQVhfTElORVNfVE9fUkVOREVSX0ZPUl9BU1NJU1RBTlQgPSAxNjAwMFxuY29uc3QgVFJVTkNBVEVEX01FU1NBR0UgPVxuICAnPHJlc3BvbnNlIGNsaXBwZWQ+PE5PVEU+VG8gc2F2ZSBvbiBjb250ZXh0IG9ubHkgcGFydCBvZiB0aGlzIGZpbGUgaGFzIGJlZW4gc2hvd24gdG8geW91LiBZb3Ugc2hvdWxkIHJldHJ5IHRoaXMgdG9vbCBhZnRlciB5b3UgaGF2ZSBzZWFyY2hlZCBpbnNpZGUgdGhlIGZpbGUgd2l0aCBHcmVwIGluIG9yZGVyIHRvIGZpbmQgdGhlIGxpbmUgbnVtYmVycyBvZiB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3IuPC9OT1RFPidcblxuY29uc3QgaW5wdXRTY2hlbWEgPSB6LnN0cmljdE9iamVjdCh7XG4gIGZpbGVfcGF0aDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgICdUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSB0byB3cml0ZSAobXVzdCBiZSBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlKScsXG4gICAgKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZSgnVGhlIGNvbnRlbnQgdG8gd3JpdGUgdG8gdGhlIGZpbGUnKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBGaWxlV3JpdGVUb29sID0ge1xuICBuYW1lOiAnUmVwbGFjZScsXG4gIGFzeW5jIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiAnV3JpdGUgYSBmaWxlIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtLidcbiAgfSxcbiAgdXNlckZhY2luZ05hbWU6ICgpID0+ICdXcml0ZScsXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gUFJPTVBUXG4gIH0sXG4gIGlucHV0U2NoZW1hLFxuICBhc3luYyBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcbiAgaXNSZWFkT25seSgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgbmVlZHNQZXJtaXNzaW9ucyh7IGZpbGVfcGF0aCB9KSB7XG4gICAgcmV0dXJuICFoYXNXcml0ZVBlcm1pc3Npb24oZmlsZV9wYXRoKVxuICB9LFxuICByZW5kZXJUb29sVXNlTWVzc2FnZShpbnB1dCwgeyB2ZXJib3NlIH0pIHtcbiAgICByZXR1cm4gYGZpbGVfcGF0aDogJHt2ZXJib3NlID8gaW5wdXQuZmlsZV9wYXRoIDogcmVsYXRpdmUoZ2V0Q3dkKCksIGlucHV0LmZpbGVfcGF0aCl9YFxuICB9LFxuICByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKHsgZmlsZV9wYXRoLCBjb250ZW50IH0sIHsgY29sdW1ucywgdmVyYm9zZSB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZ1bGxGaWxlUGF0aCA9IGlzQWJzb2x1dGUoZmlsZV9wYXRoKVxuICAgICAgICA/IGZpbGVfcGF0aFxuICAgICAgICA6IHJlc29sdmUoZ2V0Q3dkKCksIGZpbGVfcGF0aClcbiAgICAgIGNvbnN0IG9sZEZpbGVFeGlzdHMgPSBleGlzdHNTeW5jKGZ1bGxGaWxlUGF0aClcbiAgICAgIGNvbnN0IGVuYyA9IG9sZEZpbGVFeGlzdHMgPyBkZXRlY3RGaWxlRW5jb2RpbmcoZnVsbEZpbGVQYXRoKSA6ICd1dGYtOCdcbiAgICAgIGNvbnN0IG9sZENvbnRlbnQgPSBvbGRGaWxlRXhpc3RzID8gcmVhZEZpbGVTeW5jKGZ1bGxGaWxlUGF0aCwgZW5jKSA6IG51bGxcbiAgICAgIGNvbnN0IHR5cGUgPSBvbGRDb250ZW50ID8gJ3VwZGF0ZScgOiAnY3JlYXRlJ1xuICAgICAgY29uc3QgcGF0Y2ggPSBnZXRQYXRjaCh7XG4gICAgICAgIGZpbGVQYXRoOiBmaWxlX3BhdGgsXG4gICAgICAgIGZpbGVDb250ZW50czogb2xkQ29udGVudCA/PyAnJyxcbiAgICAgICAgb2xkU3RyOiBvbGRDb250ZW50ID8/ICcnLFxuICAgICAgICBuZXdTdHI6IGNvbnRlbnQsXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHsnICAnfeKOv3snICd9XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5lcnJvcn0+XG4gICAgICAgICAgICAgIFVzZXIgcmVqZWN0ZWQge3R5cGUgPT09ICd1cGRhdGUnID8gJ3VwZGF0ZScgOiAnd3JpdGUnfSB0b3snICd9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBib2xkPlxuICAgICAgICAgICAgICB7dmVyYm9zZSA/IGZpbGVfcGF0aCA6IHJlbGF0aXZlKGdldEN3ZCgpLCBmaWxlX3BhdGgpfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7aW50ZXJzcGVyc2UoXG4gICAgICAgICAgICBwYXRjaC5tYXAoXyA9PiAoXG4gICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdMZWZ0PXs1fSBrZXk9e18ubmV3U3RhcnR9PlxuICAgICAgICAgICAgICAgIDxTdHJ1Y3R1cmVkRGlmZiBwYXRjaD17X30gZGltPXt0cnVlfSB3aWR0aD17Y29sdW1ucyAtIDEyfSAvPlxuICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgaSA9PiAoXG4gICAgICAgICAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezV9IGtleT17YGVsbGlwc2lzLSR7aX1gfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlUZXh0fT4uLi48L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICAgIClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2hpbGUgd2Ugd2VyZSBzaG93aW5nIHRoZSBkaWZmLCB0aGUgdXNlciBtYW51YWxseSBtYWRlIHRoZSBjaGFuZ2UuXG4gICAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHNob3cgdGhlIGRpZmYgaW4gdGhpcyBjYXNlXG4gICAgICBsb2dFcnJvcihlKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgPFRleHQ+eycgICd94o6/IChObyBjaGFuZ2VzKTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApXG4gICAgfVxuICB9LFxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZShcbiAgICB7IGZpbGVQYXRoLCBjb250ZW50LCBzdHJ1Y3R1cmVkUGF0Y2gsIHR5cGUgfSxcbiAgICB7IHZlcmJvc2UgfSxcbiAgKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjcmVhdGUnOiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaXRoRmFsbGJhY2sgPSBjb250ZW50IHx8ICcoTm8gY29udGVudCknXG4gICAgICAgIGNvbnN0IG51bUxpbmVzID0gY29udGVudC5zcGxpdChFT0wpLmxlbmd0aFxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgeycgICd94o6/IFdyb3RlIHtudW1MaW5lc30gbGluZXMgdG97JyAnfVxuICAgICAgICAgICAgICA8VGV4dCBib2xkPlxuICAgICAgICAgICAgICAgIHt2ZXJib3NlID8gZmlsZVBhdGggOiByZWxhdGl2ZShnZXRDd2QoKSwgZmlsZVBhdGgpfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nTGVmdD17NX0+XG4gICAgICAgICAgICAgIDxIaWdobGlnaHRlZENvZGVcbiAgICAgICAgICAgICAgICBjb2RlPXtcbiAgICAgICAgICAgICAgICAgIHZlcmJvc2VcbiAgICAgICAgICAgICAgICAgICAgPyBjb250ZW50V2l0aEZhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIDogY29udGVudFdpdGhGYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIE1BWF9MSU5FU19UT19SRU5ERVIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKF8gPT4gXy50cmltKCkgIT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtleHRuYW1lKGZpbGVQYXRoKS5zbGljZSgxKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgeyF2ZXJib3NlICYmIG51bUxpbmVzID4gTUFYX0xJTkVTX1RPX1JFTkRFUiAmJiAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgICAgICAuLi4gKCt7bnVtTGluZXMgLSBNQVhfTElORVNfVE9fUkVOREVSfSBsaW5lcylcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RmlsZUVkaXRUb29sVXBkYXRlZE1lc3NhZ2VcbiAgICAgICAgICAgIGZpbGVQYXRoPXtmaWxlUGF0aH1cbiAgICAgICAgICAgIHN0cnVjdHVyZWRQYXRjaD17c3RydWN0dXJlZFBhdGNofVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgfVxuICB9LFxuICBhc3luYyB2YWxpZGF0ZUlucHV0KHsgZmlsZV9wYXRoIH0sIHsgcmVhZEZpbGVUaW1lc3RhbXBzIH0pIHtcbiAgICBjb25zdCBmdWxsRmlsZVBhdGggPSBpc0Fic29sdXRlKGZpbGVfcGF0aClcbiAgICAgID8gZmlsZV9wYXRoXG4gICAgICA6IHJlc29sdmUoZ2V0Q3dkKCksIGZpbGVfcGF0aClcbiAgICBpZiAoIWV4aXN0c1N5bmMoZnVsbEZpbGVQYXRoKSkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWFkVGltZXN0YW1wID0gcmVhZEZpbGVUaW1lc3RhbXBzW2Z1bGxGaWxlUGF0aF1cbiAgICBpZiAoIXJlYWRUaW1lc3RhbXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ0ZpbGUgaGFzIG5vdCBiZWVuIHJlYWQgeWV0LiBSZWFkIGl0IGZpcnN0IGJlZm9yZSB3cml0aW5nIHRvIGl0LicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHMgYW5kIGdldCBpdHMgbGFzdCBtb2RpZmllZCB0aW1lXG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhmdWxsRmlsZVBhdGgpXG4gICAgY29uc3QgbGFzdFdyaXRlVGltZSA9IHN0YXRzLm10aW1lTXNcbiAgICBpZiAobGFzdFdyaXRlVGltZSA+IHJlYWRUaW1lc3RhbXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ0ZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgcmVhZCwgZWl0aGVyIGJ5IHRoZSB1c2VyIG9yIGJ5IGEgbGludGVyLiBSZWFkIGl0IGFnYWluIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHdyaXRlIGl0LicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgfSxcbiAgYXN5bmMgKmNhbGwoeyBmaWxlX3BhdGgsIGNvbnRlbnQgfSwgeyByZWFkRmlsZVRpbWVzdGFtcHMgfSkge1xuICAgIGNvbnN0IGZ1bGxGaWxlUGF0aCA9IGlzQWJzb2x1dGUoZmlsZV9wYXRoKVxuICAgICAgPyBmaWxlX3BhdGhcbiAgICAgIDogcmVzb2x2ZShnZXRDd2QoKSwgZmlsZV9wYXRoKVxuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoZnVsbEZpbGVQYXRoKVxuICAgIGNvbnN0IG9sZEZpbGVFeGlzdHMgPSBleGlzdHNTeW5jKGZ1bGxGaWxlUGF0aClcbiAgICBjb25zdCBlbmMgPSBvbGRGaWxlRXhpc3RzID8gZGV0ZWN0RmlsZUVuY29kaW5nKGZ1bGxGaWxlUGF0aCkgOiAndXRmLTgnXG4gICAgY29uc3Qgb2xkQ29udGVudCA9IG9sZEZpbGVFeGlzdHMgPyByZWFkRmlsZVN5bmMoZnVsbEZpbGVQYXRoLCBlbmMpIDogbnVsbFxuXG4gICAgY29uc3QgZW5kaW5ncyA9IG9sZEZpbGVFeGlzdHNcbiAgICAgID8gZGV0ZWN0TGluZUVuZGluZ3MoZnVsbEZpbGVQYXRoKVxuICAgICAgOiBhd2FpdCBkZXRlY3RSZXBvTGluZUVuZGluZ3MoZ2V0Q3dkKCkpXG5cbiAgICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHdyaXRlVGV4dENvbnRlbnQoZnVsbEZpbGVQYXRoLCBjb250ZW50LCBlbmMsIGVuZGluZ3MhKVxuXG4gICAgLy8gVXBkYXRlIHJlYWQgdGltZXN0YW1wLCB0byBpbnZhbGlkYXRlIHN0YWxlIHdyaXRlc1xuICAgIHJlYWRGaWxlVGltZXN0YW1wc1tmdWxsRmlsZVBhdGhdID0gc3RhdFN5bmMoZnVsbEZpbGVQYXRoKS5tdGltZU1zXG5cbiAgICAvLyBMb2cgd2hlbiB3cml0aW5nIHRvIENMQVVERS5tZFxuICAgIGlmIChmdWxsRmlsZVBhdGguZW5kc1dpdGgoYCR7c2VwfUNMQVVERS5tZGApKSB7XG4gICAgICBsb2dFdmVudCgndGVuZ3Vfd3JpdGVfY2xhdWRlbWQnLCB7fSlcbiAgICB9XG5cbiAgICBpZiAob2xkQ29udGVudCkge1xuICAgICAgY29uc3QgcGF0Y2ggPSBnZXRQYXRjaCh7XG4gICAgICAgIGZpbGVQYXRoOiBmaWxlX3BhdGgsXG4gICAgICAgIGZpbGVDb250ZW50czogb2xkQ29udGVudCxcbiAgICAgICAgb2xkU3RyOiBvbGRDb250ZW50LFxuICAgICAgICBuZXdTdHI6IGNvbnRlbnQsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiAndXBkYXRlJyBhcyBjb25zdCxcbiAgICAgICAgZmlsZVBhdGg6IGZpbGVfcGF0aCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc3RydWN0dXJlZFBhdGNoOiBwYXRjaCxcbiAgICAgIH1cbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgdHlwZTogJ2NyZWF0ZScgYXMgY29uc3QsXG4gICAgICBmaWxlUGF0aDogZmlsZV9wYXRoLFxuICAgICAgY29udGVudCxcbiAgICAgIHN0cnVjdHVyZWRQYXRjaDogW10sXG4gICAgfVxuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoZGF0YSksXG4gICAgfVxuICB9LFxuICByZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoeyBmaWxlUGF0aCwgY29udGVudCwgdHlwZSB9KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICByZXR1cm4gYEZpbGUgY3JlYXRlZCBzdWNjZXNzZnVsbHkgYXQ6ICR7ZmlsZVBhdGh9YFxuICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgcmV0dXJuIGBUaGUgZmlsZSAke2ZpbGVQYXRofSBoYXMgYmVlbiB1cGRhdGVkLiBIZXJlJ3MgdGhlIHJlc3VsdCBvZiBydW5uaW5nIFxcYGNhdCAtblxcYCBvbiBhIHNuaXBwZXQgb2YgdGhlIGVkaXRlZCBmaWxlOlxuJHthZGRMaW5lTnVtYmVycyh7XG4gIGNvbnRlbnQ6XG4gICAgY29udGVudC5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IE1BWF9MSU5FU19UT19SRU5ERVJfRk9SX0FTU0lTVEFOVFxuICAgICAgPyBjb250ZW50XG4gICAgICAgICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAgICAgICAuc2xpY2UoMCwgTUFYX0xJTkVTX1RPX1JFTkRFUl9GT1JfQVNTSVNUQU5UKVxuICAgICAgICAgIC5qb2luKCdcXG4nKSArIFRSVU5DQVRFRF9NRVNTQUdFXG4gICAgICA6IGNvbnRlbnQsXG4gIHN0YXJ0TGluZTogMSxcbn0pfWBcbiAgICB9XG4gIH0sXG59IHNhdGlzZmllcyBUb29sPFxuICB0eXBlb2YgaW5wdXRTY2hlbWEsXG4gIHtcbiAgICB0eXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgZmlsZVBhdGg6IHN0cmluZ1xuICAgIGNvbnRlbnQ6IHN0cmluZ1xuICAgIHN0cnVjdHVyZWRQYXRjaDogSHVua1tdXG4gIH1cbj5cbiIsCiAgICAiZXhwb3J0IGNvbnN0IFBST01QVCA9IGBXcml0ZSBhIGZpbGUgdG8gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uIE92ZXJ3cml0ZXMgdGhlIGV4aXN0aW5nIGZpbGUgaWYgdGhlcmUgaXMgb25lLlxuXG5CZWZvcmUgdXNpbmcgdGhpcyB0b29sOlxuXG4xLiBVc2UgdGhlIFJlYWRGaWxlIHRvb2wgdG8gdW5kZXJzdGFuZCB0aGUgZmlsZSdzIGNvbnRlbnRzIGFuZCBjb250ZXh0XG5cbjIuIERpcmVjdG9yeSBWZXJpZmljYXRpb24gKG9ubHkgYXBwbGljYWJsZSB3aGVuIGNyZWF0aW5nIG5ldyBmaWxlcyk6XG4gICAtIFVzZSB0aGUgTFMgdG9vbCB0byB2ZXJpZnkgdGhlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyB0aGUgY29ycmVjdCBsb2NhdGlvbmBcblxuZXhwb3J0IGNvbnN0IERFU0NSSVBUSU9OID0gJ1dyaXRlIGEgZmlsZSB0byB0aGUgbG9jYWwgZmlsZXN5c3RlbS4nXG4iLAogICAgImltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IGJhc2VuYW1lLCBleHRuYW1lIH0gZnJvbSAncGF0aCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBVbmFyeUV2ZW50LFxuICB1c2VQZXJtaXNzaW9uUmVxdWVzdExvZ2dpbmcsXG59IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZy5qcydcbmltcG9ydCB7IHNhdmVQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vcGVybWlzc2lvbnMuanMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnYuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgbG9nVW5hcnlFdmVudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3VuYXJ5TG9nZ2luZy5qcydcbmltcG9ydCB7XG4gIHR5cGUgVG9vbFVzZUNvbmZpcm0sXG4gIHRvb2xVc2VDb25maXJtR2V0UHJlZml4LFxufSBmcm9tICcuLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7XG4gIFBlcm1pc3Npb25SZXF1ZXN0VGl0bGUsXG4gIHRleHRDb2xvckZvclJpc2tTY29yZSxcbn0gZnJvbSAnLi4vUGVybWlzc2lvblJlcXVlc3RUaXRsZS5qcydcbmltcG9ydCB7IEZpbGVFZGl0VG9vbERpZmYgfSBmcm9tICcuL0ZpbGVFZGl0VG9vbERpZmYuanMnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUZXJtaW5hbFNpemUuanMnXG5pbXBvcnQgeyBwYXRoSW5PcmlnaW5hbEN3ZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3Blcm1pc3Npb25zL2ZpbGVzeXN0ZW0uanMnXG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMocGF0aDogc3RyaW5nKSB7XG4gIC8vIE9ubHkgc2hvdyBkb24ndCBhc2sgYWdhaW4gb3B0aW9uIGZvciBlZGl0cyBpbiBvcmlnaW5hbCB3b3JraW5nIGRpcmVjdG9yeVxuICBjb25zdCBzaG93RG9udEFza0FnYWluT3B0aW9ucyA9IHBhdGhJbk9yaWdpbmFsQ3dkKHBhdGgpXG4gICAgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogXCJZZXMsIGFuZCBkb24ndCBhc2sgYWdhaW4gdGhpcyBzZXNzaW9uXCIsXG4gICAgICAgICAgdmFsdWU6ICd5ZXMtZG9udC1hc2stYWdhaW4nLFxuICAgICAgICB9LFxuICAgICAgXVxuICAgIDogW11cblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnWWVzJyxcbiAgICAgIHZhbHVlOiAneWVzJyxcbiAgICB9LFxuICAgIC4uLnNob3dEb250QXNrQWdhaW5PcHRpb25zLFxuICAgIHtcbiAgICAgIGxhYmVsOiBgTm8sIGFuZCB0ZWxsIENsYXVkZSB3aGF0IHRvIGRvIGRpZmZlcmVudGx5ICgke2NoYWxrLmJvbGQuaGV4KGdldFRoZW1lKCkud2FybmluZykoJ2VzYycpfSlgLFxuICAgICAgdmFsdWU6ICdubycsXG4gICAgfSxcbiAgXVxufVxuXG50eXBlIFByb3BzID0ge1xuICB0b29sVXNlQ29uZmlybTogVG9vbFVzZUNvbmZpcm1cbiAgb25Eb25lKCk6IHZvaWRcbiAgdmVyYm9zZTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZUVkaXRQZXJtaXNzaW9uUmVxdWVzdCh7XG4gIHRvb2xVc2VDb25maXJtLFxuICBvbkRvbmUsXG4gIHZlcmJvc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgY29uc3QgeyBmaWxlX3BhdGgsIG5ld19zdHJpbmcsIG9sZF9zdHJpbmcgfSA9IHRvb2xVc2VDb25maXJtLmlucHV0IGFzIHtcbiAgICBmaWxlX3BhdGg6IHN0cmluZ1xuICAgIG5ld19zdHJpbmc6IHN0cmluZ1xuICAgIG9sZF9zdHJpbmc6IHN0cmluZ1xuICB9XG5cbiAgY29uc3QgdW5hcnlFdmVudCA9IHVzZU1lbW88VW5hcnlFdmVudD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3N0cl9yZXBsYWNlX3NpbmdsZScsXG4gICAgICBsYW5ndWFnZV9uYW1lOiBleHRyYWN0TGFuZ3VhZ2VOYW1lKGZpbGVfcGF0aCksXG4gICAgfSksXG4gICAgW2ZpbGVfcGF0aF0sXG4gIClcblxuICB1c2VQZXJtaXNzaW9uUmVxdWVzdExvZ2dpbmcodG9vbFVzZUNvbmZpcm0sIHVuYXJ5RXZlbnQpXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgYm9yZGVyQ29sb3I9e3RleHRDb2xvckZvclJpc2tTY29yZSh0b29sVXNlQ29uZmlybS5yaXNrU2NvcmUpfVxuICAgICAgbWFyZ2luVG9wPXsxfVxuICAgICAgcGFkZGluZ0xlZnQ9ezF9XG4gICAgICBwYWRkaW5nUmlnaHQ9ezF9XG4gICAgICBwYWRkaW5nQm90dG9tPXsxfVxuICAgID5cbiAgICAgIDxQZXJtaXNzaW9uUmVxdWVzdFRpdGxlXG4gICAgICAgIHRpdGxlPVwiRWRpdCBmaWxlXCJcbiAgICAgICAgcmlza1Njb3JlPXt0b29sVXNlQ29uZmlybS5yaXNrU2NvcmV9XG4gICAgICAvPlxuICAgICAgPEZpbGVFZGl0VG9vbERpZmZcbiAgICAgICAgZmlsZV9wYXRoPXtmaWxlX3BhdGh9XG4gICAgICAgIG5ld19zdHJpbmc9e25ld19zdHJpbmd9XG4gICAgICAgIG9sZF9zdHJpbmc9e29sZF9zdHJpbmd9XG4gICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgIHdpZHRoPXtjb2x1bW5zIC0gMTJ9XG4gICAgICAvPlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIERvIHlvdSB3YW50IHRvIG1ha2UgdGhpcyBlZGl0IHRveycgJ31cbiAgICAgICAgICA8VGV4dCBib2xkPntiYXNlbmFtZShmaWxlX3BhdGgpfTwvVGV4dD4/XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgIG9wdGlvbnM9e2dldE9wdGlvbnMoZmlsZV9wYXRoKX1cbiAgICAgICAgICBvbkNoYW5nZT17bmV3VmFsdWUgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBjYXNlICd5ZXMnOlxuICAgICAgICAgICAgICAgIGV4dHJhY3RMYW5ndWFnZU5hbWUoZmlsZV9wYXRoKS50aGVuKGxhbmd1YWdlID0+IHtcbiAgICAgICAgICAgICAgICAgIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uX3R5cGU6ICdzdHJfcmVwbGFjZV9zaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogJ2FjY2VwdCcsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VfbmFtZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgY2FsbCBvbkRvbmUgYmVmb3JlIG9uQWxsb3cgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgICAgICAvLyBwZXJtaXNzaW9uIHJlcXVlc3QgYmVmb3JlIHdlIHJlbmRlciB0aGUgbmV4dCBtZXNzYWdlXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KCd0ZW1wb3JhcnknKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3llcy1kb250LWFzay1hZ2Fpbic6XG4gICAgICAgICAgICAgICAgZXh0cmFjdExhbmd1YWdlTmFtZShmaWxlX3BhdGgpLnRoZW4obGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nVW5hcnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3N0cl9yZXBsYWNlX3NpbmdsZScsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYWNjZXB0JyxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZV9uYW1lOiBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2lkOiB0b29sVXNlQ29uZmlybS5hc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBzYXZlUGVybWlzc2lvbihcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLnRvb2wsXG4gICAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5pbnB1dCxcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtR2V0UHJlZml4KHRvb2xVc2VDb25maXJtKSxcbiAgICAgICAgICAgICAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgY2FsbCBvbkRvbmUgYmVmb3JlIG9uQWxsb3cgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIHBlcm1pc3Npb24gcmVxdWVzdCBiZWZvcmUgd2UgcmVuZGVyIHRoZSBuZXh0IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KCdwZXJtYW5lbnQnKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAnbm8nOlxuICAgICAgICAgICAgICAgIGV4dHJhY3RMYW5ndWFnZU5hbWUoZmlsZV9wYXRoKS50aGVuKGxhbmd1YWdlID0+IHtcbiAgICAgICAgICAgICAgICAgIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uX3R5cGU6ICdzdHJfcmVwbGFjZV9zaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogJ3JlamVjdCcsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VfbmFtZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgY2FsbCBvbkRvbmUgYmVmb3JlIG9uQWxsb3cgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgICAgICAvLyBwZXJtaXNzaW9uIHJlcXVlc3QgYmVmb3JlIHdlIHJlbmRlciB0aGUgbmV4dCBtZXNzYWdlXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vblJlamVjdCgpXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdExhbmd1YWdlTmFtZShmaWxlX3BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZV9wYXRoKVxuICBpZiAoIWV4dCkge1xuICAgIHJldHVybiAndW5rbm93bidcbiAgfVxuICBjb25zdCBIaWdobGlnaHQgPSAoYXdhaXQgaW1wb3J0KCdoaWdobGlnaHQuanMnKSkgYXMgdW5rbm93biBhcyB7XG4gICAgZGVmYXVsdDogeyBnZXRMYW5ndWFnZShleHQ6IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfVxuICB9XG4gIHJldHVybiBIaWdobGlnaHQuZGVmYXVsdC5nZXRMYW5ndWFnZShleHQuc2xpY2UoMSkpPy5uYW1lID8/ICd1bmtub3duJ1xufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IGxvZ1VuYXJ5RXZlbnQsIENvbXBsZXRpb25UeXBlIH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgVG9vbFVzZUNvbmZpcm0gfSBmcm9tICcuLi9jb21wb25lbnRzL3Blcm1pc3Npb25zL1Blcm1pc3Npb25SZXF1ZXN0LmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJ1xuXG5leHBvcnQgdHlwZSBVbmFyeUV2ZW50ID0ge1xuICBjb21wbGV0aW9uX3R5cGU6IENvbXBsZXRpb25UeXBlXG4gIGxhbmd1YWdlX25hbWU6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPlxufVxuXG4vKipcbiAqIExvZ3MgcGVybWlzc2lvbiByZXF1ZXN0IGV2ZW50cyB1c2luZyBTdGF0c2lnIGFuZCB1bmFyeSBsb2dnaW5nLlxuICogSGFuZGxlcyBib3RoIHRoZSBTdGF0c2lnIGV2ZW50IGFuZCB0aGUgdW5hcnkgZXZlbnQgbG9nZ2luZy5cbiAqIENhbiBoYW5kbGUgZWl0aGVyIGEgc3RyaW5nIG9yIFByb21pc2U8c3RyaW5nPiBmb3IgbGFuZ3VhZ2VfbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyhcbiAgdG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtLFxuICB1bmFyeUV2ZW50OiBVbmFyeUV2ZW50LFxuKTogdm9pZCB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gTG9nIFN0YXRzaWcgZXZlbnRcbiAgICBsb2dFdmVudCgndGVuZ3VfdG9vbF91c2Vfc2hvd19wZXJtaXNzaW9uX3JlcXVlc3QnLCB7XG4gICAgICBtZXNzYWdlSUQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgIHRvb2xOYW1lOiB0b29sVXNlQ29uZmlybS50b29sLm5hbWUsXG4gICAgfSlcblxuICAgIC8vIEhhbmRsZSBzdHJpbmcgb3IgUHJvbWlzZSBsYW5ndWFnZSBuYW1lXG4gICAgY29uc3QgbGFuZ3VhZ2VQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuYXJ5RXZlbnQubGFuZ3VhZ2VfbmFtZSlcblxuICAgIC8vIExvZyB1bmFyeSBldmVudCBvbmNlIGxhbmd1YWdlIGlzIHJlc29sdmVkXG4gICAgbGFuZ3VhZ2VQcm9taXNlLnRoZW4obGFuZ3VhZ2UgPT4ge1xuICAgICAgbG9nVW5hcnlFdmVudCh7XG4gICAgICAgIGNvbXBsZXRpb25fdHlwZTogdW5hcnlFdmVudC5jb21wbGV0aW9uX3R5cGUsXG4gICAgICAgIGV2ZW50OiAncmVzcG9uc2UnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGxhbmd1YWdlX25hbWU6IGxhbmd1YWdlLFxuICAgICAgICAgIG1lc3NhZ2VfaWQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuICB9LCBbdG9vbFVzZUNvbmZpcm0sIHVuYXJ5RXZlbnRdKVxufVxuIiwKICAgICJpbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5cbmV4cG9ydCB0eXBlIENvbXBsZXRpb25UeXBlID1cbiAgfCAnc3RyX3JlcGxhY2Vfc2luZ2xlJ1xuICB8ICd3cml0ZV9maWxlX3NpbmdsZSdcbiAgfCAndG9vbF91c2Vfc2luZ2xlJ1xuXG50eXBlIExvZ0V2ZW50ID0ge1xuICBjb21wbGV0aW9uX3R5cGU6IENvbXBsZXRpb25UeXBlXG4gIGV2ZW50OiAnYWNjZXB0JyB8ICdyZWplY3QnIHwgJ3Jlc3BvbnNlJ1xuICBtZXRhZGF0YToge1xuICAgIGxhbmd1YWdlX25hbWU6IHN0cmluZ1xuICAgIG1lc3NhZ2VfaWQ6IHN0cmluZ1xuICAgIHBsYXRmb3JtOiBzdHJpbmdcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nVW5hcnlFdmVudChldmVudDogTG9nRXZlbnQpOiB2b2lkIHtcbiAgbG9nRXZlbnQoJ3Rlbmd1X3VuYXJ5X2V2ZW50Jywge1xuICAgIGV2ZW50OiBldmVudC5ldmVudCxcbiAgICBjb21wbGV0aW9uX3R5cGU6IGV2ZW50LmNvbXBsZXRpb25fdHlwZSxcbiAgICBsYW5ndWFnZV9uYW1lOiBldmVudC5tZXRhZGF0YS5sYW5ndWFnZV9uYW1lLFxuICAgIG1lc3NhZ2VfaWQ6IGV2ZW50Lm1ldGFkYXRhLm1lc3NhZ2VfaWQsXG4gICAgcGxhdGZvcm06IGV2ZW50Lm1ldGFkYXRhLnBsYXRmb3JtLFxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhblVzZVRvb2xGbiB9IGZyb20gJy4vaG9va3MvdXNlQ2FuVXNlVG9vbC5qcydcbmltcG9ydCB7IFRvb2wsIFRvb2xVc2VDb250ZXh0IH0gZnJvbSAnLi9Ub29sLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wsIGlucHV0U2NoZW1hIH0gZnJvbSAnLi90b29scy9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IEZpbGVFZGl0VG9vbCB9IGZyb20gJy4vdG9vbHMvRmlsZUVkaXRUb29sL0ZpbGVFZGl0VG9vbC5qcydcbmltcG9ydCB7IEZpbGVXcml0ZVRvb2wgfSBmcm9tICcuL3Rvb2xzL0ZpbGVXcml0ZVRvb2wvRmlsZVdyaXRlVG9vbC5qcydcbmltcG9ydCB7IE5vdGVib29rRWRpdFRvb2wgfSBmcm9tICcuL3Rvb2xzL05vdGVib29rRWRpdFRvb2wvTm90ZWJvb2tFZGl0VG9vbC5qcydcbmltcG9ydCB7IGdldENvbW1hbmRTdWJjb21tYW5kUHJlZml4LCBzcGxpdENvbW1hbmQgfSBmcm9tICcuL3V0aWxzL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Q3VycmVudFByb2plY3RDb25maWcsXG4gIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyxcbn0gZnJvbSAnLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBBYm9ydEVycm9yIH0gZnJvbSAnLi91dGlscy9lcnJvcnMuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgZ3JhbnRXcml0ZVBlcm1pc3Npb25Gb3JPcmlnaW5hbERpciB9IGZyb20gJy4vdXRpbHMvcGVybWlzc2lvbnMvZmlsZXN5c3RlbS5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4vdXRpbHMvc3RhdGUuanMnXG5cbi8vIENvbW1hbmRzIHRoYXQgYXJlIGtub3duIHRvIGJlIHNhZmUgZm9yIGV4ZWN1dGlvblxuY29uc3QgU0FGRV9DT01NQU5EUyA9IG5ldyBTZXQoW1xuICAnZ2l0IHN0YXR1cycsXG4gICdnaXQgZGlmZicsXG4gICdnaXQgbG9nJyxcbiAgJ2dpdCBicmFuY2gnLFxuICAncHdkJyxcbiAgJ3RyZWUnLFxuICAnZGF0ZScsXG4gICd3aGljaCcsXG5dKVxuXG5leHBvcnQgY29uc3QgYmFzaFRvb2xDb21tYW5kSGFzRXhhY3RNYXRjaFBlcm1pc3Npb24gPSAoXG4gIHRvb2w6IFRvb2wsXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYWxsb3dlZFRvb2xzOiBzdHJpbmdbXSxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoU0FGRV9DT01NQU5EUy5oYXMoY29tbWFuZCkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIENoZWNrIGV4YWN0IG1hdGNoIGZpcnN0XG4gIGlmIChhbGxvd2VkVG9vbHMuaW5jbHVkZXMoZ2V0UGVybWlzc2lvbktleSh0b29sLCB7IGNvbW1hbmQgfSwgbnVsbCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBDaGVjayBpZiBjb21tYW5kIGlzIGFuIGV4YWN0IG1hdGNoIHdpdGggYW4gYXBwcm92ZWQgcHJlZml4XG4gIGlmIChhbGxvd2VkVG9vbHMuaW5jbHVkZXMoZ2V0UGVybWlzc2lvbktleSh0b29sLCB7IGNvbW1hbmQgfSwgY29tbWFuZCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJhc2hUb29sQ29tbWFuZEhhc1Blcm1pc3Npb24gPSAoXG4gIHRvb2w6IFRvb2wsXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgcHJlZml4OiBzdHJpbmcgfCBudWxsLFxuICBhbGxvd2VkVG9vbHM6IHN0cmluZ1tdLFxuKTogYm9vbGVhbiA9PiB7XG4gIC8vIENoZWNrIGV4YWN0IG1hdGNoIGZpcnN0XG4gIGlmIChiYXNoVG9vbENvbW1hbmRIYXNFeGFjdE1hdGNoUGVybWlzc2lvbih0b29sLCBjb21tYW5kLCBhbGxvd2VkVG9vbHMpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gYWxsb3dlZFRvb2xzLmluY2x1ZGVzKGdldFBlcm1pc3Npb25LZXkodG9vbCwgeyBjb21tYW5kIH0sIHByZWZpeCkpXG59XG5cbmV4cG9ydCBjb25zdCBiYXNoVG9vbEhhc1Blcm1pc3Npb24gPSBhc3luYyAoXG4gIHRvb2w6IFRvb2wsXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgY29udGV4dDogVG9vbFVzZUNvbnRleHQsXG4gIGFsbG93ZWRUb29sczogc3RyaW5nW10sXG4gIGdldENvbW1hbmRTdWJjb21tYW5kUHJlZml4Rm4gPSBnZXRDb21tYW5kU3ViY29tbWFuZFByZWZpeCxcbik6IFByb21pc2U8UGVybWlzc2lvblJlc3VsdD4gPT4ge1xuICBpZiAoYmFzaFRvb2xDb21tYW5kSGFzRXhhY3RNYXRjaFBlcm1pc3Npb24odG9vbCwgY29tbWFuZCwgYWxsb3dlZFRvb2xzKSkge1xuICAgIC8vIFRoaXMgaXMgYW4gZXhhY3QgbWF0Y2ggZm9yIGEgY29tbWFuZCB0aGF0IGlzIGFsbG93ZWQsIHNvIHdlIGNhbiBza2lwIHRoZSBwcmVmaXggY2hlY2tcbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9XG5cbiAgY29uc3Qgc3ViQ29tbWFuZHMgPSBzcGxpdENvbW1hbmQoY29tbWFuZCkuZmlsdGVyKF8gPT4ge1xuICAgIC8vIERlbmltIGxpa2VzIHRvIGFkZCB0aGlzLCB3ZSBzdHJpcCBpdCBvdXQgc28gd2UgZG9uJ3QgbmVlZCB0byBwcm9tcHQgdGhlIHVzZXIgZWFjaCB0aW1lXG4gICAgaWYgKF8gPT09IGBjZCAke2dldEN3ZCgpfWApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxuICBjb25zdCBjb21tYW5kU3ViY29tbWFuZFByZWZpeCA9IGF3YWl0IGdldENvbW1hbmRTdWJjb21tYW5kUHJlZml4Rm4oXG4gICAgY29tbWFuZCxcbiAgICBjb250ZXh0LmFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gIClcbiAgaWYgKGNvbnRleHQuYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICB9XG5cbiAgaWYgKGNvbW1hbmRTdWJjb21tYW5kUHJlZml4ID09PSBudWxsKSB7XG4gICAgLy8gRmFpbCBjbG9zZWQgYW5kIGFzayBmb3IgdXNlciBhcHByb3ZhbCBpZiB0aGUgY29tbWFuZCBwcmVmaXggcXVlcnkgZmFpbGVkIChlLmcuIGR1ZSB0byBuZXR3b3JrIGVycm9yKVxuICAgIC8vIFRoaXMgaXMgTk9UIHRoZSBzYW1lIGFzIGBmdWxsQ29tbWFuZFByZWZpeC5jb21tYW5kUHJlZml4ID09PSBudWxsYCwgd2hpY2ggbWVhbnMgbm8gcHJlZml4IHdhcyBkZXRlY3RlZFxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogYENsYXVkZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgdG8gdXNlICR7dG9vbC5uYW1lfSwgYnV0IHlvdSBoYXZlbid0IGdyYW50ZWQgaXQgeWV0LmAsXG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbW1hbmRTdWJjb21tYW5kUHJlZml4LmNvbW1hbmRJbmplY3Rpb25EZXRlY3RlZCkge1xuICAgIC8vIE9ubHkgYWxsb3cgZXhhY3QgbWF0Y2hlcyBmb3IgcG90ZW50aWFsIGNvbW1hbmQgaW5qZWN0aW9uc1xuICAgIGlmIChiYXNoVG9vbENvbW1hbmRIYXNFeGFjdE1hdGNoUGVybWlzc2lvbih0b29sLCBjb21tYW5kLCBhbGxvd2VkVG9vbHMpKSB7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgQ2xhdWRlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucyB0byB1c2UgJHt0b29sLm5hbWV9LCBidXQgeW91IGhhdmVuJ3QgZ3JhbnRlZCBpdCB5ZXQuYCxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBjb21tYW5kLCBubyBuZWVkIHRvIHByb2Nlc3Mgc3ViQ29tbWFuZHNcbiAgaWYgKHN1YkNvbW1hbmRzLmxlbmd0aCA8IDIpIHtcbiAgICBpZiAoXG4gICAgICBiYXNoVG9vbENvbW1hbmRIYXNQZXJtaXNzaW9uKFxuICAgICAgICB0b29sLFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICBjb21tYW5kU3ViY29tbWFuZFByZWZpeC5jb21tYW5kUHJlZml4LFxuICAgICAgICBhbGxvd2VkVG9vbHMsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgQ2xhdWRlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucyB0byB1c2UgJHt0b29sLm5hbWV9LCBidXQgeW91IGhhdmVuJ3QgZ3JhbnRlZCBpdCB5ZXQuYCxcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFxuICAgIHN1YkNvbW1hbmRzLmV2ZXJ5KHN1YkNvbW1hbmQgPT4ge1xuICAgICAgY29uc3QgcHJlZml4UmVzdWx0ID1cbiAgICAgICAgY29tbWFuZFN1YmNvbW1hbmRQcmVmaXguc3ViY29tbWFuZFByZWZpeGVzLmdldChzdWJDb21tYW5kKVxuICAgICAgaWYgKHByZWZpeFJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHByZWZpeFJlc3VsdC5jb21tYW5kSW5qZWN0aW9uRGV0ZWN0ZWQpIHtcbiAgICAgICAgLy8gSWYgcHJlZml4IHJlc3VsdCBpcyBtaXNzaW5nIG9yIGNvbW1hbmQgaW5qZWN0aW9uIGlzIGRldGVjdGVkLCBhbHdheXMgYXNrIGZvciBwZXJtaXNzaW9uXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGJhc2hUb29sQ29tbWFuZEhhc1Blcm1pc3Npb24oXG4gICAgICAgIHRvb2wsXG4gICAgICAgIHN1YkNvbW1hbmQsXG4gICAgICAgIHByZWZpeFJlc3VsdCA/IHByZWZpeFJlc3VsdC5jb21tYW5kUHJlZml4IDogbnVsbCxcbiAgICAgICAgYWxsb3dlZFRvb2xzLFxuICAgICAgKVxuICAgICAgcmV0dXJuIGhhc1Blcm1pc3Npb25cbiAgICB9KVxuICApIHtcbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcmVzdWx0OiBmYWxzZSxcbiAgICBtZXNzYWdlOiBgQ2xhdWRlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucyB0byB1c2UgJHt0b29sLm5hbWV9LCBidXQgeW91IGhhdmVuJ3QgZ3JhbnRlZCBpdCB5ZXQuYCxcbiAgfVxufVxuXG50eXBlIFBlcm1pc3Npb25SZXN1bHQgPSB7IHJlc3VsdDogdHJ1ZSB9IHwgeyByZXN1bHQ6IGZhbHNlOyBtZXNzYWdlOiBzdHJpbmcgfVxuXG5leHBvcnQgY29uc3QgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2w6IENhblVzZVRvb2xGbiA9IGFzeW5jIChcbiAgdG9vbCxcbiAgaW5wdXQsXG4gIGNvbnRleHQsXG4gIF9hc3Npc3RhbnRNZXNzYWdlLFxuKTogUHJvbWlzZTxQZXJtaXNzaW9uUmVzdWx0PiA9PiB7XG4gIC8vIElmIHBlcm1pc3Npb25zIGFyZSBiZWluZyBza2lwcGVkLCBhbGxvdyBhbGwgdG9vbHNcbiAgaWYgKGNvbnRleHQub3B0aW9ucy5kYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucykge1xuICAgIHJldHVybiB7IHJlc3VsdDogdHJ1ZSB9XG4gIH1cblxuICBpZiAoY29udGV4dC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdG9vbCBuZWVkcyBwZXJtaXNzaW9uc1xuICB0cnkge1xuICAgIGlmICghdG9vbC5uZWVkc1Blcm1pc3Npb25zKGlucHV0IGFzIG5ldmVyKSkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihgRXJyb3IgY2hlY2tpbmcgcGVybWlzc2lvbnM6ICR7ZX1gKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIG1lc3NhZ2U6ICdFcnJvciBjaGVja2luZyBwZXJtaXNzaW9ucycgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgY29uc3QgYWxsb3dlZFRvb2xzID0gcHJvamVjdENvbmZpZy5hbGxvd2VkVG9vbHMgPz8gW11cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciBCYXNoVG9vbCB0byBhbGxvdyBibGFua2V0IGNvbW1hbmRzIHdpdGhvdXQgZXhwb3NpbmcgdGhlbSBpbiB0aGUgVUlcbiAgaWYgKHRvb2wgPT09IEJhc2hUb29sICYmIGFsbG93ZWRUb29scy5pbmNsdWRlcyhCYXNoVG9vbC5uYW1lKSkge1xuICAgIHJldHVybiB7IHJlc3VsdDogdHJ1ZSB9XG4gIH1cblxuICAvLyBUT0RPOiBNb3ZlIHRoaXMgaW50byB0b29sIGRlZmluaXRpb25zIChkb25lIGZvciByZWFkIHRvb2xzISlcbiAgc3dpdGNoICh0b29sKSB7XG4gICAgLy8gRm9yIGJhc2ggdG9vbCwgY2hlY2sgZWFjaCBzdWItY29tbWFuZCdzIHBlcm1pc3Npb25zIHNlcGFyYXRlbHlcbiAgICBjYXNlIEJhc2hUb29sOiB7XG4gICAgICAvLyBUaGUgdHlwZXMgaGF2ZSBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSB0b29sLFxuICAgICAgLy8gc28gd2UgY2FuIHNhZmVseSBwYXJzZSB0aGUgaW5wdXQgKGFzIG9wcG9zZWQgdG8gc2FmZVBhcnNlKS5cbiAgICAgIGNvbnN0IHsgY29tbWFuZCB9ID0gaW5wdXRTY2hlbWEucGFyc2UoaW5wdXQpXG4gICAgICByZXR1cm4gYXdhaXQgYmFzaFRvb2xIYXNQZXJtaXNzaW9uKHRvb2wsIGNvbW1hbmQsIGNvbnRleHQsIGFsbG93ZWRUb29scylcbiAgICB9XG4gICAgLy8gRm9yIGZpbGUgZWRpdGluZyB0b29scywgY2hlY2sgc2Vzc2lvbi1vbmx5IHBlcm1pc3Npb25zXG4gICAgY2FzZSBGaWxlRWRpdFRvb2w6XG4gICAgY2FzZSBGaWxlV3JpdGVUb29sOlxuICAgIGNhc2UgTm90ZWJvb2tFZGl0VG9vbDoge1xuICAgICAgLy8gVGhlIHR5cGVzIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSB0aGUgdG9vbCxcbiAgICAgIC8vIHNvIHdlIGNhbiBzYWZlbHkgcGFzcyB0aGlzIGluXG4gICAgICBpZiAoIXRvb2wubmVlZHNQZXJtaXNzaW9ucyhpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBDbGF1ZGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIHRvIHVzZSAke3Rvb2wubmFtZX0sIGJ1dCB5b3UgaGF2ZW4ndCBncmFudGVkIGl0IHlldC5gLFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3Igb3RoZXIgdG9vbHMsIGNoZWNrIHBlcnNpc3RlbnQgcGVybWlzc2lvbnNcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uS2V5ID0gZ2V0UGVybWlzc2lvbktleSh0b29sLCBpbnB1dCwgbnVsbClcbiAgICAgIGlmIChhbGxvd2VkVG9vbHMuaW5jbHVkZXMocGVybWlzc2lvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYENsYXVkZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgdG8gdXNlICR7dG9vbC5uYW1lfSwgYnV0IHlvdSBoYXZlbid0IGdyYW50ZWQgaXQgeWV0LmAsXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlUGVybWlzc2lvbihcbiAgdG9vbDogVG9vbCxcbiAgaW5wdXQ6IHsgW2s6IHN0cmluZ106IHVua25vd24gfSxcbiAgcHJlZml4OiBzdHJpbmcgfCBudWxsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGtleSA9IGdldFBlcm1pc3Npb25LZXkodG9vbCwgaW5wdXQsIHByZWZpeClcblxuICAvLyBGb3IgZmlsZSBlZGl0aW5nIHRvb2xzLCBzdG9yZSB3cml0ZSBwZXJtaXNzaW9ucyBvbmx5IGluIG1lbW9yeVxuICBpZiAoXG4gICAgdG9vbCA9PT0gRmlsZUVkaXRUb29sIHx8XG4gICAgdG9vbCA9PT0gRmlsZVdyaXRlVG9vbCB8fFxuICAgIHRvb2wgPT09IE5vdGVib29rRWRpdFRvb2xcbiAgKSB7XG4gICAgZ3JhbnRXcml0ZVBlcm1pc3Npb25Gb3JPcmlnaW5hbERpcigpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBGb3Igb3RoZXIgdG9vbHMsIHN0b3JlIHBlcm1pc3Npb25zIG9uIGRpc2tcbiAgY29uc3QgcHJvamVjdENvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgaWYgKHByb2plY3RDb25maWcuYWxsb3dlZFRvb2xzLmluY2x1ZGVzKGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHByb2plY3RDb25maWcuYWxsb3dlZFRvb2xzLnB1c2goa2V5KVxuICBwcm9qZWN0Q29uZmlnLmFsbG93ZWRUb29scy5zb3J0KClcblxuICBzYXZlQ3VycmVudFByb2plY3RDb25maWcocHJvamVjdENvbmZpZylcbn1cblxuZnVuY3Rpb24gZ2V0UGVybWlzc2lvbktleShcbiAgdG9vbDogVG9vbCxcbiAgaW5wdXQ6IHsgW2s6IHN0cmluZ106IHVua25vd24gfSxcbiAgcHJlZml4OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0b29sKSB7XG4gICAgY2FzZSBCYXNoVG9vbDpcbiAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIGAke0Jhc2hUb29sLm5hbWV9KCR7cHJlZml4fToqKWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBgJHtCYXNoVG9vbC5uYW1lfSgke0Jhc2hUb29sLnJlbmRlclRvb2xVc2VNZXNzYWdlKGlucHV0IGFzIG5ldmVyKX0pYFxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdG9vbC5uYW1lXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuXG5leHBvcnQgdHlwZSBSaXNrU2NvcmVDYXRlZ29yeSA9ICdsb3cnIHwgJ21vZGVyYXRlJyB8ICdoaWdoJ1xuXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnlGb3JSaXNrU2NvcmUocmlza1Njb3JlOiBudW1iZXIpOiBSaXNrU2NvcmVDYXRlZ29yeSB7XG4gIHJldHVybiByaXNrU2NvcmUgPj0gNzAgPyAnaGlnaCcgOiByaXNrU2NvcmUgPj0gMzAgPyAnbW9kZXJhdGUnIDogJ2xvdydcbn1cblxuZnVuY3Rpb24gY29sb3JTY2hlbWVGb3JSaXNrU2NvcmVDYXRlZ29yeShjYXRlZ29yeTogUmlza1Njb3JlQ2F0ZWdvcnkpOiB7XG4gIGhpZ2hsaWdodENvbG9yOiBzdHJpbmdcbiAgdGV4dENvbG9yOiBzdHJpbmdcbn0ge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcbiAgc3dpdGNoIChjYXRlZ29yeSkge1xuICAgIGNhc2UgJ2xvdyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoaWdobGlnaHRDb2xvcjogdGhlbWUuc3VjY2VzcyxcbiAgICAgICAgdGV4dENvbG9yOiB0aGVtZS5wZXJtaXNzaW9uLFxuICAgICAgfVxuICAgIGNhc2UgJ21vZGVyYXRlJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGVtZS53YXJuaW5nLFxuICAgICAgICB0ZXh0Q29sb3I6IHRoZW1lLndhcm5pbmcsXG4gICAgICB9XG4gICAgY2FzZSAnaGlnaCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoaWdobGlnaHRDb2xvcjogdGhlbWUuZXJyb3IsXG4gICAgICAgIHRleHRDb2xvcjogdGhlbWUuZXJyb3IsXG4gICAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRleHRDb2xvckZvclJpc2tTY29yZShyaXNrU2NvcmU6IG51bWJlciB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAocmlza1Njb3JlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKCkucGVybWlzc2lvblxuICB9XG4gIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnlGb3JSaXNrU2NvcmUocmlza1Njb3JlKVxuICByZXR1cm4gY29sb3JTY2hlbWVGb3JSaXNrU2NvcmVDYXRlZ29yeShjYXRlZ29yeSkudGV4dENvbG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQZXJtaXNzaW9uUmlza1Njb3JlKHtcbiAgcmlza1Njb3JlLFxufToge1xuICByaXNrU2NvcmU6IG51bWJlclxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnlGb3JSaXNrU2NvcmUocmlza1Njb3JlKVxuICByZXR1cm4gPFRleHQgY29sb3I9e3RleHRDb2xvckZvclJpc2tTY29yZShyaXNrU2NvcmUpfT5SaXNrOiB7Y2F0ZWdvcnl9PC9UZXh0PlxufVxuXG50eXBlIFByb3BzID0ge1xuICB0aXRsZTogc3RyaW5nXG4gIHJpc2tTY29yZTogbnVtYmVyIHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUGVybWlzc2lvblJlcXVlc3RUaXRsZSh7XG4gIHRpdGxlLFxuICByaXNrU2NvcmUsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICA8VGV4dCBib2xkIGNvbG9yPXtnZXRUaGVtZSgpLnBlcm1pc3Npb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L1RleHQ+XG4gICAgICB7cmlza1Njb3JlICE9PSBudWxsICYmIDxQZXJtaXNzaW9uUmlza1Njb3JlIHJpc2tTY29yZT17cmlza1Njb3JlfSAvPn1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RydWN0dXJlZERpZmYgfSBmcm9tICcuLi8uLi9TdHJ1Y3R1cmVkRGlmZi5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBpbnRlcnNwZXJzZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FycmF5LmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZXRQYXRjaCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2RpZmYuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGZpbGVfcGF0aDogc3RyaW5nXG4gIG5ld19zdHJpbmc6IHN0cmluZ1xuICBvbGRfc3RyaW5nOiBzdHJpbmdcbiAgdmVyYm9zZTogYm9vbGVhblxuICB1c2VCb3JkZXI/OiBib29sZWFuXG4gIHdpZHRoOiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVFZGl0VG9vbERpZmYoe1xuICBmaWxlX3BhdGgsXG4gIG5ld19zdHJpbmcsXG4gIG9sZF9zdHJpbmcsXG4gIHZlcmJvc2UsXG4gIHVzZUJvcmRlciA9IHRydWUsXG4gIHdpZHRoLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBmaWxlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoZXhpc3RzU3luYyhmaWxlX3BhdGgpID8gcmVhZEZpbGVTeW5jKGZpbGVfcGF0aCwgJ3V0ZjgnKSA6ICcnKSxcbiAgICBbZmlsZV9wYXRoXSxcbiAgKVxuICBjb25zdCBwYXRjaCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGdldFBhdGNoKHtcbiAgICAgICAgZmlsZVBhdGg6IGZpbGVfcGF0aCxcbiAgICAgICAgZmlsZUNvbnRlbnRzOiBmaWxlLFxuICAgICAgICBvbGRTdHI6IG9sZF9zdHJpbmcsXG4gICAgICAgIG5ld1N0cjogbmV3X3N0cmluZyxcbiAgICAgIH0pLFxuICAgIFtmaWxlX3BhdGgsIGZpbGUsIG9sZF9zdHJpbmcsIG5ld19zdHJpbmddLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIDxCb3hcbiAgICAgICAgYm9yZGVyQ29sb3I9e2dldFRoZW1lKCkuc2Vjb25kYXJ5Qm9yZGVyfVxuICAgICAgICBib3JkZXJTdHlsZT17dXNlQm9yZGVyID8gJ3JvdW5kJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIHBhZGRpbmdYPXsxfVxuICAgICAgPlxuICAgICAgICA8Qm94IHBhZGRpbmdCb3R0b209ezF9PlxuICAgICAgICAgIDxUZXh0IGJvbGQ+XG4gICAgICAgICAgICB7dmVyYm9zZSA/IGZpbGVfcGF0aCA6IHJlbGF0aXZlKGdldEN3ZCgpLCBmaWxlX3BhdGgpfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIHtpbnRlcnNwZXJzZShcbiAgICAgICAgICBwYXRjaC5tYXAoXyA9PiAoXG4gICAgICAgICAgICA8U3RydWN0dXJlZERpZmZcbiAgICAgICAgICAgICAga2V5PXtfLm5ld1N0YXJ0fVxuICAgICAgICAgICAgICBwYXRjaD17X31cbiAgICAgICAgICAgICAgZGltPXtmYWxzZX1cbiAgICAgICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKSxcbiAgICAgICAgICBpID0+IChcbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9IGtleT17YGVsbGlwc2lzLSR7aX1gfT5cbiAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBVbmFyeUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgc2F2ZVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9wZXJtaXNzaW9ucy5qcydcbmltcG9ydCB7IEJhc2hUb29sIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvQmFzaFRvb2wvQmFzaFRvb2wuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nIH0gZnJvbSAnLi4vaG9va3MuanMnXG5pbXBvcnQge1xuICB0eXBlIFRvb2xVc2VDb25maXJtLFxuICB0b29sVXNlQ29uZmlybUdldFByZWZpeCxcbn0gZnJvbSAnLi4vUGVybWlzc2lvblJlcXVlc3QuanMnXG5pbXBvcnQgeyBQZXJtaXNzaW9uUmVxdWVzdFRpdGxlIH0gZnJvbSAnLi4vUGVybWlzc2lvblJlcXVlc3RUaXRsZS5qcydcbmltcG9ydCB7IGxvZ1VuYXJ5UGVybWlzc2lvbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMuanMnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi8uLi9DdXN0b21TZWxlY3Qvc2VsZWN0LmpzJ1xuaW1wb3J0IHsgdG9vbFVzZU9wdGlvbnMgfSBmcm9tICcuLi90b29sVXNlT3B0aW9ucy5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgdG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtXG4gIG9uRG9uZSgpOiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCYXNoUGVybWlzc2lvblJlcXVlc3Qoe1xuICB0b29sVXNlQ29uZmlybSxcbiAgb25Eb25lLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICAvLyBvayB0byB1c2UgcGFyc2Ugc2luY2Ugd2UndmUgYWxyZWFkeSB2YWxpZGF0ZWQgYXJncyBlYXJsaWVyc1xuICBjb25zdCB7IGNvbW1hbmQgfSA9IEJhc2hUb29sLmlucHV0U2NoZW1hLnBhcnNlKHRvb2xVc2VDb25maXJtLmlucHV0KVxuXG4gIGNvbnN0IHVuYXJ5RXZlbnQgPSB1c2VNZW1vPFVuYXJ5RXZlbnQ+KFxuICAgICgpID0+ICh7IGNvbXBsZXRpb25fdHlwZTogJ3Rvb2xfdXNlX3NpbmdsZScsIGxhbmd1YWdlX25hbWU6ICdub25lJyB9KSxcbiAgICBbXSxcbiAgKVxuXG4gIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyh0b29sVXNlQ29uZmlybSwgdW5hcnlFdmVudClcblxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICBib3JkZXJDb2xvcj17dGhlbWUucGVybWlzc2lvbn1cbiAgICAgIG1hcmdpblRvcD17MX1cbiAgICAgIHBhZGRpbmdMZWZ0PXsxfVxuICAgICAgcGFkZGluZ1JpZ2h0PXsxfVxuICAgICAgcGFkZGluZ0JvdHRvbT17MX1cbiAgICA+XG4gICAgICA8UGVybWlzc2lvblJlcXVlc3RUaXRsZVxuICAgICAgICB0aXRsZT1cIkJhc2ggY29tbWFuZFwiXG4gICAgICAgIHJpc2tTY29yZT17dG9vbFVzZUNvbmZpcm0ucmlza1Njb3JlfVxuICAgICAgLz5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdYPXsyfSBwYWRkaW5nWT17MX0+XG4gICAgICAgIDxUZXh0PntCYXNoVG9vbC5yZW5kZXJUb29sVXNlTWVzc2FnZSh7IGNvbW1hbmQgfSl9PC9UZXh0PlxuICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+e3Rvb2xVc2VDb25maXJtLmRlc2NyaXB0aW9ufTwvVGV4dD5cbiAgICAgIDwvQm94PlxuXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgPFRleHQ+RG8geW91IHdhbnQgdG8gcHJvY2VlZD88L1RleHQ+XG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXt0b29sVXNlT3B0aW9ucyh7IHRvb2xVc2VDb25maXJtLCBjb21tYW5kIH0pfVxuICAgICAgICAgIG9uQ2hhbmdlPXtuZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3llcyc6XG4gICAgICAgICAgICAgICAgbG9nVW5hcnlQZXJtaXNzaW9uRXZlbnQoXG4gICAgICAgICAgICAgICAgICAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLFxuICAgICAgICAgICAgICAgICAgJ2FjY2VwdCcsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLm9uQWxsb3coJ3RlbXBvcmFyeScpXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICd5ZXMtZG9udC1hc2stYWdhaW4tcHJlZml4Jzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHRvb2xVc2VDb25maXJtR2V0UHJlZml4KHRvb2xVc2VDb25maXJtKVxuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGxvZ1VuYXJ5UGVybWlzc2lvbkV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0sXG4gICAgICAgICAgICAgICAgICAgICdhY2NlcHQnLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgc2F2ZVBlcm1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLnRvb2wsXG4gICAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLmlucHV0LFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICAgICAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KCdwZXJtYW5lbnQnKVxuICAgICAgICAgICAgICAgICAgICBvbkRvbmUoKVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICd5ZXMtZG9udC1hc2stYWdhaW4tZnVsbCc6XG4gICAgICAgICAgICAgICAgbG9nVW5hcnlQZXJtaXNzaW9uRXZlbnQoXG4gICAgICAgICAgICAgICAgICAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLFxuICAgICAgICAgICAgICAgICAgJ2FjY2VwdCcsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHNhdmVQZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0udG9vbCxcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLmlucHV0LFxuICAgICAgICAgICAgICAgICAgbnVsbCwgLy8gU2F2ZSB3aXRob3V0IHByZWZpeFxuICAgICAgICAgICAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KCdwZXJtYW5lbnQnKVxuICAgICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ25vJzpcbiAgICAgICAgICAgICAgICBsb2dVbmFyeVBlcm1pc3Npb25FdmVudChcbiAgICAgICAgICAgICAgICAgICd0b29sX3VzZV9zaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0sXG4gICAgICAgICAgICAgICAgICAncmVqZWN0JyxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0ub25SZWplY3QoKVxuICAgICAgICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBsb2dVbmFyeUV2ZW50LCBDb21wbGV0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYXJ5TG9nZ2luZy5qcydcbmltcG9ydCB7IFRvb2xVc2VDb25maXJtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL3V0aWxzL2Vudi5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHNpZy5qcydcblxudHlwZSBVbmFyeUV2ZW50VHlwZSA9IHtcbiAgY29tcGxldGlvbl90eXBlOiBDb21wbGV0aW9uVHlwZVxuICBsYW5ndWFnZV9uYW1lOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz5cbn1cblxuLyoqXG4gKiBMb2dzIHBlcm1pc3Npb24gcmVxdWVzdCBldmVudHMgdXNpbmcgU3RhdHNpZyBhbmQgdW5hcnkgbG9nZ2luZy5cbiAqIEhhbmRsZXMgYm90aCB0aGUgU3RhdHNpZyBldmVudCBhbmQgdGhlIHVuYXJ5IGV2ZW50IGxvZ2dpbmcuXG4gKiBDYW4gaGFuZGxlIGVpdGhlciBhIHN0cmluZyBvciBQcm9taXNlPHN0cmluZz4gZm9yIGxhbmd1YWdlX25hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQZXJtaXNzaW9uUmVxdWVzdExvZ2dpbmcoXG4gIHRvb2xVc2VDb25maXJtOiBUb29sVXNlQ29uZmlybSxcbiAgdW5hcnlFdmVudDogVW5hcnlFdmVudFR5cGUsXG4pOiB2b2lkIHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBMb2cgU3RhdHNpZyBldmVudFxuICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9zaG93X3Blcm1pc3Npb25fcmVxdWVzdCcsIHtcbiAgICAgIG1lc3NhZ2VJRDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgdG9vbE5hbWU6IHRvb2xVc2VDb25maXJtLnRvb2wubmFtZSxcbiAgICB9KVxuXG4gICAgLy8gSGFuZGxlIHN0cmluZyBvciBQcm9taXNlIGxhbmd1YWdlIG5hbWVcbiAgICBjb25zdCBsYW5ndWFnZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5hcnlFdmVudC5sYW5ndWFnZV9uYW1lKVxuXG4gICAgLy8gTG9nIHVuYXJ5IGV2ZW50IG9uY2UgbGFuZ3VhZ2UgaXMgcmVzb2x2ZWRcbiAgICBsYW5ndWFnZVByb21pc2UudGhlbihsYW5ndWFnZSA9PiB7XG4gICAgICBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgY29tcGxldGlvbl90eXBlOiB1bmFyeUV2ZW50LmNvbXBsZXRpb25fdHlwZSxcbiAgICAgICAgZXZlbnQ6ICdyZXNwb25zZScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgbGFuZ3VhZ2VfbmFtZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG4gIH0sIFt0b29sVXNlQ29uZmlybSwgdW5hcnlFdmVudF0pXG59XG4iLAogICAgImltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL3V0aWxzL2Vudi5qcydcbmltcG9ydCB7IENvbXBsZXRpb25UeXBlLCBsb2dVbmFyeUV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdW5hcnlMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgVG9vbFVzZUNvbmZpcm0gfSBmcm9tICcuL1Blcm1pc3Npb25SZXF1ZXN0LmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gbG9nVW5hcnlQZXJtaXNzaW9uRXZlbnQoXG4gIGNvbXBsZXRpb25fdHlwZTogQ29tcGxldGlvblR5cGUsXG4gIHtcbiAgICBhc3Npc3RhbnRNZXNzYWdlOiB7XG4gICAgICBtZXNzYWdlOiB7IGlkOiBtZXNzYWdlX2lkIH0sXG4gICAgfSxcbiAgfTogVG9vbFVzZUNvbmZpcm0sXG4gIGV2ZW50OiAnYWNjZXB0JyB8ICdyZWplY3QnLFxuKTogdm9pZCB7XG4gIGxvZ1VuYXJ5RXZlbnQoe1xuICAgIGNvbXBsZXRpb25fdHlwZSxcbiAgICBldmVudCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbGFuZ3VhZ2VfbmFtZTogJ25vbmUnLFxuICAgICAgbWVzc2FnZV9pZCxcbiAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgfSxcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgdHlwZSBPcHRpb24gfSBmcm9tICdAaW5ranMvdWknXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQge1xuICB0eXBlIFRvb2xVc2VDb25maXJtLFxuICB0b29sVXNlQ29uZmlybUdldFByZWZpeCxcbn0gZnJvbSAnLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IGlzVW5zYWZlQ29tcG91bmRDb21tYW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi8uLi91dGlscy9zdGF0ZS5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyB0eXBlIE9wdGlvblN1YnRyZWUgfSBmcm9tICcuLi9DdXN0b21TZWxlY3Qvc2VsZWN0LmpzJ1xuXG4vKipcbiAqIEdlbmVyYXRlcyBvcHRpb25zIGZvciB0aGUgdG9vbCB1c2UgY29uZmlybWF0aW9uIGRpYWxvZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbFVzZU9wdGlvbnMoe1xuICB0b29sVXNlQ29uZmlybSxcbiAgY29tbWFuZCxcbn06IHtcbiAgdG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtXG4gIGNvbW1hbmQ6IHN0cmluZ1xufSk6IChPcHRpb24gfCBPcHRpb25TdWJ0cmVlKVtdIHtcbiAgLy8gSGlkZSBcImRvbid0IGFzayBhZ2FpblwiIG9wdGlvbnMgaWYgdGhlIGNvbW1hbmQgaXMgYW4gdW5zYWZlIGNvbXBvdW5kIGNvbW1hbmQsIG9yIGEgcG90ZW50aWFsIGNvbW1hbmQgaW5qZWN0aW9uXG4gIGNvbnN0IHNob3dEb250QXNrQWdhaW5PcHRpb24gPVxuICAgICFpc1Vuc2FmZUNvbXBvdW5kQ29tbWFuZChjb21tYW5kKSAmJlxuICAgIHRvb2xVc2VDb25maXJtLmNvbW1hbmRQcmVmaXggJiZcbiAgICAhdG9vbFVzZUNvbmZpcm0uY29tbWFuZFByZWZpeC5jb21tYW5kSW5qZWN0aW9uRGV0ZWN0ZWRcbiAgY29uc3QgcHJlZml4ID0gdG9vbFVzZUNvbmZpcm1HZXRQcmVmaXgodG9vbFVzZUNvbmZpcm0pXG4gIGNvbnN0IHNob3dEb250QXNrQWdhaW5QcmVmaXhPcHRpb24gPSBzaG93RG9udEFza0FnYWluT3B0aW9uICYmIHByZWZpeCAhPT0gbnVsbFxuXG4gIGxldCBkb250U2hvd0FnYWluT3B0aW9uczogKE9wdGlvbiB8IE9wdGlvblN1YnRyZWUpW10gPSBbXVxuICBpZiAoc2hvd0RvbnRBc2tBZ2FpblByZWZpeE9wdGlvbikge1xuICAgIC8vIFByZWZpeCBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGZ1bGwgY29tbWFuZCBvcHRpb25cbiAgICBkb250U2hvd0FnYWluT3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGBZZXMsIGFuZCBkb24ndCBhc2sgYWdhaW4gZm9yICR7Y2hhbGsuYm9sZChwcmVmaXgpfSBjb21tYW5kcyBpbiAke2NoYWxrLmJvbGQoZ2V0Q3dkKCkpfWAsXG4gICAgICAgIHZhbHVlOiAneWVzLWRvbnQtYXNrLWFnYWluLXByZWZpeCcsXG4gICAgICB9LFxuICAgIF1cbiAgfSBlbHNlIGlmIChzaG93RG9udEFza0FnYWluT3B0aW9uKSB7XG4gICAgZG9udFNob3dBZ2Fpbk9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBgWWVzLCBhbmQgZG9uJ3QgYXNrIGFnYWluIGZvciAke2NoYWxrLmJvbGQoY29tbWFuZCl9IGNvbW1hbmRzIGluICR7Y2hhbGsuYm9sZChnZXRDd2QoKSl9YCxcbiAgICAgICAgdmFsdWU6ICd5ZXMtZG9udC1hc2stYWdhaW4tZnVsbCcsXG4gICAgICB9LFxuICAgIF1cbiAgfVxuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbGFiZWw6ICdZZXMnLFxuICAgICAgdmFsdWU6ICd5ZXMnLFxuICAgIH0sXG4gICAgLi4uZG9udFNob3dBZ2Fpbk9wdGlvbnMsXG4gICAge1xuICAgICAgbGFiZWw6IGBObywgYW5kIHRlbGwgQ2xhdWRlIHdoYXQgdG8gZG8gZGlmZmVyZW50bHkgKCR7Y2hhbGsuYm9sZC5oZXgoZ2V0VGhlbWUoKS53YXJuaW5nKSgnZXNjJyl9KWAsXG4gICAgICB2YWx1ZTogJ25vJyxcbiAgICB9LFxuICBdXG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICdAaW5ranMvdWknXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHtcbiAgUGVybWlzc2lvblJlcXVlc3RUaXRsZSxcbiAgdGV4dENvbG9yRm9yUmlza1Njb3JlLFxufSBmcm9tICcuL1Blcm1pc3Npb25SZXF1ZXN0VGl0bGUuanMnXG5pbXBvcnQgeyBsb2dVbmFyeUV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdW5hcnlMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBzYXZlUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL3Blcm1pc3Npb25zLmpzJ1xuaW1wb3J0IHtcbiAgdHlwZSBUb29sVXNlQ29uZmlybSxcbiAgdG9vbFVzZUNvbmZpcm1HZXRQcmVmaXgsXG59IGZyb20gJy4vUGVybWlzc2lvblJlcXVlc3QuanMnXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQge1xuICBVbmFyeUV2ZW50LFxuICB1c2VQZXJtaXNzaW9uUmVxdWVzdExvZ2dpbmcsXG59IGZyb20gJy4uLy4uL2hvb2tzL3VzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZy5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgdG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtXG4gIG9uRG9uZSgpOiB2b2lkXG4gIHZlcmJvc2U6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZhbGxiYWNrUGVybWlzc2lvblJlcXVlc3Qoe1xuICB0b29sVXNlQ29uZmlybSxcbiAgb25Eb25lLFxuICB2ZXJib3NlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICAvLyBUT0RPOiBBdm9pZCB0aGVzZSBzcGVjaWFsIGNhc2VzXG4gIGNvbnN0IG9yaWdpbmFsVXNlckZhY2luZ05hbWUgPSB0b29sVXNlQ29uZmlybS50b29sLnVzZXJGYWNpbmdOYW1lKFxuICAgIHRvb2xVc2VDb25maXJtLmlucHV0IGFzIG5ldmVyLFxuICApXG4gIGNvbnN0IHVzZXJGYWNpbmdOYW1lID0gb3JpZ2luYWxVc2VyRmFjaW5nTmFtZS5lbmRzV2l0aCgnIChNQ1ApJylcbiAgICA/IG9yaWdpbmFsVXNlckZhY2luZ05hbWUuc2xpY2UoMCwgLTYpXG4gICAgOiBvcmlnaW5hbFVzZXJGYWNpbmdOYW1lXG5cbiAgY29uc3QgdW5hcnlFdmVudCA9IHVzZU1lbW88VW5hcnlFdmVudD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3Rvb2xfdXNlX3NpbmdsZScsXG4gICAgICBsYW5ndWFnZV9uYW1lOiAnbm9uZScsXG4gICAgfSksXG4gICAgW10sXG4gIClcblxuICB1c2VQZXJtaXNzaW9uUmVxdWVzdExvZ2dpbmcodG9vbFVzZUNvbmZpcm0sIHVuYXJ5RXZlbnQpXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgYm9yZGVyQ29sb3I9e3RleHRDb2xvckZvclJpc2tTY29yZSh0b29sVXNlQ29uZmlybS5yaXNrU2NvcmUpfVxuICAgICAgbWFyZ2luVG9wPXsxfVxuICAgICAgcGFkZGluZ0xlZnQ9ezF9XG4gICAgICBwYWRkaW5nUmlnaHQ9ezF9XG4gICAgICBwYWRkaW5nQm90dG9tPXsxfVxuICAgID5cbiAgICAgIDxQZXJtaXNzaW9uUmVxdWVzdFRpdGxlXG4gICAgICAgIHRpdGxlPVwiVG9vbCB1c2VcIlxuICAgICAgICByaXNrU2NvcmU9e3Rvb2xVc2VDb25maXJtLnJpc2tTY29yZX1cbiAgICAgIC8+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWD17Mn0gcGFkZGluZ1k9ezF9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7dXNlckZhY2luZ05hbWV9KFxuICAgICAgICAgIHt0b29sVXNlQ29uZmlybS50b29sLnJlbmRlclRvb2xVc2VNZXNzYWdlKFxuICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0uaW5wdXQgYXMgbmV2ZXIsXG4gICAgICAgICAgICB7IHZlcmJvc2UgfSxcbiAgICAgICAgICApfVxuICAgICAgICAgIClcbiAgICAgICAgICB7b3JpZ2luYWxVc2VyRmFjaW5nTmFtZS5lbmRzV2l0aCgnIChNQ1ApJykgPyAoXG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+IChNQ1ApPC9UZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9Pnt0b29sVXNlQ29uZmlybS5kZXNjcmlwdGlvbn08L1RleHQ+XG4gICAgICA8L0JveD5cblxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIDxUZXh0PkRvIHlvdSB3YW50IHRvIHByb2NlZWQ/PC9UZXh0PlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ1llcycsXG4gICAgICAgICAgICAgIHZhbHVlOiAneWVzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiBgWWVzLCBhbmQgZG9uJ3QgYXNrIGFnYWluIGZvciAke2NoYWxrLmJvbGQodXNlckZhY2luZ05hbWUpfSBjb21tYW5kcyBpbiAke2NoYWxrLmJvbGQoZ2V0Q3dkKCkpfWAsXG4gICAgICAgICAgICAgIHZhbHVlOiAneWVzLWRvbnQtYXNrLWFnYWluJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiBgTm8sIGFuZCB0ZWxsIENsYXVkZSB3aGF0IHRvIGRvIGRpZmZlcmVudGx5ICgke2NoYWxrLmJvbGQuaGV4KGdldFRoZW1lKCkud2FybmluZykoJ2VzYycpfSlgLFxuICAgICAgICAgICAgICB2YWx1ZTogJ25vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBvbkNoYW5nZT17bmV3VmFsdWUgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBjYXNlICd5ZXMnOlxuICAgICAgICAgICAgICAgIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYWNjZXB0JyxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLm9uQWxsb3coJ3RlbXBvcmFyeScpXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICd5ZXMtZG9udC1hc2stYWdhaW4nOlxuICAgICAgICAgICAgICAgIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYWNjZXB0JyxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHNhdmVQZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0udG9vbCxcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLmlucHV0LFxuICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm1HZXRQcmVmaXgodG9vbFVzZUNvbmZpcm0pLFxuICAgICAgICAgICAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KCdwZXJtYW5lbnQnKVxuICAgICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ25vJzpcbiAgICAgICAgICAgICAgICBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3Rvb2xfdXNlX3NpbmdsZScsXG4gICAgICAgICAgICAgICAgICBldmVudDogJ3JlamVjdCcsXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZV9uYW1lOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vblJlamVjdCgpXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHNlbmROb3RpZmljYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9ub3RpZmllci5qcydcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdsb2Rhc2gtZXMnXG5cbi8vIFRoZSB0aW1lIHRocmVzaG9sZCBpbiBtaWxsaXNlY29uZHMgZm9yIGNvbnNpZGVyaW5nIGFuIGludGVyYWN0aW9uIFwicmVjZW50XCIgKDYgc2Vjb25kcylcbmNvbnN0IERFRkFVTFRfSU5URVJBQ1RJT05fVEhSRVNIT0xEX01TID0gNjAwMFxuXG5jb25zdCBTVEFURSA9IHtcbiAgbGFzdEludGVyYWN0aW9uVGltZTogRGF0ZS5ub3coKSxcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGFzdEludGVyYWN0aW9uVGltZSgpOiB2b2lkIHtcbiAgU1RBVEUubGFzdEludGVyYWN0aW9uVGltZSA9IERhdGUubm93KClcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVNpbmNlTGFzdEludGVyYWN0aW9uKCk6IG51bWJlciB7XG4gIHJldHVybiBEYXRlLm5vdygpIC0gU1RBVEUubGFzdEludGVyYWN0aW9uVGltZVxufVxuXG5mdW5jdGlvbiBoYXNSZWNlbnRJbnRlcmFjdGlvbih0aHJlc2hvbGQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0VGltZVNpbmNlTGFzdEludGVyYWN0aW9uKCkgPCB0aHJlc2hvbGRcbn1cblxuZnVuY3Rpb24gc2hvdWxkTm90aWZ5KHRocmVzaG9sZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmICFoYXNSZWNlbnRJbnRlcmFjdGlvbih0aHJlc2hvbGQpXG59XG5cbi8vIFN0YXJ0IHRyYWNraW5nIHRoZSB0aW1lIG9mIHRoZSB1c2VyJ3MgbGFzdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBhcHBcbmNvbnN0IGluaXQgPSBtZW1vaXplKCgpID0+IHByb2Nlc3Muc3RkaW4ub24oJ2RhdGEnLCB1cGRhdGVMYXN0SW50ZXJhY3Rpb25UaW1lKSlcblxuLyoqXG4gKiBIb29rIHRoYXQgbWFuYWdlcyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgYWZ0ZXIgYSB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBTaG93cyBhIG5vdGlmaWNhdGlvbiBpbiB0d28gY2FzZXM6XG4gKiAxLiBJbW1lZGlhdGVseSBpZiB0aGUgYXBwIGhhcyBiZWVuIGlkbGUgZm9yIGxvbmdlciB0aGFuIHRoZSB0aHJlc2hvbGRcbiAqIDIuIEFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dCBpZiB0aGUgdXNlciBkb2Vzbid0IGludGVyYWN0IHdpdGhpbiB0aGF0IHRpbWVcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBub3RpZmljYXRpb24gbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0gdGltZW91dCAtIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdHMgdG8gNjAwMG1zKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTm90aWZ5QWZ0ZXJUaW1lb3V0KFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIHRpbWVvdXQ6IG51bWJlciA9IERFRkFVTFRfSU5URVJBQ1RJT05fVEhSRVNIT0xEX01TLFxuKTogdm9pZCB7XG4gIC8vIFJlc2V0IGludGVyYWN0aW9uIHRpbWUgd2hlbiBob29rIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCByZXF1ZXN0c1xuICAvLyB0aGF0IHRvb2sgYSBsb25nIHRpbWUgdG8gY29tcGxldGUgZG9uJ3QgcG9wIHVwIGEgbm90aWZpY2F0aW9uIHJpZ2h0IGF3YXlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbml0KClcbiAgICB1cGRhdGVMYXN0SW50ZXJhY3Rpb25UaW1lKClcbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgaGFzTm90aWZpZWQgPSBmYWxzZVxuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHNob3VsZE5vdGlmeSh0aW1lb3V0KSAmJiAhaGFzTm90aWZpZWQpIHtcbiAgICAgICAgaGFzTm90aWZpZWQgPSB0cnVlXG4gICAgICAgIHNlbmROb3RpZmljYXRpb24oe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSwgdGltZW91dClcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpXG4gIH0sIFttZXNzYWdlLCB0aW1lb3V0XSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCB7IGJhc2VuYW1lLCBleHRuYW1lIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQge1xuICBQZXJtaXNzaW9uUmVxdWVzdFRpdGxlLFxuICB0ZXh0Q29sb3JGb3JSaXNrU2NvcmUsXG59IGZyb20gJy4uL1Blcm1pc3Npb25SZXF1ZXN0VGl0bGUuanMnXG5pbXBvcnQgeyBsb2dVbmFyeUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdW5hcnlMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgc2F2ZVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9wZXJtaXNzaW9ucy5qcydcbmltcG9ydCB7XG4gIHR5cGUgVG9vbFVzZUNvbmZpcm0sXG4gIHRvb2xVc2VDb25maXJtR2V0UHJlZml4LFxufSBmcm9tICcuLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdmcydcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7XG4gIFVuYXJ5RXZlbnQsXG4gIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyxcbn0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgRmlsZVdyaXRlVG9vbERpZmYgfSBmcm9tICcuL0ZpbGVXcml0ZVRvb2xEaWZmLmpzJ1xuaW1wb3J0IHsgdXNlVGVybWluYWxTaXplIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICB0b29sVXNlQ29uZmlybTogVG9vbFVzZUNvbmZpcm1cbiAgb25Eb25lKCk6IHZvaWRcbiAgdmVyYm9zZTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZVdyaXRlUGVybWlzc2lvblJlcXVlc3Qoe1xuICB0b29sVXNlQ29uZmlybSxcbiAgb25Eb25lLFxuICB2ZXJib3NlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGZpbGVfcGF0aCwgY29udGVudCB9ID0gdG9vbFVzZUNvbmZpcm0uaW5wdXQgYXMge1xuICAgIGZpbGVfcGF0aDogc3RyaW5nXG4gICAgY29udGVudDogc3RyaW5nXG4gIH1cbiAgY29uc3QgZmlsZUV4aXN0cyA9IHVzZU1lbW8oKCkgPT4gZXhpc3RzU3luYyhmaWxlX3BhdGgpLCBbZmlsZV9wYXRoXSlcbiAgY29uc3QgdW5hcnlFdmVudCA9IHVzZU1lbW88VW5hcnlFdmVudD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3dyaXRlX2ZpbGVfc2luZ2xlJyxcbiAgICAgIGxhbmd1YWdlX25hbWU6IGV4dHJhY3RMYW5ndWFnZU5hbWUoZmlsZV9wYXRoKSxcbiAgICB9KSxcbiAgICBbZmlsZV9wYXRoXSxcbiAgKVxuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyh0b29sVXNlQ29uZmlybSwgdW5hcnlFdmVudClcblxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICBib3JkZXJDb2xvcj17dGV4dENvbG9yRm9yUmlza1Njb3JlKHRvb2xVc2VDb25maXJtLnJpc2tTY29yZSl9XG4gICAgICBtYXJnaW5Ub3A9ezF9XG4gICAgICBwYWRkaW5nTGVmdD17MX1cbiAgICAgIHBhZGRpbmdSaWdodD17MX1cbiAgICAgIHBhZGRpbmdCb3R0b209ezF9XG4gICAgPlxuICAgICAgPFBlcm1pc3Npb25SZXF1ZXN0VGl0bGVcbiAgICAgICAgdGl0bGU9e2Ake2ZpbGVFeGlzdHMgPyAnRWRpdCcgOiAnQ3JlYXRlJ30gZmlsZWB9XG4gICAgICAgIHJpc2tTY29yZT17dG9vbFVzZUNvbmZpcm0ucmlza1Njb3JlfVxuICAgICAgLz5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8RmlsZVdyaXRlVG9vbERpZmZcbiAgICAgICAgICBmaWxlX3BhdGg9e2ZpbGVfcGF0aH1cbiAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxuICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgICAgd2lkdGg9e2NvbHVtbnMgLSAxMn1cbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIERvIHlvdSB3YW50IHRvIHtmaWxlRXhpc3RzID8gJ21ha2UgdGhpcyBlZGl0IHRvJyA6ICdjcmVhdGUnfXsnICd9XG4gICAgICAgICAgPFRleHQgYm9sZD57YmFzZW5hbWUoZmlsZV9wYXRoKX08L1RleHQ+P1xuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnWWVzJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd5ZXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6IFwiWWVzLCBhbmQgZG9uJ3QgYXNrIGFnYWluIHRoaXMgc2Vzc2lvblwiLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3llcy1kb250LWFzay1hZ2FpbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogYE5vLCBhbmQgdGVsbCBDbGF1ZGUgd2hhdCB0byBkbyBkaWZmZXJlbnRseSAoJHtjaGFsay5ib2xkLmhleChnZXRUaGVtZSgpLndhcm5pbmcpKCdlc2MnKX0pYCxcbiAgICAgICAgICAgICAgdmFsdWU6ICdubycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgb25DaGFuZ2U9e25ld1ZhbHVlID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgY2FzZSAneWVzJzpcbiAgICAgICAgICAgICAgICBleHRyYWN0TGFuZ3VhZ2VOYW1lKGZpbGVfcGF0aCkudGhlbihsYW5ndWFnZSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90eXBlOiAnd3JpdGVfZmlsZV9zaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogJ2FjY2VwdCcsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VfbmFtZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0ub25BbGxvdygndGVtcG9yYXJ5JylcbiAgICAgICAgICAgICAgICBvbkRvbmUoKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3llcy1kb250LWFzay1hZ2Fpbic6XG4gICAgICAgICAgICAgICAgZXh0cmFjdExhbmd1YWdlTmFtZShmaWxlX3BhdGgpLnRoZW4obGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nVW5hcnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3dyaXRlX2ZpbGVfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdhY2NlcHQnLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlX25hbWU6IGxhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHNhdmVQZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0udG9vbCxcbiAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLmlucHV0LFxuICAgICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm1HZXRQcmVmaXgodG9vbFVzZUNvbmZpcm0pLFxuICAgICAgICAgICAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KCdwZXJtYW5lbnQnKVxuICAgICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ25vJzpcbiAgICAgICAgICAgICAgICBleHRyYWN0TGFuZ3VhZ2VOYW1lKGZpbGVfcGF0aCkudGhlbihsYW5ndWFnZSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90eXBlOiAnd3JpdGVfZmlsZV9zaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogJ3JlamVjdCcsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VfbmFtZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0ub25SZWplY3QoKVxuICAgICAgICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdExhbmd1YWdlTmFtZShmaWxlX3BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZV9wYXRoKVxuICBpZiAoIWV4dCkge1xuICAgIHJldHVybiAndW5rbm93bidcbiAgfVxuICBjb25zdCBIaWdobGlnaHQgPSAoYXdhaXQgaW1wb3J0KCdoaWdobGlnaHQuanMnKSkgYXMgdW5rbm93biBhcyB7XG4gICAgZGVmYXVsdDogeyBnZXRMYW5ndWFnZShleHQ6IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfVxuICB9XG4gIHJldHVybiBIaWdobGlnaHQuZGVmYXVsdC5nZXRMYW5ndWFnZShleHQuc2xpY2UoMSkpPy5uYW1lID8/ICd1bmtub3duJ1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RydWN0dXJlZERpZmYgfSBmcm9tICcuLi8uLi9TdHJ1Y3R1cmVkRGlmZi5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBpbnRlcnNwZXJzZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FycmF5LmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgeyBleHRuYW1lLCByZWxhdGl2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBkZXRlY3RGaWxlRW5jb2RpbmcgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlLmpzJ1xuaW1wb3J0IHsgSGlnaGxpZ2h0ZWRDb2RlIH0gZnJvbSAnLi4vLi4vSGlnaGxpZ2h0ZWRDb2RlLmpzJ1xuaW1wb3J0IHsgZ2V0UGF0Y2ggfSBmcm9tICcuLi8uLi8uLi91dGlscy9kaWZmLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBmaWxlX3BhdGg6IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbiAgdmVyYm9zZTogYm9vbGVhblxuICB3aWR0aDogbnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWxlV3JpdGVUb29sRGlmZih7XG4gIGZpbGVfcGF0aCxcbiAgY29udGVudCxcbiAgdmVyYm9zZSxcbiAgd2lkdGgsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IGZpbGVFeGlzdHMgPSB1c2VNZW1vKCgpID0+IGV4aXN0c1N5bmMoZmlsZV9wYXRoKSwgW2ZpbGVfcGF0aF0pXG4gIGNvbnN0IG9sZENvbnRlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWZpbGVFeGlzdHMpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBjb25zdCBlbmMgPSBkZXRlY3RGaWxlRW5jb2RpbmcoZmlsZV9wYXRoKVxuICAgIHJldHVybiByZWFkRmlsZVN5bmMoZmlsZV9wYXRoLCBlbmMpXG4gIH0sIFtmaWxlX3BhdGgsIGZpbGVFeGlzdHNdKVxuICBjb25zdCBodW5rcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIGdldFBhdGNoKHtcbiAgICAgIGZpbGVQYXRoOiBmaWxlX3BhdGgsXG4gICAgICBmaWxlQ29udGVudHM6IG9sZENvbnRlbnQsXG4gICAgICBvbGRTdHI6IG9sZENvbnRlbnQsXG4gICAgICBuZXdTdHI6IGNvbnRlbnQsXG4gICAgfSlcbiAgfSwgW2ZpbGVFeGlzdHMsIGZpbGVfcGF0aCwgb2xkQ29udGVudCwgY29udGVudF0pXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBib3JkZXJDb2xvcj17Z2V0VGhlbWUoKS5zZWNvbmRhcnlCb3JkZXJ9XG4gICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgcGFkZGluZ1g9ezF9XG4gICAgPlxuICAgICAgPEJveCBwYWRkaW5nQm90dG9tPXsxfT5cbiAgICAgICAgPFRleHQgYm9sZD57dmVyYm9zZSA/IGZpbGVfcGF0aCA6IHJlbGF0aXZlKGdldEN3ZCgpLCBmaWxlX3BhdGgpfTwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgICAge2h1bmtzID8gKFxuICAgICAgICBpbnRlcnNwZXJzZShcbiAgICAgICAgICBodW5rcy5tYXAoXyA9PiAoXG4gICAgICAgICAgICA8U3RydWN0dXJlZERpZmZcbiAgICAgICAgICAgICAga2V5PXtfLm5ld1N0YXJ0fVxuICAgICAgICAgICAgICBwYXRjaD17X31cbiAgICAgICAgICAgICAgZGltPXtmYWxzZX1cbiAgICAgICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKSxcbiAgICAgICAgICBpID0+IChcbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRUaGVtZSgpLnNlY29uZGFyeVRleHR9IGtleT17YGVsbGlwc2lzLSR7aX1gfT5cbiAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgKSA6IChcbiAgICAgICAgPEhpZ2hsaWdodGVkQ29kZVxuICAgICAgICAgIGNvZGU9e2NvbnRlbnQgfHwgJyhObyBjb250ZW50KSd9XG4gICAgICAgICAgbGFuZ3VhZ2U9e2V4dG5hbWUoZmlsZV9wYXRoKS5zbGljZSgxKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQge1xuICBQZXJtaXNzaW9uUmVxdWVzdFRpdGxlLFxuICB0ZXh0Q29sb3JGb3JSaXNrU2NvcmUsXG59IGZyb20gJy4uL1Blcm1pc3Npb25SZXF1ZXN0VGl0bGUuanMnXG5pbXBvcnQgeyBsb2dVbmFyeUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdW5hcnlMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHtcbiAgdHlwZSBQZXJtaXNzaW9uUmVxdWVzdFByb3BzLFxuICB0eXBlIFRvb2xVc2VDb25maXJtLFxufSBmcm9tICcuLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7XG4gIFVuYXJ5RXZlbnQsXG4gIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyxcbn0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nLmpzJ1xuaW1wb3J0IHsgRmlsZUVkaXRUb29sIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvRmlsZUVkaXRUb29sL0ZpbGVFZGl0VG9vbC5qcydcbmltcG9ydCB7IEZpbGVXcml0ZVRvb2wgfSBmcm9tICcuLi8uLi8uLi90b29scy9GaWxlV3JpdGVUb29sL0ZpbGVXcml0ZVRvb2wuanMnXG5pbXBvcnQgeyBHcmVwVG9vbCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xzL0dyZXBUb29sL0dyZXBUb29sLmpzJ1xuaW1wb3J0IHsgR2xvYlRvb2wgfSBmcm9tICcuLi8uLi8uLi90b29scy9HbG9iVG9vbC9HbG9iVG9vbC5qcydcbmltcG9ydCB7IExTVG9vbCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xzL2xzVG9vbC9sc1Rvb2wuanMnXG5pbXBvcnQgeyBGaWxlUmVhZFRvb2wgfSBmcm9tICcuLi8uLi8uLi90b29scy9GaWxlUmVhZFRvb2wvRmlsZVJlYWRUb29sLmpzJ1xuaW1wb3J0IHsgTm90ZWJvb2tFZGl0VG9vbCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xzL05vdGVib29rRWRpdFRvb2wvTm90ZWJvb2tFZGl0VG9vbC5qcydcbmltcG9ydCB7IE5vdGVib29rUmVhZFRvb2wgfSBmcm9tICcuLi8uLi8uLi90b29scy9Ob3RlYm9va1JlYWRUb29sL05vdGVib29rUmVhZFRvb2wuanMnXG5pbXBvcnQgeyBGYWxsYmFja1Blcm1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vRmFsbGJhY2tQZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7XG4gIGdyYW50V3JpdGVQZXJtaXNzaW9uRm9yT3JpZ2luYWxEaXIsXG4gIHBhdGhJbk9yaWdpbmFsQ3dkLFxuICB0b0Fic29sdXRlUGF0aCxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvZmlsZXN5c3RlbS5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0YXRlLmpzJ1xuXG5mdW5jdGlvbiBwYXRoQXJnTmFtZUZvclRvb2xVc2UodG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAodG9vbFVzZUNvbmZpcm0udG9vbCkge1xuICAgIGNhc2UgRmlsZVdyaXRlVG9vbDpcbiAgICBjYXNlIEZpbGVFZGl0VG9vbDpcbiAgICBjYXNlIEZpbGVSZWFkVG9vbDoge1xuICAgICAgcmV0dXJuICdmaWxlX3BhdGgnXG4gICAgfVxuICAgIGNhc2UgR2xvYlRvb2w6XG4gICAgY2FzZSBHcmVwVG9vbDpcbiAgICBjYXNlIExTVG9vbDoge1xuICAgICAgcmV0dXJuICdwYXRoJ1xuICAgIH1cbiAgICBjYXNlIE5vdGVib29rRWRpdFRvb2w6XG4gICAgY2FzZSBOb3RlYm9va1JlYWRUb29sOiB7XG4gICAgICByZXR1cm4gJ25vdGVib29rX3BhdGgnXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzTXVsdGlGaWxlKHRvb2xVc2VDb25maXJtOiBUb29sVXNlQ29uZmlybSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKHRvb2xVc2VDb25maXJtLnRvb2wpIHtcbiAgICBjYXNlIEdsb2JUb29sOlxuICAgIGNhc2UgR3JlcFRvb2w6XG4gICAgY2FzZSBMU1Rvb2w6IHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBwYXRoRnJvbVRvb2xVc2UodG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHBhdGhBcmdOYW1lID0gcGF0aEFyZ05hbWVGb3JUb29sVXNlKHRvb2xVc2VDb25maXJtKVxuICBjb25zdCBpbnB1dCA9IHRvb2xVc2VDb25maXJtLmlucHV0XG4gIGlmIChwYXRoQXJnTmFtZSAmJiBwYXRoQXJnTmFtZSBpbiBpbnB1dCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXRbcGF0aEFyZ05hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRvQWJzb2x1dGVQYXRoKGlucHV0W3BhdGhBcmdOYW1lXSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRvQWJzb2x1dGVQYXRoKGdldEN3ZCgpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZXN5c3RlbVBlcm1pc3Npb25SZXF1ZXN0KHtcbiAgdG9vbFVzZUNvbmZpcm0sXG4gIG9uRG9uZSxcbiAgdmVyYm9zZSxcbn06IFBlcm1pc3Npb25SZXF1ZXN0UHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBwYXRoID0gcGF0aEZyb21Ub29sVXNlKHRvb2xVc2VDb25maXJtKVxuICBpZiAoIXBhdGgpIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gZ2VuZXJpYyBwZXJtaXNzaW9uIHJlcXVlc3QgaWYgbm8gcGF0aCBpcyBmb3VuZFxuICAgIHJldHVybiAoXG4gICAgICA8RmFsbGJhY2tQZXJtaXNzaW9uUmVxdWVzdFxuICAgICAgICB0b29sVXNlQ29uZmlybT17dG9vbFVzZUNvbmZpcm19XG4gICAgICAgIG9uRG9uZT17b25Eb25lfVxuICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgLz5cbiAgICApXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8RmlsZXN5c3RlbVBlcm1pc3Npb25SZXF1ZXN0SW1wbFxuICAgICAgdG9vbFVzZUNvbmZpcm09e3Rvb2xVc2VDb25maXJtfVxuICAgICAgcGF0aD17cGF0aH1cbiAgICAgIG9uRG9uZT17b25Eb25lfVxuICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIGdldERvbnRBc2tBZ2Fpbk9wdGlvbnModG9vbFVzZUNvbmZpcm06IFRvb2xVc2VDb25maXJtLCBwYXRoOiBzdHJpbmcpIHtcbiAgaWYgKHRvb2xVc2VDb25maXJtLnRvb2wuaXNSZWFkT25seSgpKSB7XG4gICAgLy8gXCJBbHdheXMgYWxsb3dcIiBpcyBub3QgYW4gb3B0aW9uIGZvciByZWFkLW9ubHkgdG9vbHMsXG4gICAgLy8gYmVjYXVzZSB0aGV5IGFsd2F5cyBoYXZlIHdyaXRlIHBlcm1pc3Npb24gaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5LlxuICAgIHJldHVybiBbXVxuICB9XG4gIC8vIE9ubHkgc2hvdyBkb24ndCBhc2sgYWdhaW4gb3B0aW9uIGZvciBlZGl0cyBpbiBvcmlnaW5hbCB3b3JraW5nIGRpcmVjdG9yeVxuICByZXR1cm4gcGF0aEluT3JpZ2luYWxDd2QocGF0aClcbiAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBcIlllcywgYW5kIGRvbid0IGFzayBhZ2FpbiBmb3IgZmlsZSBlZGl0cyB0aGlzIHNlc3Npb25cIixcbiAgICAgICAgICB2YWx1ZTogJ3llcy1kb250LWFzay1hZ2FpbicsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgOiBbXVxufVxuXG50eXBlIFByb3BzID0ge1xuICB0b29sVXNlQ29uZmlybTogVG9vbFVzZUNvbmZpcm1cbiAgcGF0aDogc3RyaW5nXG4gIG9uRG9uZSgpOiB2b2lkXG4gIHZlcmJvc2U6IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gRmlsZXN5c3RlbVBlcm1pc3Npb25SZXF1ZXN0SW1wbCh7XG4gIHRvb2xVc2VDb25maXJtLFxuICBwYXRoLFxuICBvbkRvbmUsXG4gIHZlcmJvc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHVzZXJGYWNpbmdOYW1lID0gdG9vbFVzZUNvbmZpcm0udG9vbC51c2VyRmFjaW5nTmFtZShcbiAgICB0b29sVXNlQ29uZmlybS5pbnB1dCBhcyBuZXZlcixcbiAgKVxuXG4gIGNvbnN0IHVzZXJGYWNpbmdSZWFkT3JXcml0ZSA9IHRvb2xVc2VDb25maXJtLnRvb2wuaXNSZWFkT25seSgpXG4gICAgPyAnUmVhZCdcbiAgICA6ICdFZGl0J1xuICBjb25zdCB0aXRsZSA9IGAke3VzZXJGYWNpbmdSZWFkT3JXcml0ZX0gJHtpc011bHRpRmlsZSh0b29sVXNlQ29uZmlybSkgPyAnZmlsZXMnIDogJ2ZpbGUnfWBcblxuICBjb25zdCB1bmFyeUV2ZW50ID0gdXNlTWVtbzxVbmFyeUV2ZW50PihcbiAgICAoKSA9PiAoe1xuICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICB9KSxcbiAgICBbXSxcbiAgKVxuXG4gIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyh0b29sVXNlQ29uZmlybSwgdW5hcnlFdmVudClcblxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICBib3JkZXJDb2xvcj17dGV4dENvbG9yRm9yUmlza1Njb3JlKHRvb2xVc2VDb25maXJtLnJpc2tTY29yZSl9XG4gICAgICBtYXJnaW5Ub3A9ezF9XG4gICAgICBwYWRkaW5nTGVmdD17MX1cbiAgICAgIHBhZGRpbmdSaWdodD17MX1cbiAgICAgIHBhZGRpbmdCb3R0b209ezF9XG4gICAgPlxuICAgICAgPFBlcm1pc3Npb25SZXF1ZXN0VGl0bGVcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICByaXNrU2NvcmU9e3Rvb2xVc2VDb25maXJtLnJpc2tTY29yZX1cbiAgICAgIC8+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWD17Mn0gcGFkZGluZ1k9ezF9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7dXNlckZhY2luZ05hbWV9KFxuICAgICAgICAgIHt0b29sVXNlQ29uZmlybS50b29sLnJlbmRlclRvb2xVc2VNZXNzYWdlKFxuICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0uaW5wdXQgYXMgbmV2ZXIsXG4gICAgICAgICAgICB7IHZlcmJvc2UgfSxcbiAgICAgICAgICApfVxuICAgICAgICAgIClcbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Cb3g+XG5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8VGV4dD5EbyB5b3Ugd2FudCB0byBwcm9jZWVkPzwvVGV4dD5cbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdZZXMnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3llcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uZ2V0RG9udEFza0FnYWluT3B0aW9ucyh0b29sVXNlQ29uZmlybSwgcGF0aCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiBgTm8sIGFuZCB0ZWxsIENsYXVkZSB3aGF0IHRvIGRvIGRpZmZlcmVudGx5ICgke2NoYWxrLmJvbGQuaGV4KGdldFRoZW1lKCkud2FybmluZykoJ2VzYycpfSlgLFxuICAgICAgICAgICAgICB2YWx1ZTogJ25vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBvbkNoYW5nZT17bmV3VmFsdWUgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBjYXNlICd5ZXMnOlxuICAgICAgICAgICAgICAgIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYWNjZXB0JyxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLm9uQWxsb3coJ3RlbXBvcmFyeScpXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICd5ZXMtZG9udC1hc2stYWdhaW4nOlxuICAgICAgICAgICAgICAgIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYWNjZXB0JyxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGdyYW50V3JpdGVQZXJtaXNzaW9uRm9yT3JpZ2luYWxEaXIoKVxuICAgICAgICAgICAgICAgIHRvb2xVc2VDb25maXJtLm9uQWxsb3coJ3Blcm1hbmVudCcpXG4gICAgICAgICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdubyc6XG4gICAgICAgICAgICAgICAgbG9nVW5hcnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0aW9uX3R5cGU6ICd0b29sX3VzZV9zaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdyZWplY3QnLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VfbmFtZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2lkOiB0b29sVXNlQ29uZmlybS5hc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBlbnYucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0ub25SZWplY3QoKVxuICAgICAgICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgZ2V0R2xvYmFsQ29uZmlnLFxuICBzYXZlR2xvYmFsQ29uZmlnLFxuICBnZXRDdXJyZW50UHJvamVjdENvbmZpZyxcbiAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnLFxufSBmcm9tICcuL2NvbmZpZy5qcydcbmltcG9ydCB7IGVudiB9IGZyb20gJy4vZW52LmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi9zdGF0ZS5qcydcbmltcG9ydCB7IHF1ZXJ5SGFpa3UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jbGF1ZGUuanMnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi9sb2cuanMnXG5pbXBvcnQgeyBtZW1vaXplLCBzYW1wbGUgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgZ2V0SXNHaXQgfSBmcm9tICcuL2dpdC5qcydcblxuY29uc3QgZXhlY1Byb21pc2UgPSBwcm9taXNpZnkoZXhlYylcblxuYXN5bmMgZnVuY3Rpb24gZ2V0RnJlcXVlbnRseU1vZGlmaWVkRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykgcmV0dXJuIFtdXG4gIGlmIChlbnYucGxhdGZvcm0gPT09ICd3aW5kb3dzJykgcmV0dXJuIFtdXG4gIGlmICghKGF3YWl0IGdldElzR2l0KCkpKSByZXR1cm4gW11cblxuICB0cnkge1xuICAgIGxldCBmaWxlbmFtZXMgPSAnJ1xuICAgIC8vIExvb2sgdXAgZmlsZXMgbW9kaWZpZWQgYnkgdGhlIHVzZXIncyByZWNlbnQgY29tbWl0c1xuICAgIC8vIEJlIGNhcmVmdWwgdG8gZG8gaXQgYXN5bmMsIHNvIGl0IGRvZXNuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkXG4gICAgY29uc3QgeyBzdGRvdXQ6IHVzZXJGaWxlbmFtZXMgfSA9IGF3YWl0IGV4ZWNQcm9taXNlKFxuICAgICAgJ2dpdCBsb2cgLW4gMTAwMCAtLXByZXR0eT1mb3JtYXQ6IC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9TSAtLWF1dGhvcj0kKGdpdCBjb25maWcgdXNlci5lbWFpbCkgfCBzb3J0IHwgdW5pcSAtYyB8IHNvcnQgLW5yIHwgaGVhZCAtbiAyMCcsXG4gICAgICB7IGN3ZDogZ2V0Q3dkKCksIGVuY29kaW5nOiAndXRmOCcgfSxcbiAgICApXG5cbiAgICBmaWxlbmFtZXMgPSAnRmlsZXMgbW9kaWZpZWQgYnkgdXNlcjpcXG4nICsgdXNlckZpbGVuYW1lc1xuXG4gICAgLy8gTG9vayBhdCBvdGhlciB1c2VycycgY29tbWl0cyBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBmaWxlc1xuICAgIGlmICh1c2VyRmlsZW5hbWVzLnNwbGl0KCdcXG4nKS5sZW5ndGggPCAxMCkge1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IGFsbEZpbGVuYW1lcyB9ID0gYXdhaXQgZXhlY1Byb21pc2UoXG4gICAgICAgICdnaXQgbG9nIC1uIDEwMDAgLS1wcmV0dHk9Zm9ybWF0OiAtLW5hbWUtb25seSAtLWRpZmYtZmlsdGVyPU0gfCBzb3J0IHwgdW5pcSAtYyB8IHNvcnQgLW5yIHwgaGVhZCAtbiAyMCcsXG4gICAgICAgIHsgY3dkOiBnZXRDd2QoKSwgZW5jb2Rpbmc6ICd1dGY4JyB9LFxuICAgICAgKVxuICAgICAgZmlsZW5hbWVzICs9ICdcXG5cXG5GaWxlcyBtb2RpZmllZCBieSBvdGhlciB1c2VyczpcXG4nICsgYWxsRmlsZW5hbWVzXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUhhaWt1KHtcbiAgICAgIHN5c3RlbVByb21wdDogW1xuICAgICAgICBcIllvdSBhcmUgYW4gZXhwZXJ0IGF0IGFuYWx5emluZyBnaXQgaGlzdG9yeS4gR2l2ZW4gYSBsaXN0IG9mIGZpbGVzIGFuZCB0aGVpciBtb2RpZmljYXRpb24gY291bnRzLCByZXR1cm4gZXhhY3RseSBmaXZlIGZpbGVuYW1lcyB0aGF0IGFyZSBmcmVxdWVudGx5IG1vZGlmaWVkIGFuZCByZXByZXNlbnQgY29yZSBhcHBsaWNhdGlvbiBsb2dpYyAobm90IGF1dG8tZ2VuZXJhdGVkIGZpbGVzLCBkZXBlbmRlbmNpZXMsIG9yIGNvbmZpZ3VyYXRpb24pLiBNYWtlIHN1cmUgZmlsZW5hbWVzIGFyZSBkaXZlcnNlLCBub3QgYWxsIGluIHRoZSBzYW1lIGZvbGRlciwgYW5kIGFyZSBhIG1peCBvZiB1c2VyIGFuZCBvdGhlciB1c2Vycy4gUmV0dXJuIG9ubHkgdGhlIGZpbGVuYW1lcycgYmFzZW5hbWVzICh3aXRob3V0IHRoZSBwYXRoKSBzZXBhcmF0ZWQgYnkgbmV3bGluZXMgd2l0aCBubyBleHBsYW5hdGlvbi5cIixcbiAgICAgIF0sXG4gICAgICB1c2VyUHJvbXB0OiBmaWxlbmFtZXMsXG4gICAgfSlcblxuICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5tZXNzYWdlLmNvbnRlbnRbMF1cbiAgICBpZiAoIWNvbnRlbnQgfHwgY29udGVudC50eXBlICE9PSAndGV4dCcpIHJldHVybiBbXVxuICAgIGNvbnN0IGNob3NlbkZpbGVuYW1lcyA9IGNvbnRlbnQudGV4dC50cmltKCkuc3BsaXQoJ1xcbicpXG4gICAgaWYgKGNob3NlbkZpbGVuYW1lcy5sZW5ndGggPCA1KSB7XG4gICAgICAvLyBMaWtlbHkgZXJyb3JcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICByZXR1cm4gY2hvc2VuRmlsZW5hbWVzXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ0Vycm9yKGVycilcbiAgICByZXR1cm4gW11cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RXhhbXBsZUNvbW1hbmRzID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxhc3RHZW5lcmF0ZWQgPSBwcm9qZWN0Q29uZmlnLmV4YW1wbGVGaWxlc0dlbmVyYXRlZEF0ID8/IDBcbiAgY29uc3Qgb25lV2VlayA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwXG5cbiAgLy8gUmVnZW5lcmF0ZSBleGFtcGxlcyBpZiB0aGV5J3JlIG92ZXIgYSB3ZWVrIG9sZFxuICBpZiAobm93IC0gbGFzdEdlbmVyYXRlZCA+IG9uZVdlZWspIHtcbiAgICBwcm9qZWN0Q29uZmlnLmV4YW1wbGVGaWxlcyA9IFtdXG4gIH1cblxuICAvLyBVcGRhdGUgZ2xvYmFsIHN0YXJ0dXAgY291bnRcbiAgY29uc3QgbmV3R2xvYmFsQ29uZmlnID0ge1xuICAgIC4uLmdsb2JhbENvbmZpZyxcbiAgICBudW1TdGFydHVwczogKGdsb2JhbENvbmZpZy5udW1TdGFydHVwcyA/PyAwKSArIDEsXG4gIH1cbiAgc2F2ZUdsb2JhbENvbmZpZyhuZXdHbG9iYWxDb25maWcpXG5cbiAgLy8gSWYgbm8gZXhhbXBsZSBmaWxlcyBjYWNoZWQsIGtpY2tzdGFydCBmZXRjaCBpbiBiYWNrZ3JvdW5kXG4gIGlmICghcHJvamVjdENvbmZpZy5leGFtcGxlRmlsZXM/Lmxlbmd0aCkge1xuICAgIGdldEZyZXF1ZW50bHlNb2RpZmllZEZpbGVzKCkudGhlbihmaWxlcyA9PiB7XG4gICAgICBpZiAoZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyh7XG4gICAgICAgICAgLi4uZ2V0Q3VycmVudFByb2plY3RDb25maWcoKSxcbiAgICAgICAgICBleGFtcGxlRmlsZXM6IGZpbGVzLFxuICAgICAgICAgIGV4YW1wbGVGaWxlc0dlbmVyYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmcmVxdWVudEZpbGUgPSBwcm9qZWN0Q29uZmlnLmV4YW1wbGVGaWxlcz8ubGVuZ3RoXG4gICAgPyBzYW1wbGUocHJvamVjdENvbmZpZy5leGFtcGxlRmlsZXMpXG4gICAgOiAnPGZpbGVwYXRoPidcblxuICByZXR1cm4gW1xuICAgICdmaXggbGludCBlcnJvcnMnLFxuICAgICdmaXggdHlwZWNoZWNrIGVycm9ycycsXG4gICAgYGhvdyBkb2VzICR7ZnJlcXVlbnRGaWxlfSB3b3JrP2AsXG4gICAgYHJlZmFjdG9yICR7ZnJlcXVlbnRGaWxlfWAsXG4gICAgJ2hvdyBkbyBJIGxvZyBhbiBlcnJvcj8nLFxuICAgIGBlZGl0ICR7ZnJlcXVlbnRGaWxlfSB0by4uLmAsXG4gICAgYHdyaXRlIGEgdGVzdCBmb3IgJHtmcmVxdWVudEZpbGV9YCxcbiAgICAnY3JlYXRlIGEgdXRpbCBsb2dnaW5nLnB5IHRoYXQuLi4nLFxuICBdXG59KVxuIiwKICAgICJpbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgc2FtcGxlIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgZ2V0RXhhbXBsZUNvbW1hbmRzIH0gZnJvbSAnLi4vdXRpbHMvZXhhbXBsZUNvbW1hbmRzLmpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0eXBlIE1lc3NhZ2UgfSBmcm9tICcuLi9xdWVyeS5qcydcbmltcG9ydCB7IHByb2Nlc3NVc2VySW5wdXQgfSBmcm9tICcuLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IHVzZUFycm93S2V5SGlzdG9yeSB9IGZyb20gJy4uL2hvb2tzL3VzZUFycm93S2V5SGlzdG9yeS5qcydcbmltcG9ydCB7IHVzZVNsYXNoQ29tbWFuZFR5cGVhaGVhZCB9IGZyb20gJy4uL2hvb2tzL3VzZVNsYXNoQ29tbWFuZFR5cGVhaGVhZC5qcydcbmltcG9ydCB7IGFkZFRvSGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkuanMnXG5pbXBvcnQgVGV4dElucHV0IGZyb20gJy4vVGV4dElucHV0LmpzJ1xuaW1wb3J0IHsgbWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvdW50Q2FjaGVkVG9rZW5zLCBjb3VudFRva2VucyB9IGZyb20gJy4uL3V0aWxzL3Rva2Vucy5qcydcbmltcG9ydCB7IFNlbnRyeUVycm9yQm91bmRhcnkgfSBmcm9tICcuL1NlbnRyeUVycm9yQm91bmRhcnkuanMnXG5pbXBvcnQgeyBBdXRvVXBkYXRlciB9IGZyb20gJy4vQXV0b1VwZGF0ZXIuanMnXG5pbXBvcnQgeyBBdXRvVXBkYXRlclJlc3VsdCB9IGZyb20gJy4uL3V0aWxzL2F1dG9VcGRhdGVyLmpzJ1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgdHlwZSB7IFNldFRvb2xKU1hGbiwgVG9vbCB9IGZyb20gJy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBUb2tlbldhcm5pbmcsIFdBUk5JTkdfVEhSRVNIT0xEIH0gZnJvbSAnLi9Ub2tlbldhcm5pbmcuanMnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICcuLi9ob29rcy91c2VUZXJtaW5hbFNpemUuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCB9IGZyb20gJy4uL3V0aWxzL21vZGVsLmpzJ1xuaW1wb3J0IHsgc2V0VGVybWluYWxUaXRsZSB9IGZyb20gJy4uL3V0aWxzL3Rlcm1pbmFsLmpzJ1xuaW1wb3J0IHRlcm1pbmFsU2V0dXAsIHtcbiAgaXNTaGlmdEVudGVyS2V5QmluZGluZ0luc3RhbGxlZCxcbn0gZnJvbSAnLi4vY29tbWFuZHMvdGVybWluYWxTZXR1cC5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgY29tbWFuZHM6IENvbW1hbmRbXVxuICBmb3JrTnVtYmVyOiBudW1iZXJcbiAgbWVzc2FnZUxvZ05hbWU6IHN0cmluZ1xuICBpc0Rpc2FibGVkOiBib29sZWFuXG4gIGlzTG9hZGluZzogYm9vbGVhblxuICBvblF1ZXJ5OiAoXG4gICAgbmV3TWVzc2FnZXM6IE1lc3NhZ2VbXSxcbiAgICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcbiAgKSA9PiBQcm9taXNlPHZvaWQ+XG4gIGRlYnVnOiBib29sZWFuXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVxuICBzZXRUb29sSlNYOiBTZXRUb29sSlNYRm5cbiAgb25BdXRvVXBkYXRlclJlc3VsdDogKHJlc3VsdDogQXV0b1VwZGF0ZXJSZXN1bHQpID0+IHZvaWRcbiAgYXV0b1VwZGF0ZXJSZXN1bHQ6IEF1dG9VcGRhdGVyUmVzdWx0IHwgbnVsbFxuICB0b29sczogVG9vbFtdXG4gIGlucHV0OiBzdHJpbmdcbiAgb25JbnB1dENoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgbW9kZTogJ2Jhc2gnIHwgJ3Byb21wdCdcbiAgb25Nb2RlQ2hhbmdlOiAobW9kZTogJ2Jhc2gnIHwgJ3Byb21wdCcpID0+IHZvaWRcbiAgc3VibWl0Q291bnQ6IG51bWJlclxuICBvblN1Ym1pdENvdW50Q2hhbmdlOiAodXBkYXRlcjogKHByZXY6IG51bWJlcikgPT4gbnVtYmVyKSA9PiB2b2lkXG4gIHNldElzTG9hZGluZzogKGlzTG9hZGluZzogYm9vbGVhbikgPT4gdm9pZFxuICBzZXRBYm9ydENvbnRyb2xsZXI6IChhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikgPT4gdm9pZFxuICBvblNob3dNZXNzYWdlU2VsZWN0b3I6ICgpID0+IHZvaWRcbiAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyOiAoXG4gICAgZm9ya0NvbnZvV2l0aE1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gICkgPT4gdm9pZFxuICByZWFkRmlsZVRpbWVzdGFtcHM6IHsgW2ZpbGVuYW1lOiBzdHJpbmddOiBudW1iZXIgfVxufVxuXG5mdW5jdGlvbiBnZXRQYXN0ZWRUZXh0UHJvbXB0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5ld2xpbmVDb3VudCA9ICh0ZXh0Lm1hdGNoKC9cXHJcXG58XFxyfFxcbi9nKSB8fCBbXSkubGVuZ3RoXG4gIHJldHVybiBgW1Bhc3RlZCB0ZXh0ICske25ld2xpbmVDb3VudH0gbGluZXNdIGBcbn1cbmZ1bmN0aW9uIFByb21wdElucHV0KHtcbiAgY29tbWFuZHMsXG4gIGZvcmtOdW1iZXIsXG4gIG1lc3NhZ2VMb2dOYW1lLFxuICBpc0Rpc2FibGVkLFxuICBpc0xvYWRpbmcsXG4gIG9uUXVlcnksXG4gIGRlYnVnLFxuICB2ZXJib3NlLFxuICBtZXNzYWdlcyxcbiAgc2V0VG9vbEpTWCxcbiAgb25BdXRvVXBkYXRlclJlc3VsdCxcbiAgYXV0b1VwZGF0ZXJSZXN1bHQsXG4gIHRvb2xzLFxuICBpbnB1dCxcbiAgb25JbnB1dENoYW5nZSxcbiAgbW9kZSxcbiAgb25Nb2RlQ2hhbmdlLFxuICBzdWJtaXRDb3VudCxcbiAgb25TdWJtaXRDb3VudENoYW5nZSxcbiAgc2V0SXNMb2FkaW5nLFxuICBzZXRBYm9ydENvbnRyb2xsZXIsXG4gIG9uU2hvd01lc3NhZ2VTZWxlY3RvcixcbiAgc2V0Rm9ya0NvbnZvV2l0aE1lc3NhZ2VzT25UaGVOZXh0UmVuZGVyLFxuICByZWFkRmlsZVRpbWVzdGFtcHMsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFtpc0F1dG9VcGRhdGluZywgc2V0SXNBdXRvVXBkYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtleGl0TWVzc2FnZSwgc2V0RXhpdE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIHNob3c6IGJvb2xlYW5cbiAgICBrZXk/OiBzdHJpbmdcbiAgfT4oeyBzaG93OiBmYWxzZSB9KVxuICBjb25zdCBbbWVzc2FnZSwgc2V0TWVzc2FnZV0gPSB1c2VTdGF0ZTx7XG4gICAgc2hvdzogYm9vbGVhblxuICAgIHRleHQ/OiBzdHJpbmdcbiAgfT4oeyBzaG93OiBmYWxzZSB9KVxuICBjb25zdCBbcGFzdGVkSW1hZ2UsIHNldFBhc3RlZEltYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtwbGFjZWhvbGRlciwgc2V0UGxhY2Vob2xkZXJdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtjdXJzb3JPZmZzZXQsIHNldEN1cnNvck9mZnNldF0gPSB1c2VTdGF0ZTxudW1iZXI+KGlucHV0Lmxlbmd0aClcbiAgY29uc3QgW3Bhc3RlZFRleHQsIHNldFBhc3RlZFRleHRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGdldEV4YW1wbGVDb21tYW5kcygpLnRoZW4oY29tbWFuZHMgPT4ge1xuICAgICAgc2V0UGxhY2Vob2xkZXIoYFRyeSBcIiR7c2FtcGxlKGNvbW1hbmRzKX1cImApXG4gICAgfSlcbiAgfSwgW10pXG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcblxuICBjb25zdCBjb21tYW5kV2lkdGggPSB1c2VNZW1vKFxuICAgICgpID0+IE1hdGgubWF4KC4uLmNvbW1hbmRzLm1hcChjbWQgPT4gY21kLnVzZXJGYWNpbmdOYW1lKCkubGVuZ3RoKSkgKyA1LFxuICAgIFtjb21tYW5kc10sXG4gIClcblxuICBjb25zdCB7XG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgc2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIHVwZGF0ZVN1Z2dlc3Rpb25zLFxuICAgIGNsZWFyU3VnZ2VzdGlvbnMsXG4gIH0gPSB1c2VTbGFzaENvbW1hbmRUeXBlYWhlYWQoe1xuICAgIGNvbW1hbmRzLFxuICAgIG9uSW5wdXRDaGFuZ2UsXG4gICAgb25TdWJtaXQsXG4gICAgc2V0Q3Vyc29yT2Zmc2V0LFxuICB9KVxuXG4gIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgICAgb25Nb2RlQ2hhbmdlKCdiYXNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZSlcbiAgICAgIG9uSW5wdXRDaGFuZ2UodmFsdWUpXG4gICAgfSxcbiAgICBbb25Nb2RlQ2hhbmdlLCBvbklucHV0Q2hhbmdlLCB1cGRhdGVTdWdnZXN0aW9uc10sXG4gIClcblxuICBjb25zdCB7IHJlc2V0SGlzdG9yeSwgb25IaXN0b3J5VXAsIG9uSGlzdG9yeURvd24gfSA9IHVzZUFycm93S2V5SGlzdG9yeShcbiAgICAodmFsdWU6IHN0cmluZywgbW9kZTogJ2Jhc2gnIHwgJ3Byb21wdCcpID0+IHtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlKVxuICAgICAgb25Nb2RlQ2hhbmdlKG1vZGUpXG4gICAgfSxcbiAgICBpbnB1dCxcbiAgKVxuXG4gIC8vIE9ubHkgdXNlIGhpc3RvcnkgbmF2aWdhdGlvbiB3aGVuIHRoZXJlIGFyZSAwIG9yIDEgc2xhc2ggY29tbWFuZCBzdWdnZXN0aW9uc1xuICBjb25zdCBoYW5kbGVIaXN0b3J5VXAgPSAoKSA9PiB7XG4gICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAxKSB7XG4gICAgICBvbkhpc3RvcnlVcCgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlSGlzdG9yeURvd24gPSAoKSA9PiB7XG4gICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAxKSB7XG4gICAgICBvbkhpc3RvcnlEb3duKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvblN1Ym1pdChpbnB1dDogc3RyaW5nLCBpc1N1Ym1pdHRpbmdTbGFzaENvbW1hbmQgPSBmYWxzZSkge1xuICAgIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiAhaXNTdWJtaXR0aW5nU2xhc2hDb21tYW5kKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZXhpdCBjb21tYW5kc1xuICAgIGlmIChbJ2V4aXQnLCAncXVpdCcsICc6cScsICc6cSEnLCAnOndxJywgJzp3cSEnXS5pbmNsdWRlcyhpbnB1dC50cmltKCkpKSB7XG4gICAgICBleGl0KClcbiAgICB9XG5cbiAgICBsZXQgZmluYWxJbnB1dCA9IGlucHV0XG4gICAgaWYgKHBhc3RlZFRleHQpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgcHJvbXB0IHBhdHRlcm4gdGhhdCB3b3VsZCBoYXZlIGJlZW4gdXNlZCBmb3IgdGhpcyBwYXN0ZWQgdGV4dFxuICAgICAgY29uc3QgcGFzdGVkUHJvbXB0ID0gZ2V0UGFzdGVkVGV4dFByb21wdChwYXN0ZWRUZXh0KVxuICAgICAgaWYgKGZpbmFsSW5wdXQuaW5jbHVkZXMocGFzdGVkUHJvbXB0KSkge1xuICAgICAgICBmaW5hbElucHV0ID0gZmluYWxJbnB1dC5yZXBsYWNlKHBhc3RlZFByb21wdCwgcGFzdGVkVGV4dClcbiAgICAgIH0gLy8gb3RoZXJ3aXNlLCBpZ25vcmUgdGhlIHBhc3RlZFRleHQgaWYgdGhlIHVzZXIgaGFzIG1vZGlmaWVkIHRoZSBwcm9tcHRcbiAgICB9XG4gICAgb25JbnB1dENoYW5nZSgnJylcbiAgICBvbk1vZGVDaGFuZ2UoJ3Byb21wdCcpXG4gICAgY2xlYXJTdWdnZXN0aW9ucygpXG4gICAgc2V0UGFzdGVkSW1hZ2UobnVsbClcbiAgICBzZXRQYXN0ZWRUZXh0KG51bGwpXG4gICAgb25TdWJtaXRDb3VudENoYW5nZShfID0+IF8gKyAxKVxuICAgIHNldElzTG9hZGluZyh0cnVlKVxuXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgc2V0QWJvcnRDb250cm9sbGVyKGFib3J0Q29udHJvbGxlcilcbiAgICBjb25zdCBtb2RlbCA9IGF3YWl0IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKVxuICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcHJvY2Vzc1VzZXJJbnB1dChcbiAgICAgIGZpbmFsSW5wdXQsXG4gICAgICBtb2RlLFxuICAgICAgc2V0VG9vbEpTWCxcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgIGZvcmtOdW1iZXIsXG4gICAgICAgICAgbWVzc2FnZUxvZ05hbWUsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgICBzbG93QW5kQ2FwYWJsZU1vZGVsOiBtb2RlbCxcbiAgICAgICAgICBtYXhUaGlua2luZ1Rva2VuczogMCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZUlkOiB1bmRlZmluZWQsXG4gICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgcmVhZEZpbGVUaW1lc3RhbXBzLFxuICAgICAgICBzZXRGb3JrQ29udm9XaXRoTWVzc2FnZXNPblRoZU5leHRSZW5kZXIsXG4gICAgICB9LFxuICAgICAgcGFzdGVkSW1hZ2UgPz8gbnVsbCxcbiAgICApXG5cbiAgICBpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgICBvblF1ZXJ5KG1lc3NhZ2VzLCBhYm9ydENvbnRyb2xsZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExvY2FsIEpTWCBjb21tYW5kc1xuICAgICAgYWRkVG9IaXN0b3J5KGlucHV0KVxuICAgICAgcmVzZXRIaXN0b3J5KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGNvbnN0IGlucHV0VG9BZGQgPSBtb2RlID09PSAnYmFzaCcgPyBgISR7aW5wdXR9YCA6IGlucHV0XG4gICAgICAgIGFkZFRvSGlzdG9yeShpbnB1dFRvQWRkKVxuICAgICAgICByZXNldEhpc3RvcnkoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uSW1hZ2VQYXN0ZShpbWFnZTogc3RyaW5nKSB7XG4gICAgb25Nb2RlQ2hhbmdlKCdwcm9tcHQnKVxuICAgIHNldFBhc3RlZEltYWdlKGltYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gb25UZXh0UGFzdGUocmF3VGV4dDogc3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSBhbnkgXFxyIHdpdGggXFxuIGZpcnN0IHRvIG1hdGNoIHVzZVRleHRJbnB1dCdzIGNvbnZlcnNpb24gYmVoYXZpb3JcbiAgICBjb25zdCB0ZXh0ID0gcmF3VGV4dC5yZXBsYWNlKC9cXHIvZywgJ1xcbicpXG5cbiAgICAvLyBHZXQgcHJvbXB0IHdpdGggbmV3bGluZSBjb3VudFxuICAgIGNvbnN0IHBhc3RlZFByb21wdCA9IGdldFBhc3RlZFRleHRQcm9tcHQodGV4dClcblxuICAgIC8vIFVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIHZpc3VhbCBpbmRpY2F0b3IgdGhhdCB0ZXh0IGhhcyBiZWVuIHBhc3RlZFxuICAgIGNvbnN0IG5ld0lucHV0ID1cbiAgICAgIGlucHV0LnNsaWNlKDAsIGN1cnNvck9mZnNldCkgKyBwYXN0ZWRQcm9tcHQgKyBpbnB1dC5zbGljZShjdXJzb3JPZmZzZXQpXG4gICAgb25JbnB1dENoYW5nZShuZXdJbnB1dClcblxuICAgIC8vIFVwZGF0ZSBjdXJzb3IgcG9zaXRpb24gdG8gYmUgYWZ0ZXIgdGhlIGluc2VydGVkIGluZGljYXRvclxuICAgIHNldEN1cnNvck9mZnNldChjdXJzb3JPZmZzZXQgKyBwYXN0ZWRQcm9tcHQubGVuZ3RoKVxuXG4gICAgLy8gU3RpbGwgc2V0IHRoZSBwYXN0ZWRUZXh0IHN0YXRlIGZvciBhY3R1YWwgc3VibWlzc2lvblxuICAgIHNldFBhc3RlZFRleHQodGV4dClcbiAgfVxuXG4gIHVzZUlucHV0KChfLCBrZXkpID0+IHtcbiAgICBpZiAoaW5wdXQgPT09ICcnICYmIChrZXkuZXNjYXBlIHx8IGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkpIHtcbiAgICAgIG9uTW9kZUNoYW5nZSgncHJvbXB0JylcbiAgICB9XG4gICAgLy8gZXNjIGlzIGEgbGl0dGxlIG92ZXJsb2FkZWQ6XG4gICAgLy8gLSB3aGVuIHdlJ3JlIGxvYWRpbmcgYSByZXNwb25zZSwgaXQncyB1c2VkIHRvIGNhbmNlbCB0aGUgcmVxdWVzdFxuICAgIC8vIC0gb3RoZXJ3aXNlLCBpdCdzIHVzZWQgdG8gc2hvdyB0aGUgbWVzc2FnZSBzZWxlY3RvclxuICAgIC8vIC0gd2hlbiBkb3VibGUgcHJlc3NlZCwgaXQncyB1c2VkIHRvIGNsZWFyIHRoZSBpbnB1dFxuICAgIGlmIChrZXkuZXNjYXBlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgIWlucHV0ICYmICFpc0xvYWRpbmcpIHtcbiAgICAgIG9uU2hvd01lc3NhZ2VTZWxlY3RvcigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHRleHRJbnB1dENvbHVtbnMgPSB1c2VUZXJtaW5hbFNpemUoKS5jb2x1bW5zIC0gNlxuICBjb25zdCB0b2tlblVzYWdlID0gdXNlTWVtbygoKSA9PiBjb3VudFRva2VucyhtZXNzYWdlcyksIFttZXNzYWdlc10pXG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICA8Qm94XG4gICAgICAgIGFsaWduSXRlbXM9XCJmbGV4LXN0YXJ0XCJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJmbGV4LXN0YXJ0XCJcbiAgICAgICAgYm9yZGVyQ29sb3I9e21vZGUgPT09ICdiYXNoJyA/IHRoZW1lLmJhc2hCb3JkZXIgOiB0aGVtZS5zZWNvbmRhcnlCb3JkZXJ9XG4gICAgICAgIGJvcmRlckRpbUNvbG9yXG4gICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICBtYXJnaW5Ub3A9ezF9XG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICA+XG4gICAgICAgIDxCb3hcbiAgICAgICAgICBhbGlnbkl0ZW1zPVwiZmxleC1zdGFydFwiXG4gICAgICAgICAgYWxpZ25TZWxmPVwiZmxleC1zdGFydFwiXG4gICAgICAgICAgZmxleFdyYXA9XCJub3dyYXBcIlxuICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZmxleC1zdGFydFwiXG4gICAgICAgICAgd2lkdGg9ezN9XG4gICAgICAgID5cbiAgICAgICAgICB7bW9kZSA9PT0gJ2Jhc2gnID8gKFxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmJhc2hCb3JkZXJ9PiZuYnNwOyEmbmJzcDs8L1RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc0xvYWRpbmcgPyB0aGVtZS5zZWNvbmRhcnlUZXh0IDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAgJm5ic3A7Jmd0OyZuYnNwO1xuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8Qm94IHBhZGRpbmdSaWdodD17MX0+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgICAgICBvblN1Ym1pdD17b25TdWJtaXR9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXR9XG4gICAgICAgICAgICBvbkhpc3RvcnlVcD17aGFuZGxlSGlzdG9yeVVwfVxuICAgICAgICAgICAgb25IaXN0b3J5RG93bj17aGFuZGxlSGlzdG9yeURvd259XG4gICAgICAgICAgICBvbkhpc3RvcnlSZXNldD17KCkgPT4gcmVzZXRIaXN0b3J5KCl9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17c3VibWl0Q291bnQgPiAwID8gdW5kZWZpbmVkIDogcGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBvbkV4aXQ9eygpID0+IHByb2Nlc3MuZXhpdCgwKX1cbiAgICAgICAgICAgIG9uRXhpdE1lc3NhZ2U9eyhzaG93LCBrZXkpID0+IHNldEV4aXRNZXNzYWdlKHsgc2hvdywga2V5IH0pfVxuICAgICAgICAgICAgb25NZXNzYWdlPXsoc2hvdywgdGV4dCkgPT4gc2V0TWVzc2FnZSh7IHNob3csIHRleHQgfSl9XG4gICAgICAgICAgICBvbkltYWdlUGFzdGU9e29uSW1hZ2VQYXN0ZX1cbiAgICAgICAgICAgIGNvbHVtbnM9e3RleHRJbnB1dENvbHVtbnN9XG4gICAgICAgICAgICBpc0RpbW1lZD17aXNEaXNhYmxlZCB8fCBpc0xvYWRpbmd9XG4gICAgICAgICAgICBkaXNhYmxlQ3Vyc29yTW92ZW1lbnRGb3JVcERvd25LZXlzPXtzdWdnZXN0aW9ucy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgY3Vyc29yT2Zmc2V0PXtjdXJzb3JPZmZzZXR9XG4gICAgICAgICAgICBvbkNoYW5nZUN1cnNvck9mZnNldD17c2V0Q3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgb25QYXN0ZT17b25UZXh0UGFzdGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICAgIHtzdWdnZXN0aW9ucy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgZmxleERpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCJcbiAgICAgICAgICBwYWRkaW5nWD17Mn1cbiAgICAgICAgICBwYWRkaW5nWT17MH1cbiAgICAgICAgPlxuICAgICAgICAgIDxCb3gganVzdGlmeUNvbnRlbnQ9XCJmbGV4LXN0YXJ0XCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIHtleGl0TWVzc2FnZS5zaG93ID8gKFxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5QcmVzcyB7ZXhpdE1lc3NhZ2Uua2V5fSBhZ2FpbiB0byBleGl0PC9UZXh0PlxuICAgICAgICAgICAgKSA6IG1lc3NhZ2Uuc2hvdyA/IChcbiAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e21lc3NhZ2UudGV4dH08L1RleHQ+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICBjb2xvcj17bW9kZSA9PT0gJ2Jhc2gnID8gdGhlbWUuYmFzaEJvcmRlciA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGRpbUNvbG9yPXttb2RlICE9PSAnYmFzaCd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgISBmb3IgYmFzaCBtb2RlXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPsK3IC8gZm9yIGNvbW1hbmRzIMK3IGVzYyB0byB1bmRvPC9UZXh0PlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPFNlbnRyeUVycm9yQm91bmRhcnk+XG4gICAgICAgICAgICA8Qm94IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBnYXA9ezF9PlxuICAgICAgICAgICAgICB7IWF1dG9VcGRhdGVyUmVzdWx0ICYmXG4gICAgICAgICAgICAgICAgIWlzQXV0b1VwZGF0aW5nICYmXG4gICAgICAgICAgICAgICAgIWRlYnVnICYmXG4gICAgICAgICAgICAgICAgdG9rZW5Vc2FnZSA8IFdBUk5JTkdfVEhSRVNIT0xEICYmIChcbiAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICB7dGVybWluYWxTZXR1cC5pc0VuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNTaGlmdEVudGVyS2V5QmluZGluZ0luc3RhbGxlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnc2hpZnQgKyDij44gZm9yIG5ld2xpbmUnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnXFxcXOKPjiBmb3IgbmV3bGluZSd9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2RlYnVnICYmIChcbiAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgIHtgJHtjb3VudFRva2VucyhtZXNzYWdlcyl9IHRva2VucyAoJHtcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAgICAgICAoMTAwMDAgKiAoY291bnRDYWNoZWRUb2tlbnMobWVzc2FnZXMpIHx8IDEpKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAoY291bnRUb2tlbnMobWVzc2FnZXMpIHx8IDEpLFxuICAgICAgICAgICAgICAgICAgICApIC8gMTAwXG4gICAgICAgICAgICAgICAgICB9JSBjYWNoZWQpYH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUb2tlbldhcm5pbmcgdG9rZW5Vc2FnZT17dG9rZW5Vc2FnZX0gLz5cbiAgICAgICAgICAgICAgPEF1dG9VcGRhdGVyXG4gICAgICAgICAgICAgICAgZGVidWc9e2RlYnVnfVxuICAgICAgICAgICAgICAgIG9uQXV0b1VwZGF0ZXJSZXN1bHQ9e29uQXV0b1VwZGF0ZXJSZXN1bHR9XG4gICAgICAgICAgICAgICAgYXV0b1VwZGF0ZXJSZXN1bHQ9e2F1dG9VcGRhdGVyUmVzdWx0fVxuICAgICAgICAgICAgICAgIGlzVXBkYXRpbmc9e2lzQXV0b1VwZGF0aW5nfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlSXNVcGRhdGluZz17c2V0SXNBdXRvVXBkYXRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8L1NlbnRyeUVycm9yQm91bmRhcnk+XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cbiAgICAgIHtzdWdnZXN0aW9ucy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPEJveFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiXG4gICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgcGFkZGluZ1k9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtzdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBjb21tYW5kcy5maW5kKFxuICAgICAgICAgICAgICAgIGNtZCA9PiBjbWQudXNlckZhY2luZ05hbWUoKSA9PT0gc3VnZ2VzdGlvbi5yZXBsYWNlKCcvJywgJycpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAga2V5PXtzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj17Y29sdW1ucyA8IDgwID8gJ2NvbHVtbicgOiAncm93J31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXtjb2x1bW5zIDwgODAgPyB1bmRlZmluZWQgOiBjb21tYW5kV2lkdGh9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSBzZWxlY3RlZFN1Z2dlc3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5zdWdnZXN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGRpbUNvbG9yPXtpbmRleCAhPT0gc2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgL3tzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgIHtjb21tYW5kPy5hbGlhc2VzICYmIGNvbW1hbmQuYWxpYXNlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPiAoe2NvbW1hbmQuYWxpYXNlcy5qb2luKCcsICcpfSk8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICB7Y29tbWFuZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sdW1ucyAtIChjb2x1bW5zIDwgODAgPyA0IDogY29tbWFuZFdpZHRoICsgNCl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ9e2NvbHVtbnMgPCA4MCA/IDQgOiAwfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IHNlbGVjdGVkU3VnZ2VzdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuc3VnZ2VzdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaW1Db2xvcj17aW5kZXggIT09IHNlbGVjdGVkU3VnZ2VzdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA9XCJ3cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj17aW5kZXggIT09IHNlbGVjdGVkU3VnZ2VzdGlvbn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjb21tYW5kLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29tbWFuZC50eXBlID09PSAncHJvbXB0JyAmJiBjb21tYW5kLmFyZ05hbWVzPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgKGFyZ3VtZW50czogJHtjb21tYW5kLmFyZ05hbWVzLmpvaW4oJywgJyl9KWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDxTZW50cnlFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgICAgPFRva2VuV2FybmluZyB0b2tlblVzYWdlPXtjb3VudFRva2VucyhtZXNzYWdlcyl9IC8+XG4gICAgICAgICAgICAgIDxBdXRvVXBkYXRlclxuICAgICAgICAgICAgICAgIGRlYnVnPXtkZWJ1Z31cbiAgICAgICAgICAgICAgICBvbkF1dG9VcGRhdGVyUmVzdWx0PXtvbkF1dG9VcGRhdGVyUmVzdWx0fVxuICAgICAgICAgICAgICAgIGF1dG9VcGRhdGVyUmVzdWx0PXthdXRvVXBkYXRlclJlc3VsdH1cbiAgICAgICAgICAgICAgICBpc1VwZGF0aW5nPXtpc0F1dG9VcGRhdGluZ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZUlzVXBkYXRpbmc9e3NldElzQXV0b1VwZGF0aW5nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC9TZW50cnlFcnJvckJvdW5kYXJ5PlxuICAgICAgICA8L0JveD5cbiAgICAgICl9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhQcm9tcHRJbnB1dClcblxuZnVuY3Rpb24gZXhpdCgpOiBuZXZlciB7XG4gIHNldFRlcm1pbmFsVGl0bGUoJycpXG4gIHByb2Nlc3MuZXhpdCgwKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0SGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBcnJvd0tleUhpc3RvcnkoXG4gIG9uU2V0SW5wdXQ6ICh2YWx1ZTogc3RyaW5nLCBtb2RlOiAnYmFzaCcgfCAncHJvbXB0JykgPT4gdm9pZCxcbiAgY3VycmVudElucHV0OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgW2hpc3RvcnlJbmRleCwgc2V0SGlzdG9yeUluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtsYXN0VHlwZWRJbnB1dCwgc2V0TGFzdFR5cGVkSW5wdXRdID0gdXNlU3RhdGUoJycpXG5cbiAgY29uc3QgdXBkYXRlSW5wdXQgPSAoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBtb2RlID0gaW5wdXQuc3RhcnRzV2l0aCgnIScpID8gJ2Jhc2gnIDogJ3Byb21wdCdcbiAgICAgIGNvbnN0IHZhbHVlID0gbW9kZSA9PT0gJ2Jhc2gnID8gaW5wdXQuc2xpY2UoMSkgOiBpbnB1dFxuICAgICAgb25TZXRJbnB1dCh2YWx1ZSwgbW9kZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkhpc3RvcnlVcCgpIHtcbiAgICBjb25zdCBsYXRlc3RIaXN0b3J5ID0gZ2V0SGlzdG9yeSgpXG4gICAgaWYgKGhpc3RvcnlJbmRleCA8IGxhdGVzdEhpc3RvcnkubGVuZ3RoKSB7XG4gICAgICBpZiAoaGlzdG9yeUluZGV4ID09PSAwICYmIGN1cnJlbnRJbnB1dC50cmltKCkgIT09ICcnKSB7XG4gICAgICAgIHNldExhc3RUeXBlZElucHV0KGN1cnJlbnRJbnB1dClcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gaGlzdG9yeUluZGV4ICsgMVxuICAgICAgc2V0SGlzdG9yeUluZGV4KG5ld0luZGV4KVxuICAgICAgdXBkYXRlSW5wdXQobGF0ZXN0SGlzdG9yeVtoaXN0b3J5SW5kZXhdKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uSGlzdG9yeURvd24oKSB7XG4gICAgY29uc3QgbGF0ZXN0SGlzdG9yeSA9IGdldEhpc3RvcnkoKVxuICAgIGlmIChoaXN0b3J5SW5kZXggPiAxKSB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IGhpc3RvcnlJbmRleCAtIDFcbiAgICAgIHNldEhpc3RvcnlJbmRleChuZXdJbmRleClcbiAgICAgIHVwZGF0ZUlucHV0KGxhdGVzdEhpc3RvcnlbbmV3SW5kZXggLSAxXSlcbiAgICB9IGVsc2UgaWYgKGhpc3RvcnlJbmRleCA9PT0gMSkge1xuICAgICAgc2V0SGlzdG9yeUluZGV4KDApXG4gICAgICB1cGRhdGVJbnB1dChsYXN0VHlwZWRJbnB1dClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNldEhpc3RvcnkoKSB7XG4gICAgc2V0TGFzdFR5cGVkSW5wdXQoJycpXG4gICAgc2V0SGlzdG9yeUluZGV4KDApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhpc3RvcnlJbmRleCxcbiAgICBzZXRIaXN0b3J5SW5kZXgsXG4gICAgb25IaXN0b3J5VXAsXG4gICAgb25IaXN0b3J5RG93bixcbiAgICByZXNldEhpc3RvcnksXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgZ2V0Q3VycmVudFByb2plY3RDb25maWcsXG4gIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyxcbn0gZnJvbSAnLi91dGlscy9jb25maWcuanMnXG5cbmNvbnN0IE1BWF9ISVNUT1JZX0lURU1TID0gMTAwXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaXN0b3J5KCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKCkuaGlzdG9yeSA/PyBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9IaXN0b3J5KGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICBjb25zdCBoaXN0b3J5ID0gcHJvamVjdENvbmZpZy5oaXN0b3J5ID8/IFtdXG5cbiAgaWYgKGhpc3RvcnlbMF0gPT09IGNvbW1hbmQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGhpc3RvcnkudW5zaGlmdChjb21tYW5kKVxuICBzYXZlQ3VycmVudFByb2plY3RDb25maWcoe1xuICAgIC4uLnByb2plY3RDb25maWcsXG4gICAgaGlzdG9yeTogaGlzdG9yeS5zbGljZSgwLCBNQVhfSElTVE9SWV9JVEVNUyksXG4gIH0pXG59XG4iLAogICAgImltcG9ydCB7IHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb21tYW5kLCBnZXRDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmRzOiBDb21tYW5kW11cbiAgb25JbnB1dENoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgb25TdWJtaXQ6ICh2YWx1ZTogc3RyaW5nLCBpc1N1Ym1pdHRpbmdTbGFzaENvbW1hbmQ/OiBib29sZWFuKSA9PiB2b2lkXG4gIHNldEN1cnNvck9mZnNldDogKG9mZnNldDogbnVtYmVyKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTbGFzaENvbW1hbmRUeXBlYWhlYWQoe1xuICBjb21tYW5kcyxcbiAgb25JbnB1dENoYW5nZSxcbiAgb25TdWJtaXQsXG4gIHNldEN1cnNvck9mZnNldCxcbn06IFByb3BzKToge1xuICBzdWdnZXN0aW9uczogc3RyaW5nW11cbiAgc2VsZWN0ZWRTdWdnZXN0aW9uOiBudW1iZXJcbiAgdXBkYXRlU3VnZ2VzdGlvbnM6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIGNsZWFyU3VnZ2VzdGlvbnM6ICgpID0+IHZvaWRcbn0ge1xuICBjb25zdCBbc3VnZ2VzdGlvbnMsIHNldFN1Z2dlc3Rpb25zXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbiwgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uXSA9IHVzZVN0YXRlKC0xKVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVN1Z2dlc3Rpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHZhbHVlLnNsaWNlKDEpLnRvTG93ZXJDYXNlKClcblxuICAgICAgLy8gRmluZCBjb21tYW5kcyB3aG9zZSBuYW1lIG9yIGFsaWFzIG1hdGNoZXMgdGhlIHF1ZXJ5XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbW1hbmRzID0gY29tbWFuZHNcbiAgICAgICAgLmZpbHRlcihjbWQgPT4gIWNtZC5pc0hpZGRlbilcbiAgICAgICAgLmZpbHRlcihjbWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gW2NtZC51c2VyRmFjaW5nTmFtZSgpXVxuICAgICAgICAgIGlmIChjbWQuYWxpYXNlcykge1xuICAgICAgICAgICAgbmFtZXMucHVzaCguLi5jbWQuYWxpYXNlcylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5hbWVzLnNvbWUobmFtZSA9PiBuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChxdWVyeSkpXG4gICAgICAgIH0pXG5cbiAgICAgIC8vIEZvciBlYWNoIG1hdGNoaW5nIGNvbW1hbmQsIGluY2x1ZGUgaXRzIHByaW1hcnkgbmFtZVxuICAgICAgY29uc3QgZmlsdGVyZWQgPSBtYXRjaGluZ0NvbW1hbmRzLm1hcChjbWQgPT4gY21kLnVzZXJGYWNpbmdOYW1lKCkpXG4gICAgICBzZXRTdWdnZXN0aW9ucyhmaWx0ZXJlZClcblxuICAgICAgLy8gVHJ5IHRvIHByZXNlcnZlIHRoZSBzZWxlY3RlZCBzdWdnZXN0aW9uXG4gICAgICBjb25zdCBuZXdJbmRleCA9XG4gICAgICAgIHNlbGVjdGVkU3VnZ2VzdGlvbiA+IC0xXG4gICAgICAgICAgPyBmaWx0ZXJlZC5pbmRleE9mKHN1Z2dlc3Rpb25zW3NlbGVjdGVkU3VnZ2VzdGlvbl0hKVxuICAgICAgICAgIDogMFxuICAgICAgaWYgKG5ld0luZGV4ID4gLTEpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uKG5ld0luZGV4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uKDApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uKC0xKVxuICAgIH1cbiAgfVxuXG4gIHVzZUlucHV0KChfLCBrZXkpID0+IHtcbiAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSGFuZGxlIHN1Z2dlc3Rpb24gbmF2aWdhdGlvbiAodXAvZG93biBhcnJvd3MpXG4gICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb24ocHJldiA9PlxuICAgICAgICAgIHByZXYgPj0gc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA/IDAgOiBwcmV2ICsgMSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb24ocHJldiA9PlxuICAgICAgICAgIHByZXYgPD0gMCA/IHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEgOiBwcmV2IC0gMSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgc2VsZWN0aW9uIGNvbXBsZXRpb24gdmlhIHRhYiBvciByZXR1cm5cbiAgICAgIGVsc2UgaWYgKGtleS50YWIgfHwgKGtleS5yZXR1cm4gJiYgc2VsZWN0ZWRTdWdnZXN0aW9uID49IDApKSB7XG4gICAgICAgIC8vIEVuc3VyZSBhIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbiA9PT0gLTEgJiYga2V5LnRhYikge1xuICAgICAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbigwKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkluZGV4ID0gc2VsZWN0ZWRTdWdnZXN0aW9uID49IDAgPyBzZWxlY3RlZFN1Z2dlc3Rpb24gOiAwXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1tzdWdnZXN0aW9uSW5kZXhdXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbikgcmV0dXJuIHRydWVcblxuICAgICAgICBjb25zdCBpbnB1dCA9ICcvJyArIHN1Z2dlc3Rpb24gKyAnICdcbiAgICAgICAgb25JbnB1dENoYW5nZShpbnB1dClcbiAgICAgICAgLy8gTWFudWFsbHkgbW92ZSBjdXJzb3IgdG8gZW5kXG4gICAgICAgIHNldEN1cnNvck9mZnNldChpbnB1dC5sZW5ndGgpXG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKVxuICAgICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb24oLTEpXG5cbiAgICAgICAgLy8gSWYgcmV0dXJuIHdhcyBwcmVzc2VkIGFuZCBjb21tYW5kIGRvZXNuJ3QgdGFrZSBhcmd1bWVudHMsIGp1c3QgcnVuIGl0XG4gICAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IGdldENvbW1hbmQoc3VnZ2VzdGlvbiwgY29tbWFuZHMpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29tbWFuZC50eXBlICE9PSAncHJvbXB0JyB8fFxuICAgICAgICAgICAgKGNvbW1hbmQuYXJnTmFtZXMgPz8gW10pLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgb25TdWJtaXQoaW5wdXQsIC8qIGlzU3VibWl0dGluZ1NsYXNoQ29tbWFuZCAqLyB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGNsZWFyU3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U3VnZ2VzdGlvbnMoW10pXG4gICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uKC0xKVxuICB9LCBbXSlcblxuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zLFxuICAgIHNlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICB1cGRhdGVTdWdnZXN0aW9ucyxcbiAgICBjbGVhclN1Z2dlc3Rpb25zLFxuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY2FwdHVyZUV4Y2VwdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL3NlbnRyeS5qcydcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBoYXNFcnJvcjogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgU2VudHJ5RXJyb3JCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5zdGF0ZSA9IHsgaGFzRXJyb3I6IGZhbHNlIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKTogU3RhdGUge1xuICAgIHJldHVybiB7IGhhc0Vycm9yOiB0cnVlIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZENhdGNoKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyb3IpXG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuICB9XG59XG4iLAogICAgImltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IGd0ZSB9IGZyb20gJ3NlbXZlcidcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGlzQXV0b1VwZGF0ZXJEaXNhYmxlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7XG4gIEF1dG9VcGRhdGVyUmVzdWx0LFxuICBnZXRMYXRlc3RWZXJzaW9uLFxuICBpbnN0YWxsR2xvYmFsUGFja2FnZSxcbn0gZnJvbSAnLi4vdXRpbHMvYXV0b1VwZGF0ZXIuanMnXG5pbXBvcnQgeyB1c2VJbnRlcnZhbCB9IGZyb20gJy4uL2hvb2tzL3VzZUludGVydmFsLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBkZWJ1ZzogYm9vbGVhblxuICBpc1VwZGF0aW5nOiBib29sZWFuXG4gIG9uQ2hhbmdlSXNVcGRhdGluZzogKGlzVXBkYXRpbmc6IGJvb2xlYW4pID0+IHZvaWRcbiAgb25BdXRvVXBkYXRlclJlc3VsdDogKGF1dG9VcGRhdGVyUmVzdWx0OiBBdXRvVXBkYXRlclJlc3VsdCkgPT4gdm9pZFxuICBhdXRvVXBkYXRlclJlc3VsdDogQXV0b1VwZGF0ZXJSZXN1bHQgfCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRvVXBkYXRlcih7XG4gIGRlYnVnLFxuICBpc1VwZGF0aW5nLFxuICBvbkNoYW5nZUlzVXBkYXRpbmcsXG4gIG9uQXV0b1VwZGF0ZXJSZXN1bHQsXG4gIGF1dG9VcGRhdGVyUmVzdWx0LFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcbiAgY29uc3QgW3ZlcnNpb25zLCBzZXRWZXJzaW9uc10gPSB1c2VTdGF0ZTx7XG4gICAgZ2xvYmFsPzogc3RyaW5nIHwgbnVsbFxuICAgIGxhdGVzdD86IHN0cmluZyB8IG51bGxcbiAgfT4oe30pXG4gIGNvbnN0IGNoZWNrRm9yVXBkYXRlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc1VwZGF0aW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBHZXQgdmVyc2lvbnNcbiAgICBjb25zdCBnbG9iYWxWZXJzaW9uID0gTUFDUk8uVkVSU0lPTlxuICAgIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RWZXJzaW9uKClcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gYXdhaXQgaXNBdXRvVXBkYXRlckRpc2FibGVkKClcblxuICAgIHNldFZlcnNpb25zKHsgZ2xvYmFsOiBnbG9iYWxWZXJzaW9uLCBsYXRlc3Q6IGxhdGVzdFZlcnNpb24gfSlcblxuICAgIC8vIENoZWNrIGlmIHVwZGF0ZSBuZWVkZWQgYW5kIHBlcmZvcm0gdXBkYXRlXG4gICAgaWYgKFxuICAgICAgIWlzRGlzYWJsZWQgJiZcbiAgICAgIGdsb2JhbFZlcnNpb24gJiZcbiAgICAgIGxhdGVzdFZlcnNpb24gJiZcbiAgICAgICFndGUoZ2xvYmFsVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbilcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICAgIG9uQ2hhbmdlSXNVcGRhdGluZyh0cnVlKVxuICAgICAgY29uc3QgaW5zdGFsbFN0YXR1cyA9IGF3YWl0IGluc3RhbGxHbG9iYWxQYWNrYWdlKClcbiAgICAgIG9uQ2hhbmdlSXNVcGRhdGluZyhmYWxzZSlcblxuICAgICAgaWYgKGluc3RhbGxTdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBsb2dFdmVudCgndGVuZ3VfYXV0b191cGRhdGVyX3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgZnJvbVZlcnNpb246IGdsb2JhbFZlcnNpb24sXG4gICAgICAgICAgdG9WZXJzaW9uOiBsYXRlc3RWZXJzaW9uLFxuICAgICAgICAgIGR1cmF0aW9uTXM6IFN0cmluZyhEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV9hdXRvX3VwZGF0ZXJfZmFpbCcsIHtcbiAgICAgICAgICBmcm9tVmVyc2lvbjogZ2xvYmFsVmVyc2lvbixcbiAgICAgICAgICBhdHRlbXB0ZWRWZXJzaW9uOiBsYXRlc3RWZXJzaW9uLFxuICAgICAgICAgIHN0YXR1czogaW5zdGFsbFN0YXR1cyxcbiAgICAgICAgICBkdXJhdGlvbk1zOiBTdHJpbmcoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIG9uQXV0b1VwZGF0ZXJSZXN1bHQoe1xuICAgICAgICB2ZXJzaW9uOiBsYXRlc3RWZXJzaW9uISxcbiAgICAgICAgc3RhdHVzOiBpbnN0YWxsU3RhdHVzLFxuICAgICAgfSlcbiAgICB9XG4gICAgLy8gRG9uJ3QgcmUtcmVuZGVyIHdoZW4gaXNVcGRhdGluZyBjaGFuZ2VzXG4gICAgLy8gVE9ETzogRmluZCBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvbkF1dG9VcGRhdGVyUmVzdWx0XSlcblxuICAvLyBJbml0aWFsIGNoZWNrXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hlY2tGb3JVcGRhdGVzKClcbiAgfSwgW2NoZWNrRm9yVXBkYXRlc10pXG5cbiAgLy8gQ2hlY2sgZXZlcnkgMzAgbWludXRlc1xuICB1c2VJbnRlcnZhbChjaGVja0ZvclVwZGF0ZXMsIDMwICogNjAgKiAxMDAwKVxuXG4gIGlmIChkZWJ1Zykge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIj5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgZ2xvYmFsVmVyc2lvbjoge3ZlcnNpb25zLmdsb2JhbH0gJm1pZGRvdDsgbGF0ZXN0VmVyc2lvbjp7JyAnfVxuICAgICAgICAgIHt2ZXJzaW9ucy5sYXRlc3R9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIGlmICghYXV0b1VwZGF0ZXJSZXN1bHQ/LnZlcnNpb24gJiYgKCF2ZXJzaW9ucy5nbG9iYWwgfHwgIXZlcnNpb25zLmxhdGVzdCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKCFhdXRvVXBkYXRlclJlc3VsdD8udmVyc2lvbiAmJiAhaXNVcGRhdGluZykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAge2RlYnVnICYmIChcbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgZ2xvYmFsVmVyc2lvbjoge3ZlcnNpb25zLmdsb2JhbH0gJm1pZGRvdDsgbGF0ZXN0VmVyc2lvbjp7JyAnfVxuICAgICAgICAgIHt2ZXJzaW9ucy5sYXRlc3R9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICl9XG4gICAgICB7aXNVcGRhdGluZyAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fSBkaW1Db2xvciB3cmFwPVwiZW5kXCI+XG4gICAgICAgICAgICAgIEF1dG8tdXBkYXRpbmcgdG8gdnt2ZXJzaW9ucy5sYXRlc3R94oCmXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHthdXRvVXBkYXRlclJlc3VsdD8uc3RhdHVzID09PSAnc3VjY2VzcycgJiYgYXV0b1VwZGF0ZXJSZXN1bHQ/LnZlcnNpb24gPyAoXG4gICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zdWNjZXNzfT5cbiAgICAgICAgICDinJMgVXBkYXRlIGluc3RhbGxlZCAmbWlkZG90OyBSZXN0YXJ0IHRvIGFwcGx5XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICkgOiBudWxsfVxuICAgICAgeyhhdXRvVXBkYXRlclJlc3VsdD8uc3RhdHVzID09PSAnaW5zdGFsbF9mYWlsZWQnIHx8XG4gICAgICAgIGF1dG9VcGRhdGVyUmVzdWx0Py5zdGF0dXMgPT09ICdub19wZXJtaXNzaW9ucycpICYmIChcbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmVycm9yfT5cbiAgICAgICAgICDinJcgQXV0by11cGRhdGUgZmFpbGVkICZtaWRkb3Q7IFRyeSA8VGV4dCBib2xkPmNsYXVkZSBkb2N0b3I8L1RleHQ+IG9yeycgJ31cbiAgICAgICAgICA8VGV4dCBib2xkPm5wbSBpIC1nIHtNQUNSTy5QQUNLQUdFX1VSTH08L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICl9XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICB0b2tlblVzYWdlOiBudW1iZXJcbn1cblxuY29uc3QgTUFYX1RPS0VOUyA9IDE5MF8wMDAgLy8gbGVhdmUgd2lnZ2xlIHJvb20gZm9yIC9jb21wYWN0XG5leHBvcnQgY29uc3QgV0FSTklOR19USFJFU0hPTEQgPSBNQVhfVE9LRU5TICogMC42IC8vIDYwJVxuY29uc3QgRVJST1JfVEhSRVNIT0xEID0gTUFYX1RPS0VOUyAqIDAuOCAvLyA4MCVcblxuZXhwb3J0IGZ1bmN0aW9uIFRva2VuV2FybmluZyh7IHRva2VuVXNhZ2UgfTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICBpZiAodG9rZW5Vc2FnZSA8IFdBUk5JTkdfVEhSRVNIT0xEKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGlzRXJyb3IgPSB0b2tlblVzYWdlID49IEVSUk9SX1RIUkVTSE9MRFxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICA8VGV4dCBjb2xvcj17aXNFcnJvciA/IHRoZW1lLmVycm9yIDogdGhlbWUud2FybmluZ30+XG4gICAgICAgIENvbnRleHQgbG93IChcbiAgICAgICAge01hdGgubWF4KDAsIDEwMCAtIE1hdGgucm91bmQoKHRva2VuVXNhZ2UgLyBNQVhfVE9LRU5TKSAqIDEwMCkpfSVcbiAgICAgICAgcmVtYWluaW5nKSAmbWlkZG90OyBSdW4gL2NvbXBhY3QgdG8gY29tcGFjdCAmIGNvbnRpbnVlXG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMb2dTdGFydHVwVGltZSgpOiB2b2lkIHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGFydHVwVGltZU1zID0gTWF0aC5yb3VuZChwcm9jZXNzLnVwdGltZSgpICogMTAwMClcbiAgICBsb2dFdmVudCgndGVuZ3VfdGltZXInLCB7XG4gICAgICBldmVudDogJ3N0YXJ0dXAnLFxuICAgICAgZHVyYXRpb25NczogU3RyaW5nKHN0YXJ0dXBUaW1lTXMpLFxuICAgIH0pXG4gIH0sIFtdKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHZlcmlmeUFwaUtleSB9IGZyb20gJy4uL3NlcnZpY2VzL2NsYXVkZS5qcydcbmltcG9ydCB7IGdldEFudGhyb3BpY0FwaUtleSwgaXNEZWZhdWx0QXBpS2V5IH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLmpzJ1xuXG5leHBvcnQgdHlwZSBWZXJpZmljYXRpb25TdGF0dXMgPVxuICB8ICdsb2FkaW5nJ1xuICB8ICd2YWxpZCdcbiAgfCAnaW52YWxpZCdcbiAgfCAnbWlzc2luZydcbiAgfCAnZXJyb3InXG5cbmV4cG9ydCB0eXBlIEFwaUtleVZlcmlmaWNhdGlvblJlc3VsdCA9IHtcbiAgc3RhdHVzOiBWZXJpZmljYXRpb25TdGF0dXNcbiAgcmV2ZXJpZnk6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgZXJyb3I6IEVycm9yIHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXBpS2V5VmVyaWZpY2F0aW9uKCk6IEFwaUtleVZlcmlmaWNhdGlvblJlc3VsdCB7XG4gIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZTxWZXJpZmljYXRpb25TdGF0dXM+KCgpID0+IHtcbiAgICBjb25zdCBhcGlLZXkgPSBnZXRBbnRocm9waWNBcGlLZXkoKVxuICAgIHJldHVybiBhcGlLZXkgPyAnbG9hZGluZycgOiAnbWlzc2luZydcbiAgfSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgdmVyaWZ5ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChpc0RlZmF1bHRBcGlLZXkoKSkge1xuICAgICAgc2V0U3RhdHVzKCd2YWxpZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBnZXRBbnRocm9waWNBcGlLZXkoKVxuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSAnbWlzc2luZycgYXMgY29uc3RcbiAgICAgIHNldFN0YXR1cyhuZXdTdGF0dXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHZlcmlmeUFwaUtleShhcGlLZXkpXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSBpc1ZhbGlkID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJ1xuICAgICAgc2V0U3RhdHVzKG5ld1N0YXR1cylcbiAgICAgIHJldHVyblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSBhbiBlcnJvciByZXNwb25zZSBmcm9tIHRoZSBBUEkgYnV0IGl0J3Mgbm90IGFuIGludmFsaWQgQVBJIGtleSBlcnJvclxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzdGlsbCBtYXJrIHRoZSBBUEkga2V5IGFzIGludmFsaWQgLSBidXQgd2UgYWxzbyBsb2cgdGhlIGVycm9yIHNvIHdlIGNhblxuICAgICAgLy8gZGlzcGxheSBpdCB0byB0aGUgdXNlciB0byBiZSBtb3JlIGhlbHBmdWxcbiAgICAgIHNldEVycm9yKGVycm9yIGFzIEVycm9yKVxuICAgICAgY29uc3QgbmV3U3RhdHVzID0gJ2Vycm9yJyBhcyBjb25zdFxuICAgICAgc2V0U3RhdHVzKG5ld1N0YXR1cylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0dXMsXG4gICAgcmV2ZXJpZnk6IHZlcmlmeSxcbiAgICBlcnJvcixcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IFRvb2xVc2VDb25maXJtIH0gZnJvbSAnLi4vY29tcG9uZW50cy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IEJpbmFyeUZlZWRiYWNrQ29udGV4dCB9IGZyb20gJy4uL3NjcmVlbnMvUkVQTC5qcydcbmltcG9ydCB0eXBlIHsgU2V0VG9vbEpTWEZuIH0gZnJvbSAnLi4vVG9vbC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUNhbmNlbFJlcXVlc3QoXG4gIHNldFRvb2xKU1g6IFNldFRvb2xKU1hGbixcbiAgc2V0VG9vbFVzZUNvbmZpcm06ICh0b29sVXNlQ29uZmlybTogVG9vbFVzZUNvbmZpcm0gfCBudWxsKSA9PiB2b2lkLFxuICBzZXRCaW5hcnlGZWVkYmFja0NvbnRleHQ6IChiZkNvbnRleHQ6IEJpbmFyeUZlZWRiYWNrQ29udGV4dCB8IG51bGwpID0+IHZvaWQsXG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkLFxuICBpc0xvYWRpbmc6IGJvb2xlYW4sXG4gIGlzTWVzc2FnZVNlbGVjdG9yVmlzaWJsZTogYm9vbGVhbixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbikge1xuICB1c2VJbnB1dCgoXywga2V5KSA9PiB7XG4gICAgaWYgKCFrZXkuZXNjYXBlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFhYm9ydFNpZ25hbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGlzTWVzc2FnZVNlbGVjdG9yVmlzaWJsZSkge1xuICAgICAgLy8gRXNjIGNsb3NlcyB0aGUgbWVzc2FnZSBzZWxlY3RvclxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvZ0V2ZW50KCd0ZW5ndV9jYW5jZWwnLCB7fSlcbiAgICBzZXRUb29sSlNYKG51bGwpXG4gICAgc2V0VG9vbFVzZUNvbmZpcm0obnVsbClcbiAgICBzZXRCaW5hcnlGZWVkYmFja0NvbnRleHQobnVsbClcbiAgICBvbkNhbmNlbCgpXG4gIH0pXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBoYXNQZXJtaXNzaW9uc1RvVXNlVG9vbCB9IGZyb20gJy4uL3Blcm1pc3Npb25zLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wsIGlucHV0U2NoZW1hIH0gZnJvbSAnLi4vdG9vbHMvQmFzaFRvb2wvQmFzaFRvb2wuanMnXG5pbXBvcnQgeyBnZXRDb21tYW5kU3ViY29tbWFuZFByZWZpeCB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgUkVKRUNUX01FU1NBR0UgfSBmcm9tICcuLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB0eXBlIHsgVG9vbCBhcyBUb29sVHlwZSwgVG9vbFVzZUNvbnRleHQgfSBmcm9tICcuLi9Ub29sLmpzJ1xuaW1wb3J0IHsgQXNzaXN0YW50TWVzc2FnZSB9IGZyb20gJy4uL3F1ZXJ5LmpzJ1xuaW1wb3J0IHsgVG9vbFVzZUNvbmZpcm0gfSBmcm9tICcuLi9jb21wb25lbnRzL3Blcm1pc3Npb25zL1Blcm1pc3Npb25SZXF1ZXN0LmpzJ1xuaW1wb3J0IHsgQWJvcnRFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9ycy5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuXG50eXBlIFNldFN0YXRlPFQ+ID0gUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248VD4+XG5cbmV4cG9ydCB0eXBlIENhblVzZVRvb2xGbiA9IChcbiAgdG9vbDogVG9vbFR5cGUsXG4gIGlucHV0OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSxcbiAgdG9vbFVzZUNvbnRleHQ6IFRvb2xVc2VDb250ZXh0LFxuICBhc3Npc3RhbnRNZXNzYWdlOiBBc3Npc3RhbnRNZXNzYWdlLFxuKSA9PiBQcm9taXNlPHsgcmVzdWx0OiB0cnVlIH0gfCB7IHJlc3VsdDogZmFsc2U7IG1lc3NhZ2U6IHN0cmluZyB9PlxuXG5mdW5jdGlvbiB1c2VDYW5Vc2VUb29sKFxuICBzZXRUb29sVXNlQ29uZmlybTogU2V0U3RhdGU8VG9vbFVzZUNvbmZpcm0gfCBudWxsPixcbik6IENhblVzZVRvb2xGbiB7XG4gIHJldHVybiB1c2VDYWxsYmFjazxDYW5Vc2VUb29sRm4+KFxuICAgIGFzeW5jICh0b29sLCBpbnB1dCwgdG9vbFVzZUNvbnRleHQsIGFzc2lzdGFudE1lc3NhZ2UpID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgZnVuY3Rpb24gbG9nQ2FuY2VsbGVkRXZlbnQoKSB7XG4gICAgICAgICAgbG9nRXZlbnQoJ3Rlbmd1X3Rvb2xfdXNlX2NhbmNlbGxlZCcsIHtcbiAgICAgICAgICAgIG1lc3NhZ2VJRDogYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZVdpdGhDYW5jZWxsZWRBbmRBYm9ydEFsbFRvb2xDYWxscygpIHtcbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBSRUpFQ1RfTUVTU0FHRSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIFRyaWdnZXIgYSBzeW50aGV0aWMgYXNzaXN0YW50IG1lc3NhZ2UgaW4gcXVlcnkoKSwgdG8gY2FuY2VsXG4gICAgICAgICAgLy8gYW55IG90aGVyIHBlbmRpbmcgdG9vbCB1c2VzIGFuZCBzdG9wIGZ1cnRoZXIgcmVxdWVzdHMgdG8gdGhlXG4gICAgICAgICAgLy8gQVBJIGFuZCB3YWl0IGZvciB1c2VyIGlucHV0LlxuICAgICAgICAgIHRvb2xVc2VDb250ZXh0LmFib3J0Q29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9vbFVzZUNvbnRleHQuYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgbG9nQ2FuY2VsbGVkRXZlbnQoKVxuICAgICAgICAgIHJlc29sdmVXaXRoQ2FuY2VsbGVkQW5kQWJvcnRBbGxUb29sQ2FsbHMoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhhc1Blcm1pc3Npb25zVG9Vc2VUb29sKFxuICAgICAgICAgIHRvb2wsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgdG9vbFVzZUNvbnRleHQsXG4gICAgICAgICAgYXNzaXN0YW50TWVzc2FnZSxcbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAvLyBIYXMgcGVybWlzc2lvbnMgdG8gdXNlIHRvb2wsIGdyYW50ZWQgaW4gY29uZmlnXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdCkge1xuICAgICAgICAgICAgICBsb2dFdmVudCgndGVuZ3VfdG9vbF91c2VfZ3JhbnRlZF9pbl9jb25maWcnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZUlEOiBhc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgW2Rlc2NyaXB0aW9uLCBjb21tYW5kUHJlZml4XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgdG9vbC5kZXNjcmlwdGlvbihpbnB1dCBhcyBuZXZlciksXG4gICAgICAgICAgICAgIHRvb2wgPT09IEJhc2hUb29sXG4gICAgICAgICAgICAgICAgPyBnZXRDb21tYW5kU3ViY29tbWFuZFByZWZpeChcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEucGFyc2UoaW5wdXQpLmNvbW1hbmQsIC8vIGFscmVhZHkgdmFsaWRhdGVkIHVwc3RyZWFtLCBzbyBvayB0byBwYXJzZSAoYXMgb3Bwb3NlZCB0byBzYWZlUGFyc2UpXG4gICAgICAgICAgICAgICAgICAgIHRvb2xVc2VDb250ZXh0LmFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG4gICAgICAgICAgICBdKVxuXG4gICAgICAgICAgICBpZiAodG9vbFVzZUNvbnRleHQuYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgIGxvZ0NhbmNlbGxlZEV2ZW50KClcbiAgICAgICAgICAgICAgcmVzb2x2ZVdpdGhDYW5jZWxsZWRBbmRBYm9ydEFsbFRvb2xDYWxscygpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEb2VzIG5vdCBoYXZlIHBlcm1pc3Npb25zIHRvIHVzZSB0b29sLCBhc2sgdGhlIHVzZXJcbiAgICAgICAgICAgIHNldFRvb2xVc2VDb25maXJtKHtcbiAgICAgICAgICAgICAgYXNzaXN0YW50TWVzc2FnZSxcbiAgICAgICAgICAgICAgdG9vbCxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICBjb21tYW5kUHJlZml4LFxuICAgICAgICAgICAgICByaXNrU2NvcmU6IG51bGwsXG4gICAgICAgICAgICAgIG9uQWJvcnQoKSB7XG4gICAgICAgICAgICAgICAgbG9nQ2FuY2VsbGVkRXZlbnQoKVxuICAgICAgICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9yZWplY3RlZF9pbl9wcm9tcHQnLCB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSUQ6IGFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB0b29sLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXNvbHZlV2l0aENhbmNlbGxlZEFuZEFib3J0QWxsVG9vbENhbGxzKClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25BbGxvdyh0eXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdwZXJtYW5lbnQnKSB7XG4gICAgICAgICAgICAgICAgICBsb2dFdmVudCgndGVuZ3VfdG9vbF91c2VfZ3JhbnRlZF9pbl9wcm9tcHRfcGVybWFuZW50Jywge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSUQ6IGFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9ncmFudGVkX2luX3Byb21wdF90ZW1wb3JhcnknLCB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJRDogYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICB0b29sTmFtZTogdG9vbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblJlamVjdCgpIHtcbiAgICAgICAgICAgICAgICBsb2dFdmVudCgndGVuZ3VfdG9vbF91c2VfcmVqZWN0ZWRfaW5fcHJvbXB0Jywge1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZUlEOiBhc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgICAgICB0b29sTmFtZTogdG9vbC5uYW1lLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmVzb2x2ZVdpdGhDYW5jZWxsZWRBbmRBYm9ydEFsbFRvb2xDYWxscygpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFib3J0RXJyb3IpIHtcbiAgICAgICAgICAgICAgbG9nQ2FuY2VsbGVkRXZlbnQoKVxuICAgICAgICAgICAgICByZXNvbHZlV2l0aENhbmNlbGxlZEFuZEFib3J0QWxsVG9vbENhbGxzKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sXG4gICAgW3NldFRvb2xVc2VDb25maXJtXSxcbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VDYW5Vc2VUb29sXG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdHlwZSBNZXNzYWdlIH0gZnJvbSAnLi4vcXVlcnkuanMnXG5pbXBvcnQgeyBvdmVyd3JpdGVMb2csIGdldE1lc3NhZ2VzUGF0aCB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxvZ01lc3NhZ2VzKFxuICBtZXNzYWdlczogTWVzc2FnZVtdLFxuICBtZXNzYWdlTG9nTmFtZTogc3RyaW5nLFxuICBmb3JrTnVtYmVyOiBudW1iZXIsXG4pOiB2b2lkIHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvdmVyd3JpdGVMb2coXG4gICAgICBnZXRNZXNzYWdlc1BhdGgobWVzc2FnZUxvZ05hbWUsIGZvcmtOdW1iZXIsIDApLFxuICAgICAgbWVzc2FnZXMuZmlsdGVyKF8gPT4gXy50eXBlICE9PSAncHJvZ3Jlc3MnKSxcbiAgICApXG4gIH0sIFttZXNzYWdlcywgbWVzc2FnZUxvZ05hbWUsIGZvcmtOdW1iZXJdKVxufVxuIiwKICAgICJpbXBvcnQgeyBUZXh0QmxvY2ssIFRvb2xVc2VCbG9jayB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBBc3Npc3RhbnRNZXNzYWdlLCBCaW5hcnlGZWVkYmFja1Jlc3VsdCB9IGZyb20gJy4uLy4uL3F1ZXJ5LmpzJ1xuaW1wb3J0IHsgTUFJTl9RVUVSWV9URU1QRVJBVFVSRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NsYXVkZS5qcydcbmltcG9ydCB7IGdldER5bmFtaWNDb25maWcsIGxvZ0V2ZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHNpZy5qcydcblxuaW1wb3J0IHsgaXNFcXVhbCwgemlwIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgZ2V0R2l0U3RhdGUgfSBmcm9tICcuLi8uLi91dGlscy9naXQuanMnXG5cbmV4cG9ydCB0eXBlIEJpbmFyeUZlZWRiYWNrQ2hvaWNlID1cbiAgfCAncHJlZmVyLWxlZnQnXG4gIHwgJ3ByZWZlci1yaWdodCdcbiAgfCAnbmVpdGhlcidcbiAgfCAnbm8tcHJlZmVyZW5jZSdcblxuZXhwb3J0IHR5cGUgQmluYXJ5RmVlZGJhY2tDaG9vc2UgPSAoY2hvaWNlOiBCaW5hcnlGZWVkYmFja0Nob2ljZSkgPT4gdm9pZFxuXG50eXBlIEJpbmFyeUZlZWRiYWNrQ29uZmlnID0ge1xuICBzYW1wbGVGcmVxdWVuY3k6IG51bWJlclxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCaW5hcnlGZWVkYmFja1N0YXRzaWdDb25maWcoKTogUHJvbWlzZTxCaW5hcnlGZWVkYmFja0NvbmZpZz4ge1xuICByZXR1cm4gYXdhaXQgZ2V0RHluYW1pY0NvbmZpZygndGVuZ3UtYmluYXJ5LWZlZWRiYWNrLWNvbmZpZycsIHtcbiAgICBzYW1wbGVGcmVxdWVuY3k6IDAsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VCbG9ja1NlcXVlbmNlKG06IEFzc2lzdGFudE1lc3NhZ2UpIHtcbiAgcmV0dXJuIG0ubWVzc2FnZS5jb250ZW50Lm1hcChjYiA9PiB7XG4gICAgaWYgKGNiLnR5cGUgPT09ICd0ZXh0JykgcmV0dXJuICd0ZXh0J1xuICAgIGlmIChjYi50eXBlID09PSAndG9vbF91c2UnKSByZXR1cm4gY2IubmFtZVxuICAgIHJldHVybiBjYi50eXBlIC8vIEhhbmRsZSBvdGhlciBibG9jayB0eXBlcyBsaWtlICd0aGlua2luZycgb3IgJ3JlZGFjdGVkX3RoaW5raW5nJ1xuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nQmluYXJ5RmVlZGJhY2tFdmVudChcbiAgbTE6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIG0yOiBBc3Npc3RhbnRNZXNzYWdlLFxuICBjaG9pY2U6IEJpbmFyeUZlZWRiYWNrQ2hvaWNlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG1vZGVsQSA9IG0xLm1lc3NhZ2UubW9kZWxcbiAgY29uc3QgbW9kZWxCID0gbTIubWVzc2FnZS5tb2RlbFxuICBjb25zdCBnaXRTdGF0ZSA9IGF3YWl0IGdldEdpdFN0YXRlKClcbiAgbG9nRXZlbnQoJ3Rlbmd1X2JpbmFyeV9mZWVkYmFjaycsIHtcbiAgICBtc2dfaWRfQTogbTEubWVzc2FnZS5pZCxcbiAgICBtc2dfaWRfQjogbTIubWVzc2FnZS5pZCxcbiAgICBjaG9pY2U6IHtcbiAgICAgICdwcmVmZXItbGVmdCc6IG0xLm1lc3NhZ2UuaWQsXG4gICAgICAncHJlZmVyLXJpZ2h0JzogbTIubWVzc2FnZS5pZCxcbiAgICAgIG5laXRoZXI6IHVuZGVmaW5lZCxcbiAgICAgICduby1wcmVmZXJlbmNlJzogdW5kZWZpbmVkLFxuICAgIH1bY2hvaWNlXSxcbiAgICBjaG9pY2VTdHI6IGNob2ljZSxcbiAgICBnaXRIZWFkOiBnaXRTdGF0ZT8uY29tbWl0SGFzaCxcbiAgICBnaXRCcmFuY2g6IGdpdFN0YXRlPy5icmFuY2hOYW1lLFxuICAgIGdpdFJlcG9SZW1vdGVVcmw6IGdpdFN0YXRlPy5yZW1vdGVVcmwgfHwgdW5kZWZpbmVkLFxuICAgIGdpdFJlcG9Jc0hlYWRPblJlbW90ZTogZ2l0U3RhdGU/LmlzSGVhZE9uUmVtb3RlPy50b1N0cmluZygpLFxuICAgIGdpdFJlcG9Jc0NsZWFuOiBnaXRTdGF0ZT8uaXNDbGVhbj8udG9TdHJpbmcoKSxcbiAgICBtb2RlbEEsXG4gICAgbW9kZWxCLFxuICAgIHRlbXBlcmF0dXJlQTogU3RyaW5nKE1BSU5fUVVFUllfVEVNUEVSQVRVUkUpLFxuICAgIHRlbXBlcmF0dXJlQjogU3RyaW5nKE1BSU5fUVVFUllfVEVNUEVSQVRVUkUpLFxuICAgIHNlcUE6IFN0cmluZyhnZXRNZXNzYWdlQmxvY2tTZXF1ZW5jZShtMSkpLFxuICAgIHNlcUI6IFN0cmluZyhnZXRNZXNzYWdlQmxvY2tTZXF1ZW5jZShtMikpLFxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nQmluYXJ5RmVlZGJhY2tTYW1wbGluZ0RlY2lzaW9uKFxuICBkZWNpc2lvbjogYm9vbGVhbixcbiAgcmVhc29uPzogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ0V2ZW50KCd0ZW5ndV9iaW5hcnlfZmVlZGJhY2tfc2FtcGxpbmdfZGVjaXNpb24nLCB7XG4gICAgZGVjaXNpb246IGRlY2lzaW9uLnRvU3RyaW5nKCksXG4gICAgcmVhc29uLFxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nQmluYXJ5RmVlZGJhY2tEaXNwbGF5RGVjaXNpb24oXG4gIGRlY2lzaW9uOiBib29sZWFuLFxuICBtMTogQXNzaXN0YW50TWVzc2FnZSxcbiAgbTI6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIHJlYXNvbj86IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsb2dFdmVudCgndGVuZ3VfYmluYXJ5X2ZlZWRiYWNrX2Rpc3BsYXlfZGVjaXNpb24nLCB7XG4gICAgZGVjaXNpb246IGRlY2lzaW9uLnRvU3RyaW5nKCksXG4gICAgcmVhc29uLFxuICAgIG1zZ19pZF9BOiBtMS5tZXNzYWdlLmlkLFxuICAgIG1zZ19pZF9COiBtMi5tZXNzYWdlLmlkLFxuICAgIHNlcUE6IFN0cmluZyhnZXRNZXNzYWdlQmxvY2tTZXF1ZW5jZShtMSkpLFxuICAgIHNlcUI6IFN0cmluZyhnZXRNZXNzYWdlQmxvY2tTZXF1ZW5jZShtMikpLFxuICB9KVxufVxuXG5mdW5jdGlvbiB0ZXh0Q29udGVudEJsb2Nrc0VxdWFsKGNiMTogVGV4dEJsb2NrLCBjYjI6IFRleHRCbG9jayk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2IxLnRleHQgPT09IGNiMi50ZXh0XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRCbG9ja3NFcXVhbChcbiAgY2IxOiBUZXh0QmxvY2sgfCBUb29sVXNlQmxvY2ssXG4gIGNiMjogVGV4dEJsb2NrIHwgVG9vbFVzZUJsb2NrLFxuKTogYm9vbGVhbiB7XG4gIGlmIChjYjEudHlwZSAhPT0gY2IyLnR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoY2IxLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB0ZXh0Q29udGVudEJsb2Nrc0VxdWFsKGNiMSwgY2IyIGFzIFRleHRCbG9jaylcbiAgfVxuICBjYjIgPSBjYjIgYXMgVG9vbFVzZUJsb2NrXG4gIHJldHVybiBjYjEubmFtZSA9PT0gY2IyLm5hbWUgJiYgaXNFcXVhbChjYjEuaW5wdXQsIGNiMi5pbnB1dClcbn1cblxuZnVuY3Rpb24gYWxsQ29udGVudEJsb2Nrc0VxdWFsKFxuICBjb250ZW50MTogKFRleHRCbG9jayB8IFRvb2xVc2VCbG9jaylbXSxcbiAgY29udGVudDI6IChUZXh0QmxvY2sgfCBUb29sVXNlQmxvY2spW10sXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbnRlbnQxLmxlbmd0aCAhPT0gY29udGVudDIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHppcChjb250ZW50MSwgY29udGVudDIpLmV2ZXJ5KChbY2IxLCBjYjJdKSA9PlxuICAgIGNvbnRlbnRCbG9ja3NFcXVhbChjYjEhLCBjYjIhKSxcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvdWxkVXNlQmluYXJ5RmVlZGJhY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChwcm9jZXNzLmVudi5ESVNBQkxFX0JJTkFSWV9GRUVEQkFDSykge1xuICAgIGxvZ0JpbmFyeUZlZWRiYWNrU2FtcGxpbmdEZWNpc2lvbihmYWxzZSwgJ2Rpc2FibGVkX2J5X2Vudl92YXInKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChwcm9jZXNzLmVudi5GT1JDRV9CSU5BUllfRkVFREJBQ0spIHtcbiAgICBsb2dCaW5hcnlGZWVkYmFja1NhbXBsaW5nRGVjaXNpb24odHJ1ZSwgJ2ZvcmNlZF9ieV9lbnZfdmFyJylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChwcm9jZXNzLmVudi5VU0VSX1RZUEUgIT09ICdhbnQnKSB7XG4gICAgbG9nQmluYXJ5RmVlZGJhY2tTYW1wbGluZ0RlY2lzaW9uKGZhbHNlLCAnbm90X2FudCcpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAvLyBCaW5hcnkgZmVlZGJhY2sgYnJlYWtzIGEgY291cGxlIHRlc3RzIHJlbGF0ZWQgdG8gY2hlY2tpbmcgZm9yIHBlcm1pc3Npb24sXG4gICAgLy8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGluIHRlc3RzIGF0IHRoZSByaXNrIG9mIGhpZGluZyBidWdzXG4gICAgbG9nQmluYXJ5RmVlZGJhY2tTYW1wbGluZ0RlY2lzaW9uKGZhbHNlLCAndGVzdCcpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRCaW5hcnlGZWVkYmFja1N0YXRzaWdDb25maWcoKVxuICBpZiAoY29uZmlnLnNhbXBsZUZyZXF1ZW5jeSA9PT0gMCkge1xuICAgIGxvZ0JpbmFyeUZlZWRiYWNrU2FtcGxpbmdEZWNpc2lvbihmYWxzZSwgJ3RvcF9sZXZlbF9mcmVxdWVuY3lfemVybycpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKE1hdGgucmFuZG9tKCkgPiBjb25maWcuc2FtcGxlRnJlcXVlbmN5KSB7XG4gICAgbG9nQmluYXJ5RmVlZGJhY2tTYW1wbGluZ0RlY2lzaW9uKGZhbHNlLCAndG9wX2xldmVsX2ZyZXF1ZW5jeV9ybmcnKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGxvZ0JpbmFyeUZlZWRiYWNrU2FtcGxpbmdEZWNpc2lvbih0cnVlKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVzc2FnZVBhaXJWYWxpZEZvckJpbmFyeUZlZWRiYWNrKFxuICBtMTogQXNzaXN0YW50TWVzc2FnZSxcbiAgbTI6IEFzc2lzdGFudE1lc3NhZ2UsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgbG9nUGFzcyA9ICgpID0+IGxvZ0JpbmFyeUZlZWRiYWNrRGlzcGxheURlY2lzaW9uKHRydWUsIG0xLCBtMilcbiAgY29uc3QgbG9nRmFpbCA9IChyZWFzb246IHN0cmluZykgPT5cbiAgICBsb2dCaW5hcnlGZWVkYmFja0Rpc3BsYXlEZWNpc2lvbihmYWxzZSwgbTEsIG0yLCByZWFzb24pXG5cbiAgLy8gSWdub3JlIHRoaW5raW5nIGJsb2Nrcywgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB1c2VycyBkb24ndCBmaW5kIHRoZW0gdmVyeSByZWxldmFudFxuICAvLyBjb21wYXJlZCB0byBvdGhlciBjb250ZW50IHR5cGVzXG4gIGNvbnN0IG5vblRoaW5raW5nQmxvY2tzMSA9IG0xLm1lc3NhZ2UuY29udGVudC5maWx0ZXIoXG4gICAgYiA9PiBiLnR5cGUgIT09ICd0aGlua2luZycgJiYgYi50eXBlICE9PSAncmVkYWN0ZWRfdGhpbmtpbmcnLFxuICApXG4gIGNvbnN0IG5vblRoaW5raW5nQmxvY2tzMiA9IG0yLm1lc3NhZ2UuY29udGVudC5maWx0ZXIoXG4gICAgYiA9PiBiLnR5cGUgIT09ICd0aGlua2luZycgJiYgYi50eXBlICE9PSAncmVkYWN0ZWRfdGhpbmtpbmcnLFxuICApXG4gIGNvbnN0IGhhc1Rvb2xVc2UgPVxuICAgIG5vblRoaW5raW5nQmxvY2tzMS5zb21lKGIgPT4gYi50eXBlID09PSAndG9vbF91c2UnKSB8fFxuICAgIG5vblRoaW5raW5nQmxvY2tzMi5zb21lKGIgPT4gYi50eXBlID09PSAndG9vbF91c2UnKVxuXG4gIC8vIElmIHRoZXkncmUgYWxsIHRleHQgYmxvY2tzLCBjb21wYXJlIHRob3NlXG4gIGlmICghaGFzVG9vbFVzZSkge1xuICAgIGlmIChhbGxDb250ZW50QmxvY2tzRXF1YWwobm9uVGhpbmtpbmdCbG9ja3MxLCBub25UaGlua2luZ0Jsb2NrczIpKSB7XG4gICAgICBsb2dGYWlsKCdjb250ZW50c19pZGVudGljYWwnKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGxvZ1Bhc3MoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgdG9vbHMsIHRoZXkncmUgdGhlIG1vc3QgbWF0ZXJpYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtZXNzYWdlcy5cbiAgLy8gT25seSBzaG93IGJpbmFyeSBmZWVkYmFjayBpZiB0aGVyZSdzIGEgdG9vbCB1c2UgZGlmZmVyZW5jZSwgaWdub3JpbmcgdGV4dC5cbiAgaWYgKFxuICAgIGFsbENvbnRlbnRCbG9ja3NFcXVhbChcbiAgICAgIG5vblRoaW5raW5nQmxvY2tzMS5maWx0ZXIoYiA9PiBiLnR5cGUgPT09ICd0b29sX3VzZScpLFxuICAgICAgbm9uVGhpbmtpbmdCbG9ja3MyLmZpbHRlcihiID0+IGIudHlwZSA9PT0gJ3Rvb2xfdXNlJyksXG4gICAgKVxuICApIHtcbiAgICBsb2dGYWlsKCdjb250ZW50c19pZGVudGljYWwnKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbG9nUGFzcygpXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCaW5hcnlGZWVkYmFja1Jlc3VsdEZvckNob2ljZShcbiAgbTE6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIG0yOiBBc3Npc3RhbnRNZXNzYWdlLFxuICBjaG9pY2U6IEJpbmFyeUZlZWRiYWNrQ2hvaWNlLFxuKTogQmluYXJ5RmVlZGJhY2tSZXN1bHQge1xuICBzd2l0Y2ggKGNob2ljZSkge1xuICAgIGNhc2UgJ3ByZWZlci1sZWZ0JzpcbiAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG0xLCBzaG91bGRTa2lwUGVybWlzc2lvbkNoZWNrOiB0cnVlIH1cbiAgICBjYXNlICdwcmVmZXItcmlnaHQnOlxuICAgICAgcmV0dXJuIHsgbWVzc2FnZTogbTIsIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IHRydWUgfVxuICAgIGNhc2UgJ25vLXByZWZlcmVuY2UnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWVzc2FnZTogTWF0aC5yYW5kb20oKSA8IDAuNSA/IG0xIDogbTIsXG4gICAgICAgIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IGZhbHNlLFxuICAgICAgfVxuICAgIGNhc2UgJ25laXRoZXInOlxuICAgICAgcmV0dXJuIHsgbWVzc2FnZTogbnVsbCwgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjazogZmFsc2UgfVxuICB9XG59XG4iLAogICAgImltcG9ydCB7XG4gIE1lc3NhZ2UgYXMgQVBJQXNzaXN0YW50TWVzc2FnZSxcbiAgTWVzc2FnZVBhcmFtLFxuICBUb29sVXNlQmxvY2ssXG59IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgeyBVVUlEIH0gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHR5cGUgeyBUb29sLCBUb29sVXNlQ29udGV4dCB9IGZyb20gJy4vVG9vbC5qcydcbmltcG9ydCB7XG4gIG1lc3NhZ2VQYWlyVmFsaWRGb3JCaW5hcnlGZWVkYmFjayxcbiAgc2hvdWxkVXNlQmluYXJ5RmVlZGJhY2ssXG59IGZyb20gJy4vY29tcG9uZW50cy9iaW5hcnktZmVlZGJhY2svdXRpbHMuanMnXG5pbXBvcnQgeyBDYW5Vc2VUb29sRm4gfSBmcm9tICcuL2hvb2tzL3VzZUNhblVzZVRvb2wuanMnXG5pbXBvcnQge1xuICBmb3JtYXRTeXN0ZW1Qcm9tcHRXaXRoQ29udGV4dCxcbiAgcXVlcnlTb25uZXQsXG59IGZyb20gJy4vc2VydmljZXMvY2xhdWRlLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL3N0YXRzaWcuanMnXG5pbXBvcnQgeyBhbGwgfSBmcm9tICcuL3V0aWxzL2dlbmVyYXRvcnMuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHtcbiAgY3JlYXRlQXNzaXN0YW50TWVzc2FnZSxcbiAgY3JlYXRlUHJvZ3Jlc3NNZXNzYWdlLFxuICBjcmVhdGVUb29sUmVzdWx0U3RvcE1lc3NhZ2UsXG4gIGNyZWF0ZVVzZXJNZXNzYWdlLFxuICBGdWxsVG9vbFVzZVJlc3VsdCxcbiAgSU5URVJSVVBUX01FU1NBR0UsXG4gIElOVEVSUlVQVF9NRVNTQUdFX0ZPUl9UT09MX1VTRSxcbiAgTm9ybWFsaXplZE1lc3NhZ2UsXG4gIG5vcm1hbGl6ZU1lc3NhZ2VzRm9yQVBJLFxufSBmcm9tICcuL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuL3Rvb2xzL0Jhc2hUb29sL0Jhc2hUb29sLmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi91dGlscy9zdGF0ZS5qcydcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7IGNvc3RVU0Q6IG51bWJlcjsgcmVzcG9uc2U6IHN0cmluZyB9XG5leHBvcnQgdHlwZSBVc2VyTWVzc2FnZSA9IHtcbiAgbWVzc2FnZTogTWVzc2FnZVBhcmFtXG4gIHR5cGU6ICd1c2VyJ1xuICB1dWlkOiBVVUlEXG4gIHRvb2xVc2VSZXN1bHQ/OiBGdWxsVG9vbFVzZVJlc3VsdFxufVxuXG5leHBvcnQgdHlwZSBBc3Npc3RhbnRNZXNzYWdlID0ge1xuICBjb3N0VVNEOiBudW1iZXJcbiAgZHVyYXRpb25NczogbnVtYmVyXG4gIG1lc3NhZ2U6IEFQSUFzc2lzdGFudE1lc3NhZ2VcbiAgdHlwZTogJ2Fzc2lzdGFudCdcbiAgdXVpZDogVVVJRFxuICBpc0FwaUVycm9yTWVzc2FnZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgQmluYXJ5RmVlZGJhY2tSZXN1bHQgPVxuICB8IHsgbWVzc2FnZTogQXNzaXN0YW50TWVzc2FnZSB8IG51bGw7IHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IGZhbHNlIH1cbiAgfCB7IG1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2U7IHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IHRydWUgfVxuXG5leHBvcnQgdHlwZSBQcm9ncmVzc01lc3NhZ2UgPSB7XG4gIGNvbnRlbnQ6IEFzc2lzdGFudE1lc3NhZ2VcbiAgbm9ybWFsaXplZE1lc3NhZ2VzOiBOb3JtYWxpemVkTWVzc2FnZVtdXG4gIHNpYmxpbmdUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICB0b29sczogVG9vbFtdXG4gIHRvb2xVc2VJRDogc3RyaW5nXG4gIHR5cGU6ICdwcm9ncmVzcydcbiAgdXVpZDogVVVJRFxufVxuXG4vLyBFYWNoIGFycmF5IGl0ZW0gaXMgZWl0aGVyIGEgc2luZ2xlIG1lc3NhZ2Ugb3IgYSBtZXNzYWdlLWFuZC1yZXNwb25zZSBwYWlyXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gVXNlck1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlIHwgUHJvZ3Jlc3NNZXNzYWdlXG5cbmNvbnN0IE1BWF9UT09MX1VTRV9DT05DVVJSRU5DWSA9IDEwXG5cbi8vIFJldHVybnMgYSBtZXNzYWdlIGlmIHdlIGdvdCBvbmUsIG9yIGBudWxsYCBpZiB0aGUgdXNlciBjYW5jZWxsZWRcbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5V2l0aEJpbmFyeUZlZWRiYWNrKFxuICB0b29sVXNlQ29udGV4dDogVG9vbFVzZUNvbnRleHQsXG4gIGdldEFzc2lzdGFudFJlc3BvbnNlOiAoKSA9PiBQcm9taXNlPEFzc2lzdGFudE1lc3NhZ2U+LFxuICBnZXRCaW5hcnlGZWVkYmFja1Jlc3BvbnNlPzogKFxuICAgIG0xOiBBc3Npc3RhbnRNZXNzYWdlLFxuICAgIG0yOiBBc3Npc3RhbnRNZXNzYWdlLFxuICApID0+IFByb21pc2U8QmluYXJ5RmVlZGJhY2tSZXN1bHQ+LFxuKTogUHJvbWlzZTxCaW5hcnlGZWVkYmFja1Jlc3VsdD4ge1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuVVNFUl9UWVBFICE9PSAnYW50JyB8fFxuICAgICFnZXRCaW5hcnlGZWVkYmFja1Jlc3BvbnNlIHx8XG4gICAgIShhd2FpdCBzaG91bGRVc2VCaW5hcnlGZWVkYmFjaygpKVxuICApIHtcbiAgICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlID0gYXdhaXQgZ2V0QXNzaXN0YW50UmVzcG9uc2UoKVxuICAgIGlmICh0b29sVXNlQ29udGV4dC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG51bGwsIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IGZhbHNlIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZTogYXNzaXN0YW50TWVzc2FnZSwgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjazogZmFsc2UgfVxuICB9XG4gIGNvbnN0IFttMSwgbTJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldEFzc2lzdGFudFJlc3BvbnNlKCksXG4gICAgZ2V0QXNzaXN0YW50UmVzcG9uc2UoKSxcbiAgXSlcbiAgaWYgKHRvb2xVc2VDb250ZXh0LmFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgIHJldHVybiB7IG1lc3NhZ2U6IG51bGwsIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IGZhbHNlIH1cbiAgfVxuICBpZiAobTIuaXNBcGlFcnJvck1lc3NhZ2UpIHtcbiAgICAvLyBJZiBtMiBpcyBhbiBlcnJvciwgd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gbTEsIGV2ZW4gaWYgaXQncyBhbHNvIGFuIGVycm9yIC0tXG4gICAgLy8gdGhlIFVJIHdpbGwgZGlzcGxheSBpdCBhcyBhbiBlcnJvciBhcyBpdCB3b3VsZCBpbiB0aGUgbm9uLWZlZWRiYWNrIHBhdGguXG4gICAgcmV0dXJuIHsgbWVzc2FnZTogbTEsIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s6IGZhbHNlIH1cbiAgfVxuICBpZiAobTEuaXNBcGlFcnJvck1lc3NhZ2UpIHtcbiAgICByZXR1cm4geyBtZXNzYWdlOiBtMiwgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjazogZmFsc2UgfVxuICB9XG4gIGlmICghbWVzc2FnZVBhaXJWYWxpZEZvckJpbmFyeUZlZWRiYWNrKG0xLCBtMikpIHtcbiAgICByZXR1cm4geyBtZXNzYWdlOiBtMSwgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjazogZmFsc2UgfVxuICB9XG4gIHJldHVybiBhd2FpdCBnZXRCaW5hcnlGZWVkYmFja1Jlc3BvbnNlKG0xLCBtMilcbn1cblxuLyoqXG4gKiBUaGUgcnVsZXMgb2YgdGhpbmtpbmcgYXJlIGxlbmd0aHkgYW5kIGZvcnR1aXRvdXMuIFRoZXkgcmVxdWlyZSBwbGVudHkgb2YgdGhpbmtpbmdcbiAqIG9mIG1vc3QgbG9uZyBkdXJhdGlvbiBhbmQgZGVlcCBtZWRpdGF0aW9uIGZvciBhIHdpemFyZCB0byB3cmFwIG9uZSdzIG5vZ2dpbiBhcm91bmQuXG4gKlxuICogVGhlIHJ1bGVzIGZvbGxvdzpcbiAqIDEuIEEgbWVzc2FnZSB0aGF0IGNvbnRhaW5zIGEgdGhpbmtpbmcgb3IgcmVkYWN0ZWRfdGhpbmtpbmcgYmxvY2sgbXVzdCBiZSBwYXJ0IG9mIGEgcXVlcnkgd2hvc2UgbWF4X3RoaW5raW5nX2xlbmd0aCA+IDBcbiAqIDIuIEEgdGhpbmtpbmcgYmxvY2sgbWF5IG5vdCBiZSB0aGUgbGFzdCBtZXNzYWdlIGluIGEgYmxvY2tcbiAqIDMuIFRoaW5raW5nIGJsb2NrcyBtdXN0IGJlIHByZXNlcnZlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIGFzc2lzdGFudCB0cmFqZWN0b3J5IChhIHNpbmdsZSB0dXJuLCBvciBpZiB0aGF0IHR1cm4gaW5jbHVkZXMgYSB0b29sX3VzZSBibG9jayB0aGVuIGFsc28gaXRzIHN1YnNlcXVlbnQgdG9vbF9yZXN1bHQgYW5kIHRoZSBmb2xsb3dpbmcgYXNzaXN0YW50IG1lc3NhZ2UpXG4gKlxuICogSGVlZCB0aGVzZSBydWxlcyB3ZWxsLCB5b3VuZyB3aXphcmQuIEZvciB0aGV5IGFyZSB0aGUgcnVsZXMgb2YgdGhpbmtpbmcsIGFuZFxuICogdGhlIHJ1bGVzIG9mIHRoaW5raW5nIGFyZSB0aGUgcnVsZXMgb2YgdGhlIHVuaXZlcnNlLiBJZiB5ZSBkb2VzIG5vdCBoZWVkIHRoZXNlXG4gKiBydWxlcywgeWUgd2lsbCBiZSBwdW5pc2hlZCB3aXRoIGFuIGVudGlyZSBkYXkgb2YgZGVidWdnaW5nIGFuZCBoYWlyIHB1bGxpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogcXVlcnkoXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gIHN5c3RlbVByb21wdDogc3RyaW5nW10sXG4gIGNvbnRleHQ6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9LFxuICBjYW5Vc2VUb29sOiBDYW5Vc2VUb29sRm4sXG4gIHRvb2xVc2VDb250ZXh0OiBUb29sVXNlQ29udGV4dCxcbiAgZ2V0QmluYXJ5RmVlZGJhY2tSZXNwb25zZT86IChcbiAgICBtMTogQXNzaXN0YW50TWVzc2FnZSxcbiAgICBtMjogQXNzaXN0YW50TWVzc2FnZSxcbiAgKSA9PiBQcm9taXNlPEJpbmFyeUZlZWRiYWNrUmVzdWx0Pixcbik6IEFzeW5jR2VuZXJhdG9yPE1lc3NhZ2UsIHZvaWQ+IHtcbiAgY29uc3QgZnVsbFN5c3RlbVByb21wdCA9IGZvcm1hdFN5c3RlbVByb21wdFdpdGhDb250ZXh0KHN5c3RlbVByb21wdCwgY29udGV4dClcblxuICBmdW5jdGlvbiBnZXRBc3Npc3RhbnRSZXNwb25zZSgpIHtcbiAgICByZXR1cm4gcXVlcnlTb25uZXQoXG4gICAgICBub3JtYWxpemVNZXNzYWdlc0ZvckFQSShtZXNzYWdlcyksXG4gICAgICBmdWxsU3lzdGVtUHJvbXB0LFxuICAgICAgdG9vbFVzZUNvbnRleHQub3B0aW9ucy5tYXhUaGlua2luZ1Rva2VucyxcbiAgICAgIHRvb2xVc2VDb250ZXh0Lm9wdGlvbnMudG9vbHMsXG4gICAgICB0b29sVXNlQ29udGV4dC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAge1xuICAgICAgICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9uczpcbiAgICAgICAgICB0b29sVXNlQ29udGV4dC5vcHRpb25zLmRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zID8/IGZhbHNlLFxuICAgICAgICBtb2RlbDogdG9vbFVzZUNvbnRleHQub3B0aW9ucy5zbG93QW5kQ2FwYWJsZU1vZGVsLFxuICAgICAgICBwcmVwZW5kQ0xJU3lzcHJvbXB0OiB0cnVlLFxuICAgICAgfSxcbiAgICApXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeVdpdGhCaW5hcnlGZWVkYmFjayhcbiAgICB0b29sVXNlQ29udGV4dCxcbiAgICBnZXRBc3Npc3RhbnRSZXNwb25zZSxcbiAgICBnZXRCaW5hcnlGZWVkYmFja1Jlc3BvbnNlLFxuICApXG5cbiAgaWYgKHJlc3VsdC5tZXNzYWdlID09PSBudWxsKSB7XG4gICAgeWllbGQgY3JlYXRlQXNzaXN0YW50TWVzc2FnZShJTlRFUlJVUFRfTUVTU0FHRSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZVxuICBjb25zdCBzaG91bGRTa2lwUGVybWlzc2lvbkNoZWNrID0gcmVzdWx0LnNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2tcblxuICB5aWVsZCBhc3Npc3RhbnRNZXNzYWdlXG5cbiAgLy8gQHNlZSBodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9lbi9kb2NzL2J1aWxkLXdpdGgtY2xhdWRlL3Rvb2wtdXNlXG4gIC8vIE5vdGU6IHN0b3BfcmVhc29uID09PSAndG9vbF91c2UnIGlzIHVucmVsaWFibGUgLS0gaXQncyBub3QgYWx3YXlzIHNldCBjb3JyZWN0bHlcbiAgY29uc3QgdG9vbFVzZU1lc3NhZ2VzID0gYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQuZmlsdGVyKFxuICAgIF8gPT4gXy50eXBlID09PSAndG9vbF91c2UnLFxuICApXG5cbiAgLy8gSWYgdGhlcmUncyBubyBtb3JlIHRvb2wgdXNlLCB3ZSdyZSBkb25lXG4gIGlmICghdG9vbFVzZU1lc3NhZ2VzLmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgdG9vbFJlc3VsdHM6IFVzZXJNZXNzYWdlW10gPSBbXVxuXG4gIC8vIFByZWZlciB0byBydW4gdG9vbHMgY29uY3VycmVudGx5LCBpZiB3ZSBjYW5cbiAgLy8gVE9ETzogdGlnaHRlbiB1cCB0aGUgbG9naWMgLS0gd2UgY2FuIHJ1biBjb25jdXJyZW50bHkgbXVjaCBtb3JlIG9mdGVuIHRoYW4gdGhpc1xuICBpZiAoXG4gICAgdG9vbFVzZU1lc3NhZ2VzLmV2ZXJ5KG1zZyA9PlxuICAgICAgdG9vbFVzZUNvbnRleHQub3B0aW9ucy50b29scy5maW5kKHQgPT4gdC5uYW1lID09PSBtc2cubmFtZSk/LmlzUmVhZE9ubHkoKSxcbiAgICApXG4gICkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgbWVzc2FnZSBvZiBydW5Ub29sc0NvbmN1cnJlbnRseShcbiAgICAgIHRvb2xVc2VNZXNzYWdlcyxcbiAgICAgIGFzc2lzdGFudE1lc3NhZ2UsXG4gICAgICBjYW5Vc2VUb29sLFxuICAgICAgdG9vbFVzZUNvbnRleHQsXG4gICAgICBzaG91bGRTa2lwUGVybWlzc2lvbkNoZWNrLFxuICAgICkpIHtcbiAgICAgIHlpZWxkIG1lc3NhZ2VcbiAgICAgIC8vIHByb2dyZXNzIG1lc3NhZ2VzIGFyZSBub3Qgc2VudCB0byB0aGUgc2VydmVyLCBzbyBkb24ndCBuZWVkIHRvIGJlIGFjY3VtdWxhdGVkIGZvciB0aGUgbmV4dCB0dXJuXG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSAndXNlcicpIHtcbiAgICAgICAgdG9vbFJlc3VsdHMucHVzaChtZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IG1lc3NhZ2Ugb2YgcnVuVG9vbHNTZXJpYWxseShcbiAgICAgIHRvb2xVc2VNZXNzYWdlcyxcbiAgICAgIGFzc2lzdGFudE1lc3NhZ2UsXG4gICAgICBjYW5Vc2VUb29sLFxuICAgICAgdG9vbFVzZUNvbnRleHQsXG4gICAgICBzaG91bGRTa2lwUGVybWlzc2lvbkNoZWNrLFxuICAgICkpIHtcbiAgICAgIHlpZWxkIG1lc3NhZ2VcbiAgICAgIC8vIHByb2dyZXNzIG1lc3NhZ2VzIGFyZSBub3Qgc2VudCB0byB0aGUgc2VydmVyLCBzbyBkb24ndCBuZWVkIHRvIGJlIGFjY3VtdWxhdGVkIGZvciB0aGUgbmV4dCB0dXJuXG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSAndXNlcicpIHtcbiAgICAgICAgdG9vbFJlc3VsdHMucHVzaChtZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0b29sVXNlQ29udGV4dC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB5aWVsZCBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlKElOVEVSUlVQVF9NRVNTQUdFX0ZPUl9UT09MX1VTRSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFNvcnQgdG9vbFJlc3VsdHMgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mIHRvb2xVc2VNZXNzYWdlc1xuICBjb25zdCBvcmRlcmVkVG9vbFJlc3VsdHMgPSB0b29sUmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYUluZGV4ID0gdG9vbFVzZU1lc3NhZ2VzLmZpbmRJbmRleChcbiAgICAgIHR1ID0+IHR1LmlkID09PSAoYS5tZXNzYWdlLmNvbnRlbnRbMF0gYXMgVG9vbFVzZUJsb2NrKS5pZCxcbiAgICApXG4gICAgY29uc3QgYkluZGV4ID0gdG9vbFVzZU1lc3NhZ2VzLmZpbmRJbmRleChcbiAgICAgIHR1ID0+IHR1LmlkID09PSAoYi5tZXNzYWdlLmNvbnRlbnRbMF0gYXMgVG9vbFVzZUJsb2NrKS5pZCxcbiAgICApXG4gICAgcmV0dXJuIGFJbmRleCAtIGJJbmRleFxuICB9KVxuXG4gIHlpZWxkKiBhd2FpdCBxdWVyeShcbiAgICBbLi4ubWVzc2FnZXMsIGFzc2lzdGFudE1lc3NhZ2UsIC4uLm9yZGVyZWRUb29sUmVzdWx0c10sXG4gICAgc3lzdGVtUHJvbXB0LFxuICAgIGNvbnRleHQsXG4gICAgY2FuVXNlVG9vbCxcbiAgICB0b29sVXNlQ29udGV4dCxcbiAgICBnZXRCaW5hcnlGZWVkYmFja1Jlc3BvbnNlLFxuICApXG59XG5cbmFzeW5jIGZ1bmN0aW9uKiBydW5Ub29sc0NvbmN1cnJlbnRseShcbiAgdG9vbFVzZU1lc3NhZ2VzOiBUb29sVXNlQmxvY2tbXSxcbiAgYXNzaXN0YW50TWVzc2FnZTogQXNzaXN0YW50TWVzc2FnZSxcbiAgY2FuVXNlVG9vbDogQ2FuVXNlVG9vbEZuLFxuICB0b29sVXNlQ29udGV4dDogVG9vbFVzZUNvbnRleHQsXG4gIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s/OiBib29sZWFuLFxuKTogQXN5bmNHZW5lcmF0b3I8TWVzc2FnZSwgdm9pZD4ge1xuICB5aWVsZCogYWxsKFxuICAgIHRvb2xVc2VNZXNzYWdlcy5tYXAodG9vbFVzZSA9PlxuICAgICAgcnVuVG9vbFVzZShcbiAgICAgICAgdG9vbFVzZSxcbiAgICAgICAgbmV3IFNldCh0b29sVXNlTWVzc2FnZXMubWFwKF8gPT4gXy5pZCkpLFxuICAgICAgICBhc3Npc3RhbnRNZXNzYWdlLFxuICAgICAgICBjYW5Vc2VUb29sLFxuICAgICAgICB0b29sVXNlQ29udGV4dCxcbiAgICAgICAgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjayxcbiAgICAgICksXG4gICAgKSxcbiAgICBNQVhfVE9PTF9VU0VfQ09OQ1VSUkVOQ1ksXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJ1blRvb2xzU2VyaWFsbHkoXG4gIHRvb2xVc2VNZXNzYWdlczogVG9vbFVzZUJsb2NrW10sXG4gIGFzc2lzdGFudE1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIGNhblVzZVRvb2w6IENhblVzZVRvb2xGbixcbiAgdG9vbFVzZUNvbnRleHQ6IFRvb2xVc2VDb250ZXh0LFxuICBzaG91bGRTa2lwUGVybWlzc2lvbkNoZWNrPzogYm9vbGVhbixcbik6IEFzeW5jR2VuZXJhdG9yPE1lc3NhZ2UsIHZvaWQ+IHtcbiAgZm9yIChjb25zdCB0b29sVXNlIG9mIHRvb2xVc2VNZXNzYWdlcykge1xuICAgIHlpZWxkKiBydW5Ub29sVXNlKFxuICAgICAgdG9vbFVzZSxcbiAgICAgIG5ldyBTZXQodG9vbFVzZU1lc3NhZ2VzLm1hcChfID0+IF8uaWQpKSxcbiAgICAgIGFzc2lzdGFudE1lc3NhZ2UsXG4gICAgICBjYW5Vc2VUb29sLFxuICAgICAgdG9vbFVzZUNvbnRleHQsXG4gICAgICBzaG91bGRTa2lwUGVybWlzc2lvbkNoZWNrLFxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIHJ1blRvb2xVc2UoXG4gIHRvb2xVc2U6IFRvb2xVc2VCbG9jayxcbiAgc2libGluZ1Rvb2xVc2VJRHM6IFNldDxzdHJpbmc+LFxuICBhc3Npc3RhbnRNZXNzYWdlOiBBc3Npc3RhbnRNZXNzYWdlLFxuICBjYW5Vc2VUb29sOiBDYW5Vc2VUb29sRm4sXG4gIHRvb2xVc2VDb250ZXh0OiBUb29sVXNlQ29udGV4dCxcbiAgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW4sXG4pOiBBc3luY0dlbmVyYXRvcjxNZXNzYWdlLCB2b2lkPiB7XG4gIGNvbnN0IHRvb2xOYW1lID0gdG9vbFVzZS5uYW1lXG4gIGNvbnN0IHRvb2wgPSB0b29sVXNlQ29udGV4dC5vcHRpb25zLnRvb2xzLmZpbmQodCA9PiB0Lm5hbWUgPT09IHRvb2xOYW1lKVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0b29sIGV4aXN0c1xuICBpZiAoIXRvb2wpIHtcbiAgICBsb2dFdmVudCgndGVuZ3VfdG9vbF91c2VfZXJyb3InLCB7XG4gICAgICBlcnJvcjogYE5vIHN1Y2ggdG9vbCBhdmFpbGFibGU6ICR7dG9vbE5hbWV9YCxcbiAgICAgIG1lc3NhZ2VJRDogYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgdG9vbE5hbWUsXG4gICAgICB0b29sVXNlSUQ6IHRvb2xVc2UuaWQsXG4gICAgfSlcbiAgICB5aWVsZCBjcmVhdGVVc2VyTWVzc2FnZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd0b29sX3Jlc3VsdCcsXG4gICAgICAgIGNvbnRlbnQ6IGBFcnJvcjogTm8gc3VjaCB0b29sIGF2YWlsYWJsZTogJHt0b29sTmFtZX1gLFxuICAgICAgICBpc19lcnJvcjogdHJ1ZSxcbiAgICAgICAgdG9vbF91c2VfaWQ6IHRvb2xVc2UuaWQsXG4gICAgICB9LFxuICAgIF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0b29sSW5wdXQgPSB0b29sVXNlLmlucHV0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cblxuICB0cnkge1xuICAgIGlmICh0b29sVXNlQ29udGV4dC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9jYW5jZWxsZWQnLCB7XG4gICAgICAgIHRvb2xOYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIHRvb2xVc2VJRDogdG9vbFVzZS5pZCxcbiAgICAgIH0pXG4gICAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlVXNlck1lc3NhZ2UoW1xuICAgICAgICBjcmVhdGVUb29sUmVzdWx0U3RvcE1lc3NhZ2UodG9vbFVzZS5pZCksXG4gICAgICBdKVxuICAgICAgeWllbGQgbWVzc2FnZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBtZXNzYWdlIG9mIGNoZWNrUGVybWlzc2lvbnNBbmRDYWxsVG9vbChcbiAgICAgIHRvb2wsXG4gICAgICB0b29sVXNlLmlkLFxuICAgICAgc2libGluZ1Rvb2xVc2VJRHMsXG4gICAgICB0b29sSW5wdXQsXG4gICAgICB0b29sVXNlQ29udGV4dCxcbiAgICAgIGNhblVzZVRvb2wsXG4gICAgICBhc3Npc3RhbnRNZXNzYWdlLFxuICAgICAgc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVjayxcbiAgICApKSB7XG4gICAgICB5aWVsZCBtZXNzYWdlXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSlcbiAgfVxufVxuXG4vLyBUT0RPOiBHZW5lcmFsaXplIHRoaXMgdG8gYWxsIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVG9vbElucHV0KFxuICB0b29sOiBUb29sLFxuICBpbnB1dDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIH0sXG4pOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfSB7XG4gIHN3aXRjaCAodG9vbCkge1xuICAgIGNhc2UgQmFzaFRvb2w6IHtcbiAgICAgIGNvbnN0IHsgY29tbWFuZCwgdGltZW91dCB9ID0gQmFzaFRvb2wuaW5wdXRTY2hlbWEucGFyc2UoaW5wdXQpIC8vIGFscmVhZHkgdmFsaWRhdGVkIHVwc3RyZWFtLCB3b24ndCB0aHJvd1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZDogY29tbWFuZC5yZXBsYWNlKGBjZCAke2dldEN3ZCgpfSAmJiBgLCAnJyksXG4gICAgICAgIC4uLih0aW1lb3V0ID8geyB0aW1lb3V0IH0gOiB7fSksXG4gICAgICB9XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaW5wdXRcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiogY2hlY2tQZXJtaXNzaW9uc0FuZENhbGxUb29sKFxuICB0b29sOiBUb29sLFxuICB0b29sVXNlSUQ6IHN0cmluZyxcbiAgc2libGluZ1Rvb2xVc2VJRHM6IFNldDxzdHJpbmc+LFxuICBpbnB1dDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIH0sXG4gIGNvbnRleHQ6IFRvb2xVc2VDb250ZXh0LFxuICBjYW5Vc2VUb29sOiBDYW5Vc2VUb29sRm4sXG4gIGFzc2lzdGFudE1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2UsXG4gIHNob3VsZFNraXBQZXJtaXNzaW9uQ2hlY2s/OiBib29sZWFuLFxuKTogQXN5bmNHZW5lcmF0b3I8VXNlck1lc3NhZ2UgfCBQcm9ncmVzc01lc3NhZ2UsIHZvaWQ+IHtcbiAgLy8gVmFsaWRhdGUgaW5wdXQgdHlwZXMgd2l0aCB6b2RcbiAgLy8gKHN1cnByaXNpbmdseSwgdGhlIG1vZGVsIGlzIG5vdCBncmVhdCBhdCBnZW5lcmF0aW5nIHZhbGlkIGlucHV0KVxuICBjb25zdCBpc1ZhbGlkSW5wdXQgPSB0b29sLmlucHV0U2NoZW1hLnNhZmVQYXJzZShpbnB1dClcbiAgaWYgKCFpc1ZhbGlkSW5wdXQuc3VjY2Vzcykge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9lcnJvcicsIHtcbiAgICAgIGVycm9yOiBgSW5wdXRWYWxpZGF0aW9uRXJyb3I6ICR7aXNWYWxpZElucHV0LmVycm9yLm1lc3NhZ2V9YCxcbiAgICAgIG1lc3NhZ2VJRDogYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgdG9vbE5hbWU6IHRvb2wubmFtZSxcbiAgICAgIHRvb2xJbnB1dDogSlNPTi5zdHJpbmdpZnkoaW5wdXQpLnNsaWNlKDAsIDIwMCksXG4gICAgfSlcbiAgICB5aWVsZCBjcmVhdGVVc2VyTWVzc2FnZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd0b29sX3Jlc3VsdCcsXG4gICAgICAgIGNvbnRlbnQ6IGBJbnB1dFZhbGlkYXRpb25FcnJvcjogJHtpc1ZhbGlkSW5wdXQuZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICBpc19lcnJvcjogdHJ1ZSxcbiAgICAgICAgdG9vbF91c2VfaWQ6IHRvb2xVc2VJRCxcbiAgICAgIH0sXG4gICAgXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZVRvb2xJbnB1dCh0b29sLCBpbnB1dClcblxuICAvLyBWYWxpZGF0ZSBpbnB1dCB2YWx1ZXMuIEVhY2ggdG9vbCBoYXMgaXRzIG93biB2YWxpZGF0aW9uIGxvZ2ljXG4gIGNvbnN0IGlzVmFsaWRDYWxsID0gYXdhaXQgdG9vbC52YWxpZGF0ZUlucHV0Py4oXG4gICAgbm9ybWFsaXplZElucHV0IGFzIG5ldmVyLFxuICAgIGNvbnRleHQsXG4gIClcbiAgaWYgKGlzVmFsaWRDYWxsPy5yZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgbG9nRXZlbnQoJ3Rlbmd1X3Rvb2xfdXNlX2Vycm9yJywge1xuICAgICAgZXJyb3I6IGlzVmFsaWRDYWxsPy5tZXNzYWdlLnNsaWNlKDAsIDIwMDApLFxuICAgICAgbWVzc2FnZUlEOiBhc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICB0b29sTmFtZTogdG9vbC5uYW1lLFxuICAgICAgdG9vbElucHV0OiBKU09OLnN0cmluZ2lmeShpbnB1dCkuc2xpY2UoMCwgMjAwKSxcbiAgICAgIC4uLihpc1ZhbGlkQ2FsbD8ubWV0YSA/PyB7fSksXG4gICAgfSlcbiAgICB5aWVsZCBjcmVhdGVVc2VyTWVzc2FnZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd0b29sX3Jlc3VsdCcsXG4gICAgICAgIGNvbnRlbnQ6IGlzVmFsaWRDYWxsIS5tZXNzYWdlLFxuICAgICAgICBpc19lcnJvcjogdHJ1ZSxcbiAgICAgICAgdG9vbF91c2VfaWQ6IHRvb2xVc2VJRCxcbiAgICAgIH0sXG4gICAgXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdG9vbCxcbiAgLy8gYW5kIGFzayB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiBpZiB3ZSBkb24ndFxuICBjb25zdCBwZXJtaXNzaW9uUmVzdWx0ID0gc2hvdWxkU2tpcFBlcm1pc3Npb25DaGVja1xuICAgID8gKHsgcmVzdWx0OiB0cnVlIH0gYXMgY29uc3QpXG4gICAgOiBhd2FpdCBjYW5Vc2VUb29sKHRvb2wsIG5vcm1hbGl6ZWRJbnB1dCwgY29udGV4dCwgYXNzaXN0YW50TWVzc2FnZSlcbiAgaWYgKHBlcm1pc3Npb25SZXN1bHQucmVzdWx0ID09PSBmYWxzZSkge1xuICAgIHlpZWxkIGNyZWF0ZVVzZXJNZXNzYWdlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Rvb2xfcmVzdWx0JyxcbiAgICAgICAgY29udGVudDogcGVybWlzc2lvblJlc3VsdC5tZXNzYWdlLFxuICAgICAgICBpc19lcnJvcjogdHJ1ZSxcbiAgICAgICAgdG9vbF91c2VfaWQ6IHRvb2xVc2VJRCxcbiAgICAgIH0sXG4gICAgXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENhbGwgdGhlIHRvb2xcbiAgdHJ5IHtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSB0b29sLmNhbGwobm9ybWFsaXplZElucHV0IGFzIG5ldmVyLCBjb250ZXh0LCBjYW5Vc2VUb29sKVxuICAgIGZvciBhd2FpdCAoY29uc3QgcmVzdWx0IG9mIGdlbmVyYXRvcikge1xuICAgICAgc3dpdGNoIChyZXN1bHQudHlwZSkge1xuICAgICAgICBjYXNlICdyZXN1bHQnOlxuICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9zdWNjZXNzJywge1xuICAgICAgICAgICAgbWVzc2FnZUlEOiBhc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICAgICAgICB0b29sTmFtZTogdG9vbC5uYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgeWllbGQgY3JlYXRlVXNlck1lc3NhZ2UoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndG9vbF9yZXN1bHQnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5yZXN1bHRGb3JBc3Npc3RhbnQsXG4gICAgICAgICAgICAgICAgdG9vbF91c2VfaWQ6IHRvb2xVc2VJRCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6IHJlc3VsdC5yZXN1bHRGb3JBc3Npc3RhbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgY2FzZSAncHJvZ3Jlc3MnOlxuICAgICAgICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9wcm9ncmVzcycsIHtcbiAgICAgICAgICAgIG1lc3NhZ2VJRDogYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHlpZWxkIGNyZWF0ZVByb2dyZXNzTWVzc2FnZShcbiAgICAgICAgICAgIHRvb2xVc2VJRCxcbiAgICAgICAgICAgIHNpYmxpbmdUb29sVXNlSURzLFxuICAgICAgICAgICAgcmVzdWx0LmNvbnRlbnQsXG4gICAgICAgICAgICByZXN1bHQubm9ybWFsaXplZE1lc3NhZ2VzLFxuICAgICAgICAgICAgcmVzdWx0LnRvb2xzLFxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgY29udGVudCA9IGZvcm1hdEVycm9yKGVycm9yKVxuICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgIGxvZ0V2ZW50KCd0ZW5ndV90b29sX3VzZV9lcnJvcicsIHtcbiAgICAgIGVycm9yOiBjb250ZW50LnNsaWNlKDAsIDIwMDApLFxuICAgICAgbWVzc2FnZUlEOiBhc3Npc3RhbnRNZXNzYWdlLm1lc3NhZ2UuaWQsXG4gICAgICB0b29sTmFtZTogdG9vbC5uYW1lLFxuICAgICAgdG9vbElucHV0OiBKU09OLnN0cmluZ2lmeShpbnB1dCkuc2xpY2UoMCwgMTAwMCksXG4gICAgfSlcbiAgICB5aWVsZCBjcmVhdGVVc2VyTWVzc2FnZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd0b29sX3Jlc3VsdCcsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGlzX2Vycm9yOiB0cnVlLFxuICAgICAgICB0b29sX3VzZV9pZDogdG9vbFVzZUlELFxuICAgICAgfSxcbiAgICBdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKVxuICB9XG4gIGNvbnN0IHBhcnRzID0gW2Vycm9yLm1lc3NhZ2VdXG4gIGlmICgnc3RkZXJyJyBpbiBlcnJvciAmJiB0eXBlb2YgZXJyb3Iuc3RkZXJyID09PSAnc3RyaW5nJykge1xuICAgIHBhcnRzLnB1c2goZXJyb3Iuc3RkZXJyKVxuICB9XG4gIGlmICgnc3Rkb3V0JyBpbiBlcnJvciAmJiB0eXBlb2YgZXJyb3Iuc3Rkb3V0ID09PSAnc3RyaW5nJykge1xuICAgIHBhcnRzLnB1c2goZXJyb3Iuc3Rkb3V0KVxuICB9XG4gIGNvbnN0IGZ1bGxNZXNzYWdlID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpXG4gIGlmIChmdWxsTWVzc2FnZS5sZW5ndGggPD0gMTAwMDApIHtcbiAgICByZXR1cm4gZnVsbE1lc3NhZ2VcbiAgfVxuICBjb25zdCBoYWxmTGVuZ3RoID0gNTAwMFxuICBjb25zdCBzdGFydCA9IGZ1bGxNZXNzYWdlLnNsaWNlKDAsIGhhbGZMZW5ndGgpXG4gIGNvbnN0IGVuZCA9IGZ1bGxNZXNzYWdlLnNsaWNlKC1oYWxmTGVuZ3RoKVxuICByZXR1cm4gYCR7c3RhcnR9XFxuXFxuLi4uIFske2Z1bGxNZXNzYWdlLmxlbmd0aCAtIDEwMDAwfSBjaGFyYWN0ZXJzIHRydW5jYXRlZF0gLi4uXFxuXFxuJHtlbmR9YFxufVxuIiwKICAgICJpbXBvcnQgeyBkZWZhdWx0IGFzIFJlYWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTm90aWZ5QWZ0ZXJUaW1lb3V0IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlTm90aWZ5QWZ0ZXJUaW1lb3V0LmpzJ1xuaW1wb3J0IHsgQXNzaXN0YW50TWVzc2FnZSwgQmluYXJ5RmVlZGJhY2tSZXN1bHQgfSBmcm9tICcuLi8uLi9xdWVyeS5qcydcbmltcG9ydCB0eXBlIHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZXMuanMnXG5pbXBvcnQgeyBCaW5hcnlGZWVkYmFja1ZpZXcgfSBmcm9tICcuL0JpbmFyeUZlZWRiYWNrVmlldy5qcydcbmltcG9ydCB7XG4gIHR5cGUgQmluYXJ5RmVlZGJhY2tDaG9vc2UsXG4gIGdldEJpbmFyeUZlZWRiYWNrUmVzdWx0Rm9yQ2hvaWNlLFxuICBsb2dCaW5hcnlGZWVkYmFja0V2ZW50LFxufSBmcm9tICcuL3V0aWxzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBtMTogQXNzaXN0YW50TWVzc2FnZVxuICBtMjogQXNzaXN0YW50TWVzc2FnZVxuICByZXNvbHZlOiAocmVzdWx0OiBCaW5hcnlGZWVkYmFja1Jlc3VsdCkgPT4gdm9pZFxuICBkZWJ1ZzogYm9vbGVhblxuICBlcnJvcmVkVG9vbFVzZUlEczogU2V0PHN0cmluZz5cbiAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIG5vcm1hbGl6ZWRNZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXVxuICB0b29sczogVG9vbFtdXG4gIHVucmVzb2x2ZWRUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICB2ZXJib3NlOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCaW5hcnlGZWVkYmFjayh7XG4gIG0xLFxuICBtMixcbiAgcmVzb2x2ZSxcbiAgZGVidWcsXG4gIGVycm9yZWRUb29sVXNlSURzLFxuICBpblByb2dyZXNzVG9vbFVzZUlEcyxcbiAgbm9ybWFsaXplZE1lc3NhZ2VzLFxuICB0b29scyxcbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHMsXG4gIHZlcmJvc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IG9uQ2hvb3NlID0gdXNlQ2FsbGJhY2s8QmluYXJ5RmVlZGJhY2tDaG9vc2U+KFxuICAgIGNob2ljZSA9PiB7XG4gICAgICBsb2dCaW5hcnlGZWVkYmFja0V2ZW50KG0xLCBtMiwgY2hvaWNlKVxuICAgICAgcmVzb2x2ZShnZXRCaW5hcnlGZWVkYmFja1Jlc3VsdEZvckNob2ljZShtMSwgbTIsIGNob2ljZSkpXG4gICAgfSxcbiAgICBbbTEsIG0yLCByZXNvbHZlXSxcbiAgKVxuICB1c2VOb3RpZnlBZnRlclRpbWVvdXQoJ0NsYXVkZSBuZWVkcyB5b3VyIGlucHV0IG9uIGEgcmVzcG9uc2UgY29tcGFyaXNvbicpXG4gIHJldHVybiAoXG4gICAgPEJpbmFyeUZlZWRiYWNrVmlld1xuICAgICAgZGVidWc9e2RlYnVnfVxuICAgICAgZXJyb3JlZFRvb2xVc2VJRHM9e2Vycm9yZWRUb29sVXNlSURzfVxuICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e2luUHJvZ3Jlc3NUb29sVXNlSURzfVxuICAgICAgbTE9e20xfVxuICAgICAgbTI9e20yfVxuICAgICAgbm9ybWFsaXplZE1lc3NhZ2VzPXtub3JtYWxpemVkTWVzc2FnZXN9XG4gICAgICB0b29scz17dG9vbHN9XG4gICAgICB1bnJlc29sdmVkVG9vbFVzZUlEcz17dW5yZXNvbHZlZFRvb2xVc2VJRHN9XG4gICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgb25DaG9vc2U9e29uQ2hvb3NlfVxuICAgIC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgT3B0aW9uLCBTZWxlY3RQcm9wcyB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICdpbmsnXG5pbXBvcnQgTGluayBmcm9tICdpbmstbGluaydcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi8uLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL0N1c3RvbVNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB0eXBlIHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZXMuanMnXG5pbXBvcnQgeyBCaW5hcnlGZWVkYmFja09wdGlvbiB9IGZyb20gJy4vQmluYXJ5RmVlZGJhY2tPcHRpb24uanMnXG5pbXBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9xdWVyeS5qcydcbmltcG9ydCB0eXBlIHsgQmluYXJ5RmVlZGJhY2tDaG9vc2UgfSBmcm9tICcuL3V0aWxzLmpzJ1xuaW1wb3J0IHsgdXNlRXhpdE9uQ3RybENEIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRXhpdE9uQ3RybENELmpzJ1xuaW1wb3J0IHsgQmluYXJ5RmVlZGJhY2tDaG9pY2UgfSBmcm9tICcuL3V0aWxzLmpzJ1xuXG5jb25zdCBIRUxQX1VSTCA9ICdodHRwczovL2dvL2NsaS1mZWVkYmFjaydcblxudHlwZSBCaW5hcnlGZWVkYmFja09wdGlvbiA9IE9wdGlvbiAmIHsgdmFsdWU6IEJpbmFyeUZlZWRiYWNrQ2hvaWNlIH1cblxuLy8gTWFrZSBvcHRpb25zIGEgZnVuY3Rpb24gdG8gYXZvaWQgZWFybHkgdGhlbWUgYWNjZXNzIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb25cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcHRpb25zKCk6IEJpbmFyeUZlZWRiYWNrT3B0aW9uW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIC8vIFRoaXMgb3B0aW9uIGNvbWJpbmVzIHRoZSBmb2xsb3cgdXNlciBpbnRlbnRzOlxuICAgICAgLy8gLSBUaGUgdHdvIG9wdGlvbnMgbG9vayBhYm91dCBlcXVhbGx5IGdvb2QgdG8gbWVcbiAgICAgIC8vIC0gSSBkb24ndCBmZWVsIGNvbmZpZGVudCBlbm91Z2ggdG8gY2hvb3NlXG4gICAgICAvLyAtIEkgZG9uJ3Qgd2FudCB0byBjaG9vc2UgcmlnaHQgbm93XG4gICAgICBsYWJlbDogJ0Nob29zZSBmb3IgbWUnLFxuICAgICAgdmFsdWU6ICduby1wcmVmZXJlbmNlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnTGVmdCBvcHRpb24gbG9va3MgYmV0dGVyJyxcbiAgICAgIHZhbHVlOiAncHJlZmVyLWxlZnQnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdSaWdodCBvcHRpb24gbG9va3MgYmV0dGVyJyxcbiAgICAgIHZhbHVlOiAncHJlZmVyLXJpZ2h0JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBgTmVpdGhlciwgYW5kIHRlbGwgQ2xhdWRlIHdoYXQgdG8gZG8gZGlmZmVyZW50bHkgKCR7Y2hhbGsuYm9sZC5oZXgoZ2V0VGhlbWUoKS53YXJuaW5nKSgnZXNjJyl9KWAsXG4gICAgICB2YWx1ZTogJ25laXRoZXInLFxuICAgIH0sXG4gIF1cbn1cblxudHlwZSBQcm9wcyA9IHtcbiAgbTE6IEFzc2lzdGFudE1lc3NhZ2VcbiAgbTI6IEFzc2lzdGFudE1lc3NhZ2VcbiAgb25DaG9vc2U/OiBCaW5hcnlGZWVkYmFja0Nob29zZVxuICBkZWJ1ZzogYm9vbGVhblxuICBlcnJvcmVkVG9vbFVzZUlEczogU2V0PHN0cmluZz5cbiAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIG5vcm1hbGl6ZWRNZXNzYWdlczogTm9ybWFsaXplZE1lc3NhZ2VbXVxuICB0b29sczogVG9vbFtdXG4gIHVucmVzb2x2ZWRUb29sVXNlSURzOiBTZXQ8c3RyaW5nPlxuICB2ZXJib3NlOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCaW5hcnlGZWVkYmFja1ZpZXcoe1xuICBtMSxcbiAgbTIsXG4gIG9uQ2hvb3NlLFxuICBkZWJ1ZyxcbiAgZXJyb3JlZFRvb2xVc2VJRHMsXG4gIGluUHJvZ3Jlc3NUb29sVXNlSURzLFxuICBub3JtYWxpemVkTWVzc2FnZXMsXG4gIHRvb2xzLFxuICB1bnJlc29sdmVkVG9vbFVzZUlEcyxcbiAgdmVyYm9zZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNdID0gdXNlU3RhdGUoJ25vLXByZWZlcmVuY2UnKVxuICBjb25zdCBbZm9jdXNWYWx1ZSwgc2V0Rm9jdXNWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKCgpID0+IHByb2Nlc3MuZXhpdCgxKSlcblxuICB1c2VJbnB1dCgoX2lucHV0LCBrZXkpID0+IHtcbiAgICBpZiAoa2V5LmxlZnRBcnJvdykge1xuICAgICAgc2V0Rm9jdXNWYWx1ZSgncHJlZmVyLWxlZnQnKVxuICAgIH0gZWxzZSBpZiAoa2V5LnJpZ2h0QXJyb3cpIHtcbiAgICAgIHNldEZvY3VzVmFsdWUoJ3ByZWZlci1yaWdodCcpXG4gICAgfSBlbHNlIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICBvbkNob29zZT8uKCduZWl0aGVyJylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJveFxuICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUucGVybWlzc2lvbn1cbiAgICAgID5cbiAgICAgICAgPEJveCB3aWR0aD1cIjEwMCVcIiBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiBwYWRkaW5nWD17MX0+XG4gICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj17dGhlbWUucGVybWlzc2lvbn0+XG4gICAgICAgICAgICBbQU5ULU9OTFldIEhlbHAgdHJhaW4gQ2xhdWRlXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgPExpbmsgdXJsPXtIRUxQX1VSTH0+Wz9dPC9MaW5rPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIHdpZHRoPVwiMTAwJVwiIGZsZXhHcm93PXsxfSBwYWRkaW5nVG9wPXsxfT5cbiAgICAgICAgICA8Qm94XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIGZsZXhHcm93PXsxfVxuICAgICAgICAgICAgZmxleEJhc2lzPXsxfVxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgYm9yZGVyU3R5bGU9e2ZvY3VzZWQgPT09ICdwcmVmZXItbGVmdCcgPyAnYm9sZCcgOiAnc2luZ2xlJ31cbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXtcbiAgICAgICAgICAgICAgZm9jdXNlZCA9PT0gJ3ByZWZlci1sZWZ0JyA/IHRoZW1lLnN1Y2Nlc3MgOiB0aGVtZS5zZWNvbmRhcnlCb3JkZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hcmdpblJpZ2h0PXsxfVxuICAgICAgICAgICAgcGFkZGluZz17MX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QmluYXJ5RmVlZGJhY2tPcHRpb25cbiAgICAgICAgICAgICAgZXJyb3JlZFRvb2xVc2VJRHM9e2Vycm9yZWRUb29sVXNlSURzfVxuICAgICAgICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgICAgICAgIGluUHJvZ3Jlc3NUb29sVXNlSURzPXtpblByb2dyZXNzVG9vbFVzZUlEc31cbiAgICAgICAgICAgICAgbWVzc2FnZT17bTF9XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRNZXNzYWdlcz17bm9ybWFsaXplZE1lc3NhZ2VzfVxuICAgICAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgICAgICAgIHVucmVzb2x2ZWRUb29sVXNlSURzPXt1bnJlc29sdmVkVG9vbFVzZUlEc31cbiAgICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPEJveFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICBmbGV4R3Jvdz17MX1cbiAgICAgICAgICAgIGZsZXhCYXNpcz17MX1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIGJvcmRlclN0eWxlPXtmb2N1c2VkID09PSAncHJlZmVyLXJpZ2h0JyA/ICdib2xkJyA6ICdzaW5nbGUnfVxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9e1xuICAgICAgICAgICAgICBmb2N1c2VkID09PSAncHJlZmVyLXJpZ2h0JyA/IHRoZW1lLnN1Y2Nlc3MgOiB0aGVtZS5zZWNvbmRhcnlCb3JkZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezF9XG4gICAgICAgICAgICBwYWRkaW5nPXsxfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxCaW5hcnlGZWVkYmFja09wdGlvblxuICAgICAgICAgICAgICBlcnJvcmVkVG9vbFVzZUlEcz17ZXJyb3JlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgICAgIGRlYnVnPXtkZWJ1Z31cbiAgICAgICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e2luUHJvZ3Jlc3NUb29sVXNlSURzfVxuICAgICAgICAgICAgICBtZXNzYWdlPXttMn1cbiAgICAgICAgICAgICAgbm9ybWFsaXplZE1lc3NhZ2VzPXtub3JtYWxpemVkTWVzc2FnZXN9XG4gICAgICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICAgICAgdW5yZXNvbHZlZFRvb2xVc2VJRHM9e3VucmVzb2x2ZWRUb29sVXNlSURzfVxuICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdUb3A9ezF9IHBhZGRpbmdYPXsxfT5cbiAgICAgICAgICA8VGV4dD5Ib3cgZG8geW91IHdhbnQgdG8gcHJvY2VlZD88L1RleHQ+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17Z2V0T3B0aW9ucygpfVxuICAgICAgICAgICAgb25Gb2N1cz17c2V0Rm9jdXN9XG4gICAgICAgICAgICBmb2N1c1ZhbHVlPXtmb2N1c1ZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hvb3NlIGFzIFNlbGVjdFByb3BzWydvbkNoYW5nZSddfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgPC9Cb3g+XG4gICAgICB7ZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgIDxCb3ggbWFyZ2luTGVmdD17M30+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIC8vIFJlbmRlciBhIGJsYW5rIGxpbmUgc28gdGhhdCB0aGUgVUkgZG9lc24ndCByZWZsb3cgd2hlbiB0aGUgZXhpdCBtZXNzYWdlIGlzIHNob3duXG4gICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IEZpbGVFZGl0VG9vbCB9IGZyb20gJy4uLy4uL3Rvb2xzL0ZpbGVFZGl0VG9vbC9GaWxlRWRpdFRvb2wuanMnXG5pbXBvcnQgeyBGaWxlRWRpdFRvb2xEaWZmIH0gZnJvbSAnLi4vcGVybWlzc2lvbnMvRmlsZUVkaXRQZXJtaXNzaW9uUmVxdWVzdC9GaWxlRWRpdFRvb2xEaWZmLmpzJ1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4uL01lc3NhZ2UuanMnXG5pbXBvcnQge1xuICBub3JtYWxpemVNZXNzYWdlcyxcbiAgdHlwZSBOb3JtYWxpemVkTWVzc2FnZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZXMuanMnXG5pbXBvcnQgdHlwZSB7IFRvb2wgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHsgdXNlVGVybWluYWxTaXplIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuaW1wb3J0IHsgRmlsZVdyaXRlVG9vbCB9IGZyb20gJy4uLy4uL3Rvb2xzL0ZpbGVXcml0ZVRvb2wvRmlsZVdyaXRlVG9vbC5qcydcbmltcG9ydCB7IEZpbGVXcml0ZVRvb2xEaWZmIH0gZnJvbSAnLi4vcGVybWlzc2lvbnMvRmlsZVdyaXRlUGVybWlzc2lvblJlcXVlc3QvRmlsZVdyaXRlVG9vbERpZmYuanMnXG5pbXBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9xdWVyeS5qcydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94IH0gZnJvbSAnaW5rJ1xuXG50eXBlIFByb3BzID0ge1xuICBkZWJ1ZzogYm9vbGVhblxuICBlcnJvcmVkVG9vbFVzZUlEczogU2V0PHN0cmluZz5cbiAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIG1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2VcbiAgbm9ybWFsaXplZE1lc3NhZ2VzOiBOb3JtYWxpemVkTWVzc2FnZVtdXG4gIHRvb2xzOiBUb29sW11cbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHM6IFNldDxzdHJpbmc+XG4gIHZlcmJvc2U6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJpbmFyeUZlZWRiYWNrT3B0aW9uKHtcbiAgZGVidWcsXG4gIGVycm9yZWRUb29sVXNlSURzLFxuICBpblByb2dyZXNzVG9vbFVzZUlEcyxcbiAgbWVzc2FnZSxcbiAgbm9ybWFsaXplZE1lc3NhZ2VzLFxuICB0b29scyxcbiAgdW5yZXNvbHZlZFRvb2xVc2VJRHMsXG4gIHZlcmJvc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgcmV0dXJuIG5vcm1hbGl6ZU1lc3NhZ2VzKFttZXNzYWdlXSlcbiAgICAuZmlsdGVyKF8gPT4gXy50eXBlICE9PSAncHJvZ3Jlc3MnKVxuICAgIC5tYXAoKF8sIGluZGV4KSA9PiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBrZXk9e2luZGV4fT5cbiAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICBhZGRNYXJnaW49e2ZhbHNlfVxuICAgICAgICAgIGVycm9yZWRUb29sVXNlSURzPXtlcnJvcmVkVG9vbFVzZUlEc31cbiAgICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e2luUHJvZ3Jlc3NUb29sVXNlSURzfVxuICAgICAgICAgIG1lc3NhZ2U9e199XG4gICAgICAgICAgbWVzc2FnZXM9e25vcm1hbGl6ZWRNZXNzYWdlc31cbiAgICAgICAgICBzaG91bGRBbmltYXRlPXtmYWxzZX1cbiAgICAgICAgICBzaG91bGRTaG93RG90PXt0cnVlfVxuICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICB1bnJlc29sdmVkVG9vbFVzZUlEcz17dW5yZXNvbHZlZFRvb2xVc2VJRHN9XG4gICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICB3aWR0aD17Y29sdW1ucyAvIDIgLSA2fVxuICAgICAgICAvPlxuICAgICAgICA8QWRkaXRpb25hbENvbnRleHQgbWVzc2FnZT17X30gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgICAgIDwvQm94PlxuICAgICkpXG59XG5cbmZ1bmN0aW9uIEFkZGl0aW9uYWxDb250ZXh0KHtcbiAgbWVzc2FnZSxcbiAgdmVyYm9zZSxcbn06IHtcbiAgbWVzc2FnZTogTm9ybWFsaXplZE1lc3NhZ2VcbiAgdmVyYm9zZTogYm9vbGVhblxufSkge1xuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIGlmIChtZXNzYWdlLnR5cGUgIT09ICdhc3Npc3RhbnQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBjb250ZW50ID0gbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRbMF0hXG4gIHN3aXRjaCAoY29udGVudC50eXBlKSB7XG4gICAgY2FzZSAndG9vbF91c2UnOlxuICAgICAgc3dpdGNoIChjb250ZW50Lm5hbWUpIHtcbiAgICAgICAgY2FzZSBGaWxlRWRpdFRvb2wubmFtZToge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gRmlsZUVkaXRUb29sLmlucHV0U2NoZW1hLnNhZmVQYXJzZShjb250ZW50LmlucHV0KVxuICAgICAgICAgIGlmICghaW5wdXQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGaWxlRWRpdFRvb2xEaWZmXG4gICAgICAgICAgICAgIGZpbGVfcGF0aD17aW5wdXQuZGF0YS5maWxlX3BhdGh9XG4gICAgICAgICAgICAgIG5ld19zdHJpbmc9e2lucHV0LmRhdGEubmV3X3N0cmluZ31cbiAgICAgICAgICAgICAgb2xkX3N0cmluZz17aW5wdXQuZGF0YS5vbGRfc3RyaW5nfVxuICAgICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgICB3aWR0aD17Y29sdW1ucyAvIDIgLSAxMn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGNhc2UgRmlsZVdyaXRlVG9vbC5uYW1lOiB7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBGaWxlV3JpdGVUb29sLmlucHV0U2NoZW1hLnNhZmVQYXJzZShjb250ZW50LmlucHV0KVxuICAgICAgICAgIGlmICghaW5wdXQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGaWxlV3JpdGVUb29sRGlmZlxuICAgICAgICAgICAgICBmaWxlX3BhdGg9e2lucHV0LmRhdGEuZmlsZV9wYXRofVxuICAgICAgICAgICAgICBjb250ZW50PXtpbnB1dC5kYXRhLmNvbnRlbnR9XG4gICAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgICAgICAgIHdpZHRoPXtjb2x1bW5zIC8gMiAtIDEyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLAogICAgImltcG9ydCB7IGxhc3QgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UgfSBmcm9tICcuLi9xdWVyeS5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IGdldExhc3RBc3Npc3RhbnRNZXNzYWdlSWQgfSBmcm9tICcuL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgVGhpbmtUb29sIH0gZnJvbSAnLi4vdG9vbHMvVGhpbmtUb29sL1RoaW5rVG9vbC5qcydcbmltcG9ydCB7IFVTRV9CRURST0NLLCBVU0VfVkVSVEVYIH0gZnJvbSAnLi9tb2RlbC5qcydcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE1heFRoaW5raW5nVG9rZW5zKFxuICBtZXNzYWdlczogTWVzc2FnZVtdLFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgJiYgcHJvY2Vzcy5lbnYuTUFYX1RISU5LSU5HX1RPS0VOUykge1xuICAgIGNvbnN0IHRva2VucyA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk1BWF9USElOS0lOR19UT0tFTlMsIDEwKVxuICAgIGxvZ0V2ZW50KCd0ZW5ndV90aGlua2luZycsIHtcbiAgICAgIG1ldGhvZDogJ3NjcmF0Y2hwYWQnLFxuICAgICAgdG9rZW5Db3VudDogdG9rZW5zLnRvU3RyaW5nKCksXG4gICAgICBtZXNzYWdlSWQ6IGdldExhc3RBc3Npc3RhbnRNZXNzYWdlSWQobWVzc2FnZXMpLFxuICAgICAgcHJvdmlkZXI6IFVTRV9CRURST0NLID8gJ2JlZHJvY2snIDogVVNFX1ZFUlRFWCA/ICd2ZXJ0ZXgnIDogJzFwJyxcbiAgICB9KVxuICAgIHJldHVybiB0b2tlbnNcbiAgfVxuXG4gIGlmIChhd2FpdCBUaGlua1Rvb2wuaXNFbmFibGVkKCkpIHtcbiAgICBsb2dFdmVudCgndGVuZ3VfdGhpbmtpbmcnLCB7XG4gICAgICBtZXRob2Q6ICdzY3JhdGNocGFkJyxcbiAgICAgIHRva2VuQ291bnQ6ICcwJyxcbiAgICAgIG1lc3NhZ2VJZDogZ2V0TGFzdEFzc2lzdGFudE1lc3NhZ2VJZChtZXNzYWdlcyksXG4gICAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICAgIH0pXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbGFzdChtZXNzYWdlcylcbiAgaWYgKFxuICAgIGxhc3RNZXNzYWdlPy50eXBlICE9PSAndXNlcicgfHxcbiAgICB0eXBlb2YgbGFzdE1lc3NhZ2UubWVzc2FnZS5jb250ZW50ICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICBsb2dFdmVudCgndGVuZ3VfdGhpbmtpbmcnLCB7XG4gICAgICBtZXRob2Q6ICdzY3JhdGNocGFkJyxcbiAgICAgIHRva2VuQ291bnQ6ICcwJyxcbiAgICAgIG1lc3NhZ2VJZDogZ2V0TGFzdEFzc2lzdGFudE1lc3NhZ2VJZChtZXNzYWdlcyksXG4gICAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICAgIH0pXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBsYXN0TWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQudG9Mb3dlckNhc2UoKVxuICBpZiAoXG4gICAgY29udGVudC5pbmNsdWRlcygndGhpbmsgaGFyZGVyJykgfHxcbiAgICBjb250ZW50LmluY2x1ZGVzKCd0aGluayBpbnRlbnNlbHknKSB8fFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ3RoaW5rIGxvbmdlcicpIHx8XG4gICAgY29udGVudC5pbmNsdWRlcygndGhpbmsgcmVhbGx5IGhhcmQnKSB8fFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ3RoaW5rIHN1cGVyIGhhcmQnKSB8fFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ3RoaW5rIHZlcnkgaGFyZCcpIHx8XG4gICAgY29udGVudC5pbmNsdWRlcygndWx0cmF0aGluaycpXG4gICkge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV90aGlua2luZycsIHtcbiAgICAgIG1ldGhvZDogJ3NjcmF0Y2hwYWQnLFxuICAgICAgdG9rZW5Db3VudDogJzMxOTk5JyxcbiAgICAgIG1lc3NhZ2VJZDogZ2V0TGFzdEFzc2lzdGFudE1lc3NhZ2VJZChtZXNzYWdlcyksXG4gICAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICAgIH0pXG4gICAgcmV0dXJuIDMyXzAwMCAtIDFcbiAgfVxuXG4gIGlmIChcbiAgICBjb250ZW50LmluY2x1ZGVzKCd0aGluayBhYm91dCBpdCcpIHx8XG4gICAgY29udGVudC5pbmNsdWRlcygndGhpbmsgYSBsb3QnKSB8fFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ3RoaW5rIGhhcmQnKSB8fFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ3RoaW5rIG1vcmUnKSB8fFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ21lZ2F0aGluaycpXG4gICkge1xuICAgIGxvZ0V2ZW50KCd0ZW5ndV90aGlua2luZycsIHtcbiAgICAgIG1ldGhvZDogJ3NjcmF0Y2hwYWQnLFxuICAgICAgdG9rZW5Db3VudDogJzEwMDAwJyxcbiAgICAgIG1lc3NhZ2VJZDogZ2V0TGFzdEFzc2lzdGFudE1lc3NhZ2VJZChtZXNzYWdlcyksXG4gICAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICAgIH0pXG4gICAgcmV0dXJuIDEwXzAwMFxuICB9XG5cbiAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ3RoaW5rJykpIHtcbiAgICBsb2dFdmVudCgndGVuZ3VfdGhpbmtpbmcnLCB7XG4gICAgICBtZXRob2Q6ICdzY3JhdGNocGFkJyxcbiAgICAgIHRva2VuQ291bnQ6ICc0MDAwJyxcbiAgICAgIG1lc3NhZ2VJZDogZ2V0TGFzdEFzc2lzdGFudE1lc3NhZ2VJZChtZXNzYWdlcyksXG4gICAgICBwcm92aWRlcjogVVNFX0JFRFJPQ0sgPyAnYmVkcm9jaycgOiBVU0VfVkVSVEVYID8gJ3ZlcnRleCcgOiAnMXAnLFxuICAgIH0pXG4gICAgcmV0dXJuIDRfMDAwXG4gIH1cblxuICBsb2dFdmVudCgndGVuZ3VfdGhpbmtpbmcnLCB7XG4gICAgbWV0aG9kOiAnc2NyYXRjaHBhZCcsXG4gICAgdG9rZW5Db3VudDogJzAnLFxuICAgIG1lc3NhZ2VJZDogZ2V0TGFzdEFzc2lzdGFudE1lc3NhZ2VJZChtZXNzYWdlcyksXG4gICAgcHJvdmlkZXI6IFVTRV9CRURST0NLID8gJ2JlZHJvY2snIDogVVNFX1ZFUlRFWCA/ICd2ZXJ0ZXgnIDogJzFwJyxcbiAgfSlcbiAgcmV0dXJuIDBcbn1cbiIsCiAgICAiaW1wb3J0IGV4dHJhVHlwaW5nc0NvbW1hbmRlciBmcm9tICcuL2luZGV4LmpzJztcblxuLy8gd3JhcHBlciB0byBwcm92aWRlIG5hbWVkIGV4cG9ydHMgZm9yIEVTTS5cbmV4cG9ydCBjb25zdCB7XG4gIHByb2dyYW0sXG4gIGNyZWF0ZUNvbW1hbmQsXG4gIGNyZWF0ZUFyZ3VtZW50LFxuICBjcmVhdGVPcHRpb24sXG4gIENvbW1hbmRlckVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IsIC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgQ29tbWFuZCxcbiAgQXJndW1lbnQsXG4gIE9wdGlvbixcbiAgSGVscCxcbn0gPSBleHRyYVR5cGluZ3NDb21tYW5kZXI7XG4iLAogICAgImltcG9ydCB7IGxhc3QgfSBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyBnZXRTeXN0ZW1Qcm9tcHQgfSBmcm9tICcuLi9jb25zdGFudHMvcHJvbXB0cy5qcydcbmltcG9ydCB7IGdldENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0VG90YWxDb3N0IH0gZnJvbSAnLi4vY29zdC10cmFja2VyLmpzJ1xuaW1wb3J0IHsgTWVzc2FnZSwgcXVlcnkgfSBmcm9tICcuLi9xdWVyeS5qcydcbmltcG9ydCB7IENhblVzZVRvb2xGbiB9IGZyb20gJy4uL2hvb2tzL3VzZUNhblVzZVRvb2wuanMnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vVG9vbC5qcydcbmltcG9ydCB7IGdldFNsb3dBbmRDYXBhYmxlTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC5qcydcbmltcG9ydCB7IHNldEN3ZCB9IGZyb20gJy4vc3RhdGUuanMnXG5pbXBvcnQgeyBnZXRNZXNzYWdlc1BhdGgsIG92ZXJ3cml0ZUxvZyB9IGZyb20gJy4vbG9nLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVXNlck1lc3NhZ2UgfSBmcm9tICcuL21lc3NhZ2VzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kczogQ29tbWFuZFtdXG4gIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zPzogYm9vbGVhblxuICBoYXNQZXJtaXNzaW9uc1RvVXNlVG9vbDogQ2FuVXNlVG9vbEZuXG4gIG1lc3NhZ2VMb2dOYW1lOiBzdHJpbmdcbiAgcHJvbXB0OiBzdHJpbmdcbiAgY3dkOiBzdHJpbmdcbiAgdG9vbHM6IFRvb2xbXVxuICB2ZXJib3NlPzogYm9vbGVhblxufVxuXG4vLyBTZW5kcyBhIHNpbmdsZSBwcm9tcHQgdG8gdGhlIENsYXVkZSBBUEkgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxuLy8gQXNzdW1lcyB0aGF0IGNsYXVkZSBpcyBiZWluZyB1c2VkIG5vbi1pbnRlcmFjdGl2ZWx5IC0tIHdpbGwgbm90XG4vLyBhc2sgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb25zIG9yIGZ1cnRoZXIgaW5wdXQuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNrKHtcbiAgY29tbWFuZHMsXG4gIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zLFxuICBoYXNQZXJtaXNzaW9uc1RvVXNlVG9vbCxcbiAgbWVzc2FnZUxvZ05hbWUsXG4gIHByb21wdCxcbiAgY3dkLFxuICB0b29scyxcbiAgdmVyYm9zZSA9IGZhbHNlLFxufTogUHJvcHMpOiBQcm9taXNlPHtcbiAgcmVzdWx0VGV4dDogc3RyaW5nXG4gIHRvdGFsQ29zdDogbnVtYmVyXG4gIG1lc3NhZ2VIaXN0b3J5RmlsZTogc3RyaW5nXG59PiB7XG4gIGF3YWl0IHNldEN3ZChjd2QpXG4gIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVVc2VyTWVzc2FnZShwcm9tcHQpXG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbbWVzc2FnZV1cblxuICBjb25zdCBbc3lzdGVtUHJvbXB0LCBjb250ZXh0LCBtb2RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0U3lzdGVtUHJvbXB0KCksXG4gICAgZ2V0Q29udGV4dCgpLFxuICAgIGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKSxcbiAgXSlcblxuICBmb3IgYXdhaXQgKGNvbnN0IG0gb2YgcXVlcnkoXG4gICAgbWVzc2FnZXMsXG4gICAgc3lzdGVtUHJvbXB0LFxuICAgIGNvbnRleHQsXG4gICAgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2wsXG4gICAge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgdG9vbHMsXG4gICAgICAgIHZlcmJvc2UsXG4gICAgICAgIGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zLFxuICAgICAgICBzbG93QW5kQ2FwYWJsZU1vZGVsOiBtb2RlbCxcbiAgICAgICAgZm9ya051bWJlcjogMCxcbiAgICAgICAgbWVzc2FnZUxvZ05hbWU6ICd1bnVzZWQnLFxuICAgICAgICBtYXhUaGlua2luZ1Rva2VuczogMCxcbiAgICAgIH0sXG4gICAgICBhYm9ydENvbnRyb2xsZXI6IG5ldyBBYm9ydENvbnRyb2xsZXIoKSxcbiAgICAgIG1lc3NhZ2VJZDogdW5kZWZpbmVkLFxuICAgICAgcmVhZEZpbGVUaW1lc3RhbXBzOiB7fSxcbiAgICB9LFxuICApKSB7XG4gICAgbWVzc2FnZXMucHVzaChtKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbGFzdChtZXNzYWdlcylcbiAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LnR5cGUgIT09ICdhc3Npc3RhbnQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBjb250ZW50IHRvIGJlIGFuIGFzc2lzdGFudCBtZXNzYWdlJylcbiAgfVxuICBpZiAocmVzdWx0Lm1lc3NhZ2UuY29udGVudFswXT8udHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEV4cGVjdGVkIGZpcnN0IGNvbnRlbnQgaXRlbSB0byBiZSB0ZXh0LCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlLmNvbnRlbnRbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKVxuICB9XG5cbiAgLy8gV3JpdGUgbG9nIHRoYXQgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGBjbGF1ZGUgbG9nYFxuICBjb25zdCBtZXNzYWdlSGlzdG9yeUZpbGUgPSBnZXRNZXNzYWdlc1BhdGgobWVzc2FnZUxvZ05hbWUsIDAsIDApXG4gIG92ZXJ3cml0ZUxvZyhtZXNzYWdlSGlzdG9yeUZpbGUsIG1lc3NhZ2VzKVxuXG4gIHJldHVybiB7XG4gICAgcmVzdWx0VGV4dDogcmVzdWx0Lm1lc3NhZ2UuY29udGVudFswXS50ZXh0LFxuICAgIHRvdGFsQ29zdDogZ2V0VG90YWxDb3N0KCksXG4gICAgbWVzc2FnZUhpc3RvcnlGaWxlLFxuICB9XG59XG4iLAogICAgImltcG9ydCB7IFRleHRCbG9jayB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBsYXN0LCBtZW1vaXplIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgZ2V0QWdlbnRQcm9tcHQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcHJvbXB0cy5qcydcbmltcG9ydCB7IGdldENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2wgfSBmcm9tICcuLi8uLi9wZXJtaXNzaW9ucy5qcydcbmltcG9ydCB7IEFzc2lzdGFudE1lc3NhZ2UsIE1lc3NhZ2UgYXMgTWVzc2FnZVR5cGUsIHF1ZXJ5IH0gZnJvbSAnLi4vLi4vcXVlcnkuanMnXG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TWVzc2FnZXNQYXRoLFxuICBnZXROZXh0QXZhaWxhYmxlTG9nU2lkZWNoYWluTnVtYmVyLFxuICBvdmVyd3JpdGVMb2csXG59IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGFwcGx5TWFya2Rvd24gfSBmcm9tICcuLi8uLi91dGlscy9tYXJrZG93bi5qcydcbmltcG9ydCB7XG4gIGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UsXG4gIGNyZWF0ZVVzZXJNZXNzYWdlLFxuICBnZXRMYXN0QXNzaXN0YW50TWVzc2FnZUlkLFxuICBJTlRFUlJVUFRfTUVTU0FHRSxcbiAgbm9ybWFsaXplTWVzc2FnZXMsXG59IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL3V0aWxzL21vZGVsLmpzJ1xuaW1wb3J0IHsgZ2V0TWF4VGhpbmtpbmdUb2tlbnMgfSBmcm9tICcuLi8uLi91dGlscy90aGlua2luZy5qcydcbmltcG9ydCB7IGdldEFnZW50VG9vbHMsIGdldFByb21wdCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IHsgVE9PTF9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMuanMnXG5cbmNvbnN0IGlucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBwcm9tcHQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1RoZSB0YXNrIGZvciB0aGUgYWdlbnQgdG8gcGVyZm9ybScpLFxufSlcblxuZXhwb3J0IGNvbnN0IEFnZW50VG9vbCA9IHtcbiAgYXN5bmMgcHJvbXB0KHsgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnMgfSkge1xuICAgIHJldHVybiBhd2FpdCBnZXRQcm9tcHQoZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnMpXG4gIH0sXG4gIG5hbWU6IFRPT0xfTkFNRSxcbiAgYXN5bmMgZGVzY3JpcHRpb24oKSB7XG4gICAgcmV0dXJuICdMYXVuY2ggYSBuZXcgdGFzaydcbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIGFzeW5jICpjYWxsKFxuICAgIHsgcHJvbXB0IH0sXG4gICAge1xuICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucyA9IGZhbHNlLFxuICAgICAgICBmb3JrTnVtYmVyLFxuICAgICAgICBtZXNzYWdlTG9nTmFtZSxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgIH0sXG4gICAgICByZWFkRmlsZVRpbWVzdGFtcHMsXG4gICAgfSxcbiAgKSB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlVHlwZVtdID0gW2NyZWF0ZVVzZXJNZXNzYWdlKHByb21wdCldXG4gICAgY29uc3QgdG9vbHMgPSBhd2FpdCBnZXRBZ2VudFRvb2xzKGRhbmdlcm91c2x5U2tpcFBlcm1pc3Npb25zKVxuXG4gICAgLy8gV2UgeWllbGQgYW4gaW5pdGlhbCBtZXNzYWdlIGltbWVkaWF0ZWx5IHNvIHRoZSBVSVxuICAgIC8vIGRvZXNuJ3QgbW92ZSBhcm91bmQgd2hlbiBtZXNzYWdlcyBzdGFydCBzdHJlYW1pbmcgYmFjay5cbiAgICB5aWVsZCB7XG4gICAgICB0eXBlOiAncHJvZ3Jlc3MnLFxuICAgICAgY29udGVudDogY3JlYXRlQXNzaXN0YW50TWVzc2FnZShjaGFsay5kaW0oJ0luaXRpYWxpemluZ+KApicpKSxcbiAgICAgIG5vcm1hbGl6ZWRNZXNzYWdlczogbm9ybWFsaXplTWVzc2FnZXMobWVzc2FnZXMpLFxuICAgICAgdG9vbHMsXG4gICAgfVxuXG4gICAgY29uc3QgW2FnZW50UHJvbXB0LCBjb250ZXh0LCBzbG93QW5kQ2FwYWJsZU1vZGVsLCBtYXhUaGlua2luZ1Rva2Vuc10gPVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRBZ2VudFByb21wdCgpLFxuICAgICAgICBnZXRDb250ZXh0KCksXG4gICAgICAgIGdldFNsb3dBbmRDYXBhYmxlTW9kZWwoKSxcbiAgICAgICAgZ2V0TWF4VGhpbmtpbmdUb2tlbnMobWVzc2FnZXMpLFxuICAgICAgXSlcbiAgICBsZXQgdG9vbFVzZUNvdW50ID0gMFxuXG4gICAgY29uc3QgZ2V0U2lkZWNoYWluTnVtYmVyID0gbWVtb2l6ZSgoKSA9PlxuICAgICAgZ2V0TmV4dEF2YWlsYWJsZUxvZ1NpZGVjaGFpbk51bWJlcihtZXNzYWdlTG9nTmFtZSwgZm9ya051bWJlciksXG4gICAgKVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBtZXNzYWdlIG9mIHF1ZXJ5KFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBhZ2VudFByb21wdCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBoYXNQZXJtaXNzaW9uc1RvVXNlVG9vbCxcbiAgICAgIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnMsXG4gICAgICAgICAgZm9ya051bWJlcixcbiAgICAgICAgICBtZXNzYWdlTG9nTmFtZSxcbiAgICAgICAgICB0b29scyxcbiAgICAgICAgICBjb21tYW5kczogW10sXG4gICAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgICBzbG93QW5kQ2FwYWJsZU1vZGVsLFxuICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zLFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlSWQ6IGdldExhc3RBc3Npc3RhbnRNZXNzYWdlSWQobWVzc2FnZXMpLFxuICAgICAgICByZWFkRmlsZVRpbWVzdGFtcHMsXG4gICAgICB9LFxuICAgICkpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcblxuICAgICAgb3ZlcndyaXRlTG9nKFxuICAgICAgICAvLyBJTVBPUlRBTlQ6IENvbXB1dGUgc2lkZWNoYWluIG51bWJlciBoZXJlLCBub3QgZWFybGllciwgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvblxuICAgICAgICAvLyB3aGVyZSBjb25jdXJyZW50IEFnZW50cyByZXNlcnZlIHRoZSBzYW1lIHNpZGVjaGFpbiBudW1iZXIuXG4gICAgICAgIGdldE1lc3NhZ2VzUGF0aChtZXNzYWdlTG9nTmFtZSwgZm9ya051bWJlciwgZ2V0U2lkZWNoYWluTnVtYmVyKCkpLFxuICAgICAgICBtZXNzYWdlcy5maWx0ZXIoXyA9PiBfLnR5cGUgIT09ICdwcm9ncmVzcycpLFxuICAgICAgKVxuXG4gICAgICBpZiAobWVzc2FnZS50eXBlICE9PSAnYXNzaXN0YW50Jykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkTWVzc2FnZXMgPSBub3JtYWxpemVNZXNzYWdlcyhtZXNzYWdlcylcbiAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudCkge1xuICAgICAgICBpZiAoY29udGVudC50eXBlICE9PSAndG9vbF91c2UnKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIHRvb2xVc2VDb3VudCsrXG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICB0eXBlOiAncHJvZ3Jlc3MnLFxuICAgICAgICAgIGNvbnRlbnQ6IG5vcm1hbGl6ZWRNZXNzYWdlcy5maW5kKFxuICAgICAgICAgICAgXyA9PlxuICAgICAgICAgICAgICBfLnR5cGUgPT09ICdhc3Npc3RhbnQnICYmXG4gICAgICAgICAgICAgIF8ubWVzc2FnZS5jb250ZW50WzBdPy50eXBlID09PSAndG9vbF91c2UnICYmXG4gICAgICAgICAgICAgIF8ubWVzc2FnZS5jb250ZW50WzBdLmlkID09PSBjb250ZW50LmlkLFxuICAgICAgICAgICkgYXMgQXNzaXN0YW50TWVzc2FnZSxcbiAgICAgICAgICBub3JtYWxpemVkTWVzc2FnZXMsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkTWVzc2FnZXMgPSBub3JtYWxpemVNZXNzYWdlcyhtZXNzYWdlcylcbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IGxhc3QobWVzc2FnZXMpXG4gICAgaWYgKGxhc3RNZXNzYWdlPy50eXBlICE9PSAnYXNzaXN0YW50Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMYXN0IG1lc3NhZ2Ugd2FzIG5vdCBhbiBhc3Npc3RhbnQgbWVzc2FnZScpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbGFzdE1lc3NhZ2UubWVzc2FnZS5jb250ZW50LnNvbWUoXG4gICAgICAgIF8gPT4gXy50eXBlID09PSAndGV4dCcgJiYgXy50ZXh0ID09PSBJTlRFUlJVUFRfTUVTU0FHRSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogJ3Byb2dyZXNzJyxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UsXG4gICAgICAgIG5vcm1hbGl6ZWRNZXNzYWdlcyxcbiAgICAgICAgdG9vbHMsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtcbiAgICAgICAgdG9vbFVzZUNvdW50ID09PSAxID8gJzEgdG9vbCB1c2UnIDogYCR7dG9vbFVzZUNvdW50fSB0b29sIHVzZXNgLFxuICAgICAgICBmb3JtYXROdW1iZXIoXG4gICAgICAgICAgKGxhc3RNZXNzYWdlLm1lc3NhZ2UudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zID8/IDApICtcbiAgICAgICAgICAgIChsYXN0TWVzc2FnZS5tZXNzYWdlLnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zID8/IDApICtcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlLm1lc3NhZ2UudXNhZ2UuaW5wdXRfdG9rZW5zICtcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlLm1lc3NhZ2UudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgICAgKSArICcgdG9rZW5zJyxcbiAgICAgICAgZm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSksXG4gICAgICBdXG4gICAgICB5aWVsZCB7XG4gICAgICAgIHR5cGU6ICdwcm9ncmVzcycsXG4gICAgICAgIGNvbnRlbnQ6IGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UoYERvbmUgKCR7cmVzdWx0LmpvaW4oJyDCtyAnKX0pYCksXG4gICAgICAgIG5vcm1hbGl6ZWRNZXNzYWdlcyxcbiAgICAgICAgdG9vbHMsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3V0cHV0IGlzIGFuIEFzc2lzdGFudE1lc3NhZ2UsIGJ1dCBzaW5jZSBBZ2VudFRvb2wgaXMgYSB0b29sLCBpdCBuZWVkc1xuICAgIC8vIHRvIHNlcmlhbGl6ZSBpdHMgcmVzcG9uc2UgdG8gVXNlck1lc3NhZ2UtY29tcGF0aWJsZSBjb250ZW50LlxuICAgIGNvbnN0IGRhdGEgPSBsYXN0TWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQuZmlsdGVyKF8gPT4gXy50eXBlID09PSAndGV4dCcpXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICBkYXRhLFxuICAgICAgbm9ybWFsaXplZE1lc3NhZ2VzLFxuICAgICAgcmVzdWx0Rm9yQXNzaXN0YW50OiB0aGlzLnJlbmRlclJlc3VsdEZvckFzc2lzdGFudChkYXRhKSxcbiAgICAgIHRvb2xzLFxuICAgIH1cbiAgfSxcbiAgaXNSZWFkT25seSgpIHtcbiAgICByZXR1cm4gdHJ1ZSAvLyBmb3Igbm93Li4uXG4gIH0sXG4gIGFzeW5jIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ1Rhc2snXG4gIH0sXG4gIG5lZWRzUGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHJlbmRlclJlc3VsdEZvckFzc2lzdGFudChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZU1lc3NhZ2UoeyBwcm9tcHQgfSwgeyB2ZXJib3NlIH0pIHtcbiAgICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdChFT0wpXG4gICAgcmV0dXJuIGFwcGx5TWFya2Rvd24oIXZlcmJvc2UgJiYgbGluZXMubGVuZ3RoID4gMSA/IGxpbmVzWzBdICsgJ+KApicgOiBwcm9tcHQpXG4gIH0sXG4gIHJlbmRlclRvb2xVc2VSZWplY3RlZE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIDxGYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UgLz5cbiAgfSxcbn0gc2F0aXNmaWVzIFRvb2w8dHlwZW9mIGlucHV0U2NoZW1hLCBUZXh0QmxvY2tbXT5cbiIsCiAgICAiaW1wb3J0IHsgdHlwZSBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IGdldFRvb2xzLCBnZXRSZWFkT25seVRvb2xzIH0gZnJvbSAnLi4vLi4vdG9vbHMuanMnXG5pbXBvcnQgeyBBZ2VudFRvb2wgfSBmcm9tICcuLi9BZ2VudFRvb2wvQWdlbnRUb29sLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuLi9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IEZpbGVXcml0ZVRvb2wgfSBmcm9tICcuLi9GaWxlV3JpdGVUb29sL0ZpbGVXcml0ZVRvb2wuanMnXG5pbXBvcnQgeyBGaWxlRWRpdFRvb2wgfSBmcm9tICcuLi9GaWxlRWRpdFRvb2wvRmlsZUVkaXRUb29sLmpzJ1xuaW1wb3J0IHsgTm90ZWJvb2tFZGl0VG9vbCB9IGZyb20gJy4uL05vdGVib29rRWRpdFRvb2wvTm90ZWJvb2tFZGl0VG9vbC5qcydcbmltcG9ydCB7IEdsb2JUb29sIH0gZnJvbSAnLi4vR2xvYlRvb2wvR2xvYlRvb2wuanMnXG5pbXBvcnQgeyBGaWxlUmVhZFRvb2wgfSBmcm9tICcuLi9GaWxlUmVhZFRvb2wvRmlsZVJlYWRUb29sLmpzJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWdlbnRUb29scyhcbiAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnM6IGJvb2xlYW4sXG4pOiBQcm9taXNlPFRvb2xbXT4ge1xuICAvLyBObyByZWN1cnNpdmUgYWdlbnRzLCB5ZXQuLlxuICByZXR1cm4gKFxuICAgIGF3YWl0IChkYW5nZXJvdXNseVNraXBQZXJtaXNzaW9ucyA/IGdldFRvb2xzKCkgOiBnZXRSZWFkT25seVRvb2xzKCkpXG4gICkuZmlsdGVyKF8gPT4gXy5uYW1lICE9PSBBZ2VudFRvb2wubmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb21wdChcbiAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnM6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB0b29scyA9IGF3YWl0IGdldEFnZW50VG9vbHMoZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnMpXG4gIGNvbnN0IHRvb2xOYW1lcyA9IHRvb2xzLm1hcChfID0+IF8ubmFtZSkuam9pbignLCAnKVxuICByZXR1cm4gYExhdW5jaCBhIG5ldyBhZ2VudCB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIGZvbGxvd2luZyB0b29sczogJHt0b29sTmFtZXN9LiBXaGVuIHlvdSBhcmUgc2VhcmNoaW5nIGZvciBhIGtleXdvcmQgb3IgZmlsZSBhbmQgYXJlIG5vdCBjb25maWRlbnQgdGhhdCB5b3Ugd2lsbCBmaW5kIHRoZSByaWdodCBtYXRjaCBvbiB0aGUgZmlyc3QgdHJ5LCB1c2UgdGhlIEFnZW50IHRvb2wgdG8gcGVyZm9ybSB0aGUgc2VhcmNoIGZvciB5b3UuIEZvciBleGFtcGxlOlxuXG4tIElmIHlvdSBhcmUgc2VhcmNoaW5nIGZvciBhIGtleXdvcmQgbGlrZSBcImNvbmZpZ1wiIG9yIFwibG9nZ2VyXCIsIHRoZSBBZ2VudCB0b29sIGlzIGFwcHJvcHJpYXRlXG4tIElmIHlvdSB3YW50IHRvIHJlYWQgYSBzcGVjaWZpYyBmaWxlIHBhdGgsIHVzZSB0aGUgJHtGaWxlUmVhZFRvb2wubmFtZX0gb3IgJHtHbG9iVG9vbC5uYW1lfSB0b29sIGluc3RlYWQgb2YgdGhlIEFnZW50IHRvb2wsIHRvIGZpbmQgdGhlIG1hdGNoIG1vcmUgcXVpY2tseVxuLSBJZiB5b3UgYXJlIHNlYXJjaGluZyBmb3IgYSBzcGVjaWZpYyBjbGFzcyBkZWZpbml0aW9uIGxpa2UgXCJjbGFzcyBGb29cIiwgdXNlIHRoZSAke0dsb2JUb29sLm5hbWV9IHRvb2wgaW5zdGVhZCwgdG8gZmluZCB0aGUgbWF0Y2ggbW9yZSBxdWlja2x5XG5cblVzYWdlIG5vdGVzOlxuMS4gTGF1bmNoIG11bHRpcGxlIGFnZW50cyBjb25jdXJyZW50bHkgd2hlbmV2ZXIgcG9zc2libGUsIHRvIG1heGltaXplIHBlcmZvcm1hbmNlOyB0byBkbyB0aGF0LCB1c2UgYSBzaW5nbGUgbWVzc2FnZSB3aXRoIG11bHRpcGxlIHRvb2wgdXNlc1xuMi4gV2hlbiB0aGUgYWdlbnQgaXMgZG9uZSwgaXQgd2lsbCByZXR1cm4gYSBzaW5nbGUgbWVzc2FnZSBiYWNrIHRvIHlvdS4gVGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgYWdlbnQgaXMgbm90IHZpc2libGUgdG8gdGhlIHVzZXIuIFRvIHNob3cgdGhlIHVzZXIgdGhlIHJlc3VsdCwgeW91IHNob3VsZCBzZW5kIGEgdGV4dCBtZXNzYWdlIGJhY2sgdG8gdGhlIHVzZXIgd2l0aCBhIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgcmVzdWx0LlxuMy4gRWFjaCBhZ2VudCBpbnZvY2F0aW9uIGlzIHN0YXRlbGVzcy4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gc2VuZCBhZGRpdGlvbmFsIG1lc3NhZ2VzIHRvIHRoZSBhZ2VudCwgbm9yIHdpbGwgdGhlIGFnZW50IGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCB5b3Ugb3V0c2lkZSBvZiBpdHMgZmluYWwgcmVwb3J0LiBUaGVyZWZvcmUsIHlvdXIgcHJvbXB0IHNob3VsZCBjb250YWluIGEgaGlnaGx5IGRldGFpbGVkIHRhc2sgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCB0byBwZXJmb3JtIGF1dG9ub21vdXNseSBhbmQgeW91IHNob3VsZCBzcGVjaWZ5IGV4YWN0bHkgd2hhdCBpbmZvcm1hdGlvbiB0aGUgYWdlbnQgc2hvdWxkIHJldHVybiBiYWNrIHRvIHlvdSBpbiBpdHMgZmluYWwgYW5kIG9ubHkgbWVzc2FnZSB0byB5b3UuXG40LiBUaGUgYWdlbnQncyBvdXRwdXRzIHNob3VsZCBnZW5lcmFsbHkgYmUgdHJ1c3RlZCR7XG4gICAgZGFuZ2Vyb3VzbHlTa2lwUGVybWlzc2lvbnNcbiAgICAgID8gJydcbiAgICAgIDogYFxuNS4gSU1QT1JUQU5UOiBUaGUgYWdlbnQgY2FuIG5vdCB1c2UgJHtCYXNoVG9vbC5uYW1lfSwgJHtGaWxlV3JpdGVUb29sLm5hbWV9LCAke0ZpbGVFZGl0VG9vbC5uYW1lfSwgJHtOb3RlYm9va0VkaXRUb29sLm5hbWV9LCBzbyBjYW4gbm90IG1vZGlmeSBmaWxlcy4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZXNlIHRvb2xzLCB1c2UgdGhlbSBkaXJlY3RseSBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIGFnZW50LmBcbiAgfWBcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUZXh0QmxvY2sgfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0IHsgQm94IH0gZnJvbSAnaW5rJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJ1xuaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgSGlnaGxpZ2h0ZWRDb2RlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9IaWdobGlnaHRlZENvZGUuanMnXG5pbXBvcnQgeyBnZXRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC5qcydcbmltcG9ydCB7IE1lc3NhZ2UsIHF1ZXJ5IH0gZnJvbSAnLi4vLi4vcXVlcnkuanMnXG5pbXBvcnQgeyBsYXN0WCB9IGZyb20gJy4uLy4uL3V0aWxzL2dlbmVyYXRvcnMuanMnXG5pbXBvcnQgeyBjcmVhdGVVc2VyTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuLi9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IEZpbGVSZWFkVG9vbCB9IGZyb20gJy4uL0ZpbGVSZWFkVG9vbC9GaWxlUmVhZFRvb2wuanMnXG5pbXBvcnQgeyBGaWxlV3JpdGVUb29sIH0gZnJvbSAnLi4vRmlsZVdyaXRlVG9vbC9GaWxlV3JpdGVUb29sLmpzJ1xuaW1wb3J0IHsgR2xvYlRvb2wgfSBmcm9tICcuLi9HbG9iVG9vbC9HbG9iVG9vbC5qcydcbmltcG9ydCB7IEdyZXBUb29sIH0gZnJvbSAnLi4vR3JlcFRvb2wvR3JlcFRvb2wuanMnXG5pbXBvcnQgeyBMU1Rvb2wgfSBmcm9tICcuLi9sc1Rvb2wvbHNUb29sLmpzJ1xuaW1wb3J0IHsgQVJDSElURUNUX1NZU1RFTV9QUk9NUFQsIERFU0NSSVBUSU9OIH0gZnJvbSAnLi9wcm9tcHQuanMnXG5cbmNvbnN0IEZTX0VYUExPUkFUSU9OX1RPT0xTOiBUb29sW10gPSBbXG4gIEJhc2hUb29sLFxuICBMU1Rvb2wsXG4gIEZpbGVSZWFkVG9vbCxcbiAgRmlsZVdyaXRlVG9vbCxcbiAgR2xvYlRvb2wsXG4gIEdyZXBUb29sLFxuXVxuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgcHJvbXB0OiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKCdUaGUgdGVjaG5pY2FsIHJlcXVlc3Qgb3IgY29kaW5nIHRhc2sgdG8gYW5hbHl6ZScpLFxuICBjb250ZXh0OiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKCdPcHRpb25hbCBjb250ZXh0IGZyb20gcHJldmlvdXMgY29udmVyc2F0aW9uIG9yIHN5c3RlbSBzdGF0ZScpXG4gICAgLm9wdGlvbmFsKCksXG59KVxuXG5leHBvcnQgY29uc3QgQXJjaGl0ZWN0VG9vbCA9IHtcbiAgbmFtZTogJ0FyY2hpdGVjdCcsXG4gIGFzeW5jIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBERVNDUklQVElPTlxuICB9LFxuICBpbnB1dFNjaGVtYSxcbiAgaXNSZWFkT25seSgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ0FyY2hpdGVjdCdcbiAgfSxcbiAgYXN5bmMgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBuZWVkc1Blcm1pc3Npb25zKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBhc3luYyAqY2FsbCh7IHByb21wdCwgY29udGV4dCB9LCB0b29sVXNlQ29udGV4dCwgY2FuVXNlVG9vbCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZXh0XG4gICAgICA/IGA8Y29udGV4dD4ke2NvbnRleHR9PC9jb250ZXh0PlxcblxcbiR7cHJvbXB0fWBcbiAgICAgIDogcHJvbXB0XG5cbiAgICBjb25zdCB1c2VyTWVzc2FnZSA9IGNyZWF0ZVVzZXJNZXNzYWdlKGNvbnRlbnQpXG5cbiAgICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW3VzZXJNZXNzYWdlXVxuXG4gICAgLy8gV2Ugb25seSBhbGxvdyB0aGUgZmlsZSBleHBsb3JhdGlvbiB0b29scyB0byBiZSB1c2VkIGluIHRoZSBhcmNoaXRlY3QgdG9vbFxuICAgIGNvbnN0IGFsbG93ZWRUb29scyA9ICh0b29sVXNlQ29udGV4dC5vcHRpb25zLnRvb2xzID8/IFtdKS5maWx0ZXIoXyA9PlxuICAgICAgRlNfRVhQTE9SQVRJT05fVE9PTFMubWFwKF8gPT4gXy5uYW1lKS5pbmNsdWRlcyhfLm5hbWUpLFxuICAgIClcblxuICAgIGNvbnN0IGxhc3RSZXNwb25zZSA9IGF3YWl0IGxhc3RYKFxuICAgICAgcXVlcnkoXG4gICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICBbQVJDSElURUNUX1NZU1RFTV9QUk9NUFRdLFxuICAgICAgICBhd2FpdCBnZXRDb250ZXh0KCksXG4gICAgICAgIGNhblVzZVRvb2wsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50b29sVXNlQ29udGV4dCxcbiAgICAgICAgICBvcHRpb25zOiB7IC4uLnRvb2xVc2VDb250ZXh0Lm9wdGlvbnMsIHRvb2xzOiBhbGxvd2VkVG9vbHMgfSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKVxuXG4gICAgaWYgKGxhc3RSZXNwb25zZS50eXBlICE9PSAnYXNzaXN0YW50Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGZyb20gQ2xhdWRlIEFQSScpXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGxhc3RSZXNwb25zZS5tZXNzYWdlLmNvbnRlbnQuZmlsdGVyKF8gPT4gXy50eXBlID09PSAndGV4dCcpXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICBkYXRhLFxuICAgICAgcmVzdWx0Rm9yQXNzaXN0YW50OiB0aGlzLnJlbmRlclJlc3VsdEZvckFzc2lzdGFudChkYXRhKSxcbiAgICB9XG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgcmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50KGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9LFxuICByZW5kZXJUb29sVXNlTWVzc2FnZShpbnB1dCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dClcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YClcbiAgICAgIC5qb2luKCcsICcpXG4gIH0sXG4gIHJlbmRlclRvb2xSZXN1bHRNZXNzYWdlKGNvbnRlbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgPEhpZ2hsaWdodGVkQ29kZVxuICAgICAgICAgIGNvZGU9e2NvbnRlbnQubWFwKF8gPT4gXy50ZXh0KS5qb2luKCdcXG4nKX1cbiAgICAgICAgICBsYW5ndWFnZT1cIm1hcmtkb3duXCJcbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZVJlamVjdGVkTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxuICB9LFxufSBzYXRpc2ZpZXMgVG9vbDx0eXBlb2YgaW5wdXRTY2hlbWEsIFRleHRCbG9ja1tdPlxuIiwKICAgICJleHBvcnQgY29uc3QgQVJDSElURUNUX1NZU1RFTV9QUk9NUFQgPSBgWW91IGFyZSBhbiBleHBlcnQgc29mdHdhcmUgYXJjaGl0ZWN0LiBZb3VyIHJvbGUgaXMgdG8gYW5hbHl6ZSB0ZWNobmljYWwgcmVxdWlyZW1lbnRzIGFuZCBwcm9kdWNlIGNsZWFyLCBhY3Rpb25hYmxlIGltcGxlbWVudGF0aW9uIHBsYW5zLlxuVGhlc2UgcGxhbnMgd2lsbCB0aGVuIGJlIGNhcnJpZWQgb3V0IGJ5IGEganVuaW9yIHNvZnR3YXJlIGVuZ2luZWVyIHNvIHlvdSBuZWVkIHRvIGJlIHNwZWNpZmljIGFuZCBkZXRhaWxlZC4gSG93ZXZlciBkbyBub3QgYWN0dWFsbHkgd3JpdGUgdGhlIGNvZGUsIGp1c3QgZXhwbGFpbiB0aGUgcGxhbi5cblxuRm9sbG93IHRoZXNlIHN0ZXBzIGZvciBlYWNoIHJlcXVlc3Q6XG4xLiBDYXJlZnVsbHkgYW5hbHl6ZSByZXF1aXJlbWVudHMgdG8gaWRlbnRpZnkgY29yZSBmdW5jdGlvbmFsaXR5IGFuZCBjb25zdHJhaW50c1xuMi4gRGVmaW5lIGNsZWFyIHRlY2huaWNhbCBhcHByb2FjaCB3aXRoIHNwZWNpZmljIHRlY2hub2xvZ2llcyBhbmQgcGF0dGVybnNcbjMuIEJyZWFrIGRvd24gaW1wbGVtZW50YXRpb24gaW50byBjb25jcmV0ZSwgYWN0aW9uYWJsZSBzdGVwcyBhdCB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb25cblxuS2VlcCByZXNwb25zZXMgZm9jdXNlZCwgc3BlY2lmaWMgYW5kIGFjdGlvbmFibGUuIFxuXG5JTVBPUlRBTlQ6IERvIG5vdCBhc2sgdGhlIHVzZXIgaWYgeW91IHNob3VsZCBpbXBsZW1lbnQgdGhlIGNoYW5nZXMgYXQgdGhlIGVuZC4gSnVzdCBwcm92aWRlIHRoZSBwbGFuIGFzIGRlc2NyaWJlZCBhYm92ZS5cbklNUE9SVEFOVDogRG8gbm90IGF0dGVtcHQgdG8gd3JpdGUgdGhlIGNvZGUgb3IgdXNlIGFueSBzdHJpbmcgbW9kaWZpY2F0aW9uIHRvb2xzLiBKdXN0IHByb3ZpZGUgdGhlIHBsYW4uYFxuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRJT04gPVxuICAnWW91ciBnby10byB0b29sIGZvciBhbnkgdGVjaG5pY2FsIG9yIGNvZGluZyB0YXNrLiBBbmFseXplcyByZXF1aXJlbWVudHMgYW5kIGJyZWFrcyB0aGVtIGRvd24gaW50byBjbGVhciwgYWN0aW9uYWJsZSBpbXBsZW1lbnRhdGlvbiBzdGVwcy4gVXNlIHRoaXMgd2hlbmV2ZXIgeW91IG5lZWQgaGVscCBwbGFubmluZyBob3cgdG8gaW1wbGVtZW50IGEgZmVhdHVyZSwgc29sdmUgYSB0ZWNobmljYWwgcHJvYmxlbSwgb3Igc3RydWN0dXJlIHlvdXIgY29kZS4nXG4iLAogICAgImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBNRU1PUllfRElSIH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgREVTQ1JJUFRJT04sIFBST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgZmlsZV9wYXRoOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoJ09wdGlvbmFsIHBhdGggdG8gYSBzcGVjaWZpYyBtZW1vcnkgZmlsZSB0byByZWFkJyksXG59KVxuXG5leHBvcnQgY29uc3QgTWVtb3J5UmVhZFRvb2wgPSB7XG4gIG5hbWU6ICdNZW1vcnlSZWFkJyxcbiAgYXN5bmMgZGVzY3JpcHRpb24oKSB7XG4gICAgcmV0dXJuIERFU0NSSVBUSU9OXG4gIH0sXG4gIGFzeW5jIHByb21wdCgpIHtcbiAgICByZXR1cm4gUFJPTVBUXG4gIH0sXG4gIGlucHV0U2NoZW1hLFxuICB1c2VyRmFjaW5nTmFtZSgpIHtcbiAgICByZXR1cm4gJ1JlYWQgTWVtb3J5J1xuICB9LFxuICBhc3luYyBpc0VuYWJsZWQoKSB7XG4gICAgLy8gVE9ETzogVXNlIGEgc3RhdHNpZyBnYXRlXG4gICAgLy8gVE9ETzogRmlndXJlIG91dCBob3cgdG8gZG8gdGhhdCB3aXRob3V0IHJlZ3Jlc3NpbmcgYXBwIHN0YXJ0dXAgcGVyZlxuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIG5lZWRzUGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHJlbmRlclJlc3VsdEZvckFzc2lzdGFudCh7IGNvbnRlbnQgfSkge1xuICAgIHJldHVybiBjb250ZW50XG4gIH0sXG4gIHJlbmRlclRvb2xVc2VNZXNzYWdlKGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKVxuICAgICAgLmpvaW4oJywgJylcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZVJlamVjdGVkTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxuICB9LFxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZShvdXRwdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiBvdmVyZmxvd1g9XCJoaWRkZW5cIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgPFRleHQ+Jm5ic3A7Jm5ic3A74o6/ICZuYnNwOzwvVGV4dD5cbiAgICAgICAgICA8VGV4dD57b3V0cHV0LmNvbnRlbnR9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfSxcbiAgYXN5bmMgdmFsaWRhdGVJbnB1dCh7IGZpbGVfcGF0aCB9KSB7XG4gICAgaWYgKGZpbGVfcGF0aCkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKE1FTU9SWV9ESVIsIGZpbGVfcGF0aClcbiAgICAgIGlmICghZnVsbFBhdGguc3RhcnRzV2l0aChNRU1PUllfRElSKSkge1xuICAgICAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCBtZXNzYWdlOiAnSW52YWxpZCBtZW1vcnkgZmlsZSBwYXRoJyB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIG1lc3NhZ2U6ICdNZW1vcnkgZmlsZSBkb2VzIG5vdCBleGlzdCcgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByZXN1bHQ6IHRydWUgfVxuICB9LFxuICBhc3luYyAqY2FsbCh7IGZpbGVfcGF0aCB9KSB7XG4gICAgbWtkaXJTeW5jKE1FTU9SWV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG5cbiAgICAvLyBJZiBhIHNwZWNpZmljIGZpbGUgaXMgcmVxdWVzdGVkLCByZXR1cm4gaXRzIGNvbnRlbnRzXG4gICAgaWYgKGZpbGVfcGF0aCkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKE1FTU9SWV9ESVIsIGZpbGVfcGF0aClcbiAgICAgIGlmICghZXhpc3RzU3luYyhmdWxsUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZW1vcnkgZmlsZSBkb2VzIG5vdCBleGlzdCcpXG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgeWllbGQge1xuICAgICAgICB0eXBlOiAncmVzdWx0JyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdEZvckFzc2lzdGFudDogdGhpcy5yZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoeyBjb250ZW50IH0pLFxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIHJldHVybiB0aGUgaW5kZXggYW5kIGZpbGUgbGlzdFxuICAgIGNvbnN0IGZpbGVzID0gcmVhZGRpclN5bmMoTUVNT1JZX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgIC5tYXAoZiA9PiBqb2luKE1FTU9SWV9ESVIsIGYudG9TdHJpbmcoKSkpXG4gICAgICAuZmlsdGVyKGYgPT4gIWxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpKVxuICAgICAgLm1hcChmID0+IGAtICR7Zn1gKVxuICAgICAgLmpvaW4oJ1xcbicpXG5cbiAgICBjb25zdCBpbmRleFBhdGggPSBqb2luKE1FTU9SWV9ESVIsICdpbmRleC5tZCcpXG4gICAgY29uc3QgaW5kZXggPSBleGlzdHNTeW5jKGluZGV4UGF0aCkgPyByZWFkRmlsZVN5bmMoaW5kZXhQYXRoLCAndXRmLTgnKSA6ICcnXG5cbiAgICBjb25zdCBxdW90ZXMgPSBcIicnJ1wiXG4gICAgY29uc3QgY29udGVudCA9IGBIZXJlIGFyZSB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbWVtb3J5IGZpbGUsIFxcYCR7aW5kZXhQYXRofVxcYDpcbiR7cXVvdGVzfVxuJHtpbmRleH1cbiR7cXVvdGVzfVxuXG5GaWxlcyBpbiB0aGUgbWVtb3J5IGRpcmVjdG9yeTpcbiR7ZmlsZXN9YFxuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6ICdyZXN1bHQnLFxuICAgICAgZGF0YTogeyBjb250ZW50IH0sXG4gICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6IHRoaXMucmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50KHsgY29udGVudCB9KSxcbiAgICB9XG4gIH0sXG59IHNhdGlzZmllcyBUb29sPHR5cGVvZiBpbnB1dFNjaGVtYSwgeyBjb250ZW50OiBzdHJpbmcgfT5cbiIsCiAgICAiaW1wb3J0IHsgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBNRU1PUllfRElSIH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgREVTQ1JJUFRJT04sIFBST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuXG5jb25zdCBpbnB1dFNjaGVtYSA9IHouc3RyaWN0T2JqZWN0KHtcbiAgZmlsZV9wYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKCdQYXRoIHRvIHRoZSBtZW1vcnkgZmlsZSB0byB3cml0ZScpLFxuICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKCdDb250ZW50IHRvIHdyaXRlIHRvIHRoZSBmaWxlJyksXG59KVxuXG5leHBvcnQgY29uc3QgTWVtb3J5V3JpdGVUb29sID0ge1xuICBuYW1lOiAnTWVtb3J5V3JpdGUnLFxuICBhc3luYyBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gREVTQ1JJUFRJT05cbiAgfSxcbiAgYXN5bmMgcHJvbXB0KCkge1xuICAgIHJldHVybiBQUk9NUFRcbiAgfSxcbiAgaW5wdXRTY2hlbWEsXG4gIHVzZXJGYWNpbmdOYW1lKCkge1xuICAgIHJldHVybiAnV3JpdGUgTWVtb3J5J1xuICB9LFxuICBhc3luYyBpc0VuYWJsZWQoKSB7XG4gICAgLy8gVE9ETzogVXNlIGEgc3RhdHNpZyBnYXRlXG4gICAgLy8gVE9ETzogRmlndXJlIG91dCBob3cgdG8gZG8gdGhhdCB3aXRob3V0IHJlZ3Jlc3NpbmcgYXBwIHN0YXJ0dXAgcGVyZlxuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBuZWVkc1Blcm1pc3Npb25zKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICByZW5kZXJSZXN1bHRGb3JBc3Npc3RhbnQoY29udGVudCkge1xuICAgIHJldHVybiBjb250ZW50XG4gIH0sXG4gIHJlbmRlclRvb2xVc2VNZXNzYWdlKGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKVxuICAgICAgLmpvaW4oJywgJylcbiAgfSxcbiAgcmVuZGVyVG9vbFVzZVJlamVjdGVkTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxuICB9LFxuICByZW5kZXJUb29sUmVzdWx0TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiBvdmVyZmxvd1g9XCJoaWRkZW5cIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgPFRleHQ+eycgICd94o6/IFVwZGF0ZWQgbWVtb3J5PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfSxcbiAgYXN5bmMgdmFsaWRhdGVJbnB1dCh7IGZpbGVfcGF0aCB9KSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBqb2luKE1FTU9SWV9ESVIsIGZpbGVfcGF0aClcbiAgICBpZiAoIWZ1bGxQYXRoLnN0YXJ0c1dpdGgoTUVNT1JZX0RJUikpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIG1lc3NhZ2U6ICdJbnZhbGlkIG1lbW9yeSBmaWxlIHBhdGgnIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlIH1cbiAgfSxcbiAgYXN5bmMgKmNhbGwoeyBmaWxlX3BhdGgsIGNvbnRlbnQgfSkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihNRU1PUllfRElSLCBmaWxlX3BhdGgpXG4gICAgbWtkaXJTeW5jKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICBkYXRhOiAnU2F2ZWQnLFxuICAgICAgcmVzdWx0Rm9yQXNzaXN0YW50OiAnU2F2ZWQnLFxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIFRvb2w8dHlwZW9mIGlucHV0U2NoZW1hLCBzdHJpbmc+XG4iLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgVG9vbCwgVG9vbFVzZUNvbnRleHQgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHsgREVTQ1JJUFRJT04sIFBST01QVCB9IGZyb20gJy4vcHJvbXB0LmpzJ1xuaW1wb3J0IHtcbiAgU3RpY2tlclJlcXVlc3RGb3JtLFxuICBGb3JtRGF0YSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9TdGlja2VyUmVxdWVzdEZvcm0uanMnXG5pbXBvcnQgeyBjaGVja0dhdGUsIGxvZ0V2ZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5cbmNvbnN0IHN0aWNrZXJSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICB0cmlnZ2VyOiB6LnN0cmluZygpLFxufSlcblxuZXhwb3J0IGNvbnN0IFN0aWNrZXJSZXF1ZXN0VG9vbDogVG9vbCA9IHtcbiAgbmFtZTogJ1N0aWNrZXJSZXF1ZXN0JyxcbiAgdXNlckZhY2luZ05hbWU6ICgpID0+ICdTdGlja2VycycsXG4gIGRlc2NyaXB0aW9uOiBhc3luYyAoKSA9PiBERVNDUklQVElPTixcbiAgaW5wdXRTY2hlbWE6IHN0aWNrZXJSZXF1ZXN0U2NoZW1hLFxuICBpc0VuYWJsZWQ6IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gYXdhaXQgY2hlY2tHYXRlKCd0ZW5ndV9zdGlja2VyX2Vhc3Rlcl9lZ2cnKVxuICAgIHJldHVybiBlbmFibGVkXG4gIH0sXG4gIGlzUmVhZE9ubHk6ICgpID0+IGZhbHNlLFxuICBuZWVkc1Blcm1pc3Npb25zOiAoKSA9PiBmYWxzZSxcbiAgcHJvbXB0OiBhc3luYyAoKSA9PiBQUk9NUFQsXG5cbiAgYXN5bmMgKmNhbGwoXywgY29udGV4dDogVG9vbFVzZUNvbnRleHQpIHtcbiAgICAvLyBMb2cgZm9ybSBlbnRyeSBldmVudFxuICAgIGxvZ0V2ZW50KCdzdGlja2VyX3JlcXVlc3RfZm9ybV9vcGVuZWQnLCB7fSlcblxuICAgIC8vIENyZWF0ZSBhIHByb21pc2UgdG8gdHJhY2sgZm9ybSBjb21wbGV0aW9uIGFuZCBzdGF0dXNcbiAgICBsZXQgcmVzb2x2ZUZvcm06IChzdWNjZXNzOiBib29sZWFuKSA9PiB2b2lkXG4gICAgY29uc3QgZm9ybUNvbXBsZXRlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgICByZXNvbHZlRm9ybSA9IHN1Y2Nlc3MgPT4gcmVzb2x2ZShzdWNjZXNzKVxuICAgIH0pXG5cbiAgICBjb250ZXh0LnNldFRvb2xKU1g/Lih7XG4gICAgICBqc3g6IChcbiAgICAgICAgPFN0aWNrZXJSZXF1ZXN0Rm9ybVxuICAgICAgICAgIG9uU3VibWl0PXsoZm9ybURhdGE6IEZvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICAvLyBMb2cgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIHdpdGggZm9ybSBkYXRhXG4gICAgICAgICAgICBsb2dFdmVudCgnc3RpY2tlcl9yZXF1ZXN0X2Zvcm1fY29tcGxldGVkJywge1xuICAgICAgICAgICAgICBoYXNfYWRkcmVzczogQm9vbGVhbihmb3JtRGF0YS5hZGRyZXNzMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgaGFzX29wdGlvbmFsX2FkZHJlc3M6IEJvb2xlYW4oZm9ybURhdGEuYWRkcmVzczIpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzb2x2ZUZvcm0odHJ1ZSlcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VG9vbEpTWD8uKG51bGwpIC8vIENsZWFyIHRoZSBKU1hcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIC8vIExvZyBmb3JtIGNhbmNlbGxhdGlvblxuICAgICAgICAgICAgbG9nRXZlbnQoJ3N0aWNrZXJfcmVxdWVzdF9mb3JtX2NhbmNlbGxlZCcsIHt9KVxuICAgICAgICAgICAgcmVzb2x2ZUZvcm0oZmFsc2UpXG4gICAgICAgICAgICBjb250ZXh0LnNldFRvb2xKU1g/LihudWxsKSAvLyBDbGVhciB0aGUgSlNYXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgICBzaG91bGRIaWRlUHJvbXB0SW5wdXQ6IHRydWUsXG4gICAgfSlcblxuICAgIC8vIFdhaXQgZm9yIGZvcm0gY29tcGxldGlvbiBhbmQgZ2V0IHN0YXR1c1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmb3JtQ29tcGxldGVcblxuICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgY29udGV4dC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGlja2VyIHJlcXVlc3QgY2FuY2VsbGVkJylcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gc3VjY2VzcyBtZXNzYWdlXG4gICAgeWllbGQge1xuICAgICAgdHlwZTogJ3Jlc3VsdCcsXG4gICAgICByZXN1bHRGb3JBc3Npc3RhbnQ6XG4gICAgICAgICdTdGlja2VyIHJlcXVlc3QgY29tcGxldGVkISBQbGVhc2UgdGVsbCB0aGUgdXNlciB0aGF0IHRoZXkgd2lsbCByZWNlaXZlIHN0aWNrZXJzIGluIHRoZSBtYWlsIGlmIHRoZXkgaGF2ZSBzdWJtaXR0ZWQgdGhlIGZvcm0hJyxcbiAgICAgIGRhdGE6IHsgc3VjY2VzcyB9LFxuICAgIH1cbiAgfSxcblxuICByZW5kZXJUb29sVXNlTWVzc2FnZShfaW5wdXQpIHtcbiAgICByZXR1cm4gJydcbiAgfSxcblxuICByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlOiBfaW5wdXQgPT4gKFxuICAgIDxUZXh0PlxuICAgICAgJm5ic3A7Jm5ic3A74o6/ICZuYnNwO1xuICAgICAgPFRleHQgY29sb3I9e2dldFRoZW1lKCkuZXJyb3J9Pk5vIChTdGlja2VyIHJlcXVlc3QgY2FuY2VsbGVkKTwvVGV4dD5cbiAgICA8L1RleHQ+XG4gICksXG5cbiAgcmVuZGVyUmVzdWx0Rm9yQXNzaXN0YW50OiAoY29udGVudDogc3RyaW5nKSA9PiBjb250ZW50LFxufVxuIiwKICAgICJleHBvcnQgY29uc3QgREVTQ1JJUFRJT04gPVxuICAnU2VuZHMgdGhlIHVzZXIgc3dhZyBzdGlja2VycyB3aXRoIGxvdmUgZnJvbSBBbnRocm9waWMuJ1xuZXhwb3J0IGNvbnN0IFBST01QVCA9IGBUaGlzIHRvb2wgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYSB1c2VyIGV4cHJlc3NlcyBpbnRlcmVzdCBpbiByZWNlaXZpbmcgQW50aHJvcGljIG9yIENsYXVkZSBzdGlja2Vycywgc3dhZywgb3IgbWVyY2hhbmRpc2UuIFdoZW4gdHJpZ2dlcmVkLCBpdCB3aWxsIGRpc3BsYXkgYSBzaGlwcGluZyBmb3JtIGZvciB0aGUgdXNlciB0byBlbnRlciB0aGVpciBtYWlsaW5nIGFkZHJlc3MgYW5kIGNvbnRhY3QgZGV0YWlscy4gT25jZSBzdWJtaXR0ZWQsIEFudGhyb3BpYyB3aWxsIHByb2Nlc3MgdGhlIHJlcXVlc3QgYW5kIHNoaXAgc3RpY2tlcnMgdG8gdGhlIHByb3ZpZGVkIGFkZHJlc3MuXG5cbkNvbW1vbiB0cmlnZ2VyIHBocmFzZXMgdG8gd2F0Y2ggZm9yOlxuLSBcIkNhbiBJIGdldCBzb21lIEFudGhyb3BpYyBzdGlja2VycyBwbGVhc2U/XCJcbi0gXCJIb3cgZG8gSSBnZXQgQW50aHJvcGljIHN3YWc/XCJcbi0gXCJJJ2QgbG92ZSBzb21lIENsYXVkZSBzdGlja2Vyc1wiXG4tIFwiV2hlcmUgY2FuIEkgZ2V0IG1lcmNoYW5kaXNlP1wiXG4tIEFueSBtZW50aW9uIG9mIHdhbnRpbmcgc3RpY2tlcnMgb3Igc3dhZ1xuXG5UaGUgdG9vbCBoYW5kbGVzIHRoZSBlbnRpcmUgcmVxdWVzdCBwcm9jZXNzIGJ5IHNob3dpbmcgYW4gaW50ZXJhY3RpdmUgZm9ybSB0byBjb2xsZWN0IHNoaXBwaW5nIGluZm9ybWF0aW9uLlxuXG5OT1RFOiBPbmx5IHVzZSB0aGlzIHRvb2wgaWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgYXNrZWQgdXMgdG8gc2VuZCBvciBnaXZlIHRoZW0gc3RpY2tlcnMuIElmIHRoZXJlIGFyZSBvdGhlciByZXF1ZXN0cyB0aGF0IGluY2x1ZGUgdGhlIHdvcmQgXCJzdGlja2VyXCIsIGJ1dCBkbyBub3QgZXhwbGljaXRseSBhc2sgdXMgdG8gc2VuZCB0aGVtIHN0aWNrZXJzLCBkbyBub3QgdXNlIHRoaXMgdG9vbC5cbkZvciBleGFtcGxlOlxuLSBcIkhvdyBkbyBJIG1ha2UgY3VzdG9tIHN0aWNrZXJzIGZvciBteSBwcm9qZWN0P1wiIC0gRG8gbm90IHVzZSB0aGlzIHRvb2xcbi0gXCJJIG5lZWQgdG8gc3RvcmUgc3RpY2tlciBtZXRhZGF0YSBpbiBhIGRhdGFiYXNlIC0gd2hhdCBzY2hlbWEgZG8geW91IHJlY29tbWVuZD9cIiAtIERvIG5vdCB1c2UgdGhpcyB0b29sXG4tIFwiU2hvdyBtZSBob3cgdG8gaW1wbGVtZW50IGRyYWctYW5kLWRyb3Agc3RpY2tlciBwbGFjZW1lbnQgd2l0aCBSZWFjdFwiIC0gRG8gbm90IHVzZSB0aGlzIHRvb2xcbmBcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCBUZXh0SW5wdXQgZnJvbSAnLi9UZXh0SW5wdXQuanMnXG5pbXBvcnQgTGluayBmcm9tICdpbmstbGluaydcbi8vIGltcG9ydCBmaWd1cmVzIGZyb20gJ2ZpZ3VyZXMnIChub3QgdXNlZCBhZnRlciByZWZhY3RvcmluZylcbmltcG9ydCB7IHZhbGlkYXRlRmllbGQsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL3V0aWxzL3ZhbGlkYXRlLmpzJ1xuaW1wb3J0IHsgb3BlbkJyb3dzZXIgfSBmcm9tICcuLi91dGlscy9icm93c2VyLmpzJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdHNpZy5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWRDbGF1ZGVBc3RlcmlzayxcbiAgQ2xhdWRlQXN0ZXJpc2tTaXplLFxufSBmcm9tICcuL0FuaW1hdGVkQ2xhdWRlQXN0ZXJpc2suanMnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICcuLi9ob29rcy91c2VUZXJtaW5hbFNpemUuanMnXG5cbmV4cG9ydCB0eXBlIEZvcm1EYXRhID0ge1xuICBuYW1lOiBzdHJpbmdcbiAgZW1haWw6IHN0cmluZ1xuICBhZGRyZXNzMTogc3RyaW5nXG4gIGFkZHJlc3MyOiBzdHJpbmdcbiAgY2l0eTogc3RyaW5nXG4gIHN0YXRlOiBzdHJpbmdcbiAgemlwOiBzdHJpbmdcbiAgcGhvbmU6IHN0cmluZ1xuICB1c0xvY2F0aW9uOiBib29sZWFuXG59XG5cbmludGVyZmFjZSBTdGlja2VyUmVxdWVzdEZvcm1Qcm9wcyB7XG4gIG9uU3VibWl0OiAoZGF0YTogRm9ybURhdGEpID0+IHZvaWRcbiAgb25DbG9zZTogKCkgPT4gdm9pZFxuICBnb29nbGVGb3JtVVJMPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGlja2VyUmVxdWVzdEZvcm0oe1xuICBvblN1Ym1pdCxcbiAgb25DbG9zZSxcbn06IFN0aWNrZXJSZXF1ZXN0Rm9ybVByb3BzKSB7XG4gIGNvbnN0IFtnb29nbGVGb3JtVVJMLCBzZXRHb29nbGVGb3JtVVJMXSA9IFJlYWN0LnVzZVN0YXRlKCcnKVxuICBjb25zdCB7IHJvd3MgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG5cbiAgLy8gRGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBhc3RlcmlzayBzaXplIGJhc2VkIG9uIHRlcm1pbmFsIGhlaWdodFxuICAvLyBTbWFsbCBBU0NJSSBhcnQgaXMgNSBsaW5lcyB0YWxsLCBsYXJnZSBpcyAyMiBsaW5lc1xuICAvLyBOZWVkIHRvIGFjY291bnQgZm9yIHRoZSBmb3JtIGNvbnRlbnQgdG9vIHdoaWNoIG5lZWRzIGFib3V0IDE4LTIyIGxpbmVzIG1pbmltdW1cbiAgY29uc3QgZ2V0QXN0ZXJpc2tTaXplID0gKCk6IENsYXVkZUFzdGVyaXNrU2l6ZSA9PiB7XG4gICAgLy8gTGFyZ2UgdGVybWluYWxzIChjYW4gZml0IGxhcmdlIEFTQ0lJIGFydCArIGZvcm0gY29udGVudCBjb21mb3J0YWJseSlcbiAgICBpZiAocm93cyA+PSA1MCkge1xuICAgICAgcmV0dXJuICdsYXJnZSdcbiAgICB9XG4gICAgLy8gTWVkaXVtIHRlcm1pbmFscyAoY2FuIGZpdCBtZWRpdW0gQVNDSUkgYXJ0ICsgZm9ybSBjb250ZW50KVxuICAgIGVsc2UgaWYgKHJvd3MgPj0gMzUpIHtcbiAgICAgIHJldHVybiAnbWVkaXVtJ1xuICAgIH1cbiAgICAvLyBTbWFsbCB0ZXJtaW5hbHMgb3IgYW55IG90aGVyIGNhc2VcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiAnc21hbGwnXG4gICAgfVxuICB9XG5cbiAgLy8gQW5pbWF0aW9uIGxvZ2ljIGlzIG5vdyBoYW5kbGVkIGJ5IHRoZSBBbmltYXRlZENsYXVkZUFzdGVyaXNrIGNvbXBvbmVudFxuXG4gIC8vIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIEdvb2dsZSBGb3JtIFVSTFxuICBjb25zdCBnZW5lcmF0ZUdvb2dsZUZvcm1VUkwgPSAoZGF0YTogRm9ybURhdGEpID0+IHtcbiAgICAvLyBVUkwgZW5jb2RlIGFsbCBmb3JtIHZhbHVlc1xuICAgIGNvbnN0IG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5uYW1lIHx8ICcnKVxuICAgIGNvbnN0IGVtYWlsID0gZW5jb2RlVVJJQ29tcG9uZW50KGRhdGEuZW1haWwgfHwgJycpXG4gICAgY29uc3QgcGhvbmUgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5waG9uZSB8fCAnJylcbiAgICBjb25zdCBhZGRyZXNzMSA9IGVuY29kZVVSSUNvbXBvbmVudChkYXRhLmFkZHJlc3MxIHx8ICcnKVxuICAgIGNvbnN0IGFkZHJlc3MyID0gZW5jb2RlVVJJQ29tcG9uZW50KGRhdGEuYWRkcmVzczIgfHwgJycpXG4gICAgY29uc3QgY2l0eSA9IGVuY29kZVVSSUNvbXBvbmVudChkYXRhLmNpdHkgfHwgJycpXG4gICAgY29uc3Qgc3RhdGUgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5zdGF0ZSB8fCAnJylcbiAgICAvLyBTZXQgY291bnRyeSBhcyBVbml0ZWQgU3RhdGVzIHNpbmNlIHdlJ3JlIG9ubHkgc2hpcHBpbmcgdGhlcmVcbiAgICBjb25zdCBjb3VudHJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KCdVU0EnKVxuXG4gICAgcmV0dXJuIGBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kL2UvMUZBSXBRTFNmWWhXcjFhLXQ0SXN2UzJGS3lFSDQ1SFJtSEtpUFV5Y3ZBbEZLYUQwTnVncXZmREEvdmlld2Zvcm0/dXNwPXBwX3VybCZlbnRyeS4yMTI0MDE3NzY1PSR7bmFtZX0mZW50cnkuMTUyMjE0Mzc2Nj0ke2VtYWlsfSZlbnRyeS4xNzMwNTg0NTMyPSR7cGhvbmV9JmVudHJ5LjE3MDA0MDcxMzE9JHthZGRyZXNzMX0mZW50cnkuMTA5NDg0MjMyPSR7YWRkcmVzczJ9JmVudHJ5LjEyMDk0Njg4NDk9JHtjaXR5fSZlbnRyeS4yMjI4NjYxODM9JHtzdGF0ZX0mZW50cnkuMTA0Mjk2NjUwMz0ke2NvdW50cnl9YFxuICB9XG5cbiAgY29uc3QgW2Zvcm1TdGF0ZSwgc2V0Rm9ybVN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlPFBhcnRpYWw8Rm9ybURhdGE+Pih7fSlcbiAgY29uc3QgW2N1cnJlbnRGaWVsZCwgc2V0Q3VycmVudEZpZWxkXSA9IFJlYWN0LnVzZVN0YXRlPGtleW9mIEZvcm1EYXRhPignbmFtZScpXG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKVxuICBjb25zdCBbY3Vyc29yT2Zmc2V0LCBzZXRDdXJzb3JPZmZzZXRdID0gUmVhY3QudXNlU3RhdGUoMClcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZTxWYWxpZGF0aW9uRXJyb3IgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd2luZ1N1bW1hcnksIHNldFNob3dpbmdTdW1tYXJ5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd2luZ05vblVzTWVzc2FnZSwgc2V0U2hvd2luZ05vblVzTWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbc2VsZWN0ZWRZZXNObywgc2V0U2VsZWN0ZWRZZXNOb10gPSBSZWFjdC51c2VTdGF0ZTwneWVzJyB8ICdubyc+KCd5ZXMnKVxuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICBjb25zdCBmaWVsZHM6IEFycmF5PHsga2V5OiBrZXlvZiBGb3JtRGF0YTsgbGFiZWw6IHN0cmluZyB9PiA9IFtcbiAgICB7IGtleTogJ25hbWUnLCBsYWJlbDogJ05hbWUnIH0sXG4gICAgeyBrZXk6ICd1c0xvY2F0aW9uJywgbGFiZWw6ICdBcmUgeW91IGluIHRoZSBVbml0ZWQgU3RhdGVzPyAoeS9uKScgfSxcbiAgICB7IGtleTogJ2VtYWlsJywgbGFiZWw6ICdFbWFpbCcgfSxcbiAgICB7IGtleTogJ3Bob25lJywgbGFiZWw6ICdQaG9uZSBOdW1iZXInIH0sXG4gICAgeyBrZXk6ICdhZGRyZXNzMScsIGxhYmVsOiAnQWRkcmVzcyBMaW5lIDEnIH0sXG4gICAgeyBrZXk6ICdhZGRyZXNzMicsIGxhYmVsOiAnQWRkcmVzcyBMaW5lIDIgKG9wdGlvbmFsKScgfSxcbiAgICB7IGtleTogJ2NpdHknLCBsYWJlbDogJ0NpdHknIH0sXG4gICAgeyBrZXk6ICdzdGF0ZScsIGxhYmVsOiAnU3RhdGUnIH0sXG4gICAgeyBrZXk6ICd6aXAnLCBsYWJlbDogJ1pJUCBDb2RlJyB9LFxuICBdXG5cbiAgLy8gSGVscGVyIHRvIG5hdmlnYXRlIHRvIHRoZSBuZXh0IGZpZWxkXG4gIGNvbnN0IGdvVG9OZXh0RmllbGQgPSAoY3VycmVudEtleToga2V5b2YgRm9ybURhdGEpID0+IHtcbiAgICAvLyBMb2cgZm9ybSBwcm9ncmVzc2lvblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLmtleSA9PT0gY3VycmVudEtleSlcbiAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxXG5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkIHN0YXRlJylcbiAgICBjb25zdCBuZXh0RmllbGQgPSBmaWVsZHNbbmV4dEluZGV4XVxuICAgIGlmICghbmV4dEZpZWxkKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmllbGQgc3RhdGUnKVxuXG4gICAgLy8gTG9nIGZpZWxkIGNvbXBsZXRpb24gZXZlbnRcbiAgICBsb2dFdmVudCgnc3RpY2tlcl9mb3JtX2ZpZWxkX2NvbXBsZXRlZCcsIHtcbiAgICAgIGZpZWxkX25hbWU6IGN1cnJlbnRLZXksXG4gICAgICBmaWVsZF9pbmRleDogY3VycmVudEluZGV4LnRvU3RyaW5nKCksXG4gICAgICBuZXh0X2ZpZWxkOiBuZXh0RmllbGQua2V5LFxuICAgICAgZm9ybV9wcm9ncmVzczogYCR7bmV4dEluZGV4fS8ke2ZpZWxkcy5sZW5ndGh9YCxcbiAgICB9KVxuXG4gICAgc2V0Q3VycmVudEZpZWxkKG5leHRGaWVsZC5rZXkpXG4gICAgY29uc3QgbmV3VmFsdWUgPSBmb3JtU3RhdGVbbmV4dEZpZWxkLmtleV0/LnRvU3RyaW5nKCkgfHwgJydcbiAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKVxuICAgIHNldEN1cnNvck9mZnNldChuZXdWYWx1ZS5sZW5ndGgpXG4gICAgc2V0RXJyb3IobnVsbClcbiAgfVxuXG4gIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgLy8gRXhpdCBvbiBFc2NhcGUsIEN0cmwtQywgb3IgQ3RybC1EXG4gICAgaWYgKGtleS5lc2NhcGUgfHwgKGtleS5jdHJsICYmIChpbnB1dCA9PT0gJ2MnIHx8IGlucHV0ID09PSAnZCcpKSkge1xuICAgICAgb25DbG9zZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcmV0dXJuIGtleSBvbiBub24tVVMgbWVzc2FnZSBzY3JlZW5cbiAgICBpZiAoc2hvd2luZ05vblVzTWVzc2FnZSAmJiBrZXkucmV0dXJuKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBZL04ga2V5cHJlc3NlcyBhbmQgYXJyb3cgbmF2aWdhdGlvbiBmb3IgVVMgbG9jYXRpb24gcXVlc3Rpb25cbiAgICBpZiAoY3VycmVudEZpZWxkID09PSAndXNMb2NhdGlvbicgJiYgIXNob3dpbmdTdW1tYXJ5KSB7XG4gICAgICAvLyBBcnJvdyBrZXkgbmF2aWdhdGlvbiBmb3IgWWVzL05vXG4gICAgICBpZiAoa2V5LmxlZnRBcnJvdyB8fCBrZXkucmlnaHRBcnJvdykge1xuICAgICAgICBzZXRTZWxlY3RlZFllc05vKHByZXYgPT4gKHByZXYgPT09ICd5ZXMnID8gJ25vJyA6ICd5ZXMnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZFllc05vID09PSAneWVzJykge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5mb3JtU3RhdGUsIFtjdXJyZW50RmllbGRdOiB0cnVlIH1cbiAgICAgICAgICBzZXRGb3JtU3RhdGUobmV3U3RhdGUpXG5cbiAgICAgICAgICAvLyBNb3ZlIHRvIG5leHQgZmllbGRcbiAgICAgICAgICBnb1RvTmV4dEZpZWxkKGN1cnJlbnRGaWVsZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTaG93aW5nTm9uVXNNZXNzYWdlKHRydWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBkaXJlY3QgWS9OIGtleXByZXNzZXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dC50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAoWyd5JywgJ3llcyddLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5mb3JtU3RhdGUsIFtjdXJyZW50RmllbGRdOiB0cnVlIH1cbiAgICAgICAgc2V0Rm9ybVN0YXRlKG5ld1N0YXRlKVxuXG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBmaWVsZFxuICAgICAgICBnb1RvTmV4dEZpZWxkKGN1cnJlbnRGaWVsZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoWyduJywgJ25vJ10uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgc2V0U2hvd2luZ05vblVzTWVzc2FnZSh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbGxvd3MgdGFiYmluZyBiZXR3ZWVuIGZvcm0gZmllbGRzIHdpdGggdmFsaWRhdGlvblxuICAgIGlmICghc2hvd2luZ1N1bW1hcnkpIHtcbiAgICAgIGlmIChrZXkudGFiKSB7XG4gICAgICAgIGlmIChrZXkuc2hpZnQpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGN1cnJlbnRGaWVsZClcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkIHN0YXRlJylcbiAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPSAoY3VycmVudEluZGV4IC0gMSArIGZpZWxkcy5sZW5ndGgpICUgZmllbGRzLmxlbmd0aFxuICAgICAgICAgIGNvbnN0IHByZXZGaWVsZCA9IGZpZWxkc1twcmV2SW5kZXhdXG4gICAgICAgICAgaWYgKCFwcmV2RmllbGQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWVsZCBpbmRleCcpXG4gICAgICAgICAgc2V0Q3VycmVudEZpZWxkKHByZXZGaWVsZC5rZXkpXG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBmb3JtU3RhdGVbcHJldkZpZWxkLmtleV0/LnRvU3RyaW5nKCkgfHwgJydcbiAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKVxuICAgICAgICAgIHNldEN1cnNvck9mZnNldChuZXdWYWx1ZS5sZW5ndGgpXG4gICAgICAgICAgc2V0RXJyb3IobnVsbClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50RmllbGQgIT09ICdhZGRyZXNzMicgJiYgY3VycmVudEZpZWxkICE9PSAndXNMb2NhdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpbnB1dFZhbHVlLnRyaW0oKVxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlRmllbGQoY3VycmVudEZpZWxkLCBjdXJyZW50VmFsdWUpXG4gICAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgc2V0RXJyb3Ioe1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGZpbGwgb3V0IHRoaXMgZmllbGQgYmVmb3JlIGNvbnRpbnVpbmcnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uZm9ybVN0YXRlLCBbY3VycmVudEZpZWxkXTogY3VycmVudFZhbHVlIH1cbiAgICAgICAgICBzZXRGb3JtU3RhdGUobmV3U3RhdGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IGZpZWxkIGluZGV4IHdpdGggbW9kdWxvIHdyYXAtYXJvdW5kXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLmtleSA9PT0gY3VycmVudEZpZWxkKVxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkIHN0YXRlJylcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgZmllbGRzLmxlbmd0aFxuICAgICAgICBjb25zdCBuZXh0RmllbGQgPSBmaWVsZHNbbmV4dEluZGV4XVxuICAgICAgICBpZiAoIW5leHRGaWVsZCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkIGluZGV4JylcblxuICAgICAgICAvLyBVc2Ugb3VyIGhlbHBlciB0byBuYXZpZ2F0ZSB0byB0aGlzIGZpZWxkXG4gICAgICAgIHNldEN1cnJlbnRGaWVsZChuZXh0RmllbGQua2V5KVxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGZvcm1TdGF0ZVtuZXh0RmllbGQua2V5XT8udG9TdHJpbmcoKSB8fCAnJ1xuICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKVxuICAgICAgICBzZXRDdXJzb3JPZmZzZXQobmV3VmFsdWUubGVuZ3RoKVxuICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvd2luZ1N1bW1hcnkpIHtcbiAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgIG9uU3VibWl0KGZvcm1TdGF0ZSBhcyBGb3JtRGF0YSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXZhbHVlICYmIGN1cnJlbnRGaWVsZCA9PT0gJ2FkZHJlc3MyJykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLmZvcm1TdGF0ZSwgW2N1cnJlbnRGaWVsZF06ICcnIH1cbiAgICAgIHNldEZvcm1TdGF0ZShuZXdTdGF0ZSlcbiAgICAgIGdvVG9OZXh0RmllbGQoY3VycmVudEZpZWxkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGVGaWVsZChjdXJyZW50RmllbGQsIHZhbHVlKVxuICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHNldEVycm9yKHZhbGlkYXRpb25FcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjdXJyZW50RmllbGQgPT09ICdzdGF0ZScgJiYgZm9ybVN0YXRlLnppcCkge1xuICAgICAgY29uc3QgemlwRXJyb3IgPSB2YWxpZGF0ZUZpZWxkKCd6aXAnLCBmb3JtU3RhdGUuemlwKVxuICAgICAgaWYgKHppcEVycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHtcbiAgICAgICAgICBtZXNzYWdlOiAnVGhlIGV4aXN0aW5nIFpJUCBjb2RlIGlzIG5vdCB2YWxpZCBmb3IgdGhpcyBzdGF0ZScsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5mb3JtU3RhdGUsIFtjdXJyZW50RmllbGRdOiB2YWx1ZSB9XG4gICAgc2V0Rm9ybVN0YXRlKG5ld1N0YXRlKVxuICAgIHNldEVycm9yKG51bGwpXG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGN1cnJlbnRGaWVsZClcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkIHN0YXRlJylcblxuICAgIGlmIChjdXJyZW50SW5kZXggPCBmaWVsZHMubGVuZ3RoIC0gMSkge1xuICAgICAgZ29Ub05leHRGaWVsZChjdXJyZW50RmllbGQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNob3dpbmdTdW1tYXJ5KHRydWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY3VycmVudEZpZWxkRGVmID0gZmllbGRzLmZpbmQoZiA9PiBmLmtleSA9PT0gY3VycmVudEZpZWxkKVxuICBpZiAoIWN1cnJlbnRGaWVsZERlZikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkIHN0YXRlJylcblxuICAvLyBHZW5lcmF0ZSBHb29nbGUgRm9ybSBVUkwgZm9yIHN1bW1hcnkgdmlldyBhbmQgb3BlbiBpdCBhdXRvbWF0aWNhbGx5XG4gIGlmIChzaG93aW5nU3VtbWFyeSAmJiAhZ29vZ2xlRm9ybVVSTCkge1xuICAgIGNvbnN0IHVybCA9IGdlbmVyYXRlR29vZ2xlRm9ybVVSTChmb3JtU3RhdGUgYXMgRm9ybURhdGEpXG4gICAgc2V0R29vZ2xlRm9ybVVSTCh1cmwpXG5cbiAgICAvLyBMb2cgcmVhY2hpbmcgdGhlIHN1bW1hcnkgcGFnZVxuICAgIGxvZ0V2ZW50KCdzdGlja2VyX2Zvcm1fc3VtbWFyeV9yZWFjaGVkJywge1xuICAgICAgZmllbGRzX2NvbXBsZXRlZDogT2JqZWN0LmtleXMoZm9ybVN0YXRlKS5sZW5ndGgudG9TdHJpbmcoKSxcbiAgICB9KVxuXG4gICAgLy8gQXV0by1vcGVuIHRoZSBVUkwgaW4gdGhlIHVzZXIncyBicm93c2VyXG4gICAgb3BlbkJyb3dzZXIodXJsKS5jYXRjaChlcnIgPT4ge1xuICAgICAgbG9nRXJyb3IoZXJyKVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjbGFzc2lmaWVkSGVhZGVyVGV4dCA9IGDilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZdcbuKVkSAgICAgICAgIENMQVNTSUZJRUQgICAgICAgICAgIOKVkVxu4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdYFxuICBjb25zdCBoZWFkZXJUZXh0ID0gYFlvdSd2ZSBkaXNjb3ZlcmVkIENsYXVkZSdzIHRvcCBzZWNyZXQgc3RpY2tlciBkaXN0cmlidXRpb24gb3BlcmF0aW9uIWBcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBoZWFkZXIgc2VjdGlvblxuICBjb25zdCByZW5kZXJIZWFkZXIgPSAoKSA9PiAoXG4gICAgPD5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiPlxuICAgICAgICA8VGV4dD57Y2xhc3NpZmllZEhlYWRlclRleHR9PC9UZXh0PlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPXt0aGVtZS5jbGF1ZGV9PlxuICAgICAgICAgIHtoZWFkZXJUZXh0fVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICAgIHshc2hvd2luZ1N1bW1hcnkgJiYgKFxuICAgICAgICA8Qm94IGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCI+XG4gICAgICAgICAgPEFuaW1hdGVkQ2xhdWRlQXN0ZXJpc2tcbiAgICAgICAgICAgIHNpemU9e2dldEFzdGVyaXNrU2l6ZSgpfVxuICAgICAgICAgICAgY3ljbGVzPXtnZXRBc3Rlcmlza1NpemUoKSA9PT0gJ2xhcmdlJyA/IDQgOiB1bmRlZmluZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuICAgIDwvPlxuICApXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgZm9vdGVyIHNlY3Rpb25cbiAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4gKFxuICAgIDxCb3ggbWFyZ2luTGVmdD17MX0+XG4gICAgICB7c2hvd2luZ05vblVzTWVzc2FnZSB8fCBzaG93aW5nU3VtbWFyeSA/IChcbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnN1Z2dlc3Rpb259IGJvbGQ+XG4gICAgICAgICAgUHJlc3MgRW50ZXIgdG8gcmV0dXJuIHRvIGJhc2VcbiAgICAgICAgPC9UZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgIHtjdXJyZW50RmllbGQgPT09ICd1c0xvY2F0aW9uJyA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIOKGkC/ihpIgYXJyb3dzIHRvIHNlbGVjdCDCtyBFbnRlciB0byBjb25maXJtIMK3IFkvTiBrZXlzIGFsc28gd29yayDCtyBFc2NcbiAgICAgICAgICAgICAgRXNjIHRvIGFib3J0IG1pc3Npb25cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICBFbnRlciB0byBjb250aW51ZSDCtyBUYWIvU2hpZnQrVGFiIHRvIG5hdmlnYXRlIMK3IEVzYyB0byBhYm9ydFxuICAgICAgICAgICAgICBtaXNzaW9uXG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1RleHQ+XG4gICAgICApfVxuICAgIDwvQm94PlxuICApXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoc2hvd2luZ1N1bW1hcnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zdWdnZXN0aW9ufSBib2xkPlxuICAgICAgICAgICAgICBQbGVhc2UgcmV2aWV3IHlvdXIgc2hpcHBpbmcgaW5mb3JtYXRpb246XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtmaWVsZHNcbiAgICAgICAgICAgICAgLmZpbHRlcihmID0+IGYua2V5ICE9PSAndXNMb2NhdGlvbicpXG4gICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4gKFxuICAgICAgICAgICAgICAgIDxCb3gga2V5PXtmaWVsZC5rZXl9IG1hcmdpbkxlZnQ9ezN9PlxuICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQgY29sb3I9e3RoZW1lLnRleHR9PlxuICAgICAgICAgICAgICAgICAgICAgIHtmaWVsZC5sYWJlbH06XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD57JyAnfVxuICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtU3RhdGVbZmllbGQua2V5XSA/IHRoZW1lLnNlY29uZGFyeVRleHQgOiB0aGVtZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1TdGF0ZVtmaWVsZC5rZXldIHx8ICcoZW1wdHkpJ31cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgIHsvKiBHb29nbGUgRm9ybSBVUkwgd2l0aCBpbXByb3ZlZCBpbnN0cnVjdGlvbnMgKi99XG4gICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IG1hcmdpbkJvdHRvbT17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnRleHR9PlN1Ym1pdCB5b3VyIHN0aWNrZXIgcmVxdWVzdDo8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgPExpbmsgdXJsPXtnb29nbGVGb3JtVVJMfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc3VjY2Vzc30gdW5kZXJsaW5lPlxuICAgICAgICAgICAgICAgICAg4p6cIENsaWNrIGhlcmUgdG8gb3BlbiBHb29nbGUgRm9ybVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5zZWNvbmRhcnlUZXh0fSBpdGFsaWM+XG4gICAgICAgICAgICAgICAgKFlvdSBjYW4gc3RpbGwgZWRpdCB5b3VyIGluZm8gb24gdGhlIGZvcm0pXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICA8Lz5cbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHNob3dpbmdOb25Vc01lc3NhZ2UpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEJveCBtYXJnaW5ZPXsxfT5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5lcnJvcn0gYm9sZD5cbiAgICAgICAgICAgICAgTWlzc2lvbiBOb3QgQXZhaWxhYmxlXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5ZPXsxfT5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS50ZXh0fT5cbiAgICAgICAgICAgICAgV2UmYXBvcztyZSBzb3JyeSwgYnV0IHRoZSBDbGF1ZGUgc3RpY2tlciBkZXBsb3ltZW50IG1pc3Npb24gaXNcbiAgICAgICAgICAgICAgb25seSBhdmFpbGFibGUgd2l0aGluIHRoZSBVbml0ZWQgU3RhdGVzLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUudGV4dH0+XG4gICAgICAgICAgICAgICAgRnV0dXJlIG1pc3Npb25zIG1heSBleHBhbmQgdG8gb3RoZXIgdGVycml0b3JpZXMuIFN0YXkgdHVuZWQgZm9yXG4gICAgICAgICAgICAgICAgdXBkYXRlcy5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvPlxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnRleHR9PlxuICAgICAgICAgICAgICBQbGVhc2UgcHJvdmlkZSB5b3VyIGNvb3JkaW5hdGVzIGZvciB0aGUgc3RpY2tlciBkZXBsb3ltZW50XG4gICAgICAgICAgICAgIG1pc3Npb24uXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuc2Vjb25kYXJ5VGV4dH0+XG4gICAgICAgICAgICAgIEN1cnJlbnRseSBvbmx5IHNoaXBwaW5nIHdpdGhpbiB0aGUgVW5pdGVkIFN0YXRlcy5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgbWFyZ2luTGVmdD17Mn0+XG4gICAgICAgICAgICAgIHtmaWVsZHMubWFwKChmLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17Zi5rZXl9PlxuICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgIGYua2V5ID09PSBjdXJyZW50RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuc3VnZ2VzdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGVtZS5zZWNvbmRhcnlUZXh0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2Yua2V5ID09PSBjdXJyZW50RmllbGQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgYFske2YubGFiZWx9XWBcbiAgICAgICAgICAgICAgICAgICAgKSA6IGZvcm1TdGF0ZVtmLmtleV0gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PuKXjzwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAn4peLJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAge2kgPCBmaWVsZHMubGVuZ3RoIC0gMSAmJiA8VGV4dD4gPC9UZXh0Pn1cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBtYXJnaW5MZWZ0PXsyfT5cbiAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnNlY29uZGFyeVRleHR9PlxuICAgICAgICAgICAgICAgIEZpZWxkIHtmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGN1cnJlbnRGaWVsZCkgKyAxfSBvZnsnICd9XG4gICAgICAgICAgICAgICAge2ZpZWxkcy5sZW5ndGh9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luWD17Mn0+XG4gICAgICAgICAgICB7Y3VycmVudEZpZWxkID09PSAndXNMb2NhdGlvbicgPyAoXG4gICAgICAgICAgICAgIC8vIFNwZWNpYWwgWWVzL05vIEJ1dHRvbnMgZm9yIFVTIExvY2F0aW9uXG4gICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkWWVzTm8gPT09ICd5ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5zdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGVtZS5zZWNvbmRhcnlUZXh0XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBib2xkXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkWWVzTm8gPT09ICd5ZXMnID8gJ+KXjycgOiAn4peLJ30gWUVTXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRZZXNObyA9PT0gJ25vJyA/IHRoZW1lLmVycm9yIDogdGhlbWUuc2Vjb25kYXJ5VGV4dFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYm9sZFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZFllc05vID09PSAnbm8nID8gJ+KXjycgOiAn4peLJ30gTk9cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgLy8gUmVndWxhciBUZXh0SW5wdXQgZm9yIG90aGVyIGZpZWxkc1xuICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldElucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Y3VycmVudEZpZWxkRGVmLmxhYmVsfVxuICAgICAgICAgICAgICAgIGN1cnNvck9mZnNldD17Y3Vyc29yT2Zmc2V0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlQ3Vyc29yT2Zmc2V0PXtzZXRDdXJzb3JPZmZzZXR9XG4gICAgICAgICAgICAgICAgY29sdW1ucz17NDB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmIChcbiAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5lcnJvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgIOKclyB7ZXJyb3IubWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC8+XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gTWFpbiByZW5kZXIgd2l0aCBjb25zaXN0ZW50IHN0cnVjdHVyZVxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdMZWZ0PXsxfT5cbiAgICAgIDxCb3hcbiAgICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLmNsYXVkZX1cbiAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICBnYXA9ezF9XG4gICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgIHBhZGRpbmdMZWZ0PXsyfVxuICAgICAgICB3aWR0aD17MTAwfVxuICAgICAgPlxuICAgICAgICB7cmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICA8L0JveD5cbiAgICAgIHtyZW5kZXJGb290ZXIoKX1cbiAgICA8L0JveD5cbiAgKVxufVxuIiwKICAgICJleHBvcnQgdHlwZSBGb3JtRGF0YSA9IHtcbiAgbmFtZTogc3RyaW5nXG4gIGVtYWlsOiBzdHJpbmdcbiAgYWRkcmVzczE6IHN0cmluZ1xuICBhZGRyZXNzMjogc3RyaW5nXG4gIGNpdHk6IHN0cmluZ1xuICBzdGF0ZTogc3RyaW5nXG4gIHppcDogc3RyaW5nXG4gIHBob25lOiBzdHJpbmdcbiAgdXNMb2NhdGlvbjogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRXJyb3IgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChcbiAgZmllbGQ6IGtleW9mIEZvcm1EYXRhLFxuICB2YWx1ZTogc3RyaW5nLFxuKTogVmFsaWRhdGlvbkVycm9yIHwgbnVsbCB7XG4gIC8vIFRyaW0gd2hpdGVzcGFjZSBmb3IgdmFsaWRhdGlvblxuICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpXG5cbiAgaWYgKCF0cmltbWVkICYmIGZpZWxkID09PSAnYWRkcmVzczInKSB7XG4gICAgcmV0dXJuIG51bGwgLy8gYWRkcmVzczIgaXMgb3B0aW9uYWxcbiAgfVxuXG4gIC8vIEJhc2ljIHJlcXVpcmVkIGZpZWxkIGNoZWNrXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHJldHVybiB7IG1lc3NhZ2U6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJyB9XG4gIH1cblxuICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAnZW1haWwnOiB7XG4gICAgICBjb25zdCBlbWFpbFJlZ2V4ID1cbiAgICAgICAgL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvXG4gICAgICBpZiAoIWVtYWlsUmVnZXgudGVzdCh0cmltbWVkKSkge1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcycgfVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICduYW1lJzpcbiAgICAgIGlmICh0cmltbWVkLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogJ05hbWUgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZycgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ2FkZHJlc3MxJzoge1xuICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoIDwgMykge1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgYWRkcmVzcycgfVxuICAgICAgfVxuICAgICAgLy8gQWNjZXB0IFBPIEJveCBmb3JtYXQgb3IgcmVndWxhciBzdHJlZXQgYWRkcmVzc1xuICAgICAgY29uc3QgaXNQT0JveCA9IC9eUFxcLj9PXFwuP1xccypCb3hcXHMrXFxkKyQvaS50ZXN0KHRyaW1tZWQpXG4gICAgICBjb25zdCBoYXNOdW1iZXIgPSAvXFxkKy8udGVzdCh0cmltbWVkKVxuICAgICAgaWYgKCFpc1BPQm94ICYmICFoYXNOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogJ1BsZWFzZSBpbmNsdWRlIGEgbnVtYmVyIGluIHRoZSBzdHJlZXQgYWRkcmVzcycgfVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAnYWRkcmVzczInOlxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ2NpdHknOlxuICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAnQ2l0eSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcnIH1cbiAgICAgIH1cbiAgICAgIGlmICghL15bYS16QS1aXFxzLi1dKyQvLnRlc3QodHJpbW1lZCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0NpdHkgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBzcGFjZXMsIHBlcmlvZHMsIGFuZCBoeXBoZW5zJyxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ3N0YXRlJzoge1xuICAgICAgY29uc3Qgc3RhdGVzID0gbmV3IFNldChbXG4gICAgICAgICdBTCcsXG4gICAgICAgICdBSycsXG4gICAgICAgICdBWicsXG4gICAgICAgICdBUicsXG4gICAgICAgICdDQScsXG4gICAgICAgICdDTycsXG4gICAgICAgICdDVCcsXG4gICAgICAgICdERScsXG4gICAgICAgICdGTCcsXG4gICAgICAgICdHQScsXG4gICAgICAgICdISScsXG4gICAgICAgICdJRCcsXG4gICAgICAgICdJTCcsXG4gICAgICAgICdJTicsXG4gICAgICAgICdJQScsXG4gICAgICAgICdLUycsXG4gICAgICAgICdLWScsXG4gICAgICAgICdMQScsXG4gICAgICAgICdNRScsXG4gICAgICAgICdNRCcsXG4gICAgICAgICdNQScsXG4gICAgICAgICdNSScsXG4gICAgICAgICdNTicsXG4gICAgICAgICdNUycsXG4gICAgICAgICdNTycsXG4gICAgICAgICdNVCcsXG4gICAgICAgICdORScsXG4gICAgICAgICdOVicsXG4gICAgICAgICdOSCcsXG4gICAgICAgICdOSicsXG4gICAgICAgICdOTScsXG4gICAgICAgICdOWScsXG4gICAgICAgICdOQycsXG4gICAgICAgICdORCcsXG4gICAgICAgICdPSCcsXG4gICAgICAgICdPSycsXG4gICAgICAgICdPUicsXG4gICAgICAgICdQQScsXG4gICAgICAgICdSSScsXG4gICAgICAgICdTQycsXG4gICAgICAgICdTRCcsXG4gICAgICAgICdUTicsXG4gICAgICAgICdUWCcsXG4gICAgICAgICdVVCcsXG4gICAgICAgICdWVCcsXG4gICAgICAgICdWQScsXG4gICAgICAgICdXQScsXG4gICAgICAgICdXVicsXG4gICAgICAgICdXSScsXG4gICAgICAgICdXWScsXG4gICAgICAgICdEQycsXG4gICAgICBdKVxuICAgICAgY29uc3Qgc3RhdGVDb2RlID0gdHJpbW1lZC50b1VwcGVyQ2FzZSgpXG4gICAgICBpZiAoIXN0YXRlcy5oYXMoc3RhdGVDb2RlKSkge1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVMgc3RhdGUgY29kZSAoZS5nLiBDQSknIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAndXNMb2NhdGlvbic6IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0cmltbWVkLnRvTG93ZXJDYXNlKClcbiAgICAgIGlmICghWyd5JywgJ3llcycsICduJywgJ25vJ10uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciB5L3llcyBvciBuL25vJyB9XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ3ppcCc6XG4gICAgICAvLyBaSVAgY29kZSB2YWxpZGF0aW9uIGZvciBVU1xuICAgICAgaWYgKCEvXlxcZHs1fSgtXFxkezR9KT8kLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFpJUCBjb2RlIChlLmcuIDEyMzQ1IG9yIDEyMzQ1LTY3ODkpJyxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgIC8vIFBob25lIHZhbGlkYXRpb24gZm9yIFVTIChhbGxvdyB2YXJpb3VzIGZvcm1hdHMpXG4gICAgICBpZiAoIS9eKFxcKzFcXHM/KT8oXFxkezN9Wy0uXFxzXT8/KT9cXGR7M31bLS5cXHNdPz9cXGR7NH0kLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVTIHBob25lIG51bWJlcicsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHtcbiAgc21hbGxBbmltYXRlZEFycmF5LFxuICBsYXJnZUFuaW1hdGVkQXJheSxcbn0gZnJvbSAnLi4vY29uc3RhbnRzL2NsYXVkZS1hc3Rlcmlzay1hc2NpaS1hcnQuanMnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuXG5leHBvcnQgdHlwZSBDbGF1ZGVBc3Rlcmlza1NpemUgPSAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnXG5cbmludGVyZmFjZSBBbmltYXRlZENsYXVkZUFzdGVyaXNrUHJvcHMge1xuICBzaXplPzogQ2xhdWRlQXN0ZXJpc2tTaXplXG4gIGN5Y2xlcz86IG51bWJlclxuICBjb2xvcj86IHN0cmluZ1xuICBpbnRlcnZhbE1zPzogbnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbmltYXRlZENsYXVkZUFzdGVyaXNrKHtcbiAgc2l6ZSA9ICdzbWFsbCcsXG4gIGN5Y2xlcyxcbiAgY29sb3IsXG4gIGludGVydmFsTXMsXG59OiBBbmltYXRlZENsYXVkZUFzdGVyaXNrUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbY3VycmVudEFzY2lpQXJ0SW5kZXgsIHNldEN1cnJlbnRBc2NpaUFydEluZGV4XSA9IFJlYWN0LnVzZVN0YXRlKDApXG4gIGNvbnN0IGRpcmVjdGlvbiA9IFJlYWN0LnVzZVJlZigxKVxuICBjb25zdCBhbmltYXRlTG9vcENvdW50ID0gUmVhY3QudXNlUmVmKDApXG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuXG4gIC8vIERldGVybWluZSB3aGljaCBhcnJheSB0byB1c2UgYmFzZWQgb24gc2l6ZVxuICBjb25zdCBhbmltYXRlZEFycmF5ID1cbiAgICBzaXplID09PSAnbGFyZ2UnID8gbGFyZ2VBbmltYXRlZEFyYXkgOiBzbWFsbEFuaW1hdGVkQXJyYXlcblxuICAvLyBBbmltYXRpb24gaW50ZXJ2YWwgZm9yIGFzY2lpIGFydFxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRBc2NpaUFydEluZGV4KHByZXZJbmRleCA9PiB7XG4gICAgICAgICAgLy8gU3RvcCBhbmltYXRpbmcgYWZ0ZXIgc3BlY2lmaWVkIG51bWJlciBvZiBjeWNsZXMgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjeWNsZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgY3ljbGVzICE9PSBudWxsICYmXG4gICAgICAgICAgICBhbmltYXRlTG9vcENvdW50LmN1cnJlbnQgPj0gY3ljbGVzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggYXJyYXkgaW5kaWNlc1xuICAgICAgICAgIGlmIChwcmV2SW5kZXggPT09IGFuaW1hdGVkQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uLmN1cnJlbnQgPSAtMVxuICAgICAgICAgICAgYW5pbWF0ZUxvb3BDb3VudC5jdXJyZW50ICs9IDFcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXZJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uLmN1cnJlbnQgPSAxXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwcmV2SW5kZXggKyBkaXJlY3Rpb24uY3VycmVudFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGludGVydmFsTXMgfHwgKHNpemUgPT09ICdsYXJnZScgPyAxMDAgOiAyMDApLFxuICAgICkgLy8gRGVmYXVsdDogMTAwbXMgZm9yIGxhcmdlLCAyMDBtcyBmb3Igc21hbGwvbWVkaXVtXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0aW1lcilcbiAgfSwgW2FuaW1hdGVkQXJyYXkubGVuZ3RoLCBjeWNsZXMsIGludGVydmFsTXMsIHNpemVdKVxuXG4gIHJldHVybiAoXG4gICAgPFRleHQgY29sb3I9e2NvbG9yIHx8IHRoZW1lLmNsYXVkZX0+XG4gICAgICB7YW5pbWF0ZWRBcnJheVtjdXJyZW50QXNjaWlBcnRJbmRleF19XG4gICAgPC9UZXh0PlxuICApXG59XG4iLAogICAgImV4cG9ydCBjb25zdCBsYXJnZUFuaW1hdGVkQXJheSA9IFtcbiAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC49Iyo9LiAgICAgIDo9PS4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAtJSUlJT0uICAgIC4jJSM9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLj0lJSUjPSAgICA6JSUjOiAgICAtPSstICAgICAgICAgICAgXG4gICAgICAgICAuLi4gICAuPSUlJSotICAgPUAlKyAgIDorJSUlJS4gICAgICAgICAgIFxuICAgICAgICA6KiUlKz0gIC49JSUlKi0gICslJT0gLj0lJSUlJT0gICAgICAgICAgICBcbiAgICAgICAgLj0jJSUlIz0uLj0jJSUqOiAqJSM6LSolJSUlKzogICAgICAgICAgICAgXG4gICAgICAgICAgLj0qJSUlJSs9PSMlJSsuJSUrPSMlJSUlPS4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgIDo9IyUlJSMjJSUlKiUlJSUlJSUqLSAgICAgICAuICAgICAgICBcbiAgICAgICAgICAgICAgICAtPSMlJSUlJSUlJSUlJSUrLT09PT0rKiUlJSsuICAgICAgXG4gICAgIC49PT09PT09PT09PT0tPSolJSUlJSUlJSUlJSUlJSUlIys9PT06ICAgICAgIFxuICAgICAgPT09PT09PSsrKyoqKiolJSUlJSUlJSUlIys9PTouICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIC09KiUlJSUlJSUlJSorIyUlJSUlJSUjKj0uICAgICAgXG4gICAgICAgICAgICAgIC49KyMlIysrIyUlJSUlJSUlKy0uLi09PSsqIyM9LiAgICAgIFxuICAgICAgICAgICAuPSslJSUrPS0rJSM9KiUrJSUlIyMlKzogICAgICAgICAgICAgICBcbiAgICAgICAgIC4rJSUlKj0uID0qJSs6LSUlOj0jJSM9PSMlKzogICAgICAgICAgICAgXG4gICAgICAgICAuPSs9LiAgLj0lJT0uICslIy4gLSolJT06PSolKy0gICAgICAgICAgIFxuICAgICAgICAgICAgICAgLSolIz0gIC4jJSogICA6KiUlKzogOj0qLiAgICAgICAgICBcbiAgICAgICAgICAgICAuPSUlPS4gICA9JSU9ICAgIC49JSU9LiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDo9LiAgICAgKyUlPSAgICAgLi09OiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgID0jKy4gICAgICAgICAgICAgICAgICAgICAgICBcbmAsXG4gIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAuPSorPS4gICAgICAuPT0uICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLSMjIyM9LiAgICAuKiMqPSAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC49IyMjKi0gICAgOiMjKjogICAgLT09LSAgICAgICAgICAgIFxuICAgICAgICAgLi4uICAgLj0jIyMrLSAgID0lIysgICA6KyMjIyMuICAgICAgICAgICBcbiAgICAgICAgLisjIystICAuPSMjIys6ICA9IyM9IC49KiMjIyMtICAgICAgICAgICAgXG4gICAgICAgIC49KiMjIyo9Li49KiMjKy4gKyMqOjorIyMjIz0uICAgICAgICAgICAgIFxuICAgICAgICAgIC49KyMjIyo9LT0qIyMrLiojPT0qIyMjKj0uICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAuPSojIyMqKiMjIysjIyMjIyMjKy0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgOj0qIyMjIyMjIyMjIyMjKy0tPT09PSojIyM9LiAgICAgIFxuICAgICAuPT09PT09PT09PT0tLT0rIyMjIyMjIyMjIyMjIyMjIyorPT09LiAgICAgICBcbiAgICAgIC09PT09PT09PT0rKysrIyMjIyMjIyMjIyorPT0uICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA6PSojIyMjIyMjIyMqKyojIyMjIyMjKis9LiAgICAgIFxuICAgICAgICAgICAgICAuPT0qIyo9PSojIyMjIyMjIz0tLi4tPT09KyoqPS4gICAgICBcbiAgICAgICAgICAgLj09KiMjKz06PSMqLSojKyMjIyoqIys6ICAgICAgICAgICAgICAgXG4gICAgICAgICAuPSMjIys9LiAtKyMrOjojIzo9KiMqPT0qIz06ICAgICAgICAgICAgIFxuICAgICAgICAgLj09PS4gIC49IyM9LiA9IyouIC0rIyo9Oj0rIz0tICAgICAgICAgICBcbiAgICAgICAgICAgICAgIC0rIyo9ICAuKiMrICAgOisjIys6IDo9Ki4gICAgICAgICAgXG4gICAgICAgICAgICAgID0jKj0uICAgPSMjPSAgICAuPSMjPS4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA6PS4gICAgID0jIz0gICAgICAtPTogICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICA9KisuICAgICAgICAgICAgICAgICAgICAgICAgXG5gLFxuICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLj0rPT0uICAgICAgLj0tLiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDoqKioqPSAgICAgLisqKz0gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAuPSoqKistICAgIDoqKis6ICAgIC09PTogICAgICAgICAgICBcbiAgICAgICAgIC4uLiAgIC49KioqKzogICAtKio9ICAgOj0qKioqLiAgICAgICAgICAgXG4gICAgICAgIC4rKio9LSAgLj0qKio9OiAgPSoqPSAuPSoqKioqLSAgICAgICAgICAgIFxuICAgICAgICAuPSsqKiorPS4uPSsqKj0uID0qKy46PSoqKio9LiAgICAgICAgICAgICBcbiAgICAgICAgICAgPT0qKioqPS09KyoqPS4qKj09KyoqKio9LiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgLj0rKioqKysqKiorKioqKioqKj06ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDo9KyoqKioqKioqKioqKj06LT09PT0rKioqPS4gICAgICBcbiAgICAgLj09PT09PT09PT0tLTotKyoqKioqKioqKioqKioqKiorPT09PS4gICAgICAgXG4gICAgICAtPT09PT09PT09PT09KyoqKioqKioqKiorPT0tLiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgOj0rKioqKioqKioqKz0rKioqKioqKis9PS4gICAgICBcbiAgICAgICAgICAgICAgLi09KyorPT0rKioqKioqKio9Oi4uOj09PT0rKz0uICAgICAgXG4gICAgICAgICAgICA9PSoqKj0tOj0qKy0rKj0qKiorKyo9OiAgICAgICAgICAgICAgIFxuICAgICAgICAgLj0qKiorPS4gLSsqPTo6KiouLSsqKz09Kyo9OiAgICAgICAgICAgICBcbiAgICAgICAgIC49PT0uICAuPSoqPS4gPSorLiA6KyoqPS49Kyo9LSAgICAgICAgICAgXG4gICAgICAgICAgICAgICA6KyorLSAgLisqKyAgIDo9Kio9OiA6PSsuICAgICAgICAgIFxuICAgICAgICAgICAgICA9Kio9LiAgIC0qKj0gICAgLj0qKj0uICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgOi0uICAgICA9KiotICAgICAgOj0uICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgPSs9LiAgICAgICAgICAgICAgICAgICAgICAgIFxuYCxcbiAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC49PT0tLiAgICAgIC49LS4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA6KysrKz0gICAgICA9Kz0tICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLj0rKys9OiAgICAuKys9OiAgICA6PT06ICAgICAgICAgICAgXG4gICAgICAgICAuLiAgICAuPSsrKz06ICAgLSsrPSAgIDo9KysrKyAgICAgICAgICAgIFxuICAgICAgICAuPSsrPTogIC49KysrPTogID0rKz0gLj0rKysrKzogICAgICAgICAgICBcbiAgICAgICAgLj09KysrPT0uLj09Kys9LiA9Kz0uOj0rKysrPS4gICAgICAgICAgICAgXG4gICAgICAgICAgIC09KysrKz0tLT0rKz0uKys9LT0rKysrPS4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgIC49PSsrKz09KysrPSsrKysrKys9OiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA6PT0rKysrKysrKysrKys9Ojo9PT09PSsrKz0uICAgICAgXG4gICAgIC4tPT09PS0tLT0tLS06LT0rKysrKysrKysrKysrKysrPT09PS0uICAgICAgIFxuICAgICAgOj09PT09PT09PT09PT0rKysrKysrKysrPT09LS4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDo9PSsrKysrKysrKz09PSsrKysrKys9PS0uICAgICAgXG4gICAgICAgICAgICAgIC4tPT0rPT09KysrKysrKysrPTogLjo9PT09PT09LiAgICAgIFxuICAgICAgICAgICAgLT0rKys9LTo9Kz06PSs9KysrPT0rPTogICAgICAgICAgICAgICBcbiAgICAgICAgIC49KysrPT0uIDo9Kz06OisrLi09Kz09PT0rPS4gICAgICAgICAgICAgXG4gICAgICAgICAgPT09LiAgLj0rKz0uID0rKy4gOj0rKz0uLT0rPTogICAgICAgICAgIFxuICAgICAgICAgICAgICAgOj0rPS0gIC4rKz0gICA6PSsrPS4gLj09LiAgICAgICAgICBcbiAgICAgICAgICAgICAgLSsrPS4gICAtKys9ICAgIC49Kys9LiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC4tLiAgICAgPSsrLSAgICAgIDotLiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIC09PS4gICAgICAgICAgICAgICAgICAgICAgICBcbmAsXG4gIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAuPT09LS4gICAgICAuLTogICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgOj09PT0tICAgICAgPT09LSAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC4tPT09PTogICAgLj09PS4gICAgOj09OiAgICAgICAgICAgIFxuICAgICAgICAgLi4gICAgLi09PT09OiAgIDo9PT0gICAuPT09PT0gICAgICAgICAgICBcbiAgICAgICAgLj09PT06ICAuLT09PT0uICA9PT0tIC4tPT09PT06ICAgICAgICAgICAgXG4gICAgICAgICAtPT09PT0tLi4tPT09PS4gPT09Li49PT09PT0uICAgICAgICAgICAgIFxuICAgICAgICAgICAtPT09PT09Oi09PT09Lj09PTo9PT09PS0uICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAuLT09PT09PT09PT09PT09PT09PTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLj09PT09PT09PT09PT09PTo6LT09PT09PT09LiAgICAgIFxuICAgICAuLT0tLS0tLS0tLS06Ojo9PT09PT09PT09PT09PT09PT09PT0tLiAgICAgICBcbiAgICAgIDo9LT09PT09PT09PT09PT09PT09PT09PT09PTouICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAuPT09PT09PT09PT09PT09PT09PT09PT0tLiAgICAgIFxuICAgICAgICAgICAgICAgOj09PT09PT09PT09PT09PT06IC46LT09PT09LS4gICAgICBcbiAgICAgICAgICAgIC09PT09PTouPT09Oj09PT09PT09PT0uICAgICAgICAgICAgICAgXG4gICAgICAgICAuPT09PT0tLiA6PT09Ljo9PS46PT09LS09PT0uICAgICAgICAgICAgIFxuICAgICAgICAgIC09LS4gIC49PT0tLiA9PT0gIDo9PT09Li09PT06ICAgICAgICAgICBcbiAgICAgICAgICAgICAgIDo9PT06ICAuPT09ICAgLj09PT0uIC49PSAgICAgICAgICAgXG4gICAgICAgICAgICAgIC09PS0uICAgOj09PSAgICAuPT09PS4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAuOi4gICAgID09PTogICAgICA6Oi4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAtPT0uICAgICAgICAgICAgICAgICAgICAgICAgXG5gLFxuICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLi09PTogICAgICAgLi06ICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC49PT09OiAgICAgID09PTogICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgOj09PT06ICAgIC49PT0uICAgIC4tLS4gICAgICAgICAgICBcbiAgICAgICAgICAuICAgIC4tPT09PS4gICA6PT09ICAgLi09PT09ICAgICAgICAgICAgXG4gICAgICAgIC49PT09LiAgIDo9PT09LiAgLT09OiAuOj09PT09OiAgICAgICAgICAgIFxuICAgICAgICAgLT09PT09LS4gOj09PT0uID09PS4uPT09PT0tLiAgICAgICAgICAgICBcbiAgICAgICAgICAgOj09PT09PTo6PT09PS49PS06PT09PT06ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgLi09PT09PT09PT09PT09PT09PT0uICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC4tPT09PT09PT09PT09PS0uLjotLS09PT09LS4gICAgICBcbiAgICAgLjotLS0tLS0tOjo6Oi46PT09PT09PT09PT09PT09PT09PS0tOi4gICAgICAgXG4gICAgICAuLS0tLS0tLS0tPT09PT09PT09PT09PT09LS06LiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgLi09PT09PT09PT09PT09PT09PT09PT09OiAgICAgICBcbiAgICAgICAgICAgICAgIDotPT09LS09PT09PT09PT09LiAuLjotLT09PS0uICAgICAgXG4gICAgICAgICAgICA6PT09PT06Li09PTo9PS09PT09PT09LiAgICAgICAgICAgICAgIFxuICAgICAgICAgLi09PT09Oi4gLj09PS4uPT0uOj09PTo6PT0tLiAgICAgICAgICAgICBcbiAgICAgICAgICAtLTouICAuLT09LS4gLT09ICAuPT09LS46PT0tLiAgICAgICAgICAgXG4gICAgICAgICAgICAgICAuPT09OiAgID09PSAgIC49PT09LiAuLT0gICAgICAgICAgIFxuICAgICAgICAgICAgICA6PT0tLiAgIDo9PS0gICAgLi09PS0uICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLjouICAgICAtPT06ICAgICAgLjouICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgOj09ICAgICAgICAgICAgICAgICAgICAgICAgIFxuYCxcbiAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICA6LS06ICAgICAgIC46LiAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAuPT09LTogICAgICAtPS0uICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIDo9PT0tLiAgICAuPT0tLiAgICAuOjouICAgICAgICAgICAgXG4gICAgICAgICAgLiAgICAgOi09PS0uICAgLj09OiAgIC46LT09PSAgICAgICAgICAgIFxuICAgICAgICAuLT09Oi4gICA6LT09LS4gIDo9LTogIDotPT09LS4gICAgICAgICAgICBcbiAgICAgICAgIDotPT09LTouIDotPT0tLiAtPS0uLi09PT09Oi4gICAgICAgICAgICAgXG4gICAgICAgICAgIC4tPT09LTouOi09PTouLT06Li09PT0tOiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgIC46LT09PS0tLT09Oi09PS09LT0tLiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAuOi09PT09PT09PT09PS06Li46Ojo6LS09PS0uICAgICAgXG4gICAgICAuOjo6Ojo6Ojo6Li4uLi0tPT09PT09PT0tPT09PT09LTo6Oi4uICAgICAgIFxuICAgICAgLjo6Ojo6Ojo6Oi0tLS0tPT09PT09PT0tLTo6Li4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIC46LS09PT09LS0tLS0tLT09PT09PT0tLS4gICAgICAgXG4gICAgICAgICAgICAgICAuOi09LTo6LS0tPT0tLT0tOi4gIC46OjotLS06LiAgICAgIFxuICAgICAgICAgICAgLjotPS06Li46LS0uLT06LT0tLS09LS4gICAgICAgICAgICAgICBcbiAgICAgICAgICA6PT09LTouIC4tPS0uLj09Li4tPS06Oi09Oi4gICAgICAgICAgICAgXG4gICAgICAgICAgOjo6LiAgLjo9LTogIDo9LSAgLi09LTouOi0tLS4gICAgICAgICAgIFxuICAgICAgICAgICAgICAgLi09LS4gICAtPS0gICAuLT09LS4gLjotICAgICAgICAgICBcbiAgICAgICAgICAgICAgOj0tOi4gICAuLT06ICAgIC46LT06LiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC4uLiAgICAgOj09LiAgICAgIC4uLiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIC4tLSAgICAgICAgICAgICAgICAgICAgICAgICBcbmAsXG4gIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgLjo6LiAgICAgICAgLi4gICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLjo6OjouICAgICAgOjo6LiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAuOjo6Oi4gICAgIDo6Oi4gICAgLi4uLiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC46Ojo6LiAgIC46Oi4gICAuLjo6OjogICAgICAgICAgICBcbiAgICAgICAgIDo6Oi4uICAgLjo6Oi4uICAuOjouICAuOjo6OjouICAgICAgICAgICAgXG4gICAgICAgICAuOjo6OjouICAuOjo6LiAgLjo6IC4uOjo6Oi4gICAgICAgICAgICAgIFxuICAgICAgICAgICAuLjo6OjouLi46OjouIDo6Li46Ojo6Oi4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLjo6Ojo6Ojo6Oi46Ojo6Ojo6Li4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLi46Ojo6Ojo6Ojo6Ojo6Li4uLi4uLjo6OjouICAgICAgIFxuICAgICAgLi4uLi4uLi4uLi4uLi46Ojo6Ojo6Ojo6Ojo6Ojo6OjouLi4uICAgICAgICBcbiAgICAgIC4uLi4uLi4uLi4uOjo6Ojo6Ojo6Ojo6OjouLi4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAuLjo6Ojo6Ojo6Ojo6Ljo6Ojo6Ojo6OjouICAgICAgIFxuICAgICAgICAgICAgICAgLi46OjouLjo6Ojo6Ojo6Oi4uICAuLi4uLjo6LiAgICAgICBcbiAgICAgICAgICAgIC4uOjo6Li4uLjo6Ljo6Ljo6Ojo6Oi4uICAgICAgICAgICAgICAgXG4gICAgICAgICAgLjo6OjouICAuOjouLi46OiAuOjo6Li46Oi4gICAgICAgICAgICAgIFxuICAgICAgICAgIC4uLiAgICAuOjouICAuOjogIC46OjouIC46Oi4uICAgICAgICAgICBcbiAgICAgICAgICAgICAgIC46OjouICAgOjouICAgLi46Oi4gICAuOiAgICAgICAgICAgXG4gICAgICAgICAgICAgIC46Oi4gICAgLjo6LiAgICAgLjo6LiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgLiAgICAgIC46Oi4gICAgICAuLiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAuOi4gICAgICAgICAgICAgICAgICAgICAgICAgXG5gLFxuICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYCxcbl1cblxuZXhwb3J0IGNvbnN0IHNtYWxsQW5pbWF0ZWRBcnJheSA9IFtcbiAgYCAgIEAgICBcbkAgIEAgIEBcbiAgQEBAICBcbkAgIEAgIEBcbiAgIEBgLFxuICBgICAgKiAgIFxuKiAgKiAgKlxuICAqKiogIFxuKiAgKiAgKlxuICAgKmAsXG4gIGAgICArICAgXG4rICArICArXG4gICsrKyAgXG4rICArICArXG4gICArYCxcbiAgYCAgIC8gICBcbi8gIC8gIC9cbiAgLy8vICBcbi8gIC8gIC9cbiAgIC9gLFxuICBgICAgfCAgIFxufCAgfCAgfFxuICB8fHwgIFxufCAgfCAgfFxuICAgfGAsXG4gIGAgICBcXFxcICAgXG5cXFxcICBcXFxcICBcXFxcXG4gIFxcXFxcXFxcXFxcXCAgXG5cXFxcICBcXFxcICBcXFxcXG4gICBcXFxcYCxcbiAgYCAgIC0gICBcbi0gIC0gIC1cbiAgLS0tICBcbi0gIC0gIC1cbiAgIC1gLFxuXVxuIiwKICAgICJpbXBvcnQgeyBUb29sIH0gZnJvbSAnLi9Ub29sLmpzJ1xuaW1wb3J0IHsgQWdlbnRUb29sIH0gZnJvbSAnLi90b29scy9BZ2VudFRvb2wvQWdlbnRUb29sLmpzJ1xuaW1wb3J0IHsgQXJjaGl0ZWN0VG9vbCB9IGZyb20gJy4vdG9vbHMvQXJjaGl0ZWN0VG9vbC9BcmNoaXRlY3RUb29sLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuL3Rvb2xzL0Jhc2hUb29sL0Jhc2hUb29sLmpzJ1xuaW1wb3J0IHsgRmlsZUVkaXRUb29sIH0gZnJvbSAnLi90b29scy9GaWxlRWRpdFRvb2wvRmlsZUVkaXRUb29sLmpzJ1xuaW1wb3J0IHsgRmlsZVJlYWRUb29sIH0gZnJvbSAnLi90b29scy9GaWxlUmVhZFRvb2wvRmlsZVJlYWRUb29sLmpzJ1xuaW1wb3J0IHsgRmlsZVdyaXRlVG9vbCB9IGZyb20gJy4vdG9vbHMvRmlsZVdyaXRlVG9vbC9GaWxlV3JpdGVUb29sLmpzJ1xuaW1wb3J0IHsgR2xvYlRvb2wgfSBmcm9tICcuL3Rvb2xzL0dsb2JUb29sL0dsb2JUb29sLmpzJ1xuaW1wb3J0IHsgR3JlcFRvb2wgfSBmcm9tICcuL3Rvb2xzL0dyZXBUb29sL0dyZXBUb29sLmpzJ1xuaW1wb3J0IHsgTFNUb29sIH0gZnJvbSAnLi90b29scy9sc1Rvb2wvbHNUb29sLmpzJ1xuaW1wb3J0IHsgTWVtb3J5UmVhZFRvb2wgfSBmcm9tICcuL3Rvb2xzL01lbW9yeVJlYWRUb29sL01lbW9yeVJlYWRUb29sLmpzJ1xuaW1wb3J0IHsgTWVtb3J5V3JpdGVUb29sIH0gZnJvbSAnLi90b29scy9NZW1vcnlXcml0ZVRvb2wvTWVtb3J5V3JpdGVUb29sLmpzJ1xuaW1wb3J0IHsgTm90ZWJvb2tFZGl0VG9vbCB9IGZyb20gJy4vdG9vbHMvTm90ZWJvb2tFZGl0VG9vbC9Ob3RlYm9va0VkaXRUb29sLmpzJ1xuaW1wb3J0IHsgTm90ZWJvb2tSZWFkVG9vbCB9IGZyb20gJy4vdG9vbHMvTm90ZWJvb2tSZWFkVG9vbC9Ob3RlYm9va1JlYWRUb29sLmpzJ1xuaW1wb3J0IHsgU3RpY2tlclJlcXVlc3RUb29sIH0gZnJvbSAnLi90b29scy9TdGlja2VyUmVxdWVzdFRvb2wvU3RpY2tlclJlcXVlc3RUb29sLmpzJ1xuaW1wb3J0IHsgVGhpbmtUb29sIH0gZnJvbSAnLi90b29scy9UaGlua1Rvb2wvVGhpbmtUb29sLmpzJ1xuaW1wb3J0IHsgZ2V0TUNQVG9vbHMgfSBmcm9tICcuL3NlcnZpY2VzL21jcENsaWVudC5qcydcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdsb2Rhc2gtZXMnXG5cbmNvbnN0IEFOVF9PTkxZX1RPT0xTID0gW01lbW9yeVJlYWRUb29sLCBNZW1vcnlXcml0ZVRvb2xdXG5cbi8vIEZ1bmN0aW9uIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0aGF0IGJyZWFrIGJ1blxuZXhwb3J0IGNvbnN0IGdldEFsbFRvb2xzID0gKCk6IFRvb2xbXSA9PiB7XG4gIHJldHVybiBbXG4gICAgQWdlbnRUb29sLFxuICAgIEJhc2hUb29sLFxuICAgIEdsb2JUb29sLFxuICAgIEdyZXBUb29sLFxuICAgIExTVG9vbCxcbiAgICBGaWxlUmVhZFRvb2wsXG4gICAgRmlsZUVkaXRUb29sLFxuICAgIEZpbGVXcml0ZVRvb2wsXG4gICAgTm90ZWJvb2tSZWFkVG9vbCxcbiAgICBOb3RlYm9va0VkaXRUb29sLFxuICAgIFN0aWNrZXJSZXF1ZXN0VG9vbCxcbiAgICBUaGlua1Rvb2wsXG4gICAgLi4uKHByb2Nlc3MuZW52LlVTRVJfVFlQRSA9PT0gJ2FudCcgPyBBTlRfT05MWV9UT09MUyA6IFtdKSxcbiAgXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VG9vbHMgPSBtZW1vaXplKFxuICBhc3luYyAoZW5hYmxlQXJjaGl0ZWN0PzogYm9vbGVhbik6IFByb21pc2U8VG9vbFtdPiA9PiB7XG4gICAgY29uc3QgdG9vbHMgPSBbLi4uZ2V0QWxsVG9vbHMoKSwgLi4uKGF3YWl0IGdldE1DUFRvb2xzKCkpXVxuXG4gICAgLy8gT25seSBpbmNsdWRlIEFyY2hpdGVjdCB0b29sIGlmIGVuYWJsZWQgdmlhIGNvbmZpZyBvciBDTEkgZmxhZ1xuICAgIGlmIChlbmFibGVBcmNoaXRlY3QpIHtcbiAgICAgIHRvb2xzLnB1c2goQXJjaGl0ZWN0VG9vbClcbiAgICB9XG5cbiAgICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCBQcm9taXNlLmFsbCh0b29scy5tYXAodG9vbCA9PiB0b29sLmlzRW5hYmxlZCgpKSlcbiAgICByZXR1cm4gdG9vbHMuZmlsdGVyKChfLCBpKSA9PiBpc0VuYWJsZWRbaV0pXG4gIH0sXG4pXG5cbmV4cG9ydCBjb25zdCBnZXRSZWFkT25seVRvb2xzID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxUb29sW10+ID0+IHtcbiAgY29uc3QgdG9vbHMgPSBnZXRBbGxUb29scygpLmZpbHRlcih0b29sID0+IHRvb2wuaXNSZWFkT25seSgpKVxuICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCBQcm9taXNlLmFsbCh0b29scy5tYXAodG9vbCA9PiB0b29sLmlzRW5hYmxlZCgpKSlcbiAgcmV0dXJuIHRvb2xzLmZpbHRlcigoXywgaW5kZXgpID0+IGlzRW5hYmxlZFtpbmRleF0pXG59KVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0Bpbmtqcy91aSdcbmltcG9ydCB7XG4gIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyxcbiAgZ2V0Q3VycmVudFByb2plY3RDb25maWcsXG59IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmltcG9ydCB7IFBST0RVQ1RfTkFNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0c2lnLmpzJ1xuaW1wb3J0IHsgdXNlRXhpdE9uQ3RybENEIH0gZnJvbSAnLi4vaG9va3MvdXNlRXhpdE9uQ3RybENELmpzJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnLi4vdXRpbHMvc3RhdGUuanMnXG5pbXBvcnQgTGluayBmcm9tICcuL0xpbmsuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uRG9uZSgpOiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUcnVzdERpYWxvZyh7IG9uRG9uZSB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIExvZyB3aGVuIGRpYWxvZyBpcyBzaG93blxuICAgIGxvZ0V2ZW50KCd0cnVzdF9kaWFsb2dfc2hvd24nLCB7fSlcbiAgfSwgW10pXG5cbiAgZnVuY3Rpb24gb25DaGFuZ2UodmFsdWU6ICd5ZXMnIHwgJ25vJykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICd5ZXMnOiB7XG4gICAgICAgIC8vIExvZyB3aGVuIHVzZXIgYWNjZXB0c1xuICAgICAgICBjb25zdCBpc0hvbWVEaXIgPSBob21lZGlyKCkgPT09IGdldEN3ZCgpXG4gICAgICAgIGxvZ0V2ZW50KCd0cnVzdF9kaWFsb2dfYWNjZXB0Jywge1xuICAgICAgICAgIGlzSG9tZURpcjogU3RyaW5nKGlzSG9tZURpciksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFpc0hvbWVEaXIpIHtcbiAgICAgICAgICBzYXZlQ3VycmVudFByb2plY3RDb25maWcoe1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgaGFzVHJ1c3REaWFsb2dBY2NlcHRlZDogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIG9uRG9uZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdubyc6IHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcblxuICB1c2VJbnB1dCgoX2lucHV0LCBrZXkpID0+IHtcbiAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJveFxuICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgZ2FwPXsxfVxuICAgICAgICBwYWRkaW5nPXsxfVxuICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLndhcm5pbmd9XG4gICAgICA+XG4gICAgICAgIDxUZXh0IGJvbGQgY29sb3I9e3RoZW1lLndhcm5pbmd9PlxuICAgICAgICAgIERvIHlvdSB0cnVzdCB0aGUgZmlsZXMgaW4gdGhpcyBmb2xkZXI/XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgYm9sZD57cHJvY2Vzcy5jd2QoKX08L1RleHQ+XG5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtQUk9EVUNUX05BTUV9IG1heSByZWFkIGZpbGVzIGluIHRoaXMgZm9sZGVyLiBSZWFkaW5nIHVudHJ1c3RlZFxuICAgICAgICAgICAgZmlsZXMgbWF5IGxlYWQgdG8ge1BST0RVQ1RfTkFNRX0gdG8gYmVoYXZlIGluIGFuIHVuZXhwZWN0ZWQgd2F5cy5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBXaXRoIHlvdXIgcGVybWlzc2lvbiB7UFJPRFVDVF9OQU1FfSBtYXkgZXhlY3V0ZSBmaWxlcyBpbiB0aGlzXG4gICAgICAgICAgICBmb2xkZXIuIEV4ZWN1dGluZyB1bnRydXN0ZWQgY29kZSBpcyB1bnNhZmUuXG4gICAgICAgICAgPC9UZXh0PlxuXG4gICAgICAgICAgPExpbmsgdXJsPVwiaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vcy9jbGF1ZGUtY29kZS1zZWN1cml0eVwiIC8+XG4gICAgICAgIDwvQm94PlxuXG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICB7IGxhYmVsOiAnWWVzLCBwcm9jZWVkJywgdmFsdWU6ICd5ZXMnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm8sIGV4aXQnLCB2YWx1ZTogJ25vJyB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+IG9uQ2hhbmdlKHZhbHVlIGFzICd5ZXMnIHwgJ25vJyl9XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICAgIDxCb3ggbWFyZ2luTGVmdD17M30+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIHtleGl0U3RhdGUucGVuZGluZyA/IChcbiAgICAgICAgICAgIDw+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+RW50ZXIgdG8gY29uZmlybSDCtyBFc2MgdG8gZXhpdDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDQUNIRV9QQVRIUyB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IExvZ1NlbGVjdG9yIH0gZnJvbSAnLi4vY29tcG9uZW50cy9Mb2dTZWxlY3Rvci5qcydcbmltcG9ydCB0eXBlIHsgTG9nT3B0aW9uLCBMb2dMaXN0UHJvcHMgfSBmcm9tICcuLi90eXBlcy9sb2dzLmpzJ1xuaW1wb3J0IHsgbG9hZExvZ0xpc3QgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uL3V0aWxzL2xvZy5qcydcblxudHlwZSBQcm9wcyA9IExvZ0xpc3RQcm9wcyAmIHtcbiAgdHlwZTogJ21lc3NhZ2VzJyB8ICdlcnJvcnMnXG4gIGxvZ051bWJlcj86IG51bWJlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gTG9nTGlzdCh7IGNvbnRleHQsIHR5cGUsIGxvZ051bWJlciB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFtsb2dzLCBzZXRMb2dzXSA9IHVzZVN0YXRlPExvZ09wdGlvbltdPihbXSlcbiAgY29uc3QgW2RpZFNlbGVjdExvZywgc2V0RGlkU2VsZWN0TG9nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbG9hZExvZ0xpc3QoXG4gICAgICB0eXBlID09PSAnbWVzc2FnZXMnID8gQ0FDSEVfUEFUSFMubWVzc2FnZXMoKSA6IENBQ0hFX1BBVEhTLmVycm9ycygpLFxuICAgIClcbiAgICAgIC50aGVuKGxvZ3MgPT4ge1xuICAgICAgICAvLyBJZiBsb2dOdW1iZXIgaXMgcHJvdmlkZWQsIGltbWVkaWF0ZWx5IGRpc3BsYXkgdGhhdCBsb2dcbiAgICAgICAgaWYgKGxvZ051bWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgbG9nID0gbG9nc1tsb2dOdW1iZXIgPj0gMCA/IGxvZ051bWJlciA6IDBdIC8vIEhhbmRsZSBvdXQgb2YgYm91bmRzXG4gICAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobG9nLm1lc3NhZ2VzLCBudWxsLCAyKSlcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBsb2cgZm91bmQgYXQgaW5kZXgnLCBsb2dOdW1iZXIpXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRMb2dzKGxvZ3MpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgICAgIGlmIChsb2dOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQudW5tb3VudD8uKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfSwgW2NvbnRleHQsIHR5cGUsIGxvZ051bWJlcl0pXG5cbiAgZnVuY3Rpb24gb25TZWxlY3QoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGxvZyA9IGxvZ3NbaW5kZXhdXG4gICAgaWYgKCFsb2cpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXREaWRTZWxlY3RMb2codHJ1ZSlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGxvZy5tZXNzYWdlcywgbnVsbCwgMikpXG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9LCAxMDApXG4gIH1cblxuICAvLyBJZiBsb2dOdW1iZXIgaXMgcHJvdmlkZWQsIGRvbid0IHJlbmRlciB0aGUgc2VsZWN0b3JcbiAgaWYgKGxvZ051bWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmIChkaWRTZWxlY3RMb2cpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIDxMb2dTZWxlY3RvciBsb2dzPXtsb2dzfSBvblNlbGVjdD17b25TZWxlY3R9IC8+XG59XG4iLAogICAgImltcG9ydCB7IG1lcmdlQ2FwYWJpbGl0aWVzLCBQcm90b2NvbCwgfSBmcm9tIFwiLi4vc2hhcmVkL3Byb3RvY29sLmpzXCI7XG5pbXBvcnQgeyBDcmVhdGVNZXNzYWdlUmVzdWx0U2NoZW1hLCBFbXB0eVJlc3VsdFNjaGVtYSwgSW5pdGlhbGl6ZWROb3RpZmljYXRpb25TY2hlbWEsIEluaXRpYWxpemVSZXF1ZXN0U2NoZW1hLCBMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiwgTGlzdFJvb3RzUmVzdWx0U2NoZW1hLCBTVVBQT1JURURfUFJPVE9DT0xfVkVSU0lPTlMsIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG4vKipcbiAqIEFuIE1DUCBzZXJ2ZXIgb24gdG9wIG9mIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydC5cbiAqXG4gKiBUaGlzIHNlcnZlciB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzcG9uZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdyBhcyBpbml0aWF0ZWQgZnJvbSB0aGUgY2xpZW50LlxuICpcbiAqIFRvIHVzZSB3aXRoIGN1c3RvbSB0eXBlcywgZXh0ZW5kIHRoZSBiYXNlIFJlcXVlc3QvTm90aWZpY2F0aW9uL1Jlc3VsdCB0eXBlcyBhbmQgcGFzcyB0aGVtIGFzIHR5cGUgcGFyYW1ldGVyczpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDdXN0b20gc2NoZW1hc1xuICogY29uc3QgQ3VzdG9tUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHsuLi59KVxuICogY29uc3QgQ3VzdG9tTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7Li4ufSlcbiAqIGNvbnN0IEN1c3RvbVJlc3VsdFNjaGVtYSA9IFJlc3VsdFNjaGVtYS5leHRlbmQoey4uLn0pXG4gKlxuICogLy8gVHlwZSBhbGlhc2VzXG4gKiB0eXBlIEN1c3RvbVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBDdXN0b21SZXF1ZXN0U2NoZW1hPlxuICogdHlwZSBDdXN0b21Ob3RpZmljYXRpb24gPSB6LmluZmVyPHR5cGVvZiBDdXN0b21Ob3RpZmljYXRpb25TY2hlbWE+XG4gKiB0eXBlIEN1c3RvbVJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIEN1c3RvbVJlc3VsdFNjaGVtYT5cbiAqXG4gKiAvLyBDcmVhdGUgdHlwZWQgc2VydmVyXG4gKiBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyPEN1c3RvbVJlcXVlc3QsIEN1c3RvbU5vdGlmaWNhdGlvbiwgQ3VzdG9tUmVzdWx0Pih7XG4gKiAgIG5hbWU6IFwiQ3VzdG9tU2VydmVyXCIsXG4gKiAgIHZlcnNpb246IFwiMS4wLjBcIlxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU2VydmVyIGV4dGVuZHMgUHJvdG9jb2wge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoaXMgc2VydmVyIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3NlcnZlckluZm8sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fc2VydmVySW5mbyA9IF9zZXJ2ZXJJbmZvO1xuICAgICAgICB0aGlzLl9jYXBhYmlsaXRpZXMgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwYWJpbGl0aWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmluc3RydWN0aW9ucztcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihJbml0aWFsaXplUmVxdWVzdFNjaGVtYSwgKHJlcXVlc3QpID0+IHRoaXMuX29uaW5pdGlhbGl6ZShyZXF1ZXN0KSk7XG4gICAgICAgIHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihJbml0aWFsaXplZE5vdGlmaWNhdGlvblNjaGVtYSwgKCkgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSB0aGlzLm9uaW5pdGlhbGl6ZWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpOyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIG5ldyBjYXBhYmlsaXRpZXMuIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgdHJhbnNwb3J0LlxuICAgICAqXG4gICAgICogVGhlIG5ldyBjYXBhYmlsaXRpZXMgd2lsbCBiZSBtZXJnZWQgd2l0aCBhbnkgZXhpc3RpbmcgY2FwYWJpbGl0aWVzIHByZXZpb3VzbHkgZ2l2ZW4gKGUuZy4sIGF0IGluaXRpYWxpemF0aW9uKS5cbiAgICAgKi9cbiAgICByZWdpc3RlckNhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKHRoaXMudHJhbnNwb3J0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIGNvbm5lY3RpbmcgdG8gdHJhbnNwb3J0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhcGFiaWxpdGllcyA9IG1lcmdlQ2FwYWJpbGl0aWVzKHRoaXMuX2NhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVzKTtcbiAgICB9XG4gICAgYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZChtZXRob2QpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5fY2xpZW50Q2FwYWJpbGl0aWVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2FtcGxpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJvb3RzL2xpc3RcIjpcbiAgICAgICAgICAgICAgICBpZiAoISgoX2IgPSB0aGlzLl9jbGllbnRDYXBhYmlsaXRpZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yb290cykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBsaXN0aW5nIHJvb3RzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJwaW5nXCI6XG4gICAgICAgICAgICAgICAgLy8gTm8gc3BlY2lmaWMgY2FwYWJpbGl0eSByZXF1aXJlZCBmb3IgcGluZ1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkobWV0aG9kKSB7XG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlIFwibm90aWZpY2F0aW9ucy9tZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jYXBhYmlsaXRpZXMubG9nZ2luZykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGxvZ2dpbmcgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJub3RpZmljYXRpb25zL3Jlc291cmNlcy9saXN0X2NoYW5nZWRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NhcGFiaWxpdGllcy5yZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBub3RpZnlpbmcgYWJvdXQgcmVzb3VyY2VzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZFwiOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgbm90aWZ5aW5nIG9mIHRvb2wgbGlzdCBjaGFuZ2VzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkXCI6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jYXBhYmlsaXRpZXMucHJvbXB0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IG5vdGlmeWluZyBvZiBwcm9tcHQgbGlzdCBjaGFuZ2VzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub3RpZmljYXRpb25zL2NhbmNlbGxlZFwiOlxuICAgICAgICAgICAgICAgIC8vIENhbmNlbGxhdGlvbiBub3RpZmljYXRpb25zIGFyZSBhbHdheXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGlmaWNhdGlvbnMvcHJvZ3Jlc3NcIjpcbiAgICAgICAgICAgICAgICAvLyBQcm9ncmVzcyBub3RpZmljYXRpb25zIGFyZSBhbHdheXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eShtZXRob2QpIHtcbiAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jYXBhYmlsaXRpZXMuc2FtcGxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7bWV0aG9kfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibG9nZ2luZy9zZXRMZXZlbFwiOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FwYWJpbGl0aWVzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBsb2dnaW5nIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJwcm9tcHRzL2dldFwiOlxuICAgICAgICAgICAgY2FzZSBcInByb21wdHMvbGlzdFwiOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FwYWJpbGl0aWVzLnByb21wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBwcm9tcHRzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyZXNvdXJjZXMvbGlzdFwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdFwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc291cmNlcy9yZWFkXCI6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jYXBhYmlsaXRpZXMucmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2VzIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0b29scy9jYWxsXCI6XG4gICAgICAgICAgICBjYXNlIFwidG9vbHMvbGlzdFwiOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdG9vbHMgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInBpbmdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbml0aWFsaXplXCI6XG4gICAgICAgICAgICAgICAgLy8gTm8gc3BlY2lmaWMgY2FwYWJpbGl0eSByZXF1aXJlZCBmb3IgdGhlc2UgbWV0aG9kc1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9vbmluaXRpYWxpemUocmVxdWVzdCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ZWRWZXJzaW9uID0gcmVxdWVzdC5wYXJhbXMucHJvdG9jb2xWZXJzaW9uO1xuICAgICAgICB0aGlzLl9jbGllbnRDYXBhYmlsaXRpZXMgPSByZXF1ZXN0LnBhcmFtcy5jYXBhYmlsaXRpZXM7XG4gICAgICAgIHRoaXMuX2NsaWVudFZlcnNpb24gPSByZXF1ZXN0LnBhcmFtcy5jbGllbnRJbmZvO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdG9jb2xWZXJzaW9uOiBTVVBQT1JURURfUFJPVE9DT0xfVkVSU0lPTlMuaW5jbHVkZXMocmVxdWVzdGVkVmVyc2lvbilcbiAgICAgICAgICAgICAgICA/IHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICAgICAgICAgICA6IExBVEVTVF9QUk9UT0NPTF9WRVJTSU9OLFxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmdldENhcGFiaWxpdGllcygpLFxuICAgICAgICAgICAgc2VydmVySW5mbzogdGhpcy5fc2VydmVySW5mbyxcbiAgICAgICAgICAgIC4uLih0aGlzLl9pbnN0cnVjdGlvbnMgJiYgeyBpbnN0cnVjdGlvbnM6IHRoaXMuX2luc3RydWN0aW9ucyB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWZ0ZXIgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZCwgdGhpcyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjbGllbnQncyByZXBvcnRlZCBjYXBhYmlsaXRpZXMuXG4gICAgICovXG4gICAgZ2V0Q2xpZW50Q2FwYWJpbGl0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50Q2FwYWJpbGl0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZnRlciBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLCB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsaWVudCdzIG5hbWUgYW5kIHZlcnNpb24uXG4gICAgICovXG4gICAgZ2V0Q2xpZW50VmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudFZlcnNpb247XG4gICAgfVxuICAgIGdldENhcGFiaWxpdGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdGllcztcbiAgICB9XG4gICAgYXN5bmMgcGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogXCJwaW5nXCIgfSwgRW1wdHlSZXN1bHRTY2hlbWEpO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVNZXNzYWdlKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiBcInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2VcIiwgcGFyYW1zIH0sIENyZWF0ZU1lc3NhZ2VSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0Um9vdHMocGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6IFwicm9vdHMvbGlzdFwiLCBwYXJhbXMgfSwgTGlzdFJvb3RzUmVzdWx0U2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZExvZ2dpbmdNZXNzYWdlKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oeyBtZXRob2Q6IFwibm90aWZpY2F0aW9ucy9tZXNzYWdlXCIsIHBhcmFtcyB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZFJlc291cmNlVXBkYXRlZChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkXCIsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZW5kUmVzb3VyY2VMaXN0Q2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJub3RpZmljYXRpb25zL3Jlc291cmNlcy9saXN0X2NoYW5nZWRcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7IG1ldGhvZDogXCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZFwiIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZW5kUHJvbXB0TGlzdENoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7IG1ldGhvZDogXCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkXCIgfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgeyBSZWFkQnVmZmVyLCBzZXJpYWxpemVNZXNzYWdlIH0gZnJvbSBcIi4uL3NoYXJlZC9zdGRpby5qc1wiO1xuLyoqXG4gKiBTZXJ2ZXIgdHJhbnNwb3J0IGZvciBzdGRpbzogdGhpcyBjb21tdW5pY2F0ZXMgd2l0aCBhIE1DUCBjbGllbnQgYnkgcmVhZGluZyBmcm9tIHRoZSBjdXJyZW50IHByb2Nlc3MnIHN0ZGluIGFuZCB3cml0aW5nIHRvIHN0ZG91dC5cbiAqXG4gKiBUaGlzIHRyYW5zcG9ydCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBOb2RlLmpzIGVudmlyb25tZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0ZGlvU2VydmVyVHJhbnNwb3J0IHtcbiAgICBjb25zdHJ1Y3Rvcihfc3RkaW4gPSBwcm9jZXNzLnN0ZGluLCBfc3Rkb3V0ID0gcHJvY2Vzcy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5fc3RkaW4gPSBfc3RkaW47XG4gICAgICAgIHRoaXMuX3N0ZG91dCA9IF9zdGRvdXQ7XG4gICAgICAgIHRoaXMuX3JlYWRCdWZmZXIgPSBuZXcgUmVhZEJ1ZmZlcigpO1xuICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIC8vIEFycm93IGZ1bmN0aW9ucyB0byBiaW5kIGB0aGlzYCBwcm9wZXJseSwgd2hpbGUgbWFpbnRhaW5pbmcgZnVuY3Rpb24gaWRlbnRpdHkuXG4gICAgICAgIHRoaXMuX29uZGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVhZEJ1ZmZlci5hcHBlbmQoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVhZEJ1ZmZlcigpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLm9uZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnRzIGxpc3RlbmluZyBmb3IgbWVzc2FnZXMgb24gc3RkaW4uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGFydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGRpb1NlcnZlclRyYW5zcG9ydCBhbHJlYWR5IHN0YXJ0ZWQhIElmIHVzaW5nIFNlcnZlciBjbGFzcywgbm90ZSB0aGF0IGNvbm5lY3QoKSBjYWxscyBzdGFydCgpIGF1dG9tYXRpY2FsbHkuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zdGRpbi5vbihcImRhdGFcIiwgdGhpcy5fb25kYXRhKTtcbiAgICAgICAgdGhpcy5fc3RkaW4ub24oXCJlcnJvclwiLCB0aGlzLl9vbmVycm9yKTtcbiAgICB9XG4gICAgcHJvY2Vzc1JlYWRCdWZmZXIoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9yZWFkQnVmZmVyLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMub25tZXNzYWdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMub25lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIC8vIFJlbW92ZSBvdXIgZXZlbnQgbGlzdGVuZXJzIGZpcnN0XG4gICAgICAgIHRoaXMuX3N0ZGluLm9mZihcImRhdGFcIiwgdGhpcy5fb25kYXRhKTtcbiAgICAgICAgdGhpcy5fc3RkaW4ub2ZmKFwiZXJyb3JcIiwgdGhpcy5fb25lcnJvcik7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIHdlcmUgdGhlIG9ubHkgZGF0YSBsaXN0ZW5lclxuICAgICAgICBjb25zdCByZW1haW5pbmdEYXRhTGlzdGVuZXJzID0gdGhpcy5fc3RkaW4ubGlzdGVuZXJDb3VudCgnZGF0YScpO1xuICAgICAgICBpZiAocmVtYWluaW5nRGF0YUxpc3RlbmVycyA9PT0gMCkge1xuICAgICAgICAgICAgLy8gT25seSBwYXVzZSBzdGRpbiBpZiB3ZSB3ZXJlIHRoZSBvbmx5IGxpc3RlbmVyXG4gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGludGVyZmVyaW5nIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgbWlnaHQgYmUgdXNpbmcgc3RkaW5cbiAgICAgICAgICAgIHRoaXMuX3N0ZGluLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2xlYXIgdGhlIGJ1ZmZlciBhbmQgbm90aWZ5IGNsb3N1cmVcbiAgICAgICAgdGhpcy5fcmVhZEJ1ZmZlci5jbGVhcigpO1xuICAgICAgICAoX2EgPSB0aGlzLm9uY2xvc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBzZW5kKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gc2VyaWFsaXplTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGRvdXQud3JpdGUoanNvbikpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGRvdXQub25jZShcImRyYWluXCIsIHJlc29sdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGRpby5qcy5tYXAiLAogICAgImltcG9ydCB7IFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qcydcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgQ2FsbFRvb2xSZXN1bHRTY2hlbWEsXG4gIExpc3RUb29sc1JlcXVlc3RTY2hlbWEsXG4gIExpc3RUb29sc1Jlc3VsdFNjaGVtYSxcbiAgVG9vbFNjaGVtYSxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcydcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5pbXBvcnQgeyB6b2RUb0pzb25TY2hlbWEgfSBmcm9tICd6b2QtdG8tanNvbi1zY2hlbWEnXG5pbXBvcnQgeyBBZ2VudFRvb2wgfSBmcm9tICcuLi90b29scy9BZ2VudFRvb2wvQWdlbnRUb29sLmpzJ1xuaW1wb3J0IHsgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2wgfSBmcm9tICcuLi9wZXJtaXNzaW9ucy5qcydcbmltcG9ydCB7IHNldEN3ZCB9IGZyb20gJy4uL3V0aWxzL3N0YXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCB9IGZyb20gJy4uL3V0aWxzL21vZGVsLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQgeyBMU1Rvb2wgfSBmcm9tICcuLi90b29scy9sc1Rvb2wvbHNUb29sLmpzJ1xuaW1wb3J0IHsgQmFzaFRvb2wgfSBmcm9tICcuLi90b29scy9CYXNoVG9vbC9CYXNoVG9vbC5qcydcbmltcG9ydCB7IEZpbGVFZGl0VG9vbCB9IGZyb20gJy4uL3Rvb2xzL0ZpbGVFZGl0VG9vbC9GaWxlRWRpdFRvb2wuanMnXG5pbXBvcnQgeyBGaWxlUmVhZFRvb2wgfSBmcm9tICcuLi90b29scy9GaWxlUmVhZFRvb2wvRmlsZVJlYWRUb29sLmpzJ1xuaW1wb3J0IHsgR2xvYlRvb2wgfSBmcm9tICcuLi90b29scy9HbG9iVG9vbC9HbG9iVG9vbC5qcydcbmltcG9ydCB7IEdyZXBUb29sIH0gZnJvbSAnLi4vdG9vbHMvR3JlcFRvb2wvR3JlcFRvb2wuanMnXG5pbXBvcnQgeyBGaWxlV3JpdGVUb29sIH0gZnJvbSAnLi4vdG9vbHMvRmlsZVdyaXRlVG9vbC9GaWxlV3JpdGVUb29sLmpzJ1xuaW1wb3J0IHsgVG9vbCB9IGZyb20gJy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgcmV2aWV3IGZyb20gJy4uL2NvbW1hbmRzL3Jldmlldy5qcydcbmltcG9ydCB7IGxhc3RYIH0gZnJvbSAnLi4vdXRpbHMvZ2VuZXJhdG9ycy5qcydcblxudHlwZSBUb29sSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBUb29sU2NoZW1hLnNoYXBlLmlucHV0U2NoZW1hPlxuXG5jb25zdCBzdGF0ZToge1xuICByZWFkRmlsZVRpbWVzdGFtcHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj5cbn0gPSB7XG4gIHJlYWRGaWxlVGltZXN0YW1wczoge30sXG59XG5cbmNvbnN0IE1DUF9DT01NQU5EUzogQ29tbWFuZFtdID0gW3Jldmlld11cblxuY29uc3QgTUNQX1RPT0xTOiBUb29sW10gPSBbXG4gIEFnZW50VG9vbCxcbiAgQmFzaFRvb2wsXG4gIEZpbGVFZGl0VG9vbCxcbiAgRmlsZVJlYWRUb29sLFxuICBHbG9iVG9vbCxcbiAgR3JlcFRvb2wsXG4gIEZpbGVXcml0ZVRvb2wsXG4gIExTVG9vbCxcbl1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0TUNQU2VydmVyKGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNldEN3ZChjd2QpXG4gIGNvbnN0IHNlcnZlciA9IG5ldyBTZXJ2ZXIoXG4gICAge1xuICAgICAgbmFtZTogJ2NsYXVkZS90ZW5ndScsXG4gICAgICB2ZXJzaW9uOiBNQUNSTy5WRVJTSU9OLFxuICAgIH0sXG4gICAge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIHRvb2xzOiB7fSxcbiAgICAgIH0sXG4gICAgfSxcbiAgKVxuXG4gIHNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihcbiAgICBMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLFxuICAgIGFzeW5jICgpOiBQcm9taXNlPFpvZC5pbmZlcjx0eXBlb2YgTGlzdFRvb2xzUmVzdWx0U2NoZW1hPj4gPT4ge1xuICAgICAgY29uc3QgdG9vbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgTUNQX1RPT0xTLm1hcChhc3luYyB0b29sID0+ICh7XG4gICAgICAgICAgLi4udG9vbCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYXdhaXQgdG9vbC5kZXNjcmlwdGlvbih6Lm9iamVjdCh7fSkpLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiB6b2RUb0pzb25TY2hlbWEodG9vbC5pbnB1dFNjaGVtYSkgYXMgVG9vbElucHV0LFxuICAgICAgICB9KSksXG4gICAgICApXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2xzLFxuICAgICAgfVxuICAgIH0sXG4gIClcblxuICBzZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoXG4gICAgQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLFxuICAgIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTxab2QuaW5mZXI8dHlwZW9mIENhbGxUb29sUmVzdWx0U2NoZW1hPj4gPT4ge1xuICAgICAgY29uc3QgeyBuYW1lLCBhcmd1bWVudHM6IGFyZ3MgfSA9IHJlcXVlc3QucGFyYW1zXG4gICAgICBjb25zdCB0b29sID0gTUNQX1RPT0xTLmZpbmQoXyA9PiBfLm5hbWUgPT09IG5hbWUpXG4gICAgICBpZiAoIXRvb2wpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb29sICR7bmFtZX0gbm90IGZvdW5kYClcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogdmFsaWRhdGUgaW5wdXQgdHlwZXMgd2l0aCB6b2RcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IHRvb2wuaXNFbmFibGVkKCkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb29sICR7bmFtZX0gaXMgbm90IGVuYWJsZWRgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCgpXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0b29sLnZhbGlkYXRlSW5wdXQ/LihcbiAgICAgICAgICAoYXJncyBhcyBuZXZlcikgPz8ge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyOiBuZXcgQWJvcnRDb250cm9sbGVyKCksXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGNvbW1hbmRzOiBNQ1BfQ09NTUFORFMsXG4gICAgICAgICAgICAgIHRvb2xzOiBNQ1BfVE9PTFMsXG4gICAgICAgICAgICAgIHNsb3dBbmRDYXBhYmxlTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgICBmb3JrTnVtYmVyOiAwLFxuICAgICAgICAgICAgICBtZXNzYWdlTG9nTmFtZTogJ3VudXNlZCcsXG4gICAgICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVhZEZpbGVUaW1lc3RhbXBzOiBzdGF0ZS5yZWFkRmlsZVRpbWVzdGFtcHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAmJiAhdmFsaWRhdGlvblJlc3VsdC5yZXN1bHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVG9vbCAke25hbWV9IGlucHV0IGlzIGludmFsaWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlfWAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRvb2wuY2FsbChcbiAgICAgICAgICAoYXJncyA/PyB7fSkgYXMgbmV2ZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyOiBuZXcgQWJvcnRDb250cm9sbGVyKCksXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZHM6IE1DUF9DT01NQU5EUyxcbiAgICAgICAgICAgICAgdG9vbHM6IE1DUF9UT09MUyxcbiAgICAgICAgICAgICAgc2xvd0FuZENhcGFibGVNb2RlbDogYXdhaXQgZ2V0U2xvd0FuZENhcGFibGVNb2RlbCgpLFxuICAgICAgICAgICAgICBmb3JrTnVtYmVyOiAwLFxuICAgICAgICAgICAgICBtZXNzYWdlTG9nTmFtZTogJ3VudXNlZCcsXG4gICAgICAgICAgICAgIG1heFRoaW5raW5nVG9rZW5zOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWRGaWxlVGltZXN0YW1wczogc3RhdGUucmVhZEZpbGVUaW1lc3RhbXBzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFzUGVybWlzc2lvbnNUb1VzZVRvb2wsXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBmaW5hbFJlc3VsdCA9IGF3YWl0IGxhc3RYKHJlc3VsdClcblxuICAgICAgICBpZiAoZmluYWxSZXN1bHQudHlwZSAhPT0gJ3Jlc3VsdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvb2wgJHtuYW1lfSBkaWQgbm90IHJldHVybiBhIHJlc3VsdGApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IEFycmF5LmlzQXJyYXkoZmluYWxSZXN1bHQpXG4gICAgICAgICAgICA/IGZpbmFsUmVzdWx0Lm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgIHRleHQ6ICd0ZXh0JyBpbiBpdGVtID8gaXRlbS50ZXh0IDogSlNPTi5zdHJpbmdpZnkoaXRlbSksXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgdGV4dDpcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZpbmFsUmVzdWx0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgID8gZmluYWxSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGZpbmFsUmVzdWx0LmRhdGEpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ0Vycm9yKGVycm9yKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIClcblxuICBhc3luYyBmdW5jdGlvbiBydW5TZXJ2ZXIoKSB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KClcbiAgICBhd2FpdCBzZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgcnVuU2VydmVyKClcbn1cbiIsCiAgICAiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuL2xvZy5qcydcbmltcG9ydCB7IENBQ0hFX1BBVEhTIH0gZnJvbSAnLi9sb2cuanMnXG5cbmNvbnN0IFRISVJUWV9EQVlTX01TID0gMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwXG5cbmV4cG9ydCB0eXBlIENsZWFudXBSZXN1bHQgPSB7XG4gIG1lc3NhZ2VzOiBudW1iZXJcbiAgZXJyb3JzOiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRGaWxlTmFtZVRvRGF0ZShmaWxlbmFtZTogc3RyaW5nKTogRGF0ZSB7XG4gIGNvbnN0IGlzb1N0ciA9IGZpbGVuYW1lXG4gICAgLnNwbGl0KCcuJylbMF0hXG4gICAgLnJlcGxhY2UoL1QoXFxkezJ9KS0oXFxkezJ9KS0oXFxkezJ9KS0oXFxkezN9KVovLCAnVCQxOiQyOiQzLiQ0WicpXG4gIHJldHVybiBuZXcgRGF0ZShpc29TdHIpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbnVwT2xkTWVzc2FnZUZpbGVzKCk6IFByb21pc2U8Q2xlYW51cFJlc3VsdD4ge1xuICBjb25zdCBtZXNzYWdlUGF0aCA9IENBQ0hFX1BBVEhTLm1lc3NhZ2VzKClcbiAgY29uc3QgZXJyb3JQYXRoID0gQ0FDSEVfUEFUSFMuZXJyb3JzKClcbiAgY29uc3QgdGhpcnR5RGF5c0FnbyA9IG5ldyBEYXRlKERhdGUubm93KCkgLSBUSElSVFlfREFZU19NUylcbiAgY29uc3QgZGVsZXRlZENvdW50czogQ2xlYW51cFJlc3VsdCA9IHsgbWVzc2FnZXM6IDAsIGVycm9yczogMCB9XG5cbiAgZm9yIChjb25zdCBwYXRoIG9mIFttZXNzYWdlUGF0aCwgZXJyb3JQYXRoXSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIocGF0aClcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ29udmVydCBmaWxlbmFtZSBmb3JtYXQgd2hlcmUgYWxsICc6Licgd2VyZSByZXBsYWNlZCB3aXRoICctJ1xuICAgICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGNvbnZlcnRGaWxlTmFtZVRvRGF0ZShmaWxlKVxuICAgICAgICAgIGlmICh0aW1lc3RhbXAgPCB0aGlydHlEYXlzQWdvKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoam9pbihwYXRoLCBmaWxlKSlcbiAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgYXBwcm9wcmlhdGUgY291bnRlclxuICAgICAgICAgICAgaWYgKHBhdGggPT09IG1lc3NhZ2VQYXRoKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZWRDb3VudHMubWVzc2FnZXMrK1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlZENvdW50cy5lcnJvcnMrK1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAvLyBMb2cgYnV0IGNvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgZmlsZXNcbiAgICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gcHJvY2VzcyBmaWxlICR7ZmlsZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIC8vIElnbm9yZSBpZiBkaXJlY3RvcnkgZG9lc24ndCBleGlzdFxuICAgICAgaWYgKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICdjb2RlJyBpbiBlcnJvciAmJlxuICAgICAgICBlcnJvci5jb2RlICE9PSAnRU5PRU5UJ1xuICAgICAgKSB7XG4gICAgICAgIGxvZ0Vycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gY2xlYW51cCBkaXJlY3RvcnkgJHtwYXRofTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWxldGVkQ291bnRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwT2xkTWVzc2FnZUZpbGVzSW5CYWNrZ3JvdW5kKCk6IHZvaWQge1xuICBjb25zdCBpbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGUoY2xlYW51cE9sZE1lc3NhZ2VGaWxlcylcblxuICAvLyBQcmV2ZW50IHRoZSBzZXRJbW1lZGlhdGUgZnJvbSBrZWVwaW5nIHRoZSBwcm9jZXNzIGFsaXZlXG4gIGltbWVkaWF0ZS51bnJlZigpXG59XG4iLAogICAgImltcG9ydCB7XG4gIFByb2plY3RDb25maWcsXG4gIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnIGFzIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnRGVmYXVsdCxcbiAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnIGFzIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZ0RlZmF1bHQsXG59IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcblxuZXhwb3J0IHR5cGUgUHJvamVjdENvbmZpZ0hhbmRsZXIgPSB7XG4gIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnOiAoKSA9PiBQcm9qZWN0Q29uZmlnXG4gIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZzogKGNvbmZpZzogUHJvamVjdENvbmZpZykgPT4gdm9pZFxufVxuXG4vLyBEZWZhdWx0IGNvbmZpZyBoYW5kbGVyIHVzaW5nIHRoZSByZWFsIGltcGxlbWVudGF0aW9uXG5jb25zdCBkZWZhdWx0Q29uZmlnSGFuZGxlcjogUHJvamVjdENvbmZpZ0hhbmRsZXIgPSB7XG4gIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnOiBnZXRDdXJyZW50UHJvamVjdENvbmZpZ0RlZmF1bHQsXG4gIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZzogc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnRGVmYXVsdCxcbn1cblxuLyoqXG4gKiBIYW5kbGVyIGZvciB0aGUgJ2FwcHJvdmVkLXRvb2xzIGxpc3QnIGNvbW1hbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUxpc3RBcHByb3ZlZFRvb2xzKFxuICBjd2Q6IHN0cmluZyxcbiAgcHJvamVjdENvbmZpZ0hhbmRsZXI6IFByb2plY3RDb25maWdIYW5kbGVyID0gZGVmYXVsdENvbmZpZ0hhbmRsZXIsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gcHJvamVjdENvbmZpZ0hhbmRsZXIuZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuICByZXR1cm4gYEFsbG93ZWQgdG9vbHMgZm9yICR7Y3dkfTpcXG4ke3Byb2plY3RDb25maWcuYWxsb3dlZFRvb2xzLmpvaW4oJ1xcbicpfWBcbn1cblxuLyoqXG4gKiBIYW5kbGVyIGZvciB0aGUgJ2FwcHJvdmVkLXRvb2xzIHJlbW92ZScgY29tbWFuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVtb3ZlQXBwcm92ZWRUb29sKFxuICB0b29sOiBzdHJpbmcsXG4gIHByb2plY3RDb25maWdIYW5kbGVyOiBQcm9qZWN0Q29uZmlnSGFuZGxlciA9IGRlZmF1bHRDb25maWdIYW5kbGVyLFxuKTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gIGNvbnN0IHByb2plY3RDb25maWcgPSBwcm9qZWN0Q29uZmlnSGFuZGxlci5nZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gIGNvbnN0IG9yaWdpbmFsVG9vbENvdW50ID0gcHJvamVjdENvbmZpZy5hbGxvd2VkVG9vbHMubGVuZ3RoXG4gIGNvbnN0IHVwZGF0ZWRBbGxvd2VkVG9vbHMgPSBwcm9qZWN0Q29uZmlnLmFsbG93ZWRUb29scy5maWx0ZXIodCA9PiB0ICE9PSB0b29sKVxuXG4gIGlmIChvcmlnaW5hbFRvb2xDb3VudCAhPT0gdXBkYXRlZEFsbG93ZWRUb29scy5sZW5ndGgpIHtcbiAgICBwcm9qZWN0Q29uZmlnLmFsbG93ZWRUb29scyA9IHVwZGF0ZWRBbGxvd2VkVG9vbHNcbiAgICBwcm9qZWN0Q29uZmlnSGFuZGxlci5zYXZlQ3VycmVudFByb2plY3RDb25maWcocHJvamVjdENvbmZpZylcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBSZW1vdmVkICR7dG9vbH0gZnJvbSB0aGUgbGlzdCBvZiBhcHByb3ZlZCB0b29sc2AsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIG1lc3NhZ2U6IGAke3Rvb2x9IHdhcyBub3QgaW4gdGhlIGxpc3Qgb2YgYXBwcm92ZWQgdG9vbHNgLFxuICAgIH1cbiAgfVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBNQ1BTZXJ2ZXJNdWx0aXNlbGVjdERpYWxvZyB9IGZyb20gJy4uL2NvbXBvbmVudHMvTUNQU2VydmVyTXVsdGlzZWxlY3REaWFsb2cuanMnXG5pbXBvcnQgeyBNQ1BTZXJ2ZXJBcHByb3ZhbERpYWxvZyB9IGZyb20gJy4uL2NvbXBvbmVudHMvTUNQU2VydmVyQXBwcm92YWxEaWFsb2cuanMnXG5pbXBvcnQgeyBnZXRNY3ByY1NlcnZlclN0YXR1cyB9IGZyb20gJy4vbWNwQ2xpZW50LmpzJ1xuaW1wb3J0IHsgZ2V0TWNwcmNDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVNY3ByY1NlcnZlckFwcHJvdmFscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbWNwcmNTZXJ2ZXJzID0gZ2V0TWNwcmNDb25maWcoKVxuICBjb25zdCBwZW5kaW5nU2VydmVycyA9IE9iamVjdC5rZXlzKG1jcHJjU2VydmVycykuZmlsdGVyKFxuICAgIHNlcnZlck5hbWUgPT4gZ2V0TWNwcmNTZXJ2ZXJTdGF0dXMoc2VydmVyTmFtZSkgPT09ICdwZW5kaW5nJyxcbiAgKVxuXG4gIGlmIChwZW5kaW5nU2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGNsZWFyU2NyZWVuQW5kUmVzb2x2ZSA9ICgpID0+IHtcbiAgICAgIC8vIENsZWFyIHNjcmVlbiBhZnRlciBkaWFsb2dcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXHgxYlsySlxceDFiWzNKXFx4MWJbSCcsICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChwZW5kaW5nU2VydmVycy5sZW5ndGggPT09IDEgJiYgcGVuZGluZ1NlcnZlcnNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyKFxuICAgICAgICA8TUNQU2VydmVyQXBwcm92YWxEaWFsb2dcbiAgICAgICAgICBzZXJ2ZXJOYW1lPXtwZW5kaW5nU2VydmVyc1swXX1cbiAgICAgICAgICBvbkRvbmU9eygpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC51bm1vdW50Py4oKVxuICAgICAgICAgICAgY2xlYXJTY3JlZW5BbmRSZXNvbHZlKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPixcbiAgICAgICAgeyBleGl0T25DdHJsQzogZmFsc2UgfSxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyKFxuICAgICAgICA8TUNQU2VydmVyTXVsdGlzZWxlY3REaWFsb2dcbiAgICAgICAgICBzZXJ2ZXJOYW1lcz17cGVuZGluZ1NlcnZlcnN9XG4gICAgICAgICAgb25Eb25lPXsoKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQudW5tb3VudD8uKClcbiAgICAgICAgICAgIGNsZWFyU2NyZWVuQW5kUmVzb2x2ZSgpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz4sXG4gICAgICAgIHsgZXhpdE9uQ3RybEM6IGZhbHNlIH0sXG4gICAgICApXG4gICAgfVxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0IH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgZ2V0VGhlbWUgfSBmcm9tICcuLi91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAnQGlua2pzL3VpJ1xuaW1wb3J0IHtcbiAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnLFxuICBnZXRDdXJyZW50UHJvamVjdENvbmZpZyxcbn0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHsgcGFydGl0aW9uIH0gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgTUNQU2VydmVyRGlhbG9nQ29weSB9IGZyb20gJy4vTUNQU2VydmVyRGlhbG9nQ29weS5qcydcbmltcG9ydCB7IHVzZUV4aXRPbkN0cmxDRCB9IGZyb20gJy4uL2hvb2tzL3VzZUV4aXRPbkN0cmxDRC5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgc2VydmVyTmFtZXM6IHN0cmluZ1tdXG4gIG9uRG9uZSgpOiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNQ1BTZXJ2ZXJNdWx0aXNlbGVjdERpYWxvZyh7XG4gIHNlcnZlck5hbWVzLFxuICBvbkRvbmUsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRoZW1lID0gZ2V0VGhlbWUoKVxuICBmdW5jdGlvbiBvblN1Ym1pdChzZWxlY3RlZFNlcnZlcnM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q3VycmVudFByb2plY3RDb25maWcoKVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBhcnJheXMgaWYgdGhleSBkb24ndCBleGlzdFxuICAgIGlmICghY29uZmlnLmFwcHJvdmVkTWNwcmNTZXJ2ZXJzKSB7XG4gICAgICBjb25maWcuYXBwcm92ZWRNY3ByY1NlcnZlcnMgPSBbXVxuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5yZWplY3RlZE1jcHJjU2VydmVycykge1xuICAgICAgY29uZmlnLnJlamVjdGVkTWNwcmNTZXJ2ZXJzID0gW11cbiAgICB9XG5cbiAgICAvLyBVc2UgcGFydGl0aW9uIHRvIHNlcGFyYXRlIGFwcHJvdmVkIGFuZCByZWplY3RlZCBzZXJ2ZXJzXG4gICAgY29uc3QgW2FwcHJvdmVkU2VydmVycywgcmVqZWN0ZWRTZXJ2ZXJzXSA9IHBhcnRpdGlvbihzZXJ2ZXJOYW1lcywgc2VydmVyID0+XG4gICAgICBzZWxlY3RlZFNlcnZlcnMuaW5jbHVkZXMoc2VydmVyKSxcbiAgICApXG5cbiAgICAvLyBBZGQgbmV3IHNlcnZlcnMgZGlyZWN0bHkgdG8gdGhlIHJlc3BlY3RpdmUgbGlzdHNcbiAgICBjb25maWcuYXBwcm92ZWRNY3ByY1NlcnZlcnMucHVzaCguLi5hcHByb3ZlZFNlcnZlcnMpXG4gICAgY29uZmlnLnJlamVjdGVkTWNwcmNTZXJ2ZXJzLnB1c2goLi4ucmVqZWN0ZWRTZXJ2ZXJzKVxuXG4gICAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKGNvbmZpZylcbiAgICBvbkRvbmUoKVxuICB9XG5cbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKCgpID0+IHByb2Nlc3MuZXhpdCgpKVxuXG4gIHVzZUlucHV0KChfaW5wdXQsIGtleSkgPT4ge1xuICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICAvLyBPbiBlc2NhcGUsIHRyZWF0IGFsbCBzZXJ2ZXJzIGFzIHJlamVjdGVkXG4gICAgICBjb25zdCBjb25maWcgPSBnZXRDdXJyZW50UHJvamVjdENvbmZpZygpXG4gICAgICBpZiAoIWNvbmZpZy5yZWplY3RlZE1jcHJjU2VydmVycykge1xuICAgICAgICBjb25maWcucmVqZWN0ZWRNY3ByY1NlcnZlcnMgPSBbXVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNlcnZlciBvZiBzZXJ2ZXJOYW1lcykge1xuICAgICAgICBpZiAoIWNvbmZpZy5yZWplY3RlZE1jcHJjU2VydmVycy5pbmNsdWRlcyhzZXJ2ZXIpKSB7XG4gICAgICAgICAgY29uZmlnLnJlamVjdGVkTWNwcmNTZXJ2ZXJzLnB1c2goc2VydmVyKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyhjb25maWcpXG4gICAgICBvbkRvbmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCb3hcbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIGdhcD17MX1cbiAgICAgICAgcGFkZGluZz17MX1cbiAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS53YXJuaW5nfVxuICAgICAgPlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPXt0aGVtZS53YXJuaW5nfT5cbiAgICAgICAgICBOZXcgTUNQIFNlcnZlcnMgRGV0ZWN0ZWRcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICBUaGlzIHByb2plY3QgY29udGFpbnMgYSAubWNwcmMgZmlsZSB3aXRoIHtzZXJ2ZXJOYW1lcy5sZW5ndGh9IE1DUFxuICAgICAgICAgIHNlcnZlcnMgdGhhdCByZXF1aXJlIHlvdXIgYXBwcm92YWwuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPE1DUFNlcnZlckRpYWxvZ0NvcHkgLz5cblxuICAgICAgICA8VGV4dD5QbGVhc2Ugc2VsZWN0IHRoZSBzZXJ2ZXJzIHlvdSB3YW50IHRvIGVuYWJsZTo8L1RleHQ+XG5cbiAgICAgICAgPE11bHRpU2VsZWN0XG4gICAgICAgICAgb3B0aW9ucz17c2VydmVyTmFtZXMubWFwKHNlcnZlciA9PiAoe1xuICAgICAgICAgICAgbGFiZWw6IHNlcnZlcixcbiAgICAgICAgICAgIHZhbHVlOiBzZXJ2ZXIsXG4gICAgICAgICAgfSkpfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17c2VydmVyTmFtZXN9XG4gICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IG1hcmdpbkxlZnQ9ezN9PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICB7ZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgICAgICA8PlByZXNzIHtleGl0U3RhdGUua2V5TmFtZX0gYWdhaW4gdG8gZXhpdDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlNwYWNlIHRvIHNlbGVjdCDCtyBFbnRlciB0byBjb25maXJtIMK3IEVzYyB0byByZWplY3QgYWxsPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ2luaydcbmltcG9ydCBMaW5rIGZyb20gJ2luay1saW5rJ1xuXG5leHBvcnQgZnVuY3Rpb24gTUNQU2VydmVyRGlhbG9nQ29weSgpOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dD5cbiAgICAgICAgTUNQIHNlcnZlcnMgcHJvdmlkZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdG8gQ2xhdWRlLiBUaGV5IG1heSBleGVjdXRlXG4gICAgICAgIGNvZGUsIG1ha2UgbmV0d29yayByZXF1ZXN0cywgb3IgYWNjZXNzIHN5c3RlbSByZXNvdXJjZXMgdmlhIHRvb2wgY2FsbHMuXG4gICAgICAgIEFsbCB0b29sIGNhbGxzIHdpbGwgcmVxdWlyZSB5b3VyIGV4cGxpY2l0IGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uIEZvclxuICAgICAgICBtb3JlIGluZm9ybWF0aW9uLCBzZWV7JyAnfVxuICAgICAgICA8TGluayB1cmw9XCJodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9zL2NsYXVkZS1jb2RlLW1jcFwiPlxuICAgICAgICAgIE1DUCBkb2N1bWVudGF0aW9uXG4gICAgICAgIDwvTGluaz5cbiAgICAgIDwvVGV4dD5cblxuICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgIFJlbWVtYmVyOiBZb3UgY2FuIGFsd2F5cyBjaGFuZ2UgdGhlc2UgY2hvaWNlcyBsYXRlciBieSBydW5uaW5nIGBjbGF1ZGVcbiAgICAgICAgbWNwIHJlc2V0LW1jcHJjLWNob2ljZXNgXG4gICAgICA8L1RleHQ+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luaydcbmltcG9ydCB7IGdldFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICdAaW5ranMvdWknXG5pbXBvcnQge1xuICBzYXZlQ3VycmVudFByb2plY3RDb25maWcsXG4gIGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnLFxufSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBNQ1BTZXJ2ZXJEaWFsb2dDb3B5IH0gZnJvbSAnLi9NQ1BTZXJ2ZXJEaWFsb2dDb3B5LmpzJ1xuaW1wb3J0IHsgdXNlRXhpdE9uQ3RybENEIH0gZnJvbSAnLi4vaG9va3MvdXNlRXhpdE9uQ3RybENELmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBzZXJ2ZXJOYW1lOiBzdHJpbmdcbiAgb25Eb25lKCk6IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1DUFNlcnZlckFwcHJvdmFsRGlhbG9nKHtcbiAgc2VydmVyTmFtZSxcbiAgb25Eb25lLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcbiAgZnVuY3Rpb24gb25DaGFuZ2UodmFsdWU6ICd5ZXMnIHwgJ25vJykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEN1cnJlbnRQcm9qZWN0Q29uZmlnKClcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICd5ZXMnOiB7XG4gICAgICAgIGlmICghY29uZmlnLmFwcHJvdmVkTWNwcmNTZXJ2ZXJzKSB7XG4gICAgICAgICAgY29uZmlnLmFwcHJvdmVkTWNwcmNTZXJ2ZXJzID0gW11cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmZpZy5hcHByb3ZlZE1jcHJjU2VydmVycy5pbmNsdWRlcyhzZXJ2ZXJOYW1lKSkge1xuICAgICAgICAgIGNvbmZpZy5hcHByb3ZlZE1jcHJjU2VydmVycy5wdXNoKHNlcnZlck5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgc2F2ZUN1cnJlbnRQcm9qZWN0Q29uZmlnKGNvbmZpZylcbiAgICAgICAgb25Eb25lKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ25vJzoge1xuICAgICAgICBpZiAoIWNvbmZpZy5yZWplY3RlZE1jcHJjU2VydmVycykge1xuICAgICAgICAgIGNvbmZpZy5yZWplY3RlZE1jcHJjU2VydmVycyA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb25maWcucmVqZWN0ZWRNY3ByY1NlcnZlcnMuaW5jbHVkZXMoc2VydmVyTmFtZSkpIHtcbiAgICAgICAgICBjb25maWcucmVqZWN0ZWRNY3ByY1NlcnZlcnMucHVzaChzZXJ2ZXJOYW1lKVxuICAgICAgICB9XG4gICAgICAgIHNhdmVDdXJyZW50UHJvamVjdENvbmZpZyhjb25maWcpXG4gICAgICAgIG9uRG9uZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXhpdFN0YXRlID0gdXNlRXhpdE9uQ3RybENEKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcblxuICB1c2VJbnB1dCgoX2lucHV0LCBrZXkpID0+IHtcbiAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgb25Eb25lKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Qm94XG4gICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICBnYXA9ezF9XG4gICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUud2FybmluZ31cbiAgICAgID5cbiAgICAgICAgPFRleHQgYm9sZCBjb2xvcj17dGhlbWUud2FybmluZ30+XG4gICAgICAgICAgTmV3IE1DUCBTZXJ2ZXIgRGV0ZWN0ZWRcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICBUaGlzIHByb2plY3QgY29udGFpbnMgYSAubWNwcmMgZmlsZSB3aXRoIGFuIE1DUCBzZXJ2ZXIgdGhhdCByZXF1aXJlc1xuICAgICAgICAgIHlvdXIgYXBwcm92YWw6XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgYm9sZD57c2VydmVyTmFtZX08L1RleHQ+XG5cbiAgICAgICAgPE1DUFNlcnZlckRpYWxvZ0NvcHkgLz5cblxuICAgICAgICA8VGV4dD5EbyB5b3Ugd2FudCB0byBhcHByb3ZlIHRoaXMgTUNQIHNlcnZlcj88L1RleHQ+XG5cbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgIHsgbGFiZWw6ICdZZXMsIGFwcHJvdmUgdGhpcyBzZXJ2ZXInLCB2YWx1ZTogJ3llcycgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdObywgcmVqZWN0IHRoaXMgc2VydmVyJywgdmFsdWU6ICdubycgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIG9uQ2hhbmdlPXt2YWx1ZSA9PiBvbkNoYW5nZSh2YWx1ZSBhcyAneWVzJyB8ICdubycpfVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IG1hcmdpbkxlZnQ9ezN9PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICB7ZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgICAgICA8PlByZXNzIHtleGl0U3RhdGUua2V5TmFtZX0gYWdhaW4gdG8gZXhpdDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PkVudGVyIHRvIGNvbmZpcm0gwrcgRXNjIHRvIHJlamVjdDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJveCwgTmV3bGluZSwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICdpbmsnXG5pbXBvcnQgeyBnZXRUaGVtZSB9IGZyb20gJy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnQGlua2pzL3VpJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnaW5rJ1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgQ29uZmlnUGFyc2VFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9ycy5qcydcbmltcG9ydCB7IHVzZUV4aXRPbkN0cmxDRCB9IGZyb20gJy4uL2hvb2tzL3VzZUV4aXRPbkN0cmxDRC5qcydcbmludGVyZmFjZSBJbnZhbGlkQ29uZmlnSGFuZGxlclByb3BzIHtcbiAgZXJyb3I6IENvbmZpZ1BhcnNlRXJyb3Jcbn1cblxuaW50ZXJmYWNlIEludmFsaWRDb25maWdEaWFsb2dQcm9wcyB7XG4gIGZpbGVQYXRoOiBzdHJpbmdcbiAgZXJyb3JEZXNjcmlwdGlvbjogc3RyaW5nXG4gIG9uRXhpdDogKCkgPT4gdm9pZFxuICBvblJlc2V0OiAoKSA9PiB2b2lkXG59XG5cbi8qKlxuICogRGlhbG9nIHNob3duIHdoZW4gdGhlIENsYXVkZSBjb25maWcgZmlsZSBjb250YWlucyBpbnZhbGlkIEpTT05cbiAqL1xuZnVuY3Rpb24gSW52YWxpZENvbmZpZ0RpYWxvZyh7XG4gIGZpbGVQYXRoLFxuICBlcnJvckRlc2NyaXB0aW9uLFxuICBvbkV4aXQsXG4gIG9uUmVzZXQsXG59OiBJbnZhbGlkQ29uZmlnRGlhbG9nUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKClcblxuICAvLyBIYW5kbGUgZXNjYXBlIGtleVxuICB1c2VJbnB1dCgoXywga2V5KSA9PiB7XG4gICAgaWYgKGtleS5lc2NhcGUpIHtcbiAgICAgIG9uRXhpdCgpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGV4aXRTdGF0ZSA9IHVzZUV4aXRPbkN0cmxDRCgoKSA9PiBwcm9jZXNzLmV4aXQoMCkpXG5cbiAgLy8gSGFuZGxlciBmb3IgU2VsZWN0IG9uQ2hhbmdlXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSAnZXhpdCcpIHtcbiAgICAgIG9uRXhpdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uUmVzZXQoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCb3hcbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5lcnJvcn1cbiAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgIHdpZHRoPXs3MH1cbiAgICAgICAgZ2FwPXsxfVxuICAgICAgPlxuICAgICAgICA8VGV4dCBib2xkPkNvbmZpZ3VyYXRpb24gRXJyb3I8L1RleHQ+XG5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXQgPFRleHQgYm9sZD57ZmlsZVBhdGh9PC9UZXh0PiBjb250YWluc1xuICAgICAgICAgICAgaW52YWxpZCBKU09OLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD57ZXJyb3JEZXNjcmlwdGlvbn08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0IGJvbGQ+Q2hvb3NlIGFuIG9wdGlvbjo8L1RleHQ+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IGxhYmVsOiAnRXhpdCBhbmQgZml4IG1hbnVhbGx5JywgdmFsdWU6ICdleGl0JyB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnUmVzZXQgd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nLCB2YWx1ZTogJ3Jlc2V0JyB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICAgIHtleGl0U3RhdGUucGVuZGluZyA/IChcbiAgICAgICAgPFRleHQgZGltQ29sb3I+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC9UZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPE5ld2xpbmUgLz5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dJbnZhbGlkQ29uZmlnRGlhbG9nKHtcbiAgZXJyb3IsXG59OiBJbnZhbGlkQ29uZmlnSGFuZGxlclByb3BzKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICByZW5kZXIoXG4gICAgICA8SW52YWxpZENvbmZpZ0RpYWxvZ1xuICAgICAgICBmaWxlUGF0aD17ZXJyb3IuZmlsZVBhdGh9XG4gICAgICAgIGVycm9yRGVzY3JpcHRpb249e2Vycm9yLm1lc3NhZ2V9XG4gICAgICAgIG9uRXhpdD17KCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgICB9fVxuICAgICAgICBvblJlc2V0PXsoKSA9PiB7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgIGVycm9yLmZpbGVQYXRoLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXJyb3IuZGVmYXVsdENvbmZpZywgbnVsbCwgMiksXG4gICAgICAgICAgKVxuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgICB9fVxuICAgICAgLz4sXG4gICAgICB7IGV4aXRPbkN0cmxDOiBmYWxzZSB9LFxuICAgIClcbiAgfSlcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs0bUJBQUEsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBRzVELElBQU0sSUFBaUIsT0FBTyxVQUFVLFNBU3hDLFNBQVMsR0FBTyxDQUFDLEVBQUssQ0FDcEIsT0FBUSxJQUFlLEtBQUssQ0FBRyxPQUN4QixxQkFDQSx5QkFDQSx3QkFDSCxNQUFPLFdBRVAsT0FBTyxHQUFhLEVBQUssS0FBSyxHQVVwQyxTQUFTLEVBQVMsQ0FBQyxFQUFLLEVBQVcsQ0FDakMsT0FBTyxJQUFlLEtBQUssQ0FBRyxJQUFNLFdBQVcsS0FVakQsU0FBUyxHQUFZLENBQUMsRUFBSyxDQUN6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UyxHQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLEtBQUssSUFBRSxLQUFLLFFBQVEsR0FBRyxJQUFFLElBQUksSUFBRSxJQUFFLFVBQVUsSUFBSSxJQUNyZixJQUFFLFlBQVksSUFBRSxJQUFFLElBQUUsR0FBRSxTQUFTLEVBQUUsSUFBRSxxQkFBcUIsR0FBRyxJQUFJLElBQUUsTUFBTSxRQUFRLElBQUUsT0FBTyxVQUFVLGVBQWUsSUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLElBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLE9BQU8sR0FBRyxTQUFTLEVBQUUsRUFDeEssU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFTLEdBQU4sS0FBUSxJQUFJLEtBQWMsRUFBRSxNQUFOLFNBQVksRUFBRSxFQUFFLEtBQWMsRUFBRSxNQUFOLFNBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLFVBQVUsT0FBTyxFQUFFLEdBQU8sSUFBSixFQUFNLEVBQUUsU0FBUyxFQUFPLFFBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBVyxFQUFFLEtBQU4sU0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sSUFBRSxPQUFPLEVBQzVhLFNBQVMsR0FBQyxDQUFDLEVBQUUsRUFB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WSxDQUMvQyxHQUFHLEVBQUcsQ0FDSixPQUFPLEtBQUssSUFBTSxVQUVwQixHQUFHLENBQUMsRUFBRyxDQUNMLEVBQUksR0FBWSxVQUFhLENBQUMsRUFDOUIsS0FBSyxJQUFNLFNBQVcsR0FFeEIsV0FBWSxHQUNaLGFBQWMsRUFDaEIsQ0FBQyxFQUVELE9BQU8sZUFBZSxHQUFJLFVBQVcsT0FBUSxDQUMzQyxHQUFHLEVBQUcsQ0FDSixPQUFPLEtBQUssSUFBTSxNQUVwQixHQUFHLENBQUMsRUFBRyxDQUNMLEVBQUksR0FBWSxVQUFhLENBQUMsRUFDOUIsS0FBSyxJQUFNLEtBQU8sR0FFcEIsV0FBWSxHQUNaLGFBQWMsRUFDaEIsQ0FBQyxFQUVELE9BQU8sZUFBZSxHQUFJLFVBQVcsV0FBWSxDQUMvQyxHQUFHLEVBQUcsQ0FDSixPQUFPLEtBQUssSUFBTSxVQUVwQixHQUFHLENBQUMsRUFBRyxDQUNMLEVBQUksR0FBWSxVQUFhLENBQUMsRUFDOUIsS0FBSyxJQUFNLFNBQVcsR0FFeEIsV0FBWSxHQUNaLGFBQWMsRUFDaEIsQ0FBQyxFQUVELE9BQU8sZUFBZSxHQUFJLFVBQVcsT0FBUSxDQUMzQyxHQUFHLEVBQUcsQ0FDSixPQUFPLEtBQUssSUFBTSxNQUVwQixHQUFHLENBQUMsRUFBRyxDQUNMLEVBQUksR0FBWSxVQUFhLENBQUMsRUFDOUIsS0FBSyxJQUFNLEtBQU8sR0FFcEIsV0FBWSxHQUNaLGFBQWMsRUFDaEIsQ0FBQyxFQUVELE9BQU8sZUFBZSxHQUFJLFVBQVcsV0FBWSxDQUMvQyxHQUFHLEVBQUcsQ0FDSixPQUFPLEtBQUssSUFBTSxVQUVwQixHQUFHLENBQUMsRUFBRyxDQUNMLEVBQUksR0FBWSxVQUFhLENBQUMsRUFDOUIsS0FBSyxJQUFNLFNBQVcsR0FFeEIsV0FBWSxHQUNaLGFBQWMsRUFDaEIsQ0FBQyxFQUVELE9BQU8sZUFBZSxHQUFJLFVBQVcsU0FBVSxDQUM3QyxHQUFHLEVBQUcsQ0FDSixPQUFPLEtBQUssSUFBTSxRQUVwQixHQUFHLENBQUMsRUFBRyxDQUNMLEVBQUksR0FBWSxV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LEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUUsRUFBTyxPQUFFLEdBQUMsRUFBa0gsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFlLE9BQU8sR0FBbkIsV0FBcUIsTUFBTSxJQUFJLFVBQVUsNEJBQTRCLEVBQUUsT0FBTyxTQUFTLFVBQVUsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLE9BQU8sR0FBRSxDQUFDLEdBQUcsTUFBTSxFQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxRQUFRLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBVyxNQUFDLEVBQUUsS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLFFBQVEsRUFBRSxLQUFLLE1BQU0sS0FBTSxPQUFNLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQU0sRUFBRSxLQUFLLE1BQVUsRUFBRSxFQUFVLEVBQUUsVUFBVSxTQUFwQixRQUE2QixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBVyxNQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxFQUFFLE1BQU0sS0FBSyxLQUFLLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBTSxFQUFFLEtBQUssT0FBVyxFQUFFLEVBQVEsRUFBRSxLQUFLLFFBQVksRUFBRSxFQUFFLEVBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsT0FBZSxJQUFSLFFBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLFFBQVEsRUFBRSxJQUFJLElB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RUFBRSxXQUFXLElBQUksRUFBRSxTQUFTLEdBQUcsR0FBRSxFQUFFLGVBQWUsRUFBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFRLE1BQUksR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFNLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUcsQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLElBQUksR0FBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBYyxFQUFFLFNBQWIsV0FBc0IsRUFBRSxJQUFJLElBQU0sRUFBRSxJQUFHLENBQUMsRUFBYyxFQUFFLGFBQWQsVUFBeUIsSUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLFFBQVEsa0JBQWtCLE1BQU0sRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFVLFlBQUosRUFBb0IsWUFBSixHQUFFLEVBQWMsT0FBTyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksR0FBRyxJQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBTSxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxJQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsWUFBWSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsSUFBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLENBQUssRUFBRSxrQkFBTixHQUF1QixFQUFFLGlCQUFpQixHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsNkJBQTZCLEdBQUcsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxDQUFRLEVBQUUsZUFBVCxPQUF3QixFQUFFLGFBQWEsd0NBQTZDLE9BQUUsRUFBRSxhQUFhLE1BQU0sS0FBSyxFQUFFLGFBQWEsTUFBTSxTQUFTLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxF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QUFDLEVBQUUsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixJQUFJLEdBQUUsRUFBRSxRQUFTLEtBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxVQUFVLHNDQUFzQyxrREFBa0QsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFNLGNBQWMsR0FBRyxFQUFFLEdBQVksSUFBSixPQUFNLE9BQU8sRUFBRSxHQUFHLElBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLElBQUksV0FBVyx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQU0sS0FBSyxHQUFHLEVBQUUsT0FBTyxJQUFJLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQU0sRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLGNBQWMsRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLEtBQUssTUFBTSxDQUFDLGNBQXVCLElBQUosT0FBVyxPQUFFLElBQUUsQ0FBQyxFQUFFLEtBQWMsSUFBSixPQUFXLE9BQUUsSUFBRyxFQUFFLEdBQUcsMEJBQTBCLENBQUMsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxDQUFDLEVBQUUsS0FBRyxJQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxDQUFDLEVBQUUsS0FBRyxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FB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QUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFHLENBQUMsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBVSxFQUFFLHVCQUFOLFNBQTZCLEdBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsc0JBQTJCLE9BQUUsRUFBRSxxQkFBMEIsT0FBRSxFQUFFLG1CQUFtQixZQUFZLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBVSxFQUFFLHdCQUFOLFNBQThCLEVBQUUsc0JBQTJCLE1BQUMsRUFBRSxFQUFFLHNCQUEyQixPQUFFLEVBQUUscUJBQTBCLE9BQUUsRUFBRSxtQkFBbUIsYUFBMnhCLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBUyxFQUFFLEdBQUcsS0FBRyxDQUFDLEVBQUUsRUFBRyxFQUFNLEVBQUUsUUFBUSxRQUFhLE1BQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFNLEdBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSSxFQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxHQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRSxFQUFFLE1BQU8sSUFBSSxHQUFFLEVBQUUsS0FBSyxFQUFHLFFBQUssR0FBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEdBQUUsS0FBSyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUksQ0FBRSxHQUFHLEVBQUUsR0FBRSxFQUFDLElBQUcsRUFBRSxFQUFHLEVBQUUsR0FBRSxFQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFjLElBQVgsU0FBYSxHQUFPLE1BQUMsRUFBZSxJQUFiLFlBQTRCLElBQVosVUFBYyxHQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUssR0FBUSxNQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUMsQ0FBQyxHQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUcsRUFBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBQyxFQUFHLEdBQUcsRUFBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFHLEVBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUMsRUFBRyxHQUFHLEVBQUMsR0FBRyxLQUFLLEdBQVksSUFBSixTQUFRLEVBQUUsSUFBSSxDQUFDLElBQU0sR0FBVyxFQUFFLFNBQU4sT0FBYSxFQUFFLE9BQU8sSUFBSSxJQUFHLFVBQVUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFNLElBQWlCLElBQWIsV0FBZSxFQUFFLE1BQU0sRUFBQyxFQUFFLEdBQU8sTUFBQyxDQUFFLEVBQUUsR0FBRyxFQUFFLEtBQU0sSUFBaUIsSUFBYixXQUFlLEVBQUUsT0FBTyxFQUFDLEVBQUUsR0FBTyxNQUFDLENBQUUsRUFBRSxHQUFHLElBQUksUUFBUSxJQUFJLEVBQUUsSUFBSyxNQUFHLEdBQUUsQ0FBRSxDQUFDLEVBQUcsR0FBRyxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsY0FBYyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQWUsSUFBWixVQUFjLEdBQUUsQ0FBQyxFQUFPLFFBQWdCLElBQWIsWUFBNEIsSUFBWixVQUFjLEVBQUUsQ0FBQyxFQUFPLFFBQWMsSUFBWCxTQUFhLEVBQUUsRUFBTyxRQUFHLEdBQWMsSUFBWCxTQUFhLENBQUMsSUFBTSxHQUFFLElBQUksVUFBVSw2RUFBNkUsRUFBRSxFQUFFLEdBQUUsR0FBRyxFQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFDLEVBQUcsR0FBRyxFQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxFQUFFLEdBQUUsQ0FBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLE9BQW1CLElBQWIsWUFBZ0IsRUFBRSxHQUFFLEVBQUUsSUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEdBQUUsT0FBTyxHQUFFLFNBQVMsRUFBQyxFQUFFLENBQUMsR0FBRyxLQUFJLEVBQUUsT0FBTyxHQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUUsRUFBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsRUFBRSxLQUFLLFNBQVMsRUFBQyxFQUFFLENBQUMsT0FBTyxHQUFFLEdBQUUsR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUMsRUFBSSxNQUFHLEdBQUUsR0FBRyxFQUFDLENBQUUsRUFBRSxHQUFFLEVBQUUsRUFBQyxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFFLEVBQUUsSUFBRSxFQUFFLEVBQUMsR0FBRyxTQUFTLEVBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxHQUFPLE9BQUUsR0FBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQVcsSUFBSixRQUFPLEVBQUUsb0JBQW9CLFFBQVEsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBTyxNQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFFLEdBQUUsRUFBRSxPQUFRLFFBQVEsRUFBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLFVBQVUsTUFBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUcsRUFBRyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFTLEVBQUUsR0FBRyxLQUFHLENBQUMsRUFBRSxFQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxPQUFRLE9BQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUMsRUFBRSxHQUFHLEdBQUcsRUFBTyxNQUFDLEdBQUcsS0FBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFFLEVBQUUsS0FBSyxFQUFHLEtBQUcsQ0FBQyxJQUFJLEdBQUUsR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFVLEdBQUUsRUFBRSxlQUFaLE1BQW1DLEtBQUosUUFBTyxHQUFFLFFBQVEsQ0FBQyxHQUFVLEdBQUUsRUFBRSxlQUFaLE1BQW1DLEtBQUosUUFBTyxHQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFPLE1BQUMsRUFBRSxLQUFLLElBQU0sR0FBRSxFQUFFLE1BQU0sR0FBRSxHQUFNLEVBQUUsR0FBRSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFHLEVBQUMsRUFBRSxNQUFNLEdBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBUSxLQUFLLEVBQUUsR0FBRyxLQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQU0sR0FBRSxHQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxLQUFLLENBQUMsRUFBRyxNQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBTSxHQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFFLEtBQUssQ0FBQyxJQUFHLEdBQUUsTUFBTSxFQUFFLElBQUcsR0FBRSxNQUFNLEVBQUUsSUFBTSxHQUFFLEdBQUUsTUFBTSxPQUFnQixLQUFKLFNBQVEsSUFBRyxHQUFFLFlBQVksbUJBQW1CLEVBQUMsRUFBRSxLQUFXLEVBQUUsR0FBRSxlQUFaLE1BQW1DLElBQUosUUFBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUcsSUFBRyxFQUFPLE1BQUMsRUFBRSxLQUFLLElBQU0sR0FBRSxHQUFFLE1BQU0sR0FBRyxHQUFFLElBQUcsR0FBRSxZQUFZLG1CQUFtQixFQUFDLEVBQU0sS0FBQyxJQUFJLEdBQUUsR0FBRyxDQUFDLEdBQUUsSUFBRyxFQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsT0FBTyxHQUFFLE1BQU0sRUFBQyxFQUFFLEdBQUUsTUFBTSxFQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBQyxDQUFDLEVBQUUsS0FBSyxJQUFHLEdBQUUsWUFBWSxtQkFBbUIsRUFBQyxFQUFFLEdBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBUSxLQUFLLEVBQUUsR0FBRyxLQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBTyxNQUFDLEVBQUUsRUFBRSxHQUFHLElBQU0sRUFBRSxFQUFFLFlBQVksT0FBYyxJQUFQLEtBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFPLE1BQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFPLE1BQUMsRUFBRSxFQUFFLEdBQUcsSUFBTSxFQUFFLEVBQUUsWUFBWSxPQUFjLElBQVAsS0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQU8sTUFBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQU0sR0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxPQUFPLEVBQUMsRUFBRSxFQUFFLEVBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBTSxHQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUUsRUFBQyxFQUFFLE9BQU8sRUFBRSxJQUFNLEVBQUUsSUFBSSxHQUFlLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUUsSUFBSSxHQUFlLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLFVBQVUsRUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFTLEVBQUUsR0FBRyxLQUFHLENBQUMsRUFBRSxFQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLEdBQU8sTUFBQyxJQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsS0FBSyxFQUFHLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQU8sTUFBQyxFQUFFLEtBQUssSUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsTUFBUSxLQUFLLEVBQUUsR0FBRyxLQUFNLEVBQUUsR0FBTyxNQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQU0sRUFBRSxJQUFJLEdBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksR0FBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBRSxFQUFFLE9BQVEsTUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQU8sTUFBQyxFQUFFLEtBQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBMmtDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUUsQ0FBQyxNQUFNLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBRSwyQkFBMkIsR0FBRyxhQUFhLElBQWlDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBK0osSUFBdEosUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFNLEVBQUUsRUFBRSwwQkFBMEIsSUFBSSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFLFNBQVMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FBRyxJQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFRLE9BQU8sR0FBRyxFQUFFLFNBQVMsT0FBTyxLQUFLLEVBQUUsV0FBVyxJQUFJLEVBQUUsU0FBUyxHQUFHLEdBQUUsRUFBRSxlQUFlLEVBQUcsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBUSxNQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQW9CLE9BQUUsRUFBRSxpQkFBc0IsT0FBRSxFQUFFLHVCQUE0QixPQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLDBCQUF1QyxFQUFFLFNBQWYsYUFBd0IsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBRyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBTSxFQUFFLEVBQUUsMEJBQTBCLE9BQU8sT0FBa0IsSUFBWixVQUFjLEtBQWdCLElBQVgsU0FBYSxFQUFFLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGlCQUE4QixFQUFFLDBCQUEwQixTQUF6QyxXQUFnRCxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBTSxFQUFFLE9BQU8sT0FBTyxHQUFnQyxTQUFTLEVBQU0sRUFBRSxFQUFFLEVBQUUsRUFBVyxFQUFFLFFBQU4sT0FBWSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQVcsRUFBRSxPQUFOLE9BQVcsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBTyxNQUFDLEVBQUUsRUFBVyxFQUFFLFNBQU4sT0FBYSxLQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxHQUFPLE1BQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsMEJBQTBCLEVBQUUsRUFBRSxPQUFZLE9BQUUsRUFBRSxnQkFBcUIsT0FBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUUsU0FBUyxHQUFHLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLDBCQUEwQixFQUFFLEdBQUUsR0FBRSxFQUFFLENBQUMsRUFBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQVEsTUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxVQUFVLDZDQUE2Qyx5REFBeUQsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRSxFQUFFLENBQUMsRUFBRSxLQUFHLEdBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxDQUFDLEVBQUUsS0FBRyxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUcsR0FBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFjLEVBQUUsR0FBRyxPQUFoQixRQUFxQixNQUFNLElBQUksVUFBVSxHQUFHLE1BQU0sNERBQTRELEVBQUUsT0FBTyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQWEsRUFBRSxHQUFHLE9BQWYsT0FBb0IsTUFBTSxJQUFJLFVBQVUsR0FBRyxNQUFNLGtFQUFrRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQU0sRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLGFBQWEsRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLGNBQWMsRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLGFBQWEsRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLE9BQU8sT0FBZ0IsSUFBSixRQUFPLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBYSxPQUFPLEdBQWpCLFVBQTJCLElBQVAsS0FBUyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQWlCLE9BQU8sRUFBRSxTQUFwQixVQUE0QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxVQUFVLEdBQUcsMEJBQTBCLEdBQUcsRUFBRSxHQUFHLDRCQUE0QixFQUFFLENBQUMsYUFBYSxRQUFRLENBQUMsRUFBRSxjQUFjLFFBQVEsQ0FBQyxFQUFFLGFBQWEsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxJQUFNLEVBQVEsR0FBTixLQUFhLE9BQUUsRUFBRSxTQUFTLElBQUUsRUFBRSxXQUFXLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUUsQ0FBQyxFQUFFLE1BQU0sSUFBSSxVQUFVLEdBQUcsNEJBQTRCLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixFQUFFLElBQU0sRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLFNBQVMsT0FBTyxJQUFFLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFFLENBQUMsRUFBRSxNQUFNLElBQUksVUFBVSxHQUFHLDRCQUE0QixHQUFHLEVBQUUsR0FBRyw4QkFBOEIsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBcWdCLE1BQU0sRUFBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFVLElBQUosT0FBTSxFQUFFLEtBQUssSUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQU0sRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxJQUFNLEVBQUUsRUFBRSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsc0JBQXNCLEVBQVEsR0FBTixLQUFhLE9BQUUsRUFBRSxPQUFPLEVBQVEsR0FBTixLQUFhLE9BQUUsRUFBRSxLQUFLLEVBQVEsR0FBTixLQUFhLE9BQUUsRUFBRSxNQUFNLEVBQVEsR0FBTixLQUFhLE9BQUUsRUFBRSxLQUFLLE1BQU0sQ0FBQyxzQkFBK0IsSUFBSixPQUFXLE9BQUUsSUFBRSxFQUFFLEdBQUcsMkNBQTJDLEVBQUUsT0FBZ0IsSUFBSixPQUFXLE9BQUUsSUFBRyxFQUFFLEVBQUUsR0FBRyw0QkFBNEIsRUFBRSxLQUFjLElBQUosT0FBVyxPQUFFLElBQUcsRUFBRSxFQUFFLEdBQUcsMEJBQTBCLEVBQUUsTUFBZSxJQUFKLE9BQVcsT0FBRSxJQUFHLEVBQUUsRUFBRSxHQUFHLDJCQUEyQixFQUFFLEtBQWMsSUFBSixPQUFXLE9BQUUsSUFBRyxFQUFFLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLFdBQVcsRUFBRSxRQUFhLE9BQUUsRUFBRSxhQUFrQixPQUFFLEVBQUUsV0FBVyxHQUFhLEVBQUUsT0FBWixRQUFpQixDQUFDLEdBQVksRUFBRSxPQUFOLE9BQVcsTUFBTSxJQUFJLFdBQVcsNERBQTRELEVBQUUsSUFBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFNLEtBQUMsSUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFPLE9BQU0sRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLFFBQVEsRUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFFLElBQUksVUFBVSxrREFBa0QsQ0FBQyxFQUFFLElBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsV0FBVyxFQUFFLE9BQWdCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQU0sRUFBUSxHQUFOLEtBQWEsT0FBRSxFQUFFLEtBQUssTUFBTSxDQUFDLEtBQWMsSUFBSixPQUFXLE9BQUUsSUFBRyxFQUFFLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLE9BQWhKLE9BQXFKLElBQUksR0FBNEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLEdBQXlCLENBQUMsR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxhQUFhLEVBQUUsR0FBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQU0sRUFBRSxJQUFHLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxJQUFHLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLE9BQU8sTUFBTSxJQUFJLFVBQVUsZ0ZBQWdGLEVBQUUsR0FBRyxFQUFFLFNBQVMsT0FBTyxNQUFNLElBQUksVUFBVSxnRkFBZ0YsRUFBRSxPQUFPLEdBQUUsSUFBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRSxJQUFJLEVBQUUsT0FBTyxHQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBWSxJQUFKLE9BQU0sT0FBTyxHQUFFLHNDQUFzQyxFQUFFLElBQUksSUFBRSxDQUFDLEVBQUUsT0FBTyxHQUFFLElBQUksVUFBVSwyRUFBMkUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFHLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxHQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssT0FBTyxHQUFFLElBQUksVUFBVSwyRUFBMkUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxHQUFFLElBQUksVUFBVSwyRUFBMkUsQ0FBQyxFQUFFLElBQUcsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxHQUFHLEtBQUssT0FBTyxNQUFNLElBQUksVUFBVSwrQ0FBK0MsRUFBRSxPQUFPLElBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsUUFBUSxFQUFFLE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sT0FBTyxHQUFFLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxJQUFNLEVBQVEsR0FBTixLQUFhLE9BQUUsRUFBRSxjQUFjLE1BQU0sQ0FBQyxjQUFjLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFFLENBQUMsTUFBTSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUUsMkJBQTJCLEdBQUcsYUFBYSxJQUFnQixTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxVQUFOLE9BQWMsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsR0FBYyxFQUFFLFNBQWIsU0FBb0IsT0FBTyxHQUFPLE1BQUMsRUFBRSxHQUFlLEVBQUUsU0FBZCxVQUFxQixPQUFPLEdBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBTSxFQUFFLEVBQUUsUUFBUSxHQUFZLElBQUosUUFBTyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixJQUFJLEdBQUUsRUFBRSxRQUFTLEtBQUcsQ0FBQyxFQUFFLFlBQWlCLE1BQUMsRUFBRyxFQUFFLE9BQU8sR0FBRSxFQUFFLDBCQUEwQixLQUFHLENBQUMsRUFBRSxHQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxTQUFTLElBQU0sRUFBRSxFQUFFLFFBQVEsR0FBWSxJQUFKLFNBQVEsSUFBRSxDQUFDLEVBQUUsR0FBRSxDQUFDLEdBQUcsQ0FBQyxJQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxJQUFJLEdBQUUsRUFBRSxRQUFTLEtBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRyxHQUFHLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxVQUFVLEVBQUUsYUFBYSxFQUFFLElBQU0sRUFBRSxFQUFFLFFBQWlCLElBQUosU0FBUSxJQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxFQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsSUFBRyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLFVBQVUsNEJBQTRCLHdDQUF3QyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsSUFBTSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsY0FBYyxPQUFPLElBQUUsRUFBRSxnQkFBZ0IscUJBQXFCLEVBQUUsQ0FBQyxjQUFjLElBQUUsQ0FBQyxDQUFDLEVBQWkwQixNQUFNLEVBQXlCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxFQUFFLElBQUcsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLHdDQUF3QyxFQUFFLGlCQUFrQixjQUFhLEVBQUUsQ0FBQyxJQUFJLElBQUcsSUFBSSxFQUFFLE1BQU0sSUFBRyxlQUFlLEVBQUUsT0FBTyxLQUFLLDJDQUE0QyxLQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUcsSUFBSSxFQUFFLE1BQU0sSUFBRyxNQUFNLEVBQUUsT0FBTyxJQUFHLENBQUMsU0FBUyxHQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxVQUFVLHVDQUF1QyxtREFBbUQsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFFLENBQUMsTUFBTSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUUseUNBQXlDLEdBQUcsYUFBYSxJQUFzVSxNQUFNLEVBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLElBQUcsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLG1DQUFtQyxFQUFFLGlCQUFrQixjQUFhLEVBQUUsQ0FBQyxJQUFJLElBQUcsSUFBSSxFQUFFLE1BQU0sSUFBRyxlQUFlLEVBQUUsT0FBTyxLQUFLLHNDQUF1QyxLQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUcsSUFBSSxFQUFFLE1BQU0sSUFBRyxNQUFNLEVBQUUsT0FBTyxJQUFHLENBQUMsU0FBUyxHQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxVQUFVLGtDQUFrQyw4Q0FBOEMsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFFLENBQUMsTUFBTSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUUsb0NBQW9DLEdBQUcsYUFBYSxJQUFzQixTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRSxFQUFFLENBQUMsRUFBRSxLQUFHLEdBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxDQUFDLEVBQUUsS0FBRyxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBa1EsTUFBTSxFQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQVUsSUFBSixTQUFRLEVBQUUsTUFBTSxJQUFNLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsSUFBTSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsTUFBTSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsYUFBYSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsTUFBTSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsVUFBVSxFQUFRLEdBQU4sS0FBYSxPQUFFLEVBQUUsYUFBYSxNQUFNLENBQUMsTUFBZSxJQUFKLE9BQVcsT0FBRSxJQUFHLEVBQUUsRUFBRSxHQUFHLDJCQUEyQixFQUFFLGFBQWEsRUFBRSxNQUFlLElBQUosT0FBVyxPQUFFLElBQUcsRUFBRSxFQUFFLEdBQUcsMkJBQTJCLEVBQUUsVUFBbUIsSUFBSixPQUFXLE9BQUUsSUFBRyxFQUFFLEVBQUUsR0FBRywrQkFBK0IsRUFBRSxhQUFhLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQVksRUFBRSxlQUFOLE9BQW1CLE1BQU0sSUFBSSxXQUFXLGdDQUFnQyxFQUFFLEdBQVksRUFBRSxlQUFOLE9BQW1CLE1BQU0sSUFBSSxXQUFXLGdDQUFnQyxFQUFFLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQU0sR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxRQUFRLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBTSxHQUFFLEdBQUUsMkJBQTJCLEdBQUcsR0FBRSxjQUFlLE9BQU8sR0FBRSxHQUFFLDJCQUE0QixJQUFJLENBQUMsSUFBaUIsR0FBRyxHQUFFLFNBQVMsRUFBRSxHQUFFLFVBQVUsT0FBTyxHQUFFLGtCQUFuRCxXQUFtRSxNQUFNLEdBQUcsR0FBRSxTQUFTLEVBQUUsR0FBRSxVQUFVLGFBQWEsR0FBRSxxQkFBcUIsT0FBTyxJQUFHLEdBQUUsQ0FBQyxFQUFHLEVBQUUsT0FBTyxJQUFHLEdBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsR0FBRSxDQUFDLEVBQUUsR0FBTyxNQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBTSxHQUFFLEVBQUUsMkJBQTJCLEVBQUUsR0FBRSxnQkFBZ0IsRUFBRSxPQUFPLElBQUcsRUFBQyxFQUFFLEdBQUUsRUFBRyxJQUFJLENBQUMsR0FBZSxFQUFFLGlCQUFkLFVBQTZCLE1BQU0sRUFBRSxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsSUFBRyxDQUFDLEdBQUssTUFBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUMsRUFBRSxFQUFFLHFCQUFzQixHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBTyxNQUFDLEVBQUUsRUFBRSxlQUFlLFdBQVcsRUFBRSxxQkFBMEIsT0FBRSxFQUFFLDhCQUE4QixHQUFHLEVBQUUsaUJBQWlCLEdBQUcsRUFBRSxVQUFVLFFBQVEsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsT0FBTyxJQUFJLEdBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLElBQU0sR0FBRSxFQUFFLE9BQWdCLEtBQUosUUFBTyxHQUFFLGlCQUFpQixRQUFTLElBQUksQ0FBYyxFQUFFLGlCQUFmLGFBQWdDLEVBQUUsZUFBZSxXQUFXLEdBQUUsU0FBUyxFQUFFLHFCQUFxQixHQUFFLFNBQVUsRUFBRSxNQUFNLEdBQUUsRUFBRSxPQUFPLEdBQUUsR0FBRSxFQUFHLEtBQUssRUFBRSxpQkFBaUIsR0FBRyxJQUFHLENBQUMsRUFBRSxNQUFRLE1BQUcsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEdBQUcsSUFBRyxFQUFFLEVBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFJLFFBQVEsQ0FBQyxHQUFFLENBQUMsR0FBRSw4QkFBOEIsSUFBSSxDQUFDLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRyxLQUFLLFFBQVEsQ0FBQyxHQUFFLENBQUMsR0FBRSw4QkFBOEIsSUFBSSxDQUFDLEVBQUUsSUFBRyxDQUFDLEVBQUUsTUFBUSxNQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsR0FBRSxHQUFFLENBQUMsR0FBRSw4QkFBOEIsR0FBRyxJQUFHLEdBQUUsRUFBQyxHQUFHLEVBQUUsRUFBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLDhCQUE4QixJQUFJLENBQUMsRUFBRSxHQUFFLEdBQUUsRUFBRyxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSw4QkFBOEIsR0FBZ0IsRUFBRSxpQkFBZixhQUFnQyxFQUFFLHFCQUEwQixRQUFHLEVBQUUsZUFBZSxVQUFVLENBQUMsRUFBRSxNQUFRLEtBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxHQUFFLDhCQUE4QixHQUFHLEdBQUUsZUFBZSxJQUFHLEdBQUUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUcsR0FBRyxNQUFNLE1BQUksRUFBRSxlQUFlLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxHQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxHQUFFLEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxXQUFXLEVBQUUscUJBQTBCLE9BQUUsRUFBRSx3QkFBd0IsR0FBRyxFQUFFLGlCQUFpQixHQUFHLEVBQUUsVUFBVSxRQUFRLENBQUMsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxPQUFPLElBQUksR0FBZSxDQUFDLE1BQU0sT0FBSSxFQUFFLG9CQUFvQixHQUFFLEdBQUUsRUFBRSxNQUFPLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsaUJBQWlCLEdBQUcsRUFBRSxFQUFFLE1BQU8sTUFBRyxDQUFDLEdBQUcsRUFBRSxFQUFDLEVBQUcsR0FBRyxPQUFPLE9BQUksRUFBRSxlQUFlLFNBQVMsR0FBRSxFQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsR0FBRSxLQUFLLEVBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxjQUFtQixPQUFFLEVBQUUsMkJBQWdDLE9BQUUsRUFBRSxtQ0FBd0MsT0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsMkJBQWdDLFNBQUcsS0FBSyxHQUFHLEtBQUcsQ0FBQyxFQUFFLEVBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQU0sRUFBRSxPQUFPLE9BQU8sR0FBaUMsU0FBUyxFQUFNLEVBQUUsRUFBRSxFQUFXLEVBQUUsWUFBTixPQUFnQixLQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBRyxFQUFFLENBQUMsRUFBRSxHQUFPLE1BQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLEdBQUUsQ0FBQyxJQUFJLEVBQVcsRUFBRSxRQUFOLE9BQVksSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksR0FBTyxNQUFDLEVBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsMkJBQTJCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBVyxFQUFFLFFBQU4sT0FBWSxFQUFFLEVBQUUsTUFBTSxLQUFLLDBCQUEwQixDQUFDLEVBQUUsRUFBTyxNQUFDLEtBQU0sU0FBUSxFQUFFLENBQUMsSUFBSSxJQUFHLElBQUksRUFBRSxNQUFNLElBQUcsVUFBVSxFQUFFLE9BQU8sS0FBSyxhQUFjLFNBQVEsRUFBRSxDQUFDLElBQUksSUFBRyxJQUFJLEVBQUUsTUFBTSxJQUFHLFVBQVUsRUFBRSxPQUFPLEtBQUssVUFBVSxDQUFDLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUUsQ0FBQyxNQUFNLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBRSw0QkFBNEIsR0FBRyxhQUFhLElBQWlCLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFHLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLE1BQU0sQ0FBQyxFQUFlLEVBQUUsaUJBQWYsWUFBK0IsSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBVSxFQUFFLDZCQUFOLFFBQWtDLEVBQUUsbUNBQW1DLEVBQUUsRUFBRSwyQkFBMkIsR0FBRyxLQUFHLENBQUMsRUFBRSxtQ0FBbUMsRUFBRyxFQUFFLEVBQUUsY0FBYyxFQUFrUCxNQUFNLEVBQWdDLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxJQUFJLFVBQVUscUJBQXFCLEtBQU0sWUFBVyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBRyxLQUFLLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUFFLElBQUcsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssMkJBQTJCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxXQUFXLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFNLEVBQUUsRUFBRSwyQkFBMkIsR0FBRyxDQUFDLEdBQUcsSUFBRyxDQUFDLEVBQUUsSUFBTSxFQUFFLElBQUksVUFBVSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFHLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUUsQ0FBQyxNQUFNLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBRSw0QkFBNEIsR0FBRyxhQUFhLElBQWtDLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLG9CQUF5QixPQUFFLEVBQUUsZ0JBQXFCLE9BQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBTSxFQUFFLEVBQUUsMkJBQTJCLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLFVBQVUsc0RBQXNELEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxzQkFBNkIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLGlCQUFpQixNQUFNLEdBQUcsR0FBRyxJQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFHLENBQUMsSUFBTSxFQUFFLGVBQWUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxvQkFBb0IsQ0FBQyxFQUFPLE9BQUcsS0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLDJCQUEyQixDQUFDLEVBQUUsRUFBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksVUFBVSw4Q0FBOEMsMERBQTBELEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxVQUFVLDZCQUE2Qix5Q0FBeUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLHlCQUFzQyxFQUFFLGlCQUFmLFdBQThCLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsU0FBUyxFQUFFLHdCQUF3QixHQUFHLEVBQUUsb0JBQW9CLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBYyxFQUFFLGlCQUFmLGFBQWdDLEVBQUUsZUFBZSxVQUFVLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxvQkFBb0IsTUFBTSxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsWUFBWSxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBYyxFQUFFLGlCQUFmLFdBQThCLElBQUcsQ0FBQyxFQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxHQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLFdBQVcsRUFBRSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSwrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLElBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsVUFBVSxTQUFTLEdBQUUsQ0FBQyxFQUFFLENBQWMsRUFBRSxpQkFBZixZQUErQixJQUFHLENBQUMsTUFBbi94RCxHQUFrTCxJQUFtRyxJQUFVLElBQXlCLElBQTBCLElBQWdULEdBQUUsS0FBRyxDQUFDLEdBQWUsT0FBTyxnQkFBbkIsV0FBa0MsR0FBRSxlQUFtQixLQUFDLElBQU0sRUFBRSxHQUFPLE1BQUMsRUFBRSxHQUFFLEtBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUUsQ0FBQyxHQUFzOEIsSUFBc0IsSUFBc0IsSUFBdUIsSUFBcUIsSUFBZ21DLElBQXNFLElBQXk3SSxJQUFpa0IsSUFBOGpHLEdBQTQ5VyxJQUFnL1AsSUFBWSxHQUFzc0ksSUFBOEQsSUFBNnRKLEdBQXdpUyxJQUFHLEtBQUcsRUFBRSxXQUFvNUIsSUFBRyxJQUFJLGtCQUEzMmlELEdBQWMsT0FBTyxRQUFuQixZQUFxQyxPQUFPLE9BQU8sVUFBeEIsU0FBaUMsT0FBTyxLQUFHLFVBQVUsS0FBZ0csSUFBRSxJQUFpRyxJQUFFLFFBQVEsSUFBRSxRQUFRLFVBQVUsS0FBSyxJQUFFLFFBQVEsUUFBUSxLQUFLLEdBQUMsRUFBRSxJQUFFLFFBQVEsT0FBTyxLQUFLLEdBQUMsRUFBdzBDLElBQUUsR0FBRSxnQkFBZ0IsRUFBRSxJQUFFLEdBQUUsZ0JBQWdCLEVBQUUsSUFBRSxHQUFFLGlCQUFpQixFQUFFLElBQUUsR0FBRSxlQUFlLEVBQUUsSUFBRSxHQUFFLGtCQUFrQixFQUEwa0MsSUFBRSxPQUFPLFVBQVUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFnQixPQUFPLEdBQWpCLFVBQW9CLFNBQVMsQ0FBQyxHQUFHLElBQUUsS0FBSyxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUEreEYsT0FBTyxpQkFBaUIsR0FBNEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRSxHQUE0QixVQUFVLE9BQU8sUUFBUSxFQUFFLEdBQUUsR0FBNEIsVUFBVSxLQUFLLE1BQU0sRUFBRSxHQUFFLEdBQTRCLFVBQVUsWUFBWSxhQUFhLEVBQVksT0FBTyxHQUFFLGFBQW5CLFVBQWdDLE9BQU8sZUFBZSxHQUE0QixVQUFVLEdBQUUsWUFBWSxDQUFDLE1BQU0sOEJBQThCLGFBQWEsRUFBRSxDQUFDLEVBQTRtQyxJQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxJQUFHLElBQUksRUFBRSxLQUFLLG1CQUFtQixLQUFLLEVBQUUsR0FBRSxJQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFHLElBQUksRUFBRSxLQUFLLG1CQUFtQixPQUFPLENBQUMsRUFBRSxHQUFFLElBQUcsUUFBUSxDQUFDLEVBQUUsRUFBaVQsT0FBTyxHQUFFLGVBQW5CLFVBQWtDLE9BQU8sZUFBZSxJQUFHLEdBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sTUFBTSxTQUFTLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBUSxJQUFHLE9BQU8sT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxHQUE2bEYsT0FBTyxpQkFBaUIsR0FBMEIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsR0FBMEIsVUFBVSxRQUFRLFNBQVMsRUFBRSxHQUFFLEdBQTBCLFVBQVUsbUJBQW1CLG9CQUFvQixFQUFZLE9BQU8sR0FBRSxhQUFuQixVQUFnQyxPQUFPLGVBQWUsR0FBMEIsVUFBVSxHQUFFLFlBQVksQ0FBQyxNQUFNLDRCQUE0QixhQUFhLEVBQUUsQ0FBQyxFQUFRLEdBQU4sTUFBTSxFQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sSUFBSSxVQUFVLHFCQUFxQixLQUFNLFlBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLGFBQWEsRUFBRSxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBVSxFQUFFLGVBQVQsTUFBdUIsRUFBRSxrQkFBa0IsT0FBTyxFQUFFLENBQUMsSUFBTSxFQUFFLEVBQUUsa0JBQWtCLEtBQUssRUFBRSxFQUFFLElBQUksV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBMEIsU0FBUyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsd0NBQXdDLEVBQUUsRUFBRSxNQUFNLElBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsY0FBYyxJQUFJLEtBQU0sWUFBVyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxnQkFBZ0IsTUFBTSxJQUFJLFVBQVUsNERBQTRELEVBQUUsSUFBTSxFQUFFLEtBQUssOEJBQThCLE9BQU8sR0FBZ0IsSUFBYixXQUFlLE1BQU0sSUFBSSxVQUFVLGtCQUFrQiw0REFBNEQsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQU0sRUFBRSxFQUFFLDhCQUE4QixHQUFHLEVBQUUsaUJBQThCLEVBQUUsU0FBZixXQUFzQixPQUFPLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsa0JBQWtCLE9BQU8sR0FBRyxHQUFHLEVBQUUsa0JBQWtCLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFNLEVBQUUsSUFBSSxVQUFVLHlEQUF5RCxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFHLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxHQUFHLEdBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxFQUFFLE1BQU0sSUFBSSxVQUFVLG9DQUFvQyxFQUFFLEdBQU8sRUFBRSxhQUFOLEVBQWlCLE1BQU0sSUFBSSxVQUFVLHFDQUFxQyxFQUFFLEdBQU8sRUFBRSxPQUFPLGFBQWIsRUFBd0IsTUFBTSxJQUFJLFVBQVUsOENBQThDLEVBQUUsR0FBRyxLQUFLLGdCQUFnQixNQUFNLElBQUksVUFBVSw4QkFBOEIsRUFBRSxJQUFNLEVBQUUsS0FBSyw4QkFBOEIsT0FBTyxHQUFnQixJQUFiLFdBQWUsTUFBTSxJQUFJLFVBQVUsa0JBQWtCLGlFQUFpRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFNLEVBQUUsRUFBRSw4QkFBOEIsR0FBRyxFQUFFLGlCQUE4QixFQUFFLFNBQWYsV0FBc0IsT0FBTyxJQUFVLE9BQUosRUFBZSxXQUFKLEVBQW1CLFdBQUosR0FBYixFQUE0QixFQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixPQUFPLEVBQUUsQ0FBQyxJQUFNLEVBQUUsRUFBRSxrQkFBa0IsS0FBSyxFQUFFLEVBQUUsT0FBUyxJQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFnQixFQUFFLGFBQVgsUUFBdUIsSUFBRyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFNLEVBQUUsRUFBRSw4QkFBOEIsUUFBUSxLQUFLLEVBQUUsY0FBYyxPQUFPLEdBQUcsQ0FBQyxHQUFPLEVBQUUsa0JBQU4sRUFBc0IsT0FBTyxJQUFHLEVBQUUsRUFBRSxjQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBTSxHQUFFLENBQUMsSUFBUCxFQUFTLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFPLE9BQUUsa0JBQWtCLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFPLFNBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFNLEVBQUUsS0FBSyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFFLENBQUMsRUFBRSxDQUFDLElBQU0sRUFBRSxLQUFLLDhCQUE4QixHQUFHLEtBQUssZ0JBQWdCLEVBQUUsT0FBTyxLQUFLLElBQUcsS0FBSyxDQUFDLEVBQUUsSUFBTSxFQUFFLEtBQUssdUJBQXVCLEdBQVksSUFBSixPQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsSUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsV0FBVyxXQUFXLFNBQVMsRUFBRSxLQUFLLGtCQUFrQixLQUFLLENBQUMsRUFBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxrQkFBa0IsT0FBTyxFQUFFLENBQUMsSUFBTSxFQUFFLEtBQUssa0JBQWtCLEtBQUssRUFBRSxFQUFFLFdBQVcsT0FBTyxLQUFLLGtCQUFrQixJQUFJLEdBQUUsS0FBSyxrQkFBa0IsS0FBSyxDQUFDLEdBQUcsRUFBdzNJLE9BQU8saUJBQWlCLEdBQTZCLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFLEdBQTZCLFVBQVUsTUFBTSxPQUFPLEVBQUUsR0FBRSxHQUE2QixVQUFVLFFBQVEsU0FBUyxFQUFFLEdBQUUsR0FBNkIsVUFBVSxNQUFNLE9BQU8sRUFBWSxPQUFPLEdBQUUsYUFBbkIsVUFBZ0MsT0FBTyxlQUFlLEdBQTZCLFVBQVUsR0FBRSxZQUFZLENBQUMsTUFBTSwrQkFBK0IsYUFBYSxFQUFFLENBQUMsRUFBZ2tHLE9BQU8saUJBQWlCLEdBQXlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsR0FBeUIsVUFBVSxPQUFPLFFBQVEsRUFBRSxHQUFFLEdBQXlCLFVBQVUsS0FBSyxNQUFNLEVBQUUsR0FBRSxHQUF5QixVQUFVLFlBQVksYUFBYSxFQUFZLE9BQU8sR0FBRSxhQUFuQixVQUFnQyxPQUFPLGVBQWUsR0FBeUIsVUFBVSxHQUFFLFlBQVksQ0FBQyxNQUFNLDJCQUEyQixhQUFhLEVBQUUsQ0FBQyxFQUFRLElBQWUsT0FBTyxpQkFBbkIsV0FBbXhJLE9BQU8saUJBQWlCLEdBQWUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRSxHQUFlLFVBQVUsTUFBTSxPQUFPLEVBQUUsR0FBRSxHQUFlLFVBQVUsTUFBTSxPQUFPLEVBQUUsR0FBRSxHQUFlLFVBQVUsVUFBVSxXQUFXLEVBQVksT0FBTyxHQUFFLGFBQW5CLFVBQWdDLE9BQU8sZUFBZSxHQUFlLFVBQVUsR0FBRSxZQUFZLENBQUMsTUFBTSxpQkFBaUIsYUFBYSxFQUFFLENBQUMsRUFBdXNGLE9BQU8saUJBQWlCLEdBQTRCLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsR0FBNEIsVUFBVSxNQUFNLE9BQU8sRUFBRSxHQUFFLEdBQTRCLFVBQVUsTUFBTSxPQUFPLEVBQUUsR0FBRSxHQUE0QixVQUFVLFlBQVksYUFBYSxFQUFFLEdBQUUsR0FBNEIsVUFBVSxNQUFNLE9BQU8sRUFBWSxPQUFPLEdBQUUsYUFBbkIsVUFBZ0MsT0FBTyxlQUFlLEdBQTRCLFVBQVUsR0FBRSxZQUFZLENBQUMsTUFBTSw4QkFBOEIsYUFBYSxFQUFFLENBQUMsRUFBUSxJQUFHLENBQUMsRUFBUSxHQUFOLE1BQU0sRUFBK0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLElBQUksVUFBVSxxQkFBcUIsS0FBTSxZQUFXLEVBQUUsQ0FBQyxJQUFJLElBQUcsSUFBSSxFQUFFLE1BQU0sSUFBRyxhQUFhLEVBQUUsT0FBTyxLQUFLLGdCQUFpQixPQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUcsSUFBSSxFQUFFLE1BQU0sSUFBRyxRQUFRLEVBQUUsR0FBWSxLQUFLLG1CQUFULE9BQTBCLE1BQU0sSUFBSSxVQUFVLG1FQUFtRSxFQUFFLE9BQU8sS0FBSyxpQkFBaUIsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksSUFBRyxJQUFJLEVBQUUsTUFBTSxJQUFHLE9BQU8sRUFBZSxLQUFLLDBCQUEwQixTQUE1QyxZQUFvRCxJQUFHLEtBQUssQ0FBQyxHQUFHLElBQUUsQ0FBQyxFQUFFLENBQUMsSUFBTSxFQUFFLEtBQUssZ0JBQWdCLENBQUMsRUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBcTJHLE9BQU8saUJBQWlCLEdBQWdDLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQVksT0FBTyxHQUFFLGFBQW5CLFVBQWdDLE9BQU8sZUFBZSxHQUFnQyxVQUFVLEdBQUUsWUFBWSxDQUFDLE1BQU0sa0NBQWtDLGFBQWEsRUFBRSxDQUFDLEVBQVEsSUFBZ0IsT0FBTyxjQUFwQixZQUFpQyxhQUFrQixPQUFRLElBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFlLE9BQU8sR0FBbkIsWUFBZ0MsT0FBTyxHQUFqQixTQUFtQixNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsTUFBTSxLQUFLLEdBQUUsRUFBRSxJQUFHLFFBQVEsRUFBRSxDQUFDLElBQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxRQUFRLEdBQUcsR0FBRyxLQUFLLEtBQUssR0FBRyxRQUFRLE1BQU0sbUJBQW1CLE1BQU0sa0JBQWtCLEtBQUssS0FBSyxXQUFXLEdBQUcsT0FBTyxFQUFFLFVBQVUsT0FBTyxPQUFPLE1BQU0sU0FBUyxFQUFFLE9BQU8sZUFBZSxFQUFFLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQTQwSSxHQUFOLE1BQU0sRUFBK0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLElBQUksVUFBVSxxQkFBcUIsS0FBTSxZQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxhQUFhLEVBQUUsT0FBTyxJQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxPQUFPLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksVUFBVSxpREFBaUQsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFNLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxnQkFBZ0IsR0FBTyxFQUFFLE9BQU8sU0FBYixJQUFzQixHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksVUFBVSxtREFBbUQsRUFBRSxPQUFPLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBTSxFQUFFLEVBQUUsMEJBQTBCLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRSxDQUFDLEVBQUUsRUFBRSxJQUFFLEVBQUUsRUFBRSxFQUFFLEVBQU0sS0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQU0sRUFBRSxLQUFLLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUUsQ0FBQyxFQUFFLENBQUMsSUFBTSxFQUFFLEtBQUssMEJBQTBCLEdBQUcsS0FBSyxPQUFPLE9BQU8sRUFBRSxDQUFDLElBQU0sRUFBRSxJQUFHLElBQUksRUFBRSxLQUFLLGlCQUFxQixLQUFLLE9BQU8sU0FBaEIsR0FBd0IsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBTyxTQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUUsRUFBRSxFQUFFLEVBQWc2RixPQUFPLGlCQUFpQixHQUFnQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFLEdBQWdDLFVBQVUsTUFBTSxPQUFPLEVBQUUsR0FBRSxHQUFnQyxVQUFVLFFBQVEsU0FBUyxFQUFFLEdBQUUsR0FBZ0Ms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RUFBRSxHQUFHLENBQUMsRUFBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBTSxLQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUUsRUFBRSxNQUFNLElBQUcsQ0FBQyxHQUFHLEtBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRyxLQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUUsR0FBRSxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksR0FBRSxFQUFFLE1BQU0sSUFBRyxDQUFDLEdBQUcsS0FDNWYsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRyxLQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUUsR0FBRSxRQUFRLElBQUksRUFBRSxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFHLEdBQU8sRUFBRSxNQUFOLEVBQVUsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQVMsT0FBUixFQUFFLEVBQUcsQ0FBQyxFQUFnQixJQUFQLEtBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBTyxFQUFFLE1BQU4sR0FBZSxFQUFFLE1BQU4sRUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBYSxJQUFQLE1BQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBVSxJQUFQLEtBQVMsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLE9BQU8sS0FDdFgsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQU8sRUFBRSxNQUFOLEdBQWUsRUFBRSxNQUFOLEVB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QUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksSUFBUSxJQUFKLEdBQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBZ0IsT0FBTyxPQUFPLEtBQTNCLFdBQThCLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBUSxLQUFQLEtBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQ3RWLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFXLEtBQVAsS0FBVSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBZSxJQUFQLE1BQVUsR0FBRyxLQUFLLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFhLEtBQVAsT0FBWSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQUcsQ0FBUSxHQUFFLEVBQUUsR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUNoVixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFPLFFBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQVEsRUFBRSxTQUFULE9BQWtCLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUN2ZSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxZQUFZLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFVBQWlCLElBQVAsTUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFLLENBQUMsRUFDdkosU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVUsR0FBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBUyxJQUFQLE1BQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxPQUFRLEdBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBUyxJQUFQLE1BQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxJQUFJLE9BQVEsSUFBVyxHQUFSLEVBQUUsR0FBRyxDQUFDLEVBQVksSUFBUCxLQUFTLENBQUMsSUFBSSxFQUFTLEtBQVAsS0FBVSxDQUFDLEdBQUcsR0FBRyxTQUFTLEVBQUUsRUFBRSxLQUE0SSxPQUF2SSxFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsVUFBVSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBVyxHQUFHLE1BQU0sV0FBVyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFLLEtBQVosSUFBcUIsRUFBRSxNQUFNLE9BQWIsRUFDaGUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRSxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFN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TyxJQUFsQixTQUFvQixPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQWMsT0FBTyxJQUFsQixVQUE0QixJQUFQLEtBQVMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDcGYsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLE9BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFTLElBQVAsS0FBUyxFQUFFLElBQUksS0FBSyxHQUFjLE9BQU8sSUFBbEIsVUFBMEIsSUFBTCxJQUFtQixPQUFPLElBQWxCLFNBQW9CLE9BQWMsS0FBUCxLQUFTLEtBQUssR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFjLE9BQU8sSUFBbEIsVUFBNEIsSUFBUCxLQUFTLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRyxPQUFPLEVBQUUsTUFBTSxHQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRyxPQUFPLEVBQUUsTUFBTSxHQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRyxPQUFPLEdBQUUsRUFBRSxN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QUFLLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQyxFQUFFLE1BQVcsT0FBRSxFQUFFLEVBQUMsRUFBRSxHQUFFLEdBQUUsUUFBUSxFQUFFLE9BQU8sR0FBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQ25mLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRyxFQUFFLENBQUMsSUFBSSxHQUFFLEVBQUUsSUFBVyxJQUFQLE1BQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFFLEdBQU8sRUFBRSxNQUFOLEdBQVcsRUFBRSxVQUFVLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxVQUFVLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFZLEtBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFXLE9BQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFHLE9BQU8sR0FBRSxFQUFFLE1BQU0sRUFBRyxFQUFFLEVBQUUsR0FBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQWlCLE9BQU8sSUFBbEIsVUFBMEIsSUFBTCxJQUFtQixPQUFPLElBQWxCLFVBQXFCLEVBQUUsR0FBRyxFQUFTLElBQVAsTUFDeGUsRUFBRSxNQUFOLEdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsY0FBYyxJQUFJLEdBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxFQUFFLGVBQWUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEVBQUUsZUFBZSxFQUNuWSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQVksSUFBUCxNQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBK0gsSUFBcEgsRUFBRSxXQUFXLEtBQUssR0FBRyxFQUFFLFlBQVksRUFBUyxJQUFQLE9BQVcsRUFBRSxZQUFZLElBQVcsSUFBUCxPQUFXLEVBQUUsV0FBVyxLQUFLLElBQUksRUFBRSxZQUFZLEdBQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxhQUFvQixJQUFQLE1BQWlCLEVBQUUsZUFBVCxRQUE2QixFQUFFLE1BQU0sS0FBYixJQUFrQixHQUFFLElBQUksRUFBRSxhQUFhLE1BQ2hVLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQVMsS0FBUCxLQUFVLENBQUMsR0FBVSxLQUFQLEtBQVUsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsRUFBTyxRQUFHLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQVEsS0FBUCxLQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBK0UsT0FBNUQsSUFBUCxNQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZLEVBQVMsR0FBRyxFQUFFLENBQUMsRUFDblosU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBaUIsSUFBUCxPQUFXLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFjLElBQVAsTUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBaUIsSUFBUCxPQUFXLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFXLEVBQUUsTUFBTixFQUFVLEVBQUUsVUFBVSxLQUFLLElBQUksR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsY0FBYyxnQkFBZ0IsS0FBSyxlQUFlLEtBQUssT0FBTyxDQUFDLFFBQVEsS0FBSyxZQUFZLEtBQUssTUFBTSxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQ25YLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxJQUFJLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVLGdCQUFnQixFQUFFLGdCQUFnQixlQUFlLEVBQUUsZUFBZSxPQUFPLEVBQUUsT0FBTyxRQUFRLEVBQUUsT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEtBQUssU0FBUyxLQUFLLEtBQUssSUFBSSxFQUNyUixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFlBQVksR0FBVSxJQUFQLEtBQVMsT0FBTyxLQUFnQixHQUFYLEVBQUUsRUFBRSxRQUFlLEdBQUUsS0FBUCxFQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBK0QsT0FBaEQsSUFBUCxLQUFTLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQVMsR0FBRyxFQUFFLENBQUMsRUFBcUYsT0FBbkYsRUFBRSxFQUFFLFlBQW1CLElBQVAsTUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsWUFBWSxFQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBaUIsR0FBaEIsRUFBRSxFQUFFLFlBQXNCLElBQVAsT0FBVyxFQUFFLEVBQUUsUUFBWSxFQUFFLFdBQVAsR0FBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUNuWixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFRLFlBQUosRUFBb0IsVUFBSixHQUFFLEVBQVksR0FBVSxJQUFQLE9BQVcsRUFBRSxFQUFFLFlBQVksSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUF5QixHQUFwQixFQUFFLEVBQUUsZ0JBQTBCLElBQVAsS0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxRQUFRLEVBQUUsUUFBUSxTQUFTLEVBQUUsU0FBUyxLQUFLLElBQUksRUFBUyxJQUFQLEtBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBa0IsSUFBUCxNQUFpQixJQUFQLEtBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBTyxPQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsZUFBc0IsSUFBUCxLQUFTLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxLQUNuZixFQUFFLEVBQUUsZUFBZSxFQUNuQixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxHQUFHLEdBQUcsSUFBUSxnQkFBSixFQUF3QixlQUFKLEdBQUUsRUFBaUIsR0FBRSxFQUFFLE9BQU8sUUFBUSxHQUFVLEtBQVAsS0FBUyxDQUFDLEVBQUUsT0FBTyxRQUFRLEtBQUssSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEtBQUssR0FBRSxLQUFLLEtBQVksSUFBUCxLQUFTLEVBQUUsR0FBRSxFQUFFLEtBQUssR0FBRSxFQUFFLEdBQUUsSUFBSSxHQUFFLEVBQUUsVUFBaUIsS0FBUCxPQUFXLEdBQUUsR0FBRSxZQUFZLEdBQUUsR0FBRSxlQUFlLEtBQUksSUFBVyxLQUFQLEtBQVMsR0FBRSxnQkFBZ0IsR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLGVBQWUsS0FBSSxHQUFVLElBQVAsS0FBUyxDQUFDLElBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUUsR0FBRSxHQUFFLEtBQUssR0FBRSxFQUFFLEVBQUUsQ0FBQyxJQUFRLEtBQUosR0FBYSxVQUFKLElBQUUsR0FBWSxJQUFJLEVBQUUsTUFBSyxHQUFFLENBQVEsS0FBUCxPQUFXLEdBQUUsR0FBRSxLQUFLLENBQUMsVUFBVSxHQUFFLEtBQUssRUFBRSxJQUFJLEdBQUUsSUFBSSxRQUFRLEdBQUUsUUFBUSxTQUFTLEdBQUUsU0FDdmYsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRSxFQUFFLEVBQUUsR0FBVSxPQUFSLEdBQUUsRUFBRSxHQUFFLEVBQVMsRUFBRSxTQUFVLEdBQWMsR0FBWixHQUFFLEVBQUUsUUFBd0IsT0FBTyxLQUFwQixXQUFzQixDQUFDLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxFQUFDLEVBQUUsUUFBUSxHQUFFLEdBQUUsWUFBYSxHQUFFLEdBQUUsTUFBTSxHQUFFLE1BQU0sT0FBTyxRQUFTLEdBQXNELEdBQXBELEdBQUUsRUFBRSxRQUFRLEdBQWUsT0FBTyxLQUFwQixXQUFzQixHQUFFLEtBQUssR0FBRSxHQUFFLEVBQUMsRUFBRSxHQUFZLEtBQVAsTUFBbUIsS0FBSixPQUFNLFFBQVEsR0FBRSxFQUFHLENBQUMsRUFBRSxHQUFFLEVBQUMsRUFBRSxZQUFhLEdBQUUsR0FBRyxJQUFXLEdBQUUsV0FBVCxNQUF1QixHQUFFLE9BQU4sSUFBYSxFQUFFLE9BQU8sR0FBRyxHQUFFLEVBQUUsUUFBZSxLQUFQLEtBQVMsRUFBRSxRQUFRLENBQUMsRUFBQyxFQUFFLEdBQUUsS0FBSyxFQUFDLEdBQVEsUUFBRSxDQUFDLFVBQVUsR0FBRSxLQUFLLEdBQUUsSUFBSSxHQUFFLElBQUksUUFBUSxHQUFFLFFBQVEsU0FBUyxHQUFFLFNBQVMsS0FBSyxJQUFJLEVBQVMsS0FBUCxNQUFVLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRyxHQUFFLEdBQUUsS0FBSyxHQUFFLEdBQ2xmLEdBQVcsR0FBVCxHQUFFLEdBQUUsS0FBZSxLQUFQLEtBQVMsR0FBRyxHQUFFLEVBQUUsT0FBTyxRQUFlLEtBQVAsS0FBUyxNQUFXLFFBQUUsR0FBRSxHQUFFLEdBQUUsS0FBSyxHQUFFLEtBQUssS0FBSyxFQUFFLGVBQWUsR0FBRSxFQUFFLE9BQU8sUUFBUSxXQUFXLEdBQStGLEdBQXJGLEtBQVAsT0FBVyxHQUFFLElBQUcsRUFBRSxVQUFVLEdBQUUsRUFBRSxnQkFBZ0IsR0FBRSxFQUFFLGVBQWUsR0FBRSxFQUFFLEVBQUUsT0FBTyxZQUFzQixJQUFQLEtBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxJQUFJLEdBQVEsS0FBTyxJQUFQLE9BQVcsRUFBRSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxjQUFjLElBQzlWLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQTRCLEdBQTNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxLQUFlLElBQVAsS0FBUyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxHQUFVLElBQVAsS0FBUyxDQUFxQixHQUFwQixFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQWtCLE9BQU8sSUFBcEIsV0FBc0IsTUFBTSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRSxHQUFHLENBQUMsR0FDaGUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxJQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQVMsSUFBUCxNQUFVLENBQUMsR0FBUSxFQUFFLE1BQVAsR0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsR0FBVSxJQUFQLE9BQVcsRUFBRSxFQUFFLFdBQWtCLElBQVAsTUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQU8sUUFBUSxFQUFFLE1BQVAsSUFBcUIsRUFBRSxjQUFjLGNBQXBCLFFBQWlDLElBQVEsRUFBRSxNQUFNLE9BQWIsRUFBa0IsT0FBTyxFQUFPLFFBQVUsRUFBRSxRQUFULEtBQWUsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsTUFBTSxLQUFZLEVBQUUsVUFBVCxNQUFrQixDQUFDLEdBQVUsRUFBRSxTQUFULE1BQWlCLEVBQUUsU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsT0FBTyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQy9lLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLDhCQUE4QixLQUFLLEVBQUUsZ0NBQWdDLEtBQUssR0FBRyxPQUFPLEVBQUUsSUFBVSx1QkFBTixHQUFtQyx3QkFBTixJQUFHLEVBQTJCLEdBQUcsRUFBRSxHQUFFLEtBQUssR0FBRSxLQUFLLEdBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLEVBQUUsQ0FBQyxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFVLElBQVAsS0FBUyxNQUFNLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQ2paLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQXVILEdBQXRILEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBRSxjQUFjLEtBQUssRUFBRSxZQUFZLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFlLElBQVAsTUFBaUIsRUFBRSxnQkFBVCxLQUF1QixHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFZLEdBQVgsR0FBRyxHQUFHLEdBQUcsRUFBSyxJQUFJLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsR0FBRSxLQUFLLEVBQUUsWUFBWSxLQUFLLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFrRSxHQUE5RCxHQUFHLFFBQVEsR0FBRyxFQUFTLEtBQVAsTUFBaUIsR0FBRSxPQUFULEtBQWMsR0FBRyxFQUFFLEdBQUUsR0FBRSxHQUFFLEtBQUssR0FBRyxHQUFNLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFNLEtBQUosRUFBWSxPQUFMLEdBQUcsRUFBUyxFQUM5WSxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLGNBQWMsS0FBSyxVQUFVLEtBQUssVUFBVSxLQUFLLE1BQU0sS0FBSyxLQUFLLElBQUksRUFBMEMsT0FBakMsS0FBUCxLQUFTLEdBQUUsY0FBYyxHQUFFLEVBQUUsR0FBRSxHQUFFLEtBQUssRUFBUyxHQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBVSxLQUFQLEtBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRSxVQUFVLEVBQVMsSUFBUCxLQUFTLEVBQUUsY0FBYyxLQUFVLE9BQUUsR0FBRSxLQUFLLElBQUksRUFBUyxLQUFQLEtBQVMsR0FBRSxjQUFjLEdBQUUsS0FBSyxHQUFVLElBQVAsS0FBUyxHQUFFLEVBQUUsR0FBRSxFQUFNLEtBQUMsR0FBVSxJQUFQLEtBQVMsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEdBQUUsY0FBYyxVQUFVLEdBQUUsVUFBVSxVQUFVLEdBQUUsVUFBVSxNQUFNLEdBQUUsTUFBTSxLQUFLLElBQUksRUFBUyxLQUFQLEtBQVMsR0FBRSxjQUFjLEdBQUUsRUFBRSxHQUFFLEdBQUUsS0FBSyxFQUFFLE9BQU8sR0FDaGUsU0FBUyxFQUFFLENBQUMsRUFB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LENBQUMsQ0FBQyxFQUFLLEVBQUUsY0FBYyxHQUFHLEdBQVUsS0FBUCxNQUFVLEdBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBdUQsR0FBdEQsRUFBRSxPQUFPLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBTyxPQUFFLElBQUksRUFBWSxLQUFQLEtBQVMsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQU8sR0FBRyxNQUFSLEdBQWEsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFFLFlBQW1CLElBQVAsTUFBVSxFQUFFLENBQUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxFQUFFLEdBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBYyxJQUFQLEtBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQy9lLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFTLElBQVAs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SUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFXLElBQUosT0FBTSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBYyxHQUFVLElBQVAsTUFBaUIsSUFBUCxNQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBeUIsT0FBdEIsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQVMsRUFDNVosU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFXLElBQUosT0FBTSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBYyxHQUFVLElBQVAsTUFBaUIsSUFBUCxNQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBK0IsT0FBNUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQVEsR0FBRyxNQUFSLEVBQVksT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEdBQUcsR0FBRSxJQUFJLEVBQUUsY0FBYyxFQUFvRCxPQUFsRCxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsSUFBVyxFQUFFLFNBQVMsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFFLEdBQU0sSUFBSixHQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQUUsQ0FBUSxHQUFFLEVBQUUsR0FBRyxXQUFXLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxjQUM1YyxTQUFTLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBaUUsR0FBL0QsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYyxHQUFHLFdBQVcsS0FBSyxLQUFLLElBQUksRUFBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFPLFFBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBUyxJQUFQLEtBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FDN0ssU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYyxHQUFHLFdBQVcsS0FBSyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQU0sS0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEdBQU8sRUFBRSxRQUFOLElBQXFCLElBQVAsTUFBYyxFQUFFLFFBQU4sS0FBZSxFQUFFLEVBQUUsb0JBQTJCLElBQVAsTUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBb0MsR0FBbEMsRUFBRSxjQUFjLEdBQUcsRUFBRSxXQUFXLEdBQUssR0FBRyxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRSxFQUFFLFlBQW1CLEtBQVAsTUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRSxLQUFLLEdBQUUsS0FBSyxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsTUFBTSxHQUFFLFNBQUUsRUFBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFTLElBQVAsT0FBVyxFQUFFLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQzVjLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFB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QUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBUSxVQUFKLEVBQWtCLGNBQUosR0FBRSxFQUFnQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQU0sS0FBQyxJQUFJLEdBQUUsRUFBRSxVQUFVLEdBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFFLEtBQUssSUFBSSxJQUFJLEdBQUUsR0FBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxHQUFHLEdBQVUsS0FBUCxLQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTyxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFnQixRQUMxZixRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFLE9BQU8sRUFBRSxjQUFlLFNBQVMsRUFBRSxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQVksSUFBUCxNQUFpQixFQUFFLFlBQVQsT0FBcUIsRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFl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QUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksR0FBTyxJQUFKLEdBQVcsSUFBSixFQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQU8sUUFBTyxJQUFKLElBQVEsRUFBRSxFQUFFLE1BQWEsSUFBUCxNQUFVLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFlLElBQVAsTUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFFLEtBQUssR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBYSxJQUFQLE1BQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUN4YSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBaUIsT0FBTyxHQUFHLHVCQUF2QixXQUE0QyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVUsR0FBRSxJQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU8sR0FBRSxHQUFHLEVBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRSxFQUFFLEdBQUcsR0FBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsR0FBRyxFQUFTLEtBQVAsT0FBVyxHQUFHLEdBQUcsR0FBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUUsRUFBRSxTQUFTLEdBQVEsUUFBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVcsSUFBRyxHQUFXLEtBQVAsT0FBVyxHQUFHLEdBQUcsR0FBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUUsRUFBRSxTQUFTLEdBQUcsVUFBVyxHQUFFLEdBQUksRUFBRSxHQUFFLEVBQUUsR0FBRyxHQUFFLEVBQUUsVUFBVSxjQUFjLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsSUFBSSxJQUFLLEVBQUUsRUFBRSxVQUFVLGNBQWMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxVQUFXLE9BQU8sUUFBUSxRQUFRLElBQUcsSUFBSSxLQUNwZ0IsRUFBRSxFQUFFLFlBQW1CLElBQVAsT0FBVyxFQUFFLEVBQUUsV0FBa0IsSUFBUCxPQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQWEsSUFBSixVQUFhLEVBQUUsS0FBUCxFQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBTyxFQUFFLEtBQVAsR0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFXLEdBQUUsSUFBSSxLQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQXVCLE9BQU8sRUFBRSx1QkFBdEIsWUFBNEMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sR0FBRSxDQUFDLEdBQUUsRUFBRSxFQUFFLEVBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVyxJQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFXLElBQUcsRUFBRSxLQUFLLEdBQUcsSUFBRyxFQUFFLEtBQVcsRUFBRSxnQkFBVCxLQUF1QixHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxjQUFjLEdBQUcsRUFBRSxFQUNwZixDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFlBQVksR0FBVSxJQUFQLEtBQVMsQ0FBQyxFQUFFLFlBQVksS0FBSyxJQUFJLEVBQUUsRUFBRSxVQUFpQixJQUFQLE9BQVcsRUFBRSxFQUFFLFVBQVUsSUFBSSxLQUFJLEVBQUUsUUFBUSxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQ3pNLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsR0FBVSxJQUFQLEtBQVMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUcsQ0FBQyxJQUFJLEdBQUUsRUFBRSxFQUFFLEtBQVksS0FBUCxNQUFVLENBQUMsT0FBTyxHQUFFLFNBQVUsR0FBRSxHQUFFLEdBQUUsVUFBVSxHQUFHLEdBQUcsWUFBYSxHQUFFLEdBQUUsR0FBRSxVQUFVLGNBQWMsR0FBRyxHQUFHLFlBQWEsR0FBRSxHQUFFLEdBQUUsVUFBVSxjQUFjLEdBQUcsR0FBRyxRQUFRLEdBQUUsR0FBRSxPQUFPLEdBQVUsS0FBUCxLQUFTLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEtBQUssR0FBRyxHQUFRLFFBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUUsRUFBRSxVQUFpQixLQUFQLE9BQVcsR0FBRSxPQUFPLE1BQU0sRUFBRSxPQUFPLEtBQUssTUFBTSxHQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsRUFBQyxHQUFHLEdBQUcsRUFBRSxhQUFhLE1BQU0sSUFBSSxFQUFFLEVBQUUsTUFBYSxJQUFQLE1BQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFDcGYsU0FBUyxFQUFFLENB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QUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRSxDQUFDLEdBQUUsRUFBRSxFQUFFLEVBQUMsRUFBRSxVQUFXLEdBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxHQUFnQixPQUFPLEVBQUUsb0JBQXRCLFdBQXdDLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEdBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxFQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsRUFBQyxFQUFFLFVBQVcsR0FBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxFQUFDLElBQUksTUFBTSxHQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFFLEtBQUssTUFBTSxJQUFJLEdBQUUsRUFBRSxRQUFRLEdBQVUsS0FBUCxLQUFTLENBQUMsR0FBRSxPQUFPLEVBQUUsT0FBTyxHQUFFLEdBQUUsTUFBTSxHQUFFLEVBQUUsUUFDdGQsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQWdCLE9BQU8sU0FBcEIsWUFBNEIsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sSUFBSSxHQUFHLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxHQUFHLDJCQUEyQixFQUFFLEdBQUcsR0FBRyxlQUFlLEVBQUUsR0FBRyxHQUFHLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFTLEdBQU4sS0FBUSxDQUFDLEdBQWMsT0FBTyxFQUFFLGNBQWMsbUJBQWxDLFNBQW1ELE1B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QUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxFQUFxQyxPQUFuQyxFQUFFLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBUyxPQUFRLE9BQU8sR0FBRSxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFXLEdBQVUsR0FBUixHQUFHLEVBQUUsQ0FBQyxHQUFNLEVBQUUsYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFPLEdBQUcsRUFBRSxDQUFDLElBQVYsRUFBWSxNQUF5QixHQUFuQixFQUFFLEVBQUUsZ0JBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsY0FBYyxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVcsR0FBVSxHQUFSLEdBQUcsRUFBRSxDQUFDLEdBQU0sRUFBRSxXQUFXLEVBQUUsTUFDdGYsRUFBRSxFQUFFLFdBQVcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQXNHLEdBQXBHLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSSxFQUFFLEtBQUksS0FBSyxFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxjQUFjLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxHQUFHLEVB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LFFBQVEsR0FBRSxZQUFZLEtBQUssR0FBRSxjQUFjLE1BQU0sSUFBSSxHQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQVUsS0FBUCxLQUFTLENBQUMsR0FBRSxPQUFPLEtBQUssR0FBRyxHQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUUsRUFBRSxHQUFFLEdBQUUsR0FBRSxJQUFJLEdBQUUsRUFBRSxZQUFZLEdBQVUsS0FBUCxLQUFTLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksRUFBQyxFQUFFLEVBQUUsWUFBWSxFQUFPLFFBQUUsSUFBSSxFQUFDLEVBQUUsUUFBWSxLQUFDLElBQVEsRUFBRSxLQUFQLEVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsR0FBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQVEsUUFBRyxJQUFHLEdBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQVUsSUFBUCxLQUFVLEVBQU0sRUFBRyxNQUFNLFNBQWQsSUFBdUIsRUFBRyxPQUFPLEtBQUssR0FBRyxFQUFHLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRSxHQUFHLEdBQUUsRUFBQyxFQUFNLEtBQUosSUFBUSxHQUFFLEdBQVUsS0FBUCxLQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFVLEdBQUUsRUFBRSxPQUNsZixNQUFNLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsWUFBYSxHQUFFLEdBQUUsR0FBRSxJQUFRLEtBQUosRUFBYSxVQUFKLEdBQUUsRUFBWSxJQUFRLEVBQUUsTUFBTSxPQUFiLElBQWlDLE9BQU8sRUFBRSwyQkFBdEIsWUFBdUQsSUFBUCxNQUF1QixPQUFPLEVBQUUsb0JBQXRCLGFBQWlELEtBQVAsT0FBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLE1BQU0sSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxhQUFvQixJQUFQLE1BQVUsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUksR0FBVSxJQUFQLE9BQVcsR0FBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLFlBQVksR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQXNCLE9BQWQsR0FBRyxRQUFRLEdBQWlCLElBQVAsS0FBUyxHQUFHLEVBQzVkLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBTyxLQUFKLEdBQVcsS0FBSixHQUFXLEtBQUosRUFBTSxHQUFFLEVBQVMsS0FBUCxPQUFlLEdBQUcsYUFBUixJQUF5QixHQUFHLGFBQVIsR0FBb0IsR0FBRyxHQUFFLEVBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRSxJQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUksR0FBRyxLQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxHQUF5QixHQUF0QixHQUFHLEVBQUUsR0FBRSxFQUFFLEdBQUcsUUFBUSxFQUFZLEtBQVAsS0FBUyxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBYSxPQUFYLEdBQUUsS0FBSyxHQUFFLEVBQVMsR0FBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQVksS0FBUCxNQUFVLEdBQUcsRUFBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBWSxLQUFQLE9BQVcsR0FBRyxHQUFHLEdBQUcsRUFBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsYUFBb0IsSUFBUCxLQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFHLFFBQVEsS0FDdGQsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFxQixHQUFYLEVBQUUsRUFBRSxRQUFlLEVBQUUsTUFBTSxTQUFiLEdBQXFCLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQVMsSUFBUCxLQUFTLENBQUMsR0FBRSxFQUFFLFFBQVksS0FBVyxHQUFWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBWSxJQUFQLEtBQVMsQ0FBQyxFQUFFLE9BQU8sTUFBTSxHQUFFLEVBQUUsT0FBTyxHQUFVLElBQVAsS0FBUyxFQUFFLE9BQU8sTUFBTSxFQUFFLGFBQWEsRUFBRSxFQUFFLFVBQVUsS0FBUyxLQUFDLEdBQUUsRUFBRSxHQUFFLEtBQUssUUFBb0IsR0FBWixFQUFFLEVBQUUsUUFBa0IsSUFBUCxLQUFTLENBQUMsR0FBRSxFQUFFLE9BQU8sR0FBRSxFQUFFLFFBQWUsSUFBUCxNQUFjLEtBQUosSUFBUSxHQUFFLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRSxFQUFFLEdBQUUsV0FBVyxHQUFHLENBQUMsR0FBRSxXQUFXLEtBQUssR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFFLENBQVEsR0FBRSxXQUFXLEVBQUUsR0FBRSxFQUFFLE9BQU8sS0FDemIsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxRQUFlLEtBQVAsTUFBVyxJQUFRLEdBQUUsS0FBUCxFQUFVLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLGNBQWMsR0FBVSxJQUFQLEtBQVMsT0FBTyxLQUEyQyxHQUF0QyxFQUFFLGFBQWEsS0FBSyxFQUFFLGNBQWMsRUFBSyxJQUFJLEVBQUUsUUFBUSxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUE4SixHQUFuSixHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksS0FBSSxHQUFFLEdBQUUsS0FBSyxHQUFFLElBQVEsRUFBRSxhQUFhLFFBQXBCLElBQWdDLEVBQUUsTUFBTSxRQUFiLEdBQW9CLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FBTSxPQUFMLEdBQUcsRUFBUyxLQUFLLEdBQUcsR0FBTyxFQUFFLE1BQU0sU0FBYixHQUE0QixFQUFFLGFBQWEsU0FBcEIsR0FBNEIsRUFBRSxDQUFDLEVBQUUsR0FBRSxXQUFXLEdBQUUsV0FBVyxLQUFLLElBQUksRUFDdmYsR0FBRSxHQUFFLEVBQUUsSUFBSSxHQUFFLEdBQUUsSUFBRyxFQUFFLEdBQUcsUUFBUSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLFdBQVcsRUFBTyxPQUFFLFFBQVEsRUFBc0YsR0FBcEYsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsYUFBaUIsSUFBSixJQUFRLEdBQUcsTUFBTSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFZLElBQVAsS0FBUyxJQUFJLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBMkYsT0FBcEYsR0FBRyxLQUFSLEdBQWdCLEVBQUUsTUFBTixHQUFXLEdBQUcsRUFBRSxFQUFFLEVBQUUsY0FBa0IsRUFBRSxLQUFQLEVBQVUsSUFBSSxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFTLEtBQ3BkLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBVSxLQUFQLEtBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLFdBQVcsRUFBRSxHQUFFLEdBQUcsQ0FBK0IsR0FBOUIsR0FBRSxXQUFXLEtBQUssR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFZLEtBQVAsS0FBVSxJQUFJLEVBQUUsR0FBTyxLQUFtQixHQUFsQixFQUFFLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBVSxHQUFFLEtBQVAsRUFBVSxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRSxJQUFHLEVBQUUsSUFBSSxHQUFFLEVBQUUsUUFBZSxLQUFQLE1BQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRSxFQUFFLEVBQUUsTUFBTSxJQUFRLEdBQUUsTUFBTSxNQUFiLEVBQWlCLENBQUMsSUFBSSxHQUFFLEVBQUUsVUFBVSxHQUFVLEtBQVAsS0FBUyxDQUFDLFFBQVEsR0FBRSxFQUFFLEdBQUUsR0FBRSxPQUFPLEtBQUksQ0FBQyxJQUFJLEdBQUUsR0FBRSxJQUFHLElBQUksR0FBRSxHQUFTLEtBQVAsTUFBVSxDQUFDLElBQUksR0FBRSxHQUFFLE9BQU8sR0FBRSxTQUFVLE9BQU8sUUFBUSxJQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxJQUFJLEdBQUUsR0FBRSxNQUFNLEdBQVUsS0FBUCxLQUFTLEdBQUUsT0FBTyxHQUFFLEdBQUUsR0FBTyxVQUFZLEtBQVAsTUFBVSxDQUFDLEdBQUUsR0FBRSxJQUFRLFFBQUosR0FBZ0IsT0FBSixJQUFFLEdBQWUsR0FBTixHQUFHLEVBQUMsRUFBSyxLQUNqZixHQUFFLENBQUMsR0FBRSxLQUFLLE1BQU0sR0FBVSxLQUFQLEtBQVMsQ0FBQyxHQUFFLE9BQU8sR0FBRSxHQUFFLEdBQUUsTUFBTSxHQUFFLEtBQUksSUFBSSxHQUFFLEVBQUUsVUFBVSxHQUFVLEtBQVAsS0FBUyxDQUFDLElBQUksRUFBRSxHQUFFLE1BQU0sR0FBVSxJQUFQLEtBQVMsQ0FBQyxHQUFFLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxFQUFFLFFBQWdCLElBQVAsT0FBVyxHQUFFLEdBQUcsSUFBUSxFQUFFLGFBQWEsUUFBcEIsR0FBa0MsSUFBUCxLQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUUsRUFBTyxPQUFFLEtBQVksS0FBUCxNQUFVLENBQUssR0FBSixFQUFFLElBQVUsRUFBRSxNQUFNLFFBQWIsRUFBbUIsT0FBTyxFQUFFLFNBQVUsT0FBTyxRQUFRLElBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFVLElBQVAsS0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sR0FBRSxFQUFFLFFBQVEsR0FBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsUUFBUSxJQUFJLEdBQUUsRUFBUyxLQUFQLE1BQVUsQ0FBQyxFQUFFLEdBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFRLEVBQUUsYUFBYSxRQUFwQixHQUN6ZCxJQURvZixLQUNsZixFQUFFLE9BQU8sRUFBRSxHQUFFLEVBQU8sT0FBRSxJQUFJLEVBQUUsRUFBUyxLQUFQLE1BQVUsQ0FBSyxHQUFKLEdBQUUsSUFBVSxHQUFFLE1BQU0sUUFBYixFQUFtQixHQUFHLENBQUMsT0FBTyxHQUFFLFNBQVUsT0FBTyxRQUFRLElBQUcsR0FBRyxFQUFFLEVBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsS0FBSyxRQUFRLElBQUksRUFBRyxHQUFFLFFBQVEsR0FBVSxJQUFQLEtBQVUsQ0FBQyxFQUFHLE9BQU8sR0FBRSxPQUFPLEdBQUUsRUFBRyxRQUFRLEdBQUUsR0FBRSxRQUFpQixHQUFULEdBQUUsRUFBRSxHQUFHLEVBQUssSUFBaUIsT0FBTyxHQUFHLHdCQUF2QixXQUE2QyxHQUFHLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sU0FBRSxDQUFRLEdBQUUsRUFBRSxHQUFFLFdBQVcsR0FBRyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFFLEVBQVMsSUFBUCxPQUFXLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUMxZSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQU8sRUFBRSxNQUFOLEVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFPLFVBQVksSUFBUCxNQUFVLENBQUMsR0FBTyxFQUFFLE1BQU4sRUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFXLFFBQU8sRUFBRSxNQUFOLEVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEdBQWdCLE9BQU8sRUFBRSxLQUFLLDJCQUEzQixZQUFrRSxPQUFPLEVBQUUsb0JBQXRCLGFBQWlELEtBQVAsT0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFTLElBQVAsT0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUM1VSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQWlCLElBQVAsTUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxLQUFJLElBQUksR0FBRSxLQUFLLElBQVEsS0FBSixHQUFXLEtBQUosSUFBUSxHQUFFLGFBQWEsSUFBRyxJQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUssSUFBSixLQUFhLEVBQUUsS0FBSyxLQUFaLEVBQWUsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQU8sR0FBRyxhQUFSLElBQXFCLEdBQUcsV0FBVyxJQUFJLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBUyxJQUFQLE9BQVcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFTLElBQVAsT0FBVyxFQUFFLEVBQUUsV0FBVyxHQUFHLEVBQUUsQ0FBQyxFQUNoWixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBVSxJQUFHLElBQVEsVUFBSixFQUFzQixjQUFKLEdBQUUsRUFBdUIsSUFBUCxPQUFXLEVBQUUsRUFBRSxXQUFXLFVBQVcsSUFBRyxFQUFFLEVBQUUsVUFBVSxjQUFjLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFVLElBQVAsTUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUMvTSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFVLElBQVAsS0FBUyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxHQUFFLFFBQVEsR0FBRSxHQUFPLEtBQUMsSUFBUSxFQUFFLE1BQU0sS0FBYixJQUFzQixFQUFFLE1BQU0sT0FBYixFQUFrQixPQUFPLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBTyxFQUFFLE1BQU0sVUFBYixFQUFxQixHQUFHLEdBQVEsUUFBRSxHQUFHLEtBQVEsRUFBRSxNQUFNLFdBQWIsR0FBdUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQVksT0FBVixFQUFFLE1BQU0sRUFBUyxFQUFFLFNBQVUsR0FBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQzVJLE9BRDhJLEVBQUUsT0FBTyxFQUFhLE9BQU8sSUFBbEIsVUFBNEIsSUFBUCxNQUF1QixPQUFPLEVBQUUsU0FBdEIsWUFBdUMsRUFBRSxXQUFOLFFBQWdCLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBYyxLQUFLLEVBQUUsWUFBWSxLQUNqZixHQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsY0FBcUIsRUFBRSxRQUFULE1BQXlCLEVBQUUsUUFBTixPQUFZLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFjLE1BQU8sSUFBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQXFGLE9BQXBGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBUyxPQUFRLEdBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQWEsR0FBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBYSxJQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFhLElBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxNQUFNLE1BQU0sRUFBRSxJQUNoZ0IsRUFBRSxFQUFFLENBQUMsRUFBRyxPQUFPLE1BQU8sR0FBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU8sR0FBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU8sR0FBRSxFQUFFLENBQU8sR0FBTixHQUFHLENBQUMsRUFBWSxJQUFQLEtBQVMsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMs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LE9BQU8sRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxNQUFPLEdBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsYUFBYSxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVyxJQUFHLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQzdmLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU8sSUFBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFPLElBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFPLElBQUcsT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU8sSUFBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUN4VixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENB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SUFBSSxFQUFRLHlCQUF5QixRQUFRLENBQUMsRUFBRSxDQUFDLEdBQVEsRUFBRSxNQUFQLEdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFVLElBQVAsS0FBUyxDQUFDLElBQUksRUFBRSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFRLGtDQUFrQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQVEsRUFBRSxNQUFQLEdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQVUsSUFBUCxLQUFTLENBQUMsSUFBSSxFQUFFLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUM1WSxFQUFRLDRCQUE0QixRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFVLEdBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsUUFBUSxjQUFjLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBTSxJQUFKLElBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsR0FBTyxHQUFFLEtBQVAsSUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLFVBQVcsSUFBRyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQVUsSUFBUCxLQUFTLENBQUMsSUFBSSxFQUFFLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBUSxlQUFlLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRSxJQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQUUsQ0FBUSxHQUFFLEVBQU0sS0FBSixJQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsS0FB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LENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQU8sRUFBRSxNQUFOLEdBQVcsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsTUFBYSxJQUFQLE1BQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxNQUFNLElBQUksRUFBUSx5QkFBeUIsUUFBUSxFQUFFLENBQUMsT0FBTyxJQUMvUixFQUFRLGtDQUFrQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUUsRUFBRSxHQUFHLEdBQU8sRUFBRSxNQUFOLElBQVksR0FBRyxDQUFDLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxNQUFhLElBQVAsTUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVEsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFF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RSxFQUFHLENBQUUsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksSUFBRyxNQUFPLHlFQUEwRSxLQUFNLEVBQUUsRUFBRyxDQUFFLFNBQVUsQ0FBRSxJQUFLLElBQUcsV0FBWSxHQUFHLFFBQVMsRUFBRSxFQUFHLEtBQU0sRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsSUFBRyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxJQUFHLEdBQUMsRUFBRyxLQUFNLEdBQUcsTUFBTyxDQUFDLENBQUUsU0FBVSxDQUFFLElBQUssa0VBQW1FLFdBQVksR0FBRyxRQUFTLEVBQUUsRUFBRyxLQUFNLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLGtGQUFtRixLQUFNLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLElBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyx5REFBMEQsV0FBWSxHQUFHLFFBQVMsRUFBRSxFQUFHLEtBQU0sRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLDJEQUE0RCxLQUFNLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLElBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFNBQVUsQ0FBRSxJQUFLLDZEQUE4RCxXQUFZLEdBQUcsUUFBUyxFQUFFLEVBQUcsS0FBTSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsTUFBTyxxRUFBc0UsS0FBTSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsU0FBVSxDQUFFLElBQUssb0RBQXFELFdBQVksR0FBRyxRQUFTLEVBQUUsRUFBRyxLQUFNLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUMxa0QsWUFBVSx3QkNMbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELDRCQUErQixPQUN2QyxJQUFNLFVBQ0EsVUFDQSxJQUEwQixDQUFDLEVBQWdCLEVBQVUsQ0FBQyxJQUFNLENBQzlELE9BQVcsSUFBaUIsZ0JBQWlCLElBQVUsUUFBUyxDQUM1RCxlQUFnQixFQUNoQixPQUFRLEVBQVEsTUFDcEIsQ0FBQyxHQUVHLDRCQUEwQix3QkNWbEMsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHFCQUF3QixPQUNoQyxJQUFNLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsVUFDQSxJQUFtQixDQUFDLEtBQVksQ0FDbEMsV0FBWSxhQUNaLGNBQWUsR0FBUSxlQUFpQixJQUFjLFdBQ3RELGNBQWUsR0FBUSxlQUFpQixJQUFjLFNBQ3RELGtCQUFtQixHQUFRLG1CQUFxQixHQUNoRCxpQkFBa0IsR0FBUSxrQkFBb0IsSUFBbUIsd0JBQ2pFLE9BQVEsR0FBUSxRQUFVLElBQUksSUFBZ0IsV0FDOUMsVUFBVyxHQUFRLFdBQWEsV0FDaEMsVUFBVyxHQUFRLFdBQWEsSUFBYSxTQUM3QyxZQUFhLEdBQVEsYUFBZSxJQUFZLFNBQ2hELFlBQWEsR0FBUSxhQUFlLElBQVksTUFDcEQsR0FDUSxxQkFBbUIsd0JDbkIzQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQscUJBQXdCLE9BQ2hDLElBQU0sU0FDQSxJQUFpQixJQUFRLHFCQUEwQyxFQUNuRSxRQUNBLFNBQ0EsU0FDQSxRQUNBLFNBQ0EsU0FDQSxTQUNBLFVBQ0EsVUFDQSxTQUNBLFNBQ0EsU0FDQSxJQUFtQixDQUFDLElBQVcsQ0FDN0IsSUFBZ0IsZ0NBQWlDLFFBQVEsT0FBTyxFQUNwRSxJQUFNLEVBQW1CLElBQTBCLDBCQUEyQixDQUFNLEVBQzlFLEVBQXdCLElBQU0sRUFBYSxFQUFFLEtBQUssSUFBZ0IseUJBQXlCLEVBQzNGLEVBQXlCLElBQXVCLGlCQUFrQixDQUFNLEVBQzlFLE1BQU8sSUFDQSxLQUNBLEVBQ0gsUUFBUyxPQUNULGVBQ0Esa0JBQW1CLEdBQVEsbUJBQXFCLElBQXdCLG9CQUN4RSx5QkFBMEIsR0FBUSwwQkFDMUIsSUFBdUIsaUJBQWtCLENBQUUsVUFBVyxFQUFtQixVQUFXLGNBQWUsSUFBZSxRQUFRLE9BQVEsQ0FBQyxFQUMzSSxZQUFhLEdBQVEsYUFBbUIsR0FBdUIsV0FBWSxJQUFtQiwrQkFBK0IsRUFDN0gsT0FBUSxHQUFRLFFBQWMsR0FBdUIsV0FBWSxHQUFrQiwyQkFBNEIsR0FBa0IsK0JBQStCLEVBQ2hLLGVBQWdCLEdBQVEsZ0JBQWtCLElBQUksSUFBb0IsZ0JBQWdCLENBQXFCLEVBQ3ZHLFVBQVcsR0FBUSxXQUNYLEdBQXVCLFdBQVksSUFDaEMsSUFBbUIsK0JBQ3RCLFFBQVMsVUFBYSxNQUFNLEVBQXNCLEdBQUcsV0FBYSxJQUFhLGtCQUNuRixDQUFDLEVBQ0wsT0FBUSxHQUFRLFFBQVUsSUFBWSxLQUFLLEtBQUssS0FBTSxRQUFRLEVBQzlELGdCQUFpQixHQUFRLGlCQUFtQixJQUFvQixnQkFDaEUscUJBQXNCLEdBQVEsc0JBQTRCLEdBQXVCLFdBQVksR0FBa0IsMENBQTBDLEVBQ3pKLGdCQUFpQixHQUFRLGlCQUF1QixHQUF1QixXQUFZLEdBQWtCLHFDQUFxQyxDQUM5SSxHQUVJLHFCQUFtQix3QkMzQzNCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBd0IsYUFBZ0IsT0FDaEQsSUFBTSxTQUNBLFNBQ0EsU0FDQSxVQUNBLFVBQ0EsVUFDQSxTQUNBLFVBQ0EsU0FDTixPQUFPLGVBQWUsSUFBUyxXQUFZLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFnQixPQUFVLENBQUMsRUFDcEgsSUFBTSxVQUNBLFVBQ04sTUFBTSxZQUFzQixJQUFnQixNQUFPLENBQy9DLFdBQVcsQ0FBQyxFQUFlLENBQ3ZCLElBQU0sRUFBZ0IsSUFBZ0IsaUJBQWtCLENBQWEsRUFDL0QsRUFBZ0IsSUFBcUIsZ0NBQWlDLENBQVMsRUFDL0UsRUFBZ0IsSUFBa0Isb0JBQXFCLENBQVMsRUFDaEUsRUFBZ0IsSUFBc0Isc0JBQXVCLENBQVMsRUFDdEUsRUFBZ0IsSUFBbUIsbUJBQW9CLENBQVMsRUFDaEUsRUFBZ0IsSUFBeUIsd0JBQXlCLENBQVMsRUFDM0UsRUFBZ0IsSUFBd0IsdUJBQXdCLENBQVMsRUFDL0UsTUFBTSxDQUFTLEVBQ2YsS0FBSyxPQUFTLEVBQ2QsS0FBSyxnQkFBZ0IsSUFBUSxJQUFtQixlQUFnQixLQUFLLE1BQU0sQ0FBQyxFQUM1RSxLQUFLLGdCQUFnQixJQUFRLElBQTRCLHVCQUF3QixLQUFLLE1BQU0sQ0FBQyxFQUM3RixLQUFLLGdCQUFnQixJQUFRLElBQXlCLG9CQUFxQixLQUFLLE1BQU0sQ0FBQyxFQUN2RixLQUFLLGdCQUFnQixJQUFRLElBQW9CLGdCQUFpQixLQUFLLE1BQU0sQ0FBQyxFQUM5RSxLQUFLLGdCQUFnQixJQUFRLElBQWlDLDRCQUE2QixLQUFLLE1BQU0sQ0FBQyxFQUN2RyxLQUFLLGdCQUFnQixJQUFRLElBQXdCLG1CQUFvQixLQUFLLE1BQU0sQ0FBQyxFQUV6RixPQUFPLEVBQUcsQ0FDTixNQUFNLFFBQVEsRUFFdEIsQ0FDUSxrQkFBZ0Isd0JDcEN4QixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxxQkFBd0IsT0FDaEMsSUFBSSxLQUNILFFBQVMsQ0FBQyxFQUFrQixDQUN6QixFQUFpQixPQUFZLFNBQzdCLEVBQWlCLE1BQVcsVUFDN0IsSUFBMkIsdUJBQTZCLHFCQUFtQixDQUFDLEVBQUUsc0JDTmpGLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxxQkNBNUQsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sU0FDTixJQUFRLG1CQUFrQyxFQUFPLEVBQ2pELElBQVEsbUJBQW1DLEVBQU8sRUFDbEQsSUFBUSxtQkFBZ0MsRUFBTyxzQkNKL0MsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBeUIsT0FDakMsSUFBSSxLQUNILFFBQVMsQ0FBQyxFQUFtQixDQUMxQixFQUFrQixLQUFVLE9BQzVCLEVBQWtCLE1BQVcsVUFDOUIsSUFBNEIsd0JBQThCLHNCQUFvQixDQUFDLEVBQUUsc0JDTnBGLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHFCQ0E1RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQVEsbUJBQThDLEVBQU8sRUFDN0QsR0FBUSxtQkFBMkMsRUFBTyxFQUMxRCxHQUFRLG1CQUF5QyxFQUFPLEVBQ3hELEdBQVEsbUJBQWtDLEVBQU8sRUFDakQsR0FBUSxtQkFBMEMsRUFBTyxzQkNOekQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXFCLE9BQzdCLElBQUksS0FDSCxRQUFTLENBQUMsRUFBZSxDQUN0QixFQUFjLEVBQWMsT0FBWSxHQUFLLFNBQzdDLEVBQWMsRUFBYyxRQUFhLEdBQUssWUFDL0MsSUFBd0Isb0JBQTBCLGtCQUFnQixDQUFDLEVBQUUsc0JDTnhFLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHFCQ0E1RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxTQUNOLElBQVEsbUJBQWlELEVBQU8sRUFDaEUsSUFBUSxtQkFBb0MsRUFBTyxzQkNIbkQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsMkJBQThCLE9BQ3RDLElBQUksS0FDSCxRQUFTLENBQUMsRUFBd0IsQ0FDL0IsRUFBdUIsU0FBYyxXQUNyQyxFQUF1QixTQUFjLFdBQ3JDLEVBQXVCLFFBQWEsWUFDckMsSUFBaUMsNkJBQW1DLDJCQUF5QixDQUFDLEVBQUUsc0JDUG5HLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsc0JDQTVELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxzQkNBNUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHFCQ0E1RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQVEsbUJBQWlDLEVBQU8sRUFDaEQsR0FBUSxtQkFBZ0MsRUFBTyxFQUMvQyxHQUFRLG1CQUF5RCxFQUFPLEVBQ3hFLEdBQVEsbUJBQW9DLEVBQU8sRUFDbkQsR0FBUSxtQkFBa0MsRUFBTyxFQUNqRCxHQUFRLG1CQUFtQyxFQUFPLEVBQ2xELEdBQVEsbUJBQXNDLEVBQU8sRUFDckQsR0FBUSxtQkFBa0MsRUFBTyxFQUNqRCxHQUFRLG1CQUFrQyxFQUFPLEVBQ2pELEdBQVEsbUJBQW9DLEVBQU8sRUFDbkQsR0FBUSxtQkFBcUMsRUFBTyxFQUNwRCxHQUFRLG1CQUF1QyxFQUFPLEVBQ3RELEdBQVEsbUJBQWdDLEVBQU8sRUFDL0MsR0FBUSxtQkFBb0MsRUFBTyxFQUNuRCxHQUFRLG1CQUFrQyxFQUFPLEVBQ2pELEdBQVEsbUJBQXNDLEVBQU8sRUFDckQsR0FBUSxtQkFBc0MsRUFBTyxFQUNyRCxHQUFRLG1CQUFtQyxFQUFPLEVBQ2xELEdBQVEsbUJBQW9DLEVBQU8sRUFDbkQsR0FBUSxtQkFBaUMsRUFBTyxFQUNoRCxHQUFRLG1CQUFpQyxFQUFPLEVBQ2hELEdBQVEsbUJBQWtDLEVBQU8sRUFDakQsR0FBUSxtQkFBcUMsRUFBTyxFQUNwRCxHQUFRLG1CQUFrQyxFQUFPLEVBQ2pELEdBQVEsbUJBQXlFLEVBQU8sRUFDeEYsR0FBUSxtQkFBZ0YsRUFBTyxFQUMvRixHQUFRLG1CQUFpRixFQUFPLEVBQ2hHLEdBQVEsbUJBQW9DLEVBQU8sRUFDbkQsR0FBUSxtQkFBcUUsRUFBTyxFQUNwRixHQUFRLG1CQUFvRCxFQUFPLEVBQ25FLEdBQVEsbUJBQStCLEVBQU8sRUFDOUMsR0FBUSxtQkFBZ0MsRUFBTyxFQUMvQyxHQUFRLG1CQUFrQyxFQUFPLHNCQ2xDakQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFVBQWEsT0FDckIsSUFBTSxVQUNOLE1BQU0sR0FBTSxDQUNSLFdBQVcsRUFBRyxPQUFNLE9BQU8sSUFBUSxjQUFjLE9BQVEsU0FBUyxDQUFDLEdBQUssQ0FDcEUsS0FBSyxLQUFPLEVBQ1osS0FBSyxLQUFPLEVBQ1osS0FBSyxPQUFTLEVBRWxCLEdBQUcsQ0FBQyxFQUFPLENBQ1AsS0FBSyxPQUFPLEtBQUssQ0FBSyxFQUUxQixHQUFHLENBQUMsRUFBUSxDQUNSLEtBQUssT0FBUyxFQUVsQixNQUFNLENBQUMsRUFBTyxDQUNWLEtBQUssT0FBUyxLQUFLLE9BQU8sT0FBTyxDQUFDLElBQU0sSUFBTSxDQUFLLEVBRXZELFFBQVEsRUFBRyxDQUNQLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFPLEVBQUUsU0FBUyxHQUFHLEdBQUssRUFBRSxTQUFTLEdBQUcsRUFBSSxJQUFJLEtBQU8sQ0FBRSxFQUFFLEtBQUssSUFBSSxFQUVoRyxHQUFHLEVBQUcsQ0FDRixPQUFPLEtBQUssT0FFcEIsQ0FDUSxVQUFRLHdCQ3pCaEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFdBQWMsT0FDdEIsTUFBTSxHQUFPLENBQ1QsV0FBVyxFQUFHLFNBQVMsQ0FBQyxFQUFHLFdBQVcsU0FBVyxDQUM3QyxLQUFLLFFBQVUsQ0FBQyxFQUNoQixFQUFPLFFBQVEsS0FBSyxTQUFTLEtBQUssSUFBSSxDQUFDLEVBQ3ZDLEtBQUssU0FBVyxFQUVwQixRQUFRLENBQUMsRUFBTyxDQUNaLEtBQUssUUFBUSxFQUFNLEtBQUssWUFBWSxHQUFLLEVBRTdDLFFBQVEsQ0FBQyxFQUFNLENBQ1gsT0FBTyxLQUFLLFFBQVEsRUFBSyxZQUFZLEdBRXpDLFdBQVcsQ0FBQyxFQUFNLENBQ2QsT0FBTyxLQUFLLFFBQVEsRUFBSyxZQUFZLEdBRXpDLFNBQVMsQ0FBQyxFQUFNLENBQ1osT0FBTyxPQUFPLE9BQU8sS0FBSyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQVUsRUFBTSxPQUFTLENBQUksRUFFaEYsQ0FDUSxXQUFTLHdCQ3JCakIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHNCQ0E1RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsZ0JBQW1CLE9BQzNCLE1BQU0sR0FBWSxDQUNkLFdBQVcsQ0FBQyxFQUFTLENBQ2pCLEtBQUssT0FBUyxFQUFRLFFBQVUsTUFDaEMsS0FBSyxTQUFXLEVBQVEsVUFBWSxZQUNwQyxLQUFLLEtBQU8sRUFBUSxLQUNwQixLQUFLLE1BQVEsRUFBUSxPQUFTLENBQUMsRUFDL0IsS0FBSyxRQUFVLEVBQVEsU0FBVyxDQUFDLEVBQ25DLEtBQUssS0FBTyxFQUFRLEtBQ3BCLEtBQUssU0FBVyxFQUFRLFNBQ2xCLEVBQVEsU0FBUyxNQUFNLEVBQUUsSUFBTSxJQUMzQixHQUFHLEVBQVEsWUFDWCxFQUFRLFNBQ1osU0FDTixLQUFLLEtBQU8sRUFBUSxLQUFRLEVBQVEsS0FBSyxPQUFPLENBQUMsSUFBTSxJQUFNLElBQUksRUFBUSxPQUFTLEVBQVEsS0FBUSxJQUNsRyxLQUFLLFNBQVcsRUFBUSxTQUN4QixLQUFLLFNBQVcsRUFBUSxTQUN4QixLQUFLLFNBQVcsRUFBUSxlQUVyQixXQUFVLENBQUMsRUFBUyxDQUN2QixJQUFLLEVBQ0QsTUFBTyxHQUNYLElBQU0sRUFBTSxFQUNaLE1BQVEsV0FBWSxHQUNoQixhQUFjLEdBQ2QsYUFBYyxHQUNkLFNBQVUsR0FDVixPQUFPLEVBQUksUUFBYSxVQUN4QixPQUFPLEVBQUksVUFBZSxTQUVsQyxLQUFLLEVBQUcsQ0FDSixJQUFNLEVBQVMsSUFBSSxJQUFZLElBQ3hCLEtBQ0gsUUFBUyxJQUFLLEtBQUssT0FBUSxDQUMvQixDQUFDLEVBQ0QsR0FBSSxFQUFPLE1BQ1AsRUFBTyxNQUFRLElBQVcsRUFBTyxLQUFLLEVBQzFDLE9BQU8sRUFFZixDQUNRLGdCQUFjLElBQ3RCLFNBQVMsR0FBVSxDQUFDLEVBQU8sQ0FDdkIsT0FBTyxPQUFPLEtBQUssQ0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFPLElBQWMsQ0FDbkQsSUFBTSxFQUFRLEVBQU0sR0FDcEIsTUFBTyxJQUNBLEdBQ0YsR0FBWSxNQUFNLFFBQVEsQ0FBSyxFQUFJLENBQUMsR0FBRyxDQUFLLEVBQUksQ0FDckQsR0FDRCxDQUFDLENBQUMsdUJDakRULE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxpQkFBb0IsT0FDNUIsTUFBTSxHQUFhLENBQ2YsV0FBVyxDQUFDLEVBQVMsQ0FDakIsS0FBSyxXQUFhLEVBQVEsV0FDMUIsS0FBSyxPQUFTLEVBQVEsT0FDdEIsS0FBSyxRQUFVLEVBQVEsU0FBVyxDQUFDLEVBQ25DLEtBQUssS0FBTyxFQUFRLFdBRWpCLFdBQVUsQ0FBQyxFQUFVLENBQ3hCLElBQUssRUFDRCxNQUFPLEdBQ1gsSUFBTSxFQUFPLEVBQ2IsT0FBTyxPQUFPLEVBQUssYUFBZSxVQUFZLE9BQU8sRUFBSyxVQUFZLFNBRTlFLENBQ1EsaUJBQWUsd0JDaEJ2QixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsb0JBQXVCLE9BQy9CLFNBQVMsR0FBZSxDQUFDLEVBQVUsQ0FFL0IsTUFEb0Isa0NBQ0QsS0FBSyxDQUFRLEVBRTVCLG9CQUFrQix3QkNOMUIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLHFCQ0E1RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQVEsbUJBQWlDLEVBQU8sRUFDaEQsR0FBUSxtQkFBa0MsRUFBTyxFQUNqRCxHQUFRLG1CQUF1QyxFQUFPLEVBQ3RELEdBQVEsbUJBQXVDLEVBQU8sRUFDdEQsR0FBUSxtQkFBd0MsRUFBTyxFQUN2RCxHQUFRLG1CQUEyQyxFQUFPLEVBQzFELEdBQVEsbUJBQWlDLEVBQU8scUJDUmhELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw0QkFBa0MsdUJBQTBCLE9BQ3BFLElBQU0sU0FDTixPQUFPLGVBQWUsSUFBUyxxQkFBc0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLGlCQUFvQixDQUFDLEVBQ3hJLE1BQU0sWUFBZ0MsSUFBZ0IsZ0JBQWlCLENBQ25FLFdBQVcsQ0FBQyxFQUFTLENBQ2pCLE1BQU0sQ0FBTyxFQUNiLE9BQU8sZUFBZSxLQUFNLElBQXdCLFNBQVMsRUFFckUsQ0FDUSw0QkFBMEIsd0JDVmxDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxtQ0FBeUMsa0NBQXdDLGdDQUFzQyxzQkFBNEIsMEJBQWdDLDRCQUFrQywwQkFBZ0MsMkJBQWlDLDRCQUFrQywwQkFBZ0Msa0NBQXdDLDBCQUE2QixPQUNyYSxJQUFNLFFBQ04sTUFBTSxZQUE4QixHQUEwQix1QkFBd0IsQ0FDbEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx3QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHdCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXNCLFNBQVMsRUFDM0QsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSwwQkFBd0IsSUFDaEMsTUFBTSxZQUFzQyxHQUEwQix1QkFBd0IsQ0FDMUYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxnQ0FDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLGdDQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQThCLFNBQVMsRUFDbkUsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSxrQ0FBZ0MsSUFDeEMsTUFBTSxZQUE4QixHQUEwQix1QkFBd0IsQ0FDbEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx3QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHdCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXNCLFNBQVMsRUFDM0QsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSwwQkFBd0IsSUFDaEMsTUFBTSxZQUFnQyxHQUEwQix1QkFBd0IsQ0FDcEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSwwQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLDBCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXdCLFNBQVMsRUFDN0QsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSw0QkFBMEIsSUFDbEMsTUFBTSxZQUErQixHQUEwQix1QkFBd0IsQ0FDbkYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx5QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHlCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXVCLFNBQVMsRUFDNUQsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSwyQkFBeUIsSUFDakMsTUFBTSxZQUE4QixHQUEwQix1QkFBd0IsQ0FDbEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx3QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHdCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXNCLFNBQVMsRUFDM0QsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSwwQkFBd0IsSUFDaEMsTUFBTSxZQUFnQyxHQUEwQix1QkFBd0IsQ0FDcEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSwwQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLDBCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXdCLFNBQVMsRUFDN0QsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSw0QkFBMEIsSUFDbEMsTUFBTSxZQUE4QixHQUEwQix1QkFBd0IsQ0FDbEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx3QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHdCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXNCLFNBQVMsRUFDM0QsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSwwQkFBd0IsSUFDaEMsTUFBTSxZQUEwQixHQUEwQix1QkFBd0IsQ0FDOUUsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxvQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLG9CQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQWtCLFNBQVMsRUFDdkQsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSxzQkFBb0IsSUFDNUIsTUFBTSxZQUFvQyxHQUEwQix1QkFBd0IsQ0FDeEYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSw4QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLDhCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQTRCLFNBQVMsRUFDakUsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSxnQ0FBOEIsSUFDdEMsTUFBTSxZQUFzQyxHQUEwQix1QkFBd0IsQ0FDMUYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxnQ0FDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLGdDQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQThCLFNBQVMsRUFDbkUsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSxrQ0FBZ0MsSUFDeEMsTUFBTSxZQUF1QyxHQUEwQix1QkFBd0IsQ0FDM0YsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxpQ0FDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLGlDQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQStCLFNBQVMsRUFDcEUsS0FBSyxNQUFRLEVBQUssTUFDbEIsS0FBSyxrQkFBb0IsRUFBSyxrQkFFdEMsQ0FDUSxtQ0FBaUMsdUJDdEx6QyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsdUNBQTZDLDZCQUFtQywwQkFBZ0MsdUNBQTZDLDZCQUFtQywwQkFBNkIsT0FDck8sSUFBTSxRQUNBLFVBQ0EsU0FDQSxTQUNBLElBQXdCLE1BQU8sRUFBTyxJQUFZLENBQ3BELElBQVEsV0FBVSxXQUFXLFFBQVMsT0FBTSxLQUFNLEdBQWEsTUFBTSxFQUFRLFNBQVMsRUFDaEYsRUFBVSxDQUNaLGVBQWdCLGtCQUNwQixFQUNNLEVBQWUsR0FBRyxHQUFVLFNBQVMsR0FBRyxFQUFJLEVBQVMsTUFBTSxFQUFHLEVBQUUsRUFBSSxHQUFZLFdBQ2xGLEVBV0osT0FWQSxFQUFPLEtBQUssVUFBYyxHQUFnQixLQUFNLEVBQU8sQ0FDbkQsU0FBVSxDQUFDLEVBQ1gsYUFBYyxDQUFDLEVBQ2YsS0FBTSxDQUFDLEVBQ1AsV0FBWSxDQUFDLEVBQ2IsVUFBVyxDQUFDLEVBQ1osWUFBYSxDQUFDLEVBQ2QsYUFBYyxDQUFDLEVBQ2YsTUFBTyxDQUFDLElBQVUsR0FBZ0IsTUFBTyxDQUFDLENBQzlDLENBQUMsQ0FBQyxFQUNLLElBQUksSUFBZ0IsWUFBWSxDQUNuQyxXQUNBLFdBQ0EsT0FDQSxPQUFRLE9BQ1IsVUFDQSxLQUFNLEVBQ04sTUFDSixDQUFDLEdBRUcsMEJBQXdCLElBQ2hDLElBQU0sSUFBMkIsTUFBTyxFQUFPLElBQVksQ0FDdkQsSUFBUSxXQUFVLFdBQVcsUUFBUyxPQUFNLEtBQU0sR0FBYSxNQUFNLEVBQVEsU0FBUyxFQUNoRixFQUFVLENBQ1osZUFBZ0Isa0JBQ3BCLEVBQ00sRUFBZSxHQUFHLEdBQVUsU0FBUyxHQUFHLEVBQUksRUFBUyxNQUFNLEVBQUcsRUFBRSxFQUFJLEdBQVkscUJBQ2xGLEVBTUosT0FMQSxFQUFPLEtBQUssVUFBYyxHQUFnQixLQUFNLEVBQU8sQ0FDbkQsV0FBWSxDQUFDLEVBQ2IsV0FBWSxDQUFDLEVBQ2IsT0FBUSxDQUFDLElBQVUsR0FBZ0IsTUFBTyxDQUFDLENBQy9DLENBQUMsQ0FBQyxFQUNLLElBQUksSUFBZ0IsWUFBWSxDQUNuQyxXQUNBLFdBQ0EsT0FDQSxPQUFRLE9BQ1IsVUFDQSxLQUFNLEVBQ04sTUFDSixDQUFDLEdBRUcsNkJBQTJCLElBQ25DLElBQU0sSUFBcUMsTUFBTyxFQUFPLElBQVksQ0FDakUsSUFBUSxXQUFVLFdBQVcsUUFBUyxPQUFNLEtBQU0sR0FBYSxNQUFNLEVBQVEsU0FBUyxFQUNoRixFQUFVLENBQ1osZUFBZ0Isa0JBQ3BCLEVBQ00sRUFBZSxHQUFHLEdBQVUsU0FBUyxHQUFHLEVBQUksRUFBUyxNQUFNLEVBQUcsRUFBRSxFQUFJLEdBQVksMEJBQ2xGLEVBTUosT0FMQSxFQUFPLEtBQUssVUFBYyxHQUFnQixLQUFNLEVBQU8sQ0FDbkQsU0FBVSxDQUFDLEVBQ1gsYUFBYyxDQUFDLEVBQ2YsU0FBVSxDQUFDLENBQ2YsQ0FBQyxDQUFDLEVBQ0ssSUFBSSxJQUFnQixZQUFZLENBQ25DLFdBQ0EsV0FDQSxPQUNBLE9BQVEsT0FDUixVQUNBLEtBQU0sRUFDTixNQUNKLENBQUMsR0FFRyx1Q0FBcUMsSUFDN0MsSUFBTSxJQUF3QixNQUFPLEVBQVEsSUFBWSxDQUNyRCxHQUFJLEVBQU8sYUFBZSxLQUFPLEVBQU8sWUFBYyxJQUNsRCxPQUFPLElBQTJCLEVBQVEsQ0FBTyxFQUVyRCxJQUFNLEVBQWUsR0FBZ0IsSUFBSyxDQUN0QyxVQUFXLEdBQW9CLENBQU0sQ0FDekMsQ0FBQyxFQUNLLEVBQVcsR0FBZ0IsY0FBbUIsR0FBZ0IsYUFBYyxNQUFNLEdBQVUsRUFBTyxLQUFNLENBQU8sQ0FBQyxFQUFHLE1BQU0sRUFDMUgsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsWUFBYSxHQUFnQixhQUM3QixVQUFXLEdBQWdCLFlBQzNCLFFBQVMsR0FBZ0IsYUFDekIsYUFBYyxHQUFnQixhQUM5QixVQUFXLEdBQWdCLFlBQy9CLENBQUMsRUFFRCxPQURBLE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDcEIsR0FFSCwwQkFBd0IsSUFDaEMsSUFBTSxJQUE2QixNQUFPLEVBQVEsSUFBWSxDQUMxRCxJQUFNLEVBQWUsSUFDZCxFQUNILEtBQU0sTUFBTSxJQUFlLEVBQU8sS0FBTSxDQUFPLENBQ25ELEVBQ00sRUFBWSxJQUFzQixFQUFRLEVBQWEsSUFBSSxFQUNqRSxPQUFRLE9BQ0MsNEJBQ0EsOENBQ0QsTUFBTSxNQUFNLElBQTRCLEVBQWMsQ0FBTyxNQUM1RCxvQ0FDQSxzREFDRCxNQUFNLE1BQU0sSUFBb0MsRUFBYyxDQUFPLE1BQ3BFLDRCQUNBLDhDQUNELE1BQU0sTUFBTSxJQUE0QixFQUFjLENBQU8sTUFDNUQsOEJBQ0EsZ0RBQ0QsTUFBTSxNQUFNLElBQThCLEVBQWMsQ0FBTyxNQUM5RCw2QkFDQSwrQ0FDRCxNQUFNLE1BQU0sSUFBNkIsRUFBYyxDQUFPLE1BQzdELDRCQUNBLDhDQUNELE1BQU0sTUFBTSxJQUE0QixFQUFjLENBQU8sTUFDNUQsOEJBQ0EsZ0RBQ0QsTUFBTSxNQUFNLElBQThCLEVBQWMsQ0FBTyxNQUM5RCw0QkFDQSw4Q0FDRCxNQUFNLE1BQU0sSUFBNEIsRUFBYyxDQUFPLE1BQzVELHdCQUNBLDBDQUNELE1BQU0sTUFBTSxJQUF3QixFQUFjLENBQU8sTUFDeEQsa0NBQ0Esb0RBQ0QsTUFBTSxNQUFNLElBQWtDLEVBQWMsQ0FBTyxNQUNsRSxvQ0FDQSxzREFDRCxNQUFNLE1BQU0sSUFBb0MsRUFBYyxDQUFPLFVBRXJFLElBQU0sRUFBYSxFQUFhLEtBQ2hDLE9BQU8sSUFBa0IsQ0FDckIsU0FDQSxhQUNBLFdBQ0osQ0FBQyxJQUdQLElBQTJCLE1BQU8sRUFBUSxJQUFZLENBQ3hELEdBQUksRUFBTyxhQUFlLEtBQU8sRUFBTyxZQUFjLElBQ2xELE9BQU8sSUFBOEIsRUFBUSxDQUFPLEVBRXhELElBQU0sRUFBZSxHQUFnQixJQUFLLENBQ3RDLFVBQVcsR0FBb0IsQ0FBTSxDQUN6QyxDQUFDLEVBQ0ssRUFBVyxHQUFnQixjQUFtQixHQUFnQixhQUFjLE1BQU0sR0FBVSxFQUFPLEtBQU0sQ0FBTyxDQUFDLEVBQUcsTUFBTSxFQUMxSCxFQUFVLEdBQWdCLEtBQU0sRUFBTSxDQUN4QyxzQkFBdUIsR0FBZ0IsYUFDdkMsU0FBVSxHQUFnQixhQUMxQixpQkFBa0IsR0FBZ0IsV0FDbEMsYUFBYyxHQUFnQixhQUM5QixzQkFBdUIsR0FBZ0IsV0FDdkMsY0FBZSxHQUFnQixZQUNuQyxDQUFDLEVBRUQsT0FEQSxPQUFPLE9BQU8sRUFBVSxDQUFHLEVBQ3BCLEdBRUgsNkJBQTJCLElBQ25DLElBQU0sSUFBZ0MsTUFBTyxFQUFRLElBQVksQ0FDN0QsSUFBTSxFQUFlLElBQ2QsRUFDSCxLQUFNLE1BQU0sSUFBZSxFQUFPLEtBQU0sQ0FBTyxDQUNuRCxFQUNNLEVBQVksSUFBc0IsRUFBUSxFQUFhLElBQUksRUFDakUsT0FBUSxPQUNDLDhCQUNBLGdEQUNELE1BQU0sTUFBTSxJQUE4QixFQUFjLENBQU8sTUFDOUQscUNBQ0EsdURBQ0QsTUFBTSxNQUFNLElBQXFDLEVBQWMsQ0FBTyxNQUNyRSw4QkFDQSxnREFDRCxNQUFNLE1BQU0sSUFBOEIsRUFBYyxDQUFPLE1BQzlELDRCQUNBLDhDQUNELE1BQU0sTUFBTSxJQUE0QixFQUFjLENBQU8sVUFFN0QsSUFBTSxFQUFhLEVBQWEsS0FDaEMsT0FBTyxJQUFrQixDQUNyQixTQUNBLGFBQ0EsV0FDSixDQUFDLElBR1AsSUFBcUMsTUFBTyxFQUFRLElBQVksQ0FDbEUsR0FBSSxFQUFPLGFBQWUsS0FBTyxFQUFPLFlBQWMsSUFDbEQsT0FBTyxJQUF3QyxFQUFRLENBQU8sRUFFbEUsSUFBTSxFQUFlLEdBQWdCLElBQUssQ0FDdEMsVUFBVyxHQUFvQixDQUFNLENBQ3pDLENBQUMsRUFDSyxFQUFXLEdBQWdCLGNBQW1CLEdBQWdCLGFBQWMsTUFBTSxHQUFVLEVBQU8sS0FBTSxDQUFPLENBQUMsRUFBRyxNQUFNLEVBQzFILEVBQVUsR0FBZ0IsS0FBTSxFQUFNLENBQ3hDLFdBQVksR0FBZ0IsYUFDNUIsVUFBVyxHQUFnQixZQUMzQixTQUFVLEdBQWdCLFlBQzFCLFNBQVUsR0FBZ0IsYUFDMUIsZ0JBQWlCLEdBQWdCLGFBQ2pDLHdCQUF5QixHQUFnQixZQUM3QyxDQUFDLEVBRUQsT0FEQSxPQUFPLE9BQU8sRUFBVSxDQUFHLEVBQ3BCLEdBRUgsdUNBQXFDLElBQzdDLElBQU0sSUFBMEMsTUFBTyxFQUFRLElBQVksQ0FDdkUsSUFBTSxFQUFlLElBQ2QsRUFDSCxLQUFNLE1BQU0sSUFBZSxFQUFPLEtBQU0sQ0FBTyxDQUNuRCxFQUNNLEVBQVksSUFBc0IsRUFBUSxFQUFhLElBQUksRUFDakUsT0FBUSxPQUNDLDhCQUNBLGdEQUNELE1BQU0sTUFBTSxJQUE4QixFQUFjLENBQU8sTUFDOUQsNkJBQ0EsK0NBQ0QsTUFBTSxNQUFNLElBQTZCLEVBQWMsQ0FBTyxNQUM3RCw4QkFDQSxnREFDRCxNQUFNLE1BQU0sSUFBOEIsRUFBYyxDQUFPLE1BQzlELHdCQUNBLDBDQUNELE1BQU0sTUFBTSxJQUF3QixFQUFjLENBQU8sTUFDeEQsa0NBQ0Esb0RBQ0QsTUFBTSxNQUFNLElBQWtDLEVBQWMsQ0FBTyxVQUVuRSxJQUFNLEVBQWEsRUFBYSxLQUNoQyxPQUFPLElBQWtCLENBQ3JCLFNBQ0EsYUFDQSxXQUNKLENBQUMsSUFHUCxJQUF3QixHQUFnQixrQkFBbUIsSUFBMEIsdUJBQXVCLEVBQzVHLElBQThCLE1BQU8sRUFBYyxJQUFZLENBQ2pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyxzQkFBc0IsQ0FDbkQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQXNDLE1BQU8sRUFBYyxJQUFZLENBQ3pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyw4QkFBOEIsQ0FDM0QsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQThCLE1BQU8sRUFBYyxJQUFZLENBQ2pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyxzQkFBc0IsQ0FDbkQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQWdDLE1BQU8sRUFBYyxJQUFZLENBQ25FLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyx3QkFBd0IsQ0FDckQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQStCLE1BQU8sRUFBYyxJQUFZLENBQ2xFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyx1QkFBdUIsQ0FDcEQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQXVDLE1BQU8sRUFBYyxJQUFZLENBQzFFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVywrQkFBK0IsQ0FDNUQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQThCLE1BQU8sRUFBYyxJQUFZLENBQ2pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyxzQkFBc0IsQ0FDbkQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQWdDLE1BQU8sRUFBYyxJQUFZLENBQ25FLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyx3QkFBd0IsQ0FDckQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQThCLE1BQU8sRUFBYyxJQUFZLENBQ2pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyxzQkFBc0IsQ0FDbkQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQTBCLE1BQU8sRUFBYyxJQUFZLENBQzdELElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyxrQkFBa0IsQ0FDL0MsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQW9DLE1BQU8sRUFBYyxJQUFZLENBQ3ZFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyw0QkFBNEIsQ0FDekQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQXNDLE1BQU8sRUFBYyxJQUFZLENBQ3pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsTUFBTyxHQUFnQixhQUN2QixrQkFBbUIsR0FBZ0IsWUFDdkMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyw4QkFBOEIsQ0FDM0QsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLEdBQXNCLENBQUMsS0FBWSxDQUNyQyxlQUFnQixFQUFPLFdBQ3ZCLFVBQVcsRUFBTyxRQUFRLHFCQUF1QixFQUFPLFFBQVEsc0JBQXdCLEVBQU8sUUFBUSxvQkFDdkcsa0JBQW1CLEVBQU8sUUFBUSxjQUNsQyxLQUFNLEVBQU8sUUFBUSxjQUN6QixHQUNNLElBQWMsQ0FBQyxFQUFhLElBQUksV0FBYyxJQUFZLENBQzVELEdBQUksYUFBc0IsV0FDdEIsT0FBTyxRQUFRLFFBQVEsQ0FBVSxFQUVyQyxPQUFPLEVBQVEsZ0JBQWdCLENBQVUsR0FBSyxRQUFRLFFBQVEsSUFBSSxVQUFZLEdBRTVFLElBQW9CLENBQUMsRUFBWSxJQUFZLElBQVksRUFBWSxDQUFPLEVBQUUsS0FBSyxDQUFDLElBQVMsRUFBUSxZQUFZLENBQUksQ0FBQyxFQU10SCxHQUFZLENBQUMsRUFBWSxJQUFZLElBQWtCLEVBQVksQ0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFZLENBQ2hHLEdBQUksRUFBUSxPQUNSLE9BQU8sS0FBSyxNQUFNLENBQU8sRUFFN0IsTUFBTyxDQUFDLEVBQ1gsRUFDSyxJQUFpQixNQUFPLEVBQVcsSUFBWSxDQUNqRCxJQUFNLEVBQVEsTUFBTSxHQUFVLEVBQVcsQ0FBTyxFQUVoRCxPQURBLEVBQU0sUUFBVSxFQUFNLFNBQVcsRUFBTSxRQUNoQyxHQUVMLElBQXdCLENBQUMsRUFBUSxJQUFTLENBQzVDLElBQU0sRUFBVSxDQUFDLEVBQVEsSUFBUSxPQUFPLEtBQUssQ0FBTSxFQUFFLEtBQUssQ0FBQyxJQUFNLEVBQUUsWUFBWSxJQUFNLEVBQUksWUFBWSxDQUFDLEVBQ2hHLEVBQW9CLENBQUMsSUFBYSxDQUNwQyxJQUFJLEVBQWEsRUFDakIsR0FBSSxPQUFPLElBQWUsU0FDdEIsRUFBYSxFQUFXLFNBQVMsRUFFckMsR0FBSSxFQUFXLFFBQVEsR0FBRyxHQUFLLEVBQzNCLEVBQWEsRUFBVyxNQUFNLEdBQUcsRUFBRSxHQUV2QyxHQUFJLEVBQVcsUUFBUSxHQUFHLEdBQUssRUFDM0IsRUFBYSxFQUFXLE1BQU0sR0FBRyxFQUFFLEdBRXZDLEdBQUksRUFBVyxRQUFRLEdBQUcsR0FBSyxFQUMzQixFQUFhLEVBQVcsTUFBTSxHQUFHLEVBQUUsR0FFdkMsT0FBTyxHQUVMLEVBQVksRUFBUSxFQUFPLFFBQVMsa0JBQWtCLEVBQzVELEdBQUksSUFBYyxPQUNkLE9BQU8sRUFBa0IsRUFBTyxRQUFRLEVBQVUsRUFFdEQsR0FBSSxFQUFLLE9BQVMsT0FDZCxPQUFPLEVBQWtCLEVBQUssSUFBSSxFQUV0QyxHQUFJLEVBQUssU0FBYyxPQUNuQixPQUFPLEVBQWtCLEVBQUssTUFBUyx1QkN2ZC9DLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCx1QkFBNkIsYUFBZ0IsT0FDckQsSUFBTSxTQUNBLFNBQ0EsU0FDTixPQUFPLGVBQWUsSUFBUyxXQUFZLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFnQixRQUFXLENBQUMsRUFDckgsSUFBTSxTQUNOLE1BQU0sWUFBMkIsSUFBZ0IsT0FBUSxPQUM5QyxpQ0FBZ0MsRUFBRyxDQUN0QyxNQUFPLENBQ0gsUUFBUyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0saUJBQWtCLEVBQzFELFNBQVUsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFVBQVcsRUFDcEQsT0FBUSxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sUUFBUyxFQUNoRCxhQUFjLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxzQkFBdUIsQ0FDeEUsRUFFSixXQUFXLENBQUMsRUFBTyxDQUNmLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFFakIsaUJBQWlCLENBQUMsRUFBYSxFQUFlLEVBQVMsQ0FDbkQsS0FBSyxnQkFBZ0IsSUFBUSxJQUFtQixlQUFnQixFQUFlLEtBQUssVUFBVyxLQUFLLFdBQVcsQ0FBQyxFQUNoSCxLQUFLLGdCQUFnQixJQUFRLElBQXNCLGtCQUFtQixFQUFlLElBQW1CLGlDQUFpQyxDQUFDLENBQUMsRUFDM0ksSUFBTSxFQUFRLEVBQVksT0FBTyxLQUFLLGVBQWUsR0FDN0MsVUFBVyxFQUdiLEVBQTBCLENBQzVCLFNBQ0EsV0FKZSxnQkFLZixZQUpnQixxQkFLaEIsd0JBQXlCLENBQUMsSUFBTSxFQUNoQyx5QkFBMEIsQ0FBQyxJQUFNLENBQ3JDLEdBQ1Esa0JBQW1CLEVBQzNCLE9BQU8sRUFBTSxRQUFRLENBQUMsSUFBWSxFQUFlLE9BQU8sRUFBUSxRQUFTLEdBQVcsQ0FBQyxDQUFDLEVBQUcsQ0FBdUIsRUFFcEgsU0FBUyxDQUFDLEVBQU8sRUFBUyxDQUN0QixPQUFXLElBQWdCLHNCQUF1QixFQUFPLENBQU8sRUFFcEUsV0FBVyxDQUFDLEVBQVEsRUFBUyxDQUN6QixPQUFXLElBQWdCLHNCQUF1QixFQUFRLENBQU8sRUFFekUsQ0FDUSx1QkFBcUIsd0JDNUM3QixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsMEJBQWdDLGFBQWdCLE9BQ3hELElBQU0sU0FDQSxTQUNBLFNBQ04sT0FBTyxlQUFlLElBQVMsV0FBWSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZ0IsUUFBVyxDQUFDLEVBQ3JILElBQU0sU0FDTixNQUFNLFlBQThCLElBQWdCLE9BQVEsT0FDakQsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUFzQixpQ0FBaUMsQ0FBQyxDQUFDLEVBQzlJLElBQU0sRUFBUSxFQUFZLE9BQU8sS0FBSyxlQUFlLEdBQzdDLFVBQVcsRUFHYixFQUEwQixDQUM1QixTQUNBLFdBSmUsZ0JBS2YsWUFKZ0Isd0JBS2hCLHdCQUF5QixDQUFDLElBQU0sRUFDaEMseUJBQTBCLENBQUMsSUFBTSxDQUNyQyxHQUNRLGtCQUFtQixFQUMzQixPQUFPLEVBQU0sUUFBUSxDQUFDLElBQVksRUFBZSxPQUFPLEVBQVEsUUFBUyxHQUFXLENBQUMsQ0FBQyxFQUFHLENBQXVCLEVBRXBILFNBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FDdEIsT0FBVyxJQUFnQix5QkFBMEIsRUFBTyxDQUFPLEVBRXZFLFdBQVcsQ0FBQyxFQUFRLEVBQVMsQ0FDekIsT0FBVyxJQUFnQix5QkFBMEIsRUFBUSxDQUFPLEVBRTVFLENBQ1EsMEJBQXdCLHdCQzVDaEMsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELG9DQUEwQyxhQUFnQixPQUNsRSxJQUFNLFNBQ0EsU0FDQSxTQUNOLE9BQU8sZUFBZSxJQUFTLFdBQVksQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLFFBQVcsQ0FBQyxFQUNySCxJQUFNLFNBQ04sTUFBTSxZQUF3QyxJQUFnQixPQUFRLE9BQzNELGlDQUFnQyxFQUFHLENBQ3RDLE1BQU8sQ0FDSCxRQUFTLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxpQkFBa0IsRUFDMUQsU0FBVSxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sVUFBVyxFQUNwRCxPQUFRLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxRQUFTLEVBQ2hELGFBQWMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLHNCQUF1QixDQUN4RSxFQUVKLFdBQVcsQ0FBQyxFQUFPLENBQ2YsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUVqQixpQkFBaUIsQ0FBQyxFQUFhLEVBQWUsRUFBUyxDQUNuRCxLQUFLLGdCQUFnQixJQUFRLElBQW1CLGVBQWdCLEVBQWUsS0FBSyxVQUFXLEtBQUssV0FBVyxDQUFDLEVBQ2hILEtBQUssZ0JBQWdCLElBQVEsSUFBc0Isa0JBQW1CLEVBQWUsSUFBZ0MsaUNBQWlDLENBQUMsQ0FBQyxFQUN4SixJQUFNLEVBQVEsRUFBWSxPQUFPLEtBQUssZUFBZSxHQUM3QyxVQUFXLEVBR2IsRUFBMEIsQ0FDNUIsU0FDQSxXQUplLGdCQUtmLFlBSmdCLGtDQUtoQix3QkFBeUIsQ0FBQyxJQUFNLEVBQ2hDLHlCQUEwQixDQUFDLElBQU0sQ0FDckMsR0FDUSxrQkFBbUIsRUFDM0IsT0FBTyxFQUFNLFFBQVEsQ0FBQyxJQUFZLEVBQWUsT0FBTyxFQUFRLFFBQVMsR0FBVyxDQUFDLENBQUMsRUFBRyxDQUF1QixFQUVwSCxTQUFTLENBQUMsRUFBTyxFQUFTLENBQ3RCLE9BQVcsSUFBZ0IsbUNBQW9DLEVBQU8sQ0FBTyxFQUVqRixXQUFXLENBQUMsRUFBUSxFQUFTLENBQ3pCLE9BQVcsSUFBZ0IsbUNBQW9DLEVBQVEsQ0FBTyxFQUV0RixDQUNRLG9DQUFrQyx3QkM1QzFDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxZQUFlLE9BQ3ZCLElBQU0sU0FDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLElBQVcsQ0FDYixtQkFBb0IsSUFBcUIsbUJBQ3pDLHNCQUF1QixJQUF3QixzQkFDL0MsZ0NBQWlDLElBQWtDLCtCQUN2RSxFQUNBLE1BQU0sWUFBZ0IsSUFBZ0IsYUFBYyxDQUNwRCxDQUNRLFlBQVUsSUFDZCxJQUFnQix1QkFBd0IsSUFBVSxHQUFPLHFCQ2Y3RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxTQUNOLElBQVEsbUJBQThDLEVBQU8sRUFDN0QsSUFBUSxtQkFBaUQsRUFBTyxFQUNoRSxJQUFRLG1CQUEyRCxFQUFPLHNCQ0oxRSxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxTQUNOLElBQVEsbUJBQW9DLEdBQU8sb0JDRm5ELE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCwyQkFBK0IsT0FDdkMsSUFBTSxRQUNOLEdBQVEsbUJBQXlDLEVBQU8sRUFDeEQsR0FBUSxtQkFBbUMsRUFBTyxFQUNsRCxHQUFRLG1CQUFvQyxFQUFPLEVBQ25ELEdBQVEsbUJBQWtDLEVBQU8sRUFDakQsSUFBSSxTQUNKLE9BQU8sZUFBZSxHQUFTLDBCQUEyQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBMEIsd0JBQTJCLENBQUMsc0JDUjlKLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxxQkFBd0IsT0FDaEMsSUFBTSxTQUNBLElBQXFCLENBQUMsRUFDdEIsSUFBbUIsQ0FBQyxJQUFjLENBQ3BDLEdBQUksSUFBbUIsR0FDbkIsT0FBTyxJQUFtQixHQUU5QixJQUFNLEVBQWdCLElBQUksSUFBa0IsY0FBYyxDQUFFLE9BQVEsQ0FBVSxDQUFDLEVBRS9FLE9BREEsSUFBbUIsR0FBYSxFQUN6QixHQUVILHFCQUFtQix3QkNaM0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHVCQUEwQixPQUNsQyxJQUFNLFNBQ0EsVUFDQSxJQUFxQixDQUFDLEVBQVUsSUFBYyxDQUVoRCxPQUQwQixJQUFtQixpQkFBa0IsQ0FBUyxFQUNuRCxLQUFLLElBQUksSUFBa0IsbUJBQW1CLENBQy9ELFNBQVUsRUFBUyxTQUNuQixhQUFjLEVBQVMsYUFDdkIsYUFBYyxFQUFTLGFBQ3ZCLFVBQVcsZUFDZixDQUFDLENBQUMsR0FFRSx1QkFBcUIsd0JDYjdCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCx3QkFBMkIsT0FDbkMsSUFBTSxTQUNBLFNBQ0EsSUFBc0IsQ0FBQyxJQUFVLENBQ25DLEdBQUksRUFBTSxZQUFjLEVBQU0sV0FBVyxRQUFRLEVBQUksS0FBSyxJQUFJLEVBQzFELE1BQU0sSUFBSSxJQUFvQixtQkFBbUIscUJBQXFCLElBQVksa0JBQW1CLEVBQUssR0FHMUcsd0JBQXNCLHdCQ1Q5QixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQscUJBQXdCLE9BQ2hDLElBQU0sU0FDQSxTQUNBLElBQW1CLENBQUMsRUFBSyxFQUFPLEVBQWEsS0FBVSxDQUN6RCxHQUFJLE9BQU8sSUFBVSxZQUNqQixNQUFNLElBQUksSUFBb0IsbUJBQW1CLDBCQUEwQixrQkFBb0IsRUFBYSxtQkFBcUIsT0FBTyxJQUFZLGtCQUFtQixFQUFLLEdBRzVLLHFCQUFtQix3QkNUM0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHdCQUEyQixPQUNuQyxJQUFNLFNBQ0EsY0FDRSxlQUFjLElBQUssU0FDckIsSUFBc0IsQ0FBQyxFQUFJLElBQWEsQ0FDMUMsSUFBTSxFQUFvQixJQUF5QixvQkFBcUIsQ0FBRSxFQUNwRSxFQUFjLEtBQUssVUFBVSxFQUFVLEtBQU0sQ0FBQyxFQUNwRCxPQUFPLElBQVUsRUFBZSxDQUFXLEdBRXZDLHdCQUFzQix3QkNWOUIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFlBQWUsT0FDdkIsSUFBTSxRQUNBLFFBQ0EsU0FDQSxVQUNBLFVBQ0EsU0FDQSxVQUNBLElBQXlCLElBQUksS0FBSyxDQUFDLEVBQ25DLElBQVUsQ0FBQyxFQUFPLENBQUMsSUFBTSxTQUFZLENBQ3ZDLElBQU0sRUFBVyxNQUFVLEdBQXlCLGdCQUFpQixDQUFJLEVBQ25FLEVBQWtCLEdBQXlCLGVBQWdCLENBQUksRUFDL0QsRUFBVSxFQUFTLEdBQ3pCLElBQUssRUFDRCxNQUFNLElBQUksR0FBb0IsbUJBQW1CLFlBQVksb0RBQStELEVBQUssRUFFaEksU0FBSyxFQUFRLFlBQ2QsTUFBTSxJQUFJLEdBQW9CLG1CQUFtQixZQUFZLGdEQUEwRCxFQUUzSCxJQUFNLEVBQWlCLEVBQVEsWUFFekIsR0FEYyxNQUFVLEdBQXlCLG1CQUFvQixDQUFJLEdBQ2hELEdBQy9CLElBQUssRUFDRCxNQUFNLElBQUksR0FBb0IsbUJBQW1CLGdCQUFnQixvREFBa0UsRUFBSyxFQUU1SSxRQUFXLElBQXlCLENBQUMsZ0JBQWlCLFlBQVksRUFDOUQsSUFBSyxFQUFXLEdBQ1osTUFBTSxJQUFJLEdBQW9CLG1CQUFtQixnQkFBZ0Isb0NBQWlELE1BQTJCLEVBQUssRUFHMUosSUFBK0IsY0FBekIsRUFDdUIsV0FBdkIsR0FBWSxFQUNkLEVBQ0osR0FBSSxDQUNBLEVBQVcsTUFBVSxHQUF5QixvQkFBcUIsQ0FBYyxFQUVyRixNQUFPLEVBQUcsQ0FDTixNQUFNLElBQUksR0FBb0IsbUJBQW1CLGlEQUFpRCxrQ0FBNEMsSUFBWSxrQkFBbUIsRUFBSyxFQUVsTCxHQUFtQixpQkFBa0IsY0FBZSxFQUFTLFdBQVcsRUFDeEUsR0FBbUIsaUJBQWtCLFlBQWEsRUFBUyxTQUFTLEVBQ3hFLElBQVEsY0FBYSxhQUFjLEVBQzdCLEVBQWdCLENBQUUsTUFBTyxFQUFhLFdBQVksSUFBSSxLQUFLLENBQVMsQ0FBRSxFQUM1RSxHQUFJLEVBQWMsV0FBVyxRQUFRLEVBQUksS0FBSyxJQUFJLEVBQUksSUFBWSxpQkFDOUQsT0FBTyxFQUVYLEdBQUksS0FBSyxJQUFJLEVBQUksSUFBdUIsUUFBUSxFQUFJLE1BRWhELE9BREksSUFBc0Isb0JBQXFCLENBQWEsRUFDckQsRUFFUCxHQUFtQixpQkFBa0IsV0FBWSxFQUFTLFNBQVUsRUFBSSxFQUN4RSxHQUFtQixpQkFBa0IsZUFBZ0IsRUFBUyxhQUFjLEVBQUksRUFDaEYsR0FBbUIsaUJBQWtCLGVBQWdCLEVBQVMsYUFBYyxFQUFJLEVBQ3BGLEdBQUksQ0FDQSxJQUF1QixRQUFRLEtBQUssSUFBSSxDQUFDLEVBQ3pDLElBQU0sRUFBa0IsTUFBVSxJQUFxQixtQkFBb0IsRUFBVSxDQUFTLEVBQzFGLEdBQW1CLGlCQUFrQixjQUFlLEVBQWdCLFdBQVcsRUFDL0UsR0FBbUIsaUJBQWtCLFlBQWEsRUFBZ0IsU0FBUyxFQUMvRSxJQUFNLEVBQXFCLElBQUksS0FBSyxLQUFLLElBQUksRUFBSSxFQUFnQixVQUFZLElBQUksRUFDakYsR0FBSSxDQUNBLE1BQVUsSUFBc0Isb0JBQXFCLEVBQWdCLElBQzlELEVBQ0gsWUFBYSxFQUFnQixZQUM3QixVQUFXLEVBQW1CLFlBQVksRUFDMUMsYUFBYyxFQUFnQixZQUNsQyxDQUFDLEVBRUwsTUFBTyxFQUFPLEVBRWQsTUFBTyxDQUNILE1BQU8sRUFBZ0IsWUFDdkIsV0FBWSxDQUNoQixFQUVKLE1BQU8sRUFBTyxDQUVWLE9BREksSUFBc0Isb0JBQXFCLENBQWEsRUFDckQsSUFHUCxZQUFVLHdCQ2hGbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGVBQWtCLE9BQzFCLElBQU0sU0FDQSxJQUFhLEVBQUcsV0FBWSxTQUFZLENBQzFDLElBQUssSUFBVSxFQUFNLE1BQ2pCLE1BQU0sSUFBSSxJQUFvQixtQkFBbUIsMENBQTJDLEVBQUssRUFFckcsT0FBTyxHQUVILGVBQWEsd0JDVHJCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxpQkFBb0IsT0FDNUIsSUFBTSxTQUNBLFVBQ0EsSUFBZSxDQUFDLEVBQU8sQ0FBQyxJQUFVLElBQW9CLFFBQWEsSUFBb0IsTUFBVyxJQUFVLFFBQVMsQ0FBSSxFQUFHLFNBQVksQ0FDMUksTUFBTSxJQUFJLElBQW9CLG1CQUFtQiwwQ0FBMkMsRUFBSyxFQUNwRyxFQUFHLENBQUMsSUFBVSxFQUFNLGFBQWUsUUFBYSxFQUFNLFdBQVcsUUFBUSxFQUFJLEtBQUssSUFBSSxFQUFJLE9BQVEsQ0FBQyxJQUFVLEVBQU0sYUFBZSxNQUFTLEVBQ3BJLGlCQUFlLHVCQ1B2QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxTQUNOLElBQVEsbUJBQW1DLEVBQU8sRUFDbEQsSUFBUSxtQkFBc0MsRUFBTyxFQUNyRCxJQUFRLG1CQUF3QyxFQUFPLHNCQ0p2RCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsMEJBQTZCLE9BQ3JDLElBQU0sVUFDQSxRQUNBLFNBQ0EsVUFDQSxJQUFtQixPQUNuQixHQUErQixHQUMvQixJQUF3QixPQUFTLGNBQWEsYUFBWSxlQUFjLFlBQVcsY0FBYSxZQUFXLGFBQWUsQ0FDNUgsSUFBSSxFQUNFLEVBQWlCLGdGQUN2QixHQUFJLEVBQ0EsR0FBSSxDQUNBLElBQU0sRUFBUyxNQUFVLElBQWtCLFFBQVMsQ0FBRSxTQUFRLENBQUMsRUFBRSxFQUNqRSxFQUFRLENBQ0osWUFBYSxFQUFPLE1BQ3BCLFVBQVcsSUFBSSxLQUFLLEVBQU8sVUFBVSxFQUFFLFlBQVksQ0FDdkQsRUFFSixNQUFPLEVBQUcsQ0FDTixNQUFNLElBQUksR0FBb0IseUJBQXlCLEVBQUUsUUFBUyxFQUE0QixFQUlsRyxRQUFJLENBQ0EsRUFBUSxNQUFVLElBQXlCLG9CQUFxQixDQUFXLEVBRS9FLE1BQU8sRUFBRyxDQUNOLE1BQU0sSUFBSSxHQUFvQix5QkFBeUIseUlBQThFLEVBQTRCLEVBR3pLLEdBQUksSUFBSSxLQUFLLEVBQU0sU0FBUyxFQUFFLFFBQVEsRUFBSSxLQUFLLElBQUksR0FBSyxJQUNwRCxNQUFNLElBQUksR0FBb0IseUJBQXlCLDBJQUErRSxFQUE0QixFQUV0SyxJQUFRLGVBQWdCLEVBQ2xCLEVBQU0sR0FBYSxJQUFJLElBQWEsVUFBVSxDQUFFLE9BQVEsQ0FBVSxDQUFDLEVBQ3JFLEVBQ0osR0FBSSxDQUNBLEVBQVUsTUFBTSxFQUFJLEtBQUssSUFBSSxJQUFhLDBCQUEwQixDQUNoRSxVQUFXLEVBQ1gsU0FBVSxFQUNWLGFBQ0osQ0FBQyxDQUFDLEVBRU4sTUFBTyxFQUFHLENBQ04sTUFBTSxHQUFvQix5QkFBeUIsS0FBSyxFQUFHLEVBQTRCLEVBRTNGLElBQVEsaUJBQW1CLGNBQWEsa0JBQWlCLGVBQWMsY0FBZSxDQUFDLEdBQU0sRUFDN0YsSUFBSyxJQUFnQixJQUFvQixJQUFpQixFQUN0RCxNQUFNLElBQUksR0FBb0IseUJBQXlCLCtDQUFnRCxFQUE0QixFQUV2SSxNQUFPLENBQUUsY0FBYSxrQkFBaUIsZUFBYyxXQUFZLElBQUksS0FBSyxDQUFVLENBQUUsR0FFbEYsMEJBQXdCLHdCQ3JEaEMsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHVCQUEwQixPQUNsQyxJQUFNLFNBQ0EsSUFBcUIsQ0FBQyxJQUFZLENBQ3BDLElBQVEsZ0JBQWUsaUJBQWdCLGFBQVksaUJBQWtCLEVBQ3JFLElBQUssSUFBa0IsSUFBbUIsSUFBZSxFQUNyRCxNQUFNLElBQUksSUFBb0IseUJBQXlCLGlKQUNJLE9BQU8sS0FBSyxDQUFPLEVBQUUsS0FBSyxJQUFJO0FBQUEsb0ZBQXlGLEVBQUssRUFFM0wsT0FBTyxHQUVILHVCQUFxQix3QkNYN0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFlBQWUsT0FDdkIsSUFBTSxRQUNBLFNBQ0EsVUFDQSxVQUNBLFVBQ0EsSUFBVSxDQUFDLEVBQU8sQ0FBQyxJQUFNLFNBQVksQ0FDdkMsSUFBUSxjQUFhLGVBQWMsWUFBVyxjQUFhLFlBQVcsY0FBZSxFQUMvRSxFQUFrQixJQUF5QixlQUFnQixDQUFJLEVBQ3JFLElBQUssSUFBZ0IsSUFBaUIsSUFBYyxJQUFnQixFQUFZLENBRTVFLElBQU0sR0FEVyxNQUFVLElBQXlCLGdCQUFpQixDQUFJLEdBQ2hELEdBQ3pCLElBQUssRUFDRCxNQUFNLElBQUksR0FBb0IseUJBQXlCLFdBQVcsa0JBQTRCLEVBRWxHLElBQVMsSUFBZSxhQUFjLENBQU8sRUFDekMsTUFBTSxJQUFJLEdBQW9CLHlCQUF5QixXQUFXLDJDQUFxRCxFQUUzSCxHQUFJLElBQVksTUFBUSxJQUFpQixPQUFTLE9BQUksRUFBUSxZQUFhLENBRXZFLElBQU0sR0FEYyxNQUFVLElBQXlCLG1CQUFvQixDQUFJLEdBQ25ELEVBQVEsYUFDOUIsRUFBYyw4QkFBOEIscUJBQStCLEVBQVEsY0FDekYsR0FBSSxHQUFhLElBQWMsRUFBUSxXQUNuQyxNQUFNLElBQUksR0FBb0IseUJBQXlCLHlCQUEyQixFQUFhLEVBQUssRUFFeEcsR0FBSSxHQUFlLElBQWdCLEVBQVEsY0FDdkMsTUFBTSxJQUFJLEdBQW9CLHlCQUF5Qiw0QkFBOEIsRUFBYSxFQUFLLEVBRTNHLEVBQVEsV0FBYSxFQUFRLFdBQzdCLEVBQVEsY0FBZ0IsRUFBUSxjQUVwQyxJQUFRLGdCQUFlLGlCQUFnQixhQUFZLGdCQUFlLGVBQW9CLElBQXFCLG1CQUFvQixDQUFPLEVBQ3RJLE9BQVcsSUFBd0Isc0JBQXVCLENBQ3RELFlBQWEsRUFDYixXQUFZLEVBQ1osYUFBYyxFQUNkLFVBQVcsRUFDWCxZQUFhLEVBQ2IsVUFBVyxFQUNYLFFBQVMsQ0FDYixDQUFDLEVBRUEsU0FBSyxJQUFnQixJQUFpQixJQUFjLEVBQ3JELE1BQU0sSUFBSSxHQUFvQix5QkFBeUIsOEhBQ1EsRUFHL0QsWUFBVyxJQUF3QixzQkFBdUIsQ0FDdEQsY0FDQSxhQUNBLGVBQ0EsWUFDQSxjQUNBLFlBQ0EsUUFBUyxDQUNiLENBQUMsR0FHRCxZQUFVLHdCQzNEbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLG9CQ0E1RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQVEsbUJBQW1DLEVBQU8sRUFDbEQsR0FBUSxtQkFBd0MsRUFBTyxFQUN2RCxHQUFRLG1CQUFpQyxFQUFPLEVBQ2hELEdBQVEsbUJBQThDLEVBQU8sc0JDTDdELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCwwQkFBZ0MsaUJBQW9CLE9BQzVELElBQU0sU0FDRixTQUNKLE9BQU8sZUFBZSxJQUFTLGVBQWdCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUEwQixhQUFnQixDQUFDLEVBQ3hJLElBQU0sSUFBd0IsQ0FBQyxJQUFTLENBQ3BDLElBQVEsZ0JBQWUsaUJBQWdCLGNBQWEsYUFBWSxpQkFBc0IsSUFBMEIsbUJBQW9CLENBQUksRUFDeEksT0FBVyxJQUEwQixRQUFTLENBQzFDLFlBQWEsRUFDYixhQUFjLEVBQ2QsV0FBWSxFQUNaLFVBQVcsRUFDWCxZQUFhLENBQ2pCLENBQUMsRUFBRSxHQUVDLDBCQUF3Qix3QkNmaEMsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELDZCQUFtQyx5QkFBNEIsT0FDdkUsSUFBTSxJQUF1QixDQUFDLElBQVEsUUFBUSxDQUFHLEdBQzdDLE9BQU8sSUFBUSxVQUNmLE9BQU8sRUFBSSxvQkFBc0IsVUFDakMsT0FBTyxFQUFJLHdCQUEwQixVQUNyQyxDQUFDLFlBQWEsUUFBUSxFQUFFLFFBQVEsT0FBTyxFQUFJLGlCQUFpQixFQUFJLEdBQzVELHlCQUF1QixJQUMvQixJQUFNLElBQTJCLENBQUMsSUFBWSxRQUFRLFFBQVEsQ0FDMUQsWUFBYSxFQUFRLGtCQUNyQixnQkFBaUIsRUFBUSxzQkFDekIsYUFBYyxFQUFRLGlCQUMxQixDQUFDLEVBQ08sNkJBQTJCLHdCQ2JuQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsaUJBQW9CLE9BQzVCLElBQU0sU0FDQSxJQUFlLENBQUMsSUFBUyxJQUFNLENBQ2pDLElBQVEsVUFBUyxrQkFBaUIsbUJBQWtCLGFBQVksYUFBWSxTQUFRLGtCQUFpQiw4QkFBZ0MsRUFDckksSUFBSyxFQUNELE1BQU0sSUFBSSxJQUFvQix5QkFBeUIsYUFBYSwwRkFDZCxFQUFLLEVBRS9ELE9BQU8sRUFBMkIsQ0FDOUIsUUFBUyxFQUNULGdCQUFpQixJQUFvQixNQUFRLElBQXlCLE9BQUksRUFBa0Isc0JBQXNCLEtBQUssSUFBSSxJQUMzSCxpQkFBa0IsRUFDbEIsV0FBWSxFQUNaLFdBQVksRUFDWixPQUFRLEVBQ1IsZ0JBQWlCLENBQ3JCLENBQUMsR0FFRyxpQkFBZSx3QkNuQnZCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBcUIsT0FDN0IsSUFBTSxTQUNBLGFBQ0EsVUFDQSxJQUFpQiw4QkFDakIsSUFBZSxlQUNmLElBQXdCLHdCQUN4QixJQUFnQixDQUFDLEVBQU8sQ0FBQyxJQUFNLFNBQVksQ0FDN0MsT0FBTyxJQUFpQixDQUFJLEdBRXhCLGtCQUFnQixJQUN4QixJQUFNLElBQW1CLENBQUMsSUFBUyxDQUMvQixJQUFJLEVBQUksRUFBSSxFQUNaLElBQU0sR0FBd0IsRUFBSyxJQUFTLE1BQVEsSUFBYyxPQUFTLE9BQUksRUFBSyx3QkFBMEIsTUFBUSxJQUFZLE9BQUksRUFBSyxRQUFRLElBQUksS0FDakosR0FBVyxFQUFLLElBQVMsTUFBUSxJQUFjLE9BQVMsT0FBSSxFQUFLLFdBQWEsTUFBUSxJQUFZLE9BQUksRUFBSyxRQUFRLElBQUksS0FDdkgsR0FBbUIsRUFBSyxJQUFTLE1BQVEsSUFBYyxPQUFTLE9BQUksRUFBSyxtQkFBcUIsTUFBUSxJQUFZLE9BQUksRUFBSyxRQUFRLElBQUksS0FDN0ksSUFBSyxJQUF5QixFQUMxQixNQUFNLElBQUksSUFBb0IseUJBQXlCLDBDQUEwQyxFQUVyRyxPQUFXLElBQWUsYUFBYyxJQUNqQyxFQUNILGlCQUFzQixJQUFLLGFBQWMsRUFBc0IsQ0FBRSxTQUFVLE9BQVEsQ0FBQyxFQUNwRixVQUNBLGlCQUNKLENBQUMsRUFBRSxzQkN6QlAsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sU0FDTixJQUFRLG1CQUF5QyxFQUFPLEVBQ3hELElBQVEsbUJBQXdDLEVBQU8sc0JDSHZELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQ0FBd0MseUJBQTRCLE9BQzVFLElBQU0sVUFDQSxJQUF1QixDQUFDLElBQVEsUUFBUSxDQUFHLEdBQzdDLE9BQU8sSUFBUSxVQUNmLE9BQU8sRUFBSSwwQkFBNEIsVUFDdkMsT0FBTyxFQUFJLFdBQWEsVUFDeEIsQ0FBQyxZQUFhLFFBQVEsRUFBRSxRQUFRLE9BQU8sRUFBSSxpQkFBaUIsRUFBSSxHQUM1RCx5QkFBdUIsSUFDL0IsSUFBTSxJQUFnQyxNQUFPLEVBQVMsSUFBZ0IsSUFBbUMsY0FBZSxDQUNwSCxxQkFBc0IsRUFBUSx3QkFDOUIsUUFBUyxFQUFRLFNBQ2pCLGdCQUFpQixFQUFRLGtCQUN6QiwyQkFBNEIsRUFBUSwwQkFDeEMsQ0FBQyxFQUFFLEVBQ0ssa0NBQWdDLHdCQ2Z4QyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsdUJBQTBCLE9BQ2xDLElBQU0sU0FDQSxVQUNBLFVBQ0EsVUFDQSxTQUNBLFVBQ0EsSUFBcUIsTUFBTyxFQUFhLEVBQVUsRUFBUyxFQUFrQixDQUFDLElBQU0sQ0FDdkYsSUFBTSxFQUFPLEVBQVMsR0FDdEIsR0FBSSxPQUFPLEtBQUssQ0FBZSxFQUFFLE9BQVMsR0FBUyxHQUEyQixxQkFBc0IsQ0FBSSxFQUNwRyxPQUFXLEdBQTJCLHlCQUEwQixDQUFJLEVBRXhFLEdBQVEsSUFBK0Isb0JBQXFCLENBQUksRUFDNUQsT0FBVyxJQUErQiw2QkFBOEIsRUFBYSxFQUFVLEVBQVMsQ0FBZSxFQUUzSCxHQUFRLEdBQTJCLHFCQUFzQixDQUFJLEVBQ3pELE9BQVcsR0FBMkIseUJBQTBCLENBQUksRUFFeEUsR0FBUSxJQUFnQyxxQkFBc0IsQ0FBSSxFQUM5RCxPQUFXLElBQWdDLDhCQUErQixFQUFNLENBQU8sRUFFM0YsR0FBUSxJQUE0QixpQkFBa0IsQ0FBSSxFQUN0RCxPQUFXLElBQTRCLDBCQUEyQixFQUFTLENBQVcsRUFFMUYsR0FBUSxJQUF3QixhQUFjLENBQUksRUFDOUMsT0FBVyxJQUF3QixzQkFBdUIsQ0FBSSxFQUVsRSxNQUFNLElBQUksSUFBb0IseUJBQXlCLFdBQVcsNERBQXNFLEdBRXBJLHVCQUFxQix3QkM5QjdCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxZQUFlLE9BQ3ZCLElBQU0sU0FDQSxVQUNBLElBQVUsQ0FBQyxFQUFPLENBQUMsSUFBTSxTQUFZLENBQ3ZDLElBQU0sRUFBVyxNQUFVLElBQXlCLGdCQUFpQixDQUFJLEVBQ3pFLE9BQVcsSUFBcUIsbUJBQXdCLElBQXlCLGVBQWdCLENBQUksRUFBRyxFQUFVLENBQUksR0FFbEgsWUFBVSx3QkNSbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sU0FDTixJQUFRLG1CQUFtQyxHQUFPLHNCQ0ZsRCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsbUJBQXlCLHNCQUF5QixPQUMxRCxJQUFNLFFBQ0EsU0FDRSxzQkFBb0IsNEJBQzVCLElBQU0sSUFBaUIsQ0FBQyxJQUFTLENBQzdCLEdBQUksUUFBUSxJQUFJLEdBQTJCLHdCQUEwQixRQUFRLElBQUksR0FBMkIsbUJBQ3hHLE9BQVcsR0FBMkIsc0JBQXVCLENBQUksRUFFckUsR0FBSSxRQUFRLElBQVksdUJBQ3BCLE1BQU8sVUFBWSxDQUNmLE1BQU0sSUFBSSxJQUFvQix5QkFBeUIsK0NBQStDLEdBRzlHLE9BQVcsR0FBMkIscUJBQXNCLENBQUksR0FFNUQsbUJBQWlCLHdCQ2hCekIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELG9CQUF1QixPQUMvQixJQUFNLFVBQ0EsVUFDQSxVQUNBLFNBQ0EsVUFDQSxTQUNBLFNBQ0EsVUFDQSxJQUFrQixDQUFDLEVBQU8sQ0FBQyxJQUFVLElBQW9CLFFBQWEsSUFBb0IsTUFBTyxHQUFJLEVBQUssU0FBVyxRQUFRLElBQUksSUFBeUIsYUFBZSxDQUFDLEVBQUksQ0FBSyxJQUEwQixRQUFTLENBQUMsRUFBUSxJQUEwQixRQUFTLENBQUksRUFBTyxJQUEwQixRQUFTLENBQUksRUFBTyxJQUE4QixZQUFhLENBQUksRUFBTyxJQUFtQyxjQUFlLENBQUksRUFBTyxJQUFpQixlQUFnQixDQUFJLEVBQUcsU0FBWSxDQUNwZSxNQUFNLElBQUksSUFBb0IseUJBQXlCLGdEQUFpRCxFQUFLLEVBQ2hILEVBQUcsQ0FBQyxJQUFnQixFQUFZLGFBQWUsUUFBYSxFQUFZLFdBQVcsUUFBUSxFQUFJLEtBQUssSUFBSSxFQUFJLE9BQVEsQ0FBQyxJQUFnQixFQUFZLGFBQWUsTUFBUyxFQUNsSyxvQkFBa0Isd0JDYjFCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFNBQ04sSUFBUSxtQkFBMkMsR0FBTyxzQkNGMUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFlBQWUsT0FDdkIsSUFBTSxJQUFJLFdBQVksR0FBSSxPQUFRLEdBQUksS0FBTSxHQUFJLE9BQVEsR0FBSSxNQUN0RCxJQUFJLEdBQU8sSUFBSSxHQUFNLEdBQUksZ0JBQWlCLEdBQUksT0FBUSxHQUFJLGVBQWdCLElBQUksUUFBUyxJQUFJLE1BQU8sSUFBSSxZQUFhLEdBQUksV0FBWSxJQUFJLG1EQUFvRCxHQUFJLFFBQVMsSUFBSSxVQUFXLElBQUksRUFBRyxLQUFJLElBQVEsSUFBSSxRQUFTLEVBQUcsSUFBSSxFQUFHLEtBQUksR0FBTSxRQUFXLElBQVEsSUFBSSxTQUFVLEVBQUcsSUFBSSxFQUFHLElBQUksVUFBVyxFQUFHLElBQUksRUFBRyxJQUFJLFNBQVUsSUFBSSxDQUFDLEVBQUcsSUFBSSxRQUFTLENBQUMsQ0FBRSxFQUFHLEdBQUksRUFBRyxJQUFJLFFBQVMsRUFBRyxJQUFJLEVBQUcsSUFBSSxpQkFBa0IsSUFBSSxDQUFDLEVBQUMsRUFBRyxPQUFVLGlCQUFrQixFQUFHLElBQUksRUFBRyxJQUFJLFNBQVUsRUFBRyxJQUFJLEVBQUcsSUFBSSxjQUFlLEVBQUcsR0FBSSxDQUFFLElBQU8sNEJBQTZCLFdBQWMsQ0FBRSxZQUFlLENBQUMsQ0FBRSxLQUFRLElBQUcsWUFBZSxJQUFHLGNBQWlCLEdBQUUsQ0FBQyxDQUFFLEVBQUcsUUFBVyxDQUFDLENBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxJQUFJLENBQUUsV0FBYyxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBRSxDQUFDLEdBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFHLElBQUksRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUcsRUFBSSxDQUFFLEVBQUcsSUFBSSxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBRyxFQUFJLENBQUUsRUFBRyxJQUFJLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFNLEVBQUcsSUFBSSxLQUFJLElBQUksQ0FBQyxFQUFHLElBQUksaUJBQWtCLEVBQUcsY0FBYyxDQUFFLENBQUMsQ0FBRSxFQUFHLElBQUksRUFBRyxJQUFJLGlCQUFrQixFQUFHLElBQUksRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQU0sRUFBRyxJQUFJLEtBQUksSUFBSSxDQUFDLElBQUcsbUJBQW1CLENBQUUsQ0FBQyxDQUFFLEVBQUcsSUFBSSxDQUFDLEVBQUcsSUFBSSxTQUFVLElBQUksQ0FBQyxHQUFDLENBQUUsQ0FBQyxFQUFHLElBQUksQ0FBQyxHQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUMsRUFDcmlDLElBQVEsQ0FBRSxRQUFTLE1BQU8sV0FBWSxDQUFFLE9BQVEsSUFBRyxhQUFjLElBQUcsUUFBUyxJQUFHLFNBQVUsSUFBRyxrQkFBbUIsR0FBRSxFQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRyxJQUFJLG1CQUFvQixFQUFHLEdBQUMsQ0FBRSxFQUFHLEVBQUcsSUFBSSxPQUFRLElBQUksR0FBRSxFQUFHLElBQUcsSUFBRyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBRyxHQUFDLENBQUUsRUFBRyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBRyxHQUFDLENBQUUsQ0FBQyxHQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsSUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFNBQVUsQ0FBRSxJQUFLLElBQUcsV0FBWSxDQUFFLFlBQWEsQ0FBQyxDQUFFLEtBQU0sSUFBRyxZQUFhLElBQUcsY0FBZSxVQUFXLENBQUMsQ0FBRSxFQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLFdBQVksS0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxJQUFHLE1BQU8scUVBQXNFLElBQUksRUFBRSxFQUFHLEVBQUcsSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksSUFBRyxNQUFPLDBFQUEyRSxJQUFJLEVBQUUsRUFBRyxDQUFFLFNBQVUsQ0FBRSxJQUFLLElBQUcsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsRUFBRyxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLElBQUcsR0FBQyxHQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsSUFBRyxHQUFDLEdBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxFQUFHLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyxpRUFBa0UsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLG1GQUFvRixJQUFJLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLEtBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxHQUFDLEdBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxFQUFHLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWMsRUFBRyxJQUFJLEtBQUksSUFBSSxDQUFDLElBQUcsTUFBTSxDQUFFLENBQUMsQ0FBRSxDQUFDLEVBQUcsU0FBVSxDQUFFLElBQUsscUNBQXNDLFdBQVksR0FBRyxRQUFTLEVBQUUsR0FBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFNBQVUsQ0FBRSxJQUFLLHdEQUF5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RSxXQUFZLENBQUMsRUFBRyxJQUFJLFNBQVUsSUFBSSxHQUFFLEVBQUcsRUFBRyxJQUFJLFlBQWEsSUFBSSxJQUFHLE9BQVEsS0FBTSxDQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksSUFBRyxNQUFPLG9FQUFxRSxLQUFNLEVBQUUsRUFBRyxDQUFFLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLElBQUcsTUFBTyx5RUFBMEUsS0FBTSxFQUFFLEVBQUcsQ0FBRSxTQUFVLENBQUUsSUFBSyxJQUFHLFdBQVksR0FBRyxRQUFTLEVBQUUsRUFBRyxLQUFNLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsV0FBWSxDQUFDLElBQUcsR0FBQyxFQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsSUFBRyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFNBQVUsQ0FBRSxJQUFLLDhFQUErRSxXQUFZLEdBQUcsUUFBUyxFQUFFLEVBQUcsS0FBTSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsTUFBTyxrRkFBbUYsS0FBTSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsV0FBWSxJQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsR0FBQyxFQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxLQUFNLEdBQUcsTUFBTyxDQUFDLENBQUUsU0FBVSxDQUFFLElBQUsscUVBQXNFLFdBQVksR0FBRyxRQUFTLEVBQUUsRUFBRyxLQUFNLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsTUFBTywyREFBNEQsS0FBTSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsV0FBWSxJQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsR0FBQyxFQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyx5RUFBMEUsV0FBWSxHQUFHLFFBQVMsRUFBRSxFQUFHLEtBQU0sRUFBRSxDQUFD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RSxXQUFjLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFFLENBQUMsR0FBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUcsSUFBSSxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBRyxFQUFJLENBQUUsRUFBRyxJQUFJLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFHLEVBQUksQ0FBRSxFQUFHLElBQUksRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQU0sRUFBRyxJQUFJLEtBQUksSUFBSSxDQUFDLEVBQUcsSUFBSSxpQkFBa0IsRUFBRyxjQUFjLENBQUUsQ0FBQyxDQUFFLEVBQUcsSUFBSSxFQUFHLElBQUksaUJBQWtCLEVBQUcsSUFBSSxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBTSxFQUFHLElBQUksS0FBSSxJQUFJLENBQUMsSUFBRyxtQkFBbUIsQ0FBRSxDQUFDLENBQUUsRUFBRyxJQUFJLENBQUMsRUFBRyxJQUFJLFNBQVUsSUFBSSxDQUFDLEdBQUMsQ0FBRSxDQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUMsRUFBRyxJQUFJLENBQUMsR0FBQyxFQUNyaUMsSUFBUSxDQUFFLFFBQVMsTUFBTyxXQUFZLENBQUUsT0FBUSxJQUFHLGFBQWMsSUFBRyxRQUFTLElBQUcsU0FBVSxJQUFHLGtCQUFtQixHQUFFLEVBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFHLElBQUksbUJBQW9CLEVBQUcsR0FBQyxDQUFFLEVBQUcsRUFBRyxJQUFJLE9BQVEsSUFBSSxHQUFFLEVBQUcsSUFBRyxJQUFHLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFHLEdBQUMsQ0FBRSxFQUFHLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFHLEdBQUMsQ0FBRSxDQUFDLEdBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxJQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLENBQUUsU0FBVSxDQUFFLElBQUssSUFBRyxXQUFZLENBQUUsWUFBYSxDQUFDLENBQUUsS0FBTSxJQUFHLFlBQWEsSUFBRyxjQUFlLFVBQVcsQ0FBQyxDQUFFLEVBQUcsUUFBUyxFQUFFLEdBQUksSUFBSSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsV0FBWSxLQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLElBQUcsTUFBTyxxRUFBc0UsSUFBSSxFQUFFLEVBQUcsRUFBRyxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxJQUFHLE1BQU8sMEVBQTJFLElBQUksRUFBRSxFQUFHLENBQUUsU0FBVSxDQUFFLElBQUssSUFBRyxXQUFZLEdBQUcsUUFBUyxFQUFFLEdBQUksSUFBSSxFQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRyxFQUFHLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsR0FBQyxHQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsR0FBQyxHQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsSUFBRyxHQUFDLEdBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxJQUFHLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLEVBQUcsSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFNBQVUsQ0FBRSxJQUFLLGlFQUFrRSxXQUFZLEdBQUcsUUFBUyxFQUFFLEdBQUksSUFBSSxFQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRyxDQUFFLE1BQU8sbUZBQW9GLElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLFdBQVksS0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLEVBQUcsSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYyxFQUFHLElBQUksS0FBSSxJQUFJLENBQUMsSUFBRyxNQUFNLENBQUUsQ0FBQyxDQUFFLENBQUMsRUFBRyxTQUFVLENBQUUsSUFBSyxxQ0FBc0MsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxFQUFHLENBQUUsU0FBVSxDQUFFLElBQUssd0RBQXlELFdBQVksR0FBRyxRQUFTLEVBQUUsR0FBSSxJQUFJLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsTUFBTyw0REFBNkQsSUFBSSxFQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsV0FBWSxLQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsR0FBQyxHQUFJLElBQUksR0FBRyxNQUFPLENBQUMsRUFBRyxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsU0FBVSxDQUFFLElBQUssNERBQTZELFdBQVksR0FBRyxRQUFTLEVBQUUsR0FBSSxJQUFJLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsTUFBTyxzRUFBdUUsSUFBSSxFQUFFLENBQUMsQ0FBRSxFQUFHLEVBQUcsSUFBSSxHQUFHLE1BQU8sQ0FBQyxJQUFHLENB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LEVBQUcsS0FBSSxJQUFRLElBQUksUUFBUyxFQUFHLElBQUksRUFBRyxLQUFJLEdBQU0sUUFBVyxJQUFRLElBQUksU0FBVSxFQUFHLElBQUksRUFBRyxJQUFJLFVBQVcsRUFBRyxJQUFJLEVBQUcsSUFBSSxTQUFVLElBQUksQ0FBQyxFQUFHLElBQUksUUFBUyxDQUFDLENBQUUsRUFBRyxHQUFJLEVBQUcsSUFBSSxRQUFTLEVBQUcsSUFBSSxFQUFHLElBQUksaUJBQWtCLElBQUksQ0FBQyxFQUFDLEVBQUcsT0FBVSxpQkFBa0IsRUFBRyxJQUFJLEVBQUcsSUFBSSxTQUFVLEVBQUcsSUFBSSxFQUFHLElBQUksY0FBZSxFQUFHLEdBQUksQ0FBRSxJQUFPLDRCQUE2QixXQUFjLENBQUUsWUFBZSxDQUFDLENBQUUsS0FBUSxJQUFHLFlBQWUsSUFBRyxjQUFpQixHQUFFLENBQUMsQ0FBRSxFQUFHLFFBQVcsQ0FBQyxDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsSUFBSSxDQUFFLFdBQWMsQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUUsQ0FBQyxHQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRyxJQUFJLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFHLEVBQUksQ0FBRSxFQUFHLElBQUksRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUcsRUFBSSxDQUFFLEVBQUcsSUFBSSxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBTSxFQUFHLElBQUksS0FBSSxJQUFJLENBQUMsRUFBRyxJQUFJLGlCQUFrQixFQUFHLGNBQWMsQ0FBRSxDQUFDLENBQUUsRUFBRyxJQUFJLEVBQUcsSUFBSSxpQkFBa0IsRUFBRyxJQUFJLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFNLEVBQUcsSUFBSSxLQUFJLElBQUksQ0FBQyxJQUFHLG1CQUFtQixDQUFFLENBQUMsQ0FBRSxFQUFHLElBQUksQ0FBQyxFQUFHLElBQUksU0FBVSxJQUFJLENBQUMsR0FBQyxDQUFFLENBQUMsRUFBRyxJQUFJLENBQUMsR0FBQyxFQUFHLElBQUksQ0FBQyxHQUFDLEVBQ3JpQyxJQUFRLENBQUUsUUFBUyxNQUFPLFdBQVksQ0FBRSxPQUFRLElBQUcsYUFBYyxJQUFHLFFBQVMsSUFBRyxTQUFVLElBQUcsa0JBQW1CLEdBQUUsRUFBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUcsSUFBSSxtQkFBb0IsRUFBRyxHQUFDLENBQUUsRUFBRyxFQUFHLElBQUksT0FBUSxJQUFJLEdBQUUsRUFBRyxJQUFHLElBQUcsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUcsR0FBQyxDQUFFLEVBQUcsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUcsR0FBQyxDQUFFLENBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUUsQ0FBQyxFQUFHLFNBQVUsSUFBSSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBRSxDQUFDLEVBQUcsU0FBVSxJQUFJLElBQUksRUFBRSxFQUFHLElBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFFLENBQUMsRUFBRyxTQUFVLElBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxTQUFVLENBQUUsSUFBSyxJQUFHLFdBQVksQ0FBRSxZQUFhLENBQUMsQ0FBRSxLQUFNLElBQUcsWUFBYSxJQUFHLGNBQWUsVUFBVyxDQUFDLENBQUUsRUFBRyxRQUFTLEVBQUUsR0FBSSxJQUFJLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLEtBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksSUFBRyxNQUFPLHFFQUFzRSxJQUFJLEVBQUUsRUFBRyxDQUFFLFdBQVksSUFBRyxNQUFPLDBFQUEyRSxJQUFJLEVBQUUsRUFBRyxDQUFFLFNBQVUsQ0FBRSxJQUFLLElBQUcsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLFdBQVksQ0FBQyxHQUFDLEdBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxHQUFDLEdBQUksSUFBSSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxJQUFHLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLElBQUcsR0FBQyxHQUFJLElBQUksR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyxpRUFBa0UsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLE1BQU8sbUZBQW9GLElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLFdBQVksS0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFjLEVBQUcsSUFBSSxLQUFJLElBQUksQ0FBQyxJQUFHLE1BQU0sQ0FBRSxDQUFDLENBQUUsQ0FBQyxFQUFHLFNBQVUsQ0FBRSxJQUFLLHFDQUFzQyxXQUFZLEdBQUcsUUFBUyxFQUFFLEdBQUksSUFBSSxFQUFFLEVBQUcsQ0FBRSxTQUFVLENBQUUsSUFBSyx3REFBeUQsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLE1BQU8sNERBQTZELElBQUksRUFBRSxDQUFDLENBQUUsRUFBRyxDQUFFLFdBQVksS0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEdBQUMsR0FBSSxJQUFJLEdBQUcsTUFBTyxDQUFDLENBQUUsU0FBVSxDQUFFLElBQUssNERBQTZELFdBQVksR0FBRyxRQUFTLEVBQUUsR0FBSSxJQUFJLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLHNFQUF1RSxJQUFJLEVBQUUsQ0FBQyxDQUFFLEVBQUcsSUFBRyxDQUFFLFNBQVUsQ0FBRSxJQUFLLElBQUcsV0FBWSxHQUFHLFFBQVMsRUFBRSxHQUFJLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLHlDQUEwQyxJQUFJLEVBQUUsQ0FBQyxDQUFFLEVBQ2hoRyxZQUFVLHdCQ0xsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsNEJBQStCLE9BQ3ZDLElBQU0sU0FDQSxVQUNBLElBQTBCLENBQUMsRUFBZ0IsRUFBVSxDQUFDLElBQU0sQ0FDOUQsT0FBVyxJQUFpQixnQkFBaUIsSUFBVSxRQUFTLENBQzVELGVBQWdCLEVBQ2hCLE9BQVEsRUFBUSxNQUNwQixDQUFDLEdBRUcsNEJBQTBCLHdCQ1ZsQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQscUJBQXdCLE9BQ2hDLElBQU0sU0FDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLElBQW1CLENBQUMsS0FBWSxDQUNsQyxXQUFZLGFBQ1osY0FBZSxHQUFRLGVBQWlCLElBQWMsV0FDdEQsY0FBZSxHQUFRLGVBQWlCLElBQWMsU0FDdEQsa0JBQW1CLEdBQVEsbUJBQXFCLEdBQ2hELGlCQUFrQixHQUFRLGtCQUFvQixJQUFtQix3QkFDakUsV0FBWSxHQUFRLFlBQWMsQ0FBQyxFQUNuQyxPQUFRLEdBQVEsUUFBVSxJQUFJLElBQWdCLFdBQzlDLFVBQVcsR0FBUSxXQUFhLE1BQ2hDLFVBQVcsR0FBUSxXQUFhLElBQWEsU0FDN0MsWUFBYSxHQUFRLGFBQWUsSUFBWSxTQUNoRCxZQUFhLEdBQVEsYUFBZSxJQUFZLE1BQ3BELEdBQ1EscUJBQW1CLHdCQ3BCM0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHFCQUF3QixPQUNoQyxJQUFNLFNBQ0EsSUFBaUIsSUFBUSxxQkFBMEMsRUFDbkUsVUFDQSxVQUNBLFNBQ0EsUUFDQSxTQUNBLFNBQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLFNBQ0EsU0FDQSxTQUNBLElBQW1CLENBQUMsSUFBVyxDQUM3QixJQUFnQixnQ0FBaUMsUUFBUSxPQUFPLEVBQ3BFLElBQU0sRUFBbUIsSUFBMEIsMEJBQTJCLENBQU0sRUFDOUUsRUFBd0IsSUFBTSxFQUFhLEVBQUUsS0FBSyxJQUFnQix5QkFBeUIsRUFDM0YsRUFBeUIsSUFBdUIsaUJBQWtCLENBQU0sRUFDOUUsTUFBTyxJQUNBLEtBQ0EsRUFDSCxRQUFTLE9BQ1QsZUFDQSxrQkFBbUIsR0FBUSxtQkFBcUIsSUFBd0Isb0JBQ3hFLDBCQUEyQixHQUFRLDJCQUFpQyxJQUF5QixrQ0FBbUMsSUFBMkIsZUFBZSxFQUMxSyx5QkFBMEIsR0FBUSwwQkFDMUIsSUFBdUIsaUJBQWtCLENBQUUsVUFBVyxFQUFtQixVQUFXLGNBQWUsSUFBZSxRQUFRLE9BQVEsQ0FBQyxFQUMzSSxZQUFhLEdBQVEsYUFBbUIsR0FBdUIsV0FBWSxJQUFtQiwrQkFBK0IsRUFDN0gsT0FBUSxHQUFRLFFBQWMsR0FBdUIsV0FBWSxHQUFrQiwyQkFBNEIsR0FBa0IsK0JBQStCLEVBQ2hLLGVBQWdCLEdBQVEsZ0JBQWtCLElBQUksSUFBb0IsZ0JBQWdCLENBQXFCLEVBQ3ZHLFVBQVcsR0FBUSxXQUNYLEdBQXVCLFdBQVksSUFDaEMsSUFBbUIsK0JBQ3RCLFFBQVMsVUFBYSxNQUFNLEVBQXNCLEdBQUcsV0FBYSxJQUFhLGtCQUNuRixDQUFDLEVBQ0wsT0FBUSxHQUFRLFFBQVUsSUFBWSxLQUFLLEtBQUssS0FBTSxRQUFRLEVBQzlELGdCQUFpQixHQUFRLGlCQUFtQixJQUFvQixnQkFDaEUscUJBQXNCLEdBQVEsc0JBQTRCLEdBQXVCLFdBQVksR0FBa0IsMENBQTBDLEVBQ3pKLGdCQUFpQixHQUFRLGlCQUF1QixHQUF1QixXQUFZLEdBQWtCLHFDQUFxQyxDQUM5SSxHQUVJLHFCQUFtQix3QkM5QzNCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw2QkFBZ0MsT0FDeEMsSUFBTSxTQUNBLFNBQ0EsU0FDQSxJQUFZLENBQUMsSUFBTSxFQUNuQixJQUEyQixDQUFDLEVBQWUsSUFBZSxDQUM1RCxJQUFNLEVBQXlCLElBQ3hCLElBQWMsSUFBeUIsbUNBQW9DLENBQWEsQ0FBQyxLQUN6RixJQUFjLElBQWdCLGlDQUFrQyxDQUFhLENBQUMsS0FDOUUsSUFBYyxJQUFnQixxQ0FBc0MsQ0FBYSxDQUFDLENBQ3pGLEVBRUEsT0FEQSxFQUFXLFFBQVEsQ0FBQyxJQUFjLEVBQVUsVUFBVSxDQUFzQixDQUFDLEVBQ3RFLElBQ0EsS0FDSSxJQUF5Qix1Q0FBd0MsQ0FBc0IsS0FDdkYsSUFBZ0IsNEJBQTZCLENBQXNCLEtBQ25FLElBQWdCLGdDQUFpQyxDQUFzQixDQUNsRixHQUVJLDZCQUEyQix1QkNwQm5DLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxjQUFvQixhQUFnQixPQUM1QyxJQUFNLFNBQ0EsU0FDQSxTQUNBLFVBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ04sT0FBTyxlQUFlLElBQVMsV0FBWSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZ0IsT0FBVSxDQUFDLEVBQ3BILElBQU0sVUFDQSxVQUNBLFVBQ04sTUFBTSxZQUFrQixJQUFnQixNQUFPLENBQzNDLFdBQVcsS0FBSyxHQUFnQixDQUM1QixJQUFNLEVBQWdCLElBQWdCLGlCQUFrQixHQUFpQixDQUFDLENBQUMsRUFDckUsRUFBZ0IsSUFBcUIsZ0NBQWlDLENBQVMsRUFDL0UsRUFBZ0IsSUFBa0Isb0JBQXFCLENBQVMsRUFDaEUsRUFBZ0IsSUFBc0Isc0JBQXVCLENBQVMsRUFDdEUsRUFBZ0IsSUFBbUIsbUJBQW9CLENBQVMsRUFDaEUsRUFBZ0IsSUFBeUIsd0JBQXlCLENBQVMsRUFDM0UsRUFBZ0IsSUFBcUIscUJBQXNCLEVBQVcsQ0FBRSxjQUFlLEdBQVUsQ0FBQyxFQUNsRyxFQUFnQixJQUF3Qix1QkFBd0IsQ0FBUyxFQUN6RSxFQUFnQixJQUFvQix5QkFBMEIsRUFBVyxHQUFlLFlBQWMsQ0FBQyxDQUFDLEVBQzlHLE1BQU0sQ0FBUyxFQUNmLEtBQUssT0FBUyxFQUNkLEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsS0FBSyxNQUFNLENBQUMsRUFDNUUsS0FBSyxnQkFBZ0IsSUFBUSxJQUE0Qix1QkFBd0IsS0FBSyxNQUFNLENBQUMsRUFDN0YsS0FBSyxnQkFBZ0IsSUFBUSxJQUF5QixvQkFBcUIsS0FBSyxNQUFNLENBQUMsRUFDdkYsS0FBSyxnQkFBZ0IsSUFBUSxJQUFvQixnQkFBaUIsS0FBSyxNQUFNLENBQUMsRUFDOUUsS0FBSyxnQkFBZ0IsSUFBUSxJQUFpQyw0QkFBNkIsS0FBSyxNQUFNLENBQUMsRUFDdkcsS0FBSyxnQkFBZ0IsSUFBUSxJQUF3QixtQkFBb0IsS0FBSyxNQUFNLENBQUMsRUFFekYsT0FBTyxFQUFHLENBQ04sTUFBTSxRQUFRLEVBRXRCLENBQ1EsY0FBWSx3QkN4Q3BCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw4QkFBb0MsYUFBZ0IsT0FDNUQsSUFBTSxTQUNBLFNBQ0EsU0FDTixPQUFPLGVBQWUsSUFBUyxXQUFZLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFnQixRQUFXLENBQUMsRUFDckgsSUFBTSxTQUNBLFNBQ0EsU0FDTixNQUFNLFlBQWtDLElBQWdCLE9BQVEsT0FDckQsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILGtCQUFtQixDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sbUJBQW9CLEVBQ3RFLFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUEwQixpQ0FBaUMsQ0FBQyxDQUFDLEVBQ2xKLElBQU0sRUFBUSxFQUFZLE9BQU8sS0FBSyxlQUFlLEdBQzdDLFVBQVcsRUFHYixFQUEwQixDQUM1QixTQUNBLFdBSmUsWUFLZixZQUpnQiw0QkFLaEIsd0JBQXlCLElBQVcsNENBQ3BDLHlCQUEwQixJQUFXLDhDQUNwQyxJQUFRLG9CQUFxQixDQUMxQixRQUFTLG1DQUNULFVBQVcsb0JBQ2YsQ0FDSixHQUNRLGtCQUFtQixFQUMzQixPQUFPLEVBQU0sUUFBUSxDQUFDLElBQVksRUFBZSxPQUFPLEVBQVEsUUFBUyxHQUFXLENBQUMsQ0FBQyxFQUFHLENBQXVCLEVBRXBILFNBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FDdEIsT0FBVyxJQUFZLDZCQUE4QixFQUFPLENBQU8sRUFFdkUsV0FBVyxDQUFDLEVBQVEsRUFBUyxDQUN6QixPQUFXLElBQVksNkJBQThCLEVBQVEsQ0FBTyxFQUU1RSxDQUNRLDhCQUE0Qix3QkNuRHBDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQ0FBNEMsYUFBZ0IsT0FDcEUsSUFBTSxTQUNBLFNBQ0EsU0FDQSxTQUNOLE9BQU8sZUFBZSxJQUFTLFdBQVksQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLFFBQVcsQ0FBQyxFQUNySCxJQUFNLFNBQ0EsU0FDTixNQUFNLFlBQTBDLElBQWdCLE9BQVEsT0FDN0QsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILGtCQUFtQixDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sbUJBQW9CLEVBQ3RFLFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUFrQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQzFKLEtBQUssZ0JBQWdCLElBQVEsSUFBcUIsaUJBQWtCLENBQWEsQ0FBQyxFQUNsRixJQUFNLEVBQVEsRUFBWSxPQUFPLEtBQUssZUFBZSxHQUM3QyxVQUFXLEVBR2IsRUFBMEIsQ0FDNUIsU0FDQSxXQUplLFlBS2YsWUFKZ0Isb0NBS2hCLHdCQUF5QixDQUFDLElBQU0sRUFDaEMseUJBQTBCLENBQUMsSUFBTSxHQUNoQyxJQUFRLG9CQUFxQixDQUMxQixRQUFTLG1DQUNULFVBQVcsNEJBQ2YsQ0FDSixHQUNRLGtCQUFtQixFQUMzQixPQUFPLEVBQU0sUUFBUSxDQUFDLElBQVksRUFBZSxPQUFPLEVBQVEsUUFBUyxHQUFXLENBQUMsQ0FBQyxFQUFHLENBQXVCLEVBRXBILFNBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FDdEIsT0FBVyxJQUFZLHFDQUFzQyxFQUFPLENBQU8sRUFFL0UsV0FBVyxDQUFDLEVBQVEsRUFBUyxDQUN6QixPQUFXLElBQVkscUNBQXNDLEVBQVEsQ0FBTyxFQUVwRixDQUNRLHNDQUFvQyx3QkNwRDVDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw0QkFBa0MsYUFBZ0IsT0FDMUQsSUFBTSxTQUNBLFNBQ0EsU0FDQSxTQUNOLE9BQU8sZUFBZSxJQUFTLFdBQVksQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLFFBQVcsQ0FBQyxFQUNySCxJQUFNLFNBQ0EsU0FDTixNQUFNLFlBQWdDLElBQWdCLE9BQVEsT0FDbkQsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILGtCQUFtQixDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sbUJBQW9CLEVBQ3RFLFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUF3QixpQ0FBaUMsQ0FBQyxDQUFDLEVBQ2hKLEtBQUssZ0JBQWdCLElBQVEsSUFBcUIsaUJBQWtCLENBQWEsQ0FBQyxFQUNsRixJQUFNLEVBQVEsRUFBWSxPQUFPLEtBQUssZUFBZSxHQUM3QyxVQUFXLEVBR2IsRUFBMEIsQ0FDNUIsU0FDQSxXQUplLFlBS2YsWUFKZ0IsMEJBS2hCLHdCQUF5QixDQUFDLElBQU0sRUFDaEMseUJBQTBCLENBQUMsSUFBTSxHQUNoQyxJQUFRLG9CQUFxQixDQUMxQixRQUFTLG1DQUNULFVBQVcsa0JBQ2YsQ0FDSixHQUNRLGtCQUFtQixFQUMzQixPQUFPLEVBQU0sUUFBUSxDQUFDLElBQVksRUFBZSxPQUFPLEVBQVEsUUFBUyxHQUFXLENBQUMsQ0FBQyxFQUFHLENBQXVCLEVBRXBILFNBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FDdEIsT0FBVyxJQUFZLDJCQUE0QixFQUFPLENBQU8sRUFFckUsV0FBVyxDQUFDLEVBQVEsRUFBUyxDQUN6QixPQUFXLElBQVksMkJBQTRCLEVBQVEsQ0FBTyxFQUUxRSxDQUNRLDRCQUEwQix3QkNwRGxDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw2QkFBbUMsYUFBZ0IsT0FDM0QsSUFBTSxTQUNBLFNBQ0EsU0FDQSxTQUNOLE9BQU8sZUFBZSxJQUFTLFdBQVksQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLFFBQVcsQ0FBQyxFQUNySCxJQUFNLFNBQ0EsU0FDTixNQUFNLFlBQWlDLElBQWdCLE9BQVEsT0FDcEQsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILGtCQUFtQixDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sbUJBQW9CLEVBQ3RFLFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUF5QixpQ0FBaUMsQ0FBQyxDQUFDLEVBQ2pKLEtBQUssZ0JBQWdCLElBQVEsSUFBcUIsaUJBQWtCLENBQWEsQ0FBQyxFQUNsRixJQUFNLEVBQVEsRUFBWSxPQUFPLEtBQUssZUFBZSxHQUM3QyxVQUFXLEVBR2IsRUFBMEIsQ0FDNUIsU0FDQSxXQUplLFlBS2YsWUFKZ0IsMkJBS2hCLHdCQUF5QixDQUFDLElBQU0sRUFDaEMseUJBQTBCLENBQUMsSUFBTSxHQUNoQyxJQUFRLG9CQUFxQixDQUMxQixRQUFTLG1DQUNULFVBQVcsbUJBQ2YsQ0FDSixHQUNRLGtCQUFtQixFQUMzQixPQUFPLEVBQU0sUUFBUSxDQUFDLElBQVksRUFBZSxPQUFPLEVBQVEsUUFBUyxHQUFXLENBQUMsQ0FBQyxFQUFHLENBQXVCLEVBRXBILFNBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FDdEIsT0FBVyxJQUFZLDRCQUE2QixFQUFPLENBQU8sRUFFdEUsV0FBVyxDQUFDLEVBQVEsRUFBUyxDQUN6QixPQUFXLElBQVksNEJBQTZCLEVBQVEsQ0FBTyxFQUUzRSxDQUNRLDZCQUEyQix3QkNwRG5DLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw4QkFBb0MsYUFBZ0IsT0FDNUQsSUFBTSxTQUNBLFNBQ0EsU0FDQSxTQUNOLE9BQU8sZUFBZSxJQUFTLFdBQVksQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLFFBQVcsQ0FBQyxFQUNySCxJQUFNLFNBQ0EsU0FDQSxTQUNOLE1BQU0sWUFBa0MsSUFBZ0IsT0FBUSxPQUNyRCxpQ0FBZ0MsRUFBRyxDQUN0QyxNQUFPLENBQ0gsa0JBQW1CLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxtQkFBb0IsRUFDdEUsUUFBUyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0saUJBQWtCLEVBQzFELFNBQVUsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFVBQVcsRUFDcEQsT0FBUSxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sUUFBUyxFQUNoRCxhQUFjLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxzQkFBdUIsQ0FDeEUsRUFFSixXQUFXLENBQUMsRUFBTyxDQUNmLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFFakIsaUJBQWlCLENBQUMsRUFBYSxFQUFlLEVBQVMsQ0FDbkQsS0FBSyxnQkFBZ0IsSUFBUSxJQUFtQixlQUFnQixFQUFlLEtBQUssVUFBVyxLQUFLLFdBQVcsQ0FBQyxFQUNoSCxLQUFLLGdCQUFnQixJQUFRLElBQXNCLGtCQUFtQixFQUFlLElBQTBCLGlDQUFpQyxDQUFDLENBQUMsRUFDbEosS0FBSyxnQkFBZ0IsSUFBUSxJQUFxQixpQkFBa0IsQ0FBYSxDQUFDLEVBQ2xGLElBQU0sRUFBUSxFQUFZLE9BQU8sS0FBSyxlQUFlLEdBQzdDLFVBQVcsRUFHYixFQUEwQixDQUM1QixTQUNBLFdBSmUsWUFLZixZQUpnQiw0QkFLaEIsd0JBQXlCLENBQUMsSUFBTSxFQUNoQyx5QkFBMEIsSUFBVyw4Q0FDcEMsSUFBUSxvQkFBcUIsQ0FDMUIsUUFBUyxtQ0FDVCxVQUFXLG9CQUNmLENBQ0osR0FDUSxrQkFBbUIsRUFDM0IsT0FBTyxFQUFNLFFBQVEsQ0FBQyxJQUFZLEVBQWUsT0FBTyxFQUFRLFFBQVMsR0FBVyxDQUFDLENBQUMsRUFBRyxDQUF1QixFQUVwSCxTQUFTLENBQUMsRUFBTyxFQUFTLENBQ3RCLE9BQVcsSUFBWSw2QkFBOEIsRUFBTyxDQUFPLEVBRXZFLFdBQVcsQ0FBQyxFQUFRLEVBQVMsQ0FDekIsT0FBVyxJQUFZLDZCQUE4QixFQUFRLENBQU8sRUFFNUUsQ0FDUSw4QkFBNEIsd0JDckRwQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsMkJBQWlDLGFBQWdCLE9BQ3pELElBQU0sU0FDQSxTQUNBLFNBQ0EsU0FDTixPQUFPLGVBQWUsSUFBUyxXQUFZLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFnQixRQUFXLENBQUMsRUFDckgsSUFBTSxTQUNBLFNBQ0EsU0FDTixNQUFNLFlBQStCLElBQWdCLE9BQVEsT0FDbEQsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILGtCQUFtQixDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sbUJBQW9CLEVBQ3RFLFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUF1QixpQ0FBaUMsQ0FBQyxDQUFDLEVBQy9JLEtBQUssZ0JBQWdCLElBQVEsSUFBcUIsaUJBQWtCLENBQWEsQ0FBQyxFQUNsRixJQUFNLEVBQVEsRUFBWSxPQUFPLEtBQUssZUFBZSxHQUM3QyxVQUFXLEVBR2IsRUFBMEIsQ0FDNUIsU0FDQSxXQUplLFlBS2YsWUFKZ0IseUJBS2hCLHdCQUF5QixDQUFDLElBQU0sRUFDaEMseUJBQTBCLElBQVcsMkNBQ3BDLElBQVEsb0JBQXFCLENBQzFCLFFBQVMsbUNBQ1QsVUFBVyxpQkFDZixDQUNKLEdBQ1Esa0JBQW1CLEVBQzNCLE9BQU8sRUFBTSxRQUFRLENBQUMsSUFBWSxFQUFlLE9BQU8sRUFBUSxRQUFTLEdBQVcsQ0FBQyxDQUFDLEVBQUcsQ0FBdUIsRUFFcEgsU0FBUyxDQUFDLEVBQU8sRUFBUyxDQUN0QixPQUFXLElBQVksMEJBQTJCLEVBQU8sQ0FBTyxFQUVwRSxXQUFXLENBQUMsRUFBUSxFQUFTLENBQ3pCLE9BQVcsSUFBWSwwQkFBMkIsRUFBUSxDQUFPLEVBRXpFLENBQ1EsMkJBQXlCLHdCQ3JEakMsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFFBQVcsT0FDbkIsSUFBTSxTQUNBLFNBQ0EsVUFDQSxTQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxTQUNBLElBQVcsQ0FDYixrQkFBbUIsSUFBb0Isa0JBQ3ZDLDBCQUEyQixJQUE0QiwwQkFDdkQsaUNBQWtDLElBQW1DLGlDQUNyRSxrQ0FBbUMsSUFBb0Msa0NBQ3ZFLHdCQUF5QixJQUEwQix3QkFDbkQseUJBQTBCLElBQTJCLHlCQUNyRCwwQkFBMkIsSUFBNEIsMEJBQ3ZELHVCQUF3QixJQUF5QixzQkFDckQsRUFDQSxNQUFNLFlBQVksSUFBWSxTQUFVLENBQ3hDLENBQ1EsUUFBTSxJQUNWLElBQWdCLHVCQUF3QixJQUFVLEdBQUcscUJDekJ6RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQVEsa0JBQTZDLEVBQU8sRUFDNUQsR0FBUSxtQkFBcUQsRUFBTyxFQUNwRSxHQUFRLGtCQUE0RCxFQUFPLEVBQzNFLEdBQVEsbUJBQTZELEVBQU8sRUFDNUUsR0FBUSxtQkFBbUQsRUFBTyxFQUNsRSxHQUFRLG1CQUFvRCxFQUFPLEVBQ25FLEdBQVEsbUJBQXFELEVBQU8sRUFDcEUsR0FBUSxtQkFBa0QsRUFBTyxzQkNUakUsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sU0FDTixJQUFRLGtCQUFvQyxHQUFPLHNCQ0ZuRCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0NBQTRDLHlDQUErQywwQkFBNkIsT0FDaEksSUFBTSxVQUNBLFNBQ0EsSUFBK0IsQ0FBQyxFQUFVLElBQW1CLENBQy9ELElBQUssRUFDRCxPQUFPLEVBRVAsWUFBTyxNQUFNLFVBQThCLENBQVMsQ0FDaEQsV0FBVyxDQUFDLEVBQVEsQ0FDaEIsTUFBTSxDQUFNLEVBQ1osUUFBVyxLQUFpQixFQUN4QixLQUFLLGdCQUFnQixJQUFJLENBQWEsRUFHbEQsR0FFRixJQUF3QixDQUFDLEVBQWEsQ0FBQyxFQUFHLElBQW1CLElBQXlCLHNCQUF1QixFQUFZLElBQTZCLElBQVksVUFBVyxDQUFVLENBQUMsRUFDdEwsMEJBQXdCLElBQ2hDLElBQU0sSUFBdUMsQ0FBQyxFQUFhLENBQUMsRUFBRyxJQUFtQixJQUF5QixxQ0FBc0MsRUFBWSxJQUE2QixJQUFZLFVBQVcsQ0FBVSxDQUFDLEVBQ3BOLHlDQUF1QyxJQUMvQyxJQUFNLElBQW9DLENBQUMsSUFBYSxDQUFDLElBQVUsRUFBUyxDQUN4RSxZQUF5QiwwQkFBdUIsQ0FBSyxFQUNyRCwyQkFBd0MseUNBQXNDLENBQUssS0FDaEYsQ0FDUCxDQUFDLEVBQ08sc0NBQW9DLHVCQzFCNUMsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHVCQUEyQixPQUNuQyxJQUFNLFFBQ04sR0FBUSxrQkFBcUMsRUFBTyxFQUNwRCxHQUFRLG1CQUErQixFQUFPLEVBQzlDLEdBQVEsbUJBQW9DLEVBQU8sRUFDbkQsR0FBUSxtQkFBa0MsRUFBTyxFQUNqRCxHQUFRLG1CQUErQyxFQUFPLEVBQzlELElBQUksU0FDSixPQUFPLGVBQWUsR0FBUyxzQkFBdUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQXNCLG9CQUF1QixDQUFDLHNCQ1RsSixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsWUFBZSxPQUN2QixJQUFNLElBQUksV0FBWSxHQUFJLEtBQU0sR0FBSSxPQUFRLEdBQUksTUFDMUMsSUFBSSxRQUFTLEdBQUksT0FBUSxHQUFJLFFBQVMsR0FBSSxXQUFZLElBQUksa0JBQW1CLElBQUksRUFBRyxLQUFJLEdBQU8sS0FBUSxRQUFTLEVBQUcsSUFBSSxFQUFHLEtBQUksR0FBTSxRQUFXLEdBQU8sS0FBUSxTQUFVLEVBQUcsSUFBSSxFQUFHLElBQUksVUFBVyxFQUFHLElBQUksRUFBRyxJQUFJLGlCQUFrQixJQUFJLENBQUMsRUFBRyxJQUFJLFNBQVUsRUFBRyxFQUFJLENBQUUsRUFBRyxJQUFJLEVBQUcsSUFBSSxpQkFBa0IsSUFBSSxDQUFDLEVBQUcsSUFBSSxjQUFlLEVBQUcsRUFBSSxDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsSUFBSSxFQUFHLElBQUksaUJBQWtCLElBQUksQ0FBQyxHQUFNLEVBQUcsSUFBSSxXQUFZLElBQUksQ0FBQyxFQUFHLElBQUksR0FBRSxFQUFHLGNBQWMsQ0FBRSxDQUFDLENBQUUsRUFBRyxJQUFJLEVBQUcsSUFBSSxpQkFBa0IsSUFBSSxDQUFDLEdBQU0sRUFBRyxJQUFJLFdBQVksSUFBSSxDQUFDLEVBQUcsSUFBSSxHQUFFLEVBQUcsbUJBQW1CLENBQUUsQ0FBQyxDQUFFLEVBQUcsSUFBSSxDQUFDLEdBQUMsRUFBRyxJQUFJLENBQUMsR0FBQyxFQUFHLElBQUksQ0FBQyxFQUFHLElBQUksUUFBUyxDQUFDLEVBQ2hrQixJQUFRLENBQUUsUUFBUyxNQUFPLFdBQVksQ0FBRSxPQUFRLElBQUcsYUFBYyxJQUFHLFFBQVMsSUFBRyxTQUFVLEdBQUUsRUFBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBRSxDQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksSUFBRyxNQUFPLG9FQUFxRSxLQUFNLEVBQUUsRUFBRyxDQUFFLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLElBQUcsTUFBTyx5RUFBMEUsS0FBTSxFQUFFLEVBQUcsQ0FBRSxTQUFVLENBQUUsSUFBSyxJQUFHLFdBQVksR0FBRyxRQUFTLEVBQUUsRUFBRyxLQUFNLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFHLENBQUUsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUksS0FBSSxJQUFJLEdBQUUsQ0FBQyxFQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFJLGlCQUFrQixJQUFJLElBQUcsT0FBUSxHQUFFLENBQUMsRUFBRyxLQUFNLEdBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLElBQUcsR0FBQyxFQUFHLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsSUFBRyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyw2RUFBOEUsV0FBWSxHQUFHLFFBQVMsRUFBRSxFQUFHLEtBQU0sRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLGtGQUFtRixLQUFNLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLElBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyxvRUFBcUUsV0FBWSxHQUFHLFFBQVMsRUFBRSxFQUFHLEtBQU0sRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLDJEQUE0RCxLQUFNLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxXQUFZLElBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxHQUFDLEVBQUcsS0FBTSxHQUFHLE1BQU8sQ0FBQyxDQUFFLEtBQU0sR0FBRyxNQUFPLENBQUMsQ0FBRSxTQUFVLENBQUUsSUFBSyx3RUFBeUUsV0FBWSxHQUFHLFFBQVMsRUFBRSxFQUFHLEtBQU0sRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxNQUFPLHFFQUFzRSxLQUFNLEVBQUUsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxLQUFNLEdBQUcsTUFBTyxDQUFDLENBQUUsU0FBVSxDQUFFLElBQUssK0RBQWdFLFdBQVksR0FBRyxRQUFTLEVBQUUsRUFBRyxLQUFNLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRyxDQUFFLE1BQU8sd0NBQXlDLEtBQU0sRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQ2p3RCxZQUFVLHdCQ0xsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsNEJBQStCLE9BQ3ZDLElBQU0sU0FDQSxVQUNBLElBQTBCLENBQUMsRUFBZ0IsRUFBVSxDQUFDLElBQU0sQ0FDOUQsT0FBVyxJQUFpQixnQkFBaUIsSUFBVSxRQUFTLENBQzVELGVBQWdCLEVBQ2hCLE9BQVEsRUFBUSxNQUNwQixDQUFDLEdBRUcsNEJBQTBCLHdCQ1ZsQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQscUJBQXdCLE9BQ2hDLElBQU0sU0FDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLElBQW1CLENBQUMsS0FBWSxDQUNsQyxXQUFZLGFBQ1osY0FBZSxHQUFRLGVBQWlCLElBQWMsV0FDdEQsY0FBZSxHQUFRLGVBQWlCLElBQWMsU0FDdEQsa0JBQW1CLEdBQVEsbUJBQXFCLEdBQ2hELGlCQUFrQixHQUFRLGtCQUFvQixJQUFtQix3QkFDakUsV0FBWSxHQUFRLFlBQWMsQ0FBQyxFQUNuQyxPQUFRLEdBQVEsUUFBVSxJQUFJLElBQWdCLFdBQzlDLFVBQVcsR0FBUSxXQUFhLGtCQUNoQyxVQUFXLEdBQVEsV0FBYSxJQUFhLFNBQzdDLFlBQWEsR0FBUSxhQUFlLElBQVksU0FDaEQsWUFBYSxHQUFRLGFBQWUsSUFBWSxNQUNwRCxHQUNRLHFCQUFtQix3QkNwQjNCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxxQkFBd0IsT0FDaEMsSUFBTSxTQUNBLElBQWlCLElBQVEscUJBQTBDLEVBQ25FLFVBQ0EsVUFDQSxTQUNBLFFBQ0EsVUFDQSxTQUNBLFNBQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLFNBQ0EsU0FDQSxTQUNBLElBQW1CLENBQUMsSUFBVyxDQUM3QixJQUFnQixnQ0FBaUMsUUFBUSxPQUFPLEVBQ3BFLElBQU0sRUFBbUIsSUFBMEIsMEJBQTJCLENBQU0sRUFDOUUsRUFBd0IsSUFBTSxFQUFhLEVBQUUsS0FBSyxJQUFnQix5QkFBeUIsRUFDM0YsRUFBeUIsSUFBdUIsaUJBQWtCLENBQU0sRUFDOUUsTUFBTyxJQUNBLEtBQ0EsRUFDSCxRQUFTLE9BQ1QsZUFDQSxrQkFBbUIsR0FBUSxtQkFBcUIsSUFBd0Isb0JBQ3hFLDBCQUEyQixHQUFRLDJCQUFpQyxJQUFhLGtDQUFtQyxJQUEyQixlQUFlLEVBQzlKLHlCQUEwQixHQUFRLDBCQUMxQixJQUF1QixpQkFBa0IsQ0FBRSxVQUFXLEVBQW1CLFVBQVcsY0FBZSxJQUFlLFFBQVEsT0FBUSxDQUFDLEVBQzNJLHlCQUEwQixHQUFRLDBCQUE0QixJQUF5Qix5QkFDdkYsWUFBYSxHQUFRLGFBQW1CLEdBQXVCLFdBQVksSUFBbUIsK0JBQStCLEVBQzdILE9BQVEsR0FBUSxRQUFjLEdBQXVCLFdBQVksR0FBa0IsMkJBQTRCLEdBQWtCLCtCQUErQixFQUNoSyxlQUFnQixHQUFRLGdCQUFrQixJQUFJLElBQW9CLGdCQUFnQixDQUFxQixFQUN2RyxVQUFXLEdBQVEsV0FDWCxHQUF1QixXQUFZLElBQ2hDLElBQW1CLCtCQUN0QixRQUFTLFVBQWEsTUFBTSxFQUFzQixHQUFHLFdBQWEsSUFBYSxrQkFDbkYsQ0FBQyxFQUNMLE9BQVEsR0FBUSxRQUFVLElBQVksS0FBSyxLQUFLLEtBQU0sUUFBUSxFQUM5RCxnQkFBaUIsR0FBUSxpQkFBbUIsSUFBb0IsZ0JBQ2hFLHFCQUFzQixHQUFRLHNCQUE0QixHQUF1QixXQUFZLEdBQWtCLDBDQUEwQyxFQUN6SixnQkFBaUIsR0FBUSxpQkFBdUIsR0FBdUIsV0FBWSxHQUFrQixxQ0FBcUMsQ0FDOUksR0FFSSxxQkFBbUIsd0JDaEQzQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsNkJBQWdDLE9BQ3hDLElBQU0sU0FDQSxTQUNBLFNBQ0EsSUFBWSxDQUFDLElBQU0sRUFDbkIsSUFBMkIsQ0FBQyxFQUFlLElBQWUsQ0FDNUQsSUFBTSxFQUF5QixJQUN4QixJQUFjLElBQXlCLG1DQUFvQyxDQUFhLENBQUMsS0FDekYsSUFBYyxJQUFnQixpQ0FBa0MsQ0FBYSxDQUFDLEtBQzlFLElBQWMsSUFBZ0IscUNBQXNDLENBQWEsQ0FBQyxDQUN6RixFQUVBLE9BREEsRUFBVyxRQUFRLENBQUMsSUFBYyxFQUFVLFVBQVUsQ0FBc0IsQ0FBQyxFQUN0RSxJQUNBLEtBQ0ksSUFBeUIsdUNBQXdDLENBQXNCLEtBQ3ZGLElBQWdCLDRCQUE2QixDQUFzQixLQUNuRSxJQUFnQixnQ0FBaUMsQ0FBc0IsQ0FDbEYsR0FFSSw2QkFBMkIsd0JDcEJuQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQseUJBQStCLGFBQWdCLE9BQ3ZELElBQU0sU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsVUFDQSxTQUNBLFNBQ0EsU0FDQSxTQUNOLE9BQU8sZUFBZSxJQUFTLFdBQVksQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLE9BQVUsQ0FBQyxFQUNwSCxJQUFNLFVBQ0EsVUFDQSxVQUNOLE1BQU0sWUFBNkIsSUFBZ0IsTUFBTyxDQUN0RCxXQUFXLEtBQUssR0FBZ0IsQ0FDNUIsSUFBTSxFQUFnQixJQUFnQixpQkFBa0IsR0FBaUIsQ0FBQyxDQUFDLEVBQ3JFLEVBQWdCLElBQXFCLGdDQUFpQyxDQUFTLEVBQy9FLEVBQWdCLElBQWtCLG9CQUFxQixDQUFTLEVBQ2hFLEVBQWdCLElBQXNCLHNCQUF1QixDQUFTLEVBQ3RFLEVBQWdCLElBQW1CLG1CQUFvQixDQUFTLEVBQ2hFLEVBQWdCLElBQXlCLHdCQUF5QixDQUFTLEVBQzNFLEVBQWdCLElBQXFCLHFCQUFzQixDQUFTLEVBQ3BFLEVBQWdCLElBQXdCLHVCQUF3QixDQUFTLEVBQ3pFLEVBQWdCLElBQW9DLDhCQUErQixDQUFTLEVBQzVGLEVBQWdCLElBQW9CLHlCQUEwQixFQUFXLEdBQWUsWUFBYyxDQUFDLENBQUMsRUFDOUcsTUFBTSxDQUFTLEVBQ2YsS0FBSyxPQUFTLEVBQ2QsS0FBSyxnQkFBZ0IsSUFBUSxJQUFtQixlQUFnQixLQUFLLE1BQU0sQ0FBQyxFQUM1RSxLQUFLLGdCQUFnQixJQUFRLElBQTRCLHVCQUF3QixLQUFLLE1BQU0sQ0FBQyxFQUM3RixLQUFLLGdCQUFnQixJQUFRLElBQXlCLG9CQUFxQixLQUFLLE1BQU0sQ0FBQyxFQUN2RixLQUFLLGdCQUFnQixJQUFRLElBQW9CLGdCQUFpQixLQUFLLE1BQU0sQ0FBQyxFQUM5RSxLQUFLLGdCQUFnQixJQUFRLElBQWlDLDRCQUE2QixLQUFLLE1BQU0sQ0FBQyxFQUN2RyxLQUFLLGdCQUFnQixJQUFRLElBQXFCLGlCQUFrQixLQUFLLE1BQU0sQ0FBQyxFQUNoRixLQUFLLGdCQUFnQixJQUFRLElBQXdCLG1CQUFvQixLQUFLLE1BQU0sQ0FBQyxFQUV6RixPQUFPLEVBQUcsQ0FDTixNQUFNLFFBQVEsRUFFdEIsQ0FDUSx5QkFBdUIsdUJDM0MvQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsbUNBQXlDLHVCQUEwQixPQUMzRSxJQUFNLFNBQ04sT0FBTyxlQUFlLElBQVMscUJBQXNCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFnQixpQkFBb0IsQ0FBQyxFQUN4SSxNQUFNLFlBQXVDLElBQWdCLGdCQUFpQixDQUMxRSxXQUFXLENBQUMsRUFBUyxDQUNqQixNQUFNLENBQU8sRUFDYixPQUFPLGVBQWUsS0FBTSxJQUErQixTQUFTLEVBRTVFLENBQ1EsbUNBQWlDLHVCQ1Z6QyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsNERBQWtFLHFDQUEyQyxrQ0FBd0MsMkRBQWlFLDBDQUFnRCx5Q0FBK0MsbUJBQXlCLDhCQUFvQyx3QkFBOEIsd0JBQThCLGtDQUF3Qyw4QkFBb0MsMEJBQWdDLDJCQUFpQyx3QkFBOEIsNEJBQWtDLDBCQUE2QixPQUNocUIsSUFBTSxRQUNBLFFBQ04sTUFBTSxZQUE4QixHQUFpQyw4QkFBK0IsQ0FDaEcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx3QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHdCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXNCLFNBQVMsRUFFbkUsQ0FDUSwwQkFBd0IsSUFDaEMsTUFBTSxZQUFnQyxHQUFpQyw4QkFBK0IsQ0FDbEcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSwwQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLDBCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXdCLFNBQVMsRUFFckUsQ0FDUSw0QkFBMEIsSUFDbEMsTUFBTSxZQUE0QixHQUFpQyw4QkFBK0IsQ0FDOUYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxzQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHNCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQW9CLFNBQVMsRUFDekQsS0FBSyxtQkFBcUIsRUFBSyxtQkFDL0IsS0FBSyxhQUFlLEVBQUssYUFFakMsQ0FDUSx3QkFBc0IsSUFDOUIsTUFBTSxZQUErQixHQUFpQyw4QkFBK0IsQ0FDakcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx5QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHlCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXVCLFNBQVMsRUFFcEUsQ0FDUSwyQkFBeUIsSUFDakMsTUFBTSxZQUE4QixHQUFpQyw4QkFBK0IsQ0FDaEcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSx3QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHdCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQXNCLFNBQVMsRUFFbkUsQ0FDUSwwQkFBd0IsSUFDaEMsTUFBTSxZQUFrQyxHQUFpQyw4QkFBK0IsQ0FDcEcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSw0QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLDRCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQTBCLFNBQVMsRUFFdkUsQ0FDUSw4QkFBNEIsSUFDcEMsTUFBTSxZQUFzQyxHQUFpQyw4QkFBK0IsQ0FDeEcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxnQ0FDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLGdDQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQThCLFNBQVMsRUFFM0UsQ0FDUSxrQ0FBZ0MsSUFDeEMsTUFBTSxZQUE0QixHQUFpQyw4QkFBK0IsQ0FDOUYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxzQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHNCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQW9CLFNBQVMsRUFFakUsQ0FDUSx3QkFBc0IsSUFDOUIsTUFBTSxZQUE0QixHQUFpQyw4QkFBK0IsQ0FDOUYsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSxzQkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLHNCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQW9CLFNBQVMsRUFFakUsQ0FDUSx3QkFBc0IsSUFDOUIsTUFBTSxZQUFrQyxHQUFpQyw4QkFBK0IsQ0FDcEcsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQ0YsS0FBTSw0QkFDTixPQUFRLFlBQ0wsQ0FDUCxDQUFDLEVBQ0QsS0FBSyxLQUFPLDRCQUNaLEtBQUssT0FBUyxTQUNkLE9BQU8sZUFBZSxLQUFNLElBQTBCLFNBQVMsRUFDL0QsS0FBSyxtQkFBcUIsRUFBSyxtQkFDL0IsS0FBSyxnQkFBa0IsRUFBSyxnQkFFcEMsQ0FDUSw4QkFBNEIsSUFDcEMsSUFBSSxLQUNILFFBQVMsQ0FBQyxFQUFnQixDQUN2QixFQUFlLE1BQVEsQ0FBQyxFQUFPLElBQVksQ0FDdkMsR0FBSSxFQUFNLFFBQVUsT0FDaEIsT0FBTyxFQUFRLE1BQU0sRUFBTSxLQUFLLEVBQ3BDLEdBQUksRUFBTSwwQkFBNEIsT0FDbEMsT0FBTyxFQUFRLHdCQUF3QixFQUFNLHVCQUF1QixFQUN4RSxHQUFJLEVBQU0sNEJBQThCLE9BQ3BDLE9BQU8sRUFBUSwwQkFBMEIsRUFBTSx5QkFBeUIsRUFDNUUsR0FBSSxFQUFNLHNCQUF3QixPQUM5QixPQUFPLEVBQVEsb0JBQW9CLEVBQU0sbUJBQW1CLEVBQ2hFLEdBQUksRUFBTSxzQkFBd0IsT0FDOUIsT0FBTyxFQUFRLG9CQUFvQixFQUFNLG1CQUFtQixFQUNoRSxHQUFJLEVBQU0sd0JBQTBCLE9BQ2hDLE9BQU8sRUFBUSxzQkFBc0IsRUFBTSxxQkFBcUIsRUFDcEUsT0FBTyxFQUFRLEVBQUUsRUFBTSxTQUFTLEdBQUksRUFBTSxTQUFTLEVBQUUsS0FFMUQsSUFBeUIscUJBQTJCLG1CQUFpQixDQUFDLEVBQUUsRUFDM0UsSUFBTSxJQUF1QyxDQUFDLEtBQVMsSUFDaEQsS0FDQyxFQUFJLE1BQVEsQ0FBRSxLQUFNLEdBQWdCLGdCQUFpQixDQUM3RCxHQUNRLHlDQUF1QyxJQUMvQyxJQUFNLElBQXdDLENBQUMsS0FBUyxJQUNqRCxLQUNDLEVBQUksTUFBUSxDQUFFLEtBQU0sR0FBZ0IsZ0JBQWlCLENBQzdELEdBQ1EsMENBQXdDLElBQ2hELElBQU0sSUFBeUQsQ0FBQyxLQUFTLElBQ2xFLEtBQ0MsRUFBSSxNQUFRLENBQUUsS0FBTSxHQUFnQixnQkFBaUIsQ0FDN0QsR0FDUSwyREFBeUQsSUFDakUsSUFBTSxJQUFnQyxDQUFDLEtBQVMsSUFDekMsS0FDQyxFQUFJLE9BQVMsQ0FBRSxNQUFPLEdBQWdCLGdCQUFpQixDQUMvRCxHQUNRLGtDQUFnQyxJQUN4QyxJQUFNLElBQW1DLENBQUMsSUFBUSxDQUM5QyxHQUFJLEVBQUksUUFBVSxPQUNkLE1BQU8sQ0FBRSxNQUFPLEdBQWdCLGdCQUFpQixFQUNyRCxHQUFJLEVBQUksMEJBQTRCLE9BQ2hDLE1BQU8sQ0FBRSx3QkFBeUIsRUFBSSx1QkFBd0IsRUFDbEUsR0FBSSxFQUFJLDRCQUE4QixPQUNsQyxNQUFPLENBQUUsMEJBQTJCLEVBQUkseUJBQTBCLEVBQ3RFLEdBQUksRUFBSSxzQkFBd0IsT0FDNUIsTUFBTyxDQUFFLG9CQUFxQixFQUFJLG1CQUFvQixFQUMxRCxHQUFJLEVBQUksc0JBQXdCLE9BQzVCLE1BQU8sQ0FBRSxvQkFBcUIsRUFBSSxtQkFBb0IsRUFDMUQsR0FBSSxFQUFJLHdCQUEwQixPQUM5QixNQUFPLENBQUUsc0JBQXVCLEVBQUkscUJBQXNCLEVBQzlELEdBQUksRUFBSSxXQUFhLE9BQ2pCLE1BQU8sRUFBRyxFQUFJLFNBQVMsSUFBSyxTQUFVLEdBRXRDLHFDQUFtQyxJQUMzQyxJQUFNLElBQTBELENBQUMsS0FBUyxJQUNuRSxLQUNDLEVBQUksTUFBUSxDQUFFLEtBQU0sbUJBQW9CLENBQ2hELEdBQ1EsNERBQTBELHdCQ3JNbEUsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELDRDQUFrRCwwQkFBZ0MsNENBQWtELDBCQUE2QixPQUN6SyxJQUFNLFNBQ0EsUUFDQSxTQUNBLFFBQ0EsSUFBd0IsTUFBTyxFQUFPLElBQVksQ0FDcEQsSUFBUSxXQUFVLFdBQVcsUUFBUyxPQUFNLEtBQU0sR0FBYSxNQUFNLEVBQVEsU0FBUyxFQUNoRixFQUFjLEdBQWdCLElBQUssQ0FBQyxFQUFHLElBQTJCLENBQ3BFLGVBQWdCLEVBQU0sYUFBZSwyQkFDckMsT0FBUSxFQUFNLE1BQ2xCLENBQUMsRUFDRyxFQUFlLEdBQUcsR0FBVSxTQUFTLEdBQUcsRUFBSSxFQUFTLE1BQU0sRUFBRyxFQUFFLEVBQUksR0FBWSw0QkFDcEYsRUFBbUIsR0FBZ0IsYUFBYyxFQUFjLEVBQU8sVUFBVyxJQUFNLEVBQU0sUUFBUyxZQUFhLEVBQUssRUFDeEgsSUFBSSxFQUNKLEdBQUksRUFBTSxPQUFTLE9BQ2YsRUFBTyxFQUFNLEtBRWpCLE9BQU8sSUFBSSxJQUFnQixZQUFZLENBQ25DLFdBQ0EsV0FDQSxPQUNBLE9BQVEsT0FDUixVQUNBLEtBQU0sRUFDTixNQUNKLENBQUMsR0FFRywwQkFBd0IsSUFDaEMsSUFBTSxJQUEwQyxNQUFPLEVBQU8sSUFBWSxDQUN0RSxJQUFRLFdBQVUsV0FBVyxRQUFTLE9BQU0sS0FBTSxHQUFhLE1BQU0sRUFBUSxTQUFTLEVBQ2hGLEVBQWMsR0FBZ0IsSUFBSyxDQUFDLEVBQUcsSUFBMkIsQ0FDcEUsZUFBZ0IsRUFBTSxhQUFlLDJCQUNyQyx3QkFBeUIsRUFBTSxNQUNuQyxDQUFDLEVBQ0csRUFBZSxHQUFHLEdBQVUsU0FBUyxHQUFHLEVBQUksRUFBUyxNQUFNLEVBQUcsRUFBRSxFQUFJLEdBQVksaURBRXBGLEVBQW1CLEdBQWdCLGFBQWMsRUFBYyxFQUFPLFVBQVcsSUFBTSxFQUFNLFFBQVMsWUFBYSxFQUFLLEVBQ3hILElBQUksRUFDSixHQUFJLEVBQU0sT0FBUyxPQUNmLEVBQU8sRUFBTSxLQUVqQixPQUFPLElBQUksSUFBZ0IsWUFBWSxDQUNuQyxXQUNBLFdBQ0EsT0FDQSxPQUFRLE9BQ1IsVUFDQSxLQUFNLEVBQ04sTUFDSixDQUFDLEdBRUcsNENBQTBDLElBQ2xELElBQU0sSUFBd0IsTUFBTyxFQUFRLElBQVksQ0FDckQsR0FBSSxFQUFPLGFBQWUsS0FBTyxFQUFPLFlBQWMsSUFDbEQsT0FBTyxJQUEyQixFQUFRLENBQU8sRUFFckQsSUFBTSxFQUFlLEdBQWdCLElBQUssQ0FDdEMsVUFBVyxHQUFvQixDQUFNLEVBQ3JDLFlBQWEsRUFBRyxFQUFPLFFBQVEsZUFBZSxDQUNsRCxDQUFDLEVBQ0ssRUFBTyxNQUFVLEdBQWdCLFlBQWEsRUFBTyxLQUFNLENBQU8sRUFFeEUsT0FEQSxFQUFTLEtBQU8sRUFDVCxHQUVILDBCQUF3QixJQUNoQyxJQUFNLElBQTZCLE1BQU8sRUFBUSxJQUFZLENBQzFELElBQU0sRUFBZSxJQUNkLEVBQ0gsS0FBTSxNQUFNLElBQWUsRUFBTyxLQUFNLENBQU8sQ0FDbkQsRUFDTSxFQUFZLElBQXNCLEVBQVEsRUFBYSxJQUFJLEVBQ2pFLE9BQVEsT0FDQyw0QkFDQSxxREFDRCxNQUFNLE1BQU0sSUFBNEIsRUFBYyxDQUFPLE1BQzVELDhCQUNBLHVEQUNELE1BQU0sTUFBTSxJQUE4QixFQUFjLENBQU8sTUFDOUQsMEJBQ0EsbURBQ0QsTUFBTSxNQUFNLElBQTBCLEVBQWMsQ0FBTyxNQUMxRCw2QkFDQSxzREFDRCxNQUFNLE1BQU0sSUFBNkIsRUFBYyxDQUFPLE1BQzdELDRCQUNBLHFEQUNELE1BQU0sTUFBTSxJQUE0QixFQUFjLENBQU8sTUFDNUQsZ0NBQ0EseURBQ0QsTUFBTSxNQUFNLElBQWdDLEVBQWMsQ0FBTyxNQUNoRSxvQ0FDQSw2REFDRCxNQUFNLE1BQU0sSUFBb0MsRUFBYyxDQUFPLE1BQ3BFLDBCQUNBLG1EQUNELE1BQU0sTUFBTSxJQUEwQixFQUFjLENBQU8sTUFDMUQsMEJBQ0EsbURBQ0QsTUFBTSxNQUFNLElBQTBCLEVBQWMsQ0FBTyxVQUUzRCxJQUFNLEVBQWEsRUFBYSxLQUNoQyxPQUFPLElBQWtCLENBQ3JCLFNBQ0EsYUFDQSxXQUNKLENBQUMsSUFHUCxJQUEwQyxNQUFPLEVBQVEsSUFBWSxDQUN2RSxHQUFJLEVBQU8sYUFBZSxLQUFPLEVBQU8sWUFBYyxJQUNsRCxPQUFPLElBQTZDLEVBQVEsQ0FBTyxFQUV2RSxJQUFNLEVBQWUsR0FBZ0IsSUFBSyxDQUN0QyxVQUFXLEdBQW9CLENBQU0sRUFDckMsWUFBYSxFQUFHLEVBQU8sUUFBUSw4QkFBOEIsQ0FDakUsQ0FBQyxFQUNLLEVBQU8sRUFBTyxLQUVwQixPQURBLEVBQVMsS0FBTyxJQUFrQixFQUFNLENBQU8sRUFDeEMsR0FFSCw0Q0FBMEMsSUFDbEQsSUFBTSxJQUErQyxNQUFPLEVBQVEsSUFBWSxDQUM1RSxJQUFNLEVBQWUsSUFDZCxFQUNILEtBQU0sTUFBTSxJQUFlLEVBQU8sS0FBTSxDQUFPLENBQ25ELEVBQ00sRUFBWSxJQUFzQixFQUFRLEVBQWEsSUFBSSxFQUNqRSxPQUFRLE9BQ0MsNEJBQ0EscURBQ0QsTUFBTSxNQUFNLElBQTRCLEVBQWMsQ0FBTyxNQUM1RCw4QkFDQSx1REFDRCxNQUFNLE1BQU0sSUFBOEIsRUFBYyxDQUFPLE1BQzlELDBCQUNBLG1EQUNELE1BQU0sTUFBTSxJQUEwQixFQUFjLENBQU8sTUFDMUQsNkJBQ0Esc0RBQ0QsTUFBTSxNQUFNLElBQTZCLEVBQWMsQ0FBTyxNQUM3RCxnQ0FDQSx5REFDRCxNQUFNLE1BQU0sSUFBZ0MsRUFBYyxDQUFPLE1BQ2hFLDRCQUNBLHFEQUNELE1BQU0sTUFBTSxJQUE0QixFQUFjLENBQU8sTUFDNUQsZ0NBQ0EseURBQ0QsTUFBTSxNQUFNLElBQWdDLEVBQWMsQ0FBTyxNQUNoRSxvQ0FDQSw2REFDRCxNQUFNLE1BQU0sSUFBb0MsRUFBYyxDQUFPLE1BQ3BFLDBCQUNBLG1EQUNELE1BQU0sTUFBTSxJQUEwQixFQUFjLENBQU8sTUFDMUQsMEJBQ0EsbURBQ0QsTUFBTSxNQUFNLElBQTBCLEVBQWMsQ0FBTyxVQUUzRCxJQUFNLEVBQWEsRUFBYSxLQUNoQyxPQUFPLElBQWtCLENBQ3JCLFNBQ0EsYUFDQSxXQUNKLENBQUMsSUFHUCxJQUF3QixHQUFnQixrQkFBbUIsSUFBaUMsOEJBQThCLEVBQzFILElBQThCLE1BQU8sRUFBYyxJQUFZLENBQ2pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsUUFBUyxHQUFnQixZQUM3QixDQUFDLEVBQ0QsT0FBTyxPQUFPLEVBQVUsQ0FBRyxFQUMzQixJQUFNLEVBQVksSUFBSSxHQUFXLHNCQUFzQixDQUNuRCxVQUFXLEdBQW9CLENBQVksS0FDeEMsQ0FDUCxDQUFDLEVBQ0QsT0FBVyxHQUFnQix5QkFBMEIsRUFBVyxFQUFhLElBQUksR0FFL0UsSUFBZ0MsTUFBTyxFQUFjLElBQVksQ0FDbkUsSUFBTSxFQUFlLEdBQWdCLElBQUssQ0FBQyxDQUFDLEVBQ3RDLEVBQU8sRUFBYSxLQUNwQixFQUFVLEdBQWdCLEtBQU0sRUFBTSxDQUN4QyxRQUFTLEdBQWdCLFlBQzdCLENBQUMsRUFDRCxPQUFPLE9BQU8sRUFBVSxDQUFHLEVBQzNCLElBQU0sRUFBWSxJQUFJLEdBQVcsd0JBQXdCLENBQ3JELFVBQVcsR0FBb0IsQ0FBWSxLQUN4QyxDQUNQLENBQUMsRUFDRCxPQUFXLEdBQWdCLHlCQUEwQixFQUFXLEVBQWEsSUFBSSxHQUUvRSxJQUE0QixNQUFPLEVBQWMsSUFBWSxDQUMvRCxJQUFNLEVBQWUsR0FBZ0IsSUFBSyxDQUFDLENBQUMsRUFDdEMsRUFBTyxFQUFhLEtBQ3BCLEVBQVUsR0FBZ0IsS0FBTSxFQUFNLENBQ3hDLFFBQVMsR0FBZ0IsYUFDekIsbUJBQW9CLEdBQWdCLFlBQ3BDLGFBQWMsR0FBZ0IsWUFDbEMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyxvQkFBb0IsQ0FDakQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQStCLE1BQU8sRUFBYyxJQUFZLENBQ2xFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsUUFBUyxHQUFnQixZQUM3QixDQUFDLEVBQ0QsT0FBTyxPQUFPLEVBQVUsQ0FBRyxFQUMzQixJQUFNLEVBQVksSUFBSSxHQUFXLHVCQUF1QixDQUNwRCxVQUFXLEdBQW9CLENBQVksS0FDeEMsQ0FDUCxDQUFDLEVBQ0QsT0FBVyxHQUFnQix5QkFBMEIsRUFBVyxFQUFhLElBQUksR0FFL0UsSUFBa0MsTUFBTyxFQUFjLElBQVksQ0FDckUsSUFBTSxFQUFlLEdBQWdCLElBQUssQ0FBQyxDQUFDLEVBQ3RDLEVBQU8sRUFBYSxLQUNwQixFQUFVLEdBQWdCLEtBQU0sRUFBTSxDQUN4QyxRQUFTLEdBQWdCLGFBQ3pCLGdCQUFpQixHQUFnQixhQUNqQyxtQkFBb0IsR0FBZ0IsV0FDeEMsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVywwQkFBMEIsQ0FDdkQsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQThCLE1BQU8sRUFBYyxJQUFZLENBQ2pFLElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsUUFBUyxHQUFnQixZQUM3QixDQUFDLEVBQ0QsT0FBTyxPQUFPLEVBQVUsQ0FBRyxFQUMzQixJQUFNLEVBQVksSUFBSSxHQUFXLHNCQUFzQixDQUNuRCxVQUFXLEdBQW9CLENBQVksS0FDeEMsQ0FDUCxDQUFDLEVBQ0QsT0FBVyxHQUFnQix5QkFBMEIsRUFBVyxFQUFhLElBQUksR0FFL0UsSUFBa0MsTUFBTyxFQUFjLElBQVksQ0FDckUsSUFBTSxFQUFlLEdBQWdCLElBQUssQ0FBQyxDQUFDLEVBQ3RDLEVBQU8sRUFBYSxLQUNwQixFQUFVLEdBQWdCLEtBQU0sRUFBTSxDQUN4QyxRQUFTLEdBQWdCLFlBQzdCLENBQUMsRUFDRCxPQUFPLE9BQU8sRUFBVSxDQUFHLEVBQzNCLElBQU0sRUFBWSxJQUFJLEdBQVcsMEJBQTBCLENBQ3ZELFVBQVcsR0FBb0IsQ0FBWSxLQUN4QyxDQUNQLENBQUMsRUFDRCxPQUFXLEdBQWdCLHlCQUEwQixFQUFXLEVBQWEsSUFBSSxHQUUvRSxJQUFzQyxNQUFPLEVBQWMsSUFBWSxDQUN6RSxJQUFNLEVBQWUsR0FBZ0IsSUFBSyxDQUFDLENBQUMsRUFDdEMsRUFBTyxFQUFhLEtBQ3BCLEVBQVUsR0FBZ0IsS0FBTSxFQUFNLENBQ3hDLFFBQVMsR0FBZ0IsWUFDN0IsQ0FBQyxFQUNELE9BQU8sT0FBTyxFQUFVLENBQUcsRUFDM0IsSUFBTSxFQUFZLElBQUksR0FBVyw4QkFBOEIsQ0FDM0QsVUFBVyxHQUFvQixDQUFZLEtBQ3hDLENBQ1AsQ0FBQyxFQUNELE9BQVcsR0FBZ0IseUJBQTBCLEVBQVcsRUFBYSxJQUFJLEdBRS9FLElBQTRCLE1BQU8sRUFBYyxJQUFZLENBQy9ELElBQU0sRUFBZSxHQUFnQixJQUFLLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEVBQWEsS0FDcEIsRUFBVSxHQUFnQixLQUFNLEVBQU0sQ0FDeEMsUUFBUyxHQUFnQixZQUM3QixDQUFDLEVBQ0QsT0FBTyxPQUFPLEVBQVUsQ0FBRyxFQUMzQixJQUFNLEVBQVksSUFBSSxHQUFXLG9CQUFvQixDQUNqRCxVQUFXLEdBQW9CLENBQVksS0FDeEMsQ0FDUCxDQUFDLEVBQ0QsT0FBVyxHQUFnQix5QkFBMEIsRUFBVyxFQUFhLElBQUksR0FFL0UsSUFBNEIsTUFBTyxFQUFjLElBQVksQ0FDL0QsSUFBTSxFQUFlLEdBQWdCLElBQUssQ0FBQyxDQUFDLEVBQ3RDLEVBQU8sRUFBYSxLQUNwQixFQUFVLEdBQWdCLEtBQU0sRUFBTSxDQUN4QyxRQUFTLEdBQWdCLFlBQzdCLENBQUMsRUFDRCxPQUFPLE9BQU8sRUFBVSxDQUFHLEVBQzNCLElBQU0sRUFBWSxJQUFJLEdBQVcsb0JBQW9CLENBQ2pELFVBQVcsR0FBb0IsQ0FBWSxLQUN4QyxDQUNQLENBQUMsRUFDRCxPQUFXLEdBQWdCLHlCQUEwQixFQUFXLEVBQWEsSUFBSSxHQUUvRSxJQUFvQixDQUFDLEVBQVEsSUFBWSxDQUMzQyxPQUFPLEVBQVEsc0JBQXNCLFlBQVksRUFBUSxNQUFPLElBQVUsQ0FDdEUsR0FBSSxFQUFNLE9BQVksS0FDbEIsTUFBTyxDQUNILE1BQU8sTUFBTSxJQUFxQixFQUFNLE1BQVUsQ0FBTyxDQUM3RCxFQUVKLEdBQUksRUFBTSx5QkFBOEIsS0FDcEMsTUFBTyxDQUNILHdCQUF5QixNQUFNLElBQWlDLEVBQU0sd0JBQTRCLENBQU8sQ0FDN0csRUFFSixHQUFJLEVBQU0sMkJBQWdDLEtBQ3RDLE1BQU8sQ0FDSCwwQkFBMkIsTUFBTSxJQUFtQyxFQUFNLDBCQUE4QixDQUFPLENBQ25ILEVBRUosR0FBSSxFQUFNLHFCQUEwQixLQUNoQyxNQUFPLENBQ0gsb0JBQXFCLE1BQU0sSUFBNkIsRUFBTSxvQkFBd0IsQ0FBTyxDQUNqRyxFQUVKLEdBQUksRUFBTSxxQkFBMEIsS0FDaEMsTUFBTyxDQUNILG9CQUFxQixNQUFNLElBQTZCLEVBQU0sb0JBQXdCLENBQU8sQ0FDakcsRUFFSixHQUFJLEVBQU0sdUJBQTRCLEtBQ2xDLE1BQU8sQ0FDSCxzQkFBdUIsTUFBTSxJQUErQixFQUFNLHNCQUEwQixDQUFPLENBQ3ZHLEVBRUosTUFBTyxDQUFFLFNBQVUsQ0FBTyxFQUM3QixHQUVDLElBQW1DLE1BQU8sRUFBUSxJQUFZLENBQ2hFLElBQU0sRUFBZSxJQUNkLEVBQ0gsS0FBTSxNQUFNLEdBQVUsRUFBTyxLQUFNLENBQU8sQ0FDOUMsRUFDQSxPQUFPLElBQThCLEVBQWMsQ0FBTyxHQUV4RCxJQUFxQyxNQUFPLEVBQVEsSUFBWSxDQUNsRSxJQUFNLEVBQWUsSUFDZCxFQUNILEtBQU0sTUFBTSxHQUFVLEVBQU8sS0FBTSxDQUFPLENBQzlDLEVBQ0EsT0FBTyxJQUFnQyxFQUFjLENBQU8sR0FFMUQsSUFBaUMsTUFBTyxFQUFRLElBQVksQ0FDOUQsSUFBTSxFQUFlLElBQ2QsRUFDSCxLQUFNLE1BQU0sR0FBVSxFQUFPLEtBQU0sQ0FBTyxDQUM5QyxFQUNBLE9BQU8sSUFBNEIsRUFBYyxDQUFPLEdBRXRELElBQXVCLE1BQU8sRUFBUSxJQUFZLENBQ3BELElBQU0sRUFBVyxDQUFDLEVBQ1osRUFBTyxNQUFNLEdBQVUsRUFBTyxLQUFNLENBQU8sRUFFakQsT0FEQSxPQUFPLE9BQU8sRUFBVSxJQUFlLEVBQU0sQ0FBTyxDQUFDLEVBQzlDLEdBRUwsSUFBK0IsTUFBTyxFQUFRLElBQVksQ0FDNUQsSUFBTSxFQUFlLElBQ2QsRUFDSCxLQUFNLE1BQU0sR0FBVSxFQUFPLEtBQU0sQ0FBTyxDQUM5QyxFQUNBLE9BQU8sSUFBMEIsRUFBYyxDQUFPLEdBRXBELElBQStCLE1BQU8sRUFBUSxJQUFZLENBQzVELElBQU0sRUFBZSxJQUNkLEVBQ0gsS0FBTSxNQUFNLEdBQVUsRUFBTyxLQUFNLENBQU8sQ0FDOUMsRUFDQSxPQUFPLElBQTBCLEVBQWMsQ0FBTyxHQUVwRCxJQUFpQixDQUFDLEVBQVEsSUFBWSxDQUN4QyxPQUFXLEdBQWdCLEtBQU0sRUFBUSxDQUNyQyxNQUFPLEVBQVEsYUFDbkIsQ0FBQyxHQUVDLEdBQXNCLENBQUMsS0FBWSxDQUNyQyxlQUFnQixFQUFPLFdBQ3ZCLFVBQVcsRUFBTyxRQUFRLHFCQUF1QixFQUFPLFFBQVEsc0JBQXdCLEVBQU8sUUFBUSxvQkFDdkcsa0JBQW1CLEVBQU8sUUFBUSxjQUNsQyxLQUFNLEVBQU8sUUFBUSxjQUN6QixHQUNNLElBQW9CLENBQUMsRUFBWSxJQUFnQixHQUFnQixZQUFhLEVBQVksQ0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFTLEVBQVEsWUFBWSxDQUFJLENBQUMsRUFDM0ksSUFBNEIsQ0FBQyxJQUFVLElBQVUsUUFDbkQsSUFBVSxNQUNWLElBQVUsTUFDUixPQUFPLG9CQUFvQixDQUFLLEVBQUUsU0FBUyxRQUFRLEdBQUssRUFBTSxRQUFVLE1BQ3hFLE9BQU8sb0JBQW9CLENBQUssRUFBRSxTQUFTLE1BQU0sR0FBSyxFQUFNLE1BQVEsR0FDcEUsR0FBWSxDQUFDLEVBQVksSUFBWSxJQUFrQixFQUFZLENBQU8sRUFBRSxLQUFLLENBQUMsSUFBWSxDQUNoRyxHQUFJLEVBQVEsT0FDUixPQUFPLEtBQUssTUFBTSxDQUFPLEVBRTdCLE1BQU8sQ0FBQyxFQUNYLEVBQ0ssSUFBaUIsTUFBTyxFQUFXLElBQVksQ0FDakQsSUFBTSxFQUFRLE1BQU0sR0FBVSxFQUFXLENBQU8sRUFFaEQsT0FEQSxFQUFNLFFBQVUsRUFBTSxTQUFXLEVBQU0sUUFDaEMsR0FFTCxJQUF3QixDQUFDLEVBQVEsSUFBUyxDQUM1QyxJQUFNLEVBQVUsQ0FBQyxFQUFRLElBQVEsT0FBTyxLQUFLLENBQU0sRUFBRSxLQUFLLENBQUMsSUFBTSxFQUFFLFlBQVksSUFBTSxFQUFJLFlBQVksQ0FBQyxFQUNoRyxFQUFvQixDQUFDLElBQWEsQ0FDcEMsSUFBSSxFQUFhLEVBQ2pCLEdBQUksT0FBTyxJQUFlLFNBQ3RCLEVBQWEsRUFBVyxTQUFTLEVBRXJDLEdBQUksRUFBVyxRQUFRLEdBQUcsR0FBSyxFQUMzQixFQUFhLEVBQVcsTUFBTSxHQUFHLEVBQUUsR0FFdkMsR0FBSSxFQUFXLFFBQVEsR0FBRyxHQUFLLEVBQzNCLEVBQWEsRUFBVyxNQUFNLEdBQUcsRUFBRSxHQUV2QyxHQUFJLEVBQVcsUUFBUSxHQUFHLEdBQUssRUFDM0IsRUFBYSxFQUFXLE1BQU0sR0FBRyxFQUFFLEdBRXZDLE9BQU8sR0FFTCxFQUFZLEVBQVEsRUFBTyxRQUFTLGtCQUFrQixFQUM1RCxHQUFJLElBQWMsT0FDZCxPQUFPLEVBQWtCLEVBQU8sUUFBUSxFQUFVLEVBRXRELEdBQUksRUFBSyxPQUFTLE9BQ2QsT0FBTyxFQUFrQixFQUFLLElBQUksRUFFdEMsR0FBSSxFQUFLLFNBQWMsT0FDbkIsT0FBTyxFQUFrQixFQUFLLE1BQVMsdUJDamIvQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsdUJBQTZCLGFBQWdCLE9BQ3JELElBQU0sU0FDQSxTQUNBLFNBQ04sT0FBTyxlQUFlLElBQVMsV0FBWSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZ0IsUUFBVyxDQUFDLEVBQ3JILElBQU0sU0FDQSxTQUNBLFVBQ04sTUFBTSxZQUEyQixJQUFnQixPQUFRLE9BQzlDLGlDQUFnQyxFQUFHLENBQ3RDLE1BQU8sQ0FDSCxRQUFTLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxpQkFBa0IsRUFDMUQsU0FBVSxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sVUFBVyxFQUNwRCxPQUFRLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxRQUFTLEVBQ2hELGFBQWMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLHNCQUF1QixDQUN4RSxFQUVKLFdBQVcsQ0FBQyxFQUFPLENBQ2YsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUVqQixpQkFBaUIsQ0FBQyxFQUFhLEVBQWUsRUFBUyxDQUNuRCxLQUFLLGdCQUFnQixJQUFRLElBQW1CLGVBQWdCLEVBQWUsS0FBSyxVQUFXLEtBQUssV0FBVyxDQUFDLEVBQ2hILEtBQUssZ0JBQWdCLElBQVEsSUFBc0Isa0JBQW1CLEVBQWUsSUFBbUIsaUNBQWlDLENBQUMsQ0FBQyxFQUMzSSxJQUFNLEVBQVEsRUFBWSxPQUFPLEtBQUssZUFBZSxHQUM3QyxVQUFXLEVBR2IsRUFBMEIsQ0FDNUIsU0FDQSxXQUplLHVCQUtmLFlBSmdCLHFCQUtoQix3QkFBeUIsSUFBVyxxQ0FDcEMseUJBQTBCLElBQVcsdUNBQ3BDLElBQVEsb0JBQXFCLENBQzFCLFFBQVMsK0JBQ1QsVUFBVyxhQUNmLENBQ0osR0FDUSxrQkFBbUIsRUFDM0IsT0FBTyxFQUFNLFFBQVEsQ0FBQyxJQUFZLEVBQWUsT0FBTyxFQUFRLFFBQVMsR0FBVyxDQUFDLENBQUMsRUFBRyxDQUF1QixFQUVwSCxTQUFTLENBQUMsRUFBTyxFQUFTLENBQ3RCLE9BQVcsSUFBZ0Isc0JBQXVCLEVBQU8sQ0FBTyxFQUVwRSxXQUFXLENBQUMsRUFBUSxFQUFTLENBQ3pCLE9BQVcsSUFBZ0Isc0JBQXVCLEVBQVEsQ0FBTyxFQUV6RSxDQUNRLHVCQUFxQix3QkNsRDdCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCx5Q0FBK0MsYUFBZ0IsT0FDdkUsSUFBTSxTQUNBLFNBQ0EsU0FDTixPQUFPLGVBQWUsSUFBUyxXQUFZLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFnQixRQUFXLENBQUMsRUFDckgsSUFBTSxTQUNBLFNBQ0EsVUFDTixNQUFNLFlBQTZDLElBQWdCLE9BQVEsT0FDaEUsaUNBQWdDLEVBQUcsQ0FDdEMsTUFBTyxDQUNILFFBQVMsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLGlCQUFrQixFQUMxRCxTQUFVLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxVQUFXLEVBQ3BELE9BQVEsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFFBQVMsRUFDaEQsYUFBYyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sc0JBQXVCLENBQ3hFLEVBRUosV0FBVyxDQUFDLEVBQU8sQ0FDZixNQUFNLEVBQ04sS0FBSyxNQUFRLEVBRWpCLGlCQUFpQixDQUFDLEVBQWEsRUFBZSxFQUFTLENBQ25ELEtBQUssZ0JBQWdCLElBQVEsSUFBbUIsZUFBZ0IsRUFBZSxLQUFLLFVBQVcsS0FBSyxXQUFXLENBQUMsRUFDaEgsS0FBSyxnQkFBZ0IsSUFBUSxJQUFzQixrQkFBbUIsRUFBZSxJQUFxQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQzdKLElBQU0sRUFBUSxFQUFZLE9BQU8sS0FBSyxlQUFlLEdBQzdDLFVBQVcsRUFHYixFQUEwQixDQUM1QixTQUNBLFdBSmUsdUJBS2YsWUFKZ0IsdUNBS2hCLHdCQUF5QixJQUFXLHVEQUNwQyx5QkFBMEIsSUFBVyx5REFDcEMsSUFBUSxvQkFBcUIsQ0FDMUIsUUFBUywrQkFDVCxVQUFXLCtCQUNmLENBQ0osR0FDUSxrQkFBbUIsRUFDM0IsT0FBTyxFQUFNLFFBQVEsQ0FBQyxJQUFZLEVBQWUsT0FBTyxFQUFRLFFBQVMsR0FBVyxDQUFDLENBQUMsRUFBRyxDQUF1QixFQUVwSCxTQUFTLENBQUMsRUFBTyxFQUFTLENBQ3RCLE9BQVcsSUFBZ0Isd0NBQXlDLEVBQU8sQ0FBTyxFQUV0RixXQUFXLENBQUMsRUFBUSxFQUFTLENBQ3pCLE9BQVcsSUFBZ0Isd0NBQXlDLEVBQVEsQ0FBTyxFQUUzRixDQUNRLHlDQUF1Qyx3QkNsRC9DLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxtQkFBc0IsT0FDOUIsSUFBTSxTQUNBLFVBQ0EsVUFDQSxVQUNBLElBQVcsQ0FDYixtQkFBb0IsSUFBcUIsbUJBQ3pDLHFDQUFzQyxJQUF1QyxvQ0FDakYsRUFDQSxNQUFNLFlBQXVCLElBQXVCLG9CQUFxQixDQUN6RSxDQUNRLG1CQUFpQixJQUNyQixJQUFnQix1QkFBd0IsSUFBVSxHQUFjLHFCQ2JwRSxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxTQUNOLElBQVEsbUJBQThDLEVBQU8sRUFDN0QsSUFBUSxtQkFBZ0UsRUFBTyxzQkNIL0UsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sU0FDTixJQUFRLGtCQUFvQyxHQUFPLHFCQ0ZuRCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0NBQXNDLE9BQzlDLElBQU0sUUFDTixHQUFRLG1CQUFnRCxFQUFPLEVBQy9ELEdBQVEsbUJBQTBDLEVBQU8sRUFDekQsR0FBUSxtQkFBb0MsRUFBTyxFQUNuRCxHQUFRLG1CQUFrQyxFQUFPLEVBQ2pELElBQUksU0FDSixPQUFPLGVBQWUsR0FBUyxpQ0FBa0MsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWlDLCtCQUFrQyxDQUFDLDBCQ1BuTCxJQUFJLEdBQVMsT0FBTyxVQUFVLGVBQzFCLElBQVEsT0FBTyxVQUFVLFNBQ3pCLElBQWlCLE9BQU8sZUFDeEIsSUFBTyxPQUFPLHlCQUVkLElBQVUsU0FBUyxDQUFPLENBQUMsRUFBSyxDQUNuQyxHQUFJLE9BQU8sTUFBTSxVQUFZLFdBQzVCLE9BQU8sTUFBTSxRQUFRLENBQUcsRUFHekIsT0FBTyxJQUFNLEtBQUssQ0FBRyxJQUFNLGtCQUd4QixJQUFnQixTQUFTLENBQWEsQ0FBQyxFQUFLLENBQy9DLElBQUssR0FBTyxJQUFNLEtBQUssQ0FBRyxJQUFNLGtCQUMvQixNQUFPLEdBR1IsSUFBSSxFQUFvQixHQUFPLEtBQUssRUFBSyxhQUFhLEVBQ2xELEVBQW1CLEVBQUksYUFBZSxFQUFJLFlBQVksV0FBYSxHQUFPLEtBQUssRUFBSSxZQUFZLFVBQVcsZUFBZSxFQUU3SCxHQUFJLEVBQUksY0FBZ0IsSUFBc0IsRUFDN0MsTUFBTyxHQUtSLElBQUksRUFDSixJQUFLLEtBQU8sRUFBSyxDQUVqQixPQUFPLE9BQU8sSUFBUSxhQUFlLEdBQU8sS0FBSyxFQUFLLENBQUcsR0FJdEQsSUFBYyxTQUFTLENBQVcsQ0FBQyxFQUFRLEVBQVMsQ0FDdkQsR0FBSSxLQUFrQixFQUFRLE9BQVMsWUFDdEMsSUFBZSxFQUFRLEVBQVEsS0FBTSxDQUNwQyxXQUFZLEdBQ1osYUFBYyxHQUNkLE1BQU8sRUFBUSxTQUNmLFNBQVUsRUFDWCxDQUFDLEVBRUQsT0FBTyxFQUFRLE1BQVEsRUFBUSxVQUs3QixJQUFjLFNBQVMsQ0FBVyxDQUFDLEVBQUssRUFBTSxDQUNqRCxHQUFJLElBQVMsYUFDWixJQUFLLEdBQU8sS0FBSyxFQUFLLENBQUksRUFDekIsT0FDTSxRQUFJLElBR1YsT0FBTyxJQUFLLEVBQUssQ0FBSSxFQUFFLE1BSXpCLE9BQU8sRUFBSSxJQUdaLElBQU8sUUFBVSxTQUFTLENBQU0sRUFBRyxDQUNsQyxJQUFJLEVBQVMsRUFBTSxFQUFLLEVBQU0sRUFBYSxFQUN2QyxFQUFTLFVBQVUsR0FDbkIsRUFBSSxFQUNKLEVBQVMsVUFBVSxPQUNuQixFQUFPLEdBR1gsR0FBSSxPQUFPLElBQVcsVUFDckIsRUFBTyxFQUNQLEVBQVMsVUFBVSxJQUFNLENBQUMsRUFFMUIsRUFBSSxFQUVMLEdBQUksR0FBVSxNQUFTLE9BQU8sSUFBVyxVQUFZLE9BQU8sSUFBVyxXQUN0RSxFQUFTLENBQUMsRUFHWCxLQUFPLEVBQUksSUFBVSxFQUdwQixHQUZBLEVBQVUsVUFBVSxHQUVoQixHQUFXLE1BRWQsSUFBSyxLQUFRLEVBS1osR0FKQSxFQUFNLElBQVksRUFBUSxDQUFJLEVBQzlCLEVBQU8sSUFBWSxFQUFTLENBQUksRUFHNUIsSUFBVyxHQUVkLEdBQUksR0FBUSxJQUFTLElBQWMsQ0FBSSxJQUFNLEVBQWMsSUFBUSxDQUFJLElBQUssQ0FDM0UsR0FBSSxFQUNILEVBQWMsR0FDZCxFQUFRLEdBQU8sSUFBUSxDQUFHLEVBQUksRUFBTSxDQUFDLEVBRXJDLE9BQVEsR0FBTyxJQUFjLENBQUcsRUFBSSxFQUFNLENBQUMsRUFJNUMsSUFBWSxFQUFRLENBQUUsS0FBTSxFQUFNLFNBQVUsRUFBTyxFQUFNLEVBQU8sQ0FBSSxDQUFFLENBQUMsRUFHakUsUUFBSSxPQUFPLElBQVMsWUFDMUIsSUFBWSxFQUFRLENBQUUsS0FBTSxFQUFNLFNBQVUsQ0FBSyxDQUFDLEdBUXZELE9BQU8sMkJDakhSLElBQU0sR0FBVyxLQUNoQixJQUFXLE1BQ1gsT0FBTyxJQUFXLFVBQ2xCLE9BQU8sRUFBTyxPQUFTLFdBRXhCLEdBQVMsU0FBVyxLQUNuQixHQUFTLENBQU0sR0FDZixFQUFPLFdBQWEsSUFDcEIsT0FBTyxFQUFPLFNBQVcsWUFDekIsT0FBTyxFQUFPLGlCQUFtQixTQUVsQyxHQUFTLFNBQVcsS0FDbkIsR0FBUyxDQUFNLEdBQ2YsRUFBTyxXQUFhLElBQ3BCLE9BQU8sRUFBTyxRQUFVLFlBQ3hCLE9BQU8sRUFBTyxpQkFBbUIsU0FFbEMsR0FBUyxPQUFTLEtBQ2pCLEdBQVMsU0FBUyxDQUFNLEdBQ3hCLEdBQVMsU0FBUyxDQUFNLEVBRXpCLEdBQVMsVUFBWSxLQUNwQixHQUFTLE9BQU8sQ0FBTSxHQUN0QixPQUFPLEVBQU8sYUFBZSxXQUU5QixJQUFPLFFBQVUsZ25FQ2RqQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsUUFBVyxPQUNYLGlDQ0ZSLElBQUksSUFBbUIsSUFBUSxHQUFLLGlCQUFvQixRQUFTLENBQUMsRUFBSyxDQUNuRSxPQUFRLEdBQU8sRUFBSSxXQUFjLEVBQU0sQ0FBRSxRQUFXLENBQUksR0FFeEQsSUFDSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxZQUFjLEdBQVEsb0JBQTJCLE9BQ3pELEdBQVEscUJBQXVCLElBQy9CLElBQU0sY0FDQSxVQUNBLElBQVcsU0FBaUMsRUFNbEQsR0FBUSxvQkFBc0IsT0FBTyxJQUFJLEdBQUcsSUFBTyxJQUFJLG1CQUFtQixFQUUxRSxNQUFNLFlBQW9CLEtBQU0sU0FPbkIsSUFBSyxHQUFRLG9CQUFxQixPQUFPLGFBQWEsQ0FBQyxFQUFVLENBQ3RFLEdBQUksR0FDQSxPQUFPLElBQWEsVUFDcEIsR0FBUSx1QkFBdUIsR0FDL0IsRUFBUyxHQUFRLHVCQUF5QixJQUFPLElBQUksUUFDckQsTUFBTyxHQUdYLE9BQU8sU0FBUyxVQUFVLE9BQU8sYUFBYSxLQUFLLElBQWEsQ0FBUSxFQUU1RSxXQUFXLENBQUMsRUFBUyxFQUFRLEVBQVUsRUFBTyxDQUMxQyxJQUFJLEVBQ0osTUFBTSxDQUFPLEVBaUJiLEdBaEJBLEtBQUssT0FBUyxFQUNkLEtBQUssU0FBVyxFQUNoQixLQUFLLE1BQVEsRUFVYixLQUFLLEtBQU0sSUFBTyxJQUFJLFFBR3RCLEtBQUssT0FBYSxJQUFTLFFBQVMsR0FBTSxDQUFDLEVBQUcsQ0FBTSxFQUNoRCxLQUFLLFNBQ0wsS0FBSyxTQUFTLE9BQWEsSUFBUyxRQUFTLEdBQU0sQ0FBQyxFQUFHLEtBQUssU0FBUyxNQUFNLEVBRS9FLEdBQUksS0FBSyxTQUFVLENBQ2YsR0FBSSxDQUNBLEtBQUssU0FBUyxLQUFPLElBQWMsS0FBSyxPQUFPLGNBQWUsRUFBSyxLQUFLLFlBQWMsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLElBQUksRUFFbEksTUFBTyxFQUFJLEVBS1gsS0FBSyxPQUFTLEtBQUssU0FBUyxPQUVoQyxHQUFJLEdBQVMsU0FBVSxHQUFTLEVBQU0sS0FDbEMsS0FBSyxLQUFPLEVBQU0sS0FFdEIsR0FBSSxFQUFPLGNBQ1AsRUFBTyxjQUFjLENBQ2pCLE9BQVEsS0FBSyxPQUNiLFNBQVUsS0FBSyxRQUNuQixDQUFDLEVBR2IsQ0FDQSxHQUFRLFlBQWMsSUFDdEIsU0FBUyxHQUFhLENBQUMsRUFBYyxFQUFNLENBQ3ZDLE9BQVEsT0FDQyxTQUNELE9BQU8sTUFDTixPQUNELE9BQU8sS0FBSyxNQUFNLEtBQUssVUFBVSxDQUFJLENBQUMsTUFDckMsY0FDRCxPQUFPLEtBQUssTUFBTSxPQUFPLEtBQUssQ0FBSSxFQUFFLFNBQVMsTUFBTSxDQUFDLE1BQ25ELE9BQ0QsT0FBTyxLQUFLLE1BQU0sRUFBSyxLQUFLLENBQUMsVUFFN0IsT0FBTyxHQVduQixTQUFTLEdBQW9CLENBQUMsRUFBTSxDQUVoQyxTQUFTLENBQWEsQ0FBQyxFQUFTLENBQzVCLElBQUssRUFDRCxPQUNKLFFBQVcsS0FBTyxPQUFPLEtBQUssQ0FBTyxFQUFHLENBRXBDLEdBQUksb0JBQW9CLEtBQUssQ0FBRyxFQUM1QixFQUFRLEdBUEwsMkVBVVAsR0FBSSxtQkFBbUIsS0FBSyxDQUFHLEVBQzNCLEVBQVEsR0FYTCwyRUFjUCxHQUFJLFVBQVUsS0FBSyxDQUFHLEVBQ2xCLEVBQVEsR0FmTCw0RUFtQmYsU0FBUyxDQUFZLENBQUMsRUFBSyxFQUFLLENBQzVCLEdBQUksT0FBTyxJQUFRLFVBQ2YsSUFBUSxNQUNSLE9BQU8sRUFBSSxLQUFTLFNBQVUsQ0FDOUIsSUFBTSxFQUFPLEVBQUksR0FDakIsR0FBSSxlQUFlLEtBQUssQ0FBSSxHQUN4QixjQUFjLEtBQUssQ0FBSSxHQUN2QixVQUFVLEtBQUssQ0FBSSxFQUNuQixFQUFJLEdBM0JELDRFQStCZixTQUFTLENBQVksQ0FBQyxFQUFLLENBQ3ZCLEdBQUksT0FBTyxJQUFRLFVBQVksSUFBUSxLQUFNLENBQ3pDLEdBQUksZUFBZ0IsRUFDaEIsRUFBSSxXQWxDRCwyRUFvQ1AsR0FBSSxjQUFlLEVBQ2YsRUFBSSxVQXJDRCwyRUF1Q1AsR0FBSSxrQkFBbUIsRUFDbkIsRUFBSSxjQXhDRCw0RUE0Q2YsR0FBSSxFQUFLLE9BQVEsQ0FDYixFQUFjLEVBQUssT0FBTyxPQUFPLEVBQ2pDLEVBQWEsRUFBSyxPQUFRLE1BQU0sRUFDaEMsRUFBYSxFQUFLLE9BQU8sSUFBSSxFQUM3QixFQUFhLEVBQUssT0FBUSxNQUFNLEVBQ2hDLEVBQWEsRUFBSyxPQUFPLElBQUksRUFDN0IsR0FBSSxDQUNBLElBQU0sRUFBTSxJQUFJLElBQU0sSUFBSSxHQUFJLEVBQUssT0FBTyxHQUFHLEVBQzdDLEdBQUksRUFBSSxhQUFhLElBQUksT0FBTyxFQUM1QixFQUFJLGFBQWEsSUFBSSxRQXJEbEIsMEVBcURpQyxFQUV4QyxHQUFJLEVBQUksYUFBYSxJQUFJLGVBQWUsRUFDcEMsRUFBSSxhQUFhLElBQUksZ0JBeERsQiwwRUF3RHlDLEVBRWhELEVBQUssT0FBTyxJQUFNLEVBQUksU0FBUyxFQUVuQyxNQUFPLEVBQUksR0FJZixHQUFJLEVBQUssU0FDTCxJQUFxQixDQUFFLE9BQVEsRUFBSyxTQUFTLE1BQU8sQ0FBQyxFQUNyRCxFQUFjLEVBQUssU0FBUyxPQUFPLEVBQ25DLEVBQWEsRUFBSyxTQUFVLE1BQU0sRUFDbEMsRUFBYSxFQUFLLFNBQVMsSUFBSSxFQUVuQyxPQUFPLHVCQzVLWCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsbUJBQWlCLElBQ3pCLGVBQWUsR0FBYyxDQUFDLEVBQUssQ0FDL0IsSUFBSSxFQUFTLElBQVUsQ0FBRyxFQUMxQixJQUFLLElBQVEsRUFBSSxTQUFZLElBQVcsRUFBSSxPQUFPLE1BQy9DLE1BQU8sQ0FBRSxZQUFhLEVBQU0sRUFFaEMsRUFBUyxHQUFVLENBQUMsRUFDcEIsRUFBTyxvQkFBc0IsRUFBTyxxQkFBdUIsRUFDM0QsRUFBTyxNQUNILEVBQU8sUUFBVSxRQUFhLEVBQU8sUUFBVSxLQUFPLEVBQUksRUFBTyxNQUNyRSxFQUFPLG1CQUFxQixFQUFPLG9CQUFzQixDQUNyRCxNQUNBLE9BQ0EsTUFDQSxVQUNBLFFBQ0osRUFDQSxFQUFPLGtCQUNILEVBQU8sb0JBQXNCLFFBQWEsRUFBTyxvQkFBc0IsS0FDakUsRUFDQSxFQUFPLGtCQUNqQixFQUFPLHFCQUF1QixFQUFPLHFCQUMvQixFQUFPLHFCQUNQLEVBQ04sRUFBTyxtQkFBcUIsRUFBTyxtQkFDN0IsRUFBTyxtQkFDUCxLQUFLLElBQUksRUFDZixFQUFPLGFBQWUsRUFBTyxhQUN2QixFQUFPLGFBQ1AsT0FBTyxpQkFDYixFQUFPLGNBQWdCLEVBQU8sY0FDeEIsRUFBTyxjQUNQLE9BQU8saUJBR2IsSUFBTSxFQUFjLENBU2hCLENBQUMsSUFBSyxHQUFHLEVBQ1QsQ0FBQyxJQUFLLEdBQUcsRUFDVCxDQUFDLElBQUssR0FBRyxFQUNULENBQUMsSUFBSyxHQUFHLENBQ2IsRUFNQSxHQUxBLEVBQU8sbUJBQXFCLEVBQU8sb0JBQXNCLEVBRXpELEVBQUksT0FBTyxZQUFjLEdBR25CLE1BRGdCLEVBQU8sYUFBZSxLQUNsQixDQUFHLEVBQ3pCLE1BQU8sQ0FBRSxZQUFhLEdBQU8sT0FBUSxFQUFJLE1BQU8sRUFFcEQsSUFBTSxFQUFRLElBQWtCLENBQU0sRUFFdEMsRUFBSSxPQUFPLFlBQVkscUJBQXVCLEVBRTlDLElBQU0sRUFBVSxFQUFPLGFBQ2pCLEVBQU8sYUFBYSxFQUFLLENBQUssRUFDOUIsSUFBSSxRQUFRLEtBQVcsQ0FDckIsV0FBVyxFQUFTLENBQUssRUFDNUIsRUFFTCxHQUFJLEVBQU8sZUFDUCxFQUFPLGVBQWUsQ0FBRyxFQUk3QixPQURBLE1BQU0sRUFDQyxDQUFFLFlBQWEsR0FBTSxPQUFRLEVBQUksTUFBTyxFQU1uRCxTQUFTLEdBQWtCLENBQUMsRUFBSyxDQUM3QixJQUFJLEVBQ0osSUFBTSxFQUFTLElBQVUsQ0FBRyxFQUc1QixHQUFJLEVBQUksT0FBUyxnQkFBa0IsRUFBSyxFQUFJLFNBQVcsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFFBQVUsYUFDakcsTUFBTyxHQUdYLElBQUssR0FBVSxFQUFPLFFBQVUsRUFDNUIsTUFBTyxHQUdYLElBQUssRUFBSSxXQUNKLEVBQU8scUJBQXVCLElBQU0sRUFBTyxrQkFDNUMsTUFBTyxHQUdYLElBQUssRUFBSSxPQUFPLFFBQ1osRUFBTyxtQkFBbUIsUUFBUSxFQUFJLE9BQU8sT0FBTyxZQUFZLENBQUMsRUFBSSxFQUNyRSxNQUFPLEdBSVgsR0FBSSxFQUFJLFVBQVksRUFBSSxTQUFTLE9BQVEsQ0FDckMsSUFBSSxFQUFZLEdBQ2hCLFFBQVksRUFBSyxLQUFRLEVBQU8sbUJBQW9CLENBQ2hELElBQU0sRUFBUyxFQUFJLFNBQVMsT0FDNUIsR0FBSSxHQUFVLEdBQU8sR0FBVSxFQUFLLENBQ2hDLEVBQVksR0FDWixPQUdSLElBQUssRUFDRCxNQUFPLEdBS2YsR0FEQSxFQUFPLG9CQUFzQixFQUFPLHFCQUF1QixFQUN2RCxFQUFPLHFCQUF1QixFQUFPLE1BQ3JDLE1BQU8sR0FFWCxNQUFPLEdBTVgsU0FBUyxHQUFTLENBQUMsRUFBSyxDQUNwQixHQUFJLEdBQU8sRUFBSSxRQUFVLEVBQUksT0FBTyxZQUNoQyxPQUFPLEVBQUksT0FBTyxZQUV0QixPQVFKLFNBQVMsR0FBaUIsQ0FBQyxFQUFRLENBQy9CLElBQUksRUFLSixJQUFNLEdBRmEsRUFBTyxvQkFBc0IsR0FBSyxFQUFLLEVBQU8sY0FBZ0IsTUFBUSxJQUFZLE9BQUksRUFBSyxNQUd4RyxLQUFLLElBQUksRUFBTyxxQkFBc0IsRUFBTyxtQkFBbUIsRUFBSSxHQUNsRSxFQUNBLEtBQ0YsRUFBb0IsRUFBTyxjQUFnQixLQUFLLElBQUksRUFBSSxFQUFPLG9CQUNyRSxPQUFPLEtBQUssSUFBSSxFQUFpQixFQUFtQixFQUFPLGFBQWEsdUJDaks1RSxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQzNDLE1BQU8sRUFDVCxDQUFDLEVBQ08sWUFBVSxJQUVsQixJQUFJLElBQVUsZ0JBQXdDLEVBRXRELFNBQVMsR0FBc0IsQ0FBQyxFQUFLLENBQUUsT0FBTyxHQUFPLEVBQUksV0FBYSxFQUFNLENBQUUsUUFBUyxDQUFJLEVBRTNGLElBQU0sR0FBWSxJQUFJLFdBQVcsR0FBRyxFQUVoQyxHQUFVLEdBQVUsT0FFeEIsU0FBUyxHQUFHLEVBQUcsQ0FDYixHQUFJLEdBQVUsR0FBVSxPQUFTLEdBQy9CLElBQVEsUUFBUSxlQUFlLEVBQVMsRUFFeEMsR0FBVSxFQUdaLE9BQU8sR0FBVSxNQUFNLEdBQVMsSUFBVyxFQUFFLHVCQ3BCL0MsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FDdkIsSUFBSSxJQUFXLHNIQUNQLFlBQVUsdUJDTGxCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FDM0MsTUFBTyxFQUNULENBQUMsRUFDTyxZQUFlLE9BRXZCLElBQUksSUFBUyxTQUE0QyxFQUV6RCxTQUFTLEdBQXNCLENBQUMsRUFBSyxDQUFFLE9BQU8sR0FBTyxFQUFJLFdBQWEsRUFBTSxDQUFFLFFBQVMsQ0FBSSxFQUUzRixTQUFTLEdBQVEsQ0FBQyxFQUFNLENBQ3RCLE9BQU8sT0FBTyxJQUFTLFVBQVksSUFBTyxRQUFRLEtBQUssQ0FBSSxFQUc3RCxJQUFJLElBQVcsSUFDUCxZQUFVLHVCQ2RsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQzNDLE1BQU8sRUFDVCxDQUFDLEVBQ08sWUFBZSxPQUNmLG9CQUFrQixJQUUxQixJQUFJLElBQVksUUFBK0MsRUFFL0QsU0FBUyxHQUFzQixDQUFDLEVBQUssQ0FBRSxPQUFPLEdBQU8sRUFBSSxXQUFhLEVBQU0sQ0FBRSxRQUFTLENBQUksRUFNM0YsSUFBTSxHQUFZLENBQUMsRUFFbkIsUUFBUyxFQUFJLEVBQUcsRUFBSSxNQUFPLEVBQ3pCLEdBQVUsTUFBTSxFQUFJLEtBQU8sU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFHbEQsU0FBUyxHQUFlLENBQUMsRUFBSyxFQUFTLEVBQUcsQ0FHeEMsT0FBTyxHQUFVLEVBQUksRUFBUyxJQUFNLEdBQVUsRUFBSSxFQUFTLElBQU0sR0FBVSxFQUFJLEVBQVMsSUFBTSxHQUFVLEVBQUksRUFBUyxJQUFNLElBQU0sR0FBVSxFQUFJLEVBQVMsSUFBTSxHQUFVLEVBQUksRUFBUyxJQUFNLElBQU0sR0FBVSxFQUFJLEVBQVMsSUFBTSxHQUFVLEVBQUksRUFBUyxJQUFNLElBQU0sR0FBVSxFQUFJLEVBQVMsSUFBTSxHQUFVLEVBQUksRUFBUyxJQUFNLElBQU0sR0FBVSxFQUFJLEVBQVMsS0FBTyxHQUFVLEVBQUksRUFBUyxLQUFPLEdBQVUsRUFBSSxFQUFTLEtBQU8sR0FBVSxFQUFJLEVBQVMsS0FBTyxHQUFVLEVBQUksRUFBUyxLQUFPLEdBQVUsRUFBSSxFQUFTLEtBR2hmLFNBQVMsR0FBUyxDQUFDLEVBQUssRUFBUyxFQUFHLENBQ2xDLElBQU0sRUFBTyxJQUFnQixFQUFLLENBQU0sRUFNeEMsSUFBUyxJQUFVLFFBQVMsQ0FBSSxFQUM5QixNQUFNLFVBQVUsNkJBQTZCLEVBRy9DLE9BQU8sRUFHVCxJQUFJLElBQVcsSUFDUCxZQUFVLHdCQ3pDbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFPLFNBQTBDLEVBRWpELFNBRUosU0FBUyxHQUFzQixDQUFDLEVBQUssQ0FBRSxPQUFPLEdBQU8sRUFBSSxXQUFhLEVBQU0sQ0FBRSxRQUFTLENBQUksRUFNM0YsSUFBSSxJQUVBLElBR0EsSUFBYSxFQUNiLElBQWEsRUFFakIsU0FBUyxHQUFFLENBQUMsRUFBUyxFQUFLLEVBQVEsQ0FDaEMsSUFBSSxFQUFJLEdBQU8sR0FBVSxFQUNuQixFQUFJLEdBQU8sSUFBSSxNQUFNLEVBQUUsRUFDN0IsRUFBVSxHQUFXLENBQUMsRUFDdEIsSUFBSSxFQUFPLEVBQVEsTUFBUSxJQUN2QixFQUFXLEVBQVEsV0FBYSxPQUFZLEVBQVEsU0FBVyxJQUluRSxHQUFJLEdBQVEsTUFBUSxHQUFZLEtBQU0sQ0FDcEMsSUFBTSxFQUFZLEVBQVEsU0FBVyxFQUFRLEtBQU8sSUFBSyxTQUFTLEVBRWxFLEdBQUksR0FBUSxLQUVWLEVBQU8sSUFBVSxDQUFDLEVBQVUsR0FBSyxFQUFNLEVBQVUsR0FBSSxFQUFVLEdBQUksRUFBVSxHQUFJLEVBQVUsR0FBSSxFQUFVLEVBQUUsRUFHN0csR0FBSSxHQUFZLEtBRWQsRUFBVyxLQUFhLEVBQVUsSUFBTSxFQUFJLEVBQVUsSUFBTSxNQVFoRSxJQUFJLEVBQVEsRUFBUSxRQUFVLE9BQVksRUFBUSxNQUFRLEtBQUssSUFBSSxFQUcvRCxFQUFRLEVBQVEsUUFBVSxPQUFZLEVBQVEsTUFBUSxJQUFhLEVBRWpFLEVBQUssRUFBUSxLQUFjLEVBQVEsS0FBYyxJQUV2RCxHQUFJLEVBQUssR0FBSyxFQUFRLFdBQWEsT0FDakMsRUFBVyxFQUFXLEVBQUksTUFLNUIsSUFBSyxFQUFLLEdBQUssRUFBUSxNQUFlLEVBQVEsUUFBVSxPQUN0RCxFQUFRLEVBSVYsR0FBSSxHQUFTLElBQ1gsTUFBTSxJQUFJLE1BQU0saURBQWlELEVBR25FLElBQWEsRUFDYixJQUFhLEVBQ2IsSUFBWSxFQUVaLEdBQVMsZUFFVCxJQUFNLElBQU8sRUFBUSxXQUFhLElBQVEsR0FBUyxXQUNuRCxFQUFFLEtBQU8sSUFBTyxHQUFLLElBQ3JCLEVBQUUsS0FBTyxJQUFPLEdBQUssSUFDckIsRUFBRSxLQUFPLElBQU8sRUFBSSxJQUNwQixFQUFFLEtBQU8sRUFBSyxJQUVkLElBQU0sRUFBTSxFQUFRLFdBQWMsSUFBUSxVQUMxQyxFQUFFLEtBQU8sSUFBUSxFQUFJLElBQ3JCLEVBQUUsS0FBTyxFQUFNLElBRWYsRUFBRSxLQUFPLElBQVEsR0FBSyxHQUFNLEdBRTVCLEVBQUUsS0FBTyxJQUFRLEdBQUssSUFFdEIsRUFBRSxLQUFPLElBQWEsRUFBSSxJQUUxQixFQUFFLEtBQU8sRUFBVyxJQUVwQixRQUFTLEVBQUksRUFBRyxFQUFJLElBQUssRUFDdkIsRUFBRSxFQUFJLEdBQUssRUFBSyxHQUdsQixPQUFPLEdBQVcsSUFBVyxnQkFBaUIsQ0FBQyxFQUdqRCxJQUFJLElBQVcsSUFDUCxZQUFVLHdCQ3hHbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFZLFFBQStDLEVBRS9ELFNBQVMsR0FBc0IsQ0FBQyxFQUFLLENBQUUsT0FBTyxHQUFPLEVBQUksV0FBYSxFQUFNLENBQUUsUUFBUyxDQUFJLEVBRTNGLFNBQVMsR0FBSyxDQUFDLEVBQU0sQ0FDbkIsSUFBUyxJQUFVLFFBQVMsQ0FBSSxFQUM5QixNQUFNLFVBQVUsY0FBYyxFQUdoQyxJQUFJLEVBQ0UsRUFBTSxJQUFJLFdBQVcsRUFBRSxFQXVCN0IsT0FyQkEsRUFBSSxJQUFNLEVBQUksU0FBUyxFQUFLLE1BQU0sRUFBRyxDQUFDLEVBQUcsRUFBRSxLQUFPLEdBQ2xELEVBQUksR0FBSyxJQUFNLEdBQUssSUFDcEIsRUFBSSxHQUFLLElBQU0sRUFBSSxJQUNuQixFQUFJLEdBQUssRUFBSSxJQUViLEVBQUksSUFBTSxFQUFJLFNBQVMsRUFBSyxNQUFNLEVBQUcsRUFBRSxFQUFHLEVBQUUsS0FBTyxFQUNuRCxFQUFJLEdBQUssRUFBSSxJQUViLEVBQUksSUFBTSxFQUFJLFNBQVMsRUFBSyxNQUFNLEdBQUksRUFBRSxFQUFHLEVBQUUsS0FBTyxFQUNwRCxFQUFJLEdBQUssRUFBSSxJQUViLEVBQUksSUFBTSxFQUFJLFNBQVMsRUFBSyxNQUFNLEdBQUksRUFBRSxFQUFHLEVBQUUsS0FBTyxFQUNwRCxFQUFJLEdBQUssRUFBSSxJQUdiLEVBQUksS0FBTyxFQUFJLFNBQVMsRUFBSyxNQUFNLEdBQUksRUFBRSxFQUFHLEVBQUUsR0FBSyxjQUFnQixJQUNuRSxFQUFJLElBQU0sRUFBSSxXQUFjLElBQzVCLEVBQUksSUFBTSxJQUFNLEdBQUssSUFDckIsRUFBSSxJQUFNLElBQU0sR0FBSyxJQUNyQixFQUFJLElBQU0sSUFBTSxFQUFJLElBQ3BCLEVBQUksSUFBTSxFQUFJLElBQ1AsRUFHVCxJQUFJLElBQVcsSUFDUCxZQUFVLHdCQzFDbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFFBQWMsUUFBVyxPQUN6QixZQUFVLElBRWxCLElBQUksU0FFQSxJQUFTLFNBQTRDLEVBRXpELFNBQVMsR0FBc0IsQ0FBQyxFQUFLLENBQUUsT0FBTyxHQUFPLEVBQUksV0FBYSxFQUFNLENBQUUsUUFBUyxDQUFJLEVBRTNGLFNBQVMsR0FBYSxDQUFDLEVBQUssQ0FDMUIsRUFBTSxTQUFTLG1CQUFtQixDQUFHLENBQUMsRUFFdEMsSUFBTSxFQUFRLENBQUMsRUFFZixRQUFTLEVBQUksRUFBRyxFQUFJLEVBQUksU0FBVSxFQUNoQyxFQUFNLEtBQUssRUFBSSxXQUFXLENBQUMsQ0FBQyxFQUc5QixPQUFPLEVBR1QsSUFBTSxJQUFNLHVDQUNKLFFBQU0sSUFDZCxJQUFNLElBQU0sdUNBQ0osUUFBTSxJQUVkLFNBQVMsR0FBRyxDQUFDLEVBQU0sRUFBUyxFQUFVLENBQ3BDLFNBQVMsQ0FBWSxDQUFDLEVBQU8sRUFBVyxFQUFLLEVBQVEsQ0FDbkQsSUFBSSxFQUVKLEdBQUksT0FBTyxJQUFVLFNBQ25CLEVBQVEsSUFBYyxDQUFLLEVBRzdCLEdBQUksT0FBTyxJQUFjLFNBQ3ZCLEVBQWdCLElBQU8sUUFBUyxDQUFTLEVBRzNDLEtBQU0sRUFBYSxLQUFlLE1BQVEsSUFBb0IsT0FBUyxPQUFJLEVBQVcsVUFBWSxHQUNoRyxNQUFNLFVBQVUsa0VBQWtFLEVBTXBGLElBQUksRUFBUSxJQUFJLFdBQVcsR0FBSyxFQUFNLE1BQU0sRUFPNUMsR0FOQSxFQUFNLElBQUksQ0FBUyxFQUNuQixFQUFNLElBQUksRUFBTyxFQUFVLE1BQU0sRUFDakMsRUFBUSxFQUFTLENBQUssRUFDdEIsRUFBTSxHQUFLLEVBQU0sR0FBSyxHQUFPLEVBQzdCLEVBQU0sR0FBSyxFQUFNLEdBQUssR0FBTyxJQUV6QixFQUFLLENBQ1AsRUFBUyxHQUFVLEVBRW5CLFFBQVMsRUFBSSxFQUFHLEVBQUksS0FBTSxFQUN4QixFQUFJLEVBQVMsR0FBSyxFQUFNLEdBRzFCLE9BQU8sRUFHVCxPQUFXLElBQVcsZ0JBQWlCLENBQUssRUFJOUMsR0FBSSxDQUNGLEVBQWEsS0FBTyxFQUNwQixNQUFPLEVBQUssRUFLZCxPQUZBLEVBQWEsSUFBTSxJQUNuQixFQUFhLElBQU0sSUFDWix1QkM1RVQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFVLGdCQUF3QyxFQUV0RCxTQUFTLEdBQXNCLENBQUMsRUFBSyxDQUFFLE9BQU8sR0FBTyxFQUFJLFdBQWEsRUFBTSxDQUFFLFFBQVMsQ0FBSSxFQUUzRixTQUFTLEdBQUcsQ0FBQyxFQUFPLENBQ2xCLEdBQUksTUFBTSxRQUFRLENBQUssRUFDckIsRUFBUSxPQUFPLEtBQUssQ0FBSyxFQUNwQixRQUFJLE9BQU8sSUFBVSxTQUMxQixFQUFRLE9BQU8sS0FBSyxFQUFPLE1BQU0sRUFHbkMsT0FBTyxJQUFRLFFBQVEsV0FBVyxLQUFLLEVBQUUsT0FBTyxDQUFLLEVBQUUsT0FBTyxFQUdoRSxJQUFJLElBQVcsSUFDUCxZQUFVLHdCQ3BCbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFLLFNBQTBDLEVBRS9DLElBQU0sU0FBMEMsRUFFcEQsU0FBUyxHQUFzQixDQUFDLEVBQUssQ0FBRSxPQUFPLEdBQU8sRUFBSSxXQUFhLEVBQU0sQ0FBRSxRQUFTLENBQUksRUFFM0YsSUFBTSxJQUFTLElBQUcsUUFBUyxLQUFNLEdBQU0sSUFBSSxPQUFPLEVBQzlDLElBQVcsSUFDUCxZQUFVLHdCQ2JsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQzNDLE1BQU8sRUFDVCxDQUFDLEVBQ08sWUFBZSxPQUV2QixJQUFJLElBQVUsZ0JBQXdDLEVBRXRELFNBQVMsR0FBc0IsQ0FBQyxFQUFLLENBQUUsT0FBTyxHQUFPLEVBQUksV0FBYSxFQUFNLENBQUUsUUFBUyxDQUFJLEVBRTNGLElBQUksSUFBVyxDQUNiLFdBQVksSUFBUSxRQUFRLFVBQzlCLEVBQ1EsWUFBVSx3QkNabEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFVLFNBQTZDLEVBRXZELElBQU8sU0FBMEMsRUFFakQsU0FFSixTQUFTLEdBQXNCLENBQUMsRUFBSyxDQUFFLE9BQU8sR0FBTyxFQUFJLFdBQWEsRUFBTSxDQUFFLFFBQVMsQ0FBSSxFQUUzRixTQUFTLEdBQUUsQ0FBQyxFQUFTLEVBQUssRUFBUSxDQUNoQyxHQUFJLElBQVEsUUFBUSxhQUFlLElBQVEsRUFDekMsT0FBTyxJQUFRLFFBQVEsV0FBVyxFQUdwQyxFQUFVLEdBQVcsQ0FBQyxFQUV0QixJQUFNLEVBQU8sRUFBUSxTQUFXLEVBQVEsS0FBTyxJQUFLLFNBQVMsRUFNN0QsR0FIQSxFQUFLLEdBQUssRUFBSyxHQUFLLEdBQU8sR0FDM0IsRUFBSyxHQUFLLEVBQUssR0FBSyxHQUFPLElBRXZCLEVBQUssQ0FDUCxFQUFTLEdBQVUsRUFFbkIsUUFBUyxFQUFJLEVBQUcsRUFBSSxLQUFNLEVBQ3hCLEVBQUksRUFBUyxHQUFLLEVBQUssR0FHekIsT0FBTyxFQUdULE9BQVcsSUFBVyxnQkFBaUIsQ0FBSSxFQUc3QyxJQUFJLElBQVcsSUFDUCxZQUFVLHdCQ3hDbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFVLGdCQUF3QyxFQUV0RCxTQUFTLEdBQXNCLENBQUMsRUFBSyxDQUFFLE9BQU8sR0FBTyxFQUFJLFdBQWEsRUFBTSxDQUFFLFFBQVMsQ0FBSSxFQUUzRixTQUFTLEdBQUksQ0FBQyxFQUFPLENBQ25CLEdBQUksTUFBTSxRQUFRLENBQUssRUFDckIsRUFBUSxPQUFPLEtBQUssQ0FBSyxFQUNwQixRQUFJLE9BQU8sSUFBVSxTQUMxQixFQUFRLE9BQU8sS0FBSyxFQUFPLE1BQU0sRUFHbkMsT0FBTyxJQUFRLFFBQVEsV0FBVyxNQUFNLEVBQUUsT0FBTyxDQUFLLEVBQUUsT0FBTyxFQUdqRSxJQUFJLElBQVcsSUFDUCxZQUFVLHdCQ3BCbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFLLFNBQTBDLEVBRS9DLElBQU8sU0FBMkMsRUFFdEQsU0FBUyxHQUFzQixDQUFDLEVBQUssQ0FBRSxPQUFPLEdBQU8sRUFBSSxXQUFhLEVBQU0sQ0FBRSxRQUFTLENBQUksRUFFM0YsSUFBTSxJQUFTLElBQUcsUUFBUyxLQUFNLEdBQU0sSUFBSyxPQUFPLEVBQy9DLElBQVcsSUFDUCxZQUFVLHdCQ2JsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQzNDLE1BQU8sRUFDVCxDQUFDLEVBQ08sWUFBZSxPQUN2QixJQUFJLElBQVcsdUNBQ1AsWUFBVSx3QkNMbEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUMzQyxNQUFPLEVBQ1QsQ0FBQyxFQUNPLFlBQWUsT0FFdkIsSUFBSSxJQUFZLFFBQStDLEVBRS9ELFNBQVMsR0FBc0IsQ0FBQyxFQUFLLENBQUUsT0FBTyxHQUFPLEVBQUksV0FBYSxFQUFNLENBQUUsUUFBUyxDQUFJLEVBRTNGLFNBQVMsR0FBTyxDQUFDLEVBQU0sQ0FDckIsSUFBUyxJQUFVLFFBQVMsQ0FBSSxFQUM5QixNQUFNLFVBQVUsY0FBYyxFQUdoQyxPQUFPLFNBQVMsRUFBSyxNQUFNLEdBQUksRUFBRSxFQUFHLEVBQUUsRUFHeEMsSUFBSSxJQUFXLElBQ1AsWUFBVSx1QkNsQmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FDM0MsTUFBTyxFQUNULENBQUMsRUFDRCxPQUFPLGVBQWUsR0FBUyxNQUFPLENBQ3BDLFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUNmLE9BQU8sSUFBSyxRQUVoQixDQUFDLEVBQ0QsT0FBTyxlQUFlLEdBQVMsUUFBUyxDQUN0QyxXQUFZLEdBQ1osSUFBSyxRQUFTLEVBQUcsQ0FDZixPQUFPLElBQU8sUUFFbEIsQ0FBQyxFQUNELE9BQU8sZUFBZSxHQUFTLFlBQWEsQ0FDMUMsV0FBWSxHQUNaLElBQUssUUFBUyxFQUFHLENBQ2YsT0FBTyxJQUFXLFFBRXRCLENBQUMsRUFDRCxPQUFPLGVBQWUsR0FBUyxLQUFNLENBQ25DLFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUNmLE9BQU8sSUFBRyxRQUVkLENBQUMsRUFDRCxPQUFPLGVBQWUsR0FBUyxLQUFNLENBQ25DLFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUNmLE9BQU8sSUFBSSxRQUVmLENBQUMsRUFDRCxPQUFPLGVBQWUsR0FBUyxLQUFNLENBQ25DLFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUNmLE9BQU8sSUFBSSxRQUVmLENBQUMsRUFDRCxPQUFPLGVBQWUsR0FBUyxLQUFNLENBQ25DLFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUNmLE9BQU8sSUFBSSxRQUVmLENBQUMsRUFDRCxPQUFPLGVBQWUsR0FBUyxXQUFZLENBQ3pDLFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUNmLE9BQU8sSUFBVSxRQUVyQixDQUFDLEVBQ0QsT0FBTyxlQUFlLEdBQVMsVUFBVyxDQUN4QyxXQUFZLEdBQ1osSUFBSyxRQUFTLEVBQUcsQ0FDZixPQUFPLElBQVMsUUFFcEIsQ0FBQyxFQUVELElBQUksSUFBSyxRQUF5QyxFQUU5QyxJQUFNLFFBQXlDLEVBRS9DLElBQU0sUUFBeUMsRUFFL0MsSUFBTSxRQUF5QyxFQUUvQyxJQUFPLFFBQTBDLEVBRWpELElBQVcsUUFBOEMsRUFFekQsSUFBWSxPQUErQyxFQUUzRCxJQUFhLE9BQWdELEVBRTdELElBQVMsUUFBNEMsRUFFekQsU0FBUyxFQUFzQixDQUFDLEVBQUssQ0FBRSxPQUFPLEdBQU8sRUFBSSxXQUFhLEVBQU0sQ0FBRSxRQUFTLENBQUksdUJDakUzRixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsNkJBQWdDLE9BSXhDLE1BQU0sWUFBaUMsR0FBSSxDQUMzQyxDQUNRLDZCQUEyQix1QkNuQm5DLElBQUksSUFBbUIsSUFBUSxHQUFLLGtCQUFxQixPQUFPLE9BQVUsUUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUksQ0FDNUYsR0FBSSxJQUFPLE9BQVcsRUFBSyxFQUMzQixJQUFJLEVBQU8sT0FBTyx5QkFBeUIsRUFBRyxDQUFDLEVBQy9DLElBQUssSUFBUyxRQUFTLEdBQVEsRUFBRSxXQUFhLEVBQUssVUFBWSxFQUFLLGNBQ2xFLEVBQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFRLEVBQUcsQ0FBRSxPQUFPLEVBQUUsR0FBTSxFQUU5RCxPQUFPLGVBQWUsRUFBRyxFQUFJLENBQUksR0FDL0IsUUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUksQ0FDeEIsR0FBSSxJQUFPLE9BQVcsRUFBSyxFQUMzQixFQUFFLEdBQU0sRUFBRSxLQUVWLElBQXNCLElBQVEsR0FBSyxxQkFBd0IsT0FBTyxPQUFVLFFBQVEsQ0FBQyxFQUFHLEVBQUcsQ0FDM0YsT0FBTyxlQUFlLEVBQUcsVUFBVyxDQUFFLFdBQVksR0FBTSxNQUFPLENBQUUsQ0FBQyxHQUNqRSxRQUFRLENBQUMsRUFBRyxFQUFHLENBQ2hCLEVBQUUsUUFBYSxJQUVmLElBQWdCLElBQVEsR0FBSyxjQUFpQixRQUFTLENBQUMsRUFBSyxDQUM3RCxHQUFJLEdBQU8sRUFBSSxXQUFZLE9BQU8sRUFDbEMsSUFBSSxFQUFTLENBQUMsRUFDZCxHQUFJLEdBQU8sTUFBTSxRQUFTLEtBQUssRUFBSyxHQUFJLElBQU0sV0FBYSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUssQ0FBQyxFQUFHLElBQWdCLEVBQVEsRUFBSyxDQUFDLEVBRXZJLE9BREEsSUFBbUIsRUFBUSxDQUFHLEVBQ3ZCLEdBRVgsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsSUFBTSxHQUFRLEtBQU8sR0FBUSxTQUFnQixPQUNyRCxJQUFNLElBQU8sY0FBNEIsRUFDbkMsSUFBUSxlQUE2QixFQUMzQyxlQUFlLEdBQVEsQ0FBQyxFQUFRLENBQzVCLElBQUksRUFBUyxFQUNQLEVBQVMsQ0FBQyxFQUNoQixjQUFpQixLQUFTLEVBQ3RCLEdBQVUsRUFBTSxPQUNoQixFQUFPLEtBQUssQ0FBSyxFQUVyQixPQUFPLE9BQU8sT0FBTyxFQUFRLENBQU0sRUFFdkMsR0FBUSxTQUFXLElBRW5CLGVBQWUsR0FBSSxDQUFDLEVBQVEsQ0FFeEIsSUFBTSxHQURNLE1BQU0sSUFBUyxDQUFNLEdBQ2pCLFNBQVMsTUFBTSxFQUMvQixHQUFJLENBQ0EsT0FBTyxLQUFLLE1BQU0sQ0FBRyxFQUV6QixNQUFPLEVBQU0sQ0FDVCxJQUFNLEVBQU0sRUFFWixNQURBLEVBQUksU0FBVyxZQUFZLEtBQ3JCLEdBR2QsR0FBUSxLQUFPLElBQ2YsU0FBUyxHQUFHLENBQUMsRUFBSyxFQUFPLENBQUMsRUFBRyxDQUV6QixJQUFNLElBRE8sT0FBTyxJQUFRLFNBQVcsRUFBTSxFQUFJLE1BQy9CLFdBQVcsUUFBUSxFQUFJLElBQVEsS0FBTSxRQUFRLEVBQUssQ0FBSSxFQUNsRSxFQUFVLElBQUksUUFBUSxDQUFDLEVBQVMsSUFBVyxDQUM3QyxFQUNLLEtBQUssV0FBWSxDQUFPLEVBQ3hCLEtBQUssUUFBUyxDQUFNLEVBQ3BCLElBQUksRUFDWixFQUVELE9BREEsRUFBSSxLQUFPLEVBQVEsS0FBSyxLQUFLLENBQU8sRUFDN0IsRUFFWCxHQUFRLElBQU0sdUJDL0RkLElBQUksSUFBbUIsSUFBUSxHQUFLLGtCQUFxQixPQUFPLE9BQVUsUUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUksQ0FDNUYsR0FBSSxJQUFPLE9BQVcsRUFBSyxFQUMzQixJQUFJLEVBQU8sT0FBTyx5QkFBeUIsRUFBRyxDQUFDLEVBQy9DLElBQUssSUFBUyxRQUFTLEdBQVEsRUFBRSxXQUFhLEVBQUssVUFBWSxFQUFLLGNBQ2xFLEVBQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFRLEVBQUcsQ0FBRSxPQUFPLEVBQUUsR0FBTSxFQUU5RCxPQUFPLGVBQWUsRUFBRyxFQUFJLENBQUksR0FDL0IsUUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUksQ0FDeEIsR0FBSSxJQUFPLE9BQVcsRUFBSyxFQUMzQixFQUFFLEdBQU0sRUFBRSxLQUVWLElBQXNCLElBQVEsR0FBSyxxQkFBd0IsT0FBTyxPQUFVLFFBQVEsQ0FBQyxFQUFHLEVBQUcsQ0FDM0YsT0FBTyxlQUFlLEVBQUcsVUFBVyxDQUFFLFdBQVksR0FBTSxNQUFPLENBQUUsQ0FBQyxHQUNqRSxRQUFRLENBQUMsRUFBRyxFQUFHLENBQ2hCLEVBQUUsUUFBYSxJQUVmLElBQWdCLElBQVEsR0FBSyxjQUFpQixRQUFTLENBQUMsRUFBSyxDQUM3RCxHQUFJLEdBQU8sRUFBSSxXQUFZLE9BQU8sRUFDbEMsSUFBSSxFQUFTLENBQUMsRUFDZCxHQUFJLEdBQU8sTUFBTSxRQUFTLEtBQUssRUFBSyxHQUFJLElBQU0sV0FBYSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUssQ0FBQyxFQUFHLElBQWdCLEVBQVEsRUFBSyxDQUFDLEVBRXZJLE9BREEsSUFBbUIsRUFBUSxDQUFHLEVBQ3ZCLEdBRVAsSUFBZ0IsSUFBUSxHQUFLLGNBQWlCLFFBQVEsQ0FBQyxFQUFHLEVBQVMsQ0FDbkUsUUFBUyxLQUFLLEVBQUcsR0FBSSxJQUFNLFlBQWMsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFTLENBQUMsRUFBRyxJQUFnQixFQUFTLEVBQUcsQ0FBQyxHQUU1SCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxNQUFhLE9BQ3JCLElBQU0sSUFBTSxhQUEyQixFQUNqQyxJQUFPLGNBQTRCLEVBQ25DLGdCQUNOLFVBQW1DLEVBQU8sRUFDMUMsSUFBTSxHQUFXLE9BQU8sd0JBQXdCLEVBQ2hELE1BQU0sWUFBYyxJQUFLLEtBQU0sQ0FDM0IsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQUksRUFDVixLQUFLLElBQVksQ0FBQyxFQUt0QixnQkFBZ0IsQ0FBQyxFQUFTLENBQ3RCLEdBQUksRUFBUyxDQUlULEdBQUksT0FBTyxFQUFRLGlCQUFtQixVQUNsQyxPQUFPLEVBQVEsZUFLbkIsR0FBSSxPQUFPLEVBQVEsV0FBYSxTQUM1QixPQUFPLEVBQVEsV0FBYSxTQU1wQyxJQUFRLFNBQVUsSUFBSSxNQUN0QixHQUFJLE9BQU8sSUFBVSxTQUNqQixNQUFPLEdBQ1gsT0FBTyxFQUNGLE1BQU07QUFBQSxDQUFJLEVBQ1YsS0FBSyxDQUFDLElBQU0sRUFBRSxRQUFRLFlBQVksSUFBTSxJQUN6QyxFQUFFLFFBQVEsYUFBYSxJQUFNLEVBQUUsRUFRdkMsZ0JBQWdCLENBQUMsRUFBTSxDQUluQixHQUFJLEtBQUssYUFBZSxLQUFZLEtBQUssa0JBQW9CLElBQ3pELE9BQU8sS0FLWCxJQUFLLEtBQUssUUFBUSxHQUVkLEtBQUssUUFBUSxHQUFRLENBQUMsRUFFMUIsSUFBTSxFQUFhLElBQUksSUFBSSxPQUFPLENBQUUsU0FBVSxFQUFNLENBQUMsRUFJckQsT0FIQSxLQUFLLFFBQVEsR0FBTSxLQUFLLENBQVUsRUFFbEMsS0FBSyxtQkFDRSxFQUVYLGdCQUFnQixDQUFDLEVBQU0sRUFBUSxDQUMzQixJQUFLLEtBQUssUUFBUSxJQUFTLElBQVcsS0FDbEMsT0FFSixJQUFNLEVBQVUsS0FBSyxRQUFRLEdBQ3ZCLEVBQVEsRUFBUSxRQUFRLENBQU0sRUFDcEMsR0FBSSxJQUFVLElBSVYsR0FIQSxFQUFRLE9BQU8sRUFBTyxDQUFDLEVBRXZCLEtBQUssbUJBQ0QsRUFBUSxTQUFXLEVBRW5CLE9BQU8sS0FBSyxRQUFRLElBTWhDLE9BQU8sQ0FBQyxFQUFTLENBSWIsR0FIdUIsT0FBTyxFQUFRLGlCQUFtQixVQUNuRCxFQUFRLGVBQ1IsS0FBSyxpQkFBaUIsQ0FBTyxFQUcvQixPQUFPLElBQVEsTUFBTSxVQUFVLFFBQVEsS0FBSyxLQUFNLENBQU8sRUFHN0QsT0FBTyxNQUFNLFFBQVEsQ0FBTyxFQUVoQyxZQUFZLENBQUMsRUFBSyxFQUFTLEVBQUksQ0FDM0IsSUFBTSxFQUFjLElBQ2IsRUFDSCxlQUFnQixLQUFLLGlCQUFpQixDQUFPLENBQ2pELEVBQ00sRUFBTyxLQUFLLFFBQVEsQ0FBVyxFQUMvQixFQUFhLEtBQUssaUJBQWlCLENBQUksRUFDN0MsUUFBUSxRQUFRLEVBQ1gsS0FBSyxJQUFNLEtBQUssUUFBUSxFQUFLLENBQVcsQ0FBQyxFQUN6QyxLQUFLLENBQUMsSUFBVyxDQUVsQixHQURBLEtBQUssaUJBQWlCLEVBQU0sQ0FBVSxFQUNsQyxhQUFrQixJQUFLLE1BQ3ZCLEdBQUksQ0FFQSxPQUFPLEVBQU8sV0FBVyxFQUFLLENBQVcsRUFFN0MsTUFBTyxFQUFLLENBQ1IsT0FBTyxFQUFHLENBQUcsRUFHckIsS0FBSyxJQUFVLGNBQWdCLEVBRS9CLE1BQU0sYUFBYSxFQUFLLEVBQVMsQ0FBRSxHQUNwQyxDQUFDLElBQVEsQ0FDUixLQUFLLGlCQUFpQixFQUFNLENBQVUsRUFDdEMsRUFBRyxDQUFHLEVBQ1QsRUFFTCxnQkFBZ0IsRUFBRyxDQUNmLElBQU0sRUFBUyxLQUFLLElBQVUsY0FFOUIsR0FEQSxLQUFLLElBQVUsY0FBZ0IsUUFDMUIsRUFDRCxNQUFNLElBQUksTUFBTSxvREFBb0QsRUFFeEUsT0FBTyxLQUVQLFlBQVcsRUFBRyxDQUNkLE9BQVEsS0FBSyxJQUFVLGNBQ2xCLEtBQUssV0FBYSxTQUFXLElBQU0sT0FFeEMsWUFBVyxDQUFDLEVBQUcsQ0FDZixHQUFJLEtBQUssSUFDTCxLQUFLLElBQVUsWUFBYyxLQUdqQyxTQUFRLEVBQUcsQ0FDWCxPQUFRLEtBQUssSUFBVSxXQUNsQixLQUFLLGlCQUFpQixFQUFJLFNBQVcsWUFFMUMsU0FBUSxDQUFDLEVBQUcsQ0FDWixHQUFJLEtBQUssSUFDTCxLQUFLLElBQVUsU0FBVyxFQUd0QyxDQUNBLEdBQVEsTUFBUSx1QkNqTGhCLElBQUksSUFBbUIsSUFBUSxHQUFLLGlCQUFvQixRQUFTLENBQUMsRUFBSyxDQUNuRSxPQUFRLEdBQU8sRUFBSSxXQUFjLEVBQU0sQ0FBRSxRQUFXLENBQUksR0FFNUQsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsbUJBQTBCLE9BQ2xDLElBQU0sSUFBVSxRQUFnQyxFQUMxQyxHQUFZLElBQVEsUUFBUyx3Q0FBd0MsRUFDM0UsU0FBUyxHQUFrQixDQUFDLEVBQVEsQ0FDaEMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFTLElBQVcsQ0FLcEMsSUFBSSxFQUFnQixFQUNkLEVBQVUsQ0FBQyxFQUNqQixTQUFTLENBQUksRUFBRyxDQUNaLElBQU0sRUFBSSxFQUFPLEtBQUssRUFDdEIsR0FBSSxFQUNBLEVBQU8sQ0FBQyxFQUVSLE9BQU8sS0FBSyxXQUFZLENBQUksRUFFcEMsU0FBUyxDQUFPLEVBQUcsQ0FDZixFQUFPLGVBQWUsTUFBTyxDQUFLLEVBQ2xDLEVBQU8sZUFBZSxRQUFTLENBQU8sRUFDdEMsRUFBTyxlQUFlLFdBQVksQ0FBSSxFQUUxQyxTQUFTLENBQUssRUFBRyxDQUNiLEVBQVEsRUFDUixHQUFNLE9BQU8sRUFDYixFQUFPLElBQUksTUFBTSwwREFBMEQsQ0FBQyxFQUVoRixTQUFTLENBQU8sQ0FBQyxFQUFLLENBQ2xCLEVBQVEsRUFDUixHQUFNLGFBQWMsQ0FBRyxFQUN2QixFQUFPLENBQUcsRUFFZCxTQUFTLENBQU0sQ0FBQyxFQUFHLENBQ2YsRUFBUSxLQUFLLENBQUMsRUFDZCxHQUFpQixFQUFFLE9BQ25CLElBQU0sRUFBVyxPQUFPLE9BQU8sRUFBUyxDQUFhLEVBQy9DLEVBQWUsRUFBUyxRQUFRO0FBQUE7QUFBQSxDQUFVLEVBQ2hELEdBQUksSUFBaUIsR0FBSSxDQUVyQixHQUFNLDhDQUE4QyxFQUNwRCxFQUFLLEVBQ0wsT0FFSixJQUFNLEVBQWMsRUFDZixNQUFNLEVBQUcsQ0FBWSxFQUNyQixTQUFTLE9BQU8sRUFDaEIsTUFBTTtBQUFBLENBQU0sRUFDWCxFQUFZLEVBQVksTUFBTSxFQUNwQyxJQUFLLEVBRUQsT0FEQSxFQUFPLFFBQVEsRUFDUixFQUFPLElBQUksTUFBTSxnREFBZ0QsQ0FBQyxFQUU3RSxJQUFNLEVBQWlCLEVBQVUsTUFBTSxHQUFHLEVBQ3BDLEdBQWMsRUFBZSxHQUM3QixFQUFhLEVBQWUsTUFBTSxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQzdDLEVBQVUsQ0FBQyxFQUNqQixRQUFXLEtBQVUsRUFBYSxDQUM5QixJQUFLLEVBQ0QsU0FDSixJQUFNLEVBQWEsRUFBTyxRQUFRLEdBQUcsRUFDckMsR0FBSSxJQUFlLEdBRWYsT0FEQSxFQUFPLFFBQVEsRUFDUixFQUFPLElBQUksTUFBTSxnREFBZ0QsSUFBUyxDQUFDLEVBRXRGLElBQU0sRUFBTSxFQUFPLE1BQU0sRUFBRyxDQUFVLEVBQUUsWUFBWSxFQUM5QyxFQUFRLEVBQU8sTUFBTSxFQUFhLENBQUMsRUFBRSxVQUFVLEVBQy9DLEVBQVUsRUFBUSxHQUN4QixHQUFJLE9BQU8sSUFBWSxTQUNuQixFQUFRLEdBQU8sQ0FBQyxFQUFTLENBQUssRUFFN0IsUUFBSSxNQUFNLFFBQVEsQ0FBTyxFQUMxQixFQUFRLEtBQUssQ0FBSyxFQUdsQixPQUFRLEdBQU8sRUFHdkIsR0FBTSxtQ0FBb0MsRUFBVyxDQUFPLEVBQzVELEVBQVEsRUFDUixFQUFRLENBQ0osUUFBUyxDQUNMLGFBQ0EsYUFDQSxTQUNKLEVBQ0EsVUFDSixDQUFDLEVBRUwsRUFBTyxHQUFHLFFBQVMsQ0FBTyxFQUMxQixFQUFPLEdBQUcsTUFBTyxDQUFLLEVBQ3RCLEVBQUssRUFDUixFQUVMLEdBQVEsbUJBQXFCLHVCQ2xHN0IsSUFBSSxJQUFtQixJQUFRLEdBQUssa0JBQXFCLE9BQU8sT0FBVSxRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUM1RixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLElBQUksRUFBTyxPQUFPLHlCQUF5QixFQUFHLENBQUMsRUFDL0MsSUFBSyxJQUFTLFFBQVMsR0FBUSxFQUFFLFdBQWEsRUFBSyxVQUFZLEVBQUssY0FDbEUsRUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVEsRUFBRyxDQUFFLE9BQU8sRUFBRSxHQUFNLEVBRTlELE9BQU8sZUFBZSxFQUFHLEVBQUksQ0FBSSxHQUMvQixRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUN4QixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLEVBQUUsR0FBTSxFQUFFLEtBRVYsSUFBc0IsSUFBUSxHQUFLLHFCQUF3QixPQUFPLE9BQVUsUUFBUSxDQUFDLEVBQUcsRUFBRyxDQUMzRixPQUFPLGVBQWUsRUFBRyxVQUFXLENBQUUsV0FBWSxHQUFNLE1BQU8sQ0FBRSxDQUFDLEdBQ2pFLFFBQVEsQ0FBQyxFQUFHLEVBQUcsQ0FDaEIsRUFBRSxRQUFhLElBRWYsSUFBZ0IsSUFBUSxHQUFLLGNBQWlCLFFBQVMsQ0FBQyxFQUFLLENBQzdELEdBQUksR0FBTyxFQUFJLFdBQVksT0FBTyxFQUNsQyxJQUFJLEVBQVMsQ0FBQyxFQUNkLEdBQUksR0FBTyxNQUFNLFFBQVMsS0FBSyxFQUFLLEdBQUksSUFBTSxXQUFhLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBSyxDQUFDLEVBQUcsSUFBZ0IsRUFBUSxFQUFLLENBQUMsRUFFdkksT0FEQSxJQUFtQixFQUFRLENBQUcsRUFDdkIsR0FFUCxJQUFtQixJQUFRLEdBQUssaUJBQW9CLFFBQVMsQ0FBQyxFQUFLLENBQ25FLE9BQVEsR0FBTyxFQUFJLFdBQWMsRUFBTSxDQUFFLFFBQVcsQ0FBSSxHQUU1RCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxnQkFBdUIsT0FDL0IsSUFBTSxHQUFNLGFBQTJCLEVBQ2pDLElBQU0sYUFBMkIsRUFDakMsSUFBVyxnQkFBaUMsRUFDNUMsSUFBVSxRQUFnQyxFQUMxQyxVQUNBLGNBQ0EsVUFDQSxHQUFZLElBQVEsUUFBUyxtQkFBbUIsRUFDaEQsSUFBNkIsQ0FBQyxJQUFZLENBQzVDLEdBQUksRUFBUSxhQUFlLFFBQ3ZCLEVBQVEsT0FDUCxHQUFJLEtBQUssRUFBUSxJQUFJLEVBQ3RCLE1BQU8sSUFDQSxFQUNILFdBQVksRUFBUSxJQUN4QixFQUVKLE9BQU8sR0FjWCxNQUFNLFlBQXdCLElBQWEsS0FBTSxDQUM3QyxXQUFXLENBQUMsRUFBTyxFQUFNLENBQ3JCLE1BQU0sQ0FBSSxFQUNWLEtBQUssUUFBVSxDQUFFLEtBQU0sTUFBVSxFQUNqQyxLQUFLLE1BQVEsT0FBTyxJQUFVLFNBQVcsSUFBSSxJQUFNLElBQUksQ0FBSyxFQUFJLEVBQ2hFLEtBQUssYUFBZSxHQUFNLFNBQVcsQ0FBQyxFQUN0QyxHQUFNLDRDQUE2QyxLQUFLLE1BQU0sSUFBSSxFQUVsRSxJQUFNLEdBQVEsS0FBSyxNQUFNLFVBQVksS0FBSyxNQUFNLE1BQU0sUUFBUSxXQUFZLEVBQUUsRUFDdEUsRUFBTyxLQUFLLE1BQU0sS0FDbEIsU0FBUyxLQUFLLE1BQU0sS0FBTSxFQUFFLEVBQzVCLEtBQUssTUFBTSxXQUFhLFNBQ3BCLElBQ0EsR0FDVixLQUFLLFlBQWMsQ0FFZixjQUFlLENBQUMsVUFBVSxLQUN0QixFQUFPLElBQUssRUFBTSxTQUFTLEVBQUksS0FDbkMsT0FDQSxNQUNKLE9BTUUsUUFBTyxDQUFDLEVBQUssRUFBTSxDQUNyQixJQUFRLFNBQVUsS0FDbEIsSUFBSyxFQUFLLEtBQ04sTUFBTSxJQUFJLFVBQVUsb0JBQW9CLEVBRzVDLElBQUksRUFDSixHQUFJLEVBQU0sV0FBYSxTQUNuQixHQUFNLDRCQUE2QixLQUFLLFdBQVcsRUFDbkQsRUFBUyxJQUFJLFFBQVEsSUFBMkIsS0FBSyxXQUFXLENBQUMsRUFHakUsUUFBTSw0QkFBNkIsS0FBSyxXQUFXLEVBQ25ELEVBQVMsR0FBSSxRQUFRLEtBQUssV0FBVyxFQUV6QyxJQUFNLEVBQVUsT0FBTyxLQUFLLGVBQWlCLFdBQ3ZDLEtBQUssYUFBYSxFQUNsQixJQUFLLEtBQUssWUFBYSxFQUN2QixFQUFPLEdBQUksT0FBTyxFQUFLLElBQUksRUFBSSxJQUFJLEVBQUssUUFBVSxFQUFLLEtBQ3pELEVBQVUsV0FBVyxLQUFRLEVBQUs7QUFBQSxFQUV0QyxHQUFJLEVBQU0sVUFBWSxFQUFNLFNBQVUsQ0FDbEMsSUFBTSxFQUFPLEdBQUcsbUJBQW1CLEVBQU0sUUFBUSxLQUFLLG1CQUFtQixFQUFNLFFBQVEsSUFDdkYsRUFBUSx1QkFBeUIsU0FBUyxPQUFPLEtBQUssQ0FBSSxFQUFFLFNBQVMsUUFBUSxJQUdqRixHQURBLEVBQVEsS0FBTyxHQUFHLEtBQVEsRUFBSyxRQUMxQixFQUFRLG9CQUNULEVBQVEsb0JBQXNCLEtBQUssVUFDN0IsYUFDQSxRQUVWLFFBQVcsS0FBUSxPQUFPLEtBQUssQ0FBTyxFQUNsQyxHQUFXLEdBQUcsTUFBUyxFQUFRO0FBQUEsRUFFbkMsSUFBTSxFQUEyQixJQUF1QixtQkFBb0IsQ0FBTSxFQUNsRixFQUFPLE1BQU0sR0FBRztBQUFBLENBQWEsRUFDN0IsSUFBUSxVQUFTLFlBQWEsTUFBTSxFQUdwQyxHQUZBLEVBQUksS0FBSyxlQUFnQixDQUFPLEVBQ2hDLEtBQUssS0FBSyxlQUFnQixFQUFTLENBQUcsRUFDbEMsRUFBUSxhQUFlLElBQUssQ0FFNUIsR0FEQSxFQUFJLEtBQUssU0FBVSxHQUFNLEVBQ3JCLEVBQUssZUFJTCxPQURBLEdBQU0sb0NBQW9DLEVBQ25DLElBQUksUUFBUSxJQUNaLElBQUssSUFBMkIsQ0FBSSxFQUFHLE9BQVEsT0FBUSxNQUFNLEVBQ2hFLFFBQ0osQ0FBQyxFQUVMLE9BQU8sRUFZWCxFQUFPLFFBQVEsRUFDZixJQUFNLEVBQWEsSUFBSSxHQUFJLE9BQU8sQ0FBRSxTQUFVLEVBQU0sQ0FBQyxFQVlyRCxPQVhBLEVBQVcsU0FBVyxHQUV0QixFQUFJLEtBQUssU0FBVSxDQUFDLElBQU0sQ0FDdEIsR0FBTSwyQ0FBMkMsRUFDN0MsSUFBUyxRQUFTLEVBQUUsY0FBYyxNQUFNLEVBQUksQ0FBQyxFQUlqRCxFQUFFLEtBQUssQ0FBUSxFQUNmLEVBQUUsS0FBSyxJQUFJLEVBQ2QsRUFDTSxFQUVmLENBQ0EsSUFBZ0IsVUFBWSxDQUFDLE9BQVEsT0FBTyxFQUM1QyxHQUFRLGdCQUFrQixJQUMxQixTQUFTLEdBQU0sQ0FBQyxFQUFRLENBQ3BCLEVBQU8sT0FBTyxFQUVsQixTQUFTLEdBQUksQ0FBQyxLQUFRLEVBQU0sQ0FDeEIsSUFBTSxFQUFNLENBQUMsRUFDVCxFQUNKLElBQUssS0FBTyxFQUNSLElBQUssRUFBSyxTQUFTLENBQUcsRUFDbEIsRUFBSSxHQUFPLEVBQUksR0FHdkIsT0FBTyxzQkNwS1gsSUFBSSxJQUFtQixJQUFRLEdBQUssa0JBQXFCLE9BQU8sT0FBVSxRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUM1RixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLElBQUksRUFBTyxPQUFPLHlCQUF5QixFQUFHLENBQUMsRUFDL0MsSUFBSyxJQUFTLFFBQVMsR0FBUSxFQUFFLFdBQWEsRUFBSyxVQUFZLEVBQUssY0FDbEUsRUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVEsRUFBRyxDQUFFLE9BQU8sRUFBRSxHQUFNLEVBRTlELE9BQU8sZUFBZSxFQUFHLEVBQUksQ0FBSSxHQUMvQixRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUN4QixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLEVBQUUsR0FBTSxFQUFFLEtBRVYsSUFBc0IsSUFBUSxHQUFLLHFCQUF3QixPQUFPLE9BQVUsUUFBUSxDQUFDLEVBQUcsRUFBRyxDQUMzRixPQUFPLGVBQWUsRUFBRyxVQUFXLENBQUUsV0FBWSxHQUFNLE1BQU8sQ0FBRSxDQUFDLEdBQ2pFLFFBQVEsQ0FBQyxFQUFHLEVBQUcsQ0FDaEIsRUFBRSxRQUFhLElBRWYsSUFBZ0IsSUFBUSxHQUFLLGNBQWlCLFFBQVMsQ0FBQyxFQUFLLENBQzdELEdBQUksR0FBTyxFQUFJLFdBQVksT0FBTyxFQUNsQyxJQUFJLEVBQVMsQ0FBQyxFQUNkLEdBQUksR0FBTyxNQUFNLFFBQVMsS0FBSyxFQUFLLEdBQUksSUFBTSxXQUFhLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBSyxDQUFDLEVBQUcsSUFBZ0IsRUFBUSxFQUFLLENBQUMsRUFFdkksT0FEQSxJQUFtQixFQUFRLENBQUcsRUFDdkIsR0FFUCxHQUEwQixJQUFRLEdBQUssd0JBQTJCLFFBQVMsQ0FBQyxFQUFVLEVBQU8sRUFBTSxFQUFHLENBQ3RHLEdBQUksSUFBUyxNQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsK0NBQStDLEVBQzNGLEdBQUksT0FBTyxJQUFVLFdBQWEsSUFBYSxJQUFVLEdBQUssRUFBTSxJQUFJLENBQVEsRUFBRyxNQUFNLElBQUksVUFBVSwwRUFBMEUsRUFDakwsT0FBTyxJQUFTLElBQU0sRUFBSSxJQUFTLElBQU0sRUFBRSxLQUFLLENBQVEsRUFBSSxFQUFJLEVBQUUsTUFBUSxFQUFNLElBQUksQ0FBUSxHQUU1RixJQUEwQixJQUFRLEdBQUssd0JBQTJCLFFBQVMsQ0FBQyxFQUFVLEVBQU8sRUFBTyxFQUFNLEVBQUcsQ0FDN0csR0FBSSxJQUFTLElBQUssTUFBTSxJQUFJLFVBQVUsZ0NBQWdDLEVBQ3RFLEdBQUksSUFBUyxNQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsK0NBQStDLEVBQzNGLEdBQUksT0FBTyxJQUFVLFdBQWEsSUFBYSxJQUFVLEdBQUssRUFBTSxJQUFJLENBQVEsRUFBRyxNQUFNLElBQUksVUFBVSx5RUFBeUUsRUFDaEwsT0FBUSxJQUFTLElBQU0sRUFBRSxLQUFLLEVBQVUsQ0FBSyxFQUFJLEVBQUksRUFBRSxNQUFRLEVBQVEsRUFBTSxJQUFJLEVBQVUsQ0FBSyxFQUFJLEdBRXBHLEdBQW1CLElBQVEsR0FBSyxpQkFBb0IsUUFBUyxDQUFDLEVBQUssQ0FDbkUsT0FBUSxHQUFPLEVBQUksV0FBYyxFQUFNLENBQUUsUUFBVyxDQUFJLEdBRXhELEdBQW1CLEdBQUksSUFBd0IsSUFBa0MsSUFBbUMsSUFBd0IsR0FBb0IsSUFDcEssT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsT0FBYyxPQUN0QixJQUFNLElBQVcsUUFBaUMsRUFDNUMsZ0JBQ0EsSUFBZSxRQUFxQyxFQUNwRCxJQUFnQixvQkFBc0MsRUFDdEQsSUFBYyxRQUFvQyxFQUNsRCxjQUNBLFNBQ0EsVUFDQSxpQkFDQSxVQUNBLFVBRUEsSUFBUSxJQUFTLEVBQUksT0FBTyxNQUFRLElBQWEsUUFDdkQsU0FBUyxHQUFTLEVBQUcsQ0FDakIsT0FBTyxPQUFPLFNBQVcsZUFBaUIsT0FFOUMsU0FBUyxHQUFRLEVBQUcsQ0FDaEIsT0FBTyxJQUFVLEtBQU8sT0FBTyxNQUVuQyxTQUFTLEdBQVMsRUFBRyxDQUNqQixPQUFPLE9BQU8sU0FBVyxZQUU3QixTQUFTLEdBQVMsQ0FBQyxFQUFTLEVBQVEsQ0FDaEMsUUFBUyxJQUFVLEVBQVMsQ0FBTSxFQUV0QyxTQUFTLEdBQVMsQ0FBQyxFQUFTLEVBQVEsQ0FDaEMsRUFBUyxFQUFPLFlBQVksRUFDNUIsUUFBVyxLQUFPLE9BQU8sTUFBTSxJQUFZLE1BQVEsSUFBaUIsT0FBUyxPQUFJLEVBQVEsVUFBWSxDQUFDLENBQUMsRUFDbkcsR0FBSSxJQUFXLEVBQUksWUFBWSxFQUMzQixPQUFPLEVBQVEsUUFBUSxHQUcvQixPQUVKLE1BQU0sR0FBTyxDQUtULFdBQVcsQ0FBQyxFQUFVLENBQ2xCLEdBQWtCLElBQUksSUFBSSxFQUMxQixLQUFLLFdBQWEsSUFBSSxJQUN0QixLQUFLLFNBQVcsR0FBWSxDQUFDLEVBQzdCLEtBQUssYUFBZSxDQUNoQixRQUFTLElBQUksSUFBYyx5QkFDM0IsU0FBVSxJQUFJLElBQWMsd0JBQ2hDLE9BTUUsUUFBTyxDQUFDLEVBQU8sQ0FBQyxFQUFHLENBR3JCLE9BRkEsRUFBTyxNQUFNLEdBQXVCLEtBQU0sR0FBbUIsSUFBSyxHQUFzQixFQUFFLEtBQUssS0FBTSxDQUFJLEVBQ3pHLEVBQU8sTUFBTSxHQUF1QixLQUFNLEdBQW1CLElBQUssR0FBZ0MsRUFBRSxLQUFLLEtBQU0sQ0FBSSxFQUM1RyxHQUF1QixLQUFNLEdBQW1CLElBQUssR0FBaUMsRUFBRSxLQUFLLEtBQU0sS0FBSyxTQUFTLENBQUksQ0FBQyxPQUUzSCxnQkFBZSxDQUFDLEVBQU0sQ0FFeEIsSUFBTSxFQUFPLE1BREssRUFBSyxxQkFBdUIsS0FDakIsRUFBSyxJQUFLLENBQUksRUFDckMsRUFBTyxNQUFNLEtBQUssZ0JBQWdCLEVBQU0sQ0FBRyxFQUNqRCxPQUFPLEtBQUssa0JBQWtCLEVBQU0sRUFBSyxDQUFJLE9BTTNDLFNBQVEsQ0FBQyxFQUFPLENBQUMsRUFBRyxDQUN0QixJQUFJLEVBQ0osR0FBSSxDQUNBLElBQUksRUFDSixHQUFJLEVBQUssUUFDTCxFQUFxQixNQUFNLEVBQUssUUFBUSxFQUFNLEtBQUssZ0JBQWdCLEtBQUssSUFBSSxDQUFDLEVBRzdFLE9BQXFCLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBSSxFQUV4RCxJQUFLLEVBQUssZUFBZSxFQUFtQixNQUFNLEVBQUcsQ0FDakQsR0FBSSxFQUFLLGVBQWlCLFNBQVUsQ0FDaEMsSUFBSSxFQUFXLEdBQ2YsTUFBTSxJQUFJLFFBQVEsS0FBVyxFQUN4QixJQUF1QixNQUFRLElBQTRCLE9BQVMsT0FBSSxFQUFtQixNQUFNLEdBQUcsT0FBUSxLQUFTLENBQ2xILEdBQVksRUFDZixHQUNBLElBQXVCLE1BQVEsSUFBNEIsT0FBUyxPQUFJLEVBQW1CLE1BQU0sR0FBRyxNQUFPLENBQU8sRUFDdEgsRUFDRCxFQUFtQixLQUFPLEVBRTlCLE1BQU0sSUFBSSxHQUFTLFlBQVksbUNBQW1DLEVBQW1CLFNBQVUsRUFBTSxDQUFrQixFQUUzSCxPQUFPLEVBRVgsTUFBTyxFQUFHLENBQ04sSUFBTSxFQUFNLGFBQWEsR0FBUyxZQUM1QixFQUNBLElBQUksR0FBUyxZQUFZLEVBQUUsUUFBUyxFQUFNLE9BQVcsQ0FBQyxHQUNwRCxjQUFhLFVBQVcsTUFBVSxJQUFRLGVBQWdCLENBQUcsRUFDckUsR0FBSSxHQUFlLEVBTWYsT0FMQSxFQUFJLE9BQU8sWUFBWSxvQkFDbkIsRUFBTyxZQUFZLG9CQUd2QixFQUFLLGFBQWUsRUFBSyxFQUFJLFVBQVksTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFlBQ3RFLEtBQUssU0FBUyxDQUFJLEVBRTdCLE1BQU0sUUFHUixnQkFBZSxDQUFDLEVBQU0sRUFBSyxDQUM3QixPQUFRLEVBQUssa0JBQ0osU0FDRCxPQUFPLEVBQUksU0FDVixPQUFRLENBQ1QsSUFBSSxFQUFPLE1BQU0sRUFBSSxLQUFLLEVBQzFCLEdBQUksQ0FDQSxFQUFPLEtBQUssTUFBTSxDQUFJLEVBRTFCLE1BQU8sRUFBSSxFQUdYLE9BQU8sQ0FDWCxLQUNLLGNBQ0QsT0FBTyxFQUFJLFlBQVksTUFDdEIsT0FDRCxPQUFPLEVBQUksS0FBSyxNQUNmLE9BQ0QsT0FBTyxFQUFJLEtBQUssVUFFaEIsT0FBTyxLQUFLLCtCQUErQixDQUFHLEdBTzFELGNBQWMsQ0FBQyxFQUFRLENBQ25CLE9BQU8sR0FBVSxLQUFPLEVBQVMsSUFNckMsZ0JBQWdCLENBQUMsRUFBUSxDQUNyQixPQUFPLElBQWMsUUFBUSxVQUFVLENBQU0sRUFFakQsaUJBQWlCLENBQUMsRUFBTSxFQUFLLEVBQU0sQ0FFL0IsSUFBTSxFQUFVLENBQUMsRUFJakIsT0FIQSxFQUFJLFFBQVEsUUFBUSxDQUFDLEVBQU8sSUFBUSxDQUNoQyxFQUFRLEdBQU8sRUFDbEIsRUFDTSxDQUNILE9BQVEsRUFDUixLQUFNLEVBQ04sVUFDQSxPQUFRLEVBQUksT0FDWixXQUFZLEVBQUksV0FFaEIsUUFBUyxDQUNMLFlBQWEsRUFBSSxHQUNyQixDQUNKLE9BT0UsK0JBQThCLENBQUMsRUFBVSxDQUMzQyxJQUFJLEVBQWMsRUFBUyxRQUFRLElBQUksY0FBYyxFQUNyRCxHQUFJLElBQWdCLEtBRWhCLE9BQU8sRUFBUyxLQUFLLEVBR3pCLEdBREEsRUFBYyxFQUFZLFlBQVksRUFDbEMsRUFBWSxTQUFTLGtCQUFrQixFQUFHLENBQzFDLElBQUksRUFBTyxNQUFNLEVBQVMsS0FBSyxFQUMvQixHQUFJLENBQ0EsRUFBTyxLQUFLLE1BQU0sQ0FBSSxFQUUxQixNQUFPLEVBQUksRUFHWCxPQUFPLEVBRU4sUUFBSSxFQUFZLE1BQU0sU0FBUyxFQUNoQyxPQUFPLEVBQVMsS0FBSyxFQUlyQixZQUFPLEVBQVMsS0FBSyxRQVd0QixtQkFBbUIsQ0FBQyxFQUFrQixFQUFVLENBQ25ELElBQU0sRUFBUyxLQUFLLE1BQ3BCLFFBQVcsS0FBZSxFQUFrQixDQUN4QyxJQUFNLEVBQWtCLEVBQVksUUFBUSxpQkFBbUIsMkJBRy9ELEdBREEsS0FEaUIsS0FBSztBQUFBLGdCQUE2QjtBQUFBO0FBQUEsRUFFL0MsT0FBTyxFQUFZLFVBQVksU0FDL0IsTUFBTSxFQUFZLFFBR2xCLFdBQU8sRUFBWSxRQUV2QixLQUFNO0FBQUEsRUFFVixNQUFNLEVBRWQsQ0FDQSxHQUFRLE9BQVMsSUFDakIsR0FBSyxJQUFRLEdBQW9CLElBQUksUUFBVyxJQUF5QixTQUFTLENBQXNCLENBQUMsRUFBSyxFQUFVLENBQUMsRUFBRyxDQUN4SCxJQUFJLEVBQUksRUFDUixJQUFNLEVBQVksSUFBSSxJQUFNLElBQUksQ0FBRyxFQUM3QixFQUFjLENBQUMsR0FBRyxDQUFPLEVBQ3pCLElBQW1CLEdBQU8sRUFBSyxRQUFRLElBQUksWUFBYyxNQUFRLElBQVksT0FBSSxFQUFLLFFBQVEsSUFBSSxZQUFlLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxNQUFNLEdBQUcsSUFBTSxDQUFDLEVBQzNLLFFBQVcsS0FBUSxFQUNmLEVBQVksS0FBSyxFQUFLLEtBQUssQ0FBQyxFQUVoQyxRQUFXLEtBQVEsRUFFZixHQUFJLGFBQWdCLFFBQ2hCLEdBQUksRUFBSyxLQUFLLEVBQVUsU0FBUyxDQUFDLEVBQzlCLE1BQU8sR0FJVixRQUFJLGFBQWdCLElBQU0sS0FDM0IsR0FBSSxFQUFLLFNBQVcsRUFBVSxPQUMxQixNQUFPLEdBSVYsUUFBSSxFQUFLLFdBQVcsSUFBSSxHQUFLLEVBQUssV0FBVyxHQUFHLEVBQUcsQ0FDcEQsSUFBTSxFQUFjLEVBQUssUUFBUSxRQUFTLEdBQUcsRUFDN0MsR0FBSSxFQUFVLFNBQVMsU0FBUyxDQUFXLEVBQ3ZDLE1BQU8sR0FJVixRQUFJLElBQVMsRUFBVSxRQUN4QixJQUFTLEVBQVUsVUFDbkIsSUFBUyxFQUFVLEtBQ25CLE1BQU8sR0FHZixNQUFPLElBQ1IsSUFTSCxlQUFlLENBQWdDLENBQUMsRUFBUyxDQUNyRCxJQUFJLEVBQWUsUUFBUSxRQUFRLENBQU8sRUFDMUMsUUFBVyxLQUFlLEtBQUssYUFBYSxRQUFRLE9BQU8sRUFDdkQsR0FBSSxFQUNBLEVBQWUsRUFBYSxLQUFLLEVBQVksU0FBVSxFQUFZLFFBQVEsRUFHbkYsT0FBTyxHQUNSLElBU0gsZUFBZSxDQUFpQyxDQUFDLEVBQVUsQ0FDdkQsSUFBSSxFQUFlLFFBQVEsUUFBUSxDQUFRLEVBQzNDLFFBQVcsS0FBZSxLQUFLLGFBQWEsU0FBUyxPQUFPLEVBQ3hELEdBQUksRUFDQSxFQUFlLEVBQWEsS0FBSyxFQUFZLFNBQVUsRUFBWSxRQUFRLEVBR25GLE9BQU8sR0FDUixJQU9ILGVBQWUsQ0FBc0IsQ0FBQyxFQUFTLENBQzNDLElBQUksRUFBSSxFQUFJLEVBQUksRUFDaEIsSUFBTSxFQUFXLElBQVMsUUFBUyxHQUFNLENBQUMsRUFBRyxLQUFLLFNBQVUsQ0FBTyxFQUNuRSxJQUFLLEVBQUssSUFDTixNQUFNLElBQUksTUFBTSxrQkFBa0IsRUFHdEMsSUFBTSxFQUFVLEVBQUssU0FBVyxFQUFLLFFBQ3JDLEdBQUksRUFDQSxFQUFLLElBQU0sRUFBUSxTQUFTLEVBQUksRUFBSyxJQUd6QyxHQURBLEVBQUssaUJBQW1CLEVBQUssa0JBQW9CLEtBQUssaUJBQ2xELEVBQUssUUFBVSxPQUFPLEtBQUssRUFBSyxNQUFNLEVBQUUsT0FBUyxFQUFHLENBQ3BELElBQUksRUFBd0IsRUFBSyxpQkFBaUIsRUFBSyxNQUFNLEVBQzdELEdBQUksRUFBc0IsV0FBVyxHQUFHLEVBQ3BDLEVBQXdCLEVBQXNCLE1BQU0sQ0FBQyxFQUV6RCxJQUFNLEVBQVMsRUFBSyxJQUFJLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBSSxJQUFNLElBQ3pELEVBQUssSUFBTSxFQUFLLElBQU0sRUFBUyxFQUVuQyxHQUFJLE9BQU8sRUFBUSxtQkFBcUIsU0FDcEMsRUFBSyxLQUFPLEVBQVEsaUJBRXhCLEdBQUksT0FBTyxFQUFRLGVBQWlCLFNBQ2hDLEVBQUssT0FBUyxFQUFRLGFBRzFCLEdBREEsRUFBSyxRQUFVLEVBQUssU0FBVyxDQUFDLEVBQzVCLEVBQUssWUFBYyxRQUFhLEVBQUssS0FBTSxDQUMzQyxJQUFNLEVBQWEsT0FBTyxXQUFhLFlBQ2pDLElBQ0MsSUFBUyxNQUFRLElBQWMsT0FBUyxPQUFJLEVBQUssZ0JBQWlCLFNBQ3pFLEdBQUksSUFBWSxRQUFRLFNBQVMsRUFBSyxJQUFJLEVBQ3RDLEVBQUssS0FBTyxFQUFLLEtBRWhCLFFBQUksSUFBVSxHQUFLLE9BQU8sU0FBUyxFQUFLLElBQUksR0FHN0MsR0FEQSxFQUFLLEtBQU8sRUFBSyxNQUNaLElBQVUsRUFBTSxjQUFjLEVBQy9CLEVBQUssUUFBUSxnQkFBa0IsbUJBR2xDLFFBQUksT0FBTyxFQUFLLE9BQVMsVUFHMUIsSUFBSyxFQUNELEdBQUksSUFBVSxFQUFNLGNBQWMsSUFDOUIsb0NBQ0EsRUFBSyxLQUFPLEVBQUssaUJBQWlCLEVBQUssSUFBSSxFQUUxQyxLQUVELElBQUssSUFBVSxFQUFNLGNBQWMsRUFDL0IsRUFBSyxRQUFRLGdCQUFrQixtQkFFbkMsRUFBSyxLQUFPLEtBQUssVUFBVSxFQUFLLElBQUksR0FLNUMsT0FBSyxLQUFPLEVBQUssS0FHcEIsUUFBSSxFQUFLLFdBQWEsRUFBSyxVQUFVLE9BQVMsRUFBRyxDQUlsRCxJQUFNLEVBQWUsSUFBTyxHQUFJLEVBQ2hDLEVBQUssUUFBUSxnQkFBa0IsK0JBQStCLElBQzlELElBQU0sRUFBYSxJQUFJLElBQVMsWUFDaEMsRUFBSyxLQUFPLEVBQ1IsSUFBUyxTQUFVLEtBQUssb0JBQW9CLEVBQUssVUFBVyxDQUFRLEVBQUcsRUFBWSxJQUFNLEVBQUcsRUFJcEcsR0FGQSxFQUFLLGVBQWlCLEVBQUssZ0JBQWtCLEtBQUssZUFDbEQsRUFBSyxhQUFlLEVBQUssY0FBZ0IsV0FDcEMsRUFBSyxRQUFRLFFBQWEsRUFBSyxlQUFpQixPQUNqRCxFQUFLLFFBQVEsT0FBWSxtQkFFN0IsRUFBSyxPQUFTLEVBQUssUUFBVSxNQUM3QixJQUFNLEVBQVEsRUFBSyxTQUNiLEVBQUssVUFBWSxNQUFRLFVBQWlCLE9BQVMsT0FBSSxRQUFRLE9BQVMsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLGdCQUM1RyxFQUFLLFVBQVksTUFBUSxVQUFpQixPQUFTLE9BQUksUUFBUSxPQUFTLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxnQkFDNUcsRUFBSyxVQUFZLE1BQVEsVUFBaUIsT0FBUyxPQUFJLFFBQVEsT0FBUyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsZUFDNUcsRUFBSyxVQUFZLE1BQVEsVUFBaUIsT0FBUyxPQUFJLFFBQVEsT0FBUyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsWUFDNUcsRUFBaUIsR0FBdUIsS0FBTSxHQUFtQixJQUFLLEdBQXNCLEVBQUUsS0FBSyxLQUFNLEVBQUssSUFBSyxFQUFLLE9BQU8sRUFDckksR0FBSSxFQUFLLE1BQU8sQ0FHWCxRQUFJLEdBQVMsRUFBZ0IsQ0FDOUIsSUFBTSxFQUFrQixNQUFNLEdBQXVCLEdBQUksR0FBSSxJQUFLLEdBQXFCLEVBQUUsS0FBSyxFQUFFLEVBQ2hHLEdBQUksS0FBSyxXQUFXLElBQUksQ0FBSyxFQUN6QixFQUFLLE1BQVEsS0FBSyxXQUFXLElBQUksQ0FBSyxFQUd0QyxPQUFLLE1BQVEsSUFBSSxFQUFnQixFQUFPLENBQ3BDLEtBQU0sRUFBSyxLQUNYLElBQUssRUFBSyxHQUNkLENBQUMsRUFDRCxLQUFLLFdBQVcsSUFBSSxFQUFPLEVBQUssS0FBSyxFQUd4QyxRQUFJLEVBQUssTUFBUSxFQUFLLElBRXZCLEdBQUksS0FBSyxXQUFXLElBQUksRUFBSyxHQUFHLEVBQzVCLEVBQUssTUFBUSxLQUFLLFdBQVcsSUFBSSxFQUFLLEdBQUcsRUFHekMsT0FBSyxNQUFRLElBQUksSUFBUSxNQUFNLENBQzNCLEtBQU0sRUFBSyxLQUNYLElBQUssRUFBSyxHQUNkLENBQUMsRUFDRCxLQUFLLFdBQVcsSUFBSSxFQUFLLElBQUssRUFBSyxLQUFLLEVBR2hELEdBQUksT0FBTyxFQUFLLGdCQUFrQixZQUM5QixFQUFLLGdCQUFrQixHQUN2QixFQUFLLGNBQWdCLEdBQVMscUJBRWxDLE9BQU8sR0FDUixJQUF3QixlQUFlLENBQXFCLEVBQUcsQ0FFOUQsT0FEQSxJQUF1QixLQUFNLEdBQUksR0FBdUIsS0FBTSxHQUFJLElBQUssRUFBa0IsSUFBTSxNQUFNLFFBQVEsUUFBUSxFQUFFLEtBQUssSUFBTSxTQUF5QyxDQUFDLEdBQUcsZ0JBQWlCLElBQUssRUFBa0IsRUFDaE4sR0FBdUIsS0FBTSxHQUFJLElBQUssRUFBa0IsR0FRbkUsR0FBcUIsQ0FBRSxNQUFZLE1BQUUsb0JDamRyQyxJQUFJLElBQW1CLElBQVEsR0FBSyxrQkFBcUIsT0FBTyxPQUFVLFFBQVEsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFJLENBQzVGLEdBQUksSUFBTyxPQUFXLEVBQUssRUFDM0IsSUFBSSxFQUFPLE9BQU8seUJBQXlCLEVBQUcsQ0FBQyxFQUMvQyxJQUFLLElBQVMsUUFBUyxHQUFRLEVBQUUsV0FBYSxFQUFLLFVBQVksRUFBSyxjQUNsRSxFQUFPLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUSxFQUFHLENBQUUsT0FBTyxFQUFFLEdBQU0sRUFFOUQsT0FBTyxlQUFlLEVBQUcsRUFBSSxDQUFJLEdBQy9CLFFBQVEsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFJLENBQ3hCLEdBQUksSUFBTyxPQUFXLEVBQUssRUFDM0IsRUFBRSxHQUFNLEVBQUUsS0FFVixJQUFnQixJQUFRLEdBQUssY0FBaUIsUUFBUSxDQUFDLEVBQUcsRUFBUyxDQUNuRSxRQUFTLEtBQUssRUFBRyxHQUFJLElBQU0sWUFBYyxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQVMsQ0FBQyxFQUFHLElBQWdCLEVBQVMsRUFBRyxDQUFDLEdBRTVILE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFNBQVcsR0FBUSxPQUFTLEdBQVEsWUFBbUIsT0FDL0QsR0FBUSxRQUFVLElBQ2xCLElBQU0sVUFDTixPQUFPLGVBQWUsR0FBUyxTQUFVLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFTLE9BQVUsQ0FBQyxFQUMzRyxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsY0FBZSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBUyxZQUFlLENBQUMsRUFDckgsVUFBdUMsRUFBTyxFQUs5QyxHQUFRLFNBQVcsSUFBSSxJQUFTLE9BS2hDLGVBQWUsR0FBTyxDQUFDLEVBQU0sQ0FDekIsT0FBTyxHQUFRLFNBQVMsUUFBUSxDQUFJLDJCQzdDdEMsUUFBUyxDQUFDLEVBQWMsQ0FtRHhCLElBQUksRUFDRixFQUFZLDZDQUNaLEVBQVcsS0FBSyxLQUNoQixFQUFZLEtBQUssTUFFakIsRUFBaUIscUJBQ2pCLEVBQWdCLEVBQWlCLHlEQUVqQyxFQUFPLGdCQUNQLEVBQVcsR0FDWCxFQUFtQixpQkFFbkIsRUFBVyxDQUFDLEVBQUcsR0FBSSxJQUFLLEtBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssWUFBTSxhQUFNLGNBQU0sY0FBSSxFQUNqRixFQUFZLElBS1osRUFBTSxJQU1SLFNBQVMsQ0FBSyxDQUFDLEVBQWMsQ0FDM0IsSUFBSSxFQUFLLEVBQWEsR0FDcEIsRUFBSSxFQUFVLFVBQVksQ0FBRSxZQUFhLEVBQVcsU0FBVSxLQUFNLFFBQVMsSUFBSyxFQUNsRixHQUFNLElBQUksRUFBVSxDQUFDLEVBVXJCLEdBQWlCLEdBYWpCLEdBQWdCLEVBTWhCLEdBQWEsR0FJYixFQUFhLEdBTWIsR0FBVSxLQUtWLEdBQVUsSUFHVixHQUFTLEdBa0JULEdBQWMsRUFJZCxHQUFnQixFQUdoQixHQUFTLENBQ1AsT0FBUSxHQUNSLFVBQVcsRUFDWCxtQkFBb0IsRUFDcEIsZUFBZ0IsSUFDaEIsaUJBQWtCLElBQ2xCLGtCQUFtQixFQUNuQix1QkFBd0IsSUFDeEIsT0FBUSxFQUNWLEVBS0EsR0FBVyx1Q0FDWCxHQUFpQyxHQWdCbkMsU0FBUyxDQUFTLENBQUMsRUFBRyxFQUFHLENBQ3ZCLElBQUksR0FBVSxHQUFHLEdBQWEsR0FBRyxHQUFHLEdBQU8sR0FBSyxHQUM5QyxFQUFJLEtBR04sS0FBTSxhQUFhLEdBQVksT0FBTyxJQUFJLEVBQVUsRUFBRyxDQUFDLEVBRXhELEdBQUksR0FBSyxLQUFNLENBRWIsR0FBSSxHQUFLLEVBQUUsZUFBaUIsR0FBTSxDQUdoQyxHQUZBLEVBQUUsRUFBSSxFQUFFLEdBRUgsRUFBRSxHQUFLLEVBQUUsRUFBSSxHQUNoQixFQUFFLEVBQUksRUFBRSxFQUFJLEtBQ1AsUUFBSSxFQUFFLEVBQUksR0FDZixFQUFFLEVBQUksQ0FBQyxFQUFFLEVBQUksQ0FBQyxFQUVkLE9BQUUsRUFBSSxFQUFFLEVBQ1IsRUFBRSxFQUFJLEVBQUUsRUFBRSxNQUFNLEVBR2xCLE9BR0YsSUFBSyxHQUFRLE9BQU8sR0FBSyxXQUFhLEVBQUksR0FBSyxFQUFHLENBTWhELEdBSEEsRUFBRSxFQUFJLEVBQUksRUFBSSxHQUFLLEdBQUssRUFBRyxJQUFNLEVBRzdCLE1BQVEsRUFBRyxDQUNiLElBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxJQUFLLEdBQUksSUFBSyxHQUFJLE1BRXJDLEdBQUksR0FBSSxHQUNOLEVBQUUsRUFBSSxFQUFFLEVBQUksS0FFWixPQUFFLEVBQUksR0FDTixFQUFFLEVBQUksQ0FBQyxDQUFDLEVBR1YsT0FHRixHQUFNLE9BQU8sQ0FBQyxFQUNULEtBRUwsSUFBSyxFQUFVLEtBQUssR0FBTSxPQUFPLENBQUMsQ0FBQyxFQUFHLE9BQU8sR0FBYSxFQUFHLEdBQUssRUFBSyxFQUV2RSxFQUFFLEVBQUksR0FBSSxXQUFXLENBQUMsR0FBSyxJQUFNLEdBQU0sR0FBSSxNQUFNLENBQUMsRUFBRyxJQUFNLEVBSTdELElBQUssR0FBSSxHQUFJLFFBQVEsR0FBRyxHQUFLLEdBQUksR0FBTSxHQUFJLFFBQVEsSUFBSyxFQUFFLEVBRzFELElBQUssR0FBSSxHQUFJLE9BQU8sSUFBSSxHQUFLLEVBQUcsQ0FHOUIsR0FBSSxHQUFJLEVBQUcsR0FBSSxHQUNmLEtBQU0sR0FBSSxNQUFNLEdBQUksQ0FBQyxFQUNyQixHQUFNLEdBQUksVUFBVSxFQUFHLEVBQUMsRUFDbkIsUUFBSSxHQUFJLEVBR2IsR0FBSSxHQUFJLE9BR0wsS0FPTCxHQUpBLEVBQVMsRUFBRyxFQUFHLEdBQVMsT0FBUSxNQUFNLEVBSWxDLEdBQUssSUFBTSxHQUViLE9BREEsRUFBSSxJQUFJLEVBQVUsQ0FBQyxFQUNaLEdBQU0sRUFBRyxHQUFpQixFQUFFLEVBQUksRUFBRyxFQUFhLEVBS3pELEdBRkEsR0FBTSxPQUFPLENBQUMsRUFFVixHQUFRLE9BQU8sR0FBSyxTQUFVLENBR2hDLEdBQUksRUFBSSxHQUFLLEVBQUcsT0FBTyxHQUFhLEVBQUcsR0FBSyxHQUFPLENBQUMsRUFLcEQsR0FIQSxFQUFFLEVBQUksRUFBSSxFQUFJLEdBQUssR0FBTSxHQUFJLE1BQU0sQ0FBQyxFQUFHLElBQU0sRUFHekMsRUFBVSxPQUFTLEdBQUksUUFBUSxZQUFhLEVBQUUsRUFBRSxPQUFTLEdBQzNELE1BQU0sTUFDSixFQUFnQixDQUFDLEVBR3JCLE9BQUUsRUFBSSxHQUFJLFdBQVcsQ0FBQyxJQUFNLElBQU0sR0FBTSxHQUFJLE1BQU0sQ0FBQyxFQUFHLElBQU0sRUFHOUQsR0FBVyxHQUFTLE1BQU0sRUFBRyxDQUFDLEVBQzlCLEdBQUksR0FBSSxFQUlSLElBQUssR0FBTSxHQUFJLE9BQVEsR0FBSSxHQUFLLEtBQzlCLEdBQUksR0FBUyxRQUFRLEdBQUksR0FBSSxPQUFPLEVBQUMsQ0FBQyxFQUFJLEVBQUcsQ0FDM0MsR0FBSSxJQUFLLEtBR1AsR0FBSSxHQUFJLEdBQUcsQ0FDVCxHQUFJLEdBQ0osVUFFRyxTQUFLLElBR1YsR0FBSSxJQUFPLEdBQUksWUFBWSxJQUFNLEdBQU0sR0FBSSxZQUFZLElBQ25ELElBQU8sR0FBSSxZQUFZLElBQU0sR0FBTSxHQUFJLFlBQVksR0FBSSxDQUN6RCxHQUFjLEdBQ2QsR0FBSSxHQUNKLEdBQUksRUFDSixVQUlKLE9BQU8sR0FBYSxFQUFHLE9BQU8sQ0FBQyxFQUFHLEdBQU8sQ0FBQyxFQVM5QyxHQUpBLEdBQVEsR0FDUixHQUFNLEVBQVksR0FBSyxFQUFHLEdBQUksRUFBRSxDQUFDLEdBRzVCLEdBQUksR0FBSSxRQUFRLEdBQUcsR0FBSyxHQUFJLEdBQU0sR0FBSSxRQUFRLElBQUssRUFBRSxFQUNyRCxRQUFJLEdBQUksT0FJZixJQUFLLEdBQUksRUFBRyxHQUFJLFdBQVcsRUFBQyxJQUFNLEdBQUksTUFHdEMsSUFBSyxHQUFNLEdBQUksT0FBUSxHQUFJLGFBQWEsRUFBRyxJQUFNLEtBRWpELEdBQUksR0FBTSxHQUFJLE1BQU0sS0FBSyxFQUFHLEVBQUcsQ0FJN0IsR0FIQSxJQUFPLEdBR0gsSUFBUyxFQUFVLE9BQ3JCLEdBQU0sS0FBTyxFQUFJLEdBQW9CLElBQU0sRUFBVSxDQUFDLEdBQ3BELE1BQU0sTUFDSixFQUFpQixFQUFFLEVBQUksQ0FBRSxFQUkvQixJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUssR0FHcEIsRUFBRSxFQUFJLEVBQUUsRUFBSSxLQUdQLFFBQUksR0FBSSxHQUdiLEVBQUUsRUFBSSxDQUFDLEVBQUUsRUFBSSxDQUFDLEVBQ1QsS0FTTCxHQVJBLEVBQUUsRUFBSSxHQUNOLEVBQUUsRUFBSSxDQUFDLEVBTVAsSUFBSyxHQUFJLEdBQUssRUFDVixHQUFJLEVBQUcsSUFBSyxFQUVoQixHQUFJLEdBQUksR0FBSyxDQUNYLEdBQUksR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFJLE1BQU0sRUFBRyxFQUFDLENBQUMsRUFFaEMsSUFBSyxJQUFPLEVBQVUsR0FBSSxJQUN4QixFQUFFLEVBQUUsTUFBTSxHQUFJLE1BQU0sR0FBRyxJQUFLLENBQVEsQ0FBQyxFQUd2QyxHQUFJLEdBQVksR0FBTSxHQUFJLE1BQU0sRUFBQyxHQUFHLE9BRXBDLFNBQUssR0FHUCxLQUFPLEtBQUssSUFBTyxLQUNuQixFQUFFLEVBQUUsTUFBTSxFQUFHLEdBS2YsT0FBRSxFQUFJLENBQUMsRUFBRSxFQUFJLENBQUMsRUFRbEIsRUFBVSxNQUFRLEVBRWxCLEVBQVUsU0FBVyxFQUNyQixFQUFVLFdBQWEsRUFDdkIsRUFBVSxXQUFhLEVBQ3ZCLEVBQVUsWUFBYyxFQUN4QixFQUFVLGNBQWdCLEVBQzFCLEVBQVUsZ0JBQWtCLEVBQzVCLEVBQVUsZ0JBQWtCLEVBQzVCLEVBQVUsZ0JBQWtCLEVBQzVCLEVBQVUsaUJBQW1CLEVBQzdCLEVBQVUsT0FBUyxFQXFDbkIsRUFBVSxPQUFTLEVBQVUsSUFBTSxRQUFTLENBQUMsRUFBSyxDQUNoRCxJQUFJLEVBQUcsR0FFUCxHQUFJLEdBQU8sS0FFVCxHQUFJLE9BQU8sR0FBTyxTQUFVLENBSTFCLEdBQUksRUFBSSxlQUFlLEVBQUksZ0JBQWdCLEVBQ3pDLEdBQUksRUFBSSxHQUNSLEVBQVMsR0FBRyxFQUFHLEVBQUssQ0FBQyxFQUNyQixHQUFpQixHQUtuQixHQUFJLEVBQUksZUFBZSxFQUFJLGVBQWUsRUFDeEMsR0FBSSxFQUFJLEdBQ1IsRUFBUyxHQUFHLEVBQUcsRUFBRyxDQUFDLEVBQ25CLEdBQWdCLEdBT2xCLEdBQUksRUFBSSxlQUFlLEVBQUksZ0JBQWdCLEVBRXpDLEdBREEsR0FBSSxFQUFJLEdBQ0osSUFBSyxHQUFFLElBQ1QsRUFBUyxHQUFFLElBQUssRUFBSyxFQUFHLENBQUMsRUFDekIsRUFBUyxHQUFFLEdBQUksRUFBRyxFQUFLLENBQUMsRUFDeEIsR0FBYSxHQUFFLEdBQ2YsRUFBYSxHQUFFLEdBRWYsT0FBUyxJQUFJLEVBQUssRUFBSyxDQUFDLEVBQ3hCLEtBQWUsRUFBYSxHQUFJLEdBQUssR0FBSSxJQU83QyxHQUFJLEVBQUksZUFBZSxFQUFJLE9BQU8sRUFFaEMsR0FEQSxHQUFJLEVBQUksR0FDSixJQUFLLEdBQUUsSUFDVCxFQUFTLEdBQUUsSUFBSyxFQUFLLEdBQUksQ0FBQyxFQUMxQixFQUFTLEdBQUUsR0FBSSxFQUFHLEVBQUssQ0FBQyxFQUN4QixHQUFVLEdBQUUsR0FDWixHQUFVLEdBQUUsR0FHWixRQURBLEVBQVMsSUFBSSxFQUFLLEVBQUssQ0FBQyxFQUNwQixHQUNGLEtBQVksR0FBVSxHQUFJLEdBQUssR0FBSSxJQUVuQyxXQUFNLE1BQ0osRUFBaUIsRUFBSSxvQkFBc0IsRUFBQyxFQVFwRCxHQUFJLEVBQUksZUFBZSxFQUFJLFFBQVEsRUFFakMsR0FEQSxHQUFJLEVBQUksR0FDSixPQUFRLEdBQ1YsR0FBSSxHQUNGLEdBQUksT0FBTyxRQUFVLGFBQWUsU0FDbEMsT0FBTyxpQkFBbUIsT0FBTyxhQUNqQyxHQUFTLEdBR1QsV0FEQSxJQUFVLEdBQ0osTUFDSixFQUFpQixvQkFBb0IsRUFHekMsUUFBUyxHQUdYLFdBQU0sTUFDSixFQUFpQixFQUFJLHVCQUF5QixFQUFDLEVBTXJELEdBQUksRUFBSSxlQUFlLEVBQUksYUFBYSxFQUN0QyxHQUFJLEVBQUksR0FDUixFQUFTLEdBQUcsRUFBRyxFQUFHLENBQUMsRUFDbkIsR0FBYyxHQUtoQixHQUFJLEVBQUksZUFBZSxFQUFJLGVBQWUsRUFDeEMsR0FBSSxFQUFJLEdBQ1IsRUFBUyxHQUFHLEVBQUcsRUFBSyxDQUFDLEVBQ3JCLEdBQWdCLEdBS2xCLEdBQUksRUFBSSxlQUFlLEVBQUksUUFBUSxFQUVqQyxHQURBLEdBQUksRUFBSSxHQUNKLE9BQU8sSUFBSyxTQUFVLEdBQVMsR0FDOUIsV0FBTSxNQUNULEVBQWlCLEVBQUksbUJBQXFCLEVBQUMsRUFLL0MsR0FBSSxFQUFJLGVBQWUsRUFBSSxVQUFVLEVBS25DLEdBSkEsR0FBSSxFQUFJLEdBSUosT0FBTyxJQUFLLFdBQWEsd0JBQXdCLEtBQUssRUFBQyxFQUN6RCxHQUFpQyxHQUFFLE1BQU0sRUFBRyxFQUFFLEdBQUssYUFDbkQsR0FBVyxHQUVYLFdBQU0sTUFDSixFQUFpQixFQUFJLGFBQWUsRUFBQyxFQU8zQyxXQUFNLE1BQ0osRUFBaUIsb0JBQXNCLENBQUcsRUFJaEQsTUFBTyxDQUNMLGVBQWdCLEdBQ2hCLGNBQWUsR0FDZixlQUFnQixDQUFDLEdBQVksQ0FBVSxFQUN2QyxNQUFPLENBQUMsR0FBUyxFQUFPLEVBQ3hCLE9BQVEsR0FDUixZQUFhLEdBQ2IsY0FBZSxHQUNmLE9BQVEsR0FDUixTQUFVLEVBQ1osR0FhRixFQUFVLFlBQWMsUUFBUyxDQUFDLEVBQUcsQ0FDbkMsSUFBSyxHQUFLLEVBQUUsZUFBaUIsR0FBTSxNQUFPLEdBQzFDLElBQUssRUFBVSxNQUFPLE1BQU8sR0FFN0IsSUFBSSxFQUFHLEdBQ0wsR0FBSSxFQUFFLEVBQ04sR0FBSSxFQUFFLEVBQ04sR0FBSSxFQUFFLEVBRVIsRUFBSyxHQUFJLENBQUMsRUFBRSxTQUFTLEtBQUssRUFBQyxHQUFLLGtCQUU5QixJQUFLLEtBQU0sR0FBSyxLQUFNLEtBQU8sS0FBTSxHQUFPLElBQUssR0FBTyxLQUFNLEVBQVUsRUFBQyxFQUFHLENBR3hFLEdBQUksR0FBRSxLQUFPLEVBQUcsQ0FDZCxHQUFJLEtBQU0sR0FBSyxHQUFFLFNBQVcsRUFBRyxNQUFPLEdBQ3RDLFFBS0YsR0FEQSxHQUFLLEdBQUksR0FBSyxFQUNWLEVBQUksRUFBRyxHQUFLLEVBSWhCLEdBQUksT0FBTyxHQUFFLEVBQUUsRUFBRSxRQUFVLEVBQUcsQ0FFNUIsSUFBSyxFQUFJLEVBQUcsRUFBSSxHQUFFLE9BQVEsSUFFeEIsR0FEQSxHQUFJLEdBQUUsR0FDRixHQUFJLEdBQUssSUFBSyxHQUFRLEtBQU0sRUFBVSxFQUFDLEVBQUcsUUFJaEQsR0FBSSxLQUFNLEVBQUcsTUFBTyxLQUtuQixRQUFJLEtBQU0sTUFBUSxLQUFNLE9BQVMsS0FBTSxNQUFRLEtBQU0sR0FBSyxLQUFNLElBQ3JFLE1BQU8sR0FHVCxNQUFNLE1BQ0gsRUFBaUIsc0JBQXdCLENBQUMsR0FTL0MsRUFBVSxRQUFVLEVBQVUsSUFBTSxRQUFTLEVBQUcsQ0FDOUMsT0FBTyxHQUFTLFVBQVcsRUFBRSxHQVMvQixFQUFVLFFBQVUsRUFBVSxJQUFNLFFBQVMsRUFBRyxDQUM5QyxPQUFPLEdBQVMsVUFBVyxDQUFDLEdBYzlCLEVBQVUsT0FBVSxRQUFTLEVBQUcsQ0FDOUIsSUFBSSxFQUFVLGlCQU1WLEVBQWtCLEtBQUssT0FBTyxFQUFJLEVBQVcsUUFDOUMsUUFBUyxFQUFHLENBQUUsT0FBTyxFQUFVLEtBQUssT0FBTyxFQUFJLENBQU8sR0FDdEQsUUFBUyxFQUFHLENBQUUsT0FBUyxLQUFLLE9BQU8sRUFBSSxXQUFhLEdBQUssU0FDeEQsS0FBSyxPQUFPLEVBQUksUUFBVyxJQUUvQixPQUFPLFFBQVMsQ0FBQyxHQUFJLENBQ25CLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUNkLEdBQUksRUFDSixHQUFJLENBQUMsRUFDTCxFQUFPLElBQUksRUFBVSxFQUFHLEVBRTFCLEdBQUksSUFBTSxLQUFNLEdBQUssR0FDaEIsT0FBUyxHQUFJLEVBQUcsQ0FBRyxFQUl4QixHQUZBLEdBQUksRUFBUyxHQUFLLENBQVEsRUFFdEIsR0FHRixHQUFJLE9BQU8sZ0JBQWlCLENBRTFCLEdBQUksT0FBTyxnQkFBZ0IsSUFBSSxZQUFZLElBQUssQ0FBQyxDQUFDLEVBRWxELEtBQU8sR0FBSSxJQWNULEdBTkEsR0FBSSxHQUFFLElBQUssUUFBVyxHQUFFLEdBQUksS0FBTyxJQU0vQixJQUFLLGlCQUNQLEdBQUksT0FBTyxnQkFBZ0IsSUFBSSxZQUFZLENBQUMsQ0FBQyxFQUM3QyxHQUFFLElBQUssR0FBRSxHQUNULEdBQUUsR0FBSSxHQUFLLEdBQUUsR0FLYixRQUFFLEtBQUssR0FBSSxlQUFJLEVBQ2YsSUFBSyxFQUdULEdBQUksR0FBSSxFQUdILFFBQUksT0FBTyxZQUFhLENBRzdCLEdBQUksT0FBTyxZQUFZLElBQUssQ0FBQyxFQUU3QixLQUFPLEdBQUksSUFVVCxHQUpBLElBQU0sR0FBRSxJQUFLLElBQU0sZ0JBQW9CLEdBQUUsR0FBSSxHQUFLLGNBQzlDLEdBQUUsR0FBSSxHQUFLLFdBQWdCLEdBQUUsR0FBSSxHQUFLLFVBQ3RDLEdBQUUsR0FBSSxJQUFNLEtBQU8sR0FBRSxHQUFJLElBQU0sR0FBSyxHQUFFLEdBQUksR0FFMUMsSUFBSyxpQkFDUCxPQUFPLFlBQVksQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFDLEVBSS9CLFFBQUUsS0FBSyxHQUFJLGVBQUksRUFDZixJQUFLLEVBR1QsR0FBSSxHQUFJLEVBR1IsV0FEQSxHQUFTLEdBQ0gsTUFDSixFQUFpQixvQkFBb0IsRUFLM0MsSUFBSyxJQUVILEtBQU8sR0FBSSxJQUVULEdBREEsR0FBSSxFQUFlLEVBQ2YsR0FBSSxpQkFBTSxHQUFFLE1BQU8sR0FBSSxnQkFRL0IsR0FKQSxHQUFJLEdBQUUsRUFBRSxJQUNSLElBQU0sRUFHRixJQUFLLEdBQ1AsR0FBSSxFQUFTLEVBQVcsSUFDeEIsR0FBRSxJQUFLLEVBQVUsR0FBSSxFQUFDLEVBQUksR0FJNUIsS0FBTyxHQUFFLE1BQU8sRUFBRyxHQUFFLElBQUksRUFBRyxNQUc1QixHQUFJLEdBQUksRUFDTixHQUFJLENBQUMsR0FBSSxDQUFDLEVBQ0wsS0FHTCxJQUFLLEdBQUksR0FBSyxHQUFFLEtBQU8sRUFBRyxHQUFFLE9BQU8sRUFBRyxDQUFDLEVBQUcsSUFBSyxHQUcvQyxJQUFLLEdBQUksRUFBRyxHQUFJLEdBQUUsR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLE1BR3hDLEdBQUksR0FBSSxFQUFVLElBQUssRUFBVyxHQUtwQyxPQUZBLEVBQUssRUFBSSxHQUNULEVBQUssRUFBSSxHQUNGLElBRVIsRUFRSCxFQUFVLElBQU0sUUFBUyxFQUFHLENBQzFCLElBQUksRUFBSSxFQUNOLEVBQU8sVUFDUCxHQUFNLElBQUksRUFBVSxFQUFLLEVBQUUsRUFDN0IsS0FBTyxFQUFJLEVBQUssUUFBUyxHQUFNLEdBQUksS0FBSyxFQUFLLElBQUksRUFDakQsT0FBTyxJQVFULEVBQWUsUUFBUyxFQUFHLENBQ3pCLElBQUksRUFBVSxhQU9kLFNBQVMsQ0FBUyxDQUFDLEdBQUssR0FBUSxHQUFTLEdBQVUsQ0FDakQsSUFBSSxHQUNGLEdBQU0sQ0FBQyxDQUFDLEVBQ1IsR0FDQSxHQUFJLEVBQ0osRUFBTSxHQUFJLE9BRVosS0FBTyxHQUFJLEdBQU0sQ0FDZixJQUFLLEdBQU8sR0FBSSxPQUFRLEtBQVEsR0FBSSxLQUFTLElBRTdDLEdBQUksSUFBTSxHQUFTLFFBQVEsR0FBSSxPQUFPLElBQUcsQ0FBQyxFQUUxQyxJQUFLLEdBQUksRUFBRyxHQUFJLEdBQUksT0FBUSxLQUUxQixHQUFJLEdBQUksSUFBSyxHQUFVLEVBQUcsQ0FDeEIsR0FBSSxHQUFJLEdBQUksSUFBTSxLQUFNLEdBQUksR0FBSSxHQUFLLEVBQ3JDLEdBQUksR0FBSSxJQUFNLEdBQUksSUFBSyxHQUFVLEVBQ2pDLEdBQUksS0FBTSxJQUtoQixPQUFPLEdBQUksUUFBUSxFQU1yQixPQUFPLFFBQVMsQ0FBQyxHQUFLLEdBQVEsR0FBUyxHQUFNLEdBQWtCLENBQzdELElBQUksR0FBVSxHQUFHLEdBQUcsRUFBRyxHQUFHLEdBQUcsR0FBSSxHQUMvQixHQUFJLEdBQUksUUFBUSxHQUFHLEVBQ25CLEdBQUssR0FDTCxHQUFLLEdBR1AsR0FBSSxJQUFLLEVBQ1AsRUFBSSxHQUdKLEdBQWdCLEVBQ2hCLEdBQU0sR0FBSSxRQUFRLElBQUssRUFBRSxFQUN6QixHQUFJLElBQUksRUFBVSxFQUFNLEVBQ3hCLEdBQUksR0FBRSxJQUFJLEdBQUksT0FBUyxFQUFDLEVBQ3hCLEdBQWdCLEVBS2hCLEdBQUUsRUFBSSxFQUFVLEVBQWEsRUFBYyxHQUFFLENBQUMsRUFBRyxHQUFFLEVBQUcsR0FBRyxFQUN4RCxHQUFJLEdBQVMsQ0FBTyxFQUNyQixHQUFFLEVBQUksR0FBRSxFQUFFLE9BS1osR0FBSyxFQUFVLEdBQUssR0FBUSxHQUFTLElBQ2pDLEdBQVcsR0FBVSxJQUNyQixHQUFXLEVBQVMsR0FBUyxFQUdqQyxHQUFJLEVBQUksR0FBRyxPQUdYLEtBQU8sR0FBRyxFQUFFLElBQU0sRUFBRyxHQUFHLElBQUksR0FHNUIsSUFBSyxHQUFHLEdBQUksT0FBTyxHQUFTLE9BQU8sQ0FBQyxFQUdwQyxHQUFJLEdBQUksSUFDSixHQUVGLFFBQUUsRUFBSSxHQUNOLEdBQUUsRUFBSSxHQUdOLEdBQUUsRUFBSSxHQUNOLEdBQUksRUFBSSxHQUFHLEdBQUcsR0FBSSxHQUFJLEVBQU8sRUFDN0IsR0FBSyxHQUFFLEVBQ1AsR0FBSSxHQUFFLEVBQ04sR0FBSSxHQUFFLEVBdUJSLEdBakJBLEdBQUksR0FBSSxHQUFLLEVBR2IsR0FBSSxHQUFHLElBSVAsRUFBSSxHQUFVLEVBQ2QsR0FBSSxJQUFLLEdBQUksR0FBSyxHQUFHLEdBQUksSUFBTSxLQUUvQixHQUFJLEdBQUssR0FBSyxJQUFLLE1BQVEsTUFBTyxJQUFNLEdBQUssS0FBTyxHQUFFLEVBQUksRUFBSSxFQUFJLElBQzFELEdBQUksR0FBSyxJQUFLLElBQUssSUFBTSxHQUFLLElBQUssSUFBTSxHQUFLLEdBQUcsR0FBSSxHQUFLLEdBQzNELEtBQU8sR0FBRSxFQUFJLEVBQUksRUFBSSxJQUt4QixHQUFJLElBQU0sR0FBRyxHQUdmLEdBQU0sR0FBSSxFQUFhLEdBQVMsT0FBTyxDQUFDLEdBQUksR0FBSSxHQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUksR0FBUyxPQUFPLENBQUMsRUFDbEYsS0FNTCxHQUhBLEdBQUcsT0FBUyxHQUdSLElBR0YsTUFBTyxLQUFXLEdBQUcsRUFBRSxJQUFLLElBRzFCLEdBRkEsR0FBRyxJQUFLLEdBRUgsS0FDRCxHQUNGLEdBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBTXhCLElBQUssRUFBSSxHQUFHLFFBQVMsR0FBRyxFQUFFLEtBRzFCLElBQUssR0FBSSxFQUFHLEdBQU0sR0FBSSxJQUFLLEVBQUcsSUFBTyxHQUFTLE9BQU8sR0FBRyxLQUFJLEdBRzVELEdBQU0sRUFBYSxHQUFLLEdBQUcsR0FBUyxPQUFPLENBQUMsQ0FBQyxFQUkvQyxPQUFPLEtBRVIsRUFJSCxFQUFPLFFBQVMsRUFBRyxDQUdqQixTQUFTLENBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBTSxDQUM1QixJQUFJLEdBQUcsR0FBTSxHQUFLLEdBQ2hCLEVBQVEsRUFDUixHQUFJLEdBQUUsT0FDTixHQUFNLEdBQUksRUFDVixHQUFNLEdBQUksRUFBWSxFQUV4QixJQUFLLEdBQUksR0FBRSxNQUFNLEVBQUcsTUFDbEIsR0FBTSxHQUFFLElBQUssRUFDYixHQUFNLEdBQUUsSUFBSyxFQUFZLEVBQ3pCLEdBQUksR0FBTSxHQUFNLEdBQU0sR0FDdEIsR0FBTyxHQUFNLEdBQVEsR0FBSSxFQUFhLEVBQWEsRUFDbkQsR0FBUyxHQUFPLEdBQU8sSUFBTSxHQUFJLEVBQVksR0FBSyxHQUFNLEdBQ3hELEdBQUUsSUFBSyxHQUFPLEdBR2hCLEdBQUksRUFBTyxHQUFJLENBQUMsQ0FBSyxFQUFFLE9BQU8sRUFBQyxFQUUvQixPQUFPLEdBR1QsU0FBUyxDQUFPLENBQUMsR0FBRyxHQUFHLEdBQUksR0FBSSxDQUM3QixJQUFJLEdBQUcsR0FFUCxHQUFJLElBQU0sR0FDUixHQUFNLEdBQUssR0FBSyxFQUFJLEdBR3BCLFNBQUssR0FBSSxHQUFNLEVBQUcsR0FBSSxHQUFJLEtBRXhCLEdBQUksR0FBRSxLQUFNLEdBQUUsSUFBSSxDQUNoQixHQUFNLEdBQUUsSUFBSyxHQUFFLElBQUssRUFBSSxHQUN4QixNQUtOLE9BQU8sR0FHVCxTQUFTLEVBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBSSxHQUFNLENBQ2hDLElBQUksR0FBSSxFQUdSLEtBQU8sTUFDTCxHQUFFLEtBQU8sR0FDVCxHQUFJLEdBQUUsSUFBTSxHQUFFLElBQU0sRUFBSSxFQUN4QixHQUFFLElBQU0sR0FBSSxHQUFPLEdBQUUsSUFBTSxHQUFFLElBSS9CLE1BQVEsR0FBRSxJQUFNLEdBQUUsT0FBUyxFQUFHLEdBQUUsT0FBTyxFQUFHLENBQUMsSUFJN0MsT0FBTyxRQUFTLENBQUMsR0FBRyxHQUFHLEdBQUksR0FBSSxHQUFNLENBQ25DLElBQUksR0FBSyxHQUFHLEVBQUcsR0FBTSxHQUFHLEdBQU0sR0FBTyxHQUFHLEdBQUksR0FBSyxHQUFNLEdBQU0sR0FBSSxHQUFJLEdBQ25FLEdBQUksR0FDSixHQUFJLEdBQUUsR0FBSyxHQUFFLEVBQUksRUFBSSxHQUNyQixHQUFLLEdBQUUsRUFDUCxHQUFLLEdBQUUsRUFHVCxJQUFLLEtBQU8sR0FBRyxLQUFPLEtBQU8sR0FBRyxHQUU5QixPQUFPLElBQUksR0FHVCxHQUFFLElBQU0sR0FBRSxJQUFNLEdBQUssSUFBTSxHQUFHLElBQU0sR0FBRyxJQUFNLElBQU0sSUFHbkQsSUFBTSxHQUFHLElBQU0sSUFBTSxHQUFLLEdBQUksRUFBSSxHQUFJLENBQ3pDLEVBUUQsR0FMQSxHQUFJLElBQUksRUFBVSxFQUFDLEVBQ25CLEdBQUssR0FBRSxFQUFJLENBQUMsRUFDWixHQUFJLEdBQUUsRUFBSSxHQUFFLEVBQ1osR0FBSSxHQUFLLEdBQUksR0FFUixHQUNILEdBQU8sRUFDUCxHQUFJLEVBQVMsR0FBRSxFQUFJLENBQVEsRUFBSSxFQUFTLEdBQUUsRUFBSSxDQUFRLEVBQ3RELEdBQUksR0FBSSxFQUFXLEVBS3JCLElBQUssRUFBSSxFQUFHLEdBQUcsS0FBTyxHQUFHLElBQU0sR0FBSSxLQUVuQyxHQUFJLEdBQUcsSUFBTSxHQUFHLElBQU0sR0FBSSxLQUUxQixHQUFJLEdBQUksRUFDTixHQUFHLEtBQUssQ0FBQyxFQUNULEdBQU8sR0FDRixLQVlMLEdBWEEsR0FBSyxHQUFHLE9BQ1IsR0FBSyxHQUFHLE9BQ1IsRUFBSSxFQUNKLElBQUssRUFJTCxHQUFJLEVBQVUsSUFBUSxHQUFHLEdBQUssRUFBRSxFQUk1QixHQUFJLEVBQ04sR0FBSyxFQUFTLEdBQUksR0FBRyxFQUFJLEVBQ3pCLEdBQUssRUFBUyxHQUFJLEdBQUcsRUFBSSxFQUN6QixHQUFLLEdBQUcsT0FDUixHQUFLLEdBQUcsT0FHVixHQUFLLEdBQ0wsR0FBTSxHQUFHLE1BQU0sRUFBRyxFQUFFLEVBQ3BCLEdBQU8sR0FBSSxPQUdYLEtBQU8sR0FBTyxHQUFJLEdBQUksTUFBVSxHQUloQyxHQUhBLEdBQUssR0FBRyxNQUFNLEVBQ2QsR0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFDbEIsR0FBTSxHQUFHLEdBQ0wsR0FBRyxJQUFNLEdBQU8sRUFBRyxLQUl2QixFQUFHLENBT0QsR0FOQSxHQUFJLEVBR0osR0FBTSxFQUFRLEdBQUksR0FBSyxHQUFJLEVBQUksRUFHM0IsR0FBTSxFQUFHLENBS1gsR0FEQSxHQUFPLEdBQUksR0FDUCxJQUFNLEdBQU0sR0FBTyxHQUFPLElBQVEsR0FBSSxJQUFNLEdBZ0JoRCxHQWJBLEdBQUksRUFBVSxHQUFPLEVBQUcsRUFhcEIsR0FBSSxFQUFHLENBR1QsR0FBSSxJQUFLLEdBQU0sR0FBSSxHQUFPLEVBRzFCLEdBQU8sRUFBUyxHQUFJLEdBQUcsRUFBSSxFQUMzQixHQUFRLEdBQUssT0FDYixHQUFPLEdBQUksT0FNWCxNQUFPLEVBQVEsR0FBTSxHQUFLLEdBQU8sRUFBSSxHQUFLLEVBQ3hDLEtBR0EsR0FBUyxHQUFNLEdBQUssR0FBUSxHQUFLLEdBQUksR0FBTyxFQUFJLEVBQ2hELEdBQVEsR0FBSyxPQUNiLEdBQU0sRUFFSCxLQU1MLEdBQUksSUFBSyxFQUdQLEdBQU0sR0FBSSxFQUlaLEdBQU8sR0FBRyxNQUFNLEVBQ2hCLEdBQVEsR0FBSyxPQUdmLEdBQUksR0FBUSxHQUFNLEdBQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFJLEVBT3hDLEdBSkEsR0FBUyxHQUFLLEdBQU0sR0FBTSxFQUFJLEVBQzlCLEdBQU8sR0FBSSxPQUdQLElBQU8sR0FNVCxNQUFPLEVBQVEsR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFJLEVBQ2xDLEtBR0EsR0FBUyxHQUFLLEdBQUssR0FBTyxHQUFLLEdBQUksR0FBTSxFQUFJLEVBQzdDLEdBQU8sR0FBSSxPQUdWLFFBQUksS0FBUSxFQUNqQixLQUNBLEdBQU0sQ0FBQyxDQUFDLEVBT1YsR0FIQSxHQUFHLEtBQU8sR0FHTixHQUFJLEdBQ04sR0FBSSxNQUFVLEdBQUcsS0FBTyxFQUV4QixRQUFNLENBQUMsR0FBRyxHQUFHLEVBQ2IsR0FBTyxTQUVELEtBQU8sSUFBTSxHQUFJLElBQU0sT0FBUyxNQUsxQyxHQUhBLEdBQU8sR0FBSSxJQUFNLE1BR1osR0FBRyxHQUFJLEdBQUcsT0FBTyxFQUFHLENBQUMsRUFHNUIsR0FBSSxJQUFRLEVBQU0sQ0FHaEIsSUFBSyxFQUFJLEVBQUcsR0FBSSxHQUFHLEdBQUksSUFBSyxHQUFJLElBQUssR0FBSSxLQUV6QyxHQUFNLEdBQUcsSUFBTSxHQUFFLEVBQUksRUFBSSxHQUFJLEVBQVcsR0FBSyxFQUFHLEdBQUksRUFBSSxFQUl4RCxRQUFFLEVBQUksR0FDTixHQUFFLEdBQUssR0FHVCxPQUFPLEtBRVIsRUFZSCxTQUFTLEVBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLENBQzVCLElBQUksR0FBSSxHQUFHLEdBQUksR0FBSyxHQUVwQixHQUFJLElBQU0sS0FBTSxHQUFLLEdBQ2hCLE9BQVMsR0FBSSxFQUFHLENBQUMsRUFFdEIsSUFBSyxFQUFFLEVBQUcsT0FBTyxFQUFFLFNBQVMsRUFLNUIsR0FIQSxHQUFLLEVBQUUsRUFBRSxHQUNULEdBQUssRUFBRSxFQUVILEdBQUssS0FDUCxHQUFNLEVBQWMsRUFBRSxDQUFDLEVBQ3ZCLEdBQU0sSUFBTSxHQUFLLElBQU0sSUFBTSxJQUFNLElBQWMsSUFBTSxHQUNwRCxFQUFjLEdBQUssRUFBRSxFQUNyQixFQUFhLEdBQUssR0FBSSxHQUFHLEVBZTVCLFFBYkEsRUFBSSxHQUFNLElBQUksRUFBVSxDQUFDLEVBQUcsRUFBRyxFQUFFLEVBR2pDLEdBQUksRUFBRSxFQUVOLEdBQU0sRUFBYyxFQUFFLENBQUMsRUFDdkIsR0FBTSxHQUFJLE9BT04sSUFBTSxHQUFLLElBQU0sSUFBTSxHQUFLLElBQUssSUFBSyxJQUFhLENBR3JELEtBQU8sR0FBTSxFQUFHLElBQU8sSUFBSyxNQUM1QixHQUFNLEVBQWMsR0FBSyxFQUFDLEVBUTFCLFFBSkEsR0FBSyxHQUNMLEdBQU0sRUFBYSxHQUFLLEdBQUcsR0FBRyxFQUcxQixHQUFJLEVBQUksSUFDVixLQUFNLEVBQUksRUFBRyxJQUFLLElBQU8sSUFBSyxJQUFLLElBQU8sTUFHMUMsUUFEQSxHQUFLLEdBQUksR0FDTCxFQUFJLEVBQUcsQ0FDVCxHQUFJLEdBQUksR0FBSyxHQUFLLElBQU8sSUFDekIsS0FBTyxJQUFLLElBQU8sTUFNM0IsT0FBTyxFQUFFLEVBQUksR0FBSyxHQUFLLElBQU0sR0FBTSxHQU1yQyxTQUFTLEVBQVEsQ0FBQyxFQUFNLEVBQUcsQ0FDekIsSUFBSSxHQUFHLEdBQ0wsR0FBSSxFQUNKLEdBQUksSUFBSSxFQUFVLEVBQUssRUFBRSxFQUUzQixLQUFPLEdBQUksRUFBSyxPQUFRLEtBRXRCLEdBREEsR0FBSSxJQUFJLEVBQVUsRUFBSyxHQUFFLEdBQ3BCLEdBQUUsSUFBTSxHQUFJLEVBQVEsR0FBRyxFQUFDLEtBQU8sR0FBSyxLQUFNLEdBQUssR0FBRSxJQUFNLEVBQzFELEdBQUksR0FJUixPQUFPLEdBUVQsU0FBUyxFQUFTLENBQUMsRUFBRyxFQUFHLEdBQUcsQ0FDMUIsSUFBSSxHQUFJLEVBQ04sR0FBSSxFQUFFLE9BR1IsTUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksR0FHdEIsSUFBSyxHQUFJLEVBQUUsR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLE1BR2pDLElBQUssR0FBSSxHQUFJLEdBQUksRUFBVyxHQUFLLEdBRy9CLEVBQUUsRUFBSSxFQUFFLEVBQUksS0FHUCxRQUFJLEdBQUksR0FHYixFQUFFLEVBQUksQ0FBQyxFQUFFLEVBQUksQ0FBQyxFQUVkLE9BQUUsRUFBSSxHQUNOLEVBQUUsRUFBSSxFQUdSLE9BQU8sRUFLVCxHQUFnQixRQUFTLEVBQUcsQ0FDMUIsSUFBSSxFQUFhLDhCQUNmLEVBQVcsY0FDWCxHQUFZLGNBQ1osR0FBa0IscUJBQ2xCLEdBQW1CLDZCQUVyQixPQUFPLFFBQVMsQ0FBQyxHQUFHLEdBQUssR0FBTyxHQUFHLENBQ2pDLElBQUksR0FDRixFQUFJLEdBQVEsR0FBTSxHQUFJLFFBQVEsR0FBa0IsRUFBRSxFQUdwRCxHQUFJLEdBQWdCLEtBQUssQ0FBQyxFQUN4QixHQUFFLEVBQUksTUFBTSxDQUFDLEVBQUksS0FBTyxFQUFJLEVBQUksR0FBSyxFQUNoQyxLQUNMLElBQUssR0FBTyxDQVFWLEdBTEEsRUFBSSxFQUFFLFFBQVEsRUFBWSxRQUFTLENBQUMsR0FBRyxHQUFJLEdBQUksQ0FFN0MsT0FEQSxJQUFRLEdBQUssR0FBRyxZQUFZLElBQU0sSUFBTSxHQUFLLElBQU0sSUFBTSxFQUFJLEdBQ3JELElBQUssSUFBSyxHQUFPLEdBQUssR0FDL0IsRUFFRyxHQUNGLEdBQU8sR0FHUCxFQUFJLEVBQUUsUUFBUSxFQUFVLElBQUksRUFBRSxRQUFRLEdBQVcsTUFBTSxFQUd6RCxHQUFJLElBQU8sRUFBRyxPQUFPLElBQUksRUFBVSxFQUFHLEVBQUksRUFLNUMsR0FBSSxFQUFVLE1BQ1osTUFBTSxNQUNILEVBQWlCLFNBQVcsR0FBSSxTQUFXLEdBQUksSUFBTSxZQUFjLEVBQUcsRUFJM0UsR0FBRSxFQUFJLEtBR1IsR0FBRSxFQUFJLEdBQUUsRUFBSSxPQUViLEVBT0gsU0FBUyxFQUFLLENBQUMsRUFBRyxFQUFJLEdBQUksR0FBRyxDQUMzQixJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFJLEVBQ3JCLEdBQUssRUFBRSxFQUNQLEdBQVMsRUFHWCxHQUFJLEdBQUksQ0FRTixFQUFLLENBR0gsSUFBSyxHQUFJLEVBQUcsR0FBSSxHQUFHLEdBQUksSUFBSyxHQUFJLElBQUssR0FBSSxNQUl6QyxHQUhBLEdBQUksRUFBSyxHQUdMLEdBQUksRUFDTixJQUFLLEVBQ0wsR0FBSSxFQUNKLEdBQUksR0FBRyxHQUFLLEdBR1osRUFBSyxFQUFVLEdBQUksR0FBTyxHQUFJLEdBQUksR0FBSyxFQUFFLEVBSXpDLFFBRkEsR0FBSyxHQUFVLEdBQUksR0FBSyxDQUFRLEVBRTVCLElBQU0sR0FBRyxPQUVYLEdBQUksR0FBRyxDQUdMLEtBQU8sR0FBRyxRQUFVLEdBQUksR0FBRyxLQUFLLENBQUMsR0FDakMsR0FBSSxFQUFLLEVBQ1QsR0FBSSxFQUNKLElBQUssRUFDTCxHQUFJLEdBQUksRUFBVyxFQUVuQixhQUVHLEtBQ0wsR0FBSSxHQUFJLEdBQUcsSUFHWCxJQUFLLEdBQUksRUFBRyxJQUFLLEdBQUksSUFBSyxHQUFJLE1BRzlCLElBQUssRUFJTCxHQUFJLEdBQUksRUFBVyxHQUduQixFQUFLLEdBQUksRUFBSSxFQUFJLEVBQVUsR0FBSSxHQUFPLEdBQUksR0FBSSxHQUFLLEVBQUUsRUFtQnpELEdBZkEsR0FBSSxJQUFLLEVBQUssR0FLYixHQUFHLEdBQUssSUFBTSxPQUFTLEdBQUksRUFBSSxHQUFJLEdBQUksR0FBTyxHQUFJLEdBQUksSUFFdkQsR0FBSSxHQUFLLEdBQ0wsR0FBTSxNQUFPLElBQU0sR0FBSyxLQUFPLEVBQUUsRUFBSSxFQUFJLEVBQUksSUFDOUMsRUFBSyxHQUFLLEdBQU0sSUFBTSxJQUFNLEdBQUssSUFBSyxJQUFNLElBRzNDLEdBQUksRUFBSSxHQUFJLEVBQUksR0FBSSxHQUFPLEdBQUksSUFBSyxFQUFJLEdBQUcsR0FBSyxJQUFNLEdBQU0sR0FDN0QsS0FBTyxFQUFFLEVBQUksRUFBSSxFQUFJLElBRXBCLEVBQUssSUFBTSxHQUFHLEdBQUksQ0FHcEIsR0FGQSxHQUFHLE9BQVMsRUFFUixHQUdGLEdBQU0sRUFBRSxFQUFJLEVBR1osR0FBRyxHQUFLLEdBQVEsR0FBVyxFQUFLLEdBQVksR0FDNUMsRUFBRSxHQUFLLEdBQU0sRUFJYixRQUFHLEdBQUssRUFBRSxFQUFJLEVBR2hCLE9BQU8sRUFJVCxHQUFJLElBQUssRUFDUCxHQUFHLE9BQVMsR0FDWixHQUFJLEVBQ0osS0FFQSxRQUFHLE9BQVMsR0FBSyxFQUNqQixHQUFJLEdBQU8sRUFBVyxJQUl0QixHQUFHLElBQU0sR0FBSSxFQUFJLEVBQVUsR0FBSSxHQUFPLEdBQUksSUFBSyxHQUFPLEdBQUUsRUFBSSxHQUFJLEVBSWxFLEdBQUksR0FFRixPQUdFLEdBQUksSUFBTSxFQUFHLENBR1gsSUFBSyxHQUFJLEVBQUcsR0FBSSxHQUFHLEdBQUksSUFBSyxHQUFJLElBQUssR0FBSSxNQUN6QyxHQUFJLEdBQUcsSUFBTSxHQUNiLElBQUssR0FBSSxFQUFHLElBQUssR0FBSSxJQUFLLEdBQUksTUFHOUIsR0FBSSxJQUFLLElBRVAsR0FEQSxFQUFFLElBQ0UsR0FBRyxJQUFNLEVBQU0sR0FBRyxHQUFLLEVBRzdCLE1BQ0ssS0FFTCxHQURBLEdBQUcsS0FBTyxHQUNOLEdBQUcsS0FBTyxFQUFNLE1BQ3BCLEdBQUcsTUFBUSxFQUNYLEdBQUksRUFNVixJQUFLLEdBQUksR0FBRyxPQUFRLEdBQUcsRUFBRSxNQUFPLEVBQUcsR0FBRyxJQUFJLElBSTVDLEdBQUksRUFBRSxFQUFJLEdBQ1IsRUFBRSxFQUFJLEVBQUUsRUFBSSxLQUdQLFFBQUksRUFBRSxFQUFJLEdBQ2YsRUFBRSxFQUFJLENBQUMsRUFBRSxFQUFJLENBQUMsRUFJbEIsT0FBTyxFQUlULFNBQVMsRUFBTyxDQUFDLEVBQUcsQ0FDbEIsSUFBSSxFQUNGLEdBQUksRUFBRSxFQUVSLEdBQUksS0FBTSxLQUFNLE9BQU8sRUFBRSxTQUFTLEVBUWxDLE9BTkEsRUFBTSxFQUFjLEVBQUUsQ0FBQyxFQUV2QixFQUFNLElBQUssSUFBYyxJQUFLLEVBQzFCLEVBQWMsRUFBSyxFQUFDLEVBQ3BCLEVBQWEsRUFBSyxHQUFHLEdBQUcsRUFFckIsRUFBRSxFQUFJLEVBQUksSUFBTSxFQUFNLEVBOHFDL0IsR0FwcUNBLEVBQUUsY0FBZ0IsRUFBRSxJQUFNLFFBQVMsRUFBRyxDQUNwQyxJQUFJLEVBQUksSUFBSSxFQUFVLElBQUksRUFDMUIsR0FBSSxFQUFFLEVBQUksRUFBRyxFQUFFLEVBQUksRUFDbkIsT0FBTyxHQVdULEVBQUUsV0FBYSxRQUFTLENBQUMsRUFBRyxFQUFHLENBQzdCLE9BQU8sRUFBUSxLQUFNLElBQUksRUFBVSxFQUFHLENBQUMsQ0FBQyxHQWlCMUMsRUFBRSxjQUFnQixFQUFFLEdBQUssUUFBUyxDQUFDLEVBQUksRUFBSSxDQUN6QyxJQUFJLEdBQUcsR0FBRyxHQUNSLEdBQUksS0FFTixHQUFJLEdBQU0sS0FBTSxDQUVkLEdBREEsRUFBUyxFQUFJLEVBQUcsQ0FBRyxFQUNmLEdBQU0sS0FBTSxFQUFLLEdBQ2hCLE9BQVMsRUFBSSxFQUFHLENBQUMsRUFFdEIsT0FBTyxHQUFNLElBQUksRUFBVSxFQUFDLEVBQUcsRUFBSyxHQUFFLEVBQUksRUFBRyxDQUFFLEVBR2pELEtBQU0sR0FBSSxHQUFFLEdBQUksT0FBTyxLQUl2QixHQUhBLEtBQU0sR0FBSSxHQUFFLE9BQVMsR0FBSyxFQUFTLEtBQUssRUFBSSxDQUFRLEdBQUssRUFHckQsR0FBSSxHQUFFLElBQUksS0FBTyxHQUFJLElBQU0sRUFBRyxJQUFLLEdBQUksTUFDM0MsR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUVmLE9BQU8sSUF3QlQsRUFBRSxVQUFZLEVBQUUsSUFBTSxRQUFTLENBQUMsRUFBRyxFQUFHLENBQ3BDLE9BQU8sRUFBSSxLQUFNLElBQUksRUFBVSxFQUFHLENBQUMsRUFBRyxHQUFnQixFQUFhLEdBUXJFLEVBQUUsbUJBQXFCLEVBQUUsS0FBTyxRQUFTLENBQUMsRUFBRyxFQUFHLENBQzlDLE9BQU8sRUFBSSxLQUFNLElBQUksRUFBVSxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsR0FtQjVDLEVBQUUsZ0JBQWtCLEVBQUUsSUFBTSxRQUFTLENBQUMsRUFBRyxFQUFHLENBQzFDLElBQUksR0FBTSxHQUFVLEdBQUcsR0FBRyxHQUFNLEdBQVEsR0FBUSxHQUFRLEVBQ3RELEdBQUksS0FLTixHQUhBLEVBQUksSUFBSSxFQUFVLENBQUMsRUFHZixFQUFFLElBQU0sRUFBRSxVQUFVLEVBQ3RCLE1BQU0sTUFDSCxFQUFpQiw0QkFBOEIsR0FBUSxDQUFDLENBQUMsRUFHOUQsR0FBSSxHQUFLLEtBQU0sRUFBSSxJQUFJLEVBQVUsQ0FBQyxFQU1sQyxHQUhBLEdBQVMsRUFBRSxFQUFJLElBR1YsR0FBRSxJQUFNLEdBQUUsRUFBRSxJQUFNLEdBQUUsRUFBRSxJQUFNLElBQU0sR0FBRSxHQUFLLEdBQUUsRUFBRSxRQUFVLElBQU0sRUFBRSxJQUFNLEVBQUUsRUFBRSxHQUs1RSxPQURBLEVBQUksSUFBSSxFQUFVLEtBQUssS0FBSyxHQUFRLEVBQUMsRUFBRyxHQUFTLEVBQUUsR0FBSyxFQUFJLEVBQU0sQ0FBQyxJQUFNLEdBQVEsQ0FBQyxDQUFDLENBQUMsRUFDN0UsRUFBSSxFQUFFLElBQUksQ0FBQyxFQUFJLEVBS3hCLEdBRkEsR0FBUyxFQUFFLEVBQUksRUFFWCxFQUFHLENBR0wsR0FBSSxFQUFFLEdBQUssRUFBRSxFQUFFLElBQU0sRUFBRSxFQUFHLE9BQU8sSUFBSSxFQUFVLEdBQUcsRUFJbEQsR0FGQSxJQUFZLElBQVUsR0FBRSxVQUFVLEdBQUssRUFBRSxVQUFVLEVBRS9DLEdBQVUsR0FBSSxHQUFFLElBQUksQ0FBQyxFQUlwQixRQUFJLEVBQUUsRUFBSSxJQUFNLEdBQUUsRUFBSSxHQUFLLEdBQUUsRUFBSSxLQUFPLEdBQUUsR0FBSyxFQUVsRCxHQUFFLEVBQUUsR0FBSyxHQUFLLElBQVUsR0FBRSxFQUFFLElBQU0sVUFFbEMsR0FBRSxFQUFFLEdBQUssZ0JBQVEsSUFBVSxHQUFFLEVBQUUsSUFBTSxpQkFBYSxDQU1wRCxHQUhBLEdBQUksR0FBRSxFQUFJLEdBQUssRUFBTSxDQUFDLEVBQUksR0FBSyxFQUczQixHQUFFLEVBQUksR0FBSSxHQUFJLEVBQUksR0FHdEIsT0FBTyxJQUFJLEVBQVUsR0FBUyxFQUFJLEdBQUksRUFBQyxFQUVsQyxRQUFJLEdBS1QsR0FBSSxFQUFTLEdBQWdCLEVBQVcsQ0FBQyxFQUczQyxHQUFJLEdBQVEsQ0FFVixHQURBLEdBQU8sSUFBSSxFQUFVLEdBQUcsRUFDcEIsR0FBUSxFQUFFLEVBQUksRUFDbEIsR0FBUyxFQUFNLENBQUMsRUFFaEIsUUFBSSxLQUFLLEtBQUssR0FBUSxDQUFDLENBQUMsRUFDeEIsR0FBUyxHQUFJLEVBR2YsRUFBSSxJQUFJLEVBQVUsRUFBRyxFQUdyQixPQUFVLENBRVIsR0FBSSxHQUFRLENBRVYsR0FEQSxFQUFJLEVBQUUsTUFBTSxFQUFDLEdBQ1IsRUFBRSxFQUFHLE1BRVYsR0FBSSxJQUNGLEdBQUksRUFBRSxFQUFFLE9BQVMsR0FBRyxFQUFFLEVBQUUsT0FBUyxHQUM1QixRQUFJLEdBQ1QsRUFBSSxFQUFFLElBQUksQ0FBQyxFQUlmLEdBQUksR0FBRyxDQUVMLEdBREEsR0FBSSxFQUFVLEdBQUksQ0FBQyxFQUNmLEtBQU0sRUFBRyxNQUNiLEdBQVMsR0FBSSxFQUtiLFFBSEEsRUFBSSxFQUFFLE1BQU0sRUFBSSxFQUNoQixHQUFNLEVBQUcsRUFBRSxFQUFJLEVBQUcsQ0FBQyxFQUVmLEVBQUUsRUFBSSxHQUNSLEdBQVMsRUFBTSxDQUFDLEVBQ1gsS0FFTCxHQURBLElBQUssR0FBUSxDQUFDLEVBQ1YsS0FBTSxFQUFHLE1BQ2IsR0FBUyxHQUFJLEVBTWpCLEdBRkEsR0FBSSxHQUFFLE1BQU0sRUFBQyxFQUVULElBQ0YsR0FBSSxHQUFFLEdBQUssR0FBRSxFQUFFLE9BQVMsR0FBRyxHQUFFLEVBQUUsT0FBUyxHQUNuQyxRQUFJLEdBQ1QsR0FBSSxHQUFFLElBQUksQ0FBQyxFQUlmLEdBQUksR0FBVSxPQUFPLEVBQ3JCLEdBQUksR0FBUSxFQUFJLEdBQUksSUFBSSxDQUFDLEVBRXpCLE9BQU8sRUFBSSxFQUFFLElBQUksQ0FBQyxFQUFJLEdBQUksR0FBTSxFQUFHLEdBQWUsR0FBZSxFQUFJLEVBQUksR0FZM0UsRUFBRSxhQUFlLFFBQVMsQ0FBQyxFQUFJLENBQzdCLElBQUksRUFBSSxJQUFJLEVBQVUsSUFBSSxFQUMxQixHQUFJLEdBQU0sS0FBTSxFQUFLLEdBQ2hCLE9BQVMsRUFBSSxFQUFHLENBQUMsRUFDdEIsT0FBTyxHQUFNLEVBQUcsRUFBRSxFQUFJLEVBQUcsQ0FBRSxHQVE3QixFQUFFLFVBQVksRUFBRSxHQUFLLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDbkMsT0FBTyxFQUFRLEtBQU0sSUFBSSxFQUFVLEVBQUcsQ0FBQyxDQUFDLElBQU0sR0FPaEQsRUFBRSxTQUFXLFFBQVMsRUFBRyxDQUN2QixRQUFTLEtBQUssR0FRaEIsRUFBRSxjQUFnQixFQUFFLEdBQUssUUFBUyxDQUFDLEVBQUcsRUFBRyxDQUN2QyxPQUFPLEVBQVEsS0FBTSxJQUFJLEVBQVUsRUFBRyxDQUFDLENBQUMsRUFBSSxHQVE5QyxFQUFFLHVCQUF5QixFQUFFLElBQU0sUUFBUyxDQUFDLEVBQUcsRUFBRyxDQUNqRCxPQUFRLEVBQUksRUFBUSxLQUFNLElBQUksRUFBVSxFQUFHLENBQUMsQ0FBQyxLQUFPLEdBQUssSUFBTSxHQVFqRSxFQUFFLFVBQVksUUFBUyxFQUFHLENBQ3hCLFFBQVMsS0FBSyxHQUFLLEVBQVMsS0FBSyxFQUFJLENBQVEsRUFBSSxLQUFLLEVBQUUsT0FBUyxHQVFuRSxFQUFFLFdBQWEsRUFBRSxHQUFLLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDcEMsT0FBTyxFQUFRLEtBQU0sSUFBSSxFQUFVLEVBQUcsQ0FBQyxDQUFDLEVBQUksR0FROUMsRUFBRSxvQkFBc0IsRUFBRSxJQUFNLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDOUMsT0FBUSxFQUFJLEVBQVEsS0FBTSxJQUFJLEVBQVUsRUFBRyxDQUFDLENBQUMsS0FBTyxJQUFNLElBQU0sR0FPbEUsRUFBRSxNQUFRLFFBQVMsRUFBRyxDQUNwQixPQUFRLEtBQUssR0FPZixFQUFFLFdBQWEsUUFBUyxFQUFHLENBQ3pCLE9BQU8sS0FBSyxFQUFJLEdBT2xCLEVBQUUsV0FBYSxRQUFTLEVBQUcsQ0FDekIsT0FBTyxLQUFLLEVBQUksR0FPbEIsRUFBRSxPQUFTLFFBQVMsRUFBRyxDQUNyQixRQUFTLEtBQUssR0FBSyxLQUFLLEVBQUUsSUFBTSxHQXdCbEMsRUFBRSxNQUFRLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDeEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUNYLEdBQUksS0FDSixHQUFJLEdBQUUsRUFNUixHQUpBLEVBQUksSUFBSSxFQUFVLEVBQUcsQ0FBQyxFQUN0QixFQUFJLEVBQUUsR0FHRCxLQUFNLEVBQUcsT0FBTyxJQUFJLEVBQVUsR0FBRyxFQUd0QyxHQUFJLElBQUssRUFFUCxPQURBLEVBQUUsR0FBSyxFQUNBLEdBQUUsS0FBSyxDQUFDLEVBR2pCLElBQUksR0FBSyxHQUFFLEVBQUksRUFDYixHQUFLLEVBQUUsRUFBSSxFQUNYLEVBQUssR0FBRSxFQUNQLEdBQUssRUFBRSxFQUVULElBQUssS0FBTyxHQUFJLENBR2QsSUFBSyxJQUFPLEdBQUksT0FBTyxHQUFNLEVBQUUsR0FBSyxFQUFHLEdBQUssSUFBSSxFQUFVLEdBQUssR0FBSSxHQUFHLEVBR3RFLElBQUssRUFBRyxLQUFPLEdBQUcsR0FHaEIsT0FBTyxHQUFHLElBQU0sRUFBRSxHQUFLLEVBQUcsR0FBSyxJQUFJLEVBQVUsRUFBRyxHQUFLLEdBR3BELElBQWlCLEVBQUksR0FBSyxDQUFDLEVBU2hDLEdBTEEsR0FBSyxFQUFTLEVBQUUsRUFDaEIsR0FBSyxFQUFTLEVBQUUsRUFDaEIsRUFBSyxFQUFHLE1BQU0sRUFHVixHQUFJLEdBQUssR0FBSSxDQUVmLEdBQUksR0FBTyxHQUFJLEVBQ2IsSUFBSyxHQUNMLEdBQUksRUFFSixRQUFLLEdBQ0wsR0FBSSxHQUdOLEdBQUUsUUFBUSxFQUdWLElBQUssRUFBSSxHQUFHLElBQUssR0FBRSxLQUFLLENBQUMsR0FDekIsR0FBRSxRQUFRLEVBQ0wsS0FHTCxJQUFLLElBQVEsR0FBSSxFQUFHLFNBQVcsRUFBSSxHQUFHLFNBQVcsR0FBSSxFQUVyRCxJQUFLLEdBQUksRUFBSSxFQUFHLEVBQUksR0FBRyxJQUVyQixHQUFJLEVBQUcsSUFBTSxHQUFHLEdBQUksQ0FDbEIsR0FBTyxFQUFHLEdBQUssR0FBRyxHQUNsQixPQU1OLEdBQUksR0FDRixHQUFJLEVBQ0osRUFBSyxHQUNMLEdBQUssR0FDTCxFQUFFLEdBQUssRUFBRSxFQU9YLEdBSkEsR0FBSyxHQUFJLEdBQUcsU0FBVyxHQUFJLEVBQUcsUUFJMUIsRUFBSSxFQUFHLEtBQU8sSUFBSyxFQUFHLE1BQU8sR0FDakMsRUFBSSxFQUFPLEVBR1gsS0FBTyxHQUFJLElBQUksQ0FFYixHQUFJLEVBQUcsRUFBRSxJQUFLLEdBQUcsSUFBSSxDQUNuQixJQUFLLEdBQUksR0FBRyxLQUFNLEVBQUcsRUFBRSxJQUFJLEVBQUcsSUFBSyxLQUNqQyxFQUFHLElBQ0wsRUFBRyxLQUFNLEVBR1gsRUFBRyxLQUFNLEdBQUcsSUFJZCxLQUFPLEVBQUcsSUFBTSxFQUFHLEVBQUcsT0FBTyxFQUFHLENBQUMsSUFBSyxJQUd0QyxJQUFLLEVBQUcsR0FNTixPQUZBLEVBQUUsRUFBSSxJQUFpQixFQUFJLEdBQUssRUFDaEMsRUFBRSxFQUFJLENBQUMsRUFBRSxFQUFJLENBQUMsRUFDUCxFQUtULE9BQU8sR0FBVSxFQUFHLEVBQUksRUFBRSxHQXlCNUIsRUFBRSxPQUFTLEVBQUUsSUFBTSxRQUFTLENBQUMsRUFBRyxFQUFHLENBQ2pDLElBQUksR0FBRyxHQUNMLEdBQUksS0FLTixHQUhBLEVBQUksSUFBSSxFQUFVLEVBQUcsQ0FBQyxHQUdqQixHQUFFLElBQU0sRUFBRSxHQUFLLEVBQUUsSUFBTSxFQUFFLEVBQUUsR0FDOUIsT0FBTyxJQUFJLEVBQVUsR0FBRyxFQUduQixTQUFLLEVBQUUsR0FBSyxHQUFFLElBQU0sR0FBRSxFQUFFLEdBQzdCLE9BQU8sSUFBSSxFQUFVLEVBQUMsRUFHeEIsR0FBSSxJQUFlLEVBSWpCLEdBQUksRUFBRSxFQUNOLEVBQUUsRUFBSSxFQUNOLEdBQUksRUFBSSxHQUFHLEVBQUcsRUFBRyxDQUFDLEVBQ2xCLEVBQUUsRUFBSSxHQUNOLEdBQUUsR0FBSyxHQUVQLFFBQUksRUFBSSxHQUFHLEVBQUcsRUFBRyxFQUFXLEVBTTlCLEdBSEEsRUFBSSxHQUFFLE1BQU0sR0FBRSxNQUFNLENBQUMsQ0FBQyxHQUdqQixFQUFFLEVBQUUsSUFBTSxJQUFlLEVBQUcsRUFBRSxFQUFJLEdBQUUsRUFFekMsT0FBTyxHQXdCVCxFQUFFLGFBQWUsRUFBRSxNQUFRLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDekMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFLLEdBQUssRUFBSyxHQUFLLEdBQUssR0FBSyxHQUNsRCxHQUFNLEdBQ04sR0FBSSxLQUNKLEdBQUssR0FBRSxFQUNQLElBQU0sRUFBSSxJQUFJLEVBQVUsRUFBRyxDQUFDLEdBQUcsRUFHakMsSUFBSyxLQUFPLEtBQU8sR0FBRyxLQUFPLEdBQUcsR0FBSSxDQUdsQyxJQUFLLEdBQUUsSUFBTSxFQUFFLEdBQUssS0FBTyxHQUFHLEtBQU8sSUFBTSxLQUFPLEdBQUcsS0FBTyxHQUMxRCxFQUFFLEVBQUksRUFBRSxFQUFJLEVBQUUsRUFBSSxLQUtsQixRQUhBLEVBQUUsR0FBSyxHQUFFLEdBR0osS0FBTyxHQUNWLEVBQUUsRUFBSSxFQUFFLEVBQUksS0FJWixPQUFFLEVBQUksQ0FBQyxDQUFDLEVBQ1IsRUFBRSxFQUFJLEVBSVYsT0FBTyxFQVNULEdBTkEsR0FBSSxFQUFTLEdBQUUsRUFBSSxDQUFRLEVBQUksRUFBUyxFQUFFLEVBQUksQ0FBUSxFQUN0RCxFQUFFLEdBQUssR0FBRSxFQUNULEdBQU0sR0FBRyxPQUNULEdBQU0sR0FBRyxPQUdMLEdBQU0sR0FDUixHQUFLLEdBQ0wsR0FBSyxHQUNMLEdBQUssR0FDTCxHQUFJLEdBQ0osR0FBTSxHQUNOLEdBQU0sR0FJUixJQUFLLEdBQUksR0FBTSxHQUFLLEdBQUssQ0FBQyxFQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsR0FFM0MsR0FBTyxFQUNQLEdBQVcsRUFFWCxJQUFLLEdBQUksS0FBTyxJQUFLLEdBQUksQ0FDdkIsR0FBSSxFQUNKLEdBQU0sR0FBRyxJQUFLLEdBQ2QsR0FBTSxHQUFHLElBQUssR0FBVyxFQUV6QixJQUFLLEdBQUksR0FBSyxHQUFJLEdBQUksR0FBRyxHQUFJLElBQzNCLEdBQU0sR0FBRyxFQUFFLElBQUssR0FDaEIsRUFBTSxHQUFHLElBQUssR0FBVyxFQUN6QixHQUFJLEdBQU0sR0FBTSxFQUFNLEdBQ3RCLEdBQU0sR0FBTSxHQUFRLEdBQUksR0FBWSxHQUFZLEdBQUcsSUFBSyxHQUN4RCxJQUFLLEdBQU0sR0FBTyxJQUFNLEdBQUksR0FBVyxHQUFLLEdBQU0sRUFDbEQsR0FBRyxNQUFPLEdBQU0sR0FHbEIsR0FBRyxJQUFLLEdBR1YsR0FBSSxLQUNBLEdBRUYsUUFBRyxPQUFPLEVBQUcsQ0FBQyxFQUdoQixPQUFPLEdBQVUsRUFBRyxHQUFJLEVBQUMsR0FRM0IsRUFBRSxRQUFVLFFBQVMsRUFBRyxDQUN0QixJQUFJLEVBQUksSUFBSSxFQUFVLElBQUksRUFFMUIsT0FEQSxFQUFFLEdBQUssRUFBRSxHQUFLLEtBQ1AsR0F3QlQsRUFBRSxLQUFPLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDdkIsSUFBSSxHQUNGLEdBQUksS0FDSixHQUFJLEdBQUUsRUFNUixHQUpBLEVBQUksSUFBSSxFQUFVLEVBQUcsQ0FBQyxFQUN0QixFQUFJLEVBQUUsR0FHRCxLQUFNLEVBQUcsT0FBTyxJQUFJLEVBQVUsR0FBRyxFQUdyQyxHQUFJLElBQUssRUFFUixPQURBLEVBQUUsR0FBSyxFQUNBLEdBQUUsTUFBTSxDQUFDLEVBR2xCLElBQUksR0FBSyxHQUFFLEVBQUksRUFDYixHQUFLLEVBQUUsRUFBSSxFQUNYLEdBQUssR0FBRSxFQUNQLEdBQUssRUFBRSxFQUVULElBQUssS0FBTyxHQUFJLENBR2QsSUFBSyxLQUFPLEdBQUksT0FBTyxJQUFJLEVBQVUsR0FBSSxDQUFDLEVBSTFDLElBQUssR0FBRyxLQUFPLEdBQUcsR0FBSSxPQUFPLEdBQUcsR0FBSyxFQUFJLElBQUksRUFBVSxHQUFHLEdBQUssR0FBSSxHQUFJLENBQUMsRUFRMUUsR0FMQSxHQUFLLEVBQVMsRUFBRSxFQUNoQixHQUFLLEVBQVMsRUFBRSxFQUNoQixHQUFLLEdBQUcsTUFBTSxFQUdWLEdBQUksR0FBSyxHQUFJLENBQ2YsR0FBSSxHQUFJLEVBQ04sR0FBSyxHQUNMLEdBQUksR0FFSixTQUFLLEdBQ0wsR0FBSSxHQUdOLEdBQUUsUUFBUSxFQUNWLEtBQU8sS0FBSyxHQUFFLEtBQUssQ0FBQyxHQUNwQixHQUFFLFFBQVEsRUFPWixHQUpBLEdBQUksR0FBRyxPQUNQLEVBQUksR0FBRyxPQUdILEdBQUksRUFBSSxFQUNWLEdBQUksR0FDSixHQUFLLEdBQ0wsR0FBSyxHQUNMLEVBQUksR0FJTixJQUFLLEdBQUksRUFBRyxHQUNWLElBQUssR0FBRyxFQUFFLEdBQUssR0FBRyxHQUFLLEdBQUcsR0FBSyxJQUFLLEVBQU8sRUFDM0MsR0FBRyxHQUFLLElBQVMsR0FBRyxHQUFLLEVBQUksR0FBRyxHQUFLLEVBR3ZDLEdBQUksR0FDRixHQUFLLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxJQUNoQixHQUtKLE9BQU8sR0FBVSxFQUFHLEdBQUksRUFBRSxHQW1CNUIsRUFBRSxVQUFZLEVBQUUsR0FBSyxRQUFTLENBQUMsRUFBSSxFQUFJLENBQ3JDLElBQUksR0FBRyxHQUFHLEdBQ1IsR0FBSSxLQUVOLEdBQUksR0FBTSxNQUFRLE1BQVMsRUFBSSxDQUU3QixHQURBLEVBQVMsRUFBSSxFQUFHLENBQUcsRUFDZixHQUFNLEtBQU0sRUFBSyxHQUNoQixPQUFTLEVBQUksRUFBRyxDQUFDLEVBRXRCLE9BQU8sR0FBTSxJQUFJLEVBQVUsRUFBQyxFQUFHLEVBQUksQ0FBRSxFQUd2QyxLQUFNLEdBQUksR0FBRSxHQUFJLE9BQU8sS0FJdkIsR0FIQSxHQUFJLEdBQUUsT0FBUyxFQUNmLEdBQUksR0FBSSxFQUFXLEVBRWYsR0FBSSxHQUFFLElBQUksQ0FHWixLQUFPLEdBQUksSUFBTSxFQUFHLElBQUssR0FBSSxNQUc3QixJQUFLLEdBQUksR0FBRSxHQUFJLElBQUssR0FBSSxJQUFLLEdBQUksT0FHbkMsR0FBSSxHQUFNLEdBQUUsRUFBSSxFQUFJLEdBQUcsR0FBSSxHQUFFLEVBQUksRUFFakMsT0FBTyxJQVlULEVBQUUsVUFBWSxRQUFTLENBQUMsRUFBRyxDQUV6QixPQURBLEVBQVMsR0FBSSxFQUFrQixDQUFnQixFQUN4QyxLQUFLLE1BQU0sS0FBTyxDQUFDLEdBZTVCLEVBQUUsV0FBYSxFQUFFLEtBQU8sUUFBUyxFQUFHLENBQ2xDLElBQUksRUFBRyxFQUFHLEdBQUcsR0FBSyxHQUNoQixHQUFJLEtBQ0osR0FBSSxHQUFFLEVBQ04sR0FBSSxHQUFFLEVBQ04sR0FBSSxHQUFFLEVBQ04sR0FBSyxHQUFpQixFQUN0QixFQUFPLElBQUksRUFBVSxLQUFLLEVBRzVCLEdBQUksS0FBTSxJQUFNLEtBQU0sR0FBRSxHQUN0QixPQUFPLElBQUksR0FBVyxJQUFLLEdBQUksS0FBTyxJQUFLLEdBQUUsSUFBTSxJQUFNLEdBQUksR0FBSSxHQUFLLEVBUXhFLEdBSkEsR0FBSSxLQUFLLE1BQU0sR0FBUSxFQUFDLENBQUMsRUFJckIsSUFBSyxHQUFLLElBQUssSUFBTyxDQUV4QixHQURBLEVBQUksRUFBYyxFQUFDLEdBQ2QsRUFBRSxPQUFTLElBQUssR0FBSyxFQUFHLEdBQUssSUFJbEMsR0FIQSxHQUFJLEtBQUssTUFBTSxDQUFDLEVBQ2hCLEdBQUksR0FBVSxHQUFJLEdBQUssQ0FBQyxHQUFLLEdBQUksR0FBSyxHQUFJLEdBRXRDLElBQUssSUFDUCxFQUFJLEtBQU8sR0FFWCxPQUFJLEdBQUUsY0FBYyxFQUNwQixFQUFJLEVBQUUsTUFBTSxFQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUksQ0FBQyxFQUFJLEdBR3ZDLEdBQUksSUFBSSxFQUFVLENBQUMsRUFFbkIsUUFBSSxJQUFJLEVBQVUsR0FBSSxFQUFFLEVBTzFCLEdBQUksR0FBRSxFQUFFLEdBQUksQ0FHVixHQUZBLEdBQUksR0FBRSxFQUNOLEdBQUksR0FBSSxHQUNKLEdBQUksRUFBRyxHQUFJLEVBR2YsT0FJRSxHQUhBLEdBQUksR0FDSixHQUFJLEVBQUssTUFBTSxHQUFFLEtBQUssRUFBSSxHQUFHLEdBQUcsR0FBSSxDQUFDLENBQUMsQ0FBQyxFQUVuQyxFQUFjLEdBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRyxFQUFDLEtBQU8sRUFBSSxFQUFjLEdBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRyxFQUFDLEVBQUcsQ0FLM0UsR0FBSSxHQUFFLEVBQUksS0FBSyxHQU1mLEdBTEEsRUFBSSxFQUFFLE1BQU0sR0FBSSxFQUFHLEdBQUksQ0FBQyxFQUtwQixHQUFLLFNBQVcsSUFBTyxHQUFLLE9BQVEsQ0FJdEMsSUFBSyxJQUdILEdBRkEsR0FBTSxHQUFHLEdBQUUsRUFBSSxHQUFpQixFQUFHLENBQUMsRUFFaEMsR0FBRSxNQUFNLEVBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRyxDQUNwQixHQUFJLEdBQ0osT0FJSixJQUFNLEVBQ04sSUFBSyxFQUNMLEdBQU0sRUFDRCxLQUlMLEtBQU0sS0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUssSUFHeEMsR0FBTSxHQUFHLEdBQUUsRUFBSSxHQUFpQixFQUFHLENBQUMsRUFDcEMsR0FBSyxHQUFFLE1BQU0sRUFBQyxFQUFFLEdBQUcsRUFBQyxFQUd0QixRQU1SLE9BQU8sR0FBTSxHQUFHLEdBQUUsRUFBSSxHQUFpQixFQUFHLEdBQWUsQ0FBQyxHQWE1RCxFQUFFLGNBQWdCLFFBQVMsQ0FBQyxFQUFJLEVBQUksQ0FDbEMsR0FBSSxHQUFNLEtBQ1IsRUFBUyxFQUFJLEVBQUcsQ0FBRyxFQUNuQixJQUVGLE9BQU8sR0FBTyxLQUFNLEVBQUksRUFBSSxDQUFDLEdBZ0IvQixFQUFFLFFBQVUsUUFBUyxDQUFDLEVBQUksRUFBSSxDQUM1QixHQUFJLEdBQU0sS0FDUixFQUFTLEVBQUksRUFBRyxDQUFHLEVBQ25CLEVBQUssRUFBSyxLQUFLLEVBQUksRUFFckIsT0FBTyxHQUFPLEtBQU0sRUFBSSxDQUFFLEdBNkI1QixFQUFFLFNBQVcsUUFBUyxDQUFDLEVBQUksRUFBSSxHQUFRLENBQ3JDLElBQUksR0FDRixHQUFJLEtBRU4sR0FBSSxJQUFVLEtBQ1osR0FBSSxHQUFNLE1BQVEsR0FBTSxPQUFPLEdBQU0sU0FDbkMsR0FBUyxFQUNULEVBQUssS0FDQSxRQUFJLEdBQU0sT0FBTyxHQUFNLFNBQzVCLEdBQVMsRUFDVCxFQUFLLEVBQUssS0FFVixRQUFTLEdBRU4sUUFBSSxPQUFPLElBQVUsU0FDMUIsTUFBTSxNQUNILEVBQWlCLDJCQUE2QixFQUFNLEVBS3pELEdBRkEsR0FBTSxHQUFFLFFBQVEsRUFBSSxDQUFFLEVBRWxCLEdBQUUsRUFBRyxDQUNQLElBQUksR0FDRixHQUFNLEdBQUksTUFBTSxHQUFHLEVBQ25CLElBQU0sR0FBTyxVQUNiLElBQU0sR0FBTyxtQkFDYixHQUFpQixHQUFPLGdCQUFrQixHQUMxQyxFQUFVLEdBQUksR0FDZCxHQUFlLEdBQUksR0FDbkIsR0FBUSxHQUFFLEVBQUksRUFDZCxHQUFZLEdBQVEsRUFBUSxNQUFNLENBQUMsRUFBSSxFQUN2QyxHQUFNLEdBQVUsT0FFbEIsR0FBSSxHQUNGLEdBQUksR0FDSixHQUFLLEdBQ0wsR0FBSyxHQUNMLElBQU8sR0FHVCxHQUFJLEdBQUssR0FBSyxHQUFNLEVBQUcsQ0FDckIsR0FBSSxHQUFNLElBQU0sR0FDaEIsRUFBVSxHQUFVLE9BQU8sRUFBRyxFQUFDLEVBQy9CLEtBQU8sR0FBSSxHQUFLLElBQUssR0FBSSxHQUFXLEdBQWlCLEdBQVUsT0FBTyxHQUFHLEVBQUUsRUFDM0UsR0FBSSxHQUFLLEVBQUcsR0FBVyxHQUFpQixHQUFVLE1BQU0sRUFBQyxFQUN6RCxHQUFJLEdBQU8sRUFBVSxJQUFNLEVBRzdCLEdBQU0sR0FDSCxHQUFXLEdBQU8sa0JBQW9CLE1BQVEsSUFBTSxHQUFPLG1CQUMxRCxHQUFhLFFBQVEsSUFBSSxPQUFPLE9BQVMsR0FBSyxPQUFRLEdBQUcsRUFDMUQsTUFBUSxHQUFPLHdCQUEwQixHQUFHLEVBQzNDLElBQ0QsRUFHTCxPQUFRLEdBQU8sUUFBVSxJQUFNLElBQU8sR0FBTyxRQUFVLEtBZXpELEVBQUUsV0FBYSxRQUFTLENBQUMsRUFBSSxDQUMzQixJQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBRyxHQUFLLEdBQUcsR0FBSSxHQUFJLEVBQUcsR0FBRyxHQUMxQyxHQUFJLEtBQ0osR0FBSyxHQUFFLEVBRVQsR0FBSSxHQUFNLE1BSVIsR0FIQSxHQUFJLElBQUksRUFBVSxDQUFFLEdBR2YsR0FBRSxVQUFVLElBQU0sR0FBRSxHQUFLLEdBQUUsSUFBTSxJQUFNLEdBQUUsR0FBRyxFQUFHLEVBQ2xELE1BQU0sTUFDSCxFQUFpQixhQUNmLEdBQUUsVUFBVSxFQUFJLGlCQUFtQixvQkFBc0IsR0FBUSxFQUFDLENBQUMsRUFJNUUsSUFBSyxHQUFJLE9BQU8sSUFBSSxFQUFVLEVBQUMsRUFFL0IsRUFBSSxJQUFJLEVBQVUsRUFBRyxFQUNyQixHQUFLLEdBQUssSUFBSSxFQUFVLEVBQUcsRUFDM0IsR0FBSyxHQUFLLElBQUksRUFBVSxFQUFHLEVBQzNCLEdBQUksRUFBYyxFQUFFLEVBSXBCLEdBQUksRUFBRSxFQUFJLEdBQUUsT0FBUyxHQUFFLEVBQUksRUFDM0IsRUFBRSxFQUFFLEdBQUssRUFBVSxJQUFNLEdBQUksR0FBWSxFQUFJLEVBQVcsR0FBTSxJQUM5RCxHQUFNLEdBQU0sR0FBRSxXQUFXLENBQUMsRUFBSSxFQUFLLEdBQUksRUFBSSxFQUFJLEdBQU0sR0FFckQsR0FBTSxHQUNOLEdBQVUsSUFDVixHQUFJLElBQUksRUFBVSxFQUFDLEVBR25CLEdBQUcsRUFBRSxHQUFLLEVBRVYsT0FBVyxDQUdULEdBRkEsRUFBSSxFQUFJLEdBQUcsRUFBRyxFQUFHLENBQUMsRUFDbEIsR0FBSyxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUNwQixHQUFHLFdBQVcsQ0FBRSxHQUFLLEVBQUcsTUFDNUIsR0FBSyxHQUNMLEdBQUssR0FDTCxHQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBSyxFQUFFLENBQUMsRUFDN0IsR0FBSyxHQUNMLEVBQUksR0FBRSxNQUFNLEVBQUUsTUFBTSxHQUFLLENBQUMsQ0FBQyxFQUMzQixHQUFJLEdBZU4sT0FaQSxHQUFLLEVBQUksRUFBRyxNQUFNLEVBQUUsRUFBRyxHQUFJLEVBQUcsQ0FBQyxFQUMvQixHQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQ3pCLEdBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFDekIsR0FBRyxFQUFJLEdBQUcsRUFBSSxHQUFFLEVBQ2hCLEdBQUksR0FBSSxFQUdSLEdBQUksRUFBSSxHQUFJLEdBQUksR0FBRyxFQUFhLEVBQUUsTUFBTSxFQUFDLEVBQUUsSUFBSSxFQUFFLFdBQzdDLEVBQUksR0FBSSxHQUFJLEdBQUcsRUFBYSxFQUFFLE1BQU0sRUFBQyxFQUFFLElBQUksQ0FBQyxFQUFJLEVBQUksQ0FBQyxHQUFJLEVBQUUsRUFBSSxDQUFDLEdBQUksRUFBRSxFQUUxRSxHQUFVLEdBRUgsSUFPVCxFQUFFLFNBQVcsUUFBUyxFQUFHLENBQ3ZCLE9BQVEsR0FBUSxJQUFJLEdBZXRCLEVBQUUsWUFBYyxRQUFTLENBQUMsRUFBSSxFQUFJLENBQ2hDLEdBQUksR0FBTSxLQUFNLEVBQVMsRUFBSSxFQUFHLENBQUcsRUFDbkMsT0FBTyxHQUFPLEtBQU0sRUFBSSxFQUFJLENBQUMsR0FlL0IsRUFBRSxTQUFXLFFBQVMsQ0FBQyxFQUFHLENBQ3hCLElBQUksRUFDRixHQUFJLEtBQ0osR0FBSSxHQUFFLEVBQ04sR0FBSSxHQUFFLEVBR1IsR0FBSSxLQUFNLEtBQ1IsR0FBSSxJQUVGLEdBREEsRUFBTSxXQUNGLEdBQUksRUFBRyxFQUFNLElBQU0sRUFFdkIsT0FBTSxNQUVILEtBQ0wsR0FBSSxHQUFLLEtBQ1AsRUFBTSxJQUFLLElBQWMsSUFBSyxFQUMzQixFQUFjLEVBQWMsR0FBRSxDQUFDLEVBQUcsRUFBQyxFQUNuQyxFQUFhLEVBQWMsR0FBRSxDQUFDLEVBQUcsR0FBRyxHQUFHLEVBQ3JDLFFBQUksSUFBTSxJQUFNLEdBQ3JCLEdBQUksR0FBTSxJQUFJLEVBQVUsRUFBQyxFQUFHLEdBQWlCLEdBQUksRUFBRyxFQUFhLEVBQ2pFLEVBQU0sRUFBYSxFQUFjLEdBQUUsQ0FBQyxFQUFHLEdBQUUsRUFBRyxHQUFHLEVBRS9DLE9BQVMsRUFBRyxFQUFHLEdBQVMsT0FBUSxNQUFNLEVBQ3RDLEVBQU0sRUFBWSxFQUFhLEVBQWMsR0FBRSxDQUFDLEVBQUcsR0FBRyxHQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUcsRUFBSSxFQUc1RSxHQUFJLEdBQUksR0FBSyxHQUFFLEVBQUUsR0FBSSxFQUFNLElBQU0sRUFHbkMsT0FBTyxHQVFULEVBQUUsUUFBVSxFQUFFLE9BQVMsUUFBUyxFQUFHLENBQ2pDLE9BQU8sR0FBUSxJQUFJLEdBSXJCLEVBQUUsYUFBZSxHQUViLEdBQWdCLEtBQU0sRUFBVSxJQUFJLENBQVksRUFFcEQsT0FBTyxFQVVULFNBQVMsQ0FBUSxDQUFDLEVBQUcsQ0FDbkIsSUFBSSxFQUFJLEVBQUksRUFDWixPQUFPLEVBQUksR0FBSyxJQUFNLEVBQUksRUFBSSxFQUFJLEVBS3BDLFNBQVMsQ0FBYSxDQUFDLEVBQUcsQ0FDeEIsSUFBSSxFQUFHLEVBQ0wsR0FBSSxFQUNKLEVBQUksRUFBRSxPQUNOLEdBQUksRUFBRSxHQUFLLEdBRWIsS0FBTyxHQUFJLEdBQUksQ0FDYixFQUFJLEVBQUUsTUFBTyxHQUNiLEVBQUksRUFBVyxFQUFFLE9BQ2pCLEtBQU8sSUFBSyxFQUFJLElBQU0sR0FDdEIsSUFBSyxFQUlQLElBQUssRUFBSSxHQUFFLE9BQVEsR0FBRSxhQUFhLENBQUMsSUFBTSxLQUV6QyxPQUFPLEdBQUUsTUFBTSxFQUFHLEVBQUksR0FBSyxDQUFDLEVBSzlCLFNBQVMsQ0FBTyxDQUFDLEVBQUcsRUFBRyxDQUNyQixJQUFJLEVBQUcsR0FDTCxFQUFLLEVBQUUsRUFDUCxHQUFLLEVBQUUsRUFDUCxHQUFJLEVBQUUsRUFDTixHQUFJLEVBQUUsRUFDTixHQUFJLEVBQUUsRUFDTixFQUFJLEVBQUUsRUFHUixJQUFLLEtBQU0sR0FBRyxPQUFPLEtBTXJCLEdBSkEsRUFBSSxJQUFPLEVBQUcsR0FDZCxHQUFJLEtBQU8sR0FBRyxHQUdWLEdBQUssR0FBRyxPQUFPLEVBQUksR0FBSSxHQUFLLEdBQUksR0FHcEMsR0FBSSxJQUFLLEdBQUcsT0FBTyxHQU1uQixHQUpBLEVBQUksR0FBSSxFQUNSLEdBQUksSUFBSyxHQUdKLElBQU8sR0FBSSxPQUFPLEdBQUksR0FBSyxFQUFLLEVBQUksRUFBSSxHQUc3QyxJQUFLLEdBQUcsT0FBTyxHQUFJLEVBQUksRUFBSSxFQUFJLEdBRS9CLElBQUssR0FBSSxFQUFHLFNBQVcsRUFBSSxHQUFHLFFBQVUsR0FBSSxFQUc1QyxJQUFLLEdBQUksRUFBRyxHQUFJLEdBQUcsS0FBSyxHQUFJLEVBQUcsS0FBTSxHQUFHLElBQUksT0FBTyxFQUFHLElBQUssR0FBRyxJQUFLLEVBQUksRUFBSSxHQUczRSxPQUFPLElBQUssRUFBSSxFQUFJLEdBQUksRUFBSSxFQUFJLEVBQUksR0FPdEMsU0FBUyxDQUFRLENBQUMsRUFBRyxFQUFLLEVBQUssR0FBTSxDQUNuQyxHQUFJLEVBQUksR0FBTyxFQUFJLEdBQU8sSUFBTSxFQUFVLENBQUMsRUFDekMsTUFBTSxNQUNKLEdBQWtCLElBQVEsYUFBZSxPQUFPLEdBQUssU0FDbEQsRUFBSSxHQUFPLEVBQUksRUFBTSxrQkFBb0Isb0JBQ3pDLDZCQUErQixPQUFPLENBQUMsQ0FBQyxFQU1qRCxTQUFTLENBQUssQ0FBQyxFQUFHLENBQ2hCLElBQUksRUFBSSxFQUFFLEVBQUUsT0FBUyxFQUNyQixPQUFPLEVBQVMsRUFBRSxFQUFJLENBQVEsR0FBSyxHQUFLLEVBQUUsRUFBRSxHQUFLLEdBQUssRUFJeEQsU0FBUyxDQUFhLENBQUMsRUFBSyxFQUFHLENBQzdCLE9BQVEsRUFBSSxPQUFTLEVBQUksRUFBSSxPQUFPLENBQUMsRUFBSSxJQUFNLEVBQUksTUFBTSxDQUFDLEVBQUksSUFDNUQsRUFBSSxFQUFJLElBQU0sTUFBUSxFQUkxQixTQUFTLENBQVksQ0FBQyxFQUFLLEVBQUcsRUFBRyxDQUMvQixJQUFJLEdBQUssRUFHVCxHQUFJLEVBQUksRUFBRyxDQUdULElBQUssRUFBSyxFQUFJLE1BQU8sRUFBRyxHQUFNLEdBQzlCLEVBQU0sRUFBSyxFQU9YLFFBSEEsR0FBTSxFQUFJLFNBR0osRUFBSSxHQUFLLENBQ2IsSUFBSyxFQUFLLEVBQUcsR0FBSyxLQUFPLEVBQUcsR0FBTSxHQUNsQyxHQUFPLEVBQ0YsUUFBSSxFQUFJLEdBQ2IsRUFBTSxFQUFJLE1BQU0sRUFBRyxDQUFDLEVBQUksSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUk3QyxPQUFPLEVBV1QsR0FKQSxFQUFZLEVBQU0sRUFDbEIsRUFBVSxRQUFhLEVBQVUsVUFBWSxFQUd6QyxPQUFPLFFBQVUsWUFBYyxPQUFPLElBQ3hDLE9BQU8sUUFBUyxFQUFHLENBQUUsT0FBTyxFQUFZLEVBR25DLFFBQUksT0FBTyxJQUFVLGFBQXNCLFdBQ2hELEdBQU8sUUFBVSxFQUdaLEtBQ0wsSUFBSyxFQUNILEVBQWUsT0FBTyxNQUFRLGFBQWUsS0FBTyxLQUFPLE9BRzdELEVBQWEsVUFBWSxLQUUxQixHQUFJLDBCQ3oyRlAsSUFBSSxVQW1LQSxJQUFjLEtBRWpCLFFBQVMsRUFBRyxDQUdULFNBQVMsQ0FBQyxDQUFDLEVBQUcsQ0FFVixPQUFPLEVBQUksR0FBSyxJQUFNLEVBQUksRUFHOUIsSUFBSSxFQUFLLDJHQUNMLEVBQVksMkhBQ1osRUFDQSxFQUNBLEVBQU8sQ0FDSCxLQUFNLE1BQ04sS0FBTSxNQUNOLEtBQU0sTUFDTixLQUFNLE1BQ04sS0FBTSxNQUNOLElBQU0sT0FDTixLQUFNLE1BQ1YsRUFDQSxFQUdKLFNBQVMsQ0FBSyxDQUFDLEVBQVEsQ0FRbkIsT0FEQSxFQUFVLFVBQVksRUFDZixFQUFVLEtBQUssQ0FBTSxFQUFJLElBQU0sRUFBTyxRQUFRLEVBQVcsUUFBUyxDQUFDLEVBQUcsQ0FDekUsSUFBSSxFQUFJLEVBQUssR0FDYixPQUFPLE9BQU8sSUFBTSxTQUNkLEVBQ0EsT0FBUyxPQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQ2pFLEVBQUksSUFBTSxJQUFNLEVBQVMsSUFJOUIsU0FBUyxDQUFHLENBQUMsRUFBSyxFQUFRLENBSXRCLElBQUksRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUFPLEVBQ1AsRUFDQSxFQUFRLEVBQU8sR0FDZixFQUFjLEdBQVMsT0FBUyxhQUFpQixLQUFhLElBQVUsWUFBWSxDQUFLLEdBSTdGLEdBQUksR0FBUyxPQUFPLElBQVUsVUFDdEIsT0FBTyxFQUFNLFNBQVcsV0FDNUIsRUFBUSxFQUFNLE9BQU8sQ0FBRyxFQU01QixHQUFJLE9BQU8sSUFBUSxXQUNmLEVBQVEsRUFBSSxLQUFLLEVBQVEsRUFBSyxDQUFLLEVBS3ZDLE9BQVEsT0FBTyxPQUNWLFNBQ0QsR0FBSSxFQUNBLE9BQU8sRUFFUCxZQUFPLEVBQU0sQ0FBSyxNQUdyQixTQUlELE9BQU8sU0FBUyxDQUFLLEVBQUksT0FBTyxDQUFLLEVBQUksV0FFeEMsY0FDQSxXQUNBLFNBTUQsT0FBTyxPQUFPLENBQUssTUFLbEIsU0FLRCxJQUFLLEVBQ0QsTUFBTyxPQVVYLEdBTEEsR0FBTyxFQUNQLEVBQVUsQ0FBQyxFQUlQLE9BQU8sVUFBVSxTQUFTLE1BQU0sQ0FBSyxJQUFNLGlCQUFrQixDQUs3RCxFQUFTLEVBQU0sT0FDZixJQUFLLEVBQUksRUFBRyxFQUFJLEVBQVEsR0FBSyxFQUN6QixFQUFRLEdBQUssRUFBSSxFQUFHLENBQUssR0FBSyxPQVlsQyxPQU5BLEVBQUksRUFBUSxTQUFXLEVBQ2pCLEtBQ0EsRUFDQTtBQUFBLEVBQVEsRUFBTSxFQUFRLEtBQUs7QUFBQSxFQUFRLENBQUcsRUFBSTtBQUFBLEVBQU8sRUFBTyxJQUN4RCxJQUFNLEVBQVEsS0FBSyxHQUFHLEVBQUksSUFDaEMsRUFBTSxFQUNDLEVBS1gsR0FBSSxHQUFPLE9BQU8sSUFBUSxTQUFVLENBQ2hDLEVBQVMsRUFBSSxPQUNiLElBQUssRUFBSSxFQUFHLEVBQUksRUFBUSxHQUFLLEVBQ3pCLEdBQUksT0FBTyxFQUFJLEtBQU8sVUFHbEIsR0FGQSxFQUFJLEVBQUksR0FDUixFQUFJLEVBQUksRUFBRyxDQUFLLEVBQ1osRUFDQSxFQUFRLEtBQUssRUFBTSxDQUFDLEdBQUssRUFBTSxLQUFPLEtBQU8sQ0FBQyxHQVExRCxZQUFPLEtBQUssQ0FBSyxFQUFFLFFBQVEsUUFBUSxDQUFDLEVBQUcsQ0FDbkMsSUFBSSxFQUFJLEVBQUksRUFBRyxDQUFLLEVBQ3BCLEdBQUksRUFDQSxFQUFRLEtBQUssRUFBTSxDQUFDLEdBQUssRUFBTSxLQUFPLEtBQU8sQ0FBQyxFQUVyRCxFQVlMLE9BTkEsRUFBSSxFQUFRLFNBQVcsRUFDakIsS0FDQSxFQUNBO0FBQUEsRUFBUSxFQUFNLEVBQVEsS0FBSztBQUFBLEVBQVEsQ0FBRyxFQUFJO0FBQUEsRUFBTyxFQUFPLElBQ3hELElBQU0sRUFBUSxLQUFLLEdBQUcsRUFBSSxJQUNoQyxFQUFNLEVBQ0MsR0FNZixHQUFJLE9BQU8sSUFBSyxZQUFjLFdBQzFCLElBQUssVUFBWSxRQUFTLENBQUMsRUFBTyxFQUFVLEVBQU8sQ0FRL0MsSUFBSSxFQU9KLEdBTkEsRUFBTSxHQUNOLEVBQVMsR0FLTCxPQUFPLElBQVUsU0FDakIsSUFBSyxFQUFJLEVBQUcsRUFBSSxFQUFPLEdBQUssRUFDeEIsR0FBVSxJQUtYLFFBQUksT0FBTyxJQUFVLFNBQ3hCLEVBQVMsRUFPYixHQURBLEVBQU0sRUFDRixHQUFZLE9BQU8sSUFBYSxhQUMzQixPQUFPLElBQWEsVUFDckIsT0FBTyxFQUFTLFNBQVcsVUFDL0IsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCLEVBTXBDLE9BQU8sRUFBSSxHQUFJLENBQUMsR0FBSSxDQUFLLENBQUMsS0FHcEMsMEJDL1hGLElBQUksR0FBWSxLQU1WLElBQWlCLDBJQUNqQixJQUF1QiwySkFnRXpCLElBQWEsUUFBUyxDQUFDLEVBQVMsQ0FZbEMsSUFBSSxFQUFXLENBQ2IsT0FBUSxHQUNSLGNBQWUsR0FDZixpQkFBa0IsR0FDbEIsZ0JBQWlCLEdBQ2pCLFlBQWEsUUFDYixrQkFBbUIsT0FDckIsRUFHQSxHQUFJLElBQVksUUFBYSxJQUFZLEtBQU0sQ0FDN0MsR0FBSSxFQUFRLFNBQVcsR0FDckIsRUFBUyxPQUFTLEdBRXBCLEdBQUksRUFBUSxnQkFBa0IsR0FDNUIsRUFBUyxjQUFnQixHQU8zQixHQUxBLEVBQVMsaUJBQ1AsRUFBUSxtQkFBcUIsR0FBTyxFQUFRLGlCQUFtQixHQUNqRSxFQUFTLGdCQUNQLEVBQVEsa0JBQW9CLEdBQU8sRUFBUSxnQkFBa0IsR0FFM0QsT0FBTyxFQUFRLG9CQUFzQixZQUN2QyxHQUNFLEVBQVEsb0JBQXNCLFNBQzlCLEVBQVEsb0JBQXNCLFVBQzlCLEVBQVEsb0JBQXNCLFdBRTlCLEVBQVMsa0JBQW9CLEVBQVEsa0JBRXJDLFdBQU0sSUFBSSxNQUNSLG1HQUFtRyxFQUFRLG1CQUM3RyxFQUlKLEdBQUksT0FBTyxFQUFRLGNBQWdCLFlBQ2pDLEdBQ0UsRUFBUSxjQUFnQixTQUN4QixFQUFRLGNBQWdCLFVBQ3hCLEVBQVEsY0FBZ0IsV0FFeEIsRUFBUyxZQUFjLEVBQVEsWUFFL0IsV0FBTSxJQUFJLE1BQ1IsNkZBQTZGLEVBQVEsYUFDdkcsRUFLTixJQUFJLEVBQ0YsRUFDQSxFQUFVLENBQ1IsSUFBSyxJQUNMLEtBQU0sS0FDTixJQUFLLElBQ0wsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHO0FBQUEsRUFDSCxFQUFHLEtBQ0gsRUFBRyxJQUNMLEVBQ0EsRUFDQSxFQUFRLFFBQVMsQ0FBQyxFQUFHLENBR25CLEtBQU0sQ0FDSixLQUFNLGNBQ04sUUFBUyxFQUNULEdBQUksRUFDSixLQUFNLENBQ1IsR0FFRixFQUFPLFFBQVMsQ0FBQyxFQUFHLENBR2xCLEdBQUksR0FBSyxJQUFNLEVBQ2IsRUFBTSxhQUFlLEVBQUksaUJBQW1CLEVBQUssR0FBRyxFQVF0RCxPQUZBLEVBQUssRUFBSyxPQUFPLENBQUUsRUFDbkIsR0FBTSxFQUNDLEdBRVQsRUFBUyxRQUFTLEVBQUcsQ0FHbkIsSUFBSSxFQUNGLEVBQVMsR0FFWCxHQUFJLElBQU8sSUFDVCxFQUFTLElBQ1QsRUFBSyxHQUFHLEVBRVYsTUFBTyxHQUFNLEtBQU8sR0FBTSxJQUN4QixHQUFVLEVBQ1YsRUFBSyxFQUVQLEdBQUksSUFBTyxJQUFLLENBQ2QsR0FBVSxJQUNWLE1BQU8sRUFBSyxHQUFLLEdBQU0sS0FBTyxHQUFNLElBQ2xDLEdBQVUsRUFHZCxHQUFJLElBQU8sS0FBTyxJQUFPLElBQUssQ0FHNUIsR0FGQSxHQUFVLEVBQ1YsRUFBSyxFQUNELElBQU8sS0FBTyxJQUFPLElBQ3ZCLEdBQVUsRUFDVixFQUFLLEVBRVAsTUFBTyxHQUFNLEtBQU8sR0FBTSxJQUN4QixHQUFVLEVBQ1YsRUFBSyxFQUlULEdBREEsR0FBVSxHQUNMLFNBQVMsQ0FBTSxFQUNsQixFQUFNLFlBQVksRUFDYixLQUNMLEdBQUksSUFBYSxLQUFNLFNBR3ZCLEdBQUksRUFBTyxPQUFTLEdBQ2xCLE9BQU8sRUFBUyxjQUNaLEVBQ0EsRUFBUyxnQkFDVCxPQUFPLENBQU0sRUFDYixJQUFJLEdBQVUsQ0FBTSxFQUV4QixZQUFRLEVBQVMsaUJBQ2IsRUFDQSxFQUFTLGdCQUNULE9BQU8sQ0FBTSxFQUNiLElBQUksR0FBVSxDQUFNLElBRzlCLEVBQVMsUUFBUyxFQUFHLENBR25CLElBQUksRUFDRixFQUNBLEVBQVMsR0FDVCxFQUlGLEdBQUksSUFBTyxJQUFLLENBQ2QsSUFBSSxFQUFVLEVBQ2QsTUFBTyxFQUFLLEVBQUcsQ0FDYixHQUFJLElBQU8sSUFBSyxDQUNkLEdBQUksRUFBSyxFQUFJLEVBQVMsR0FBVSxFQUFLLFVBQVUsRUFBUyxFQUFLLENBQUMsRUFFOUQsT0FEQSxFQUFLLEVBQ0UsRUFFVCxHQUFJLElBQU8sS0FBTSxDQUNmLEdBQUksRUFBSyxFQUFJLEVBQVMsR0FBVSxFQUFLLFVBQVUsRUFBUyxFQUFLLENBQUMsRUFFOUQsR0FEQSxFQUFLLEVBQ0QsSUFBTyxJQUFLLENBQ2QsRUFBUSxFQUNSLElBQUssRUFBSSxFQUFHLEVBQUksRUFBRyxHQUFLLEVBQUcsQ0FFekIsR0FEQSxFQUFNLFNBQVMsRUFBSyxFQUFHLEVBQUUsR0FDcEIsU0FBUyxDQUFHLEVBQ2YsTUFFRixFQUFRLEVBQVEsR0FBSyxFQUV2QixHQUFVLE9BQU8sYUFBYSxDQUFLLEVBQzlCLFFBQUksT0FBTyxFQUFRLEtBQVEsU0FDaEMsR0FBVSxFQUFRLEdBRWxCLFdBRUYsRUFBVSxJQUloQixFQUFNLFlBQVksR0FFcEIsRUFBUSxRQUFTLEVBQUcsQ0FHbEIsTUFBTyxHQUFNLEdBQU0sSUFDakIsRUFBSyxHQUdULEVBQU8sUUFBUyxFQUFHLENBR2pCLE9BQVEsT0FDRCxJQUtILE9BSkEsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ0QsT0FDSixJQU1ILE9BTEEsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ0QsT0FDSixJQUtILE9BSkEsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ1IsRUFBSyxHQUFHLEVBQ0QsS0FFWCxFQUFNLGVBQWlCLEVBQUssR0FBRyxHQUVqQyxFQUNBLEVBQVEsUUFBUyxFQUFHLENBR2xCLElBQUksRUFBUSxDQUFDLEVBRWIsR0FBSSxJQUFPLElBQUssQ0FHZCxHQUZBLEVBQUssR0FBRyxFQUNSLEVBQU0sRUFDRixJQUFPLElBRVQsT0FEQSxFQUFLLEdBQUcsRUFDRCxFQUVULE1BQU8sRUFBSSxDQUdULEdBRkEsRUFBTSxLQUFLLEVBQU0sQ0FBQyxFQUNsQixFQUFNLEVBQ0YsSUFBTyxJQUVULE9BREEsRUFBSyxHQUFHLEVBQ0QsRUFFVCxFQUFLLEdBQUcsRUFDUixFQUFNLEdBR1YsRUFBTSxXQUFXLEdBRW5CLEVBQVMsUUFBUyxFQUFHLENBR25CLElBQUksRUFDRixFQUFTLE9BQU8sT0FBTyxJQUFJLEVBRTdCLEdBQUksSUFBTyxJQUFLLENBR2QsR0FGQSxFQUFLLEdBQUcsRUFDUixFQUFNLEVBQ0YsSUFBTyxJQUVULE9BREEsRUFBSyxHQUFHLEVBQ0QsRUFFVCxNQUFPLEVBQUksQ0FJVCxHQUhBLEVBQU0sRUFBTyxFQUNiLEVBQU0sRUFDTixFQUFLLEdBQUcsRUFFTixFQUFTLFNBQVcsSUFDcEIsT0FBTyxlQUFlLEtBQUssRUFBUSxDQUFHLEVBRXRDLEVBQU0sa0JBQW9CLEVBQU0sR0FBRyxFQUdyQyxHQUFJLElBQWUsS0FBSyxDQUFHLElBQU0sR0FDL0IsR0FBSSxFQUFTLGNBQWdCLFFBQzNCLEVBQU0sOENBQThDLEVBQy9DLFFBQUksRUFBUyxjQUFnQixTQUNsQyxFQUFNLEVBRU4sT0FBTyxHQUFPLEVBQU0sRUFFakIsUUFBSSxJQUFxQixLQUFLLENBQUcsSUFBTSxHQUM1QyxHQUFJLEVBQVMsb0JBQXNCLFFBQ2pDLEVBQU0sZ0RBQWdELEVBQ2pELFFBQUksRUFBUyxvQkFBc0IsU0FDeEMsRUFBTSxFQUVOLE9BQU8sR0FBTyxFQUFNLEVBR3RCLE9BQU8sR0FBTyxFQUFNLEVBSXRCLEdBREEsRUFBTSxFQUNGLElBQU8sSUFFVCxPQURBLEVBQUssR0FBRyxFQUNELEVBRVQsRUFBSyxHQUFHLEVBQ1IsRUFBTSxHQUdWLEVBQU0sWUFBWSxHQXlCdEIsT0F0QkEsRUFBUSxRQUFTLEVBQUcsQ0FLbEIsT0FEQSxFQUFNLEVBQ0UsT0FDRCxJQUNILE9BQU8sRUFBTyxNQUNYLElBQ0gsT0FBTyxFQUFNLE1BQ1YsSUFDSCxPQUFPLEVBQU8sTUFDWCxJQUNILE9BQU8sRUFBTyxVQUVkLE9BQU8sR0FBTSxLQUFPLEdBQU0sSUFBTSxFQUFPLEVBQUksRUFBSyxJQU8vQyxRQUFTLENBQUMsRUFBUSxFQUFTLENBQ2hDLElBQUksRUFPSixHQUxBLEVBQU8sRUFBUyxHQUNoQixFQUFLLEVBQ0wsRUFBSyxJQUNMLEVBQVMsRUFBTSxFQUNmLEVBQU0sRUFDRixFQUNGLEVBQU0sY0FBYyxFQVN0QixPQUFPLE9BQU8sSUFBWSxXQUNyQixTQUFTLENBQUksQ0FBQyxFQUFRLEVBQUssQ0FDMUIsSUFBSSxFQUNGLEVBQ0EsRUFBUSxFQUFPLEdBQ2pCLEdBQUksR0FBUyxPQUFPLElBQVUsU0FDNUIsT0FBTyxLQUFLLENBQUssRUFBRSxRQUFRLFFBQVMsQ0FBQyxHQUFHLENBRXRDLEdBREEsRUFBSSxFQUFLLEVBQU8sRUFBQyxFQUNiLElBQU0sT0FDUixFQUFNLElBQUssRUFFWCxZQUFPLEVBQU0sSUFFaEIsRUFFSCxPQUFPLEVBQVEsS0FBSyxFQUFRLEVBQUssQ0FBSyxHQUNyQyxDQUFFLEdBQUksQ0FBTyxFQUFHLEVBQUUsRUFDckIsSUFJUixJQUFPLFFBQVUsMkJDMWJqQixJQUFJLFVBQStDLFVBQy9DLFVBRUosR0FBTyxRQUFVLFFBQVEsQ0FBQyxFQUFTLENBQy9CLE1BQVEsQ0FDSixNQUFPLElBQVcsQ0FBTyxFQUN6QixVQUFXLEdBQ2YsR0FHSixHQUFPLFFBQVEsTUFBUSxJQUFXLEVBQ2xDLEdBQU8sUUFBUSxVQUFZLHdCQ0szQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQseUJBQTRCLE9BQzVCLDRCQUEwQixJQUMxQiwrQkFBNkIsSUFDN0Isb0NBQWtDLElBQ2xDLDBCQUF3QixJQUN4Qix1QkFBcUIsSUFDN0IsSUFBTSxhQUNBLGFBSUUseUJBQXVCLENBQzNCLFVBQVcsOEJBQ1gsWUFBYSwrQkFDakIsRUFDQSxJQUFNLElBQXdCLFNBVTlCLFNBQVMsR0FBdUIsRUFBRyxDQWUvQixTQUh3QixRQUFRLElBQUksZUFDaEMsUUFBUSxJQUFJLGVBQ1osUUFBUSxJQUFJLFdBUXBCLFNBQVMsR0FBMEIsRUFBRyxDQUNsQyxHQUFRLElBQUssU0FBVSxJQUFNLFFBQ3pCLE1BQU8sR0FDWCxHQUFJLENBRUksSUFBSyxTQUFrQix5QkFBcUIsU0FBUyxFQUV6RCxJQUFNLEVBQWlCLElBQUssYUFBc0IseUJBQXFCLFlBQWEsTUFBTSxFQUMxRixNQUFPLFNBQVMsS0FBSyxDQUFVLEVBRW5DLE1BQU8sRUFBSSxDQUNQLE1BQU8sSUFTZixTQUFTLEdBQStCLEVBQUcsQ0FDdkMsSUFBTSxFQUFpQixJQUFLLGtCQUFtQixFQUMvQyxRQUFXLEtBQVEsT0FBTyxPQUFPLENBQVUsRUFBRyxDQUMxQyxJQUFLLEVBQ0QsU0FDSixRQUFhLFNBQVMsRUFDbEIsR0FBSSxJQUFzQixLQUFLLENBQUcsRUFDOUIsTUFBTyxHQUluQixNQUFPLEdBT1gsU0FBUyxHQUFxQixFQUFHLENBQzdCLE9BQU8sSUFBMkIsR0FBSyxJQUFnQyxFQU8zRSxTQUFTLEdBQWtCLEVBQUcsQ0FDMUIsT0FBTyxJQUF3QixHQUFLLElBQXNCLHVCQ2pHOUQsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFlBQWUsT0FTdkIsTUFBTSxFQUFRLE9BS0gsVUFBUyxDQUFDLEVBQVEsQ0FDckIsT0FBUSxFQUFPLFFBQ1YsT0FBTyxFQUFPLGdCQUFrQixXQUMzQixFQUFPLGNBQWMsRUFBSSxFQUN6QixVQUVQLFFBQU8sRUFBRyxDQUViLEdBREEsR0FBUSxRQUFVLEdBQVEsVUFBVSxRQUFRLE1BQU0sR0FDN0MsS0FBSyxRQUNOLEdBQVEsTUFBUSxHQUNoQixHQUFRLE9BQVMsR0FDakIsR0FBUSxJQUFNLEdBQ2QsR0FBUSxJQUFNLEdBQ2QsR0FBUSxNQUFRLEdBQ2hCLEdBQVEsT0FBUyxHQUNqQixHQUFRLEtBQU8sR0FDZixHQUFRLFFBQVUsR0FDbEIsR0FBUSxLQUFPLEdBQ2YsR0FBUSxNQUFRLEdBQ2hCLEdBQVEsS0FBTyxHQUdmLFFBQVEsTUFBUSxVQUNoQixHQUFRLE9BQVMsVUFDakIsR0FBUSxJQUFNLFVBQ2QsR0FBUSxJQUFNLFdBQ2QsR0FBUSxNQUFRLFdBQ2hCLEdBQVEsT0FBUyxXQUNqQixHQUFRLEtBQU8sV0FDZixHQUFRLFFBQVUsV0FDbEIsR0FBUSxLQUFPLFdBQ2YsR0FBUSxNQUFRLFdBQ2hCLEdBQVEsS0FBTyxXQUczQixDQUNRLFlBQVUsR0FDbEIsR0FBUSxRQUFVLEdBQ2xCLEdBQVEsTUFBUSxHQUNoQixHQUFRLE9BQVMsR0FDakIsR0FBUSxJQUFNLEdBQ2QsR0FBUSxJQUFNLEdBQ2QsR0FBUSxNQUFRLEdBQ2hCLEdBQVEsT0FBUyxHQUNqQixHQUFRLEtBQU8sR0FDZixHQUFRLFFBQVUsR0FDbEIsR0FBUSxLQUFPLEdBQ2YsR0FBUSxNQUFRLEdBQ2hCLEdBQVEsS0FBTyxHQUNmLEdBQVEsUUFBUSxxQkNoRWhCLElBQUksSUFBbUIsSUFBUSxHQUFLLGtCQUFxQixPQUFPLE9BQVUsUUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUksQ0FDNUYsR0FBSSxJQUFPLE9BQVcsRUFBSyxFQUMzQixJQUFJLEVBQU8sT0FBTyx5QkFBeUIsRUFBRyxDQUFDLEVBQy9DLElBQUssSUFBUyxRQUFTLEdBQVEsRUFBRSxXQUFhLEVBQUssVUFBWSxFQUFLLGNBQ2xFLEVBQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFRLEVBQUcsQ0FBRSxPQUFPLEVBQUUsR0FBTSxFQUU5RCxPQUFPLGVBQWUsRUFBRyxFQUFJLENBQUksR0FDL0IsUUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUksQ0FDeEIsR0FBSSxJQUFPLE9BQVcsRUFBSyxFQUMzQixFQUFFLEdBQU0sRUFBRSxLQUVWLElBQXNCLElBQVEsR0FBSyxxQkFBd0IsT0FBTyxPQUFVLFFBQVEsQ0FBQyxFQUFHLEVBQUcsQ0FDM0YsT0FBTyxlQUFlLEVBQUcsVUFBVyxDQUFFLFdBQVksR0FBTSxNQUFPLENBQUUsQ0FBQyxHQUNqRSxRQUFRLENBQUMsRUFBRyxFQUFHLENBQ2hCLEVBQUUsUUFBYSxJQUVmLElBQWdCLElBQVEsR0FBSyxjQUFpQixRQUFTLENBQUMsRUFBSyxDQUM3RCxHQUFJLEdBQU8sRUFBSSxXQUFZLE9BQU8sRUFDbEMsSUFBSSxFQUFTLENBQUMsRUFDZCxHQUFJLEdBQU8sTUFBTSxRQUFTLEtBQUssRUFBSyxHQUFJLElBQU0sV0FBYSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUssQ0FBQyxFQUFHLElBQWdCLEVBQVEsRUFBSyxDQUFDLEVBRXZJLE9BREEsSUFBbUIsRUFBUSxDQUFHLEVBQ3ZCLEdBRVgsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsSUFBTSxHQUFRLG9CQUFzQixHQUFRLFlBQWMsR0FBUSxpQkFBbUIsR0FBUSxZQUFtQixPQUN4SCxHQUFRLGVBQWlCLElBQ3pCLEdBQVEsZ0JBQWtCLElBQzFCLEdBQVEscUJBQXVCLElBQy9CLEdBQVEsV0FBYSxJQUNyQixHQUFRLElBQU0sSUFDZCxJQUFNLHNCQUNBLEdBQVUsc0JBQW9DLEVBQzlDLElBQU8sbUJBQWlDLEVBQ3hDLFNBc0JGLElBQ0gsUUFBUyxDQUFDLEVBQWEsQ0FDcEIsRUFBWSxRQUFhLFVBQ3pCLEVBQVksTUFBVyxRQUN2QixFQUFZLEtBQVUsT0FDdEIsRUFBWSxRQUFhLFVBQ3pCLEVBQVksTUFBVyxVQUN4QixLQUFnQixHQUFRLFlBQWMsR0FBYyxDQUFDLEVBQUUsRUFNMUQsTUFBTSxXQUF5QixJQUFjLFlBQWEsQ0FLdEQsV0FBVyxDQUFDLEVBQVcsRUFBVSxDQUM3QixNQUFNLEVBQ04sS0FBSyxVQUFZLEVBQ2pCLEtBQUssU0FBVyxFQUNoQixLQUFLLEtBQU8sT0FBTyxPQUFPLEtBQUssT0FBTyxLQUFLLElBQUksRUFBRyxDQUU5QyxTQUFVLEtBRVYsR0FBSSxDQUFDLEVBQU8sSUFBYSxLQUFLLEdBQUcsRUFBTyxDQUFRLENBQ3BELENBQUMsRUFFRCxLQUFLLEtBQUssTUFBUSxJQUFJLElBQVMsS0FBSyxlQUFlLEdBQVksTUFBTyxHQUFHLENBQUksRUFDN0UsS0FBSyxLQUFLLEtBQU8sSUFBSSxJQUFTLEtBQUssZUFBZSxHQUFZLEtBQU0sR0FBRyxDQUFJLEVBQzNFLEtBQUssS0FBSyxLQUFPLElBQUksSUFBUyxLQUFLLGVBQWUsR0FBWSxRQUFTLEdBQUcsQ0FBSSxFQUM5RSxLQUFLLEtBQUssTUFBUSxJQUFJLElBQVMsS0FBSyxlQUFlLEdBQVksTUFBTyxHQUFHLENBQUksRUFDN0UsS0FBSyxLQUFLLE9BQVMsQ0FBQyxJQUFjLElBQUksRUFBVyxLQUFLLElBQUksRUFFOUQsTUFBTSxDQUFDLEtBQVcsRUFBTSxDQUVwQixHQUFJLEtBQUssU0FDTCxLQUFLLFNBQVMsRUFBUSxHQUFHLENBQUksRUFHakMsS0FBSyxLQUFLLE1BQU8sRUFBUSxDQUFJLEVBRWpDLGNBQWMsQ0FBQyxLQUFhLEVBQU0sQ0FDOUIsS0FBSyxPQUFPLENBQUUsVUFBUyxFQUFHLEdBQUcsQ0FBSSxFQUV6QyxDQUNBLEdBQVEsaUJBQW1CLEdBSTNCLEdBQVEsWUFBYyxJQUFJLEdBQWlCLEdBQUksSUFBTSxFQUFHLEVBQUUsS0FRMUQsTUFBTSxFQUFvQixDQUN0QixXQUFXLEVBQUcsQ0FDVixJQUFJLEVBQ0osS0FBSyxPQUFTLElBQUksSUFDbEIsS0FBSyxRQUFVLENBQUMsRUFDaEIsS0FBSyxXQUFhLEdBR2xCLElBQUksR0FBWSxFQUFLLEdBQVEsSUFBSSxHQUFRLElBQUksZ0JBQWtCLE1BQVEsSUFBWSxPQUFJLEVBQUssSUFDNUYsR0FBSSxJQUFhLE1BQ2IsRUFBVyxJQUVmLEtBQUssUUFBVSxFQUFTLE1BQU0sR0FBRyxFQUVyQyxHQUFHLENBQUMsRUFBVyxLQUFXLEVBQU0sQ0FDNUIsR0FBSSxDQUNBLElBQUssS0FBSyxXQUNOLEtBQUssV0FBVyxFQUNoQixLQUFLLFdBQWEsR0FFdEIsSUFBSSxFQUFTLEtBQUssT0FBTyxJQUFJLENBQVMsRUFDdEMsSUFBSyxFQUNELEVBQVMsS0FBSyxXQUFXLENBQVMsRUFDbEMsS0FBSyxPQUFPLElBQUksRUFBVyxDQUFNLEVBRXJDLEVBQU8sRUFBUSxHQUFHLENBQUksRUFFMUIsTUFBTyxFQUFHLENBSU4sUUFBUSxNQUFNLENBQUMsR0FHM0IsQ0FDQSxHQUFRLG9CQUFzQixHQVM5QixNQUFNLFlBQW9CLEVBQW9CLENBQzFDLFdBQVcsRUFBRyxDQUNWLE1BQU0sR0FBRyxTQUFTLEVBR2xCLEtBQUssY0FBZ0IsTUFFekIsU0FBUyxDQUFDLEVBQVcsQ0FDakIsT0FBTyxLQUFLLGNBQWMsS0FBSyxDQUFTLEVBRTVDLFVBQVUsQ0FBQyxFQUFXLENBQ2xCLElBQUssS0FBSyxjQUFjLEtBQUssQ0FBUyxFQUNsQyxNQUFPLElBQU0sR0FFakIsTUFBTyxDQUFDLEtBQVcsSUFBUyxDQUN4QixJQUFJLEVBRUosSUFBTSxFQUFXLEdBQUcsR0FBVSxRQUFRLFFBQVEsSUFBWSxHQUFVLFFBQVEsUUFDdEUsRUFBTSxHQUFHLEdBQVUsUUFBUSxTQUFTLEdBQVEsTUFBTSxHQUFVLFFBQVEsUUFDdEUsRUFDSixPQUFRLEVBQU8sZUFDTixHQUFZLE1BQ2IsRUFBUSxHQUFHLEdBQVUsUUFBUSxNQUFNLEVBQU8sV0FBVyxHQUFVLFFBQVEsUUFDdkUsV0FDQyxHQUFZLEtBQ2IsRUFBUSxHQUFHLEdBQVUsUUFBUSxVQUFVLEVBQU8sV0FBVyxHQUFVLFFBQVEsUUFDM0UsV0FDQyxHQUFZLFFBQ2IsRUFBUSxHQUFHLEdBQVUsUUFBUSxTQUFTLEVBQU8sV0FBVyxHQUFVLFFBQVEsUUFDMUUsY0FFQSxHQUFTLEVBQUssRUFBTyxZQUFjLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FBWSxRQUM1RSxNQUVSLElBQU0sRUFBTSxJQUFLLGtCQUFrQixDQUFFLE9BQVEsR0FBVSxRQUFRLE9BQVEsRUFBRyxHQUFHLENBQUksRUFDM0UsRUFBaUIsT0FBTyxPQUFPLENBQUMsRUFBRyxDQUFNLEVBQy9DLE9BQU8sRUFBZSxTQUN0QixJQUFNLEVBQWEsT0FBTyxvQkFBb0IsQ0FBYyxFQUFFLE9BQ3hELEtBQUssVUFBVSxDQUFjLEVBQzdCLEdBQ0EsRUFBZSxFQUNmLEdBQUcsR0FBVSxRQUFRLE9BQU8sSUFBYSxHQUFVLFFBQVEsUUFDM0QsR0FDTixRQUFRLE1BQU0sa0JBQW1CLEVBQUssRUFBVSxFQUFPLEVBQUssRUFBYSxJQUFJLElBQWlCLEVBQUUsR0FLeEcsVUFBVSxFQUFHLENBRVQsSUFBTSxFQURlLEtBQUssUUFBUSxLQUFLLEdBQUcsRUFFckMsUUFBUSxxQkFBc0IsTUFBTSxFQUNwQyxRQUFRLE1BQU8sSUFBSSxFQUNuQixRQUFRLEtBQU0sS0FBSyxFQUN4QixLQUFLLGNBQWdCLElBQUksT0FBTyxJQUFJLEtBQVcsR0FBRyxFQUUxRCxDQUlBLFNBQVMsR0FBYyxFQUFHLENBQ3RCLE9BQU8sSUFBSSxJQUVmLE1BQU0sWUFBcUIsRUFBb0IsQ0FDM0MsV0FBVyxDQUFDLEVBQUssQ0FDYixNQUFNLEVBQ04sS0FBSyxTQUFXLEVBRXBCLFVBQVUsQ0FBQyxFQUFXLENBQ2xCLElBQU0sRUFBYyxLQUFLLFNBQVMsQ0FBUyxFQUMzQyxNQUFPLENBQUMsS0FBVyxJQUFTLENBRXhCLEVBQVksRUFBSyxHQUFJLEdBQUcsRUFBSyxNQUFNLENBQUMsQ0FBQyxHQUc3QyxVQUFVLEVBQUcsQ0FDVCxJQUFJLEVBQ0osSUFBTSxHQUFtQixFQUFLLEdBQVEsSUFBSSxjQUFtQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQzFGLEdBQVEsSUFBSSxXQUFnQixHQUFHLElBQWtCLEVBQWtCLElBQU0sS0FBSyxLQUFLLFFBQVEsS0FBSyxHQUFHLElBRTNHLENBZ0JBLFNBQVMsR0FBZSxDQUFDLEVBQVUsQ0FDL0IsT0FBTyxJQUFJLElBQWEsQ0FBUSxFQVFwQyxNQUFNLFlBQTBCLEVBQW9CLENBQ2hELFdBQVcsQ0FBQyxFQUFVLENBQ2xCLElBQUksRUFDSixNQUFNLEVBQ04sS0FBSyxVQUFZLEVBQUssS0FBYyxNQUFRLElBQVksT0FBSSxFQUFLLElBQUksSUFFekUsVUFBVSxDQUFDLEVBQVcsQ0FDbEIsSUFBTSxFQUFjLEtBQUssU0FBUyxXQUFXLENBQVMsRUFDdEQsTUFBTyxDQUFDLEtBQVcsSUFBUyxDQUN4QixJQUFJLEVBQ0osSUFBTSxHQUFZLEVBQUssRUFBTyxZQUFjLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FBWSxLQUMvRSxFQUFPLE9BQU8sT0FBTyxDQUN2QixXQUNBLFFBQVMsSUFBSyxPQUFPLEdBQUcsQ0FBSSxDQUNoQyxFQUFHLENBQU0sRUFDSCxFQUFhLEtBQUssVUFBVSxDQUFJLEVBQ3RDLEVBQVksRUFBUSxDQUFVLEdBR3RDLFVBQVUsRUFBRyxDQUNULEtBQUssU0FBUyxXQUFXLEVBRWpDLENBY0EsU0FBUyxHQUFvQixDQUFDLEVBQVUsQ0FDcEMsT0FBTyxJQUFJLElBQWtCLENBQVEsRUFLekMsR0FBUSxJQUFNLENBS1YsWUFBYSx5QkFDakIsRUFHQSxJQUFNLElBQWMsSUFBSSxJQUVwQixHQUFnQixPQVNwQixTQUFTLEdBQVUsQ0FBQyxFQUFTLENBQ3pCLEdBQWdCLEVBQ2hCLElBQVksTUFBTSxFQVl0QixTQUFTLEdBQUcsQ0FBQyxFQUFXLEVBQVEsQ0FHNUIsSUFEb0IsR0FBUSxJQUFJLEdBQVEsSUFBSSxhQUV4QyxPQUFPLEdBQVEsWUFJbkIsSUFBSyxFQUNELE9BQU8sR0FBUSxZQUduQixHQUFJLEVBQ0EsRUFBWSxHQUFHLEVBQU8sU0FBUyxhQUFhLElBR2hELElBQU0sRUFBVyxJQUFZLElBQUksQ0FBUyxFQUMxQyxHQUFJLEVBQ0EsT0FBTyxFQUFTLEtBR3BCLEdBQUksS0FBa0IsS0FFbEIsT0FBTyxHQUFRLFlBRWQsUUFBSSxLQUFrQixPQUV2QixHQUFnQixJQUFlLEVBR25DLElBQU0sR0FBVSxJQUFNLENBQ2xCLElBQUksRUFBa0IsT0FnQnRCLE9BZmtCLElBQUksR0FBaUIsRUFBVyxDQUFDLEtBQVcsSUFBUyxDQUNuRSxHQUFJLElBQW9CLEdBQWUsQ0FFbkMsR0FBSSxLQUFrQixLQUVsQixPQUVDLFFBQUksS0FBa0IsT0FFdkIsR0FBZ0IsSUFBZSxFQUVuQyxFQUFrQixHQUV0QixLQUFrQixNQUFRLEtBQXVCLFFBQWEsR0FBYyxJQUFJLEVBQVcsRUFBUSxHQUFHLENBQUksRUFDN0csSUFFRixFQUVILE9BREEsSUFBWSxJQUFJLEVBQVcsQ0FBTSxFQUMxQixFQUFPLHlCQ3JZbEIsSUFBSSxJQUFtQixJQUFRLEdBQUssa0JBQXFCLE9BQU8sT0FBVSxRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUM1RixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLElBQUksRUFBTyxPQUFPLHlCQUF5QixFQUFHLENBQUMsRUFDL0MsSUFBSyxJQUFTLFFBQVMsR0FBUSxFQUFFLFdBQWEsRUFBSyxVQUFZLEVBQUssY0FDbEUsRUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVEsRUFBRyxDQUFFLE9BQU8sRUFBRSxHQUFNLEVBRTlELE9BQU8sZUFBZSxFQUFHLEVBQUksQ0FBSSxHQUMvQixRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUN4QixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLEVBQUUsR0FBTSxFQUFFLEtBRVYsSUFBZ0IsSUFBUSxHQUFLLGNBQWlCLFFBQVEsQ0FBQyxFQUFHLEVBQVMsQ0FDbkUsUUFBUyxLQUFLLEVBQUcsR0FBSSxJQUFNLFlBQWMsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFTLENBQUMsRUFBRyxJQUFnQixFQUFTLEVBQUcsQ0FBQyxHQUU1SCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsVUFBeUMsRUFBTyxvQkNiaEQsSUFBSSxJQUFtQixJQUFRLEdBQUssa0JBQXFCLE9BQU8sT0FBVSxRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUM1RixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLElBQUksRUFBTyxPQUFPLHlCQUF5QixFQUFHLENBQUMsRUFDL0MsSUFBSyxJQUFTLFFBQVMsR0FBUSxFQUFFLFdBQWEsRUFBSyxVQUFZLEVBQUssY0FDbEUsRUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVEsRUFBRyxDQUFFLE9BQU8sRUFBRSxHQUFNLEVBRTlELE9BQU8sZUFBZSxFQUFHLEVBQUksQ0FBSSxHQUMvQixRQUFRLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUN4QixHQUFJLElBQU8sT0FBVyxFQUFLLEVBQzNCLEVBQUUsR0FBTSxFQUFFLEtBRVYsSUFBZ0IsSUFBUSxHQUFLLGNBQWlCLFFBQVEsQ0FBQyxFQUFHLEVBQVMsQ0FDbkUsUUFBUyxLQUFLLEVBQUcsR0FBSSxJQUFNLFlBQWMsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFTLENBQUMsRUFBRyxJQUFnQixFQUFTLEVBQUcsQ0FBQyxHQUU1SCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxrQkFBb0IsR0FBUSwwQkFBNEIsR0FBUSxRQUFVLEdBQVEsYUFBZSxHQUFRLFlBQWMsR0FBUSx1QkFBeUIsR0FBUSxhQUFlLEdBQVEsVUFBaUIsT0FDaE4sR0FBUSxTQUFXLElBQ25CLEdBQVEsUUFBVSxJQUNsQixHQUFRLFNBQVcsSUFDbkIsR0FBUSxLQUFPLElBQ2YsR0FBUSxZQUFjLElBQ3RCLEdBQVEsc0JBQXdCLElBQ2hDLEdBQVEsZ0JBQWtCLElBQzFCLEdBQVEsZ0JBQWtCLElBQzFCLEdBQVEsZUFBaUIsSUFDekIsSUFBTSxTQUNBLFVBQ0EsVUFDQSxVQUNOLEdBQVEsVUFBWSxzQkFDcEIsR0FBUSxhQUFlLHlCQUN2QixHQUFRLHVCQUF5QixtQ0FDakMsR0FBUSxZQUFjLGtCQUN0QixHQUFRLGFBQWUsU0FDdkIsR0FBUSxRQUFVLE9BQU8sT0FBTyxFQUFHLEdBQVEsYUFBYyxHQUFRLFlBQWEsQ0FBQyxFQUMvRSxJQUFNLElBQU0sSUFBTyxJQUFJLGNBQWMsRUFNckMsR0FBUSwwQkFBNEIsT0FBTyxPQUFPLENBQzlDLGlCQUFrQixpRUFDbEIsS0FBTSx3RUFDTixZQUFhLDZFQUNiLFlBQWEsaURBQ2pCLENBQUMsRUFPRCxTQUFTLEdBQVUsQ0FBQyxFQUFTLENBQ3pCLElBQUssRUFDRCxFQUNJLFFBQVEsSUFBSSxpQkFDUixRQUFRLElBQUksbUJBQ1osR0FBUSxhQUdwQixJQUFLLGVBQWUsS0FBSyxDQUFPLEVBQzVCLEVBQVUsVUFBVSxJQUV4QixPQUFPLElBQUksSUFBSSxHQUFRLFVBQVcsQ0FBTyxFQUFFLEtBTy9DLFNBQVMsR0FBUSxDQUFDLEVBQVMsQ0FDdkIsT0FBTyxLQUFLLENBQU8sRUFBRSxRQUFRLEtBQU8sQ0FDaEMsT0FBUSxPQUNDLGFBQ0EsZUFDQSxVQUNELFVBQ0MsS0FDRCxNQUFNLElBQUksTUFBTSx3RUFBd0UsVUFFeEYsTUFBTSxJQUFJLE1BQU0sSUFBSSx5Q0FBMkMsR0FFMUUsRUFFTCxlQUFlLEVBQWdCLENBQUMsRUFBTSxFQUFVLENBQUMsRUFBRyxFQUFvQixFQUFHLEVBQVcsR0FBTyxDQUN6RixJQUFJLEVBQWMsR0FDZCxFQUFTLENBQUMsRUFDVixFQUFVLENBQUMsRUFDZixHQUFJLE9BQU8sSUFBUyxTQUFVLENBQzFCLElBQU0sRUFBbUIsRUFDekIsRUFBYyxFQUFpQixZQUMvQixFQUFTLEVBQWlCLFFBQVUsRUFDcEMsRUFBVSxFQUFpQixTQUFXLEVBQ3RDLEVBQW9CLEVBQWlCLG1CQUFxQixFQUMxRCxFQUFXLEVBQWlCLFVBQVksRUFHeEMsT0FBYyxFQUVsQixHQUFJLE9BQU8sSUFBWSxTQUNuQixHQUFlLElBQUksSUFFbEIsS0FFRCxHQURBLElBQVMsQ0FBTyxFQUNaLEVBQVEsU0FDUixHQUFlLElBQUksRUFBUSxXQUUvQixFQUFVLEVBQVEsU0FBVyxFQUM3QixFQUFTLEVBQVEsUUFBVSxFQUUvQixJQUFNLEVBQWdCLEVBQVcsSUFBMEIsSUFBUyxRQUM5RCxFQUFNLENBQ1IsSUFBSyxHQUFHLElBQVcsS0FBSyxJQUN4QixRQUFTLElBQUssR0FBUSxXQUFZLENBQVEsRUFDMUMsWUFBYSxDQUFFLG1CQUFrQixFQUNqQyxTQUNBLGFBQWMsT0FDZCxRQUFTLElBQWUsQ0FDNUIsRUFDQSxJQUFJLEtBQUssc0JBQXVCLENBQUcsRUFDbkMsSUFBTSxFQUFNLE1BQU0sRUFBYyxDQUFHLEVBR25DLEdBRkEsSUFBSSxLQUFLLDBCQUEyQixFQUFJLElBQUksRUFFeEMsRUFBSSxRQUFRLEdBQVEsWUFBWSxZQUFZLEtBQU8sR0FBUSxhQUMzRCxNQUFNLElBQUksTUFBTSxxREFBcUQsR0FBUSxpQ0FBaUMsR0FBUSxzQkFBc0IsRUFBSSxRQUFRLEdBQVEsWUFBWSxZQUFZLEdBQUssSUFBSSxFQUFJLFFBQVEsR0FBUSxZQUFZLFlBQVksTUFBUSxhQUFhLEVBRXRRLEdBQUksT0FBTyxFQUFJLE9BQVMsU0FDcEIsR0FBSSxDQUNBLE9BQU8sSUFBVyxNQUFNLEVBQUksSUFBSSxFQUVwQyxNQUFPLEVBQUksRUFJZixPQUFPLEVBQUksS0FFZixlQUFlLEdBQXVCLENBQUMsRUFBUyxDQUM1QyxJQUFJLEVBQ0osSUFBTSxFQUFtQixJQUNsQixFQUNILEtBQU0sRUFBSyxFQUFRLE9BQVMsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFNBQVMsRUFBRSxRQUFRLElBQVcsRUFBRyxJQUFXLEdBQVEsc0JBQXNCLENBQUMsQ0FDL0ksRUFnQkksRUFBWSxHQUNWLEVBQVMsSUFBUyxRQUFTLENBQU8sRUFDbkMsS0FBSyxLQUFPLENBRWIsT0FEQSxFQUFZLEdBQ0wsRUFDVixFQUNJLE1BQU0sS0FBTyxDQUNkLEdBQUksRUFDQSxPQUFPLEVBSVAsV0FEQSxFQUFZLEdBQ04sRUFFYixFQUNLLEVBQVMsSUFBUyxRQUFTLENBQWdCLEVBQzVDLEtBQUssS0FBTyxDQUViLE9BREEsRUFBWSxHQUNMLEVBQ1YsRUFDSSxNQUFNLEtBQU8sQ0FDZCxHQUFJLEVBQ0EsT0FBTyxFQUlQLFdBREEsRUFBWSxHQUNOLEVBRWIsRUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUksQ0FBRSxDQUFDLEVBY2hDLFNBQVMsR0FBUSxDQUFDLEVBQVMsQ0FDdkIsT0FBTyxHQUFpQixXQUFZLENBQU8sRUFjL0MsU0FBUyxHQUFPLENBQUMsRUFBUyxDQUN0QixPQUFPLEdBQWlCLFVBQVcsQ0FBTyxFQVk5QyxTQUFTLEdBQVEsQ0FBQyxFQUFTLENBQ3ZCLE9BQU8sR0FBaUIsV0FBWSxDQUFPLEVBeUIvQyxlQUFlLEdBQUksQ0FBQyxFQUFZLENBQzVCLElBQU0sRUFBSSxDQUFDLEVBUVgsT0FQQSxNQUFNLFFBQVEsSUFBSSxFQUFXLElBQUksS0FBUSxDQUNyQyxPQUFRLFNBQVksQ0FDaEIsSUFBTSxFQUFNLE1BQU0sR0FBaUIsQ0FBSSxFQUNqQyxFQUFNLEVBQUssWUFDakIsRUFBRSxHQUFPLElBQ1YsRUFDTixDQUFDLEVBQ0ssRUFLWCxTQUFTLEdBQXlCLEVBQUcsQ0FDakMsT0FBTyxRQUFRLElBQUksbUJBQ2IsT0FBTyxRQUFRLElBQUksa0JBQWtCLEVBQ3JDLEVBRVYsSUFBSSxHQUlKLGVBQWUsR0FBVyxFQUFHLENBQ3pCLEdBQUksUUFBUSxJQUFJLDBCQUEyQixDQUN2QyxJQUFNLEVBQVEsUUFBUSxJQUFJLDBCQUEwQixLQUFLLEVBQUUsa0JBQWtCLEVBQzdFLEtBQU0sS0FBUyxHQUFRLDJCQUNuQixNQUFNLElBQUksV0FBVyw2REFBNkQsMkJBQStCLE9BQU8sS0FBSyxHQUFRLHlCQUF5QixFQUFFLEtBQUssTUFBTSxlQUFlLEVBRTlMLE9BQVEsT0FDQyxpQkFDRCxNQUFPLE9BQ04sT0FDRCxNQUFPLE9BQ04sWUFDRCxPQUFPLElBQWdCLE1BQ3RCLGNBSWIsR0FBSSxDQUtBLEdBQUksS0FBOEIsT0FDOUIsR0FBNEIsR0FBaUIsV0FBWSxPQUFXLElBQTBCLElBSTVGLFFBQVEsSUFBSSxpQkFBbUIsUUFBUSxJQUFJLGtCQUFrQixFQUduRSxPQURBLE1BQU0sR0FDQyxHQUVYLE1BQU8sRUFBRyxDQUNOLElBQU0sRUFBTSxFQUNaLEdBQUksUUFBUSxJQUFJLFdBQ1osUUFBUSxLQUFLLENBQUcsRUFFcEIsR0FBSSxFQUFJLE9BQVMsa0JBR2IsTUFBTyxHQUVYLEdBQUksRUFBSSxVQUFZLEVBQUksU0FBUyxTQUFXLElBQ3hDLE1BQU8sR0FFTixLQUNELEtBQU0sRUFBSSxVQUFZLEVBQUksU0FBUyxTQUFXLFFBR3hDLEVBQUksT0FDRCxDQUNHLFlBQ0EsZUFDQSxjQUNBLFNBQ0EsWUFDQSxjQUNKLEVBQUUsU0FBUyxFQUFJLElBQUksR0FBSSxDQUMzQixJQUFJLEVBQU8sVUFDWCxHQUFJLEVBQUksS0FDSixFQUFPLEVBQUksS0FDZixRQUFRLFlBQVksK0JBQStCLEVBQUksa0JBQWtCLElBQVEsdUJBQXVCLEVBRzVHLE1BQU8sS0FPbkIsU0FBUyxHQUFxQixFQUFHLENBQzdCLEdBQTRCLE9BS2hDLEdBQVEsa0JBQW9CLEtBTzVCLFNBQVMsR0FBZSxFQUFHLENBQ3ZCLEdBQUksR0FBUSxvQkFBc0IsS0FDOUIsSUFBZ0IsRUFFcEIsT0FBTyxHQUFRLGtCQVNuQixTQUFTLEdBQWUsQ0FBQyxFQUFRLEtBQU0sQ0FDbkMsR0FBUSxrQkFBb0IsSUFBVSxLQUFPLEVBQVksSUFBZ0IsbUJBQW9CLEVBV2pHLFNBQVMsR0FBYyxFQUFHLENBQ3RCLE9BQU8sSUFBZ0IsRUFBSSxFQUFJLEtBRW5DLFVBQXlDLEVBQU8sc0JDcFp4QyxlQUFhLElBQ2IsZ0JBQWMsSUFDZCxrQkFBZ0IsSUFFeEIsSUFBSSxHQUFTLENBQUMsRUFDVixHQUFZLENBQUMsRUFDYixJQUFNLE9BQU8sYUFBZSxZQUFjLFdBQWEsTUFFdkQsSUFBTyxtRUFDWCxJQUFTLEdBQUksRUFBRyxJQUFNLElBQUssT0FBUSxHQUFJLE1BQU8sR0FDNUMsR0FBTyxJQUFLLElBQUssSUFDakIsR0FBVSxJQUFLLFdBQVcsRUFBQyxHQUFLLEdBRnpCLE9BQU8sSUFPaEIsR0FBVSxJQUFxQixHQUMvQixHQUFVLElBQXFCLEdBRS9CLFNBQVMsR0FBUSxDQUFDLEVBQUssQ0FDckIsSUFBSSxFQUFNLEVBQUksT0FFZCxHQUFJLEVBQU0sRUFBSSxFQUNaLE1BQU0sSUFBSSxNQUFNLGdEQUFnRCxFQUtsRSxJQUFJLEVBQVcsRUFBSSxRQUFRLEdBQUcsRUFDOUIsR0FBSSxJQUFhLEdBQUksRUFBVyxFQUVoQyxJQUFJLEVBQWtCLElBQWEsRUFDL0IsRUFDQSxFQUFLLEVBQVcsRUFFcEIsTUFBTyxDQUFDLEVBQVUsQ0FBZSxFQUluQyxTQUFTLEdBQVcsQ0FBQyxFQUFLLENBQ3hCLElBQUksRUFBTyxJQUFRLENBQUcsRUFDbEIsRUFBVyxFQUFLLEdBQ2hCLEVBQWtCLEVBQUssR0FDM0IsT0FBUyxFQUFXLEdBQW1CLEVBQUksRUFBSyxFQUdsRCxTQUFTLEdBQVksQ0FBQyxFQUFLLEVBQVUsRUFBaUIsQ0FDcEQsT0FBUyxFQUFXLEdBQW1CLEVBQUksRUFBSyxFQUdsRCxTQUFTLEdBQVksQ0FBQyxFQUFLLENBQ3pCLElBQUksRUFDQSxFQUFPLElBQVEsQ0FBRyxFQUNsQixFQUFXLEVBQUssR0FDaEIsRUFBa0IsRUFBSyxHQUV2QixFQUFNLElBQUksSUFBSSxJQUFZLEVBQUssRUFBVSxDQUFlLENBQUMsRUFFekQsRUFBVSxFQUdWLEVBQU0sRUFBa0IsRUFDeEIsRUFBVyxFQUNYLEVBRUEsRUFDSixJQUFLLEVBQUksRUFBRyxFQUFJLEVBQUssR0FBSyxFQUN4QixFQUNHLEdBQVUsRUFBSSxXQUFXLENBQUMsSUFBTSxHQUNoQyxHQUFVLEVBQUksV0FBVyxFQUFJLENBQUMsSUFBTSxHQUNwQyxHQUFVLEVBQUksV0FBVyxFQUFJLENBQUMsSUFBTSxFQUNyQyxHQUFVLEVBQUksV0FBVyxFQUFJLENBQUMsR0FDaEMsRUFBSSxLQUFjLEdBQU8sR0FBTSxJQUMvQixFQUFJLEtBQWMsR0FBTyxFQUFLLElBQzlCLEVBQUksS0FBYSxFQUFNLElBR3pCLEdBQUksSUFBb0IsRUFDdEIsRUFDRyxHQUFVLEVBQUksV0FBVyxDQUFDLElBQU0sRUFDaEMsR0FBVSxFQUFJLFdBQVcsRUFBSSxDQUFDLElBQU0sRUFDdkMsRUFBSSxLQUFhLEVBQU0sSUFHekIsR0FBSSxJQUFvQixFQUN0QixFQUNHLEdBQVUsRUFBSSxXQUFXLENBQUMsSUFBTSxHQUNoQyxHQUFVLEVBQUksV0FBVyxFQUFJLENBQUMsSUFBTSxFQUNwQyxHQUFVLEVBQUksV0FBVyxFQUFJLENBQUMsSUFBTSxFQUN2QyxFQUFJLEtBQWMsR0FBTyxFQUFLLElBQzlCLEVBQUksS0FBYSxFQUFNLElBR3pCLE9BQU8sRUFHVCxTQUFTLEdBQWdCLENBQUMsRUFBSyxDQUM3QixPQUFPLEdBQU8sR0FBTyxHQUFLLElBQ3hCLEdBQU8sR0FBTyxHQUFLLElBQ25CLEdBQU8sR0FBTyxFQUFJLElBQ2xCLEdBQU8sRUFBTSxJQUdqQixTQUFTLEdBQVksQ0FBQyxFQUFPLEVBQU8sRUFBSyxDQUN2QyxJQUFJLEVBQ0EsRUFBUyxDQUFDLEVBQ2QsUUFBUyxFQUFJLEVBQU8sRUFBSSxFQUFLLEdBQUssRUFDaEMsR0FDSSxFQUFNLElBQU0sR0FBTSxXQUNsQixFQUFNLEVBQUksSUFBTSxFQUFLLFFBQ3RCLEVBQU0sRUFBSSxHQUFLLEtBQ2xCLEVBQU8sS0FBSyxJQUFnQixDQUFHLENBQUMsRUFFbEMsT0FBTyxFQUFPLEtBQUssRUFBRSxFQUd2QixTQUFTLEdBQWMsQ0FBQyxFQUFPLENBQzdCLElBQUksRUFDQSxFQUFNLEVBQU0sT0FDWixFQUFhLEVBQU0sRUFDbkIsRUFBUSxDQUFDLEVBQ1QsRUFBaUIsTUFHckIsUUFBUyxFQUFJLEVBQUcsRUFBTyxFQUFNLEVBQVksRUFBSSxFQUFNLEdBQUssRUFDdEQsRUFBTSxLQUFLLElBQVksRUFBTyxFQUFJLEVBQUksRUFBa0IsRUFBTyxFQUFRLEVBQUksQ0FBZSxDQUFDLEVBSTdGLEdBQUksSUFBZSxFQUNqQixFQUFNLEVBQU0sRUFBTSxHQUNsQixFQUFNLEtBQ0osR0FBTyxHQUFPLEdBQ2QsR0FBUSxHQUFPLEVBQUssSUFDcEIsSUFDRixFQUNLLFFBQUksSUFBZSxFQUN4QixHQUFPLEVBQU0sRUFBTSxJQUFNLEdBQUssRUFBTSxFQUFNLEdBQzFDLEVBQU0sS0FDSixHQUFPLEdBQU8sSUFDZCxHQUFRLEdBQU8sRUFBSyxJQUNwQixHQUFRLEdBQU8sRUFBSyxJQUNwQixHQUNGLEVBR0YsT0FBTyxFQUFNLEtBQUssRUFBRSx1QkNySXRCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBcUIsT0FHN0IsSUFBTSxTQUNBLFNBQ04sTUFBTSxFQUFjLENBQ2hCLFdBQVcsRUFBRyxDQUNWLEdBQUksT0FBTyxTQUFXLGFBQ2xCLE9BQU8sU0FBVyxRQUNsQixPQUFPLE9BQU8sU0FBVyxPQUN6QixNQUFNLElBQUksTUFBTSw2REFBNkQsT0FHL0UsbUJBQWtCLENBQUMsRUFBSyxDQUsxQixJQUFNLEVBQWMsSUFBSSxZQUFZLEVBQUUsT0FBTyxDQUFHLEVBRTFDLEVBQWUsTUFBTSxPQUFPLE9BQU8sT0FBTyxPQUFPLFVBQVcsQ0FBVyxFQUM3RSxPQUFPLEdBQVMsY0FBYyxJQUFJLFdBQVcsQ0FBWSxDQUFDLEVBRTlELGlCQUFpQixDQUFDLEVBQU8sQ0FDckIsSUFBTSxFQUFRLElBQUksV0FBVyxDQUFLLEVBRWxDLE9BREEsT0FBTyxPQUFPLGdCQUFnQixDQUFLLEVBQzVCLEdBQVMsY0FBYyxDQUFLLFFBRWhDLFVBQVMsQ0FBQyxFQUFRLENBRXJCLE1BQU8sRUFBTyxPQUFTLElBQU0sRUFDekIsR0FBVSxJQUVkLE9BQU8sT0FFTCxPQUFNLENBQUMsRUFBUSxFQUFNLEVBQVcsQ0FDbEMsSUFBTSxFQUFPLENBQ1QsS0FBTSxvQkFDTixLQUFNLENBQUUsS0FBTSxTQUFVLENBQzVCLEVBQ00sRUFBWSxJQUFJLFlBQVksRUFBRSxPQUFPLENBQUksRUFDekMsRUFBaUIsR0FBUyxZQUFZLEdBQWMsVUFBVSxDQUFTLENBQUMsRUFDeEUsRUFBWSxNQUFNLE9BQU8sT0FBTyxPQUFPLFVBQVUsTUFBTyxFQUFRLEVBQU0sR0FBTSxDQUFDLFFBQVEsQ0FBQyxFQUk1RixPQURlLE1BQU0sT0FBTyxPQUFPLE9BQU8sT0FBTyxFQUFNLEVBQVcsRUFBZ0IsQ0FBUyxPQUd6RixLQUFJLENBQUMsRUFBWSxFQUFNLENBQ3pCLElBQU0sRUFBTyxDQUNULEtBQU0sb0JBQ04sS0FBTSxDQUFFLEtBQU0sU0FBVSxDQUM1QixFQUNNLEVBQVksSUFBSSxZQUFZLEVBQUUsT0FBTyxDQUFJLEVBQ3pDLEVBQVksTUFBTSxPQUFPLE9BQU8sT0FBTyxVQUFVLE1BQU8sRUFBWSxFQUFNLEdBQU0sQ0FBQyxNQUFNLENBQUMsRUFHeEYsRUFBUyxNQUFNLE9BQU8sT0FBTyxPQUFPLEtBQUssRUFBTSxFQUFXLENBQVMsRUFDekUsT0FBTyxHQUFTLGNBQWMsSUFBSSxXQUFXLENBQU0sQ0FBQyxFQUV4RCxzQkFBc0IsQ0FBQyxFQUFRLENBQzNCLElBQU0sRUFBYSxHQUFTLFlBQVksR0FBYyxVQUFVLENBQU0sQ0FBQyxFQUV2RSxPQURlLElBQUksWUFBWSxFQUFFLE9BQU8sQ0FBVSxFQUd0RCxzQkFBc0IsQ0FBQyxFQUFNLENBQ3pCLElBQU0sRUFBYSxJQUFJLFlBQVksRUFBRSxPQUFPLENBQUksRUFFaEQsT0FEZSxHQUFTLGNBQWMsQ0FBVSxPQVM5QyxnQkFBZSxDQUFDLEVBQUssQ0FLdkIsSUFBTSxFQUFjLElBQUksWUFBWSxFQUFFLE9BQU8sQ0FBRyxFQUUxQyxFQUFlLE1BQU0sT0FBTyxPQUFPLE9BQU8sT0FBTyxVQUFXLENBQVcsRUFDN0UsT0FBVyxJQUFTLHFCQUFzQixDQUFZLE9BVXBELG1CQUFrQixDQUFDLEVBQUssRUFBSyxDQUUvQixJQUFNLEVBQVMsT0FBTyxJQUFRLFNBQ3hCLEVBQ0EsT0FBTyxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQUcsQ0FBQyxFQUMzQyxFQUFNLElBQUksWUFDVixFQUFZLE1BQU0sT0FBTyxPQUFPLE9BQU8sVUFBVSxNQUFPLEVBQUksT0FBTyxDQUFNLEVBQUcsQ0FDOUUsS0FBTSxPQUNOLEtBQU0sQ0FDRixLQUFNLFNBQ1YsQ0FDSixFQUFHLEdBQU8sQ0FBQyxNQUFNLENBQUMsRUFDbEIsT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLLE9BQVEsRUFBVyxFQUFJLE9BQU8sQ0FBRyxDQUFDLEVBRTNFLENBQ1Esa0JBQWdCLHVCQy9HeEIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGVBQWtCLE9BQzFCLElBQU0sZ0JBQ04sTUFBTSxHQUFXLE1BQ1AsbUJBQWtCLENBQUMsRUFBSyxDQUMxQixPQUFPLEdBQU8sV0FBVyxRQUFRLEVBQUUsT0FBTyxDQUFHLEVBQUUsT0FBTyxRQUFRLEVBRWxFLGlCQUFpQixDQUFDLEVBQU8sQ0FDckIsT0FBTyxHQUFPLFlBQVksQ0FBSyxFQUFFLFNBQVMsUUFBUSxPQUVoRCxPQUFNLENBQUMsRUFBUSxFQUFNLEVBQVcsQ0FDbEMsSUFBTSxFQUFXLEdBQU8sYUFBYSxZQUFZLEVBR2pELE9BRkEsRUFBUyxPQUFPLENBQUksRUFDcEIsRUFBUyxJQUFJLEVBQ04sRUFBUyxPQUFPLEVBQVEsRUFBVyxRQUFRLE9BRWhELEtBQUksQ0FBQyxFQUFZLEVBQU0sQ0FDekIsSUFBTSxFQUFTLEdBQU8sV0FBVyxZQUFZLEVBRzdDLE9BRkEsRUFBTyxPQUFPLENBQUksRUFDbEIsRUFBTyxJQUFJLEVBQ0osRUFBTyxLQUFLLEVBQVksUUFBUSxFQUUzQyxzQkFBc0IsQ0FBQyxFQUFRLENBQzNCLE9BQU8sT0FBTyxLQUFLLEVBQVEsUUFBUSxFQUFFLFNBQVMsT0FBTyxFQUV6RCxzQkFBc0IsQ0FBQyxFQUFNLENBQ3pCLE9BQU8sT0FBTyxLQUFLLEVBQU0sT0FBTyxFQUFFLFNBQVMsUUFBUSxPQVFqRCxnQkFBZSxDQUFDLEVBQUssQ0FDdkIsT0FBTyxHQUFPLFdBQVcsUUFBUSxFQUFFLE9BQU8sQ0FBRyxFQUFFLE9BQU8sS0FBSyxPQVV6RCxtQkFBa0IsQ0FBQyxFQUFLLEVBQUssQ0FDL0IsSUFBTSxFQUFZLE9BQU8sSUFBUSxTQUFXLEVBQU0sSUFBUyxDQUFHLEVBQzlELE9BQU8sSUFBYyxHQUFPLFdBQVcsU0FBVSxDQUFTLEVBQUUsT0FBTyxDQUFHLEVBQUUsT0FBTyxDQUFDLEVBRXhGLENBQ1EsZUFBYSxJQU9yQixTQUFTLEdBQWEsQ0FBQyxFQUFRLENBQzNCLE9BQU8sRUFBTyxPQUFPLE1BQU0sRUFBTyxXQUFZLEVBQU8sV0FBYSxFQUFPLFVBQVUsRUFPdkYsU0FBUyxHQUFRLENBQUMsRUFBYSxDQUMzQixPQUFPLE9BQU8sS0FBSyxDQUFXLHNCQ2pFbEMsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGlCQUFlLElBQ2YscUJBQW1CLElBQ25CLHlCQUF1QixJQUMvQixJQUFNLFVBQ0EsVUFDTixTQUFTLEdBQVksRUFBRyxDQUNwQixHQUFJLElBQWlCLEVBQ2pCLE9BQU8sSUFBSSxJQUFTLGNBRXhCLE9BQU8sSUFBSSxJQUFTLFdBRXhCLFNBQVMsR0FBZ0IsRUFBRyxDQUN4QixPQUFRLE9BQU8sU0FBVyxhQUN0QixPQUFPLE9BQU8sU0FBVyxhQUN6QixPQUFPLE9BQU8sT0FBTyxTQUFXLFlBT3hDLFNBQVMsR0FBb0IsQ0FBQyxFQUFhLENBSXZDLE9BRmtCLE1BQU0sS0FBSyxJQUFJLFdBQVcsQ0FBVyxDQUFDLEVBR25ELElBQUksS0FBUSxDQUNiLE9BQU8sRUFBSyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUcsR0FBRyxFQUMzQyxFQUNJLEtBQUssRUFBRSx1QkMvQmhCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxhQUFXLElBTW5CLFNBQVMsR0FBUSxDQUFDLEVBQVMsQ0FDdkIsSUFBTSxFQUFTLENBQ1gsQ0FBRSxRQUFTLE1BQU8sU0FBVSxLQUFNLEVBQ2xDLENBQUUsUUFBUyxPQUFRLFNBQVUsTUFBTyxFQUNwQyxDQUFFLFFBQVMsS0FBTSxTQUFVLFFBQVMsQ0FDeEMsRUFDQSxRQUFXLEtBQVEsRUFDZixHQUFJLEVBQVEsRUFBSyxTQUFVLENBQ3ZCLElBQU0sRUFBSSxJQUFJLEVBQUssNkRBQTZELEVBQUssd0pBQ3JGLE1BQU0sSUFBSSxNQUFNLENBQUMsNmhFQ2hCN0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHVCQUEwQixPQUNsQyxJQUFNLFNBQ0EsVUFFQSxVQUNBLElBQWUsMkJBQ3JCLE1BQU0sRUFBbUIsQ0FDckIsV0FBVyxFQUFHLENBSVYsS0FBSyxTQUFXLElBQUksSUFBUyxPQU9qQyxTQUFTLENBQUMsRUFBTyxDQUFDLEVBQUcsQ0FFakIsR0FEQSxFQUFLLFFBQVUsRUFBSyxTQUFXLENBQUMsRUFDNUIsT0FBTyxTQUFXLFlBQWEsQ0FFL0IsSUFBTSxFQUFVLEVBQUssUUFBUSxjQUM3QixJQUFLLEVBQ0QsRUFBSyxRQUFRLGNBQWdCLEdBQW1CLFdBRS9DLFNBQUssRUFBUSxTQUFTLEdBQUcsTUFBZSxFQUN6QyxFQUFLLFFBQVEsY0FDVCxHQUFHLEtBQVcsR0FBbUIsYUFHekMsSUFBSyxFQUFLLFFBQVEscUJBQXNCLENBQ3BDLElBQU0sRUFBYyxRQUFRLFFBQVEsUUFBUSxLQUFNLEVBQUUsRUFDcEQsRUFBSyxRQUFRLHFCQUF1QixXQUFXLEtBR3ZELE9BQU8sRUFRWCxPQUFPLENBQUMsRUFBTSxDQUlWLE9BRkEsRUFBTyxLQUFLLFVBQVUsQ0FBSSxFQUN0QixJQUFVLFNBQVUsQ0FBSSxFQUNyQixLQUFLLFNBQVMsUUFBUSxDQUFJLEVBQUUsTUFBTSxLQUFLLENBQzFDLE1BQU0sS0FBSyxhQUFhLENBQUMsRUFDNUIsS0FFRCxTQUFRLEVBQUcsQ0FDWCxPQUFPLEtBQUssU0FBUyxZQUVyQixTQUFRLENBQUMsRUFBTSxDQUNmLEtBQUssU0FBUyxTQUFXLEVBSzdCLFlBQVksQ0FBQyxFQUFHLENBQ1osSUFBTSxFQUFNLEVBQUUsU0FDUixFQUFNLEVBQ04sRUFBTyxFQUFNLEVBQUksS0FBTyxLQUM5QixHQUFJLEdBQU8sR0FBUSxFQUFLLE9BQVMsRUFBSSxTQUFXLElBQzVDLEdBQUksT0FBTyxFQUFLLFFBQVUsU0FDdEIsRUFBSSxRQUFVLEVBQUssTUFDbkIsRUFBSSxPQUFTLEVBQUksT0FFaEIsUUFBSSxNQUFNLFFBQVEsRUFBSyxNQUFNLE1BQU0sRUFDcEMsRUFBSSxRQUFVLEVBQUssTUFBTSxPQUNwQixJQUFJLENBQUMsSUFBUyxFQUFLLE9BQU8sRUFDMUIsS0FBSztBQUFBLENBQUksRUFDZCxFQUFJLEtBQU8sRUFBSyxNQUFNLEtBQ3RCLEVBQUksT0FBUyxFQUFLLE1BQU0sT0FHeEIsT0FBSSxRQUFVLEVBQUssTUFBTSxRQUN6QixFQUFJLEtBQU8sRUFBSyxNQUFNLEtBR3pCLFFBQUksR0FBTyxFQUFJLFFBQVUsSUFFMUIsRUFBSSxRQUFVLEVBQ2QsRUFBSSxPQUFTLEVBQUksT0FFckIsT0FBTyxFQUVmLENBQ1EsdUJBQXFCLEdBSTdCLEdBQW1CLFdBQWEsR0FBRyxPQUFnQixJQUFJLHFIQzNHdkQsSUFBSSxnQkFDQSxHQUFTLEdBQU8sT0FHcEIsU0FBUyxHQUFVLENBQUMsRUFBSyxFQUFLLENBQzVCLFFBQVMsS0FBTyxFQUNkLEVBQUksR0FBTyxFQUFJLEdBR25CLEdBQUksR0FBTyxNQUFRLEdBQU8sT0FBUyxHQUFPLGFBQWUsR0FBTyxnQkFDOUQsSUFBTyxRQUFVLEdBR2pCLFNBQVUsR0FBUSxHQUFPLEVBQ3pCLElBQVEsT0FBUyxHQUduQixTQUFTLEVBQVcsQ0FBQyxFQUFLLEVBQWtCLEVBQVEsQ0FDbEQsT0FBTyxHQUFPLEVBQUssRUFBa0IsQ0FBTSxFQUc3QyxHQUFXLFVBQVksT0FBTyxPQUFPLEdBQU8sU0FBUyxFQUdyRCxJQUFVLEdBQVEsRUFBVSxFQUU1QixHQUFXLEtBQU8sUUFBUyxDQUFDLEVBQUssRUFBa0IsRUFBUSxDQUN6RCxHQUFJLE9BQU8sSUFBUSxTQUNqQixNQUFNLElBQUksVUFBVSwrQkFBK0IsRUFFckQsT0FBTyxHQUFPLEVBQUssRUFBa0IsQ0FBTSxHQUc3QyxHQUFXLE1BQVEsUUFBUyxDQUFDLEVBQU0sRUFBTSxFQUFVLENBQ2pELEdBQUksT0FBTyxJQUFTLFNBQ2xCLE1BQU0sSUFBSSxVQUFVLDJCQUEyQixFQUVqRCxJQUFJLEVBQU0sR0FBTyxDQUFJLEVBQ3JCLEdBQUksSUFBUyxPQUNYLEdBQUksT0FBTyxJQUFhLFNBQ3RCLEVBQUksS0FBSyxFQUFNLENBQVEsRUFFdkIsT0FBSSxLQUFLLENBQUksRUFHZixPQUFJLEtBQUssQ0FBQyxFQUVaLE9BQU8sR0FHVCxHQUFXLFlBQWMsUUFBUyxDQUFDLEVBQU0sQ0FDdkMsR0FBSSxPQUFPLElBQVMsU0FDbEIsTUFBTSxJQUFJLFVBQVUsMkJBQTJCLEVBRWpELE9BQU8sR0FBTyxDQUFJLEdBR3BCLEdBQVcsZ0JBQWtCLFFBQVMsQ0FBQyxFQUFNLENBQzNDLEdBQUksT0FBTyxJQUFTLFNBQ2xCLE1BQU0sSUFBSSxVQUFVLDJCQUEyQixFQUVqRCxPQUFPLEdBQU8sV0FBVyxDQUFJLDJCQzdEL0IsU0FBUyxHQUFZLENBQUMsRUFBUyxDQUM5QixJQUFJLEdBQVcsRUFBVSxFQUFLLElBQU0sRUFBVSxJQUFNLEVBQUksRUFBSSxHQUM1RCxPQUFPLEVBR1IsSUFBSSxJQUFtQixDQUN0QixNQUFPLElBQWEsR0FBRyxFQUN2QixNQUFPLElBQWEsR0FBRyxFQUN2QixNQUFPLElBQWEsR0FBRyxDQUN4QixFQUVBLFNBQVMsR0FBbUIsQ0FBQyxFQUFLLENBQ2pDLElBQUksRUFBYSxJQUFpQixHQUNsQyxHQUFJLEVBQ0gsT0FBTyxFQUdSLE1BQU0sSUFBSSxNQUFNLHNCQUF3QixFQUFNLEdBQUcsRUFHbEQsSUFBTyxRQUFVLDRCQ3BCakIsSUFBSSxRQUFnQyxPQUVoQyxVQUVBLEdBQVksSUFDZixJQUFrQixFQUNsQixJQUFnQixHQUNoQixJQUFVLEdBQ1YsSUFBVSxFQUNWLElBQW1CLElBQVUsSUFBa0IsS0FBbUIsRUFDbEUsR0FBa0IsSUFBVyxLQUFtQixFQUVqRCxTQUFTLEdBQVMsQ0FBQyxFQUFRLENBQzFCLE9BQU8sRUFDTCxRQUFRLEtBQU0sRUFBRSxFQUNoQixRQUFRLE1BQU8sR0FBRyxFQUNsQixRQUFRLE1BQU8sR0FBRyxFQUdyQixTQUFTLEdBQWlCLENBQUMsRUFBVyxDQUNyQyxHQUFJLEdBQU8sU0FBUyxDQUFTLEVBQzVCLE9BQU8sRUFDRCxRQUFpQixPQUFPLElBQXBCLFNBQ1YsT0FBTyxHQUFPLEtBQUssRUFBVyxRQUFRLEVBR3ZDLE1BQU0sSUFBSSxVQUFVLHFEQUFxRCxFQUcxRSxTQUFTLEdBQVMsQ0FBQyxFQUFXLEVBQUssQ0FDbEMsRUFBWSxJQUFrQixDQUFTLEVBQ3ZDLElBQUksRUFBYSxJQUFvQixDQUFHLEVBSXBDLEVBQXdCLEVBQWEsRUFFckMsRUFBYyxFQUFVLE9BRXhCLEVBQVMsRUFDYixHQUFJLEVBQVUsT0FBYyxJQUMzQixNQUFNLElBQUksTUFBTSwrQkFBK0IsRUFHaEQsSUFBSSxFQUFZLEVBQVUsS0FDMUIsR0FBSSxLQUFlLEdBQVksR0FDOUIsRUFBWSxFQUFVLEtBR3ZCLEdBQUksRUFBYyxFQUFTLEVBQzFCLE1BQU0sSUFBSSxNQUFNLDhCQUFnQyxFQUFZLGFBQWUsRUFBYyxHQUFVLGFBQWEsRUFHakgsR0FBSSxFQUFVLE9BQWMsR0FDM0IsTUFBTSxJQUFJLE1BQU0sdUNBQXVDLEVBR3hELElBQUksRUFBVSxFQUFVLEtBRXhCLEdBQUksRUFBYyxFQUFTLEVBQUksRUFDOUIsTUFBTSxJQUFJLE1BQU0sNEJBQThCLEVBQVUsYUFBZSxFQUFjLEVBQVMsR0FBSyxhQUFhLEVBR2pILEdBQUksRUFBd0IsRUFDM0IsTUFBTSxJQUFJLE1BQU0sNEJBQThCLEVBQVUsY0FBZ0IsRUFBd0IsaUJBQWlCLEVBR2xILElBQUksRUFBVSxFQUdkLEdBRkEsR0FBVSxFQUVOLEVBQVUsT0FBYyxHQUMzQixNQUFNLElBQUksTUFBTSx1Q0FBdUMsRUFHeEQsSUFBSSxFQUFVLEVBQVUsS0FFeEIsR0FBSSxFQUFjLElBQVcsRUFDNUIsTUFBTSxJQUFJLE1BQU0sNEJBQThCLEVBQVUsaUJBQW1CLEVBQWMsR0FBVSxHQUFHLEVBR3ZHLEdBQUksRUFBd0IsRUFDM0IsTUFBTSxJQUFJLE1BQU0sNEJBQThCLEVBQVUsY0FBZ0IsRUFBd0IsaUJBQWlCLEVBR2xILElBQUksRUFBVSxFQUdkLEdBRkEsR0FBVSxFQUVOLElBQVcsRUFDZCxNQUFNLElBQUksTUFBTSw0Q0FBOEMsRUFBYyxHQUFVLGdCQUFnQixFQUd2RyxJQUFJLEVBQVcsRUFBYSxFQUMzQixFQUFXLEVBQWEsRUFFckIsRUFBTSxHQUFPLFlBQVksRUFBVyxFQUFVLEVBQVcsQ0FBTyxFQUVwRSxJQUFLLEVBQVMsRUFBRyxFQUFTLElBQVksRUFDckMsRUFBSSxHQUFVLEVBRWYsRUFBVSxLQUFLLEVBQUssRUFBUSxFQUFVLEtBQUssS0FBSyxFQUFVLENBQUMsRUFBRyxFQUFVLENBQU8sRUFFL0UsRUFBUyxFQUVULFFBQVMsRUFBSSxFQUFRLEVBQVMsRUFBSSxJQUFZLEVBQzdDLEVBQUksR0FBVSxFQU9mLE9BTEEsRUFBVSxLQUFLLEVBQUssRUFBUSxFQUFVLEtBQUssS0FBSyxFQUFVLENBQUMsRUFBRyxFQUFVLENBQU8sRUFFL0UsRUFBTSxFQUFJLFNBQVMsUUFBUSxFQUMzQixFQUFNLElBQVUsQ0FBRyxFQUVaLEVBR1IsU0FBUyxHQUFZLENBQUMsRUFBSyxFQUFPLEVBQU0sQ0FDdkMsSUFBSSxFQUFVLEVBQ2QsTUFBTyxFQUFRLEVBQVUsR0FBUSxFQUFJLEVBQVEsS0FBYSxJQUN2RCxFQUdILElBQUksRUFBWSxFQUFJLEVBQVEsSUFBWSxHQUN4QyxHQUFJLElBQ0QsRUFHSCxPQUFPLEVBR1IsU0FBUyxHQUFTLENBQUMsRUFBVyxFQUFLLENBQ2xDLEVBQVksSUFBa0IsQ0FBUyxFQUN2QyxJQUFJLEVBQWEsSUFBb0IsQ0FBRyxFQUVwQyxFQUFpQixFQUFVLE9BQy9CLEdBQUksSUFBbUIsRUFBYSxFQUNuQyxNQUFNLElBQUksVUFBVSxJQUFNLEVBQU0seUJBQTJCLEVBQWEsRUFBSSxpQkFBbUIsRUFBaUIsR0FBRyxFQUdwSCxJQUFJLEVBQVcsSUFBYSxFQUFXLEVBQUcsQ0FBVSxFQUNoRCxFQUFXLElBQWEsRUFBVyxFQUFZLEVBQVUsTUFBTSxFQUMvRCxFQUFVLEVBQWEsRUFDdkIsRUFBVSxFQUFhLEVBRXZCLEVBQVUsRUFBUSxFQUFVLEVBQUksRUFBSSxFQUVwQyxFQUFjLEVBQVUsR0FFeEIsRUFBTSxHQUFPLGFBQWEsRUFBYyxFQUFJLEdBQUssQ0FBTyxFQUV4RCxFQUFTLEVBRWIsR0FEQSxFQUFJLEtBQVksSUFDWixFQUdILEVBQUksS0FBWSxFQUloQixPQUFJLEtBQVksR0FBWSxFQUU1QixFQUFJLEtBQVksRUFBVSxJQUkzQixHQUZBLEVBQUksS0FBWSxHQUNoQixFQUFJLEtBQVksRUFDWixFQUFXLEVBQ2QsRUFBSSxLQUFZLEVBQ2hCLEdBQVUsRUFBVSxLQUFLLEVBQUssRUFBUSxFQUFHLENBQVUsRUFFbkQsUUFBVSxFQUFVLEtBQUssRUFBSyxFQUFRLEVBQVUsQ0FBVSxFQUkzRCxHQUZBLEVBQUksS0FBWSxHQUNoQixFQUFJLEtBQVksRUFDWixFQUFXLEVBQ2QsRUFBSSxLQUFZLEVBQ2hCLEVBQVUsS0FBSyxFQUFLLEVBQVEsQ0FBVSxFQUV0QyxPQUFVLEtBQUssRUFBSyxFQUFRLEVBQWEsQ0FBUSxFQUdsRCxPQUFPLEVBR1IsSUFBTyxRQUFVLENBQ2hCLFVBQVcsSUFDWCxVQUFXLEdBQ1osb0JDNUtBLElBQUksR0FBMEIsSUFBUSxHQUFLLHdCQUEyQixRQUFTLENBQUMsRUFBVSxFQUFPLEVBQU0sRUFBRyxDQUN0RyxHQUFJLElBQVMsTUFBUSxFQUFHLE1BQU0sSUFBSSxVQUFVLCtDQUErQyxFQUMzRixHQUFJLE9BQU8sSUFBVSxXQUFhLElBQWEsSUFBVSxHQUFLLEVBQU0sSUFBSSxDQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsMEVBQTBFLEVBQ2pMLE9BQU8sSUFBUyxJQUFNLEVBQUksSUFBUyxJQUFNLEVBQUUsS0FBSyxDQUFRLEVBQUksRUFBSSxFQUFFLE1BQVEsRUFBTSxJQUFJLENBQVEsR0FFNUYsR0FBcUIsR0FBaUIsSUFBcUIsSUFDL0QsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsU0FBZ0IsT0FDeEIsR0FBUSxhQUFlLElBQ3ZCLEdBQVEsdUJBQXlCLElBY2pDLFNBQVMsR0FBWSxDQUFDLEVBQUssQ0FDdkIsT0FBTyxFQUFJLFFBQVEsYUFBYyxLQUFTLEVBQU0sTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBUzFFLFNBQVMsR0FBc0IsQ0FBQyxFQUFLLENBTWpDLFNBQVMsQ0FBRyxDQUFDLEVBQUssQ0FDZCxJQUFJLEVBQ0osSUFBTSxFQUFLLEdBQU8sQ0FBQyxFQUNuQixPQUFRLEVBQUssRUFBRSxNQUFVLE1BQVEsSUFBWSxPQUFJLEVBQUssRUFBRSxJQUFhLENBQUcsR0FFNUUsTUFBTyxDQUFFLEtBQUksRUFTakIsTUFBTSxHQUFTLENBQ1gsV0FBVyxDQUFDLEVBQVMsQ0FDakIsR0FBb0IsSUFBSSxJQUFJLEVBTTVCLEdBQWdCLElBQUksS0FBTSxJQUFJLEdBQUssRUFDbkMsS0FBSyxTQUFXLEVBQVEsU0FDeEIsS0FBSyxPQUFTLEVBQVEsT0FRMUIsR0FBRyxDQUFDLEVBQUssRUFBTyxDQUNaLEdBQXVCLEtBQU0sR0FBcUIsSUFBSyxHQUFtQixFQUFFLEtBQUssS0FBTSxFQUFLLENBQUssRUFDakcsR0FBdUIsS0FBTSxHQUFxQixJQUFLLEdBQWUsRUFBRSxLQUFLLElBQUksRUFPckYsR0FBRyxDQUFDLEVBQUssQ0FDTCxJQUFNLEVBQU8sR0FBdUIsS0FBTSxHQUFpQixHQUFHLEVBQUUsSUFBSSxDQUFHLEVBQ3ZFLElBQUssRUFDRCxPQUdKLE9BRkEsR0FBdUIsS0FBTSxHQUFxQixJQUFLLEdBQW1CLEVBQUUsS0FBSyxLQUFNLEVBQUssRUFBSyxLQUFLLEVBQ3RHLEdBQXVCLEtBQU0sR0FBcUIsSUFBSyxHQUFlLEVBQUUsS0FBSyxJQUFJLEVBQzFFLEVBQUssTUFFcEIsQ0FDQSxHQUFRLFNBQVcsSUFDbkIsR0FBa0IsSUFBSSxRQUFXLEdBQXNCLElBQUksUUFBVyxJQUFzQixTQUFTLENBQW1CLENBQUMsRUFBSyxFQUFPLENBQ2pJLEdBQXVCLEtBQU0sR0FBaUIsR0FBRyxFQUFFLE9BQU8sQ0FBRyxFQUM3RCxHQUF1QixLQUFNLEdBQWlCLEdBQUcsRUFBRSxJQUFJLEVBQUssQ0FDeEQsUUFDQSxhQUFjLEtBQUssSUFBSSxDQUMzQixDQUFDLEdBQ0YsSUFBa0IsU0FBUyxDQUFlLEVBQUcsQ0FDNUMsSUFBTSxFQUFhLEtBQUssT0FBUyxLQUFLLElBQUksRUFBSSxLQUFLLE9BQVMsRUFLeEQsRUFBYSxHQUF1QixLQUFNLEdBQWlCLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUNuRixPQUFRLEVBQVcsT0FDZCxHQUF1QixLQUFNLEdBQWlCLEdBQUcsRUFBRSxLQUFPLEtBQUssVUFDNUQsRUFBVyxNQUFNLEdBQUcsYUFBZSxHQUV2QyxHQUF1QixLQUFNLEdBQWlCLEdBQUcsRUFBRSxPQUFPLEVBQVcsTUFBTSxFQUFFLEVBQzdFLEVBQWEsR0FBdUIsS0FBTSxHQUFpQixHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssc0JDNUd2RixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsZUFBcUIsMkNBQWlELHFCQUF3QixPQUN0RyxJQUFNLGlCQUNBLFNBQ0EsU0FDQSxTQU1FLHFCQUFtQixpQkFJbkIsMkNBQXlDLE9BQ2pELE1BQU0sWUFBbUIsSUFBUyxZQUFhLENBQzNDLFdBQVcsQ0FBQyxFQUFPLENBQUMsRUFBRyxDQUNuQixJQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFDcEIsTUFBTSxFQUNOLEtBQUssWUFBYyxDQUFDLEVBQ3BCLEtBQUssNEJBQXNDLDJDQUMzQyxLQUFLLHNCQUF3QixHQUM3QixLQUFLLGVBQXlCLHFCQUM5QixJQUFNLEVBQWMsSUFBTyx1QkFBd0IsQ0FBSSxFQVN2RCxHQVBBLEtBQUssT0FBUyxFQUFLLE9BQ25CLEtBQUssV0FBYSxFQUFLLEVBQVEsSUFBSSxZQUFZLEtBQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxLQUNuRixLQUFLLGVBQWlCLEVBQVEsSUFBSSxrQkFBa0IsRUFDcEQsS0FBSyxhQUFlLEVBQUssRUFBUSxJQUFJLGFBQWEsS0FBTyxNQUFRLElBQVksT0FBSSxFQUFLLENBQUMsRUFDdkYsS0FBSyxnQkFBa0IsRUFBSyxFQUFRLElBQUksaUJBQWlCLEtBQU8sTUFBUSxJQUFZLE9BQUksRUFBYSxxQkFFckcsS0FBSyxhQUFlLEVBQUssRUFBSyxlQUFpQixNQUFRLElBQVksT0FBSSxFQUFLLElBQUksSUFBZSxtQkFDM0YsRUFBSyxtQkFDTCxLQUFLLFlBQVksU0FBVyxFQUFLLG1CQUVyQyxHQUFJLEVBQUssNEJBQ0wsS0FBSyw0QkFBOEIsRUFBSyw0QkFFNUMsS0FBSyx1QkFBeUIsRUFBSyxFQUFLLHlCQUEyQixNQUFRLElBQVksT0FBSSxFQUFLLE1BT2hHLE9BQU0sRUFBRyxDQUNULEdBQUksS0FBSyx1QkFBdUIsSUFBUyxPQUNyQyxPQUFPLEtBQUssWUFFWCxRQUFJLEtBQUssdUJBQXVCLElBQWUsbUJBQ2hELE9BQU8sS0FBSyxZQUFZLFNBRXZCLFFBQUksYUFBYyxLQUFLLGFBQ3hCLEtBQUssWUFBWSxvQkFBb0IsSUFBUyxPQUM5QyxPQUFPLEtBQUssWUFBWSxTQUU1QixPQUFPLEtBS1gsY0FBYyxDQUFDLEVBQWEsQ0FDeEIsS0FBSyxZQUFjLEVBVXZCLHdCQUF3QixDQUFDLEVBQVMsQ0FJOUIsSUFBSyxFQUFRLHdCQUNULEtBQUssZUFDTCxFQUFRLHVCQUF5QixLQUFLLGVBRTFDLE9BQU8sWUFXQSxhQUFZLEVBQUcsQ0FDdEIsTUFBTyxDQUNILE1BQU8sR0FDUCxZQUFhLENBQ1QsbUJBQW9CLENBQUMsTUFBTyxNQUFPLE9BQVEsT0FBUSxVQUFXLFFBQVEsQ0FDMUUsQ0FDSixFQUVSLENBQ1EsZUFBYSx3QkNyR3JCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxnQkFBbUIsT0FDM0IsTUFBTSxHQUFZLENBUWQsV0FBVyxDQUFDLEVBQUssRUFBSyxDQUNsQixLQUFLLFNBQVcsRUFDaEIsS0FBSyxRQUFVLEVBRW5CLFdBQVcsRUFBRyxDQUNWLE9BQU8sS0FBSyxTQUVoQixVQUFVLEVBQUcsQ0FDVCxPQUFPLEtBQUssUUFPaEIsU0FBUyxFQUFHLENBQ1IsSUFBTSxFQUFVLEtBQUssV0FBVyxFQUNoQyxHQUFJLEdBQVcsRUFBUSxJQUNuQixPQUFPLEVBQVEsSUFFbkIsT0FBTyxLQVFYLGFBQWEsRUFBRyxDQUNaLE1BQU8sQ0FBRSxTQUFVLEtBQUssWUFBWSxFQUFHLFFBQVMsS0FBSyxXQUFXLENBQUUsRUFFMUUsQ0FDUSxnQkFBYyx1QkMxQ3RCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxpQkFBdUIseUJBQStCLHNCQUE0Qix3QkFBMkIsT0FDckgsSUFBTSxTQUNBLHNCQUNBLGlCQUNBLFVBQ0EsU0FDQSxTQUNBLFVBQ0YsS0FDSCxRQUFTLENBQUMsRUFBcUIsQ0FDNUIsRUFBb0IsTUFBVyxRQUMvQixFQUFvQixLQUFVLFNBQy9CLE1BQWdDLHdCQUFzQixJQUFzQixDQUFDLEVBQUUsRUFDbEYsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFtQixDQUMxQixFQUFrQixJQUFTLE1BQzNCLEVBQWtCLElBQVMsUUFDNUIsS0FBOEIsc0JBQW9CLEdBQW9CLENBQUMsRUFBRSxFQUs1RSxJQUFJLElBQ0gsUUFBUyxDQUFDLEVBQXNCLENBQzdCLEVBQXFCLGlCQUFzQixtQkFDM0MsRUFBcUIsa0JBQXVCLG9CQUM1QyxFQUFxQixLQUFVLFNBQ2hDLEtBQWlDLHlCQUF1QixHQUF1QixDQUFDLEVBQUUsRUFDckYsTUFBTSxXQUFxQixJQUFhLFVBQVcsQ0FDL0MsV0FBVyxDQUFDLEVBQW1CLEVBQWMsRUFBYSxDQUN0RCxJQUFNLEVBQU8sR0FBcUIsT0FBTyxJQUFzQixTQUN6RCxFQUNBLENBQUUsU0FBVSxFQUFtQixlQUFjLGFBQVksRUFDL0QsTUFBTSxDQUFJLEVBQ1YsS0FBSyxpQkFBbUIsQ0FBQyxFQUN6QixLQUFLLGtCQUFvQixLQUN6QixLQUFLLHVCQUF5QixHQUFrQixJQUNoRCxLQUFLLHFCQUF1QixJQUFJLElBQ2hDLEtBQUssVUFBWSxFQUFLLFNBQ3RCLEtBQUssY0FBZ0IsRUFBSyxhQUMxQixLQUFLLFlBQWMsRUFBSyxZQUN4QixLQUFLLFVBQVksQ0FDYixhQUFjLDBDQUNkLGtCQUFtQiwrQ0FDbkIsZUFBZ0Isc0NBQ2hCLGdCQUFpQix1Q0FDakIsaUNBQWtDLDZDQUNsQyxpQ0FBa0MsNkNBQ2xDLHNCQUF1QixtREFDcEIsRUFBSyxTQUNaLEVBQ0EsS0FBSyxxQkFDRCxFQUFLLHNCQUF3QixHQUFxQixpQkFDdEQsS0FBSyxRQUFVLEVBQUssU0FBVyxDQUMzQixzQkFDQSw4QkFDQSxLQUFLLGNBQ1QsRUFPSixlQUFlLENBQUMsRUFBTyxDQUFDLEVBQUcsQ0FDdkIsR0FBSSxFQUFLLHdCQUEwQixFQUFLLGVBQ3BDLE1BQU0sSUFBSSxNQUFNLDBFQUEwRSxFQU05RixHQUpBLEVBQUssY0FBZ0IsRUFBSyxlQUFpQixPQUMzQyxFQUFLLFVBQVksRUFBSyxXQUFhLEtBQUssVUFDeEMsRUFBSyxhQUFlLEVBQUssY0FBZ0IsS0FBSyxZQUUxQyxNQUFNLFFBQVEsRUFBSyxLQUFLLEVBQ3hCLEVBQUssTUFBUSxFQUFLLE1BQU0sS0FBSyxHQUFHLEVBR3BDLE9BRGdCLEtBQUssVUFBVSxrQkFBa0IsU0FBUyxFQUV0RCxJQUNBLElBQVksVUFBVSxDQUFJLEVBRWxDLG9CQUFvQixFQUFHLENBR25CLE1BQU0sSUFBSSxNQUFNLGdGQUFnRixPQVU5RiwwQkFBeUIsRUFBRyxDQUc5QixJQUFNLEVBQWEsSUFBUyxhQUFjLEVBS3BDLEVBSmUsRUFBTyxrQkFBa0IsRUFBRSxFQUszQyxRQUFRLE1BQU8sR0FBRyxFQUNsQixRQUFRLEtBQU0sR0FBRyxFQUNqQixRQUFRLE1BQU8sR0FBRyxFQUlqQixHQUZ5QixNQUFNLEVBQU8sbUJBQW1CLENBQVksR0FHdEUsTUFBTSxHQUFHLEVBQUUsR0FDWCxRQUFRLE1BQU8sR0FBRyxFQUNsQixRQUFRLE1BQU8sR0FBRyxFQUN2QixNQUFPLENBQUUsZUFBYyxlQUFjLEVBRXpDLFFBQVEsQ0FBQyxFQUFlLEVBQVUsQ0FDOUIsSUFBTSxFQUFVLE9BQU8sSUFBa0IsU0FBVyxDQUFFLEtBQU0sQ0FBYyxFQUFJLEVBQzlFLEdBQUksRUFDQSxLQUFLLGNBQWMsQ0FBTyxFQUFFLEtBQUssS0FBSyxFQUFTLEtBQU0sRUFBRSxPQUFRLEVBQUUsR0FBRyxFQUFHLEtBQUssRUFBUyxFQUFHLEtBQU0sRUFBRSxRQUFRLENBQUMsRUFHekcsWUFBTyxLQUFLLGNBQWMsQ0FBTyxPQUduQyxjQUFhLENBQUMsRUFBUyxDQUN6QixJQUFNLEVBQU0sS0FBSyxVQUFVLGVBQWUsU0FBUyxFQUM3QyxFQUFVLENBQ1osZUFBZ0IsbUNBQ3BCLEVBQ00sRUFBUyxDQUNYLFVBQVcsRUFBUSxXQUFhLEtBQUssVUFDckMsY0FBZSxFQUFRLGFBQ3ZCLEtBQU0sRUFBUSxLQUNkLFdBQVkscUJBQ1osYUFBYyxFQUFRLGNBQWdCLEtBQUssV0FDL0MsRUFDQSxHQUFJLEtBQUssdUJBQXlCLEdBQXFCLGtCQUFtQixDQUN0RSxJQUFNLEVBQVEsT0FBTyxLQUFLLEdBQUcsS0FBSyxhQUFhLEtBQUssZUFBZSxFQUNuRSxFQUFRLGNBQW1CLFNBQVMsRUFBTSxTQUFTLFFBQVEsSUFFL0QsR0FBSSxLQUFLLHVCQUF5QixHQUFxQixpQkFDbkQsRUFBTyxjQUFnQixLQUFLLGNBRWhDLElBQU0sRUFBTSxNQUFNLEtBQUssWUFBWSxRQUFRLElBQ3BDLEdBQWEsYUFDaEIsT0FBUSxPQUNSLE1BQ0EsS0FBTSxJQUFZLFVBQVUsQ0FBTSxFQUNsQyxTQUNKLENBQUMsRUFDSyxFQUFTLEVBQUksS0FDbkIsR0FBSSxFQUFJLE1BQVEsRUFBSSxLQUFLLFdBQ3JCLEVBQU8sWUFBYyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUksRUFBSSxLQUFLLFdBQWEsS0FDbEUsT0FBTyxFQUFPLFdBR2xCLE9BREEsS0FBSyxLQUFLLFNBQVUsQ0FBTSxFQUNuQixDQUFFLFNBQVEsS0FBSSxPQU9uQixhQUFZLENBQUMsRUFBYyxDQUM3QixJQUFLLEVBQ0QsT0FBTyxLQUFLLG9CQUFvQixDQUFZLEVBSWhELEdBQUksS0FBSyxxQkFBcUIsSUFBSSxDQUFZLEVBQzFDLE9BQU8sS0FBSyxxQkFBcUIsSUFBSSxDQUFZLEVBRXJELElBQU0sRUFBSSxLQUFLLG9CQUFvQixDQUFZLEVBQUUsS0FBSyxLQUFLLENBRXZELE9BREEsS0FBSyxxQkFBcUIsT0FBTyxDQUFZLEVBQ3RDLEdBQ1IsS0FBSyxDQUVKLE1BREEsS0FBSyxxQkFBcUIsT0FBTyxDQUFZLEVBQ3ZDLEVBQ1QsRUFFRCxPQURBLEtBQUsscUJBQXFCLElBQUksRUFBYyxDQUFDLEVBQ3RDLE9BRUwsb0JBQW1CLENBQUMsRUFBYyxDQUNwQyxJQUFJLEVBQ0osSUFBSyxFQUNELE1BQU0sSUFBSSxNQUFNLDBCQUEwQixFQUU5QyxJQUFNLEVBQU0sS0FBSyxVQUFVLGVBQWUsU0FBUyxFQUM3QyxFQUFPLENBQ1QsY0FBZSxFQUNmLFVBQVcsS0FBSyxVQUNoQixjQUFlLEtBQUssY0FDcEIsV0FBWSxlQUNoQixFQUNJLEVBQ0osR0FBSSxDQUVBLEVBQU0sTUFBTSxLQUFLLFlBQVksUUFBUSxJQUM5QixHQUFhLGFBQ2hCLE9BQVEsT0FDUixNQUNBLEtBQU0sSUFBWSxVQUFVLENBQUksRUFDaEMsUUFBUyxDQUFFLGVBQWdCLG1DQUFvQyxDQUNuRSxDQUFDLEVBRUwsTUFBTyxFQUFHLENBQ04sR0FBSSxhQUFhLElBQVMsYUFDdEIsRUFBRSxVQUFZLG1CQUNaLEVBQUssRUFBRSxZQUFjLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxPQUMzRCxVQUFVLEtBQUssRUFBRSxTQUFTLEtBQUssaUJBQWlCLEVBQ2hELEVBQUUsUUFBVSxLQUFLLFVBQVUsRUFBRSxTQUFTLElBQUksRUFFOUMsTUFBTSxFQUVWLElBQU0sRUFBUyxFQUFJLEtBRW5CLEdBQUksRUFBSSxNQUFRLEVBQUksS0FBSyxXQUNyQixFQUFPLFlBQWMsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFJLEVBQUksS0FBSyxXQUFhLEtBQ2xFLE9BQU8sRUFBTyxXQUdsQixPQURBLEtBQUssS0FBSyxTQUFVLENBQU0sRUFDbkIsQ0FBRSxTQUFRLEtBQUksRUFFekIsa0JBQWtCLENBQUMsRUFBVSxDQUN6QixHQUFJLEVBQ0EsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLEVBQUUsWUFBYSxFQUFFLEdBQUcsRUFBRyxDQUFRLEVBR3ZGLFlBQU8sS0FBSyx3QkFBd0IsT0FHdEMsd0JBQXVCLEVBQUcsQ0FDNUIsSUFBTSxFQUFJLE1BQU0sS0FBSyxhQUFhLEtBQUssWUFBWSxhQUFhLEVBQzFELEVBQVMsRUFBRSxPQUdqQixPQUZBLEVBQU8sY0FBZ0IsS0FBSyxZQUFZLGNBQ3hDLEtBQUssWUFBYyxFQUNaLENBQUUsWUFBYSxLQUFLLFlBQWEsSUFBSyxFQUFFLEdBQUksRUFFdkQsY0FBYyxDQUFDLEVBQVUsQ0FDckIsR0FBSSxFQUNBLEtBQUssb0JBQW9CLEVBQUUsS0FBSyxLQUFLLEVBQVMsS0FBTSxFQUFFLE1BQU8sRUFBRSxHQUFHLEVBQUcsQ0FBUSxFQUc3RSxZQUFPLEtBQUssb0JBQW9CLE9BR2xDLG9CQUFtQixFQUFHLENBRXhCLElBRHVCLEtBQUssWUFBWSxjQUFnQixLQUFLLGdCQUFnQixFQUMxRCxDQUNmLElBQUssS0FBSyxZQUFZLGNBQ2xCLEdBQUksS0FBSyxlQUFnQixDQUNyQixJQUFNLEVBQXVCLE1BQU0sS0FBSyxpQ0FBaUMsRUFDekUsR0FBSSxJQUF5QixNQUFRLElBQThCLE9BQVMsT0FBSSxFQUFxQixhQUVqRyxPQURBLEtBQUssZUFBZSxDQUFvQixFQUNqQyxDQUFFLE1BQU8sS0FBSyxZQUFZLFlBQWEsRUFJbEQsV0FBTSxJQUFJLE1BQU0sc0RBQXNELEVBRzlFLElBQU0sRUFBSSxNQUFNLEtBQUssd0JBQXdCLEVBQzdDLElBQUssRUFBRSxhQUFnQixFQUFFLGNBQWdCLEVBQUUsWUFBWSxhQUNuRCxNQUFNLElBQUksTUFBTSxpQ0FBaUMsRUFFckQsTUFBTyxDQUFFLE1BQU8sRUFBRSxZQUFZLGFBQWMsSUFBSyxFQUFFLEdBQUksRUFHdkQsV0FBTyxDQUFFLE1BQU8sS0FBSyxZQUFZLFlBQWEsT0FZaEQsa0JBQWlCLENBQUMsRUFBSyxDQUV6QixPQURpQixNQUFNLEtBQUssd0JBQXdCLENBQUcsR0FBRyxhQUd4RCx3QkFBdUIsQ0FFN0IsRUFBSyxDQUNELElBQU0sRUFBWSxLQUFLLFlBQ3ZCLElBQUssRUFBVSxlQUNWLEVBQVUsZ0JBQ1YsS0FBSyxTQUNMLEtBQUssZUFDTixNQUFNLElBQUksTUFBTSx1RUFBdUUsRUFFM0YsR0FBSSxFQUFVLGVBQWlCLEtBQUssZ0JBQWdCLEVBQUcsQ0FDbkQsRUFBVSxXQUFhLEVBQVUsWUFBYyxTQUMvQyxJQUFNLEVBQVUsQ0FDWixjQUFlLEVBQVUsV0FBYSxJQUFNLEVBQVUsWUFDMUQsRUFDQSxNQUFPLENBQUUsUUFBUyxLQUFLLHlCQUF5QixDQUFPLENBQUUsRUFHN0QsR0FBSSxLQUFLLGVBQWdCLENBQ3JCLElBQU0sRUFBdUIsTUFBTSxLQUFLLGlDQUFpQyxFQUN6RSxHQUFJLElBQXlCLE1BQVEsSUFBOEIsT0FBUyxPQUFJLEVBQXFCLGFBQWMsQ0FDL0csS0FBSyxlQUFlLENBQW9CLEVBQ3hDLElBQU0sRUFBVSxDQUNaLGNBQWUsVUFBWSxLQUFLLFlBQVksWUFDaEQsRUFDQSxNQUFPLENBQUUsUUFBUyxLQUFLLHlCQUF5QixDQUFPLENBQUUsR0FHakUsR0FBSSxLQUFLLE9BQ0wsTUFBTyxDQUFFLFFBQVMsQ0FBRSxpQkFBa0IsS0FBSyxNQUFPLENBQUUsRUFFeEQsSUFBSSxFQUFJLEtBQ0osRUFBUyxLQUNiLEdBQUksQ0FDQSxFQUFJLE1BQU0sS0FBSyxhQUFhLEVBQVUsYUFBYSxFQUNuRCxFQUFTLEVBQUUsT0FFZixNQUFPLEVBQUssQ0FDUixJQUFNLEVBQUksRUFDVixHQUFJLEVBQUUsV0FDRCxFQUFFLFNBQVMsU0FBVyxLQUFPLEVBQUUsU0FBUyxTQUFXLEtBQ3BELEVBQUUsUUFBVSxtQ0FBbUMsRUFBRSxVQUVyRCxNQUFNLEVBRVYsSUFBTSxFQUFjLEtBQUssWUFDekIsRUFBWSxXQUFhLEVBQVksWUFBYyxTQUNuRCxFQUFPLGNBQWdCLEVBQVksY0FDbkMsS0FBSyxZQUFjLEVBQ25CLElBQU0sRUFBVSxDQUNaLGNBQWUsRUFBWSxXQUFhLElBQU0sRUFBTyxZQUN6RCxFQUNBLE1BQU8sQ0FBRSxRQUFTLEtBQUsseUJBQXlCLENBQU8sRUFBRyxJQUFLLEVBQUUsR0FBSSxRQVFsRSxrQkFBaUIsQ0FBQyxFQUFPLENBQzVCLE9BQU8sSUFBSSxHQUFhLEVBQUUsa0JBQWtCLENBQUssRUFBRSxTQUFTLEVBT2hFLGlCQUFpQixDQUFDLEVBQU8sQ0FDckIsSUFBTSxFQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsZUFBZSxFQUVsRCxPQURBLEVBQUksYUFBYSxPQUFPLFFBQVMsQ0FBSyxFQUMvQixFQUVYLFdBQVcsQ0FBQyxFQUFPLEVBQVUsQ0FDekIsSUFBTSxFQUFPLElBQ04sR0FBYSxhQUNoQixJQUFLLEtBQUssa0JBQWtCLENBQUssRUFBRSxTQUFTLEVBQzVDLE9BQVEsTUFDWixFQUNBLEdBQUksRUFDQSxLQUFLLFlBQ0EsUUFBUSxDQUFJLEVBQ1osS0FBSyxLQUFLLEVBQVMsS0FBTSxDQUFDLEVBQUcsQ0FBUSxFQUcxQyxZQUFPLEtBQUssWUFBWSxRQUFRLENBQUksRUFHNUMsaUJBQWlCLENBQUMsRUFBVSxDQUN4QixHQUFJLEVBQ0EsS0FBSyx1QkFBdUIsRUFBRSxLQUFLLEtBQU8sRUFBUyxLQUFNLENBQUcsRUFBRyxDQUFRLEVBR3ZFLFlBQU8sS0FBSyx1QkFBdUIsT0FHckMsdUJBQXNCLEVBQUcsQ0FDM0IsSUFBTSxFQUFRLEtBQUssWUFBWSxhQUUvQixHQURBLEtBQUssWUFBYyxDQUFDLEVBQ2hCLEVBQ0EsT0FBTyxLQUFLLFlBQVksQ0FBSyxFQUc3QixXQUFNLElBQUksTUFBTSw0QkFBNEIsRUFHcEQsT0FBTyxDQUFDLEVBQU0sRUFBVSxDQUNwQixHQUFJLEVBQ0EsS0FBSyxhQUFhLENBQUksRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLENBQUMsRUFBRyxLQUFLLENBQ3RELE9BQU8sRUFBUyxFQUFHLEVBQUUsUUFBUSxFQUNoQyxFQUdELFlBQU8sS0FBSyxhQUFhLENBQUksT0FHL0IsYUFBWSxDQUFDLEVBQU0sRUFBZ0IsR0FBTyxDQUM1QyxJQUFJLEVBQ0osR0FBSSxDQUNBLElBQU0sRUFBSSxNQUFNLEtBQUssd0JBQXdCLEVBQUssR0FBRyxFQUVyRCxHQURBLEVBQUssUUFBVSxFQUFLLFNBQVcsQ0FBQyxFQUM1QixFQUFFLFNBQVcsRUFBRSxRQUFRLHVCQUN2QixFQUFLLFFBQVEsdUJBQXlCLEVBQUUsUUFBUSx1QkFFcEQsR0FBSSxFQUFFLFNBQVcsRUFBRSxRQUFRLGNBQ3ZCLEVBQUssUUFBUSxjQUFnQixFQUFFLFFBQVEsY0FFM0MsR0FBSSxLQUFLLE9BQ0wsRUFBSyxRQUFRLGtCQUFvQixLQUFLLE9BRTFDLEVBQUssTUFBTSxLQUFLLFlBQVksUUFBUSxDQUFJLEVBRTVDLE1BQU8sRUFBRyxDQUNOLElBQU0sRUFBTSxFQUFFLFNBQ2QsR0FBSSxFQUFLLENBQ0wsSUFBTSxFQUFhLEVBQUksT0FzQmpCLEVBQW9CLEtBQUssYUFDM0IsS0FBSyxZQUFZLGNBQ2pCLEtBQUssWUFBWSxpQkFDZixLQUFLLFlBQVksYUFBZSxLQUFLLHVCQUNyQyxFQUFzQyxLQUFLLGFBQzdDLEtBQUssWUFBWSxlQUNoQixLQUFLLFlBQVksaUJBQ2hCLEtBQUssWUFBWSxhQUFlLEtBQUssd0JBQ3ZDLEtBQUssZUFDSCxFQUFtQixFQUFJLE9BQU8sZ0JBQWdCLElBQU8sU0FDckQsRUFBWSxJQUFlLEtBQU8sSUFBZSxJQUN2RCxJQUFLLEdBQ0QsSUFDQyxHQUNELEVBRUEsT0FEQSxNQUFNLEtBQUssd0JBQXdCLEVBQzVCLEtBQUssYUFBYSxFQUFNLEVBQUksRUFFbEMsU0FBSyxHQUNOLElBQ0MsR0FDRCxFQUFxQyxDQUNyQyxJQUFNLEVBQXVCLE1BQU0sS0FBSyxpQ0FBaUMsRUFDekUsR0FBSSxJQUF5QixNQUFRLElBQThCLE9BQVMsT0FBSSxFQUFxQixhQUNqRyxLQUFLLGVBQWUsQ0FBb0IsRUFFNUMsT0FBTyxLQUFLLGFBQWEsRUFBTSxFQUFJLEdBRzNDLE1BQU0sRUFFVixPQUFPLEVBRVgsYUFBYSxDQUFDLEVBQVMsRUFBVSxDQUk3QixHQUFJLEdBQVksT0FBTyxJQUFhLFdBQ2hDLE1BQU0sSUFBSSxNQUFNLG9IQUFvSCxFQUV4SSxHQUFJLEVBQ0EsS0FBSyxtQkFBbUIsQ0FBTyxFQUFFLEtBQUssS0FBSyxFQUFTLEtBQU0sQ0FBQyxFQUFHLENBQVEsRUFHdEUsWUFBTyxLQUFLLG1CQUFtQixDQUFPLE9BR3hDLG1CQUFrQixDQUFDLEVBQVMsQ0FDOUIsSUFBSyxFQUFRLFFBQ1QsTUFBTSxJQUFJLE1BQU0sK0NBQStDLEVBRW5FLElBQU0sRUFBVyxNQUFNLEtBQUssNkJBQTZCLEVBRXpELE9BRGMsTUFBTSxLQUFLLDhCQUE4QixFQUFRLFFBQVMsRUFBUyxNQUFPLEVBQVEsU0FBVSxLQUFLLFFBQVMsRUFBUSxTQUFTLE9BVXZJLGFBQVksQ0FBQyxFQUFhLENBQzVCLElBQVEsUUFBUyxNQUFNLEtBQUssWUFBWSxRQUFRLElBQ3pDLEdBQWEsYUFDaEIsT0FBUSxPQUNSLFFBQVMsQ0FDTCxlQUFnQixvQ0FDaEIsY0FBZSxVQUFVLEdBQzdCLEVBQ0EsSUFBSyxLQUFLLFVBQVUsYUFBYSxTQUFTLENBQzlDLENBQUMsRUFDSyxFQUFPLE9BQU8sT0FBTyxDQUN2QixZQUFhLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBSSxFQUFLLFdBQWEsS0FDdEQsT0FBUSxFQUFLLE1BQU0sTUFBTSxHQUFHLENBQ2hDLEVBQUcsQ0FBSSxFQUdQLE9BRkEsT0FBTyxFQUFLLFdBQ1osT0FBTyxFQUFLLE1BQ0wsRUFFWCx1QkFBdUIsQ0FBQyxFQUFVLENBQzlCLEdBQUksRUFDQSxLQUFLLDZCQUE2QixFQUFFLEtBQUssS0FBSyxFQUFTLEtBQU0sRUFBRSxNQUFPLEVBQUUsR0FBRyxFQUFHLENBQVEsRUFHdEYsWUFBTyxLQUFLLDZCQUE2QixPQUczQyw2QkFBNEIsRUFBRyxDQUNqQyxJQUFNLEVBQVUsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUM3QixFQUFhLElBQVMsaUJBQWtCLEVBQ3hDLEdBQWtCLElBQ2xCLEdBQWtCLElBQ3hCLEdBQUksS0FBSyxtQkFDTCxFQUFVLEtBQUssa0JBQWtCLFFBQVEsR0FDekMsS0FBSyx5QkFBMkIsRUFDaEMsTUFBTyxDQUFFLE1BQU8sS0FBSyxpQkFBa0IsUUFBTyxFQUVsRCxJQUFJLEVBQ0EsRUFDSixPQUFRLFFBQ0MsR0FBa0IsSUFDbkIsRUFBTSxLQUFLLFVBQVUsaUNBQWlDLFNBQVMsRUFDL0QsV0FDQyxHQUFrQixJQUNuQixFQUFNLEtBQUssVUFBVSxpQ0FBaUMsU0FBUyxFQUMvRCxjQUVBLE1BQU0sSUFBSSxNQUFNLGtDQUFrQyxHQUFRLEVBRWxFLEdBQUksQ0FDQSxFQUFNLE1BQU0sS0FBSyxZQUFZLFFBQVEsSUFDOUIsR0FBYSxhQUNoQixLQUNKLENBQUMsRUFFTCxNQUFPLEVBQUcsQ0FDTixHQUFJLGFBQWEsTUFDYixFQUFFLFFBQVUsaURBQWlELEVBQUUsVUFFbkUsTUFBTSxFQUVWLElBQU0sRUFBZSxFQUFNLEVBQUksUUFBUSxpQkFBbUIsT0FDdEQsRUFBVyxHQUNmLEdBQUksRUFBYyxDQUVkLElBQU0sRUFEVSxJQUFJLE9BQU8sa0JBQWtCLEVBQ2pCLEtBQUssQ0FBWSxFQUM3QyxHQUFJLEdBQWUsRUFBWSxTQUFXLEVBRXRDLEVBQVcsT0FBTyxFQUFZLEVBQUUsRUFBSSxLQUc1QyxJQUFJLEVBQWUsQ0FBQyxFQUNwQixPQUFRLFFBQ0MsR0FBa0IsSUFDbkIsRUFBZSxFQUFJLEtBQ25CLFdBQ0MsR0FBa0IsSUFDbkIsUUFBVyxLQUFPLEVBQUksS0FBSyxLQUN2QixFQUFhLEVBQUksS0FBTyxFQUU1QixjQUVBLE1BQU0sSUFBSSxNQUFNLGtDQUFrQyxHQUFRLEVBRWxFLElBQU0sRUFBTSxJQUFJLEtBS2hCLE9BSkEsS0FBSyxrQkFDRCxJQUFhLEdBQUssS0FBTyxJQUFJLEtBQUssRUFBSSxRQUFRLEVBQUksQ0FBUSxFQUM5RCxLQUFLLGlCQUFtQixFQUN4QixLQUFLLHVCQUF5QixFQUN2QixDQUFFLE1BQU8sRUFBYyxTQUFRLEtBQUksRUFFOUMsZ0JBQWdCLENBQUMsRUFBVSxDQUN2QixHQUFJLEVBQ0EsS0FBSyxzQkFBc0IsRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLEVBQUUsUUFBUyxFQUFFLEdBQUcsRUFBRyxDQUFRLEVBR2pGLFlBQU8sS0FBSyxzQkFBc0IsT0FHcEMsc0JBQXFCLEVBQUcsQ0FDMUIsSUFBSSxFQUNFLEVBQU0sS0FBSyxVQUFVLHNCQUFzQixTQUFTLEVBQzFELEdBQUksQ0FDQSxFQUFNLE1BQU0sS0FBSyxZQUFZLFFBQVEsSUFDOUIsR0FBYSxhQUNoQixLQUNKLENBQUMsRUFFTCxNQUFPLEVBQUcsQ0FDTixHQUFJLGFBQWEsTUFDYixFQUFFLFFBQVUsaURBQWlELEVBQUUsVUFFbkUsTUFBTSxFQUVWLE1BQU8sQ0FBRSxRQUFTLEVBQUksS0FBTSxLQUFJLEVBRXBDLHdCQUF3QixFQUFHLENBR3ZCLE1BQU0sSUFBSSxNQUFNLHdGQUF3RixPQVl0Ryw4QkFBNkIsQ0FBQyxFQUFLLEVBQU8sRUFBa0IsRUFBUyxFQUFXLENBQ2xGLElBQU0sRUFBYSxJQUFTLGFBQWMsRUFDMUMsSUFBSyxFQUNELEVBQVksR0FBYSxpQ0FFN0IsSUFBTSxFQUFXLEVBQUksTUFBTSxHQUFHLEVBQzlCLEdBQUksRUFBUyxTQUFXLEVBQ3BCLE1BQU0sSUFBSSxNQUFNLHNDQUF3QyxDQUFHLEVBRS9ELElBQU0sRUFBUyxFQUFTLEdBQUssSUFBTSxFQUFTLEdBQ3hDLEVBQVksRUFBUyxHQUNyQixFQUNBLEVBQ0osR0FBSSxDQUNBLEVBQVcsS0FBSyxNQUFNLEVBQU8sdUJBQXVCLEVBQVMsRUFBRSxDQUFDLEVBRXBFLE1BQU8sRUFBSyxDQUNSLEdBQUksYUFBZSxNQUNmLEVBQUksUUFBVSwrQkFBK0IsRUFBUyxRQUFRLEVBQUksVUFFdEUsTUFBTSxFQUVWLElBQUssRUFDRCxNQUFNLElBQUksTUFBTSwrQkFBaUMsRUFBUyxFQUFFLEVBRWhFLEdBQUksQ0FDQSxFQUFVLEtBQUssTUFBTSxFQUFPLHVCQUF1QixFQUFTLEVBQUUsQ0FBQyxFQUVuRSxNQUFPLEVBQUssQ0FDUixHQUFJLGFBQWUsTUFDZixFQUFJLFFBQVUsOEJBQThCLEVBQVMsS0FFekQsTUFBTSxFQUVWLElBQUssRUFDRCxNQUFNLElBQUksTUFBTSw4QkFBZ0MsRUFBUyxFQUFFLEVBRS9ELElBQUssT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFPLEVBQVMsR0FBRyxFQUV6RCxNQUFNLElBQUksTUFBTSw4QkFBZ0MsS0FBSyxVQUFVLENBQVEsQ0FBQyxFQUU1RSxJQUFNLEVBQU8sRUFBTSxFQUFTLEtBQzVCLEdBQUksRUFBUyxNQUFRLFFBQ2pCLEVBQVksSUFBWSxVQUFVLEVBQVcsT0FBTyxFQUFFLFNBQVMsUUFBUSxFQUczRSxJQURpQixNQUFNLEVBQU8sT0FBTyxFQUFNLEVBQVEsQ0FBUyxFQUV4RCxNQUFNLElBQUksTUFBTSw0QkFBOEIsQ0FBRyxFQUVyRCxJQUFLLEVBQVEsSUFDVCxNQUFNLElBQUksTUFBTSwyQkFBNkIsS0FBSyxVQUFVLENBQU8sQ0FBQyxFQUV4RSxJQUFLLEVBQVEsSUFDVCxNQUFNLElBQUksTUFBTSxnQ0FBa0MsS0FBSyxVQUFVLENBQU8sQ0FBQyxFQUU3RSxJQUFNLEVBQU0sT0FBTyxFQUFRLEdBQUcsRUFDOUIsR0FBSSxNQUFNLENBQUcsRUFDVCxNQUFNLElBQUksTUFBTSxnQ0FBZ0MsRUFDcEQsSUFBTSxFQUFNLE9BQU8sRUFBUSxHQUFHLEVBQzlCLEdBQUksTUFBTSxDQUFHLEVBQ1QsTUFBTSxJQUFJLE1BQU0sZ0NBQWdDLEVBQ3BELElBQU0sRUFBTSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUksS0FDbkMsR0FBSSxHQUFPLEVBQU0sRUFDYixNQUFNLElBQUksTUFBTSxzQ0FBd0MsS0FBSyxVQUFVLENBQU8sQ0FBQyxFQUVuRixJQUFNLEVBQVcsRUFBTSxHQUFhLGlCQUM5QixFQUFTLEVBQU0sR0FBYSxpQkFDbEMsR0FBSSxFQUFNLEVBQ04sTUFBTSxJQUFJLE1BQU0seUJBQ1osRUFDQSxNQUNBLEVBQ0EsS0FDQSxLQUFLLFVBQVUsQ0FBTyxDQUFDLEVBRS9CLEdBQUksRUFBTSxFQUNOLE1BQU0sSUFBSSxNQUFNLHdCQUNaLEVBQ0EsTUFDQSxFQUNBLEtBQ0EsS0FBSyxVQUFVLENBQU8sQ0FBQyxFQUUvQixHQUFJLEdBQVcsRUFBUSxRQUFRLEVBQVEsR0FBRyxFQUFJLEVBQzFDLE1BQU0sSUFBSSxNQUFNLG9DQUNaLEVBQ0EsY0FDQSxFQUFRLEdBQUcsRUFHbkIsR0FBSSxPQUFPLElBQXFCLGFBQWUsSUFBcUIsS0FBTSxDQUN0RSxJQUFNLEVBQU0sRUFBUSxJQUNoQixFQUFjLEdBR2xCLEdBQUksRUFBaUIsY0FBZ0IsTUFDakMsRUFBYyxFQUFpQixRQUFRLENBQUcsRUFBSSxHQUc5QyxPQUFjLElBQVEsRUFFMUIsSUFBSyxFQUNELE1BQU0sSUFBSSxNQUFNLHVEQUF1RCxFQUcvRSxPQUFPLElBQUksSUFBYyxZQUFZLEVBQVUsQ0FBTyxPQU9wRCxpQ0FBZ0MsRUFBRyxDQUNyQyxHQUFJLEtBQUssZUFBZ0IsQ0FDckIsSUFBTSxFQUFzQixNQUFNLEtBQUssZUFBZSxFQUN0RCxJQUFLLEVBQW9CLGFBQ3JCLE1BQU0sSUFBSSxNQUFNLDZEQUE2RCxFQUVqRixPQUFPLEVBRVgsT0FPSixlQUFlLEVBQUcsQ0FDZCxJQUFNLEVBQWEsS0FBSyxZQUFZLFlBQ3BDLE9BQU8sRUFDRCxHQUFjLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBSSxLQUFLLDRCQUMxQyxHQUVkLENBQ1EsaUJBQWUsR0FJdkIsR0FBYSxzQkFBd0IsMENBSXJDLEdBQWEsaUJBQW1CLElBSWhDLEdBQWEsaUNBQW1DLDBCQzN3QmhELE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxZQUFlLE9BQ3ZCLElBQU0sU0FDQSxTQUNBLFNBQ04sTUFBTSxZQUFnQixJQUFlLFlBQWEsQ0FPOUMsV0FBVyxDQUFDLEVBQVUsQ0FBQyxFQUFHLENBQ3RCLE1BQU0sQ0FBTyxFQUdiLEtBQUssWUFBYyxDQUFFLFlBQWEsRUFBRyxjQUFlLHFCQUFzQixFQUMxRSxLQUFLLG9CQUFzQixFQUFRLHFCQUF1QixVQUMxRCxLQUFLLE9BQVMsTUFBTSxRQUFRLEVBQVEsTUFBTSxFQUNwQyxFQUFRLE9BQ1IsRUFBUSxPQUNKLENBQUMsRUFBUSxNQUFNLEVBQ2YsQ0FBQyxPQU1ULG9CQUFtQixDQUV6QixFQUFjLENBQ1YsSUFBTSxFQUFZLG9CQUFvQixLQUFLLDRCQUN2QyxFQUNKLEdBQUksQ0FDQSxJQUFNLEVBQWtCLENBQ3BCLFNBQVUsQ0FDZCxFQUNBLEdBQUksS0FBSyxPQUFPLE9BQVMsRUFDckIsRUFBZ0IsT0FBUyxDQUNyQixPQUFRLEtBQUssT0FBTyxLQUFLLEdBQUcsQ0FDaEMsRUFFSixFQUFPLE1BQU0sSUFBWSxTQUFTLENBQWUsRUFFckQsTUFBTyxFQUFHLENBQ04sR0FBSSxhQUFhLElBQVMsWUFDdEIsRUFBRSxRQUFVLG1DQUFtQyxFQUFFLFVBQ2pELEtBQUssVUFBVSxDQUFDLEVBRXBCLE1BQU0sRUFFVixJQUFNLEVBQVMsRUFDZixHQUFJLEdBQVEsRUFBSyxXQUNiLEVBQU8sWUFBYyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUksRUFBSyxXQUFhLEtBQzlELE9BQU8sRUFBTyxXQUdsQixPQURBLEtBQUssS0FBSyxTQUFVLENBQU0sRUFDbkIsQ0FBRSxTQUFRLElBQUssSUFBSyxPQU16QixhQUFZLENBQUMsRUFBZ0IsQ0FDL0IsSUFBTSxFQUFjLG9CQUFvQixLQUFLLHFEQUNoQixJQUN6QixFQUNKLEdBQUksQ0FDQSxJQUFNLEVBQWtCLENBQ3BCLFNBQVUsQ0FDZCxFQUNBLEVBQVUsTUFBTSxJQUFZLFNBQVMsQ0FBZSxFQUV4RCxNQUFPLEVBQUcsQ0FDTixHQUFJLGFBQWEsTUFDYixFQUFFLFFBQVUsNkJBQTZCLEVBQUUsVUFFL0MsTUFBTSxFQUVWLE9BQU8sRUFFWCxTQUFTLENBQUMsRUFBRyxDQUNULElBQU0sRUFBTSxFQUFFLFNBQ2QsR0FBSSxHQUFPLEVBQUksUUFFWCxHQURBLEVBQUUsT0FBUyxFQUFJLE9BQ1gsRUFBSSxTQUFXLElBQ2YsRUFBRSxRQUNFLHVPQUdJLEVBQUUsUUFFVCxRQUFJLEVBQUksU0FBVyxJQUNwQixFQUFFLFFBQ0UsOE5BR0ksRUFBRSxTQUkxQixDQUNRLFlBQVUsd0JDdEdsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXFCLE9BQzdCLElBQU0sU0FDTixNQUFNLFlBQXNCLElBQWUsWUFBYSxDQU9wRCxXQUFXLENBQUMsRUFBUyxDQUNqQixNQUFNLENBQU8sRUFDYixLQUFLLGVBQWlCLEVBQVEsZUFDOUIsS0FBSyxnQkFBa0IsRUFBUSxxQkFFN0Isd0JBQXVCLENBRTdCLEVBQUssQ0FDRCxJQUFLLEtBQUssWUFBWSxXQUNqQixLQUFLLFlBQVksYUFDbEIsS0FBSyxnQkFBZ0IsRUFBRyxDQUN4QixJQUFNLEVBQVUsTUFBTSxLQUFLLGdCQUFnQixhQUFhLEtBQUssY0FBYyxFQUMzRSxLQUFLLFlBQWMsQ0FDZixTQUFVLEVBQ1YsWUFBYSxLQUFLLHFCQUFxQixDQUFPLENBQ2xELEVBS0osTUFBTyxDQUFFLFFBSE8sQ0FDWixjQUFlLFVBQVksS0FBSyxZQUFZLFFBQ2hELENBQ2lCLEVBRXJCLG9CQUFvQixDQUFDLEVBQVMsQ0FDMUIsSUFBTSxFQUFhLEVBQVEsTUFBTSxHQUFHLEVBQUUsR0FDdEMsR0FBSSxFQUVBLE9BRGdCLEtBQUssTUFBTSxPQUFPLEtBQUssRUFBWSxRQUFRLEVBQUUsU0FBUyxPQUFPLENBQUMsRUFDL0QsSUFBTSxLQUdqQyxDQUNRLGtCQUFnQix3QkN4Q3hCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxXQUFjLE9BQ2QsVUFBUSxJQUNSLFdBQVMsSUFDakIsSUFBTSxTQUNGLElBQ0gsUUFBUyxDQUFDLEVBQVEsQ0FDZixFQUFPLFdBQWdCLGFBQ3ZCLEVBQU8sa0JBQXVCLG9CQUM5QixFQUFPLGdCQUFxQixrQkFDNUIsRUFBTyxlQUFvQixpQkFDM0IsRUFBTyxVQUFlLFlBQ3RCLEVBQU8sS0FBVSxTQUNsQixLQUFtQixXQUFTLEdBQVMsQ0FBQyxFQUFFLEVBQzNDLElBQUksR0FDSixTQUFTLEdBQUssRUFBRyxDQUNiLEdBQWEsT0FFakIsZUFBZSxHQUFNLEVBQUcsQ0FDcEIsR0FBSSxHQUNBLE9BQU8sR0FHWCxPQURBLEdBQWEsSUFBZSxFQUNyQixHQUVYLGVBQWUsR0FBYyxFQUFHLENBQzVCLElBQUksRUFBTSxHQUFPLEtBQ2pCLEdBQUksSUFBWSxFQUNaLEVBQU0sR0FBTyxXQUVaLFFBQUksSUFBZ0IsRUFDckIsRUFBTSxHQUFPLGdCQUVaLFFBQUksTUFBTSxJQUFnQixFQUMzQixHQUFJLE1BQU0sSUFBbUIsRUFDekIsRUFBTSxHQUFPLGtCQUVaLFFBQUksSUFBVyxFQUNoQixFQUFNLEdBQU8sVUFHYixPQUFNLEdBQU8sZUFJakIsT0FBTSxHQUFPLEtBRWpCLE9BQU8sRUFFWCxTQUFTLEdBQVcsRUFBRyxDQUNuQixTQUFVLFFBQVEsSUFBSSxhQUFlLFFBQVEsSUFBSSxpQkFFckQsU0FBUyxHQUFlLEVBQUcsQ0FDdkIsU0FBVSxRQUFRLElBQUksZUFBaUIsUUFBUSxJQUFJLGlCQU92RCxTQUFTLEdBQVUsRUFBRyxDQUNsQixRQUFTLFFBQVEsSUFBSSxnQkFFekIsZUFBZSxHQUFrQixFQUFHLENBQ2hDLEdBQUksQ0FFQSxPQURBLE1BQU0sSUFBWSxTQUFTLHlCQUF5QixFQUM3QyxHQUVYLE1BQU8sRUFBRyxDQUNOLE1BQU8sSUFHZixlQUFlLEdBQWUsRUFBRyxDQUM3QixPQUFPLElBQVksWUFBWSwyQkN0Rm5DLElBQUksUUFBZ0MsT0FDaEMsaUJBQ0EsZUFFSixTQUFTLEVBQVUsQ0FBQyxFQUFNLENBTXhCLEdBTEEsS0FBSyxPQUFTLEtBQ2QsS0FBSyxTQUFXLEdBQ2hCLEtBQUssU0FBVyxJQUdYLEVBRUgsT0FEQSxLQUFLLE9BQVMsR0FBTyxNQUFNLENBQUMsRUFDckIsS0FJVCxHQUFJLE9BQU8sRUFBSyxPQUFTLFdBR3ZCLE9BRkEsS0FBSyxPQUFTLEdBQU8sTUFBTSxDQUFDLEVBQzVCLEVBQUssS0FBSyxJQUFJLEVBQ1AsS0FLVCxHQUFJLEVBQUssUUFBVSxPQUFPLElBQVMsU0FRakMsT0FQQSxLQUFLLE9BQVMsRUFDZCxLQUFLLFNBQVcsR0FDaEIsUUFBUSxTQUFTLFFBQVMsRUFBRyxDQUMzQixLQUFLLEtBQUssTUFBTyxDQUFJLEVBQ3JCLEtBQUssU0FBVyxHQUNoQixLQUFLLEtBQUssT0FBTyxHQUNqQixLQUFLLElBQUksQ0FBQyxFQUNMLEtBR1QsTUFBTSxJQUFJLFVBQVUseUJBQTBCLE9BQU8sRUFBTyxHQUFHLEVBRWpFLElBQUssU0FBUyxHQUFZLEdBQU0sRUFFaEMsR0FBVyxVQUFVLE1BQVEsU0FBUyxDQUFLLENBQUMsRUFBTSxDQUNoRCxLQUFLLE9BQVMsR0FBTyxPQUFPLENBQUMsS0FBSyxPQUFRLEdBQU8sS0FBSyxDQUFJLENBQUMsQ0FBQyxFQUM1RCxLQUFLLEtBQUssT0FBUSxDQUFJLEdBR3hCLEdBQVcsVUFBVSxJQUFNLFNBQVMsQ0FBRyxDQUFDLEVBQU0sQ0FDNUMsR0FBSSxFQUNGLEtBQUssTUFBTSxDQUFJLEVBQ2pCLEtBQUssS0FBSyxNQUFPLENBQUksRUFDckIsS0FBSyxLQUFLLE9BQU8sRUFDakIsS0FBSyxTQUFXLEdBQ2hCLEtBQUssU0FBVyxJQUdsQixJQUFPLFFBQVUsMkJDcERqQixJQUFJLGdCQUEyQixPQUMzQixpQkFBK0IsV0FFbkMsSUFBTyxRQUFVLEdBRWpCLFNBQVMsRUFBUSxDQUFDLEVBQUcsRUFBRyxDQUd0QixJQUFLLEdBQU8sU0FBUyxDQUFDLElBQU0sR0FBTyxTQUFTLENBQUMsRUFDM0MsTUFBTyxHQU1ULEdBQUksRUFBRSxTQUFXLEVBQUUsT0FDakIsTUFBTyxHQUdULElBQUksRUFBSSxFQUNSLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBRSxPQUFRLElBRTVCLEdBQUssRUFBRSxHQUFLLEVBQUUsR0FFaEIsT0FBTyxJQUFNLEVBR2YsR0FBUyxRQUFVLFFBQVEsRUFBRyxDQUM1QixHQUFPLFVBQVUsTUFBUSxJQUFXLFVBQVUsTUFBUSxTQUFTLENBQUssQ0FBQyxFQUFNLENBQ3pFLE9BQU8sR0FBUyxLQUFNLENBQUksSUFJOUIsSUFBSSxJQUFlLEdBQU8sVUFBVSxNQUNoQyxJQUFtQixJQUFXLFVBQVUsTUFDNUMsR0FBUyxRQUFVLFFBQVEsRUFBRyxDQUM1QixHQUFPLFVBQVUsTUFBUSxJQUN6QixJQUFXLFVBQVUsTUFBUSw2QkN2Qy9CLElBQUksVUFDQSxRQUFnQyxPQUNoQyxnQkFDQSxVQUNBLGVBRUEsSUFBd0I7QUFBQTtBQUFBLDBIQUN4QixHQUFxQixvQ0FDckIsR0FBMkIsbUNBQzNCLElBQXlCLDhDQUV6QixJQUFxQixPQUFPLEdBQU8sa0JBQW9CLFdBQzNELEdBQUksSUFDRixJQUE0QixrQkFDNUIsSUFBc0IsaUJBR3hCLFNBQVMsR0FBZ0IsQ0FBQyxFQUFLLENBQzdCLEdBQUksR0FBTyxTQUFTLENBQUcsRUFDckIsT0FHRixHQUFJLE9BQU8sSUFBUSxTQUNqQixPQUdGLElBQUssSUFDSCxNQUFNLEdBQVUsRUFBd0IsRUFHMUMsR0FBSSxPQUFPLElBQVEsU0FDakIsTUFBTSxHQUFVLEVBQXdCLEVBRzFDLEdBQUksT0FBTyxFQUFJLE9BQVMsU0FDdEIsTUFBTSxHQUFVLEVBQXdCLEVBRzFDLEdBQUksT0FBTyxFQUFJLG9CQUFzQixTQUNuQyxNQUFNLEdBQVUsRUFBd0IsRUFHMUMsR0FBSSxPQUFPLEVBQUksU0FBVyxXQUN4QixNQUFNLEdBQVUsRUFBd0IsRUFJNUMsU0FBUyxHQUFpQixDQUFDLEVBQUssQ0FDOUIsR0FBSSxHQUFPLFNBQVMsQ0FBRyxFQUNyQixPQUdGLEdBQUksT0FBTyxJQUFRLFNBQ2pCLE9BR0YsR0FBSSxPQUFPLElBQVEsU0FDakIsT0FHRixNQUFNLEdBQVUsR0FBc0IsRUFHeEMsU0FBUyxHQUFnQixDQUFDLEVBQUssQ0FDN0IsR0FBSSxHQUFPLFNBQVMsQ0FBRyxFQUNyQixPQUdGLEdBQUksT0FBTyxJQUFRLFNBQ2pCLE9BQU8sRUFHVCxJQUFLLElBQ0gsTUFBTSxHQUFVLEVBQWtCLEVBR3BDLEdBQUksT0FBTyxJQUFRLFNBQ2pCLE1BQU0sR0FBVSxFQUFrQixFQUdwQyxHQUFJLEVBQUksT0FBUyxTQUNmLE1BQU0sR0FBVSxFQUFrQixFQUdwQyxHQUFJLE9BQU8sRUFBSSxTQUFXLFdBQ3hCLE1BQU0sR0FBVSxFQUFrQixFQUl0QyxTQUFTLEdBQVUsQ0FBQyxFQUFRLENBQzFCLE9BQU8sRUFDSixRQUFRLEtBQU0sRUFBRSxFQUNoQixRQUFRLE1BQU8sR0FBRyxFQUNsQixRQUFRLE1BQU8sR0FBRyxFQUd2QixTQUFTLEdBQVEsQ0FBQyxFQUFXLENBQzNCLEVBQVksRUFBVSxTQUFTLEVBRS9CLElBQUksRUFBVSxFQUFJLEVBQVUsT0FBUyxFQUNyQyxHQUFJLElBQVksRUFDZCxRQUFTLEVBQUksRUFBRyxFQUFJLElBQVcsRUFDN0IsR0FBYSxJQUlqQixPQUFPLEVBQ0osUUFBUSxNQUFPLEdBQUcsRUFDbEIsUUFBUSxLQUFNLEdBQUcsRUFHdEIsU0FBUyxFQUFTLENBQUMsRUFBVSxDQUMzQixJQUFJLEVBQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxVQUFXLENBQUMsRUFDakMsRUFBUyxJQUFLLE9BQU8sS0FBSyxJQUFNLENBQVEsRUFBRSxNQUFNLEtBQU0sQ0FBSSxFQUM5RCxPQUFPLElBQUksVUFBVSxDQUFNLEVBRzdCLFNBQVMsR0FBYyxDQUFDLEVBQUssQ0FDM0IsT0FBTyxHQUFPLFNBQVMsQ0FBRyxHQUFLLE9BQU8sSUFBUSxTQUdoRCxTQUFTLEVBQWMsQ0FBQyxFQUFPLENBQzdCLElBQUssSUFBZSxDQUFLLEVBQ3ZCLEVBQVEsS0FBSyxVQUFVLENBQUssRUFDOUIsT0FBTyxFQUdULFNBQVMsR0FBZ0IsQ0FBQyxFQUFNLENBQzlCLE9BQU8sU0FBUyxDQUFJLENBQUMsRUFBTyxFQUFRLENBQ2xDLElBQWlCLENBQU0sRUFDdkIsRUFBUSxHQUFlLENBQUssRUFDNUIsSUFBSSxFQUFPLEdBQU8sV0FBVyxNQUFRLEVBQU0sQ0FBTSxFQUM3QyxHQUFPLEVBQUssT0FBTyxDQUFLLEVBQUcsRUFBSyxPQUFPLFFBQVEsR0FDbkQsT0FBTyxJQUFXLENBQUcsR0FJekIsU0FBUyxHQUFrQixDQUFDLEVBQU0sQ0FDaEMsT0FBTyxTQUFTLENBQU0sQ0FBQyxFQUFPLEVBQVcsRUFBUSxDQUMvQyxJQUFJLEVBQWMsSUFBaUIsQ0FBSSxFQUFFLEVBQU8sQ0FBTSxFQUN0RCxPQUFPLElBQVksR0FBTyxLQUFLLENBQVMsRUFBRyxHQUFPLEtBQUssQ0FBVyxDQUFDLEdBSXZFLFNBQVMsR0FBZSxDQUFDLEVBQU0sQ0FDOUIsT0FBTyxTQUFTLENBQUksQ0FBQyxFQUFPLEVBQVksQ0FDckMsSUFBa0IsQ0FBVSxFQUM1QixFQUFRLEdBQWUsQ0FBSyxFQUc1QixJQUFJLEVBQVMsR0FBTyxXQUFXLFVBQVksQ0FBSSxFQUMzQyxHQUFPLEVBQU8sT0FBTyxDQUFLLEVBQUcsRUFBTyxLQUFLLEVBQVksUUFBUSxHQUNqRSxPQUFPLElBQVcsQ0FBRyxHQUl6QixTQUFTLEdBQWlCLENBQUMsRUFBTSxDQUMvQixPQUFPLFNBQVMsQ0FBTSxDQUFDLEVBQU8sRUFBVyxFQUFXLENBQ2xELElBQWlCLENBQVMsRUFDMUIsRUFBUSxHQUFlLENBQUssRUFDNUIsRUFBWSxJQUFTLENBQVMsRUFDOUIsSUFBSSxFQUFXLEdBQU8sYUFBYSxVQUFZLENBQUksRUFFbkQsT0FEQSxFQUFTLE9BQU8sQ0FBSyxFQUNkLEVBQVMsT0FBTyxFQUFXLEVBQVcsUUFBUSxHQUl6RCxTQUFTLEdBQWtCLENBQUMsRUFBTSxDQUNoQyxPQUFPLFNBQVMsQ0FBSSxDQUFDLEVBQU8sRUFBWSxDQUN0QyxJQUFrQixDQUFVLEVBQzVCLEVBQVEsR0FBZSxDQUFLLEVBQzVCLElBQUksRUFBUyxHQUFPLFdBQVcsVUFBWSxDQUFJLEVBQzNDLEdBQU8sRUFBTyxPQUFPLENBQUssRUFBRyxFQUFPLEtBQUssQ0FDM0MsSUFBSyxFQUNMLFFBQVMsR0FBTyxVQUFVLHNCQUMxQixXQUFZLEdBQU8sVUFBVSxzQkFDL0IsRUFBRyxRQUFRLEdBQ1gsT0FBTyxJQUFXLENBQUcsR0FJekIsU0FBUyxHQUFvQixDQUFDLEVBQU0sQ0FDbEMsT0FBTyxTQUFTLENBQU0sQ0FBQyxFQUFPLEVBQVcsRUFBVyxDQUNsRCxJQUFpQixDQUFTLEVBQzFCLEVBQVEsR0FBZSxDQUFLLEVBQzVCLEVBQVksSUFBUyxDQUFTLEVBQzlCLElBQUksRUFBVyxHQUFPLGFBQWEsVUFBWSxDQUFJLEVBRW5ELE9BREEsRUFBUyxPQUFPLENBQUssRUFDZCxFQUFTLE9BQU8sQ0FDckIsSUFBSyxFQUNMLFFBQVMsR0FBTyxVQUFVLHNCQUMxQixXQUFZLEdBQU8sVUFBVSxzQkFDL0IsRUFBRyxFQUFXLFFBQVEsR0FJMUIsU0FBUyxHQUFpQixDQUFDLEVBQU0sQ0FDL0IsSUFBSSxFQUFRLElBQWdCLENBQUksRUFDaEMsT0FBTyxTQUFTLENBQUksRUFBRyxDQUNyQixJQUFJLEVBQVksRUFBTSxNQUFNLEtBQU0sU0FBUyxFQUUzQyxPQURBLEVBQVksSUFBWSxVQUFVLEVBQVcsS0FBTyxDQUFJLEVBQ2pELEdBSVgsU0FBUyxHQUFrQixDQUFDLEVBQU0sQ0FDaEMsSUFBSSxFQUFRLElBQWtCLENBQUksRUFDbEMsT0FBTyxTQUFTLENBQU0sQ0FBQyxFQUFPLEVBQVcsRUFBVyxDQUNsRCxFQUFZLElBQVksVUFBVSxFQUFXLEtBQU8sQ0FBSSxFQUFFLFNBQVMsUUFBUSxFQUMzRSxJQUFJLEVBQVMsRUFBTSxFQUFPLEVBQVcsQ0FBUyxFQUM5QyxPQUFPLEdBSVgsU0FBUyxHQUFnQixFQUFHLENBQzFCLE9BQU8sU0FBUyxDQUFJLEVBQUcsQ0FDckIsTUFBTyxJQUlYLFNBQVMsR0FBa0IsRUFBRyxDQUM1QixPQUFPLFNBQVMsQ0FBTSxDQUFDLEVBQU8sRUFBVyxDQUN2QyxPQUFPLElBQWMsSUFJekIsSUFBTyxRQUFVLFNBQVMsQ0FBRyxDQUFDLEVBQVcsQ0FDdkMsSUFBSSxFQUFrQixDQUNwQixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osS0FBTSxHQUNSLEVBQ0ksRUFBb0IsQ0FDdEIsR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEtBQU0sR0FDUixFQUNJLEVBQVEsRUFBVSxNQUFNLHVDQUF1QyxFQUNuRSxJQUFLLEVBQ0gsTUFBTSxHQUFVLElBQXVCLENBQVMsRUFDbEQsSUFBSSxHQUFRLEVBQU0sSUFBTSxFQUFNLElBQUksWUFBWSxFQUMxQyxFQUFPLEVBQU0sR0FFakIsTUFBTyxDQUNMLEtBQU0sRUFBZ0IsR0FBTSxDQUFJLEVBQ2hDLE9BQVEsRUFBa0IsR0FBTSxDQUFJLENBQ3RDLDJCQ3pQRixJQUFJLGlCQUEyQixPQUUvQixJQUFPLFFBQVUsU0FBUyxDQUFRLENBQUMsRUFBSyxDQUN0QyxHQUFJLE9BQU8sSUFBUSxTQUNqQixPQUFPLEVBQ1QsR0FBSSxPQUFPLElBQVEsVUFBWSxJQUFPLFNBQVMsQ0FBRyxFQUNoRCxPQUFPLEVBQUksU0FBUyxFQUN0QixPQUFPLEtBQUssVUFBVSxDQUFHLDJCQ1AzQixJQUFJLFNBQWdDLE9BQ2hDLFVBQ0EsVUFDQSxpQkFDQSxVQUNBLGVBRUosU0FBUyxHQUFTLENBQUMsRUFBUSxFQUFVLENBQ25DLE9BQU8sSUFDSixLQUFLLEVBQVEsQ0FBUSxFQUNyQixTQUFTLFFBQVEsRUFDakIsUUFBUSxLQUFNLEVBQUUsRUFDaEIsUUFBUSxNQUFPLEdBQUcsRUFDbEIsUUFBUSxNQUFPLEdBQUcsRUFHdkIsU0FBUyxHQUFlLENBQUMsRUFBUSxFQUFTLEVBQVUsQ0FDbEQsRUFBVyxHQUFZLE9BQ3ZCLElBQUksRUFBZ0IsSUFBVSxJQUFTLENBQU0sRUFBRyxRQUFRLEVBQ3BELEVBQWlCLElBQVUsSUFBUyxDQUFPLEVBQUcsQ0FBUSxFQUMxRCxPQUFPLElBQUssT0FBTyxRQUFTLEVBQWUsQ0FBYyxFQUczRCxTQUFTLEdBQU8sQ0FBQyxFQUFNLENBQ3JCLElBQWtCLE9BQWQsRUFDZSxRQUFmLEdBQVUsRUFDVixFQUFjLEVBQUssUUFBVSxFQUFLLFdBQ2xDLEVBQVcsRUFBSyxTQUNoQixFQUFPLElBQUksRUFBTyxHQUFHLEVBQ3JCLEVBQWUsSUFBZ0IsRUFBUSxFQUFTLENBQVEsRUFDeEQsRUFBWSxFQUFLLEtBQUssRUFBYyxDQUFXLEVBQ25ELE9BQU8sSUFBSyxPQUFPLFFBQVMsRUFBYyxDQUFTLEVBR3JELFNBQVMsRUFBVSxDQUFDLEVBQU0sQ0FDeEIsSUFBSSxFQUFTLEVBQUssUUFBUSxFQUFLLFlBQVksRUFBSyxJQUM1QyxFQUFlLElBQUksSUFBVyxDQUFNLEVBQ3hDLEtBQUssU0FBVyxHQUNoQixLQUFLLE9BQVMsRUFBSyxPQUNuQixLQUFLLFNBQVcsRUFBSyxTQUNyQixLQUFLLE9BQVMsS0FBSyxXQUFhLEtBQUssSUFBTSxFQUMzQyxLQUFLLFFBQVUsSUFBSSxJQUFXLEVBQUssT0FBTyxFQUMxQyxLQUFLLE9BQU8sS0FBSyxRQUFTLFFBQVMsRUFBRyxDQUNwQyxJQUFLLEtBQUssUUFBUSxVQUFZLEtBQUssU0FDakMsS0FBSyxLQUFLLEdBQ1osS0FBSyxJQUFJLENBQUMsRUFFWixLQUFLLFFBQVEsS0FBSyxRQUFTLFFBQVMsRUFBRyxDQUNyQyxJQUFLLEtBQUssT0FBTyxVQUFZLEtBQUssU0FDaEMsS0FBSyxLQUFLLEdBQ1osS0FBSyxJQUFJLENBQUMsRUFFZCxJQUFLLFNBQVMsR0FBWSxHQUFNLEVBRWhDLEdBQVcsVUFBVSxLQUFPLFNBQVMsQ0FBSSxFQUFHLENBQzFDLEdBQUksQ0FDRixJQUFJLEVBQVksSUFBUSxDQUN0QixPQUFRLEtBQUssT0FDYixRQUFTLEtBQUssUUFBUSxPQUN0QixPQUFRLEtBQUssT0FBTyxPQUNwQixTQUFVLEtBQUssUUFDakIsQ0FBQyxFQUtELE9BSkEsS0FBSyxLQUFLLE9BQVEsQ0FBUyxFQUMzQixLQUFLLEtBQUssT0FBUSxDQUFTLEVBQzNCLEtBQUssS0FBSyxLQUFLLEVBQ2YsS0FBSyxTQUFXLEdBQ1QsRUFDUCxNQUFPLEVBQUcsQ0FDVixLQUFLLFNBQVcsR0FDaEIsS0FBSyxLQUFLLFFBQVMsQ0FBQyxFQUNwQixLQUFLLEtBQUssT0FBTyxJQUlyQixHQUFXLEtBQU8sSUFFbEIsSUFBTyxRQUFVLDJCQzVFakIsSUFBSSxTQUFnQyxPQUNoQyxVQUNBLFVBQ0EsaUJBQ0EsVUFDQSxlQUNBLElBQVksMkRBRWhCLFNBQVMsR0FBUSxDQUFDLEVBQU8sQ0FDdkIsT0FBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUssSUFBTSxrQkFHbkQsU0FBUyxHQUFhLENBQUMsRUFBTyxDQUM1QixHQUFJLElBQVMsQ0FBSyxFQUNoQixPQUFPLEVBQ1QsR0FBSSxDQUFFLE9BQU8sS0FBSyxNQUFNLENBQUssRUFDN0IsTUFBTyxFQUFHLENBQUUsUUFHZCxTQUFTLEdBQWEsQ0FBQyxFQUFRLENBQzdCLElBQUksRUFBZ0IsRUFBTyxNQUFNLElBQUssQ0FBQyxFQUFFLEdBQ3pDLE9BQU8sSUFBYyxJQUFPLEtBQUssRUFBZSxRQUFRLEVBQUUsU0FBUyxRQUFRLENBQUMsRUFHOUUsU0FBUyxHQUFtQixDQUFDLEVBQVEsQ0FDbkMsT0FBTyxFQUFPLE1BQU0sSUFBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBR3RDLFNBQVMsR0FBZ0IsQ0FBQyxFQUFRLENBQ2hDLE9BQU8sRUFBTyxNQUFNLEdBQUcsRUFBRSxHQUczQixTQUFTLEdBQWMsQ0FBQyxFQUFRLEVBQVUsQ0FDeEMsRUFBVyxHQUFZLE9BQ3ZCLElBQUksRUFBVSxFQUFPLE1BQU0sR0FBRyxFQUFFLEdBQ2hDLE9BQU8sSUFBTyxLQUFLLEVBQVMsUUFBUSxFQUFFLFNBQVMsQ0FBUSxFQUd6RCxTQUFTLEdBQVUsQ0FBQyxFQUFRLENBQzFCLE9BQU8sSUFBVSxLQUFLLENBQU0sS0FBTyxJQUFjLENBQU0sRUFHekQsU0FBUyxHQUFTLENBQUMsRUFBUSxFQUFXLEVBQWEsQ0FDakQsSUFBSyxFQUFXLENBQ2QsSUFBSSxFQUFNLElBQUksTUFBTSw0Q0FBNEMsRUFFaEUsTUFEQSxFQUFJLEtBQU8sb0JBQ0wsRUFFUixFQUFTLElBQVMsQ0FBTSxFQUN4QixJQUFJLEVBQVksSUFBaUIsQ0FBTSxFQUNuQyxFQUFlLElBQW9CLENBQU0sRUFDekMsRUFBTyxJQUFJLENBQVMsRUFDeEIsT0FBTyxFQUFLLE9BQU8sRUFBYyxFQUFXLENBQVcsRUFHekQsU0FBUyxHQUFTLENBQUMsRUFBUSxFQUFNLENBSS9CLEdBSEEsRUFBTyxHQUFRLENBQUMsRUFDaEIsRUFBUyxJQUFTLENBQU0sR0FFbkIsSUFBVyxDQUFNLEVBQ3BCLE9BQU8sS0FFVCxJQUFJLEVBQVMsSUFBYyxDQUFNLEVBRWpDLElBQUssRUFDSCxPQUFPLEtBRVQsSUFBSSxFQUFVLElBQWUsQ0FBTSxFQUNuQyxHQUFJLEVBQU8sTUFBUSxPQUFTLEVBQUssS0FDL0IsRUFBVSxLQUFLLE1BQU0sRUFBUyxFQUFLLFFBQVEsRUFFN0MsTUFBTyxDQUNMLE9BQVEsRUFDUixRQUFTLEVBQ1QsVUFBVyxJQUFpQixDQUFNLENBQ3BDLEVBR0YsU0FBUyxFQUFZLENBQUMsRUFBTSxDQUMxQixFQUFPLEdBQVEsQ0FBQyxFQUNoQixJQUFJLEVBQWMsRUFBSyxRQUFRLEVBQUssV0FBVyxFQUFLLElBQ2hELEVBQWUsSUFBSSxJQUFXLENBQVcsRUFDN0MsS0FBSyxTQUFXLEdBQ2hCLEtBQUssVUFBWSxFQUFLLFVBQ3RCLEtBQUssU0FBVyxFQUFLLFNBQ3JCLEtBQUssT0FBUyxLQUFLLFVBQVksS0FBSyxJQUFNLEVBQzFDLEtBQUssVUFBWSxJQUFJLElBQVcsRUFBSyxTQUFTLEVBQzlDLEtBQUssT0FBTyxLQUFLLFFBQVMsUUFBUyxFQUFHLENBQ3BDLElBQUssS0FBSyxVQUFVLFVBQVksS0FBSyxTQUNuQyxLQUFLLE9BQU8sR0FDZCxLQUFLLElBQUksQ0FBQyxFQUVaLEtBQUssVUFBVSxLQUFLLFFBQVMsUUFBUyxFQUFHLENBQ3ZDLElBQUssS0FBSyxPQUFPLFVBQVksS0FBSyxTQUNoQyxLQUFLLE9BQU8sR0FDZCxLQUFLLElBQUksQ0FBQyxFQUVkLElBQUssU0FBUyxHQUFjLEdBQU0sRUFDbEMsR0FBYSxVQUFVLE9BQVMsU0FBUyxDQUFNLEVBQUcsQ0FDaEQsR0FBSSxDQUNGLElBQUksRUFBUSxJQUFVLEtBQUssVUFBVSxPQUFRLEtBQUssVUFBVyxLQUFLLElBQUksTUFBTSxFQUN4RSxFQUFNLElBQVUsS0FBSyxVQUFVLE9BQVEsS0FBSyxRQUFRLEVBS3hELE9BSkEsS0FBSyxLQUFLLE9BQVEsRUFBTyxDQUFHLEVBQzVCLEtBQUssS0FBSyxPQUFRLENBQUssRUFDdkIsS0FBSyxLQUFLLEtBQUssRUFDZixLQUFLLFNBQVcsR0FDVCxFQUNQLE1BQU8sRUFBRyxDQUNWLEtBQUssU0FBVyxHQUNoQixLQUFLLEtBQUssUUFBUyxDQUFDLEVBQ3BCLEtBQUssS0FBSyxPQUFPLElBSXJCLEdBQWEsT0FBUyxJQUN0QixHQUFhLFFBQVUsSUFDdkIsR0FBYSxPQUFTLElBRXRCLElBQU8sUUFBVSx1QkN0SGpCLElBQUksVUFDQSxTQUVBLElBQWEsQ0FDZixRQUFTLFFBQVMsUUFDbEIsUUFBUyxRQUFTLFFBQ2xCLFFBQVMsUUFBUyxRQUNsQixRQUFTLFFBQVMsT0FDcEIsRUFFUSxlQUFhLElBQ2IsU0FBTyxJQUFXLEtBQ2xCLFdBQVMsR0FBYSxPQUN0QixXQUFTLEdBQWEsT0FDdEIsWUFBVSxHQUFhLFFBQ3ZCLGVBQWEsU0FBUyxDQUFVLENBQUMsRUFBTSxDQUM3QyxPQUFPLElBQUksSUFBVyxDQUFJLEdBRXBCLGlCQUFlLFNBQVMsQ0FBWSxDQUFDLEVBQU0sQ0FDakQsT0FBTyxJQUFJLEdBQWEsQ0FBSSxzQkNiOUIsSUFBSSxHQUEwQixJQUFRLEdBQUssd0JBQTJCLFFBQVMsQ0FBQyxFQUFVLEVBQU8sRUFBTSxFQUFHLENBQ3RHLEdBQUksSUFBUyxNQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsK0NBQStDLEVBQzNGLEdBQUksT0FBTyxJQUFVLFdBQWEsSUFBYSxJQUFVLEdBQUssRUFBTSxJQUFJLENBQVEsRUFBRyxNQUFNLElBQUksVUFBVSwwRUFBMEUsRUFDakwsT0FBTyxJQUFTLElBQU0sRUFBSSxJQUFTLElBQU0sRUFBRSxLQUFLLENBQVEsRUFBSSxFQUFJLEVBQUUsTUFBUSxFQUFNLElBQUksQ0FBUSxHQUU1RixJQUEwQixJQUFRLEdBQUssd0JBQTJCLFFBQVMsQ0FBQyxFQUFVLEVBQU8sRUFBTyxFQUFNLEVBQUcsQ0FDN0csR0FBSSxJQUFTLElBQUssTUFBTSxJQUFJLFVBQVUsZ0NBQWdDLEVBQ3RFLEdBQUksSUFBUyxNQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsK0NBQStDLEVBQzNGLEdBQUksT0FBTyxJQUFVLFdBQWEsSUFBYSxJQUFVLEdBQUssRUFBTSxJQUFJLENBQVEsRUFBRyxNQUFNLElBQUksVUFBVSx5RUFBeUUsRUFDaEwsT0FBUSxJQUFTLElBQU0sRUFBRSxLQUFLLEVBQVUsQ0FBSyxFQUFJLEVBQUksRUFBRSxNQUFRLEVBQVEsRUFBTSxJQUFJLEVBQVUsQ0FBSyxFQUFJLEdBRXBHLEdBQXdCLEdBQThCLElBQTRCLElBQWlDLElBQTBCLElBQStCLElBQXdCLElBQ3hNLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFlBQW1CLE9BQzNCLElBQU0sYUFDQSxTQUNBLFVBQ0EsZUFDQSxlQUNBLElBQVcsSUFBRyxTQUNWLElBQU8sVUFBVyxJQUFHLFFBQVEsRUFDakMsU0FBWSxDQUVWLE1BQU0sSUFBSSxHQUFjLCtCQUFnQyxxQkFBcUIsR0FFL0UsSUFBbUIsNkNBQ25CLElBQTBCLHFEQUNoQyxNQUFNLFdBQXNCLEtBQU0sQ0FDOUIsV0FBVyxDQUFDLEVBQVMsRUFBTSxDQUN2QixNQUFNLENBQU8sRUFDYixLQUFLLEtBQU8sRUFFcEIsQ0FDQSxNQUFNLEdBQVksSUFDVixZQUFXLEVBQUcsQ0FDZCxPQUFPLEtBQUssU0FBVyxLQUFLLFNBQVMsYUFBZSxVQUVwRCxRQUFPLEVBQUcsQ0FDVixPQUFPLEtBQUssU0FBVyxLQUFLLFNBQVMsU0FBVyxVQUVoRCxVQUFTLEVBQUcsQ0FDWixPQUFPLEtBQUssU0FBVyxLQUFLLFNBQVMsV0FBYSxVQUVsRCxhQUFZLEVBQUcsQ0FDZixPQUFPLEtBQUssU0FBVyxLQUFLLFNBQVMsY0FBZ0IsT0FPekQsV0FBVyxDQUFDLEVBQVMsQ0FDakIsR0FBdUIsSUFBSSxJQUFJLEVBQy9CLEtBQUssWUFBYyxDQUNmLFFBQVMsS0FBWSxJQUFTLFFBQVMsQ0FBSSxDQUMvQyxFQUNBLEdBQTZCLElBQUksS0FBVyxNQUFDLEVBQzdDLEdBQXVCLEtBQU0sR0FBd0IsSUFBSyxHQUFzQixFQUFFLEtBQUssS0FBTSxDQUFPLEVBT3hHLFVBQVUsRUFBRyxDQUNULElBQU0sRUFBTSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQy9CLEdBQUksS0FBSyxVQUFZLEtBQUssVUFDdEIsT0FBTyxHQUFPLEtBQUssVUFHbkIsV0FBTyxHQVFmLGVBQWUsRUFBRyxDQUNkLElBQUksRUFDSixJQUFNLEVBQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUN6QixHQUErQixFQUFLLEtBQUssK0JBQWlDLE1BQVEsSUFBWSxPQUFJLEVBQUssRUFDN0csR0FBSSxLQUFLLFVBQVksS0FBSyxVQUN0QixPQUFPLEtBQUssV0FBYSxFQUFNLEVBRy9CLFdBQU8sR0FHZixRQUFRLENBQUMsRUFBVSxFQUFPLENBQUMsRUFBRyxDQUMxQixHQUFJLE9BQU8sSUFBYSxTQUNwQixFQUFPLEVBQ1AsRUFBVyxPQUtmLEdBSEEsRUFBTyxPQUFPLE9BQU8sQ0FDakIsYUFBYyxFQUNsQixFQUFHLENBQUksRUFDSCxFQUFVLENBQ1YsSUFBTSxFQUFLLEVBQ1gsR0FBdUIsS0FBTSxHQUF3QixJQUFLLEdBQTBCLEVBQUUsS0FBSyxLQUFNLENBQUksRUFBRSxLQUFLLEtBQUssRUFBRyxLQUFNLENBQUMsRUFBRyxDQUFRLEVBQ3RJLE9BRUosT0FBTyxHQUF1QixLQUFNLEdBQXdCLElBQUssR0FBMEIsRUFBRSxLQUFLLEtBQU0sQ0FBSSxPQU8xRyxlQUFjLENBQUMsRUFBUyxDQUUxQixPQURZLElBQUssUUFBUSxDQUFPLE9BRXZCLFFBQVMsQ0FDVixJQUFNLEVBQU0sTUFBTSxJQUFTLEVBQVMsTUFBTSxFQUNwQyxFQUFPLEtBQUssTUFBTSxDQUFHLEVBQ3JCLEVBQWEsRUFBSyxZQUNsQixFQUFjLEVBQUssYUFDekIsSUFBSyxJQUFlLEVBQ2hCLE1BQU0sSUFBSSxHQUFjLDZDQUE4QyxxQkFBcUIsRUFFL0YsTUFBTyxDQUFFLGFBQVksYUFBWSxDQUNyQyxLQUNLLFdBQ0EsV0FDQSxPQUVELE1BQU8sQ0FBRSxXQURVLE1BQU0sSUFBUyxFQUFTLE1BQU0sQ0FDN0IsTUFFbkIsV0FDQSxPQUNELE1BQU0sSUFBSSxHQUFjLDBJQUNvRSwwQkFBMEIsVUFHdEgsTUFBTSxJQUFJLEdBQWMsNEhBQ21DLDBCQUEwQixHQUdqRyxXQUFXLENBQUMsRUFBVSxDQUNsQixHQUFJLEVBQVUsQ0FDVixHQUF1QixLQUFNLEdBQXdCLElBQUssR0FBNkIsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLElBQU0sRUFBUyxFQUFHLENBQVEsRUFDbkksT0FFSixPQUFPLEdBQXVCLEtBQU0sR0FBd0IsSUFBSyxHQUE2QixFQUFFLEtBQUssSUFBSSxFQUVqSCxDQUNBLEdBQVEsWUFBYyxJQUN0QixHQUErQixJQUFJLFFBQVcsR0FBeUIsSUFBSSxRQUFXLElBQTZCLGVBQWUsQ0FBMEIsQ0FBQyxFQUFNLENBQy9KLEdBQUksR0FBdUIsS0FBTSxHQUE4QixHQUFHLElBQU0sRUFBSyxhQUN6RSxPQUFPLEdBQXVCLEtBQU0sR0FBOEIsR0FBRyxFQUV6RSxHQUFJLENBQ0EsT0FBTyxNQUFPLElBQXVCLEtBQU0sR0FBOEIsR0FBdUIsS0FBTSxHQUF3QixJQUFLLEdBQStCLEVBQUUsS0FBSyxLQUFNLENBQUksRUFBRyxHQUFHLFNBRTdMLENBQ0ksSUFBdUIsS0FBTSxHQUE4QixPQUFXLEdBQUcsSUFFOUUsSUFBa0MsZUFBZSxDQUErQixDQUFDLEVBQU0sQ0FDdEYsR0FBSSxLQUFLLGdCQUFnQixJQUFNLElBQVMsRUFBSyxlQUFpQixHQUMxRCxPQUFPLFFBQVEsUUFBUSxLQUFLLFFBQVEsRUFFeEMsSUFBSyxLQUFLLE1BQVEsS0FBSyxRQUNuQixNQUFNLElBQUksTUFBTSx3QkFBd0IsRUFFNUMsSUFBSyxLQUFLLEtBQU8sS0FBSyxRQUFTLENBQzNCLElBQU0sRUFBUSxNQUFNLEtBQUssZUFBZSxLQUFLLE9BQU8sRUFHcEQsR0FGQSxLQUFLLElBQU0sRUFBTSxXQUNqQixLQUFLLElBQU0sRUFBTSxhQUFlLEtBQUssS0FDaEMsRUFBTSxZQUNQLEdBQXVCLEtBQU0sR0FBd0IsSUFBSyxHQUF3QixFQUFFLEtBQUssSUFBSSxFQUdyRyxPQUFPLEdBQXVCLEtBQU0sR0FBd0IsSUFBSyxHQUF5QixFQUFFLEtBQUssSUFBSSxHQUN0RyxJQUEyQixTQUFTLENBQXdCLEVBQUcsQ0FDOUQsSUFBSyxLQUFLLElBQ04sTUFBTSxJQUFJLEdBQWMscUJBQXNCLHFCQUFxQixHQUV4RSxJQUFnQyxlQUFlLENBQTZCLEVBQUcsQ0FDOUUsSUFBSyxLQUFLLFlBQ04sTUFBTSxJQUFJLE1BQU0scUJBQXFCLEVBRXpDLElBQU0sRUFBTSxJQUEwQixLQUFLLFlBQzNDLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FDM0IsTUFDQSxNQUFPLEVBQ1gsQ0FBQyxFQUNELEdBQXVCLEtBQU0sR0FBd0IsSUFBSyxHQUFzQixFQUFFLEtBQUssS0FBTSxDQUN6RixNQUFPLEtBQUssSUFDWixJQUFLLEtBQUssSUFDVixJQUFLLEtBQUssSUFDVixRQUFTLEtBQUssUUFDZCxNQUFPLEtBQUssTUFDWixpQkFBa0IsS0FBSyxnQkFDM0IsQ0FBQyxHQUNGLElBQXlCLFNBQVMsQ0FBc0IsQ0FBQyxFQUFVLENBQUMsRUFBRyxDQU90RSxHQU5BLEtBQUssUUFBVSxFQUFRLFFBQ3ZCLEtBQUssSUFBTSxFQUFRLElBQ25CLEtBQUssU0FBVyxPQUNoQixLQUFLLElBQU0sRUFBUSxPQUFTLEVBQVEsSUFDcEMsS0FBSyxJQUFNLEVBQVEsSUFDbkIsS0FBSyxpQkFBbUIsRUFBUSxpQkFDNUIsT0FBTyxFQUFRLFFBQVUsU0FDekIsS0FBSyxNQUFRLEVBQVEsTUFBTSxLQUFLLEdBQUcsRUFHbkMsVUFBSyxNQUFRLEVBQVEsTUFHekIsR0FEQSxLQUFLLDRCQUE4QixFQUFRLDRCQUN2QyxFQUFRLFlBQ1IsS0FBSyxZQUFjLEVBQVEsYUFFaEMsSUFJSCxlQUFlLENBQXlCLEVBQUcsQ0FDdkMsSUFBSSxFQUFJLEVBQ1IsSUFBTSxFQUFNLEtBQUssTUFBTSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUksSUFBSSxFQUM1QyxFQUFtQixLQUFLLGtCQUFvQixDQUFDLEVBQzdDLEVBQVUsT0FBTyxPQUFPLENBQzFCLElBQUssS0FBSyxJQUNWLE1BQU8sS0FBSyxNQUNaLElBQUssSUFDTCxJQUFLLEVBQU0sS0FDWCxNQUNBLElBQUssS0FBSyxHQUNkLEVBQUcsQ0FBZ0IsRUFDYixFQUFZLElBQUksS0FBSyxDQUN2QixPQUFRLENBQUUsSUFBSyxPQUFRLEVBQ3ZCLFVBQ0EsT0FBUSxLQUFLLEdBQ2pCLENBQUMsRUFDRCxHQUFJLENBQ0EsSUFBTSxFQUFJLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FDckMsT0FBUSxPQUNSLElBQUssSUFDTCxLQUFNLENBQ0YsV0FBWSw4Q0FDWixVQUFXLENBQ2YsRUFDQSxRQUFTLENBQUUsZUFBZ0IsbUNBQW9DLEVBQy9ELGFBQWMsT0FDZCxZQUFhLENBQ1QsbUJBQW9CLENBQUMsTUFBTSxDQUMvQixDQUNKLENBQUMsRUFNRCxPQUxBLEtBQUssU0FBVyxFQUFFLEtBQ2xCLEtBQUssVUFDRCxFQUFFLEtBQUssYUFBZSxNQUFRLEVBQUUsS0FBSyxhQUFlLE9BQzlDLFFBQ0MsRUFBTSxFQUFFLEtBQUssWUFBYyxLQUMvQixLQUFLLFNBRWhCLE1BQU8sRUFBRyxDQUNOLEtBQUssU0FBVyxPQUNoQixLQUFLLGFBQWUsT0FDcEIsSUFBTSxFQUFPLEVBQUUsWUFBYyxFQUFLLEVBQUUsWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsT0FDL0UsRUFBSyxFQUFFLFlBQWMsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLEtBQzFELENBQUMsRUFDUCxHQUFJLEVBQUssTUFBTyxDQUNaLElBQU0sRUFBTyxFQUFLLGtCQUNaLEtBQUssRUFBSyxvQkFDVixHQUNOLEVBQUUsUUFBVSxHQUFHLEVBQUssUUFBUSxJQUVoQyxNQUFNLHdCQ2xRZCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsY0FBaUIsT0FDekIsSUFBTSxVQUNBLFNBQ0EsSUFBaUIsQ0FDbkIsSUFBSyxRQUNMLElBQUssS0FDVCxFQUNBLE1BQU0sR0FBVSxDQVdaLFdBQVcsQ0FBQyxFQUFPLEVBQUssRUFBTyxFQUE2QixDQUN4RCxLQUFLLE1BQVEsSUFBSSxJQUFPLFNBQVMsQ0FDN0IsU0FBVSxJQUNWLE9BQVEsT0FDWixDQUFDLEVBQ0QsS0FBSyxNQUFRLEVBQ2IsS0FBSyxJQUFNLEVBQ1gsS0FBSyxNQUFRLEVBQ2IsS0FBSyw0QkFDRCxJQUFnQyxNQUFRLElBQXFDLE9BQUksRUFBOEIsT0FTdkgsWUFBWSxDQUFDLEVBQUssRUFBUSxDQUN0QixJQUFJLEVBQVcsRUFDZixHQUFJLEdBQVUsTUFBTSxRQUFRLENBQU0sR0FBSyxFQUFPLE9BQzFDLEVBQVcsRUFBTSxHQUFHLEtBQU8sRUFBTyxLQUFLLEdBQUcsSUFBTSxHQUFHLEVBQU8sS0FBSyxHQUFHLElBRWpFLFFBQUksT0FBTyxJQUFXLFNBQ3ZCLEVBQVcsRUFBTSxHQUFHLEtBQU8sSUFBVyxFQUUxQyxJQUFLLEVBQ0QsTUFBTSxNQUFNLGdDQUFnQyxFQUVoRCxPQUFPLEVBVVgsaUJBQWlCLENBQUMsRUFBSyxFQUFrQixFQUFRLENBRzdDLElBQU0sRUFBTSxLQUFLLGFBQWEsRUFBSyxDQUFNLEVBQ25DLEVBQWMsS0FBSyxNQUFNLElBQUksQ0FBRyxFQUNoQyxFQUFNLEtBQUssSUFBSSxFQUNyQixHQUFJLEdBQ0EsRUFBWSxXQUFhLEVBQU0sS0FBSyw0QkFDcEMsT0FBTyxFQUFZLFFBRXZCLElBQU0sRUFBTSxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUksSUFBSSxFQUNsQyxFQUFNLElBQVUsa0JBQWtCLENBQUcsRUFDdkMsRUFFSixHQUFJLE1BQU0sUUFBUSxDQUFNLEVBQ3BCLEVBQVMsRUFBTyxLQUFLLEdBQUcsRUFHNUIsR0FBSSxFQUNBLEVBQWdCLENBQ1osSUFBSyxLQUFLLE1BQ1YsSUFBSyxLQUFLLE1BQ1YsTUFBTyxFQUNQLE1BQ0EsS0FDSixFQUdBLE9BQWdCLENBQ1osSUFBSyxLQUFLLE1BQ1YsSUFBSyxLQUFLLE1BQ1YsSUFBSyxFQUNMLE1BQ0EsS0FDSixFQUlKLEdBQUksR0FDQSxRQUFXLEtBQVMsRUFDaEIsR0FBSSxFQUFpQixHQUNqQixNQUFNLElBQUksTUFBTSxRQUFRLHlHQUE2RyxFQUlqSixJQUFNLEVBQVMsS0FBSyxNQUNkLElBQUssSUFBZ0IsSUFBSyxLQUFLLEtBQU0sRUFDckMsSUFDQSxFQUFVLE9BQU8sT0FBTyxFQUFlLENBQWdCLEVBR3ZELEVBQVUsQ0FBRSxjQUFlLFVBRGYsSUFBSSxLQUFLLENBQUUsU0FBUSxVQUFTLE9BQVEsS0FBSyxHQUFJLENBQUMsR0FDVCxFQUt2RCxPQUpBLEtBQUssTUFBTSxJQUFJLEVBQUssQ0FDaEIsV0FBWSxFQUFNLEtBQ2xCLFNBQ0osQ0FBQyxFQUNNLFFBUUosa0JBQWlCLENBQUMsRUFBSyxDQUUxQixPQURZLEVBQU0sS0FPdEIsUUFBUSxDQUFDLEVBQU0sQ0FDWCxJQUFLLEVBQ0QsTUFBTSxJQUFJLE1BQU0sMEVBQTBFLEVBRTlGLElBQUssRUFBSyxhQUNOLE1BQU0sSUFBSSxNQUFNLGdFQUFnRSxFQUVwRixJQUFLLEVBQUssWUFDTixNQUFNLElBQUksTUFBTSwrREFBK0QsRUFHbkYsS0FBSyxNQUFRLEVBQUssYUFDbEIsS0FBSyxJQUFNLEVBQUssWUFDaEIsS0FBSyxNQUFRLEVBQUssZUFDbEIsS0FBSyxVQUFZLEVBQUssV0FFMUIsVUFBVSxDQUFDLEVBQWEsRUFBVSxDQUM5QixHQUFJLEVBQ0EsS0FBSyxnQkFBZ0IsQ0FBVyxFQUFFLEtBQUssSUFBTSxFQUFTLEVBQUcsQ0FBUSxFQUdqRSxZQUFPLEtBQUssZ0JBQWdCLENBQVcsRUFHL0MsZUFBZSxDQUFDLEVBQWEsQ0FDekIsT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFTLElBQVcsQ0FDcEMsSUFBSyxFQUNELEVBQU8sSUFBSSxNQUFNLHFFQUFxRSxDQUFDLEVBRTNGLElBQUksRUFBSSxHQUNSLEVBQ0ssWUFBWSxNQUFNLEVBQ2xCLEdBQUcsT0FBUSxLQUFVLEdBQUssQ0FBTSxFQUNoQyxHQUFHLFFBQVMsQ0FBTSxFQUNsQixHQUFHLE1BQU8sSUFBTSxDQUNqQixHQUFJLENBQ0EsSUFBTSxFQUFPLEtBQUssTUFBTSxDQUFDLEVBQ3pCLEtBQUssU0FBUyxDQUFJLEVBQ2xCLEVBQVEsRUFFWixNQUFPLEVBQUssQ0FDUixFQUFPLENBQUcsR0FFakIsRUFDSixFQUVULENBQ1EsY0FBWSx3QkNqTHBCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxRQUFXLE9BQ25CLElBQU0sVUFDQSxVQUNBLFNBQ0EsUUFDTixNQUFNLFlBQVksSUFBZSxZQUFhLENBQzFDLFdBQVcsQ0FBQyxFQUFnQixFQUFTLEVBQUssRUFBUSxFQUFTLEVBQU8sQ0FDOUQsSUFBTSxFQUFPLEdBQWtCLE9BQU8sSUFBbUIsU0FDbkQsRUFDQSxDQUFFLE1BQU8sRUFBZ0IsVUFBUyxNQUFLLFFBQU8sU0FBUSxTQUFRLEVBQ3BFLE1BQU0sQ0FBSSxFQUNWLEtBQUssTUFBUSxFQUFLLE1BQ2xCLEtBQUssUUFBVSxFQUFLLFFBQ3BCLEtBQUssSUFBTSxFQUFLLElBQ2hCLEtBQUssTUFBUSxFQUFLLE1BQ2xCLEtBQUssT0FBUyxFQUFLLE9BQ25CLEtBQUssUUFBVSxFQUFLLFFBQ3BCLEtBQUssaUJBQW1CLEVBQUssaUJBRzdCLEtBQUssWUFBYyxDQUFFLGNBQWUsa0JBQW1CLFlBQWEsQ0FBRSxFQU8xRSxZQUFZLENBQUMsRUFBUSxDQUNqQixJQUFNLEVBQU0sSUFBSSxJQUFJLElBQUksRUFFeEIsT0FEQSxFQUFJLE9BQVMsRUFDTixPQU9MLHdCQUF1QixDQUFDLEVBQUssQ0FDL0IsRUFBTSxLQUFLLG1CQUFxQixXQUFXLEtBQUssc0JBQXdCLEVBQ3hFLElBQU0sR0FBcUIsS0FBSyxjQUFjLEdBQUssR0FDOUMsS0FBSyx1QkFBeUIsS0FBSyxhQUFhLEdBQ2pELEtBQUssaUJBQW1CLEdBQWEsaUJBQ3pDLEdBQUksS0FBSyxTQUFXLEtBQUssaUJBQW1CLEdBQWEsaUJBQ3JELE1BQU0sSUFBSSxXQUFXLDBIQUEwSCxHQUFhLGtCQUFrQixFQUVsTCxJQUFLLEtBQUssUUFBVSxFQUNoQixHQUFJLEtBQUssa0JBQ0wsS0FBSyxpQkFBaUIsZ0JBQWlCLENBQ3ZDLElBQVEsVUFBVyxNQUFNLEtBQUssYUFBYSxFQUMzQyxNQUFPLENBQ0gsUUFBUyxLQUFLLHlCQUF5QixDQUNuQyxjQUFlLFVBQVUsRUFBTyxVQUNwQyxDQUFDLENBQ0wsRUFFQyxLQUdELElBQUssS0FBSyxPQUNOLEtBQUssT0FBUyxJQUFJLElBQVksVUFBVSxLQUFLLE1BQU8sS0FBSyxJQUFLLEtBQUssTUFBTyxLQUFLLDJCQUEyQixFQUU5RyxJQUFJLEVBQ0osR0FBSSxLQUFLLGNBQWMsRUFDbkIsRUFBUyxLQUFLLE9BRWIsU0FBSyxFQUNOLEVBQVMsS0FBSyxjQUVsQixJQUFNLEVBQVksS0FBSyx1QkFDbkIsS0FBSyxpQkFBbUIsR0FBYSxpQkFDbkMsRUFBVSxNQUFNLEtBQUssT0FBTyxrQkFBa0IsSUFBUSxNQUFRLElBQWEsT0FBSSxFQUFNLE9BQVcsS0FBSyxpQkFJM0csRUFBWSxFQUFTLE1BQVMsRUFDOUIsTUFBTyxDQUFFLFFBQVMsS0FBSyx5QkFBeUIsQ0FBTyxDQUFFLEVBRzVELFFBQUksS0FBSyxhQUFhLEdBQUssS0FBSyxPQUNqQyxPQUFPLE1BQU0sd0JBQXdCLENBQUcsRUFLeEMsV0FBTyxDQUFFLFFBQVMsQ0FBQyxDQUFFLE9BT3ZCLGFBQVksQ0FBQyxFQUFnQixDQUUvQixJQUFNLEVBQVMsSUFBSSxJQUFTLFlBQVksQ0FDcEMsSUFBSyxLQUFLLE1BQ1YsSUFBSyxLQUFLLFFBQ1YsTUFBTyxLQUFLLFFBQVUsS0FBSyxjQUMzQixRQUFTLEtBQUssUUFDZCxJQUFLLEtBQUssSUFDVixpQkFBa0IsQ0FBRSxnQkFBaUIsQ0FBZSxFQUNwRCxZQUFhLEtBQUssV0FDdEIsQ0FBQyxFQUlELEdBSEEsTUFBTSxFQUFPLFNBQVMsQ0FDbEIsYUFBYyxFQUNsQixDQUFDLEdBQ0ksRUFBTyxRQUNSLE1BQU0sSUFBSSxNQUFNLHlDQUF5QyxFQUU3RCxPQUFPLEVBQU8sUUFLbEIsYUFBYSxFQUFHLENBQ1osSUFBSyxLQUFLLE9BQ04sTUFBTyxHQUVYLE9BQU8sS0FBSyxPQUFPLE9BQVMsRUFLaEMsWUFBWSxFQUFHLENBQ1gsR0FBSSxLQUFLLFFBQVUsS0FBSyxPQUFPLE9BQVMsRUFDcEMsTUFBTyxHQUNYLEdBQUksS0FBSyxlQUFpQixLQUFLLGNBQWMsT0FBUyxFQUNsRCxNQUFPLEdBQ1gsTUFBTyxHQUVYLFNBQVMsQ0FBQyxFQUFVLENBQ2hCLEdBQUksRUFDQSxLQUFLLGVBQWUsRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLENBQUMsRUFBRyxDQUFRLEVBRzNELFlBQU8sS0FBSyxlQUFlLE9BRzdCLGVBQWMsRUFBRyxDQUNuQixJQUFNLEVBQVMsTUFBTSxLQUFLLGFBQWEsRUFDdkMsSUFBSyxFQUNELE1BQU0sSUFBSSxNQUFNLG9CQUFvQixFQU14QyxPQUpBLEtBQUssWUFBYyxFQUFPLE9BQzFCLEtBQUssWUFBWSxjQUFnQixrQkFDakMsS0FBSyxJQUFNLEtBQUssT0FBTyxJQUN2QixLQUFLLE1BQVEsS0FBSyxPQUFPLElBQ2xCLEVBQU8sWUFPWixvQkFBbUIsQ0FFekIsRUFBYyxDQUNWLElBQU0sRUFBUyxLQUFLLGFBQWEsRUFJM0IsRUFBUyxDQUNYLGNBSlUsTUFBTSxFQUFPLFNBQVMsQ0FDaEMsYUFBYyxLQUFLLGdCQUFnQixDQUN2QyxDQUFDLEdBRXVCLGFBQ3BCLFdBQVksU0FDWixZQUFhLEVBQU8sVUFDcEIsU0FBVSxFQUFPLE9BQ3JCLEVBRUEsT0FEQSxLQUFLLEtBQUssU0FBVSxDQUFNLEVBQ25CLENBQUUsSUFBSyxLQUFNLFFBQU8sRUFLL0IsWUFBWSxFQUFHLENBQ1gsSUFBSyxLQUFLLE9BQ04sS0FBSyxPQUFTLElBQUksSUFBUyxZQUFZLENBQ25DLElBQUssS0FBSyxNQUNWLElBQUssS0FBSyxRQUNWLE1BQU8sS0FBSyxRQUFVLEtBQUssY0FDM0IsUUFBUyxLQUFLLFFBQ2QsSUFBSyxLQUFLLElBQ1YsaUJBQWtCLEtBQUssaUJBQ3ZCLFlBQWEsS0FBSyxXQUN0QixDQUFDLEVBRUwsT0FBTyxLQUFLLE9BVWhCLFFBQVEsQ0FBQyxFQUFNLENBQ1gsSUFBSyxFQUNELE1BQU0sSUFBSSxNQUFNLDBFQUEwRSxFQUU5RixJQUFLLEVBQUssYUFDTixNQUFNLElBQUksTUFBTSxnRUFBZ0UsRUFFcEYsSUFBSyxFQUFLLFlBQ04sTUFBTSxJQUFJLE1BQU0sK0RBQStELEVBR25GLEtBQUssTUFBUSxFQUFLLGFBQ2xCLEtBQUssSUFBTSxFQUFLLFlBQ2hCLEtBQUssTUFBUSxFQUFLLGVBQ2xCLEtBQUssVUFBWSxFQUFLLFdBQ3RCLEtBQUssZUFBaUIsRUFBSyxpQkFDM0IsS0FBSyxlQUFpQixFQUFLLGlCQUFtQixLQUFLLGVBRXZELFVBQVUsQ0FBQyxFQUFhLEVBQVUsQ0FDOUIsR0FBSSxFQUNBLEtBQUssZ0JBQWdCLENBQVcsRUFBRSxLQUFLLElBQU0sRUFBUyxFQUFHLENBQVEsRUFHakUsWUFBTyxLQUFLLGdCQUFnQixDQUFXLEVBRy9DLGVBQWUsQ0FBQyxFQUFhLENBQ3pCLE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBUyxJQUFXLENBQ3BDLElBQUssRUFDRCxNQUFNLElBQUksTUFBTSxxRUFBcUUsRUFFekYsSUFBSSxFQUFJLEdBQ1IsRUFDSyxZQUFZLE1BQU0sRUFDbEIsR0FBRyxRQUFTLENBQU0sRUFDbEIsR0FBRyxPQUFRLEtBQVUsR0FBSyxDQUFNLEVBQ2hDLEdBQUcsTUFBTyxJQUFNLENBQ2pCLEdBQUksQ0FDQSxJQUFNLEVBQU8sS0FBSyxNQUFNLENBQUMsRUFDekIsS0FBSyxTQUFTLENBQUksRUFDbEIsRUFBUSxFQUVaLE1BQU8sRUFBRyxDQUNOLEVBQU8sQ0FBQyxHQUVmLEVBQ0osRUFNTCxVQUFVLENBQUMsRUFBUSxDQUNmLEdBQUksT0FBTyxJQUFXLFNBQ2xCLE1BQU0sSUFBSSxNQUFNLGlDQUFpQyxFQUVyRCxLQUFLLE9BQVMsT0FNWixlQUFjLEVBQUcsQ0FDbkIsR0FBSSxLQUFLLElBQ0wsTUFBTyxDQUFFLFlBQWEsS0FBSyxJQUFLLGFBQWMsS0FBSyxLQUFNLEVBRXhELFFBQUksS0FBSyxRQUFTLENBRW5CLElBQU0sRUFBUSxNQURDLEtBQUssYUFBYSxFQUNOLGVBQWUsS0FBSyxPQUFPLEVBQ3RELE1BQU8sQ0FBRSxZQUFhLEVBQU0sV0FBWSxhQUFjLEVBQU0sV0FBWSxFQUU1RSxNQUFNLElBQUksTUFBTSx3REFBd0QsRUFFaEYsQ0FDUSxRQUFNLHdCQzdRZCxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTRCLDhCQUFpQyxPQUNyRSxJQUFNLFNBQ0Esc0JBQ0UsOEJBQTRCLGtCQUNwQyxNQUFNLFdBQTBCLElBQWUsWUFBYSxDQUN4RCxXQUFXLENBQUMsRUFBbUIsRUFBYyxFQUFjLEVBQTZCLEVBQXVCLENBQzNHLElBQU0sRUFBTyxHQUFxQixPQUFPLElBQXNCLFNBQ3pELEVBQ0EsQ0FDRSxTQUFVLEVBQ1YsZUFDQSxlQUNBLDhCQUNBLHVCQUNKLEVBQ0osTUFBTSxDQUFJLEVBQ1YsS0FBSyxjQUFnQixFQUFLLGFBQzFCLEtBQUssWUFBWSxjQUFnQixFQUFLLGtCQU9wQyxvQkFBbUIsQ0FFekIsRUFBYyxDQUNWLE9BQU8sTUFBTSxvQkFBb0IsS0FBSyxhQUFhLE9BRWpELGFBQVksQ0FBQyxFQUFnQixDQWdCL0IsT0FmWSxNQUFNLEtBQUssWUFBWSxRQUFRLElBQ3BDLEdBQWtCLGFBQ3JCLElBQUssS0FBSyxVQUFVLGVBQ3BCLFFBQVMsQ0FDTCxlQUFnQixtQ0FDcEIsRUFDQSxPQUFRLE9BQ1IsS0FBVSxJQUFjLFVBQVcsQ0FDL0IsVUFBVyxLQUFLLFVBQ2hCLGNBQWUsS0FBSyxjQUNwQixXQUFZLGdCQUNaLGNBQWUsS0FBSyxjQUNwQixnQkFBaUIsQ0FDckIsQ0FBQyxDQUNMLENBQUMsR0FDVSxLQUFLLFNBT3BCLFFBQVEsQ0FBQyxFQUFNLENBQ1gsSUFBSyxFQUNELE1BQU0sSUFBSSxNQUFNLDhEQUE4RCxFQUVsRixHQUFJLEVBQUssT0FBUyxrQkFDZCxNQUFNLElBQUksTUFBTSxtRUFBbUUsRUFFdkYsSUFBSyxFQUFLLFVBQ04sTUFBTSxJQUFJLE1BQU0sNkRBQTZELEVBRWpGLElBQUssRUFBSyxjQUNOLE1BQU0sSUFBSSxNQUFNLGlFQUFpRSxFQUVyRixJQUFLLEVBQUssY0FDTixNQUFNLElBQUksTUFBTSxpRUFBaUUsRUFFckYsS0FBSyxVQUFZLEVBQUssVUFDdEIsS0FBSyxjQUFnQixFQUFLLGNBQzFCLEtBQUssY0FBZ0IsRUFBSyxjQUMxQixLQUFLLFlBQVksY0FBZ0IsRUFBSyxjQUN0QyxLQUFLLGVBQWlCLEVBQUssaUJBQzNCLEtBQUssZUFBaUIsRUFBSyxpQkFBbUIsS0FBSyxlQUV2RCxVQUFVLENBQUMsRUFBYSxFQUFVLENBQzlCLEdBQUksRUFDQSxLQUFLLGdCQUFnQixDQUFXLEVBQUUsS0FBSyxJQUFNLEVBQVMsRUFBRyxDQUFRLEVBR2pFLFlBQU8sS0FBSyxnQkFBZ0IsQ0FBVyxPQUd6QyxnQkFBZSxDQUFDLEVBQWEsQ0FDL0IsT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFTLElBQVcsQ0FDcEMsSUFBSyxFQUNELE9BQU8sRUFBTyxJQUFJLE1BQU0sMERBQTBELENBQUMsRUFFdkYsSUFBSSxFQUFJLEdBQ1IsRUFDSyxZQUFZLE1BQU0sRUFDbEIsR0FBRyxRQUFTLENBQU0sRUFDbEIsR0FBRyxPQUFRLEtBQVUsR0FBSyxDQUFNLEVBQ2hDLEdBQUcsTUFBTyxJQUFNLENBQ2pCLEdBQUksQ0FDQSxJQUFNLEVBQU8sS0FBSyxNQUFNLENBQUMsRUFFekIsT0FEQSxLQUFLLFNBQVMsQ0FBSSxFQUNYLEVBQVEsRUFFbkIsTUFBTyxFQUFLLENBQ1IsT0FBTyxFQUFPLENBQUcsR0FFeEIsRUFDSixRQU9FLFNBQVEsQ0FBQyxFQUFNLENBQ2xCLElBQU0sRUFBUyxJQUFJLEdBRW5CLE9BREEsRUFBTyxTQUFTLENBQUksRUFDYixFQUVmLENBQ1Esc0JBQW9CLHVCQ25INUIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGlCQUF1Qiw4QkFBaUMsT0FDaEUsSUFBTSxTQUNBLFNBQ0EsU0FDRSw4QkFBNEIsK0JBQ3BDLE1BQU0sV0FBcUIsSUFBZSxZQUFhLENBaUNuRCxXQUFXLENBQUMsRUFBVSxDQUFDLEVBQUcsQ0FDdEIsSUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFDeEIsTUFBTSxDQUFPLEVBYWIsR0FWQSxLQUFLLFlBQWMsQ0FDZixZQUFhLEVBQ2IsY0FBZSwwQkFDbkIsRUFDQSxLQUFLLGNBQWdCLEVBQUssRUFBUSxnQkFBa0IsTUFBUSxJQUFZLE9BQUksRUFBSyxJQUFJLElBQWUsYUFDcEcsS0FBSyxpQkFBbUIsRUFBSyxFQUFRLG1CQUFxQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3ZGLEtBQUssV0FBYSxFQUFLLEVBQVEsYUFBZSxNQUFRLElBQVksT0FBSSxFQUFLLENBQUMsRUFDNUUsS0FBSyxjQUFnQixFQUFLLEVBQVEsZ0JBQWtCLE1BQVEsSUFBWSxPQUFJLEVBQUssQ0FBQyxFQUNsRixLQUFLLFVBQVksRUFBSyxFQUFRLFlBQWMsTUFBUSxJQUFZLE9BQUksRUFBSyxNQUMvQixJQUFPLHVCQUF3QixDQUFPLEVBQUUsSUFBSSxpQkFBaUIsRUFHbkcsS0FBSyxlQUFpQixLQUFLLGFBQWEsZUFFdkMsUUFBSSxLQUFLLGFBQWEsaUJBQW1CLEtBQUssZUFFL0MsTUFBTSxJQUFJLFdBQVcsbUJBQW1CLEtBQUssYUFBYSx1REFBdUQsS0FBSyxrRUFBa0UsRUFFNUwsS0FBSyxVQUNBLEVBQUssRUFBUSxZQUFjLE1BQVEsSUFBWSxPQUFJLEVBQUssMEJBQTBCLEtBQUssc0JBVTFGLEtBQUksQ0FBQyxFQUFZLENBQ25CLE1BQU0sS0FBSyxhQUFhLGVBQWUsRUFDdkMsSUFBTSxFQUFPLDhCQUE4QixLQUFLLGtCQUMxQyxFQUFJLEdBQUcsS0FBSyxlQUFlLGFBQzNCLEVBQU8sQ0FDVCxVQUFXLEtBQUssVUFDaEIsUUFBUyxPQUFPLEtBQUssQ0FBVSxFQUFFLFNBQVMsUUFBUSxDQUN0RCxFQU9BLE9BTlksTUFBTSxLQUFLLGFBQWEsUUFBUSxJQUNyQyxHQUFhLGFBQ2hCLElBQUssRUFDTCxLQUFNLEVBQ04sT0FBUSxNQUNaLENBQUMsR0FDVSxLQUdmLGtCQUFrQixFQUFHLENBQ2pCLE9BQU8sS0FBSyxxQkFLVixhQUFZLEVBQUcsQ0FDakIsSUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFDeEIsR0FBSSxDQUNBLE1BQU0sS0FBSyxhQUFhLGVBQWUsRUFDdkMsSUFBTSxFQUFPLDhCQUFnQyxLQUFLLGdCQUM1QyxFQUFJLEdBQUcsS0FBSyxlQUFlLHdCQUMzQixFQUFPLENBQ1QsVUFBVyxLQUFLLFVBQ2hCLE1BQU8sS0FBSyxhQUNaLFNBQVUsS0FBSyxTQUFXLEdBQzlCLEVBQ00sRUFBTSxNQUFNLEtBQUssYUFBYSxRQUFRLElBQ3JDLEdBQWEsYUFDaEIsSUFBSyxFQUNMLEtBQU0sRUFDTixPQUFRLE1BQ1osQ0FBQyxFQUNLLEVBQWdCLEVBQUksS0FHMUIsT0FGQSxLQUFLLFlBQVksYUFBZSxFQUFjLFlBQzlDLEtBQUssWUFBWSxZQUFjLEtBQUssTUFBTSxFQUFjLFVBQVUsRUFDM0QsQ0FDSCxPQUFRLEtBQUssWUFDYixLQUNKLEVBRUosTUFBTyxFQUFPLENBQ1YsS0FBTSxhQUFpQixPQUNuQixNQUFNLEVBQ1YsSUFBSSxFQUFTLEVBQ1QsRUFBVSxHQUNkLEdBQUksYUFBaUIsSUFBUyxZQUMxQixHQUFVLEdBQU0sR0FBTSxFQUFLLElBQVUsTUFBUSxJQUFlLE9BQVMsT0FBSSxFQUFNLFlBQWMsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFFBQVUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFNBQVcsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLE9BQzlOLEdBQVcsR0FBTSxHQUFNLEVBQUssSUFBVSxNQUFRLElBQWUsT0FBUyxPQUFJLEVBQU0sWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsUUFBVSxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsU0FBVyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsUUFFbk8sR0FBSSxHQUFVLEVBRVYsTUFEQSxFQUFNLFFBQVUsR0FBRyw2QkFBa0MsSUFDL0MsRUFJTixXQURBLEVBQU0sUUFBVSwwQkFBMEIsSUFDcEMsUUFhWixhQUFZLENBQUMsRUFBZ0IsRUFBUyxDQUN4QyxJQUFJLEVBQUksRUFDUixNQUFNLEtBQUssYUFBYSxlQUFlLEVBQ3ZDLElBQU0sRUFBTyw4QkFBOEIsS0FBSyxrQkFDMUMsRUFBSSxHQUFHLEtBQUssZUFBZSxvQkFDM0IsRUFBTyxDQUNULFVBQVcsS0FBSyxVQUNoQixTQUFVLEVBQ1YsY0FBZSxFQUFLLElBQVksTUFBUSxJQUFpQixPQUFTLE9BQUksRUFBUSxnQkFBa0IsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUM3SCxhQUFjLEVBQUssSUFBWSxNQUFRLElBQWlCLE9BQVMsT0FBSSxFQUFRLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLEVBQ2hJLEVBT0EsT0FOWSxNQUFNLEtBQUssYUFBYSxRQUFRLElBQ3JDLEdBQWEsYUFDaEIsSUFBSyxFQUNMLEtBQU0sRUFDTixPQUFRLE1BQ1osQ0FBQyxHQUNVLEtBQUssTUFFeEIsQ0FDUSxpQkFBZSx1QkMzS3ZCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCwyQkFBOEIsT0FDOUIsbUNBQWlDLElBQ3pDLElBQU0sc0JBQ0EsU0FFQSxJQUFrQyxDQUFDLE1BQU8sT0FBUSxPQUFPLEVBUS9ELE1BQU0sR0FBdUIsQ0FLekIsV0FBVyxDQUFDLEVBQXNCLENBQzlCLEtBQUsscUJBQXVCLEVBQzVCLEtBQUssT0FBYSxJQUFTLGFBQWMsRUFVN0MsZ0NBQWdDLENBQUMsRUFBTSxFQUFhLENBSWhELEdBRkEsS0FBSywyQkFBMkIsRUFBTSxDQUFXLEdBRTVDLEVBQ0QsS0FBSywrQkFBK0IsQ0FBSSxFQVloRCwwQkFBMEIsQ0FBQyxFQUFNLEVBQWEsQ0FDMUMsSUFBSSxFQUVKLEdBQUksRUFDQSxFQUFLLFFBQVUsRUFBSyxTQUFXLENBQUMsRUFDaEMsT0FBTyxPQUFPLEVBQUssUUFBUyxDQUN4QixjQUFlLFVBQVUsSUFDN0IsQ0FBQyxFQUVBLFVBQU0sRUFBSyxLQUFLLHdCQUEwQixNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsMEJBQTRCLFFBQVMsQ0FDcEgsRUFBSyxRQUFVLEVBQUssU0FBVyxDQUFDLEVBQ2hDLElBQU0sRUFBVyxLQUFLLHFCQUFxQixTQUNyQyxFQUFlLEtBQUsscUJBQXFCLGNBQWdCLEdBQ3pELEVBQXFCLEtBQUssT0FBTyx1QkFBdUIsR0FBRyxLQUFZLEdBQWMsRUFDM0YsT0FBTyxPQUFPLEVBQUssUUFBUyxDQUN4QixjQUFlLFNBQVMsR0FDNUIsQ0FBQyxHQVVULDhCQUE4QixDQUFDLEVBQU0sQ0FDakMsSUFBSSxFQUNKLEtBQU0sRUFBSyxLQUFLLHdCQUEwQixNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsMEJBQTRCLGVBQWdCLENBQ3RILElBQU0sR0FBVSxFQUFLLFFBQVUsT0FBTyxZQUFZLEVBRWxELEdBQUksSUFBZ0MsUUFBUSxDQUFNLElBQU0sR0FBSSxDQUV4RCxJQUFJLEVBQ0UsRUFBVSxFQUFLLFNBQVcsQ0FBQyxFQUNqQyxRQUFXLEtBQU8sRUFDZCxHQUFJLEVBQUksWUFBWSxJQUFNLGdCQUFrQixFQUFRLEdBQU0sQ0FDdEQsRUFBYyxFQUFRLEdBQUssWUFBWSxFQUN2QyxNQUdSLEdBQUksSUFBZ0Isb0NBQXFDLENBQ3JELEVBQUssS0FBTyxFQUFLLE1BQVEsR0FDekIsSUFBTSxFQUFPLElBQVksTUFBTSxFQUFLLElBQUksRUFDeEMsT0FBTyxPQUFPLEVBQU0sQ0FDaEIsVUFBVyxLQUFLLHFCQUFxQixTQUNyQyxjQUFlLEtBQUsscUJBQXFCLGNBQWdCLEVBQzdELENBQUMsRUFDRCxFQUFLLEtBQU8sSUFBWSxVQUFVLENBQUksRUFFckMsUUFBSSxJQUFnQixtQkFDckIsRUFBSyxLQUFPLEVBQUssTUFBUSxDQUFDLEVBQzFCLE9BQU8sT0FBTyxFQUFLLEtBQU0sQ0FDckIsVUFBVyxLQUFLLHFCQUFxQixTQUNyQyxjQUFlLEtBQUsscUJBQXFCLGNBQWdCLEVBQzdELENBQUMsRUFHRCxXQUFNLElBQUksTUFBTSxHQUFHLDBDQUNaLEtBQUsscUJBQXFCLDhDQUNOLEVBSS9CLFdBQU0sSUFBSSxNQUFNLEdBQUcsa0NBQ1osS0FBSyxxQkFBcUIsOENBQ04sYUFhNUIsYUFBWSxFQUFHLENBQ3RCLE1BQU8sQ0FDSCxNQUFPLEdBQ1AsWUFBYSxDQUNULG1CQUFvQixDQUFDLE1BQU8sTUFBTyxPQUFRLE9BQVEsVUFBVyxRQUFRLENBQzFFLENBQ0osRUFFUixDQUNRLDJCQUF5QixJQVFqQyxTQUFTLEdBQThCLENBQUMsRUFBTSxFQUFLLENBRS9DLElBQXVCLE1BQWpCLEVBQ3dCLGtCQUF4QixFQUNnQixVQUFoQixHQURtQixFQUVyQixFQUFVLGNBQWMsSUFDNUIsR0FBSSxPQUFPLElBQXFCLFlBQzVCLEdBQVcsS0FBSyxJQUVwQixHQUFJLE9BQU8sSUFBYSxZQUNwQixHQUFXLE1BQU0sSUFFckIsSUFBTSxFQUFXLElBQUksTUFBTSxDQUFPLEVBRWxDLEdBQUksRUFBSyxDQUNMLElBQU0sRUFBTyxPQUFPLEtBQUssQ0FBRyxFQUM1QixHQUFJLEVBQUksTUFFSixFQUFLLEtBQUssT0FBTyxFQUVyQixFQUFLLFFBQVEsS0FBTyxDQUVoQixHQUFJLElBQVEsVUFDUixPQUFPLGVBQWUsRUFBVSxFQUFLLENBRWpDLE1BQU8sRUFBSSxHQUNYLFNBQVUsR0FDVixXQUFZLEVBQ2hCLENBQUMsRUFFUixFQUVMLE9BQU8sdUJDaExYLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxtQkFBc0IsT0FDOUIsSUFBTSxTQUNBLHNCQUNBLFNBQ0EsVUFLTixNQUFNLFlBQXVCLElBQWUsc0JBQXVCLENBTy9ELFdBQVcsQ0FBQyxFQUF1QixFQUFzQixDQUNyRCxNQUFNLENBQW9CLEVBQzFCLEtBQUssc0JBQXdCLEVBQzdCLEtBQUssWUFBYyxJQUFJLElBQWUsd0JBZXBDLGNBQWEsQ0FBQyxFQUF1QixFQUUzQyxFQUFTLENBQ0wsSUFBSSxFQUFJLEVBQUksRUFDWixJQUFNLEVBQVMsQ0FDWCxXQUFZLEVBQXNCLFVBQ2xDLFNBQVUsRUFBc0IsU0FDaEMsU0FBVSxFQUFzQixTQUNoQyxPQUFRLEVBQUssRUFBc0IsU0FBVyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsS0FBSyxHQUFHLEVBQzFGLHFCQUFzQixFQUFzQixtQkFDNUMsY0FBZSxFQUFzQixhQUNyQyxtQkFBb0IsRUFBc0IsaUJBQzFDLGFBQWMsRUFBSyxFQUFzQixlQUFpQixNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsV0FDOUYsa0JBQW1CLEVBQUssRUFBc0IsZUFBaUIsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLGVBRW5HLFFBQVMsR0FBVyxLQUFLLFVBQVUsQ0FBTyxDQUM5QyxFQUVBLE9BQU8sS0FBSyxDQUFNLEVBQUUsUUFBUSxLQUFPLENBRS9CLEdBQUksT0FBTyxFQUFPLEtBQVMsWUFFdkIsT0FBTyxFQUFPLEdBRXJCLEVBQ0QsSUFBTSxFQUFVLENBQ1osZUFBZ0IsbUNBQ3BCLEVBRUEsT0FBTyxPQUFPLEVBQVMsR0FBcUIsQ0FBQyxDQUFDLEVBQzlDLElBQU0sRUFBTyxJQUNOLElBQWUsYUFDbEIsSUFBSyxLQUFLLHNCQUFzQixTQUFTLEVBQ3pDLE9BQVEsT0FDUixVQUNBLEtBQU0sSUFBWSxVQUFVLENBQU0sRUFDbEMsYUFBYyxNQUNsQixFQUVBLEtBQUssaUNBQWlDLENBQUksRUFDMUMsR0FBSSxDQUNBLElBQU0sRUFBVyxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUksRUFFOUMsRUFBd0IsRUFBUyxLQUV2QyxPQURBLEVBQXNCLElBQU0sRUFDckIsRUFFWCxNQUFPLEVBQU8sQ0FFVixHQUFJLGFBQWlCLElBQVMsYUFBZSxFQUFNLFNBQy9DLE1BQVUsSUFBZSwrQkFBZ0MsRUFBTSxTQUFTLEtBRXhFLENBQUssRUFHVCxNQUFNLEdBR2xCLENBQ1EsbUJBQWlCLHNCQzlGekIsSUFBSSxJQUEwQixJQUFRLEdBQUssd0JBQTJCLFFBQVMsQ0FBQyxFQUFVLEVBQU8sRUFBTSxFQUFHLENBQ3RHLEdBQUksSUFBUyxNQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsK0NBQStDLEVBQzNGLEdBQUksT0FBTyxJQUFVLFdBQWEsSUFBYSxJQUFVLEdBQUssRUFBTSxJQUFJLENBQVEsRUFBRyxNQUFNLElBQUksVUFBVSwwRUFBMEUsRUFDakwsT0FBTyxJQUFTLElBQU0sRUFBSSxJQUFTLElBQU0sRUFBRSxLQUFLLENBQVEsRUFBSSxFQUFJLEVBQUUsTUFBUSxFQUFNLElBQUksQ0FBUSxHQUU1RixJQUEwQixJQUFRLEdBQUssd0JBQTJCLFFBQVMsQ0FBQyxFQUFVLEVBQU8sRUFBTyxFQUFNLEVBQUcsQ0FDN0csR0FBSSxJQUFTLElBQUssTUFBTSxJQUFJLFVBQVUsZ0NBQWdDLEVBQ3RFLEdBQUksSUFBUyxNQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsK0NBQStDLEVBQzNGLEdBQUksT0FBTyxJQUFVLFdBQWEsSUFBYSxJQUFVLEdBQUssRUFBTSxJQUFJLENBQVEsRUFBRyxNQUFNLElBQUksVUFBVSx5RUFBeUUsRUFDaEwsT0FBUSxJQUFTLElBQU0sRUFBRSxLQUFLLEVBQVUsQ0FBSyxFQUFJLEVBQUksRUFBRSxNQUFRLEVBQVEsRUFBTSxJQUFJLEVBQVUsQ0FBSyxFQUFJLEdBRXBHLElBQXNDLEdBQStDLElBQ3pGLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLDBCQUE0QixHQUFRLGlCQUFtQixHQUFRLHVCQUF5QixHQUFRLHNCQUF3QixHQUFRLHVCQUE4QixPQUN0SyxJQUFNLGlCQUNBLFNBQ0EsVUFDQSxTQUlBLElBQWlCLGtEQUlqQixJQUF5QixnREFFekIsSUFBc0IsaURBRXRCLElBQXlCLEtBSS9CLEdBQVEsdUJBQXlCLE9BUWpDLEdBQVEsc0JBQXdCLG1CQU1oQyxHQUFRLHVCQUF5QiwyREFFakMsSUFBTSxJQUE2Qiw2RUFDN0IsSUFBb0Isd0NBRXBCLFVBSUYsU0FDSixPQUFPLGVBQWUsR0FBUyxtQkFBb0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWEsaUJBQW9CLENBQUMsRUFVbkksTUFBTSxXQUFrQyxJQUFhLFVBQVcsQ0FZNUQsV0FBVyxDQUFDLEVBQVMsRUFBbUIsQ0FDcEMsSUFBSSxFQUNKLE1BQU0sSUFBSyxLQUFZLENBQWtCLENBQUMsRUFDMUMsSUFBcUMsSUFBSSxJQUFJLEVBSTdDLEdBQThDLElBQUksS0FBTSxJQUFJLEVBQzVELElBQU0sRUFBVyxJQUFPLHVCQUF3QixDQUFPLEVBQ2pELEVBQU8sRUFBSyxJQUFJLE1BQU0sRUFDNUIsR0FBSSxHQUFRLElBQVMsR0FBUSxzQkFDekIsTUFBTSxJQUFJLE1BQU0sYUFBYSxHQUFRLDZDQUNwQixFQUFRLE9BQU8sRUFFcEMsSUFBTSxFQUFXLEVBQUssSUFBSSxXQUFXLEVBQy9CLEVBQWUsRUFBSyxJQUFJLGVBQWUsRUFDdkMsR0FBWSxFQUFLLEVBQUssSUFBSSxXQUFXLEtBQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxJQUFrQixRQUFRLG1CQUFvQixLQUFLLGNBQWMsRUFDMUksRUFBbUIsRUFBSyxJQUFJLG9CQUFvQixFQUNoRCxFQUEyQixFQUFLLElBQUksNkJBQTZCLEVBQ2pFLEVBQWlDLEVBQUssSUFBSSxtQ0FBbUMsRUFDN0UsRUFBOEIsRUFBSyxJQUFJLCtCQUErQixFQUN0RSxFQUEwQyxJQUFPLHVCQUF3QixDQUEyQixFQUFFLElBQUksd0JBQXdCLEVBR3hJLEdBRkEsS0FBSyx3QkFBMEIsSUFBSSxJQUFJLEVBQUssSUFBSSw0QkFBNEIsR0FDeEUsZ0NBQWdDLEtBQUssNkJBQTZCLEVBQ2xFLEVBQ0EsS0FBSyxXQUFhLENBQ2QsdUJBQXdCLFFBQ3hCLFdBQ0EsY0FDSixFQUVKLEtBQUssY0FBZ0IsSUFBSSxJQUFJLGVBQWUsRUFBVSxLQUFLLFVBQVUsRUFDckUsS0FBSyxPQUFTLEVBQUssSUFBSSxRQUFRLEdBQUssQ0FBQyxHQUFtQixFQUN4RCxLQUFLLGtCQUFvQixLQUN6QixLQUFLLFNBQVcsRUFBSyxJQUFJLFVBQVUsRUFDbkMsS0FBSyxpQkFBbUIsRUFDeEIsS0FBSyx5QkFBMkIsRUFDaEMsSUFBTSxFQUEyQixJQUFJLE9BQU8sR0FBMEIsRUFDdEUsR0FBSSxLQUFLLDJCQUNKLEtBQUssU0FBUyxNQUFNLENBQXdCLEVBQzdDLE1BQU0sSUFBSSxNQUFNLGdGQUNFLEVBS3RCLEdBSEEsS0FBSywrQkFBaUMsRUFDdEMsS0FBSyxvQ0FDRCxFQUNBLEtBQUssb0NBQ0wsS0FBSyx3QkFBMEIsR0FHL0IsVUFBSyx3QkFBMEIsR0FDL0IsS0FBSyxvQ0FBc0MsSUFFL0MsS0FBSyxjQUFnQixLQUFLLGlCQUFpQixLQUFLLFFBQVEsRUFDeEQsS0FBSyxnQkFBa0IsQ0FDbkIsU0FBVSxLQUFLLFNBQ2YsaUJBQWtCLEtBQUssaUJBQ3ZCLFlBQWEsS0FBSyxXQUN0QixFQUdKLHNCQUFzQixFQUFHLENBQ3JCLElBQUksRUFDSixHQUFJLEtBQUssK0JBQWdDLENBQ3JDLEdBQUksS0FBSywrQkFBK0IsT0FBUyxJQUs3QyxNQUFNLElBQUksV0FBVyxvQkFBb0IsS0FBSyxnQ0FBZ0MsRUFLbEYsSUFBTSxFQURLLHdEQUNPLEtBQUssS0FBSyw4QkFBOEIsRUFDMUQsUUFBUyxFQUFLLElBQVcsTUFBUSxJQUFnQixPQUFTLE9BQUksRUFBTyxVQUFZLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxRQUFVLEtBRW5JLE9BQU8sS0FRWCxjQUFjLENBQUMsRUFBYSxDQUN4QixNQUFNLGVBQWUsQ0FBVyxFQUNoQyxLQUFLLGtCQUFvQixPQU12QixlQUFjLEVBQUcsQ0FFbkIsSUFBSyxLQUFLLG1CQUFxQixLQUFLLFVBQVUsS0FBSyxpQkFBaUIsRUFDaEUsTUFBTSxLQUFLLHdCQUF3QixFQUd2QyxNQUFPLENBQ0gsTUFBTyxLQUFLLGtCQUFrQixhQUM5QixJQUFLLEtBQUssa0JBQWtCLEdBQ2hDLE9BVUUsa0JBQWlCLEVBQUcsQ0FFdEIsSUFBTSxFQUFVLENBQ1osY0FBZSxXQUZTLE1BQU0sS0FBSyxlQUFlLEdBRUwsT0FDakQsRUFDQSxPQUFPLEtBQUsseUJBQXlCLENBQU8sRUFFaEQsT0FBTyxDQUFDLEVBQU0sRUFBVSxDQUNwQixHQUFJLEVBQ0EsS0FBSyxhQUFhLENBQUksRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLENBQUMsRUFBRyxLQUFLLENBQ3RELE9BQU8sRUFBUyxFQUFHLEVBQUUsUUFBUSxFQUNoQyxFQUdELFlBQU8sS0FBSyxhQUFhLENBQUksT0FrQi9CLGFBQVksRUFBRyxDQUNqQixJQUFNLEVBQWdCLEtBQUssZUFBaUIsS0FBSyx5QkFDakQsR0FBSSxLQUFLLFVBRUwsT0FBTyxLQUFLLFVBRVgsUUFBSSxFQUFlLENBRXBCLElBQU0sRUFBVSxNQUFNLEtBQUssa0JBQWtCLEVBQ3ZDLEVBQVcsTUFBTSxLQUFLLFlBQVksUUFBUSxJQUN6QyxHQUEwQixhQUM3QixVQUNBLElBQUssR0FBRyxLQUFLLHdCQUF3QixTQUFTLElBQUksSUFDbEQsYUFBYyxNQUNsQixDQUFDLEVBRUQsT0FEQSxLQUFLLFVBQVksRUFBUyxLQUFLLFVBQ3hCLEtBQUssVUFFaEIsT0FBTyxVQVNMLGFBQVksQ0FBQyxFQUFNLEVBQWdCLEdBQU8sQ0FDNUMsSUFBSSxFQUNKLEdBQUksQ0FDQSxJQUFNLEVBQWlCLE1BQU0sS0FBSyxrQkFBa0IsRUFFcEQsR0FEQSxFQUFLLFFBQVUsRUFBSyxTQUFXLENBQUMsRUFDNUIsR0FBa0IsRUFBZSx1QkFDakMsRUFBSyxRQUFRLHVCQUNULEVBQWUsdUJBRXZCLEdBQUksR0FBa0IsRUFBZSxjQUNqQyxFQUFLLFFBQVEsY0FBZ0IsRUFBZSxjQUVoRCxFQUFXLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FBSSxFQUVsRCxNQUFPLEVBQUcsQ0FDTixJQUFNLEVBQU0sRUFBRSxTQUNkLEdBQUksRUFBSyxDQUNMLElBQU0sRUFBYSxFQUFJLE9BTWpCLEVBQW1CLEVBQUksT0FBTyxnQkFBZ0IsSUFBTyxTQUUzRCxJQUFLLElBRGEsSUFBZSxLQUFPLElBQWUsT0FHbEQsR0FDRCxLQUFLLHNCQUVMLE9BREEsTUFBTSxLQUFLLHdCQUF3QixFQUM1QixNQUFNLEtBQUssYUFBYSxFQUFNLEVBQUksRUFHakQsTUFBTSxFQUVWLE9BQU8sT0FZTCx3QkFBdUIsRUFBRyxDQUU1QixJQUF1QixLQUFNLEdBQStDLElBQXVCLEtBQU0sR0FBK0MsR0FBRyxHQUFLLElBQXVCLEtBQU0sSUFBc0MsSUFBSyxHQUEwRCxFQUFFLEtBQUssSUFBSSxFQUFHLEdBQUcsRUFDblQsR0FBSSxDQUNBLE9BQU8sTUFBTSxJQUF1QixLQUFNLEdBQStDLEdBQUcsU0FFaEcsQ0FFSSxJQUF1QixLQUFNLEdBQStDLEtBQU0sR0FBRyxHQVc3RixnQkFBZ0IsQ0FBQyxFQUFVLENBR3ZCLElBQU0sRUFBUSxFQUFTLE1BQU0scUJBQXFCLEVBQ2xELElBQUssRUFDRCxPQUFPLEtBRVgsT0FBTyxFQUFNLFFBV1gsMkJBQTBCLENBQUMsRUFBTyxDQUNwQyxJQUFNLEVBQU8sSUFDTixHQUEwQixhQUM3QixJQUFLLEtBQUssK0JBQ1YsT0FBUSxPQUNSLFFBQVMsQ0FDTCxlQUFnQixtQkFDaEIsY0FBZSxVQUFVLEdBQzdCLEVBQ0EsS0FBTSxDQUNGLE1BQU8sS0FBSyxlQUFlLEVBQzNCLFNBQVUsS0FBSyxvQ0FBc0MsR0FDekQsRUFDQSxhQUFjLE1BQ2xCLEVBQ00sRUFBVyxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUksRUFDOUMsRUFBa0IsRUFBUyxLQUNqQyxNQUFPLENBQ0gsYUFBYyxFQUFnQixZQUU5QixZQUFhLElBQUksS0FBSyxFQUFnQixVQUFVLEVBQUUsUUFBUSxFQUMxRCxJQUFLLENBQ1QsRUFRSixTQUFTLENBQUMsRUFBYSxDQUNuQixJQUFNLEVBQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUMvQixPQUFPLEVBQVksWUFDYixHQUFPLEVBQVksWUFBYyxLQUFLLDRCQUN0QyxHQUtWLGNBQWMsRUFBRyxDQUdiLEdBQUksT0FBTyxLQUFLLFNBQVcsU0FDdkIsTUFBTyxDQUFDLEtBQUssTUFBTSxFQUV2QixPQUFPLEtBQUssUUFBVSxDQUFDLEdBQW1CLEVBRTlDLHFCQUFxQixFQUFHLENBQ3BCLElBQU0sRUFBYyxRQUFRLFFBQVEsUUFBUSxLQUFNLEVBQUUsRUFDOUMsRUFBa0IsS0FBSyxpQ0FBbUMsT0FDMUQsRUFBdUIsS0FBSyxxQkFDNUIsS0FBSyxxQkFDTCxVQUNOLE1BQU8sV0FBVyxVQUFvQixJQUFJLG1DQUFtQyxzQkFBeUMscUJBQW1DLEtBQUssMEJBRXRLLENBQ0EsR0FBUSwwQkFBNEIsR0FDcEMsR0FBZ0QsSUFBSSxRQUFXLElBQXVDLElBQUksUUFBVyxJQUE2RCxlQUFlLENBQTBELEVBQUcsQ0FFMVAsSUFBTSxFQUFlLE1BQU0sS0FBSyxxQkFBcUIsRUFFL0MsRUFBd0IsQ0FDMUIsVUFBVyxJQUNYLFNBQVUsS0FBSyxTQUNmLG1CQUFvQixJQUNwQixlQUNBLGlCQUFrQixLQUFLLGlCQU92QixNQUFPLEtBQUssK0JBQ04sQ0FBQyxHQUFtQixFQUNwQixLQUFLLGVBQWUsQ0FDOUIsRUFJTSxHQUFxQixLQUFLLFlBQWMsS0FBSyx5QkFDN0MsQ0FBRSxZQUFhLEtBQUssd0JBQXlCLEVBQzdDLE9BQ0EsRUFBb0IsQ0FDdEIsb0JBQXFCLEtBQUssc0JBQXNCLENBQ3BELEVBQ00sRUFBYyxNQUFNLEtBQUssY0FBYyxjQUFjLEVBQXVCLEVBQW1CLENBQWlCLEVBQ3RILEdBQUksS0FBSywrQkFDTCxLQUFLLGtCQUFvQixNQUFNLEtBQUssMkJBQTJCLEVBQVksWUFBWSxFQUV0RixRQUFJLEVBQVksV0FFakIsS0FBSyxrQkFBb0IsQ0FDckIsYUFBYyxFQUFZLGFBQzFCLFlBQWEsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFJLEVBQVksV0FBYSxLQUM3RCxJQUFLLEVBQVksR0FDckIsRUFJQSxVQUFLLGtCQUFvQixDQUNyQixhQUFjLEVBQVksYUFDMUIsSUFBSyxFQUFZLEdBQ3JCLEVBZUosT0FaQSxLQUFLLFlBQWMsQ0FBQyxFQUNwQixPQUFPLE9BQU8sS0FBSyxZQUFhLEtBQUssaUJBQWlCLEVBQ3RELE9BQU8sS0FBSyxZQUFZLElBRXhCLEtBQUssS0FBSyxTQUFVLENBQ2hCLGNBQWUsS0FDZixZQUFhLEtBQUssa0JBQWtCLFlBQ3BDLGFBQWMsS0FBSyxrQkFBa0IsYUFDckMsV0FBWSxTQUNaLFNBQVUsSUFDZCxDQUFDLEVBRU0sS0FBSyx1Q0NwY2hCLElBQUksSUFBSSxJQUFJLElBQ1osT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELDZCQUFnQyxPQUN4QyxJQUFNLGVBQ0EsYUFLQSxJQUFlLElBQU8sV0FBWSxJQUFLLElBQUcsWUFBYyxNQUFRLE1BQVksT0FBSSxJQUFNLElBQU0sRUFBSSxFQUNoRyxJQUFlLElBQU8sV0FBWSxJQUFLLElBQUcsWUFBYyxNQUFRLE1BQVksT0FBSSxJQUFNLElBQU0sRUFBSSxFQUNoRyxJQUFZLElBQU8sV0FBWSxJQUFLLElBQUcsU0FBVyxNQUFRLE1BQVksT0FBSSxJQUFNLElBQU0sRUFBSSxFQUtoRyxNQUFNLEdBQXlCLENBTTNCLFdBQVcsQ0FBQyxFQUFNLENBQ2QsS0FBSyxTQUFXLEVBQUssU0FDckIsS0FBSyxXQUFhLEVBQUssV0FDdkIsS0FBSyxzQkFBd0IsRUFBSywyQkFRaEMsZ0JBQWUsQ0FBQyxFQUFTLENBRzNCLElBQUksRUFBaUIsS0FBSyxTQUMxQixHQUFJLENBSUEsR0FEQSxFQUFpQixNQUFNLElBQVMsQ0FBYyxJQUN4QyxNQUFNLElBQU0sQ0FBYyxHQUFHLE9BQU8sRUFDdEMsTUFBTSxJQUFJLE1BR2xCLE1BQU8sRUFBSyxDQUNSLEdBQUksYUFBZSxNQUNmLEVBQUksUUFBVSxlQUFlLDBDQUF1RCxFQUFJLFVBRTVGLE1BQU0sRUFFVixJQUFJLEVBQ0UsRUFBVSxNQUFNLElBQVMsRUFBZ0IsQ0FBRSxTQUFVLE1BQU8sQ0FBQyxFQUNuRSxHQUFJLEtBQUssYUFBZSxPQUNwQixFQUFlLEVBRWQsUUFBSSxLQUFLLGFBQWUsUUFBVSxLQUFLLHNCQUV4QyxFQURhLEtBQUssTUFBTSxDQUFPLEVBQ1gsS0FBSyx1QkFFN0IsSUFBSyxFQUNELE1BQU0sSUFBSSxNQUFNLG1FQUFtRSxFQUV2RixPQUFPLEVBRWYsQ0FDUSw2QkFBMkIsd0JDbEVuQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsNEJBQStCLE9BS3ZDLE1BQU0sR0FBd0IsQ0FLMUIsV0FBVyxDQUFDLEVBQU0sQ0FDZCxLQUFLLElBQU0sRUFBSyxJQUNoQixLQUFLLFdBQWEsRUFBSyxXQUN2QixLQUFLLHNCQUF3QixFQUFLLHNCQUNsQyxLQUFLLFFBQVUsRUFBSyxRQUNwQixLQUFLLHdCQUEwQixFQUFLLDZCQVNsQyxnQkFBZSxDQUFDLEVBQVMsQ0FDM0IsSUFBTSxFQUFPLElBQ04sS0FBSyx3QkFDUixJQUFLLEtBQUssSUFDVixPQUFRLE1BQ1IsUUFBUyxLQUFLLFFBQ2QsYUFBYyxLQUFLLFVBQ3ZCLEVBQ0ksRUFDSixHQUFJLEtBQUssYUFBZSxPQUVwQixHQURpQixNQUFNLEVBQVEsWUFBWSxRQUFRLENBQUksR0FDL0IsS0FFdkIsUUFBSSxLQUFLLGFBQWUsUUFBVSxLQUFLLHNCQUV4QyxHQURpQixNQUFNLEVBQVEsWUFBWSxRQUFRLENBQUksR0FDL0IsS0FBSyxLQUFLLHVCQUV0QyxJQUFLLEVBQ0QsTUFBTSxJQUFJLE1BQU0sa0VBQWtFLEVBRXRGLE9BQU8sRUFFZixDQUNRLDRCQUEwQix3QkNoRGxDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCx1QkFBMEIsT0FDbEMsSUFBTSxTQUNBLFNBQ0EsVUFDQSxVQUtOLE1BQU0sWUFBMkIsSUFBcUIseUJBQTBCLENBZTVFLFdBQVcsQ0FBQyxFQUFTLEVBQW1CLENBQ3BDLE1BQU0sRUFBUyxDQUFpQixFQUNoQyxJQUFNLEVBQVcsSUFBTyx1QkFBd0IsQ0FBTyxFQUNqRCxFQUFtQixFQUFLLElBQUksbUJBQW1CLEVBQy9DLEVBQXVCLEVBQUssSUFBSSx3QkFBd0IsRUFFOUQsSUFBSyxJQUFxQixFQUN0QixNQUFNLElBQUksTUFBTSxrRUFBa0UsRUFFdEYsR0FBSSxHQUFvQixFQUNwQixNQUFNLElBQUksTUFBTSwyRUFBMkUsRUFFL0YsR0FBSSxFQUNBLEtBQUsscUJBQXVCLEVBQzVCLEtBQUsscUJBQXVCLGVBRTNCLEtBQ0QsSUFBTSxFQUEyQixJQUFPLHVCQUF3QixDQUFnQixFQUMxRSxFQUFpQixJQUFPLHVCQUF3QixFQUFxQixJQUFJLFFBQVEsQ0FBQyxFQUVsRixFQUFhLEVBQVcsSUFBSSxNQUFNLEdBQUssT0FDdkMsRUFBOEIsRUFBVyxJQUFJLDBCQUEwQixFQUM3RSxHQUFJLElBQWUsUUFBVSxJQUFlLE9BQ3hDLE1BQU0sSUFBSSxNQUFNLHFDQUFxQyxJQUFhLEVBRXRFLEdBQUksSUFBZSxTQUFXLEVBQzFCLE1BQU0sSUFBSSxNQUFNLG9FQUFvRSxFQUV4RixJQUFNLEVBQU8sRUFBcUIsSUFBSSxNQUFNLEVBQ3RDLEVBQU0sRUFBcUIsSUFBSSxLQUFLLEVBQ3BDLEVBQVUsRUFBcUIsSUFBSSxTQUFTLEVBQ2xELEdBQUksR0FBUSxFQUNSLE1BQU0sSUFBSSxNQUFNLGtGQUFrRixFQUVqRyxRQUFJLElBQVMsRUFDZCxLQUFLLHFCQUF1QixPQUM1QixLQUFLLHFCQUF1QixJQUFJLElBQTJCLHlCQUF5QixDQUNoRixTQUFVLEVBQ1YsV0FBWSxFQUNaLHNCQUF1QixDQUMzQixDQUFDLEVBRUEsU0FBSyxHQUFRLEVBQ2QsS0FBSyxxQkFBdUIsTUFDNUIsS0FBSyxxQkFBdUIsSUFBSSxJQUEwQix3QkFBd0IsQ0FDOUUsSUFBSyxFQUNMLFdBQVksRUFDWixzQkFBdUIsRUFDdkIsUUFBUyxFQUNULHdCQUF5QixJQUFtQixZQUNoRCxDQUFDLEVBR0QsV0FBTSxJQUFJLE1BQU0sa0ZBQWtGLFFBVXhHLHFCQUFvQixFQUFHLENBQ3pCLE9BQU8sS0FBSyxxQkFBcUIsZ0JBQWdCLEtBQUssZUFBZSxFQUU3RSxDQUNRLHVCQUFxQix3QkM1RjdCLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxxQkFBd0IsT0FDaEMsSUFBTSxTQUVBLElBQWdCLG1CQUtoQixJQUFtQixlQU16QixNQUFNLEdBQWlCLENBVW5CLFdBQVcsQ0FBQyxFQUFnQixFQUFRLENBQ2hDLEtBQUssZUFBaUIsRUFDdEIsS0FBSyxPQUFTLEVBQ2QsS0FBSyxPQUFhLElBQVMsYUFBYyxPQVV2QyxrQkFBaUIsQ0FBQyxFQUFZLENBQ2hDLElBQUssRUFBVyxJQUNaLE1BQU0sSUFBSSxNQUFNLG1DQUFtQyxFQUl2RCxJQUFNLEVBQXFCLE9BQU8sRUFBVyxPQUFTLFNBQ2hELEtBQUssVUFBVSxFQUFXLElBQUksRUFDOUIsRUFBVyxLQUNYLEVBQU0sRUFBVyxJQUNqQixFQUFTLEVBQVcsUUFBVSxNQUM5QixFQUFpQixFQUFXLE1BQVEsRUFDcEMsRUFBdUIsRUFBVyxRQUNsQyxFQUF5QixNQUFNLEtBQUssZUFBZSxFQUNuRCxFQUFNLElBQUksSUFBSSxDQUFHLEVBQ2pCLEVBQVksTUFBTSxJQUFnQyxDQUNwRCxPQUFRLEtBQUssT0FDYixLQUFNLEVBQUksS0FDVixhQUFjLEVBQUksU0FDbEIscUJBQXNCLEVBQUksT0FBTyxPQUFPLENBQUMsRUFDekMsU0FDQSxPQUFRLEtBQUssT0FDYixvQkFBcUIsRUFDckIsaUJBQ0Esc0JBQ0osQ0FBQyxFQUVLLEVBQVUsT0FBTyxPQUV2QixFQUFVLFFBQVUsQ0FBRSxhQUFjLEVBQVUsT0FBUSxFQUFJLENBQUMsRUFBRyxDQUMxRCxjQUFlLEVBQVUsb0JBQ3pCLEtBQU0sRUFBSSxJQUNkLEVBQUcsR0FBd0IsQ0FBQyxDQUFDLEVBQzdCLEdBQUksRUFBdUIsTUFDdkIsT0FBTyxPQUFPLEVBQVMsQ0FDbkIsdUJBQXdCLEVBQXVCLEtBQ25ELENBQUMsRUFFTCxJQUFNLEVBQWUsQ0FDakIsTUFDQSxPQUFRLEVBQ1IsU0FDSixFQUNBLEdBQUksT0FBTyxJQUFtQixZQUMxQixFQUFhLEtBQU8sRUFFeEIsT0FBTyxFQUVmLENBQ1EscUJBQW1CLElBVzNCLGVBQWUsRUFBSSxDQUFDLEVBQVEsRUFBSyxFQUFLLENBQ2xDLE9BQU8sTUFBTSxFQUFPLG1CQUFtQixFQUFLLENBQUcsRUFlbkQsZUFBZSxHQUFhLENBQUMsRUFBUSxFQUFLLEVBQVcsRUFBUSxFQUFhLENBQ3RFLElBQU0sRUFBUSxNQUFNLEdBQUssRUFBUSxPQUFPLElBQU8sQ0FBUyxFQUNsRCxFQUFVLE1BQU0sR0FBSyxFQUFRLEVBQU8sQ0FBTSxFQUMxQyxFQUFXLE1BQU0sR0FBSyxFQUFRLEVBQVMsQ0FBVyxFQUV4RCxPQURpQixNQUFNLEdBQUssRUFBUSxFQUFVLGNBQWMsRUFXaEUsZUFBZSxHQUErQixDQUFDLEVBQVMsQ0FDcEQsSUFBTSxFQUF1QixFQUFRLHNCQUF3QixDQUFDLEVBQ3hELEVBQWlCLEVBQVEsZ0JBQWtCLEdBRzNDLEVBQWMsRUFBUSxLQUFLLE1BQU0sR0FBRyxFQUFFLEdBQ3RDLEVBQU0sSUFBSSxLQUVWLEVBQVUsRUFDWCxZQUFZLEVBQ1osUUFBUSxRQUFTLEVBQUUsRUFDbkIsUUFBUSxXQUFZLEVBQUUsRUFFckIsRUFBWSxFQUFJLFlBQVksRUFBRSxRQUFRLE9BQVEsRUFBRSxFQUFFLFFBQVEsTUFBTyxFQUFFLEVBRW5FLEVBQWtDLENBQUMsRUFNekMsR0FMQSxPQUFPLEtBQUssQ0FBb0IsRUFBRSxRQUFRLEtBQU8sQ0FDN0MsRUFBZ0MsRUFBSSxZQUFZLEdBQzVDLEVBQXFCLEdBQzVCLEVBRUcsRUFBUSxvQkFBb0IsTUFDNUIsRUFBZ0Msd0JBQzVCLEVBQVEsb0JBQW9CLE1BR3BDLElBQU0sRUFBYSxPQUFPLE9BQU8sQ0FDN0IsS0FBTSxFQUFRLElBQ2xCLEVBR0EsRUFBZ0MsS0FBTyxDQUFDLEVBQUksQ0FBRSxhQUFjLENBQVEsRUFBRyxDQUErQixFQUNsRyxFQUFtQixHQUNqQixFQUFvQixPQUFPLEtBQUssQ0FBVSxFQUFFLEtBQUssRUFDdkQsRUFBa0IsUUFBUSxLQUFPLENBQzdCLEdBQW9CLEdBQUcsS0FBTyxFQUFXO0FBQUEsRUFDNUMsRUFDRCxJQUFNLEVBQWdCLEVBQWtCLEtBQUssR0FBRyxFQUMxQyxFQUFjLE1BQU0sRUFBUSxPQUFPLGdCQUFnQixDQUFjLEVBRWpFLEVBQW1CLEdBQUcsRUFBUTtBQUFBLEVBQzdCLEVBQVE7QUFBQSxFQUNSLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFDQTtBQUFBLEVBQ0EsSUFDRCxFQUFrQixHQUFHLEtBQWEsRUFBUSxVQUFVLEtBQWUsTUFFbkUsRUFBZSxHQUFHO0FBQUEsRUFDakI7QUFBQSxFQUNBO0FBQUEsRUFDRixNQUFNLEVBQVEsT0FBTyxnQkFBZ0IsQ0FBZ0IsRUFFcEQsRUFBYSxNQUFNLElBQWMsRUFBUSxPQUFRLEVBQVEsb0JBQW9CLGdCQUFpQixFQUFXLEVBQVEsT0FBUSxDQUFXLEVBQ3BJLEVBQVksTUFBTSxHQUFLLEVBQVEsT0FBUSxFQUFZLENBQVksRUFFL0QsRUFBc0IsR0FBRyxrQkFBNEIsRUFBUSxvQkFBb0IsZUFDaEYsb0JBQWtDLGdCQUNwQixJQUFTLHFCQUFzQixDQUFTLElBQzdELE1BQU8sQ0FFSCxRQUFTLEVBQWdDLEtBQU8sT0FBWSxFQUM1RCxzQkFDQSxxQkFBc0IsRUFBUSxvQkFDbEMsc0JDak1KLElBQUksR0FBMEIsSUFBUSxHQUFLLHdCQUEyQixRQUFTLENBQUMsRUFBVSxFQUFPLEVBQU0sRUFBRyxDQUN0RyxHQUFJLElBQVMsTUFBUSxFQUFHLE1BQU0sSUFBSSxVQUFVLCtDQUErQyxFQUMzRixHQUFJLE9BQU8sSUFBVSxXQUFhLElBQWEsSUFBVSxHQUFLLEVBQU0sSUFBSSxDQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsMEVBQTBFLEVBQ2pMLE9BQU8sSUFBUyxJQUFNLEVBQUksSUFBUyxJQUFNLEVBQUUsS0FBSyxDQUFRLEVBQUksRUFBSSxFQUFFLE1BQVEsRUFBTSxJQUFJLENBQVEsR0FFNUYsR0FBa0QsSUFBOEQsSUFBdUQsSUFBdUUsR0FBMEQsSUFDNVMsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsc0NBQTZDLE9Bb0JyRCxNQUFNLEdBQXNDLENBT3hDLFdBQVcsQ0FBQyxFQUFNLENBQ2QsR0FBaUQsSUFBSSxJQUFJLEVBQ3pELEtBQUssVUFBWSxFQUFLLFVBQ3RCLEtBQUssdUJBQXlCLEVBQUssdUJBQ25DLEtBQUssc0JBQXdCLEVBQUssc0JBQ2xDLEtBQUssd0JBQTBCLEVBQUssNkJBV2xDLGFBQVksQ0FBQyxFQUFTLENBR3hCLEdBQUksR0FBdUIsS0FBTSxHQUFrRCxJQUFLLEVBQXdELEVBQzVJLE9BQU8sR0FBdUIsS0FBTSxHQUFrRCxJQUFLLEVBQXdELEVBRXZKLElBQU0sRUFBa0IsQ0FBQyxFQUN6QixJQUFLLEdBQXVCLEtBQU0sR0FBa0QsSUFBSyxFQUF3RCxHQUFLLEtBQUssc0JBQ3ZKLEVBQWdCLDRCQUNaLE1BQU0sR0FBdUIsS0FBTSxHQUFrRCxJQUFLLEdBQTRELEVBQUUsS0FBSyxLQUFNLEVBQVEsV0FBVyxFQUU5TCxJQUFLLEtBQUssVUFDTixNQUFNLElBQUksTUFBTSxzRkFDNEIsRUFFaEQsSUFBTSxFQUFPLElBQ04sS0FBSyx3QkFDUixJQUFLLEtBQUssVUFDVixPQUFRLE1BQ1IsYUFBYyxPQUNkLFFBQVMsQ0FDYixFQUNNLEVBQVcsTUFBTSxFQUFRLFlBQVksUUFBUSxDQUFJLEVBR3ZELE9BQU8sRUFBUyxLQUFLLE9BQU8sRUFBRyxFQUFTLEtBQUssT0FBUyxDQUFDLE9BV3JELDBCQUF5QixDQUFDLEVBQVMsQ0FHckMsR0FBSSxHQUF1QixLQUFNLEdBQWtELElBQUssR0FBcUUsRUFDekosT0FBTyxHQUF1QixLQUFNLEdBQWtELElBQUssR0FBcUUsRUFFcEssSUFBTSxFQUFrQixDQUFDLEVBQ3pCLEdBQUksS0FBSyxzQkFDTCxFQUFnQiw0QkFDWixNQUFNLEdBQXVCLEtBQU0sR0FBa0QsSUFBSyxHQUE0RCxFQUFFLEtBQUssS0FBTSxFQUFRLFdBQVcsRUFHOUwsSUFBTSxFQUFXLE1BQU0sR0FBdUIsS0FBTSxHQUFrRCxJQUFLLEdBQXFELEVBQUUsS0FBSyxLQUFNLEVBQWlCLEVBQVEsV0FBVyxFQUszTSxFQUFXLE1BQU0sR0FBdUIsS0FBTSxHQUFrRCxJQUFLLEdBQXFFLEVBQUUsS0FBSyxLQUFNLEVBQVUsRUFBaUIsRUFBUSxXQUFXLEVBQzNPLE1BQU8sQ0FDSCxZQUFhLEVBQVMsWUFDdEIsZ0JBQWlCLEVBQVMsZ0JBQzFCLE1BQU8sRUFBUyxLQUNwQixFQUVSLENBQ0EsR0FBUSxzQ0FBd0MsSUFDaEQsR0FBbUQsSUFBSSxRQUFXLElBS2xFLGVBQWUsQ0FBNEQsQ0FBQyxFQUFhLENBQ3JGLElBQU0sRUFBTyxJQUNOLEtBQUssd0JBQ1IsSUFBSyxLQUFLLHNCQUNWLE9BQVEsTUFDUixhQUFjLE9BQ2QsUUFBUyxDQUFFLHVDQUF3QyxLQUFNLENBQzdELEVBRUEsT0FEaUIsTUFBTSxFQUFZLFFBQVEsQ0FBSSxHQUMvQixNQUNqQixJQU9ILGVBQWUsQ0FBcUQsQ0FBQyxFQUFTLEVBQWEsQ0FDdkYsSUFBSyxLQUFLLHVCQUNOLE1BQU0sSUFBSSxNQUFNLGtGQUNxQixFQUV6QyxJQUFNLEVBQU8sSUFDTixLQUFLLHdCQUNSLElBQUssS0FBSyx1QkFDVixPQUFRLE1BQ1IsYUFBYyxPQUNkLFFBQVMsQ0FDYixFQUVBLE9BRGlCLE1BQU0sRUFBWSxRQUFRLENBQUksR0FDL0IsTUFDakIsSUFVSCxlQUFlLENBQXFFLENBQUMsRUFBVSxFQUFTLEVBQWEsQ0FPakgsT0FOaUIsTUFBTSxFQUFZLFFBQVEsSUFDcEMsS0FBSyx3QkFDUixJQUFLLEdBQUcsS0FBSywwQkFBMEIsSUFDdkMsYUFBYyxPQUNkLFFBQVMsQ0FDYixDQUFDLEdBQ2UsTUFDakIsR0FBMkQsU0FBUyxDQUF3RCxFQUFHLENBRzlILE9BQVEsUUFBUSxJQUFJLFlBQWlCLFFBQVEsSUFBSSxvQkFBeUIsTUFDM0UsSUFBd0UsU0FBUyxDQUFxRSxFQUFHLENBRXhKLEdBQUksUUFBUSxJQUFJLG1CQUNaLFFBQVEsSUFBSSxzQkFDWixNQUFPLENBQ0gsWUFBYSxRQUFRLElBQUksa0JBQ3pCLGdCQUFpQixRQUFRLElBQUksc0JBQzdCLE1BQU8sUUFBUSxJQUFJLGlCQUN2QixFQUVKLE9BQU8seUJDcExYLElBQUksSUFBMEIsSUFBUSxHQUFLLHdCQUEyQixRQUFTLENBQUMsRUFBVSxFQUFPLEVBQU0sRUFBRyxDQUN0RyxHQUFJLElBQVMsTUFBUSxFQUFHLE1BQU0sSUFBSSxVQUFVLCtDQUErQyxFQUMzRixHQUFJLE9BQU8sSUFBVSxXQUFhLElBQWEsSUFBVSxHQUFLLEVBQU0sSUFBSSxDQUFRLEVBQUcsTUFBTSxJQUFJLFVBQVUsMEVBQTBFLEVBQ2pMLE9BQU8sSUFBUyxJQUFNLEVBQUksSUFBUyxJQUFNLEVBQUUsS0FBSyxDQUFRLEVBQUksRUFBSSxFQUFFLE1BQVEsRUFBTSxJQUFJLENBQVEsR0FFNUYsR0FBSSxJQUNSLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFVBQWlCLE9BQ3pCLElBQU0sVUFDQSxTQUNBLFVBQ0EsU0FNTixNQUFNLFdBQWtCLElBQXFCLHlCQUEwQixDQVluRSxXQUFXLENBQUMsRUFBUyxFQUFtQixDQUNwQyxNQUFNLEVBQVMsQ0FBaUIsRUFDaEMsSUFBTSxFQUFXLElBQU8sdUJBQXdCLENBQU8sRUFDakQsRUFBbUIsRUFBSyxJQUFJLG1CQUFtQixFQUMvQyxFQUFpQyxFQUFLLElBQUksbUNBQW1DLEVBRW5GLElBQUssSUFBcUIsRUFDdEIsTUFBTSxJQUFJLE1BQU0sNkVBQTZFLEVBRWpHLEdBQUksR0FBb0IsRUFDcEIsTUFBTSxJQUFJLE1BQU0sc0ZBQXNGLEVBRTFHLEdBQUksRUFDQSxLQUFLLCtCQUFpQyxFQUN0QyxLQUFLLDRCQUNELElBQXVCLEdBQUksR0FBSSxJQUFLLEdBQTJELEVBQ25HLEtBQUsscUJBQXVCLGVBRTNCLEtBQ0QsSUFBTSxFQUEyQixJQUFPLHVCQUF3QixDQUFnQixFQUNoRixLQUFLLGNBQWdCLEVBQXFCLElBQUksZ0JBQWdCLEVBRzlELElBQU0sRUFBWSxFQUFxQixJQUFJLFlBQVksRUFHakQsRUFBeUIsRUFBcUIsSUFBSSxLQUFLLEVBQ3ZELEVBQXdCLEVBQXFCLElBQUksMEJBQTBCLEVBQ2pGLEtBQUssK0JBQ0QsSUFBSSxJQUF3QyxzQ0FBc0MsQ0FDOUUsVUFBVyxFQUNYLHVCQUF3QixFQUN4QixzQkFBdUIsQ0FDM0IsQ0FBQyxFQUNMLEtBQUssNEJBQThCLEVBQXFCLElBQUksZ0NBQWdDLEVBQzVGLEtBQUsscUJBQXVCLE1BRTVCLEtBQUssc0JBQXNCLEVBRS9CLEtBQUssaUJBQW1CLEtBQ3hCLEtBQUssT0FBUyxHQUVsQixxQkFBcUIsRUFBRyxDQUNwQixJQUFJLEVBQ0osSUFBTSxHQUFTLEVBQUssS0FBSyxpQkFBbUIsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLE1BQU0sY0FBYyxFQUNwRyxJQUFLLElBQVUsS0FBSyw0QkFDaEIsTUFBTSxJQUFJLE1BQU0sMkNBQTJDLEVBRTFELFFBQUksU0FBUyxFQUFNLEdBQUksRUFBRSxJQUFNLEVBQ2hDLE1BQU0sSUFBSSxNQUFNLGdCQUFnQixFQUFNLDRDQUE0QyxPQVdwRixxQkFBb0IsRUFBRyxDQUV6QixJQUFLLEtBQUssaUJBQ04sS0FBSyxPQUFTLE1BQU0sS0FBSywrQkFBK0IsYUFBYSxLQUFLLGVBQWUsRUFDekYsS0FBSyxpQkFBbUIsSUFBSSxJQUFtQixpQkFBaUIsU0FBWSxDQUN4RSxPQUFPLEtBQUssK0JBQStCLDBCQUEwQixLQUFLLGVBQWUsR0FDMUYsS0FBSyxNQUFNLEVBSWxCLElBQU0sRUFBVSxNQUFNLEtBQUssaUJBQWlCLGtCQUFrQixJQUN2RCxHQUFHLGFBQ04sSUFBSyxLQUFLLDRCQUE0QixRQUFRLFdBQVksS0FBSyxNQUFNLEVBQ3JFLE9BQVEsTUFDWixDQUFDLEVBYUssRUFBb0IsQ0FBQyxFQUNyQixFQUFrQixPQUFPLE9BQU8sQ0FLbEMsK0JBQWdDLEtBQUssUUFDekMsRUFBRyxFQUFRLE9BQU8sRUFFbEIsUUFBVyxLQUFPLEVBQ2QsRUFBa0IsS0FBSyxDQUNuQixNQUNBLE1BQU8sRUFBZ0IsRUFDM0IsQ0FBQyxFQUdMLE9BQU8sbUJBQW1CLEtBQUssVUFBVSxDQUNyQyxJQUFLLEVBQVEsSUFDYixPQUFRLEVBQVEsT0FDaEIsUUFBUyxDQUNiLENBQUMsQ0FBQyxFQUVWLENBQ0EsR0FBUSxVQUFZLEdBQ3BCLEdBQUssR0FDTCxJQUE4RCxDQUFFLE1BQU8sZ0ZBQWlGLEVBSXhKLEdBQVUsOEJBQWdDLGtCQUkxQyxHQUFVLDhCQUFnQyxvQ0NySjFDLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCw2QkFBbUMsNkJBQW1DLDBCQUFnQywrQkFBcUMsb0NBQTBDLDZCQUFtQyw2QkFBbUMsNEJBQWtDLHVCQUEwQixPQUMvVCxJQUFNLEdBQTBCLHlDQUMxQixJQUEyQiw0Q0FDM0IsSUFBMkIsdUNBSWpDLE1BQU0sR0FBbUIsQ0FPckIsV0FBVyxDQUFDLEVBQWMsQ0FFdEIsSUFBSyxFQUFhLFFBQ2QsTUFBTSxJQUFJLElBQXlCLHFEQUFxRCxFQUU1RixHQUFJLEVBQWEsVUFBWSxPQUN6QixNQUFNLElBQUksSUFBeUIscURBQXFELEVBSzVGLEdBSEEsS0FBSyxRQUFVLEVBQWEsUUFDNUIsS0FBSyxRQUFVLEVBQWEsUUFFeEIsS0FBSyxRQUFTLENBSWQsR0FIQSxLQUFLLGVBQWlCLEVBQWEsZ0JBQ25DLEtBQUssVUFBWSxFQUFhLFdBRTFCLEtBQUssWUFBYyxJQUNuQixLQUFLLFlBQWMsS0FDbkIsS0FBSyxZQUFjLElBQ25CLE1BQU0sSUFBSSxJQUEyQiwrRkFDUixRQUE2QixXQUFnQyxLQUEwQixFQUd4SCxHQUFJLEtBQUssWUFBYyxHQUF5QixDQUM1QyxJQUFLLEVBQWEsY0FDZCxNQUFNLElBQUksR0FBeUIsNEVBQTRFLEtBQTBCLEVBRTdJLEtBQUssYUFBZSxFQUFhLGNBRWhDLEtBQ0QsSUFBSyxFQUFhLFNBQ2QsTUFBTSxJQUFJLEdBQXlCLHVFQUNqQixVQUErQixNQUEyQixFQUVoRixLQUFLLGFBQWUsRUFBYSxVQUdwQyxLQUVELElBQUssRUFBYSxLQUNkLE1BQU0sSUFBSSxJQUFzQixvRUFBb0UsRUFFeEcsSUFBSyxFQUFhLFFBQ2QsTUFBTSxJQUFJLElBQXlCLHVFQUF1RSxFQUU5RyxLQUFLLFVBQVksRUFBYSxLQUM5QixLQUFLLGFBQWUsRUFBYSxTQU96QyxPQUFPLEVBQUcsQ0FDTixPQUFRLEtBQUssVUFBVSxHQUFLLEtBQUssUUFNckMsU0FBUyxFQUFHLENBQ1IsT0FBUSxLQUFLLGlCQUFtQixRQUM1QixLQUFLLGVBQWlCLEtBQUssTUFBTSxLQUFLLElBQUksRUFBSSxJQUFJLEVBRTlELENBQ1EsdUJBQXFCLElBSTdCLE1BQU0sV0FBZ0MsS0FBTSxDQUN4QyxXQUFXLENBQUMsRUFBUyxDQUNqQixNQUFNLENBQU8sRUFDYixPQUFPLGVBQWUsS0FBTSxXQUFXLFNBQVMsRUFFeEQsQ0FDUSw0QkFBMEIsR0FJbEMsTUFBTSxZQUFpQyxFQUF3QixDQUMvRCxDQUNRLDZCQUEyQixJQUluQyxNQUFNLFlBQWlDLEVBQXdCLENBQy9ELENBQ1EsNkJBQTJCLElBSW5DLE1BQU0sWUFBd0MsRUFBd0IsQ0FDdEUsQ0FDUSxvQ0FBa0MsSUFJMUMsTUFBTSxZQUFtQyxFQUF3QixDQUNqRSxDQUNRLCtCQUE2QixJQUlyQyxNQUFNLFlBQThCLEVBQXdCLENBQzVELENBQ1EsMEJBQXdCLElBSWhDLE1BQU0sWUFBaUMsRUFBd0IsQ0FDL0QsQ0FDUSw2QkFBMkIsSUFJbkMsTUFBTSxXQUFpQyxFQUF3QixDQUMvRCxDQUNRLDZCQUEyQix1QkNuSW5DLE9BQU8sZUFBZSxJQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCx5QkFBNEIsT0FDcEMsSUFBTSxTQUNBLFNBQ0Esd0JBQ0EsYUFLTixNQUFNLEdBQXFCLENBS3ZCLFdBQVcsQ0FBQyxFQUFTLENBQ2pCLElBQUssRUFBUSxRQUNULE1BQU0sSUFBSSxNQUFNLHNCQUFzQixFQUkxQyxHQUZBLEtBQUssa0JBQW9CLElBQXFCLGFBQWEsRUFBUSxPQUFPLEVBQzFFLEtBQUssY0FBZ0IsRUFBUSxlQUN4QixLQUFLLGNBQ04sTUFBTSxJQUFJLE1BQU0sNEJBQTRCLEVBRWhELEtBQUssV0FBYSxFQUFRLFdBUzlCLDhCQUE4QixDQUFDLEVBQVEsQ0FDbkMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFTLElBQVcsQ0FFcEMsSUFBTSxFQUFRLElBQWEsTUFBTSxLQUFLLGtCQUFrQixHQUFJLEtBQUssa0JBQWtCLE1BQU0sQ0FBQyxFQUFHLENBQ3pGLElBQUssSUFBSyxRQUFRLE9BQVEsT0FBTyxZQUFZLENBQU0sQ0FBRSxDQUN6RCxDQUFDLEVBQ0csRUFBUyxHQUViLEVBQU0sT0FBTyxHQUFHLE9BQVEsQ0FBQyxJQUFTLENBQzlCLEdBQVUsRUFDYixFQUVELEVBQU0sT0FBTyxHQUFHLE9BQVEsQ0FBQyxJQUFRLENBQzdCLEdBQVUsRUFDYixFQUVELElBQU0sRUFBVSxXQUFXLElBQU0sQ0FLN0IsT0FGQSxFQUFNLG1CQUFtQixFQUN6QixFQUFNLEtBQUssRUFDSixFQUFPLElBQUksTUFBTSwrREFBK0QsQ0FBQyxHQUN6RixLQUFLLGFBQWEsRUFDckIsRUFBTSxHQUFHLFFBQVMsQ0FBQyxJQUFTLENBR3hCLEdBREEsYUFBYSxDQUFPLEVBQ2hCLElBQVMsRUFFVCxHQUFJLENBQ0EsSUFBTSxFQUFlLEtBQUssTUFBTSxDQUFNLEVBQ2hDLEVBQVcsSUFBSSxHQUFzQixtQkFBbUIsQ0FBWSxFQUMxRSxPQUFPLEVBQVEsQ0FBUSxFQUUzQixNQUFPLEVBQU8sQ0FDVixHQUFJLGFBQWlCLEdBQXNCLHdCQUN2QyxPQUFPLEVBQU8sQ0FBSyxFQUV2QixPQUFPLEVBQU8sSUFBSSxHQUFzQix3QkFBd0IsZ0RBQWdELEdBQVEsQ0FBQyxFQUk3SCxZQUFPLEVBQU8sSUFBSSxJQUF3QixnQkFBZ0IsRUFBUSxFQUFLLFNBQVMsQ0FBQyxDQUFDLEVBRXpGLEVBQ0osT0FNQyx1QkFBc0IsRUFBRyxDQUMzQixJQUFLLEtBQUssWUFBYyxLQUFLLFdBQVcsU0FBVyxFQUMvQyxPQUVKLElBQUksRUFDSixHQUFJLENBQ0EsRUFBVyxNQUFNLElBQUcsU0FBUyxTQUFTLEtBQUssVUFBVSxFQUV6RCxNQUFPLEVBQUksQ0FFUCxPQUVKLEtBQU0sTUFBTSxJQUFHLFNBQVMsTUFBTSxDQUFRLEdBQUcsT0FBTyxFQUU1QyxPQUVKLElBQU0sRUFBaUIsTUFBTSxJQUFHLFNBQVMsU0FBUyxFQUFVLENBQ3hELFNBQVUsTUFDZCxDQUFDLEVBQ0QsR0FBSSxJQUFtQixHQUNuQixPQUVKLEdBQUksQ0FDQSxJQUFNLEVBQWUsS0FBSyxNQUFNLENBQWMsRUFHOUMsR0FGaUIsSUFBSSxHQUFzQixtQkFBbUIsQ0FBWSxFQUU3RCxRQUFRLEVBQ2pCLE9BQU8sSUFBSSxHQUFzQixtQkFBbUIsQ0FBWSxFQUVwRSxPQUVKLE1BQU8sRUFBTyxDQUNWLEdBQUksYUFBaUIsR0FBc0Isd0JBQ3ZDLE1BQU0sRUFFVixNQUFNLElBQUksR0FBc0Isd0JBQXdCLGtEQUFrRCxHQUFnQixTQU8zSCxhQUFZLENBQUMsRUFBUyxDQUd6QixJQUFNLEVBQWEsRUFBUSxNQUFNLHVCQUF1QixFQUN4RCxJQUFLLEVBQ0QsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLHlCQUErQixFQUd6RSxRQUFTLEVBQUksRUFBRyxFQUFJLEVBQVcsT0FBUSxJQUNuQyxHQUFJLEVBQVcsR0FBRyxLQUFPLEtBQU8sRUFBVyxHQUFHLE1BQU0sRUFBRSxJQUFNLElBQ3hELEVBQVcsR0FBSyxFQUFXLEdBQUcsTUFBTSxFQUFHLEVBQUUsRUFHakQsT0FBTyxFQUVmLENBQ1EseUJBQXVCLHVCQzdJL0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHdCQUE4QixvQkFBdUIsT0FDN0QsSUFBTSxTQUNBLFVBQ0EsVUFJTixNQUFNLFlBQXdCLEtBQU0sQ0FDaEMsV0FBVyxDQUFDLEVBQVMsRUFBTSxDQUN2QixNQUFNLHlDQUF5Qyx3QkFBMkIsSUFBVSxFQUNwRixLQUFLLEtBQU8sRUFDWixPQUFPLGVBQWUsS0FBTSxXQUFXLFNBQVMsRUFFeEQsQ0FDUSxvQkFBa0IsSUFJMUIsSUFBTSxJQUFvQyxNQUlwQyxJQUFvQyxLQUlwQyxJQUFvQyxPQUtwQyxJQUE0Qyw0Q0FJNUMsSUFBNkIsRUF3RG5DLE1BQU0sWUFBNEIsSUFBcUIseUJBQTBCLENBWTdFLFdBQVcsQ0FBQyxFQUFTLEVBQW1CLENBQ3BDLE1BQU0sRUFBUyxDQUFpQixFQUNoQyxJQUFLLEVBQVEsa0JBQWtCLFdBQzNCLE1BQU0sSUFBSSxNQUFNLHVEQUF1RCxFQUczRSxHQURBLEtBQUssUUFBVSxFQUFRLGtCQUFrQixXQUFXLFNBQy9DLEtBQUssUUFDTixNQUFNLElBQUksTUFBTSx1REFBdUQsRUFHM0UsR0FBSSxFQUFRLGtCQUFrQixXQUFXLGlCQUFtQixPQUN4RCxLQUFLLGNBQWdCLElBSXJCLFFBREEsS0FBSyxjQUFnQixFQUFRLGtCQUFrQixXQUFXLGVBQ3RELEtBQUssY0FBZ0IsS0FDckIsS0FBSyxjQUFnQixJQUNyQixNQUFNLElBQUksTUFBTSwyQkFBMkIsV0FDcEMsbUJBQWlELEVBR2hFLEtBQUssV0FBYSxFQUFRLGtCQUFrQixXQUFXLFlBQ3ZELEtBQUssUUFBVSxJQUFJLElBQXlCLHFCQUFxQixDQUM3RCxRQUFTLEtBQUssUUFDZCxjQUFlLEtBQUssY0FDcEIsV0FBWSxLQUFLLFVBQ3JCLENBQUMsRUFDRCxLQUFLLHFCQUF1QixrQkFrQjFCLHFCQUFvQixFQUFHLENBRXpCLEdBQUksUUFBUSxJQUFJLE9BQStDLElBQzNELE1BQU0sSUFBSSxNQUFNLHFKQUVJLEVBRXhCLElBQUksRUFBcUIsT0FFekIsR0FBSSxLQUFLLFdBQ0wsRUFBcUIsTUFBTSxLQUFLLFFBQVEsdUJBQXVCLEVBR25FLElBQUssRUFBb0IsQ0FFckIsSUFBTSxFQUFTLElBQUksSUFLbkIsR0FKQSxFQUFPLElBQUksbUNBQW9DLEtBQUssUUFBUSxFQUM1RCxFQUFPLElBQUkscUNBQXNDLEtBQUssZ0JBQWdCLEVBRXRFLEVBQU8sSUFBSSxzQ0FBdUMsR0FBRyxFQUNqRCxLQUFLLFdBQ0wsRUFBTyxJQUFJLHNDQUF1QyxLQUFLLFVBQVUsRUFFckUsSUFBTSxFQUFzQixLQUFLLHVCQUF1QixFQUN4RCxHQUFJLEVBQ0EsRUFBTyxJQUFJLDZDQUE4QyxDQUFtQixFQUVoRixFQUNJLE1BQU0sS0FBSyxRQUFRLCtCQUErQixDQUFNLEVBRWhFLEdBQUksRUFBbUIsUUFBVSxJQUM3QixNQUFNLElBQUksTUFBTSxrRkFBa0YsTUFBNkIsRUFHbkksSUFBSyxFQUFtQixRQUNwQixNQUFNLElBQUksSUFBZ0IsRUFBbUIsYUFBYyxFQUFtQixTQUFTLEVBRzNGLEdBQUksS0FBSyxZQUNMLElBQUssRUFBbUIsZUFDcEIsTUFBTSxJQUFJLElBQXNCLGdDQUFnQyx3SkFBd0osRUFJaE8sR0FBSSxFQUFtQixVQUFVLEVBQzdCLE1BQU0sSUFBSSxNQUFNLGlDQUFpQyxFQUdyRCxPQUFPLEVBQW1CLGFBRWxDLENBQ1Esd0JBQXNCLHdCQ3hNOUIsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELDBCQUE2QixPQUNyQyxJQUFNLFNBQ0EsVUFDQSxVQUNBLFNBSU4sTUFBTSxHQUFzQixDQUN4QixXQUFXLEVBQUcsQ0FDVixNQUFNLElBQUksTUFBTSxnUUFLeUIsUUFldEMsU0FBUSxDQUFDLEVBQVMsRUFBbUIsQ0FDeEMsSUFBSSxFQUFJLEVBQ1IsR0FBSSxHQUFXLEVBQVEsT0FBUyxJQUFxQixzQkFDakQsSUFBSyxFQUFLLEVBQVEscUJBQXVCLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxlQUN6RSxPQUFPLElBQUksSUFBWSxVQUFVLEVBQVMsQ0FBaUIsRUFFMUQsU0FBSyxFQUFLLEVBQVEscUJBQXVCLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxXQUM5RSxPQUFPLElBQUksSUFBd0Isb0JBQW9CLEVBQVMsQ0FBaUIsRUFHakYsWUFBTyxJQUFJLElBQXFCLG1CQUFtQixFQUFTLENBQWlCLEVBSWpGLFlBQU8sS0FHbkIsQ0FDUSwwQkFBd0Isd0JDakRoQyxPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsd0NBQThDLDBDQUE2QyxPQUNuRyxJQUFNLFNBQ0EsVUFDQSxTQUNBLGlCQUNBLFNBSUUsMENBQXdDLG1DQUNoRCxJQUFNLElBQW9CLDZDQUsxQixNQUFNLFlBQTZDLElBQWUsc0JBQXVCLENBUXJGLFdBQVcsQ0FBQyxFQUFLLEVBQWEsRUFBc0IsQ0FDaEQsTUFBTSxDQUFvQixFQUMxQixLQUFLLElBQU0sRUFDWCxLQUFLLFlBQWMsT0FXakIsYUFBWSxDQUFDLEVBQWMsRUFBbUIsQ0FDaEQsSUFBTSxFQUFTLElBQUksZ0JBQWdCLENBQy9CLFdBQVksZ0JBQ1osY0FBZSxDQUNuQixDQUFDLEVBQ0ssRUFBVSxDQUNaLGVBQWdCLHVDQUNiLENBQ1AsRUFDTSxFQUFPLElBQ04sSUFBcUMsYUFDeEMsSUFBSyxLQUFLLElBQ1YsT0FBUSxPQUNSLFVBQ0EsS0FBTSxFQUFPLFNBQVMsRUFDdEIsYUFBYyxNQUNsQixFQUVBLEtBQUssaUNBQWlDLENBQUksRUFDMUMsR0FBSSxDQUNBLElBQU0sRUFBVyxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUksRUFFOUMsRUFBdUIsRUFBUyxLQUV0QyxPQURBLEVBQXFCLElBQU0sRUFDcEIsRUFFWCxNQUFPLEVBQU8sQ0FFVixHQUFJLGFBQWlCLElBQVMsYUFBZSxFQUFNLFNBQy9DLE1BQVUsSUFBZSwrQkFBZ0MsRUFBTSxTQUFTLEtBRXhFLENBQUssRUFHVCxNQUFNLEdBR2xCLENBT0EsTUFBTSxZQUE0QyxJQUFhLFVBQVcsQ0FZdEUsV0FBVyxDQUFDLEVBQVMsRUFBbUIsQ0FDcEMsSUFBSSxFQUNKLE1BQU0sSUFBSyxLQUFZLENBQWtCLENBQUMsRUFDMUMsR0FBSSxFQUFRLGdCQUNSLEtBQUssZUFBaUIsRUFBUSxnQkFFbEMsS0FBSyxhQUFlLEVBQVEsY0FDNUIsSUFBTSxFQUFhLENBQ2YsdUJBQXdCLFFBQ3hCLFNBQVUsRUFBUSxVQUNsQixhQUFjLEVBQVEsYUFDMUIsRUFRQSxHQVBBLEtBQUsscUNBQ0QsSUFBSSxLQUFzQyxFQUFLLEVBQVEsYUFBZSxNQUFRLElBQVksT0FBSSxFQUFLLElBQWtCLFFBQVEsbUJBQW9CLEtBQUssY0FBYyxFQUFHLEtBQUssWUFBYSxDQUFVLEVBQ3ZNLEtBQUssa0JBQW9CLEtBQ3pCLEtBQUssZUFBaUIsRUFBUSxpQkFJMUIsT0FBUSxJQUFzQixNQUFRLElBQTJCLE9BQVMsT0FBSSxFQUFrQiwrQkFBaUMsU0FDakksS0FBSyw0QkFBOEIsSUFBcUIsdUJBR3hELFVBQUssNEJBQThCLEVBQzlCLDRCQUVULEtBQUsseUJBQTJCLElBQXNCLE1BQVEsSUFBMkIsT0FBUyxPQUFJLEVBQWtCLDRCQUV0SCxlQUFjLEVBQUcsQ0FFbkIsSUFBSyxLQUFLLG1CQUFxQixLQUFLLFVBQVUsS0FBSyxpQkFBaUIsRUFDaEUsTUFBTSxLQUFLLHdCQUF3QixFQUd2QyxNQUFPLENBQ0gsTUFBTyxLQUFLLGtCQUFrQixhQUM5QixJQUFLLEtBQUssa0JBQWtCLEdBQ2hDLE9BRUUsa0JBQWlCLEVBQUcsQ0FFdEIsSUFBTSxFQUFVLENBQ1osY0FBZSxXQUZTLE1BQU0sS0FBSyxlQUFlLEdBRUwsT0FDakQsRUFDQSxPQUFPLEtBQUsseUJBQXlCLENBQU8sRUFFaEQsT0FBTyxDQUFDLEVBQU0sRUFBVSxDQUNwQixHQUFJLEVBQ0EsS0FBSyxhQUFhLENBQUksRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLENBQUMsRUFBRyxLQUFLLENBQ3RELE9BQU8sRUFBUyxFQUFHLEVBQUUsUUFBUSxFQUNoQyxFQUdELFlBQU8sS0FBSyxhQUFhLENBQUksT0FVL0IsYUFBWSxDQUFDLEVBQU0sRUFBZ0IsR0FBTyxDQUM1QyxJQUFJLEVBQ0osR0FBSSxDQUNBLElBQU0sRUFBaUIsTUFBTSxLQUFLLGtCQUFrQixFQUVwRCxHQURBLEVBQUssUUFBVSxFQUFLLFNBQVcsQ0FBQyxFQUM1QixHQUFrQixFQUFlLHVCQUNqQyxFQUFLLFFBQVEsdUJBQ1QsRUFBZSx1QkFFdkIsR0FBSSxHQUFrQixFQUFlLGNBQ2pDLEVBQUssUUFBUSxjQUFnQixFQUFlLGNBRWhELEVBQVcsTUFBTSxLQUFLLFlBQVksUUFBUSxDQUFJLEVBRWxELE1BQU8sRUFBRyxDQUNOLElBQU0sRUFBTSxFQUFFLFNBQ2QsR0FBSSxFQUFLLENBQ0wsSUFBTSxFQUFhLEVBQUksT0FNakIsRUFBbUIsRUFBSSxPQUFPLGdCQUFnQixJQUFPLFNBRTNELElBQUssSUFEYSxJQUFlLEtBQU8sSUFBZSxPQUdsRCxHQUNELEtBQUssc0JBRUwsT0FEQSxNQUFNLEtBQUssd0JBQXdCLEVBQzVCLE1BQU0sS0FBSyxhQUFhLEVBQU0sRUFBSSxFQUdqRCxNQUFNLEVBRVYsT0FBTyxPQU1MLHdCQUF1QixFQUFHLENBRTVCLElBQU0sRUFBa0IsTUFBTSxLQUFLLHFDQUFxQyxhQUFhLEtBQUssWUFBWSxFQU10RyxHQUxBLEtBQUssa0JBQW9CLENBQ3JCLGFBQWMsRUFBZ0IsYUFDOUIsWUFBYSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUksRUFBZ0IsV0FBYSxLQUNqRSxJQUFLLEVBQWdCLEdBQ3pCLEVBQ0ksRUFBZ0IsZ0JBQWtCLE9BQ2xDLEtBQUssYUFBZSxFQUFnQixjQUV4QyxPQUFPLEtBQUssa0JBUWhCLFNBQVMsQ0FBQyxFQUFhLENBQ25CLElBQU0sRUFBTSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQy9CLE9BQU8sRUFBWSxZQUNiLEdBQU8sRUFBWSxZQUFjLEtBQUssNEJBQ3RDLEdBRWQsQ0FDUSx3Q0FBc0MsdUJDaE85QyxJQUFJLEdBQTBCLElBQVEsR0FBSyx3QkFBMkIsUUFBUyxDQUFDLEVBQVUsRUFBTyxFQUFNLEVBQUcsQ0FDdEcsR0FBSSxJQUFTLE1BQVEsRUFBRyxNQUFNLElBQUksVUFBVSwrQ0FBK0MsRUFDM0YsR0FBSSxPQUFPLElBQVUsV0FBYSxJQUFhLElBQVUsR0FBSyxFQUFNLElBQUksQ0FBUSxFQUFHLE1BQU0sSUFBSSxVQUFVLDBFQUEwRSxFQUNqTCxPQUFPLElBQVMsSUFBTSxFQUFJLElBQVMsSUFBTSxFQUFFLEtBQUssQ0FBUSxFQUFJLEVBQUksRUFBRSxNQUFRLEVBQU0sSUFBSSxDQUFRLEdBRTVGLElBQTBCLElBQVEsR0FBSyx3QkFBMkIsUUFBUyxDQUFDLEVBQVUsRUFBTyxFQUFPLEVBQU0sRUFBRyxDQUM3RyxHQUFJLElBQVMsSUFBSyxNQUFNLElBQUksVUFBVSxnQ0FBZ0MsRUFDdEUsR0FBSSxJQUFTLE1BQVEsRUFBRyxNQUFNLElBQUksVUFBVSwrQ0FBK0MsRUFDM0YsR0FBSSxPQUFPLElBQVUsV0FBYSxJQUFhLElBQVUsR0FBSyxFQUFNLElBQUksQ0FBUSxFQUFHLE1BQU0sSUFBSSxVQUFVLHlFQUF5RSxFQUNoTCxPQUFRLElBQVMsSUFBTSxFQUFFLEtBQUssRUFBVSxDQUFLLEVBQUksRUFBSSxFQUFFLE1BQVEsRUFBUSxFQUFNLElBQUksRUFBVSxDQUFLLEVBQUksR0FFcEcsR0FBdUIsR0FBK0IsR0FBbUMsSUFDN0YsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsV0FBYSxHQUFRLDRCQUE4QixHQUFRLG9CQUEyQixPQUM5RixJQUFNLHdCQUNBLFlBQ0EsUUFDQSxhQUNBLGVBQ0EsU0FDQSxTQUNBLFVBQ0EsVUFDQSxVQUNBLFNBQ0EsVUFDQSxTQUNBLFVBQ0EsUUFDQSxTQUNBLFVBQ0EsU0FDTixHQUFRLG9CQUFzQiwyRUFDOUIsR0FBUSw0QkFBOEIsQ0FDbEMseUJBQTBCLHNHQUMxQixvQkFBcUI7QUFBQTtBQUFBLDhEQUdyQixxQkFBc0I7QUFBQTtBQUFBLDhEQUd0QixhQUFjLHVJQUNkLHlCQUEwQjtBQUFBO0FBQUEsd0VBRzlCLEVBQ0EsTUFBTSxHQUFXLElBR1QsTUFBSyxFQUFHLENBQ1IsT0FBTyxLQUFLLFdBYWhCLFdBQVcsQ0FBQyxFQUFPLENBQUMsRUFBRyxDQXdCbkIsR0F2QkEsR0FBc0IsSUFBSSxJQUFJLEVBTTlCLEtBQUssV0FBYSxPQUVsQixLQUFLLFlBQWMsS0FDbkIsS0FBSyxpQkFBbUIsS0FJeEIsR0FBOEIsSUFBSSxLQUFNLElBQUksRUFDNUMsS0FBSyxjQUFnQixDQUFDLEVBQ3RCLEtBQUssaUJBQW1CLEVBQUssV0FBYSxLQUMxQyxLQUFLLGlCQUFtQixFQUFLLFlBQWMsS0FDM0MsS0FBSyxZQUFjLEVBQUssYUFBZSxFQUFLLFFBQzVDLEtBQUssT0FBUyxFQUFLLE9BQ25CLEtBQUssY0FBZ0IsRUFBSyxlQUFpQixDQUFDLEVBQzVDLEtBQUssWUFBYyxFQUFLLGFBQWUsS0FDdkMsS0FBSyxPQUFTLEVBQUssUUFBVSxLQUFLLGNBQWMsUUFBVSxLQUV0RCxLQUFLLFNBQVcsS0FBSyxhQUFlLEtBQUssY0FBYyxhQUN2RCxNQUFNLElBQUksV0FBVyxHQUFRLDRCQUE0Qix3QkFBd0IsRUFFckYsR0FBSSxFQUFLLGVBQ0wsS0FBSyxjQUFjLGVBQWlCLEVBQUssZUFNakQsaUJBQWlCLENBQUMsRUFBUSxDQUN0QixFQUFPLG1CQUFxQixLQUFLLG1CQUNqQyxFQUFPLHNCQUF3QixLQUFLLHNCQUNwQyxFQUFPLGNBQWdCLEtBQUssY0FFaEMsWUFBWSxDQUFDLEVBQVUsQ0FDbkIsR0FBSSxFQUNBLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxLQUFLLEVBQVMsS0FBTSxDQUFDLEVBQUcsQ0FBUSxFQUc5RCxZQUFPLEtBQUssa0JBQWtCLE9BV2hDLHFCQUFvQixFQUFHLENBQ3pCLEdBQUksQ0FDQSxPQUFPLE1BQU0sS0FBSyxhQUFhLEVBRW5DLE1BQU8sRUFBRyxDQUNOLEdBQUksYUFBYSxPQUNiLEVBQUUsVUFBWSxHQUFRLDRCQUE0QixvQkFDbEQsT0FBTyxLQUdQLFdBQU0sUUFlWixzQkFBcUIsRUFBRyxDQUMxQixJQUFJLEVBQVksS0FNaEIsR0FMQSxJQUFjLEVBQVksTUFBTSxLQUFLLHVCQUF1QixHQUM1RCxJQUFjLEVBQVksTUFBTSxLQUFLLGlCQUFpQixHQUN0RCxJQUFjLEVBQVksTUFBTSxLQUFLLDJCQUEyQixHQUNoRSxJQUFjLEVBQVksTUFBTSxLQUFLLGdCQUFnQixHQUNyRCxJQUFjLEVBQVksTUFBTSxLQUFLLGtDQUFrQyxHQUNuRSxFQUVBLE9BREEsS0FBSyxpQkFBbUIsRUFDakIsRUFHUCxXQUFNLElBQUksTUFBTSxHQUFRLDRCQUE0QixtQkFBbUIsT0FHekUsa0JBQWlCLEVBQUcsQ0FDdEIsR0FBSSxLQUFLLGlCQUNMLE9BQU8sS0FBSyxpQkFFaEIsSUFBSyxLQUFLLHNCQUNOLEtBQUssc0JBQXdCLEtBQUssc0JBQXNCLEVBRTVELE9BQU8sS0FBSywyQkFRVixvQ0FBbUMsRUFBRyxDQUN4QyxJQUFJLEVBQ0osSUFBSSxFQUNKLEdBQUksQ0FDQSxFQUFpQixNQUFNLEdBQVksU0FBUyxpQkFBaUIsRUFDN0QsSUFBbUIsRUFBaUIsSUFBYSxrQkFFckQsTUFBTyxFQUFHLENBQ04sR0FBSSxLQUFPLEVBQUssSUFBTSxNQUFRLElBQVcsT0FBUyxPQUFJLEVBQUUsWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsVUFBWSxJQUNsSCxFQUFpQixJQUFhLGlCQUc5QixXQUFNLEVBR2QsT0FBTyxPQVdMLGtCQUFpQixFQUFHLENBQ3RCLElBQUksRUFBcUIsSUFBTyx1QkFBd0IsS0FBSyxhQUFhLEVBQUUsSUFBSSxpQkFBaUIsRUFDakcsR0FBSSxDQUNBLElBQW1CLE1BQVEsSUFBd0IsU0FBc0IsR0FBa0IsTUFBTSxLQUFLLFVBQVUsR0FBRyxnQkFFdkgsTUFBTyxFQUFJLENBRVAsSUFBbUIsTUFBUSxJQUF3QixTQUFzQixFQUFpQixJQUFhLGtCQUUzRyxPQUFPLEVBTVgsWUFBWSxFQUFHLENBQ1gsT0FBTyxLQUFLLFFBQVUsS0FBSyxjQUUvQixxQkFBcUIsQ0FBQyxFQUFvQixDQUFDLEVBQUcsRUFBVSxDQUNwRCxJQUFJLEVBQ0osR0FBSSxPQUFPLElBQXNCLFdBQzdCLEVBQVcsRUFHWCxPQUFVLEVBRWQsR0FBSSxFQUNBLEtBQUssMkJBQTJCLENBQU8sRUFBRSxLQUFLLEtBQUssRUFBUyxLQUFNLEVBQUUsV0FBWSxFQUFFLFNBQVMsRUFBRyxDQUFRLEVBR3RHLFlBQU8sS0FBSywyQkFBMkIsQ0FBTyxPQUdoRCwyQkFBMEIsQ0FBQyxFQUFVLENBQUMsRUFBRyxDQUkzQyxHQUFJLEtBQUssaUJBRUwsT0FBTyxNQUFNLEdBQXVCLEtBQU0sR0FBdUIsSUFBSyxFQUFpQyxFQUFFLEtBQUssS0FBTSxLQUFLLGlCQUFrQixJQUFJLEVBRW5KLElBQUksRUFNSixHQUZBLEVBQ0ksTUFBTSxLQUFLLHFEQUFxRCxDQUFPLEVBQ3ZFLEVBQVksQ0FDWixHQUFJLGFBQXNCLEdBQVksSUFDbEMsRUFBVyxPQUFTLEtBQUssT0FFeEIsUUFBSSxhQUFzQixHQUFxQiwwQkFDaEQsRUFBVyxPQUFTLEtBQUssYUFBYSxFQUUxQyxPQUFPLE1BQU0sR0FBdUIsS0FBTSxHQUF1QixJQUFLLEVBQWlDLEVBQUUsS0FBSyxLQUFNLENBQVUsRUFLbEksR0FGQSxFQUNJLE1BQU0sS0FBSywrQ0FBK0MsQ0FBTyxFQUNqRSxFQUFZLENBQ1osR0FBSSxhQUFzQixHQUFZLElBQ2xDLEVBQVcsT0FBUyxLQUFLLE9BRXhCLFFBQUksYUFBc0IsR0FBcUIsMEJBQ2hELEVBQVcsT0FBUyxLQUFLLGFBQWEsRUFFMUMsT0FBTyxNQUFNLEdBQXVCLEtBQU0sR0FBdUIsSUFBSyxFQUFpQyxFQUFFLEtBQUssS0FBTSxDQUFVLEVBR2xJLEdBQUksTUFBTSxLQUFLLFlBQVksRUFFdkIsT0FEQSxFQUFRLE9BQVMsS0FBSyxhQUFhLEVBQzVCLE1BQU0sR0FBdUIsS0FBTSxHQUF1QixJQUFLLEVBQWlDLEVBQUUsS0FBSyxLQUFNLElBQUksSUFBZ0IsUUFBUSxDQUFPLENBQUMsRUFFNUosTUFBTSxJQUFJLE1BQU0sR0FBUSw0QkFBNEIsWUFBWSxPQVU5RCxZQUFXLEVBQUcsQ0FDaEIsR0FBSSxLQUFLLGFBQWUsT0FDcEIsS0FBSyxXQUNELEdBQVksZ0JBQWdCLEdBQU0sTUFBTSxHQUFZLFlBQVksRUFFeEUsT0FBTyxLQUFLLGdCQU9WLHFEQUFvRCxDQUFDLEVBQVMsQ0FDaEUsSUFBTSxFQUFrQixRQUFRLElBQUksZ0NBQ2hDLFFBQVEsSUFBSSwrQkFDaEIsSUFBSyxHQUFtQixFQUFnQixTQUFXLEVBQy9DLE9BQU8sS0FFWCxHQUFJLENBQ0EsT0FBTyxLQUFLLHVDQUF1QyxFQUFpQixDQUFPLEVBRS9FLE1BQU8sRUFBRyxDQUNOLEdBQUksYUFBYSxNQUNiLEVBQUUsUUFBVSw0R0FBNEcsRUFBRSxVQUU5SCxNQUFNLFFBUVIsK0NBQThDLENBQUMsRUFBUyxDQUUxRCxJQUFJLEVBQVcsS0FDZixHQUFJLEtBQUssV0FBVyxFQUVoQixFQUFXLFFBQVEsSUFBSSxRQUV0QixLQUVELElBQU0sRUFBTyxRQUFRLElBQUksS0FDekIsR0FBSSxFQUNBLEVBQVcsSUFBSyxLQUFLLEVBQU0sU0FBUyxFQUk1QyxHQUFJLEdBRUEsR0FEQSxFQUFXLElBQUssS0FBSyxFQUFVLFNBQVUsc0NBQXNDLEdBQzFFLEdBQUcsV0FBVyxDQUFRLEVBQ3ZCLEVBQVcsS0FJbkIsSUFBSyxFQUNELE9BQU8sS0FJWCxPQURlLE1BQU0sS0FBSyx1Q0FBdUMsRUFBVSxDQUFPLE9BU2hGLHVDQUFzQyxDQUFDLEVBQVUsRUFBVSxDQUFDLEVBQUcsQ0FFakUsSUFBSyxHQUFZLEVBQVMsU0FBVyxFQUNqQyxNQUFNLElBQUksTUFBTSwyQkFBMkIsRUFJL0MsR0FBSSxDQUlBLEdBREEsRUFBVyxHQUFHLGFBQWEsQ0FBUSxHQUM5QixHQUFHLFVBQVUsQ0FBUSxFQUFFLE9BQU8sRUFDL0IsTUFBTSxJQUFJLE1BR2xCLE1BQU8sRUFBSyxDQUNSLEdBQUksYUFBZSxNQUNmLEVBQUksUUFBVSxlQUFlLDBDQUFpRCxFQUFJLFVBRXRGLE1BQU0sRUFHVixJQUFNLEVBQWEsR0FBRyxpQkFBaUIsQ0FBUSxFQUMvQyxPQUFPLEtBQUssV0FBVyxFQUFZLENBQU8sRUFPOUMsb0JBQW9CLENBQUMsRUFBTSxDQUN2QixJQUFJLEVBQUksRUFBSSxFQUFJLEVBQ2hCLElBQUssRUFDRCxNQUFNLElBQUksTUFBTSxzRUFBc0UsRUFFMUYsR0FBSSxFQUFLLE9BQVMsR0FBZSwwQkFDN0IsTUFBTSxJQUFJLE1BQU0sK0NBQStDLEdBQWUsaUNBQWlDLEVBRW5ILElBQUssRUFBSyxtQkFDTixNQUFNLElBQUksTUFBTSxzRUFBc0UsRUFFMUYsSUFBSyxFQUFLLGtDQUNOLE1BQU0sSUFBSSxNQUFNLHFGQUFxRixFQUV6RyxJQUFNLEVBQWUsS0FBSyxTQUFTLEVBQUssa0JBQWtCLEVBQzFELEtBQU0sRUFBSyxFQUFLLHFDQUF1QyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsUUFBVSxJQUtqRyxNQUFNLElBQUksV0FBVyxpQ0FBaUMsRUFBSyxtQ0FBbUMsRUFHbEcsSUFBTSxHQUFtQixHQUFNLEVBQUssMERBQTBELEtBQUssRUFBSyxpQ0FBaUMsS0FBTyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsVUFBWSxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsT0FDcE8sSUFBSyxFQUNELE1BQU0sSUFBSSxXQUFXLHdDQUF3QyxFQUFLLG1DQUFtQyxFQUV6RyxJQUFNLEdBQWdCLEVBQUssS0FBSyxhQUFhLEtBQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxDQUFDLEVBQ2xGLE9BQU8sSUFBSSxHQUFlLGFBQWEsSUFDaEMsRUFDSCxlQUNBLGtCQUNBLGFBQWMsTUFBTSxRQUFRLENBQVksRUFBSSxFQUFlLENBQUMsQ0FBWSxDQUM1RSxDQUFDLEVBWUwsUUFBUSxDQUFDLEVBQU0sRUFBVSxDQUFDLEVBQUcsQ0FDekIsSUFBSSxFQUVFLEVBQThCLElBQU8sdUJBQXdCLENBQU8sRUFBRSxJQUFJLGlCQUFpQixFQUNqRyxHQUFJLEVBQUssT0FBUyxJQUFnQiwwQkFDOUIsRUFBUyxJQUFJLElBQWdCLGtCQUFrQixDQUFPLEVBQ3RELEVBQU8sU0FBUyxDQUFJLEVBRW5CLFFBQUksRUFBSyxPQUFTLEdBQWUsMEJBQ2xDLEVBQVMsS0FBSyxxQkFBcUIsQ0FBSSxFQUV0QyxRQUFJLEVBQUssT0FBUyxHQUFxQixzQkFDeEMsRUFBUyxJQUFpQixzQkFBc0IsU0FBUyxFQUFNLENBQU8sRUFDdEUsRUFBTyxPQUFTLEtBQUssYUFBYSxFQUVqQyxRQUFJLEVBQUssT0FBUyxJQUFzQyxzQ0FDekQsRUFBUyxJQUFJLElBQXNDLG9DQUFvQyxFQUFNLENBQU8sRUFHcEcsT0FBUSxPQUFTLEtBQUssT0FDdEIsRUFBUyxJQUFJLEdBQVksSUFBSSxDQUFPLEVBQ3BDLEtBQUssa0JBQWtCLENBQU0sRUFDN0IsRUFBTyxTQUFTLENBQUksRUFFeEIsR0FBSSxFQUNBLEVBQU8sZUFBaUIsRUFFNUIsT0FBTyxFQVNYLG9CQUFvQixDQUFDLEVBQU0sRUFBUyxDQUNoQyxJQUFNLEVBQVMsS0FBSyxTQUFTLEVBQU0sQ0FBTyxFQUkxQyxPQUZBLEtBQUssWUFBYyxFQUNuQixLQUFLLGlCQUFtQixFQUNqQixFQUVYLFVBQVUsQ0FBQyxFQUFhLEVBQW9CLENBQUMsRUFBRyxFQUFVLENBQ3RELElBQUksRUFBVSxDQUFDLEVBQ2YsR0FBSSxPQUFPLElBQXNCLFdBQzdCLEVBQVcsRUFHWCxPQUFVLEVBRWQsR0FBSSxFQUNBLEtBQUssZ0JBQWdCLEVBQWEsQ0FBTyxFQUFFLEtBQUssS0FBSyxFQUFTLEtBQU0sQ0FBQyxFQUFHLENBQVEsRUFHaEYsWUFBTyxLQUFLLGdCQUFnQixFQUFhLENBQU8sRUFHeEQsZUFBZSxDQUFDLEVBQWEsRUFBUyxDQUNsQyxPQUFPLElBQUksUUFBUSxDQUFDLEVBQVMsSUFBVyxDQUNwQyxJQUFLLEVBQ0QsTUFBTSxJQUFJLE1BQU0sNERBQTRELEVBRWhGLElBQU0sRUFBUyxDQUFDLEVBQ2hCLEVBQ0ssWUFBWSxNQUFNLEVBQ2xCLEdBQUcsUUFBUyxDQUFNLEVBQ2xCLEdBQUcsT0FBUSxLQUFTLEVBQU8sS0FBSyxDQUFLLENBQUMsRUFDdEMsR0FBRyxNQUFPLElBQU0sQ0FDakIsR0FBSSxDQUNBLEdBQUksQ0FDQSxJQUFNLEVBQU8sS0FBSyxNQUFNLEVBQU8sS0FBSyxFQUFFLENBQUMsRUFDakMsRUFBSSxLQUFLLHFCQUFxQixFQUFNLENBQU8sRUFDakQsT0FBTyxFQUFRLENBQUMsRUFFcEIsTUFBTyxFQUFLLENBR1IsSUFBSyxLQUFLLFlBQ04sTUFBTSxFQUNWLElBQU0sRUFBUyxJQUFJLEdBQVksSUFBSSxJQUM1QixLQUFLLGNBQ1IsUUFBUyxLQUFLLFdBQ2xCLENBQUMsRUFHRCxPQUZBLEtBQUssaUJBQW1CLEVBQ3hCLEtBQUssa0JBQWtCLENBQU0sRUFDdEIsRUFBUSxDQUFNLEdBRzdCLE1BQU8sRUFBSyxDQUNSLE9BQU8sRUFBTyxDQUFHLEdBRXhCLEVBQ0osRUFVTCxVQUFVLENBQUMsRUFBUSxFQUFVLENBQUMsRUFBRyxDQUM3QixPQUFPLElBQUksR0FBWSxJQUFJLElBQUssRUFBUyxRQUFPLENBQUMsRUFNckQsVUFBVSxFQUFHLENBQ1QsSUFBTSxFQUFNLElBQUcsU0FBUyxFQUN4QixHQUFJLEdBQU8sRUFBSSxRQUFVLEdBQ3JCLEdBQUksRUFBSSxVQUFVLEVBQUcsQ0FBQyxFQUFFLFlBQVksSUFBTSxNQUN0QyxNQUFPLEdBR2YsTUFBTyxRQUtMLDJCQUEwQixFQUFHLENBQy9CLE9BQU8sSUFBSSxRQUFRLEtBQVcsQ0FDdEIsSUFBZ0IsS0FBTSw0Q0FBNkMsQ0FBQyxFQUFLLElBQVcsQ0FDcEYsSUFBSyxHQUFPLEVBQ1IsR0FBSSxDQUNBLElBQU0sRUFBWSxLQUFLLE1BQU0sQ0FBTSxFQUFFLGNBQWMsV0FBVyxLQUFLLFFBQ25FLEVBQVEsQ0FBUyxFQUNqQixPQUVKLE1BQU8sRUFBRyxFQUlkLEVBQVEsSUFBSSxFQUNmLEVBQ0osRUFNTCxzQkFBc0IsRUFBRyxDQUNyQixPQUFRLFFBQVEsSUFBSSxnQkFDaEIsUUFBUSxJQUFJLHNCQUNaLFFBQVEsSUFBSSxnQkFDWixRQUFRLElBQUksMEJBTWQsaUJBQWdCLEVBQUcsQ0FDckIsR0FBSSxLQUFLLGlCQUVMLE9BQU8sS0FBSyxpQkFBaUIsVUFHakMsR0FBSSxLQUFLLFlBQWEsQ0FDbEIsSUFBTSxFQUFRLE1BQU0sS0FBSyxVQUFVLEVBQ25DLEdBQUksR0FBUyxFQUFNLFVBQ2YsT0FBTyxFQUFNLFVBSXJCLElBQU0sRUFBSSxNQUFNLEtBQUsscURBQXFELEVBQzFFLEdBQUksRUFDQSxPQUFPLEVBQUUsVUFHVCxZQUFPLFVBTVQsa0NBQWlDLEVBQUcsQ0FDdEMsSUFBSyxLQUFLLGFBQWUsS0FBSyxZQUFZLE9BQVMsR0FBcUIsc0JBQ3BFLE9BQU8sS0FjWCxPQUFPLE1BWk8sTUFBTSxLQUFLLFVBQVUsR0FZaEIsYUFBYSxPQUs5QixnQkFBZSxFQUFHLENBQ3BCLEdBQUksQ0FFQSxPQURVLE1BQU0sR0FBWSxRQUFRLFlBQVksRUFHcEQsTUFBTyxFQUFHLENBRU4sT0FBTyxNQUdmLGNBQWMsQ0FBQyxFQUFVLENBQ3JCLEdBQUksRUFDQSxLQUFLLG9CQUFvQixFQUFFLEtBQUssS0FBSyxFQUFTLEtBQU0sQ0FBQyxFQUFHLENBQVEsRUFHaEUsWUFBTyxLQUFLLG9CQUFvQixPQUdsQyxvQkFBbUIsRUFBRyxDQUN4QixJQUFNLEVBQVMsTUFBTSxLQUFLLFVBQVUsRUFDcEMsR0FBSSxhQUFrQixHQUFlLGFBQ2pDLE1BQU8sQ0FBRSxhQUFjLEVBQU8sbUJBQW1CLENBQUUsRUFFdkQsR0FBSSxhQUFrQixHQUFxQiwwQkFBMkIsQ0FDbEUsSUFBTSxFQUFzQixFQUFPLHVCQUF1QixFQUMxRCxHQUFJLEVBQ0EsTUFBTyxDQUNILGFBQWMsRUFDZCxnQkFBaUIsRUFBTyxjQUM1QixFQUdSLEdBQUksS0FBSyxZQUNMLE1BQU8sQ0FDSCxhQUFjLEtBQUssWUFBWSxhQUMvQixZQUFhLEtBQUssWUFBWSxZQUM5QixnQkFBaUIsS0FBSyxZQUFZLGVBQ3RDLEVBRUosR0FBSSxNQUFNLEtBQUssWUFBWSxFQUFHLENBQzFCLElBQU8sRUFBYyxHQUFtQixNQUFNLFFBQVEsSUFBSSxDQUN0RCxHQUFZLFNBQVMsZ0NBQWdDLEVBQ3JELEtBQUssa0JBQWtCLENBQzNCLENBQUMsRUFDRCxNQUFPLENBQUUsZUFBYyxpQkFBZ0IsRUFFM0MsTUFBTSxJQUFJLE1BQU0sR0FBUSw0QkFBNEIsb0JBQW9CLE9BT3RFLFVBQVMsRUFBRyxDQUNkLEdBQUksS0FBSyxpQkFDTCxPQUFPLEtBQUssaUJBR2hCLElBQXVCLEtBQU0sR0FBK0IsR0FBdUIsS0FBTSxHQUErQixHQUFHLEdBQUssR0FBdUIsS0FBTSxHQUF1QixJQUFLLEdBQTJCLEVBQUUsS0FBSyxJQUFJLEVBQUcsR0FBRyxFQUNyTyxHQUFJLENBQ0EsT0FBTyxNQUFNLEdBQXVCLEtBQU0sR0FBK0IsR0FBRyxTQUVoRixDQUVJLElBQXVCLEtBQU0sR0FBK0IsS0FBTSxHQUFHLFFBUXZFLGlCQUFnQixDQUFDLEVBQWdCLENBQ25DLElBQU0sRUFBUyxNQUFNLEtBQUssVUFBVSxFQUNwQyxLQUFNLGlCQUFrQixHQUNwQixNQUFNLElBQUksTUFBTSwrSkFBK0osRUFFbkwsT0FBTyxJQUFJLElBQWdCLGNBQWMsQ0FBRSxpQkFBZ0IsZ0JBQWlCLENBQU8sQ0FBQyxPQU1sRixlQUFjLEVBQUcsQ0FFbkIsT0FBUSxNQURPLE1BQU0sS0FBSyxVQUFVLEdBQ2YsZUFBZSxHQUFHLFdBTXJDLGtCQUFpQixDQUFDLEVBQUssQ0FFekIsT0FEZSxNQUFNLEtBQUssVUFBVSxHQUN0QixrQkFBa0IsQ0FBRyxPQU9qQyxpQkFBZ0IsQ0FBQyxFQUFNLENBQ3pCLEVBQU8sR0FBUSxDQUFDLEVBQ2hCLElBQU0sRUFBTSxFQUFLLEtBQU8sRUFBSyxJQUV2QixFQUFVLE1BREQsTUFBTSxLQUFLLFVBQVUsR0FDUCxrQkFBa0IsQ0FBRyxFQUVsRCxPQURBLEVBQUssUUFBVSxPQUFPLE9BQU8sRUFBSyxTQUFXLENBQUMsRUFBRyxDQUFPLEVBQ2pELE9BUUwsUUFBTyxDQUFDLEVBQU0sQ0FFaEIsT0FEZSxNQUFNLEtBQUssVUFBVSxHQUN0QixRQUFRLENBQUksRUFLOUIsTUFBTSxFQUFHLENBQ0wsT0FBVyxJQUFZLE9BQVEsT0FhN0IsS0FBSSxDQUFDLEVBQU0sRUFBVSxDQUN2QixJQUFNLEVBQVMsTUFBTSxLQUFLLFVBQVUsRUFDOUIsRUFBVyxNQUFNLEtBQUssa0JBQWtCLEVBSTlDLEdBSEEsRUFDSSxHQUNJLDBCQUEwQixtQ0FDOUIsYUFBa0IsR0FBZSxhQUVqQyxPQURlLE1BQU0sRUFBTyxLQUFLLENBQUksR0FDdkIsV0FFbEIsSUFBTSxFQUFhLElBQVMsYUFBYyxFQUMxQyxHQUFJLGFBQWtCLEdBQVksS0FBTyxFQUFPLElBRTVDLE9BRGEsTUFBTSxFQUFPLEtBQUssRUFBTyxJQUFLLENBQUksRUFHbkQsSUFBTSxFQUFRLE1BQU0sS0FBSyxlQUFlLEVBQ3hDLElBQUssRUFBTSxhQUNQLE1BQU0sSUFBSSxNQUFNLDBDQUEwQyxFQUU5RCxPQUFPLEtBQUssU0FBUyxFQUFRLEVBQU0sYUFBYyxFQUFNLENBQVEsT0FFN0QsU0FBUSxDQUFDLEVBQVEsRUFBaUIsRUFBTSxFQUFVLENBQ3BELElBQU0sRUFBTSxJQUFJLElBQUksRUFBVyxHQUFHLFlBQTBCLEVBWTVELE9BWFksTUFBTSxLQUFLLFFBQVEsQ0FDM0IsT0FBUSxPQUNSLElBQUssRUFBSSxLQUNULEtBQU0sQ0FDRixRQUFTLEVBQU8sdUJBQXVCLENBQUksQ0FDL0MsRUFDQSxNQUFPLEdBQ1AsWUFBYSxDQUNULG1CQUFvQixDQUFDLE1BQU0sQ0FDL0IsQ0FDSixDQUFDLEdBQ1UsS0FBSyxXQUV4QixDQUNBLEdBQVEsV0FBYSxJQUNyQixHQUFnQyxJQUFJLFFBQVcsR0FBd0IsSUFBSSxRQUFXLEdBQW9DLGVBQWUsQ0FBaUMsQ0FBQyxFQUFZLEVBQXlCLFFBQVEsSUFBSSw0QkFBaUMsS0FBTSxDQUMvUCxJQUFNLEVBQVksTUFBTSxLQUFLLHFCQUFxQixFQUNsRCxHQUFJLEVBQ0EsRUFBVyxlQUFpQixFQUdoQyxPQURBLEtBQUssaUJBQW1CLEVBQ2pCLENBQUUsYUFBWSxXQUFVLEdBQ2hDLElBQThCLGVBQWUsQ0FBMkIsRUFBRyxDQUMxRSxHQUFJLEtBQUssWUFDTCxPQUFPLEtBQUsscUJBQXFCLEtBQUssWUFBYSxLQUFLLGFBQWEsRUFFcEUsUUFBSSxLQUFLLFlBQWEsQ0FDdkIsSUFBTSxFQUFXLElBQUssUUFBUSxLQUFLLFdBQVcsRUFDeEMsRUFBUyxHQUFHLGlCQUFpQixDQUFRLEVBQzNDLE9BQU8sTUFBTSxLQUFLLGdCQUFnQixFQUFRLEtBQUssYUFBYSxFQUUzRCxRQUFJLEtBQUssT0FBUSxDQUNsQixJQUFNLEVBQVMsTUFBTSxLQUFLLFdBQVcsS0FBSyxPQUFRLEtBQUssYUFBYSxFQUNwRSxFQUFPLE9BQVMsS0FBSyxPQUNyQixJQUFRLGNBQWUsTUFBTSxHQUF1QixLQUFNLEdBQXVCLElBQUssRUFBaUMsRUFBRSxLQUFLLEtBQU0sQ0FBTSxFQUMxSSxPQUFPLEVBRU4sS0FDRCxJQUFRLGNBQWUsTUFBTSxLQUFLLDJCQUEyQixLQUFLLGFBQWEsRUFDL0UsT0FBTyxJQU1mLElBQVcsbUJBQXFCLElBQWUsdUNDMXpCL0MsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELFlBQWUsT0FDdkIsTUFBTSxHQUFRLENBUVYsV0FBVyxDQUFDLEVBQVUsRUFBTyxDQUN6QixLQUFLLFNBQVcsRUFDaEIsS0FBSyxNQUFRLEVBQ2IsS0FBSyxTQUFXLEVBQ2hCLEtBQUssTUFBUSxFQUtqQixpQkFBaUIsRUFBRyxDQUNoQixNQUFPLENBQ0gsZ0NBQWlDLEtBQUssU0FDdEMsaUNBQWtDLEtBQUssS0FDM0MsRUFFUixDQUNRLFlBQVUsd0JDMUJsQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQscUJBQTJCLDJCQUFpQyxvQ0FBdUMsT0FDM0csSUFBTSxpQkFDQSxTQUNBLFVBSUEsSUFBaUIsa0RBSWpCLElBQXlCLGdEQUl6QixJQUF5QixnREFLdkIsb0NBQWtDLEdBSWxDLDJCQUF5QixPQVdqQyxNQUFNLFlBQXlCLElBQWEsVUFBVyxDQXFCbkQsV0FBVyxDQUFDLEVBQVksRUFBMEIsRUFBbUIsRUFBZ0IsQ0FDakYsTUFBTSxJQUFLLEVBQW1CLGdCQUFlLENBQUMsRUFLOUMsR0FKQSxLQUFLLFdBQWEsRUFDbEIsS0FBSyx5QkFBMkIsRUFHNUIsRUFBeUIsZUFBZSxvQkFBb0IsU0FBVyxFQUN2RSxNQUFNLElBQUksTUFBTSx3REFBd0QsRUFFdkUsUUFBSSxFQUF5QixlQUFlLG9CQUFvQixPQUN6RCxvQ0FDUixNQUFNLElBQUksTUFBTSw4Q0FDRCw0REFBd0QsRUFJM0UsUUFBVyxLQUFRLEVBQXlCLGVBQ3ZDLG9CQUNELEdBQUksRUFBSyxxQkFBcUIsU0FBVyxFQUNyQyxNQUFNLElBQUksTUFBTSxxRUFBcUUsRUFHN0YsS0FBSyxjQUFnQixJQUFJLElBQUksZUFBZSxlQUFlLEtBQUsseUJBQXlCLEVBQ3pGLEtBQUssNEJBQThCLEtBUXZDLGNBQWMsQ0FBQyxFQUFhLENBQ3hCLElBQUssRUFBWSxZQUNiLE1BQU0sSUFBSSxNQUFNLDRFQUNFLEVBRXRCLE1BQU0sZUFBZSxDQUFXLEVBQ2hDLEtBQUssNEJBQThCLE9BRWpDLGVBQWMsRUFBRyxDQUluQixJQUFLLEtBQUssNkJBQ04sS0FBSyxVQUFVLEtBQUssMkJBQTJCLEVBQy9DLE1BQU0sS0FBSyx3QkFBd0IsRUFHdkMsTUFBTyxDQUNILE1BQU8sS0FBSyw0QkFBNEIsYUFDeEMsZUFBZ0IsS0FBSyw0QkFBNEIsWUFDakQsSUFBSyxLQUFLLDRCQUE0QixHQUMxQyxPQVVFLGtCQUFpQixFQUFHLENBRXRCLElBQU0sRUFBVSxDQUNaLGNBQWUsV0FGUyxNQUFNLEtBQUssZUFBZSxHQUVMLE9BQ2pELEVBQ0EsT0FBTyxLQUFLLHlCQUF5QixDQUFPLEVBRWhELE9BQU8sQ0FBQyxFQUFNLEVBQVUsQ0FDcEIsR0FBSSxFQUNBLEtBQUssYUFBYSxDQUFJLEVBQUUsS0FBSyxLQUFLLEVBQVMsS0FBTSxDQUFDLEVBQUcsS0FBSyxDQUN0RCxPQUFPLEVBQVMsRUFBRyxFQUFFLFFBQVEsRUFDaEMsRUFHRCxZQUFPLEtBQUssYUFBYSxDQUFJLE9BVS9CLGFBQVksQ0FBQyxFQUFNLEVBQWdCLEdBQU8sQ0FDNUMsSUFBSSxFQUNKLEdBQUksQ0FDQSxJQUFNLEVBQWlCLE1BQU0sS0FBSyxrQkFBa0IsRUFFcEQsR0FEQSxFQUFLLFFBQVUsRUFBSyxTQUFXLENBQUMsRUFDNUIsR0FBa0IsRUFBZSx1QkFDakMsRUFBSyxRQUFRLHVCQUNULEVBQWUsdUJBRXZCLEdBQUksR0FBa0IsRUFBZSxjQUNqQyxFQUFLLFFBQVEsY0FBZ0IsRUFBZSxjQUVoRCxFQUFXLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FBSSxFQUVsRCxNQUFPLEVBQUcsQ0FDTixJQUFNLEVBQU0sRUFBRSxTQUNkLEdBQUksRUFBSyxDQUNMLElBQU0sRUFBYSxFQUFJLE9BTWpCLEVBQW1CLEVBQUksT0FBTyxnQkFBZ0IsSUFBTyxTQUUzRCxJQUFLLElBRGEsSUFBZSxLQUFPLElBQWUsT0FHbEQsR0FDRCxLQUFLLHNCQUVMLE9BREEsTUFBTSxLQUFLLHdCQUF3QixFQUM1QixNQUFNLEtBQUssYUFBYSxFQUFNLEVBQUksRUFHakQsTUFBTSxFQUVWLE9BQU8sT0FTTCx3QkFBdUIsRUFBRyxDQUM1QixJQUFJLEVBRUosSUFBTSxHQUFnQixNQUFNLEtBQUssV0FBVyxlQUFlLEdBQUcsTUFFeEQsRUFBd0IsQ0FDMUIsVUFBVyxJQUNYLG1CQUFvQixJQUNwQixhQUFjLEVBQ2QsaUJBQWtCLEdBQ3RCLEVBR00sRUFBYyxNQUFNLEtBQUssY0FBYyxjQUFjLEVBQXVCLE9BQVcsS0FBSyx3QkFBd0IsRUFRcEgsSUFBeUIsRUFBSyxLQUFLLFdBQVcsZUFBaUIsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLGNBQWdCLEtBQ25ILEVBQWEsRUFBWSxXQUN6QixJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUksRUFBWSxXQUFhLEtBQ2hELEVBb0JOLE9BbEJBLEtBQUssNEJBQThCLENBQy9CLGFBQWMsRUFBWSxhQUMxQixZQUFhLEVBQ2IsSUFBSyxFQUFZLEdBQ3JCLEVBRUEsS0FBSyxZQUFjLENBQUMsRUFDcEIsT0FBTyxPQUFPLEtBQUssWUFBYSxLQUFLLDJCQUEyQixFQUNoRSxPQUFPLEtBQUssWUFBWSxJQUV4QixLQUFLLEtBQUssU0FBVSxDQUNoQixjQUFlLEtBQ2YsWUFBYSxLQUFLLDRCQUE0QixZQUM5QyxhQUFjLEtBQUssNEJBQTRCLGFBQy9DLFdBQVksU0FDWixTQUFVLElBQ2QsQ0FBQyxFQUVNLEtBQUssNEJBUWhCLFNBQVMsQ0FBQyxFQUF1QixDQUM3QixJQUFNLEVBQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUMvQixPQUFPLEVBQXNCLFlBQ3ZCLEdBQ0UsRUFBc0IsWUFBYyxLQUFLLDRCQUMzQyxHQUVkLENBQ1EscUJBQW1CLHdCQ3ZQM0IsT0FBTyxlQUFlLElBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUF5QixPQUNqQyxJQUFNLFNBUU4sTUFBTSxZQUEwQixJQUFhLFVBQVcsTUFZOUMsUUFBTyxDQUFDLEVBQU0sQ0FDaEIsT0FBTyxLQUFLLFlBQVksUUFBUSxDQUFJLE9BUWxDLGVBQWMsRUFBRyxDQUNuQixNQUFPLENBQUMsT0FRTixrQkFBaUIsRUFBRyxDQUN0QixNQUFPLENBQUMsRUFFaEIsQ0FDUSxzQkFBb0IsSUFDNUIsSUFBTSxJQUFJLElBQUksSUFDZCxJQUFFLGVBQWUscUJDM0RqQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsY0FBcUIsUUFBZSxzQkFBNkIscUJBQTRCLG1CQUEwQix1QkFBOEIsb0JBQTJCLDZCQUFvQyx5QkFBZ0Msc0JBQTZCLG9CQUEyQixhQUFvQixxQkFBNEIsZUFBc0Isd0JBQStCLGdCQUF1Qix1QkFBOEIsZ0JBQXVCLE9BQWMsYUFBb0IsaUJBQXdCLFdBQWtCLFVBQWlCLFdBQWtCLG9CQUEyQixjQUFxQixVQUFpQixlQUFtQixPQWN4cUIsSUFBTSxVQUNOLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWEsV0FBYyxDQUFDLEVBRy9HLG9CQUNBLGVBQ1IsSUFBSSxTQUNKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWEsV0FBYyxDQUFDLEVBQ3ZILE9BQU8sZUFBZSxHQUFTLG1CQUFvQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBYSxpQkFBb0IsQ0FBQyxFQUNuSSxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsVUFBVyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZ0IsUUFBVyxDQUFDLEVBQ3BILElBQUksVUFDSixPQUFPLGVBQWUsR0FBUyxTQUFVLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFZLE9BQVUsQ0FBQyxFQUM5RyxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsVUFBVyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBTSxRQUFXLENBQUMsRUFDMUcsSUFBSSxVQUNKLE9BQU8sZUFBZSxHQUFTLGdCQUFpQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZ0IsY0FBaUIsQ0FBQyxFQUNoSSxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsWUFBYSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBWSxVQUFhLENBQUMsRUFDcEgsSUFBSSxVQUNKLE9BQU8sZUFBZSxHQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQVksSUFBTyxDQUFDLEVBQ3hHLElBQUksVUFDSixPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZSxhQUFnQixDQUFDLEVBQzdILElBQUksU0FDSixPQUFPLGVBQWUsR0FBUyxzQkFBdUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWUsb0JBQXVCLENBQUMsRUFDM0ksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWUsYUFBZ0IsQ0FBQyxFQUM3SCxPQUFPLGVBQWUsR0FBUyx1QkFBd0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWUscUJBQXdCLENBQUMsRUFDN0ksSUFBSSxVQUNKLE9BQU8sZUFBZSxHQUFTLGNBQWUsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWMsWUFBZSxDQUFDLEVBQzFILElBQUksVUFDSixPQUFPLGVBQWUsR0FBUyxvQkFBcUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWdCLGtCQUFxQixDQUFDLEVBQ3hJLElBQUksVUFDSixPQUFPLGVBQWUsR0FBUyxZQUFhLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFZLFVBQWEsQ0FBQyxFQUNwSCxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsbUJBQW9CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFtQixpQkFBb0IsQ0FBQyxFQUN6SSxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMscUJBQXNCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFxQixtQkFBc0IsQ0FBQyxFQUMvSSxJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsd0JBQXlCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFpQixzQkFBeUIsQ0FBQyxFQUNqSixJQUFJLFNBQ0osT0FBTyxlQUFlLEdBQVMsNEJBQTZCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFxQiwwQkFBNkIsQ0FBQyxFQUM3SixJQUFJLFVBQ0osT0FBTyxlQUFlLEdBQVMsbUJBQW9CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUFtQixpQkFBb0IsQ0FBQyxFQUN6SSxJQUFJLFNBQ0osT0FBTyxlQUFlLEdBQVMsc0JBQXVCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxJQUF3QixvQkFBdUIsQ0FBQyxFQUNwSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQXdCLGdCQUFtQixDQUFDLEVBQzVJLElBQUksVUFDSixPQUFPLGVBQWUsR0FBUyxvQkFBcUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLElBQWMsa0JBQXFCLENBQUMsRUFDdEksSUFBSSxTQUNKLE9BQU8sZUFBZSxHQUFTLHFCQUFzQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sSUFBZSxtQkFBc0IsQ0FBQyxFQUN6SSxJQUFNLElBQU8sSUFBSSxJQUFhLFdBQ3RCLFFBQU8sd3pDQ25FZixJQUFNLGFBQ0EsZUFDQSxhQUNBLGlCQUNBLFVBRUEsSUFBVSxJQUFZLFFBRXRCLElBQU8sK0lBR2IsU0FBUyxHQUFNLENBQUMsRUFBSyxDQUNuQixJQUFNLEVBQU0sQ0FBQyxFQUdULEVBQVEsRUFBSSxTQUFTLEVBR3pCLEVBQVEsRUFBTSxRQUFRLFVBQVc7QUFBQSxDQUFJLEVBRXJDLElBQUksRUFDSixPQUFRLEVBQVEsSUFBSyxLQUFLLENBQUssSUFBTSxLQUFNLENBQ3pDLElBQU0sRUFBTSxFQUFNLEdBR2QsRUFBUyxFQUFNLElBQU0sR0FHekIsRUFBUSxFQUFNLEtBQUssRUFHbkIsSUFBTSxFQUFhLEVBQU0sR0FNekIsR0FIQSxFQUFRLEVBQU0sUUFBUSx5QkFBMEIsSUFBSSxFQUdoRCxJQUFlLElBQ2pCLEVBQVEsRUFBTSxRQUFRLE9BQVE7QUFBQSxDQUFJLEVBQ2xDLEVBQVEsRUFBTSxRQUFRLE9BQVEsSUFBSSxFQUlwQyxFQUFJLEdBQU8sRUFHYixPQUFPLEVBR1QsU0FBUyxHQUFZLENBQUMsRUFBUyxDQUM3QixJQUFNLEVBQVksSUFBVyxDQUFPLEVBRzlCLEVBQVMsR0FBYSxhQUFhLENBQUUsS0FBTSxDQUFVLENBQUMsRUFDNUQsSUFBSyxFQUFPLE9BQVEsQ0FDbEIsSUFBTSxFQUFNLElBQUksTUFBTSw4QkFBOEIseUJBQWlDLEVBRXJGLE1BREEsRUFBSSxLQUFPLGVBQ0wsRUFLUixJQUFNLEVBQU8sSUFBVyxDQUFPLEVBQUUsTUFBTSxHQUFHLEVBQ3BDLEVBQVMsRUFBSyxPQUVoQixFQUNKLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBUSxJQUMxQixHQUFJLENBRUYsSUFBTSxFQUFNLEVBQUssR0FBRyxLQUFLLEVBR25CLEVBQVEsSUFBYyxFQUFRLENBQUcsRUFHdkMsRUFBWSxHQUFhLFFBQVEsRUFBTSxXQUFZLEVBQU0sR0FBRyxFQUU1RCxNQUNBLE1BQU8sRUFBTyxDQUVkLEdBQUksRUFBSSxHQUFLLEVBQ1gsTUFBTSxFQU9aLE9BQU8sR0FBYSxNQUFNLENBQVMsRUFHckMsU0FBUyxHQUFLLENBQUMsRUFBUyxDQUN0QixRQUFRLElBQUksV0FBVyxjQUFrQixHQUFTLEVBR3BELFNBQVMsR0FBTSxDQUFDLEVBQVMsQ0FDdkIsUUFBUSxJQUFJLFdBQVcsY0FBa0IsR0FBUyxFQUdwRCxTQUFTLEVBQU8sQ0FBQyxFQUFTLENBQ3hCLFFBQVEsSUFBSSxXQUFXLGVBQW1CLEdBQVMsRUFHckQsU0FBUyxHQUFXLENBQUMsRUFBUyxDQUU1QixHQUFJLEdBQVcsRUFBUSxZQUFjLEVBQVEsV0FBVyxPQUFTLEVBQy9ELE9BQU8sRUFBUSxXQUlqQixHQUFJLFFBQVEsSUFBSSxZQUFjLFFBQVEsSUFBSSxXQUFXLE9BQVMsRUFDNUQsT0FBTyxRQUFRLElBQUksV0FJckIsTUFBTyxHQUdULFNBQVMsR0FBYyxDQUFDLEVBQVEsRUFBVyxDQUV6QyxJQUFJLEVBQ0osR0FBSSxDQUNGLEVBQU0sSUFBSSxJQUFJLENBQVMsRUFDdkIsTUFBTyxFQUFPLENBQ2QsR0FBSSxFQUFNLE9BQVMsa0JBQW1CLENBQ3BDLElBQU0sRUFBTSxJQUFJLE1BQU0sNElBQTRJLEVBRWxLLE1BREEsRUFBSSxLQUFPLHFCQUNMLEVBR1IsTUFBTSxFQUlSLElBQU0sRUFBTSxFQUFJLFNBQ2hCLElBQUssRUFBSyxDQUNSLElBQU0sRUFBTSxJQUFJLE1BQU0sc0NBQXNDLEVBRTVELE1BREEsRUFBSSxLQUFPLHFCQUNMLEVBSVIsSUFBTSxFQUFjLEVBQUksYUFBYSxJQUFJLGFBQWEsRUFDdEQsSUFBSyxFQUFhLENBQ2hCLElBQU0sRUFBTSxJQUFJLE1BQU0sOENBQThDLEVBRXBFLE1BREEsRUFBSSxLQUFPLHFCQUNMLEVBSVIsSUFBTSxFQUFpQixnQkFBZ0IsRUFBWSxZQUFZLElBQ3pELEVBQWEsRUFBTyxPQUFPLEdBQ2pDLElBQUssRUFBWSxDQUNmLElBQU0sRUFBTSxJQUFJLE1BQU0sMkRBQTJELDRCQUF5QyxFQUUxSCxNQURBLEVBQUksS0FBTywrQkFDTCxFQUdSLE1BQU8sQ0FBRSxhQUFZLEtBQUksRUFHM0IsU0FBUyxHQUFXLENBQUMsRUFBUyxDQUM1QixJQUFJLEVBQW9CLEtBRXhCLEdBQUksR0FBVyxFQUFRLE1BQVEsRUFBUSxLQUFLLE9BQVMsRUFDbkQsR0FBSSxNQUFNLFFBQVEsRUFBUSxJQUFJLEdBQzVCLFFBQVcsS0FBWSxFQUFRLEtBQzdCLEdBQUksSUFBRyxXQUFXLENBQVEsRUFDeEIsRUFBb0IsRUFBUyxTQUFTLFFBQVEsRUFBSSxFQUFXLEdBQUcsVUFJcEUsT0FBb0IsRUFBUSxLQUFLLFNBQVMsUUFBUSxFQUFJLEVBQVEsS0FBTyxHQUFHLEVBQVEsYUFHbEYsT0FBb0IsSUFBSyxRQUFRLFFBQVEsSUFBSSxFQUFHLFlBQVksRUFHOUQsR0FBSSxJQUFHLFdBQVcsQ0FBaUIsRUFDakMsT0FBTyxFQUdULE9BQU8sS0FHVCxTQUFTLEdBQWEsQ0FBQyxFQUFTLENBQzlCLE9BQU8sRUFBUSxLQUFPLElBQU0sSUFBSyxLQUFLLElBQUcsUUFBUSxFQUFHLEVBQVEsTUFBTSxDQUFDLENBQUMsRUFBSSxFQUcxRSxTQUFTLEdBQWEsQ0FBQyxFQUFTLENBQzlCLElBQUssdUNBQXVDLEVBRTVDLElBQU0sRUFBUyxHQUFhLFlBQVksQ0FBTyxFQUUzQyxFQUFhLFFBQVEsSUFDekIsR0FBSSxHQUFXLEVBQVEsWUFBYyxLQUNuQyxFQUFhLEVBQVEsV0FLdkIsT0FGQSxHQUFhLFNBQVMsRUFBWSxFQUFRLENBQU8sRUFFMUMsQ0FBRSxRQUFPLEVBR2xCLFNBQVMsR0FBYSxDQUFDLEVBQVMsQ0FDOUIsSUFBTSxFQUFhLElBQUssUUFBUSxRQUFRLElBQUksRUFBRyxNQUFNLEVBQ2pELEVBQVcsT0FDVCxFQUFRLFFBQVEsR0FBVyxFQUFRLEtBQUssRUFFOUMsR0FBSSxHQUFXLEVBQVEsU0FDckIsRUFBVyxFQUFRLFNBRW5CLFFBQUksRUFDRixHQUFPLG9EQUFvRCxFQUkvRCxJQUFJLEVBQWMsQ0FBQyxDQUFVLEVBQzdCLEdBQUksR0FBVyxFQUFRLEtBQ3JCLElBQUssTUFBTSxRQUFRLEVBQVEsSUFBSSxFQUM3QixFQUFjLENBQUMsSUFBYSxFQUFRLElBQUksQ0FBQyxFQUNwQyxLQUNMLEVBQWMsQ0FBQyxFQUNmLFFBQVcsS0FBWSxFQUFRLEtBQzdCLEVBQVksS0FBSyxJQUFhLENBQVEsQ0FBQyxFQU83QyxJQUFJLEVBQ0UsRUFBWSxDQUFDLEVBQ25CLFFBQVcsS0FBUSxFQUNqQixHQUFJLENBRUYsSUFBTSxFQUFTLEdBQWEsTUFBTSxJQUFHLGFBQWEsRUFBTSxDQUFFLFVBQVMsQ0FBQyxDQUFDLEVBRXJFLEdBQWEsU0FBUyxFQUFXLEVBQVEsQ0FBTyxFQUNoRCxNQUFPLEVBQUcsQ0FDVixHQUFJLEVBQ0YsR0FBTyxrQkFBa0IsS0FBUSxFQUFFLFNBQVMsRUFFOUMsRUFBWSxFQUloQixJQUFJLEVBQWEsUUFBUSxJQUN6QixHQUFJLEdBQVcsRUFBUSxZQUFjLEtBQ25DLEVBQWEsRUFBUSxXQUt2QixHQUZBLEdBQWEsU0FBUyxFQUFZLEVBQVcsQ0FBTyxFQUVoRCxFQUNGLE1BQU8sQ0FBRSxPQUFRLEVBQVcsTUFBTyxDQUFVLEVBRTdDLFdBQU8sQ0FBRSxPQUFRLENBQVUsRUFLL0IsU0FBUyxHQUFPLENBQUMsRUFBUyxDQUV4QixHQUFJLElBQVcsQ0FBTyxFQUFFLFNBQVcsRUFDakMsT0FBTyxHQUFhLGFBQWEsQ0FBTyxFQUcxQyxJQUFNLEVBQVksSUFBVyxDQUFPLEVBR3BDLElBQUssRUFHSCxPQUZBLElBQU0sK0RBQStELGdDQUF3QyxFQUV0RyxHQUFhLGFBQWEsQ0FBTyxFQUcxQyxPQUFPLEdBQWEsYUFBYSxDQUFPLEVBRzFDLFNBQVMsR0FBUSxDQUFDLEVBQVcsRUFBUSxDQUNuQyxJQUFNLEVBQU0sT0FBTyxLQUFLLEVBQU8sTUFBTSxHQUFHLEVBQUcsS0FBSyxFQUM1QyxFQUFhLE9BQU8sS0FBSyxFQUFXLFFBQVEsRUFFMUMsRUFBUSxFQUFXLFNBQVMsRUFBRyxFQUFFLEVBQ2pDLEVBQVUsRUFBVyxTQUFTLEdBQUcsRUFDdkMsRUFBYSxFQUFXLFNBQVMsR0FBSSxHQUFHLEVBRXhDLEdBQUksQ0FDRixJQUFNLEVBQVMsSUFBTyxpQkFBaUIsY0FBZSxFQUFLLENBQUssRUFFaEUsT0FEQSxFQUFPLFdBQVcsQ0FBTyxFQUNsQixHQUFHLEVBQU8sT0FBTyxDQUFVLElBQUksRUFBTyxNQUFNLElBQ25ELE1BQU8sRUFBTyxDQUNkLElBQU0sRUFBVSxhQUFpQixXQUMzQixFQUFtQixFQUFNLFVBQVkscUJBQ3JDLEVBQW1CLEVBQU0sVUFBWSxtREFFM0MsR0FBSSxHQUFXLEVBQWtCLENBQy9CLElBQU0sRUFBTSxJQUFJLE1BQU0sNkRBQTZELEVBRW5GLE1BREEsRUFBSSxLQUFPLHFCQUNMLEVBQ0QsUUFBSSxFQUFrQixDQUMzQixJQUFNLEVBQU0sSUFBSSxNQUFNLGlEQUFpRCxFQUV2RSxNQURBLEVBQUksS0FBTyxvQkFDTCxFQUVOLFdBQU0sR0FNWixTQUFTLEdBQVMsQ0FBQyxFQUFZLEVBQVEsRUFBVSxDQUFDLEVBQUcsQ0FDbkQsSUFBTSxFQUFRLFFBQVEsR0FBVyxFQUFRLEtBQUssRUFDeEMsRUFBVyxRQUFRLEdBQVcsRUFBUSxRQUFRLEVBRXBELEdBQUksT0FBTyxJQUFXLFNBQVUsQ0FDOUIsSUFBTSxFQUFNLElBQUksTUFBTSxnRkFBZ0YsRUFFdEcsTUFEQSxFQUFJLEtBQU8sa0JBQ0wsRUFJUixRQUFXLEtBQU8sT0FBTyxLQUFLLENBQU0sRUFDbEMsR0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQVksQ0FBRyxFQUFHLENBQ3pELEdBQUksSUFBYSxHQUNmLEVBQVcsR0FBTyxFQUFPLEdBRzNCLEdBQUksRUFDRixHQUFJLElBQWEsR0FDZixHQUFPLElBQUksMkNBQTZDLEVBRXhELFFBQU8sSUFBSSwrQ0FBaUQsRUFJaEUsT0FBVyxHQUFPLEVBQU8sR0FLL0IsSUFBTSxHQUFlLENBQ25CLGlCQUNBLGlCQUNBLGdCQUNBLFdBQ0EsWUFDQSxVQUNBLFlBQ0YsRUFFZSxpQkFBZSxHQUFhLGFBQzVCLGlCQUFlLEdBQWEsYUFDNUIsZ0JBQWMsR0FBYSxZQUMzQixXQUFTLEdBQWEsT0FDdEIsWUFBVSxHQUFhLFFBQ3ZCLFVBQVEsR0FBYSxNQUNyQixhQUFXLEdBQWEsU0FFdkMsR0FBTyxRQUFVLDJCQ3ZXakIsSUFBTSxHQUFVLENBQUMsRUFFakIsR0FBSSxRQUFRLElBQUksd0JBQTBCLEtBQ3hDLEdBQVEsU0FBVyxRQUFRLElBQUksdUJBR2pDLEdBQUksUUFBUSxJQUFJLG9CQUFzQixLQUNwQyxHQUFRLEtBQU8sUUFBUSxJQUFJLG1CQUc3QixHQUFJLFFBQVEsSUFBSSxxQkFBdUIsS0FDckMsR0FBUSxNQUFRLFFBQVEsSUFBSSxvQkFHOUIsR0FBSSxRQUFRLElBQUksd0JBQTBCLEtBQ3hDLEdBQVEsU0FBVyxRQUFRLElBQUksdUJBR2pDLEdBQUksUUFBUSxJQUFJLDBCQUE0QixLQUMxQyxHQUFRLFdBQWEsUUFBUSxJQUFJLHlCQUduQyxJQUFPLFFBQVUsMkJDdkJqQixJQUFNLElBQUssaUVBRVgsSUFBTyxRQUFVLFNBQVMsQ0FBYyxDQUFDLEVBQU0sQ0FDN0MsT0FBTyxFQUFLLE9BQU8sUUFBUyxDQUFDLEVBQUssRUFBSyxDQUNyQyxJQUFNLEVBQVUsRUFBSSxNQUFNLEdBQUUsRUFDNUIsR0FBSSxFQUNGLEVBQUksRUFBUSxJQUFNLEVBQVEsR0FFNUIsT0FBTyxHQUNOLENBQUMsQ0FBQyxxQkNUTixRQUFTLEVBQUcsT0FDVyxPQUNwQixPQUFPLE9BQ0wsQ0FBQyxjQUU0QixRQUFRLElBQUksQ0FDM0MsQ0FDRixJQUNDLDBCQ1JILFNBQVMsR0FBVSxDQUFDLEVBQUssQ0FDckIsR0FBSSxhQUFlLElBQ2YsRUFBSSxNQUFRLEVBQUksT0FBUyxFQUFJLElBQU0sUUFBUyxFQUFHLENBQzNDLE1BQU0sSUFBSSxNQUFNLGtCQUFrQixHQUVuQyxRQUFJLGFBQWUsSUFDdEIsRUFBSSxJQUFNLEVBQUksTUFBUSxFQUFJLE9BQVMsUUFBUyxFQUFHLENBQzNDLE1BQU0sSUFBSSxNQUFNLGtCQUFrQixHQWdCMUMsT0FYQSxPQUFPLE9BQU8sQ0FBRyxFQUVqQixPQUFPLG9CQUFvQixDQUFHLEVBQUUsUUFBUSxRQUFTLENBQUMsRUFBTSxDQUNwRCxJQUFJLEVBQU8sRUFBSSxHQUdmLEdBQUksT0FBTyxHQUFRLFdBQWEsT0FBTyxTQUFTLENBQUksRUFDaEQsSUFBVyxDQUFJLEVBRXRCLEVBRU0sRUFHWCxJQUFJLElBQWdCLElBQ2hCLElBQVcsSUFDZixJQUFjLFFBQVUsSUFHeEIsTUFBTSxHQUFTLENBSWIsV0FBVyxDQUFDLEVBQU0sQ0FFaEIsR0FBSSxFQUFLLE9BQVMsT0FBVyxFQUFLLEtBQU8sQ0FBQyxFQUUxQyxLQUFLLEtBQU8sRUFBSyxLQUNqQixLQUFLLGVBQWlCLEdBR3hCLFdBQVcsRUFBRyxDQUNaLEtBQUssZUFBaUIsR0FFMUIsQ0FNQSxTQUFTLEVBQVUsQ0FBQyxFQUFPLENBQ3pCLE9BQU8sRUFDSixRQUFRLEtBQU0sT0FBTyxFQUNyQixRQUFRLEtBQU0sTUFBTSxFQUNwQixRQUFRLEtBQU0sTUFBTSxFQUNwQixRQUFRLEtBQU0sUUFBUSxFQUN0QixRQUFRLEtBQU0sUUFBUSxFQVczQixTQUFTLEVBQU8sQ0FBQyxLQUFhLEVBQVMsQ0FFckMsSUFBTSxFQUFTLE9BQU8sT0FBTyxJQUFJLEVBRWpDLFFBQVcsS0FBTyxFQUNoQixFQUFPLEdBQU8sRUFBUyxHQU96QixPQUxBLEVBQVEsUUFBUSxRQUFRLENBQUMsRUFBSyxDQUM1QixRQUFXLEtBQU8sRUFDaEIsRUFBTyxHQUFPLEVBQUksR0FFckIsRUFDd0IsRUFlM0IsSUFBTSxJQUFhLFVBTWIsSUFBb0IsQ0FBQyxJQUFTLENBQ2xDLFFBQVMsRUFBSyxNQUloQixNQUFNLEdBQWEsQ0FPakIsV0FBVyxDQUFDLEVBQVcsRUFBUyxDQUM5QixLQUFLLE9BQVMsR0FDZCxLQUFLLFlBQWMsRUFBUSxZQUMzQixFQUFVLEtBQUssSUFBSSxFQU9yQixPQUFPLENBQUMsRUFBTSxDQUNaLEtBQUssUUFBVSxHQUFXLENBQUksRUFPaEMsUUFBUSxDQUFDLEVBQU0sQ0FDYixJQUFLLElBQWtCLENBQUksRUFBRyxPQUU5QixJQUFJLEVBQVksRUFBSyxLQUNyQixJQUFLLEVBQUssWUFDUixFQUFZLEdBQUcsS0FBSyxjQUFjLElBRXBDLEtBQUssS0FBSyxDQUFTLEVBT3JCLFNBQVMsQ0FBQyxFQUFNLENBQ2QsSUFBSyxJQUFrQixDQUFJLEVBQUcsT0FFOUIsS0FBSyxRQUFVLElBTWpCLEtBQUssRUFBRyxDQUNOLE9BQU8sS0FBSyxPQVNkLElBQUksQ0FBQyxFQUFXLENBQ2QsS0FBSyxRQUFVLGdCQUFnQixNQUVuQyxDQU1BLE1BQU0sR0FBVSxDQUNkLFdBQVcsRUFBRyxDQUVaLEtBQUssU0FBVyxDQUFFLFNBQVUsQ0FBQyxDQUFFLEVBQy9CLEtBQUssTUFBUSxDQUFDLEtBQUssUUFBUSxLQUd6QixJQUFHLEVBQUcsQ0FDUixPQUFPLEtBQUssTUFBTSxLQUFLLE1BQU0sT0FBUyxNQUdwQyxLQUFJLEVBQUcsQ0FBRSxPQUFPLEtBQUssU0FHekIsR0FBRyxDQUFDLEVBQU0sQ0FDUixLQUFLLElBQUksU0FBUyxLQUFLLENBQUksRUFJN0IsUUFBUSxDQUFDLEVBQU0sQ0FFYixJQUFNLEVBQU8sQ0FBRSxPQUFNLFNBQVUsQ0FBQyxDQUFFLEVBQ2xDLEtBQUssSUFBSSxDQUFJLEVBQ2IsS0FBSyxNQUFNLEtBQUssQ0FBSSxFQUd0QixTQUFTLEVBQUcsQ0FDVixHQUFJLEtBQUssTUFBTSxPQUFTLEVBQ3RCLE9BQU8sS0FBSyxNQUFNLElBQUksRUFHeEIsT0FHRixhQUFhLEVBQUcsQ0FDZCxNQUFPLEtBQUssVUFBVSxJQUd4QixNQUFNLEVBQUcsQ0FDUCxPQUFPLEtBQUssVUFBVSxLQUFLLFNBQVUsS0FBTSxDQUFDLEVBTzlDLElBQUksQ0FBQyxFQUFTLENBRVosT0FBTyxLQUFLLFlBQVksTUFBTSxFQUFTLEtBQUssUUFBUSxRQVMvQyxNQUFLLENBQUMsRUFBUyxFQUFNLENBQzFCLEdBQUksT0FBTyxJQUFTLFNBQ2xCLEVBQVEsUUFBUSxDQUFJLEVBQ2YsUUFBSSxFQUFLLFNBQ2QsRUFBUSxTQUFTLENBQUksRUFDckIsRUFBSyxTQUFTLFFBQVEsQ0FBQyxJQUFVLEtBQUssTUFBTSxFQUFTLENBQUssQ0FBQyxFQUMzRCxFQUFRLFVBQVUsQ0FBSSxFQUV4QixPQUFPLFFBTUYsVUFBUyxDQUFDLEVBQU0sQ0FDckIsR0FBSSxPQUFPLElBQVMsU0FBVSxPQUM5QixJQUFLLEVBQUssU0FBVSxPQUVwQixHQUFJLEVBQUssU0FBUyxNQUFNLEtBQU0sT0FBTyxJQUFPLFFBQVEsRUFHbEQsRUFBSyxTQUFXLENBQUMsRUFBSyxTQUFTLEtBQUssRUFBRSxDQUFDLEVBRXZDLE9BQUssU0FBUyxRQUFRLENBQUMsSUFBVSxDQUMvQixJQUFVLFVBQVUsQ0FBSyxFQUMxQixFQUdQLENBc0JBLE1BQU0sWUFBeUIsR0FBVSxDQUl2QyxXQUFXLENBQUMsRUFBUyxDQUNuQixNQUFNLEVBQ04sS0FBSyxRQUFVLEVBT2pCLFVBQVUsQ0FBQyxFQUFNLEVBQU0sQ0FDckIsR0FBSSxJQUFTLEdBQU0sT0FFbkIsS0FBSyxTQUFTLENBQUksRUFDbEIsS0FBSyxRQUFRLENBQUksRUFDakIsS0FBSyxVQUFVLEVBTWpCLE9BQU8sQ0FBQyxFQUFNLENBQ1osR0FBSSxJQUFTLEdBQU0sT0FFbkIsS0FBSyxJQUFJLENBQUksRUFPZixjQUFjLENBQUMsRUFBUyxFQUFNLENBRTVCLElBQU0sRUFBTyxFQUFRLEtBQ3JCLEVBQUssS0FBTyxFQUNaLEVBQUssWUFBYyxHQUNuQixLQUFLLElBQUksQ0FBSSxFQUdmLE1BQU0sRUFBRyxDQUVQLE9BRGlCLElBQUksSUFBYSxLQUFNLEtBQUssT0FBTyxFQUNwQyxNQUFNLEVBR3hCLFFBQVEsRUFBRyxDQUNULE1BQU8sR0FFWCxDQU1BLFNBQVMsR0FBTSxDQUFDLEVBQU8sQ0FDckIsT0FBTyxJQUFJLE9BQU8sRUFBTSxRQUFRLHdCQUF5QixNQUFNLEVBQUcsR0FBRyxFQU92RSxTQUFTLEVBQU0sQ0FBQyxFQUFJLENBQ2xCLElBQUssRUFBSSxPQUFPLEtBQ2hCLEdBQUksT0FBTyxJQUFPLFNBQVUsT0FBTyxFQUVuQyxPQUFPLEVBQUcsT0FPWixTQUFTLEdBQU0sSUFBSSxFQUFNLENBRXZCLE9BRGUsRUFBSyxJQUFJLENBQUMsSUFBTSxHQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQVduRCxTQUFTLEdBQU0sSUFBSSxFQUFNLENBRXZCLE1BRGUsSUFBTSxFQUFLLElBQUksQ0FBQyxJQUFNLEdBQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQUksSUFROUQsU0FBUyxHQUFnQixDQUFDLEVBQUksQ0FDNUIsT0FBUSxJQUFJLE9BQU8sRUFBRyxTQUFTLEVBQUksR0FBRyxFQUFHLEtBQUssRUFBRSxFQUFFLE9BQVMsRUFRN0QsU0FBUyxHQUFVLENBQUMsRUFBSSxFQUFRLENBQzlCLElBQU0sRUFBUSxHQUFNLEVBQUcsS0FBSyxDQUFNLEVBQ2xDLE9BQU8sR0FBUyxFQUFNLFFBQVUsRUFVbEMsSUFBTSxJQUFhLGlEQVluQixTQUFTLEdBQUksQ0FBQyxFQUFTLEVBQVksSUFBSyxDQUN0QyxJQUFJLEVBQWMsRUFFbEIsT0FBTyxFQUFRLElBQUksQ0FBQyxJQUFVLENBQzVCLEdBQWUsRUFDZixJQUFNLEVBQVMsRUFDWCxFQUFLLEdBQU8sQ0FBSyxFQUNqQixFQUFNLEdBRVYsTUFBTyxFQUFHLE9BQVMsRUFBRyxDQUNwQixJQUFNLEVBQVEsSUFBVyxLQUFLLENBQUUsRUFDaEMsSUFBSyxFQUFPLENBQ1YsR0FBTyxFQUNQLE1BSUYsR0FGQSxHQUFPLEVBQUcsVUFBVSxFQUFHLEVBQU0sS0FBSyxFQUNsQyxFQUFLLEVBQUcsVUFBVSxFQUFNLE1BQVEsRUFBTSxHQUFHLE1BQU0sRUFDM0MsRUFBTSxHQUFHLEtBQU8sTUFBUSxFQUFNLEdBRWhDLEdBQU8sS0FBTyxPQUFPLE9BQU8sRUFBTSxFQUFFLEVBQUksQ0FBTSxFQUc5QyxRQURBLEdBQU8sRUFBTSxHQUNULEVBQU0sS0FBTyxJQUNmLElBSU4sT0FBTyxFQUNSLEVBQUUsSUFBSSxLQUFNLElBQUksSUFBSyxFQUFFLEtBQUssQ0FBUyxFQUl4QyxJQUFNLElBQW1CLE9BQ25CLElBQVcsZUFDWCxJQUFzQixnQkFDdEIsSUFBWSxvQkFDWixJQUFjLHlFQUNkLElBQW1CLGVBQ25CLElBQWlCLCtJQUtqQixJQUFVLENBQUMsRUFBTyxDQUFDLElBQU0sQ0FDN0IsSUFBTSxFQUFlLFlBQ3JCLEdBQUksRUFBSyxPQUNQLEVBQUssTUFBUSxJQUNYLEVBQ0EsT0FDQSxFQUFLLE9BQ0wsTUFBTSxFQUVWLE9BQU8sR0FBUSxDQUNiLFVBQVcsT0FDWCxNQUFPLEVBQ1AsSUFBSyxJQUNMLFVBQVcsRUFFWCxXQUFZLENBQUMsRUFBRyxJQUFTLENBQ3ZCLEdBQUksRUFBRSxRQUFVLEVBQUcsRUFBSyxZQUFZLEVBRXhDLEVBQUcsQ0FBSSxHQUlILEdBQW1CLENBQ3ZCLE1BQU8sZUFBZ0IsVUFBVyxDQUNwQyxFQUNNLElBQW1CLENBQ3ZCLFVBQVcsU0FDWCxNQUFPLElBQ1AsSUFBSyxJQUNMLFFBQVMsTUFDVCxTQUFVLENBQUMsRUFBZ0IsQ0FDN0IsRUFDTSxJQUFvQixDQUN4QixVQUFXLFNBQ1gsTUFBTyxJQUNQLElBQUssSUFDTCxRQUFTLE1BQ1QsU0FBVSxDQUFDLEVBQWdCLENBQzdCLEVBQ00sSUFBcUIsQ0FDekIsTUFBTyw0SUFDVCxFQVNNLEdBQVUsUUFBUSxDQUFDLEVBQU8sRUFBSyxFQUFjLENBQUMsRUFBRyxDQUNyRCxJQUFNLEVBQU8sR0FDWCxDQUNFLFVBQVcsVUFDWCxRQUNBLE1BQ0EsU0FBVSxDQUFDLENBQ2IsRUFDQSxDQUNGLEVBT0EsT0FOQSxFQUFLLFNBQVMsS0FBSyxHQUFrQixFQUNyQyxFQUFLLFNBQVMsS0FBSyxDQUNqQixVQUFXLFNBQ1gsTUFBTyw2Q0FDUCxVQUFXLENBQ2IsQ0FBQyxFQUNNLEdBRUgsSUFBc0IsR0FBUSxLQUFNLEdBQUcsRUFDdkMsSUFBdUIsR0FBUSxPQUFRLE1BQU0sRUFDN0MsSUFBb0IsR0FBUSxJQUFLLEdBQUcsRUFDcEMsSUFBYyxDQUNsQixVQUFXLFNBQ1gsTUFBTyxJQUNQLFVBQVcsQ0FDYixFQUNNLElBQWdCLENBQ3BCLFVBQVcsU0FDWCxNQUFPLElBQ1AsVUFBVyxDQUNiLEVBQ00sSUFBcUIsQ0FDekIsVUFBVyxTQUNYLE1BQU8sSUFDUCxVQUFXLENBQ2IsRUFDTSxJQUFrQixDQUN0QixVQUFXLFNBQ1gsTUFBTyxJQUFZLGtHQVNuQixVQUFXLENBQ2IsRUFDTSxJQUFjLENBT2xCLE1BQU8sa0JBQ1AsU0FBVSxDQUFDLENBQ1QsVUFBVyxTQUNYLE1BQU8sS0FDUCxJQUFLLGFBQ0wsUUFBUyxLQUNULFNBQVUsQ0FDUixHQUNBLENBQ0UsTUFBTyxLQUNQLElBQUssS0FDTCxVQUFXLEVBQ1gsU0FBVSxDQUFDLEVBQWdCLENBQzdCLENBQ0YsQ0FDRixDQUFDLENBQ0gsRUFDTSxJQUFhLENBQ2pCLFVBQVcsUUFDWCxNQUFPLElBQ1AsVUFBVyxDQUNiLEVBQ00sSUFBd0IsQ0FDNUIsVUFBVyxRQUNYLE1BQU8sSUFDUCxVQUFXLENBQ2IsRUFDTSxJQUFlLENBRW5CLE1BQU8sVUFBWSxJQUNuQixVQUFXLENBQ2IsRUFTTSxJQUFvQixRQUFRLENBQUMsRUFBTSxDQUN2QyxPQUFPLE9BQU8sT0FBTyxFQUNuQixDQUVFLFdBQVksQ0FBQyxFQUFHLElBQVMsQ0FBRSxFQUFLLEtBQUssWUFBYyxFQUFFLElBRXJELFNBQVUsQ0FBQyxFQUFHLElBQVMsQ0FBRSxHQUFJLEVBQUssS0FBSyxjQUFnQixFQUFFLEdBQUksRUFBSyxZQUFZLEVBQ2hGLENBQUMsR0FHRCxHQUFxQixPQUFPLE9BQU8sQ0FDbkMsVUFBVyxLQUNYLGlCQUFrQixJQUNsQixTQUFVLElBQ1Ysb0JBQXFCLElBQ3JCLFVBQVcsSUFDWCxZQUFhLElBQ2IsaUJBQWtCLElBQ2xCLGVBQWdCLElBQ2hCLFFBQVMsSUFDVCxpQkFBa0IsR0FDbEIsaUJBQWtCLElBQ2xCLGtCQUFtQixJQUNuQixtQkFBb0IsSUFDcEIsUUFBUyxHQUNULG9CQUFxQixJQUNyQixxQkFBc0IsSUFDdEIsa0JBQW1CLElBQ25CLFlBQWEsSUFDYixjQUFlLElBQ2YsbUJBQW9CLElBQ3BCLGdCQUFpQixJQUNqQixZQUFhLElBQ2IsV0FBWSxJQUNaLHNCQUF1QixJQUN2QixhQUFjLElBQ2Qsa0JBQW1CLEdBQ3ZCLENBQUMsRUEwQkQsU0FBUyxHQUFxQixDQUFDLEVBQU8sRUFBVSxDQUU5QyxHQURlLEVBQU0sTUFBTSxFQUFNLE1BQVEsS0FDMUIsSUFDYixFQUFTLFlBQVksRUFTekIsU0FBUyxHQUFhLENBQUMsRUFBTSxFQUFRLENBQ25DLElBQUssRUFBUSxPQUNiLElBQUssRUFBSyxjQUFlLE9BZXpCLEdBUkEsRUFBSyxNQUFRLE9BQVMsRUFBSyxjQUFjLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFJLHNCQUNoRSxFQUFLLGNBQWdCLElBQ3JCLEVBQUssU0FBVyxFQUFLLFVBQVksRUFBSyxjQUN0QyxPQUFPLEVBQUssY0FLUixFQUFLLFlBQWMsT0FBVyxFQUFLLFVBQVksRUFPckQsU0FBUyxHQUFjLENBQUMsRUFBTSxFQUFTLENBQ3JDLElBQUssTUFBTSxRQUFRLEVBQUssT0FBTyxFQUFHLE9BRWxDLEVBQUssUUFBVSxJQUFPLEdBQUcsRUFBSyxPQUFPLEVBT3ZDLFNBQVMsR0FBWSxDQUFDLEVBQU0sRUFBUyxDQUNuQyxJQUFLLEVBQUssTUFBTyxPQUNqQixHQUFJLEVBQUssT0FBUyxFQUFLLElBQUssTUFBTSxJQUFJLE1BQU0sMENBQTBDLEVBRXRGLEVBQUssTUFBUSxFQUFLLE1BQ2xCLE9BQU8sRUFBSyxNQU9kLFNBQVMsR0FBZ0IsQ0FBQyxFQUFNLEVBQVMsQ0FFdkMsR0FBSSxFQUFLLFlBQWMsT0FBVyxFQUFLLFVBQVksRUFJckQsSUFBTSxJQUFrQixDQUN0QixLQUNBLE1BQ0EsTUFDQSxLQUNBLE1BQ0EsS0FDQSxLQUNBLE9BQ0EsU0FDQSxPQUNBLE9BQ0YsRUFFTSxJQUE0QixVQVFsQyxTQUFTLEdBQWUsQ0FBQyxFQUFhLEVBQWlCLEVBQVksSUFBMkIsQ0FFNUYsSUFBTSxFQUFtQixDQUFDLEVBSTFCLEdBQUksT0FBTyxJQUFnQixTQUN6QixFQUFZLEVBQVcsRUFBWSxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxRQUFJLE1BQU0sUUFBUSxDQUFXLEVBQ2xDLEVBQVksRUFBVyxDQUFXLEVBRWxDLFlBQU8sS0FBSyxDQUFXLEVBQUUsUUFBUSxRQUFRLENBQUMsRUFBVyxDQUVuRCxPQUFPLE9BQ0wsRUFDQSxJQUFnQixFQUFZLEdBQVksRUFBaUIsQ0FBUyxDQUNwRSxFQUNELEVBRUgsT0FBTyxFQVlQLFNBQVMsQ0FBVyxDQUFDLEVBQVcsRUFBYSxDQUMzQyxHQUFJLEVBQ0YsRUFBYyxFQUFZLElBQUksS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUVwRCxFQUFZLFFBQVEsUUFBUSxDQUFDLEVBQVMsQ0FDcEMsSUFBTSxFQUFPLEVBQVEsTUFBTSxHQUFHLEVBQzlCLEVBQWlCLEVBQUssSUFBTSxDQUFDLEVBQVcsSUFBZ0IsRUFBSyxHQUFJLEVBQUssRUFBRSxDQUFDLEVBQzFFLEdBWUwsU0FBUyxHQUFlLENBQUMsRUFBUyxFQUFlLENBRy9DLEdBQUksRUFDRixPQUFPLE9BQU8sQ0FBYSxFQUc3QixPQUFPLElBQWMsQ0FBTyxFQUFJLEVBQUksRUFPdEMsU0FBUyxHQUFhLENBQUMsRUFBUyxDQUM5QixPQUFPLElBQWdCLFNBQVMsRUFBUSxZQUFZLENBQUMsRUFjdkQsU0FBUyxHQUFlLENBQUMsR0FBWSxXQUFXLENBTzlDLFNBQVMsQ0FBTSxDQUFDLEVBQU8sRUFBUSxDQUM3QixPQUFPLElBQUksT0FDVCxHQUFPLENBQUssRUFDWixLQUFPLEVBQVMsaUJBQW1CLElBQU0sS0FBTyxFQUFTLElBQU0sR0FDakUsRUFnQkYsTUFBTSxDQUFXLENBQ2YsV0FBVyxFQUFHLENBQ1osS0FBSyxhQUFlLENBQUMsRUFFckIsS0FBSyxRQUFVLENBQUMsRUFDaEIsS0FBSyxRQUFVLEVBQ2YsS0FBSyxTQUFXLEVBSWxCLE9BQU8sQ0FBQyxFQUFJLEVBQU0sQ0FDaEIsRUFBSyxTQUFXLEtBQUssV0FFckIsS0FBSyxhQUFhLEtBQUssU0FBVyxFQUNsQyxLQUFLLFFBQVEsS0FBSyxDQUFDLEVBQU0sQ0FBRSxDQUFDLEVBQzVCLEtBQUssU0FBVyxJQUFpQixDQUFFLEVBQUksRUFHekMsT0FBTyxFQUFHLENBQ1IsR0FBSSxLQUFLLFFBQVEsU0FBVyxFQUcxQixLQUFLLEtBQU8sSUFBTSxLQUVwQixJQUFNLEVBQWMsS0FBSyxRQUFRLElBQUksS0FBTSxFQUFHLEVBQUUsRUFDaEQsS0FBSyxVQUFZLEVBQU8sSUFBSyxDQUFXLEVBQUcsRUFBSSxFQUMvQyxLQUFLLFVBQVksRUFJbkIsSUFBSSxDQUFDLEVBQUcsQ0FDTixLQUFLLFVBQVUsVUFBWSxLQUFLLFVBQ2hDLElBQU0sRUFBUSxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQ25DLElBQUssRUFBUyxPQUFPLEtBR3JCLElBQU0sRUFBSSxFQUFNLFVBQVUsQ0FBQyxFQUFJLElBQU0sRUFBSSxHQUFLLElBQU8sTUFBUyxFQUV4RCxFQUFZLEtBQUssYUFBYSxHQUtwQyxPQUZBLEVBQU0sT0FBTyxFQUFHLENBQUMsRUFFVixPQUFPLE9BQU8sRUFBTyxDQUFTLEVBRXpDLENBaUNBLE1BQU0sQ0FBb0IsQ0FDeEIsV0FBVyxFQUFHLENBRVosS0FBSyxNQUFRLENBQUMsRUFFZCxLQUFLLGFBQWUsQ0FBQyxFQUNyQixLQUFLLE1BQVEsRUFFYixLQUFLLFVBQVksRUFDakIsS0FBSyxXQUFhLEVBSXBCLFVBQVUsQ0FBQyxFQUFPLENBQ2hCLEdBQUksS0FBSyxhQUFhLEdBQVEsT0FBTyxLQUFLLGFBQWEsR0FFdkQsSUFBTSxFQUFVLElBQUksRUFJcEIsT0FIQSxLQUFLLE1BQU0sTUFBTSxDQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUksS0FBVSxFQUFRLFFBQVEsRUFBSSxDQUFJLENBQUMsRUFDekUsRUFBUSxRQUFRLEVBQ2hCLEtBQUssYUFBYSxHQUFTLEVBQ3BCLEVBR1QsMEJBQTBCLEVBQUcsQ0FDM0IsT0FBTyxLQUFLLGFBQWUsRUFHN0IsV0FBVyxFQUFHLENBQ1osS0FBSyxXQUFhLEVBSXBCLE9BQU8sQ0FBQyxFQUFJLEVBQU0sQ0FFaEIsR0FEQSxLQUFLLE1BQU0sS0FBSyxDQUFDLEVBQUksQ0FBSSxDQUFDLEVBQ3RCLEVBQUssT0FBUyxRQUFTLEtBQUssUUFJbEMsSUFBSSxDQUFDLEVBQUcsQ0FDTixJQUFNLEVBQUksS0FBSyxXQUFXLEtBQUssVUFBVSxFQUN6QyxFQUFFLFVBQVksS0FBSyxVQUNuQixJQUFJLEVBQVMsRUFBRSxLQUFLLENBQUMsRUFpQ3JCLEdBQUksS0FBSywyQkFBMkIsRUFDbEMsR0FBSSxHQUFVLEVBQU8sUUFBVSxLQUFLLFdBQWtCLEtBQ3BELElBQU0sRUFBSyxLQUFLLFdBQVcsQ0FBQyxFQUM1QixFQUFHLFVBQVksS0FBSyxVQUFZLEVBQ2hDLEVBQVMsRUFBRyxLQUFLLENBQUMsRUFJdEIsR0FBSSxHQUVGLEdBREEsS0FBSyxZQUFjLEVBQU8sU0FBVyxFQUNqQyxLQUFLLGFBQWUsS0FBSyxNQUUzQixLQUFLLFlBQVksRUFJckIsT0FBTyxFQUVYLENBU0EsU0FBUyxDQUFjLENBQUMsRUFBTSxDQUM1QixJQUFNLEVBQUssSUFBSSxFQUlmLEdBRkEsRUFBSyxTQUFTLFFBQVEsS0FBUSxFQUFHLFFBQVEsRUFBSyxNQUFPLENBQUUsS0FBTSxFQUFNLEtBQU0sT0FBUSxDQUFDLENBQUMsRUFFL0UsRUFBSyxjQUNQLEVBQUcsUUFBUSxFQUFLLGNBQWUsQ0FBRSxLQUFNLEtBQU0sQ0FBQyxFQUVoRCxHQUFJLEVBQUssUUFDUCxFQUFHLFFBQVEsRUFBSyxRQUFTLENBQUUsS0FBTSxTQUFVLENBQUMsRUFHOUMsT0FBTyxFQTBDVCxTQUFTLENBQVcsQ0FBQyxFQUFNLEVBQVEsQ0FDakMsSUFBTSxFQUFtQyxFQUN6QyxHQUFJLEVBQUssV0FBWSxPQUFPLEVBRTVCLENBR0UsR0FDRixFQUFFLFFBQVEsS0FBTyxFQUFJLEVBQU0sQ0FBTSxDQUFDLEVBRWxDLEVBQVMsbUJBQW1CLFFBQVEsS0FBTyxFQUFJLEVBQU0sQ0FBTSxDQUFDLEVBRzVELEVBQUssY0FBZ0IsS0FFckIsQ0FDRSxJQUdBLElBRUEsR0FDRixFQUFFLFFBQVEsS0FBTyxFQUFJLEVBQU0sQ0FBTSxDQUFDLEVBRWxDLEVBQUssV0FBYSxHQUVsQixJQUFJLEVBQWlCLEtBQ3JCLEdBQUksT0FBTyxFQUFLLFdBQWEsU0FDM0IsRUFBaUIsRUFBSyxTQUFTLFNBQy9CLE9BQU8sRUFBSyxTQUFTLFNBR3ZCLEdBQUksRUFBSyxTQUNQLEVBQUssU0FBVyxJQUFnQixFQUFLLFNBQVUsRUFBUyxnQkFBZ0IsRUFJMUUsR0FBSSxFQUFLLFNBQVcsRUFDbEIsTUFBTSxJQUFJLE1BQU0sZ0dBQWdHLEVBUWxILEdBSEEsRUFBaUIsR0FBa0IsRUFBSyxTQUFXLE1BQ25ELEVBQU0saUJBQW1CLEVBQU8sRUFBZ0IsRUFBSSxFQUVoRCxFQUFRLENBQ1YsSUFBSyxFQUFLLE1BQU8sRUFBSyxNQUFRLFFBRTlCLEdBREEsRUFBTSxRQUFVLEVBQU8sRUFBSyxLQUFLLEVBQzdCLEVBQUssZUFBZ0IsRUFBSyxJQUFNLEVBQUssTUFDekMsSUFBSyxFQUFLLE1BQVEsRUFBSyxlQUFnQixFQUFLLElBQU0sUUFDbEQsR0FBSSxFQUFLLElBQUssRUFBTSxNQUFRLEVBQU8sRUFBSyxHQUFHLEVBRTNDLEdBREEsRUFBTSxjQUFnQixHQUFPLEVBQUssR0FBRyxHQUFLLEdBQ3RDLEVBQUssZ0JBQWtCLEVBQU8sY0FDaEMsRUFBTSxnQkFBa0IsRUFBSyxJQUFNLElBQU0sSUFBTSxFQUFPLGNBRzFELEdBQUksRUFBSyxRQUFTLEVBQU0sVUFBWSxFQUF1QyxFQUFLLE9BQVEsRUFDeEYsSUFBSyxFQUFLLFNBQVUsRUFBSyxTQUFXLENBQUMsRUFPckMsR0FMQSxFQUFLLFNBQVcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsRUFBRyxDQUN6RCxPQUFPLElBQWtCLElBQU0sT0FBUyxFQUFPLENBQUMsRUFDakQsQ0FBQyxFQUNGLEVBQUssU0FBUyxRQUFRLFFBQVEsQ0FBQyxFQUFHLENBQUUsRUFBK0IsRUFBSSxDQUFLLEVBQUksRUFFNUUsRUFBSyxPQUNQLEVBQVksRUFBSyxPQUFRLENBQU0sRUFJakMsT0FEQSxFQUFNLFFBQVUsRUFBZSxDQUFLLEVBQzdCLEVBR1QsSUFBSyxFQUFTLG1CQUFvQixFQUFTLG1CQUFxQixDQUFDLEVBR2pFLEdBQUksRUFBUyxVQUFZLEVBQVMsU0FBUyxTQUFTLE1BQU0sRUFDeEQsTUFBTSxJQUFJLE1BQU0sMkZBQTJGLEVBTTdHLE9BRkEsRUFBUyxpQkFBbUIsR0FBUSxFQUFTLGtCQUFvQixDQUFDLENBQUMsRUFFNUQsRUFBK0IsQ0FBUyxFQWNqRCxTQUFTLEdBQWtCLENBQUMsRUFBTSxDQUNoQyxJQUFLLEVBQU0sTUFBTyxHQUVsQixPQUFPLEVBQUssZ0JBQWtCLElBQW1CLEVBQUssTUFBTSxFQWE5RCxTQUFTLEdBQWlCLENBQUMsRUFBTSxDQUMvQixHQUFJLEVBQUssV0FBYSxFQUFLLGVBQ3pCLEVBQUssZUFBaUIsRUFBSyxTQUFTLElBQUksUUFBUSxDQUFDLEVBQVMsQ0FDeEQsT0FBTyxHQUFRLEVBQU0sQ0FBRSxTQUFVLElBQUssRUFBRyxDQUFPLEVBQ2pELEVBTUgsR0FBSSxFQUFLLGVBQ1AsT0FBTyxFQUFLLGVBT2QsR0FBSSxJQUFtQixDQUFJLEVBQ3pCLE9BQU8sR0FBUSxFQUFNLENBQUUsT0FBUSxFQUFLLE9BQVMsR0FBUSxFQUFLLE1BQU0sRUFBSSxJQUFLLENBQUMsRUFHNUUsR0FBSSxPQUFPLFNBQVMsQ0FBSSxFQUN0QixPQUFPLEdBQVEsQ0FBSSxFQUlyQixPQUFPLEVBR1QsSUFBSSxJQUFVLFNBSWQsU0FBUyxHQUF3QixDQUFDLEVBQU8sQ0FDdkMsT0FBTyxRQUFRLEdBQVMsSUFBVSxFQUFFLEVBR3RDLFNBQVMsR0FBYyxDQUFDLEVBQU0sQ0FDNUIsSUFBTSxFQUFZLENBQ2hCLE1BQU8sQ0FBQyxXQUFZLE9BQVEsWUFBWSxFQUN4QyxLQUFNLFFBQVEsRUFBRyxDQUNmLE1BQU8sQ0FDTCxpQkFBa0IsR0FDbEIsZ0JBQWlCLEVBQ25CLEdBRUYsU0FBVSxDQUNSLFNBQVMsRUFBRyxDQUNWLEdBQUksS0FBSyxnQkFBaUIsTUFBTyxHQUVqQyxNQUFPLFFBQVUsS0FBSyxrQkFFeEIsV0FBVyxFQUFHLENBRVosSUFBSyxLQUFLLGFBQWUsRUFBSyxZQUFZLEtBQUssUUFBUSxFQUdyRCxPQUZBLFFBQVEsS0FBSyxpQkFBaUIsS0FBSyw2Q0FBNkMsRUFDaEYsS0FBSyxnQkFBa0IsR0FDaEIsR0FBVyxLQUFLLElBQUksRUFHN0IsSUFBSSxFQUFTLENBQUMsRUFDZCxHQUFJLEtBQUssV0FDUCxFQUFTLEVBQUssY0FBYyxLQUFLLElBQUksRUFDckMsS0FBSyxpQkFBbUIsRUFBTyxTQUUvQixPQUFTLEVBQUssVUFBVSxLQUFLLFNBQVUsS0FBSyxLQUFNLEtBQUssY0FBYyxFQUNyRSxLQUFLLGlCQUFtQixLQUFLLFNBRS9CLE9BQU8sRUFBTyxPQUVoQixVQUFVLEVBQUcsQ0FDWCxPQUFRLEtBQUssVUFBWSxJQUF5QixLQUFLLFVBQVUsR0FFbkUsY0FBYyxFQUFHLENBQ2YsTUFBTyxHQUVYLEVBR0EsTUFBTSxDQUFDLEVBQWUsQ0FDcEIsT0FBTyxFQUFjLE1BQU8sQ0FBQyxFQUFHLENBQzlCLEVBQWMsT0FBUSxDQUNwQixNQUFPLEtBQUssVUFDWixTQUFVLENBQUUsVUFBVyxLQUFLLFdBQVksQ0FDMUMsQ0FBQyxDQUNILENBQUMsRUFHTCxFQVFBLE1BQU8sQ0FBRSxZQUFXLFVBTkYsQ0FDaEIsT0FBTyxDQUFDLEVBQUssQ0FDWCxFQUFJLFVBQVUsY0FBZSxDQUFTLEVBRTFDLENBRThCLEVBTWhDLElBQU0sSUFBa0IsQ0FDdEIseUJBQTBCLEVBQUcsS0FBSSxTQUFRLFVBQVcsQ0FDbEQsSUFBTSxFQUFpQixJQUFXLENBQUUsRUFDcEMsSUFBSyxFQUFlLE9BQVEsT0FFNUIsSUFBTSxFQUFhLFNBQVMsY0FBYyxLQUFLLEVBQy9DLEVBQVcsVUFBWSxFQUFPLE1BQzlCLEVBQU8sTUFBUSxJQUFhLEVBQWdCLElBQVcsQ0FBVSxFQUFHLENBQUksRUFFNUUsRUFjQSxTQUFTLEdBQUcsQ0FBQyxFQUFNLENBQ2pCLE9BQU8sRUFBSyxTQUFTLFlBQVksRUFNbkMsU0FBUyxHQUFVLENBQUMsRUFBTSxDQUV4QixJQUFNLEVBQVMsQ0FBQyxFQTBCaEIsT0F6QkMsU0FBUyxDQUFXLENBQUMsRUFBTSxFQUFRLENBQ2xDLFFBQVMsRUFBUSxFQUFLLFdBQVksRUFBTyxFQUFRLEVBQU0sWUFDckQsR0FBSSxFQUFNLFdBQWEsRUFDckIsR0FBVSxFQUFNLFVBQVUsT0FDckIsUUFBSSxFQUFNLFdBQWEsR0FVNUIsR0FUQSxFQUFPLEtBQUssQ0FDVixNQUFPLFFBQ1AsT0FBUSxFQUNSLEtBQU0sQ0FDUixDQUFDLEVBQ0QsRUFBUyxFQUFZLEVBQU8sQ0FBTSxHQUk3QixJQUFJLENBQUssRUFBRSxNQUFNLGlCQUFpQixFQUNyQyxFQUFPLEtBQUssQ0FDVixNQUFPLE9BQ1AsT0FBUSxFQUNSLEtBQU0sQ0FDUixDQUFDLEVBSVAsT0FBTyxHQUNOLEVBQU0sQ0FBQyxFQUNILEVBUVQsU0FBUyxHQUFZLENBQUMsRUFBVSxFQUFhLEVBQU8sQ0FDbEQsSUFBSSxFQUFZLEVBQ1osRUFBUyxHQUNQLEVBQVksQ0FBQyxFQUVuQixTQUFTLENBQVksRUFBRyxDQUN0QixJQUFLLEVBQVMsU0FBVyxFQUFZLE9BQ25DLE9BQU8sRUFBUyxPQUFTLEVBQVcsRUFFdEMsR0FBSSxFQUFTLEdBQUcsU0FBVyxFQUFZLEdBQUcsT0FDeEMsT0FBUSxFQUFTLEdBQUcsT0FBUyxFQUFZLEdBQUcsT0FBVSxFQUFXLEVBa0JuRSxPQUFPLEVBQVksR0FBRyxRQUFVLFFBQVUsRUFBVyxFQU12RCxTQUFTLENBQUksQ0FBQyxFQUFNLENBRWxCLFNBQVMsQ0FBZSxDQUFDLEVBQU0sQ0FDN0IsTUFBTyxJQUFNLEVBQUssU0FBVyxLQUFPLEdBQVcsRUFBSyxLQUFLLEVBQUksSUFHL0QsR0FBVSxJQUFNLElBQUksQ0FBSSxFQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBSyxXQUFZLENBQWUsRUFBRSxLQUFLLEVBQUUsRUFBSSxJQU12RixTQUFTLENBQUssQ0FBQyxFQUFNLENBQ25CLEdBQVUsS0FBTyxJQUFJLENBQUksRUFBSSxJQU0vQixTQUFTLENBQU0sQ0FBQyxFQUFPLEVBQ3BCLEVBQU0sUUFBVSxRQUFVLEVBQU8sR0FBTyxFQUFNLElBQUksRUFHckQsTUFBTyxFQUFTLFFBQVUsRUFBWSxPQUFRLENBQzVDLElBQUksRUFBUyxFQUFhLEVBRzFCLEdBRkEsR0FBVSxHQUFXLEVBQU0sVUFBVSxFQUFXLEVBQU8sR0FBRyxNQUFNLENBQUMsRUFDakUsRUFBWSxFQUFPLEdBQUcsT0FDbEIsSUFBVyxFQUFVLENBT3ZCLEVBQVUsUUFBUSxFQUFFLFFBQVEsQ0FBSyxFQUNqQyxHQUNFLEVBQU8sRUFBTyxPQUFPLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFDN0IsRUFBUyxFQUFhLFFBQ2YsSUFBVyxHQUFZLEVBQU8sUUFBVSxFQUFPLEdBQUcsU0FBVyxHQUN0RSxFQUFVLFFBQVEsRUFBRSxRQUFRLENBQUksRUFDM0IsS0FDTCxHQUFJLEVBQU8sR0FBRyxRQUFVLFFBQ3RCLEVBQVUsS0FBSyxFQUFPLEdBQUcsSUFBSSxFQUU3QixPQUFVLElBQUksRUFFaEIsRUFBTyxFQUFPLE9BQU8sRUFBRyxDQUFDLEVBQUUsRUFBRSxHQUdqQyxPQUFPLEVBQVMsR0FBVyxFQUFNLE9BQU8sQ0FBUyxDQUFDLEVBYXBELElBQU0sSUFBbUIsQ0FBQyxFQUtwQixJQUFRLENBQUMsSUFBWSxDQUN6QixRQUFRLE1BQU0sQ0FBTyxHQU9qQixJQUFPLENBQUMsS0FBWSxJQUFTLENBQ2pDLFFBQVEsSUFBSSxTQUFTLElBQVcsR0FBRyxDQUFJLEdBT25DLEdBQWEsQ0FBQyxFQUFTLElBQVksQ0FDdkMsR0FBSSxJQUFpQixHQUFHLEtBQVcsS0FBWSxPQUUvQyxRQUFRLElBQUksb0JBQW9CLE1BQVksR0FBUyxFQUNyRCxJQUFpQixHQUFHLEtBQVcsS0FBYSxJQVF4QyxJQUFXLEdBQ1gsSUFBWSxHQUNaLElBQVcsT0FBTyxTQUFTLEVBTTNCLElBQU8sUUFBUSxDQUFDLEVBQU0sQ0FHMUIsSUFBTSxFQUFZLE9BQU8sT0FBTyxJQUFJLEVBRTlCLEVBQVUsT0FBTyxPQUFPLElBQUksRUFFNUIsRUFBVSxDQUFDLEVBSWIsRUFBWSxHQUNWLEVBQWMseUJBQ2QsRUFBcUIsc0ZBRXJCLEVBQXFCLENBQUUsa0JBQW1CLEdBQU0sS0FBTSxhQUFjLFNBQVUsQ0FBQyxDQUFFLEVBS25GLEVBQVUsQ0FDWixjQUFlLHFCQUNmLGlCQUFrQiw4QkFDbEIsWUFBYSxRQUNiLFdBQVksS0FDWixNQUFPLEdBQ1AsVUFBVyxLQUdYLFVBQVcsR0FDYixFQVFBLFNBQVMsQ0FBa0IsQ0FBQyxFQUFjLENBQ3hDLE9BQU8sRUFBUSxjQUFjLEtBQUssQ0FBWSxFQU1oRCxTQUFTLENBQWEsQ0FBQyxFQUFPLENBQzVCLElBQUksR0FBVSxFQUFNLFVBQVksSUFFaEMsSUFBVyxFQUFNLFdBQWEsRUFBTSxXQUFXLFVBQVksR0FHM0QsSUFBTSxHQUFRLEVBQVEsaUJBQWlCLEtBQUssRUFBTyxFQUNuRCxHQUFJLEdBQU8sQ0FDVCxJQUFNLEdBQVcsR0FBWSxHQUFNLEVBQUUsRUFDckMsSUFBSyxHQUNILElBQUssRUFBbUIsUUFBUSxLQUFNLEdBQU0sRUFBRSxDQUFDLEVBQy9DLElBQUssb0RBQXFELENBQUssRUFFakUsT0FBTyxHQUFXLEdBQU0sR0FBSyxlQUcvQixPQUFPLEdBQ0osTUFBTSxLQUFLLEVBQ1gsS0FBSyxDQUFDLEtBQVcsRUFBbUIsRUFBTSxHQUFLLEdBQVksRUFBTSxDQUFDLEVBeUJ2RSxTQUFTLENBQVMsQ0FBQyxFQUFvQixHQUFlLEdBQWdCLEdBQWMsQ0FDbEYsSUFBSSxHQUFPLEdBQ1AsR0FBZSxHQUNuQixHQUFJLE9BQU8sS0FBa0IsU0FDM0IsR0FBTyxFQUNQLEdBQWlCLEdBQWMsZUFDL0IsR0FBZSxHQUFjLFNBRzdCLEdBQWUsT0FHZixRQUFXLFNBQVUscURBQXFELEVBQzFFLEdBQVcsU0FBVTtBQUFBLHdEQUF1RyxFQUM1SCxHQUFlLEVBQ2YsR0FBTyxHQUlULElBQU0sRUFBVSxDQUNkLFFBQ0EsU0FBVSxFQUNaLEVBR0EsR0FBSyxtQkFBb0IsQ0FBTyxFQUloQyxJQUFNLEVBQVMsRUFBUSxPQUNuQixFQUFRLE9BQ1IsRUFBVyxFQUFRLFNBQVUsRUFBUSxLQUFNLEdBQWdCLEVBQVksRUFNM0UsT0FKQSxFQUFPLEtBQU8sRUFBUSxLQUV0QixHQUFLLGtCQUFtQixDQUFNLEVBRXZCLEVBWVQsU0FBUyxDQUFVLENBQUMsRUFBYyxHQUFpQixHQUFnQixHQUFjLENBTy9FLFNBQVMsRUFBVyxDQUFDLEdBQU0sR0FBTyxDQUNoQyxJQUFNLEdBQVksRUFBUyxpQkFBbUIsR0FBTSxHQUFHLFlBQVksRUFBSSxHQUFNLEdBQzdFLE9BQU8sT0FBTyxVQUFVLGVBQWUsS0FBSyxHQUFLLFNBQVUsRUFBUyxHQUFLLEdBQUssU0FBUyxJQUd6RixTQUFTLEVBQWUsRUFBRyxDQUN6QixJQUFLLEdBQUksU0FBVSxDQUNqQixHQUFRLFFBQVEsRUFBVSxFQUMxQixPQUdGLElBQUksR0FBWSxFQUNoQixHQUFJLGlCQUFpQixVQUFZLEVBQ2pDLElBQUksR0FBUSxHQUFJLGlCQUFpQixLQUFLLEVBQVUsRUFDNUMsR0FBTSxHQUVWLE1BQU8sR0FBTyxDQUNaLElBQU8sR0FBVyxVQUFVLEdBQVcsR0FBTSxLQUFLLEVBQ2xELElBQU0sR0FBTyxHQUFZLEdBQUssRUFBSyxFQUNuQyxHQUFJLEdBQU0sQ0FDUixJQUFPLEdBQU0sSUFBb0IsR0FLakMsR0FKQSxHQUFRLFFBQVEsRUFBRyxFQUNuQixHQUFNLEdBRU4sSUFBYSxHQUNULEdBQUssV0FBVyxHQUFHLEVBR3JCLElBQU8sR0FBTSxHQUNSLEtBQ0wsSUFBTSxHQUFXLEVBQVMsaUJBQWlCLEtBQVMsR0FDcEQsR0FBUSxXQUFXLEdBQU0sR0FBSSxFQUFRLEdBR3ZDLFNBQU8sR0FBTSxHQUVmLEdBQVksR0FBSSxpQkFBaUIsVUFDakMsR0FBUSxHQUFJLGlCQUFpQixLQUFLLEVBQVUsRUFFOUMsSUFBTyxHQUFXLE9BQU8sRUFBUyxFQUNsQyxHQUFRLFFBQVEsRUFBRyxFQUdyQixTQUFTLENBQWtCLEVBQUcsQ0FDNUIsR0FBSSxLQUFlLEdBQUksT0FFdkIsSUFBSSxHQUFTLEtBRWIsR0FBSSxPQUFPLEdBQUksY0FBZ0IsU0FBVSxDQUN2QyxJQUFLLEVBQVUsR0FBSSxhQUFjLENBQy9CLEdBQVEsUUFBUSxFQUFVLEVBQzFCLE9BRUYsR0FBUyxFQUFXLEdBQUksWUFBYSxHQUFZLEdBQU0sR0FBYyxHQUFJLFlBQVksRUFDckYsR0FBYyxHQUFJLGFBQTRDLEdBQU8sSUFFckUsUUFBUyxFQUFjLEdBQVksR0FBSSxZQUFZLE9BQVMsR0FBSSxZQUFjLElBQUksRUFPcEYsR0FBSSxHQUFJLFVBQVksRUFDbEIsSUFBYSxHQUFPLFVBRXRCLEdBQVEsZUFBZSxHQUFPLFFBQVMsR0FBTyxRQUFRLEVBR3hELFNBQVMsQ0FBYSxFQUFHLENBQ3ZCLEdBQUksR0FBSSxhQUFlLEtBQ3JCLEVBQW1CLEVBRW5CLFFBQWdCLEVBRWxCLEdBQWEsR0FNZixTQUFTLEVBQVksQ0FBQyxHQUFNLENBQzFCLEdBQUksR0FBSyxVQUNQLEdBQVEsU0FBUyxFQUFTLGlCQUFpQixHQUFLLFlBQWMsR0FBSyxTQUFTLEVBRzlFLE9BREEsR0FBTSxPQUFPLE9BQU8sR0FBTSxDQUFFLE9BQVEsQ0FBRSxNQUFPLEVBQUksQ0FBRSxDQUFDLEVBQzdDLEdBU1QsU0FBUyxFQUFTLENBQUMsR0FBTSxHQUFPLEdBQW9CLENBQ2xELElBQUksR0FBVSxJQUFXLEdBQUssTUFBTyxFQUFrQixFQUV2RCxHQUFJLEdBQVMsQ0FDWCxHQUFJLEdBQUssVUFBVyxDQUNsQixJQUFNLEdBQU8sSUFBSSxJQUFTLEVBQUksRUFFOUIsR0FEQSxHQUFLLFVBQVUsR0FBTyxFQUFJLEVBQ3RCLEdBQUssZUFBZ0IsR0FBVSxHQUdyQyxHQUFJLEdBQVMsQ0FDWCxNQUFPLEdBQUssWUFBYyxHQUFLLE9BQzdCLEdBQU8sR0FBSyxPQUVkLE9BQU8sSUFLWCxHQUFJLEdBQUssZUFDUCxPQUFPLEdBQVUsR0FBSyxPQUFRLEdBQU8sRUFBa0IsRUFTM0QsU0FBUyxFQUFRLENBQUMsR0FBUSxDQUN4QixHQUFJLEdBQUksUUFBUSxhQUFlLEVBSTdCLE9BREEsSUFBYyxHQUFPLEdBQ2QsRUFLUCxZQURBLEdBQTJCLEdBQ3BCLEVBVVgsU0FBUyxFQUFZLENBQUMsR0FBTyxDQUMzQixJQUFNLEdBQVMsR0FBTSxHQUNmLEdBQVUsR0FBTSxLQUVoQixHQUFPLElBQUksSUFBUyxFQUFPLEVBRTNCLEdBQWtCLENBQUMsR0FBUSxjQUFlLEdBQVEsV0FBVyxFQUNuRSxRQUFXLE1BQU0sR0FBaUIsQ0FDaEMsSUFBSyxHQUFJLFNBRVQsR0FEQSxHQUFHLEdBQU8sRUFBSSxFQUNWLEdBQUssZUFBZ0IsT0FBTyxHQUFTLEVBQU0sRUFHakQsR0FBSSxJQUFXLEdBQVEsZUFDckIsR0FBUSxNQUFRLElBQU8sRUFBTSxFQUcvQixHQUFJLEdBQVEsS0FDVixJQUFjLEdBQ1QsS0FDTCxHQUFJLEdBQVEsYUFDVixJQUFjLEdBR2hCLEdBREEsRUFBYyxHQUNULEdBQVEsY0FBZ0IsR0FBUSxhQUNuQyxHQUFhLEdBUWpCLE9BTEEsR0FBYSxFQUFPLEVBS2IsR0FBUSxZQUFjLEVBQUksR0FBTyxPQVExQyxTQUFTLEVBQVUsQ0FBQyxHQUFPLENBQ3pCLElBQU0sR0FBUyxHQUFNLEdBQ2YsR0FBcUIsR0FBZ0IsT0FBTyxHQUFNLEtBQUssRUFFdkQsR0FBVSxHQUFVLEdBQUssR0FBTyxFQUFrQixFQUN4RCxJQUFLLEdBQVcsT0FBTyxJQUV2QixJQUFNLEdBQVMsR0FDZixHQUFJLEdBQU8sS0FDVCxJQUFjLEdBQ1QsS0FDTCxLQUFNLEdBQU8sV0FBYSxHQUFPLFlBQy9CLElBQWMsR0FHaEIsR0FEQSxFQUFjLEVBQ1YsR0FBTyxXQUNULEdBQWEsR0FHakIsRUFBRyxDQUNELEdBQUksR0FBSSxVQUNOLEdBQVEsVUFBVSxFQUVwQixJQUFLLEdBQUksT0FBUyxHQUFJLFlBQ3BCLElBQWEsR0FBSSxVQUVuQixHQUFNLEdBQUksYUFDSCxLQUFRLEdBQVEsUUFDekIsR0FBSSxHQUFRLE9BQVEsQ0FDbEIsR0FBSSxHQUFRLGVBQ1YsR0FBUSxPQUFPLE1BQVEsR0FBUSxNQUVqQyxHQUFhLEdBQVEsTUFBTSxFQUU3QixPQUFPLEdBQU8sVUFBWSxFQUFJLEdBQU8sT0FHdkMsU0FBUyxFQUFvQixFQUFHLENBQzlCLElBQU0sR0FBTyxDQUFDLEVBQ2QsUUFBUyxHQUFVLEdBQUssS0FBWSxFQUFVLEdBQVUsR0FBUSxPQUM5RCxHQUFJLEdBQVEsVUFDVixHQUFLLFFBQVEsR0FBUSxTQUFTLEVBR2xDLEdBQUssUUFBUSxNQUFRLEdBQVEsU0FBUyxFQUFJLENBQUMsRUFJN0MsSUFBSSxHQUFZLENBQUMsRUFRakIsU0FBUyxFQUFhLENBQUMsR0FBaUIsR0FBTyxDQUM3QyxJQUFNLEdBQVMsSUFBUyxHQUFNLEdBSzlCLEdBRkEsSUFBYyxHQUVWLElBQVUsS0FFWixPQURBLEVBQWMsRUFDUCxFQU9ULEdBQUksR0FBVSxPQUFTLFNBQVcsR0FBTSxPQUFTLE9BQVMsR0FBVSxRQUFVLEdBQU0sT0FBUyxLQUFXLEdBQUksQ0FHMUcsR0FEQSxJQUFjLEdBQWdCLE1BQU0sR0FBTSxNQUFPLEdBQU0sTUFBUSxDQUFDLEdBQzNELEVBQVcsQ0FFZCxJQUFNLEdBQU0sSUFBSSxNQUFNLHFCQUFxQixFQUczQyxNQUZBLEdBQUksYUFBZSxFQUNuQixHQUFJLFFBQVUsR0FBVSxLQUNsQixHQUVSLE1BQU8sR0FJVCxHQUZBLEdBQVksR0FFUixHQUFNLE9BQVMsUUFDakIsT0FBTyxHQUFhLEVBQUssRUFDcEIsUUFBSSxHQUFNLE9BQVMsWUFBYyxHQUFnQixDQUd0RCxJQUFNLEdBQU0sSUFBSSxNQUFNLG1CQUFxQixHQUFTLGdCQUFrQixHQUFJLFdBQWEsYUFBZSxHQUFHLEVBRXpHLE1BREEsR0FBSSxLQUFPLEdBQ0wsR0FDRCxRQUFJLEdBQU0sT0FBUyxNQUFPLENBQy9CLElBQU0sR0FBWSxHQUFXLEVBQUssRUFDbEMsR0FBSSxLQUFjLElBQ2hCLE9BQU8sR0FPWCxHQUFJLEdBQU0sT0FBUyxXQUFhLEtBQVcsR0FFekMsTUFBTyxHQU9ULEdBQUksR0FBYSxLQUFVLEdBQWEsR0FBTSxNQUFRLEVBRXBELE1BRFksSUFBSSxNQUFNLDJEQUEyRCxFQWlCbkYsT0FEQSxJQUFjLEdBQ1AsR0FBTyxPQUdoQixJQUFNLEVBQVcsR0FBWSxDQUFZLEVBQ3pDLElBQUssRUFFSCxNQURBLElBQU0sRUFBbUIsUUFBUSxLQUFNLENBQVksQ0FBQyxFQUM5QyxJQUFJLE1BQU0sc0JBQXdCLEVBQWUsR0FBRyxFQUc1RCxJQUFNLEdBQUssSUFBZ0IsRUFBVSxDQUFFLFNBQVEsQ0FBQyxFQUM1QyxHQUFTLEdBRVQsR0FBTSxJQUFnQixHQUVwQixHQUFnQixDQUFDLEVBQ2pCLEdBQVUsSUFBSSxFQUFRLFVBQVUsQ0FBTyxFQUM3QyxHQUFxQixFQUNyQixJQUFJLEdBQWEsR0FDYixHQUFZLEVBQ1osR0FBUSxFQUNSLEdBQWEsRUFDYixHQUEyQixHQUUvQixHQUFJLENBQ0YsR0FBSSxRQUFRLFlBQVksRUFFeEIsT0FBUyxDQUVQLEdBREEsS0FDSSxHQUdGLEdBQTJCLEdBRTNCLFFBQUksUUFBUSxZQUFZLEVBRTFCLEdBQUksUUFBUSxVQUFZLEdBRXhCLElBQU0sR0FBUSxHQUFJLFFBQVEsS0FBSyxFQUFlLEVBRzlDLElBQUssR0FBTyxNQUVaLElBQU0sR0FBYyxHQUFnQixVQUFVLEdBQU8sR0FBTSxLQUFLLEVBQzFELEdBQWlCLEdBQWMsR0FBYSxFQUFLLEVBQ3ZELEdBQVEsR0FBTSxNQUFRLEdBT3hCLE9BTEEsR0FBYyxHQUFnQixPQUFPLEVBQUssQ0FBQyxFQUMzQyxHQUFRLGNBQWMsRUFDdEIsR0FBUSxTQUFTLEVBQ2pCLEdBQVMsR0FBUSxPQUFPLEVBRWpCLENBR0wsVUFBVyxLQUFLLE1BQU0sRUFBUyxFQUMvQixNQUFPLEdBQ1AsU0FBVSxFQUNWLFFBQVMsR0FDVCxRQUFTLEdBQ1QsSUFBSyxFQUNQLEVBQ0EsTUFBTyxHQUFLLENBQ1osR0FBSSxHQUFJLFNBQVcsR0FBSSxRQUFRLFNBQVMsU0FBUyxFQUMvQyxNQUFPLENBQ0wsUUFBUyxHQUNULFVBQVcsQ0FDVCxJQUFLLEdBQUksUUFDVCxRQUFTLEdBQWdCLE1BQU0sR0FBUSxJQUFLLEdBQVEsR0FBRyxFQUN2RCxLQUFNLEdBQUksSUFDWixFQUNBLE1BQU8sR0FDUCxVQUFXLEVBQ1gsTUFBTyxJQUFTLEVBQWUsRUFDL0IsUUFBUyxFQUNYLEVBQ0ssUUFBSSxFQUNULE1BQU8sQ0FDTCxRQUFTLEdBQ1QsVUFBVyxFQUNYLE1BQU8sSUFBUyxFQUFlLEVBQy9CLFFBQVMsR0FDVCxTQUFVLEVBQ1YsSUFBSyxHQUNMLFlBQWEsRUFDZixFQUVBLFdBQU0sSUFZWixTQUFTLENBQXVCLENBQUMsRUFBTSxDQUNyQyxJQUFNLEdBQVMsQ0FDYixVQUFXLEVBQ1gsUUFBUyxJQUFJLEVBQVEsVUFBVSxDQUFPLEVBQ3RDLE1BQU8sSUFBUyxDQUFJLEVBQ3BCLFFBQVMsR0FDVCxJQUFLLENBQ1AsRUFFQSxPQURBLEdBQU8sUUFBUSxRQUFRLENBQUksRUFDcEIsR0FpQlQsU0FBUyxDQUFhLENBQUMsRUFBTSxHQUFnQixDQUMzQyxHQUFpQixJQUFrQixFQUFRLFdBQWEsT0FBTyxLQUFLLENBQVMsRUFDN0UsSUFBTSxHQUFZLEVBQXdCLENBQUksRUFFeEMsR0FBVSxHQUFlLE9BQU8sRUFBVyxFQUFFLE9BQU8sRUFBYSxFQUFFLElBQUksTUFDM0UsRUFBVyxHQUFNLEVBQU0sRUFBSyxDQUM5QixFQUNBLEdBQVEsUUFBUSxFQUFTLEVBRXpCLElBQU0sR0FBUyxHQUFRLEtBQUssQ0FBQyxHQUFHLEtBQU0sQ0FFcEMsR0FBSSxHQUFFLFlBQWMsR0FBRSxVQUFXLE9BQU8sR0FBRSxVQUFZLEdBQUUsVUFJeEQsR0FBSSxHQUFFLFVBQVksR0FBRSxVQUNsQixHQUFJLEdBQVksR0FBRSxRQUFRLEVBQUUsYUFBZSxHQUFFLFNBQzNDLE1BQU8sR0FDRixRQUFJLEdBQVksR0FBRSxRQUFRLEVBQUUsYUFBZSxHQUFFLFNBQ2xELE1BQU8sR0FRWCxNQUFPLEdBQ1IsR0FFTSxHQUFNLEdBQWMsR0FHckIsRUFBUyxHQUdmLE9BRkEsRUFBTyxZQUFjLEVBRWQsRUFZVCxTQUFTLENBQVMsQ0FBQyxFQUFNLENBQ3ZCLEtBQU0sRUFBUSxZQUFjLEVBQVEsT0FDbEMsT0FBTyxFQUdULE9BQU8sRUFBSyxRQUFRLEVBQWEsTUFBUyxDQUN4QyxHQUFJLEtBQVU7QUFBQSxFQUNaLE9BQU8sRUFBUSxNQUFRLE9BQVMsR0FDM0IsUUFBSSxFQUFRLFdBQ2pCLE9BQU8sR0FBTSxRQUFRLE1BQU8sRUFBUSxVQUFVLEVBRWhELE9BQU8sR0FDUixFQVVILFNBQVMsQ0FBZSxDQUFDLEVBQVMsR0FBYSxHQUFZLENBQ3pELElBQU0sR0FBVyxHQUFjLEVBQVEsSUFBZSxHQUd0RCxHQURBLEVBQVEsVUFBVSxJQUFJLE1BQU0sRUFDeEIsR0FBVSxFQUFRLFVBQVUsSUFBSSxFQUFRLEVBSTlDLElBQU0sRUFBVyxDQUNmLDBCQUEyQixFQUFHLFFBQVMsQ0FDckMsR0FBSSxFQUFRLE1BQ1YsRUFBRyxVQUFZLEVBQUcsVUFBVSxRQUFRLE1BQU8sRUFBRSxFQUFFLFFBQVEsYUFBYztBQUFBLENBQUksR0FHN0UseUJBQTBCLEVBQUcsWUFBYSxDQUN4QyxHQUFJLEVBQVEsTUFDVixFQUFPLE1BQVEsRUFBTyxNQUFNLFFBQVEsTUFBTyxNQUFNLEVBR3ZELEVBRU0sRUFBaUIsbUJBRWpCLEVBQW1CLENBQ3ZCLHlCQUEwQixFQUFHLFlBQWEsQ0FDeEMsR0FBSSxFQUFRLFdBQ1YsRUFBTyxNQUFRLEVBQU8sTUFBTSxRQUFRLEVBQWdCLENBQUMsS0FDbkQsR0FBRSxRQUFRLE1BQU8sRUFBUSxVQUFVLENBQ3JDLEVBR04sRUFRQSxTQUFTLENBQWdCLENBQUMsRUFBUyxDQUVqQyxJQUFJLEdBQU8sS0FDTCxHQUFXLEVBQWMsQ0FBTyxFQUV0QyxHQUFJLEVBQW1CLEVBQVEsRUFBRyxPQUdsQyxHQUFLLDBCQUNILENBQUUsR0FBSSxFQUFTLFNBQVUsRUFBUyxDQUFDLEVBRXJDLEdBQU8sRUFDUCxJQUFNLEdBQU8sR0FBSyxZQUNaLEdBQVMsR0FBVyxFQUFVLEdBQU0sQ0FBRSxZQUFVLGVBQWdCLEVBQUssQ0FBQyxFQUFJLEVBQWMsRUFBSSxFQWFsRyxHQVZBLEdBQUsseUJBQTBCLENBQUUsR0FBSSxFQUFTLFVBQVEsT0FBSyxDQUFDLEVBRTVELEVBQVEsVUFBWSxHQUFPLE1BQzNCLEVBQWdCLEVBQVMsR0FBVSxHQUFPLFFBQVEsRUFDbEQsRUFBUSxPQUFTLENBQ2YsU0FBVSxHQUFPLFNBRWpCLEdBQUksR0FBTyxVQUNYLFVBQVcsR0FBTyxTQUNwQixFQUNJLEdBQU8sWUFDVCxFQUFRLFlBQWMsQ0FDcEIsU0FBVSxHQUFPLFlBQVksU0FFN0IsR0FBSSxHQUFPLFlBQVksVUFDdkIsVUFBVyxHQUFPLFlBQVksU0FDaEMsRUFTSixTQUFTLENBQVMsQ0FBQyxFQUFhLENBQzlCLEdBQUksRUFBWSxNQUNkLEdBQVcsU0FBVSwyQ0FBMkMsRUFDaEUsR0FBVyxTQUFVLG9FQUFvRSxFQUUzRixFQUFVLElBQVUsRUFBUyxDQUFXLEVBUzFDLElBQU0sRUFBbUIsSUFBTSxDQUM3QixHQUFJLEVBQWlCLE9BQVEsT0FDN0IsRUFBaUIsT0FBUyxHQUUxQixHQUFXLFNBQVUsZ0VBQWdFLEVBRXRFLFNBQVMsaUJBQWlCLFVBQVUsRUFDNUMsUUFBUSxDQUFnQixHQUtqQyxTQUFTLENBQXNCLEVBQUcsQ0FDaEMsR0FBVyxTQUFVLHNFQUFzRSxFQUMzRixHQUFpQixHQUduQixJQUFJLEdBQWlCLEdBS3JCLFNBQVMsQ0FBWSxFQUFHLENBRXRCLEdBQUksU0FBUyxhQUFlLFVBQVcsQ0FDckMsR0FBaUIsR0FDakIsT0FHYSxTQUFTLGlCQUFpQixVQUFVLEVBQzVDLFFBQVEsQ0FBZ0IsRUFHakMsU0FBUyxFQUFJLEVBQUcsQ0FFZCxHQUFJLEdBQWdCLEVBQWEsRUFJbkMsR0FBSSxPQUFPLFNBQVcsYUFBZSxPQUFPLGlCQUMxQyxPQUFPLGlCQUFpQixtQkFBb0IsR0FBTSxFQUFLLEVBU3pELFNBQVMsRUFBZ0IsQ0FBQyxFQUFjLEdBQW9CLENBQzFELElBQUksR0FBTyxLQUNYLEdBQUksQ0FDRixHQUFPLEdBQW1CLENBQUksRUFDOUIsTUFBTyxHQUFTLENBR2hCLEdBRkEsSUFBTSx3REFBd0QsUUFBUSxLQUFNLENBQVksQ0FBQyxHQUVwRixFQUFhLE1BQU0sR0FBa0IsU0FBTSxFQUFPLEVBS3ZELEdBQU8sRUFHVCxJQUFLLEdBQUssS0FBTSxHQUFLLEtBQU8sRUFJNUIsR0FIQSxFQUFVLEdBQWdCLEdBQzFCLEdBQUssY0FBZ0IsR0FBbUIsS0FBSyxLQUFNLENBQUksRUFFbkQsR0FBSyxRQUNQLEdBQWdCLEdBQUssUUFBUyxDQUFFLGNBQWEsQ0FBQyxFQVNsRCxTQUFTLEVBQWtCLENBQUMsRUFBYyxDQUN4QyxPQUFPLEVBQVUsR0FDakIsUUFBVyxNQUFTLE9BQU8sS0FBSyxDQUFPLEVBQ3JDLEdBQUksRUFBUSxNQUFXLEVBQ3JCLE9BQU8sRUFBUSxJQVFyQixTQUFTLEVBQWEsRUFBRyxDQUN2QixPQUFPLE9BQU8sS0FBSyxDQUFTLEVBWTlCLFNBQVMsQ0FBZSxDQUFDLEVBQU0sQ0FDN0IsR0FBVyxTQUFVLGtEQUFrRCxFQUN2RSxHQUFXLFNBQVUsa0VBQWtFLEVBRXZGLElBQU0sR0FBTyxHQUFZLENBQUksRUFDN0IsR0FBSSxHQUFRLE9BQU8sR0FHbkIsTUFEWSxJQUFJLE1BQU0saURBQW1ELFFBQVEsS0FBTSxDQUFJLENBQUMsRUFROUYsU0FBUyxFQUFXLENBQUMsRUFBTSxDQUV6QixPQURBLEdBQVEsR0FBUSxJQUFJLFlBQVksRUFDekIsRUFBVSxJQUFTLEVBQVUsRUFBUSxJQVE5QyxTQUFTLEVBQWUsQ0FBQyxHQUFhLGlCQUFnQixDQUNwRCxHQUFJLE9BQU8sSUFBYyxTQUN2QixFQUFZLENBQUMsQ0FBUyxFQUV4QixFQUFVLFFBQVEsTUFBUyxDQUFFLEVBQVEsR0FBTSxZQUFZLEdBQUssR0FBZSxFQU83RSxTQUFTLEVBQWEsQ0FBQyxFQUFNLENBQzNCLElBQU0sR0FBTyxHQUFZLENBQUksRUFDN0IsT0FBTyxLQUFTLEdBQUssa0JBUXZCLFNBQVMsRUFBZ0IsQ0FBQyxFQUFRLENBRWhDLEdBQUksRUFBTywyQkFBNkIsRUFBTywyQkFDN0MsRUFBTywyQkFBNkIsQ0FBQyxLQUFTLENBQzVDLEVBQU8seUJBQ0wsT0FBTyxPQUFPLENBQUUsTUFBTyxHQUFLLEVBQUcsRUFBRyxFQUFJLENBQ3hDLEdBR0osR0FBSSxFQUFPLDBCQUE0QixFQUFPLDBCQUM1QyxFQUFPLDBCQUE0QixDQUFDLEtBQVMsQ0FDM0MsRUFBTyx3QkFDTCxPQUFPLE9BQU8sQ0FBRSxNQUFPLEdBQUssRUFBRyxFQUFHLEVBQUksQ0FDeEMsR0FRTixTQUFTLEVBQVMsQ0FBQyxFQUFRLENBQ3pCLEdBQWlCLENBQU0sRUFDdkIsRUFBUSxLQUFLLENBQU0sRUFRckIsU0FBUyxFQUFJLENBQUMsRUFBTyxHQUFNLENBQ3pCLElBQU0sR0FBSyxFQUNYLEVBQVEsUUFBUSxRQUFRLENBQUMsR0FBUSxDQUMvQixHQUFJLEdBQU8sSUFDVCxHQUFPLElBQUksRUFBSSxFQUVsQixFQVNILFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBSS9CLE9BSEEsR0FBVyxTQUFVLDZDQUE2QyxFQUNsRSxHQUFXLFNBQVUsb0VBQW9FLEVBRWxGLEVBQVUsQ0FBRyxFQU90QixTQUFTLEVBQXVCLENBQUMsRUFBSSxDQUluQyxPQUhBLEdBQVcsU0FBVSxrREFBa0QsRUFDdkUsR0FBVyxTQUFVLGtDQUFrQyxFQUVoRCxFQUFpQixDQUFFLEVBSTVCLE9BQU8sT0FBTyxFQUFNLENBQ2xCLFlBQ0EsZ0JBQ0EsZUFDQSxVQUFXLEdBQ1gsbUJBRUEsZUFBZ0IsR0FDaEIsWUFDQSxtQkFDQSx5QkFDQSxvQkFDQSxzQkFDQSxpQkFDQSxlQUNBLG1CQUNBLGtCQUNBLGlCQUNBLFFBQVMsSUFDVCxhQUVBLFVBQVcsSUFBZSxDQUFJLEVBQUUsU0FDbEMsQ0FBQyxFQUVELEVBQUssVUFBWSxRQUFRLEVBQUcsQ0FBRSxFQUFZLElBQzFDLEVBQUssU0FBVyxRQUFRLEVBQUcsQ0FBRSxFQUFZLElBQ3pDLEVBQUssY0FBZ0IsSUFFckIsUUFBVyxLQUFPLEdBRWhCLEdBQUksT0FBTyxHQUFNLEtBQVMsU0FFeEIsSUFBYyxHQUFNLEVBQUksRUFXNUIsT0FOQSxPQUFPLE9BQU8sRUFBTSxFQUFLLEVBR3pCLEVBQUssVUFBVSxDQUFRLEVBQ3ZCLEVBQUssVUFBVSxHQUFlLEVBQzlCLEVBQUssVUFBVSxDQUFnQixFQUN4QixHQUlMLElBQVksSUFBSyxDQUFDLENBQUMsRUFFdkIsSUFBTyxRQUFVLDRCQzc4RWpCLFNBQVMsR0FBRyxDQUFDLEVBQU0sQ0FHakIsSUFBSSxFQUFzQix5Q0FHdEIsRUFDSixTQUdJLEVBQ0osc0dBQ0EseUdBR0ksRUFBVSxFQUFjLEVBR3hCLEVBQ0osb0JBR0ksRUFDSiw4R0FDQSw2R0FDQSwrRkFHSSxFQUFjLEVBQW1CLEVBR2pDLEVBQ0osdURBR0ksRUFDSiw4R0FDQSwrR0FDQSwrR0FDQSx5R0FDQSx1R0FDQSxrR0FDQSxrR0FDQSxpR0FDQSxtR0FDQSwwR0FDQSxzR0FHSSxFQUNKLHVHQUNBLGtIQUNBLDZHQUNBLG1IQUNBLHdIQUNBLGdIQUNBLHlIQUNBLG1IQUNBLHNIQUNBLG9IQUNBLHVIQUNBLDhHQUNBLDJHQUNBLGtIQUNBLDRIQUNBLDJHQUNBLCtHQUNBLDhIQUNBLCtIQUNBLHdIQUNBLHNIQUNBLGdJQUNBLHVHQUNBLHFIQUNBLGtIQUNBLGlIQUNBLDRFQUNBLHdIQUNBLDRHQUNBLDhHQUNBLDBIQUNBLGlJQUNBLHFHQUNBLHdIQUNBLDRHQUNBLDhGQUNBLDZHQUNBLDZHQUNBLGtIQUNBLDBIQUNBLDBIQUNBLHlHQUNBLDZGQUNBLGtIQUNBLGtHQUNBLDRHQUNBLG1IQUNBLCtHQUNBLDRIQUNBLDZIQUNBLCtIQUNBLDRIQUNBLG9JQUNBLDhHQUNBLDJIQUNBLG1JQUNBLHVIQUNBLHlIQUNBLDBIQUNBLHdIQUNBLHlHQUNBLHFHQUNBLDJIQUNBLGlIQUNBLHlGQUNBLHNIQUNBLHNHQUNBLHFGQUNBLDRGQUNBLHVIQUNBLG1IQUNBLGdHQUdJLEVBQ0osMkdBQ0EseUdBQ0Esc0hBQ0EsOEhBQ0EsK0dBQ0EsMkhBQ0EsOEdBQ0EseUhBQ0EsMEhBQ0EscUlBQ0EsdUVBR0ksRUFDSixFQUNBLEVBQTRCLEVBQzVCLEVBR0ksRUFDSixvR0FHSSxFQUNKLDJGQUNBLDZGQUNBLGlHQUNBLG1HQUNBLHlHQUNBLDJGQUNBLDBHQUNBLGlGQUNBLHNHQUNBLDJHQUNBLHdHQUNBLDBHQUNBLDJGQUNBLGlGQUNBLDJHQUNBLHlHQUNBLDBHQUNBLHNGQUNBLDRHQUNBLG1HQUNBLHNGQUNBLGlIQUNBLG1IQUNBLG1IQUNBLHdHQUNBLDRGQUNBLHFHQUNBLDRHQUNBLG9HQUNBLDRGQUNBLHlHQUNBLDhHQUNBLDhGQUNBLGtGQUNBLG1HQUNBLCtGQUNBLCtHQUNBLDBFQUNBLCtGQUNBLDJHQUNBLDhGQUNBLG1GQUNBLDZGQUNBLHNHQUNBLHlHQUNBLGtEQUdJLEVBQ0osa0hBQ0Esc0dBQ0EsMkhBR0ksRUFDSixvR0FHSSxFQUNKLHVHQUNBLDhIQUNBLHlHQUNBLHVHQUNBLDBIQUNBLHVHQUNBLHlHQUdJLEVBQ0osMkNBR0ksRUFDSixxQ0FHSSxFQUNKLDJDQUdJLEVB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Q0FDRSxVQUFXLFVBQ1gsU0FBVSxDQUNSLENBQ0UsTUFBTyxtQkFDVCxFQUNBLENBQ0UsTUFBTyx5Q0FDVCxFQUNBLENBQ0UsTUFBTyx5Q0FDVCxFQUNBLENBQ0UsTUFBTyw4Q0FDVCxFQUNBLENBQ0UsTUFBTyxtQ0FDVCxFQUNBLENBQ0UsTUFBTywwQkFDVCxFQUNBLENBQ0UsTUFBTyxxQkFDVCxFQUNBLENBQ0UsTUFBTyw0QkFDVCxFQUNBLENBQ0UsTUFBTyx3Q0FDVCxFQUNBLENBQ0UsTUFBTyw4QkFDVCxFQUNBLENBQ0UsTUFBTyxvQ0FDVCxFQUNBLENBQ0UsTUFBTywrRUFDVCxFQUNBLENBQ0UsTUFBTyxxQkFDVCxFQUNBLENBQ0UsTUFBTyxxQkFDVCxFQUNBLENBQ0UsTUFBTyw2QkFDVCxFQUNBLENBQ0UsTUFBTyxtQkFDVCxFQUNBLENBQ0UsTUFBTyxxQkFDVCxFQUNBLENBQ0UsTUFBTyw0REFDVCxFQUNBLENBQ0UsTUFBTywyQkFDVCxFQUNBLENBQ0UsTUFBTyw4Q0FDVCxFQUNBLENBQ0UsTUFBTyxrQ0FDVCxFQUNBLENBQ0UsTUFBTyxtQ0FDVCxFQUNBLENBQ0UsTUFBTyxzQ0FDVCxFQUNBLENBQ0UsTUFBTywyQkFDVCxFQUNBLENBQ0UsTUFBTyxzQkFDVCxFQUNBLENBQ0UsTUFBTyxzQ0FDVCxFQUNBLENBQ0UsTUFBTyx5QkFDVCxFQUNBLENBQ0UsTUFBTywwQkFDVCxFQUNBLENBQ0UsTUFBTyxpQ0FDVCxFQUNBLENBQ0UsTUFBTyw2QkFDVCxFQUNBLENBQ0UsTUFBTyw0QkFDVCxFQUNBLENBQ0UsTUFBTyx1Q0FDVCxFQUNBLENBQ0UsTUFBTyxtQ0FDVCxFQUNBLENBQ0UsTUFBTyxxQ0FDVCxFQUNBLENBQ0UsTUFBTyx3Q0FDVCxFQUNBLENBQ0UsTUFBTyxzQkFDVCxFQUNBLENBQ0UsTUFBTyxrQkFDVCxFQUNBLENBQ0UsTUFBTywyQkFDVCxFQUNBLENBQ0UsTUFBTyxpQ0FDVCxFQUNBLENBQ0UsTUFBTyxvQ0FDVCxFQUNBLENBQ0UsTUFBTyxxR0FDVCxFQUNBLENBQ0UsTUFBTyxrRUFD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LENBQ3JCLE1BQ0EsT0FDQSxNQUNBLFdBQ0EsUUFDQSxNQUNBLE1BQ0EsTUFDQSxRQUNBLFlBQ0Esd0JBQ0EsS0FDQSxhQUNBLE9BQ0EsYUFDQSxLQUNBLE9BQ0EsU0FDQSxnQkFDQSxNQUNBLFFBQ0EsY0FDQSxrQkFDQSxVQUNBLFNBQ0EsU0FDQSxPQUNBLFVBQ0EsT0FDQSxLQUNBLE9BQ0EsU0FDQSxjQUNBLFdBQ0EsT0FDQSxPQUNBLE9BQ0EsVUFDQSxPQUNBLGNBQ0EsWUFDQSxtQkFDQSxRQUNBLGFBQ0EsT0FDQSxRQUNBLFdBQ0EsVUFDQSxVQUNBLFNBQ0EsU0FDQSxZQUNBLFVBQ0EsYUFDQSxXQUNBLFVBQ0EsT0FDQSxPQUNBLGdCQUNBLE1BQ0EsT0FDQSxRQUNBLFlBQ0EsYUFDQSxTQUNBLFFBQ0EsT0FDQSxZQUNBLFVBQ0Esa0JBQ0EsZUFDQSxrQ0FDQSxlQUNBLGVBQ0EsY0FDQSxpQkFDQSxlQUNBLG9CQUNBLGVBQ0EsZUFDQSxtQ0FDQSxlQUNBLFNBQ0EsUUFDQSxPQUNBLE1BQ0EsYUFDQSxNQUNBLFVBQ0EsV0FDQSxVQUNBLFVBQ0EsU0FDQSxTQUNBLGFBQ0EsUUFDQSxXQUNBLGdCQUNBLGFBQ0EsV0FDQSxTQUNBLE9BQ0EsVUFDQSxPQUNBLFVBQ0EsT0FDQSxRQUNBLE1BQ0EsWUFDQSxnQkFDQSxXQUNBLFNBQ0EsU0FDQSxRQUNBLFNBQ0EsT0FDQSxVQUNBLFNBQ0EsTUFDQSxXQUNBLFVBQ0EsUUFDQSxRQUNBLFNBQ0EsY0FDQSxRQUNBLFFBQ0EsTUFDQSxVQUNBLFlBQ0EsT0FDQSxPQUNBLE9BQ0EsV0FDQSxTQUNBLE1BQ0EsU0FDQSxRQUNBLFFBQ0EsV0FDQSxTQUNBLFNBQ0EsT0FDQSxPQUNBLFdBQ0EsS0FDQSxZQUNBLFVBQ0EsUUFDQSxRQUNBLGNBQ0EsU0FDQSxNQUNBLFVBQ0EsWUFDQSxlQUNBLFdBQ0EsT0FDQSxLQUNBLE9BQ0EsYUFDQSxnQkFDQSxjQUNBLGNBQ0EsaUJBQ0EsYUFDQSxhQUNBLHVCQUNBLGFBQ0EsTUFDQSxXQUNBLFFBQ0EsYUFDQSxVQUNBLE9BQ0EsVUFDQSxPQUNBLE9BQ0EsYUFDQSxVQUNBLEtBQ0EsUUFDQSxZQUNBLGlCQUNBLE1BQ0EsUUFDQSxRQUNBLFFBQ0EsZUFDQSxrQkFDQSxVQUNBLE1BQ0EsU0FDQSxRQUNBLFNBQ0EsTUFDQSxTQUNBLE1BQ0EsV0FDQSxTQUNBLFFBQ0EsV0FDQSxXQUNBLFVBQ0EsUUFDQSxRQUNBLE1BQ0EsS0FDQSxPQUNBLFlBQ0EsTUFDQSxZQUNBLFFBQ0EsT0FDQSxTQUNBLFVBQ0EsZUFDQSxvQkFDQSxLQUNBLFNBQ0EsTUFDQSxPQUNBLEtBQ0EsTUFDQSxPQUNBLE9BQ0EsS0FDQSxRQUNBLE1BQ0EsUUFDQSxPQUNBLFdBQ0EsVUFDQSxZQUNBLFlBQ0EsVUFDQSxNQUNBLFVBQ0EsZUFDQSxrQkFDQSxrQkFDQSxTQUNBLFVBQ0EsV0FDQSxpQkFDQSxRQUNBLFdBQ0EsWUFDQSxVQUNBLFVBQ0EsWUFDQSxNQUNBLFFBQ0EsT0FDQSxRQUNBLE9BQ0EsWUFDQSxNQUNBLGFBQ0EsY0FDQSxZQUNBLFlBQ0EsYUFDQSxpQkFDQSxVQUNBLGFBQ0EsV0FDQSxXQUNBLFdBQ0EsVUFDQSxTQUNBLFNBQ0EsVUFDQSxTQUNBLFFBQ0EsV0FDQSxTQUNBLE1BQ0EsYUFDQSxPQUNBLFVBQ0EsWUFDQSxRQUNBLFNBQ0EsU0FDQSxTQUNBLE9BQ0EsU0FDQSxZQUNBLGVBQ0EsTUFDQSxPQUNBLFVBQ0EsTUFDQSxPQUNBLE9BQ0EsV0FDQSxPQUNBLFdBQ0EsZUFDQSxNQUNBLGVBQ0EsV0FDQSxhQUNBLE9BQ0EsUUFDQSxTQUNBLGFBQ0EsY0FDQSxjQUNBLFNBQ0EsWUFDQSxrQkFDQSxXQUNBLE1BQ0EsWUFDQSxTQUNBLGNBQ0EsY0FDQSxRQUNBLGNBQ0EsTUFDQSxPQUNBLE9BQ0EsT0FDQSxZQUNBLGdCQUNBLGtCQUNBLEtBQ0EsV0FDQSxZQUNBLGtCQUNBLGNBQ0EsUUFDQSxVQUNBLE9BQ0EsYUFDQSxPQUNBLFdBQ0EsVUFDQSxRQUNBLFNBQ0EsVUFDQSxTQUNBLFlBQ0EsUUFDQSxPQUNBLFFBQ0EsUUFDQSxTQUNBLFdBQ0EsVUFDQSxXQUNBLFlB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LEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLE1BQU0sTUFBTSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxNQUFNLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsTUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksTUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxNQUFNLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLE1BQU0sR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxFQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFH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RSxVQUFXLElBQ2IsR0FBRSxJQUFLLElBQ1AsR0FBRSxJQUFLLElBQ1AsR0FBRSxJQUFLLElBQ1AsR0FBRSxJQUFLLElBQ1AsR0FBRSxJQUFLLElBQ1AsR0FBRSxJQUFLLElBQ1AsR0FBRSxNQUFPLElBQ1QsR0FBRSxRQUFTLElBQ1gsR0FBRSxRQUFTLElBQ1gsR0FBRSxJQUFLLElBQ1AsR0FBRSxNQUFPLElBQ1QsR0FBRSxRQUFTLElBQ1gsR0FBRSxLQUFNLElBQ1IsR0FBRSxPQUFRLElBQ1YsR0FBRSxJQUFLLElBQ1AsR0FBRSxNQUFPLElBQ1QsR0FBRSxTQUFVLElBQ1osR0FBRSxNQUFPLElBQ1QsR0FBRSxTQUFVLElBQ1osR0FBRSxNQUFPLElBQ1QsR0FBRSxNQUFPLElBQ1QsR0FBRSxLQUFNLElBQ1IsR0FBRSxTQUFVLElBQ1osR0FBRSxVQUFXLElBQ2IsR0FBRSxVQUFXLElBQ2IsR0FBRSxRQUFTLElBQ1gsR0FBRSxJQUFLLElBQ1AsR0FBRSxHQUFJLElBQ04sR0FBRSxPQUFRLElBQ1YsR0FBRSxXQUFZLElBQ2QsR0FBRSxLQUFNLElBQ1IsR0FBRSxRQUFTLElBQ1gsR0FBRSxTQUFVLElBQ1osR0FBRSxRQUFTLElBQ1gsR0FBRSxRQUFTLElBQ1gsR0FBRSxPQUFRLElBQ1YsR0FBRSxTQUFVLElBQ1osR0FBRSxPQUFRLElBQ1YsR0FBRSxPQUFRLElBQ1YsR0FBRSxJQUFLLElBQ1AsR0FBRSxVQUFXLElBQ2IsR0FBRSxVQUFXLElBQ2IsR0FBRSxPQUFRLElBQ1YsR0FBRSxJQUFLLElBQ1AsR0FBRSxPQUFRLElBQ1YsR0FBRSxPQUFRLElBQ1YsR0FBRSxJQUFLLElBQ1AsR0FBRSxPQUFRLElBQ1YsR0FBRSxJQUFLLElBQ1AsR0FBRSxLQUFNLElBQ1IsR0FBRSxLQUFNLEVBQ2IsR0FDQyxJQUFHLFFBQVMsRUFDUixHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLE9BQVEsSUFDVixHQUFFLGdCQUFpQixFQUN4QixHQUNDLElBQUcs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SUFDSCxPQUFRLFNBQ1IsUUFBUyxVQUNULE9BQVEsU0FDUixPQUFRLFNBQ1IsTUFBTyxRQUNQLEtBQU0sT0FDTixPQUFRLFNBQ1IsT0FBUSxTQUNSLE1BQU8sUUFDUCxJQUFLLE1BQ0wsUUFBUyxVQUNULElBQUssTUFFTCxNQUFPLFFBQ1AsTUFBTyxRQUNQLFNBQVUsV0FDVixTQUFVLFdBQ1YsTUFBTyxRQUNQLEdBQUksS0FDSixHQUFJLEtBQ0osTUFBTyxRQUNQLE1BQU8sUUFDUCxHQUFJLEtBQ0osTUFBTyxRQUNQLEdBQUksS0FFSixFQUFHLElBQ0gsR0FBSSxLQUVKLElBQUssTUFFTCxJQUFLLE1BRUwsSUFBSyxNQUVMLElBQUssS0FDVCxFQUVRLHFCQUFtQixFQUN0QixJQUFHLE1BQU8sRUFDTixHQUFFLFNBQVUsSUFDWixHQUFFLFFBQVMsSUFDWCxHQUFFLE1BQU8sSUFDVCxHQUFFLFNBQVUsSUFDWixHQUFFLE9BQVEsSUFDVixHQUFFLE1BQU8sSUFDVCxHQUFFLFVBQVcsSUFDYixHQUFFLFNBQVUsSUFDWixHQUFFLFlBQWEsSUFDZixHQUFFLE1BQU8sSUFDVCxHQUFFLElBQUssSUFDUCxHQUFFLFFBQVMsSUFDWCxHQUFFLFNBQVUsSUFDWixHQUFFLFFBQVMsSUFDWCxHQUFFLEtBQU0sSUFDUixHQUFFLFVBQVcsSUFDYixHQUFFLElBQUssSUFDUCxHQUFFLFNBQVUsSUFDWixHQUFFLEtBQU0sSUFDUixHQUFFLEtBQU0sSUFDUixHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLE9BQVEsSUFDVixHQUFFLFVBQVcsSUFDYixHQUFFLFlBQWEsSUFDZixHQUFFLFFBQVMsSUFDWCxHQUFFLFFBQVMsSUFDWCxHQUFFLE1BQU8sSUFDVCxHQUFFLE9BQVEsSUFDVixHQUFFLFVBQVcsSUFDYixHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLElBQUssSUFDUCxHQUFFLE1BQU8sSUFDVCxHQUFFLFFB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SUFBVSxJQUFVLEdBQVEsRUFDaEMsRUFBRyxDQUFDLElBQVUsSUFBVSxJQUFVLElBQVUsSUFBVSxHQUFRLEVBQzlELEVBQUcsQ0FBQyxJQUFVLElBQVUsSUFBVSxJQUFVLElBQVUsSUFBVSxJQUM5RCxHQUFRLEVBQ1YsRUFBRyxDQUFDLEdBQVEsRUFDWixFQUFHLENBQUMsR0FBUSxFQUNaLEVBQUcsQ0FBQyxJQUFVLElBQVUsSUFBVSxJQUFVLElBQVUsR0FBUSxFQUM5RCxFQUFHLENBQUMsR0FBUSxFQUNaLEVBQUcsQ0FBQyxHQUFRLEVBQ1osRUFBRyxDQUFDLElBQVUsSUFBVSxJQUFVLEdBQVEsRUFDMUMsRUFBRyxDQUFDLEdBQVEsRUFDWixFQUFHLENBQUMsSUFBVSxJQUFVLElBQVUsSUFBVSxJQUFVLEdBQVEsRUFDOUQsRUFBRyxDQUFDLElBQVUsSUFBVSxJQUFVLElBQVUsSUFBVSxHQUFRLEVBQzlELEVBQUcsQ0FBQyxJQUFVLElBQVUsSUFBVSxJQUFVLElBQVUsSUFBVSxJQUM5RCxJQUFVLEdBQVEsRUFDcEIsRUFBRyxDQUFDLElBQVUsR0FBUSxFQUN0QixFQUFHLENBQUMsR0FBUSxFQUNaLEVBQUcsQ0FBQyxJQUFVLElBQVUsSUFBVSxJQUFVLElBQVUsR0FBUSxFQUM5RCxFQUFHLENBQUMsSUFBVSxJQUFVLElBQVUsR0FBUSxFQUMxQyxFQUFHLENBQUMsSUFBVSxJQUFVLEdBQVEsRUFDaEMsRUFBRyxDQUFDLElBQVUsR0FBUSxFQUN0QixFQUFHLENBQUMsR0FBUSxFQUNaLEVBQUcsQ0FBQyxJQUFVLElBQVUsSUFBVSxHQUFRLEVBQzFDLEVBQUcsQ0FBQyxJQUFVLElBQVUsSUFBVSxHQUFRLEVBQzFDLEVBQUcsQ0FBQyxJQUFVLElBQVUsR0FBUSxFQUNoQyxFQUFHLENBQUMsSUFBVSxHQUFRLENBQ3hCLEVBV0EsT0FWQSxFQUFLLFFBQVEsUUFBUSxDQUFDLEVBQUcsQ0FDdkIsRUFBSSxFQUFFLFlBQVksRUFDbEIsSUFBSSxFQUFRLEVBQUssSUFBTSxDQUFDLEdBQUcsRUFDdkIsRUFBTyxLQUFL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RyxPQUFPLGFBQWEsRUFBQyxFQUFFLE9BQU8sR0FBRSxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxVQUFVLEVBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLFlBQVksRUFBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksWUFBWSxFQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxhQUFhLEVBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLGFBQWEsRUFBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUUsS0FBSyxTQUFTLEVBQUMsQ0FBQyxHQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsV0FBVyxHQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFFLElBQUksWUFBWSxhQUFhLEdBQUUsMENBQTBDLENBQUMsRUFBRSxHQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsdUNBQXVDLEVBQUUsU0FBUyxFQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxrREFBa0QsTUFBTSxHQUFFLENBQUMsR0FBRSxFQUFDLEdBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxDQUFDLEtBQUssRUFBRSxHQUFFLFFBQVEsR0FBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsQ0FBQyxHQUFZLEtBQUosT0FBTSxNQUFNLFdBQVcsSUFBSSxHQUFHLEdBQUUsR0FBRSxRQUFRLGlCQUFpQixHQUFHLEdBQUcsV0FBVyxDQUFDLEVBQUUsTUFBTyxLQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRSxHQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRSxHQUFFLEVBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFNBQVMsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQVcsTUFBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUUsR0FBRSxHQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsS0FBSyxLQUFLLEdBQUUsS0FBSyxRQUFRLElBQVksR0FBRSxNQUFNLEVBQUMsRUFBRSxTQUFoQixTQUF5QixLQUFLLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFBQSxFQUFLLEdBQUUsUUFBUSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxHQUFFLFVBQVUsT0FBTyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUUsVUFBVSxZQUFZLEdBQUUsR0FBRSxVQUFVLFNBQVMsUUFBUSxFQUFFLENBQUMsT0FBZ0IsS0FBSyxVQUFULE9BQWlCLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLFNBQVMsR0FBRSxJQUFJLEdBQU8sT0FBRSxTQUFTLENBQUMsQ0FBQyxHQUFFLENBQUMsTUFBTSxJQUFJLEdBQUUsRUFBQyxFQUFFLElBQUksR0FBRSxPQUFJLElBQUcsRUFBRSxvQ0FBb0MsRUFBQyxFQUFFLEdBQUUsSUFBRyxPQUFPLEdBQUUsTUFBRyxDQUFDLE9BQU8sUUFBYSxRQUFFLE1BQU8sUUFBTyxLQUFLLE1BQU8sT0FBTSxHQUFHLE1BQU8sT0FBTSxHQUFHLE1BQU8sV0FBVSxJQUFJLEVBQUUsR0FBRSxPQUFPLEdBQUUsSUFBSSxFQUFFLEdBQUUsT0FBTyxPQUFPLEdBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUMsRUFBRSxJQUFJLEdBQU8sT0FBRSxHQUFPLE9BQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSSxHQUFHLEdBQUUsRUFBRSxPQUFNLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFFLE9BQU8sR0FBRyxJQUFJLEdBQU8sT0FBRSxHQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFhLElBQUosUUFBTyxFQUFFLDZCQUE2QixFQUFFLEdBQUUsR0FBRyxFQUFFLEdBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRSxHQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksR0FBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxDQUFDLElBQUksRUFBRSxHQUFFLEdBQUUsR0FBRyxFQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBQyxFQUFFLEVBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQUUsSUFBRyxPQUFnQixLQUFKLFFBQU8sRUFBRSxFQUFFLHFCQUFxQixHQUFFLEVBQUMsQ0FBQyxFQUFFLEdBQUUsU0FBUyxFQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUUsQ0FBQyxHQUFFLEdBQUcsR0FBRSxNQUFNLE1BQVUsR0FBRSxNQUFNLFFBQVosSUFBb0IsR0FBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFRLE9BQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRywwQ0FBMEMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsa0RBQWtELEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLE9BQU8sR0FBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLENBQUMsT0FBbUIsT0FBTyxzQkFBcEIsYUFBMEMsR0FBRyxLQUFHLEVBQUUsS0FBSSxHQUFHLElBQUkscUJBQXFCLEtBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFHLENBQUMsSUFBSSxHQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUUsR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxFQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLENBQUMsS0FBSyxHQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRSxJQUFJLEVBQUUsR0FBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEtBQUssYUFBYSxFQUFFLElBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLEdBQUUsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEVBQUMsR0FBRyxTQUFTLEdBQUUsUUFBUSxHQUFHLGlDQUFpQyxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsR0FBRSxTQUFTLEdBQUUsR0FBRyxHQUFFLElBQUcsR0FBRSxHQUFFLEVBQUUsR0FBRSxRQUFRLFFBQVEsQ0FBQyxHQUFFLENBQUMsR0FBRyxJQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRSxLQUFJLENBQUMsR0FBRSxlQUFlLEVBQUMsRUFBRSxHQUFFLElBQUcsR0FBRSxLQUFJLEdBQUUsS0FBSyxFQUFDLEVBQUUsR0FBRyxlQUFlLEVBQUMsSUFBSSxHQUFHLElBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBRyxLQUFLLElBQUksQ0FBQyxHQUFFLElBQUcsR0FBRSxNQUFLLEtBQUksR0FBRSxRQUFRLEdBQUUsRUFBQyxFQUFFLEdBQUcsRUFBTSxHQUFFLFNBQU4sR0FBYyxHQUFFLEVBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLENBQUMsT0FBTyxRQUFRLEdBQUUsTUFBTyxPQUFPLEdBQUUsTUFBTyxPQUFPLEdBQUUsTUFBTyxPQUFPLEdBQUUsTUFBTyxXQUFVLE1BQU0sVUFBVSxzQkFBc0IsRUFBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUUsRUFBRSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssbUJBQW1CLEdBQUcsTUFBTSxVQUFVLHlEQUF5RCxFQUFFLElBQUksR0FBRSxFQUFFLEtBQUssR0FBRyxJQUFHLEVBQUUsU0FBUyxHQUFFLCtDQUErQyxFQUFFLEdBQUUsZUFBZSxFQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUUsR0FBRyxPQUFPLEVBQUUseUJBQXlCLEdBQUUsU0FBUyxFQUFFLEdBQUUsSUFBRyxFQUFFLE9BQU8sR0FBRyxJQUFHLEdBQUcsZUFBZSxFQUFDLElBQUksRUFBRSxHQUFHLElBQUcsT0FBTyxHQUFHLElBQUcsRUFBRSxRQUFRLE1BQUcsR0FBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLDJCQUEyQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLEdBQUUsQ0FBQyxHQUFZLEdBQUUsR0FBRyxJQUFULE9BQVcsQ0FBQyxJQUFJLEdBQUUsR0FBRSxHQUFHLEdBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEdBQUUsR0FBRyxFQUFFLGVBQWUsVUFBVSxNQUFNLEdBQUcsRUFBRSxhQUFhLEdBQUUsaURBQWlELFVBQVUsT0FBTyx1QkFBdUIsR0FBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUUsR0FBRyxFQUFFLFVBQVUsUUFBUSxNQUFNLEtBQUssU0FBUyxHQUFHLEdBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFFLEdBQUcsRUFBRSxHQUFFLEdBQUcsSUFBRyxTQUFTLEVBQUUsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxLQUFLLEtBQUssR0FBRSxLQUFLLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRSxLQUFLLEVBQUUsR0FBRSxLQUFLLEVBQUUsR0FBRSxLQUFLLEdBQUcsR0FBRSxLQUFLLEdBQUcsR0FBRSxLQUFLLEdBQUcsR0FBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUUsRUFBRSxHQUFFLENBQUMsS0FBSyxJQUFJLElBQUcsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEdBQUUsS0FBSyx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLEdBQUcsRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxPQUFjLElBQVAsTUFBVSxLQUFLLElBQUksRUFBRSx1QkFBdUIsS0FBSyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsVUFBVSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLG1EQUFtRCxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsR0FBVSxJQUFQLEtBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLHVCQUF1QixLQUFLLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUUsS0FBSyxHQUFHLEVBQUUsT0FBYyxLQUFQLE1BQVUsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFDLEVBQUUsR0FBRSxNQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsVUFBVSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLG1EQUFtRCxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sc0JBQXNCLEtBQUssSUFBSSxFQUFFLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxPQUFnQixFQUFFLEVBQUUsSUFBUixRQUFXLEVBQUUsaURBQWlELEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0NBQW9DLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxzQkFBc0IsS0FBSyxJQUFJLEVBQUUsVUFBVyxHQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVyxHQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxFQUFNLEtBQUMsSUFBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUUsS0FBSyxHQUFHLEdBQUUsR0FBRSxRQUFRLEVBQUUsQ0FBQyxHQUFFLE9BQU8sRUFBRSxDQUFDLEVBQVMsS0FBUCxNQUFVLEdBQUUsS0FBSyxLQUFLLEVBQUUsRUFBQyxFQUFFLGNBQWMsRUFBRSw2QkFBNkIsRUFBRSxPQUFPLEdBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsT0FBYyxJQUFQLE1BQVUsS0FBSyxJQUFJLEVBQUUsdUJBQXVCLEtBQUssSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLFVBQVUsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxtREFBbUQsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLEVBQUUsRUFBRSxLQUFLLHNCQUFzQixLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEtBQUssS0FBSyxHQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFFLEtBQUssR0FBRyxHQUFFLEtBQUssR0FBRyxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFRLE9BQVcsRUFBRSxJQUFOLE9BQVEsS0FBSyxXQUFXLElBQUksS0FBSyxXQUFXLEdBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUcsT0FBTyxJQUFJLElBQUcsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFFLEdBQUcsR0FBRyxJQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUksR0FBRSxHQUFFLElBQUcsR0FBRSxHQUFFLEVBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFFLEdBQUUsR0FBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFFLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRSxTQUFTLEVBQUUsR0FBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRSxFQUFFLFdBQVcsSUFBRyxHQUFFLElBQUcsR0FBRSxPQUFPLEdBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLEVBQUUsR0FBRSxLQUFLLEtBQUssQ0FBQyxFQUFPLFFBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUMsRUFBRSxPQUFPLEtBQUksR0FBRyxDQUFDLEVBQUUsT0FBa0IsT0FBTyxJQUFuQixZQUFzQixFQUFFLDJDQUEyQyxHQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUUsSUFBSSxHQUFRLE9BQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBSSxHQUFFLENBQUMsRUFBRSxHQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxTQUFTLEVBQUMsQ0FBQyxHQUFFLENBQUMsR0FBRSxLQUFJLEdBQUUsTUFBSyxHQUFHLElBQUcsR0FBRyxJQUFHLFFBQVEsRUFBQyxHQUFHLEdBQUUsS0FBSyxFQUFDLEVBQUUsR0FBRSxJQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsR0FBRSxLQUFLLEdBQUUsSUFBSSxFQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsSUFBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLElBQUcsRUFBRSxnRkFBZ0YsRUFBRSxJQUFJLEdBQVMsRUFBRSxLQUFULE1BQW9CLEtBQVAsS0FBUyxHQUFFLEdBQUcsSUFBSSxHQUFFLEVBQUUsR0FBRSxFQUFFLFNBQVMsR0FBRSxHQUFVLEVBQUUsTUFBVCxNQUFzQixFQUFFLElBQUcsSUFBVCxPQUFXLENBQUMsR0FBRSxHQUFHLE1BQU0sSUFBSSxHQUFXLEVBQUUsR0FBRyxPQUFkLE9BQW1CLEdBQUUsR0FBRSxFQUFFLEdBQUUsTUFBTSxFQUFDLEVBQUUsR0FBRSxDQUFDLEVBQUUsR0FBRSxDQUFDLEVBQUUsT0FBTyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFVBQVUsU0FBUyxJQUFHLEVBQUUsWUFBWSxHQUFFLGdCQUFnQixVQUFVLE9BQU8sd0JBQXdCLEdBQUUsUUFBUSxFQUFFLEdBQUUsT0FBTyxFQUFFLEdBQUUsT0FBTyxHQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUcsR0FBRSxHQUFFLENBQUMsSUFBSSxHQUFFLEVBQUUsR0FBRyxXQUFXLEdBQUUsSUFBSSxFQUFFLEdBQUUsR0FBRyxHQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxXQUFXLEdBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRSxLQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFFLE1BQU0sS0FBSyxFQUFDLEVBQUUsR0FBRSxHQUFHLEVBQUMsRUFBTyxhQUFRLEdBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLE9BQU8sS0FBSSxDQUFDLElBQUksR0FBTSxLQUFKLEVBQU0sR0FBRSxHQUFFLEdBQUUsR0FBVSxFQUFFLElBQUcsSUFBWixNQUFlLEVBQUUsSUFBRyxFQUFFLEVBQUMsRUFBRSxPQUFPLEdBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxFQUFPLFFBQUcsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsUUFBUSxHQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEtBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLENBQUMsRUFBRSxNQUFRLEdBQUUsSUFBRyxJQUFWLElBQWUsR0FBRSxJQUFRLE9BQUUsR0FBRSxLQUFLLEVBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFFLENBQUMsR0FBVSxLQUFQLEtBQVMsTUFBTSxPQUFPLElBQUksRUFBRSxPQUFPLEdBQUUsT0FBaUIsSUFBWCxVQUF3QixJQUFWLFNBQTBCLElBQWIsV0FBZSxHQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsUUFBUSxHQUFFLEdBQUcsR0FBRSxJQUFJLElBQUcsRUFBRSxLQUFLLEdBQUUsQ0FBQyxJQUFJLEdBQUUsRUFBRSxHQUFFLEVBQUUsSUFBRyxHQUFHLEdBQU0sSUFBSCxFQUFLLE1BQU0sSUFBRyxPQUFPLGFBQWEsRUFBQyxFQUFFLE9BQU8sR0FBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLEVBQUUsR0FBRSxDQUFDLEdBQVksS0FBSixTQUFRLEdBQUUsWUFBWSxFQUFFLEdBQUUsTUFBTyxHQUFFLElBQUcsRUFBRSxJQUFJLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRSxFQUFFLEdBQUUsT0FBTyxRQUFRLEdBQUUsRUFBRSxHQUFFLEtBQUksR0FBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLFdBQVcsRUFBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxNQUFPLEdBQUUsR0FBRSxPQUFPLFNBQVMsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLFFBQVEsR0FBRSxFQUFFLEdBQUUsS0FBSyxJQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRSxFQUFFLEdBQUUsRUFBRSxJQUFHLEdBQUcsR0FBTSxJQUFILEVBQUssUUFBUSxHQUFFLE9BQU8sSUFBRyxJQUFHLE1BQU0sSUFBRyxPQUFPLGFBQWEsTUFBTSxJQUFHLEdBQUcsTUFBTSxLQUFLLEVBQUMsR0FBRyxJQUFHLE9BQU8sYUFBYSxFQUFDLEVBQUUsT0FBTyxHQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUUsRUFBRSxHQUFFLENBQUMsR0FBWSxLQUFKLFNBQVEsR0FBRSxZQUFZLEVBQUUsR0FBRSxNQUFPLEdBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRSxRQUFRLEdBQUUsRUFBRSxHQUFFLEdBQUUsU0FBUyxHQUFFLENBQUMsSUFBSSxHQUFFLEdBQUUsV0FBVyxFQUFDLEVBQUUsR0FBRyxPQUFPLElBQUcsT0FBTyxLQUFJLEdBQUUsUUFBUSxLQUFLLEtBQUksSUFBSSxLQUFLLEdBQUUsYUFBYSxFQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBRyxHQUFHLEdBQUcsRUFBRSxHQUFFLE1BQU0sT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRSxTQUFTLEVBQUUsQ0FBQyxHQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxTQUFTLEdBQUUsQ0FBQyxJQUFJLEdBQUUsR0FBRSxXQUFXLEVBQUMsRUFBRSxPQUFPLElBQUcsT0FBTyxNQUFLLEdBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFHLE9BQWdCLElBQUosT0FBTSxHQUFFLEVBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBRSxhQUFhLEdBQUUsY0FBYyxFQUFFLEVBQUUsb0JBQW9CLFFBQVEsRUFBRSxDQUFDLFFBQVEsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsU0FBUyxFQUFXLEdBQUUsS0FBTixVQUFZLEdBQUUsT0FBTyxJQUFHLEVBQUUsZ0JBQWdCLFFBQVEsRUFBRSxDQUFDLFFBQVEsR0FBRSxFQUFFLEdBQUUsR0FBRSxTQUFTLEdBQUUsR0FBWSxHQUFFLE1BQU4sT0FBUyxPQUFPLEdBQUUsSUFBRyxPQUFPLE1BQU0sR0FBRSxFQUFFLGlCQUFpQixHQUFFLGtCQUFrQixFQUFFLFFBQVEsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLE9BQU8sYUFBYSxFQUFFLEVBQUUsR0FBRSxHQUFHLEVBQUUsMEJBQTBCLFFBQVEsRUFBRSxDQUFDLE9BQU8sT0FBTyxLQUFLLEVBQUMsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBRSxFQUFFLENBQUMsRUFBRSxJQUFJLE1BQUssR0FBRSxHQUFFLGVBQWUsRUFBQyxHQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGlCQUFpQixRQUFRLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxFQUFFLFFBQVEsSUFBRyxHQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsY0FBYyxHQUFFLGVBQWUsRUFBRSxHQUFHLFVBQVUsVUFBVSxRQUFRLENBQUMsR0FBRSxDQUFDLEtBQUssZ0JBQWdCLElBQUksY0FBYSxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFFLEtBQUssRUFBRSxFQUFFLEdBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxHQUFHLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUUsR0FBRyxHQUFFLEdBQUUsR0FBRyxFQUFDLEVBQUUsR0FBRSxHQUFFLEVBQUUsT0FBTyxJQUFJLElBQUcsS0FBSSxJQUFHLEdBQUcsVUFBVSxNQUFNLFFBQVEsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsTUFBTSxPQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRSxFQUFFLE9BQU8sR0FBRSxPQUFPLGVBQWUsSUFBSSxFQUFFLEdBQUUsS0FBSyxFQUFFLE9BQU8sR0FBRSxHQUFFLEdBQUUsS0FBSyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRSxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFFLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxJQUFHLEdBQUcsVUFBVSxPQUFPLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsR0FBRSxJQUFJLEVBQUUsRUFBRyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBTyxPQUFFLEtBQUssRUFBRSxFQUFPLFNBQUksR0FBRyxVQUFVLFVBQVUsUUFBUSxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRyxHQUFHLFVBQVUsWUFBWSxRQUFRLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBTSxFQUFFLFNBQU4sR0FBYyxJQUFHLEdBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLEdBQUUsS0FBSyxHQUFHLEVBQUMsR0FBRyxJQUFHLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxFQUFDLEdBQUcsR0FBRyxVQUFVLGVBQWUsRUFBRSxHQUFHLFVBQVUscUJBQXFCLEdBQUcsR0FBRyxVQUFVLGFBQWEsUUFBUSxDQUFDLEdBQUUsQ0FBUSxLQUFQLE1BQVUsR0FBRSxPQUFPLEdBQUcsR0FBRyxVQUFVLGFBQWEsUUFBUSxDQUFDLEdBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsQ0FBQyxFQUFFLElB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LFVBQVUsSUFBRyxHQUFFLElBQUcsT0FBTyxHQUFFLEVBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBRyxPQUFPLEdBQUcsSUFBRyxJQUFRLEdBQUosR0FBVyxFQUFKLEdBQVUsR0FBSixJQUFKLEVBQVcsR0FBRyxDQUFDLEVBQUMsRUFBRSxHQUFFLElBQUksTUFBRyxHQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUUsSUFBSSxNQUFHLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBRyxDQUFDLElBQUksR0FBRSxDQUFDLEVBQUUsT0FBTyxHQUFFLFFBQVEsQ0FBQyxHQUFFLEtBQUksQ0FBQyxJQUFJLEdBQUUsR0FBRSxJQUFHLEdBQUUsR0FBRSxHQUFHLEdBQUUsR0FBRSxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsUUFBUSxHQUFFLEdBQUUsR0FBRyxFQUFFLEdBQUUsR0FBRyxHQUFFLEdBQUUsSUFBSSxDQUFDLEtBQUssTUFBRyxHQUFFLGFBQWEsR0FBRSxHQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFFLEtBQUksQ0FBQyxJQUFJLEdBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsV0FBVyxHQUFFLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssYUFBYSxRQUFRLENBQUMsR0FBRSxDQUFDLElBQUksR0FBRSxHQUFFLENBQUMsRUFBRSxJQUFJLE1BQUssR0FBRSxHQUFFLElBQUcsR0FBRSxJQUFHLEtBQUssRUFBQyxFQUFFLE9BQU8sR0FBRSxFQUFDLEVBQUUsSUFBRyxXQUFXLFFBQVEsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxRQUFRLE1BQUssR0FBRSxLQUFLLE1BQUssSUFBRyxNQUFNLFVBQVUsb0JBQW9CLEdBQUUsR0FBRyxFQUFFLElBQUksR0FBRSxHQUFFLEVBQUUsSUFBSSxNQUFLLEdBQUUsR0FBRSxJQUFHLE1BQU0sR0FBRSxHQUFFLEdBQUUsRUFBRSxPQUFjLEtB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cUNBQXFDLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxHQUFHLEVBQU8sT0FBRSxDQUFDLEdBQUUsR0FBRSxFQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsSUFBSSxHQUFFLEdBQUcsR0FBRSxFQUFDLEVBQUUsRUFBRSxHQUFFLENBQUMsRUFBRSxHQUFFLEdBQUcsR0FBRSxFQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxHQUFFLHdCQUF3QixFQUFDLEVBQUUsSUFBSSxJQUFHLEdBQUUsR0FBRSxJQUFJLEtBQUssSUFBSSxFQUFFLEVBQUUsV0FBVyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxHQUFFLEdBQUUsRUFBRSxZQUFZLE9BQWdCLEdBQUUsS0FBTixRQUFVLEdBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFHLEtBQUksR0FBRyxHQUFFLEVBQUUsRUFBQyxFQUFFLEdBQUUsR0FBRyxFQUFFLEdBQUUsR0FBRyxJQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEdBQUUsR0FBRyxHQUFFLENBQUMsR0FBRSxHQUFHLElBQUksRUFBRSxPQUFPLEdBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUUsRUFBQyxFQUFXLEdBQUUsR0FBRyxJQUFULFFBQVksR0FBRSxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUcsSUFBRyxHQUFFLEdBQUcsRUFBRSxHQUFFLEdBQUcsR0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxHQUFFLEdBQUcsRUFBRSxFQUFDLEVBQUUsR0FBRSxHQUFHLEdBQUUsRUFBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsSUFBSSxHQUFFLGdCQUFnQixHQUFFLEdBQUUsSUFBSSxLQUFLLEdBQVksR0FBRSxFQUFFLElBQVIsU0FBWSxHQUFFLEVBQUUsRUFBRSxDQUFDLEdBQVksR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFaLE9BQWUsTUFBTSxJQUFJLEdBQUUsK0VBQStFLEVBQUUsR0FBRyxnQkFBZ0IsR0FBRSxLQUFLLHFHQUFxRyxFQUFFLE9BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLG9CQUFvQixHQUFFLEtBQUssd0JBQXdCLEVBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsT0FBTyxHQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEdBQUUsS0FBSyxHQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxJQUFJLEdBQUUsR0FBRyxHQUFFLEVBQUMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUUsR0FBRyxHQUFFLEVBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLFNBQVMsRUFBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEdBQUUsd0JBQXdCLEVBQUMsRUFBRSxJQUFJLElBQUcsR0FBRSxHQUFFLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRSxXQUFXLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFHLEdBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBRSxHQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUUsR0FBRyxPQUFnQixLQUFKLFFBQWdCLEdBQUUsSUFBTixRQUFTLEdBQUUsWUFBWSxHQUFFLE1BQU0sR0FBRSxJQUFJLEdBQUUsR0FBRyxHQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUUsVUFBVSxHQUFFLEtBQUssR0FBRSxHQUFHLEtBQUksR0FBRyxHQUFFLEVBQUUsRUFBQyxFQUFFLEdBQUUsR0FBRyxFQUFFLEdBQUUsR0FBRyxJQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFFLEVBQUUsR0FBRSxHQUFFLEVBQUMsRUFBVyxHQUFFLEdBQUcsSUFBVCxRQUFZLEVBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFHLEdBQUcsR0FBRSxHQUFHLEVBQUUsR0FBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLENBQUMsR0FBRyxHQUFFLENBQUMsS0FBSyxFQUFFLEdBQUUsQ0FBQyxFQUFFLGFBQWEsUUFBUSxDQUFDLEdBQUUsQ0FBQyxJQUFJLEdBQUUsR0FBRSxFQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUMsRUFBRSxJQUFHLFdBQVcsUUFBUSxDQUFDLEdBQUUsR0FBRSxDQUFDLE9BQU8sR0FBRSxFQUFDLEdBQUcsZUFBZSxFQUFFLHFCQUFxQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLEdBQUUsQ0FBQyxHQUFFLEdBQUcsRUFBQyxFQUFFLEdBQUcsR0FBRSxDQUFDLEtBQUssRUFBRSxHQUFFLENBQUMsRUFBRSxhQUFhLFFBQVEsQ0FBQyxHQUFFLENBQUMsT0FBTyxJQUFHLFdBQVcsUUFBUSxDQUFDLEdBQUUsR0FBRSxDQUFDLE9BQU8sSUFBRyxlQUFlLEVBQUUscUJBQXFCLFFBQVEsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxPQUFPLFFBQVEsR0FBRSxPQUFPLFFBQVEsQ0FBQyxHQUFFLENBQUMsT0FBTyxLQUFLLGFBQWEsRUFBRSxJQUFHLEVBQUUsT0FBUSxHQUFFLE9BQU8sUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEtBQUssYUFBYSxFQUFFLElBQUcsRUFBRSxXQUFXLE1BQU0sVUFBVSx1QkFBdUIsRUFBQyxJQUFJLEVBQUUsRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsRUFBRSxHQUFFLENBQUMsRUFBTyxLQUFMLEtBQVMsR0FBRSxZQUFZLEdBQUUsR0FBRyxFQUFDLEVBQUUsSUFBSSxHQUFFLE1BQUcsR0FBRSxHQUFPLEtBQUosRUFBTSxDQUFDLElBQUksR0FBRSxHQUFHLEVBQUUsR0FBRSxHQUFFLE1BQUcsSUFBRyxLQUFJLEdBQUUsR0FBRSxFQUFFLFNBQVMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxPQUFPLEtBQUksR0FBRyxRQUFRLENBQUMsR0FBRSxHQUFFLENBQUMsT0FBTyxJQUFHLEdBQUcsR0FBRSxDQUFDLEtBQUssRUFBRSxhQUFhLEdBQUUsV0FBVyxHQUFFLGVBQWUsRUFBRSxxQkFBcUIsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsT0FBTyxRQUFRLEdBQUUsT0FBTyxHQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsT0FBTyxFQUFFLEtBQUksUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxHQUFFLE9BQU8sR0FBRSxRQUFRLENBQUMsR0FBRSxDQUFDLE9BQU8sRUFBRSxJQUFHLElBQUksUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBRyxRQUFTLEdBQUUsT0FBTyxHQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsT0FBTyxFQUFFLElBQUcsSUFBSSxRQUFRLENBQUMsR0FBRSxDQUFDLE9BQU8sRUFBRSxJQUFHLFlBQVksTUFBTSxVQUFVLHlCQUF5QixFQUFDLElBQUksRUFBRSxHQUFNLEtBQUosQ0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLEdBQUUsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxHQUFFLENBQUMsS0FBSSxFQUFFLElBQUksR0FBRSxFQUFFLE9BQU8sSUFBSSxHQUFFLEdBQUUsT0FBTyxHQUFFLEdBQUUsR0FBRyxHQUFFLEdBQUUsRUFBRSxJQUFJLEdBQUUsQ0FBQyxVQUFVLFdBQVcsV0FBVyxZQUFZLFdBQVcsWUFBWSxhQUFhLFlBQVksRUFBRSxHQUFHLEdBQUcsR0FBRSxDQUFDLEtBQUssR0FBRSxHQUFFLEVBQUMsRUFBRSxhQUFhLEdBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUksSUFBbUIsRUFBRSxHQUFFLENBQUMsS0FBdEIsY0FBeUIsR0FBRyxHQUFFLENBQUMsS0FBSyxFQUFFLGFBQWEsUUFBUSxDQUFDLEdBQUUsQ0FBQyxJQUFJLEdBQUUsRUFBRSxJQUFHLEdBQUcsR0FBRSxHQUFFLEVBQUUsR0FBRyxHQUFFLFFBQVEsR0FBRSxHQUFFLEdBQUUsRUFBRSxJQUFHLEtBQUksR0FBRSxDQUFDLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRyxJQUFHLElBQU0sRUFBRSxLQUFMLEVBQVEsQ0FBQyxHQUFHLEdBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRSxHQUFFLEVBQUMsRUFBRSxHQUFZLEtBQUosT0FBTSxJQUFJLEdBQUUsR0FBTyxTQUFHLE9BQU8sR0FBRSxHQUFFLEdBQUUsR0FBTyxLQUFDLElBQUksR0FBRSxFQUFFLEdBQUUsTUFBTSxFQUFDLEVBQUUsR0FBRSxLQUFJLEdBQUUsR0FBRSxJQUFHLE9BQU8sYUFBYSxFQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBQyxFQUFFLElBQUcsV0FBVyxRQUFRLENBQUMsR0FBRSxHQUFFLENBQUMsY0FBYSxjQUFjLEdBQUUsSUFBSSxXQUFXLEVBQUMsR0FBRyxJQUFJLEdBQUUsR0FBWSxPQUFPLElBQWpCLFNBQW1CLEdBQUcsSUFBRyxjQUFhLFlBQVksY0FBYSxtQkFBbUIsY0FBYSxXQUFXLEVBQUUsdUNBQXVDLEVBQUUsSUFBRyxHQUFFLENBQUMsSUFBSSxHQUFFLEVBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRSxHQUFFLFNBQVMsR0FBRSxDQUFDLElBQUksR0FBRSxHQUFFLFdBQVcsRUFBQyxFQUFFLEtBQUssR0FBRSxLQUFJLE1BQU0sR0FBRSxJQUFHLEVBQUUsT0FBTyxJQUFHLE9BQU8sSUFBRyxJQUFHLElBQUksSUFBRyxJQUFHLEVBQUUsR0FBRSxHQUFPLFFBQUUsR0FBRSxPQUFPLEdBQUcsSUFBRyxHQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBRyxHQUFHLEdBQUUsSUFBRyxJQUFHLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsR0FBRSxTQUFTLEdBQUUsQ0FBQyxJQUFJLEdBQUUsR0FBRSxXQUFXLEVBQUMsRUFBRSxHQUFHLE9BQU8sSUFBRyxPQUFPLEtBQUksR0FBRSxRQUFRLEtBQUssS0FBSSxJQUFJLEtBQUssR0FBRSxhQUFhLEVBQUMsR0FBRyxLQUFLLEdBQUUsQ0FBQyxHQUFHLElBQUcsR0FBRSxNQUFNLEdBQUUsTUFBSyxHQUFNLEtBQUMsR0FBRyxNQUFNLEdBQUUsQ0FBQyxHQUFHLEdBQUUsR0FBRyxHQUFFLE1BQU0sR0FBRSxNQUFLLElBQUksSUFBRyxFQUFNLEtBQUMsR0FBRyxPQUFPLEdBQUUsQ0FBQyxHQUFHLEdBQUUsR0FBRyxHQUFFLE1BQU0sR0FBRSxNQUFLLElBQUksSUFBRyxHQUFPLEtBQUMsR0FBRyxHQUFFLEdBQUcsR0FBRSxNQUFNLEdBQUUsTUFBSyxJQUFJLElBQUcsR0FBRyxHQUFFLE1BQUssSUFBSSxJQUFHLEdBQUcsR0FBRyxHQUFFLE1BQUssSUFBSSxJQUFHLEVBQUUsR0FBRyxHQUFFLE1BQUssSUFBSSxHQUFHLElBQUcsR0FBRSxJQUFHLEdBQVEsUUFBRyxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUUsS0FBSSxHQUFFLEtBQUssR0FBRSxHQUFFLFdBQVcsRUFBQyxLQUFLLEdBQUcsRUFBQyxFQUFFLEVBQUUsd0RBQXdELEdBQUcsRUFBRSxHQUFFLElBQUcsR0FBTyxTQUFJLEdBQUUsRUFBRSxHQUFFLEtBQUksR0FBRSxFQUFFLEdBQUUsSUFBRyxHQUFFLElBQUcsT0FBYyxLQUFQLE1BQVUsR0FBRSxLQUFLLEdBQUcsRUFBQyxFQUFFLElBQUcsZUFBZSxFQUFFLHFCQUFxQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLEdBQUUsQ0FBQyxHQUFHLEdBQUUsR0FBRSxFQUFDLEVBQU0sSUFBSixFQUFNLElBQUksR0FBRSxHQUFHLEdBQUUsR0FBRyxHQUFFLEdBQUcsR0FBRSxJQUFJLEVBQUUsR0FBRSxFQUFPLEtBQUksSUFBSixJQUFRLEdBQUUsR0FBRyxHQUFFLEdBQUcsR0FBRSxHQUFHLEdBQUUsSUFBSSxFQUFFLEdBQUUsR0FBRyxHQUFHLEdBQUUsQ0FBQyxLQUFLLEdBQUUsYUFBYSxRQUFRLENBQUMsR0FBRSxDQUFDLFFBQVEsR0FBRSxHQUFFLEVBQUUsSUFBRyxHQUFHLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRSxJQUFHLEtBQUksR0FBRSxDQUFDLElBQUksRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFHLElBQUcsSUFBTSxHQUFFLEdBQUcsS0FBUixLQUFjLEdBQUUsR0FBRSxHQUFFLEVBQUUsRUFBQyxFQUFXLEtBQUosT0FBTSxHQUFFLEdBQUUsSUFBRyxPQUFPLEdBQUUsR0FBRSxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUMsRUFBRSxJQUFHLFdBQVcsUUFBUSxDQUFDLEdBQUUsR0FBRSxDQUFXLE9BQU8sSUFBakIsVUFBb0IsRUFBRSw2Q0FBNkMsRUFBQyxFQUFFLElBQUksR0FBRSxHQUFFLEVBQUMsRUFBRSxHQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBRyxHQUFHLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsQ0FBQyxFQUFTLEtBQVAsTUFBVSxHQUFFLEtBQUssR0FBRyxFQUFDLEVBQUUsSUFBRyxlQUFlLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUcsSUFBRyxDQUFDLEtBQUssR0FBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBQyxFQUFFLEVBQUUsR0FBRyxHQUFFLEVBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFHLElBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsR0FBRyxHQUFHLEdBQUUsRUFBQyxFQUFFLEdBQUcsR0FBRSxHQUFHLEdBQUUsR0FBRyxHQUFHLEdBQUUsRUFBQyxFQUFFLEdBQUcsRUFBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLENBQUMsR0FBRyxHQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsYUFBYSxRQUFRLEVBQUUsR0FBRyxXQUFXLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEdBQUcsSUFBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUUsR0FBRyxFQUFDLEVBQUUsSUFBSSxHQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBRyxHQUFHLEdBQUUsRUFBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEdBQUcsSUFBRyxHQUFFLEVBQUUsR0FBRSxDQUFDLEVBQUUsR0FBRSxHQUFHLEVBQUMsRUFBRSxLQUFLLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQUUsR0FBRSxRQUFRLENBQUMsR0FBRSxHQUFFLENBQUMsUUFBUSxHQUFFLE1BQU0sRUFBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEtBQUksR0FBRSxHQUFFLElBQUcsR0FBRSxFQUFFLEdBQUUsRUFBRSxJQUFHLEdBQUcsYUFBYSxFQUFDLEVBQUUsT0FBTyxJQUFHLEdBQUUsQ0FBQyxFQUFFLEdBQUUsR0FBRSxHQUFHLEdBQUUsR0FBRyxFQUFFLEdBQUUsS0FBSyxLQUFLLEdBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsR0FBRSxDQUFDLE9BQU8sR0FBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFZLEtBQUosT0FBTSxPQUFPLEdBQUUsSUFBSSxHQUFFLE1BQU0sR0FBRSxDQUFDLEVBQUUsT0FBTyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsS0FBSSxDQUFDLFFBQVEsR0FBRSxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsSUFBSSxHQUFFLEdBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRyxxQkFBcUIsR0FBRSxFQUFDLEVBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRyxlQUFlLElBQUksR0FBRSxFQUFFLEdBQUUsR0FBRSxJQUFHLE1BQU0sR0FBRSxFQUFDLEVBQUUsR0FBRSxHQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRyxJQUFJLEdBQUUsR0FBRSxHQUFHLEdBQUcsR0FBRSxHQUFFLEVBQUUsSUFBSSxHQUFFLEdBQUcsT0FBTyxHQUFFLFdBQVcsR0FBRSxFQUFDLEdBQUcsR0FBRSxHQUFHLE9BQU8sR0FBRyxLQUFLLEVBQUMsRUFBRSxHQUFFLEdBQUUsR0FBRyxHQUFHLElBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLEVBQUUsS0FBSSxHQUFFLElBQUcsSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxHQUFHLEdBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxDQUFDLEVBQUUsV0FBVyxHQUFFLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sR0FBRyxZQUFZLE1BQUssR0FBRyxNQUFNLEdBQUcsUUFBUSxHQUFFLEVBQUUsR0FBRyxHQUFFLElBQUcsRUFBRSxDQUFDLElBQUksR0FBRSxHQUFHLEVBQUUsSUFBRyxJQUFHLEdBQUUsS0FBSyxJQUFJLEdBQUUsR0FBRSxTQUFTLEVBQUUsSUFBSSxHQUFFLEtBQUssR0FBRSxHQUFFLElBQUksR0FBRSxLQUFLLElBQUksR0FBRSxFQUFDLEVBQUUsS0FBSSxNQUFNLEdBQUUsT0FBTyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEdBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRSxLQUFLLEdBQUUsV0FBVyxFQUFDLEVBQUUsR0FBRSxXQUFXLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxRQUFRLE1BQU0sR0FBRSxFQUFFLEdBQU8sT0FBRSxHQUFHLEdBQUUsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU8sS0FBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU8sS0FBSSxFQUFFLFFBQVEsQ0FBQyxHQUFFLEVBQUUsR0FBRSxHQUFFLENBQUMsUUFBUSxHQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxLQUFJLENBQUMsSUFBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsUUFBUSxHQUFFLEVBQUUsR0FBRSxHQUFFLEtBQUksQ0FBQyxJQUFJLEdBQUUsRUFBRSxHQUFFLElBQUcsR0FBRSxHQUFHLElBQU8sS0FBSixHQUFZLEtBQUwsS0FBYSxLQUFKLEVBQU0sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsRUFBRSxHQUFFLE9BQU8sR0FBRyxHQUFFLEtBQUssRUFBQyxFQUFFLElBQUcsR0FBRSxPQUFPLEVBQUUsSUFBRyxHQUFHLEdBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBQyxDQUFDLEdBQUUsQ0FBQyxFQUFFLElBQUksR0FBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQU8sSUFBTCxHQUFRLEtBQUksR0FBRSxHQUFFLEdBQUUsS0FBSyxHQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxDQUFDLE9BQW1CLE9BQU8sT0FBbkIsV0FBeUIsTUFBTSxFQUFFLENBQUMsWUFBWSxhQUFhLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFFLENBQUMsSUFBSSxHQUFFLEdBQUcsS0FBSyx1Q0FBdUMsRUFBRSxJQUFJLE9BQU8sR0FBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLFFBQVEsRUFBRSxDQUFDLE9BQU8sR0FBRSxFQUFFLEVBQUUsUUFBUSxRQUFRLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLFlBQVksWUFBWSxHQUFFLEVBQUMsRUFBRSxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxLQUFLLEdBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxFQUFFLDBDQUEwQyxFQUFDLEVBQUUsR0FBRSxFQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUksRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRSxFQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsRUFBRSxzREFBc0QsRUFBQyxFQUFFLEVBQUUsRUFBQyxHQUFlLE9BQU8sWUFBWSxzQkFBL0IsWUFBcUQsRUFBRSxHQUFlLE9BQU8sT0FBbkIsV0FBeUIsR0FBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsWUFBWSxhQUFhLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFFLENBQUMsT0FBTyxZQUFZLHFCQUFxQixHQUFFLEVBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUMsRUFBRSxFQUFFLDJDQUEyQyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBRyxFQUFFLElBQUksR0FBRyxFQUFFLGVBQWUsUUFBUSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsZUFBZSxFQUFFLElBQUksR0FBRyxNQUFNLEtBQUssU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxHQUFHLE1BQU0sS0FBSyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLEdBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSSxHQUFFLEVBQUMsRUFBRSxFQUFFLElBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEdBQUcsSUFBSSxHQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUMsS0FBSyxPQUFPLEVBQUUsNkJBQTZCLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxJQUFJLEdBQUcsTUFBTSxLQUFLLFNBQVMsR0FBRyxFQUFFLGFBQWEsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEdBQUcsTUFBTSxLQUFLLFNBQVMsR0FBRyxHQUFFLFNBQVMsRUFBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFFLEtBQUksR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsR0FBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksWUFBWSxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUcsQ0FBQyxhQUFhLFlBQVksU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBRSxDQUFDLEVDQTcwdkIsbUJBQU8sMkJBQXFDLHdCQUFPLHNCQUE2bUQsSUFBSSxHQUFLLE1BQU0sSUFBRSxNQUFNLElBQUUsSUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFRLGFBQWEsQ0FBQyxDQUFDLEVDQW51RCxTQUF3QixHQUFTLEVBQUUsWUFBWSxJQUFTLENBQUMsRUFBRyxDQUczRCxJQUFNLEVBQVUsQ0FDZiwwSkFDQSwwREFDRCxFQUFFLEtBQUssR0FBRyxFQUVWLE9BQU8sSUFBSSxPQUFPLEVBQVMsRUFBWSxPQUFZLEdBQUcsRUNOdkQsSUFBTSxJQUFRLElBQVUsRUFFeEIsU0FBd0IsRUFBUyxDQUFDLEVBQVEsQ0FDekMsR0FBSSxPQUFPLElBQVcsU0FDckIsTUFBTSxJQUFJLFVBQVUsZ0NBQWdDLE9BQU8sS0FBVSxFQU10RSxPQUFPLEVBQU8sUUFBUSxJQUFPLEVBQUUsRUNWaEMsU0FBUyxHQUFXLENBQUMsRUFBRyxDQUN2QixPQUFPLElBQU0sS0FDVCxJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixHQUFLLEtBQVEsR0FBSyxLQUNsQixHQUFLLEtBQVEsR0FBSyxLQUNsQixHQUFLLEtBQVEsR0FBSyxLQUNsQixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sR0FBSyxLQUFRLEdBQUssS0FDbEIsSUFBTSxLQUNOLEdBQUssS0FBUSxHQUFLLEtBQ2xCLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sR0FBSyxLQUFRLEdBQUssS0FDbEIsSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sR0FBSyxLQUFTLEdBQUssS0FDbkIsSUFBTSxLQUNOLEdBQUssS0FBUyxHQUFLLEtBQ25CLElBQU0sS0FDTixHQUFLLEtBQVMsR0FBSyxLQUNuQixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixJQUFNLEtBQ04sSUFBTSxLQUNOLElBQU0sS0FDTixHQUFLLEtBQVMsR0FBSyxLQUNuQixJQUFNLEtBQ04sSUFBTSxLQUNOLEdBQUssS0FBUyxHQUFLLEtBQ25CLElBQU0sS0FDTixJQUFNLEtBQ04sR0FBSyxLQUFTLEdBQUssS0FDbkIsR0FBSyxLQUFTLEdBQUssS0FDbkIsR0FBSyxLQUFTLEdBQUssS0FDbkIsR0FBSyxLQUFTLEdBQUssS0FDbkIsR0FBSyxLQUFTLEdBQUssS0FDbkIsSUFBTSxNQUNOLEdBQUssTUFBUyxHQUFLLE1BQ25CLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLEdBQUssTUFBVSxHQUFLLE1BQ3BCLEdBQUssTUFBVSxHQUFLLE1BQ3BCLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLEdBQUssTUFBVSxHQUFLLE1BQ3BCLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLEdBQUssTUFBVSxHQUFLLE1BQ3BCLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLEdBQUssTUFBVSxHQUFLLE1BQ3BCLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixHQUFLLE1BQVUsR0FBSyxNQUNwQixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLElBQU0sTUFDTixHQUFLLE1BQVUsR0FBSyxNQUNwQixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLEdBQUssTUFBVSxHQUFLLE1BQ3BCLElBQU0sTUFDTixHQUFLLE1BQVUsR0FBSyxNQUNwQixHQUFLLE1BQVUsR0FBSyxNQUNwQixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixHQUFLLE1BQVUsR0FBSyxNQUNwQixHQUFLLE1BQVUsR0FBSyxNQUNwQixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixHQUFLLE1BQVUsR0FBSyxNQUNwQixHQUFLLE1BQVUsR0FBSyxNQUNwQixHQUFLLE1BQVUsR0FBSyxNQUNwQixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixHQUFLLE1BQVUsR0FBSyxNQUNwQixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sT0FDTixHQUFLLE9BQVUsR0FBSyxPQUNwQixHQUFLLE9BQVUsR0FBSyxPQUNwQixHQUFLLE9BQVUsR0FBSyxPQUNwQixHQUFLLE9BQVUsR0FBSyxPQUNwQixHQUFLLE9BQVUsR0FBSyxPQUNwQixJQUFNLE9BQ04sR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsSUFBTSxRQUNOLElBQU0sUUFDTixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxTQUNyQixHQUFLLFNBQVksR0FBSyxRQUczQixTQUFTLEdBQVcsQ0FBQyxFQUFHLENBQ3ZCLE9BQU8sSUFBTSxPQUNULEdBQUssT0FBVSxHQUFLLE9BQ3BCLEdBQUssT0FBVSxHQUFLLE1BR3pCLFNBQVMsR0FBTSxDQUFDLEVBQUcsQ0FDbEIsT0FBTyxHQUFLLE1BQVUsR0FBSyxNQUN2QixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sR0FBSyxNQUFVLEdBQUssTUFDcEIsR0FBSyxNQUFVLEdBQUssTUFDcEIsSUFBTSxNQUNOLEdBQUssTUFBVSxHQUFLLE1BQ3BCLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE1BQ04sSUFBTSxNQUNOLElBQU0sTUFDTixJQUFNLE9BQ04sSUFBTSxPQUNOLElBQU0sT0FDTixHQUFLLE9BQVUsR0FBSyxPQUNwQixJQUFNLE9BQ04sR0FBSyxPQUFVLEdBQUssT0FDcEIsSUFBTSxPQUNOLElBQU0sT0FDTixJQUFNLE9BQ04sSUFBTSxPQUNOLElBQU0sT0FDTixJQUFNLE9BQ04sR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFVLEdBQUssT0FDcEIsR0FBSyxPQUFXLEdBQUssT0FDckIsSUFBTSxPQUNOLElBQU0sT0FDTixHQUFLLE9BQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixJQUFNLFFBQ04sSUFBTSxRQUNOLEdBQUssUUFBVyxHQUFLLFFBQ3JCLElBQU0sUUFDTixHQUFLLFFBQVcsR0FBSyxRQUNyQixJQUFNLFFBQ04sR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsSUFBTSxRQUNOLElBQU0sUUFDTixJQUFNLFFBQ04sR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsR0FBSyxRQUFXLEdBQUssUUFDckIsSUFBTSxRQUNOLElBQU0sUUFDTixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixJQUFNLFFBQ04sR0FBSyxRQUFXLEdBQUssUUFDckIsSUFBTSxRQUNOLEdBQUssUUFBVyxHQUFLLFFBQ3JCLEdBQUssUUFBVyxHQUFLLFFBQ3JCLEdBQUssUUFBVyxHQUFLLFFBQ3JCLEdBQUssUUFBVyxHQUFLLFFBQ3JCLElBQU0sUUFDTixJQUFNLFFBQ04sSUFBTSxRQUNOLElBQU0sUUFDTixHQUFLLFFBQVcsR0FBSyxRQUNyQixHQUFLLFFBQVcsR0FBSyxRQUNyQixJ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 diff --git a/vendor/ripgrep/COPYING b/vendor/ripgrep/COPYING new file mode 100644 index 0000000..bb9c20a --- /dev/null +++ b/vendor/ripgrep/COPYING @@ -0,0 +1,3 @@ +This project is dual-licensed under the Unlicense and MIT licenses. + +You may use this code under the terms of either license. diff --git a/vendor/ripgrep/arm64-darwin/rg b/vendor/ripgrep/arm64-darwin/rg new file mode 100755 index 0000000..f4c48e1 Binary files /dev/null and b/vendor/ripgrep/arm64-darwin/rg differ diff --git a/vendor/ripgrep/arm64-linux/rg b/vendor/ripgrep/arm64-linux/rg new file mode 100755 index 0000000..84afb28 Binary files /dev/null and b/vendor/ripgrep/arm64-linux/rg differ diff --git a/vendor/ripgrep/x64-darwin/rg b/vendor/ripgrep/x64-darwin/rg new file mode 100755 index 0000000..83738e8 Binary files /dev/null and b/vendor/ripgrep/x64-darwin/rg differ diff --git a/vendor/ripgrep/x64-linux/rg b/vendor/ripgrep/x64-linux/rg new file mode 100755 index 0000000..079ee4c Binary files /dev/null and b/vendor/ripgrep/x64-linux/rg differ diff --git a/vendor/ripgrep/x64-win32/rg.exe b/vendor/ripgrep/x64-win32/rg.exe new file mode 100644 index 0000000..47013c2 Binary files /dev/null and b/vendor/ripgrep/x64-win32/rg.exe differ diff --git a/vendor/sdk/CHANGELOG.md b/vendor/sdk/CHANGELOG.md new file mode 100644 index 0000000..da99f25 --- /dev/null +++ b/vendor/sdk/CHANGELOG.md @@ -0,0 +1,1421 @@ +# Changelog + +## 0.36.3 (2025-01-27) + +Full Changelog: [sdk-v0.36.2...sdk-v0.36.3](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.36.2...sdk-v0.36.3) + +### Bug Fixes + +* **streaming:** accumulate citations ([#675](https://github.com/anthropics/anthropic-sdk-typescript/issues/675)) ([522118f](https://github.com/anthropics/anthropic-sdk-typescript/commit/522118ffeab327e8476f12d9b9fa1f19042ed714)) + + +### Chores + +* **docs:** updates ([#673](https://github.com/anthropics/anthropic-sdk-typescript/issues/673)) ([751ecd0](https://github.com/anthropics/anthropic-sdk-typescript/commit/751ecd0d44707b21ccb390c81716937fae3d8e35)) + +## 0.36.2 (2025-01-23) + +Full Changelog: [sdk-v0.36.1...sdk-v0.36.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.36.1...sdk-v0.36.2) + +### Bug Fixes + +* **bedrock:** update streaming util import ([255c059](https://github.com/anthropics/anthropic-sdk-typescript/commit/255c0599e333e6fae582255e3b0631538b168c69)) + +## 0.36.1 (2025-01-23) + +Full Changelog: [sdk-v0.36.0...sdk-v0.36.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.36.0...sdk-v0.36.1) + +### Chores + +* **tests:** fix types ([9efe3ee](https://github.com/anthropics/anthropic-sdk-typescript/commit/9efe3eebf64bd762a34caf362a1cd1a0f0858f92)) + +## 0.36.0 (2025-01-23) + +Full Changelog: [sdk-v0.35.0...sdk-v0.36.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.35.0...sdk-v0.36.0) + +### Features + +* **api:** add citations ([#668](https://github.com/anthropics/anthropic-sdk-typescript/issues/668)) ([1fef177](https://github.com/anthropics/anthropic-sdk-typescript/commit/1fef17749adbbeb243480b96c04941be29c0746c)) +* **client:** support results endpoint ([#666](https://github.com/anthropics/anthropic-sdk-typescript/issues/666)) ([db5fffe](https://github.com/anthropics/anthropic-sdk-typescript/commit/db5fffeb38a99a3e9283ebf001fbf767d756162e)) +* **stream:** expose `response` property as well ([b0235c7](https://github.com/anthropics/anthropic-sdk-typescript/commit/b0235c7b3ac174b3c8e670e381b4aa038e61c826)) + + +### Chores + +* **bedrock:** bump dependency on @anthropic-ai/sdk ([8745ca2](https://github.com/anthropics/anthropic-sdk-typescript/commit/8745ca2160f5af4d89e5732a44e560c5e2787aa8)) +* **internal:** fix import ([628b55e](https://github.com/anthropics/anthropic-sdk-typescript/commit/628b55ef5ff8f0245287ecaea688480a0174e2e9)) +* **internal:** minor restructuring ([#664](https://github.com/anthropics/anthropic-sdk-typescript/issues/664)) ([57aefa7](https://github.com/anthropics/anthropic-sdk-typescript/commit/57aefa73230d54da24d787a89adc277481986d02)) +* **vertex:** bump dependency on @anthropic-ai/sdk ([a1c7fcd](https://github.com/anthropics/anthropic-sdk-typescript/commit/a1c7fcdce081f860cbb1148c3862e3303ddb8a62)) + +## 0.35.0 (2025-01-21) + +Full Changelog: [sdk-v0.34.0...sdk-v0.35.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.34.0...sdk-v0.35.0) + +### Features + +* add beta message streaming helpers ([#655](https://github.com/anthropics/anthropic-sdk-typescript/issues/655)) ([d7b5af1](https://github.com/anthropics/anthropic-sdk-typescript/commit/d7b5af1629dbcefdb7bfdca271ab497567830227)) +* **stream:** add `.withResponse()` ([#654](https://github.com/anthropics/anthropic-sdk-typescript/issues/654)) ([b54477f](https://github.com/anthropics/anthropic-sdk-typescript/commit/b54477f20c92db4c2c5ed89af5d46c36b035bf1e)) +* **streaming:** add `.request_id` getter ([4572478](https://github.com/anthropics/anthropic-sdk-typescript/commit/4572478266a67e12e32ffef69817cbc495943b1d)) + + +### Bug Fixes + +* **docs:** correct results return type ([#657](https://github.com/anthropics/anthropic-sdk-typescript/issues/657)) ([4e6d031](https://github.com/anthropics/anthropic-sdk-typescript/commit/4e6d031a41625ebf9c4311638e0c149179fcae0c)) +* **examples:** add token counting example ([2498e2e](https://github.com/anthropics/anthropic-sdk-typescript/commit/2498e2eaf49d66a664ed1fdcd7bbd331979cf5b2)) +* send correct Accept header for certain endpoints ([#651](https://github.com/anthropics/anthropic-sdk-typescript/issues/651)) ([17ffaeb](https://github.com/anthropics/anthropic-sdk-typescript/commit/17ffaeba5af48d13b08483973b82cfe1ae79347f)) +* **vertex:** add beta.messages.countTokens method ([51d3f23](https://github.com/anthropics/anthropic-sdk-typescript/commit/51d3f23a7cc1bea798cc8e4041e08114ebc3a4eb)) + + +### Chores + +* deprecate more models ([661f5f9](https://github.com/anthropics/anthropic-sdk-typescript/commit/661f5f9d9b24f3661df246dcf101dd9812b3e19e)) +* **internal:** add test ([#660](https://github.com/anthropics/anthropic-sdk-typescript/issues/660)) ([3ec7d1a](https://github.com/anthropics/anthropic-sdk-typescript/commit/3ec7d1a9eea30255b24cdb16c1a26705bdfea0ac)) +* **internal:** temporary revert commit ([#643](https://github.com/anthropics/anthropic-sdk-typescript/issues/643)) ([43dd43c](https://github.com/anthropics/anthropic-sdk-typescript/commit/43dd43c4c8ab69d5a60e59473af7dff5f7799048)) +* **internal:** update examples ([#649](https://github.com/anthropics/anthropic-sdk-typescript/issues/649)) ([036a239](https://github.com/anthropics/anthropic-sdk-typescript/commit/036a239800fec7e6cbc439f125101d5475eae5b3)) +* **types:** add `| undefined` to client options properties ([#656](https://github.com/anthropics/anthropic-sdk-typescript/issues/656)) ([d642298](https://github.com/anthropics/anthropic-sdk-typescript/commit/d642298334529ff95b9d7ac497d548a6b04dbcfb)) + + +### Documentation + +* **readme:** fix misplaced period ([#650](https://github.com/anthropics/anthropic-sdk-typescript/issues/650)) ([8754744](https://github.com/anthropics/anthropic-sdk-typescript/commit/87547448c8b4bf69a61756af1f12927f33b68680)) +* **readme:** fix Request IDs example ([#659](https://github.com/anthropics/anthropic-sdk-typescript/issues/659)) ([6d3162d](https://github.com/anthropics/anthropic-sdk-typescript/commit/6d3162da1ddb964b75e575376f278468ba1ed9f5)) + +## 0.34.0 (2024-12-20) + +Full Changelog: [sdk-v0.33.1...sdk-v0.34.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.33.1...sdk-v0.34.0) + +### Features + +* **api:** add message batch delete endpoint ([#640](https://github.com/anthropics/anthropic-sdk-typescript/issues/640)) ([54f7e1f](https://github.com/anthropics/anthropic-sdk-typescript/commit/54f7e1ffb9a2956ee27a4a715b84717aa681eb7c)) + + +### Bug Fixes + +* **client:** normalize method ([#639](https://github.com/anthropics/anthropic-sdk-typescript/issues/639)) ([384bb04](https://github.com/anthropics/anthropic-sdk-typescript/commit/384bb042dd854ed753c6bd8e25f522d0e042bfbf)) + + +### Chores + +* bump testing data uri ([#637](https://github.com/anthropics/anthropic-sdk-typescript/issues/637)) ([3f23530](https://github.com/anthropics/anthropic-sdk-typescript/commit/3f23530fb55d9fec7278967ea02600e44e9f58e2)) +* **internal:** temporary revert commit ([#643](https://github.com/anthropics/anthropic-sdk-typescript/issues/643)) ([8057b1e](https://github.com/anthropics/anthropic-sdk-typescript/commit/8057b1eb67ccccee042a45f2efe53cccced15682)) + + +### Documentation + +* minor formatting changes ([#641](https://github.com/anthropics/anthropic-sdk-typescript/issues/641)) ([8b362ee](https://github.com/anthropics/anthropic-sdk-typescript/commit/8b362ee72954b31b4de920b35aed97255efa5e2e)) +* **readme:** add alpha callout ([#646](https://github.com/anthropics/anthropic-sdk-typescript/issues/646)) ([640304c](https://github.com/anthropics/anthropic-sdk-typescript/commit/640304c7c7e8bc67cbf799a646169736d89ad4c8)) + +## 0.33.1 (2024-12-17) + +Full Changelog: [sdk-v0.33.0...sdk-v0.33.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.33.0...sdk-v0.33.1) + +### Bug Fixes + +* **vertex:** remove `anthropic_version` deletion for token counting ([88221be](https://github.com/anthropics/anthropic-sdk-typescript/commit/88221be305d6e13ccf92e6e9cdb00daba45b57db)) + + +### Chores + +* **internal:** fix some typos ([#633](https://github.com/anthropics/anthropic-sdk-typescript/issues/633)) ([a0298f5](https://github.com/anthropics/anthropic-sdk-typescript/commit/a0298f5f67b8ecd25de416dbb3eada68b86befd7)) + +## 0.33.0 (2024-12-17) + +Full Changelog: [sdk-v0.32.1...sdk-v0.33.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.32.1...sdk-v0.33.0) + +### Features + +* **api:** general availability updates ([93d1316](https://github.com/anthropics/anthropic-sdk-typescript/commit/93d13168f950b2cdfc3b7c6664205b06418fea79)) +* **api:** general availability updates ([#631](https://github.com/anthropics/anthropic-sdk-typescript/issues/631)) ([b5c92e5](https://github.com/anthropics/anthropic-sdk-typescript/commit/b5c92e5b74c370ac3f9ba28e915bd54588a42be0)) +* **client:** add ._request_id property to object responses ([#596](https://github.com/anthropics/anthropic-sdk-typescript/issues/596)) ([9d6d584](https://github.com/anthropics/anthropic-sdk-typescript/commit/9d6d58430a216df9888434158bf628ae4b067aba)) +* **internal:** make git install file structure match npm ([#617](https://github.com/anthropics/anthropic-sdk-typescript/issues/617)) ([d3dd7d5](https://github.com/anthropics/anthropic-sdk-typescript/commit/d3dd7d5f8cad460dd18725d5c0f3c8db3f00115d)) +* **vertex:** support token counting ([9e76b4d](https://github.com/anthropics/anthropic-sdk-typescript/commit/9e76b4dc22d62b1239b382bb771b69ad8cff9442)) + + +### Bug Fixes + +* **docs:** add missing await to pagination example ([#609](https://github.com/anthropics/anthropic-sdk-typescript/issues/609)) ([e303077](https://github.com/anthropics/anthropic-sdk-typescript/commit/e303077ebab73c41adee7d25375b767c3fc78998)) +* **types:** remove anthropic-instant-1.2 model ([#599](https://github.com/anthropics/anthropic-sdk-typescript/issues/599)) ([e222a4d](https://github.com/anthropics/anthropic-sdk-typescript/commit/e222a4d0518aa80671c66ee2a25d87dc87a51316)) + + +### Chores + +* **api:** update spec version ([#607](https://github.com/anthropics/anthropic-sdk-typescript/issues/607)) ([ea44f9a](https://github.com/anthropics/anthropic-sdk-typescript/commit/ea44f9ac49dcc25a5dfa53880ebf61318ee90f6c)) +* **api:** update spec version ([#629](https://github.com/anthropics/anthropic-sdk-typescript/issues/629)) ([a25295c](https://github.com/anthropics/anthropic-sdk-typescript/commit/a25295cd6db7b57162fdd9049eb8a3c37bb94f08)) +* **bedrock,vertex:** remove unsupported countTokens method ([#597](https://github.com/anthropics/anthropic-sdk-typescript/issues/597)) ([17b7da5](https://github.com/anthropics/anthropic-sdk-typescript/commit/17b7da5ee6f35ea2bdd53a66a662871affae6341)) +* **bedrock:** remove unsupported methods ([6458dc1](https://github.com/anthropics/anthropic-sdk-typescript/commit/6458dc14544c16240a6580a21a36fcf5bde594b2)) +* **ci:** remove unneeded workflow ([#594](https://github.com/anthropics/anthropic-sdk-typescript/issues/594)) ([7572e48](https://github.com/anthropics/anthropic-sdk-typescript/commit/7572e48dbccb2090562399c7ff2d01503c86f445)) +* **client:** drop unused devDependency ([#610](https://github.com/anthropics/anthropic-sdk-typescript/issues/610)) ([5d0d523](https://github.com/anthropics/anthropic-sdk-typescript/commit/5d0d523390d8c34cae836c423940b67defb9d2aa)) +* improve browser error message ([#613](https://github.com/anthropics/anthropic-sdk-typescript/issues/613)) ([c26121e](https://github.com/anthropics/anthropic-sdk-typescript/commit/c26121e84039b7430995b6363876ea9795ba31ed)) +* **internal:** bump cross-spawn to v7.0.6 ([#624](https://github.com/anthropics/anthropic-sdk-typescript/issues/624)) ([e58ba9a](https://github.com/anthropics/anthropic-sdk-typescript/commit/e58ba9a177ec5c8545fd3a3f4fd3d2e7c722f023)) +* **internal:** remove unnecessary getRequestClient function ([#623](https://github.com/anthropics/anthropic-sdk-typescript/issues/623)) ([882c45f](https://github.com/anthropics/anthropic-sdk-typescript/commit/882c45f5a0bd1f4b996d59e6589a205c2111f46b)) +* **internal:** update isAbsoluteURL ([#627](https://github.com/anthropics/anthropic-sdk-typescript/issues/627)) ([2528ea0](https://github.com/anthropics/anthropic-sdk-typescript/commit/2528ea0dcfc83f38e76b58eaadaa5e8c5c0b188d)) +* **internal:** update spec ([#630](https://github.com/anthropics/anthropic-sdk-typescript/issues/630)) ([82cac06](https://github.com/anthropics/anthropic-sdk-typescript/commit/82cac065e2711467773c0ea62848cdf139ed5a11)) +* **internal:** use reexports not destructuring ([#604](https://github.com/anthropics/anthropic-sdk-typescript/issues/604)) ([e4daff2](https://github.com/anthropics/anthropic-sdk-typescript/commit/e4daff2b6a3fb42876ebd06ed4947c88cff919d8)) +* remove redundant word in comment ([#615](https://github.com/anthropics/anthropic-sdk-typescript/issues/615)) ([ef57a10](https://github.com/anthropics/anthropic-sdk-typescript/commit/ef57a103bcfc922a724a7c878f970dbd369b305e)) +* **tests:** limit array example length ([#611](https://github.com/anthropics/anthropic-sdk-typescript/issues/611)) ([91dc181](https://github.com/anthropics/anthropic-sdk-typescript/commit/91dc1812db2cc9e1f4660a13106bad932518b7cf)) +* **types:** nicer error class types + jsdocs ([#626](https://github.com/anthropics/anthropic-sdk-typescript/issues/626)) ([0287993](https://github.com/anthropics/anthropic-sdk-typescript/commit/0287993912ef81bd2c49603d120f49f4f979d75e)) + + +### Documentation + +* remove suggestion to use `npm` call out ([#614](https://github.com/anthropics/anthropic-sdk-typescript/issues/614)) ([6369261](https://github.com/anthropics/anthropic-sdk-typescript/commit/6369261e3597351f17b8f1a3945ca56b00eba177)) +* use latest sonnet in example snippets ([#625](https://github.com/anthropics/anthropic-sdk-typescript/issues/625)) ([f70882b](https://github.com/anthropics/anthropic-sdk-typescript/commit/f70882b0e8119a414b01b9f0b85fbe1ccb06f122)) + +## 0.32.1 (2024-11-05) + +Full Changelog: [sdk-v0.32.0...sdk-v0.32.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.32.0...sdk-v0.32.1) + +### Bug Fixes + +* **bedrock:** don't mutate request body inputs ([f83b535](https://github.com/anthropics/anthropic-sdk-typescript/commit/f83b53520262219229cecc388f95d92be83c09d5)) +* **vertex:** don't mutate request body inputs ([e9a82e5](https://github.com/anthropics/anthropic-sdk-typescript/commit/e9a82e56f0d7fff956c2ebd19e103a190f8beb83)) + +## 0.32.0 (2024-11-04) + +Full Changelog: [sdk-v0.31.0...sdk-v0.32.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.31.0...sdk-v0.32.0) + +### Features + +* **api:** add new haiku model ([#587](https://github.com/anthropics/anthropic-sdk-typescript/issues/587)) ([983b13c](https://github.com/anthropics/anthropic-sdk-typescript/commit/983b13c9e4f55b832fc4fddfd46bed89756d745e)) + + +### Bug Fixes + +* don't require deno to run build-deno ([#586](https://github.com/anthropics/anthropic-sdk-typescript/issues/586)) ([0e431d6](https://github.com/anthropics/anthropic-sdk-typescript/commit/0e431d61ec318aae09687dee0bfb922ccb8ddd15)) +* **types:** add missing token-counting-2024-11-01 ([#583](https://github.com/anthropics/anthropic-sdk-typescript/issues/583)) ([13d629c](https://github.com/anthropics/anthropic-sdk-typescript/commit/13d629c9b444a32b69729df7792199556a2b95f2)) + + +### Chores + +* remove unused build-deno condition ([#585](https://github.com/anthropics/anthropic-sdk-typescript/issues/585)) ([491e8fe](https://github.com/anthropics/anthropic-sdk-typescript/commit/491e8fe28745aeb55217809f94ad4e37900f4675)) + +## 0.31.0 (2024-11-01) + +Full Changelog: [sdk-v0.30.1...sdk-v0.31.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.30.1...sdk-v0.31.0) + +### Features + +* **api:** add message token counting & PDFs support ([#582](https://github.com/anthropics/anthropic-sdk-typescript/issues/582)) ([b593837](https://github.com/anthropics/anthropic-sdk-typescript/commit/b593837ae2d320414a26b5ec53aa6d3f30a3e6bc)) + + +### Bug Fixes + +* **countTokens:** correctly set beta header ([1680757](https://github.com/anthropics/anthropic-sdk-typescript/commit/16807572af923831e384869a0a6ccccaa8dbec84)) +* **internal:** support pnpm git installs ([#579](https://github.com/anthropics/anthropic-sdk-typescript/issues/579)) ([86bb102](https://github.com/anthropics/anthropic-sdk-typescript/commit/86bb102ce33346930a8b0a553a909fcc7d964a36)) +* **types:** add missing token-counting-2024-11-01 ([aff1546](https://github.com/anthropics/anthropic-sdk-typescript/commit/aff1546cd84ce50a52d17bcdcaba54e60e92955a)) + + +### Reverts + +* disable isolatedModules and change imports ([#575](https://github.com/anthropics/anthropic-sdk-typescript/issues/575)) ([2c3b176](https://github.com/anthropics/anthropic-sdk-typescript/commit/2c3b176fc551c21abef240b4fa6a98d33ca52048)) + + +### Chores + +* **internal:** update spec version ([#571](https://github.com/anthropics/anthropic-sdk-typescript/issues/571)) ([5760012](https://github.com/anthropics/anthropic-sdk-typescript/commit/576001245f0b5222cb9b17fafb8619f68d51bec3)) + + +### Documentation + +* **readme:** minor typo fixes ([#577](https://github.com/anthropics/anthropic-sdk-typescript/issues/577)) ([8412854](https://github.com/anthropics/anthropic-sdk-typescript/commit/8412854c05837cdb8b8ff898bef2a4e0dbb23cd2)) + + +### Refactors + +* enable isolatedModules and change imports ([#573](https://github.com/anthropics/anthropic-sdk-typescript/issues/573)) ([9068b4b](https://github.com/anthropics/anthropic-sdk-typescript/commit/9068b4b0a0a08a69a9330ce03418135e11aa539e)) +* use type imports for type-only imports ([#580](https://github.com/anthropics/anthropic-sdk-typescript/issues/580)) ([2c8a337](https://github.com/anthropics/anthropic-sdk-typescript/commit/2c8a337033e850b7282d35b37c3ce36d5b0dabbe)) + +## 0.30.1 (2024-10-23) + +Full Changelog: [sdk-v0.30.0...sdk-v0.30.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.30.0...sdk-v0.30.1) + +### Bug Fixes + +* **bedrock:** correct messages beta handling ([9b57586](https://github.com/anthropics/anthropic-sdk-typescript/commit/9b57586456221f8900902b8e85c7c017959c150a)) +* **vertex:** correct messages beta handling ([26f21ee](https://github.com/anthropics/anthropic-sdk-typescript/commit/26f21ee5f524f4cbfb7a97d40aa62553608b1d99)) + + +### Chores + +* **internal:** bumps eslint and related dependencies ([#570](https://github.com/anthropics/anthropic-sdk-typescript/issues/570)) ([0b3ebb0](https://github.com/anthropics/anthropic-sdk-typescript/commit/0b3ebb01c07356e09f0100c235200ca91384aa6a)) + +## 0.30.0 (2024-10-22) + +Full Changelog: [sdk-v0.29.2...sdk-v0.30.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.29.2...sdk-v0.30.0) + +### Features + +* **api:** add new model and `computer-use-2024-10-22` beta ([6981d89](https://github.com/anthropics/anthropic-sdk-typescript/commit/6981d89d3efe6ae8d35c7562527a6c81ad8ed78f)) +* **bedrock:** add beta.messages.create() method ([6317592](https://github.com/anthropics/anthropic-sdk-typescript/commit/63175920a016a2ad187dd1127d263357cf6c007e)) +* **vertex:** add beta.messages.create() ([22cfdba](https://github.com/anthropics/anthropic-sdk-typescript/commit/22cfdba2a3a54e916f2efcbce62990544d3e5f5f)) + + +### Bug Fixes + +* **client:** respect x-stainless-retry-count default headers ([#562](https://github.com/anthropics/anthropic-sdk-typescript/issues/562)) ([274573f](https://github.com/anthropics/anthropic-sdk-typescript/commit/274573f5bc74e382302071850dee058ea2920f0c)) + + +### Chores + +* **api:** add title ([#564](https://github.com/anthropics/anthropic-sdk-typescript/issues/564)) ([a8b7544](https://github.com/anthropics/anthropic-sdk-typescript/commit/a8b7544e56d4a1dfa1f6de530ddaa728ae52c87f)) +* **internal:** update spec ([#566](https://github.com/anthropics/anthropic-sdk-typescript/issues/566)) ([5b998ea](https://github.com/anthropics/anthropic-sdk-typescript/commit/5b998eaf3216fba2283e7762faa115bd5f47a239)) + +## 0.29.2 (2024-10-17) + +Full Changelog: [sdk-v0.29.1...sdk-v0.29.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.29.1...sdk-v0.29.2) + +### Bug Fixes + +* **types:** remove misleading betas TypedDict property for the Batch API ([#559](https://github.com/anthropics/anthropic-sdk-typescript/issues/559)) ([4de5d0a](https://github.com/anthropics/anthropic-sdk-typescript/commit/4de5d0a9d0a8733987d13dcef968146620d3b110)) + +## 0.29.1 (2024-10-15) + +Full Changelog: [sdk-v0.29.0...sdk-v0.29.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.29.0...sdk-v0.29.1) + +### Bug Fixes + +* **beta:** merge betas param with the default value ([#556](https://github.com/anthropics/anthropic-sdk-typescript/issues/556)) ([5520bbc](https://github.com/anthropics/anthropic-sdk-typescript/commit/5520bbccaa75fbab5aa321402637c77651ae3c87)) + + +### Chores + +* **internal:** update spec URL ([#554](https://github.com/anthropics/anthropic-sdk-typescript/issues/554)) ([1fb6448](https://github.com/anthropics/anthropic-sdk-typescript/commit/1fb64489aa1b13c266692c7d14d2dd9b5350b7fc)) + +## 0.29.0 (2024-10-08) + +Full Changelog: [sdk-v0.28.0...sdk-v0.29.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.28.0...sdk-v0.29.0) + +### Features + +* **api:** add message batches api ([4f114d5](https://github.com/anthropics/anthropic-sdk-typescript/commit/4f114d5121f5c66619c7bdd18d0aa2b7a627e3ff)) + + +### Chores + +* **internal:** move LineDecoder to a separate file ([#541](https://github.com/anthropics/anthropic-sdk-typescript/issues/541)) ([fd42469](https://github.com/anthropics/anthropic-sdk-typescript/commit/fd4246928d11347147955ca19efcd4c5b0accb10)) +* **internal:** pass props through internal parser ([#549](https://github.com/anthropics/anthropic-sdk-typescript/issues/549)) ([dd71955](https://github.com/anthropics/anthropic-sdk-typescript/commit/dd7195501e0419ca1e6bafd7341b0726e8b809ab)) + + +### Refactors + +* **types:** improve metadata type names ([#547](https://github.com/anthropics/anthropic-sdk-typescript/issues/547)) ([cef499c](https://github.com/anthropics/anthropic-sdk-typescript/commit/cef499cf3b01643f7e5e3c09524f49e198b940be)) +* **types:** improve metadata types ([#546](https://github.com/anthropics/anthropic-sdk-typescript/issues/546)) ([3fe538b](https://github.com/anthropics/anthropic-sdk-typescript/commit/3fe538bb8cd50e6d68cacc0846f287dc539238d3)) +* **types:** improve tool type names ([#543](https://github.com/anthropics/anthropic-sdk-typescript/issues/543)) ([18dbe77](https://github.com/anthropics/anthropic-sdk-typescript/commit/18dbe7773781eb3917c9609bf490b515d75e6841)) +* **types:** improve tool type names ([#544](https://github.com/anthropics/anthropic-sdk-typescript/issues/544)) ([fc2d823](https://github.com/anthropics/anthropic-sdk-typescript/commit/fc2d8230c6fb68e247743ffa82c3ba9f8b989adf)) + +## 0.28.0 (2024-10-04) + +Full Changelog: [sdk-v0.27.3...sdk-v0.28.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.27.3...sdk-v0.28.0) + +### Features + +* **api:** support disabling parallel tool use ([#540](https://github.com/anthropics/anthropic-sdk-typescript/issues/540)) ([df0032f](https://github.com/anthropics/anthropic-sdk-typescript/commit/df0032f263884190b31a63ddcb20429372617deb)) +* **client:** allow overriding retry count header ([#536](https://github.com/anthropics/anthropic-sdk-typescript/issues/536)) ([ec11f91](https://github.com/anthropics/anthropic-sdk-typescript/commit/ec11f9189e9a24f413a9d48b21a10ce88e367ac3)) +* **client:** send retry count header ([#533](https://github.com/anthropics/anthropic-sdk-typescript/issues/533)) ([401b81c](https://github.com/anthropics/anthropic-sdk-typescript/commit/401b81c55c1f998dc917fc268884c162f214df20)) + + +### Bug Fixes + +* **types:** remove leftover polyfill usage ([#532](https://github.com/anthropics/anthropic-sdk-typescript/issues/532)) ([ac188b2](https://github.com/anthropics/anthropic-sdk-typescript/commit/ac188b29670d409c15e740bca26f8ef488cb7d05)) + + +### Chores + +* better object fallback behaviour for casting errors ([#503](https://github.com/anthropics/anthropic-sdk-typescript/issues/503)) ([3660e97](https://github.com/anthropics/anthropic-sdk-typescript/commit/3660e977e7127b10446b24b0a76b0133b3f666de)) +* better object fallback behaviour for casting errors ([#526](https://github.com/anthropics/anthropic-sdk-typescript/issues/526)) ([4ffb2e4](https://github.com/anthropics/anthropic-sdk-typescript/commit/4ffb2e4e1f5fef3ae58d9f4c99a63e75dd459c5b)) +* **internal:** add dev dependency ([#531](https://github.com/anthropics/anthropic-sdk-typescript/issues/531)) ([a9c127b](https://github.com/anthropics/anthropic-sdk-typescript/commit/a9c127b2854d0cf7efd49e7d46ff10fe52372949)) + + +### Documentation + +* improve and reference contributing documentation ([#539](https://github.com/anthropics/anthropic-sdk-typescript/issues/539)) ([cbef925](https://github.com/anthropics/anthropic-sdk-typescript/commit/cbef925519c63f09626ea7aa61ab8ba9d36bc35d)) +* update CONTRIBUTING.md ([#528](https://github.com/anthropics/anthropic-sdk-typescript/issues/528)) ([2609dec](https://github.com/anthropics/anthropic-sdk-typescript/commit/2609dec770d33b828c957e431f2d03871e67e629)) + +## 0.27.3 (2024-09-09) + +Full Changelog: [sdk-v0.27.2...sdk-v0.27.3](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.27.2...sdk-v0.27.3) + +### Bug Fixes + +* **streaming:** correct error message serialisation ([#524](https://github.com/anthropics/anthropic-sdk-typescript/issues/524)) ([e150fa4](https://github.com/anthropics/anthropic-sdk-typescript/commit/e150fa47d0cd4cbbe1269e3971085d4a434fc3ba)) +* **uploads:** avoid making redundant memory copies ([#520](https://github.com/anthropics/anthropic-sdk-typescript/issues/520)) ([b6d2638](https://github.com/anthropics/anthropic-sdk-typescript/commit/b6d2638387612def84cebac2dedd5fbbea776d09)) + + +### Chores + +* **docs:** update browser support information ([#522](https://github.com/anthropics/anthropic-sdk-typescript/issues/522)) ([ce7aeb5](https://github.com/anthropics/anthropic-sdk-typescript/commit/ce7aeb59ccba4e4d19cb9aa88d7055fb585865ae)) + +## 0.27.2 (2024-09-04) + +Full Changelog: [sdk-v0.27.1...sdk-v0.27.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.27.1...sdk-v0.27.2) + +### Bug Fixes + +* **client:** correct File construction from node-fetch Responses ([#518](https://github.com/anthropics/anthropic-sdk-typescript/issues/518)) ([62ae46f](https://github.com/anthropics/anthropic-sdk-typescript/commit/62ae46fb1e1b360850aafc9e935411c9b7d1c3bb)) + + +### Chores + +* **api:** deprecate claude-1 models ([53644d2](https://github.com/anthropics/anthropic-sdk-typescript/commit/53644d2690e62623afc04383cad0126f98ea37e8)) +* **ci:** install deps via ./script/bootstrap ([#515](https://github.com/anthropics/anthropic-sdk-typescript/issues/515)) ([90a8da1](https://github.com/anthropics/anthropic-sdk-typescript/commit/90a8da1dc937e9aea9fdf6862c3ddb414b39963a)) +* **internal:** dependency updates ([#519](https://github.com/anthropics/anthropic-sdk-typescript/issues/519)) ([b7b0cd6](https://github.com/anthropics/anthropic-sdk-typescript/commit/b7b0cd6579cd987662e7118f8563f68c0903f8da)) +* run tsc as part of lint script ([#513](https://github.com/anthropics/anthropic-sdk-typescript/issues/513)) ([c8127cf](https://github.com/anthropics/anthropic-sdk-typescript/commit/c8127cfa3bdd1370934fe122018e20fc659a4dbb)) + +## 0.27.1 (2024-08-27) + +Full Changelog: [sdk-v0.27.0...sdk-v0.27.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.27.0...sdk-v0.27.1) + +### Chores + +* **ci:** check for build errors ([#511](https://github.com/anthropics/anthropic-sdk-typescript/issues/511)) ([3ab1d3d](https://github.com/anthropics/anthropic-sdk-typescript/commit/3ab1d3d936f5ba3500f2ce87012c38bd198c3cbd)) + +## 0.27.0 (2024-08-21) + +Full Changelog: [sdk-v0.26.1...sdk-v0.27.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.26.1...sdk-v0.27.0) + +### Features + +* **client:** add support for browser usage ([#504](https://github.com/anthropics/anthropic-sdk-typescript/issues/504)) ([93c5f16](https://github.com/anthropics/anthropic-sdk-typescript/commit/93c5f16b4b8c3404bd67d6eb5a0556a8b0a5d027)) + + +### Documentation + +* **readme:** update formatting and clarity for CORS flag ([9cb2c35](https://github.com/anthropics/anthropic-sdk-typescript/commit/9cb2c35f92827eb8654b1669db5ba702770fcae4)) + +## 0.26.1 (2024-08-15) + +Full Changelog: [sdk-v0.26.0...sdk-v0.26.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.26.0...sdk-v0.26.1) + +### Chores + +* **ci:** add CODEOWNERS file ([#498](https://github.com/anthropics/anthropic-sdk-typescript/issues/498)) ([c34433f](https://github.com/anthropics/anthropic-sdk-typescript/commit/c34433fb6528fdd00d189ea0a3b177d95c7c7fa9)) +* **docs/api:** update prompt caching helpers ([04195a3](https://github.com/anthropics/anthropic-sdk-typescript/commit/04195a345d62c98f826e5eecdad20f497db5b3e5)) + +## 0.26.0 (2024-08-14) + +Full Changelog: [sdk-v0.25.2...sdk-v0.26.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.25.2...sdk-v0.26.0) + +### Features + +* **api:** add prompt caching beta ([c920b77](https://github.com/anthropics/anthropic-sdk-typescript/commit/c920b77fc67bd839bfeb6716ceab9d7c9bbe7393)) +* **client:** add streaming helpers ([39abc26](https://github.com/anthropics/anthropic-sdk-typescript/commit/39abc2635517d564ac8b7e63235f0a338fc4bed0)) + + +### Chores + +* **examples:** minor formatting changes ([#491](https://github.com/anthropics/anthropic-sdk-typescript/issues/491)) ([8afef58](https://github.com/anthropics/anthropic-sdk-typescript/commit/8afef584895ffa3f8382c98d2c0a3fc6138e9420)) + +## 0.25.2 (2024-08-12) + +Full Changelog: [sdk-v0.25.1...sdk-v0.25.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.25.1...sdk-v0.25.2) + +### Chores + +* **ci:** bump prism mock server version ([#490](https://github.com/anthropics/anthropic-sdk-typescript/issues/490)) ([bfb27f5](https://github.com/anthropics/anthropic-sdk-typescript/commit/bfb27f54c9b4ff4f9ae06327db454f72431b5bf4)) +* **ci:** minor changes ([#488](https://github.com/anthropics/anthropic-sdk-typescript/issues/488)) ([747fd97](https://github.com/anthropics/anthropic-sdk-typescript/commit/747fd973af594cc52f244b33f31bcf8079733e7d)) + +## 0.25.1 (2024-08-09) + +Full Changelog: [sdk-v0.25.0...sdk-v0.25.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.25.0...sdk-v0.25.1) + +### Chores + +* **internal:** update publish npm script ([#483](https://github.com/anthropics/anthropic-sdk-typescript/issues/483)) ([fb862ff](https://github.com/anthropics/anthropic-sdk-typescript/commit/fb862ff18be308ff710a2f97716f0ad1a62b9fbd)) +* **internal:** updates ([#487](https://github.com/anthropics/anthropic-sdk-typescript/issues/487)) ([67a3325](https://github.com/anthropics/anthropic-sdk-typescript/commit/67a3325aa05c5a19f06b0cb1e67517168427c300)) +* sync openapi version ([#481](https://github.com/anthropics/anthropic-sdk-typescript/issues/481)) ([5fd7e21](https://github.com/anthropics/anthropic-sdk-typescript/commit/5fd7e219732a4483c2edd9a812049569b31943c4)) +* sync openapi version ([#485](https://github.com/anthropics/anthropic-sdk-typescript/issues/485)) ([e74c522](https://github.com/anthropics/anthropic-sdk-typescript/commit/e74c522989cfb979ca916e416c7c14a349b32ef5)) +* sync openapi version ([#486](https://github.com/anthropics/anthropic-sdk-typescript/issues/486)) ([ad98e9e](https://github.com/anthropics/anthropic-sdk-typescript/commit/ad98e9eca5db4f5a04bf8c26e4c53050985cec33)) + +## 0.25.0 (2024-07-29) + +Full Changelog: [sdk-v0.24.3...sdk-v0.25.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.24.3...sdk-v0.25.0) + +### Features + +* add back compat alias for InputJsonDelta ([8b08161](https://github.com/anthropics/anthropic-sdk-typescript/commit/8b081613a50821b8dfa8a1251d42337a20607411)) +* **client:** make request-id header more accessible ([#462](https://github.com/anthropics/anthropic-sdk-typescript/issues/462)) ([5ea6f8b](https://github.com/anthropics/anthropic-sdk-typescript/commit/5ea6f8be0696e3753d8624f72328a5cba3a86056)) + + +### Bug Fixes + +* **compat:** remove ReadableStream polyfill redundant since node v16 ([#478](https://github.com/anthropics/anthropic-sdk-typescript/issues/478)) ([75f5710](https://github.com/anthropics/anthropic-sdk-typescript/commit/75f5710d57e6f72b6770d32d9c6dd71bbfb43d85)) +* use relative paths ([#475](https://github.com/anthropics/anthropic-sdk-typescript/issues/475)) ([a8ca93c](https://github.com/anthropics/anthropic-sdk-typescript/commit/a8ca93cc40464dc76118f7dd72e94c52693f3d63)) + + +### Chores + +* **bedrock:** use `chunk` for internal SSE parsing instead of `completion` ([#472](https://github.com/anthropics/anthropic-sdk-typescript/issues/472)) ([0f6190a](https://github.com/anthropics/anthropic-sdk-typescript/commit/0f6190a69d8986ac3779441eba43d345ec3fb342)) +* **ci:** also run workflows for PRs targeting `next` ([#464](https://github.com/anthropics/anthropic-sdk-typescript/issues/464)) ([cc405a8](https://github.com/anthropics/anthropic-sdk-typescript/commit/cc405a8cc4ea26389b9d857d75818722d0bcbfcd)) +* **docs:** fix incorrect client var names ([#479](https://github.com/anthropics/anthropic-sdk-typescript/issues/479)) ([a247935](https://github.com/anthropics/anthropic-sdk-typescript/commit/a247935a86b87b90209f493921661d20c9bc6457)) +* **docs:** mention lack of support for web browser runtimes ([#468](https://github.com/anthropics/anthropic-sdk-typescript/issues/468)) ([968a7fb](https://github.com/anthropics/anthropic-sdk-typescript/commit/968a7fbb6cb779d17d9f6c485c0b61f241e327bc)) +* **docs:** minor update to formatting of API link in README ([#467](https://github.com/anthropics/anthropic-sdk-typescript/issues/467)) ([50b9f2b](https://github.com/anthropics/anthropic-sdk-typescript/commit/50b9f2b0c3feb4707af2b9e5f006a3f726782803)) +* **docs:** rename anthropic const to client ([#471](https://github.com/anthropics/anthropic-sdk-typescript/issues/471)) ([e1a7f9f](https://github.com/anthropics/anthropic-sdk-typescript/commit/e1a7f9f813077fb033c732c004c7bda85738a321)) +* **docs:** use client instead of package name in Node examples ([#469](https://github.com/anthropics/anthropic-sdk-typescript/issues/469)) ([8961ebf](https://github.com/anthropics/anthropic-sdk-typescript/commit/8961ebf54bbab898667119c8d9551e33a4de6846)) +* **internal:** add constant for default timeout ([#480](https://github.com/anthropics/anthropic-sdk-typescript/issues/480)) ([dc89753](https://github.com/anthropics/anthropic-sdk-typescript/commit/dc897537789c6b4bc31ee8238aad8ffaaa65df5e)) +* **internal:** minor changes to tests ([#465](https://github.com/anthropics/anthropic-sdk-typescript/issues/465)) ([c1fd563](https://github.com/anthropics/anthropic-sdk-typescript/commit/c1fd563693bd354a81e0ae55c7355144f06b7f0b)) +* **internal:** remove old reference to check-test-server ([8dc9afc](https://github.com/anthropics/anthropic-sdk-typescript/commit/8dc9afcf00c4a38c2d85171ebceafc5f6a47c117)) +* sync spec ([#470](https://github.com/anthropics/anthropic-sdk-typescript/issues/470)) ([b493aa4](https://github.com/anthropics/anthropic-sdk-typescript/commit/b493aa49d3d6e67be22c3e8255dd4286e6bbcdeb)) +* **tests:** update prism version ([#473](https://github.com/anthropics/anthropic-sdk-typescript/issues/473)) ([6f21ecf](https://github.com/anthropics/anthropic-sdk-typescript/commit/6f21ecfd781d04a7dc83641f069bb38d5584a320)) + + +### Refactors + +* extract model out to a named type and rename partialjson ([#477](https://github.com/anthropics/anthropic-sdk-typescript/issues/477)) ([d2d4e36](https://github.com/anthropics/anthropic-sdk-typescript/commit/d2d4e36b995cc84e8a3a7c64eb614011df399c5e)) + +## 0.24.3 (2024-07-01) + +Full Changelog: [sdk-v0.24.2...sdk-v0.24.3](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.24.2...sdk-v0.24.3) + +### Bug Fixes + +* **types:** avoid errors on certain TS versions ([dd6aca5](https://github.com/anthropics/anthropic-sdk-typescript/commit/dd6aca56e58d52f09e67e227cccbf273b92adb13)) + +## 0.24.2 (2024-06-28) + +Full Changelog: [sdk-v0.24.1...sdk-v0.24.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.24.1...sdk-v0.24.2) + +### Bug Fixes + +* **partial-json:** don't error on unknown tokens ([d212ce1](https://github.com/anthropics/anthropic-sdk-typescript/commit/d212ce152ca0b8846e7891636ad4ba287da50958)) +* **partial-json:** handle `null` token properly ([f53742f](https://github.com/anthropics/anthropic-sdk-typescript/commit/f53742f497a33b8f0639a63cec828d430a19cb27)) + + +### Chores + +* gitignore test server logs ([#451](https://github.com/anthropics/anthropic-sdk-typescript/issues/451)) ([ee1308f](https://github.com/anthropics/anthropic-sdk-typescript/commit/ee1308f74e5544ed0ce53bfd14ca49d0f03bcffb)) +* **tests:** add unit tests for partial-json-parser ([4fb3bea](https://github.com/anthropics/anthropic-sdk-typescript/commit/4fb3bea74538823c8ab359048f823029d4716277)) + +## 0.24.1 (2024-06-25) + +Full Changelog: [sdk-v0.24.0...sdk-v0.24.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.24.0...sdk-v0.24.1) + +### Bug Fixes + +* **api:** add string to tool result block ([#448](https://github.com/anthropics/anthropic-sdk-typescript/issues/448)) ([87af4e9](https://github.com/anthropics/anthropic-sdk-typescript/commit/87af4e9280923ac73295f9b32086f82c2ed0c6f2)) + + +### Chores + +* **internal:** minor reformatting ([#444](https://github.com/anthropics/anthropic-sdk-typescript/issues/444)) ([46790bb](https://github.com/anthropics/anthropic-sdk-typescript/commit/46790bb462db01ae1725e120f2bdca0a89c8f722)) +* **internal:** replace deprecated aws-sdk packages with [@smithy](https://github.com/smithy) ([#447](https://github.com/anthropics/anthropic-sdk-typescript/issues/447)) ([4328cbf](https://github.com/anthropics/anthropic-sdk-typescript/commit/4328cbf9e64f8bfc9b95a9048b18729c9a938ba5)) + +## 0.24.0 (2024-06-20) + +Full Changelog: [sdk-v0.23.0...sdk-v0.24.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.23.0...sdk-v0.24.0) + +### Features + +* **api:** add new claude-3-5-sonnet-20240620 model ([#438](https://github.com/anthropics/anthropic-sdk-typescript/issues/438)) ([8d60d1b](https://github.com/anthropics/anthropic-sdk-typescript/commit/8d60d1b6fb14988a2257727a1aaab9fbc8f75be3)) + +## 0.23.0 (2024-06-14) + +Full Changelog: [sdk-v0.22.0...sdk-v0.23.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.22.0...sdk-v0.23.0) + +### Features + +* support `application/octet-stream` request bodies ([#436](https://github.com/anthropics/anthropic-sdk-typescript/issues/436)) ([3a8e6ed](https://github.com/anthropics/anthropic-sdk-typescript/commit/3a8e6ed7cc057b77fabeaf8f774f6231836022d7)) + + +### Bug Fixes + +* allow git imports for pnpm ([#433](https://github.com/anthropics/anthropic-sdk-typescript/issues/433)) ([a4f5263](https://github.com/anthropics/anthropic-sdk-typescript/commit/a4f5263692aea74fbf91d0591958aca16c820e00)) + +## 0.22.0 (2024-05-30) + +Full Changelog: [sdk-v0.21.1...sdk-v0.22.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.21.1...sdk-v0.22.0) + +### Features + +* **api/types:** add stream event type aliases with a Raw prefix ([#428](https://github.com/anthropics/anthropic-sdk-typescript/issues/428)) ([1e367e4](https://github.com/anthropics/anthropic-sdk-typescript/commit/1e367e4020fa4691c565c89bdfba40c2f6060871)) +* **api:** tool use is GA and available on 3P ([#429](https://github.com/anthropics/anthropic-sdk-typescript/issues/429)) ([2decf85](https://github.com/anthropics/anthropic-sdk-typescript/commit/2decf85e7471932dad98c21d4ed2d476ab1588a6)) +* **bedrock:** support tools ([91fc61a](https://github.com/anthropics/anthropic-sdk-typescript/commit/91fc61ae7246705d26e96a95dae38b46e9ad9290)) +* **streaming:** add tools support ([4c83bb1](https://github.com/anthropics/anthropic-sdk-typescript/commit/4c83bb111735cd513c09d5ed57a5cb0888534afd)) +* **vertex:** support tools ([acf0aa7](https://github.com/anthropics/anthropic-sdk-typescript/commit/acf0aa7571425c8582740616e24883c2ec65218b)) + + +### Documentation + +* **helpers:** mention inputJson event ([0ef0e39](https://github.com/anthropics/anthropic-sdk-typescript/commit/0ef0e39a870541bbe800b03c1bdcf88eb6e1350c)) +* **readme:** add bundle size badge ([#426](https://github.com/anthropics/anthropic-sdk-typescript/issues/426)) ([bf7c1fd](https://github.com/anthropics/anthropic-sdk-typescript/commit/bf7c1fdaf3476d5c43079e8a0789ed0dd0c807a6)) + +## 0.21.1 (2024-05-21) + +Full Changelog: [sdk-v0.21.0...sdk-v0.21.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.21.0...sdk-v0.21.1) + +### Chores + +* **docs:** fix typo ([#423](https://github.com/anthropics/anthropic-sdk-typescript/issues/423)) ([d42f458](https://github.com/anthropics/anthropic-sdk-typescript/commit/d42f45820347171bd456b0038406a53b098a4fa2)) +* **internal:** run build script over sub-packages ([6f04f66](https://github.com/anthropics/anthropic-sdk-typescript/commit/6f04f6689603ef5a59ce15f490d74392241694c3)) + +## 0.21.0 (2024-05-16) + +Full Changelog: [sdk-v0.20.9...sdk-v0.21.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.9...sdk-v0.21.0) + +### Features + +* **api:** add `tool_choice` param, image block params inside `tool_result.content`, and streaming for `tool_use` blocks ([#418](https://github.com/anthropics/anthropic-sdk-typescript/issues/418)) ([421a1e6](https://github.com/anthropics/anthropic-sdk-typescript/commit/421a1e6f53cbb2f440e3668be3e13475976eebbf)) + + +### Chores + +* **docs:** add SECURITY.md ([#411](https://github.com/anthropics/anthropic-sdk-typescript/issues/411)) ([bf2ad84](https://github.com/anthropics/anthropic-sdk-typescript/commit/bf2ad8496d97de46b28575dfa37fa9cf15341eb4)) +* **internal:** add slightly better logging to scripts ([#415](https://github.com/anthropics/anthropic-sdk-typescript/issues/415)) ([7a042d2](https://github.com/anthropics/anthropic-sdk-typescript/commit/7a042d2dd5a5e310f15c02277c7f7a19e9772872)) +* **internal:** fix generated version numbers ([#413](https://github.com/anthropics/anthropic-sdk-typescript/issues/413)) ([ea77063](https://github.com/anthropics/anthropic-sdk-typescript/commit/ea770630897bb85caaecd39bccf478e4dd3f169c)) + +## 0.20.9 (2024-05-07) + +Full Changelog: [sdk-v0.20.8...sdk-v0.20.9](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.8...sdk-v0.20.9) + +### Bug Fixes + +* **package:** revert recent client file change ([#409](https://github.com/anthropics/anthropic-sdk-typescript/issues/409)) ([9054249](https://github.com/anthropics/anthropic-sdk-typescript/commit/90542499ccf9f5d020e71e1c8dc8935e0c86ede4)) + + +### Chores + +* **internal:** add link to openapi spec ([#406](https://github.com/anthropics/anthropic-sdk-typescript/issues/406)) ([39c856d](https://github.com/anthropics/anthropic-sdk-typescript/commit/39c856d02abbb1d54efbacef087cc89b79bce017)) +* **internal:** bump prism version ([#407](https://github.com/anthropics/anthropic-sdk-typescript/issues/407)) ([0c1eb5d](https://github.com/anthropics/anthropic-sdk-typescript/commit/0c1eb5d5c500ea95fbf9a5ccce37c74170c6a84f)) +* **internal:** move client class to separate file ([#408](https://github.com/anthropics/anthropic-sdk-typescript/issues/408)) ([b5e1e4a](https://github.com/anthropics/anthropic-sdk-typescript/commit/b5e1e4a68c9fc00bede9134fa2214480bbbf5f2d)) +* **internal:** refactor scripts ([#404](https://github.com/anthropics/anthropic-sdk-typescript/issues/404)) ([f60e2d8](https://github.com/anthropics/anthropic-sdk-typescript/commit/f60e2d81bb241063507d2d7e728c78e78c1c5e51)) + +## 0.20.8 (2024-04-29) + +Full Changelog: [sdk-v0.20.7...sdk-v0.20.8](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.7...sdk-v0.20.8) + +### Chores + +* **internal:** add scripts/test and scripts/mock ([#403](https://github.com/anthropics/anthropic-sdk-typescript/issues/403)) ([bdc6011](https://github.com/anthropics/anthropic-sdk-typescript/commit/bdc601192d651f9a7f6bf822c631db1d652d796c)) +* **internal:** use actions/checkout@v4 for codeflow ([#400](https://github.com/anthropics/anthropic-sdk-typescript/issues/400)) ([6d565d3](https://github.com/anthropics/anthropic-sdk-typescript/commit/6d565d366f8787e87cbe9ac851e42c13f88c2579)) + +## 0.20.7 (2024-04-24) + +Full Changelog: [sdk-v0.20.6...sdk-v0.20.7](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.6...sdk-v0.20.7) + +### Chores + +* **internal:** use @swc/jest for running tests ([#397](https://github.com/anthropics/anthropic-sdk-typescript/issues/397)) ([0dbca67](https://github.com/anthropics/anthropic-sdk-typescript/commit/0dbca679f26f4a301810290601cc41f18525fe6e)) + +## 0.20.6 (2024-04-17) + +Full Changelog: [sdk-v0.20.5...sdk-v0.20.6](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.5...sdk-v0.20.6) + +### Build System + +* configure UTF-8 locale in devcontainer ([#393](https://github.com/anthropics/anthropic-sdk-typescript/issues/393)) ([db10244](https://github.com/anthropics/anthropic-sdk-typescript/commit/db10244fa87a653c48bbcc2fffbad206dbe39645)) + +## 0.20.5 (2024-04-15) + +Full Changelog: [sdk-v0.20.4...sdk-v0.20.5](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.4...sdk-v0.20.5) + +### Chores + +* **internal:** formatting ([#390](https://github.com/anthropics/anthropic-sdk-typescript/issues/390)) ([b7861b9](https://github.com/anthropics/anthropic-sdk-typescript/commit/b7861b940dc9c1c21eb6edf3bac8d1d62d2d372f)) + +## 0.20.4 (2024-04-11) + +Full Changelog: [sdk-v0.20.3...sdk-v0.20.4](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.3...sdk-v0.20.4) + +### Chores + +* **internal:** update gitignore ([#388](https://github.com/anthropics/anthropic-sdk-typescript/issues/388)) ([03f03a2](https://github.com/anthropics/anthropic-sdk-typescript/commit/03f03a22532680a3b9bbd2e49116ef760b07a498)) + +## 0.20.3 (2024-04-10) + +Full Changelog: [sdk-v0.20.2...sdk-v0.20.3](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.2...sdk-v0.20.3) + +### Bug Fixes + +* **vertex:** correct core client dependency constraint ([#384](https://github.com/anthropics/anthropic-sdk-typescript/issues/384)) ([de29699](https://github.com/anthropics/anthropic-sdk-typescript/commit/de2969902b68b5c46b6e682b8b947426c6ccf195)) + +## 0.20.2 (2024-04-09) + +Full Changelog: [sdk-v0.20.1...sdk-v0.20.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.1...sdk-v0.20.2) + +### Chores + +* **internal:** update lock files ([#377](https://github.com/anthropics/anthropic-sdk-typescript/issues/377)) ([6d239ef](https://github.com/anthropics/anthropic-sdk-typescript/commit/6d239efaca730baba374a1b49f6b1a4037b3e163)) + +## 0.20.1 (2024-04-04) + +Full Changelog: [sdk-v0.20.0...sdk-v0.20.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.20.0...sdk-v0.20.1) + +### Documentation + +* **readme:** mention tool use ([#375](https://github.com/anthropics/anthropic-sdk-typescript/issues/375)) ([72356dd](https://github.com/anthropics/anthropic-sdk-typescript/commit/72356dd9c498344074c292ffdab602d54c4fa13e)) + +## 0.20.0 (2024-04-04) + +Full Changelog: [sdk-v0.19.2...sdk-v0.20.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.19.2...sdk-v0.20.0) + +### Features + +* **api:** tool use beta ([#374](https://github.com/anthropics/anthropic-sdk-typescript/issues/374)) ([e28514a](https://github.com/anthropics/anthropic-sdk-typescript/commit/e28514a305908f71e98bc33123bc99ed6bf7348f)) + + +### Bug Fixes + +* **types:** correctly mark type as a required property in requests ([#371](https://github.com/anthropics/anthropic-sdk-typescript/issues/371)) ([a04edd8](https://github.com/anthropics/anthropic-sdk-typescript/commit/a04edd8d7f4c552281b37a44099edf432d7fcb27)) + + +### Chores + +* **types:** consistent naming for text block types ([#373](https://github.com/anthropics/anthropic-sdk-typescript/issues/373)) ([84a6a58](https://github.com/anthropics/anthropic-sdk-typescript/commit/84a6a58ff978cc274b85656ca4394396e8b360e3)) + +## 0.19.2 (2024-04-04) + +Full Changelog: [sdk-v0.19.1...sdk-v0.19.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.19.1...sdk-v0.19.2) + +### Bug Fixes + +* **streaming:** handle special line characters and fix multi-byte character decoding ([#370](https://github.com/anthropics/anthropic-sdk-typescript/issues/370)) ([7a97b38](https://github.com/anthropics/anthropic-sdk-typescript/commit/7a97b38e389809ef75c307d26fc671c829b5ea29)) + + +### Chores + +* **deps:** bump yarn to v1.22.22 ([#369](https://github.com/anthropics/anthropic-sdk-typescript/issues/369)) ([603d7b1](https://github.com/anthropics/anthropic-sdk-typescript/commit/603d7b17411bc25a562acb80ebde71ae058892d0)) +* **deps:** remove unused dependency digest-fetch ([#368](https://github.com/anthropics/anthropic-sdk-typescript/issues/368)) ([df1df0f](https://github.com/anthropics/anthropic-sdk-typescript/commit/df1df0f509682841c703fa1ea5062a796cfe2091)) + + +### Documentation + +* **readme:** change undocumented params wording ([#363](https://github.com/anthropics/anthropic-sdk-typescript/issues/363)) ([4222e08](https://github.com/anthropics/anthropic-sdk-typescript/commit/4222e088aff5e26a3d2fbe1b622781c6194b0469)) + +## 0.19.1 (2024-03-29) + +Full Changelog: [sdk-v0.19.0...sdk-v0.19.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.19.0...sdk-v0.19.1) + +### Bug Fixes + +* **client:** correctly send deno version header ([#354](https://github.com/anthropics/anthropic-sdk-typescript/issues/354)) ([ad5162b](https://github.com/anthropics/anthropic-sdk-typescript/commit/ad5162be2ccb122eb355577f481732121b130b0b)) +* handle process.env being undefined in debug func ([#351](https://github.com/anthropics/anthropic-sdk-typescript/issues/351)) ([3b0f38a](https://github.com/anthropics/anthropic-sdk-typescript/commit/3b0f38ab427ae7d31c800cd5c8be1653da9ae709)) +* **streaming:** correct accumulation of output tokens ([#361](https://github.com/anthropics/anthropic-sdk-typescript/issues/361)) ([76af283](https://github.com/anthropics/anthropic-sdk-typescript/commit/76af283596530ccd3a77ed86788bc0ea1e93f3c1)) +* **types:** correct typo claude-2.1' to claude-2.1 ([#352](https://github.com/anthropics/anthropic-sdk-typescript/issues/352)) ([0d5efb9](https://github.com/anthropics/anthropic-sdk-typescript/commit/0d5efb9a0b9eb3ebe1df5ed10164fadfd886eac6)) + + +### Chores + +* **internal:** add type ([#359](https://github.com/anthropics/anthropic-sdk-typescript/issues/359)) ([9456414](https://github.com/anthropics/anthropic-sdk-typescript/commit/945641467deffb674f762920955c98d10f287c8e)) + + +### Documentation + +* **bedrock:** fix dead link ([#356](https://github.com/anthropics/anthropic-sdk-typescript/issues/356)) ([a953e00](https://github.com/anthropics/anthropic-sdk-typescript/commit/a953e0070698f3238b728ffe06a056a9f2d6b7ff)) +* **readme:** consistent use of sentence case in headings ([#347](https://github.com/anthropics/anthropic-sdk-typescript/issues/347)) ([30f45d1](https://github.com/anthropics/anthropic-sdk-typescript/commit/30f45d14a534d7392dfcc4fb503bf07ab8cf038d)) +* **readme:** document how to make undocumented requests ([#349](https://github.com/anthropics/anthropic-sdk-typescript/issues/349)) ([f92c50a](https://github.com/anthropics/anthropic-sdk-typescript/commit/f92c50ac6d9d1b8bdb837e52414aafd3224553da)) + +## 0.19.0 (2024-03-19) + +Full Changelog: [sdk-v0.18.0...sdk-v0.19.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.18.0...sdk-v0.19.0) + +### Features + +* **vertex:** add support for overriding google auth ([#338](https://github.com/anthropics/anthropic-sdk-typescript/issues/338)) ([28d98c4](https://github.com/anthropics/anthropic-sdk-typescript/commit/28d98c487257a3c6b3c6d84597768d484fadb86d)) +* **vertex:** api is no longer in private beta ([#344](https://github.com/anthropics/anthropic-sdk-typescript/issues/344)) ([892127c](https://github.com/anthropics/anthropic-sdk-typescript/commit/892127cdac059eee11c1a322a5512f9250868023)) + + +### Bug Fixes + +* **internal:** make toFile use input file's options ([#343](https://github.com/anthropics/anthropic-sdk-typescript/issues/343)) ([2dc2174](https://github.com/anthropics/anthropic-sdk-typescript/commit/2dc217441d6da8f2192b3e81b03c985383b6816e)) + + +### Chores + +* **internal:** update generated pragma comment ([#341](https://github.com/anthropics/anthropic-sdk-typescript/issues/341)) ([fd60f63](https://github.com/anthropics/anthropic-sdk-typescript/commit/fd60f63d5e5cd978b287d66fd95deabe2ff089d2)) + + +### Documentation + +* fix typo in CONTRIBUTING.md ([#340](https://github.com/anthropics/anthropic-sdk-typescript/issues/340)) ([ba9f3fa](https://github.com/anthropics/anthropic-sdk-typescript/commit/ba9f3faa5e3d116fce232d81f554b2f95f573ec8)) + +## 0.18.0 (2024-03-13) + +Full Changelog: [sdk-v0.17.2...sdk-v0.18.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.17.2...sdk-v0.18.0) + +### Features + +* **api:** add haiku model ([#333](https://github.com/anthropics/anthropic-sdk-typescript/issues/333)) ([11becc6](https://github.com/anthropics/anthropic-sdk-typescript/commit/11becc64a8b07b353835678e063a70e3a0bd85e3)) + + +### Documentation + +* update models in vertex examples ([#331](https://github.com/anthropics/anthropic-sdk-typescript/issues/331)) ([3d139b3](https://github.com/anthropics/anthropic-sdk-typescript/commit/3d139b374179ef5540a8e9436df06501c6ada6c5)) + +## 0.17.2 (2024-03-12) + +Full Changelog: [sdk-v0.17.1...sdk-v0.17.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.17.1...sdk-v0.17.2) + +### Chores + +* **internal:** add explicit type annotation to decoder ([#324](https://github.com/anthropics/anthropic-sdk-typescript/issues/324)) ([7e172c7](https://github.com/anthropics/anthropic-sdk-typescript/commit/7e172c74f75414ee246cbd71104454c9e81efc0d)) + +## 0.17.1 (2024-03-06) + +Full Changelog: [sdk-v0.17.0...sdk-v0.17.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.17.0...sdk-v0.17.1) + +### Documentation + +* deprecate old access token getter ([#322](https://github.com/anthropics/anthropic-sdk-typescript/issues/322)) ([1110548](https://github.com/anthropics/anthropic-sdk-typescript/commit/1110548d4543fab83bc0ef3beb99a75711cb028a)) +* remove extraneous --save and yarn install instructions ([#323](https://github.com/anthropics/anthropic-sdk-typescript/issues/323)) ([775ecb9](https://github.com/anthropics/anthropic-sdk-typescript/commit/775ecb9ef3ab17e88dabc149faa0876cd6ab5f0b)) + +## 0.17.0 (2024-03-06) + +Full Changelog: [sdk-v0.16.1...sdk-v0.17.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.16.1...sdk-v0.17.0) + +### Features + +* **api:** add enum to model param for message ([#315](https://github.com/anthropics/anthropic-sdk-typescript/issues/315)) ([0c44de0](https://github.com/anthropics/anthropic-sdk-typescript/commit/0c44de01a5d5fc6dda3667f03779eb029247c18e)) + + +### Bug Fixes + +* **streaming:** correctly handle trailing new lines in byte chunks ([#317](https://github.com/anthropics/anthropic-sdk-typescript/issues/317)) ([0147b46](https://github.com/anthropics/anthropic-sdk-typescript/commit/0147b4693bd4b1dc3c9cba04a7082aad3c3cb42c)) + + +### Chores + +* **types:** fix accidental exposure of Buffer type to cloudflare ([#319](https://github.com/anthropics/anthropic-sdk-typescript/issues/319)) ([a5e4462](https://github.com/anthropics/anthropic-sdk-typescript/commit/a5e4462bcf054e8324cbcaa31d1b85ffc58113fd)) + + +### Documentation + +* **readme:** fix https proxy example ([#310](https://github.com/anthropics/anthropic-sdk-typescript/issues/310)) ([99d3c54](https://github.com/anthropics/anthropic-sdk-typescript/commit/99d3c545f45230ec5862ddbbfcb64f46b54d7d13)) +* **readme:** fix https proxy example ([#311](https://github.com/anthropics/anthropic-sdk-typescript/issues/311)) ([ffb603c](https://github.com/anthropics/anthropic-sdk-typescript/commit/ffb603c15a0f5d396c96ac545a0cdd0c814ec4ef)) + +## 0.16.1 (2024-03-04) + +Full Changelog: [sdk-v0.16.0...sdk-v0.16.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.16.0...sdk-v0.16.1) + +### Chores + +* fix error handler in readme ([#307](https://github.com/anthropics/anthropic-sdk-typescript/issues/307)) ([5007a1e](https://github.com/anthropics/anthropic-sdk-typescript/commit/5007a1e71907648ea44e1663f5b7f71bb20d001d)) + + +### Documentation + +* **readme:** reference bedrock sdk ([#309](https://github.com/anthropics/anthropic-sdk-typescript/issues/309)) ([0fd0416](https://github.com/anthropics/anthropic-sdk-typescript/commit/0fd041617eca18dd506efffe5a4e2505dd1aa004)) + +## 0.16.0 (2024-03-04) + +Full Changelog: [sdk-v0.15.0...sdk-v0.16.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.15.0...sdk-v0.16.0) + +### Features + +* **bedrock:** add messages API ([#305](https://github.com/anthropics/anthropic-sdk-typescript/issues/305)) ([8b7f89e](https://github.com/anthropics/anthropic-sdk-typescript/commit/8b7f89e1e60416f9ad5b575d43238a4259654395)) + + +### Chores + +* update examples ([459956a](https://github.com/anthropics/anthropic-sdk-typescript/commit/459956ac44b5a2fd1dd0d0828e0281875b5900e9)) + +## 0.15.0 (2024-03-04) + +Full Changelog: [sdk-v0.14.1...sdk-v0.15.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.14.1...sdk-v0.15.0) + +### Features + +* **messages:** add support for image inputs ([#303](https://github.com/anthropics/anthropic-sdk-typescript/issues/303)) ([7663bd6](https://github.com/anthropics/anthropic-sdk-typescript/commit/7663bd6e1a4427483cf5f13889bc5c63314e5bae)) + + +### Bug Fixes + +* **MessageStream:** handle errors more gracefully in async iterator ([#301](https://github.com/anthropics/anthropic-sdk-typescript/issues/301)) ([9cc0daa](https://github.com/anthropics/anthropic-sdk-typescript/commit/9cc0daa9af5717953933e12b487bdbdd5b762cc7)) + + +### Chores + +* **docs:** mention install from git repo ([#302](https://github.com/anthropics/anthropic-sdk-typescript/issues/302)) ([dd2627b](https://github.com/anthropics/anthropic-sdk-typescript/commit/dd2627bc6404afbdccb2c2b66ee0dfcc3fc80031)) +* **internal:** update deps ([#296](https://github.com/anthropics/anthropic-sdk-typescript/issues/296)) ([8804a92](https://github.com/anthropics/anthropic-sdk-typescript/commit/8804a92e3c873d712cac75089af0e82104e6381c)) + + +### Documentation + +* **contributing:** improve wording ([#299](https://github.com/anthropics/anthropic-sdk-typescript/issues/299)) ([7697fa1](https://github.com/anthropics/anthropic-sdk-typescript/commit/7697fa1a3b680015c55ed715a1496c727630a3dc)) +* **readme:** fix typo in custom fetch implementation ([#300](https://github.com/anthropics/anthropic-sdk-typescript/issues/300)) ([a4974c3](https://github.com/anthropics/anthropic-sdk-typescript/commit/a4974c3080c6b592c2a25367932481a154e6c280)) + +## 0.14.1 (2024-02-22) + +Full Changelog: [sdk-v0.14.0...sdk-v0.14.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.14.0...sdk-v0.14.1) + +### Chores + +* **ci:** update actions/setup-node action to v4 ([#295](https://github.com/anthropics/anthropic-sdk-typescript/issues/295)) ([359a856](https://github.com/anthropics/anthropic-sdk-typescript/commit/359a856c4c93d962ca3e117f4dd799849eb5fa7d)) +* **docs:** remove references to old bedrock package ([#289](https://github.com/anthropics/anthropic-sdk-typescript/issues/289)) ([33b935e](https://github.com/anthropics/anthropic-sdk-typescript/commit/33b935e3d840346dd464445901846d2b22888e1c)) +* **internal:** refactor release environment script ([#294](https://github.com/anthropics/anthropic-sdk-typescript/issues/294)) ([b7f8714](https://github.com/anthropics/anthropic-sdk-typescript/commit/b7f87143b16ad413adb943297e65473fd9b93b71)) + + +### Documentation + +* **readme:** fix header for streaming helpers ([#293](https://github.com/anthropics/anthropic-sdk-typescript/issues/293)) ([7278e6f](https://github.com/anthropics/anthropic-sdk-typescript/commit/7278e6f7d62d837c2af0b1a440dfa97b6a3f6b4e)) + + +### Refactors + +* **api:** mark completions API as legacy ([#291](https://github.com/anthropics/anthropic-sdk-typescript/issues/291)) ([c78e2e2](https://github.com/anthropics/anthropic-sdk-typescript/commit/c78e2e215067fabcc3eaee0a537213f55735b42e)) + +## 0.14.0 (2024-02-13) + +Full Changelog: [sdk-v0.13.1...sdk-v0.14.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.13.1...sdk-v0.14.0) + +### ⚠ BREAKING CHANGES + +* **api:** messages is generally available ([#287](https://github.com/anthropics/anthropic-sdk-typescript/issues/287)) + +### Features + +* **api:** messages is generally available ([#287](https://github.com/anthropics/anthropic-sdk-typescript/issues/287)) ([be0a828](https://github.com/anthropics/anthropic-sdk-typescript/commit/be0a82883cf9b1b9d2944525b86e40f2b42cea4f)) + +## 0.13.1 (2024-02-07) + +Full Changelog: [sdk-v0.13.0...sdk-v0.13.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.13.0...sdk-v0.13.1) + +### Chores + +* **internal:** reformat pacakge.json ([#284](https://github.com/anthropics/anthropic-sdk-typescript/issues/284)) ([3760c68](https://github.com/anthropics/anthropic-sdk-typescript/commit/3760c68f207b596261da336cbe62b4b84fb1763f)) +* respect `application/vnd.api+json` content-type header ([#286](https://github.com/anthropics/anthropic-sdk-typescript/issues/286)) ([daf0cae](https://github.com/anthropics/anthropic-sdk-typescript/commit/daf0cae6087580d61d4423e113259c8315c2b85a)) + +## 0.13.0 (2024-02-02) + +Full Changelog: [sdk-v0.12.8...sdk-v0.13.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.12.8...sdk-v0.13.0) + +### Features + +* **api:** add new usage response fields ([#281](https://github.com/anthropics/anthropic-sdk-typescript/issues/281)) ([77bd18f](https://github.com/anthropics/anthropic-sdk-typescript/commit/77bd18fb3d149c0706664304102fc5f12830f761)) + + +### Chores + +* **package:** fix formatting ([#283](https://github.com/anthropics/anthropic-sdk-typescript/issues/283)) ([f88579a](https://github.com/anthropics/anthropic-sdk-typescript/commit/f88579a0768e0a7d5064eec9e1dd79e86c66bce7)) + +## 0.12.8 (2024-02-02) + +Full Changelog: [sdk-v0.12.7...sdk-v0.12.8](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.12.7...sdk-v0.12.8) + +### Chores + +* **interal:** make link to api.md relative ([#278](https://github.com/anthropics/anthropic-sdk-typescript/issues/278)) ([46f8c28](https://github.com/anthropics/anthropic-sdk-typescript/commit/46f8c2805af75a5a733fdaa53936765a483471cb)) +* **internal:** enable building when git installed ([#279](https://github.com/anthropics/anthropic-sdk-typescript/issues/279)) ([3065001](https://github.com/anthropics/anthropic-sdk-typescript/commit/3065001610041b0c74cc640b72f646b6ff867db1)) + + +### Documentation + +* add a CONTRIBUTING.md ([#280](https://github.com/anthropics/anthropic-sdk-typescript/issues/280)) ([5b53551](https://github.com/anthropics/anthropic-sdk-typescript/commit/5b535512f2eacdb9f2fef795c85f2d2aaeedaea3)) + +## 0.12.7 (2024-01-31) + +Full Changelog: [sdk-v0.12.6...sdk-v0.12.7](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.12.6...sdk-v0.12.7) + +### Chores + +* **bedrock:** move bedrock SDK to the main repo ([#274](https://github.com/anthropics/anthropic-sdk-typescript/issues/274)) ([b4ef3a8](https://github.com/anthropics/anthropic-sdk-typescript/commit/b4ef3a854e447744a1e270ec1e7e6da81b98ade3)) +* **ci:** fix publish packages script ([#272](https://github.com/anthropics/anthropic-sdk-typescript/issues/272)) ([db3585d](https://github.com/anthropics/anthropic-sdk-typescript/commit/db3585daf759c9794ec307b05a568527a2e7df99)) + +## 0.12.6 (2024-01-30) + +Full Changelog: [sdk-v0.12.5...sdk-v0.12.6](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.12.5...sdk-v0.12.6) + +### Chores + +* **internal:** support pre-release versioning ([#270](https://github.com/anthropics/anthropic-sdk-typescript/issues/270)) ([566069d](https://github.com/anthropics/anthropic-sdk-typescript/commit/566069d4eb1dbcc2123f4b455f855b0748d586ee)) + +## 0.12.5 (2024-01-25) + +Full Changelog: [sdk-v0.12.4...sdk-v0.12.5](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.12.4...sdk-v0.12.5) + +### Chores + +* **internal:** don't re-export streaming type ([#267](https://github.com/anthropics/anthropic-sdk-typescript/issues/267)) ([bcae5a9](https://github.com/anthropics/anthropic-sdk-typescript/commit/bcae5a95078dfe091d01823cd38cf3c63d28026d)) +* **internal:** update release-please config ([#269](https://github.com/anthropics/anthropic-sdk-typescript/issues/269)) ([80952e6](https://github.com/anthropics/anthropic-sdk-typescript/commit/80952e6ff6aea24ade9ea45dcbe8bb61da385304)) + +## 0.12.4 (2024-01-23) + +Full Changelog: [sdk-v0.12.3...sdk-v0.12.4](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.12.3...sdk-v0.12.4) + +### Chores + +* **internal:** add internal helpers & improve build scripts ([#261](https://github.com/anthropics/anthropic-sdk-typescript/issues/261)) ([4c1504a](https://github.com/anthropics/anthropic-sdk-typescript/commit/4c1504abc7eb8685a8409c4a19dc46d83ea26392)) +* **internal:** minor streaming updates ([#264](https://github.com/anthropics/anthropic-sdk-typescript/issues/264)) ([d4414ff](https://github.com/anthropics/anthropic-sdk-typescript/commit/d4414ffeafbc47769b91c4b2681f130b46d1a7c1)) +* **internal:** update resource client type ([#263](https://github.com/anthropics/anthropic-sdk-typescript/issues/263)) ([bc4f115](https://github.com/anthropics/anthropic-sdk-typescript/commit/bc4f115900cbeba1ff09d6f3cec79e639a8fda5e)) + +## 0.12.3 (2024-01-19) + +Full Changelog: [v0.12.2...v0.12.3](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.12.2...v0.12.3) + +### Bug Fixes + +* allow body type in RequestOptions to be null ([#259](https://github.com/anthropics/anthropic-sdk-typescript/issues/259)) ([2f98de1](https://github.com/anthropics/anthropic-sdk-typescript/commit/2f98de1a42568b1242ce313ba046febb1c6625b5)) + +## 0.12.2 (2024-01-18) + +Full Changelog: [v0.12.1...v0.12.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.12.1...v0.12.2) + +### Bug Fixes + +* **ci:** ignore stainless-app edits to release PR title ([#258](https://github.com/anthropics/anthropic-sdk-typescript/issues/258)) ([87e4ba8](https://github.com/anthropics/anthropic-sdk-typescript/commit/87e4ba82c5b498f881db9590edbfd68c8aba0930)) +* **types:** accept undefined for optional client options ([#257](https://github.com/anthropics/anthropic-sdk-typescript/issues/257)) ([a0e2c4a](https://github.com/anthropics/anthropic-sdk-typescript/commit/a0e2c4a4c4a269ad011d9a6c717c1ded2405711b)) +* use default base url if BASE_URL env var is blank ([#250](https://github.com/anthropics/anthropic-sdk-typescript/issues/250)) ([e38f32f](https://github.com/anthropics/anthropic-sdk-typescript/commit/e38f32f52398f3a082eb745e85179242ecee7663)) + + +### Chores + +* **internal:** debug logging for retries; speculative retry-after-ms support ([#256](https://github.com/anthropics/anthropic-sdk-typescript/issues/256)) ([b4b70fd](https://github.com/anthropics/anthropic-sdk-typescript/commit/b4b70fdbee45dd2a68e46135db45b61381538ae8)) +* **internal:** narrow type into stringifyQuery ([#253](https://github.com/anthropics/anthropic-sdk-typescript/issues/253)) ([3f42e07](https://github.com/anthropics/anthropic-sdk-typescript/commit/3f42e0702ab55cd841c0dc186732028d2fb9f5bb)) + + +### Documentation + +* fix missing async in readme code sample ([#255](https://github.com/anthropics/anthropic-sdk-typescript/issues/255)) ([553fb37](https://github.com/anthropics/anthropic-sdk-typescript/commit/553fb37159a9424a40df1e0f6bb36962ba9f5be8)) +* **readme:** improve api reference ([#254](https://github.com/anthropics/anthropic-sdk-typescript/issues/254)) ([3721927](https://github.com/anthropics/anthropic-sdk-typescript/commit/3721927e895d42c167e2464f30f7f2addb690ec6)) + +## 0.12.1 (2024-01-08) + +Full Changelog: [v0.12.0...v0.12.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.12.0...v0.12.1) + +### Bug Fixes + +* **headers:** always send lowercase headers and strip undefined (BREAKING in rare cases) ([#245](https://github.com/anthropics/anthropic-sdk-typescript/issues/245)) ([7703066](https://github.com/anthropics/anthropic-sdk-typescript/commit/77030661f5612ea5312cb2fecf7987024ffd6ede)) + + +### Chores + +* add .keep files for examples and custom code directories ([#249](https://github.com/anthropics/anthropic-sdk-typescript/issues/249)) ([26b9062](https://github.com/anthropics/anthropic-sdk-typescript/commit/26b9062c7489dd3ee7f620edfea9888f92a859d7)) +* **internal:** improve type signatures ([#247](https://github.com/anthropics/anthropic-sdk-typescript/issues/247)) ([40edd29](https://github.com/anthropics/anthropic-sdk-typescript/commit/40edd299a83f1f60e973080d1fa84f6f42752663)) + +## 0.12.0 (2023-12-21) + +Full Changelog: [v0.11.0...v0.12.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.11.0...v0.12.0) + +### ⚠ BREAKING CHANGES + +* remove anthropic-beta and x-api-key headers from param types ([#243](https://github.com/anthropics/anthropic-sdk-typescript/issues/243)) + +### Bug Fixes + +* remove anthropic-beta and x-api-key headers from param types ([#243](https://github.com/anthropics/anthropic-sdk-typescript/issues/243)) ([60f67ae](https://github.com/anthropics/anthropic-sdk-typescript/commit/60f67ae757cfe8e482327f508a802b30ec3805a0)) + + +### Documentation + +* **readme:** add streaming helper documentation ([#238](https://github.com/anthropics/anthropic-sdk-typescript/issues/238)) ([d74ee71](https://github.com/anthropics/anthropic-sdk-typescript/commit/d74ee7159f366a3f78091eacdcea3049c1e81ec7)) +* **readme:** remove old migration guide ([#236](https://github.com/anthropics/anthropic-sdk-typescript/issues/236)) ([65dff0a](https://github.com/anthropics/anthropic-sdk-typescript/commit/65dff0adb2ec836b81da4f71fb94a316c5f1a942)) +* reformat README.md ([#241](https://github.com/anthropics/anthropic-sdk-typescript/issues/241)) ([eb12705](https://github.com/anthropics/anthropic-sdk-typescript/commit/eb12705a7d975f584ca31f24b99c35318cf6419b)) + + +### Refactors + +* write jest config in typescript ([#239](https://github.com/anthropics/anthropic-sdk-typescript/issues/239)) ([7c87f24](https://github.com/anthropics/anthropic-sdk-typescript/commit/7c87f242d921adfbd2bb21ed5f2c37ada2043f95)) + +## 0.11.0 (2023-12-19) + +Full Changelog: [v0.10.2...v0.11.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.10.2...v0.11.0) + +### Features + +* **api:** add messages endpoint with streaming helpers ([#235](https://github.com/anthropics/anthropic-sdk-typescript/issues/235)) ([12b914f](https://github.com/anthropics/anthropic-sdk-typescript/commit/12b914f46f4aa625ff141ec0b6631400d0994f76)) +* **client:** support reading the base url from an env variable ([#223](https://github.com/anthropics/anthropic-sdk-typescript/issues/223)) ([5bc3600](https://github.com/anthropics/anthropic-sdk-typescript/commit/5bc3600a487e7ed49d944aaf36a43e0d895e907b)) + + +### Chores + +* **ci:** run release workflow once per day ([#232](https://github.com/anthropics/anthropic-sdk-typescript/issues/232)) ([115479f](https://github.com/anthropics/anthropic-sdk-typescript/commit/115479f403838a6d2c81587220029b68a4371c02)) +* **deps:** update dependency ts-jest to v29.1.1 ([#233](https://github.com/anthropics/anthropic-sdk-typescript/issues/233)) ([bec6ab1](https://github.com/anthropics/anthropic-sdk-typescript/commit/bec6ab127d9b20071ab673e8e37087a879467b74)) +* **deps:** update jest ([#234](https://github.com/anthropics/anthropic-sdk-typescript/issues/234)) ([5506174](https://github.com/anthropics/anthropic-sdk-typescript/commit/5506174092d5248354f3d288c84da5ba4749375c)) +* update dependencies ([#231](https://github.com/anthropics/anthropic-sdk-typescript/issues/231)) ([4e34536](https://github.com/anthropics/anthropic-sdk-typescript/commit/4e345362c9002528fb0d95ca739fb8211ab3aec8)) +* update prettier ([#230](https://github.com/anthropics/anthropic-sdk-typescript/issues/230)) ([173603e](https://github.com/anthropics/anthropic-sdk-typescript/commit/173603e14fc5fe87c056553ecec3278059fe58d9)) + + +### Documentation + +* update examples to show claude-2.1 ([#227](https://github.com/anthropics/anthropic-sdk-typescript/issues/227)) ([4b00d84](https://github.com/anthropics/anthropic-sdk-typescript/commit/4b00d84aee56090b5d576fdff9c3a07386475c72)) + + +### Build System + +* specify `packageManager: yarn` ([#229](https://github.com/anthropics/anthropic-sdk-typescript/issues/229)) ([d31dae4](https://github.com/anthropics/anthropic-sdk-typescript/commit/d31dae455d750a61ae3b9a751ab73309b0f87417)) + +## 0.10.2 (2023-11-28) + +Full Changelog: [v0.10.1...v0.10.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.10.1...v0.10.2) + +## 0.10.1 (2023-11-24) + +Full Changelog: [v0.10.0...v0.10.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.10.0...v0.10.1) + +### Chores + +* **internal:** remove file import and conditionally run prepare ([#217](https://github.com/anthropics/anthropic-sdk-typescript/issues/217)) ([8ac5c7a](https://github.com/anthropics/anthropic-sdk-typescript/commit/8ac5c7ae63a7aa4262ad95e0f4d6a509428de794)) + +## 0.10.0 (2023-11-21) + +Full Changelog: [v0.9.1...v0.10.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.9.1...v0.10.0) + +### Features + +* allow installing package directly from github ([#215](https://github.com/anthropics/anthropic-sdk-typescript/issues/215)) ([3de3f1b](https://github.com/anthropics/anthropic-sdk-typescript/commit/3de3f1b8124c110ead3ebedf709f4d5d088230cd)) + + +### Chores + +* **ci:** fix publish-npm ([#213](https://github.com/anthropics/anthropic-sdk-typescript/issues/213)) ([4ab77b7](https://github.com/anthropics/anthropic-sdk-typescript/commit/4ab77b7b323f22019193ba4f0a85fc89af193fbf)) +* **internal:** don't call prepare in dist ([#216](https://github.com/anthropics/anthropic-sdk-typescript/issues/216)) ([b031904](https://github.com/anthropics/anthropic-sdk-typescript/commit/b031904901a17878545cd8ce5c43f03cd364a8fe)) + +## 0.9.1 (2023-11-14) + +Full Changelog: [v0.9.0...v0.9.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.9.0...v0.9.1) + +### Chores + +* **ci:** update release-please config ([#206](https://github.com/anthropics/anthropic-sdk-typescript/issues/206)) ([270b0b7](https://github.com/anthropics/anthropic-sdk-typescript/commit/270b0b725ea559ca4616ec8d8bac5a5cde1de0db)) +* **docs:** fix github links ([#208](https://github.com/anthropics/anthropic-sdk-typescript/issues/208)) ([b316603](https://github.com/anthropics/anthropic-sdk-typescript/commit/b3166033cffe31f5d11793ddd32e595161f1a2e6)) +* **internal:** update APIResource structure ([#211](https://github.com/anthropics/anthropic-sdk-typescript/issues/211)) ([0d6bbce](https://github.com/anthropics/anthropic-sdk-typescript/commit/0d6bbce8ff699b511133ee6bfb72c1244d85eb32)) +* **internal:** update jest config ([#210](https://github.com/anthropics/anthropic-sdk-typescript/issues/210)) ([b0c64eb](https://github.com/anthropics/anthropic-sdk-typescript/commit/b0c64eb9531d417f024567a4c74d9dd64743b889)) +* **internal:** update tsconfig ([#209](https://github.com/anthropics/anthropic-sdk-typescript/issues/209)) ([81b3e0b](https://github.com/anthropics/anthropic-sdk-typescript/commit/81b3e0b59801f737c6f1783e59eef8c1af77b1ad)) + +## 0.9.0 (2023-11-05) + +Full Changelog: [v0.8.1...v0.9.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.8.1...v0.9.0) + +### Features + +* **client:** allow binary returns ([#203](https://github.com/anthropics/anthropic-sdk-typescript/issues/203)) ([5983d5e](https://github.com/anthropics/anthropic-sdk-typescript/commit/5983d5e5de327d6835c7baaea022914a101865a2)) +* **github:** include a devcontainer setup ([#202](https://github.com/anthropics/anthropic-sdk-typescript/issues/202)) ([ea97913](https://github.com/anthropics/anthropic-sdk-typescript/commit/ea97913a04a508da7704758b78a9b96d097be5a2)) + + +### Chores + +* **internal:** update gitignore ([#198](https://github.com/anthropics/anthropic-sdk-typescript/issues/198)) ([3048738](https://github.com/anthropics/anthropic-sdk-typescript/commit/3048738235b9dff9de19aae59ff66487dffb9e8e)) +* small cleanups ([#201](https://github.com/anthropics/anthropic-sdk-typescript/issues/201)) ([9f0a73d](https://github.com/anthropics/anthropic-sdk-typescript/commit/9f0a73d794fc110689ce1c67b68d0a68133adb8d)) + + +### Documentation + +* document customizing fetch ([#204](https://github.com/anthropics/anthropic-sdk-typescript/issues/204)) ([d2df724](https://github.com/anthropics/anthropic-sdk-typescript/commit/d2df7246ec244f2de73d359ffbff3f88acec781d)) +* fix github links ([#200](https://github.com/anthropics/anthropic-sdk-typescript/issues/200)) ([4038acd](https://github.com/anthropics/anthropic-sdk-typescript/commit/4038acd91f4de7c3b20efe7f76523d1e6970f5d9)) +* **readme:** mention version header ([#205](https://github.com/anthropics/anthropic-sdk-typescript/issues/205)) ([a8d8f07](https://github.com/anthropics/anthropic-sdk-typescript/commit/a8d8f07f9d4890195847b6ea86eb311e258e655f)) + +## 0.8.1 (2023-10-25) + +Full Changelog: [v0.8.0...v0.8.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.8.0...v0.8.1) + +### Bug Fixes + +* typo in build script ([#197](https://github.com/anthropics/anthropic-sdk-typescript/issues/197)) ([212e990](https://github.com/anthropics/anthropic-sdk-typescript/commit/212e9903e9b72b3169f450d8ab11ebd384951dba)) + +## 0.8.0 (2023-10-24) + +Full Changelog: [v0.7.0...v0.8.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.7.0...v0.8.0) + +### Features + +* **client:** adjust retry behavior to be exponential backoff ([#192](https://github.com/anthropics/anthropic-sdk-typescript/issues/192)) ([747afe2](https://github.com/anthropics/anthropic-sdk-typescript/commit/747afe2bdbbe3a5489e9b9bc6ed4fcf2a276e40b)) + +## 0.7.0 (2023-10-19) + +Full Changelog: [v0.6.8...v0.7.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.8...v0.7.0) + +### Features + +* handle 204 No Content gracefully ([#190](https://github.com/anthropics/anthropic-sdk-typescript/issues/190)) ([c8a8bec](https://github.com/anthropics/anthropic-sdk-typescript/commit/c8a8becd127e5275333900c3bb76955605ae0f02)) + +## 0.6.8 (2023-10-17) + +Full Changelog: [v0.6.7...v0.6.8](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.7...v0.6.8) + +### Bug Fixes + +* import web-streams-polyfill without overriding globals ([#186](https://github.com/anthropics/anthropic-sdk-typescript/issues/186)) ([e774e17](https://github.com/anthropics/anthropic-sdk-typescript/commit/e774e1774642668e080de5233aeaa33cf5f1b3ae)) + +## 0.6.7 (2023-10-16) + +Full Changelog: [v0.6.6...v0.6.7](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.6...v0.6.7) + +### Bug Fixes + +* improve status code in error messages ([#183](https://github.com/anthropics/anthropic-sdk-typescript/issues/183)) ([7d3bbd4](https://github.com/anthropics/anthropic-sdk-typescript/commit/7d3bbd485c9628bb7c3fb5d1660934198981fcc7)) + + +### Chores + +* add case insensitive get header function ([#178](https://github.com/anthropics/anthropic-sdk-typescript/issues/178)) ([13c398d](https://github.com/anthropics/anthropic-sdk-typescript/commit/13c398dee3ff2eaa3b6046630eda9831580348f4)) +* **internal:** add debug logs for stream responses ([#182](https://github.com/anthropics/anthropic-sdk-typescript/issues/182)) ([a1fa1b7](https://github.com/anthropics/anthropic-sdk-typescript/commit/a1fa1b7766248f3178cb55ac5342409a57c1dbb8)) +* update comment ([#179](https://github.com/anthropics/anthropic-sdk-typescript/issues/179)) ([27a425e](https://github.com/anthropics/anthropic-sdk-typescript/commit/27a425ee64dcdc569b92ac27b501bca0dadf2dea)) + + +### Documentation + +* organisation -> organization (UK to US English) ([#185](https://github.com/anthropics/anthropic-sdk-typescript/issues/185)) ([70257d4](https://github.com/anthropics/anthropic-sdk-typescript/commit/70257d43296f5b448b5649a34b67a3a3a26704ab)) + + +### Refactors + +* **streaming:** change Stream constructor signature ([#174](https://github.com/anthropics/anthropic-sdk-typescript/issues/174)) ([1951824](https://github.com/anthropics/anthropic-sdk-typescript/commit/195182432c41a2a8a4fc425788267e60f36f5820)) +* **test:** refactor authentication tests ([#176](https://github.com/anthropics/anthropic-sdk-typescript/issues/176)) ([f59daad](https://github.com/anthropics/anthropic-sdk-typescript/commit/f59daad06cab4c5df3068ea7f71ecbb20d8af141)) + +## 0.6.6 (2023-10-11) + +Full Changelog: [v0.6.5...v0.6.6](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.5...v0.6.6) + +### Chores + +* update README ([#173](https://github.com/anthropics/anthropic-sdk-typescript/issues/173)) ([5f50c1b](https://github.com/anthropics/anthropic-sdk-typescript/commit/5f50c1b2f160610c89f158a10d83029c356d925a)) + +## 0.6.5 (2023-10-11) + +Full Changelog: [v0.6.4...v0.6.5](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.4...v0.6.5) + +### Features + +* **client:** handle retry-after with a date ([#162](https://github.com/anthropics/anthropic-sdk-typescript/issues/162)) ([31bd609](https://github.com/anthropics/anthropic-sdk-typescript/commit/31bd60905858a6532414665a1368ae9f5fd29370)) +* **client:** retry on 408 Request Timeout ([#151](https://github.com/anthropics/anthropic-sdk-typescript/issues/151)) ([3523ffe](https://github.com/anthropics/anthropic-sdk-typescript/commit/3523ffe5647448d5a5960b1339c9a17374e85dd5)) +* **client:** support importing node or web shims manually ([#157](https://github.com/anthropics/anthropic-sdk-typescript/issues/157)) ([c1237fe](https://github.com/anthropics/anthropic-sdk-typescript/commit/c1237feaea9ca2d244720f2f75e023450a78019f)) +* **errors:** add status code to error message ([#155](https://github.com/anthropics/anthropic-sdk-typescript/issues/155)) ([76cf128](https://github.com/anthropics/anthropic-sdk-typescript/commit/76cf128b68f206038945ac4f54f6f50e8a6a2c1b)) +* **package:** export a root error type ([#160](https://github.com/anthropics/anthropic-sdk-typescript/issues/160)) ([51d8d60](https://github.com/anthropics/anthropic-sdk-typescript/commit/51d8d60b72fbe99dcb4d5a9ec32abbcb21ba1460)) + + +### Bug Fixes + +* **client:** eliminate circular imports, which cause runtime errors in webpack dev bundles ([#170](https://github.com/anthropics/anthropic-sdk-typescript/issues/170)) ([4a86733](https://github.com/anthropics/anthropic-sdk-typescript/commit/4a86733b9d11349fca041683ac9d89685133557d)) +* fix namespace exports regression ([#171](https://github.com/anthropics/anthropic-sdk-typescript/issues/171)) ([0689a91](https://github.com/anthropics/anthropic-sdk-typescript/commit/0689a9196619d968870b7fd2e1a0f037a1aee282)) +* prevent ReferenceError, update compatibility to ES2020 and Node 18+ ([#169](https://github.com/anthropics/anthropic-sdk-typescript/issues/169)) ([9753314](https://github.com/anthropics/anthropic-sdk-typescript/commit/9753314b7e36a270bb4c29f2981c521ec9c17773)) + + +### Chores + +* **internal:** bump lock file ([#159](https://github.com/anthropics/anthropic-sdk-typescript/issues/159)) ([e6030fa](https://github.com/anthropics/anthropic-sdk-typescript/commit/e6030fa915f26569f9c48c478a5e6c01910a6557)) +* **internal:** minor formatting improvement ([#168](https://github.com/anthropics/anthropic-sdk-typescript/issues/168)) ([6447608](https://github.com/anthropics/anthropic-sdk-typescript/commit/644760883802bc2769a916fa477f2c6491f018fd)) +* **internal:** update lock file ([#161](https://github.com/anthropics/anthropic-sdk-typescript/issues/161)) ([370ce3c](https://github.com/anthropics/anthropic-sdk-typescript/commit/370ce3c34b87591071fefc8b53977078603b6ca4)) +* **internal:** update lock file ([#163](https://github.com/anthropics/anthropic-sdk-typescript/issues/163)) ([4a37181](https://github.com/anthropics/anthropic-sdk-typescript/commit/4a37181e0ceada13e3ed61d6df7aa34492dc57a7)) +* **internal:** update lock file ([#164](https://github.com/anthropics/anthropic-sdk-typescript/issues/164)) ([939c155](https://github.com/anthropics/anthropic-sdk-typescript/commit/939c155277e67c19f7b2ff956f7cf0d40d4671cd)) + + +### Documentation + +* **api.md:** add shared models ([#158](https://github.com/anthropics/anthropic-sdk-typescript/issues/158)) ([33e5518](https://github.com/anthropics/anthropic-sdk-typescript/commit/33e5518bdeca83bbbde0e144e444609f569f1477)) +* declare Bun 1.0 officially supported ([#154](https://github.com/anthropics/anthropic-sdk-typescript/issues/154)) ([429d8f4](https://github.com/anthropics/anthropic-sdk-typescript/commit/429d8f44b113a91599f0ebb69128636da82a5050)) +* **readme:** remove incorrect wording in opening ([#156](https://github.com/anthropics/anthropic-sdk-typescript/issues/156)) ([01973fe](https://github.com/anthropics/anthropic-sdk-typescript/commit/01973fe50b13ce2981656f8c13603975e7c43efd)) + +## 0.6.4 (2023-09-08) + +Full Changelog: [v0.6.3...v0.6.4](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.3...v0.6.4) + +### Features + +* **package:** add Bun export map ([#139](https://github.com/anthropics/anthropic-sdk-typescript/issues/139)) ([ba3310d](https://github.com/anthropics/anthropic-sdk-typescript/commit/ba3310d903cd5fda91168266335f4e445e60cad4)) + + +### Bug Fixes + +* **client:** fix TS errors that appear when users Go to Source in VSCode ([#142](https://github.com/anthropics/anthropic-sdk-typescript/issues/142)) ([f7bfbea](https://github.com/anthropics/anthropic-sdk-typescript/commit/f7bfbeaa54d364201bbe5cddf3132875ae2a3ccf)) +* **client:** handle case where the client is instantiated with a undefined baseURL ([#143](https://github.com/anthropics/anthropic-sdk-typescript/issues/143)) ([10e5203](https://github.com/anthropics/anthropic-sdk-typescript/commit/10e52034990d90dcdaf26672ea384545b88ddf35)) +* **client:** use explicit file extensions in _shims imports ([#141](https://github.com/anthropics/anthropic-sdk-typescript/issues/141)) ([10fd687](https://github.com/anthropics/anthropic-sdk-typescript/commit/10fd68742a202c5c0a8b520db190c239dce9b676)) +* fix module not found errors in Vercel edge ([#148](https://github.com/anthropics/anthropic-sdk-typescript/issues/148)) ([72e51a1](https://github.com/anthropics/anthropic-sdk-typescript/commit/72e51a170855281a8d099b00c6fb1e9ccb276212)) +* **readme:** update link to api.md to use the correct branch ([#145](https://github.com/anthropics/anthropic-sdk-typescript/issues/145)) ([5db78ed](https://github.com/anthropics/anthropic-sdk-typescript/commit/5db78edec4826f86b2fc21ee3f470b49a4987029)) + + +### Chores + +* **internal:** export helper from core ([#147](https://github.com/anthropics/anthropic-sdk-typescript/issues/147)) ([7e79de1](https://github.com/anthropics/anthropic-sdk-typescript/commit/7e79de14edeab8110d740e996653e9f9cc2299a4)) + + +### Documentation + +* **readme:** add link to api.md ([#144](https://github.com/anthropics/anthropic-sdk-typescript/issues/144)) ([716c9f0](https://github.com/anthropics/anthropic-sdk-typescript/commit/716c9f0714c0e9c26cb6cdcb007457aff1284cf4)) + +## 0.6.3 (2023-08-28) + +Full Changelog: [v0.6.2...v0.6.3](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.2...v0.6.3) + +### Bug Fixes + +* **types:** improve getNextPage() return type ([#137](https://github.com/anthropics/anthropic-sdk-typescript/issues/137)) ([713d603](https://github.com/anthropics/anthropic-sdk-typescript/commit/713d6032c2c3b3630314a9625a1672147ef19258)) + + +### Chores + +* **ci:** setup workflows to create releases and release PRs ([#135](https://github.com/anthropics/anthropic-sdk-typescript/issues/135)) ([56229d9](https://github.com/anthropics/anthropic-sdk-typescript/commit/56229d964733a8b00625dac4ff138b3ade7e4202)) + +## [0.6.2](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.1...v0.6.2) (2023-08-26) + + +### Bug Fixes + +* **stream:** declare Stream.controller as public ([#132](https://github.com/anthropics/anthropic-sdk-typescript/issues/132)) ([ff33a89](https://github.com/anthropics/anthropic-sdk-typescript/commit/ff33a893747aa708133bab14e97fba34ec776303)) + + +### Refactors + +* remove unnecessary line in constructor ([#131](https://github.com/anthropics/anthropic-sdk-typescript/issues/131)) ([dcdf5e5](https://github.com/anthropics/anthropic-sdk-typescript/commit/dcdf5e5183e99ae91d170ca09cc6da5e5637783f)) + + +### Chores + +* **internal:** add helper method ([#133](https://github.com/anthropics/anthropic-sdk-typescript/issues/133)) ([4c6950a](https://github.com/anthropics/anthropic-sdk-typescript/commit/4c6950a489b818151127aa1a39c239e4fd58a06e)) +* **internal:** export HeadersInit type shim ([#129](https://github.com/anthropics/anthropic-sdk-typescript/issues/129)) ([bcd51bd](https://github.com/anthropics/anthropic-sdk-typescript/commit/bcd51bd12ad0854baf28b59dcada871889032515)) + +## [0.6.1](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.6.0...v0.6.1) (2023-08-23) + + +### Features + +* allow a default timeout to be set for clients ([#113](https://github.com/anthropics/anthropic-sdk-typescript/issues/113)) ([1c5b2e2](https://github.com/anthropics/anthropic-sdk-typescript/commit/1c5b2e29926100a6e4a6176f0943e2c98991175d)) +* **client:** improve compatibility with Bun ([#119](https://github.com/anthropics/anthropic-sdk-typescript/issues/119)) ([fe4f5d5](https://github.com/anthropics/anthropic-sdk-typescript/commit/fe4f5d5e35e35cab2a62388eb595519e9c14635c)) +* **docs:** add documentation to the client constructor ([#118](https://github.com/anthropics/anthropic-sdk-typescript/issues/118)) ([79303f9](https://github.com/anthropics/anthropic-sdk-typescript/commit/79303f9c46a8248abd05fedbedbbed6e735c046d)) +* **types:** export RequestOptions type ([#127](https://github.com/anthropics/anthropic-sdk-typescript/issues/127)) ([9769751](https://github.com/anthropics/anthropic-sdk-typescript/commit/9769751b84853822e3e6596110ecb2c367f07438)) +* **types:** remove footgun with streaming params ([#125](https://github.com/anthropics/anthropic-sdk-typescript/issues/125)) ([3ed67b6](https://github.com/anthropics/anthropic-sdk-typescript/commit/3ed67b670bae14bc586df224aa57dd4dfa6e71f5)) + + +### Bug Fixes + +* **client:** fix TypeError when a request gets retried ([#117](https://github.com/anthropics/anthropic-sdk-typescript/issues/117)) ([0ade979](https://github.com/anthropics/anthropic-sdk-typescript/commit/0ade979a322c07f9a8f5322407b38352fe99b3ce)) +* **core:** fix navigator check for strange environments ([#124](https://github.com/anthropics/anthropic-sdk-typescript/issues/124)) ([c783604](https://github.com/anthropics/anthropic-sdk-typescript/commit/c7836040017d5ce35204c07be0b018e87e827fdb)) +* **types:** add catch-all overload to streaming methods ([#123](https://github.com/anthropics/anthropic-sdk-typescript/issues/123)) ([7c229a2](https://github.com/anthropics/anthropic-sdk-typescript/commit/7c229a24e6751bad22acb8c544113713140120fd)) + + +### Documentation + +* **readme:** fix typo ([#121](https://github.com/anthropics/anthropic-sdk-typescript/issues/121)) ([c5dbc3f](https://github.com/anthropics/anthropic-sdk-typescript/commit/c5dbc3fe89c84a728b6a4d7a4f6eadb228ac5688)) + + +### Chores + +* assign default reviewers to release PRs ([#115](https://github.com/anthropics/anthropic-sdk-typescript/issues/115)) ([1df3965](https://github.com/anthropics/anthropic-sdk-typescript/commit/1df3965a10256d30f8ce2af8d9890a26522117a9)) +* **internal:** add missing eslint-plugin-prettier ([#122](https://github.com/anthropics/anthropic-sdk-typescript/issues/122)) ([66bede0](https://github.com/anthropics/anthropic-sdk-typescript/commit/66bede0ae3ed7b5baa002bbb0c87b4156306f982)) +* **internal:** fix error happening in CloudFlare pages ([#116](https://github.com/anthropics/anthropic-sdk-typescript/issues/116)) ([b0dc7b3](https://github.com/anthropics/anthropic-sdk-typescript/commit/b0dc7b3b14520ce1f66c2b9d6a0f5aae4028985b)) +* **internal:** minor reformatting of code ([#120](https://github.com/anthropics/anthropic-sdk-typescript/issues/120)) ([4bcaf9e](https://github.com/anthropics/anthropic-sdk-typescript/commit/4bcaf9e30a312284cb22c2084e8242ad7d181ba8)) + +## [0.6.0](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.10...v0.6.0) (2023-08-12) + + +### Features + +* **client:** add support for accessing the raw response object ([#105](https://github.com/anthropics/anthropic-sdk-typescript/issues/105)) ([c86b059](https://github.com/anthropics/anthropic-sdk-typescript/commit/c86b0593a630f3adafc5c329019ea7028b6a41cd)) +* **client:** detect browser usage ([#101](https://github.com/anthropics/anthropic-sdk-typescript/issues/101)) ([f4cae3f](https://github.com/anthropics/anthropic-sdk-typescript/commit/f4cae3f63c2e65e087a7bf27dac1eeb8200e0a36)) +* **types:** improve streaming params types ([#102](https://github.com/anthropics/anthropic-sdk-typescript/issues/102)) ([cdf808c](https://github.com/anthropics/anthropic-sdk-typescript/commit/cdf808ca2a18cd744a5d1840e5e2adb3015e8d1d)) + + +### Documentation + +* **readme:** minor updates ([#107](https://github.com/anthropics/anthropic-sdk-typescript/issues/107)) ([406fd97](https://github.com/anthropics/anthropic-sdk-typescript/commit/406fd97d4cee0dd363ad548c9a251f78091a70e3)) +* **readme:** remove beta status + document versioning policy ([#100](https://github.com/anthropics/anthropic-sdk-typescript/issues/100)) ([e9ef3d2](https://github.com/anthropics/anthropic-sdk-typescript/commit/e9ef3d21a25e355d8bf94b7a941ad82ec5eafec8)) + + +### Chores + +* **docs:** remove trailing spaces ([#108](https://github.com/anthropics/anthropic-sdk-typescript/issues/108)) ([4ba2c6f](https://github.com/anthropics/anthropic-sdk-typescript/commit/4ba2c6f181521ed9a60ed45c35d2276129cd7a0b)) +* **internal:** conditionally include bin during build output ([#109](https://github.com/anthropics/anthropic-sdk-typescript/issues/109)) ([58ac305](https://github.com/anthropics/anthropic-sdk-typescript/commit/58ac305d752d6b5c378f91b988ddfb97231c003c)) +* **internal:** fix deno build ([#98](https://github.com/anthropics/anthropic-sdk-typescript/issues/98)) ([f011e04](https://github.com/anthropics/anthropic-sdk-typescript/commit/f011e041f2f9cabb12951013825c0f0a2a569053)) +* **internal:** remove deno build ([#103](https://github.com/anthropics/anthropic-sdk-typescript/issues/103)) ([9af1527](https://github.com/anthropics/anthropic-sdk-typescript/commit/9af152707a9bcf3027afc64f027566be25da2eb9)) + + +### Refactors + +* **client:** remove Stream.toReadableStream() ([#110](https://github.com/anthropics/anthropic-sdk-typescript/issues/110)) ([c370412](https://github.com/anthropics/anthropic-sdk-typescript/commit/c37041285ed9cccf6d980a953e14ffd4006a8acc)) + +## [0.5.10](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.9...v0.5.10) (2023-08-01) + + +### Refactors + +* create build for deno.land ([#93](https://github.com/anthropics/anthropic-sdk-typescript/issues/93)) ([2ea741a](https://github.com/anthropics/anthropic-sdk-typescript/commit/2ea741a4d4a3123b2eaafb87b73d7884c69ae23b)) + + +### Documentation + +* **readme:** add token counting reference ([#94](https://github.com/anthropics/anthropic-sdk-typescript/issues/94)) ([2c6a699](https://github.com/anthropics/anthropic-sdk-typescript/commit/2c6a699d499a3468fc4312a6b6c9493ffd1806a2)) + + +### Chores + +* **internal:** allow the build script to be run without yarn installed ([#91](https://github.com/anthropics/anthropic-sdk-typescript/issues/91)) ([9bd2b28](https://github.com/anthropics/anthropic-sdk-typescript/commit/9bd2b2871ca8a3b5f2466a904153d5c234094372)) +* **internal:** fix deno build ([#96](https://github.com/anthropics/anthropic-sdk-typescript/issues/96)) ([3fdab4e](https://github.com/anthropics/anthropic-sdk-typescript/commit/3fdab4e33b4c8668d17b8cddabbb09a22adf4124)) + +## [0.5.9](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.8...v0.5.9) (2023-07-29) + + +### Bug Fixes + +* **client:** handle undefined process in more places ([#87](https://github.com/anthropics/anthropic-sdk-typescript/issues/87)) ([d950c25](https://github.com/anthropics/anthropic-sdk-typescript/commit/d950c25469a6c6b0dd3cfecd282db078826366ba)) +* **examples:** avoid swallowing errors in example scripts ([#82](https://github.com/anthropics/anthropic-sdk-typescript/issues/82)) ([b27cfe9](https://github.com/anthropics/anthropic-sdk-typescript/commit/b27cfe9323bce983bb49f57dece98f1d9e507034)) +* fix undefined message in errors ([#86](https://github.com/anthropics/anthropic-sdk-typescript/issues/86)) ([5714a14](https://github.com/anthropics/anthropic-sdk-typescript/commit/5714a14d9af282a3d308b8694e6e03309d4b5642)) + + +### Chores + +* **internal:** minor refactoring of client instantiation ([#88](https://github.com/anthropics/anthropic-sdk-typescript/issues/88)) ([2c53e1c](https://github.com/anthropics/anthropic-sdk-typescript/commit/2c53e1ca28a444a48e5f1041d9eb9077608b3fc7)) + + +### Refactors + +* use destructuring arguments in client constructor and respect false values ([#89](https://github.com/anthropics/anthropic-sdk-typescript/issues/89)) ([8d4c686](https://github.com/anthropics/anthropic-sdk-typescript/commit/8d4c6860273bbd16027023700d521a5e48db76f7)) + +## [0.5.8](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.7...v0.5.8) (2023-07-22) + + +### Features + +* **streaming:** make requests immediately throw an error if an aborted signal is passed in ([#79](https://github.com/anthropics/anthropic-sdk-typescript/issues/79)) ([5c86597](https://github.com/anthropics/anthropic-sdk-typescript/commit/5c865979a21d18db87df43a9bdb27b701815f4bb)) + +## [0.5.7](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.6...v0.5.7) (2023-07-19) + + +### Features + +* add flexible enum to model param ([#73](https://github.com/anthropics/anthropic-sdk-typescript/issues/73)) ([a6bbcad](https://github.com/anthropics/anthropic-sdk-typescript/commit/a6bbcadb447060f3c2e60881d31d7b7fb7a50512)) +* **client:** export ClientOptions interface ([#75](https://github.com/anthropics/anthropic-sdk-typescript/issues/75)) ([0315ce1](https://github.com/anthropics/anthropic-sdk-typescript/commit/0315ce170db463ad900384ab7e4f62885cb471a2)) +* **deps:** remove unneeded qs dep ([#72](https://github.com/anthropics/anthropic-sdk-typescript/issues/72)) ([0aea5a6](https://github.com/anthropics/anthropic-sdk-typescript/commit/0aea5a6f4852f351ecbe9f46d6857a6fafc7e864)) + + +### Bug Fixes + +* **client:** fix errors with file uploads in the browser ([#76](https://github.com/anthropics/anthropic-sdk-typescript/issues/76)) ([ac48fa7](https://github.com/anthropics/anthropic-sdk-typescript/commit/ac48fa72bb764b2abed95f200bc658f65725e2b3)) +* fix error in environments without `TextEncoder` ([#70](https://github.com/anthropics/anthropic-sdk-typescript/issues/70)) ([5b78e05](https://github.com/anthropics/anthropic-sdk-typescript/commit/5b78e0586fd351258ccc05c8ba89a2ba66681b0d)) +* fix export map order ([#74](https://github.com/anthropics/anthropic-sdk-typescript/issues/74)) ([51e70cb](https://github.com/anthropics/anthropic-sdk-typescript/commit/51e70cb9b55128d4de1b0597fad475d0f4bc836c)) + +## [0.5.6](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.5...v0.5.6) (2023-07-15) + + +### Bug Fixes + +* fix errors with "named" client export in CJS ([#67](https://github.com/anthropics/anthropic-sdk-typescript/issues/67)) ([08ef69c](https://github.com/anthropics/anthropic-sdk-typescript/commit/08ef69cca87bbdf82440d163611f45e04e894234)) + +## [0.5.5](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.4...v0.5.5) (2023-07-13) + + +### Features + +* **client:** add support for passing a `signal` request option ([#55](https://github.com/anthropics/anthropic-sdk-typescript/issues/55)) ([09604e9](https://github.com/anthropics/anthropic-sdk-typescript/commit/09604e9990e13dd703f4bcfd0a241b8ec2ebbc71)) + + +### Bug Fixes + +* **streaming:** do not abort successfully completed streams ([#53](https://github.com/anthropics/anthropic-sdk-typescript/issues/53)) ([950dd49](https://github.com/anthropics/anthropic-sdk-typescript/commit/950dd4930429010d89ae31eef9ebb193be9517ad)) + + +### Documentation + +* **examples:** bump model to claude-2 in example scripts ([#57](https://github.com/anthropics/anthropic-sdk-typescript/issues/57)) ([f85c05d](https://github.com/anthropics/anthropic-sdk-typescript/commit/f85c05d49a7a9db1deb8eed9124934da763b721b)) +* **readme:** improvements to formatting code snippets ([#58](https://github.com/anthropics/anthropic-sdk-typescript/issues/58)) ([67bae64](https://github.com/anthropics/anthropic-sdk-typescript/commit/67bae64d5388e7e71ea3a891b3579c072b743f38)) + + +### Chores + +* **internal:** add helper function for b64 ([#62](https://github.com/anthropics/anthropic-sdk-typescript/issues/62)) ([04e303c](https://github.com/anthropics/anthropic-sdk-typescript/commit/04e303c5cc7b14a862b81379d547b3dc6e908720)) +* **internal:** let `toFile` helper accept promises to objects with name/type properties ([#63](https://github.com/anthropics/anthropic-sdk-typescript/issues/63)) ([93f9af2](https://github.com/anthropics/anthropic-sdk-typescript/commit/93f9af29a91cfced533d309d1816c58bc2efa355)) +* **internal:** remove unneeded type var usage ([#59](https://github.com/anthropics/anthropic-sdk-typescript/issues/59)) ([42fc4a9](https://github.com/anthropics/anthropic-sdk-typescript/commit/42fc4a90cc267f077b26d2bafebe487a74cae067)) + +## [0.5.4](https://github.com/anthropics/anthropic-sdk-typescript/compare/v0.5.3...v0.5.4) (2023-07-11) + + +### Features + +* **api:** reference claude-2 in examples ([#50](https://github.com/anthropics/anthropic-sdk-typescript/issues/50)) ([7c53ded](https://github.com/anthropics/anthropic-sdk-typescript/commit/7c53ded6b7f5f3efec0df295181f18469c37e09d)) +* **client:** support passing a custom `fetch` function ([#46](https://github.com/anthropics/anthropic-sdk-typescript/issues/46)) ([7d54366](https://github.com/anthropics/anthropic-sdk-typescript/commit/7d54366fcefa0267e831a0cca4d10c9a146d9f6c)) + + +### Bug Fixes + +* **client:** properly handle multi-byte characters in Content-Length ([#47](https://github.com/anthropics/anthropic-sdk-typescript/issues/47)) ([8dfff26](https://github.com/anthropics/anthropic-sdk-typescript/commit/8dfff2691a3ebd5721462c055d8da638ac77e571)) + + +### Refactors + +* **streaming:** make response body streaming polyfill more spec-compliant ([#44](https://github.com/anthropics/anthropic-sdk-typescript/issues/44)) ([047d328](https://github.com/anthropics/anthropic-sdk-typescript/commit/047d328cb0968fb1926e41326d35b595ba3fb3bc)) diff --git a/vendor/sdk/LICENSE b/vendor/sdk/LICENSE new file mode 100644 index 0000000..ac71a66 --- /dev/null +++ b/vendor/sdk/LICENSE @@ -0,0 +1,8 @@ +Copyright 2023 Anthropic, PBC. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/vendor/sdk/README.md b/vendor/sdk/README.md new file mode 100644 index 0000000..fac24b9 --- /dev/null +++ b/vendor/sdk/README.md @@ -0,0 +1,536 @@ +> [!IMPORTANT] +> We're actively working on a new alpha version that migrates from `node-fetch` to builtin fetch. +> +> Please try it out and let us know if you run into any issues! +> https://github.com/anthropics/anthropic-sdk-typescript/issues/645 + +# Anthropic TypeScript API Library + +[![NPM version](https://img.shields.io/npm/v/@anthropic-ai/sdk.svg)](https://npmjs.org/package/@anthropic-ai/sdk) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/@anthropic-ai/sdk) + +This library provides convenient access to the Anthropic REST API from server-side TypeScript or JavaScript. + +The REST API documentation can be found on [docs.anthropic.com](https://docs.anthropic.com/claude/reference/). The full API of this library can be found in [api.md](api.md). + +## Installation + +```sh +npm install @anthropic-ai/sdk +``` + +## Usage + +The full API of this library can be found in [api.md](api.md). + + +```js +import Anthropic from '@anthropic-ai/sdk'; + +const client = new Anthropic({ + apiKey: process.env['ANTHROPIC_API_KEY'], // This is the default and can be omitted +}); + +async function main() { + const message = await client.messages.create({ + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }); + + console.log(message.content); +} + +main(); +``` + +## Streaming responses + +We provide support for streaming responses using Server Sent Events (SSE). + +```ts +import Anthropic from '@anthropic-ai/sdk'; + +const client = new Anthropic(); + +const stream = await client.messages.create({ + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + stream: true, +}); +for await (const messageStreamEvent of stream) { + console.log(messageStreamEvent.type); +} +``` + +If you need to cancel a stream, you can `break` from the loop +or call `stream.controller.abort()`. + +### Request & Response types + +This library includes TypeScript definitions for all request params and response fields. You may import and use them like so: + + +```ts +import Anthropic from '@anthropic-ai/sdk'; + +const client = new Anthropic({ + apiKey: process.env['ANTHROPIC_API_KEY'], // This is the default and can be omitted +}); + +async function main() { + const params: Anthropic.MessageCreateParams = { + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }; + const message: Anthropic.Message = await client.messages.create(params); +} + +main(); +``` + +Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors. + +## Counting Tokens + +You can see the exact usage for a given request through the `usage` response property, e.g. + +```ts +const message = await client.messages.create(...) +console.log(message.usage) +// { input_tokens: 25, output_tokens: 13 } +``` + +## Streaming Helpers + +This library provides several conveniences for streaming messages, for example: + +```ts +import Anthropic from '@anthropic-ai/sdk'; + +const anthropic = new Anthropic(); + +async function main() { + const stream = anthropic.messages + .stream({ + model: 'claude-3-5-sonnet-latest', + max_tokens: 1024, + messages: [ + { + role: 'user', + content: 'Say hello there!', + }, + ], + }) + .on('text', (text) => { + console.log(text); + }); + + const message = await stream.finalMessage(); + console.log(message); +} + +main(); +``` + +Streaming with `client.messages.stream(...)` exposes [various helpers for your convenience](helpers.md) including event handlers and accumulation. + +Alternatively, you can use `client.messages.create({ ..., stream: true })` which only returns an async iterable of the events in the stream and thus uses less memory (it does not build up a final message object for you). + +## Message Batches + +This SDK provides beta support for the [Message Batches API](https://docs.anthropic.com/en/docs/build-with-claude/message-batches) under the `client.beta.messages.batches` namespace. + +### Creating a batch + +Message Batches takes an array of requests, where each object has a `custom_id` identifier, and the exact same request `params` as the standard Messages API: + +```ts +await anthropic.beta.messages.batches.create({ + requests: [ + { + custom_id: 'my-first-request', + params: { + model: 'claude-3-5-sonnet-latest', + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, world' }], + }, + }, + { + custom_id: 'my-second-request', + params: { + model: 'claude-3-5-sonnet-latest', + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hi again, friend' }], + }, + }, + ], +}); +``` + + +### Getting results from a batch + +Once a Message Batch has been processed, indicated by `.processing_status === 'ended'`, you can access the results with `.batches.results()` + +```ts +const results = await anthropic.beta.messages.batches.results(batch_id); +for await (const entry of results) { + if (entry.result.type === 'succeeded') { + console.log(entry.result.message.content) + } +} +``` + +## Tool use beta + +This SDK provides beta support for tool use, aka function calling. More details can be found in [the documentation](https://docs.anthropic.com/claude/docs/tool-use). + +## AWS Bedrock + +We provide support for the [Anthropic Bedrock API](https://aws.amazon.com/bedrock/claude/) through a [separate package](https://github.com/anthropics/anthropic-sdk-typescript/tree/main/packages/bedrock-sdk). + +## Handling errors + +When the library is unable to connect to the API, +or if the API returns a non-success status code (i.e., 4xx or 5xx response), +a subclass of `APIError` will be thrown: + + +```ts +async function main() { + const message = await client.messages + .create({ + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }) + .catch(async (err) => { + if (err instanceof Anthropic.APIError) { + console.log(err.status); // 400 + console.log(err.name); // BadRequestError + console.log(err.headers); // {server: 'nginx', ...} + } else { + throw err; + } + }); +} + +main(); +``` + +Error codes are as followed: + +| Status Code | Error Type | +| ----------- | -------------------------- | +| 400 | `BadRequestError` | +| 401 | `AuthenticationError` | +| 403 | `PermissionDeniedError` | +| 404 | `NotFoundError` | +| 422 | `UnprocessableEntityError` | +| 429 | `RateLimitError` | +| >=500 | `InternalServerError` | +| N/A | `APIConnectionError` | + +## Request IDs + +> For more information on debugging requests, see [these docs](https://docs.anthropic.com/en/api/errors#request-id) + +All object responses in the SDK provide a `_request_id` property which is added from the `request-id` response header so that you can quickly log failing requests and report them back to Anthropic. + +```ts +const message = await client.messages.create({ max_tokens: 1024, messages: [{ role: 'user', content: 'Hello, Claude' }], model: 'claude-3-5-sonnet-latest' }); +console.log(message._request_id) // req_018EeWyXxfu5pfWkrYcMdjWG +``` + + +### Retries + +Certain errors will be automatically retried 2 times by default, with a short exponential backoff. +Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict, +429 Rate Limit, and >=500 Internal errors will all be retried by default. + +You can use the `maxRetries` option to configure or disable this: + + +```js +// Configure the default for all requests: +const client = new Anthropic({ + maxRetries: 0, // default is 2 +}); + +// Or, configure per-request: +await client.messages.create({ max_tokens: 1024, messages: [{ role: 'user', content: 'Hello, Claude' }], model: 'claude-3-5-sonnet-latest' }, { + maxRetries: 5, +}); +``` + +### Timeouts + +Requests time out after 10 minutes by default. You can configure this with a `timeout` option: + + +```ts +// Configure the default for all requests: +const client = new Anthropic({ + timeout: 20 * 1000, // 20 seconds (default is 10 minutes) +}); + +// Override per-request: +await client.messages.create({ max_tokens: 1024, messages: [{ role: 'user', content: 'Hello, Claude' }], model: 'claude-3-5-sonnet-latest' }, { + timeout: 5 * 1000, +}); +``` + +On timeout, an `APIConnectionTimeoutError` is thrown. + +Note that requests which time out will be [retried twice by default](#retries). + +## Auto-pagination + +List methods in the Anthropic API are paginated. +You can use the `for await … of` syntax to iterate through items across all pages: + +```ts +async function fetchAllBetaMessagesBatches(params) { + const allBetaMessagesBatches = []; + // Automatically fetches more pages as needed. + for await (const betaMessageBatch of client.beta.messages.batches.list({ limit: 20 })) { + allBetaMessagesBatches.push(betaMessageBatch); + } + return allBetaMessagesBatches; +} +``` + +Alternatively, you can request a single page at a time: + +```ts +let page = await client.beta.messages.batches.list({ limit: 20 }); +for (const betaMessageBatch of page.data) { + console.log(betaMessageBatch); +} + +// Convenience methods are provided for manually paginating: +while (page.hasNextPage()) { + page = await page.getNextPage(); + // ... +} +``` + +## Default Headers + +We automatically send the `anthropic-version` header set to `2023-06-01`. + +If you need to, you can override it by setting default headers on a per-request basis. + +Be aware that doing so may result in incorrect types and other unexpected or undefined behavior in the SDK. + +```ts +import Anthropic from '@anthropic-ai/sdk'; + +const client = new Anthropic(); + +const message = await client.messages.create( + { + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }, + { headers: { 'anthropic-version': 'My-Custom-Value' } }, +); +``` + +## Advanced Usage + +### Accessing raw Response data (e.g., headers) + +The "raw" `Response` returned by `fetch()` can be accessed through the `.asResponse()` method on the `APIPromise` type that all methods return. + +You can also use the `.withResponse()` method to get the raw `Response` along with the parsed data. + + +```ts +const client = new Anthropic(); + +const response = await client.messages + .create({ + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }) + .asResponse(); +console.log(response.headers.get('X-My-Header')); +console.log(response.statusText); // access the underlying Response object + +const { data: message, response: raw } = await client.messages + .create({ + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }) + .withResponse(); +console.log(raw.headers.get('X-My-Header')); +console.log(message.content); +``` + +### Making custom/undocumented requests + +This library is typed for convenient access to the documented API. If you need to access undocumented +endpoints, params, or response properties, the library can still be used. + +#### Undocumented endpoints + +To make requests to undocumented endpoints, you can use `client.get`, `client.post`, and other HTTP verbs. +Options on the client, such as retries, will be respected when making these requests. + +```ts +await client.post('/some/path', { + body: { some_prop: 'foo' }, + query: { some_query_arg: 'bar' }, +}); +``` + +#### Undocumented request params + +To make requests using undocumented parameters, you may use `// @ts-expect-error` on the undocumented +parameter. This library doesn't validate at runtime that the request matches the type, so any extra values you +send will be sent as-is. + +```ts +client.foo.create({ + foo: 'my_param', + bar: 12, + // @ts-expect-error baz is not yet public + baz: 'undocumented option', +}); +``` + +For requests with the `GET` verb, any extra params will be in the query, all other requests will send the +extra param in the body. + +If you want to explicitly send an extra argument, you can do so with the `query`, `body`, and `headers` request +options. + +#### Undocumented response properties + +To access undocumented response properties, you may access the response object with `// @ts-expect-error` on +the response object, or cast the response object to the requisite type. Like the request params, we do not +validate or strip extra properties from the response from the API. + +### Customizing the fetch client + +By default, this library uses `node-fetch` in Node, and expects a global `fetch` function in other environments. + +If you would prefer to use a global, web-standards-compliant `fetch` function even in a Node environment, +(for example, if you are running Node with `--experimental-fetch` or using NextJS which polyfills with `undici`), +add the following import before your first import `from "Anthropic"`: + +```ts +// Tell TypeScript and the package to use the global web fetch instead of node-fetch. +// Note, despite the name, this does not add any polyfills, but expects them to be provided if needed. +import '@anthropic-ai/sdk/shims/web'; +import Anthropic from '@anthropic-ai/sdk'; +``` + +To do the inverse, add `import "@anthropic-ai/sdk/shims/node"` (which does import polyfills). +This can also be useful if you are getting the wrong TypeScript types for `Response` ([more details](https://github.com/anthropics/anthropic-sdk-typescript/tree/main/src/_shims#readme)). + +### Logging and middleware + +You may also provide a custom `fetch` function when instantiating the client, +which can be used to inspect or alter the `Request` or `Response` before/after each request: + +```ts +import { fetch } from 'undici'; // as one example +import Anthropic from '@anthropic-ai/sdk'; + +const client = new Anthropic({ + fetch: async (url: RequestInfo, init?: RequestInit): Promise => { + console.log('About to make a request', url, init); + const response = await fetch(url, init); + console.log('Got response', response); + return response; + }, +}); +``` + +Note that if given a `DEBUG=true` environment variable, this library will log all requests and responses automatically. +This is intended for debugging purposes only and may change in the future without notice. + +### Configuring an HTTP(S) Agent (e.g., for proxies) + +By default, this library uses a stable agent for all http/https requests to reuse TCP connections, eliminating many TCP & TLS handshakes and shaving around 100ms off most requests. + +If you would like to disable or customize this behavior, for example to use the API behind a proxy, you can pass an `httpAgent` which is used for all requests (be they http or https), for example: + + +```ts +import http from 'http'; +import { HttpsProxyAgent } from 'https-proxy-agent'; + +// Configure the default for all requests: +const client = new Anthropic({ + httpAgent: new HttpsProxyAgent(process.env.PROXY_URL), +}); + +// Override per-request: +await client.messages.create( + { + max_tokens: 1024, + messages: [{ role: 'user', content: 'Hello, Claude' }], + model: 'claude-3-5-sonnet-latest', + }, + { + httpAgent: new http.Agent({ keepAlive: false }), + }, +); +``` + +## Semantic versioning + +This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions: + +1. Changes that only affect static types, without breaking runtime behavior. +2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_ +3. Changes that we do not expect to impact the vast majority of users in practice. + +We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience. + +We are keen for your feedback; please open an [issue](https://www.github.com/anthropics/anthropic-sdk-typescript/issues) with questions, bugs, or suggestions. + +## Requirements + +TypeScript >= 4.5 is supported. + +The following runtimes are supported: + +- Node.js 18 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions. +- Deno v1.28.0 or higher. +- Bun 1.0 or later. +- Cloudflare Workers. +- Vercel Edge Runtime. +- Jest 28 or greater with the `"node"` environment (`"jsdom"` is not supported at this time). +- Nitro v2.6 or greater. +- Web browsers: disabled by default to avoid exposing your secret API credentials (see our help center for [best practices](https://support.anthropic.com/en/articles/9767949-api-key-best-practices-keeping-your-keys-safe-and-secure)). Enable browser support by explicitly setting `dangerouslyAllowBrowser` to `true`. + +
    + More explanation +

    Why is this dangerous?

    + Enabling the dangerouslyAllowBrowser option can be dangerous because it exposes your secret API credentials in the client-side code. Web browsers are inherently less secure than server environments, + any user with access to the browser can potentially inspect, extract, and misuse these credentials. This could lead to unauthorized access using your credentials and potentially compromise sensitive data or functionality. +

    When might this not be dangerous?

    + In certain scenarios where enabling browser support might not pose significant risks: +
      +
    • Internal Tools: If the application is used solely within a controlled internal environment where the users are trusted, the risk of credential exposure can be mitigated.
    • +
    • Development or debugging purpose: Enabling this feature temporarily might be acceptable, provided the credentials are short-lived, aren't also used in production environments, or are frequently rotated.
    • +
    +
    + +Note that React Native is not supported at this time. + +If you are interested in other runtime environments, please open or upvote an issue on GitHub. + +## Contributing + +See [the contributing documentation](./CONTRIBUTING.md). diff --git a/vendor/sdk/_shims/MultipartBody.d.ts b/vendor/sdk/_shims/MultipartBody.d.ts new file mode 100644 index 0000000..d9118c8 --- /dev/null +++ b/vendor/sdk/_shims/MultipartBody.d.ts @@ -0,0 +1,9 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export declare class MultipartBody { + body: any; + constructor(body: any); + get [Symbol.toStringTag](): string; +} +//# sourceMappingURL=MultipartBody.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/MultipartBody.d.ts.map b/vendor/sdk/_shims/MultipartBody.d.ts.map new file mode 100644 index 0000000..fc6a8b6 --- /dev/null +++ b/vendor/sdk/_shims/MultipartBody.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"MultipartBody.d.ts","sourceRoot":"","sources":["../src/_shims/MultipartBody.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,aAAa;IACL,IAAI,EAAE,GAAG;gBAAT,IAAI,EAAE,GAAG;IAC5B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;CACF"} \ No newline at end of file diff --git a/vendor/sdk/_shims/MultipartBody.js b/vendor/sdk/_shims/MultipartBody.js new file mode 100644 index 0000000..67efb46 --- /dev/null +++ b/vendor/sdk/_shims/MultipartBody.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MultipartBody = void 0; +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +class MultipartBody { + constructor(body) { + this.body = body; + } + get [Symbol.toStringTag]() { + return 'MultipartBody'; + } +} +exports.MultipartBody = MultipartBody; +//# sourceMappingURL=MultipartBody.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/MultipartBody.js.map b/vendor/sdk/_shims/MultipartBody.js.map new file mode 100644 index 0000000..adad49f --- /dev/null +++ b/vendor/sdk/_shims/MultipartBody.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MultipartBody.js","sourceRoot":"","sources":["../src/_shims/MultipartBody.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,aAAa;IACxB,YAAmB,IAAS;QAAT,SAAI,GAAJ,IAAI,CAAK;IAAG,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AALD,sCAKC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/MultipartBody.mjs b/vendor/sdk/_shims/MultipartBody.mjs new file mode 100644 index 0000000..68a8280 --- /dev/null +++ b/vendor/sdk/_shims/MultipartBody.mjs @@ -0,0 +1,12 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export class MultipartBody { + constructor(body) { + this.body = body; + } + get [Symbol.toStringTag]() { + return 'MultipartBody'; + } +} +//# sourceMappingURL=MultipartBody.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/MultipartBody.mjs.map b/vendor/sdk/_shims/MultipartBody.mjs.map new file mode 100644 index 0000000..6aca413 --- /dev/null +++ b/vendor/sdk/_shims/MultipartBody.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"MultipartBody.mjs","sourceRoot":"","sources":["../src/_shims/MultipartBody.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,aAAa;IACxB,YAAmB,IAAS;QAAT,SAAI,GAAJ,IAAI,CAAK;IAAG,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,eAAe,CAAC;IACzB,CAAC;CACF"} \ No newline at end of file diff --git a/vendor/sdk/_shims/README.md b/vendor/sdk/_shims/README.md new file mode 100644 index 0000000..28efc3b --- /dev/null +++ b/vendor/sdk/_shims/README.md @@ -0,0 +1,46 @@ +# 👋 Wondering what everything in here does? + +`@anthropic-ai/sdk` supports a wide variety of runtime environments like Node.js, Deno, Bun, browsers, and various +edge runtimes, as well as both CommonJS (CJS) and EcmaScript Modules (ESM). + +To do this, `@anthropic-ai/sdk` provides shims for either using `node-fetch` when in Node (because `fetch` is still experimental there) or the global `fetch` API built into the environment when not in Node. + +It uses [conditional exports](https://nodejs.org/api/packages.html#conditional-exports) to +automatically select the correct shims for each environment. However, conditional exports are a fairly new +feature and not supported everywhere. For instance, the TypeScript `"moduleResolution": "node"` + +setting doesn't consult the `exports` map, compared to `"moduleResolution": "nodeNext"`, which does. +Unfortunately that's still the default setting, and it can result in errors like +getting the wrong raw `Response` type from `.asResponse()`, for example. + +The user can work around these issues by manually importing one of: + +- `import '@anthropic-ai/sdk/shims/node'` +- `import '@anthropic-ai/sdk/shims/web'` + +All of the code here in `_shims` handles selecting the automatic default shims or manual overrides. + +### How it works - Runtime + +Runtime shims get installed by calling `setShims` exported by `@anthropic-ai/sdk/_shims/registry`. + +Manually importing `@anthropic-ai/sdk/shims/node` or `@anthropic-ai/sdk/shims/web`, calls `setShims` with the respective runtime shims. + +All client code imports shims from `@anthropic-ai/sdk/_shims/index`, which: + +- checks if shims have been set manually +- if not, calls `setShims` with the shims from `@anthropic-ai/sdk/_shims/auto/runtime` +- re-exports the installed shims from `@anthropic-ai/sdk/_shims/registry`. + +`@anthropic-ai/sdk/_shims/auto/runtime` exports web runtime shims. +If the `node` export condition is set, the export map replaces it with `@anthropic-ai/sdk/_shims/auto/runtime-node`. + +### How it works - Type time + +All client code imports shim types from `@anthropic-ai/sdk/_shims/index`, which selects the manual types from `@anthropic-ai/sdk/_shims/manual-types` if they have been declared, otherwise it exports the auto types from `@anthropic-ai/sdk/_shims/auto/types`. + +`@anthropic-ai/sdk/_shims/manual-types` exports an empty namespace. +Manually importing `@anthropic-ai/sdk/shims/node` or `@anthropic-ai/sdk/shims/web` merges declarations into this empty namespace, so they get picked up by `@anthropic-ai/sdk/_shims/index`. + +`@anthropic-ai/sdk/_shims/auto/types` exports web type definitions. +If the `node` export condition is set, the export map replaces it with `@anthropic-ai/sdk/_shims/auto/types-node`, though TS only picks this up if `"moduleResolution": "nodenext"` or `"moduleResolution": "bundler"`. diff --git a/vendor/sdk/_shims/auto/runtime-bun.d.ts b/vendor/sdk/_shims/auto/runtime-bun.d.ts new file mode 100644 index 0000000..1baecb8 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-bun.d.ts @@ -0,0 +1,5 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../bun-runtime.js"; +//# sourceMappingURL=runtime-bun.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-bun.d.ts.map b/vendor/sdk/_shims/auto/runtime-bun.d.ts.map new file mode 100644 index 0000000..8d57eee --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-bun.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-bun.d.ts","sourceRoot":"","sources":["../../src/_shims/auto/runtime-bun.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,gBAAgB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-bun.js b/vendor/sdk/_shims/auto/runtime-bun.js new file mode 100644 index 0000000..312c535 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-bun.js @@ -0,0 +1,21 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +__exportStar(require("../bun-runtime.js"), exports); +//# sourceMappingURL=runtime-bun.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-bun.js.map b/vendor/sdk/_shims/auto/runtime-bun.js.map new file mode 100644 index 0000000..c78786e --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-bun.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-bun.js","sourceRoot":"","sources":["../../src/_shims/auto/runtime-bun.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,oDAA+B"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-bun.mjs b/vendor/sdk/_shims/auto/runtime-bun.mjs new file mode 100644 index 0000000..3197fae --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-bun.mjs @@ -0,0 +1,2 @@ +export * from "../bun-runtime.mjs"; +//# sourceMappingURL=runtime-bun.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-bun.mjs.map b/vendor/sdk/_shims/auto/runtime-bun.mjs.map new file mode 100644 index 0000000..32011c5 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-bun.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-bun.mjs","sourceRoot":"","sources":["../../src/_shims/auto/runtime-bun.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-node.d.ts b/vendor/sdk/_shims/auto/runtime-node.d.ts new file mode 100644 index 0000000..9db3401 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-node.d.ts @@ -0,0 +1,5 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../node-runtime.js"; +//# sourceMappingURL=runtime-node.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-node.d.ts.map b/vendor/sdk/_shims/auto/runtime-node.d.ts.map new file mode 100644 index 0000000..63a03d6 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-node.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-node.d.ts","sourceRoot":"","sources":["../../src/_shims/auto/runtime-node.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,iBAAiB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-node.js b/vendor/sdk/_shims/auto/runtime-node.js new file mode 100644 index 0000000..318ae7c --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-node.js @@ -0,0 +1,21 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +__exportStar(require("../node-runtime.js"), exports); +//# sourceMappingURL=runtime-node.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-node.js.map b/vendor/sdk/_shims/auto/runtime-node.js.map new file mode 100644 index 0000000..4d43fab --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-node.js","sourceRoot":"","sources":["../../src/_shims/auto/runtime-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,qDAAgC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-node.mjs b/vendor/sdk/_shims/auto/runtime-node.mjs new file mode 100644 index 0000000..f846bd3 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-node.mjs @@ -0,0 +1,2 @@ +export * from "../node-runtime.mjs"; +//# sourceMappingURL=runtime-node.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime-node.mjs.map b/vendor/sdk/_shims/auto/runtime-node.mjs.map new file mode 100644 index 0000000..aa25d93 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime-node.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-node.mjs","sourceRoot":"","sources":["../../src/_shims/auto/runtime-node.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime.d.ts b/vendor/sdk/_shims/auto/runtime.d.ts new file mode 100644 index 0000000..ad73696 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime.d.ts @@ -0,0 +1,5 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../web-runtime.js"; +//# sourceMappingURL=runtime.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime.d.ts.map b/vendor/sdk/_shims/auto/runtime.d.ts.map new file mode 100644 index 0000000..256985a --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/_shims/auto/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,gBAAgB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime.js b/vendor/sdk/_shims/auto/runtime.js new file mode 100644 index 0000000..2559391 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime.js @@ -0,0 +1,21 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +__exportStar(require("../web-runtime.js"), exports); +//# sourceMappingURL=runtime.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime.js.map b/vendor/sdk/_shims/auto/runtime.js.map new file mode 100644 index 0000000..3cbe401 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/_shims/auto/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,oDAA+B"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime.mjs b/vendor/sdk/_shims/auto/runtime.mjs new file mode 100644 index 0000000..c16bf9e --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime.mjs @@ -0,0 +1,2 @@ +export * from "../web-runtime.mjs"; +//# sourceMappingURL=runtime.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/runtime.mjs.map b/vendor/sdk/_shims/auto/runtime.mjs.map new file mode 100644 index 0000000..5a61fc6 --- /dev/null +++ b/vendor/sdk/_shims/auto/runtime.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime.mjs","sourceRoot":"","sources":["../../src/_shims/auto/runtime.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types-node.d.ts b/vendor/sdk/_shims/auto/types-node.d.ts new file mode 100644 index 0000000..66e5296 --- /dev/null +++ b/vendor/sdk/_shims/auto/types-node.d.ts @@ -0,0 +1,5 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../node-types.js"; +//# sourceMappingURL=types-node.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types-node.d.ts.map b/vendor/sdk/_shims/auto/types-node.d.ts.map new file mode 100644 index 0000000..bc0e15d --- /dev/null +++ b/vendor/sdk/_shims/auto/types-node.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types-node.d.ts","sourceRoot":"","sources":["../../src/_shims/auto/types-node.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,eAAe,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types-node.js b/vendor/sdk/_shims/auto/types-node.js new file mode 100644 index 0000000..b7577b3 --- /dev/null +++ b/vendor/sdk/_shims/auto/types-node.js @@ -0,0 +1,21 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +__exportStar(require("../node-types.js"), exports); +//# sourceMappingURL=types-node.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types-node.js.map b/vendor/sdk/_shims/auto/types-node.js.map new file mode 100644 index 0000000..553fe3e --- /dev/null +++ b/vendor/sdk/_shims/auto/types-node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types-node.js","sourceRoot":"","sources":["../../src/_shims/auto/types-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,mDAA8B"} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types-node.mjs b/vendor/sdk/_shims/auto/types-node.mjs new file mode 100644 index 0000000..10c37f2 --- /dev/null +++ b/vendor/sdk/_shims/auto/types-node.mjs @@ -0,0 +1,2 @@ +export * from "../node-types.mjs"; +//# sourceMappingURL=types-node.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types-node.mjs.map b/vendor/sdk/_shims/auto/types-node.mjs.map new file mode 100644 index 0000000..27e85a2 --- /dev/null +++ b/vendor/sdk/_shims/auto/types-node.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"types-node.mjs","sourceRoot":"","sources":["../../src/_shims/auto/types-node.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/vendor/sdk/_shims/auto/types.d.ts b/vendor/sdk/_shims/auto/types.d.ts new file mode 100644 index 0000000..d775507 --- /dev/null +++ b/vendor/sdk/_shims/auto/types.d.ts @@ -0,0 +1,101 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export type Agent = any; + +// @ts-ignore +declare const _fetch: unknown extends typeof fetch ? never : typeof fetch; +export { _fetch as fetch }; + +// @ts-ignore +type _Request = unknown extends Request ? never : Request; +export { _Request as Request }; + +// @ts-ignore +type _RequestInfo = unknown extends RequestInfo ? never : RequestInfo; +export { type _RequestInfo as RequestInfo }; + +// @ts-ignore +type _RequestInit = unknown extends RequestInit ? never : RequestInit; +export { type _RequestInit as RequestInit }; + +// @ts-ignore +type _Response = unknown extends Response ? never : Response; +export { _Response as Response }; + +// @ts-ignore +type _ResponseInit = unknown extends ResponseInit ? never : ResponseInit; +export { type _ResponseInit as ResponseInit }; + +// @ts-ignore +type _ResponseType = unknown extends ResponseType ? never : ResponseType; +export { type _ResponseType as ResponseType }; + +// @ts-ignore +type _BodyInit = unknown extends BodyInit ? never : BodyInit; +export { type _BodyInit as BodyInit }; + +// @ts-ignore +type _Headers = unknown extends Headers ? never : Headers; +export { _Headers as Headers }; + +// @ts-ignore +type _HeadersInit = unknown extends HeadersInit ? never : HeadersInit; +export { type _HeadersInit as HeadersInit }; + +type EndingType = 'native' | 'transparent'; + +export interface BlobPropertyBag { + endings?: EndingType; + type?: string; +} + +export interface FilePropertyBag extends BlobPropertyBag { + lastModified?: number; +} + +export type FileFromPathOptions = Omit; + +// @ts-ignore +type _FormData = unknown extends FormData ? never : FormData; +// @ts-ignore +declare const _FormData: unknown extends typeof FormData ? never : typeof FormData; +export { _FormData as FormData }; + +// @ts-ignore +type _File = unknown extends File ? never : File; +// @ts-ignore +declare const _File: unknown extends typeof File ? never : typeof File; +export { _File as File }; + +// @ts-ignore +type _Blob = unknown extends Blob ? never : Blob; +// @ts-ignore +declare const _Blob: unknown extends typeof Blob ? never : typeof Blob; +export { _Blob as Blob }; + +export declare class Readable { + readable: boolean; + readonly readableEnded: boolean; + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + readonly readableObjectMode: boolean; + destroyed: boolean; + read(size?: number): any; + pause(): this; + resume(): this; + isPaused(): boolean; + destroy(error?: Error): this; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +export declare class FsReadStream extends Readable { + path: {}; // node type is string | Buffer +} + +// @ts-ignore +type _ReadableStream = unknown extends ReadableStream ? never : ReadableStream; +// @ts-ignore +declare const _ReadableStream: unknown extends typeof ReadableStream ? never : typeof ReadableStream; +export { _ReadableStream as ReadableStream }; diff --git a/vendor/sdk/_shims/auto/types.js b/vendor/sdk/_shims/auto/types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/auto/types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/auto/types.mjs b/vendor/sdk/_shims/auto/types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/auto/types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/bun-runtime.d.ts b/vendor/sdk/_shims/bun-runtime.d.ts new file mode 100644 index 0000000..7228102 --- /dev/null +++ b/vendor/sdk/_shims/bun-runtime.d.ts @@ -0,0 +1,6 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { type Shims } from "./registry.js"; +export declare function getRuntime(): Shims; +//# sourceMappingURL=bun-runtime.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/bun-runtime.d.ts.map b/vendor/sdk/_shims/bun-runtime.d.ts.map new file mode 100644 index 0000000..9de8c65 --- /dev/null +++ b/vendor/sdk/_shims/bun-runtime.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"bun-runtime.d.ts","sourceRoot":"","sources":["../src/_shims/bun-runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,wBAAgB,UAAU,IAAI,KAAK,CAMlC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/bun-runtime.js b/vendor/sdk/_shims/bun-runtime.js new file mode 100644 index 0000000..e098e16 --- /dev/null +++ b/vendor/sdk/_shims/bun-runtime.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getRuntime = void 0; +const web_runtime_1 = require("./web-runtime.js"); +const node_fs_1 = require("node:fs"); +function getRuntime() { + const runtime = (0, web_runtime_1.getRuntime)(); + function isFsReadStream(value) { + return value instanceof node_fs_1.ReadStream; + } + return { ...runtime, isFsReadStream }; +} +exports.getRuntime = getRuntime; +//# sourceMappingURL=bun-runtime.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/bun-runtime.js.map b/vendor/sdk/_shims/bun-runtime.js.map new file mode 100644 index 0000000..fdea462 --- /dev/null +++ b/vendor/sdk/_shims/bun-runtime.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bun-runtime.js","sourceRoot":"","sources":["../src/_shims/bun-runtime.ts"],"names":[],"mappings":";;;AAIA,kDAA4D;AAC5D,qCAAqD;AAErD,SAAgB,UAAU;IACxB,MAAM,OAAO,GAAG,IAAA,wBAAa,GAAE,CAAC;IAChC,SAAS,cAAc,CAAC,KAAU;QAChC,OAAO,KAAK,YAAY,oBAAY,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC;AACxC,CAAC;AAND,gCAMC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/bun-runtime.mjs b/vendor/sdk/_shims/bun-runtime.mjs new file mode 100644 index 0000000..8f52de8 --- /dev/null +++ b/vendor/sdk/_shims/bun-runtime.mjs @@ -0,0 +1,10 @@ +import { getRuntime as getWebRuntime } from "./web-runtime.mjs"; +import { ReadStream as FsReadStream } from 'node:fs'; +export function getRuntime() { + const runtime = getWebRuntime(); + function isFsReadStream(value) { + return value instanceof FsReadStream; + } + return { ...runtime, isFsReadStream }; +} +//# sourceMappingURL=bun-runtime.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/bun-runtime.mjs.map b/vendor/sdk/_shims/bun-runtime.mjs.map new file mode 100644 index 0000000..4a1b11d --- /dev/null +++ b/vendor/sdk/_shims/bun-runtime.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"bun-runtime.mjs","sourceRoot":"","sources":["../src/_shims/bun-runtime.ts"],"names":[],"mappings":"OAIO,EAAE,UAAU,IAAI,aAAa,EAAE;OAC/B,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,SAAS;AAEpD,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,SAAS,cAAc,CAAC,KAAU;QAChC,OAAO,KAAK,YAAY,YAAY,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC;AACxC,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/index.d.ts b/vendor/sdk/_shims/index.d.ts new file mode 100644 index 0000000..277192a --- /dev/null +++ b/vendor/sdk/_shims/index.d.ts @@ -0,0 +1,81 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { manual } from "./manual-types.js"; +import * as auto from '@anthropic-ai/sdk/_shims/auto/types'; +import { type RequestOptions } from "../core.js"; + +type SelectType = unknown extends Manual ? Auto : Manual; + +export const kind: string; + +// @ts-ignore +export type Agent = SelectType; + +// @ts-ignore +export const fetch: SelectType; + +// @ts-ignore +export type Request = SelectType; +// @ts-ignore +export type RequestInfo = SelectType; +// @ts-ignore +export type RequestInit = SelectType; + +// @ts-ignore +export type Response = SelectType; +// @ts-ignore +export type ResponseInit = SelectType; +// @ts-ignore +export type ResponseType = SelectType; +// @ts-ignore +export type BodyInit = SelectType; +// @ts-ignore +export type Headers = SelectType; +// @ts-ignore +export const Headers: SelectType; +// @ts-ignore +export type HeadersInit = SelectType; + +// @ts-ignore +export type BlobPropertyBag = SelectType; +// @ts-ignore +export type FilePropertyBag = SelectType; +// @ts-ignore +export type FileFromPathOptions = SelectType; +// @ts-ignore +export type FormData = SelectType; +// @ts-ignore +export const FormData: SelectType; +// @ts-ignore +export type File = SelectType; +// @ts-ignore +export const File: SelectType; +// @ts-ignore +export type Blob = SelectType; +// @ts-ignore +export const Blob: SelectType; + +// @ts-ignore +export type Readable = SelectType; +// @ts-ignore +export type FsReadStream = SelectType; +// @ts-ignore +export type ReadableStream = SelectType; +// @ts-ignore +export const ReadableStream: SelectType; + +export function getMultipartRequestOptions>( + form: FormData, + opts: RequestOptions, +): Promise>; + +export function getDefaultAgent(url: string): any; + +// @ts-ignore +export type FileFromPathOptions = SelectType; + +export function fileFromPath(path: string, options?: FileFromPathOptions): Promise; +export function fileFromPath(path: string, filename?: string, options?: FileFromPathOptions): Promise; + +export function isFsReadStream(value: any): value is FsReadStream; diff --git a/vendor/sdk/_shims/index.js b/vendor/sdk/_shims/index.js new file mode 100644 index 0000000..f2db579 --- /dev/null +++ b/vendor/sdk/_shims/index.js @@ -0,0 +1,13 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +const shims = require('./registry'); +const auto = require('@anthropic-ai/sdk/_shims/auto/runtime'); +if (!shims.kind) shims.setShims(auto.getRuntime(), { auto: true }); +for (const property of Object.keys(shims)) { + Object.defineProperty(exports, property, { + get() { + return shims[property]; + }, + }); +} diff --git a/vendor/sdk/_shims/index.mjs b/vendor/sdk/_shims/index.mjs new file mode 100644 index 0000000..dfc2a41 --- /dev/null +++ b/vendor/sdk/_shims/index.mjs @@ -0,0 +1,7 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import * as shims from './registry.mjs'; +import * as auto from '@anthropic-ai/sdk/_shims/auto/runtime'; +if (!shims.kind) shims.setShims(auto.getRuntime(), { auto: true }); +export * from './registry.mjs'; diff --git a/vendor/sdk/_shims/manual-types.d.ts b/vendor/sdk/_shims/manual-types.d.ts new file mode 100644 index 0000000..506ec04 --- /dev/null +++ b/vendor/sdk/_shims/manual-types.d.ts @@ -0,0 +1,12 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +/** + * Types will get added to this namespace when you import one of the following: + * + * import '@anthropic-ai/sdk/shims/node' + * import '@anthropic-ai/sdk/shims/web' + * + * Importing more than one will cause type and runtime errors. + */ +export namespace manual {} diff --git a/vendor/sdk/_shims/manual-types.js b/vendor/sdk/_shims/manual-types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/manual-types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/manual-types.mjs b/vendor/sdk/_shims/manual-types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/manual-types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/node-runtime.d.ts b/vendor/sdk/_shims/node-runtime.d.ts new file mode 100644 index 0000000..0c2b042 --- /dev/null +++ b/vendor/sdk/_shims/node-runtime.d.ts @@ -0,0 +1,3 @@ +import { type Shims } from "./registry.js"; +export declare function getRuntime(): Shims; +//# sourceMappingURL=node-runtime.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/node-runtime.d.ts.map b/vendor/sdk/_shims/node-runtime.d.ts.map new file mode 100644 index 0000000..04da63c --- /dev/null +++ b/vendor/sdk/_shims/node-runtime.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node-runtime.d.ts","sourceRoot":"","sources":["../src/_shims/node-runtime.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AA6CxC,wBAAgB,UAAU,IAAI,KAAK,CAqBlC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/node-runtime.js b/vendor/sdk/_shims/node-runtime.js new file mode 100644 index 0000000..73ac45d --- /dev/null +++ b/vendor/sdk/_shims/node-runtime.js @@ -0,0 +1,89 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getRuntime = void 0; +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +const nf = __importStar(require("node-fetch")); +const fd = __importStar(require("formdata-node")); +const agentkeepalive_1 = __importDefault(require("agentkeepalive")); +const abort_controller_1 = require("abort-controller"); +const node_fs_1 = require("node:fs"); +const form_data_encoder_1 = require("form-data-encoder"); +const node_stream_1 = require("node:stream"); +const MultipartBody_1 = require("./MultipartBody.js"); +const web_1 = require("node:stream/web"); +let fileFromPathWarned = false; +async function fileFromPath(path, ...args) { + // this import fails in environments that don't handle export maps correctly, like old versions of Jest + const { fileFromPath: _fileFromPath } = await Promise.resolve().then(() => __importStar(require('formdata-node/file-from-path'))); + if (!fileFromPathWarned) { + console.warn(`fileFromPath is deprecated; use fs.createReadStream(${JSON.stringify(path)}) instead`); + fileFromPathWarned = true; + } + // @ts-ignore + return await _fileFromPath(path, ...args); +} +const defaultHttpAgent = new agentkeepalive_1.default({ keepAlive: true, timeout: 5 * 60 * 1000 }); +const defaultHttpsAgent = new agentkeepalive_1.default.HttpsAgent({ keepAlive: true, timeout: 5 * 60 * 1000 }); +async function getMultipartRequestOptions(form, opts) { + const encoder = new form_data_encoder_1.FormDataEncoder(form); + const readable = node_stream_1.Readable.from(encoder); + const body = new MultipartBody_1.MultipartBody(readable); + const headers = { + ...opts.headers, + ...encoder.headers, + 'Content-Length': encoder.contentLength, + }; + return { ...opts, body: body, headers }; +} +function getRuntime() { + // Polyfill global object if needed. + if (typeof AbortController === 'undefined') { + // @ts-expect-error (the types are subtly different, but compatible in practice) + globalThis.AbortController = abort_controller_1.AbortController; + } + return { + kind: 'node', + fetch: nf.default, + Request: nf.Request, + Response: nf.Response, + Headers: nf.Headers, + FormData: fd.FormData, + Blob: fd.Blob, + File: fd.File, + ReadableStream: web_1.ReadableStream, + getMultipartRequestOptions, + getDefaultAgent: (url) => (url.startsWith('https') ? defaultHttpsAgent : defaultHttpAgent), + fileFromPath, + isFsReadStream: (value) => value instanceof node_fs_1.ReadStream, + }; +} +exports.getRuntime = getRuntime; +//# sourceMappingURL=node-runtime.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/node-runtime.js.map b/vendor/sdk/_shims/node-runtime.js.map new file mode 100644 index 0000000..c5dde76 --- /dev/null +++ b/vendor/sdk/_shims/node-runtime.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-runtime.js","sourceRoot":"","sources":["../src/_shims/node-runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,+CAAiC;AACjC,kDAAoC;AAEpC,oEAA4C;AAC5C,uDAA8E;AAC9E,qCAAqD;AAErD,yDAAoD;AACpD,6CAAuC;AAEvC,sDAAgD;AAEhD,yCAAiD;AAIjD,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAS/B,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,GAAG,IAAW;IACtD,uGAAuG;IACvG,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,wDAAa,8BAA8B,GAAC,CAAC;IAErF,IAAI,CAAC,kBAAkB,EAAE;QACvB,OAAO,CAAC,IAAI,CAAC,uDAAuD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrG,kBAAkB,GAAG,IAAI,CAAC;KAC3B;IACD,aAAa;IACb,OAAO,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,gBAAgB,GAAU,IAAI,wBAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChG,MAAM,iBAAiB,GAAU,IAAI,wBAAc,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAE5G,KAAK,UAAU,0BAA0B,CACvC,IAAiB,EACjB,IAAuB;IAEvB,MAAM,OAAO,GAAG,IAAI,mCAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,sBAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG;QACd,GAAG,IAAI,CAAC,OAAO;QACf,GAAG,OAAO,CAAC,OAAO;QAClB,gBAAgB,EAAE,OAAO,CAAC,aAAa;KACxC,CAAC;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAW,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,SAAgB,UAAU;IACxB,oCAAoC;IACpC,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;QAC1C,gFAAgF;QAChF,UAAU,CAAC,eAAe,GAAG,kCAAuB,CAAC;KACtD;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE,CAAC,OAAO;QACjB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,cAAc,EAAd,oBAAc;QACd,0BAA0B;QAC1B,eAAe,EAAE,CAAC,GAAW,EAAS,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACzG,YAAY;QACZ,cAAc,EAAE,CAAC,KAAU,EAAyB,EAAE,CAAC,KAAK,YAAY,oBAAY;KACrF,CAAC;AACJ,CAAC;AArBD,gCAqBC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/node-runtime.mjs b/vendor/sdk/_shims/node-runtime.mjs new file mode 100644 index 0000000..3605162 --- /dev/null +++ b/vendor/sdk/_shims/node-runtime.mjs @@ -0,0 +1,56 @@ +import * as nf from 'node-fetch'; +import * as fd from 'formdata-node'; +import KeepAliveAgent from 'agentkeepalive'; +import { AbortController as AbortControllerPolyfill } from 'abort-controller'; +import { ReadStream as FsReadStream } from 'node:fs'; +import { FormDataEncoder } from 'form-data-encoder'; +import { Readable } from 'node:stream'; +import { MultipartBody } from "./MultipartBody.mjs"; +import { ReadableStream } from 'node:stream/web'; +let fileFromPathWarned = false; +async function fileFromPath(path, ...args) { + // this import fails in environments that don't handle export maps correctly, like old versions of Jest + const { fileFromPath: _fileFromPath } = await import('formdata-node/file-from-path'); + if (!fileFromPathWarned) { + console.warn(`fileFromPath is deprecated; use fs.createReadStream(${JSON.stringify(path)}) instead`); + fileFromPathWarned = true; + } + // @ts-ignore + return await _fileFromPath(path, ...args); +} +const defaultHttpAgent = new KeepAliveAgent({ keepAlive: true, timeout: 5 * 60 * 1000 }); +const defaultHttpsAgent = new KeepAliveAgent.HttpsAgent({ keepAlive: true, timeout: 5 * 60 * 1000 }); +async function getMultipartRequestOptions(form, opts) { + const encoder = new FormDataEncoder(form); + const readable = Readable.from(encoder); + const body = new MultipartBody(readable); + const headers = { + ...opts.headers, + ...encoder.headers, + 'Content-Length': encoder.contentLength, + }; + return { ...opts, body: body, headers }; +} +export function getRuntime() { + // Polyfill global object if needed. + if (typeof AbortController === 'undefined') { + // @ts-expect-error (the types are subtly different, but compatible in practice) + globalThis.AbortController = AbortControllerPolyfill; + } + return { + kind: 'node', + fetch: nf.default, + Request: nf.Request, + Response: nf.Response, + Headers: nf.Headers, + FormData: fd.FormData, + Blob: fd.Blob, + File: fd.File, + ReadableStream, + getMultipartRequestOptions, + getDefaultAgent: (url) => (url.startsWith('https') ? defaultHttpsAgent : defaultHttpAgent), + fileFromPath, + isFsReadStream: (value) => value instanceof FsReadStream, + }; +} +//# sourceMappingURL=node-runtime.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/node-runtime.mjs.map b/vendor/sdk/_shims/node-runtime.mjs.map new file mode 100644 index 0000000..53a3e51 --- /dev/null +++ b/vendor/sdk/_shims/node-runtime.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"node-runtime.mjs","sourceRoot":"","sources":["../src/_shims/node-runtime.ts"],"names":[],"mappings":"OAGO,KAAK,EAAE,MAAM,YAAY;OACzB,KAAK,EAAE,MAAM,eAAe;OAE5B,cAAc,MAAM,gBAAgB;OACpC,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,kBAAkB;OACtE,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,SAAS;OAE7C,EAAE,eAAe,EAAE,MAAM,mBAAmB;OAC5C,EAAE,QAAQ,EAAE,MAAM,aAAa;OAE/B,EAAE,aAAa,EAAE;OAEjB,EAAE,cAAc,EAAE,MAAM,iBAAiB;AAIhD,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAS/B,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,GAAG,IAAW;IACtD,uGAAuG;IACvG,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAErF,IAAI,CAAC,kBAAkB,EAAE;QACvB,OAAO,CAAC,IAAI,CAAC,uDAAuD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrG,kBAAkB,GAAG,IAAI,CAAC;KAC3B;IACD,aAAa;IACb,OAAO,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,gBAAgB,GAAU,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChG,MAAM,iBAAiB,GAAU,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAE5G,KAAK,UAAU,0BAA0B,CACvC,IAAiB,EACjB,IAAuB;IAEvB,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG;QACd,GAAG,IAAI,CAAC,OAAO;QACf,GAAG,OAAO,CAAC,OAAO;QAClB,gBAAgB,EAAE,OAAO,CAAC,aAAa;KACxC,CAAC;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAW,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,oCAAoC;IACpC,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;QAC1C,gFAAgF;QAChF,UAAU,CAAC,eAAe,GAAG,uBAAuB,CAAC;KACtD;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE,CAAC,OAAO;QACjB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,cAAc;QACd,0BAA0B;QAC1B,eAAe,EAAE,CAAC,GAAW,EAAS,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACzG,YAAY;QACZ,cAAc,EAAE,CAAC,KAAU,EAAyB,EAAE,CAAC,KAAK,YAAY,YAAY;KACrF,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/node-types.d.ts b/vendor/sdk/_shims/node-types.d.ts new file mode 100644 index 0000000..c159e5f --- /dev/null +++ b/vendor/sdk/_shims/node-types.d.ts @@ -0,0 +1,42 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import * as nf from 'node-fetch'; +import * as fd from 'formdata-node'; + +export { type Agent } from 'node:http'; +export { type Readable } from 'node:stream'; +export { type ReadStream as FsReadStream } from 'node:fs'; +export { ReadableStream } from 'node:stream/web'; + +export const fetch: typeof nf.default; + +export type Request = nf.Request; +export type RequestInfo = nf.RequestInfo; +export type RequestInit = nf.RequestInit; + +export type Response = nf.Response; +export type ResponseInit = nf.ResponseInit; +export type ResponseType = nf.ResponseType; +export type BodyInit = nf.BodyInit; +export type Headers = nf.Headers; +export type HeadersInit = nf.HeadersInit; + +type EndingType = 'native' | 'transparent'; +export interface BlobPropertyBag { + endings?: EndingType; + type?: string; +} + +export interface FilePropertyBag extends BlobPropertyBag { + lastModified?: number; +} + +export type FileFromPathOptions = Omit; + +export type FormData = fd.FormData; +export const FormData: typeof fd.FormData; +export type File = fd.File; +export const File: typeof fd.File; +export type Blob = fd.Blob; +export const Blob: typeof fd.Blob; diff --git a/vendor/sdk/_shims/node-types.js b/vendor/sdk/_shims/node-types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/node-types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/node-types.mjs b/vendor/sdk/_shims/node-types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/node-types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/registry.d.ts b/vendor/sdk/_shims/registry.d.ts new file mode 100644 index 0000000..c041fa2 --- /dev/null +++ b/vendor/sdk/_shims/registry.d.ts @@ -0,0 +1,37 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { type RequestOptions } from "../core.js"; +export interface Shims { + kind: string; + fetch: any; + Request: any; + Response: any; + Headers: any; + FormData: any; + Blob: any; + File: any; + ReadableStream: any; + getMultipartRequestOptions: >(form: Shims['FormData'], opts: RequestOptions) => Promise>; + getDefaultAgent: (url: string) => any; + fileFromPath: ((path: string, filename?: string, options?: {}) => Promise) | ((path: string, options?: {}) => Promise); + isFsReadStream: (value: any) => boolean; +} +export declare let auto: boolean; +export declare let kind: Shims['kind'] | undefined; +export declare let fetch: Shims['fetch'] | undefined; +export declare let Request: Shims['Request'] | undefined; +export declare let Response: Shims['Response'] | undefined; +export declare let Headers: Shims['Headers'] | undefined; +export declare let FormData: Shims['FormData'] | undefined; +export declare let Blob: Shims['Blob'] | undefined; +export declare let File: Shims['File'] | undefined; +export declare let ReadableStream: Shims['ReadableStream'] | undefined; +export declare let getMultipartRequestOptions: Shims['getMultipartRequestOptions'] | undefined; +export declare let getDefaultAgent: Shims['getDefaultAgent'] | undefined; +export declare let fileFromPath: Shims['fileFromPath'] | undefined; +export declare let isFsReadStream: Shims['isFsReadStream'] | undefined; +export declare function setShims(shims: Shims, options?: { + auto: boolean; +}): void; +//# sourceMappingURL=registry.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/registry.d.ts.map b/vendor/sdk/_shims/registry.d.ts.map new file mode 100644 index 0000000..4b31402 --- /dev/null +++ b/vendor/sdk/_shims/registry.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/_shims/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,GAAG,CAAC;IACV,cAAc,EAAE,GAAG,CAAC;IACpB,0BAA0B,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EACvB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IACtC,YAAY,EACR,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAC3E,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7D,cAAc,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;CACzC;AAED,eAAO,IAAI,IAAI,SAAQ,CAAC;AACxB,eAAO,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAqB,CAAC;AACvD,eAAO,IAAI,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,SAAqB,CAAC;AACzD,eAAO,IAAI,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,SAAqB,CAAC;AAC7D,eAAO,IAAI,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAqB,CAAC;AAC/D,eAAO,IAAI,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,SAAqB,CAAC;AAC7D,eAAO,IAAI,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAqB,CAAC;AAC/D,eAAO,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAqB,CAAC;AACvD,eAAO,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAqB,CAAC;AACvD,eAAO,IAAI,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,SAAqB,CAAC;AAC3E,eAAO,IAAI,0BAA0B,EAAE,KAAK,CAAC,4BAA4B,CAAC,GAAG,SAAqB,CAAC;AACnG,eAAO,IAAI,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAqB,CAAC;AAC7E,eAAO,IAAI,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,SAAqB,CAAC;AACvE,eAAO,IAAI,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,SAAqB,CAAC;AAE3E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAoB,QAyBlF"} \ No newline at end of file diff --git a/vendor/sdk/_shims/registry.js b/vendor/sdk/_shims/registry.js new file mode 100644 index 0000000..69eaf29 --- /dev/null +++ b/vendor/sdk/_shims/registry.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setShims = exports.isFsReadStream = exports.fileFromPath = exports.getDefaultAgent = exports.getMultipartRequestOptions = exports.ReadableStream = exports.File = exports.Blob = exports.FormData = exports.Headers = exports.Response = exports.Request = exports.fetch = exports.kind = exports.auto = void 0; +exports.auto = false; +exports.kind = undefined; +exports.fetch = undefined; +exports.Request = undefined; +exports.Response = undefined; +exports.Headers = undefined; +exports.FormData = undefined; +exports.Blob = undefined; +exports.File = undefined; +exports.ReadableStream = undefined; +exports.getMultipartRequestOptions = undefined; +exports.getDefaultAgent = undefined; +exports.fileFromPath = undefined; +exports.isFsReadStream = undefined; +function setShims(shims, options = { auto: false }) { + if (exports.auto) { + throw new Error(`you must \`import '@anthropic-ai/sdk/shims/${shims.kind}'\` before importing anything else from @anthropic-ai/sdk`); + } + if (exports.kind) { + throw new Error(`can't \`import '@anthropic-ai/sdk/shims/${shims.kind}'\` after \`import '@anthropic-ai/sdk/shims/${exports.kind}'\``); + } + exports.auto = options.auto; + exports.kind = shims.kind; + exports.fetch = shims.fetch; + exports.Request = shims.Request; + exports.Response = shims.Response; + exports.Headers = shims.Headers; + exports.FormData = shims.FormData; + exports.Blob = shims.Blob; + exports.File = shims.File; + exports.ReadableStream = shims.ReadableStream; + exports.getMultipartRequestOptions = shims.getMultipartRequestOptions; + exports.getDefaultAgent = shims.getDefaultAgent; + exports.fileFromPath = shims.fileFromPath; + exports.isFsReadStream = shims.isFsReadStream; +} +exports.setShims = setShims; +//# sourceMappingURL=registry.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/registry.js.map b/vendor/sdk/_shims/registry.js.map new file mode 100644 index 0000000..ff9e539 --- /dev/null +++ b/vendor/sdk/_shims/registry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/_shims/registry.ts"],"names":[],"mappings":";;;AA0BW,QAAA,IAAI,GAAG,KAAK,CAAC;AACb,QAAA,IAAI,GAA8B,SAAS,CAAC;AAC5C,QAAA,KAAK,GAA+B,SAAS,CAAC;AAC9C,QAAA,OAAO,GAAiC,SAAS,CAAC;AAClD,QAAA,QAAQ,GAAkC,SAAS,CAAC;AACpD,QAAA,OAAO,GAAiC,SAAS,CAAC;AAClD,QAAA,QAAQ,GAAkC,SAAS,CAAC;AACpD,QAAA,IAAI,GAA8B,SAAS,CAAC;AAC5C,QAAA,IAAI,GAA8B,SAAS,CAAC;AAC5C,QAAA,cAAc,GAAwC,SAAS,CAAC;AAChE,QAAA,0BAA0B,GAAoD,SAAS,CAAC;AACxF,QAAA,eAAe,GAAyC,SAAS,CAAC;AAClE,QAAA,YAAY,GAAsC,SAAS,CAAC;AAC5D,QAAA,cAAc,GAAwC,SAAS,CAAC;AAE3E,SAAgB,QAAQ,CAAC,KAAY,EAAE,UAA6B,EAAE,IAAI,EAAE,KAAK,EAAE;IACjF,IAAI,YAAI,EAAE;QACR,MAAM,IAAI,KAAK,CACb,8CAA8C,KAAK,CAAC,IAAI,2DAA2D,CACpH,CAAC;KACH;IACD,IAAI,YAAI,EAAE;QACR,MAAM,IAAI,KAAK,CACb,2CAA2C,KAAK,CAAC,IAAI,+CAA+C,YAAI,KAAK,CAC9G,CAAC;KACH;IACD,YAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpB,YAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAClB,aAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACpB,eAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,gBAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,eAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,gBAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,YAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAClB,YAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAClB,sBAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IACtC,kCAA0B,GAAG,KAAK,CAAC,0BAA0B,CAAC;IAC9D,uBAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IACxC,oBAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAClC,sBAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AACxC,CAAC;AAzBD,4BAyBC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/registry.mjs b/vendor/sdk/_shims/registry.mjs new file mode 100644 index 0000000..023bbe8 --- /dev/null +++ b/vendor/sdk/_shims/registry.mjs @@ -0,0 +1,37 @@ +export let auto = false; +export let kind = undefined; +export let fetch = undefined; +export let Request = undefined; +export let Response = undefined; +export let Headers = undefined; +export let FormData = undefined; +export let Blob = undefined; +export let File = undefined; +export let ReadableStream = undefined; +export let getMultipartRequestOptions = undefined; +export let getDefaultAgent = undefined; +export let fileFromPath = undefined; +export let isFsReadStream = undefined; +export function setShims(shims, options = { auto: false }) { + if (auto) { + throw new Error(`you must \`import '@anthropic-ai/sdk/shims/${shims.kind}'\` before importing anything else from @anthropic-ai/sdk`); + } + if (kind) { + throw new Error(`can't \`import '@anthropic-ai/sdk/shims/${shims.kind}'\` after \`import '@anthropic-ai/sdk/shims/${kind}'\``); + } + auto = options.auto; + kind = shims.kind; + fetch = shims.fetch; + Request = shims.Request; + Response = shims.Response; + Headers = shims.Headers; + FormData = shims.FormData; + Blob = shims.Blob; + File = shims.File; + ReadableStream = shims.ReadableStream; + getMultipartRequestOptions = shims.getMultipartRequestOptions; + getDefaultAgent = shims.getDefaultAgent; + fileFromPath = shims.fileFromPath; + isFsReadStream = shims.isFsReadStream; +} +//# sourceMappingURL=registry.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/registry.mjs.map b/vendor/sdk/_shims/registry.mjs.map new file mode 100644 index 0000000..112aee4 --- /dev/null +++ b/vendor/sdk/_shims/registry.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"registry.mjs","sourceRoot":"","sources":["../src/_shims/registry.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;AACxB,MAAM,CAAC,IAAI,IAAI,GAA8B,SAAS,CAAC;AACvD,MAAM,CAAC,IAAI,KAAK,GAA+B,SAAS,CAAC;AACzD,MAAM,CAAC,IAAI,OAAO,GAAiC,SAAS,CAAC;AAC7D,MAAM,CAAC,IAAI,QAAQ,GAAkC,SAAS,CAAC;AAC/D,MAAM,CAAC,IAAI,OAAO,GAAiC,SAAS,CAAC;AAC7D,MAAM,CAAC,IAAI,QAAQ,GAAkC,SAAS,CAAC;AAC/D,MAAM,CAAC,IAAI,IAAI,GAA8B,SAAS,CAAC;AACvD,MAAM,CAAC,IAAI,IAAI,GAA8B,SAAS,CAAC;AACvD,MAAM,CAAC,IAAI,cAAc,GAAwC,SAAS,CAAC;AAC3E,MAAM,CAAC,IAAI,0BAA0B,GAAoD,SAAS,CAAC;AACnG,MAAM,CAAC,IAAI,eAAe,GAAyC,SAAS,CAAC;AAC7E,MAAM,CAAC,IAAI,YAAY,GAAsC,SAAS,CAAC;AACvE,MAAM,CAAC,IAAI,cAAc,GAAwC,SAAS,CAAC;AAE3E,MAAM,UAAU,QAAQ,CAAC,KAAY,EAAE,UAA6B,EAAE,IAAI,EAAE,KAAK,EAAE;IACjF,IAAI,IAAI,EAAE;QACR,MAAM,IAAI,KAAK,CACb,8CAA8C,KAAK,CAAC,IAAI,2DAA2D,CACpH,CAAC;KACH;IACD,IAAI,IAAI,EAAE;QACR,MAAM,IAAI,KAAK,CACb,2CAA2C,KAAK,CAAC,IAAI,+CAA+C,IAAI,KAAK,CAC9G,CAAC;KACH;IACD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpB,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAClB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACpB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAClB,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAClB,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IACtC,0BAA0B,GAAG,KAAK,CAAC,0BAA0B,CAAC;IAC9D,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IACxC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAClC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AACxC,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/web-runtime.d.ts b/vendor/sdk/_shims/web-runtime.d.ts new file mode 100644 index 0000000..4ae8077 --- /dev/null +++ b/vendor/sdk/_shims/web-runtime.d.ts @@ -0,0 +1,5 @@ +import { type Shims } from "./registry.js"; +export declare function getRuntime({ manuallyImported }?: { + manuallyImported?: boolean; +}): Shims; +//# sourceMappingURL=web-runtime.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_shims/web-runtime.d.ts.map b/vendor/sdk/_shims/web-runtime.d.ts.map new file mode 100644 index 0000000..c6a1874 --- /dev/null +++ b/vendor/sdk/_shims/web-runtime.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"web-runtime.d.ts","sourceRoot":"","sources":["../src/_shims/web-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,KAAK,CA+F3F"} \ No newline at end of file diff --git a/vendor/sdk/_shims/web-runtime.js b/vendor/sdk/_shims/web-runtime.js new file mode 100644 index 0000000..2ee295c --- /dev/null +++ b/vendor/sdk/_shims/web-runtime.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getRuntime = void 0; +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +const MultipartBody_1 = require("./MultipartBody.js"); +function getRuntime({ manuallyImported } = {}) { + const recommendation = manuallyImported ? + `You may need to use polyfills` + : `Add one of these imports before your first \`import … from '@anthropic-ai/sdk'\`: +- \`import '@anthropic-ai/sdk/shims/node'\` (if you're running on Node) +- \`import '@anthropic-ai/sdk/shims/web'\` (otherwise) +`; + let _fetch, _Request, _Response, _Headers; + try { + // @ts-ignore + _fetch = fetch; + // @ts-ignore + _Request = Request; + // @ts-ignore + _Response = Response; + // @ts-ignore + _Headers = Headers; + } + catch (error) { + throw new Error(`this environment is missing the following Web Fetch API type: ${error.message}. ${recommendation}`); + } + return { + kind: 'web', + fetch: _fetch, + Request: _Request, + Response: _Response, + Headers: _Headers, + FormData: + // @ts-ignore + typeof FormData !== 'undefined' ? FormData : (class FormData { + // @ts-ignore + constructor() { + throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${recommendation}`); + } + }), + Blob: typeof Blob !== 'undefined' ? Blob : (class Blob { + constructor() { + throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${recommendation}`); + } + }), + File: + // @ts-ignore + typeof File !== 'undefined' ? File : (class File { + // @ts-ignore + constructor() { + throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${recommendation}`); + } + }), + ReadableStream: + // @ts-ignore + typeof ReadableStream !== 'undefined' ? ReadableStream : (class ReadableStream { + // @ts-ignore + constructor() { + throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${recommendation}`); + } + }), + getMultipartRequestOptions: async ( + // @ts-ignore + form, opts) => ({ + ...opts, + body: new MultipartBody_1.MultipartBody(form), + }), + getDefaultAgent: (url) => undefined, + fileFromPath: () => { + throw new Error('The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/anthropics/anthropic-sdk-typescript#file-uploads'); + }, + isFsReadStream: (value) => false, + }; +} +exports.getRuntime = getRuntime; +//# sourceMappingURL=web-runtime.js.map \ No newline at end of file diff --git a/vendor/sdk/_shims/web-runtime.js.map b/vendor/sdk/_shims/web-runtime.js.map new file mode 100644 index 0000000..f21c35e --- /dev/null +++ b/vendor/sdk/_shims/web-runtime.js.map @@ -0,0 +1 @@ +{"version":3,"file":"web-runtime.js","sourceRoot":"","sources":["../src/_shims/web-runtime.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,sDAAgD;AAIhD,SAAgB,UAAU,CAAC,EAAE,gBAAgB,KAAqC,EAAE;IAClF,MAAM,cAAc,GAClB,gBAAgB,CAAC,CAAC;QAChB,+BAA+B;QACjC,CAAC,CAAC;;;CAGL,CAAC;IAEA,IAAI,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC1C,IAAI;QACF,aAAa;QACb,MAAM,GAAG,KAAK,CAAC;QACf,aAAa;QACb,QAAQ,GAAG,OAAO,CAAC;QACnB,aAAa;QACb,SAAS,GAAG,QAAQ,CAAC;QACrB,aAAa;QACb,QAAQ,GAAG,OAAO,CAAC;KACpB;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,IAAI,KAAK,CACb,iEACG,KAAa,CAAC,OACjB,KAAK,cAAc,EAAE,CACtB,CAAC;KACH;IAED,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,QAAQ;QACjB,QAAQ;QACN,aAAa;QACb,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3C,MAAM,QAAQ;YACZ,aAAa;YACb;gBACE,MAAM,IAAI,KAAK,CACb,qFAAqF,cAAc,EAAE,CACtG,CAAC;YACJ,CAAC;SACF,CACF;QACH,IAAI,EACF,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,MAAM,IAAI;YACR;gBACE,MAAM,IAAI,KAAK,CACb,iFAAiF,cAAc,EAAE,CAClG,CAAC;YACJ,CAAC;SACF,CACF;QACH,IAAI;QACF,aAAa;QACb,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,MAAM,IAAI;YACR,aAAa;YACb;gBACE,MAAM,IAAI,KAAK,CACb,iFAAiF,cAAc,EAAE,CAClG,CAAC;YACJ,CAAC;SACF,CACF;QACH,cAAc;QACZ,aAAa;QACb,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CACvD,MAAM,cAAc;YAClB,aAAa;YACb;gBACE,MAAM,IAAI,KAAK,CACb,uFAAuF,cAAc,EAAE,CACxG,CAAC;YACJ,CAAC;SACF,CACF;QACH,0BAA0B,EAAE,KAAK;QAC/B,aAAa;QACb,IAAc,EACd,IAAuB,EACK,EAAE,CAAC,CAAC;YAChC,GAAG,IAAI;YACP,IAAI,EAAE,IAAI,6BAAa,CAAC,IAAI,CAAQ;SACrC,CAAC;QACF,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS;QAC3C,YAAY,EAAE,GAAG,EAAE;YACjB,MAAM,IAAI,KAAK,CACb,iKAAiK,CAClK,CAAC;QACJ,CAAC;QACD,cAAc,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK;KACtC,CAAC;AACJ,CAAC;AA/FD,gCA+FC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/web-runtime.mjs b/vendor/sdk/_shims/web-runtime.mjs new file mode 100644 index 0000000..dcd1e6a --- /dev/null +++ b/vendor/sdk/_shims/web-runtime.mjs @@ -0,0 +1,71 @@ +import { MultipartBody } from "./MultipartBody.mjs"; +export function getRuntime({ manuallyImported } = {}) { + const recommendation = manuallyImported ? + `You may need to use polyfills` + : `Add one of these imports before your first \`import … from '@anthropic-ai/sdk'\`: +- \`import '@anthropic-ai/sdk/shims/node'\` (if you're running on Node) +- \`import '@anthropic-ai/sdk/shims/web'\` (otherwise) +`; + let _fetch, _Request, _Response, _Headers; + try { + // @ts-ignore + _fetch = fetch; + // @ts-ignore + _Request = Request; + // @ts-ignore + _Response = Response; + // @ts-ignore + _Headers = Headers; + } + catch (error) { + throw new Error(`this environment is missing the following Web Fetch API type: ${error.message}. ${recommendation}`); + } + return { + kind: 'web', + fetch: _fetch, + Request: _Request, + Response: _Response, + Headers: _Headers, + FormData: + // @ts-ignore + typeof FormData !== 'undefined' ? FormData : (class FormData { + // @ts-ignore + constructor() { + throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${recommendation}`); + } + }), + Blob: typeof Blob !== 'undefined' ? Blob : (class Blob { + constructor() { + throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${recommendation}`); + } + }), + File: + // @ts-ignore + typeof File !== 'undefined' ? File : (class File { + // @ts-ignore + constructor() { + throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${recommendation}`); + } + }), + ReadableStream: + // @ts-ignore + typeof ReadableStream !== 'undefined' ? ReadableStream : (class ReadableStream { + // @ts-ignore + constructor() { + throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${recommendation}`); + } + }), + getMultipartRequestOptions: async ( + // @ts-ignore + form, opts) => ({ + ...opts, + body: new MultipartBody(form), + }), + getDefaultAgent: (url) => undefined, + fileFromPath: () => { + throw new Error('The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/anthropics/anthropic-sdk-typescript#file-uploads'); + }, + isFsReadStream: (value) => false, + }; +} +//# sourceMappingURL=web-runtime.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_shims/web-runtime.mjs.map b/vendor/sdk/_shims/web-runtime.mjs.map new file mode 100644 index 0000000..110d388 --- /dev/null +++ b/vendor/sdk/_shims/web-runtime.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"web-runtime.mjs","sourceRoot":"","sources":["../src/_shims/web-runtime.ts"],"names":[],"mappings":"OAGO,EAAE,aAAa,EAAE;AAIxB,MAAM,UAAU,UAAU,CAAC,EAAE,gBAAgB,KAAqC,EAAE;IAClF,MAAM,cAAc,GAClB,gBAAgB,CAAC,CAAC;QAChB,+BAA+B;QACjC,CAAC,CAAC;;;CAGL,CAAC;IAEA,IAAI,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC1C,IAAI;QACF,aAAa;QACb,MAAM,GAAG,KAAK,CAAC;QACf,aAAa;QACb,QAAQ,GAAG,OAAO,CAAC;QACnB,aAAa;QACb,SAAS,GAAG,QAAQ,CAAC;QACrB,aAAa;QACb,QAAQ,GAAG,OAAO,CAAC;KACpB;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,IAAI,KAAK,CACb,iEACG,KAAa,CAAC,OACjB,KAAK,cAAc,EAAE,CACtB,CAAC;KACH;IAED,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,QAAQ;QACjB,QAAQ;QACN,aAAa;QACb,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3C,MAAM,QAAQ;YACZ,aAAa;YACb;gBACE,MAAM,IAAI,KAAK,CACb,qFAAqF,cAAc,EAAE,CACtG,CAAC;YACJ,CAAC;SACF,CACF;QACH,IAAI,EACF,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,MAAM,IAAI;YACR;gBACE,MAAM,IAAI,KAAK,CACb,iFAAiF,cAAc,EAAE,CAClG,CAAC;YACJ,CAAC;SACF,CACF;QACH,IAAI;QACF,aAAa;QACb,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,MAAM,IAAI;YACR,aAAa;YACb;gBACE,MAAM,IAAI,KAAK,CACb,iFAAiF,cAAc,EAAE,CAClG,CAAC;YACJ,CAAC;SACF,CACF;QACH,cAAc;QACZ,aAAa;QACb,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CACvD,MAAM,cAAc;YAClB,aAAa;YACb;gBACE,MAAM,IAAI,KAAK,CACb,uFAAuF,cAAc,EAAE,CACxG,CAAC;YACJ,CAAC;SACF,CACF;QACH,0BAA0B,EAAE,KAAK;QAC/B,aAAa;QACb,IAAc,EACd,IAAuB,EACK,EAAE,CAAC,CAAC;YAChC,GAAG,IAAI;YACP,IAAI,EAAE,IAAI,aAAa,CAAC,IAAI,CAAQ;SACrC,CAAC;QACF,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS;QAC3C,YAAY,EAAE,GAAG,EAAE;YACjB,MAAM,IAAI,KAAK,CACb,iKAAiK,CAClK,CAAC;QACJ,CAAC;QACD,cAAc,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK;KACtC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_shims/web-types.d.ts b/vendor/sdk/_shims/web-types.d.ts new file mode 100644 index 0000000..4ff3513 --- /dev/null +++ b/vendor/sdk/_shims/web-types.d.ts @@ -0,0 +1,83 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export type Agent = any; + +declare const _fetch: typeof fetch; +export { _fetch as fetch }; + +type _Request = Request; +export { _Request as Request }; + +type _RequestInfo = RequestInfo; +export { type _RequestInfo as RequestInfo }; + +type _RequestInit = RequestInit; +export { type _RequestInit as RequestInit }; + +type _Response = Response; +export { _Response as Response }; + +type _ResponseInit = ResponseInit; +export { type _ResponseInit as ResponseInit }; + +type _ResponseType = ResponseType; +export { type _ResponseType as ResponseType }; + +type _BodyInit = BodyInit; +export { type _BodyInit as BodyInit }; + +type _Headers = Headers; +export { _Headers as Headers }; + +type _HeadersInit = HeadersInit; +export { type _HeadersInit as HeadersInit }; + +type EndingType = 'native' | 'transparent'; + +export interface BlobPropertyBag { + endings?: EndingType; + type?: string; +} + +export interface FilePropertyBag extends BlobPropertyBag { + lastModified?: number; +} + +export type FileFromPathOptions = Omit; + +type _FormData = FormData; +declare const _FormData: typeof FormData; +export { _FormData as FormData }; + +type _File = File; +declare const _File: typeof File; +export { _File as File }; + +type _Blob = Blob; +declare const _Blob: typeof Blob; +export { _Blob as Blob }; + +export declare class Readable { + readable: boolean; + readonly readableEnded: boolean; + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + readonly readableObjectMode: boolean; + destroyed: boolean; + read(size?: number): any; + pause(): this; + resume(): this; + isPaused(): boolean; + destroy(error?: Error): this; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +export declare class FsReadStream extends Readable { + path: {}; // node type is string | Buffer +} + +type _ReadableStream = ReadableStream; +declare const _ReadableStream: typeof ReadableStream; +export { _ReadableStream as ReadableStream }; diff --git a/vendor/sdk/_shims/web-types.js b/vendor/sdk/_shims/web-types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/web-types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_shims/web-types.mjs b/vendor/sdk/_shims/web-types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/_shims/web-types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/_vendor/partial-json-parser/parser.d.ts b/vendor/sdk/_vendor/partial-json-parser/parser.d.ts new file mode 100644 index 0000000..bc450af --- /dev/null +++ b/vendor/sdk/_vendor/partial-json-parser/parser.d.ts @@ -0,0 +1,3 @@ +declare const partialParse: (input: string) => unknown; +export { partialParse }; +//# sourceMappingURL=parser.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/_vendor/partial-json-parser/parser.d.ts.map b/vendor/sdk/_vendor/partial-json-parser/parser.d.ts.map new file mode 100644 index 0000000..5e6f9df --- /dev/null +++ b/vendor/sdk/_vendor/partial-json-parser/parser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/_vendor/partial-json-parser/parser.ts"],"names":[],"mappings":"AAKA,QAAA,MAgQE,YAAY,UAAW,MAAM,KAAG,OAAgE,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAE,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/_vendor/partial-json-parser/parser.js b/vendor/sdk/_vendor/partial-json-parser/parser.js new file mode 100644 index 0000000..b7b4ec3 --- /dev/null +++ b/vendor/sdk/_vendor/partial-json-parser/parser.js @@ -0,0 +1,226 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.partialParse = void 0; +const tokenize = (input) => { + let current = 0; + let tokens = []; + while (current < input.length) { + let char = input[current]; + if (char === '\\') { + current++; + continue; + } + if (char === '{') { + tokens.push({ + type: 'brace', + value: '{', + }); + current++; + continue; + } + if (char === '}') { + tokens.push({ + type: 'brace', + value: '}', + }); + current++; + continue; + } + if (char === '[') { + tokens.push({ + type: 'paren', + value: '[', + }); + current++; + continue; + } + if (char === ']') { + tokens.push({ + type: 'paren', + value: ']', + }); + current++; + continue; + } + if (char === ':') { + tokens.push({ + type: 'separator', + value: ':', + }); + current++; + continue; + } + if (char === ',') { + tokens.push({ + type: 'delimiter', + value: ',', + }); + current++; + continue; + } + if (char === '"') { + let value = ''; + let danglingQuote = false; + char = input[++current]; + while (char !== '"') { + if (current === input.length) { + danglingQuote = true; + break; + } + if (char === '\\') { + current++; + if (current === input.length) { + danglingQuote = true; + break; + } + value += char + input[current]; + char = input[++current]; + } + else { + value += char; + char = input[++current]; + } + } + char = input[++current]; + if (!danglingQuote) { + tokens.push({ + type: 'string', + value, + }); + } + continue; + } + let WHITESPACE = /\s/; + if (char && WHITESPACE.test(char)) { + current++; + continue; + } + let NUMBERS = /[0-9]/; + if ((char && NUMBERS.test(char)) || char === '-' || char === '.') { + let value = ''; + if (char === '-') { + value += char; + char = input[++current]; + } + while ((char && NUMBERS.test(char)) || char === '.') { + value += char; + char = input[++current]; + } + tokens.push({ + type: 'number', + value, + }); + continue; + } + let LETTERS = /[a-z]/i; + if (char && LETTERS.test(char)) { + let value = ''; + while (char && LETTERS.test(char)) { + if (current === input.length) { + break; + } + value += char; + char = input[++current]; + } + if (value == 'true' || value == 'false' || value === 'null') { + tokens.push({ + type: 'name', + value, + }); + } + else { + // unknown token, e.g. `nul` which isn't quite `null` + current++; + continue; + } + continue; + } + current++; + } + return tokens; +}, strip = (tokens) => { + if (tokens.length === 0) { + return tokens; + } + let lastToken = tokens[tokens.length - 1]; + switch (lastToken.type) { + case 'separator': + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + break; + case 'number': + let lastCharacterOfLastToken = lastToken.value[lastToken.value.length - 1]; + if (lastCharacterOfLastToken === '.' || lastCharacterOfLastToken === '-') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + case 'string': + let tokenBeforeTheLastToken = tokens[tokens.length - 2]; + if (tokenBeforeTheLastToken?.type === 'delimiter') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + else if (tokenBeforeTheLastToken?.type === 'brace' && tokenBeforeTheLastToken.value === '{') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + break; + case 'delimiter': + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + break; + } + return tokens; +}, unstrip = (tokens) => { + let tail = []; + tokens.map((token) => { + if (token.type === 'brace') { + if (token.value === '{') { + tail.push('}'); + } + else { + tail.splice(tail.lastIndexOf('}'), 1); + } + } + if (token.type === 'paren') { + if (token.value === '[') { + tail.push(']'); + } + else { + tail.splice(tail.lastIndexOf(']'), 1); + } + } + }); + if (tail.length > 0) { + tail.reverse().map((item) => { + if (item === '}') { + tokens.push({ + type: 'brace', + value: '}', + }); + } + else if (item === ']') { + tokens.push({ + type: 'paren', + value: ']', + }); + } + }); + } + return tokens; +}, generate = (tokens) => { + let output = ''; + tokens.map((token) => { + switch (token.type) { + case 'string': + output += '"' + token.value + '"'; + break; + default: + output += token.value; + break; + } + }); + return output; +}, partialParse = (input) => JSON.parse(generate(unstrip(strip(tokenize(input))))); +exports.partialParse = partialParse; +//# sourceMappingURL=parser.js.map \ No newline at end of file diff --git a/vendor/sdk/_vendor/partial-json-parser/parser.js.map b/vendor/sdk/_vendor/partial-json-parser/parser.js.map new file mode 100644 index 0000000..3c5eda6 --- /dev/null +++ b/vendor/sdk/_vendor/partial-json-parser/parser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/_vendor/partial-json-parser/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/_vendor/partial-json-parser/parser.mjs b/vendor/sdk/_vendor/partial-json-parser/parser.mjs new file mode 100644 index 0000000..d2e0d5c --- /dev/null +++ b/vendor/sdk/_vendor/partial-json-parser/parser.mjs @@ -0,0 +1,223 @@ +const tokenize = (input) => { + let current = 0; + let tokens = []; + while (current < input.length) { + let char = input[current]; + if (char === '\\') { + current++; + continue; + } + if (char === '{') { + tokens.push({ + type: 'brace', + value: '{', + }); + current++; + continue; + } + if (char === '}') { + tokens.push({ + type: 'brace', + value: '}', + }); + current++; + continue; + } + if (char === '[') { + tokens.push({ + type: 'paren', + value: '[', + }); + current++; + continue; + } + if (char === ']') { + tokens.push({ + type: 'paren', + value: ']', + }); + current++; + continue; + } + if (char === ':') { + tokens.push({ + type: 'separator', + value: ':', + }); + current++; + continue; + } + if (char === ',') { + tokens.push({ + type: 'delimiter', + value: ',', + }); + current++; + continue; + } + if (char === '"') { + let value = ''; + let danglingQuote = false; + char = input[++current]; + while (char !== '"') { + if (current === input.length) { + danglingQuote = true; + break; + } + if (char === '\\') { + current++; + if (current === input.length) { + danglingQuote = true; + break; + } + value += char + input[current]; + char = input[++current]; + } + else { + value += char; + char = input[++current]; + } + } + char = input[++current]; + if (!danglingQuote) { + tokens.push({ + type: 'string', + value, + }); + } + continue; + } + let WHITESPACE = /\s/; + if (char && WHITESPACE.test(char)) { + current++; + continue; + } + let NUMBERS = /[0-9]/; + if ((char && NUMBERS.test(char)) || char === '-' || char === '.') { + let value = ''; + if (char === '-') { + value += char; + char = input[++current]; + } + while ((char && NUMBERS.test(char)) || char === '.') { + value += char; + char = input[++current]; + } + tokens.push({ + type: 'number', + value, + }); + continue; + } + let LETTERS = /[a-z]/i; + if (char && LETTERS.test(char)) { + let value = ''; + while (char && LETTERS.test(char)) { + if (current === input.length) { + break; + } + value += char; + char = input[++current]; + } + if (value == 'true' || value == 'false' || value === 'null') { + tokens.push({ + type: 'name', + value, + }); + } + else { + // unknown token, e.g. `nul` which isn't quite `null` + current++; + continue; + } + continue; + } + current++; + } + return tokens; +}, strip = (tokens) => { + if (tokens.length === 0) { + return tokens; + } + let lastToken = tokens[tokens.length - 1]; + switch (lastToken.type) { + case 'separator': + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + break; + case 'number': + let lastCharacterOfLastToken = lastToken.value[lastToken.value.length - 1]; + if (lastCharacterOfLastToken === '.' || lastCharacterOfLastToken === '-') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + case 'string': + let tokenBeforeTheLastToken = tokens[tokens.length - 2]; + if (tokenBeforeTheLastToken?.type === 'delimiter') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + else if (tokenBeforeTheLastToken?.type === 'brace' && tokenBeforeTheLastToken.value === '{') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + break; + case 'delimiter': + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + break; + } + return tokens; +}, unstrip = (tokens) => { + let tail = []; + tokens.map((token) => { + if (token.type === 'brace') { + if (token.value === '{') { + tail.push('}'); + } + else { + tail.splice(tail.lastIndexOf('}'), 1); + } + } + if (token.type === 'paren') { + if (token.value === '[') { + tail.push(']'); + } + else { + tail.splice(tail.lastIndexOf(']'), 1); + } + } + }); + if (tail.length > 0) { + tail.reverse().map((item) => { + if (item === '}') { + tokens.push({ + type: 'brace', + value: '}', + }); + } + else if (item === ']') { + tokens.push({ + type: 'paren', + value: ']', + }); + } + }); + } + return tokens; +}, generate = (tokens) => { + let output = ''; + tokens.map((token) => { + switch (token.type) { + case 'string': + output += '"' + token.value + '"'; + break; + default: + output += token.value; + break; + } + }); + return output; +}, partialParse = (input) => JSON.parse(generate(unstrip(strip(tokenize(input))))); +export { partialParse }; +//# sourceMappingURL=parser.mjs.map \ No newline at end of file diff --git a/vendor/sdk/_vendor/partial-json-parser/parser.mjs.map b/vendor/sdk/_vendor/partial-json-parser/parser.mjs.map new file mode 100644 index 0000000..f95969a --- /dev/null +++ b/vendor/sdk/_vendor/partial-json-parser/parser.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"parser.mjs","sourceRoot":"","sources":["../../src/_vendor/partial-json-parser/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/core.d.ts b/vendor/sdk/core.d.ts new file mode 100644 index 0000000..c897a61 --- /dev/null +++ b/vendor/sdk/core.d.ts @@ -0,0 +1,248 @@ + + +import { Stream } from "./streaming.js"; +import { APIError } from "./error.js"; +import { type Readable, type Agent, type RequestInfo, type RequestInit, type Response, type HeadersInit } from "./_shims/index.js"; +export { type Response }; +import { BlobLike } from "./uploads.js"; +export { maybeMultipartFormRequestOptions, multipartFormRequestOptions, createForm, type Uploadable, } from "./uploads.js"; +export type Fetch = (url: RequestInfo, init?: RequestInit) => Promise; +type PromiseOrValue = T | Promise; +type APIResponseProps = { + response: Response; + options: FinalRequestOptions; + controller: AbortController; +}; +type WithRequestID = T extends Array | Response | AbstractPage ? T : T extends Record ? T & { + _request_id?: string | null; +} : T; +/** + * A subclass of `Promise` providing additional helper methods + * for interacting with the SDK. + */ +export declare class APIPromise extends Promise> { + private responsePromise; + private parseResponse; + private parsedPromise; + constructor(responsePromise: Promise, parseResponse?: (props: APIResponseProps) => PromiseOrValue>); + _thenUnwrap(transform: (data: T, props: APIResponseProps) => U): APIPromise; + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + asResponse(): Promise; + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + withResponse(): Promise<{ + data: T; + response: Response; + request_id: string | null | undefined; + }>; + private parse; + then, TResult2 = never>(onfulfilled?: ((value: WithRequestID) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise | TResult>; + finally(onfinally?: (() => void) | undefined | null): Promise>; +} +export declare abstract class APIClient { + baseURL: string; + maxRetries: number; + timeout: number; + httpAgent: Agent | undefined; + private fetch; + protected idempotencyHeader?: string; + constructor({ baseURL, maxRetries, timeout, // 10 minutes + httpAgent, fetch: overriddenFetch, }: { + baseURL: string; + maxRetries?: number | undefined; + timeout: number | undefined; + httpAgent: Agent | undefined; + fetch: Fetch | undefined; + }); + protected authHeaders(opts: FinalRequestOptions): Headers; + /** + * Override this to add your own default headers, for example: + * + * { + * ...super.defaultHeaders(), + * Authorization: 'Bearer 123', + * } + */ + protected defaultHeaders(opts: FinalRequestOptions): Headers; + protected abstract defaultQuery(): DefaultQuery | undefined; + /** + * Override this to add your own headers validation: + */ + protected validateHeaders(headers: Headers, customHeaders: Headers): void; + protected defaultIdempotencyKey(): string; + get(path: string, opts?: PromiseOrValue>): APIPromise; + post(path: string, opts?: PromiseOrValue>): APIPromise; + patch(path: string, opts?: PromiseOrValue>): APIPromise; + put(path: string, opts?: PromiseOrValue>): APIPromise; + delete(path: string, opts?: PromiseOrValue>): APIPromise; + private methodRequest; + getAPIList = AbstractPage>(path: string, Page: new (...args: any[]) => PageClass, opts?: RequestOptions): PagePromise; + private calculateContentLength; + buildRequest(options: FinalRequestOptions, { retryCount }?: { + retryCount?: number; + }): { + req: RequestInit; + url: string; + timeout: number; + }; + private buildHeaders; + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + protected prepareOptions(options: FinalRequestOptions): Promise; + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + */ + protected prepareRequest(request: RequestInit, { url, options }: { + url: string; + options: FinalRequestOptions; + }): Promise; + protected parseHeaders(headers: HeadersInit | null | undefined): Record; + protected makeStatusError(status: number | undefined, error: Object | undefined, message: string | undefined, headers: Headers | undefined): APIError; + request(options: PromiseOrValue>, remainingRetries?: number | null): APIPromise; + private makeRequest; + requestAPIList = AbstractPage>(Page: new (...args: ConstructorParameters) => PageClass, options: FinalRequestOptions): PagePromise; + buildURL(path: string, query: Req | null | undefined): string; + protected stringifyQuery(query: Record): string; + fetchWithTimeout(url: RequestInfo, init: RequestInit | undefined, ms: number, controller: AbortController): Promise; + private shouldRetry; + private retryRequest; + private calculateDefaultRetryTimeoutMillis; + private getUserAgent; +} +export type PageInfo = { + url: URL; +} | { + params: Record | null; +}; +export declare abstract class AbstractPage implements AsyncIterable { + #private; + protected options: FinalRequestOptions; + protected response: Response; + protected body: unknown; + constructor(client: APIClient, response: Response, body: unknown, options: FinalRequestOptions); + /** + * @deprecated Use nextPageInfo instead + */ + abstract nextPageParams(): Partial> | null; + abstract nextPageInfo(): PageInfo | null; + abstract getPaginatedItems(): Item[]; + hasNextPage(): boolean; + getNextPage(): Promise; + iterPages(): AsyncGenerator; + [Symbol.asyncIterator](): AsyncGenerator; +} +/** + * This subclass of Promise will resolve to an instantiated Page once the request completes. + * + * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ +export declare class PagePromise, Item = ReturnType[number]> extends APIPromise implements AsyncIterable { + constructor(client: APIClient, request: Promise, Page: new (...args: ConstructorParameters) => PageClass); + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + [Symbol.asyncIterator](): AsyncGenerator; +} +export declare const createResponseHeaders: (headers: Awaited>['headers']) => Record; +type HTTPMethod = 'get' | 'post' | 'put' | 'patch' | 'delete'; +export type RequestClient = { + fetch: Fetch; +}; +export type Headers = Record; +export type DefaultQuery = Record; +export type KeysEnum = { + [P in keyof Required]: true; +}; +export type RequestOptions | Readable | BlobLike | ArrayBufferView | ArrayBuffer> = { + method?: HTTPMethod; + path?: string; + query?: Req | undefined; + body?: Req | null | undefined; + headers?: Headers | undefined; + maxRetries?: number; + stream?: boolean | undefined; + timeout?: number; + httpAgent?: Agent; + signal?: AbortSignal | undefined | null; + idempotencyKey?: string; + __binaryRequest?: boolean | undefined; + __binaryResponse?: boolean | undefined; + __streamClass?: typeof Stream; +}; +export declare const isRequestOptions: (obj: unknown) => obj is RequestOptions; +export type FinalRequestOptions | Readable | DataView> = RequestOptions & { + method: HTTPMethod; + path: string; +}; +export declare const safeJSON: (text: string) => any; +export declare const sleep: (ms: number) => Promise; +export declare const castToError: (err: any) => Error; +export declare const ensurePresent: (value: T | null | undefined) => T; +/** + * Read an environment variable. + * + * Trims beginning and trailing whitespace. + * + * Will return undefined if the environment variable doesn't exist or cannot be accessed. + */ +export declare const readEnv: (env: string) => string | undefined; +export declare const coerceInteger: (value: unknown) => number; +export declare const coerceFloat: (value: unknown) => number; +export declare const coerceBoolean: (value: unknown) => boolean; +export declare const maybeCoerceInteger: (value: unknown) => number | undefined; +export declare const maybeCoerceFloat: (value: unknown) => number | undefined; +export declare const maybeCoerceBoolean: (value: unknown) => boolean | undefined; +export declare function isEmptyObj(obj: Object | null | undefined): boolean; +export declare function hasOwn(obj: Object, key: string): boolean; +export declare function debug(action: string, ...args: any[]): void; +export declare const isRunningInBrowser: () => boolean; +export interface HeadersProtocol { + get: (header: string) => string | null | undefined; +} +export type HeadersLike = Record | HeadersProtocol; +export declare const isHeadersProtocol: (headers: any) => headers is HeadersProtocol; +export declare const getRequiredHeader: (headers: HeadersLike | Headers, header: string) => string; +export declare const getHeader: (headers: HeadersLike | Headers, header: string) => string | undefined; +/** + * Encodes a string to Base64 format. + */ +export declare const toBase64: (str: string | null | undefined) => string; +export declare function isObj(obj: unknown): obj is Record; +//# sourceMappingURL=core.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/core.d.ts.map b/vendor/sdk/core.d.ts.map new file mode 100644 index 0000000..ff94828 --- /dev/null +++ b/vendor/sdk/core.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/core.js b/vendor/sdk/core.js new file mode 100644 index 0000000..6bf95fb --- /dev/null +++ b/vendor/sdk/core.js @@ -0,0 +1,935 @@ +"use strict"; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AbstractPage_client; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isObj = exports.toBase64 = exports.getHeader = exports.getRequiredHeader = exports.isHeadersProtocol = exports.isRunningInBrowser = exports.debug = exports.hasOwn = exports.isEmptyObj = exports.maybeCoerceBoolean = exports.maybeCoerceFloat = exports.maybeCoerceInteger = exports.coerceBoolean = exports.coerceFloat = exports.coerceInteger = exports.readEnv = exports.ensurePresent = exports.castToError = exports.sleep = exports.safeJSON = exports.isRequestOptions = exports.createResponseHeaders = exports.PagePromise = exports.AbstractPage = exports.APIClient = exports.APIPromise = exports.createForm = exports.multipartFormRequestOptions = exports.maybeMultipartFormRequestOptions = void 0; +const version_1 = require("./version.js"); +const streaming_1 = require("./streaming.js"); +const error_1 = require("./error.js"); +const index_1 = require("./_shims/index.js"); +const uploads_1 = require("./uploads.js"); +var uploads_2 = require("./uploads.js"); +Object.defineProperty(exports, "maybeMultipartFormRequestOptions", { enumerable: true, get: function () { return uploads_2.maybeMultipartFormRequestOptions; } }); +Object.defineProperty(exports, "multipartFormRequestOptions", { enumerable: true, get: function () { return uploads_2.multipartFormRequestOptions; } }); +Object.defineProperty(exports, "createForm", { enumerable: true, get: function () { return uploads_2.createForm; } }); +async function defaultParseResponse(props) { + const { response } = props; + if (props.options.stream) { + debug('response', response.status, response.url, response.headers, response.body); + // Note: there is an invariant here that isn't represented in the type system + // that if you set `stream: true` the response type must also be `Stream` + if (props.options.__streamClass) { + return props.options.__streamClass.fromSSEResponse(response, props.controller); + } + return streaming_1.Stream.fromSSEResponse(response, props.controller); + } + // fetch refuses to read the body when the status code is 204. + if (response.status === 204) { + return null; + } + if (props.options.__binaryResponse) { + return response; + } + const contentType = response.headers.get('content-type'); + const isJSON = contentType?.includes('application/json') || contentType?.includes('application/vnd.api+json'); + if (isJSON) { + const json = await response.json(); + debug('response', response.status, response.url, response.headers, json); + return _addRequestID(json, response); + } + const text = await response.text(); + debug('response', response.status, response.url, response.headers, text); + // TODO handle blob, arraybuffer, other content types, etc. + return text; +} +function _addRequestID(value, response) { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + return value; + } + return Object.defineProperty(value, '_request_id', { + value: response.headers.get('request-id'), + enumerable: false, + }); +} +/** + * A subclass of `Promise` providing additional helper methods + * for interacting with the SDK. + */ +class APIPromise extends Promise { + constructor(responsePromise, parseResponse = defaultParseResponse) { + super((resolve) => { + // this is maybe a bit weird but this has to be a no-op to not implicitly + // parse the response body; instead .then, .catch, .finally are overridden + // to parse the response + resolve(null); + }); + this.responsePromise = responsePromise; + this.parseResponse = parseResponse; + } + _thenUnwrap(transform) { + return new APIPromise(this.responsePromise, async (props) => _addRequestID(transform(await this.parseResponse(props), props), props.response)); + } + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + asResponse() { + return this.responsePromise.then((p) => p.response); + } + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + async withResponse() { + const [data, response] = await Promise.all([this.parse(), this.asResponse()]); + return { data, response, request_id: response.headers.get('request-id') }; + } + parse() { + if (!this.parsedPromise) { + this.parsedPromise = this.responsePromise.then(this.parseResponse); + } + return this.parsedPromise; + } + then(onfulfilled, onrejected) { + return this.parse().then(onfulfilled, onrejected); + } + catch(onrejected) { + return this.parse().catch(onrejected); + } + finally(onfinally) { + return this.parse().finally(onfinally); + } +} +exports.APIPromise = APIPromise; +class APIClient { + constructor({ baseURL, maxRetries = 2, timeout = 600000, // 10 minutes + httpAgent, fetch: overriddenFetch, }) { + this.baseURL = baseURL; + this.maxRetries = validatePositiveInteger('maxRetries', maxRetries); + this.timeout = validatePositiveInteger('timeout', timeout); + this.httpAgent = httpAgent; + this.fetch = overriddenFetch ?? index_1.fetch; + } + authHeaders(opts) { + return {}; + } + /** + * Override this to add your own default headers, for example: + * + * { + * ...super.defaultHeaders(), + * Authorization: 'Bearer 123', + * } + */ + defaultHeaders(opts) { + return { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': this.getUserAgent(), + ...getPlatformHeaders(), + ...this.authHeaders(opts), + }; + } + /** + * Override this to add your own headers validation: + */ + validateHeaders(headers, customHeaders) { } + defaultIdempotencyKey() { + return `stainless-node-retry-${uuid4()}`; + } + get(path, opts) { + return this.methodRequest('get', path, opts); + } + post(path, opts) { + return this.methodRequest('post', path, opts); + } + patch(path, opts) { + return this.methodRequest('patch', path, opts); + } + put(path, opts) { + return this.methodRequest('put', path, opts); + } + delete(path, opts) { + return this.methodRequest('delete', path, opts); + } + methodRequest(method, path, opts) { + return this.request(Promise.resolve(opts).then(async (opts) => { + const body = opts && (0, uploads_1.isBlobLike)(opts?.body) ? new DataView(await opts.body.arrayBuffer()) + : opts?.body instanceof DataView ? opts.body + : opts?.body instanceof ArrayBuffer ? new DataView(opts.body) + : opts && ArrayBuffer.isView(opts?.body) ? new DataView(opts.body.buffer) + : opts?.body; + return { method, path, ...opts, body }; + })); + } + getAPIList(path, Page, opts) { + return this.requestAPIList(Page, { method: 'get', path, ...opts }); + } + calculateContentLength(body) { + if (typeof body === 'string') { + if (typeof Buffer !== 'undefined') { + return Buffer.byteLength(body, 'utf8').toString(); + } + if (typeof TextEncoder !== 'undefined') { + const encoder = new TextEncoder(); + const encoded = encoder.encode(body); + return encoded.length.toString(); + } + } + else if (ArrayBuffer.isView(body)) { + return body.byteLength.toString(); + } + return null; + } + buildRequest(options, { retryCount = 0 } = {}) { + options = { ...options }; + const { method, path, query, headers: headers = {} } = options; + const body = ArrayBuffer.isView(options.body) || (options.__binaryRequest && typeof options.body === 'string') ? + options.body + : (0, uploads_1.isMultipartBody)(options.body) ? options.body.body + : options.body ? JSON.stringify(options.body, null, 2) + : null; + const contentLength = this.calculateContentLength(body); + const url = this.buildURL(path, query); + if ('timeout' in options) + validatePositiveInteger('timeout', options.timeout); + options.timeout = options.timeout ?? this.timeout; + const httpAgent = options.httpAgent ?? this.httpAgent ?? (0, index_1.getDefaultAgent)(url); + const minAgentTimeout = options.timeout + 1000; + if (typeof httpAgent?.options?.timeout === 'number' && + minAgentTimeout > (httpAgent.options.timeout ?? 0)) { + // Allow any given request to bump our agent active socket timeout. + // This may seem strange, but leaking active sockets should be rare and not particularly problematic, + // and without mutating agent we would need to create more of them. + // This tradeoff optimizes for performance. + httpAgent.options.timeout = minAgentTimeout; + } + if (this.idempotencyHeader && method !== 'get') { + if (!options.idempotencyKey) + options.idempotencyKey = this.defaultIdempotencyKey(); + headers[this.idempotencyHeader] = options.idempotencyKey; + } + const reqHeaders = this.buildHeaders({ options, headers, contentLength, retryCount }); + const req = { + method, + ...(body && { body: body }), + headers: reqHeaders, + ...(httpAgent && { agent: httpAgent }), + // @ts-ignore node-fetch uses a custom AbortSignal type that is + // not compatible with standard web types + signal: options.signal ?? null, + }; + return { req, url, timeout: options.timeout }; + } + buildHeaders({ options, headers, contentLength, retryCount, }) { + const reqHeaders = {}; + if (contentLength) { + reqHeaders['content-length'] = contentLength; + } + const defaultHeaders = this.defaultHeaders(options); + applyHeadersMut(reqHeaders, defaultHeaders); + applyHeadersMut(reqHeaders, headers); + // let builtin fetch set the Content-Type for multipart bodies + if ((0, uploads_1.isMultipartBody)(options.body) && index_1.kind !== 'node') { + delete reqHeaders['content-type']; + } + // Don't set theses headers if they were already set or removed through default headers or by the caller. + // We check `defaultHeaders` and `headers`, which can contain nulls, instead of `reqHeaders` to account + // for the removal case. + if ((0, exports.getHeader)(defaultHeaders, 'x-stainless-retry-count') === undefined && + (0, exports.getHeader)(headers, 'x-stainless-retry-count') === undefined) { + reqHeaders['x-stainless-retry-count'] = String(retryCount); + } + if ((0, exports.getHeader)(defaultHeaders, 'x-stainless-timeout') === undefined && + (0, exports.getHeader)(headers, 'x-stainless-timeout') === undefined && + options.timeout) { + reqHeaders['x-stainless-timeout'] = String(options.timeout); + } + this.validateHeaders(reqHeaders, headers); + return reqHeaders; + } + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + async prepareOptions(options) { } + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + */ + async prepareRequest(request, { url, options }) { } + parseHeaders(headers) { + return (!headers ? {} + : Symbol.iterator in headers ? + Object.fromEntries(Array.from(headers).map((header) => [...header])) + : { ...headers }); + } + makeStatusError(status, error, message, headers) { + return error_1.APIError.generate(status, error, message, headers); + } + request(options, remainingRetries = null) { + return new APIPromise(this.makeRequest(options, remainingRetries)); + } + async makeRequest(optionsInput, retriesRemaining) { + const options = await optionsInput; + const maxRetries = options.maxRetries ?? this.maxRetries; + if (retriesRemaining == null) { + retriesRemaining = maxRetries; + } + await this.prepareOptions(options); + const { req, url, timeout } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining }); + await this.prepareRequest(req, { url, options }); + debug('request', url, options, req.headers); + if (options.signal?.aborted) { + throw new error_1.APIUserAbortError(); + } + const controller = new AbortController(); + const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(exports.castToError); + if (response instanceof Error) { + if (options.signal?.aborted) { + throw new error_1.APIUserAbortError(); + } + if (retriesRemaining) { + return this.retryRequest(options, retriesRemaining); + } + if (response.name === 'AbortError') { + throw new error_1.APIConnectionTimeoutError(); + } + throw new error_1.APIConnectionError({ cause: response }); + } + const responseHeaders = (0, exports.createResponseHeaders)(response.headers); + if (!response.ok) { + if (retriesRemaining && this.shouldRetry(response)) { + const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; + debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders); + return this.retryRequest(options, retriesRemaining, responseHeaders); + } + const errText = await response.text().catch((e) => (0, exports.castToError)(e).message); + const errJSON = (0, exports.safeJSON)(errText); + const errMessage = errJSON ? undefined : errText; + const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`; + debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage); + const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders); + throw err; + } + return { response, options, controller }; + } + requestAPIList(Page, options) { + const request = this.makeRequest(options, null); + return new PagePromise(this, request, Page); + } + buildURL(path, query) { + const url = isAbsoluteURL(path) ? + new URL(path) + : new URL(this.baseURL + (this.baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path)); + const defaultQuery = this.defaultQuery(); + if (!isEmptyObj(defaultQuery)) { + query = { ...defaultQuery, ...query }; + } + if (typeof query === 'object' && query && !Array.isArray(query)) { + url.search = this.stringifyQuery(query); + } + return url.toString(); + } + stringifyQuery(query) { + return Object.entries(query) + .filter(([_, value]) => typeof value !== 'undefined') + .map(([key, value]) => { + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + } + if (value === null) { + return `${encodeURIComponent(key)}=`; + } + throw new error_1.AnthropicError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`); + }) + .join('&'); + } + async fetchWithTimeout(url, init, ms, controller) { + const { signal, ...options } = init || {}; + if (signal) + signal.addEventListener('abort', () => controller.abort()); + const timeout = setTimeout(() => controller.abort(), ms); + const fetchOptions = { + signal: controller.signal, + ...options, + }; + if (fetchOptions.method) { + // Custom methods like 'patch' need to be uppercased + // See https://github.com/nodejs/undici/issues/2294 + fetchOptions.method = fetchOptions.method.toUpperCase(); + } + return ( + // use undefined this binding; fetch errors if bound to something else in browser/cloudflare + this.fetch.call(undefined, url, fetchOptions).finally(() => { + clearTimeout(timeout); + })); + } + shouldRetry(response) { + // Note this is not a standard header. + const shouldRetryHeader = response.headers.get('x-should-retry'); + // If the server explicitly says whether or not to retry, obey. + if (shouldRetryHeader === 'true') + return true; + if (shouldRetryHeader === 'false') + return false; + // Retry on request timeouts. + if (response.status === 408) + return true; + // Retry on lock timeouts. + if (response.status === 409) + return true; + // Retry on rate limits. + if (response.status === 429) + return true; + // Retry internal errors. + if (response.status >= 500) + return true; + return false; + } + async retryRequest(options, retriesRemaining, responseHeaders) { + let timeoutMillis; + // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it. + const retryAfterMillisHeader = responseHeaders?.['retry-after-ms']; + if (retryAfterMillisHeader) { + const timeoutMs = parseFloat(retryAfterMillisHeader); + if (!Number.isNaN(timeoutMs)) { + timeoutMillis = timeoutMs; + } + } + // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After + const retryAfterHeader = responseHeaders?.['retry-after']; + if (retryAfterHeader && !timeoutMillis) { + const timeoutSeconds = parseFloat(retryAfterHeader); + if (!Number.isNaN(timeoutSeconds)) { + timeoutMillis = timeoutSeconds * 1000; + } + else { + timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); + } + } + // If the API asks us to wait a certain amount of time (and it's a reasonable amount), + // just do what it says, but otherwise calculate a default + if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) { + const maxRetries = options.maxRetries ?? this.maxRetries; + timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); + } + await (0, exports.sleep)(timeoutMillis); + return this.makeRequest(options, retriesRemaining - 1); + } + calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { + const initialRetryDelay = 0.5; + const maxRetryDelay = 8.0; + const numRetries = maxRetries - retriesRemaining; + // Apply exponential backoff, but not more than the max. + const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); + // Apply some jitter, take up to at most 25 percent of the retry time. + const jitter = 1 - Math.random() * 0.25; + return sleepSeconds * jitter * 1000; + } + getUserAgent() { + return `${this.constructor.name}/JS ${version_1.VERSION}`; + } +} +exports.APIClient = APIClient; +class AbstractPage { + constructor(client, response, body, options) { + _AbstractPage_client.set(this, void 0); + __classPrivateFieldSet(this, _AbstractPage_client, client, "f"); + this.options = options; + this.response = response; + this.body = body; + } + hasNextPage() { + const items = this.getPaginatedItems(); + if (!items.length) + return false; + return this.nextPageInfo() != null; + } + async getNextPage() { + const nextInfo = this.nextPageInfo(); + if (!nextInfo) { + throw new error_1.AnthropicError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.'); + } + const nextOptions = { ...this.options }; + if ('params' in nextInfo && typeof nextOptions.query === 'object') { + nextOptions.query = { ...nextOptions.query, ...nextInfo.params }; + } + else if ('url' in nextInfo) { + const params = [...Object.entries(nextOptions.query || {}), ...nextInfo.url.searchParams.entries()]; + for (const [key, value] of params) { + nextInfo.url.searchParams.set(key, value); + } + nextOptions.query = undefined; + nextOptions.path = nextInfo.url.toString(); + } + return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); + } + async *iterPages() { + // eslint-disable-next-line @typescript-eslint/no-this-alias + let page = this; + yield page; + while (page.hasNextPage()) { + page = await page.getNextPage(); + yield page; + } + } + async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() { + for await (const page of this.iterPages()) { + for (const item of page.getPaginatedItems()) { + yield item; + } + } + } +} +exports.AbstractPage = AbstractPage; +/** + * This subclass of Promise will resolve to an instantiated Page once the request completes. + * + * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ +class PagePromise extends APIPromise { + constructor(client, request, Page) { + super(request, async (props) => new Page(client, props.response, await defaultParseResponse(props), props.options)); + } + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + async *[Symbol.asyncIterator]() { + const page = await this; + for await (const item of page) { + yield item; + } + } +} +exports.PagePromise = PagePromise; +const createResponseHeaders = (headers) => { + return new Proxy(Object.fromEntries( + // @ts-ignore + headers.entries()), { + get(target, name) { + const key = name.toString(); + return target[key.toLowerCase()] || target[key]; + }, + }); +}; +exports.createResponseHeaders = createResponseHeaders; +// This is required so that we can determine if a given object matches the RequestOptions +// type at runtime. While this requires duplication, it is enforced by the TypeScript +// compiler such that any missing / extraneous keys will cause an error. +const requestOptionsKeys = { + method: true, + path: true, + query: true, + body: true, + headers: true, + maxRetries: true, + stream: true, + timeout: true, + httpAgent: true, + signal: true, + idempotencyKey: true, + __binaryRequest: true, + __binaryResponse: true, + __streamClass: true, +}; +const isRequestOptions = (obj) => { + return (typeof obj === 'object' && + obj !== null && + !isEmptyObj(obj) && + Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k))); +}; +exports.isRequestOptions = isRequestOptions; +const getPlatformProperties = () => { + if (typeof Deno !== 'undefined' && Deno.build != null) { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': version_1.VERSION, + 'X-Stainless-OS': normalizePlatform(Deno.build.os), + 'X-Stainless-Arch': normalizeArch(Deno.build.arch), + 'X-Stainless-Runtime': 'deno', + 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown', + }; + } + if (typeof EdgeRuntime !== 'undefined') { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': version_1.VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': `other:${EdgeRuntime}`, + 'X-Stainless-Runtime': 'edge', + 'X-Stainless-Runtime-Version': process.version, + }; + } + // Check if Node.js + if (Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]') { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': version_1.VERSION, + 'X-Stainless-OS': normalizePlatform(process.platform), + 'X-Stainless-Arch': normalizeArch(process.arch), + 'X-Stainless-Runtime': 'node', + 'X-Stainless-Runtime-Version': process.version, + }; + } + const browserInfo = getBrowserInfo(); + if (browserInfo) { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': version_1.VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': 'unknown', + 'X-Stainless-Runtime': `browser:${browserInfo.browser}`, + 'X-Stainless-Runtime-Version': browserInfo.version, + }; + } + // TODO add support for Cloudflare workers, etc. + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': version_1.VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': 'unknown', + 'X-Stainless-Runtime': 'unknown', + 'X-Stainless-Runtime-Version': 'unknown', + }; +}; +// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts +function getBrowserInfo() { + if (typeof navigator === 'undefined' || !navigator) { + return null; + } + // NOTE: The order matters here! + const browserPatterns = [ + { key: 'edge', pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'ie', pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'ie', pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'chrome', pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'firefox', pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'safari', pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ }, + ]; + // Find the FIRST matching browser + for (const { key, pattern } of browserPatterns) { + const match = pattern.exec(navigator.userAgent); + if (match) { + const major = match[1] || 0; + const minor = match[2] || 0; + const patch = match[3] || 0; + return { browser: key, version: `${major}.${minor}.${patch}` }; + } + } + return null; +} +const normalizeArch = (arch) => { + // Node docs: + // - https://nodejs.org/api/process.html#processarch + // Deno docs: + // - https://doc.deno.land/deno/stable/~/Deno.build + if (arch === 'x32') + return 'x32'; + if (arch === 'x86_64' || arch === 'x64') + return 'x64'; + if (arch === 'arm') + return 'arm'; + if (arch === 'aarch64' || arch === 'arm64') + return 'arm64'; + if (arch) + return `other:${arch}`; + return 'unknown'; +}; +const normalizePlatform = (platform) => { + // Node platforms: + // - https://nodejs.org/api/process.html#processplatform + // Deno platforms: + // - https://doc.deno.land/deno/stable/~/Deno.build + // - https://github.com/denoland/deno/issues/14799 + platform = platform.toLowerCase(); + // NOTE: this iOS check is untested and may not work + // Node does not work natively on IOS, there is a fork at + // https://github.com/nodejs-mobile/nodejs-mobile + // however it is unknown at the time of writing how to detect if it is running + if (platform.includes('ios')) + return 'iOS'; + if (platform === 'android') + return 'Android'; + if (platform === 'darwin') + return 'MacOS'; + if (platform === 'win32') + return 'Windows'; + if (platform === 'freebsd') + return 'FreeBSD'; + if (platform === 'openbsd') + return 'OpenBSD'; + if (platform === 'linux') + return 'Linux'; + if (platform) + return `Other:${platform}`; + return 'Unknown'; +}; +let _platformHeaders; +const getPlatformHeaders = () => { + return (_platformHeaders ?? (_platformHeaders = getPlatformProperties())); +}; +const safeJSON = (text) => { + try { + return JSON.parse(text); + } + catch (err) { + return undefined; + } +}; +exports.safeJSON = safeJSON; +// https://url.spec.whatwg.org/#url-scheme-string +const startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; +const isAbsoluteURL = (url) => { + return startsWithSchemeRegexp.test(url); +}; +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +exports.sleep = sleep; +const validatePositiveInteger = (name, n) => { + if (typeof n !== 'number' || !Number.isInteger(n)) { + throw new error_1.AnthropicError(`${name} must be an integer`); + } + if (n < 0) { + throw new error_1.AnthropicError(`${name} must be a positive integer`); + } + return n; +}; +const castToError = (err) => { + if (err instanceof Error) + return err; + if (typeof err === 'object' && err !== null) { + try { + return new Error(JSON.stringify(err)); + } + catch { } + } + return new Error(String(err)); +}; +exports.castToError = castToError; +const ensurePresent = (value) => { + if (value == null) + throw new error_1.AnthropicError(`Expected a value to be given but received ${value} instead.`); + return value; +}; +exports.ensurePresent = ensurePresent; +/** + * Read an environment variable. + * + * Trims beginning and trailing whitespace. + * + * Will return undefined if the environment variable doesn't exist or cannot be accessed. + */ +const readEnv = (env) => { + if (typeof process !== 'undefined') { + return process.env?.[env]?.trim() ?? undefined; + } + if (typeof Deno !== 'undefined') { + return Deno.env?.get?.(env)?.trim(); + } + return undefined; +}; +exports.readEnv = readEnv; +const coerceInteger = (value) => { + if (typeof value === 'number') + return Math.round(value); + if (typeof value === 'string') + return parseInt(value, 10); + throw new error_1.AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`); +}; +exports.coerceInteger = coerceInteger; +const coerceFloat = (value) => { + if (typeof value === 'number') + return value; + if (typeof value === 'string') + return parseFloat(value); + throw new error_1.AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`); +}; +exports.coerceFloat = coerceFloat; +const coerceBoolean = (value) => { + if (typeof value === 'boolean') + return value; + if (typeof value === 'string') + return value === 'true'; + return Boolean(value); +}; +exports.coerceBoolean = coerceBoolean; +const maybeCoerceInteger = (value) => { + if (value === undefined) { + return undefined; + } + return (0, exports.coerceInteger)(value); +}; +exports.maybeCoerceInteger = maybeCoerceInteger; +const maybeCoerceFloat = (value) => { + if (value === undefined) { + return undefined; + } + return (0, exports.coerceFloat)(value); +}; +exports.maybeCoerceFloat = maybeCoerceFloat; +const maybeCoerceBoolean = (value) => { + if (value === undefined) { + return undefined; + } + return (0, exports.coerceBoolean)(value); +}; +exports.maybeCoerceBoolean = maybeCoerceBoolean; +// https://stackoverflow.com/a/34491287 +function isEmptyObj(obj) { + if (!obj) + return true; + for (const _k in obj) + return false; + return true; +} +exports.isEmptyObj = isEmptyObj; +// https://eslint.org/docs/latest/rules/no-prototype-builtins +function hasOwn(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} +exports.hasOwn = hasOwn; +/** + * Copies headers from "newHeaders" onto "targetHeaders", + * using lower-case for all properties, + * ignoring any keys with undefined values, + * and deleting any keys with null values. + */ +function applyHeadersMut(targetHeaders, newHeaders) { + for (const k in newHeaders) { + if (!hasOwn(newHeaders, k)) + continue; + const lowerKey = k.toLowerCase(); + if (!lowerKey) + continue; + const val = newHeaders[k]; + if (val === null) { + delete targetHeaders[lowerKey]; + } + else if (val !== undefined) { + targetHeaders[lowerKey] = val; + } + } +} +function debug(action, ...args) { + if (typeof process !== 'undefined' && process?.env?.['DEBUG'] === 'true') { + console.log(`Anthropic:DEBUG:${action}`, ...args); + } +} +exports.debug = debug; +/** + * https://stackoverflow.com/a/2117523 + */ +const uuid4 = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +}; +const isRunningInBrowser = () => { + return ( + // @ts-ignore + typeof window !== 'undefined' && + // @ts-ignore + typeof window.document !== 'undefined' && + // @ts-ignore + typeof navigator !== 'undefined'); +}; +exports.isRunningInBrowser = isRunningInBrowser; +const isHeadersProtocol = (headers) => { + return typeof headers?.get === 'function'; +}; +exports.isHeadersProtocol = isHeadersProtocol; +const getRequiredHeader = (headers, header) => { + const foundHeader = (0, exports.getHeader)(headers, header); + if (foundHeader === undefined) { + throw new Error(`Could not find ${header} header`); + } + return foundHeader; +}; +exports.getRequiredHeader = getRequiredHeader; +const getHeader = (headers, header) => { + const lowerCasedHeader = header.toLowerCase(); + if ((0, exports.isHeadersProtocol)(headers)) { + // to deal with the case where the header looks like Stainless-Event-Id + const intercapsHeader = header[0]?.toUpperCase() + + header.substring(1).replace(/([^\w])(\w)/g, (_m, g1, g2) => g1 + g2.toUpperCase()); + for (const key of [header, lowerCasedHeader, header.toUpperCase(), intercapsHeader]) { + const value = headers.get(key); + if (value) { + return value; + } + } + } + for (const [key, value] of Object.entries(headers)) { + if (key.toLowerCase() === lowerCasedHeader) { + if (Array.isArray(value)) { + if (value.length <= 1) + return value[0]; + console.warn(`Received ${value.length} entries for the ${header} header, using the first entry.`); + return value[0]; + } + return value; + } + } + return undefined; +}; +exports.getHeader = getHeader; +/** + * Encodes a string to Base64 format. + */ +const toBase64 = (str) => { + if (!str) + return ''; + if (typeof Buffer !== 'undefined') { + return Buffer.from(str).toString('base64'); + } + if (typeof btoa !== 'undefined') { + return btoa(str); + } + throw new error_1.AnthropicError('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined'); +}; +exports.toBase64 = toBase64; +function isObj(obj) { + return obj != null && typeof obj === 'object' && !Array.isArray(obj); +} +exports.isObj = isObj; +//# sourceMappingURL=core.js.map \ No newline at end of file diff --git a/vendor/sdk/core.js.map b/vendor/sdk/core.js.map new file mode 100644 index 0000000..831101e --- /dev/null +++ b/vendor/sdk/core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.js","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/core.mjs b/vendor/sdk/core.mjs new file mode 100644 index 0000000..ab9cf03 --- /dev/null +++ b/vendor/sdk/core.mjs @@ -0,0 +1,903 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AbstractPage_client; +import { VERSION } from "./version.mjs"; +import { Stream } from "./streaming.mjs"; +import { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, } from "./error.mjs"; +import { kind as shimsKind, getDefaultAgent, fetch, } from "./_shims/index.mjs"; +import { isBlobLike, isMultipartBody } from "./uploads.mjs"; +export { maybeMultipartFormRequestOptions, multipartFormRequestOptions, createForm, } from "./uploads.mjs"; +async function defaultParseResponse(props) { + const { response } = props; + if (props.options.stream) { + debug('response', response.status, response.url, response.headers, response.body); + // Note: there is an invariant here that isn't represented in the type system + // that if you set `stream: true` the response type must also be `Stream` + if (props.options.__streamClass) { + return props.options.__streamClass.fromSSEResponse(response, props.controller); + } + return Stream.fromSSEResponse(response, props.controller); + } + // fetch refuses to read the body when the status code is 204. + if (response.status === 204) { + return null; + } + if (props.options.__binaryResponse) { + return response; + } + const contentType = response.headers.get('content-type'); + const isJSON = contentType?.includes('application/json') || contentType?.includes('application/vnd.api+json'); + if (isJSON) { + const json = await response.json(); + debug('response', response.status, response.url, response.headers, json); + return _addRequestID(json, response); + } + const text = await response.text(); + debug('response', response.status, response.url, response.headers, text); + // TODO handle blob, arraybuffer, other content types, etc. + return text; +} +function _addRequestID(value, response) { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + return value; + } + return Object.defineProperty(value, '_request_id', { + value: response.headers.get('request-id'), + enumerable: false, + }); +} +/** + * A subclass of `Promise` providing additional helper methods + * for interacting with the SDK. + */ +export class APIPromise extends Promise { + constructor(responsePromise, parseResponse = defaultParseResponse) { + super((resolve) => { + // this is maybe a bit weird but this has to be a no-op to not implicitly + // parse the response body; instead .then, .catch, .finally are overridden + // to parse the response + resolve(null); + }); + this.responsePromise = responsePromise; + this.parseResponse = parseResponse; + } + _thenUnwrap(transform) { + return new APIPromise(this.responsePromise, async (props) => _addRequestID(transform(await this.parseResponse(props), props), props.response)); + } + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + asResponse() { + return this.responsePromise.then((p) => p.response); + } + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + async withResponse() { + const [data, response] = await Promise.all([this.parse(), this.asResponse()]); + return { data, response, request_id: response.headers.get('request-id') }; + } + parse() { + if (!this.parsedPromise) { + this.parsedPromise = this.responsePromise.then(this.parseResponse); + } + return this.parsedPromise; + } + then(onfulfilled, onrejected) { + return this.parse().then(onfulfilled, onrejected); + } + catch(onrejected) { + return this.parse().catch(onrejected); + } + finally(onfinally) { + return this.parse().finally(onfinally); + } +} +export class APIClient { + constructor({ baseURL, maxRetries = 2, timeout = 600000, // 10 minutes + httpAgent, fetch: overriddenFetch, }) { + this.baseURL = baseURL; + this.maxRetries = validatePositiveInteger('maxRetries', maxRetries); + this.timeout = validatePositiveInteger('timeout', timeout); + this.httpAgent = httpAgent; + this.fetch = overriddenFetch ?? fetch; + } + authHeaders(opts) { + return {}; + } + /** + * Override this to add your own default headers, for example: + * + * { + * ...super.defaultHeaders(), + * Authorization: 'Bearer 123', + * } + */ + defaultHeaders(opts) { + return { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': this.getUserAgent(), + ...getPlatformHeaders(), + ...this.authHeaders(opts), + }; + } + /** + * Override this to add your own headers validation: + */ + validateHeaders(headers, customHeaders) { } + defaultIdempotencyKey() { + return `stainless-node-retry-${uuid4()}`; + } + get(path, opts) { + return this.methodRequest('get', path, opts); + } + post(path, opts) { + return this.methodRequest('post', path, opts); + } + patch(path, opts) { + return this.methodRequest('patch', path, opts); + } + put(path, opts) { + return this.methodRequest('put', path, opts); + } + delete(path, opts) { + return this.methodRequest('delete', path, opts); + } + methodRequest(method, path, opts) { + return this.request(Promise.resolve(opts).then(async (opts) => { + const body = opts && isBlobLike(opts?.body) ? new DataView(await opts.body.arrayBuffer()) + : opts?.body instanceof DataView ? opts.body + : opts?.body instanceof ArrayBuffer ? new DataView(opts.body) + : opts && ArrayBuffer.isView(opts?.body) ? new DataView(opts.body.buffer) + : opts?.body; + return { method, path, ...opts, body }; + })); + } + getAPIList(path, Page, opts) { + return this.requestAPIList(Page, { method: 'get', path, ...opts }); + } + calculateContentLength(body) { + if (typeof body === 'string') { + if (typeof Buffer !== 'undefined') { + return Buffer.byteLength(body, 'utf8').toString(); + } + if (typeof TextEncoder !== 'undefined') { + const encoder = new TextEncoder(); + const encoded = encoder.encode(body); + return encoded.length.toString(); + } + } + else if (ArrayBuffer.isView(body)) { + return body.byteLength.toString(); + } + return null; + } + buildRequest(options, { retryCount = 0 } = {}) { + options = { ...options }; + const { method, path, query, headers: headers = {} } = options; + const body = ArrayBuffer.isView(options.body) || (options.__binaryRequest && typeof options.body === 'string') ? + options.body + : isMultipartBody(options.body) ? options.body.body + : options.body ? JSON.stringify(options.body, null, 2) + : null; + const contentLength = this.calculateContentLength(body); + const url = this.buildURL(path, query); + if ('timeout' in options) + validatePositiveInteger('timeout', options.timeout); + options.timeout = options.timeout ?? this.timeout; + const httpAgent = options.httpAgent ?? this.httpAgent ?? getDefaultAgent(url); + const minAgentTimeout = options.timeout + 1000; + if (typeof httpAgent?.options?.timeout === 'number' && + minAgentTimeout > (httpAgent.options.timeout ?? 0)) { + // Allow any given request to bump our agent active socket timeout. + // This may seem strange, but leaking active sockets should be rare and not particularly problematic, + // and without mutating agent we would need to create more of them. + // This tradeoff optimizes for performance. + httpAgent.options.timeout = minAgentTimeout; + } + if (this.idempotencyHeader && method !== 'get') { + if (!options.idempotencyKey) + options.idempotencyKey = this.defaultIdempotencyKey(); + headers[this.idempotencyHeader] = options.idempotencyKey; + } + const reqHeaders = this.buildHeaders({ options, headers, contentLength, retryCount }); + const req = { + method, + ...(body && { body: body }), + headers: reqHeaders, + ...(httpAgent && { agent: httpAgent }), + // @ts-ignore node-fetch uses a custom AbortSignal type that is + // not compatible with standard web types + signal: options.signal ?? null, + }; + return { req, url, timeout: options.timeout }; + } + buildHeaders({ options, headers, contentLength, retryCount, }) { + const reqHeaders = {}; + if (contentLength) { + reqHeaders['content-length'] = contentLength; + } + const defaultHeaders = this.defaultHeaders(options); + applyHeadersMut(reqHeaders, defaultHeaders); + applyHeadersMut(reqHeaders, headers); + // let builtin fetch set the Content-Type for multipart bodies + if (isMultipartBody(options.body) && shimsKind !== 'node') { + delete reqHeaders['content-type']; + } + // Don't set theses headers if they were already set or removed through default headers or by the caller. + // We check `defaultHeaders` and `headers`, which can contain nulls, instead of `reqHeaders` to account + // for the removal case. + if (getHeader(defaultHeaders, 'x-stainless-retry-count') === undefined && + getHeader(headers, 'x-stainless-retry-count') === undefined) { + reqHeaders['x-stainless-retry-count'] = String(retryCount); + } + if (getHeader(defaultHeaders, 'x-stainless-timeout') === undefined && + getHeader(headers, 'x-stainless-timeout') === undefined && + options.timeout) { + reqHeaders['x-stainless-timeout'] = String(options.timeout); + } + this.validateHeaders(reqHeaders, headers); + return reqHeaders; + } + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + async prepareOptions(options) { } + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + */ + async prepareRequest(request, { url, options }) { } + parseHeaders(headers) { + return (!headers ? {} + : Symbol.iterator in headers ? + Object.fromEntries(Array.from(headers).map((header) => [...header])) + : { ...headers }); + } + makeStatusError(status, error, message, headers) { + return APIError.generate(status, error, message, headers); + } + request(options, remainingRetries = null) { + return new APIPromise(this.makeRequest(options, remainingRetries)); + } + async makeRequest(optionsInput, retriesRemaining) { + const options = await optionsInput; + const maxRetries = options.maxRetries ?? this.maxRetries; + if (retriesRemaining == null) { + retriesRemaining = maxRetries; + } + await this.prepareOptions(options); + const { req, url, timeout } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining }); + await this.prepareRequest(req, { url, options }); + debug('request', url, options, req.headers); + if (options.signal?.aborted) { + throw new APIUserAbortError(); + } + const controller = new AbortController(); + const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError); + if (response instanceof Error) { + if (options.signal?.aborted) { + throw new APIUserAbortError(); + } + if (retriesRemaining) { + return this.retryRequest(options, retriesRemaining); + } + if (response.name === 'AbortError') { + throw new APIConnectionTimeoutError(); + } + throw new APIConnectionError({ cause: response }); + } + const responseHeaders = createResponseHeaders(response.headers); + if (!response.ok) { + if (retriesRemaining && this.shouldRetry(response)) { + const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; + debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders); + return this.retryRequest(options, retriesRemaining, responseHeaders); + } + const errText = await response.text().catch((e) => castToError(e).message); + const errJSON = safeJSON(errText); + const errMessage = errJSON ? undefined : errText; + const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`; + debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage); + const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders); + throw err; + } + return { response, options, controller }; + } + requestAPIList(Page, options) { + const request = this.makeRequest(options, null); + return new PagePromise(this, request, Page); + } + buildURL(path, query) { + const url = isAbsoluteURL(path) ? + new URL(path) + : new URL(this.baseURL + (this.baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path)); + const defaultQuery = this.defaultQuery(); + if (!isEmptyObj(defaultQuery)) { + query = { ...defaultQuery, ...query }; + } + if (typeof query === 'object' && query && !Array.isArray(query)) { + url.search = this.stringifyQuery(query); + } + return url.toString(); + } + stringifyQuery(query) { + return Object.entries(query) + .filter(([_, value]) => typeof value !== 'undefined') + .map(([key, value]) => { + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + } + if (value === null) { + return `${encodeURIComponent(key)}=`; + } + throw new AnthropicError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`); + }) + .join('&'); + } + async fetchWithTimeout(url, init, ms, controller) { + const { signal, ...options } = init || {}; + if (signal) + signal.addEventListener('abort', () => controller.abort()); + const timeout = setTimeout(() => controller.abort(), ms); + const fetchOptions = { + signal: controller.signal, + ...options, + }; + if (fetchOptions.method) { + // Custom methods like 'patch' need to be uppercased + // See https://github.com/nodejs/undici/issues/2294 + fetchOptions.method = fetchOptions.method.toUpperCase(); + } + return ( + // use undefined this binding; fetch errors if bound to something else in browser/cloudflare + this.fetch.call(undefined, url, fetchOptions).finally(() => { + clearTimeout(timeout); + })); + } + shouldRetry(response) { + // Note this is not a standard header. + const shouldRetryHeader = response.headers.get('x-should-retry'); + // If the server explicitly says whether or not to retry, obey. + if (shouldRetryHeader === 'true') + return true; + if (shouldRetryHeader === 'false') + return false; + // Retry on request timeouts. + if (response.status === 408) + return true; + // Retry on lock timeouts. + if (response.status === 409) + return true; + // Retry on rate limits. + if (response.status === 429) + return true; + // Retry internal errors. + if (response.status >= 500) + return true; + return false; + } + async retryRequest(options, retriesRemaining, responseHeaders) { + let timeoutMillis; + // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it. + const retryAfterMillisHeader = responseHeaders?.['retry-after-ms']; + if (retryAfterMillisHeader) { + const timeoutMs = parseFloat(retryAfterMillisHeader); + if (!Number.isNaN(timeoutMs)) { + timeoutMillis = timeoutMs; + } + } + // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After + const retryAfterHeader = responseHeaders?.['retry-after']; + if (retryAfterHeader && !timeoutMillis) { + const timeoutSeconds = parseFloat(retryAfterHeader); + if (!Number.isNaN(timeoutSeconds)) { + timeoutMillis = timeoutSeconds * 1000; + } + else { + timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); + } + } + // If the API asks us to wait a certain amount of time (and it's a reasonable amount), + // just do what it says, but otherwise calculate a default + if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) { + const maxRetries = options.maxRetries ?? this.maxRetries; + timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); + } + await sleep(timeoutMillis); + return this.makeRequest(options, retriesRemaining - 1); + } + calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { + const initialRetryDelay = 0.5; + const maxRetryDelay = 8.0; + const numRetries = maxRetries - retriesRemaining; + // Apply exponential backoff, but not more than the max. + const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); + // Apply some jitter, take up to at most 25 percent of the retry time. + const jitter = 1 - Math.random() * 0.25; + return sleepSeconds * jitter * 1000; + } + getUserAgent() { + return `${this.constructor.name}/JS ${VERSION}`; + } +} +export class AbstractPage { + constructor(client, response, body, options) { + _AbstractPage_client.set(this, void 0); + __classPrivateFieldSet(this, _AbstractPage_client, client, "f"); + this.options = options; + this.response = response; + this.body = body; + } + hasNextPage() { + const items = this.getPaginatedItems(); + if (!items.length) + return false; + return this.nextPageInfo() != null; + } + async getNextPage() { + const nextInfo = this.nextPageInfo(); + if (!nextInfo) { + throw new AnthropicError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.'); + } + const nextOptions = { ...this.options }; + if ('params' in nextInfo && typeof nextOptions.query === 'object') { + nextOptions.query = { ...nextOptions.query, ...nextInfo.params }; + } + else if ('url' in nextInfo) { + const params = [...Object.entries(nextOptions.query || {}), ...nextInfo.url.searchParams.entries()]; + for (const [key, value] of params) { + nextInfo.url.searchParams.set(key, value); + } + nextOptions.query = undefined; + nextOptions.path = nextInfo.url.toString(); + } + return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); + } + async *iterPages() { + // eslint-disable-next-line @typescript-eslint/no-this-alias + let page = this; + yield page; + while (page.hasNextPage()) { + page = await page.getNextPage(); + yield page; + } + } + async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() { + for await (const page of this.iterPages()) { + for (const item of page.getPaginatedItems()) { + yield item; + } + } + } +} +/** + * This subclass of Promise will resolve to an instantiated Page once the request completes. + * + * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ +export class PagePromise extends APIPromise { + constructor(client, request, Page) { + super(request, async (props) => new Page(client, props.response, await defaultParseResponse(props), props.options)); + } + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + async *[Symbol.asyncIterator]() { + const page = await this; + for await (const item of page) { + yield item; + } + } +} +export const createResponseHeaders = (headers) => { + return new Proxy(Object.fromEntries( + // @ts-ignore + headers.entries()), { + get(target, name) { + const key = name.toString(); + return target[key.toLowerCase()] || target[key]; + }, + }); +}; +// This is required so that we can determine if a given object matches the RequestOptions +// type at runtime. While this requires duplication, it is enforced by the TypeScript +// compiler such that any missing / extraneous keys will cause an error. +const requestOptionsKeys = { + method: true, + path: true, + query: true, + body: true, + headers: true, + maxRetries: true, + stream: true, + timeout: true, + httpAgent: true, + signal: true, + idempotencyKey: true, + __binaryRequest: true, + __binaryResponse: true, + __streamClass: true, +}; +export const isRequestOptions = (obj) => { + return (typeof obj === 'object' && + obj !== null && + !isEmptyObj(obj) && + Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k))); +}; +const getPlatformProperties = () => { + if (typeof Deno !== 'undefined' && Deno.build != null) { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': normalizePlatform(Deno.build.os), + 'X-Stainless-Arch': normalizeArch(Deno.build.arch), + 'X-Stainless-Runtime': 'deno', + 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown', + }; + } + if (typeof EdgeRuntime !== 'undefined') { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': `other:${EdgeRuntime}`, + 'X-Stainless-Runtime': 'edge', + 'X-Stainless-Runtime-Version': process.version, + }; + } + // Check if Node.js + if (Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]') { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': normalizePlatform(process.platform), + 'X-Stainless-Arch': normalizeArch(process.arch), + 'X-Stainless-Runtime': 'node', + 'X-Stainless-Runtime-Version': process.version, + }; + } + const browserInfo = getBrowserInfo(); + if (browserInfo) { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': 'unknown', + 'X-Stainless-Runtime': `browser:${browserInfo.browser}`, + 'X-Stainless-Runtime-Version': browserInfo.version, + }; + } + // TODO add support for Cloudflare workers, etc. + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': 'unknown', + 'X-Stainless-Runtime': 'unknown', + 'X-Stainless-Runtime-Version': 'unknown', + }; +}; +// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts +function getBrowserInfo() { + if (typeof navigator === 'undefined' || !navigator) { + return null; + } + // NOTE: The order matters here! + const browserPatterns = [ + { key: 'edge', pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'ie', pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'ie', pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'chrome', pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'firefox', pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'safari', pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ }, + ]; + // Find the FIRST matching browser + for (const { key, pattern } of browserPatterns) { + const match = pattern.exec(navigator.userAgent); + if (match) { + const major = match[1] || 0; + const minor = match[2] || 0; + const patch = match[3] || 0; + return { browser: key, version: `${major}.${minor}.${patch}` }; + } + } + return null; +} +const normalizeArch = (arch) => { + // Node docs: + // - https://nodejs.org/api/process.html#processarch + // Deno docs: + // - https://doc.deno.land/deno/stable/~/Deno.build + if (arch === 'x32') + return 'x32'; + if (arch === 'x86_64' || arch === 'x64') + return 'x64'; + if (arch === 'arm') + return 'arm'; + if (arch === 'aarch64' || arch === 'arm64') + return 'arm64'; + if (arch) + return `other:${arch}`; + return 'unknown'; +}; +const normalizePlatform = (platform) => { + // Node platforms: + // - https://nodejs.org/api/process.html#processplatform + // Deno platforms: + // - https://doc.deno.land/deno/stable/~/Deno.build + // - https://github.com/denoland/deno/issues/14799 + platform = platform.toLowerCase(); + // NOTE: this iOS check is untested and may not work + // Node does not work natively on IOS, there is a fork at + // https://github.com/nodejs-mobile/nodejs-mobile + // however it is unknown at the time of writing how to detect if it is running + if (platform.includes('ios')) + return 'iOS'; + if (platform === 'android') + return 'Android'; + if (platform === 'darwin') + return 'MacOS'; + if (platform === 'win32') + return 'Windows'; + if (platform === 'freebsd') + return 'FreeBSD'; + if (platform === 'openbsd') + return 'OpenBSD'; + if (platform === 'linux') + return 'Linux'; + if (platform) + return `Other:${platform}`; + return 'Unknown'; +}; +let _platformHeaders; +const getPlatformHeaders = () => { + return (_platformHeaders ?? (_platformHeaders = getPlatformProperties())); +}; +export const safeJSON = (text) => { + try { + return JSON.parse(text); + } + catch (err) { + return undefined; + } +}; +// https://url.spec.whatwg.org/#url-scheme-string +const startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; +const isAbsoluteURL = (url) => { + return startsWithSchemeRegexp.test(url); +}; +export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +const validatePositiveInteger = (name, n) => { + if (typeof n !== 'number' || !Number.isInteger(n)) { + throw new AnthropicError(`${name} must be an integer`); + } + if (n < 0) { + throw new AnthropicError(`${name} must be a positive integer`); + } + return n; +}; +export const castToError = (err) => { + if (err instanceof Error) + return err; + if (typeof err === 'object' && err !== null) { + try { + return new Error(JSON.stringify(err)); + } + catch { } + } + return new Error(String(err)); +}; +export const ensurePresent = (value) => { + if (value == null) + throw new AnthropicError(`Expected a value to be given but received ${value} instead.`); + return value; +}; +/** + * Read an environment variable. + * + * Trims beginning and trailing whitespace. + * + * Will return undefined if the environment variable doesn't exist or cannot be accessed. + */ +export const readEnv = (env) => { + if (typeof process !== 'undefined') { + return process.env?.[env]?.trim() ?? undefined; + } + if (typeof Deno !== 'undefined') { + return Deno.env?.get?.(env)?.trim(); + } + return undefined; +}; +export const coerceInteger = (value) => { + if (typeof value === 'number') + return Math.round(value); + if (typeof value === 'string') + return parseInt(value, 10); + throw new AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`); +}; +export const coerceFloat = (value) => { + if (typeof value === 'number') + return value; + if (typeof value === 'string') + return parseFloat(value); + throw new AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`); +}; +export const coerceBoolean = (value) => { + if (typeof value === 'boolean') + return value; + if (typeof value === 'string') + return value === 'true'; + return Boolean(value); +}; +export const maybeCoerceInteger = (value) => { + if (value === undefined) { + return undefined; + } + return coerceInteger(value); +}; +export const maybeCoerceFloat = (value) => { + if (value === undefined) { + return undefined; + } + return coerceFloat(value); +}; +export const maybeCoerceBoolean = (value) => { + if (value === undefined) { + return undefined; + } + return coerceBoolean(value); +}; +// https://stackoverflow.com/a/34491287 +export function isEmptyObj(obj) { + if (!obj) + return true; + for (const _k in obj) + return false; + return true; +} +// https://eslint.org/docs/latest/rules/no-prototype-builtins +export function hasOwn(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} +/** + * Copies headers from "newHeaders" onto "targetHeaders", + * using lower-case for all properties, + * ignoring any keys with undefined values, + * and deleting any keys with null values. + */ +function applyHeadersMut(targetHeaders, newHeaders) { + for (const k in newHeaders) { + if (!hasOwn(newHeaders, k)) + continue; + const lowerKey = k.toLowerCase(); + if (!lowerKey) + continue; + const val = newHeaders[k]; + if (val === null) { + delete targetHeaders[lowerKey]; + } + else if (val !== undefined) { + targetHeaders[lowerKey] = val; + } + } +} +export function debug(action, ...args) { + if (typeof process !== 'undefined' && process?.env?.['DEBUG'] === 'true') { + console.log(`Anthropic:DEBUG:${action}`, ...args); + } +} +/** + * https://stackoverflow.com/a/2117523 + */ +const uuid4 = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +}; +export const isRunningInBrowser = () => { + return ( + // @ts-ignore + typeof window !== 'undefined' && + // @ts-ignore + typeof window.document !== 'undefined' && + // @ts-ignore + typeof navigator !== 'undefined'); +}; +export const isHeadersProtocol = (headers) => { + return typeof headers?.get === 'function'; +}; +export const getRequiredHeader = (headers, header) => { + const foundHeader = getHeader(headers, header); + if (foundHeader === undefined) { + throw new Error(`Could not find ${header} header`); + } + return foundHeader; +}; +export const getHeader = (headers, header) => { + const lowerCasedHeader = header.toLowerCase(); + if (isHeadersProtocol(headers)) { + // to deal with the case where the header looks like Stainless-Event-Id + const intercapsHeader = header[0]?.toUpperCase() + + header.substring(1).replace(/([^\w])(\w)/g, (_m, g1, g2) => g1 + g2.toUpperCase()); + for (const key of [header, lowerCasedHeader, header.toUpperCase(), intercapsHeader]) { + const value = headers.get(key); + if (value) { + return value; + } + } + } + for (const [key, value] of Object.entries(headers)) { + if (key.toLowerCase() === lowerCasedHeader) { + if (Array.isArray(value)) { + if (value.length <= 1) + return value[0]; + console.warn(`Received ${value.length} entries for the ${header} header, using the first entry.`); + return value[0]; + } + return value; + } + } + return undefined; +}; +/** + * Encodes a string to Base64 format. + */ +export const toBase64 = (str) => { + if (!str) + return ''; + if (typeof Buffer !== 'undefined') { + return Buffer.from(str).toString('base64'); + } + if (typeof btoa !== 'undefined') { + return btoa(str); + } + throw new AnthropicError('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined'); +}; +export function isObj(obj) { + return obj != null && typeof obj === 'object' && !Array.isArray(obj); +} +//# sourceMappingURL=core.mjs.map \ No newline at end of file diff --git a/vendor/sdk/core.mjs.map b/vendor/sdk/core.mjs.map new file mode 100644 index 0000000..5da55b5 --- /dev/null +++ b/vendor/sdk/core.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"core.mjs","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/error.d.ts b/vendor/sdk/error.d.ts new file mode 100644 index 0000000..5c3c9dc --- /dev/null +++ b/vendor/sdk/error.d.ts @@ -0,0 +1,48 @@ +import { Headers } from "./core.js"; +export declare class AnthropicError extends Error { +} +export declare class APIError extends AnthropicError { + /** HTTP status for the response that caused the error */ + readonly status: TStatus; + /** HTTP headers for the response that caused the error */ + readonly headers: THeaders; + /** JSON body of the response that caused the error */ + readonly error: TError; + readonly request_id: string | null | undefined; + constructor(status: TStatus, error: TError, message: string | undefined, headers: THeaders); + private static makeMessage; + static generate(status: number | undefined, errorResponse: Object | undefined, message: string | undefined, headers: Headers | undefined): APIError; +} +export declare class APIUserAbortError extends APIError { + constructor({ message }?: { + message?: string; + }); +} +export declare class APIConnectionError extends APIError { + constructor({ message, cause }: { + message?: string | undefined; + cause?: Error | undefined; + }); +} +export declare class APIConnectionTimeoutError extends APIConnectionError { + constructor({ message }?: { + message?: string; + }); +} +export declare class BadRequestError extends APIError<400, Headers> { +} +export declare class AuthenticationError extends APIError<401, Headers> { +} +export declare class PermissionDeniedError extends APIError<403, Headers> { +} +export declare class NotFoundError extends APIError<404, Headers> { +} +export declare class ConflictError extends APIError<409, Headers> { +} +export declare class UnprocessableEntityError extends APIError<422, Headers> { +} +export declare class RateLimitError extends APIError<429, Headers> { +} +export declare class InternalServerError extends APIError { +} +//# sourceMappingURL=error.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/error.d.ts.map b/vendor/sdk/error.d.ts.map new file mode 100644 index 0000000..d964b2d --- /dev/null +++ b/vendor/sdk/error.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["src/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE9C,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C,qBAAa,QAAQ,CACnB,OAAO,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACvD,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EAC1D,MAAM,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CACtD,SAAQ,cAAc;IACtB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBAEnC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,QAAQ;IAQ1F,OAAO,CAAC,MAAM,CAAC,WAAW;IAqB1B,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,OAAO,GAAG,SAAS,GAC3B,QAAQ;CAyCZ;AAED,qBAAa,iBAAkB,SAAQ,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;gBAClE,EAAE,OAAO,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;CAGnD;AAED,qBAAa,kBAAmB,SAAQ,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;gBACnE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;KAAE;CAM5F;AAED,qBAAa,yBAA0B,SAAQ,kBAAkB;gBACnD,EAAE,OAAO,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;CAGnD;AAED,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAE9D,qBAAa,mBAAoB,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAElE,qBAAa,qBAAsB,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAEpE,qBAAa,aAAc,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAE5D,qBAAa,aAAc,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAE5D,qBAAa,wBAAyB,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAEvE,qBAAa,cAAe,SAAQ,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CAAG;AAE7D,qBAAa,mBAAoB,SAAQ,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAAG"} \ No newline at end of file diff --git a/vendor/sdk/error.js b/vendor/sdk/error.js new file mode 100644 index 0000000..c9f272c --- /dev/null +++ b/vendor/sdk/error.js @@ -0,0 +1,114 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.InternalServerError = exports.RateLimitError = exports.UnprocessableEntityError = exports.ConflictError = exports.NotFoundError = exports.PermissionDeniedError = exports.AuthenticationError = exports.BadRequestError = exports.APIConnectionTimeoutError = exports.APIConnectionError = exports.APIUserAbortError = exports.APIError = exports.AnthropicError = void 0; +const core_1 = require("./core.js"); +class AnthropicError extends Error { +} +exports.AnthropicError = AnthropicError; +class APIError extends AnthropicError { + constructor(status, error, message, headers) { + super(`${APIError.makeMessage(status, error, message)}`); + this.status = status; + this.headers = headers; + this.request_id = headers?.['request-id']; + this.error = error; + } + static makeMessage(status, error, message) { + const msg = error?.message ? + typeof error.message === 'string' ? + error.message + : JSON.stringify(error.message) + : error ? JSON.stringify(error) + : message; + if (status && msg) { + return `${status} ${msg}`; + } + if (status) { + return `${status} status code (no body)`; + } + if (msg) { + return msg; + } + return '(no status code or body)'; + } + static generate(status, errorResponse, message, headers) { + if (!status || !headers) { + return new APIConnectionError({ message, cause: (0, core_1.castToError)(errorResponse) }); + } + const error = errorResponse; + if (status === 400) { + return new BadRequestError(status, error, message, headers); + } + if (status === 401) { + return new AuthenticationError(status, error, message, headers); + } + if (status === 403) { + return new PermissionDeniedError(status, error, message, headers); + } + if (status === 404) { + return new NotFoundError(status, error, message, headers); + } + if (status === 409) { + return new ConflictError(status, error, message, headers); + } + if (status === 422) { + return new UnprocessableEntityError(status, error, message, headers); + } + if (status === 429) { + return new RateLimitError(status, error, message, headers); + } + if (status >= 500) { + return new InternalServerError(status, error, message, headers); + } + return new APIError(status, error, message, headers); + } +} +exports.APIError = APIError; +class APIUserAbortError extends APIError { + constructor({ message } = {}) { + super(undefined, undefined, message || 'Request was aborted.', undefined); + } +} +exports.APIUserAbortError = APIUserAbortError; +class APIConnectionError extends APIError { + constructor({ message, cause }) { + super(undefined, undefined, message || 'Connection error.', undefined); + // in some environments the 'cause' property is already declared + // @ts-ignore + if (cause) + this.cause = cause; + } +} +exports.APIConnectionError = APIConnectionError; +class APIConnectionTimeoutError extends APIConnectionError { + constructor({ message } = {}) { + super({ message: message ?? 'Request timed out.' }); + } +} +exports.APIConnectionTimeoutError = APIConnectionTimeoutError; +class BadRequestError extends APIError { +} +exports.BadRequestError = BadRequestError; +class AuthenticationError extends APIError { +} +exports.AuthenticationError = AuthenticationError; +class PermissionDeniedError extends APIError { +} +exports.PermissionDeniedError = PermissionDeniedError; +class NotFoundError extends APIError { +} +exports.NotFoundError = NotFoundError; +class ConflictError extends APIError { +} +exports.ConflictError = ConflictError; +class UnprocessableEntityError extends APIError { +} +exports.UnprocessableEntityError = UnprocessableEntityError; +class RateLimitError extends APIError { +} +exports.RateLimitError = RateLimitError; +class InternalServerError extends APIError { +} +exports.InternalServerError = InternalServerError; +//# sourceMappingURL=error.js.map \ No newline at end of file diff --git a/vendor/sdk/error.js.map b/vendor/sdk/error.js.map new file mode 100644 index 0000000..2ae2937 --- /dev/null +++ b/vendor/sdk/error.js.map @@ -0,0 +1 @@ +{"version":3,"file":"error.js","sourceRoot":"","sources":["src/error.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/error.mjs b/vendor/sdk/error.mjs new file mode 100644 index 0000000..e84c096 --- /dev/null +++ b/vendor/sdk/error.mjs @@ -0,0 +1,98 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { castToError } from "./core.mjs"; +export class AnthropicError extends Error { +} +export class APIError extends AnthropicError { + constructor(status, error, message, headers) { + super(`${APIError.makeMessage(status, error, message)}`); + this.status = status; + this.headers = headers; + this.request_id = headers?.['request-id']; + this.error = error; + } + static makeMessage(status, error, message) { + const msg = error?.message ? + typeof error.message === 'string' ? + error.message + : JSON.stringify(error.message) + : error ? JSON.stringify(error) + : message; + if (status && msg) { + return `${status} ${msg}`; + } + if (status) { + return `${status} status code (no body)`; + } + if (msg) { + return msg; + } + return '(no status code or body)'; + } + static generate(status, errorResponse, message, headers) { + if (!status || !headers) { + return new APIConnectionError({ message, cause: castToError(errorResponse) }); + } + const error = errorResponse; + if (status === 400) { + return new BadRequestError(status, error, message, headers); + } + if (status === 401) { + return new AuthenticationError(status, error, message, headers); + } + if (status === 403) { + return new PermissionDeniedError(status, error, message, headers); + } + if (status === 404) { + return new NotFoundError(status, error, message, headers); + } + if (status === 409) { + return new ConflictError(status, error, message, headers); + } + if (status === 422) { + return new UnprocessableEntityError(status, error, message, headers); + } + if (status === 429) { + return new RateLimitError(status, error, message, headers); + } + if (status >= 500) { + return new InternalServerError(status, error, message, headers); + } + return new APIError(status, error, message, headers); + } +} +export class APIUserAbortError extends APIError { + constructor({ message } = {}) { + super(undefined, undefined, message || 'Request was aborted.', undefined); + } +} +export class APIConnectionError extends APIError { + constructor({ message, cause }) { + super(undefined, undefined, message || 'Connection error.', undefined); + // in some environments the 'cause' property is already declared + // @ts-ignore + if (cause) + this.cause = cause; + } +} +export class APIConnectionTimeoutError extends APIConnectionError { + constructor({ message } = {}) { + super({ message: message ?? 'Request timed out.' }); + } +} +export class BadRequestError extends APIError { +} +export class AuthenticationError extends APIError { +} +export class PermissionDeniedError extends APIError { +} +export class NotFoundError extends APIError { +} +export class ConflictError extends APIError { +} +export class UnprocessableEntityError extends APIError { +} +export class RateLimitError extends APIError { +} +export class InternalServerError extends APIError { +} +//# sourceMappingURL=error.mjs.map \ No newline at end of file diff --git a/vendor/sdk/error.mjs.map b/vendor/sdk/error.mjs.map new file mode 100644 index 0000000..f0e05ea --- /dev/null +++ b/vendor/sdk/error.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"error.mjs","sourceRoot":"","sources":["src/error.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAW;AAE/B,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAE5C,MAAM,OAAO,QAIX,SAAQ,cAAc;IAUtB,YAAY,MAAe,EAAE,KAAa,EAAE,OAA2B,EAAE,OAAiB;QACxF,KAAK,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,MAA0B,EAAE,KAAU,EAAE,OAA2B;QAC5F,MAAM,GAAG,GACP,KAAK,EAAE,OAAO,CAAC,CAAC;YACd,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;gBACjC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;YACjC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC/B,CAAC,CAAC,OAAO,CAAC;QAEZ,IAAI,MAAM,IAAI,GAAG,EAAE;YACjB,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;SAC3B;QACD,IAAI,MAAM,EAAE;YACV,OAAO,GAAG,MAAM,wBAAwB,CAAC;SAC1C;QACD,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,QAAQ,CACb,MAA0B,EAC1B,aAAiC,EACjC,OAA2B,EAC3B,OAA4B;QAE5B,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;YACvB,OAAO,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;SAC/E;QAED,MAAM,KAAK,GAAG,aAAoC,CAAC;QAEnD,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC7D;QAED,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SACjE;QAED,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SACnE;QAED,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC3D;QAED,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC3D;QAED,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SACtE;QAED,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC5D;QAED,IAAI,MAAM,IAAI,GAAG,EAAE;YACjB,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SACjE;QAED,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,QAAyC;IAC9E,YAAY,EAAE,OAAO,KAA2B,EAAE;QAChD,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,IAAI,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAyC;IAC/E,YAAY,EAAE,OAAO,EAAE,KAAK,EAA+D;QACzF,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,IAAI,mBAAmB,EAAE,SAAS,CAAC,CAAC;QACvE,gEAAgE;QAChE,aAAa;QACb,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,kBAAkB;IAC/D,YAAY,EAAE,OAAO,KAA2B,EAAE;QAChD,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAsB;CAAG;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,QAAsB;CAAG;AAElE,MAAM,OAAO,qBAAsB,SAAQ,QAAsB;CAAG;AAEpE,MAAM,OAAO,aAAc,SAAQ,QAAsB;CAAG;AAE5D,MAAM,OAAO,aAAc,SAAQ,QAAsB;CAAG;AAE5D,MAAM,OAAO,wBAAyB,SAAQ,QAAsB;CAAG;AAEvE,MAAM,OAAO,cAAe,SAAQ,QAAsB;CAAG;AAE7D,MAAM,OAAO,mBAAoB,SAAQ,QAAyB;CAAG"} \ No newline at end of file diff --git a/vendor/sdk/index.d.mts b/vendor/sdk/index.d.mts new file mode 100644 index 0000000..c2a79db --- /dev/null +++ b/vendor/sdk/index.d.mts @@ -0,0 +1,152 @@ +import { type Agent } from "./_shims/index.js"; +import * as Core from "./core.js"; +import * as Errors from "./error.js"; +import * as Pagination from "./pagination.js"; +import { type PageParams, PageResponse } from "./pagination.js"; +import * as Uploads from "./uploads.js"; +import * as API from "./resources/index.js"; +import { Completion, CompletionCreateParams, CompletionCreateParamsNonStreaming, CompletionCreateParamsStreaming, Completions } from "./resources/completions.js"; +import { ModelInfo, ModelInfosPage, ModelListParams, Models } from "./resources/models.js"; +import { AnthropicBeta, Beta, BetaAPIError, BetaAuthenticationError, BetaBillingError, BetaError, BetaErrorResponse, BetaGatewayTimeoutError, BetaInvalidRequestError, BetaNotFoundError, BetaOverloadedError, BetaPermissionError, BetaRateLimitError } from "./resources/beta/beta.js"; +import { Base64PDFSource, CacheControlEphemeral, CitationCharLocation, CitationCharLocationParam, CitationContentBlockLocation, CitationContentBlockLocationParam, CitationPageLocation, CitationPageLocationParam, CitationsConfigParam, CitationsDelta, ContentBlock, ContentBlockDeltaEvent, ContentBlockParam, ContentBlockSource, ContentBlockSourceContent, ContentBlockStartEvent, ContentBlockStopEvent, DocumentBlockParam, ImageBlockParam, InputJSONDelta, Message, MessageCountTokensParams, MessageCreateParams, MessageCreateParamsNonStreaming, MessageCreateParamsStreaming, MessageDeltaEvent, MessageDeltaUsage, MessageParam, MessageStartEvent, MessageStopEvent, MessageStreamEvent, MessageStreamParams, MessageTokensCount, Messages, Metadata, Model, PlainTextSource, RawContentBlockDeltaEvent, RawContentBlockStartEvent, RawContentBlockStopEvent, RawMessageDeltaEvent, RawMessageStartEvent, RawMessageStopEvent, RawMessageStreamEvent, RedactedThinkingBlock, RedactedThinkingBlockParam, SignatureDelta, TextBlock, TextBlockParam, TextCitation, TextCitationParam, TextDelta, ThinkingBlock, ThinkingBlockParam, ThinkingConfigDisabled, ThinkingConfigEnabled, ThinkingDelta, Tool, ToolChoice, ToolChoiceAny, ToolChoiceAuto, ToolChoiceTool, ToolResultBlockParam, ToolUseBlock, ToolUseBlockParam, Usage } from "./resources/messages/messages.js"; +export interface ClientOptions { + /** + * Defaults to process.env['ANTHROPIC_API_KEY']. + */ + apiKey?: string | null | undefined; + /** + * Defaults to process.env['ANTHROPIC_AUTH_TOKEN']. + */ + authToken?: string | null | undefined; + /** + * Override the default base URL for the API, e.g., "https://api.example.com/v2/" + * + * Defaults to process.env['ANTHROPIC_BASE_URL']. + */ + baseURL?: string | null | undefined; + /** + * The maximum amount of time (in milliseconds) that the client should wait for a response + * from the server before timing out a single request. + * + * Note that request timeouts are retried by default, so in a worst-case scenario you may wait + * much longer than this timeout before the promise succeeds or fails. + */ + timeout?: number | undefined; + /** + * An HTTP agent used to manage HTTP(S) connections. + * + * If not provided, an agent will be constructed by default in the Node.js environment, + * otherwise no agent is used. + */ + httpAgent?: Agent | undefined; + /** + * Specify a custom `fetch` function implementation. + * + * If not provided, we use `node-fetch` on Node.js and otherwise expect that `fetch` is + * defined globally. + */ + fetch?: Core.Fetch | undefined; + /** + * The maximum number of times that the client will retry a request in case of a + * temporary failure, like a network error or a 5XX error from the server. + * + * @default 2 + */ + maxRetries?: number | undefined; + /** + * Default headers to include with every request to the API. + * + * These can be removed in individual requests by explicitly setting the + * header to `undefined` or `null` in request options. + */ + defaultHeaders?: Core.Headers | undefined; + /** + * Default query parameters to include with every request to the API. + * + * These can be removed in individual requests by explicitly setting the + * param to `undefined` in request options. + */ + defaultQuery?: Core.DefaultQuery | undefined; + /** + * By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + * Only set this option to `true` if you understand the risks and have appropriate mitigations in place. + */ + dangerouslyAllowBrowser?: boolean | undefined; +} +/** + * API Client for interfacing with the Anthropic API. + */ +export declare class Anthropic extends Core.APIClient { + apiKey: string | null; + authToken: string | null; + private _options; + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections. + * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL, apiKey, authToken, ...opts }?: ClientOptions); + completions: API.Completions; + messages: API.Messages; + models: API.Models; + beta: API.Beta; + protected defaultQuery(): Core.DefaultQuery | undefined; + protected defaultHeaders(opts: Core.FinalRequestOptions): Core.Headers; + protected validateHeaders(headers: Core.Headers, customHeaders: Core.Headers): void; + protected authHeaders(opts: Core.FinalRequestOptions): Core.Headers; + protected apiKeyAuth(opts: Core.FinalRequestOptions): Core.Headers; + protected bearerAuth(opts: Core.FinalRequestOptions): Core.Headers; + static Anthropic: typeof Anthropic; + static HUMAN_PROMPT: string; + static AI_PROMPT: string; + static DEFAULT_TIMEOUT: number; + static AnthropicError: typeof Errors.AnthropicError; + static APIError: typeof Errors.APIError; + static APIConnectionError: typeof Errors.APIConnectionError; + static APIConnectionTimeoutError: typeof Errors.APIConnectionTimeoutError; + static APIUserAbortError: typeof Errors.APIUserAbortError; + static NotFoundError: typeof Errors.NotFoundError; + static ConflictError: typeof Errors.ConflictError; + static RateLimitError: typeof Errors.RateLimitError; + static BadRequestError: typeof Errors.BadRequestError; + static AuthenticationError: typeof Errors.AuthenticationError; + static InternalServerError: typeof Errors.InternalServerError; + static PermissionDeniedError: typeof Errors.PermissionDeniedError; + static UnprocessableEntityError: typeof Errors.UnprocessableEntityError; + static toFile: typeof Uploads.toFile; + static fileFromPath: typeof Uploads.fileFromPath; +} +export declare namespace Anthropic { + export type RequestOptions = Core.RequestOptions; + export import Page = Pagination.Page; + export { type PageParams as PageParams, type PageResponse as PageResponse }; + export { Completions as Completions, type Completion as Completion, type CompletionCreateParams as CompletionCreateParams, type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming, type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming, }; + export { Messages as Messages, type Base64PDFSource as Base64PDFSource, type CacheControlEphemeral as CacheControlEphemeral, type CitationCharLocation as CitationCharLocation, type CitationCharLocationParam as CitationCharLocationParam, type CitationContentBlockLocation as CitationContentBlockLocation, type CitationContentBlockLocationParam as CitationContentBlockLocationParam, type CitationPageLocation as CitationPageLocation, type CitationPageLocationParam as CitationPageLocationParam, type CitationsConfigParam as CitationsConfigParam, type CitationsDelta as CitationsDelta, type ContentBlock as ContentBlock, type ContentBlockDeltaEvent as ContentBlockDeltaEvent, type ContentBlockParam as ContentBlockParam, type ContentBlockSource as ContentBlockSource, type ContentBlockSourceContent as ContentBlockSourceContent, type ContentBlockStartEvent as ContentBlockStartEvent, type ContentBlockStopEvent as ContentBlockStopEvent, type DocumentBlockParam as DocumentBlockParam, type ImageBlockParam as ImageBlockParam, type InputJSONDelta as InputJSONDelta, type Message as Message, type MessageDeltaEvent as MessageDeltaEvent, type MessageDeltaUsage as MessageDeltaUsage, type MessageParam as MessageParam, type MessageStartEvent as MessageStartEvent, type MessageStopEvent as MessageStopEvent, type MessageStreamEvent as MessageStreamEvent, type MessageTokensCount as MessageTokensCount, type Metadata as Metadata, type Model as Model, type PlainTextSource as PlainTextSource, type RawContentBlockDeltaEvent as RawContentBlockDeltaEvent, type RawContentBlockStartEvent as RawContentBlockStartEvent, type RawContentBlockStopEvent as RawContentBlockStopEvent, type RawMessageDeltaEvent as RawMessageDeltaEvent, type RawMessageStartEvent as RawMessageStartEvent, type RawMessageStopEvent as RawMessageStopEvent, type RawMessageStreamEvent as RawMessageStreamEvent, type RedactedThinkingBlock as RedactedThinkingBlock, type RedactedThinkingBlockParam as RedactedThinkingBlockParam, type SignatureDelta as SignatureDelta, type TextBlock as TextBlock, type TextBlockParam as TextBlockParam, type TextCitation as TextCitation, type TextCitationParam as TextCitationParam, type TextDelta as TextDelta, type ThinkingBlock as ThinkingBlock, type ThinkingBlockParam as ThinkingBlockParam, type ThinkingConfigDisabled as ThinkingConfigDisabled, type ThinkingConfigEnabled as ThinkingConfigEnabled, type ThinkingDelta as ThinkingDelta, type Tool as Tool, type ToolChoice as ToolChoice, type ToolChoiceAny as ToolChoiceAny, type ToolChoiceAuto as ToolChoiceAuto, type ToolChoiceTool as ToolChoiceTool, type ToolResultBlockParam as ToolResultBlockParam, type ToolUseBlock as ToolUseBlock, type ToolUseBlockParam as ToolUseBlockParam, type Usage as Usage, type MessageCreateParams as MessageCreateParams, type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming as MessageCreateParamsStreaming, type MessageStreamParams as MessageStreamParams, type MessageCountTokensParams as MessageCountTokensParams, }; + export { Models as Models, type ModelInfo as ModelInfo, ModelInfosPage as ModelInfosPage, type ModelListParams as ModelListParams, }; + export { Beta as Beta, type AnthropicBeta as AnthropicBeta, type BetaAPIError as BetaAPIError, type BetaAuthenticationError as BetaAuthenticationError, type BetaBillingError as BetaBillingError, type BetaError as BetaError, type BetaErrorResponse as BetaErrorResponse, type BetaGatewayTimeoutError as BetaGatewayTimeoutError, type BetaInvalidRequestError as BetaInvalidRequestError, type BetaNotFoundError as BetaNotFoundError, type BetaOverloadedError as BetaOverloadedError, type BetaPermissionError as BetaPermissionError, type BetaRateLimitError as BetaRateLimitError, }; + export type APIErrorObject = API.APIErrorObject; + export type AuthenticationError = API.AuthenticationError; + export type BillingError = API.BillingError; + export type ErrorObject = API.ErrorObject; + export type ErrorResponse = API.ErrorResponse; + export type GatewayTimeoutError = API.GatewayTimeoutError; + export type InvalidRequestError = API.InvalidRequestError; + export type NotFoundError = API.NotFoundError; + export type OverloadedError = API.OverloadedError; + export type PermissionError = API.PermissionError; + export type RateLimitError = API.RateLimitError; +} +export declare const HUMAN_PROMPT: string, AI_PROMPT: string; +export { toFile, fileFromPath } from "./uploads.js"; +export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./error.js"; +export default Anthropic; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/index.d.ts b/vendor/sdk/index.d.ts new file mode 100644 index 0000000..c2a79db --- /dev/null +++ b/vendor/sdk/index.d.ts @@ -0,0 +1,152 @@ +import { type Agent } from "./_shims/index.js"; +import * as Core from "./core.js"; +import * as Errors from "./error.js"; +import * as Pagination from "./pagination.js"; +import { type PageParams, PageResponse } from "./pagination.js"; +import * as Uploads from "./uploads.js"; +import * as API from "./resources/index.js"; +import { Completion, CompletionCreateParams, CompletionCreateParamsNonStreaming, CompletionCreateParamsStreaming, Completions } from "./resources/completions.js"; +import { ModelInfo, ModelInfosPage, ModelListParams, Models } from "./resources/models.js"; +import { AnthropicBeta, Beta, BetaAPIError, BetaAuthenticationError, BetaBillingError, BetaError, BetaErrorResponse, BetaGatewayTimeoutError, BetaInvalidRequestError, BetaNotFoundError, BetaOverloadedError, BetaPermissionError, BetaRateLimitError } from "./resources/beta/beta.js"; +import { Base64PDFSource, CacheControlEphemeral, CitationCharLocation, CitationCharLocationParam, CitationContentBlockLocation, CitationContentBlockLocationParam, CitationPageLocation, CitationPageLocationParam, CitationsConfigParam, CitationsDelta, ContentBlock, ContentBlockDeltaEvent, ContentBlockParam, ContentBlockSource, ContentBlockSourceContent, ContentBlockStartEvent, ContentBlockStopEvent, DocumentBlockParam, ImageBlockParam, InputJSONDelta, Message, MessageCountTokensParams, MessageCreateParams, MessageCreateParamsNonStreaming, MessageCreateParamsStreaming, MessageDeltaEvent, MessageDeltaUsage, MessageParam, MessageStartEvent, MessageStopEvent, MessageStreamEvent, MessageStreamParams, MessageTokensCount, Messages, Metadata, Model, PlainTextSource, RawContentBlockDeltaEvent, RawContentBlockStartEvent, RawContentBlockStopEvent, RawMessageDeltaEvent, RawMessageStartEvent, RawMessageStopEvent, RawMessageStreamEvent, RedactedThinkingBlock, RedactedThinkingBlockParam, SignatureDelta, TextBlock, TextBlockParam, TextCitation, TextCitationParam, TextDelta, ThinkingBlock, ThinkingBlockParam, ThinkingConfigDisabled, ThinkingConfigEnabled, ThinkingDelta, Tool, ToolChoice, ToolChoiceAny, ToolChoiceAuto, ToolChoiceTool, ToolResultBlockParam, ToolUseBlock, ToolUseBlockParam, Usage } from "./resources/messages/messages.js"; +export interface ClientOptions { + /** + * Defaults to process.env['ANTHROPIC_API_KEY']. + */ + apiKey?: string | null | undefined; + /** + * Defaults to process.env['ANTHROPIC_AUTH_TOKEN']. + */ + authToken?: string | null | undefined; + /** + * Override the default base URL for the API, e.g., "https://api.example.com/v2/" + * + * Defaults to process.env['ANTHROPIC_BASE_URL']. + */ + baseURL?: string | null | undefined; + /** + * The maximum amount of time (in milliseconds) that the client should wait for a response + * from the server before timing out a single request. + * + * Note that request timeouts are retried by default, so in a worst-case scenario you may wait + * much longer than this timeout before the promise succeeds or fails. + */ + timeout?: number | undefined; + /** + * An HTTP agent used to manage HTTP(S) connections. + * + * If not provided, an agent will be constructed by default in the Node.js environment, + * otherwise no agent is used. + */ + httpAgent?: Agent | undefined; + /** + * Specify a custom `fetch` function implementation. + * + * If not provided, we use `node-fetch` on Node.js and otherwise expect that `fetch` is + * defined globally. + */ + fetch?: Core.Fetch | undefined; + /** + * The maximum number of times that the client will retry a request in case of a + * temporary failure, like a network error or a 5XX error from the server. + * + * @default 2 + */ + maxRetries?: number | undefined; + /** + * Default headers to include with every request to the API. + * + * These can be removed in individual requests by explicitly setting the + * header to `undefined` or `null` in request options. + */ + defaultHeaders?: Core.Headers | undefined; + /** + * Default query parameters to include with every request to the API. + * + * These can be removed in individual requests by explicitly setting the + * param to `undefined` in request options. + */ + defaultQuery?: Core.DefaultQuery | undefined; + /** + * By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + * Only set this option to `true` if you understand the risks and have appropriate mitigations in place. + */ + dangerouslyAllowBrowser?: boolean | undefined; +} +/** + * API Client for interfacing with the Anthropic API. + */ +export declare class Anthropic extends Core.APIClient { + apiKey: string | null; + authToken: string | null; + private _options; + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections. + * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL, apiKey, authToken, ...opts }?: ClientOptions); + completions: API.Completions; + messages: API.Messages; + models: API.Models; + beta: API.Beta; + protected defaultQuery(): Core.DefaultQuery | undefined; + protected defaultHeaders(opts: Core.FinalRequestOptions): Core.Headers; + protected validateHeaders(headers: Core.Headers, customHeaders: Core.Headers): void; + protected authHeaders(opts: Core.FinalRequestOptions): Core.Headers; + protected apiKeyAuth(opts: Core.FinalRequestOptions): Core.Headers; + protected bearerAuth(opts: Core.FinalRequestOptions): Core.Headers; + static Anthropic: typeof Anthropic; + static HUMAN_PROMPT: string; + static AI_PROMPT: string; + static DEFAULT_TIMEOUT: number; + static AnthropicError: typeof Errors.AnthropicError; + static APIError: typeof Errors.APIError; + static APIConnectionError: typeof Errors.APIConnectionError; + static APIConnectionTimeoutError: typeof Errors.APIConnectionTimeoutError; + static APIUserAbortError: typeof Errors.APIUserAbortError; + static NotFoundError: typeof Errors.NotFoundError; + static ConflictError: typeof Errors.ConflictError; + static RateLimitError: typeof Errors.RateLimitError; + static BadRequestError: typeof Errors.BadRequestError; + static AuthenticationError: typeof Errors.AuthenticationError; + static InternalServerError: typeof Errors.InternalServerError; + static PermissionDeniedError: typeof Errors.PermissionDeniedError; + static UnprocessableEntityError: typeof Errors.UnprocessableEntityError; + static toFile: typeof Uploads.toFile; + static fileFromPath: typeof Uploads.fileFromPath; +} +export declare namespace Anthropic { + export type RequestOptions = Core.RequestOptions; + export import Page = Pagination.Page; + export { type PageParams as PageParams, type PageResponse as PageResponse }; + export { Completions as Completions, type Completion as Completion, type CompletionCreateParams as CompletionCreateParams, type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming, type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming, }; + export { Messages as Messages, type Base64PDFSource as Base64PDFSource, type CacheControlEphemeral as CacheControlEphemeral, type CitationCharLocation as CitationCharLocation, type CitationCharLocationParam as CitationCharLocationParam, type CitationContentBlockLocation as CitationContentBlockLocation, type CitationContentBlockLocationParam as CitationContentBlockLocationParam, type CitationPageLocation as CitationPageLocation, type CitationPageLocationParam as CitationPageLocationParam, type CitationsConfigParam as CitationsConfigParam, type CitationsDelta as CitationsDelta, type ContentBlock as ContentBlock, type ContentBlockDeltaEvent as ContentBlockDeltaEvent, type ContentBlockParam as ContentBlockParam, type ContentBlockSource as ContentBlockSource, type ContentBlockSourceContent as ContentBlockSourceContent, type ContentBlockStartEvent as ContentBlockStartEvent, type ContentBlockStopEvent as ContentBlockStopEvent, type DocumentBlockParam as DocumentBlockParam, type ImageBlockParam as ImageBlockParam, type InputJSONDelta as InputJSONDelta, type Message as Message, type MessageDeltaEvent as MessageDeltaEvent, type MessageDeltaUsage as MessageDeltaUsage, type MessageParam as MessageParam, type MessageStartEvent as MessageStartEvent, type MessageStopEvent as MessageStopEvent, type MessageStreamEvent as MessageStreamEvent, type MessageTokensCount as MessageTokensCount, type Metadata as Metadata, type Model as Model, type PlainTextSource as PlainTextSource, type RawContentBlockDeltaEvent as RawContentBlockDeltaEvent, type RawContentBlockStartEvent as RawContentBlockStartEvent, type RawContentBlockStopEvent as RawContentBlockStopEvent, type RawMessageDeltaEvent as RawMessageDeltaEvent, type RawMessageStartEvent as RawMessageStartEvent, type RawMessageStopEvent as RawMessageStopEvent, type RawMessageStreamEvent as RawMessageStreamEvent, type RedactedThinkingBlock as RedactedThinkingBlock, type RedactedThinkingBlockParam as RedactedThinkingBlockParam, type SignatureDelta as SignatureDelta, type TextBlock as TextBlock, type TextBlockParam as TextBlockParam, type TextCitation as TextCitation, type TextCitationParam as TextCitationParam, type TextDelta as TextDelta, type ThinkingBlock as ThinkingBlock, type ThinkingBlockParam as ThinkingBlockParam, type ThinkingConfigDisabled as ThinkingConfigDisabled, type ThinkingConfigEnabled as ThinkingConfigEnabled, type ThinkingDelta as ThinkingDelta, type Tool as Tool, type ToolChoice as ToolChoice, type ToolChoiceAny as ToolChoiceAny, type ToolChoiceAuto as ToolChoiceAuto, type ToolChoiceTool as ToolChoiceTool, type ToolResultBlockParam as ToolResultBlockParam, type ToolUseBlock as ToolUseBlock, type ToolUseBlockParam as ToolUseBlockParam, type Usage as Usage, type MessageCreateParams as MessageCreateParams, type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming as MessageCreateParamsStreaming, type MessageStreamParams as MessageStreamParams, type MessageCountTokensParams as MessageCountTokensParams, }; + export { Models as Models, type ModelInfo as ModelInfo, ModelInfosPage as ModelInfosPage, type ModelListParams as ModelListParams, }; + export { Beta as Beta, type AnthropicBeta as AnthropicBeta, type BetaAPIError as BetaAPIError, type BetaAuthenticationError as BetaAuthenticationError, type BetaBillingError as BetaBillingError, type BetaError as BetaError, type BetaErrorResponse as BetaErrorResponse, type BetaGatewayTimeoutError as BetaGatewayTimeoutError, type BetaInvalidRequestError as BetaInvalidRequestError, type BetaNotFoundError as BetaNotFoundError, type BetaOverloadedError as BetaOverloadedError, type BetaPermissionError as BetaPermissionError, type BetaRateLimitError as BetaRateLimitError, }; + export type APIErrorObject = API.APIErrorObject; + export type AuthenticationError = API.AuthenticationError; + export type BillingError = API.BillingError; + export type ErrorObject = API.ErrorObject; + export type ErrorResponse = API.ErrorResponse; + export type GatewayTimeoutError = API.GatewayTimeoutError; + export type InvalidRequestError = API.InvalidRequestError; + export type NotFoundError = API.NotFoundError; + export type OverloadedError = API.OverloadedError; + export type PermissionError = API.PermissionError; + export type RateLimitError = API.RateLimitError; +} +export declare const HUMAN_PROMPT: string, AI_PROMPT: string; +export { toFile, fileFromPath } from "./uploads.js"; +export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./error.js"; +export default Anthropic; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/index.d.ts.map b/vendor/sdk/index.d.ts.map new file mode 100644 index 0000000..a53b267 --- /dev/null +++ b/vendor/sdk/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/index.js b/vendor/sdk/index.js new file mode 100644 index 0000000..90e5c8d --- /dev/null +++ b/vendor/sdk/index.js @@ -0,0 +1,179 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UnprocessableEntityError = exports.PermissionDeniedError = exports.InternalServerError = exports.AuthenticationError = exports.BadRequestError = exports.RateLimitError = exports.ConflictError = exports.NotFoundError = exports.APIUserAbortError = exports.APIConnectionTimeoutError = exports.APIConnectionError = exports.APIError = exports.AnthropicError = exports.fileFromPath = exports.toFile = exports.AI_PROMPT = exports.HUMAN_PROMPT = exports.Anthropic = void 0; +const Core = __importStar(require("./core.js")); +const Errors = __importStar(require("./error.js")); +const Pagination = __importStar(require("./pagination.js")); +const Uploads = __importStar(require("./uploads.js")); +const API = __importStar(require("./resources/index.js")); +const completions_1 = require("./resources/completions.js"); +const models_1 = require("./resources/models.js"); +const beta_1 = require("./resources/beta/beta.js"); +const messages_1 = require("./resources/messages/messages.js"); +/** + * API Client for interfacing with the Anthropic API. + */ +class Anthropic extends Core.APIClient { + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections. + * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL = Core.readEnv('ANTHROPIC_BASE_URL'), apiKey = Core.readEnv('ANTHROPIC_API_KEY') ?? null, authToken = Core.readEnv('ANTHROPIC_AUTH_TOKEN') ?? null, ...opts } = {}) { + const options = { + apiKey, + authToken, + ...opts, + baseURL: baseURL || `https://api.anthropic.com`, + }; + if (!options.dangerouslyAllowBrowser && Core.isRunningInBrowser()) { + throw new Errors.AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n"); + } + super({ + baseURL: options.baseURL, + timeout: options.timeout ?? 600000 /* 10 minutes */, + httpAgent: options.httpAgent, + maxRetries: options.maxRetries, + fetch: options.fetch, + }); + this.completions = new API.Completions(this); + this.messages = new API.Messages(this); + this.models = new API.Models(this); + this.beta = new API.Beta(this); + this._options = options; + this.apiKey = apiKey; + this.authToken = authToken; + } + defaultQuery() { + return this._options.defaultQuery; + } + defaultHeaders(opts) { + return { + ...super.defaultHeaders(opts), + ...(this._options.dangerouslyAllowBrowser ? + { 'anthropic-dangerous-direct-browser-access': 'true' } + : undefined), + 'anthropic-version': '2023-06-01', + ...this._options.defaultHeaders, + }; + } + validateHeaders(headers, customHeaders) { + if (this.apiKey && headers['x-api-key']) { + return; + } + if (customHeaders['x-api-key'] === null) { + return; + } + if (this.authToken && headers['authorization']) { + return; + } + if (customHeaders['authorization'] === null) { + return; + } + throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); + } + authHeaders(opts) { + const apiKeyAuth = this.apiKeyAuth(opts); + const bearerAuth = this.bearerAuth(opts); + if (apiKeyAuth != null && !Core.isEmptyObj(apiKeyAuth)) { + return apiKeyAuth; + } + if (bearerAuth != null && !Core.isEmptyObj(bearerAuth)) { + return bearerAuth; + } + return {}; + } + apiKeyAuth(opts) { + if (this.apiKey == null) { + return {}; + } + return { 'X-Api-Key': this.apiKey }; + } + bearerAuth(opts) { + if (this.authToken == null) { + return {}; + } + return { Authorization: `Bearer ${this.authToken}` }; + } +} +exports.Anthropic = Anthropic; +_a = Anthropic; +Anthropic.Anthropic = _a; +Anthropic.HUMAN_PROMPT = '\n\nHuman:'; +Anthropic.AI_PROMPT = '\n\nAssistant:'; +Anthropic.DEFAULT_TIMEOUT = 600000; // 10 minutes +Anthropic.AnthropicError = Errors.AnthropicError; +Anthropic.APIError = Errors.APIError; +Anthropic.APIConnectionError = Errors.APIConnectionError; +Anthropic.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError; +Anthropic.APIUserAbortError = Errors.APIUserAbortError; +Anthropic.NotFoundError = Errors.NotFoundError; +Anthropic.ConflictError = Errors.ConflictError; +Anthropic.RateLimitError = Errors.RateLimitError; +Anthropic.BadRequestError = Errors.BadRequestError; +Anthropic.AuthenticationError = Errors.AuthenticationError; +Anthropic.InternalServerError = Errors.InternalServerError; +Anthropic.PermissionDeniedError = Errors.PermissionDeniedError; +Anthropic.UnprocessableEntityError = Errors.UnprocessableEntityError; +Anthropic.toFile = Uploads.toFile; +Anthropic.fileFromPath = Uploads.fileFromPath; +Anthropic.Completions = completions_1.Completions; +Anthropic.Messages = messages_1.Messages; +Anthropic.Models = models_1.Models; +Anthropic.ModelInfosPage = models_1.ModelInfosPage; +Anthropic.Beta = beta_1.Beta; +exports.HUMAN_PROMPT = Anthropic.HUMAN_PROMPT, exports.AI_PROMPT = Anthropic.AI_PROMPT; +var uploads_1 = require("./uploads.js"); +Object.defineProperty(exports, "toFile", { enumerable: true, get: function () { return uploads_1.toFile; } }); +Object.defineProperty(exports, "fileFromPath", { enumerable: true, get: function () { return uploads_1.fileFromPath; } }); +var error_1 = require("./error.js"); +Object.defineProperty(exports, "AnthropicError", { enumerable: true, get: function () { return error_1.AnthropicError; } }); +Object.defineProperty(exports, "APIError", { enumerable: true, get: function () { return error_1.APIError; } }); +Object.defineProperty(exports, "APIConnectionError", { enumerable: true, get: function () { return error_1.APIConnectionError; } }); +Object.defineProperty(exports, "APIConnectionTimeoutError", { enumerable: true, get: function () { return error_1.APIConnectionTimeoutError; } }); +Object.defineProperty(exports, "APIUserAbortError", { enumerable: true, get: function () { return error_1.APIUserAbortError; } }); +Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return error_1.NotFoundError; } }); +Object.defineProperty(exports, "ConflictError", { enumerable: true, get: function () { return error_1.ConflictError; } }); +Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return error_1.RateLimitError; } }); +Object.defineProperty(exports, "BadRequestError", { enumerable: true, get: function () { return error_1.BadRequestError; } }); +Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return error_1.AuthenticationError; } }); +Object.defineProperty(exports, "InternalServerError", { enumerable: true, get: function () { return error_1.InternalServerError; } }); +Object.defineProperty(exports, "PermissionDeniedError", { enumerable: true, get: function () { return error_1.PermissionDeniedError; } }); +Object.defineProperty(exports, "UnprocessableEntityError", { enumerable: true, get: function () { return error_1.UnprocessableEntityError; } }); +exports = module.exports = Anthropic; +exports.default = Anthropic; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/sdk/index.js.map b/vendor/sdk/index.js.map new file mode 100644 index 0000000..4cb3606 --- /dev/null +++ b/vendor/sdk/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/index.mjs b/vendor/sdk/index.mjs new file mode 100644 index 0000000..2cb9cfc --- /dev/null +++ b/vendor/sdk/index.mjs @@ -0,0 +1,136 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +var _a; +import * as Core from "./core.mjs"; +import * as Errors from "./error.mjs"; +import * as Pagination from "./pagination.mjs"; +import * as Uploads from "./uploads.mjs"; +import * as API from "./resources/index.mjs"; +import { Completions, } from "./resources/completions.mjs"; +import { ModelInfosPage, Models } from "./resources/models.mjs"; +import { Beta, } from "./resources/beta/beta.mjs"; +import { Messages, } from "./resources/messages/messages.mjs"; +/** + * API Client for interfacing with the Anthropic API. + */ +export class Anthropic extends Core.APIClient { + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections. + * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL = Core.readEnv('ANTHROPIC_BASE_URL'), apiKey = Core.readEnv('ANTHROPIC_API_KEY') ?? null, authToken = Core.readEnv('ANTHROPIC_AUTH_TOKEN') ?? null, ...opts } = {}) { + const options = { + apiKey, + authToken, + ...opts, + baseURL: baseURL || `https://api.anthropic.com`, + }; + if (!options.dangerouslyAllowBrowser && Core.isRunningInBrowser()) { + throw new Errors.AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n"); + } + super({ + baseURL: options.baseURL, + timeout: options.timeout ?? 600000 /* 10 minutes */, + httpAgent: options.httpAgent, + maxRetries: options.maxRetries, + fetch: options.fetch, + }); + this.completions = new API.Completions(this); + this.messages = new API.Messages(this); + this.models = new API.Models(this); + this.beta = new API.Beta(this); + this._options = options; + this.apiKey = apiKey; + this.authToken = authToken; + } + defaultQuery() { + return this._options.defaultQuery; + } + defaultHeaders(opts) { + return { + ...super.defaultHeaders(opts), + ...(this._options.dangerouslyAllowBrowser ? + { 'anthropic-dangerous-direct-browser-access': 'true' } + : undefined), + 'anthropic-version': '2023-06-01', + ...this._options.defaultHeaders, + }; + } + validateHeaders(headers, customHeaders) { + if (this.apiKey && headers['x-api-key']) { + return; + } + if (customHeaders['x-api-key'] === null) { + return; + } + if (this.authToken && headers['authorization']) { + return; + } + if (customHeaders['authorization'] === null) { + return; + } + throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); + } + authHeaders(opts) { + const apiKeyAuth = this.apiKeyAuth(opts); + const bearerAuth = this.bearerAuth(opts); + if (apiKeyAuth != null && !Core.isEmptyObj(apiKeyAuth)) { + return apiKeyAuth; + } + if (bearerAuth != null && !Core.isEmptyObj(bearerAuth)) { + return bearerAuth; + } + return {}; + } + apiKeyAuth(opts) { + if (this.apiKey == null) { + return {}; + } + return { 'X-Api-Key': this.apiKey }; + } + bearerAuth(opts) { + if (this.authToken == null) { + return {}; + } + return { Authorization: `Bearer ${this.authToken}` }; + } +} +_a = Anthropic; +Anthropic.Anthropic = _a; +Anthropic.HUMAN_PROMPT = '\n\nHuman:'; +Anthropic.AI_PROMPT = '\n\nAssistant:'; +Anthropic.DEFAULT_TIMEOUT = 600000; // 10 minutes +Anthropic.AnthropicError = Errors.AnthropicError; +Anthropic.APIError = Errors.APIError; +Anthropic.APIConnectionError = Errors.APIConnectionError; +Anthropic.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError; +Anthropic.APIUserAbortError = Errors.APIUserAbortError; +Anthropic.NotFoundError = Errors.NotFoundError; +Anthropic.ConflictError = Errors.ConflictError; +Anthropic.RateLimitError = Errors.RateLimitError; +Anthropic.BadRequestError = Errors.BadRequestError; +Anthropic.AuthenticationError = Errors.AuthenticationError; +Anthropic.InternalServerError = Errors.InternalServerError; +Anthropic.PermissionDeniedError = Errors.PermissionDeniedError; +Anthropic.UnprocessableEntityError = Errors.UnprocessableEntityError; +Anthropic.toFile = Uploads.toFile; +Anthropic.fileFromPath = Uploads.fileFromPath; +Anthropic.Completions = Completions; +Anthropic.Messages = Messages; +Anthropic.Models = Models; +Anthropic.ModelInfosPage = ModelInfosPage; +Anthropic.Beta = Beta; +export const { HUMAN_PROMPT, AI_PROMPT } = Anthropic; +export { toFile, fileFromPath } from "./uploads.mjs"; +export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./error.mjs"; +export default Anthropic; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/vendor/sdk/index.mjs.map b/vendor/sdk/index.mjs.map new file mode 100644 index 0000000..e2e6a3c --- /dev/null +++ b/vendor/sdk/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/jsonl.d.ts b/vendor/sdk/internal/decoders/jsonl.d.ts new file mode 100644 index 0000000..ec2aaca --- /dev/null +++ b/vendor/sdk/internal/decoders/jsonl.d.ts @@ -0,0 +1,12 @@ + +import { type Response } from "../../_shims/index.js"; +import { type Bytes } from "./line.js"; +export declare class JSONLDecoder { + private iterator; + controller: AbortController; + constructor(iterator: AsyncIterableIterator, controller: AbortController); + private decoder; + [Symbol.asyncIterator](): AsyncIterator; + static fromResponse(response: Response, controller: AbortController): JSONLDecoder; +} +//# sourceMappingURL=jsonl.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/jsonl.d.ts.map b/vendor/sdk/internal/decoders/jsonl.d.ts.map new file mode 100644 index 0000000..6b610de --- /dev/null +++ b/vendor/sdk/internal/decoders/jsonl.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/internal/decoders/jsonl.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEjD,qBAAa,YAAY,CAAC,CAAC;IAIvB,OAAO,CAAC,QAAQ;IAHlB,UAAU,EAAE,eAAe,CAAC;gBAGlB,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAC9C,UAAU,EAAE,eAAe;YAKd,OAAO;IAatB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAI1C,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC;CAQzF"} \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/jsonl.js b/vendor/sdk/internal/decoders/jsonl.js new file mode 100644 index 0000000..4b941a1 --- /dev/null +++ b/vendor/sdk/internal/decoders/jsonl.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.JSONLDecoder = void 0; +const error_1 = require("../../error.js"); +const stream_utils_1 = require("../stream-utils.js"); +const line_1 = require("./line.js"); +class JSONLDecoder { + constructor(iterator, controller) { + this.iterator = iterator; + this.controller = controller; + } + async *decoder() { + const lineDecoder = new line_1.LineDecoder(); + for await (const chunk of this.iterator) { + for (const line of lineDecoder.decode(chunk)) { + yield JSON.parse(line); + } + } + for (const line of lineDecoder.flush()) { + yield JSON.parse(line); + } + } + [Symbol.asyncIterator]() { + return this.decoder(); + } + static fromResponse(response, controller) { + if (!response.body) { + controller.abort(); + throw new error_1.AnthropicError(`Attempted to iterate over a response with no body`); + } + return new JSONLDecoder((0, stream_utils_1.ReadableStreamToAsyncIterable)(response.body), controller); + } +} +exports.JSONLDecoder = JSONLDecoder; +//# sourceMappingURL=jsonl.js.map \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/jsonl.js.map b/vendor/sdk/internal/decoders/jsonl.js.map new file mode 100644 index 0000000..8c74bd3 --- /dev/null +++ b/vendor/sdk/internal/decoders/jsonl.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/internal/decoders/jsonl.ts"],"names":[],"mappings":";;;AAAA,0CAA6C;AAC7C,qDAAgE;AAEhE,oCAAiD;AAEjD,MAAa,YAAY;IAGvB,YACU,QAAsC,EAC9C,UAA2B;QADnB,aAAQ,GAAR,QAAQ,CAA8B;QAG9C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,CAAC,OAAO;QACpB,MAAM,WAAW,GAAG,IAAI,kBAAW,EAAE,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YACvC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACxB;SACF;QAED,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE;YACtC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACxB;IACH,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,YAAY,CAAI,QAAkB,EAAE,UAA2B;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,sBAAc,CAAC,mDAAmD,CAAC,CAAC;SAC/E;QAED,OAAO,IAAI,YAAY,CAAC,IAAA,4CAA6B,EAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3F,CAAC;CACF;AAnCD,oCAmCC"} \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/jsonl.mjs b/vendor/sdk/internal/decoders/jsonl.mjs new file mode 100644 index 0000000..de29e6a --- /dev/null +++ b/vendor/sdk/internal/decoders/jsonl.mjs @@ -0,0 +1,31 @@ +import { AnthropicError } from "../../error.mjs"; +import { ReadableStreamToAsyncIterable } from "../stream-utils.mjs"; +import { LineDecoder } from "./line.mjs"; +export class JSONLDecoder { + constructor(iterator, controller) { + this.iterator = iterator; + this.controller = controller; + } + async *decoder() { + const lineDecoder = new LineDecoder(); + for await (const chunk of this.iterator) { + for (const line of lineDecoder.decode(chunk)) { + yield JSON.parse(line); + } + } + for (const line of lineDecoder.flush()) { + yield JSON.parse(line); + } + } + [Symbol.asyncIterator]() { + return this.decoder(); + } + static fromResponse(response, controller) { + if (!response.body) { + controller.abort(); + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + return new JSONLDecoder(ReadableStreamToAsyncIterable(response.body), controller); + } +} +//# sourceMappingURL=jsonl.mjs.map \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/jsonl.mjs.map b/vendor/sdk/internal/decoders/jsonl.mjs.map new file mode 100644 index 0000000..5d97634 --- /dev/null +++ b/vendor/sdk/internal/decoders/jsonl.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonl.mjs","sourceRoot":"","sources":["../../src/internal/decoders/jsonl.ts"],"names":[],"mappings":"OAAO,EAAE,cAAc,EAAE;OAClB,EAAE,6BAA6B,EAAE;OAEjC,EAAE,WAAW,EAAc;AAElC,MAAM,OAAO,YAAY;IAGvB,YACU,QAAsC,EAC9C,UAA2B;QADnB,aAAQ,GAAR,QAAQ,CAA8B;QAG9C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,CAAC,OAAO;QACpB,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YACvC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACxB;SACF;QAED,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE;YACtC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACxB;IACH,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,YAAY,CAAI,QAAkB,EAAE,UAA2B;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,cAAc,CAAC,mDAAmD,CAAC,CAAC;SAC/E;QAED,OAAO,IAAI,YAAY,CAAC,6BAA6B,CAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3F,CAAC;CACF"} \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/line.d.ts b/vendor/sdk/internal/decoders/line.d.ts new file mode 100644 index 0000000..82045bc --- /dev/null +++ b/vendor/sdk/internal/decoders/line.d.ts @@ -0,0 +1,20 @@ + +export type Bytes = string | ArrayBuffer | Uint8Array | Buffer | null | undefined; +/** + * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally + * reading lines from text. + * + * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258 + */ +export declare class LineDecoder { + #private; + static NEWLINE_CHARS: Set; + static NEWLINE_REGEXP: RegExp; + buffer: Uint8Array; + textDecoder: any; + constructor(); + decode(chunk: Bytes): string[]; + decodeText(bytes: Bytes): string; + flush(): string[]; +} +//# sourceMappingURL=line.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/line.d.ts.map b/vendor/sdk/internal/decoders/line.d.ts.map new file mode 100644 index 0000000..c867bd3 --- /dev/null +++ b/vendor/sdk/internal/decoders/line.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"line.d.ts","sourceRoot":"","sources":["../../src/internal/decoders/line.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAElF;;;;;GAKG;AACH,qBAAa,WAAW;;IAEtB,MAAM,CAAC,aAAa,cAAyB;IAC7C,MAAM,CAAC,cAAc,SAAkB;IAEvC,MAAM,EAAE,UAAU,CAAC;IAEnB,WAAW,EAAE,GAAG,CAAC;;IAOjB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE;IAgD9B,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAqChC,KAAK,IAAI,MAAM,EAAE;CAMlB"} \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/line.js b/vendor/sdk/internal/decoders/line.js new file mode 100644 index 0000000..24ec118 --- /dev/null +++ b/vendor/sdk/internal/decoders/line.js @@ -0,0 +1,123 @@ +"use strict"; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _LineDecoder_carriageReturnIndex; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LineDecoder = void 0; +const error_1 = require("../../error.js"); +/** + * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally + * reading lines from text. + * + * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258 + */ +class LineDecoder { + constructor() { + _LineDecoder_carriageReturnIndex.set(this, void 0); + this.buffer = new Uint8Array(); + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + decode(chunk) { + if (chunk == null) { + return []; + } + const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) + : typeof chunk === 'string' ? new TextEncoder().encode(chunk) + : chunk; + let newData = new Uint8Array(this.buffer.length + binaryChunk.length); + newData.set(this.buffer); + newData.set(binaryChunk, this.buffer.length); + this.buffer = newData; + const lines = []; + let patternIndex; + while ((patternIndex = findNewlineIndex(this.buffer, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { + if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") == null) { + // skip until we either get a corresponding `\n`, a new `\r` or nothing + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); + continue; + } + // we got double \r or \rtext\n + if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") != null && + (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { + lines.push(this.decodeText(this.buffer.slice(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") - 1))); + this.buffer = this.buffer.slice(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f")); + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); + continue; + } + const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; + const line = this.decodeText(this.buffer.slice(0, endIndex)); + lines.push(line); + this.buffer = this.buffer.slice(patternIndex.index); + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + return lines; + } + decodeText(bytes) { + if (bytes == null) + return ''; + if (typeof bytes === 'string') + return bytes; + // Node: + if (typeof Buffer !== 'undefined') { + if (bytes instanceof Buffer) { + return bytes.toString(); + } + if (bytes instanceof Uint8Array) { + return Buffer.from(bytes).toString(); + } + throw new error_1.AnthropicError(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`); + } + // Browser + if (typeof TextDecoder !== 'undefined') { + if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) { + this.textDecoder ?? (this.textDecoder = new TextDecoder('utf8')); + return this.textDecoder.decode(bytes); + } + throw new error_1.AnthropicError(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`); + } + throw new error_1.AnthropicError(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`); + } + flush() { + if (!this.buffer.length) { + return []; + } + return this.decode('\n'); + } +} +exports.LineDecoder = LineDecoder; +_LineDecoder_carriageReturnIndex = new WeakMap(); +// prettier-ignore +LineDecoder.NEWLINE_CHARS = new Set(['\n', '\r']); +LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; +/** + * This function searches the buffer for the end patterns, (\r or \n) + * and returns an object with the index preceding the matched newline and the + * index after the newline char. `null` is returned if no new line is found. + * + * ```ts + * findNewLineIndex('abc\ndef') -> { preceding: 2, index: 3 } + * ``` + */ +function findNewlineIndex(buffer, startIndex) { + const newline = 0x0a; // \n + const carriage = 0x0d; // \r + for (let i = startIndex ?? 0; i < buffer.length; i++) { + if (buffer[i] === newline) { + return { preceding: i, index: i + 1, carriage: false }; + } + if (buffer[i] === carriage) { + return { preceding: i, index: i + 1, carriage: true }; + } + } + return null; +} +//# sourceMappingURL=line.js.map \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/line.js.map b/vendor/sdk/internal/decoders/line.js.map new file mode 100644 index 0000000..0fbc43c --- /dev/null +++ b/vendor/sdk/internal/decoders/line.js.map @@ -0,0 +1 @@ +{"version":3,"file":"line.js","sourceRoot":"","sources":["../../src/internal/decoders/line.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/line.mjs b/vendor/sdk/internal/decoders/line.mjs new file mode 100644 index 0000000..597102e --- /dev/null +++ b/vendor/sdk/internal/decoders/line.mjs @@ -0,0 +1,119 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _LineDecoder_carriageReturnIndex; +import { AnthropicError } from "../../error.mjs"; +/** + * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally + * reading lines from text. + * + * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258 + */ +export class LineDecoder { + constructor() { + _LineDecoder_carriageReturnIndex.set(this, void 0); + this.buffer = new Uint8Array(); + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + decode(chunk) { + if (chunk == null) { + return []; + } + const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) + : typeof chunk === 'string' ? new TextEncoder().encode(chunk) + : chunk; + let newData = new Uint8Array(this.buffer.length + binaryChunk.length); + newData.set(this.buffer); + newData.set(binaryChunk, this.buffer.length); + this.buffer = newData; + const lines = []; + let patternIndex; + while ((patternIndex = findNewlineIndex(this.buffer, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { + if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") == null) { + // skip until we either get a corresponding `\n`, a new `\r` or nothing + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); + continue; + } + // we got double \r or \rtext\n + if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") != null && + (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { + lines.push(this.decodeText(this.buffer.slice(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") - 1))); + this.buffer = this.buffer.slice(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f")); + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); + continue; + } + const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; + const line = this.decodeText(this.buffer.slice(0, endIndex)); + lines.push(line); + this.buffer = this.buffer.slice(patternIndex.index); + __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + return lines; + } + decodeText(bytes) { + if (bytes == null) + return ''; + if (typeof bytes === 'string') + return bytes; + // Node: + if (typeof Buffer !== 'undefined') { + if (bytes instanceof Buffer) { + return bytes.toString(); + } + if (bytes instanceof Uint8Array) { + return Buffer.from(bytes).toString(); + } + throw new AnthropicError(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`); + } + // Browser + if (typeof TextDecoder !== 'undefined') { + if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) { + this.textDecoder ?? (this.textDecoder = new TextDecoder('utf8')); + return this.textDecoder.decode(bytes); + } + throw new AnthropicError(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`); + } + throw new AnthropicError(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`); + } + flush() { + if (!this.buffer.length) { + return []; + } + return this.decode('\n'); + } +} +_LineDecoder_carriageReturnIndex = new WeakMap(); +// prettier-ignore +LineDecoder.NEWLINE_CHARS = new Set(['\n', '\r']); +LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; +/** + * This function searches the buffer for the end patterns, (\r or \n) + * and returns an object with the index preceding the matched newline and the + * index after the newline char. `null` is returned if no new line is found. + * + * ```ts + * findNewLineIndex('abc\ndef') -> { preceding: 2, index: 3 } + * ``` + */ +function findNewlineIndex(buffer, startIndex) { + const newline = 0x0a; // \n + const carriage = 0x0d; // \r + for (let i = startIndex ?? 0; i < buffer.length; i++) { + if (buffer[i] === newline) { + return { preceding: i, index: i + 1, carriage: false }; + } + if (buffer[i] === carriage) { + return { preceding: i, index: i + 1, carriage: true }; + } + } + return null; +} +//# sourceMappingURL=line.mjs.map \ No newline at end of file diff --git a/vendor/sdk/internal/decoders/line.mjs.map b/vendor/sdk/internal/decoders/line.mjs.map new file mode 100644 index 0000000..7155734 --- /dev/null +++ b/vendor/sdk/internal/decoders/line.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"line.mjs","sourceRoot":"","sources":["../../src/internal/decoders/line.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/internal/stream-utils.d.ts b/vendor/sdk/internal/stream-utils.d.ts new file mode 100644 index 0000000..1fd3c25 --- /dev/null +++ b/vendor/sdk/internal/stream-utils.d.ts @@ -0,0 +1,8 @@ +/** + * Most browsers don't yet have async iterable support for ReadableStream, + * and Node has a very different way of reading bytes from its "ReadableStream". + * + * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490 + */ +export declare function ReadableStreamToAsyncIterable(stream: any): AsyncIterableIterator; +//# sourceMappingURL=stream-utils.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/internal/stream-utils.d.ts.map b/vendor/sdk/internal/stream-utils.d.ts.map new file mode 100644 index 0000000..9e8ce6e --- /dev/null +++ b/vendor/sdk/internal/stream-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../src/internal/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAyBtF"} \ No newline at end of file diff --git a/vendor/sdk/internal/stream-utils.js b/vendor/sdk/internal/stream-utils.js new file mode 100644 index 0000000..b9d2cd8 --- /dev/null +++ b/vendor/sdk/internal/stream-utils.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ReadableStreamToAsyncIterable = void 0; +/** + * Most browsers don't yet have async iterable support for ReadableStream, + * and Node has a very different way of reading bytes from its "ReadableStream". + * + * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490 + */ +function ReadableStreamToAsyncIterable(stream) { + if (stream[Symbol.asyncIterator]) + return stream; + const reader = stream.getReader(); + return { + async next() { + try { + const result = await reader.read(); + if (result?.done) + reader.releaseLock(); // release lock when stream becomes closed + return result; + } + catch (e) { + reader.releaseLock(); // release lock when stream becomes errored + throw e; + } + }, + async return() { + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; + return { done: true, value: undefined }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; +} +exports.ReadableStreamToAsyncIterable = ReadableStreamToAsyncIterable; +//# sourceMappingURL=stream-utils.js.map \ No newline at end of file diff --git a/vendor/sdk/internal/stream-utils.js.map b/vendor/sdk/internal/stream-utils.js.map new file mode 100644 index 0000000..b0eef83 --- /dev/null +++ b/vendor/sdk/internal/stream-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../src/internal/stream-utils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,6BAA6B,CAAI,MAAW;IAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,IAAI;oBAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,0CAA0C;gBAClF,OAAO,MAAM,CAAC;aACf;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,2CAA2C;gBACjE,MAAM,CAAC,CAAC;aACT;QACH,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,aAAa,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;QACD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAzBD,sEAyBC"} \ No newline at end of file diff --git a/vendor/sdk/internal/stream-utils.mjs b/vendor/sdk/internal/stream-utils.mjs new file mode 100644 index 0000000..6ff54b8 --- /dev/null +++ b/vendor/sdk/internal/stream-utils.mjs @@ -0,0 +1,35 @@ +/** + * Most browsers don't yet have async iterable support for ReadableStream, + * and Node has a very different way of reading bytes from its "ReadableStream". + * + * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490 + */ +export function ReadableStreamToAsyncIterable(stream) { + if (stream[Symbol.asyncIterator]) + return stream; + const reader = stream.getReader(); + return { + async next() { + try { + const result = await reader.read(); + if (result?.done) + reader.releaseLock(); // release lock when stream becomes closed + return result; + } + catch (e) { + reader.releaseLock(); // release lock when stream becomes errored + throw e; + } + }, + async return() { + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; + return { done: true, value: undefined }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; +} +//# sourceMappingURL=stream-utils.mjs.map \ No newline at end of file diff --git a/vendor/sdk/internal/stream-utils.mjs.map b/vendor/sdk/internal/stream-utils.mjs.map new file mode 100644 index 0000000..d9f43fe --- /dev/null +++ b/vendor/sdk/internal/stream-utils.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"stream-utils.mjs","sourceRoot":"","sources":["../src/internal/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAI,MAAW;IAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,IAAI;oBAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,0CAA0C;gBAClF,OAAO,MAAM,CAAC;aACf;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,2CAA2C;gBACjE,MAAM,CAAC,CAAC;aACT;QACH,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,aAAa,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;QACD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/lib/BetaMessageStream.d.ts b/vendor/sdk/lib/BetaMessageStream.d.ts new file mode 100644 index 0000000..505902a --- /dev/null +++ b/vendor/sdk/lib/BetaMessageStream.d.ts @@ -0,0 +1,114 @@ + +import * as Core from '@anthropic-ai/sdk/core'; +import { AnthropicError, APIUserAbortError } from '@anthropic-ai/sdk/error'; +import { type BetaContentBlock, Messages as BetaMessages, type BetaMessage, type BetaRawMessageStreamEvent as BetaMessageStreamEvent, type BetaMessageParam, type MessageCreateParams as BetaMessageCreateParams, type MessageCreateParamsBase as BetaMessageCreateParamsBase, type BetaTextCitation } from '@anthropic-ai/sdk/resources/beta/messages/messages'; +import { type ReadableStream, type Response } from '@anthropic-ai/sdk/_shims/index'; +export interface MessageStreamEvents { + connect: () => void; + streamEvent: (event: BetaMessageStreamEvent, snapshot: BetaMessage) => void; + text: (textDelta: string, textSnapshot: string) => void; + citation: (citation: BetaTextCitation, citationsSnapshot: BetaTextCitation[]) => void; + inputJson: (partialJson: string, jsonSnapshot: unknown) => void; + thinking: (thinkingDelta: string, thinkingSnapshot: string) => void; + message: (message: BetaMessage) => void; + contentBlock: (content: BetaContentBlock) => void; + finalMessage: (message: BetaMessage) => void; + error: (error: AnthropicError) => void; + abort: (error: APIUserAbortError) => void; + end: () => void; +} +export declare class BetaMessageStream implements AsyncIterable { + #private; + messages: BetaMessageParam[]; + receivedMessages: BetaMessage[]; + controller: AbortController; + constructor(); + get response(): Response | null | undefined; + get request_id(): string | null | undefined; + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + withResponse(): Promise<{ + data: BetaMessageStream; + response: Response; + request_id: string | null | undefined; + }>; + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream: ReadableStream): BetaMessageStream; + static createMessage(messages: BetaMessages, params: BetaMessageCreateParamsBase, options?: Core.RequestOptions): BetaMessageStream; + protected _run(executor: () => Promise): void; + protected _addMessageParam(message: BetaMessageParam): void; + protected _addMessage(message: BetaMessage, emit?: boolean): void; + protected _createMessage(messages: BetaMessages, params: BetaMessageCreateParams, options?: Core.RequestOptions): Promise; + protected _connected(response: Response | null): void; + get ended(): boolean; + get errored(): boolean; + get aborted(): boolean; + abort(): void; + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event: Event, listener: MessageStreamEvents[Event]): this; + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event: Event, listener: MessageStreamEvents[Event]): this; + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event: Event, listener: MessageStreamEvents[Event]): this; + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event: Event): Promise extends [infer Param] ? Param : Parameters extends [] ? void : Parameters>; + done(): Promise; + get currentMessage(): BetaMessage | undefined; + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + finalMessage(): Promise; + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + finalText(): Promise; + protected _emit(event: Event, ...args: Parameters): void; + protected _emitFinal(): void; + protected _fromReadableStream(readableStream: ReadableStream, options?: Core.RequestOptions): Promise; + [Symbol.asyncIterator](): AsyncIterator; + toReadableStream(): ReadableStream; +} +//# sourceMappingURL=BetaMessageStream.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/lib/BetaMessageStream.d.ts.map b/vendor/sdk/lib/BetaMessageStream.d.ts.map new file mode 100644 index 0000000..a8a5393 --- /dev/null +++ b/vendor/sdk/lib/BetaMessageStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BetaMessageStream.d.ts","sourceRoot":"","sources":["../src/lib/BetaMessageStream.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/lib/BetaMessageStream.js b/vendor/sdk/lib/BetaMessageStream.js new file mode 100644 index 0000000..d0e913a --- /dev/null +++ b/vendor/sdk/lib/BetaMessageStream.js @@ -0,0 +1,547 @@ +"use strict"; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BetaMessageStream = void 0; +const error_1 = require("@anthropic-ai/sdk/error"); +const streaming_1 = require("@anthropic-ai/sdk/streaming"); +const parser_1 = require("../_vendor/partial-json-parser/parser.js"); +const JSON_BUF_PROPERTY = '__json_buf'; +class BetaMessageStream { + constructor() { + _BetaMessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _BetaMessageStream_currentMessageSnapshot.set(this, void 0); + this.controller = new AbortController(); + _BetaMessageStream_connectedPromise.set(this, void 0); + _BetaMessageStream_resolveConnectedPromise.set(this, () => { }); + _BetaMessageStream_rejectConnectedPromise.set(this, () => { }); + _BetaMessageStream_endPromise.set(this, void 0); + _BetaMessageStream_resolveEndPromise.set(this, () => { }); + _BetaMessageStream_rejectEndPromise.set(this, () => { }); + _BetaMessageStream_listeners.set(this, {}); + _BetaMessageStream_ended.set(this, false); + _BetaMessageStream_errored.set(this, false); + _BetaMessageStream_aborted.set(this, false); + _BetaMessageStream_catchingPromiseCreated.set(this, false); + _BetaMessageStream_response.set(this, void 0); + _BetaMessageStream_request_id.set(this, void 0); + _BetaMessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet(this, _BetaMessageStream_errored, true, "f"); + if (error instanceof Error && error.name === 'AbortError') { + error = new error_1.APIUserAbortError(); + } + if (error instanceof error_1.APIUserAbortError) { + __classPrivateFieldSet(this, _BetaMessageStream_aborted, true, "f"); + return this._emit('abort', error); + } + if (error instanceof error_1.AnthropicError) { + return this._emit('error', error); + } + if (error instanceof Error) { + const anthropicError = new error_1.AnthropicError(error.message); + // @ts-ignore + anthropicError.cause = error; + return this._emit('error', anthropicError); + } + return this._emit('error', new error_1.AnthropicError(String(error))); + }); + __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve, "f"); + __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject, "f"); + }), "f"); + __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve, "f"); + __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject, "f"); + }), "f"); + // Don't let these promises cause unhandled rejection errors. + // we will manually cause an unhandled rejection error later + // if the user hasn't registered any error listener or called + // any promise-returning method. + __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f").catch(() => { }); + __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f").catch(() => { }); + } + get response() { + return __classPrivateFieldGet(this, _BetaMessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet(this, _BetaMessageStream_request_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f"); + if (!response) { + throw new Error('Could not resolve a `Response` object'); + } + return { + data: this, + response, + request_id: response.headers.get('request-id'), + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream) { + const runner = new BetaMessageStream(); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + static createMessage(messages, params, options) { + const runner = new BetaMessageStream(); + for (const message of params.messages) { + runner._addMessageParam(message); + } + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit('end'); + }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit('message', message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + const { response, data: stream } = await messages + .create({ ...params, stream: true }, { ...options, signal: this.controller.signal }) + .withResponse(); + this._connected(response); + for await (const event of stream) { + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new error_1.APIUserAbortError(); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet(this, _BetaMessageStream_response, response, "f"); + __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get('request-id'), "f"); + __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit('connect'); + } + get ended() { + return __classPrivateFieldGet(this, _BetaMessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet(this, _BetaMessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet(this, _BetaMessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + if (event !== 'error') + this.once('error', reject); + this.once(event, resolve); + }); + } + async done() { + __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + // make sure we don't emit any MessageStreamEvents after end + if (__classPrivateFieldGet(this, _BetaMessageStream_ended, "f")) + return; + if (event === 'end') { + __classPrivateFieldSet(this, _BetaMessageStream_ended, true, "f"); + __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === 'abort') { + const error = args[0]; + if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + return; + } + if (event === 'error') { + // NOTE: _emit('error', error) should only be called from #handleError(). + const error = args[0]; + if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + // Trigger an unhandled rejection if the user hasn't registered any error handlers. + // If you are seeing stack traces here, make sure to handle errors via either: + // - runner.on('error', () => ...) + // - await runner.done() + // - await runner.final...() + // - etc. + Promise.reject(error); + } + __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit('finalMessage', __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + this._connected(null); + const stream = streaming_1.Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new error_1.APIUserAbortError(); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } + [(_BetaMessageStream_currentMessageSnapshot = new WeakMap(), _BetaMessageStream_connectedPromise = new WeakMap(), _BetaMessageStream_resolveConnectedPromise = new WeakMap(), _BetaMessageStream_rejectConnectedPromise = new WeakMap(), _BetaMessageStream_endPromise = new WeakMap(), _BetaMessageStream_resolveEndPromise = new WeakMap(), _BetaMessageStream_rejectEndPromise = new WeakMap(), _BetaMessageStream_listeners = new WeakMap(), _BetaMessageStream_ended = new WeakMap(), _BetaMessageStream_errored = new WeakMap(), _BetaMessageStream_aborted = new WeakMap(), _BetaMessageStream_catchingPromiseCreated = new WeakMap(), _BetaMessageStream_response = new WeakMap(), _BetaMessageStream_request_id = new WeakMap(), _BetaMessageStream_handleError = new WeakMap(), _BetaMessageStream_instances = new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage() { + if (this.receivedMessages.length === 0) { + throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant'); + } + return this.receivedMessages.at(-1); + }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText() { + if (this.receivedMessages.length === 0) { + throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant'); + } + const textBlocks = this.receivedMessages + .at(-1) + .content.filter((block) => block.type === 'text') + .map((block) => block.text); + if (textBlocks.length === 0) { + throw new error_1.AnthropicError('stream ended without producing a content block with type=text'); + } + return textBlocks.join(' '); + }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest() { + if (this.ended) + return; + __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined, "f"); + }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event); + this._emit('streamEvent', event, messageSnapshot); + switch (event.type) { + case 'content_block_delta': { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case 'text_delta': { + if (content.type === 'text') { + this._emit('text', event.delta.text, content.text || ''); + } + break; + } + case 'citations_delta': { + if (content.type === 'text') { + this._emit('citation', event.delta.citation, content.citations ?? []); + } + break; + } + case 'input_json_delta': { + if (content.type === 'tool_use' && content.input) { + this._emit('inputJson', event.delta.partial_json, content.input); + } + break; + } + case 'thinking_delta': { + if (content.type === 'thinking') { + this._emit('thinking', event.delta.thinking, content.thinking); + } + break; + } + case 'signature_delta': { + // we don't emit anything special in this case. + break; + } + default: + checkNever(event.delta); + } + break; + } + case 'message_stop': { + this._addMessageParam(messageSnapshot); + this._addMessage(messageSnapshot, true); + break; + } + case 'content_block_stop': { + this._emit('contentBlock', messageSnapshot.content.at(-1)); + break; + } + case 'message_start': { + __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case 'content_block_start': + case 'message_delta': + break; + } + }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest() { + if (this.ended) { + throw new error_1.AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new error_1.AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined, "f"); + return snapshot; + }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage(event) { + let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (event.type === 'message_start') { + if (snapshot) { + throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case 'message_stop': + return snapshot; + case 'message_delta': + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.usage.output_tokens = event.usage.output_tokens; + return snapshot; + case 'content_block_start': + snapshot.content.push(event.content_block); + return snapshot; + case 'content_block_delta': { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case 'text_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.text += event.delta.text; + } + break; + } + case 'citations_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.citations ?? (snapshotContent.citations = []); + snapshotContent.citations.push(event.delta.citation); + } + break; + } + case 'input_json_delta': { + if (snapshotContent?.type === 'tool_use') { + // we need to keep track of the raw JSON string as well so that we can + // re-parse it for each delta, for now we just store it as an untyped + // non-enumerable property on the snapshot + let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || ''; + jsonBuf += event.delta.partial_json; + Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, { + value: jsonBuf, + enumerable: false, + writable: true, + }); + if (jsonBuf) { + snapshotContent.input = (0, parser_1.partialParse)(jsonBuf); + } + } + break; + } + case 'thinking_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.thinking += event.delta.thinking; + } + break; + } + case 'signature_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.signature += event.delta.signature; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case 'content_block_stop': + return snapshot; + } + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on('streamEvent', (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } + else { + pushQueue.push(event); + } + }); + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true })); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }; + } + toReadableStream() { + const stream = new streaming_1.Stream(this[Symbol.asyncIterator].bind(this), this.controller); + return stream.toReadableStream(); + } +} +exports.BetaMessageStream = BetaMessageStream; +// used to ensure exhaustive case matching without throwing a runtime error +function checkNever(x) { } +//# sourceMappingURL=BetaMessageStream.js.map \ No newline at end of file diff --git a/vendor/sdk/lib/BetaMessageStream.js.map b/vendor/sdk/lib/BetaMessageStream.js.map new file mode 100644 index 0000000..8a987b0 --- /dev/null +++ b/vendor/sdk/lib/BetaMessageStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"BetaMessageStream.js","sourceRoot":"","sources":["../src/lib/BetaMessageStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,mDAA4E;AAa5E,2DAAqD;AACrD,qEAAqE;AAsBrE,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAEvC,MAAa,iBAAiB;IAwB5B;;QAvBA,aAAQ,GAAuB,EAAE,CAAC;QAClC,qBAAgB,GAAkB,EAAE,CAAC;QACrC,4DAAiD;QAEjD,eAAU,GAAoB,IAAI,eAAe,EAAE,CAAC;QAEpD,sDAA4C;QAC5C,qDAAgE,GAAG,EAAE,GAAE,CAAC,EAAC;QACzE,oDAA2D,GAAG,EAAE,GAAE,CAAC,EAAC;QAEpE,gDAA2B;QAC3B,+CAAiC,GAAG,EAAE,GAAE,CAAC,EAAC;QAC1C,8CAAqD,GAAG,EAAE,GAAE,CAAC,EAAC;QAE9D,uCAA4F,EAAE,EAAC;QAE/F,mCAAS,KAAK,EAAC;QACf,qCAAW,KAAK,EAAC;QACjB,qCAAW,KAAK,EAAC;QACjB,oDAA0B,KAAK,EAAC;QAChC,8CAAuC;QACvC,gDAAuC;QA6QvC,yCAAe,CAAC,KAAc,EAAE,EAAE;YAChC,uBAAA,IAAI,8BAAY,IAAI,MAAA,CAAC;YACrB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gBACzD,KAAK,GAAG,IAAI,yBAAiB,EAAE,CAAC;aACjC;YACD,IAAI,KAAK,YAAY,yBAAiB,EAAE;gBACtC,uBAAA,IAAI,8BAAY,IAAI,MAAA,CAAC;gBACrB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aACnC;YACD,IAAI,KAAK,YAAY,sBAAc,EAAE;gBACnC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aACnC;YACD,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,MAAM,cAAc,GAAmB,IAAI,sBAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzE,aAAa;gBACb,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;aAC5C;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,sBAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,EAAC;QA7RA,uBAAA,IAAI,uCAAqB,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxE,uBAAA,IAAI,8CAA4B,OAAO,MAAA,CAAC;YACxC,uBAAA,IAAI,6CAA2B,MAAM,MAAA,CAAC;QACxC,CAAC,CAAC,MAAA,CAAC;QAEH,uBAAA,IAAI,iCAAe,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,uBAAA,IAAI,wCAAsB,OAAO,MAAA,CAAC;YAClC,uBAAA,IAAI,uCAAqB,MAAM,MAAA,CAAC;QAClC,CAAC,CAAC,MAAA,CAAC;QAEH,6DAA6D;QAC7D,4DAA4D;QAC5D,6DAA6D;QAC7D,gCAAgC;QAChC,uBAAA,IAAI,2CAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,uBAAA,IAAI,qCAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,uBAAA,IAAI,mCAAU,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,qCAAY,CAAC;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,YAAY;QAKhB,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,2CAAkB,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QAED,OAAO;YACL,IAAI,EAAE,IAAI;YACV,QAAQ;YACR,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAsB;QAC9C,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,aAAa,CAClB,QAAsB,EACtB,MAAmC,EACnC,OAA6B;QAE7B,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACvC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAClC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CACf,MAAM,CAAC,cAAc,CACnB,QAAQ,EACR,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAC3B,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,EAAE,CACxF,CACF,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,IAAI,CAAC,QAA4B;QACzC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,EAAE,uBAAA,IAAI,sCAAa,CAAC,CAAC;IACxB,CAAC;IAES,gBAAgB,CAAC,OAAyB;QAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAES,WAAW,CAAC,OAAoB,EAAE,IAAI,GAAG,IAAI;QACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SAChC;IACH,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,QAAsB,EACtB,MAA+B,EAC/B,OAA6B;QAE7B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC/B,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;SACjE;QACD,uBAAA,IAAI,qEAAc,MAAlB,IAAI,CAAgB,CAAC;QACrB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ;aAC9C,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;aACnF,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE;YAChC,uBAAA,IAAI,uEAAgB,MAApB,IAAI,EAAiB,KAAK,CAAC,CAAC;SAC7B;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;YACrC,MAAM,IAAI,yBAAiB,EAAE,CAAC;SAC/B;QACD,uBAAA,IAAI,mEAAY,MAAhB,IAAI,CAAc,CAAC;IACrB,CAAC;IAES,UAAU,CAAC,QAAyB;QAC5C,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,uBAAA,IAAI,+BAAa,QAAQ,MAAA,CAAC;QAC1B,uBAAA,IAAI,iCAAe,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAA,CAAC;QACvD,uBAAA,IAAI,kDAAyB,MAA7B,IAAI,EAA0B,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,uBAAA,IAAI,gCAAO,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,uBAAA,IAAI,kCAAS,CAAC;IACvB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,uBAAA,IAAI,kCAAS,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACH,EAAE,CAA0C,KAAY,EAAE,QAAoC;QAC5F,MAAM,SAAS,GACb,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAA0C,KAAY,EAAE,QAAoC;QAC7F,MAAM,SAAS,GAAG,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAClE,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI,CAA0C,KAAY,EAAE,QAAoC;QAC9F,MAAM,SAAS,GACb,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACH,OAAO,CACL,KAAY;QAMZ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,uBAAA,IAAI,6CAA2B,IAAI,MAAA,CAAC;YACpC,IAAI,KAAK,KAAK,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,uBAAA,IAAI,6CAA2B,IAAI,MAAA,CAAC;QACpC,MAAM,uBAAA,IAAI,qCAAY,CAAC;IACzB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,uBAAA,IAAI,iDAAwB,CAAC;IACtC,CAAC;IASD;;;OAGG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,uBAAA,IAAI,wEAAiB,MAArB,IAAI,CAAmB,CAAC;IACjC,CAAC;IAgBD;;;;OAIG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,uBAAA,IAAI,qEAAc,MAAlB,IAAI,CAAgB,CAAC;IAC9B,CAAC;IAuBS,KAAK,CACb,KAAY,EACZ,GAAG,IAA4C;QAE/C,4DAA4D;QAC5D,IAAI,uBAAA,IAAI,gCAAO;YAAE,OAAO;QAExB,IAAI,KAAK,KAAK,KAAK,EAAE;YACnB,uBAAA,IAAI,4BAAU,IAAI,MAAA,CAAC;YACnB,uBAAA,IAAI,4CAAmB,MAAvB,IAAI,CAAqB,CAAC;SAC3B;QAED,MAAM,SAAS,GAAmD,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,CAAC;QACzF,IAAI,SAAS,EAAE;YACb,uBAAA,IAAI,oCAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAQ,CAAC;YACjE,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;SAC7D;QAED,IAAI,KAAK,KAAK,OAAO,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAsB,CAAC;YAC3C,IAAI,CAAC,uBAAA,IAAI,iDAAwB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;gBACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACvB;YACD,uBAAA,IAAI,iDAAwB,MAA5B,IAAI,EAAyB,KAAK,CAAC,CAAC;YACpC,uBAAA,IAAI,2CAAkB,MAAtB,IAAI,EAAmB,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;SACR;QAED,IAAI,KAAK,KAAK,OAAO,EAAE;YACrB,yEAAyE;YAEzE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAmB,CAAC;YACxC,IAAI,CAAC,uBAAA,IAAI,iDAAwB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;gBACvD,mFAAmF;gBACnF,8EAA8E;gBAC9E,kCAAkC;gBAClC,wBAAwB;gBACxB,4BAA4B;gBAC5B,SAAS;gBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACvB;YACD,uBAAA,IAAI,iDAAwB,MAA5B,IAAI,EAAyB,KAAK,CAAC,CAAC;YACpC,uBAAA,IAAI,2CAAkB,MAAtB,IAAI,EAAmB,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACnB;IACH,CAAC;IAES,UAAU;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,uBAAA,IAAI,wEAAiB,MAArB,IAAI,CAAmB,CAAC,CAAC;SACrD;IACH,CAAC;IA8ES,KAAK,CAAC,mBAAmB,CACjC,cAA8B,EAC9B,OAA6B;QAE7B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC/B,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;SACjE;QACD,uBAAA,IAAI,qEAAc,MAAlB,IAAI,CAAgB,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,kBAAM,CAAC,kBAAkB,CAAyB,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClG,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE;YAChC,uBAAA,IAAI,uEAAgB,MAApB,IAAI,EAAiB,KAAK,CAAC,CAAC;SAC7B;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;YACrC,MAAM,IAAI,yBAAiB,EAAE,CAAC;SAC/B;QACD,uBAAA,IAAI,mEAAY,MAAhB,IAAI,CAAc,CAAC;IACrB,CAAC;IA2FD;QA7SE,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,MAAM,IAAI,sBAAc,CAAC,8DAA8D,CAAC,CAAC;SAC1F;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IACvC,CAAC;QAYC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,MAAM,IAAI,sBAAc,CAAC,8DAA8D,CAAC,CAAC;SAC1F;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB;aACrC,EAAE,CAAC,CAAC,CAAC,CAAE;aACP,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAA0B,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACxE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,IAAI,sBAAc,CAAC,+DAA+D,CAAC,CAAC;SAC3F;QACD,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;QAyFC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,uBAAA,IAAI,6CAA2B,SAAS,MAAA,CAAC;IAC3C,CAAC,iFACe,KAA6B;QAC3C,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,MAAM,eAAe,GAAG,uBAAA,IAAI,0EAAmB,MAAvB,IAAI,EAAoB,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QAElD,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,qBAAqB,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;gBAChD,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;oBACxB,KAAK,YAAY,CAAC,CAAC;wBACjB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;4BAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;yBAC1D;wBACD,MAAM;qBACP;oBACD,KAAK,iBAAiB,CAAC,CAAC;wBACtB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;4BAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;yBACvE;wBACD,MAAM;qBACP;oBACD,KAAK,kBAAkB,CAAC,CAAC;wBACvB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE;4BAChD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;yBAClE;wBACD,MAAM;qBACP;oBACD,KAAK,gBAAgB,CAAC,CAAC;wBACrB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;4BAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;yBAChE;wBACD,MAAM;qBACP;oBACD,KAAK,iBAAiB,CAAC,CAAC;wBACtB,+CAA+C;wBAC/C,MAAM;qBACP;oBACD;wBACE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBACD,MAAM;aACP;YACD,KAAK,cAAc,CAAC,CAAC;gBACnB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBACvC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM;aACP;YACD,KAAK,oBAAoB,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;gBAC5D,MAAM;aACP;YACD,KAAK,eAAe,CAAC,CAAC;gBACpB,uBAAA,IAAI,6CAA2B,eAAe,MAAA,CAAC;gBAC/C,MAAM;aACP;YACD,KAAK,qBAAqB,CAAC;YAC3B,KAAK,eAAe;gBAClB,MAAM;SACT;IACH,CAAC;QAEC,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,sBAAc,CAAC,yCAAyC,CAAC,CAAC;SACrE;QACD,MAAM,QAAQ,GAAG,uBAAA,IAAI,iDAAwB,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,sBAAc,CAAC,0CAA0C,CAAC,CAAC;SACtE;QACD,uBAAA,IAAI,6CAA2B,SAAS,MAAA,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC,uFA4BkB,KAA6B;QAC9C,IAAI,QAAQ,GAAG,uBAAA,IAAI,iDAAwB,CAAC;QAE5C,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE;YAClC,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAI,sBAAc,CAAC,+BAA+B,KAAK,CAAC,IAAI,kCAAkC,CAAC,CAAC;aACvG;YACD,OAAO,KAAK,CAAC,OAAO,CAAC;SACtB;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,sBAAc,CAAC,+BAA+B,KAAK,CAAC,IAAI,yBAAyB,CAAC,CAAC;SAC9F;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,cAAc;gBACjB,OAAO,QAAQ,CAAC;YAClB,KAAK,eAAe;gBAClB,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC/C,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;gBACnD,QAAQ,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;gBACzD,OAAO,QAAQ,CAAC;YAClB,KAAK,qBAAqB;gBACxB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC3C,OAAO,QAAQ,CAAC;YAClB,KAAK,qBAAqB,CAAC,CAAC;gBAC1B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEzD,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;oBACxB,KAAK,YAAY,CAAC,CAAC;wBACjB,IAAI,eAAe,EAAE,IAAI,KAAK,MAAM,EAAE;4BACpC,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;yBAC1C;wBACD,MAAM;qBACP;oBACD,KAAK,iBAAiB,CAAC,CAAC;wBACtB,IAAI,eAAe,EAAE,IAAI,KAAK,MAAM,EAAE;4BACpC,eAAe,CAAC,SAAS,KAAzB,eAAe,CAAC,SAAS,GAAK,EAAE,EAAC;4BACjC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;yBACtD;wBACD,MAAM;qBACP;oBACD,KAAK,kBAAkB,CAAC,CAAC;wBACvB,IAAI,eAAe,EAAE,IAAI,KAAK,UAAU,EAAE;4BACxC,sEAAsE;4BACtE,qEAAqE;4BACrE,0CAA0C;4BAC1C,IAAI,OAAO,GAAI,eAAuB,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;4BAChE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;4BAEpC,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,iBAAiB,EAAE;gCACxD,KAAK,EAAE,OAAO;gCACd,UAAU,EAAE,KAAK;gCACjB,QAAQ,EAAE,IAAI;6BACf,CAAC,CAAC;4BAEH,IAAI,OAAO,EAAE;gCACX,eAAe,CAAC,KAAK,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,CAAC;6BAC/C;yBACF;wBACD,MAAM;qBACP;oBACD,KAAK,gBAAgB,CAAC,CAAC;wBACrB,IAAI,eAAe,EAAE,IAAI,KAAK,UAAU,EAAE;4BACxC,eAAe,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;yBAClD;wBACD,MAAM;qBACP;oBACD,KAAK,iBAAiB,CAAC,CAAC;wBACtB,IAAI,eAAe,EAAE,IAAI,KAAK,UAAU,EAAE;4BACxC,eAAe,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;yBACpD;wBACD,MAAM;qBACP;oBACD;wBACE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBACD,OAAO,QAAQ,CAAC;aACjB;YACD,KAAK,oBAAoB;gBACvB,OAAO,QAAQ,CAAC;SACnB;IACH,CAAC,EAEA,MAAM,CAAC,aAAa,EAAC;QACpB,MAAM,SAAS,GAA6B,EAAE,CAAC;QAC/C,MAAM,SAAS,GAGT,EAAE,CAAC;QACT,IAAI,IAAI,GAAG,KAAK,CAAC;QAEjB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACvB;iBAAM;gBACL,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAClB,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;gBAC9B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAC3B;YACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;gBAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;YACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;gBAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;YACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,KAAK,IAAqD,EAAE;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;oBACrB,IAAI,IAAI,EAAE;wBACR,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;qBACzC;oBACD,OAAO,IAAI,OAAO,CAAqC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACzE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CACpC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC/F;gBACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAG,CAAC;gBACjC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACvC,CAAC;YACD,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC1C,CAAC;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,MAAM,MAAM,GAAG,IAAI,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClF,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;CACF;AA1mBD,8CA0mBC;AAED,2EAA2E;AAC3E,SAAS,UAAU,CAAC,CAAQ,IAAG,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/lib/BetaMessageStream.mjs b/vendor/sdk/lib/BetaMessageStream.mjs new file mode 100644 index 0000000..eff0147 --- /dev/null +++ b/vendor/sdk/lib/BetaMessageStream.mjs @@ -0,0 +1,543 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage; +import { AnthropicError, APIUserAbortError } from '@anthropic-ai/sdk/error'; +import { Stream } from '@anthropic-ai/sdk/streaming'; +import { partialParse } from "../_vendor/partial-json-parser/parser.mjs"; +const JSON_BUF_PROPERTY = '__json_buf'; +export class BetaMessageStream { + constructor() { + _BetaMessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _BetaMessageStream_currentMessageSnapshot.set(this, void 0); + this.controller = new AbortController(); + _BetaMessageStream_connectedPromise.set(this, void 0); + _BetaMessageStream_resolveConnectedPromise.set(this, () => { }); + _BetaMessageStream_rejectConnectedPromise.set(this, () => { }); + _BetaMessageStream_endPromise.set(this, void 0); + _BetaMessageStream_resolveEndPromise.set(this, () => { }); + _BetaMessageStream_rejectEndPromise.set(this, () => { }); + _BetaMessageStream_listeners.set(this, {}); + _BetaMessageStream_ended.set(this, false); + _BetaMessageStream_errored.set(this, false); + _BetaMessageStream_aborted.set(this, false); + _BetaMessageStream_catchingPromiseCreated.set(this, false); + _BetaMessageStream_response.set(this, void 0); + _BetaMessageStream_request_id.set(this, void 0); + _BetaMessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet(this, _BetaMessageStream_errored, true, "f"); + if (error instanceof Error && error.name === 'AbortError') { + error = new APIUserAbortError(); + } + if (error instanceof APIUserAbortError) { + __classPrivateFieldSet(this, _BetaMessageStream_aborted, true, "f"); + return this._emit('abort', error); + } + if (error instanceof AnthropicError) { + return this._emit('error', error); + } + if (error instanceof Error) { + const anthropicError = new AnthropicError(error.message); + // @ts-ignore + anthropicError.cause = error; + return this._emit('error', anthropicError); + } + return this._emit('error', new AnthropicError(String(error))); + }); + __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve, "f"); + __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject, "f"); + }), "f"); + __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve, "f"); + __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject, "f"); + }), "f"); + // Don't let these promises cause unhandled rejection errors. + // we will manually cause an unhandled rejection error later + // if the user hasn't registered any error listener or called + // any promise-returning method. + __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f").catch(() => { }); + __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f").catch(() => { }); + } + get response() { + return __classPrivateFieldGet(this, _BetaMessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet(this, _BetaMessageStream_request_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f"); + if (!response) { + throw new Error('Could not resolve a `Response` object'); + } + return { + data: this, + response, + request_id: response.headers.get('request-id'), + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream) { + const runner = new BetaMessageStream(); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + static createMessage(messages, params, options) { + const runner = new BetaMessageStream(); + for (const message of params.messages) { + runner._addMessageParam(message); + } + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit('end'); + }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit('message', message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + const { response, data: stream } = await messages + .create({ ...params, stream: true }, { ...options, signal: this.controller.signal }) + .withResponse(); + this._connected(response); + for await (const event of stream) { + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet(this, _BetaMessageStream_response, response, "f"); + __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get('request-id'), "f"); + __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit('connect'); + } + get ended() { + return __classPrivateFieldGet(this, _BetaMessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet(this, _BetaMessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet(this, _BetaMessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + if (event !== 'error') + this.once('error', reject); + this.once(event, resolve); + }); + } + async done() { + __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + // make sure we don't emit any MessageStreamEvents after end + if (__classPrivateFieldGet(this, _BetaMessageStream_ended, "f")) + return; + if (event === 'end') { + __classPrivateFieldSet(this, _BetaMessageStream_ended, true, "f"); + __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === 'abort') { + const error = args[0]; + if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + return; + } + if (event === 'error') { + // NOTE: _emit('error', error) should only be called from #handleError(). + const error = args[0]; + if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + // Trigger an unhandled rejection if the user hasn't registered any error handlers. + // If you are seeing stack traces here, make sure to handle errors via either: + // - runner.on('error', () => ...) + // - await runner.done() + // - await runner.final...() + // - etc. + Promise.reject(error); + } + __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit('finalMessage', __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + this._connected(null); + const stream = Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } + [(_BetaMessageStream_currentMessageSnapshot = new WeakMap(), _BetaMessageStream_connectedPromise = new WeakMap(), _BetaMessageStream_resolveConnectedPromise = new WeakMap(), _BetaMessageStream_rejectConnectedPromise = new WeakMap(), _BetaMessageStream_endPromise = new WeakMap(), _BetaMessageStream_resolveEndPromise = new WeakMap(), _BetaMessageStream_rejectEndPromise = new WeakMap(), _BetaMessageStream_listeners = new WeakMap(), _BetaMessageStream_ended = new WeakMap(), _BetaMessageStream_errored = new WeakMap(), _BetaMessageStream_aborted = new WeakMap(), _BetaMessageStream_catchingPromiseCreated = new WeakMap(), _BetaMessageStream_response = new WeakMap(), _BetaMessageStream_request_id = new WeakMap(), _BetaMessageStream_handleError = new WeakMap(), _BetaMessageStream_instances = new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + return this.receivedMessages.at(-1); + }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + const textBlocks = this.receivedMessages + .at(-1) + .content.filter((block) => block.type === 'text') + .map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError('stream ended without producing a content block with type=text'); + } + return textBlocks.join(' '); + }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest() { + if (this.ended) + return; + __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined, "f"); + }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event); + this._emit('streamEvent', event, messageSnapshot); + switch (event.type) { + case 'content_block_delta': { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case 'text_delta': { + if (content.type === 'text') { + this._emit('text', event.delta.text, content.text || ''); + } + break; + } + case 'citations_delta': { + if (content.type === 'text') { + this._emit('citation', event.delta.citation, content.citations ?? []); + } + break; + } + case 'input_json_delta': { + if (content.type === 'tool_use' && content.input) { + this._emit('inputJson', event.delta.partial_json, content.input); + } + break; + } + case 'thinking_delta': { + if (content.type === 'thinking') { + this._emit('thinking', event.delta.thinking, content.thinking); + } + break; + } + case 'signature_delta': { + // we don't emit anything special in this case. + break; + } + default: + checkNever(event.delta); + } + break; + } + case 'message_stop': { + this._addMessageParam(messageSnapshot); + this._addMessage(messageSnapshot, true); + break; + } + case 'content_block_stop': { + this._emit('contentBlock', messageSnapshot.content.at(-1)); + break; + } + case 'message_start': { + __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case 'content_block_start': + case 'message_delta': + break; + } + }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest() { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined, "f"); + return snapshot; + }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage(event) { + let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (event.type === 'message_start') { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case 'message_stop': + return snapshot; + case 'message_delta': + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.usage.output_tokens = event.usage.output_tokens; + return snapshot; + case 'content_block_start': + snapshot.content.push(event.content_block); + return snapshot; + case 'content_block_delta': { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case 'text_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.text += event.delta.text; + } + break; + } + case 'citations_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.citations ?? (snapshotContent.citations = []); + snapshotContent.citations.push(event.delta.citation); + } + break; + } + case 'input_json_delta': { + if (snapshotContent?.type === 'tool_use') { + // we need to keep track of the raw JSON string as well so that we can + // re-parse it for each delta, for now we just store it as an untyped + // non-enumerable property on the snapshot + let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || ''; + jsonBuf += event.delta.partial_json; + Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, { + value: jsonBuf, + enumerable: false, + writable: true, + }); + if (jsonBuf) { + snapshotContent.input = partialParse(jsonBuf); + } + } + break; + } + case 'thinking_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.thinking += event.delta.thinking; + } + break; + } + case 'signature_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.signature += event.delta.signature; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case 'content_block_stop': + return snapshot; + } + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on('streamEvent', (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } + else { + pushQueue.push(event); + } + }); + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true })); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }; + } + toReadableStream() { + const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); + return stream.toReadableStream(); + } +} +// used to ensure exhaustive case matching without throwing a runtime error +function checkNever(x) { } +//# sourceMappingURL=BetaMessageStream.mjs.map \ No newline at end of file diff --git a/vendor/sdk/lib/BetaMessageStream.mjs.map b/vendor/sdk/lib/BetaMessageStream.mjs.map new file mode 100644 index 0000000..446bcb5 --- /dev/null +++ b/vendor/sdk/lib/BetaMessageStream.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"BetaMessageStream.mjs","sourceRoot":"","sources":["../src/lib/BetaMessageStream.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/lib/MessageStream.d.ts b/vendor/sdk/lib/MessageStream.d.ts new file mode 100644 index 0000000..b3b0166 --- /dev/null +++ b/vendor/sdk/lib/MessageStream.d.ts @@ -0,0 +1,114 @@ + +import * as Core from '@anthropic-ai/sdk/core'; +import { AnthropicError, APIUserAbortError } from '@anthropic-ai/sdk/error'; +import { type ContentBlock, Messages, type Message, type MessageStreamEvent, type MessageParam, type MessageCreateParams, type MessageCreateParamsBase, type TextCitation } from '@anthropic-ai/sdk/resources/messages'; +import { type ReadableStream, type Response } from '@anthropic-ai/sdk/_shims/index'; +export interface MessageStreamEvents { + connect: () => void; + streamEvent: (event: MessageStreamEvent, snapshot: Message) => void; + text: (textDelta: string, textSnapshot: string) => void; + citation: (citation: TextCitation, citationsSnapshot: TextCitation[]) => void; + inputJson: (partialJson: string, jsonSnapshot: unknown) => void; + thinking: (thinkingDelta: string, thinkingSnapshot: string) => void; + message: (message: Message) => void; + contentBlock: (content: ContentBlock) => void; + finalMessage: (message: Message) => void; + error: (error: AnthropicError) => void; + abort: (error: APIUserAbortError) => void; + end: () => void; +} +export declare class MessageStream implements AsyncIterable { + #private; + messages: MessageParam[]; + receivedMessages: Message[]; + controller: AbortController; + constructor(); + get response(): Response | null | undefined; + get request_id(): string | null | undefined; + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + withResponse(): Promise<{ + data: MessageStream; + response: Response; + request_id: string | null | undefined; + }>; + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream: ReadableStream): MessageStream; + static createMessage(messages: Messages, params: MessageCreateParamsBase, options?: Core.RequestOptions): MessageStream; + protected _run(executor: () => Promise): void; + protected _addMessageParam(message: MessageParam): void; + protected _addMessage(message: Message, emit?: boolean): void; + protected _createMessage(messages: Messages, params: MessageCreateParams, options?: Core.RequestOptions): Promise; + protected _connected(response: Response | null): void; + get ended(): boolean; + get errored(): boolean; + get aborted(): boolean; + abort(): void; + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event: Event, listener: MessageStreamEvents[Event]): this; + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event: Event, listener: MessageStreamEvents[Event]): this; + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event: Event, listener: MessageStreamEvents[Event]): this; + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event: Event): Promise extends [infer Param] ? Param : Parameters extends [] ? void : Parameters>; + done(): Promise; + get currentMessage(): Message | undefined; + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + finalMessage(): Promise; + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + finalText(): Promise; + protected _emit(event: Event, ...args: Parameters): void; + protected _emitFinal(): void; + protected _fromReadableStream(readableStream: ReadableStream, options?: Core.RequestOptions): Promise; + [Symbol.asyncIterator](): AsyncIterator; + toReadableStream(): ReadableStream; +} +//# sourceMappingURL=MessageStream.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/lib/MessageStream.d.ts.map b/vendor/sdk/lib/MessageStream.d.ts.map new file mode 100644 index 0000000..a64215f --- /dev/null +++ b/vendor/sdk/lib/MessageStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"MessageStream.d.ts","sourceRoot":"","sources":["../src/lib/MessageStream.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/lib/MessageStream.js b/vendor/sdk/lib/MessageStream.js new file mode 100644 index 0000000..f1222d3 --- /dev/null +++ b/vendor/sdk/lib/MessageStream.js @@ -0,0 +1,547 @@ +"use strict"; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MessageStream = void 0; +const error_1 = require("@anthropic-ai/sdk/error"); +const streaming_1 = require("@anthropic-ai/sdk/streaming"); +const parser_1 = require("../_vendor/partial-json-parser/parser.js"); +const JSON_BUF_PROPERTY = '__json_buf'; +class MessageStream { + constructor() { + _MessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _MessageStream_currentMessageSnapshot.set(this, void 0); + this.controller = new AbortController(); + _MessageStream_connectedPromise.set(this, void 0); + _MessageStream_resolveConnectedPromise.set(this, () => { }); + _MessageStream_rejectConnectedPromise.set(this, () => { }); + _MessageStream_endPromise.set(this, void 0); + _MessageStream_resolveEndPromise.set(this, () => { }); + _MessageStream_rejectEndPromise.set(this, () => { }); + _MessageStream_listeners.set(this, {}); + _MessageStream_ended.set(this, false); + _MessageStream_errored.set(this, false); + _MessageStream_aborted.set(this, false); + _MessageStream_catchingPromiseCreated.set(this, false); + _MessageStream_response.set(this, void 0); + _MessageStream_request_id.set(this, void 0); + _MessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet(this, _MessageStream_errored, true, "f"); + if (error instanceof Error && error.name === 'AbortError') { + error = new error_1.APIUserAbortError(); + } + if (error instanceof error_1.APIUserAbortError) { + __classPrivateFieldSet(this, _MessageStream_aborted, true, "f"); + return this._emit('abort', error); + } + if (error instanceof error_1.AnthropicError) { + return this._emit('error', error); + } + if (error instanceof Error) { + const anthropicError = new error_1.AnthropicError(error.message); + // @ts-ignore + anthropicError.cause = error; + return this._emit('error', anthropicError); + } + return this._emit('error', new error_1.AnthropicError(String(error))); + }); + __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f"); + __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f"); + }), "f"); + __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f"); + __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f"); + }), "f"); + // Don't let these promises cause unhandled rejection errors. + // we will manually cause an unhandled rejection error later + // if the user hasn't registered any error listener or called + // any promise-returning method. + __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { }); + __classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { }); + } + get response() { + return __classPrivateFieldGet(this, _MessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet(this, _MessageStream_request_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f"); + if (!response) { + throw new Error('Could not resolve a `Response` object'); + } + return { + data: this, + response, + request_id: response.headers.get('request-id'), + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream) { + const runner = new MessageStream(); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + static createMessage(messages, params, options) { + const runner = new MessageStream(); + for (const message of params.messages) { + runner._addMessageParam(message); + } + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit('end'); + }, __classPrivateFieldGet(this, _MessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit('message', message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + const { response, data: stream } = await messages + .create({ ...params, stream: true }, { ...options, signal: this.controller.signal }) + .withResponse(); + this._connected(response); + for await (const event of stream) { + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new error_1.APIUserAbortError(); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet(this, _MessageStream_response, response, "f"); + __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f"); + __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit('connect'); + } + get ended() { + return __classPrivateFieldGet(this, _MessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet(this, _MessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet(this, _MessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); + if (event !== 'error') + this.once('error', reject); + this.once(event, resolve); + }); + } + async done() { + __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet(this, _MessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + // make sure we don't emit any MessageStreamEvents after end + if (__classPrivateFieldGet(this, _MessageStream_ended, "f")) + return; + if (event === 'end') { + __classPrivateFieldSet(this, _MessageStream_ended, true, "f"); + __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === 'abort') { + const error = args[0]; + if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + return; + } + if (event === 'error') { + // NOTE: _emit('error', error) should only be called from #handleError(). + const error = args[0]; + if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + // Trigger an unhandled rejection if the user hasn't registered any error handlers. + // If you are seeing stack traces here, make sure to handle errors via either: + // - runner.on('error', () => ...) + // - await runner.done() + // - await runner.final...() + // - etc. + Promise.reject(error); + } + __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit('finalMessage', __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + this._connected(null); + const stream = streaming_1.Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new error_1.APIUserAbortError(); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } + [(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() { + if (this.receivedMessages.length === 0) { + throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant'); + } + return this.receivedMessages.at(-1); + }, _MessageStream_getFinalText = function _MessageStream_getFinalText() { + if (this.receivedMessages.length === 0) { + throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant'); + } + const textBlocks = this.receivedMessages + .at(-1) + .content.filter((block) => block.type === 'text') + .map((block) => block.text); + if (textBlocks.length === 0) { + throw new error_1.AnthropicError('stream ended without producing a content block with type=text'); + } + return textBlocks.join(' '); + }, _MessageStream_beginRequest = function _MessageStream_beginRequest() { + if (this.ended) + return; + __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f"); + }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event); + this._emit('streamEvent', event, messageSnapshot); + switch (event.type) { + case 'content_block_delta': { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case 'text_delta': { + if (content.type === 'text') { + this._emit('text', event.delta.text, content.text || ''); + } + break; + } + case 'citations_delta': { + if (content.type === 'text') { + this._emit('citation', event.delta.citation, content.citations ?? []); + } + break; + } + case 'input_json_delta': { + if (content.type === 'tool_use' && content.input) { + this._emit('inputJson', event.delta.partial_json, content.input); + } + break; + } + case 'thinking_delta': { + if (content.type === 'thinking') { + this._emit('thinking', event.delta.thinking, content.thinking); + } + break; + } + case 'signature_delta': { + // we don't emit anything special in this case. + break; + } + default: + checkNever(event.delta); + } + break; + } + case 'message_stop': { + this._addMessageParam(messageSnapshot); + this._addMessage(messageSnapshot, true); + break; + } + case 'content_block_stop': { + this._emit('contentBlock', messageSnapshot.content.at(-1)); + break; + } + case 'message_start': { + __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case 'content_block_start': + case 'message_delta': + break; + } + }, _MessageStream_endRequest = function _MessageStream_endRequest() { + if (this.ended) { + throw new error_1.AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new error_1.AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f"); + return snapshot; + }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) { + let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); + if (event.type === 'message_start') { + if (snapshot) { + throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case 'message_stop': + return snapshot; + case 'message_delta': + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.usage.output_tokens = event.usage.output_tokens; + return snapshot; + case 'content_block_start': + snapshot.content.push(event.content_block); + return snapshot; + case 'content_block_delta': { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case 'text_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.text += event.delta.text; + } + break; + } + case 'citations_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.citations ?? (snapshotContent.citations = []); + snapshotContent.citations.push(event.delta.citation); + } + break; + } + case 'input_json_delta': { + if (snapshotContent?.type === 'tool_use') { + // we need to keep track of the raw JSON string as well so that we can + // re-parse it for each delta, for now we just store it as an untyped + // non-enumerable property on the snapshot + let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || ''; + jsonBuf += event.delta.partial_json; + Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, { + value: jsonBuf, + enumerable: false, + writable: true, + }); + if (jsonBuf) { + snapshotContent.input = (0, parser_1.partialParse)(jsonBuf); + } + } + break; + } + case 'thinking_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.thinking += event.delta.thinking; + } + break; + } + case 'signature_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.signature += event.delta.signature; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case 'content_block_stop': + return snapshot; + } + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on('streamEvent', (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } + else { + pushQueue.push(event); + } + }); + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true })); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }; + } + toReadableStream() { + const stream = new streaming_1.Stream(this[Symbol.asyncIterator].bind(this), this.controller); + return stream.toReadableStream(); + } +} +exports.MessageStream = MessageStream; +// used to ensure exhaustive case matching without throwing a runtime error +function checkNever(x) { } +//# sourceMappingURL=MessageStream.js.map \ No newline at end of file diff --git a/vendor/sdk/lib/MessageStream.js.map b/vendor/sdk/lib/MessageStream.js.map new file mode 100644 index 0000000..42ff07d --- /dev/null +++ b/vendor/sdk/lib/MessageStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MessageStream.js","sourceRoot":"","sources":["../src/lib/MessageStream.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/lib/MessageStream.mjs b/vendor/sdk/lib/MessageStream.mjs new file mode 100644 index 0000000..99b2ab8 --- /dev/null +++ b/vendor/sdk/lib/MessageStream.mjs @@ -0,0 +1,543 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage; +import { AnthropicError, APIUserAbortError } from '@anthropic-ai/sdk/error'; +import { Stream } from '@anthropic-ai/sdk/streaming'; +import { partialParse } from "../_vendor/partial-json-parser/parser.mjs"; +const JSON_BUF_PROPERTY = '__json_buf'; +export class MessageStream { + constructor() { + _MessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _MessageStream_currentMessageSnapshot.set(this, void 0); + this.controller = new AbortController(); + _MessageStream_connectedPromise.set(this, void 0); + _MessageStream_resolveConnectedPromise.set(this, () => { }); + _MessageStream_rejectConnectedPromise.set(this, () => { }); + _MessageStream_endPromise.set(this, void 0); + _MessageStream_resolveEndPromise.set(this, () => { }); + _MessageStream_rejectEndPromise.set(this, () => { }); + _MessageStream_listeners.set(this, {}); + _MessageStream_ended.set(this, false); + _MessageStream_errored.set(this, false); + _MessageStream_aborted.set(this, false); + _MessageStream_catchingPromiseCreated.set(this, false); + _MessageStream_response.set(this, void 0); + _MessageStream_request_id.set(this, void 0); + _MessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet(this, _MessageStream_errored, true, "f"); + if (error instanceof Error && error.name === 'AbortError') { + error = new APIUserAbortError(); + } + if (error instanceof APIUserAbortError) { + __classPrivateFieldSet(this, _MessageStream_aborted, true, "f"); + return this._emit('abort', error); + } + if (error instanceof AnthropicError) { + return this._emit('error', error); + } + if (error instanceof Error) { + const anthropicError = new AnthropicError(error.message); + // @ts-ignore + anthropicError.cause = error; + return this._emit('error', anthropicError); + } + return this._emit('error', new AnthropicError(String(error))); + }); + __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f"); + __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f"); + }), "f"); + __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f"); + __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f"); + }), "f"); + // Don't let these promises cause unhandled rejection errors. + // we will manually cause an unhandled rejection error later + // if the user hasn't registered any error listener or called + // any promise-returning method. + __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { }); + __classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { }); + } + get response() { + return __classPrivateFieldGet(this, _MessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet(this, _MessageStream_request_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f"); + if (!response) { + throw new Error('Could not resolve a `Response` object'); + } + return { + data: this, + response, + request_id: response.headers.get('request-id'), + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream) { + const runner = new MessageStream(); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + static createMessage(messages, params, options) { + const runner = new MessageStream(); + for (const message of params.messages) { + runner._addMessageParam(message); + } + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit('end'); + }, __classPrivateFieldGet(this, _MessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit('message', message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + const { response, data: stream } = await messages + .create({ ...params, stream: true }, { ...options, signal: this.controller.signal }) + .withResponse(); + this._connected(response); + for await (const event of stream) { + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet(this, _MessageStream_response, response, "f"); + __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f"); + __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit('connect'); + } + get ended() { + return __classPrivateFieldGet(this, _MessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet(this, _MessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet(this, _MessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve, reject) => { + __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); + if (event !== 'error') + this.once('error', reject); + this.once(event, resolve); + }); + } + async done() { + __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet(this, _MessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + // make sure we don't emit any MessageStreamEvents after end + if (__classPrivateFieldGet(this, _MessageStream_ended, "f")) + return; + if (event === 'end') { + __classPrivateFieldSet(this, _MessageStream_ended, true, "f"); + __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === 'abort') { + const error = args[0]; + if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + return; + } + if (event === 'error') { + // NOTE: _emit('error', error) should only be called from #handleError(). + const error = args[0]; + if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + // Trigger an unhandled rejection if the user hasn't registered any error handlers. + // If you are seeing stack traces here, make sure to handle errors via either: + // - runner.on('error', () => ...) + // - await runner.done() + // - await runner.final...() + // - etc. + Promise.reject(error); + } + __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit('end'); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit('finalMessage', __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + if (signal) { + if (signal.aborted) + this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + this._connected(null); + const stream = Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } + [(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + return this.receivedMessages.at(-1); + }, _MessageStream_getFinalText = function _MessageStream_getFinalText() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + const textBlocks = this.receivedMessages + .at(-1) + .content.filter((block) => block.type === 'text') + .map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError('stream ended without producing a content block with type=text'); + } + return textBlocks.join(' '); + }, _MessageStream_beginRequest = function _MessageStream_beginRequest() { + if (this.ended) + return; + __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f"); + }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event); + this._emit('streamEvent', event, messageSnapshot); + switch (event.type) { + case 'content_block_delta': { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case 'text_delta': { + if (content.type === 'text') { + this._emit('text', event.delta.text, content.text || ''); + } + break; + } + case 'citations_delta': { + if (content.type === 'text') { + this._emit('citation', event.delta.citation, content.citations ?? []); + } + break; + } + case 'input_json_delta': { + if (content.type === 'tool_use' && content.input) { + this._emit('inputJson', event.delta.partial_json, content.input); + } + break; + } + case 'thinking_delta': { + if (content.type === 'thinking') { + this._emit('thinking', event.delta.thinking, content.thinking); + } + break; + } + case 'signature_delta': { + // we don't emit anything special in this case. + break; + } + default: + checkNever(event.delta); + } + break; + } + case 'message_stop': { + this._addMessageParam(messageSnapshot); + this._addMessage(messageSnapshot, true); + break; + } + case 'content_block_stop': { + this._emit('contentBlock', messageSnapshot.content.at(-1)); + break; + } + case 'message_start': { + __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case 'content_block_start': + case 'message_delta': + break; + } + }, _MessageStream_endRequest = function _MessageStream_endRequest() { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f"); + return snapshot; + }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) { + let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); + if (event.type === 'message_start') { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case 'message_stop': + return snapshot; + case 'message_delta': + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.usage.output_tokens = event.usage.output_tokens; + return snapshot; + case 'content_block_start': + snapshot.content.push(event.content_block); + return snapshot; + case 'content_block_delta': { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case 'text_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.text += event.delta.text; + } + break; + } + case 'citations_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.citations ?? (snapshotContent.citations = []); + snapshotContent.citations.push(event.delta.citation); + } + break; + } + case 'input_json_delta': { + if (snapshotContent?.type === 'tool_use') { + // we need to keep track of the raw JSON string as well so that we can + // re-parse it for each delta, for now we just store it as an untyped + // non-enumerable property on the snapshot + let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || ''; + jsonBuf += event.delta.partial_json; + Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, { + value: jsonBuf, + enumerable: false, + writable: true, + }); + if (jsonBuf) { + snapshotContent.input = partialParse(jsonBuf); + } + } + break; + } + case 'thinking_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.thinking += event.delta.thinking; + } + break; + } + case 'signature_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.signature += event.delta.signature; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case 'content_block_stop': + return snapshot; + } + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on('streamEvent', (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } + else { + pushQueue.push(event); + } + }); + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true })); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }; + } + toReadableStream() { + const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); + return stream.toReadableStream(); + } +} +// used to ensure exhaustive case matching without throwing a runtime error +function checkNever(x) { } +//# sourceMappingURL=MessageStream.mjs.map \ No newline at end of file diff --git a/vendor/sdk/lib/MessageStream.mjs.map b/vendor/sdk/lib/MessageStream.mjs.map new file mode 100644 index 0000000..e299af1 --- /dev/null +++ b/vendor/sdk/lib/MessageStream.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"MessageStream.mjs","sourceRoot":"","sources":["../src/lib/MessageStream.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/package.json b/vendor/sdk/package.json new file mode 100644 index 0000000..2bc9e7b --- /dev/null +++ b/vendor/sdk/package.json @@ -0,0 +1,124 @@ +{ + "name": "@anthropic-ai/sdk", + "version": "0.36.3", + "description": "The official TypeScript library for the Anthropic API", + "author": "Anthropic ", + "types": "./index.d.ts", + "main": "./index.js", + "type": "commonjs", + "repository": "github:anthropics/anthropic-sdk-typescript", + "license": "MIT", + "packageManager": "yarn@1.22.22", + "files": [ + "**/*" + ], + "private": false, + "scripts": { + "test": "./scripts/test", + "build": "./scripts/build-all", + "format": "prettier --write --cache --cache-strategy metadata . !dist", + "tsn": "ts-node -r tsconfig-paths/register", + "lint": "./scripts/lint", + "fix": "./scripts/format" + }, + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "sideEffects": [ + "./_shims/index.js", + "./_shims/index.mjs", + "./shims/node.js", + "./shims/node.mjs", + "./shims/web.js", + "./shims/web.mjs" + ], + "imports": { + "@anthropic-ai/sdk": ".", + "@anthropic-ai/sdk/*": "./src/*" + }, + "exports": { + "./_shims/auto/*": { + "deno": { + "types": "./_shims/auto/*.d.ts", + "require": "./_shims/auto/*.js", + "default": "./_shims/auto/*.mjs" + }, + "bun": { + "types": "./_shims/auto/*.d.ts", + "require": "./_shims/auto/*-bun.js", + "default": "./_shims/auto/*-bun.mjs" + }, + "browser": { + "types": "./_shims/auto/*.d.ts", + "require": "./_shims/auto/*.js", + "default": "./_shims/auto/*.mjs" + }, + "worker": { + "types": "./_shims/auto/*.d.ts", + "require": "./_shims/auto/*.js", + "default": "./_shims/auto/*.mjs" + }, + "workerd": { + "types": "./_shims/auto/*.d.ts", + "require": "./_shims/auto/*.js", + "default": "./_shims/auto/*.mjs" + }, + "node": { + "types": "./_shims/auto/*-node.d.ts", + "require": "./_shims/auto/*-node.js", + "default": "./_shims/auto/*-node.mjs" + }, + "types": "./_shims/auto/*.d.ts", + "require": "./_shims/auto/*.js", + "default": "./_shims/auto/*.mjs" + }, + ".": { + "require": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "types": "./index.d.mts", + "default": "./index.mjs" + }, + "./*.mjs": { + "types": [ + "./*.d.ts", + "./*/index.d.ts" + ], + "default": [ + "./*.mjs", + "./*/index.mjs" + ] + }, + "./*.js": { + "types": [ + "./*.d.ts", + "./*/index.d.ts" + ], + "default": [ + "./*.js", + "./*/index.js" + ] + }, + "./*": { + "types": [ + "./*.d.ts", + "./*/index.d.ts" + ], + "require": [ + "./*.js", + "./*/index.js" + ], + "default": [ + "./*.mjs", + "./*/index.mjs" + ] + } + } +} diff --git a/vendor/sdk/pagination.d.ts b/vendor/sdk/pagination.d.ts new file mode 100644 index 0000000..c03b5fd --- /dev/null +++ b/vendor/sdk/pagination.d.ts @@ -0,0 +1,27 @@ +import { AbstractPage, Response, APIClient, FinalRequestOptions, PageInfo } from "./core.js"; +export interface PageResponse { + data: Array; + has_more: boolean; + first_id: string | null; + last_id: string | null; +} +export interface PageParams { + /** + * Number of items per page. + */ + limit?: number; + before_id?: string; + after_id?: string; +} +export declare class Page extends AbstractPage implements PageResponse { + data: Array; + has_more: boolean; + first_id: string | null; + last_id: string | null; + constructor(client: APIClient, response: Response, body: PageResponse, options: FinalRequestOptions); + getPaginatedItems(): Item[]; + hasNextPage(): boolean; + nextPageParams(): Partial | null; + nextPageInfo(): PageInfo | null; +} +//# sourceMappingURL=pagination.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/pagination.d.ts.map b/vendor/sdk/pagination.d.ts.map new file mode 100644 index 0000000..587c894 --- /dev/null +++ b/vendor/sdk/pagination.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1F,MAAM,WAAW,YAAY,CAAC,IAAI;IAChC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAElB,QAAQ,EAAE,OAAO,CAAC;IAElB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,IAAI,CAAC,IAAI,CAAE,SAAQ,YAAY,CAAC,IAAI,CAAE,YAAW,YAAY,CAAC,IAAI,CAAC;IAC9E,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAElB,QAAQ,EAAE,OAAO,CAAC;IAElB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEX,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB;IASzG,iBAAiB,IAAI,IAAI,EAAE;IAIlB,WAAW,IAAI,OAAO;IAS/B,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAS5C,YAAY,IAAI,QAAQ,GAAG,IAAI;CA0BhC"} \ No newline at end of file diff --git a/vendor/sdk/pagination.js b/vendor/sdk/pagination.js new file mode 100644 index 0000000..99651f9 --- /dev/null +++ b/vendor/sdk/pagination.js @@ -0,0 +1,60 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Page = void 0; +const core_1 = require("./core.js"); +class Page extends core_1.AbstractPage { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.has_more = body.has_more || false; + this.first_id = body.first_id || null; + this.last_id = body.last_id || null; + } + getPaginatedItems() { + return this.data ?? []; + } + hasNextPage() { + if (this.has_more === false) { + return false; + } + return super.hasNextPage(); + } + // @deprecated Please use `nextPageInfo()` instead + nextPageParams() { + const info = this.nextPageInfo(); + if (!info) + return null; + if ('params' in info) + return info.params; + const params = Object.fromEntries(info.url.searchParams); + if (!Object.keys(params).length) + return null; + return params; + } + nextPageInfo() { + if (this.options.query?.['before_id']) { + // in reverse + const firstId = this.first_id; + if (!firstId) { + return null; + } + return { + params: { + before_id: firstId, + }, + }; + } + const cursor = this.last_id; + if (!cursor) { + return null; + } + return { + params: { + after_id: cursor, + }, + }; + } +} +exports.Page = Page; +//# sourceMappingURL=pagination.js.map \ No newline at end of file diff --git a/vendor/sdk/pagination.js.map b/vendor/sdk/pagination.js.map new file mode 100644 index 0000000..1be0250 --- /dev/null +++ b/vendor/sdk/pagination.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pagination.js","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,oCAA0F;AAuB1F,MAAa,IAAW,SAAQ,mBAAkB;IAShD,YAAY,MAAiB,EAAE,QAAkB,EAAE,IAAwB,EAAE,OAA4B;QACvG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACzB,CAAC;IAEQ,WAAW;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,OAAO,KAAK,CAAC;SACd;QAED,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,kDAAkD;IAClD,cAAc;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,QAAQ,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY;QACV,IAAK,IAAI,CAAC,OAAO,CAAC,KAAiC,EAAE,CAAC,WAAW,CAAC,EAAE;YAClE,aAAa;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,IAAI,CAAC;aACb;YAED,OAAO;gBACL,MAAM,EAAE;oBACN,SAAS,EAAE,OAAO;iBACnB;aACF,CAAC;SACH;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,OAAO;YACL,MAAM,EAAE;gBACN,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC;IACJ,CAAC;CACF;AAlED,oBAkEC"} \ No newline at end of file diff --git a/vendor/sdk/pagination.mjs b/vendor/sdk/pagination.mjs new file mode 100644 index 0000000..a8dae01 --- /dev/null +++ b/vendor/sdk/pagination.mjs @@ -0,0 +1,56 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { AbstractPage } from "./core.mjs"; +export class Page extends AbstractPage { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.has_more = body.has_more || false; + this.first_id = body.first_id || null; + this.last_id = body.last_id || null; + } + getPaginatedItems() { + return this.data ?? []; + } + hasNextPage() { + if (this.has_more === false) { + return false; + } + return super.hasNextPage(); + } + // @deprecated Please use `nextPageInfo()` instead + nextPageParams() { + const info = this.nextPageInfo(); + if (!info) + return null; + if ('params' in info) + return info.params; + const params = Object.fromEntries(info.url.searchParams); + if (!Object.keys(params).length) + return null; + return params; + } + nextPageInfo() { + if (this.options.query?.['before_id']) { + // in reverse + const firstId = this.first_id; + if (!firstId) { + return null; + } + return { + params: { + before_id: firstId, + }, + }; + } + const cursor = this.last_id; + if (!cursor) { + return null; + } + return { + params: { + after_id: cursor, + }, + }; + } +} +//# sourceMappingURL=pagination.mjs.map \ No newline at end of file diff --git a/vendor/sdk/pagination.mjs.map b/vendor/sdk/pagination.mjs.map new file mode 100644 index 0000000..5caa4ff --- /dev/null +++ b/vendor/sdk/pagination.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pagination.mjs","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,YAAY,EAAsD;AAuB3E,MAAM,OAAO,IAAW,SAAQ,YAAkB;IAShD,YAAY,MAAiB,EAAE,QAAkB,EAAE,IAAwB,EAAE,OAA4B;QACvG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACzB,CAAC;IAEQ,WAAW;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,OAAO,KAAK,CAAC;SACd;QAED,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,kDAAkD;IAClD,cAAc;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,QAAQ,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY;QACV,IAAK,IAAI,CAAC,OAAO,CAAC,KAAiC,EAAE,CAAC,WAAW,CAAC,EAAE;YAClE,aAAa;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,IAAI,CAAC;aACb;YAED,OAAO;gBACL,MAAM,EAAE;oBACN,SAAS,EAAE,OAAO;iBACnB;aACF,CAAC;SACH;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,OAAO;YACL,MAAM,EAAE;gBACN,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC;IACJ,CAAC;CACF"} \ No newline at end of file diff --git a/vendor/sdk/resource.d.ts b/vendor/sdk/resource.d.ts new file mode 100644 index 0000000..6f3ca9a --- /dev/null +++ b/vendor/sdk/resource.d.ts @@ -0,0 +1,6 @@ +import * as Core from "./core.js"; +export declare class APIResource { + protected _client: Core.APIClient; + constructor(client: Core.APIClient); +} +//# sourceMappingURL=resource.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resource.d.ts.map b/vendor/sdk/resource.d.ts.map new file mode 100644 index 0000000..c065e9b --- /dev/null +++ b/vendor/sdk/resource.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["src/resource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,qBAAa,WAAW;IACtB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBAEtB,MAAM,EAAE,IAAI,CAAC,SAAS;CAGnC"} \ No newline at end of file diff --git a/vendor/sdk/resource.js b/vendor/sdk/resource.js new file mode 100644 index 0000000..edccb48 --- /dev/null +++ b/vendor/sdk/resource.js @@ -0,0 +1,11 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.APIResource = void 0; +class APIResource { + constructor(client) { + this._client = client; + } +} +exports.APIResource = APIResource; +//# sourceMappingURL=resource.js.map \ No newline at end of file diff --git a/vendor/sdk/resource.js.map b/vendor/sdk/resource.js.map new file mode 100644 index 0000000..0eb78c6 --- /dev/null +++ b/vendor/sdk/resource.js.map @@ -0,0 +1 @@ +{"version":3,"file":"resource.js","sourceRoot":"","sources":["src/resource.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAItF,MAAa,WAAW;IAGtB,YAAY,MAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;CACF;AAND,kCAMC"} \ No newline at end of file diff --git a/vendor/sdk/resource.mjs b/vendor/sdk/resource.mjs new file mode 100644 index 0000000..98ee0dc --- /dev/null +++ b/vendor/sdk/resource.mjs @@ -0,0 +1,7 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export class APIResource { + constructor(client) { + this._client = client; + } +} +//# sourceMappingURL=resource.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resource.mjs.map b/vendor/sdk/resource.mjs.map new file mode 100644 index 0000000..88be6ef --- /dev/null +++ b/vendor/sdk/resource.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"resource.mjs","sourceRoot":"","sources":["src/resource.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAItF,MAAM,OAAO,WAAW;IAGtB,YAAY,MAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;CACF"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/beta.d.ts b/vendor/sdk/resources/beta/beta.d.ts new file mode 100644 index 0000000..7f8436b --- /dev/null +++ b/vendor/sdk/resources/beta/beta.d.ts @@ -0,0 +1,57 @@ +import { APIResource } from "../../resource.js"; +import * as ModelsAPI from "./models.js"; +import { BetaModelInfo, BetaModelInfosPage, ModelListParams, Models } from "./models.js"; +import * as MessagesAPI from "./messages/messages.js"; +import { BetaBase64PDFBlock, BetaBase64PDFSource, BetaCacheControlEphemeral, BetaCitationCharLocation, BetaCitationCharLocationParam, BetaCitationContentBlockLocation, BetaCitationContentBlockLocationParam, BetaCitationPageLocation, BetaCitationPageLocationParam, BetaCitationsConfigParam, BetaCitationsDelta, BetaContentBlock, BetaContentBlockParam, BetaContentBlockSource, BetaContentBlockSourceContent, BetaImageBlockParam, BetaInputJSONDelta, BetaMessage, BetaMessageDeltaUsage, BetaMessageParam, BetaMessageTokensCount, BetaMetadata, BetaPlainTextSource, BetaRawContentBlockDeltaEvent, BetaRawContentBlockStartEvent, BetaRawContentBlockStopEvent, BetaRawMessageDeltaEvent, BetaRawMessageStartEvent, BetaRawMessageStopEvent, BetaRawMessageStreamEvent, BetaRedactedThinkingBlock, BetaRedactedThinkingBlockParam, BetaSignatureDelta, BetaTextBlock, BetaTextBlockParam, BetaTextCitation, BetaTextCitationParam, BetaTextDelta, BetaThinkingBlock, BetaThinkingBlockParam, BetaThinkingConfigDisabled, BetaThinkingConfigEnabled, BetaThinkingDelta, BetaTool, BetaToolBash20241022, BetaToolBash20250124, BetaToolChoice, BetaToolChoiceAny, BetaToolChoiceAuto, BetaToolChoiceTool, BetaToolComputerUse20241022, BetaToolResultBlockParam, BetaToolTextEditor20241022, BetaToolTextEditor20250124, BetaToolUnion, BetaToolUseBlock, BetaToolUseBlockParam, BetaUsage, MessageCountTokensParams, MessageCreateParams, MessageCreateParamsNonStreaming, MessageCreateParamsStreaming, Messages } from "./messages/messages.js"; +export declare class Beta extends APIResource { + models: ModelsAPI.Models; + messages: MessagesAPI.Messages; +} +export type AnthropicBeta = (string & {}) | 'message-batches-2024-09-24' | 'prompt-caching-2024-07-31' | 'computer-use-2024-10-22' | 'pdfs-2024-09-25' | 'token-counting-2024-11-01'; +export interface BetaAPIError { + message: string; + type: 'api_error'; +} +export interface BetaAuthenticationError { + message: string; + type: 'authentication_error'; +} +export interface BetaBillingError { + message: string; + type: 'billing_error'; +} +export type BetaError = BetaInvalidRequestError | BetaAuthenticationError | BetaBillingError | BetaPermissionError | BetaNotFoundError | BetaRateLimitError | BetaGatewayTimeoutError | BetaAPIError | BetaOverloadedError; +export interface BetaErrorResponse { + error: BetaError; + type: 'error'; +} +export interface BetaGatewayTimeoutError { + message: string; + type: 'timeout_error'; +} +export interface BetaInvalidRequestError { + message: string; + type: 'invalid_request_error'; +} +export interface BetaNotFoundError { + message: string; + type: 'not_found_error'; +} +export interface BetaOverloadedError { + message: string; + type: 'overloaded_error'; +} +export interface BetaPermissionError { + message: string; + type: 'permission_error'; +} +export interface BetaRateLimitError { + message: string; + type: 'rate_limit_error'; +} +export declare namespace Beta { + export { type AnthropicBeta as AnthropicBeta, type BetaAPIError as BetaAPIError, type BetaAuthenticationError as BetaAuthenticationError, type BetaBillingError as BetaBillingError, type BetaError as BetaError, type BetaErrorResponse as BetaErrorResponse, type BetaGatewayTimeoutError as BetaGatewayTimeoutError, type BetaInvalidRequestError as BetaInvalidRequestError, type BetaNotFoundError as BetaNotFoundError, type BetaOverloadedError as BetaOverloadedError, type BetaPermissionError as BetaPermissionError, type BetaRateLimitError as BetaRateLimitError, }; + export { Models as Models, type BetaModelInfo as BetaModelInfo, BetaModelInfosPage as BetaModelInfosPage, type ModelListParams as ModelListParams, }; + export { Messages as Messages, type BetaBase64PDFBlock as BetaBase64PDFBlock, type BetaBase64PDFSource as BetaBase64PDFSource, type BetaCacheControlEphemeral as BetaCacheControlEphemeral, type BetaCitationCharLocation as BetaCitationCharLocation, type BetaCitationCharLocationParam as BetaCitationCharLocationParam, type BetaCitationContentBlockLocation as BetaCitationContentBlockLocation, type BetaCitationContentBlockLocationParam as BetaCitationContentBlockLocationParam, type BetaCitationPageLocation as BetaCitationPageLocation, type BetaCitationPageLocationParam as BetaCitationPageLocationParam, type BetaCitationsConfigParam as BetaCitationsConfigParam, type BetaCitationsDelta as BetaCitationsDelta, type BetaContentBlock as BetaContentBlock, type BetaContentBlockParam as BetaContentBlockParam, type BetaContentBlockSource as BetaContentBlockSource, type BetaContentBlockSourceContent as BetaContentBlockSourceContent, type BetaImageBlockParam as BetaImageBlockParam, type BetaInputJSONDelta as BetaInputJSONDelta, type BetaMessage as BetaMessage, type BetaMessageDeltaUsage as BetaMessageDeltaUsage, type BetaMessageParam as BetaMessageParam, type BetaMessageTokensCount as BetaMessageTokensCount, type BetaMetadata as BetaMetadata, type BetaPlainTextSource as BetaPlainTextSource, type BetaRawContentBlockDeltaEvent as BetaRawContentBlockDeltaEvent, type BetaRawContentBlockStartEvent as BetaRawContentBlockStartEvent, type BetaRawContentBlockStopEvent as BetaRawContentBlockStopEvent, type BetaRawMessageDeltaEvent as BetaRawMessageDeltaEvent, type BetaRawMessageStartEvent as BetaRawMessageStartEvent, type BetaRawMessageStopEvent as BetaRawMessageStopEvent, type BetaRawMessageStreamEvent as BetaRawMessageStreamEvent, type BetaRedactedThinkingBlock as BetaRedactedThinkingBlock, type BetaRedactedThinkingBlockParam as BetaRedactedThinkingBlockParam, type BetaSignatureDelta as BetaSignatureDelta, type BetaTextBlock as BetaTextBlock, type BetaTextBlockParam as BetaTextBlockParam, type BetaTextCitation as BetaTextCitation, type BetaTextCitationParam as BetaTextCitationParam, type BetaTextDelta as BetaTextDelta, type BetaThinkingBlock as BetaThinkingBlock, type BetaThinkingBlockParam as BetaThinkingBlockParam, type BetaThinkingConfigDisabled as BetaThinkingConfigDisabled, type BetaThinkingConfigEnabled as BetaThinkingConfigEnabled, type BetaThinkingDelta as BetaThinkingDelta, type BetaTool as BetaTool, type BetaToolBash20241022 as BetaToolBash20241022, type BetaToolBash20250124 as BetaToolBash20250124, type BetaToolChoice as BetaToolChoice, type BetaToolChoiceAny as BetaToolChoiceAny, type BetaToolChoiceAuto as BetaToolChoiceAuto, type BetaToolChoiceTool as BetaToolChoiceTool, type BetaToolComputerUse20241022 as BetaToolComputerUse20241022, type BetaToolResultBlockParam as BetaToolResultBlockParam, type BetaToolTextEditor20241022 as BetaToolTextEditor20241022, type BetaToolTextEditor20250124 as BetaToolTextEditor20250124, type BetaToolUnion as BetaToolUnion, type BetaToolUseBlock as BetaToolUseBlock, type BetaToolUseBlockParam as BetaToolUseBlockParam, type BetaUsage as BetaUsage, type MessageCreateParams as MessageCreateParams, type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming as MessageCreateParamsStreaming, type MessageCountTokensParams as MessageCountTokensParams, }; +} +//# sourceMappingURL=beta.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/beta.d.ts.map b/vendor/sdk/resources/beta/beta.d.ts.map new file mode 100644 index 0000000..dbec41a --- /dev/null +++ b/vendor/sdk/resources/beta/beta.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"beta.d.ts","sourceRoot":"","sources":["../../src/resources/beta/beta.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/beta.js b/vendor/sdk/resources/beta/beta.js new file mode 100644 index 0000000..9ea36d1 --- /dev/null +++ b/vendor/sdk/resources/beta/beta.js @@ -0,0 +1,44 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Beta = void 0; +const resource_1 = require("../../resource.js"); +const ModelsAPI = __importStar(require("./models.js")); +const models_1 = require("./models.js"); +const MessagesAPI = __importStar(require("./messages/messages.js")); +const messages_1 = require("./messages/messages.js"); +class Beta extends resource_1.APIResource { + constructor() { + super(...arguments); + this.models = new ModelsAPI.Models(this._client); + this.messages = new MessagesAPI.Messages(this._client); + } +} +exports.Beta = Beta; +Beta.Models = models_1.Models; +Beta.BetaModelInfosPage = models_1.BetaModelInfosPage; +Beta.Messages = messages_1.Messages; +//# sourceMappingURL=beta.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/beta.js.map b/vendor/sdk/resources/beta/beta.js.map new file mode 100644 index 0000000..c3ff2f4 --- /dev/null +++ b/vendor/sdk/resources/beta/beta.js.map @@ -0,0 +1 @@ +{"version":3,"file":"beta.js","sourceRoot":"","sources":["../../src/resources/beta/beta.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtF,gDAA6C;AAC7C,uDAAsC;AACtC,wCAAsF;AACtF,oEAAmD;AACnD,qDAgE6B;AAE7B,MAAa,IAAK,SAAQ,sBAAW;IAArC;;QACE,WAAM,GAAqB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,aAAQ,GAAyB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CAAA;AAHD,oBAGC;AAiFD,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC;AACrB,IAAI,CAAC,kBAAkB,GAAG,2BAAkB,CAAC;AAC7C,IAAI,CAAC,QAAQ,GAAG,mBAAQ,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/beta.mjs b/vendor/sdk/resources/beta/beta.mjs new file mode 100644 index 0000000..0f13228 --- /dev/null +++ b/vendor/sdk/resources/beta/beta.mjs @@ -0,0 +1,17 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../../resource.mjs"; +import * as ModelsAPI from "./models.mjs"; +import { BetaModelInfosPage, Models } from "./models.mjs"; +import * as MessagesAPI from "./messages/messages.mjs"; +import { Messages, } from "./messages/messages.mjs"; +export class Beta extends APIResource { + constructor() { + super(...arguments); + this.models = new ModelsAPI.Models(this._client); + this.messages = new MessagesAPI.Messages(this._client); + } +} +Beta.Models = Models; +Beta.BetaModelInfosPage = BetaModelInfosPage; +Beta.Messages = Messages; +//# sourceMappingURL=beta.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/beta.mjs.map b/vendor/sdk/resources/beta/beta.mjs.map new file mode 100644 index 0000000..f4b403f --- /dev/null +++ b/vendor/sdk/resources/beta/beta.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"beta.mjs","sourceRoot":"","sources":["../../src/resources/beta/beta.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OACf,KAAK,SAAS;OACd,EAAiB,kBAAkB,EAAmB,MAAM,EAAE;OAC9D,KAAK,WAAW;OAChB,EA+DL,QAAQ,GACT;AAED,MAAM,OAAO,IAAK,SAAQ,WAAW;IAArC;;QACE,WAAM,GAAqB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,aAAQ,GAAyB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CAAA;AAiFD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/index.d.ts b/vendor/sdk/resources/beta/index.d.ts new file mode 100644 index 0000000..882e518 --- /dev/null +++ b/vendor/sdk/resources/beta/index.d.ts @@ -0,0 +1,4 @@ +export { Beta, type AnthropicBeta, type BetaAPIError, type BetaAuthenticationError, type BetaBillingError, type BetaError, type BetaErrorResponse, type BetaGatewayTimeoutError, type BetaInvalidRequestError, type BetaNotFoundError, type BetaOverloadedError, type BetaPermissionError, type BetaRateLimitError, } from "./beta.js"; +export { BetaModelInfosPage, Models, type BetaModelInfo, type ModelListParams } from "./models.js"; +export { Messages, type BetaBase64PDFBlock, type BetaBase64PDFSource, type BetaCacheControlEphemeral, type BetaCitationCharLocation, type BetaCitationCharLocationParam, type BetaCitationContentBlockLocation, type BetaCitationContentBlockLocationParam, type BetaCitationPageLocation, type BetaCitationPageLocationParam, type BetaCitationsConfigParam, type BetaCitationsDelta, type BetaContentBlock, type BetaContentBlockParam, type BetaContentBlockSource, type BetaContentBlockSourceContent, type BetaImageBlockParam, type BetaInputJSONDelta, type BetaMessage, type BetaMessageDeltaUsage, type BetaMessageParam, type BetaMessageTokensCount, type BetaMetadata, type BetaPlainTextSource, type BetaRawContentBlockDeltaEvent, type BetaRawContentBlockStartEvent, type BetaRawContentBlockStopEvent, type BetaRawMessageDeltaEvent, type BetaRawMessageStartEvent, type BetaRawMessageStopEvent, type BetaRawMessageStreamEvent, type BetaRedactedThinkingBlock, type BetaRedactedThinkingBlockParam, type BetaSignatureDelta, type BetaTextBlock, type BetaTextBlockParam, type BetaTextCitation, type BetaTextCitationParam, type BetaTextDelta, type BetaThinkingBlock, type BetaThinkingBlockParam, type BetaThinkingConfigDisabled, type BetaThinkingConfigEnabled, type BetaThinkingDelta, type BetaTool, type BetaToolBash20241022, type BetaToolBash20250124, type BetaToolChoice, type BetaToolChoiceAny, type BetaToolChoiceAuto, type BetaToolChoiceTool, type BetaToolComputerUse20241022, type BetaToolResultBlockParam, type BetaToolTextEditor20241022, type BetaToolTextEditor20250124, type BetaToolUnion, type BetaToolUseBlock, type BetaToolUseBlockParam, type BetaUsage, type MessageCreateParams, type MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming, type MessageCountTokensParams, } from "./messages/index.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/index.d.ts.map b/vendor/sdk/resources/beta/index.d.ts.map new file mode 100644 index 0000000..e59e3eb --- /dev/null +++ b/vendor/sdk/resources/beta/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/beta/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,IAAI,EACJ,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAChG,OAAO,EACL,QAAQ,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/index.js b/vendor/sdk/resources/beta/index.js new file mode 100644 index 0000000..2de1b70 --- /dev/null +++ b/vendor/sdk/resources/beta/index.js @@ -0,0 +1,12 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Messages = exports.Models = exports.BetaModelInfosPage = exports.Beta = void 0; +var beta_1 = require("./beta.js"); +Object.defineProperty(exports, "Beta", { enumerable: true, get: function () { return beta_1.Beta; } }); +var models_1 = require("./models.js"); +Object.defineProperty(exports, "BetaModelInfosPage", { enumerable: true, get: function () { return models_1.BetaModelInfosPage; } }); +Object.defineProperty(exports, "Models", { enumerable: true, get: function () { return models_1.Models; } }); +var index_1 = require("./messages/index.js"); +Object.defineProperty(exports, "Messages", { enumerable: true, get: function () { return index_1.Messages; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/index.js.map b/vendor/sdk/resources/beta/index.js.map new file mode 100644 index 0000000..608527e --- /dev/null +++ b/vendor/sdk/resources/beta/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/beta/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,kCAcgB;AAbd,4FAAA,IAAI,OAAA;AAcN,sCAAgG;AAAvF,4GAAA,kBAAkB,OAAA;AAAE,gGAAA,MAAM,OAAA;AACnC,6CAgE0B;AA/DxB,iGAAA,QAAQ,OAAA"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/index.mjs b/vendor/sdk/resources/beta/index.mjs new file mode 100644 index 0000000..1aa9dfe --- /dev/null +++ b/vendor/sdk/resources/beta/index.mjs @@ -0,0 +1,5 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export { Beta, } from "./beta.mjs"; +export { BetaModelInfosPage, Models } from "./models.mjs"; +export { Messages, } from "./messages/index.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/index.mjs.map b/vendor/sdk/resources/beta/index.mjs.map new file mode 100644 index 0000000..efd6768 --- /dev/null +++ b/vendor/sdk/resources/beta/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/resources/beta/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EACL,IAAI,GAaL;OACM,EAAE,kBAAkB,EAAE,MAAM,EAA4C;OACxE,EACL,QAAQ,GA+DT"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/batches.d.ts b/vendor/sdk/resources/beta/messages/batches.d.ts new file mode 100644 index 0000000..cb931d7 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/batches.d.ts @@ -0,0 +1,289 @@ +import { APIResource } from "../../../resource.js"; +import * as Core from "../../../core.js"; +import * as BetaAPI from "../beta.js"; +import * as BetaMessagesAPI from "./messages.js"; +import { Page, type PageParams } from "../../../pagination.js"; +import { JSONLDecoder } from "../../../internal/decoders/jsonl.js"; +export declare class Batches extends APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(params: BatchCreateParams, options?: Core.RequestOptions): Core.APIPromise; + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + retrieve(messageBatchId: string, params?: BatchRetrieveParams, options?: Core.RequestOptions): Core.APIPromise; + retrieve(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + list(params?: BatchListParams, options?: Core.RequestOptions): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + delete(messageBatchId: string, params?: BatchDeleteParams, options?: Core.RequestOptions): Core.APIPromise; + delete(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + cancel(messageBatchId: string, params?: BatchCancelParams, options?: Core.RequestOptions): Core.APIPromise; + cancel(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + results(messageBatchId: string, params?: BatchResultsParams, options?: Core.RequestOptions): Promise>; + results(messageBatchId: string, options?: Core.RequestOptions): Promise>; +} +export declare class BetaMessageBatchesPage extends Page { +} +export interface BetaDeletedMessageBatch { + /** + * ID of the Message Batch. + */ + id: string; + /** + * Deleted object type. + * + * For Message Batches, this is always `"message_batch_deleted"`. + */ + type: 'message_batch_deleted'; +} +export interface BetaMessageBatch { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * archived and its results became unavailable. + */ + archived_at: string | null; + /** + * RFC 3339 datetime string representing the time at which cancellation was + * initiated for the Message Batch. Specified only if cancellation was initiated. + */ + cancel_initiated_at: string | null; + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * created. + */ + created_at: string; + /** + * RFC 3339 datetime string representing the time at which processing for the + * Message Batch ended. Specified only once processing ends. + * + * Processing ends when every request in a Message Batch has either succeeded, + * errored, canceled, or expired. + */ + ended_at: string | null; + /** + * RFC 3339 datetime string representing the time at which the Message Batch will + * expire and end processing, which is 24 hours after creation. + */ + expires_at: string; + /** + * Processing status of the Message Batch. + */ + processing_status: 'in_progress' | 'canceling' | 'ended'; + /** + * Tallies requests within the Message Batch, categorized by their status. + * + * Requests start as `processing` and move to one of the other statuses only once + * processing of the entire batch ends. The sum of all values always matches the + * total number of requests in the batch. + */ + request_counts: BetaMessageBatchRequestCounts; + /** + * URL to a `.jsonl` file containing the results of the Message Batch requests. + * Specified only once processing ends. + * + * Results in the file are not guaranteed to be in the same order as requests. Use + * the `custom_id` field to match results to requests. + */ + results_url: string | null; + /** + * Object type. + * + * For Message Batches, this is always `"message_batch"`. + */ + type: 'message_batch'; +} +export interface BetaMessageBatchCanceledResult { + type: 'canceled'; +} +export interface BetaMessageBatchErroredResult { + error: BetaAPI.BetaErrorResponse; + type: 'errored'; +} +export interface BetaMessageBatchExpiredResult { + type: 'expired'; +} +/** + * This is a single line in the response `.jsonl` file and does not represent the + * response as a whole. + */ +export interface BetaMessageBatchIndividualResponse { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + /** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ + result: BetaMessageBatchResult; +} +export interface BetaMessageBatchRequestCounts { + /** + * Number of requests in the Message Batch that have been canceled. + * + * This is zero until processing of the entire Message Batch has ended. + */ + canceled: number; + /** + * Number of requests in the Message Batch that encountered an error. + * + * This is zero until processing of the entire Message Batch has ended. + */ + errored: number; + /** + * Number of requests in the Message Batch that have expired. + * + * This is zero until processing of the entire Message Batch has ended. + */ + expired: number; + /** + * Number of requests in the Message Batch that are processing. + */ + processing: number; + /** + * Number of requests in the Message Batch that have completed successfully. + * + * This is zero until processing of the entire Message Batch has ended. + */ + succeeded: number; +} +/** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ +export type BetaMessageBatchResult = BetaMessageBatchSucceededResult | BetaMessageBatchErroredResult | BetaMessageBatchCanceledResult | BetaMessageBatchExpiredResult; +export interface BetaMessageBatchSucceededResult { + message: BetaMessagesAPI.BetaMessage; + type: 'succeeded'; +} +export interface BatchCreateParams { + /** + * Body param: List of requests for prompt completion. Each is an individual + * request to create a Message. + */ + requests: Array; + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export declare namespace BatchCreateParams { + interface Request { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + /** + * Messages API creation parameters for the individual request. + * + * See the [Messages API reference](/en/api/messages) for full documentation on + * available parameters. + */ + params: Omit; + } +} +export interface BatchRetrieveParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export interface BatchListParams extends PageParams { + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export interface BatchDeleteParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export interface BatchCancelParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export interface BatchResultsParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export declare namespace Batches { + export { type BetaDeletedMessageBatch as BetaDeletedMessageBatch, type BetaMessageBatch as BetaMessageBatch, type BetaMessageBatchCanceledResult as BetaMessageBatchCanceledResult, type BetaMessageBatchErroredResult as BetaMessageBatchErroredResult, type BetaMessageBatchExpiredResult as BetaMessageBatchExpiredResult, type BetaMessageBatchIndividualResponse as BetaMessageBatchIndividualResponse, type BetaMessageBatchRequestCounts as BetaMessageBatchRequestCounts, type BetaMessageBatchResult as BetaMessageBatchResult, type BetaMessageBatchSucceededResult as BetaMessageBatchSucceededResult, BetaMessageBatchesPage as BetaMessageBatchesPage, type BatchCreateParams as BatchCreateParams, type BatchRetrieveParams as BatchRetrieveParams, type BatchListParams as BatchListParams, type BatchDeleteParams as BatchDeleteParams, type BatchCancelParams as BatchCancelParams, type BatchResultsParams as BatchResultsParams, }; +} +//# sourceMappingURL=batches.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/batches.d.ts.map b/vendor/sdk/resources/beta/messages/batches.d.ts.map new file mode 100644 index 0000000..8165f5c --- /dev/null +++ b/vendor/sdk/resources/beta/messages/batches.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.d.ts","sourceRoot":"","sources":["../../../src/resources/beta/messages/batches.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/batches.js b/vendor/sdk/resources/beta/messages/batches.js new file mode 100644 index 0000000..6703799 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/batches.js @@ -0,0 +1,112 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BetaMessageBatchesPage = exports.Batches = void 0; +const resource_1 = require("../../../resource.js"); +const core_1 = require("../../../core.js"); +const pagination_1 = require("../../../pagination.js"); +const jsonl_1 = require("../../../internal/decoders/jsonl.js"); +const error_1 = require("../../../error.js"); +class Batches extends resource_1.APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post('/v1/messages/batches?beta=true', { + body, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + retrieve(messageBatchId, params = {}, options) { + if ((0, core_1.isRequestOptions)(params)) { + return this.retrieve(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.get(`/v1/messages/batches/${messageBatchId}?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + list(params = {}, options) { + if ((0, core_1.isRequestOptions)(params)) { + return this.list({}, params); + } + const { betas, ...query } = params; + return this._client.getAPIList('/v1/messages/batches?beta=true', BetaMessageBatchesPage, { + query, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + delete(messageBatchId, params = {}, options) { + if ((0, core_1.isRequestOptions)(params)) { + return this.delete(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.delete(`/v1/messages/batches/${messageBatchId}?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + cancel(messageBatchId, params = {}, options) { + if ((0, core_1.isRequestOptions)(params)) { + return this.cancel(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.post(`/v1/messages/batches/${messageBatchId}/cancel?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + async results(messageBatchId, params = {}, options) { + if ((0, core_1.isRequestOptions)(params)) { + return this.results(messageBatchId, {}, params); + } + const batch = await this.retrieve(messageBatchId); + if (!batch.results_url) { + throw new error_1.AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + const { betas } = params; + return this._client + .get(batch.results_url, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + Accept: 'application/binary', + ...options?.headers, + }, + __binaryResponse: true, + }) + ._thenUnwrap((_, props) => jsonl_1.JSONLDecoder.fromResponse(props.response, props.controller)); + } +} +exports.Batches = Batches; +class BetaMessageBatchesPage extends pagination_1.Page { +} +exports.BetaMessageBatchesPage = BetaMessageBatchesPage; +Batches.BetaMessageBatchesPage = BetaMessageBatchesPage; +//# sourceMappingURL=batches.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/batches.js.map b/vendor/sdk/resources/beta/messages/batches.js.map new file mode 100644 index 0000000..b93dda9 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/batches.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.js","sourceRoot":"","sources":["../../../src/resources/beta/messages/batches.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/batches.mjs b/vendor/sdk/resources/beta/messages/batches.mjs new file mode 100644 index 0000000..4f33437 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/batches.mjs @@ -0,0 +1,107 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../../../resource.mjs"; +import { isRequestOptions } from "../../../core.mjs"; +import { Page } from "../../../pagination.mjs"; +import { JSONLDecoder } from "../../../internal/decoders/jsonl.mjs"; +import { AnthropicError } from "../../../error.mjs"; +export class Batches extends APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post('/v1/messages/batches?beta=true', { + body, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + retrieve(messageBatchId, params = {}, options) { + if (isRequestOptions(params)) { + return this.retrieve(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.get(`/v1/messages/batches/${messageBatchId}?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + list(params = {}, options) { + if (isRequestOptions(params)) { + return this.list({}, params); + } + const { betas, ...query } = params; + return this._client.getAPIList('/v1/messages/batches?beta=true', BetaMessageBatchesPage, { + query, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + delete(messageBatchId, params = {}, options) { + if (isRequestOptions(params)) { + return this.delete(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.delete(`/v1/messages/batches/${messageBatchId}?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + cancel(messageBatchId, params = {}, options) { + if (isRequestOptions(params)) { + return this.cancel(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.post(`/v1/messages/batches/${messageBatchId}/cancel?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + async results(messageBatchId, params = {}, options) { + if (isRequestOptions(params)) { + return this.results(messageBatchId, {}, params); + } + const batch = await this.retrieve(messageBatchId); + if (!batch.results_url) { + throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + const { betas } = params; + return this._client + .get(batch.results_url, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + Accept: 'application/binary', + ...options?.headers, + }, + __binaryResponse: true, + }) + ._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } +} +export class BetaMessageBatchesPage extends Page { +} +Batches.BetaMessageBatchesPage = BetaMessageBatchesPage; +//# sourceMappingURL=batches.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/batches.mjs.map b/vendor/sdk/resources/beta/messages/batches.mjs.map new file mode 100644 index 0000000..73eee8e --- /dev/null +++ b/vendor/sdk/resources/beta/messages/batches.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.mjs","sourceRoot":"","sources":["../../../src/resources/beta/messages/batches.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/index.d.ts b/vendor/sdk/resources/beta/messages/index.d.ts new file mode 100644 index 0000000..fd8d9e4 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/index.d.ts @@ -0,0 +1,3 @@ +export { BetaMessageBatchesPage, Batches, type BetaDeletedMessageBatch, type BetaMessageBatch, type BetaMessageBatchCanceledResult, type BetaMessageBatchErroredResult, type BetaMessageBatchExpiredResult, type BetaMessageBatchIndividualResponse, type BetaMessageBatchRequestCounts, type BetaMessageBatchResult, type BetaMessageBatchSucceededResult, type BatchCreateParams, type BatchRetrieveParams, type BatchListParams, type BatchDeleteParams, type BatchCancelParams, type BatchResultsParams, } from "./batches.js"; +export { Messages, type BetaBase64PDFBlock, type BetaBase64PDFSource, type BetaCacheControlEphemeral, type BetaCitationCharLocation, type BetaCitationCharLocationParam, type BetaCitationContentBlockLocation, type BetaCitationContentBlockLocationParam, type BetaCitationPageLocation, type BetaCitationPageLocationParam, type BetaCitationsConfigParam, type BetaCitationsDelta, type BetaContentBlock, type BetaContentBlockParam, type BetaContentBlockSource, type BetaContentBlockSourceContent, type BetaImageBlockParam, type BetaInputJSONDelta, type BetaMessage, type BetaMessageDeltaUsage, type BetaMessageParam, type BetaMessageTokensCount, type BetaMetadata, type BetaPlainTextSource, type BetaRawContentBlockDeltaEvent, type BetaRawContentBlockStartEvent, type BetaRawContentBlockStopEvent, type BetaRawMessageDeltaEvent, type BetaRawMessageStartEvent, type BetaRawMessageStopEvent, type BetaRawMessageStreamEvent, type BetaRedactedThinkingBlock, type BetaRedactedThinkingBlockParam, type BetaSignatureDelta, type BetaTextBlock, type BetaTextBlockParam, type BetaTextCitation, type BetaTextCitationParam, type BetaTextDelta, type BetaThinkingBlock, type BetaThinkingBlockParam, type BetaThinkingConfigDisabled, type BetaThinkingConfigEnabled, type BetaThinkingDelta, type BetaTool, type BetaToolBash20241022, type BetaToolBash20250124, type BetaToolChoice, type BetaToolChoiceAny, type BetaToolChoiceAuto, type BetaToolChoiceTool, type BetaToolComputerUse20241022, type BetaToolResultBlockParam, type BetaToolTextEditor20241022, type BetaToolTextEditor20250124, type BetaToolUnion, type BetaToolUseBlock, type BetaToolUseBlockParam, type BetaUsage, type MessageCreateParams, type MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming, type MessageCountTokensParams, type BetaMessageStreamParams, } from "./messages.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/index.d.ts.map b/vendor/sdk/resources/beta/messages/index.d.ts.map new file mode 100644 index 0000000..ef47b27 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resources/beta/messages/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,OAAO,EACP,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,QAAQ,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/index.js b/vendor/sdk/resources/beta/messages/index.js new file mode 100644 index 0000000..d95461b --- /dev/null +++ b/vendor/sdk/resources/beta/messages/index.js @@ -0,0 +1,10 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Messages = exports.Batches = exports.BetaMessageBatchesPage = void 0; +var batches_1 = require("./batches.js"); +Object.defineProperty(exports, "BetaMessageBatchesPage", { enumerable: true, get: function () { return batches_1.BetaMessageBatchesPage; } }); +Object.defineProperty(exports, "Batches", { enumerable: true, get: function () { return batches_1.Batches; } }); +var messages_1 = require("./messages.js"); +Object.defineProperty(exports, "Messages", { enumerable: true, get: function () { return messages_1.Messages; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/index.js.map b/vendor/sdk/resources/beta/messages/index.js.map new file mode 100644 index 0000000..5334226 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resources/beta/messages/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,wCAkBmB;AAjBjB,iHAAA,sBAAsB,OAAA;AACtB,kGAAA,OAAO,OAAA;AAiBT,0CAiEoB;AAhElB,oGAAA,QAAQ,OAAA"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/index.mjs b/vendor/sdk/resources/beta/messages/index.mjs new file mode 100644 index 0000000..d9ec0a8 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/index.mjs @@ -0,0 +1,4 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export { BetaMessageBatchesPage, Batches, } from "./batches.mjs"; +export { Messages, } from "./messages.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/index.mjs.map b/vendor/sdk/resources/beta/messages/index.mjs.map new file mode 100644 index 0000000..eeb80f6 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/resources/beta/messages/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EACL,sBAAsB,EACtB,OAAO,GAgBR;OACM,EACL,QAAQ,GAgET"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/messages.d.ts b/vendor/sdk/resources/beta/messages/messages.d.ts new file mode 100644 index 0000000..d333e81 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/messages.d.ts @@ -0,0 +1,1038 @@ +import { APIResource } from "../../../resource.js"; +import { APIPromise } from "../../../core.js"; +import * as Core from "../../../core.js"; +import * as MessagesMessagesAPI from "./messages.js"; +import * as BetaAPI from "../beta.js"; +import * as MessagesAPI from "../../messages/messages.js"; +import * as BatchesAPI from "./batches.js"; +import { BatchCancelParams, BatchCreateParams, BatchDeleteParams, BatchListParams, BatchResultsParams, BatchRetrieveParams, Batches, BetaDeletedMessageBatch, BetaMessageBatch, BetaMessageBatchCanceledResult, BetaMessageBatchErroredResult, BetaMessageBatchExpiredResult, BetaMessageBatchIndividualResponse, BetaMessageBatchRequestCounts, BetaMessageBatchResult, BetaMessageBatchSucceededResult, BetaMessageBatchesPage } from "./batches.js"; +import { Stream } from "../../../streaming.js"; +import { BetaMessageStream } from "../../../lib/BetaMessageStream.js"; +export declare class Messages extends APIResource { + batches: BatchesAPI.Batches; + /** + * Send a structured list of input messages with text and/or image content, and the + * model will generate the next message in the conversation. + * + * The Messages API can be used for either single queries or stateless multi-turn + * conversations. + * + * Learn more about the Messages API in our [user guide](/en/docs/initial-setup) + */ + create(params: MessageCreateParamsNonStreaming, options?: Core.RequestOptions): APIPromise; + create(params: MessageCreateParamsStreaming, options?: Core.RequestOptions): APIPromise>; + create(params: MessageCreateParamsBase, options?: Core.RequestOptions): APIPromise | BetaMessage>; + /** + * Create a Message stream + */ + stream(body: BetaMessageStreamParams, options?: Core.RequestOptions): BetaMessageStream; + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens(params: MessageCountTokensParams, options?: Core.RequestOptions): Core.APIPromise; +} +export type BetaMessageStreamParams = MessageCreateParamsBase; +export interface BetaBase64PDFBlock { + source: BetaBase64PDFSource | BetaPlainTextSource | BetaContentBlockSource; + type: 'document'; + cache_control?: BetaCacheControlEphemeral | null; + citations?: BetaCitationsConfigParam; + context?: string | null; + title?: string | null; +} +export interface BetaBase64PDFSource { + data: string; + media_type: 'application/pdf'; + type: 'base64'; +} +export interface BetaCacheControlEphemeral { + type: 'ephemeral'; +} +export interface BetaCitationCharLocation { + cited_text: string; + document_index: number; + document_title: string | null; + end_char_index: number; + start_char_index: number; + type: 'char_location'; +} +export interface BetaCitationCharLocationParam { + cited_text: string; + document_index: number; + document_title: string | null; + end_char_index: number; + start_char_index: number; + type: 'char_location'; +} +export interface BetaCitationContentBlockLocation { + cited_text: string; + document_index: number; + document_title: string | null; + end_block_index: number; + start_block_index: number; + type: 'content_block_location'; +} +export interface BetaCitationContentBlockLocationParam { + cited_text: string; + document_index: number; + document_title: string | null; + end_block_index: number; + start_block_index: number; + type: 'content_block_location'; +} +export interface BetaCitationPageLocation { + cited_text: string; + document_index: number; + document_title: string | null; + end_page_number: number; + start_page_number: number; + type: 'page_location'; +} +export interface BetaCitationPageLocationParam { + cited_text: string; + document_index: number; + document_title: string | null; + end_page_number: number; + start_page_number: number; + type: 'page_location'; +} +export interface BetaCitationsConfigParam { + enabled?: boolean; +} +export interface BetaCitationsDelta { + citation: BetaCitationCharLocation | BetaCitationPageLocation | BetaCitationContentBlockLocation; + type: 'citations_delta'; +} +export type BetaContentBlock = BetaTextBlock | BetaToolUseBlock | BetaThinkingBlock | BetaRedactedThinkingBlock; +export type BetaContentBlockParam = BetaTextBlockParam | BetaImageBlockParam | BetaToolUseBlockParam | BetaToolResultBlockParam | BetaBase64PDFBlock | BetaThinkingBlockParam | BetaRedactedThinkingBlockParam; +export interface BetaContentBlockSource { + content: string | Array; + type: 'content'; +} +export type BetaContentBlockSourceContent = BetaTextBlockParam | BetaImageBlockParam; +export interface BetaImageBlockParam { + source: BetaImageBlockParam.Source; + type: 'image'; + cache_control?: BetaCacheControlEphemeral | null; +} +export declare namespace BetaImageBlockParam { + interface Source { + data: string; + media_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp'; + type: 'base64'; + } +} +export interface BetaInputJSONDelta { + partial_json: string; + type: 'input_json_delta'; +} +export interface BetaMessage { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + /** + * Content generated by the model. + * + * This is an array of content blocks, each of which has a `type` that determines + * its shape. + * + * Example: + * + * ```json + * [{ "type": "text", "text": "Hi, I'm Claude." }] + * ``` + * + * If the request input `messages` ended with an `assistant` turn, then the + * response `content` will continue directly from that last turn. You can use this + * to constrain the model's output. + * + * For example, if the input `messages` were: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Then the response `content` might be: + * + * ```json + * [{ "type": "text", "text": "B)" }] + * ``` + */ + content: Array; + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + /** + * Conversational role of the generated message. + * + * This will always be `"assistant"`. + */ + role: 'assistant'; + /** + * The reason that we stopped. + * + * This may be one the following values: + * + * - `"end_turn"`: the model reached a natural stopping point + * - `"max_tokens"`: we exceeded the requested `max_tokens` or the model's maximum + * - `"stop_sequence"`: one of your provided custom `stop_sequences` was generated + * - `"tool_use"`: the model invoked one or more tools + * + * In non-streaming mode this value is always non-null. In streaming mode, it is + * null in the `message_start` event and non-null otherwise. + */ + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + /** + * Which custom stop sequence was generated, if any. + * + * This value will be a non-null string if one of your custom stop sequences was + * generated. + */ + stop_sequence: string | null; + /** + * Object type. + * + * For Messages, this is always `"message"`. + */ + type: 'message'; + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: BetaUsage; +} +export interface BetaMessageDeltaUsage { + /** + * The cumulative number of output tokens which were used. + */ + output_tokens: number; +} +export interface BetaMessageParam { + content: string | Array; + role: 'user' | 'assistant'; +} +export interface BetaMessageTokensCount { + /** + * The total number of tokens across the provided list of messages, system prompt, + * and tools. + */ + input_tokens: number; +} +export interface BetaMetadata { + /** + * An external identifier for the user who is associated with the request. + * + * This should be a uuid, hash value, or other opaque identifier. Anthropic may use + * this id to help detect abuse. Do not include any identifying information such as + * name, email address, or phone number. + */ + user_id?: string | null; +} +export interface BetaPlainTextSource { + data: string; + media_type: 'text/plain'; + type: 'text'; +} +export interface BetaRawContentBlockDeltaEvent { + delta: BetaTextDelta | BetaInputJSONDelta | BetaCitationsDelta | BetaThinkingDelta | BetaSignatureDelta; + index: number; + type: 'content_block_delta'; +} +export interface BetaRawContentBlockStartEvent { + content_block: BetaTextBlock | BetaToolUseBlock | BetaThinkingBlock | BetaRedactedThinkingBlock; + index: number; + type: 'content_block_start'; +} +export interface BetaRawContentBlockStopEvent { + index: number; + type: 'content_block_stop'; +} +export interface BetaRawMessageDeltaEvent { + delta: BetaRawMessageDeltaEvent.Delta; + type: 'message_delta'; + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: BetaMessageDeltaUsage; +} +export declare namespace BetaRawMessageDeltaEvent { + interface Delta { + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + stop_sequence: string | null; + } +} +export interface BetaRawMessageStartEvent { + message: BetaMessage; + type: 'message_start'; +} +export interface BetaRawMessageStopEvent { + type: 'message_stop'; +} +export type BetaRawMessageStreamEvent = BetaRawMessageStartEvent | BetaRawMessageDeltaEvent | BetaRawMessageStopEvent | BetaRawContentBlockStartEvent | BetaRawContentBlockDeltaEvent | BetaRawContentBlockStopEvent; +export interface BetaRedactedThinkingBlock { + data: string; + type: 'redacted_thinking'; +} +export interface BetaRedactedThinkingBlockParam { + data: string; + type: 'redacted_thinking'; +} +export interface BetaSignatureDelta { + signature: string; + type: 'signature_delta'; +} +export interface BetaTextBlock { + /** + * Citations supporting the text block. + * + * The type of citation returned will depend on the type of document being cited. + * Citing a PDF results in `page_location`, plain text results in `char_location`, + * and content document results in `content_block_location`. + */ + citations: Array | null; + text: string; + type: 'text'; +} +export interface BetaTextBlockParam { + text: string; + type: 'text'; + cache_control?: BetaCacheControlEphemeral | null; + citations?: Array | null; +} +export type BetaTextCitation = BetaCitationCharLocation | BetaCitationPageLocation | BetaCitationContentBlockLocation; +export type BetaTextCitationParam = BetaCitationCharLocationParam | BetaCitationPageLocationParam | BetaCitationContentBlockLocationParam; +export interface BetaTextDelta { + text: string; + type: 'text_delta'; +} +export interface BetaThinkingBlock { + signature: string; + thinking: string; + type: 'thinking'; +} +export interface BetaThinkingBlockParam { + signature: string; + thinking: string; + type: 'thinking'; +} +export interface BetaThinkingConfigDisabled { + type: 'disabled'; +} +export interface BetaThinkingConfigEnabled { + budget_tokens: number; + type: 'enabled'; +} +export interface BetaThinkingDelta { + thinking: string; + type: 'thinking_delta'; +} +export interface BetaTool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + input_schema: BetaTool.InputSchema; + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: string; + cache_control?: BetaCacheControlEphemeral | null; + /** + * Description of what this tool does. + * + * Tool descriptions should be as detailed as possible. The more information that + * the model has about what the tool is and how to use it, the better it will + * perform. You can use natural language descriptions to reinforce important + * aspects of the tool input JSON schema. + */ + description?: string; + type?: 'custom' | null; +} +export declare namespace BetaTool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + interface InputSchema { + type: 'object'; + properties?: unknown | null; + [k: string]: unknown; + } +} +export interface BetaToolBash20241022 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + type: 'bash_20241022'; + cache_control?: BetaCacheControlEphemeral | null; +} +export interface BetaToolBash20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + type: 'bash_20250124'; + cache_control?: BetaCacheControlEphemeral | null; +} +/** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ +export type BetaToolChoice = BetaToolChoiceAuto | BetaToolChoiceAny | BetaToolChoiceTool; +/** + * The model will use any available tools. + */ +export interface BetaToolChoiceAny { + type: 'any'; + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} +/** + * The model will automatically decide whether to use tools. + */ +export interface BetaToolChoiceAuto { + type: 'auto'; + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output at most one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} +/** + * The model will use the specified tool with `tool_choice.name`. + */ +export interface BetaToolChoiceTool { + /** + * The name of the tool to use. + */ + name: string; + type: 'tool'; + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} +export interface BetaToolComputerUse20241022 { + /** + * The height of the display in pixels. + */ + display_height_px: number; + /** + * The width of the display in pixels. + */ + display_width_px: number; + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'computer'; + type: 'computer_20241022'; + cache_control?: BetaCacheControlEphemeral | null; + /** + * The X11 display number (e.g. 0, 1) for the display. + */ + display_number?: number | null; +} +export interface BetaToolResultBlockParam { + tool_use_id: string; + type: 'tool_result'; + cache_control?: BetaCacheControlEphemeral | null; + content?: string | Array; + is_error?: boolean; +} +export interface BetaToolTextEditor20241022 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + type: 'text_editor_20241022'; + cache_control?: BetaCacheControlEphemeral | null; +} +export interface BetaToolTextEditor20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + type: 'text_editor_20250124'; + cache_control?: BetaCacheControlEphemeral | null; +} +export type BetaToolUnion = BetaToolComputerUse20241022 | BetaToolBash20241022 | BetaToolTextEditor20241022 | BetaToolBash20250124 | BetaToolTextEditor20250124 | BetaTool; +export interface BetaToolUseBlock { + id: string; + input: unknown; + name: string; + type: 'tool_use'; +} +export interface BetaToolUseBlockParam { + id: string; + input: unknown; + name: string; + type: 'tool_use'; + cache_control?: BetaCacheControlEphemeral | null; +} +export interface BetaUsage { + /** + * The number of input tokens used to create the cache entry. + */ + cache_creation_input_tokens: number | null; + /** + * The number of input tokens read from the cache. + */ + cache_read_input_tokens: number | null; + /** + * The number of input tokens which were used. + */ + input_tokens: number; + /** + * The number of output tokens which were used. + */ + output_tokens: number; +} +export type MessageCreateParams = MessageCreateParamsNonStreaming | MessageCreateParamsStreaming; +export interface MessageCreateParamsBase { + /** + * Body param: The maximum number of tokens to generate before stopping. + * + * Note that our models may stop _before_ reaching this maximum. This parameter + * only specifies the absolute maximum number of tokens to generate. + * + * Different models have different maximum values for this parameter. See + * [models](https://docs.anthropic.com/en/docs/models-overview) for details. + */ + max_tokens: number; + /** + * Body param: Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + /** + * Body param: The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + /** + * Body param: An object describing metadata about the request. + */ + metadata?: BetaMetadata; + /** + * Body param: Custom text sequences that will cause the model to stop generating. + * + * Our models will normally stop when they have naturally completed their turn, + * which will result in a response `stop_reason` of `"end_turn"`. + * + * If you want the model to stop generating when it encounters custom strings of + * text, you can use the `stop_sequences` parameter. If the model encounters one of + * the custom sequences, the response `stop_reason` value will be `"stop_sequence"` + * and the response `stop_sequence` value will contain the matched stop sequence. + */ + stop_sequences?: Array; + /** + * Body param: Whether to incrementally stream the response using server-sent + * events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: boolean; + /** + * Body param: System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + /** + * Body param: Amount of randomness injected into the response. + * + * Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` + * for analytical / multiple choice, and closer to `1.0` for creative and + * generative tasks. + * + * Note that even with `temperature` of `0.0`, the results will not be fully + * deterministic. + */ + temperature?: number; + /** + * Body param: + */ + thinking?: BetaThinkingConfigEnabled | BetaThinkingConfigDisabled; + /** + * Body param: How the model should use the provided tools. The model can use a + * specific tool, any available tool, or decide by itself. + */ + tool_choice?: BetaToolChoice; + /** + * Body param: Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array; + /** + * Body param: Only sample from the top K options for each subsequent token. + * + * Used to remove "long tail" low probability responses. + * [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_k?: number; + /** + * Body param: Use nucleus sampling. + * + * In nucleus sampling, we compute the cumulative distribution over all the options + * for each subsequent token in decreasing probability order and cut it off once it + * reaches a particular probability specified by `top_p`. You should either alter + * `temperature` or `top_p`, but not both. + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_p?: number; + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export declare namespace MessageCreateParams { + type MessageCreateParamsNonStreaming = MessagesMessagesAPI.MessageCreateParamsNonStreaming; + type MessageCreateParamsStreaming = MessagesMessagesAPI.MessageCreateParamsStreaming; +} +export interface MessageCreateParamsNonStreaming extends MessageCreateParamsBase { + /** + * Body param: Whether to incrementally stream the response using server-sent + * events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: false; +} +export interface MessageCreateParamsStreaming extends MessageCreateParamsBase { + /** + * Body param: Whether to incrementally stream the response using server-sent + * events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream: true; +} +export interface MessageCountTokensParams { + /** + * Body param: Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + /** + * Body param: The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + /** + * Body param: System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + /** + * Body param: + */ + thinking?: BetaThinkingConfigEnabled | BetaThinkingConfigDisabled; + /** + * Body param: How the model should use the provided tools. The model can use a + * specific tool, any available tool, or decide by itself. + */ + tool_choice?: BetaToolChoice; + /** + * Body param: Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array; + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} +export declare namespace Messages { + export { type BetaBase64PDFBlock as BetaBase64PDFBlock, type BetaBase64PDFSource as BetaBase64PDFSource, type BetaCacheControlEphemeral as BetaCacheControlEphemeral, type BetaCitationCharLocation as BetaCitationCharLocation, type BetaCitationCharLocationParam as BetaCitationCharLocationParam, type BetaCitationContentBlockLocation as BetaCitationContentBlockLocation, type BetaCitationContentBlockLocationParam as BetaCitationContentBlockLocationParam, type BetaCitationPageLocation as BetaCitationPageLocation, type BetaCitationPageLocationParam as BetaCitationPageLocationParam, type BetaCitationsConfigParam as BetaCitationsConfigParam, type BetaCitationsDelta as BetaCitationsDelta, type BetaContentBlock as BetaContentBlock, type BetaContentBlockParam as BetaContentBlockParam, type BetaContentBlockSource as BetaContentBlockSource, type BetaContentBlockSourceContent as BetaContentBlockSourceContent, type BetaImageBlockParam as BetaImageBlockParam, type BetaInputJSONDelta as BetaInputJSONDelta, type BetaMessage as BetaMessage, type BetaMessageDeltaUsage as BetaMessageDeltaUsage, type BetaMessageParam as BetaMessageParam, type BetaMessageTokensCount as BetaMessageTokensCount, type BetaMetadata as BetaMetadata, type BetaPlainTextSource as BetaPlainTextSource, type BetaRawContentBlockDeltaEvent as BetaRawContentBlockDeltaEvent, type BetaRawContentBlockStartEvent as BetaRawContentBlockStartEvent, type BetaRawContentBlockStopEvent as BetaRawContentBlockStopEvent, type BetaRawMessageDeltaEvent as BetaRawMessageDeltaEvent, type BetaRawMessageStartEvent as BetaRawMessageStartEvent, type BetaRawMessageStopEvent as BetaRawMessageStopEvent, type BetaRawMessageStreamEvent as BetaRawMessageStreamEvent, type BetaRedactedThinkingBlock as BetaRedactedThinkingBlock, type BetaRedactedThinkingBlockParam as BetaRedactedThinkingBlockParam, type BetaSignatureDelta as BetaSignatureDelta, type BetaTextBlock as BetaTextBlock, type BetaTextBlockParam as BetaTextBlockParam, type BetaTextCitation as BetaTextCitation, type BetaTextCitationParam as BetaTextCitationParam, type BetaTextDelta as BetaTextDelta, type BetaThinkingBlock as BetaThinkingBlock, type BetaThinkingBlockParam as BetaThinkingBlockParam, type BetaThinkingConfigDisabled as BetaThinkingConfigDisabled, type BetaThinkingConfigEnabled as BetaThinkingConfigEnabled, type BetaThinkingDelta as BetaThinkingDelta, type BetaTool as BetaTool, type BetaToolBash20241022 as BetaToolBash20241022, type BetaToolBash20250124 as BetaToolBash20250124, type BetaToolChoice as BetaToolChoice, type BetaToolChoiceAny as BetaToolChoiceAny, type BetaToolChoiceAuto as BetaToolChoiceAuto, type BetaToolChoiceTool as BetaToolChoiceTool, type BetaToolComputerUse20241022 as BetaToolComputerUse20241022, type BetaToolResultBlockParam as BetaToolResultBlockParam, type BetaToolTextEditor20241022 as BetaToolTextEditor20241022, type BetaToolTextEditor20250124 as BetaToolTextEditor20250124, type BetaToolUnion as BetaToolUnion, type BetaToolUseBlock as BetaToolUseBlock, type BetaToolUseBlockParam as BetaToolUseBlockParam, type BetaUsage as BetaUsage, type MessageCreateParams as MessageCreateParams, type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming as MessageCreateParamsStreaming, type MessageCountTokensParams as MessageCountTokensParams, }; + export { Batches as Batches, type BetaDeletedMessageBatch as BetaDeletedMessageBatch, type BetaMessageBatch as BetaMessageBatch, type BetaMessageBatchCanceledResult as BetaMessageBatchCanceledResult, type BetaMessageBatchErroredResult as BetaMessageBatchErroredResult, type BetaMessageBatchExpiredResult as BetaMessageBatchExpiredResult, type BetaMessageBatchIndividualResponse as BetaMessageBatchIndividualResponse, type BetaMessageBatchRequestCounts as BetaMessageBatchRequestCounts, type BetaMessageBatchResult as BetaMessageBatchResult, type BetaMessageBatchSucceededResult as BetaMessageBatchSucceededResult, BetaMessageBatchesPage as BetaMessageBatchesPage, type BatchCreateParams as BatchCreateParams, type BatchRetrieveParams as BatchRetrieveParams, type BatchListParams as BatchListParams, type BatchDeleteParams as BatchDeleteParams, type BatchCancelParams as BatchCancelParams, type BatchResultsParams as BatchResultsParams, }; +} +//# sourceMappingURL=messages.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/messages.d.ts.map b/vendor/sdk/resources/beta/messages/messages.d.ts.map new file mode 100644 index 0000000..8b0605b --- /dev/null +++ b/vendor/sdk/resources/beta/messages/messages.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/resources/beta/messages/messages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,mBAAmB,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,UAAU,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,OAAO,EACP,uBAAuB,EACvB,gBAAgB,EAChB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,kCAAkC,EAClC,6BAA6B,EAC7B,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAgBnE,qBAAa,QAAS,SAAQ,WAAW;IACvC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAwC;IAEnE;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,EAAE,+BAA+B,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC;IACvG,MAAM,CACJ,MAAM,EAAE,4BAA4B,EACpC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAC5B,UAAU,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAChD,MAAM,CACJ,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAC5B,UAAU,CAAC,MAAM,CAAC,yBAAyB,CAAC,GAAG,WAAW,CAAC;IA2B9D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,iBAAiB;IAIvF;;;;;;;;OAQG;IACH,WAAW,CACT,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAC5B,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;CAW3C;AAED,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;IAE3E,IAAI,EAAE,UAAU,CAAC;IAEjB,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEjD,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,EAAE,iBAAiB,CAAC;IAE9B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,cAAc,EAAE,MAAM,CAAC;IAEvB,gBAAgB,EAAE,MAAM,CAAC;IAEzB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,cAAc,EAAE,MAAM,CAAC;IAEvB,gBAAgB,EAAE,MAAM,CAAC;IAEzB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,gCAAgC;IAC/C,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,wBAAwB,CAAC;CAChC;AAED,MAAM,WAAW,qCAAqC;IACpD,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,wBAAwB,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,gCAAgC,CAAC;IAEjG,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,qBAAqB,GAC7B,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,kBAAkB,GAClB,sBAAsB,GACtB,8BAA8B,CAAC;AAEnC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAEvD,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,MAAM,6BAA6B,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAErF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;IAEnC,IAAI,EAAE,OAAO,CAAC;IAEd,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAED,yBAAiB,mBAAmB,CAAC;IACnC,UAAiB,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC;QAEb,UAAU,EAAE,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;QAEpE,IAAI,EAAE,QAAQ,CAAC;KAChB;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IAErB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEjC;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;IAEzB;;;;OAIG;IACH,IAAI,EAAE,WAAW,CAAC;IAElB;;;;;;;;;;;;OAYG;IACH,WAAW,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,CAAC;IAE7E;;;;;OAKG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;OAIG;IACH,IAAI,EAAE,SAAS,CAAC;IAEhB;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAE/C,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,EAAE,YAAY,CAAC;IAEzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,aAAa,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;IAExG,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,aAAa,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC;IAEhG,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC;IAEtC,IAAI,EAAE,eAAe,CAAC;IAEtB;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,yBAAiB,wBAAwB,CAAC;IACxC,UAAiB,KAAK;QACpB,WAAW,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,CAAC;QAE7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B;CACF;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,WAAW,CAAC;IAErB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,MAAM,yBAAyB,GACjC,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,GACvB,6BAA6B,GAC7B,6BAA6B,GAC7B,4BAA4B,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAE1C,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEjD,SAAS,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,gBAAgB,GACxB,wBAAwB,GACxB,wBAAwB,GACxB,gCAAgC,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAC7B,6BAA6B,GAC7B,6BAA6B,GAC7B,qCAAqC,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IAEtB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB;;;;;OAKG;IACH,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC;IAEnC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEjD;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED,yBAAiB,QAAQ,CAAC;IACxB;;;;;OAKG;IACH,UAAiB,WAAW;QAC1B,IAAI,EAAE,QAAQ,CAAC;QAEf,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,eAAe,CAAC;IAEtB,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,eAAe,CAAC;IAEtB,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IAEZ;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB,IAAI,EAAE,mBAAmB,CAAC;IAE1B,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,aAAa,CAAC;IAEpB,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEjD,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,CAAC;IAEnE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAE3B,IAAI,EAAE,sBAAsB,CAAC;IAE7B,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAE3B,IAAI,EAAE,sBAAsB,CAAC;IAE7B,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,MAAM,aAAa,GACrB,2BAA2B,GAC3B,oBAAoB,GACpB,0BAA0B,GAC1B,oBAAoB,GACpB,0BAA0B,GAC1B,QAAQ,CAAC;AAEb,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,OAAO,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,OAAO,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,UAAU,CAAC;IAEjB,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;OAEG;IACH,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAAG,+BAA+B,GAAG,4BAA4B,CAAC;AAEjG,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuFG;IACH,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAElC;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE5C;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,yBAAyB,GAAG,0BAA0B,CAAC;IAElE;;;OAGG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAE7B;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;CACtC;AAED,yBAAiB,mBAAmB,CAAC;IACnC,KAAY,+BAA+B,GAAG,mBAAmB,CAAC,+BAA+B,CAAC;IAClG,KAAY,4BAA4B,GAAG,mBAAmB,CAAC,4BAA4B,CAAC;CAC7F;AAED,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E;;;;;;OAMG;IACH,MAAM,EAAE,IAAI,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuFG;IACH,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAElC;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;IAEzB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,EAAE,yBAAyB,GAAG,0BAA0B,CAAC;IAElE;;;OAGG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsEG;IACH,KAAK,CAAC,EAAE,KAAK,CACT,2BAA2B,GAC3B,oBAAoB,GACpB,0BAA0B,GAC1B,oBAAoB,GACpB,0BAA0B,GAC1B,QAAQ,CACX,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;CACtC;AAKD,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,OAAO,EACL,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,mBAAmB,IAAI,mBAAmB,EAC/C,KAAK,yBAAyB,IAAI,yBAAyB,EAC3D,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,gCAAgC,IAAI,gCAAgC,EACzE,KAAK,qCAAqC,IAAI,qCAAqC,EACnF,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,gBAAgB,IAAI,gBAAgB,EACzC,KAAK,qBAAqB,IAAI,qBAAqB,EACnD,KAAK,sBAAsB,IAAI,sBAAsB,EACrD,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,mBAAmB,IAAI,mBAAmB,EAC/C,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,WAAW,IAAI,WAAW,EAC/B,KAAK,qBAAqB,IAAI,qBAAqB,EACnD,KAAK,gBAAgB,IAAI,gBAAgB,EACzC,KAAK,sBAAsB,IAAI,sBAAsB,EACrD,KAAK,YAAY,IAAI,YAAY,EACjC,KAAK,mBAAmB,IAAI,mBAAmB,EAC/C,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,4BAA4B,IAAI,4BAA4B,EACjE,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,uBAAuB,IAAI,uBAAuB,EACvD,KAAK,yBAAyB,IAAI,yBAAyB,EAC3D,KAAK,yBAAyB,IAAI,yBAAyB,EAC3D,KAAK,8BAA8B,IAAI,8BAA8B,EACrE,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,aAAa,IAAI,aAAa,EACnC,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,gBAAgB,IAAI,gBAAgB,EACzC,KAAK,qBAAqB,IAAI,qBAAqB,EACnD,KAAK,aAAa,IAAI,aAAa,EACnC,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,sBAAsB,IAAI,sBAAsB,EACrD,KAAK,0BAA0B,IAAI,0BAA0B,EAC7D,KAAK,yBAAyB,IAAI,yBAAyB,EAC3D,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,QAAQ,IAAI,QAAQ,EACzB,KAAK,oBAAoB,IAAI,oBAAoB,EACjD,KAAK,oBAAoB,IAAI,oBAAoB,EACjD,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,kBAAkB,IAAI,kBAAkB,EAC7C,KAAK,2BAA2B,IAAI,2BAA2B,EAC/D,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,0BAA0B,IAAI,0BAA0B,EAC7D,KAAK,0BAA0B,IAAI,0BAA0B,EAC7D,KAAK,aAAa,IAAI,aAAa,EACnC,KAAK,gBAAgB,IAAI,gBAAgB,EACzC,KAAK,qBAAqB,IAAI,qBAAqB,EACnD,KAAK,SAAS,IAAI,SAAS,EAC3B,KAAK,mBAAmB,IAAI,mBAAmB,EAC/C,KAAK,+BAA+B,IAAI,+BAA+B,EACvE,KAAK,4BAA4B,IAAI,4BAA4B,EACjE,KAAK,wBAAwB,IAAI,wBAAwB,GAC1D,CAAC;IAEF,OAAO,EACL,OAAO,IAAI,OAAO,EAClB,KAAK,uBAAuB,IAAI,uBAAuB,EACvD,KAAK,gBAAgB,IAAI,gBAAgB,EACzC,KAAK,8BAA8B,IAAI,8BAA8B,EACrE,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,kCAAkC,IAAI,kCAAkC,EAC7E,KAAK,6BAA6B,IAAI,6BAA6B,EACnE,KAAK,sBAAsB,IAAI,sBAAsB,EACrD,KAAK,+BAA+B,IAAI,+BAA+B,EACvE,sBAAsB,IAAI,sBAAsB,EAChD,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,mBAAmB,IAAI,mBAAmB,EAC/C,KAAK,eAAe,IAAI,eAAe,EACvC,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,kBAAkB,IAAI,kBAAkB,GAC9C,CAAC;CACH"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/messages.js b/vendor/sdk/resources/beta/messages/messages.js new file mode 100644 index 0000000..4c2f943 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/messages.js @@ -0,0 +1,93 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Messages = void 0; +const resource_1 = require("../../../resource.js"); +const BatchesAPI = __importStar(require("./batches.js")); +const batches_1 = require("./batches.js"); +const BetaMessageStream_1 = require("../../../lib/BetaMessageStream.js"); +const DEPRECATED_MODELS = { + 'claude-1.3': 'November 6th, 2024', + 'claude-1.3-100k': 'November 6th, 2024', + 'claude-instant-1.1': 'November 6th, 2024', + 'claude-instant-1.1-100k': 'November 6th, 2024', + 'claude-instant-1.2': 'November 6th, 2024', + 'claude-3-sonnet-20240229': 'July 21st, 2025', + 'claude-2.1': 'July 21st, 2025', + 'claude-2.0': 'July 21st, 2025', +}; +class Messages extends resource_1.APIResource { + constructor() { + super(...arguments); + this.batches = new BatchesAPI.Batches(this._client); + } + create(params, options) { + const { betas, ...body } = params; + if (body.model in DEPRECATED_MODELS) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + return this._client.post('/v1/messages?beta=true', { + body, + timeout: this._client._options.timeout ?? 600000, + ...options, + headers: { + ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined), + ...options?.headers, + }, + stream: params.stream ?? false, + }); + } + /** + * Create a Message stream + */ + stream(body, options) { + return BetaMessageStream_1.BetaMessageStream.createMessage(this, body, options); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens(params, options) { + const { betas, ...body } = params; + return this._client.post('/v1/messages/count_tokens?beta=true', { + body, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'token-counting-2024-11-01'].toString(), + ...options?.headers, + }, + }); + } +} +exports.Messages = Messages; +Messages.Batches = batches_1.Batches; +Messages.BetaMessageBatchesPage = batches_1.BetaMessageBatchesPage; +//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/messages.js.map b/vendor/sdk/resources/beta/messages/messages.js.map new file mode 100644 index 0000000..20beac2 --- /dev/null +++ b/vendor/sdk/resources/beta/messages/messages.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/resources/beta/messages/messages.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtF,mDAAgD;AAMhD,yDAAwC;AACxC,0CAkBmB;AAEnB,yEAAmE;AAGnE,MAAM,iBAAiB,GAEnB;IACF,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B,EAAE,iBAAiB;IAC7C,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAa,QAAS,SAAQ,sBAAW;IAAzC;;QACE,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IA4ErE,CAAC;IAxDC,MAAM,CACJ,MAA2B,EAC3B,OAA6B;QAE7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAElC,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE;YACnC,OAAO,CAAC,IAAI,CACV,cAAc,IAAI,CAAC,KAAK,iDACtB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAC9B,gIAAgI,CACjI,CAAC;SACH;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACjD,IAAI;YACJ,OAAO,EAAG,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;YACzD,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpF,GAAG,OAAO,EAAE,OAAO;aACpB;YACD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;SAC/B,CAA4E,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAA6B,EAAE,OAA6B;QACjE,OAAO,qCAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CACT,MAAgC,EAChC,OAA6B;QAE7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE;YAC9D,IAAI;YACJ,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,gBAAgB,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC,QAAQ,EAAE;gBAC5E,GAAG,OAAO,EAAE,OAAO;aACpB;SACF,CAAC,CAAC;IACL,CAAC;CACF;AA7ED,4BA6EC;AAitCD,QAAQ,CAAC,OAAO,GAAG,iBAAO,CAAC;AAC3B,QAAQ,CAAC,sBAAsB,GAAG,gCAAsB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/messages.mjs b/vendor/sdk/resources/beta/messages/messages.mjs new file mode 100644 index 0000000..f16addb --- /dev/null +++ b/vendor/sdk/resources/beta/messages/messages.mjs @@ -0,0 +1,66 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../../../resource.mjs"; +import * as BatchesAPI from "./batches.mjs"; +import { Batches, BetaMessageBatchesPage, } from "./batches.mjs"; +import { BetaMessageStream } from "../../../lib/BetaMessageStream.mjs"; +const DEPRECATED_MODELS = { + 'claude-1.3': 'November 6th, 2024', + 'claude-1.3-100k': 'November 6th, 2024', + 'claude-instant-1.1': 'November 6th, 2024', + 'claude-instant-1.1-100k': 'November 6th, 2024', + 'claude-instant-1.2': 'November 6th, 2024', + 'claude-3-sonnet-20240229': 'July 21st, 2025', + 'claude-2.1': 'July 21st, 2025', + 'claude-2.0': 'July 21st, 2025', +}; +export class Messages extends APIResource { + constructor() { + super(...arguments); + this.batches = new BatchesAPI.Batches(this._client); + } + create(params, options) { + const { betas, ...body } = params; + if (body.model in DEPRECATED_MODELS) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + return this._client.post('/v1/messages?beta=true', { + body, + timeout: this._client._options.timeout ?? 600000, + ...options, + headers: { + ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined), + ...options?.headers, + }, + stream: params.stream ?? false, + }); + } + /** + * Create a Message stream + */ + stream(body, options) { + return BetaMessageStream.createMessage(this, body, options); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens(params, options) { + const { betas, ...body } = params; + return this._client.post('/v1/messages/count_tokens?beta=true', { + body, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'token-counting-2024-11-01'].toString(), + ...options?.headers, + }, + }); + } +} +Messages.Batches = Batches; +Messages.BetaMessageBatchesPage = BetaMessageBatchesPage; +//# sourceMappingURL=messages.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/messages/messages.mjs.map b/vendor/sdk/resources/beta/messages/messages.mjs.map new file mode 100644 index 0000000..1b28e9c --- /dev/null +++ b/vendor/sdk/resources/beta/messages/messages.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.mjs","sourceRoot":"","sources":["../../../src/resources/beta/messages/messages.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OAMf,KAAK,UAAU;OACf,EAOL,OAAO,EAUP,sBAAsB,GACvB;OAEM,EAAE,iBAAiB,EAAE;AAG5B,MAAM,iBAAiB,GAEnB;IACF,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B,EAAE,iBAAiB;IAC7C,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,WAAW;IAAzC;;QACE,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IA4ErE,CAAC;IAxDC,MAAM,CACJ,MAA2B,EAC3B,OAA6B;QAE7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAElC,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE;YACnC,OAAO,CAAC,IAAI,CACV,cAAc,IAAI,CAAC,KAAK,iDACtB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAC9B,gIAAgI,CACjI,CAAC;SACH;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACjD,IAAI;YACJ,OAAO,EAAG,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;YACzD,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpF,GAAG,OAAO,EAAE,OAAO;aACpB;YACD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;SAC/B,CAA4E,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAA6B,EAAE,OAA6B;QACjE,OAAO,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CACT,MAAgC,EAChC,OAA6B;QAE7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE;YAC9D,IAAI;YACJ,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,gBAAgB,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC,QAAQ,EAAE;gBAC5E,GAAG,OAAO,EAAE,OAAO;aACpB;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAitCD,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,QAAQ,CAAC,sBAAsB,GAAG,sBAAsB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/models.d.ts b/vendor/sdk/resources/beta/models.d.ts new file mode 100644 index 0000000..22a7e67 --- /dev/null +++ b/vendor/sdk/resources/beta/models.d.ts @@ -0,0 +1,49 @@ +import { APIResource } from "../../resource.js"; +import * as Core from "../../core.js"; +import { Page, type PageParams } from "../../pagination.js"; +export declare class Models extends APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + */ + list(query?: ModelListParams, options?: Core.RequestOptions): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; +} +export declare class BetaModelInfosPage extends Page { +} +export interface BetaModelInfo { + /** + * Unique model identifier. + */ + id: string; + /** + * RFC 3339 datetime string representing the time at which the model was released. + * May be set to an epoch value if the release date is unknown. + */ + created_at: string; + /** + * A human-readable name for the model. + */ + display_name: string; + /** + * Object type. + * + * For Models, this is always `"model"`. + */ + type: 'model'; +} +export interface ModelListParams extends PageParams { +} +export declare namespace Models { + export { type BetaModelInfo as BetaModelInfo, BetaModelInfosPage as BetaModelInfosPage, type ModelListParams as ModelListParams, }; +} +//# sourceMappingURL=models.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/models.d.ts.map b/vendor/sdk/resources/beta/models.d.ts.map new file mode 100644 index 0000000..6241c38 --- /dev/null +++ b/vendor/sdk/resources/beta/models.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/resources/beta/models.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEzD,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IAIxF;;;;;OAKG;IACH,IAAI,CACF,KAAK,CAAC,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAC5B,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,aAAa,CAAC;IACtD,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,aAAa,CAAC;CAUzF;AAED,qBAAa,kBAAmB,SAAQ,IAAI,CAAC,aAAa,CAAC;CAAG;AAE9D,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;CAAG;AAItD,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,aAAa,IAAI,aAAa,EACnC,kBAAkB,IAAI,kBAAkB,EACxC,KAAK,eAAe,IAAI,eAAe,GACxC,CAAC;CACH"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/models.js b/vendor/sdk/resources/beta/models.js new file mode 100644 index 0000000..ead2b5b --- /dev/null +++ b/vendor/sdk/resources/beta/models.js @@ -0,0 +1,30 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BetaModelInfosPage = exports.Models = void 0; +const resource_1 = require("../../resource.js"); +const core_1 = require("../../core.js"); +const pagination_1 = require("../../pagination.js"); +class Models extends resource_1.APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId, options) { + return this._client.get(`/v1/models/${modelId}?beta=true`, options); + } + list(query = {}, options) { + if ((0, core_1.isRequestOptions)(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/models?beta=true', BetaModelInfosPage, { query, ...options }); + } +} +exports.Models = Models; +class BetaModelInfosPage extends pagination_1.Page { +} +exports.BetaModelInfosPage = BetaModelInfosPage; +Models.BetaModelInfosPage = BetaModelInfosPage; +//# sourceMappingURL=models.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/models.js.map b/vendor/sdk/resources/beta/models.js.map new file mode 100644 index 0000000..30dfb39 --- /dev/null +++ b/vendor/sdk/resources/beta/models.js.map @@ -0,0 +1 @@ +{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/resources/beta/models.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,gDAA6C;AAC7C,wCAA8C;AAE9C,oDAAyD;AAEzD,MAAa,MAAO,SAAQ,sBAAW;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,OAAe,EAAE,OAA6B;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,YAAY,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAaD,IAAI,CACF,QAA+C,EAAE,EACjD,OAA6B;QAE7B,IAAI,IAAA,uBAAgB,EAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;CACF;AA/BD,wBA+BC;AAED,MAAa,kBAAmB,SAAQ,iBAAmB;CAAG;AAA9D,gDAA8D;AA6B9D,MAAM,CAAC,kBAAkB,GAAG,kBAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/beta/models.mjs b/vendor/sdk/resources/beta/models.mjs new file mode 100644 index 0000000..ea7f850 --- /dev/null +++ b/vendor/sdk/resources/beta/models.mjs @@ -0,0 +1,25 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../../resource.mjs"; +import { isRequestOptions } from "../../core.mjs"; +import { Page } from "../../pagination.mjs"; +export class Models extends APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId, options) { + return this._client.get(`/v1/models/${modelId}?beta=true`, options); + } + list(query = {}, options) { + if (isRequestOptions(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/models?beta=true', BetaModelInfosPage, { query, ...options }); + } +} +export class BetaModelInfosPage extends Page { +} +Models.BetaModelInfosPage = BetaModelInfosPage; +//# sourceMappingURL=models.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/beta/models.mjs.map b/vendor/sdk/resources/beta/models.mjs.map new file mode 100644 index 0000000..5d8d052 --- /dev/null +++ b/vendor/sdk/resources/beta/models.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"models.mjs","sourceRoot":"","sources":["../../src/resources/beta/models.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OACf,EAAE,gBAAgB,EAAE;OAEpB,EAAE,IAAI,EAAmB;AAEhC,MAAM,OAAO,MAAO,SAAQ,WAAW;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,OAAe,EAAE,OAA6B;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,YAAY,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAaD,IAAI,CACF,QAA+C,EAAE,EACjD,OAA6B;QAE7B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,IAAmB;CAAG;AA6B9D,MAAM,CAAC,kBAAkB,GAAG,kBAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/completions.d.ts b/vendor/sdk/resources/completions.d.ts new file mode 100644 index 0000000..bb0360c --- /dev/null +++ b/vendor/sdk/resources/completions.d.ts @@ -0,0 +1,166 @@ +import { APIResource } from "../resource.js"; +import { APIPromise } from "../core.js"; +import * as Core from "../core.js"; +import * as CompletionsAPI from "./completions.js"; +import * as MessagesAPI from "./messages/messages.js"; +import { Stream } from "../streaming.js"; +export declare class Completions extends APIResource { + /** + * [Legacy] Create a Text Completion. + * + * The Text Completions API is a legacy API. We recommend using the + * [Messages API](https://docs.anthropic.com/en/api/messages) going forward. + * + * Future models and features will not be compatible with Text Completions. See our + * [migration guide](https://docs.anthropic.com/en/api/migrating-from-text-completions-to-messages) + * for guidance in migrating from Text Completions to Messages. + */ + create(body: CompletionCreateParamsNonStreaming, options?: Core.RequestOptions): APIPromise; + create(body: CompletionCreateParamsStreaming, options?: Core.RequestOptions): APIPromise>; + create(body: CompletionCreateParamsBase, options?: Core.RequestOptions): APIPromise | Completion>; +} +export interface Completion { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + /** + * The resulting completion up to and excluding the stop sequences. + */ + completion: string; + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + /** + * The reason that we stopped. + * + * This may be one the following values: + * + * - `"stop_sequence"`: we reached a stop sequence — either provided by you via the + * `stop_sequences` parameter, or a stop sequence built into the model + * - `"max_tokens"`: we exceeded `max_tokens_to_sample` or the model's maximum + */ + stop_reason: string | null; + /** + * Object type. + * + * For Text Completions, this is always `"completion"`. + */ + type: 'completion'; +} +export type CompletionCreateParams = CompletionCreateParamsNonStreaming | CompletionCreateParamsStreaming; +export interface CompletionCreateParamsBase { + /** + * The maximum number of tokens to generate before stopping. + * + * Note that our models may stop _before_ reaching this maximum. This parameter + * only specifies the absolute maximum number of tokens to generate. + */ + max_tokens_to_sample: number; + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + /** + * The prompt that you want Claude to complete. + * + * For proper response generation you will need to format your prompt using + * alternating `\n\nHuman:` and `\n\nAssistant:` conversational turns. For example: + * + * ``` + * "\n\nHuman: {userQuestion}\n\nAssistant:" + * ``` + * + * See [prompt validation](https://docs.anthropic.com/en/api/prompt-validation) and + * our guide to + * [prompt design](https://docs.anthropic.com/en/docs/intro-to-prompting) for more + * details. + */ + prompt: string; + /** + * An object describing metadata about the request. + */ + metadata?: MessagesAPI.Metadata; + /** + * Sequences that will cause the model to stop generating. + * + * Our models stop on `"\n\nHuman:"`, and may include additional built-in stop + * sequences in the future. By providing the stop_sequences parameter, you may + * include additional strings that will cause the model to stop generating. + */ + stop_sequences?: Array; + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/streaming) for details. + */ + stream?: boolean; + /** + * Amount of randomness injected into the response. + * + * Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` + * for analytical / multiple choice, and closer to `1.0` for creative and + * generative tasks. + * + * Note that even with `temperature` of `0.0`, the results will not be fully + * deterministic. + */ + temperature?: number; + /** + * Only sample from the top K options for each subsequent token. + * + * Used to remove "long tail" low probability responses. + * [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_k?: number; + /** + * Use nucleus sampling. + * + * In nucleus sampling, we compute the cumulative distribution over all the options + * for each subsequent token in decreasing probability order and cut it off once it + * reaches a particular probability specified by `top_p`. You should either alter + * `temperature` or `top_p`, but not both. + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_p?: number; +} +export declare namespace CompletionCreateParams { + /** + * @deprecated use `Anthropic.Messages.Metadata` instead + */ + type Metadata = MessagesAPI.Metadata; + type CompletionCreateParamsNonStreaming = CompletionsAPI.CompletionCreateParamsNonStreaming; + type CompletionCreateParamsStreaming = CompletionsAPI.CompletionCreateParamsStreaming; +} +export interface CompletionCreateParamsNonStreaming extends CompletionCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/streaming) for details. + */ + stream?: false; +} +export interface CompletionCreateParamsStreaming extends CompletionCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/streaming) for details. + */ + stream: true; +} +export declare namespace Completions { + export { type Completion as Completion, type CompletionCreateParams as CompletionCreateParams, type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming, type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming, }; +} +//# sourceMappingURL=completions.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/completions.d.ts.map b/vendor/sdk/resources/completions.d.ts.map new file mode 100644 index 0000000..28d6971 --- /dev/null +++ b/vendor/sdk/resources/completions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"completions.d.ts","sourceRoot":"","sources":["../src/resources/completions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,cAAc,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,qBAAa,WAAY,SAAQ,WAAW;IAC1C;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,EAAE,kCAAkC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;IACvG,MAAM,CACJ,IAAI,EAAE,+BAA+B,EACrC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAC5B,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,CACJ,IAAI,EAAE,0BAA0B,EAChC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAC5B,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;CAY/C;AAED,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;IAEzB;;;;;;;;OAQG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;OAIG;IACH,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,MAAM,sBAAsB,GAAG,kCAAkC,GAAG,+BAA+B,CAAC;AAE1G,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;IAEzB;;;;;;;;;;;;;;OAcG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC;IAEhC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yBAAiB,sBAAsB,CAAC;IACtC;;OAEG;IACH,KAAY,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IAE5C,KAAY,kCAAkC,GAAG,cAAc,CAAC,kCAAkC,CAAC;IACnG,KAAY,+BAA+B,GAAG,cAAc,CAAC,+BAA+B,CAAC;CAC9F;AAED,MAAM,WAAW,kCAAmC,SAAQ,0BAA0B;IACpF;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,WAAW,+BAAgC,SAAQ,0BAA0B;IACjF;;;;OAIG;IACH,MAAM,EAAE,IAAI,CAAC;CACd;AAED,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC;IACnC,OAAO,EACL,KAAK,UAAU,IAAI,UAAU,EAC7B,KAAK,sBAAsB,IAAI,sBAAsB,EACrD,KAAK,kCAAkC,IAAI,kCAAkC,EAC7E,KAAK,+BAA+B,IAAI,+BAA+B,GACxE,CAAC;CACH"} \ No newline at end of file diff --git a/vendor/sdk/resources/completions.js b/vendor/sdk/resources/completions.js new file mode 100644 index 0000000..9125986 --- /dev/null +++ b/vendor/sdk/resources/completions.js @@ -0,0 +1,17 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Completions = void 0; +const resource_1 = require("../resource.js"); +class Completions extends resource_1.APIResource { + create(body, options) { + return this._client.post('/v1/complete', { + body, + timeout: this._client._options.timeout ?? 600000, + ...options, + stream: body.stream ?? false, + }); + } +} +exports.Completions = Completions; +//# sourceMappingURL=completions.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/completions.js.map b/vendor/sdk/resources/completions.js.map new file mode 100644 index 0000000..ee5d208 --- /dev/null +++ b/vendor/sdk/resources/completions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"completions.js","sourceRoot":"","sources":["../src/resources/completions.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,6CAA0C;AAO1C,MAAa,WAAY,SAAQ,sBAAW;IAoB1C,MAAM,CACJ,IAA4B,EAC5B,OAA6B;QAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,IAAI;YACJ,OAAO,EAAG,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;YACzD,GAAG,OAAO;YACV,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;SAC7B,CAA4D,CAAC;IAChE,CAAC;CACF;AA/BD,kCA+BC"} \ No newline at end of file diff --git a/vendor/sdk/resources/completions.mjs b/vendor/sdk/resources/completions.mjs new file mode 100644 index 0000000..8a93def --- /dev/null +++ b/vendor/sdk/resources/completions.mjs @@ -0,0 +1,13 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../resource.mjs"; +export class Completions extends APIResource { + create(body, options) { + return this._client.post('/v1/complete', { + body, + timeout: this._client._options.timeout ?? 600000, + ...options, + stream: body.stream ?? false, + }); + } +} +//# sourceMappingURL=completions.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/completions.mjs.map b/vendor/sdk/resources/completions.mjs.map new file mode 100644 index 0000000..80e3415 --- /dev/null +++ b/vendor/sdk/resources/completions.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"completions.mjs","sourceRoot":"","sources":["../src/resources/completions.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;AAOtB,MAAM,OAAO,WAAY,SAAQ,WAAW;IAoB1C,MAAM,CACJ,IAA4B,EAC5B,OAA6B;QAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,IAAI;YACJ,OAAO,EAAG,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;YACzD,GAAG,OAAO;YACV,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;SAC7B,CAA4D,CAAC;IAChE,CAAC;CACF"} \ No newline at end of file diff --git a/vendor/sdk/resources/index.d.ts b/vendor/sdk/resources/index.d.ts new file mode 100644 index 0000000..68043cf --- /dev/null +++ b/vendor/sdk/resources/index.d.ts @@ -0,0 +1,6 @@ +export * from "./shared.js"; +export { Beta, type AnthropicBeta, type BetaAPIError, type BetaAuthenticationError, type BetaBillingError, type BetaError, type BetaErrorResponse, type BetaGatewayTimeoutError, type BetaInvalidRequestError, type BetaNotFoundError, type BetaOverloadedError, type BetaPermissionError, type BetaRateLimitError, } from "./beta/beta.js"; +export { Completions, type Completion, type CompletionCreateParams, type CompletionCreateParamsNonStreaming, type CompletionCreateParamsStreaming, } from "./completions.js"; +export { Messages, type Base64PDFSource, type CacheControlEphemeral, type CitationCharLocation, type CitationCharLocationParam, type CitationContentBlockLocation, type CitationContentBlockLocationParam, type CitationPageLocation, type CitationPageLocationParam, type CitationsConfigParam, type CitationsDelta, type ContentBlock, type ContentBlockDeltaEvent, type ContentBlockParam, type ContentBlockSource, type ContentBlockSourceContent, type ContentBlockStartEvent, type ContentBlockStopEvent, type DocumentBlockParam, type ImageBlockParam, type InputJsonDelta, type InputJSONDelta, type Message, type MessageDeltaEvent, type MessageDeltaUsage, type MessageParam, type MessageStartEvent, type MessageStopEvent, type MessageStreamEvent, type MessageStreamParams, type MessageTokensCount, type Metadata, type Model, type PlainTextSource, type RawContentBlockDeltaEvent, type RawContentBlockStartEvent, type RawContentBlockStopEvent, type RawMessageDeltaEvent, type RawMessageStartEvent, type RawMessageStopEvent, type RawMessageStreamEvent, type RedactedThinkingBlock, type RedactedThinkingBlockParam, type SignatureDelta, type TextBlock, type TextBlockParam, type TextCitation, type TextCitationParam, type TextDelta, type ThinkingBlock, type ThinkingBlockParam, type ThinkingConfigDisabled, type ThinkingConfigEnabled, type ThinkingDelta, type Tool, type ToolChoice, type ToolChoiceAny, type ToolChoiceAuto, type ToolChoiceTool, type ToolResultBlockParam, type ToolUseBlock, type ToolUseBlockParam, type Usage, type MessageCreateParams, type MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming, type MessageCountTokensParams, } from "./messages/messages.js"; +export { ModelInfosPage, Models, type ModelInfo, type ModelListParams } from "./models.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/index.d.ts.map b/vendor/sdk/resources/index.d.ts.map new file mode 100644 index 0000000..56290f3 --- /dev/null +++ b/vendor/sdk/resources/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAEA,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,IAAI,EACJ,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,GACrC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/index.js b/vendor/sdk/resources/index.js new file mode 100644 index 0000000..045fcfa --- /dev/null +++ b/vendor/sdk/resources/index.js @@ -0,0 +1,29 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Models = exports.ModelInfosPage = exports.Messages = exports.Completions = exports.Beta = void 0; +__exportStar(require("./shared.js"), exports); +var beta_1 = require("./beta/beta.js"); +Object.defineProperty(exports, "Beta", { enumerable: true, get: function () { return beta_1.Beta; } }); +var completions_1 = require("./completions.js"); +Object.defineProperty(exports, "Completions", { enumerable: true, get: function () { return completions_1.Completions; } }); +var messages_1 = require("./messages/messages.js"); +Object.defineProperty(exports, "Messages", { enumerable: true, get: function () { return messages_1.Messages; } }); +var models_1 = require("./models.js"); +Object.defineProperty(exports, "ModelInfosPage", { enumerable: true, get: function () { return models_1.ModelInfosPage; } }); +Object.defineProperty(exports, "Models", { enumerable: true, get: function () { return models_1.Models; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/index.js.map b/vendor/sdk/resources/index.js.map new file mode 100644 index 0000000..d657817 --- /dev/null +++ b/vendor/sdk/resources/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;;;;;;;;;;;;;;AAEtF,8CAAyB;AACzB,uCAcqB;AAbnB,4FAAA,IAAI,OAAA;AAcN,gDAMuB;AALrB,0GAAA,WAAW,OAAA;AAMb,mDAoE6B;AAnE3B,oGAAA,QAAQ,OAAA;AAoEV,sCAAwF;AAA/E,wGAAA,cAAc,OAAA;AAAE,gGAAA,MAAM,OAAA"} \ No newline at end of file diff --git a/vendor/sdk/resources/index.mjs b/vendor/sdk/resources/index.mjs new file mode 100644 index 0000000..d8955b4 --- /dev/null +++ b/vendor/sdk/resources/index.mjs @@ -0,0 +1,7 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export * from "./shared.mjs"; +export { Beta, } from "./beta/beta.mjs"; +export { Completions, } from "./completions.mjs"; +export { Messages, } from "./messages/messages.mjs"; +export { ModelInfosPage, Models } from "./models.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/index.mjs.map b/vendor/sdk/resources/index.mjs.map new file mode 100644 index 0000000..40088ce --- /dev/null +++ b/vendor/sdk/resources/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;;OAG/E,EACL,IAAI,GAaL;OACM,EACL,WAAW,GAKZ;OACM,EACL,QAAQ,GAmET;OACM,EAAE,cAAc,EAAE,MAAM,EAAwC"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/batches.d.ts b/vendor/sdk/resources/messages/batches.d.ts new file mode 100644 index 0000000..82c5a0c --- /dev/null +++ b/vendor/sdk/resources/messages/batches.d.ts @@ -0,0 +1,253 @@ +import { APIResource } from "../../resource.js"; +import * as Core from "../../core.js"; +import * as Shared from "../shared.js"; +import * as MessagesAPI from "./messages.js"; +import { Page, type PageParams } from "../../pagination.js"; +import { JSONLDecoder } from "../../internal/decoders/jsonl.js"; +export declare class Batches extends APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(body: BatchCreateParams, options?: Core.RequestOptions): Core.APIPromise; + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + retrieve(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + list(query?: BatchListParams, options?: Core.RequestOptions): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + delete(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + cancel(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + results(messageBatchId: string, options?: Core.RequestOptions): Promise>; +} +export declare class MessageBatchesPage extends Page { +} +export interface DeletedMessageBatch { + /** + * ID of the Message Batch. + */ + id: string; + /** + * Deleted object type. + * + * For Message Batches, this is always `"message_batch_deleted"`. + */ + type: 'message_batch_deleted'; +} +export interface MessageBatch { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * archived and its results became unavailable. + */ + archived_at: string | null; + /** + * RFC 3339 datetime string representing the time at which cancellation was + * initiated for the Message Batch. Specified only if cancellation was initiated. + */ + cancel_initiated_at: string | null; + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * created. + */ + created_at: string; + /** + * RFC 3339 datetime string representing the time at which processing for the + * Message Batch ended. Specified only once processing ends. + * + * Processing ends when every request in a Message Batch has either succeeded, + * errored, canceled, or expired. + */ + ended_at: string | null; + /** + * RFC 3339 datetime string representing the time at which the Message Batch will + * expire and end processing, which is 24 hours after creation. + */ + expires_at: string; + /** + * Processing status of the Message Batch. + */ + processing_status: 'in_progress' | 'canceling' | 'ended'; + /** + * Tallies requests within the Message Batch, categorized by their status. + * + * Requests start as `processing` and move to one of the other statuses only once + * processing of the entire batch ends. The sum of all values always matches the + * total number of requests in the batch. + */ + request_counts: MessageBatchRequestCounts; + /** + * URL to a `.jsonl` file containing the results of the Message Batch requests. + * Specified only once processing ends. + * + * Results in the file are not guaranteed to be in the same order as requests. Use + * the `custom_id` field to match results to requests. + */ + results_url: string | null; + /** + * Object type. + * + * For Message Batches, this is always `"message_batch"`. + */ + type: 'message_batch'; +} +export interface MessageBatchCanceledResult { + type: 'canceled'; +} +export interface MessageBatchErroredResult { + error: Shared.ErrorResponse; + type: 'errored'; +} +export interface MessageBatchExpiredResult { + type: 'expired'; +} +/** + * This is a single line in the response `.jsonl` file and does not represent the + * response as a whole. + */ +export interface MessageBatchIndividualResponse { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + /** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ + result: MessageBatchResult; +} +export interface MessageBatchRequestCounts { + /** + * Number of requests in the Message Batch that have been canceled. + * + * This is zero until processing of the entire Message Batch has ended. + */ + canceled: number; + /** + * Number of requests in the Message Batch that encountered an error. + * + * This is zero until processing of the entire Message Batch has ended. + */ + errored: number; + /** + * Number of requests in the Message Batch that have expired. + * + * This is zero until processing of the entire Message Batch has ended. + */ + expired: number; + /** + * Number of requests in the Message Batch that are processing. + */ + processing: number; + /** + * Number of requests in the Message Batch that have completed successfully. + * + * This is zero until processing of the entire Message Batch has ended. + */ + succeeded: number; +} +/** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ +export type MessageBatchResult = MessageBatchSucceededResult | MessageBatchErroredResult | MessageBatchCanceledResult | MessageBatchExpiredResult; +export interface MessageBatchSucceededResult { + message: MessagesAPI.Message; + type: 'succeeded'; +} +export interface BatchCreateParams { + /** + * List of requests for prompt completion. Each is an individual request to create + * a Message. + */ + requests: Array; +} +export declare namespace BatchCreateParams { + interface Request { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + /** + * Messages API creation parameters for the individual request. + * + * See the [Messages API reference](/en/api/messages) for full documentation on + * available parameters. + */ + params: MessagesAPI.MessageCreateParamsNonStreaming; + } +} +export interface BatchListParams extends PageParams { +} +export declare namespace Batches { + export { type DeletedMessageBatch as DeletedMessageBatch, type MessageBatch as MessageBatch, type MessageBatchCanceledResult as MessageBatchCanceledResult, type MessageBatchErroredResult as MessageBatchErroredResult, type MessageBatchExpiredResult as MessageBatchExpiredResult, type MessageBatchIndividualResponse as MessageBatchIndividualResponse, type MessageBatchRequestCounts as MessageBatchRequestCounts, type MessageBatchResult as MessageBatchResult, type MessageBatchSucceededResult as MessageBatchSucceededResult, MessageBatchesPage as MessageBatchesPage, type BatchCreateParams as BatchCreateParams, type BatchListParams as BatchListParams, }; +} +//# sourceMappingURL=batches.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/batches.d.ts.map b/vendor/sdk/resources/messages/batches.d.ts.map new file mode 100644 index 0000000..7f15295 --- /dev/null +++ b/vendor/sdk/resources/messages/batches.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.d.ts","sourceRoot":"","sources":["../../src/resources/messages/batches.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/batches.js b/vendor/sdk/resources/messages/batches.js new file mode 100644 index 0000000..8353d4d --- /dev/null +++ b/vendor/sdk/resources/messages/batches.js @@ -0,0 +1,102 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MessageBatchesPage = exports.Batches = void 0; +const resource_1 = require("../../resource.js"); +const core_1 = require("../../core.js"); +const pagination_1 = require("../../pagination.js"); +const jsonl_1 = require("../../internal/decoders/jsonl.js"); +const error_1 = require("../../error.js"); +class Batches extends resource_1.APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(body, options) { + return this._client.post('/v1/messages/batches', { body, ...options }); + } + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + retrieve(messageBatchId, options) { + return this._client.get(`/v1/messages/batches/${messageBatchId}`, options); + } + list(query = {}, options) { + if ((0, core_1.isRequestOptions)(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/messages/batches', MessageBatchesPage, { query, ...options }); + } + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + delete(messageBatchId, options) { + return this._client.delete(`/v1/messages/batches/${messageBatchId}`, options); + } + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + cancel(messageBatchId, options) { + return this._client.post(`/v1/messages/batches/${messageBatchId}/cancel`, options); + } + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + async results(messageBatchId, options) { + const batch = await this.retrieve(messageBatchId); + if (!batch.results_url) { + throw new error_1.AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + return this._client + .get(batch.results_url, { + ...options, + headers: { + Accept: 'application/binary', + ...options?.headers, + }, + __binaryResponse: true, + }) + ._thenUnwrap((_, props) => jsonl_1.JSONLDecoder.fromResponse(props.response, props.controller)); + } +} +exports.Batches = Batches; +class MessageBatchesPage extends pagination_1.Page { +} +exports.MessageBatchesPage = MessageBatchesPage; +Batches.MessageBatchesPage = MessageBatchesPage; +//# sourceMappingURL=batches.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/batches.js.map b/vendor/sdk/resources/messages/batches.js.map new file mode 100644 index 0000000..cbc5737 --- /dev/null +++ b/vendor/sdk/resources/messages/batches.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.js","sourceRoot":"","sources":["../../src/resources/messages/batches.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,gDAA6C;AAC7C,wCAA8C;AAI9C,oDAAyD;AACzD,4DAA6D;AAC7D,0CAA6C;AAE7C,MAAa,OAAQ,SAAQ,sBAAW;IACtC;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAuB,EAAE,OAA6B;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAsB,EAAE,OAA6B;QAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAcD,IAAI,CACF,QAA+C,EAAE,EACjD,OAA6B;QAE7B,IAAI,IAAA,uBAAgB,EAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAsB,EAAE,OAA6B;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,wBAAwB,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,cAAsB,EAAE,OAA6B;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,cAAc,SAAS,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CACX,cAAsB,EACtB,OAA6B;QAE7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACtB,MAAM,IAAI,sBAAc,CACtB,yDAAyD,KAAK,CAAC,iBAAiB,MAAM,KAAK,CAAC,EAAE,EAAE,CACjG,CAAC;SACH;QAED,OAAO,IAAI,CAAC,OAAO;aAChB,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;YACtB,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,MAAM,EAAE,oBAAoB;gBAC5B,GAAG,OAAO,EAAE,OAAO;aACpB;YACD,gBAAgB,EAAE,IAAI;SACvB,CAAC;aACD,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAY,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5F,CAAC;CACF;AAhHD,0BAgHC;AAED,MAAa,kBAAmB,SAAQ,iBAAkB;CAAG;AAA7D,gDAA6D;AAiN7D,OAAO,CAAC,kBAAkB,GAAG,kBAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/batches.mjs b/vendor/sdk/resources/messages/batches.mjs new file mode 100644 index 0000000..0dc6f40 --- /dev/null +++ b/vendor/sdk/resources/messages/batches.mjs @@ -0,0 +1,97 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../../resource.mjs"; +import { isRequestOptions } from "../../core.mjs"; +import { Page } from "../../pagination.mjs"; +import { JSONLDecoder } from "../../internal/decoders/jsonl.mjs"; +import { AnthropicError } from "../../error.mjs"; +export class Batches extends APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(body, options) { + return this._client.post('/v1/messages/batches', { body, ...options }); + } + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + retrieve(messageBatchId, options) { + return this._client.get(`/v1/messages/batches/${messageBatchId}`, options); + } + list(query = {}, options) { + if (isRequestOptions(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/messages/batches', MessageBatchesPage, { query, ...options }); + } + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + delete(messageBatchId, options) { + return this._client.delete(`/v1/messages/batches/${messageBatchId}`, options); + } + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + cancel(messageBatchId, options) { + return this._client.post(`/v1/messages/batches/${messageBatchId}/cancel`, options); + } + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + async results(messageBatchId, options) { + const batch = await this.retrieve(messageBatchId); + if (!batch.results_url) { + throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + return this._client + .get(batch.results_url, { + ...options, + headers: { + Accept: 'application/binary', + ...options?.headers, + }, + __binaryResponse: true, + }) + ._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } +} +export class MessageBatchesPage extends Page { +} +Batches.MessageBatchesPage = MessageBatchesPage; +//# sourceMappingURL=batches.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/batches.mjs.map b/vendor/sdk/resources/messages/batches.mjs.map new file mode 100644 index 0000000..75a52cf --- /dev/null +++ b/vendor/sdk/resources/messages/batches.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.mjs","sourceRoot":"","sources":["../../src/resources/messages/batches.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OACf,EAAE,gBAAgB,EAAE;OAIpB,EAAE,IAAI,EAAmB;OACzB,EAAE,YAAY,EAAE;OAChB,EAAE,cAAc,EAAE;AAEzB,MAAM,OAAO,OAAQ,SAAQ,WAAW;IACtC;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAuB,EAAE,OAA6B;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAsB,EAAE,OAA6B;QAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAcD,IAAI,CACF,QAA+C,EAAE,EACjD,OAA6B;QAE7B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAsB,EAAE,OAA6B;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,wBAAwB,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,cAAsB,EAAE,OAA6B;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,cAAc,SAAS,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CACX,cAAsB,EACtB,OAA6B;QAE7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACtB,MAAM,IAAI,cAAc,CACtB,yDAAyD,KAAK,CAAC,iBAAiB,MAAM,KAAK,CAAC,EAAE,EAAE,CACjG,CAAC;SACH;QAED,OAAO,IAAI,CAAC,OAAO;aAChB,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;YACtB,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,MAAM,EAAE,oBAAoB;gBAC5B,GAAG,OAAO,EAAE,OAAO;aACpB;YACD,gBAAgB,EAAE,IAAI;SACvB,CAAC;aACD,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5F,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,IAAkB;CAAG;AAiN7D,OAAO,CAAC,kBAAkB,GAAG,kBAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/index.d.ts b/vendor/sdk/resources/messages/index.d.ts new file mode 100644 index 0000000..4d5bc79 --- /dev/null +++ b/vendor/sdk/resources/messages/index.d.ts @@ -0,0 +1,3 @@ +export { MessageBatchesPage, Batches, type DeletedMessageBatch, type MessageBatch, type MessageBatchCanceledResult, type MessageBatchErroredResult, type MessageBatchExpiredResult, type MessageBatchIndividualResponse, type MessageBatchRequestCounts, type MessageBatchResult, type MessageBatchSucceededResult, type BatchCreateParams, type BatchListParams, } from "./batches.js"; +export { Messages, type Base64PDFSource, type CacheControlEphemeral, type CitationCharLocation, type CitationCharLocationParam, type CitationContentBlockLocation, type CitationContentBlockLocationParam, type CitationPageLocation, type CitationPageLocationParam, type CitationsConfigParam, type CitationsDelta, type ContentBlock, type ContentBlockDeltaEvent, type ContentBlockParam, type ContentBlockSource, type ContentBlockSourceContent, type ContentBlockStartEvent, type ContentBlockStopEvent, type DocumentBlockParam, type ImageBlockParam, type InputJSONDelta, type Message, type MessageDeltaEvent, type MessageDeltaUsage, type MessageParam, type MessageStartEvent, type MessageStopEvent, type MessageStreamEvent, type MessageTokensCount, type Metadata, type Model, type PlainTextSource, type RawContentBlockDeltaEvent, type RawContentBlockStartEvent, type RawContentBlockStopEvent, type RawMessageDeltaEvent, type RawMessageStartEvent, type RawMessageStopEvent, type RawMessageStreamEvent, type RedactedThinkingBlock, type RedactedThinkingBlockParam, type SignatureDelta, type TextBlock, type TextBlockParam, type TextCitation, type TextCitationParam, type TextDelta, type ThinkingBlock, type ThinkingBlockParam, type ThinkingConfigDisabled, type ThinkingConfigEnabled, type ThinkingDelta, type Tool, type ToolChoice, type ToolChoiceAny, type ToolChoiceAuto, type ToolChoiceTool, type ToolResultBlockParam, type ToolUseBlock, type ToolUseBlockParam, type Usage, type MessageCreateParams, type MessageCreateParamsBase, type MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming, type MessageCountTokensParams, } from "./messages.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/index.d.ts.map b/vendor/sdk/resources/messages/index.d.ts.map new file mode 100644 index 0000000..cb55f21 --- /dev/null +++ b/vendor/sdk/resources/messages/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/messages/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,OAAO,EACP,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,GAC9B,MAAM,YAAY,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/index.js b/vendor/sdk/resources/messages/index.js new file mode 100644 index 0000000..c9d5e47 --- /dev/null +++ b/vendor/sdk/resources/messages/index.js @@ -0,0 +1,10 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Messages = exports.Batches = exports.MessageBatchesPage = void 0; +var batches_1 = require("./batches.js"); +Object.defineProperty(exports, "MessageBatchesPage", { enumerable: true, get: function () { return batches_1.MessageBatchesPage; } }); +Object.defineProperty(exports, "Batches", { enumerable: true, get: function () { return batches_1.Batches; } }); +var messages_1 = require("./messages.js"); +Object.defineProperty(exports, "Messages", { enumerable: true, get: function () { return messages_1.Messages; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/index.js.map b/vendor/sdk/resources/messages/index.js.map new file mode 100644 index 0000000..df32395 --- /dev/null +++ b/vendor/sdk/resources/messages/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/messages/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,wCAcmB;AAbjB,6GAAA,kBAAkB,OAAA;AAClB,kGAAA,OAAO,OAAA;AAaT,0CAmEoB;AAlElB,oGAAA,QAAQ,OAAA"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/index.mjs b/vendor/sdk/resources/messages/index.mjs new file mode 100644 index 0000000..d136642 --- /dev/null +++ b/vendor/sdk/resources/messages/index.mjs @@ -0,0 +1,4 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export { MessageBatchesPage, Batches, } from "./batches.mjs"; +export { Messages, } from "./messages.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/index.mjs.map b/vendor/sdk/resources/messages/index.mjs.map new file mode 100644 index 0000000..f309189 --- /dev/null +++ b/vendor/sdk/resources/messages/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/resources/messages/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EACL,kBAAkB,EAClB,OAAO,GAYR;OACM,EACL,QAAQ,GAkET"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/messages.d.ts b/vendor/sdk/resources/messages/messages.d.ts new file mode 100644 index 0000000..601070c --- /dev/null +++ b/vendor/sdk/resources/messages/messages.d.ts @@ -0,0 +1,1028 @@ +import { APIResource } from "../../resource.js"; +import { APIPromise } from "../../core.js"; +import * as Core from "../../core.js"; +import * as MessagesAPI from "./messages.js"; +import * as BatchesAPI from "./batches.js"; +import { BatchCreateParams, BatchListParams, Batches, DeletedMessageBatch, MessageBatch, MessageBatchCanceledResult, MessageBatchErroredResult, MessageBatchExpiredResult, MessageBatchIndividualResponse, MessageBatchRequestCounts, MessageBatchResult, MessageBatchSucceededResult, MessageBatchesPage } from "./batches.js"; +import { Stream } from "../../streaming.js"; +import { MessageStream } from "../../lib/MessageStream.js"; +export { MessageStream } from "../../lib/MessageStream.js"; +export declare class Messages extends APIResource { + batches: BatchesAPI.Batches; + /** + * Send a structured list of input messages with text and/or image content, and the + * model will generate the next message in the conversation. + * + * The Messages API can be used for either single queries or stateless multi-turn + * conversations. + * + * Learn more about the Messages API in our [user guide](/en/docs/initial-setup) + */ + create(body: MessageCreateParamsNonStreaming, options?: Core.RequestOptions): APIPromise; + create(body: MessageCreateParamsStreaming, options?: Core.RequestOptions): APIPromise>; + create(body: MessageCreateParamsBase, options?: Core.RequestOptions): APIPromise | Message>; + /** + * Create a Message stream + */ + stream(body: MessageStreamParams, options?: Core.RequestOptions): MessageStream; + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens(body: MessageCountTokensParams, options?: Core.RequestOptions): Core.APIPromise; +} +export interface Base64PDFSource { + data: string; + media_type: 'application/pdf'; + type: 'base64'; +} +export interface CacheControlEphemeral { + type: 'ephemeral'; +} +export interface CitationCharLocation { + cited_text: string; + document_index: number; + document_title: string | null; + end_char_index: number; + start_char_index: number; + type: 'char_location'; +} +export interface CitationCharLocationParam { + cited_text: string; + document_index: number; + document_title: string | null; + end_char_index: number; + start_char_index: number; + type: 'char_location'; +} +export interface CitationContentBlockLocation { + cited_text: string; + document_index: number; + document_title: string | null; + end_block_index: number; + start_block_index: number; + type: 'content_block_location'; +} +export interface CitationContentBlockLocationParam { + cited_text: string; + document_index: number; + document_title: string | null; + end_block_index: number; + start_block_index: number; + type: 'content_block_location'; +} +export interface CitationPageLocation { + cited_text: string; + document_index: number; + document_title: string | null; + end_page_number: number; + start_page_number: number; + type: 'page_location'; +} +export interface CitationPageLocationParam { + cited_text: string; + document_index: number; + document_title: string | null; + end_page_number: number; + start_page_number: number; + type: 'page_location'; +} +export interface CitationsConfigParam { + enabled?: boolean; +} +export interface CitationsDelta { + citation: CitationCharLocation | CitationPageLocation | CitationContentBlockLocation; + type: 'citations_delta'; +} +export type ContentBlock = TextBlock | ToolUseBlock | ThinkingBlock | RedactedThinkingBlock; +export type ContentBlockDeltaEvent = RawContentBlockDeltaEvent; +export type ContentBlockParam = TextBlockParam | ImageBlockParam | ToolUseBlockParam | ToolResultBlockParam | DocumentBlockParam | ThinkingBlockParam | RedactedThinkingBlockParam; +export interface ContentBlockSource { + content: string | Array; + type: 'content'; +} +export type ContentBlockSourceContent = TextBlockParam | ImageBlockParam; +export type ContentBlockStartEvent = RawContentBlockStartEvent; +export type ContentBlockStopEvent = RawContentBlockStopEvent; +export interface DocumentBlockParam { + source: Base64PDFSource | PlainTextSource | ContentBlockSource; + type: 'document'; + cache_control?: CacheControlEphemeral | null; + citations?: CitationsConfigParam; + context?: string | null; + title?: string | null; +} +export interface ImageBlockParam { + source: ImageBlockParam.Source; + type: 'image'; + cache_control?: CacheControlEphemeral | null; +} +export declare namespace ImageBlockParam { + interface Source { + data: string; + media_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp'; + type: 'base64'; + } +} +export type InputJsonDelta = InputJSONDelta; +export interface InputJSONDelta { + partial_json: string; + type: 'input_json_delta'; +} +export interface Message { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + /** + * Content generated by the model. + * + * This is an array of content blocks, each of which has a `type` that determines + * its shape. + * + * Example: + * + * ```json + * [{ "type": "text", "text": "Hi, I'm Claude." }] + * ``` + * + * If the request input `messages` ended with an `assistant` turn, then the + * response `content` will continue directly from that last turn. You can use this + * to constrain the model's output. + * + * For example, if the input `messages` were: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Then the response `content` might be: + * + * ```json + * [{ "type": "text", "text": "B)" }] + * ``` + */ + content: Array; + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: Model; + /** + * Conversational role of the generated message. + * + * This will always be `"assistant"`. + */ + role: 'assistant'; + /** + * The reason that we stopped. + * + * This may be one the following values: + * + * - `"end_turn"`: the model reached a natural stopping point + * - `"max_tokens"`: we exceeded the requested `max_tokens` or the model's maximum + * - `"stop_sequence"`: one of your provided custom `stop_sequences` was generated + * - `"tool_use"`: the model invoked one or more tools + * + * In non-streaming mode this value is always non-null. In streaming mode, it is + * null in the `message_start` event and non-null otherwise. + */ + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + /** + * Which custom stop sequence was generated, if any. + * + * This value will be a non-null string if one of your custom stop sequences was + * generated. + */ + stop_sequence: string | null; + /** + * Object type. + * + * For Messages, this is always `"message"`. + */ + type: 'message'; + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: Usage; +} +export type MessageDeltaEvent = RawMessageDeltaEvent; +export interface MessageDeltaUsage { + /** + * The cumulative number of output tokens which were used. + */ + output_tokens: number; +} +export interface MessageParam { + content: string | Array; + role: 'user' | 'assistant'; +} +export type MessageStartEvent = RawMessageStartEvent; +export type MessageStopEvent = RawMessageStopEvent; +export type MessageStreamEvent = RawMessageStreamEvent; +export interface MessageTokensCount { + /** + * The total number of tokens across the provided list of messages, system prompt, + * and tools. + */ + input_tokens: number; +} +export interface Metadata { + /** + * An external identifier for the user who is associated with the request. + * + * This should be a uuid, hash value, or other opaque identifier. Anthropic may use + * this id to help detect abuse. Do not include any identifying information such as + * name, email address, or phone number. + */ + user_id?: string | null; +} +/** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ +export type Model = 'claude-3-5-haiku-latest' | 'claude-3-5-haiku-20241022' | 'claude-3-5-sonnet-latest' | 'claude-3-5-sonnet-20241022' | 'claude-3-5-sonnet-20240620' | 'claude-3-opus-latest' | 'claude-3-opus-20240229' | 'claude-3-sonnet-20240229' | 'claude-3-haiku-20240307' | 'claude-2.1' | 'claude-2.0' | (string & {}); +export interface PlainTextSource { + data: string; + media_type: 'text/plain'; + type: 'text'; +} +export interface RawContentBlockDeltaEvent { + delta: TextDelta | InputJSONDelta | CitationsDelta | ThinkingDelta | SignatureDelta; + index: number; + type: 'content_block_delta'; +} +export interface RawContentBlockStartEvent { + content_block: TextBlock | ToolUseBlock | ThinkingBlock | RedactedThinkingBlock; + index: number; + type: 'content_block_start'; +} +export interface RawContentBlockStopEvent { + index: number; + type: 'content_block_stop'; +} +export interface RawMessageDeltaEvent { + delta: RawMessageDeltaEvent.Delta; + type: 'message_delta'; + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: MessageDeltaUsage; +} +export declare namespace RawMessageDeltaEvent { + interface Delta { + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + stop_sequence: string | null; + } +} +export interface RawMessageStartEvent { + message: Message; + type: 'message_start'; +} +export interface RawMessageStopEvent { + type: 'message_stop'; +} +export type RawMessageStreamEvent = RawMessageStartEvent | RawMessageDeltaEvent | RawMessageStopEvent | RawContentBlockStartEvent | RawContentBlockDeltaEvent | RawContentBlockStopEvent; +export interface RedactedThinkingBlock { + data: string; + type: 'redacted_thinking'; +} +export interface RedactedThinkingBlockParam { + data: string; + type: 'redacted_thinking'; +} +export interface SignatureDelta { + signature: string; + type: 'signature_delta'; +} +export interface TextBlock { + /** + * Citations supporting the text block. + * + * The type of citation returned will depend on the type of document being cited. + * Citing a PDF results in `page_location`, plain text results in `char_location`, + * and content document results in `content_block_location`. + */ + citations: Array | null; + text: string; + type: 'text'; +} +export interface TextBlockParam { + text: string; + type: 'text'; + cache_control?: CacheControlEphemeral | null; + citations?: Array | null; +} +export type TextCitation = CitationCharLocation | CitationPageLocation | CitationContentBlockLocation; +export type TextCitationParam = CitationCharLocationParam | CitationPageLocationParam | CitationContentBlockLocationParam; +export interface TextDelta { + text: string; + type: 'text_delta'; +} +export interface ThinkingBlock { + signature: string; + thinking: string; + type: 'thinking'; +} +export interface ThinkingBlockParam { + signature: string; + thinking: string; + type: 'thinking'; +} +export interface ThinkingConfigDisabled { + type: 'disabled'; +} +export interface ThinkingConfigEnabled { + budget_tokens: number; + type: 'enabled'; +} +export interface ThinkingDelta { + thinking: string; + type: 'thinking_delta'; +} +export interface Tool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + input_schema: Tool.InputSchema; + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: string; + cache_control?: CacheControlEphemeral | null; + /** + * Description of what this tool does. + * + * Tool descriptions should be as detailed as possible. The more information that + * the model has about what the tool is and how to use it, the better it will + * perform. You can use natural language descriptions to reinforce important + * aspects of the tool input JSON schema. + */ + description?: string; +} +export declare namespace Tool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + interface InputSchema { + type: 'object'; + properties?: unknown | null; + [k: string]: unknown; + } +} +/** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ +export type ToolChoice = ToolChoiceAuto | ToolChoiceAny | ToolChoiceTool; +/** + * The model will use any available tools. + */ +export interface ToolChoiceAny { + type: 'any'; + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} +/** + * The model will automatically decide whether to use tools. + */ +export interface ToolChoiceAuto { + type: 'auto'; + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output at most one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} +/** + * The model will use the specified tool with `tool_choice.name`. + */ +export interface ToolChoiceTool { + /** + * The name of the tool to use. + */ + name: string; + type: 'tool'; + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} +export interface ToolResultBlockParam { + tool_use_id: string; + type: 'tool_result'; + cache_control?: CacheControlEphemeral | null; + content?: string | Array; + is_error?: boolean; +} +export interface ToolUseBlock { + id: string; + input: unknown; + name: string; + type: 'tool_use'; +} +export interface ToolUseBlockParam { + id: string; + input: unknown; + name: string; + type: 'tool_use'; + cache_control?: CacheControlEphemeral | null; +} +export interface Usage { + /** + * The number of input tokens used to create the cache entry. + */ + cache_creation_input_tokens: number | null; + /** + * The number of input tokens read from the cache. + */ + cache_read_input_tokens: number | null; + /** + * The number of input tokens which were used. + */ + input_tokens: number; + /** + * The number of output tokens which were used. + */ + output_tokens: number; +} +export type MessageCreateParams = MessageCreateParamsNonStreaming | MessageCreateParamsStreaming; +export interface MessageCreateParamsBase { + /** + * The maximum number of tokens to generate before stopping. + * + * Note that our models may stop _before_ reaching this maximum. This parameter + * only specifies the absolute maximum number of tokens to generate. + * + * Different models have different maximum values for this parameter. See + * [models](https://docs.anthropic.com/en/docs/models-overview) for details. + */ + max_tokens: number; + /** + * Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: Model; + /** + * An object describing metadata about the request. + */ + metadata?: Metadata; + /** + * Custom text sequences that will cause the model to stop generating. + * + * Our models will normally stop when they have naturally completed their turn, + * which will result in a response `stop_reason` of `"end_turn"`. + * + * If you want the model to stop generating when it encounters custom strings of + * text, you can use the `stop_sequences` parameter. If the model encounters one of + * the custom sequences, the response `stop_reason` value will be `"stop_sequence"` + * and the response `stop_sequence` value will contain the matched stop sequence. + */ + stop_sequences?: Array; + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: boolean; + /** + * System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + /** + * Amount of randomness injected into the response. + * + * Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` + * for analytical / multiple choice, and closer to `1.0` for creative and + * generative tasks. + * + * Note that even with `temperature` of `0.0`, the results will not be fully + * deterministic. + */ + temperature?: number; + thinking?: ThinkingConfigEnabled | ThinkingConfigDisabled; + /** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ + tool_choice?: ToolChoice; + /** + * Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array; + /** + * Only sample from the top K options for each subsequent token. + * + * Used to remove "long tail" low probability responses. + * [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_k?: number; + /** + * Use nucleus sampling. + * + * In nucleus sampling, we compute the cumulative distribution over all the options + * for each subsequent token in decreasing probability order and cut it off once it + * reaches a particular probability specified by `top_p`. You should either alter + * `temperature` or `top_p`, but not both. + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_p?: number; +} +export declare namespace MessageCreateParams { + /** + * @deprecated use `Anthropic.Messages.ToolChoiceAuto` instead + */ + type Metadata = MessagesAPI.Metadata; + /** + * @deprecated use `Anthropic.Messages.ToolChoiceAuto` instead + */ + type ToolChoiceAuto = MessagesAPI.ToolChoiceAuto; + /** + * @deprecated use `Anthropic.Messages.ToolChoiceAny` instead + */ + type ToolChoiceAny = MessagesAPI.ToolChoiceAny; + /** + * @deprecated use `Anthropic.Messages.ToolChoiceTool` instead + */ + type ToolChoiceTool = MessagesAPI.ToolChoiceTool; + interface BashTool20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + type: 'bash_20250124'; + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } + interface TextEditor20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + type: 'text_editor_20250124'; + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } + type MessageCreateParamsNonStreaming = MessagesAPI.MessageCreateParamsNonStreaming; + type MessageCreateParamsStreaming = MessagesAPI.MessageCreateParamsStreaming; +} +export interface MessageCreateParamsNonStreaming extends MessageCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: false; +} +export interface MessageCreateParamsStreaming extends MessageCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream: true; +} +export type MessageStreamParams = MessageCreateParamsBase; +export interface MessageCountTokensParams { + /** + * Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: Model; + /** + * System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + thinking?: ThinkingConfigEnabled | ThinkingConfigDisabled; + /** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ + tool_choice?: ToolChoice; + /** + * Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array; +} +export declare namespace MessageCountTokensParams { + interface BashTool20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + type: 'bash_20250124'; + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } + interface TextEditor20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + type: 'text_editor_20250124'; + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } +} +export declare namespace Messages { + export { type Base64PDFSource as Base64PDFSource, type CacheControlEphemeral as CacheControlEphemeral, type CitationCharLocation as CitationCharLocation, type CitationCharLocationParam as CitationCharLocationParam, type CitationContentBlockLocation as CitationContentBlockLocation, type CitationContentBlockLocationParam as CitationContentBlockLocationParam, type CitationPageLocation as CitationPageLocation, type CitationPageLocationParam as CitationPageLocationParam, type CitationsConfigParam as CitationsConfigParam, type CitationsDelta as CitationsDelta, type ContentBlock as ContentBlock, type ContentBlockDeltaEvent as ContentBlockDeltaEvent, type ContentBlockParam as ContentBlockParam, type ContentBlockSource as ContentBlockSource, type ContentBlockSourceContent as ContentBlockSourceContent, type ContentBlockStartEvent as ContentBlockStartEvent, type ContentBlockStopEvent as ContentBlockStopEvent, type DocumentBlockParam as DocumentBlockParam, type ImageBlockParam as ImageBlockParam, type InputJsonDelta as InputJsonDelta, type InputJSONDelta as InputJSONDelta, type Message as Message, type MessageDeltaEvent as MessageDeltaEvent, type MessageDeltaUsage as MessageDeltaUsage, type MessageParam as MessageParam, type MessageStartEvent as MessageStartEvent, type MessageStopEvent as MessageStopEvent, type MessageStreamEvent as MessageStreamEvent, type MessageTokensCount as MessageTokensCount, type Metadata as Metadata, type Model as Model, type PlainTextSource as PlainTextSource, type RawContentBlockDeltaEvent as RawContentBlockDeltaEvent, type RawContentBlockStartEvent as RawContentBlockStartEvent, type RawContentBlockStopEvent as RawContentBlockStopEvent, type RawMessageDeltaEvent as RawMessageDeltaEvent, type RawMessageStartEvent as RawMessageStartEvent, type RawMessageStopEvent as RawMessageStopEvent, type RawMessageStreamEvent as RawMessageStreamEvent, type RedactedThinkingBlock as RedactedThinkingBlock, type RedactedThinkingBlockParam as RedactedThinkingBlockParam, type SignatureDelta as SignatureDelta, type TextBlock as TextBlock, type TextBlockParam as TextBlockParam, type TextCitation as TextCitation, type TextCitationParam as TextCitationParam, type TextDelta as TextDelta, type ThinkingBlock as ThinkingBlock, type ThinkingBlockParam as ThinkingBlockParam, type ThinkingConfigDisabled as ThinkingConfigDisabled, type ThinkingConfigEnabled as ThinkingConfigEnabled, type ThinkingDelta as ThinkingDelta, type Tool as Tool, type ToolChoice as ToolChoice, type ToolChoiceAny as ToolChoiceAny, type ToolChoiceAuto as ToolChoiceAuto, type ToolChoiceTool as ToolChoiceTool, type ToolResultBlockParam as ToolResultBlockParam, type ToolUseBlock as ToolUseBlock, type ToolUseBlockParam as ToolUseBlockParam, type Usage as Usage, type MessageCreateParams as MessageCreateParams, type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, type MessageCreateParamsStreaming as MessageCreateParamsStreaming, type MessageStreamParams as MessageStreamParams, type MessageCountTokensParams as MessageCountTokensParams, }; + export { Batches as Batches, type DeletedMessageBatch as DeletedMessageBatch, type MessageBatch as MessageBatch, type MessageBatchCanceledResult as MessageBatchCanceledResult, type MessageBatchErroredResult as MessageBatchErroredResult, type MessageBatchExpiredResult as MessageBatchExpiredResult, type MessageBatchIndividualResponse as MessageBatchIndividualResponse, type MessageBatchRequestCounts as MessageBatchRequestCounts, type MessageBatchResult as MessageBatchResult, type MessageBatchSucceededResult as MessageBatchSucceededResult, MessageBatchesPage as MessageBatchesPage, type BatchCreateParams as BatchCreateParams, type BatchListParams as BatchListParams, }; +} +//# sourceMappingURL=messages.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/messages.d.ts.map b/vendor/sdk/resources/messages/messages.d.ts.map new file mode 100644 index 0000000..55229b1 --- /dev/null +++ b/vendor/sdk/resources/messages/messages.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/resources/messages/messages.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/messages.js b/vendor/sdk/resources/messages/messages.js new file mode 100644 index 0000000..489cea3 --- /dev/null +++ b/vendor/sdk/resources/messages/messages.js @@ -0,0 +1,82 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Messages = exports.MessageStream = void 0; +const resource_1 = require("../../resource.js"); +const BatchesAPI = __importStar(require("./batches.js")); +const batches_1 = require("./batches.js"); +const MessageStream_1 = require("../../lib/MessageStream.js"); +var MessageStream_2 = require("../../lib/MessageStream.js"); +Object.defineProperty(exports, "MessageStream", { enumerable: true, get: function () { return MessageStream_2.MessageStream; } }); +class Messages extends resource_1.APIResource { + constructor() { + super(...arguments); + this.batches = new BatchesAPI.Batches(this._client); + } + create(body, options) { + if (body.model in DEPRECATED_MODELS) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + return this._client.post('/v1/messages', { + body, + timeout: this._client._options.timeout ?? 600000, + ...options, + stream: body.stream ?? false, + }); + } + /** + * Create a Message stream + */ + stream(body, options) { + return MessageStream_1.MessageStream.createMessage(this, body, options); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens(body, options) { + return this._client.post('/v1/messages/count_tokens', { body, ...options }); + } +} +exports.Messages = Messages; +const DEPRECATED_MODELS = { + 'claude-1.3': 'November 6th, 2024', + 'claude-1.3-100k': 'November 6th, 2024', + 'claude-instant-1.1': 'November 6th, 2024', + 'claude-instant-1.1-100k': 'November 6th, 2024', + 'claude-instant-1.2': 'November 6th, 2024', + 'claude-3-sonnet-20240229': 'July 21st, 2025', + 'claude-2.1': 'July 21st, 2025', + 'claude-2.0': 'July 21st, 2025', +}; +Messages.Batches = batches_1.Batches; +Messages.MessageBatchesPage = batches_1.MessageBatchesPage; +//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/messages.js.map b/vendor/sdk/resources/messages/messages.js.map new file mode 100644 index 0000000..148d6dc --- /dev/null +++ b/vendor/sdk/resources/messages/messages.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/resources/messages/messages.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtF,gDAA6C;AAI7C,yDAAwC;AACxC,0CAcmB;AAEnB,8DAAwD;AAExD,4DAAwD;AAA/C,8GAAA,aAAa,OAAA;AAEtB,MAAa,QAAS,SAAQ,sBAAW;IAAzC;;QACE,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IA6DrE,CAAC;IAzCC,MAAM,CACJ,IAAyB,EACzB,OAA6B;QAE7B,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE;YACnC,OAAO,CAAC,IAAI,CACV,cAAc,IAAI,CAAC,KAAK,iDACtB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAC9B,gIAAgI,CACjI,CAAC;SACH;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,IAAI;YACJ,OAAO,EAAG,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;YACzD,GAAG,OAAO;YACV,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;SAC7B,CAAoE,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAyB,EAAE,OAA6B;QAC7D,OAAO,6BAAa,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CACT,IAA8B,EAC9B,OAA6B;QAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;CACF;AA9DD,4BA8DC;AAoVD,MAAM,iBAAiB,GAEnB;IACF,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B,EAAE,iBAAiB;IAC7C,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAm3BF,QAAQ,CAAC,OAAO,GAAG,iBAAO,CAAC;AAC3B,QAAQ,CAAC,kBAAkB,GAAG,4BAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/messages/messages.mjs b/vendor/sdk/resources/messages/messages.mjs new file mode 100644 index 0000000..dc3d2a1 --- /dev/null +++ b/vendor/sdk/resources/messages/messages.mjs @@ -0,0 +1,54 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../../resource.mjs"; +import * as BatchesAPI from "./batches.mjs"; +import { Batches, MessageBatchesPage, } from "./batches.mjs"; +import { MessageStream } from "../../lib/MessageStream.mjs"; +export { MessageStream } from "../../lib/MessageStream.mjs"; +export class Messages extends APIResource { + constructor() { + super(...arguments); + this.batches = new BatchesAPI.Batches(this._client); + } + create(body, options) { + if (body.model in DEPRECATED_MODELS) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + return this._client.post('/v1/messages', { + body, + timeout: this._client._options.timeout ?? 600000, + ...options, + stream: body.stream ?? false, + }); + } + /** + * Create a Message stream + */ + stream(body, options) { + return MessageStream.createMessage(this, body, options); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens(body, options) { + return this._client.post('/v1/messages/count_tokens', { body, ...options }); + } +} +const DEPRECATED_MODELS = { + 'claude-1.3': 'November 6th, 2024', + 'claude-1.3-100k': 'November 6th, 2024', + 'claude-instant-1.1': 'November 6th, 2024', + 'claude-instant-1.1-100k': 'November 6th, 2024', + 'claude-instant-1.2': 'November 6th, 2024', + 'claude-3-sonnet-20240229': 'July 21st, 2025', + 'claude-2.1': 'July 21st, 2025', + 'claude-2.0': 'July 21st, 2025', +}; +Messages.Batches = Batches; +Messages.MessageBatchesPage = MessageBatchesPage; +//# sourceMappingURL=messages.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/messages/messages.mjs.map b/vendor/sdk/resources/messages/messages.mjs.map new file mode 100644 index 0000000..5ed5bb3 --- /dev/null +++ b/vendor/sdk/resources/messages/messages.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.mjs","sourceRoot":"","sources":["../../src/resources/messages/messages.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OAIf,KAAK,UAAU;OACf,EAGL,OAAO,EAUP,kBAAkB,GACnB;OAEM,EAAE,aAAa,EAAE;OAEjB,EAAE,aAAa,EAAE;AAExB,MAAM,OAAO,QAAS,SAAQ,WAAW;IAAzC;;QACE,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IA6DrE,CAAC;IAzCC,MAAM,CACJ,IAAyB,EACzB,OAA6B;QAE7B,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE;YACnC,OAAO,CAAC,IAAI,CACV,cAAc,IAAI,CAAC,KAAK,iDACtB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAC9B,gIAAgI,CACjI,CAAC;SACH;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,IAAI;YACJ,OAAO,EAAG,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;YACzD,GAAG,OAAO;YACV,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;SAC7B,CAAoE,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAyB,EAAE,OAA6B;QAC7D,OAAO,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CACT,IAA8B,EAC9B,OAA6B;QAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;CACF;AAoVD,MAAM,iBAAiB,GAEnB;IACF,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B,EAAE,iBAAiB;IAC7C,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAm3BF,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/models.d.ts b/vendor/sdk/resources/models.d.ts new file mode 100644 index 0000000..b4d70e8 --- /dev/null +++ b/vendor/sdk/resources/models.d.ts @@ -0,0 +1,49 @@ +import { APIResource } from "../resource.js"; +import * as Core from "../core.js"; +import { Page, type PageParams } from "../pagination.js"; +export declare class Models extends APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId: string, options?: Core.RequestOptions): Core.APIPromise; + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + */ + list(query?: ModelListParams, options?: Core.RequestOptions): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; +} +export declare class ModelInfosPage extends Page { +} +export interface ModelInfo { + /** + * Unique model identifier. + */ + id: string; + /** + * RFC 3339 datetime string representing the time at which the model was released. + * May be set to an epoch value if the release date is unknown. + */ + created_at: string; + /** + * A human-readable name for the model. + */ + display_name: string; + /** + * Object type. + * + * For Models, this is always `"model"`. + */ + type: 'model'; +} +export interface ModelListParams extends PageParams { +} +export declare namespace Models { + export { type ModelInfo as ModelInfo, ModelInfosPage as ModelInfosPage, type ModelListParams as ModelListParams, }; +} +//# sourceMappingURL=models.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/models.d.ts.map b/vendor/sdk/resources/models.d.ts.map new file mode 100644 index 0000000..99af558 --- /dev/null +++ b/vendor/sdk/resources/models.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/resources/models.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEtD,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IAIpF;;;;;OAKG;IACH,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC;IACzG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC;CAUjF;AAED,qBAAa,cAAe,SAAQ,IAAI,CAAC,SAAS,CAAC;CAAG;AAEtD,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;CAAG;AAItD,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,SAAS,IAAI,SAAS,EAC3B,cAAc,IAAI,cAAc,EAChC,KAAK,eAAe,IAAI,eAAe,GACxC,CAAC;CACH"} \ No newline at end of file diff --git a/vendor/sdk/resources/models.js b/vendor/sdk/resources/models.js new file mode 100644 index 0000000..9740284 --- /dev/null +++ b/vendor/sdk/resources/models.js @@ -0,0 +1,30 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ModelInfosPage = exports.Models = void 0; +const resource_1 = require("../resource.js"); +const core_1 = require("../core.js"); +const pagination_1 = require("../pagination.js"); +class Models extends resource_1.APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId, options) { + return this._client.get(`/v1/models/${modelId}`, options); + } + list(query = {}, options) { + if ((0, core_1.isRequestOptions)(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/models', ModelInfosPage, { query, ...options }); + } +} +exports.Models = Models; +class ModelInfosPage extends pagination_1.Page { +} +exports.ModelInfosPage = ModelInfosPage; +Models.ModelInfosPage = ModelInfosPage; +//# sourceMappingURL=models.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/models.js.map b/vendor/sdk/resources/models.js.map new file mode 100644 index 0000000..9cba614 --- /dev/null +++ b/vendor/sdk/resources/models.js.map @@ -0,0 +1 @@ +{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/resources/models.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,6CAA0C;AAC1C,qCAA2C;AAE3C,iDAAsD;AAEtD,MAAa,MAAO,SAAQ,sBAAW;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,OAAe,EAAE,OAA6B;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAUD,IAAI,CACF,QAA+C,EAAE,EACjD,OAA6B;QAE7B,IAAI,IAAA,uBAAgB,EAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;CACF;AA5BD,wBA4BC;AAED,MAAa,cAAe,SAAQ,iBAAe;CAAG;AAAtD,wCAAsD;AA6BtD,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/models.mjs b/vendor/sdk/resources/models.mjs new file mode 100644 index 0000000..c8b85d1 --- /dev/null +++ b/vendor/sdk/resources/models.mjs @@ -0,0 +1,25 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { APIResource } from "../resource.mjs"; +import { isRequestOptions } from "../core.mjs"; +import { Page } from "../pagination.mjs"; +export class Models extends APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId, options) { + return this._client.get(`/v1/models/${modelId}`, options); + } + list(query = {}, options) { + if (isRequestOptions(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/models', ModelInfosPage, { query, ...options }); + } +} +export class ModelInfosPage extends Page { +} +Models.ModelInfosPage = ModelInfosPage; +//# sourceMappingURL=models.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/models.mjs.map b/vendor/sdk/resources/models.mjs.map new file mode 100644 index 0000000..974bb34 --- /dev/null +++ b/vendor/sdk/resources/models.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"models.mjs","sourceRoot":"","sources":["../src/resources/models.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OACf,EAAE,gBAAgB,EAAE;OAEpB,EAAE,IAAI,EAAmB;AAEhC,MAAM,OAAO,MAAO,SAAQ,WAAW;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,OAAe,EAAE,OAA6B;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAUD,IAAI,CACF,QAA+C,EAAE,EACjD,OAA6B;QAE7B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,IAAe;CAAG;AA6BtD,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/shared.d.ts b/vendor/sdk/resources/shared.d.ts new file mode 100644 index 0000000..b912fb7 --- /dev/null +++ b/vendor/sdk/resources/shared.d.ts @@ -0,0 +1,42 @@ +export interface APIErrorObject { + message: string; + type: 'api_error'; +} +export interface AuthenticationError { + message: string; + type: 'authentication_error'; +} +export interface BillingError { + message: string; + type: 'billing_error'; +} +export type ErrorObject = InvalidRequestError | AuthenticationError | BillingError | PermissionError | NotFoundError | RateLimitError | GatewayTimeoutError | APIErrorObject | OverloadedError; +export interface ErrorResponse { + error: ErrorObject; + type: 'error'; +} +export interface GatewayTimeoutError { + message: string; + type: 'timeout_error'; +} +export interface InvalidRequestError { + message: string; + type: 'invalid_request_error'; +} +export interface NotFoundError { + message: string; + type: 'not_found_error'; +} +export interface OverloadedError { + message: string; + type: 'overloaded_error'; +} +export interface PermissionError { + message: string; + type: 'permission_error'; +} +export interface RateLimitError { + message: string; + type: 'rate_limit_error'; +} +//# sourceMappingURL=shared.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/shared.d.ts.map b/vendor/sdk/resources/shared.d.ts.map new file mode 100644 index 0000000..8681413 --- /dev/null +++ b/vendor/sdk/resources/shared.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/resources/shared.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,sBAAsB,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IAEnB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,uBAAuB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,kBAAkB,CAAC;CAC1B"} \ No newline at end of file diff --git a/vendor/sdk/resources/shared.js b/vendor/sdk/resources/shared.js new file mode 100644 index 0000000..db0cae1 --- /dev/null +++ b/vendor/sdk/resources/shared.js @@ -0,0 +1,4 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=shared.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/shared.js.map b/vendor/sdk/resources/shared.js.map new file mode 100644 index 0000000..e532ab2 --- /dev/null +++ b/vendor/sdk/resources/shared.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/resources/shared.ts"],"names":[],"mappings":";AAAA,sFAAsF"} \ No newline at end of file diff --git a/vendor/sdk/resources/shared.mjs b/vendor/sdk/resources/shared.mjs new file mode 100644 index 0000000..a88d4e1 --- /dev/null +++ b/vendor/sdk/resources/shared.mjs @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export {}; +//# sourceMappingURL=shared.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/shared.mjs.map b/vendor/sdk/resources/shared.mjs.map new file mode 100644 index 0000000..ac8fa86 --- /dev/null +++ b/vendor/sdk/resources/shared.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.mjs","sourceRoot":"","sources":["../src/resources/shared.ts"],"names":[],"mappings":"AAAA,sFAAsF"} \ No newline at end of file diff --git a/vendor/sdk/resources/top-level.d.ts b/vendor/sdk/resources/top-level.d.ts new file mode 100644 index 0000000..3501e29 --- /dev/null +++ b/vendor/sdk/resources/top-level.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=top-level.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/resources/top-level.d.ts.map b/vendor/sdk/resources/top-level.d.ts.map new file mode 100644 index 0000000..d5a8c48 --- /dev/null +++ b/vendor/sdk/resources/top-level.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"top-level.d.ts","sourceRoot":"","sources":["../src/resources/top-level.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/resources/top-level.js b/vendor/sdk/resources/top-level.js new file mode 100644 index 0000000..4c28106 --- /dev/null +++ b/vendor/sdk/resources/top-level.js @@ -0,0 +1,4 @@ +"use strict"; +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=top-level.js.map \ No newline at end of file diff --git a/vendor/sdk/resources/top-level.js.map b/vendor/sdk/resources/top-level.js.map new file mode 100644 index 0000000..73a66a9 --- /dev/null +++ b/vendor/sdk/resources/top-level.js.map @@ -0,0 +1 @@ +{"version":3,"file":"top-level.js","sourceRoot":"","sources":["../src/resources/top-level.ts"],"names":[],"mappings":";AAAA,sFAAsF"} \ No newline at end of file diff --git a/vendor/sdk/resources/top-level.mjs b/vendor/sdk/resources/top-level.mjs new file mode 100644 index 0000000..6ab73f6 --- /dev/null +++ b/vendor/sdk/resources/top-level.mjs @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +export {}; +//# sourceMappingURL=top-level.mjs.map \ No newline at end of file diff --git a/vendor/sdk/resources/top-level.mjs.map b/vendor/sdk/resources/top-level.mjs.map new file mode 100644 index 0000000..a73827e --- /dev/null +++ b/vendor/sdk/resources/top-level.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"top-level.mjs","sourceRoot":"","sources":["../src/resources/top-level.ts"],"names":[],"mappings":"AAAA,sFAAsF"} \ No newline at end of file diff --git a/vendor/sdk/shims/node.d.ts b/vendor/sdk/shims/node.d.ts new file mode 100644 index 0000000..86fc310 --- /dev/null +++ b/vendor/sdk/shims/node.d.ts @@ -0,0 +1,30 @@ + + + + +import * as types from "../_shims/node-types.js"; +declare module '../_shims/manual-types' { + namespace manual { + type Agent = types.Agent; + export import fetch = types.fetch; + type Request = types.Request; + type RequestInfo = types.RequestInfo; + type RequestInit = types.RequestInit; + type Response = types.Response; + type ResponseInit = types.ResponseInit; + type ResponseType = types.ResponseType; + type BodyInit = types.BodyInit; + type Headers = types.Headers; + type HeadersInit = types.HeadersInit; + type BlobPropertyBag = types.BlobPropertyBag; + type FilePropertyBag = types.FilePropertyBag; + type FileFromPathOptions = types.FileFromPathOptions; + export import FormData = types.FormData; + export import File = types.File; + export import Blob = types.Blob; + type Readable = types.Readable; + type FsReadStream = types.FsReadStream; + export import ReadableStream = types.ReadableStream; + } +} +//# sourceMappingURL=node.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/shims/node.d.ts.map b/vendor/sdk/shims/node.d.ts.map new file mode 100644 index 0000000..bba8760 --- /dev/null +++ b/vendor/sdk/shims/node.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/shims/node.ts"],"names":[],"mappings":";;;;AACA,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAK9C,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAiB,MAAM,CAAC;QAEtB,KAAY,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAEhC,MAAM,QAAQ,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAElC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAE5D,MAAM,QAAQ,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAExC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,MAAM,QAAQ,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;KACrD;CACF"} \ No newline at end of file diff --git a/vendor/sdk/shims/node.js b/vendor/sdk/shims/node.js new file mode 100644 index 0000000..9fb2b01 --- /dev/null +++ b/vendor/sdk/shims/node.js @@ -0,0 +1,31 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// @ts-ignore +const types = __importStar(require("../_shims/node-types.js")); +const registry_1 = require("../_shims/registry.js"); +const node_runtime_1 = require("../_shims/node-runtime.js"); +(0, registry_1.setShims)((0, node_runtime_1.getRuntime)()); +//# sourceMappingURL=node.js.map \ No newline at end of file diff --git a/vendor/sdk/shims/node.js.map b/vendor/sdk/shims/node.js.map new file mode 100644 index 0000000..181c62e --- /dev/null +++ b/vendor/sdk/shims/node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/shims/node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,aAAa;AACb,+DAA8C;AAC9C,oDAA8C;AAC9C,4DAAoD;AACpD,IAAA,mBAAQ,EAAC,IAAA,yBAAU,GAAE,CAAC,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/shims/node.mjs b/vendor/sdk/shims/node.mjs new file mode 100644 index 0000000..18b4463 --- /dev/null +++ b/vendor/sdk/shims/node.mjs @@ -0,0 +1,5 @@ +import * as types from "../_shims/node-types.mjs"; +import { setShims } from "../_shims/registry.mjs"; +import { getRuntime } from "../_shims/node-runtime.mjs"; +setShims(getRuntime()); +//# sourceMappingURL=node.mjs.map \ No newline at end of file diff --git a/vendor/sdk/shims/node.mjs.map b/vendor/sdk/shims/node.mjs.map new file mode 100644 index 0000000..3f0a9f1 --- /dev/null +++ b/vendor/sdk/shims/node.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"node.mjs","sourceRoot":"","sources":["../src/shims/node.ts"],"names":[],"mappings":"OACO,KAAK,KAAK;OACV,EAAE,QAAQ,EAAE;OACZ,EAAE,UAAU,EAAE;AACrB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/shims/web.d.ts b/vendor/sdk/shims/web.d.ts new file mode 100644 index 0000000..3248079 --- /dev/null +++ b/vendor/sdk/shims/web.d.ts @@ -0,0 +1,26 @@ +import * as types from "../_shims/web-types.js"; +declare module '../_shims/manual-types' { + namespace manual { + type Agent = types.Agent; + export import fetch = types.fetch; + type Request = types.Request; + type RequestInfo = types.RequestInfo; + type RequestInit = types.RequestInit; + type Response = types.Response; + type ResponseInit = types.ResponseInit; + type ResponseType = types.ResponseType; + type BodyInit = types.BodyInit; + type Headers = types.Headers; + type HeadersInit = types.HeadersInit; + type BlobPropertyBag = types.BlobPropertyBag; + type FilePropertyBag = types.FilePropertyBag; + type FileFromPathOptions = types.FileFromPathOptions; + export import FormData = types.FormData; + export import File = types.File; + export import Blob = types.Blob; + type Readable = types.Readable; + type FsReadStream = types.FsReadStream; + export import ReadableStream = types.ReadableStream; + } +} +//# sourceMappingURL=web.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/shims/web.d.ts.map b/vendor/sdk/shims/web.d.ts.map new file mode 100644 index 0000000..b478965 --- /dev/null +++ b/vendor/sdk/shims/web.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/shims/web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAK7C,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAiB,MAAM,CAAC;QAEtB,KAAY,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAEhC,MAAM,QAAQ,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAElC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAE5D,MAAM,QAAQ,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAExC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,MAAM,QAAQ,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;KACrD;CACF"} \ No newline at end of file diff --git a/vendor/sdk/shims/web.js b/vendor/sdk/shims/web.js new file mode 100644 index 0000000..2a1d019 --- /dev/null +++ b/vendor/sdk/shims/web.js @@ -0,0 +1,31 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// @ts-ignore +const types = __importStar(require("../_shims/web-types.js")); +const registry_1 = require("../_shims/registry.js"); +const web_runtime_1 = require("../_shims/web-runtime.js"); +(0, registry_1.setShims)((0, web_runtime_1.getRuntime)({ manuallyImported: true })); +//# sourceMappingURL=web.js.map \ No newline at end of file diff --git a/vendor/sdk/shims/web.js.map b/vendor/sdk/shims/web.js.map new file mode 100644 index 0000000..3eb0f4c --- /dev/null +++ b/vendor/sdk/shims/web.js.map @@ -0,0 +1 @@ +{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/shims/web.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,aAAa;AACb,8DAA6C;AAC7C,oDAA8C;AAC9C,0DAAmD;AACnD,IAAA,mBAAQ,EAAC,IAAA,wBAAU,EAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/shims/web.mjs b/vendor/sdk/shims/web.mjs new file mode 100644 index 0000000..aa1b96f --- /dev/null +++ b/vendor/sdk/shims/web.mjs @@ -0,0 +1,5 @@ +import * as types from "../_shims/web-types.mjs"; +import { setShims } from "../_shims/registry.mjs"; +import { getRuntime } from "../_shims/web-runtime.mjs"; +setShims(getRuntime({ manuallyImported: true })); +//# sourceMappingURL=web.mjs.map \ No newline at end of file diff --git a/vendor/sdk/shims/web.mjs.map b/vendor/sdk/shims/web.mjs.map new file mode 100644 index 0000000..0ccbb72 --- /dev/null +++ b/vendor/sdk/shims/web.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"web.mjs","sourceRoot":"","sources":["../src/shims/web.ts"],"names":[],"mappings":"OACO,KAAK,KAAK;OACV,EAAE,QAAQ,EAAE;OACZ,EAAE,UAAU,EAAE;AACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/src/_shims/MultipartBody.ts b/vendor/sdk/src/_shims/MultipartBody.ts new file mode 100644 index 0000000..af3b111 --- /dev/null +++ b/vendor/sdk/src/_shims/MultipartBody.ts @@ -0,0 +1,9 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export class MultipartBody { + constructor(public body: any) {} + get [Symbol.toStringTag](): string { + return 'MultipartBody'; + } +} diff --git a/vendor/sdk/src/_shims/README.md b/vendor/sdk/src/_shims/README.md new file mode 100644 index 0000000..28efc3b --- /dev/null +++ b/vendor/sdk/src/_shims/README.md @@ -0,0 +1,46 @@ +# 👋 Wondering what everything in here does? + +`@anthropic-ai/sdk` supports a wide variety of runtime environments like Node.js, Deno, Bun, browsers, and various +edge runtimes, as well as both CommonJS (CJS) and EcmaScript Modules (ESM). + +To do this, `@anthropic-ai/sdk` provides shims for either using `node-fetch` when in Node (because `fetch` is still experimental there) or the global `fetch` API built into the environment when not in Node. + +It uses [conditional exports](https://nodejs.org/api/packages.html#conditional-exports) to +automatically select the correct shims for each environment. However, conditional exports are a fairly new +feature and not supported everywhere. For instance, the TypeScript `"moduleResolution": "node"` + +setting doesn't consult the `exports` map, compared to `"moduleResolution": "nodeNext"`, which does. +Unfortunately that's still the default setting, and it can result in errors like +getting the wrong raw `Response` type from `.asResponse()`, for example. + +The user can work around these issues by manually importing one of: + +- `import '@anthropic-ai/sdk/shims/node'` +- `import '@anthropic-ai/sdk/shims/web'` + +All of the code here in `_shims` handles selecting the automatic default shims or manual overrides. + +### How it works - Runtime + +Runtime shims get installed by calling `setShims` exported by `@anthropic-ai/sdk/_shims/registry`. + +Manually importing `@anthropic-ai/sdk/shims/node` or `@anthropic-ai/sdk/shims/web`, calls `setShims` with the respective runtime shims. + +All client code imports shims from `@anthropic-ai/sdk/_shims/index`, which: + +- checks if shims have been set manually +- if not, calls `setShims` with the shims from `@anthropic-ai/sdk/_shims/auto/runtime` +- re-exports the installed shims from `@anthropic-ai/sdk/_shims/registry`. + +`@anthropic-ai/sdk/_shims/auto/runtime` exports web runtime shims. +If the `node` export condition is set, the export map replaces it with `@anthropic-ai/sdk/_shims/auto/runtime-node`. + +### How it works - Type time + +All client code imports shim types from `@anthropic-ai/sdk/_shims/index`, which selects the manual types from `@anthropic-ai/sdk/_shims/manual-types` if they have been declared, otherwise it exports the auto types from `@anthropic-ai/sdk/_shims/auto/types`. + +`@anthropic-ai/sdk/_shims/manual-types` exports an empty namespace. +Manually importing `@anthropic-ai/sdk/shims/node` or `@anthropic-ai/sdk/shims/web` merges declarations into this empty namespace, so they get picked up by `@anthropic-ai/sdk/_shims/index`. + +`@anthropic-ai/sdk/_shims/auto/types` exports web type definitions. +If the `node` export condition is set, the export map replaces it with `@anthropic-ai/sdk/_shims/auto/types-node`, though TS only picks this up if `"moduleResolution": "nodenext"` or `"moduleResolution": "bundler"`. diff --git a/vendor/sdk/src/_shims/auto/runtime-bun.ts b/vendor/sdk/src/_shims/auto/runtime-bun.ts new file mode 100644 index 0000000..b3a3ff8 --- /dev/null +++ b/vendor/sdk/src/_shims/auto/runtime-bun.ts @@ -0,0 +1,4 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../bun-runtime.js"; diff --git a/vendor/sdk/src/_shims/auto/runtime-node.ts b/vendor/sdk/src/_shims/auto/runtime-node.ts new file mode 100644 index 0000000..0511403 --- /dev/null +++ b/vendor/sdk/src/_shims/auto/runtime-node.ts @@ -0,0 +1,4 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../node-runtime.js"; diff --git a/vendor/sdk/src/_shims/auto/runtime.ts b/vendor/sdk/src/_shims/auto/runtime.ts new file mode 100644 index 0000000..bc9741d --- /dev/null +++ b/vendor/sdk/src/_shims/auto/runtime.ts @@ -0,0 +1,4 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../web-runtime.js"; diff --git a/vendor/sdk/src/_shims/auto/types-node.ts b/vendor/sdk/src/_shims/auto/types-node.ts new file mode 100644 index 0000000..e841eb3 --- /dev/null +++ b/vendor/sdk/src/_shims/auto/types-node.ts @@ -0,0 +1,4 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export * from "../node-types.js"; diff --git a/vendor/sdk/src/_shims/auto/types.d.ts b/vendor/sdk/src/_shims/auto/types.d.ts new file mode 100644 index 0000000..8fbedac --- /dev/null +++ b/vendor/sdk/src/_shims/auto/types.d.ts @@ -0,0 +1,101 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export type Agent = any; + +// @ts-ignore +declare const _fetch: typeof fetch; +export { _fetch as fetch }; + +// @ts-ignore +type _Request = Request; +export { _Request as Request }; + +// @ts-ignore +type _RequestInfo = RequestInfo; +export { type _RequestInfo as RequestInfo }; + +// @ts-ignore +type _RequestInit = RequestInit; +export { type _RequestInit as RequestInit }; + +// @ts-ignore +type _Response = Response; +export { _Response as Response }; + +// @ts-ignore +type _ResponseInit = ResponseInit; +export { type _ResponseInit as ResponseInit }; + +// @ts-ignore +type _ResponseType = ResponseType; +export { type _ResponseType as ResponseType }; + +// @ts-ignore +type _BodyInit = BodyInit; +export { type _BodyInit as BodyInit }; + +// @ts-ignore +type _Headers = Headers; +export { _Headers as Headers }; + +// @ts-ignore +type _HeadersInit = HeadersInit; +export { type _HeadersInit as HeadersInit }; + +type EndingType = 'native' | 'transparent'; + +export interface BlobPropertyBag { + endings?: EndingType; + type?: string; +} + +export interface FilePropertyBag extends BlobPropertyBag { + lastModified?: number; +} + +export type FileFromPathOptions = Omit; + +// @ts-ignore +type _FormData = FormData; +// @ts-ignore +declare const _FormData: typeof FormData; +export { _FormData as FormData }; + +// @ts-ignore +type _File = File; +// @ts-ignore +declare const _File: typeof File; +export { _File as File }; + +// @ts-ignore +type _Blob = Blob; +// @ts-ignore +declare const _Blob: typeof Blob; +export { _Blob as Blob }; + +export declare class Readable { + readable: boolean; + readonly readableEnded: boolean; + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + readonly readableObjectMode: boolean; + destroyed: boolean; + read(size?: number): any; + pause(): this; + resume(): this; + isPaused(): boolean; + destroy(error?: Error): this; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +export declare class FsReadStream extends Readable { + path: {}; // node type is string | Buffer +} + +// @ts-ignore +type _ReadableStream = ReadableStream; +// @ts-ignore +declare const _ReadableStream: typeof ReadableStream; +export { _ReadableStream as ReadableStream }; diff --git a/vendor/sdk/src/_shims/auto/types.js b/vendor/sdk/src/_shims/auto/types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/auto/types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/auto/types.mjs b/vendor/sdk/src/_shims/auto/types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/auto/types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/bun-runtime.ts b/vendor/sdk/src/_shims/bun-runtime.ts new file mode 100644 index 0000000..fe77efa --- /dev/null +++ b/vendor/sdk/src/_shims/bun-runtime.ts @@ -0,0 +1,14 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { type Shims } from "./registry.js"; +import { getRuntime as getWebRuntime } from "./web-runtime.js"; +import { ReadStream as FsReadStream } from 'node:fs'; + +export function getRuntime(): Shims { + const runtime = getWebRuntime(); + function isFsReadStream(value: any): value is FsReadStream { + return value instanceof FsReadStream; + } + return { ...runtime, isFsReadStream }; +} diff --git a/vendor/sdk/src/_shims/index.d.ts b/vendor/sdk/src/_shims/index.d.ts new file mode 100644 index 0000000..ec38c60 --- /dev/null +++ b/vendor/sdk/src/_shims/index.d.ts @@ -0,0 +1,81 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { manual } from "./manual-types.js"; +import * as auto from "./auto/types.js"; +import { type RequestOptions } from "../core.js"; + +type SelectType = unknown extends Manual ? Auto : Manual; + +export const kind: string; + +// @ts-ignore +export type Agent = SelectType; + +// @ts-ignore +export const fetch: SelectType; + +// @ts-ignore +export type Request = SelectType; +// @ts-ignore +export type RequestInfo = SelectType; +// @ts-ignore +export type RequestInit = SelectType; + +// @ts-ignore +export type Response = SelectType; +// @ts-ignore +export type ResponseInit = SelectType; +// @ts-ignore +export type ResponseType = SelectType; +// @ts-ignore +export type BodyInit = SelectType; +// @ts-ignore +export type Headers = SelectType; +// @ts-ignore +export const Headers: SelectType; +// @ts-ignore +export type HeadersInit = SelectType; + +// @ts-ignore +export type BlobPropertyBag = SelectType; +// @ts-ignore +export type FilePropertyBag = SelectType; +// @ts-ignore +export type FileFromPathOptions = SelectType; +// @ts-ignore +export type FormData = SelectType; +// @ts-ignore +export const FormData: SelectType; +// @ts-ignore +export type File = SelectType; +// @ts-ignore +export const File: SelectType; +// @ts-ignore +export type Blob = SelectType; +// @ts-ignore +export const Blob: SelectType; + +// @ts-ignore +export type Readable = SelectType; +// @ts-ignore +export type FsReadStream = SelectType; +// @ts-ignore +export type ReadableStream = SelectType; +// @ts-ignore +export const ReadableStream: SelectType; + +export function getMultipartRequestOptions>( + form: FormData, + opts: RequestOptions, +): Promise>; + +export function getDefaultAgent(url: string): any; + +// @ts-ignore +export type FileFromPathOptions = SelectType; + +export function fileFromPath(path: string, options?: FileFromPathOptions): Promise; +export function fileFromPath(path: string, filename?: string, options?: FileFromPathOptions): Promise; + +export function isFsReadStream(value: any): value is FsReadStream; diff --git a/vendor/sdk/src/_shims/index.js b/vendor/sdk/src/_shims/index.js new file mode 100644 index 0000000..f2db579 --- /dev/null +++ b/vendor/sdk/src/_shims/index.js @@ -0,0 +1,13 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +const shims = require('./registry'); +const auto = require('@anthropic-ai/sdk/_shims/auto/runtime'); +if (!shims.kind) shims.setShims(auto.getRuntime(), { auto: true }); +for (const property of Object.keys(shims)) { + Object.defineProperty(exports, property, { + get() { + return shims[property]; + }, + }); +} diff --git a/vendor/sdk/src/_shims/index.mjs b/vendor/sdk/src/_shims/index.mjs new file mode 100644 index 0000000..7db2b4b --- /dev/null +++ b/vendor/sdk/src/_shims/index.mjs @@ -0,0 +1,7 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import * as shims from './registry.mjs'; +import * as auto from "./auto/runtime.mjs"; +if (!shims.kind) shims.setShims(auto.getRuntime(), { auto: true }); +export * from './registry.mjs'; diff --git a/vendor/sdk/src/_shims/manual-types.d.ts b/vendor/sdk/src/_shims/manual-types.d.ts new file mode 100644 index 0000000..506ec04 --- /dev/null +++ b/vendor/sdk/src/_shims/manual-types.d.ts @@ -0,0 +1,12 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +/** + * Types will get added to this namespace when you import one of the following: + * + * import '@anthropic-ai/sdk/shims/node' + * import '@anthropic-ai/sdk/shims/web' + * + * Importing more than one will cause type and runtime errors. + */ +export namespace manual {} diff --git a/vendor/sdk/src/_shims/manual-types.js b/vendor/sdk/src/_shims/manual-types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/manual-types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/manual-types.mjs b/vendor/sdk/src/_shims/manual-types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/manual-types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/node-runtime.ts b/vendor/sdk/src/_shims/node-runtime.ts new file mode 100644 index 0000000..443ade8 --- /dev/null +++ b/vendor/sdk/src/_shims/node-runtime.ts @@ -0,0 +1,81 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import * as nf from 'node-fetch'; +import * as fd from 'formdata-node'; +import { type File, type FilePropertyBag } from 'formdata-node'; +import KeepAliveAgent from 'agentkeepalive'; +import { AbortController as AbortControllerPolyfill } from 'abort-controller'; +import { ReadStream as FsReadStream } from 'node:fs'; +import { type Agent } from 'node:http'; +import { FormDataEncoder } from 'form-data-encoder'; +import { Readable } from 'node:stream'; +import { type RequestOptions } from "../core.js"; +import { MultipartBody } from "./MultipartBody.js"; +import { type Shims } from "./registry.js"; +import { ReadableStream } from 'node:stream/web'; + +type FileFromPathOptions = Omit; + +let fileFromPathWarned = false; + +/** + * @deprecated use fs.createReadStream('./my/file.txt') instead + */ +async function fileFromPath(path: string): Promise; +async function fileFromPath(path: string, filename?: string): Promise; +async function fileFromPath(path: string, options?: FileFromPathOptions): Promise; +async function fileFromPath(path: string, filename?: string, options?: FileFromPathOptions): Promise; +async function fileFromPath(path: string, ...args: any[]): Promise { + // this import fails in environments that don't handle export maps correctly, like old versions of Jest + const { fileFromPath: _fileFromPath } = await import('formdata-node/file-from-path'); + + if (!fileFromPathWarned) { + console.warn(`fileFromPath is deprecated; use fs.createReadStream(${JSON.stringify(path)}) instead`); + fileFromPathWarned = true; + } + // @ts-ignore + return await _fileFromPath(path, ...args); +} + +const defaultHttpAgent: Agent = new KeepAliveAgent({ keepAlive: true, timeout: 5 * 60 * 1000 }); +const defaultHttpsAgent: Agent = new KeepAliveAgent.HttpsAgent({ keepAlive: true, timeout: 5 * 60 * 1000 }); + +async function getMultipartRequestOptions>( + form: fd.FormData, + opts: RequestOptions, +): Promise> { + const encoder = new FormDataEncoder(form); + const readable = Readable.from(encoder); + const body = new MultipartBody(readable); + const headers = { + ...opts.headers, + ...encoder.headers, + 'Content-Length': encoder.contentLength, + }; + + return { ...opts, body: body as any, headers }; +} + +export function getRuntime(): Shims { + // Polyfill global object if needed. + if (typeof AbortController === 'undefined') { + // @ts-expect-error (the types are subtly different, but compatible in practice) + globalThis.AbortController = AbortControllerPolyfill; + } + return { + kind: 'node', + fetch: nf.default, + Request: nf.Request, + Response: nf.Response, + Headers: nf.Headers, + FormData: fd.FormData, + Blob: fd.Blob, + File: fd.File, + ReadableStream, + getMultipartRequestOptions, + getDefaultAgent: (url: string): Agent => (url.startsWith('https') ? defaultHttpsAgent : defaultHttpAgent), + fileFromPath, + isFsReadStream: (value: any): value is FsReadStream => value instanceof FsReadStream, + }; +} diff --git a/vendor/sdk/src/_shims/node-types.d.ts b/vendor/sdk/src/_shims/node-types.d.ts new file mode 100644 index 0000000..c159e5f --- /dev/null +++ b/vendor/sdk/src/_shims/node-types.d.ts @@ -0,0 +1,42 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import * as nf from 'node-fetch'; +import * as fd from 'formdata-node'; + +export { type Agent } from 'node:http'; +export { type Readable } from 'node:stream'; +export { type ReadStream as FsReadStream } from 'node:fs'; +export { ReadableStream } from 'node:stream/web'; + +export const fetch: typeof nf.default; + +export type Request = nf.Request; +export type RequestInfo = nf.RequestInfo; +export type RequestInit = nf.RequestInit; + +export type Response = nf.Response; +export type ResponseInit = nf.ResponseInit; +export type ResponseType = nf.ResponseType; +export type BodyInit = nf.BodyInit; +export type Headers = nf.Headers; +export type HeadersInit = nf.HeadersInit; + +type EndingType = 'native' | 'transparent'; +export interface BlobPropertyBag { + endings?: EndingType; + type?: string; +} + +export interface FilePropertyBag extends BlobPropertyBag { + lastModified?: number; +} + +export type FileFromPathOptions = Omit; + +export type FormData = fd.FormData; +export const FormData: typeof fd.FormData; +export type File = fd.File; +export const File: typeof fd.File; +export type Blob = fd.Blob; +export const Blob: typeof fd.Blob; diff --git a/vendor/sdk/src/_shims/node-types.js b/vendor/sdk/src/_shims/node-types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/node-types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/node-types.mjs b/vendor/sdk/src/_shims/node-types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/node-types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/registry.ts b/vendor/sdk/src/_shims/registry.ts new file mode 100644 index 0000000..27583fd --- /dev/null +++ b/vendor/sdk/src/_shims/registry.ts @@ -0,0 +1,67 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { type RequestOptions } from "../core.js"; + +export interface Shims { + kind: string; + fetch: any; + Request: any; + Response: any; + Headers: any; + FormData: any; + Blob: any; + File: any; + ReadableStream: any; + getMultipartRequestOptions: >( + form: Shims['FormData'], + opts: RequestOptions, + ) => Promise>; + getDefaultAgent: (url: string) => any; + fileFromPath: + | ((path: string, filename?: string, options?: {}) => Promise) + | ((path: string, options?: {}) => Promise); + isFsReadStream: (value: any) => boolean; +} + +export let auto = false; +export let kind: Shims['kind'] | undefined = undefined; +export let fetch: Shims['fetch'] | undefined = undefined; +export let Request: Shims['Request'] | undefined = undefined; +export let Response: Shims['Response'] | undefined = undefined; +export let Headers: Shims['Headers'] | undefined = undefined; +export let FormData: Shims['FormData'] | undefined = undefined; +export let Blob: Shims['Blob'] | undefined = undefined; +export let File: Shims['File'] | undefined = undefined; +export let ReadableStream: Shims['ReadableStream'] | undefined = undefined; +export let getMultipartRequestOptions: Shims['getMultipartRequestOptions'] | undefined = undefined; +export let getDefaultAgent: Shims['getDefaultAgent'] | undefined = undefined; +export let fileFromPath: Shims['fileFromPath'] | undefined = undefined; +export let isFsReadStream: Shims['isFsReadStream'] | undefined = undefined; + +export function setShims(shims: Shims, options: { auto: boolean } = { auto: false }) { + if (auto) { + throw new Error( + `you must \`import '@anthropic-ai/sdk/shims/${shims.kind}'\` before importing anything else from @anthropic-ai/sdk`, + ); + } + if (kind) { + throw new Error( + `can't \`import '@anthropic-ai/sdk/shims/${shims.kind}'\` after \`import '@anthropic-ai/sdk/shims/${kind}'\``, + ); + } + auto = options.auto; + kind = shims.kind; + fetch = shims.fetch; + Request = shims.Request; + Response = shims.Response; + Headers = shims.Headers; + FormData = shims.FormData; + Blob = shims.Blob; + File = shims.File; + ReadableStream = shims.ReadableStream; + getMultipartRequestOptions = shims.getMultipartRequestOptions; + getDefaultAgent = shims.getDefaultAgent; + fileFromPath = shims.fileFromPath; + isFsReadStream = shims.isFsReadStream; +} diff --git a/vendor/sdk/src/_shims/web-runtime.ts b/vendor/sdk/src/_shims/web-runtime.ts new file mode 100644 index 0000000..a660d42 --- /dev/null +++ b/vendor/sdk/src/_shims/web-runtime.ts @@ -0,0 +1,103 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +import { MultipartBody } from "./MultipartBody.js"; +import { type RequestOptions } from "../core.js"; +import { type Shims } from "./registry.js"; + +export function getRuntime({ manuallyImported }: { manuallyImported?: boolean } = {}): Shims { + const recommendation = + manuallyImported ? + `You may need to use polyfills` + : `Add one of these imports before your first \`import … from '@anthropic-ai/sdk'\`: +- \`import '@anthropic-ai/sdk/shims/node'\` (if you're running on Node) +- \`import '@anthropic-ai/sdk/shims/web'\` (otherwise) +`; + + let _fetch, _Request, _Response, _Headers; + try { + // @ts-ignore + _fetch = fetch; + // @ts-ignore + _Request = Request; + // @ts-ignore + _Response = Response; + // @ts-ignore + _Headers = Headers; + } catch (error) { + throw new Error( + `this environment is missing the following Web Fetch API type: ${ + (error as any).message + }. ${recommendation}`, + ); + } + + return { + kind: 'web', + fetch: _fetch, + Request: _Request, + Response: _Response, + Headers: _Headers, + FormData: + // @ts-ignore + typeof FormData !== 'undefined' ? FormData : ( + class FormData { + // @ts-ignore + constructor() { + throw new Error( + `file uploads aren't supported in this environment yet as 'FormData' is undefined. ${recommendation}`, + ); + } + } + ), + Blob: + typeof Blob !== 'undefined' ? Blob : ( + class Blob { + constructor() { + throw new Error( + `file uploads aren't supported in this environment yet as 'Blob' is undefined. ${recommendation}`, + ); + } + } + ), + File: + // @ts-ignore + typeof File !== 'undefined' ? File : ( + class File { + // @ts-ignore + constructor() { + throw new Error( + `file uploads aren't supported in this environment yet as 'File' is undefined. ${recommendation}`, + ); + } + } + ), + ReadableStream: + // @ts-ignore + typeof ReadableStream !== 'undefined' ? ReadableStream : ( + class ReadableStream { + // @ts-ignore + constructor() { + throw new Error( + `streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${recommendation}`, + ); + } + } + ), + getMultipartRequestOptions: async >( + // @ts-ignore + form: FormData, + opts: RequestOptions, + ): Promise> => ({ + ...opts, + body: new MultipartBody(form) as any, + }), + getDefaultAgent: (url: string) => undefined, + fileFromPath: () => { + throw new Error( + 'The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/anthropics/anthropic-sdk-typescript#file-uploads', + ); + }, + isFsReadStream: (value: any) => false, + }; +} diff --git a/vendor/sdk/src/_shims/web-types.d.ts b/vendor/sdk/src/_shims/web-types.d.ts new file mode 100644 index 0000000..4ff3513 --- /dev/null +++ b/vendor/sdk/src/_shims/web-types.d.ts @@ -0,0 +1,83 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ +export type Agent = any; + +declare const _fetch: typeof fetch; +export { _fetch as fetch }; + +type _Request = Request; +export { _Request as Request }; + +type _RequestInfo = RequestInfo; +export { type _RequestInfo as RequestInfo }; + +type _RequestInit = RequestInit; +export { type _RequestInit as RequestInit }; + +type _Response = Response; +export { _Response as Response }; + +type _ResponseInit = ResponseInit; +export { type _ResponseInit as ResponseInit }; + +type _ResponseType = ResponseType; +export { type _ResponseType as ResponseType }; + +type _BodyInit = BodyInit; +export { type _BodyInit as BodyInit }; + +type _Headers = Headers; +export { _Headers as Headers }; + +type _HeadersInit = HeadersInit; +export { type _HeadersInit as HeadersInit }; + +type EndingType = 'native' | 'transparent'; + +export interface BlobPropertyBag { + endings?: EndingType; + type?: string; +} + +export interface FilePropertyBag extends BlobPropertyBag { + lastModified?: number; +} + +export type FileFromPathOptions = Omit; + +type _FormData = FormData; +declare const _FormData: typeof FormData; +export { _FormData as FormData }; + +type _File = File; +declare const _File: typeof File; +export { _File as File }; + +type _Blob = Blob; +declare const _Blob: typeof Blob; +export { _Blob as Blob }; + +export declare class Readable { + readable: boolean; + readonly readableEnded: boolean; + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + readonly readableObjectMode: boolean; + destroyed: boolean; + read(size?: number): any; + pause(): this; + resume(): this; + isPaused(): boolean; + destroy(error?: Error): this; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +export declare class FsReadStream extends Readable { + path: {}; // node type is string | Buffer +} + +type _ReadableStream = ReadableStream; +declare const _ReadableStream: typeof ReadableStream; +export { _ReadableStream as ReadableStream }; diff --git a/vendor/sdk/src/_shims/web-types.js b/vendor/sdk/src/_shims/web-types.js new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/web-types.js @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_shims/web-types.mjs b/vendor/sdk/src/_shims/web-types.mjs new file mode 100644 index 0000000..ddbdb79 --- /dev/null +++ b/vendor/sdk/src/_shims/web-types.mjs @@ -0,0 +1,3 @@ +/** + * Disclaimer: modules in _shims aren't intended to be imported by SDK users. + */ diff --git a/vendor/sdk/src/_vendor/partial-json-parser/README.md b/vendor/sdk/src/_vendor/partial-json-parser/README.md new file mode 100644 index 0000000..bc6ea4e --- /dev/null +++ b/vendor/sdk/src/_vendor/partial-json-parser/README.md @@ -0,0 +1,3 @@ +# Partial JSON Parser + +Vendored from https://www.npmjs.com/package/partial-json-parser and updated to use TypeScript. diff --git a/vendor/sdk/src/_vendor/partial-json-parser/parser.ts b/vendor/sdk/src/_vendor/partial-json-parser/parser.ts new file mode 100644 index 0000000..9470c46 --- /dev/null +++ b/vendor/sdk/src/_vendor/partial-json-parser/parser.ts @@ -0,0 +1,264 @@ +type Token = { + type: string; + value: string; +}; + +const tokenize = (input: string): Token[] => { + let current = 0; + let tokens: Token[] = []; + + while (current < input.length) { + let char = input[current]; + + if (char === '\\') { + current++; + continue; + } + + if (char === '{') { + tokens.push({ + type: 'brace', + value: '{', + }); + + current++; + continue; + } + + if (char === '}') { + tokens.push({ + type: 'brace', + value: '}', + }); + + current++; + continue; + } + + if (char === '[') { + tokens.push({ + type: 'paren', + value: '[', + }); + + current++; + continue; + } + + if (char === ']') { + tokens.push({ + type: 'paren', + value: ']', + }); + + current++; + continue; + } + + if (char === ':') { + tokens.push({ + type: 'separator', + value: ':', + }); + + current++; + continue; + } + + if (char === ',') { + tokens.push({ + type: 'delimiter', + value: ',', + }); + + current++; + continue; + } + + if (char === '"') { + let value = ''; + let danglingQuote = false; + + char = input[++current]; + + while (char !== '"') { + if (current === input.length) { + danglingQuote = true; + break; + } + + if (char === '\\') { + current++; + if (current === input.length) { + danglingQuote = true; + break; + } + value += char + input[current]; + char = input[++current]; + } else { + value += char; + char = input[++current]; + } + } + + char = input[++current]; + + if (!danglingQuote) { + tokens.push({ + type: 'string', + value, + }); + } + continue; + } + + let WHITESPACE = /\s/; + if (char && WHITESPACE.test(char)) { + current++; + continue; + } + + let NUMBERS = /[0-9]/; + if ((char && NUMBERS.test(char)) || char === '-' || char === '.') { + let value = ''; + + if (char === '-') { + value += char; + char = input[++current]; + } + + while ((char && NUMBERS.test(char)) || char === '.') { + value += char; + char = input[++current]; + } + + tokens.push({ + type: 'number', + value, + }); + continue; + } + + let LETTERS = /[a-z]/i; + if (char && LETTERS.test(char)) { + let value = ''; + + while (char && LETTERS.test(char)) { + if (current === input.length) { + break; + } + value += char; + char = input[++current]; + } + + if (value == 'true' || value == 'false' || value === 'null') { + tokens.push({ + type: 'name', + value, + }); + } else { + // unknown token, e.g. `nul` which isn't quite `null` + current++; + continue; + } + continue; + } + + current++; + } + + return tokens; + }, + strip = (tokens: Token[]): Token[] => { + if (tokens.length === 0) { + return tokens; + } + + let lastToken = tokens[tokens.length - 1]!; + + switch (lastToken.type) { + case 'separator': + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + break; + case 'number': + let lastCharacterOfLastToken = lastToken.value[lastToken.value.length - 1]; + if (lastCharacterOfLastToken === '.' || lastCharacterOfLastToken === '-') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + case 'string': + let tokenBeforeTheLastToken = tokens[tokens.length - 2]; + if (tokenBeforeTheLastToken?.type === 'delimiter') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } else if (tokenBeforeTheLastToken?.type === 'brace' && tokenBeforeTheLastToken.value === '{') { + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + } + break; + case 'delimiter': + tokens = tokens.slice(0, tokens.length - 1); + return strip(tokens); + break; + } + + return tokens; + }, + unstrip = (tokens: Token[]): Token[] => { + let tail: string[] = []; + + tokens.map((token) => { + if (token.type === 'brace') { + if (token.value === '{') { + tail.push('}'); + } else { + tail.splice(tail.lastIndexOf('}'), 1); + } + } + if (token.type === 'paren') { + if (token.value === '[') { + tail.push(']'); + } else { + tail.splice(tail.lastIndexOf(']'), 1); + } + } + }); + + if (tail.length > 0) { + tail.reverse().map((item) => { + if (item === '}') { + tokens.push({ + type: 'brace', + value: '}', + }); + } else if (item === ']') { + tokens.push({ + type: 'paren', + value: ']', + }); + } + }); + } + + return tokens; + }, + generate = (tokens: Token[]): string => { + let output = ''; + + tokens.map((token) => { + switch (token.type) { + case 'string': + output += '"' + token.value + '"'; + break; + default: + output += token.value; + break; + } + }); + + return output; + }, + partialParse = (input: string): unknown => JSON.parse(generate(unstrip(strip(tokenize(input))))); + +export { partialParse }; diff --git a/vendor/sdk/src/core.ts b/vendor/sdk/src/core.ts new file mode 100644 index 0000000..9e64856 --- /dev/null +++ b/vendor/sdk/src/core.ts @@ -0,0 +1,1250 @@ +import { VERSION } from "./version.js"; +import { Stream } from "./streaming.js"; +import { + AnthropicError, + APIError, + APIConnectionError, + APIConnectionTimeoutError, + APIUserAbortError, +} from "./error.js"; +import { + kind as shimsKind, + type Readable, + getDefaultAgent, + type Agent, + fetch, + type RequestInfo, + type RequestInit, + type Response, + type HeadersInit, +} from "./_shims/index.js"; +export { type Response }; +import { BlobLike, isBlobLike, isMultipartBody } from "./uploads.js"; +export { + maybeMultipartFormRequestOptions, + multipartFormRequestOptions, + createForm, + type Uploadable, +} from "./uploads.js"; + +export type Fetch = (url: RequestInfo, init?: RequestInit) => Promise; + +type PromiseOrValue = T | Promise; + +type APIResponseProps = { + response: Response; + options: FinalRequestOptions; + controller: AbortController; +}; + +async function defaultParseResponse(props: APIResponseProps): Promise> { + const { response } = props; + if (props.options.stream) { + debug('response', response.status, response.url, response.headers, response.body); + + // Note: there is an invariant here that isn't represented in the type system + // that if you set `stream: true` the response type must also be `Stream` + + if (props.options.__streamClass) { + return props.options.__streamClass.fromSSEResponse(response, props.controller) as any; + } + + return Stream.fromSSEResponse(response, props.controller) as any; + } + + // fetch refuses to read the body when the status code is 204. + if (response.status === 204) { + return null as WithRequestID; + } + + if (props.options.__binaryResponse) { + return response as unknown as WithRequestID; + } + + const contentType = response.headers.get('content-type'); + const isJSON = + contentType?.includes('application/json') || contentType?.includes('application/vnd.api+json'); + if (isJSON) { + const json = await response.json(); + + debug('response', response.status, response.url, response.headers, json); + + return _addRequestID(json as T, response); + } + + const text = await response.text(); + debug('response', response.status, response.url, response.headers, text); + + // TODO handle blob, arraybuffer, other content types, etc. + return text as unknown as WithRequestID; +} + +type WithRequestID = + T extends Array | Response | AbstractPage ? T + : T extends Record ? T & { _request_id?: string | null } + : T; + +function _addRequestID(value: T, response: Response): WithRequestID { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + return value as WithRequestID; + } + + return Object.defineProperty(value, '_request_id', { + value: response.headers.get('request-id'), + enumerable: false, + }) as WithRequestID; +} + +/** + * A subclass of `Promise` providing additional helper methods + * for interacting with the SDK. + */ +export class APIPromise extends Promise> { + private parsedPromise: Promise> | undefined; + + constructor( + private responsePromise: Promise, + private parseResponse: ( + props: APIResponseProps, + ) => PromiseOrValue> = defaultParseResponse, + ) { + super((resolve) => { + // this is maybe a bit weird but this has to be a no-op to not implicitly + // parse the response body; instead .then, .catch, .finally are overridden + // to parse the response + resolve(null as any); + }); + } + + _thenUnwrap(transform: (data: T, props: APIResponseProps) => U): APIPromise { + return new APIPromise(this.responsePromise, async (props) => + _addRequestID(transform(await this.parseResponse(props), props), props.response), + ); + } + + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + asResponse(): Promise { + return this.responsePromise.then((p) => p.response); + } + + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` if you can, + * or add one of these imports before your first `import … from '@anthropic-ai/sdk'`: + * - `import '@anthropic-ai/sdk/shims/node'` (if you're running on Node) + * - `import '@anthropic-ai/sdk/shims/web'` (otherwise) + */ + async withResponse(): Promise<{ data: T; response: Response; request_id: string | null | undefined }> { + const [data, response] = await Promise.all([this.parse(), this.asResponse()]); + return { data, response, request_id: response.headers.get('request-id') }; + } + + private parse(): Promise> { + if (!this.parsedPromise) { + this.parsedPromise = this.responsePromise.then(this.parseResponse) as any as Promise>; + } + return this.parsedPromise; + } + + override then, TResult2 = never>( + onfulfilled?: ((value: WithRequestID) => TResult1 | PromiseLike) | undefined | null, + onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null, + ): Promise { + return this.parse().then(onfulfilled, onrejected); + } + + override catch( + onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null, + ): Promise | TResult> { + return this.parse().catch(onrejected); + } + + override finally(onfinally?: (() => void) | undefined | null): Promise> { + return this.parse().finally(onfinally); + } +} + +export abstract class APIClient { + baseURL: string; + maxRetries: number; + timeout: number; + httpAgent: Agent | undefined; + + private fetch: Fetch; + protected idempotencyHeader?: string; + + constructor({ + baseURL, + maxRetries = 2, + timeout = 600000, // 10 minutes + httpAgent, + fetch: overriddenFetch, + }: { + baseURL: string; + maxRetries?: number | undefined; + timeout: number | undefined; + httpAgent: Agent | undefined; + fetch: Fetch | undefined; + }) { + this.baseURL = baseURL; + this.maxRetries = validatePositiveInteger('maxRetries', maxRetries); + this.timeout = validatePositiveInteger('timeout', timeout); + this.httpAgent = httpAgent; + + this.fetch = overriddenFetch ?? fetch; + } + + protected authHeaders(opts: FinalRequestOptions): Headers { + return {}; + } + + /** + * Override this to add your own default headers, for example: + * + * { + * ...super.defaultHeaders(), + * Authorization: 'Bearer 123', + * } + */ + protected defaultHeaders(opts: FinalRequestOptions): Headers { + return { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': this.getUserAgent(), + ...getPlatformHeaders(), + ...this.authHeaders(opts), + }; + } + + protected abstract defaultQuery(): DefaultQuery | undefined; + + /** + * Override this to add your own headers validation: + */ + protected validateHeaders(headers: Headers, customHeaders: Headers) {} + + protected defaultIdempotencyKey(): string { + return `stainless-node-retry-${uuid4()}`; + } + + get(path: string, opts?: PromiseOrValue>): APIPromise { + return this.methodRequest('get', path, opts); + } + + post(path: string, opts?: PromiseOrValue>): APIPromise { + return this.methodRequest('post', path, opts); + } + + patch(path: string, opts?: PromiseOrValue>): APIPromise { + return this.methodRequest('patch', path, opts); + } + + put(path: string, opts?: PromiseOrValue>): APIPromise { + return this.methodRequest('put', path, opts); + } + + delete(path: string, opts?: PromiseOrValue>): APIPromise { + return this.methodRequest('delete', path, opts); + } + + private methodRequest( + method: HTTPMethod, + path: string, + opts?: PromiseOrValue>, + ): APIPromise { + return this.request( + Promise.resolve(opts).then(async (opts) => { + const body = + opts && isBlobLike(opts?.body) ? new DataView(await opts.body.arrayBuffer()) + : opts?.body instanceof DataView ? opts.body + : opts?.body instanceof ArrayBuffer ? new DataView(opts.body) + : opts && ArrayBuffer.isView(opts?.body) ? new DataView(opts.body.buffer) + : opts?.body; + return { method, path, ...opts, body }; + }), + ); + } + + getAPIList = AbstractPage>( + path: string, + Page: new (...args: any[]) => PageClass, + opts?: RequestOptions, + ): PagePromise { + return this.requestAPIList(Page, { method: 'get', path, ...opts }); + } + + private calculateContentLength(body: unknown): string | null { + if (typeof body === 'string') { + if (typeof Buffer !== 'undefined') { + return Buffer.byteLength(body, 'utf8').toString(); + } + + if (typeof TextEncoder !== 'undefined') { + const encoder = new TextEncoder(); + const encoded = encoder.encode(body); + return encoded.length.toString(); + } + } else if (ArrayBuffer.isView(body)) { + return body.byteLength.toString(); + } + + return null; + } + + buildRequest( + options: FinalRequestOptions, + { retryCount = 0 }: { retryCount?: number } = {}, + ): { req: RequestInit; url: string; timeout: number } { + options = { ...options }; + const { method, path, query, headers: headers = {} } = options; + + const body = + ArrayBuffer.isView(options.body) || (options.__binaryRequest && typeof options.body === 'string') ? + options.body + : isMultipartBody(options.body) ? options.body.body + : options.body ? JSON.stringify(options.body, null, 2) + : null; + const contentLength = this.calculateContentLength(body); + + const url = this.buildURL(path!, query); + if ('timeout' in options) validatePositiveInteger('timeout', options.timeout); + options.timeout = options.timeout ?? this.timeout; + const httpAgent = options.httpAgent ?? this.httpAgent ?? getDefaultAgent(url); + const minAgentTimeout = options.timeout + 1000; + if ( + typeof (httpAgent as any)?.options?.timeout === 'number' && + minAgentTimeout > ((httpAgent as any).options.timeout ?? 0) + ) { + // Allow any given request to bump our agent active socket timeout. + // This may seem strange, but leaking active sockets should be rare and not particularly problematic, + // and without mutating agent we would need to create more of them. + // This tradeoff optimizes for performance. + (httpAgent as any).options.timeout = minAgentTimeout; + } + + if (this.idempotencyHeader && method !== 'get') { + if (!options.idempotencyKey) options.idempotencyKey = this.defaultIdempotencyKey(); + headers[this.idempotencyHeader] = options.idempotencyKey; + } + + const reqHeaders = this.buildHeaders({ options, headers, contentLength, retryCount }); + + const req: RequestInit = { + method, + ...(body && { body: body as any }), + headers: reqHeaders, + ...(httpAgent && { agent: httpAgent }), + // @ts-ignore node-fetch uses a custom AbortSignal type that is + // not compatible with standard web types + signal: options.signal ?? null, + }; + + return { req, url, timeout: options.timeout }; + } + + private buildHeaders({ + options, + headers, + contentLength, + retryCount, + }: { + options: FinalRequestOptions; + headers: Record; + contentLength: string | null | undefined; + retryCount: number; + }): Record { + const reqHeaders: Record = {}; + if (contentLength) { + reqHeaders['content-length'] = contentLength; + } + + const defaultHeaders = this.defaultHeaders(options); + applyHeadersMut(reqHeaders, defaultHeaders); + applyHeadersMut(reqHeaders, headers); + + // let builtin fetch set the Content-Type for multipart bodies + if (isMultipartBody(options.body) && shimsKind !== 'node') { + delete reqHeaders['content-type']; + } + + // Don't set theses headers if they were already set or removed through default headers or by the caller. + // We check `defaultHeaders` and `headers`, which can contain nulls, instead of `reqHeaders` to account + // for the removal case. + if ( + getHeader(defaultHeaders, 'x-stainless-retry-count') === undefined && + getHeader(headers, 'x-stainless-retry-count') === undefined + ) { + reqHeaders['x-stainless-retry-count'] = String(retryCount); + } + if ( + getHeader(defaultHeaders, 'x-stainless-timeout') === undefined && + getHeader(headers, 'x-stainless-timeout') === undefined && + options.timeout + ) { + reqHeaders['x-stainless-timeout'] = String(options.timeout); + } + + this.validateHeaders(reqHeaders, headers); + + return reqHeaders; + } + + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + protected async prepareOptions(options: FinalRequestOptions): Promise {} + + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + */ + protected async prepareRequest( + request: RequestInit, + { url, options }: { url: string; options: FinalRequestOptions }, + ): Promise {} + + protected parseHeaders(headers: HeadersInit | null | undefined): Record { + return ( + !headers ? {} + : Symbol.iterator in headers ? + Object.fromEntries(Array.from(headers as Iterable).map((header) => [...header])) + : { ...headers } + ); + } + + protected makeStatusError( + status: number | undefined, + error: Object | undefined, + message: string | undefined, + headers: Headers | undefined, + ): APIError { + return APIError.generate(status, error, message, headers); + } + + request( + options: PromiseOrValue>, + remainingRetries: number | null = null, + ): APIPromise { + return new APIPromise(this.makeRequest(options, remainingRetries)); + } + + private async makeRequest( + optionsInput: PromiseOrValue>, + retriesRemaining: number | null, + ): Promise { + const options = await optionsInput; + const maxRetries = options.maxRetries ?? this.maxRetries; + if (retriesRemaining == null) { + retriesRemaining = maxRetries; + } + + await this.prepareOptions(options); + + const { req, url, timeout } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining }); + + await this.prepareRequest(req, { url, options }); + + debug('request', url, options, req.headers); + + if (options.signal?.aborted) { + throw new APIUserAbortError(); + } + + const controller = new AbortController(); + const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError); + + if (response instanceof Error) { + if (options.signal?.aborted) { + throw new APIUserAbortError(); + } + if (retriesRemaining) { + return this.retryRequest(options, retriesRemaining); + } + if (response.name === 'AbortError') { + throw new APIConnectionTimeoutError(); + } + throw new APIConnectionError({ cause: response }); + } + + const responseHeaders = createResponseHeaders(response.headers); + + if (!response.ok) { + if (retriesRemaining && this.shouldRetry(response)) { + const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; + debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders); + return this.retryRequest(options, retriesRemaining, responseHeaders); + } + + const errText = await response.text().catch((e) => castToError(e).message); + const errJSON = safeJSON(errText); + const errMessage = errJSON ? undefined : errText; + const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`; + + debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage); + + const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders); + throw err; + } + + return { response, options, controller }; + } + + requestAPIList = AbstractPage>( + Page: new (...args: ConstructorParameters) => PageClass, + options: FinalRequestOptions, + ): PagePromise { + const request = this.makeRequest(options, null); + return new PagePromise(this, request, Page); + } + + buildURL(path: string, query: Req | null | undefined): string { + const url = + isAbsoluteURL(path) ? + new URL(path) + : new URL(this.baseURL + (this.baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path)); + + const defaultQuery = this.defaultQuery(); + if (!isEmptyObj(defaultQuery)) { + query = { ...defaultQuery, ...query } as Req; + } + + if (typeof query === 'object' && query && !Array.isArray(query)) { + url.search = this.stringifyQuery(query as Record); + } + + return url.toString(); + } + + protected stringifyQuery(query: Record): string { + return Object.entries(query) + .filter(([_, value]) => typeof value !== 'undefined') + .map(([key, value]) => { + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + } + if (value === null) { + return `${encodeURIComponent(key)}=`; + } + throw new AnthropicError( + `Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`, + ); + }) + .join('&'); + } + + async fetchWithTimeout( + url: RequestInfo, + init: RequestInit | undefined, + ms: number, + controller: AbortController, + ): Promise { + const { signal, ...options } = init || {}; + if (signal) signal.addEventListener('abort', () => controller.abort()); + + const timeout = setTimeout(() => controller.abort(), ms); + + const fetchOptions = { + signal: controller.signal as any, + ...options, + }; + if (fetchOptions.method) { + // Custom methods like 'patch' need to be uppercased + // See https://github.com/nodejs/undici/issues/2294 + fetchOptions.method = fetchOptions.method.toUpperCase(); + } + + return ( + // use undefined this binding; fetch errors if bound to something else in browser/cloudflare + this.fetch.call(undefined, url, fetchOptions).finally(() => { + clearTimeout(timeout); + }) + ); + } + + private shouldRetry(response: Response): boolean { + // Note this is not a standard header. + const shouldRetryHeader = response.headers.get('x-should-retry'); + + // If the server explicitly says whether or not to retry, obey. + if (shouldRetryHeader === 'true') return true; + if (shouldRetryHeader === 'false') return false; + + // Retry on request timeouts. + if (response.status === 408) return true; + + // Retry on lock timeouts. + if (response.status === 409) return true; + + // Retry on rate limits. + if (response.status === 429) return true; + + // Retry internal errors. + if (response.status >= 500) return true; + + return false; + } + + private async retryRequest( + options: FinalRequestOptions, + retriesRemaining: number, + responseHeaders?: Headers | undefined, + ): Promise { + let timeoutMillis: number | undefined; + + // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it. + const retryAfterMillisHeader = responseHeaders?.['retry-after-ms']; + if (retryAfterMillisHeader) { + const timeoutMs = parseFloat(retryAfterMillisHeader); + if (!Number.isNaN(timeoutMs)) { + timeoutMillis = timeoutMs; + } + } + + // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After + const retryAfterHeader = responseHeaders?.['retry-after']; + if (retryAfterHeader && !timeoutMillis) { + const timeoutSeconds = parseFloat(retryAfterHeader); + if (!Number.isNaN(timeoutSeconds)) { + timeoutMillis = timeoutSeconds * 1000; + } else { + timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); + } + } + + // If the API asks us to wait a certain amount of time (and it's a reasonable amount), + // just do what it says, but otherwise calculate a default + if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) { + const maxRetries = options.maxRetries ?? this.maxRetries; + timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); + } + await sleep(timeoutMillis); + + return this.makeRequest(options, retriesRemaining - 1); + } + + private calculateDefaultRetryTimeoutMillis(retriesRemaining: number, maxRetries: number): number { + const initialRetryDelay = 0.5; + const maxRetryDelay = 8.0; + + const numRetries = maxRetries - retriesRemaining; + + // Apply exponential backoff, but not more than the max. + const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); + + // Apply some jitter, take up to at most 25 percent of the retry time. + const jitter = 1 - Math.random() * 0.25; + + return sleepSeconds * jitter * 1000; + } + + private getUserAgent(): string { + return `${this.constructor.name}/JS ${VERSION}`; + } +} + +export type PageInfo = { url: URL } | { params: Record | null }; + +export abstract class AbstractPage implements AsyncIterable { + #client: APIClient; + protected options: FinalRequestOptions; + + protected response: Response; + protected body: unknown; + + constructor(client: APIClient, response: Response, body: unknown, options: FinalRequestOptions) { + this.#client = client; + this.options = options; + this.response = response; + this.body = body; + } + + /** + * @deprecated Use nextPageInfo instead + */ + abstract nextPageParams(): Partial> | null; + abstract nextPageInfo(): PageInfo | null; + + abstract getPaginatedItems(): Item[]; + + hasNextPage(): boolean { + const items = this.getPaginatedItems(); + if (!items.length) return false; + return this.nextPageInfo() != null; + } + + async getNextPage(): Promise { + const nextInfo = this.nextPageInfo(); + if (!nextInfo) { + throw new AnthropicError( + 'No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.', + ); + } + const nextOptions = { ...this.options }; + if ('params' in nextInfo && typeof nextOptions.query === 'object') { + nextOptions.query = { ...nextOptions.query, ...nextInfo.params }; + } else if ('url' in nextInfo) { + const params = [...Object.entries(nextOptions.query || {}), ...nextInfo.url.searchParams.entries()]; + for (const [key, value] of params) { + nextInfo.url.searchParams.set(key, value as any); + } + nextOptions.query = undefined; + nextOptions.path = nextInfo.url.toString(); + } + return await this.#client.requestAPIList(this.constructor as any, nextOptions); + } + + async *iterPages(): AsyncGenerator { + // eslint-disable-next-line @typescript-eslint/no-this-alias + let page: this = this; + yield page; + while (page.hasNextPage()) { + page = await page.getNextPage(); + yield page; + } + } + + async *[Symbol.asyncIterator](): AsyncGenerator { + for await (const page of this.iterPages()) { + for (const item of page.getPaginatedItems()) { + yield item; + } + } + } +} + +/** + * This subclass of Promise will resolve to an instantiated Page once the request completes. + * + * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ +export class PagePromise< + PageClass extends AbstractPage, + Item = ReturnType[number], + > + extends APIPromise + implements AsyncIterable +{ + constructor( + client: APIClient, + request: Promise, + Page: new (...args: ConstructorParameters) => PageClass, + ) { + super( + request, + async (props) => + new Page( + client, + props.response, + await defaultParseResponse(props), + props.options, + ) as WithRequestID, + ); + } + + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + async *[Symbol.asyncIterator](): AsyncGenerator { + const page = await this; + for await (const item of page) { + yield item; + } + } +} + +export const createResponseHeaders = ( + headers: Awaited>['headers'], +): Record => { + return new Proxy( + Object.fromEntries( + // @ts-ignore + headers.entries(), + ), + { + get(target, name) { + const key = name.toString(); + return target[key.toLowerCase()] || target[key]; + }, + }, + ); +}; + +type HTTPMethod = 'get' | 'post' | 'put' | 'patch' | 'delete'; + +export type RequestClient = { fetch: Fetch }; +export type Headers = Record; +export type DefaultQuery = Record; +export type KeysEnum = { [P in keyof Required]: true }; + +export type RequestOptions< + Req = unknown | Record | Readable | BlobLike | ArrayBufferView | ArrayBuffer, +> = { + method?: HTTPMethod; + path?: string; + query?: Req | undefined; + body?: Req | null | undefined; + headers?: Headers | undefined; + + maxRetries?: number; + stream?: boolean | undefined; + timeout?: number; + httpAgent?: Agent; + signal?: AbortSignal | undefined | null; + idempotencyKey?: string; + + __binaryRequest?: boolean | undefined; + __binaryResponse?: boolean | undefined; + __streamClass?: typeof Stream; +}; + +// This is required so that we can determine if a given object matches the RequestOptions +// type at runtime. While this requires duplication, it is enforced by the TypeScript +// compiler such that any missing / extraneous keys will cause an error. +const requestOptionsKeys: KeysEnum = { + method: true, + path: true, + query: true, + body: true, + headers: true, + + maxRetries: true, + stream: true, + timeout: true, + httpAgent: true, + signal: true, + idempotencyKey: true, + + __binaryRequest: true, + __binaryResponse: true, + __streamClass: true, +}; + +export const isRequestOptions = (obj: unknown): obj is RequestOptions => { + return ( + typeof obj === 'object' && + obj !== null && + !isEmptyObj(obj) && + Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k)) + ); +}; + +export type FinalRequestOptions | Readable | DataView> = + RequestOptions & { + method: HTTPMethod; + path: string; + }; + +declare const Deno: any; +declare const EdgeRuntime: any; +type Arch = 'x32' | 'x64' | 'arm' | 'arm64' | `other:${string}` | 'unknown'; +type PlatformName = + | 'MacOS' + | 'Linux' + | 'Windows' + | 'FreeBSD' + | 'OpenBSD' + | 'iOS' + | 'Android' + | `Other:${string}` + | 'Unknown'; +type Browser = 'ie' | 'edge' | 'chrome' | 'firefox' | 'safari'; +type PlatformProperties = { + 'X-Stainless-Lang': 'js'; + 'X-Stainless-Package-Version': string; + 'X-Stainless-OS': PlatformName; + 'X-Stainless-Arch': Arch; + 'X-Stainless-Runtime': 'node' | 'deno' | 'edge' | `browser:${Browser}` | 'unknown'; + 'X-Stainless-Runtime-Version': string; +}; +const getPlatformProperties = (): PlatformProperties => { + if (typeof Deno !== 'undefined' && Deno.build != null) { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': normalizePlatform(Deno.build.os), + 'X-Stainless-Arch': normalizeArch(Deno.build.arch), + 'X-Stainless-Runtime': 'deno', + 'X-Stainless-Runtime-Version': + typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown', + }; + } + if (typeof EdgeRuntime !== 'undefined') { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': `other:${EdgeRuntime}`, + 'X-Stainless-Runtime': 'edge', + 'X-Stainless-Runtime-Version': process.version, + }; + } + // Check if Node.js + if (Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]') { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': normalizePlatform(process.platform), + 'X-Stainless-Arch': normalizeArch(process.arch), + 'X-Stainless-Runtime': 'node', + 'X-Stainless-Runtime-Version': process.version, + }; + } + + const browserInfo = getBrowserInfo(); + if (browserInfo) { + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': 'unknown', + 'X-Stainless-Runtime': `browser:${browserInfo.browser}`, + 'X-Stainless-Runtime-Version': browserInfo.version, + }; + } + + // TODO add support for Cloudflare workers, etc. + return { + 'X-Stainless-Lang': 'js', + 'X-Stainless-Package-Version': VERSION, + 'X-Stainless-OS': 'Unknown', + 'X-Stainless-Arch': 'unknown', + 'X-Stainless-Runtime': 'unknown', + 'X-Stainless-Runtime-Version': 'unknown', + }; +}; + +type BrowserInfo = { + browser: Browser; + version: string; +}; + +declare const navigator: { userAgent: string } | undefined; + +// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts +function getBrowserInfo(): BrowserInfo | null { + if (typeof navigator === 'undefined' || !navigator) { + return null; + } + + // NOTE: The order matters here! + const browserPatterns = [ + { key: 'edge' as const, pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'ie' as const, pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'ie' as const, pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'chrome' as const, pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'firefox' as const, pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: 'safari' as const, pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ }, + ]; + + // Find the FIRST matching browser + for (const { key, pattern } of browserPatterns) { + const match = pattern.exec(navigator.userAgent); + if (match) { + const major = match[1] || 0; + const minor = match[2] || 0; + const patch = match[3] || 0; + + return { browser: key, version: `${major}.${minor}.${patch}` }; + } + } + + return null; +} + +const normalizeArch = (arch: string): Arch => { + // Node docs: + // - https://nodejs.org/api/process.html#processarch + // Deno docs: + // - https://doc.deno.land/deno/stable/~/Deno.build + if (arch === 'x32') return 'x32'; + if (arch === 'x86_64' || arch === 'x64') return 'x64'; + if (arch === 'arm') return 'arm'; + if (arch === 'aarch64' || arch === 'arm64') return 'arm64'; + if (arch) return `other:${arch}`; + return 'unknown'; +}; + +const normalizePlatform = (platform: string): PlatformName => { + // Node platforms: + // - https://nodejs.org/api/process.html#processplatform + // Deno platforms: + // - https://doc.deno.land/deno/stable/~/Deno.build + // - https://github.com/denoland/deno/issues/14799 + + platform = platform.toLowerCase(); + + // NOTE: this iOS check is untested and may not work + // Node does not work natively on IOS, there is a fork at + // https://github.com/nodejs-mobile/nodejs-mobile + // however it is unknown at the time of writing how to detect if it is running + if (platform.includes('ios')) return 'iOS'; + if (platform === 'android') return 'Android'; + if (platform === 'darwin') return 'MacOS'; + if (platform === 'win32') return 'Windows'; + if (platform === 'freebsd') return 'FreeBSD'; + if (platform === 'openbsd') return 'OpenBSD'; + if (platform === 'linux') return 'Linux'; + if (platform) return `Other:${platform}`; + return 'Unknown'; +}; + +let _platformHeaders: PlatformProperties; +const getPlatformHeaders = () => { + return (_platformHeaders ??= getPlatformProperties()); +}; + +export const safeJSON = (text: string) => { + try { + return JSON.parse(text); + } catch (err) { + return undefined; + } +}; + +// https://url.spec.whatwg.org/#url-scheme-string +const startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; +const isAbsoluteURL = (url: string): boolean => { + return startsWithSchemeRegexp.test(url); +}; + +export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +const validatePositiveInteger = (name: string, n: unknown): number => { + if (typeof n !== 'number' || !Number.isInteger(n)) { + throw new AnthropicError(`${name} must be an integer`); + } + if (n < 0) { + throw new AnthropicError(`${name} must be a positive integer`); + } + return n; +}; + +export const castToError = (err: any): Error => { + if (err instanceof Error) return err; + if (typeof err === 'object' && err !== null) { + try { + return new Error(JSON.stringify(err)); + } catch {} + } + return new Error(String(err)); +}; + +export const ensurePresent = (value: T | null | undefined): T => { + if (value == null) throw new AnthropicError(`Expected a value to be given but received ${value} instead.`); + return value; +}; + +/** + * Read an environment variable. + * + * Trims beginning and trailing whitespace. + * + * Will return undefined if the environment variable doesn't exist or cannot be accessed. + */ +export const readEnv = (env: string): string | undefined => { + if (typeof process !== 'undefined') { + return process.env?.[env]?.trim() ?? undefined; + } + if (typeof Deno !== 'undefined') { + return Deno.env?.get?.(env)?.trim(); + } + return undefined; +}; + +export const coerceInteger = (value: unknown): number => { + if (typeof value === 'number') return Math.round(value); + if (typeof value === 'string') return parseInt(value, 10); + + throw new AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`); +}; + +export const coerceFloat = (value: unknown): number => { + if (typeof value === 'number') return value; + if (typeof value === 'string') return parseFloat(value); + + throw new AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`); +}; + +export const coerceBoolean = (value: unknown): boolean => { + if (typeof value === 'boolean') return value; + if (typeof value === 'string') return value === 'true'; + return Boolean(value); +}; + +export const maybeCoerceInteger = (value: unknown): number | undefined => { + if (value === undefined) { + return undefined; + } + return coerceInteger(value); +}; + +export const maybeCoerceFloat = (value: unknown): number | undefined => { + if (value === undefined) { + return undefined; + } + return coerceFloat(value); +}; + +export const maybeCoerceBoolean = (value: unknown): boolean | undefined => { + if (value === undefined) { + return undefined; + } + return coerceBoolean(value); +}; + +// https://stackoverflow.com/a/34491287 +export function isEmptyObj(obj: Object | null | undefined): boolean { + if (!obj) return true; + for (const _k in obj) return false; + return true; +} + +// https://eslint.org/docs/latest/rules/no-prototype-builtins +export function hasOwn(obj: Object, key: string): boolean { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +/** + * Copies headers from "newHeaders" onto "targetHeaders", + * using lower-case for all properties, + * ignoring any keys with undefined values, + * and deleting any keys with null values. + */ +function applyHeadersMut(targetHeaders: Headers, newHeaders: Headers): void { + for (const k in newHeaders) { + if (!hasOwn(newHeaders, k)) continue; + const lowerKey = k.toLowerCase(); + if (!lowerKey) continue; + + const val = newHeaders[k]; + + if (val === null) { + delete targetHeaders[lowerKey]; + } else if (val !== undefined) { + targetHeaders[lowerKey] = val; + } + } +} + +export function debug(action: string, ...args: any[]) { + if (typeof process !== 'undefined' && process?.env?.['DEBUG'] === 'true') { + console.log(`Anthropic:DEBUG:${action}`, ...args); + } +} + +/** + * https://stackoverflow.com/a/2117523 + */ +const uuid4 = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +}; + +export const isRunningInBrowser = () => { + return ( + // @ts-ignore + typeof window !== 'undefined' && + // @ts-ignore + typeof window.document !== 'undefined' && + // @ts-ignore + typeof navigator !== 'undefined' + ); +}; + +export interface HeadersProtocol { + get: (header: string) => string | null | undefined; +} +export type HeadersLike = Record | HeadersProtocol; + +export const isHeadersProtocol = (headers: any): headers is HeadersProtocol => { + return typeof headers?.get === 'function'; +}; + +export const getRequiredHeader = (headers: HeadersLike | Headers, header: string): string => { + const foundHeader = getHeader(headers, header); + if (foundHeader === undefined) { + throw new Error(`Could not find ${header} header`); + } + return foundHeader; +}; + +export const getHeader = (headers: HeadersLike | Headers, header: string): string | undefined => { + const lowerCasedHeader = header.toLowerCase(); + if (isHeadersProtocol(headers)) { + // to deal with the case where the header looks like Stainless-Event-Id + const intercapsHeader = + header[0]?.toUpperCase() + + header.substring(1).replace(/([^\w])(\w)/g, (_m, g1, g2) => g1 + g2.toUpperCase()); + for (const key of [header, lowerCasedHeader, header.toUpperCase(), intercapsHeader]) { + const value = headers.get(key); + if (value) { + return value; + } + } + } + + for (const [key, value] of Object.entries(headers)) { + if (key.toLowerCase() === lowerCasedHeader) { + if (Array.isArray(value)) { + if (value.length <= 1) return value[0]; + console.warn(`Received ${value.length} entries for the ${header} header, using the first entry.`); + return value[0]; + } + return value; + } + } + + return undefined; +}; + +/** + * Encodes a string to Base64 format. + */ +export const toBase64 = (str: string | null | undefined): string => { + if (!str) return ''; + if (typeof Buffer !== 'undefined') { + return Buffer.from(str).toString('base64'); + } + + if (typeof btoa !== 'undefined') { + return btoa(str); + } + + throw new AnthropicError('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined'); +}; + +export function isObj(obj: unknown): obj is Record { + return obj != null && typeof obj === 'object' && !Array.isArray(obj); +} diff --git a/vendor/sdk/src/error.ts b/vendor/sdk/src/error.ts new file mode 100644 index 0000000..4d12b63 --- /dev/null +++ b/vendor/sdk/src/error.ts @@ -0,0 +1,133 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { castToError, Headers } from "./core.js"; + +export class AnthropicError extends Error {} + +export class APIError< + TStatus extends number | undefined = number | undefined, + THeaders extends Headers | undefined = Headers | undefined, + TError extends Object | undefined = Object | undefined, +> extends AnthropicError { + /** HTTP status for the response that caused the error */ + readonly status: TStatus; + /** HTTP headers for the response that caused the error */ + readonly headers: THeaders; + /** JSON body of the response that caused the error */ + readonly error: TError; + + readonly request_id: string | null | undefined; + + constructor(status: TStatus, error: TError, message: string | undefined, headers: THeaders) { + super(`${APIError.makeMessage(status, error, message)}`); + this.status = status; + this.headers = headers; + this.request_id = headers?.['request-id']; + this.error = error; + } + + private static makeMessage(status: number | undefined, error: any, message: string | undefined) { + const msg = + error?.message ? + typeof error.message === 'string' ? + error.message + : JSON.stringify(error.message) + : error ? JSON.stringify(error) + : message; + + if (status && msg) { + return `${status} ${msg}`; + } + if (status) { + return `${status} status code (no body)`; + } + if (msg) { + return msg; + } + return '(no status code or body)'; + } + + static generate( + status: number | undefined, + errorResponse: Object | undefined, + message: string | undefined, + headers: Headers | undefined, + ): APIError { + if (!status || !headers) { + return new APIConnectionError({ message, cause: castToError(errorResponse) }); + } + + const error = errorResponse as Record; + + if (status === 400) { + return new BadRequestError(status, error, message, headers); + } + + if (status === 401) { + return new AuthenticationError(status, error, message, headers); + } + + if (status === 403) { + return new PermissionDeniedError(status, error, message, headers); + } + + if (status === 404) { + return new NotFoundError(status, error, message, headers); + } + + if (status === 409) { + return new ConflictError(status, error, message, headers); + } + + if (status === 422) { + return new UnprocessableEntityError(status, error, message, headers); + } + + if (status === 429) { + return new RateLimitError(status, error, message, headers); + } + + if (status >= 500) { + return new InternalServerError(status, error, message, headers); + } + + return new APIError(status, error, message, headers); + } +} + +export class APIUserAbortError extends APIError { + constructor({ message }: { message?: string } = {}) { + super(undefined, undefined, message || 'Request was aborted.', undefined); + } +} + +export class APIConnectionError extends APIError { + constructor({ message, cause }: { message?: string | undefined; cause?: Error | undefined }) { + super(undefined, undefined, message || 'Connection error.', undefined); + // in some environments the 'cause' property is already declared + // @ts-ignore + if (cause) this.cause = cause; + } +} + +export class APIConnectionTimeoutError extends APIConnectionError { + constructor({ message }: { message?: string } = {}) { + super({ message: message ?? 'Request timed out.' }); + } +} + +export class BadRequestError extends APIError<400, Headers> {} + +export class AuthenticationError extends APIError<401, Headers> {} + +export class PermissionDeniedError extends APIError<403, Headers> {} + +export class NotFoundError extends APIError<404, Headers> {} + +export class ConflictError extends APIError<409, Headers> {} + +export class UnprocessableEntityError extends APIError<422, Headers> {} + +export class RateLimitError extends APIError<429, Headers> {} + +export class InternalServerError extends APIError {} diff --git a/vendor/sdk/src/index.ts b/vendor/sdk/src/index.ts new file mode 100644 index 0000000..05de0e7 --- /dev/null +++ b/vendor/sdk/src/index.ts @@ -0,0 +1,465 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { type Agent } from "./_shims/index.js"; +import * as Core from "./core.js"; +import * as Errors from "./error.js"; +import * as Pagination from "./pagination.js"; +import { type PageParams, PageResponse } from "./pagination.js"; +import * as Uploads from "./uploads.js"; +import * as API from "./resources/index.js"; +import { + Completion, + CompletionCreateParams, + CompletionCreateParamsNonStreaming, + CompletionCreateParamsStreaming, + Completions, +} from "./resources/completions.js"; +import { ModelInfo, ModelInfosPage, ModelListParams, Models } from "./resources/models.js"; +import { + AnthropicBeta, + Beta, + BetaAPIError, + BetaAuthenticationError, + BetaBillingError, + BetaError, + BetaErrorResponse, + BetaGatewayTimeoutError, + BetaInvalidRequestError, + BetaNotFoundError, + BetaOverloadedError, + BetaPermissionError, + BetaRateLimitError, +} from "./resources/beta/beta.js"; +import { + Base64PDFSource, + CacheControlEphemeral, + CitationCharLocation, + CitationCharLocationParam, + CitationContentBlockLocation, + CitationContentBlockLocationParam, + CitationPageLocation, + CitationPageLocationParam, + CitationsConfigParam, + CitationsDelta, + ContentBlock, + ContentBlockDeltaEvent, + ContentBlockParam, + ContentBlockSource, + ContentBlockSourceContent, + ContentBlockStartEvent, + ContentBlockStopEvent, + DocumentBlockParam, + ImageBlockParam, + InputJSONDelta, + Message, + MessageCountTokensParams, + MessageCreateParams, + MessageCreateParamsNonStreaming, + MessageCreateParamsStreaming, + MessageDeltaEvent, + MessageDeltaUsage, + MessageParam, + MessageStartEvent, + MessageStopEvent, + MessageStreamEvent, + MessageStreamParams, + MessageTokensCount, + Messages, + Metadata, + Model, + PlainTextSource, + RawContentBlockDeltaEvent, + RawContentBlockStartEvent, + RawContentBlockStopEvent, + RawMessageDeltaEvent, + RawMessageStartEvent, + RawMessageStopEvent, + RawMessageStreamEvent, + RedactedThinkingBlock, + RedactedThinkingBlockParam, + SignatureDelta, + TextBlock, + TextBlockParam, + TextCitation, + TextCitationParam, + TextDelta, + ThinkingBlock, + ThinkingBlockParam, + ThinkingConfigDisabled, + ThinkingConfigEnabled, + ThinkingDelta, + Tool, + ToolChoice, + ToolChoiceAny, + ToolChoiceAuto, + ToolChoiceTool, + ToolResultBlockParam, + ToolUseBlock, + ToolUseBlockParam, + Usage, +} from "./resources/messages/messages.js"; + +export interface ClientOptions { + /** + * Defaults to process.env['ANTHROPIC_API_KEY']. + */ + apiKey?: string | null | undefined; + + /** + * Defaults to process.env['ANTHROPIC_AUTH_TOKEN']. + */ + authToken?: string | null | undefined; + + /** + * Override the default base URL for the API, e.g., "https://api.example.com/v2/" + * + * Defaults to process.env['ANTHROPIC_BASE_URL']. + */ + baseURL?: string | null | undefined; + + /** + * The maximum amount of time (in milliseconds) that the client should wait for a response + * from the server before timing out a single request. + * + * Note that request timeouts are retried by default, so in a worst-case scenario you may wait + * much longer than this timeout before the promise succeeds or fails. + */ + timeout?: number | undefined; + + /** + * An HTTP agent used to manage HTTP(S) connections. + * + * If not provided, an agent will be constructed by default in the Node.js environment, + * otherwise no agent is used. + */ + httpAgent?: Agent | undefined; + + /** + * Specify a custom `fetch` function implementation. + * + * If not provided, we use `node-fetch` on Node.js and otherwise expect that `fetch` is + * defined globally. + */ + fetch?: Core.Fetch | undefined; + + /** + * The maximum number of times that the client will retry a request in case of a + * temporary failure, like a network error or a 5XX error from the server. + * + * @default 2 + */ + maxRetries?: number | undefined; + + /** + * Default headers to include with every request to the API. + * + * These can be removed in individual requests by explicitly setting the + * header to `undefined` or `null` in request options. + */ + defaultHeaders?: Core.Headers | undefined; + + /** + * Default query parameters to include with every request to the API. + * + * These can be removed in individual requests by explicitly setting the + * param to `undefined` in request options. + */ + defaultQuery?: Core.DefaultQuery | undefined; + + /** + * By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + * Only set this option to `true` if you understand the risks and have appropriate mitigations in place. + */ + dangerouslyAllowBrowser?: boolean | undefined; +} + +/** + * API Client for interfacing with the Anthropic API. + */ +export class Anthropic extends Core.APIClient { + apiKey: string | null; + authToken: string | null; + + private _options: ClientOptions; + + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections. + * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ + baseURL = Core.readEnv('ANTHROPIC_BASE_URL'), + apiKey = Core.readEnv('ANTHROPIC_API_KEY') ?? null, + authToken = Core.readEnv('ANTHROPIC_AUTH_TOKEN') ?? null, + ...opts + }: ClientOptions = {}) { + const options: ClientOptions = { + apiKey, + authToken, + ...opts, + baseURL: baseURL || `https://api.anthropic.com`, + }; + + if (!options.dangerouslyAllowBrowser && Core.isRunningInBrowser()) { + throw new Errors.AnthropicError( + "It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n", + ); + } + + super({ + baseURL: options.baseURL!, + timeout: options.timeout ?? 600000 /* 10 minutes */, + httpAgent: options.httpAgent, + maxRetries: options.maxRetries, + fetch: options.fetch, + }); + + this._options = options; + + this.apiKey = apiKey; + this.authToken = authToken; + } + + completions: API.Completions = new API.Completions(this); + messages: API.Messages = new API.Messages(this); + models: API.Models = new API.Models(this); + beta: API.Beta = new API.Beta(this); + + protected override defaultQuery(): Core.DefaultQuery | undefined { + return this._options.defaultQuery; + } + + protected override defaultHeaders(opts: Core.FinalRequestOptions): Core.Headers { + return { + ...super.defaultHeaders(opts), + ...(this._options.dangerouslyAllowBrowser ? + { 'anthropic-dangerous-direct-browser-access': 'true' } + : undefined), + 'anthropic-version': '2023-06-01', + ...this._options.defaultHeaders, + }; + } + + protected override validateHeaders(headers: Core.Headers, customHeaders: Core.Headers) { + if (this.apiKey && headers['x-api-key']) { + return; + } + if (customHeaders['x-api-key'] === null) { + return; + } + + if (this.authToken && headers['authorization']) { + return; + } + if (customHeaders['authorization'] === null) { + return; + } + + throw new Error( + 'Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted', + ); + } + + protected override authHeaders(opts: Core.FinalRequestOptions): Core.Headers { + const apiKeyAuth = this.apiKeyAuth(opts); + const bearerAuth = this.bearerAuth(opts); + + if (apiKeyAuth != null && !Core.isEmptyObj(apiKeyAuth)) { + return apiKeyAuth; + } + + if (bearerAuth != null && !Core.isEmptyObj(bearerAuth)) { + return bearerAuth; + } + return {}; + } + + protected apiKeyAuth(opts: Core.FinalRequestOptions): Core.Headers { + if (this.apiKey == null) { + return {}; + } + return { 'X-Api-Key': this.apiKey }; + } + + protected bearerAuth(opts: Core.FinalRequestOptions): Core.Headers { + if (this.authToken == null) { + return {}; + } + return { Authorization: `Bearer ${this.authToken}` }; + } + + static Anthropic = this; + static HUMAN_PROMPT = '\n\nHuman:'; + static AI_PROMPT = '\n\nAssistant:'; + static DEFAULT_TIMEOUT = 600000; // 10 minutes + + static AnthropicError = Errors.AnthropicError; + static APIError = Errors.APIError; + static APIConnectionError = Errors.APIConnectionError; + static APIConnectionTimeoutError = Errors.APIConnectionTimeoutError; + static APIUserAbortError = Errors.APIUserAbortError; + static NotFoundError = Errors.NotFoundError; + static ConflictError = Errors.ConflictError; + static RateLimitError = Errors.RateLimitError; + static BadRequestError = Errors.BadRequestError; + static AuthenticationError = Errors.AuthenticationError; + static InternalServerError = Errors.InternalServerError; + static PermissionDeniedError = Errors.PermissionDeniedError; + static UnprocessableEntityError = Errors.UnprocessableEntityError; + + static toFile = Uploads.toFile; + static fileFromPath = Uploads.fileFromPath; +} + +Anthropic.Completions = Completions; +Anthropic.Messages = Messages; +Anthropic.Models = Models; +Anthropic.ModelInfosPage = ModelInfosPage; +Anthropic.Beta = Beta; +export declare namespace Anthropic { + export type RequestOptions = Core.RequestOptions; + + export import Page = Pagination.Page; + export { type PageParams as PageParams, type PageResponse as PageResponse }; + + export { + Completions as Completions, + type Completion as Completion, + type CompletionCreateParams as CompletionCreateParams, + type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming, + type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming, + }; + + export { + Messages as Messages, + type Base64PDFSource as Base64PDFSource, + type CacheControlEphemeral as CacheControlEphemeral, + type CitationCharLocation as CitationCharLocation, + type CitationCharLocationParam as CitationCharLocationParam, + type CitationContentBlockLocation as CitationContentBlockLocation, + type CitationContentBlockLocationParam as CitationContentBlockLocationParam, + type CitationPageLocation as CitationPageLocation, + type CitationPageLocationParam as CitationPageLocationParam, + type CitationsConfigParam as CitationsConfigParam, + type CitationsDelta as CitationsDelta, + type ContentBlock as ContentBlock, + type ContentBlockDeltaEvent as ContentBlockDeltaEvent, + type ContentBlockParam as ContentBlockParam, + type ContentBlockSource as ContentBlockSource, + type ContentBlockSourceContent as ContentBlockSourceContent, + type ContentBlockStartEvent as ContentBlockStartEvent, + type ContentBlockStopEvent as ContentBlockStopEvent, + type DocumentBlockParam as DocumentBlockParam, + type ImageBlockParam as ImageBlockParam, + type InputJSONDelta as InputJSONDelta, + type Message as Message, + type MessageDeltaEvent as MessageDeltaEvent, + type MessageDeltaUsage as MessageDeltaUsage, + type MessageParam as MessageParam, + type MessageStartEvent as MessageStartEvent, + type MessageStopEvent as MessageStopEvent, + type MessageStreamEvent as MessageStreamEvent, + type MessageTokensCount as MessageTokensCount, + type Metadata as Metadata, + type Model as Model, + type PlainTextSource as PlainTextSource, + type RawContentBlockDeltaEvent as RawContentBlockDeltaEvent, + type RawContentBlockStartEvent as RawContentBlockStartEvent, + type RawContentBlockStopEvent as RawContentBlockStopEvent, + type RawMessageDeltaEvent as RawMessageDeltaEvent, + type RawMessageStartEvent as RawMessageStartEvent, + type RawMessageStopEvent as RawMessageStopEvent, + type RawMessageStreamEvent as RawMessageStreamEvent, + type RedactedThinkingBlock as RedactedThinkingBlock, + type RedactedThinkingBlockParam as RedactedThinkingBlockParam, + type SignatureDelta as SignatureDelta, + type TextBlock as TextBlock, + type TextBlockParam as TextBlockParam, + type TextCitation as TextCitation, + type TextCitationParam as TextCitationParam, + type TextDelta as TextDelta, + type ThinkingBlock as ThinkingBlock, + type ThinkingBlockParam as ThinkingBlockParam, + type ThinkingConfigDisabled as ThinkingConfigDisabled, + type ThinkingConfigEnabled as ThinkingConfigEnabled, + type ThinkingDelta as ThinkingDelta, + type Tool as Tool, + type ToolChoice as ToolChoice, + type ToolChoiceAny as ToolChoiceAny, + type ToolChoiceAuto as ToolChoiceAuto, + type ToolChoiceTool as ToolChoiceTool, + type ToolResultBlockParam as ToolResultBlockParam, + type ToolUseBlock as ToolUseBlock, + type ToolUseBlockParam as ToolUseBlockParam, + type Usage as Usage, + type MessageCreateParams as MessageCreateParams, + type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming as MessageCreateParamsStreaming, + type MessageStreamParams as MessageStreamParams, + type MessageCountTokensParams as MessageCountTokensParams, + }; + + export { + Models as Models, + type ModelInfo as ModelInfo, + ModelInfosPage as ModelInfosPage, + type ModelListParams as ModelListParams, + }; + + export { + Beta as Beta, + type AnthropicBeta as AnthropicBeta, + type BetaAPIError as BetaAPIError, + type BetaAuthenticationError as BetaAuthenticationError, + type BetaBillingError as BetaBillingError, + type BetaError as BetaError, + type BetaErrorResponse as BetaErrorResponse, + type BetaGatewayTimeoutError as BetaGatewayTimeoutError, + type BetaInvalidRequestError as BetaInvalidRequestError, + type BetaNotFoundError as BetaNotFoundError, + type BetaOverloadedError as BetaOverloadedError, + type BetaPermissionError as BetaPermissionError, + type BetaRateLimitError as BetaRateLimitError, + }; + + export type APIErrorObject = API.APIErrorObject; + export type AuthenticationError = API.AuthenticationError; + export type BillingError = API.BillingError; + export type ErrorObject = API.ErrorObject; + export type ErrorResponse = API.ErrorResponse; + export type GatewayTimeoutError = API.GatewayTimeoutError; + export type InvalidRequestError = API.InvalidRequestError; + export type NotFoundError = API.NotFoundError; + export type OverloadedError = API.OverloadedError; + export type PermissionError = API.PermissionError; + export type RateLimitError = API.RateLimitError; +} +export const { HUMAN_PROMPT, AI_PROMPT } = Anthropic; + +export { toFile, fileFromPath } from "./uploads.js"; +export { + AnthropicError, + APIError, + APIConnectionError, + APIConnectionTimeoutError, + APIUserAbortError, + NotFoundError, + ConflictError, + RateLimitError, + BadRequestError, + AuthenticationError, + InternalServerError, + PermissionDeniedError, + UnprocessableEntityError, +} from "./error.js"; + +export default Anthropic; diff --git a/vendor/sdk/src/internal/decoders/jsonl.ts b/vendor/sdk/src/internal/decoders/jsonl.ts new file mode 100644 index 0000000..01a1c8c --- /dev/null +++ b/vendor/sdk/src/internal/decoders/jsonl.ts @@ -0,0 +1,41 @@ +import { AnthropicError } from "../../error.js"; +import { ReadableStreamToAsyncIterable } from "../stream-utils.js"; +import { type Response } from "../../_shims/index.js"; +import { LineDecoder, type Bytes } from "./line.js"; + +export class JSONLDecoder { + controller: AbortController; + + constructor( + private iterator: AsyncIterableIterator, + controller: AbortController, + ) { + this.controller = controller; + } + + private async *decoder(): AsyncIterator { + const lineDecoder = new LineDecoder(); + for await (const chunk of this.iterator) { + for (const line of lineDecoder.decode(chunk)) { + yield JSON.parse(line); + } + } + + for (const line of lineDecoder.flush()) { + yield JSON.parse(line); + } + } + + [Symbol.asyncIterator](): AsyncIterator { + return this.decoder(); + } + + static fromResponse(response: Response, controller: AbortController): JSONLDecoder { + if (!response.body) { + controller.abort(); + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + + return new JSONLDecoder(ReadableStreamToAsyncIterable(response.body), controller); + } +} diff --git a/vendor/sdk/src/internal/decoders/line.ts b/vendor/sdk/src/internal/decoders/line.ts new file mode 100644 index 0000000..f053ac1 --- /dev/null +++ b/vendor/sdk/src/internal/decoders/line.ts @@ -0,0 +1,145 @@ +import { AnthropicError } from "../../error.js"; + +export type Bytes = string | ArrayBuffer | Uint8Array | Buffer | null | undefined; + +/** + * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally + * reading lines from text. + * + * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258 + */ +export class LineDecoder { + // prettier-ignore + static NEWLINE_CHARS = new Set(['\n', '\r']); + static NEWLINE_REGEXP = /\r\n|[\n\r]/g; + + buffer: Uint8Array; + #carriageReturnIndex: number | null; + textDecoder: any; // TextDecoder found in browsers; not typed to avoid pulling in either "dom" or "node" types. + + constructor() { + this.buffer = new Uint8Array(); + this.#carriageReturnIndex = null; + } + + decode(chunk: Bytes): string[] { + if (chunk == null) { + return []; + } + + const binaryChunk = + chunk instanceof ArrayBuffer ? new Uint8Array(chunk) + : typeof chunk === 'string' ? new TextEncoder().encode(chunk) + : chunk; + + let newData = new Uint8Array(this.buffer.length + binaryChunk.length); + newData.set(this.buffer); + newData.set(binaryChunk, this.buffer.length); + this.buffer = newData; + + const lines: string[] = []; + let patternIndex; + while ((patternIndex = findNewlineIndex(this.buffer, this.#carriageReturnIndex)) != null) { + if (patternIndex.carriage && this.#carriageReturnIndex == null) { + // skip until we either get a corresponding `\n`, a new `\r` or nothing + this.#carriageReturnIndex = patternIndex.index; + continue; + } + + // we got double \r or \rtext\n + if ( + this.#carriageReturnIndex != null && + (patternIndex.index !== this.#carriageReturnIndex + 1 || patternIndex.carriage) + ) { + lines.push(this.decodeText(this.buffer.slice(0, this.#carriageReturnIndex - 1))); + this.buffer = this.buffer.slice(this.#carriageReturnIndex); + this.#carriageReturnIndex = null; + continue; + } + + const endIndex = + this.#carriageReturnIndex !== null ? patternIndex.preceding - 1 : patternIndex.preceding; + + const line = this.decodeText(this.buffer.slice(0, endIndex)); + lines.push(line); + + this.buffer = this.buffer.slice(patternIndex.index); + this.#carriageReturnIndex = null; + } + + return lines; + } + + decodeText(bytes: Bytes): string { + if (bytes == null) return ''; + if (typeof bytes === 'string') return bytes; + + // Node: + if (typeof Buffer !== 'undefined') { + if (bytes instanceof Buffer) { + return bytes.toString(); + } + if (bytes instanceof Uint8Array) { + return Buffer.from(bytes).toString(); + } + + throw new AnthropicError( + `Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`, + ); + } + + // Browser + if (typeof TextDecoder !== 'undefined') { + if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) { + this.textDecoder ??= new TextDecoder('utf8'); + return this.textDecoder.decode(bytes); + } + + throw new AnthropicError( + `Unexpected: received non-Uint8Array/ArrayBuffer (${ + (bytes as any).constructor.name + }) in a web platform. Please report this error.`, + ); + } + + throw new AnthropicError( + `Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`, + ); + } + + flush(): string[] { + if (!this.buffer.length) { + return []; + } + return this.decode('\n'); + } +} + +/** + * This function searches the buffer for the end patterns, (\r or \n) + * and returns an object with the index preceding the matched newline and the + * index after the newline char. `null` is returned if no new line is found. + * + * ```ts + * findNewLineIndex('abc\ndef') -> { preceding: 2, index: 3 } + * ``` + */ +function findNewlineIndex( + buffer: Uint8Array, + startIndex: number | null, +): { preceding: number; index: number; carriage: boolean } | null { + const newline = 0x0a; // \n + const carriage = 0x0d; // \r + + for (let i = startIndex ?? 0; i < buffer.length; i++) { + if (buffer[i] === newline) { + return { preceding: i, index: i + 1, carriage: false }; + } + + if (buffer[i] === carriage) { + return { preceding: i, index: i + 1, carriage: true }; + } + } + + return null; +} diff --git a/vendor/sdk/src/internal/stream-utils.ts b/vendor/sdk/src/internal/stream-utils.ts new file mode 100644 index 0000000..37f7793 --- /dev/null +++ b/vendor/sdk/src/internal/stream-utils.ts @@ -0,0 +1,32 @@ +/** + * Most browsers don't yet have async iterable support for ReadableStream, + * and Node has a very different way of reading bytes from its "ReadableStream". + * + * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490 + */ +export function ReadableStreamToAsyncIterable(stream: any): AsyncIterableIterator { + if (stream[Symbol.asyncIterator]) return stream; + + const reader = stream.getReader(); + return { + async next() { + try { + const result = await reader.read(); + if (result?.done) reader.releaseLock(); // release lock when stream becomes closed + return result; + } catch (e) { + reader.releaseLock(); // release lock when stream becomes errored + throw e; + } + }, + async return() { + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; + return { done: true, value: undefined }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; +} diff --git a/vendor/sdk/src/lib/.keep b/vendor/sdk/src/lib/.keep new file mode 100644 index 0000000..7554f8b --- /dev/null +++ b/vendor/sdk/src/lib/.keep @@ -0,0 +1,4 @@ +File generated from our OpenAPI spec by Stainless. + +This directory can be used to store custom files to expand the SDK. +It is ignored by Stainless code generation and its content (other than this keep file) won't be touched. diff --git a/vendor/sdk/src/lib/BetaMessageStream.ts b/vendor/sdk/src/lib/BetaMessageStream.ts new file mode 100644 index 0000000..6f23640 --- /dev/null +++ b/vendor/sdk/src/lib/BetaMessageStream.ts @@ -0,0 +1,661 @@ +import * as Core from "../core.js"; +import { AnthropicError, APIUserAbortError } from "../error.js"; +import { + type BetaContentBlock, + Messages as BetaMessages, + type BetaMessage, + type BetaRawMessageStreamEvent as BetaMessageStreamEvent, + type BetaMessageParam, + type MessageCreateParams as BetaMessageCreateParams, + type MessageCreateParamsBase as BetaMessageCreateParamsBase, + type BetaTextBlock, + type BetaTextCitation, +} from "../resources/beta/messages/messages.js"; +import { type ReadableStream, type Response } from "../_shims/index.js"; +import { Stream } from "../streaming.js"; +import { partialParse } from "../_vendor/partial-json-parser/parser.js"; + +export interface MessageStreamEvents { + connect: () => void; + streamEvent: (event: BetaMessageStreamEvent, snapshot: BetaMessage) => void; + text: (textDelta: string, textSnapshot: string) => void; + citation: (citation: BetaTextCitation, citationsSnapshot: BetaTextCitation[]) => void; + inputJson: (partialJson: string, jsonSnapshot: unknown) => void; + thinking: (thinkingDelta: string, thinkingSnapshot: string) => void; + message: (message: BetaMessage) => void; + contentBlock: (content: BetaContentBlock) => void; + finalMessage: (message: BetaMessage) => void; + error: (error: AnthropicError) => void; + abort: (error: APIUserAbortError) => void; + end: () => void; +} + +type MessageStreamEventListeners = { + listener: MessageStreamEvents[Event]; + once?: boolean; +}[]; + +const JSON_BUF_PROPERTY = '__json_buf'; + +export class BetaMessageStream implements AsyncIterable { + messages: BetaMessageParam[] = []; + receivedMessages: BetaMessage[] = []; + #currentMessageSnapshot: BetaMessage | undefined; + + controller: AbortController = new AbortController(); + + #connectedPromise: Promise; + #resolveConnectedPromise: (response: Response | null) => void = () => {}; + #rejectConnectedPromise: (error: AnthropicError) => void = () => {}; + + #endPromise: Promise; + #resolveEndPromise: () => void = () => {}; + #rejectEndPromise: (error: AnthropicError) => void = () => {}; + + #listeners: { [Event in keyof MessageStreamEvents]?: MessageStreamEventListeners } = {}; + + #ended = false; + #errored = false; + #aborted = false; + #catchingPromiseCreated = false; + #response: Response | null | undefined; + #request_id: string | null | undefined; + + constructor() { + this.#connectedPromise = new Promise((resolve, reject) => { + this.#resolveConnectedPromise = resolve; + this.#rejectConnectedPromise = reject; + }); + + this.#endPromise = new Promise((resolve, reject) => { + this.#resolveEndPromise = resolve; + this.#rejectEndPromise = reject; + }); + + // Don't let these promises cause unhandled rejection errors. + // we will manually cause an unhandled rejection error later + // if the user hasn't registered any error listener or called + // any promise-returning method. + this.#connectedPromise.catch(() => {}); + this.#endPromise.catch(() => {}); + } + + get response(): Response | null | undefined { + return this.#response; + } + + get request_id(): string | null | undefined { + return this.#request_id; + } + + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse(): Promise<{ + data: BetaMessageStream; + response: Response; + request_id: string | null | undefined; + }> { + const response = await this.#connectedPromise; + if (!response) { + throw new Error('Could not resolve a `Response` object'); + } + + return { + data: this, + response, + request_id: response.headers.get('request-id'), + }; + } + + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream: ReadableStream): BetaMessageStream { + const runner = new BetaMessageStream(); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + + static createMessage( + messages: BetaMessages, + params: BetaMessageCreateParamsBase, + options?: Core.RequestOptions, + ): BetaMessageStream { + const runner = new BetaMessageStream(); + for (const message of params.messages) { + runner._addMessageParam(message); + } + runner._run(() => + runner._createMessage( + messages, + { ...params, stream: true }, + { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }, + ), + ); + return runner; + } + + protected _run(executor: () => Promise) { + executor().then(() => { + this._emitFinal(); + this._emit('end'); + }, this.#handleError); + } + + protected _addMessageParam(message: BetaMessageParam) { + this.messages.push(message); + } + + protected _addMessage(message: BetaMessage, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit('message', message); + } + } + + protected async _createMessage( + messages: BetaMessages, + params: BetaMessageCreateParams, + options?: Core.RequestOptions, + ): Promise { + const signal = options?.signal; + if (signal) { + if (signal.aborted) this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + this.#beginRequest(); + const { response, data: stream } = await messages + .create({ ...params, stream: true }, { ...options, signal: this.controller.signal }) + .withResponse(); + this._connected(response); + for await (const event of stream) { + this.#addStreamEvent(event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + this.#endRequest(); + } + + protected _connected(response: Response | null) { + if (this.ended) return; + this.#response = response; + this.#request_id = response?.headers.get('request-id'); + this.#resolveConnectedPromise(response); + this._emit('connect'); + } + + get ended(): boolean { + return this.#ended; + } + + get errored(): boolean { + return this.#errored; + } + + get aborted(): boolean { + return this.#aborted; + } + + abort() { + this.controller.abort(); + } + + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event: Event, listener: MessageStreamEvents[Event]): this { + const listeners: MessageStreamEventListeners = + this.#listeners[event] || (this.#listeners[event] = []); + listeners.push({ listener }); + return this; + } + + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event: Event, listener: MessageStreamEvents[Event]): this { + const listeners = this.#listeners[event]; + if (!listeners) return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) listeners.splice(index, 1); + return this; + } + + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event: Event, listener: MessageStreamEvents[Event]): this { + const listeners: MessageStreamEventListeners = + this.#listeners[event] || (this.#listeners[event] = []); + listeners.push({ listener, once: true }); + return this; + } + + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted( + event: Event, + ): Promise< + Parameters extends [infer Param] ? Param + : Parameters extends [] ? void + : Parameters + > { + return new Promise((resolve, reject) => { + this.#catchingPromiseCreated = true; + if (event !== 'error') this.once('error', reject); + this.once(event, resolve as any); + }); + } + + async done(): Promise { + this.#catchingPromiseCreated = true; + await this.#endPromise; + } + + get currentMessage(): BetaMessage | undefined { + return this.#currentMessageSnapshot; + } + + #getFinalMessage(): BetaMessage { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + return this.receivedMessages.at(-1)!; + } + + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalMessage(): Promise { + await this.done(); + return this.#getFinalMessage(); + } + + #getFinalText(): string { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + const textBlocks = this.receivedMessages + .at(-1)! + .content.filter((block): block is BetaTextBlock => block.type === 'text') + .map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError('stream ended without producing a content block with type=text'); + } + return textBlocks.join(' '); + } + + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText(): Promise { + await this.done(); + return this.#getFinalText(); + } + + #handleError = (error: unknown) => { + this.#errored = true; + if (error instanceof Error && error.name === 'AbortError') { + error = new APIUserAbortError(); + } + if (error instanceof APIUserAbortError) { + this.#aborted = true; + return this._emit('abort', error); + } + if (error instanceof AnthropicError) { + return this._emit('error', error); + } + if (error instanceof Error) { + const anthropicError: AnthropicError = new AnthropicError(error.message); + // @ts-ignore + anthropicError.cause = error; + return this._emit('error', anthropicError); + } + return this._emit('error', new AnthropicError(String(error))); + }; + + protected _emit( + event: Event, + ...args: Parameters + ) { + // make sure we don't emit any MessageStreamEvents after end + if (this.#ended) return; + + if (event === 'end') { + this.#ended = true; + this.#resolveEndPromise(); + } + + const listeners: MessageStreamEventListeners | undefined = this.#listeners[event]; + if (listeners) { + this.#listeners[event] = listeners.filter((l) => !l.once) as any; + listeners.forEach(({ listener }: any) => listener(...args)); + } + + if (event === 'abort') { + const error = args[0] as APIUserAbortError; + if (!this.#catchingPromiseCreated && !listeners?.length) { + Promise.reject(error); + } + this.#rejectConnectedPromise(error); + this.#rejectEndPromise(error); + this._emit('end'); + return; + } + + if (event === 'error') { + // NOTE: _emit('error', error) should only be called from #handleError(). + + const error = args[0] as AnthropicError; + if (!this.#catchingPromiseCreated && !listeners?.length) { + // Trigger an unhandled rejection if the user hasn't registered any error handlers. + // If you are seeing stack traces here, make sure to handle errors via either: + // - runner.on('error', () => ...) + // - await runner.done() + // - await runner.final...() + // - etc. + Promise.reject(error); + } + this.#rejectConnectedPromise(error); + this.#rejectEndPromise(error); + this._emit('end'); + } + } + + protected _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit('finalMessage', this.#getFinalMessage()); + } + } + + #beginRequest() { + if (this.ended) return; + this.#currentMessageSnapshot = undefined; + } + #addStreamEvent(event: BetaMessageStreamEvent) { + if (this.ended) return; + const messageSnapshot = this.#accumulateMessage(event); + this._emit('streamEvent', event, messageSnapshot); + + switch (event.type) { + case 'content_block_delta': { + const content = messageSnapshot.content.at(-1)!; + switch (event.delta.type) { + case 'text_delta': { + if (content.type === 'text') { + this._emit('text', event.delta.text, content.text || ''); + } + break; + } + case 'citations_delta': { + if (content.type === 'text') { + this._emit('citation', event.delta.citation, content.citations ?? []); + } + break; + } + case 'input_json_delta': { + if (content.type === 'tool_use' && content.input) { + this._emit('inputJson', event.delta.partial_json, content.input); + } + break; + } + case 'thinking_delta': { + if (content.type === 'thinking') { + this._emit('thinking', event.delta.thinking, content.thinking); + } + break; + } + case 'signature_delta': { + // we don't emit anything special in this case. + break; + } + default: + checkNever(event.delta); + } + break; + } + case 'message_stop': { + this._addMessageParam(messageSnapshot); + this._addMessage(messageSnapshot, true); + break; + } + case 'content_block_stop': { + this._emit('contentBlock', messageSnapshot.content.at(-1)!); + break; + } + case 'message_start': { + this.#currentMessageSnapshot = messageSnapshot; + break; + } + case 'content_block_start': + case 'message_delta': + break; + } + } + #endRequest(): BetaMessage { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = this.#currentMessageSnapshot; + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + this.#currentMessageSnapshot = undefined; + return snapshot; + } + + protected async _fromReadableStream( + readableStream: ReadableStream, + options?: Core.RequestOptions, + ): Promise { + const signal = options?.signal; + if (signal) { + if (signal.aborted) this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + this.#beginRequest(); + this._connected(null); + const stream = Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + this.#addStreamEvent(event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + this.#endRequest(); + } + + /** + * Mutates this.#currentMessage with the current event. Handling the accumulation of multiple messages + * will be needed to be handled by the caller, this method will throw if you try to accumulate for multiple + * messages. + */ + #accumulateMessage(event: BetaMessageStreamEvent): BetaMessage { + let snapshot = this.#currentMessageSnapshot; + + if (event.type === 'message_start') { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + + switch (event.type) { + case 'message_stop': + return snapshot; + case 'message_delta': + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.usage.output_tokens = event.usage.output_tokens; + return snapshot; + case 'content_block_start': + snapshot.content.push(event.content_block); + return snapshot; + case 'content_block_delta': { + const snapshotContent = snapshot.content.at(event.index); + + switch (event.delta.type) { + case 'text_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.text += event.delta.text; + } + break; + } + case 'citations_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.citations ??= []; + snapshotContent.citations.push(event.delta.citation); + } + break; + } + case 'input_json_delta': { + if (snapshotContent?.type === 'tool_use') { + // we need to keep track of the raw JSON string as well so that we can + // re-parse it for each delta, for now we just store it as an untyped + // non-enumerable property on the snapshot + let jsonBuf = (snapshotContent as any)[JSON_BUF_PROPERTY] || ''; + jsonBuf += event.delta.partial_json; + + Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, { + value: jsonBuf, + enumerable: false, + writable: true, + }); + + if (jsonBuf) { + snapshotContent.input = partialParse(jsonBuf); + } + } + break; + } + case 'thinking_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.thinking += event.delta.thinking; + } + break; + } + case 'signature_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.signature += event.delta.signature; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case 'content_block_stop': + return snapshot; + } + } + + [Symbol.asyncIterator](): AsyncIterator { + const pushQueue: BetaMessageStreamEvent[] = []; + const readQueue: { + resolve: (chunk: BetaMessageStreamEvent | undefined) => void; + reject: (error: unknown) => void; + }[] = []; + let done = false; + + this.on('streamEvent', (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }); + + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + + return { + next: async (): Promise> => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => + readQueue.push({ resolve, reject }), + ).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true })); + } + const chunk = pushQueue.shift()!; + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }; + } + + toReadableStream(): ReadableStream { + const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); + return stream.toReadableStream(); + } +} + +// used to ensure exhaustive case matching without throwing a runtime error +function checkNever(x: never) {} diff --git a/vendor/sdk/src/lib/MessageStream.ts b/vendor/sdk/src/lib/MessageStream.ts new file mode 100644 index 0000000..00130ab --- /dev/null +++ b/vendor/sdk/src/lib/MessageStream.ts @@ -0,0 +1,662 @@ +import * as Core from "../core.js"; +import { AnthropicError, APIUserAbortError } from "../error.js"; +import { + type ContentBlock, + Messages, + type Message, + type MessageStreamEvent, + type MessageParam, + type MessageCreateParams, + type MessageCreateParamsBase, + type TextBlock, + type TextCitation, +} from "../resources/messages.js"; +import { type ReadableStream, type Response } from "../_shims/index.js"; +import { Stream } from "../streaming.js"; +import { partialParse } from "../_vendor/partial-json-parser/parser.js"; + +export interface MessageStreamEvents { + connect: () => void; + streamEvent: (event: MessageStreamEvent, snapshot: Message) => void; + text: (textDelta: string, textSnapshot: string) => void; + citation: (citation: TextCitation, citationsSnapshot: TextCitation[]) => void; + inputJson: (partialJson: string, jsonSnapshot: unknown) => void; + thinking: (thinkingDelta: string, thinkingSnapshot: string) => void; + message: (message: Message) => void; + contentBlock: (content: ContentBlock) => void; + finalMessage: (message: Message) => void; + error: (error: AnthropicError) => void; + abort: (error: APIUserAbortError) => void; + end: () => void; +} + +type MessageStreamEventListeners = { + listener: MessageStreamEvents[Event]; + once?: boolean; +}[]; + +const JSON_BUF_PROPERTY = '__json_buf'; + +export class MessageStream implements AsyncIterable { + messages: MessageParam[] = []; + receivedMessages: Message[] = []; + #currentMessageSnapshot: Message | undefined; + + controller: AbortController = new AbortController(); + + #connectedPromise: Promise; + #resolveConnectedPromise: (response: Response | null) => void = () => {}; + #rejectConnectedPromise: (error: AnthropicError) => void = () => {}; + + #endPromise: Promise; + #resolveEndPromise: () => void = () => {}; + #rejectEndPromise: (error: AnthropicError) => void = () => {}; + + #listeners: { [Event in keyof MessageStreamEvents]?: MessageStreamEventListeners } = {}; + + #ended = false; + #errored = false; + #aborted = false; + #catchingPromiseCreated = false; + #response: Response | null | undefined; + #request_id: string | null | undefined; + + constructor() { + this.#connectedPromise = new Promise((resolve, reject) => { + this.#resolveConnectedPromise = resolve; + this.#rejectConnectedPromise = reject; + }); + + this.#endPromise = new Promise((resolve, reject) => { + this.#resolveEndPromise = resolve; + this.#rejectEndPromise = reject; + }); + + // Don't let these promises cause unhandled rejection errors. + // we will manually cause an unhandled rejection error later + // if the user hasn't registered any error listener or called + // any promise-returning method. + this.#connectedPromise.catch(() => {}); + this.#endPromise.catch(() => {}); + } + + get response(): Response | null | undefined { + return this.#response; + } + + get request_id(): string | null | undefined { + return this.#request_id; + } + + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse(): Promise<{ + data: MessageStream; + response: Response; + request_id: string | null | undefined; + }> { + const response = await this.#connectedPromise; + if (!response) { + throw new Error('Could not resolve a `Response` object'); + } + + return { + data: this, + response, + request_id: response.headers.get('request-id'), + }; + } + + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream: ReadableStream): MessageStream { + const runner = new MessageStream(); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + + static createMessage( + messages: Messages, + params: MessageCreateParamsBase, + options?: Core.RequestOptions, + ): MessageStream { + const runner = new MessageStream(); + for (const message of params.messages) { + runner._addMessageParam(message); + } + runner._run(() => + runner._createMessage( + messages, + { ...params, stream: true }, + { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }, + ), + ); + return runner; + } + + protected _run(executor: () => Promise) { + executor().then(() => { + this._emitFinal(); + this._emit('end'); + }, this.#handleError); + } + + protected _addMessageParam(message: MessageParam) { + this.messages.push(message); + } + + protected _addMessage(message: Message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit('message', message); + } + } + + protected async _createMessage( + messages: Messages, + params: MessageCreateParams, + options?: Core.RequestOptions, + ): Promise { + const signal = options?.signal; + if (signal) { + if (signal.aborted) this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + this.#beginRequest(); + const { response, data: stream } = await messages + .create({ ...params, stream: true }, { ...options, signal: this.controller.signal }) + .withResponse(); + this._connected(response); + for await (const event of stream) { + this.#addStreamEvent(event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + this.#endRequest(); + } + + protected _connected(response: Response | null) { + if (this.ended) return; + this.#response = response; + this.#request_id = response?.headers.get('request-id'); + this.#resolveConnectedPromise(response); + this._emit('connect'); + } + + get ended(): boolean { + return this.#ended; + } + + get errored(): boolean { + return this.#errored; + } + + get aborted(): boolean { + return this.#aborted; + } + + abort() { + this.controller.abort(); + } + + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event: Event, listener: MessageStreamEvents[Event]): this { + const listeners: MessageStreamEventListeners = + this.#listeners[event] || (this.#listeners[event] = []); + listeners.push({ listener }); + return this; + } + + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event: Event, listener: MessageStreamEvents[Event]): this { + const listeners = this.#listeners[event]; + if (!listeners) return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) listeners.splice(index, 1); + return this; + } + + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event: Event, listener: MessageStreamEvents[Event]): this { + const listeners: MessageStreamEventListeners = + this.#listeners[event] || (this.#listeners[event] = []); + listeners.push({ listener, once: true }); + return this; + } + + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted( + event: Event, + ): Promise< + Parameters extends [infer Param] ? Param + : Parameters extends [] ? void + : Parameters + > { + return new Promise((resolve, reject) => { + this.#catchingPromiseCreated = true; + if (event !== 'error') this.once('error', reject); + this.once(event, resolve as any); + }); + } + + async done(): Promise { + this.#catchingPromiseCreated = true; + await this.#endPromise; + } + + get currentMessage(): Message | undefined { + return this.#currentMessageSnapshot; + } + + #getFinalMessage(): Message { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + return this.receivedMessages.at(-1)!; + } + + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalMessage(): Promise { + await this.done(); + return this.#getFinalMessage(); + } + + #getFinalText(): string { + if (this.receivedMessages.length === 0) { + throw new AnthropicError('stream ended without producing a Message with role=assistant'); + } + const textBlocks = this.receivedMessages + .at(-1)! + .content.filter((block): block is TextBlock => block.type === 'text') + .map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError('stream ended without producing a content block with type=text'); + } + return textBlocks.join(' '); + } + + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText(): Promise { + await this.done(); + return this.#getFinalText(); + } + + #handleError = (error: unknown) => { + this.#errored = true; + if (error instanceof Error && error.name === 'AbortError') { + error = new APIUserAbortError(); + } + if (error instanceof APIUserAbortError) { + this.#aborted = true; + return this._emit('abort', error); + } + if (error instanceof AnthropicError) { + return this._emit('error', error); + } + if (error instanceof Error) { + const anthropicError: AnthropicError = new AnthropicError(error.message); + // @ts-ignore + anthropicError.cause = error; + return this._emit('error', anthropicError); + } + return this._emit('error', new AnthropicError(String(error))); + }; + + protected _emit( + event: Event, + ...args: Parameters + ) { + // make sure we don't emit any MessageStreamEvents after end + if (this.#ended) return; + + if (event === 'end') { + this.#ended = true; + this.#resolveEndPromise(); + } + + const listeners: MessageStreamEventListeners | undefined = this.#listeners[event]; + if (listeners) { + this.#listeners[event] = listeners.filter((l) => !l.once) as any; + listeners.forEach(({ listener }: any) => listener(...args)); + } + + if (event === 'abort') { + const error = args[0] as APIUserAbortError; + if (!this.#catchingPromiseCreated && !listeners?.length) { + Promise.reject(error); + } + this.#rejectConnectedPromise(error); + this.#rejectEndPromise(error); + this._emit('end'); + return; + } + + if (event === 'error') { + // NOTE: _emit('error', error) should only be called from #handleError(). + + const error = args[0] as AnthropicError; + if (!this.#catchingPromiseCreated && !listeners?.length) { + // Trigger an unhandled rejection if the user hasn't registered any error handlers. + // If you are seeing stack traces here, make sure to handle errors via either: + // - runner.on('error', () => ...) + // - await runner.done() + // - await runner.final...() + // - etc. + Promise.reject(error); + } + this.#rejectConnectedPromise(error); + this.#rejectEndPromise(error); + this._emit('end'); + } + } + + protected _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit('finalMessage', this.#getFinalMessage()); + } + } + + #beginRequest() { + if (this.ended) return; + this.#currentMessageSnapshot = undefined; + } + #addStreamEvent(event: MessageStreamEvent) { + if (this.ended) return; + const messageSnapshot = this.#accumulateMessage(event); + this._emit('streamEvent', event, messageSnapshot); + + switch (event.type) { + case 'content_block_delta': { + const content = messageSnapshot.content.at(-1)!; + switch (event.delta.type) { + case 'text_delta': { + if (content.type === 'text') { + this._emit('text', event.delta.text, content.text || ''); + } + break; + } + case 'citations_delta': { + if (content.type === 'text') { + this._emit('citation', event.delta.citation, content.citations ?? []); + } + break; + } + case 'input_json_delta': { + if (content.type === 'tool_use' && content.input) { + this._emit('inputJson', event.delta.partial_json, content.input); + } + break; + } + case 'thinking_delta': { + if (content.type === 'thinking') { + this._emit('thinking', event.delta.thinking, content.thinking); + } + break; + } + case 'signature_delta': { + // we don't emit anything special in this case. + break; + } + default: + checkNever(event.delta); + } + break; + } + case 'message_stop': { + this._addMessageParam(messageSnapshot); + this._addMessage(messageSnapshot, true); + break; + } + case 'content_block_stop': { + this._emit('contentBlock', messageSnapshot.content.at(-1)!); + break; + } + case 'message_start': { + this.#currentMessageSnapshot = messageSnapshot; + break; + } + case 'content_block_start': + case 'message_delta': + break; + } + } + #endRequest(): Message { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = this.#currentMessageSnapshot; + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + this.#currentMessageSnapshot = undefined; + return snapshot; + } + + protected async _fromReadableStream( + readableStream: ReadableStream, + options?: Core.RequestOptions, + ): Promise { + const signal = options?.signal; + if (signal) { + if (signal.aborted) this.controller.abort(); + signal.addEventListener('abort', () => this.controller.abort()); + } + this.#beginRequest(); + this._connected(null); + const stream = Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + this.#addStreamEvent(event); + } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); + } + this.#endRequest(); + } + + /** + * Mutates this.#currentMessage with the current event. Handling the accumulation of multiple messages + * will be needed to be handled by the caller, this method will throw if you try to accumulate for multiple + * messages. + */ + #accumulateMessage(event: MessageStreamEvent): Message { + let snapshot = this.#currentMessageSnapshot; + + if (event.type === 'message_start') { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + + switch (event.type) { + case 'message_stop': + return snapshot; + case 'message_delta': + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.usage.output_tokens = event.usage.output_tokens; + return snapshot; + case 'content_block_start': + snapshot.content.push(event.content_block); + return snapshot; + case 'content_block_delta': { + const snapshotContent = snapshot.content.at(event.index); + + switch (event.delta.type) { + case 'text_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.text += event.delta.text; + } + break; + } + case 'citations_delta': { + if (snapshotContent?.type === 'text') { + snapshotContent.citations ??= []; + snapshotContent.citations.push(event.delta.citation); + } + break; + } + case 'input_json_delta': { + if (snapshotContent?.type === 'tool_use') { + // we need to keep track of the raw JSON string as well so that we can + // re-parse it for each delta, for now we just store it as an untyped + // non-enumerable property on the snapshot + let jsonBuf = (snapshotContent as any)[JSON_BUF_PROPERTY] || ''; + jsonBuf += event.delta.partial_json; + + Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, { + value: jsonBuf, + enumerable: false, + writable: true, + }); + + if (jsonBuf) { + snapshotContent.input = partialParse(jsonBuf); + } + } + break; + } + case 'thinking_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.thinking += event.delta.thinking; + } + break; + } + case 'signature_delta': { + if (snapshotContent?.type === 'thinking') { + snapshotContent.signature += event.delta.signature; + } + break; + } + default: + checkNever(event.delta); + } + + return snapshot; + } + case 'content_block_stop': + return snapshot; + } + } + + [Symbol.asyncIterator](): AsyncIterator { + const pushQueue: MessageStreamEvent[] = []; + const readQueue: { + resolve: (chunk: MessageStreamEvent | undefined) => void; + reject: (error: unknown) => void; + }[] = []; + let done = false; + + this.on('streamEvent', (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }); + + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + + return { + next: async (): Promise> => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => + readQueue.push({ resolve, reject }), + ).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true })); + } + const chunk = pushQueue.shift()!; + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }; + } + + toReadableStream(): ReadableStream { + const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); + return stream.toReadableStream(); + } +} + +// used to ensure exhaustive case matching without throwing a runtime error +function checkNever(x: never) {} diff --git a/vendor/sdk/src/pagination.ts b/vendor/sdk/src/pagination.ts new file mode 100644 index 0000000..abd5688 --- /dev/null +++ b/vendor/sdk/src/pagination.ts @@ -0,0 +1,92 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { AbstractPage, Response, APIClient, FinalRequestOptions, PageInfo } from "./core.js"; + +export interface PageResponse { + data: Array; + + has_more: boolean; + + first_id: string | null; + + last_id: string | null; +} + +export interface PageParams { + /** + * Number of items per page. + */ + limit?: number; + + before_id?: string; + + after_id?: string; +} + +export class Page extends AbstractPage implements PageResponse { + data: Array; + + has_more: boolean; + + first_id: string | null; + + last_id: string | null; + + constructor(client: APIClient, response: Response, body: PageResponse, options: FinalRequestOptions) { + super(client, response, body, options); + + this.data = body.data || []; + this.has_more = body.has_more || false; + this.first_id = body.first_id || null; + this.last_id = body.last_id || null; + } + + getPaginatedItems(): Item[] { + return this.data ?? []; + } + + override hasNextPage(): boolean { + if (this.has_more === false) { + return false; + } + + return super.hasNextPage(); + } + + // @deprecated Please use `nextPageInfo()` instead + nextPageParams(): Partial | null { + const info = this.nextPageInfo(); + if (!info) return null; + if ('params' in info) return info.params; + const params = Object.fromEntries(info.url.searchParams); + if (!Object.keys(params).length) return null; + return params; + } + + nextPageInfo(): PageInfo | null { + if ((this.options.query as Record)?.['before_id']) { + // in reverse + const firstId = this.first_id; + if (!firstId) { + return null; + } + + return { + params: { + before_id: firstId, + }, + }; + } + + const cursor = this.last_id; + if (!cursor) { + return null; + } + + return { + params: { + after_id: cursor, + }, + }; + } +} diff --git a/vendor/sdk/src/resource.ts b/vendor/sdk/src/resource.ts new file mode 100644 index 0000000..f993043 --- /dev/null +++ b/vendor/sdk/src/resource.ts @@ -0,0 +1,11 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import * as Core from "./core.js"; + +export class APIResource { + protected _client: Core.APIClient; + + constructor(client: Core.APIClient) { + this._client = client; + } +} diff --git a/vendor/sdk/src/resources/beta/beta.ts b/vendor/sdk/src/resources/beta/beta.ts new file mode 100644 index 0000000..74fe374 --- /dev/null +++ b/vendor/sdk/src/resources/beta/beta.ts @@ -0,0 +1,249 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../../resource.js"; +import * as ModelsAPI from "./models.js"; +import { BetaModelInfo, BetaModelInfosPage, ModelListParams, Models } from "./models.js"; +import * as MessagesAPI from "./messages/messages.js"; +import { + BetaBase64PDFBlock, + BetaBase64PDFSource, + BetaCacheControlEphemeral, + BetaCitationCharLocation, + BetaCitationCharLocationParam, + BetaCitationContentBlockLocation, + BetaCitationContentBlockLocationParam, + BetaCitationPageLocation, + BetaCitationPageLocationParam, + BetaCitationsConfigParam, + BetaCitationsDelta, + BetaContentBlock, + BetaContentBlockParam, + BetaContentBlockSource, + BetaContentBlockSourceContent, + BetaImageBlockParam, + BetaInputJSONDelta, + BetaMessage, + BetaMessageDeltaUsage, + BetaMessageParam, + BetaMessageTokensCount, + BetaMetadata, + BetaPlainTextSource, + BetaRawContentBlockDeltaEvent, + BetaRawContentBlockStartEvent, + BetaRawContentBlockStopEvent, + BetaRawMessageDeltaEvent, + BetaRawMessageStartEvent, + BetaRawMessageStopEvent, + BetaRawMessageStreamEvent, + BetaRedactedThinkingBlock, + BetaRedactedThinkingBlockParam, + BetaSignatureDelta, + BetaTextBlock, + BetaTextBlockParam, + BetaTextCitation, + BetaTextCitationParam, + BetaTextDelta, + BetaThinkingBlock, + BetaThinkingBlockParam, + BetaThinkingConfigDisabled, + BetaThinkingConfigEnabled, + BetaThinkingDelta, + BetaTool, + BetaToolBash20241022, + BetaToolBash20250124, + BetaToolChoice, + BetaToolChoiceAny, + BetaToolChoiceAuto, + BetaToolChoiceTool, + BetaToolComputerUse20241022, + BetaToolResultBlockParam, + BetaToolTextEditor20241022, + BetaToolTextEditor20250124, + BetaToolUnion, + BetaToolUseBlock, + BetaToolUseBlockParam, + BetaUsage, + MessageCountTokensParams, + MessageCreateParams, + MessageCreateParamsNonStreaming, + MessageCreateParamsStreaming, + Messages, +} from "./messages/messages.js"; + +export class Beta extends APIResource { + models: ModelsAPI.Models = new ModelsAPI.Models(this._client); + messages: MessagesAPI.Messages = new MessagesAPI.Messages(this._client); +} + +export type AnthropicBeta = + | (string & {}) + | 'message-batches-2024-09-24' + | 'prompt-caching-2024-07-31' + | 'computer-use-2024-10-22' + | 'pdfs-2024-09-25' + | 'token-counting-2024-11-01'; + +export interface BetaAPIError { + message: string; + + type: 'api_error'; +} + +export interface BetaAuthenticationError { + message: string; + + type: 'authentication_error'; +} + +export interface BetaBillingError { + message: string; + + type: 'billing_error'; +} + +export type BetaError = + | BetaInvalidRequestError + | BetaAuthenticationError + | BetaBillingError + | BetaPermissionError + | BetaNotFoundError + | BetaRateLimitError + | BetaGatewayTimeoutError + | BetaAPIError + | BetaOverloadedError; + +export interface BetaErrorResponse { + error: BetaError; + + type: 'error'; +} + +export interface BetaGatewayTimeoutError { + message: string; + + type: 'timeout_error'; +} + +export interface BetaInvalidRequestError { + message: string; + + type: 'invalid_request_error'; +} + +export interface BetaNotFoundError { + message: string; + + type: 'not_found_error'; +} + +export interface BetaOverloadedError { + message: string; + + type: 'overloaded_error'; +} + +export interface BetaPermissionError { + message: string; + + type: 'permission_error'; +} + +export interface BetaRateLimitError { + message: string; + + type: 'rate_limit_error'; +} + +Beta.Models = Models; +Beta.BetaModelInfosPage = BetaModelInfosPage; +Beta.Messages = Messages; + +export declare namespace Beta { + export { + type AnthropicBeta as AnthropicBeta, + type BetaAPIError as BetaAPIError, + type BetaAuthenticationError as BetaAuthenticationError, + type BetaBillingError as BetaBillingError, + type BetaError as BetaError, + type BetaErrorResponse as BetaErrorResponse, + type BetaGatewayTimeoutError as BetaGatewayTimeoutError, + type BetaInvalidRequestError as BetaInvalidRequestError, + type BetaNotFoundError as BetaNotFoundError, + type BetaOverloadedError as BetaOverloadedError, + type BetaPermissionError as BetaPermissionError, + type BetaRateLimitError as BetaRateLimitError, + }; + + export { + Models as Models, + type BetaModelInfo as BetaModelInfo, + BetaModelInfosPage as BetaModelInfosPage, + type ModelListParams as ModelListParams, + }; + + export { + Messages as Messages, + type BetaBase64PDFBlock as BetaBase64PDFBlock, + type BetaBase64PDFSource as BetaBase64PDFSource, + type BetaCacheControlEphemeral as BetaCacheControlEphemeral, + type BetaCitationCharLocation as BetaCitationCharLocation, + type BetaCitationCharLocationParam as BetaCitationCharLocationParam, + type BetaCitationContentBlockLocation as BetaCitationContentBlockLocation, + type BetaCitationContentBlockLocationParam as BetaCitationContentBlockLocationParam, + type BetaCitationPageLocation as BetaCitationPageLocation, + type BetaCitationPageLocationParam as BetaCitationPageLocationParam, + type BetaCitationsConfigParam as BetaCitationsConfigParam, + type BetaCitationsDelta as BetaCitationsDelta, + type BetaContentBlock as BetaContentBlock, + type BetaContentBlockParam as BetaContentBlockParam, + type BetaContentBlockSource as BetaContentBlockSource, + type BetaContentBlockSourceContent as BetaContentBlockSourceContent, + type BetaImageBlockParam as BetaImageBlockParam, + type BetaInputJSONDelta as BetaInputJSONDelta, + type BetaMessage as BetaMessage, + type BetaMessageDeltaUsage as BetaMessageDeltaUsage, + type BetaMessageParam as BetaMessageParam, + type BetaMessageTokensCount as BetaMessageTokensCount, + type BetaMetadata as BetaMetadata, + type BetaPlainTextSource as BetaPlainTextSource, + type BetaRawContentBlockDeltaEvent as BetaRawContentBlockDeltaEvent, + type BetaRawContentBlockStartEvent as BetaRawContentBlockStartEvent, + type BetaRawContentBlockStopEvent as BetaRawContentBlockStopEvent, + type BetaRawMessageDeltaEvent as BetaRawMessageDeltaEvent, + type BetaRawMessageStartEvent as BetaRawMessageStartEvent, + type BetaRawMessageStopEvent as BetaRawMessageStopEvent, + type BetaRawMessageStreamEvent as BetaRawMessageStreamEvent, + type BetaRedactedThinkingBlock as BetaRedactedThinkingBlock, + type BetaRedactedThinkingBlockParam as BetaRedactedThinkingBlockParam, + type BetaSignatureDelta as BetaSignatureDelta, + type BetaTextBlock as BetaTextBlock, + type BetaTextBlockParam as BetaTextBlockParam, + type BetaTextCitation as BetaTextCitation, + type BetaTextCitationParam as BetaTextCitationParam, + type BetaTextDelta as BetaTextDelta, + type BetaThinkingBlock as BetaThinkingBlock, + type BetaThinkingBlockParam as BetaThinkingBlockParam, + type BetaThinkingConfigDisabled as BetaThinkingConfigDisabled, + type BetaThinkingConfigEnabled as BetaThinkingConfigEnabled, + type BetaThinkingDelta as BetaThinkingDelta, + type BetaTool as BetaTool, + type BetaToolBash20241022 as BetaToolBash20241022, + type BetaToolBash20250124 as BetaToolBash20250124, + type BetaToolChoice as BetaToolChoice, + type BetaToolChoiceAny as BetaToolChoiceAny, + type BetaToolChoiceAuto as BetaToolChoiceAuto, + type BetaToolChoiceTool as BetaToolChoiceTool, + type BetaToolComputerUse20241022 as BetaToolComputerUse20241022, + type BetaToolResultBlockParam as BetaToolResultBlockParam, + type BetaToolTextEditor20241022 as BetaToolTextEditor20241022, + type BetaToolTextEditor20250124 as BetaToolTextEditor20250124, + type BetaToolUnion as BetaToolUnion, + type BetaToolUseBlock as BetaToolUseBlock, + type BetaToolUseBlockParam as BetaToolUseBlockParam, + type BetaUsage as BetaUsage, + type MessageCreateParams as MessageCreateParams, + type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming as MessageCreateParamsStreaming, + type MessageCountTokensParams as MessageCountTokensParams, + }; +} diff --git a/vendor/sdk/src/resources/beta/index.ts b/vendor/sdk/src/resources/beta/index.ts new file mode 100644 index 0000000..a9e21cf --- /dev/null +++ b/vendor/sdk/src/resources/beta/index.ts @@ -0,0 +1,83 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Beta, + type AnthropicBeta, + type BetaAPIError, + type BetaAuthenticationError, + type BetaBillingError, + type BetaError, + type BetaErrorResponse, + type BetaGatewayTimeoutError, + type BetaInvalidRequestError, + type BetaNotFoundError, + type BetaOverloadedError, + type BetaPermissionError, + type BetaRateLimitError, +} from "./beta.js"; +export { BetaModelInfosPage, Models, type BetaModelInfo, type ModelListParams } from "./models.js"; +export { + Messages, + type BetaBase64PDFBlock, + type BetaBase64PDFSource, + type BetaCacheControlEphemeral, + type BetaCitationCharLocation, + type BetaCitationCharLocationParam, + type BetaCitationContentBlockLocation, + type BetaCitationContentBlockLocationParam, + type BetaCitationPageLocation, + type BetaCitationPageLocationParam, + type BetaCitationsConfigParam, + type BetaCitationsDelta, + type BetaContentBlock, + type BetaContentBlockParam, + type BetaContentBlockSource, + type BetaContentBlockSourceContent, + type BetaImageBlockParam, + type BetaInputJSONDelta, + type BetaMessage, + type BetaMessageDeltaUsage, + type BetaMessageParam, + type BetaMessageTokensCount, + type BetaMetadata, + type BetaPlainTextSource, + type BetaRawContentBlockDeltaEvent, + type BetaRawContentBlockStartEvent, + type BetaRawContentBlockStopEvent, + type BetaRawMessageDeltaEvent, + type BetaRawMessageStartEvent, + type BetaRawMessageStopEvent, + type BetaRawMessageStreamEvent, + type BetaRedactedThinkingBlock, + type BetaRedactedThinkingBlockParam, + type BetaSignatureDelta, + type BetaTextBlock, + type BetaTextBlockParam, + type BetaTextCitation, + type BetaTextCitationParam, + type BetaTextDelta, + type BetaThinkingBlock, + type BetaThinkingBlockParam, + type BetaThinkingConfigDisabled, + type BetaThinkingConfigEnabled, + type BetaThinkingDelta, + type BetaTool, + type BetaToolBash20241022, + type BetaToolBash20250124, + type BetaToolChoice, + type BetaToolChoiceAny, + type BetaToolChoiceAuto, + type BetaToolChoiceTool, + type BetaToolComputerUse20241022, + type BetaToolResultBlockParam, + type BetaToolTextEditor20241022, + type BetaToolTextEditor20250124, + type BetaToolUnion, + type BetaToolUseBlock, + type BetaToolUseBlockParam, + type BetaUsage, + type MessageCreateParams, + type MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming, + type MessageCountTokensParams, +} from "./messages/index.js"; diff --git a/vendor/sdk/src/resources/beta/messages/batches.ts b/vendor/sdk/src/resources/beta/messages/batches.ts new file mode 100644 index 0000000..b21d245 --- /dev/null +++ b/vendor/sdk/src/resources/beta/messages/batches.ts @@ -0,0 +1,486 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../../../resource.js"; +import { isRequestOptions } from "../../../core.js"; +import * as Core from "../../../core.js"; +import * as BetaAPI from "../beta.js"; +import * as BetaMessagesAPI from "./messages.js"; +import { Page, type PageParams } from "../../../pagination.js"; +import { JSONLDecoder } from "../../../internal/decoders/jsonl.js"; +import { AnthropicError } from "../../../error.js"; + +export class Batches extends APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(params: BatchCreateParams, options?: Core.RequestOptions): Core.APIPromise { + const { betas, ...body } = params; + return this._client.post('/v1/messages/batches?beta=true', { + body, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + retrieve( + messageBatchId: string, + params?: BatchRetrieveParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + retrieve(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + retrieve( + messageBatchId: string, + params: BatchRetrieveParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.retrieve(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.get(`/v1/messages/batches/${messageBatchId}?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + list( + params?: BatchListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + params: BatchListParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.PagePromise { + if (isRequestOptions(params)) { + return this.list({}, params); + } + const { betas, ...query } = params; + return this._client.getAPIList('/v1/messages/batches?beta=true', BetaMessageBatchesPage, { + query, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + delete( + messageBatchId: string, + params?: BatchDeleteParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + delete(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + delete( + messageBatchId: string, + params: BatchDeleteParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.delete(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.delete(`/v1/messages/batches/${messageBatchId}?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + cancel( + messageBatchId: string, + params?: BatchCancelParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + cancel(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise; + cancel( + messageBatchId: string, + params: BatchCancelParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.cancel(messageBatchId, {}, params); + } + const { betas } = params; + return this._client.post(`/v1/messages/batches/${messageBatchId}/cancel?beta=true`, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + ...options?.headers, + }, + }); + } + + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + async results( + messageBatchId: string, + params?: BatchResultsParams, + options?: Core.RequestOptions, + ): Promise>; + async results( + messageBatchId: string, + options?: Core.RequestOptions, + ): Promise>; + async results( + messageBatchId: string, + params: BatchResultsParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Promise> { + if (isRequestOptions(params)) { + return this.results(messageBatchId, {}, params); + } + + const batch = await this.retrieve(messageBatchId); + if (!batch.results_url) { + throw new AnthropicError( + `No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`, + ); + } + + const { betas } = params; + return this._client + .get(batch.results_url, { + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(), + Accept: 'application/binary', + ...options?.headers, + }, + __binaryResponse: true, + }) + ._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } +} + +export class BetaMessageBatchesPage extends Page {} + +export interface BetaDeletedMessageBatch { + /** + * ID of the Message Batch. + */ + id: string; + + /** + * Deleted object type. + * + * For Message Batches, this is always `"message_batch_deleted"`. + */ + type: 'message_batch_deleted'; +} + +export interface BetaMessageBatch { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * archived and its results became unavailable. + */ + archived_at: string | null; + + /** + * RFC 3339 datetime string representing the time at which cancellation was + * initiated for the Message Batch. Specified only if cancellation was initiated. + */ + cancel_initiated_at: string | null; + + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * created. + */ + created_at: string; + + /** + * RFC 3339 datetime string representing the time at which processing for the + * Message Batch ended. Specified only once processing ends. + * + * Processing ends when every request in a Message Batch has either succeeded, + * errored, canceled, or expired. + */ + ended_at: string | null; + + /** + * RFC 3339 datetime string representing the time at which the Message Batch will + * expire and end processing, which is 24 hours after creation. + */ + expires_at: string; + + /** + * Processing status of the Message Batch. + */ + processing_status: 'in_progress' | 'canceling' | 'ended'; + + /** + * Tallies requests within the Message Batch, categorized by their status. + * + * Requests start as `processing` and move to one of the other statuses only once + * processing of the entire batch ends. The sum of all values always matches the + * total number of requests in the batch. + */ + request_counts: BetaMessageBatchRequestCounts; + + /** + * URL to a `.jsonl` file containing the results of the Message Batch requests. + * Specified only once processing ends. + * + * Results in the file are not guaranteed to be in the same order as requests. Use + * the `custom_id` field to match results to requests. + */ + results_url: string | null; + + /** + * Object type. + * + * For Message Batches, this is always `"message_batch"`. + */ + type: 'message_batch'; +} + +export interface BetaMessageBatchCanceledResult { + type: 'canceled'; +} + +export interface BetaMessageBatchErroredResult { + error: BetaAPI.BetaErrorResponse; + + type: 'errored'; +} + +export interface BetaMessageBatchExpiredResult { + type: 'expired'; +} + +/** + * This is a single line in the response `.jsonl` file and does not represent the + * response as a whole. + */ +export interface BetaMessageBatchIndividualResponse { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + + /** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ + result: BetaMessageBatchResult; +} + +export interface BetaMessageBatchRequestCounts { + /** + * Number of requests in the Message Batch that have been canceled. + * + * This is zero until processing of the entire Message Batch has ended. + */ + canceled: number; + + /** + * Number of requests in the Message Batch that encountered an error. + * + * This is zero until processing of the entire Message Batch has ended. + */ + errored: number; + + /** + * Number of requests in the Message Batch that have expired. + * + * This is zero until processing of the entire Message Batch has ended. + */ + expired: number; + + /** + * Number of requests in the Message Batch that are processing. + */ + processing: number; + + /** + * Number of requests in the Message Batch that have completed successfully. + * + * This is zero until processing of the entire Message Batch has ended. + */ + succeeded: number; +} + +/** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ +export type BetaMessageBatchResult = + | BetaMessageBatchSucceededResult + | BetaMessageBatchErroredResult + | BetaMessageBatchCanceledResult + | BetaMessageBatchExpiredResult; + +export interface BetaMessageBatchSucceededResult { + message: BetaMessagesAPI.BetaMessage; + + type: 'succeeded'; +} + +export interface BatchCreateParams { + /** + * Body param: List of requests for prompt completion. Each is an individual + * request to create a Message. + */ + requests: Array; + + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +export namespace BatchCreateParams { + export interface Request { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + + /** + * Messages API creation parameters for the individual request. + * + * See the [Messages API reference](/en/api/messages) for full documentation on + * available parameters. + */ + params: Omit; + } +} + +export interface BatchRetrieveParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +export interface BatchListParams extends PageParams { + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +export interface BatchDeleteParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +export interface BatchCancelParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +export interface BatchResultsParams { + /** + * Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +Batches.BetaMessageBatchesPage = BetaMessageBatchesPage; + +export declare namespace Batches { + export { + type BetaDeletedMessageBatch as BetaDeletedMessageBatch, + type BetaMessageBatch as BetaMessageBatch, + type BetaMessageBatchCanceledResult as BetaMessageBatchCanceledResult, + type BetaMessageBatchErroredResult as BetaMessageBatchErroredResult, + type BetaMessageBatchExpiredResult as BetaMessageBatchExpiredResult, + type BetaMessageBatchIndividualResponse as BetaMessageBatchIndividualResponse, + type BetaMessageBatchRequestCounts as BetaMessageBatchRequestCounts, + type BetaMessageBatchResult as BetaMessageBatchResult, + type BetaMessageBatchSucceededResult as BetaMessageBatchSucceededResult, + BetaMessageBatchesPage as BetaMessageBatchesPage, + type BatchCreateParams as BatchCreateParams, + type BatchRetrieveParams as BatchRetrieveParams, + type BatchListParams as BatchListParams, + type BatchDeleteParams as BatchDeleteParams, + type BatchCancelParams as BatchCancelParams, + type BatchResultsParams as BatchResultsParams, + }; +} diff --git a/vendor/sdk/src/resources/beta/messages/index.ts b/vendor/sdk/src/resources/beta/messages/index.ts new file mode 100644 index 0000000..04d53c4 --- /dev/null +++ b/vendor/sdk/src/resources/beta/messages/index.ts @@ -0,0 +1,87 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + BetaMessageBatchesPage, + Batches, + type BetaDeletedMessageBatch, + type BetaMessageBatch, + type BetaMessageBatchCanceledResult, + type BetaMessageBatchErroredResult, + type BetaMessageBatchExpiredResult, + type BetaMessageBatchIndividualResponse, + type BetaMessageBatchRequestCounts, + type BetaMessageBatchResult, + type BetaMessageBatchSucceededResult, + type BatchCreateParams, + type BatchRetrieveParams, + type BatchListParams, + type BatchDeleteParams, + type BatchCancelParams, + type BatchResultsParams, +} from "./batches.js"; +export { + Messages, + type BetaBase64PDFBlock, + type BetaBase64PDFSource, + type BetaCacheControlEphemeral, + type BetaCitationCharLocation, + type BetaCitationCharLocationParam, + type BetaCitationContentBlockLocation, + type BetaCitationContentBlockLocationParam, + type BetaCitationPageLocation, + type BetaCitationPageLocationParam, + type BetaCitationsConfigParam, + type BetaCitationsDelta, + type BetaContentBlock, + type BetaContentBlockParam, + type BetaContentBlockSource, + type BetaContentBlockSourceContent, + type BetaImageBlockParam, + type BetaInputJSONDelta, + type BetaMessage, + type BetaMessageDeltaUsage, + type BetaMessageParam, + type BetaMessageTokensCount, + type BetaMetadata, + type BetaPlainTextSource, + type BetaRawContentBlockDeltaEvent, + type BetaRawContentBlockStartEvent, + type BetaRawContentBlockStopEvent, + type BetaRawMessageDeltaEvent, + type BetaRawMessageStartEvent, + type BetaRawMessageStopEvent, + type BetaRawMessageStreamEvent, + type BetaRedactedThinkingBlock, + type BetaRedactedThinkingBlockParam, + type BetaSignatureDelta, + type BetaTextBlock, + type BetaTextBlockParam, + type BetaTextCitation, + type BetaTextCitationParam, + type BetaTextDelta, + type BetaThinkingBlock, + type BetaThinkingBlockParam, + type BetaThinkingConfigDisabled, + type BetaThinkingConfigEnabled, + type BetaThinkingDelta, + type BetaTool, + type BetaToolBash20241022, + type BetaToolBash20250124, + type BetaToolChoice, + type BetaToolChoiceAny, + type BetaToolChoiceAuto, + type BetaToolChoiceTool, + type BetaToolComputerUse20241022, + type BetaToolResultBlockParam, + type BetaToolTextEditor20241022, + type BetaToolTextEditor20250124, + type BetaToolUnion, + type BetaToolUseBlock, + type BetaToolUseBlockParam, + type BetaUsage, + type MessageCreateParams, + type MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming, + type MessageCountTokensParams, + type BetaMessageStreamParams, +} from "./messages.js"; diff --git a/vendor/sdk/src/resources/beta/messages/messages.ts b/vendor/sdk/src/resources/beta/messages/messages.ts new file mode 100644 index 0000000..fed515d --- /dev/null +++ b/vendor/sdk/src/resources/beta/messages/messages.ts @@ -0,0 +1,1444 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../../../resource.js"; +import { APIPromise } from "../../../core.js"; +import * as Core from "../../../core.js"; +import * as MessagesMessagesAPI from "./messages.js"; +import * as BetaAPI from "../beta.js"; +import * as MessagesAPI from "../../messages/messages.js"; +import * as BatchesAPI from "./batches.js"; +import { + BatchCancelParams, + BatchCreateParams, + BatchDeleteParams, + BatchListParams, + BatchResultsParams, + BatchRetrieveParams, + Batches, + BetaDeletedMessageBatch, + BetaMessageBatch, + BetaMessageBatchCanceledResult, + BetaMessageBatchErroredResult, + BetaMessageBatchExpiredResult, + BetaMessageBatchIndividualResponse, + BetaMessageBatchRequestCounts, + BetaMessageBatchResult, + BetaMessageBatchSucceededResult, + BetaMessageBatchesPage, +} from "./batches.js"; +import { Stream } from "../../../streaming.js"; +import { BetaMessageStream } from "../../../lib/BetaMessageStream.js"; +import type { Model } from "../../messages/messages.js"; + +const DEPRECATED_MODELS: { + [K in Model]?: string; +} = { + 'claude-1.3': 'November 6th, 2024', + 'claude-1.3-100k': 'November 6th, 2024', + 'claude-instant-1.1': 'November 6th, 2024', + 'claude-instant-1.1-100k': 'November 6th, 2024', + 'claude-instant-1.2': 'November 6th, 2024', + 'claude-3-sonnet-20240229': 'July 21st, 2025', + 'claude-2.1': 'July 21st, 2025', + 'claude-2.0': 'July 21st, 2025', +}; + +export class Messages extends APIResource { + batches: BatchesAPI.Batches = new BatchesAPI.Batches(this._client); + + /** + * Send a structured list of input messages with text and/or image content, and the + * model will generate the next message in the conversation. + * + * The Messages API can be used for either single queries or stateless multi-turn + * conversations. + * + * Learn more about the Messages API in our [user guide](/en/docs/initial-setup) + */ + create(params: MessageCreateParamsNonStreaming, options?: Core.RequestOptions): APIPromise; + create( + params: MessageCreateParamsStreaming, + options?: Core.RequestOptions, + ): APIPromise>; + create( + params: MessageCreateParamsBase, + options?: Core.RequestOptions, + ): APIPromise | BetaMessage>; + create( + params: MessageCreateParams, + options?: Core.RequestOptions, + ): APIPromise | APIPromise> { + const { betas, ...body } = params; + + if (body.model in DEPRECATED_MODELS) { + console.warn( + `The model '${body.model}' is deprecated and will reach end-of-life on ${ + DEPRECATED_MODELS[body.model] + }\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`, + ); + } + + return this._client.post('/v1/messages?beta=true', { + body, + timeout: (this._client as any)._options.timeout ?? 600000, + ...options, + headers: { + ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined), + ...options?.headers, + }, + stream: params.stream ?? false, + }) as APIPromise | APIPromise>; + } + + /** + * Create a Message stream + */ + stream(body: BetaMessageStreamParams, options?: Core.RequestOptions): BetaMessageStream { + return BetaMessageStream.createMessage(this, body, options); + } + + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens( + params: MessageCountTokensParams, + options?: Core.RequestOptions, + ): Core.APIPromise { + const { betas, ...body } = params; + return this._client.post('/v1/messages/count_tokens?beta=true', { + body, + ...options, + headers: { + 'anthropic-beta': [...(betas ?? []), 'token-counting-2024-11-01'].toString(), + ...options?.headers, + }, + }); + } +} + +export type BetaMessageStreamParams = MessageCreateParamsBase; + +export interface BetaBase64PDFBlock { + source: BetaBase64PDFSource | BetaPlainTextSource | BetaContentBlockSource; + + type: 'document'; + + cache_control?: BetaCacheControlEphemeral | null; + + citations?: BetaCitationsConfigParam; + + context?: string | null; + + title?: string | null; +} + +export interface BetaBase64PDFSource { + data: string; + + media_type: 'application/pdf'; + + type: 'base64'; +} + +export interface BetaCacheControlEphemeral { + type: 'ephemeral'; +} + +export interface BetaCitationCharLocation { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_char_index: number; + + start_char_index: number; + + type: 'char_location'; +} + +export interface BetaCitationCharLocationParam { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_char_index: number; + + start_char_index: number; + + type: 'char_location'; +} + +export interface BetaCitationContentBlockLocation { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_block_index: number; + + start_block_index: number; + + type: 'content_block_location'; +} + +export interface BetaCitationContentBlockLocationParam { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_block_index: number; + + start_block_index: number; + + type: 'content_block_location'; +} + +export interface BetaCitationPageLocation { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_page_number: number; + + start_page_number: number; + + type: 'page_location'; +} + +export interface BetaCitationPageLocationParam { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_page_number: number; + + start_page_number: number; + + type: 'page_location'; +} + +export interface BetaCitationsConfigParam { + enabled?: boolean; +} + +export interface BetaCitationsDelta { + citation: BetaCitationCharLocation | BetaCitationPageLocation | BetaCitationContentBlockLocation; + + type: 'citations_delta'; +} + +export type BetaContentBlock = + | BetaTextBlock + | BetaToolUseBlock + | BetaThinkingBlock + | BetaRedactedThinkingBlock; + +export type BetaContentBlockParam = + | BetaTextBlockParam + | BetaImageBlockParam + | BetaToolUseBlockParam + | BetaToolResultBlockParam + | BetaBase64PDFBlock + | BetaThinkingBlockParam + | BetaRedactedThinkingBlockParam; + +export interface BetaContentBlockSource { + content: string | Array; + + type: 'content'; +} + +export type BetaContentBlockSourceContent = BetaTextBlockParam | BetaImageBlockParam; + +export interface BetaImageBlockParam { + source: BetaImageBlockParam.Source; + + type: 'image'; + + cache_control?: BetaCacheControlEphemeral | null; +} + +export namespace BetaImageBlockParam { + export interface Source { + data: string; + + media_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp'; + + type: 'base64'; + } +} + +export interface BetaInputJSONDelta { + partial_json: string; + + type: 'input_json_delta'; +} + +export interface BetaMessage { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + + /** + * Content generated by the model. + * + * This is an array of content blocks, each of which has a `type` that determines + * its shape. + * + * Example: + * + * ```json + * [{ "type": "text", "text": "Hi, I'm Claude." }] + * ``` + * + * If the request input `messages` ended with an `assistant` turn, then the + * response `content` will continue directly from that last turn. You can use this + * to constrain the model's output. + * + * For example, if the input `messages` were: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Then the response `content` might be: + * + * ```json + * [{ "type": "text", "text": "B)" }] + * ``` + */ + content: Array; + + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + + /** + * Conversational role of the generated message. + * + * This will always be `"assistant"`. + */ + role: 'assistant'; + + /** + * The reason that we stopped. + * + * This may be one the following values: + * + * - `"end_turn"`: the model reached a natural stopping point + * - `"max_tokens"`: we exceeded the requested `max_tokens` or the model's maximum + * - `"stop_sequence"`: one of your provided custom `stop_sequences` was generated + * - `"tool_use"`: the model invoked one or more tools + * + * In non-streaming mode this value is always non-null. In streaming mode, it is + * null in the `message_start` event and non-null otherwise. + */ + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + + /** + * Which custom stop sequence was generated, if any. + * + * This value will be a non-null string if one of your custom stop sequences was + * generated. + */ + stop_sequence: string | null; + + /** + * Object type. + * + * For Messages, this is always `"message"`. + */ + type: 'message'; + + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: BetaUsage; +} + +export interface BetaMessageDeltaUsage { + /** + * The cumulative number of output tokens which were used. + */ + output_tokens: number; +} + +export interface BetaMessageParam { + content: string | Array; + + role: 'user' | 'assistant'; +} + +export interface BetaMessageTokensCount { + /** + * The total number of tokens across the provided list of messages, system prompt, + * and tools. + */ + input_tokens: number; +} + +export interface BetaMetadata { + /** + * An external identifier for the user who is associated with the request. + * + * This should be a uuid, hash value, or other opaque identifier. Anthropic may use + * this id to help detect abuse. Do not include any identifying information such as + * name, email address, or phone number. + */ + user_id?: string | null; +} + +export interface BetaPlainTextSource { + data: string; + + media_type: 'text/plain'; + + type: 'text'; +} + +export interface BetaRawContentBlockDeltaEvent { + delta: BetaTextDelta | BetaInputJSONDelta | BetaCitationsDelta | BetaThinkingDelta | BetaSignatureDelta; + + index: number; + + type: 'content_block_delta'; +} + +export interface BetaRawContentBlockStartEvent { + content_block: BetaTextBlock | BetaToolUseBlock | BetaThinkingBlock | BetaRedactedThinkingBlock; + + index: number; + + type: 'content_block_start'; +} + +export interface BetaRawContentBlockStopEvent { + index: number; + + type: 'content_block_stop'; +} + +export interface BetaRawMessageDeltaEvent { + delta: BetaRawMessageDeltaEvent.Delta; + + type: 'message_delta'; + + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: BetaMessageDeltaUsage; +} + +export namespace BetaRawMessageDeltaEvent { + export interface Delta { + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + + stop_sequence: string | null; + } +} + +export interface BetaRawMessageStartEvent { + message: BetaMessage; + + type: 'message_start'; +} + +export interface BetaRawMessageStopEvent { + type: 'message_stop'; +} + +export type BetaRawMessageStreamEvent = + | BetaRawMessageStartEvent + | BetaRawMessageDeltaEvent + | BetaRawMessageStopEvent + | BetaRawContentBlockStartEvent + | BetaRawContentBlockDeltaEvent + | BetaRawContentBlockStopEvent; + +export interface BetaRedactedThinkingBlock { + data: string; + + type: 'redacted_thinking'; +} + +export interface BetaRedactedThinkingBlockParam { + data: string; + + type: 'redacted_thinking'; +} + +export interface BetaSignatureDelta { + signature: string; + + type: 'signature_delta'; +} + +export interface BetaTextBlock { + /** + * Citations supporting the text block. + * + * The type of citation returned will depend on the type of document being cited. + * Citing a PDF results in `page_location`, plain text results in `char_location`, + * and content document results in `content_block_location`. + */ + citations: Array | null; + + text: string; + + type: 'text'; +} + +export interface BetaTextBlockParam { + text: string; + + type: 'text'; + + cache_control?: BetaCacheControlEphemeral | null; + + citations?: Array | null; +} + +export type BetaTextCitation = + | BetaCitationCharLocation + | BetaCitationPageLocation + | BetaCitationContentBlockLocation; + +export type BetaTextCitationParam = + | BetaCitationCharLocationParam + | BetaCitationPageLocationParam + | BetaCitationContentBlockLocationParam; + +export interface BetaTextDelta { + text: string; + + type: 'text_delta'; +} + +export interface BetaThinkingBlock { + signature: string; + + thinking: string; + + type: 'thinking'; +} + +export interface BetaThinkingBlockParam { + signature: string; + + thinking: string; + + type: 'thinking'; +} + +export interface BetaThinkingConfigDisabled { + type: 'disabled'; +} + +export interface BetaThinkingConfigEnabled { + budget_tokens: number; + + type: 'enabled'; +} + +export interface BetaThinkingDelta { + thinking: string; + + type: 'thinking_delta'; +} + +export interface BetaTool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + input_schema: BetaTool.InputSchema; + + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: string; + + cache_control?: BetaCacheControlEphemeral | null; + + /** + * Description of what this tool does. + * + * Tool descriptions should be as detailed as possible. The more information that + * the model has about what the tool is and how to use it, the better it will + * perform. You can use natural language descriptions to reinforce important + * aspects of the tool input JSON schema. + */ + description?: string; + + type?: 'custom' | null; +} + +export namespace BetaTool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + export interface InputSchema { + type: 'object'; + + properties?: unknown | null; + [k: string]: unknown; + } +} + +export interface BetaToolBash20241022 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + + type: 'bash_20241022'; + + cache_control?: BetaCacheControlEphemeral | null; +} + +export interface BetaToolBash20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + + type: 'bash_20250124'; + + cache_control?: BetaCacheControlEphemeral | null; +} + +/** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ +export type BetaToolChoice = BetaToolChoiceAuto | BetaToolChoiceAny | BetaToolChoiceTool; + +/** + * The model will use any available tools. + */ +export interface BetaToolChoiceAny { + type: 'any'; + + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} + +/** + * The model will automatically decide whether to use tools. + */ +export interface BetaToolChoiceAuto { + type: 'auto'; + + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output at most one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} + +/** + * The model will use the specified tool with `tool_choice.name`. + */ +export interface BetaToolChoiceTool { + /** + * The name of the tool to use. + */ + name: string; + + type: 'tool'; + + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} + +export interface BetaToolComputerUse20241022 { + /** + * The height of the display in pixels. + */ + display_height_px: number; + + /** + * The width of the display in pixels. + */ + display_width_px: number; + + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'computer'; + + type: 'computer_20241022'; + + cache_control?: BetaCacheControlEphemeral | null; + + /** + * The X11 display number (e.g. 0, 1) for the display. + */ + display_number?: number | null; +} + +export interface BetaToolResultBlockParam { + tool_use_id: string; + + type: 'tool_result'; + + cache_control?: BetaCacheControlEphemeral | null; + + content?: string | Array; + + is_error?: boolean; +} + +export interface BetaToolTextEditor20241022 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + + type: 'text_editor_20241022'; + + cache_control?: BetaCacheControlEphemeral | null; +} + +export interface BetaToolTextEditor20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + + type: 'text_editor_20250124'; + + cache_control?: BetaCacheControlEphemeral | null; +} + +export type BetaToolUnion = + | BetaToolComputerUse20241022 + | BetaToolBash20241022 + | BetaToolTextEditor20241022 + | BetaToolBash20250124 + | BetaToolTextEditor20250124 + | BetaTool; + +export interface BetaToolUseBlock { + id: string; + + input: unknown; + + name: string; + + type: 'tool_use'; +} + +export interface BetaToolUseBlockParam { + id: string; + + input: unknown; + + name: string; + + type: 'tool_use'; + + cache_control?: BetaCacheControlEphemeral | null; +} + +export interface BetaUsage { + /** + * The number of input tokens used to create the cache entry. + */ + cache_creation_input_tokens: number | null; + + /** + * The number of input tokens read from the cache. + */ + cache_read_input_tokens: number | null; + + /** + * The number of input tokens which were used. + */ + input_tokens: number; + + /** + * The number of output tokens which were used. + */ + output_tokens: number; +} + +export type MessageCreateParams = MessageCreateParamsNonStreaming | MessageCreateParamsStreaming; + +export interface MessageCreateParamsBase { + /** + * Body param: The maximum number of tokens to generate before stopping. + * + * Note that our models may stop _before_ reaching this maximum. This parameter + * only specifies the absolute maximum number of tokens to generate. + * + * Different models have different maximum values for this parameter. See + * [models](https://docs.anthropic.com/en/docs/models-overview) for details. + */ + max_tokens: number; + + /** + * Body param: Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + + /** + * Body param: The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + + /** + * Body param: An object describing metadata about the request. + */ + metadata?: BetaMetadata; + + /** + * Body param: Custom text sequences that will cause the model to stop generating. + * + * Our models will normally stop when they have naturally completed their turn, + * which will result in a response `stop_reason` of `"end_turn"`. + * + * If you want the model to stop generating when it encounters custom strings of + * text, you can use the `stop_sequences` parameter. If the model encounters one of + * the custom sequences, the response `stop_reason` value will be `"stop_sequence"` + * and the response `stop_sequence` value will contain the matched stop sequence. + */ + stop_sequences?: Array; + + /** + * Body param: Whether to incrementally stream the response using server-sent + * events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: boolean; + + /** + * Body param: System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + + /** + * Body param: Amount of randomness injected into the response. + * + * Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` + * for analytical / multiple choice, and closer to `1.0` for creative and + * generative tasks. + * + * Note that even with `temperature` of `0.0`, the results will not be fully + * deterministic. + */ + temperature?: number; + + /** + * Body param: + */ + thinking?: BetaThinkingConfigEnabled | BetaThinkingConfigDisabled; + + /** + * Body param: How the model should use the provided tools. The model can use a + * specific tool, any available tool, or decide by itself. + */ + tool_choice?: BetaToolChoice; + + /** + * Body param: Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array; + + /** + * Body param: Only sample from the top K options for each subsequent token. + * + * Used to remove "long tail" low probability responses. + * [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_k?: number; + + /** + * Body param: Use nucleus sampling. + * + * In nucleus sampling, we compute the cumulative distribution over all the options + * for each subsequent token in decreasing probability order and cut it off once it + * reaches a particular probability specified by `top_p`. You should either alter + * `temperature` or `top_p`, but not both. + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_p?: number; + + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +export namespace MessageCreateParams { + export type MessageCreateParamsNonStreaming = MessagesMessagesAPI.MessageCreateParamsNonStreaming; + export type MessageCreateParamsStreaming = MessagesMessagesAPI.MessageCreateParamsStreaming; +} + +export interface MessageCreateParamsNonStreaming extends MessageCreateParamsBase { + /** + * Body param: Whether to incrementally stream the response using server-sent + * events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: false; +} + +export interface MessageCreateParamsStreaming extends MessageCreateParamsBase { + /** + * Body param: Whether to incrementally stream the response using server-sent + * events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream: true; +} + +export interface MessageCountTokensParams { + /** + * Body param: Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + + /** + * Body param: The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + + /** + * Body param: System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + + /** + * Body param: + */ + thinking?: BetaThinkingConfigEnabled | BetaThinkingConfigDisabled; + + /** + * Body param: How the model should use the provided tools. The model can use a + * specific tool, any available tool, or decide by itself. + */ + tool_choice?: BetaToolChoice; + + /** + * Body param: Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array< + | BetaToolComputerUse20241022 + | BetaToolBash20241022 + | BetaToolTextEditor20241022 + | BetaToolBash20250124 + | BetaToolTextEditor20250124 + | BetaTool + >; + + /** + * Header param: Optional header to specify the beta version(s) you want to use. + */ + betas?: Array; +} + +Messages.Batches = Batches; +Messages.BetaMessageBatchesPage = BetaMessageBatchesPage; + +export declare namespace Messages { + export { + type BetaBase64PDFBlock as BetaBase64PDFBlock, + type BetaBase64PDFSource as BetaBase64PDFSource, + type BetaCacheControlEphemeral as BetaCacheControlEphemeral, + type BetaCitationCharLocation as BetaCitationCharLocation, + type BetaCitationCharLocationParam as BetaCitationCharLocationParam, + type BetaCitationContentBlockLocation as BetaCitationContentBlockLocation, + type BetaCitationContentBlockLocationParam as BetaCitationContentBlockLocationParam, + type BetaCitationPageLocation as BetaCitationPageLocation, + type BetaCitationPageLocationParam as BetaCitationPageLocationParam, + type BetaCitationsConfigParam as BetaCitationsConfigParam, + type BetaCitationsDelta as BetaCitationsDelta, + type BetaContentBlock as BetaContentBlock, + type BetaContentBlockParam as BetaContentBlockParam, + type BetaContentBlockSource as BetaContentBlockSource, + type BetaContentBlockSourceContent as BetaContentBlockSourceContent, + type BetaImageBlockParam as BetaImageBlockParam, + type BetaInputJSONDelta as BetaInputJSONDelta, + type BetaMessage as BetaMessage, + type BetaMessageDeltaUsage as BetaMessageDeltaUsage, + type BetaMessageParam as BetaMessageParam, + type BetaMessageTokensCount as BetaMessageTokensCount, + type BetaMetadata as BetaMetadata, + type BetaPlainTextSource as BetaPlainTextSource, + type BetaRawContentBlockDeltaEvent as BetaRawContentBlockDeltaEvent, + type BetaRawContentBlockStartEvent as BetaRawContentBlockStartEvent, + type BetaRawContentBlockStopEvent as BetaRawContentBlockStopEvent, + type BetaRawMessageDeltaEvent as BetaRawMessageDeltaEvent, + type BetaRawMessageStartEvent as BetaRawMessageStartEvent, + type BetaRawMessageStopEvent as BetaRawMessageStopEvent, + type BetaRawMessageStreamEvent as BetaRawMessageStreamEvent, + type BetaRedactedThinkingBlock as BetaRedactedThinkingBlock, + type BetaRedactedThinkingBlockParam as BetaRedactedThinkingBlockParam, + type BetaSignatureDelta as BetaSignatureDelta, + type BetaTextBlock as BetaTextBlock, + type BetaTextBlockParam as BetaTextBlockParam, + type BetaTextCitation as BetaTextCitation, + type BetaTextCitationParam as BetaTextCitationParam, + type BetaTextDelta as BetaTextDelta, + type BetaThinkingBlock as BetaThinkingBlock, + type BetaThinkingBlockParam as BetaThinkingBlockParam, + type BetaThinkingConfigDisabled as BetaThinkingConfigDisabled, + type BetaThinkingConfigEnabled as BetaThinkingConfigEnabled, + type BetaThinkingDelta as BetaThinkingDelta, + type BetaTool as BetaTool, + type BetaToolBash20241022 as BetaToolBash20241022, + type BetaToolBash20250124 as BetaToolBash20250124, + type BetaToolChoice as BetaToolChoice, + type BetaToolChoiceAny as BetaToolChoiceAny, + type BetaToolChoiceAuto as BetaToolChoiceAuto, + type BetaToolChoiceTool as BetaToolChoiceTool, + type BetaToolComputerUse20241022 as BetaToolComputerUse20241022, + type BetaToolResultBlockParam as BetaToolResultBlockParam, + type BetaToolTextEditor20241022 as BetaToolTextEditor20241022, + type BetaToolTextEditor20250124 as BetaToolTextEditor20250124, + type BetaToolUnion as BetaToolUnion, + type BetaToolUseBlock as BetaToolUseBlock, + type BetaToolUseBlockParam as BetaToolUseBlockParam, + type BetaUsage as BetaUsage, + type MessageCreateParams as MessageCreateParams, + type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming as MessageCreateParamsStreaming, + type MessageCountTokensParams as MessageCountTokensParams, + }; + + export { + Batches as Batches, + type BetaDeletedMessageBatch as BetaDeletedMessageBatch, + type BetaMessageBatch as BetaMessageBatch, + type BetaMessageBatchCanceledResult as BetaMessageBatchCanceledResult, + type BetaMessageBatchErroredResult as BetaMessageBatchErroredResult, + type BetaMessageBatchExpiredResult as BetaMessageBatchExpiredResult, + type BetaMessageBatchIndividualResponse as BetaMessageBatchIndividualResponse, + type BetaMessageBatchRequestCounts as BetaMessageBatchRequestCounts, + type BetaMessageBatchResult as BetaMessageBatchResult, + type BetaMessageBatchSucceededResult as BetaMessageBatchSucceededResult, + BetaMessageBatchesPage as BetaMessageBatchesPage, + type BatchCreateParams as BatchCreateParams, + type BatchRetrieveParams as BatchRetrieveParams, + type BatchListParams as BatchListParams, + type BatchDeleteParams as BatchDeleteParams, + type BatchCancelParams as BatchCancelParams, + type BatchResultsParams as BatchResultsParams, + }; +} diff --git a/vendor/sdk/src/resources/beta/models.ts b/vendor/sdk/src/resources/beta/models.ts new file mode 100644 index 0000000..6dd1077 --- /dev/null +++ b/vendor/sdk/src/resources/beta/models.ts @@ -0,0 +1,78 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../../resource.js"; +import { isRequestOptions } from "../../core.js"; +import * as Core from "../../core.js"; +import { Page, type PageParams } from "../../pagination.js"; + +export class Models extends APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/v1/models/${modelId}?beta=true`, options); + } + + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + */ + list( + query?: ModelListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + query: ModelListParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/models?beta=true', BetaModelInfosPage, { query, ...options }); + } +} + +export class BetaModelInfosPage extends Page {} + +export interface BetaModelInfo { + /** + * Unique model identifier. + */ + id: string; + + /** + * RFC 3339 datetime string representing the time at which the model was released. + * May be set to an epoch value if the release date is unknown. + */ + created_at: string; + + /** + * A human-readable name for the model. + */ + display_name: string; + + /** + * Object type. + * + * For Models, this is always `"model"`. + */ + type: 'model'; +} + +export interface ModelListParams extends PageParams {} + +Models.BetaModelInfosPage = BetaModelInfosPage; + +export declare namespace Models { + export { + type BetaModelInfo as BetaModelInfo, + BetaModelInfosPage as BetaModelInfosPage, + type ModelListParams as ModelListParams, + }; +} diff --git a/vendor/sdk/src/resources/completions.ts b/vendor/sdk/src/resources/completions.ts new file mode 100644 index 0000000..2d64c35 --- /dev/null +++ b/vendor/sdk/src/resources/completions.ts @@ -0,0 +1,210 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../resource.js"; +import { APIPromise } from "../core.js"; +import * as Core from "../core.js"; +import * as CompletionsAPI from "./completions.js"; +import * as MessagesAPI from "./messages/messages.js"; +import { Stream } from "../streaming.js"; + +export class Completions extends APIResource { + /** + * [Legacy] Create a Text Completion. + * + * The Text Completions API is a legacy API. We recommend using the + * [Messages API](https://docs.anthropic.com/en/api/messages) going forward. + * + * Future models and features will not be compatible with Text Completions. See our + * [migration guide](https://docs.anthropic.com/en/api/migrating-from-text-completions-to-messages) + * for guidance in migrating from Text Completions to Messages. + */ + create(body: CompletionCreateParamsNonStreaming, options?: Core.RequestOptions): APIPromise; + create( + body: CompletionCreateParamsStreaming, + options?: Core.RequestOptions, + ): APIPromise>; + create( + body: CompletionCreateParamsBase, + options?: Core.RequestOptions, + ): APIPromise | Completion>; + create( + body: CompletionCreateParams, + options?: Core.RequestOptions, + ): APIPromise | APIPromise> { + return this._client.post('/v1/complete', { + body, + timeout: (this._client as any)._options.timeout ?? 600000, + ...options, + stream: body.stream ?? false, + }) as APIPromise | APIPromise>; + } +} + +export interface Completion { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + + /** + * The resulting completion up to and excluding the stop sequences. + */ + completion: string; + + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + + /** + * The reason that we stopped. + * + * This may be one the following values: + * + * - `"stop_sequence"`: we reached a stop sequence — either provided by you via the + * `stop_sequences` parameter, or a stop sequence built into the model + * - `"max_tokens"`: we exceeded `max_tokens_to_sample` or the model's maximum + */ + stop_reason: string | null; + + /** + * Object type. + * + * For Text Completions, this is always `"completion"`. + */ + type: 'completion'; +} + +export type CompletionCreateParams = CompletionCreateParamsNonStreaming | CompletionCreateParamsStreaming; + +export interface CompletionCreateParamsBase { + /** + * The maximum number of tokens to generate before stopping. + * + * Note that our models may stop _before_ reaching this maximum. This parameter + * only specifies the absolute maximum number of tokens to generate. + */ + max_tokens_to_sample: number; + + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: MessagesAPI.Model; + + /** + * The prompt that you want Claude to complete. + * + * For proper response generation you will need to format your prompt using + * alternating `\n\nHuman:` and `\n\nAssistant:` conversational turns. For example: + * + * ``` + * "\n\nHuman: {userQuestion}\n\nAssistant:" + * ``` + * + * See [prompt validation](https://docs.anthropic.com/en/api/prompt-validation) and + * our guide to + * [prompt design](https://docs.anthropic.com/en/docs/intro-to-prompting) for more + * details. + */ + prompt: string; + + /** + * An object describing metadata about the request. + */ + metadata?: MessagesAPI.Metadata; + + /** + * Sequences that will cause the model to stop generating. + * + * Our models stop on `"\n\nHuman:"`, and may include additional built-in stop + * sequences in the future. By providing the stop_sequences parameter, you may + * include additional strings that will cause the model to stop generating. + */ + stop_sequences?: Array; + + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/streaming) for details. + */ + stream?: boolean; + + /** + * Amount of randomness injected into the response. + * + * Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` + * for analytical / multiple choice, and closer to `1.0` for creative and + * generative tasks. + * + * Note that even with `temperature` of `0.0`, the results will not be fully + * deterministic. + */ + temperature?: number; + + /** + * Only sample from the top K options for each subsequent token. + * + * Used to remove "long tail" low probability responses. + * [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_k?: number; + + /** + * Use nucleus sampling. + * + * In nucleus sampling, we compute the cumulative distribution over all the options + * for each subsequent token in decreasing probability order and cut it off once it + * reaches a particular probability specified by `top_p`. You should either alter + * `temperature` or `top_p`, but not both. + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_p?: number; +} + +export namespace CompletionCreateParams { + /** + * @deprecated use `Anthropic.Messages.Metadata` instead + */ + export type Metadata = MessagesAPI.Metadata; + + export type CompletionCreateParamsNonStreaming = CompletionsAPI.CompletionCreateParamsNonStreaming; + export type CompletionCreateParamsStreaming = CompletionsAPI.CompletionCreateParamsStreaming; +} + +export interface CompletionCreateParamsNonStreaming extends CompletionCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/streaming) for details. + */ + stream?: false; +} + +export interface CompletionCreateParamsStreaming extends CompletionCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/streaming) for details. + */ + stream: true; +} + +export declare namespace Completions { + export { + type Completion as Completion, + type CompletionCreateParams as CompletionCreateParams, + type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming, + type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming, + }; +} diff --git a/vendor/sdk/src/resources/index.ts b/vendor/sdk/src/resources/index.ts new file mode 100644 index 0000000..d028ad8 --- /dev/null +++ b/vendor/sdk/src/resources/index.ts @@ -0,0 +1,95 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from "./shared.js"; +export { + Beta, + type AnthropicBeta, + type BetaAPIError, + type BetaAuthenticationError, + type BetaBillingError, + type BetaError, + type BetaErrorResponse, + type BetaGatewayTimeoutError, + type BetaInvalidRequestError, + type BetaNotFoundError, + type BetaOverloadedError, + type BetaPermissionError, + type BetaRateLimitError, +} from "./beta/beta.js"; +export { + Completions, + type Completion, + type CompletionCreateParams, + type CompletionCreateParamsNonStreaming, + type CompletionCreateParamsStreaming, +} from "./completions.js"; +export { + Messages, + type Base64PDFSource, + type CacheControlEphemeral, + type CitationCharLocation, + type CitationCharLocationParam, + type CitationContentBlockLocation, + type CitationContentBlockLocationParam, + type CitationPageLocation, + type CitationPageLocationParam, + type CitationsConfigParam, + type CitationsDelta, + type ContentBlock, + type ContentBlockDeltaEvent, + type ContentBlockParam, + type ContentBlockSource, + type ContentBlockSourceContent, + type ContentBlockStartEvent, + type ContentBlockStopEvent, + type DocumentBlockParam, + type ImageBlockParam, + type InputJsonDelta, + type InputJSONDelta, + type Message, + type MessageDeltaEvent, + type MessageDeltaUsage, + type MessageParam, + type MessageStartEvent, + type MessageStopEvent, + type MessageStreamEvent, + type MessageStreamParams, + type MessageTokensCount, + type Metadata, + type Model, + type PlainTextSource, + type RawContentBlockDeltaEvent, + type RawContentBlockStartEvent, + type RawContentBlockStopEvent, + type RawMessageDeltaEvent, + type RawMessageStartEvent, + type RawMessageStopEvent, + type RawMessageStreamEvent, + type RedactedThinkingBlock, + type RedactedThinkingBlockParam, + type SignatureDelta, + type TextBlock, + type TextBlockParam, + type TextCitation, + type TextCitationParam, + type TextDelta, + type ThinkingBlock, + type ThinkingBlockParam, + type ThinkingConfigDisabled, + type ThinkingConfigEnabled, + type ThinkingDelta, + type Tool, + type ToolChoice, + type ToolChoiceAny, + type ToolChoiceAuto, + type ToolChoiceTool, + type ToolResultBlockParam, + type ToolUseBlock, + type ToolUseBlockParam, + type Usage, + type MessageCreateParams, + type MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming, + type MessageCountTokensParams, +} from "./messages/messages.js"; +export { ModelInfosPage, Models, type ModelInfo, type ModelListParams } from "./models.js"; diff --git a/vendor/sdk/src/resources/messages/batches.ts b/vendor/sdk/src/resources/messages/batches.ts new file mode 100644 index 0000000..666dc36 --- /dev/null +++ b/vendor/sdk/src/resources/messages/batches.ts @@ -0,0 +1,352 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../../resource.js"; +import { isRequestOptions } from "../../core.js"; +import * as Core from "../../core.js"; +import * as Shared from "../shared.js"; +import * as MessagesAPI from "./messages.js"; +import { Page, type PageParams } from "../../pagination.js"; +import { JSONLDecoder } from "../../internal/decoders/jsonl.js"; +import { AnthropicError } from "../../error.js"; + +export class Batches extends APIResource { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + create(body: BatchCreateParams, options?: Core.RequestOptions): Core.APIPromise { + return this._client.post('/v1/messages/batches', { body, ...options }); + } + + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + retrieve(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/v1/messages/batches/${messageBatchId}`, options); + } + + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + list( + query?: BatchListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + query: BatchListParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/messages/batches', MessageBatchesPage, { query, ...options }); + } + + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + delete(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.delete(`/v1/messages/batches/${messageBatchId}`, options); + } + + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + cancel(messageBatchId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.post(`/v1/messages/batches/${messageBatchId}/cancel`, options); + } + + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](/en/docs/build-with-claude/batch-processing) + */ + async results( + messageBatchId: string, + options?: Core.RequestOptions, + ): Promise> { + const batch = await this.retrieve(messageBatchId); + if (!batch.results_url) { + throw new AnthropicError( + `No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`, + ); + } + + return this._client + .get(batch.results_url, { + ...options, + headers: { + Accept: 'application/binary', + ...options?.headers, + }, + __binaryResponse: true, + }) + ._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } +} + +export class MessageBatchesPage extends Page {} + +export interface DeletedMessageBatch { + /** + * ID of the Message Batch. + */ + id: string; + + /** + * Deleted object type. + * + * For Message Batches, this is always `"message_batch_deleted"`. + */ + type: 'message_batch_deleted'; +} + +export interface MessageBatch { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * archived and its results became unavailable. + */ + archived_at: string | null; + + /** + * RFC 3339 datetime string representing the time at which cancellation was + * initiated for the Message Batch. Specified only if cancellation was initiated. + */ + cancel_initiated_at: string | null; + + /** + * RFC 3339 datetime string representing the time at which the Message Batch was + * created. + */ + created_at: string; + + /** + * RFC 3339 datetime string representing the time at which processing for the + * Message Batch ended. Specified only once processing ends. + * + * Processing ends when every request in a Message Batch has either succeeded, + * errored, canceled, or expired. + */ + ended_at: string | null; + + /** + * RFC 3339 datetime string representing the time at which the Message Batch will + * expire and end processing, which is 24 hours after creation. + */ + expires_at: string; + + /** + * Processing status of the Message Batch. + */ + processing_status: 'in_progress' | 'canceling' | 'ended'; + + /** + * Tallies requests within the Message Batch, categorized by their status. + * + * Requests start as `processing` and move to one of the other statuses only once + * processing of the entire batch ends. The sum of all values always matches the + * total number of requests in the batch. + */ + request_counts: MessageBatchRequestCounts; + + /** + * URL to a `.jsonl` file containing the results of the Message Batch requests. + * Specified only once processing ends. + * + * Results in the file are not guaranteed to be in the same order as requests. Use + * the `custom_id` field to match results to requests. + */ + results_url: string | null; + + /** + * Object type. + * + * For Message Batches, this is always `"message_batch"`. + */ + type: 'message_batch'; +} + +export interface MessageBatchCanceledResult { + type: 'canceled'; +} + +export interface MessageBatchErroredResult { + error: Shared.ErrorResponse; + + type: 'errored'; +} + +export interface MessageBatchExpiredResult { + type: 'expired'; +} + +/** + * This is a single line in the response `.jsonl` file and does not represent the + * response as a whole. + */ +export interface MessageBatchIndividualResponse { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + + /** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ + result: MessageBatchResult; +} + +export interface MessageBatchRequestCounts { + /** + * Number of requests in the Message Batch that have been canceled. + * + * This is zero until processing of the entire Message Batch has ended. + */ + canceled: number; + + /** + * Number of requests in the Message Batch that encountered an error. + * + * This is zero until processing of the entire Message Batch has ended. + */ + errored: number; + + /** + * Number of requests in the Message Batch that have expired. + * + * This is zero until processing of the entire Message Batch has ended. + */ + expired: number; + + /** + * Number of requests in the Message Batch that are processing. + */ + processing: number; + + /** + * Number of requests in the Message Batch that have completed successfully. + * + * This is zero until processing of the entire Message Batch has ended. + */ + succeeded: number; +} + +/** + * Processing result for this request. + * + * Contains a Message output if processing was successful, an error response if + * processing failed, or the reason why processing was not attempted, such as + * cancellation or expiration. + */ +export type MessageBatchResult = + | MessageBatchSucceededResult + | MessageBatchErroredResult + | MessageBatchCanceledResult + | MessageBatchExpiredResult; + +export interface MessageBatchSucceededResult { + message: MessagesAPI.Message; + + type: 'succeeded'; +} + +export interface BatchCreateParams { + /** + * List of requests for prompt completion. Each is an individual request to create + * a Message. + */ + requests: Array; +} + +export namespace BatchCreateParams { + export interface Request { + /** + * Developer-provided ID created for each request in a Message Batch. Useful for + * matching results to requests, as results may be given out of request order. + * + * Must be unique for each request within the Message Batch. + */ + custom_id: string; + + /** + * Messages API creation parameters for the individual request. + * + * See the [Messages API reference](/en/api/messages) for full documentation on + * available parameters. + */ + params: MessagesAPI.MessageCreateParamsNonStreaming; + } +} + +export interface BatchListParams extends PageParams {} + +Batches.MessageBatchesPage = MessageBatchesPage; + +export declare namespace Batches { + export { + type DeletedMessageBatch as DeletedMessageBatch, + type MessageBatch as MessageBatch, + type MessageBatchCanceledResult as MessageBatchCanceledResult, + type MessageBatchErroredResult as MessageBatchErroredResult, + type MessageBatchExpiredResult as MessageBatchExpiredResult, + type MessageBatchIndividualResponse as MessageBatchIndividualResponse, + type MessageBatchRequestCounts as MessageBatchRequestCounts, + type MessageBatchResult as MessageBatchResult, + type MessageBatchSucceededResult as MessageBatchSucceededResult, + MessageBatchesPage as MessageBatchesPage, + type BatchCreateParams as BatchCreateParams, + type BatchListParams as BatchListParams, + }; +} diff --git a/vendor/sdk/src/resources/messages/index.ts b/vendor/sdk/src/resources/messages/index.ts new file mode 100644 index 0000000..55748c7 --- /dev/null +++ b/vendor/sdk/src/resources/messages/index.ts @@ -0,0 +1,85 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + MessageBatchesPage, + Batches, + type DeletedMessageBatch, + type MessageBatch, + type MessageBatchCanceledResult, + type MessageBatchErroredResult, + type MessageBatchExpiredResult, + type MessageBatchIndividualResponse, + type MessageBatchRequestCounts, + type MessageBatchResult, + type MessageBatchSucceededResult, + type BatchCreateParams, + type BatchListParams, +} from "./batches.js"; +export { + Messages, + type Base64PDFSource, + type CacheControlEphemeral, + type CitationCharLocation, + type CitationCharLocationParam, + type CitationContentBlockLocation, + type CitationContentBlockLocationParam, + type CitationPageLocation, + type CitationPageLocationParam, + type CitationsConfigParam, + type CitationsDelta, + type ContentBlock, + type ContentBlockDeltaEvent, + type ContentBlockParam, + type ContentBlockSource, + type ContentBlockSourceContent, + type ContentBlockStartEvent, + type ContentBlockStopEvent, + type DocumentBlockParam, + type ImageBlockParam, + type InputJSONDelta, + type Message, + type MessageDeltaEvent, + type MessageDeltaUsage, + type MessageParam, + type MessageStartEvent, + type MessageStopEvent, + type MessageStreamEvent, + type MessageTokensCount, + type Metadata, + type Model, + type PlainTextSource, + type RawContentBlockDeltaEvent, + type RawContentBlockStartEvent, + type RawContentBlockStopEvent, + type RawMessageDeltaEvent, + type RawMessageStartEvent, + type RawMessageStopEvent, + type RawMessageStreamEvent, + type RedactedThinkingBlock, + type RedactedThinkingBlockParam, + type SignatureDelta, + type TextBlock, + type TextBlockParam, + type TextCitation, + type TextCitationParam, + type TextDelta, + type ThinkingBlock, + type ThinkingBlockParam, + type ThinkingConfigDisabled, + type ThinkingConfigEnabled, + type ThinkingDelta, + type Tool, + type ToolChoice, + type ToolChoiceAny, + type ToolChoiceAuto, + type ToolChoiceTool, + type ToolResultBlockParam, + type ToolUseBlock, + type ToolUseBlockParam, + type Usage, + type MessageCreateParams, + type MessageCreateParamsBase, + type MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming, + type MessageCountTokensParams, +} from "./messages.js"; diff --git a/vendor/sdk/src/resources/messages/messages.ts b/vendor/sdk/src/resources/messages/messages.ts new file mode 100644 index 0000000..de604f8 --- /dev/null +++ b/vendor/sdk/src/resources/messages/messages.ts @@ -0,0 +1,1412 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../../resource.js"; +import { APIPromise } from "../../core.js"; +import * as Core from "../../core.js"; +import * as MessagesAPI from "./messages.js"; +import * as BatchesAPI from "./batches.js"; +import { + BatchCreateParams, + BatchListParams, + Batches, + DeletedMessageBatch, + MessageBatch, + MessageBatchCanceledResult, + MessageBatchErroredResult, + MessageBatchExpiredResult, + MessageBatchIndividualResponse, + MessageBatchRequestCounts, + MessageBatchResult, + MessageBatchSucceededResult, + MessageBatchesPage, +} from "./batches.js"; +import { Stream } from "../../streaming.js"; +import { MessageStream } from "../../lib/MessageStream.js"; + +export { MessageStream } from "../../lib/MessageStream.js"; + +export class Messages extends APIResource { + batches: BatchesAPI.Batches = new BatchesAPI.Batches(this._client); + + /** + * Send a structured list of input messages with text and/or image content, and the + * model will generate the next message in the conversation. + * + * The Messages API can be used for either single queries or stateless multi-turn + * conversations. + * + * Learn more about the Messages API in our [user guide](/en/docs/initial-setup) + */ + create(body: MessageCreateParamsNonStreaming, options?: Core.RequestOptions): APIPromise; + create( + body: MessageCreateParamsStreaming, + options?: Core.RequestOptions, + ): APIPromise>; + create( + body: MessageCreateParamsBase, + options?: Core.RequestOptions, + ): APIPromise | Message>; + create( + body: MessageCreateParams, + options?: Core.RequestOptions, + ): APIPromise | APIPromise> { + if (body.model in DEPRECATED_MODELS) { + console.warn( + `The model '${body.model}' is deprecated and will reach end-of-life on ${ + DEPRECATED_MODELS[body.model] + }\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`, + ); + } + return this._client.post('/v1/messages', { + body, + timeout: (this._client as any)._options.timeout ?? 600000, + ...options, + stream: body.stream ?? false, + }) as APIPromise | APIPromise>; + } + + /** + * Create a Message stream + */ + stream(body: MessageStreamParams, options?: Core.RequestOptions): MessageStream { + return MessageStream.createMessage(this, body, options); + } + + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](/en/docs/build-with-claude/token-counting) + */ + countTokens( + body: MessageCountTokensParams, + options?: Core.RequestOptions, + ): Core.APIPromise { + return this._client.post('/v1/messages/count_tokens', { body, ...options }); + } +} + +export interface Base64PDFSource { + data: string; + + media_type: 'application/pdf'; + + type: 'base64'; +} + +export interface CacheControlEphemeral { + type: 'ephemeral'; +} + +export interface CitationCharLocation { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_char_index: number; + + start_char_index: number; + + type: 'char_location'; +} + +export interface CitationCharLocationParam { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_char_index: number; + + start_char_index: number; + + type: 'char_location'; +} + +export interface CitationContentBlockLocation { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_block_index: number; + + start_block_index: number; + + type: 'content_block_location'; +} + +export interface CitationContentBlockLocationParam { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_block_index: number; + + start_block_index: number; + + type: 'content_block_location'; +} + +export interface CitationPageLocation { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_page_number: number; + + start_page_number: number; + + type: 'page_location'; +} + +export interface CitationPageLocationParam { + cited_text: string; + + document_index: number; + + document_title: string | null; + + end_page_number: number; + + start_page_number: number; + + type: 'page_location'; +} + +export interface CitationsConfigParam { + enabled?: boolean; +} + +export interface CitationsDelta { + citation: CitationCharLocation | CitationPageLocation | CitationContentBlockLocation; + + type: 'citations_delta'; +} + +export type ContentBlock = TextBlock | ToolUseBlock | ThinkingBlock | RedactedThinkingBlock; + +export type ContentBlockDeltaEvent = RawContentBlockDeltaEvent; + +export type ContentBlockParam = + | TextBlockParam + | ImageBlockParam + | ToolUseBlockParam + | ToolResultBlockParam + | DocumentBlockParam + | ThinkingBlockParam + | RedactedThinkingBlockParam; + +export interface ContentBlockSource { + content: string | Array; + + type: 'content'; +} + +export type ContentBlockSourceContent = TextBlockParam | ImageBlockParam; + +export type ContentBlockStartEvent = RawContentBlockStartEvent; + +export type ContentBlockStopEvent = RawContentBlockStopEvent; + +export interface DocumentBlockParam { + source: Base64PDFSource | PlainTextSource | ContentBlockSource; + + type: 'document'; + + cache_control?: CacheControlEphemeral | null; + + citations?: CitationsConfigParam; + + context?: string | null; + + title?: string | null; +} + +export interface ImageBlockParam { + source: ImageBlockParam.Source; + + type: 'image'; + + cache_control?: CacheControlEphemeral | null; +} + +export namespace ImageBlockParam { + export interface Source { + data: string; + + media_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp'; + + type: 'base64'; + } +} + +export type InputJsonDelta = InputJSONDelta; + +export interface InputJSONDelta { + partial_json: string; + + type: 'input_json_delta'; +} + +export interface Message { + /** + * Unique object identifier. + * + * The format and length of IDs may change over time. + */ + id: string; + + /** + * Content generated by the model. + * + * This is an array of content blocks, each of which has a `type` that determines + * its shape. + * + * Example: + * + * ```json + * [{ "type": "text", "text": "Hi, I'm Claude." }] + * ``` + * + * If the request input `messages` ended with an `assistant` turn, then the + * response `content` will continue directly from that last turn. You can use this + * to constrain the model's output. + * + * For example, if the input `messages` were: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Then the response `content` might be: + * + * ```json + * [{ "type": "text", "text": "B)" }] + * ``` + */ + content: Array; + + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: Model; + + /** + * Conversational role of the generated message. + * + * This will always be `"assistant"`. + */ + role: 'assistant'; + + /** + * The reason that we stopped. + * + * This may be one the following values: + * + * - `"end_turn"`: the model reached a natural stopping point + * - `"max_tokens"`: we exceeded the requested `max_tokens` or the model's maximum + * - `"stop_sequence"`: one of your provided custom `stop_sequences` was generated + * - `"tool_use"`: the model invoked one or more tools + * + * In non-streaming mode this value is always non-null. In streaming mode, it is + * null in the `message_start` event and non-null otherwise. + */ + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + + /** + * Which custom stop sequence was generated, if any. + * + * This value will be a non-null string if one of your custom stop sequences was + * generated. + */ + stop_sequence: string | null; + + /** + * Object type. + * + * For Messages, this is always `"message"`. + */ + type: 'message'; + + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: Usage; +} + +export type MessageDeltaEvent = RawMessageDeltaEvent; + +export interface MessageDeltaUsage { + /** + * The cumulative number of output tokens which were used. + */ + output_tokens: number; +} + +export interface MessageParam { + content: string | Array; + + role: 'user' | 'assistant'; +} + +export type MessageStartEvent = RawMessageStartEvent; + +export type MessageStopEvent = RawMessageStopEvent; + +export type MessageStreamEvent = RawMessageStreamEvent; + +export interface MessageTokensCount { + /** + * The total number of tokens across the provided list of messages, system prompt, + * and tools. + */ + input_tokens: number; +} + +export interface Metadata { + /** + * An external identifier for the user who is associated with the request. + * + * This should be a uuid, hash value, or other opaque identifier. Anthropic may use + * this id to help detect abuse. Do not include any identifying information such as + * name, email address, or phone number. + */ + user_id?: string | null; +} + +/** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ +export type Model = + | 'claude-3-5-haiku-latest' + | 'claude-3-5-haiku-20241022' + | 'claude-3-5-sonnet-latest' + | 'claude-3-5-sonnet-20241022' + | 'claude-3-5-sonnet-20240620' + | 'claude-3-opus-latest' + | 'claude-3-opus-20240229' + | 'claude-3-sonnet-20240229' + | 'claude-3-haiku-20240307' + | 'claude-2.1' + | 'claude-2.0' + | (string & {}); + +const DEPRECATED_MODELS: { + [K in Model]?: string; +} = { + 'claude-1.3': 'November 6th, 2024', + 'claude-1.3-100k': 'November 6th, 2024', + 'claude-instant-1.1': 'November 6th, 2024', + 'claude-instant-1.1-100k': 'November 6th, 2024', + 'claude-instant-1.2': 'November 6th, 2024', + 'claude-3-sonnet-20240229': 'July 21st, 2025', + 'claude-2.1': 'July 21st, 2025', + 'claude-2.0': 'July 21st, 2025', +}; + +export interface PlainTextSource { + data: string; + + media_type: 'text/plain'; + + type: 'text'; +} + +export interface RawContentBlockDeltaEvent { + delta: TextDelta | InputJSONDelta | CitationsDelta | ThinkingDelta | SignatureDelta; + + index: number; + + type: 'content_block_delta'; +} + +export interface RawContentBlockStartEvent { + content_block: TextBlock | ToolUseBlock | ThinkingBlock | RedactedThinkingBlock; + + index: number; + + type: 'content_block_start'; +} + +export interface RawContentBlockStopEvent { + index: number; + + type: 'content_block_stop'; +} + +export interface RawMessageDeltaEvent { + delta: RawMessageDeltaEvent.Delta; + + type: 'message_delta'; + + /** + * Billing and rate-limit usage. + * + * Anthropic's API bills and rate-limits by token counts, as tokens represent the + * underlying cost to our systems. + * + * Under the hood, the API transforms requests into a format suitable for the + * model. The model's output then goes through a parsing stage before becoming an + * API response. As a result, the token counts in `usage` will not match one-to-one + * with the exact visible content of an API request or response. + * + * For example, `output_tokens` will be non-zero, even for an empty string response + * from Claude. + * + * Total input tokens in a request is the summation of `input_tokens`, + * `cache_creation_input_tokens`, and `cache_read_input_tokens`. + */ + usage: MessageDeltaUsage; +} + +export namespace RawMessageDeltaEvent { + export interface Delta { + stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; + + stop_sequence: string | null; + } +} + +export interface RawMessageStartEvent { + message: Message; + + type: 'message_start'; +} + +export interface RawMessageStopEvent { + type: 'message_stop'; +} + +export type RawMessageStreamEvent = + | RawMessageStartEvent + | RawMessageDeltaEvent + | RawMessageStopEvent + | RawContentBlockStartEvent + | RawContentBlockDeltaEvent + | RawContentBlockStopEvent; + +export interface RedactedThinkingBlock { + data: string; + + type: 'redacted_thinking'; +} + +export interface RedactedThinkingBlockParam { + data: string; + + type: 'redacted_thinking'; +} + +export interface SignatureDelta { + signature: string; + + type: 'signature_delta'; +} + +export interface TextBlock { + /** + * Citations supporting the text block. + * + * The type of citation returned will depend on the type of document being cited. + * Citing a PDF results in `page_location`, plain text results in `char_location`, + * and content document results in `content_block_location`. + */ + citations: Array | null; + + text: string; + + type: 'text'; +} + +export interface TextBlockParam { + text: string; + + type: 'text'; + + cache_control?: CacheControlEphemeral | null; + + citations?: Array | null; +} + +export type TextCitation = CitationCharLocation | CitationPageLocation | CitationContentBlockLocation; + +export type TextCitationParam = + | CitationCharLocationParam + | CitationPageLocationParam + | CitationContentBlockLocationParam; + +export interface TextDelta { + text: string; + + type: 'text_delta'; +} + +export interface ThinkingBlock { + signature: string; + + thinking: string; + + type: 'thinking'; +} + +export interface ThinkingBlockParam { + signature: string; + + thinking: string; + + type: 'thinking'; +} + +export interface ThinkingConfigDisabled { + type: 'disabled'; +} + +export interface ThinkingConfigEnabled { + budget_tokens: number; + + type: 'enabled'; +} + +export interface ThinkingDelta { + thinking: string; + + type: 'thinking_delta'; +} + +export interface Tool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + input_schema: Tool.InputSchema; + + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: string; + + cache_control?: CacheControlEphemeral | null; + + /** + * Description of what this tool does. + * + * Tool descriptions should be as detailed as possible. The more information that + * the model has about what the tool is and how to use it, the better it will + * perform. You can use natural language descriptions to reinforce important + * aspects of the tool input JSON schema. + */ + description?: string; +} + +export namespace Tool { + /** + * [JSON schema](https://json-schema.org/draft/2020-12) for this tool's input. + * + * This defines the shape of the `input` that your tool accepts and that the model + * will produce. + */ + export interface InputSchema { + type: 'object'; + + properties?: unknown | null; + [k: string]: unknown; + } +} + +/** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ +export type ToolChoice = ToolChoiceAuto | ToolChoiceAny | ToolChoiceTool; + +/** + * The model will use any available tools. + */ +export interface ToolChoiceAny { + type: 'any'; + + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} + +/** + * The model will automatically decide whether to use tools. + */ +export interface ToolChoiceAuto { + type: 'auto'; + + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output at most one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} + +/** + * The model will use the specified tool with `tool_choice.name`. + */ +export interface ToolChoiceTool { + /** + * The name of the tool to use. + */ + name: string; + + type: 'tool'; + + /** + * Whether to disable parallel tool use. + * + * Defaults to `false`. If set to `true`, the model will output exactly one tool + * use. + */ + disable_parallel_tool_use?: boolean; +} + +export interface ToolResultBlockParam { + tool_use_id: string; + + type: 'tool_result'; + + cache_control?: CacheControlEphemeral | null; + + content?: string | Array; + + is_error?: boolean; +} + +export interface ToolUseBlock { + id: string; + + input: unknown; + + name: string; + + type: 'tool_use'; +} + +export interface ToolUseBlockParam { + id: string; + + input: unknown; + + name: string; + + type: 'tool_use'; + + cache_control?: CacheControlEphemeral | null; +} + +export interface Usage { + /** + * The number of input tokens used to create the cache entry. + */ + cache_creation_input_tokens: number | null; + + /** + * The number of input tokens read from the cache. + */ + cache_read_input_tokens: number | null; + + /** + * The number of input tokens which were used. + */ + input_tokens: number; + + /** + * The number of output tokens which were used. + */ + output_tokens: number; +} + +export type MessageCreateParams = MessageCreateParamsNonStreaming | MessageCreateParamsStreaming; + +export interface MessageCreateParamsBase { + /** + * The maximum number of tokens to generate before stopping. + * + * Note that our models may stop _before_ reaching this maximum. This parameter + * only specifies the absolute maximum number of tokens to generate. + * + * Different models have different maximum values for this parameter. See + * [models](https://docs.anthropic.com/en/docs/models-overview) for details. + */ + max_tokens: number; + + /** + * Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: Model; + + /** + * An object describing metadata about the request. + */ + metadata?: Metadata; + + /** + * Custom text sequences that will cause the model to stop generating. + * + * Our models will normally stop when they have naturally completed their turn, + * which will result in a response `stop_reason` of `"end_turn"`. + * + * If you want the model to stop generating when it encounters custom strings of + * text, you can use the `stop_sequences` parameter. If the model encounters one of + * the custom sequences, the response `stop_reason` value will be `"stop_sequence"` + * and the response `stop_sequence` value will contain the matched stop sequence. + */ + stop_sequences?: Array; + + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: boolean; + + /** + * System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + + /** + * Amount of randomness injected into the response. + * + * Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` + * for analytical / multiple choice, and closer to `1.0` for creative and + * generative tasks. + * + * Note that even with `temperature` of `0.0`, the results will not be fully + * deterministic. + */ + temperature?: number; + + thinking?: ThinkingConfigEnabled | ThinkingConfigDisabled; + + /** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ + tool_choice?: ToolChoice; + + /** + * Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array; + + /** + * Only sample from the top K options for each subsequent token. + * + * Used to remove "long tail" low probability responses. + * [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_k?: number; + + /** + * Use nucleus sampling. + * + * In nucleus sampling, we compute the cumulative distribution over all the options + * for each subsequent token in decreasing probability order and cut it off once it + * reaches a particular probability specified by `top_p`. You should either alter + * `temperature` or `top_p`, but not both. + * + * Recommended for advanced use cases only. You usually only need to use + * `temperature`. + */ + top_p?: number; +} + +export namespace MessageCreateParams { + /** + * @deprecated use `Anthropic.Messages.ToolChoiceAuto` instead + */ + export type Metadata = MessagesAPI.Metadata; + + /** + * @deprecated use `Anthropic.Messages.ToolChoiceAuto` instead + */ + export type ToolChoiceAuto = MessagesAPI.ToolChoiceAuto; + + /** + * @deprecated use `Anthropic.Messages.ToolChoiceAny` instead + */ + export type ToolChoiceAny = MessagesAPI.ToolChoiceAny; + + /** + * @deprecated use `Anthropic.Messages.ToolChoiceTool` instead + */ + export type ToolChoiceTool = MessagesAPI.ToolChoiceTool; + + export interface BashTool20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + + type: 'bash_20250124'; + + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } + + export interface TextEditor20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + + type: 'text_editor_20250124'; + + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } + + export type MessageCreateParamsNonStreaming = MessagesAPI.MessageCreateParamsNonStreaming; + export type MessageCreateParamsStreaming = MessagesAPI.MessageCreateParamsStreaming; +} + +export interface MessageCreateParamsNonStreaming extends MessageCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream?: false; +} + +export interface MessageCreateParamsStreaming extends MessageCreateParamsBase { + /** + * Whether to incrementally stream the response using server-sent events. + * + * See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for + * details. + */ + stream: true; +} + +export type MessageStreamParams = MessageCreateParamsBase; + +export interface MessageCountTokensParams { + /** + * Input messages. + * + * Our models are trained to operate on alternating `user` and `assistant` + * conversational turns. When creating a new `Message`, you specify the prior + * conversational turns with the `messages` parameter, and the model then generates + * the next `Message` in the conversation. Consecutive `user` or `assistant` turns + * in your request will be combined into a single turn. + * + * Each input message must be an object with a `role` and `content`. You can + * specify a single `user`-role message, or you can include multiple `user` and + * `assistant` messages. + * + * If the final message uses the `assistant` role, the response content will + * continue immediately from the content in that message. This can be used to + * constrain part of the model's response. + * + * Example with a single `user` message: + * + * ```json + * [{ "role": "user", "content": "Hello, Claude" }] + * ``` + * + * Example with multiple conversational turns: + * + * ```json + * [ + * { "role": "user", "content": "Hello there." }, + * { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, + * { "role": "user", "content": "Can you explain LLMs in plain English?" } + * ] + * ``` + * + * Example with a partially-filled response from Claude: + * + * ```json + * [ + * { + * "role": "user", + * "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" + * }, + * { "role": "assistant", "content": "The best answer is (" } + * ] + * ``` + * + * Each input message `content` may be either a single `string` or an array of + * content blocks, where each block has a specific `type`. Using a `string` for + * `content` is shorthand for an array of one content block of type `"text"`. The + * following input messages are equivalent: + * + * ```json + * { "role": "user", "content": "Hello, Claude" } + * ``` + * + * ```json + * { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } + * ``` + * + * Starting with Claude 3 models, you can also send image content blocks: + * + * ```json + * { + * "role": "user", + * "content": [ + * { + * "type": "image", + * "source": { + * "type": "base64", + * "media_type": "image/jpeg", + * "data": "/9j/4AAQSkZJRg..." + * } + * }, + * { "type": "text", "text": "What is in this image?" } + * ] + * } + * ``` + * + * We currently support the `base64` source type for images, and the `image/jpeg`, + * `image/png`, `image/gif`, and `image/webp` media types. + * + * See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for + * more input examples. + * + * Note that if you want to include a + * [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use + * the top-level `system` parameter — there is no `"system"` role for input + * messages in the Messages API. + */ + messages: Array; + + /** + * The model that will complete your prompt.\n\nSee + * [models](https://docs.anthropic.com/en/docs/models-overview) for additional + * details and options. + */ + model: Model; + + /** + * System prompt. + * + * A system prompt is a way of providing context and instructions to Claude, such + * as specifying a particular goal or role. See our + * [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). + */ + system?: string | Array; + + thinking?: ThinkingConfigEnabled | ThinkingConfigDisabled; + + /** + * How the model should use the provided tools. The model can use a specific tool, + * any available tool, or decide by itself. + */ + tool_choice?: ToolChoice; + + /** + * Definitions of tools that the model may use. + * + * If you include `tools` in your API request, the model may return `tool_use` + * content blocks that represent the model's use of those tools. You can then run + * those tools using the tool input generated by the model and then optionally + * return results back to the model using `tool_result` content blocks. + * + * Each tool definition includes: + * + * - `name`: Name of the tool. + * - `description`: Optional, but strongly-recommended description of the tool. + * - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the + * tool `input` shape that the model will produce in `tool_use` output content + * blocks. + * + * For example, if you defined `tools` as: + * + * ```json + * [ + * { + * "name": "get_stock_price", + * "description": "Get the current stock price for a given ticker symbol.", + * "input_schema": { + * "type": "object", + * "properties": { + * "ticker": { + * "type": "string", + * "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." + * } + * }, + * "required": ["ticker"] + * } + * } + * ] + * ``` + * + * And then asked the model "What's the S&P 500 at today?", the model might produce + * `tool_use` content blocks in the response like this: + * + * ```json + * [ + * { + * "type": "tool_use", + * "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "name": "get_stock_price", + * "input": { "ticker": "^GSPC" } + * } + * ] + * ``` + * + * You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an + * input, and return the following back to the model in a subsequent `user` + * message: + * + * ```json + * [ + * { + * "type": "tool_result", + * "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", + * "content": "259.75 USD" + * } + * ] + * ``` + * + * Tools can be used for workflows that include running client-side tools and + * functions, or more generally whenever you want the model to produce a particular + * JSON structure of output. + * + * See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. + */ + tools?: Array< + MessageCountTokensParams.BashTool20250124 | MessageCountTokensParams.TextEditor20250124 | Tool + >; +} + +export namespace MessageCountTokensParams { + export interface BashTool20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'bash'; + + type: 'bash_20250124'; + + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } + + export interface TextEditor20250124 { + /** + * Name of the tool. + * + * This is how the tool will be called by the model and in tool_use blocks. + */ + name: 'str_replace_editor'; + + type: 'text_editor_20250124'; + + cache_control?: MessagesAPI.CacheControlEphemeral | null; + } +} + +Messages.Batches = Batches; +Messages.MessageBatchesPage = MessageBatchesPage; + +export declare namespace Messages { + export { + type Base64PDFSource as Base64PDFSource, + type CacheControlEphemeral as CacheControlEphemeral, + type CitationCharLocation as CitationCharLocation, + type CitationCharLocationParam as CitationCharLocationParam, + type CitationContentBlockLocation as CitationContentBlockLocation, + type CitationContentBlockLocationParam as CitationContentBlockLocationParam, + type CitationPageLocation as CitationPageLocation, + type CitationPageLocationParam as CitationPageLocationParam, + type CitationsConfigParam as CitationsConfigParam, + type CitationsDelta as CitationsDelta, + type ContentBlock as ContentBlock, + type ContentBlockDeltaEvent as ContentBlockDeltaEvent, + type ContentBlockParam as ContentBlockParam, + type ContentBlockSource as ContentBlockSource, + type ContentBlockSourceContent as ContentBlockSourceContent, + type ContentBlockStartEvent as ContentBlockStartEvent, + type ContentBlockStopEvent as ContentBlockStopEvent, + type DocumentBlockParam as DocumentBlockParam, + type ImageBlockParam as ImageBlockParam, + type InputJsonDelta as InputJsonDelta, + type InputJSONDelta as InputJSONDelta, + type Message as Message, + type MessageDeltaEvent as MessageDeltaEvent, + type MessageDeltaUsage as MessageDeltaUsage, + type MessageParam as MessageParam, + type MessageStartEvent as MessageStartEvent, + type MessageStopEvent as MessageStopEvent, + type MessageStreamEvent as MessageStreamEvent, + type MessageTokensCount as MessageTokensCount, + type Metadata as Metadata, + type Model as Model, + type PlainTextSource as PlainTextSource, + type RawContentBlockDeltaEvent as RawContentBlockDeltaEvent, + type RawContentBlockStartEvent as RawContentBlockStartEvent, + type RawContentBlockStopEvent as RawContentBlockStopEvent, + type RawMessageDeltaEvent as RawMessageDeltaEvent, + type RawMessageStartEvent as RawMessageStartEvent, + type RawMessageStopEvent as RawMessageStopEvent, + type RawMessageStreamEvent as RawMessageStreamEvent, + type RedactedThinkingBlock as RedactedThinkingBlock, + type RedactedThinkingBlockParam as RedactedThinkingBlockParam, + type SignatureDelta as SignatureDelta, + type TextBlock as TextBlock, + type TextBlockParam as TextBlockParam, + type TextCitation as TextCitation, + type TextCitationParam as TextCitationParam, + type TextDelta as TextDelta, + type ThinkingBlock as ThinkingBlock, + type ThinkingBlockParam as ThinkingBlockParam, + type ThinkingConfigDisabled as ThinkingConfigDisabled, + type ThinkingConfigEnabled as ThinkingConfigEnabled, + type ThinkingDelta as ThinkingDelta, + type Tool as Tool, + type ToolChoice as ToolChoice, + type ToolChoiceAny as ToolChoiceAny, + type ToolChoiceAuto as ToolChoiceAuto, + type ToolChoiceTool as ToolChoiceTool, + type ToolResultBlockParam as ToolResultBlockParam, + type ToolUseBlock as ToolUseBlock, + type ToolUseBlockParam as ToolUseBlockParam, + type Usage as Usage, + type MessageCreateParams as MessageCreateParams, + type MessageCreateParamsNonStreaming as MessageCreateParamsNonStreaming, + type MessageCreateParamsStreaming as MessageCreateParamsStreaming, + type MessageStreamParams as MessageStreamParams, + type MessageCountTokensParams as MessageCountTokensParams, + }; + + export { + Batches as Batches, + type DeletedMessageBatch as DeletedMessageBatch, + type MessageBatch as MessageBatch, + type MessageBatchCanceledResult as MessageBatchCanceledResult, + type MessageBatchErroredResult as MessageBatchErroredResult, + type MessageBatchExpiredResult as MessageBatchExpiredResult, + type MessageBatchIndividualResponse as MessageBatchIndividualResponse, + type MessageBatchRequestCounts as MessageBatchRequestCounts, + type MessageBatchResult as MessageBatchResult, + type MessageBatchSucceededResult as MessageBatchSucceededResult, + MessageBatchesPage as MessageBatchesPage, + type BatchCreateParams as BatchCreateParams, + type BatchListParams as BatchListParams, + }; +} diff --git a/vendor/sdk/src/resources/models.ts b/vendor/sdk/src/resources/models.ts new file mode 100644 index 0000000..0bb7988 --- /dev/null +++ b/vendor/sdk/src/resources/models.ts @@ -0,0 +1,75 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from "../resource.js"; +import { isRequestOptions } from "../core.js"; +import * as Core from "../core.js"; +import { Page, type PageParams } from "../pagination.js"; + +export class Models extends APIResource { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + */ + retrieve(modelId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/v1/models/${modelId}`, options); + } + + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + */ + list(query?: ModelListParams, options?: Core.RequestOptions): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + query: ModelListParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } + return this._client.getAPIList('/v1/models', ModelInfosPage, { query, ...options }); + } +} + +export class ModelInfosPage extends Page {} + +export interface ModelInfo { + /** + * Unique model identifier. + */ + id: string; + + /** + * RFC 3339 datetime string representing the time at which the model was released. + * May be set to an epoch value if the release date is unknown. + */ + created_at: string; + + /** + * A human-readable name for the model. + */ + display_name: string; + + /** + * Object type. + * + * For Models, this is always `"model"`. + */ + type: 'model'; +} + +export interface ModelListParams extends PageParams {} + +Models.ModelInfosPage = ModelInfosPage; + +export declare namespace Models { + export { + type ModelInfo as ModelInfo, + ModelInfosPage as ModelInfosPage, + type ModelListParams as ModelListParams, + }; +} diff --git a/vendor/sdk/src/resources/shared.ts b/vendor/sdk/src/resources/shared.ts new file mode 100644 index 0000000..d731c1f --- /dev/null +++ b/vendor/sdk/src/resources/shared.ts @@ -0,0 +1,72 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export interface APIErrorObject { + message: string; + + type: 'api_error'; +} + +export interface AuthenticationError { + message: string; + + type: 'authentication_error'; +} + +export interface BillingError { + message: string; + + type: 'billing_error'; +} + +export type ErrorObject = + | InvalidRequestError + | AuthenticationError + | BillingError + | PermissionError + | NotFoundError + | RateLimitError + | GatewayTimeoutError + | APIErrorObject + | OverloadedError; + +export interface ErrorResponse { + error: ErrorObject; + + type: 'error'; +} + +export interface GatewayTimeoutError { + message: string; + + type: 'timeout_error'; +} + +export interface InvalidRequestError { + message: string; + + type: 'invalid_request_error'; +} + +export interface NotFoundError { + message: string; + + type: 'not_found_error'; +} + +export interface OverloadedError { + message: string; + + type: 'overloaded_error'; +} + +export interface PermissionError { + message: string; + + type: 'permission_error'; +} + +export interface RateLimitError { + message: string; + + type: 'rate_limit_error'; +} diff --git a/vendor/sdk/src/resources/top-level.ts b/vendor/sdk/src/resources/top-level.ts new file mode 100644 index 0000000..b7426a6 --- /dev/null +++ b/vendor/sdk/src/resources/top-level.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export {}; diff --git a/vendor/sdk/src/shims/node.ts b/vendor/sdk/src/shims/node.ts new file mode 100644 index 0000000..f02a2fb --- /dev/null +++ b/vendor/sdk/src/shims/node.ts @@ -0,0 +1,50 @@ +// @ts-ignore +import * as types from "../_shims/node-types.js"; +import { setShims } from "../_shims/registry.js"; +import { getRuntime } from "../_shims/node-runtime.js"; +setShims(getRuntime()); + +declare module '../_shims/manual-types' { + export namespace manual { + // @ts-ignore + export type Agent = types.Agent; + // @ts-ignore + export import fetch = types.fetch; + // @ts-ignore + export type Request = types.Request; + // @ts-ignore + export type RequestInfo = types.RequestInfo; + // @ts-ignore + export type RequestInit = types.RequestInit; + // @ts-ignore + export type Response = types.Response; + // @ts-ignore + export type ResponseInit = types.ResponseInit; + // @ts-ignore + export type ResponseType = types.ResponseType; + // @ts-ignore + export type BodyInit = types.BodyInit; + // @ts-ignore + export type Headers = types.Headers; + // @ts-ignore + export type HeadersInit = types.HeadersInit; + // @ts-ignore + export type BlobPropertyBag = types.BlobPropertyBag; + // @ts-ignore + export type FilePropertyBag = types.FilePropertyBag; + // @ts-ignore + export type FileFromPathOptions = types.FileFromPathOptions; + // @ts-ignore + export import FormData = types.FormData; + // @ts-ignore + export import File = types.File; + // @ts-ignore + export import Blob = types.Blob; + // @ts-ignore + export type Readable = types.Readable; + // @ts-ignore + export type FsReadStream = types.FsReadStream; + // @ts-ignore + export import ReadableStream = types.ReadableStream; + } +} diff --git a/vendor/sdk/src/shims/web.ts b/vendor/sdk/src/shims/web.ts new file mode 100644 index 0000000..e3f7b11 --- /dev/null +++ b/vendor/sdk/src/shims/web.ts @@ -0,0 +1,50 @@ +// @ts-ignore +import * as types from "../_shims/web-types.js"; +import { setShims } from "../_shims/registry.js"; +import { getRuntime } from "../_shims/web-runtime.js"; +setShims(getRuntime({ manuallyImported: true })); + +declare module '../_shims/manual-types' { + export namespace manual { + // @ts-ignore + export type Agent = types.Agent; + // @ts-ignore + export import fetch = types.fetch; + // @ts-ignore + export type Request = types.Request; + // @ts-ignore + export type RequestInfo = types.RequestInfo; + // @ts-ignore + export type RequestInit = types.RequestInit; + // @ts-ignore + export type Response = types.Response; + // @ts-ignore + export type ResponseInit = types.ResponseInit; + // @ts-ignore + export type ResponseType = types.ResponseType; + // @ts-ignore + export type BodyInit = types.BodyInit; + // @ts-ignore + export type Headers = types.Headers; + // @ts-ignore + export type HeadersInit = types.HeadersInit; + // @ts-ignore + export type BlobPropertyBag = types.BlobPropertyBag; + // @ts-ignore + export type FilePropertyBag = types.FilePropertyBag; + // @ts-ignore + export type FileFromPathOptions = types.FileFromPathOptions; + // @ts-ignore + export import FormData = types.FormData; + // @ts-ignore + export import File = types.File; + // @ts-ignore + export import Blob = types.Blob; + // @ts-ignore + export type Readable = types.Readable; + // @ts-ignore + export type FsReadStream = types.FsReadStream; + // @ts-ignore + export import ReadableStream = types.ReadableStream; + } +} diff --git a/vendor/sdk/src/streaming.ts b/vendor/sdk/src/streaming.ts new file mode 100644 index 0000000..5a8e0ea --- /dev/null +++ b/vendor/sdk/src/streaming.ts @@ -0,0 +1,372 @@ +import { ReadableStream, type Response } from "./_shims/index.js"; +import { AnthropicError } from "./error.js"; +import { LineDecoder } from "./internal/decoders/line.js"; +import { ReadableStreamToAsyncIterable } from "./internal/stream-utils.js"; + +import { createResponseHeaders } from "./core.js"; +import { APIError } from "./error.js"; + +type Bytes = string | ArrayBuffer | Uint8Array | Buffer | null | undefined; + +export type ServerSentEvent = { + event: string | null; + data: string; + raw: string[]; +}; + +export class Stream implements AsyncIterable { + controller: AbortController; + + constructor( + private iterator: () => AsyncIterator, + controller: AbortController, + ) { + this.controller = controller; + } + + static fromSSEResponse(response: Response, controller: AbortController): Stream { + let consumed = false; + + async function* iterator(): AsyncIterator { + if (consumed) { + throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.'); + } + consumed = true; + let done = false; + try { + for await (const sse of _iterSSEMessages(response, controller)) { + if (sse.event === 'completion') { + try { + yield JSON.parse(sse.data); + } catch (e) { + console.error(`Could not parse message into JSON:`, sse.data); + console.error(`From chunk:`, sse.raw); + throw e; + } + } + + if ( + sse.event === 'message_start' || + sse.event === 'message_delta' || + sse.event === 'message_stop' || + sse.event === 'content_block_start' || + sse.event === 'content_block_delta' || + sse.event === 'content_block_stop' + ) { + try { + yield JSON.parse(sse.data); + } catch (e) { + console.error(`Could not parse message into JSON:`, sse.data); + console.error(`From chunk:`, sse.raw); + throw e; + } + } + + if (sse.event === 'ping') { + continue; + } + + if (sse.event === 'error') { + throw APIError.generate( + undefined, + `SSE Error: ${sse.data}`, + sse.data, + createResponseHeaders(response.headers), + ); + } + } + done = true; + } catch (e) { + // If the user calls `stream.controller.abort()`, we should exit without throwing. + if (e instanceof Error && e.name === 'AbortError') return; + throw e; + } finally { + // If the user `break`s, abort the ongoing request. + if (!done) controller.abort(); + } + } + + return new Stream(iterator, controller); + } + + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(readableStream: ReadableStream, controller: AbortController): Stream { + let consumed = false; + + async function* iterLines(): AsyncGenerator { + const lineDecoder = new LineDecoder(); + + const iter = ReadableStreamToAsyncIterable(readableStream); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + yield line; + } + } + + for (const line of lineDecoder.flush()) { + yield line; + } + } + + async function* iterator(): AsyncIterator { + if (consumed) { + throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.'); + } + consumed = true; + let done = false; + try { + for await (const line of iterLines()) { + if (done) continue; + if (line) yield JSON.parse(line); + } + done = true; + } catch (e) { + // If the user calls `stream.controller.abort()`, we should exit without throwing. + if (e instanceof Error && e.name === 'AbortError') return; + throw e; + } finally { + // If the user `break`s, abort the ongoing request. + if (!done) controller.abort(); + } + } + + return new Stream(iterator, controller); + } + + [Symbol.asyncIterator](): AsyncIterator { + return this.iterator(); + } + + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee(): [Stream, Stream] { + const left: Array>> = []; + const right: Array>> = []; + const iterator = this.iterator(); + + const teeIterator = (queue: Array>>): AsyncIterator => { + return { + next: () => { + if (queue.length === 0) { + const result = iterator.next(); + left.push(result); + right.push(result); + } + return queue.shift()!; + }, + }; + }; + + return [ + new Stream(() => teeIterator(left), this.controller), + new Stream(() => teeIterator(right), this.controller), + ]; + } + + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream(): ReadableStream { + const self = this; + let iter: AsyncIterator; + const encoder = new TextEncoder(); + + return new ReadableStream({ + async start() { + iter = self[Symbol.asyncIterator](); + }, + async pull(ctrl: any) { + try { + const { value, done } = await iter.next(); + if (done) return ctrl.close(); + + const bytes = encoder.encode(JSON.stringify(value) + '\n'); + + ctrl.enqueue(bytes); + } catch (err) { + ctrl.error(err); + } + }, + async cancel() { + await iter.return?.(); + }, + }); + } +} + +export async function* _iterSSEMessages( + response: Response, + controller: AbortController, +): AsyncGenerator { + if (!response.body) { + controller.abort(); + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + + const sseDecoder = new SSEDecoder(); + const lineDecoder = new LineDecoder(); + + const iter = ReadableStreamToAsyncIterable(response.body); + for await (const sseChunk of iterSSEChunks(iter)) { + for (const line of lineDecoder.decode(sseChunk)) { + const sse = sseDecoder.decode(line); + if (sse) yield sse; + } + } + + for (const line of lineDecoder.flush()) { + const sse = sseDecoder.decode(line); + if (sse) yield sse; + } +} + +/** + * Given an async iterable iterator, iterates over it and yields full + * SSE chunks, i.e. yields when a double new-line is encountered. + */ +async function* iterSSEChunks(iterator: AsyncIterableIterator): AsyncGenerator { + let data = new Uint8Array(); + + for await (const chunk of iterator) { + if (chunk == null) { + continue; + } + + const binaryChunk = + chunk instanceof ArrayBuffer ? new Uint8Array(chunk) + : typeof chunk === 'string' ? new TextEncoder().encode(chunk) + : chunk; + + let newData = new Uint8Array(data.length + binaryChunk.length); + newData.set(data); + newData.set(binaryChunk, data.length); + data = newData; + + let patternIndex; + while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) { + yield data.slice(0, patternIndex); + data = data.slice(patternIndex); + } + } + + if (data.length > 0) { + yield data; + } +} + +function findDoubleNewlineIndex(buffer: Uint8Array): number { + // This function searches the buffer for the end patterns (\r\r, \n\n, \r\n\r\n) + // and returns the index right after the first occurrence of any pattern, + // or -1 if none of the patterns are found. + const newline = 0x0a; // \n + const carriage = 0x0d; // \r + + for (let i = 0; i < buffer.length - 2; i++) { + if (buffer[i] === newline && buffer[i + 1] === newline) { + // \n\n + return i + 2; + } + if (buffer[i] === carriage && buffer[i + 1] === carriage) { + // \r\r + return i + 2; + } + if ( + buffer[i] === carriage && + buffer[i + 1] === newline && + i + 3 < buffer.length && + buffer[i + 2] === carriage && + buffer[i + 3] === newline + ) { + // \r\n\r\n + return i + 4; + } + } + + return -1; +} + +class SSEDecoder { + private data: string[]; + private event: string | null; + private chunks: string[]; + + constructor() { + this.event = null; + this.data = []; + this.chunks = []; + } + + decode(line: string) { + if (line.endsWith('\r')) { + line = line.substring(0, line.length - 1); + } + + if (!line) { + // empty line and we didn't previously encounter any messages + if (!this.event && !this.data.length) return null; + + const sse: ServerSentEvent = { + event: this.event, + data: this.data.join('\n'), + raw: this.chunks, + }; + + this.event = null; + this.data = []; + this.chunks = []; + + return sse; + } + + this.chunks.push(line); + + if (line.startsWith(':')) { + return null; + } + + let [fieldname, _, value] = partition(line, ':'); + + if (value.startsWith(' ')) { + value = value.substring(1); + } + + if (fieldname === 'event') { + this.event = value; + } else if (fieldname === 'data') { + this.data.push(value); + } + + return null; + } +} + +/** This is an internal helper function that's just used for testing */ +export function _decodeChunks(chunks: string[], { flush }: { flush: boolean } = { flush: false }): string[] { + const decoder = new LineDecoder(); + const lines: string[] = []; + for (const chunk of chunks) { + lines.push(...decoder.decode(chunk)); + } + + if (flush) { + lines.push(...decoder.flush()); + } + + return lines; +} + +function partition(str: string, delimiter: string): [string, string, string] { + const index = str.indexOf(delimiter); + if (index !== -1) { + return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)]; + } + + return [str, '', '']; +} diff --git a/vendor/sdk/src/tsconfig.json b/vendor/sdk/src/tsconfig.json new file mode 100644 index 0000000..e9f2d70 --- /dev/null +++ b/vendor/sdk/src/tsconfig.json @@ -0,0 +1,11 @@ +{ + // this config is included in the published src directory to prevent TS errors + // from appearing when users go to source, and VSCode opens the source .ts file + // via declaration maps + "include": ["index.ts"], + "compilerOptions": { + "target": "es2015", + "lib": ["DOM"], + "moduleResolution": "node" + } +} diff --git a/vendor/sdk/src/uploads.ts b/vendor/sdk/src/uploads.ts new file mode 100644 index 0000000..e38e8b8 --- /dev/null +++ b/vendor/sdk/src/uploads.ts @@ -0,0 +1,255 @@ +import { type RequestOptions } from "./core.js"; +import { + FormData, + File, + type Blob, + type FilePropertyBag, + getMultipartRequestOptions, + type FsReadStream, + isFsReadStream, +} from "./_shims/index.js"; +import { MultipartBody } from "./_shims/MultipartBody.js"; +export { fileFromPath } from "./_shims/index.js"; + +type BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | Uint8Array | DataView; +export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | Uint8Array | DataView; + +/** + * Typically, this is a native "File" class. + * + * We provide the {@link toFile} utility to convert a variety of objects + * into the File class. + * + * For convenience, you can also pass a fetch Response, or in Node, + * the result of fs.createReadStream(). + */ +export type Uploadable = FileLike | ResponseLike | FsReadStream; + +/** + * Intended to match web.Blob, node.Blob, node-fetch.Blob, etc. + */ +export interface BlobLike { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */ + readonly size: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */ + readonly type: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */ + text(): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */ + slice(start?: number, end?: number): BlobLike; + // unfortunately @types/node-fetch@^2.6.4 doesn't type the arrayBuffer method +} + +/** + * Intended to match web.File, node.File, node-fetch.File, etc. + */ +export interface FileLike extends BlobLike { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */ + readonly lastModified: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */ + readonly name: string; +} + +/** + * Intended to match web.Response, node.Response, node-fetch.Response, etc. + */ +export interface ResponseLike { + url: string; + blob(): Promise; +} + +export const isResponseLike = (value: any): value is ResponseLike => + value != null && + typeof value === 'object' && + typeof value.url === 'string' && + typeof value.blob === 'function'; + +export const isFileLike = (value: any): value is FileLike => + value != null && + typeof value === 'object' && + typeof value.name === 'string' && + typeof value.lastModified === 'number' && + isBlobLike(value); + +/** + * The BlobLike type omits arrayBuffer() because @types/node-fetch@^2.6.4 lacks it; but this check + * adds the arrayBuffer() method type because it is available and used at runtime + */ +export const isBlobLike = (value: any): value is BlobLike & { arrayBuffer(): Promise } => + value != null && + typeof value === 'object' && + typeof value.size === 'number' && + typeof value.type === 'string' && + typeof value.text === 'function' && + typeof value.slice === 'function' && + typeof value.arrayBuffer === 'function'; + +export const isUploadable = (value: any): value is Uploadable => { + return isFileLike(value) || isResponseLike(value) || isFsReadStream(value); +}; + +export type ToFileInput = Uploadable | Exclude | AsyncIterable; + +/** + * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats + * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s + * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible + * @param {Object=} options additional properties + * @param {string=} options.type the MIME type of the content + * @param {number=} options.lastModified the last modified timestamp + * @returns a {@link File} with the given properties + */ +export async function toFile( + value: ToFileInput | PromiseLike, + name?: string | null | undefined, + options?: FilePropertyBag | undefined, +): Promise { + // If it's a promise, resolve it. + value = await value; + + // If we've been given a `File` we don't need to do anything + if (isFileLike(value)) { + return value; + } + + if (isResponseLike(value)) { + const blob = await value.blob(); + name ||= new URL(value.url).pathname.split(/[\\/]/).pop() ?? 'unknown_file'; + + // we need to convert the `Blob` into an array buffer because the `Blob` class + // that `node-fetch` defines is incompatible with the web standard which results + // in `new File` interpreting it as a string instead of binary data. + const data = isBlobLike(blob) ? [(await blob.arrayBuffer()) as any] : [blob]; + + return new File(data, name, options); + } + + const bits = await getBytes(value); + + name ||= getName(value) ?? 'unknown_file'; + + if (!options?.type) { + const type = (bits[0] as any)?.type; + if (typeof type === 'string') { + options = { ...options, type }; + } + } + + return new File(bits, name, options); +} + +async function getBytes(value: ToFileInput): Promise> { + let parts: Array = []; + if ( + typeof value === 'string' || + ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc. + value instanceof ArrayBuffer + ) { + parts.push(value); + } else if (isBlobLike(value)) { + parts.push(await value.arrayBuffer()); + } else if ( + isAsyncIterableIterator(value) // includes Readable, ReadableStream, etc. + ) { + for await (const chunk of value) { + parts.push(chunk as BlobPart); // TODO, consider validating? + } + } else { + throw new Error( + `Unexpected data type: ${typeof value}; constructor: ${value?.constructor + ?.name}; props: ${propsForError(value)}`, + ); + } + + return parts; +} + +function propsForError(value: any): string { + const props = Object.getOwnPropertyNames(value); + return `[${props.map((p) => `"${p}"`).join(', ')}]`; +} + +function getName(value: any): string | undefined { + return ( + getStringFromMaybeBuffer(value.name) || + getStringFromMaybeBuffer(value.filename) || + // For fs.ReadStream + getStringFromMaybeBuffer(value.path)?.split(/[\\/]/).pop() + ); +} + +const getStringFromMaybeBuffer = (x: string | Buffer | unknown): string | undefined => { + if (typeof x === 'string') return x; + if (typeof Buffer !== 'undefined' && x instanceof Buffer) return String(x); + return undefined; +}; + +const isAsyncIterableIterator = (value: any): value is AsyncIterableIterator => + value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function'; + +export const isMultipartBody = (body: any): body is MultipartBody => + body && typeof body === 'object' && body.body && body[Symbol.toStringTag] === 'MultipartBody'; + +/** + * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value. + * Otherwise returns the request as is. + */ +export const maybeMultipartFormRequestOptions = async >( + opts: RequestOptions, +): Promise> => { + if (!hasUploadableValue(opts.body)) return opts; + + const form = await createForm(opts.body); + return getMultipartRequestOptions(form, opts); +}; + +export const multipartFormRequestOptions = async >( + opts: RequestOptions, +): Promise> => { + const form = await createForm(opts.body); + return getMultipartRequestOptions(form, opts); +}; + +export const createForm = async >(body: T | undefined): Promise => { + const form = new FormData(); + await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value))); + return form; +}; + +const hasUploadableValue = (value: unknown): boolean => { + if (isUploadable(value)) return true; + if (Array.isArray(value)) return value.some(hasUploadableValue); + if (value && typeof value === 'object') { + for (const k in value) { + if (hasUploadableValue((value as any)[k])) return true; + } + } + return false; +}; + +const addFormValue = async (form: FormData, key: string, value: unknown): Promise => { + if (value === undefined) return; + if (value == null) { + throw new TypeError( + `Received null for "${key}"; to pass null in FormData, you must use the string 'null'`, + ); + } + + // TODO: make nested formats configurable + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + form.append(key, String(value)); + } else if (isUploadable(value)) { + const file = await toFile(value); + form.append(key, file as File); + } else if (Array.isArray(value)) { + await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry))); + } else if (typeof value === 'object') { + await Promise.all( + Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)), + ); + } else { + throw new TypeError( + `Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`, + ); + } +}; diff --git a/vendor/sdk/src/version.ts b/vendor/sdk/src/version.ts new file mode 100644 index 0000000..0d28576 --- /dev/null +++ b/vendor/sdk/src/version.ts @@ -0,0 +1 @@ +export const VERSION = '0.36.3'; // x-release-please-version diff --git a/vendor/sdk/streaming.d.ts b/vendor/sdk/streaming.d.ts new file mode 100644 index 0000000..82ee334 --- /dev/null +++ b/vendor/sdk/streaming.d.ts @@ -0,0 +1,36 @@ + +import { ReadableStream, type Response } from "./_shims/index.js"; +export type ServerSentEvent = { + event: string | null; + data: string; + raw: string[]; +}; +export declare class Stream implements AsyncIterable { + private iterator; + controller: AbortController; + constructor(iterator: () => AsyncIterator, controller: AbortController); + static fromSSEResponse(response: Response, controller: AbortController): Stream; + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(readableStream: ReadableStream, controller: AbortController): Stream; + [Symbol.asyncIterator](): AsyncIterator; + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee(): [Stream, Stream]; + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream(): ReadableStream; +} +export declare function _iterSSEMessages(response: Response, controller: AbortController): AsyncGenerator; +/** This is an internal helper function that's just used for testing */ +export declare function _decodeChunks(chunks: string[], { flush }?: { + flush: boolean; +}): string[]; +//# sourceMappingURL=streaming.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/streaming.d.ts.map b/vendor/sdk/streaming.d.ts.map new file mode 100644 index 0000000..8d2321f --- /dev/null +++ b/vendor/sdk/streaming.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["src/streaming.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU/D,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;CACf,CAAC;AAEF,qBAAa,MAAM,CAAC,IAAI,CAAE,YAAW,aAAa,CAAC,IAAI,CAAC;IAIpD,OAAO,CAAC,QAAQ;IAHlB,UAAU,EAAE,eAAe,CAAC;gBAGlB,QAAQ,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,EAC3C,UAAU,EAAE,eAAe;IAK7B,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC;IAiE3F;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC;IA2C1G,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;IAI7C;;;OAGG;IACH,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAwBnC;;;;OAIG;IACH,gBAAgB,IAAI,cAAc;CA0BnC;AAED,wBAAuB,gBAAgB,CACrC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,eAAe,GAC1B,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,CAqBhD;AA0HD,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAqB,GAAG,MAAM,EAAE,CAY1G"} \ No newline at end of file diff --git a/vendor/sdk/streaming.js b/vendor/sdk/streaming.js new file mode 100644 index 0000000..3a9ded8 --- /dev/null +++ b/vendor/sdk/streaming.js @@ -0,0 +1,316 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports._decodeChunks = exports._iterSSEMessages = exports.Stream = void 0; +const index_1 = require("./_shims/index.js"); +const error_1 = require("./error.js"); +const line_1 = require("./internal/decoders/line.js"); +const stream_utils_1 = require("./internal/stream-utils.js"); +const core_1 = require("./core.js"); +const error_2 = require("./error.js"); +class Stream { + constructor(iterator, controller) { + this.iterator = iterator; + this.controller = controller; + } + static fromSSEResponse(response, controller) { + let consumed = false; + async function* iterator() { + if (consumed) { + throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.'); + } + consumed = true; + let done = false; + try { + for await (const sse of _iterSSEMessages(response, controller)) { + if (sse.event === 'completion') { + try { + yield JSON.parse(sse.data); + } + catch (e) { + console.error(`Could not parse message into JSON:`, sse.data); + console.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === 'message_start' || + sse.event === 'message_delta' || + sse.event === 'message_stop' || + sse.event === 'content_block_start' || + sse.event === 'content_block_delta' || + sse.event === 'content_block_stop') { + try { + yield JSON.parse(sse.data); + } + catch (e) { + console.error(`Could not parse message into JSON:`, sse.data); + console.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === 'ping') { + continue; + } + if (sse.event === 'error') { + throw error_2.APIError.generate(undefined, `SSE Error: ${sse.data}`, sse.data, (0, core_1.createResponseHeaders)(response.headers)); + } + } + done = true; + } + catch (e) { + // If the user calls `stream.controller.abort()`, we should exit without throwing. + if (e instanceof Error && e.name === 'AbortError') + return; + throw e; + } + finally { + // If the user `break`s, abort the ongoing request. + if (!done) + controller.abort(); + } + } + return new Stream(iterator, controller); + } + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(readableStream, controller) { + let consumed = false; + async function* iterLines() { + const lineDecoder = new line_1.LineDecoder(); + const iter = (0, stream_utils_1.ReadableStreamToAsyncIterable)(readableStream); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + yield line; + } + } + for (const line of lineDecoder.flush()) { + yield line; + } + } + async function* iterator() { + if (consumed) { + throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.'); + } + consumed = true; + let done = false; + try { + for await (const line of iterLines()) { + if (done) + continue; + if (line) + yield JSON.parse(line); + } + done = true; + } + catch (e) { + // If the user calls `stream.controller.abort()`, we should exit without throwing. + if (e instanceof Error && e.name === 'AbortError') + return; + throw e; + } + finally { + // If the user `break`s, abort the ongoing request. + if (!done) + controller.abort(); + } + } + return new Stream(iterator, controller); + } + [Symbol.asyncIterator]() { + return this.iterator(); + } + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee() { + const left = []; + const right = []; + const iterator = this.iterator(); + const teeIterator = (queue) => { + return { + next: () => { + if (queue.length === 0) { + const result = iterator.next(); + left.push(result); + right.push(result); + } + return queue.shift(); + }, + }; + }; + return [ + new Stream(() => teeIterator(left), this.controller), + new Stream(() => teeIterator(right), this.controller), + ]; + } + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream() { + const self = this; + let iter; + const encoder = new TextEncoder(); + return new index_1.ReadableStream({ + async start() { + iter = self[Symbol.asyncIterator](); + }, + async pull(ctrl) { + try { + const { value, done } = await iter.next(); + if (done) + return ctrl.close(); + const bytes = encoder.encode(JSON.stringify(value) + '\n'); + ctrl.enqueue(bytes); + } + catch (err) { + ctrl.error(err); + } + }, + async cancel() { + await iter.return?.(); + }, + }); + } +} +exports.Stream = Stream; +async function* _iterSSEMessages(response, controller) { + if (!response.body) { + controller.abort(); + throw new error_1.AnthropicError(`Attempted to iterate over a response with no body`); + } + const sseDecoder = new SSEDecoder(); + const lineDecoder = new line_1.LineDecoder(); + const iter = (0, stream_utils_1.ReadableStreamToAsyncIterable)(response.body); + for await (const sseChunk of iterSSEChunks(iter)) { + for (const line of lineDecoder.decode(sseChunk)) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } + } + for (const line of lineDecoder.flush()) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } +} +exports._iterSSEMessages = _iterSSEMessages; +/** + * Given an async iterable iterator, iterates over it and yields full + * SSE chunks, i.e. yields when a double new-line is encountered. + */ +async function* iterSSEChunks(iterator) { + let data = new Uint8Array(); + for await (const chunk of iterator) { + if (chunk == null) { + continue; + } + const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) + : typeof chunk === 'string' ? new TextEncoder().encode(chunk) + : chunk; + let newData = new Uint8Array(data.length + binaryChunk.length); + newData.set(data); + newData.set(binaryChunk, data.length); + data = newData; + let patternIndex; + while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) { + yield data.slice(0, patternIndex); + data = data.slice(patternIndex); + } + } + if (data.length > 0) { + yield data; + } +} +function findDoubleNewlineIndex(buffer) { + // This function searches the buffer for the end patterns (\r\r, \n\n, \r\n\r\n) + // and returns the index right after the first occurrence of any pattern, + // or -1 if none of the patterns are found. + const newline = 0x0a; // \n + const carriage = 0x0d; // \r + for (let i = 0; i < buffer.length - 2; i++) { + if (buffer[i] === newline && buffer[i + 1] === newline) { + // \n\n + return i + 2; + } + if (buffer[i] === carriage && buffer[i + 1] === carriage) { + // \r\r + return i + 2; + } + if (buffer[i] === carriage && + buffer[i + 1] === newline && + i + 3 < buffer.length && + buffer[i + 2] === carriage && + buffer[i + 3] === newline) { + // \r\n\r\n + return i + 4; + } + } + return -1; +} +class SSEDecoder { + constructor() { + this.event = null; + this.data = []; + this.chunks = []; + } + decode(line) { + if (line.endsWith('\r')) { + line = line.substring(0, line.length - 1); + } + if (!line) { + // empty line and we didn't previously encounter any messages + if (!this.event && !this.data.length) + return null; + const sse = { + event: this.event, + data: this.data.join('\n'), + raw: this.chunks, + }; + this.event = null; + this.data = []; + this.chunks = []; + return sse; + } + this.chunks.push(line); + if (line.startsWith(':')) { + return null; + } + let [fieldname, _, value] = partition(line, ':'); + if (value.startsWith(' ')) { + value = value.substring(1); + } + if (fieldname === 'event') { + this.event = value; + } + else if (fieldname === 'data') { + this.data.push(value); + } + return null; + } +} +/** This is an internal helper function that's just used for testing */ +function _decodeChunks(chunks, { flush } = { flush: false }) { + const decoder = new line_1.LineDecoder(); + const lines = []; + for (const chunk of chunks) { + lines.push(...decoder.decode(chunk)); + } + if (flush) { + lines.push(...decoder.flush()); + } + return lines; +} +exports._decodeChunks = _decodeChunks; +function partition(str, delimiter) { + const index = str.indexOf(delimiter); + if (index !== -1) { + return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)]; + } + return [str, '', '']; +} +//# sourceMappingURL=streaming.js.map \ No newline at end of file diff --git a/vendor/sdk/streaming.js.map b/vendor/sdk/streaming.js.map new file mode 100644 index 0000000..1edbbdb --- /dev/null +++ b/vendor/sdk/streaming.js.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.js","sourceRoot":"","sources":["src/streaming.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/streaming.mjs b/vendor/sdk/streaming.mjs new file mode 100644 index 0000000..b2a57e2 --- /dev/null +++ b/vendor/sdk/streaming.mjs @@ -0,0 +1,310 @@ +import { ReadableStream } from "./_shims/index.mjs"; +import { AnthropicError } from "./error.mjs"; +import { LineDecoder } from "./internal/decoders/line.mjs"; +import { ReadableStreamToAsyncIterable } from "./internal/stream-utils.mjs"; +import { createResponseHeaders } from "./core.mjs"; +import { APIError } from "./error.mjs"; +export class Stream { + constructor(iterator, controller) { + this.iterator = iterator; + this.controller = controller; + } + static fromSSEResponse(response, controller) { + let consumed = false; + async function* iterator() { + if (consumed) { + throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.'); + } + consumed = true; + let done = false; + try { + for await (const sse of _iterSSEMessages(response, controller)) { + if (sse.event === 'completion') { + try { + yield JSON.parse(sse.data); + } + catch (e) { + console.error(`Could not parse message into JSON:`, sse.data); + console.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === 'message_start' || + sse.event === 'message_delta' || + sse.event === 'message_stop' || + sse.event === 'content_block_start' || + sse.event === 'content_block_delta' || + sse.event === 'content_block_stop') { + try { + yield JSON.parse(sse.data); + } + catch (e) { + console.error(`Could not parse message into JSON:`, sse.data); + console.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === 'ping') { + continue; + } + if (sse.event === 'error') { + throw APIError.generate(undefined, `SSE Error: ${sse.data}`, sse.data, createResponseHeaders(response.headers)); + } + } + done = true; + } + catch (e) { + // If the user calls `stream.controller.abort()`, we should exit without throwing. + if (e instanceof Error && e.name === 'AbortError') + return; + throw e; + } + finally { + // If the user `break`s, abort the ongoing request. + if (!done) + controller.abort(); + } + } + return new Stream(iterator, controller); + } + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(readableStream, controller) { + let consumed = false; + async function* iterLines() { + const lineDecoder = new LineDecoder(); + const iter = ReadableStreamToAsyncIterable(readableStream); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + yield line; + } + } + for (const line of lineDecoder.flush()) { + yield line; + } + } + async function* iterator() { + if (consumed) { + throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.'); + } + consumed = true; + let done = false; + try { + for await (const line of iterLines()) { + if (done) + continue; + if (line) + yield JSON.parse(line); + } + done = true; + } + catch (e) { + // If the user calls `stream.controller.abort()`, we should exit without throwing. + if (e instanceof Error && e.name === 'AbortError') + return; + throw e; + } + finally { + // If the user `break`s, abort the ongoing request. + if (!done) + controller.abort(); + } + } + return new Stream(iterator, controller); + } + [Symbol.asyncIterator]() { + return this.iterator(); + } + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee() { + const left = []; + const right = []; + const iterator = this.iterator(); + const teeIterator = (queue) => { + return { + next: () => { + if (queue.length === 0) { + const result = iterator.next(); + left.push(result); + right.push(result); + } + return queue.shift(); + }, + }; + }; + return [ + new Stream(() => teeIterator(left), this.controller), + new Stream(() => teeIterator(right), this.controller), + ]; + } + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream() { + const self = this; + let iter; + const encoder = new TextEncoder(); + return new ReadableStream({ + async start() { + iter = self[Symbol.asyncIterator](); + }, + async pull(ctrl) { + try { + const { value, done } = await iter.next(); + if (done) + return ctrl.close(); + const bytes = encoder.encode(JSON.stringify(value) + '\n'); + ctrl.enqueue(bytes); + } + catch (err) { + ctrl.error(err); + } + }, + async cancel() { + await iter.return?.(); + }, + }); + } +} +export async function* _iterSSEMessages(response, controller) { + if (!response.body) { + controller.abort(); + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + const sseDecoder = new SSEDecoder(); + const lineDecoder = new LineDecoder(); + const iter = ReadableStreamToAsyncIterable(response.body); + for await (const sseChunk of iterSSEChunks(iter)) { + for (const line of lineDecoder.decode(sseChunk)) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } + } + for (const line of lineDecoder.flush()) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } +} +/** + * Given an async iterable iterator, iterates over it and yields full + * SSE chunks, i.e. yields when a double new-line is encountered. + */ +async function* iterSSEChunks(iterator) { + let data = new Uint8Array(); + for await (const chunk of iterator) { + if (chunk == null) { + continue; + } + const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) + : typeof chunk === 'string' ? new TextEncoder().encode(chunk) + : chunk; + let newData = new Uint8Array(data.length + binaryChunk.length); + newData.set(data); + newData.set(binaryChunk, data.length); + data = newData; + let patternIndex; + while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) { + yield data.slice(0, patternIndex); + data = data.slice(patternIndex); + } + } + if (data.length > 0) { + yield data; + } +} +function findDoubleNewlineIndex(buffer) { + // This function searches the buffer for the end patterns (\r\r, \n\n, \r\n\r\n) + // and returns the index right after the first occurrence of any pattern, + // or -1 if none of the patterns are found. + const newline = 0x0a; // \n + const carriage = 0x0d; // \r + for (let i = 0; i < buffer.length - 2; i++) { + if (buffer[i] === newline && buffer[i + 1] === newline) { + // \n\n + return i + 2; + } + if (buffer[i] === carriage && buffer[i + 1] === carriage) { + // \r\r + return i + 2; + } + if (buffer[i] === carriage && + buffer[i + 1] === newline && + i + 3 < buffer.length && + buffer[i + 2] === carriage && + buffer[i + 3] === newline) { + // \r\n\r\n + return i + 4; + } + } + return -1; +} +class SSEDecoder { + constructor() { + this.event = null; + this.data = []; + this.chunks = []; + } + decode(line) { + if (line.endsWith('\r')) { + line = line.substring(0, line.length - 1); + } + if (!line) { + // empty line and we didn't previously encounter any messages + if (!this.event && !this.data.length) + return null; + const sse = { + event: this.event, + data: this.data.join('\n'), + raw: this.chunks, + }; + this.event = null; + this.data = []; + this.chunks = []; + return sse; + } + this.chunks.push(line); + if (line.startsWith(':')) { + return null; + } + let [fieldname, _, value] = partition(line, ':'); + if (value.startsWith(' ')) { + value = value.substring(1); + } + if (fieldname === 'event') { + this.event = value; + } + else if (fieldname === 'data') { + this.data.push(value); + } + return null; + } +} +/** This is an internal helper function that's just used for testing */ +export function _decodeChunks(chunks, { flush } = { flush: false }) { + const decoder = new LineDecoder(); + const lines = []; + for (const chunk of chunks) { + lines.push(...decoder.decode(chunk)); + } + if (flush) { + lines.push(...decoder.flush()); + } + return lines; +} +function partition(str, delimiter) { + const index = str.indexOf(delimiter); + if (index !== -1) { + return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)]; + } + return [str, '', '']; +} +//# sourceMappingURL=streaming.mjs.map \ No newline at end of file diff --git a/vendor/sdk/streaming.mjs.map b/vendor/sdk/streaming.mjs.map new file mode 100644 index 0000000..f81892c --- /dev/null +++ b/vendor/sdk/streaming.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.mjs","sourceRoot":"","sources":["src/streaming.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/uploads.d.ts b/vendor/sdk/uploads.d.ts new file mode 100644 index 0000000..55faa0c --- /dev/null +++ b/vendor/sdk/uploads.d.ts @@ -0,0 +1,75 @@ +import { type RequestOptions } from "./core.js"; +import { FormData, type Blob, type FilePropertyBag, type FsReadStream } from "./_shims/index.js"; +import { MultipartBody } from "./_shims/MultipartBody.js"; +export { fileFromPath } from "./_shims/index.js"; +type BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | Uint8Array | DataView; +export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | Uint8Array | DataView; +/** + * Typically, this is a native "File" class. + * + * We provide the {@link toFile} utility to convert a variety of objects + * into the File class. + * + * For convenience, you can also pass a fetch Response, or in Node, + * the result of fs.createReadStream(). + */ +export type Uploadable = FileLike | ResponseLike | FsReadStream; +/** + * Intended to match web.Blob, node.Blob, node-fetch.Blob, etc. + */ +export interface BlobLike { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */ + readonly size: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */ + readonly type: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */ + text(): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */ + slice(start?: number, end?: number): BlobLike; +} +/** + * Intended to match web.File, node.File, node-fetch.File, etc. + */ +export interface FileLike extends BlobLike { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */ + readonly lastModified: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */ + readonly name: string; +} +/** + * Intended to match web.Response, node.Response, node-fetch.Response, etc. + */ +export interface ResponseLike { + url: string; + blob(): Promise; +} +export declare const isResponseLike: (value: any) => value is ResponseLike; +export declare const isFileLike: (value: any) => value is FileLike; +/** + * The BlobLike type omits arrayBuffer() because @types/node-fetch@^2.6.4 lacks it; but this check + * adds the arrayBuffer() method type because it is available and used at runtime + */ +export declare const isBlobLike: (value: any) => value is BlobLike & { + arrayBuffer(): Promise; +}; +export declare const isUploadable: (value: any) => value is Uploadable; +export type ToFileInput = Uploadable | Exclude | AsyncIterable; +/** + * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats + * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s + * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible + * @param {Object=} options additional properties + * @param {string=} options.type the MIME type of the content + * @param {number=} options.lastModified the last modified timestamp + * @returns a {@link File} with the given properties + */ +export declare function toFile(value: ToFileInput | PromiseLike, name?: string | null | undefined, options?: FilePropertyBag | undefined): Promise; +export declare const isMultipartBody: (body: any) => body is MultipartBody; +/** + * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value. + * Otherwise returns the request as is. + */ +export declare const maybeMultipartFormRequestOptions: >(opts: RequestOptions) => Promise>; +export declare const multipartFormRequestOptions: >(opts: RequestOptions) => Promise>; +export declare const createForm: >(body: T | undefined) => Promise; +//# sourceMappingURL=uploads.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/uploads.d.ts.map b/vendor/sdk/uploads.d.ts.map new file mode 100644 index 0000000..227dc5f --- /dev/null +++ b/vendor/sdk/uploads.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["src/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EACL,QAAQ,EAER,KAAK,IAAI,EACT,KAAK,eAAe,EAEpB,KAAK,YAAY,EAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,KAAK,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC9F,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE7F;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,6EAA6E;IAC7E,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAE/C;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,UAAW,GAAG,0BAIP,CAAC;AAEnC,eAAO,MAAM,UAAU,UAAW,GAAG,sBAKlB,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,UAAU,UAAW,GAAG;mBAAwC,QAAQ,WAAW,CAAC;CAOxD,CAAC;AAE1C,eAAO,MAAM,YAAY,UAAW,GAAG,wBAEtC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;AAEnG;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,EAC7C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,GACpC,OAAO,CAAC,QAAQ,CAAC,CAiCnB;AAmDD,eAAO,MAAM,eAAe,SAAU,GAAG,0BACsD,CAAC;AAEhG;;;GAGG;AACH,eAAO,MAAM,gCAAgC,sGAO5C,CAAC;AAEF,eAAO,MAAM,2BAA2B,sGAKvC,CAAC;AAEF,eAAO,MAAM,UAAU,wDAA6D,QAAQ,QAAQ,CAInG,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/uploads.js b/vendor/sdk/uploads.js new file mode 100644 index 0000000..6daae95 --- /dev/null +++ b/vendor/sdk/uploads.js @@ -0,0 +1,171 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createForm = exports.multipartFormRequestOptions = exports.maybeMultipartFormRequestOptions = exports.isMultipartBody = exports.toFile = exports.isUploadable = exports.isBlobLike = exports.isFileLike = exports.isResponseLike = exports.fileFromPath = void 0; +const index_1 = require("./_shims/index.js"); +var index_2 = require("./_shims/index.js"); +Object.defineProperty(exports, "fileFromPath", { enumerable: true, get: function () { return index_2.fileFromPath; } }); +const isResponseLike = (value) => value != null && + typeof value === 'object' && + typeof value.url === 'string' && + typeof value.blob === 'function'; +exports.isResponseLike = isResponseLike; +const isFileLike = (value) => value != null && + typeof value === 'object' && + typeof value.name === 'string' && + typeof value.lastModified === 'number' && + (0, exports.isBlobLike)(value); +exports.isFileLike = isFileLike; +/** + * The BlobLike type omits arrayBuffer() because @types/node-fetch@^2.6.4 lacks it; but this check + * adds the arrayBuffer() method type because it is available and used at runtime + */ +const isBlobLike = (value) => value != null && + typeof value === 'object' && + typeof value.size === 'number' && + typeof value.type === 'string' && + typeof value.text === 'function' && + typeof value.slice === 'function' && + typeof value.arrayBuffer === 'function'; +exports.isBlobLike = isBlobLike; +const isUploadable = (value) => { + return (0, exports.isFileLike)(value) || (0, exports.isResponseLike)(value) || (0, index_1.isFsReadStream)(value); +}; +exports.isUploadable = isUploadable; +/** + * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats + * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s + * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible + * @param {Object=} options additional properties + * @param {string=} options.type the MIME type of the content + * @param {number=} options.lastModified the last modified timestamp + * @returns a {@link File} with the given properties + */ +async function toFile(value, name, options) { + // If it's a promise, resolve it. + value = await value; + // If we've been given a `File` we don't need to do anything + if ((0, exports.isFileLike)(value)) { + return value; + } + if ((0, exports.isResponseLike)(value)) { + const blob = await value.blob(); + name || (name = new URL(value.url).pathname.split(/[\\/]/).pop() ?? 'unknown_file'); + // we need to convert the `Blob` into an array buffer because the `Blob` class + // that `node-fetch` defines is incompatible with the web standard which results + // in `new File` interpreting it as a string instead of binary data. + const data = (0, exports.isBlobLike)(blob) ? [(await blob.arrayBuffer())] : [blob]; + return new index_1.File(data, name, options); + } + const bits = await getBytes(value); + name || (name = getName(value) ?? 'unknown_file'); + if (!options?.type) { + const type = bits[0]?.type; + if (typeof type === 'string') { + options = { ...options, type }; + } + } + return new index_1.File(bits, name, options); +} +exports.toFile = toFile; +async function getBytes(value) { + let parts = []; + if (typeof value === 'string' || + ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc. + value instanceof ArrayBuffer) { + parts.push(value); + } + else if ((0, exports.isBlobLike)(value)) { + parts.push(await value.arrayBuffer()); + } + else if (isAsyncIterableIterator(value) // includes Readable, ReadableStream, etc. + ) { + for await (const chunk of value) { + parts.push(chunk); // TODO, consider validating? + } + } + else { + throw new Error(`Unexpected data type: ${typeof value}; constructor: ${value?.constructor + ?.name}; props: ${propsForError(value)}`); + } + return parts; +} +function propsForError(value) { + const props = Object.getOwnPropertyNames(value); + return `[${props.map((p) => `"${p}"`).join(', ')}]`; +} +function getName(value) { + return (getStringFromMaybeBuffer(value.name) || + getStringFromMaybeBuffer(value.filename) || + // For fs.ReadStream + getStringFromMaybeBuffer(value.path)?.split(/[\\/]/).pop()); +} +const getStringFromMaybeBuffer = (x) => { + if (typeof x === 'string') + return x; + if (typeof Buffer !== 'undefined' && x instanceof Buffer) + return String(x); + return undefined; +}; +const isAsyncIterableIterator = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function'; +const isMultipartBody = (body) => body && typeof body === 'object' && body.body && body[Symbol.toStringTag] === 'MultipartBody'; +exports.isMultipartBody = isMultipartBody; +/** + * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value. + * Otherwise returns the request as is. + */ +const maybeMultipartFormRequestOptions = async (opts) => { + if (!hasUploadableValue(opts.body)) + return opts; + const form = await (0, exports.createForm)(opts.body); + return (0, index_1.getMultipartRequestOptions)(form, opts); +}; +exports.maybeMultipartFormRequestOptions = maybeMultipartFormRequestOptions; +const multipartFormRequestOptions = async (opts) => { + const form = await (0, exports.createForm)(opts.body); + return (0, index_1.getMultipartRequestOptions)(form, opts); +}; +exports.multipartFormRequestOptions = multipartFormRequestOptions; +const createForm = async (body) => { + const form = new index_1.FormData(); + await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value))); + return form; +}; +exports.createForm = createForm; +const hasUploadableValue = (value) => { + if ((0, exports.isUploadable)(value)) + return true; + if (Array.isArray(value)) + return value.some(hasUploadableValue); + if (value && typeof value === 'object') { + for (const k in value) { + if (hasUploadableValue(value[k])) + return true; + } + } + return false; +}; +const addFormValue = async (form, key, value) => { + if (value === undefined) + return; + if (value == null) { + throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); + } + // TODO: make nested formats configurable + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + form.append(key, String(value)); + } + else if ((0, exports.isUploadable)(value)) { + const file = await toFile(value); + form.append(key, file); + } + else if (Array.isArray(value)) { + await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry))); + } + else if (typeof value === 'object') { + await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop))); + } + else { + throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`); + } +}; +//# sourceMappingURL=uploads.js.map \ No newline at end of file diff --git a/vendor/sdk/uploads.js.map b/vendor/sdk/uploads.js.map new file mode 100644 index 0000000..7d7d7ae --- /dev/null +++ b/vendor/sdk/uploads.js.map @@ -0,0 +1 @@ +{"version":3,"file":"uploads.js","sourceRoot":"","sources":["src/uploads.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/uploads.mjs b/vendor/sdk/uploads.mjs new file mode 100644 index 0000000..7357361 --- /dev/null +++ b/vendor/sdk/uploads.mjs @@ -0,0 +1,158 @@ +import { FormData, File, getMultipartRequestOptions, isFsReadStream, } from "./_shims/index.mjs"; +export { fileFromPath } from "./_shims/index.mjs"; +export const isResponseLike = (value) => value != null && + typeof value === 'object' && + typeof value.url === 'string' && + typeof value.blob === 'function'; +export const isFileLike = (value) => value != null && + typeof value === 'object' && + typeof value.name === 'string' && + typeof value.lastModified === 'number' && + isBlobLike(value); +/** + * The BlobLike type omits arrayBuffer() because @types/node-fetch@^2.6.4 lacks it; but this check + * adds the arrayBuffer() method type because it is available and used at runtime + */ +export const isBlobLike = (value) => value != null && + typeof value === 'object' && + typeof value.size === 'number' && + typeof value.type === 'string' && + typeof value.text === 'function' && + typeof value.slice === 'function' && + typeof value.arrayBuffer === 'function'; +export const isUploadable = (value) => { + return isFileLike(value) || isResponseLike(value) || isFsReadStream(value); +}; +/** + * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats + * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s + * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible + * @param {Object=} options additional properties + * @param {string=} options.type the MIME type of the content + * @param {number=} options.lastModified the last modified timestamp + * @returns a {@link File} with the given properties + */ +export async function toFile(value, name, options) { + // If it's a promise, resolve it. + value = await value; + // If we've been given a `File` we don't need to do anything + if (isFileLike(value)) { + return value; + } + if (isResponseLike(value)) { + const blob = await value.blob(); + name || (name = new URL(value.url).pathname.split(/[\\/]/).pop() ?? 'unknown_file'); + // we need to convert the `Blob` into an array buffer because the `Blob` class + // that `node-fetch` defines is incompatible with the web standard which results + // in `new File` interpreting it as a string instead of binary data. + const data = isBlobLike(blob) ? [(await blob.arrayBuffer())] : [blob]; + return new File(data, name, options); + } + const bits = await getBytes(value); + name || (name = getName(value) ?? 'unknown_file'); + if (!options?.type) { + const type = bits[0]?.type; + if (typeof type === 'string') { + options = { ...options, type }; + } + } + return new File(bits, name, options); +} +async function getBytes(value) { + let parts = []; + if (typeof value === 'string' || + ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc. + value instanceof ArrayBuffer) { + parts.push(value); + } + else if (isBlobLike(value)) { + parts.push(await value.arrayBuffer()); + } + else if (isAsyncIterableIterator(value) // includes Readable, ReadableStream, etc. + ) { + for await (const chunk of value) { + parts.push(chunk); // TODO, consider validating? + } + } + else { + throw new Error(`Unexpected data type: ${typeof value}; constructor: ${value?.constructor + ?.name}; props: ${propsForError(value)}`); + } + return parts; +} +function propsForError(value) { + const props = Object.getOwnPropertyNames(value); + return `[${props.map((p) => `"${p}"`).join(', ')}]`; +} +function getName(value) { + return (getStringFromMaybeBuffer(value.name) || + getStringFromMaybeBuffer(value.filename) || + // For fs.ReadStream + getStringFromMaybeBuffer(value.path)?.split(/[\\/]/).pop()); +} +const getStringFromMaybeBuffer = (x) => { + if (typeof x === 'string') + return x; + if (typeof Buffer !== 'undefined' && x instanceof Buffer) + return String(x); + return undefined; +}; +const isAsyncIterableIterator = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function'; +export const isMultipartBody = (body) => body && typeof body === 'object' && body.body && body[Symbol.toStringTag] === 'MultipartBody'; +/** + * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value. + * Otherwise returns the request as is. + */ +export const maybeMultipartFormRequestOptions = async (opts) => { + if (!hasUploadableValue(opts.body)) + return opts; + const form = await createForm(opts.body); + return getMultipartRequestOptions(form, opts); +}; +export const multipartFormRequestOptions = async (opts) => { + const form = await createForm(opts.body); + return getMultipartRequestOptions(form, opts); +}; +export const createForm = async (body) => { + const form = new FormData(); + await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value))); + return form; +}; +const hasUploadableValue = (value) => { + if (isUploadable(value)) + return true; + if (Array.isArray(value)) + return value.some(hasUploadableValue); + if (value && typeof value === 'object') { + for (const k in value) { + if (hasUploadableValue(value[k])) + return true; + } + } + return false; +}; +const addFormValue = async (form, key, value) => { + if (value === undefined) + return; + if (value == null) { + throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); + } + // TODO: make nested formats configurable + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + form.append(key, String(value)); + } + else if (isUploadable(value)) { + const file = await toFile(value); + form.append(key, file); + } + else if (Array.isArray(value)) { + await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry))); + } + else if (typeof value === 'object') { + await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop))); + } + else { + throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`); + } +}; +//# sourceMappingURL=uploads.mjs.map \ No newline at end of file diff --git a/vendor/sdk/uploads.mjs.map b/vendor/sdk/uploads.mjs.map new file mode 100644 index 0000000..e5f3219 --- /dev/null +++ b/vendor/sdk/uploads.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"uploads.mjs","sourceRoot":"","sources":["src/uploads.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/sdk/version.d.ts b/vendor/sdk/version.d.ts new file mode 100644 index 0000000..5834c68 --- /dev/null +++ b/vendor/sdk/version.d.ts @@ -0,0 +1,2 @@ +export declare const VERSION = "0.36.3"; +//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/vendor/sdk/version.d.ts.map b/vendor/sdk/version.d.ts.map new file mode 100644 index 0000000..e072bdd --- /dev/null +++ b/vendor/sdk/version.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"} \ No newline at end of file diff --git a/vendor/sdk/version.js b/vendor/sdk/version.js new file mode 100644 index 0000000..7914f0b --- /dev/null +++ b/vendor/sdk/version.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +exports.VERSION = '0.36.3'; // x-release-please-version +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/vendor/sdk/version.js.map b/vendor/sdk/version.js.map new file mode 100644 index 0000000..e9a6b4f --- /dev/null +++ b/vendor/sdk/version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"version.js","sourceRoot":"","sources":["src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC,CAAC,2BAA2B"} \ No newline at end of file diff --git a/vendor/sdk/version.mjs b/vendor/sdk/version.mjs new file mode 100644 index 0000000..4836f71 --- /dev/null +++ b/vendor/sdk/version.mjs @@ -0,0 +1,2 @@ +export const VERSION = '0.36.3'; // x-release-please-version +//# sourceMappingURL=version.mjs.map \ No newline at end of file diff --git a/vendor/sdk/version.mjs.map b/vendor/sdk/version.mjs.map new file mode 100644 index 0000000..0c09c72 --- /dev/null +++ b/vendor/sdk/version.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"version.mjs","sourceRoot":"","sources":["src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,2BAA2B"} \ No newline at end of file diff --git a/yoga.wasm b/yoga.wasm new file mode 100644 index 0000000..7355265 Binary files /dev/null and b/yoga.wasm differ